[
  {
    "path": ".gitignore",
    "content": "*.xml\n*.pyc\n.idea/\n*.o\nmodels/CNN/pretrained_model/\ncheckpoint/\nlog/\npnt_vis/\n"
  },
  {
    "path": "README.md",
    "content": "# DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction  &nbsp;&nbsp;&nbsp; <img src=\"images/Adobe-Logos.png\" width=120px /><img src=\"images/USC-Logos.png\" width=120px />\n\n## (will incorporate latest updates)\n* ### We just released a rendered [datasets](https://github.com/Xharlie/ShapenetRender_more_variation) of Shapenet with more view variations that contains RGB, albedo, depth and normal 2D images. Rendering scripts for both v1 and v2 are available.\n\nPlease cite our paper\n[DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction (NeurIPS 2019)](https://arxiv.org/abs/1905.10711)\n\n``` \n@incollection{NIPS2019_8340,\ntitle = {DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction},\nauthor = {Xu, Qiangeng and Wang, Weiyue and Ceylan, Duygu and Mech, Radomir and Neumann, Ulrich},\nbooktitle = {Advances in Neural Information Processing Systems 32},\neditor = {H. Wallach and H. Larochelle and A. Beygelzimer and F. d\\textquotesingle Alch\\'{e}-Buc and E. Fox and R. Garnett},\npages = {492--502},\nyear = {2019},\npublisher = {Curran Associates, Inc.},\nurl = {http://papers.nips.cc/paper/8340-disn-deep-implicit-surface-network-for-high-quality-single-view-3d-reconstruction.pdf}\n}\n``` \nPrimary contact: [Qiangeng Xu*](https://xharlie.github.io/)\n\n<img src=\"images/result.png\"  />\n\n\n## System Requirements\n  * ### GPU: 1080Ti (Other models can consider decrease the batch size if overflow)\n  * ### system: Ubuntu 16.04 (if your linux version can support tensorflow 1.10, it's going to be ok)\n  * ### tensorflow 1.10(should be able to run with 1.11, 1.12,1.13)\n```\n    pip install trimesh==2.37.20\n```\n\n## Installation\n  ```\n    cd {DISN}\n    mkdir checkpoint\n    cd checkpoint\n    wget https://www.dropbox.com/s/2ts7qc9w4opl4w4/SDF_DISN.tar \n    ### or google drive: https://drive.google.com/file/d/1PEXVxXflVqWNqinSMC-hFmFdlMyoMZ7i/view?usp=sharing\n    ### or baidu yunpan: https://pan.baidu.com/s/1Zujo84JoTcTW5dUl0AvS_w   extraction code: esy9\n    tar -xvzf SDF_DISN.tar\n    rm -rf SDF_DISN.tar\n    cd ..\n    mkdir cam_est/checkpoint\n    cd cam_est/checkpoint\n    wget https://www.dropbox.com/s/hyv4lcvpfu0au9e/cam_DISN.tar\n    ### or google drive https://drive.google.com/file/d/1S5Gh_u1C9vDvksqXDn3CP6IqsnU0hKkj/view?usp=sharing\n    ### or baidu yunpan: https://pan.baidu.com/s/1lEHmSHA1o5lrswp0TM50qA   extraction code: gbb3\n    tar -xvzf cam_DISN.tar\n    rm -rf cam_DISN.tar\n    cd ../../\n    Install whatever libary(e.g. mkl) you don't have and change corresponding libary path in your system in isosurface/LIB_PATH\n  ```\n## Demo:\n * --sdf_res control the resolution of the sampled sdf, default is 64, the larger, the more fine-grained, but slower.\n  ```\n    cd {DISN}\n    source isosurface/LIB_PATH\n    nohup python -u demo/demo.py --cam_est --log_dir checkpoint/SDF_DISN --cam_log_dir cam_est/checkpoint/cam_DISN --img_feat_twostream --sdf_res 256 &> log/create_sdf.log &\n  ``` \n  The result is demo/result.obj.\n  if you have dependency problems such as your mkl lib, etc. Please install the corresponding dependencies and change the path in LIB_PATH. Everyone has his/her/their own environment setting so it's impossible to instruct this step without sitting besides you and your server.\n \n## Data Preparation\n\n* ### file location setup:\n  * under preprocessing/info.json, you can change the locations of your data: the neccessary dir for the main model are : \n   ```  \n        \"raw_dirs_v1\": {\n        \"mesh_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetCore.v1/\",\n        \"norm_mesh_dir\": \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/\",\n        \"rendered_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRendering/\",\n        \"renderedh5_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/\",\n        \"sdf_dir\": \"/ssd1/datasets/ShapeNet/SDF_v1/\"\n        }\n   ```\n  \n* ### Download ShapeNetCore.v1 \n  download the dataset following the instruction of https://www.shapenet.org/account/  (about 30GB)\n  \n  ```\n  cd {your download dir}\n  wget http://shapenet.cs.stanford.edu/shapenet/obj-zip/ShapeNetCore.v1.zip \n  unzip ShapeNetCore.v1.zip -d {your mesh_dir}\n  ```\n  \n* ### Prepare the SDF ground truth and the marching cube reconstructed ground truth models \n\n  Download our generated sdf tar.gz from [here](https://drive.google.com/file/d/1cHDickPLKLz3smQNpOGXD2W5mkXcy1nq/view?usp=sharing) then place it at your \"sdf_dir\" in json; and the marching cube reconstructed ground truth models from the sdf file from [here](https://drive.google.com/drive/folders/1QGhDW335L7ra31uw5U-0V7hB-viA0JXr?usp=sharing) then place it at your \"norm_mesh_dir\" in your json.\n\n  If you want to generate sdf files and the reconstructed models by yourself, please follow the command lines below (Please expect the script to run for several hours). This step used this paper [Vega: non-linear fem deformable object simulator](http://run.usc.edu/vega/SinSchroederBarbic2012.pdf). Please also cite it if you use our code to generate sdf files\n  ```\n  mkdir log\n  cd {DISN}\n  source isosurface/LIB_PATH\n  nohup python -u preprocessing/create_point_sdf_grid.py --thread_num {recommend 9} --category {default 'all', but can be single category like 'chair'} &> log/create_sdf.log &\n  \n  ## SDF folder takes about 9.0G, marching cube obj folder takes about 245G\n  \n  ```\n* ### Download and generate 2d image h5 files:\n  * #### download 2d image following 3DR2N2[https://github.com/chrischoy/3D-R2N2], please cite their paper if you use this image tar file:\n  \n  ```\n  wget http://cvgl.stanford.edu/data2/ShapeNetRendering.tgz\n  untar it to {your rendered_dir}\n  ```\n  * #### run h5 file generation (about 26 GB) :\n  \n  ```\n  cd {DISN}\n  nohup python -u preprocessing/create_img_h5.py &> log/create_imgh5.log &\n  ```\n\n##  Camera parameters estimation network\n\n* ### train the camera parameters estimation network:\n  ```\n  ### train the camera poses of the original rendered image dataset. \n    nohup python -u cam_est/train_sdf_cam.py --log_dir cam_est/checkpoint/{your training checkpoint dir} --gpu 0 --loss_mode 3D --learning_rate 2e-5 &> log/cam_3D_all.log &\n   \n  ### train the camera poses of the adding 2 more DoF augmented on the rendered image dataset. \n    nohup python -u cam_est/train_sdf_cam.py --log_dir cam_est/checkpoint/{your training checkpoint dir} --gpu 2 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 2 &> log/cam_3D_shift2_all.log &\n \n* ### if use new rendered 2d dataset:\n  ```\n  ### train the camera poses of the new rendered image dataset. \n   nohup python -u cam_est/train_sdf_cam.py --log_dir cam_est/checkpoint/{your checkpoint dir} --gpu 0 --loss_mode 3D --learning_rate 1e-4 --src_h5_dir {your new rendered images' h5 directory} --img_h 224 --img_w 224 &> log/cam_3D_easy.log & \n    \n  ```\n* ### create h5 file of image and estimated cam parameters:\n  ```\n  ＃＃＃　Create img_h5 to {renderedh5_dir_est} in your info.json, the default is only generate h5 of test images and cam parameters(about 5.3GB) \n  nohup python -u train_sdf_cam.py --img_h5_dir {renderedh5_dir_est} --create --restore_model checkpoint/cam_3D_all --log_dir checkpoint/{your training checkpoint dir} --gpu 0--loss_mode 3D --batch_size 24 &> log/create_cam_mixloss_all.log &\n  ```\n  \n## SDF generation network:\n\n* ### train the sdf generation with provided camera parameters:\n\n  if train from scratch, you can load official pretrained vgg_16 by setting --restore_modelcnn; or you can  --restore_model to your checkpoint to continue the training):\n\n  * support flip the background color from black to white since most online images have white background(by using --backcolorwhite)\n  * if use flag --cam_est, the img_h5 is loaded from {renderedh5_dir_est} instead of {renderedh5_dir}, so that we can train the generation on the estimated camera parameters\n  ```\n  nohup python -u train/train_sdf.py --gpu 0 --img_feat_twostream --restore_modelcnn ./models/CNN/pretrained_model/vgg_16.ckpt --log_dir checkpoint/{your training checkpoint dir} --category all --num_sample_points 2048 --batch_size 20 --learning_rate 0.0001 --cat_limit 36000 &> log/DISN_train_all.log &\n  ```\n\n* ### inference sdf and create mesh objects:\n\n  * will save objs in {your training checkpoint dir}/test_objs/{sdf_res+1}_{iso}\n  * will save objs in {your training checkpoint dir}/test_objs/{sdf_res+1}_{iso}\n  * if use estimated camera post, --cam_est, will save objs in {your training checkpoint dir}/test_objs/camest_{sdf_res+1}_{iso}\n  * if only create chair or a single category, --category {chair or a single category}\n  * --sdf_res control the resolution of the sampled sdf, default is 64, the larger, the more fine-grained, but slower.\n  ```\n  source isosurface/LIB_PATH\n\n  #### use ground truth camera pose\n  nohup python -u test/create_sdf.py --img_feat_twostream --view_num 24 --sdf_res 64 --batch_size 1  --gpu 0 --sdf_res 64 --log_dir checkpoint/{your training checkpoint dir} --iso 0.00 --category all  &> log/DISN_create_all.log &\n  \n  #### use estimated camera pose\n  nohup python -u test/create_sdf.py --img_feat_twostream --view_num 24 --sdf_res 64 --batch_size 1  --gpu 3 --sdf_res 64 --log_dir checkpoint/{your training checkpoint dir} --iso 0.00 --category all --cam_est &> log/DISN_create_all_cam.log &\n  ```\n* ### clean small objects:\n  * #### if the model doens't converge well, you can clean flying parts that generated by mistakes\n  ```\n  nohup python -u clean_smallparts.py --src_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --tar_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --thread_n 10 &> log/DISN_clean.log &\n  ```\n\n## Evaluation:\n### please compile models/tf_ops/ approxmatch and nn_distance and cites \"A Point Set Generation Network for 3D Object Reconstruction from a Single Image\"\n* ### Chamfer Distance and Earth Mover Distance:\n  * #### cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft\n  ```\n   nohup python -u test/test_cd_emd.py --img_feat_twostream --view_num 24 --num_sample_points 2048 --gpu 0 --batch_size 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all &> log/DISN_cd_emd_all.log & \n  ```\n* ### F-Score caluculation:\n  * cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft\n  also the threshold of true can be set, here we use 2.5 for default:\n  ```\n   nohup python -u test/test_f_score.py --img_feat_twostream --view_num 24 --num_sample_points 2048 --gpu 0 --batch_size 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all --truethreshold 2.5 &> log/DISN_fscore_2.5.log & \n  ```\n * ### IOU caluculation:\n    * cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft\n    * --dim specify the number of voxels along each 3D dimension.\n\n    ```\n      nohup python -u test/test_iou.py --img_feat_twostream --view_num 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all --dim 110 &> DISN_iou_all.log &\n    ```\n"
  },
  {
    "path": "cam_est/model_cam.py",
    "content": "import tensorflow as tf\nimport numpy as np\nimport os\nimport tensorflow.contrib.slim as slim\nfrom tensorflow.contrib.slim.python.slim.nets import vgg\nimport sys\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nROOT_DIR = os.path.dirname(BASE_DIR)\nsys.path.append(os.path.join(ROOT_DIR))\nsys.path.append(os.path.join(ROOT_DIR,'..'))\nsys.path.append(os.path.join(ROOT_DIR, 'models'))\nimport posenet\n\ndef placeholder_inputs(batch_size, num_points, img_size, num_pc=2018, num_sample_pc = 2048*8, scope=''):\n\n    with tf.variable_scope(scope) as sc:\n        pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_pc, 3))\n        sample_pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        sample_pc_rot_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        imgs_pl = tf.placeholder(tf.float32, shape=(batch_size, img_size[0], img_size[1], 3))\n        sdf_value_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 1))\n        sdf_sign_pl = tf.placeholder(tf.int32, shape=(batch_size, num_sample_pc))\n        trans_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))\n        norm_params_pl = tf.placeholder(tf.float32, shape=(batch_size, 4))\n        regress_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))\n        shifts_pl = tf.placeholder(tf.float32, shape=(batch_size, 2))\n\n        # camera intrinsic matrix\n        # np.array([[149.84375, 0., 68.5], [0., 149.84375, 68.5], [0., 0., 1.]], dtype=np.float32)\n        K = cal_K(img_size)#.T\n        K_pl = tf.constant(K)\n        K_pl = tf.expand_dims(K_pl, 0)    # Convert to a len(yp) x 1 matrix.\n        K_pl = tf.tile(K_pl, [batch_size, 1, 1])  # Create multiple columns.\n        K_pl = tf.transpose(K_pl, perm=[0, 2, 1])\n\n        rot_mat_inv = np.array([[1., 0.,  0., 0.],\n                               [0., 0.,  1., 0.],\n                               [0., -1., 0., 0.],\n                               [0., 0.,  0., 1.]], dtype=np.float32)\n        rot_mat_inv_pl = tf.constant(rot_mat_inv)\n        rot_mat_inv_pl = tf.expand_dims(rot_mat_inv_pl, 0)    # Convert to a len(yp) x 1 matrix.\n        rot_mat_inv_pl = tf.tile(rot_mat_inv_pl, [batch_size, 1, 1])  # Create multiple columns.\n    sdf = {}\n    sdf['pc'] = pc_pl\n    sdf['sample_pc'] = sample_pc_pl\n    sdf['sample_pc_rot'] = sample_pc_rot_pl\n    sdf['imgs'] = imgs_pl\n    sdf['sdf_value'] = sdf_value_pl\n    sdf['sdf_sign'] = sdf_sign_pl\n    sdf['trans_mat'] = trans_mat_pl\n    sdf['norm_params'] = norm_params_pl\n    sdf['regress_mat'] = regress_mat_pl\n    sdf['K'] = K_pl\n    sdf['rot_mat_inv'] = rot_mat_inv_pl\n    sdf['shifts'] = shifts_pl\n\n    return sdf\n\ndef cal_K(img_size):\n    F_MM = 35.  # Focal length\n    SENSOR_SIZE_MM = 32.\n    PIXEL_ASPECT_RATIO = 1.  # pixel_aspect_x / pixel_aspect_y\n    RESOLUTION_PCT = 100.\n    SKEW = 0.\n\n    # Calculate intrinsic matrix.\n    # 2 atan(35 / 2*32)\n    scale = RESOLUTION_PCT / 100\n    # print('scale', scale)\n    f_u = F_MM * img_size[1] * scale / SENSOR_SIZE_MM\n    f_v = F_MM * img_size[0] * scale * PIXEL_ASPECT_RATIO / SENSOR_SIZE_MM\n    # print('f_u', f_u, 'f_v', f_v)\n    u_0 = img_size[1] * scale / 2\n    v_0 = img_size[0] * scale / 2\n    K = np.matrix(((f_u, SKEW, u_0), (0, f_v, v_0), (0, 0, 1)), dtype=np.float32)\n    return K\n\n\ndef matrixize(xyz, batch_size):\n    padding = tf.eye(3, num_columns=4, batch_shape=[batch_size])\n    xyz1 = tf.expand_dims(tf.concat((xyz, tf.ones([batch_size, 1])), axis = 1), axis=1)\n    return tf.concat((padding,xyz1), axis=1)\n\ndef get_inverse_norm_matrix(norm_params, batch_size):\n    m = norm_params[:,3]\n    m_inv_padding = tf.multiply(tf.eye(3, num_columns=4, batch_shape=[batch_size]), m[:,tf.newaxis,tf.newaxis])\n    M_inv = tf.concat([m_inv_padding,\n       tf.concat([tf.zeros([batch_size, 1, 3]), tf.ones([batch_size, 1, 1])], axis= 2)], axis =1)\n    # M_inv =\n    #     [[m, 0., 0., 0.],\n    #      [0., m, 0., 0.],\n    #      [0., 0., m, 0.],\n    #      [0., 0., 0., 1.]]\n    #\n\n    T_inv_padding = tf.eye(3, num_columns=4, batch_shape=[batch_size])\n    xyz1 = tf.expand_dims(tf.concat((norm_params[:,:3], tf.ones([batch_size, 1])), axis=1), axis=1)\n    T_inv = tf.concat((T_inv_padding, xyz1), axis=1)\n    #\n    # T_inv =\n    #     [[1.0, 0., 0., 0],\n    #      [0., 1.0, 0., 0],\n    #      [0., 0., 1.0, 0],\n    #      [x., y., z., 1.]]\n    #\n    # print(M_inv.get_shape().as_list(), T_inv.get_shape().as_list())\n    return tf.matmul(M_inv, T_inv)\n\ndef get_model(ref_dict, num_point, is_training, bn=False, bn_decay=None, img_size = (137,137), wd=1e-5, FLAGS=None):\n\n    ref_img = ref_dict['imgs']\n    ref_pc = ref_dict['pc']\n    ref_sample_pc = ref_dict['sample_pc']\n    ref_sample_pc_rot = ref_dict['sample_pc_rot']\n    trans_mat = ref_dict['trans_mat']\n    K = ref_dict['K']\n    norm_params = ref_dict['norm_params']\n    rot_mat_inv = ref_dict['rot_mat_inv']\n    regress_mat = ref_dict['regress_mat']\n    gt_xyshift = ref_dict['shifts']\n\n    batch_size = ref_img.get_shape()[0].value\n    norm_mat_inv = get_inverse_norm_matrix(norm_params, batch_size)\n    # endpoints\n    end_points = {}\n    end_points['ref_pc'] = ref_pc\n    end_points['regress_mat'] = regress_mat\n    end_points['K'] = K\n    end_points['gt_xyshift'] = gt_xyshift\n    end_points['trans_mat'] = trans_mat\n    end_points['sample_pc'] = ref_sample_pc #* 10\n\n    # Image extract features\n    if ref_img.shape[1] != 224 or ref_img.shape[2] != 224:\n        ref_img = tf.image.resize_bilinear(ref_img, [224, 224])\n    else:\n        print(\"image size:\", img_size)\n    end_points['ref_img'] = ref_img\n\n    # vgg.vgg_16.default_image_size = (224, 224)\n    with slim.arg_scope([slim.conv2d],\n                         weights_regularizer=slim.l2_regularizer(wd)):\n        ref_feats_embedding, vgg_end_points = vgg.vgg_16(ref_img, num_classes=1024, is_training=False, scope='vgg_16', spatial_squeeze=False)\n        ref_feats_embedding_cnn = tf.squeeze(ref_feats_embedding, axis = [1,2]) \n    end_points['embedding'] = ref_feats_embedding_cnn\n    print(vgg_end_points.keys())\n\n    with tf.variable_scope(\"cameraprediction\") as scope:\n        if FLAGS.shift:\n            pred_rotation, pred_translation, pred_RT, pred_xyshift = posenet.get_cam_mat_shft(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)\n            end_points['pred_rotation'] = pred_rotation\n            end_points['pred_translation'] = pred_translation\n            end_points['pred_RT'] = pred_RT\n            end_points['pred_xyshift'] = pred_xyshift\n        elif FLAGS.space_shift:\n            pred_rotation, pred_translation, pred_RT, predxyzshift = posenet.get_cam_mat_spaceshft(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)\n            end_points['pred_rotation'] = pred_rotation\n            end_points['pred_translation'] = pred_translation\n            end_points['pred_RT'] = pred_RT\n            end_points['pred_xyshift'] = None\n            pred_xyshift = None\n        else:\n            pred_rotation, pred_translation, pred_RT = posenet.get_cam_mat(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)\n            end_points['pred_rotation'] = pred_rotation\n            end_points['pred_translation'] = pred_translation\n            end_points['pred_RT'] = pred_RT\n            end_points['pred_xyshift'] = None\n            pred_xyshift = None\n\n    print('trans_mat', trans_mat.shape)\n    sample_img_points, gt_xy = get_img_points(ref_sample_pc, trans_mat, gt_xyshift, FLAGS, img_size=img_size)\n    end_points['sample_img_points'] = sample_img_points\n    end_points['gt_xy'] = gt_xy\n\n    # K, RT, rot_mat, W2O_mat, norm_mat, pred_transmat = inverse norm_mat * inverse W2O_mat * inverse rot_mat * pred_RT * K inverse\n    if FLAGS.space_shift:\n        pred_regress_mat = norm_mat_inv @ predxyzshift @ rot_mat_inv @ pred_RT\n    else:\n        pred_regress_mat = norm_mat_inv @ rot_mat_inv @ pred_RT\n    pred_trans_mat = pred_regress_mat @ K\n    pred_sample_img_points, pred_xy = get_img_points(ref_sample_pc, pred_trans_mat, pred_xyshift, FLAGS, img_size=img_size)\n    end_points['pred_sample_img_points'] = pred_sample_img_points\n    end_points['pred_trans_mat'] = pred_trans_mat\n    end_points['pred_regress_mat'] = pred_regress_mat\n    end_points['pred_xy'] = pred_xy\n    print(\"gt_xy, pred_xy\", gt_xy.get_shape(), pred_xy.get_shape())\n    return end_points\n\ndef get_img_points(sample_pc, trans_mat_right, pred_xyshift, FLAGS, img_size = (137,137)):\n    # sample_pc B*N*3\n    size_lst = sample_pc.get_shape().as_list()\n    homo_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)\n    print(\"homo_pc.get_shape()\", homo_pc.get_shape())\n    pc_xyz = tf.matmul(homo_pc, trans_mat_right)\n    print(\"pc_xyz.get_shape()\", pc_xyz.get_shape()) # B * N * 3\n    pc_xy = tf.cast(tf.divide(pc_xyz[:,:,:2], tf.expand_dims(pc_xyz[:,:,2], axis = 2)), dtype=tf.float32)\n    if FLAGS.shift:\n        pc_xy = pc_xy + tf.tile(tf.expand_dims(pred_xyshift / 2 * FLAGS.img_h, axis=1), (1,FLAGS.num_points,1))\n    mintensor = tf.constant([0.0,0.0], dtype=tf.float32)\n    maxtensor = tf.constant([img_size[0]-1, img_size[1]-1], dtype=tf.float32)\n    return tf.minimum(maxtensor, tf.maximum(mintensor, pc_xy)), pc_xy\n\ndef get_loss(end_points, sdf_weight=10., regularization=True, FLAGS=None):\n    \"\"\" sigmoid loss+sdf value\"\"\"\n\n    sample_pc = end_points['sample_pc']\n    regress_mat = end_points['regress_mat']\n    pred_regress_mat = end_points['pred_regress_mat']\n    pred_RT = end_points['pred_RT']\n    sample_img_points = end_points['sample_img_points']\n    pred_sample_img_points = end_points['pred_sample_img_points']\n    pred_xy = end_points['pred_xy']\n    pred_xyshift = end_points['pred_xyshift']\n    gt_xyshift = end_points['gt_xyshift']\n    gt_xy = end_points['gt_xy']\n    pred_trans_mat = end_points['pred_trans_mat']\n    trans_mat = end_points['trans_mat']\n    loss = 0.\n    # K = end_points['K']\n    # pred_rotation = end_points['pred_rotation']\n    # pred_translation = end_points['pred_translation']\n    # trans_cam = end_points['trans_mat']\n\n    ################\n    # Compute loss #\n    ################\n    end_points['losses'] = {}\n    end_points['results'] = {}\n\n    ########### camera loss\n    ##point cloud rotation error\n    size_lst = sample_pc.get_shape().as_list()\n    homo_sample_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)\n    sub_3d = tf.matmul(homo_sample_pc, pred_regress_mat) - tf.matmul(homo_sample_pc, regress_mat)\n    rotpc_loss = tf.reduce_mean(tf.nn.l2_loss(sub_3d))\n    rot2d_loss = tf.reduce_mean(tf.nn.l2_loss(pred_xy - gt_xy)) / 10000.\n    rot2d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sample_img_points - pred_sample_img_points), axis = -1)), axis=1)\n    rot2d_dist = tf.reduce_mean(rot2d_dist_all)\n    rot3d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sub_3d), axis = -1)), axis=1)\n    rot3d_dist = tf.reduce_mean(rot3d_dist_all)\n    rotmatrix_loss = tf.reduce_mean((tf.square((pred_trans_mat-trans_mat))))\n    end_points['rot_homopc'] = tf.matmul(homo_sample_pc, regress_mat)\n    end_points['pred_rot_homopc'] = tf.matmul(homo_sample_pc, pred_regress_mat)\n    rotpc_loss = rotpc_loss #* 100\n    end_points['losses']['rotpc_loss'] = rotpc_loss\n    end_points['losses']['rot2d_loss'] = rot2d_loss\n    end_points['losses']['rot3d_dist'] = rot3d_dist\n    end_points['losses']['rot2d_dist'] = rot2d_dist\n    end_points['losses']['rotmatrix_loss'] = rotmatrix_loss\n    end_points['results']['rot2d_dist_all'] = rot2d_dist_all\n    end_points['results']['rot3d_dist_all'] = rot3d_dist_all\n    if FLAGS.loss_mode == \"3D\":\n        loss += rotpc_loss\n    elif FLAGS.loss_mode == \"2D\":\n        loss += rot2d_loss\n    elif FLAGS.loss_mode == \"3DM\":\n        loss += rotpc_loss + rotmatrix_loss * 0.3\n    elif FLAGS.loss_mode == \"23D\":\n        loss += (rotpc_loss + rot2d_loss * 0.1)\n    else:\n        loss += (rot2d_loss + rotpc_loss + rotmatrix_loss)\n    if FLAGS.shift:\n        shiftxy_loss = tf.reduce_mean(tf.nn.l2_loss(gt_xyshift - pred_xyshift))\n        end_points['losses']['shiftxy_loss'] = shiftxy_loss\n        loss+= shiftxy_loss * FLAGS.shift_weight\n    # ## rotation geodesic distance loss\n    # geodist = posenet.compute_geodesic_distance_from_two_matrices(pred_rotation, RT[:,:3,:])\n    # geodist_loss = tf.reduce_mean(tf.nn.l2_loss(geodist))\n    # geodist_loss = geodist_loss\n    # end_points['losses']['geodist_loss'] = geodist_loss\n    # loss += geodist_loss\n\n    # ## rotation mat loss\n    # rot_loss = tf.reduce_mean(tf.nn.l2_loss(pred_rotation - RT[:,:3,:]))\n    # rot_loss = 100 * rot_loss\n    # end_points['losses']['rot_loss'] = rot_loss\n    # loss += rot_loss\n\n    # ## rotation mat differencel loss\n    # rot_mat_diff = tf.matmul(pred_rotation, tf.transpose(RT[:,:3,:], perm=[0,2,1]))\n    # end_points['rot_mat_diff'] = rot_mat_diff\n    # rot_mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)\n    # rot_mat_diff_loss = tf.reduce_mean(tf.nn.l2_loss(rot_mat_diff))\n    # rot_mat_diff_loss = 100 * rot_mat_diff_loss\n    # end_points['losses']['rot_mat_diff'] = rot_mat_diff_loss\n    # loss += rot_mat_diff_loss\n\n    # trans_loss = tf.reduce_mean(tf.abs(pred_translation - RT[:,3,:]))\n    # trans_loss = 100 * trans_loss\n    # end_points['losses']['trans_loss'] = trans_loss\n    # loss += trans_loss\n\n    # cam_loss = tf.reduce_mean(tf.abs(pred_RT - RT))\n    # cam_loss = 100 * cam_loss\n\n    # end_points['losses']['rot_loss'] = rot_loss\n    # end_points['losses']['cam_loss'] = cam_loss\n    # cam_loss = rot_mat_diff + trans_loss\n    # loss += cam_loss\n\n    # cam_loss = tf.reduce_mean(tf.abs(pred_cam - RT))\n    # end_points['losses']['cam_loss'] = cam_loss\n    # loss += cam_loss\n\n    # mat_diff = tf.matmul(pred_rotation, tf.transpose(pred_rotation, perm=[0,2,1]))\n    # mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)\n    # mat_diff_loss = tf.nn.l2_loss(mat_diff) \n    # end_points['losses']['mat_diff_loss'] = mat_diff_loss\n    # loss += mat_diff_loss\n\n    ############### weight decay\n    if regularization:\n        vgg_regularization_loss = tf.add_n(slim.losses.get_regularization_losses())\n        # decoder_regularization_loss = tf.add_n(tf.get_collection('regularizer'))\n        end_points['losses']['regularization'] = vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)\n        loss += vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)\n\n    end_points['losses']['overall_loss'] = loss\n\n    return loss, end_points\n\n"
  },
  {
    "path": "cam_est/model_cam_old.py",
    "content": "import tensorflow as tf\nimport numpy as np\nimport os\nimport tensorflow.contrib.slim as slim\nfrom tensorflow.contrib.slim.python.slim.nets import vgg\nimport sys\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nROOT_DIR = os.path.dirname(BASE_DIR)\nsys.path.append(os.path.join(ROOT_DIR))\nsys.path.append(os.path.join(ROOT_DIR,'..'))\nsys.path.append(os.path.join(ROOT_DIR , 'models'))\nimport posenet_old as posenet\n\ndef placeholder_inputs(batch_size, num_points, img_size, num_pc=2018, num_sample_pc = 2048*8, scope=''):\n\n    with tf.variable_scope(scope) as sc:\n        pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_pc, 3))\n        sample_pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        sample_pc_rot_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        imgs_pl = tf.placeholder(tf.float32, shape=(batch_size, img_size[0], img_size[1], 3))\n        sdf_value_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 1))\n        sdf_sign_pl = tf.placeholder(tf.int32, shape=(batch_size, num_sample_pc))\n        trans_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))\n        RT_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))\n        shifts_pl = tf.placeholder(tf.float32, shape=(batch_size, 2))\n\n        # camera intrinsic matrix\n        K = np.array([[149.84375, 0., 68.5],[0., 149.84375, 68.5],[0., 0., 1.]], dtype=np.float32)#.T\n        K_pl = tf.constant(K)\n        K_pl = tf.expand_dims(K_pl, 0)    # Convert to a len(yp) x 1 matrix.\n        K_pl = tf.tile(K_pl, [batch_size, 1, 1])  # Create multiple columns.\n\n    sdf = {}\n    sdf['pc'] = pc_pl\n    sdf['sample_pc'] = sample_pc_pl\n    sdf['sample_pc_rot'] = sample_pc_rot_pl\n    sdf['imgs'] = imgs_pl\n    sdf['sdf_value'] = sdf_value_pl\n    sdf['sdf_sign'] = sdf_sign_pl\n    sdf['trans_mat'] = trans_mat_pl\n    sdf['RT'] = RT_mat_pl\n    sdf['K'] = K_pl\n    sdf['shifts'] = shifts_pl\n\n    return sdf\n\ndef get_model(ref_dict, num_point, is_training, bn=False, bn_decay=None, img_size = (137,137), wd=1e-5, FLAGS=None):\n\n    ref_img = ref_dict['imgs']\n    ref_pc = ref_dict['pc']\n    ref_sample_pc = ref_dict['sample_pc']\n    ref_sample_pc_rot = ref_dict['sample_pc_rot']\n    trans_mat = ref_dict['trans_mat']\n    K = ref_dict['K']\n    RT = ref_dict['RT']\n    gt_xyshift = ref_dict['shifts']\n\n    batch_size = ref_img.get_shape()[0].value\n\n    # endpoints\n    end_points = {}\n    end_points['ref_pc'] = ref_pc\n    end_points['RT'] = RT\n    end_points['K'] = K\n    end_points['gt_xyshift'] = gt_xyshift\n    end_points['trans_mat'] = trans_mat\n    end_points['sample_pc'] = ref_sample_pc #* 10\n\n    # Image extract features\n    if ref_img.shape[1] != 224 or ref_img.shape[2] != 224:\n        ref_img = tf.image.resize_bilinear(ref_img, [224, 224])\n    end_points['ref_img'] = ref_img\n\n    # vgg.vgg_16.default_image_size = (224, 224)\n    with slim.arg_scope([slim.conv2d],\n                         weights_regularizer=slim.l2_regularizer(wd)):\n        ref_feats_embedding, vgg_end_points = vgg.vgg_16(ref_img, num_classes=1024, is_training=False, scope='vgg_16', spatial_squeeze=False)\n        ref_feats_embedding_cnn = tf.squeeze(ref_feats_embedding, axis = [1,2]) \n    end_points['embedding'] = ref_feats_embedding_cnn\n    print(vgg_end_points.keys())\n\n    with tf.variable_scope(\"cameraprediction\") as scope:\n        if FLAGS.shift:\n            pred_rotation, pred_translation, pred_RT, pred_xyshift = posenet.get_cam_mat_shft(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)\n            end_points['pred_rotation'] = pred_rotation\n            end_points['pred_translation'] = pred_translation\n            end_points['pred_RT'] = pred_RT\n            end_points['pred_xyshift'] = pred_xyshift\n        else:\n            pred_rotation, pred_translation, pred_RT = posenet.get_cam_mat(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)\n            end_points['pred_rotation'] = pred_rotation\n            end_points['pred_translation'] = pred_translation\n            end_points['pred_RT'] = pred_RT\n            end_points['pred_xyshift'] = None\n            pred_xyshift = None\n\n    print('trans_mat', trans_mat.shape)\n    sample_img_points, gt_xy = get_img_points(ref_sample_pc, trans_mat, gt_xyshift, FLAGS)\n    end_points['sample_img_points'] = sample_img_points\n    end_points['gt_xy'] = gt_xy\n\n    K_transpose = tf.transpose(K, perm=[0, 2, 1])\n    pred_trans_mat = tf.matmul(pred_RT, K_transpose)\n    pred_sample_img_points, pred_xy = get_img_points(ref_sample_pc, pred_trans_mat, pred_xyshift, FLAGS)\n    end_points['pred_sample_img_points'] = pred_sample_img_points\n    end_points['pred_trans_mat'] = pred_trans_mat\n    end_points['pred_xy'] = pred_xy\n    print(\"gt_xy, pred_xy\", gt_xy.get_shape(), pred_xy.get_shape())\n    return end_points\n\ndef get_img_points(sample_pc, trans_mat_right, pred_xyshift, FLAGS):\n    # sample_pc B*N*3\n    size_lst = sample_pc.get_shape().as_list()\n    homo_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)\n    print(\"homo_pc.get_shape()\", homo_pc.get_shape())\n    pc_xyz = tf.matmul(homo_pc, trans_mat_right)\n    print(\"pc_xyz.get_shape()\", pc_xyz.get_shape()) # B * N * 3\n    pc_xy = tf.cast(tf.divide(pc_xyz[:,:,:2], tf.expand_dims(pc_xyz[:,:,2], axis = 2)), dtype=tf.float32)\n    if FLAGS.shift:\n        pc_xy = pc_xy + tf.tile(tf.expand_dims(pred_xyshift / 2 * FLAGS.img_h, axis=1), (1,FLAGS.num_points,1))\n    mintensor = tf.constant([0.0,0.0], dtype=tf.float32)\n    maxtensor = tf.constant([136.0,136.0], dtype=tf.float32)\n    return tf.minimum(maxtensor, tf.maximum(mintensor, pc_xy)), pc_xy\n\ndef get_loss(end_points, sdf_weight=10., regularization=True, FLAGS=None):\n    \"\"\" sigmoid loss+sdf value\"\"\"\n\n    sample_pc = end_points['sample_pc']\n    RT = end_points['RT']\n    pred_RT = end_points['pred_RT']\n    sample_img_points = end_points['sample_img_points']\n    pred_sample_img_points = end_points['pred_sample_img_points']\n    pred_xy = end_points['pred_xy']\n    pred_xyshift = end_points['pred_xyshift']\n    gt_xyshift = end_points['gt_xyshift']\n    gt_xy = end_points['gt_xy']\n    pred_trans_mat = end_points['pred_trans_mat']\n    trans_mat = end_points['trans_mat']\n    loss = 0.\n    # K = end_points['K']\n    # pred_rotation = end_points['pred_rotation']\n    # pred_translation = end_points['pred_translation']\n    # trans_cam = end_points['trans_mat']\n\n    ################\n    # Compute loss #\n    ################\n    end_points['losses'] = {}\n    end_points['results'] = {}\n\n    ########### camera loss\n    ##point cloud rotation error\n    size_lst = sample_pc.get_shape().as_list()\n    homo_sample_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)\n    sub_3d = tf.matmul(homo_sample_pc, pred_RT) - tf.matmul(homo_sample_pc, RT)\n    rotpc_loss = tf.reduce_mean(tf.nn.l2_loss(sub_3d))\n    rot2d_loss = tf.reduce_mean(tf.nn.l2_loss(pred_xy - gt_xy)) / 10000.\n    rot2d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sample_img_points - pred_sample_img_points), axis = -1)), axis=1)\n    rot2d_dist = tf.reduce_mean(rot2d_dist_all)\n    rot3d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sub_3d), axis = -1)), axis=1)\n    rot3d_dist = tf.reduce_mean(rot3d_dist_all)\n    rotmatrix_loss = tf.reduce_mean((tf.square((pred_trans_mat-trans_mat))))\n    end_points['rot_homopc'] = tf.matmul(homo_sample_pc, RT)\n    end_points['pred_rot_homopc'] = tf.matmul(homo_sample_pc, pred_RT)\n    rotpc_loss = rotpc_loss #* 100\n    end_points['losses']['rotpc_loss'] = rotpc_loss\n    end_points['losses']['rot2d_loss'] = rot2d_loss\n    end_points['losses']['rot3d_dist'] = rot3d_dist\n    end_points['losses']['rot2d_dist'] = rot2d_dist\n    end_points['losses']['rotmatrix_loss'] = rotmatrix_loss\n    end_points['results']['rot2d_dist_all'] = rot2d_dist_all\n    end_points['results']['rot3d_dist_all'] = rot3d_dist_all\n    if FLAGS.loss_mode == \"3D\":\n        loss += rotpc_loss\n    elif FLAGS.loss_mode == \"2D\":\n        loss += rot2d_loss\n    elif FLAGS.loss_mode == \"3DM\":\n        loss += rotpc_loss + rotmatrix_loss * 0.3\n    else:\n        loss += rot2d_loss + rotpc_loss + rotmatrix_loss\n    if FLAGS.shift:\n        shiftxy_loss = tf.reduce_mean(tf.nn.l2_loss(gt_xyshift - pred_xyshift))\n        end_points['losses']['shiftxy_loss'] = shiftxy_loss\n        loss+= shiftxy_loss * FLAGS.shift_weight\n    # ## rotation geodesic distance loss\n    # geodist = posenet.compute_geodesic_distance_from_two_matrices(pred_rotation, RT[:,:3,:])\n    # geodist_loss = tf.reduce_mean(tf.nn.l2_loss(geodist))\n    # geodist_loss = geodist_loss\n    # end_points['losses']['geodist_loss'] = geodist_loss\n    # loss += geodist_loss\n\n    # ## rotation mat loss\n    # rot_loss = tf.reduce_mean(tf.nn.l2_loss(pred_rotation - RT[:,:3,:]))\n    # rot_loss = 100 * rot_loss\n    # end_points['losses']['rot_loss'] = rot_loss\n    # loss += rot_loss\n\n    # ## rotation mat differencel loss\n    # rot_mat_diff = tf.matmul(pred_rotation, tf.transpose(RT[:,:3,:], perm=[0,2,1]))\n    # end_points['rot_mat_diff'] = rot_mat_diff\n    # rot_mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)\n    # rot_mat_diff_loss = tf.reduce_mean(tf.nn.l2_loss(rot_mat_diff))\n    # rot_mat_diff_loss = 100 * rot_mat_diff_loss\n    # end_points['losses']['rot_mat_diff'] = rot_mat_diff_loss\n    # loss += rot_mat_diff_loss\n\n    # trans_loss = tf.reduce_mean(tf.abs(pred_translation - RT[:,3,:]))\n    # trans_loss = 100 * trans_loss\n    # end_points['losses']['trans_loss'] = trans_loss\n    # loss += trans_loss\n\n    # cam_loss = tf.reduce_mean(tf.abs(pred_RT - RT))\n    # cam_loss = 100 * cam_loss\n\n    # end_points['losses']['rot_loss'] = rot_loss\n    # end_points['losses']['cam_loss'] = cam_loss\n    # cam_loss = rot_mat_diff + trans_loss\n    # loss += cam_loss\n\n    # cam_loss = tf.reduce_mean(tf.abs(pred_cam - RT))\n    # end_points['losses']['cam_loss'] = cam_loss\n    # loss += cam_loss\n\n    # mat_diff = tf.matmul(pred_rotation, tf.transpose(pred_rotation, perm=[0,2,1]))\n    # mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)\n    # mat_diff_loss = tf.nn.l2_loss(mat_diff) \n    # end_points['losses']['mat_diff_loss'] = mat_diff_loss\n    # loss += mat_diff_loss\n\n    ############### weight decay\n    if regularization:\n        vgg_regularization_loss = tf.add_n(slim.losses.get_regularization_losses())\n        # decoder_regularization_loss = tf.add_n(tf.get_collection('regularizer'))\n        end_points['losses']['regularization'] = vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)\n        loss += vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)\n\n    end_points['losses']['overall_loss'] = loss\n\n    return loss, end_points\n"
  },
  {
    "path": "cam_est/train_sdf_cam.py",
    "content": "import argparse\nimport math\nfrom datetime import datetime\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport importlib\nimport os\nimport cv2\nimport sys\nimport h5py\nimport time\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\nBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\nprint(os.path.join(os.path.dirname(BASE_DIR), 'data'))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nprint(os.path.join(BASE_DIR, 'preprocessing'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nprint(os.path.join(BASE_DIR, 'data'))\nimport model_cam as model\nimport data_sdf_h5_queue_mask_imgh5_cammat as data\nimport create_file_lst\n\nslim = tf.contrib.slim\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--gpu', type=str, default='2', help='GPU to use [default: GPU 0]')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--log_dir', default='checkpoint/sdf_2d_twostream_cam_pcrot_all', help='Log dir [default: log]')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number [default: 2048]')\nparser.add_argument('--max_epoch', type=int, default=200, help='Epoch to run [default: 201]')\nparser.add_argument('--batch_size', type=int, default=32, help='Batch Size during training [default: 32]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--verbose_freq', type=int, default=100, help='verbose frequency')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--momentum', type=float, default=0.9, help='Initial learning rate [default: 0.9]')\nparser.add_argument('--optimizer', default='adam', help='adam or momentum [default: adam]')\nparser.add_argument('--restore_model', default='', help='restore_model')\nparser.add_argument('--restore_modelpn', default='', help='restore_model')#checkpoint/sdf_3dencoder_sdfbasic2/latest.ckpt\nparser.add_argument('--restore_modelcnn', default='', help='restore_model')#../../models/CNN/pretrained_model/vgg_16.ckpt\nparser.add_argument('--rotation', action='store_true', help='Disable random rotation during training.')\nparser.add_argument('--sample', action='store_false', help='Disable sample during training.')\nparser.add_argument('--img_feat', action='store_false', help='Disable sample during training.')\nparser.add_argument('--splitvalid', action='store_true', help='Disable sample during training.')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--loss_mode', type=str, default=\"3D\", help='loss on 3D points or 2D points')\nparser.add_argument('--test', action=\"store_true\")\nparser.add_argument('--create', action=\"store_true\")\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--img_h5_dir', type=str, default=raw_dirs[\"renderedh5_dir_est\"], help=\"where to save img_h5\")\nparser.add_argument('--src_h5_dir', type=str, default=raw_dirs['renderedh5_dir'], help=\"where to read src img_h5\")\nparser.add_argument('--shift', action=\"store_true\")\nparser.add_argument('--shift_weight', type=float, default=0.5)\nparser.add_argument('--space_shift', action=\"store_true\")\nparser.add_argument('--wd', type=float, default=2e-3, help='Decay rate for lr decay [default: 0.7]')\n\nFLAGS = parser.parse_args()\n\nEPOCH_CNT = 0\n\nBATCH_SIZE = FLAGS.batch_size\nNUM_POINTS = FLAGS.num_points\nNUM_SAMPLE_POINTS = FLAGS.num_sample_points\nMAX_EPOCH = FLAGS.max_epoch\nBASE_LEARNING_RATE = FLAGS.learning_rate\nGPU_INDEX = FLAGS.gpu\nMOMENTUM = FLAGS.momentum\nOPTIMIZER = FLAGS.optimizer\nDECAY_STEP = FLAGS.decay_step\nDECAY_RATE = FLAGS.decay_rate\nPRETRAINED_MODEL_PATH = FLAGS.restore_model\nPRETRAINED_CNN_MODEL_FILE = FLAGS.restore_modelcnn\nPRETRAINED_PN_MODEL_FILE = FLAGS.restore_modelpn\nLOG_DIR = FLAGS.log_dir\nVV=False\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'train_results')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\n\nVALID_RESULT_PATH = os.path.join(LOG_DIR, 'valid_results_'+str(time.time()))\nTEST_RESULT_PATH = os.path.join(LOG_DIR, 'test_results_'+str(time.time()))\nif not os.path.exists(VALID_RESULT_PATH): os.mkdir(VALID_RESULT_PATH)\nif not os.path.exists(TEST_RESULT_PATH): os.mkdir(TEST_RESULT_PATH)\n\nos.system('cp %s.py %s' % (os.path.splitext(model.__file__)[0], LOG_DIR))\nos.system('cp %s.py %s' % (os.path.splitext(__file__)[0], LOG_DIR))\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_train_%s.txt' % str(datetime.now())), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nBN_INIT_DECAY = 0.5\nBN_DECAY_DECAY_RATE = 0.5\nBN_DECAY_DECAY_STEP = float(DECAY_STEP)\nBN_DECAY_CLIP = 0.99\nIMG_SIZE = FLAGS.img_h\nSDF_WEIGHT = 10.\n\nHOSTNAME = socket.gethostname()\nTRAIN_LISTINFO = []\nTEST_LISTINFO = []\n\n# \"chair\": \"03001627\",\n# \"bench\": \"02828884\",\n# \"cabinet\": \"02933112\",\n# \"car\": \"02958343\",\n# \"airplane\": \"02691156\",\n# \"display\": \"03211117\",\n# \"lamp\": \"03636649\",\n# \"speaker\": \"03691459\",\n# \"rifle\": \"04090263\",\n# \"sofa\": \"04256520\",\n# \"table\": \"04379243\",\n# \"phone\": \"04401088\",\n# \"watercraft\": \"04530566\"\nCAT_LIST = [\"02691156\", \"02828884\", \"02933112\", \"02958343\", \"03001627\", \"03211117\", \"03636649\", \"03691459\", \"04090263\",\n            \"04256520\", \"04379243\", \"04401088\", \"04530566\"]\n# CAT_LIST = [\"03636649\",\"04090263\"]\ncats_limit_train = {}\ncats_limit_test = {}\ncat_ids=[]\n\nfor value in CAT_LIST:\n    cat_ids.append(value)\n    cats_limit_train[value] = 0\n    cats_limit_test[value] = 0\n\n\nfor cat in CAT_LIST:\n    TRAIN_LST = lst_dir + '/%s_train.lst' % cat\n    with open(TRAIN_LST, 'r') as f:\n        lines = f.read().splitlines()\n        for line in lines:\n            for render in range(24):\n                cats_limit_train[cat] += 1\n                TRAIN_LISTINFO += [(cat, line.strip(), render)]\n\nfor cat in CAT_LIST:\n    VALID_LST = lst_dir + '/%s_test.lst' % cat\n    with open(VALID_LST, 'r') as f:\n        lines = f.read().splitlines()\n        for line in lines:\n            for render in range(24):\n                cats_limit_test[cat] += 1\n                TEST_LISTINFO += [(cat, line.strip(), render)]\n\n\ninfo = {'rendered_dir': FLAGS.src_h5_dir,\n        'rendered_dir_v2': raw_dirs['renderedh5_dir_v2'],\n        'sdf_dir': raw_dirs['sdf_dir'],\n        'iso_value': 0.003}\n\nTRAIN_DATASET = data.Pt_sdf_img(FLAGS, listinfo=TRAIN_LISTINFO, info=info, cats_limit=cats_limit_train)\nVALID_DATASET = data.Pt_sdf_img(FLAGS, listinfo=TEST_LISTINFO, info=info, cats_limit=cats_limit_test)\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\ndef get_learning_rate(batch):\n    learning_rate = tf.train.exponential_decay(\n                        BASE_LEARNING_RATE,  # Base learning rate.\n                        batch * BATCH_SIZE,  # Current index into the dataset.\n                        DECAY_STEP,          # Decay step.\n                        DECAY_RATE,          # Decay rate.\n                        staircase=True)\n    learning_rate = tf.maximum(learning_rate, 1e-6, name='lr') # CLIP THE LEARNING RATE!\n    return learning_rate\n\ndef get_bn_decay(batch):\n    bn_momentum = tf.train.exponential_decay(\n                      BN_INIT_DECAY,\n                      batch*BATCH_SIZE,\n                      BN_DECAY_DECAY_STEP,\n                      BN_DECAY_DECAY_RATE,\n                      staircase=True)\n    bn_decay = tf.minimum(BN_DECAY_CLIP, 1 - bn_momentum)\n    return bn_decay\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):\n\n    vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))\n    # print(vars_in_pretrained_model)\n    vars_in_defined_model = []\n\n    for var in tf.trainable_variables():\n        if isinstance(prefixs, list):\n            for prefix in prefixs:\n                if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                    if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                        vars_in_defined_model.append(var)\n        else:     \n            if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                    vars_in_defined_model.append(var)\n    print(vars_in_defined_model)\n    saver = tf.train.Saver(vars_in_defined_model)\n    try:\n        saver.restore(sess, LOAD_MODEL_FILE)\n        print( \"Model loaded in file: %s\" % (LOAD_MODEL_FILE))\n    except:\n        if strict:\n            print( \"Fail to load modelfile: %s\" % LOAD_MODEL_FILE)\n            return False\n        else:\n            print( \"Fail loaded in file: %s\" % (LOAD_MODEL_FILE))\n            return True\n\n    return True\n\ndef train():\n    log_string(LOG_DIR)\n    with tf.Graph().as_default():\n        with tf.device('/gpu:0'):\n            input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (FLAGS.img_h, FLAGS.img_w), num_pc=NUM_POINTS, num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl')\n            is_training_pl = tf.placeholder(tf.bool, shape=())\n            print(is_training_pl)\n\n            # Note the global_step=batch parameter to minimize.\n            # That tells the optimizer to helpfully increment the 'batch' parameter for you every time it trains.\n            batch = tf.Variable(0, name='batch')\n            bn_decay = get_bn_decay(batch)\n            tf.summary.scalar('bn_decay', bn_decay)\n\n            print(\"--- Get model and loss\")\n            # Get model and loss\n\n            end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, img_size = (FLAGS.img_h, FLAGS.img_w), bn=True, wd=FLAGS.wd, FLAGS=FLAGS)\n            loss, end_points = model.get_loss(end_points, sdf_weight=SDF_WEIGHT, FLAGS=FLAGS)\n            tf.summary.scalar('loss', loss)\n\n            print(\"--- Get training operator\")\n            # Get training operator\n            learning_rate = get_learning_rate(batch)\n            tf.summary.scalar('learning_rate', learning_rate)\n            if OPTIMIZER == 'momentum':\n                optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=MOMENTUM)\n            elif OPTIMIZER == 'adam':\n                optimizer = tf.train.AdamOptimizer(learning_rate)\n\n            # Create a session\n            config = tf.ConfigProto()\n            gpu_options = tf.GPUOptions()#per_process_gpu_memory_fraction=0.99)\n            config=tf.ConfigProto(gpu_options=gpu_options)\n            config.gpu_options.allow_growth = True\n            config.allow_soft_placement = True\n            config.log_device_placement = False\n            sess = tf.Session(config=config)\n            # sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n\n            # Add summary writers\n            merged = tf.summary.merge_all()\n            train_writer = tf.summary.FileWriter(os.path.join(LOG_DIR, 'train'), sess.graph)\n            test_writer = tf.summary.FileWriter(os.path.join(LOG_DIR, 'test'), sess.graph)\n\n            ##### all\n            update_variables = [x for x in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES)]\n\n            train_op = optimizer.minimize(loss, global_step=batch, var_list=update_variables)\n\n            # Init variables\n            init = tf.global_variables_initializer()\n            sess.run(init)\n\n            ######### Loading Checkpoint ###############\n            # CNN(Pretrained from ImageNet)\n            if PRETRAINED_CNN_MODEL_FILE is not '':\n                if not load_model(sess, PRETRAINED_CNN_MODEL_FILE, 'vgg_16', strict=True):\n                    return\n\n            if PRETRAINED_PN_MODEL_FILE is not '':\n                if not load_model(sess, PRETRAINED_PN_MODEL_FILE, ['refpc_reconstruction','sdfprediction'], strict=True):\n                    return \n            # Overall  \n            saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if('lr' not in v.name) and ('batch' not in v.name)])  \n            ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)\n\n            if ckptstate is not None:\n                LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))\n                try:\n                    load_model(sess, LOAD_MODEL_FILE, ['vgg_16'], strict=True)\n                    # load_model(sess, LOAD_MODEL_FILE, ['sdfprediction','vgg_16'], strict=True)\n                    with NoStdStreams():\n                        saver.restore(sess, LOAD_MODEL_FILE)\n                    print( \"Model loaded in file: %s\" % LOAD_MODEL_FILE)    \n                except:\n                    print( \"Fail to load overall modelfile: %s\" % PRETRAINED_MODEL_PATH)\n\n            ###########################################\n\n            ops = {'input_pls': input_pls,\n                   'is_training_pl': is_training_pl,\n                   'loss': loss,\n                   'train_op': train_op,\n                   'merged': merged,\n                   'step': batch,\n                   'end_points': end_points}\n\n            best_loss = 1e20\n            if FLAGS.test or FLAGS.create:\n                VALID_DATASET.start()\n                eval_one_epoch(sess, ops)\n                VALID_DATASET.shutdown()\n            else:\n                TRAIN_DATASET.start()\n                for epoch in range(MAX_EPOCH):\n                    log_string('**** EPOCH %03d ****' % (epoch))\n                    sys.stdout.flush()\n\n                    # eval_one_epoch(sess, ops, test_writer)\n                    train_one_epoch(sess, ops, train_writer, saver)\n                    # epoch_loss = eval_one_epoch(sess, ops, test_writer)\n                    # if epoch_loss < best_loss:\n                    #     best_loss = epoch_loss\n                    #     save_path = saver.save(sess, os.path.join(LOG_DIR, \"best_model_epoch_%03d.ckpt\"%(epoch)))\n                    #     log_string(\"Model saved in file: %s\" % save_path)\n\n                    # # Save the variables to disk.\n                    # if epoch % 1 == 0:\n                    #     save_path = saver.save(sess, os.path.join(LOG_DIR, \"model.ckpt\"))\n                    #     log_string(\"Model saved in file: %s\" % save_path)\n                TRAIN_DATASET.shutdown()\n\n\ndef pc_normalize(pc, centroid=None):\n\n    \"\"\" pc: NxC, return NxC \"\"\"\n    l = pc.shape[0]\n\n    if centroid is None:\n        centroid = np.mean(pc, axis=0)\n\n    pc = pc - centroid\n    # m = np.max(pc, axis=0)\n    m = np.max(np.sqrt(np.sum(pc ** 2, axis=1)))\n\n    pc = pc / m\n\n    return pc\n\ndef train_one_epoch(sess, ops, train_writer, saver):\n    \"\"\" ops: dict mapping from string to tf ops \"\"\"\n    is_training = True\n\n    # Shuffle train samples\n    num_batches = int(len(TRAIN_DATASET) / BATCH_SIZE)\n\n\n    print('num_batches', num_batches)\n\n    log_string(str(datetime.now()))\n\n    loss_all = 0.\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0.\n\n    tic = time.time()\n\n    for batch_idx in range(num_batches):\n        start_idx = batch_idx * BATCH_SIZE\n        batch_data = TRAIN_DATASET.fetch()\n\n        feed_dict = {ops['is_training_pl']: is_training,\n                     ops['input_pls']['sample_pc']: batch_data['sdf_pt'],\n                     ops['input_pls']['trans_mat']: batch_data['trans_mat'],\n                     ops['input_pls']['norm_params']: batch_data['norm_params'],\n                     ops['input_pls']['regress_mat']: batch_data['regress_mat'],\n                     ops['input_pls']['imgs']: batch_data['img'][:,:,:,:3],\n                     ops['input_pls']['shifts']: batch_data['shifts']}\n        if FLAGS.rotation:\n            feed_dict[ops['input_pls']['sample_pc_rot']] = batch_data['sdf_pt_rot']\n        else:\n            feed_dict[ops['input_pls']['sample_pc_rot']] = batch_data['sdf_pt']\n        output_list = [ops['train_op'], ops['merged'], ops['step'], ops['loss'],\n                       ops['end_points']['sample_img_points'], ops['end_points']['pred_sample_img_points'],\n                       ops['end_points']['ref_img'], ops['end_points']['rot_homopc'], ops['end_points']['pred_rot_homopc']]\n\n        loss_list = []\n        for il, lossname in enumerate(losses.keys()):\n            loss_list += [ops['end_points']['losses'][lossname]]\n\n        outputs = sess.run(output_list + loss_list, feed_dict=feed_dict)\n\n        _, summary, step, loss_val, \\\n        sample_img_points_val, pred_sample_img_points_val, ref_img_val, rot_homopc_val, pred_rot_homopc_val = outputs[:-len(losses)]\n\n        train_writer.add_summary(summary, step)\n\n        for il, lossname in enumerate(losses.keys()):\n            losses[lossname] += outputs[len(output_list)+il]\n\n        loss_all += losses['overall_loss']\n\n        save_freq = 1000\n        if (batch_idx + 1) % save_freq == 0:\n            save_path = saver.save(sess, os.path.join(LOG_DIR, \"latest.ckpt\"))\n            log_string(\"Model saved in file: %s\" % save_path)\n\n        verbose_freq = FLAGS.verbose_freq\n        if (batch_idx) % verbose_freq == 0:\n            bid = 0\n            np.savetxt(os.path.join(VALID_RESULT_PATH, '%d_rot_homopc.xyz' % batch_idx), rot_homopc_val[bid,:,:])\n            np.savetxt(os.path.join(VALID_RESULT_PATH, '%d_pred_rot_homopc.xyz' % batch_idx), pred_rot_homopc_val[bid,:,:])\n\n            saveimg = (batch_data['img'][bid,:,:,:] * 255).astype(np.uint8)\n            samplept_img = sample_img_points_val[bid,...]\n            choice = np.random.randint(samplept_img.shape[0], size=10)\n            samplept_img = samplept_img[choice, ...]\n\n            pred_sample_img = pred_sample_img_points_val[bid, ...]\n            pred_sample_img = pred_sample_img[choice, ...]\n\n            for j in range(samplept_img.shape[0]):\n                x = int(samplept_img[j, 0])\n                y = int(samplept_img[j, 1])\n                cv2.circle(saveimg, (x, y), 3, (0, 255, 0, 255), -1)\n\n            for j in range(pred_sample_img.shape[0]):\n                x = int(pred_sample_img[j, 0])\n                y = int(pred_sample_img[j, 1])\n                cv2.circle(saveimg, (x, y), 3, (0, 0, 255, 255), -1)\n            cv2.imwrite(os.path.join(VALID_RESULT_PATH, '%s_%s_%s_comp.png' %\n                                     (\n                                     batch_data['cat_id'][bid], batch_data['obj_nm'][bid], batch_data['view_id'][bid])),\n                        saveimg)\n            outstr = ' -- %03d / %03d -- ' % (batch_idx+1, num_batches)\n            for lossname in losses.keys():\n                outstr += '%s: %f, ' % (lossname, losses[lossname] / verbose_freq)\n                losses[lossname] = 0\n            outstr += 'time: %.02f, ' % (time.time() - tic)\n            tic = time.time()\n            log_string(outstr)\n\n\ndef eval_one_epoch(sess, ops):\n    \"\"\" ops: dict mapping from string to tf ops \"\"\"\n    \n    is_training = False\n\n    # Shuffle train samples\n    num_batches = int(len(VALID_DATASET)/BATCH_SIZE)\n\n    print('num_batches', num_batches)\n    print('len(VALID_DATASET)', len(VALID_DATASET))\n\n    pc3d_dist_lst = []\n    pc2d_dist_lst = []\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0.\n\n    tic = time.time()\n    for batch_idx in range(num_batches):\n\n        batch_data = VALID_DATASET.fetch()\n\n        feed_dict = {ops['is_training_pl']: is_training,\n                     ops['input_pls']['sample_pc']: batch_data['sdf_pt'],\n                     ops['input_pls']['trans_mat']: batch_data['trans_mat'],\n                     ops['input_pls']['norm_params']: batch_data['norm_params'],\n                     ops['input_pls']['regress_mat']: batch_data['regress_mat'],\n                     ops['input_pls']['imgs']: batch_data['img'][:,:,:,:3],\n                     ops['input_pls']['shifts']: batch_data['shifts']}\n        if FLAGS.rotation:\n            feed_dict[ops['input_pls']['sample_pc_rot']] = batch_data['sdf_pt_rot']\n        else:\n            feed_dict[ops['input_pls']['sample_pc_rot']] = batch_data['sdf_pt']\n        output_list = [ops['loss'],\n                       ops['end_points']['pred_trans_mat'],\n                       ops['end_points']['pred_sample_img_points'],\n                       ops['end_points']['sample_img_points'],\n                       ops['end_points']['ref_img'],\n                       ops['end_points']['rot_homopc'], ops['end_points']['pred_rot_homopc'],\n                       ops['end_points']['results']['rot2d_dist_all'],\n                       ops['end_points']['results']['rot3d_dist_all']]\n\n        loss_list = []\n        for il, lossname in enumerate(losses.keys()):\n            loss_list += [ops['end_points']['losses'][lossname]]\n\n        outputs = sess.run(output_list + loss_list, feed_dict=feed_dict)\n\n        loss_val, pred_trans_mat_val, pred_sample_img_points_val, sample_img_points_val, ref_img_val,\\\n        rot_homopc_val, pred_rot_homopc_val, rot2d_dist_all_val, rot3d_dist_all_val = outputs[:-len(losses)]\n\n        for il, lossname in enumerate(losses.keys()):\n            if lossname == \"rot2d_dist\":\n                pc2d_dist_lst.append(outputs[len(output_list)+il])\n            elif lossname == \"rot3d_dist\":\n                pc3d_dist_lst.append(outputs[len(output_list)+il])\n            losses[lossname] += outputs[len(output_list)+il]\n\n        verbose_freq = FLAGS.verbose_freq\n        if (batch_idx) % verbose_freq == 0:\n            log_f_name = os.path.join(TEST_RESULT_PATH, \"err_log.txt\")\n            bids = range(BATCH_SIZE)\n            for bid in bids:\n                np.savetxt(os.path.join(TEST_RESULT_PATH, '%s_%s_%s_gt.xyz' %\n                    (batch_data['cat_id'][bid], batch_data['obj_nm'][bid], batch_data['view_id'][bid])), rot_homopc_val[bid, :, :])\n                np.savetxt(os.path.join(TEST_RESULT_PATH, '%s_%s_%s_pred.xyz' %\n                    (batch_data['cat_id'][bid], batch_data['obj_nm'][bid], batch_data['view_id'][bid])),\n                           pred_rot_homopc_val[bid, :, :])\n                with open(log_f_name, \"a\") as logf:\n                    logf.write(\"rot3d_dist: {}, rot2d_dist: {}, filename: {}_{}_{}_comp.png \\n\"\n                               .format(rot3d_dist_all_val[bid], rot2d_dist_all_val[bid],\n                               batch_data['cat_id'][bid], batch_data['obj_nm'][bid], batch_data['view_id'][bid]))\n                saveimg = (batch_data['img'][bid, :, :, :] * 255).astype(np.uint8)\n                # pred_saveimg = saveimg.copy()\n                samplept_img = sample_img_points_val[bid, ...]\n                choice = np.random.randint(samplept_img.shape[0], size=10)\n                samplept_img = samplept_img[choice, ...]\n                pred_sample_img = pred_sample_img_points_val[bid, ...][choice, ...]\n                for j in range(samplept_img.shape[0]):\n                    x = int(samplept_img[j, 0])\n                    y = int(samplept_img[j, 1])\n                    cv2.circle(saveimg, (x, y), 3, (0, 255, 0, 255), -1)\n\n                for j in range(pred_sample_img.shape[0]):\n                    x = int(pred_sample_img[j, 0])\n                    y = int(pred_sample_img[j, 1])\n                    cv2.circle(saveimg, (x, y), 3, (0, 0, 255, 255), -1)\n                cv2.imwrite(os.path.join(TEST_RESULT_PATH, '%s_%s_%s_comp.png' %\n                    (batch_data['cat_id'][bid], batch_data['obj_nm'][bid], batch_data['view_id'][bid])), saveimg)\n\n                outstr = ' -- %03d / %03d -- ' % (batch_idx + 1, num_batches)\n            for lossname in losses.keys():\n                outstr += '%s: %f, ' % (lossname, losses[lossname] / verbose_freq)\n                losses[lossname] = 0\n            outstr += 'time: %.02f, ' % (time.time() - tic)\n            tic = time.time()\n            log_string(outstr)\n        if FLAGS.create:\n            create_img_h5(batch_data, pred_trans_mat_val)\n\n    pc2d_dist_lst = np.asarray(pc2d_dist_lst)\n    pc3d_dist_lst = np.asarray(pc3d_dist_lst)\n    print(\"avg 2d dist {}, max 2d dist {}, min 2d dist {}\".\n          format(np.mean(pc2d_dist_lst), np.max(pc2d_dist_lst), np.min(pc2d_dist_lst)))\n    print(\"avg 3d dist {}, max 3d dist {}, min 3d dist {}\".\n          format(np.mean(pc3d_dist_lst), np.max(pc3d_dist_lst), np.min(pc3d_dist_lst)))\n\n    return 1\n\n\ndef create_img_h5(batch_data, transmat):\n    # batch_data['pc'] = batch_pc\n    # batch_data['sdf_pt'] = batch_sdf_pt\n    # batch_data['sdf_pt_rot'] = batch_sdf_pt_rot\n    # batch_data['sdf_val'] = batch_sdf_val\n    # batch_data['norm_params'] = batch_norm_params\n    # batch_data['sdf_params'] = batch_sdf_params\n    # batch_data['img'] = batch_img\n    # # batch_data['img_mat'] = batch_img_mat\n    # # batch_data['img_pos'] = batch_img_pos\n    # batch_data['trans_mat'] = batch_trans_mat\n    # batch_data['cat_id'] = batch_cat_id\n    # batch_data['obj_nm'] = batch_obj_nm\n    # batch_data['view_id'] = batch_view_id\n    for i in range(BATCH_SIZE):\n        src_img_h5 = os.path.join(info['rendered_dir'], batch_data[\"cat_id\"][i],\n                               batch_data[\"obj_nm\"][i], '{0:02d}'.format(batch_data['view_id'][i])+\".h5\")\n        print(\"src:\", src_img_h5)\n        tar_img_dir = os.path.join(FLAGS.img_h5_dir, batch_data[\"cat_id\"][i],\n                               batch_data[\"obj_nm\"][i])\n        os.makedirs(tar_img_dir,exist_ok=True)\n        tar_img_h5 = os.path.join(tar_img_dir,'{0:02d}'.format(batch_data['view_id'][i]) + \".h5\")\n        print(\"tar:\", tar_img_h5)\n        with h5py.File(src_img_h5, 'r') as h5_f:\n            obj_rot_mat = h5_f[\"obj_rot_mat\"][:].astype(np.float32)\n            regress_mat = h5_f[\"regress_mat\"][:].astype(np.float32)\n            img_arr = h5_f[\"img_arr\"][:].astype(np.float32)\n            K = h5_f[\"K\"][:].astype(np.float32)\n            RT = h5_f[\"RT\"][:].astype(np.float32)\n            trans_mat_right = transmat[i,...]\n            print(\"transmat[i,...].shape\", transmat[i,...].shape)\n            with h5py.File(tar_img_h5, 'w') as f1:\n                    f1.create_dataset('img_arr', data=img_arr, compression='gzip',\n                                      dtype='uint8', compression_opts=4)\n                    f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',\n                                      dtype='float32', compression_opts=4)\n                    f1.create_dataset('K', data=K, compression='gzip',\n                                      dtype='float32', compression_opts=4)\n                    f1.create_dataset('RT', data=RT, compression='gzip',\n                                      dtype='float32', compression_opts=4)\n                    f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',\n                                      dtype='float32', compression_opts=4)\n                    f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',\n                                      dtype='float32', compression_opts=4)\n                    print(\"write:\", tar_img_h5)\n\ndef check_all_h5():\n    # ()\n    for info in TEST_LISTINFO:\n        cat, obj, view = info\n        src = os.path.join(\"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1\",\n                           cat, obj, \"%02d.h5\"%view)\n        print(src)\n        with h5py.File(src, 'r') as h5_f:\n            trans_mat = h5_f[\"trans_mat\"][:].astype(np.float32)\n\nif __name__ == \"__main__\":\n    try:\n        log_string('pid: %s'%(str(os.getpid())))\n        train()\n        LOG_FOUT.close()\n    except KeyboardInterrupt:\n        TRAIN_DATASET.shutdown()\n    # check_all_h5()\n\n# nohup python -u cam_est/train_sdf_cam.py --test --restore_model /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/cam/checkpoint/cam_mixloss_all_2.93 --log_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/cam/checkpoint/cam_mixloss_all_2.93 --gpu 0 --loss_mode 3DM --verbose_freq 1 &> log/test_cam_mixloss_all_2.93.log &\n\n\n\n# nohup python -u cam_est/train_sdf_cam.py --test --batch_size 1 --restore_model /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/cam/checkpoint/cam_mixloss_all_2.93 --log_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/cam/checkpoint/cam_mixloss_all_2.93 --gpu 0 --loss_mode 3DM --verbose_freq 1 &> log/test_cam_mixloss_3sample.log &\n#\n# nohup python -u cam_est/train_sdf_cam.py --restore_model checkpoint/cam_3D_shift_0.5 --log_dir checkpoint/cam_3D_shift_0.5 --gpu 0 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 0.5 &> log/cam_3D_shift0.5_all.log &\n#\n# nohup python -u cam_est/train_sdf_cam.py --restore_model checkpoint/cam_3D_shift_0.5 --log_dir checkpoint/cam_3D_shift_1 --gpu 1 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 1 &> log/cam_3D_shift1_all.log &\n#\n# nohup python -u cam_est/train_sdf_cam.py --restore_model checkpoint/cam_3D_shift_0.5 --log_dir checkpoint/cam_3D_shift_2 --gpu 2 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 2 &> log/cam_3D_shift2_all.log &\n#\n# nohup python -u cam_est/train_sdf_cam.py --restore_model checkpoint/cam_3D_shift_0.5 --log_dir checkpoint/cam_3D_shift_5 --gpu 3 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 5 &> log/cam_3D_shift5_all.log &\n#\n#\n"
  },
  {
    "path": "data/data_sdf_h5_queue.py",
    "content": "import numpy as np\nimport cv2\nimport random\nimport math\nimport os\nimport threading\nimport queue\nimport sys\nimport h5py\nimport copy\n\nFETCH_BATCH_SIZE = 32\nBATCH_SIZE = 32\nHEIGHT = 192\nWIDTH = 256\nPOINTCLOUDSIZE = 16384\nOUTPUTPOINTS = 1024\nREEBSIZE = 1024\n\n\ndef get_filelist(lst_dir, maxnverts, minsurbinvox, cats, cats_info, type):\n    for cat in cats:\n        cat_id = cats_info[cat]\n    inputlistfile = os.path.join(lst_dir, cat_id + type + \".lst\")\n    with open(inputlistfile, 'r') as f:\n        lines = f.read().splitlines()\n        file_lst = [[cat_id, line.strip()] for line in lines]\n    return file_lst\n\nclass Pt_sdf_img(threading.Thread):\n    def __init__(self, FLAGS, listinfo=None, info=None, qsize=64, cats_limit=None, shuffle=True):\n        super(Pt_sdf_img, self).__init__()\n        self.queue = queue.Queue(qsize)\n        self.stopped = False\n        self.bno = 0\n        self.listinfo = listinfo\n        self.num_points = FLAGS.num_points\n        self.gen_num_pt = FLAGS.num_sample_points\n        self.batch_size = FLAGS.batch_size\n        self.img_dir = info['rendered_dir']\n        self.sdf_dir = info['sdf_dir']\n        self.cache = {}  # from index to (point_set, cls, seg) tuple\n        self.cache_size = 60000\n        self.data_num = len(self.listinfo)\n        self.FLAGS = FLAGS\n        self.shuffle = shuffle\n        self.num_batches = int(self.data_num / self.FLAGS.batch_size)\n        self.cats_limit, self.epoch_amount = self.set_cat_limit(cats_limit)\n        self.data_order = list(range(len(listinfo)))\n        self.order = self.data_order\n\n    # def get_img_dir_old(self, cat_id, obj):\n    #     img_dir = os.path.join(self.img_dir, cat_id, obj, \"rendering\")\n    #\n    #     with open(img_dir + \"/renderings.txt\", 'r') as f:\n    #         lines = f.read().splitlines()\n    #         file_lst = [line.strip() for line in lines]\n    #     return img_dir, file_lst\n    def set_cat_limit(self, cats_limit):\n        epoch_amount = 0\n        for cat, amount in cats_limit.items():\n            cats_limit[cat] = min(self.FLAGS.cat_limit, amount)\n            epoch_amount += cats_limit[cat]\n        print(\"epoch_amount \", epoch_amount)\n        print(\"cats_limit \", cats_limit)\n        return cats_limit, epoch_amount\n\n    def get_img_dir(self, cat_id, obj):\n        img_dir = os.path.join(self.img_dir, cat_id, obj)\n        return img_dir, None\n\n\n    def get_sdf_h5_filenm(self, cat_id, obj):\n        return os.path.join(self.sdf_dir, cat_id, obj, \"ori_sample.h5\")\n\n    def pc_normalize(self, pc, centroid=None):\n\n        \"\"\" pc: NxC, return NxC \"\"\"\n        l = pc.shape[0]\n\n        if centroid is None:\n            centroid = np.mean(pc, axis=0)\n\n        pc = pc - centroid\n        # m = np.max(pc, axis=0)\n        m = np.max(np.sqrt(np.sum(pc ** 2, axis=1)))\n\n        pc = pc / m\n\n        return pc, centroid, m\n\n    def __len__(self):\n        return self.epoch_amount\n\n    def memory(self):\n        \"\"\"\n        Get node total memory and memory usage\n        \"\"\"\n        with open('/proc/meminfo', 'r') as mem:\n            ret = {}\n            tmp = 0\n            for i in mem:\n                sline = i.split()\n                if str(sline[0]) == 'MemTotal:':\n                    ret['total'] = int(sline[1])\n                elif str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):\n                    tmp += int(sline[1])\n            ret['free'] = tmp\n            ret['used'] = int(ret['total']) - int(ret['free'])\n        return ret\n\n    def getitem(self, index):\n        cat_id, obj, num = self.listinfo[index]\n        sdf_file = self.get_sdf_h5_filenm(cat_id, obj)\n        ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\\\n            = self.get_sdf_h5(sdf_file, cat_id, obj)\n        img_dir, img_file_lst = self.get_img_dir(cat_id, obj)\n        return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params,\\\n               sdf_params, img_dir, img_file_lst, cat_id, obj, num\n\n    def get_sdf_h5(self, sdf_h5_file, cat_id, obj):\n        h5_f = h5py.File(sdf_h5_file, 'r')\n        try:\n            if ('pc_sdf_original' in h5_f.keys()\n                    and 'pc_sdf_sample' in h5_f.keys()\n                    and 'norm_params' in h5_f.keys()):\n                ori_sdf = h5_f['pc_sdf_original'][:].astype(np.float32)\n                # sample_sdf = np.reshape(h5_f['pc_sdf_sample'][:],(ori_sdf.shape[0], -1 ,4)).astype(np.float32)\n                sample_sdf = h5_f['pc_sdf_sample'][:].astype(np.float32)\n                ori_pt = ori_sdf[:,:3]#, ori_sdf[:,3]\n                ori_sdf_val = None\n                if sample_sdf.shape[1] == 4:\n                    sample_pt, sample_sdf_val = sample_sdf[:, :3], sample_sdf[:, 3]\n                else:\n                    sample_pt, sample_sdf_val = None, sample_sdf[:, 0]\n                norm_params = h5_f['norm_params'][:]\n                sdf_params = h5_f['sdf_params'][:]\n            else:\n                raise Exception(cat_id, obj, \"no sdf and sample\")\n        finally:\n            h5_f.close()\n        return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\n\n    def get_img_old(self, img_dir, num, file_lst):\n        params = np.loadtxt(img_dir + \"/rendering_metadata.txt\")\n        img_file = os.path.join(img_dir, file_lst[num])\n        # azimuth, elevation, in-plane rotation, distance, the field of view.\n        param = params[num, :].astype(np.float32)\n        cam_mat, cam_pos = self.camera_info(self.degree2rad(param))\n        img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED)[:,:,:3].astype(np.float32) / 255.\n        return img_arr, cam_mat, cam_pos\n\n    def get_img(self, img_dir, num):\n        img_h5 = os.path.join(img_dir, \"%02d.h5\"%num)\n        cam_mat, cam_pos, trans_mat, obj_rot_mat, regress_mat = None, None, None, None, None\n        with h5py.File(img_h5, 'r') as h5_f:\n            if self.FLAGS.img_feat_onestream or self.FLAGS.img_feat_twostream:\n                trans_mat = h5_f[\"trans_mat\"][:].astype(np.float32)\n                obj_rot_mat = h5_f[\"obj_rot_mat\"][:].astype(np.float32)\n                regress_mat = h5_f[\"regress_mat\"][:].astype(np.float32)\n            else:\n                cam_mat, cam_pos = h5_f[\"cam_mat\"][:].astype(np.float32), h5_f[\"cam_pos\"][:].astype(np.float32)\n            if self.FLAGS.alpha:\n                img_arr = h5_f[\"img_arr\"][:].astype(np.float32)\n                img_arr[:, :, :4] = img_arr[:,:,:4] / 255.\n            else:\n                img_raw = h5_f[\"img_arr\"][:]\n                img_arr = img_raw[:, :, :3]\n                if self.FLAGS.augcolorfore or self.FLAGS.augcolorback:\n                    r_aug = 60 * np.random.rand() - 30\n                    g_aug = 60 * np.random.rand() - 30\n                    b_aug = 60 * np.random.rand() - 30\n                if self.FLAGS.augcolorfore:\n                    img_arr[img_raw[:, :, 3] != 0, 0] + r_aug\n                    img_arr[img_raw[:, :, 3] != 0, 1] + g_aug\n                    img_arr[img_raw[:, :, 3] != 0, 2] + b_aug\n                if self.FLAGS.backcolorwhite:\n                    img_arr[img_raw[:, :, 3] == 0] = [255, 255, 255]\n                if self.FLAGS.augcolorback:\n                    img_arr[img_raw[:, :, 3] == 0, 0] + r_aug\n                    img_arr[img_raw[:, :, 3] == 0, 1] + g_aug\n                    img_arr[img_raw[:, :, 3] == 0, 2] + b_aug\n                img_arr = np.clip(img_arr, 0, 255)\n                img_arr = img_arr.astype(np.float32) / 255.\n\n            return img_arr, cam_mat, cam_pos, trans_mat, obj_rot_mat, regress_mat\n\n    def degree2rad(self, params):\n        params[0] = np.deg2rad(params[0] + 180.0)\n        params[1] = np.deg2rad(params[1])\n        params[2] = np.deg2rad(params[2])\n        return params\n\n    def unit(self, v):\n        norm = np.linalg.norm(v)\n        if norm == 0:\n            return v\n        return v / norm\n\n    def camera_info(self, param):\n        az_mat = self.get_az(param[0])\n        el_mat = self.get_el(param[1])\n        inl_mat = self.get_inl(param[2])\n        cam_mat = np.transpose(np.matmul(np.matmul(inl_mat, el_mat), az_mat))\n        cam_pos = self.get_cam_pos(param)\n        return cam_mat, cam_pos\n\n    def get_cam_pos(self, param):\n        camX = 0\n        camY = 0\n        camZ = param[3]\n        cam_pos = np.array([camX, camY, camZ])\n        return -1 * cam_pos\n\n    def get_az(self, az):\n        cos = np.cos(az)\n        sin = np.sin(az)\n        mat = np.asarray([cos, 0.0, sin, 0.0, 1.0, 0.0, -1.0*sin, 0.0, cos], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n    #\n    def get_el(self, el):\n        cos = np.cos(el)\n        sin = np.sin(el)\n        mat = np.asarray([1.0, 0.0, 0.0, 0.0, cos, -1.0*sin, 0.0, sin, cos], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n    #\n    def get_inl(self, inl):\n        cos = np.cos(inl)\n        sin = np.sin(inl)\n        # zeros = np.zeros_like(inl)\n        # ones = np.ones_like(inl)\n        mat = np.asarray([cos, -1.0*sin, 0.0, sin, cos, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n\n    def get_batch(self, index):\n        if index + self.batch_size > self.epoch_amount:\n            index = index + self.batch_size - self.epoch_amount\n        batch_pc = np.zeros((self.batch_size, self.num_points, 3)).astype(np.float32)\n        batch_sdf_pt = np.zeros((self.batch_size, self.gen_num_pt, 3)).astype(np.float32)\n        batch_sdf_pt_rot = np.zeros((self.batch_size, self.gen_num_pt, 3)).astype(np.float32)\n        batch_sdf_val = np.zeros((self.batch_size, self.gen_num_pt, 1)).astype(np.float32)\n        batch_norm_params = np.zeros((self.batch_size, 4)).astype(np.float32)\n        batch_sdf_params = np.zeros((self.batch_size, 6)).astype(np.float32)\n        if self.FLAGS.alpha:\n            batch_img = np.zeros((self.batch_size, self.FLAGS.img_h, self.FLAGS.img_w, 4), dtype=np.float32)\n        else:\n            batch_img = np.zeros((self.batch_size, self.FLAGS.img_h, self.FLAGS.img_w, 3), dtype=np.float32)\n        batch_regress_mat = np.zeros((self.batch_size, 4, 3), dtype=np.float32)\n        batch_trans_mat = np.zeros((self.batch_size, 4, 3), dtype=np.float32)\n        batch_cat_id = []\n        batch_obj_nm = []\n        batch_view_id = []\n        cnt = 0\n        for i in range(index, index + self.batch_size):\n            single_obj = self.getitem(self.order[i])\n            if single_obj == None:\n                raise Exception(\"single mesh is None!\")\n            ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params, img_dir, img_file_lst, cat_id, obj, num = single_obj\n            img, cam_mat, cam_pos, trans_mat, obj_rot_mat, regress_mat = self.get_img(img_dir, num)\n            if ori_pt is not None:\n                cf_ref_choice = np.random.randint(ori_pt.shape[0], size=self.num_points)\n                batch_pc[cnt, :, :] = ori_pt[cf_ref_choice, :]\n                if self.FLAGS.threedcnn:\n                    batch_sdf_val[cnt, :, 0] = sample_sdf_val\n                else:\n                    if self.gen_num_pt > sample_pt.shape[0]:\n                        choice = np.random.randint(sample_pt.shape[0], size=self.gen_num_pt)\n                    else:\n                        choice = np.asarray(random.sample(range(sample_pt.shape[0]), self.gen_num_pt), dtype=np.int32)\n                    batch_sdf_pt[cnt, ...] = sample_pt[choice, :]\n                    batch_sdf_val[cnt, :, 0] = sample_sdf_val[choice]\n                    if self.FLAGS.rot:\n                        batch_sdf_pt_rot[cnt, ...] = np.dot(sample_pt[choice, :], obj_rot_mat)\n                    else:\n                        batch_sdf_pt_rot[cnt, ...] = sample_pt[choice, :]\n                batch_norm_params[cnt, ...] = norm_params\n                batch_sdf_params[cnt, ...] = sdf_params\n            else:\n                raise Exception(\"no verts or binvox\")\n            # img, cam_mat, cam_pos = self.get_img_old(img_dir, num, img_file_lst)\n            batch_img[cnt, ...] = img.astype(np.float32)\n            batch_regress_mat[cnt, ...] = regress_mat\n            batch_trans_mat[cnt, ...] = trans_mat\n            batch_cat_id.append(cat_id)\n            batch_obj_nm.append(obj)\n            batch_view_id.append(num)\n            cnt += 1\n        batch_data = {}\n        batch_data['pc'] = batch_pc\n        batch_data['sdf_pt'] = batch_sdf_pt\n        batch_data['sdf_pt_rot'] = batch_sdf_pt_rot\n        batch_data['sdf_val'] = batch_sdf_val\n        batch_data['norm_params'] = batch_norm_params\n        batch_data['sdf_params'] = batch_sdf_params\n        batch_data['img'] = batch_img\n        batch_data['trans_mat'] = batch_trans_mat\n        batch_data['cat_id'] = batch_cat_id\n        batch_data['obj_nm'] = batch_obj_nm\n        batch_data['view_id'] = batch_view_id\n        return batch_data\n\n    def refill_data_order(self):\n        temp_order = copy.deepcopy(self.data_order)\n        cats_quota = {key: value for key, value in self.cats_limit.items()}\n        np.random.shuffle(temp_order)\n        pointer = 0\n        epoch_order=[]\n        while len(epoch_order) < self.epoch_amount:\n            cat_id, _, _ = self.listinfo[temp_order[pointer]]\n            if cats_quota[cat_id] > 0:\n                epoch_order.append(temp_order[pointer])\n                cats_quota[cat_id]-=1\n            pointer+=1\n        return epoch_order\n\n\n    def work(self, epoch, index):\n        if index == 0 and self.shuffle:\n            self.order = self.refill_data_order()\n            print(\"data order reordered!\")\n        return self.get_batch(index)\n\n    def run(self):\n        while (self.bno // (self.num_batches* self.batch_size)) < self.FLAGS.max_epoch and not self.stopped:\n            self.queue.put(self.work(self.bno // (self.num_batches* self.batch_size),\n                                     self.bno % (self.num_batches * self.batch_size)))\n            self.bno += self.batch_size\n\n    def fetch(self):\n        if self.stopped:\n            return None\n        # else:\n        #     print(\"queue length\", self.queue.qsize())\n        return self.queue.get()\n\n    def shutdown(self):\n        self.stopped = True\n        while not self.queue.empty():\n            self.queue.get()\n\nif __name__ == '__main__':\n\n    sys.path.append('../preprocessing/')\n    import create_file_lst as create\n\n    data = Pt_sdf_img(res=256, expr=1.5,\n                      listinfo=[[\"03001627\", \"ff3581996365bdddc3bd24f986301745\"],\n                                [\"03001627\", \"ff3581996365bdddc3bd24f986301745\"]],\n                      info=create.get_all_info(), maxnverts=6000, maxntris=50000,\n                      minsurbinvox=4096, num_points=2048, batch_size=2, normalize=False, norm_color=True)\n    batch1 = data.get_batch(0)\n    print(batch1.keys())\n    print(batch1[\"verts\"].shape)\n    print(batch1[\"nverts\"])\n    print(batch1[\"tris\"].shape)\n    print(batch1[\"ntris\"])\n    print(batch1[\"surfacebinvoxpc\"].shape)\n    print(batch1[\"sdf\"].shape)\n    print(batch1[\"sdf_params\"])\n    print(batch1[\"img\"].shape, batch1[\"img\"][0, 64, 64, :])\n    print(batch1[\"img_cam\"])\n\n    # (2048, 3)\n    cloud1 = batch1[\"surfacebinvoxpc\"][0, ...]\n    trans1 = batch1[\"img_cam\"][0, ...]\n    az1 = float(trans1[0] + 180) * math.pi / 180.0\n    el1 = float(trans1[1]) * math.pi / 180.0\n    in1 = float(trans1[2]) * math.pi / 180.0\n    transmatrix_az1 = [[math.cos(az1), 0, math.sin(az1)],\n                       [0, 1, 0],\n                       [-math.sin(az1), 0, math.cos(az1)]]\n    transmatrix_az1 = np.asarray(transmatrix_az1).astype(np.float32)\n    transmatrix_el1 = [[1, 0, 0],\n                       [0, math.cos(el1), -math.sin(el1)],\n                       [0, math.sin(el1), math.cos(el1)]]\n    transmatrix_el1 = np.asarray(transmatrix_el1).astype(np.float32)\n    transmatrix_in1 = [[math.cos(in1), -math.sin(in1), 0],\n                       [math.sin(in1), math.cos(in1), 0],\n                       [0, 0, 1]]\n    transmatrix_in1 = np.asarray(transmatrix_in1).astype(np.float32)\n\n    trans = np.matmul(np.matmul(transmatrix_in1, transmatrix_el1), transmatrix_az1)\n    translate1 = np.tile(np.expand_dims(np.asarray([-trans1[2], 0, 0]).astype(np.float32), axis=0), (2048, 1))\n    points = np.matmul(cloud1, trans.T)\n    np.savetxt(\"ff_rotate.xyz\", points)\n    np.savetxt(\"ff.xyz\", cloud1)\n"
  },
  {
    "path": "data/data_sdf_h5_queue_mask_imgh5_cammat.py",
    "content": "import numpy as np\nimport math\nimport os\nimport threading\nimport queue\nimport sys\nimport h5py\nimport copy\nimport random\nimport cv2\nFETCH_BATCH_SIZE = 32\nBATCH_SIZE = 32\nHEIGHT = 192\nWIDTH = 256\nPOINTCLOUDSIZE = 16384\nOUTPUTPOINTS = 1024\nREEBSIZE = 1024\n\n\ndef get_filelist(lst_dir, maxnverts, minsurbinvox, cats, cats_info, type):\n    for cat in cats:\n        cat_id = cats_info[cat]\n    inputlistfile = os.path.join(lst_dir, cat_id + type + \".lst\")\n    with open(inputlistfile, 'r') as f:\n        lines = f.read().splitlines()\n        file_lst = [[cat_id, line.strip()] for line in lines]\n    return file_lst\n\nclass Pt_sdf_img(threading.Thread):\n    def __init__(self, FLAGS, listinfo=None, info=None, qsize=64, cats_limit=None):\n        super(Pt_sdf_img, self).__init__()\n        self.queue = queue.Queue(qsize)\n        self.stopped = False\n        self.bno = 0\n\n        self.listinfo = listinfo\n        self.num_points = FLAGS.num_points\n        self.gen_num_pt = FLAGS.num_sample_points\n        self.batch_size = FLAGS.batch_size\n        self.img_dir = info['rendered_dir']\n        self.img_dir_v2 = info['rendered_dir_v2']\n        self.sdf_dir = info['sdf_dir']\n        self.order = list(range(len(listinfo)))\n        self.cache = {}  # from index to (point_set, cls, seg) tuple\n        self.cache_size = 60000\n        self.data_num = len(self.listinfo)\n        self.FLAGS = FLAGS\n        self.num_batches = int(self.data_num / self.FLAGS.batch_size)\n        self.fixaxismat = np.array([[-1., 0., 0.],[0., 0., 1],[ 0.,  -1., 0.]], dtype=np.float32)\n\n        self.CAM_ROT = np.array([[1.910685676922942e-15, 4.371138828673793e-08, 1.0],\n                                  [1.0, -4.371138828673793e-08, -0.0],\n                                  [4.371138828673793e-08, 1.0, -4.371138828673793e-08]], dtype=np.float32)\n\n        self.rot90z = np.array([[0, 1, 0],\n                                [-1, 0,0],\n                                [ 0,0,1]], dtype=np.float32)\n        self.rot90y = np.array([[0, 0, -1],\n                                [ 0,1, 0],\n                                [ 1,0,0]], dtype=np.float32)\n        self.tmp = np.array([0,0,0], dtype = np.float32)\n        self.count = 0\n        self.num_batches = int(self.data_num / self.FLAGS.batch_size)\n        self.cats_limit, self.epoch_amount = self.set_cat_limit(cats_limit)\n        self.data_order = list(range(len(listinfo)))\n\n    def set_cat_limit(self, cats_limit):\n        epoch_amount = 0\n        for cat, amount in cats_limit.items():\n            cats_limit[cat] = min(self.FLAGS.cat_limit, amount)\n            epoch_amount += cats_limit[cat]\n        print(\"epoch_amount \", epoch_amount)\n        print(\"cats_limit \", cats_limit)\n        return cats_limit, epoch_amount\n\n    def get_img_dir(self, cat_id, obj):\n        img_dir = os.path.join(self.img_dir, cat_id, obj)\n        img_dir_v2 = os.path.join(self.img_dir_v2, cat_id, obj, 'rendering')\n        return img_dir, img_dir_v2\n\n    # def get_h5_filenm(self, cat_id, obj):\n    #     return os.path.join(self.mesh_dir, cat_id, obj + \".h5\")\n\n    def get_sdf_h5_filenm(self, cat_id, obj):\n        return os.path.join(self.sdf_dir, cat_id, obj, \"ori_sample.h5\")\n\n    def pc_normalize(self, pc, centroid=None):\n\n        \"\"\" pc: NxC, return NxC \"\"\"\n        l = pc.shape[0]\n\n        if centroid is None:\n            centroid = np.mean(pc, axis=0)\n\n        pc = pc - centroid\n        # m = np.max(pc, axis=0)\n        m = np.max(np.sqrt(np.sum(pc ** 2, axis=1)))\n\n        pc = pc / m\n\n        return pc, centroid, m\n\n    def __len__(self):\n        return self.epoch_amount\n\n    def memory(self):\n        \"\"\"\n        Get node total memory and memory usage\n        \"\"\"\n        with open('/proc/meminfo', 'r') as mem:\n            ret = {}\n            tmp = 0\n            for i in mem:\n                sline = i.split()\n                if str(sline[0]) == 'MemTotal:':\n                    ret['total'] = int(sline[1])\n                elif str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):\n                    tmp += int(sline[1])\n            ret['free'] = tmp\n            ret['used'] = int(ret['total']) - int(ret['free'])\n        return ret\n\n    def getitem(self, index):\n        cat_id, obj, num = self.listinfo[index]\n        sdf_file = self.get_sdf_h5_filenm(cat_id, obj)\n        ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\\\n            = self.get_sdf_h5(sdf_file, cat_id, obj)\n        img_dir, img_dir_v2 = self.get_img_dir(cat_id, obj)\n        return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params,\\\n               sdf_params, img_dir, img_dir_v2, cat_id, obj, num\n\n    def get_sdf_h5(self, sdf_h5_file, cat_id, obj):\n        h5_f = h5py.File(sdf_h5_file, 'r')\n        try:\n            if ('pc_sdf_original' in h5_f.keys()\n                    and 'pc_sdf_sample' in h5_f.keys()\n                    and 'norm_params' in h5_f.keys()):\n                ori_sdf = h5_f['pc_sdf_original'][:].astype(np.float32)\n                # sample_sdf = np.reshape(h5_f['pc_sdf_sample'][:],(ori_sdf.shape[0], -1 ,4)).astype(np.float32)\n                sample_sdf = h5_f['pc_sdf_sample'][:].astype(np.float32)\n                ori_pt = ori_sdf[:,:3]#, ori_sdf[:,3]\n                ori_sdf_val = None\n                sample_pt, sample_sdf_val = sample_sdf[:,:3], sample_sdf[:,3]\n                norm_params = h5_f['norm_params'][:]\n                sdf_params = h5_f['sdf_params'][:]\n            else:\n                raise Exception(cat_id, obj, \"no sdf and sample\")\n        finally:\n            h5_f.close()\n        return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\n\n    def get_img_cam(self, img_dir, num):\n        params = np.loadtxt(img_dir + \"/rendering_metadata.txt\")\n        # img_file = os.path.join(img_dir, file_lst[num])\n        # azimuth, elevation, in-plane rotation, distance, the field of view.\n        param = params[num, :].astype(np.float32)\n        cam_mat, cam_pos = self.camera_info(self.degree2rad(param))\n        # img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED)[:,:,:3].astype(np.float32) / 255.\n        return cam_mat, cam_pos\n\n    def get_img(self, img_dir, num):\n        img_h5 = os.path.join(img_dir, \"%02d.h5\"%num)\n        cam_mat, cam_pos, trans_mat =None, None, None\n        with h5py.File(img_h5, 'r') as h5_f:\n            if self.FLAGS.img_feat:\n                trans_mat = h5_f[\"trans_mat\"][:].astype(np.float32)\n                regress_mat = h5_f[\"regress_mat\"][:].astype(np.float32)\n                K = h5_f[\"K\"][:].astype(np.float32)\n                # self.tmp += RT[3,:]\n                # self.count += 1\n                # print (self.tmp / self.count)\n                # np.linalg.multi_dot([RT, rot_mat, norm_mat])\n                # f1.create_dataset('K', data=K, compression='gzip',\n                #                     dtype='float32', compression_opts=4)\n                # f1.create_dataset('RT', data=RT, compression='gzip',\n                #                 dtype='float32', compression_opts=4)\n            else:\n                cam_mat, cam_pos = h5_f[\"cam_mat\"][:].astype(np.float32), h5_f[\"cam_pos\"][:].astype(np.float32)\n            img_arr = h5_f[\"img_arr\"][:][:,:,:4].astype(np.float32) / 255.\n            return img_arr, cam_mat, cam_pos, trans_mat, regress_mat\n\n    def degree2rad(self, params):\n        params[0] = np.deg2rad(params[0] + 180.0)\n        params[1] = np.deg2rad(params[1])\n        params[2] = np.deg2rad(params[2])\n        return params\n\n    def unit(self, v):\n        norm = np.linalg.norm(v)\n        if norm == 0:\n            return v\n        return v / norm\n\n    def camera_info(self, param):\n        az_mat = self.get_az(param[0])\n        el_mat = self.get_el(param[1])\n        inl_mat = self.get_inl(param[2])\n        cam_mat = np.transpose(np.matmul(np.matmul(inl_mat, el_mat), az_mat))\n        cam_pos = self.get_cam_pos(param)\n        return cam_mat, cam_pos\n\n    def get_cam_pos(self, param):\n        camX = 0\n        camY = 0\n        camZ = param[3]\n        cam_pos = np.array([camX, camY, camZ])\n        return -1 * cam_pos\n\n    def get_az(self, az):\n        cos = np.cos(az)\n        sin = np.sin(az)\n        mat = np.asarray([cos, 0.0, sin, 0.0, 1.0, 0.0, -1.0*sin, 0.0, cos], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n    #\n    def get_el(self, el):\n        cos = np.cos(el)\n        sin = np.sin(el)\n        mat = np.asarray([1.0, 0.0, 0.0, 0.0, cos, -1.0*sin, 0.0, sin, cos], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n    #\n    def get_inl(self, inl):\n        cos = np.cos(inl)\n        sin = np.sin(inl)\n        # zeros = np.zeros_like(inl)\n        # ones = np.ones_like(inl)\n        mat = np.asarray([cos, -1.0*sin, 0.0, sin, cos, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)\n        mat = np.reshape(mat, [3,3])\n        return mat\n\n    def get_batch(self, index, istrain = True):\n        if index + self.batch_size > self.epoch_amount:\n            index = index + self.batch_size - self.epoch_amount\n        batch_pc = np.zeros((self.batch_size, self.num_points, 3)).astype(np.float32)\n        batch_sdf_pt = np.zeros((self.batch_size, self.gen_num_pt, 3)).astype(np.float32)\n        batch_sdf_pt_rot = np.zeros((self.batch_size, self.gen_num_pt, 3)).astype(np.float32)\n        batch_sdf_val = np.zeros((self.batch_size, self.gen_num_pt, 1)).astype(np.float32)\n        batch_norm_params = np.zeros((self.batch_size, 4)).astype(np.float32)\n        batch_sdf_params = np.zeros((self.batch_size, 6)).astype(np.float32)\n        batch_img = np.zeros((self.batch_size, self.FLAGS.img_h, self.FLAGS.img_w, 4), dtype=np.float32)\n        batch_img_mat = np.zeros((self.batch_size, 3, 3), dtype=np.float32)\n        batch_img_pos = np.zeros((self.batch_size, 3), dtype=np.float32)\n        batch_trans_mat = np.zeros((self.batch_size, 4, 3), dtype=np.float32)\n        batch_regress_mat = np.zeros((self.batch_size, 4, 3), dtype=np.float32)\n        batch_shifts = np.zeros((self.batch_size, 2), dtype=np.float32)\n        batch_cat_id = []\n        batch_obj_nm = []\n        batch_view_id = []\n        cnt = 0\n        for i in range(index, index + self.batch_size):\n            single_obj = self.getitem(self.order[i])\n\n            if single_obj == None:\n                raise Exception(\"single mesh is None!\")\n            ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params, img_dir, img_dir_v2, cat_id, obj, num = single_obj\n            img, cam_mat, cam_pos, trans_mat, regress_mat = self.get_img(img_dir, num)\n            if self.FLAGS.shift:\n                alpha_pixels = np.argwhere(img[:, :, 3] > 0.00)\n                y_shift_top = min(alpha_pixels[:, 0])\n                y_shift_down = self.FLAGS.img_h - max(alpha_pixels[:, 0])\n\n                x_shift_left = min(alpha_pixels[:,1])\n                x_shift_right = self.FLAGS.img_w - max(alpha_pixels[:,1])\n                y_shift = random.randrange(-y_shift_top * 0.7, y_shift_down * 0.7, 1)\n                x_shift = random.randrange(-x_shift_left * 0.7, x_shift_right * 0.7, 1)\n                # print(y_shift_top,y_shift_down,y_shift)\n                # print(x_shift_left,x_shift_right,x_shift)\n                img_new = np.zeros((self.FLAGS.img_h, self.FLAGS.img_w, 4), dtype=np.float32)\n                new_alpha_pixels = np.stack((alpha_pixels[:,0] + y_shift, alpha_pixels[:,1] + x_shift), axis=1)\n                img_new[new_alpha_pixels[:, 0], new_alpha_pixels[:, 1], :] = img[alpha_pixels[:, 0], alpha_pixels[:, 1], :]\n                # cv2.imwrite(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'org_%s_%d.png' % (img_dir.split(\"/\")[-1],num)), np.asarray(img*255).astype(np.uint8))\n                # cv2.imwrite(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'shifted_%s_%d.png' % (img_dir.split(\"/\")[-1],num)), np.asarray(img_new*255).astype(np.uint8))\n                # print(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'org_%s_%d.png' % (img_dir.split(\"/\")[-1],num)))\n                # print(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'shifted_%s_%d.png' % (img_dir.split(\"/\")[-1],num)))\n            if ori_pt is not None:\n                cf_ref_choice = np.random.randint(ori_pt.shape[0], size=self.num_points)\n                batch_pc[cnt, :, :] = ori_pt[cf_ref_choice, :]\n                # if self.FLAGS.threedcnn:\n                #     batch_sdf_pt[cnt, ...] = sample_pt\n                #     batch_sdf_val[cnt, :, 0] = sample_sdf_val\n                # else:\n                choice = np.random.randint(sample_pt.shape[0], size=self.gen_num_pt)\n                if self.FLAGS.rotation:\n                    batch_sdf_pt[cnt, ...] = sample_pt[choice, :]\n                    # R = np.dot(self.CAM_ROT, RT[:3,:3].T).T\n\n                    pc_rot = batch_sdf_pt[cnt, ...].copy()\n                    # pc_rot[:,0] = -pc_rot[:,2] \n                    # pc_rot[:,1] = -pc_rot[:,0] \n                    # pc_rot[:,2] = pc_rot[:,1] \n                    R, _ = self.get_img_cam(img_dir_v2, num)\n                    R = np.dot(self.rot90y, R)\n                    # R = self.rot90y\n                    batch_sdf_pt_rot[cnt, ...] = np.dot(batch_sdf_pt[cnt, ...], R)\n                else:\n                    batch_sdf_pt[cnt, ...] = sample_pt[choice, :]\n                batch_sdf_val[cnt, :, 0] = sample_sdf_val[choice]\n                batch_norm_params[cnt, ...] = norm_params\n                batch_sdf_params[cnt, ...] = sdf_params\n            else:\n                raise Exception(\"no verts or binvox\")\n            # img, cam_mat, cam_pos = self.get_img_old(img_dir, num, img_file_lst)\n            if self.FLAGS.shift:\n                batch_img[cnt, ...] = img_new.astype(np.float32)\n                batch_shifts[cnt, ...] = np.asarray([x_shift, y_shift], dtype=np.float32) * 2 / (self.FLAGS.img_h)\n            else:\n                batch_img[cnt, ...] = img.astype(np.float32)\n            # batch_img[cnt, ...] = self.normalize_color(img.astype(np.float32))\n            # batch_img_mat[cnt, ...] = cam_mat\n            # batch_img_pos[cnt, ...] = cam_pos\n            batch_trans_mat[cnt, ...] = trans_mat\n            batch_regress_mat[cnt, ...] = regress_mat\n            batch_cat_id.append(cat_id)\n            batch_obj_nm.append(obj)\n            batch_view_id.append(num)\n            cnt += 1\n        batch_data = {}\n        batch_data['pc'] = batch_pc\n        batch_data['sdf_pt'] = batch_sdf_pt\n        batch_data['sdf_pt_rot'] = batch_sdf_pt_rot\n        batch_data['sdf_val'] = batch_sdf_val\n        batch_data['norm_params'] = batch_norm_params\n        batch_data['sdf_params'] = batch_sdf_params\n        batch_data['img'] = batch_img\n        # batch_data['img_mat'] = batch_img_mat\n        # batch_data['img_pos'] = batch_img_pos\n        batch_data['trans_mat'] = batch_trans_mat\n        batch_data['regress_mat'] = batch_regress_mat\n        batch_data['cat_id'] = batch_cat_id\n        batch_data['obj_nm'] = batch_obj_nm\n        batch_data['view_id'] = batch_view_id\n        batch_data['shifts'] = batch_shifts\n        return batch_data\n\n    def refill_data_order(self):\n        temp_order = copy.deepcopy(self.data_order)\n        cats_quota = {key: value for key, value in self.cats_limit.items()}\n        np.random.shuffle(temp_order)\n        pointer = 0\n        epoch_order=[]\n        while len(epoch_order) < self.epoch_amount:\n            cat_id, _, _ = self.listinfo[temp_order[pointer]]\n            if cats_quota[cat_id] > 0:\n                epoch_order.append(temp_order[pointer])\n                cats_quota[cat_id]-=1\n            pointer+=1\n        return epoch_order\n\n    def work(self, epoch, index):\n        if index == 0:\n            self.order = self.refill_data_order()\n            print(\"data order reordered!\")\n        return self.get_batch(index)\n\n    def run(self):\n        while (self.bno // (self.num_batches* self.batch_size)) < self.FLAGS.max_epoch and not self.stopped:\n            self.queue.put(self.work(self.bno // (self.num_batches* self.batch_size),\n                                     self.bno % (self.num_batches * self.batch_size)))\n            self.bno += self.batch_size\n\n    def fetch(self):\n        if self.stopped:\n            return None\n        # else:\n        #     print(\"queue length\", self.queue.qsize())\n        return self.queue.get()\n\n    def shutdown(self):\n        self.stopped = True\n        while not self.queue.empty():\n            self.queue.get()\n\nif __name__ == '__main__':\n\n    sys.path.append('../preprocessing/')\n    import create_file_lst as create\n\n    data = Pt_sdf_img(res=256, expr=1.5,\n                      listinfo=[[\"03001627\", \"ff3581996365bdddc3bd24f986301745\"],\n                                [\"03001627\", \"ff3581996365bdddc3bd24f986301745\"]],\n                      info=create.get_all_info(), maxnverts=6000, maxntris=50000,\n                      minsurbinvox=4096, num_points=2048, batch_size=2, normalize=False, norm_color=True)\n    batch1 = data.get_batch(0)\n    print(batch1.keys())\n    print(batch1[\"verts\"].shape)\n    print(batch1[\"nverts\"])\n    print(batch1[\"tris\"].shape)\n    print(batch1[\"ntris\"])\n    print(batch1[\"surfacebinvoxpc\"].shape)\n    print(batch1[\"sdf\"].shape)\n    print(batch1[\"sdf_params\"])\n    print(batch1[\"img\"].shape, batch1[\"img\"][0, 64, 64, :])\n    print(batch1[\"img_cam\"])\n\n    # (2048, 3)\n    cloud1 = batch1[\"surfacebinvoxpc\"][0, ...]\n    trans1 = batch1[\"img_cam\"][0, ...]\n    az1 = float(trans1[0] + 180) * math.pi / 180.0\n    el1 = float(trans1[1]) * math.pi / 180.0\n    in1 = float(trans1[2]) * math.pi / 180.0\n    transmatrix_az1 = [[math.cos(az1), 0, math.sin(az1)],\n                       [0, 1, 0],\n                       [-math.sin(az1), 0, math.cos(az1)]]\n    transmatrix_az1 = np.asarray(transmatrix_az1).astype(np.float32)\n    transmatrix_el1 = [[1, 0, 0],\n                       [0, math.cos(el1), -math.sin(el1)],\n                       [0, math.sin(el1), math.cos(el1)]]\n    transmatrix_el1 = np.asarray(transmatrix_el1).astype(np.float32)\n    transmatrix_in1 = [[math.cos(in1), -math.sin(in1), 0],\n                       [math.sin(in1), math.cos(in1), 0],\n                       [0, 0, 1]]\n    transmatrix_in1 = np.asarray(transmatrix_in1).astype(np.float32)\n\n    trans = np.matmul(np.matmul(transmatrix_in1, transmatrix_el1), transmatrix_az1)\n    translate1 = np.tile(np.expand_dims(np.asarray([-trans1[2], 0, 0]).astype(np.float32), axis=0), (2048, 1))\n    points = np.matmul(cloud1, trans.T)\n    np.savetxt(\"ff_rotate.xyz\", points)\n    np.savetxt(\"ff.xyz\", cloud1)\n    # def get_img(img_dir, num):\n    #     img_h5 = os.path.join(img_dir, \"%02d.h5\"%num)\n    #     cam_mat, cam_pos, trans_mat =None, None, None\n    #     with h5py.File(img_h5, 'r') as h5_f:\n    #         trans_mat = h5_f[\"trans_mat\"][:].astype(np.float32)\n    #         RT = h5_f[\"regress_mat\"][:].astype(np.float32)\n    #         K = h5_f[\"K\"][:].astype(np.float32)\n    #         img_arr = h5_f[\"img_arr\"][:][:,:,:4].astype(np.float32) / 255.\n    #         return img_arr, cam_mat, cam_pos, trans_mat, RT\n    #\n    #\n    # img, cam_mat, cam_pos, trans_mat, RT = get_img(\"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/03636649/7fa0f8d0da975ea0f323a65d99f15033\", 8)\n    # alpha_pixels = np.argwhere(img[:, :, 3] > 0.00)\n    # y_shift_top = min(alpha_pixels[:, 0])\n    # y_shift_down = 137 - max(alpha_pixels[:, 0])\n    #\n    # x_shift_left = min(alpha_pixels[:, 1])\n    # x_shift_right = 137 - max(alpha_pixels[:, 1])\n    # y_shift = random.randrange(-y_shift_top, y_shift_down, 1)\n    # x_shift = random.randrange(-x_shift_left, x_shift_right, 1)\n    # print(y_shift_top, y_shift_down, y_shift)\n    # print(x_shift_left, x_shift_right, x_shift)\n    # img_new = np.zeros((137,137, 4), dtype=np.float32)\n    # new_alpha_pixels = np.stack((alpha_pixels[:, 0] + y_shift, alpha_pixels[:, 1] + x_shift), axis=1)\n    # print(new_alpha_pixels.shape, alpha_pixels.shape, new_alpha_pixels - alpha_pixels)\n    # # for i in range(new_alpha_pixels.shape[0]):\n    # #     img_new[new_alpha_pixels[i,0],new_alpha_pixels[i,1],:] = img[alpha_pixels[i,0],alpha_pixels[i,1],:]\n    # img_new[new_alpha_pixels[:, 0], new_alpha_pixels[:, 1], :] = img[alpha_pixels[:, 0], alpha_pixels[:, 1], :]\n    # cv2.imwrite(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'org_%s_%d.png' % (\"7fa0f8d0da975ea0f323a65d99f15033\",8)), np.asarray(img*255).astype(np.uint8))\n    # cv2.imwrite(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'shifted_%s_%d.png' % (\"7fa0f8d0da975ea0f323a65d99f15033\",8)), np.asarray(img_new*255).astype(np.uint8))\n    # print(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'org_%s_%d.png' % (\"7fa0f8d0da975ea0f323a65d99f15033\",8)))\n    # print(os.path.join(\"/home/xharlie/dev/DISN_codebase/pnt_vis\", 'shifted_%s_%d.png' % (\"7fa0f8d0da975ea0f323a65d99f15033\",8)))"
  },
  {
    "path": "data/filelists/02691156_test.lst",
    "content": "521eab9363fdc2a07209009cfb89d4bd\n50da48c8e7644508fca1f1143bb6bc17\n43abe330362164e99be82ec29531a70f\n4ad92be763c2ded8fca1f1143bb6bc17\nd06105ee2a2ae27c51008e496c6cfd2e\nddec69970cbc4d29112a90660b187a10\n36d8c865f766e3e097872638b21438e3\nf9e80ce23d9536623fddedb0bf24c68a\nb1f08c51a098c43696d224195a988f09\n4a837740b388aa45d8ff6111270336a9\na56143efe74ee89ebbf3143b1cb6076a\n3c7e4628a9ea201bbf3143b1cb6076a\naa07239e9397cf189601fb40d0d298b9\n4635326bc4fdc3e9297cd7e2ef7dfa80\n427030abcc0f11a8947bbeb9022263b8\nd08471df3e76602427743256ca3834f\nb785b39d10c33b5de9f07d25f575b2d4\ne0385af10bddc6a0ca8607f540cc62ba\nb80bd34ab330babbc8727b27ee96a4b7\ne42443669339a6c1a5a118bd15e6e34f\nb4575e5e6161fd497b164268a44f7712\na6cbada42d1a30d0f5c7319b71bdce6e\n53eee66291c47a91bc0909d98a1ff2b4\ndb0c0fc7ce05d372311e3590f044c241\nb976a48c015d6ced5e9e2656aff7dd5b\n489d3e4cc3d790a0ca8607f540cc62ba\nd20e3ed9b3430672bbf3143b1cb6076a\need299b690be51ffbd931fcaa69140\nb092d523bdd320e4ca8607f540cc62ba\nd0ee4253d406b3f05e9e2656aff7dd5b\n3db61220251b3c9de719b5362fe06bbb\na1708ad923f3b51abbf3143b1cb6076a\ndfa36bffe436a98ee0534173b9189765\nfe0c4db38fb6399990b1d6deb98feec6\n545cadae487b55bbc46ba5100bcdc520\n57937c7ab42260ebf119374ee5d5f944\naa2af754642256c08699933784576e73\n350d12f5290908c7f446f92b52bbd82a\n48e9c61de4db838d84b83051fa0ae5d2\na9a7f21271b3efbaf446f92b52bbd82a\nff52c059efaca3c1ca8607f540cc62ba\n997cb29f544d6f2726360e1e29a956c7\n57fe8ad460bcb4929a4a28ef635593ce\nb1835836e541766882568aa50e4e5dba\nf12eefbbefabe566ca8607f540cc62ba\ncf0cdaa94220ee3f4c3a35cee92bb95b\na074750e28ed3818203936772104a82d\n45a4ec99ed13ed773c2498c4c2f13ca\nd72a483cf8a0cf2bbbf3143b1cb6076a\nc9aeb20d7cd1b3b45e9e2656aff7dd5b\n471ca950dbdf0c6c5f80f808704d6409\n9825919cffec79701944f01d3ab2091b\ne0cc4f538a8da2d65d3bbd70fc7759b7\n97d662e5e6345b46bd46d022fd7d80aa\n9ac292686a2fcebbe719b5362fe06bbb\nf2d4b8440d4bde5330afbcb38d77d0c3\n4c008f39378be18bc0909d98a1ff2b4\nadb3ea03d7b954255e9e2656aff7dd5b\nabc465975af79827dfb86dddee1d6ac3\n33faf711ed54a4d3db22b838c125a50b\n50755e616df58fe566cf1b4a8fc3914e\nf6ea6663b48bf78261f1ef59130c405d\n947d6b9cd1966e2e719b5362fe06bbb\nfc7387d630c84bb9c863ab010b80d9ed\nb6d61068ef2bf2d46059aeb39e538eb2\nb590adb6d3486f6e90b1d6deb98feec6\n9afe827a622d8ca28699933784576e73\ndacb447d7820e7f7ca8607f540cc62ba\nf57c74e194cd2b2bc8727b27ee96a4b7\nb31bbc50a0d3a4366cf1b4a8fc3914e\na5cd14be786fc8175e9e2656aff7dd5b\ne86fd13a49f0ee0a62b600da24e0965\na0a7e673a1e1bca78699933784576e73\nd4dac019726e980e203936772104a82d\n9bf3c126d5918c41f5c7319b71bdce6e\nb72804a8bd3dbbaca8607f540cc62ba\nb9fabfa6d5fedbc3a8e091cb544689d5\ndc7c5d12854b9467b96212c8f6cd06e\n9a8aecab136ce50db7ef47444625afb2\nb2b1c1d5c757af8a7209009cfb89d4bd\nda9d111e1175d318bbf3143b1cb6076a\ne8409b544c626028a9b2becd26dc2fc1\na805c30d4b09f11f62347b4731688b0f\nb3a59a941500e76535592b447835a16e\nfd41d04f1aabbaea3fddedb0bf24c68a\nab95a4e7f2d3cf9ca8607f540cc62ba\nd5a94c9f09d238c4c3a35cee92bb95b\n571cfb1da3d5b3704b5910188444efc8\naf696fc30a96a0c8bc0909d98a1ff2b4\n4ff50b9f815c58acca8607f540cc62ba\n9f5dda6f01bbe29bf810506e9ae2dcc2\nba662ec78231c493252b4f9439ef95a6\nacd8f367c36a3d84fc7a6d75b3d807ff\nd2e2e23f5be557e2d1ab3b031c100cb1\nf39985959d394f8c863ab010b80d9ed\n56ba815f883279b462b600da24e0965\n356a633ea047c549ca8607f540cc62ba\n9ba460913d86466f62347b4731688b0f\na04d10b24ede5e9a3de778e85611513b\nce827e4c857d553f71d03b466c72ce41\nca4ec545363b3b8e8c2814a4ead9cb90\necb4ae05d7dd135a619550d2af0b6117\n973df01cea43c7f690b1d6deb98feec6\nf13827d156628467b4cdad9a5bf52dd5\n1e0a24e1135e75a831518807a840c4f4\n2d3ecfb6d7ef2c45e08b03c50fd87acb\n9bd8d0fa75bc21c5e3375a6b96a1d765\n93ba822e84586999e3375a6b96a1d765\ncf61af3c52dae1e0651e8da9cf70afea\n5bc41589eba11a4e15477d594f1fbd99\n7e8be9c88e596b84198609c994ea801\n7805239ad1e40e07c69d7040c52664c5\n8951b4f9834869a6673a028ac04b7de3\nfe266c740580c102ff9ce0c50c2cd25a\nd844094b073a0452b04b2d1c5ce9783b\n79351c8f83f5a3abb2d09bc8d348e46b\n8f9fe8d7df1af4e057240bc6888ed016\n3255eb4c8ad868b3b378822897b79a81\n7eef160cf5e4188a5a8c25d312cc3c6a\nf9fc7fc23e62986fef6c510e24348d3b\n70f330ba02ad7a05bec2ed99cca9acdf\n52151d6a699ed1acecae07472b415b97\n92a83ecaa10e8d3f78e919a72d9a39e7\nbc58ff3369054fa68f52dc705c3109b9\n8700f6db654c5d2aca52e8e28cb200ce\n4c0f48d49805a37298a97ddfb532e08c\naeb10a6725afb1abc79f92df566f8c6b\n46d2373fa05a4876bc913a3935f0ae10\neffbe2683574dca2b37a6cf3f07b9ff4\n6c432109eee42aed3b053f623496d8f5\nf62ad267cdd1a00a34b1f3550986bd42\ncbf4dc1c144ce656ffa79951b9f955a3\n5e77ccd7794465dacbbcf57b22894cc3\naac4ceced7042e4c1a6d59f1fe711d12\n1c2e9dedbcf511e616a077c4c0fc1181\nd5e01850a9d1f3ac5fb48d488d5dfafd\n752d9a010346862551cfdb4c9f126c12\n396c8e232192a44be1a9c234926c21e2\n733db701650ed0d4651e8da9cf70afea\n14d9c576d06622198f52dc705c3109b9\nbddc2c1a4fae008947a1dbf5fd48a4dd\n5459029489f68030590874dcd9dc8481\n4a7b3bb0f7e4e13af7f031a34b185310\ncaa7e70beee4543f42c20743f866e1a6\n3b2a19d782234467f9cc1fc25372199f\n97066012fbca5983c74417871493eae8\n95cfdf728da16975c5f6fdebb053ab2f\n5aeb583ee6e0e4ea42d0e83abdfab1fd\n7790715d4bc226f8b569b36137d81c9b\nab7001e6d0321374b378822897b79a81\n5ac0cd21410b2a6a341877ff7a6c751f\n1af4b32eafffb0f7ee60c37cbf99c1c\na87c4bebcad260edc05997f3aeab04c6\na12179d6f8b753a934a446df7eff04e9\n914c308ac4a9156842c20743f866e1a6\nf66bf1a9b6d2d109a34fb3db6a11a22d\n4658a2fb7353f839643ae903098a314\n376e9480ebe635b1e98208adea7b4e8d\nad66ac8155a316422068b7c500584ade\nb26c50c3dd4a1cbb16b34c3751bc447d\n19b219dbd2e4467828d4f2ffc8f17f3a\n1e6a71e0cb436a88a3a1394d6e3d2c63\naf04f04964fc2f1b64a62403221fd59f\nfbf6917bdd86d5862df404314e891e08\n48b99ae8fbe0762a8ed04761eced33c6\na61bb94e08709f2bd0734afa0d357999\n885b7ba506c9d68ab6ecbbb2e4d05900\nb5130ad12f6db8d0c83b9fdce4d2e0e7\n8383e10a1d1faf89c7749c7e68c22ddc\na0c9b929b9a57fc8f0ea53ad10b4d47\n8fa9e2e8dbed43911f32208e53f871eb\nde9e093bb17848c3b2bd4a92202f8700\n369244d49f8f1308b858e64ff0fa8db3\na657a0dec941d40772fe60ad306aa5\n464a8718f0e81ffd9a6e43b878d5b335\n1adb40469ec3636c3d64e724106730cf\nbfa8e832618454c0a179137acc8d4437\nf9a8c5ae39362284d538ebc793e748b2\n4bca81eedcc3da52b8013668e30e23b0\n552d76fdb54e5d57cf7cf1e30e2f5267\nc087319ca6126c51c5b0cf694baa734f\n5c4095795aad447f7301f2b895d332ac\n8a84a26158da1db7668586dcfb752ad\nfc44636ad5fd9754927b6179bcc6e892\n84de1d44d8795d5876817284cd40c7c1\nc207db490c4acde27b5d32a85e1b7987\n65654b5c4e488e0c961fa14fc879444e\nb152548ae1a12bcb680558279a114842\n22e4e0210f80fae813940713146922c1\n3e0561d70c7fd4f51c6e4e20f2b76086\n3fd97395c1d1479b35cfde72d9f6a4cf\n257d7b5ccd3b5c7f7c5c969e221ece01\nad6e93a1db3e1da5977e4bb19a62128e\n218caa58819e10d1fe40308d822f996c\ne30e25fe047ce1ea10b08ceced9a0113\na73be4c48272735df64801ad2940cdd5\n3713302f0330f960970864f653fa080f\n98011d15300361e54f0e6f5b218145e\ne6363b1d63f6aad3c1006ed55bc1a3fc\n1fccf0064e0aebfeb179f2ac46747670\nb552a6155c5b340e70828dc2c11733e1\nb27de883a83409a86bd2a0f0614d73d\n536f5d8e46467566643c3c243d611069\nbd48d0beb5d1acf1d2106c9042f1bde9\nefbf3d4c8877e7dc7ce8c809505eca2f\ndb4e26b10e48f0202eb17a4a1756af76\n721eab5632f60887e72b7fd373921885\ncbc9d6ae9d22fcc57f3efc94c2d31dc5\nbb7d526405e9347b8f6810e1a2b6aa04\nf0d6c53d21ae5b5cd0c57f18e8d8830d\nd722973c75c85d93d0734afa0d357999\n789f032dccc6092977b7d0d4764c121d\n8a25b5ee4421f96a349a1add3c9c4a87\nf3e2df468c15795872517bb0a6b4d3ef\n9a5f4508a4337d195e48cdafd0101d9\n63ca41783e5d41f1651e8da9cf70afea\na374b0448461438ef3d4cc10d9776c62\n3d5354863690ac7eca27bba175814d1\n62c875c3db8bbc512842bbbd2f23c97c\nedc9fefa5fb82a0443a0c73d98327de8\n2a2caad9e540dcc687bf26680c510802\n8b0d9118e9e7dc3f95c9af648ce95367\nc6c525a71215dd5a459f73e379ceb540\n90612205109d7458e84aab2e1d454e3c\n9d292c07f1dff16e1304733e0af0907\ne1e7f3843b1fb876f5156bb441883fa\n1c798f3e8bcaaed6f34c3a85e57ba71c\na5021faf372fa2c48f329df3701cbb3d\n39ae262853031e42aedf20f7099e25c5\nf8647af0b1ad01445de04aad18bd94c3\neac2573ef637a0dbf31cac033b2c0831\nd276954441de1e878a3d2bbe7d58317e\n79d82d0db21dff48aedf20f7099e25c5\nf74cbd91e6fb40dfce5965228d7e8c9f\nb9ee9a1ed9296e8c598bfdaf1b614b1\n9441549e323552f2f001dddaf44c449b\n6aa1ef13aebb1935ebdda919ac927e5e\n3ad337dcef167024fe6302fece358e4a\n98168c1772b769c0ea1bd6f2443b43e7\nd1a8e79eebf4a0b1579c3d4943e463ef\n4def53f149137451b0009f08a96f38a9\n8325baeca433510f4e8c959f70e2c0d8\n48df2496242053da4ee0fb6a51564c3\n37ed9b767fb055959d61264e98b74348\nbf124ddeb1189a3cb312af71146176c8\na3fc9ef9f611a783525e60273896d30a\n12f3fb99c95c6a7357891d676f728bc0\nfc16704314dc71ee9a6e43b878d5b335\na14b262838529c2c81e1d9f6b27f1a92\n1deb997079e0b3cd6c1cd53dbc9f7b8e\nf4a5b28233523a4e588ed1d0f708d42f\n48cb2de06f46cde25ed29e0a9f14425\nb04ec55f4960b3b984b7ea000aa0a2b\nb34526d94a00ab55f5a25dd70eb863e0\ne416ba617d5388401b0d75a1d7e2d58\n3c2986906532a1c8cc36f752df32539d\na516f9a6947bd0d639cb1b92881e8e76\nc510e14ac20edee814a46d7ec44fc258\na93a20767d70220cd3b936925082270f\nb43ccbfd5e1d88bd780469afe5e05eb1\nb6a1b55eb79a383542086bcdee59b1cf\n9f9cc77c5e32664e6a8a5e39588ebf68\nf9c93ddc9b921d88a72ae0d8b7f98590\n55fabcb7e7c11560fa6bb68bdba0e663\nd12f7698698bbc8f9b10643ba761a774\n444d67950ff9a4cc1139bebb00fe5be8\n50342e9cb1a7e00e59c11002fedd14ce\nc8a7eab796be432d5de04aad18bd94c3\n5ae05c956af61890b58b3ab5dbaea0f7\n2c1fff0653854166e7a636089598229\n6cf339eb8c950ac5d556fc099c90ab45\n10aa040f470500c6a66ef8df4909ded9\nc1b5dc92221bcdad5fc84bf2b9ef981\nfac4af109beb0108b4f192eea1889928\n83ed7c81a011d72a179137acc8d4437\nea58a51483e3604897dec65c2238cb8a\ne033b6ad34586a86cc1c9e8218bfe7fc\nb9ba988dd9a6cf426e8b6dd39a855b69\na702da03d770f5096e2738fc9da60e6f\nc359e067e75cfa8693d4024985440d4c\nddd06628f3bfd0b64e1dedff94c67c76\ne79e9e1c8dae48888ee1ba57de3d34e0\n14762404f34eb050bf7a28999a707afd\n7a57a9b261f60dcb2296d88107d065f6\n85da8ecc055fc6cb58328b65a4733701\nf07028f2080aaf4e75b90b083ed202b\n9e998a06601e9f944b2bd73664dd1844\nb59a7cab8e95f6eaf3a7414a84b5637\nafc975c77f6d5a1bd23d6ce2c840685b\nbea43bda17ea2ec792e07599d5caede\n4f0bf26c62bb7c8b7e1c97634acf0214\n70295db03521e219a5be3c7b80fdc3d\nc5c726006697aa19b5666ac9dae008e8\n2a906a12b740afe2fe93207afde39a32\n737629e185f4c45f99f30106e678cab1\nfeb0bd0dcd155af4cc34b900bb2492e\n41fd618a15692db27359b134afde902\naa0802b8b940b7222296d88107d065f6\ne0df54a0990000035dde10d3d9d6a06\nb75575684fa8ffaeac7e7b41e1ebe3e4\nee0105d05a5007ab827afb33b6d5eec6\nde29a1335c332a5ef7bc9a344bb7bae5\nb46455f82ad28fb595ff232cd38210b4\na8773829298f492cbcb9a99298d16322\n6b69e4c1cceb6e0681fa1ee3c368532e\nf24daae76836e249f0878b58b4e887bf\n69d471ccfdf9e55cace8f9c62f7ef839\n58fcba9ef405277cfc8d2548f6ad75e\nabb19f2adc42aea2579c3d4943e463ef\n46829981c5c25285bfc0a2c490b4c222\ne0b5c450de6d7fe3d87c63d8b3018b58\n66e60b297f733435fff6684ee288fa59\n67dbb0de722cf5cd7a734abc5ba1db0f\nee92bc35ee989f59271b3fb2659dec56\nf5403d3ffcc6bb17adce4f2283adbdbd\n79c10c1d217b4e96ee2723567c7709e6\n461891f9231fc09a3d21c2160f47f16\ne9df546c1e54af0733d72ae4e2c33411\n5b5c4dc4bd29dc8166cf1b4a8fc3914e\nc2352a98200942e5b39b85af85a55aef\nea06bef342fbfd4236f3a2343a8221f2\n237b5aa80b3d3461d1d47c38683a697d\ne5c6ba3e7d4f2fde40acb87a6be88b3\ndc74cd06430b61f478d9c09d692f9057\n5b985bc192961c595de04aad18bd94c3\ncc0c7bf3f0f598db2a9ab3cbfdfd536c\n3ae96a1e1bb488942296d88107d065f6\n74a5f937c22aa08a3e70653c1b3170b5\nf1111840bde23096ee2723567c7709e6\ne3de366a0cfb59ed38294c37c250d7cd\na48676cfe44fd9bee40acb87a6be88b3\n76252e1b65ede02f889919e9428eee54\n7fce28d597b3137cf24f8f5f80968450\n1b90541c9d95d65d2b48e2e94b50fd01\n89f21747e6403735d9e1375411b582e\nd3f2dcf27000283799d9d900afe054b8\n861dbd415c83e12e67c647d96462f673\ne1e5cfcabcbe26a03087f84b199fd297\n12991e9529a2b2bf9ac9930d2147598f\n97ec5b82d9757b639cb1b92881e8e76\nefc9cda06afcd8c2354ab1decf4fe605\nb81339a2f1dbc0de9598ceb95c7f0752\n1cb757280b862ae52c7575c9089791ff\nb2b3fc16b9a676f5950bd071d87a18b3\n97eb9cf6c8a11a389967b23b351d6841\nebd96d07a7d68cf2fc7b6f7beb3a27ff\nbf5d6902e75fd8812296d88107d065f6\nd109c08886c2a3dabdf566b587d6b21\n7d226c520a29c7705e28caa3b26a73fd\ndaeb27ada93505b1e24e4b657f0a298\ncc80380c511ec8e2c91a9d486db717\nd6bf9fb6149faabe36f3a2343a8221f2\n715623df7ed5a6fc2296d88107d065f6\n4e2322d4f1c0d29df96e777471c18dbe\n94379090010cd6bb874c9ce092a813ef\n96ed9dcc355f3d34585be1dcf6e59170\nce682d7a2bbf77b6fc4b92d3d335214a\ne69631d34410f99ac4f72bf08dc79a6\nf134306ace70df3ac1006ed55bc1a3fc\n8b59ed9a391c86cdb4910ab5b756f3ae\nafd6b2789e486ad4663191fd557d3a61\nd24f2a1da14a00ce16b34c3751bc447d\nb94b4edc5e4701093ba0eea71939b1f2\nc31f5303997022c842c20743f866e1a6\n62bc52c204b738317dcda43eefa0ac02\nf691f2409e006d33f412783097373bdc\n4a3950ebb6fe6aca8afca43ae0909988\ndf25be12ae47d2517ef7776b3bf5815c\n33ddbeb13fecf7868405970680284869\n448bd2bcde027ca9e5d07633dda45110\n5de2cc606b65b960e0b6546e08902f28\nc237b4636625f1b0af8d9a7eb0a2bedf\n31a06c63b8932cac8bec85d7b4e1ee67\nd43b80dd95a2233a5ae839ffe09b9d31\n9dbab9e46b372e837645a27090729af6\n5d8583703889178a8bc354dd4eb23614\ndf68b8fb9f4531b42e690fa6dfd5d610\n70d9304de59792a9515d73fcb34092fc\n9c41b0040048581c32387cdb9b2a84d5\na4ea22087dec2f32c7575c9089791ff\nb8e4e4994d4674cf2023ec956848b741\n896508fa65b8a31c12b38b1d99376c0b\n9a266b3a734e374687bf26680c510802\nde519752147a225032387cdb9b2a84d5\n35ae2885a0e645fb7843a50f3dd2047e\necc50d702133b1531e9da99095f71c63\n5dd2324cd6ebf52e293fdbda4e7beec9\n4580804c798365a094a6f19fab16fe62\nadaadca2be822544d81b6465d8dc20b5\n167740d2a5f5cb6c7f4561609781d8c9\n6896058e4bc0be46bdf566b587d6b21\n7664f3809169e998a4ee0fb6a51564c3\n8ddc3bfd5a86d4be2e7c68eb5d1b9123\n879ebdd198cf4aa58f6810e1a2b6aa04\ne814190f683946b798b4e13cd6d24c30\ne115f4f824e28246becc132ee053f2fa\n87b4476ce2df563972459a40bb821ba6\n48a0d4cb43c961165de04aad18bd94c3\n563cef4df464ddb1e153dd90dac45a6d\n75705b82eb24f5ae23e79e99b949a341\nfbc429365ab7136be1a9c234926c21e2\n1a9b552befd6306cc8f2d5fe7449af61\n35bb733b13c48bbc839ab492b6143b9d\nc1c341e597c01d3814a46d7ec44fc258\ne3aff5ae3e8f2a7c4c2c88971423d0be\nad546b049b2246bd609e2d916fa0da27\n57c4a88a7b2e10f14c971d5c531b9d1c\n862d685006637dfef630324ef3baae90\n81e4cc88fc757ee220152153c3a56171\ndfe65f8a20df11c5d1df55cbe0874aa\n853dc1e740631bf2ffa79951b9f955a3\n68c61d42222863682296d88107d065f6\n8996445c6d2407c0fb5c1b0f759e2bc1\n26f8a11864fd6bf7b68211fcc7956ac6\ncda3cd7f140fe791ed137f17a6d8e3c8\n13f9eb29d699488a99eab31c7df6f5c3\n8c42e3042a4beaa7d5c40787c7bb7824\n9b5e193416d5b2c09d608d5eb8e56ba5\nd940f33afc01ff036da97d9f744f7e97\n213cdfff847f32135ae839ffe09b9d31\n895ae296f701f5e2ee7ff700fef7cd22\n7b1859e6b57bb6621c795eedd7ee6db0\n85a15c26a6e9921ae008cc4902bfe3cd\ne4b0599a9d06f7ae39cb1b92881e8e76\n99c0ee178c5a4dbd8d8a353a30b33dd\n6459a6977cce8f8789b0d69aba91f1ef\n1d0c128592385580e2129f6359ec27e3\n48c4e5e2c2dfccc7a68efacd2d601104\nbdfbf1c555dacd9d325212819caa597d\n8264f874bc7fa58ac3d9e92d9c33325b\nb51032670accbd25d11b9a498c2f9ed5\n76811819fc2bf7fbdbe9ce60b93b8bd5\nbff6cee515cdefa8a5effc03faf54012\ndd65065e6e2d31d62e350437b1fc5163\n5558a2511bd43caf2fc668af6d3ad0ad\n1998ee1bf3806b05818b286e41cc1a3f\nc7c5bb658cafcc7c67711f7c205c5b63\n123ac29b0aac8c8e5d07633dda45110\n343a607d1604335fb4f192eea1889928\n67c8fe06930cf8788762ebad71629f9b\nb5589ad89ceab860123d1d349cb8cfb9\nf6e6fd724a9eab24ba8e93696257b3fc\nbdfa5ff6aefd3fb8a57854d2ce086d65\n9a84ed39f9a2a3c0b3f2b01de37c0b29\n5294c39d2a57bd7e5cad6226edb8e82\n8c0c8307c5de1b65ac96c03d6280efb7\n51d6c3bf592a1fc16dfe8328adcc508e\n204f4e737fa14aef33ba31f6ad43c835\n723a86a2b266109d1fc43d5b32fa230f\ncd9f07bc1e5087b7f33a09c02bab9cc\n407135e4c3c7cf2523c853ced7da0343\n320e542b0b2f8afa248b612e49a6e572\n3bff0d84311470a357f53fe209e96fca\n6e25548ed9d2c7b597dec65c2238cb8a\naea5192a4a7bda94d33646b0990bb4a\n324304121b61339bc36cfeafa51d54fc\n3d23703a618ce7df1e569ed4e4cfe84\n3f9cab3630160be9f19e1980c1653b79\n5a4c3f3af30e42e057891d676f728bc0\n86c8e75179f00b725b7d3d0361fc611b\n87069f21b11c180799a771d197c7b487\n52a84fea7c314f4c3dfc741b4df74043\nb481294a2692419cba5f6626ebfdf87f\n2aec6e6096e640add00d52e62bf14ee9\nff6e377e8e5b3757cc34b900bb2492e\nc0375c2ce28292d9a179137acc8d4437\nbd698089021a4a58e23abb9b807b4cb1\nbbd8e6b06d8906d5eccd82bb51193a7f\nb8ce3803485b620b2c674305897e1782\ne3dd7fd80f9e53be6ec2a8147a044691\n27e6fe140e6e668a3881254c11db28\ne41c5719ad09055f1b880c747ee1f83\n3d6a8f8c27e465aac6747f7c9ffe9e32\n80b8f4da6b77eb66d208f79049825a82\nf6e6bab105ab890080be894a49cc4571\n4129199695b9344930813b40bae6f4cd\n1d396e76ecfd973575ffe5b08493cffc\n20865546e07ab8067c597cd12d99981b\ne110c699f2ed6511b53a02c8ab03ad65\ne2ddbf9e63bbf9cc4e99bd46be8e610a\n5d1d88958bd1c9c573328938c756eb4b\ne02485f093835f45c1b64d86df61366a\nfc0097a6ad81e5cc1c2daaaceea98731\n35892510dcd7cebb87bf26680c510802\n4fe7bcbeccf207a5a2a2a57a63160d60\n804821516ddb3203c6747f7c9ffe9e32\naff5f5ac9dbabebee5d07633dda45110\nda1acb401541235be4d2773f0358b43b\nd45809b73a371efd185b376619557c95\nb509fbbe99df854f0478431b5ad57db\nf337580024e8c36da5cec7cc83604181\n3069d990d52051eb3a34c2907e8f3f1f\n3921f5f454c5733e96e161ce7a956a8\na6b09752263b1de2296d88107d065f6\n6b6cb0c71731aacc277d303e3a640f98\nf390b1b28b6dda03dc57b3e43c28d486\naf73d05ac86369bf4ce863ea27e2b897\n3b5b8a2384e8850d185b376619557c95\n52ca6970fb09b561f9f7510373841dd9\nd4cc520929730248642fa8402286a797\nb702e35f4a59e81f64801ad2940cdd5\n20150c9c3038d08419bf31399c6e39e0\n4bfa5d948d9ca7ab7c5f0032facde6fe\ne805054e6b9b3666fcfb100fed3ed97a\ne9704a563a5a0a3f5a4b8d382b9decda\ne138a98d82f3aa692142bc26f72ae44c\n7f0c20bc26b08a163e2ffe63fcfe09ec\ne3f68fbd5d1629e238976998fb731b88\n3a3827f1a76c5230e24527abcb488f31\nd96f2b6990d0d79e247412be0e58d7d4\n882b5868ee1382ab1608512333cae245\n3209a02075cb9f0168023bcf4ba60aff\na1db8dcb7f1fcdd597190b73ffeacc5f\n3a54f2b6f9b053b759b859405dee3be8\n2e3c317357ecb038543941eaaf04581f\n6481eb70eb9a58cfb2bb87688c5d2f58\nfb9deec3a422b06b609e2d916fa0da27\nbfd606459cace196e7ee2e25a3cfaa4d\n330f797ebbc565e71560e45167753555\nb153004c293d4b151f32208e53f871eb\n3f387e8586f92b6b7d3b11085e75c7ad\n9cbbede82cf4f7e463a33dad5001f8d7\nc5e999752db444eb91a464c5de1b632b\nd6d84d05892a4f492e7c68eb5d1b9123\n7b1d4aff088fa3736e0f3d76ecf4a53f\n8277c0294461b76e8405970680284869\nb2960c2be8fad9dac140e34b6af37a1d\nedd9583988b62c90328f15e6c60d0e90\n7f6af37cd64377e1cabcecce1c335df1\ned1d51ac367d0fa5f830b2dc9bf63133\n70ed0fe305145f60e53236e6f2fbeb94\n83778fc8ddde4a937d5bc8e1d7e1af86\ncf6fa8a054ed7bce5de04aad18bd94c3\ned50758d8792491314777db9411e4949\ned4aaf81dc577bedac4f72bf08dc79a6\nc271badfb6842c882fd5ed7e39258c7\n2b5c0a38c754927d21abaaa81d1a4195\n2087ba820bd70001243402995adcdc4f\n700bc5991a46c1d53ddab476a0f5c5ee\n14cd2f1de7f68bf3ab550998f901c8e1\nf9db62e6a88f0d7129343faf3bbffb15\n398ff83ba75191f050405f236096897d\ne15f4c98857b67e41e287f9f679ab620\na359cd0297d4e655a871065f9ebc6ac5\n6341436b6a9df0c6683651cbc8e49e4f\ne75ce21b914ba565b4c6d1a32dc4f554\n7ce599765d4c11fe87bf26680c510802\n8b4309aac2f7f6b3b97c9314bd4647d5\nf6ec20afe98e37ef6e2a24768a2fccc\n556d2b99469e62e623a346a784afd6ba\na7394a6f2dcf8e9b3cbb132878a747df\nc47954200b78fc32f677dde7945cba25\n261093138afff514d8d7812d176664b2\nff6ab0fe13f58e22962a5697e98a94be\na57802c776ba1b69e44b1dd0f956e84\ncbb5ed444249f0a9e90916c8815b5c43\n2dcc844fe9c4d4d99b0fce6a4905cf2b\n6420a3ff5e526d59e16519c843f95ce0\n61e8e8a7ea726a03c79f92df566f8c6b\nd6c655a7c97cab8e9f5f802084bd1d73\na828cbaf4b3bd253e163b5a191403a0f\nd883e6e5622a0cab72351dbf9e0687e0\n9436273fc1a5e3ca7af159eaf7625abf\n9c0431249dd5a50dfaf7f0ef9aa8fd9e\n15898fef6fec88c53ada73811bb576de\n902cc09a60a494a278d0cdddb0c08062\n43d8125d940bb2ae850f318836ee7512\n29192f8c96264e3435fc197bbabcd5bd\n2c64c521c114df40e51f766854841067\nb2ceeee3c5b75962ac4f72bf08dc79a6\n240fd3c1fd804ec1b8cf782e8c539948\n5e9129782c45b26992e39b8eae3e6b15\n1284eb71b82f6794207f77cc6c79e3d5\n958c54f8da7a1359cea2c06142ecb1b3\nd83300deab42c100eb9db4e832a6dd82\n1e155559446469112e690fa6dfd5d610\nece25d89898c7d9090b1d6deb98feec6\nb22014408721ec314567cadca15fe337\n166d333d38897d1513d521050081b441\n4cee36a2e8dd3b24b87697d3904b168b\n3fa511e1882e41eeca8607f540cc62ba\n48706d323b9041d5438a95791ca4064d\n8ac8c21b63ff535fca8607f540cc62ba\n7bad9d15c0f0d3c03554ccf8c30febe7\ne36ce61195489a56c8da6d3458daff84\n829108f586f9d0ac7f5c403400264eea\ned7e1a38fe33830b87697d3904b168b\n4875318127182dbd15aba2f83720a298\nd70d648947c65b1eca8607f540cc62ba\ncaf92880cf63690188a7f6dddc29eab\n9daa49ab2f97fc14d85e5191b992b560\nd16405b7a4300014ef5bed0139d3780c\ne06c2333068e9bd0755d33896264181d\n21827b0be78dd3e17dd9ca9e282b9209\n494a1698eb82572c3df325aac2f73830\n8c746468d3dcb6d3ff3a35e90542981d\nbc8c26902e912b851a53b454324fd345\ne726c8e6897130439a6e43b878d5b335\ne8de6c58f4a772d771d03b466c72ce41\n5ac00867c7d78b1690b1d6deb98feec6\n7c6a2879e359f505467f6b8c6b1d352f\nf1b9ff223b5a13719a6e43b878d5b335\n3feeb5f8ecbfcb4ba8f0518e94fcfb22\n13370c42b8ea45cf5e8172e6d9ae84ff\ne812f54386acd072d44f37c9e0fb10d0\n87348bdeb8bc74139ebd7d1067b13a\nbe080a797406422843afdb9c81ff2967\n37b1f7f02c4b87dbca8607f540cc62ba\n59f258b7aa7c1f7aa7d0c1e4eb8db7dc\n2176fa9f69e5e1dcca8607f540cc62ba\n971ef250f2d0cb389a6e43b878d5b335\n72aee7d0e998a68aca8607f540cc62ba\n7fedb48b457ee9f31629b98cc1b1b992\ne0058b4948f87d3b87697d3904b168b\nc0bb4f92d12f4504d65766fd3c4f994c\nbabf58c69501ae6b9b46c030f642fc41\n49660fd24e5c2fbab87697d3904b168b\n28d719b73b1fcd2f5de04aad18bd94c3\n123ba1ebe2ee533ef0c45eff2a917cc9\n25bd1569261bc545e8323edc0fe816a8\n8add45a11c9fcb446eb5821e78d8898a\n57f1dfb095bbe82cafc7bdb2f8d1ea84\nea9eece7f2c45a2a82e4c37374fbdce\na00c0bdf007689619ebe905ef4009f84\n86b11ae736659136ca8607f540cc62ba\n54e926e12382808b66cf1b4a8fc3914e\n1678946724380812de689e373096b0e3\n90769434f2b588c1b675ec196a869fe5\nd0614abb68caa5ddac7f1a00b76bd166\n917694a71164f2148e8405d6c51a908\nd74767519393a937f73e5bc170b7e2be\n4008286f2fe8b6a97c44cd1ce3d402d0\n66ae19841350ac2d4ba2821676102936\nbc7ead8b45952ab8822054a0a020bf4a\n508fa09e7df177e7fee8021c81c84603\n44c0cb6571f6f000ca8607f540cc62ba\nd63daa9d1fd2ff5d575bf8a4b14be4f4\n7385f1416e93f1c14ba2821676102936\n757c47e20a37647431e38f024b7ad042\n934dd5529c22cd05bc0909d98a1ff2b4\ne25e3dc95243a92c59bcb260e54d3785\nf009f3112625ee00b8cf782e8c539948\nd59bb0ad79371634f3d7c71ae132007d\na2712db5540766cdf6a602e459585636\nc494f446954523a8a32748a9f843a0bf\ne59c4f290d8585a862b600da24e0965\n167250e2014c72dbb87697d3904b168b\n118e8142a8cb1fe19a4a28ef635593ce\nbefcb95d80e0e49119ba010ddb4974fe\nde5807cb73bcbbf18587e940b916a22f\n452c18f8997c53741adbb4c4e06ad649\n1e2de00cf19a0a33554ccf8c30febe7\n959f28c6724979ef9a6e43b878d5b335\nca11efc8928c10908b96ae1a0a8b84ec\nf46df635ac669a9818b14db3b83de9ff\nfd9f1cdaa381599bca8607f540cc62ba\n692797a818b4630f1aa3e317da5a1267\nd81042a53dd1cc5bd90bfc986bc4c94d\n130422d62194cf026c8067e570d6af71\n9fb60716f0f5a2b84408eb298433d643\nc9be9f07f5ae7c375d7629390efe0a2\nc1b5fd196374203d772a4b403daac29b\n123bd9e948881939c38a1d3458dafa1b\nf7110ecac70994a83820d8f180caa23a\n18e6f319062ccb49ca8607f540cc62ba\nc6e4d12318bc4a3b262daac8a0882e96\n319cf93077118d19f64801ad2940cdd5\n26e10058cf9835aaca8607f540cc62ba\nedc185566c1df89c35fc197bbabcd5bd\n5fb64e3fc0abe449ca8607f540cc62ba\nf7739764eb1c78a053f370d353cea84\n4ee48907120e261c3df16180af9974ee\n265f5348ab2320b2148672750a1a335\n2066f1830765183544bb6b89d63deb6f\n1e9ef313876bfba7d02c6d35cc802839\na7a0e7eddf4ffb8c19378fd691582500\nfddcb2b3d45ce98e641c309f1fd7e183\n4bdb2c4fc6701174ca8607f540cc62ba\na1848a4a69b14704ca8607f540cc62ba\n4cdd238ccf9002344f59c2a67aa8473b\nd7a2512d9d8ad4c8a18e0889038e4fb6\ncaf80ecbad22a7384e1799d9d4d697c3\n2229bc4e646f506679f56e78e8640bfb\nf31be358cb57dffffe198fc7b510f52f\nfcfa1a67f34e7f2fbb3974ea29d1d642\n75d162523d703917b87697d3904b168b\n6a75658fb8242b9c590874dcd9dc8481\n144070f63941362bd1810447902e2904\n77ee6ccca238ceec5144962e2c20b832\nd615a8217b70af06bc0909d98a1ff2b4\n85cf5445f44a49f5cf35fd096a07bc43\n94ce3a5ad2576e73a5cac89017eae8d1\n77c9fd0f0c6b0e9fca8607f540cc62ba\nc4111dbb21e1f17043afdb9c81ff2967\n23eed87ac79f1b152f9c405cf0817830\ne3fd510add7b1aa3c19eb6ab3736de88\n6f72a0d86494b551a834b9c8bfc8647a\n2c49289098e4492bca8607f540cc62ba\n9b1fc3881a5335cb44012f72ba1e15a8\n560b4af718f67902ac4f72bf08dc79a6\ne283e3825d66a985b87697d3904b168b\nc581942f40cbb60819ba010ddb4974fe\n9b687f9cff46d43d89c2da356f872ebc\nb812c2df636aa0218b96ae1a0a8b84ec\n4a11239139c5f81762b600da24e0965\nae4a9574248395b671d03b466c72ce41\necbb6df185a7b260760d31bf9510e4b7\n59b8d36b0f96aa5cca649c0959202cf\n3b82e575165383903c83f6e156ad107a\n8341ff3b44ed2e30473f10e6caaeca56\n345570c792fde290d49cdf0198aeb01e\nd3d788c1fb35227619ba010ddb4974fe\n92fb0d6a866fe7aca8607f540cc62ba\n75db11c354c6342aad01ec966c80ac91\n3a6d6534045b1895e8ed194c80e0b1ef\ncc60baa1a796f5c14c3a35cee92bb95b\n7de379891610f5feaf7dd1bfd65143a9\naebc4c46b3cb7c3bca8607f540cc62ba\ne9bae38bc2083d0bb4d73e4449062b04\n422105cd23178ebf333c61abffc4e1c4\nfd67c89ff247f9e7442ed26ceeb35a60\nf04fbc2423b13da170832200321e72bc\n37fbd275a734ec1b66cf1b4a8fc3914e\n8ff8f3c845e7ae8443afdb9c81ff2967\n975c00ab85218a05430355e13bc86b4e\n19ff8fce1658f864ca8607f540cc62ba\na0d63ee7fd87f93619ba010ddb4974fe\n8f40518bd30467151e5ae32cb9e3711f\ned738ba28cd73714bb0f4bdf8821663a\n6d93492543d1087eb87697d3904b168b\n6aeae52e38f892a7e0091ae06332b2d5\n576edc1da4e3fb47b627754c4259e985\nf95d8e86feb79b17cbebff57eecf0a64\n3cab1ffcff8b84cbcad035c2ab458\n2e389edb9a3c0496e1c255da0d1c1826\n8d5c3d38de9c3685f2e77d54f4da142\nf26ea1a00455f44fb88e2a19106395c2\nc5d748c352d8eeeb3d4e343a1ac21b93\n91d3479f5da120a9b4d73e4449062b04\n8b61ba80d9e487deca8607f540cc62ba\n4a552066ae1da546cc34b900bb2492e\ne00b89bc338348caa42c49797afd1f5c\n29fd29045703ff18b4a8b7176ed97248\nd13d131a649c5df38b96ae1a0a8b84ec\n4761e30dcb30471cf7d5cc24ec79e682\n6ea21a2265075beb9a2f7b9a6f4f875f\nfff513f407e00e85a9ced22d91ad7027\n618b433a97bc23acb1f09c4591ed2db9\ne954dc13308e6756308fc4195afc19d3\n9321ab235b82ca268c9bdb0f364cdad\nadeb5d68e8d65cc419ba010ddb4974fe\n329987191cce68bfe64acd170567d820\n5a1d4af1f417d28566cf1b4a8fc3914e\n52764ef0877372245ddb9958cad651ae\nf110a2ce31dee1b3c16ef5c633c71b56\neb658ff31f0becea1d0f8853f6d023e3\n74cbf170c5f2fb587d9c9c8a8ba32919\n81e6b629264dad5daf2c6c19cc41708a\n9d06f4ff9f1e7932941d71475449eb25\nf1295a30fd857249224c86fc0bbbbedc\ndd9c0622e873de43c752b66cc923fdb\n4374a3b4b98e247b398db3ebdf468ed7\nebd991666f177f8f575bf8a4b14be4f4\nce339f515469303979e13964f05c24f9\nc9a6dcf87d1f15bca8607f540cc62ba\n3fb7ceab42d7b17219ba010ddb4974fe\ne5610bbacaf098508b96ae1a0a8b84ec\n32e7224d196e5866bd564bd76cf3cbec\nd75a4d4d25863f5062747c704d78d4f8\ne16f9cc7dedcacdb9b0435532743fd43\n9818f0b88fed05b24b0a1bcf2fb497ec\n310f0957ae1436d88025a4ffa6c0c22b\nff7c22a964a5a54e3bb4b8f3758b3c41\n97bc5fffde64178f43afdb9c81ff2967\n32edb6ba5788dc12d8ff6111270336a9\nb0b164107a27986961f6e1cef6b8e434\n36a5bd4ca6a0b191532d23702363f9a5\n7442ad61d59fac8c7372dc0a2f1067b1\n916950e40ca7aabc8b96ae1a0a8b84ec\n384e72f69e6f24404cb288947cda4a2c\nd59d75f52ac9b241ae0d772a1c85134a\nfb402a36e91ab1b44e7761521d3c6953\n49917fb82beca4beca8607f540cc62ba\n4d6ec762d1583ded46555ee25941a22e\nff554f038a338ef322031be9b666aa96\n3265b621ca222d29d00d52e62bf14ee9\n1354e0acd354a3ddb6670e1d7042072b\n820ba20e5da8325f19ba010ddb4974fe\nd5f01e2aa54bbf28ca8607f540cc62ba\n64cb683afd5e9e559db1d21b460eacef\n3ab1e94b6c3a1730c56cc5a87f567365\nd8452d4fe51f2bab3554ccf8c30febe7\ncfb555a4d82a600aca8607f540cc62ba\n4f9b12d07dce21ac9d93a50cb0355558\ncd6a3584c3da1db4abcfca680e6d54ff\n"
  },
  {
    "path": "data/filelists/02691156_train.lst",
    "content": "a98038807a61926abce962d6c4b37336\n25ae9c70ded5640ac2a9d7232db0ed61\n89b6f678789287a3d3128304aa2279ec\n36d2cda57906072c1e08b6601b6fd998\nca91becbfaf5a094bba1aa1c98256342\ne8b4bac72559c097e8f5e45871fbc77c\nee562cc82d73ab212135f3a0e614f115\n3fb3fa76a2e67bae71d03b466c72ce41\nc6bcec892954942a83855ba2afe73b0b\n9550774ad1c19b24a5a118bd15e6e34f\n5763ed16cc79ce63dc0a4f5bab755bb6\ne380f6fa720e1c15560a4691498bd2fc\n351e24a503c49840cc0472b5df09bf08\nccf4e9c074c3395c26360e1e29a956c7\nf1b407dd7f610bb1a266a0298675ed53\n7b3bd63ff099f5b062b600da24e0965\na5639c976e677ce6e719b5362fe06bbb\n73f6ccf1468de18d381fd507da445af6\nb71bd3c61315abf9ad8a06dbee1d115\n8c2f2570e178823562b600da24e0965\n22831bc32bd744d3f06dea205edf9704\nb1f40266ad9da400d90bfc986bc4c94d\n9a3b5fa35243504124f575085333a65b\n8d847b813fa70470bc0909d98a1ff2b4\n98988dc4e5c62dfbc0909d98a1ff2b4\n88883a7ad39baf47bd46d022fd7d80aa\n4ea714b785e24f0d9a6e43b878d5b335\nc64e43e18b01fb5eca8607f540cc62ba\nb6fb57668129c4cd4c11ffe5517eef5a\nc85a76404b85d94e62b600da24e0965\n5b86cf0b988987c9fca1f1143bb6bc17\ne777a6a46ae240a7bd46d022fd7d80aa\n36dd57178402cdf2afd477f714c68df9\nfc9f6bc1ba1cb7c1c3fe7930fce05ded\nca6e0a1d5cfee53a8cbc4ababb61ad1\nade0163327c8c7f5847335355bf4459e\n1f08b579e153b2de313f9af5275b7c70\nda5fda29d2415fb09d92b4de623f5639\nc9ba5885f6ffc835a8cba409c4409ba9\nff2f975a23b78bc78caa71b1fbf7fb98\n4ee6a3030995dcd4bc0909d98a1ff2b4\n5d925e4748bb4ad155050237670e0ad2\n895e49f92ff5003032611f2edb791b8c\nfc5ca618ae253663d13ef00338ba8c52\n6fdf55a7ca1e64ff7d7b38cb4a2969ae\n4d885cb269ae88ccbc40166c69b12cc6\n24bbc1f5225969fb90b1d6deb98feec6\nbdcc8077771968d67c54439d6177032\n71bb720c33da689090b1d6deb98feec6\n91e3ab3e12059b4a9d92b4de623f5639\n7855e8ac604ae162bbf3143b1cb6076a\n2d43c1430df8194ace5721ccacba16\n9259906152f9d885a8cba409c4409ba9\na2f0c1bdfe1475bdc1a897657d9a1924\nb90571e8736a296c549b705aa127253d\n70ae0521d5ca428d7b3d3cfb30f2513e\naa0b34d9bc5b77e0d86ebdaa02a63c4b\n96291ea39a5c6eda203936772104a82d\n36ce6d61721805abbf3143b1cb6076a\n4ee420a617a2bb40bd4fd4a5b9107dc4\n498ea154c08d51abc863ab010b80d9ed\nb237bc484545cb46d8f63fb451ae8aba\nd2815b419e61dbb0b87697d3904b168b\n7b9bb6e42aa2191b58a458f7911d7423\na69edb40dbc1fc6c66cf1b4a8fc3914e\n2705c3edd082f0987f1f82f6fc8747b8\na153353168cd47869a6e43b878d5b335\n1c4b8662938adf41da2b0f839aba40f9\n827c877ebc70fd01faaf13445ab19dca\n96600318559071d48caa71b1fbf7fb98\ne00d7bd590ac129bbc0909d98a1ff2b4\n6e65a6f2b81fdea2282e76ed8cc73a69\ne0a8ae255ed47518a847e990b54bf80c\n7bd43965f17c25377209009cfb89d4bd\n66cd9502b63e8a97bbf3143b1cb6076a\nb4dbf6f6b0cc8ec5ce19d55bc5e6a406\na6b9d686a7b977035bae66e2c509821b\n256626ea73837e032625b83fa7422e2b\nf3cc7d5c4089b842df6e254b0245ddcb\n463834c3aa682c281883411175051361\ndba3ab64bab4ed3ed13ef00338ba8c52\nd221f607d5b5c553faac198e88c3dbb7\na4462b31326da9493ea703383c665f30\n2c89cc6eb008eaf5ca8607f540cc62ba\ncfd42bf49322e79d8deb28944f3f72ef\n62bd247f0e8081a171d03b466c72ce41\n89b42bde2332e5c067c5e3041553656b\nd28a3cd771b2bf1e71d03b466c72ce41\n6fd578ff0ad4f6e8203936772104a82d\nd2e99eeecebf0c77bd46d022fd7d80aa\nc18b1ed6e935b11bca8607f540cc62ba\n76b492b77a03882d431e5b4ad135fb8\n9dbc0aba1311e7b8663e90eaf6b4ca52\n151550551758af098b96ae1a0a8b84ec\n24968851e483feb237678474be485ca\n471f072ea9d51f639d92b4de623f5639\n98dd57d068c8de064c3a35cee92bb95b\n69121d9daf6d569fb96212c8f6cd06e\n56c79a936f57ef3f7b164268a44f7712\nb2c69aa6c8d78b59f119374ee5d5f944\n816f1a18692bca2abc0909d98a1ff2b4\n4fd9c86e43a1dea17209009cfb89d4bd\ncc23974115a8de15d13ef00338ba8c52\n69a7b9b7265a70f1a9b2becd26dc2fc1\na1784ead19fb7645b6dd6448cb8a70ee\ne2116e0b34db656dfca1f1143bb6bc17\n2c83e01a7a4423c74d4cb1c2a5e48b7a\n9e57a7d6a7f488dfbd46d022fd7d80aa\neb60d49fd5cdb809e6a2524c335c48f9\nd24e6c81b5261fe5ca2bd098b9203af\nbbd1b96d77b8dc08b96212c8f6cd06e\nbb7c6c397143f72fe0cfe7507a46f0c\n366b149545ba4df546ed10e8f7fe336e\n48a36df204cb05dde7fc8cd567dee096\n73934196c92ce472f4a5531fe6556d72\nf11d14402a759a1465f50257ecdfa5c7\ned95d9219432bbdbbf3143b1cb6076a\nd7e8b636d4a7dab67e697b0700f10b81\n6ba642ca477a73db4c3a35cee92bb95b\n54c13e95f07492a9e10e757961deca98\n5274742871cef1aca8cba409c4409ba9\nb522108c4c08430a71d03b466c72ce41\n34c669182c8c9a2623fc69eefd95e6d3\n3e0e8b37400e290125b57604d8b9519f\n1d269dbde96f067966cf1b4a8fc3914e\nfc6decc887f6d8a0bbf3143b1cb6076a\n5ad5fbe84d7d8ef790b1d6deb98feec6\nebedcd06f1770cd4bbf3143b1cb6076a\n875c4b43e35b6803a85b9ef94e886600\nc0edd36fbf8d63fa35fc197bbabcd5bd\n4385e4300e72e49e90b1d6deb98feec6\nd34eba7c2ce4db53adecb6fc00604132\n803fd1bf9b85da0aa79201593c1eb4b0\nb738666a0403a7fa6818e4a1f2613507\n4a9d28a5f272853fbbf3143b1cb6076a\ne4ac77fdf28116232fa725d7a62a02a\n52712e1c07ea494419ba010ddb4974fe\n31b75f20c64b03ff6b7bd17e458d0dcb\n26048b00f9227a9f8699933784576e73\n1c27d282735f81211063b9885ddcbb1\n43ddfbedbd6721fa828204947d78b9af\n5c7ef3d5de5ca9a1ca8607f540cc62ba\n5bd21df38ef89239ba4ae55719e5e195\nafa65aa66f7ca040873ec74c119307b9\nbf93f4dc64eff22b4d4cb1c2a5e48b7a\n5bdef9dfed852e26195688f8ce8acdb7\na487d7527a0d0c2076b0a025d05432d\nd1df81e184c71e0f26360e1e29a956c7\ncdccbb56939fcdafa266a0298675ed53\ne841e17e3256acf38699933784576e73\na3bafea9edc457463da2ae40e7681e7e\n3e5aa51d27e294a835fc197bbabcd5bd\n1667ab313638fb366cf1b4a8fc3914e\ndbee200cebd464779b0ed23034a67f7f\nfd528602cbde6f11bbf3143b1cb6076a\nc12362906beecc796059aeb39e538eb2\ncfc075c635df8a7a94b9c9a92aa36f8c\ne413c15ded9ba57a23fc69eefd95e6d3\nd21c556af88582754c3a35cee92bb95b\na36d00e2f7414043f2b0736dd4d8afe0\n4e67529b0ca7bd4fb3f2b01de37c0b29\n9873e280d91107fe9a55c6af6f4b2bb3\n9d7e431ebd35cdc2bd46d022fd7d80aa\n201e40e86acd7d34f4c1adce71073351\nb9e6298004d7d422bd46d022fd7d80aa\ndc8d9003cde43b66c8727b27ee96a4b7\n4209abb3ec319f85e5118a089c2a99af\n6db040a8d5c1d5c14d210d9468aedaf2\na2de53a5de7ea01dd01b5600c06c528d\n7f2d03635180db2137678474be485ca\n596cddf6fbdc9d6b96212c8f6cd06e\nb58058567bfe6976b30e3fbc7205ab54\nc1aa42594ad2d80e4c3a35cee92bb95b\n67d9607d84fb51435fc197bbabcd5bd\n91f8e08144218e2d23fc69eefd95e6d3\nc27b08dad98f802488a89a28f04ce622\ne523ba4e79a48d31bd46d022fd7d80aa\n41abfb4a9e8071754a40844f179aeca9\n9f7d4125c4b705208b96ae1a0a8b84ec\n98b163efbbdf20c898dc7d57268f30d4\nbd2a375de8c7374195adb59fcbb6489e\n3f6c0034bb278de4f446f92b52bbd82a\ne005d8b297850d483a99ba0078ef7bd1\n48e47a6e592cf635590b4d838791a67a\ndf990580230f0254d21176457f0be3a\n117861b9ebca4f17c69cb28fb4b4d257\n24db19ddb06fcd3f9a6e43b878d5b335\n9fe677b21938f6bfcc14f1e6f4f4f49b\n8b65813c6ab0c972ca2bd098b9203af\n5466493424ca47bbfca1f1143bb6bc17\n91f3ccba290da90671d03b466c72ce41\n124a579e0635b8eace19d55bc5e6a406\nb95510fb88096a208fc2d09ac4aa4e78\nf186d2998485c6ed5e9e2656aff7dd5b\nb82731071bd39b66e4c15ad8a2edd2e\n7cdbe41e6701c661bc0909d98a1ff2b4\nd068bfa97f8407e423fc69eefd95e6d3\nf0065f4f9e20d604521546825315c695\nb3c7044fcd6f15c24b0a1bcf2fb497ec\n9baf5b31d70e0d05e98d814cc4d9c5e3\n58d23c8bf0902cc590b1d6deb98feec6\nc1d8614b0e5e3f3bf5a498db2fc1d347\nc12d132ade345228d75cdfed9b20c6e7\n1e9acb74ad09ba97192ddbe75f0b85fe\n448b45ac858784e9b020e22bd5fe2e73\nc4ed630f9c0f728090b1d6deb98feec6\n299ec43108d7109113ae47e860a2333a\n9e617d72fabc718b90b1d6deb98feec6\n1fc2625479e798b11944f01d3ab2091b\n2ce94527ad7f57333bfdfb6cb363d727\nf0bd0660d9cec23cf2b0736dd4d8afe0\nad9059778f3e34ed4c3a35cee92bb95b\nb151573056013eaf71d03b466c72ce41\nde543fb92592aa48236a74f773a58aa\nb788ca6fc544c0aff3f3e17ace8695b\n376466b562217c2abc0909d98a1ff2b4\n157a81baeb10914566cf1b4a8fc3914e\n7e10d8f0457cb48219ba010ddb4974fe\nbf78d2e27a671fce4d4cb1c2a5e48b7a\nd84bb293898861ed9b2acbfd8323f804\ndbd74d18fa992eee7f1f82f6fc8747b8\nb53ea9af10f2a151bc0909d98a1ff2b4\n24c2cc372c63603137678474be485ca\n52747021197c7eeeb1a0518c224975f\n4bae467a3dad502b90b1d6deb98feec6\n79784107e5be61a562347b4731688b0f\n3e7e119508f0abf935fc197bbabcd5bd\nf7bf32d3aecd197360c9b6e4c75a092a\n8ce12b6b3b451b8ad0671652a4c42f7b\nd220ffb04a5ff31abd46d022fd7d80aa\ncf13bbe558f37bab4c3a35cee92bb95b\n75916f78e72f90984b70ddbaea6e513\n639d85cb4487bb0e3c326782eb2d380e\n9b285862ababfc3a68222c7df7dc40f1\ncdb17eb7b14c83f225e27d5227712286\n8f33d2c0c08befe48caa71b1fbf7fb98\n5785c8651893ca6b7209009cfb89d4bd\n1e4bb798f236f0b17f1f82f6fc8747b8\ne9dcdcd8963ba18f42bc0eea174f82b\neac05be6e7f3bfa99a6e43b878d5b335\n37cbf91baa58d6577dc01d89d8a05b74\na9e6abca0f6bf69416ee5e3e330ec691\n884adbb15fcb934051279f7b42f4d889\ndc7a703f94b3b17667c5e3041553656b\nd5ad529ad399086e4e9a6f7cd468e49d\nb87185699318f4b635fc197bbabcd5bd\n4710274bd87b099f19cd118ab9f114a4\nd6cc7ffd165de05e2e2de556c136fbc8\n5c8b6d47313dae4fca1f1143bb6bc17\na7d29332d98b7b8340a4a448803b06f7\nbe11ce096084bd784f95630cc18536e0\n617993bd3425d570ca2bd098b9203af\nce1d767436d9b289e8ac6b4e1f12f978\ndfa5d6ed898152d34210bb5f1b1324bb\n7b7ebc856120f97a1944f01d3ab2091b\ndd5310819d4f16d7b9fc567905a4b292\nf40fe7461dc4e3396b7bd17e458d0dcb\n4542b5cf23a95691ca8607f540cc62ba\n398fc0e717b0cd524c3a35cee92bb95b\nbd22bcf18a9c8163adecb6fc00604132\nc9063c31d7b42fa564ed556128c71bda\nc69c73793f459a2c3d4b1f38e3dfce4b\ncbc73e8bc866ecacf7f795409cb230c2\nc7e74cb0f2dcef904abea106683105f\n4cb1c851d4333d1c4c3a35cee92bb95b\n6ea7eb1ef18eabcf8699933784576e73\ndeefcd290f7f2f1a79201593c1eb4b0\n2988a7a566ea79797209009cfb89d4bd\ndfed744828fceb4d28cd0e56fe42c08\n7d19ed245331582c3fe7930fce05ded\n362af793b1d0084423fc69eefd95e6d3\ne9f39176973edd33a8cba409c4409ba9\n71ddef945e2ae8de7d64cad20089f027\n2bdf8800514abd05a7d2c4e7aae73d33\nd51bd83c27fc3167ba4ae55719e5e195\nfb2204e98090448ebbf3143b1cb6076a\n823de294a08784fc879e4d613e8d4e33\n3c1e298b4222f4d15d3bbd70fc7759b7\n7bd76c17b7194d571aa9d8d95b6740cc\na053f49d808b7b36c8db97d9bc169245\nd64caea6c332861bcc14f1e6f4f4f49b\n4eced94670d10b35e856faf938562bd0\na1c3287d5e847f866b7bd17e458d0dcb\n388c9b9f1cf24ff84e61a0c2eaaabe87\n5d6334ae2a0dbf70bd46d022fd7d80aa\n10e4331c34d610dacc14f1e6f4f4f49b\n92cf58c641a4e5af56a793e48de27b07\n3391c664149308cb4f95630cc18536e0\n20aec82ef5f61b0bbd46d022fd7d80aa\n62a72a5afc84ed54faa7ec7d870d2e09\nacb99bd964b1b23ad13ef00338ba8c52\n535dad1777edb67bbc0909d98a1ff2b4\n707cc578bfec0f671aa9d8d95b6740cc\ncccf4d96e0e3d728c93b40751084c22\nfc7c3ccb57f65337209009cfb89d4bd\na51d836a9349b2a1f42bc0eea174f82b\n66493aa4ae7dbe40b6b87e72ead132ed\n18f5265d553d72fb6b7bd17e458d0dcb\n7d89d64afbb5b24056dd1ba442ba87e2\n4f9a01d66d1de632f810506e9ae2dcc2\nc80e8a74a31c6156bac66f0bb664359f\n3d6b9ea0f212e93f26360e1e29a956c7\n78551e5fc01df70f77fd7318510b8627\n2a05d684eeb9c1cfae2ca9bb680dd18b\n62fa636e217a3db25a70c4e5328e0b9f\nb2235fbc13fc2ae0bbf3143b1cb6076a\nd281db2c631c0170991ade27bbcf967d\n54f0d46b866c1f714d4cb1c2a5e48b7a\nd3580448933d00fd90b1d6deb98feec6\n8504e370736b26604d210d9468aedaf2\n1930a979c7a9a2d662b600da24e0965\nde776175878f17d1f4c1adce71073351\ncf93f33b52900c64bbf3143b1cb6076a\n1c673748703c99207f1f82f6fc8747b8\ncb5fe2eaa25b2518afd477f714c68df9\nffccda82ecc0d0f71740529c616cd4c7\na1ca5014ee1048081e06124bec25a766\nd919249737749c36417568af9ae9577f\n642e481ed56874eb19ba010ddb4974fe\n420f92d84c88244b9a6e43b878d5b335\ncb8fb401a278fc36bbf3143b1cb6076a\n2d4c147d4d1cc40c582bf3113c3974ef\n63dda61ab3ccc4304a3b534252984039\n2103dcb213151791acf77e718d93f3e1\nb1696ffd98c753ccea88a0a7eb1222bb\n14d6bbabad3ad00dbbf3143b1cb6076a\n45a4b43dc4c77dea6818e4a1f2613507\n14bf5197d60d733f2a3ecc4a9713cabb\n8682729ee0259ceaca8607f540cc62ba\n82cd0676627c20b0879eac31511e27a8\nab0ab979406ed687a8e091cb544689d5\n1385305478499e6c1e06124bec25a766\na99ffd1b1fd121bcf2b0736dd4d8afe0\neb43db95d804f40d66cf1b4a8fc3914e\nd9f90f110ce30fbbadecb6fc00604132\n77ab8bb69221b13bbc0909d98a1ff2b4\n251313501093a024599faef54fd54e83\n1896f1f8724aff33b7ea0a7ab024f81e\nddf0e3053cb1ca8f5e9e2656aff7dd5b\nf2f779b4f12ea6d67209009cfb89d4bd\nfad346b02d91348bbbf3143b1cb6076a\n3dc5331ce579b2d0d8ff6111270336a9\n68ff153952368948b4eba5f9f157d8c8\nd07277bc3c95a365bd46d022fd7d80aa\nc7b1ae292fb3d011511e2f9385a386db\n446327ea5e2e50aebbf3143b1cb6076a\na50b4b0ac82a67d0bbb9a486df472172\n12b25b8de7aa37a0bd46d022fd7d80aa\ndeb9d02cd1eda25270c4138179d9ed97\n8d5ecf095e56cf8cca8607f540cc62ba\n7c67e8cce3f3eb3c89ba278a735b3c5a\ne0bb0ddf67462f4a8b686f76be476fe0\n999539f6290b7072ca2bd098b9203af\nd639c8d2f55982558b96ae1a0a8b84ec\n64211a5d22e8ffad7209009cfb89d4bd\nd6b4ad58a49bb80cd13ef00338ba8c52\nebda573deda43034f2b0736dd4d8afe0\n8fc553e3a88b7ad54e461d462a3ccbc4\n6693d4bd6edce2a7fd3f94e9ae089f96\n131db4a650873babad3ab188d086d4db\n45985e48353c65cfd14a90435b48593\n110f6dbf0e6216e9f9a63e9a8c332e52\n2c9d5fed0ebb4a544c3a35cee92bb95b\n47bf091a7c919d1c90b1d6deb98feec6\nb63f7eb03f91f8a7de04805f7d685d\n5f8fa607106199e7bd46d022fd7d80aa\n41d4250764619ff5bbf3143b1cb6076a\nf0b22be59432dc8bca8607f540cc62ba\n7bb1d2f8be9593b3cc14f1e6f4f4f49b\na6693555a4c0bd47434e905131c8d6c6\n154146362c18b3c447fdda991f503a6b\n688f4e273beef132f0daafcf2996daaa\n3cdb3a166a13e44dafd477f714c68df9\ne127b1f5ead603f9a5a118bd15e6e34f\n329a018e131ece70f23c3116d040903f\n4542d34685168ecf7a571401e6605fc2\n8e47730a471abb7f43afdb9c81ff2967\nb0fb094d1f0fc2a6766c6046535346e7\nc8143c3384690147d13ef00338ba8c52\n20bf5bba045e5a53fdd77aff53f4b7ba\n7e52ac52a2eb74ac26360e1e29a956c7\nc1e6d2235406d250e9ca68dea406967d\ne501a0327ab3731d0f859db45b95a2d\nd3dcf83f03c7ad2bbc0909d98a1ff2b4\n9a3cb94af2f2a5b826360e1e29a956c7\nf4b734236ec678d269e10d525d6df27\n2495267afeb60584c3a35cee92bb95b\ndd465efdee6a57e966cf1b4a8fc3914e\na9545fac33430c6062347b4731688b0f\nf6f2905883c49d179e0d0faf84afc607\n45c4867cd4554e7cc863ab010b80d9ed\n47821cd2309d5a3990b1d6deb98feec6\n7ae99c0cc14cdd97408827f71d73e45a\nc8ea73dddcd80d901b1cc145b0144991\n4100df683795dfa1f95dfd5eb5f06d19\na8471560d4dd5a31ebc34aaab30ca460\nae8073beb28788809f576466d21c96ff\n37d2da0de056f5045bb2b764fed1d166\n4a15b999378e1831dee83316225be271\n7934ca36e240e91d5e9e2656aff7dd5b\nb41f477cd3c6843094b9c9a92aa36f8c\nb19927db257219bb26360e1e29a956c7\n78a94b8bd2971595ca8607f540cc62ba\n6f0ad1fb7917fd9b50577cf04f3bf74a\nc5e04f903e3472c31883411175051361\n5dbe5dd200fc214951971f8370d9050\n1580c09f49bb438a7209009cfb89d4bd\n3572e3fa25911295922e63c830b776de\n6c87f8378066f8f171d03b466c72ce41\nac76572656c1e36ea79176d3c96ca1af\nab399dca637174fb9a4a28ef635593ce\n6705821a6b32fb3eca8607f540cc62ba\nda58b3e055132c9f6afab9f956f15ea\n880715a3ef69f47e62b600da24e0965\na6aa2281ebfd822e9b2acbfd8323f804\n863742f8e07f52ba4c3a35cee92bb95b\nfe0eb72a9fb21dd62b600da24e0965\n83cb2b58d88c0ae3f4fc64fb3aaf41d7\n3881241b81d379644d4cb1c2a5e48b7a\n304c2daaf96c79138cdbee8c4dbbdd7c\n513c955bb46d739683651cbc8e49e4f\n33fff5b8d113cca41b950a59358e57bd\nbaa972f48cde1dc290baeef8ba5b93e5\nce0c461237a21cefdb22b838c125a50b\ndd9e42969d34463aca8607f540cc62ba\nffc1b82bec23a50995b8d6bdd18d56e8\n81b67bd14fbcacefd67fc01cbf5eb7c4\n29f514bdcf72e779bbf3143b1cb6076a\n8d54e30dea0e2508bbf3143b1cb6076a\ne899c19c87245ac94c3a35cee92bb95b\ne161df613fc808b0d7ec54df5db5828c\nafc2efb530e899634d4cb1c2a5e48b7a\nb55748e796006e18b3f627c3cfda6efb\ne2612c366bd11e305e9e2656aff7dd5b\nd22521d217d89f8d5b1bb801ea1e2db7\n758b67f9af18602715aa5b227c027ee0\n19604020a86ab1790b1d6deb98feec6\n95a79d9ea571592bc3e5025cb598f546\n2117484d4ad547ae719b5362fe06bbb\ncf96229978efbb488b96ae1a0a8b84ec\n39ce355324ab4bc8b96ae1a0a8b84ec\ndbab9feed7e936cfa87372b03d6dc78b\nac0234f2b9f195e3cc1281a5f11b5a5b\n66a32714d2344d1bf52a658ce0ec2c1\n735466165c04f71f62b600da24e0965\n58e967e02a183d49bc0909d98a1ff2b4\n2e9c1c3d866c4b6ce2c6d8aa34a5d35b\n6c8275f09052bf66ca8607f540cc62ba\nd39075b8eb890a898deb28944f3f72ef\n94dffe91af2c8834fca1f1143bb6bc17\n3aa98ec8f8a1c1f44d210d9468aedaf2\n8da50272a54dee98d972c9dd75ed77d4\nf59470cae839ba0e9b2acbfd8323f804\n8af46946b9b2b3aacf0820a704ed425d\n6ad44d7abe7492b7d89ea85a4a66c0f9\ne9c78deefc2950be62b600da24e0965\n59209cb5ba7a34633e1e5609a53c0477\ne08402fb1e5953a2a93f0f952e72609\n3a72adcf14ccec9965f50257ecdfa5c7\n273e90f5c26654ea8b96ae1a0a8b84ec\n6110cd7e771f0ab3a847e990b54bf80c\n912219c657177b17774a720fca15e35b\n1066b65c30d153e04c3a35cee92bb95b\n79e924263f903feb35fc197bbabcd5bd\n68b5cf1b10331dfa77c1f99ed297e3ca\nea6ccb2dfb61484caaa29616be3e223b\n74797de431f83991bc0909d98a1ff2b4\n112ca5420188df4bd90bfc986bc4c94d\nb273c9007d1e364fca8607f540cc62ba\n9e8f908bc6c822ae3f6fe63822cb343c\nca88882d06ee5468c34c40f49da8010e\n9705e3c2d21106ced7f23cd024f22c12\n6cf5d850b55bc9f990b1d6deb98feec6\nf04b62deb7737c86d37636af9c7bcc34\ne712867dc4c1a4a6d016d0153a25a372\nbfa52c24ed71614f48a7b7802dc31138\n5011e352793d063f26360e1e29a956c7\n94d3a666d2dbc4385ff3feb917a6004b\n5e7952b2d1a495f24c3a35cee92bb95b\n73bef2b9747edffb8b96ae1a0a8b84ec\nc330992ccc6154d82b6925c3587009fe\n9d3eb87e69fba56890b1d6deb98feec6\na75977cd75acf0f05ff3feb917a6004b\nd1cdd239dcbfd018bbf3143b1cb6076a\n95fe3a31e4c084a128132d87f74ffe13\ned73e946a138f3cfbc0909d98a1ff2b4\nf9d30b24d9651ee476c772fd813166d\nb4e9ebb75081f146f6babb7d9ead7011\nf57caba2eed21f2998459325335edae9\n3a5aa99b9e9e37a6bbf3143b1cb6076a\n63c78352b218c01a995425f067333fd3\n9483e1b0e4222cb4f2b0736dd4d8afe0\nc2f3e3a227aee9ecca8607f540cc62ba\n22944fabf8a9763f28132d87f74ffe13\n7ef375680d89c711c8db97d9bc169245\nfcc94cf74fb886b7bbf3143b1cb6076a\n5c63ad3688c623b1a787d03c28977672\ndf9d8ab5ab6f50ed4d4cb1c2a5e48b7a\n152d35bcceab5592eb1a0518c224975f\n865f434c71d41326c9d5795160525060\nde3a0bb3f0ca87a5674fc9582804ad0a\n94351a82955a6136c3f40f6a57084ffb\na94057f15ca19a33fd98271adcb6e31a\n2ab4a5c3ca32ba9a4d4cb1c2a5e48b7a\n559f9a545b9b98a1d433b2698458193\n9634ed6dc8ecae0026360e1e29a956c7\n48c4b6bde824e987a8cba409c4409ba9\n6f96857e279a38793525b6164e3f382b\n4ae3924f14d2c0084c3a35cee92bb95b\n77410e47feee769deb1a0518c224975f\n3029b9f2174da4b0bbf3143b1cb6076a\ndae59259ed2a2951d13ef00338ba8c52\nc476ac72594e39ffbd46d022fd7d80aa\n6a861b7cf2552818181edaa32d7673d8\n404714cf775f5ceed32761b337f8b72a\ned709305e61acf6a9b017c80f62649a0\nd4aec2680be68c813a116bc3efac4e3b\ne5af05179ffeb8fcbd46d022fd7d80aa\n26950e05ed379413bbf3143b1cb6076a\n1d1244abfefc781f35fc197bbabcd5bd\nae857883c77d156b71d03b466c72ce41\n85c9fba37bb685d7ca8607f540cc62ba\ne49d1e1d176ec1dfbc0909d98a1ff2b4\n6d6b6777cf1c15106540a0ff73700634\n58fadbeceb7e239724f575085333a65b\n7e1646c0a04dc68f6ea66e6959004764\n90489d6f74296c88daf24b8b932d0212\n4c07126c6ecf5436b7bd17e458d0dcb\nb97900a7f44bd7dcca8607f540cc62ba\n72a74e13c2424c19f2b0736dd4d8afe0\nfac9c4f0d5f239e4f2b0736dd4d8afe0\nb7b657d7db3c3b8cd13ef00338ba8c52\na7751857e571d6bd3c326782eb2d380e\n2b1a867569f9f61a54eefcdc602d4520\n7462d130f9c7abcd5e9e2656aff7dd5b\n2a7c34d4f5aaea962b600da24e0965\n76a86e664e302f32fca1f1143bb6bc17\n788cd4e599b0ca1819ba010ddb4974fe\n7f4ceb12e48be00ea4642ec4b6f68a\n53d0eca7c8ab5e644c3a35cee92bb95b\n1f96a33a3a461544ca8607f540cc62ba\nb19771099e1d3cd4d86ebdaa02a63c4b\nc953df8a3f917663a9b2becd26dc2fc1\ndea43c46fdbe84511adbb4c4e06ad649\n317ac4d5ff597c9ae719b5362fe06bbb\n8baeb2c664b0bdf4ca8607f540cc62ba\nc489f0cb96399da63c326782eb2d380e\n642b46912529c6e57f1f82f6fc8747b8\n49131e925ef3349566cf1b4a8fc3914e\n892ae1180c58b3e671d03b466c72ce41\n640c9b76fd75aa94d13ef00338ba8c52\ne50f001069380884b87697d3904b168b\nd390f0246fd43cc8bd46d022fd7d80aa\n21a1049ee5b7f531bc0909d98a1ff2b4\n5515a62182afd357f2b0736dd4d8afe0\n7274be512ba47d837678474be485ca\ne761cf88524cf8f24c3a35cee92bb95b\nfb0f2907b977e7cb67c5e3041553656b\n1e358e70c047687a1a8831797284b67\n65166f18d4ee36a61cac9affde84fd21\naccb9ee4edf6af6ce4080dcedcbec993\n296c3ee559f87c9354eefcdc602d4520\n444a58c4c6bfcd6c7a571401e6605fc2\n9e30fc9f2d9ae56e3ec83bd6bef75c92\n55ce4fc0b3df0234bbf3143b1cb6076a\nc0c32558decf271df3ad4b0977199f23\nbf5d59729b0c0e336cec6e2299cb4a76\n65b3e612c00a65a6bc0909d98a1ff2b4\n84e45a6f079cfb9526360e1e29a956c7\n5f46b24028db58f490baeef8ba5b93e5\nca8e8a54b54b41eceb1a0518c224975f\n9bfd7f4ecdd8efd8bd46d022fd7d80aa\n2502fffc569075b152486b4487d562c1\n1c87b854cceb778615aa5b227c027ee0\nba1358d41ef026fbb87697d3904b168b\n8fe1c92c1c9ff33fbc0909d98a1ff2b4\nc5d0dd7a7b44b079a76ffc04f04676cb\n8200621d7b5cb84a6b7bd17e458d0dcb\n2c3df6a4d0ddc9a69725372054c2f091\n211cac5d62271583b85f0298cf43349d\n45145c5e7924dca8e991cc67fb9c11f\n16715d886ecf0a97ce2cec85ea6ae00d\n50e793fe39e527b245f31985fc702c6e\nbd91c1eca592312048464d2edba1bcf0\nd63bd140efa537dcf73e5bc170b7e2be\na69c25f93540eaed6370c33da8a7988f\nfdb87fe46a2dd5ae148cecac5cfe1090\n99b2ee98a16b3c0b1338b1079208569a\n2026699e25ba56c5fd6b49391fda17\nad98f06fa29c52eb23db3adbb2f1dce\nb1deb3638098e9c92a4947824596dce3\n2af93e42ceca0ff7efe7c6556ea140b4\ne52f809111bb75692b5a1d128057b6a4\na051219f3f444fadc5e2bf7b5a5f1c56\ne9bbeedf2681b8ad154c6bbaeb7d331f\n7279a912e89a6f00adcbeb54f3d014e9\n8ba22e93df58242b61c0a7e9e23d6288\nde72864008c4db8bdeadc9ca0263db5a\n206a4bec609b727566cf1b4a8fc3914e\n577ef32f6c313a5e4ca16f43c2716caf\n900771de03746670ca8607f540cc62ba\n3caf95d83fcccdcc28662498a294724\nf5a8cae96024e709c1ccec171a275967\nbf77987a13fc34b5b6c7da997b0e5e3\nfe00bf68a2cd32b6dd455eb19d4d269e\n5a6eb0f2a316f23666cf1b4a8fc3914e\ne52f08852429e6117dc01d89d8a05b74\n989da7f7bce36747c6c291015ab44100\n2997fa1441eb7bb735fc197bbabcd5bd\nf21a375ca5fd26994fb6540b6bb872e9\naca6b424287392cf3438e17bc657daf1\n37f251fbd5e094348139630c61d12904\n707da8b9f37fd990bde4f466a45d975a\nd3856a35d1fb8536d8e727806889c9b0\ncd9062c0065ee3a4727e0d1e650e3b69\n6af4383123972f2262b600da24e0965\n8df55e58da6c297b4c3a35cee92bb95b\n5f11d3dd6ccacf92de7a468bfa758b34\n86012cd0bb6727e9e80771be8faac585\nd532217c7fabf1d44e8b48a4c01e36f8\ne18b6350437cfe0d727249e8d9a90100\nbf448fcf33a5349619ba010ddb4974fe\nfd6210721415e4bb51a9048f9848535d\n2bdb44eece3409a5a18e0889038e4fb6\n63a2144cfae402149b30aa09067b7eef\n48fed12884533a5fe48f6bbab67fa514\nbc764c59e4bf4e9f508cfa5a106b05fe\na3bcd8767d2827626f5b49394e7f4cdb\n790e9d3a9e037d3efa86938af3fa9595\nb4a420a55d3db8aca89fa467f217f46\n1203825bf97bc3524722e1824a086fad\n67e8571eceec1ea44c3a35cee92bb95b\nbf57639c6735626282b3aeca5b3e7150\n29120728132e5dce42a2048a31b7df8c\n78c3a29d1153e68e5fa2a5df3ce5bc40\n4cbca5f95cd6cbc6e59552931a2cfd3c\n2f379576475cfba24c3a35cee92bb95b\ne88a8692a22d548e1ec438f11f5ea1c3\n5df7124460d8cd14fd17e1e0553418c6\n670d455bf1bdaafdf577ff4de1ac394c\n911e9f0246b26b309f789b924eaffb62\n641af2da275049936cc53f9d72e7fec3\n8615ac14d65e76efbde09007ce74853c\n5e34c340059f5b4b1c97b7d78f1a34d4\n22c11b2bab2cf93fc1ccec171a275967\ne08574959d2cb7c8f6cabb305f7d6d18\nafcb946d2d36a77abc0909d98a1ff2b4\nc398f78fb73ccf29751c7a6f15617f4\nb458bf7d57d211ee43bc2645d97a220e\n72aedca98ea4429c8ed4db287040dac1\nf2f6684e930651df3dffb45955223d25\n19e2864af4f6de438050e8e370967931\nd15e3519a61c5bad86442c51e82d8d69\nff6f81eba664481126360e1e29a956c7\nc2d5bd1215248f9c8b6c29bda2bc905a\n3a92789dfc5186dcfdbac8c3ccfc63c\n93e0290ab5eede3a883f7527225435dc\n1c16739bbf3fa7c44276157eea5f8676\n5b048655453b37467584cbfee85fb982\nd708c311bcd60e61c9ac656f0c2edc4b\ne521828113e1e0c45e28caa3b26a73fd\n945b33ed9d6844591596c26b5af806fe\n28add8a00a7bcb7318d508b491dafd46\n9d65814e1b252fb01636caafca838500\nf7298a13f6d1644472a4466eb772f128\nfbc7afa847c30a4c183bb3a05fac486f\nf144e93fe2a11c1f4c3a35cee92bb95b\ndd9ece07d4bc696c2bafe808edd44356\nfd3a9743e16d35e51fc210a07910eb2\n41c7470ce9ecb74b6f9423fcc87803f2\n6feb039c710277aabd10f71f04d299c\n91ad0ff431597651767529f9ae81ac0f\n6021cb206f3db880c57b4651eeb679eb\nd3ecaf6bb9395131d563154e026c3490\n7f1eaf37fb4e24de82cea33798fcd6b6\ned2aaca045fb1714cd4229f38ad0d015\nd59cd5f2012a1ca1aae46a5cc955c766\nb23e79036b214fd4ca27bba175814d1\nf5bb02c0df184488e0b6c670e0e97766\n6d3965fef2c63d37b3a197029fcc978f\nf2fda88e9688fd81d972c9dd75ed77d4\nfc5d7c28e254a0d84c3a35cee92bb95b\n71e9496397481233a8cba409c4409ba9\nc00b97813a9cbd72ec85c5551a78ef2b\nccca0685aa63308ed54e5c2e672a56dc\nd80afa36aeb72c552b5147716975ed8a\n7568400ccaa12eb9d972c9dd75ed77d4\nccfe789ebc77be87e71a4f02883f26bc\n315f523d0a924fb7ef70df8610b582b2\nb65ddb8f80d8fb562e38f6d9568202c7\n9a007813a38638c379a04281ec8c6618\n32a547e29d66132110b2a26d47842033\n72c28618e3273795f9066cd40fcf015\n106dfe858cb8fbc2afc6b80d80a265ab\nfaa361f642620bb72def37e9c0b35d0e\n6ca6c7920c62773073d96deff5ddb8e5\neb85e7d86e2ef861e7cb9c477e2b7be\nbc2c90ea00831423908b15214255bff9\n8f4c92227704fdf11c568754310e5f73\n7e75688f4b185d4193a78ffd70737098\n875d75a0aef86850b6b87e72ead132ed\n2c932237239e4d22181acc12f598af7\n85fd79b9fe5948ff62b600da24e0965\n7c7fe1664a1f36b8ad6a38fcc21e6e9e\ne5bb559c00276ad354eba1f1b35fb0c1\n4e85ef428689df5cede07437dedab44\na1d2c8b24476c8ee70d98a97e17b4da3\n90bd96c05c0208c642d1180c659735fe\n6f8e17cf5180fa96a911ef3962f7cae2\n72fcc9dfb927311935fc197bbabcd5bd\nd8719b491412ea0bb1cb87d703a74b6f\nff13be97bdfa45f8254dc1d04198881\n9fb0988ef701a11388170d426b6605b5\n2751a0d9a1effa41f0b8c8d7a19e0d9a\ncce565137003bb39b2da68ec42b2eaf6\n4f3f39ddde5874f2db73445864b72015\nda67955425ffe66071d03b466c72ce41\n5abba5b86814b98a9f4ab5ced9b9495\nf40467cbad9ca466eb7d375d58cb985e\n4f5fc434ebc03254fc7b1255b2e02e3f\nef20d432f2a7b1752c164e0c5ea74611\nc0796e38ea7a1d9fbc0909d98a1ff2b4\n265e6c77443c74bd8043fd2260891a82\n5793a442744f4bcf7af203abeca5ce86\n68a423eea131656b1e2b909763d0fd31\nf71028dac9b396fe80288501d9901d7b\n105f7f51e4140ee4b6b87e72ead132ed\n5213a6520cc225a0fb5c1b0f759e2bc1\nfc25e0cdcb2ecf1ca2bd098b9203af\n22795c32b54719dffaa7ec7d870d2e09\n16ef481509c64f845dcf422dd1ee66d9\n39d7e8e001e0234e8f721bc8b8155d7\n4f2830d3d566220be5dd38f670a033a8\nd5b78307fd9a0764bc97347c46fe15e1\nd56fba80d39bdff738decdbba236bc1d\n8b72934186e1d8b0f510cd52a5f27547\neb8fe6d82d195ab5bc8feea465aa74f2\naeb538b2f1c36a8d9e811b082458229e\n604392af2cbb7d1fe30ec10233e7931a\n6778c46aff633538c0676369cd1d063d\nb6dc4ddde769573df551b6c3f174499e\na02387f2b9d73a01a5cbab5aded19a14\nbdbc01a1bea50bdba6cb562d18000d3d\nc3454da26509937d4b4c1e25039af4c8\n2818edd47cbd2aa1afe30fe053f7a977\nfa5c740ca9192b708e8131a047a07ce1\nd984822941e7a768c231d70e1e0cc567\n329b62a63e882c7c71d03b466c72ce41\nf016679500a76fbd8badc4a9f1acc937\n18806a80387734b754c7b6e11bf7148d\nd64f391dee878277bd46d022fd7d80aa\n8a47b24f85a0eafa12234b062bc6c471\n6659e72d40cef80be07c29b23ef67611\n5d022668941c6559b0ed23034a67f7f\n2ba980d080f89581ab2a0ebad7754fba\nfe82a9934a38997866cf1b4a8fc3914e\n16f81f41ba16edebca8607f540cc62ba\n6296558889cbcba8faa7ec7d870d2e09\n5da145252e095024ee738cc95b5ae8e\nc2923f0931fa539f794f2d24bb38b7d1\n83b55a6e1677563d6ae6891f58c50f\nf88906b677e97695f4126163bc622a34\nd0b7060229617935d2a4e6ac398c976f\n4d0994838c31434cef5f09964a6a1f97\n33a4f9403600f29c281f657e8f8481a1\n39fce052e13f97a57a10aa3eec436422\n6baefb84d6e12a0c6bdb424f4ee7ff8b\n3576bf753aea3dcf661f0ad700067cc\n31fd02481a07471e4e8b48a4c01e36f8\nade3c4987f49895ff960bc420d751255\n8ef4637cb349584420c6a28228acb628\ne3f562bd552fbb14496e2f80fb255499\nfcbdaf6100aad67d5abb92fce0f1ced2\n66bdf712963b9a17efe0d4e1eba2e3af\n5efa09bee2cf193afaad157818f6ee1e\ncdbd857f25b1597c711d3e79ce66dfac\n7631caf6989bd17e4a51f4b900f5eb50\nb30bd72e684744c521b1ceea9c93aa79\nb644db95fe32d115d8d90babf3c5509a\n934b1ff5cf72b25c4310636931b68fdb\nf44c0e1e55a3469494f3355d9c061b5a\nb5b0dac4093a61cb3f2b01de37c0b29\n9de5723b085c9dd8f4fb6842b3610149\nf3cbfb52ea1c907a850e00840470903a\n5de885a47cf8aae2951971f8370d9050\n10af5de930178a161596c26b5af806fe\n5f73e503595094b783b772877a547745\n9d72d4ac799977bb71d03b466c72ce41\n3c109726e03fbac4ace5721ccacba16\n150cdc45dabde04f7f29c61065b4dc5a\n6fc4f30540b2fa9dbc0909d98a1ff2b4\n3826bf5c55ee469cec4dff11e684b695\n132fc603f8f69b08e816c75152573ee0\n122776d17b6a118086da73d36506db6f\n4d3fca1d1cacc27beeefea58691b769a\nf25ffb9cf92236fb9671f5163e7f6535\n5fcc974627fb15fbd1491f61ed5cc034\n5b3e534b2d022a9528be5258a76a8dcf\n862f246e54900f48ed4212b3ec7c4371\n17bc7631cbdaaa0c932e2c9d273ab571\n391b9c5bb875607c19ba010ddb4974fe\nba7d272a0ef0f06cd165fddf32a925f6\n46c259e87609c54fafc0cc47720c0ef4\n2f576be042897eae38f859e2bc79169c\nf5e271c3cb2edc1681209be1a5e8b10d\n1605bdb8709be6773c4d876662ed7ef0\n4f1fb7c062c50fb15a2c5766752aea65\na9bbba73d3fb7688b6b87e72ead132ed\n7bdf4816b61c0e1748766ee3c52f8ba4\n3a7e89dc355faac111f5789deac2dcac\nc1262e16d330f7a0231e16e03ac422a0\nfe0b8ab916cd568d749f4ec7f5556c32\nef6db5bcb6bb96ddd2f0cc036969ee4f\n9407c551466b346450e5128bacca96b5\n91948fbd89e316b9a1efa53c1b6b3c23\nc06b54fce5cc4961c9d5e99e50e5e709\n72e68e04a203c96d873ec74c119307b9\n3a7e396786751f544c3a35cee92bb95b\nb1f056090f81f992301e72365eacb45b\n6db64533897238af392d539dc5a47ed5\n40d6a54bb4f276afefe0d4e1eba2e3af\nb3c37b67cdcfd68571d03b466c72ce41\n99dc4702d20942da18e0889038e4fb6\nfcc2023fd98e157f2d99c69702933ca4\neaa0d465e9d0c16acfbf0f1430c86945\nd353b227b279804190b1d6deb98feec6\n6720352c366eba1a60370f16a3e15e76\ndbd0efc89242cc9318de900bee20377\n949acc63ad8f8816e816c75152573ee0\n60f99c0946c095e833b2a295000cb6fe\n296d0aa10bd7ddd87965b154b2af39d4\nce5310bbab4bc178d7a85b8b6dea0a54\n80b9b2807547a2d3ab94ae13bc67d41c\n5a399ad6696d587d5e37076261ed63\n525f3ec38c3baa7a4944d3c8bf9547cf\n8af65c495c966cd7c337e45399cf632\ne3c26c3920b93f36eb7fefaef8eada2b\n636dfe39d75701b6cc14f1e6f4f4f49b\n7ee2912263fa4bb36f14b7a660f4c864\na1bb5d1a075bf7fc37d1c8fcb5a639e2\nedd9f45c7c927032db5e5b1ef1010d8b\nc814a53c1538cdca4f7e1991902e92f7\n4e3e46fa987d0892a185a70f269c2a41\nd9dd8dd2c422dadaad70e50d5d7d02a5\ndbd589812bda0b1ebab624e35355496d\nd18592d9615b01bbbc0909d98a1ff2b4\nf8f4cccabf7ac33b199dff268d0aba38\n7608d7a5a3e3c2b13d4b1f38e3dfce4b\n78ceee44d207e826c87f6dba8af25d8b\nb831f60f211435df5bbc861d0124304c\nd0456644386d9149ce593c35f70d3f\ncbacce3a17e061251ab9df4be75138d0\nff12c3a1d388b03044eedf822e07b7e4\n8c6ec24418f0af1950e187c1fbdbf3ba\n5f0e7de6a86a694d3930849f1d75b1\nd777b1e4ba72cebac5353b0f3cdec54\n22ed115500e9648c5fabfc69ee61b28b\na1a58070ca1749d76abbb3e202b76402\n58e7f5046a0eb6474298cee0ed15ce9\nb9794f4722f565e319ba010ddb4974fe\n7af320cedd724bc89437816457a69b\nf8ceed6c984895079a6e43b878d5b335\nc7749c0a8b61f43bc9b9e28055202e3d\n351c9235749e398162147e00e97e28b5\nb76c6ef211d627efac8c46f8a114a34b\n77a81458ea729c62ace5721ccacba16\nce4b8076f8f9a5a05be07e24c1d3227d\ne7ff46a15ae32ede7480441c35610069\naa4df918db6c5973db6e67bf56014264\na162465f9664d92a94eaa56dbee38b5b\nafd43430bd7c689f251fe573763aebef\n2a06adfb446c85c9f9d3f977c7090b2a\n209bb7656231011d7965bced3a0d8967\nb63c554a915454b7a8481a97c910a7de\ncff4a52406b84da7aaeb49542c2cc445\n4c3b1356008b3284e42e14fe98b0b5\n313758cb2eacbb576d3e60add9f0d715\n276908a82ab3728e6283c6757ac506b9\nb7fd11d4af74b4ffddaa0161e9d3dfac\nc4433144c905ad0b71d03b466c72ce41\na9240313c39307574c3a35cee92bb95b\n541db123c3ae32cda91f7285bb2efb4d\n1de58c7eec71b438bbb26c14135f164e\n94c4ade39534d1902c13e5b9ca0fc656\n78edc61edc8835b5bc0909d98a1ff2b4\n38a8e07ed9b0da99fa7918e5874b2c16\n5cfdb557f5fedd51adb50624aa91e8c9\n5aec07305ba4bd3d66cf1b4a8fc3914e\n7ee59463dc17ac6e3e3f3c9608255377\n2677c3793143e75766cf1b4a8fc3914e\n22393fa9307224ec853c6f214c15e60f\nb55af8905ccc3b35102bb5032a53eed8\nbaa3e1edf8870f755f1a3e0b9f8002cd\nbfd02b9a1ad7ce73fe2d13a096d8b561\n3e9ff76da8ca4885d0635288642e63e\n7175100f99a61c9646322bce65ca3756\ned7eb0caa75661addc82b8fee1057b30\neeeb30213be73bd14c3a35cee92bb95b\na69d6f9ea766b9d1a13079850f677b69\na05cb1f091b01cc87aaa57326478bd1f\n4561def0c651631122309ea5a3ab0f04\ncc6041868bf2913312b981fe5abe4a07\na9b2d531e073113f9d1eb836604648db\nf8038d33c212f81fe99ea3c41458bc01\n530540dc968b396d7f3805c1aec66f00\n4b0f44a76ef66ec9491bc6c980bcf9e4\n136c2b868c5326dbba5db366aa3ac475\n9f525ad90573de3dccc19f6800e20c43\n63f4d6895e0de9079bd3f7086e6031a\n94981062a6f3748844750bbcfe7b8fee\n3844797c89c5e2e821b85e5214b0d6a7\n87cf8f265536d4369a6e43b878d5b335\n2764f43226260c94a5a118bd15e6e34f\nd1a887a47991d1b3bc0909d98a1ff2b4\n679d4f84caa5a1a8f019a51d1a3b2e07\n8eab40ab482a46f04369ac253fd9f7b2\nb65ac56abaecc35bedcd88be6151afb4\nb0f3f0f754c0129486faacd7b0ac262e\n8f39d2dbb98bce6057b643a522b3d830\nb1dfa9a6274688cd29ba25678ec45698\nec2ceb5d65007bacfbb51ecfb25331aa\n8b851217c2ef15b8eeb11afd6f15c99e\n7662fbb435dc1d0760bb9786c97a649e\nde5cade3966a1dad94946b454cd190d0\necd761d36abc0fb5250e498b1554a6f\n43e078c68d2fa3b4d5d30e1306d90d74\nb9168b74c6d459e65a73760c6feb254c\ndac25e0fbef7dabaf1692146d36a4a3d\n92497dcdab4d0a8de1e82eac4119b0b3\n5e0331eab3f051988f6810e1a2b6aa04\n224a8b6776a242f8adcbeb54f3d014e9\n35835c28f33d985fa18e0889038e4fb6\nee672fc1455b9fc43523242fdf9b75a7\n6187d076d53429aa67c54439d6177032\n40fefe66b018c17b4c2c88971423d0be\n2421f54274a5c237e8cef78f8179925b\n5c43f5436b308ed89a6e43b878d5b335\nff77ea82fb4a5f92da9afa637af35064\ne6e8f0e244efac73da2b0f839aba40f9\n76e66ae36d942c494c3a35cee92bb95b\n48c2f17fd1610cddf9b189ce48b45ae1\n1397f5bfd89673b21fc43d5b32fa230f\n172ac13acd9aa91f3df325aac2f73830\n47c7b3cb099b3212d1c83bc8b134e4d8\ne96cd99f545a4d22b0a339fc52929deb\nbad95673c40e3bbd66cf1b4a8fc3914e\neefb4a1fcc2ca4d8894e22af7ae821f8\n10cfc2090a2ade124c3a35cee92bb95b\neae845d4a7945ecaf2e466e56cb8c63f\n77dfe229aa38e70b3fdf1b3b0fe86dff\n3391b6520218cacbf27ebdfa602af873\n6044301c7b4c63ec90b1d6deb98feec6\n32a2723086f770e9233d80f3ecb7c6d3\nc8b848f32a850b15e816c75152573ee0\ne51bd7d434d1ee6622096c1bee7ddc7a\n50d2629e7e96c2883034111f96c5f617\n54984229a5e704f2941d71475449eb25\n7220043361fe9e50eb983188eb4e930b\ndd4da4309c12d47bc2c2c81e2232aa95\na73231f3d0342db94e8b48a4c01e36f8\n7edc7e17171b488bd33efe8cc2e2bf98\n395afa94dd4d549670e6bd9d4e2b211f\n253a1aead30731904c3a35cee92bb95b\nf214cf57d5d5634960e1e93111ad3e76\ne93a2143cbec37a173fac4529123dfb2\n9f21e660ba62b9c8ac055f4f708c624f\nc600de8c83303e6a441eeb748bfdabb4\n4244f171a6065c2f71e3a79f2415f19\n16d40e779903e77863b132896d8bc65d\nfe58e1c34a7fc8ac7f6b2c9a3874dfdf\n3fe365251b54087af0478431b5ad57db\n1f5537f4747ec847622c69c3abc6f80\n733afba7f61652e789850bc84e2ce90e\n3231fc366c6f4f3cca8607f540cc62ba\n2cc1ff07bcb27de4f64801ad2940cdd5\nff28d340bf0b5d9387b2a887422ab97\nd4849eddcd93569ac119f94203b4868c\nca0f8f701a042689331960c3710d952\naf69c8020fa9b68366cf1b4a8fc3914e\n78f32f279a50beea216b327569dd806e\n46791426a5b92fed6cc9876a2c35084c\nc950fc7d559f30016e86a8ae6e1f4d7e\n676e568ab8e286ad67c54439d6177032\n18d55087d052ecc86b7bd17e458d0dcb\n3af52163a2d0551d91637951367b1518\n83dd9dd45724d5fbbeb310a83b693887\n56616237ed5168f3a18e0889038e4fb6\n5aee97ad467ed9d75fe4b20a3aaa51a2\n6ea4e68428cba49f68557927e45c29cd\n23e30666530887e69a6e43b878d5b335\nf0e7808ee55510be1a7dd57f67482196\n697002e0242f331eca8607f540cc62ba\n95a6c003f5bd8a4acef4e20384a35136\n46d4d453ceac2f5c3c3b254d8683a766\n7b3ef304a0088b39112e53a423c9745e\n7a97d3dadc608b4350f01eb2b12b0a8\nd9c080cb6634a902ca9f0727e23831d9\n9465be8f818fbf94b01a0cb11141e033\n886942791e830bf1d32b1717fde97410\n1d6afc44b053ab07941d71475449eb25\n6dedeb5b87ee318b2154ead1f7ab03aa\n57f30880519c8270e58d21f41272cdad\n43beab0c1cc46ae641b5a73cd6c05ccd\n1f3fd9b2ce99e4ed164ee3a88aef3755\n8b3bccc84ac7d534d56132409b00c58b\n6456e87ff00e31a96efa61580a088aac\ncae48a376cb607547d3b11085e75c7ad\nd2842bc324b3dac5bc0909d98a1ff2b4\nbb976c45b6812b9254e2b6da60f72ab3\nb77aae4fdee662f487dedd9dfc0f1d4d\n12877bdca58ccbea402991f646f01d6c\n5869e6c3e9d2748e5ff3feb917a6004b\na18f4e4c291761fa7cebb3dd777c66be\ne2275ee8d6b175f2f446f92b52bbd82a\nc022461863cacb39a2872fda285c0d5f\n65d7ed8984d78a797c9af13aaa662e8e\n6f473d567942897b9908db9f2ff495fe\n5d0d3f54c5d9dd386a1aee7416e39fad\n675464537c846822aa7669713586004c\n783f3f72d5639597ba0d990ae229b477\n9e524a14078824b5cfe15db7c5db913\ncfaff76a1503d4f562b600da24e0965\n42dcf7058ed936fd22362be7f5226e91\n87d37c43f41871fb4dd260a1dd3357bc\nc6ab8acad9e61a3e48227c7754aae2a1\ne87902d01d40c71521b1ceea9c93aa79\n229c164fe2c80acc1ca2e8373597f711\n8f39cc306f68c89c8139630c61d12904\na0fd595fdbd3a85113a96c178eda1cb8\n56c605d0b1bd86a9f417244ad1b14759\neaccb2ca303223afc503a3776fc280fe\nf56cde19efc8d428b03f97f6dc2a21fd\n723c87de224355b69878ac4a791083c5\nad66ece988a63911643ae903098a314\naeaa3ef74dc4c60c95175320d65fc89b\n221c079c90d4d5779e9cd6cd13c91bb9\n5bd746709adf5b3ccffae3eeba6126e6\n759da7376ab2196a66df9c92bbd3d5c1\n3c6c4be95d2dad2937b25178f54477f4\n94056866a14b015a50c626aa72455dae\nbbb8ec10b86465356630654359fc97d0\ne0ad511aab31dfdb3e237dc81fd8be72\n99ee9ae50909ac0cd3cd0742a4ec7e9b\n8cf06a71987992cf90a51833252023c7\na55a46c1442470aeace5721ccacba16\n831171fab182f62eb115cf6cc3371017\nc7fe2215d41c2db3a45193285587808f\n572cae68af04663cb145cb2b20ac87f8\nb88fef1090e6d151b3f2b01de37c0b29\nfc5dade8622f686b4aba1f0cb15b1439\nc541b8c49b5d2d8e99ad3ba13045dc42\nfb110c5d01f1b3fc59dcf12563d8fce3\n1a963a929d9b1332290d63dca780cfb6\nf1b3408a3ba452d0c1ccec171a275967\ne8289fd7e6ab0df4d37636af9c7bcc34\ne4665d76bf8fc441536d5be52cb9d26a\n92e2aee5e86c0fc870d98a97e17b4da3\na922f408bb1b1ea1f2cb090f7f07d463\na281b2664e7e5b2fad9d7d48f3cddb17\nb2e86c7880a56b6f71c382fe82cf6e04\nefbb9337b9bd3cab56ed1d365b05390d\nea1aa637a6cbe7b4fce29e20147f9d9e\n33c9e81a88866451f4fb6842b3610149\n21adc93a24e86672f054f5e37c7ac323\n7fa1d1bd456f0fdf6e68e46a69a2d96d\n3693696a7d11f2a866cf1b4a8fc3914e\n8ceca54101f96a96d972c9dd75ed77d4\n9f18925334b6f37bd560687a81f263dd\n9cb21d68582e1c4ec1ccec171a275967\n8ec085a86e6d9425f4fb6842b3610149\n8e50f707e506f65f66cf1b4a8fc3914e\n20b91c5ceb005cc44947b319a9e09fd\n9f40666fcc14828abc2db24227b9dabf\n2af04ef09d49221b85e5214b0d6a7\nb07608c9c3962cf4db73445864b72015\n3b41c0837f22555871d03b466c72ce41\na331e93c3184742853a6ddb5892da51a\nf963bac7f45473cdb33bc7516e53285e\na63e9d5df0c56b3f099bfb561edad43\nd5189c00524f662c79f9bc8b647dba0\nfbe213adb802384db443c685f436f80e\n65278860c7d0f3704f59c2a67aa8473b\n16f67f87f414a5df26360e1e29a956c7\nd441a12b217c26bc0d5f9d32d37453c\n2993c233805d2718ad8912880b776dcf\ne25794343ee37d6fa8eeb11153b68d81\n751b1e75fcd7f1deffb814dfce3ab22e\n71a3c6e1c87c8b42233f6392bb87bbd4\nc62237ac28c4ed61efe0d4e1eba2e3af\nf3660119189d3eca4c3a35cee92bb95b\n18d994c4f8362cfaee9d01b4b18e1b2f\ne5c98b67c146cd61e816c75152573ee0\n6fe837570383eb98f72a00ecdc268a5b\n934d7c130fd419cdacffbc7889712a99\nffbc31352a34c3e1ffb94dfdd6ddfaf0\nf533dc37778c6f004c949161e83c47b5\na762fe69269fc34b2625832ae05a7344\n2980f6ac8412890548437f47a316427e\n7df1ad6363410383f3cc56bc9bfcde3\nf6f5efa1554038ce2154ead1f7ab03aa\na00f6bbbba234739b92527b70e93ee2c\n70e4200e848e653072ec6e905035e5d7\n17c2d3e052dfe73f9cc1fc25372199f\n617a3d4bb40402679c411d305417ef6c\n6d52412e798efdeab87697d3904b168b\n882c6bdea5fc5e82a3ee83e6cad78356\n909548225096784cd5cf6c89d6cfc357\nd54a694d514b1911844ac48bcfce34\n81bfc74dd037d1ea88d58cc5b9d401bb\nbfcdf2928e854d109b6724d4f3457e3e\nae8a5344a37b2649eda3a29d4e1368cb\nb7b8ffe2f07e4eff95dfd5eb5f06d19\nb2dd8a3e977d8e5f23c640e813cbc041\nb8fbf59025f18f1ccf5fcd318778a0ea\n34c656eeca31045724a182d01c698394\n56fbecc11e62071553a6ddb5892da51a\ndad83c903379cb9cfa585c96250561a9\nb3066d613364710797020a1f4453e3a4\n5903b9eeb53f1f05a5a118bd15e6e34f\n55d0772f003a362916c1ee83fd7a7f1a\nb7023a2bc0b1c28142edba76767f7bf5\nb02aa659514366aa2c6868c67da0489\n38884564ee0da15798494085d68ad6a0\n1bdeb4aaa0aaea4b4f95630cc18536e0\n4f7814692598ebdc7dadbbeb79fd1fc9\ne332fb3eb2c4016ec1f9d235878ff0a9\nf7f915160c0e1f6f42bc0eea174f82b\nc9620ae77d3eb16ea3123c495342b850\n64e36b948869a79683653a771e25099b\n67a6b5b12ba64c529a6e43b878d5b335\nab35aa631852d30685dfb1711fe4ff6d\ncb91205ac0f2f62429dc68c96bb3c4\n42d9f626ba4bc61516c4bdb2c8eca27b\nb501466a5a77f1173d2cc3e9d55f7579\n560e0890ae86aa7624a25a765a1075c2\n86e19045d9f27bfe269856bd6e519d10\ne58010dd5766e0ce78f081615c34707c\n7977f492ebf2c1d5ce78be835f7c74e3\neb7bf553e500b9b544bf3710e93f8cf7\n7a3da3c75d98e44d7d64cad20089f027\n7b485e11f80e0577bc0909d98a1ff2b4\n46f9b86c1292366fadc12de54d203570\n2f5c1ef50794aa92a55d095b876bb574\n28711664a9d08bae46322bce65ca3756\n688c6d406c789b8d71d03b466c72ce41\ndb5146b7695fafba78d7c0e1adfe122c\n3112ef52e6da5d6142320ab3b0c39c62\ne4bdcd6baad501ab2a8b9d468136b0a1\nf7160900b6ce7bc4e63e266a803d9270\nd7f71651e6571ee2f63894cf4226f14\n52b2c8f99319167c71d03b466c72ce41\nb3dd0a06e7f727449a55c6af6f4b2bb3\n7af2dfbf11201feac3ab86afd1c689\nea527508bb74f476f64801ad2940cdd5\n1d4fbbf681ba892ddeddb5c33cb2f8f3\n34e87dd1c4922f7d48a263e43962eb7\n6509073d1ff37d683d41f76be7f2e91f\n7af9fcb4a2c4079b873ec74c119307b9\n3a6f0d1cff0aa524567ab83a85d8a5a0\nd1b407350e61150942d79310bc7e47b3\n31d1cf39b807c856efe0d4e1eba2e3af\nbe5d2c935a36894c92cea77f96988ae6\n82e50255f14e7d9e60c9b6e4c75a092a\n2407711ff7759994101cacf58b339533\nd8a8e238987fed8dbc0909d98a1ff2b4\ne7158ecb09050b03873ec74c119307b9\neae958f99bad7dcb18b14db3b83de9ff\n926749549b15941e6455d739a5cbd8d7\na4ca564574e55f1a66cf1b4a8fc3914e\n79f0a9d3d78764ec19ef6dae2862f036\nf944c570191885e8ca8607f540cc62ba\nb29c650e4d7582d11ae96ac7591d0dc5\naa70737ddaede2e3368d7e7849f8df62\n6fe8da29821a60d75057515802db06ab\nb7bd7a753da0aa113ce4891c7dcdfb1c\n22eb91041de27ca4936b2c59e7c43ba\na849d4325008fbea85dfb1711fe4ff6d\na367bcfb5d26801a848c716e284f561f\nfb5e00c769fa06e7c277130bc8102991\n8463c1f30bcd9151b92527b70e93ee2c\n10155655850468db78d106ce0a280f87\n480ee59947a01283873ec74c119307b9\nd6ca5966c5ed5b86da2b0f839aba40f9\nf36ac9cdcf15ac8497492c4542407e32\n68303a007a6c8ab02d6ff44f79e93a89\nace4fe6e9c97150a35fc197bbabcd5bd\nf8fa93d7b17fe6126bded4fd00661977\nec531add757ad0fa9a51282fb89c35c1\n4204361e3781952a8e951223a21e1fc1\n60b5f5da40e0dd33579f6385fdd4245b\n8c2d5c6dd599a5bb68c7efc443fd2354\n8c3419a655600e5766cf1b4a8fc3914e\n35611fc0fecb7a795e02646e6b8fbe8e\n1367266dc0a07c925d4533028830a79b\nc05bb681e0ee27e2eea65ef742e4d989\n6826af6513566b12f4aab844bf68e35e\ncd846470dd7a135d29ca62020db7d733\n5c9b09738d7920f0546100d9c41f5274\n2b2cf12a1fde287077c5f5c64222d77e\n99e1961a72bb8ac46177b6d1ecbf989\n1b626fd06226b600adcbeb54f3d014e9\nc93f76888cf5a14c93421b5e4ff654e0\n42b71c3f82a845574c3a35cee92bb95b\n8a343fecfe2b8660d0fe0309648c1f07\nf858fdc6841407e6d4bf37afb4832e7b\n1dbcb49dfbfd0844a480511cbe2c4655\nfe3aa0ec747c12c0ca8607f540cc62ba\n76f949c39923b0778f297017462c6cb0\n7c96e824c287f684651713cd1e90c5f4\nfa27e66018f82cf6e549ab640f51dca9\n523f5360c3aa35b5e1c77ed807ff5c62\nf2171bb2d715140c8b96ae1a0a8b84ec\nc5ff8a911c2780efc03676083f8f4de6\n2be6cc069c95951a4304ffdb51711149\n18cd9dc7631ef3064c41882468413db8\n1a04e3eab45ca15dd86060f189eb133\nfc2d2df18182df8c82a2a8a82be86fd6\nfe4ad5664773074cb536c73c7d134340\naf3863d4ce7dd92ac6f6da58b133bae0\ncc630f80fc235ab360c9b6e4c75a092a\n195ca2eabbf7c735a8d66821ccb813fe\nd837b5228d9c010bbe584d85bf07b4ac\nf9209166fc259d8885e96081cfe0563b\na05347463ea86f1ecc777fcc6b5f19eb\nd54ca25127a15d2b937ae00fead8910d\nb7eefc4c25dd9e49238581dd5a8af82c\n10e0a7255d279a419751c7a6f15617f4\ne037cb87e6cdcd76df39601c41fbe0ba\nfbcc12c5530ab67cad659a74e36b6387\na0bca89b37e69d349f66d5781c13189\n674115a86dd196c142c20743f866e1a6\n9c916b72d9f9f93b9f2700a6b7be99ac\ne66996d97d9f553939e75b12f2e5480\n557429a274a21e1e6a257cd6bc529741\nca2a07b005ad4385ca8607f540cc62ba\n78646117554e23162c00431da4ecd526\n6f96517661cf1b6799ed03445864bd37\n1bba3fb413b93890947bbeb9022263b8\n1d5beedb73951ef68649ad8da70da1e\na224182f76e4a44fe1a65cde8802138c\n6ad89740605331aef5f09964a6a1f97\n322e8dccadea03d3340b9c9d10273ac\na6a27c5acbf70ebd3df325aac2f73830\ncf2bbaaebcadfb282933085759cb1f25\n912d89d2d910a81cadcbeb54f3d014e9\n7206b1f248826f2398b39d2f77aef0eb\nca16041e31078463afe21c1ae3d91b49\n4b4fd540cab0cdf3f38bce64a8733419\nb793e65c707e884262bbb378da4fdb53\n5fc53108f6bf2f45893f875739da1b24\n337e7f2c3745e07789d7e2c40a194e8\n30b5160e2870b7a0ac8be969b55649e0\n4377ea17eb17fa79216b327569dd806e\n94ee700c27e2c05f84fcdb4aed90c145\nfdcb11fa39661f0fb08f81d66e854bfa\nb008491b09894384451efd5041dc713\n32da9294ff0c3d8c7a40e1005054fac1\ndf0b14faa90bd4dce68b9e5f5c3d0eca\n32637024c9aad5289a6e43b878d5b335\n1d68bc47a558ec9b266eb575093ccace\nbd8c9f9442124cab5e64c90e34fc13b8\n902b39a955eeb2bf35569910818956dd\n6eb12144093da25e816e98a113f4d393\n697161441b9da2a7ca8607f540cc62ba\n1ea7a36e4f353416fe1f6e05091d5d9\nd7454b0e80d3236ff268234accd8cf4e\n4b623f70c9853080aac5531514d15662\n219fa6821c9240e42476c2e017302af2\ne4237061106f5df1dc82b8fee1057b30\na87cad03c8f717e230dd29e8b6a554b3\n58fe58e9f7431a1a428659c2b5124968\n494660cc290492218ac43fbf276bac06\n8bde5a00c3caf9771d03b466c72ce41\ne8e1b765fdf5edfa14c19f41d007670e\nb943b632fd36f75ac1ccec171a275967\na4c41dc85210c3a0ae049cb809622fee\nf88be1c8e93fbfecba0d990ae229b477\n2efa2cfc42f2ff481b27cd1681a3d0e7\nabbe69a6f94918c79eb9aa3111a82815\n2d33ee87ee5230c335fc197bbabcd5bd\n6946f7a2a5ef851215ea536736a1eb7e\n87fb26b8e56d25f2b87697d3904b168b\naa3a801045f6fea9afd51f67d3985e6e\n2893dc61be63a8a16d0ff49003c479bc\nfef1c15a5db21b00a67cc8f661e7890a\nc2be303f5abf0db7b3369733e21bbc63\n62bc07e9813d75ead46f37bdc1dd4b45\n4a6961377146f08cb45fd154bd3b6957\n8da05b28d9b2e2fddd01eabba9d45203\na4b26e08b6080277a47575cd04a1d851\nddb96cc263869979f446f92b52bbd82a\n93c3ce7904b3258b2285a9bad03a0ac7\n6ba7cad8fa7301f9c1ca96a73599ca7e\nbb785567f73903da2661ac6da30aefd\n440ac1b4ac3cbe114c3a35cee92bb95b\n6bc51a88f3c58469b00421d9df4746fa\n2c9797204c91e3a440975e4feec771f6\n24bdf389877fb7f21b1f694e36340ebb\nfca4c82b2c488d329554e5818acd6e12\na3a3a3d2ccc590eeaef99de91a3e555\n12e127c0416f94ca4c3a35cee92bb95b\n96ee3ab4413dca5a48d2ba4615e03b21\nbdc5360ff3c62ed69aa9d7f676c1fd7e\n6c2c84db10ba167e48464d2edba1bcf0\n260288918550573dc9eda6e157b92d90\n143326cbe409ca9f62048be44e1fa435\nac0d1320328f5636b819f3a4f3895504\n26210ec84a9c1c6eb1bb46d2556ba67d\nf3f3805b0f1c81e6f1218670339368db\n1abe9524d3d38a54f49a51dc77a0dd59\nf5cc091bacb338c6951971f8370d9050\n595556bad291028733de69c9cd670995\nd605a53c0917acada80799ffaf21ea7d\nb1021932b387da327f58a59a37266b2e\nc46336844aa275098b96ae1a0a8b84ec\n86a5bdbd8c0c70eea7de26672c5fab85\n6b15289a71312a5af8ea21a9397429b9\nd78a16856adad344670aaa01f77ae41a\nd2f8a99bbdc387c8c5552bebbfa48bd7\ne8c1e738997275799de8e648621673e1\nebb5a048015c13cd35fc197bbabcd5bd\n86f2c71ef3700ca2cca362d2a61f33e4\n22829f20e331d563dd455eb19d4d269e\nd2bf5f39131584c0a8cba409c4409ba9\n2636cc55f0bee49671d03b466c72ce41\n9b5a1706223b150613f6b7168403d0e9\n81440fcd51052844af7d907e4e1905dd\n551635d89144da64299a59bfd8e7d284\n189f045faacc1b5f9a8993cdad554625\nbc48b77452fd108adf8f666ba0e601ac\n6abe0099d2a6efc882401bb74114a99\n600f970e5d1032dda4642ec4b6f68a\nac463974cee5a8867bd1a5c452e6bb5f\ne5a7a353d5fa8df844b2fa2cac0778f5\nfbb2e9c15888afcaca504cdc40c452de\n262795bc8a994b11ba0d990ae229b477\n91bd6e91455f85fddcf9f917545742df\ncc7a48498e745baef828c8b5be2ff54\ne31da3ac74fa3c0c23db3adbb2f1dce\nb74369cf3556cc822fa1bda037a5a7fa\n9a29495f38c07b0526a6eb5f28c0aecb\n724be1fb093a31a1ac8c46f8a114a34b\nf6b96f56212f55363023a5c0cae3fffe\nb725f44502906a42dc5a5a67e94552af\n6e4570ef29d420e17099115060cea9b5\nb224e74c6de1185a6f498c6206a06582\n669060a91dc45dfd2ede7237ec38a80\n2e0c7d77c0b74e87c1ccec171a275967\ne8d5a3e98c222583d972c9dd75ed77d4\n71a3888c2229715b694188e21796efaa\n167a44b60adc37319ba010ddb4974fe\n25864172dcde70c6ace5721ccacba16\nd6db0815d8fbaad621967ef97204d18\n5c379a118ec80927febd4e8b843c95aa\n1d5708929a4ae05842d1180c659735fe\naa05bf3c5a7bb61bcacf204c07dae519\n8fe406a829c40c933b353a5057e248f5\n5abe1e80846dd485c3e7213e9e8493f0\n53c7a6b56afb63807222da102ac36d2b\ne27229a5f83b0ac96ece6611a5309fa2\n214d7c0720b860091f21e5fbc0306e3e\ncabce3320f119855a5131d38588a62b\nf9505b01e3ea959cf9700e397b8b4e4d\n84d5ab52436c832d36813a9f7d8d3045\na60b2775f1955153ca8607f540cc62ba\n551e8582c195944af1b991541832fbf8\n89175682a6cecf548966fecb9138dba7\n49f400e6574c75554c3a35cee92bb95b\ne6d6e9544e353f9f75e49fe23848bbe5\n2af529843a47df7aba0d990ae229b477\n361f57d736cfc14dc8bff13697c27fb\nfe23572aac36c84761cfaa00f7177470\nf1210d8f895e40b663c15773e7567372\n990431d8a1ef435bbc913a3935f0ae10\nddb9b552868e8c61334736c27ce16882\n89a697d339c01c19452b96e716decae1\n1d7eb22189100710ca8607f540cc62ba\n800334df5da57266a4642ec4b6f68a\n78c5137e361e02cb24624455c20aef91\n1bcbb0267f5f1d53c6c0edf9d2d89150\n6e324581dbbdfb5548e8405d6c51a908\n7006c5afe5175d76e69ef11112d71da4\n3aa2ba8ca2aede556d96f75c7a1666e5\nf96426f2392abb1d8d58389384d9812e\n2a895d17616bcae1f361e4786a4d3c00\n82a472004d00b288b4d569aa61960548\n5ea68e6edd123801ad75fc64c51fb188\n3902709d4b10903579995cc5afab9d5\nfabe8fdc617e3aca2bd098b9203af\ndaf0298bbe90dff19751c7a6f15617f4\na53846c68d0df55fbaa5dc5e42189b81\n76eaa5ea5f272c2f5986032c1ed37f74\nd47207e14e61db3f1436d436f198567c\n30acfedb688a62e72ce638efd383ace8\n66c37aeffd6e73f284306f3bf0a1f2d7\nff569b4018fc2640cea77fac5d58428e\nc4f22c879e8adbc6aaae11b67645c759\na2041f74f316e7b9585e3fa372e910b7\nfb62efc64c58d1e5e0d07a8ce78b9182\n260305219d81f745623cba1f26a8e885\n51f24c13e4af3e06b6e5b4d7b00c5b3\n8238cca88d753930a23a96b0250afc71\nac06ebedebe86a7b4c3a35cee92bb95b\nb1762428d609674598aeb62a3dfc01d8\n7fec4732aa03b54e7db7c8d619fa260f\n3b0efeb0891a9686ca9f0727e23831d9\ne7e73007e0373933c4c280b3db0d6264\n85396c57cdbf919f83467b3671ddaea2\nc6306d07f28bc5231309643a94d8a5f\n5454ef3f1e0367f38f92ff0dbc52d7eb\n953baa426dac775bbc8c4428ef1dffc7\nac3336c2f47b17d5acf77e718d93f3e1\n1d663e36e305fa8e2178120752ee7a07\n468e504d8c28d8c9b8b8dbe00be04f1d\na1947665b3f56b584f127ea45c2fea1c\n3f80ce1461f3dbfe16af5d7a0b735543\n5a0fe6557b4e2b9ea8e091cb544689d5\nafe6a70cc5fa98fbd93d05336f155bb9\n98c0c90dcce8f9ee3ba77af508a192c0\nec8ba88cdead53f336dafa9b6763ef3f\na20db17555286e06f5e83e93ffcfd3f0\n3bc8cebf08ac975dbd46d022fd7d80aa\n20dbfa169424bb8ed7b90ecb4a11cd32\neff5216d782684aa3c7aa3e4b8926c27\n12c66a0490b223be595dc3191c718398\nb54d9c1ccb737eb6d972c9dd75ed77d4\nf277fd1032f615ec2268dda5c324173f\n31af9b965002990e27e7e81f554f78b\n2da62d609cc59f9a10b920f84a47c477\ne3473fc8fffca7d4d972c9dd75ed77d4\ne3e6cbc295806a47cf0420e0d05f48de\nd199612c22fe9313f4fb6842b3610149\n5c74962846d6cd33920ed6df8d81211d\n521b82ced564aa2c8ee17de2c75c8e96\nac75db84aa4e72e28f21c6f032637775\n440e5ba74ac8124e9751c7a6f15617f4\n4a27a6276e748777bc0909d98a1ff2b4\nd25572a7c7bd40a72d716a8ba99beff8\n464879f87b67827af268234accd8cf4e\n7117ac29aef4f1c4951971f8370d9050\n6ed172205a9805b8dd9eb6c0ee8316a3\n580e54df8765aac1c1ca96a73599ca7e\ncc40acee83422fe892b90699bc4724f9\n47fe79cbf9d6ef36dc3607950feada54\ncbbf6ca6a621c5f9acf77e718d93f3e1\n144649df5a5f9c8b5e4cd38353d7ef05\n9196f5a53aa7756687bac2e90bbe10e8\n51ebcde47b4c29d81a62197a72f89474\n49aa625393dbd1a4d443895deb2f03aa\n4303c9458a723504d972c9dd75ed77d4\nfb06b00775efdc8e21b85e5214b0d6a7\n754d9b0f12e6c6104af5b53e1d2ec5b6\n6bfb3e84a0fe44c1bc6e7c82ab33ecb\nfb01b45a0659af80c1006ed55bc1a3fc\n6cdc9acb022b2d7d98aeb62a3dfc01d8\ne55224bb456066c618d508b491dafd46\nc54ca35ef1df558850ea677bbfebf3fb\n2b20176a59621b35497add46ccd9d60\nb848dca797986bd69d175f8055b49b9\n4c9214d70e0a00c6c1ccec171a275967\n796bb7d6f4d5ce8471d03b466c72ce41\nc94efebebb2eaefcedc8262267425d73\ne387c8d826cbbdd68a8dc9dc46f918a8\n6a59f581ea7f33a5700feb5468ed9746\nd8a037897d5d5b108130971b27e95927\nce3c18550fb997d1107e1ecf38d6ca93\n21c7cc3e5f27540be6553f96496649c9\nd1e81c9479eb1b7da9263338bcc7d067\n14c954d5d3c8e954b6b87e72ead132ed\nad10ae20ac2e87a2adcbeb54f3d014e9\nd23eecb0437107756c63b8b48495261a\nb6af488133a67825881b4ad693eafd3\n6db6f79bff14b883a0ff12a4a79c7c7b\nfb92c2e96fdf6c37595dc3191c718398\nac39424c7666c318cde5b07c0f09692a\n5a38f5eb63dd8b20ab9d1113aabc16f5\n71f718d82a865472bfa44fe936def6d4\nd0001af4b3c1fe3d6f675e9f2e677792\nca8c65b83038dddb17486544d154bb2\n655ea8d8c710cf98f3a69a6853df2d7b\n7bbe33ebb5429a0a7a9e881131950954\nc781fcd64271dc15224d7b1b956e1382\n23cb6abc0705de4ba5a118bd15e6e34f\nf1a917846d46b61f71d03b466c72ce41\ne1324a093b45645c5a5672eede2b271f\n80796b736f1d6bc78e8131a047a07ce1\n81596cc38eef8260ce9e5ac45c67ec22\n1492ab4cf7a345e34b6f686803e61ffd\n56c827003a2fdb16853d2b3113ecdbb6\ncc86a2ca41e279bc89b1c1fd829ec927\na2c2ad021c80f08c973e06016b069172\ncf17d0ce34f09f572722fc1bdd7e0e51\n7d180493022c01daace5721ccacba16\nfdc1a422b48a16f67341d39902b9e2e1\ndaedff5e78136a8b507c9a5cb0f72e1e\n769efbce0af867807456183f198fd1e9\nce6aef9846db6aa5c1a897657d9a1924\n196d35794f869816db6f03b6829a5891\ne4e1b542f8732ae1c6768d9a3f27965\nc14cb2e75415dba59a6e43b878d5b335\na7df65b30f1e6a3663d1bfc21cc05e4c\n83e4e523003294ab9a6e43b878d5b335\n7c76d7d8ecfca9c2b1bb46d2556ba67d\n1d09583e9236b8d149d860a48be37092\n9a847e8c8f9c0acbbb05fba9fce1c1e0\n65b12fc357604a2587b2a887422ab97\nfef935c1f862f4aa31309643a94d8a5f\n320e639572e8b9ceca504cdc40c452de\ne431f79ac9f0266bca677733d59db4df\n1d4f988b009edadf54a2210c7b2aa25\nc049dcd36058a87e75b7e61db54ffec7\nf613ace665da5e3e8b96ae1a0a8b84ec\nbc2deb55a1c952beca9f0727e23831d9\n7ecb807e2270606619ba010ddb4974fe\n9a5d4e2d21506f11c503a3776fc280fe\ne3bdca8304aa6593c503a3776fc280fe\na2491ac51414429e422ceeb181af6a7f\n50e6ab918250ac797a663d343339f8e\ned4aab2d41d62b49895ae53d16ed9e39\ne4d902abdf9481558caa71b1fbf7fb98\n11d2af04fad0a7e2ce19d55bc5e6a406\n4044d5954ef85af8279326882e8430cb\n6c613c1893bf7f9ffae8113cc147b3ae\ne160529ef50ae4dbb819cac660ba383c\nc2d90cc742f17ce828204947d78b9af\nb2bb5a56b3d805b298b8c800ae001b66\n17c86b46990b54b65578b8865797aa0\n8de793e2e964f40a26c713777861983a\na4678e6798e768c3b6a66ea321171690\naf55f398af2373aa18b14db3b83de9ff\n2d01483c696c0a1688be2a30dd556a09\nc353ad7ae6ad2b9df1cb19f636b1c2bd\nd8a43017132c210cc1006ed55bc1a3fc\n5f9b4ffc555c9915a3451bc89763f63c\n67eac921334c130c336fa8434b94be14\n43edf9f02a027ed162f11c7bf54cc1ed\n4de5861211ad5b95e7ef9fff09638f8e\nae4fff8877a5a64b3ae1361afc45ac52\n2f988bec20218fa19a6e43b878d5b335\nfd95b99d4699430a7395d58407f193ba\n7b134f6573e7270fb0a79e28606cb167\n393cfa7e090b972dce2cec85ea6ae00d\na9b95631bcbefe9ad225a1c252daae25\nce12e8c1a5f5ce1df58f507a9f1e3e03\n9a4bd6fa35e2e59689437db5f9b0a8a1\n8daba5f5c906b3b331fec775e1dce6b3\nb356ef92a2052648b8494b55ada518dc\n171f4e9ffda674f44f4fd7b0550f5bef\n57eaa54ff3e4d6f211f78b196c636566\na9dff753cf97f9c5354ab1decf4fe605\n37608404f9e224d4fd180252c91ed0f3\ne17a696c47d4292393db03f6b4e68f17\n40c730231c4da8f33c3bcafb5ffed4c0\nc3bd5ab4d3ac6a5a5c351e299b24e355\n166c9abfb0f5256bbf46baa68c6e37d4\n68537bfb054ee3802ffb52751fee2c0d\nd5f4e2228e3fadd2aa6a832b9db7452f\n68ac5704aefbe4f54e86b47976e55141\n3d2e10ca9a5db964dc398f7f89f37ee6\n460f2b6d8f4dc18d565895440030d853\nd9eaf9c7d58279dc9a6e43b878d5b335\n8c6ab402ad29ff5c3b9dffcb3e0245d9\n61bd590e917928f6b6ecbbb2e4d05900\ndca7f88e151f196b8179909e06795c03\ne0aec5757f7a907d647cd52f13caf24b\nbdf120e29b19f77b352526271bef32d2\nf25da5eca572f01bd8d90babf3c5509a\n9eef6307dc504b88392b84e3285cce39\ne6f0811f15286120cedbd07f4cf21a81\nd2c7b95823938833339bd6b570381585\n6422d4a9c5b5b8f350361148ac946a05\ne216667457193c729a6e43b878d5b335\nbc92b144ec7029782e7c68eb5d1b9123\n71dcfd1e5d1e261179febb7e11d3625\na726f95306ce6e1071616ead796bdece\n9b60b20ea5fe6f002a2fdfabfb4182ed\nf12b45a38f012a78ac4f72bf08dc79a6\nc78cbd0e53900a1ef34db3de24263f32\n6859dc976c0528a831fec775e1dce6b3\n8bb827904cd9acd36c1cd53dbc9f7b8e\n82a2a1830758bacba389345bd31e2871\n788548a68d7b46ec179febb7e11d3625\n37700819bf2af266f64801ad2940cdd5\n30d1974a29d95d8be8bfa4901aefcf8d\n67636e7d15d082089412a62cd6b1bf5\n64dbeac5250de2bfc5d50480246d2c40\n521916cfab629ce0b6ed9420d56b12a9\neb110db9bdd0463e5b7003ff580606fa\ne218bb755f35da1bb4cdad9a5bf52dd5\ne0df97dfc068e3664bf88973bd147a26\n47d958a8a781144b132a08135eefe76d\n240136d2ae7d2dec9fe69c7ccc27d2bf\n1f7a516fdf80dcdc1006ed55bc1a3fc\na361d82b2c510ca5208842e3d616cb23\naba51f26f4da1b44b785bc4e6e3fb739\ne452189bb7bd6617ef7cbef6334698fc\ncbdf611a2146031823a665a253ac8cae\n9378f4e9b3bc187e621c837076d6923a\n7cbd504262e2d17ee91114a141d25a9d\n359f69a030d69b3da8fcf7222eacb152\n3b9c905771244df7b6ed9420d56b12a9\n5bea928fa9b2255ca8cba409c4409ba9\ncb55e0710b727bf62e36a049ed2b7f88\nc235f2c6d1e8c80e7f436bc8bb8973a3\nbe96646f774c7d0e2a23d93958262ccc\n420f3bb771e8e75ed878249aca2571f\n4ed01f44e3e422dff64801ad2940cdd5\n486f1238321ffd2825eb6beb311c44e1\n3adbafd59a34d393eccd82bb51193a7f\n77f5111d348bf051368d7e7849f8df62\n69a46dafabb616191f9b3085a256a338\n220a911e2e303865f64801ad2940cdd5\n3764de22af04fd32a993db466b6d73d3\n4d13a1b180422efc2d0334ee3a22c9fc\n57575cb42132554af64801ad2940cdd5\n4bf0b3df529d5093551df482db927edc\n2b0a2bb1556c96b94f762cd8ae1b1c4b\n54885d5beee4e76ab63969f9f8d6f075\n21feae1212b07575f23c3116d040903f\n6058d6701a0ca4e748e8405d6c51a908\n6a868213168421c6f0985368fed75674\n647e76622faa22b626b85a24a73a298a\n1d4ff34cdf90d6f9aa2d78d1b8d0b45c\n3b3eb57af5f995c268aa0dbe2db661e2\n7f3446564689ac918f69a600441c970\n5fed73635306ad9f14ac58bc87dcf2c2\n5cd14216765393f18b96ae1a0a8b84ec\n22acc443fd007fce6e80138ae17d7d07\n4f8952ff04d33784f64801ad2940cdd5\n3daca58825ce2ff6dc82b8fee1057b30\n2628b6cfcf1a53465569af4484881d20\nd18f2aeae4146464bd46d022fd7d80aa\nbc33901245943313d6d949577c389a84\n40192d0e50b4d2c1f27a705edb2f9ba6\nb7c11baa48456c23149f1a143758cddb\n34ddff243ac3783521b85e5214b0d6a7\n3948ac8a29ae42c761f027f2a55df6ea\n776bd07271792d1b131c2ccc2e4397\n421f45774389984bea6586b61968eac\n69f1d9c3987d429e5e9e2656aff7dd5b\n4d223d7a0e8162cabd46d022fd7d80aa\n77fea5bd4008e5f09a6e43b878d5b335\n73bcbc2d147291451e7b1f533ce75\n5d2f0bdbd08be6fa3105bdad0abb9e24\n16689e54c884aa01639c7058eaf33ae\n4f3a64164fbe16f54c2c88971423d0be\nf771c5a1b9bbac21f4fb6842b3610149\n3a82056ea319a442f64801ad2940cdd5\n54711bb9127ddf7ef412783097373bdc\n61330ac001ced49f64801ad2940cdd5\n1ea8a685cdc71effb8494b55ada518dc\n3ecea45bfa541b8e4a4dd08ffc16eb81\n48e477d5904bb7bb1ad94eee1d03defc\n1c26ecb4cd01759dc1006ed55bc1a3fc\n4b4782c572fa8b11a20c7111a5d0d7fc\na4391c7977d990142c20743f866e1a6\n5f6b6f649b419cea71f4784575c35350\n67979ab8dc522028788e57551eae0744\n62ca091091053afd9a6e43b878d5b335\n2f4133664133746cf64801ad2940cdd5\n1f9b49f320eeb2f5d0226d12d397045\n32b6448c0864812729348d14ca881f7d\n538f0b5ee7c786e6d3b936925082270f\n35131f7ea7256373879c08e5cc6e64bc\n4653be69e215a1a4b378822897b79a81\n33b8b6af08696fdea616caf97d73fa02\n5963e4385e6e5c0925c10fa44a32fd7\n879a8f69cd931fe9f64801ad2940cdd5\n562a94308f7bf09b8aa0062ef5480a6d\n743670f7f3a8042e6ad6a28101cd3ecd\n844d36a369cdeed3ac4f72bf08dc79a6\n162ed8d0d989f3acc1ccec171a275967\n1628b65a9f3cd7c05e9e2656aff7dd5b\n5678fc24603d25cb74745e8fbb11e3df\n4d2d87e61a18760ff64801ad2940cdd5\n2c5bdd9a08122f9e2023ec956848b741\n6a3028e1c7205b22ad6a38fcc21e6e9e\n3bad4bd2c944d78391d77854c55fb8fc\n3c52f7f687ce7efe3df325aac2f73830\n445404a75a0ba2ab1fc43d5b32fa230f\n61fe19a62a786c96950d2b3eef73a70e\n6615bb23e68159c193d4024985440d4c\n273c9c0bd43443c3b4f192eea1889928\n8b594934c14ac5db66cf1b4a8fc3914e\n35f43f566f2f14651713426437a9f7cd\n1a6ad7a24bb89733f412783097373bdc\n16868a30ebe634053dc22b596edc161e\n24d4c063f7a361bacbc6ff5546f4ec42\n34a89777594d3a61b2440702f5566974\n4470a28f2dd0cca9d9fba06863881b8d\n68f26c36ba5340ede58ca160a93fe29b\na2c5e769f19c7e97b7d7aa9b9ebcccb0\n150fd58e55111034761c6d3861a25da2\n5cbe5be753b5c7faf389d19fad321c37\n5c10e37453733ddb46d83d16be057f3e\n5a37bc42a52130a18f52dc705c3109b9\n22d0561f06900e165140beb2199de2af\n4a21d3920b11cdbf1592d7a04a86fa53\n4bd5f77521e76e6a2e690fa6dfd5d610\n37f2f187a1582704a29fef5d2b2f3d7\na273a18b004c209c90b1d6deb98feec6\n1cfada8b8ad2428fcabcecce1c335df1\n3b31e28ac1eb36fe1eb4be4ad34a6dbd\n65cde29553fe7d763a63e8ba97b45ddc\n2d9a7863dcfb5663d208f79049825a82\nc00d38c09ac5e6b8405970680284869\naa780af4d9cc83c3669c7dec71cfc5b0\n24e79ed92be932e19bfb78d2af523ae\n372c95e7685363ca18e0889038e4fb6\n33d955301966e4215ebedace13b486c4\n556363167281c6e486ecff2582325794\n3f3cd5461f7ec6edfa8a0c9a1860ff01\n3636483aff4b7977b7d7aa9b9ebcccb0\n75e9e2d6970f5ee71927c29d6faf370a\n3ee352a759364cdfbd46d022fd7d80aa\n4d84619c0da53326e90916c8815b5c43\n59bbe6a07a5a68d5d96b332cac4e78f7\n66e0fbcab927f21a875d37e2f5bce5e8\n2c1f66380af03e4c5d1df55cbe0874aa\n740e79be16a92efbf1f2e10bfa81e2b\n3b86245a5cd388ccf12b4513d8540d7c\n31d40e6e24511386d6d949577c389a84\n457c12e05d0f5d15762c3bd1a2b3f377\n88af6c30339602c2c87c199a35aa58d6\nb3bfc198214215397b5fa2b5a4fdb00c\n7a794db8180858fe90916c8815b5c43\nd6c1cb09e27c3fbce8b8a0b16211ba77\na839884fba87173ce25031ee39d82b94\nffce3c994052ffea339b6c8cc24f619d\n6da4590bf9d7bb9698b8c800ae001b66\n7d928af41b7dd26e1d0f8853f6d023e3\na34a6611fd6b2451690ce339b831e7e2\nb80131dacfa19f77337e02e3502c7536\ncef4d41c07613b658168857903a9552b\n38edc8fad5a5c0f0ac4f72bf08dc79a6\nadee8f091d7cc677508af777f11ed409\n8e2e03ed888e0eace4f2488af2c37f8d\ndebd942c5fcdc9c84c2c88971423d0be\n5d7c2f1b6ed0d02aa4684be4f9cb3c1d\na26639a06e2ae1ede7d756565593b850\naf188ff4bc1ed0693faf1ff99e423b8\n9159a77918eb86cf408508ea36928b08\n4d139f21350f64d2425a06bba46b20dd\ncc113b6e9d4fbeb23df325aac2f73830\n794fe891e20800d37bbc9fbc6d1fd31d\n96430e8f2174428ecbc790a63192d2ab\nce2c4502b06c3c356abde8e1529c422f\nd9a92927192e9755702736225b32125\n41acaa4d19dbdca75ad6eb90e75c835d\n95e589163afd0a7a609e2d916fa0da27\n5fc63354b0156d113136bac5fdb5050a\n80da27a121142718e15a23e1c3d8f46d\n61159c0458d41ac8e341b5704aa568bd\nf39e0412290bcc714917e69390d054d0\ndae96d5eb7dd6fcd2863c6a2c8157d17\n8383c4706c60ea2fc1006ed55bc1a3fc\n687ebd7d2b1e1475459cbe66a12329e7\n775f06502261575c26b390daf74a4b00\n1eb1d7d471f3c4c0634efb708169415\nde1e70fefcabfb6f79be89de816ea2e6\n27317e8e93190374780ee0648cf79a36\n30b514b24624da4fc1ccec171a275967\nd405b9e5f942fed5efe5d5ae25ee424e\na1f740e10229b43a82401bb74114a99\nf680ee392bad2dca29348d14ca881f7d\nfc76d0a9da7cde0bef5ebf5f74916182\ne8ed294534ba18df4a29fef5d2b2f3d7\n5cd68dfe309e1f8317e5bbee411fa5d0\nec4a2a47f601397ea01e5c9f53f20fd4\n655dc5a5376e9c8152c3271e911ffe19\nb5cdecafe353e18ac1006ed55bc1a3fc\n4ae3b41081645ca3e70b97b9b33fd6d6\nb7b94613ab6076a2a959294e5fb80cf8\n9f25e4e0aa598c7fabda204c62559ac3\n22dd4b6a60e20112185b376619557c95\nde9564aeaa585a6ccbc790a63192d2ab\nc3600f9ede30352a663e90eaf6b4ca52\n6271b0016c5fb3bd59d2e83012533b47\n657439efe649f57f47f8deec944763f7\nc8db76f18f56c1344c2c88971423d0be\n536e1640461854957a86454b5377c47f\na9b808a446c498f475df24d58e852c90\nd3198154076f49a86f0778e65d2e88ad\n76851aaf721dcb63509012911cf74f29\nf8fb835bdc55ffffdc82b8fee1057b30\n46dcd7b89d67cc41a1398b9e7da33687\n3a3403fb14bdb46823e79e99b949a341\n40a828b10b1b092bd208f79049825a82\n9f90f3298d7b6c6f938204d34a891739\n9513fcab860b113795ff232cd38210b4\n4dfe2199fdd333d09837a3d08a6a1966\n947ac452f850e284082bf69673a94f\ne9ddadf335adac52e025e00c738da634\n9695d544e326baeaebc75cd68927f0b5\nc91e7b5681d8aeadb81009266e6622c4\n44dece8f8529374ee2199ec015f35ba2\n959044f10e27b89ee664ce1de3ddc8b4\nddd6c2a51c25036c8a43cd65b179a1ff\n33c5c1919425791de038c01d73511063\nf8d8b590a0dcd399718ac2a6ddb54499\n4508864390ae424d663e50e76f163b3\n51f51906f12681a1dc82b8fee1057b30\nd617ffca7890b33eeb9d949e4b90f4af\n65468fa9ca2f3e9e642566c028df23cd\n2d0945065aa2a427eec7473defebb526\n8675974f9f6ec91ceb3b5fc90bde085d\nb87cb85be0d8eedb44bf3710e93f8cf7\n89bc3fa2ecf1425f6c32d954b1c7f41e\nf485dcbd466f217286774cad40dd456a\nc624907ad60cb9348a69ce464571d8bc\nc9584d90a1da19f723a665a253ac8cae\nbd298d2907400418df8fc3a07f996293\n337658edebb67c301ce9f50324082ee4\nec9bfc810a015c3a446cb1ee5d43f75f\na3e15e215144dda0a03ebab0e8b8f7a0\n2c16ac865f06542381598514fe928082\na430ba73d3ee2c0fca9f0727e23831d9\n7932eddb8032b6f1e4d2773f0358b43b\n2d43bb802a8faf0bce15d210eb57e565\nfbee89bee5338798d4837a4534bf020b\na287dc5d0e28d3d3325212819caa597d\n876127a17b7285b3c1fbdb352261d023\n697b269a890237fe15796a932d10290d\n84b84d39581a6766925c10fa44a32fd7\na9cdbca070047fe61e9dc95dd6a9f6\nca45f5d7efba158ca35e371359a547\ne7fed0e0dbd871ce35ae6d8873b772f2\n7b39d993f6934a96b08e958a32ef3184\nf2975fde05d9d63eeea0c0561850e04e\n26830050c44b5a8f9cf081e9d8a0b57f\n764894168678b36efc1619e612ccfb0b\ne53547a01129eef87eda1e12bd28fb7\n4a559ef6547b685d8aed56c1a220a07d\nb11c03976f121b3537007500db3b770e\n584e076b6cee78addc3757fd1f4189a9\na799568755357be8a07b3b853565360b\n8d148580eda6994c2a8810071030bd25\nbc86e4461bd4c955a34fb3db6a11a22d\nefc2f4eb92871bb2b7a641946dd77b16\n5eff54a76d8ef89d7e1c97634acf0214\n8c344cf05ad1bcb7709f5d258bc9a906\n92306925325c9e8a3f3cc56bc9bfcde3\nb70b049cacaee0f210af2c858faa12b9\n5024341275a685bdecff69852469d7e3\n172764bea108bbcceae5a783c313eb36\n4c5b8babafbb7b5f937ae00fead8910d\n28402efe2e3435d124fbfb66ea1f14f7\n47a40ce42bb9077579dc7d843e2be5ed\n947a78a898b6aa81f19a675dcc5ca632\n1f672d2fd5e3f4e78026abe712c1ab05\n87d764f79c2f3af24c2c88971423d0be\nb46244d196a7f66635ae67400a94a6fe\ndbdca81a0f9079096d511e9563e4bbe7\ne06d3e6c1fb4b208cb7c15fd62c3982e\n2e961e38a039f1bc67711f7c205c5b63\n23fb92d8cc0f8ac4def547874c3364e3\ndb73a3c857949f469a6e43b878d5b335\naf6b292c7857c78abb0e5c1799dab683\n8615fe6e2a959ac1efe5f291bc2f5fd0\nf087be2dec869154acb63dc32be3cb01\n9a878c5f0bfbd964d470a0056f762381\n9a0f4dd21a4ca19bf1cb19f636b1c2bd\n8d2903595298549959bf29282ea7962d\n57b5666dfe2607ea1025c08d338b6d83\n1cc3ebbadfe69e8011f5789deac2dcac\nf47c5c54c4e49f62e0a768dae1badf69\nf97a48680d63a78a9751e413d5325f7d\naf71e72822241808a8ab13c300600dba\n6a8b9f82f1de022a9ea7c189c9a53081\n62ebb16b6b4ffd74df8fc3a07f996293\n1b0b1d2cb9f9d5c0575bd26acccafabd\necb0d8d1c592bcc11bee3078a673c2ae\n9595693b6c0f5157651e8da9cf70afea\na19a5a459d234919c1ccec171a275967\nce337df2f75801eeb07412c80bd835\n2a3d485b0214d6a182389daa2190d234\n918b46dfb239ee044a8d8b0dca1fd34\nd1b1c13fdec4d69ccfd264a25791a5e1\n93c38745ac281f6b8aeaf14658928f6\n910bd9a7d9ac4738d5c4dc314e25b351\ne88ce288726375ff87bf26680c510802\n6a47f4d30d54771e8782c935066e938\na675480b02f939424131d9ef9081c198\nf592e88114a240cc61a8d3163a0a75a7\n8cd5191c587341029aa2a8cabf259b68\n17ac3afd54143b797172a40a4ca640fe\nf97fa7329969bcd0ebf1d9fd44798b9b\n6da4668de7ccdd0d4d10a13d437fced6\nc5143d3be7f1d0eb27745e9b6b461e93\nf58a26c915e7a1dceae7a0fa074b4a2a\n8a050edf3d971a617b17a3f88bbfbb61\n5a815646537e3b39f51612c193433f02\nd8e8540acddacf98c1006ed55bc1a3fc\nfcd7a8834a7f26f15069db69b8c1c70\nd7f3d0503ee4ee1cc34b900bb2492e\ncdd4dc06cea48b5faae529ab4a75c4af\n72e1cdcb882b6993c1006ed55bc1a3fc\n8df8e2580639b093c1006ed55bc1a3fc\nec879d7360572a5db65bd29086fc2a67\n98480ee19ba4dc93ef5f09964a6a1f97\ne430f24c3125997339cb1b92881e8e76\nf894972de285088da0896c4491cb3db6\ncc9b7118034278fcb4cdad9a5bf52dd5\na660b01d17f929f54e61a0c2eaaabe87\n1856da25a85402ce63e266a803d9270\n23f911351a5801aa46555ee25941a22e\n4d50ff789e84e70e54eefcdc602d4520\nc8dcaeda94da8da962b600da24e0965\na211208ba6b752b1e75e6a02e772bcee\na231f85d38f2b52154eefcdc602d4520\n893c03e02dd0e1ad7d64cad20089f027\na00ed5d078c6244c37678474be485ca\nc57409c95dd4bafba5a118bd15e6e34f\n3e4b522e38ef9a781b5928ecfc4b0684\n520382dade7695c4906bca4ffd4af837\ne1a8e2f93abfc7d590baeef8ba5b93e5\na777672f17d3641f1aa9d8d95b6740cc\n9d230551c65af968b207f792ce9b3f25\n19f211f1dec98bbb82ea21d84574e1ef\n617259db5ef0b9f8bc0909d98a1ff2b4\nf4818cd7c0701fbe752556d244bfb42b\n602a71a251857294959a8a7d5a8a5077\nf405858991b190173af8c56bd4352c9\n10eeb119fd5508e0d6d949577c389a84\ndc6a2bdc4c3e630a43bc71474ad05fbf\n8406b2372f6e1478d62bfd1579f9a1c2\n30d8f7fe0da9d5d0c164bdcf3c9661ee\n439c0ad637f11af762b600da24e0965\n437de410d7c23cbb29b33c3ec58287c9\nf55390ed02c0b2b36aa3bf023a2b42a5\n26a29227d6326e20e63e266a803d9270\n57e135ae4fc03f2e6d06e36417078f\n56ec4638067cfccd3dd4ea7aa5ac3a5a\ndd48aa92170bdde04c3a35cee92bb95b\na8c4288e4027e6a319ba010ddb4974fe\nf1a4a370f9e50890686c25eb09ee7de5\n820c903c55d7a1908f0d19519a0ef908\n414f3305033ad38934f276985b6d695\n25668f59015af0de56a7f2952cdf4b81\n2599e47b04ea7a32d872dc56d048665c\n762e29f11597581d62b600da24e0965\n852e1b84dfa1f7e8e075f0bda7acfbe2\n41aafedd84a6fa7490baeef8ba5b93e5\n993599a55057f963ae7c0d0e12bd33da\n325f0b5ace799075bc0909d98a1ff2b4\na4cbb0489a3a680eca8607f540cc62ba\n73fb8c3c4530ed4bbf3143b1cb6076a\nd05cdbdddb68865d2dcd3faa5a0a5f24\n12c82319147385e7ef0e1705c5c9e361\n45c963d64b8ef3de37678474be485ca\n8a674703723db7a390baeef8ba5b93e5\n4457652c2853e0bea8cba409c4409ba9\n8af730a8f082af9167b9bb226efd81df\n52e27aecdd55c1bf5b03388497f76a9e\nbd46cedafa0568b070d98a97e17b4da3\nafa83b431ffe73a454eefcdc602d4520\na097428376f298abd872dc56d048665c\na20490d0ffcd3be6e0d6812cdcf8799b\nb4de0e888e562f40873ec74c119307b9\n5c3e308093e9f287f019a51d1a3b2e07\nb64f57298cf3e4328b96ae1a0a8b84ec\nb253d5dd187679c74a9ee9951c24bdb0\nc01746b173e0870b3a4cd082c6787017\nb3ac8c2c48af1c07ca8607f540cc62ba\nb3323a51c2c1af9937678474be485ca\n5676893c90ec0f6dab81b7399bdbb6e2\nab9e9045e6c7bc6537678474be485ca\n2e468cc6afe2da70bc0909d98a1ff2b4\n70bb20cf86fe6afe76b85a01edd4a109\n29b92db18649b64e959a8a7d5a8a5077\nfc9b408aee84f46d70c4138179d9ed97\n77dfd8d4ee3c54c3e99ea3c41458bc01\n9052a53f45d5f8487d64cad20089f027\n1e8adc1e176bc68571d03b466c72ce41\n97c12e6155fdf8ca90baeef8ba5b93e5\n525446bc8f55e629151f2df200a24ac\nf70e5f2568e927147d755f57c8fea340\n2018b7614e77d726c1ccec171a275967\n718b6f112f70146c62b600da24e0965\nb7b743834a6d78c2225a23c790f08fdd\na5ca77bfabfad028b56059027b9b30d2\n62ebe2dd7bceccd097f28f82dd9c77a2\na611fb88b28c3f2ec231d70e1e0cc567\ncb7c32bd7266daef37f38dedb2f1219\n34ffc5e29472358cae81a3776126c079\n72985b83dd9c31955dcafa83e2819ac7\n30b9882d1d75be3537678474be485ca\n93314e5d740a48049a6e43b878d5b335\nfa7cf8d11d1340ff9a6e43b878d5b335\nbc3b68407bba00d92756c2c914ecfebf\na931895438ae4502a9f468923d4ea2fd\n857350d3e780366537678474be485ca\n7584ab1da1ae2778300ca77569ad3884\nbb9ba5deec9e2a5fca8607f540cc62ba\na2661597dd2e8a2eb87697d3904b168b\n5739574537212a72b3f2b01de37c0b29\n68d3c213b16ee2a6b5f20f5912ee034d\ne09c32b947e33f619ba010ddb4974fe\n53789eb9419da78c19bf80b167cee3a3\naafb38ca8d8f27de350ef9fb5390c42a\ne0e0d713c8969b52ca8607f540cc62ba\n776c423005dbb55d354aed6327ff24db\nd0ab3ed71a4ac9319d1eb836604648db\n7f895411162624e92023ec956848b741\n59b851010f0aef7422b13c48c34706de\nf986604528abe35554eefcdc602d4520\nbbc645e0c0449532b3c7301213dfb7\nea29b3af190b00367d3b11085e75c7ad\n3fba2f3ea21abb4f8c1b0ccac3d04f1\ndadf41579d385b0aacf77e718d93f3e1\ncf71f5442c4120db37678474be485ca\n732ff6155a096fb0151f2df200a24ac\n2cd9e40d1ccb1917228c3c30d65cabe0\n35fcf4cfd91d7cb3e1211756a8e887aa\ne51b620853f2cc0137678474be485ca\nd3b9114df1d8a3388e415c6cf89025f0\n8259a1fdcb9bca7526360e1e29a956c7\na4d75675f0f871c96466a07aedd68378\n4e66465abe540ee326ccedfb0470de8f\n3fe8243b660d5e8fbc0909d98a1ff2b4\nec4f0bfd77978a1cca8607f540cc62ba\n92e445da194d65873dc5bf61ec5f5588\n6a54d956a8adb2d0e691625fb79e2c2\n35c8abfbabb0d8ea66b0983c7366318e\n1d96d1c7cfb1085e61f1ef59130c405d\ncf310fe73705eb85a099666f6cac75b0\n6812a13a1a99f0da2f20ac99f64093d\ndd949574a91719eb7ab25516d117381a\n44e08106211ff2596ed8c57a1980bb26\nb74611a3b3b3ac72ca8607f540cc62ba\n2c3ba3f35c5d2b0ce77e43d0a92bdc06\ne4e98f8654d29536dc858dada15498d2\n46ae88cad17edca7ae7c0d0e12bd33da\n8d84a34d5aac3bffc6f6da58b133bae0\ne70bd95ab764bc1b3465be15e1aa6a0c\n350d4b260bb18470f77959a47a1c16a8\n53958f924a50069090baeef8ba5b93e5\n55cdb0891d7a05fb2217d56276f279c\ndb758090dd739ee9ca68a659ecae961c\nca4443e9a37c4f0b16ade7bb280a6832\nda3ed25d281fc4c065fc5f76098aceb0\n828176e6eaee542ceb532c8487004b3c\nc7df0d3a924147a49a6e43b878d5b335\n1ba18539803c12aae75e6a02e772bcee\ndeb196087108dfbdbe4df22b15a36e0b\n69ed3801f4f6f4d1e1873a3963e0d14\n1e40d41905a9be766ed8c57a1980bb26\ne5fe5ed2cdc8b11d62b600da24e0965\ndb628662ba1cac04b627754c4259e985\n8c851663113c3f6790baeef8ba5b93e5\n125417c3fa9bc1b130f57e42c77d3894\n813927b25c3a0c6dff227f13dbef5a8d\n543412ccea0db2f8f37f38dedb2f1219\n5a5e4590c54a70c6322c168d7a7c32f4\nb3d034788411421019ba010ddb4974fe\nc9f91acaeea4136f2863c6a2c8157d17\n9ac7fb5963ae673f7d64cad20089f027\ne45d71c7afb3cb1c67629418bd553f95\n8855c5531c093275146f724acb952fba\n413a85d9cc7f19a8b6c3e7b944b34fa\n649a8f44ccc86f4843513dd632697ccb\naaefbfb4765df684cf9f662004cc77d8\n54066a3cdb79ac8fa5cbab5aded19a14\n9912e7eaab960bf0e3639a60ffa58b1e\n18d123aaef6b911954eefcdc602d4520\nab2f47cda3622573c231d70e1e0cc567\n86099a00dd63ac05aac413eef609e99b\n1caa02b831cccff090baeef8ba5b93e5\n9e75560008080a8529348d14ca881f7d\n9a04c7aa6e1655fc90baeef8ba5b93e5\n8adc6a0f45a1ef2e71d03b466c72ce41\nd3f93b6da62fae46a98ae8c73b190485\nd38922599bc74f6da30fd8ce49679098\nafd02e6d4cf0a342c1ccec171a275967\nc3733e626c07b9ff26360e1e29a956c7\n333278f95a359498e768735f27170bc4\ncda1206f9460ece9868255f726935f63\n19b6112991fb8e33f3f2af1b43965204\n7030044b49828f08b96ae1a0a8b84ec\n52e7f93d592622a9615ba7bf3620290d\n57a57f639a3e636d914c075742032f6\ne557af9d5aa40f424d210d9468aedaf2\na3c928995562fca8ca8607f540cc62ba\nc93d0663035962b01b1cc145b0144991\n371a609f050b4ed3f6497dc58a9a6f8a\n3427fa8e6ea160f1fd138baf628cf158\n9a58779da170911a7a571401e6605fc2\nf34a66147493f0633d5158710d6fb8\n8bfcf5618f2d169c9a6e43b878d5b335\nb10ab8efa0aed59e90baeef8ba5b93e5\nbe92048655bc5b001d4c061b53288f62\n3badd7765618bd66a532a2f6f060af39\n4fb69651d04e010554eefcdc602d4520\n3c80dde1fb615ff5ca8607f540cc62ba\n84a167f743ec4f4de6f558e7f4a68d3\n720d70482d13696277fd7318510b8627\ne5abd988cb34ed9cdc82b8fee1057b30\n62aecdd1266b27935fc197bbabcd5bd\n4fbdfec0f9ee078dc1ccec171a275967\n775120d01da7a7cc666b8bccf7d1f46a\n856a4d86ea105d97be13ce34aa7c0c1c\ndcb5bded8772135b4295343ee7255799\n729aa8cba8e1398a43afdb9c81ff2967\ne6908f525ab8e6823a562128d0cdc8f1\n1e7dbf0057e067586e88b250ea6544d0\nee461612837ce39eedd03f781ec3ebcf\nf58b4ed02fc2fd1d4e7648015fd29a1c\n29c0b705d6368b6ef0483511b875f0d2\ned0a9a32a8e35f21ca8607f540cc62ba\n845d7718879d26f9a45fa73059b12336\n8f4e31ee9912f54e77fd7318510b8627\n326e859d86a8078427eb9e7911a17418\nb174db77afdcdd055b2a16b1d9c48e6b\n24cc8816b384723510a7b8c5fa89c603\naad69c419b27d6744d8e7d3c15c98c3b\n870dc1667e957672c66e7238ddb322f4\ne9b29777e840e1fb63737f7c5d9fc39b\na1ce38065b93520335fc197bbabcd5bd\n78feacec03272b28854fbae23376cbfe\n4e1dfdfdd417479f49e1f7e01fe2ed1\nac026df0c0add322f37f38dedb2f1219\n208114e3aafd381ef27c5ff0af8b0e80\necd19c1f74064962c6603e997b54421a\n79e06d1fe2e217b2cf67c0b63878e138\n93da50dbee3d1f78a7d0c1e4eb8db7dc\ne805624480f632ebcc14f1e6f4f4f49b\n7f837b389e885af471b4c018296f73c7\n4982bea0a007c19593b2f224b3acb952\ne533a1a758a1752b187ea8c086d9f2c\nc1b9934ddbf4f29e77fd7318510b8627\n898b4899114d9bb890baeef8ba5b93e5\na991428cd388fa7278afdab27190395e\n541c19fe42806c4d26360e1e29a956c7\nae837be3456bd54f71d03b466c72ce41\n2a966a7e0b07a5239a6e43b878d5b335\n341f5b3c74970a618d0dbc7502fb16f2\neb5baf7bb88c1499873ec74c119307b9\n46c311894026d9a762b600da24e0965\n33c6568fd4de5aaf1e623da3c4e40c05\n52cd5876945106d154eefcdc602d4520\n5d81abbccc11935b4d4cb1c2a5e48b7a\n28448469f5bce47b4ddd8a480b571bd7\n7b4b931c5b6f8167295338c0e33a082c\ne6236c5ec784a48111dcece1819895c0\n791af615e17374d38eeaefe98ae26867\n10c7cdfdffe2243b88a89a28f04ce622\n62ea17b5f0d46e2288a89a28f04ce622\n951358ab93e7380c1ccec171a275967\nb4f41b2faeb528fbf37f38dedb2f1219\ne6ed2c677e158daa1059f490634fcf62\nab06b28f95e4c2caca8607f540cc62ba\nc3a03137955f65c5cf67c0b63878e138\nb3fbc7a0b0e3a821fd279055f27928f7\n5e44d38e88458ab1e1873a3963e0d14\n88c4ef9645eee90866876073bf7a9ab0\nbcaf04bfae3afc1f4d48ad32fb72c8ce\nc878cac87819f01490baeef8ba5b93e5\nb97b9cde30c23b4d71d03b466c72ce41\nd2faf50d6d88dd0690baeef8ba5b93e5\ncc1e143cf7da051a6a6dc7e2bbcd098\nfb48754430b17846e3375a6b96a1d765\n5e124107cb94b90218ad244e2cb2c6cb\n4e2769ec84c0bd0454eefcdc602d4520\ne594754cc2a264d63da2ae40e7681e7e\n157936971ef9b6bb858b20d410ebdb99\naad1733e7bc7152bcc14f1e6f4f4f49b\n9f75309b9744f1b54eefcdc602d4520\n967b1afce4221816cf67c0b63878e138\nd1e78f6226a9ac76fb2fba771d8219ff\n750000e25d4078f64e61a0c2eaaabe87\n965d457720def9a490b1d6deb98feec6\n4937396b74bc16eaf781741e31f0df4\n6e5810d6fc96e4a7db73445864b72015\ne8bd07a978ac82baef40e4c1c2686cd3\nf9cd8293c30f1aaab87697d3904b168b\nd1b28579fde95f19e1873a3963e0d14\nb98a46b40d030e8a26360e1e29a956c7\nded529516b4362c9f019a51d1a3b2e07\n7f4a0b23f1256c879a6e43b878d5b335\n2bfd3dc8b0630de9e1873a3963e0d14\nc6009ba1bf947303ca8607f540cc62ba\naabbf242aabd1af7766c6046535346e7\n4782920ddfdeef4ef6bd63e31c40dc1\nfdb107ea7a600f5fe3f3aec01b086ba\nd2daef39d1cb8d027089ddd41f4af842\nf1df46c588524ee76aa3bf023a2b42a5\n5d1594f792f3641583a1f09b027e5462\n575b8ec48c550f456252573e97057236\nd6749fad86648a9719ba010ddb4974fe\n4515ac65d312fdbdb63361ca9ddfc9ae\n5f7f0545eba4034965e692ae5160ef\nb9f486be9d0160349a6e43b878d5b335\n6df2cf3685456b4c2e78e1154b9a2647\nfb01f6b428d094ad3ec83bd6bef75c92\na42bfdd67b3fc9926b2f6b824c9990c0\n795e0051d9ce7dfe384d4ad42dbd0045\n52c9b1a9f8d3cbcb9a6e43b878d5b335\n3b9241e85d07de6a8b6c3e7b944b34fa\n53f0e2f6671346ae5ff3feb917a6004b\naafbf69ed97274cd462a084c3c6d8557\n9712035b78970ca71e623da3c4e40c05\na4f5ce5926123e472e78e1154b9a2647\n5c9e30bf0691c04d4c3a35cee92bb95b\nd9d39f688eb9ba58b3f2b01de37c0b29\n8615e879f5d72ed5860c8fc9227db68d\n91a00801903a1f64bc0909d98a1ff2b4\n455bcf19112ebab52e78e1154b9a2647\n300a0c78e402decd7e67bd3e242c324\n3c9d577c78dcc3904c3a35cee92bb95b\n8938ab05c9dd830cb422638f4c34a0ac\nccdec989c4ca289d9a6e43b878d5b335\n9e06044df59e7f9f953041d9e16fa262\n3039adb37c192644f8c6d04d97f8cf7\n365747560fafc7e847b5c8181a9fe9a3\na61a59a4c48154db37678474be485ca\n85738a291d67c649f019a51d1a3b2e07\nef0d51f895cee0e04485f82d9fa383bf\n9759b89377e9d3f454eefcdc602d4520\nd1119217281b8475fe755e3418b63110\ndb8ee29417ddae1bae6908c1ddfd8734\nba37c8ef604b675be1873a3963e0d14\n9a9f615801c2dfff4d210d9468aedaf2\n4992d4c425b3cb426e8204b21fc3574b\n5aca1a2ca9143638b129901f80d24b7b\n97a6bb84720f250122df1994a149e700\n3923b98b26a3c7865f50257ecdfa5c7\n6cf2f9112ffae7c3be54b70092ca256\n7336bffce72ea58b90baeef8ba5b93e5\n9cda097e69ef82beace5721ccacba16\nbed589371c324e896aa3bf023a2b42a5\nb4b1b113173a6ec6bbf3143b1cb6076a\n47006ce926cd5519b3f2b01de37c0b29\nc3408a7be501f09070d98a97e17b4da3\nd4ed7de4aa7799f066cf1b4a8fc3914e\ne1fbbf2ea1989b49fb2ad20449a93a60\n63f3edb47c67caa29a6e43b878d5b335\n6e66c96067f3c631ce58b9b5a8f9e3b2\n6dead775080763b94c3a35cee92bb95b\n20b6bc7d69902db4d3ccdbb72feef61f\n74b0d11834cd8ec258a4fbb6b625be1\naecd996b2ec3832771d03b466c72ce41\n33c8abb3658f2d4219e06ee1b2e7b1b4\nfc0dbd045c9391ce4a29fef5d2b2f3d7\ndfa310706fad49d873ec74c119307b9\nbb26678e5faaed16300ca77569ad3884\n830f3e14a8882ea0f4fb6842b3610149\n87ac28e0b2342ac19a6e43b878d5b335\nad2bebd9c3004b2e151f2df200a24ac\n7488f87b1e08bbabd00d52e62bf14ee9\n71a96b4e134ceaacbfacbd9a73055b6e\ned1a5c9fac829d17a6766282ea8c438f\n31d5be3944350915efde2c2b27dc1843\n17e66cd463ff0de126360e1e29a956c7\n483207a72a39129771d03b466c72ce41\ne41bbd12896cdc724d210d9468aedaf2\n7db10020f24a3232abf03860b8d62488\n1560968d05cd8887cc14f1e6f4f4f49b\nc6342ca5cf5c445cbd46d022fd7d80aa\n1ed9876ed48c145d663e90eaf6b4ca52\n47331e4c26dd1dbc66cf1b4a8fc3914e\nc854bf983f2404bc15d4d2fdca08573e\ne88e090caa1ccc5d187bd96066d7269e\n2269715ca42c218fe3921ab5df3d2707\n7bc46908d079551eed02ab0379740cae\nf258c40371334a4e90b1d6deb98feec6\n149702d4e275568c18b14db3b83de9ff\nc7ae9f9e3f95ce76adecb6fc00604132\nbad8f0b4602df33fbe4274edc10c1c8e\n408af35642971375be13ce34aa7c0c1c\n654a5b26c59c12e5d2c4ce8118ff5045\nd6edd8b0801a02baf7571913c73c0c78\nd80486b768083cd6ba0d990ae229b477\nc48af98d47f76002deed0e4a55ad5dd6\n399449fd9e6149de62b600da24e0965\ne74b8862468d887c6d9b5a419d9131\n78bd38a7282a73f8b184ba15dd506a2d\nc2ea74539ffe96f8be4274edc10c1c8e\n45bd6c0723e555d4ba2821676102936\nfbe788465e564e46bc0909d98a1ff2b4\ne66692f2ec8ea898874f1daffc45b57c\n15ce56898a636466afc526de59117398\n8c622c7e0b15a0243ec67cba9d24f2c9\n9267c510247327a2297d46b42718e32f\n222c0d99446148babe4274edc10c1c8e\n4cb164f1fce7849762b600da24e0965\n2fb78c8d2f27598826360e1e29a956c7\nc9ad8451915ebe6bbd46d022fd7d80aa\n76f142e62adc0f2ae768735f27170bc4\n46c07706f1bd10fcf9cf2c77edbc841c\nb2509e9f52a19466c1006ed55bc1a3fc\nbf54b050d092d1e35b5e900e37653d26\n97bd6259fd4dd69a90baeef8ba5b93e5\n6ad619600049376a4aa57d4816c68a3\n47bb2e8a53331a2f3554ccf8c30febe7\n15442b53631b7e88232438a710acf1da\nf6373cc88634e8ddaf781741e31f0df4\nd532a5abb756ebebcc14f1e6f4f4f49b\ndf7313e87ef2905d37678474be485ca\n78789e98f905fcdd9107f68a9cb8e3c\nf067fb1b12badf2b732bda87f2718525\n38efd4e4060d8b4ec231d70e1e0cc567\n18666bda4244d22ca7aff2c3136e8e59\n186ca7892ed6de2adb22b838c125a50b\n7a95a024f5616009ab21e26e992b2c94\n6615d159d2e250376969ef231a00a44b\n6b84749eaca0e657f37f38dedb2f1219\nd1e3bba19cb9447dcf6c095014f481a4\na0095db392a8b520884a857d19f7439f\ndc28756381ac019ac2912ef1a1302821\n14453b29e139d81f6d07c55cf995503e\n60232dad38a6ec709a6e43b878d5b335\n8f4416cb67c3807bcf155ddc002a8f77\nbb8c3e64da2788b98057ec2068d8fa1\nedb916c2cdc2d3b9ce2cec85ea6ae00d\ncc14512d5fe6e8489a6e43b878d5b335\n20f2a121d9dbbf9e98494085d68ad6a0\n14282db0ca4238429a6e43b878d5b335\n3fc25f2cd192f7d262b600da24e0965\nc1fd4eb9f911851f4352ea917328a5b\n71ad36bd32ad44a0c503a3776fc280fe\n7c4e1ab21e8d6549a46ec065c01b381\n723921d0060203a344d33ea02fa0f619\n7713f76f4ef99f19954990879891d2b\n228478022f30a2bef1f87579d4dedbb4\n3fa6a05b62169e0d2350d07acbcc057a\nddc14c7e0a228663796843908eee8f7d\n6adda4af6b2b7bf9f315217de00e37bb\nf27927b066b0696d1f95d2b537942ba5\nbb38d29611ba34572af1006be0f51835\nfbd800d43c5f0d74250cb4f7fcd9ec03\ndc03e743739c4f87c27f2d9f006d69eb\n7089929d7a778403e91b0867f5d9629f\nc7b2f5b125bc41056d07c55cf995503e\n194098fb0aefc4a0666bd6da67d3abc2\nd48064100e793155f56a7ca118af1bd1\nd1d308692cb4b6059a6e43b878d5b335\ned35478403ae873943cf31d2bcc8f4\n121e9fceb90440efed79d3bd546890bd\ndfdcc024d1043c73d5dc0e7cb9b4e7b6\n4ec2aff45e8c495a667f1f26ed74631c\n3fc5fb97d23b6bf111f78b196c636566\n5afdfdbb4161ce0a7456183f198fd1e9\n266ba93989037e6d48e8405d6c51a908\n51c0b132806335051592a2f89cfd307e\n1659db64bbf46bcdc1955ee4b5680e91\n5d5aefde5935fc9eaa5d0ddd6a2781ea\na1e5e9561b501f2a19e06ee1b2e7b1b4\ne2a6bed8b8920586c7a2c209f9742f15\nde7cc3442b1775d46559a92f80e3672e\nbb244dba6323f80a126bd036879e7101\ne559a626d0ef8b4f982014dd9aabdeeb\n3c98bc293d33375a9a6e43b878d5b335\n9facc516914dcfee6c32d954b1c7f41e\n228fcd24cea34febc0909d98a1ff2b4\n487c60f57489506d5d515fd83cfe3891\n739c8cadb1db6db39a6e43b878d5b335\n46c52edc6107d1a3505ae8d422ba349d\n6dd16a06f0e9a286bfc945be58e73eac\n6ca40d19374c9d735c5f85af1b625f04\n7edf83742bece6be7cc4b32c704a58d2\n6e7bc6995080fe6542ca265836030911\n79a62c385180cc51da67790f4274f014\ndb567b8afbaaa95060a762246a709d46\n48836d07312f930223e2b52fb0c019e0\ne1be99a614c85c3e2016648502c798bf\n395cb914880adc105b50b4451364cc2c\n688930b9d0e06ead9a6e43b878d5b335\nf50eba69a3be1a1e536cfc00d8c31ac5\n422700fbef58a0ee1fd12d3807585791\n515b1b36d9f7721a903a13c314c66013\nda7354a90e6596e6139336f03eb955d2\n2ebfd5fec5c0bc85a52a419d042ca7b5\nf0137228f926dd464f8327dbe71ce85c\n3b529633bdd49dc1e5dbe91fa3801c4c\nfb68077d405c233ef879f4163a3ec7b\n7201f2a0f410dd0ea79efb489d71d723\n7191b4709d5142a1f86c2bd4e090c60d\nd581b2e10f8bc6aecc1d733a19631a1\n95240a3e33d607bd88803e631d9fa455\nd438a4539d8068fd44601c64497858af\nadad9536c34c673862b600da24e0965\n23d5975dd63000eb4e901b3386f76d65\n7a3392340af9ec7b62b600da24e0965\n130d3f27fb083eebc0909d98a1ff2b4\n697b4a3b6a380443c503a3776fc280fe\n284e6431669d46fd44797ce00623b3fd\na28b92f0ed237d6d13256b8319a93100\nfbebcde2d8fbf81ee7cf320ab5761d45\n157bb84c08754307dff9b4d1071b12d7\ndc3bfc83bc2d1db643afdb9c81ff2967\n45251b4f76c9a840139336f03eb955d2\n960d086565fd36def0a9e4c23bc75c0\ncaab31ecfe961086bc0909d98a1ff2b4\n297316f1c8a6f59bd007e7980e2b01ba\n32d9fe9366da899b90b73cf2bf8fe3d1\n645b2bf682e865ab9a6e43b878d5b335\nff725af6df1b76207b164268a44f7712\n2c97e6b2c92913cac1ccec171a275967\nddfbeb997ef83cab884a857d19f7439f\n9c7395d87c59aa54a79f2ed56427c6e6\n1974f6955c36c2aece2cec85ea6ae00d\n89a6af782a025acc62b600da24e0965\nd172705764e25e20884a857d19f7439f\n2228845a400dbad30fb60bd5470eb25\n133937bd45f953748be6919d4632fec1\n1a74b169a76e651ebc0909d98a1ff2b4\nfd0e59013a16eb5184306f3bf0a1f2d7\nae3556f7151098b0f64801ad2940cdd5\n28da27a6bebc81df62b600da24e0965\na60cd34f71c3c0549288437ebbe47284\nb42620c214ca7cfc44deee06752bbfaa\n558d3d7e6e78f2d941756cc47b70ca20\n3390c5050cda83c09a6e43b878d5b335\na68e67e5fa7ae694d9a7daf2d70e57bd\n7628e525228e5a2d9a46ec065c01b381\ndab7d624889233a863dc0bc8d259b20e\nc85e3f6c572581de7d3b11085e75c7ad\n9b09169e0a2b8650dcadc22bf3c23ace\na3c1b9b0c75af9a65cbd1a70b5b90a8\n645cccbc057c79cdcc57882dfaef8a57\n60af3c930040c8b915d4d2fdca08573e\n9912b47f0efc512b8d548f89c1029ea3\n4afcc2cf695baea99a6e43b878d5b335\n49611834b200ece04c3a35cee92bb95b\nd130dd0c96152140bc0909d98a1ff2b4\n7b4b249f1d3400e488be2a30dd556a09\n634de14a7721145fb3f2b01de37c0b29\n1c93b0eb9c313f5d9a6e43b878d5b335\na1017765200c668c6ecd5ddc73f570a8\n2b8bcb6e208a69b16a3383b58c4a9330\n787d2fbb247c04266818a2bd5aa39c80\nb26d238e335c59b567b13a456b2224a6\n49e9aa7ffa2b1a25e9d8a35d7a1fb08d\n89a6407ce86efaeee1211756a8e887aa\n29925f23c2050efa7def3dd22d9ef72\nf5a667f5796b9a0b9a6e43b878d5b335\nb5b6f5ed2031f34cec7a415ac918303f\n4ba7b11cd496e3be69176f0174b7620c\n27c409ead0c4e34c9a6e43b878d5b335\n7feab568d879270dd8d90babf3c5509a\n480d027eea9830b511c04c8a3e94088\n5608c1b40a0c2fc9c2912ef1a1302821\nd37781e47470fa3d664a56105f5816ce\n7054f98cc8af397f9a6e43b878d5b335\n3a3d4a90a2db90b4203936772104a82d\n4fccf49d6356c756b833a96759a020e2\n76788a2758e938f435fc197bbabcd5bd\n45801aa10db0636d4694b8455e89054\n6b8bd13bb6c2589db61f9d3f64979662\ncdeb868930b32468f879f4163a3ec7b\n7401bcbb1a184bf548627a76b6268107\n5c6590461085c93ea91e80f26309099e\n987e67ef16969b93663e90eaf6b4ca52\n847bfe2bea87c55b2d49d91e9a282aa0\n65960aceecc9d6f88388594197e843d8\n4853e07c17127af7df92be10876fa000\n1850f4acdfb738bd7456183f198fd1e9\n49e21b81565a51e6493c5f51f14398c7\n1eb3af39d93c8bf2ddea2f4a0e0f0d2e\ncb744ec78dd320efd2c2bfa672ed621f\n4ed5983b7721f1da7f79d93424b708f0\nb9e1ba3782922bab6ad6a28101cd3ecd\n1914552110aa5a61c1006ed55bc1a3fc\nc88275e49bc23ee41af5817af570225e\n117830993cc5887726587cb13c78fb9b\n1bea1445065705eb37abdc1aa610476c\nda6faddc7079ce8ab6befd5df74fffa2\n1272dd98c66f13579a6e43b878d5b335\n1322a9cabb1517219a6e43b878d5b335\na96c1589731b06a1efbd0f357ff7c40a\nba0f83a82b18613d2350d07acbcc057a\n24fbe7a49fd786c5fb5c1b0f759e2bc1\n6a9b8fd1f4ddd87f152be1f5910e33df\n40dc09d726aa6325ce2cec85ea6ae00d\n1890f6391df25286394b1e418d5c594\na0d3a490ee1b74762a4947824596dce3\n56bb8130f49b481e230ac8907b9b7f90\n47a4ed133dd37264521546825315c695\na85dbb5bb889881419bf80b167cee3a3\n653665e9c401e7ce6b310cbbfd03b8ce\n9e8ab1862683399f570726399d67ccc3\n2aac22a33893fad8b96ae1a0a8b84ec\n62e29787d3623618575bf8a4b14be4f4\nf998bb1b62da4d06d3a1a47fb9b678\nb6d2c4beaec0520e9a6e43b878d5b335\n40b916f7c41ad451494ac047ec5b052e\n1021a0914a7207aff927ed529ad90a11\n6d119be1286c7b129a6e43b878d5b335\nba784e6de35a5c6b4f8a08a5e6b028e7\n5c306ddfcc08ea1b230ac8907b9b7f90\n7182efccab0d3553c27f2d9f006d69eb\n30c0995dcb7c10039a6e43b878d5b335\n80770c90ba84524e825b20c2472ad90a\n50040de261741893fb5c1b0f759e2bc1\n523f1c2392338cf2b7f9c6f6b7bee458\n45570756a871989cfb5c1b0f759e2bc1\nffef991d85e3136a9a6e43b878d5b335\n226e3f0a844a3b4a77fd7318510b8627\nf222d51d7c6fedc2db73445864b72015\n3692c62cd29c6f1378a64d47db225ea2\n142acab4424009a123fc69eefd95e6d3\ne3b06cf8bea9a6a5c1006ed55bc1a3fc\n4b20c1736440ff9d90dd6eb126f6cbbb\nf8bc6483dd3c87085df50a69f2f8e096\nd31a0f4f945775de5823df672991ed66\n3547cdf24eeabdc925194e2abdb4c403\n48996e27f430ce286f67a5681eaf4d9f\n18e86ba0172154f3bc0909d98a1ff2b4\naa5cdbe94abd2ee15042e5fc5b753f1\n2c4228b79cf44778b96ae1a0a8b84ec\n35e2eceef33804d8196c5820729d438f\n54d49185bcda732a91e8833d3c500d73\n36393e03ed11f78461f1ef59130c405d\n9618b78610150b53825b20c2472ad90a\n20d97069df784e19a80799ffaf21ea7d\n47e48c70040beb9c8db97d9bc169245\n13ea0a2ac279dbaa5e9e2656aff7dd5b\n7981eae34c05e8409a6e43b878d5b335\n14ec1da5f5499d83bc0909d98a1ff2b4\n3cb63efff711cfc035fc197bbabcd5bd\n2bc9a8aa5826f7335fc197bbabcd5bd\n1b171503b1d0a074bc0909d98a1ff2b4\n35055f849da2cf0ec3fe7930fce05ded\n103c9e43cdf6501c62b600da24e0965\n32e8412ce01e63c1a47575cd04a1d851\n3656c9bbd79f6e29f6439977935c2784\n2767994ce3078824f38bce64a8733419\n92b7d0035cefb816d13ef00338ba8c52\n6c3593d0cc398e715d058822e4c8a2a8\ndf6aae66a8c378ae9029a69fa5fc9ad\n7cabdedabd1d65bdfb86dddee1d6ac3\n177fadcfa6b4a8346aa3bf023a2b42a5\nb9c8536f91ec3bcd3aff44a57f77b39\n3cdf7ea70c5a8471f446f92b52bbd82a\nb5d0ae4f723bce81f119374ee5d5f944\na90230831ba263e5f7fe0727acb55c39\n47b409c5c80dd7c533de69c9cd670995\nf7f69ecc4ff199ec5e9e2656aff7dd5b\n52a1b6e8177805cf53a728ba6e36dfae\n5a12bc3a78c510cb366a5992755f2322\n5b76fbabde77889c99399ee63318a21b\n19fc1b9ff4b6456f1232236eecec447b\n7dc614fd957186cf216b327569dd806e\n14161a05a21cbd6f62b600da24e0965\nb8df5a1fb0fa198a9a162c818d22a620\n85d3691b7bde76548b96ae1a0a8b84ec\nb51c1bb30371852fa325f626d0051e24\nf9fb41a3b1f59bb027745e9b6b461e93\n2b62a8a0bcac6f22e1873a3963e0d14\n121b5c1c81aa77906b153e6e0582b3ac\n1304ef60fe9793f685e0a2007a11e92f\n4e67ea4fbcd0d9a4bfb056e4de687088\n6a242ce20c44e82bcc14f1e6f4f4f49b\nce9246d409f1c688bc0909d98a1ff2b4\n132111c575000a3c146e44cc99f07c52\n74ebf601d9c872a7828204947d78b9af\nb45e5b92bb4623ff151f2df200a24ac\n6d432caaa8eba4fb44b2fa2cac0778f5\ne2f91794c302f5c03221f63172285740\nbd066f14adf6c0a9f6639976815d96b\n4de653411d132abdf1e2558bb9cfc329\na5cdc19967a8f69fedf24d76037ce02d\neae54f8d47cf07c0aeec93871310e650\n2cf6583a74dc4d1e373ed874fe97420b\nee30cf94a209a45b91d43bb96e1bb0b1\n130934b3dd2fddfaaf4f36f817f09501\n98b5a3a8e2ab94ccce19d55bc5e6a406\n95f7a9754cba79469a6e43b878d5b335\n4396510f1346f13050586f69625e08a2\n6311138687290f8a505ae8d422ba349d\nede14aa589c68280216b327569dd806e\n16b2f62791bd9f003554ccf8c30febe7\n3ca058682dfe98f7f678b53750b6d181\nc68efb547224f1dbed4212b3ec7c4371\n816935cac027310d5e9e2656aff7dd5b\n1490a4ae04d453784f856435f28995af\n1345cd9d0da6d149c6f6da58b133bae0\n1e4fb40e5908f2bddf2f34e1100f0241\ncf4c2d7d836c781e5a59e179e114b9a7\n72d96bac651bc74c7af159eaf7625abf\n4e4ae13865bf47f41adbb4c4e06ad649\nec4cd947eb2ee3103554ccf8c30febe7\ndf411aa240fe48d5855eb7906a7a7a04\na3927542339a2c491b1cc145b0144991\n13daaef458d6bb11e1873a3963e0d14\n425619faec43ba86a000a5a61b867bca\n124062ccaeae95085e9e2656aff7dd5b\na5be00166e57ce5dd92de1e594e3dc28\n1f86a689ea6c35f0d9da70c3ab6dcf3b\n1b300fd9ad4050e6301fa0a0663ee996\n995d06b3afb755eef446f92b52bbd82a\n7826147390af0f9d1fbc781ac25c5c7a\neb4396ab17012b3c9a6e43b878d5b335\n5d7b52a58c667ca835fc197bbabcd5bd\nbce1b10c92fb9fc81b7a4091d85f2e8d\nd3b39374c97d39da7dc01d89d8a05b74\n12e6e5f07b3aad3c5b9f44d7cd72a051\n133b74393a3349aa70c4138179d9ed97\ndf8bb967a346ccc25e9e2656aff7dd5b\n688c645ad207773f5c3e79a10705422c\ne60b86c7a4015490e5a760ec65004efd\n29ff751f989bdcfc9bff604afc480b65\n3a18489f9615a350e768735f27170bc4\nde863b025e53c9a63554ccf8c30febe7\n6dfde67c8b905939bc0909d98a1ff2b4\n5b815e2726656685823df672991ed66\n146533404a778665c93b40751084c22\ndbc521b1d4c2d308303d346f4be7d4f\n596c6e1e27b102aedf9d17a71b5ddec2\n41afa42c77cd167c2b5147716975ed8a\n5ff1cd7d4fc48c864b6d6a3a20b9f7f\n24c499191b85dd55bf4fc6675b9d12fc\nad85ce4dde9fde14a13757cba42c461a\n5eb91263da1f0bf3e816c75152573ee0\n37d32db3143814fd9a55c6af6f4b2bb3\n647a8f5c79b54910f6c0d5cf01fdaf45\n5c7729a3c482d77542c20743f866e1a6\nc85079e83e463fac65f50257ecdfa5c7\nf16381a160f20bc4a3b534252984039\n40278c4bbf6c1f3d9642905e5096dbcb\na80a6ec94928f7dfe87d0cb113e517d2\na82400edb160c18fc8727b27ee96a4b7\n94b0675bb9f2a7fdf8a8bda5d07839b5\n43c5f85e9a10071cb1bb46d2556ba67d\n5958285db82a82cbc0909d98a1ff2b4\n48fc59725119ac1133de69c9cd670995\n561bab672a9e12352c1752d7966dcc0\n45574293b59c62ff301fa0a0663ee996\nfae6ae6ef62cfa107b164268a44f7712\n42b63c881861105ccc14f1e6f4f4f49b\n67b2e9282e92abe110ac482828ea39f\n4ce24828099fdb5e744ca709c13b7abe\nab8eadee08cba8d8303d346f4be7d4f\nc76f2214e133a81adbafc7250d0654e\nde45798ef57fe2d131b4f9e586a6d334\n2e235eafe787ad029a6e43b878d5b335\ne7c6e2f7c5fd372e8e9091d822257500\naa3a317001bb8617f7fe0727acb55c39\n1a29042e20ab6f005e9e2656aff7dd5b\n2de92a57e410020cc231d70e1e0cc567\n5f9707e5f6b820275823df672991ed66\n77a1744ee3c37f9b6aa3bf023a2b42a5\n137acaae47b50659348e240586a3f6f8\nf1ef7546cc85a1815823df672991ed66\n572d374ddb49e77a828204947d78b9af\nef26ad836cd29010f2acf00738ce9d0d\n34ef846a22c6a6ac5e9e2656aff7dd5b\n97e58a98eeee184565d73e2944dbef1d\n845364350601ca0cbdf0b44e2f8f4e6d\n98ca06c300ad5a6bdc9181d6fa468db3\n519f1ddcbf942a76a71b0c9b506dc672\n611c65a9a9099c6121e570d3da54bf9d\n48bcce07b0baf689d9e6f00e848ea18\n3cbc83ba49edeccebc0909d98a1ff2b4\n4063fb031d8fb78e505ae8d422ba349d\n46a1b199bd63c0b4505ae8d422ba349d\n16079ddc92f4c9efd677715e63c14038\n52a6ae9074397d5f65f50257ecdfa5c7\n48d03ffabd0399f4303510f9a56d94fe\n420eb46efaa81427b60ce16063f0788e\n1b3c6b2fbcf834cf62b600da24e0965\n589e5b24b3b0e30e2620819ddac40644\n18d0da47a238945abc0909d98a1ff2b4\n1597cbeb8266af206aa3bf023a2b42a5\n1de008320c90274d366b1ebd023111a8\n55b7a2661bffdf9d55a352cb563d3195\nc61f67c3f03b10537f3efc94c2d31dc5\n3998242c3442e04265e04abc9923b374\n2f7253f8fd1a6a999a6e43b878d5b335\n2494cb5facfe7b1f85e0a2007a11e92f\n96a69c2add6d55379a6e43b878d5b335\n380e9e8c3ef07372acd7e882b88d2b\n7a80f3950b5e31f6b0d51feef5761dce\n12a1ac26d29ed1083554ccf8c30febe7\n11def84f9fe8ab0acd726e804e5d7a\n472e6c2a77198432e1211756a8e887aa\n3cd1b98f12d2a22bf3ad4b0977199f23\n34d467fc26232f53f36024ed2c0874a7\ne409d714620161c132fa725d7a62a02a\n229cd78f9ac3e77c8b96ae1a0a8b84ec\n839a950d0264cbb89a162c818d22a620\n29b3b168322ac49448d2ba4615e03b21\na839663396fe378a896facc4c7b99761\n3b95867a47a8afafe593bc205a118b49\ne039c9760ca026cc6aa3bf023a2b42a5\n2ce02b8bb91ecd05c503a3776fc280fe\n86590fb6310cf7361f1ef59130c405d\n347d86d7001cef01232236eecec447b\n1482d7a9e529dde7340461a254c1a95\n1943ee06ecb139819330265a9fff38de\n84615b34a2c8a2868699933784576e73\n895939bb0da197f8303d346f4be7d4f\n5fe313e070d6fc4e2620819ddac40644\n842e5dcd452f34aa8caa71b1fbf7fb98\n96409ee8309b4c679c72d95bbb12b7e8\n85743f17e13271e0709eb7790ef48e0c\n61c804d4751079962df73a6189a3b87\n1a32f10b20170883663e90eaf6b4ca52\nb9006dadc7ae7f7d21afc48d963f897\n9ff7d7d71bcf50ff4fb6842b3610149\n1026dd1b26120799107f68a9cb8e3c\n122963149f6a04272620819ddac40644\n1e8c56bac4e66672e85e222f6559b47\n66b9ccf5842ed7f79330265a9fff38de\nefc7d4fb87937413dc13452e3008005b\n5f2f19cff434d86ceee9782f3a645bc4\n1954754c791e4571873ec74c119307b9\nd60ec60e091e9d7ade125dc914c4bb9c\n8def338aaf898d6c26479a182158bae5\n53c27d3031f6f97e402be9c8dff728f8\n12d15ac778df6e4562b600da24e0965\n1496504f42de2eef8b96ae1a0a8b84ec\n1e827425b289432e8b96ae1a0a8b84ec\n23616b4d03c5bac61232236eecec447b\n1825c91c5f2da4bab12962b43f188cbb\n75fd28838e0fc8cf5b1edf5d4f643136\n52ef4ccb24accbb295673ce3194af95e\n26bc67e3ecda6aa1adbb4c4e06ad649\nb3135ae5bad8cc23cbaac693398e53fa\n32fb1aca48b3a0d197eae247c9b1df47\n985e020b26adf663acd7e882b88d2b\n85462aa8b58d5a1ae753c4c9af8a19d7\n1f47381312c9bebc9bff604afc480b65\n420efeb902ba9c9f47f9199352b2dddb\neb2fbd46563e23635fc197bbabcd5bd\n2c77ff96a9b46996b963df94d2f21069\n3788ee24009c65cb4d210d9468aedaf2\n29374d5ffdb23451e1f2a1daf140ac9f\neee96e21bf51ee6ce719b5362fe06bbb\n3a756cbf87c9a6c64d210d9468aedaf2\nd629589ee52d48ee4d210d9468aedaf2\n6ba3a181a40ac7aa35fc197bbabcd5bd\nb0599ecbf78aa615a8e091cb544689d5\n4d97f6fcb6886f49cc14f1e6f4f4f49b\nda12fdb456d5fb588b96ae1a0a8b84ec\nfd7c74a05072d3befef192e05c55dcd3\n5a3344eee5b27e670da4e1131665650\n209e9845a482333c77c06b43df2749d\n552871abb864d06d35fc197bbabcd5bd\n3baa3ca477d17e1a61f1ef59130c405d\naf6cf1d2b6c00b1233de69c9cd670995\nf350f4836dcd13541b1cc145b0144991\nb4d64b689e870d1b828204947d78b9af\ne85cd06b4a14d3ffbc0909d98a1ff2b4\n3e8fc3155bbc4225c1ccec171a275967\nd583d6f23c590f3ec672ad25c77a396\n8bb8876d55433eed216b327569dd806e\n909f59399d056983a0a3307f8f7721fc\n1807d521bc2164cd8c4f5e741c2f9cdb\n873f4d2e92681d12709eb7790ef48e0c\nd4d61a35e8b568fb7f1f82f6fc8747b8\n84b396dde837c81994445a3e8b9de59d\n427240c0fde25a90e6901f9a264cdbc0\nbee504b4909890df1dfabee9ba27dc70\na5beb33ba75edd59485e40e44ec62786\nb6da5542f0a81fb5aae46a5cc955c766\n5aa22f8c52d2f777a80799ffaf21ea7d\n2a801b1918ef23f1121ca0b13e917b22\n460cf3a75d8467d1bb579d1d8d989550\n2d4a57a467307d675e9e2656aff7dd5b\nabb3c5d793e4c26d7aeb2194e56698b4\n1818597d398db8f7f1f82f6fc8747b8\n6047f2c5854dd38526cb540828830330\n23c8d6c73cf78ab23cf128905a10d59d\ne8ceb64406509714e5dcd47593c60221\nb4b21950f0627213fba066e52ee0e502\n94bb7abec5f1b984dd1c97b5ee3d49a6\n958cc8251e6f7d8fa9b2becd26dc2fc1\n7e1d4583f70c8583431589819e5ca60c\nb4cc2bdefd4f9ce13f4d6518603e8629\n2cc44e0f9fb1efdb85e0a2007a11e92f\n730edec9009f8cea615ba7bf3620290d\n22d9a4a9290e8f09112a90660b187a10\n1530400ceabc1d7145ec485f7da1d9e3\n735aad15a1d22ed3dc92eaa8f8f40f9f\n73945c1b294716e1d041917556492646\n6193ca8f5b4419bfd86ebdaa02a63c4b\nbb6bc2b0786734a79b2acbfd8323f804\n854c2f430e7aa00f4d210d9468aedaf2\n7cfb337744133ea1bd46d022fd7d80aa\n84b07419645a3418bbf3143b1cb6076a\nfc7fda7232bedd84bbf3143b1cb6076a\nd7287ce98d521db5ca8607f540cc62ba\n8eda6d2dcf9302d2d041917556492646\nd06035fb4ba89c91f119374ee5d5f944\n812111e3a4a545cbc863ab010b80d9ed\ne025a1fc1bd71c2aacf77e718d93f3e1\n7eff60e0d72800b8ca8607f540cc62ba\nbc16d2cf6420432cb87697d3904b168b\nd99ddce71988c822475045ea78b20eb7\n94843fffd7d2a8c0dfb86dddee1d6ac3\nfb2e4eb19ba19bde5fe6cff21a9e8496\ne1225308d6c26c862b600da24e0965\nbb91e932504e90ffcc14f1e6f4f4f49b\n4788f4d5afd92e151df8f3faa46a0206\ndf1c68e94259c6cf5c7319b71bdce6e\n2f4f38d774e0e941dcc75fd1795fa3a5\nc156719444d78942db73445864b72015\nc2e38200a238177ebbf3143b1cb6076a\n77a70f61dc0c6260e70eaaf99089d5f7\n8db0b83cee14e1e5eacd58bc9fc5db51\nbdeb0a21cf1d602962347b4731688b0f\n26e26e21438ed02990b1d6deb98feec6\nf1f12c4408b0b4ee445d150719ce97db\n298d674a14dcd356de6e2d41bcaaecbf\n881e02b2d5a2c306f7fe0727acb55c39\n4a9f55420d17c815d37636af9c7bcc34\nd004d0e86ea3d77a65a6ed5c458f6a32\nc380dfb1b098757ace19d55bc5e6a406\n5f2aa0bc5a7fc2beacf77e718d93f3e1\nf59a2be8fd084418bbf3143b1cb6076a\n92ffaa5ebef3c4025d85b5c95b248fc3\n89a5679cb03f30caf5c7319b71bdce6e\nd9a263d86ae0fa599751c7a6f15617f4\ncc68ac5b18674485475045ea78b20eb7\n89836a37ce10a26c8699933784576e73\n41fadd55b341e54ab87697d3904b168b\n5335e5be2619bbed8141b488a44e65e2\n67217ee1bb8443c8316b8b2265213f7a\n7078ad51c3c30972b310347ab50a9dea\na0359a8d86947a2049fe495b383f9f0a\nb8720c5fee3264f735fc197bbabcd5bd\na39940973102985635fc197bbabcd5bd\n2590dff7d8f19797bd46d022fd7d80aa\n47d677bf1dec3dca82cea33798fcd6b6\n53d8ce9573e361d990b1d6deb98feec6\n7e092d9460157e968b96ae1a0a8b84ec\ncf402c23d4ce807d847335355bf4459e\n8686ebc30c07b53126360e1e29a956c7\nc0f9c28c45e7c8354f95630cc18536e0\nbdb7294dc4742b33bc0909d98a1ff2b4\n19e531e6d0bd5ddd67c54439d6177032\n8b1b372c0ea200bd225a23c790f08fdd\n35c9e363ca3fa6f8e4fc4c6009ee9462\n17874281e56ff0fbfca1f1143bb6bc17\nf4453381943f6039eba96cf317eae721\n87edb38cd76e89f5996d31205aa7f7a\n6d752b942618d6e38b424343280aeccb\nd458335c758930c210b8e0008ef5faf6\n858c0e466deead2c66cf1b4a8fc3914e\ne94ad5f8e53a255a8fc2d09ac4aa4e78\n6c931227c1735c329df8dd4a2554378c\n65511fdb2afad900203936772104a82d\n9300dc1ca5f16b074f95630cc18536e0\n22d36043ad59ef026edd138a394f7c4d\nbc3f4d2bf11e1c6382328b5e05417037\n2d7aff5577ae7af0d8ff6111270336a9\n527975c6c0e1c426ca8607f540cc62ba\nac4774b7a9fd06d55e6724a7c6e30991\n4843a702815e8ab442ffb0c016ee58f9\ne090eb003856ed12ffbd931fcaa69140\n29c81ffc84f2f7ba1adbb4c4e06ad649\n8d62d327fb15c9b42ff26728ed9d7bc3\n7a1954799b5fbb438fc2d09ac4aa4e78\na72bf66e9213b313a9b2becd26dc2fc1\n707cb24ab99bff07e2aeeb16e93626f\n241648add391b8d54d210d9468aedaf2\nc0c49c529f1ac5d8ca8607f540cc62ba\nd0e517321cdcd165939e75b12f2e5480\n47319a4f6de68c2966cf1b4a8fc3914e\nca359fd1ed701d06f119374ee5d5f944\n5392580fe70da9043554ccf8c30febe7\n1df217928b39b927a8cba409c4409ba9\n807d735fb9860fd1c863ab010b80d9ed\n694da337c806f41a7209009cfb89d4bd\n973211dfe6bcc4ae90b1d6deb98feec6\n468831f7b19aaebabbf3143b1cb6076a\nc14ffb40a37074ed26360e1e29a956c7\nd2412f19d33572dc4c3a35cee92bb95b\n619f0ed9bd92778e1c6bce26aea93f68\nddf4aa5f68f89616bce962d6c4b37336\n52185f504ffa9b32ca8607f540cc62ba\n67b7039f53759e92f4fb6842b3610149\n542a1e7f0009339aa813ec663952445c\n22ce6f6d1adb08d7bbf3143b1cb6076a\n8c1d67bf88f34ac55823df672991ed66\n48a9b9c041d377b26012a714b05f25ca\nc641785e297cc8ef74008994fb1880b\na271ac76b0e6bbbbb87697d3904b168b\n9314289f486e58caa8cba409c4409ba9\nbb5844976bf8ec479e8d5aab043eeb56\n802cbaaf1a51cf38c863ab010b80d9ed\n605c79a4937e72aed0f4914f6d630bad\nf6b7f7695d091b9bc0909d98a1ff2b4\n8a6ab7486ecbecdb203936772104a82d\n74334440119b4225951971f8370d9050\n9e4c0840aeacbf10f119374ee5d5f944\n88771c5b02d6e267b02bf6205401969\n53011f6c40df3d7b4f95630cc18536e0\nb837c3b8eec02a4967c54439d6177032\n952c5b41a44f6f3166cf1b4a8fc3914e\nf73a8fa9c2859211f2b0736dd4d8afe0\n9aa371acc735844efdd77aff53f4b7ba\n1b7ac690067010e26b7bd17e458d0dcb\n5e31a194b02a286df8c6d04d97f8cf7\nf80343ac3064e74862347b4731688b0f\n22ced10a5d20b1c1fca1f1143bb6bc17\n9c9d6469ecdfc54fc2a9d7232db0ed61\na5d68126acbd43395e9e2656aff7dd5b\n64a0f304fa3c113bc817819d30841d0\ne28e5714139535e7a9b2becd26dc2fc1\nbc59a1d1f959b6f9b2acbfd8323f804\n7196ea15821ad2fdd8ff6111270336a9\n1a888c2c86248bbcf2b0736dd4d8afe0\nd709b3afd41a578ba03df56f69a35fcc\n1ac29674746a0fc6b87697d3904b168b\nfd8d7742ee03905df446f92b52bbd82a\n89e0a038b52184e04f856435f28995af\n7addd02b1c255edcc863ab010b80d9ed\n42b464affaa4b3f985e0a2007a11e92f\n77c52530ef9983c94c3a35cee92bb95b\n78a7cdbbb27dfb21bbf3143b1cb6076a\n8e2846178e2976fab96212c8f6cd06e\n25805c9f5b2812b6b7bd17e458d0dcb\ndb5fa6a73bbe6d35ca8607f540cc62ba\n2b99e54070c8b6d466cf1b4a8fc3914e\n9acef1e2e46120f8fdd77aff53f4b7ba\n95d0f4440a694e4a203936772104a82d\n2ef20ad4c579812571d03b466c72ce41\n236932c4f4b2f557f5c7319b71bdce6e\nacb398aa5605abe5a8cba409c4409ba9\n5f9d38e5e7fef49f7a571401e6605fc2\n7dfaa526d4b432e867c54439d6177032\n2c9331f57865a9d2bd34bbc5253f83f8\n448ff32981729dd38eeecfc1f147b56c\n3033e5dbbff674a55d3bbd70fc7759b7\nc9764fd84080da3f4fb6842b3610149\ne7c1bb596e9a1ce9ca8607f540cc62ba\n85a62cdab580058925149ab881d5692e\n5cf29113582e718171d03b466c72ce41\n1169d987dbbce76775f4ea0b85a53249\n8c11ef88dd944d00fca1f1143bb6bc17\n65f77283a392890aa8cba409c4409ba9\nc6d39a3c52f8beaf7f6c3adc89eef8e6\nfd425567d79a43d14f8a08a5e6b028e7\n17ad3ab1b1d12a7db26dc8ec64d633df\na5215569ae825265ff3feb917a6004b\n2dec9e7b1acf88fea8e091cb544689d5\n62d03831457b2fee62347b4731688b0f\n350110d2828b3b927370804727e72eb2\n31b201b7346e6cd15e9e2656aff7dd5b\n2ec4d9949f80154b7a571401e6605fc2\n4fb10ce02887e35efca1f1143bb6bc17\n8af350191d35e65cc3fe7930fce05ded\nc107063f573cbfb3ca8607f540cc62ba\n5face359ff1d4b4f8e8131a047a07ce1\nca91bc0603ac0b808303d346f4be7d4f\ne511258df02edf1046ed10e8f7fe336e\nb8ed32beb17c3cacafd477f714c68df9\n56c7e0b6f27cc498f3ad4b0977199f23\na07446a1799bdea7afd477f714c68df9\nbd6966d7d0beae75f5c7319b71bdce6e\n89887eb7413e51a55970a7489fd4b4fc\n1a54a2319e87bd4071d03b466c72ce41\n939f3dcf67a1e1adbe13ce34aa7c0c1c\n969455251a1ee3061c517f0fe59ec7ee\na39880327ac8815e62b600da24e0965\n6dccca8485094190be13ce34aa7c0c1c\na95734cb8f7511cb46ed10e8f7fe336e\n4a199b1c3c80c8823bfdf036d38c839b\n78a63dc99b3b68962b600da24e0965\n44ae568461e04dc2fb3831486f8b425d\nec03d76cbd50314f5c7319b71bdce6e\ndc344ae06e26aa55615ba7bf3620290d\n647576c71cff90b4ca8607f540cc62ba\nfc2c9fd0bbd77dac4d210d9468aedaf2\n5f46f3c62e353c7bb4f5fdc59ce06e88\n579187a52086b0a63690bd3a9fab7134\n22d0100fa46f20eb8699933784576e73\nbcf7743f0dc85517bc0909d98a1ff2b4\na4f5529edc990706e719b5362fe06bbb\ncbabb37711c06d4046ed10e8f7fe336e\nf9589c9b900fd33ef23c3116d040903f\n795894b9a1105df34d210d9468aedaf2\n817add33c6fdd1534d210d9468aedaf2\na61d4ad108af6eecca8607f540cc62ba\n71dad8605fbc699623fc69eefd95e6d3\n99656ff9d5a8a0fcbc0909d98a1ff2b4\n881a9dd186e1d5c3ca8607f540cc62ba\nb089abdb33c39321afd477f714c68df9\nbfcc89117315f3da90b1d6deb98feec6\n1db7bca33ba446aba5cac89017eae8d1\nffd13ca14b85fec66cf1b4a8fc3914e\n99c13d3c3f30c34dca8607f540cc62ba\n26237deeb192f83d3ada73811bb576de\n7526757d0fdf8acc14f1e6f4f4f49b\nc31bdeebd8d74a7dbbf3143b1cb6076a\n8448475504ba9fdeca8607f540cc62ba\n383d7574448bf7f235fc197bbabcd5bd\nda26509e7d1864a162b600da24e0965\n53edcc6832e776dcca8607f540cc62ba\n1d63eb2b1f78aa88acf77e718d93f3e1\n800ce26e517769dcb87697d3904b168b\n4b10780b9e0f93f1d32761b337f8b72a\n55036f6b22ddeeedca8607f540cc62ba\n68899f486f3a6015ca8607f540cc62ba\nebf8011ea1f4b4190b1d6deb98feec6\nde65da5cdc92b4aebc0909d98a1ff2b4\n9b62f887f1839e5f4c3a35cee92bb95b\n646b93aecb7b7011a9b2becd26dc2fc1\n2c9e063352a538a4af7dd1bfd65143a9\ncbe8994d1dea1bcb4c3a35cee92bb95b\n3794aa3159c10929da116749c2415b0f\nfe1d825ce462c3e7b96212c8f6cd06e\n55ed35a03b08a8f44f95630cc18536e0\n30bfb515f027be9a4642ec4b6f68a\nb7f6e94ddb5ecc2366cf1b4a8fc3914e\n88fe762bfda775f84c3a35cee92bb95b\na60569e3e80d24939bff604afc480b65\nc2e047aa11190a0f3523242fdf9b75a7\n2bc0d99cba39f7adbbf3143b1cb6076a\nd5b08d1355502d325f83a2299c09f64\n8b9a404737736ece774a720fca15e35b\n7aac10eb5b285098774a720fca15e35b\n6cfea839d3dfe358bc0909d98a1ff2b4\nc846ad445cc9acbb98427765723d5e48\ndb4079b8c7d3d674ca8607f540cc62ba\n79dba7fc4ba0829d62b600da24e0965\nb17142a2f2fee3d4e2c19eec35e842ff\n6bfee98d2078c3c4ca8607f540cc62ba\nd696c3119cae40323ada73811bb576de\nf1384d3fd2d59e63f4d6518603e8629\n2af24e1c7067533d50a05a17b2f9bc\n27acb1d0e8c808262347b4731688b0f\n3360b510b0408682bbf3143b1cb6076a\n4bf2c942aafb4a2cbd46d022fd7d80aa\nf79fce6480d9276facf77e718d93f3e1\nd01da87ecbc2deea27e33924ab17ba05\n6a7bcaa4c62779e45e6724a7c6e30991\n44836457aff60736e10e757961deca98\n728d58b27cd53a16c93b40751084c22\n352a8e4f2023b029dcc75fd1795fa3a5\n5ab5f03340921fc8b96ae1a0a8b84ec\n59043812c2139ea8bbf3143b1cb6076a\nf98964dc88c44a2c863ab010b80d9ed\n12f4778ebba781236b7bd17e458d0dcb\n940c9ed5d7610d915d3bbd70fc7759b7\ne028fd73515465da5e9e2656aff7dd5b\n7b553eabcfe3709f3d2b6eee5a74cb08\nc777a5b86424892c644d8182e9bdf4a3\n6db52e6917c80e5157b14532cc71431d\n2d255ec7a05b301a203936772104a82d\n75b151efa363c18d94b9c9a92aa36f8c\nbe02fd401a12d23822362be7f5226e91\n675a2332a973401f6376dff6c42ab2c2\n4d0898c7cac1199a4b0853084d4042f7\n5cd19fcc882cc769e8b0cab853748d53\n2349e4b9a4ccbd97bbf3143b1cb6076a\n9be01448f3b2b932828204947d78b9af\n64da2f66ccfb98c6c511571426f8b16d\ne33fbcf5b616d6f9f44f89e40af48618\nddd729a8623bcb6e8699933784576e73\na9668a32a91787a6be5437d0813f18f0\nf7c11b5e07e9ccab3a116bc3efac4e3b\n9469590435736800b87697d3904b168b\nccd448614257253cbc0909d98a1ff2b4\nd8d9de967255b4c562b600da24e0965\n71222607731812fa5e9e2656aff7dd5b\nb1998932482a6215a9b2becd26dc2fc1\nfd0262e95283727d7b02bf6205401969\n41dca8046b0edc8f26360e1e29a956c7\nde001f9e2311dffb7209009cfb89d4bd\na75ab6e99a3542eb203936772104a82d\n7ce6c64ab3a45504dcc75fd1795fa3a5\n4a9d3df03a7d41d77209009cfb89d4bd\n4fe076aa34c706b83d7edb3bb2d24b58\n56b44fdca08540da71d03b466c72ce41\n25f08a106a0eb00eca8607f540cc62ba\n10db820f0e20396a492c7ca609cb0182\n7578bae68447de8498427765723d5e48\n96168894d7331c75acf77e718d93f3e1\n5c72cc06d79edd1cbbf3143b1cb6076a\na2b758aa5d51642bd32761b337f8b72a\nc2f43dd2c483e0d86b7bd17e458d0dcb\n1beb0776148870d4c511571426f8b16d\n56ed0ef0864d18c2f5c7319b71bdce6e\n80af162c0c01f27c4f8a08a5e6b028e7\n77c86e12f27b2adff602d628e1c92113\nf0fb27f3a597838feb1a0518c224975f\n1887d7e3ec69fe06a5cac89017eae8d1\n46d334b92644b9c8445d150719ce97db\na211cfc04bf47039e933de2bdfbab002\n34da5dbfb4bead034c3a35cee92bb95b\nc798fdb5baef6b8be36e92960e9f090a\n1435b52348569ce1bd46d022fd7d80aa\nd9d282f79262ebd4c3a35cee92bb95b\n3716ed4fa80dbf5f41392ab7a601818b\n93a635370616538abc0909d98a1ff2b4\n9a84164528544d5690baeef8ba5b93e5\n86bba8b007786db7be00b7fbad2ca0e8\n67da7044f5bee4f65c6d168c6e7f59dc\n172e23ab5b4d189566cf1b4a8fc3914e\nf7c2edc1beeedd006e68e46a69a2d96d\n3aba99921e9e1c93ef40e4c1c2686cd3\n94cb05b56b89aa2223895f8c849f85e\n6c8b2544144c38d99e8d5aab043eeb56\n1280f994ba1f92d28699933784576e73\n6c36b0f84118a75cf9c41a0805a0d953\ndcded0031a71305c52d6957c59c3d213\n2d41a07991b546751702b97fc9845e5e\n21bf3d8201e3e41f93358ca8580664d1\nb97446f1c30c0ed7b13143dea57f5eda\na09773e513ca86ba8699933784576e73\nc47a2cb459ab849c493ab0b98cb45d3\n65bdf7b997087055ba30a078a973ced0\nf8d7d8331fe29f247209009cfb89d4bd\n8338cdc32688a863bc0909d98a1ff2b4\nacaccf2af6ed78925a25a01ca5b91f98\n443be81bfa6e5b5ef6babb7d9ead7011\n7315cd530e4858246ed10e8f7fe336e\nf9f4daf3015b5ece5e9e2656aff7dd5b\nf3463eac7325b600d01b5600c06c528d\ncf911e274fb613fbbf3143b1cb6076a\naff764398f14383eb87697d3904b168b\n7201e35e5062683571d03b466c72ce41\n9efbd65b09daf8358b96ae1a0a8b84ec\n72761d1c2c7e1418d86ebdaa02a63c4b\n4a300ea7cbe3ae58a42c49797afd1f5c\ne5f08a5e3dad6cdff810506e9ae2dcc2\n63ee010741ba665c35fc197bbabcd5bd\na6afd80fa3d70682ca8607f540cc62ba\n983cb909846f4e1bbd46d022fd7d80aa\nd75ce9ee8a64adfd98459325335edae9\n384da5cd806c436b35039158de2eb4b1\ndb02eb57817e4b4d22362be7f5226e91\n997539bb0a0d8cf852c3271e911ffe19\ndcbd333ef51b76862b600da24e0965\nbc140e3c54b27bfabe13ce34aa7c0c1c\n3b3b2777be8b6b31ca8607f540cc62ba\na591b49406ab0d2abbf3143b1cb6076a\n1f7dbc112b7375dae0cfe7507a46f0c\n593dbc303a7afed7f44f89e40af48618\n177ea8d43905b1646ee4da51ee0005c9\n19e6717acfa7d2bdca8607f540cc62ba\nd171967c6353177bb87697d3904b168b\nb7b0068ecf75d279afd477f714c68df9\n63c63aed97f15526bbf3143b1cb6076a\nd4a8134b2463a8bca8607f540cc62ba\nce00bc7519d595c525a407b55f350179\n2d7562f5bf2c7f2da1d85548168d6015\n8ac48eb3349098b535fc197bbabcd5bd\na49a75d2b22c9eeeb87697d3904b168b\n2f3bef6d679273d062b600da24e0965\n33e11a7dec64dd42d91ca512389cc0a0\n3ad6bdeed351f5a84e61a0c2eaaabe87\n7f4b166fba71407490b1d6deb98feec6\na1a419007c828bf290b1d6deb98feec6\n55f212ad58883877ca8607f540cc62ba\n7f09b3b11ae3f22dbe13ce34aa7c0c1c\nda9c541228a171b7ca8607f540cc62ba\n396312e9bec88c2590b1d6deb98feec6\n5413e0eca808b2601f17e8416b3322a8\nb2ae4acd6774f410833bb0b457d51a52\n6cd3028fe03d04fec6f6da58b133bae0\n1e44b99c8de5eb01ebc54ed98d6399b2\n30b317e256e9bfcb1f17e8416b3322a8\naa21bf2a545e710cf68a010d0fc56333\n5524fd6b35f47d5ba8cba409c4409ba9\n8d49b7496a2575d5146e44cc99f07c52\nf6a09cbb6d08feeec9d7d324d11034c9\nc7f6766e4e96ca0f444c0cf9e8ad6399\n213004db08a787a466cf1b4a8fc3914e\na2b6edd3f2f060c7ca8607f540cc62ba\ne3d197bfb47ec943c9d7d324d11034c9\nb3950d8c2c1da884e52afb4158d0847e\na34a2fa46d7a0a6390b1d6deb98feec6\n2f01cae5fb585d56ca8607f540cc62ba\n165c4491d10067b3bd46d022fd7d80aa\n7ba9eb4e8405371ca8607f540cc62ba\nc1e081e8b97b3fc7ca8607f540cc62ba\n72537a008bf0c5e09d1a1149c8c36258\n"
  },
  {
    "path": "data/filelists/02828884_test.lst",
    "content": "131edf0948b60ee6372c8cd7d07d8ddc\nc96afd58ad067a6871b66f80cfaa9877\ndd97603ce7538c15be5bbc844e6db7e\nc6dbedf2028735ccd2b12aa6a0f050b3\nd8c1f1b9bdbd697b849cf9ca1e2dcbed\n974668cad6e15520c955e5ed03ef3a2f\n866b0fab7a3e54053555de1e3169ac6e\nfb861f0e4e7f528fccda8d28b44378b7\n22031fe0420834a9ad5067eac75a07f7\n87c34f2d5d53a51768679c90b064f491\n373ae08d8903dc10ba929f7d2edd1706\ne6a3b8946b66b83065ba78ad9601cf1b\nb3974f214dd4af93601104cd2d998272\n9b5dfec7d45eeca94c8c340ea700916e\ndb4aeb6354f5bd0dd4d8765e3910f617\na5a9a0be36997bd82f549c6b85154162\n6df5b51b250a823b147d36b9f2f13116\nb4ae95fbb879bed0ee38cd6552dcaadc\n366db933a2c99444f4fb4dee5181bee\n9c9fc31bba4881794620a50068fc504d\naa2571b8067d6d5383c4907a93b0fbc1\n6b4e4125c1a680cd2cc92e3c03668ea8\n42ffe8d78c2e8da9d40c07d3c15cc681\neb038519c5ba87b663b2acb037dfbcde\nfc7785be580a926a3409d1e6da3f019\n23ce36288382e8285710c881d369ccb3\na8e987a6a6486b962d6c8e51365a5a87\n4647754b7c5b31cccb2a965e75be701c\n957596b8dc4cba37ad5067eac75a07f7\na4491b4a67356be5184c1614f4105c8b\n218b98805019ba7df11e0e33e4b1b85c\n2e2518a8a2f335ae76bc197b3a3ffc0\n1b78416210cbdcf1b184e775cf66758c\n89f810f17284aceb85ef4356ea4ff622\n2eea9c22b37967006e40121acd58a004\n94420ab399ce8a1561e51a63d5bc6e46\nb852e63ad5983f1a8ccde000e771fc1a\nb6b10e519fed3c9ea9d99888ae8a3eb5\n9fd5b67a2b20b5d1b19874039c8f3e05\n88440ae4e218fa6ed4d8765e3910f617\nddbcdce0db6aa00524b325c2195eaee5\n7b21980987b63b953e329950ec40f6dd\nf8ff2310c6b130d38aaa31e538081318\nfdf0f799b897b0c99917ad57402f53f1\n71ab9fd8db7ee09a59cbde03ded257fd\nf7ffdf91b66c0c989c9513cebb0fb44c\n459f90aa2162b1f1d46c340938e2ff1c\n7a8a8c523bcaa364a41bbb5eb703e15\nd74a990634bb4b98ad5067eac75a07f7\n2c6c50ead2551d51a0e159a720dabf7\n8f102661c3efbdd184f92715bac39b74\n7cab2809bcc7b73a141c96faecd80bdd\n498ef3fb51503dc36e07666ce67ff5a\n61ade658bb475cc6a992c1353f8a88ef\n7bbd4d3fed3c4255626d7e3d07da8352\n5d463e4412600a3213afadfff198a630\n2cb61abc0c2663ae8f0add668496d7a1\n8277bffcffda5c4edab3d510e4b89249\nc9ca9b7317ac41b82168e5dee0d7f21\naf79d505f2ef2223cb2a965e75be701c\nd7025b55fe15337ed7c5502d4a22edf5\n6752d9230ae82d1ce67de87b371d4c06\nea4740ede10b7620c09352f205bd9134\n8d074f177479ac42628516f95b4691f\n9e4c82a76b6aff2bbeedb4c8fd29e2d1\n557899ea369eedd4cb2a965e75be701c\n8a5a59ab999c03ccfb0eb7e753c06942\nd1f9f40f8f58394c91cb0beedee33fd\n14af4a9931635c75f4fb4dee5181bee\n35948e4d06a9b07e8ba8ff316aec8d3d\nd8b87f36fde3f2f3bc5996932c1238cd\n56a818c4e5891f1d39316df04169d12f\n3830a5b2eec789ac63b2acb037dfbcde\n85db4f1bf9e2b62c492d9da2668ec34c\n9de1b1608e6ffb9afde926512eb9d305\n1a55e418c61e9dab6f4a86fe50d4c8f0\nf0b85200702e4739391e4d6c585a697a\n84bb6a30b1c5a87be008ebe8273a693f\n14abcb14222adcd499b68520b875243\n95cbcdc64b28bbf396f61afd58e50ae2\ncad58af144b615b674a3201fd136f855\n3749b110a6f7895afdb310510a9dc39\na047cb14c22517e6f33e284fed03c3fc\n28b9f2908f0cbb179c21c139c0613648\n84efcf2796fad0d2917fe9209d09e56e\ne7bb6ef568db1c986dfe473551340375\n5d8f7c82a04943fed201085e80edb26a\n4d6b053f11e784e2a136ebdce43e4200\nd9c927569da63ff92ebeb1e6a8111f53\na7366461245f831ea764a25163affad1\nbeae527c550f5ce8e4ed7bd95fe664b\n2bfeb0ef0693823d1418b6bd61b3ca4\nb9fb64100372235adbbc9440457e303e\n19399a9aac37442359cbde03ded257fd\na380e75d8efcb4192f550a4f461edf6b\n8fc8fb14df48da05ad5067eac75a07f7\n1e039c5d86b061a593ebeeedbff73b\nad9a12cce63df1c9870f22c94729669b\nf264c4d430891732d97248c4337f8439\neb9938d81ec9005882db9fca4b68095\nefe997f288fdce2d985ef0bf52b97bf5\n550e62946d2f55554bce3147c41ec725\n26299b4f8e03f3ae9470a3e695aa4fae\n92f1fa8d3b5da497ad5067eac75a07f7\n18d0aff1a5eb486ae2be3aed8abfbbaf\n20222f467d257022c8bbbd98dee48cb\nc3d8c664906eb8e57b11ae648ea92233\n5a96b6b335bada106fa8ce57c8ec2e09\nea56c97ec123270c2d776d9e024e5deb\nabcb5dc91337f47682db9fca4b68095\n8a03039b614b41b319fb4103277a6b93\n2974b7f87eb2297ffebad4f49b26ec52\n3d470843f013f9d8c9fd4914d3d18461\n891b8a01ad71af2db7e843606969432b\n220ab2896e0b5d87dae58dd9656897ad\ne56b95381904bfd08ccde000e771fc1a\n717019a5d139874f44dfa7c5506ef235\nabf095439d2d7bdb57a8fa4c1cbcf3ea\ne8480e72fb656057656a19d1d18fdbac\n617fa8d6d65af35d71295682a9280b8b\ne1ce45ee8de4436655a9b4fa7594b177\nde00838284782bfe97fb25ec4f973add\nf7b5756c04e354a0c1c40d87de24d930\n552ab19eab47725cb2a965e75be701c\n84d0db8ad40017a195c500dedd6e2c23\ncff15ed24c45878b3567b82c74e275b4\n2346b4f87a4f683b92e6829c9c63f7e8\ne4b80a7e381c6ef0f4215050a7660e65\n9399c7769b01d4742591fa6348c25a73\n3e81e31d8cd99cdffae0a22d98098878\n8bb2354519a2ca276d9eb2ed02ef01ed\n106494f75125eea6adf66a6d73888234\nce23a5781e86368af4fb4dee5181bee\n3a60057b27f90ed64910664c4d1311f4\nc7fb65bd3bd09a852056b4bd5d870b47\n72b6c4e1d8b93b21c2bf98e7124e149\n6a237c1e61fe2bba8490246570868c8d\n25876fee744f8f8dd45380eb90f62b3f\n86059f6fa56a8c5e44175b4dddf5be08\n2d1ea225c279836cd67b3c7873295e75\nb95994218ee416f492d9da2668ec34c\nfa2f82cf9275c2078ccde000e771fc1a\n2731687dd460a263d8eae9bce48bbeed\n5b24beacd0385489a6ca26b5255a8e6\ncf873b381095c2d43cbc166debd211cf\n38e367e4421ec3cbba70cedf91706353\n9bb6f0077f91c613f155d75bbf62b80\n90a8b80aa2fa209ca936e2693dce34b6\nbfaad1f9dadac9b6a385f05be5d65f80\ne329a9a5e7422b0a43638dabe1eb5336\n9e4e83e67a901168febad4f49b26ec52\nf495bd67af8d9f0cadd1cf65e8dc4de\n5775bf637d14acf1eaa4526a35f01085\n50ef39d633520df0855931d119219022\n5a383d9a0e67caed4ea8cb420cbb292f\nd0c64a8b3fed1ba113736977841a6b9b\n2fe40aafbefd99a9d2b12aa6a0f050b3\n1c47c37d6c785d4fe7fd9a18c19837e5\n405d1666d90df2c139842e32fb9b4e4a\n3c7a0029ec98c965601104cd2d998272\n9b37a6d7c9f1800952dac0add839bf80\na76a3d33ac6c3c65d46c340938e2ff1c\na3e3c1bd2a644e2df4fb4dee5181bee\nca21ae1c48c020db1a7fdfcca5768f88\n87086d24c964f9524ee9546b7112f88f\n8afe9533153bb82b157f5033576317e1\n7d865d0774f34972814c9aa90ee14e\ne2cf4a7357cae6ed2dd04fa3e4c2a53f\nf5e4f9657ecc18efc862eec8232fff1e\n6fe6b24009d0ac4f19b647a92023d001\n4b00859dc8ce46eff4fb4dee5181bee\nd25262c74c8269a04c80535a28040aea\n1ac6a3d5c76c8b96edccc47bf0dcf5d3\nbd51deddfdcae18b3b8dea4a358cbf0d\n241f99f97083f685beedb4c8fd29e2d1\nb65f1141e4eb2529100a6411eafa7455\nc3f92e6a78ad156863b2acb037dfbcde\n5b50871735c5cce2d2b12aa6a0f050b3\nda39ee814b8e3c0387d7792ff13e9cd8\n80593a84e45e4345f51f77a6d7299806\n88f9fa58ee9ce3de1c863a93a9948fe0\n1c79aa69e4ec26b65dc236dd32108e81\nf56c78ba29d9f73e9bc72297235ac73c\nf5c6c9a4c5787dae19fb4103277a6b93\nadf284153a2a87208c9b655484c84004\n394563d19e157c126f2e3fcce6bbeeb5\n91e169ea3ceb587beff42b9e13c388bc\nc33b2dc4fca8fd178cca710901c2e97b\n56f65bffa385a635f4b6538438a0b930\n9ebca72c02d26886a6e82f4002a10be2\n486535f610428612cf078dc7b29022e6\nb2a585ba5f0b4a25e76bc197b3a3ffc0\n739d41c59dc387e575f9747ff6fb5e8\n98971eb747738a6880360680c1602c7d\n50a3b398b3a2e5979ec4bb690ca24962\n2eb289d5829907b9e6ad3e1a394e102\n901872a92ecdfa4863b2acb037dfbcde\na11caea04fcac4f5643a8f56e2ede6dc\ncf14c102e6da1a78e6d475a101a6dfca\na393945aad7a2cad5067eac75a07f7\na64965f10047f31db3ee3d0077feb1bd\n43cae409bde302d4c88fd5e1f2929cbf\n2aaf5fe631a855b4de9ff1d2442cc6d1\ncbf9773bfebd4321cb2a965e75be701c\n9a87c9d904851205bfcc4c7214610fe3\n6aae683396bc08eaa4b1640fdb2c85c0\n62ec527e6093cd007a9af08d0375df56\n444e7c5709eca2496f61afd58e50ae2\nebf5b387f119c51cad5067eac75a07f7\n605b2c687b73695c8da90b986150cc3b\n5f0e28d1324397d9c0b027ae5b223d6\nd2cd3e3cb4ed6ee4e7fbee941d13bb9f\n205b404cdee5d81cc624b11e153a6d87\nde80be770d51dbf53567b82c74e275b4\n397ac4bbb11796902d92929fa159facf\n567779d7087c75eead5067eac75a07f7\nf1f14399ac9684df835bac7bf872f771\nda52e5b3a29c06b1eb8ae9cf8e3a676c\n1acf34aa0cb8f06a19fb4103277a6b93\nee50d76492226837926fe0a4cdbf03\n5a86b8c93baf8ad0a9030dd33d75b731\n46a1e2560a1e96f3897fc31a9c059e16\n972e0e5717676e47d201085e80edb26a\nb2ab0b13c344132ec569803a3242d4b9\n57678bef578b487a738e43095496b061\naab92a965e310885d2b12aa6a0f050b3\n433253d0d97f814025444614eab3fc33\n88134efda194f8f422f9a913dd25c68a\nf13e44c93bca57d092f4c88fd91c6b1b\nd7d6a7fae6003dd6f4fb4dee5181bee\na5669fc418b91f9959cbde03ded257fd\nfeb6a23a5e25abe459af9a18ecf57ec3\n691480901ee9f047ad5067eac75a07f7\n77c2f1b7a7c0a4d15ca1f314f1afc186\n63a218005fa1bee7fd313061a14ce51c\n4e1acb893cafc1ea29c39f613cc72411\nd5fd97ad2620480c62cdb4b7b7821421\nf2a3ac936fcabeb8d1ccbd5d84e5bc86\ne6b0ac08a5326f23faf575cbae5008b8\n39d8fdb56b0e160dbcceec49967c0de7\nfa4d4e697d21ec65512d71be7dbf2d60\n9d47deb11cac29f089345002d2594e4c\n1b80cd42474a990ccd8655d05e2f9e02\n2c75963e304f490223ed665630afd1ce\nea96a04c68b969c5c35f34f09f11667\n38c4c2ddbdb502e162701a18243b45d3\n16549eea10c75d0f65d3152da5208307\nbcb4f576747e10bdd7f6e86d7d335698\n7acc1a370dfcd3a85ff6fe84f53e00a5\n758b78e2ad5dfdd1edecfa50e41e5c9b\nc02649dad5a5946dfcb04979ea30d7e8\n3bc45b4fea81c02463b2acb037dfbcde\n8417c3b75ce474d217b431cae0dd70ed\n52867aee1e2e137912a905e721b748f5\nd673c7ec4a08aa6db6f5e7b313e4eaae\ne5b1626359c609a59d297e74104d3ac3\n7f4f6fc801f4f957263e68b45fad1e64\n6b9b014c54423664a9bf865a81345d8e\n7e8caf5bf2eb1a61ecaa3c66b0328b42\nc0976144b3ec94381076bdfcbbc20a9d\n294613465801739b4739fd13bce14311\n3d92cb6fe0abdf9c4ab121f03cb11a77\n459cad806518f195ba6d436b28fcddfb\nf70fe48c38bda53282c132e825d0d08f\n8f52743c3cb564f149e6f7df978f3373\n1be0e167a93a1069acb4ead41419080a\n7a2ad24394c5d139d46c340938e2ff1c\nd87bd42b60591573c83f7280476c6eef\n522f8c069a76c21fad5067eac75a07f7\nd26818a4e62d931d2056b4bd5d870b47\n84d3224312b9630465826cf0dd1f6a6c\n327dcb9a47911686815bd25a546c8489\ncae6c2b329bbc12de5d5fc930770c792\n514ba7cb3392ca5ad5067eac75a07f7\n3fbbb64cce9b5fb681faebbdea6bd9be\n1422f82a72e0b7f48ae1c1abea367249\nbdce8b3475f59d38f4fb4dee5181bee\n6233b6cce0da0615d4cfbd0aef5a371\nade8119d5a30ba4bf1547b1668422ce3\n94df387a0b97302ad201085e80edb26a\nc293f2fbc66af3dbf4fb4dee5181bee\n870562aca7165d703c78f7fe78269073\na58e45ec5204f09559cbde03ded257fd\n52e921d1e558e6cda19b1c45fadaeb5f\nff8f8d280de66226d2b12aa6a0f050b3\n4504e203b67dd8e473f10e6caaeca56\naf264c02f69566cdf4fb4dee5181bee\n381317c1e4c91e87855931d119219022\ncb30a5a8df3007f6f4fb4dee5181bee\n2a9ad7f4e7ab564a5be2d177e843be47\n411f68beb7d27135d1dcc55e36186e4e\na12abb06ee3aa30ae074517a246f1e65\n77323ba74273cfe017b431cae0dd70ed\n248e0773a2a8d90879ba0a8466ed4e3b\nec3b32347c823f258c2b40655482a651\nfcfc935c2ff7c66c858699aaad4acee4\ndf31fdbbf7e3616b774561c9c1990536\nf5557538f4c6d755d295b24579cf55b8\n919f90e92283eff8febad4f49b26ec52\n44c720c5edf8942798cfd47a860803c5\n978e21e3ac24a83c17b431cae0dd70ed\n41fe326e3decebd1b40f0ac0fb9a650d\n1da4abf560002490391b7a189305050\n162550a8510464d97881b8f7aa99120f\n7c1cf879c84904a4e82028a475156419\n5f9d3dae06acf0e4e93e1127627b834\nc6885d073919e897de9de6d8a1c444be\n40279f85fc80e16edccc47bf0dcf5d3\n7f218ef91e835a90b515d1675be6b5d3\n5cbed790bc24fa22056b4bd5d870b47\nb1ac6f2ba106e8ec2250bf58700b4d8f\n88a00b80d432ed5a577e7964e0284adb\nfd359f64dda4e753870f22c94729669b\n3e4f4c54420bdcae75becd8a4c3f1866\n9d68ef4ac84c552819fb4103277a6b93\n97d009dc14e25080d83393768c99f441\n6152fd8b7b5b10df436455e65b78c0e3\n831955faf1c5eceb433fb7e44afbc69d\n818879b4a23c12bf575f9747ff6fb5e8\nf1fe8c6c1f9f28321739c3c7bfb786a5\n303c1519c700d19299e8bf807e902261\n36d1f0331d7f4ad2cf695c8970a97c29\nea518b89b8511916ac51268fdb437a9e\n8ea569854b8dfc8022b74f7ed4070ae0\n9ad5cab6ff1e45fd48113d3612de043b\ndd1a375db7015e0ad6983f351200ac6a\n7c40c1a2e4476afbaca9cc236210e91\n367cc7ed7b83b7c8fff16555386d173d\n4bc92bee14e81db06c262ba0bee45d20\n8b8b59fc52257bea58e51facd8ce1a25\n4eb3dc26aad9ace8f4fb4dee5181bee\n9f5ae162a075ec741e85d47a2a5461b3\n481885f3ffe14c40665f42dc26fed092\nf123b8da77f6d17e50f9fc0e2c94dd76\n27267209ed320cd271cf429728b349ba\n7c33a6f55768b7acb97ad864945165a1\ne0f7a559a6066203dacc0b57c47fa747\n991803aca7fca258b40f0ac0fb9a650d\n3b412429257bc1c34e437e844fb32a1e\ndd4d12077d16512d8ab9e8dd82b356fd\nb218e59af74f0be4ee9005feeed08b86\n23c874e54f1f9f152d07d128adae16ff\nab131feec69007a42250bf58700b4d8f\n8c942a8e196a9371a782a4379556c7\n93e43734f99c7ca6c42fa56863e48020\nd27d44b023a8ac1a54457eecf7344025\n137fdd05ae4e69c7a68359455a0ffe24\n6bc471eb8f212c9317b431cae0dd70ed\n53f19d1ab0828e3fcd3af3995946ed40\na064a3e9b537fd64818b16b10229b98\n1f239e55de52bb63eefaf3e79e3e3454\n3880be8744dc0ebaadab4c26397edfab\nec79d41034e8deabf4fb4dee5181bee\n87dfa3332d118867d0d69b51a45f7aff\na557114149ae934819420b7669e7265\n146934a1cb852afc1a1a2dbbd3d54d53\n192684f9de3adfe827ee88e8274f281e\n4e4b38efc9345bc3cc543a6b1ba2fd1d\n2af98dcf936576b155f28299c0ff52b7\nb54d0fbc33d125bb7a6d149f6c9151a9\n360d9cc763aa370320768660cf080d12\nca0a5a3a4c5e255b20768660cf080d12\nb1117a83ebf5a4c9c337a931444a5063\n"
  },
  {
    "path": "data/filelists/02828884_train.lst",
    "content": "b625936e3db6af6318df1fa50d2b64c\n17b7a0e3c70dbc3d90a6b1b2b5522960\na6947bdac4ebc97517b431cae0dd70ed\n96ab21db41e4da2d848b05feebb5193c\n838c48b41d513a2dd0992406ba4944f5\n1b0463c11f3cc1b3601104cd2d998272\n7a7ca24c50662907bb808757415d8a76\nab13fb5a4eb5897eaa9fc9f9a28d2718\n2356e0b210f85371f8fa66012789e652\n275249a603cf7f6df064889421ac8911\nc8298f70c094a9fd25d3c528e036a532\n8ed3f1b59a74ac71f155d75bbf62b80\n976636850849c3d6ffd996335233167\n447ad1f23f96171f8d9b3c3ef984857e\n6c1ca36830d54ca5c9736640ccf985f5\n10654ea604644c8eca7ed590d69b9804\nd34b04cb67bf2115c308e7dd57b5111a\n230a85ab57a15b90e074517a246f1e65\n531658856a6347b1f4b6538438a0b930\n83e19abeae8b157d3eb520ff7cd241f0\n6e29c6e045daf2a5d201085e80edb26a\n7cd1d8b686ac0059ad5067eac75a07f7\nb71a0cca7ac86498430b7446f9e1252\n32fe3c383ab3687c94c13f8f78a6d62\nc8802eaffc7e595b2dc11eeca04f912e\n7f418f4737d4a7339702fe80e90cab1c\n94ac417b7ec10bcc6420261eb2dfc717\nbeb4feca82b0082efd60059ad8523f1a\n81df1fcd6e2eec15f231d3622caa1150\n69f724fd745669fcda56795a6fbde1f\nb7d0a6ed347a549b278d386bfa54545\nd8a1d270154b70e2aa1bf88d515bc6b2\na8be828647ebc817abeb67a6e14a6d65\nbc6914d649379349ab3be97afdba4e8d\n7d79d398f56c13eb12185770c6bc35e3\nd7d7a6bada0ba7705fceaa39a8353bde\nd074449720d6b421e44204a7bf1b3ed6\nc2b940127ae286832d07d128adae16ff\n7ddf43b3b160ba10eee5b98d7c69f27\n10cfa696ba2259ccbbba142d6df53ce\nebc20661d9e103334b3c42e318f3affc\nb77813d8b4fb7c606919f8efc25fe2eb\naa88a7bb135e074e2056b4bd5d870b47\nc3531b822720720bf27f378f9a625c3\n9bd9483c8eeeb703cb2a965e75be701c\n7631a05d80484ad6d2b12aa6a0f050b3\n1ea895308f2aa98f966097adcefba56\n26240de6617ea89cc6c4a9ba1f33346c\nca85baab8740ffa198cd58ee93c42c40\n6d9c95a2409a8c90391e4d6c585a697a\n92f20bc7a09dfc1d19420b7669e7265\nd71d9473e08c108d2f210d96281fe860\n7c335945340c674cefacb264ebf1ec75\n602f39fc7534bc4a162bf7725b3fab02\n812665596d6c13b1adeb1694faeea26\n1d94afb9894bf975e76bc197b3a3ffc0\n8f25e1c5977cf1350f0339a8f91fdfe\na11db718438648a0ad5067eac75a07f7\nc1973b3aeb0e54df653ac91111db738b\nb60b9fe791be0f4b1191025061735ea3\n59a3fc2f98cc53cfa13c59d3c05ad9e1\n19f24754ceb9bc948598ced6ad25b3e2\n1480fa8916f31b6d3c77a85180cab6b6\n45c49b9d7cf74ed261477e162a5a4fa4\n8967e65c1541d1874aa7f42ef07f614e\n1d9fd401e86ab773d2b12aa6a0f050b3\n26b3257b2e094083af9ff91a3a02b5aa\n4e3d100672af00842dc02296076d8ee0\nd7eec9ea272f5fc9cb2a965e75be701c\nbe9a174af2b3a463f4fb4dee5181bee\na77b423dbe9f9a34beedb4c8fd29e2d1\n989c5de438050d9d6664ead1964339d\n22af1585e38e4e76ad5067eac75a07f7\n784e9add253365c15a7771962bfe7829\n89d15e96bdf725bfc955e5ed03ef3a2f\ne82eace9941d82f34ff3e3166b80bde9\n84d8530355cafc8fd838ae16242881dc\nd6580bbf1220d39ede270fc3c23d78b\nd63302230b1e358f24e2eef7547426c4\nd21839a3d4b5b30f55f46d55537192b6\nbe0b1cfa18356b5bcb8b82ec2ef44379\n1b77f2fbf17f28e726cd2499b0c05f5a\n71225307ddd5a772dc11eeca04f912e\nb2dc3053a4643c876ae68b11b0aa337e\n874577f61fe70621a1370c1659f8eb45\n4ed2e0a972432881ac3644c4bb0fb64d\n683ddfb4cf9c8f2883f21c04f5e0acd2\ne55f19a6d411966c6bf2e668f01c16f7\nb8eb131fb74aa39af7436fe692c24f3e\n18a3d4fa8abccfa7ff8d4c5a7727a428\n5856737e6fc90bbac1a25f36f85c3fd6\n64010fd77c10672dac3644c4bb0fb64d\n1ebdf871b03ae445f4b6538438a0b930\n76958ab9aa25d309c9eed7651b77d0f\n9663627be99d2e27d2b12aa6a0f050b3\nac4de7e08bc1f024c955e5ed03ef3a2f\n57ded7ea16600342639efb65b33fee62\nb990e2ecb2650ba548e7a83cf3fe93c5\n6b7e64a23106bc6ad81bfa7b5196f847\n61cb827012c745e0ba29d2aa241f8fc2\nad3c4c72cda4dcbd620ea05889322bef\nc57b336bd865c0907b20cb946bceb58f\n6a474cb5a494c1e6ad5067eac75a07f7\n72d098aad341ae4c436455e65b78c0e3\n2cdf972377f30d9485718c281d7fdf61\na5856a7738262b05738e43095496b061\n7a9a3abadf052b3bbc2f63672224bac8\nf1b8f4c4b2dc4a63c2dbf50c3528525\n1695ec4ee4d2e60b50039fe1590fc615\na4c8d232f7943e61af8dca8fa046a737\n7b58a3e5d7f4dddcad1d789f3b2120d0\n6f0723826537010c870f22c94729669b\n14688c10826a81933792407aee21900f\n4fb9527f357f37f99dac46bde4c69ef2\n9da3d1f848bb801c77ec6cec7835f07c\nbb020b7d9c7fca9cad5067eac75a07f7\n2a050ecb95f2a056593ebeeedbff73b\n729c336995af1f96955a1fc933a0f899\n7769891a8af54054bfde7937440ef438\n58e85d628f86aa897bd76190db9f54d7\n6b2caf6470d3dcb58ccde000e771fc1a\n5a6e7c4fb53f27925d3bb412062af8d4\nf5f8c8e5d2de751f63b2acb037dfbcde\n3a85b1fd831c15bbd2b12aa6a0f050b3\n7f7956f11a1fdfd0d81202a54291c0af\n54f33a7cb3621d5ced98cca8f0ccd5f7\n14b63361a48a9fffe4a048c146e8bd43\n80b20fdbf1183f37b7491f8d3451cded\nbbdc34eb50c32ff7c6e70747a64ccaed\nd0fa12d918d97314738e43095496b061\nabc01ead2541d73f97485073216729ca\n38ea17d177c4e872fd07832c54eb7e78\ncdb6ceae0102632fffc6e457221b9271\n60287e7894707cf9fd074351be80913b\nfb2627957d4cda1bda31ead4cf13511a\n5a074a3422d783cbad7b4c3c92e50b84\n8ff44d4849eeb577ad5067eac75a07f7\n4f44a4d47a8911c4f155d75bbf62b80\n826a100b907c3fc4edf84ea98391428\nea4e8de5b98a0463c955e5ed03ef3a2f\n50c0de8fb13d6421dbbc9440457e303e\n9bf1e702777f4f5292694c864c93195e\n7c3314a24702128d19fb4103277a6b93\n9edc26b719dfbd49121811fcf3127a22\n67bee18dec77f305e4af5827e8177766\nc50aa1c3da488573ba5342d638d0c267\n1f4ab55de315d6aa7d77abe0f9632d4\n87113624b71e8961e3e484fe1f0aa4c2\n35ac96f483e073faf515c76790f82ed4\n8d4693c04d684e61a3430e4fb40c91fe\n6b70f11a9baa59ade43f70c0a99fd544\n6d6143cd573920ba7251f1ec40392b93\n1042d723dfc31ce5ec56aed2da084563\n7139a01aa4fd148b7435838026088e5f\nb53a4b74b0c898ab615925cde06141be\n91a39f76430e6cca19420b7669e7265\n18000ed6034007caf4fb4dee5181bee\n11665c5093e85592b340344cde6e80c4\n54547a5cbc7cd402c955e5ed03ef3a2f\nfc3865756db954685896bab37ddebe7\n2edc5c32e3ca7242aa6d4fa3e14dc1ab\n5f3782702eb8f2d421b4fad85a658c\n501e374fc9a9e5c263b2acb037dfbcde\n7c5bebe21d2f9232af268f6180933aa3\n84e0619bd80f5455880e561fa6db53d8\n794573d3e6a2c4ddd845dc43591f551\ne8ed5a53c78744aa600895f6141c10ae\nbee41df71228b870593ebeeedbff73b\n38403c071594b1cc749694da9ceaed25\nf540ad990dbbd600f4fb4dee5181bee\n1b8e304a9c23fd4563b2acb037dfbcde\n4ddee322f191096a54e14b4b3de20526\ndb4f8c9f1c62e421efca4f7cb98e0c29\nb20a0209355ef6ddfe6460d8d9bd16c6\n76e5103be2d6199071998932c708d327\n7836a7015159442980360680c1602c7d\n564474f25a4400c5dc20930e6fc85682\n85034e80317e36d9a6c03a53cf0a14c9\nba8ce85fe8f294929126d89585a68a7d\n4651f5b75533042283bc207d8a5912e3\n65e7b3316245780bb5512a11bb8b2bf4\nc6ccf94d3e512ad510b3ff08c68acccf\n7462c18d6934c5a3a83826e22c7812a6\ne0777bc4f8e3c6db63b2acb037dfbcde\nd3b644f9eb32ec9cbe1fb1bc0addfcca\n15b3111c1611c2e5738e43095496b061\n613e9e33ebb303b0e9e2744369bf17a3\n9e429b7f77646b4ccc8f8e7f17e9d7b6\nc2365f1009f94814ece2872dbe44bfca\n1d6150ae91a07cf6f4fb4dee5181bee\naef0765eabe46794d2b12aa6a0f050b3\ncca18c7f8636606f51f77a6d7299806\nb8f462d89a31e95b777c3ba457301e8c\n7229a4c3b3146f74d838ae16242881dc\n9997397f29b90af470e359f3b1d0f6d1\ne79a991fbf64c2c771dde564c9e207fd\n7b7b25e8ab725feae76bc197b3a3ffc0\n704e4229c7f8a0771015feecec1fadc0\n5ab38425eb09fe33cac2a982f1c2a5b5\n38d4d7313a3698704bbe1e20736de8a2\n675f7c94f5422ebe9e4965f0106e00d9\nc3da9fd354b31502d6eefa796d2f261c\n1998e800a95bfd18edd7d0866499ad97\n6550c93bce51b9b4719088c8e42c6ab\n6d08f3c059e674dfcb2a965e75be701c\n7cc80dbf0cb6f4c6b8134b0fbf68257d\ncbe6101e5199ca2d88c88a4c0a3c4a21\n8450be279a0ea0b555839db883c17775\n8f64075972a1f7f3dc18af6f6bfce3ef\n2220c6ade811851cc13e020d985215e3\n3b7fc97192e483ebb0bf045ee98272fc\n65aa814b10f778b2056b4bd5d870b47\nf0c2b4f3e73873998cbb8bac2032149c\nfd2d7b385db7d186f9e8cd846ef13776\nb57079e504413f02ad5067eac75a07f7\n981fb231709d4d2cfebad4f49b26ec52\nd0c8a593361ab77d5c3d5e3801c5ac29\nffad1499a8bb6c7c19fb4103277a6b93\n7cbde340db4f4ee2cb2a965e75be701c\n783b224ec9a89638736ecce7d21f395e\nddd142d8dcd4e95bf4fb4dee5181bee\n7a3590d0abb36b49593ebeeedbff73b\n186da14db8a38403612d80eb7de76ff\n107eb4f1731b2466780bc2708a85ba9a\ne68f6dfeb7ceea7084663e651cb1f07e\ncf3821cfe979f0214d84fc9b190bb79a\nf133d3165d54e5b227d635628fe95db0\n5b5d3f675f8d0bfdd2b12aa6a0f050b3\ne01c283efd6a0d2120d53ceb96ec7d24\ndf6fd36040a5719662701a18243b45d3\n1e4c1fc02be62675f90c2728303e546a\n722458bd2a0eb811214a15a5a42c49c0\n756108c9b72e95aa57d85583f4ad07cf\n48a9e1be51e751eec4da326c9127fbbf\needc7453ee8b1cff9ca96b2737246fca\ne31212e9f9f5888effd5817f210f277d\n65470e16a5880d4dcb2a965e75be701c\n16ce0976d3bca243e6fe3612af521500\n595e48c492a59d3029404a50338e24e7\n5fa51bc60906cc548270ab5c6ee87257\naf5bec1a8ce2348663b2acb037dfbcde\ncd7689a92e0d39896812e49a5c99d0f3\n77aa33479c2ec92f610c2a68437007d6\nba4ffdf3eed29dea9f8c3d2002c77ddb\n64cf18fe86206f6e1b1a00a31bfed97b\na31ae6a0f58526af2056b4bd5d870b47\n696697545f8c8b9ff26d8e17374f38e2\n6953a491a4c74d42d5cec9a69bf229a3\n72d5a7338dd7ccffd7262b1b986920e7\n86980fcab93e60151f53db693ffe56c5\n8b19ea942987fd72eb753607b9a115b5\n99e759db1e01bc3196ca2abd33a2baef\n3776c500e1654d55c50517751ed5f28c\n9452149917cb2e27f4fb4dee5181bee\n3e16ff75bbe7ed27464e1d2ff524a75b\n644043e43b18d2fb4ae9e8fe36a5d4d7\n73a6a42f5e45b3e7a3879b7d5fe7c612\n6194e1897f8ebb17b40f0ac0fb9a650d\n988d4a7f08e66aa3d42b9650f19dd425\n4d24a0d4ed77db9f4b3c42e318f3affc\n2b065fc9d62f1540ad5067eac75a07f7\n34bbcc05fdaed2e437638a2ced7d0ba\nbd88f333baa6cdc723d95f4309ade30\n5b9261d3ab4192a4cacb7e48ba59c48a\n1d0dae2db37fcb6ab078c101ed808ecf\n5a52ec36c75fd3d87f502c4e1de97042\nd46ca28fe271ef7bc5a208307819a3a1\n442283366e5b20c7a136444fdcc3f2b1\n687efa006864f71d46c340938e2ff1c\n6d1883ed7f0cec103023dc1d1218bb2d\n4bd994f25cd3e1fd2b12aa6a0f050b3\na8a6aed819779d6b19fb4103277a6b93\nc32504d950d54881c3331c70c9cf7624\n24eac2668c9f241fd2b12aa6a0f050b3\n6f2fa876147a970c5acde0d39b1b9dba\nf934f89d094313362056b4bd5d870b47\n9c9aed95c76b4ecd80360680c1602c7d\n607414f33022aff2d2b12aa6a0f050b3\nc97683ce5dcea25ad1d789f3b2120d0\n6c5b4a90068a6b511fcbd85b6ac8926a\n9705540347025dec9c2dcf27153363c7\n807f68d665cf7b0cf4fb4dee5181bee\ne4d1d4714d5dff9b79fb1978bf47fafc\n3ef2e306aadb9f98dd1f70bbc27696f8\n33a40eba7b3382f5653e42b6d3d77b73\na3f987a1f22abe81c01b94c5b8c30315\n32563c1b8b31667bb6695fcbbfeb161b\n5dda4ef4ab9add9411ee8243f54292d6\n6eaa388bfa782df4392580629414747b\n1ffcb829779ad5942056b4bd5d870b47\n348c52c333d7a7953722bf980385c3c3\n36e1592e13b4f5ed569c11df1aea8ca4\n1bf5b1fa54aeec162701a18243b45d3\n802e7f3207fe4306175516c727777db1\n991c84609666c015da34af5fa7da2314\nd6075b23895c7d0880e85c92fa2351f7\ne14c754dab919df2ed647189c2f43b5f\nf3a44bf9a27f1446ae23680cee12f145\nc50e2c7a82ab0362c69be1660283647b\n7df3c8885b22900ec88ad71674956292\n4e3e67fa22620b82056b4bd5d870b47\n153116d4415ee016601104cd2d998272\n5c1dea3aaa34fee26c289bdcae73ee89\ne6f7d84750ac46b260bedcc07a9f285c\n17ebf60b6ba61ae949e6f7df978f3373\n691ca19f8a2324652056b4bd5d870b47\n7ef967a69c03c63dd3a0736b56eaf4aa\n79f02eae8c5b417d756b36dbe53a2798\n84cd6e96a464894af132460d3f8b116\n1147218db46702242056b4bd5d870b47\n16592a1467b7751fbb9faba74eec2c74\n1b9ddee986099bb78880edc6251fa529\n750cec373ccc38a3a3d37e70863d948e\n843cbbdda45de37970709281289b3745\nff71a0d33a3aa440565888a91a05d618\n1b1cffcc9435c559f155d75bbf62b80\n393bc2b638ed33fd201085e80edb26a\n5c76331c2d99f3e2fc9d3ea96a9a9d1\nd1caf5fd22c6c5083892cfdb72a66fb4\n17d8e07c30ff1657d201085e80edb26a\n8b9d37a08dc542f86f4e61e20a3631d1\nc65b1fe1cb4ec230262cc3347c0f3889\n49eda923afb7fd21456cbf78e1e89022\nf4b6526b744290ee5459024571014ce6\n6e045aac2c52c7c556f6ef8b6ca8f4cc\nf3ce6a320a9f2791b1a00a31bfed97b\n9f757c0acb5264f665ba78ad9601cf1b\n1dd7409c95d59d0da192483aa282f8e5\n515716e2bf805c088430b7446f9e1252\n1f19f93fc7d88529ad5067eac75a07f7\nd9432798bd2aa338ad5067eac75a07f7\n3feb79684658db043efeb398bf800e80\n82b8609a6b1dd9c1c1c1ff0fb1d59ad\n1ccab18605adebb15735dec4de5bdaeb\n3b2ef85bafb7669d35382c4d59d1fdb6\nc8a2ce0e65da4b817b11ae648ea92233\n79b66254a33c4a80e68b7becf68bd6d3\n92b9ca91ff514bc90658f68885fd5d0\n71b9976c657291772d07d128adae16ff\nba58fdaae9a5520b421b60451f2f74f3\n779907753183ea36601bea3dca268229\n7cc7a6e8e2aad387a6a7b6e78d8d5bcb\n807b854a7c35379af5779d217e69b7a8\n437167659b0b5a8fce8fba09dd640742\n852d65fcf7abec4a301cd89e7156530e\n319c099e8df5fcae2056b4bd5d870b47\n86341aada547727593ebeeedbff73b\nb2acbc0822c163fb491436340b3b4d18\ne2e528622ff47c32cb2a965e75be701c\n427df0fbd51ba54560f140e76bfa752a\n213e68b2abe5cf24bffe63c069324d61\necd56b7b86c4d94ad1f278e1513f3b7\nd6924af4f2849c8219fb4103277a6b93\n7a8dbe4a1ce3be987962800be79c6e52\na82c14ef1540d3abf4c42dc386169bd6\n28ccec6ab49631e4e0f41fcfea9716c3\nb179e972d13ffde523c05fdd9cf000c0\n55c97131574186c0d4d8765e3910f617\n15fd978b59889cdc30bbd4cddd04c77b\n19aa04605b1b00d0ad5067eac75a07f7\ne27ffabfdcd52e7dfa11d00fb25084c8\n8d1f361eb7a927d8907921e9162f6a43\n7b17313f2c00178b2a4d67a8ec314d2a\n2480c05ad2b4969971a782a4379556c7\n27fd962813feeb26be25fbd47cafc694\n6a3bc6b44ba974b69c0c9824ccd078be\n537a02eff282b33df58bc14da5676759\n916a6ff06a128851ed98cca8f0ccd5f7\n729650e08d4ddb97ed98cca8f0ccd5f7\n702cebffa33a19f019f079d1b712f46f\n18f57a3d41117140ed98cca8f0ccd5f7\n40cee2893781b47f50f9fc0e2c94dd76\n43d40b726c369eaaed98cca8f0ccd5f7\ne25c7c2469135e3fdd3adf3090c701f7\n48f517497df57a2c2056b4bd5d870b47\n3ef52655b95ea7828d1fe8cdc415f4c5\n6a78bd21ec72d396f155d75bbf62b80\nde305de253b7040aa4e9452025f4f1c1\ne0ecbe3b106f94dbd2b12aa6a0f050b3\ncb4389a968257a7dd2b12aa6a0f050b3\n5e0c9babeb535aa4718e797a380b813f\nf2916fe6d5f06678ad5067eac75a07f7\n7f1f873921ae0c63f155d75bbf62b80\n5d9880d63d54b9c442bdc91bf8c0f902\nae1adc589a37317b2056b4bd5d870b47\ne941e1929bdc87d5ad876645af0395fd\nb4584ca6fe22a0be599937922ec198cc\nd2193ef2753921aced98cca8f0ccd5f7\n2e5b449d584725dead5067eac75a07f7\n41e1774c1ad94df4ad5067eac75a07f7\n9d7a51641609efeb54db38a439aab3c3\n7047ed12851201138cc469a51e5a5cff\nf21333a7141e7fbdad5067eac75a07f7\n7aca4c47c6861f2122445e799be0f18\n4eb44cf234eb74dfcb2a965e75be701c\n323f0787810ef9a285a030bdc6cb9884\ndd9d0cfda54dfc30eda82e072f128485\nf8137efb3a8bf9c3d2b12aa6a0f050b3\n9159af619d9125ecf4fb4dee5181bee\n165cd9780f069ff31a546a81aa94b4a3\n4c26d27e41726d87f359d99f906f117a\nd55207728b14e543ad5067eac75a07f7\n324257d878597916bea0f59596aee501\nb90a642198dfd67ba6cf6cbb9f4c2bb\n272162e616a4e8e9ad5067eac75a07f7\n95e97cc6e2f7e2e1d5183890546dc397\n7ba9140b8e416d79601104cd2d998272\n8b4314a159d964fdcb2a965e75be701c\n5f355af51670666cfbf62ed378434fd1\n6798771442c7d473f336cb889fb7c819\n95b375118d800de7ad5067eac75a07f7\n5aa59235750d4dce9953235c64bd990\n31846b186cddba04554672356b2029e9\ncc08d4ced5931ed181faebbdea6bd9be\nabf250a01f526137a035c800c58595d9\n46bae1672b4d146993a6b3a551dcb739\n3a91034ceb33784b562fc21c99684e03\n263f629d385be2b1601104cd2d998272\n80ac9f2999087c868c0a51976aeebbec\n8d9903f1a197ea9af4fb4dee5181bee\n9c7527d5d1fe9047f155d75bbf62b80\ne70d19625546502bed98cca8f0ccd5f7\n170b01ba7fc575aaad5067eac75a07f7\n3a6ac28f247a30146d812a3e2aa98a91\n2fec2d7fdd169e28bb90acb1046227f8\nba363a93cf76f9a12056b4bd5d870b47\n61e3c4fcffab96b9ed98cca8f0ccd5f7\n9f51e1e44bd439f32a0697dbc1a34813\n10a66ce0a6b469d3b2cb19fcedc32ddd\n7536b671103f96e5b12a55dfcc392e26\n78c7cee6016d8dba2056b4bd5d870b47\n5d68fdf84dfdc4809f136629ee03397d\n80d62612758f74d4e8a5546ad55c2a41\n894f41b8e4e3231601104cd2d998272\n797d99a5ca291a2085fcf80cfce883fd\ndfb1e5e85b5892adf155d75bbf62b80\n9d01b7c51223f973f155d75bbf62b80\nc3ce87b94f493cba4ecb12161a6eb47c\n74983e99e7606eb114708467db3d00e2\na7588e794de38fd055a60d8737d1c0e9\n30d3152964e13201520d2a054af1eb24\n7a910c3d6878068ba653610be84c6d81\n12b3daecfb0eb7d2056b4bd5d870b47\n23b5a3c3d7d6057636ebcfdda999d232\n6accdfe97ecfa9952056b4bd5d870b47\nf343599b3eb41ae3f155d75bbf62b80\n9a7847726c939d86c267d7dba6c1d40c\necef040a94ab9e59928f4521e8b299ce\n5aa9a03af76807fa94f937d854219137\n14a73dd6b5d7ef35feea12256ad59f11\n6ccec23049ae42ce2056b4bd5d870b47\n1cbbb30e8e06e932ed98cca8f0ccd5f7\nfbf16da56e709e422056b4bd5d870b47\n2c47d12adb8437ed601104cd2d998272\na451f5d4b01cc78856f6fc4b4ce1db04\n55f637ec7432a97d1d677cb74bd6536a\nc0336b0471ca232bf155d75bbf62b80\ndb663d2bc7e398ad67a2f40ab335eb08\nf6219339c25b42fe81faebbdea6bd9be\n8bf63e9b3df32ff1e1aaa7ea27fc24bf\n3461cf51ad90f09ce3dcb92695647492\n86ab9c42f10767d8eddca7e2450ee088\n3e850a85b7c0f82cad5067eac75a07f7\n9f0a6e7c525c3c53d4d8765e3910f617\nef1a728572967942ad5067eac75a07f7\n5ed9651c928575aab719144d1cd30cfc\n4a5f9a0672cf3a1fad5067eac75a07f7\n9b41191a915c09bc669f4f2ecf8fba0\n58a09612c838e441e7b89654b68b9e5b\nc83b3192c338527a2056b4bd5d870b47\n3250f6d70feb1e77d2b12aa6a0f050b3\n99375af4e13f0b2f50f9fc0e2c94dd76\nc0e755071b467ac433faf2dd5a7ff771\n778ad8517a34927d2056b4bd5d870b47\n9fd13f28f9260e65ad5067eac75a07f7\n2b25e49c58ae0e292056b4bd5d870b47\nbf0b9b88be76628440126a5bcf48fc87\nc8fa692760ba875848d791284650e46d\n338fc00ee5b182181faebbdea6bd9be\n367e5ca5d5791739d4d8765e3910f617\n8325e5496a7ab8abd2b12aa6a0f050b3\n10bb5f29a8654f22ad5067eac75a07f7\n7b7e73cbc821d520f155d75bbf62b80\nac78c8b91417aa5bd2f4120f473fc3e4\n84aa911799cd87b4ad5067eac75a07f7\n5b45d3a1edd81a8f2056b4bd5d870b47\n616833ef9cfdacba583f5c4be082f8f6\n6ec0ed3fc05dc7b7ad5067eac75a07f7\n247227d258f2c239d4d8765e3910f617\n715e78fa6ac13a5ba5d322186fc10e9d\n4f4416c9c53cee10b3a46b931571f116\n7ec901eb9f5204739a6c869309041adb\ncb48fccedaee0e82368bd71100fb3a30\n7792b15f8c598763d2b12aa6a0f050b3\n89326f54e97f65d82056b4bd5d870b47\nc03e7f08edefc17a5b28ac1273e4dac5\n8bcf6b5dc0c19e6cad5067eac75a07f7\ne3fddd1e0ce63b65ad5067eac75a07f7\nc29ae4355b73ad302be4222736443739\n72dfdf42a06d55f61985df8e5a34361\n4cb196a794bb7876f4d63bd79294e117\nab1614b56ea09479d4d8765e3910f617\naec473af77a77008cdb14b1e0ff2c14e\n3a4ab482c4d344eb2fed5f7b90bc9e3c\n32bd91d61ad0824e2729c156998d6717\n9c95f498f2726883bdc8e7e780fbaa21\n969f830a531682cef155d75bbf62b80\n6ee844357bbc5bddd4d8765e3910f617\ne60121b8e4ef137bad5067eac75a07f7\n6ee8866fa7b253e8f4fb4dee5181bee\n648754d5b241b12e4886781cb92ae74e\n1f1f0cb43e65903d1d06bff8f83d7c23\ncc7ab68e97b381eead5067eac75a07f7\n1ee7b919637a2acecb2a965e75be701c\nedac7cf37d1d7a42c79156efeb6d05c4\nebdcd5f64e44ce0cb2a965e75be701c\nf35697e0ec1d35dd357ea07594f25728\nc4c9828b5c0e5db1ad5067eac75a07f7\na7096667d133db73cb2a965e75be701c\n4cd4797320eae6f90dac09d2827796c\n280553e975d6b79fd2b12aa6a0f050b3\n6e683e60075bff408f98ac7ca14e08ed\nbdc3a9776cd0d69b26abe89c4547d5f1\na001663b61ea6accf4fb4dee5181bee\n82b06455e41204e110df635c029b4e63\n13da7d4d1277574c64b7b850ea7b68a\nb859f6e61529db7b195c5c738f050b29\n98de2d75e89789a7d301ec101065cf10\n3c2ffb35d0b3d831e1aab65fbcc9b689\n2f34980683df2b47ad5067eac75a07f7\nb58a0307a86959bd564f6f5de611dfed\n388d83f25e045007efe85e37dd46e84a\n16e3d7f2b75cd67dd2b12aa6a0f050b3\n59cb1f3c7476a5712056b4bd5d870b47\n3824b040bd8906e0f155d75bbf62b80\n6c8d7faebd2ca60ef3b7873c9ffd02fd\n6a7ea728941d3f4f4fb4dee5181bee\n5121a485a7eebfec5674b1bb8d658d39\nfd2394a5f4d05d4c331bc7630c8705e8\n2ab2387e58cfd17ef155d75bbf62b80\ne86a2291d77b8ff9408623dbb138b966\n3e59aa33fcf672b8f4fb4dee5181bee\nfa51b43a7de98d0b7a7695d948d413b6\ndd86f9095341d19af155d75bbf62b80\n188a2c6c2add34399dcab1d3e38b3b70\nbc1261eb081cce07467f6a563eb9f7b2\n738e4ec61f69606bad5067eac75a07f7\n9b7b628bc8cc7463103d45b529610c5c\ncb4c2ef4e926f7c6d4d8765e3910f617\n92d4dbddae3f26772056b4bd5d870b47\n990c56d6ab64279c2056b4bd5d870b47\nf98b9721d2f5b3d7f4f81e1d4b32b45\n371e22e18f8e2fccad5067eac75a07f7\n2cdd25a716ab2ac12056b4bd5d870b47\n86ef2d2a38bde1ebad5067eac75a07f7\ncd08399f8fd8bd3bec6d7b771f3c56c6\n7a7c5ca50411d85f4fb4dee5181bee\n52d8b9703dfcf31f2056b4bd5d870b47\n243ac273ab2262b117b4e4e00788e093\n8256252192c60158c5449cfd4c0f0a4a\n17d085303d4c5121ed98cca8f0ccd5f7\n2c8435941798069d35580c572d992e6\n8c6057a5258539fef155d75bbf62b80\nc2e0cc96c3ae97932997d70e9237dd6b\n1d5d89cc3c83bef056f6fc4b4ce1db04\n1348e440934494f581faebbdea6bd9be\nb2394480df328a98ad5067eac75a07f7\nd290989e0cd0ef7acc546d806a30d5b\n5f8f2518fb850b544bf6fb242f907340\nfb9775e4ada511d7844283a0969502b7\nf2c542ed9750ee4668db2d7865d1f724\n117259de2f72887bad5067eac75a07f7\n5cbffd78e4cefc3038330212e10bdbc0\ncf4075a6207a77fad5067eac75a07f7\n34577ccdcbd46908ed98cca8f0ccd5f7\nd2d4d92195546a1ecac503d0f3cb1d7a\nfc0486ec53630bdbd2b12aa6a0f050b3\nc005e1da092925e5aa3e4791e7582e61\nf5ca026c6cb2b06b56be5749887a17a3\n8141d9182908d7288be87af3b9c7b4c7\n6887f90a83081b56a1ebafc9c1beded8\ndb8f61eb5dab7b26b7710a2fb1bf7a26\n48ea3558db137e87ad5067eac75a07f7\na0ffa64279a8c6f0f155d75bbf62b80\nefd2d13058330e49d7f638b2b2e0564\n5bb40ee2f4893358d4d8765e3910f617\ne929c571972b954981faebbdea6bd9be\nba8ca7cb2d3c265bdf535ea8b5cca766\n5dea347d55e0704d1992408f320d16dc\nf1515c5d78429613e80dd430e11432ff\n70edb39bb2710eebcb2a965e75be701c\n46b3e857b7faab0117f92404d4be5d8\nc79fc66b27a900ac842d08202a7fd76\nd25707cca23ab03ac8d56a266ac05b68\ne66730e74570d0016e90d42867af9dbd\n8ccb3bf7c49c24c0d4d8765e3910f617\n1ef8c3cabd16f7cbf155d75bbf62b80\nf98acd1dbe15f3c02056b4bd5d870b47\ne5af69132cc95133f155d75bbf62b80\n7540e6df58bf00ff13eaf3e3f6d466d9\n25d1aa23abd04998d4d8765e3910f617\n7e029f73e9cd98d2f155d75bbf62b80\nbd56c556d9514db3500cffceffd2bd2b\n287475ec16f5b7477b636e5c31038bd\neec9e185d9596e7ed2b12aa6a0f050b3\n95ee6234a1638f892056b4bd5d870b47\nf958d18643e7dffd99892aa9c57c2870\nc56c65eff860855def9373d49bf935b4\nba8e193569ea391efcd6646576d2dbbc\n7c49749ab1fa402a2056b4bd5d870b47\n575595ab81e657315b3aba3f0877c74f\n496f1d6cdd0a0aa247b74f4d1238a1fd\nc541d59409647408ad5067eac75a07f7\n1dfcce44c2f98d2c81e7c6cfefba0d68\n9bd3bcb173dc1fdd73141c5c444ce860\n96fb3569c007fec46dbc2b0ff6fd8e0c\n85ab526dead09ffd398e68bb81784a80\nbbd82d91a0b7fc12ad5067eac75a07f7\n31615e201e29cc11c7f46e918e672933\n7de0323af143c38bd4d8765e3910f617\ncb81ce8d2558935881faebbdea6bd9be\nb83b544f8536375ed00e4d1c6a5a3a74\ncd385ebe6cd0c1262acc546c71bed8c7\n51c60589bdd1ed73d4d8765e3910f617\nda92767c2e0fe6bad5067eac75a07f7\nc023275b1a68d6432056b4bd5d870b47\n646caeea9d317c9581faebbdea6bd9be\na219234ac9ffe2e012f133bc7efb2111\nf3e13747a652b96bf5fb97c1f9661c61\nd1d433ab6a289a568e95e8a3bb5a538a\na8ea7dc227b632edb88a2574e8fbb52\na2678cebeac0a8c9cb2a965e75be701c\n127dcb2e061ae07f155d75bbf62b80\n667305123da07968d2b12aa6a0f050b3\naad17ac8d5a1ccdfed98cca8f0ccd5f7\n143032619a82710b2056b4bd5d870b47\nca238683133f6a7f38f6614f37ed2984\ne2f79a5d9126b25aed98cca8f0ccd5f7\nb711e64c92fc594c18e830a47a552b39\nae2605e9e8c47cbfad5067eac75a07f7\nc70b020a21a7b2de67f2cdc0901bfcfe\n473655a56670e13dcb2a965e75be701c\n4ec290c73990a82aad5067eac75a07f7\nd9479cb37b782ce5b714422ef873ad34\n29fafe9d3b95e324535e3a87e2212e35\n87783e267a4db70044a8a9dc66c6c095\n578b801e35fd2defd4d8765e3910f617\n5207969c5c38875a6eca3a103e1326ab\n59c914e55665b02cf24b3c783ba45ac1\n7bcb67e77adbb19bed98cca8f0ccd5f7\n34a1d09b3ec2f05b2056b4bd5d870b47\n54c05e235c8d3a4cf09874e0e8a75195\n360d4f846b37b7fb5b9049c85f69b9b4\ne4f68fb5bdfb68e936a9515582552983\n1b40594ce6fa66ca35028a2641239f56\n748e447a5f7a698df155d75bbf62b80\nd7731559d5f485bcd2b12aa6a0f050b3\n84e95910bf6b0b3bb411c6406cd0f9e7\nef018d0bcb3d4c89601104cd2d998272\n3c40692f71e9b773c2c0fe12f0bcb343\ned8401565e207665f155d75bbf62b80\nac477aa3d54d0e06f9e4cc51c75c384e\n1e4eacc8dc69a40e414354bfb060c386\n4526eecda7ff1136ad5067eac75a07f7\n7f67934afc4f95b014bcc66f599f3e46\n909fcd9e329cd49581faebbdea6bd9be\n6718a5b3f89a5d8844c3e89e175ff663\n4b079b2e510fffb8cb2a965e75be701c\n6a9fb118c1501215f6459198cd03dd78\n161bd345833d982325953d410324c2ee\n3ff4401d898b488a601104cd2d998272\n56916be69d224f2a3569fd2bf3d0a41b\nb9535bf9b002a226d4d8765e3910f617\n9596592f31910b9684a9223b0abc0b3\n5f12f2a5d67a1e9fcb2a965e75be701c\n62cc45e9d704d87f155d75bbf62b80\n2cce7ee3c360abbad2b12aa6a0f050b3\n530b1267e70cf134d4d8765e3910f617\n632fbec93961015ccb2a965e75be701c\n26325f047537acd3f155d75bbf62b80\nc20409a88bc98bc8ad5067eac75a07f7\nb2596a0e14772bbad5067eac75a07f7\n9cd6dc2b9d11016c49b3ccbe36f67015\n2e016658e44247bd2056b4bd5d870b47\n78f68a5f65ef88482056b4bd5d870b47\n25f916e08a803ad5067eac75a07f7\n89e2eaeb437cd42f85e40cb3507a0145\n9ef2f740d6dc7cec8d01d636ec229b2\nd06cf2129d36dec7a4f92840428bbcfc\nd1190ac57a48b879413d0cdcf1f63207\ndd56a9259a0eb458f155d75bbf62b80\n759fbe8a3ffa3831a895774ea4e4686b\nc3feda2ac776a972b8962f874d138696\n8d40e13e8d27786b5a2cd0e0d44dc51\n8f6890cfdd98450f4f782ac57aea97b\n107c0b6b32282102493c8fb81dc7c4da\ne7a18e21f877b039f4fb4dee5181bee\nf3ec1b92140e1d80cb2a965e75be701c\n408ef9729c48dd40bb273d6b4d49877f\nab1c843def8b843bed98cca8f0ccd5f7\nc3f3565f0754f1c910917cc30262fb08\n13b28cea086fbf59585a7824ddda249a\n9787c8521ba8d46b5b83c5170da4c6c2\n7a500a01f5ade316ed98cca8f0ccd5f7\nf39401db6cc45a3ae3e15116d1de599a\n599dd0b655adc794ae143c6e852a4f2d\nb2b856a8e25eb566ad5067eac75a07f7\n1167fd85d3dc7c8df4fb4dee5181bee\n20ac7b1b285151789dce72832d2a77e5\nbd40921448838cbcb2a965e75be701c\nf0df158b0694ee1f2056b4bd5d870b47\nb6c745406a599dddad5067eac75a07f7\nba5e47b9a08c33d1ad1f278e1513f3b7\nedec9a4512b98f6f2056b4bd5d870b47\nb788370bde4ecd578a333b44b8649ff\n512511e994adef8c28eac72b6945b61\n2b90bed7e9960ba11e672888e1de63dc\nf1102a11687f3451f4fb4dee5181bee\n21409db44ac9db8b6f1234a0997684f\n3e0694b77418eb25d2b12aa6a0f050b3\n4273dca1b0184024b722a94c1cd50b0\n7d1e56ea7f32d634cb2a965e75be701c\nf197553928fccdd2b12aa6a0f050b3\n31f34cbd9385944181faebbdea6bd9be\n9e5a16d68611c57cb2a965e75be701c\n5c31950da8e2eb09929ce23741435ae\nf136c5515364f62ed98cca8f0ccd5f7\n6ec8ad28c96e49b588c2a8e73c840fb2\n702428ed9e72d74456f6fc4b4ce1db04\ne285e553a6879a5e2056b4bd5d870b47\n835086fd24eb283650f9fc0e2c94dd76\nce663a6430eb9523cb2a965e75be701c\n3b660f1b7f7f41be25ebd1cd0b422e32\nced678ceab87f6b6f4fb4dee5181bee\n41120a43b6b7c93210399d5a44e67cb5\ne3c1e31ca2a0247979dee05d9c95f934\nbdf722327e02a0f0ce7719c693f5802e\n1541e36e8dc2d84caed2201239784a35\n18926a71dd7f17eaac40ad047084c6e6\n2cd9593e8b7f0560d41e37baed87521d\n7e2433a3cd020f53588060c928db75ed\ndbb5cc73da4780feed98cca8f0ccd5f7\n6319038bd4748a03d2b12aa6a0f050b3\n65f6f33358b798892056b4bd5d870b47\nf11c39810334bc2a45bf743eed1481df\na8c8aca72463418581faebbdea6bd9be\n77597f34b5f37c5e7a403ae58647b271\n5a0f0d22870fc83b2056b4bd5d870b47\n146fb2790c11c7f1aaf6c17538652a1d\nfc6c2a011ba0997cdccf03d91dc58d38\nec7c3cb273f857ca785c8f27b37ec031\ncd1077a52f972810cb2a965e75be701c\nc930760585e923cbdeee898eeed8aea9\nb7fd9faa8c78806da9bd18a6c1eb0c1f\n3a93bccaa0b3161afca6ee915b120ce0\nc069553c08631597cb2a965e75be701c\n550b7b205e57c3b2315d0535381646e0\nab891fba7aa43f9df155d75bbf62b80\n9c8aba47e37b1eff155d75bbf62b80\n6d23e04807a5c840307005544420ecd4\n28530ebad05e63d9d9c2d24a3a0c74af\nfe5711dd4a51b102ed98cca8f0ccd5f7\nb4a9481e902d011ced98cca8f0ccd5f7\n38dff7c9994cda58f4273dc8988e4c4\n15cfe15285425b67bc96b70d50d39da4\n117f0ee18ed91ea2d4d8765e3910f617\n895563d304772f50ad5067eac75a07f7\na9aa868b77c3769ba873941124e3356f\n8c95e3b240f590c52056b4bd5d870b47\nf8aa82e7e4c58ce29d31c5ce17cce95d\nf5d5f659c9cda6d0ad5067eac75a07f7\n6d420bec5284eb43ad5067eac75a07f7\n616f9d109968982ced98cca8f0ccd5f7\n1c310698c57a3d378fd6b27be619556b\n8b677cef30fba873240c1f0f1e25335\n7e524d1958ca0348d6abb4efd157f402\n44085381e0708de48ee8b7b79b7a0cdc\nb29e0a7af1f8d51b5c50390adfa8881\nd8fe288f137ccddc1c57d18f89ad9dc3\n2c183b1b94d94d34ad5067eac75a07f7\n82071d0daa90cc15ed98cca8f0ccd5f7\nb6ab037942cf91c0601104cd2d998272\n95096288ad7e0777f155d75bbf62b80\necbc04934735cbc852dff9108cf86a17\n6e77b16c5463bf147756371b6ccc35f2\nad9f6cdc0cab11986bcd8c7601df5d35\ne2be5da815f914f22250bf58700b4d8f\nb2fa26eb323ee7e3697079d6fa35f34\n90a309f7ac2c947f155d75bbf62b80\nf95f1121136052bcd4d8765e3910f617\n36ac567cae9ab205d4cf0f8e55d6cb79\n7be476ad18fc7b40d201085e80edb26a\n6b05c22024088fa92056b4bd5d870b47\n69259c43d80d4815cb2a965e75be701c\n206904737710cfdded98cca8f0ccd5f7\nf57c2037fdae635b29a9b1ca9709749e\nc2c788ec4dc9f467d85a7a4d55e9b869\nae9c8421189f6590809b609a351bc774\n6512b58401c7ea51ad5067eac75a07f7\nbd39e9a5489f89c8d6d3866b78fd4902\nfbed7adcac3217912056b4bd5d870b47\n5b5be5419120ddbcb2a965e75be701c\n3dd362593be47490ad5067eac75a07f7\na31ab48a2b96574b9c3a7877712317b8\n23bb9c45796a28d4154e78d1322f3484\nd3a5134df6cd94e2e8db995f7899d418\n1aa15011153c5d6aa64b59533813e6d6\n6a5ba469761d03c0d60ded25865ac76b\n579e02140aa4c03edd67a519fc8b2283\n582ecc11367a2aca2056b4bd5d870b47\nd406968659ec5ab87d55717abcc7106d\n6f630f561e5ae2a5423efd8c02bd12f7\n1bdfb8796887adf92056b4bd5d870b47\n8e260916773769032b7072d8dd8cf43d\nddb2c6abe41b2063ad5067eac75a07f7\n69ab287543b3a04a7e3b0132a2f87650\n8b98dbc11c5d2fb7601104cd2d998272\n8ad57afa55cebfe0dad433a29cb627ea\n10b43623dbc8ab25ad5067eac75a07f7\n98d2e8dc90f050d52ef1844825af63f2\n6afb907e76102e222056b4bd5d870b47\na968b5d4ba65b1af155d75bbf62b80\nb358c31d1bcab88a26b5e3d0c65cd557\nbe7408f8b03d491145004a22a9d35958\n49704546a313b40781e404e60978a1dc\n745ce171571074decb2a965e75be701c\n50612adf11f22931d2b12aa6a0f050b3\ncad0a0e60708ab662ab293e158725cf0\n5125cca7f42b90b2ad5067eac75a07f7\n38e54a16698453baad5067eac75a07f7\na857f9d4838b885f2056b4bd5d870b47\n8def49409282ccd4d8d8ba9872cc7fb4\n9683f5ef9e032a8aad5067eac75a07f7\n4d1d28d15b19f9101e0e41d96d3d0a78\n4b715a1f611b30768b45d2a1081eca04\n110f199f516657c1473448e3f3f73bc2\n3f50c37f196c541e776d8bc79b9caa2c\nb628ddfe4d99a46021c74c368d3910fb\n135765739f0cb969f155d75bbf62b80\n6a6aba2dd0491b99cb2a965e75be701c\nf213ccec1e4c9dddcb2a965e75be701c\n83e7c29954256530e2c4291819b46f29\ne9a9c499e74c2989d4d8765e3910f617\n3a1915451880215e9bfbe8b02639d1e9\n2d238b5250ab9eb3c55f85313e3bbc89\nae6e6210e0280f24ad5067eac75a07f7\n754250f866079c2083f64069b9b28eab\n6150a9e7c5534dec50cdeffe12411e9e\nf397f583f459134030c983bcaf68f0ab\n9fe85429413af216cb2a965e75be701c\nb272113ac712ca012055e892b9798352\n41d8b7b9480fe27dad5067eac75a07f7\nb9263e32f3d7a9ff81faebbdea6bd9be\n68df3d5c8ef4cb307cd7dbf0f3d6d9cc\n44d2f4786d18667a86d0ad6addf83b07\n8d218bceb517f272f155d75bbf62b80\n122a480cfcdd742650c626aa72455dae\n504ad0bf35b2004dd2b12aa6a0f050b3\n5bccce74947b32e38a92622cf31f5cb9\n6b262d977ea93d23ba6cf6cbb9f4c2bb\n2f815697256fce5a155b270ed8c04b46\n11499e2fe78c7a6d73bc78c81dfbb18\nafaaadcde1146dc2ad5067eac75a07f7\n58eb1f7c59fda8271068f29f0b65163f\n2f2fb3e4f0d9c4fe9f8ae7ed6368949c\nbbf019371f76366b8fb2c146d92deb96\n1d9270d0708fb8a1262707c3863d044\n643cac07025f195750f9fc0e2c94dd76\n38441b4582f29c8cb2a965e75be701c\nd23ca8dad2064c4ad5067eac75a07f7\n40280757b447eb3cf4fb4dee5181bee\n8aabc6c97aeacae7ad5067eac75a07f7\n4be9494c9b476dbbd201085e80edb26a\n7cf981899878464e2056b4bd5d870b47\n4145da9aceda5bcc8b6ad894ae3d111\n3363d17303f69d7fad5067eac75a07f7\n132231578d6084cacb2a965e75be701c\n95db80660b4d979f601104cd2d998272\n7ac31f1da37aca5160ddc468fe733ed1\n21358aae456be5087e03aa42670e6f5e\n302c64b3f9d0e0a3961c690e3d679ac7\na3e6d02075732ca850f9fc0e2c94dd76\n8f99b25df578652ae37d4fb630545e64\n78585e161ee3e39acb2a965e75be701c\na6c3eea17a4b455d75b557dd77720f6d\n8553cd048bbdbc15ad5067eac75a07f7\nddaa540f004e7889d2b12aa6a0f050b3\n35686cf1e7db69d580be56c7b04dd6f0\n4ba9cbd97e4fb17a75e6bc7c944c5642\n4a3feda042d94e85319eead4390b3fcf\n190bc3dfbed8c9ad4e77259b0944c35b\ne7536c6b13e44b9df4fb4dee5181bee\nccc1d51eabbf589ad5067eac75a07f7\n873ce9c208428fd5ed98cca8f0ccd5f7\nb03c1ad073bf95cde9edcfa70ed557a\n7def648b4fd4d1e419eeae21e79bb898\n8d3e69ee2d0168a6d4d8765e3910f617\n9d7185edf0717575a6195e775546b04a\nddab02e0fc2921caf46518fccab79b6f\n5e1ef1b63216952dd2b12aa6a0f050b3\n94a2f3859ed66873d2b12aa6a0f050b3\n273c618c2d24a562ad5067eac75a07f7\nfa1b7b9630c840eff4fb4dee5181bee\n448010b6066f3da3b069944d084e877\nb3c8573a2d8b0a14c347936f40ef6857\n110d24908bd4f49b93d3c9c269b9b9e3\nd03199998c84839a844cd843a27223e5\n1f0c3038d2a9bb391b305ee09b6b9906\na0ee85921d1bcfbd81faebbdea6bd9be\n671cade486e88b3880d14ef4d993c2fa\nc19a1aeba4d90b4aad5067eac75a07f7\n2b529b43c73da6e92056b4bd5d870b47\n2a45727df039318ea46a4c5f3c2363fa\nfec8bee05108531cf7ad31381468cb01\n54650f6fee0e76b8b173657dabb4301e\na2a83603f38cffbbd2b12aa6a0f050b3\nabd7c6ee28e19480a00f752d8c024637\nc67c3e22b0c0f34e7db48c721db3fba4\nc064a0ebde53de5ad5067eac75a07f7\nf7fe4b70b7268f6cc118bd35b5372812\n597cb92a5bfb580eed98cca8f0ccd5f7\neb7cc5c0c5f8a289d2b12aa6a0f050b3\na0cadebde61910df98e8242d4a63e1e5\n38e8a36cdd879fd2d6f2f8f659863647\n702870d836ea3bf32056b4bd5d870b47\n80f9707a7e4a0cc856853064b332a2ae\ned9e22eeb11ee9669fc351f487d31208\n781eb96c0a6ef0b48a51001eb8d95d32\n8c387d5e8ca71237d2b12aa6a0f050b3\n81d5dd006f418712f4fb4dee5181bee\n258a52f3077d3ed56c342cf382162bc7\n77ed241c90b88a189f197237213064cd\ndc4857179ccd30ad5067eac75a07f7\nc2516123957e1cc42283e6cce5561adc\nea892969e4035e0fcb2a965e75be701c\n2f0cd28e2f8cdac16121178eafd002fd\nb1adfb9857fc98fc28fbd1dd69384cf9\n7ab9419e7bfdc80ac51268fdb437a9e\n77c25a03784c8ea4d4d8765e3910f617\n7ecd49fc95f8eafaf4fb4dee5181bee\naa7f8ad0e6108db92056b4bd5d870b47\nd014dd996cb7b8ba4f34c3dabeae093\n6ba417deb22dec19ff8d96709474c16b\n1bace34d2c1dc49b3b5ee89f1f802f5a\nafa7876470b8b7881d3a1f40308f8b8d\nb773f8d5af2c1087cb2a965e75be701c\n23931fb6b6c46da895f577622f465c85\nc9d456bacf459248930524909158355d\nb274f40cccd7e067f155d75bbf62b80\nafe3b299132016512056b4bd5d870b47\nf200a8b5882be096d104df3d337858a6\n3b18e32e6e0c5942d4d8765e3910f617\nb3b8b909ff02f03ead5067eac75a07f7\n6a11450577768f2747d4c7899ba36cd\n4814cb73a71235dbf155d75bbf62b80\n5ab786ce3a18e3a170387839208c8db\n445230afd5a0eda8714b6900bef4d88b\n66304c61af32ca5aad5067eac75a07f7\nb380b855aca5632dad5067eac75a07f7\n11e98db089a66426ad5067eac75a07f7\nc71738e3b314a72411afa9f5eb84a7ae\nb20fb19d75c00c9aad5067eac75a07f7\n39904b25a6d2f13ed4d8765e3910f617\n152617f1e955e8baf4fb4dee5181bee\n66adf182075ea88177f32db2e5e73311\n23672bcfaa06a86764ab399dbd3ef465\ncd49cc9aa0377a298fb953ed1ae534fa\na775a66a362089fdcb2a965e75be701c\n7a89313a148bf1bfcb2a965e75be701c\n3d5cf677f2aa9ad978d4d2afb777f33b\n8e25c33aafaade0ad5067eac75a07f7\n419f4ab8254c97a2056b4bd5d870b47\n49908190a4206224f28732697aa0af57\n516f47d7763d1db5ad55477d55e7af82\n92e7ed09c8d265e5cb2a965e75be701c\n9aafd6c69c331aef535e3a87e2212e35\n44facd26b66e6ec8cf0c8ab22c613984\n4f9e40b167665d793a0ed7b4771fe31\nbb07fac582a687f0828583ad97f853c7\n32b62bb2758b4c7fd2b12aa6a0f050b3\nbacb5f46add42da9a53649a80e5aff8c\neb940ba9c22e793f35f2c389ea4da425\n3db1d3904f058b574a9ca2c84bced0dd\ncd052cd64a9f956428baa2ac864e8e40\n1be83cdaf803fa3b827358da75ee7655\n1809f6221774f1b62d309335a9a8acb8\nec917ab14b06fe402056b4bd5d870b47\n17a7a1a4761e9aa1d4bf2d5f775ffe5e\n6b9d09fcf8998360a36fa9e07c662628\nedf14e0208ac61b570eb586f56eab45\n879fec928fbb6ff36b95ce378e386482\n6c47b6b082cdd9b684370b1677f53d8e\na762de549efd8f2899d9a264095450d7\n9ceab93b37b71c47c62ba64662b2626d\n6eb04c416f0e40565a3c5e32936a202c\n9790980a8ff823287ed9296ee19fa384\n9dde18e7a5ea2416cb2a965e75be701c\n3f2d311ddc3b6c19d4d8765e3910f617\n8b682ef98315c3be21349c674433e602\n9113be55eb8ddd8ead5067eac75a07f7\n22c5aed5cfd1ef997666aea996e0bd15\n48c9e1679ada2949fd8f87bd7d4c2514\n76efe392461139df80ac1d1d1048ad28\naec1143f9e7375846555a8578c9b250\n9c1a78d3846b8137d839166e2dcdb427\n35908dced5e46b32ad5067eac75a07f7\n208b5f58f4f45d63ad5067eac75a07f7\n3eba7b7b2b1d139956f6fc4b4ce1db04\nc327cf2527737f7ef155d75bbf62b80\n5a0468d7c5ce7af6948dd2bc2d391e57\n9dec54fbded3ed1767680982183b294\n9a58d783e013b051d87d55641461d6af\n55da2d1d9250d41b800e0abb10f41d36\n2355964634eba1da35eb9316401353ce\n9891e489f1f4dab52056b4bd5d870b47\n9c69b56c5867afdf5d65e445b951c79a\n76d029e29ac2bb69ad5067eac75a07f7\n2830e62e4c5fc707f155d75bbf62b80\nfefc87e051b4776a2d8a6d5087fd263\n8f24d2e90bbd5855b77d52b64ec9e9af\n27539b0c42068420cb2a965e75be701c\n8d28e56cf5d2bfc8c3deaacdfa0e1e8e\n55619caff40ba259601104cd2d998272\ne0cefe05e1244097b51974a280a6461\n213ddf647e36ce28c933c4a3701f5695\n7bdea368f85d9eb5b47a47f71cb78bc1\n516e288a1f609250d2b12aa6a0f050b3\na03c239b05374a837c8303a5f3977966\n4e512ab638542762d4d8765e3910f617\n50db85e4889831dff155d75bbf62b80\nb19e1c6ab766b09bcb2a965e75be701c\n77fd0def3c3469adf155d75bbf62b80\n3f49fe14826172dff155d75bbf62b80\nfb39d112f22db46616462411d4c2b1b9\n49d0d178976c81f52056b4bd5d870b47\nef1149155829a5175c7dbebb6c018341\nce9c518ef76b4974d56cc378741d37e8\n5ee7a51ae38eda6b26b7fce5a7fdd285\n756c2cbd2d42644052b192b5b7698446\na90115832bb80dc956f6fc4b4ce1db04\n7a0d913c66278596ad5067eac75a07f7\n7262d96c5817ab55ad5067eac75a07f7\na973a401412f5561cb2a965e75be701c\ne01f988796268414ad5067eac75a07f7\n26c48cae38ed374e786f181221f27278\n50184fbabd0ac41acb2a965e75be701c\nea6da848da3f603f81faebbdea6bd9be\n3c90d2eda6fdae1fbe1638d01f5577d9\n665eb42db0c44bdc81faebbdea6bd9be\n43e72408630a790181faebbdea6bd9be\n5cb40adcdfa5247681faebbdea6bd9be\n2902b377edd4b48aa3a0c1cc16d124ad\n22da6d7559e28ac9d2b12aa6a0f050b3\nf2bad48085f087dac95c21b3fa5ebf36\nec4733130fe285d03d23022ce06f940d\ne03e7aab2967929d3fdfe80ff0b57538\n733cae1ea9a85122d41f2c02e27f6d9c\nb3548e858e4fa7e0ff3245f22be4d221\n7abeb2903fa22d0fad974a50533b722\nb73da1e1a2f2f549d4d8765e3910f617\n4769720a332fd899d2b12aa6a0f050b3\nf8651ae6dc32338ff7010d9d85b1eb2b\nbe8fa5b70de21c9ff155d75bbf62b80\n21e7b25522c63209cb2a965e75be701c\n7d67ed4517c1d702ed98cca8f0ccd5f7\n2c76c171562f6bdfd4d8765e3910f617\n3f8d7d662c9cd90bd6abb4efd157f402\n9699995246fd521ca909cd1ba5751669\n99cd1d8970feddbaed98cca8f0ccd5f7\nf8a1b4d4b7813afe55cb90b2d132a49c\n9ff0e30c911ef3a3cb2a965e75be701c\n5bc75cb5c0270e60d2b12aa6a0f050b3\n1093ca7b44ac90cd902e30b4d3d9167d\n928fa92b9f25292f75a9709a8c0e1e6\n7807c68ed9963df7f4fb4dee5181bee\nf2390f9103195622ad5067eac75a07f7\n38d0cc28d4ff1ad0b604d999bdb46442\n690aa4622c4d3246ea1bc0d82403165c\n1b6a5fc808388138cb2a965e75be701c\n359c7abaf431a05181faebbdea6bd9be\n19d52509d16a9c2c81faebbdea6bd9be\n2b6ac3eb1232e99b3cf1509e0eed7683\n9f17577e34237f74c2f16c13e1941c0\n875b1307c76566c8d0d4e85a15f02eb4\nbff5fff9215b5c412056b4bd5d870b47\nc2c0a205bb318031ed98cca8f0ccd5f7\nfc301ae04efc46cfcb2a965e75be701c\n23325f47d2a812351165bc0a3b02b27f\n27c3e5b2656c50f7cb2a965e75be701c\n96d87da2fecf81ddd2b12aa6a0f050b3\n27eb79ddf26fd7ac7898580cb9d16864\n2d1e8858446d1a32d2b12aa6a0f050b3\n54197739c383e3b9ad5067eac75a07f7\n3a7b2f1220e7c13092ccafdeb0ce5a8a\n3a8490a38cd7f21929bffcef22233b9d\n77fac848d4c863b2cb2a965e75be701c\n219c0e465d55e89cad5067eac75a07f7\ncc5d0040931906ae81faebbdea6bd9be\ne30527e054c1bf2ed201085e80edb26a\n276195bc09970fdbec0de4d645145eaf\n682cb02cd40c9fa412b60d5939b55d61\nbe2bcc5a5ddedefa80065a186bd67f86\nab3260f85c28adc82056b4bd5d870b47\nab92e0151866e32a9ab1f232db58cef2\n24f090d8ee565dd1601104cd2d998272\n9897a75c64a369d458c73770090b865\n438f3246c29d69e73b67a26c84477b1a\n913cb50bf5d336238b0239afbed4a626\n210ca657d9a1b85cb2a965e75be701c\nfa259d97f0514af1814acb3be75bdbcf\ne28f8467945b5d526070f6b7b2547ecc\nd3b2e0d1482ead96f4fb4dee5181bee\nb4a8d71b840fa5f7b90be68f49e6aacf\nb5b52ba71f6c3c67ad5067eac75a07f7\n4b495cde98399a83d4d8765e3910f617\n15ed07a6b7265f802056b4bd5d870b47\nb695128faed7cffdad5067eac75a07f7\n32b74d6b08ea4603d2b12aa6a0f050b3\n98af453dfb3b2284cb2a965e75be701c\nc0d3d5f8941c8014ad5067eac75a07f7\nd5ef0f9bb990ffb3b2725423c902ba5d\n49989a15860936d6601104cd2d998272\n238825520fbdda8e6a4265f8860b466f\n8ec231441abe44a05e276f6574cfbdbd\n651141a1e0138b82ba6cf6cbb9f4c2bb\nc311a54150b7c64acb2a965e75be701c\nea577ade393dcaaacb2a965e75be701c\nd3eea79405a0c784f155d75bbf62b80\n45dc4d46a456d36c2056b4bd5d870b47\nca4bb0b150fa55eff3cd1fcb0edd1e8f\n9a3310c20959245b791985eda7619303\n9ddf92e8ab113b77a98ec10fab84d714\n68d603f0483f4f869bd9ce04b3b1fd54\n3b8d16dc796f667af155d75bbf62b80\n9b1ed4bd84562d3f406f2f420f742d6\n450fd49e69534ee6d5032aaea433efa4\ne9491a1e77cb2a65cb6a91bf3956b490\nb09f17c66d25a38cf155d75bbf62b80\nd94b57d9a5d0b3732056b4bd5d870b47\nb997659a319cae6369923f7b2ea9aba\n52c13c1c0812699120f85be7e9edc22b\n2ae355c406b7204e8c5da39cd0403824\nf48b666e87f0c31f43cda5120584006e\nd27d7e667c5ccd70cb2a965e75be701c\nae635fcb688b88c757411f16004b6df\n3b688abcaf09a495c62ae1031b767cea\nce2112fa16725a7aad5067eac75a07f7\ne8db4ae7ddd84627d4d8765e3910f617\n73cc1e9a8f666ad2d2b12aa6a0f050b3\nd73143a767890e26505bbba2c4eee722\n74d4dfa4709ef0b056f6fc4b4ce1db04\n8596664f3d7925cdfdeb515ad63cf4b0\nfa1ab735efa7255c81553c4a57179bef\n1d9fc51fa296bac9a1770107888e7eb8\n941c1bc0f10560a2310d80140e59b9e\n1bb14f4633ad52e3ae944a46a2846086\n26e3a9d86dc09155cb2a965e75be701c\nb8407ab7eeda1d261be4769a83930a08\nf44b93dcbf00d80acb2a965e75be701c\n3ee044d00523169dd4d8765e3910f617\na73601ecef6e3cf9f155d75bbf62b80\nc06a17f2c79d01949c8a0ee9a6d1d4b2\n7dd37767a253f98d56f6fc4b4ce1db04\n9e4391cde5446bded98cca8f0ccd5f7\nadaf1ba4acf51baa601104cd2d998272\nb8ae866a44a272bead5067eac75a07f7\n78ff35f4e229d1306f08940aa2c35d2c\n7e73d9c7082453987b019ecf3e106a55\n66af742be9a0c722b93fc2b66c6b86b6\n8fe23a363bf80c48f155d75bbf62b80\n8d7f97ef9187d6fff4fb4dee5181bee\n78243d42e55bf254d47bd31d526e1987\nf713433b5702975aad5067eac75a07f7\n89cb6473e1b3882af7436fe692c24f3e\n7a5ecec36bcb9eb24c080f2371a3ed2\n26f583c91e815e8fcb2a965e75be701c\n51197dd964f598fdcb2a965e75be701c\ndacfcd3de6bb08e4d2b12aa6a0f050b3\ne807cba7fec6d514bb5d4e2d93fefdc5\n69494ba3ad8569aded98cca8f0ccd5f7\n2fd70e9049377e22d4d8765e3910f617\n5d4fd92c09e3369256f6fc4b4ce1db04\n6ba411c181323fecea2b566ddae9e6f6\n6e27b6fc7769089f4fb4dee5181bee\nfd38474cc1c62274f155d75bbf62b80\ncbe802da10dcae19f155d75bbf62b80\n60757e398b7d51c5c143e86eb74c3988\ne9bf24b026df9624ef9a8aedf51bb497\nc89d4c95f1e7c950a805114916841d69\n7cccf8e8ebd9454fe42c56c78fb88524\neb245de64157afe8ad5067eac75a07f7\n7ac9bc04a2f8e59c7a19c607757a04b2\na2ee6b6eb6f94856c35213a917b76486\nb6410fb9ca3cad2170a97514aa270017\nf100d0524db0b12c2c031fa3f6d7bfc7\nff5c5895622d2123aa979e53c1a67c26\n3ca55ce22b40b8c2ad364a967d96b388\n1a40eaf5919b1b3f3eaa2b95b99dae6\nb9b708af97a57de481f502b2c7b6ba78\n6e84c668dcc028e6864f7d01926c6c64\n84caee0c9f3b03571c56cd199c0bfbf8\n88fa7d07abfcf9f03cbbdb20d4d80207\n137c82020b8dc458eafa2f074f6cbe37\n2e8f1b6cb9b4f568316a315354726289\n2d1e5eeb255e79dcab53bf7fa22f3636\n3b2f0fa67b29b6cd389a52d0b0203298\n943dde2754ddc7822e8ff3556a90169\nd0ae223012be978a49a531253b5beabf\n3d2ee152db78b312e5a8eba5f6050bab\n8893daaecc8c76048e53587ea99de59c\n85bfe701cf6398c69875b72c651247a3\n4a9a7e5b88cc4b79b985467c63dd34d8\n5d9dd008caf920b8c29a08a3db9fbe1\nc2b18cadd355a5f18aaae3d020f5ddf8\nf4a67224c61f79b1733ee41496c73429\n2a80c18fc2b4732bfb7c76304cb719f8\n4b4c1a775f9a49958cd4e3ad2fcaf039\n723138769c7c84eb5006d092e9ad4f03\nf560aae80e66f50585ef4356ea4ff622\n694681de16b492987170f3141eadbf9\nd9de3b770e53a41d5b7bc62e486d578c\n42be414abcd4f66113c01fa2f350f6d\nb6ed4377ece0567c78cf4e63fa47661\ncf24c6b52b12c56ced8d4f003c2a833\n9d4086be72fa427cd2b12aa6a0f050b3\na5befb3443b070f8d2b12aa6a0f050b3\n76976adc8a170036ae23680cee12f145\nec4317837dd247dcd2b12aa6a0f050b3\neb06da40812adaa9542357877f3143f8\n7a4a9c948c54de261dee989d1177ef4e\n2212ad7db1587578d2b12aa6a0f050b3\n6a2c354ed5212c77d2b12aa6a0f050b3\n49ab2a5a9005eab9d2b12aa6a0f050b3\ndc286270b2256b94d2b12aa6a0f050b3\n8a6f07f3d357fbfd2b12aa6a0f050b3\nb6da9b2fefbad3d9693697d8506b1c6d\nbf7342b225f836a9d2b12aa6a0f050b3\n554a52dd42ce558bd2b12aa6a0f050b3\n19bb2f65f3de8f5fbdc7943e19c9bdf7\nb51ae78137662b05d2b12aa6a0f050b3\n70612bccd74c969476c40ae77a98137f\ne3e3c49caf4b1885d661ff085a0f14b7\n961d59d3ba6c7e1bf174129a51bed83\naa27d1ed2ebb8ebdd2b12aa6a0f050b3\n23378697712a8dc2d2b12aa6a0f050b3\nd41ba8cd6a5b1071c1237601d86c1b5b\n229d510bace435811572ee5ddf1b55b\n35e62b9c23928bc57f5df2bc47846a54\nf1252c297d7ad9a47c51ec7d2716b33d\n272a4cf3cfff3eb1e173cee47fbaa88\n608af07bd357d605f155d75bbf62b80\n244955211c2f3b94b821b834431f4e0e\n868d86e47bcf7c9d1dd03d3141d85a03\n5ce636f716f8f11e601104cd2d998272\n5ce845f80b1d407282dde982679cd879\n4b6276df295b3967601104cd2d998272\n7c770e38383d59be279e896561802d26\neeb6784f5812bcebb281680297eb79f2\n7f6db7a3f529949601104cd2d998272\n95eed587c3728d22601104cd2d998272\n3e5f4d788fcc628f442b181d72d9d1e6\nee8c43b1ffc8e8cd7389336cf5b6aec6\nbbb448ee06bd6d83d838ae16242881dc\n2e78dad09566bdcecb2a965e75be701c\n8ad9910699d6a21781faebbdea6bd9be\na06d35db2ddc85e29656036c096710ba\n389f2aa083a7d732f4b6538438a0b930\n49a07e9db250cb5ea17702c02a7c3b1f\ne8403ea994ecb1cf855931d119219022\n5117dd16339a8b943ebaaaea70571daf\n3a271805da4a65e06a5d67b8fcb702fa\na4d107815780161ab7ea82317702e856\nae99771e1f77fd2fa9bdc22a1e02e82\n738f4ce6e01920e72e558e0eb05b86a4\nb7c366d9ad90bb8a847d09fbfad470bc\nda39c2c025a9bd469200298427982555\n31375f94c8739fdbb043c7d18f748c2e\n5cce62b38c0486d74201e10f9a6fb035\n3dec9b1439c42797815b2b467e8e2eac\n6f607a06c0d86895ad5067eac75a07f7\nabddca275435a7b987b6d520ce557b3f\ndbd0698df1623b0391da37ff8bdd2524\na2c53b2490e4151517a6e523c9595e10\n9c8a96bb95a62a6ae6e54a934c4318f1\n91c949736e4887002ea98d69e91ba870\ne0e2dfd6ed0880a6d6421fd2aa576b15\n5be09ade953eaf6ca6910e4922d61aa\n10db917982072df1739680f4e31f35e0\nc36cc90d01f21180c3c8317b7074dc0\n9c1310c5ab89888bd201085e80edb26a\n6d4fad5487a044249dc30bab479ad5d4\nc5625ef76473a5cc7c3efce71c4e8d70\nca04a1b1ff6701f8ad5067eac75a07f7\n12ae14d584758b4ee42c56c78fb88524\na58cb33e8aa8142af155d75bbf62b80\n133d46d90aa8e1742b76566a81e7d67e\n3bbca1223d18e2caad5067eac75a07f7\nf80f3251391f3cfccbfa849e0f7f0b10\n715445f1eb83b477b1eca275bb27199f\na1276733811a864b99cb1d062b75ee73\nf061967a9b5ab9b6fecb38606c52659f\n74a91aa0a8d9f2b5bef71ebb79d44440\nca6a1a938c160036a0f31147c37537e5\n57afec727772346f30bbd4cddd04c77b\nac1b9a34ed8450bb2644d7d4d7ea2c7\n456e373768179bf3f155d75bbf62b80\nd8dbfb0f58a2df0bf1eac5a8cd36b62b\n55ca4cb17b26110d3b160521ef1e85fa\n956be1b39e4bf1b963b2acb037dfbcde\nc3d4204f6f0613b1959f51f2c68b3ef\nf60378083ea9b7fa5e14e00a99d44acb\nd7293ad1c563e0ee318b348b36fba247\n53e3f4b35e8c992e954bfb4cc0842c46\naf06152e440a5224e23bd316353fa056\n8f824b462a2870fd98e0d1738edd4f19\nff7a08ac16701dcec0277fc71766d822\n4cd23aae912b7de019fb4103277a6b93\n28353d39cde416d0ed49e2c2d58fcee1\n6b47fc9f533618719c8ccc4e539799af\n90d6cf58f5e9ba30c175dd3be8577953\nf72eddac559ca6a6a51c26819f8dbb51\n5cb02fdcd0f1cf5d3d06403e6871e4f\n8ff9b4b57eb5a60daed1fc72009b42ac\n8861988f97b2e8c722da8c30c5c6c8ca\n5f21d3b66aa9b62d63b2acb037dfbcde\n9f27ed5d7877a38fd46c340938e2ff1c\nc0840a82cd05765c924bf081da6f024c\nbbe3d0864b95faca48d057884d36455c\n4e43690694133a65e5ef38e098c46afd\n54c5e4961c97527dcb2a965e75be701c\n722f3510b849c950beedb4c8fd29e2d1\n4aa87768e4e9c7639f7aad887e9e880f\n6e166423582d68bfd5b24cafb84903c7\n2c81dd5038d43eb7b11ae648ea92233\n3ecf8f8f3b24350bbd17a7d75b77705d\nba6348031c6f0a795213cec267286d18\n75ba60267a6c36af4b0780126e986ee\n6ef84eb436bf63de8e7865f75f64bf68\n33458d73568cfb62d201085e80edb26a\n98fe81af9b74e4c278d386bfa54545\n2edcb17b897706cf71a782a4379556c7\n9d56087c9f98bf90717cca22daef45e7\n5b4cc3097e79fd316c262ba0bee45d20\naecc04ab28ca258181dea46b799d4f46\nc104f4e4a21ef8d42c29915205c35b65\n2cd4fb6323fa2462edccc47bf0dcf5d3\ne108673170d8f781d40c07d3c15cc681\n6198e40d0055c59fc34a45b74d0027ff\n6466c201a664851de7b89654b68b9e5b\nf3db005b33b9f8916cd47ea628d8cef0\n66aade9f5d8c74ae924bf081da6f024c\nf5d370e9fe5b7452dbbc9440457e303e\n45d52d8c9b100eb54ebf9d56b42b3033\nfce4206a99792d47cfb87ab5efe3dc31\n6daa439badf26355593ebeeedbff73b\nf8dd3c18e0735bb4b2644d7d4d7ea2c7\nd58239c7178651ed1fb7397472fde3e9\n469235b1160c6df1bd44b6fcd3e363b9\nb023f42464e9591867c8e42cd3ac65ef\n410c1c5ae4e9d49f5ebcc146be902492\nef207b78de8277ec42fc59644ef58e22\ne18d11ff6f781d843d2dd82a57bb3bd7\nfaa74f8980fadf504777535b9098089a\n51d51b67faf16d3d2ea98d69e91ba870\n57fc8345fc8667a4d2b12aa6a0f050b3\n5d88fc00adb325e6f3a134eb65b35f7a\n931017bd80aa7a90edccc47bf0dcf5d3\ne223e77b8db4aea17d8864caa856253b\nfd355d06238853c7f0d9805ad6c2059c\n46cfcb7eb682d16d2b12aa6a0f050b3\nb9eb4b3d3ed564142427332fd13e1534\nc33adaafb71b0080582f9c2e887b930c\n66670424b72dc0beefe2ffb03223403f\n716fa6d69c22db83bc6fbe160acb5d0e\ne8ff891162fa20607572046550aace88\nbe9c2b70082503eb352fc7e973ba7787\n323ff904411c3d427c64e9314d548016\n9b15c79ea9ddff8d5065e2a2857d7fb3\n918507f83ae9eb64ad5067eac75a07f7\nc52f48c97868b7dfea8a406c7edcf3b4\nf0daa96d0eb986adcf729faf809733b6\n4ba13b996d6f1d3b286ea987ad5ffa18\neacb2a4fc51d03853c7e5bbf72a5f5ae\nd77f648c6df22a05c6510aa63622330c\n5870d0ad92321f8cad5067eac75a07f7\ndbacfce828f0598ad534c2812395a1c1\n3abf9811f26c9752a9b8d9d3b5cf54cc\n4a19288db84ea192871543ab797c3d2d\ne6063d88a2b192ab56f6fc4b4ce1db04\n6b894c1c57ba921c98d10ca8df5ecbe7\n29aa1d7505e08fb66706998a3e61629\n423a75018428cffd46c340938e2ff1c\n2f8bf1c9a8f70cb0f4fb4dee5181bee\ncedbe77bb857a16d3104206d774d39d1\nf9e7dcaf9b7a9eb3c9befbd10d7e29b\n3a8f4586fbd17e6d56f6fc4b4ce1db04\nbe125cab2902e0e163b2acb037dfbcde\n50cdaa9e33fc853ecb2a965e75be701c\n9920a0a8393494c59ec4bb690ca24962\n2d80f237dfa7e73e5b7bc62e486d578c\nbeece550c6a1bb1cef0add8da8532fa8\n9fc5473602fe0f595896bab37ddebe7\n2f340f2bd55d51e5c8cbe1805e7b8eb\nc63561b50109b27bd4d8765e3910f617\nab5f53ca60521a231aab721727b6a1b4\n2d1dda55020a0c4bad5067eac75a07f7\na37801a9289678201f8b303c0da5108d\n9787be3282d13a159a3528690d225ee1\n94bd6118c10de515d201085e80edb26a\n3e323c2a7e5ea5dcbd4364391061cfa2\n59b1ca3d780ed0381560641bf48464ff\n639dd737961f1806985ef0bf52b97bf5\nd9b39a2a427c17ed43d55fea640906fa\n8a541c1e735e834ad5067eac75a07f7\ndecfee8dff04ef84990a10a82d99ca57\n9d0eb5ca2d849ff01f9ede15ab569b5f\n9795c0ce0679cacdd201085e80edb26a\ncb1ce3240eec3fffd417c7a2ac331601\n35554b4c00816a08b50485c33b91d8c0\n4790c04ee2586772d0768f88bbc39dbc\n9027bc9728f006bb40f0ac0fb9a650d\nf4afba7266031dbbb62b272ea9e18d0a\n593251f67107e6b4db03e4f5c01cf109\n621c4fcded12fff2d07d128adae16ff\n28e12ef0e54e204830bbd4cddd04c77b\n4de8d632bae6b3719e76a83ca837d918\n4d38a3e7f051446a9b5ae2fb66e1e25c\nfd6ae258090bf95b693e50e46681af47\n76463803e8be994e6716685cf333d2c1\nc273ce2890d74ae18cca710901c2e97b\n54239ba1b945460ae4409e4832196128\n9c32648f1412d8a6db6e463bda4c63ae\n71970f9a11b0b5bcd7262b1b986920e7\n31af3758c10b5b1274f1cdda9579594c\n349e1bf46f54c4f267efa971ab69a8e9\na28d0dbb90413692d42b9650f19dd425\nd34e91db39030275fc94591f6f745953\n300781592a3dcc2313e9164feae00e7\n36583be1062e0f48c24b862f5ee36086\n30b57b828f961ca8f002715a08c57858\nb6e3891b9a761300b77f0c4f1c150c3f\n9a2d51fbd6b58048c955e5ed03ef3a2f\nd5bd619acad1bed3d2b12aa6a0f050b3\n634524d6d74142ecd2b12aa6a0f050b3\n23d1c6e2e35cb252bb85b5a298d72ac7\n"
  },
  {
    "path": "data/filelists/02933112_test.lst",
    "content": "115e4c9a9150fe8e99dd23ec22c4943b\n480a381b676003df4da5feafe6f1c8fc\n6b7123a3631583c612de5317fe5b354f\n63397b0df482d51ad7838dc22b16368e\n92aa3075799e275a3fe047712e43e185\n1a51237c9515ad0a4da5feafe6f1c8fc\n298dcf7bd982cf0712de5317fe5b354f\n4b80db7aaf0dff0c4da5feafe6f1c8fc\n8c1cd3c09ffef7efc59350d819542ec7\n140ec01582235e15c59350d819542ec7\n70ef5ad531624a24cb87a43f8f346ada\n59263293983a99d3de650492e45fb14f\n26dcf7a76c89d5aa4da5feafe6f1c8fc\n68bc79caeaf162a7ce5d6e9371bb5c33\n45553c754e1132533fe047712e43e185\ndfe503e6a4a86d4dc59350d819542ec7\n131992dab1550a7aec24cae3e129c189\n7b98e7b25bb83413c59350d819542ec7\na9bfa9259f31ef9fde650492e45fb14f\n6f679ca92bfaca984da5feafe6f1c8fc\n6a910ffe32ae2e575588a2543ef0b0b4\nc060caaa105890d74da5feafe6f1c8fc\n24c781a3aa6310a44da5feafe6f1c8fc\ncc9194f94951cd934da5feafe6f1c8fc\n39db396f57ec698cc59350d819542ec7\n3c2a50e5907b0fb64da5feafe6f1c8fc\n221d442d733de66144221bef0fa3c36b\n5ff7e1be775072e5824662341ce2b233\n24da7fd5e33513814da5feafe6f1c8fc\n886031ff2a514f86c59350d819542ec7\n3649b02bd61a337321730ef9c9d28bd1\n31a7cd3b7990834cde650492e45fb14f\n7d95374a9110157c7d8c689e1315827b\n60ac3a02f8c1116b5588a2543ef0b0b4\n4cee2825142a64acde650492e45fb14f\n467b66a6ed7b3cd24da5feafe6f1c8fc\n190cb7264781df604da5feafe6f1c8fc\n4c99fa08135a52d04c62bee40dcdc539\nf3bc5eb543bd852bb7ea82317702e856\n3b98711b877ae402824662341ce2b233\n2a3a3bf0878f1fa4c59350d819542ec7\nbb741a003e5ff46c59350d819542ec7\n2817480c23e4a106c59350d819542ec7\n13aeab12a8ccdb244da5feafe6f1c8fc\n48ad79b48a76fcec4da5feafe6f1c8fc\n180154895560cd0cc59350d819542ec7\naae9df5536cce166d5532c7891a349ad\n5feaee9848b44d44824662341ce2b233\n1ec5e12f2b5684a24da5feafe6f1c8fc\n2bdedc5d70cda02cc59350d819542ec7\n2cf4888579296377c59350d819542ec7\n15de6a77af2b4fccc59350d819542ec7\n45c91d543ef3c1a829a50a2b3c5e5b6\nbceca165030250f94da5feafe6f1c8fc\n30675877e822626e3fe047712e43e185\nc55eef8d5b4d3db563b3c67777442463\nd3257b1df741d9a099c549327bba1953\n8a7f0dd58fbf14a4c59350d819542ec7\n68f25e77ac6bdea7de650492e45fb14f\nda5d7b5dfa92abdace5d6e9371bb5c33\n23b7a3961eda17df4da5feafe6f1c8fc\n233612a657bbda534da5feafe6f1c8fc\n26a2132b719d226a86d53ab0fe94e911\n19dd35ef180808c38f1735145fdf5c5c\n6f03b6ab474c04a243e5ff23b077c03a\n973023bbf9c6a603c59350d819542ec7\na95f93b9da094471c59350d819542ec7\n7fbd264b7031c399d37a1bae74ee50a2\n1e40a4dfbd78455812de5317fe5b354f\n721c788bb55b083ae8a9bc001231a118\nd8cd6611c5f407cdbe81a9109a782712\nb572114b0944ac203fe047712e43e185\n83bb0c92d3ede1e8c59350d819542ec7\n67616bd629dbf7b3824662341ce2b233\n1cd80ed7f3ab7a5d4da5feafe6f1c8fc\nbc7973150ac25b1ce08dea88cca8641e\n1f336c9e48f1b54686d53ab0fe94e911\n47344f869d6c12e486d53ab0fe94e911\n11ee3844cf96c7194da5feafe6f1c8fc\n5b112266c93a711b824662341ce2b233\nd3ff3bd1badb62c2c59350d819542ec7\n2c6aee97b0325e92de650492e45fb14f\n3a2afbdc240a7f073fe047712e43e185\n1d61ca99924b13fc99dd23ec22c4943b\n90dd9ad1a74e25d53fe047712e43e185\nd7fe270a81b0f21c3fe047712e43e185\n6f56fdbf225247abcd8f3fe9ca2145e1\n29ce2b045bc6111912de5317fe5b354f\n88982fc3cdf5d2b212de5317fe5b354f\n54ea003ba0d36f34da5feafe6f1c8fc\n1252e89db37d786386d53ab0fe94e911\n139aeafbfbdd6bb64da5feafe6f1c8fc\nbdb118e2b6c9f4d712de5317fe5b354f\n1715965e2e1e33e1c59350d819542ec7\n6d448fdac1dc71f9c59350d819542ec7\n1c898677c5b4291c847857e42f50ec6e\n3167991b1c87967ac59350d819542ec7\n36bfa6f0a5897be786d53ab0fe94e911\n1c4e2879669e949e3fe047712e43e185\n3eddbe968ac08030c59350d819542ec7\n1971024c0cac65a824662341ce2b233\n7359539c1b62cf1e29a50a2b3c5e5b6\nea48a2a501942eedde650492e45fb14f\n14dff09acf069b63c59350d819542ec7\n902a342783278a9d824662341ce2b233\n228a83ea767bcab94da5feafe6f1c8fc\nd6242003931d0a27824662341ce2b233\n3cdabe258ed67a144da5feafe6f1c8fc\nd4a7b45abac7a39c59350d819542ec7\nfc5b7d19b1ab1e8bd0504a433b7a549\n5a2de91981d27ba3c59350d819542ec7\n40d4200a071b555c5588a2543ef0b0b4\n4205bc230382f663c59350d819542ec7\n1a9fa73ca819aa994da5feafe6f1c8fc\n203ef2b06c3ad6033fe047712e43e185\n1d973f05e870af4b4da5feafe6f1c8fc\n4298f678b53d370dc59350d819542ec7\n5b08e72cfe785f4912de5317fe5b354f\n21f3c0d4604587b4da5feafe6f1c8fc\n29c6f3ce118576724da5feafe6f1c8fc\na234f5b48a26fe1d12de5317fe5b354f\n285864fbee3a4038178e7d331e641179\nfdf32559c6b7a6643fe047712e43e185\n2ba392a70c40dac7c59350d819542ec7\n85ddbd698b3e7dfec59350d819542ec7\n1676f8b995b976e5824662341ce2b233\n1a1b62a38b2584874c62bee40dcdc539\n55bfa46d7b39f4dcc59350d819542ec7\n2e4184763139ff274da5feafe6f1c8fc\n3d2870c83ad35dfe86d53ab0fe94e911\n12cb11dbb135ca9ac59350d819542ec7\n1b212b67e5eb90f4da5feafe6f1c8fc\n4fd61ff0aa949a4486d53ab0fe94e911\nb0f329dc43af0fbd4da5feafe6f1c8fc\n5294d0d31a33e67912de5317fe5b354f\nb7be75d3cb83457a44221bef0fa3c36b\n4946c14a466fb5094da5feafe6f1c8fc\n6e2beb63c61144f54da5feafe6f1c8fc\nb6c1fd850c5b042c738e43095496b061\n5aee956ff28e337a44221bef0fa3c36b\n134055516ed892913ba1c51b82b58419\n23e3c2a2f61ddb2986d53ab0fe94e911\n6e75ca2b08fe53a344221bef0fa3c36b\n455a583e41579db14da5feafe6f1c8fc\n1aa76e87d7bcf5c0c59350d819542ec7\n6a121783609b4a18824662341ce2b233\n29b2a25804651a34c59350d819542ec7\n47f477a8b67d28028f1735145fdf5c5c\n16bc9f5821d887f2d7838dc22b16368e\na03797c4034be11ac59350d819542ec7\n9d0a9c46bb6768fbd37a1bae74ee50a2\n2bda2392d5715d16c59350d819542ec7\n2b6bd6e0b3c2565839d3717288022c20\n99ff3359d64f1f45ce5d6e9371bb5c33\n90ccd5fbb48ba3bdde650492e45fb14f\n19e444da148930154692707833167ca3\n3115a3a0a61aacac59350d819542ec7\n8cf41a94663c7fe24da5feafe6f1c8fc\n1a4ff09890565843c59350d819542ec7\nf6d2550b82c208b012de5317fe5b354f\n8415b7cd04f981d94692707833167ca3\n839393d59ef6c8cfc59350d819542ec7\nc2ac91973d449b18738e43095496b061\n3076e5d4a8078a0c59350d819542ec7\n1ff28690a2ba31e4da5feafe6f1c8fc\n8382308b895aa93286d53ab0fe94e911\nf939cc4fa30511963fe047712e43e185\n2036aaa68d164c373fe047712e43e185\n5f7e3d694d47fe6cde650492e45fb14f\n56031b004d5306954da5feafe6f1c8fc\n1e25501b8930873129a50a2b3c5e5b6\n7aca460dbd4ef77712de5317fe5b354f\n8dc8d2e0bdf870ec95d0ca3fdb30532a\n30cf0cedd661880e86d53ab0fe94e911\n21224eab2d099f5012de5317fe5b354f\n15d3297d200f8979c59350d819542ec7\n721bd0402e92e339c59350d819542ec7\n70b15dbfed77ad2d4da5feafe6f1c8fc\n9166a54bcb06b6c7c59350d819542ec7\n779cda069c3b6338824662341ce2b233\n98d963a9f353cd026b0f9e3b3feb2454\n583c242abdc4c08e4da5feafe6f1c8fc\n951377627e2fb20f86d53ab0fe94e911\n147e9d3591cb190829a50a2b3c5e5b6\n1fd36ae1d93b6f3fc59350d819542ec7\nc0d58499d2cecf07e1c245f9728d365\n146c3a9cbe3d8f703fe047712e43e185\n23aeb8fdc0d1ed4c4da5feafe6f1c8fc\n6a49166d5852d23044221bef0fa3c36b\nbd55f9190cb5c9ea3fe047712e43e185\n316bd800a04f14f0de650492e45fb14f\n19492e2263ea82e4da5feafe6f1c8fc\n20d00eeac9377d1212de5317fe5b354f\n595999124367c701de650492e45fb14f\n2b3f95e3a1ae1e3f824662341ce2b233\n14864858c05f52ec4da5feafe6f1c8fc\na247a4978888e6403fe047712e43e185\n1566915c8a69d58812de5317fe5b354f\n48b9fbf28fd33df5c59350d819542ec7\nb0f01584cbb37d2ff546596ce7364503\n4068c751d46ca222de650492e45fb14f\nd0421fb0b59291df7eee615e75bc3b77\na08aa6e386cd983c59350d819542ec7\n3cfebf4fdfa1384da5feafe6f1c8fc\n4e62d6e735b8bf2b90071898148dca0e\n68aa1ed740374787de650492e45fb14f\n3c28e4a1a5154ecc59350d819542ec7\nc817934380830ccb4da5feafe6f1c8fc\n12b0773858754105c59350d819542ec7\ncc843a4c31c60dec64cb4ed80bd76aed\n6fcae7f06d9f86b2ce5d6e9371bb5c33\n74c058f9f24fbb524692707833167ca3\nde23f702d6e8232f12de5317fe5b354f\n114b810af4a847ca99dd23ec22c4943b\n7eca681f6174f1ce12de5317fe5b354f\n720ee748eb25f010c59350d819542ec7\n7d9b7a4412d9f373c59350d819542ec7\nc8631f63ec5899a4a84a884e8267301c\n57dc5950f0a7304d4da5feafe6f1c8fc\n1a4d4980bbe2dcf24da5feafe6f1c8fc\nb592fe51cdda66394692707833167ca3\n4c94892ca2cd066e29a50a2b3c5e5b6\n4db0db06f86fe48f4da5feafe6f1c8fc\n403661cbfc8deb029a50a2b3c5e5b6\n9b34b5983bd64409e08dea88cca8641e\n1e694a1848b810ebc59350d819542ec7\n2cd6ee7e592939a9824662341ce2b233\n297684bcd05347cd86d53ab0fe94e911\ne619cf6aa221424cf80ff10f4838c137\nc4d17b681e7f3d8a1e1f137e13140387\n14a093126f5764bcf2792e4b1535c6c3\n8f39d603e733eb58fcbe4e14ff0c4707\n5523a90c230a1d0699bf8547ee35d38a\n643191e8ee56104e424f8f8e828c9ab9\n9dfac0132596ff09b13b0af4c7a59aa0\n11b8fd945de0ee99642f6fb37a230b5e\n6543e0c78675e6eb868fb986bc092533\n181cfc93cd44af805a0e5699b3040a35\nd7762b2997bb9e2aa70a592d6c8c9234\n809d5384f84d55273a11565e5be9cf53\n79a8b5fdd40e1b1d20768660cf080d12\n5366e82cfca7382729f1ce9399524695\na5d193fd45690070b93ba26740e73067\nfc3bb2eda6e061e9b50d0c6a0c254040\n875437f9f2bfdc3feadc9f074ecd1df1\nebc49b9b624dfb55f9913e822d5318\neea67da61b5477c7d4c6910fb477cd67\n422975f531854eeaf36ea1eb6542fe7e\nb28d1c49cfe93a3f79368d1198f406e7\n3bc232700d2ed20b89a68decc32d3e34\ndd6ebb99b2346757da8c66dd9a203cf0\neb2843ff62280f5320768660cf080d12\n5ff47fe4724d0c9320768660cf080d12\n84a374fd72bab291ccff75c3d7aff973\n895de6b9d3e0f1ad11b65536c08c170d\nbd7cae3c39773a4ed0a0c43e4971be14\n3e080e2b2556add4eabad247a05ad956\nc6e91d50e1bb3351a8851b4eb6161973\n9b33a5363695ebc3391e4d6c585a697a\n3b5d7b7fb89b178d50711e66b0db6ed\ndf0f03ac21921f02c868162258053ece\n1055dc4f3f2079f7e6c5cd45aa112726\n353dd8c418146de16c7d1f675f2a04a5\nb06b351b939e279bc5ff6d1af2135fc9\n5e61fc6946ed74c3532e8683617554c4\nc18a4772bcfbb98e85bc264270ae0601\n50c7e5dace1d5dffc6256085755e32ef\n906d1dc1a8e519868cb5d9909aeb1309\nfe8c34a5275804d451f8aaa850306632\nab072b1506cbfd921b7554913e3d38e6\n2544d05396cf1c91bc19762eaa7ba40f\n95ca7e79cf9b51cbb9a0f5d18f1ce54c\n544fbd4d4c1d445498a4820926b2a786\nc89a5482bb756c041d86c17c15247b0\nf0ebc33311b55d6b4e7d60def15dcb8b\nfe5f6a2aab0091438860c69ebde1e4b8\n727a4dbadbb74c33bf1b16662b6673df\neaf341c056c79bec1a2c782fdbf60db6\naa0280a7d959a18930bbd4cddd04c77b\n6e6801ca4a03a1adc672720c52b0e374\nf07668a627a039b87b79156a61ad4c01\n46bb63196198ffa2fc98aa4b97627df6\n6336b5516cc8bd50635469b95109803c\n367044e655cdce1f109be8beeb87a681\na631a1a99b21cd92b87eaf81a9afbbe\n5382680280ef5b57d0b36851d61b6fca\ne72235ca5b0f9b5de485c93908cf58c1\n4b2e20535d3ecd016b7154919b02cbec\n6bf0f5e06cb748bb9671c58246946ed6\n91ac5c074c7d137762646c8cd54d58b4\ndca4c8bdab8bdfe739e1d6694e046e01\na3a6f9e80956ec6f4035f93ab9531db\n8f7a277ae05da76c1bb088904f7cb154\n9f17f45a28d063e7391e4d6c585a697a\n39b51f3a6e8447c3c8a1a154de62786\n4e217d2ef816a08251c4deb11af7079e\n641e64902bb9f6a4aaca4b071fcc002c\na7e9a54cfae053aa20768660cf080d12\ne18f47b52ff3aa2452174f43a416bc6f\nb12fd3c4e5912a7dd8b510632cc84b8c\n92a1e771eb621c14c2a5a06bb7a05e87\n9eada38b3a65963e30bbd4cddd04c77b\nad86354fb5faf1c98a4820926b2a786\n1f0b5514d93f39ebd189eb81471216ad\n3931068c10d0a606ef37b256c10c21e4\n9fbb34244e00b2a9eacb155f400b9076\n3b3a1bfd87c87a184b499a9d711de5a7\ne0393e80702d9a698cbb8bac2032149c\n10c484963692d3c87d40405e5ee68b4f\ne5bd1675d43422bb61706e18472540d6\ne0f6e225c7f88db19ea59510032cbc74\n38def13ea098f098fb266533561ee98a\na49eec529b5c44eaac00fd1150223027\n941289c22ad19099a87002a4eeaf610\n634fe05a380adac585430ccbd2632877\n"
  },
  {
    "path": "data/filelists/02933112_train.lst",
    "content": "6ab14d89360d0a55ff3ea34d08547895\n97cfa011875acc33532e8683617554c4\nd410c925c5e8ebd65b7f630bf166b499\n4b2bedb7014636afd38913e96bbf2a5d\n148638f9a7c72ab55a0e5699b3040a35\naab180818ea51dbc7cd8de3984cc1e94\ne408c939829d0353a6490b68274665e\n2d0d55da9d8de4356e79c14dd16aa04b\nc00edc704ff4b133da27ece6ae88fff\n8316451b3959184963be0260dd648a5e\n84ef04bae77ca17d532e8683617554c4\n37b9ca6c1be7e6e7cddef51ecbec6f95\ndca6f5a582517758eab2bd7322386ffd\n2993b6f0fa043f2744b0bdbb4386e313\n76ee9167548caf224983f386c1ce1710\n1f674f735abb7b1d75869f989849123f\n44d195279a116e347eee615e75bc3b77\n8c60fe0d274ef76f6b983cbae7aad051\nbb9ac4b110f7ed3815dd7d7985e749c1\n4e0cc6a0dbeeb87df51f77a6d7299806\n1a658b76afedb342490ad276cd2af3a4\nc7418e21982dcb508c2f9e4176bfe555\n3b6042e3f223da66200ec3fc5b3ae5f4\n84f34a2d86cd4f0211926054acb73bec\n14e2319299a434b24b8710a3469971b1\n9a0d2ef1f31fee42b022c94235bc8601\n703a95f9e0f51654f51f77a6d7299806\na8725dd0e0eb8d7d492d9da2668ec34c\nd7ec3740a0c67d89f8c3d2002c77ddb\n7941cfe08a5288337a3bc7b2417286c9\n8928e0f1fdd7f107f975e70a1bde427d\n6d30a4d1ed6f4bdbf51f77a6d7299806\n462ee81a089208caf2f140388f79bf7c\n7bdeadcf72ee257dce5d6e9371bb5c33\n962de4481f2844aeba3e7e48acd3a1c6\ndefde3dac0ce562361c0d25e41396e8c\n2537e62a6495a46bc47fc2b7741fa\n9b2759851023fad7dedad3eee47fd556\n70424e9cde5be52e25194f3c5a4f307\n783ba337e5bf328abe81a9109a782712\n7f47c97fbda19b57490ad276cd2af3a4\n528ab24c6afd91c38aaae3d020f5ddf8\n6f2ce914b5d4db81e28993aa4d91dd77\n530d7817abf9b54e73f47577531a0b51\n72048f89b480cd411b17743c18fb63dc\n217d29a61745991f7aa75dfc74adc93f\n962b62d2b3823aff51f77a6d7299806\n737fc2d91572a9032ea98d69e91ba870\n66a82a157f4a1c9a22e05b27cb30bde\n910eec62d3cf0936ce5d6e9371bb5c33\n698debfccb32f7404c62bee40dcdc539\n26eb1d73803b2426ef46cffe4939fce1\n8e897603bc5217174b8710a3469971b1\n2b376f6dfed75d53684b7bc3f8a9aa55\n18a1c4eb2e4b31fce83221ad0d21775\n4caef9af7bd31f195588a2543ef0b0b4\n4dc45b86bdce7d96d37a1bae74ee50a2\n9edead26059cae09e3f7a74e12a274ef\n14590b6bdb425e80d8986c3ed6c52fe2\n86d1c6a6a2278e7e1b17743c18fb63dc\n7e6c0a7c630cce1d4702663c3b3faf8f\n1fe25f0be8d71d6ce2e1a0e8b25f573f\n7a051550f229c9a75588a2543ef0b0b4\n90f66de8ce581ee39aa778fe3a2080af\n8589e65944de365351c41225db8e334\n18798a19664ed14c14038d588fd1342f\n23108a41e40a49f6389b013bdebd5e94\nb74f87f4d4c7da7343638dabe1eb5336\n955a80162f342ab45d64ebd26708751e\n6e5ac40051b3e17b697129c0aef9e5f7\nb6fa01c7e28a4a777024462ecce15220\nd209aaa7fd4035a34c7384dbb75cab0d\ndf509063ec7b78ce8f7d9678498f2295\na8e160457848a8be3bba238110c3df2b\n373fc669fbead0bd1f8d8332ee17945a\nd77dd358b31497aae2f840a8b8c7384c\n8d3d624b37b4803c33110e4a1f22f6dc\n36223972cc8153718cd9445de76e734d\n54cbe81983534dc153b10fab8d9d7b30\n69544db102786237f51f77a6d7299806\nd4f4b5bf712a96b13679ccb6aaef8b00\n3ba62bcd5394d5504c62bee40dcdc539\n21185c06b8eafd1229426a0f57e4d15e\nabbb13b953629109d0b36851d61b6fca\nb31c1b94a2badecf43d2fa0a85ff9354\n2a5535f9e24338c7107bd4405fb99a1b\n4b6c7f81adcc5f7e4b8710a3469971b1\n33445d9d7f166d6c5588a2543ef0b0b4\n7910e29e5285fa1a178e7d331e641179\n9deca642cbf3e4ef49a734174fea032e\n2dbd6cb6a14805297812c3baf25c5bb\n4cede87a6ca6bb876a485daf2a997e28\n91b2bed2f4b87e615164a043915ac8c4\n836fc8edc0414fdd9925b11f2b3f86ba\nd17b46d9ad9378209c68640456c0e\n8b188db0cd8ecb909f076a53721d9427\n1624e80fb20e12741bf2b66b52bf6885\nb56494e8810764286739a7caa0c577bd\n4d79731efe402b0d635469b95109803c\nb404faa639b8600855f46d55537192b6\n9460ebcbd28a8cb7d5a4a04ac21f0578\n26979d498a0425b6f51f77a6d7299806\n1eed828f325b45bf5f960aba13b9c630\n81bef552e83476ad3da27ece6ae88fff\n57041ab17b34eba1f49237e570f62c8f\n61905b24b17eee756aea2f18ee404fd5\n1ef44fc1b4cac21af51fa0238791f5dc\n4b67001c30b3a68be4e346ee2650d150\n2a22566c3bad34a7d0b36851d61b6fca\nca0fd2a5d6aa32945aeac558fa5c869b\nbf57fe6a331137c2abaf316e4a957cb1\n2dddaf7774fd11efe4d4a3bf05a8b705\n2f2e54607ea04be4c93bb8ae72b9da71\n3475657660a798a155590b0eedbb2f18\n721f7a03a70b1107c0b2397831029b54\nb9967857b0419d44e7312e7851dc468c\n504949a3b05dd13e3f7a74e12a274ef\n6d5049bc983aa8b4a805114916841d69\ndd7e681525a458befbfd931924135513\ndfa0bf0f2b48ea33e3a031805ace4a99\n6e6a324c244158325761a0b53ed37cec\nda62a2f330280273896f268d8862011d\n9d2bf81532da5823b69348aaef501740\n533ca24b72a0552c5057ad0f363d6ddd\n3c855f2a52d5e3f63c8d0fdfb1cc2535\na38f20793fbbd3d3ff03fd9a67a9cdfc\n42c3c76c8c8912c61b17743c18fb63dc\ncb6ca53673e681797292641f4348a707\n7e0483b10eb6ae141620773c2aaaa465\n584de35ad1e27820365f491f6e3dbc3f\nd8d2e500860312bf98d5fc0473d00a1c\nac2f35da065a451c72ddb537ecda2719\nb45bae45ccfdd7b9824080f516909671\n275b26f0555e85acf858430284b28022\n4392ad03e7d769a6180dd1b6c5060a26\nab870b99f869186fd523772c66ed5bc5\n7b02f0d94886f66a121859336e292a5d\n9d59bf323b297b327885a2b9445961bb\n6c7a1a40e645c48e9c22f14c4b6aad23\n9a195ea2a21bc7511a4db721d603d852\n216096d5038c86a74c62bee40dcdc539\na46373d86967b3fce9aee4515d4383aa\ndd2325abe32870f5a99e0f0bf1de3bbf\nd7c671ead816afdda2aa7d89ba9aea43\n54f801646e066ce92afc25cef0918375\nb7f1176767b87b235c8607e33463027e\n273bd29d931bd255343edb005e0de5c\na09130501c18c324404449202e2d8881\n7f137684240ee0d62fb11210723490ee\n97902b0e2ce271ae60f16a92a4f24bcd\naa1077aff8bd9e44d8f27b2e727c3511\n7fadf6464f6ba381921dd903dd0b8b17\n5bcb725e26e521364c7384dbb75cab0d\nb184de34d988236464a7317444d5a8d\n61d42e7c7c16b2d53334fb6668ccd834\n676bf8a039a5937eeab2bd7322386ffd\nbfdb60bd61d083536739a7caa0c577bd\n74c692a9018b66592246f58eda789fa1\n9ebf23f2bcb8f334246300e1c662ce6d\nb649e3084819c7847445d25f394949d0\nbfb9eda1e7f92339800f2aaba8549124\n648bdbefbe72c6e596d5fa1ee6ada8d1\n9c8dff9a5f5cc6ab490ad276cd2af3a4\nb8e019587c8157041a3b39b07e4b3d0f\n5d0c82af3d799573eff860318f968925\ndc4affd586bafbc8d45f502ecff9e44f\n4edcf59d45bfff5a5b903ba10d2ec446\n7b97739140eebfefaf8acdb77a4cc720\n7f6d01dfa00872a26cf87f8460db3ae0\na6abf531780014f890a1391b3fdfda26\n975426b49f98bc1b4c62bee40dcdc539\n5c2d14889827e1fc14038d588fd1342f\n63465f2647384da7cf44224546cb0306\n85868e1440bec257a4bc7fdb4c84963\n634a4ad6496e20dbc3ea9e7b2ba79cb1\na64be5342dd3c9f782ef94da039e491f\n8e7dcefda14362f866f6836074ef23fa\na679e4fb660b3751f51f77a6d7299806\nd9e69e6cd318d34380d6227ff9b21190\na8cf3a04f848ff0e4c62bee40dcdc539\na66122ff2d0e4bac6ba14bfd91a75020\n4acadee1dadac64e4b8710a3469971b1\n7f416248bb57f1c0598f1102685df4cd\n4e31ddf3828a40f3cd525309aaf63a44\n227d258c1045acbe9e4965f0106e00d9\n484f3660bf095e6f2b8a1a2aaa466160\n1a7b9b946e797ce59f8c3d2002c77ddb\n2c1af98d2058a8056588620c25b809f9\ncac3d104981b47cd3d113b8340bd5029\n8b0411fcc2d48f9a4b8710a3469971b1\n66c38b5e6d9ad852307776da88d1350f\nac980e21cd4f41eed5076afb08856f4d\n9a24860d7ea8d54f109097154427f779\ncae4ad6aa7d0e49df160c00ab31497df\n88e89b29e8100f1c1bec2e8246842c2a\n52e92f372629cf356e8f1932e45c9faf\n76172d3f487ccc6cf4ab13f4b49ac318\n4a2848db82ae01f7490ad276cd2af3a4\n938d8ae0cdc787107bcb070cc655f13a\n12bb12017516f20d28b780bf7c8edf1d\n6c45346990283b7fa2e244117f013369\nb56505eeac0de779289f8cbfc8541c14\n83412e29d5978b101f6dfedaba98d5f9\n6ecb73ea5a117e3fc6647a321d32ae9a\nd06a1c6dc8a4dcdecb3bcacd97bbd8b8\ndf74daf1f96515bf9b849da658b46825\n8ee0fd1d620ac1ea974523dbdd88cc4e\n2620701a50216dbed0b36851d61b6fca\nbb0255c8582c74c6557f50690310ce8d\n11798e50090b6dcd0b36851d61b6fca\n1b92b53bdb962de337aa612844f43db0\n13dbeeacdabce3b694658a0201ba0367\n8057ca7c19a1457ee3f7a74e12a274ef\nac499f75479d2e372ad490d4d7fae486\n9a0013f4e6a0521b5670497a6e548500\n6098dfbdd0fc78a321e96d7b34bacdcf\n995a40846929e9753da27ece6ae88fff\n187f9c840611133b7fa41e06a7f4a88\n359fbb601801fa9b5588a2543ef0b0b4\nd7e4b6d1d9ae4336ef4e42d70375aed8\n4539b185db32eb4a533276a8c0b1c862\n6aebdfb1622324617eee615e75bc3b77\n382b6f8e93e1f576149dc0f3c5ce899e\n5ba1fc89122c13c5d4a147733422d301\n92ef2c5091a97df18a6e1efe1f5fc0a3\ncdf33719d80e3f1dadecb2bfe4fe7f60\n8093937b9072e92afab6e40cce6926d7\n8f55954a0b07a4b2bf64ff63662d244b\n39f7a4eb09dd695d46dbdd6b5b884b3a\n5217e7aa71d06df2921dd903dd0b8b17\ndc4e9bf3eaadf2544c62bee40dcdc539\n8fd43ffcc981f6eb14038d588fd1342f\n586cd9ce3d22685f2280e8623aad43f4\nbe1978696eddc1e980a88936375f2ef4\n860929843ad9e7e16ff961d84ac7046a\n37fbc4e7c9e46b602b5631520b7d94fe\n43ed2ac5e1836f5ef51f77a6d7299806\n429536832f2f4e1abfbd6f1ce8dfb216\n5edc6766196953a28f62bdf4e9082924\nc54828598efd80d78542f96306060db4\n90e6262b1713ab09fa3b6936d7879478\n964258d29263afdae76f0f0566cf10f2\n9304e9ad9853d1caf760390d600fe7fa\n7650fd61f3a162397ee0cb5488055ac\n2a3023853ebfeff5eb0fe7d6b5545a1a\n71aaeb4dc7a7d41ef51f77a6d7299806\n958fa3ccebcaa8246c4866b1c92b8a35\nba5e1671d26af2763c6c38b12db4d8f3\nd4e6002f0114461df879b7d55192442a\nac11c66661c8f95825b0a60e00f47d7d\n45342795c9bf86d94b8710a3469971b1\n3d21c18153474a0acf004563556ddb36\n493593c78a647030cbb5746221d658f3\n71d240b4e2e79be96a001de88d8cd8d9\n9b28e4f5c66daae45f29768b6bb620cb\n72105548b0e01be8659e37b49210f361\na0eb46b125a99e26473aef508bd8614e\n50f0ea68b77810121fbac718728a36d\n464e34455b49aa5c824080f516909671\nade25be3b1ee38bff51f77a6d7299806\n7822a30ec2e5c57f59f8e31ca87c470e\n33c47c4c9afeea5a4c62bee40dcdc539\nb50c25e6b5447714e90f8ac2c1271ce3\n230a987c4ff5f673921dd903dd0b8b17\nb99b7673b0927283b1732c7d45a02ba0\na21e3a21401f889defacb264ebf1ec75\n8bd6e4ce15468e1ad6eefa796d2f261c\nc5116cb158a5b4e6a0f23466c3c25e2e\nd68b1b0c95408b95380188eb80c957bc\n4ac617dbce5ab494985850bfaa8d58e8\n595a8444c362be66b8803f6649e6cb9b\nd917ca3f60dce05aaf31a22c7bed177d\nb9fd0cb66675dcc87c9ecef5753df626\n1ded292e60cf7f11178e7d331e641179\n78937816b70f990d8fe14b5c9bc18491\n6c2762c2c95d7a2063b3c67777442463\n7ed5c429313f20e079bb09dc5605a57\n283bf988df376b9786ac7f2dceaa530\n4e89985989c6a1936aedbd2a02b96953\n50492ac55ad27122e8990fccb12f2c29\n3724c3633a0db0c260a7085510f65cd6\n9a688545112c2650ca703e831bf56f93\nc7165635f2288945585ed17f54616d23\n30b75567780d84638ac5263758737a81\n4d690cd9d3b41f46ce5d6e9371bb5c33\n46304273699efb534b8710a3469971b1\ne47b9d0905d05d656fa63795f94c4d8c\nb30ee0cf13247fa7f51f77a6d7299806\n3d326cbd820a49443a9bf8c718fc345e\nbb5c331b32e39d0d3ec45bd2bc895504\n37d41aa1ab8e7318534f016fc3878f48\n85f41119ca2bbde1dc1f6c4cdb4bb9b3\n646fa7efaaef21a41d20b5ad5ef1cb1b\n4b06417d98fabe3b4c62bee40dcdc539\n7ef036a41e1b9e2aac00fd1150223027\n7415fc8bf90b3696bc08b7cef3268bb\nbbbd4de3e7ab25ad80d6227ff9b21190\ne22f10f551cac7fc6cb99ff1a702c4e9\n283fed24177526de7eee615e75bc3b77\n267545b2c6ec6ee1f51f77a6d7299806\n94cc8a8df8c78f5e14038d588fd1342f\nca15dd33a276b636d1fef881bd33f613\n452ef94b9cbd238dd869694b17a45f49\nd5058b014492f748220c986172788383\n3824d4b03e74afe0743d4e4333af43e6\nb56d8e21ac71f5d184296c7704cc40e8\nd0aee9e36e73a88a11fc2b865c2a185b\na81a218a06fa2cbabc78261b35f7ff55\nca89804bd77f770c4c62bee40dcdc539\nc4db384855e345009f8c3d2002c77ddb\n98003a902555e73adc6a693174c70feb\nd5c60b873643f0e99f0825ef57cf78df\n55b945bcc9d3525be005c5c244da3c48\n8d9fd58227bc92e41f3980612faf041b\nb399f7819e05c8bd492d9da2668ec34c\n9c87e3b439c20e177f1513678f5ee92\nca3c48798200a14050e21024808d3b59\n7dac6c932ca4f2fbb1cbe768f98549bf\nc6abd725ec744274b8710a3469971b1\n760d765845cfb99b770ba9dfcb1fabed\nbfec781e562e1dde3eec26c23f5bc80b\n6219b46946f62474c62bee40dcdc539\nde30133b2550826647d37c7945792fff\n62d67406fb239e21533276a8c0b1c862\n56253642219df29c37d43e094da89ace\n687a33b0fd4a906dc2185cc0ca1b306b\nd30e98009559150df27756ab62184cd0\n9cec9c8b65ec9e4f4c62bee40dcdc539\n97ff4614190d8cdfff05fff9845ac53e\n1411cbedcc428f73b76e29c9c43bc7aa\n8fcfa31d1df6e8ec9c2edb56a98b4be7\n426f7850e60a5447616fb9ab42452112\n1b32d878eeb305e45588a2543ef0b0b4\n3775c10b5502d12a1190e285a2cbc9c\n7ef23a05ff56687087cffb2975eab062\n2cb76d6aaac3c677bb60e56ad1645b95\n6478d877795d2214f51f77a6d7299806\na8a4fbca233fbadb7ef0119f8dd1f40b\n1ae6d530ee86ee9a4d87481e09b681b3\nb235be00006f3c03e6513d84422cefc4\n28e7fd7a7a5ee8787d3ced6148bd0a15\n76fa5df01e82242c684b7bc3f8a9aa55\n6db5a05080eb2480f863ead9331efd45\n6a36134591ec32cd37c7771ad8a91690\n36bd3f2daa4ed31a921dd903dd0b8b17\n9c87aebafdb4830ba5dc3fef8d22887b\n7d22aa2a9ce589b37ca94e8674788609\na5f28af83eb1dfbc3ffd072b23bde58\n2cfa88eb16cfd27b921dd903dd0b8b17\n321eb85037156544799b0b9a0d4a12cf\n4d3308cc92ffdab432b72c6a3d82ffd6\nba17ef05393844dfcb7105765410e2d6\n1ad4c572e0fd6a576e1e9a13188ab4bb\nc9576be714b6cf2d219113a79b8c092d\n131072b0a226f05f51f77a6d7299806\n90c2b07e831f5e7fc75178c2e93f5b68\nb7dc1e9a3949991747d7c2aae1e5c61\ne2de47fd0e63a280490ad276cd2af3a4\nb154cb1a8dedb14345ef69cff7e6d57d\n9ba333215be4d6654c62bee40dcdc539\n225905a8841620d7f6fe1e625c287cfa\nb6ec38384c0904a666023b6076341c23\n6059f5f009c40b814702663c3b3faf8f\nce9c5aa7a4016f138c2f9e4176bfe555\nbd89eb4a7407f07e54d8afaf6caac97c\nda57e1d30424771a14c06184923f6962\n54dfbf6333cf06dd652b6926f989dd09\n45039a5ac0912f8523d871b44977a702\n917de5653765673f8c2611a5a36e83b4\n9623560560cb59a3d37a1bae74ee50a2\n5906bfad8f6d794f490ad276cd2af3a4\n3d5ef34ce469b11c5af597c14b093f6\n53d1e4d3a815840b7753393bcfa5f775\naca4241639feb8f0921dd903dd0b8b17\n5ec805e8599196746be771595eade0e3\n3084dcbd0a28399170ad2e9733c71638\n1c87c14a44982206df3a1b0d597ce76e\n7b927d55b634c4aa178e7d331e641179\n9b1175f3e0b7f0938ab7e957399ebbf0\nb12af552392f92b476e9713f57a5fcb6\n2f12c90e2001a0bfd7bd133fd14c164d\n868509e96bb859bbfd5b2dc3df6521d5\n60d7e8aba1f692a8c2185cc0ca1b306b\na32e351352e1053ad124fd2a448c2915\nc01ecf4426f58beec3c7482d23c2379\nacba82ca76cb0201774bc00c294ec5e4\ne1ff64e53154ccfaf51f77a6d7299806\nb38a8896aa33692098605fee62c12dfb\n3f668a006192f1afffcdb54593f6ab3d\nc95634c0a44d6596e71fb4d3a412f2d0\n444ff46c1275b83fefead98a255f706f\n60508a8437c09eb2247353095dc395a2\n3efeb00eeba8a6fa2db3e9b673557fcd\n192caea21a57389265dbe89d2f371f01\n9935a1e91ef08470569e2e0d2caa039\n7f50a6bb1827b9f582bfcd34215ccfc7\n82f7946adba23f5f1c6beaa592f1b2c5\nd599d283cc1d2615a7547743355554a7\n1ee58b9b772b8807f51f77a6d7299806\nb1d8cd17d6c936392caaf8842dbb8ac2\n6ec7c811025a30a2e3a031805ace4a99\n265521e0fc7a663259f8e31ca87c470e\n27e65f34c3b8dd7f490ad276cd2af3a4\n4b006b7a2215db3d284f6213916dba67\n46a618f995c1019b15dd7d7985e749c1\n22d10cc8165d310a15dd7d7985e749c1\n92e421ce25931b6da5e3e028709e0474\n984c969b9948fea738e43095496b061\n90b901d37c751841c93205b4771d5663\nc4fc9ac6e45a8ebc90546f5d45015351\n34bc619e8ab3c0d2a93db6e4c0c75191\n9e53d5b34c4b403841b765d3dbd065f7\n484aac3c3f3ee4aadfcedefd655bc18c\n927ac18cb336cfe3df289a3ea5d3a440\nb34ed11766d80175f40dbe27bdacff57\n56676ff1d9f8a1e94c61a7cce317bfb7\n6ba512e07979da6ba3f4b1457e62c2b2\n626bba505f03233ef51f77a6d7299806\n13a42286f65c8b559f8c3d2002c77ddb\nd3829c7b8afd0d2ef51f77a6d7299806\nd4fe9416de5e2a95b022c94235bc8601\ndf55c6665781293cbe53b3b9f1274310\ncb4234b5106ee84dfba786d6c256035b\n9c245f01f94ae038413b3ddc4f2d9a06\nb6b378a05bf6982b70c33714b19283df\n8fe70b11448dfeef2369c46027bce7af\n6c7a2ca9ef6cf7a3ef4e42d70375aed8\n1175801334a9e410df3a1b0d597ce76e\n789ee42d2fc0c5e088c59e12e565eb6c\n9e1fb93dc979f8fb5f9734700aefae4e\n8ddd7f1e19ff809abe81a9109a782712\nac536462e72dea3211fc2b865c2a185b\n29dcadb19ddb448ad98e761e6d91dfc8\n6723be3b8435e27bb6146c7a77e1b943\n42689fe4a481168276e9713f57a5fcb6\n3d8183c2f6c0003bc59350d819542ec7\n786566b66299405a4da5feafe6f1c8fc\n606d50b144d8ca164da5feafe6f1c8fc\n98d2b95fc4f59c426ba8b3973e201d74\n4e02dea48a1bed6bc59350d819542ec7\nb2b89d3ec5918f69c59350d819542ec7\n4a4ae602159a711c824662341ce2b233\n14ed803c2251dfc1ec451f73f474981c\n315f29b2492f66a9c59350d819542ec7\n1e91ab0d6eb0053ac59350d819542ec7\n17d25c26485edcf94da5feafe6f1c8fc\n17ba4ef76444e74b4da5feafe6f1c8fc\n198cbe57b01bad9dc59350d819542ec7\n21ae39cf6ba8557f4da5feafe6f1c8fc\n1af4a1dfa4f94cd44da5feafe6f1c8fc\n2441395102a132354da5feafe6f1c8fc\n3b307c9b473270a1c59350d819542ec7\n19c79a42f68d7d444da5feafe6f1c8fc\n2cf613433894022dc59350d819542ec7\n33ec57af7f648994da5feafe6f1c8fc\n2950d1baed4dbd78c59350d819542ec7\n282f296a666fb63dc59350d819542ec7\n10c14b0cb76f87584da5feafe6f1c8fc\n19a0a48b2b908dafc59350d819542ec7\n4ae5df17829fb50799dd23ec22c4943b\n8a3f6cd19f3f92fe7242f2b1500945dd\nd7fe9a6bf2c5ad924c62bee40dcdc539\n27cfe222aec3463bc59350d819542ec7\n83a9e08664eeec09c59350d819542ec7\n2862558059dd584c59350d819542ec7\n152dd0a74ed08ef8c59350d819542ec7\n4c8e95fe5fdbb125c59350d819542ec7\n1548461b13adc0d0c59350d819542ec7\n56625ccb6e7dc3fdc59350d819542ec7\n1caaaa5c1da4dd2dc59350d819542ec7\n82c05fe4890a7f5112de5317fe5b354f\n4073ca6ce52b5d65ce5d6e9371bb5c33\n170be0087472182bc59350d819542ec7\n1fc8231114fa42a7c59350d819542ec7\n5413dbc1844cbed099dd23ec22c4943b\nd69d9de0c79ac6a9c59350d819542ec7\nc4802a2901dcd6e84da5feafe6f1c8fc\n5799c06f71bf6b88c59350d819542ec7\nc59d2a61caf94a97c59350d819542ec7\n29c7cd661bce3e50c59350d819542ec7\n247dfd279585b1b0c59350d819542ec7\n1e200d34c5555634c59350d819542ec7\n181716a7a34f2708c59350d819542ec7\n8e9a51408589448bc59350d819542ec7\n95bda55d633ca1824da5feafe6f1c8fc\n48e0fa8a06a163014da5feafe6f1c8fc\n46e31ba5963a89fac59350d819542ec7\nba6599d00e879e11c59350d819542ec7\n1257abde355da7ebc59350d819542ec7\n88fd3b8aa4280302c59350d819542ec7\n600d06bd779fbedfce5d6e9371bb5c33\n61b9d7c12ba7aed4c59350d819542ec7\n21eb0039185dd955c59350d819542ec7\n1834778d026108e0ce5d6e9371bb5c33\n688102337377c19d1d860ee2ad2a42e1\nc4fd6d64caa1e371c59350d819542ec7\n8f453f19fa9396a7824662341ce2b233\n1de9b71f35b51b56c59350d819542ec7\n494fd6deccdfb5cd5051fbeeb2dff27f\n10b54fe832a00c3ec59350d819542ec7\n23b8cec330bc7699c59350d819542ec7\n9bcfb450ed3046a74da5feafe6f1c8fc\n38c9f4bc9c5583d7824662341ce2b233\na01619556405ba3f2633ff66beb9cf31\n2175d15f93051f0bc59350d819542ec7\n429638b99d096c89c59350d819542ec7\n6bd87f32df22ffe2854a6619c08bff6d\n56f7c9a029b6b40d12de5317fe5b354f\n2d7bad601f84c83686d53ab0fe94e911\n48555a476cfcd222c59350d819542ec7\n40df2ce55ea8f002c59350d819542ec7\n21d4a168aa6fd6c74da5feafe6f1c8fc\n818043d8e0cc040cc59350d819542ec7\n28bd3151d50a4d78c59350d819542ec7\n295502bcb6d0c0f5c59350d819542ec7\n9a7263ce1cb720d7c59350d819542ec7\n3700aafc0160b162c59350d819542ec7\n3106e06eb594238c59350d819542ec7\n39d9512e482ef253c59350d819542ec7\nb4e35d962847fb8e86d53ab0fe94e911\n1819a4e03dd67e6c59350d819542ec7\n2d13507d53d201cfc59350d819542ec7\n158134028cc664b5c59350d819542ec7\n9dcc7002210e6660824662341ce2b233\n8914b82447db43a8c59350d819542ec7\n1aeff9aef2610ee1c59350d819542ec7\nc48151eb47f0e4ffc59350d819542ec7\n47b069b828d9fae54692707833167ca3\n14b5e16ba851e17ac59350d819542ec7\n76271327a3224e56c59350d819542ec7\nc07a52687cad81a4824662341ce2b233\n2b80c8d68550986bc59350d819542ec7\naee149ff795d5a7ac59350d819542ec7\n20d92bdc128be29c59350d819542ec7\n68257aab07479c64854a6619c08bff6d\n123994ddd751ef58c59350d819542ec7\n36d62d9dcba0e3ec4da5feafe6f1c8fc\n28195efc838cbb6a4da5feafe6f1c8fc\n9d75f1513c57e433c8f56fd282ce5ea1\n14c527e2b76f8942c59350d819542ec7\n636ca387c40fa8adc59350d819542ec7\nadb7c7229f4871c2c59350d819542ec7\n1222c37fc0c37124824662341ce2b233\n22e77a41cc388839824662341ce2b233\n3a0492e3892bb29f12de5317fe5b354f\n2bb2456b272a23dc59350d819542ec7\naa3e41a51b1aa79a4da5feafe6f1c8fc\n29832b9c3d644c744da5feafe6f1c8fc\n2fff20fe8b4b4a6cc59350d819542ec7\n391d1f98ffc6f8cf4da5feafe6f1c8fc\n920b27c2d3c83a0c59350d819542ec7\n1e73a722906872b64da5feafe6f1c8fc\n147eb60e7a6cadde4da5feafe6f1c8fc\n253c1fd3743c47234da5feafe6f1c8fc\n2f0a56c30e384642c59350d819542ec7\n29b34b5121639a65c59350d819542ec7\n953f545f33716fd01d860ee2ad2a42e1\nc28ae120a2d2829e50e9662c8e47fff\n77d1cf70e480af7e6a400d4015c42de\n365b6a92fc2f46294da5feafe6f1c8fc\n4d3df5ede83cd26e661673811de66400\n41472c96b430a1c44f03bfce55719739\naac3c6db20d3248579cea75b38cb7ce\na0dfc5cd7e2331e6166ddaef2c2c61ae\n87c85956b41a7fc541d86c17c15247b0\n4bda28b19b2f6f865cd4f7d5b0608a\n72d950ea1c029bf2369c46027bce7af\n154f41bbdd20cd9d8430b7446f9e1252\nd894ca00249da3fbecbb1f16dced7a99\nc7dd92386b9d18bac502b42dc3551a09\n36853ef4167300c86e5b9257c4084ca2\n1258a7bae01e349fa320e34dad7c78bd\nb29f2d0d278e938914038d588fd1342f\n3735e7c2bdcdcd7eebf9241bfabf12f1\na69a97674b732b6e951c1fffab4f5807\n94d10abadfa0d88bf51f77a6d7299806\n4f168576511489f91439869d172d3897\nb64d237b3718134b6e5b9257c4084ca2\n8504af8851175efd253d6f91951c4f58\n1cf9f1ead192b6c9824662341ce2b233\n8714a704af18d44b11a97ee9284a563\n23637357c4e5efb653c80c0a3ef7382\n5d765603dfb0f151e367f8f62a7e9398\n62e1a04718635c981c7fe5be55ca5cfd\n4d9152d6df9883529c75eb4326997fae\nbd0388dc8384961ccf004563556ddb36\n55d1668a7d33f8ebc0b2397831029b54\nb29de5206eb16c146ec91c2f4565a1ff\n31de44d559904485f51f77a6d7299806\nb12c3a046c326ca1d9b228d02c3319a3\nc129e7434b33f3cf1b17743c18fb63dc\nab096629bed6f8e0f51f77a6d7299806\nb278c93f18480b362ea98d69e91ba870\n4de45ae952657a45330a170e9ceed373\n8a758b29a751764d14038d588fd1342f\n6ff13af4d409fd25c3c22f38f0cbdf9f\n3297041a1a8de1d3d0f3f1f5f6accdb1\nd6523ff3e0acb768490ad276cd2af3a4\nb7a9d8b469cb06037824b732b006daaa\nda3a71168ea830dcc82d9accadcc9c9e\n39b50a129ff530efb4ba4a53b97265b\n74104e62e8fbcbeed0b36851d61b6fca\n34e80aa7b579469bb163e775a4d52465\n53e5fe30d92d6733e6c5cd45aa112726\n81cc63cbfa6e492154cd2a0ea6cb618b\na909c649ca19e9c9a45565492492fdbe\n7a48b295d6c3956fa96fd0f479def5ab\n150a5e3deaacaad4983f6ae6d409aac8\n515df524aefbb9c2376a431c347bc40a\n1d898bbd8bbad8f98430b7446f9e1252\nc0b055d5060f7f6b4470f9a1ecf7bbc\n11694171ff49a7521ee0429e004db48d\ncafb0ae07b0e2fb055f46d55537192b6\naba010c771d153069c7285ae7854d4b4\nd2dc852235fe39ca1112a51947cf2b61\n18d84c10a5068315fe5c8ffd0f5eba47\n407a485c7d711903ae25f6fe802a8997\n6eb88254824387bfc59350d819542ec7\n2e6c2878b005b5c8bd7feb85baf9225b\n29faa40d5c0a65a576e9713f57a5fcb6\nacbc349caf76e6b171337fa12bff07ad\nc0d2f9960e0db8957ed335507280450f\n4bbac921678eb957614319d7d997614c\nc031c55d7ff5bd7d824080f516909671\n24b3f8b6bf4a9a7391a3d45e8887248a\n3bb0b093c66b1af37a0a46ab3b36f780\nadece72df027acd6658fc1ad354006c7\n4c44e4124118a2521e4b67452ae5160\n6f113f2baf10463635836c728d324152\n575d99ba4197caf041ba999b450870a8\n8094a6efa5efa16776d812857a5be1ce\n7fd938d174a81474b4aed946870413c3\n4c4043756b3aac2ba80ff03f6dc10926\n86838c0e4486ee7a8369c37b40e82efa\n44e48c541b5466342f38c0d2792fb5e\n6adbd040ec2f9fb53f07ca1042ba5dfc\n3891210a28be585fb9ac96152ab66583\n5b6195448cbcfc04b8cac7fbb9e49985\n6b984c6b1e49d9dc59f8e31ca87c470e\n94bb7157062d59a5f51f77a6d7299806\n7c12c2a7a1957abc8bf788ad2aab0947\ncd781f0ec08ba028af232a5661e85835\ncdc3762d2846133adc26ec30fe28341a\nb4da5084ae0237fca4ab444e58fa9bdc\n31a142710610023cf51f77a6d7299806\nce85ce0eb106d409b8a453d61eaf046c\n9572162eb971e75dc7cb20726c4d6c81\nae20b4fa1b552b62614d87bbb5364f6a\na992c3b41cc3027a9e1c34656195f3c2\na2dcaeb9f64566672027cee422df2aa3\n8488c41b4c17d0a81a8dfe268f567c25\nc365225746f2eb94ce5d6e9371bb5c33\n851274c7a38bedb5f55057dede601621\nd6bd6fb5d0149227fa242b893d7c243a\nd347f6e236975a6b7c4767a4f4c46bba\n202ea0a26125f716ce5d6e9371bb5c33\nd4277bc8f1301983a77c359d9fe71e62\ncc198051642f31029a88326b888756d7\n25ed0233d292deb413cf34dbb0dd8875\n2de782c81c89f704c2b64c0adffbe398\na477a301e1e1a67fc2185cc0ca1b306b\nb5a6edf04474c327ded35d98d26f9668\n68220c134171d105f0fb3e3d2a0d34c9\n1074bdcb3c2032fe0f3f8b6e1796773\n1d7b35cda1bbd2e6eb1f243bab39fb29\nc99ec52d66a6e89c3c8d0fdfb1cc2535\nacd46f0b09a84c226b987ec2db2ce6b1\nc04c1766fcc28fe886c701087a194026\nbcee1a76f453723c4cc1952ae0d6e81a\n6de399f706f2972970365ad078f710ff\n49b69d5e4330ae2457b1c0b6d5084bcf\n40470660e2b7a9ad6fa0ab61d9f9d96d\n8c7cff4d76ceef7cff900d986c9dc4b4\n381d0eb848eaaa07eee615e75bc3b77\n5a3428f5690f57a7cf004563556ddb36\n7aee2d4c1e70d27c921dd903dd0b8b17\n510fa8653c10b0d1ccd0340812259a39\n7a9feaea9793b570fc9d1bd1b5b90d13\n785b58a111b0498b9572486e5a924845\na1f901768250762d4f60f15da4c665d0\n92c111f0456557c14da5feafe6f1c8fc\n5135a234fe18481235836c728d324152\na1daa27571e67bf7239d26686a11c3\n3105e7ff7fbf3e423e72cffee9fc75b0\n2c177b47d18940c735b355b56bb31701\n819a1fd8c7bea7f3984cd513e00e13ae\n152a850e5016fdd6e0771d4c079a0ec2\nb67d58cd774ebeaea480742f4529182b\nc52cc29136169ea014038d588fd1342f\na55b6196e3402ba340789cf33f2f1153\n56e1f35c70ad2859c59350d819542ec7\n429488f8be42c9ed73149e0cf45b2c4e\n575d4aa0c1b95b0836d8dd30a594b2af\n94883014b900c6d6647872b8585e132f\n5984042b95305aee4da5feafe6f1c8fc\n21a6906ec6cc806182db9fca4b68095\n5e6c95a93849d3a9cf004563556ddb36\n763d3c4ebccee884da5feafe6f1c8fc\n4fca24001a151a43d7bd133fd14c164d\n4aedc26af43f08d08f7d9678498f2295\n716b2e87f41b14cf48d22c298c611495\n5b04efb9a9e392f7f51f77a6d7299806\nc3dd5d3f16f231c7cb0c0d433974e32b\nc73ebca7db882f3ef26c21d3bbafae87\ne3f3d58fe3cd9746a485daf2a997e28\n26d924cab0c8e8f348d189f942cedc62\n14ef9da3809148601b17743c18fb63dc\n78d36740730c94a4490ad276cd2af3a4\n11224ef64e1702b412e0c474ff07001f\na746b71bbbb56c93c59350d819542ec7\n1459b403c084a33e7694593a26340e\n4a30aaec0e83f992c59350d819542ec7\n9a2c9e5bda713668674056261e8e6523\n956c437be87a2be5f51f77a6d7299806\n2375dfeeab7fd8678430b7446f9e1252\n87e7c6e590eaab04f42a90fe4baf4591\n740eb7316c76854ace5d6e9371bb5c33\n68d23effdc37ff8ab59213b4b43189c1\n4e33ef381f5be0e165b61ce1124a4806\n108295ef2f00c9aa9d886ab2fa5ee681\ncece5afa11b5ea16d2096b2fa6f98cc7\n248ff0771f1eb286f51f77a6d7299806\naa722d165b5ede74f8832716537767a4\nb1e2647ec67a6402d616724413b4089e\n1919dec93dff59e0ed3ffec8035a48e8\n221c831217721399ac043ebb2140dae\n9ea0005f3d702b4f6cc679ef84e06ad6\n8e2f81ceda8e42ee4b4e980f23aaee7\n28ad7242b0bd168ec59350d819542ec7\na0beaab9a8c2f0954e7d60def15dcb8b\n6e4407e2b40dac9eda9c49a653a829eb\nc700103d0294eb186c66754c2bdaefab\n2cd30f8ab084d274391fb969ff1ec5ce\n5fec62a43a64ecb6f51f77a6d7299806\n8d4833c24a4e983fcf004563556ddb36\n9bf9e8d47f7b996263d977b06bbd429d\n5ab3129036e7b69e278d386bfa54545\n4768d015c33de0acc6e4e9360ed1cfdb\nb6392ba0cc9448b353a5b360543fbe7\n14e612a7cd0311905b539ad6c08a7283\n47ffa354257d2e3b20f4d1b537b5ee90\n65dcdb468234c4f64e2e1b2af0cc59a7\n59d2e972374292c19dadd90fffe49008\nab7b9934fa7d4768c0f947750540fb22\n9166dfd18ac60504f0fb3e3d2a0d34c9\nc55498c03c913177d200faae04ce3f8\n225e398e99d98995b0c71e21a9386658\ncd3c926cf4ae4564a80ff03f6dc10926\n8b24699e1351a78ef8e7f2c38fe37243\n4ec97e83a1e9725c77a332e31ab74b68\na3407d2fdef7386c278d386bfa54545\n9402e5123bd831e276f1f48f36df7df4\n1b269019c7698355a8737fcf23389014\n70eddd0ddf5c9ba21c1b3b2ed8d13bf8\n1b6e680e76d452a097144612c70a9099\nc7c782fd5976ed7214038d588fd1342f\na6565be9e3fb8e1095bea7c29e873d16\n2f87d7d3c522f07b297936c81e7f6629\n94f4f2342f6335c5875c4d98e634f167\n985eb4a8f9914873738e43095496b061\n4c7cc0a0e83f995ad40c07d3c15cc681\n568a719ffacc4e12f648065fbcc749bc\nc66e77615d80399466e506c113d5d05e\n243cea3dfd6619944b8710a3469971b1\n932abcefa2fa0d5960e37b3f76995f8b\n817e119f087cf8f8f44880b8ee951142\n4dbf616f15f8818ba3f600c356573d21\n433b0fe363861867b25e7c54df7809b7\n4d97127bea831058b26ee99f2f592682\n93eaa414c043264910a7acb23a71a618\n61f79a63ee5315693fb45d07cfab7906\nc09fe6e32490f4511b17743c18fb63dc\n763c7a6a8821cc75ed40cf95f720995f\nd6138b5bee8f009ebd9c9454e3d4e73d\n580a7733e55e08be3c8d0fdfb1cc2535\n5a5e9a046d79bcc7859a7164d38b0d13\n4a007c5263b36c35f51f77a6d7299806\nc33ab47f610b64e6ccab809eba079ca0\n370608d5fd4f39745e7493df1bf8fac5\n98a1211469f6c6a7c7ac935603e09651\n43552fecbd07876acac27d617fa518f5\ncb506ccfb07faa60f51f77a6d7299806\n132185edbe4f2c5fb4c161851ed2b4e4\naf99a90272d8f5d7776cc3eef7148ace\naac417d5df45cfd7605de7eae9f0b0f4\n8b35178a614ee2f462023490a1e05c18\n86905b35aca5a3f11f8d8332ee17945a\n3e858a898accc14132f8567794723a79\nc1f419412a6960a27775562146ecea9\nb92e2c18c0eeb8cba80ff03f6dc10926\n165c00d292773865ae6eaa32356aaf3b\n7227b96bff4e94a86f9e9f74beb7c348\n9ffc432bb61dff9f339797c21e8801b1\n1a146144063c778cd0d447e37edd880d\na8bb33c995207084bed1bd9593e318c\ncb75de930881a633f51f77a6d7299806\n4dcec5b89f1e9e4915dd7d7985e749c1\n12de47490769694e490ad276cd2af3a4\n65f11f7cb5c5106eac00fd1150223027\nd707228baece2270c473585373fc1fd0\nd88116de5721301298fc1d0403f6ad0\ne2d06603fba3bf3310af74324aae27f\nc08dacfd5dd248374e9bcf25298f80d\n8f30bc2f3ae12300a4669f677ccd56a9\na53a96efb6b9f29a490ad276cd2af3a4\nc5aa72cca5cafd3f842982c980a38094\n7e06d12a3db817df7f07552c1b0b212\n3c1f9b42e848c740c59350d819542ec7\naff3488d05343a89e42b7a6468e7283f\ncb84d931a90fbb8e91ea3afb2749822f\n5893f6c94b15ba204f3443b22038d340\na593528259cf4d78c0f947750540fb22\n386bf465df74b1321d860ee2ad2a42e1\nd8bf8dcbd5cae04094beb1f48b8b494b\na640e7214f7c5393a5b7c9f0974d595e\n25c3964cf7a607b1f51fa0238791f5dc\n278d1992a0aa9116ce8f46fabe978829\n1f822298caef0302143802691fd0e33f\n7eecf98d3b8f93a684c210032662e046\nd15097b4c6fdd9001b6eef8565b06678\na9ade7de80ee8cc8ae25f6fe802a8997\n736e810b71d009bbd40c07d3c15cc681\ne4523c675fb6a103d08b0f17fdc8a28\nb4130f8f597c8f38986f688b80d667f0\n31ab6947975f5747c62ff677c806df30\n22cc22fa33c8203ef1bd05634b542a1a\n3483076cc008fff0d9826d0ff198257e\nd30f01d6e50f128d2822b5101b06e070\n12f1e4964078850cc7113d9e058b9db7\n3aabe5c704cf7a6d1db624f8d6f26a7e\n18d94e539b0ed30d105e720ebc569399\nb261964d7c920a4cd8a45f471fe2ac0\n8994e11588b62bdfed208c42f7ada5c4\n1ceaae0aaeeeaa1e5a8eba5f6050bab\n5f55127e04171d6435836c728d324152\n4cbb978cef36a5b9c60fe2650bbe2bf8\nd08027b0f50619ef5c2f6ec7d4720d0b\n1f1484649f0b2d9f6820cc0e7030e15e\na248de70fda12c5af27383fc5a5a711c\n5584ec27aa657c65ad329b1997e89fc7\n63f3ea0c41eedd19f51f77a6d7299806\nc55a7e2cb3ab9aea8ca4aeb5e3b33af7\n4d0ee9779956b74490a9ce3e4b15521e\n7b7067ed1bfcfb62377b9297f3055210\na5b61e473c6ceef9f51f77a6d7299806\nc7a7a1254c5d98b8449f1c29830da6c6\na2dc947048077f4bd0b36851d61b6fca\n919591b27262702ad0b36851d61b6fca\n3e4d14a8716d2418999b33727fe6db14\n6d54014c7e0847376bad80b4002b9511\na2dcea3f88c397f487d0ef3f1f8b9c07\n931fcaa08876700e788f926f4d51e733\nca6712dace1e32a548d8ff57878739ca\n2856634c4c0551a814038d588fd1342f\n69949f47106c9140391e4d6c585a697a\n962d112db5d7c687e82effbd6750a761\n9ffdd44e709142551b4e9ccf27cd840d\n4dabd28be1615419546a56a24fdd418a\n97c6b3099a406960d3dad974dc098fa1\n267aa08f20a000a3b15194162f658e87\ncb70b087e5bc5e9522e46d8e163c0f81\n2e38fe7e4cd74bec76e9713f57a5fcb6\nacee69c7c5517899af4d0096b3f9aa03\na71fa3fbcd132c39cf44224546cb0306\n6ee01e861f10b1f044175b4dddf5be08\n548996207fe62d4a89ecd28750d46ac\n5c80714fa7f21981bf2e25c697250b54\n7238faf31667078b2ea98d69e91ba870\n1e18f136798cb3f0c59350d819542ec7\n6754e64c37f7318c824662341ce2b233\n13bae5728bec802034ea40f5d8767c57\n19127cb1f535bf2c62c9e7b595148d6a\n64f02390a1487f791e4b67452ae5160\n24eb9773fec0eb609e4965f0106e00d9\n4669d272f690a18dc016d21df34cd8ce\n60d8c707c5f8278e3c8d0fdfb1cc2535\n4eb789e7b91d1c7374fd54817454ba03\nd5fc42532aac8ea8ad046fea8c3e99d0\naa28deb4dd304d12f51f77a6d7299806\nd22fae260519b9cc52051c3ad59857ed\n3a910cc1f575b08339d3717288022c20\n77ead277434621b5343087e1efdee691\n1838f9b62a102d704c7384dbb75cab0d\n35faa6d255a474f3dde9018a607defc5\nb8880afd2b1038c8ea7cdfccad65e7e9\n7e2e24fed142bb20310af74324aae27f\n77342f11ba666144d71237b3923fc09\nc8f5521a1f0ddac6c59350d819542ec7\n696c0051a5d5db993bd5bed2701d5593\nb60bf64c7402978555a060c097fa68cc\n3761d6523fb9d7a73f7e27638e63d848\n6e765437962f4c578e51433393e177c0\n863deff7bdee8cdff51f77a6d7299806\n47e09607098c43b5768049e7324c832a\n5a6715ef95a99bf59856fa70a578baeb\nc21853b4876b7078684b7bc3f8a9aa55\nbcf7688f64a642e3fb266533561ee98a\n74126116f42f09e2e6e130a30b5ed875\n51d9a60e0654e3622ea98d69e91ba870\n1ee6393153a3146ebc19762eaa7ba40f\n7aa00b5d006a7e8de6860aa648421493\n850bd3a9b96e3ac67d3aa3bae1f7b494\n15d7f54338bcca35e82e35fa57516a45\n73c2405d760e35adf51f77a6d7299806\n89ddbdf6366df2a93c2e50348f23d3d\n740f399fea35db05490ad276cd2af3a4\n584b055cbd62b8572d7ead8d9eea29b1\n6352c69907b70c0480fa521a9c7198a\n31590e22b5abce1191c352d02061b3f7\n2726971c1ed929eaa733727fd41bdb33\n832fa486c60335f66ca64288cf1b7ee0\na874dcff3bcf8a802aca02f099166182\n8317fd220232e3be11fc2b865c2a185b\nbd0a87c4356e53d4630bc2b026b477b8\n93ee050394f3b15e3c8d0fdfb1cc2535\n54d9053622deb8866ffe0f6a1d92eb85\n19a0d9e5e036290bfe9e4fbec1f7cb98\nd6a55d2dece36ca0e3f7a74e12a274ef\n2d2ce6dc51aa6c7a9856fa70a578baeb\ncd251287fd34d7e0e3f7a74e12a274ef\n64b8884bcd36c6fef94d7e6d8577c8ff\n4417497ef6af4cad74555f58f0503de3\nca6d108120fa949163d977b06bbd429d\n47fa0f6c9b9f019742cc639a26c5af8c\n70c0c5438f0da757307c5c16466b10c6\nc6a306867328d90fe42c2d012c73c412\nd6724f5b2761dd49ffd5817f210f277d\n25cd31f334358e0260bec33edd014356\nd56ac97208393d54bc8967b0321bd9d2\n2018d0713d4c22df480fa521a9c7198a\nbc1298b1c55849b14e82b8d74b98baba\n906d4fb94d86c4f0f0c255b2dfb0a92a\n5abaee58835d67975f9f6f4c95ed18d0\n576170f154143ff2de421c2ab5cfb52\n3216246565768e2fa716f601854e234e\n5d8c63fce0f30a46f251828d7c328331\na6d90c5628a598a1598a453fd9fbd988\n62a332e54cca36f547b925ad5d9d8738\na80ad4eafdb304edb6b975d10a10702\n9990d6c43d95c521c4df475ad1a6d009\n9f07ee5bcf6a4b11151b305e5243d9f8\nd89866af0e191e40c4ac7545c4775b33\n247ef69bd111e8f026cd8d83e7ef5b6d\n28b381915e04c62934b6da227fd64942\n49485d1e98629d0c1c76f329bc4666d1\nbabe716e40b3aa81a54c1b71c072d546\n54a7817fcd0919697753725ea42159e8\n9d7338e6d5da1acd353a90f87b8ecab5\n1dcd59ab33d275705ac7b7ceda74ec30\n975884e7d9cb74ff39974e6e2bbe1adb\ne05be650930e7eadab9ab77fc8888129\n54daf9093eabf27a34d6aa31914c287d\n34850728ad9af669490ad276cd2af3a4\nbde4addb689c2ba55841240ed5c62c36\ndbcf0d09a1cef0aecfaf287992b2065b\n87708c9ebd845c21854c6e2381cc9350\n5c306efe5d4409c31190e285a2cbc9c\n7470935c77e340f31781dae1261f1d28\n557cf522ec6be06ffc5195fbc9cb6806\n7155c1f2abcd7dd2e3f7a74e12a274ef\n75c26ffff01ea7063ab3dfa44f5fab01\n2f0fd2a5e181b82a4267f85fb94fa2e7\na46d947577ecb54a6bdcd672c2b17215\n37ba0371250bcd6de117ecc943aca233\nbd2bcee265b1ee1c7c373e0e7470a338\n8a2aadf8fc4f092c5ee1a94f1da3a5e\n654c0a2db749c63a56b67b833e192171\n97b415cd78587de5fa29682ba98e856d\n3e52f25b8f66d9a8adf3df9d9e46d0\n3fcb5eaa202513bd2f815a05dcd7ddb5\n743366dfb72897be1ba9fd11dc8bf457\n75c4595a4d1c3bf9fd2b139960f72a73\ne16c0191973a25f02d63c890dc92b5\n3332c4ac1fd931d01586ac387fea1cf9\nab7ad8afde03897aa52fef6f94fcc8a\n8390466432e2c364298a4bdd07dbdc0\ne0c8d4f4c31b26f6d295b24579cf55b8\n1d442f753e2d7d3cb90e13b20a8dfddb\nab9e20f3f9d2f1d1d77c088a902d8fa1\nc11449b64486b4df4240b2500b599345\n1f6d5268afb826c38b424343280aeccb\n73789bb6c0286415db823df37b893ef4\n40209ed0c2a718bd82ef94da039e491f\n7cb7d54954caa7a2d3cedcecf1ed3b27\n7728f0ae18c58d067e427098d75ece6a\n77aff49eccafcf2726831803d0b48347\nb8be007c703f1a9eb336215553415709\n948709ebfb6cd6ff6f2222642bd41c09\nb3328bd358d7ace07c68e936cd219e1b\n623c347d2d5cd6b4a66c900acb409285\nabcac243e3ed325b34943af333340cd2\nb1bb6113dcdc8a65ffa51bfffbc09ebb\n443a726ba9fa8d04d99265061a435799\n3aa643b4eb4a165675a4e003752c1044\nd4c4d991f9fdf0b654affd783a718eb\ncaa4f65053f07a64548804f91c2c5c3d\n9fe8af4bc8683818579c9a60a6b30a2a\nbc1bca3cce664ab11fc2b865c2a185b\n8238404daa0a13bfce5d6e9371bb5c33\n5556112e5f36cf2755f46d55537192b6\n37e5fcf70007bc26788f926f4d51e733\n178529522942bd9e11fc2b865c2a185b\n9702a1fa518b960784db07849359372d\n2af2279b9331aa9916c6f599d5622764\n46629a0cff77972aa47e6c0a5f3e8240\n8e46f3a871f86befdb955a8e38fc7dc8\ncb9c0c90b5c6cc9c189d4f3a6cc879f7\nc5212968cd5ef1dc3c6e7539caf3791c\na268283b0fab6092eb835f4eccb92a70\n26657a42d9ec207ee30ec6a0c7ae873f\n41d9c4bc97447c4530ed3cf7f7e32c4a\n4293fa9040a1790f5e30943bb32d54af\n7f60f68c48e67cfb422ac19d4a83319e\nd0af907a612856e964b62a9cc93b56f5\nbe4c2bb409fb8374b5f72e2923ab992\n77df125bac962fbe4c5470734f591843\n55f08c36c20f161be186198f40d88f09\nb37d269e1ec64992ee71ee29c2167097\n9524af09747661fbe0f91080da8431d7\n59e0e7f6eaa54e359cf7640f6c7f518b\n1d7b04fd768eccb5f838a2212356e267\nc3755418f2df9369e7e684d25d4dcaf0\n9178722c21d03d3ca12fd542784d2033\n695002fbea3c5e4a9a6b496c6e9f4c2\n552b14104b7add4049cca13fb3e44bf\n323c85aa6d1949abaec7b0e2cd000db4\n63c195f60442eb5a32cdc35a3ef7141\n6ed6e797fbb6f0c9b4979bfe197a8c89\n7759a26614f6c4fdf815c17ff5624f52\n1f319101d3c05a16886a4b751e0cc0b5\nd6a58b80b6f1a4f9a14bb1d7e401bf06\na9bc0de459504729eca1c556848f5db1\n636c4d449f17b6a8b47cc2471d9dd7e6\n992e569c61916848e26ab56647fa5b85\nccf5eb1023d22445762406157deca112\n3d21c803cfa3bf504c96d44e0e286fe7\n8697ab2a0da98ba65588a2543ef0b0b4\n6d42969890762ef2ec8eb53ffeeadc85\n5a639987ce024c8223dd83e725809894\nc5eb5577e728c4c1ab4753fa80886181\n878383dee814d727fd2b139960f72a73\ne0d37d661f26e9eb4b8710a3469971b1\ncf57b6a6baeb421c8c180d5d98aa66c6\nc184edddd3530a8161e1dc6d433ab6c3\n5f2f90d83db6bcafe7e684d25d4dcaf0\n64af194c4c53040e492d9da2668ec34c\n94b497f0a8606eb96dc1f81f95db52d6\n8fcaa6e3a07bcf5038169f16cecf9bd\n7bbdaeb0633738e611fc2b865c2a185b\n169d64acd930adb12871cc0b3cc1a485\na82276d1ca28e11a4d87481e09b681b3\nd4be807e568ae84d7b386db5665a1b3\nba6c211ed08d5c1b292e33b9f44edab7\n8e1a1e2879cfa2d6fe395915d44df772\nb1bdcc7bcb3148aaa23949c21eddef76\n7261f3eee6d5cac0e7ae87d20a4fdaa5\n7664b9208a84674926a555721514c9d0\n534d0386ab0bb650ae96150e4aa362f9\n3fc6e2baf40f4377f5afb395b99ae069\n7abc6f3fcabd914157d513bbf87f8d1a\n71c2c44dd20ae153353a90f87b8ecab5\n6343efcc64b331b3e3f7a74e12a274ef\n63cb49d18eef102a5c910a98e42d23d\n740392e1c6522664c20c4293bea04a44\nc9ead211b387ce0c5c59c6146ff01de4\nbe7d2a1a7fa7ce0b11fc2b865c2a185b\n350be7f9f7eaf2667dcf5135889d9f2\n8b23fc57517a57d0523cc82298d77b36\n8e42a0d11784c74fc6a5c971c030877d\n4116f2d56897d9ec1bc4df4f6291380a\na58e77d8a9b37e0280b9485fe431cb14\n1b3d4f2291545e472dc6c96daf8fd5ea\nc86f009c4d1e1d2941e1a63759e8b225\n622dadb90004f49fb84959963148f2a2\n2ce5e1eb83f4510319f778c7a8b12264\n243284bf14a193771f6fe06b2fa3ab21\n7328b4c001a249ca39d3717288022c20\n718f8fe82bc186a086d53ab0fe94e911\n433082675f5505c3c59350d819542ec7\n3f51197359289bf839d3717288022c20\n1767bd876a8b8c6e4da5feafe6f1c8fc\n4e2d3dee0f6c8e18754e8957cd76ff02\n140c308db70cd2674da5feafe6f1c8fc\n87b62cc2f0368983824662341ce2b233\n83db7fe5bdd2df12824662341ce2b233\n1700d057c9e0c88cc59350d819542ec7\n88a1a68c64ef85394da5feafe6f1c8fc\n5f7b88ac9256976cc59350d819542ec7\n195b0fd745df898d86d53ab0fe94e911\nbbdaeb32d4229d70c59350d819542ec7\nac8cdb6289d3d446c59350d819542ec7\n40f90a159f03321cc59350d819542ec7\n10798ccb7072393e86d53ab0fe94e911\n59b0ac376af08592824662341ce2b233\ndfb5415f3bb999a4c59350d819542ec7\n96969d7adc540bf686d53ab0fe94e911\n2d1b4c33c0a40653c59350d819542ec7\n226873c8d34e38286d53ab0fe94e911\n3b577e2c7bbb8ca4c59350d819542ec7\n329f11a156aee39ac59350d819542ec7\n587315cfb22617a1d37a1bae74ee50a2\n31c94abeda52273286d53ab0fe94e911\n18efc77e6837f7d311e76965808086c8\n932ae6a9eaca65a03f4b30b8df1dd26b\n663cf5c8c88a187b6fa3ef67a69ab460\n513cc5132f0543d0b47cc2471d9dd7e6\n475907f4b97bc1da25ae8e5e777da782\nbf4aed04442c31e4f759a9b042055cc\n7aac04fa0361f0da2f8bc0d6e7c6775\n62f5c85919a21aee7868105076bde789\nb4cb08749e099f0a899736e5d685d0c2\na4c79586ed938b5ecd81cf227afdf993\nb5a0f4e52687b87ea5cbb6810d19a105\n7324733dbe394447e78cc773ba5d9e52\n9c15e8897adce40c963aff3ec12fdcb\n33ad208b1b1468bc558ef7f77265c6c3\n88a30428b822f8ad630e9aba042fe4f\n1f4ccbdbd0162e9be3f7a74e12a274ef\n401960cb8526894f4b8710a3469971b1\n891e56eed3fe1debeca22c501ad0a77a\nb0709afab8a3d9ce7e65d4ecde1c77ce\n3e881be7e5289fcb77a8ecb4b9a890c5\n329f80229edd920a82ef94da039e491f\n85b82499e3ce7aea3a5893ad04c930a0\nd33e54d1880f70c310cd758d9b7cf\n6686c3a7dc39cb59d2f1945599cd5176\n8f8a2633debaeb96c2b64c0adffbe398\ncc492f2749d63136504721639e19f609\n8b63c8e0d3959c961e1dc6d433ab6c3\n6c6e14968b5e951de7e684d25d4dcaf0\n2df3eafe6c699c1a6baba085b51d97\n4bd1e17e8bfe8d5622309d9bc2301ff1\n7177dc5922252f1311fc2b865c2a185b\n7fbb7a6e017d3bd1921dd903dd0b8b17\n70d390b1e9b3053a22ca415af010d9a2\n80a3b5b036021b8e404dc8be84d677e3\n4f9b95af6720c7fc11fc2b865c2a185b\n21dcc3c0485b43136473d8f2b21437da\n6c4fa2f9e7e938a15cc8912051dd9ae3\n274b2b7de6654d7ce6619119a89ba92d\n7f726fa36a428c0e11fc2b865c2a185b\n9705e66769fe130add7092ed47061a36\na4caf30bbf028b63713f083e39bce318\nac7935b217aeb58e19ca41cdb396f36\n9b885f40e2d36819e4e346ee2650d150\nccf7d017b67b51b7b9349bb36676bc81\nc35d287217403cf3236641942dd4b3c\n11f59587596e3bf1a9958063063ce065\na62c9f6091337b5cd5382f3f8f33a9f4\n7e881ebf38366c6b5c91aedc71c80652\n54c4eb19c59440128f7c4148465d43b6\n9029a5f19440d04e6b19a27bc4c01b1d\n45bb41433302f3f5490ad276cd2af3a4\n69932a9f53ce20bbe4e346ee2650d150\ncdc2c14b62e110fbf8bf793ac0a3a901\n6788de26abc86a8480fa521a9c7198a\n22cbdf59fb7fdae277b4d8470453cb5\nb539b0bdf5c760b1c0eeb4326d5ba9e6\n4d36c59bd32fd885aadbf8208284c675\nba1230fc38050b1bbf1d236bec6d905\n53b396d2ff7af087d01673c7c57450c9\nbae2eb7c426570752c91206be77753e3\n5f44807953f9babdaf31a22c7bed177d\na256bf234c60a150c226a4421a1fedeb\nac4e80d4ad2d0ce98060a555dcc63fd1\n5b2201c133876813f8333d818f5f80e1\nb4d82c9706931d29d1d193a59606317a\naa249df1e594036f730fe631274bee9c\n8af204f53bc871a2c05575120a46cd3b\na65df9374a1492d7fff2ea4466fc1c5e\n18f41e91af76c77de25f00a04866d020\ncb12bf5a4429ed4c4639ab25a6c4afd9\n346419b6e2131dda5785f58f071c8c43\nca9e248cdcca240f11a59b122fb65ee9\n9140ef4099eadf73887c1a82cf8c6eea\n3bb80aa0267a12bed00bff798ed59ff5\n68582049d02c7c979ebcda765f4eafa1\n3e662f9afbe62838f0f8b2d752b1c7a1\n71bca48ccefa3cd080f94e6470f7d263\n8fa86c85b7985962598f1102685df4cd\n98e47ed9746cbc88ef9b1f19ef4b8cc0\n21ffe8bb21951feb5c8adc541f88498\n8cfbb0ecb20361e8a7cb178ec63a7c4a\n768564ef92377d886549bee1ee0ae3d0\n5fc881594598fd937eee615e75bc3b77\n7bd5510b4451cb651d6ac856ecde9eb2\n9f88eb11fd20541b4f759a9b042055cc\n4b75b3d199523a91f8d6a4359d6a181b\n663c290dd2e02f03e3f8b005c90fbce8\n25d7aeb2970030371733347bc72de5f9\n3763bd1d86776ac397022448220c7d6a\nd3759f1bd6dc9652f51f77a6d7299806\n148180c71c8ad4e3a1bfe809f99d2951\n7c68771e303eddc16adc061043e7c712\n2988d5b3d61d80c276555d27f71ae823\nb8300f2e4a8adf9b31de0931bd5b560c\n1a2c199d7c8cb7f83d724fd1eb6db6b9\n2f2a87c3626ff6fe1aae34e8209c4d10\n2b45de8320e0b2ca55d7f0828042fbd\n1a9a91aa5e3306ec5938fc2058ab2dbe\n5172c96ea99b9f5fde533fa000314311\n6c01e409fb522789b664d1885442ba70\n85502157d9e253d411fc2b865c2a185b\n238e8b7747e7a2503c4f66791e25960f\n1f610516a159e0ce8916d0991ded06e\n124cd036611b65b514038d588fd1342f\n5bfc4cb92e9d3b1f79b0363dd1368699\n83ce531fdc507e34f51f77a6d7299806\n580add3e9e4bd75939a06c149bd5b5b3\n33ebdfbed1aff9fb12d532e9deb7e02b\n17ad636e45c233bef79e00aae9a7dcf8\na07f3b931238a5c3fe618e12c7f65698\n17e3997117f88d921ba9fd11dc8bf457\nb1f23b772bfe59c2f766c600156dc40b\n9c802e8971c1b25f480fa521a9c7198a\n11beea78b1d558d4b246c4171f2c393b\n9e6434ba1ad59fa611fc2b865c2a185b\nb13778ff6594e980605de7eae9f0b0f4\n731733f855e5ec4ae4c30caf4bfa735e\n942e67160b47dee1b27fe5b4f7a28eec\nc65b640e9a3838f91d76d38b3dec9476\n9aedc18053d412048ca998f0f87d0c84\n6e03d2f837cfeb8ee75ac485a81d5fa9\n594128786d7aacf26f2c2a3461eaa93\ne2716932c4739645e0958c0e3fc3eaab\n45679a0d39b500533dd5cc05646564a4\na5ce16faa5ecbc4bc6a5c971c030877d\nd6edc4c02e38c7dda5737ca21e62ad39\n"
  },
  {
    "path": "data/filelists/02958343_test.lst",
    "content": "71a1122469df0bb8cc8ad0deed05da5c\n323c9dc2a8911e146f2f07de403e98d8\n125a4780c2d5095d19454008aa267bf\n1be075751d7cfbf9ee8e9bd690a19ec1\n1d82451a55d19cdd711f9e3a79a13dcf\nbd8654fbca233e41ddb8f37b1865d989\nf3760c5e8b97149163b803b494079757\n36190ce6fe041e452d647b1c17442c93\n42f45d024ab3309eff673973a435017f\n604d915e7bf91cbca22cf2b42142a7ea\na72134cd499fd1c4f79e091fa09130a\nf66180e68fb1c98469f2880702ff1c7d\n36cf21268838ce6011718baa6d4afc0b\n383f8d508b6f25f565d21723f535417\nf850f5ddc42bdc3a117db354abf0d721\n31389308f2b032ddf09fb258eb4b1e60\n1f8aee726cbf44c23d27832ab9ea6d92\n1e987cad6ca8a97a7a24dbc42a104ca8\n7c5e0fd7e8c62d047eed1e11d741a3f1\n4d1dc1ad555807559b0a29632c8d0005\n12410830e8a5067c69576518bd9bfe48\nd86119f06459e996897844133a297d65\neaf664eaf6b27cd1905f30c879d154be\naeac711326961038939aeffada2c0c5\n9f3c463272d13d39eb7780cdb3ece367\nf04f2fa810b6a66994abc9429888948c\ncfac6b6374bc4fedeb7780cdb3ece367\n381332377d8aff57573c99f10261e25a\naa78d4465ae18312711f9e3a79a13dcf\ncba0b54cd104c411e9d8921ebe6d5b8e\n1710ff46ca275e171df27141dea8c9a\nabb2cf2ed0d8679e9cace18601e5d3b5\naa9f41bc3925ffc4be9358e8c18dc481\n265f0587e4018f7aff6fa400d1cc4c85\n8e05e4f955eaf140ff673973a435017f\n99311deac352b9a5873751b4c304dae7\nb50f9931670e25ef44ccce632b473b8c\n72d4deb3b797c03dd4f6529a209c5dc0\nc8fd6ee4bdbfa5cfbda3e4f05af7d436\n4a5bd025a2500b3b3967c36b4916b4de\n219a0021526791d18bb5c0bf5eec83fc\nd482029701573b9a43fb5689d5ce14d3\n346917af7c9659e3814085552234c955\ncfb4626f879c8355b4d8ed7f5558a6a6\n751a2e8afd998768fb8f6150ea0ae369\nd63110386a6bbd52d647b1c17442c93\n2c6b14bcd5a5546d6a2992e9465c023b\nc896260b935971fc65d21723f535417\n8478439998e4af846602d94d941a9c9\n9609eee1c5f60dcd610425baad975046\n49b67421f1aecb54619e733243629008\n1cf14b4004e1d2e22c6ce678c9114ba5\n457ef8db81db726909e2381adbddb4b\n5f2ae8bd2d571e7c6436916a86a90ed7\n56332360ecedaf4fb095dfb45b5ad0ce\nf7f7b1b4021be11afaeea7738551d104\ncd8956854d515c47374462542bf2aa29\n156d4748560997c9a848f24544821b25\n1d82316d98f620513b86a9df4269733\na5a6c94b8a93c11b679506fe2f937c34\nc916164d0e5c667a75ef328fc121b1c5\ned2e4dafc745bdd661fd7e090d4d0d45\n318eaf9f125d8296541e8704b64e3884\n3469d3ab2d353da43a3afd30f2e86bd7\na0a1b0377d72e86bab3dd76bf33b0f5e\nacdb7b476fc5a1ca96f65931c8819eb\n3ea2b72ba08a2e8097df6383472cc5b6\n2830f11dbd7172222214ff09b39580e9\nacf64e44b021fd4613b86a9df4269733\n2359486974efded33121f82ae456ac81\n817bb8c69e4ac23ec81ddeca50aa3117\n92f697d036addb55ed576c2966428f\nd142c919254dba0e41ab8016efaf0266\n4dbf4e0654d0c234e811106a82796d20\n73df85f3bb763fcf148474f05635eadd\n6d714f7b7170a581da8e502a3c6cb4fb\n405cb7dcad3d6f2f65af93d4326737fe\na8d3020b33543bdce64131b695068ec5\neea7f5d02088d49dfdb3c05088c091ae\n68f06cde1b907c44e9e6d625d754e501\n34211d29d94cbd52b7c4f0665aafbacd\nfa234addf8fe4f7fbda733a39f84326d\n232a1bf61d6d80ffab0e638d7c0cfd7b\n8320c70894c3cdfdff1370452e3a0154\n7a756a1c54cd3a5a1b3611fc576bceff\n18f6df600df7341ab0bbc6f39febba97\nd04fd72c36fbc71731d383b4a9dce77c\n5a9a67bb92fbfca3b1bb46d2556ba67d\n4359a0878f823f5b96e24f86f1144c52\naf2f10112f943f54c730b513773cf286\n6bbcd5608ddf871a4cdd04162f008888\n1f191e0327ce54474cdd04162f008888\n9c827e532de4967285089a13cc567dbd\n5be0fa6b0bb7a281a170b3adf3b6f220\n667f7509425dbc60c43644e93a8d03ff\n61348ed95aac6b3799cbdd78ced2546\n92c882d35dfca864acee48fc4abca0f4\nae0058d9ae9bd33d51a95aaa6caba1d3\ne24f388736f4e6fd2cdd250493632937\ne27019b4147f868dbda733a39f84326d\n3ec7f0347638f7a891eea2fc80d4a25f\n8212b62591234c743a0daf3e5400b95c\n74b73c2cca45cf483c1d9add3a87bd2d\n8269284992bbd0c886dad8a79e570561\nc6e3d9cf26016b5752aa494042b7c9db\n56b6c950f4c5de80ce27281f3b76d1f5\nbae4b861b5cf87275b182da8c76b7238\nf48dcef252683ce552aa494042b7c9db\ncb19594e73992a3d51008e496c6cfd2e\nba0ac1d1e25d3fad63f2c3a55558a78f\neface8341d001e9ceb01ae4a4788bd4f\n7b0ed2e4d59ad5261d5011bbe723eeee\n648ceaad362345518a6cf8c6b92417f2\n81c52d54f9719736ce27281f3b76d1f5\n936702a0367e95185b03bc28c642bc\n8545a6862135379c813e8e6859b9f2f6\n5c542cd5371a631d6436916a86a90ed7\n988108a7536d686824065b218dc1b5b9\neadebe4328e2c7d7c10520be41d00de2\n86b488c74b27d70ace27281f3b76d1f5\n588c2d2567fd900aefe5f291bc2f5fd0\nfe6749c82c57137b28044fe9244db50a\n6b642c1c62ae5b49247a5be450795511\n82a783a1ea4e34b8d7755e7baabe8a6f\na5dcd1196a1ffa9739f20966eb25504f\nb1f75a8e8b9e921a8a6cf8c6b92417f2\n7b067be3aa39b1a124853ec273f6c1d2\nccca16b8302bc8bd13ded1857c15b5b6\n30c86c4764df9f795686045783681fbc\ndd35ef6632cf507804272696dc83193\ne213d976734431773a3afd30f2e86bd7\nabc42e7c5ffaa41d1466737d5c4b4246\n8f715205d2e70c1ebda733a39f84326d\n3ef7cfbc172840b2393bf61b30c528bb\n3c310afdf363201cefe5f291bc2f5fd0\n3cad25b218e0cd506436916a86a90ed7\n30f4617775480bcce27281f3b76d1f5\nef3ed9f139571826ce27281f3b76d1f5\nb5a25bcf42cdfb15523270fc16562838\ncd67376cac9f989151008e496c6cfd2e\n83e537cd6bb435e91d1a964dea8a7aab\nc48a804986a819b4bda733a39f84326d\nced56d51c144b40373dc6d54075665ea\nc8d8089dade71547d2350421a9405ba\ndb8eb94d24f5d8a2350dd0b332d84c76\ndf34c25a1e1abe9428044fe9244db50a\nca0f99974520bde12776450c3e3bf20a\nbf37249fc8e16fd8f9a88cc63b910f3\nedb2ab8a1d7e20f36436916a86a90ed7\n99cc91ea3f0b646be79303516c6edeef\n188621bbfc7d9477ce27281f3b76d1f5\n12243301d1c8148e33d7c9e122eec9b6\n91440448603dffb62c8b6ee41d7d5d62\n707d1e19b465d075adbfb30d8d1b297e\n4c1504f3463445dbbda733a39f84326d\nb5b6b09711cbee6daa44bfa127abe4bb\n174f1a421f652029d577c0ac53e96823\nbafacc7f28509d4157abc6fa0d632bc7\nc1186d49101dcd513a0daf3e5400b95c\n84498085850b19d11673e1c313348a01\n57f592c3ec49318661c6c61410fc904b\n6026684ab31d567328044fe9244db50a\na358931939481311bda733a39f84326d\na6d494af391a97686436916a86a90ed7\naf94283a61eafc7183a0f773f3852fbf\n86d9b82220d7ba342e56818be5fde856\n3c685bf24a135262e88791d6267b8a1a\n7751f6695ce5013bbda733a39f84326d\ndecdf28e46edc632bda733a39f84326d\n4f17af1ca7ae689d409b2c4484d833cc\n6bf75ddeac192594bda733a39f84326d\n4bb89ac11d478c0a71fc473170b0a51b\n3e2c3cb4f4c65b9cde9d4070fcdfa604\na5dc2526c9ef78b96212c8f6cd06e\n67c229c70e64a25e69c2e0a91b39f742\n26cc3a9cc0c28174ae30cad08127b470\n4ff291758d03aab8d935b10ea652d50e\n7203130a35ab20a4b1bb46d2556ba67d\n23bfcd49917919006a34aa94ca8a3355\n78c0bec338fa1c01d6b98bf27ff43caf\n355e7a7bde7d43c1ace5721ccacba16\nded68cb3b5318425bb164ad50a9faee3\nfee1c13922c07e8711b978ff9450f61b\nbc86f6cdcac3e6a5afe1d4530f4c6e24\n3d3a1207dac28b9340d2ba94749368ce\ne4cd5b3cbe9082f536699018d15f07da\n2acbb7959e6388236d068062d5d5809b\n3476290a1220338ffa975bcfd21f6dfb\n5768ae99da7499feadca4990256df2c6\ne729c1d5c3cccfb3bda733a39f84326d\nc6a7b37a33b5eef728af9bd424dcd6fa\n30feb9f00597aa2a3781057335c8a2e8\na81d28a70bb06e18bda733a39f84326d\ne673f203b40ef869567880160b3acb12\n42e6ce03b361102ab86e0633bb69faea\n270b0846304e3d66bda733a39f84326d\n9f4bbcf9f51fe1e42957c02bdefc95c8\n65e3e2893669a09cc7b48e36e31209b9\nafb36ab0a7bb906bd95840a0da458be0\n12941cb870df79b9815337ac44abb964\n6f3887b3b8253284de541e973ae662b5\n650238554cb16926bda733a39f84326d\nb67af8c92198eab432e9b7d6df5ccd43\n5b7985f5dd37dec2c2509a0026f2a07d\n2ccc8183090b97cb21a66e8dfcce514a\ne5a3ffca76415acc33529abacbef3013\nea7d39fcc3cf045dfc73a41845471b0e\n891b06955bdd04a7909e2381adbddb4b\n2c3a5d170774da5ae4a44d0583e1bb01\nf723dd6b7a95e230c75bcb366ed55ad8\n26c2c91d8eb660ecbeaa545f7f633287\n970ebe02365dd05bfd7e1079f2e4956b\n2999f005f1eba724bda733a39f84326d\n39279457a4bc87285e717a211c863fc6\ne624da8cd22f6d289bc0c5b67eaafbc\nb3f1ad55fa401c35e8c505ac322336cc\n900c32b154c0dced994a3466f8481f8a\ne75846320e6aa623960b997a49ac99a7\nf36ce0c0cd0cfacba7742c4ce47c2229\nc487e9850891e1ec2d15396b7bcc6366\nbbc4f08aacdff9c7a8ed0bb390c8ebb7\n5d353140bc7569a48772afa45900d07f\n59e01fab310fa8c49c9f1f5abaab90a7\n30ad4418703c8cd2f1da888faee23fa4\n67aebe9ff1f103e18d1e606155667e23\n613bf2e7f987553220d9307ef0bda318\n1079efee042629d4ce28f0f1b509eda\n88fc7d197310ea4b961b666ad9ed1438\n505ab718b8083f02ff1370452e3a0154\n3b41ffcb4bec60cc21a66e8dfcce514a\n45ff3c9bc849f2e33a2844e8778fdc6\nfdb16a8648016157994a3466f8481f8a\na471cdae8ec5df5c9e317a6cc797b629\n38f9aa4c68327bec760191d847b7480\nff3c8e21a48ed17cc1bcae9def1986da\na2fa9237519db867f606d4ef0b8dbe5b\n39d161909e94d99e61b9ff60b1be412\n6af177bc78ee06a0e8acba6ad3725ca8\n26569f96aa6c4ed880af23b535873bb9\n600ab6a1f116a5ac994a3466f8481f8a\n37a75534a7a006ffbda733a39f84326d\n6a737d71a4c4d81958943aeb17f0d326\nc6ca5b48d1e5f5ab89442e34f9143192\n510df40932e79779a324deea8acbeebe\n4f31142fb24b4814ff1370452e3a0154\n36c2770d00fdd0bdf1ee968c9039cc3\ne56749ccdc861495b9e97c7f06f23bd5\n29fc55965346a53733d7c9e122eec9b6\nf60f11a1a8c8f89992691fb966926839\nddea3123599a628ebecf71e2e014ff6f\nef15b938dcfa9893c4d922e8a1141322\n1523402e11400b75becf71e2e014ff6f\n54514b3e6ea7ad944361eef216dfeaa6\n60d8d7776789b4b1fe11eeaa72c8aa36\na166f97f10557feae7a7d875eac9a93\nf7b61de5d6d919a8953536e7c905b301\n943be90f18274083becf71e2e014ff6f\n33f95e59143938ddb490a9cf145bf702\n5c997a7c241190937cbd61b2affd051d\n86f1cbcda59640594dde7b6e74a2cede\nf10f279643fbb3276a78cd0552215cff\n9698be0fd3516f01fbeda5389ab05f5f\nf24129eb2169197c203f35d9b3b48203\n1ae530f49a914595b491214a0cc2380\nda92c8d35fabe4093a67185d75524e9c\n705840df46a582e2ac826a3c82da491\na50a46d3423e7dcad1eb2a2149d13665\n74f7b559d6af926012f2e446484bbaf7\n65c225fae513a6dbe7b23463fd9b0ba1\n6333b9c777384ad14362be10a3fc8255\nc6978e2a0ef9f0df866f1a483075a782\n8242b114695b68286f522b2bb8ded829\n4d0115d72892d27531780fdd33037c9d\nd32cd105c2dd79259d959a8bee08198a\n259bf3c89b0b2152c1f18a2d53a6674a\nb61b7103e8d8af91fe21694bd5f519d1\nc6038e4cf08de1a7c805dfe4ca9f2fdb\na836fc66c01eccca58c27e607f6e2d4c\nc35ebd98decdebb9db7706d93442f2a7\n928a5f0e95e7aae5780bcccc86c008c3\n5057c9dbf72e0352728fa2df514c65d4\n69aaf42f0b8d0e2da37127a27e431e39\n90ba6416acd424e06d8db5f653b07b4b\n5351646fca246bc989c6f1079da7a8d4\na57e65f0c8f21ebc31780fdd33037c9d\ndb216ae493f303f35b4953d8add91f\n37ad66d0433beb633df8f4ac45647158\n8fc3cde1054cc1aaceb4167db4d0e4de\nc6441f127d51e478f0fb72d24c42a39\n11a96098620b2ebac2f9fb5458a091d1\nc907a6cb1b178999c805dfe4ca9f2fdb\n8053e014516531ddc3f500d7b182f6\n2c407d592623011eda2ff65a113288d\nb44b09bdef8fa2209473806fbdf65cb6\ne4886a4d0c6ea960fe21694bd5f519d1\ndb392da8d05ec4d4f6d01abc93dc7d8d\n97831a753d80d66dfd24692312e9de8c\nbbf84d45735af3314dde7b6e74a2cede\n6d493677c8dfb9d8321338b7ef756ea5\n8bd6b3e216ac44d2d1e34356c50bf8\nd22a2d20acbdca70c972ff3f74d38438\n6c339c89246fe6a651db49e653372c20\n3aa2614f69105d0f31780fdd33037c9d\n1e3f494626a24badf35b4953d8add91f\n863f9284eec4a256e9d8921ebe6d5b8e\n7b2ad420c7829e881cae32f43c09c982\n7046566750f129126aa0f1550c0a545d\nd34b0494fc4d756ab927782fc69a1fbb\n52f2a2472411fe2e6b418c7d9fedcaa9\n19042f5a90290859441c11ab4641b257\n5bab0881b7a18b12733269057ed164db\n2131d5bcea38ce3a68bdb39538968e8e\neb59c9376d1e04ab49352dd33f95cb9e\n9e4380de95fea34a11718baa6d4afc0b\n9c4a3879c71df693af0f25977186b501\n167a645149efed1fdca2ca2624f821d9\nc887bed724f4a30c31d6c59225b395cb\n56e0fef0632aed0f1d27be7764701cfe\nf9fbc58e3692c4d5583d20ad0a6b981d\n6ddb807414fa23e0d9f8911ce020a037\n1abeca7159db7ed9f200a72c9245aee7\nb4250be25fbd19a994abc9429888948c\n294331fc6c86a51ec805dfe4ca9f2fdb\nff5ad56515bc0167500fb89d8b5ec70a\ne93f88a9beb9ddbeaff90a85d875467\ne66bbdf57fa6f7f575f257e5fe0a71cb\n2fb5fe84c28b8b35cc02882a83047172\n511962626501e4abf500cc506a763c18\ndca8ed788347b28c171cf359a50c99bc\n3ac664a7486a0bdff200a72c9245aee7\ndfa6c32dec07727ee9d8921ebe6d5b8e\n420d1b7af7ceaad59ad3ae277a5ccc98\n31055873d40dc262c7477eb29831a699\n39ec376b0df877986483e7894702b192\n1714b6e57c8c4983fb1aad5dae793ff4\n97bcc7a1f73bfba93e5399147a5b4763\n49e8bd4cf55ea566d97f019cb91636fd\n55e0897c0ac089a6da5cb3be8feeaadc\n530234273d5e31a57c7baeeaa3dedfc\nfcd90d547fdeb629f200a72c9245aee7\n9e5faa247753ad479289f0a3d35e8de4\nf51555db645f14468bac13e007a6e9\n4a1b48e1b53cb6547a3295b198e908bf\n20649c88556a7e7a113ef105f1affa3f\n91c12a0bdf98f5d220f29d4da2b76f7a\n6976cc9f5982474e9aae70753d127b0b\n83fb99fe62dab5308b55a52bfd1cce7a\nf4498022df553505c35f22936e5aea5c\n48debbfd63725a743978555bf44cfc9a\nf9c2bc7b4ef896e7146ff63b4c7525d9\n1ae184691a39e3d3e0e8bce75d28b114\nd1acd4916d3d3b57c48db2ed8f5e994c\ncdc8453c63ffc13e20f29d4da2b76f7a\nb55112c3c09949846a0cf750aa55c4f3\n43874d4b5154b6a0e3a6d6259addf247\nc3a1e04f49e80d22a10cf495b6dc4ef\n7448f1cba230298fcd61ab83ca5e9957\ne1d2157def9f3ff469856ab03b318817\n36a5117c64d8ca6ca10cf495b6dc4ef\n787a38da42c2026ec29f776eec462c6d\n1e0ada2b1891ea39e79e3bf25d5c768e\n5686e48a700bf4c989439bf55b857b9\nc6b98edfbb65320654b49557f8ea8b42\nd47353fc60390df85d918097f81825e3\ne703fadeba32d912452ffe4552686849\neafa5935e963b0035e875676652081cd\n15f605c6fffea827e7436c0fba14b4d2\na78990822fd4836a12615f8be9c552d\nd2e1dc21db9b45df6436916a86a90ed7\ne2ceb9bf23b498dda7431386d9d22644\n5ad845ccc1a5795ecc19d582c2bc11b6\n2a82a66ce6273dce601c8ebc794de3f4\na8f2c3adc0671c15c64e95fc6a597455\n9702eb7f07f013532764cfba57a5de73\n1ae9732840a315afab2c2809513f396e\n46adf74e07a86c55e370ad7734071a37\n16ba461c0d7c8435dd141480e2c154d3\nd373922da2a6c73b616f13ee256019e3\n25c292692638406620f29d4da2b76f7a\n8922c6c3435f16fee694960c91796f38\n4270f4f3372a1b24546b7395fb17f97e\nbd188c1db4c52a2ac35f22936e5aea5c\nd8f813278a49463db203f960004c7382\n6246696b7db8ab34eeae8bcbf655eede\n2180046932174984a10cf495b6dc4ef\n8decf42b145f98d148d2ba4615e03b21\nf49155170c175dff176be984cf2a7f4e\n8e308d28d463427f43f0e92e826556b8\n47716b1acaae5b8083653a771e25099b\n4b092065568af127d64c207b9313bbaf\n76680f2bc0d53c6e3112e33afb0a091c\n3d0308da43d52e3ef56f8ea3d9016e55\n3dab4ef100f906c2bda733a39f84326d\n6f7ba033fc5c0784468bac13e007a6e9\n43319fbb378083669d5b1db3ffcc1210\n8141677722f680076a2345809e2bb169\n4a8aaa19c413328d2557e2b5350c7e1f\ned4fb30733bd0979b1bb46d2556ba67d\n1328a95d69cefe32f200a72c9245aee7\n965000959c53a8612fdbcd3e1b829315\n86fa16c6da908e6b44221994b043fd86\n3ab98667cabf774e3343f5fadc4a2136\nb809864c779761ab7ac2a2313c9e8844\nd9838c0fcfd30659d9f8911ce020a037\n8d78c8489dc927dcb07f27f3519a9cd4\nddc63b22552ef13b734650590bacf709\nc8bd4d0ac34266ffaaa232d0915adae9\n598f0aea814b1d0f8db98a39370e7faf\n38e30aa86d7bd4e0574fbf5e869a42b6\n7c4aa4b3f916d26c9cdc71dce6a3b485\n4b841ea5b31090fe2bc9f17412005422\n2ccaaa66525d7f095473e57e894e0ef5\n488fc8215ab4e5e02edf5935f10637d1\nafeb58fbf8c45924cdf21e49b4ebfe68\n5785192c95cdd67b704715417c0f83c1\n1d234607fafd576b6dede2eec861f76\ndd1bc8c4063a6521456a647a9e7d914e\nc8fb314a1866d1d2428df271ebc70bc0\n189c2b53ef76d02978a20fe14185667\n4b7b3b54dc04df53c19f1e8ed99ac2fa\n8c0fd2f204d6008da1b543d55837199\n6165a435160e69bef997a8fb55b67177\n5e014eb2bd03daab9fbe97de4a41d527\n17bfc66c6bc0a99d68c415156b102065\n8590a6c8270375e34b5a812ecf553410\nb09f4d5af99be6c5f5f45e906b41d1f0\n4d24f5e0f3f394c030e91498c0369393\nafa0436d9cb1b19ec8c241cb24f7e0ac\nac488b046b024bdc3aa029ace5323fc1\nbb9109ffb1789e98e55e3289e5df0916\n9aec89a595e4682fbc5845a373118df7\na49107f738b26379428df271ebc70bc0\n56d5921f58898cbc56e8a11c9bc9a7f\n7c44aa72f314ee8e634b31c394824611\n4489a777dd90ebcce28605e174815eef\n3bb3b6b85e4e42873680ae1a67758160\ne1c16a07b6e974b951a95aaa6caba1d3\n6dbae14e481e8fb9333e0bf0b765fa12\nb70d970f8020c25dd141480e2c154d3\n998f600899c76e4583653a771e25099b\n974c3d82f8726f086b418c7d9fedcaa9\n695bc26f67e001e65bcdedfa3370f5e1\n45189b11f0524a85e921d7ca67acd2a\n61b40cc1d7e054cfaeea7738551d104\n9c35f00f81110738783854950b26f0d3\nd3d121f2e2d57b5cc5903e2355330295\na1c337c71f246f0b1d1a964dea8a7aab\nee1d28a50a2b71e129348d14ca881f7d\n552233e882a65b6431f5c3d8b8dbfe3\na75ff576da012340468bac13e007a6e9\nad1d30f2294f40dc622ac2f50deaba1f\nfe860c6a74a86905468bac13e007a6e9\n3d85915d8726cc1845aa033a20004998\nfd50bc89fc1c1cfb7041f1c5e7744b16\n5316fab78a6732f0428df271ebc70bc0\nb782800ed15ae74c6227cba038bf7c95\nb3aea199d8f8945d3c8089ca2f2a9299\nf7c84d18011f76fe5e18329bdc55fc9\nd3f5e04481e69974d1521952154c90ff\n35e4f3bca48aad294361eef216dfeaa6\nc08d4483e70f02e5322b377b3e7c8ad8\na242c0446b186585852e57cec5098e60\nd09039d34746615fbb164ad50a9faee3\nd810d7f83632da71556235a31d374eb5\nca7202152b84a70fc6a4281cffc3c014\n34ab29cea66952f16f48edd113a40fce\na49df2707037f82a94ce9d7b04676231\n144d0880f61d813ef7b860bd772a37\n625861912ac0d62651a95aaa6caba1d3\n6b44be4025c966d4672601793664460d\n1cd4a2c1b3b4a9661487189ebf835715\naa7f127bb8cd9db73755eb267a6f3b6b\n9e0eb55ae7af7f8a61fbb658aa965606\n3b56b3bd4f874de23781057335c8a2e8\nf1b928427f5a3a7fc6d5ebddbbbc39f\n28bdade3806ef2f328044fe9244db50a\ne20b8a9c388eeb012c8b6ee41d7d5d62\n3980afb8f986988daf285e0d3f56d074\n247de29743ed24c5e61b9ff60b1be412\n35d8d94bdd379556a37f3fc191551700\n85e54cec1c6808009bc0c5b67eaafbc\n29e9a4beeaeea1becf71e2e014ff6f\n88ad6f5df57cf8ea16abce8cb03e7794\n88fda6df0a162605e52943dcb52313c\n2ba7ea78b9b6e2a6b420256a03f575c0\n7bf6249a031b5095ddd41159baaa3ad5\nfd7741b7927726bda37f3fc191551700\n60963ce07aa742382a9eb0f146e94477\n430941674faedcff6436916a86a90ed7\nc6762641f741acc2a19bced881c9e641\ne7e94f8dbbe8c1e9784da3853aae78cd\n312cfe616ce515be5826faa473422ba6\n2cbcc226b4f952f29e1c4d21c8ecae7d\nf8ccef3ebeaac7c0539e4d34a3035bd8\nd0cf2f187acda5736be7348aa770e4ca\n48723bca810f80cf7c84d27684eb86f7\n844a5b7af9b67510b1bb46d2556ba67d\n8dcccd3d9221f9a0d61b6a34f3fd808c\n3c6d7c6ce950917b3a93df79ef2b80ef\n5dbed4f17ebc271a3aac79fb478fb6b\nc20ff7778ca2b8ca86ac29addefc0f11\n3ca3c91dae8d2cbdf56f8ea3d9016e55\n192fdf42f5a2623d673ddeabdcc8c6e\n3ff887eaebf0bc7e9d2b99af43da16b3\n48f5446e6ac9c1b51f1446551412bde4\na13fa4cf0dfdd5b58f7f0d2c9c57704b\nd513c968e5bfefd2516624d6e93a68b\n768ea3241699f663f1cb19f636b1c2bd\na990f6d75c669f4351a95aaa6caba1d3\nec42bd73d57580a85b48f89d50b1db79\n9c10e71c06558c3b1bb46d2556ba67d\n189cffefcdd5cb071a126804ae24042\n354c1c380911fd2f4fa6b747e2cb679\n37c5ac3d5b34761add75f724c0ccbe00\n468780ef4ace9a422e877e82c90c24d\n7486c73293cb8af3175a3b42530b4c51\n58dfa36440ada6cf2a9eb0f146e94477\n718c595ae03a78208b58723318e7adc2\n6c449b92891754c6b8b6b17d4ce17d67\n35f6b9780e173878a8c38723d07b122f\n9f69ac0aaab969682a9eb0f146e94477\n86c8a3137a716d70e742b0b5e87bec54\nc1aef2e67a9608511c4ba4758a592406\n32e6ee437b8fa3fb5e52943dcb52313c\n35d473527fa9bd8cbdb24a67dc08c308\n12909f5d613953b8b3c9b3f81618206b\n82c6851526bf7350b5554d042286b030\n9eaafc3581357b05d52b599fafc842f\n92a718b74a2e5e84fd2d6c7ed5a8dbd\n63a4e46bbbd855fc2b63d3b2a8c4e8b\n7a5eba46ba4cfac35aa429db266f0c30\nffbb51fcc3955d01b67c620b30c63392\n4a30d2147d0e27d13ded1857c15b5b6\ne920afce255de6ee3781057335c8a2e8\ndb45ce3926c3ac69e8d8ad3bdef6aca2\n39201299cf83ec2577763486d77d1cb\n3d2fbd9bfdfe08573a93df79ef2b80ef\n5621ebf65ffd38468772afa45900d07f\nd2efbf5a3b7ddbf94c0aa7c1668459cf\n167df2c10c116eb5d61b6a34f3fd808c\n5135ad38043cfe64eb766e5a46fceab\n5ec7fa8170eee943713e820becfd99b\n19d35f3e0c0b402125ddb89f02fe6cc0\n27d42437168ccd7ddd75f724c0ccbe00\neb1bd7389854311c14f284ebe538e531\n8bbbfdbec9251733ace5721ccacba16\n94cfcfb74e246f938acb0ff76f4aec7d\nb0c2225ab347e28f1a48cf85d161a723\na421aeec78440e40d3a3ff116860ca63\n2cb6de89f5b6e702b626f6a649199824\n9446a1c34cc06eb518b1741f84b73b\n49930a07ed003273fbeda5389ab05f5f\n1552f1a6521bb54a4bb135bcd06914d\ne1c7c7fad8802d67fd6539c5080c830b\n876d92ce6a0e4bf399588eee976baae\nf18093ac0242d439f500cc506a763c18\nfad616172dbd52649f06afd991af5139\n244a8476648bd073834daea73aa18748\n7521398f7ab70a073c1d9add3a87bd2d\n6a81b52d03080172ea7256175786076\n33211aabfefa14603b05c2ad25b4380f\ncd7feedd6041209131ac5fb37e6c8324\n90917495a9603208c368040825ed335\ncf32af5869fee4d34eb766e5a46fceab\n8aacf6e90bfa4610becf71e2e014ff6f\na17d5aa16a529a88cbc76a30015552a\ndf72f352c7fedcfad9951d9ecda74409\nb28d1b3e81f407571c02ebb3dd0baeb1\n4c60f32b6efdc7217dfb1ee6a4b12bf8\n4e2ca20091449636599389919f6522e6\nd164a37bffeb5a83f04c8b6c3407554\n704e60e6e5be85e1f500cc506a763c18\n5130947e5f18e73a8321b7d65a99d2a\ne9b2aebf673e516d1f0d59cde6139796\nadd26d8f4f91ba04c84b95bddf75b22d\nfce2b933f93d132f4f45033b2f001552\n2a9b4308929f91a6e1007bcfcf09901\n93bb1cd910f054818c2e7159929c406f\n5357fd81d212951a1c64dffb0265c4d6\nd953bbe38edbc6f4ea999fe4ffdc2504\n441d0b3f687e3721fed6082009db27d\n8c2430564a8e3a2354277bd8a941f068\n7f42d57ca7041f2df43d27ed950b5659\ne9bccdd7a52f13329b3f352e6fa9112e\n33395dcb83b43eee21e570d3da54bf9d\n9fbcae2f132db088b09b4c3b88665c4c\n8d1ef0a2c958b23f22aa128014a842c4\n263e3ee9f0182cc48e35db9103756ad5\nc3858a8b73dcb137e3bdba9430565083\n3f18c23d7628966848368c1a2f71c5f3\nf03a4533fe681a155b48f89d50b1db79\n5d756a52f6f361abf500cc506a763c18\nccac541c0db2044736815730d7fe4119\n1cb102a066270f79db1230abb5fc0167\ne23ae6404dae972093c80fb5c792f223\ne042d636cfca46f56436916a86a90ed7\nc1192c946a99ee529bdb511fb702b5ae\nd2592adba4e8e62648368c1a2f71c5f3\nfe3dc721f5026196d61b6a34f3fd808c\nef77d2e622786026d32bfc7a837f790\n9a22505d1e6221533c35e65001c8c258\nf84ba2039d0a4ec5afe717997470b28d\n7f198a2357dec222f98feeb6b46f3cac\n85f3dc3318f5200c8672c9b355cd2075\n77d9a23f45c888e595551e0d9e50cb0d\n1790131f5f74b1ed973aff268eb6b00c\n73140624a636925ada37be44e2d84539\nb6749c2b917d4aad949b12cf3977a48b\n81fad64b8fd8f010b17445a1c29f6d34\n28b5cb11ead4c878fd988235de2147e\n783f141774ea26e259d587c4b86a22ea\nde683c906ed97d7456ca31471168385\n65ccd33df41999496d6573f48a06281\ndee6d83ec808d673c4e77c640c2391c7\n90a59a473e9d110ae13bf7a39e9b5432\na295d3ca78e2fa9a6a2345809e2bb169\n515492715a04d8756a2345809e2bb169\n158a95b4da25aa1fa37f3fc191551700\neec2ea5ac4e048836a2345809e2bb169\nc59c26c90a724e84ce27281f3b76d1f5\n7015c7c8ee74f69313ded1857c15b5b6\n787ba4e958f1bbe88ec77d0d80815cf8\n554bfeff3c44a3d6425b2c354eccabaf\ne9c2c31da871e0d6c203986ffbbb5e4a\ncbe2dc469c47bb80425b2c354eccabaf\nee975a7e62edc7996a2345809e2bb169\nab7eaf660f1bf4db23fa56f2e03fa992\n"
  },
  {
    "path": "data/filelists/02958343_train.lst",
    "content": "a53c3515eff9f3bc2f732d6dce34e9b3\n70b8730b003c345159139efcde1fedcb\n78c3bf6ae1bdf75419b43924bf120208\nb0801e9d8e004e7758dbdf2b5c6acfca\n20a3df3de67f309d8e35db9103756ad5\n6fcd4ab4d968a975715e04edb8af9c53\n1a30678509a1fdfa7fb5267a071ae23a\nfe9c6862f758ee056ce6bb1d0811960f\n5fc83a88645b1869514e3d96995c555d\n40313368870df2c0df59ad08996c77e8\nb1736379a44bc475352a2541f8b4515a\n66d4d1f28cdbe97559139efcde1fedcb\n3ea68e00dff2847f1f0fdc8ac183f8b\n4e9a489d830e285b59139efcde1fedcb\nd6786ef05af6127d58e7058c5c570964\n83731bad1b7d6ec531fde3a1e19a4940\nb06c5da878580bec3c0146ad3ea2d7d\n9907db7f1b96ee9a8b55a52bfd1cce7a\n4a423ae9a28afe3588cf40718544e7cc\nc9b956006607a48c75dadc997718614d\nbacc3c08f58dd96152c6e8b4fe0351e5\ne8745e2d659061ee4a15d27f5dbfc7ba\ne64dd4ff16eab5752a9eb0f146e94477\n19d0843797b8b2216abce8cb03e7794\n67a3dfa9fb2d1f2bbda733a39f84326d\n586da8cf648767222a9eb0f146e94477\nf10e32c6daaf237f13ded1857c15b5b6\n74cf231265731c2f8a1aed4fb5fe5280\n25de320e58cb3898f43db49cede9f847\ned6bf649ad5b3d82b1bb46d2556ba67d\n63b0fcfb7a1ac7efe8d8cc304201f02\n9f08e434ad95c4bbbc37558785e0529e\nbebfba98a5e97c6180360680c1602c7d\n1355f3aa779b599b16abce8cb03e7794\nddd17a0d7ca713f2291ea03049d40375\nee9b3f31f40a0161b1fa0b2eada93a95\n1104f0924e03f2b6fc5886e868449015\nd695f936edcc28d497df6383472cc5b6\n145e18e4ec54ed5792abb3e9ac4cd40c\n82ede85c805bd5a85af609a73d2c2947\nd79f66a4566ff981424db5a60837de26\n875bc6efc7f33c052e877e82c90c24d\n2521a90182ccc29c253c03b7df20edd5\n8cc9aaf75a2fb056dcff2899f073ea9d\n985763be7e2b18ec16abce8cb03e7794\n2b0207d7f6a6f23bf0ff8cc77ea4c273\n5343e944a7753108aa69dfdc5532bb13\ne7c4b54fe56d9288dd1e15301c83686f\nf45268c928a4b3fc8bc584bb94b0b13b\n550d6c4149699f4f93de227e8a339990\n3ed07ff8b46b2bdcb1bb46d2556ba67d\n792a93f2b8dcfe7116abce8cb03e7794\n73e977c312f8628b1d65faadf0df8f28\n6ad0379c2f24581a1c0f83a9278e7dbc\n74b37c2f88e0ef7a469bb3d27ee3bc4e\nfea2f9ae1e25b74c12f962c15d41de4d\n31ae8e03d831a85cafe1d4530f4c6e24\n338eb8e836639e09f8f1f8fdb364ff3c\n2f0ca88dc76e39a7ff1370452e3a0154\n1336353d15efdf010f6f717db02df67\nc769d45be62178f516abce8cb03e7794\nbfa0a0a7862c2cf3c2179f10f381de6d\n792e31b0bc8415a13ded1857c15b5b6\na9876012922192273a8cad69dd295a56\n21b8d0946135481a8772afa45900d07f\nd2064d59beb9f24e8810bd18ea9969c\n9fc18cf33ac91041425b2c354eccabaf\nfb97ee1707f495bbdcff2899f073ea9d\nbad0a52f07afc2319ed410a010efa019\n8efced0ecbd1dd99713391d1ea8d388\n344eb3613a1100634591011e8f7af9ba\n9539149f41e453052a9eb0f146e94477\n46c504c9760fcf0e7540f431cab4686\n5fe9cca902d8135aa36fba949f601317\n8c710a2319c1a5683f86d898378e5d97\na944ae569bbff87716abce8cb03e7794\n414ae320397821af8bf92e87e504146a\nfffb1660a38af30ba4cf3601fb6b2442\n746765dbc0106bfabda733a39f84326d\n9e52d425db48a33bbda733a39f84326d\n9c846ae63f5fbd9a16abce8cb03e7794\n26e2b2920a2330b2cdb8ce1e61248143\n84f258f2969c02de6f94a44ce504367\n985082c9239527ed728fa2df514c65d4\n2ec9a7479a8ece30ebe23ea7d95f2a30\n2f503625718536ad5d9d397842621b7\ne9573675928b6f1c2a9eb0f146e94477\ncd2ac3225eb36c0e1a04a94f2d5fba0a\n73dd68fb65a4f4d25d9d397842621b7\n12b5e4f52c22b348d8499d8846cb4c3b\na3d0bbca6bf8a565dc90bfc1d450ece8\n1e12573f2d8ffca667789dfcc3262f70\n40f160e49a6d0b3b3e483abd80a2f41\n5410d4faab53ce49e9d8921ebe6d5b8e\nb1c6a021c1c47884c9463ecce7643e8e\nfe0c5b57b5cf4226bda733a39f84326d\na0fe4aac120d5f8a5145cad7315443b3\n95d18b69c9624a05473f10e6caaeca56\nea37a9b97e092552b927782fc69a1fbb\n8ceb581fe28a6496510c6353f9f7a5e3\n7d7af9263109f8aed4fdf31cc2d78fd0\n98d4f1e36d400acf5fd7e9b026930cd3\n1a1de15e572e039df085b75b20c2db33\n9375ded98380ccc77bbf13cb42ad9d73\n1a56d596c77ad5936fa87a658faf1d26\n6a13836c3bc23bf316d7d2293315a234\n4773cf28df771861b112e5ac235c21b7\n6dbb3c5d7ce105243afcf7df86a03c60\n453164c9199ebec7e80b7eb39c475065\n93486febc6ffc1aa7f04cab89c8d2959\na36c53acb3255d1e84b1aa0ed7e58be1\nb2e36774150b580e21f6e2b0f75cf9c4\n2655a48c8867146bf63ee8a34069b7c5\n12f2905dc029f59a2479fbc7da5ed22b\ne3cf84131f9293a5ea0b6fe51a588e07\n97128412dfd802be2a9eb0f146e94477\n9bc421a5b0bd481b4e76a17e357a8d36\n2b08d1ac4111542f3a2b1a2e5e169910\ne0f1de19f0f65ce09123224ebaa118d3\nab7b5025c9e9c1921cb81cb1632a5e\n36bc228a8722bf27473f10e6caaeca56\nfdd3f02c294518341944f01d3ab2091b\n6a758f23f6dbf27923978edad4629e6d\n286ce4a8390b317f93680c5a9a367b4a\n3d693af6fbae47f9cfb661f69a0dfbbd\nc3e49f8c560ccc216108f064aff2426d\nf60779c934ee51eddd1e15301c83686f\n92ff3c7b2b8b1f65e2693f33cdca907b\ncaa7b1a7dabd0fd3be0e4b4a1a900aa0\na86655c0ca05c2646d3e11439c6c22c8\nfa563c2b77839dafc0e3666c7d0ec7d0\n61f70557b8bda7422ee0f9a97b71d505\nc16bafa65123cddfce29c905218d4398\neb144af0fef08314f00cd8c386c592fe\na262c2044977b6eb52ab7aae4be20d81\nd5f1637a5c9479e0185ce5d54f27f6b9\nfe29b245be45318c80e6a7abc49befc7\n2dd2a5154bcf52c2aeebd3372dbf7ae6\n93c56f05dfcd4248274334f2451a8eb\n6e76975ba073f2a89ba83e6d08a84f26\n3344ba7f18d9623d549733b112275285\n6bfc2bf0e72a0f66f500cc506a763c18\n7f2b01a53684e72154b49557f8ea8b42\na532b61524432d454ed192f2298faac\n690609438d922525ff1370452e3a0154\n62b14fc115d98999f0776ca5816850f0\nb41bb2a3159a9506977b27045b1d8055\nc43b1ebad0ba016a7fd25564c2e888e\n7c651c4f55c5ca57d76439fb95cdd2ed\nac56c7527df057173c5d25c30835eee9\n67e2f8985a28e895a592cf90fabddd34\nd5d47fe322179a83473f10e6caaeca56\n83c31a4085063873dc2afbe43bc71afa\n885a8852bda6bad7774c883319711a53\ne15f9acabfa0adc5470d3ca356fc4190\n9cdd8cd41303cbdc650bba674124a73b\n65f0321c5aa8c303a1936d27bf774e9\nf9584908ada1c74bc2b93f7e42be3ac1\n97d0903cf8912c3ee9d790a68c844819\n75bb1fc144e6d17a6d00e450aa03077c\n840f98dcf50b48f9a7fd25564c2e888e\n5b925881cf8678cabda733a39f84326d\nd83fd4f79f16a1313c9d2d3d4dc0edb0\n435d3d83b7511e39f44e15caa8fd94b4\n42af1d5d3b2524003e241901f2025878\n831a3689b2f48664473f10e6caaeca56\n425db95a3377f4d6e62a01eefce42a80\n17600a4881b1ff6a5c14de0cb75f4d3e\n359841936db476cc8cf4cf458d5ff7b\nc46a940147e6da66ca92a4cdad802b45\nd3869e2527ff032623276041d0efb3cb\nb30efada80553a1d202258c0423dde73\n41b4832983f44aa3a7fd25564c2e888e\nd4434de782382a47a7e7e5ea49ad8e45\nf1d902e502f474313fdffa7a79289f65\n10e99b1475098c0aaa69dfdc5532bb13\n89c7e63c3d3d14aa17b597d473206848\nbb3c68db5dc0052e98b54df7430097ce\n9aec898631a69b6b5da1f915cad9a74\n6c39e401487c95e9ee897525d11b0599\nbbc2f2ffeec425a38eac574d099cd5d2\n1d2c5ee3b5ef205164bd4e0c23ded276\nd4abda76f4db60086d07c55cf995503e\nd4512a374073ae95199f3841b86452c3\n3a7e096d05d688548413778731d6cd28\n1b94aad142e6c2b8af9f38a1ee687286\ne4be3f3bc271ff71c805dfe4ca9f2fdb\ndf1d1694cb98584cc23e2024862e7f3\n6aa8f648cc8df63ab2c17ece4015d55\n15c785a7505992c3a9be8fd09fb14f4f\nec07cd8db8f2bea851f021b9ed69c58\n4fd6fe1f81a83dcee6513d84422cefc4\n26bc52b1307fca053e5ddfb0ef6345db\na77879318434261612725caceb9cca76\n66be76d60405c58ae02ca9d4b3cbc724\n62499fa5041de142707223ebf2d3b38\n425ba801e904cb50f3aaed7e86215c7b\n96e3179460185d889130d420a26edb84\n4e009085e3905f2159139efcde1fedcb\n1137cd58d6a45c6659a47b1880958de9\n634b6b50c7e8912f2ce3f1cb66884331\n66baad4c6e4bfa08cfd826dd468a5497\n7f09e6522f212f94512af8eced68fa8\n903b043072a209ba8290d32865eb3245\n7b00e029725c0c96473f10e6caaeca56\n62eda45907bcb75c320fa6e2cd857828\n5aac7e6813771b2f22cd6c209adfc63b\n50f4fff3a26ea3518b3ab49d2e0e41ab\ndf8000281bcfdf0754f3692df239bb9b\nbd29875d6aa7be1b2a80b185a779af6c\n9b4324a33b1dbad5a7fd25564c2e888e\nba89184f58f21ff63343f5fadc4a2136\nda5ee2c950a848f0af8a2e210ebd5168\n40c05e511efd3fa96945ae93118ea9d6\n63069a0c741a4d228b7c308bd543da59\n7dfe2b1451449501588556e812e00901\nca44101f11f4346a34e8e5a47ae999\n82bd66a7ffcb351c1527e35a652f449\n12cf05b9f5f2d2c195c8d3a7db4dbe65\nf1c277f7fc421492fbe59dad8284dc0\n198d8e274c59511b36a1a31af8f59\nebe05fb264a56628d7ef29ade0716b6c\n6dd48d74d8bc67e7a7fd25564c2e888e\ncdef1867e841d4bfafdee870abc9eca\ndb14f415a203403e2d7d789814cae761\nb12e8616bb73f5daccaf7041f92bc85b\nfc86bf465674ec8b7c3c6f82a395b347\nf605c1f4d1be8d00f63ee8a34069b7c5\ndb86af2bec3e48d7beda80d430b92891\nfaeda504709a7af489d347432ecb438c\n7219c2a7e7e04850374462542bf2aa29\ncc7f51159a1a12fea7fd25564c2e888e\n89eb1c5370b80567473f10e6caaeca56\n5da4c0cd066b7d0889d347432ecb438c\nb7f957411c3353432fedd0aa3d156746\n2cccdc287a5329c2ca92a4cdad802b45\nb17d638e7def9adbc8a6c4a50ada6f9f\n15cc37ac9b3b756acfd826dd468a5497\n72a35a471514d6299e317a6cc797b629\n2881a09fc1f3d2be9dab4604fbb1a7b4\n79d4876cf799516b977b27045b1d8055\n2dbfe9c041fc6b3a94ce9d7b04676231\n2dbbd2bec94e4a7440eaf79934ff53b6\n63f6a2c7ee7c667ba0b677182d16c198\n2f7cf2c2d170e3c936f37029483b3e41\ne9233510c6e0f2672a9eb0f146e94477\n44559a87bc7a0bb3121f82ae456ac81\nf6ed076d16960558e6748b6322a06ee3\n40f0bac5bcb4f8686ff5dbbe822945fd\na238facc26681bac8efc69f75162eba1\n40f2f3962e360a3c16abce8cb03e7794\n212685bfc2a32cd9fe8cfdfb3bfc3376\nfd3b75f7f1e9172fb6f657757c95f74e\na7bc9db453e66329abc6b562f9bbf76\nd6e27c6523a3f2b58b8cd97e9d1c6a86\n9ec59185338edfde4cb9bf7caeb24dd3\n52a1d23a09e38c4d50577cf04f3bf74a\n22654a0cc1ba382c4eace6243432632\na5b7cc1a5ab2828b28b0b7b876595fb8\n72122bdcd4ddcb96a0c0a4b1a1c1a4ad\n4b67e004d83d62bca1aea50fbc4b17d\n66bdbc812bd0a196e194052f3f12cb2e\nd569a1b7066ce775b738b317b28286f9\nc4744d66623e04b7518f93fcf50bd8df\n2f13fc44e7e06816a134736201a79843\nbf652fdb40c4cb3696ab9df3b3d7537e\nedbace6013d1c12ae9e1016860f17753\n38b80589a780fc3af63ee8a34069b7c5\ne61dadc02535e6e44b6e62b17dc78f70\n832a8f6cfe462e48402013bef9b89b74\n37887931377037621f71e734a2d317fb\n99a7f916d137e69bf2cdad303f49c9f9\n8bb2ae81ca9e9a4ed14ae991e75ee782\n5bb83a60fb8d5f45a1089359fc10d7fb\n1f416598fe329a88b1bb46d2556ba67d\ndd37570a8876c4a4a513de4eb79b310d\na44fb2514e9ab51f79138cc3f6db7577\n485df8eb9c410c132a9eb0f146e94477\n1cde62b063e14777c9152a706245d48\n3b95f46c0133167b80e98029b8cda1b\n7e4667d837e39d0945e930a0b8a8cbc8\nf60955dcc1d1c48687dc1da2515df8f7\n6ee1f28244a72fcadad3ef3f3ebed150\nebb3c22708c9ad3a55064a110bff2f03\n13d090612aec3d80ca92a4cdad802b45\nbb7fec347b2b57498747b160cf027f1\ne5aae7748aac94086228d448ae07dd2b\n719912031bd692fbd02bf342687ad381\n2fe7e3fc47dad6c7afe1d4530f4c6e24\n8d6de65bee9c269bf222d93492cfe0b9\n49defa8dd73d03f1a7fd25564c2e888e\n2401f097228fdc1348b30181b0729b3\n46726bf3daab9d14b1bb46d2556ba67d\n6f1888091dcf4ca550577cf04f3bf74a\n6ee7fc93288d678e3ab3dfa44f5fab01\na4aede8e488db95220363e2561dd589a\ndd5eceae670f164ca134736201a79843\n80e839edb7aeae0bc54427e2c0943fd5\neee2c0e2912f27b15a49026b22f63b06\ne9c5e6d46c47129c5b72003cd427d0c1\n8e145be3c332199dd6821061f4432a0\n1687b77b048d1aaf635b88185c42637a\n7eeebaaf4df31022aaafd94b9f216ef6\ncdfe4dc408f4ca84aaafd94b9f216ef6\nf9cbd331bd475e07dc1fa1f50eb490cc\n2d817a6f23d35494d991a658ca89186\n2c8e9ae34ce33a40ab2c2809513f396e\n3bfa196d1b48f1e0c5dccef20baf829a\naefcbac53b05ed5a27404deef339faa\n8c01303b68d30be5b9ad5039d820c924\n9aaf299edeecc76e7dfb1ee6a4b12bf8\nea58938dca17f3853c9cf79df3851b10\nf37c7ab91bef514b4125854591376336\nae1c1141ce4bfde9d66a73de5847ea37\nbe1929020e6bb4c9c2920de4c5efc2ee\n4c3b9ecbafc80b9cd485372bb746f3c7\n8db161338795c215b1bb46d2556ba67d\n924e1a54fad65f4de74f89cd7bde93ef\ndf672140efe7b8ca89e9a9eee39907f\ne66cb97aabb79193da5cb3be8feeaadc\n119033fe083145e22f31600ac759c763\ne57092f6c51ed37dafa781871c8b9ebb\n75b8fc64f98a71969d69712f9d08c005\nfbe6ff98196a8ddf1992fbc3c9e8b937\n7275ca45638f16041899a3ad18d10126\n3093f587c5660c7a473f10e6caaeca56\n55c545ac0d94ea16becf71e2e014ff6f\n8824c06f737f2888e35db9103756ad5\nc29ff3df2cb0139f635939ef1a7d59b4\nd21ffd4838ff2ca75a30f4aa03635c5a\ne6643b95e245410b8efc69f75162eba1\n9ab8a24e82568c598c2c132c71e94f7c\n72d4244540e81c671d9826a79afd9186\n5876e90c8f0b15e112ed57dd1bc82aa3\n924599eb8b6aa6429ed410a010efa019\n25a44213579e75782e877e82c90c24d\n24d7494c6b92c6e7c1bbb501b1d87871\n9f7b4a82becac9cd5568b8cbf53329df\nea6d538fb5cf3c0bacdcbcbaae0ea58b\nc54dbefca6290ee8a3b392b986583\nd224a01422266fc51b3c1c9f0ad4025\n8997065fe94841771ef06e9b490109d8\n2fc27dad23406a2a7ae33d942430658c\n535f244d5b6043e8cbc76a30015552a\n93942ab3fc970415c596a26318046886\n45bbe9d4f12433cf4f2af69a26c97402\n1641efa5c92514d86c4f4dbcda5f2fc0\n5c8f71dcfe980f714f3a54559bf4cbcb\n7c46bfff2f90f11044592db9be5db5c8\n2228a428bfa91e4f771592b49641a847\ndbd67f5f505a795161c6c61410fc904b\n72b2c7b2a49d46ac2a9eb0f146e94477\n60c6194b6f164cdc30276fff5ca3093a\na2179820a01ca67f1a144f5cf9567bf5\ndb1e6a78a84615b83c9d2d3d4dc0edb0\nd4e7286d53a7236374b5e1a654a4b1fc\nbf1893badd1c6bef59a47b1880958de9\n43cb6a878cf18fd92a9eb0f146e94477\neebc48c480032e45473f10e6caaeca56\na4d535e1b1d3c153ff23af07d9064736\n29b714c4aee36c9d6108f064aff2426d\n4024c9fccd9fce80bda733a39f84326d\n90f85f62885afeec65ca154580c5c7a\n7be86bfa8edd04fdced2b3ef33cc51ac\n637a26dc6b1a3f47e7540f431cab4686\n82b9bbf2c5c630d9acc1f3191aab65d4\n6d89098a33908cbd77b59844decf6d46\n911029433b8ff0f1afe1d4530f4c6e24\n4bdcae58e18e4c94c1bbb501b1d87871\n9909e197f7383a976d07c55cf995503e\ne1c3687f400be151cd21a68c6dc7b5e3\n2df4b1797723b140419bf2f84339ec5c\nbfa01c632be2eb06e8a3b392b986583\n6d7472ea15dd5c18433f1e7c64b884cb\n21eba3c73a705597db2c2b0116c82e56\nbb39689b3e6568e85ea174ca141ad66c\n2ecbacde09270d49cbf57aaa2ef6598c\n30f4b931145acc98a3049d0dcf503cdf\nfab45f900797908bbda733a39f84326d\nef7f623beb7260287b5adf84ce6f7865\n3da0d2ecb594ceae348b30181b0729b3\na74c1aa71334c6af20363e2561dd589a\n4a6dea7ffa04531cf63ee8a34069b7c5\n6dda1440d653d0c3bc5845a373118df7\n411d95c06a7e9456b3b0f00a15b90e0a\nd894c407d7fcca0d36294458115cf41c\n77a170eab59d866d8a1aed4fb5fe5280\ndcdee01d7fe6e1a76ad064d1c5fdd7c\n36c4d31969a8c1111a31578ee9a364cd\n6615a61a799c144e84306f3bf0a1f2d7\n324434f8eea2839bf63ee8a34069b7c5\nd4e611a541a5b01473f10e6caaeca56\n7bd15f738bf2a402d4fdf31cc2d78fd0\nb0945cdea946d1a363c65629bee30ef9\n360cc5c25fd6bf20ea50ea60f77ab4cb\nd474f5971b5e8ecae9795e5d56b7e9f\n115170b8b44f9e2e5b2bb28aa7453162\n721ef3846535bfad179005454847728d\n83f26e6b8298c3a0a134736201a79843\n298e8c0d9ce547b4e1e2aee44e822aa9\n32f458e413dfce699cf7b84b43bdd8f\nd0bf09ffa93ba912582e5e3e7771ea25\ne39215e03ab8e65e68428aabd2c41ee8\n40e7559b88089f4ba7fd25564c2e888e\nf882454f6fe1c5bcc0e3666c7d0ec7d0\n492f36ac59d2d3eb450d7227edc25975\n1c351358afff1cc582e5e3e7771ea25\n490812763fa965b8473f10e6caaeca56\n62128b128c9a54c6389cb55d070b61d3\n406ff3d73672bb2b21669bcdba443569\n7fb5dcec8e6745554ddfff13f461e46e\nb790d70257a8191a29984c4afd2e98a4\n2e37a9a6abbdf6cf25d175f53644eac1\n94edffd805dc965ca5626f7e1b38f05f\ndd240a8334032434bda733a39f84326d\nb216e194c572e9ff99ef493efb31e54\na16ff37768fe676473d32960f279a9cb\nc8b196595745bbd241c181f4a7e1bfa5\nff809d58a66fb4e85174ee1075ae80c1\n42ccff0d88276152e341b5704aa568bd\ncde88b5900e8dfba725a7749daae1afa\n21205bdb7ca9be1d977e464a4b82757d\n46a71fe0e651986fcfd826dd468a5497\ne7b9a6485b15921d51a95aaa6caba1d3\nf643555dde0f0838346c6b68550f2695\nde1564379b1315a3efadfa67efa023c\n61ff6beffb91b6a82a9eb0f146e94477\nc9d53c90471eeb06ed3696d854eee1ec\n86736cf3dc841eafde5db5d0d11befd1\n9648aaf755e6556e2a9eb0f146e94477\n7112c1cb9b6461c9a551e6372afde900\n64ee682c9dd2ee467cfc46ae22f84c92\nec994111db1da0d6927e12317acf49e7\n373cf6c8f79376482d7d789814cae761\nd55179fa8bec81799779c759176b96e3\ncac12f8e291f3d1fe43409f9be327bbe\n570a9903fc7fa557d0a4f72b67c7f064\n9fb89a485c814f7e18f8769175b6766b\n6d3d67957e1ca228ca92a4cdad802b45\nf4b86f895a221f353b0907d01b34682a\ne7141fa81a2828841e8bd72b0feca0a8\n9fa56c19e4d54cca99c8d14f483ffc82\ndc3c6748e5f96cee9b3f352e6fa9112e\n63599f1dc1511c25d76439fb95cdd2ed\n8b22da6bba6c81452af3f274e91bb46f\ndd184b3f41891cd317c40808ff7018fc\n9e2e375fd5fd55b02a9eb0f146e94477\n18d9ac72442260e0e97c6bb243ef67d\nad6572f7ac90b9bf2949d5274e5ab643\n6af0ad6553d3f42f21f6e2b0f75cf9c4\n2076be423fa5bb9f9e908ecb03b3d6fb\n7b57af1bd2d83363ea1216357e7f0768\ncaa26e8b5033be6ac02f176e44f0fcec\nc911f8a7084e7929593b8de380af24a3\na8f7a7271a02fd56afe1d4530f4c6e24\ncb5fd4e2c29b9193a134736201a79843\ne7f94161bd90444f8cf4cf458d5ff7b\nb5367bf3cb07b8ea593fee7ac9114e04\ne90b0381a7c8841c1c65421fe734e7bc\n7c85e6cf9c4f46e91cc13e432d5756b8\n26b7a9c6c7e74829eabc798aaf5f039f\nb21bc9621960f418c330b66f68c70be2\n4e42e2b6986a3d86a20249b45c17a5c9\na3672e5ee27e389ab19dbf7b5aff7ec6\n52f592a68c828a1e190cf42afcf85660\nbcc3a1e280cb9153618e9d35559b7aa\n2254e63f695a1cccbbae182929bb7dd\n785cb635a01fb7ab2a9eb0f146e94477\n193ec1089f0a98a36518e6cd1fbc5fab\nf94003409831db21f2cdad303f49c9f9\n82b9ce9740bfd28fe9fab7ec4b8a907e\ndc8aef6a8c88997a582e5e3e7771ea25\n793a8675d7a5fecd653effc8a32f84f1\n381bf84829066031a134736201a79843\n85cb3207e15a1bf8582e5e3e7771ea25\ncb5a320fbd846fac28e9ca8e8fb04e0a\na4017ff2cc8b9150f4d6a46019767b57\n884014d60de73249af551becaeca18e5\n4cecc9df9c777804816bd8f64e08b2bc\nf2a990659efa05c5452d05118c2bf489\na3d77c6b58ea6e75e4b68d3b17c43658\n9a63aef0a99f7bfab2c2809513f396e\n354274e1c27653a318d9ca1acf6633f6\n14330011009dacfed49701eac14326ae\nbca97563f170ff4ad2bcce019eeaafbe\n272791fdabf46b2d5921daf0138cfe67\ne09c2528f56f04d03e241901f2025878\nba0fa0e807fd275e0445fc6d980dd5c\na51b3b0cbd9c24f3a7fd25564c2e888e\na2c9c1b4bf918cf6d2dcdf586ee56d5a\n6fce36e4df1eac4fa7fd25564c2e888e\ne97d26f05a68f833cd89498c213958c8\n8a28abfb5751e767b9f455b31f6fc3b6\neb5e956c2dbd44248bb11dbc05ffaa74\ncb0bffd770644cebcfd826dd468a5497\nd6dab47acb946364f0cf9a4b3162f487\nfd765ab34e7907db186bed5098d348af\n15d6cd7877c6601d9ed410a010efa019\n25378c7370a06c497ef186a2ac298b0c\n22428fd70b02b83ffc567bb1bd08c1ae\nb5a6e71a63189e53e8a3b392b986583\ne01a56af0788551e7aa225b44626f301\n42134787c805fffe1ab9df4be75138d0\n702edad0d2fa9eda2a9eb0f146e94477\nf0d16187cae178e7e9d8921ebe6d5b8e\n5ebe8c53a7b1f554f445715e3bbcd7d0\nbeef4a450e0d42db6436916a86a90ed7\nde6b2f1796b1887d84e2301109bd5b05\n9a0365ab56ae57ffdf6ad3edb04a4bc5\n4e488242b665d85f40bc3b36a331b786\n86ab1c2ea989fda9ab15905beabd3f20\n206e39a5f67f4a4a81d0c86cc18e6647\nffe0a5b165461eb66a2345809e2bb169\n6a8058611e45e7d243ff4cf09319bd2\nce375f51744396e52a9eb0f146e94477\n28fe2af4fd6ab3848772afa45900d07f\nee63549013035c385e28caa3b26a73fd\n6265f0745d3f40546bcd32c43682e841\n7db943b676cd86d5729c04438af8eabf\n8fadf13734ff86b5f9e6f9c7735c6b41\n7e65e7db2b227946631a8860374e7eed\nd07300cbf12c42c3c427f8508e3d634b\n296c92e4e7233de47d1dd50d46b1e3d1\nf90ffde4e5ac04bcc627f7f719e1032\n66828747e0e7671021c7b87f47c77e12\na1b7a3cc11b25b3a82c0a051a54c0e33\n8498fb254e1669faaaafd94b9f216ef6\n755717e2f9edd1e36782fc9cb2c37844\n8d560e44c4eb588d4fdf31cc2d78fd0\n1782558e47730989b96212c8f6cd06e\n5c5908b7a19d8df7402ac33e676077b1\n1cd50bde9a3e711637b0898eccd7168\n9ff9c8287fdb49be8b55a52bfd1cce7a\n584a78bbf7932674d4fdf31cc2d78fd0\n4271d0c8cdad6a84e572d3df5e4fc85f\nbf0e8d944ba4843e94e7e8e27399daf7\nda59928c982bc34a2a9eb0f146e94477\n293c7cf5fdde18258acb0ff76f4aec7d\n2cbe6850de4fa5a34a6a7ab072f22d7d\n99606d5346d6b958b96244559b61fdc2\n62fa029fb8053560a37f3fc191551700\n49e4cffd7736c34362b21e1bf23b9ba8\nba03db3866faadf0dd27b2ba4335b978\nf9cad36ae25540a0bb20fd1bc4860856\n3363bde33b9abfbf7c5640de9da0cd4\n9d5c0108ce2c848e977b27045b1d8055\n73723a79817b594098c11e8f05368fe\nac85727971fe63dd2c67ef33d7521ade\ne5247d798b4538094046e8fe9dfc34b5\n8ee2dfd1460eded9473f10e6caaeca56\nb61f6554d83c50684fa22c482c32995d\n90f2e2d8f9b89074425b2c354eccabaf\n2e6a9622bf83f04c38ee77d0178bbf4a\n59ed9bf99fd1262fd77312c90516c805\nea76015145946dffc0896a3cd08800fe\n425431f166ea35bdbfed25440ee4185e\n2650ad9e7a1d0ebf6df8cb2765f8ec95\n85d04dc3f455bc56ceb5044e1e1e9739\nf4da249169898dd915212cd62adf957e\nc18c78cf54b60f078e62780ddf14e62c\nbccf69e2dd7de293ab2c2809513f396e\ncc8b44ddf6ec80fffd8e7b05498794b9\n28c83c5adf799340f2cc18e077b7ba53\n7fc1cbdf81a1edf5bda733a39f84326d\nee2b541ccee732254c938921b509ee11\n536b6629c4f60d07e78002a96f52ef26\n2b800f158324986ab6f657757c95f74e\na9aea98c1e79a2e6e99225f2edcc7982\n6f2e76e362ba6c73c0e3666c7d0ec7d0\n5d0e79c02907bb8f5cde8c99e4b182f9\nb2f06baf5851e7a36df8cb2765f8ec95\n7e3349b2d3e833b0364d334d86d85d\n29487596941c12dd99f6b4f86609dd6a\n5c960f83d0eab69cc9463ecce7643e8e\nceb561c72a407ddfdc50a691c68014fd\n8b2f030e604925c92a9eb0f146e94477\n76f35efa4083dc6a4d31b03e74c723a3\na42b6210fa2682adeb4ea3744b7acd6c\n55785c5e30e293e03146b856dc99bd62\n9752827fb7788c2d5c893a899536502e\n99dd952f49606ba01669695e4df59de\n7b01d9b011361e82a7fd25564c2e888e\nb866d7e1b0336aff7c719d2d87c850d8\ndd06b4149a6f876341ca08f10af9385b\n48260abd4ff73f99473f10e6caaeca56\n2bfea38242ba63cce77aa0b62eed1492\n2894449c2f1992bc3a65ca10b9ee2981\n139df45393b6847838805e546aa28d99\ne7b500cc55c8f13b4512af8eced68fa8\n11d1fdaedf3ab83b8fb28f8a689c8ba3\nc4bad2da39f8021b3554e683803baa4c\n19541db644551287ee0112963a7e11e3\n6c08a180a3437f316dea32b07f945478\n9f2721257bcbfc70dc1fa1f50eb490cc\n21999849a6a8aad752470de2774d6099\n3a5ce33bac316d8f6379c5e421c1d27\n60458c0d233ccf9daa69dfdc5532bb13\n797804cd4594553156b22cefbc2dcb87\n361f3fa1f09d25f07a5533ecb7691f17\na2d1b78e03f3cc39d1e95557cb698cdf\n4dc19314aab40eb83a93df79ef2b80ef\n7bb54d802ac6156ab96212c8f6cd06e\nc5f77a00c9cae334cfd826dd468a5497\n3c1ecfc2dc88c1919214bcda3ade39f4\n8ed0533fb22f972cd76439fb95cdd2ed\ncfd7228f455912dd9618aa9e2febbf80\n1fb16b5399a4b3a710bd1697bfc4e3eb\n48863925f0e70aafdf8e4da0a37cb43e\nd443e86ae023ceeb16abce8cb03e7794\n68b62b9b9d49f262b12ea83455b0f44\nb0f1e8e11aea5f622fdea40a56b4c57d\n41f087af6d5af9e1c05a03162270a7ea\n3163c8037d5782365688db6590f826c8\na56dca5eab44489ca7fd25564c2e888e\n2205a3f2c102f180a134736201a79843\n9e3a69fc219ef73d37c910d2f91b3d73\n9497f33086b582b7473f10e6caaeca56\nd22cec9b9f500ade28e9ca8e8fb04e0a\n54b10fd57a55e249ad07230f53fe98be\nb9ae3fb6b027dc4294a553cca1043426\n1d4eaafea3ae8303ce94fde2d6224f79\n8b177994dc29a707e363d824c14767b2\nfa9897315ee8b6ba67789dfcc3262f70\nba7a583467ff8aee8cfac9da0ff28f62\n9e3a2cfb3c8a25909b2ccdf5f1fe9097\n6eba2ec65e8e44ed5545896d1a9ff5d3\n4d12d72baa7641a1d1debe6139d9c454\nf2422eb6b55e8fb0ef3ecc8551d2c1fa\n9e44269655ec3df9afe1d4530f4c6e24\ne7add7a018da8056bda733a39f84326d\n7cd83953000adce622cd6c209adfc63b\nfa8ecf7278bb320bb7ecd40416f4e39\n9c06490e82e122093f599d94ae17ce2b\n54473bc01457b7291b3636ad9ef344ff\ncf39999d7c9e2b4788ea3c115b90ce56\n45563d97886d68eb12d484f58f506441\n186646b16a670b7d69a949ac99a843c4\n4836466e85175a462c4cef95ae3d6c50\n30774e3218da1f793eccc98914b46c47\n808e19aed606f10cf919864ecec729ac\nbf7efe509caf42cb7481cee66aa2b2f4\nf92aab09a6a1c6556c23793d085f1519\n279adb2c37867b3a18d9ca1acf6633f6\n57ce5193c3ecd067c05c2f3d0d461abf\ncea62d812396c31a88ed7b6315c3b4a\n51d9af66315d76f9e6b335b85df4d203\nd20990638711f55967bf54a1f364120\naff67f837a958d2329984c4afd2e98a4\n728f6f29382b70053ce4e6f97016bd5a\n88161acf1ef955c5d76439fb95cdd2ed\nd0e68e14e8012b497d6d702dc488f23a\n3b1ad5c98cd92726b60a292fcb118b54\n64f940ade3f61f976a106c3e1a10b659\n1ee4f19fa617ec5949493d905c02fa86\nf478cd5a04d2220a25af19d380ae3a\n47aa50eef6b59ddbc552d162ae439d98\n4510559f5587f601147d1b898220921a\n96bf8cb730f728414a383db4764d5432\n8976e05f72b43a742a9eb0f146e94477\n9cea9b79ea255dde56ffccfd33efbc84\n397d2e2b3e0988a2d3901a534bc610d8\n9d3fd293f6b9e46f28044fe9244db50a\nb6abe0f00fd452fa4101e38beb790a92\n216d910f71942f205df3c6413d40ccb2\ne859ef0e793c43dc159a969baa659ca7\n30e84a2b779b0e89473f10e6caaeca56\nf1eb3f6c5a5313564c7d8ebbbb68f5\nb9786e1b059a1712ca92a4cdad802b45\n4618489fc34c3367323a23bddac1281c\n75c4085b3315688aca92a4cdad802b45\n813bedf2a45f5681ca92a4cdad802b45\n5ebc7e111e9d0b5d473f10e6caaeca56\ne00169580fda5461473f10e6caaeca56\ne06082fd22dbd3d425da9962b829b47\nf2e433cab0ddc755ca3ba83abff10be\n2996a60389105deb649a971570be83d\n543a6562ae746ed45daf03c341f7f599\n21a1f2a7b7e671826405999d829064fa\n4d39e6f28ce8970530515cb6d98a6c44\n5efb2b4cda03da10e047028ded406033\ne9ae93e6ddd5bc1e6047f64eee8fcb68\n202648a87dd6ad2573e10a7135e947fe\n9eef7b2c492bc1181f4a259ef9bb479d\n7bf415dbff028a3d4470fce578e2b84c\n42147d774e08199564c7d8ebbbb68f5\nf2f62db1a9e5823a7aaf6e2fd8453e07\n65ea0311528b1e5f16abce8cb03e7794\n30456a19dc588d9461c6c61410fc904b\ndff1f351bb34fbbabecf71e2e014ff6f\n7a12f058a0474559a7fd25564c2e888e\n7d4fd8ed77355364fa98472c1d231070\n1089cbe82dc0e72133d7c9e122eec9b6\n61251733434b9b0c15a23f2b45e10de5\na89dd60aadccd84be04e0c24d5a9d818\n17bf28a8d9b5a7ccb5e3401710af905a\n4dca2e572dc278d563f2c3a55558a78f\n4571e0fbe9cfb5f8fd52c8b6dd37752d\n6ca41d6e48d8cda0e7c0978ffb411d3f\na37a9d8847ca3b90e6052439e5a76d12\nd43dc96daed9ba0f91bfeeca48a08b93\n5cad9a0e7e69c6dfc427f8508e3d634b\n5d851496c2acbd8cd03e665be0237104\n70048a705ad4363642db06daf723ec44\nc07bbf672b56b02aafe1d4530f4c6e24\n4b6e6fa36c1e6f865cb51d79fcf5dad4\nd0552c332fd0182df3cf3d2cc3dcb043\n20b03fde0d55a99fbecf71e2e014ff6f\nbf523e37ff88cb10e23d60a1b706b44f\nac3585c59a80b822b4d8eb72d337b2e3\n52abca690cceb7c634a65e2e5c663c7e\n3cdb021c923034c68bb386c7dede359e\n2a844013c66dd19d32e3a970ba4fb82b\nc24892528799ccf486b4d991d5310067\ndfc08488e2ec687d1c64dffb0265c4d6\n40a30a8e56fa4a6c7b48e36e31209b9\n63959ab016687a50618e9d35559b7aa\n36f17730152ac28116abce8cb03e7794\ne2d98e5fa33b5b0daf8a2e210ebd5168\n7bf95b4dad8c1244d928f30a3aa85f67\n202fbaeffaf49f4b61c6c61410fc904b\nc631ec6f38a5e1d7fdc1d9a76d31d55\n58f2baf01b8a3baf24da76692f3228e0\nd4f910cd784c38dc90b4e3bfacd1b5e3\nb9e20b751d869418ce2714c5fa8be19d\n1a4ef4a2a639f172f13d1237e1429e9e\n993bd3b6fe7c6e32cbb047938846b5c7\nfe16b8e790f23ab8c6fcb4b4f04936c2\nf378404d31ce9db1afe1d4530f4c6e24\n78f9e32385dd7db27996cb12b5662363\naf0a12fa33b063ee38ceb1581969287d\n4fd5c18c1536d65be129fc90649e41d3\n1f43243b81df21277925d1ea63246010\n1d5872004edf12038644d87f4c93cda7\nc72e9ce6c6f16bb83b8642d7bb5bef13\n476a54545e873ddf6cfecb6c9c824fc6\naeeb2fb31215f3249acee38782dd9680\n44f30f4c65c3142a16abce8cb03e7794\n80b5df2ecf1051fd61c6c61410fc904b\nb12841de144ea6fbee3362a8d2d8318f\n494e45d11299de95c571e4850ce1413\n4458ed2a746e61a3b11647ffa4306609\n84e4dd1c6306a582a97e62e669e9544d\n94a78fc51f84fa839ea5c205086e2a63\n54d525937d9c6921afe717997470b28d\n8648667e03bde366b17445a1c29f6d34\n8202d2165aaff4c05fb2da48d9c8120d\n23ae5d6c60ab3f60ee3362a8d2d8318f\n4c2412cf0f720bb9618e9d35559b7aa\n35a32cbdfd9e7ba460ed0d611ab79ae0\n15a5e859e0de30e2afe1d4530f4c6e24\nf934155d32f9ed5b4101e38beb790a92\nac3f9387cd4319592a9eb0f146e94477\n355e2c8d8d10e8227541c0a826e78e18\n180d1e3463c29355bda72093f9b5aa73\nf4c4bc930957be4951e9a28466112d97\n7e63db420468e1b1bda733a39f84326d\n2e27309be42276bebecf71e2e014ff6f\neef8e5bd46755164eb2d90cf3f6fcb8c\n9b0d7aac4500546911718baa6d4afc0b\n127b9ba77b54ba59bda733a39f84326d\n7a226f6c9c37c8f7253c03b7df20edd5\n65332c9a15126b924b3ff698267962d8\n3ef364afe692557edd344a2b29517bb\ne1c6002b98b4cb2c32f56cbc65681ab5\nd80658a2f50c753cf1335b4fef92b83f\n2485b755d54f95b17461dc7993bb5c2a\na387407d49e209fdeea60824a43a0b\nd679b2dd7a7d6b1da71ed5958a35c6\n31cfc24310109174b11647ffa4306609\n175a289947f549b0e088606e38104b2\nee5e6649db524dc2eb22840c40c3154b\n148ba646cf954b9249352dd33f95cb9e\n53a604e4037c650beedcafe524c3dc4c\nde78fc3652596d3e9ceaa43540dc0e9a\nb4a0711a46f9e2bdba3e2415e22cd45c\n919b95beccb25d2eaa3fe7369efb56d4\na83c45069b2925efa7e7e5ea49ad8e45\na1d85821a0666a4d8dc995728b1ad443\n2861ac374a2ea7f997692eea6221681c\n854bb96a96a4d1b338acbabdc1252e2f\nbb5264bf7306327abecf71e2e014ff6f\n953531696c554fb275dadc997718614d\n3044f0bf0ab7fd8d476502dcb0dc5465\nddb4ad84abca0edcdb8ce1e61248143\nea7ce310216a5a64a1bc65068a7d3cef\n51ae6558e6914920253c03b7df20edd5\nb8cee2711b84bebb425b2c354eccabaf\n18244d93dbd2afbebda733a39f84326d\n5dcbc04a1ce783eb73f41773bda9db5c\n1acfbda4ce0ec524bedced414fad522f\nebc59fa7d366b486122181f48ecf7852\n7376511fb191429eff1370452e3a0154\n53328de5c7e18b752350d856e276adb8\ne914040a57618eb6d3e11439c6c22c8\nd776d298be6bfe88e78002a96f52ef26\nd1a54cb41a88702b1e8e2692714b2614\n306f684fa89eb73ee151bdef07e713a2\n4c2c33070c6597ca9004afc0d5dfd164\nf87f654f056b3679f4103381793c29f7\nd3f0b077f7134654e20af544ce47dd47\nb12bcd0ba039b8d09362b924f11fb193\nefe74cae23f8061382fe9569faf087db\nc004e655af0b35e3bda72093f9b5aa73\nc951be855f20a1bfb2a29f45da811562\n90b4f0d3187ad88c26a3125b78368401\nc8bc71dadbdaa890becf71e2e014ff6f\n9dd5fb440759181035fea498c4ba7c5a\nb72355cdbf1127f4becf71e2e014ff6f\ne05680db6f028c15bda733a39f84326d\nb8f6994a33f4f1adbda733a39f84326d\nc00e0066715c2226921cb81cb1632a5e\n488e4530f2b157c2e877e82c90c24d\n2bbea02b59ed2bab944bfc22204b55bb\n3ef0d561be7aeb3080275d4a88484513\n1c66dbe15a6be89a7bfe055aeab68431\nc2adec4dfc0dd05b2e877e82c90c24d\nf21bd46dced01bd835da01f298003d56\n3e36e7b04fbd55a0f691b4bfa2a7ff4e\nf21188e5f1a6468050bb0437668bebb7\nce63abf6d78ea5bf4f39b2731f699e34\ndc9bb9540228dbd4a8977f240035577b\nf82b9a21855ef3feb1bb46d2556ba67d\n80cae0cc66dcb8a88acb0ff76f4aec7d\n56478692749392a19dfd5136ef0f2af\n641a0da53609ee3028920f0e0293b366\n14d47aa57151ae4baa93570ec0c0afff\nd922b4f3ba23cf43780575af49bfeda6\nf7362613dfd3772faa69dfdc5532bb13\n614d683fa574cd817fea5423f91210c9\nbc75e8adfee9ad70bda733a39f84326d\nd8c7f76320624fef02d716c401defb1\n93c647af0338e9f35a06092d926a13ca\n92cc3ad1d3da26955fcb05674109534a\nd014af11d76dbf667aaf79c2db0c7371\n7e7cc90bb7f265d2b3cf5236f651a8e6\nc73e146596486bdac427f8508e3d634b\n9c0f4c3c72190a6ebda733a39f84326d\ne885df5686133eeef43db49cede9f847\n40953c3fd24e9d65ecf689885b7c1e59\n415c24869f57fec9d9e74b7f1cf9cf3c\nef686b06e51b00601c9427735f8d544f\na6a1c91c92f86c463a93df79ef2b80ef\n7c13a71834d2b97687cc3b689b9b258d\n79b99595059c53108540dd23f35aa602\n8fc2691025a48e21381a9e1cee6d0b00\n1ab80bc91a45b7d0a31091d2234b9f68\nee5839537440f8b6f2e4b4084cb7a07d\ne3d7957c7a9b95382e877e82c90c24d\n89026c748b9cf721bda72093f9b5aa73\n1d4b2404a00ef4bb627014ff98c41eb1\n52ee842db08cd881979ef391885ee5d2\nf78bf954495be532afe1d4530f4c6e24\n96762f5d7f7e93343f9daeef6b843610\n9ee32f514a4ee4a043c34c097f2ab3af\n9586fcdd105347123ed4cb179e56ad61\n846f4ad1db06d8791e0b067dee925db4\n1a1dcd236a1e6133860800e6696b8284\n3973846825fc4d857cb2a55fa21392b7\n7dac31838b627748eb631ba05bd8dfe\n3cd83324de4a2fecbecf71e2e014ff6f\n2d096d5dc0e0eeb370a43c2d978e502e\n26eb9c499fe0ff9edc10f9c1726304b1\n7e3237619d96b6e551a95aaa6caba1d3\n35fc22147c160f501636a25380d820df\nc44111ca55c697117fbfaeeb4819ffd2\n37f9b2735bc9e80eeebdc06b146e1752\nd72ffa185738bccd10b75223b5be6dbb\nc06a5f0315b3784dcece4698ae3579cc\n8577f3f82d5ce3ecc2fe329dd557eb52\n4036332be89511e31141a7d4d06dc13\n909422a9d1b42e1380360680c1602c7d\n14121abc9e2a868e52ab7aae4be20d81\n38326e6ede45e5ab7b1fe308bc94d4e0\n8aeeed96e4597ca6853c6f214c15e60f\nccdd144f89a78f5c554ecfc23d9fc570\n2ab27beb8a37ba37ac00fd1150223027\n1dc58be25e1b6e5675cad724c63e222e\n7240a21ee34bef83dd141480e2c154d3\n2bfcb2381581c05a95551e0d9e50cb0d\ncf9e82b3235f62c949956811ccd3041\na476444d87bc7aeb1699b1ed8dbb7ad7\ndb86af2f9e7669559ea4d0696ca601de\n4cabd6d81c0a9e8c6436916a86a90ed7\n7bdcd746432bf123416a3426987b1133\nf31eae8f1f64638c2a9eb0f146e94477\n5bb7b111a3835592531e940de4b7770d\n8601cca4ddfd28af18bc22abef3f86ce\nec11fb287c9a68475de701ebc922ac2c\nd2ec7caaf8cc7a9fbda72093f9b5aa73\n90573f5d0156d6e23ffe0e5069bf1eb5\n2fc99d3fe3f1f3b3b5e3401710af905a\n21fcf7b6cfcd2c7933d7c9e122eec9b6\n10247b51a42b41603ffe0e5069bf1eb5\nb8599e22b152b96e55e3ad998a1ecb4\n3d358a98f90e8b4d5b1edf5d4f643136\n27e267f0570f121869a949ac99a843c4\nd28ad2ed7b1ba665b1bb46d2556ba67d\n20a967d68b6d291512da0dbf3c68e847\n9e136de952f33de0a1830153974050c\n139718b631cbca546a36136419d55d5c\n2c8e9ff5fd58ff3fcd046ccc4d5c3da2\n2f03e5379f3e9b6857652684714945f\n70899bf99412a69db38722563212fa4b\nc1ac2aee4851937c8e30bdcd3135786b\n7de59e150d4712b7b3cf5236f651a8e6\n83491cab81e3a330bda733a39f84326d\n50ba203c086c496df43db49cede9f847\n6b0238b41337365a3330c5ee7577e4de\nb16a147485ec40b25a70c4e5328e0b9f\n53e7ed598e9c3a09405f29f7fa3f25df\nfdcc09ad608e95b4b631b59d5abd1cf8\nb31c2984546d2746becf71e2e014ff6f\nd306a61faada97eda43f80a4a74d521b\n2e1178d969bdb3849ea5c205086e2a63\n5e5d7901f587c39726d36807b4d406ea\n52ff21d1ba10add4bda72093f9b5aa73\n691bf14434c590f212a6200f1680863\nc53256341ac5693c66d89345e534c861\nb56bfe0649294ebecb02238be5da228\n78c5d8e9acc120ce16abce8cb03e7794\n12cd99c20b1a5a932e877e82c90c24d\n7d099ac5bcc09250e61b9ff60b1be412\n2be8bd6b150a9fee97df6383472cc5b6\n492a339ce5da3fe8e4b68d3b17c43658\n5c04452276a26b80d97e5ba4dc9a93c3\n1f8fc7a787f254e6428df271ebc70bc0\n4db6c644912bfbb3e0445fc6d980dd5c\nfe78ad3863e25cb3253c03b7df20edd5\n63316c4cff51de417fb21fb4ec0d8d1b\nc34f37b1bdd6fd62247035fb6ff31a15\n2dd174957a2053345fcb05674109534a\na5476137d0f2f930425b2c354eccabaf\nd1bf2bf3302c0ec0e21186de41a0101\nc5079a5b8d59220bc3fb0d224baae2a\n7000274ad11a419715ed2279a90f8f38\n99fce87e4e80e053374462542bf2aa29\n99f9ab439e890e79aff8ec395bcde91f\n2a0a53917dde654c3196f09f71403d35\n30e971ea6fceac68f5cb3ca022cf045c\n5b4243556369155858c383066ceeaaec\n2a2a1822fcf96394ed3696d854eee1ec\n3373140534463359fc82e75321e09f82\nbf8c14637ee36251ae3e053f6a533410\n68e733f38f957332afe1d4530f4c6e24\na03c7c73c067afa9e5bf84cdd88910df\n3d681ed2a7eef0df28f46021c78a3723\na7b76ead88d243133ffe0e5069bf1eb5\n5ec3322293a39816ad7e7cea4034d226\nae54e2952eae6ce4473f10e6caaeca56\nc59e3f28f42e6ca3186fee06ae26176f\n37249c6f16b203de2e877e82c90c24d\n8c264b10c4ec3e91fdeea60824a43a0b\ndee6c7e696048330ccd4ba9035439a85\na17bdad065a0e008a2e48b029cec5d4b\nde0cbca344b9de834f36122a581b2941\nc41fc68f756437b2511afe12ef4fe731\nc31891b69780886ffb907109397a6c7a\nc23a65ae787245248580e2c19c4f9aaf\n6291f064e64c6eb9d18a5bd35f0d115b\n8cbc8e27e885eb763ffe0e5069bf1eb5\n8e72ff1064eef473714e6c6511843d28\ne3dff7195a2026dba4db43fa521d5c03\na077e24f8983d3d3476c231adfa21265\ne607a20da6c5132dd141480e2c154d3\ncd3db50308c852a02630fc4a206fe3d7\n15fcfe91d44c0e15e5c9256f048d92d2\n70e27da90dec2de49604bf8c981ad1eb\n96e164d8347ff4d8d61b6a34f3fd808c\n7887e8306742cf844ca84d60642ec7e8\nc4f6540454e65939921cb81cb1632a5e\n35d1938e4ab14fa79ea5c205086e2a63\n151bebc457224c2733d7c9e122eec9b6\nbeedf39c8f5709bea9fe1734a6086750\n52cff656189850a2546b7395fb17f97e\n56dafc275ef1367d307cb03f4c762959\nb35117b7e025a012bda733a39f84326d\n3154c3dce06ae7e216abce8cb03e7794\n3232d99c41dd949a8b257f8b62755068\n83cbe72c4b5e9268ec89747d864c8515\n597c9eee5a5ba96b313436e774fa02eb\n368583768dbe789980360680c1602c7d\n3d81e36e5252c8f0becf71e2e014ff6f\n50af70a51a2db34d777b3c68b2536729\n8364ea0a27342c9d16abce8cb03e7794\ncdd00143a3e1e33bbecf71e2e014ff6f\n10716a366de708b8fac96522b26f7fd\n2d1718bda87f59dc673ddeabdcc8c6e\nb27c818401f48e5220453276fad563e4\nabd0aa2e0ca4fc4793249f89773e858\n25480875a6be8e11afe1d4530f4c6e24\n8df9feeed8678aa6bdc56c6b6d74b51a\n1ef8f98842f2a388a4dbb766064f8bbf\n44c7a7a13fdc673abda72093f9b5aa73\nb688cde1a09ea5d3b1bb46d2556ba67d\nefd9059d23b9c01f46f8ee02bd8f9824\n2cbd461545e71ffcd3b83549e73dc79d\n7478183ebde9c6c2afe717997470b28d\nfda43d663587c7a9caf180c847b8b75\n43553b5efc2674cee4b68d3b17c43658\nfb6c92a80dd9af59b528c0abff96f586\n300c1f29d253f94a97e6e890ac2fb198\n96c404939bdba58331ec7db1bc2ab2b4\n149978eefad83cbafd8e7b05498794b9\nbbf01f037b55306f8c2fb4d10f176f65\nbf52cda8de7e5eff36dfef0450f0ee37\nce93ae42d9cba64c8dcad5127c74b8e0\ndfec37059dcbf6e64819e00d73fd49e1\nfc620f7906f444f1ec403de85b47bd60\n6c5c45f7a474daa9a134736201a79843\n9698778dc63d5874eee70745894f83bc\n2650c2325b7a8d0c811f8dcd8963ced5\nb2f412545dce6e8266ff862bad2bb0ba\na19d008c68e9c942a78cb4f1b66f009e\ne6846796e15020e02bc9f17412005422\n5b1f078a81df862ec2c2c81e2232aa95\n292f6606c6072b96715e04edb8af9c53\n372ceb40210589f8f500cc506a763c18\n481999bad4bfe8bd3dc7f272b20d8426\nbe86ce7f7aec3ad4f9e07ddc212a2f71\n5a5f53455c2b400579206bf213559607\n24b9180ac3f89ba4715e04edb8af9c53\nd4919d3f70b699152b12ea83455b0f44\na6fe523f0ef082a2715e04edb8af9c53\n12a034b6be9afb50ae983613a2e0a741\n29c0b746704727593030e8e3910d2b3b\ne0901a0a26daebea59139efcde1fedcb\nace409d84c89d7258a0683934fae3156\na70703613b83063d27c34dcc9b552d03\n1a7125aefa9af6b6597505fd7d99b613\n18ff13d7f181e7625fa21635eac9e4ed\n9511b5ded804a33f597505fd7d99b613\n45e69263902d77304dde7b6e74a2cede\nfc6f6309eefa5178590462ce3bd1e59f\n67ec617aa2352596ce6bb1d0811960f\n78471673cb8ef99f78ae9714eeb937af\n5fc2334bf83f4c0e3505c0c7d5679ae2\n6a348343b90f8f06a78cb4f1b66f009e\n40c2b97577b43161aaafd94b9f216ef6\n6acb271397e6f9b9e858db1dc3499392\nea0d722f312d1262e0095a904eb93647\n857a3a01bd311511f200a72c9245aee7\ne13ea26b1b229e74bbc8d784a25de148\n3a3d23c4d325252aaaafd94b9f216ef6\n86aedfff061c5b96f500cc506a763c18\n5389c96e84e9e0582b1e8dc2f1faa8cb\n85f6145747a203becc08ff8f1f541268\n890e61bfb197190e6382e1684e46349f\n7492ced6cb6289c556de8db8652eec4e\n24c46b3a467bb4954b1bdab82d834140\n4c456e47a09ec8c96c13d41607812b45\n479f89af38e88bc9715e04edb8af9c53\nad45b2d40c7801ef2074a73831d8a3a2\nece361a95a2ede4e629cf5743e29cdb3\ndf00eb409d4e8fcec07224da8e53476\nbbca92f53f04d80d8bb5c0bf5eec83fc\nca85286b0ff3b33b16abce8cb03e7794\n1eb3cb637ccffd14597505fd7d99b613\nf88b4156c5e8d35ff500cc506a763c18\n4af41048861594b4897e805df74453bf\na2d50ee31621c3e059139efcde1fedcb\n664b8ab637c1fb54a78cb4f1b66f009e\ne28490350bdbdf679ad3ae277a5ccc98\n25d92177ec6bd745deadc9ca0263db5a\n4de80d6104368f4be194052f3f12cb2e\ne90a136270c03eebaaafd94b9f216ef6\n341b474e01e039af59139efcde1fedcb\n37fb762e57f343a7aaafd94b9f216ef6\n84bc3155bc5c95bfaaafd94b9f216ef6\nc234638891f21417ec5e3fe5c33367cf\n8a2d335efbf40060481c5c74462bb8fa\ndda10fc985eea0868c368040825ed335\n79aafe31e4f2677b1f0fdc8ac183f8b\n39b307361b650db073a425eed3ac7a0b\nef2655aecd7d8f2b6fca0ec9a39d7a9\n2a1523ee15233761d9f8911ce020a037\nabcabe3968a64d4f16abce8cb03e7794\n2cd119ce9ec61f1af63ee8a34069b7c5\n732ed918e2bca89ae6e1c83427eed339\n3428307ad66c58c53a0daf3e5400b95c\n98fa551211d228ef6a089bd459bbc1be\n3c059c7851eafc192a9eb0f146e94477\neb5f04670263d8bd075955b404dedb5\n894e186c1224c14f86590219e6a70ff0\n3027a9d3b70435416abce8cb03e7794\n69126951b42485ff88cf40718544e7cc\n854881671316e926f63ee8a34069b7c5\n95d8510258f7f919c9be4fc52f26b7f5\n1548f5fb0684d08c63155b8ebc275bd1\nb619910e7e51d8e176ad064d1c5fdd7c\n99c2ddb7e6169412cb9ff477a2867fc\n1ebb7511feac4d62381a9e1cee6d0b00\n4d2daaa14ab2f051bbfdd95a15649dec\ne5ba98879f06d013b2d3f2371f6b0762\na61488f91b2837f8473f10e6caaeca56\nb8de49dd963c0669afe1d4530f4c6e24\n97b9c8ae37e6480e1912cbd26ffcad1c\n53c118280e60df0bd2350421a9405ba\n3db560d20e40c3b835ac1a825225d411\nf55e967e8617484fe565b03326f48ebc\n657ea4181e337213fa7c23b34a0b219\n94b52d2fb55004d5ab2c2809513f396e\neb471949c658f39eca736b1d30b87e32\nafc23aacd3e166d9f513bf8e198d377a\n36d0b6beaffc68ceafe1d4530f4c6e24\n709ebbf3588849b88b55a52bfd1cce7a\n9f703e578b4b36295b74572d48ff6382\n30c2364393514c5b1c685cd768514e67\nbcf0b18a19bce6d91ad107790a9e2d51\n80bdcb908765eb9ec349f2dfac43a4cf\n3b578ddeae9eeb9ffb8de648691848ea\nb7909c8d862ac27a82c3507e44bb5d92\n963a4fdf819cc5ab3174b45571ecff3d\n18c7b5644290ce2caf0c754abe32de\n3f702ea027037a5c4d18baf048fb19eb\n6b79cfceb6f614527e7afb83f93db294\n45c88ab8a670797a134736201a79843\n8b090b8ab3172dad2d7a27ffaafaaddb\n88a476c48a4cb5e72d0c578824da8af5\n7fee48354a144b5604a60621dcde9e6\n1a48d03a977a6f0aeda0253452893d75\n2faff2861e87020a4d9558e8f1b57178\n6cc0924f1ad64faf8c2e7159929c406f\n7edb40d76dff7455c2ff7551a4114669\n95ea282dbee00d45ffe141441005acc5\naaa54ba9345b6784967bf54a1f364120\n5dc3ec70f394965368d733072f36728\nc5758de60af178a11922758510ef0672\nae6827651ce624f6f5a0534aa77bf2\n1f5e1b0661b340fc81dcc09cafd93d2e\n8f7520f908ee54e2391da6d66c78fad2\n9c65624c5d94aa29801b0db1d49ea10c\nfe7c536197065436b3030c76de18d16a\nf48659c519f422132d54e7222448a731\n9a556cde3d153c6230e527480f210909\n12097984d9c51437b84d944e8a1952a5\n6cd6f11fe76058089ed785be4fd72d3\n8c1664cc8771aa3fce95c44a0ed1e01b\n911d8dad65dd79948e35db9103756ad5\nf2e1db1997b5e2568926f812d9083f89\nc5bdc334a3df466e8e1630a4c009bdc0\n301d1c48d321d29f5d2921c9c16f3c69\n788612c1f9b2efccb1bb46d2556ba67d\n7e7f0637d6798113ddb4014f0e8d0dac\nb38361e0d9eace2fcf2b292150d31034\nbfc1822c1d6a529d531e940de4b7770d\nd43eae16d1c14f48788f2ee06c24b7b1\ndf5a4ebff89f02cc25508ed649b952cb\n56d463162ff5352cbd835ce3c63f4d10\n4c53afe560e36d8380ba2a9340bf2d77\ne4b1de221f2d66352638397725e10cf9\n72ba2195087f80d8b7e8c57d131d2ca7\n41d317b520eec9d38d3d01fa03326bb0\n9d2b7938d426633b28044fe9244db50a\n579bc3731a8a25f7c639b4cb04d4d746\nd94f5345be1d81a751a95aaa6caba1d3\n7f6031f1738d52546436916a86a90ed7\n9dee0ea5da388102e6d91d458fe44a15\nae852f7f30bfdbcdf9d73bbb584eaa42\n282293948b21262769416db9b743e50b\n5c3fe4057ef12b6886ac29addefc0f11\n5a56285761f2d6cf261c731730128248\ncc0c058e2eca523051fb05589f6b0d0e\ned91b2509171fdc1c48492b454f1615a\nf296f3a83e09de75afe1d4530f4c6e24\nb11c0c16e0eed1f4b8671dc42cc45273\n9d77d4c959974035fab60fc805223a73\n1c7ddd2735778013ce50f18f6100cef6\n8402d2237afac94a1cf6f8e565096a1e\n9676e8250cdd90307d5394224a6aa067\n2df225b8df2633c231141a7d4d06dc13\n2f1001870f90e06bc48492b454f1615a\n5a5b0e1cbb38bdb12d08a76380360b3b\n5ce9ef613933a245538f2c6e5c51cc7e\nfb8adbcf67d858fc28044fe9244db50a\n55181c34dadb4f032db09455d18fca0\ndd0817b9757b74c75d3a87a5c4dd9ce4\n7c7e5b4fa56d8ed654b40bc735c6fdf6\ndb432e9f280ffb1e3dd4bdc1dbab98bd\ne46d79a5d356436f23a5d95daeb50835\n88c884dd867d221984ae8a5736280c\n957a686c3c9f956a3d982653fc5fd75b\nd05aa55f9e5b4d10afe1d4530f4c6e24\nbc9c588a00ae179fa2645d665a7d8fa\n7c768295f93290391d0ca8334e014176\n19c25429d34ce9748c844a5e3a5e1a93\nc30bf6d1ae428497c7f3070d3c7b9f30\nf1b97d671bb93ad928044fe9244db50a\n30045ee0751d6ee88b3ab49d2e0e41ab\nb4d258dc5a12f9f7ade7f700b19bcf4a\n56dc27e4374cf87132eaaf3b7c9989f6\n501ac8493044eff04d44f5db04bf14b8\n781b45d3eb625148248a78e10a40d8eb\ndc8765720d8d3828b3cf5236f651a8e6\nc0aeb1f7a3fa4e2aea914417bf582f8a\nc9b49f7b355528e5632dc979097a3ec0\n3586f47af775e5158aa8c3cca6f13406\n96ca20dd7caff0bb851f021b9ed69c58\nff564f7ec327ed83391a2a133df993ee\nd5c046451e5bd6826a9c18480b4632cb\ne0978173fcfc5203510556e7c3123591\n36b211593bfa7c2f7f33a9b0659de0d7\ne17065d11b36ab37f9d73bbb584eaa42\nac7e674eb67488dcafe1d4530f4c6e24\ne2e9b87d7aba1dfb28044fe9244db50a\nca93e4d0ca75ab1bafe1d4530f4c6e24\na3e7603c0d9ef56280e74058ee862f05\na5d32daf96820ca5f63ee8a34069b7c5\n982448cbcbe56bb78f89cf8d2f8a85b0\n4ef6af15bcc78650bedced414fad522f\n45186c083231f2207b5338996083748c\nba9097cf9c836c0f2a9eb0f146e94477\n498e4295b3aeca9fefddc097534e4553\nd41c66c7b1ff1f57979ef391885ee5d2\n20ece5093ff8da0bbda72093f9b5aa73\nc0b9eb823b9fff9a2764cfba57a5de73\n1e17510abe8f98bea697d949e28d773c\n1dc757e77f3cfad0253c03b7df20edd5\n95a6e03656bdff26f69bc9777f9c3c39\nbaa1e44e6e086c233e320a6703976361\nb40c9e44350f95aa1b9234e4ab67a3eb\n1cf17a1e1841d10c9e6a3356df3f3d9a\nc7205c6c657daed1ecabc5c9d5c21b7f\nb6525d69681e4f56813498cc26c2aee\na9a86444fd7402cac69ef68baeaf5d49\n325ce7d1af0e0621221f497d46720397\n10f158d2f43926ac80360680c1602c7d\n5e236dc6f4381ed37af61b3a12bec0aa\nc558c64b6b97a529658e57fd275f6bed\n7ff4c1fdfd0e9bc7b99adc532ba20916\n100715345ee54d7ae38b52b4ee9d36a3\na88c4427e1f0e871d7755e7baabe8a6f\n5a9cb2d24a3591aa27fda8a7465c0e0b\n673ee096916a5440a96c7d9d13cfe9b4\n12a445770f7d6f2b70a43c2d978e502e\nec5c003421112630f53148c8cdf6fc9b\nf9b9b12c6061d32ab910dc0e33e50abd\nbaa424fcf0badeedd485372bb746f3c7\n1b85c850cb4b93a6e9415adaaf77fdbf\nd67f5ba8950be214aa69dfdc5532bb13\n1254c6ad2b420879d7622e6da48b19e5\n17e146cb10c72fcfa2b80c598d71bf14\n64ea044763ab4d742a9eb0f146e94477\nbfae73d79c066a1fcc0c0cae12126488\n432efbe7784cba3ba65b1575070b0b4a\n4eb276926f620fa831354a729b0d6b5c\n9c7cbe5b36b7ae9216abce8cb03e7794\nce8dae15de55bc57ec96068985a57399\n45e9059c3ac5825661c6c61410fc904b\n96905400f6122662473f10e6caaeca56\n4dca3760ae9748b6b0aa56928723eca5\nfe61764c0552c837d76439fb95cdd2ed\n7483c242d7feb3a5b9da62c54efcb32b\n9f610a7b0be81dfa3a0daf3e5400b95c\n7c72e179b251171d4d1780ed2b3fe073\n6f7cc4940eee83e57bcd1993e004117a\n536477e0842580e0c3c4805a61e06841\nff267b1a6d986426c6df82b90873315e\n1836f75baa094cd9372ca62e6806c5c3\n2181653ec5313196d2c8600344d8bfab\ncd24768b45ef5efcb1bb46d2556ba67d\n2307ced410b955a8cf1e58caa15acb49\nffb4d9920493f1e5c29076ad43b687b5\nbf493207165e9359492225f5fc55e666\n99f49d11dad8ee25e517b5f5894c76d9\n51b8011a2eaaed85cde8c99e4b182f9\n33e897abe9e7df46a9aa61915b4add2d\n3df6230b2382ec12473f10e6caaeca56\n53502c15c30d06496e4e9b7d32a4f90d\n19cd3489f05d203f9ed410a010efa019\n862a345b6328d641ef3ecc8551d2c1fa\n5503658520e08b519b58a6529594c9d\n913b747502e92aa34d1780ed2b3fe073\n609f09c6ce74d6c44c06afea25f8c085\n4eb9dbe42616e407b112e5ac235c21b7\n9aaeb0852a4cca28471ac7b6a0462075\nc6eebcd03aaa9060e7a6de039856f1eb\n28151fb21f5a3c94887b6e2409779132\nf76b9a9455b20cd875a45359f7e88a3d\na74409e07d1a9e1a2925dcb663974b0\na4548c56bea7f927ad02214e86fd5091\n879121a1bb623324eb79f1a2fb4e869b\n9c27cdc4feb2fa5d4244558fce818712\nb963de806d271377935310097e7751\n12796524ffbadb755400f0dc3171dfcd\ndadcc1200b43a12be8b7f81712644c1e\nb4f06573afbb3c1d9a997e8df355a668\nd28d00d6488ad1a78079d5a13e411210\n7f2acaeb45b72793ce6183244062e7c\n9031339141bad8608f89f9805dc3c90e\n7121e0332f0c2e0551a95aaa6caba1d3\n3af1559045965b6f1f1bf16cb0b58c6d\n783bafaa18e8e5a0bda72093f9b5aa73\n4b339f645507508aa83aa2c84a424148\nced46f74119cdb36a7fc8832cd5fa42b\n51062ec9b0dadf971c65421fe734e7bc\nf9e91a22776f3d8be9415adaaf77fdbf\nb15c72a5ce982b9ddc90bfc1d450ece8\n9fe68c848c1385a2a9733fa2ac6b95bc\n685f2b388b018ab78cab9eeff9aeaee2\nf73858d58e6371f7d76439fb95cdd2ed\n1f0d149b320aa4faafe1d4530f4c6e24\n3587079f3146273faf8b8a34d449f60b\nef8e257ca685d594473f10e6caaeca56\nfd5a6dd153a455bdb112e5ac235c21b7\n84ffded0ab4b499588ed7b6315c3b4a\n94c75ba9c6747f1bb491214a0cc2380\n83f205b7de8e65e517f9d94e6661a9ab\n5c29bf38845b4ecbea0f3fb9c87b9c6a\nc38cba0ec9d1a74f38f3979791e64082\nec0555ccba700387b45e6d6d9af21f30\n616279642d73621812f039db97ce1ef\nabda34ccba30a7dd80360680c1602c7d\n7ccdf7bc2af0b068e43ab89cb5563740\n885207d4e9d28f317bcd1993e004117a\n1a87a329781b15763820d8f180caa23a\n1284876ac0e2371aa4dbb766064f8bbf\nd838c8cb52c92df3b112e5ac235c21b7\nc849164176944e08e39b6a0d304ab967\n712826b933a6818c7e003129afd0cbfe\nc4d49c0625be70c417da7541f1b2fa76\n8aa1b368270797bdca92a4cdad802b45\n719487aa97fd9af513345bcbe0ee623d\na5c969e3401228d2c92e66330b5ca173\ne297de736f8f0b3f67738c2420579616\nfeefd0978ed8e256bc050b2495b2b4ff\n1ca64f9d6e008fb35fcb05674109534a\n641e43fc49e754edbcfa8eb5a2d224d7\n5ff285283e8ec610434fdb742d7e0cea\n491df319c52dccdafb5c1b0f759e2bc1\nba1b8956b1d84856369912a1ddf80ef7\n8b7b6c2a5c664ca6efe5f291bc2f5fd0\n5523a6798194043146810e868f84ab51\ne0b9bb886c578be86e9dcc2d1ea2784d\nfa1b3bcdbda309a439cc19d48e3f4f5\n312da43baca104262c98dffdf7adc4e3\n1be81460e620aea65cde8c99e4b182f9\n82d37fceb984256bf200a72c9245aee7\n1724ae84377e0b9ba6c2c95b41a5446d\n4b94cdc9c703d00fef3ecc8551d2c1fa\n287f4c8f87099957473f10e6caaeca56\n1213742aa7815fd0e23d60a1b706b44f\n2d730665526ee755a134736201a79843\nf45022f442368e60c038d3a33427a80e\ne3181dcc6b60432f658e57fd275f6bed\n10d388f6f578e4e8851f021b9ed69c58\n57ad55aefd13445c94a5ecac47d28f09\n7d4c3d9795570647657231d17e42d06f\ncf698011f90ac05f253c03b7df20edd5\n923007b377bb1cab473f10e6caaeca56\nb098f1db2f190a71d61b6a34f3fd808c\n8fc220461ea512f3abeba927b56dd398\n525c1f2526cf22be5909c35c7b6459c6\n9c686d6ec470f280473f10e6caaeca56\naee2d4cae2954ffde51212f97a7d9486\nd9034b15c7f295551a46c391b387480b\n6482b8e8c8516a3b473f10e6caaeca56\ne19292592dd67f1f5400f0dc3171dfcd\n6ee6fa5c8d664f1349314ffcec1f2f7f\n626738526152dd13d76439fb95cdd2ed\nf9eaaf5abb238c22851f021b9ed69c58\n348fe55c1976b64c45aa033a20004998\n4c427f14f21f128ffa38d2670ab5169c\na88baf98bc73649fdd61bedeefabbeb6\n187b002f0af1ab5a473f10e6caaeca56\n53b6f9eb4337276473f10e6caaeca56\ndb79ceb1bf94fd81851f021b9ed69c58\nb52486fac51d119110c18c6084937a7\nfa37419c844e77076489e70b7c61a054\n5d2e0f8fa5d5bc1496bb71fec38e082d\n65b9b2df0985821463e6a626b8b4d07a\n107a17c6f2dd9c488924120dfad0e290\n3844e637bc560e6298a55e96872d31f\n2f839e1e2072a11be55e3ad998a1ecb4\nea529cacc239f82989a8ac0e4c77f4d2\nb36c9481f71c2428ca92a4cdad802b45\n2e5dbf98157a53a55cde8c99e4b182f9\n73a58e58e26e7e20e55e3ad998a1ecb4\n7d343bbf3265164fb2d2900ee0ae7e0\ndc5c1b1d9bf826b8851f021b9ed69c58\na52f704da0d3c947ca92a4cdad802b45\n7a228c811e7e18ad18e1879dc4ad8784\nd9cfad911b26b2ae5690f18c88ad5b9e\n3ea856c52fbb213fe151fba1241f1efa\nbe28d4b681ab04ecca92a4cdad802b45\n80642f8965edbc51ba01f2d8d5d9ff0\n59a8ea75a9c70f51a0e1f1086c88ba71\n709d6b2cf528e10296d1882ee61d6c58\n21e028eacc690c9de13f97dcb961e16\n75221b7668e145b549415f1fb7067088\n6e25d6cd4b112d0654ed192f2298faac\nf044724a6fb07ec73b294ac02412e874\na0ba66028d22cef6975be43df8325f3d\n38ddc240001c3bd147a34c33abd32f7e\ncd5223d35c9cf611ea7efa739175072\n18a9275b78be4b9ec6d3267fc5334296\n631aae18861692042026875442db8f4d\nf7cca46c4c8efdc6fa5eb13ccb8cd2c6\n300f9c418d6ec9f6473f10e6caaeca56\nd9ee9de8527d309cc0c0cae12126488\n30776fb35aa99150ee3dd0c47654345b\n95d36965fc6d1f7de2d4c157e5bf1dde\n1b1a7af332f8f154487edd538b3d83f6\nbeec9297d087a1677e19c609c6e24294\n8e0572912893a657c697c8c1c6e09e0\n664473a5493912f4650bba674124a73b\n204b1b3e35df174859fcf77704d7f1e8\nd98b63a9e35f50b46a835a8530f31f70\n9901e5d7520df242c61cbe35764dfac1\nf1f78226ed08465f801b0db1d49ea10c\n395d86efa3a1a55a49ddf31673a8d73d\n9a3bf26f461a1973b8013668e30e23b0\nc54586fc90acb4d0a46498323e7a9af5\nd6b7bb6c6203fd9590f0aa5ae25c9b7e\n41bd68dd23107cc4b0aa56928723eca5\n92c4d4bcb122509aafe1d4530f4c6e24\ne0bf76446d320aa9aa69dfdc5532bb13\nd0ea101dad5bc464a134736201a79843\ne7f40f595169f1b44a383db4764d5432\nd8879578d668b458cf899c77ac8ff2f4\nfd98badd65df71f5abfee5fef2dd81c8\nc34ef43ef8ccc3a701a8678a1e8d9e5\n692a66739b9ed5e14c88b7369bd6883d\nc4d4de90ce7839107dcee93b87532f65\n2696ef55dc264b8cbba9b483d5f3874e\n8549c4948c7285f438acd89c0735f4f7\n3b3a3b0d9082236cba77eb053523da42\n3ba5bce1b29f0be725f689444c7effe2\n6b896508bdd231887c3c6f82a395b347\n7e5b55d43322de49295eb8d2a941a3e1\n5cf1f82c6fd31a73e0445fc6d980dd5c\n1c3c8952b92d567e61c6c61410fc904b\nafd73137221d690761c6c61410fc904b\n8606a6353a2c0f7a453660f3d68cae6e\na3e1cb03e1af7c6161c6c61410fc904b\n7323fab0a83b9598f11a194d0ae1bf8\n69e99923c3cbcbcca9fe1734a6086750\nebbbc8673928ad37308fb27494afe372\nc975716963b72b72236804c5ee26a2ab\n402d1624e1c28422383a5be3771c595c\n50840e502ec2a45aafe1d4530f4c6e24\nccccf7342390d139ff1370452e3a0154\n4fa9b14789c8af5e3781057335c8a2e8\n17c08a4bf8224f47473f10e6caaeca56\n1c86d4441f5f38d552c4c70ef22e33be\n9e1e61f67c4a41e09783918b4b55c30a\n6e5340cfe979238998ff545c3abe3e44\nb51d8c15d8f603c350937622ac92802\nc6709eb00a557c9785af3668c1cb30b\n687253f72301b508c9c0a46cc4ca6589\nc179735c4d9f65d7d1521952154c90ff\n6e1d942233917ae996c458818630d123\n7b2dcc7c4c879e9116f7ad0d1093bd39\n596bbe4864580ded5833b7f8c91b5b48\n3c97b002e510db11e23d60a1b706b44f\n4c36e3b0210fb9e899232e04f9a28249\n8c04413559b71fccbda72093f9b5aa73\nf1a20b5b20366d5378df335b5e4f64d1\n368c8d09c88404999be54f79e28fa49d\n6b2766e55b6de7779d34b5c385de0e34\n2ef03b91692d6dae5828087fef11ba9b\n43be650d6fd7468fd9952f9e00a53f0e\n8bf8a7694267756e3ab3dfa44f5fab01\nc3d23ea4f3d1e18180360680c1602c7d\nf5a54f0cf2b575fa9fe1734a6086750\na5047d31a855ffd1f339a7f0f377393e\n51e74bc165f2cb21e2a6bd02594b7cd0\n57e16ac1b026db4e350d065ac10959e0\n709774861793cca453da660a6567c5ff\nb47070a91102db1abe40bb45ea25a041\n1c7a2752e1d170e099399ee63318a21b\n3587008282540864673ddeabdcc8c6e\nfff64da26715b520e40201fea1ad0f1\n6c28f87aebb33c294386e619c2d3f83e\n269676546548fba38e271c56304de147\n4ac021653126a29e98618a1ba17f086b\n97119a85ec049e1df59757e1209f2c7\nef6b9ea0fbba6af828ea89475d3a158d\n7e6da78c8dde0479f30da7304391ba9f\n5b1c430ced749ac3897e805df74453bf\n654bf6800566c8ed95b02c654da6c998\nb25bd03ac3b1ce39d5238b9ecc7822b0\na8ee57eddfe30b35553fca48ce732862\n445185842d893b6978fe949fc1419876\n71ea237c598aad1becf71e2e014ff6f\n5ef8eeb5ba5d2c6ff6efcf1cf084a608\n7076464b3733aa38d2c2bfa672ed621f\n6c7ed2d306fc7cfa4ccaa6b556a5ccc5\n4ebf1a8cbbd4a05228044fe9244db50a\n147889b73fa491d82e877e82c90c24d\nb4715a33fe6d1bb7f63ee8a34069b7c5\ncce33c56b1c83237c7b48e36e31209b9\ncd85df142f1999e5f38ed4497f2c53c\n3f6e9baa4657276f97df6383472cc5b6\n1e6ba139bec5e49dd9f9c2955f462abf\nc5ef2eaae2b2d8673cd3add5aad1c863\n90c4864afa329be1fac5c51be36c9fa6\n39e10c5d24fee4a6311f5d9a1681aa3b\nbe348430ab5fa5cfb1bb46d2556ba67d\ne915bd270032eb0cafb617f7e8ac7576\nd2b847baf4a6d1a5ff1370452e3a0154\n2cc4573bb9441493d12568d09c2fba02\n6c5a34971e2bd518d571d7357468d0a2\n6782126a676ca77d7a04ba129c539b64\nb7707e9f69d6c0ec6c23793d085f1519\nfe1ec9b9ff75e947d56a18f240de5e54\n513e2ad82336f56bc0e3666c7d0ec7d0\nb2f3ab0b028eaabe443ea0e3853eed5d\nb40436b4639e80b8d61b6a34f3fd808c\n8a5b15ec0ed8e9aaba44b506f43666fc\nc5b67d87b22583dc13ca2951bd3ea3d2\n8c346443d2feeaf916abce8cb03e7794\n57a2d812153fa225c740046119b36696\n9757fd5be93ee0fc82b157e7120744ea\n56a3f3d118f350a516abce8cb03e7794\na08b151ac5254df184bf231ea6363fab\nefd87861810e35ca921cb81cb1632a5e\ndbe713c83afe559316abce8cb03e7794\n36ba5d46f034ec58236804c5ee26a2ab\n2e8c4fd40a1be2fa5f38ed4497f2c53c\n51c957fc4a2690ea7af49dac67ce8f\n2e5ab446d0767e1aa6dd909dc6fc8d4\n19245fb8ee79038fcd059a326bfe20ef\n365af82203c96fbca92a4cdad802b45\n4fea9b67188b830f6a2345809e2bb169\n7f7bec6423847a583002e98d41e915cd\n8fe901ed95e115ed70a5d1d8432b5405\n63428e5fb6fb627aea5698f3cf7b2f4b\n3dddc113e114b64a63b716db3275cef8\n47fcc0e1aee36584b1bb46d2556ba67d\n9cd875a215c8806731b76be6623555e0\n846e6c678f53bf422e877e82c90c24d\n4c8280d581df259716abce8cb03e7794\n2a554a704a27618ea37f3fc191551700\n18e16129375e723e6f8f8c736fcc7940\n371c5e74c66d22d451973ec97171fea3\n7b8bcc3cafd34efa8b7227eb0fb9adaf\n86d5ba5d14672ae7becf71e2e014ff6f\nbb1afdd76bd9555abf3af70ab74680f8\n36d0591781587d9fb1bb46d2556ba67d\n8feac5dae8852d2e175f8ba1fccc4d0a\n88aae5646dcad7062a9eb0f146e94477\n5e93dfb8e4d59a0630714334794526d4\n8680d89294724815d9976212be28e1b\n4d52395f788af7e5a413908c0e169330\nbc803cea33d77530a5038167d6f08983\n4c3fe644e76bb94fb3cf5236f651a8e6\n5caad0d7bc6524531e51722eeef6dfef\n48071634bdeb66e271a126804ae24042\n7cdfcbaec700fb98d230ef808f13e7a9\nf3dc4ff3cecb4eaf8ee29572addd5275\n2a5df4956f694efe829e2483ba27ce0a\n2928f77d711bf46eaa69dfdc5532bb13\n6710c87e34056a29aa69dfdc5532bb13\nb4d7ad07dbcefefaafe1d4530f4c6e24\nca5236a5d06b9bb13fcfdd465734daf8\ne92786612a9d60455dca6305fb9f97ca\n413fcc9afd53136a16abce8cb03e7794\nc92ef17bef6471f72a9eb0f146e94477\n215da971831129bf63ee8a34069b7c5\n8109ca22dd6b5772bb54d0b0194b4764\n74b4d0c4ba72eba8473f10e6caaeca56\n39957ba700c2461d6b6786771012aae1\n8e7475bb6c54d39f398bc3e9fa82bf3\n9aca55eb91a9b348ab7ba9bb57593f51\n1736b8494abf38ba4eb766e5a46fceab\n633dd9755319ce369dfd5136ef0f2af\ne333b5c405fbbb98457cfef9186c20c7\ne84eb770bb6cedf3bda733a39f84326d\naebaeaf0dfeb9fbe13ded1857c15b5b6\n7c35cd27ae8d673bb1bb46d2556ba67d\n11e5b7d67058e1d75f67208653687b70\n6c1568ee8807fb73aa69dfdc5532bb13\n97970b4b0f351f5a9697635485e4aab7\nc4a2e92c4b79ef3140273d3a78e6b502\n330a8f1243e7bf8b2ca8bf2993ca245b\na7065cc33270e551a3049d0dcf503cdf\nd849e0fee026c98aeece2324fbbe339\n114b662c64caba81bb07f8c2248e54bc\nc2467fec08734fc81e1473be174fcabe\naf08f280395cd31719f6a4bcc93433\n4f2ef861d32a6f0b45594023db7cd10b\n54dfce0866b65c4778254b98f5b75eb\naebd98c5d7e8150b709ce7955adef61b\n6188f5bafcd88523215d73d375c978d5\n6be5a91bdd709a42634d30cd3ecea7e5\nc6191031c1d685d580360680c1602c7d\na53f8a03871fd1d1c4e15ee0eb85afd9\n86c31c04c436f5932e877e82c90c24d\naaa31209c049647d190d02a746694d92\n47638c9573ee7ba3d8a1849b0098a5e7\n7cfd1dad90b79cadfe2e8ee5c450bb81\n7197ec7776d4e23f10a4b3894aadc04\n3b800720bd8d41657810f4dc287137e0\n558404e6c17c58997302a5e36ce363de\n163786646ae2578749a5fc144a874235\n7ed6fdece737f0118bb11dbc05ffaa74\nb481b928be9f2bb0e71f141b16973142\n79f4f7378074d3478e42313717d27982\n620e8aac415e9805ea752ba39dde460\n8bd0d26352ea9de9becf71e2e014ff6f\n1c1bd2dcbb13aa5a6b652ed61c4ad126\n44eb9496921072b6e5f9082491d52810\n647faf34f7fdb50c16abce8cb03e7794\n4ceeed48d1a48d4ce09e4fc69d1a2697\n47748464909a5af473f10e6caaeca56\nc7c3736ad5f3b252e56947f054952694\n3bf15c48eb9110d16abce8cb03e7794\n7da7ba42dbd0a0f9be40bb45ea25a041\n933b88ebf7eff4c095551e0d9e50cb0d\n6cbadb3a39216f12ac6dec6f3725ccf\nb67d3833e6991de8dd141480e2c154d3\n9167cb083368cc6be3d59d595daeefd7\n6d61759c3f8636f816abce8cb03e7794\n5a728c7371f8fa3f1e0401312b984eca\n2a07432c2860b54becf71e2e014ff6f\n780d41c78c60794a6a2345809e2bb169\n6208166202d795a2272523adb0c9ecd0\n93f298a78be6883916abce8cb03e7794\n470fc68779da0f923d68b6d025852738\n6df1aadb0dbc696cf568f785e33a81d8\n330645ba272910524376d2685f42f96f\nd4d7d596cf08754e2dfac2620a0cf07b\n4244e025c4a5de67ad411f846a866947\n3335fb305afa0494d3c820a40c219fa9\n380e0c29c9ea00e9ce158c6cc0278580\n7bce50c36d8166608e35db9103756ad5\n6c85063bf5e983a3d14b144052416695\nbc9cd53b74743dcc8772afa45900d07f\n679a25d96d21cae4a7feb903e89a6153\n6ee9f222a540a905e4b68d3b17c43658\n4212ae43231ba858b1bb46d2556ba67d\n2fcec17ab09a42782a9eb0f146e94477\nf8857237df1717e3aa562f24645e326\ne0762bd3cd381408bda72093f9b5aa73\n67e1b04f88c88a5c6d07c55cf995503e\n87918f9d328b535befe5f291bc2f5fd0\ned799c077fdf7dc47e5246097b57ccd\n2668f2d9b8a2daad95551e0d9e50cb0d\n6355bc126ff0c2d9ef923467520bd6ef\n7337679ad4bb8f4016abce8cb03e7794\nc83458f94ae8752f63ee8a34069b7c5\n82fdfc4ecc49072c3ffe0e5069bf1eb5\n6ee903e016ebbd66921cb81cb1632a5e\nb811c3c5ac8eeeb2f63ee8a34069b7c5\n651497ec47e9d1182e877e82c90c24d\n239783ded35d9a4e9f40394aed156c70\n8fdc090f498ddb39f63ee8a34069b7c5\nd060adfab4c02ec616abce8cb03e7794\n868af17aaa07b069bda72093f9b5aa73\nf655d1adac9c96d53b05c2ad25b4380f\n828c32ae594a5409b1bb46d2556ba67d\nfe2e5f0993bbd4726fadd0e0ad926818\n910ba017e13a2220473f10e6caaeca56\nfd3c767468a825ba860800e6696b8284\n3462d5da3654b52d4a47c09276b7f6b1\n42ad4b456bb964e1d57c4849288ce494\n70d46fce66801e0f16abce8cb03e7794\n508b9f9da70d70dc809a9c98ca4d300a\ncf3a2894431c55f43b5ec9bc4ed9097\nea954837920f94e6f58ff156bb8fae0c\n165aec174bb93968a114c8c036e29a08\nd862b3766583ace6c2aae5fbcd555ab4\n707c8930b987b1f3a6c0381be0943b0e\nc3cfbe068adab0579583ff717105f70d\n2d4ccc24a821360f8acb0ff76f4aec7d\n89431ed41e43bbc816abce8cb03e7794\na2f658d639f46d95c6d2c2010c35d0b9\n1bb6b1ff46096f592dfac2620a0cf07b\ne2a4635c392e750abecf71e2e014ff6f\n28009514ec0e2b4ebda733a39f84326d\n5f148a8b824ed7e72a9eb0f146e94477\n3261855155346979473f10e6caaeca56\n59c39dc0b47f338c25a535f4350429ed\neebbce8b77bdb53c82382fde2cafeb9\n3302dbdd74d978eeb1bb46d2556ba67d\nca9a4a00209632808acb0ff76f4aec7d\n6d03ff05596201e6d8df13fb69e08d76\nd157bd15ee2d92b0bda733a39f84326d\nb370e4c0d05df8eaf48062edccab3fbd\n5ac9d85db6c0d396249cfd7cdcfe814e\nca6baf5768bc105ace827f20895c88ad\nc0b2a4cec94f10436f0bd9fb2f72f93d\ne0a8ac5ece3222ea16abce8cb03e7794\ndab0cd8adac9404780575af49bfeda6\n46befc634315de3f1ccbd9e5bb82dd04\n5f742b43bd5884c6a352068a7fd7afee\nd1f100f660eae4548acb0ff76f4aec7d\nbe7fe5cfda34ba052e877e82c90c24d\n8ffc484a850350f916abce8cb03e7794\n11b09de6631b3b3ad997cda1a938a10d\na26b62fa78e9d6e016abce8cb03e7794\n53a031dd120e81dc3aa562f24645e326\n4d8a4808e9bf605b11647ffa4306609\n2e0051c6acf7798d2c581ef6c05d52ce\n3339caa48a18e4c358db0ef36af1d3c5\n9232d8834704e5f9dd141480e2c154d3\n572edac8bce600c56f2b832ee4c8c232\n5e87b04efd58cc8922412d2a728de1d5\n3a0c0927ed24090355f11dda63ed3832\n398a791990b106dda5a4c80d90b70728\nc8849755b29ad49b9af07fbc15eb8427\n60aadbf4a0a42360ab62a01524fcb1ec\n38b2bb3bf698f38ac2920de4c5efc2ee\n605be4facdcdfb194dcb1867559ba976\nf578a26ffc6771b21767453ad70570c6\n7cba7b4a6e106bfa2bc5065d4094ca0a\n7f4dbefeaeda54628ccbb4eb8965b05\n2468ceab72b4be041d9cc9d194c8533\nb812523dddd4a34a473f10e6caaeca56\n24c0a08cf0f7421d979ef391885ee5d2\n996354bbe7baa2b2f24437126510c3c7\n7f0f750d6ca959b6ac5eab1f4e9b0f1a\nd6390f62d9e036efb1bb46d2556ba67d\n45953aa831508fb51e0d92ae9d1b10cb\n952160c39258af7616abce8cb03e7794\n4e7d91a6e2300d88a3049d0dcf503cdf\nc09c9e2d85df1abf6a3f171e9d98eb02\ne899ede8bbc146278746a6bea8ba48d\n6d296f7fae3f7f34981c1fca8c617850\n28d7a23b2311b1029dce0c74b747947\n96c84869cb3c6657e49167a1ad5be1be\ne67e3e3a21393927df59757e1209f2c7\n18aad9d102afbca57ba2273581c30cb\n303bbfd0c5862496ec8ca19d7516cb42\n69986baabb9cfdd1b1bb46d2556ba67d\n12d7c4013415ea147f5b0cb87a91de52\n791e45f93e9ba58071a126804ae24042\n6aef84dbaa69dfd8becf71e2e014ff6f\n37954fb8bb9a7e351076d1567fc9aa51\n7a2cb890271a361799b92ac6181b3e5e\n19f52dd4592c3fb5531e940de4b7770d\n3500ccddade6926233307cdc293a210c\nf374adc8c35b9a0b3eb5f91920765edb\n44108b58784ea6a1b5c12c7484d0ec31\n949f6240e1a760992dc53e2d2dfd58d0\nc12a701bbdcb3df7473f10e6caaeca56\nf4822aa5b83b28cb35840786ceee5cd2\n8f8bd59f17f122a163739f01ec1d22b0\n45d94dee6634efd516abce8cb03e7794\n8df7178ab0f02bd7a795ba688a0bfdb4\n6749e5a1458ead5abda733a39f84326d\naebcf0140cd6206ed6dec0e17c3e2971\n2854a948ff81145d2d7d789814cae761\ndd84236f0ef27765a134736201a79843\na55f4932b0f8a212402257734064a917\n3ada93d04b72256df63ee8a34069b7c5\n15c3b923c85d22796d8b9531f93cc8de\n98a1a92a94a025aed28935fb3c99dc7e\n363ddd7ab72bd485be40bb45ea25a041\n33ce4837f282443258c27e607f6e2d4c\n3671b83524f48dc5801b0db1d49ea10c\ncded640727157c18c6142312719d87cf\n51048ab1eeca5e8dee79ed7216eaef91\n3776e4d1e2587fd3253c03b7df20edd5\nec18723333333a6e2fb4628a7a8b337f\ne738466fb6cc90530714334794526d4\n7e12d83df581424ee61b9ff60b1be412\n63e0df089d6c1442f3aed64053e21b3c\na8ab20351c2e7542912749d867981a40\n9171272d0e357c40435b5ce06ecf3e86\n504e8dbdccd8beea7e488037e176d2f0\n233ac4ee75d1ff0c6d111cf7e70d924e\nb6f76fc67324911616abce8cb03e7794\n2490227846d06e5a2387c64d55d0b4e5\na015b428cf628af3522dcdfaad316d22\n7cb387de84bfd2f5fcf949f5ffa7ff6\n57e91b50c5420cbb4628d74a95bb7fe\nc033fb1c91079242ed3696d854eee1ec\n5ad82d706e57607ce4b68d3b17c43658\n29b558ed31fcbb48a2cf64b275615f0b\n28093822cc7fe487ed3696d854eee1ec\n7272b7e028737097f200a72c9245aee7\nb1ad30609c2fa8a2d63b3823877bfa70\nbc36588d4095dc0975c67b3b1e763fcf\nd01a821c8b2c43cea0061ac8d975ad8\nef966d85be54c98ab002e5b0265e7e9d\n706671ef8c7b5e28a6c2c95b41a5446d\nd153b871182b8b3df6aa1413413c923\nf2b28cd6e6eaa9679393793f9cf3dbea\ne6ec389325de7ae5becf71e2e014ff6f\n385d82108ff7ee1be2720e351c87b6fe\n606c0050a2ed4e19d834dead2eb68d68\n932363431a35b189898b91227342b00c\nde58645e0e00e6be73905da0c7336cf4\n777365016f4b7febb623d8d239f6c6ae\na7f8cb46717528edace5721ccacba16\n3905d1dcfd5e702333d445f141c62a67\nf4532b1f55191eb7b9ad5039d820c924\nf1bcdbe16690a985ca92a4cdad802b45\ne1a694f11100ace082d20fd7268a10a\n8e9f7699e30cdd8c247a5be450795511\n171c20ce4de5ee8730f65ce13e7c1910\nab8b6d39057d2f6cc86779a6788ad464\n1c53bc6a3992b0843677ee89898ae463\n6fd6bb6ccf11968c5242705df8faa8e5\n3a6a1feb338c884a8079d5a13e411210\nad00611d36e535f266d77f2d6fcbca33\n347ffb0b0761c6ba8514fc08fc0d2ea6\n8058b048fcc7730ffaf9aa0fdafb5e7c\n4f9db143aa853e69b207e9cc82f7c858\n6979a814a64f6da8becf71e2e014ff6f\n1f5a6d3c74f32053b6163196882ac0ca\n1f604bfb8fb95171ac94768c3754c895\n523673c5b3c12ffcf2c89d2df097ef4\ne8a8d47957d15bbf8079d5a13e411210\n34080e679c1ae08aca92a4cdad802b45\ncf4c819d9deb6533108499aad0a89b28\n6f61af12304781b1297cfecdd0d5b071\ne4d1edc4cda4a6445fb81d6394b59c19\ne5da1a1fa675c704a2edbcbb0bd69bcb\n713b7eaeea5580af1f71b98bc1f8bb06\n3a98adfdc309cca9cec94038e2141ac1\n6d79f2cde0340b5fbecf71e2e014ff6f\n83afcd8ba9cf63cba7094e4ecf18eecd\nb10794a03c59e42d32a4e3dd3a89488f\n60066a5369f1354e631a23fef2ba638b\nb059f09a0b26d4b5cfc78902445ccff8\n3ffd5155eaeab76bb17445a1c29f6d34\nd255a6f670c3ec18d12568d09c2fba02\n3ed25ebb78e48a84ca92a4cdad802b45\n1d700f9bfc275cd23681114f72c10d56\n2fceea2bce91439ca26fdd1a1e470de9\n7825218160564f137039b7b9eba2e0f7\nb8d3a079edbc04fe51a95aaa6caba1d3\n48aaa1fcf8da645c68925c742a212a74\ne4c4167bc6b8e77dccdeba95a15fc6d1\n1100f9eac1ca426a3dc399576707b67\n9dd02330c7c4ec88ec455839e63f83dc\n5fb19e8ecfe42bd170bc1eaaf2d60138\n999007a25b5f3db3d92073757fe1175e\n52c0adae9be5dba12e877e82c90c24d\n642b4f6a2ce0e388284432ce2f42f498\n4de61edaa8e41c3a53c5346b68828e77\n18927999d0c5a9687ba2618ede0d52ff\ne625eb804f2fb6caa26598ab726b7540\n77065a7bc997bae82d5feb260eec50c\n292ade37cba7f109e5eb989e223f7e7e\n1dbb24dedcb23beab1bb46d2556ba67d\n7e7e5752ce2aebd46034a921cc85e098\nb2b2f4952e4068d955fe55d6e406ecd4\n87a7ebcb0dc2285d77471d13a466f5f7\ne8c48b9ed916910ec800bf2938639a70\ncf176e853cc739bbca92a4cdad802b45\n83c21f0f383524e9bdd7ac383509f04c\n389cc4b8b1e28d1770905bc56bbeab9f\n9a92ea1009f6b5127b5d9dbd93af5e1a\n6b7f573997bc6f8c953536e7c905b301\n1bef8891f35535ac2e877e82c90c24d\n6f1c766eeafc7740e5424e4e99c9576\n4b7f9ec47ede386222f104fd8dca95f6\ncf88ac755b07beb2becf71e2e014ff6f\nec9f938ad52f98abbda72093f9b5aa73\n5d62b276cf9582e2473f10e6caaeca56\ndd0b595b15a7203e185ce5d54f27f6b9\naa9cb692a7ca1070b2d2900ee0ae7e0\n6fd9b065c795d915473f10e6caaeca56\n3870022ab97149605697f65a2d559457\nb18e5aaa86cd8716a7fd25564c2e888e\ncadd53fdbf69727721f6e2b0f75cf9c4\n1f167c74bca9ec83622a8f038ee88042\n72ad8ebcd7dfbc87368990af61c704f7\n18d2959d79af059e476502dcb0dc5465\n22c0b90fbda00bb9a3a61aa922ccc66\n58a500adc776ffd5a9655fa3e976d18a\n43a723b6845f6f90b1eebe42821a51d7\na07227a41b866d26473f10e6caaeca56\n5db9380876853a6eb690ce0453406d16\n6208c5fcc94fb6ddafec9b6a5ecfd79d\n27f7336ff6ace6d460c94cf1a48e53cb\n1aef0af3cdafb118c6a40bdf315062da\nfe8850296592f2b16abce8cb03e7794\n3fefe1e60f5683db247a5be450795511\nb47d993a5e2dd15e3a3aa1d2d3319a4\n8c835911f332db4ca92a4cdad802b45\nedc9a70958a17433b1bb46d2556ba67d\n5721c147ce05684d613dc416ee51531e\n575266906372ef117cc922af3684d251\ndedd7ee03210ff8a1ccbd9e5bb82dd04\n5a2d4ea15ef5c18abab6b34711b43bed\n4493638824352150940e51eee9dd2409\na9e8123feadc58d5983c36827cbbba97\n29043510fd903bae457cdd14086d7361\n666beb2570f33c64f64801ad2940cdd5\n7b2c86b542f822b1b8cf782e8c539948\ndca1e82e7d39edcbc2c2c81e2232aa95\n863d6f24aa1a478e569564f61ef539e3\n9d82d5874349f623d834dead2eb68d68\ne4bc9cf3aaff441f19d740e0f6a9a113\n83db7e16a49191e5ed3696d854eee1ec\n8aa9a549372e44143765ee7ffdfef49f\n44c278891ddcab2dc0e3666c7d0ec7d0\n2f369806f69ba9cb55048eb8b7ed14b6\n1dbb02c20bb93af81c1b3b2ed8d13bf8\n6a06a8905edb576edb976bf16d451bb2\n8e1e365bb6202682f43c51e53897fea\ncdec84be0cc9364eecfe83f5db813c4f\n9472d19187081c62fce798408476568b\n7af4a575dc3883afab355379ede04b04\nad4b1cd62d72089e200c039929e0446f\n73beb19621b7547af8a3d805c6a10776\na26d63de878b28fd52980f173b56924f\n10fda5aa525f6232be8100817bfe3c8a\n30f96aa701d4e088becf71e2e014ff6f\ne1197a4adc50d16abecf71e2e014ff6f\n31546074e22ec0b69ce1b0be9ab0ab75\n881cf849fb2d003514d92936db4784c4\n555a48617127033c25ad20bb66839d61\nbf506399c934c6b3c3eedd6d54e2a52\na1e3c4be68cfe110d9e74b7f1cf9cf3c\n556ec1ccfcb79f08a7fd25564c2e888e\n4415ef6ca1d9a6a3ed734d5df4ac741\n41175e2053fb636852e23117ce8d150e\nd17acdc9dd449748ca92a4cdad802b45\n528fffd59eee9bc5851f021b9ed69c58\n84dc5b9d1a60419b7cbc6cda01aaca49\n44f4bebe8b14badf314b3b3dfd6337f4\nea3561150f4f2790253c03b7df20edd5\neb575f66bedfeaf629ebc23acefb248a\n98aa3b11abac3d73b7e1a37f8df80928\nb05d651c17e9e626ca92a4cdad802b45\n11dba0c2ec8127356c2fe9dcfa1ee2f8\n1c6591c3fc686bf24132f89b3e69f40f\ndf037c72470d33217fbbc45f009914a6\nc2d2e3f46f7cc1e8ba69e14689f7b974\nac813039f9a4468ccc777d23edf2f8d8\nb6bcc1b1ccbf0ea0996e71cb10be68ac\naa5fac5424a05c6be092951e627bdb8b\n84394f62a86ddab875c67b3b1e763fcf\n5662d48de15dcacee1c2519ec6f06d41\n58da19fef63348a56b6ef877dc525506\n7dbf6379da9fc6c3a4ee0fb6a51564c3\n9a58eccb0ab51d2fa790ab932daff416\n1bfe2cb495f63c8f6bd865f153842b49\n4e384de22a760ef72e877e82c90c24d\ne3d7833469729b2024da76692f3228e0\ne1134a7e936b516fb1bb46d2556ba67d\nbd33b9efe58ebefa99f8616cdb5dd27c\nc7bd3c33967a3f80d292079a67d9d7f4\n7c0bad8b2b62cb7c673ddeabdcc8c6e\n71304f56bb1165e7f42b5c72b4901f94\n37e8db361d61971b184a07a6c7fa882a\n238c6d6da1c8ce2970097c1b40e1ea6\nc1daf553ebba8c07e4b68d3b17c43658\n36b28d2fd1085c53b6581f6f0cdd370e\n6c6254a92c485787f1ca7626ddabf47\n8c6c271a149d8b68949b12cf3977a48b\n752a3ce746670be176ad064d1c5fdd7c\nb2e13c37cfaba983321ad52c1815971d\n22bc49837550bed21e570d3da54bf9d\n1eae4fcec701c176e742b0b5e87bec54\n4eb5fe734f4eee71c6fc5b6f6b2a70c\nf6a93b95e10a8b2d6aea15d30373dbc0\n4856ef1e80d356d111f983eb293b51a\n8fac42d0e74f5b454ca84d60642ec7e8\nbb7ca919b59a3a2e6b418c7d9fedcaa9\n527d52b26bc5b397d8f9dd7647048a0c\nfc1840952ac878c99b63159808b36877\ndfe114950aa726f1cfd826dd468a5497\ne5c45e408595abe2bfff0ff366de48fe\nd45b86de9175d1c8becf71e2e014ff6f\n5695a98b66b2b9a9c81ddeca50aa3117\n437f3ed08c32f2b9092ea6b09901598\nf70df58949dcb108b682148e4ffe282d\n49da37115bf906a7548ac25911d2130a\nd0cd9b6ca511c6b9920355ae987b66f1\n1d0a46cfc2799eefdeea60824a43a0b\n9ec13da6190ab1a3dd141480e2c154d3\ndf7c767eba9455f651a95aaa6caba1d3\n26f20ab8033f6937ea859f774de0c90c\nab2759c8e0cf3b8da9d243597c4c2c2e\n554a04784b2f0eccbc513bbf92336c2a\neeac3253fc4c0b429092ea6b09901598\n6e651b2230b8474c2de77cee5dfe5031\nf16194da236b7c595264a3f45260d821\n53d9995a0b94fd37428df271ebc70bc0\n77a759df0166630adeb0f0d7312576e9\nd471c4f43f008df5c1bcae9def1986da\nc41580019d43348d3a3afd30f2e86bd7\ncb9577139b34703945e8a12904b50643\n8aa5d1c7ca4e3f2e61b9ff60b1be412\nf3e467dba61ebb972a84c9dfab949065\n5823e5205bc7eb46cebc874b6631de1\n2a0dad4f32251b353ffe0e5069bf1eb5\n2b5a333c1a5aede3b5449ea1678de914\n9ca127580ac4f9712aba37016d02e162\n34d28083d9f0c31fa2e586b3e41e79ff\n2f2ed1fa349d50f3bb15a692385994d1\n1e2f9cb6b33c92ea82381b04bbe0ce6d\n886246c286351bc6cc010a80df5d3c87\nabbd90920a240df2ed3696d854eee1ec\n836c3205338292d3a696fea828ec5eef\n81bb9f249771d31ac675ce607c2b4b5f\nc8fa4fd7fc424121932abeb6e2fd4072\n4b1227b5dbf1cad92e877e82c90c24d\na3881c3f4e8c807f2a9eb0f146e94477\naf814b4b43fd826a3a0daf3e5400b95c\ne97af5444370eaa95fae7711b4095f8\nfc521be0cb604c1aee4687e8f2543e\n66d89101c69cd1fc1e4f5422b970bb55\ne2ea542d46c76a002a025f627835d975\n63dceacb54c3c170fc7fcf88dfdc47f1\nbc8e978655bb60c19fec71e8f4aac226\nd10226fc9aee707972a38ac2b8f5cd48\n260f0644b293fccbfbc06ad9015523cf\n49a114b29a54300e51a95aaa6caba1d3\neb46e6071b4f72659bc0c5b67eaafbc\nba1a26acae4b773431141a7d4d06dc13\n1159faf9bf78998493680c5a9a367b4a\neb1d1ac801d6bafbf949c235bf4afe6e\nfc2b81391e185db9f1335b4fef92b83f\nb18899d2b002ce0f80360680c1602c7d\nd6f8cfdb1659142814fccfc8a25361e\n5b74aff38b82c58f453226473c9b5a05\n85abcf26aa761e9b21e570d3da54bf9d\nac6977ed53e041392b03387fa8b1d3d5\n9025ac13eac31cccf5cb3ca022cf045c\ned6780486efd79a9fc3898548dce2392\n274bb81c9dd9420b748999a5d81a158c\n4baaabaced0c9e0ac0e3666c7d0ec7d0\nb4f385b36ef0918d9393793f9cf3dbea\n1cff510c0630c3cc673ddeabdcc8c6e\nfed8994632223d52afe1d4530f4c6e24\nf8dc466677c26ac6f63ee8a34069b7c5\n173669aeeba92aaec4929b8bd41b8bc6\n37a049a9e32c17b2afe1d4530f4c6e24\n27645458fec3d7ed514e3d96995c555d\ndf741c5b5cf87b16c85067e81ba6deda\n335b3ad6f7a96bf251a95aaa6caba1d3\n77e3ac704a2933d0921cb81cb1632a5e\ndee83e7ab66cd504d88da0963249578d\ne9bdc6c0a9e4675bbecf71e2e014ff6f\n2c08c221f7c6ccdcca92a4cdad802b45\nf4814bc5063ee3a95f0ad3f281ff385b\n1b5b5a43e0281030b96212c8f6cd06e\n5042d8f781a58c4c9be457a8c6fa099b\nda73c98813b82014d94cee2a22cdfdd2\n61abf78387c84ab67bc163a1196fba48\n6cd11fccae408795a99406d7384c870d\n91b636d0c4729cda1d9cc9d194c8533\n2236a1b9cde71eff13d31c5a107f3c4\n6283a8fcea4976fe47bff85f09fd66b\n42dae5b435c27851b11647ffa4306609\n2e8a1ae108dd0d89e8a3b392b986583\nf9f50e199b706caaa148ed368ea0303\nad1db5ce98d385fdd1e15301c83686f\n19d49c8015948b742d60c8689a64d7a0\n2c3e7991d4b900ab35fea498c4ba7c5a\nd9b2fc71e809140bbe40bb45ea25a041\n51f4aebb148459a45fae7711b4095f8\na6acea161250379aba3e2415e22cd45c\n76cd991287a5aac9acc9e84c45e9a610\nb3047118a9b0d7b7e858db1dc3499392\nc778e4d590417da82205cec171865d70\n50e3333f66829c8fbe40bb45ea25a041\n16bd0438de54fc91b1bb46d2556ba67d\n7611c8605cb47d74b11647ffa4306609\n261f4a30328cd40960a676833b21afd4\ne21ff1f90750ab24b8085998d32fb54\n8bf2d0d0b01f6476c3fe7930fce05ded\nfabcb04fc015f822ca8bf2993ca245b\n30f0ba361010ea11e66cabd11ba41eae\n372b1a139379f5198e42313717d27982\nb659b096b9cd0de093532d4a06abe81\n2b246a989e9e8be151db49e653372c20\n128ad72f92a3e96db96212c8f6cd06e\n1151e7cd24f5bd21ccbd9e5bb82dd04\n62032b070c02c6b1570673441ebdaf2b\n1feeeaeb8b56e46d2dfaf88f42097063\n3f16d6ac013aa946977e464a4b82757d\n2961e679a651dd5ad95ed6bb7181c98f\n1f6ce6dd6720436642534f02c8e8b5ac\n618e8b78bfa803dab1bb46d2556ba67d\nf7da98a59900ab60becf71e2e014ff6f\n85bb9748c3836e566f81b21e2305c824\na86ab6f8af60c6afe1d4530f4c6e24\n868a5166e31428b16d8aac72cf093e59\n100c3076c74ee1874eb766e5a46fceab\n5edaef36af2826762bf75f4335c3829b\n1660d6b7221223708a49a62fbc70ff9a\nc58db3209e58872556f3b9566f5b3b77\nff794bcc5ffe460169e495ca617c20a7\n1768f55a3c29cd483337cb9d908ce86e\na838af854310e283e8d78fb938bac492\n69c6599f55cbe2474eb766e5a46fceab\n47a0e5448c4a3bcbb1bb46d2556ba67d\n532070461b869aa7468dbcd58a793b1\n5b0710d5e9467e847d80f0c0ccad8837\ne6b8fe458aba5b0da86ce1de1d1e7ff6\n1c5a350ea0f55f793fbce9ec40e1f047\n2525b83c84bd3afbde2d51ea8231791\n9a2854600f24017949b12cf3977a48b\n4bb61e5a72bea4506ca2b6e5474aad11\n676ea229aaf8f90858c27e607f6e2d4c\nc8ab7f11ecdbf873921cb81cb1632a5e\n3975b2350688e38c65552c4ac8607d25\n1e54527efa629c37a047cd0a07d473f1\n1a64bf1e658652ddb11647ffa4306609\n383a4d1ee8022e9a61fd7e090d4d0d45\n4e201189ae860008bc1bdcb65bf3d926\n6056451a4b65a12858dbdf2b5c6acfca\n109567d7d55b8fe515a520abec2f04dd\nbacf0105f617a750becf71e2e014ff6f\nf61888bca4392106bc790478b4a84bf2\n470f53291d23cf0abecf71e2e014ff6f\nbd3130013af1d709be95cf6cfd2d0f0e\nb2b22a1454f2c88bf63ee8a34069b7c5\nec67edc59aef93d9f5274507f44ab711\n4e6131bad4ae8b6c91af0bf49336b8c6\nb57bdd19852e0084f7a5eccf728c3b75\n498b7c799350d1f7c4acded0fc8a9118\n332ac5346c7d3c0f8e35db9103756ad5\n676e3e6067fc1b065552c4ac8607d25\n3220cc9f67cd763af63ee8a34069b7c5\n2dd397a57b35e57f2c6000457712c234\na6842a04cef3e5ce69a949ac99a843c4\n8b049c92888475f67c3c6f82a395b347\n5822af4cda46d8c2f952aa5aa5267659\n3264f78bfc3bc58c9213ea6cb12e4e3c\n72502c40fc59b62f4fb68b983a4df738\n872e01a1c34494b737fd267fe4b3a5ee\n22abdb50fcc189d58a1aed4fb5fe5280\nd000ef0c691489c9801b0db1d49ea10c\n41c5c3955dc6525a402257734064a917\n6a23da6a9ab0771caa69dfdc5532bb13\nd0aa115eb63f6f0c97df6383472cc5b6\n8df83b28d786ccfc10f2ef3071342a2e\nb8c8758f8ee058182a9eb0f146e94477\na5464210795a915f9aa6f213afdff14d\nd691906c87bb2850a9733fa2ac6b95bc\nf64f81f7cfcb74033a2b1a2e5e169910\n8e2f0f7f5ca505b56227cba038bf7c95\nf795a928e1c7136f94d732a98738804e\nb0fa729f031a97d2c3c561b608f78503\n7db6c18d976e52e451553ea674d2701f\n40b272e537fae1418277d1ad96e14e9a\n718bfae0c87ad9fdb04112587bd2b79\nbef5b9686c2f93f46a2345809e2bb169\nf120085da70b2913627279ad10ae805a\n38f323fd119d14ed2a9eb0f146e94477\ndbded0816afdfcf776ad064d1c5fdd7c\n783577d449be4ded3121f82ae456ac81\n49a93fdbcaa0302ae434963ea517a487\nd6089d1b75c35945b7e8c57d131d2ca7\nd4251f9cf7f1e0a7cac1226cb3e860ca\n730608de801837b495b02c654da6c998\n29793366c4b45bf6f43c51e53897fea\n3a735f1a5fe8906cab0fd77f2e9aa584\n1b25c745164e53b822d2fb8fec68f2a1\n94c0575659c6cdf2091b4cb93147ff9\n7022a37dd7fc841ce98e65cfc071e8a0\nc21cb9575910e30bf0174ad879a5b1cc\n3645fce32715e0a4bda72093f9b5aa73\n53895830484cd75d9a68e1b6bb3d1631\nc9e555bb1a17cfbc5d918097f81825e3\n3bd66fc2782bd2019766e05e7d6c9088\na111cef175177b3cd89cde5d5f759ea7\nc52a2f6396ad8d5f97df6383472cc5b6\nf91d1032b7cfae618e4e882feb9b406a\n5c4bb9e23c6cd8511371f3c322b54f2c\nc4941d6a2266813c3a2b1a2e5e169910\nee0232b37ee6265bda72093f9b5aa73\ne6581335186f5f6d8f01b3789ded1e40\ndfa6e60e478d5053705278f93079331\n7d59691881b13cc5702956de1b65c053\n137f67657cdc9da5f985cd98f7d73e9a\nb6755cab505f437375cad724c63e222e\n72d1eb25d911b6d8913eef1194316fef\n209c79dbd4f7ad944ee32d005103a21a\n26d201a532879a60a7fd25564c2e888e\n1963641a15916c03709ce7955adef61b\nf2b350b6c36eb73d1fac59b924f395d9\ncab3b584786dda8c85c68dc758ce6c5\n5d385a0a87d0df4a51a95aaa6caba1d3\n816f9a529bf7b14817d5c90faf553cc9\n663bec87ecf2e0adad0e351bfd714e3b\n5dd97775bf24ffa2283aaea3c1a7dc36\n61f4cd45f477fc7a48a1f672d5ac8560\n7dda382210dd768680e74058ee862f05\n94b3689f899c8cfbd575863af568c85\n57aa7560dcfecea81edf5a868fdffb8d\n77d884ef56bc97a8b7ddd670a53fb311\n58d9741ad324623e9872e22d6b8eb647\n43fc65dfe952a7f4cf6923c08156107b\n5e857724d62912969acee38782dd9680\n491653e537f1a701697b84068abf146c\n5dde5594b4e9e86ce60ff101126e254\ne98955e5d46a492c036e20efe5e5ca8\n744f3661d9030c059cc32a851e7d6f32\n58569e7feac27d3e5da8146fec888d45\n52a988b361f6cefd685753e73124c6e8\n1bace29924c0ae42226fc3902f16303f\n8d14c94dd325400d93b973d059f27e65\na3e8a28918af7b07e3857ce739e6606f\n1399eab8ad7262eb7f3efc94c2d31dc5\n906e2e532b7156b612be63c74304797c\nba0c32b3feba49b0b40adee184c371d0\n63cc90709837d314a0b2db16370345f0\nd18817af1a2591d751a95aaa6caba1d3\n9e6156aea0c7e60ff7d6fd2038bf9a11\n5ea6bb423b1600141d225d751745cd28\n528c01214da6d4bca7fd25564c2e888e\nf34c03711c3fc44ac10e9d4ee4bae4f4\n26c382bda051376daebb91b7dc4caa91\n98b30f0a29fe2a1ba7fd25564c2e888e\n98a4518ee8e706c94e84ac3ac08acdb2\n69492fdcd530eb3da6ce6972f601a2e9\ndc2c49d8617d400daa44bfa127abe4bb\n5d2e6410d4fb760befdff89bf9a96890\n8798825a3c68e5c7e0470509f60266ee\ne717bcb56d012a48b1bb46d2556ba67d\naf834c760bf3c75043f0e92e826556b8\n34412b56217de1112b12ea83455b0f44\nb9c0f9dbfb5a1c0f99684c8184952917\na39ed639d1da66876d57cf36a7addb49\nf81db986082fd0562ac826a3c82da491\n95844f86f4f0a6b58a6cf8c6b92417f2\n6f793e0f29f6b0b4da82e7357e8ee170\n48862b67f5932cd4473f10e6caaeca56\nd0a906517e0ec98589fc8cf5232ee9c\n2d41d907b7cb558db6f3ca49e992ad8\n6c22203e5ed35df9ca4aeb694e04f8df\nd652c35de82c3f3141fd6622cb2ed89d\n30964e51b5218487577fbd27130e143\nec469722be9d015c1ef32d215d1c8df5\n1ec1c4aa9190e767da5421a736792418\nef0703db8a04f8c0c0e3666c7d0ec7d0\na34dc1b89a52e2c92b12ea83455b0f44\n6d01a15517fcec07a546b0c1c6a4821\ne128a506f2e29a6796cceb824e3c56b0\n8fedb0c03a49bddaa8c38723d07b122f\nc7ce82b4b1e795b0cfd826dd468a5497\n22d57b895b9cd22137ca7da637f7c918\naadf8736528b0f46857652684714945f\nf414e36d6daba864d9bd5ae694086d5\nbaa2f488ec67a0a7c66e38c3984e156f\n2262d8b1d5fc79b67211919686015200\nfa997987367ed84ef15cbb7bb6511cb8\nb4ea44416a06834af200a72c9245aee7\n2c304c54a6141d214ff3c6764341833\n52c589e86fd500cd4a42886683bb52d2\n3d6e798bed67ab81f00cd8c386c592fe\nc12424d1cb48ce0fd0a4f72b67c7f064\naa41aa1837c809e1e12eceaa46673a5d\nc683e8e57b20ceeab927782fc69a1fbb\n6c50a9b8e01fbca27dfb1ee6a4b12bf8\ncfc8e5925bbec93de20af544ce47dd47\nd07c8208ad9dc35780e74058ee862f05\n9807c1d0bcec85fcc3c0146ad3ea2d7d\nf045547c7c6e5d0ae74479f4823fa2bd\n1c14ef4c48b7d95d61c6c61410fc904b\nb0a659083ec6e936ca92a4cdad802b45\n95ebb3fd80f885ad676f197a68a5168a\n12498dd65e8d65ac3b6f5204eb590354\nda34cb394fb3caa58dcad5127c74b8e0\n61645b21c344e22a65dc1e664bdf2e6b\ne999dfb757ddca4830e7f6cd6fb3f1b9\nffbebc7c9a32a6f88ec8762dea278247\ne95d4b7aa9617eb05c58fd6a60e080a\nccc6b5ace9f5164d26068f53fe0ecf07\n3026dc837dc5dd7a157e36ecb370d387\n7434c137695be0eaf691355a196da5f\n85914342038de6f160190e29962cb3e7\n1f7393970917e558b4a20251cec15600\n6ae21b4b5aa92db4c79d3cf109867c13\n1f37a6fbdf7c807e7d439639178556bc\n477ffb061f40e10e148f8c864a546424\n706083fa2a8c2b50bc97decb713a2619\n24dc3903b254fe41b448bf2dc92c4fab\ncdd58286e3e428ec1fabf3cbd0fc77bc\n9009d75263e350ffb3b0f00a15b90e0a\n72f6c3c3078ef567dfb1ee6a4b12bf8\n3c02c18d64d3f13b8c988ea512260358\n791885fd798b1981c1006ed55bc1a3fc\n9abfdc63aa88be60733269057ed164db\n9240401e750395b456fd4619a315629d\na281de4b24f5500d4c40f34de8f3bdb8\na54ce961d973443a0daf3e5400b95c\n1176dff7f0ec879719d740e0f6a9a113\neb40501934995e1a6560c47a91b4db1\n5d8476a9aecbbe1e9ec9fbf723f60ac0\na583ea14f9da98936436916a86a90ed7\na59c142ed6850a26ad4bd5fc1269475a\nd1dcddb5b1d7404dd9b0c189eb588ce6\n79d9cd9a0cc2184ffcc96966174e5650\nbaf3415a57e6f282b23c333ee1a445e\n88a814d2107f882d3d30c6f269d07627\n9e4a79d30930cc2fcefa74f1d0bc6e6\nf15ba529063317d241b8aedea2034739\nd4cec810b46292ff1f759e96682e340e\n9de10b4469cdc435afe1d4530f4c6e24\n7faf7e8c2f383eafca92a4cdad802b45\n7aff83bed75b6778e5e8ebca62d4509c\n350be6825c19fb14e0675251723e1e08\nfc99fdfd71b5662a669a6bfc71569d\na495bebb2ebd72f3dd7cb6e3ad90d3ea\nae9b244f9bee122ba35db63c2ad6fc71\na886262ac3be5ca7c126a452758c84e7\n13d0f68f32a86bdfe3857ce739e6606f\n5e4a1ac9bdce2766473f10e6caaeca56\n167ec61fc29df46460593c98e3e63028\n70d31e0100cab3fd77954285e7764e1b\n1713a1ac8aedcc522b12ea83455b0f44\nac482136fc30fd5ad8f405c5ec4e8cb0\n23e8adb3bf1961f85332d3b92481b499\n819b98c138192c88e5e79d9024e2fcae\n5801f9eb726b56448b9c28e7b121fdbc\n4dd97a6805c2797d18d95feceda870ca\n93d49d2e5e4ab1b7ae33d942430658c\n2b043f3cae45d4937cbc6cda01aaca49\n431ca41fdf0897c628ccbb4eb8965b05\n6ea4111bb47039b3d1de96b5c1ba002d\n7ee2193b072afa652935bed12a852dcf\n79db6e5fa70b39467df67c910758dfc1\n36b23cc38786599285089a13cc567dbd\n1b2ef0809ca1abc7ca92a4cdad802b45\n37e781aa8ae8933a61c6c61410fc904b\n38334022b922a9d4e7540f431cab4686\n752d240eb33f328cbf95baecbc060806\nf8c4bfc065e35555aa44bfa127abe4bb\nb554614b14148e4ec0ed6ec757ca50f5\n471673f3f062abd473f10e6caaeca56\n4fcf76fa7f07a0008bb11dbc05ffaa74\nf6e0b8a0746d36d74eb766e5a46fceab\nd5c4532a34ba10e6f9798a883006064f\n4c6aa3e7a8130295b528c0abff96f586\n8b74a58c28cac774753d1d86ac1bdfce\n3b2e74068fee2458dd1e15301c83686f\n90902c72c195d3ce8256c497dfca7529\n8b722405131e569db927782fc69a1fbb\n545abd37dd50dad953536e7c905b301\n3ddda21d4496fbc693680c5a9a367b4a\nee0edec0ac0578082ea8e4c752a397ac\n2e37013195d95f494470fce578e2b84c\nbc7ca9eec356ce21ad32396cbf7f43dc\n35155f8cacf6d72471fc7d1bbf34b979\n34762df3ff8961188bb11dbc05ffaa74\n95ddaba8142bb8572b12ea83455b0f44\n3dd52c850785a6ebbaf1745483a8b34a\n692001fd91d8328ef421855cd210fbe9\n1e6e7bfb08b6b44d615949fb78ffe44f\nd76c9eb102316ac631a8860374e7eed\nda82ba81a8fb0737d06f1bbd2acc051\n870086475e8af25bae57d337a2e5e53\n3831ed7bc22100f7c3c8fbe62717803d\naec393b8c73d3a8ae4bee94a37836d67\ne337e9940356e866b82298c7ee2fcc7\n575ac5c53ab9fe21a26fdd1a1e470de9\na49041daedac3ecf2fdea40a56b4c57d\nb0810f509a3c4cf895cad68eb5eb0e38\n1ad321f067ffbe7e51a95aaa6caba1d3\n662cd6478fa3dd482d7d789814cae761\na720d17573022d9ac00fd1150223027\n9748063440a449ab3db642d8dff7fbe6\n7a8f5c085be36a8052aa494042b7c9db\n2c1c8c4aee1e79d52aa494042b7c9db\nbbca0e2391217de71e95a82bd2f5907a\n9fda50a84e042ff1a7e7e5ea49ad8e45\n8c1b20c4c37dc679301fa882a9655049\n3ef041182cc1d037a9d3767c58267708\nc6dbb4874805a2c6c2998c73c3c35adb\nb76bdcfc277f54007f3efc94c2d31dc5\n2cc413c3ea9800b3cf1e58caa15acb49\nbc533f9881b0775c3a0daf3e5400b95c\n62393db2dee065956e28ffc6e1f368fe\n9f5d5b655ebbbb9c4d31b03e74c723a3\n87ee241d3d0d1dda4ff3c6764341833\n7a0f252961e5bffad95840a0da458be0\n8361aa7ae1f7dcb582ea71649733f2a6\nf7b9529fb166ee56ac922d597da8f180\n20e01ed9c14d4659e61b9ff60b1be412\nf238821689b42db5d95840a0da458be0\naffba519865b72fc2c95ae1829869305\na34260b8cdb1ec95b63de680261b9e1b\n15e52e44cdcc80ed13ded1857c15b5b6\n24c0c6d558d4d01d8772618b7452025\n12d463649ed6c176ab98a7077c964a60\n5ad4cc3f8e191c61d31d4c555d4c5a0\n3ac08e66bd7da4c35da01f298003d56\ne4b5734836d9519aa8a84951596cc1\nb87ae16029527cf3fa87597d91a3e9a2\ncfb6c8867c6dd84c80e74058ee862f05\nf8b92a0ea7f4705c9fec71e8f4aac226\n8e39ba11949027ce14914b7641b2fd67\nb990ae1858bb82c133f84f942f9a2bf5\ne4d396067b97f3676dd84bc138e22252\n5f32aca282eb9167ff1370452e3a0154\n17f89c25a3142ee09d2b99af43da16b3\ne67509fb6192be6a7e7e5ea49ad8e45\n6482e3afc2664e32d30f2d8d219e111c\nc2283d62367d637249b991141ee51d9a\n420519a0f7390564f500cc506a763c18\n87020c25b9166cf11d27be7764701cfe\n56cca58a4f37323bd0889537a7d54003\n56c056544a2fba1614d5081e13f5a1db\nb48b8791a3b09753b8d3554bd033ee9b\n3c103561d9a29ae7ddacb20b6a591772\ndb91e70ebe09d5edf446f92b52bbd82a\ncc7dfb5ecdf370a178c14a9d99ecf91\n49f3932e6fe0828951cc889a6330ab15\nd8b50ce6cbfb56a4786993ccbbbff425\n1a0bc9ab92c915167ae33d942430658c\nc2d2eae7ef1a34e1f500cc506a763c18\n2ef61a1083304211d27be7764701cfe\nfc5d8e25052fb713f559279c88cd9a37\nfb20b20452ef661f500cc506a763c18\n6c85bbbbbea160bd81bcd6355b440fd5\ne2bdf01abc79a8d054b49557f8ea8b42\n358ddbe8b39125e9e81913b1de19c3f7\nd967be366b99ac00bac978d4dc005d3\n5881807902ace2dc7d26edf2a8ffb68\n936eb7eec6b76e4b421c2195de5e56c4\n5a841a8269d3560d756e18912340de0e\n481c55b1fa36f6c7d834dead2eb68d68\nffbf897d9867fadff9a62a8acc9e8cfe\nc721c1e89e68e01fec4be884ee173bab\n35de0d0cc71179dc1a98dff5b6c5dec6\n626a407fd0fa17d3aa1fca93ac59c77e\n9cabc9b21a7c5fcab02964031d37f87\n3134927c492c39e241d7734b73edc062\n2fe4a878e34bd3bab8013668e30e23b0\n62a7e17ce83e2f9cc0ed6ec757ca50f5\n7f701224ca471b2ab8013668e30e23b0\n23e7ae83601f893b575116d39d0ffbba\n70cf106dd369bf3ac427f8508e3d634b\nbbaef5a610b0b4d5368f3995546e59c8\n10555502fa7b3027283ffcfc40c29975\nfdf2a756a86b2946c427f8508e3d634b\n4eb5ec5502561124875fb780d36841f\n79c9b9b6e2cb15a2dc1f7c6230f38f00\n468be6b80d1c7dd655ac255cda83e91\nddd5e2bb26c82862b41ac95a0a9b3aa0\na2fa0bfd39718f1688a610ac9b7aaa40\n921f87f3d9a4cb8ddb37d391409760c4\n93357732c6306cb51673e1c313348a01\nfcbf9e1dd55ab172ce27281f3b76d1f5\n9a806af16e5a102786d01a5629641c74\n107699ca67fcdf3fea999fe4ffdc2504\n3a46c9b9e8b18d6a61c6c61410fc904b\n2d1adb247cc7a1e353da660a6567c5ff\n42ca4f6a7d7a39712a9eb0f146e94477\n38f403b915d950d3ce8f4a5eeb103d2\n27495a8836ead3d55c5dd9508493909b\nd13d0612c64c1c872457c273ba02ebf\n6201a29763c2256a2bb5796f842ca661\n49d6a631f23a324cde361784b4e1f04\n8b8f4f12e5b142c016abce8cb03e7794\ndda0d7e01642f399d4118745f38eac76\nba817f535c2668081f757787330d376f\n61c4db4cd886250f473f10e6caaeca56\n31998170afc1a0b9d13bda570aea1f6d\n24819ffdc34b28efe4bee94a37836d67\n191f9cd970e5b0cc174ee7ebab9d8065\nc8c51e709d1cdbe0673ddeabdcc8c6e\n7b74eb8f053aabe64eb766e5a46fceab\n4dad98955a47e81a8b3877a62f2cbe1d\n307e83044ed81f6c473f10e6caaeca56\n5089b134ef31941edacf4de272c1e30\n8e8da02ac0168a47ec5e3fe5c33367cf\n3efdb762f2663a014c9dc258dd1682ab\n5fe3753b18cb01ae1b581e1887fa67b\n1feaf720692bdacc27a1a7fdc1941283\n4eeac6360031021b8141ca5f94f1242d\nd9867d92edba3d0cb96212c8f6cd06e\n794fc3e07d3c5954514e3d96995c555d\n"
  },
  {
    "path": "data/filelists/03001627_test.lst",
    "content": "ed751e0c20f48b3226fc87e2982c8a2b\nd72f27e4240bd7d0283b00891f680579\n5fa533f71e7e041efebad4f49b26ec52\n8bb332c5afe67f8d917b96045c9b6dea\n9a82269e56737217e16571f1d370cad9\nd9159a24fb0259b7febad4f49b26ec52\ne642ac79a2517d0054f92a30b31f64e\ncaa330f85a6d6db7a17ae19fa77775ff\n4171071eb30dcb412dd4967de4160123\n1d9dbebcbb82682bf27a705edb2f9ba6\ndf51cb83f0e55b81d85934de5898f0b\n7fe08cd7a9b76c1dcbde89e0c48a01bf\n33c4f94e97c3fefd19fb4103277a6b93\n764866604b035caacd0362ae35d1beb4\n6bd633162adccd29c3bd24f986301745\ned7b1be61b8e78ac5d8eba92952b9366\n4719c75b8ce30de84b3c42e318f3affc\n6b32d3a9198f8b03d1dcc55e36186e4e\ned953e5d1ce7a4bee7697d561711bd2b\neb04d1bffae6038c4c7384dbb75cab0d\n64f6991a3688f8a0e49fc3668cb02f74\n5ee976518fc4f5c8664b3b9b23ddfcbc\n72da95dd6a486a4d4056b9c3d62d1efd\n18bf93e893e4069e4b3c42e318f3affc\n92e6546c4aca4ed14b96b665a8ac321\nc520bc9dde7c0a19d2afe8d5254a0d04\n875925d42780159ffebad4f49b26ec52\n953a6c4d742f1e44d1dcc55e36186e4e\n64ef0e07129b6bc4c3bd24f986301745\nb3a9c49a1924f99815f855bb1d7c4f07\n73b7d6df845221fa9a2041f674671d05\n6a00357a35d0574b8d7d306df70cbb46\nff8921eb06e95b9cfebad4f49b26ec52\n9b902b5c6570acb314b96b665a8ac321\n8176364215748b23490ad276cd2af3a4\n6dfb7b5b4bd0d5f9febad4f49b26ec52\nb9d60d124e24849d37b2bb75885cfc44\ncf24fc2d10f8da31283b00891f680579\nc709aa613431c0538a653a9f65a410f6\n5141e8716b98a16d632786b910371d31\n4a329240c6a9d2547b11ae648ea92233\n25196058a95b4fc3359e362142e70c8d\n6d78523e939aedd482e23b5f9fd46e1e\n60c0c32187f4e2ddf51f77a6d7299806\n7facccfa81369078a8930422448288ea\n55eeb952519ceb87c3bd24f986301745\n2499541ace317cbb8cb5d9909aeb1309\n9979c8433d92fd80d1dcc55e36186e4e\nb72342e210414024e3e472a115551ec9\n8a5d60067de905336c183a120a388982\n776c1d1857a4ea3d853c3fc864dd58b7\nbc76dfa9e0a91e131e06124bec25a766\na094ba480568333819fb4103277a6b93\nd621bfa4a44a98e3829e1f3c4926c485\n97da84d5d78d84cc2360e5e238139587\na1e6226c3a23ec808a653a9f65a410f6\n1e53d84e48bb7d25febad4f49b26ec52\n106a0dbaead5066519fb4103277a6b93\n22ada577361ed0374b3c42e318f3affc\na4d7c8b97066cb74f63e8e405d49b8ce\n5623d0ec9efedbc9d4da89766e80607a\na2824df0ddb58c0617b431cae0dd70ed\n9b4d530487df4aa94b3c42e318f3affc\n8f0deb6b599006a22cc460e9d064e57d\n2718b1d46ca52df052bfb1d5ec273240\n2403b6769a03c8a466ab323d8f805a57\na345ea2820d2f4af7ff6ace05b36a5\n1f501c5ed6423e259c89c86daa5af59d\ne440059fcf6f36496ebf11292bdb9130\nb1add8182311f2a9f71e06115e9c3b3e\ne4a890f2330ebd7e4a11872aa986426d\n9d0b25421c13008e35836c728d324152\n7661a325724ae00acd0362ae35d1beb4\nf551bf7431e0fd7cf937a9747c26991f\n7727d0eef3eeb3ba73b2b620da30da86\n5607b02869c1f8a019fb4103277a6b93\n6dddf2b95ca09bf5febad4f49b26ec52\n77e7660d71c6f3befebad4f49b26ec52\n8affc6302970a589febad4f49b26ec52\n47cd848a5584867b1e8791c225564ae0\n7f2f8dd929421cd130e6a28391d443c5\n97326604c5fdff1febad4f49b26ec52\n8ec79ed07c19aa5cfebad4f49b26ec52\nc0c823f094d972c94b3c42e318f3affc\n780aec25d416fa07ca9b40e76e725878\n317a2cc9f3b54a48283b00891f680579\n77fbfd2f194ed73975aa7f24a9b6003a\n4246c8c293c56ea34b3c42e318f3affc\n9b12d223347d4bdd4a11872aa986426d\ncc3d9160369d09845e61ef8e2af97499\ne69e032ca0bd60a4febad4f49b26ec52\n9dac39c51680daa2f71e06115e9c3b3e\n31a3884f500d9fa2025d98fb9de28cb\n19ce953da9aa8065d747a43c11e738e9\nfdef0425d385c1cadef295ef48e5307c\nd48dac046436a29ec3bd24f986301745\nc65cd2f7588764872b70eac6546e93fd\n1e6f06d182094d4ffebad4f49b26ec52\n695a02a5620aae6e78eec18a8a3356a2\nbd0918d75e22cbf9febad4f49b26ec52\ncfb40e7b9990da99c2f927df125f5ce4\ncc5b5e367ad8eaf19fb4103277a6b93\nd0894aed032460fafebad4f49b26ec52\n650d540bac31f56ffebad4f49b26ec52\n88bdfdfb2a8b94ca1b17743c18fb63dc\nfb794b0b3260794bfebad4f49b26ec52\nc1e8b1bd34874c83febad4f49b26ec52\nfd8c375d0a267d20283b00891f680579\n8c0a0360a7353ec26dd3cca80cedd415\n1e68489b0dc2bfc3327289c00b6dc9ca\n689f7ad63ed9a7baa75d03186a0409e2\n46d7e85d80411f50a094848ea4d06501\nea5c19a6ea9b13719fb4103277a6b93\n325bf2aee84a1fcdfebad4f49b26ec52\n59fd3d1409c0ee2e47bc3701b998a7d5\n8707cf0c311ba8f34b3c42e318f3affc\nc9dc5d85ea3bf4d8a1088e4f586b1246\nb1c221e3ec7fe34782b50ea5cffa80bd\ne4a93adf5399b23419fb4103277a6b93\n453a678dec4e9d40f36ea1eb6542fe7e\n9a91a491a9e74ab132c074e5313866f2\nd04d854533d618fbfebad4f49b26ec52\na5df9c511f51228f19fb4103277a6b93\n6af8d7bfa508b8d23759750e8db40476\nce474d7c415941acfebad4f49b26ec52\n46c8f742ae31294cb4a4ddb21cda79e5\nde3e082195346ca419fb4103277a6b93\n5d3060a3470d853dfebad4f49b26ec52\n5a3ac1ba6f751bed79368d1198f406e7\ndfeb8d914d8b28ab5bb58f1e92d30bf7\n810cac0d137efb1d21bdbc0445d9f748\nfb912528e642f6ea7c7cfdf5546967dd\nd3a38afe0a0341cefebad4f49b26ec52\nfb369c50dc8fdcc5ff2c92c2a4f65876\nbf52432c9b1b5e11f98c0761af40e04\nbb04dc0b336abf4b263915c09bc4854f\nc394dfc3c8573d1b19fb4103277a6b93\n94b39e206f1bd77c69e31bb722067900\na58f8f1bd61094b3ff2c92c2a4f65876\nfb4e388b57e36e7ceca29403b7226aa1\n56fd0fa3863cd4c17d63360731b4227a\n250e0d866303abedfebad4f49b26ec52\n90e67facc9af413abc19762eaa7ba40f\n44ddb3d46266bb0ffebad4f49b26ec52\n990d8c0c0008081fff2c92c2a4f65876\nfdb00b6e3c3a8c6e9e7154e1e649e020\n60ec0611befb7102dbca69f936e89647\n699fb3293e219808599dcc439b161a52\nfdf0fd3b18066cd7e8b2b8dc0c816caf\ncbc76d55a04d5b2e1d9a8cea064f5297\n96e83c79e8d76d4519fb4103277a6b93\n935f5e58e9e15231febad4f49b26ec52\nfee36ec8c8ae503fc68456e8da5b9a30\n3421ad5a45b85f7a4b3c42e318f3affc\n9b42da9217caaed8f51fa0238791f5dc\nd71d9d23d786cc8dfebad4f49b26ec52\nd4b4d348cfdc2aa5f99372bbf9c0b8a8\n311c07b96ce39f82c70d3fe6f2ca143f\n5f355e2a9fa2f0db4b3c42e318f3affc\ncc6d6035bb5074261f98c0761af40e04\ndff768695c3013aaee3907b60a74e8f8\n4a9d3ce54c09a2da696b74614952b2d0\n60a5795c905f3bb157f5033576317e1\n46a6c470367cb57ec5facc3cc8dc041e\n103b75dfd146976563ed57e35c972b4b\nb60fb4126e9e7c2aee3907b60a74e8f8\n6eebd118abb1b4146d60aef5fe7e2185\nebf1982ccb77cf7d4c37b9ce3a3de242\n632a5ea290b0730c6ad8177a9d42d3c9\nda6cbcac794d377df9111ef49c078dbe\n247dd48e4b6c029e4b3c42e318f3affc\n225ef5d1a73d0e24febad4f49b26ec52\nb8bf7e161cbff74066ab323d8f805a57\n4abbd2b632d3aeae4b3c42e318f3affc\n44ce5f9acd418c7dfebad4f49b26ec52\nb2f125cba550eb8bfebad4f49b26ec52\n69e6f0a5e903cda466ab323d8f805a57\nc0e667218359978d94ba68807fec4bf4\n9a0571ae6169a6ebfebad4f49b26ec52\n6897c2665267cca39eea64ae4d2b4158\n3f36e261cc87648ac3bd24f986301745\n9aece6c6436cde6fd9ac1bf1eddffd24\n367dc1e6752cabbcc34bba142e6e15e6\nd7b8189fe69cebedc41b07b1627c4b43\n4a672cf09d7fdb7c83b06dcdd869d9ac\ne30b412be565a1026efe57da6d3d385e\na565a80b093f12005481bf9052f50100\n1c17cc67b8c747c3febad4f49b26ec52\n1cc3513e4d81516267510d684b7bfd11\nbcadc00cd1bdc19494db33559ec0df30\nba56f02dee485974c242632b2a8c3129\n32b7f9324c56d6131b02cde7e81f0fc3\n662f95ed8d41a24bf63bf7d908efc575\n9191445d1c215cf09a8ef44e1d2c5b75\nu481ebf18-4bbb-4b49-90c9-7a1e9348b647\n3936ef166d22e60ff7628281ecb18112\n4b01dfb6fa24eb4c4b3c42e318f3affc\nd1e9d5b534c77a2a14b96b665a8ac321\n1aeb17f89e1bea954c6deb9ede0648df\nc7da2d72f9927f1881dff5c2e57ad46e\ne41e8329ed0c0b88d93768e7b9b1eabf\n9c499d86350d32a28639ef683ea7ed9b\ne6c7e75046f8946b27bf2eac25b523a6\nd2304054a8dc7ea4febad4f49b26ec52\n858e512945d4544644175b4dddf5be08\n67713c9a313ece7226f51cb1aef0ea9c\n939383f36692508afebad4f49b26ec52\nc51937167dd0db45f7628281ecb18112\nc31a206ddb92909e84f0c4075db76b7c\nf46ccdbf92b738e64b3c42e318f3affc\ne4114b81f793628fe8f8c11a24c52ebb\na38cfc9d2003117e19fb4103277a6b93\n3aad9ca0d7fa80d76beba0439e85fb62\n9231ef07326eae09b04cb542e2c50eb4\n7eb4a453070b3f090d1267f8054d8a8\n4a19f4e47476ee654b3c42e318f3affc\nc91eb95b40e4b6f8e83221ad0d21775\nc0e5edb2602a7bbbab3d781e4dcb85cd\n75716acbe4ace649854cb2d2b60c3da8\nd57c9aac973c3722197c43c7dc584772\n4f7523a3d276bfae4b3c42e318f3affc\n80415f427a9368227678f114ae956b82\n62f442aaa230eb34e7697d561711bd2b\nbc184c3cbe3349b19fb4103277a6b93\n3c8864b07a5c0718861df5a407858f2\n27ea798c55699b6d2c528d33bca1ac2\n1da29597f89c2b004b3c42e318f3affc\nee2ea12a2a2f8eb71335bcae6f5543ce\ncc2639f8c584001a922dfe32810651d0\ncc30a723aeba69a139e0f39f5249b0ba\n4372b33dfc84c2f56a9ab6fc87e1604e\nbfbc5e6ebe1813a5d9fad8aba2c312b7\nd9bbd1a1eaf6d2259d3ea1c6b57a0095\n6634fdee517153e7e8523833000f615\n72669be1815b2bb81e4fe86c4ad3ec90\n8b3619396de4df10db8860d0872e9c55\ne6b77b99ea085896c862eec8232fff1e\ned47d02d4518fb5d9cc2d4308810279e\na93aac9ad86008e69fc01fb65ca37d30\n39911f927331db1c8687ff9b0b4e4ac\na3e4639ff201f69b22a3043dcd383f68\n2742c0a5e984d92fa0dcc52ca811e565\nffdc46ab1cfe759ce6fe3612af521500\n40168f46019eb867be7e1d42d63ca9f0\nd3302b7fa6504cab1a461b43b8f257f\nb8e4dfe08a43badabaed5cf8a752d243\n8654342caec219e07cbc6cda01aaca49\nb3e4c494a862986b9226550f5173ae53\ncd939609247df917d9d3572bbd9cf789\nd274fc14092387c1e17e1cb731e2fa4f\nc24ac9257d6392bcf284804023c6c8a\ne8fcc8054e445a0c20768660cf080d12\n1b05971a4373c7d2463600025db2266\nf51ab8433184dfd2c8687ff9b0b4e4ac\n3e8ad99691e8ea4c504721639e19f609\n8ff4ba87d700054546992ce9fde1b2c2\n2bbf00f0c583fd8a4b3c42e318f3affc\n47b37ce8f304dd0bbababe11fcea8796\n2b55385a63cf62f6bababe11fcea8796\nb97dc64d0406c07259d43b06ede1b24\n5e44499940fc3dbe57a847db7547c1f3\nfeab80af7f3e459120523e15ec10a342\n19666f52289092a3394a3bbfc81460\n4f5639e943b60edc600515ec9ccc96a4\ncbfa51dd6b795262774ba10f0bcc178a\nbe9d5105e48ae27e713decb1a0563b12\nbd41ed35fcfc0ab7b5e2296ee51ed515\n3df44d30265f697e7e684d25d4dcaf0\ned56af61297594bf1c4300651205adf3\n8bce3b7b7f0f48ad28a1548e344f0e2e\naa80259311e2a8c0d8bd0a659ff7eef6\n5b68a6c2baf0ad61d0de9c949c366777\n37235898ebd06b3b504721639e19f609\n9fae8d94a028e9ec2818b21315fe1bde\nff2223a085d32243696b74614952b2d0\n701300d51960efc8932a5c2746cd09a4\nf2b2448978785cf5fb63369d5dd85d25\n30378faa6bf5b245fdef1c01cbd4ae0c\n4e358c2dc0513971f98c0761af40e04\n3d67836a3bff5f733aaa67d66207f5e3\n871243bc93615a758df4f3f615062e0\nffa1e25f499e586694e98ee4fdfd7464\n52c32b187590e8f3bba5aaac798c64af\n7fcde5fc8e023dd2a6fee8e2140acec9\n5a60c649a221293d72ed554eb3baedcc\nc8265e04c94bcb5a1346e336f65f96f6\nf68ecc9ec512915f36d8dd30a594b2af\n2ce61518f138b7f75d009c98a5b96836\n748957972cae6b03c56be62b05937331\n6a3d2feff3783804387379bbd607d69e\n6e1e73e14637a28da1c367d7a459a9b7\n5d4252d082ae613a2fa77440dcb93214\ne68bb6f55e2454fac7f1f7c0570e288d\n2de04227fae28e70b6eb6f056d511fe1\n3fa1eeed2e8e2534febad4f49b26ec52\n895be5f65513a7d09a8ef44e1d2c5b75\nd32fafb61e1e4a5bb0d5741be7de64b1\n49b38e22f104005ecbde89e0c48a01bf\n808fa82fe9ad86d9f1cc184b6fa3e1f9\n3b788994cd578990c35131da26f8061a\nb7a04fb7a5fb790d96626c84a010ee5c\n70aaed71e394259c87a0ca36e3a00f4e\nfe31beab802cfc56c2bcda262700befe\na48e359faed3da88d3519c62a8100783\nec5d90a37ec99980e2b417d08f69e019\nc48014610839bde3b8e687cbf40e9e47\n184b4797cea77beb5ca1c42bb8ac17a\n97cd4ed02e022ce7174150bd56e389a8\na8b5f5b6bf0cb2d6876b399a99a15c0f\n103d77d63f0d68a044e6721e9db29c1b\nd619fd50c4d0fb46dea83bbf303af433\n76919a456a23b9779368d1198f406e7\n7a1de77ca204eaf28a514cac7cb18507\nb13a4df698183bf9afb6676a5cd782b6\nd2c465e85d2e8f1fcea003eff0268278\n86199aed92fa1f68fd60059ad8523f1a\nbc21c95f766502a78b03575bb54dfd4\n2f0a94efe6d1da7f8616812464c86290\nf9bb302961c91d7220160736f02bc9e4\n91f867d862e6c96c3ea242d1c18c3489\n355fa0f35b61fdd7aa74a6b5ee13e775\nee4858f78dc33591100e9bd5c4b0af54\n3b1b0186ebeb8ea579bb09dc5605a57\n6e46e4cce527abc114d449899f34bd9d\nd1b2d8868ca506f2a248097aeae36abc\nc552529c54b0612e53041c49040be3d5\n8a9af7d8a83d90fcd53e36731300f5b4\na8f6ca4151f966f5c2e24dd3e5cf2d2f\n2ca371de1093a3867c9386abeb61de4d\nd990c996a67bab91d9233930731da67\n519d19f3adebd20aba49014d9a3afe99\nb1f4b2c32f8a2fa77ee217c21e683487\n2b85487133b04a543f86d4a1692234ec\n587ebb2aa71acfe644dd3aaee16d3f4c\nca4900c42b8016ef8397cd720acaa508\nc7e590c0390e8d5debe67d9b32c3ddf8\n81b27636162e148bb3fb065fa3089331\ne0a0d5c2ba6fdca215b55266697a17be\n3ae022522800685c610195e4fb10d1de\n80fab0c55a60abb7dafb0be26f6b45d5\nfdac1f9c0b030841c8687ff9b0b4e4ac\nf19e8da9d8f369c531e63f1270e2b445\na9a1147eae9936f76f1e07a56c129dfc\ne325f573905ff945b8183a4a81361b94\n6abdb0b46d2a3fd02813aa30be7ebdbc\n3af90da238ac4ddbf91663a74ccd2338\n63da17eda9d415b5319c5e90e9cc9126\n9a54daea9071a536bf80985a99195eb8\ncff9e23014880e20b2e8bfcc2dfe93cd\na09a88c11d0b27368821ad3452f1c8c9\n90b181de9005fbd04cd0eccf52b625bc\n8df0910897498e764d183b64817fa09d\n42140baad25c8598baa1a4ff2c45ffc9\n734ac9809aada180d18df440db206fb1\nbd0b06e158bcee8ac0d89fc15154c9a2\n6678f63c9b584a549d9e5580ae9f8738\n51f4ea68be319fe8990e5087098e19c\nf1d6552ca66b2e37713decb1a0563b12\n9e6b834449ed2db86199d6fe090be061\n499c4b519c708ae84cd08aa7c510fb85\n80784cc9f549e4abc3bd24f986301745\ne3d23dc47ddd9620c9be65dfbd21428b\nf1a1bb6ad29d703078d928ba1c4a6f75\ne3adf2e6b3c3b015b63c025d1a57d1e5\n3466b6ecd040e252c215f685ba622927\n6de012f3ce256e9930c7810cba6da248\n8f4c2a7243b571f3b21450114b9ae3a\n2b454a3d18d5efba615debb484b4c30\n41ce60d5443c203eb31c248b8665b2e7\n95fe1f3dec357704e27790b0ec8671f7\n5490efbdadce792f524f4eb395a8604\na682c4bf731e3af2ca6a405498436716\n87e11c9e61442510b21450114b9ae3a\ne682c43e2f4e7463d0ad32b8d8cec005\n51c8f249e778e84a5bae8923b29985ad\nc12da8acb2c7973597e755dddca14449\n3f04adffb69b5ebee95cd0dc8c2f0e83\n9ab18a33335373b2659dda512294c744\ncc5dea482768651ed0e93cdb469eb63\n3aab16309520fb21dc0a8cba62d9a78a\nec78623a598fb6d67fa68300c57bff0a\n9d395454d6de675d2025ebfdd95f4ba7\ncff9a523a9e20eaeb40f0ac0fb9a650d\n52240b141c70e6d8a5901d93c937a07e\n513686d6d63a1d8e577b5d737869717e\n3774a2b8c71e70b9f18a36d57b7cced0\nfee248777c9c4807f8bc1f8036e08e44\nd454f99b99248bf337c99625b0c170be\nc9d8573a048c0e959c0ca344f487323e\nb6c9495629c00419940806ade53ef2f\n9ee4b9c97bcf4b3715dec43ae6a12831\n68b88c0be088c21d5e0096fb2d3266a\n2641f174d2d240ea788a5c6586b10c59\n5edfec789343e0c3319f1c1eee46f332\nc66a19f08d86386430bbd4cddd04c77b\n8d2a4106de2e0e9f952334e469766710\n7f5d8154877887727efcd98cd5f24de\na598b87a9e37a438617c72672c86a49\nd2992fd5e6715bad3bbf93f83cbaf271\nccfc857f35c138ede785b88cc9024b2a\nd9558dccfe8e3381e45ef4135c266a12\neac5ffc4c4a7da80b13f3ad708be4bf6\n5107542cfbf142f36209799e55a657c\nf1787517791764e74b3c42e318f3affc\n9a42cff883cbd358106f706dac6c58f0\n5516e76a34984182b6f6d1d58b7b1311\n49aa713bec70ee1f1104b8f54582c707\n25d40c79ac57891cfebad4f49b26ec52\n80c1f7ee486e7b5aa61649b05d63e9bb\ned948a3d2ece4b3b71a782a4379556c7\nefc684ff4dc6ff49ccd42a2d6eea63ed\nf444df40dadd83e22cedd65b2f6d1fdf\ndf2b7e697ab6ca0f155d75bbf62b80\n8c8efbe62a1547942b90a0fb76278f6f\n951fb0d7ad8ab2bec5b5bea66ef4576d\nd0fad7458cdb5178d3f6d823f04dd65\n11e0f0dfd3d0b22130ddb6ead95f49cc\n8a232028c2b2cfad43649af30eba8304\n5d02aed0e9c93e829b9f2eb77f5e247e\nce2d77c8b0436db4f5d0dadcce96e179\nc826c65111c867ab45a1df43bcd9e471\n81628a0b5f7f9ad7ba94feecf6f7a200\ne8126f9e2d106620d2f33aaf794b5932\nd3f31fd0fc99f45e8b3f6b4a44a70e52\n20fbab2b8770a1cbf51f77a6d7299806\n4702e6196503ff84f1c0e03f321d0b20\na0654bdfc12e9e1ac64aef1ba2bec54e\n4519d91ba59f0267cc0484ea4f50062\n43897195d7f893d759c257be4c612509\nf495c500ef468ea781a172d69c52a28a\nc47f71319ead4eb8a4fb72f4f3b0e317\n28bdf067b9fea968f17e3402958be9f\n8cb44a50906b827615e7ec87bf4cc5ab\n43d38ad2f5d103adf9b9977a2406713a\nd2b9e98373e96afec8d65ca96e6b18ef\n38afa26a419ea3abed040525648fc6d7\n8ec16015c0956f847acc6457762e6ee6\n3853339519aca1bdfcd4910413c446d9\n6a01eed3a575987211e48e4bcdc4a2a3\nd417795442cb0f75593ebeeedbff73b\nb631b78c2dcc748cba5342d638d0c267\ne2c16ac7606317b3e85a21e38833ddcd\n74c06950e3f8d25157f40ff86fe708ff\nd0fa70e45dee680fa45b742ddc5add59\n3cc90d903e0ec7aa61e11d707ecb7fa0\n117bd6da01905949a81116f5456ee312\neb51e814c3f44a07914ced7dab3536b9\n3f7808c221b01668b4d174e5c61f344\n183974726abab0454aa6191ddaf4b676\n5f7615668d2a7b313b8d5c0ebdd194c8\na8dd9990ecd74c45435897641a7ee684\nd50a49368f5d0e7c284432ce2f42f498\nc67a255a26e30abb6b9f3980da0b1dff\nb07c1560f5c3bf20525319ccc5eeb31d\n9a6061dc962c0480ec2a7a1f5fe7365d\n6015aaa9ef170d9bfdef1c01cbd4ae0c\n1b81441b7e597235d61420a53a0cb96d\n94371ddd6d62f7b762ec387b772e9e1\n97d75ad96c2c08268cbb8bac2032149c\ne052eaa1d5bbe795ded10515704c9720\nd13eb19745344ae5fb0eb7e753c06942\n2b6cbad4ba1e9a0645881d7eab1353ba\ne476879972230ca719d8721fec72f0c\n20eebdb573142c4eb0a9829865a5e240\nf36e83dff72cba53ba9ae5e8f97b3d4\nb2ba1569509cdb439451566a8c6563ed\n9c3d7b65c739a618285330f26226f8fb\nbf236db6dfa517aa456cbf78e1e89022\nb021f7d705c4113ac7bed72580dc30f\n71c83afeb7e203e1bb7d8446afd650f5\ne89689500a1e3b95fa935eb36a2e89fe\n688af6f43377f16bc3bd24f986301745\nc6409b289ef9aa2176f028c3dd1719d5\n9a864d5de972a8c7cb686b8b855fed61\n6df1ecffaa0abdbf327289c00b6dc9ca\n735b16d075ad6ce3d197f67767b32741\ne35d7d19dcdc9e5c30e06a011e63236a\nc9d68e1e5309ac25ac57e7d566628472\na5a2d09e5384237869513d0907f19c8f\n986e49bd8314d7424addf6a5f8726274\nb65c3e0800f1c67cf70828d0af10edf3\nb16f1858c1a7c0a65001cb19c4a0eee4\nc98b7e1952c2c7bb85f6153ed2033a1c\n5563067c7c05518415aea01a869de65\n671d34c27cc0f1bf2deeb5ec76cf103b\n4a24652fbf2bed7e93583c67df8faf1\n445d6cef46b853ee713decb1a0563b12\neeaac38269e8f591e55fdfa049133df8\n6e71bcc876af0e319b75b6346baf0c12\nd5360f2b0b0299c29b9f2eb77f5e247e\n7e2ef2a1256f2dc1ebe13e25a6ad0d\ne8788e6f0292f503f4b6538438a0b930\n5d959b0f79a22e8c67c9124d122355ab\nc2956c43f763e135c9bfaa062f2e9d4c\n7293291b3fe8233fdef1c01cbd4ae0c\n5c9d582488732ee0d7f7a4c4609b0913\nb3fd987b330d0d2acda56795a6fbde1f\n5a61caff5d5b3e22424f8f8e828c9ab9\n78e1977bc5f0f4041552c6ecbda964b\n4bc5a889b3ef967b9de7cc399bc9b2b3\ne84b5bbe91e0636cb21bc3cf138f79e\nuca24feec-f0c0-454c-baaf-561530686f40\n48b257f80c7434cb56f6fc4b4ce1db04\n34d3960d35d8d5219b9f2eb77f5e247e\n6ecec258a1b6fe2a6fee8e2140acec9\n328df096e089c4eafebad4f49b26ec52\ne93649e36377a12050e52c25df21b57b\ne6ea5e70c2f29d881e8fd793667dc14f\ne2c7903ad9e8f497a7be81e6de3c404c\n8031478c3fe31ddcc337647acafe65f0\nb30517fab8b8300bfed6ad7429dd8443\n4428b7dc4b6696812905b6e26038a78\nf3fa7bd00b76f6a87a8a6b9421844d96\n3aaa59b19eebcb5f41552c6ecbda964b\n44a2a3952ea2315ff51f77a6d7299806\n4a0b61d33846824ab1f04c301b6ccc90\n9ec08262ef59d69d6412cccabcef91eb\n4c97f421c4ea4396d8ac5d7ad0953104\ne00b802d5b93172741052e43309393de\nc8938f54fecab41e77cd061c90fcdb44\n43f762270b438fe618a36258eabc2b9c\n5ef73c9bee1b4adcd019a8a03d4a2a3\n56b171b1f1521d27291d12adef12641b\n89dd53d0377c28207f7114254c4286d2\nd4edd167061dac5f52a3901fa1436b1a\nd9156f5552178de2713decb1a0563b12\nbf7e8e0dc4f4038cc2567be77cb7ab45\nfb00ea443c74c00617c72672c86a49\n795f38ce5d8519938077cafed2bb8242\n8a845bb67ee8486d6199d6fe090be061\n61b984febe54b752d61420a53a0cb96d\nd1ec6e9b8063b7efd7f7a4c4609b0913\ne6a5c9fdb609d00a5ff6fe84f53e00a5\nc8daa8e9496580667b9c6deef486a7d8\n4647b2b982deda84217ad902ee02afb5\n813be9a8485050571563f0911e3e5fc0\n3622d983fd6d7b98e3a73d090627e9ba\n564f5f96bc718194166420d06689fcf\n862f70e73fa70c9b1a719e2a845bdada\nc67b7b62e529295dfc30525e763ef5eb\nec41d22862df4aa7eca29403b7226aa1\nd7b22da1174eade770bc652a18e29c3d\n77f5b356fa515f1f396bfe08dd5ca134\n5bb5b15807158f71504721639e19f609\n2d44744a7ea0bf724b3c42e318f3affc\n9ef3323c6ced7dfef313a0fb5fd4d79\nd6e0a95f00c7af6fbae0ffb97058b7cc\n672e20cc6ffa29d41c6aa36e5af1449\n1d6faeb6d77d1f2cf95cd8df6bebbc3a\n951f1376751fc7294b87db09ac4cfa73\n1de733a48e5607b22d9c1884c92fce12\n6272c21e439e0205c8687ff9b0b4e4ac\n670b6b7d3fe6e4a77c5a5393686fdcfc\ne31d71ed32273fede42ac999db581f5e\nb899182610c12c78ed88a55f92d81d7d\nc53fa6829ec9a947d13b7d13ee32497\n6419887905d9d67b7d3115a956c20163\n21fb308ca737174e22f2f93459bd863e\nb39ebd5957397e6a5dca6305fb9f97ca\ne09466e9c122dbfdf51f77a6d7299806\n5510d5af1ab5714b3c42e318f3affc\n9d443b06a03742b9bf6931cd2a81bae5\n9a35f15e924e19db637adadafee6f182\n39825fb4341ebd1ccb002c1e2b5fc68b\n2c14e910ad4173a898d5fc0473d00a1c\neeebe3fe14ee4d3aebefe6b1d594ad2e\ncbaca6a6edfa2d512b520984c067934c\n873c017f35957717b56a13a4b2372aa4\n884a239f3dc6a91cad484915511ccff6\n1ee92a9d78cccbda98d2e7dbe701ca48\n3c3b33293af7459f2677042d71d00b91\n93556cf01e19f638bf80985a99195eb8\n88cb38c612cf60dfab50b8ae6c38666\n2ed8d45343a442097869557127addfc0\nbd1787066323c7a64424fc4d3c9cb157\nd9a1f2e7290cd2c3baab0c7159046dc4\n69d6d2835bdf709b6df61a30cc649b07\n73828d9eba46266c4b2e4a0ad7c25461\n284463280e6a4d003719086e0b4ab8be\n283e59109ef763ba2168ec2d80dee966\nfb847cd696ec711197f2016c3d6097c9\nd4f194efb445914e4b3d6a0fb5682cc4\ne175bc785390e8f6c05575120a46cd3b\n47a45ce9fb219083411e8b42940aba04\nc4cab2a416a4537e2871cc0b3cc1a485\nfa7347547e290732bf65e1af50b5b7d4\n5283a98b5c693e64ebefe6b1d594ad2e\n5a95f4fbfbfc55bd93768e7b9b1eabf\ne4931ffa06d7b05cb04cb542e2c50eb4\n27c476533e66bc04b21bc3cf138f79e\n3c786ff99885e95c685d4893e4ba8951\nd15c94b08b5d92e57962800be79c6e52\n9c88f3031c4a660da6fee8e2140acec9\n35d62c8a02fc15b1a2c5a50ad2499011\n404bfa75a054791920e791c9b6d759b2\n477dfe89f1d5df337fa68300c57bff0a\n9682d28e03acd2e3735013f3db728e20\n6621723f7af35f2dcd344c2b2cefcda6\n374bec02e71fe06528b4c5ec471dc963\n38bba5755f7d97ee70205dfbbf1e6bb6\n6d6e634ff34bd350c511e6b9b3b344f3\nfd43278c60023763d4da89766e80607a\n8c76176c82e3e42d283b00891f680579\na7d124f0c0d9b27479b3e1be3524f72f\ndfd92aab082e4915e3d9492680c47206\nd97c5945e9449a58737e4e0df09d751\n1d828c69106609f8cd783766d090e665\nbc78aefe3bbceb4617b431cae0dd70ed\n249f3eb6a7236ff7593ebeeedbff73b\n95e5f6e550761aefe65b629e4a22f51e\na2441f03fed7c13def31f91fe6afc8fa\nc79532846cee59c35a4549f761d78642\n485831d92925bf03f3d7c13662c10792\n375aab9251b2df59b7a68845946bb67f\ndf23ca11080bb439676c272956dad3c2\nd2af105ee87bc66dae981a300c94a911\ne5ce55d61830cc017f1cdfc0a8f38f2e\n7ee09fdece7d9142afdb9a672b7d3b8a\n594d5b7f3e705a1ab3234e0da44b11e4\nbffe3e68857faf7f4d1242a685303c47\n5fc6b04623ae6a9963ed57e35c972b4b\nd36de0f850783d8fd6b3090036b71698\n483cfed0659965ed73c478529c40c4e6\n914c92a6b9d8e7956160139444912022\n3f8d0d53e2bd74124b3c42e318f3affc\nd5939ecbcb583dea9753496ba23f2183\n70f57047512c2eb84104b1c5cb7f9280\nd02eda9e00688d71d0c63a304a95442d\nb987a2ca54c6ddecb74697ced5978572\n7f6858bd9d4af9df97316612e1a4343a\n19c8189116dd7cd3e95c611687989498\n7e6b4a7b4dd60c40cc8bd7a04c9659f1\n79e5eb7be94f5479696b74614952b2d0\n9db73a6184c82d33f28699debac30ad6\n3ccc4efe519087c470ef1a9d40467de\nea572cc193b804399c66df0f068d2a36\n1d6f4020cab4ec1962d6a66a1a314d66\nb70600293bab55c0593ebeeedbff73b\na3688350b1556cbe65ba78ad9601cf1b\n1c758127bc4fdb18be27e423fd45ffe7\n731a357bca179804951c1fffab4f5807\n43e74f15a986eb626a90f735365ac29e\n2c76aaa00e55c26836c07750784b6bc6\n9c50878c91aeb8126bb6bc0db07c71e8\n3586ceeaea45b3598f5bccb3529a48d\nbdd29e651e5f6fb2b079317292bdc5d4\nfc3d4268406b396e71a782a4379556c7\n8e7714615a4b1e6f82390c5f604e0d9b\na578b0027e7d9ec7b2ca3ea77e53abe\n257deb231ce652169f2349486c570dd4\nea1bfe81b88395fcaa29e9f0529e8ef7\nd6f2d44c693d2e857062f2d72cde5c95\n94b779e6bdf6c3d171a782a4379556c7\nba9ce924d452795f519259b5fe9bdf5d\nce1237c5ad42dd7b737a00f007529fbf\nea7be2b97e78d5b35a4480134e0cdd21\n9e9dc51a4e0db2e4c3bd24f986301745\n3b2710b509c3df0ea5e8cf3aa1686d66\nd2597d18fdc3594e1dc59d2adbe5297d\n971539fb57b476d5c40593250b73d0c7\n5ce323f8499cf60ce51e3cd2b72fbf02\n6072a4739c12979baa69dfdc5532bb13\n37ea477f2b894c6ca72559fc4f86f700\na1133464132d65fcfce0ccdae30f97db\ne8eedd37cb054e37b59d74a7c956bd18\n6cd8056d4dd6b3c799b17588a5699c72\nef76b9cbf76bad40586ef70b3cee4240\n27f4207dce674969c3bd24f986301745\n5eaa2730f10054d0f6cabe1df6f4c9d9\n4e26eab28703c12bdd5f3f2440a93d21\na3aa7e473a8059133087f84b199fd297\n483d22dbbee32ee54e5c7d89bdfc49a3\n97bbc8970b05c4a3fcde6bcb709edd9a\n2a75b2bb82d7f77c3f9d6e0ade5188b0\n8778c23fd21bdebf8a80d99ff4e76c20\n9c8d3c5779871705d22218517e73100\n3a74e3d5172ee94fdef1c01cbd4ae0c\n4b79197258fad3363efeda73d60343e4\n1c9d7e56ae8c90c87ac6ce513ae497d3\nd7e26a070ee3b35cdf6cfab91d65bb91\nea281c9e968757dc351f7b956f3bf26a\ndf609533cd186278398c7598b0d2e5d5\n2dc5055b8d900ec7db4b0ee93cf61ed1\nfd2fbaa023b5e3a81718a174f9ac28ba\nfc2a1c4c332f7731e45ef4135c266a12\nca01fd0de2534323c594a0e804f37c1a\n312b3fc351fc0998660e7db8c993ec8\ndef03f645b3fbd665bb93149cc0adf0\n6caccdad9f8d4f0a7f1cdfc0a8f38f2e\nf4f1aba65ebe48eb70930286c914896b\n7f271ecbdeb7610d637adadafee6f182\n2621666fa21488a4e922ceea1248b9b0\n75d0664363f418efe461a9a9741d9415\nb33a3b1627ad61eb8ca4809dcf42fe1\nd915d2f1664bf76e71a70be9f12ce8b0\n804cc836409c921ea666d560e4dc80d2\n2bc587e0b4c0a0aa5a99858ad1805187\n56cc047440e7c999a23949c21eddef76\nff034050f7ca727ea64c9c407ff9dbfa\nf2dd3bc7d6c85a8f2813aa30be7ebdbc\na5898fefb1733333a82b0d8d157287f5\ncdf733e544e6646f9b75b6346baf0c12\n78c9204b2eac432b65b77a565916c7f\n17aeeadccf0e560e274b862d3a151946\ne6c11fed9469141ace8fba09dd640742\n738395f54b301d80b1f5d603f931c1aa\nb1adda06d8846afcb96f0049223adf04\ne803b31e2185d0405784b22e1081a3e1\n5ef3e4abd4386c8871bc6030acc85f1e\n74cc57ea0e2e06dbe4106b1d06dc89b3\nee665ce6679ac8cfb502ac2eb9128f9a\n2a05ae00b701fda36567137a59cb1a56\nf2e2993abf4c952b2e69a7e134f91051\ncce9ffdcc7ca8ddea300840c9d7bfa74\ne279758e8a5b6a8d492d9da2668ec34c\n17883ea5a837f5731250f48219951972\n956063d67b939431f56aa11cd5e0c3e\n6a9dce6566cd61652b339ec555ba3bfc\nbe0c5a0e91c99e804e1a714ee619465a\ne4b40369894a16ce6821a1e68ba5ebab\n525776b59266140381dff5c2e57ad46e\nbb0c057df2dff54fba4b91e89f6f35cb\n8ade914cd21b6e49656f29b05c68d39f\n273fe8996937648ac8744f5d8b9af88e\n31a77c04ac5df53e9429176ba100075f\nd2815e678f173616e6cfc789522bfbab\neafec1b145972dcd815b2b467e8e2eac\nec9f1fc13f2e4ae2c3bd24f986301745\nbb90094030f369e4305a3b2fd9173d6f\n5695fd37d1e673cebf964fc57f6a7d6d\n2f0318b23d899a84493f17f4fe9b9eb2\n3010d6ca1b1e8ce3bf54ca9b2f215141\nb80122c3a0543a7b7eaeab1f0c9120b7\n8f226d6b3089d3b7bca860dd9b04c52c\n2a98a638f675f46e7d44dc16af152638\n517880899d26080471a782a4379556c7\n815f436a40c28da51f56aa11cd5e0c3e\na3ce9ba74ab50352e6fe3612af521500\n80dabf9ddbdc92f681806e3880250dff\nb267d11790325e6cec7cbf3284585a40\ne4274fc2b9e4a5511882515d09f3979e\ncd5ad4afabaed0d3e762624dc3c8fa2a\nf595abef9bc7320944b2fa2cac0778f5\n9343df9a7ed6cbba1923501fcdd899bb\nb41aaea5754adae0444b41d6d7f557fa\n8c81ff18e04584547f409062bafc8e2\nd6da5457b0682e24696b74614952b2d0\nca1cfcf4d5060ead8610f0b48b38e644\nd7867d215f52107ba5e8cf3aa1686d66\n35053caa62eea36c116cc4e115d5fd2\n3b3a9f4e3aa9f2f4d39a194653571dfc\nfd5ca05b59b30241d838ae16242881dc\n40e73a326cf95d0361c93c4994c91bd1\n47c540c2e9c3483ce79a6b87656a120a\nfaef9e4cff5fa61987be36ce60737655\n6251b398004a02fffebad4f49b26ec52\n76d5bec920a9796a5e91295f1f8b2c67\n30fafef5c734f926781ba0fdb47276df\n2bd045838a2282ab5205884f75aba3a\nc5ee6b77f9f84adeed52100e321c9f3e\nb6457a76f24de9f67aa6f8353fce2005\ne1897a4391784bc2e8b2b8dc0c816caf\nb5877df9f111bb91222f2fee97f8bdcd\n948f1555282e27da190c615a2115d2f7\n3a5c8d46fdc6793b956abdbfba57903a\n18fd8342fa5d1d4f5268b70948af88b2\nef463d298bb401b3ce1493daf6a835b0\n7a79fdfdd72f06e9f8bc1f8036e08e44\n8b8fa92f9c677b0713decb1a0563b12\n4b3c381658cfe96d4db79ead79f57b22\n1d1c829a54f0ae426cdb122727dd360f\n6e98c5d61e008b4c2871cc0b3cc1a485\n54e9203b65ca4989bfac64b1ae78ad6e\n260768554aa1a64f2180a9964be89fad\nd4d9b991ff7d31e8c8687ff9b0b4e4ac\nf09af71bebd4bea8a2651abaf391628e\n3d3b7f63f5525b1ae37f5a622d383617\ne6f37dff25ec4ca4f815ebdb2df45512\nf23d3a85baabd7ae32d9baba75737e72\n2e0b6f6d19078424c3bd24f986301745\n7275cb0572b1c0042725cbc5586c6d7b\n1049953406c81b237eaeab1f0c9120b7\n6db2255a51caf84e823e7e244bf84209\nd51112040176efccd5cb6d178687b980\nc86cfe147872280463626070a93463cf\n3f4f1d18c61a07f134b707eb14b2a4a5\n408631c881e3b33cefb90719a33cc920\n98a1f8651c962402492d9da2668ec34c\n884341d10af51df9737a00f007529fbf\n8e5568ec663ae1b7e7526b618f37b43f\n758bc4143fceac844224ee0743294f79\n52a96a3c89305673504721639e19f609\nb0531a0d44fc22144224ee0743294f79\n46789c1fb150dfaf51f77a6d7299806\n4913388a4c94547a81806e3880250dff\n2e0beb3b6927a2b7e45ef4135c266a12\n5bc916f8b9d0a7c6b40f0ac0fb9a650d\nd49ce87d43cf4c8f1679065e1c457f94\n91819d15c2c044ebd47ffa500636d198\nbbe36f91f3f0de06fbbc7c456d85ce59\ne779cf261cf04a77acd8c40fddcf9ca\n708e7ef3c2afc842febad4f49b26ec52\n89d62702b266b20a58a2d0ecf7ace1c2\nf6810de4042cc5ce57bd4bc6eae9b341\nd7e4851fb3001a10f652f706160dc96d\nd38129a3301d31350b1fc43ca5e85e\nfbddac94cfa74a7b5c0228148b88226c\n93a6876247c7a015d84b8ba651dfb8ac\nb998016472e9dd7a9b9f2eb77f5e247e\n3dc252fd90d82b18c9be65dfbd21428b\n659a60740eb6bfa930bbd4cddd04c77b\neab859ac65d47f4e6412cccabcef91eb\nff8efd10f5e6c5c7c6c0380e62f2644\n2aacbdaf7dfbc5adb1a98fe8994d06b6\n892d8090f05c136dd93768e7b9b1eabf\n8c2a3ae39c683fde3ae7d83fae2b798\n366118e316f03a35327289c00b6dc9ca\n26e8033e59a3adf6bb53a6a5f5051240\n3ab3c9d99fcaa66bebd676e3a69dcf6\n88376e3d3a23d263de29d28278a34a18\n6c25ec1178e9bab6e545858398955dd1\nbdd57499bf64fab6bf80985a99195eb8\nc4a4710012ee39bd19f4b416b31c46e0\nbfbb19b74bb5973e14de2a9aaff52ac7\nd9aa42439dc6f1b1c63608961819b578\nf0ca6f9383ee9aae517376ab44a447e5\nc6cb59e7645dd14d661ff085a0f14b7\n64fcd1ba0df5d54d79b3e1be3524f72f\n893c689b192bbe33ebadcdfba7971b71\n487040c5fdc68fdfe6cfc789522bfbab\n400ae609e39ff49639d5fb08047c894e\n3c27660aacbcf99886327adaa986dff\n6b91f4fb8cdcd6f46fe24f5659031935\nccc4b5366a6dc7c4cffab2c8f8bf5951\n7228d43e00af4c1e2746490e2236e9a8\ne807c535765fbbbab40f0ac0fb9a650d\na20df07368113438ac59dcddec3b075\nca3670f77268f899febad4f49b26ec52\n6b7a74a6a77b0699c3bd24f986301745\nce463d63d8771c5ccf19858fd1963d10\n4fe20ed873d1a80e21d25a6a55757584\n4c513ea0804fc008c8687ff9b0b4e4ac\n85be4b6c37bd1e801d45bcf0f68506fa\ncc6840207c0cf55db30e42459dcb06f\ncee5c4ec2b284e7317b431cae0dd70ed\ned97d1c954fca49851ceffe90913a32\n2cf7ccf97b09187fcb7547c95fbdff26\n7ea38c936513f5df3772b104757a4809\na97e09489b46f7492933f312813ce997\n2c40da664d4e736b972d35c68e1bdca3\ne401be99c5a51d8bef8e9284f76f3024\n5ac8b44ff77e5490c8687ff9b0b4e4ac\n1e304b967d5253d5dd079f8cece51712\n85c2609fc7a511ece32cefe0e484fed3\n3895b96949fd81c5f07fee5fc5c45ee2\nc04660caf4670baed40fb6f8053555de\nec00ee8e8345be7a852028c7654a8ec8\ndf8440d8678f3a91c8687ff9b0b4e4ac\n74500999671b4c99d7bf6fb68df7f786\n1a8bbf2994788e2743e99e0cae970928\n1e283319d1f2782ff2c92c2a4f65876\n60622d74c0712934a5817f81a1efa3cc\nbc523df998d94c7223ac0bd64c9cb255\n2ae1dc95e09b858128fda76c378c923\nf29cbdb2c7bb10f9953d950bcd7de7a\n645022ea9ce898648b442b160bcfb7fd\nd324baae6630d7c8fb60456da917147\n92f79b8e45269847f0efa341b439d741\n2c03bcb2a133ce28bb6caad47eee6580\n3d32d89db2286377e63c6421b71f17c8\nb24ed89d85b74771216fff6094e6695c\n383ab6330284af461fc4ae93e00c18e5\ne02949c5e582d20682574dfd1b102fb6\nb38d05caee69c7ac8fc6229eb64e56a\n4a12589099b05c51e13b3410f3683610\n63b2f7846c561efc20768660cf080d12\n9253f198c06794cdc7689830acac6e59\n26aa22bd1da8b8c5b1a5c6ecbc81953c\n8fd6ca8f2d0ce46b846c0e4d54382ad6\n2783a969fa42cdecbe31379a5751d820\nbf3f14225e8f899db62f9fb4b7f0626\n95e1571acdd75922afdb9a672b7d3b8a\ne2a7604ce1b5e6c4c3c6a889ee0bd115\n1e44e3c128b667b4fdef1c01cbd4ae0c\nbe0890a6a0f3fcf841f91bc9e1dece3b\ne467cfa616850a4a990561fc34164364\n3dc8243b17bc790620768660cf080d12\n8e678a54f2ee4e5e492d9da2668ec34c\n1767c5e3771b0510f5225bf5a419e95\n1f83e49ecdf209ddd7f81f50826c13f0\n9225e57e34334ee019cb07ecb5b4102\n88042e6d331ffba0f63e8e405d49b8ce\nc535629f9661293dc16ef5c633c71b56\n6fd76577d0df60669b9f2eb77f5e247e\n1b4071814d1c1ae6e2367b9e27f16a71\nef3377832d90dbbacfe150564cb24aad\nbeb4c42cfa1c3b282811d30bba54859\n7f8d63acb7b4b5e84d2f52566c6c4e9\n8b39b501c9fa4d349b9f2eb77f5e247e\nec25a41ca233ed096e5a467428553af2\n3f41b4339ebd59c1c397356311cbeea4\nd554adc917b635c0fdef1c01cbd4ae0c\nfc97c771d058556f593de14e4664635a\n5822ae77b06bea3091da37ff8bdd2524\na3ba5f8fdc8f17ee95bea7c29e873d16\nd58df0968070bf3b4b3c42e318f3affc\n9c3e53d9d1e653c0bf80985a99195eb8\n3b1f1913f2bc0dc171dbe96559c7bcae\nc4ebef05a72fc4f39d62eb3fdc2d3f8a\n4bdbecfbc925219157915a20ae9ec6b6\n49a3b0242c13f92da6fee8e2140acec9\nd4b5f8edc72b4676f4175ee3a177350a\n6829ec525eab85671f2351826b1ffa67\nefd0411eaf2396c4de7ed732f5aeea4\n7238d2ade707fd1e6c63b8b48495261a\n70f1f85d47c970bb78dd615a59de5f05\ndfae4f9155877a1ef57b53e86a4ec824\n577d1c446658fdc7ebc935c637c3e3a0\n403b4eb7194f563f79b3e1be3524f72f\n508306f8ddf1b54c41cc9e8c39b4e399\nfd5ac9b342fe518b9d3ea1c6b57a0095\n46f6a6e0f239282fc8687ff9b0b4e4ac\n8cb34663a9e42f95c3bd24f986301745\na1213da0e7efffcafebad4f49b26ec52\n8117c55b8bbdbbc54c5c5c89015f1980\nee5ee3f6759aabacf2f43e6f841bd32b\nb884ff155c4117a7508dd48e67ad44bc\nfe5310a3457bf0e5c4e8952b27b5f370\n55e1cde05a99f6c7d1d34366ca81fb3b\n3ffd794e5100258483bc207d8a5912e3\n5346017af72c1843169d299c5f567c18\n3126c6e9277b775b245ac1812a4e4d0c\n1f8e18d42ddded6a4b3c42e318f3affc\n2d711c85c60a0785c3bd24f986301745\n40e6fb27aeb9c9ab44f999802029a79a\n4b2ede169dcc83ce4591019e9d133858\nb360f2264526521f1dee989d1177ef4e\nc46eb7460be602b6bf80985a99195eb8\n271012d5de261d08101accd22c701b9\nd8e2bf1107567774504721639e19f609\na91b2c89e543a4b3aa3d970c5602cd4a\n2f6b0ddf12d1311795bea7c29e873d16\n40f188600cf8362b654ea6737b0d3597\nb34b1a7cd8b645829d0103304b799f18\nece1a921c1bfd44947f5e245ee376525\n20627f21d8681503f2aa3fc45e8202cf\n49795a9ebd9a9c6d2c697f0a1454869\n46bd3baefe788d166c05d60b45815\ne65d2f0ed75a786a37b2bb75885cfc44\nc1b64fef5f3efa0a129905ebfd12d5cd\n85ce56c719ed2a1df30b232143ef026b\n323fc7b1d2b44cb7ff2b8acf844d34d2\nd708c7ed9201ec45d29e20ec5f479208\n3fdef0a7606c397331ad067823a3f0ce\ncdc2a53559d3db78febad4f49b26ec52\n4ac17ecd78880859e302b6082b0ffc09\n5d3eff6a1b9a119da011ccf7cbabf68e\n6a28919186eb55ecf69d0cf4fdc89b12\n37e2b82d5e9dde21cbde89e0c48a01bf\nb8b5e172ee58899df2d9e72ba502035\n77ed9ca45b928542266f89139e159db9\n63e2d9ab50536799b2b9c1746713a87e\nf3573756e64259f2b29d280b4e59c527\nfc14c1aa7831f4cbcaef18b2fd3fb17c\n6f7a337878543c07c3bd24f986301745\n112cee32461c31d1d84b8ba651dfb8ac\n9b6f17ce2db29c4c9ae35d137ece64f9\nbd0fab2e72b445bd1e722bceee6e83aa\n52310bca00e6a3671201d487ecde379e\n4e1948cb03956c9079b3e1be3524f72f\n4206cdb567679c0dd197f67767b32741\nea87765cf9dbe2fe55f46d55537192b6\n3c81fab5678a3872327289c00b6dc9ca\na521fba02ca7f9aa822215026d1e8d82\n11a06e6f68b1d99c8687ff9b0b4e4ac\n4030ea84b560b857febad4f49b26ec52\nce2ff5c3a103b2c17ad11050da24bb12\n6534f04a1c349a3c8c6540fe6bc16d6f\n8e19d2ec95c45186a6fd617b2ff5d2d\n5d346bdb7db27accf3588493d5c284\nd90e76683d11f75fde11596dfa0db02e\ne20a22906784e3d08758c89c2f45caa8\n704179dd47a2282e676de9b6e111da8b\n9515e377c1ec86529b9f2eb77f5e247e\na7200578bd7bea065dc3653f8341633a\n2acd3a3e50e8e068fae61b8c1512b8af\nf23c1bb951fa8909bc01640b1b5116e7\n9582e42453da574f37bf42a4ca375618\n3ff879e891701079ea07bd8096c66582\n9c7b2ed3770d1a6ea6fee8e2140acec9\n98ac0106ad244505e04fc3fcc1c852e0\nd239d38424429a9a4626612b5d655dc\n5e706e87ca60bd19ecb01bc908e8cea6\n6844180c300bbf852edea1c2bfa3bc56\n18005751014e6ee9747c474f2e537e26\n984900a401b412368412406fac9aee\n5e5121cc58c4fea78ce66f12ba927a2b\n2343e2c4fa69f33a2ff834514c92e8fd\neea2622d5a8ad64bcb23db7a28593905\n3a1b54325b3565e72ca4b544d68c52\ne5b8d52826245f3937b2bb75885cfc44\n62d87dab8cb3fd16c050719ed29b64cf\n8cedc8e684d60ff42a06d8c81262ef96\nefa83c67ce47bfca304edcf7c4314468\n3eb60e6679d1df1dde7eedbb2790491b\n5d20adaf6d8f89fa2f1c10544d7d6f\ncbee0f33a45bc8231adfc48ece0d7031\na08ad49c281128ea53615647c93fc704\n428b77d0ffe6ab456e06155d245f15d6\nf5f18fccf9e16800dbd185de408ea209\n920af478601258e24762da3a3017ade\n285931af369b12c2ccd42a2d6eea63ed\n61d29e8133da0b58d1fd43e2bf80195\n45833f137eb7b1fb77591d1bf8931b62\n34898c36e711fbde713decb1a0563b12\neb8d2003087a27cf63e9f3319eb5ebb\n98e1936d3f25389bc3c6a889ee0bd115\n37ec57f6376fce6d19fb4103277a6b93\nd1b03eeb33fd441d8189e5e3786f2290\na128eda00983dd01fb7d9615be5ab4b0\n179b88264e7f96468b442b160bcfb7fd\n8e664a0bcaf9d2a45ca1aaa0789db621\ne0df9f745fe38b389bac1502ed0eb150\n8ddaa112e6ba36b5b1e23c7675c49239\n6b9c3d42724275cf7a5c8cd74a7bc29a\n43f222e3b4b0952c1a4cdca72ed38d39\n17e916fc863540ee3def89b32cef8e45\n5073d7a546b9a4d0e810eba61b778ebb\n697cfbe6e043136b737a00f007529fbf\n49c955a80749d2e1a5ffdf44ff86b795\n7ab99231f6a6cc282ca32e2623a35d99\nbce7ff621a5440bb34ee5c94ebdf7f1d\nbd6a8b133fa4d269491d6cee03fef2a9\n1ab8a3b55c14a7b27eaeab1f0c9120b7\ndf7735e2bce09a511f98c0761af40e04\n6b385a32489bab4abbc7a6acbd8f058b\n18052e6175456b9e7984fb9ec7e40829\nbd6a5c01b9c6f17a82db9fca4b68095\n3a52c8cd645f40b4670786463e520f4d\ne94089cce370e7d1aae894b47cf9777e\n36cb782fbc164ac312591a3ac05fadf1\nda5aa9fe015114731a1272c8e47f5670\n42d5b7df0524a3aaf785f45147f3e474\n22b8498e1ee46520737a00f007529fbf\n4362e715455f42ba9b9f2eb77f5e247e\n174019d47144a9462fa77440dcb93214\nbdfc3a43eccaac7e908cb3a44391b80\n66f18d05d960ffe0bcd12732b5a4b789\ncdea84a63ad8c44febad4f49b26ec52\nc2b898dd5601454d626d7e3d07da8352\n798a46965d9e0edfcea003eff0268278\n9233077bbe6926c239465fa20b0ba7fb\n631e102e9a689339b0ec386df15ab64f\n3885255ca5d75e69da2260dc4a1fc2c6\na6ab184a68bc67d179b3e1be3524f72f\n58ad100d70e436bece93f2bb0b6d036\n369caaf3ee33837ff2c0848478a667ca\nbb5791b1d4cb5fe81c1b3b2ed8d13bf8\n9850d225049f987e9b9f2eb77f5e247e\n7f73cc6c1c9121a9b9f2eb77f5e247e\n5b3fd3199d1bc950c1ae25a29e9d46d3\nfe99f16c2532cdd07ba99ad16fdc05cd\n507a5070cde81fd867936ca58e67cec6\na32febea4a0ac30171a782a4379556c7\n4275718494dd309bc7d25fde6b97816\ne696f4c7cd88b8b52ff834514c92e8fd\n3ea40a75f22515557dcf230d8b7d162e\ne45fb6b81247cef0ad312873b158ac49\nf5d8dd0309401ebac47a35332c17cce2\n6fd485a2345c3dd69233bf560301e53\nd73e46e07bdb3fe75fe4ecea39e8bd40\n1e276a016b664e424d678187b8261d95\n1e0580f443a9e6d2593ebeeedbff73b\nfc7d038dc7fe2911a75d03186a0409e2\n70cb8d70d961ca48b04cb542e2c50eb4\ne3479f55f5894bb3c7f1f7c0570e288d\n41896e1532fe1e63bda72093f9b5aa73\n3b4292989394ba62f51f77a6d7299806\na5f300f3975497fa9dcf2183c858e6e5\nd1237422881f4d22ff25b0c2db862d19\n5402eecc67e489502fa77440dcb93214\n4c0983329afcd06f730e89ca0d2d13c3\n1e1b70bdfafb9d22df2fa7eaa812363c\nb8f4ce34b44620cc9b9f2eb77f5e247e\nf229c56eca8c0ecdc3bd24f986301745\n58409b308683d908ca2bec46a3b47519\n46557f689f4cf5dd2acd2bb6205825cb\n71372c1f20b6a04c43c40c5aa3d5c5b7\n4019ee7cc7cc5f9e74dc49346c29fd4d\n421472e991acb24490267536df1b0cc6\n11506b96d41f7d3dd7c4a943f33e0384\n3776f058b918372899b00821ae388810\n3c8362c1e57c30d7e6c5cd45aa112726\n30beaf15d2d2beb1febad4f49b26ec52\n40d202afdcc49c6d35836c728d324152\n72da26fc9b49ecd3c3bd24f986301745\nd4f5c3e3eab52d0a3334fb6668ccd834\n9d28a066df22319cca2e16d6cd76503c\nc585ee093bfd52af6512b7b24f3d84\ne2ced471afce616454bfa32aa0766acb\nfd9e909b082d8175d319c38340319ae4\n8d458ab12073c371caa2c06fded3ca21\n197ae965385b8187ae663e348bd216d3\n30bbee7ab9026c5e4b3c42e318f3affc\nd5bd6ea417eba6ce456cbf78e1e89022\nca032d3b6dcbe1cea3056fa1e8da3997\n58867a00409c47c0813a1237d2827540\nf4b6bf9253918b52944d8f8e13d63fde\ne2dbad7996e7e13430c589758b4b5646\n9bb6d3d76d4f5ba94b3c42e318f3affc\n2af09bd8df40506c9e646678ef50aa3d\ncbc9014bb6ce3d902ff834514c92e8fd\nbe1ac2a0b4c75bb9940806ade53ef2f\nfa27c1b8dac76b6d1f285be552b78f9a\n3684490885c259e688235335f9e630b0\n3e1a5042dcff313971a782a4379556c7\n71b53a5f441d45b742b7e4c0136bdb7e\n2fed64c67552aa689c1db271ad9472a7\nfdfedb5bb8cd35374233148ffd345970\nbb9efb4912a018b3c329e2758ab09ecb\n550dd11407c28f9f3bd04286517a8395\ne6daa4f9485362aa37ecff2686b754f4\na6420c4ed13cf628945a77b945b7b70f\neb6e55bb557701e37df0e9a69c97c97d\nc0857de5101f704f3c5e1addd9922bf2\ncd238045ebff9be59186f15d520c12ad\nf0f04644e071d9348ca588a3264b9f86\nd095dd9f3dbf4083a7e870da1ab2a36d\nd8e2e2a923b372731cf97e154cc62f43\n4231883e92a3c1a21c62d11641ffbd35\nc166f67f391022d31205bd848315f04\n2a1184b04dd8f30e3e92f39ce48d644\n8eceb15a3c79b1b8719d8721fec72f0c\n597f2b2153af0c544aabcf2a7cb640f9\nf9e386d968653602d68fb8f5d99affa0\n79a3115a6f96eef7c151419181ef256\n2b110b833111b38c420adf24e49f74c8\n54a6748359055b5ae5e2f0eaeb6aa550\nf5caa9b5ada31a8b3cf15c77de45986\n8a9d8dad6800d55ff37af16b2893f1d4\n1b67a3a1101a9acb905477d2a8504646\n9d9d69e5f2bc80a867903707764646db\n657790bc7fd16326c132086242d50af2\n76fe7cf10c5dbf1edcb466b6f48b5810\n96c0ecd1ef80e818c8687ff9b0b4e4ac\nc7fe45610d10cb108ad3a7d07aac2767\n918145be863f7aeaf050758b903e6054\nbd504539074e453721a08935eb37d792\nb058cc77e628ac01c433ba3e0e025e8c\nece627bd883d9bbfb0eb7e753c06942\n1c173d970e21e9a8be95ff480950e9ef\ne6a4d6fbdf722dbcc6ec74cc40a0a09a\nb117b01ab380362db8134b0fbf68257d\n95317d46812e4ed4df5aea2392d894b4\n680eec559a71dcdba023804ba421cf6b\n807f08096308af5e28c0cecb7de2397a\n35bcb52fea44850bb97ad864945165a1\nbd98d493766949a8c05575120a46cd3b\n2bd6800d64c01d677721fafb59ea099\n99e4c4b39b75a06b30e06a011e63236a\n3d9dce1953180fe6f9c9f9697d1ec60\n8d2fd4b9c583e1e6a12cdfe22cdc2f5d\ne199b1f6a70c9f56df44d20a516c07b3\n9e0a0ad80be6df7789d2595edb5088ee\nc4912ddaf24ee0fe7ea88ba060407992\n76283716a2c6586e266d673a6188bf4c\n59f1f818fce72660ac285e4454a089f0\n31569815c88e79de4458bae25a4e518a\n28bbb851dd01a162a5615d35d4766b93\n47aca56ff3a7b8a71a782a4379556c7\n8be8093e99b94bd9cf320c31965db5a1\n40e5d8e71ee3902a31358207d42bcb21\n19d7da928d179a07febad4f49b26ec52\n93001617daca67ebc8687ff9b0b4e4ac\ne19214cabca496a3f7b54e04c7238d7\ne22e9f5088838675a72559fc4f86f700\nb1f50d8d41a8c53b6197fd390b16d14d\n86fed830cd355f591c0f52f4ec8b820b\ne53b07b648e8d041107a17cfae0b6df6\nb6b911aecb417295e8f8c11a24c52ebb\n595379651cc8199abf3c0fb77f1e5110\n548ab6b6e8b2dc505ff61a3a2a0e2484\n590d04438aeffbb58f447453fccbd9d3\nff5a945aef7a68ffcf9ff3ee543c2925\n7ebbce44a6001e71268677b0fbb8a262\n7929676e756dcd41577b5d737869717e\n80f9fb95252e6e535bc104fbace43d56\n26a6ce644504c5fa22963ea1e168015d\nfbc87a27b5691196bd3b190b59dd9fb7\n589cd6a1f4367fd834b707eb14b2a4a5\n475e2c8f7a2c1bbd9acf9a86c283d1a2\n70ac5cb405df84575e62305d14755686\nbcdcb4928e07e4174a623eb2e3317415\n51e14c516e45ec3b18ed59365c9648a7\nce242d5e5e3f4befb13cfeddf8d6bfe0\ne2dbe84030167f1ca5aad165050e534c\nbb7755090f984ba85dd1bba5b1310523\n226704c72560008421ceb39dc3069834\n975ea4be01c7488611bc8e8361bc5303\n7efeece3b5cf2853d706779c93538ee1\n1b5e876f3559c231532a8e162f399205\n75ceda9606ede8d2ea98d69e91ba870\n593f7c848e6246ad8c37cfe791015e2f\n9dc454ec0b5b7b50e45ef4135c266a12\nbcc4ea0133864bfe4d4c0769270d8651\n67d296fd51dddfd4bda72093f9b5aa73\nbf89775d876f6849f2b7580a739cd4d5\n63f6bb7487f81a03bdfa5e0753fa3240\n6c554635dcd6123a35fd8a41e49d8421\n2f282d5e4f140119e493511b69cc95d0\n1ac6531a337de85f2f7628d6bf38bcc4\nfa8f7c225d3b9f1def4a09e7eb872bd9\n9ea39b8f5a9b88d56eb9b08c8a74d159\n379f0efc898d7a7e9fe74a48bbc553d7\n434cee44934612a81f98c0761af40e04\n98d37b373c0207915dca6305fb9f97ca\n7eedcb6d76b8c23a9cdb421f6af95e5f\n7fb336186da77367962800be79c6e52\n22af872ac796ed26ff8d7c1096fae070\n4e4570768f981ca7b95617254e8005c0\nc80c0b8107583898c1956375af82917f\n61d313bb88532dcb74039aeb9f7d295\ncb8f3b4355d891514a87d579b680d4d6\n763bccb675b7439ab9afb6208cab1d\n4499729e53c858ae71a782a4379556c7\n1c45b266d3c879dab36dcc661f3905d\n3ce9a0301f36ecf4cb32c5fb502d0e18\n2ae4f1392d44ca24654a275ea978255\n9a711bb7070ae88de948e3d64826c640\nbd3941eb3bcca6ad9055f83d11955109\ndf8c98028d8ff2435dc3653f8341633a\ne158f7ba6828db5c654ea6737b0d3597\nf33b6f791e9d64387d01b77e04a0bc7b\ne93714e5553f63619215045784774049\n440e02f574afa478ac38b834d5dbcdb3\nb44d32061d313fc1b7a3c315f744bdd8\n9a41550ba7dd31e3bf80985a99195eb8\nf3f31db17715ee0c327289c00b6dc9ca\na42aa59fa23b4a4d9c0ca344f487323e\n1ec5a88141aefca9cf6e4dd7ee69d71f\n69709cb300ae3784ee72e5c46412e9a7\n66b7533af3449aa820b64028d2efc877\n458356b9c5a8d7bd7cc86734cb2f5062\nc6b6f0e604d6a5fe78a7b08b50e4d193\nd29445f24bbf1b1814c05b481f895c37\nfdd21f7f2ca9f0bcbdcbca499b446e89\n452115e132539be4daaaeef365d8f6e5\n81ba38f4d3b7eac1f82a35e8b19afa86\ncb7a4324fdfa690e96dd43aa0ec847c9\n93dc91115a9002e1663fcfd6703c85f3\nff02a89047d6eca2f95b04490c0648a1\n43c71ca7f9d3dceb8b0742c681b435de\nd29971cef754cc91cd8c5d1ba690a2c3\ne30bd575bbd6c68c9710e093c764abec\n6aaa9bd6e835eb0f9b9f2eb77f5e247e\n8191bad981637a71b356ab8b24c147\n66e37e1831d3e49843638dabe1eb5336\ned0d65c68a1fa5c485e2f8b1d3a373fe\n37607ea19e352af4fffc97a61124b1a9\n97b3a1b718278c09bababe11fcea8796\n3109a0b9f9bc5fecb4cd1bd556007aed\n195464ae11f6bfe1cba091e036bf65ed\n96e8a51b1680b756e99481ddc3bbddfb\n8b5f8b83715a378e473f10e6caaeca56\n56f9ae090d2fe856ad5067eac75a07f7\n4a89a789f817ab5414038d588fd1342f\n439418b35f600f4bb10dc0fca58d0b2c\n7a962a612d7cd0feb7611322d07bb05e\n85b16941984902f8facfa12c7d71c89f\n9fd6bb18dc21c70766ef9dd2f3ef27d3\ne56087cd55cce8b4f41a4361d0ca9bc8\n866e1be9f53830ed7a6617a3ecd0b52e\n6fcb8bf770b8606697e2a21b8bc2d948\n6870fbd4a7b733b0674f1c30a8cad95a\ncd06d0034224a701fb7c76304cb719f8\n48fb419e9273c10a936e8f01c80c6ffe\n67ce9e1ac8e41027bd16d4490a10a752\n9a8dfc7a6831749f504721639e19f609\n59155eb9123a9aa330bbd4cddd04c77b\n5a3228a34ec0572b4b3c42e318f3affc\n5555c24767e66a3384633b41c8a09fa0\neaf5428e15655d0b3c8d0fdfb1cc2535\nd7307a92178e74e055c774cb358c4539\nb92bfb13727f6659e45ef4135c266a12\n7114ef00fe68d053cccbd142483bf2e7\n3526528270d5f3f766268502c798b9af\n9fe840a156a5647c9ce67e77fac3db9\n43290694390ad1adfc735c9ceab0161a\ne14e8241e0bb563f64810cc21086da42\n758b4dd493ebb4b34ec0aa53d814a8cb\nd80ea722df716bd0b15194162f658e87\ne1623d4ae16bb17989e686021e3387cd\n1886b3e3f3d4af3ace522e6dda26fb51\n7f4f73ad1b3f882ba14472becb07b261\n47caca00f993bc4e4b3c42e318f3affc\n6ec4d5fa96861bcd70311dea98ba710d\n28b605f55e21acffaf88fb4321b22872\n60790035c8126a677645b4fdaedbc34\n99a4ced5a15438131ff008919d662aea\n465ea1eb1c76c1478d1fe8cdc415f4c5\n6c7a07030e673b0b9c9eed7651b77d0f\nff9915c51ece4848cfc689934e433906\n5fe56a4a9d5508c3b2373df00b89e5d\nd561ff6788ab46517b016084e2ae95e\n2df8d2af1bc4b9972056b4bd5d870b47\n490941bf4a532b62492d9da2668ec34c\ncdfa898eadf316122056b4bd5d870b47\n1fc918b0e5c7cf2da5c25aecef10278f\nf4b141ab64a6c4e771a782a4379556c7\n52d747ca443134da81dff5c2e57ad46e\n37b432326fecc8a1327289c00b6dc9ca\n"
  },
  {
    "path": "data/filelists/03001627_train.lst",
    "content": "c763d59c0b5c73394925bc492489de9c\n19f597c6dbff03c114038d588fd1342f\naa300965dead4fa33f09c790ddd20f8c\n86e15a077ee6f438910979f825490a99\n9978e73fef1857bcac6b8e58caf61f95\na4b32d26e0962bf74a4ab00b9639232\n5509f56ce625c42aff2b8acf844d34d2\n6def527e32885b7888dcbe86402c7c15\n5fe6b94dce63fc59d4589db494f55afa\n9b8c50f5b9e67dec35836c728d324152\n28844eb55fc82dc8f4b6538438a0b930\n26ece83dc8763b34d2b12aa6a0f050b3\n5b6a608c22d77fbcb04cb542e2c50eb4\nc3cfd2188fe7ae365fe4ecea39e8bd40\ne7aa94a2dd59a5ed492d9da2668ec34c\ne9f83e38241515a7438d8caa9ae106fa\n5cc0b0e0035170434733824eae5cd9ae\nc3ebc70a348051e1af7c7ad2549a1b15\ndf55d3e445f11f909a8ef44e1d2c5b75\n89a13017c0d517319fb4103277a6b93\n7d3b7916dc5325a9c862eec8232fff1e\n65a1f4ac3e5b57dffff16555386d173d\nce8f3a0c0c0bb0b9b20716e5484f7807\n6af67c2dcb4c38bc67f0a77fbca7cda2\nc571ff6f3231fe861e1a7bd9d68b88a6\nfc5f813d499cfd84d540c52e6ddbbebc\ndf59c2ab638e5bf47c4b9c3e153dc1c0\n2e079c4e7bb26dce9d1cedd9b694fb2\n9245c7a6d33320da7b707c797539b200\n4b95e968966fafc6e0675251723e1e08\n3f83565ed40f87c5593ebeeedbff73b\n4dcf1f64f70f22d7b4569422e5e8ba0\n928678562a6a57db698a862d11861eaa\ndf2b3ab36704f9e944ebbc705ad8c07\ne5ce7b150310f288b04cb542e2c50eb4\nf230308627e5edaa9d796919a8d71368\n2280197ac01a58912dbc66eac8105387\n878eee28ccc28b2e4c7384dbb75cab0d\n22fe855981e97ec5a1bada754e9e91\ne908c290fb506f2e19fb4103277a6b93\n736e9ee917f741193b908295ece2b069\n3b472a135aefdc2943a0e2e54f038a60\n323bae92774d8def78aac1ce4ecb73b6\n312df229ef2675c4492d9da2668ec34c\na89450b61d786e4d115013480320769f\n65b21a2af8709510f91663a74ccd2338\n49345c62f63818a036be1486373f076\nc2076591d588586719fb4103277a6b93\n9d151e778dd4a3f7f91663a74ccd2338\nbf1dce61ba47209189343fd44bd400d2\nce055b7a4cccc7e182db9fca4b68095\ndee24ea8622e2005dd0e1ff930f92c75\nfa263643fb3f45c7492d9da2668ec34c\neb3029393f6e60713ae92e362c52d19d\ndacbb2d9dad289b1492d9da2668ec34c\n9d05b0a242a5ee06639159c697a89e8c\nf4a2478ebfac3e56b0957d845ac33749\n5a52b62f564eb7e117b431cae0dd70ed\n27317a0db349369c8b74e4684f0d409d\n5e907bb5204ec4a9a16baf954c1d99bc\n11e521e41ff6a64922e4620665c23c97\ne07c55b60987e8fa4067a397c01042d9\n3823798ca4fe0b439710e093c764abec\n50faa1777b012058492d9da2668ec34c\n7e097351b98060b8a8dad913bb47fe00\n9a789be179253acd66c580e84dfb7998\n828d2c47bf56b15c49560f24b21df85\n9e65e8fdde35dcbef91663a74ccd2338\n8a38d65b4909e79d727e9f790cd597\n4b7cf20cac8f2344664b3b9b23ddfcbc\n29d5a6ae911ef708f51f77a6d7299806\n5cf7a44b8cd841d01f0ce9df23303cc0\n13e29ccc0722f4f958df8eeaf3dad1c\n9cabf21d12d271c5d295b24579cf55b8\n33bfe7ad9544eb93d7f25634a7c65cae\n4c30d612b8663402492d9da2668ec34c\n2bf1fdef16967a929753496ba23f2183\n1c2b230840baac57df3c82bbe2e3ca02\ndcfd665cdc0b01e7b04cb542e2c50eb4\n3186f9dd5179358b79368d1198f406e7\n3dd04235c696c117db6d2ff65cc5b310\ndec4d499ce2ff518dc732bd0305fe3a3\n63f6ff0ad9cf9d17adb532bf77da46c2\ne08add655395ce8df51f77a6d7299806\ne3079223f4714116ad484915511ccff6\n741db054bd52c8884733824eae5cd9ae\n8f668f18d84a6960b27c368aa9b96968\n47eff1e5c09cec7435836c728d324152\n866d6243ed67de2ee0a87b67b4933300\nc0689f191df5cfe1c785f06f424b9d06\neaa4ea82bc814005e6fe3612af521500\n486863b7fbd169fe67903707764646db\na49fc9bab5834df95b1f17dc9a05edeb\n9aa05f609e6731bbec19069e387c0327\n3b5364e2f1624ef992979c651b40698c\n428bd9c7c8a0a6bc7ff6ace05b36a5\n23e80d93926a45f7f7628281ecb18112\ne79b6815925c07acb0957d845ac33749\n4ef623a1f272c40019fb4103277a6b93\n18845d9336d8be637b11ae648ea92233\n408b8f2a75350af98ce66f12ba927a2b\n32f2998a16e477163c4f66791e25960f\nd8ea454fb35e38887b11ae648ea92233\nbc75933af4146bd3fdce5d02dd243c32\n5fb53dd1dc9453e77eaeab1f0c9120b7\nbb660ca2ed9e0155f51763a096bdff1e\nce23daa630833de7d9fad8aba2c312b7\n79780c35666f045d7ff7b6423ebfebc7\n4bd7a49e63e0e97936e3b2fa8d1eb4eb\n8becb5888c900f3a610c2a68437007d6\n8ce2e49ab9f58811610c2a68437007d6\nd1af84d4d2af1181c442c1fbb1afe9c5\nb56829d48d66fd0bf368f5bd754a08c3\ne64275c95e41605caf7c7ad2549a1b15\n72a40501ded8a8dd2c2f29cee8379a34\nb490ed3bdc9debe6cad73d9df5957ce\n3b2c9428da926e939ae03736d955651b\n9a83000e9128d677b04cb542e2c50eb4\nd2f844904a5cf31db93d537020ed867c\n680b3add007725792feb9fdea8e07927\nd8592dc28b9f0afa387379bbd607d69e\na67a09662c39430bc8687ff9b0b4e4ac\n997853f8fa3678df5ac8254dd793f590\n64d07a909361ccdd1a8a283df3396be6\nc5beb566f512bc8d9e989ccbad3213ca\n9b42dd8043ba84f7492d9da2668ec34c\na2e1ddca35161484f4b35f4029eb1ecf\n592cf5363737550cedee0bb2b729f22b\n2fe5d78dfd82bafbcec24f0586fc0928\n341fcdd8a40a2612456cbf78e1e89022\n7530bff8f0c2b45719fb4103277a6b93\nb8ca8a0c021d152887bcae7a654cc37\n128517f2992b6fb92057e1ae1c4cc928\ne984974d54645e8328c54e8f8953f499\n51c858aec859bafad1e274d497440a3e\n5eb6ad0960250dddffc127a39b3c57b1\n4a48b39219bb7d64457ba044c28858b1\naf7331f7b96ebed663b2acb037dfbcde\ncc2930e7ceb24691febad4f49b26ec52\nb510aa817f9aa6795906036a9b83f8d5\n2ac88058053d5c2671a782a4379556c7\n2f4b0d6e2faf22d68c18ac3fe1584a6\na12d6ad9561fd39bca2bec46a3b47519\n7aabc57856fc6659597976c675750537\nefc62fa0fd71d739d42ec7e303174a87\n2ac24756c1adbd62c1a25f36f85c3fd6\ndae6ba7440a71e5152470de2774d6099\n74346aabf555ee0295122b1ef21ee4c7\n31ab0936f07c21ba7b11ae648ea92233\naf0831d39fd8f794492d9da2668ec34c\nc2d0bea1edd835b6e874cd29a3bc467c\n663b17baebd39695398b2b77aa0c22b\n7824e41c86f9be776383f517a315e69e\n2a2e5ecd0ef6ab2f80360680c1602c7d\n8a26a4d0726014065a4867cafb45a61d\n7186f1e8dbcb3e8a116162acefe23592\n7e7e130acfcdf64b1dec8546fd5980a9\n69314c01e2b6ef2a95a4f7ae0be930ac\nd27be0741f13327efc66b92945eed242\nd20de927fd1b15ef104c86562c321749\n46c6dec63dd7c45854ca97f654da3901\n62d160f560c31e0ff1d6726679b21945\n3b88922c44e2311519fb4103277a6b93\n24a83977b422b081eedb66d04882750d\n198bd40d94930950df6cfab91d65bb91\n654ff4d929914b7ff91663a74ccd2338\n4179c276ee8dacfc8cbd400aa99bee96\n41fd861b4f4b8baf3adc3470b30138f3\na021adf9bdfdcff68d12adb6778d2a90\n412b79b2d0572c6afb76895427c01995\nfa0e922a339bc7dfeb9a9ca952f63e23\n20fd21021f3c8e5fcce6278f5ffb13a\n11d9817e65d7ead6b87028a4b477349f\n31d48d6b3951ea8e1191025061735ea3\nfd4cce51df6571ecd204c1ad14be926b\n82ac145a471e406f35836c728d324152\n1bcd9c3fe6c9087e593ebeeedbff73b\ne7b1407e16d9d644c681404257d94ad9\n44b317a5dc651210e76bc197b3a3ffc0\n5c427d9fe3c76b356c07fcbf2661d108\nbeb8876f47c5d4287eaeab1f0c9120b7\n7ee46c6f7c028fc6d661ff085a0f14b7\n1762c260d358a1751b17743c18fb63dc\n371ebb9ac02ecfd09710e093c764abec\n2f2da13322d30ccaf4b6538438a0b930\n465cb28961d2680bbda72093f9b5aa73\nf83f1cbaf6c41a5db04cb542e2c50eb4\n9e519ddc82bb9417813635269a32e293\n9e0a1e2857b13b5853353c404519f02f\n74b3e4fa65510952e6fe3612af521500\nf2d03c1b46ff3c387bb504f750cf6e27\n210115ebbbd9eefe5fdc736bcab9da58\nd2b334ad08ac9857c3cf9ae716575390\n384dc36226d1d4deb7f1aaa55af02518\ne82136f5c8b2c3156cdce1333d517d16\na1adf14b24469f8835acfdef2ece21c0\n878c70bddd336f6019fb4103277a6b93\n60763dc3cbf36974b0957d845ac33749\n268e15d6c73f3495f2c6f9bb81f9e3f6\nff2deccbef73ff5a349bb1cbbf9a4206\n53fc74fb69742cab20768660cf080d12\n4c775cfff4afba83b02c91492945da50\n3669c9b2954c730e492d9da2668ec34c\n54b6c08ddcd0762adbbc9440457e303e\n8cc5a1e56c814d86c3cbab763f583b3\n9e14d77634cf619f174b6156db666192\nd9af882ab6d1cbbd492d9da2668ec34c\n7fe64a3a70f8f6b28cd4e3ad2fcaf039\n614347b0e864cdc7492d9da2668ec34c\n2b5953c986dd08f2f91663a74ccd2338\nee1c0e545ab8dce862b3a719b353f115\n4d6c67174bdab63ff11cd7e1bac77b0e\n5421802bb8e6e9781ea54e1e7afcaee9\n73b96acec1ea41d1ad484915511ccff6\n6aba15a68e745c8d48fda83c10428379\nb2d91caf3615a9a7f51f77a6d7299806\nd10ed00430a61909793b1150bb246dc0\n5609756359a6dd2c1933ffef19678834\n87e11555e7233fb4a9bdc22a1e02e82\nd0500d229baf05b0e83221ad0d21775\n3d57e65ff4cc42df70a7748e958c62a2\n8a5b706a57166350bc3c6c80ccbccb1e\n720fd0a6c8cf65e772ee08e78374a212\n9e39c4ea1d69b2f19b1e9677d6cddea0\ndb86d16a95437f3898cfd47a860803c5\n570ee99e247c6cb0492d9da2668ec34c\nfb9f11f128e006d2498725b9a1405ebb\nfd3d59ad4d0ddb44e15475f0b1eb22aa\n6ac89c723fcd7a55467971b4d8320221\nbb380888cf0ac2e79c0b027ae5b223d6\n6dc02b1884fb578492d9da2668ec34c\ne9068bd3f1f5e59b3fa02fd212ba0e5f\n9281f52d6c5908987ca6caab209ed3be\n5f76562ab6c843cb575f9747ff6fb5e8\n7b4dc28c2d3268a09af25a2e608033f\nac9cb6f769bf90c824d8364776ff163c\n57a54d8b1594c399423a79096715f202\nf68b7c3a1ed7506bedd9ab1253e1a9c4\ne39308cd84103a47f4b6538438a0b930\n69a7ed6a13ef4b2edf6cfab91d65bb91\n32d67f875ead7f1eaf46128407fbd2a0\nfa041b0276dcaaaf98e0d1738edd4f19\nacbcfebf917e708b2b5bf1f191733d75\n73aeafc0af4f1a62e1c624539dfec6c4\n2d1f6e50aad6d88721fbac718728a36d\n1033ee86cc8bac4390962e4fb7072b86\n13d4fceabfda96c0bff8d8db0f9298ac\n2ed17abd0ff67d4f71a782a4379556c7\naaba865e99c23e7082db9fca4b68095\n2b66adf2ba9858eb19fb4103277a6b93\nd221f07c0921e4d2b9576c1fc1b047de\n646ce5490817ceef4b6538438a0b930\ne9df7789d02eb998c8687ff9b0b4e4ac\na18a82b239fc07cf433619555ecca8aa\n77d71ae4116844e02025d98fb9de28cb\n8a1187956642c3895331e304403f2050\ne015df603fbf0852f58087d377226538\n9189415b98c9981cc2b6cd34eca9d8c1\nfb8c3a832eec2ffe627fec6651ed13bb\nb10798977605fd017a4de8972b988aa\n5b38b467c20ac734f7c5e1744a5e6f5\n38d623b46d07a93fb7d9d23574a480ae\nd1291956cb0983ee7085b4353236aad\n7d4aff5680062f0b1143841839c8c312\n8b005a01cf4ae50dab49dceef0d15b99\n709204dcd233483f242f861207c6d189\n708fabd1e1a39a77aa6bb5920f533ce3\nfed8ee6ce00ab015d8f27b2e727c3511\neb7c48d1729fc4ceb04cb542e2c50eb4\n3af3096611c8eb363d658c402d71b967\n6ecc9a0b03cb8bc2d2b12aa6a0f050b3\n1953d62a63721f17df6cfab91d65bb91\nc1b312919af633f8f51f77a6d7299806\nfb5ba735ef95fe417ca68e217a316e15\n539ddc43afec160e57b8f616df7adf9a\n68b26c9353e65419c3e46f55b34610cf\n5f30af30db19dd23afd330d4b2aa45c9\ne7304e89fb763e45507243968c1db8f3\n11f1511799d033ff7962150cab9888d6\nae1650cc10002a69d65a961d7336a090\n314c04d32f9e42c5f91663a74ccd2338\nc6856ffc6e9afdaf680876614ed35a7f\n780441a4b2e033f2796c584ff1fcf56d\n49e3ef3939d7a6ec6bcd32c43682e841\n1d498876c8890f7786470a1318504fef\n9e145541bf7e278d19fb4103277a6b93\nb08dfb07c78a348b19fb4103277a6b93\n76fa373d984bd515504d5af97121b5f\n5bd08666f29e946c988a5637d6d8f36a\ndae8b3ac69d80cf1b94e60a139ac4b1c\n90fb9a742f5a0cedc9736640ccf985f5\n71a0fe77f0bc1cf94187eeeb0dea4986\n75f4282ca1df236ebf08050442fade6c\n2f1a67cdabe2a70c492d9da2668ec34c\n29827b7059783559febad4f49b26ec52\n9ee7a2dafbcc731319fb4103277a6b93\n545e984b290a7398e8b2b8dc0c816caf\n54e2aa868107826f3dbc2ce6b9d89f11\n6aa86c295de207dcedad5734e2d87ca2\n107ed94869ed6f1be13496cd332ce78f\n3a0e392db610f1a1504d5af97121b5f\na99285df8c6d4578b980c976a65c0d7f\n351705e42490c3506764a784715fb668\n31dbef39a3c46b07bb8e07e9ebf0b9cb\n57dfb295c3e699ab2875319f84a135b4\nc7739fa5e32a7218a5f9d52c12457194\ne18776689e00c8b84f871aa82358858b\n8e212bac2103bd626c518c577d808035\n17d4c0f1b707e6dd19fb4103277a6b93\n4dd46b9657c0e998b4d5420f7c27d2df\na1ee33aadb4754a492d9da2668ec34c\n447e5db7c84797272127b77d9c9dbf6a\n2b3da2a8773d2571c3bd24f986301745\nfe57bad06e1f6dd9a9fe51c710ac111b\n802c46001be93276283b00891f680579\ncb6ddcf169bb7a0aa9bdc22a1e02e82\nd66b701631851e7b4b19d2c99e22ffe0\n88c39cf1485b497bfbb8cbddab1c2002\n85f1b136e6935b7baec8a763854c53a1\n7fbdef802b9e160cc242632b2a8c3129\n2fa044df89ef13b0e5c1abd833032715\n23b0da45f23e5fb4f4b6538438a0b930\n2a39dbeb52262b975babe43b460dfe6e\ne1092c9dfe55273876f83644d71a31ee\n6aa1ba85285feb756306d83fc23a955a\n8eb33e21e03b8f84db039d8689a74349\nef1152b1660592d413f0924ccc9628e5\nd02f9ae175fa83d3e6fe3612af521500\nef10235a28cdf7cda16af3198c99de08\n2ad0943e70c0bd1481f667e2a25e0619\n5cf55d9c3a3c7907489452a0032ea575\n228d5702c588fc1cf7628281ecb18112\n13cdc9e018a811a3ad484915511ccff6\na272771d6e9a29c2f4eefa83fb709ec6\n96929c12a4a6b15a492d9da2668ec34c\n710a0a005ba7b0cd6a6b5838ef6b356\n1055f78d441d170c4f3443b22038d340\n5e89f5cc834553622acd2bb6205825cb\nf4de0c72715e193deb1f243bab39fb29\nf3e50f6d0b7b293035836c728d324152\n904ddb7762488b1b5dc3653f8341633a\n97c5ee9d477c82146c7e21b4ce9a4103\nbc80b0b638f8a4e61a54bcb8e47577d6\n5b69cc96d156f286e7c7920f6a65a54d\n4fa8eaacaaad472819fb4103277a6b93\nd490f77bed3bded5af7c7ad2549a1b15\n633110fedf1efac0f7628281ecb18112\nb467cd6baaaf5bf282db9fca4b68095\n5c8ea11840795cb5f1783a44a88d6274\neee8b6fafd8af9d1ea54e1e7afcaee9\n362f53ee8de161fac653c0205ce8ff57\n1997d5827caf81df67d783b4714d4324\ncef1f5c49e5de64f593ebeeedbff73b\n6281a6537c8c4bdce6fe3612af521500\nd987dc40c90907276bc601efa799c927\nbadfcd24d9b640fdf74aae127b28c047\n8617fc907ff8cb36597976c675750537\nd2fe67741e0f3cc845613f5c2df1029a\n474b82a849e5064fa9dea4db53ba3dd\nc2ad96f56ec726d270a43c2d978e502e\n59b79461f64a41c3d225e12279334514\ncd9e22cfd389e5d9d330ae3d046a415c\nc8cb59cef2f091e78a44b4d4aac56cc\n7250e86b4feb699aa08cd647a48e605d\ne12ac2c1c707b7b2f45a7a3d26bcb6ad\n460eef2b90867427d9fad8aba2c312b7\ncecbaaf284d32574e669ded0ef71cc0d\nb46361e53253c07b6fa2cfca412075ea\n484a7d924c952e51af7c7ad2549a1b15\n9d2cf09ddd9a05fa1f8b303c0da5108d\ne6b2017501b20ce1eff1a662025674bf\ned9a4172130d3d5baf1a85b857ec9afc\ne77d7eb8a4e8f1816f1e07a56c129dfc\nc106cbd7794c6b6868661782af60b711\n5ebe4b9a29d5c0274de7ed732f5aeea4\n7217176942b8fb42fa7b9a6c80e4e324\n39b1cdf79b58062dfff16555386d173d\n360b02dcfeabe768492d9da2668ec34c\n75acccc933a08ebd2afe8d5254a0d04\n48fd6cc3f407f1d650c04806fcb7ceb6\n64d535abf6fe5ec46874ce99dea28d5\nb04f736cd05361d1cf63f06c65fa88b2\n99ee0185fa2492859be1712545749b62\n8d5866194748bb3492d9da2668ec34c\n9dfaa9b599fced446f1e07a56c129dfc\n5ea01d852c88e30a6f2222642bd41c09\nbced50190a0b63cf19fb4103277a6b93\nff546450fb0bd81f6e7c5546c1dbd220\n74615c2f7098738ca9764f2d2db668a\n741ea721bf610a9b9225fc8da7ab1c1a\n64a585a441f2ffa336c8b9bf2576aca2\n52b667b2014bdf0482db9fca4b68095\n78952b099c650a85d42ec7e303174a87\n111720e8cd4c613492d9da2668ec34c\nff8efdd26382bb863769fe68c3ec842\n2669d4df8adda44571a782a4379556c7\n91e4eb92e010047d3fc7406e820e0781\n4b495abfcbcf4b76ad484915511ccff6\n9b9a114cfee79bfb492d9da2668ec34c\ne8c1417f4eec96d228a7992bee4d8cde\n2a56e3e2a6505ec492d9da2668ec34c\n1166b15756ed9b8897317616969032\na374415a1ccc05aa283b00891f680579\n6455bf241fcbe3a03adc3470b30138f3\nc3b6c4563e5f3dc4166ddaef2c2c61ae\n88ef1cc314d8dc0423500a5b036df62e\n68d41388f8a62fce19abd93be2967664\n5fe6b79e75130974e8f8c11a24c52ebb\n4353aa4950c32e12f1783a44a88d6274\nb2bfe0be6956fe34f51f77a6d7299806\na33c519a3d90184f504721639e19f609\nbe4c88a130e622a21961e650f3cfa396\n54bdda983ea87dc9d727e9f790cd597\ncebe4dbc363265ce46746f657ed598\nc93860b7f38bf628bda72093f9b5aa73\nd3ff300de7ab36bfc8528ab560ff5e59\n9adb6a665f99addc8a4fd70ea4c8b4d9\nf6096649f87c37f1af7c7ad2549a1b15\n7573185356240f5e2b4f3c9a4b815590\nc89a9a38e300cb502c10b2c975aee2eb\nbf9f2ecb581640bdf91663a74ccd2338\n9894e30c8c7f7e56eaf35c5a2cc7d71d\n2828b98d980480cec3bd24f986301745\n4c9b6e0823be25ae52bee19dc0453f5e\n5a94a4638e8d548cf7628281ecb18112\ndf487c3660e7030dc5ed74d70201d4c\n546c4449b8001f0815d1fabef5f236ab\nc4af5a5858b4f40082db9fca4b68095\ne118a2870622acaf65ba78ad9601cf1b\n74ae50b70108ca1118775c05a821f9ab\n1eb8558d0f6885a1268ecf2838ad6f15\n2b8e3e95616a5fedabf945c9a80683d1\n769df6463d9f566e1bdd2be5d322fe48\nb9a7bbf1e0b08853bed1bd9593e318c\n98dc530eeece9f0ac3d18d4b522a4e80\nc2180f4b2d79f55cee30e9904f2fffb0\nfd3759f684abe981d85b29704f5fc7f2\nbb4f5cd713a817727d4f8900c5174db0\n70bf905fc0d62ebcb1ab5f3e2ac4cb05\n85654bf43265664eca5d1f82257fb9d9\n4ed2bc57d5fcfbd82c37553db37ec752\n9de69e28a07c6e10592cc471d13e2037\n6ccd1ba0e0d4408e56c513edc77abd33\nd045654d572bc46f19fb4103277a6b93\na808d40b66123c7ae9602306ed19eab0\ncee98619dbdb0e34c5fc2b846c38d941\n90c8ae65e3ec4ef119fb4103277a6b93\n58a1e9909542abbae48dacf1789d97b\n2fc85613e0c1fd7c6ff6a1869fe2467f\n730a4d879380fc78990561fc34164364\nf112035c6413080a664b3b9b23ddfcbc\nbc722985df07090d51c4deb11af7079e\nf58ac8ac63d5a52d19fb4103277a6b93\n2c548222017955df4530ae9f1281950f\n2975a651cf06a21260902b587804b688\n4f188d1f92b859fc283b00891f680579\n2ae70fbab330779e3bff5a09107428a5\n97131916969631a379a212fc9db8be5e\n54fc8ae4211e121a55450780441af433\ne1ab1f421891fb01f302352a74d4e413\nd90b1021dc6e09b455369e3e5b79b017\ne5b6a3cf96b36a1613660685f1489e72\n2c149e5ab744616f60ac8f16dfbc3b59\nc06b5a7aa4557182f51f77a6d7299806\n324b0bc4363cf4e382db9fca4b68095\n2276d36a40335c19215045784774049\n9e03f57afb7bbfb21b356ab8b24c147\n94e5d7fb2ff59ff98a94168388287ad5\n41e5e9ecb83b9a45504d5af97121b5f\n736589cbc46fe6b059f8e31ca87c470e\nb81b9e3fe60a49bc55182f299fe41fdc\n866552d994de3a252ea98d69e91ba870\n5e94fe6e318670d310da6117f2797a4c\ne5da52f5d1ae95f75a8ae8f7c307d01c\n8d0c04c99429ba8919fb4103277a6b93\na5de4210ba131f0e6ac7817035f206f9\n24d3d4259b35fb93490ad276cd2af3a4\nd9346fab44b6308f40ef1c8b63a628f9\nfa172f7f09f785bb492d9da2668ec34c\n34ed902dfa2d8eec2cafe1b125cab8fb\n713d9d23bb3eccc17fb8cf8a85dcfe23\n70207d8482c135f8410594e2fa0c101\na734ccbcbd430e8c9eea64ae4d2b4158\nd43f7db89fe864691e046801e2748f1a\n9b82e2d4714b97827eaeab1f0c9120b7\n116a9cd5ac9a008ee8cb931b01d0a372\n4527cc19d2f09853a718067b9ac932e1\n9ab888a92d73e4d4a6ffec31b6fb775\ned5b718c4efc65f148ff063e62e02115\n4217f023367a28b06747dd1c5ab1ba16\n40db46d8496af369c605aeab73103431\nc5c90d3e84be70a11b17743c18fb63dc\n9ff6c78f309d55471449a39c0fb09f2f\n4f66b8a004a1515df33978a307b45373\nc472a815afff5ff0e6c5cd45aa112726\ned40add41826f68ab76e29c9c43bc7aa\nfbc560d04067a6b58ce66f12ba927a2b\n47ae91f47ffb34c6f7628281ecb18112\nf1a5a9aec0b63b91f487e71bd57b6e0c\n5752f7caf0dbbe4d94210977e5394f26\n3b25f03d2f7be870fff16555386d173d\n6f194ba6ba254aacf51f77a6d7299806\n8dccb87a61e565cfd4713685ae50fa13\nfcfb3a50acf5e83ecc0484ea4f50062\n4a1510e398260ba36b31862e09495f2\nd69aad24d253474dc984897483a49e2b\n13076ebf8b5cc457b8d6f69a14683de3\nedef00af1cdfbe1419fb4103277a6b93\n2df489b6a14404b3febad4f49b26ec52\n7a1515106a9dbd2bae4c6ed7474cdaa3\n9303d374253d8e7f377b9297f3055210\n4a54684f8ab00cf5a4e0cb207f311458\n4b9ccf80a846432095bea7c29e873d16\n28cace7066ffa9c2f4b6538438a0b930\n3aa81c6d6d7d7d66c08256cf85537e\n480d483b508469d1a42913f1450ecdb8\n380a5345fda8e97492d9da2668ec34c\n8914307dbc15a20387f0bafef1e13471\n8ad35dbc44f40be1492d9da2668ec34c\n5cc61516525325f55e0d6e917505f52f\n865551d21a4b2c09ad484915511ccff6\n96a03b164315d2b65dc3653f8341633a\nc6bdf057e1a5e900548360e92af6377\n8e77d0965bd1ebc598e0d1738edd4f19\nb98b73f29673d7fb6da16f7df2c9a5b0\n483308834b307b75d5f1108744f02f1\n790d554d7f9b040299513f98ce033426\n1b83311557e48d6328145ddc1e2c18e1\nfb0c9739b5bd880ec15f2f972dbc5c17\nccd5e24c9b96febd5208aab875b932bc\n2a79d429e9effa6de7c7920f6a65a54d\n28445d445cb8b3aa5de04aad18bd94c3\nc405857cd7d8aa04d225e12279334514\n10d5c2f88b60bbf5febad4f49b26ec52\nd4d18aea46db0b4d42e792292462a0ce\n8a2349fc21f48ca78ce66f12ba927a2b\nb19c970b2b8d6795492d9da2668ec34c\n4e294d057291c50fc8687ff9b0b4e4ac\n52f9bde46afeecc5dc3653f8341633a\n2d4efb02b4369af2473f10e6caaeca56\nbf37159b9ca55259e6fe3612af521500\n671a43756d51eb613d4c64859ad102f7\nf347f2a3d85c9a823fa92d98173c06f\n4a9ac9e0b3a804bc8fb952c92850e1dc\n6d4ce042f204e89db413bc67c6e4035a\n53d88f50e3abc2888dcbe86402c7c15\nfd726084724adeea492d9da2668ec34c\nc41ece3374d0e860e32cefe0e484fed3\n99d4e65625b32a1d151f08387c3363cb\n8bb74c3e07557ba9177f2a3a0c71fbcd\n6a72bf1b1ba3254c51c4deb11af7079e\n33aaad494817a6f4ab705559ec99536f\n39ac0b216df14eecd225e12279334514\n678ae2d4a386f4e4d0250aa1ac19fcf9\n49d6f3affe205cc4b04cb542e2c50eb4\n2b9ca6deb278a10cffc21cb5f21201cc\n1861715e59337785dd7092ed47061a36\n8f2e3c9cb5f25021492d9da2668ec34c\n1b7bef12c554c1244c686b8271245d1b\n94ef9a352eefe9455ac8254dd793f590\ne545ff0d2058b382c3bd24f986301745\na95df2063ec98e429e6aed0cfb3be6d6\nb9f80c27c118564a9a318f18e43edb72\n33fa27b08aee4432e8f8c11a24c52ebb\n5974ff38b45265bb352fc7e973ba7787\n46185164829c492c9dcf2183c858e6e5\n942a10a33418205819fb4103277a6b93\n3f23ed37910bbb589eb12cef6be5d578\n5df875e6f0cc0e37f838a2212356e267\n4aafa7600e0aacbf7b11ae648ea92233\n8ad1db95b5b9d60136d9cfd13835101\n77d48297d441c7f5bbc0e8a3b6521117\n73a7e497299da43885a2d2169cad3428\nbff224175aed2816597976c675750537\n1926843fb9da47ad8852b93498ca8c83\ne6778535d7fcbf6fff16555386d173d\nfad907934656c52ba1abaa6eee3840a6\n383b4dbf090a73dd597eda2e51f31317\n7252a2c022a1a3b21f285be552b78f9a\n35e8b034d84f60cb4d226702c1bfe9e2\nb7aabc0069ea63e096d5fa1ee6ada8d1\n2d6ec4afb0ef827e2c5b2f528cea9dd6\n91dbbc203e8562e6238f27554ec73a59\n4e9475fea6f3ca32c4cb3d6800567627\n5ef9991f0985302c2526940b0dd3ff94\n5229209bf66b6657b11ae648ea92233\n64c80a33436b8a84541e733f245fd038\n6e53d494768386ca8579483a049f2a91\na1734a851af178bee15475f0b1eb22aa\nacef669b784a4fec1b17743c18fb63dc\n36447db5cf7b5a27ab5c60fa85a57ffd\n352bfa764478b1602bc694a93134e562\n7f1164e82e3a975fcc1908493f380315\nfd9c60e969f83e6086debb0a33c851f8\n1b8c83552010440d490ad276cd2af3a4\n9e9e6025f821c2bdb6d6d1ff246c4885\n269698853d294f595761a0b53ed37cec\n1145248e1eba424d492d9da2668ec34c\n398c1d570b642b6cf91663a74ccd2338\n2952ec189e993eeb17e114a7b3c6fb1\n90bbf2bd1acca50fd684faddec3c0090\n5b2b23120a4607dff7628281ecb18112\n99c8513bc738a21d440d6814caa3115e\nb9415bc240e074837e76245c0a9e51ab\n29883092cdaabd09b41b7625e8c42dfa\n47fc279d7f0c2a492d9da2668ec34c\nf5b08ab02727922b738dd0d3509c7e47\n52621a97e5036dabba18ade30e563d37\n21f9dcdadcca16227ad11050da24bb12\nc7786437606ac263b04cb542e2c50eb4\nb78f64455e41db28341ebff340b2c71a\ndc182335876fbebbe6fe3612af521500\n8c1c53ff86f59a97d2f33aaf794b5932\ncf662e6564c5c3c5ce60514f9a637ce\n2de1c5525d24c1c988dcbe86402c7c15\ndf8374d8f3563be8f1783a44a88d6274\n2560232741878aa1ed0003a3eb88f6ca\ncbc47018135fc1b1462977c6d3c24550\n5a28539d01a0bbfa8ccbef2c1e41835e\na248417b6ba82801610c2a68437007d6\n5d92fd12417a9405cf004563556ddb36\n421746966acf9b175ecd29875b6f0d44\n7049a1875e1b82d71f8d8332ee17945a\nd0a3e48a84f68a9143dbb6421d614c0d\n4b785965d54454a4e82cbac5cad4b7d3\n7910a6262ad8fc113fa02fd212ba0e5f\nc465b7ee24741eea9edd9a0b28d406e9\n6f754a2c354b17642c0eb4a518e123ac\n1ad766f9e95ce308aa425ecb668e59de\nc5abc457162ec704bfffd5d6a62e360c\nbae3e35109b939cfe7c7920f6a65a54d\n3ea6a179fdc3c01daac8336231c53cd1\n9663b0a707ba9753983e0ae0e9b98f24\n17b558e72a4d76ef8517036a5ca6b1c7\nffcb8206f907e663eac685b1b2988af\nd81327c591d1a709377b9297f3055210\n47ad261baf9609ffc27c29012942420f\nb8db5d63c7042d447cbf7cf495477037\neee08ec7de613898567232766992241d\nb3ef1c8790d42507d0dd5269e5b9cc8\n1f8eaa7aededc7e637b2bb75885cfc44\neb8073ac89cf7b4181f667e2a25e0619\nbbef7baa438869dd52bee19dc0453f5e\ne4cc5cee7b011df316037b4c09d66880\n5f562c9c8f0df90fd2f33aaf794b5932\n45f9f54b9e7cf6897886c5f50906be82\n8fbf9ce2c9cb77bd9cb48411c757aef6\n4707a1494196ef829917ad57402f53f1\n6cfc437d8ec6ce7413d48601aed73697\nd388617a719f23a191d0dff7aea42471\n19319101e064eb1019fb4103277a6b93\na9e2b04bb60240d0febad4f49b26ec52\nb0b75045d06201f9329df33f4ef71f97\nbd50871647e3712f79121b38af0e3f47\n359331da71ed26eca6c03a53cf0a14c9\nc149718d89776eb5f71db1fd522c9a79\n6cf6140483ba1b347b11ae648ea92233\n2eaab78d6e4c4f2d7b0c85d2effc7e09\nef7d9ace8098733b8e80abc614a52973\n5fa5f75741e94598e6fe3612af521500\n7a2d21eddb89c8242058afcc28d23393\n4dbddd8f3f658821ad484915511ccff6\n8e55684da4fb8219d3f6d823f04dd65\ndf8311076b838c7ea5f9d52c12457194\n78393a855f214f387fdfb54d66251309\n8363376d07da8aebb76e29c9c43bc7aa\nc7f0d32287191563bf22a5ca4fa4678e\na08870dc5fc0c8aca19799a9cde9e06f\nfd5f6ed4a873c5ec300fe8666348bd38\n87cdc53aec65aa0ff51f77a6d7299806\nabe225081bec7d21c5a208307819a3a1\ndada2389e96606307aa7cd663df90f18\n63b84cdf260ab81b14b86d5282eb8301\nb63fb0d22a44ff698cbb8bac2032149c\ncb17f1916ade6e005d5f1108744f02f1\nbec075322d514fc9f51f77a6d7299806\n797df32cd5248558f779fe11f536ba12\n6673cc5f492f48a229404a50338e24e7\n5963e316d9015ff1785d41fe7f67162e\nfb22d2e3174ed0519fb4103277a6b93\n5aa2a53207ff556d473f10e6caaeca56\nfc131dfba15fafb2fdeed357dfbe708a\nb23cd3a93c8adbf56d33c8b6c0fec1f2\nce2982a9b05fef738a075f7da2b32df\n536dcddf1ca6cd76d7f81f50826c13f0\nc04c5b7d68b4e6481a68dda91fe5259\n20310d1bd22d8e28890eb7072fc1df21\n4fe3809c20606e5369d8d5b35c38db0d\nd29c14f180ce319f71271c0017c27c86\n4a9ed043cb91fd91b04cb542e2c50eb4\n6932261b5c17f0de4733824eae5cd9ae\n68dc37f167347d73ea46bea76c64cc3d\n66c791cf5f1e61a09753496ba23f2183\n1fb9ffbcd38f8ba63eec26c23f5bc80b\nb80e1766b45076ff492d9da2668ec34c\n6690683366993cb1d42ec7e303174a87\n1eab4c4c55b8a0f48162e1d15342e13b\nf854fa8ee2fb6d715936c7265c890fef\n41f3a12d9f29f204dbbc9440457e303e\na3ba66bb0fbded22c5beea20858a99d5\n39031caf2b11a7f665ea3fba7f481d97\nd661b52c3763eec020768660cf080d12\nd66de4cc1dc6cf5e8f8c11a24c52ebb\n6233ebe950c7d44df51f77a6d7299806\necbb4e4665c7fbb45613f5c2df1029a\naa05a0db9ab12c5e3e7d886a315f2350\n30074024ad3c581a19fb4103277a6b93\n30488c6d05b4848388df69d6c56c6047\n3d988ea2b68f48c7492d9da2668ec34c\n5da96a876b66cfeb922f1115ce03b77e\nbce6cb5f92247eb6844690e7ee348ec2\n44456e87be145a703c8d0fdfb1cc2535\nabf03d43cdf0825ff51f77a6d7299806\n6dccf79814289bca5a15b6547f08c8fe\n62257f79605faa66e6fe3612af521500\n2c8f57bf281dd31119fb4103277a6b93\ne4ac472d21d43d3258db0ef36af1d3c5\na037d4ba135bea9472a38ac2b8f5cd48\n48091b14719964986d075d8d4fe1141\n7e8b24aab1f2681e595557081060d0b\n79401adba0311d9b19fb4103277a6b93\n929ab79b4f45f747e6fe3612af521500\n3776ebfcc23e6d87cfab10986e008a3c\nf00c1688bd33aae28cbb8bac2032149c\n5912ba21e93d2c5b8bd10c3418cc648\n89c85a35c353ab4c9a037b4abf810691\na4d7d4203cdec5dffebad4f49b26ec52\n9c7c3478edebfc1031d38697be8abe58\n5a80c5a35dc1634db87028a4b477349f\neab716562b582538f2599a47b2a7e92a\n55c9891ac274e076492d9da2668ec34c\n46363a10e242999c69d8d5b35c38db0d\n473cbfa40ff731d92e75d78b4c7ea93\n1d2745e280ea2d513c8d0fdfb1cc2535\n26d0416a064d23f1f9aec59741c69cf7\n81397314ef43f59e98cfd47a860803c5\n67d9afec46e20fd279c4b4a860b67e81\n1a6f615e8b1b5ae4dbbc9440457e303e\n49f3a28d33c34838d74aae0eb2ddb027\n2475ead1cfa0a5a6490ad276cd2af3a4\n81ba974369a343d3946b850f0cd29857\n675e25ef07ef717cc8bd7a04c9659f1\n4978fcb47c15f96dce88197ffe0c21da\nd91457217673528ef91663a74ccd2338\n38ff18330fd5aace162bf7725b3fab02\n1c685bc2a93f87a2504721639e19f609\n58479a7b7c157865e68f66efebc71317\n4cec451d0ffae39b79e99a4e49de900\n7ae007a84e6e616d5781796ac0b9d597\ne0154380de563d2cd81aa8b56a36ec8\ncbb3ece285d9c48ee7e684d25d4dcaf0\n40ab45735f526717e25492f5f62d416f\ncbf18927a23084bd4a62dd9e5e4067d1\n2f296d487ade29fe770bec7a2461d9a3\n4a4c7abae3929595184740798d03a659\n7a7273d390ea180db857892c38c46c13\n8c76b1db0a08653ffebad4f49b26ec52\n5c92b3aad6c462514b3c42e318f3affc\n4f22f44c331ad407166390f4a0367453\n55740c07554a726257f40ff86fe708ff\nf0cbf508a2f27a16504721639e19f609\na40133bc1af575291bd0966183650a4\nb1d9c55bd4e8ded1c76575d5e6d323f2\na7f9e2612d0764a0656a19d1d18fdbac\n2a197b179994b877f63e8e405d49b8ce\n76ab50cc6491e518782f27684f3b650c\nefefba3f45a9e16dd64ad79e5981cc8f\ne159d82f67a5953b1fb41007d56c0ca1\ne0276adea0d4f4bf1783a44a88d6274\nf1c6c74053fe8888c5f49519e3caf51\n766d7892fbd7a9f58d6e12c39b2d5023\n701551efa4f1f4fe3e478b26cb10ebe4\nbc46b7460e4476d351e0e6ea07e9e2e4\n5cdf1e5cc2fdacedb01116e8ff585621\n24fdf6e5090bc3442370db05a58bf9c6\n3de9797fbf88fc35d97fd0ea4791ae93\na6d850761adf6003dc89a28b5e6678e0\na910a4447648af1a35133ba9028a8318\n57b043906feef78fbeae145d587f201e\ne8829b6a1601c109bebd676e3a69dcf6\n910bbf8701a4846c2993aa294808121b\n56c8c9cfb9e6b1b9fdef1c01cbd4ae0c\n9b275819a433a9c733e4fde2bc371944\n239a5029476b8a2adb6f46583a3903bd\n7fa5ce045ee0a286606aad310bc344b7\n1f571e244384bca736b0f2a1430e993a\n7309610420ae20c930ddb6ead95f49cc\n57406cae1c2978b40c306db1f141b05\n31423159297243ded65766fd3c4f994c\n586b90e4b5e0530935836c728d324152\nc15a1da769c1ffc5be1649add3e36e21\n1e7c8833d231178fdcddd0cba5e9fbec\nfdd7090f3ca12395a7ae19ac44244eae\nf0f9048f45eed1ab3a8888e78d004b3\n64ae981900a1c1a37753393bcfa5f775\n4841eb9b6b15d037dfd20491defa4a70\n8ef2d2d320e4f3479e3ca99089143c61\n110ad013a9ae7a1ab0f4eaf0533e82bb\nd1bef1cf465da3acdca30639ad4a20ca\n57263b7b778ac3a87c076cdc1de5871a\nc76b2d2e9b7cc59e82eddefc99ebacfd\ne594b1e2f7a7f677492d9da2668ec34c\nc98207781087c7c2995e7ab497adca70\nb90720eca9bff16c45c481d507018ba\n747d2db60ca6b98f3eec26c23f5bc80b\nf52c7425a47ff55f79c8c47a54f30eb\n8f2cc8ff68f3208ec935dd3bb5739fc\n17dee0cfe9a370b134bce1184e175df4\n68747a56aba6ee318677364bd64735c4\n6ddc64415a10f4b7debe318339eaf996\n4706461c517a755d4e6ea835fbc6facc\n8b38389cef61cf06fa675450a2f0c084\n7862b32132af278f45ce8baa9aaad5d5\ne66276c70cadd32a3eb520ff7cd241f0\ncef1883847c02458cf44224546cb0306\n11e6e58798ae5be83e5b5dbd84cdd0f8\n7a79745b6bba49114ee3d18ae9bb4bb\na3c1460f50bd470dd064b65ccd89778c\n92bad575037b0552d7bf6fb68df7f786\n602b7217c42d3d365eead856a4605937\nf5be22e0a737ca9f2c0658ad22a9a9b\n5e2d7d43431eea85364b7ec2e28b3bd\n4f58ebeb561bb94bb9e8bdc9c4a49aa2\nb7012b9baf6a71526cff9b44fdf0517e\n436be9df788b706fb40f0ac0fb9a650d\nfa89a0401873e5a6bbc7a6acbd8f058b\n5ab7fb2f11d26c1c291743ae4bc47673\n2a6b8437623a374e504721639e19f609\n7fc52894c0d1e26dc433ba3e0e025e8c\n540aaf05d1ff41c0c90a83871023986a\nc487441af8ac37a733718c332b0d7bfd\n4e5c18c87a10f050e7469a3f8248f48\nfb3cae311c16eae32b18cbea175ad66\n68e9a9ebe0475536194b666f21552cb8\nca9023f1c44aa7db82390c5f604e0d9b\n908de4d82bfb422ec43a4855019be9b5\n40747ff0ea92f134c409eaceb0331214\n5a643c0c638fc2c3ff3a3ae710d23d1e\n629117f474a4bd482d7c2f5a9f32d6bd\n9531ea3018e8bc70f81c330016997d42\n4b9278e9f2f4056d1f47fd90378714ec\nf2ef238e2e4615e92cf8e80367b40c9a\naa3e5b5828912c0b5d11e7d6920a72ce\n47a661b489119b764b3c42e318f3affc\n10709332176024ce9e47e7a22e24daa3\n29b3a8cb9595cbe63b7fe46c7c128390\n9b8f69874b502bc2742728b30848ed03\n529c0a3650d6a7be97e2a21b8bc2d948\ne2acc4d276fda3d77d70172a29ade99a\ncdd2c7251be91ca779b76fdb1a0daddd\n2b8c678b99f7b2807ea88ba060407992\ne1791ff04ab8348fdb63e6ea2fd66753\nb718fe66075a7c952af70677c0b21b90\nd57a11d2272f0d9f9c5c7365bb502b0d\n19ee0ca97ed377fb69fffd0daafdccbc\n8f9f59e023572749acdc3d668e7c804\n5f45bb76bdcf883d5adb3ef1dbe9e3b3\n307b8798217c08579e392c6acd0dd9b0\nda335ee36e78e24988dcbe86402c7c15\ne89c76bae2ce47bcf4b6538438a0b930\nf029adb6cdf37c402b339ec555ba3bfc\ne14803278dcc08c4af7c7ad2549a1b15\ndf7fc0b3b796714fd00dd29272c1070b\n98b698b0253d933b72dadd9292b51ceb\n94f5c52453dfea0b6606be97908355b5\n9c700bfbe8730e6db8f4af915220b65b\n5a7ad45fa4672684f63bf7d908efc575\na5a5d118118eb760fee31d33418a3c16\n3e5a18ae1c8d5fe068d1b9a1d97e2846\nc960ba7a781b6fb9fb7e1f95705d8fb1\n27700c06980561845c7f80200eb528f\ne8e586ccf4dcac74cad9a65dbad13fea\n71a52b54d732450bdd766137cdd5195c\nb7073426bf9332187c564a6b9ce2156f\n342d41101756553eb3ad032acba61b79\nf609378d4f5c755c9df2fbafa78e52d9\ne5ea39e2b4c28ea2a8df8437731d97b4\n658c983e6982f6a43b48a711df82173e\nc7bbb1dfcac15f43e33c1bced7bc2a7\na16b8de490656d03713decb1a0563b12\ne39df7339552595febad4f49b26ec52\n5ef54fa5d00dbdf8c8687ff9b0b4e4ac\n2aa122c56910bad8fb0eb7e753c06942\n906608e3146548e6a4e733e4e18a6d05\nd959b7666dc2fda41c691caf3fc2f46d\nfbe64bd927721467dff2bb0129eed40f\n717e28c855c935c94d2d89cc1fd36fca\n41ea9182aa12effef47265090d8660c7\n75ea5a697313a8c214c2f69de20984ee\n8cf71cf6f0bf6bb2b5af95b2c842e5a7\n6e6ab9da02b8e3bd9bcd01fc6568d728\n4ae919ca418d3625d30ba6a673002f3e\nfffda9f09223a21118ff2740a556cc3\na1296954d5190272327289c00b6dc9ca\ndfe0e22865575c43cda85f6a3e19b0a1\nc48bc68a100e8c24696b74614952b2d0\nffed7e95160f8edcdea0b1aceafe4876\nda1ef4e9ccbfab13b3234e0da44b11e4\nbdffe559220b8a561b01b8d225cb89ac\nd792c65f8b1710709b9f2eb77f5e247e\n9265413a74278fb5e45ef4135c266a12\n11740d372308f12185047f9f654ddc2e\n51ee5a84b4afc40be45ef4135c266a12\nb6cd2d8af74226a3cd8b5e03f65e1405\n3d697c411b8bf8a0df6cfab91d65bb91\nc6786aeee29edd1b2bca88fbd368f59a\n34bda4dba48231b97a90098a7525b367\n7eb7574764b397c3e87e9b3f41906a3d\nd1436d73b3060f2ffd6176b35397ccd5\n331e1247f5672328826fc8d57346a2e4\n19cbb7fd3ba9324489a921f93b6641da\n6a8e63f10bd6736e713decb1a0563b12\n9ce08b44810f03c963cf8719fe855f3e\n2c250a89e731a3d16f554fd9e81f2ffc\na3d1cc17aff08bc7eab55e294b4eea02\n4c1c81cc186dc50fd84b8ba651dfb8ac\nda918b121ca55feb9b9f2eb77f5e247e\n6344b2a2fce93cc3d2f33aaf794b5932\n3276361e9e651238ac4ed5495364a497\n91ffa0718376a4fb3f7e27638e63d848\n2abb64b16e61663ce99b044850de1b87\ne8f20141696f143cdb77753d44aa25f6\n7846afaf010913e4110b42f6d9481f5b\n510a6ee3bc0a0669c8101121c12c3f9\n65f065a51800eaa5cd476b195edd95d6\n6cc65de3b510406ba0c5548d84070f68\n426f02971983126daae8d1cc50964a7d\ned1816d4dee58c7ddc809959e304d48\n5aeefb539699524044b2fa2cac0778f5\ndf28bda265e0e5bd2d282edce951a03f\nf9c4baf01dbe6c488616812464c86290\ne7a0200c28cdfea7c3bd24f986301745\nc47b50988fef70c9220c18114ccfb3af\n9930f9ec8e2e94b4febad4f49b26ec52\n184007a6dee70847c2a9692bf3ba76d3\n9ad2ee3a38a3d0ce3b32c8e0ac22ac44\n6333b3de61610070cb443b1c1b54049e\nbd7566c32259e41b4c161851ed2b4e4\n458637d073cb6e9dc8687ff9b0b4e4ac\nf2af2483f9fb980cb237f85c0ae7ac77\n5128a385e9c90443febad4f49b26ec52\n6016c2e4f5d5c2ae181fb5b25ff8403e\n4e50015368a4f3ea4eb6addc0d23d122\ncd5cc7a5e50478e82b520984c067934c\nea3723766e96331ff91663a74ccd2338\n4ed0eb4f4e7ea0952efff55e0bb2e42d\nc69ddb5376e22cb8c4e8952b27b5f370\neb2fabae15f77882139d2c86c9e03ddb\na7caeaff5582f54f55f9913e822d5318\nc3778a3db3d7060bbb40b038e5e0b7f0\n1eeae84f10df85cd74984b9cd0997a52\n2b01a7501dd9780075e0fac069101b51\nb0849a1c01da76eeffa41024c63fa9db\neb039f6a86785f3a9e633556753261cf\n92450ce64f51c778f235ab3c41aeb5b6\n725184eebea99d42a49e2dd37ae1f85\nf268849e43f64861cb3a30f2c37c38a6\n20ead42180f1ba43ec7d59bee49bd15\n6f6191af40bfc07116f5e76c24d541f3\n995ecc9f34e0dc3bfa2cf126b85e1994\n64f03da6f61e5b99d858721c5f89c1b8\nbbdaf1503b9e2219df6cfab91d65bb91\n8e581e01a8b742214e3003b3c5dcc179\n939d97b226f11272217ffa735084910f\nbfa242a09f35dcaa38fba5f798d10731\n40bfad5f86a730b29f2349486c570dd4\n6e923ab0f28c3c2e7251f1ec40392b93\n22f7d658bf2d65da2933f312813ce997\nbb48377bba20a712a45aa09d68b87656\n73cf718c453779fe346b7e70ad2e57d8\n58b1c10a6e1d67b3b0cf2e642b746bfb\n297d3e472bf3198fb99cbd993f914184\n459bef9cabed55cc593ebeeedbff73b\n8aca9f9005d8a8bae36724f611fabaa4\n507a5974b24dce2ee1fc1bfd241d8d6a\n768acb4029f2d682bfad749b583f6a07\n1d0abb4d48b46e3f492d9da2668ec34c\nef4e47e54bfc685cb40f0ac0fb9a650d\nc7cd67d1a9def55aa192483aa282f8e5\n917e8fa5d1253398ca6a405498436716\n224775a0c7f8fec65780b8d333445e3e\nd5439bb962c3cc8579170a5f8beda902\nd0215a0b82661b82496d6322c763591\n42abcded68db4356352fc7e973ba7787\n68f1d9f63eae2b5123c1b1df1d480bd3\nfe8b246b47321320c3bd24f986301745\nf645f79d47e2df0f7dca29e186afcbcf\nd409dbda0a34a953c9020fbe6b2ff6\n9f7dd8cb949fb0971f6138b700829a47\n26908ca3183b5a4223500a5b036df62e\n9641c65e9a8f9a873f9d6e0ade5188b0\n8a87ac1748519dde2fbee880b9f634b4\n60a8c55e653a107ca192483aa282f8e5\ncca975f4a6a4d9e9614871b18a2b1957\n7726993e4b88223fedc32c5c9ec9f827\n383bac847e38daa0e8dd9b2c07157c63\n308b76aac4b518a43eb67d9fb75cc878\n5162651a4c6da72e8a5e49d8f4867e8f\n9d177c3174439ae1a48e53188865c070\n8fd87d4aac0153a26b28a4cbbb97a012\ncbcc5cd1aec9f3413aa677469bbdd68c\nd2a48ffb6d25f88dfb0eb7e753c06942\nefd07df34c1f73cae2367b9e27f16a71\n33f5c19e34d74fa97f07eeccaaddf1d0\neabdb3aa920b216820b64028d2efc877\n20c6158bbeb2735ed1dcc55e36186e4e\n482afdc2ddc5546f764d42eddc669b23\ne4c84068e4c56e53bf8b9d530de7a108\n3515073c473f4ec94b3c42e318f3affc\n2d8f0977b9c6592ffebad4f49b26ec52\n573a615f3496ff4b9b9f2eb77f5e247e\n6d6a92847f46d8e27b57eb4fc830f67b\ne1ca70ecc629eb46ca17c984d94453b4\nf59627a077dcc2566c63b8b48495261a\nfde8c87a485a33b78fa2f6eb9fb1de7c\n1d8d16c0750f22f5ece93f2bb0b6d036\n71eca23b5fc484cc59fe89a0706f1a71\n50e97407fe2f7ebaa8135ec53db502ee\nd94490f503e005cb9eeee305ab9432f0\n8e1d232ce609392ebd8eb8ad250e5135\n219c603c479be977d5e0096fb2d3266a\n489391452ccb38e4c8687ff9b0b4e4ac\na4ecc0a3d68dafd44925bc492489de9c\ne60f50cdb48c2626d61bb0c6c287d278\n2db8006b905b54abf88a016bc446405e\n6d5c6eee9e25b314b3c42e318f3affc\n6ac7b2ef38226e3d26c2e61baa2a8130\ne862a41f869a4274ac7f1a00b76bd166\n700b11e2ea3e941faffa8ecba9b9d6f4\n58ebbe670d03fb65cf19858fd1963d10\n96b4422833f806cecb092644051ec279\n6f84118b912eabbd4587e90e2fc67ac9\n9a28bffd582333ae2af4036e9c51cbc4\na1f46215051dec0871a782a4379556c7\nbfb93705c05ecd0d31e7ccd4db190c0d\n43849351a4da550b33d93f57729688db\n752edd549ca958252b4875f731f71cd\n2b82a928c4a81fe1df4cfe396cee719e\nd38a49a15715c46ec3bd24f986301745\nc5be3a0cd25402f0242f43e6bc9e11b1\n1f857fce279b761435fbe95f496199e\n22b287d232fd062bf51f77a6d7299806\n93e183f827d9361cd7c558b0724ffc9e\n858e98a193f0d82f1a5838237ecfb290\n9b40015761a54e18c29f8b0ac356b8ca\n3f0b0feb58008a663ec7ad443e0ae81e\n60c328c57efb2a69820018801b237b3d\n5bba0c3a964662a6881e525dd6501111\n32fcd056e1c474b84f5cfb5dea01f97e\ndf9eede2969408d0bd2b1bd66a734698\n5b185142b33f3e45c3bd24f986301745\n7e4e9703841f16194e045e9030a39002\nb54ae988f5bb6c6b3efeda73d60343e4\nc8963b0930306a61781cbff504e4168d\na92a13b4968d7780472349060cd3c236\naeb86d8354eaafa232acff7796d8c3b3\ncbdfedbf2dbeed3a91f6e3ed62ffa5d1\nea7e09260babc698983c05814b11dc86\nfc07472e4dd1b6698ae97f14e63e7e01\n2759711dbb8b66ce66e463776e370597\n98c78b59a5d97666dcad73f240f03a20\n1e92f53f3a191323d42b9650f19dd425\n38732a2b4c03e7a8b7a8bf5e3604ae72\n9505568d7a277c7bdd7092ed47061a36\n886c8d7538d9d7bde2d5f8333c552e26\nc18fd0dd722d164f41bb00bd5475793\nd5b9579151041cbd9b9f2eb77f5e247e\n70ef2b4c4b287c4e3c00c853d8b7ab22\n3a8b5f5a627bb2e199b439fff97886d6\n955ee3a20ba242414580ed619ae2daa1\n41396db6d7b550a411f7226d5cab1e9\n41d9bd662687cf503ca22f17e86bab24\nce50c6235cf3ad8855afe589a9f09982\nudf068a6b-e65b-430b-bc17-611b062e2e34\nd23682341fc187a570732116fb5f6e1\n325f9ca506317aeff2c0658ad22a9a9b\ncd9cd0ec7bc9400b559cb8a953a07d9\nc20a354161c28f6ed4da89766e80607a\n37b8604d852791651a648655355dc699\n2892ab19f2d3a88a3ee8e30b29f70dfc\n969730a19872b564fdb60f509d2616e0\n61f71cc002f6da561c81652b127a0ec9\n6684ddb2b7acc11e975d41ba8f947ac\nfef17c8f92673dd477b7d69aa83ab6dc\nb88d8b5e5fbee4fa8336a02debb9923b\nc7087db2f1ec6e62acd2bb6205825cb\n61a6a9dbd3d0efc2c3bd24f986301745\n113016635d554d5171fb733891076ecf\n896303208667c3e9713decb1a0563b12\n7788afe9baeb2410e8e9bfe58361d5c\n59879a7a34ee2ca840e8b85dbf5f349\nc1a0882e6e8f8b082b722fc42ccb4c6a\n80ca57536dfe8de971a782a4379556c7\nca764efc4e76a8b48d69616377752ecc\n917707ebea9dc26d7ee217c21e683487\nd0c287f11c6cc95012d6d1e9f6b5e761\ne4384c55342db206713decb1a0563b12\nf39d0db80cf41db9820bd717b66cebfc\n61bc4930719717a9492d9da2668ec34c\n8f4d7de6fef55f99232ca089ddf0305\nbdaaebf065b112da492d9da2668ec34c\nc6e46dc0afd8b9fdd722b8781cb9911\ne1e3796be1c4313f9a59e20336b93b69\nc04f515b688f9d97fff16555386d173d\n56eca3d859b5e8b4594cea63c14fa879\n450cd2f81b38b6fc7ec728abdd798547\n4344509d0442364d3f9d6e0ade5188b0\n5cf5615844b41442118bf3432a979b3c\n77f1880f07fc9805ce5f623508bcaa7e\n80bad2242183a77df69c1bc654d8fbbd\ncd47ea438a9387c0ee088de33038f12a\nd1caa22978e516655c31590a2627247\ne6ec608ccfb38d6247928239f46b6ef1\n8fbe7ef85a9c57db784a45ea6efa1d77\n36ce26e70eace0a3d9b53420a5458c53\n48f0c9b02587b5a8ea0588dd0d874b1e\nfaab798b13ecba08e9f0f0173ae2f184\na8d357344e421ff21e12bb4aebfe8421\n469d04bcf9576a8b8cbb8bac2032149c\n5d72fa9aea5383384a73e364671ba824\ne065edba45aee481490ad276cd2af3a4\nee6f7e45be30b0a5b9b8611336bc3051\nff969b22a8de5eac30e06a011e63236a\n297a74e1a658e231f51f77a6d7299806\n52cfbd8c8650402ba72559fc4f86f700\n21f2927b04e2f22830ddb6ead95f49cc\n3a96b4ac78928fadcfd33d85f931f6e8\nb85de1f567a654737f8769b595aa12b0\nbbe566c26d28ccfb504721639e19f609\n2592e69aaa2344292463e74275a0e3c\n3b342f2ef792ff6a6006cd11c597105f\n2edba114d2e9454295bea7c29e873d16\n308e56be04f6214e50ed95708c70cdfe\ne92bcd55d36a2b70ea934df7efd260bd\n463fe7f155dd7279a7635bec8b4f9183\nec0258c40ac29da083deefb07c367f12\n2ca6d10b1ba99fbd9784ddd96453bcc2\n6072ff799065609b6bc601efa799c927\n7b01e2a03e614eba4710269d4bc18736\ndf6157db2534b72a9a293c6471e6f319\ndf8bb7ecc402ede384a05e54516915de\nce95fa90122dd67e5935ba184b9bc177\n5afc95ed2a26ce548644074928ab3f32\n8e2b44ec14701d057c2b071b8bda1b69\n30e3af034e3dc084ddfd4f4b3d47049a\nf9e8a5547d89615dfcce6278f5ffb13a\n866e7248434968051cc7750d0afca796\nea6c45a1a6accfa7201a419fa3bbf2e4\n46cb1e740cf6e9ec7ea88ba060407992\n8ec247d0e133ad3ce922ceea1248b9b0\n797ad20122fb300659810674e1df4887\n7263fe53bb4601efa37f3fc191551700\n9e8e454c76cc6815dac5061520ffd33e\ncb714c518e3607b8ed4feff97703cf03\nf1dac1909107c0eef51f77a6d7299806\n20d01aedf15d4d1d23561140a396280f\n6df97f6b123be35b71a782a4379556c7\nf6988e6ca8ed9261492d9da2668ec34c\na5f8050192680e993e6a70f59cdd19a6\na77b1abaa28588bb926350348c58b8b2\n2f0bda4f2c225e0254141309938df7ee\n56fc424a89bb137bf2197da8dec8488d\n491eb8f7028d06152966622c3d8ee695\n3f194ed2680ac0f4f875094dbf5fec47\nf1a1c9f231d2db078a8a3348259a374\n23e726da58f115f69b9f2eb77f5e247e\nd4f38e40aedc67f779368d1198f406e7\n8f1e882bdc10f54955f46d55537192b6\ncf1e9c2ae3309c65d7bb55f118ea0541\nd2c93dac1e088b092561e050fe719ba\nbd6fcae754203396e34dfbaf829eddf7\nb932d245e5e9f98b504721639e19f609\n63fb3c970f0051c730bbd4cddd04c77b\n8748c7f2041761401fc5750ce9890422\n337050c0a5a7f965cc5cf3ad66086732\n6e06af0dba36d9d8f3f3ee5e8ea028d6\n6326e2f6e17cfc21d43c0a5e70f98227\n1e1151a459002e85508f812891696df0\n1a74a83fa6d24b3cacd67ce2c72c02e\n117c0e0aafc0c3f81015cdff13e6d9f3\n5748c2c222d1528deb0a72cc21af76ff\nd3f4ce51467fb777525211e12d56c55f\nbd0cdf88217ac15af9e0f15cc1c070db\n2724c02bc7797bd1486150a9b7f2cf18\n2207db2fa2e4cc4579b3e1be3524f72f\nb8e5ce05c382b9a3f51f77a6d7299806\n4019d848076af6157fee47aa19e2e28c\n3075380de1f28ced3d290591da43d03e\nea02e94e39a2fd3922963ea1e168015d\nb526dccbbe8417bd6cf45f1c1a3d29af\n5ffc415d0cd8bf1d86db7993cf8d36e1\nc976cb3eac6a89d9a0aa42b42238537d\n582c67ae4d746d121b356ab8b24c147\n3c83d6ad882270287ad11050da24bb12\n8d4efa9893f7e49b3a85b56ecd01e269\n2da97edb618f05a5b2ccd937df5da28f\n7f647aa4750640fdaf192dd05d69c7a2\nfd31b09de6b3a75666764c53f1bb4495\na5dc036f882fcbaaeb655fc642cef479\nef9f4de6ad345818b25f0e6fce03dcef\n498755187e526e5c1cbcc2e1b14b6d41\na9b75041c8ef8654f2b838d6025155d8\n3c408a4ad6d57c3651bc6269fcd1b4c0\n432138c30378b2a8e1b6c3a3e12d929a\nd9ce33c5f448815d7062f2d72cde5c95\nff5e8226b88c6b95741cdb62023d6a2f\na10370a1cf036ef82d4725b469da72d\n73374d8256f79089c308dc58cdbda034\nda7fd2dca5e9f29455f0f54ca9692531\nd04a1ec4ac9de6d6eab55e294b4eea02\n3171bae36693716126e4d5b5a8cad4da\n71dbb37c026cc338eff2e9bdfc79fa2\nebed17a73a2e9e981882515d09f3979e\nb5ae5354fe7c166319cb07ecb5b4102\n59ee0ee98def6f1e14b86d5282eb8301\n91534e0a3b0aea7526fc87e2982c8a2b\n901cab3f56c74894d7f7a4c4609b0913\ncd9702520ad57689bbc7a6acbd8f058b\ne29fb377ebf475c51b1a00a31bfed97b\n263cb748cb81e69cc329e2758ab09ecb\n89b05900bf1df4d8c8687ff9b0b4e4ac\n5a3fe2c1f1e2009e762ec387b772e9e1\n524bfc8159111e4571697d26793100d2\n5043b2deab10560fc458ea4eb61fea2b\nbc78f5fc9b614e357cee0fb3ce7bfbe\ne9e224bc0a0787d8320f10afdfbaa18\n99d5fabe3b8258ce9d4d5dcd2cc33826\n807c16e4f6f2c5852cf52ec1a1c9b69d\n8c629a89e570c8776a9cd58b3a6e8ee5\n9bdb034f30c404edba1028cd22cb8779\n48d2769e59e4c2b9febad4f49b26ec52\n8bc130dee1e488925a7b0949b519072\n67fd2b1f102f4f76ec89626a4213fd07\nd7da1c65f996cef2febad4f49b26ec52\n8c90c2739c56c5f0327289c00b6dc9ca\n40020a5e90c75d94a93412f1b60e6fba\n974afa9a51eb74245c26acfe9040fa59\n43fc49e4d4ff831b7df0e9a69c97c97d\n438e57bab04de55e8544f4ec4dad7a5a\n50477d125025879386855a8015309d66\nc7dcd3fdd4ccb7563dce8e6b691b2a29\n802c4ba91b2d1dde9d03faeacb82516f\n11fa9b044482814ef91663a74ccd2338\nd528a94f72c994f3e8e5fd5b1798c97\nb1b11a70a19492fa5242f8291aafac22\n7224a8114ee2daeb0c0a8b87064ef09\n3612bf5942858c5976ccfcabdd2d6349\n6b719f78721d1eb742559566b871c978\n2ad02c9ed22b03727f141968548cdc00\n364a43c9f94f315496db593b49da23e5\n1ab42ccff0f8235d979516e720d607b8\ndf91f68fcd968fd0e4f1a5bf17db27b1\nf515332dbceba51120768660cf080d12\n13c18609602e4ced37b2bb75885cfc44\ne62b187f6741283bd8f27b2e727c3511\nf215c608fe63e97d4aada2bcdc05aa43\n7f523cf6780aaeda2a691a30a5c88605\n8b016c4df0e139b660065f613e3a3cf\n624339070f8a749260c69156bdab9446\ne94befd51c02533b17b431cae0dd70ed\n86d77a9e22be4d5773fdbe4b39ff4036\n5a96894b5cde0551c8687ff9b0b4e4ac\nub5d972a1-de16-4d0a-aa40-85cd3a69aa8a\n6a2ae8bc01eef7b25e655c6c6e834498\n9eb0c534624408a6ca9b40e76e725878\n670c7df7c840f78bcb7547c95fbdff26\n877391ca125a5ad07a56985e287037f3\n4c1d6b12b48a80b0ebd10747ca93b13b\n6cf4bcb8a694242473ae2443c97a1733\n2787a03f47ffb80360cc99f89622808e\n3334213d3f378a7eacac9cf65380267d\n8e93fb99aaf17b9504ca5aa564aebd0\ne4214fa7a544e12a37b2bb75885cfc44\nf23ecf3348299cf743e99e0cae970928\nbc6ca247b19398b89c7dd675565aedce\na273d2fa5244c74f654ea6737b0d3597\ndd27edca07570d277ad11050da24bb12\n59126ed88bf7735b1817f13b030c6f32\ne6408c4be8e6502837a346dba83c013b\na113c1f24b803d37bc5a6eb75687367\n43a275d9bd008a64bb0085d0daabdaea\nf9fb36db323fb2d2df6cfab91d65bb91\nd75d41af68f4bf7f9af4053b8815b239\n47dcabdd8618e5c4b3c9a4ebefe3bae0\n35c3575340cc8234456cbf78e1e89022\nf69b87648aa2c6f52ef787234c3ff353\nc29f439d92c7ae8d6d26324fae5ec3af\n111cb08c8121b8411749672386e0b711\nffd9387a533fe59e251990397636975f\ne1f6a4f5c856ac07bf80985a99195eb8\ne352bba8524fdbd98f62bdf4e9082924\n6c72077d968519bc13e020d985215e3\n33e436e30da86f3bc5beea20858a99d5\nfbd890f1f0280b884b47ef9f38e7ab27\n38b5f764afc9d28f200ad3f421b6c3d0\n9884421ce028e9b1d2ad4916ac26e560\n58891b4cc3fcdd7622bad8a709de6e5\n28e147166eb68b2763ed57e35c972b4b\n90a7820e2391509835836c728d324152\nc44413bb705968bb71a782a4379556c7\n610b1621d1997ee1daf3c002be658861\na643edc1849558eba81634d14a6ca786\n4450887b9a8867e6d9b53420a5458c53\n51d151853d8d05db639e286420a03c3f\n5923697231e1bc86af38a3b0483df58\n18fe5de83a17c6b5876b399a99a15c0f\n432ec0e5f2a07ab8795bf1abcc63e867\n8979c1aaa6675009bf80985a99195eb8\n6b9dc32e4d278663c8687ff9b0b4e4ac\n787a4db5b3452fc357a847db7547c1f3\nbeae73bea87f36a8f797b840852566c8\n50016cf5a426bd63f9d384ecdcc090b1\n40e603e93818760fa7e431436fa7573e\n7e66472eb05cca212e77b4bab2489170\nd29bc9defb4f021cd1e6c0ed5832129d\n72beb9225a841cef24367084627d607d\n5eb38d4e556a893a3b832d9b48bc2dd3\nd36ecfec3f3c18a9a28fdea8831e592e\n3efa8030c71fab9055afe589a9f09982\n1959a7d986720364c8687ff9b0b4e4ac\nbb88bf9eb071f85bb232f4221eaa5610\n3569709b421075c730bbd4cddd04c77b\n594d1220c2c6df41b04bab4867aadedc\na9422478728741108e21d20fbef78328\nb3ced617a2923f674c9740802f05a1f4\n341a2d3df9800314fa260f4362cac599\n3fdc09d3065fa3c524e7e8a625efb2a7\nf3955fc72bd9f91e30e06a011e63236a\nb7a1ec97b8f85127493a4a2a112261d3\nb5a741e11438fb83d155b73c25b81001\n5987ae6521cfcc53877929062720130b\n5627a479e2e7373b11800282ad2afb09\n5539a4a9f2f1b45f3eec26c23f5bc80b\ne564f393acf979683c2e50348f23d3d\n3d5c94f748861bcf6038f78d0f44e587\nd9943f96dfbdf331b17743c18fb63dc\n6e3435d56d8f8465daeb838d0771f3b5\na0196df591bcb5f7e404848d22e4a58b\n6dadf2259bec12c6a51c26819f8dbb51\ne66ee381e20dec3a44f23566597ec464\na838d73a1ae66934b161f36d4e309050\ne3ada26cde5b4de01186ba196e9dda0b\n40e2ccbc74d0aae3b398a1cfd1079875\n8f6395e2451cafa6473f10e6caaeca56\n6fcdcbaa1cbcf217be8211d595eb405d\na4da5746b99209f85da16758ae613576\nd0255120e3351121c3bd24f986301745\nf413955a0f16ae18b76e29c9c43bc7aa\n8fe0e6780b3dabbbb098f5649ee97d24\neb32fa1ae8069d0998e0d1738edd4f19\n6ad86f428cd45b5b258d4ef9a9977ede\n18d391ede29e2edb990561fc34164364\n8e2b4f8e0a38d2cdfe74384b8bc69dda\n668aa5d430fd6d4e8f7d9678498f2295\n1b5fc54e45c8768490ad276cd2af3a4\ndfc2328946b2d54a29426a0f57e4d15e\n5ca5e3357e5a6d9b45c6cb69e0968783\n50d277986a78f9fc3eec26c23f5bc80b\nbe0b0a9b0a7108c6e4f106360437e8c0\n60b3d70238246b3e408442c6701ebe92\n40acea1827a81a774f7f6d1fb681883b\ned9d0bf4b699c2e86393e0168650b62f\nfa8860d6a0d45a4688dcbe86402c7c15\n954a964459d33b8a71a782a4379556c7\n71539c627eda703490ad276cd2af3a4\ncccc93857d3f5c9950504d983def56c\n5ecaad1f7575b3918ce66f12ba927a2b\nc5be8052dddf9e92283b00891f680579\n46c7367eede2d9c5ca2ed12df13a916a\n8f09ae17dedc43c6dd7640b87074419f\n1013f70851210a618f2e765c4a8ed3d\n2b7335c083d04862ca9c7c1ff5a28926\n4a45de600363af6bd5cba62773b8025b\n8a455c7acaef577824f0493013a8318f\n2d75f86921cb919b88dcbe86402c7c15\n5b27b7cc16d2b25231f8120b4da8e523\na7b9f9e341c74b8d57ddce8e42aa6e90\nd5d18ba694ad228346b9f3b6ee20ff4b\n3f5f14f6156261473b194e6e71487571\n91cf38c4b99d75374fa746d16faad4f5\n7b2d8c9f611071c7d810b14a81e12eca\n794e80fd66c833917d20e6f91e9b2f9\nd5c67068390ece634060d2cb099a78b3\n7f6bcacd96d3b89ef8331f5a5b032c12\nc69d5899d85eab9c173b9f28a2caa84d\n21da49c5fccfc3e68d861be5b561accd\n58f44c0057ae64b525633180ba767a60\n9f9c83f3014f19c79e4965f0106e00d9\n9c825b20d4e35eb595a6db6161d501d6\n6f70a7948c59b49943da6ec23cebe068\n63cce233e9e5c33cd8f27b2e727c3511\ne936176764be83d029426a0f57e4d15e\n6d270bd691a168f48fa2f6eb9fb1de7c\n99fcb202acf5d60950cf3715818ccfe8\n2be29f8ad81e2742eaf14273fa406ffc\nfb6c81cc88761a927cf3afd3f215c3ae\n2a2ef361fbe78f1e9f3cdee390cffc8e\n21ba49d0622c590c8a93d439b5823fb6\n7667d0da445e324bba600d75deaf8d3a\n9e19e66686ed019f811a574d57de824a\n7f14058e6bf50047ea1d47b7c8c17fea\n98cb91189f35e5f57c311bdc1462c34a\nbceab717048f35fea481048c76a35623\n226927edcf014278cb94e5b490ba717a\ne50f1b2d0835bb392764cfba57a5de73\n5566ad94be22e7b5d85141a9ad5b3597\n6c0b7ec41053d2e463860398b0d16872\n4960144353a6dd944c5483fab67d9a50\n6ecbaaaebb241ec34b3c42e318f3affc\n5bf38f7840d4c8fc8e9d341bc3648f0d\nc65f9af5b5a6cbfe5936c7265c890fef\n287bce5664e168fd744dcb8aae5f2395\na724a8b2ea1ef63954a8e7cfdf35a7ed\nf43eef7e3991f80346ebf4f1147c3f0f\n5b9ebc70e9a79b69c77d45d65dc3714\n4217f2ce7ecc286689c81af3a850d0ca\nfc723b936f8d8443492d9da2668ec34c\n2a87cf850dca72a4a886e56ff3d54c4\n33abfbb0993473bd71a782a4379556c7\n58b7e2dd5eb73b70dc742bd7c6fd1b27\n8d3ea5a8630be8c0f51f77a6d7299806\n6a5ee2ac74c81e9d470412e9b69c8933\ne2cef660d0d7a4629976735d0dd7540d\nc9d5ff677600b0a1a01ae992b62200ab\n7121296a75c725aee8f8c11a24c52ebb\nf10263256eeb840b732c9e6120e90cf8\n9c9f007599018973f51fa0238791f5dc\nfff29a99be0df71455a52e01ade8eb6a\n4dd8f21d05f7d9a99e48f9f4020457c3\n69aeeebc9a686862cbacd8aaf9fd8072\nce159c7d983d74136ba14bfd91a75020\n7fd10f44a20506ec1b17743c18fb63dc\n8b45782142fe42b02314deb821327685\nb46ad21b7126049842ca7cc070f21ed3\ne4602d2f261da4a314b029b11f36ab2d\nbe7ee770ad59ed0eb07bc9fe525caedf\n4ae3ee61ebfd4d7bc05575120a46cd3b\n780b18643b4cdd991df85a93cb67ce5f\n1da9942b2ab7082b2ba1fdc12ecb5c9e\ne5a8500223786886995e7ab497adca70\n60a1742f1cda02ecce5a69be7dc7d68a\n4dff2fded7130c631a8db2c23945f1fa\n434405216f00c9654b0375f3afdcad10\n671f35148ef1cb2fc0806ee26b689c99\n3e5e00868a2dfffa7a31dd5af93fdb5c\n13bc03eca6aad4b2d7bf6fb68df7f786\nce774c6584d282ce843ead12644a79bb\neb1019c438090004db6175ef18ad3f80\n3c02356c918f7365b82b2bbc752d3ebb\n751d61e1d2cbbeaebdcc459b19e43a6\n5d7b94584595d7a9118486d21a76684f\nd64a812bb87a822b8380de241b5e0725\nbdeb8ea8a146bf69e54cb890e8682c84\n4fad9d9b2c73cccccf0517eac2f2d331\n3fc616c2b603b333f3369bb203286e75\n9fae85a69532d03fda686a7d8e3d0692\nfb633f298fd5a44a9a8ef44e1d2c5b75\nbe50a399623910e1fd03f420a0b8656\n2b8380ed4b779be7af7c7ad2549a1b15\n8841a35812d5a95f98a4820926b2a786\na2fdf98f85cec8696ca407465d3c74d7\n3be2c90d1c2730fa14659d605ff53c6f\na6e3c2cecd4b6b6203c870f1209d6b9\n6f764c190cdf1629307776da88d1350f\n84d783ab90b79f8036b0f2a1430e993a\nc46ed3a68dcef72039b07b3056a2842b\n1f82011c2303fc7babb8f41baefc4b12\n66312d6c06a24772a8e75a1a0cf7490b\n8e87911087743bdb2314deb821327685\nab62680f067bf94dd6a6b5838ef6b356\n934d183065b149d784e40fd1beec9c4\n4a671498c6e96238bf8db636a3460ee5\nbbef67b2c3d3864e8adc2f75cf0a8389\nea91d70feb603421f74aae127b28c047\n3427d2276fb713e5864c004309dc898d\n96929d658ba1a01211ffd7c4e1c9d12b\n92d87019793c97c636c8b9bf2576aca2\n28673322a55c9935183d5461e0e1f71\na6507d76e88e9d68c28a12683f5d3629\n2a417b5a946ff7eb2a3f8f484e6c5c4f\n6fe690a6f597351162fd10b0938dcb5\n6a5be179ac61ab24b07017f7091028ed\ncec74855ee27972040a35da25154231f\n97febe7745f35b9183e0de42574c850a\n8114bc9ee0a7a093a094848ea4d06501\nc09cab69cc04378cff24fe90298ffa71\n8daeb5877bba8cf5936c7265c890fef\n6cf3b41688dfc4b4707cdefe012d0353\n67d86ed49b1bd1e7af802a9d0ab09410\n1b90394dae690dddb53be07817c1dd99\n933902ec014c6d487135fc51795b4038\n36ced137933c36a3ff085529822a7226\n90d35ca55b35d56dd5883ca9b41ac387\n7dc902a12843fa60e84c9243a4e577f\n8c4fea06a94d7ecffd61677456447e\n32e6139951627142a087337e55e3e2e\n6079b4aa115d08c28998b3b64a143d42\n6c1352ffa574e154ca2ed12df13a916a\ncc5e3fff3e1325dad67c0f41a0da9c74\nfa6636dfa85cd625f63376552552931f\n7bb5321d1e63d8bb36b0f2a1430e993a\nu45c7b89f-d996-4c29-aecf-4b760d1fb2b6\nef66111933d5cb32e46ed8e42660ff49\n6bcabd23a81dd790e386ecf78eadd61c\nc2430d27be01948ab8e1b99345a5afd4\ne50825b2477ba5a0dcc52ca811e565\n108b9cb292fd811cf51f77a6d7299806\n82979f3a00ca7b5b0003dd98e70da8e\na4684772b9356ba28fa2f6eb9fb1de7c\nu6028f63e-4111-4412-9098-fe5f4f0c7c83\ne425c1db44d1ec8ac73ddf48fc777dc\n4efc68a96296be2ac785f06f424b9d06\n6ddb87a44f7f68b89c0ca344f487323e\n8d7f0c67789caaa3f415ddcc43feede\n710441e3719c99e04b3c42e318f3affc\n681b792d7bc9fdf8305e886266e302e1\n2c03d0a4c83f0e89488017d48a7f7eb4\nda02c479d1284ad38727553325e63baf\na0436bbc1e00d9ce6aea2f18ee404fd5\n639e40029ef06d6f7e67c36deaaa271e\na50cf70c56091637e6fe3612af521500\n5faa205b9355a66579ae41e1ea899b06\n33319915ae51cbf33542091189dc62b5\n71372a09d0dec4f2e3837ef7356e7613\n893bc32a68f387b0b675b353faa5a26\ndbcea1998258b0fa6f500315ae356942\n57cc406d478167a6a6c03a53cf0a14c9\n4cc17e003a26a3d5eea9006d9d8918a7\n4365a4d98c9b979019149a7f35de06bd\n8bb9a20b7090c90bf2356faf7e20b90a\nd8e5d15cca97d3fcbda72093f9b5aa73\n32f007e84efcb9d12cba66dc6aeabcd4\n74e14880b5aab8e3490ad276cd2af3a4\n6e1e605da1c3d680f9b9977a2406713a\nf1fc7d26395549ba5ad8ce80f1a173ac\n215e557db4c4bb5d837b757304479228\ne6719610fd2c44c99295da7959c963a1\n9ee5eb90d1176e2547dcda54be6a23ae\nb7403875e1d7adea331fc18393f04d2a\nbf179410ad7f9f37af6595f7d3f20cf6\n6189b30ed01f7bfa5692a9640d6947fc\n682bbcd00c5287a39d365481aaba80e\n946f16a9bcc3c2be75aa7f24a9b6003a\n98f923c006fdd918e6d206b2ed87676\n2588ff9ade9f3c1dff2c92c2a4f65876\ne74035d3001deb876fb1d532bc5b4021\n4ce5a0d60fc942f2e595afbdc333be49\nfead8d07aa53de5871c3cf047830ec1f\n57583ba714a883ce71c3cf047830ec1f\n92db07d09bb110386bd0aad3d992cb54\nba074c9ff5e36f60e8b2b8dc0c816caf\n39fee081ec01fbae4b3c42e318f3affc\n6e965fc2145df32f4d678187b8261d95\ne905abdafadb48d4155b2bc3322563d5\ndb0925930500d67d7094f114e4783e96\n562e6354049ecbc19f8f9f2bcc40c84c\n4ad06cdc2f8929f44733824eae5cd9ae\n67bee683e394395d84ea893d074ffaa1\n9324b077e28980f3e3dec121245a30\nd298e7f6e0e335a0e4197c3ebc03326f\ne6355bbd9aad146a149098a193698017\n72cd991e81a34504d838ae16242881dc\n6b00fdf6062389ad738dd0d3509c7e47\nfb056f0260d4855d36c8b9bf2576aca2\n33fcb31af4c4d039fac1db559484b15b\na6bdde9da1322bd5116162acefe23592\nbf3c02f71de0260a8dfc31d0ab372d9c\n50afe00f341993ae7d63360731b4227a\nb6b426ede67febd4a413908c0e169330\nf3e0042ea11660d0ff2c92c2a4f65876\ne039a013f1877fbf42bd71dd667c95ad\n53316b8bdd729c87a516ad65be981ae\n94461b3e6212f63265b1b65ffcd737a9\n89f5cda510eea57a9917ad57402f53f1\nf3c0ab68f3dab6071b17743c18fb63dc\n3c17fe56ae05d51620768660cf080d12\nceec3aaa6ee72dee613f0dbd986ed6f8\n6bd131b9cc3e8b97b2ce8575669c9dbb\n31e59dcaa15f2599a52abcb0c06a3598\nbafb9c9602d00b3e50b42dfb503f5a87\ne9ccf4cc84c085f8c785f06f424b9d06\n3e427b76d051cb9ccdea755aedb6e3f3\nacfd2b0f06c128d72157d75d50a75b71\neda92b7bd76d8bb0b083574fdbdf0a98\n631671b636ab97d4da41a38d2e317241\na554d5e0eee3109762411d0498399c28\ne3d3b3e060ef84c93ed60220ff139f8a\na14c7700cfc99b03ca6910e4922d61aa\nc2e50f21663db36af8f5708c6c7585cb\n1007e20d5e811b308351982a6e40cf41\n53f01d977de993442ea98d69e91ba870\n4603969ca86e226affb3dd5191e9a4\n712415ce3f126dd921bdbc0445d9f748\neb7c250519101dc22f21cf17406f1f25\nf4427ee23d4d51fabbf98dcec5f11066\n6be6173e7eea5888a616caf97d73fa02\n668857eb0c18b0785dc3653f8341633a\n88382b877be91b2a572f8e1c1caad99e\n7aaf5573892cfe086e6e0f71258e961c\n294406eb0453d6a74aad3d2faf99eb1e\n79c9fdc6bba82709c8687ff9b0b4e4ac\ne388792a151735e57597e1f94410131a\n52c4af69336f4d6de9deec47d8412ee\n1e7bc7fd20c61944f51f77a6d7299806\na14880ecec87a82bf9b9977a2406713a\nce3b2722cdecb0f0b3272b4a93a044ba\n2a0f4fe08cec3d25680876614ed35a7f\na94eb852d2137621b38821f893bc10f9\n6a73ce89c4a941ac0f947750540fb22\n40567b0166658623b80ea7d1a9683df8\n81276e5b6c8871634af957103f4767ac\n52cc5e280c23ea9d490ad276cd2af3a4\n375dd87b163dc8a3a3c9394112c76917\n3de3774ea9a05f51585ed17f54616d23\n4b35795a0ba482cb4f3443b22038d340\n923bce0b230f5a1a2c919c0510a0815f\n323ab1a1a81ef0f51f77a6d7299806\ne5cb5334f18c13c15a7f6c1314f7ac2\n8dee8193a06525f51de495b75c95e5ad\n569500b7add934625090f949bc5dabd7\ncb867c64ea2ecb408043364ed41c1a79\n4d6107c32c75ad6b9f4b4145f6688869\nd3bf9df2360f0a56731dc97277e95217\n9d0ec3530b39e89640f4518b250404ee\n83649708d0f14dfb8367ecca203c14ae\n726996e3177354cf2095dce957a7a5d\n3a123ae34379ea6871a70be9f12ce8b0\n73fee38797aeced4de03ab2a27ba7531\ne5a65fb8c660ef96dbbc9440457e303e\nce387113cca9c0754d33a7fd9c37a7d2\n8cb521c0e96b349d65ba78ad9601cf1b\n89018ce4961c76cd5a8ae8f7c307d01c\nb192cda468f9390aa3f22b4b00de6dfb\n4a50449de8e26e82eacb498394990f0d\n55185010b0b6e42eb98f36033d4304b1\n33587d34aab902057add36d8e31831ec\nb559688f7af76ff5466127bf535bd761\n9d20e4d4637e66175836897f0d296c15\n7f820a5aef9899d5e2953fd13c76ba9\n3374905da20ad76f3c9c1464e55d580\n8d18fba375d0545edbbc9440457e303e\na8c0ceb67971d0961b17743c18fb63dc\n1769c3cf3391d5c1a1d7c136d0e341\nd62051da1ac1ef21faf575cbae5008b8\n75135e879341721c1cf9f632ab9ad62b\n7ad6cfc9aa35aa058573c953964a33bf\na4b690e66e3937c88b42931b6e108d6c\nc61e3ca5004f3e8667816b64852d28f\n88aea5f475654e491d77ac5988aa9265\n9f5add46af4a41a1305e886266e302e1\ndaabf4a2afac24c97eaf5bcc4a8beb17\n39d1a6007a4a29fe492d9da2668ec34c\n5e13ddf9fa4ecf53c62f0847fa177f8c\n7aacb2d4940e1af772ee08e78374a212\n6e1fbf46f1d0fb73d8cc7a9b2448f97\ne8c3582f0413179b47edf0d5b6459616\n2c351621045e25351385913bc50a0210\n3f0beaab92a08fd74138477d68528833\nbee929929700e99fad8a0ee9b106700e\nd460611ebc267961d838ae16242881dc\n4387affd3bc4509a36b41ce3eef1f5be\ne7316ceb5b944b6fd0a96520c31993ad\nca2294ffc664a55afab1bffbdecd7709\n69261d58214053d1e6c5cd45aa112726\nc8d6e4e789a0c6a7eaeab1f0c9120b7\nced9c5eee916cce089c398a8a379054a\n2ab159f83754a93ea6c03a53cf0a14c9\neacc4fa00a65e56e374f33ec97ba7ca2\n38141adb391a039ff3c330baa382ded9\n4552ab193b8566acea343d0d02e4d3bf\n4a89aad97f4c503068d1b9a1d97e2846\ne6b822bea1d5a5a9f7b783634bf3f92f\n20e1bdd54d4082097962800be79c6e52\n9bd5937be6aafe704c29eddba1f2e390\n6601d179e754149e2f710dc8afceb40e\nf9da1bdadc982c7f78ee935ba846606a\n406561a447d3f7787f4096327f1fb3a7\n842130b6eaaef7a4932471681ea5bcf2\n30b0196b3b5431da2f95e2a1e9997b85\ne3fba8a576d4d875e1d0950dd1aa903d\ne27cb29cc3df4d0330989b15eb158e03\n3bcbf7c8c8eef525c5b0fe224c67bd68\na7f911657d2ac259177faed93fef7451\nc5d58dd0119f0e49503aeac2cbb6e06a\n5857dfefaa1b6d071d9fd76961a98198\nfc66e46fe850a243f51f77a6d7299806\n4148f94098b428095dc3653f8341633a\ndddbd223b3bbfa8efd93c2ac42357c74\n44b0b359d2eab610c2a3b7c9bad24907\n2d74dcc00e449a5462a510b8f97c658e\nfa5dab91cbaecea8ce9a0998abec10aa\n632a722f9edbaf607b11ae648ea92233\nb960544cfd0ff09f26b2c6e6d8c1e1ab\n4c0d8f04f27f96284417bea8868af4d1\n2a8b0d30928d3161f7b783634bf3f92f\n42635d55c5905a682672e8af102e0b3c\n2cbbe7f1f1f75e34d28b52ade6c7e48\n26e85b84b3b6eeea21711c78ff413696\nc78a6f04268dd802cf004563556ddb36\n65b8c99a5ab7eb0492ea5a71c9e33093\na0e9606288d3ac22b61d9ed7bbbb5b3f\n956dec7d9cb7d078a9fe51c710ac111b\na469bcecc0a03db7d40dff3e049589e9\n5a5b11daa1b5344fb516c05d046e8e45\ne59cc0fed1520985b21bc3cf138f79e\ne04ceec8711a6027a6e27bc066049db5\nfaeb171add09f98cc8687ff9b0b4e4ac\n9da67fff6ae787b2eb0f0bdaf192ff28\na8bb7a8d6f2e1c5dbbe43d356df0e955\n3c1dc5c4b0c8db31d20c5daab0fdbf5e\n3297a632aee6ac55dbbc9440457e303e\nc5203dae464c264f4e41620d80d9e89c\ne6b80e51ceb5c2771a782a4379556c7\n38c67c695eb4cd819e179bac86183112\na004ad56474501f67eaeab1f0c9120b7\n91d84fd5e5ad5c09e63beedfeef0900b\n7786f1205337093d6051d49e4b21b83c\n40a9dd43155979e7c40cffb9454b27e\n3318f55fdfb9a132f83ac1589b0e94a6\n60512d74c623484bf27383fc5a5a711c\nc0f18b32a4124eccad9a0199a27b3d8\n2bb65d6612027f18591999955e20a6d0\nec7076f7f37a6e124e234a6f5a66d6d3\na5abf524f9b08432f51f77a6d7299806\n8e76d0002b592ef91663a74ccd2338\nec91b1b29b6bccd37eaeab1f0c9120b7\n6e50f19c52a760e3cc1159c3b443c932\n6cb3d99b20e7fbb5b04cb542e2c50eb4\ned6bc67f247a5aa3e43df8c9a38bf11b\nbc743137d2070eb1f51f77a6d7299806\n74c97be038139e9792d9ebeee84a8909\nca84b42ab1cfc37be25dfc1bbeae5325\n88ba4696c25632507b6a13c9370327f2\neb63908dde4b579e25d45769a218937\n96bccddaf0034be04e5cf15b26e670ad\nbc92651fd7cd9ca8cf68feb7ddf815ce\ndd0eecbd7ad89b2563e7eea06f1f07c8\n58b3e0d46af2019bdd7092ed47061a36\n88058de808184f3937b2bb75885cfc44\nbea846f692c8bdc8ce6fb1d4c6089968\n3ec25d235438258d815b20ced9d3b22a\nd16b62da42fa61f0cbce248a4e686c70\nc70c1a6a0e795669f51f77a6d7299806\n2ba1779986eb9546f51f77a6d7299806\n27559a7e2b0b839d75bd952b0c911144\nc2a7da6a1e1f896a301e9490bfb35bc0\na216d6a04494ef6a32485dc6e0b2347\n8bb3a13d45c5337d20e3ea5765d7edb\n4a2b8f9d13afb39f8f1abd08ebea3018\n4ed8015bdbd8c03d2f95e2a1e9997b85\nb58909919d9feea6976cd10355a74f40\n7fbde9d7cd67587712ad7c55c944504a\n746ec5c7c0ab8924fc1f58a995f231d1\n61950eabab269b5c530a9fedbeceb83\nc0720c8d54745ea8c8687ff9b0b4e4ac\nc5637356cfc865b33ad3591a780fa12b\n2bf69f0fa5be4c3f6ecea8cff53afe1a\ncc1dac5070d0bb7d5c43d2b61614d0d0\n4fae9528f1403fd0f9702e673573a443\nbf39672eec1e343284c6c80813d54fe5\n802f70c906274da08616812464c86290\nb16ae1856433e726786e4057cea53718\n37078d0597a05284b05550de345b6d0a\nf891816329ecee93774476b2e205b9b7\n33cd8045bfb42e53dca072a2e97c1839\n3795f02c9818a7213b407f4857c15d98\n98547d9147a58195f51f77a6d7299806\nffa6c1a509986a5676708f8dec712a28\n9af15c2a94ef79844aebea9384ce74e0\nba33781b222ca9346e23a4fabd87b2c\ne8dc06c3d01d6592f4b6538438a0b930\n659fdef8de4769079c251b4a7838829\n7f9733a6370440dcc8687ff9b0b4e4ac\n5d5e887b9479de0ea9bdc22a1e02e82\n95d83e52954e1ff2d19175e7d19b7cb\n606cb23f9a7f23ef51f77a6d7299806\n10dc303144fe5d668d1b9a1d97e2846\n5e259c1b8640f5b7dfe5fb64510022bb\n473afe27e45b37101c8d18742f91c015\n8763bc46c26ab19957b7bfa2b0e9620b\n9527b62eaae8f007259ae7b2899be714\n3309d6cdd3f30ece3eec26c23f5bc80b\n22bee1d9c6357b295493ccf8f26ab2c\nb83bebb013e4ddcabd1aeba6ff85928a\nff529b9ad2d5c6abf7e98086e1ca9511\nfd9b63c23342e57045b799df37b9f05\nbfe54fe90c7d99637fffc92abe94e907\nb6e662b81c62dc9b688f5a44034a346\n9e54053a1b16299153c5215ed09cc4b0\n90587a80c1e58a7ecd447b0bcf9cfb5\nd810a38ebae55007eaeab1f0c9120b7\nfcd25e25dfffff7af51f77a6d7299806\n797b37d3462592b9c8687ff9b0b4e4ac\n1b92525f3945f486fe24b6f1cb4a9319\n1cc6f2ed3d684fa245f213b8994b4a04\n947dfd74fc8b2e60643b321651a8f917\n69735def3b0f009eb098f5649ee97d24\n4e3cc3f6d2c25b904addf6a5f8726274\ncd5007a237ffde592b5bf1f191733d75\nca804e0f760537cac4545d2091e9ba5d\n96fb86091881d54724894811dd3e6d32\n2f42261a7f658407d12a1bc232f6622c\nc8ccac20f5cc12528ebcc1a99d4058f2\n79b65e898b52b197b11ae648ea92233\neae58f128191381de9efec56e07965d4\nb431161712ea348cdbbc9440457e303e\n2f7a68f4a75dabd41c8c7b57a94dbb2e\n55d147c5125f5043e1ddfae8bbce5fe6\n9fd0c95e0112f6f8dcbca12e02e87571\nfcfb7012968416679c0b027ae5b223d6\n3358536e8e7c416ea9ef8e11754eeede\n2ede0b0117e75a4315d50c1c4b796b2b\n4b1e09314ecc02d53c8d0fdfb1cc2535\n6e21df8cb8db3819899718fd4553951\nf5ef49d354efe6741cda53280488fc3f\n731d9114eecdeff93454e751432992d2\n9f6a7ac15495575f6672e04a03e08d1\n640f61579181aef13ad3591a780fa12b\n4cc4cb9b533e8b84b04cb542e2c50eb4\n6ff87a46571c52c4f4b6538438a0b930\n70e3e98efc6ec0dc611a1a85a9d58686\neb23621d7ac1094398e0d1738edd4f19\n30dc9d9cfbc01e19950c1f85d919ebc2\n8e945aa01bbacf7c3fbe480a485feffd\n4a367285ab5c22d07548800e3d70d83d\na7aafe44f64dd04dfc6afbc561d74a4e\n49110d0e41bb90b8b8e1b99345a5afd4\n65840c85162994d990de7d30a74bbb6b\nebd73aa8ec2fea5c36c26b54df360d91\ne0c76c1c82f12df4c1e1aceb66eee9be\n23d76c249645228d1e23e0195c502f30\n6b796faf03a2806f397aec0de5712401\n59f4a5d8390c3c3d5fce6078044eb87\nca53f7ce3b6951ad3991f56363dff980\nc658d1006595797e301c83e03ee59295\n71dfc2ea8bd6cfaca8e4e5c9426fb9cb\n1f65075818c1d832c05575120a46cd3b\n34fc767b72047d9ae97426e55fb77981\n5a4c550b1b41114c3d2617f9171b5ccb\nc06a8f95fc273106b0f4a0d43d1e4c23\n50e8ca681532bf195fa5d73d8d08a44f\n3e53710a62660c60c39d538df4c93695\nbfa5964a53730c783136fad73a1be67b\n39ac9a459a28e252763d2f5638da324e\ncffe40b41d0162c46b2befe83a0efe39\n2ff12e3a324071c0525a3d382a240768\n2ef1e7da7f2a124215d65204573ec4\n5c4e1a58eeb3171dad8af6714b643432\n19861e56a952fe97b8230112437913fd\n6214c8ab2dbae2517eaeab1f0c9120b7\n5c027016e14cac15ffff2fb60b0d6e6\n4b366b7995cd8d7fce4f274577283b16\nd7f35cad0f4ab17788dcbe86402c7c15\na8110dab06c9c72a2c528d33bca1ac2\n7710ecf956701938b40f0ac0fb9a650d\n21e0ce3ed3e9452c93271d2223fe04be\n5932d26671d104d76370a012706ac174\nd2771921272ad1536a69760cb58e50e8\ndfca4eae14e0bb541f6399f392c887ea\n321f8b85785f082685e443e0ea51d93\n175e2a8cd6e9866ab37303b6dde16342\n799de8b0527ea329c725388bb41d64e3\nc993ac723dbaf479a4929a32e32d23f3\n67fe832a22b91e6c54ddc93d2b7d3d65\n4138f85b00b53185dc3653f8341633a\nb518d19f55a1e15f5d714c9d7df1c4ed\nf1933161d8b49d8dfb266533561ee98a\na8641cd287bcaa2011fd5138fde4c9dd\n6a7050042fbc77d5635418e95eea8a17\n243ab0d808fae5b76f1d1c49624bcfed\n30d3b99aabb3ce1c4adcf948bcaafbd8\na59a49a0f9e8f4cda249f8489bc060dd\na18156a0e60e50391f4c17ff3c45b28e\naf96bf24c341e56436b0f2a1430e993a\nf0337929bdf10321d22730b0728b2fc9\n3dc79f23cd284bd8ece416489129c313\n76f2ead0035fdb2ff94d7e6d8577c8ff\n4966ef665c6ed17d4240438e2a9161a\ne967ee5f0790d685286e59f068d9cd0e\ne65ca690574bfca53ccbceb68fb352fd\n5f33a76ff2e4d25ea7c7a7d30ca93d68\n4facf9c7f5555b28c0f947750540fb22\n23c4d774910c9ce03c832f0140db42bc\n8a2a0cad888b871eaa84c578b771896d\n5ef0c3e89d51eda2d62069fe2138d0b8\n516c4adba7205cb43e9bdff70754d92c\n78f5b44157269f99fd60059ad8523f1a\n253ca5aa292b344b7e673473caa41d7f\n57d4b5a07e67c24af77e1de7c7a7b6e7\nea1566ac9fe1670d3b622c8598928cdb\n7715c9c229d80afaf487e71bd57b6e0c\n2a8bb463e116e51de58b00a9dd2403d\nd657236c764dabdf5de9b4b5ce85d50a\n45f32105a1d05455bc996a5f03fd7bf5\n983414e34ee6a7966aea2f18ee404fd5\n37a05e83e529a1e044f23566597ec464\n1016f4debe988507589aae130c1f06fb\n86c28989c2edf29a2bb396d08a9b621a\nb738a4aa965784abd86234e915108e6a\n1b7ba5484399d36bc5e50b867ca2d0b9\n8538245c2d93c60864c85287e21825c4\nba707bbbc56d1bc319620b61f6587b3e\n81c291ab8abc1d0172b24bdfca058442\nd609864ada7d0170278d386bfa54545\nc605d4742f68a00ece45069973024eb1\n43db37a72cbe0f5d4ef0f56ac2c64e7f\nb4bbc9d05c1872239abed18a788c862a\ne3b625f979f3a32fb591e8fb800990fa\n708cd72e15dfaab8a687729fda50af77\n48bb4afc8cf90b4664215ab2598fd5cd\n4adde89dd6db1c4845e13b6ba9ac0cd3\nce935c8e977b8c58aa53a70b14c57bcb\nc94f7f5ec96e10994231039830c7e1d1\n9012e4fff3cb71b57773c2e28f019f8a\nf39d429ab98d5323a1a6556bd50a3110\n22ff2267856b5d369158e0f216b27548\n40e9fdb477fc0c10f07ea52432becd0a\n7a7b08cf81cf358a8616812464c86290\nd3a958aa302f198b938da3ea2c9e0e4f\n749c3d0d59bf7aface4f274577283b16\n87a3ee7e68f360351db0d76a41d718a1\n9a6cf471cd7e26566acb4ace974ce36c\n26bee1a8ea71545c3a288f3e01ebe3\n3d7ebe5de86294b3f6bcd046624c43c9\nd375dfbaf1a2a3316b2befe83a0efe39\n2195099b0295f692afca3357bb07ab96\ne0badcef3c110ec6c4963b39d8846214\n825bd436471f47457ef29b55d8edde64\n86fc0fd9ed51dc11664b3b9b23ddfcbc\n6af354d0e86b1d5ed77c4541cb2e97a4\ncd9812c163ddfb3e83bcab979449e28e\ne3394ec3b63fdc255d59dae8d8b300a8\nc9817f6e253b7a93a5ac563ee2a0cd75\nbace9433ae54fcb3290d57214c8512a4\n6e9a3650b8ff39a02dae74041d029566\ndfdc94c658a98c79627fec6651ed13bb\n4608b290c2383d7c9730cb37c9a5f63b\na62bf8818c8aec7062a510b8f97c658e\nde9e40c346ad2779f8c3d2002c77ddb\na976138678aa74d0d9ed5cacfd88cef9\nb2a658572331c578340a1d09e918e861\n669a23c329080506d295b24579cf55b8\n397a5fd0a95a17e4dd2be59fe725394a\nb9e9eb2d09981218d3c5964623f1547a\nd3213947dec793de213c3458a0fe5598\n1803116582841b39a8ecfcf20e8cc0a\nd8d5829083c66bd4f4b6538438a0b930\n43c99f65e19e5c657746f1e767f87dbb\n81889ad00179daf8adb91c074e672e22\n981bbe2950bc9b188f1d1d7c3673dc3d\neb9851403aca75937d395837145ded71\n7dc91406f30074777b707c797539b200\n3f55885c27d84e5951ae1a6e89264401\n4042faba97a901aa08cd647a48e605d\n37b6df64a97a5c29369151623ac3890b\n4566839a362c5c223ec13b32c4d64f06\nbf8004c0d88210a291efd008fb89dc2f\n83839b89dd91996c7d910d51d878f708\n3115864130f4e8188f56c17c21b5509b\ncfe139c0e8b8cfdae342bce0d924820\n98ec1c46805977c33b48a711df82173e\n5eb67ecc35e39eb59753496ba23f2183\nc927b1352027fd6916d8d4903814cf37\nd02fc4ae6bc4278b68c4c9cb55925fb2\n2b90701386f1813052db1dda4adf0a0c\nbd6bc40b3327e5109501f2fa226917d0\n94ceeee26248a275e8e2378aa23e4253\n3799a4d787d31c0bc580fdeb5460f6d6\ncf09618aedde38febda72093f9b5aa73\n39d357d7ba9645d4647d4fd8d921152a\n4f0fc7761771d073fe2cac60a76c70a\ne78f25a1f66c19a38a63c123f2a561a6\nb541d3afd111d86f265d8abf3d2f9c3\n7e4025dcdad5415386c701087a194026\n87b576eaf04f1b62305e886266e302e1\n9b6d1c0f3a20783af51f77a6d7299806\n4133e9d231ca52c6a16baf954c1d99bc\nfedfc00265711f4193c1e619801da0a6\n8c4ffe44076e9d4a15f62f0f1afbe530\n2b2510922e763c2443b0708c694aaf46\nd30e58a2361785683fb0851e9bc87551\nd4c3dd37d27afa8e7c5910dd17778965\ncfd2b4a2c8398220731d11154716a6b8\n8be5b3b2c8c8f067a341228b21d337a9\n774b94fd956a6601194565c2f3f896dc\n89e6839589a9b450a3f6a82f1fd27077\n2972fd770304663cb3d180f4523082e1\n38f8b44fc8dac88ce3c886e48eaa6e2d\necfc0cf5081976323002761e7a3ba3bd\n59cc459b0e75c2ec1142c13b71507bca\n1cad298ed14e60f866e6ad37fee011e\n5ab67b30e17a2ed1c862eec8232fff1e\n600f6f126d0b6c046dbda90cc7f3517e\nce7cff543f8cd89f8d1dabf86742ec3c\nd13c7cdbaa6941c2f0f0b1b5588b0b7e\n387dc2c22bdf6d2a6df42853f67b5836\n280d49c0833e2dcecbdbd70308cc5247\n570527a5388977c878ba201e6a414b21\n5a2c6a6f832b14ed31251f4428012eaf\nd040157682f60a7ddf6cfab91d65bb91\n6398eb498fa1c291ca22b08889f6ea0c\n914f301fd07c20c840ef1c8b63a628f9\n250ffcc789426a255f46d55537192b6\naae036d8ebdc472535836c728d324152\n944a665e765a13ee6d7db84fa3ca3146\n3ff53879d12a2259cf004563556ddb36\n6ec9b7c65db28eb32342d056300eceae\nd350f40e5f04360565ba78ad9601cf1b\nc18cbe2537859ab6877a4d9f8fd3e241\n59c89dc89cf0d34e597976c675750537\nb0c70ce8427da34d98e0d1738edd4f19\nf619416ed17ca24a5dc688388b7d266\n776cdc2ed288076882eddefc99ebacfd\n7595d089aefd8ed5af7c7ad2549a1b15\nb16dceadabff3976dec8d69f9356ec51\n2e9e0711c4f8e6c6f51f77a6d7299806\n881e7a45e9f149d8283b00891f680579\n23af2a09ca2509f817dc12307fee9432\n934f911815518a12862ec27465061d4\nd1852e622204dbb0f4b6538438a0b930\na3c4bd89e7570dcc6204511a506beabf\n5edb33755a80aded3da27ece6ae88fff\n586984ccc3ea15676c441a62670bab86\na3e3eee0669bec82c9f016d57db96408\n8ade0afeb517ce00aab45a6fe87e3c10\n62aac1b94f2b98cb9f9a4edc4751ad63\n29656461b26f620ff3c9c1464e55d580\n51d67f7174881679f256a8c3e3396495\n533af4a6fa955f2e78cc773ba5d9e52\n5952c6c49ace76c5beea20858a99d5\n13fdf00cde077f562f6f52615fb75fca\n23951f57f090116141bac0aa0782f561\n840b73e5066afa12941584a3d730ae7c\n22575f5719f3eb3d23bd3a8c035c98ff\n98ef942e35e90be3de8d5f2cba401802\n236f75a784ed58d62b3e9b6eb52d35df\n8c9b2023ecdeb7b049d998127ea6baf9\nbd867ce1ff2dd281a0f7d9635ddf7a01\nd521a48317d0b14d7ac55d461d1984\n9a8e84b82ca17e3f2f21cf17406f1f25\n6d30eabb3b56d8f897842bde7f51d0cb\na7bc0f5b5d73df73f51f77a6d7299806\n5b43111740009e719159f4cd32e8e02d\n70230673214644cc7954eb05bbab463f\n76ee694df725b5b4664b3b9b23ddfcbc\n219c0f0f7ee5c3737f9dcf5672c2dd0f\nbf0ba9e2ebcfb431e6fe3612af521500\n288143f68d5b9f7462acff507939719\n923447d348ddd1ff3002761e7a3ba3bd\na147244346d84fe398e0d1738edd4f19\nc97f8f3d828173607301b41e73e277b0\n6ea2aabe267b519537b2bb75885cfc44\n75a2cfe5b82e03d2fb0eb7e753c06942\n268f73b8f57676a71732dfc96352c472\nba5911cd07d1eebb31475fd256bf1b7a\nb58f4a6b71759e59de1e664b0a22c4a8\ne3e76d624f1f855bcc8a9c365968620\n34b1b2ee54ea314486a1cb4b695edbd9\ncb87604cf146b4eee897810eac8c21be\n9ddec02fc7a03c19a8699b6183baa203\nb69401b412d9300454d7082b34825ef0\n719f6578bd1450cfe5b7031248b81d78\n4c1777173111f2e380a88936375f2ef4\n8ac2d831ebeab4896b7c7aa09852a4e0\n4e8d8792a3a6390b36b0f2a1430e993a\n5ca11d3f35d870e1b724bccd568c5fc1\n5c247c042e5fa6077b712dacb1db0737\n91b8fe4616208bd4cf752e9bed38184f\n26c9e85dfa18af9fcf004563556ddb36\n8f521c85697cfb73f51f77a6d7299806\nd323e6d19dc58526f2c0effc06a15c11\nbf9ea87a9765eed7d53b73fe621a84b4\n3896caf2057eed81589929e81650825e\n1e4fb9149de6be81f51f77a6d7299806\nfdd8b499294575175f1548797747d63\nd97a4a6f84f40854f51fa0238791f5dc\n7905bbf9abc0c264f3443b22038d340\n51e27bd3ee95338588d458757d655e0a\nfaa6255bb4de99d90606ee5fb3c339a\n2a28a1658e9b557062c658925896f75e\na0d662f047378406a39cf424b6103cce\nf913501826c588e89753496ba23f2183\n2a8d87523e23a01d5f40874aec1ee3a6\n10e523060bb5b51f9ee9f382b1dfb770\n6f8ce08e77bc27cedb4331c656714a1b\nf5e5ad69111b96646d6e68ce9f2601c6\n56184b3a4ea198af7e14b034d75254c9\ne8089df5cd0f9a573a3e9361d5a49edf\n6d5d42d1272467953b63c9ead28992f1\n522960d8c4a7b7f2e8f8c11a24c52ebb\nf35abb8246614d7ff38854b09cdc7cc5\nbafa7e4e50e0b2bec8687ff9b0b4e4ac\n9f3ff62527bf46f237b2bb75885cfc44\n6a254cc3d81881c91a3b39b07e4b3d0f\nbacdce8bc1974ff82c528d33bca1ac2\n72fe5266a93c1998dbbc9440457e303e\nf2440b15f3773299490ad276cd2af3a4\n711d131beebd279cf0102d4d10f82457\n51704a889ebcadb72cee4bf5d0f11ffe\n4f061233795740bb411c679938d00104\n329ec98f10af7214ac6962daa1b6ab91\n4178e43e2756f1d0af7a8f97983e7906\n564b9543fe715f9e1a4047c09ddc83bc\n8b886cf32f340c89a9e00c019d029152\n43bc4a978115d3f82ff27b24dc18a6e8\n8b6f776954e65e7ab05550de345b6d0a\n93ee27f70b593cee7b11ae648ea92233\neac0a44a4b4bf460f37e11038ce8fb27\n30d2d3c887f9592551ae1a6e89264401\nb78fb2778adeba267c26dd76207404f5\n1cd152cfd71cd314e2798a633e84d70b\n6b9149d69d3140da258ce5fdea186c4d\n48d44532ffcdd4a2fc30bf6907b3dbb9\ncb1986dd3e968310664b3b9b23ddfcbc\n3193949a635d8682648909df12856289\nb967ac98b1cbd8fe36a7a71199dc2cb3\n38f87e02e850d3bd1d5ccc40b510e4bd\nc9cc8df04240b27890907a4c1a185a7\nba1adc474cfa2f429ab926a7e944e795\n671d51da473849c7369a4f66bf103682\nc3bc47657b691c51e6fe3612af521500\n4efde5d7dfad17354f13c1c9631f2b03\nfc818d6fe03f098fd6f4cef762589739\n4dde5285971f0b73ba4ec8b7deb104ae\nc435de7be7f5bcba65ba78ad9601cf1b\n65122866840aaccce3d8061f5c8a6fca\nf6cb298705842600bd259faf16bdac27\naa5879b3f20ea90c36b0f2a1430e993a\neadb3d38d02343ba4d2a756b9ed2c425\nfc4d15c15c56aa7baab4888e25356418\na1e16e59abc3fa56bf0788e630e3deb\nd7dfcd99197d6ae7b6dbfb7eb145012e\n56e194146b9e584b3321831d2245cf06\n64ed01e4a892fa8e498bd5a555c21b1c\n8cebf6dde257cfc591a2a5174703986b\n3ea3cfa145794baec2454d017a7fc2b1\nbe373cf14b9f9b77bb01e8d0bddd5702\nd283b1073ceae03f35836c728d324152\n4d6f35e7eebab44e2c8a86aeeb3b996e\ned108ed496777cf6490ad276cd2af3a4\n45214e3010f8c3ddafa9c337f30be0ab\n6ae8076b0f9c74199c2009e4fd70d135\n573b3fed3942a148c681404257d94ad9\n8bdb589e5e0e7f57b04cb542e2c50eb4\n8ef2169d274aa2e9b16dca03855925bc\n2191f89e65241e7be04d00482f14a156\n9d36bf414dde2f1a93a28cbb4bfc693b\n668c488e900c2ede62a9eaa32bfe99c4\ne63546037077f0847dee16617fd6925f\n2e5e60f57621c1e7480c54eaada840a1\n26421cc00c639ee55a5324f7626af787\ne46d1c2bef1875e2ed30b335ddc8b66b\nefafddc93951b8fdc975d461b3f97726\n5f34521c634a4045c68e0b8b9ee8a0c6\ndbf235de67b39c2d25e2408bd7177733\nf3249612d067e120384f43a3132c17b6\nc3da3ae20c1f92650640e24a5497a2b\n8ea007bffdc9a27831aee04639d1b4e0\n41ab50680dfef43aba5342d638d0c267\n37754da896362bcf28c0cecb7de2397a\nd50b0c6c006936f8de03ab2a27ba7531\na13a7a1c82bafa56188f1f634a0f116e\nd24f623af8e7da479dbf298bdf3162be\n209a904959643d0eba7afe602821e0d0\n401e07ff01b1bfe64d85e9aeb23ad69a\n35d60ae4cb2e81979d9fad88e2f4c8ff\n6721f13f40f706c31b17743c18fb63dc\nc5e3ef17d1fc834b3c84e7f4f4c3d556\n1031fc859dc3177a2f84cb7932f866fd\n3c4ed9c8f76c7a5ef51f77a6d7299806\n73428fc75131e0a9d8dd12a67280079f\ncdfe4ea9d00ce861f77e1de7c7a7b6e7\nc5958d1f079b0be47b8e25a5db8c2573\n575eb48e4bf8f7b4cccc2bf504407f19\n534b0e6e2c53a8e1a7cdfd3874ed3723\nd1d9da0da16dbb1a765101d95c92a0e5\n1d37a7fbe0810f963e83b2d32ed5f665\n736630a749935489f78c99506bdaf97d\n2cf960825840947aa903b9ef0ae7fb14\nbfe3afaa774eab6e29e17f7efc5a2421\nd2a5b42cf29b753f71a782a4379556c7\ncc70b9c8d4faf79e5a468146abbb198\n681203ebfa280f5696d5b0735c6b5f03\nb773f81e938f95ed65ba78ad9601cf1b\n45c998547946bc4d6a88c250a18c2861\n11ff2e9f9b0993b7f51f77a6d7299806\n985b7e5b5fe997f0670cf6c75c1c5868\n9cd0529b7ce926017dbe6b236c44c533\n9ab4d3826bd2f07b51bb569b4bf0aada\n78fbcca91324c141ad2e2a7cbbc076b8\nefe76021aa616a41f51fa0238791f5dc\nc9dd1e508be23628d0176f9a144100cd\n1fccc2ac4bfd3da535836c728d324152\nf428a799c3185ee0c8687ff9b0b4e4ac\n7a783968f5b1f88ff50f16ba773dd73d\n2853ec74532f23f3670cf6c75c1c5868\nbf557411c41d07bbb38821f893bc10f9\n47dde30e987efc6c8687ff9b0b4e4ac\nd18f361e22f7626b707cdefe012d0353\nc1d4fcbf5bb6ad11c5beea20858a99d5\n497833f2073ba6ff70d45c28bef72613\nb29d302a87099d924d8777315ca26f7d\n59009d87f73ce9385dc3653f8341633a\n450b4a6b6afa6280d5a910bf1c23bf18\na990ac870ac807c4d838ae16242881dc\n86ec9c796a6c1789e792598ed58dd1cc\n7ff1b0ac88baea05dbbc9440457e303e\n56300f790763af1a872860b02b1bf58\nb67aacec8e98edded0b19424de5f7fe4\nd74870729fb3e3c5aa0a75782a86b0f3\naa1e9626e1e23038cc0b9bf177196e52\n60d11f54c4d3e1d856232348d1bf86cc\nbe1546c576c7c189edd7ee0476a331f6\n9e5e03508b204754c2b64c0adffbe398\n45dcb53af7bea0d091912372ddaeb001\n24b5d56b254cb1958b424343280aeccb\n77dcd07d59503f1014038d588fd1342f\n534c5f9ea1ae94b54644491844ed9566\n389ed34a0c989e325fceaa39a8353bde\nca05bd1afb0ffeaf6b9a484dedfb7d25\n5da5cc7b5a6a9d6f433334f7dfc6c30a\nd8f3c4bf9266150a579147ba03140821\nbea7cfa3c0e7e16e63b2acb037dfbcde\n50b4851d6e067f9bdfcd57c2094a665f\n1f1b07bf637b3a1582db9fca4b68095\nb8eaa2fca64d7e4da52ed1964df255d7\n4bc064672eb85023d84a8130bee3aae8\n5cb06ff2b420c24721711c78ff413696\n2b1af04045c8c823f51f77a6d7299806\nf497cbcc4895d5386b684500e5db87c2\n4fd20c1142b642221403e6cccbe91852\naa2242ae4ea1074bad0881e4ef1ff29c\n588bf81e78829fe7a16baf954c1d99bc\nd8358969dad764edbb6f5a9e4b6b8b34\n3d629d27b74fad91dbbc9440457e303e\n892381333dc86d0196a8a62cbb17df9\n77eb55272e3c00f2cb774aa5a7f9653\na3acfe6f313ab881bb088904f7cb154\n419698e72a0d4d75d8f2ca82d6e1c314\n3c3f70971f203c4d6ba836372832f055\ndcdb75ba399230bf98f5bccb3529a48d\n5d3cfbc8bae19e701f580a0f9153317f\n61fcffc9fa0995dcdeeecaed91450a4d\n1e6cfd4bfc6270f822b5697e1c26fdf8\nf3718bcd0e497868af7c7ad2549a1b15\n53675c4bbb33fe72bcc0c5df96f9b28e\nd504ebe36ddde74cb5e61088d6c054a1\n4ad85a7d1ebf49e3490ad276cd2af3a4\n8577be35989634fb925bf1713cfe05c\ne9c9d998f7b0de3ca6afe5903a01a59\n909244db9219fb7c5bb4f4519002140\n6223f3849d57154b5ecb3cc57fe87cee\n3981642f57a689276ef2faffa907bc32\n3ba15bab072af6ced014b923da2a041e\nb93d170448493717c2b64c0adffbe398\ncb711f2991feea1de6c5cd45aa112726\nc98e1a3e61caec6a67d783b4714d4324\n91de3157ea61d943f27383fc5a5a711c\nc13d5f3639f427587fa29a3ea424473\nd40e314fbb7f37199753496ba23f2183\n46acde1907c1ee378523e42ce157c5d2\nbb878313da4b02e3dbbc9440457e303e\nf9f55661e6437920c5a208307819a3a1\n3a4843e09b8dcafae6c5cd45aa112726\n3316a00869217c2632ed7dae08823495\nce074e18e988a481d082d95e9bd50b49\nbbe71bb58b7f8f74f51f77a6d7299806\ne9c344a392e311195b903ba10d2ec446\n99ae1b3f970c61fd5b56aadec5c0be6b\n8b22c3e3be1f8fd8b645b903fc5f4135\n33ec1e64a02ff718faaadcdc0221eb72\n7178731312819be3ecb14096838a20c5\n9d81bc691486a3c725bc9a8086ca05b8\nfe307b67739d9620d874a9fab241259d\n5bd3e7c9695af73cc8687ff9b0b4e4ac\n3757a60634d134da35836c728d324152\n64952439f8d9e1da9c0c9824ccd078be\n5c86904bdc50a1ca173c8feb9cba831\n4d7cb35d1d9f2434ccbcb819724fb563\ne3c79d6e34b1285e4580ed619ae2daa1\na9ee7abdaba4ed6c14817c31e6492a06\n319115572f7aa81d06ed06732b21e08\n86b6e539e72be6d46fa0ab61d9f9d96d\nd6dd3de6d6ea6d0b1931ace01cf1b948\nb37c77a90ba66c92564339cd0fd02849\nb6a89034b3da55b2cb79ea4974c73b2d\nc747e6ceb1a6faaa3074f48b99186254\ne4834c88847b288648d8ff57878739ca\n6be6d6ae38d8aca4dc2cbc0befb06e1b\n6aeaf646d526b41025a1c5ed6eeac95c\nba7dc0bb03a57732a9d30b145d59ff\n42df32ea024077732463600025db2266\n989c95491d7e823fa413908c0e169330\nf439a2db6341cd85f2b931201029bc76\nfae27953e0f0404ca99df2794ec76201\n685f2f19452cb973e98f4318c324e998\nb0f35e0dbfd5d75620fc2acf581b444e\n55e7251e672cd45e796c584ff1fcf56d\n586f09dd66df0beb2f45520e48bbfc3e\n52d41eb69bb764e784aeb682b234df80\n79c5542f068830463002bb98777d6df5\n25fe34942b619a2eaf7a219828cdb9da\n2ed972dad69431ab89f8949830ad07fd\n1d1641362ad5a34ac3bd24f986301745\n4a5332f5aaa3144836b0f2a1430e993a\n9695267b69d145dea14bb1d7e401bf06\n2433f576edbb538aae8c9d3b8c4b9bc3\n419520889432730a970d4dd67731c543\n6dc5a07a13fb7dc32ff27b24dc18a6e8\n9df79431f16cad05116162acefe23592\n37a79a0b617e2e711d172d0e1c97cfd4\na8a2f0865365b521c87106a609982130\ncf391bbecf5926ecfe51dc4aedc63243\nca5d7ee5cc56f989490ad276cd2af3a4\nb654fef8eb98e99d65ba78ad9601cf1b\n5e3cf3c40c6bfc0471a782a4379556c7\na27db3ddc9bab11a5fceaa39a8353bde\n894f033f10abba014038d588fd1342f\n4e37b83cc4f762a5f51f77a6d7299806\nac47b4d30b598978d5a4a04ac21f0578\n1bcec47c5dc259ea95ca4adb70946a21\n44c25bfcff4a4a4e4dea158f05aae320\n3adba11cee055363f51f77a6d7299806\nf1167a0c4bfc1f3fcf004563556ddb36\ne32ee21232d2d5604747ada1cb39a749\nbcced2f12f206a927eaeab1f0c9120b7\n2909a46120ca93afff16555386d173d\n317b404839dea88d827b401415ba9e3c\n30f4c4d94f4fcffaf51f77a6d7299806\n60328528e791d7281f47fd90378714ec\n63ac45ba2c2231d155f9a00acc25f137\n4b35fbf5df52938a76d876646d549aa0\n8d983a0adc059082b300c4ca2f51c01b\n9a75ecc1e677dfe755d57295806b2c59\na85ce69dd5aa852055dbece39a4b7905\n400a5dbd31db947b35836c728d324152\nd0d3585a2c4579bde290ca81b042ebb4\n6a878ab386c927e6d1a63a2e2039ff73\n86eeafeae817263414038d588fd1342f\nc9fa3d209a43e7fd38b39a90ee80e328\n32284e0d1700dc55e7c7920f6a65a54d\n2c67f62020ca22927297db8481c2b16b\n91be45a6b74f2fa283b00891f680579\n6393b49ccd72e8b312cef4e6ce7bea86\n98d20227789f5c9a5af29473330f42b1\n73b37c243cbf23e0b516c05d046e8e45\nae02a5d77184ae2638449598167b268b\nc4170208c9586eb63c2247b30d3fc073\n3d63ad34e3deca1982db9fca4b68095\n55192bc667582ebb83d21872be197422\n7ad134826824de98d0bef5e87b92b95e\n2c6fa3007e79013cc3cf9ae716575390\n51f1ea91a1cd7370b3fdb1a7c9a60207\n5c0d4cf28a71ad7296db593b49da23e5\n11d8814ed60b54002449009b96f8a6ed\nbc6499abd6192f128c605f8788f64de4\n9a37886efaa98354317e912dcf9f9b6\n8951c681ee693af213493f4cb10e07b0\nb9c0dcc854da8c7d60558e0a9a66f173\n63a1c3810119e2b660389b3f7b5c9026\n9ea7facf01e448f328a1548e344f0e2e\n74625aaed8902197f51f77a6d7299806\n29cd7fbcf6c7c33df51f77a6d7299806\n5aa3f60fb8fc208d488fd132b74d6f8d\n56262eebe592b085d319c38340319ae4\n5b51df75df88c639f51f77a6d7299806\n86e6ff997adb2a192c90ae7b7282b9f\n5d0a9fa5c8d9bef386f6991406b6a562\n432346a3345e3e5dd79b19c7c4f0e293\n2d51bd678668a0f182db9fca4b68095\n6e7455e21a6668a7f51f77a6d7299806\n5ad4512976afc746564eaedaeaa04f28\n7a5215c4f74afd1af7c7ad2549a1b15\nfa4155f8091689a273801486f0f205ad\nff3a6eb4556b2c0eb04cb542e2c50eb4\nc3fabb74405368a8c5f0b5eeb41fa897\n49e920c98895f90281a172d69c52a28a\n965f9b75de94d03aff74317afae0a323\n78386cc102c6dbb03430d3d86b335afc\nf2129c67cb55c6868779f85a8bc31fb\n89d2cbab56c5a1d7297056ac457c1c31\n3037c7d4d9dcb8f535b063aa516d32d0\ncc1b4eb1a9164e04f06885bd08de3f64\n51439579ad42e9cdb52d092517b6bea6\n357f1c031b1bdfb3efaf604fa2300241\n665bfb42a0362f71d577f4b88a77dd38\n61bcde763ccbfe520ab6214a789faf\n88dda281b3dddd57517c7e27988bea5f\na800bd725fe116447a84e76181a9e08f\nc8bd3d33ff8cd4abf189bc4b6aa309bf\n8ac35c25faa261ef4f3443b22038d340\n58d39cbcd842cf6eaa90ad3e0254ffab\n4ca29321dadaae90a516b539b31607a2\nff167d9f25fb6ede2419ec0765e66c90\nc043285da4600e168a5e49d8f4867e8f\n9897713e0efb2942f51f77a6d7299806\na54a6ee9263bc1eaf4b6538438a0b930\nf3f0238ae8d9ba8dc8687ff9b0b4e4ac\nce8e6c13899376e2f3c9c1464e55d580\n95c5a8897fa78d3883b06dcdd869d9ac\n861251082f0935c6990561fc34164364\n1d99f74a7903b34bd56bda2fb2008f9d\n3ab0a1dcb23aa0f620bea10952746d3\na7154b3c2b2a0641a9fe1734a6086750\n8ad5b0bd9f1297e5492d9da2668ec34c\n510fdcfcba1bc18ea1081ad712f6fb3\n8862fe77a7856db29a8ef44e1d2c5b75\nba747d0535cb7fdfbfb5bf9fe49f43af\n5c95a378674a05b313236fa00fce09e4\n507de496a9a77945e40b5e9eb4befc2\n31dacef35c2d68cd7d5059679be663cd\nf1c390f2a04d13f6742728b30848ed03\nd601777b8862bdc8b04cb542e2c50eb4\n75369f55718d5adba0bb10bfbc5d4718\nccabe6ab0816614dde03ab2a27ba7531\n11c7675a3dbc0d32f7287e3d21227e43\n35ee4bcad88ab50af6e44a01c524295b\n9961b26d1eb9170e98e0d1738edd4f19\nf0f9d29b3eb76fb7490ad276cd2af3a4\neeafc14e4e0db2ca3b481215325f1515\n8e779c0b252d4b5e118ddfdb81cc6068\n50415355dff6f4e0c2c1a442b53fa053\n2882587cd2fc021c168776226d349d71\n2608335ef22bcee1c97114870bb573\nb22405009444df73d27ba3fc43e70958\nd50c5777a2727679b247f6fe3b8f7af8\n79ed181ca18bf71dc8881577d38510\nc4a73db5b3503ffa86abe5555a3b447d\n384861155b7786fcb21bc3cf138f79e\n79fb74d29b9b772c36b0f2a1430e993a\n9b4e072fbf32d793e6c5cd45aa112726\n2bda2aa53c374ca665ba78ad9601cf1b\n8e9812ad9e12d467679c9e94dfb2276d\n941720989a7af0248b500dd30d6dfd0\n94d55392edad30d35192e08e628ef9a8\n1aa07508b731af79814e2be0234da26c\n1b8e84935fdc3ec82be289de70e8db31\n4ab439279e665e08410fc47639efb60\ne82fbdd4857adbd7bc0482e18ec51d0e\n226f38ce0d46fddef7a06a265fb36208\n270b86f1c341d7fc98d5fc0473d00a1c\nb197d9b353a923cfdbbc9440457e303e\n7bebd3cd1be32a0646f7430ae2c8ca51\n27680e1b7951526518694a7306254063\n106c7f10c5bf5bd5f51f77a6d7299806\n2936cfb442eeb0a32a673c8b84dfc32\n124117cdec71699850c2ec40da48fd9d\ne88b094644e1e80d8f2ca82d6e1c314\n4a2766bf63caa24a4abd5da3f5ea2512\n1c199ef7e43188887215a1e3ffbff428\n20cbe565f98b4dab40ef1c8b63a628f9\n9c563031f09dc2459a87002a4eeaf610\n11d4f2a09184ec972b9f810ad7f5cbd2\n19ff1d5665c1a68677b8fc2abf845259\nd3f393615178dd1fa770dbd79b470bea\n5fc3b7d677788b486cd47753062bdba4\n7144c29cc7038186d67fae5fccab266\n9183a9f6e6237492c90fb40095d2be6f\nd311e10015f19bb7482d5f087974fa09\n2a5abe261ad074f1c6fca4cd59d9149\nf979d2ead3517a67f20b781026d21763\na4942597dbfd1e683ee344f731525f3c\n31bc7f782eb3bd7de40a8ba0cba661fd\n9849c890f3bc80723a4642fe4c259750\n4abbf49c3177b32c9f613b70ec8c2f82\n348528e8d474a003cb481b0b11df1849\n537c7bd16e8a00adbbc9440457e303e\n9a68fc6d001c4ceadc75c30c88b2f7a9\n7b5b032a2cddeebc54d7082b34825ef0\n357e2dd1512b96168e2b488ea5fa466a\n8c4dd9891dc997b75a627be422951096\n304efa07923fc3c1c681404257d94ad9\n3d04cb63d2b1873fcf0dfe1797286ae\n6be3e544deece8441191025061735ea3\nf9b24a3b88f9037e4b5cae2ecfffe51c\n303a25778d48a0f671a782a4379556c7\n30e8a82eccb30369e3ca99089143c61\nc98c12e85a3f70a28ddc51277f2e9733\ndcc892f77239ace06b2befe83a0efe39\n92242be674537e3df6e4c3538272fb27\n2448d9aeda5bb9b0f4b6538438a0b930\n7a617f62ec5bb2075e7faf7f49c2907a\n90b6d8a730e9e17cc55161a63fbd109a\nd5424b7fdd031fcdd41c21de8af66e26\nf13d600a3c4515e220ccbe1c34ca182d\nd66cc87c717c15f57f0839ffd260627e\n76dd2d9f0183e09dd835cf838a2f2758\n2afcb7db7697d552f51f77a6d7299806\n46dfeffa91719044de2bbe257d2639e3\n8830f76c748f09ef3e870ba5db422375\n2e17502c7a131b4061962815e1518ae1\n85d0d147adcb6318b8e1b99345a5afd4\nae9e1ff1ae0b0a8f6ee473575a9f31bd\necb57b01c7ff75cd416e7824059e108\n791c488a167bd73f91663a74ccd2338\nf1f40596ca140cc89cfc48dba5c0e481\nc9288e09458ec0e9bbc45ba666751519\n1015e71a0d21b127de03ab2a27ba7531\n6a0bd5d9ec4567d9d42216b5daf41a39\n4a63afd1da7fd633e6c5cd45aa112726\na7d75c84027af5e7321f25048c6142\n45220c3f4fba09fc665309339296e85a\nbe43e61912136b5710f438ee952d42cc\n2b52cd0ffce12156ccbcb819724fb563\n4bcc7c4e4c0bfe47e8f8c11a24c52ebb\n117930a8f2e37f9b707cdefe012d0353\n9d63d69501b9ab9067994ca435825ef\n748d7e99a0ed4646f4b6538438a0b930\n27ef7dafe404bf424e83b37723b7fdca\n97c343e28e2b9ea4bf4414e655b3a4c\nff6e6b7b7c7f1c0f15f78c98555ab41\n523a54d33ce5fa9aadcbe68a4d5871f9\na33e91aea2b278e0c5ee4aa82bd336ce\nd8774646afed0312732375ced502498\ne18ea9d7ff87c3f86a97ad5f72cdc5d6\n2194e6394a31194962e682c9809bff14\n17352867f5661212c8687ff9b0b4e4ac\nb162f52f6a1ac00e519f3f3e6cd6d1a6\ndec5920f32fa546a6c518c577d808035\n1937193cf5079b623eec26c23f5bc80b\ne3bc0a03103cf84e7a471a654ffbc436\nc045514b5d4e4407b0ea0348afc5cb87\n81e60b07ea1090bf58e4244f8066a2ba\ne31c6c24a8d80ac35692a9640d6947fc\n295a3bb2aa43b691ed2d43425218e827\nb3194efdf2b8031e8f6e9f07be105c48\n5c9b4af9d0e9c132b161f36d4e309050\n5f0f17c97234b510b4bb271cfa904d13\nbe9ced795316066f38620af15fa7e604\nf1b1c92f91d0e52bc68ff00665267e32\nb2239339005b14c8d675cc466d0d6fbc\n54b7d484dbad29cdffc6e457221b9271\nfbd48960edc73ef0490ad276cd2af3a4\n84767939783aade4611ea9b20dcb5c83\n47db22433821989e35910b9c436db932\n932bb63e4525d57b3b8dea4a358cbf0d\n750bc77ca0328a29dbbc9440457e303e\ncef79d398ec49cb3d25229379db8f59c\nbcc73b8ff332b4df3d25ee35360a1f4d\n53653524f2ec502e8b2b8dc0c816caf\n74539775b5ff9bfdbd935a20ad27255f\n3ede0a86fff6f79632284c722d808bec\n7e190338d3f213c3f7b1230869d2b89c\nd94eeec9f2fc4d6c33fe87c69b83ce63\n7fe836b46890d24a65ba78ad9601cf1b\na58e894d520ebda28f94476574196c14\n5fd2483e98dc2ddef3c9c1464e55d580\n48c0684d1c5e279dc3bd0b373cb604dd\n9d9a0d778da758b043e03cfc9885bfb3\n3c58dc00cf251172c05575120a46cd3b\n9cf25518a8d3eecd9c48aa7bc7cbcce7\n8cc42bd1f681f126d0176f9a144100cd\n544aeccfe77f230a1cf10a36e3d0884\n4ed25bf015585031490ad276cd2af3a4\na750f7309fcc4b0473672ae855b8c82f\n4f24a67f85e71e144719088c8e42c6ab\n4159903eaecd9560fdac1e69603928f\nd64c618e8b0c7db73ded7580b6cd3bad\n4909c59d7326a2e6217eabb7c57f6292\n1bb81d54471d7c1df51f77a6d7299806\n1bdf0a0bb9db1db68998b3b64a143d42\n6e92bdda1bca7b72f9a4f3015fbf70\na6d282a360621055614d73f24792753f\n47c04fe5c1f850b784cb23b18bd34686\n697fc3fa4c36fe9b128d966a6d72dfea\n1f3591151aef17ab997a9cd87230da\n453be11e44a230a0f51f77a6d7299806\n979d210217f798d4f4b6538438a0b930\nad64210b56ed1bbf9096ff01c3d5022b\n98f42a66467c264377fe1aa9b41a89c5\n6744d53d1557cd2443dbb6421d614c0d\ne0efbc4e240b9cc235836c728d324152\n690f208bc221e05d6c891822a43c9279\n330dfd669062043f5e60ee22a227533\n13b6648bdc843b767b5f4d129cc2873d\n17ab0917e215e4fcfd300048280f015a\n30cc0df021a947e9706ce6d0dff37e85\n4460e0885d82b7b5d9987a7cd00eb98d\n36f4f54d500dfcec9969831eec1821d9\nc3c159a5a56614aad7b20fded0142d7a\n27c00ec2b6ec279958e80128fd34c2b1\n6fd7e0881e4148a238dcf62407724e73\n74518f7c342b49191030665054ebb2a9\n1fe33fe022779bf8b0957d845ac33749\n8dfb550d8fc07ebe490ad276cd2af3a4\n7740fa5979753c734209d14d674fb332\n46c7a2ad0abf4463bbc0e8a3b6521117\n8908ecf5c86377ba7b31e6c3fa42a7e\n6d54d175396e3a99b1aef914f6383f94\nc47bcffe3e74391af3c9c1464e55d580\nd7c9ad0bb877b0796c9d2c8251e6074b\n7720c68121497e555a28000e191ea2c9\nd334e5ab55188d62680876614ed35a7f\n49918114029ce6a63db5e7f805103dd\n7f79aba01e8c572b68d1b9a1d97e2846\ne767b27d6625f905e9af7c2087a87b0e\n60e8cbfd3cbf85d097b3b2f2bf40d247\n2db6c88145049555e6c5cd45aa112726\n4f520217376a00ac3e4dcc9f0008b73e\nfecb6b1159091d36d0176f9a144100cd\n554f63beeeaa1ca81acd2074f8939f43\n4ccc0a3cc38c41af666bebf1a1d4e946\nb3c503ee276ed0a75298386582afecd3\n3e34987bd5e7cf0e6c5cd45aa112726\n8afad2d7f30c9f02ebeb1e6a8111f53\n51adac207965e93559f8e31ca87c470e\n5c6c95a9a99d452e1d2651c636d3967d\n7e5a6a86dc490f7e7288e3849fb636ff\neea9a17689ef174ec14f867747674e73\n4eed9ad9465482d543b9eef399a0841d\nbb8d64bab582c3f324e55bc028ee0805\nff2333f528efd790fc93ece3545739c4\ne64630913e8b723c23ff850238a15b07\n522eef970fa6d87b7d9c441a2a657ea8\nff49ca82d7f8e2bef27383fc5a5a711c\nb19f85fcd46f456bd5cba62773b8025b\na56e201584ad5afb61ad1cb92b23bf5\n6440fcf4fd8214b7dd58412a5e38ff83\n56cf253d14abfeb92c528d33bca1ac2\nd343f06da03eccf34c7384dbb75cab0d\n2404a64c8736bcc37ef29b55d8edde64\n6dbe90994925f51c26fa92f330dec063\nc07c96f19ea1d431d4f67da0de6a1054\n5c61d56d4147e55d5213cec267286d18\n675c6c0c5c9a4a8a3bad033fffa5c327\n5bfb8edf221c7b0e84edfe802bb43dcd\n582b375411f6a4565ba78ad9601cf1b\n5b89de55ce0f464221f824bda064425c\nd487d3b9579762cb5dd170fd3a296ebf\n3190b19c1ae0aff9c5ff3a5f34406751\n9f1a83a9fe6ce47afe74f7508ff628ce\n7eabd19312bde1dc9335750905007562\nb779b6773ef480e8c3cf9ae716575390\n34d255abb83e8d7519abd93be2967664\n28a0b2a5afc96922ba63bc389be1ed5a\ncace287f0d784f1be6fe3612af521500\n96b2bf512fcb51b2af7a8f97983e7906\n20e71125748a11bc3c65ef99d4b819a4\n4dae16dcdfd7d10be6fe3612af521500\nc8f5189b54fb3fcc6c518c577d808035\n373089aa7a44565b7215a1e3ffbff428\nd93760fda8d73aaece101336817a135f\n89f8c12dafc877009f8c3d2002c77ddb\n9915f9247f671893b89b3e01b90fe955\n2fa2acd39067ee788f6e9f07be105c48\ne72bad036bcc04ea3f68fa735d443de2\n902a46f5caf6b1f7e38c7f0de498b8e5\nef1824754ae554af83b6e0255ae357be\n658602dd0da08614a1b6f261c8f1ae0b\n6acb045fe11f7a81f771b7c5ceefa9be\n30afd2ef2ed30238aa3d0a2f00b54836\n7ef4b16e0c38fe09b04cb542e2c50eb4\n741fa23c22d97ea81bd5f87ae5f3f83\na06114a07a68c995c8687ff9b0b4e4ac\nd7ea1356ef7664e2ad5067eac75a07f7\n7380789e95676518e7c7920f6a65a54d\n9a91fe80c2cd2f37f51fa0238791f5dc\n96eb2c84ab3b8df0c175a98f27dc2236\nb47e994452b71943bf30e5b4764cebc0\n35e77eed59e1113c22e4620665c23c97\necfcc42f2386ef37f51f77a6d7299806\n498e81334b1dfe98882ebc6f4e497cd2\nb8e4d2f12e740739b6c7647742d948e\n44689408a7d879a664d56d7ed347e929\n78cf0ebb875de8dfba18ade30e563d37\n18f2f833d95ad137111c729c2fe5f751\n54c9f96ffc35d0c2eec2ef73f04d4ff7\n56d06d2b12a40bebdbbc9440457e303e\n54f276860d9b00436370a012706ac174\nf350621fba76ee29e7b1367d085b7e66\n310c65506936cc5bbe5e5822eaa1366c\n1e15f238da6b4bc546b9f3b6ee20ff4b\n9b76a0424563e3f4dbbc9440457e303e\nc0f2673cb32574014e972edcee1ee23\n455829a425b5f919fc93c3b1c0fca400\n9619f0c887f8d879d79b19c7c4f0e293\n2fb9c50ebbd98075ba5342d638d0c267\n7ed9395ec6fa732248db5ebe0dbfb1d5\n2a3a847a3d4c39c1b17743c18fb63dc\n383a9a2c39332f7f50eb11cb3709022\n7aad83423b294c59f4b35f4029eb1ecf\ned53217c9a4443b8a4ad5308cbfec5eb\n53180e91cd6651ab76e29c9c43bc7aa\n3cf6db91f872d26c222659d33fd79709\n8d1616ada1d6f239d1f4836ba5ad2863\n9fd3f3034d3e867336587f5b4db3e782\n94cc9d6473258381171b03ec6def09f6\n94b55dcb770626d9c8687ff9b0b4e4ac\naccebea3a0e180f0812e3ecbeaae3980\n78b7f3cb97da38c41471b11f88c7b46c\n5472ab8df7cd3ecc1c1b3b2ed8d13bf8\n8cbf3d97df981d511fc6bd4aed49cc41\nfba62693a28b2e4c43f1c519d66bb167\nb7184dd450c5fc2e17c1e3c52889f7b\n52a8dd8b79ac85299d4d5dcd2cc33826\n6e1dd008531f95fc707cdefe012d0353\n697cb70c54a483f1f80ff10f4838c137\n566e4f05071e86bbf3c9c1464e55d580\n7035d480f6bda22938b39a90ee80e328\nb68180bfde45f5a7e450a02d8032dbb0\ne3eb5422bda98fa12764cfba57a5de73\ne3a838cb224367c59fce07ae6c046b8c\n96af52c34e42b546cd2c9316e943c316\na93d8aa9a17b9d07f5fc96890ba7d316\n6731a24561fe44839b92627dbcf8ae26\n3f12570d87da2383492664434c74d812\nd020eee9e094050ad776c08b6a3d0a38\nee445cf3710af7e21548fc89657a4fac\nd0e24e315e67bff2cd80b6234fc6097f\nc54a464d63efcab2c389b3ea958c8248\n3e973b624578fc89b76e29c9c43bc7aa\n68dc135cd4671aeaff74317afae0a323\nb1f311d5fd262efcbc47c7f012e5fa27\n61fb89fca404e37f598bcf8ac674b63d\n103c31671f8c0b1467bb14b25f99796e\nbda113bd71ea0352654ea6737b0d3597\n8bba3f2eac551ada2c0e1e24bb9eb3ab\n2d018e8c0a34a863ff59f04994ef1f0c\nf1f8e16d23d3a0ba95f2719038c22311\n8b0886f97f038a5fabbc3f24ddd185bc\nce9cedc58c77aab4b5a19b1840ec7af\na93853bdb9b378dd50c2ec40da48fd9d\nda7b1352978b35c1490ad276cd2af3a4\n4848f84b015f1360e8058cf23f6382c1\n591e310f3cea35a6d6134c153bee8ea0\neba001ddae2ce5eed5d673747c0e3adb\n55fc24bb7f0cab50a24ad2a1ad4f7142\n7db1b46aa2a337adf51f77a6d7299806\n23b52ffd037c95223704253c4a874401\nebf8166bacd6759399513f98ce033426\nda49d0ed41204ff65c0da4cac04adaed\n4623efb456cc6070820018801b237b3d\n59f7e527386ab08b7f0751100c225ea1\n9d7f79e306288aeac6bcadaedba80eee\n66a36dfe1cfd2d17b40f0ac0fb9a650d\n9958038b6d06278a68d1b9a1d97e2846\na63ceaceaaae4af9753496ba23f2183\n7a712ca74183d8c235836c728d324152\nb8f2712e8330ba6b3c9fe3a963c6d73b\na1ca000d08da97ae43b5d2063387bd6e\n8b4b176d9393676d5e1f306d831137e1\nf4e24cf8c5d0c5c31dbb0393636b3531\n90c6d1df1f83329fe1181b0e584cdf9b\n3c9747ff49d0da71f91663a74ccd2338\n81519481b3e24fd7b0957d845ac33749\nb8af96d9c542e1bab34e8f502d7c7e1a\n4f7e9b96404fe19af37f22e93a631b3a\n5fdb10483f79355581f5ac91b0c9e99b\nb2bb0eb5670296ed5acd449a2ae99009\n63249ce6d12ee0bc7b20cb946bceb58f\n7a755f08cba6e387ea8f932ecf29385f\nc19ff7d2a5a3d29aab966e32f5a3808\ncb74cf36ff8fcb8d61d7edc67034608e\n4a17e5189aafa9afc8687ff9b0b4e4ac\nf9dcf630e370f7d5a320e34dad7c78bd\nfa6a5806956d82aaad484915511ccff6\nb59735c72cf9af0c17b431cae0dd70ed\nebc5bd5566558b64af7c7ad2549a1b15\na8e5e4016c44f896b1b3c8adf02d88\nc9f5c127b44d0538cb340854b82a069f\ne1e7e66978b888703f146f1fbd99cb1a\nd8cb5a5707686c9295a391f7b991d876\ndd414923feefc1bd160139aa3ea05a51\ne505ab84808920d06031c9bf940ea7ea\n404d58ff6722e4a34014f1a5fb376d1\nb7fbbd8cdd2b0b27a37bacfe19b0d747\n61b76525022f44fa9f2fd5a6f642de3d\nf7626a4eb581bcd7140769279b0e5e15\nc59cdd1537bd75ddd0818327fc390a5\n5db74dcfc73a3ea2f2ca754af3aaf35\nd06c9ea39c0dade1d6b5d21cd4e3fbc\n50e3f09b7dc9fcb63fde2470c949bc26\n233009d4f30fb416dbbc9440457e303e\n502be527c054ebca6e0ad36e9a10bd13\n2a1d80a0aa67ee7585d33ad8f24c4885\n30fe29d73b410c3855efe429bf27a556\ne7be08b34dacaafc405e3e2b789a211c\n79f86911bc86222a4e5aa1f8c960ae63\n4ea3d680127a9fe91360172b4b6205b1\n600f028f0bd5e7c2c8e0227722a7d821\nb2b359d7ce583ce5ed105888ecf0e97d\n63e6c50e5435e35d822a33e080d0e71c\n7d7b3b8a1734154b3b8d5c0ebdd194c8\n7182f94bdd17c0ecd6bbf317cb591f56\n9b359e42a5bc98572085b87de8f7581b\n200597e4eaf96015a4fb72f4f3b0e317\ne50a97aa15d7cbc5972e15b580d9a5b3\ne7d4a3cca8edfde4829113e62386fd50\nd5200a27ca0d4a3ea4d56f1fc38d34cb\n9ce2ea550b049beee64d5cb52244df5\na691eee4545ce2fade94aad0562ac2e\nf14fd8433dc1b43efe9f0f410eddfda5\ndbfab57f9238e76799fc3b509229d3d\n62fb28b9a362fa0adf8d3197c3f0b3a6\nc953d7b4f0189fe6a5838970f9c2180d\nbbcdf9d0ecf02e7e9fce07ae6c046b8c\n1bda25dc158098f438f6f5a7dee76fde\n5e2003b18752e5f82f809039658ca52\nfc6129a9310ba34c645311c54e2f9bdc\n8c4d57109ce0f2f222659d33fd79709\n6cfe2f5ab1bb89022edea1c2bfa3bc56\nadfab5a4d020094f98cfd47a860803c5\n937bea562c1db4fe5ba41eea807f5d3c\n77e703a4baba613937f1b3cce66816ca\n72d0cbe861a7de2de4f382dec07f365b\na50b78207ec2256168d1b9a1d97e2846\nc12dc91e3564d8e3473f10e6caaeca56\nb7c8be9dbe5ff1d540332412c5d013fb\n58620941b03e46b6e718b2093cc8d7b1\n27574a49bb8055ace6fe3612af521500\nbec78ebd204764f637a0eda928b574d2\ne0311d577cff9d85f6ea7461c0aa61c3\n4438e29f9d3cf45bfe52ffd0e748a1ab\n95ff15679bc2d2bfab41e4eb455c2269\na996cc501faa4ec841c6494d29fffa82\n30d93191cb91f8ece6c5cd45aa112726\n8f70be87d6eeefdf213c3458a0fe5598\n88e514e71b48738bb022c94235bc8601\n5f5a3d412807984a27f9863535eba56c\nc877660e0ec15c0d22be63590e183603\nd25b6ce1b5ad6198dbbc9440457e303e\n59b45e83bf13e8e2374110224c1c4eb0\n7effccaa74122b5f2beec56b24479ed1\nf06d2963ad258feaf5adaa9eef900be3\n447a5eee395026fa8d09bc92d0fc6d3a\n648fc7caefda981543d890f2dbb65163\n6b38324cb8beedc5ca86e527b84d8854\nbd0ee3dbadfa724f6ff454af1e8947f3\nadc76ddfb1d619a25dc3653f8341633a\n5330a65bc54912ce35836c728d324152\n309674bdec2d24d7597976c675750537\nb4b2e315ec8e17c9a4f70fb45099ec30\n31ea40d2624b40a17b431cae0dd70ed\n336ec0b3142fec15aaf0ad030fc37d94\n653c0f8b819872b41a6af642cfc1a2bc\nd4326cd55ed8333f6a059e1fc701f06\n892529626a1710cf17ef8b7bd64bd7f2\n3d23d594355c65d9376f771510e6da27\nb34d40cf68d35685edd5830365d88456\n917f2800d9fa9fe8c862eec8232fff1e\n91645c82e357ec502744bf8869518694\n7c2bd3b26bff1d7568c981036afdae64\n5f8b70c628c7f6fcd4fd21ba7448467e\n1e40fef11894c4b9ce4f274577283b16\nfbafdfd16d929c715b52e74a988c7255\n5027bd5ab457e99068821642e9a54505\naf30cef615a3338599426e1733531ba\n3f55eca70a6ad5dfb4f2d409b6697059\n8ab6783b1dfbf3a8a5d9ad16964840ab\n94ae179dd1a1492d1191025061735ea3\n94645127bd4168e03e63b721c3743983\n821c88bc79af232bf2acefc3b3178108\n446430548f6ac25ef25f6a97c97019cf\nd52e7e39bed3ed954f62c7a282978009\n47ac4f73d91f8ff0c862eec8232fff1e\n1f5a2c231265aa9380b3cfbeccfb24d2\n3c4a33481f45cebb81f5ac91b0c9e99b\n61917c7f7953ee7fe6543556f230fe9c\n32a4ddf426cef33c323ad87fe7d4deee\naba6ab10f7ccd59f9f8c3d2002c77ddb\n3b513237d90a4cd1576d8983ea1341c3\ne54417646ad16604738a251b334366e\n74e6ecf3201874777954eb05bbab463f\n986058a64eb343c6781b8c940ab86a39\n77c4867b42d73d9bf24f05137699edbe\n4a86ad0d870a55e82058afcc28d23393\ne078876957aa6efbb0b0d46323bc2ae0\n63d92bf1f175a75a25ffbad401072b4d\n28d3e0a4e4201ddb19ed4d1541e44f14\n78261b526d28a436cc786970133d7717\n664eb477f8098678f1783a44a88d6274\nb5254b56addb692eb516c05d046e8e45\n5b5d0af8426e604df1783a44a88d6274\n981adc1bb90e7cab666bebf1a1d4e946\nbf8e44b58d2d95f45c6cb69e0968783\nc50976d44eac9f3cd7aac2535b43ae4e\n477fdfa65563f180f51f77a6d7299806\n26d98eed64a7f76318a93a45bf780820\n2f20894566c681e5922309b37ed10e7a\nb274fcf203b9ba7612c19a9a8d2be7d4\n4855971647f786b642e1bb4fe264125f\nee20e46c542e2268f51f77a6d7299806\ne916dfe829b5b3daf4b6538438a0b930\nd4d7607336810a548b95c9b52cba3b9d\n7fa4db28bd803691c91adfee365fdcaf\ned51660fd119dca819fb4103277a6b93\n800f60058f12a5243c2e0b170f2ad8bc\n6ae92754a0a90af09eb811e8e20749ae\n1e03b1793723dc25fbd332e3dd079259\ne76aad9a92f83d70bda72093f9b5aa73\n566df2b6ad0abb3198d5fc0473d00a1c\n39c629e6f9e752964c6ea7add0063fc3\ned6c9f6d77831e5cdf2b21995cbbbc4f\n34ce485c1fbb9af578785e24320d5ee9\n7af12c69626b5c1814038d588fd1342f\n478074fa4b2b604b6c0c723d8da50cff\n89509ce24bf62df0950baa3a522faef2\n1986eeb9bb594bf9a6d7a9f3c5f7bb41\n3457146f11dab7eff3c9c1464e55d580\n78505373e756b214a3af90debe5fa17f\n938c0560f25a6a9cb76982957f05710f\n5ce98a1c247f0a2d623ddc7262bf3bc6\n4e438ade91769be8c8687ff9b0b4e4ac\nf106bc80265faaabf78fc6de5952fb84\n662928421872897f489452a0032ea575\n9d9b5f5b3fd41136244d7c2690850fc2\n66aea803dc4a6c5390907a4c1a185a7\n462ef3bb97a88a753efde60c5bd5967e\n64139338cf8835515d6c0eb60be969cc\n997b0aaad2301a44b31fb46b2e6304f4\n2a445cdc8cac449271c43550cfb383a8\n6cf7fc7979e949c72dc9485cd94746f7\n1820138eca42749262e4024c69de065d\n7289d67cc454e7215790e40d47191474\n6b6507085db5a631f3c9c1464e55d580\n95ac07c8c517929be06a9b687d35bd76\n6ea4ccd680f3635b14038d588fd1342f\n31f5725faebb53aba1fb86e891f97aa\na7b82d009e29bafe705fef512417e4c9\nfb8b45151900e6e016a0c57b9ceb6d01\n5d681a38c0de5545205884f75aba3a\nff143c09dbfb0e8029e513fd785f7886\n328685b8dd3a7353bfde9cad2b5fdc64\n27e757d4ed3c929b75c39dc45570367\n5f2441ed2a9ec8fab5d55ded7962c792\n75b9ddc5017a5eb137f8f3a1ea8633a9\n5c70ab37293d81911b17743c18fb63dc\n5ef4db0419932fe12e5ebb32d8476df8\n64871dc28a21843ad504e40666187f4e\n7a5e63ee142a424c5f6d0af6de791c3\n76772a027634c747c8687ff9b0b4e4ac\n759d66c5dcf1cabfb99d75d512b660d0\n4c6c3346b5d0f071f4b6538438a0b930\n715530026c6459873e8366d7fa2c218f\n8d14cc01f39f2679a857215a199c2ecb\n2a2d705d0238396488422a4c20c0b1e6\n5b0dd54eced22552b283c8c7333d797\n6dff84a93b82c888486150a9b7f2cf18\n35d2e2a050336b78dbca69f936e89647\n6b881cd27826bd6b97a79b27e081b077\n287413404880403751e5a8425285015a\n674122da19a75d9bca86e527b84d8854\nf53cba4a288db2d58e1400f6db70a939\n99a9e829fd4bece8f5f520af1365ee71\n79053fcbcb68e2c31528cf73b8bd8799\n1e9004958eb935b2ef2777c7d8e09db2\n4edfd09b8d7717cc579600e6ae92ac5e\n5ca0b01dae9e3476f51f77a6d7299806\n4c6c364af4b52751ca6910e4922d61aa\n751b12c6e22386a49a195befe1c2db74\n48de3e38b0c5fb40b07fa14c34cd0728\n44fbc34ea7869e38e13a527279e951a2\n260f65e1b1baaf7c7b707c797539b200\nb251886df47a873eede14860b165d604\n92175cfac21b10e76e5b9257c4084ca2\n29876b641047897f9bbef973cc1034f9\n9e140d4e30a90721b459fd126141e9e6\n6730fb4ca7c90ddccd8b2a7439d99cc3\ncc811f0c28012f493c528a26a44a30b6\n501bf2a6d014d22ba169b9ecd9e046dc\n18e5d3054fba58bf6e30a0dcfb43d654\nbcf67dfcbd6c1fe7da8e9e0272759299\n3ac2da28e9a2f547ce4f274577283b16\ne1e2a1aa3a6cc913eab1a145ba6f6383\nb2c838917b9f0fb68a40e1421d6a3cbf\nc7ae4cc12a7bc2581fa16f9a5527bb27\n20ae4b27e86521a32efc7fb40a53aaac\n22f030ce09693f4c65c99f3aded15b93\n1b6c268811e1724ead75d368738e0b47\na3e985835e89c8b1498f847f9f26fae3\na96226408895c2685e3c4d3bc6ac3be0\nc5e3f6da9e818851618dd45f797b66b4\n56cb679a49a3568998d5fc0473d00a1c\n603351f3a2ae3259f2b931201029bc76\nc1c0b3d35cdef5e2f51fa0238791f5dc\n3f11833d3d9309bc9952c05a06935ddc\na54ac4580f151f89278d386bfa54545\n8da97531717192fc3215145fdcd9052\nfbca73a2c226a86a593a4d04856c4691\nd5e9eb9dbf9d30073321831d2245cf06\na36aa9aef138fdc1377b9297f3055210\nce10e4e0d04c33e7322ed2ef5fc90e25\n59bd57fe0389e7831f7c97814eaf956d\n37c5d67f97a2231cf51f77a6d7299806\n7004f4eb1a5b4a41a5e3e028709e0474\n124ef426dfa0aa38ff6069724068a578\n673c396b8989cd1971a782a4379556c7\nb2c35c8b748491a1684b7bc3f8a9aa55\nd07675c29d0bd535580b0de4af0eb56b\n81c481c1a0477555f0a61fe93fafdeec\n7139284dff5142d4593ebeeedbff73b\nc400749eaa4d10871a782a4379556c7\ne92063f7bf538df17eb00a494c61433f\n86c4bc3f46e1bf7bad179769eda42205\n43d13e139d0eb78668007dfca4077105\n2f249cbcbb122b85845e78b431e4d529\ndef8af022dceee892acbf58c0b138e50\n7d1a9d6a3297ab853e02e5116c35dcd3\nc833ef6f882a4b2a14038d588fd1342f\n83d3b40a6ff6a04af4b6538438a0b930\n276932e7bf229d37c8ad93869b52d215\n123305d8ccc0dc6346918a1d9c256af3\n9e8ba34b501945d1f4b6538438a0b930\n5392f55620f601471a782a4379556c7\n38c65f38e51df0746fd487bdb55ad0b9\n9db1302f2fd980cf3cca2657c9d0b9e4\n3a40eb7b9122bbfe2f066782346a992\n76de2f91710e9bd85f31725202dd5bbc\nc42bedf7a36202309056fd4a77b3a4bd\n2842701d388dcd3d534fa06200d07790\n4fd4cda3d713bb29c8687ff9b0b4e4ac\nea7337dbfced9674d2844b25962c000d\ne6328c1bb6b194f262e682c9809bff14\nd86158642391ea7a150a331b054ed006\n4a0f1aa6a24c889dc2f927df125f5ce4\n84f7061e038484492f8cdfb829e0f65d\n95d8553504c65fb4b770bfdf3ce10896\n264322794651490ec0d3c02f7e255b2b\nb4e30a512991aeba67903707764646db\n895099e136437cb799860e9353bb52a1\n59704fd0f662d7b4da986730050de1e8\n353707e135c889d2dbbc9440457e303e\nabbe727944da8cc55f0f8f79871ee942\nf128d707527eb10cb04cb542e2c50eb4\n3ab2563609476e089868adf0764f7fd9\nc7542e15626489adab4faba16579e3d8\nc16a1a47bf34a84d157e7edaf1e3e602\n74f246c1f7633eb31d1a08d58541ab5\n4aa70df1db0ff6ce2d19175e7d19b7cb\n3f60205b1eef5555a4bf007e7299d9cb\ndc0bc65e9181c2f698eb62961a525575\n103a0a413d4c3353a723872ad91e4ed1\n4ae645f3b724a7dcb83ea6cf8ac00397\nce12614d019f86e840ef1c8b63a628f9\n511c6fc6d3881b4ae43df8c9a38bf11b\nea389bc8d94f87ad95db811b45a94857\n432ed2387d4982a635836c728d324152\n502d0f698e20af83de03ab2a27ba7531\n9d229e34818effff07d3e3c7bfacb95\n8bd8c34158a3aa04f91663a74ccd2338\n11c9c57efad0b5ec297936c81e7f6629\n123b44b99e48eccb6960dc525de2f934\n4c3f452cd60df0efb0957d845ac33749\n387600bd541f7b502d7ee37bd88bacc0\n2282142b6b136a6f2ebeb1e6a8111f53\na770cb6ad4a97df84abd45348d17aaf8\n8c281caf626df58671a782a4379556c7\nb51e2ec95cb6ae33999b33727fe6db14\nc7f607892513a2f787bf0444104341d5\nfe47e7645f1080735f0277eebfd05be2\n32d243fc56b7b8658cbd400aa99bee96\nd30ecbe6cbe364e5c8687ff9b0b4e4ac\nf34fea2c05dc63d090984ccce1017e45\n5af850643d64c2621b17743c18fb63dc\na6009749fd05fed82d19175e7d19b7cb\na75e83a3201cf5ac745004c6a29b0df0\nf8c5604f39699e0fbbc2b2aef664ba29\n5ae7ef4cfaa6bd85b04cb542e2c50eb4\n1ef31b046039bf985c8a41baad250b1b\n3d66c60796d59662ea693790a1608aab\nbf41b418250959d0a8699b6183baa203\n764abaffc5872775f0dff71ec76b46f7\naed911c2849ce53b707cdefe012d0353\n79d7e50715b3b00cc2dd59754f61bab6\naa88b0f05470452f7ea323bc74055b8\na81795209ce65006ee0f4a6e5ea1d8c\n70a2b281cd8d59a52d19175e7d19b7cb\nd5b909ad5d7c793aa16baf954c1d99bc\n5019265bd6215c9ed54fd46ccb781717\nea06ed485ab0833a2ebeb1e6a8111f53\n1f3336163f11015c1a7069a11c22548c\n191360ba29f3d296ff458e602ebccbb0\n8cca53295cb61e878d3e8783b997c75\n595b9c165214bdf0b0b1b4239165b394\nf85f33b3f6cac48a512d71be7dbf2d60\n6fa2db75b28cc1375c728bbce49718a0\na497f206aa62e89c8ca0fe30c6caf3f4\ne777e42470ee9bf270ae142beb408e0\n67d3a3eceaada710e400ee8c5c49a7eb\n24465c99afde3b9782f320c67d1f2e15\n11c8f43ef796e23941e621b1a4bf507f\n9451cb35f46ec0f6f946fe2e431cd4fb\n3de9a7a40851ceb971a782a4379556c7\n58ef4177c711f38fe302d4da760c718f\nd9902456104543c898d5fc0473d00a1c\nc56bca4b7f353ad86debb0a33c851f8\n9b9cfaea2a7ba04c461ec9f1803b17a7\n49cbfde1ae92ee555706d1c54190f27a\n410146dc84b6196230fbe480cffda9d3\n2d204f50f33b3994fe52ffd0e748a1ab\n17d7a3e8badbd881fceff3d071111703\n6c5b15a19101456219cb07ecb5b4102\nc7da13238eb4a7e15128da2cbe23f6a\ndd0e48963b73476f7fa93550ab8061c2\nb371bb691811acae68d92632b2a01360\n3269630cf8dd9e87bfd5f349b1ab226\nf9b462997cb333dc7fbc060fd555478\n63c7b59dbb2876b4aa2ac8cb6992212b\n6d27c80c3da530d69b11da89c22111dd\nc5e6c2b4528c371378dd615a59de5f05\n421b11a26931160a492d9da2668ec34c\n62c3b6eea96337609ae676623bdd3284\n42ecccc972b45e38f4cccb2a97578c5d\n65ff1205a5f89150315ec3dc61760fd2\n9d7d7607e1ba099bd98e59dfd5823115\n238cd4b409ad9951f1d6726679b21945\nca9f1525342549878ad57b51c4441549\necb53ab8eeeb43d31246538126da07a8\n584ce0f244158b37de2b9bba503c21f\n8db4d399adc4d6148738e7290b6f3237\nfc99c80f588bc88d5a6be9e325f087ce\n63d45791c56483bb2662409120160a57\n643e55c58a248949b24e615f75a5a1bb\n2fd314d0a19433c62c37553db37ec752\n8945c698ec3e9d1ad9deb3f829cc2475\n249b40a630dd751f8023b347a089645c\ncea21726757b5253c3648f83bb1262ce\n808ba77745a0934586abe5555a3b447d\n8e7f354489bf4d9b65684b1827478535\n1e67e443849379fd6666a748bda83f67\nea762c2f1c6e966be464faca7dae7fdd\n662409af279f322eeb82005949031741\n60167ae64899f8ae966a40fb39b34846\n2576091d2540147a473f10e6caaeca56\n9518130aa4876f146ec0232dc7739bc0\n9dc77fb24cb14e5b3abfc4d0a5688916\nf05cdaa4f262ebfba16baf954c1d99bc\n77a4269a0d64d48336b0f2a1430e993a\n68fab23a050707213436bcb4a3bd19ad\n4a636d555b4f9492e27790b0ec8671f7\n7aa759758e3b0d5024ef48ae9e8e965f\n5a960456884d2a3b04cb542e2c50eb4\nfa277e2693cba669731d11154716a6b8\n738188ae01887d2349bb1cbbf9a4206\nb1a30ad2706247b53c5f24f851caaab7\nffd616229a97642c7ea8c9f2db0a45da\n8e9247a97fea8e0caab901f164e48538\n609d3b4977310957909e1fac9945adaa\n6549c13a4c96b926f51fa0238791f5dc\n49d4f5dc155b7b8a55f46d55537192b6\n8661c4d0ab5e3636490ad276cd2af3a4\n2620443433d2292ebed0f46f915a3980\n73970143d9af7218c8687ff9b0b4e4ac\n95d082c78ea0b1befe52ffd0e748a1ab\ndbf5ea40382c5efed30107faf024a18b\n9c339d9fd8068f81351d9ca36f76b95\n430f87764dc3f455ad484915511ccff6\nb2ded1854643f1451c1b3b2ed8d13bf8\n7348ec0e16e99fe1ad484915511ccff6\n27fef9fcdec5a001f8f60938be4e769\n7c7b4bdc2fc34ffdb398ef956214258e\n7a8b8bbd24974013327289c00b6dc9ca\n61943ed43201e59ed7f7a4c4609b0913\n589829ef4fb0390e492d9da2668ec34c\na88cdbcd4fe502c743f32dd9b833c1da\n994dccd2cb784510a6fee8e2140acec9\n4cfc78be98de1d2bd607f0b8430fb29a\n37ba94e29b7d21ee41fbc1e2da054acb\n1bec15f362b641ca7350b1b2f753f3a2\n313ba5c62a7e746d2974cfd5336a9b09\n94e289c89059106bd8f74b0004a598cd\n1d1b37ce6d72d7855096c0dd2594842a\nd67d52783e2ef9b76179a6634d17b74\n972355f42223e6199cd431573238602d\n7eaf212097293229fd3456bfc7553c94\nf7e1a17728ea76dbc6bcadaedba80eee\n6dd5e21ca65a9ff73c837ed50dd492e\n11525a18678f7ce6ae1e1181f20bb9c8\n4a0e7f1129a9172349bb1cbbf9a4206\ne6a8f28b36533f8239b3360f500ac52a\ne431c68fbfdf826d561dbc0c83a98a32\n185bcb9bcec174c9492d9da2668ec34c\n45a355545e7a807a492d9da2668ec34c\n60647c98b5fc96b13002761e7a3ba3bd\nb89952c6f2dbc1aea50b88953d263a42\n1bbe463ba96415aff1783a44a88d6274\ne462df8166441ffaeedb49f6d982d28\n33334eb57a9d7bbba19d006f28e25379\n88a7740602eb0d59cd431573238602d\n44c5b57d406c663403f064eb1ac2f31\n74391d05121df162492d9da2668ec34c\n374e87fdee7711491e046801e2748f1a\n6352d748b1843287921ea62370e5ffe0\nf73dde8df5d0e5c7f91663a74ccd2338\n97a4d1ab6d58bc2ef60f0f3341009abb\n7e9448da23c3387754e9211d1e7afbcf\n81910ec49fc4951330e06a011e63236a\ne955b63a4bd738857178717457aa5d20\n675aaa5b883e2398d7f7a4c4609b0913\n7d59399c37925cd7b1b9d9bf8d5ee54d\ncacaca67988f6686f91663a74ccd2338\n6b95ac6189a395d3fa8cf35dd917fad6\n131abb0b13d6c5b97f0b1e4f6d35b0ba\n44875441fe578186d35ac2e5000061ec\na564c8a43f6a7ba5199f2eca998ded6d\n2b783fe4230af5436a7b680929b3b0fb\n497f67c006770b9f94e98ee4fdfd7464\n7212bdfab35f72b23002761e7a3ba3bd\n8ddae5e2493ab76af91663a74ccd2338\n7932489d9aa9fb58492d9da2668ec34c\n92ebdd82509fd637593ebeeedbff73b\n64e77e9e5887ce95492d9da2668ec34c\n235c8ef29ef5fc5bafd49046c1129780\n639a10b856336f1fff2c92c2a4f65876\n6419d67905503bf7a09708b19d8be603\n961396e0e5e46a4a208462e8bafe70e8\nd04c2161f32a6499a6fee8e2140acec9\nc6811f115d89758f46fb9c38320df24e\n5ed72ca90351b0c4d5b24cafb84903c7\n92c176547858fd2cf91663a74ccd2338\n3928ff39e32dbddbf91663a74ccd2338\n4dd8862c73931cafeaf14273fa406ffc\nd670d3919c87c91cf1783a44a88d6274\nd66fe5dc263064a2bc38fb3cb9934c71\nc0b10448880dec62056b4bd5d870b47\ne3f1f899d63ab008492d9da2668ec34c\n308a3c347dd24ee4fa2713776d82bf59\n61eb0af11765544ef91663a74ccd2338\n6ebfa5329b0d1439d4ea3f4c41b1b9bb\n8a948db5f12d02af492d9da2668ec34c\na97a00bee5585e49f05defab1869a09\n1eb1a8acd4185f49492d9da2668ec34c\n30f077da43f30e64c862eec8232fff1e\na7fc36d1b5d29280ad484915511ccff6\n459a01afd2d5d4225267ac530b1d88dc\n9c5b246616974299f1783a44a88d6274\ne9e8f839c77a03498307335ef66226a6\n7f2854516404a3a7de03ab2a27ba7531\n5ceabffee1c333293002761e7a3ba3bd\n99120ec1daa4ae1bad484915511ccff6\ndc77b920bda118d54627f3cd8db22919\n85208e245c49fd72349bb1cbbf9a4206\n70eddfb0000447c637b2bb75885cfc44\nd32f32d76d7f53bf6996454765a52e50\nda443e90e376b024b0f7e9a1c9f6c90f\nedba8e42a3996f7cb1a9ec000a076431\n8f77a33dbdea3d19492d9da2668ec34c\ndb549976c0b7b960d42ec7e303174a87\n924f413e0a7a6ca8492d9da2668ec34c\n2320dab001320f69f91663a74ccd2338\nf8594a24176f732b4c7e2600dbaebf40\n12f395270a3316d01666e1246e760f82\n95d6aae8728a0aed70e95b2fd46626d\n8f1a661dc1048e36297936c81e7f6629\na99be8e57aea8592a38859fd71bee28c\ne9a8bc335a7faf78f91663a74ccd2338\nbc61ea1b9348f456492d9da2668ec34c\nef4f9cd2b498a10a614871b18a2b1957\nbae518da1e709e83596f70d1d7edd4bc\n4785c094e81a5f8e3002761e7a3ba3bd\n966aaab0434c950cd7f7a4c4609b0913\n60cbc688b57f8b5446407779dbd69b2d\n26ab589f6838edc99ae676623bdd3284\n903a14845425ca3176e30bf48cd56fcd\n511e6440fad9bfa81fc8b86678ea0c8b\nbaf3304f1352fae41c6aa36e5af1449\n49434684366778973002761e7a3ba3bd\nf441e4f7f123bde3cd7677199133326a\ne6c900568268acf735836c728d324152\na78d31c9dd3cea02f91663a74ccd2338\naf34090f13146fef15afaa91253fa857\n4447ee47cd2333f6349bb1cbbf9a4206\n10d174a00639990492d9da2668ec34c\n4c86a55673764f05597976c675750537\nb659a94c6643282f504721639e19f609\n49e265cf00ecff0f59d9b12c05c8f809\ne3b04359a3e9ac5de5dbcc9343304f4a\nbfca24444b46e75e492d9da2668ec34c\n92e2317fd0d0129bb910025244eec99a\nb8666dca76b418e04c9bf8fa5a14f3be\n2ac0a9cdbe7ab8a6ad484915511ccff6\n426ab868a6acc7c6492d9da2668ec34c\nb2d6c064af0c735f1783a44a88d6274\nce33bf3ec6438e5bef662d1962a11f02\n64a699cf5b2a43473f7e27638e63d848\nc570ee85ecb0e514492d9da2668ec34c\na7579c588d289fee4671d97b0fd17f51\n74636f18a539da1cab610b0c94236463\n9b52e73f96d181969cd431573238602d\n3bd437d38068f4a61f285be552b78f9a\neb59a4b8deddc6f659fe320c015eae2\ne4494542ab04c033e6fe3612af521500\nc58f6a35f86a1802e8f8c11a24c52ebb\n99fbc3ebabd3b83e54beec3b24722e27\n300d6a7505f24959492d9da2668ec34c\nb33e6d5d6bdab020af7c7ad2549a1b15\nabddac917b144928f91663a74ccd2338\n589e717feb809e7c1c5a16cc04345597\n9e9697da825cbe4b3002761e7a3ba3bd\nb405fa036403fbdb307776da88d1350f\na8756f91fe03b962492d9da2668ec34c\nb11c616a19d702cdd7f7a4c4609b0913\n7297ec6faebb50aa1f285be552b78f9a\n95db11e86efa7c3e8c6222d771a6c85a\nba45d6c491637dc5820018801b237b3d\ne98fc1a9b608a0c1a8760470bc8702f6\n3797290f1dc83a3ab0e5659877cf3f6c\ne71d05f223d527a5f91663a74ccd2338\n617f09d333443b8e91745c588e2e0fa\n7520005e70a54526c266013a269e5f81\ne5b0325d624a692467d783b4714d4324\n1e2e68813f004d8ff8b8d4a282992be4\n606bd97f7337bf39b40f0ac0fb9a650d\n3fae0625f3cf5e862678f553478310df\n7f11908f7ea9483c415dbfd895473b4f\n233cf8ec4019005ceaf288f952624966\nec454747a071b83291a302a171d24a87\n5e685e076287215be8f8c11a24c52ebb\na13fa904e05d60f176e9713f57a5fcb6\n2ca91e56bef8cb5034af953b663e921b\n42c27211881f1377d7f7a4c4609b0913\ned72205562ef8407d7f7a4c4609b0913\n2182398f0f8fdd81af7c7ad2549a1b15\nea04a5915e3982aad7f7a4c4609b0913\nf1f670ac53799c18492d9da2668ec34c\n77cf056c6beffa5e3b6eb1ba4e121206\n5b2cfa084b8cfe389753496ba23f2183\n3020942d1547cf562056b4bd5d870b47\n5874e2ea2c2b71471b356ab8b24c147\n2c4d7d33ecb486532569827d39fc0af3\nbdc892547cceb2ef34dedfee80b7006\n510b1295f70873e2f91663a74ccd2338\nbed17aaa6ce899bed810b14a81e12eca\n572cbd8b4cbdf7f1f91663a74ccd2338\n28d27f1204c1b3de6512b7b24f3d84\n341c9b0583d31770492d9da2668ec34c\n5008eca8deba6555ee229bc98ff4457e\nf34a4514f72a3a767c11a4098d0a0259\ne792a2d799d79bc1b249ecc7669d184f\n413a7b8c5de6dd4ebb7b779fe99ae983\n5eb42c663aa7c8afb05550de345b6d0a\n9368cd9028151e1e9d51a07a5989d077\n34160b90f6abd883c731e4cb72d7c0af\n5456ffcbb7bd6b3e4460d09678055ab5\n7b86f52727b40120e3f7a74e12a274ef\na551977f078f362c492d9da2668ec34c\necd46956b35523fd492d9da2668ec34c\n20b0a82068ae767c34cc22336880d45c\n9542f23e526bd7aa24adc0b4355a9827\n11358c94662a68117e66b3e5c11f24d4\n6f36520144753550f91663a74ccd2338\n473a9ac8376e5a15ae0b06ef692d1ec7\nd080bfadaee310d8a21e3ca11c5bc05e\nc2220851bf50eda931ecc34700496180\na7d178cd0dc051f25fceaa39a8353bde\n4422c64dffcd8662eaf288f952624966\n22ae801d650a1e3d492d9da2668ec34c\na09091780fcf3af2e9777a9dc292bbd2\nba9b35c49d861f7f4e994a4c55e56a4f\n61b94385426a74323002761e7a3ba3bd\n7b8e24c31b7509b6dec3f6fd3a03085e\nb06f26c5403c3e922e653f6e789d3d8c\n508450cc9ab2a5fa98cfd47a860803c5\n3ee094648665bc3fca15770f07fe3544\n5bb8457da2bbc722d810b14a81e12eca\n434512cad2c10e09e8b2b8dc0c816caf\n30f68a6304d6906c9bdca9b7303475c3\n90f124aab57c518eb866f4a999c2a978\n769b26b459617608b04cb542e2c50eb4\n6aa1ac5d377261d1c2fbfa4bf3252b56\na7f0f0dce71747624671d97b0fd17f51\n5a85b2ef58145949213c3458a0fe5598\n7a338e9b13ae5da3245e874042d8b8db\n6b64af50e21c0006f91663a74ccd2338\n37ed1b9ebaf4b92deca22c501ad0a77a\n95792c6761663652aece045e8bdac80f\n91b738d40201bf18a413908c0e169330\n590ae1748c5acdedb05550de345b6d0a\na1949183ec03f3ab2f6cf9c2cf79a5\nc8df724ce6f12ca2d86a257784298546\ne127ed243617eaf04904d89e9169817b\n655102add1989c1064fad3c7b88e6060\n5bdcd3d77e1c91f78e437a27fb25efdf\n2a0e0b51d919f030ad484915511ccff6\n6b4622c4e15b5cc9f91663a74ccd2338\n3919e93cc1f3bf5bd7f7a4c4609b0913\n8efb37e93b208234671d97b0fd17f51\nf7b52f9c95ebaf3ff91663a74ccd2338\n6fde09bdd613f6e6492d9da2668ec34c\ncd7674dec40cb30f30e06a011e63236a\n79850e4ff6e43e6b3dfa4373373135f6\n523269ef7703a120cf004563556ddb36\nbe305d2400194ef726e926172da61b44\n57c6cf844c09c5d8b40f0ac0fb9a650d\n68151e7a9fcd8545851e82fe58f53ce1\n9d9992f7da4c888c7d3c9de9415fb224\n9040047cab148e55e8f8c11a24c52ebb\nf9cdefd31b167f95e8f8c11a24c52ebb\ne8ef93ed45300501bfddc5b20c9212b4\n7885f87669b8fbc73f7e27638e63d848\n7228564fe629f578e8f8c11a24c52ebb\na559b02ec38b9995c5fdf6b0c2c57721\n4363eb3e65ada91ae3f7a74e12a274ef\n5ad3a3c3b67433174733824eae5cd9ae\n22740f20eddc5420492d9da2668ec34c\n353bbd3b916426d24502f857a1cf320e\n709a5038988a70f58e6803fc947043b9\n732e0abfbd4d09858d775f6f7c8f1b0d\n4c52204e49ce9449492d9da2668ec34c\nd2a1aaba7e047897492d9da2668ec34c\n34dc6c4e022b380cf91663a74ccd2338\n32b56fa66c73c450a86b76551c6a3b2b\n65c7a3d8fb95311c492d9da2668ec34c\n58f3e49e746363dcf91663a74ccd2338\nb9027939e6c71d844d256d962a5df83b\n77727bbfb22c57de492d9da2668ec34c\n2ae5f2290acacd7fd5b24cafb84903c7\n63b5ef650f1020eb7fa0ee8efe00d1ee\na69a2807ca667fd9492d9da2668ec34c\n9e6564dce4cc128efc24661f5f8d5d00\nfd244782842c611b6443e5551f9d3958\n66683c677e7b40593c2e50348f23d3d\nac041c720dc66c06d1c83bc8b134e4d8\n3a4d572dc16ac52e201e82f29479384c\nc08c39b6ae7a44ff3935ca98160cbcab\n9faecbe3bded39c4efed9665e3f75336\nbeccd4a6031f6a5a3eaabea23fed5ec2\n484f0070df7d5375492d9da2668ec34c\n4fa95ea95b42125be5c1abd833032715\n9ecd81b505ac3a175634c21965ee6bab\nd015bbb45833955537b2bb75885cfc44\n5893038d979ce1bb725c7e2164996f48\n8da91a953d645457456cbf78e1e89022\nef03458b97c8775b492d9da2668ec34c\n73f9aa75944ecf0b9debdd405104de8c\ne9592e2a4fc74bf0492d9da2668ec34c\n813f84c21a081253c02e349cb722a77a\n811c349efc40c6feaf288f952624966\n8c91c7c19c20bc4cf130e9cdbbb1cf40\n96419956c44757fe71a782a4379556c7\n61dfc04e60e3df4b4c350d7ea5fe2a3a\ne8187497dd464b62f91663a74ccd2338\n8086d53c2535511597976c675750537\ncbe006da89cca7ffd6bab114dd47e3f\ncbbbb3aebaf2e112ca07b3f65fc99919\n75d28a98c151cbe678d2ffcbbc0020d\n20e0e65d8a10a88f91b8ec332e6d93da\n71b3089481026a9e677db18592980bcc\nfb381061e67388ba80360680c1602c7d\nc41fe0605cfe70571c25d54737ed5c8e\n9aa80e9e5adc8084792de12ccdce67a\n8b54af871a3ac77c492d9da2668ec34c\n3b2d9328ab28f70122c4f7f8c92935f0\n3fc6ab5d3c52c128d810b14a81e12eca\n21a8b1ad63a8d19dd7f7a4c4609b0913\nf93bbb0ae5d66c075fb57c89160d1cb7\n329c2234d134dc89492d9da2668ec34c\n9069ccc5fcf22878564eaedaeaa04f28\n2bf05f8a84f0a6f33002761e7a3ba3bd\ncf88ae03d8cc2fabfcce6278f5ffb13a\n48f2c6ee2c8ea7538cb22acd3160c793\nbf91d0169eae3bfdd810b14a81e12eca\n40f1e0c4aa317c4d492d9da2668ec34c\nedb86d102237488ce8f8c11a24c52ebb\neeef39917dd113e053624ac0db0f7e5b\nc10b1973a0d692ef910979f825490a99\n9d0043b17b97ac694925bc492489de9c\n2f1bc92c53f359d759a6208793b9dfca\n8da327a8eea887fd492d9da2668ec34c\n24bbe7f32727901aa6fee8e2140acec9\nc64691882dd54d0eec1a944671ba8259\n1b938d400e1a340b17b431cae0dd70ed\n88aec853dcb10d526efa145e9f4a2693\na1555d448a9d6fa0666bc0b629562709\nd89e39192db6fa78492d9da2668ec34c\n4f6a5769aab5de542b848a53a7028d2e\ne854aa6a9c97d829cde6b082a301e49c\n4e1dae6ca4f220048ee0cd746086d989\n341e18eafb46f892a6fee8e2140acec9\n5d60590d192c52553a23b8cb1a985a11\n48106a12bdc3f7d8f5ee22e800bb9145\na2bfec12cf53f198d810b14a81e12eca\n59bbf4d0360e4cf733e5ff708bab9b06\n898dc475a4f36d0d35836c728d324152\n39c5291a2dd17d6430e06a011e63236a\n1093d35c2ac73bb74ca84d60642ec7e8\nc649c3e28d05e0877c65caaca24f3fa0\n9a3d7e6194b7a5bd3825a5bc524f67c9\n4c668aab2c49f9ac9bf4d6e8e41d9e5b\ne2c3729e9729b75f40ef1c8b63a628f9\n9efb86c07170d7e897ec301178d1c7e\na33fcf84726cd862d866e3aa112e4663\n740cc6d4d1c6901eadb91c074e672e22\n43569dc880494256b40f0ac0fb9a650d\n35c2de57ee36f652492d9da2668ec34c\n6ade3daff4827379492d9da2668ec34c\n4610136087e41261f1d6726679b21945\n41bb8be36df856eb847d4e46a1f9f05\n5008d5e0ddf1b3dfa37d17ad9e86b6bb\n551be68d484c8910f91663a74ccd2338\nf40332e31675a54d492d9da2668ec34c\n8f3c91049838cdf2b04cb542e2c50eb4\n8b6f6304674b1280d6cb6d27840b9d7d\nea577a1e9dffe7b55096c0dd2594842a\n53eea17c88e31519492d9da2668ec34c\n3869d2fda85428c4f91663a74ccd2338\ncb78334a5ad9517d7a31dd5af93fdb5c\n8b3d1c34753e095cb05550de345b6d0a\n78ba9e32a9a5c276f69d13812ce67f33\n30f862f46bd96da835836c728d324152\ne67c305a676930b123c95a77265c8dd\n3d267294b4a01900b04cb542e2c50eb4\nf3ece63fb46fb129eb71e9117b10dee6\ndfc9e6a84553253ef91663a74ccd2338\nbeeb89082b38c83c992640a67216b77\n925c06a5aea45ffbaf7c7ad2549a1b15\n357275196334dc4feaf288f952624966\nf4cec47ced59d95a3002761e7a3ba3bd\n5e5d9a681b53ee0d3b8d5c0ebdd194c8\n38bdba5f6455c5ff91663a74ccd2338\n79317a7ee8c26288ce265ed390193062\nd4e0707b680e61e0593ebeeedbff73b\n1be0108997e6aba5349bb1cbbf9a4206\nd19ab2197f8e8582f97cb7fd36f15198\n5c28b7d86cdf577c944bd645bf5a9d4f\n3211fc4f31b15964aee892adc836ce83\n1022fe7dd03f6a4d4d5ad9f13ac9f4e7\n30518e2d6fb5dff259d9b12c05c8f809\ncbbf0aacb76a1ed17b20cb946bceb58f\nf6d1ecef43ed4eeb907f4a296134a0cc\n4aa9b5829edec8ac4671d97b0fd17f51\nc42b305fdffad7c9cdc9f3b79a373ad4\n46323c7986200588492d9da2668ec34c\n36ee2823173fecc8d22730b0728b2fc9\n37e3b1b00196001160902b587804b688\na8febf7ef6ce1d8cf7d0fb681a992ad6\n4dc7fe6e98c4db21d79b19c7c4f0e293\nd794f296dbe579101e046801e2748f1a\nfe5951beafda9dc5b76982957f05710f\n611f235819b7c26267d783b4714d4324\n39311ad85e77d3b7492d9da2668ec34c\n7fbe0c40524fd37465ba78ad9601cf1b\n3469b7f0709ed90ac681404257d94ad9\n69e35c579a68fe146045fdc35419ee6c\n3db18530ff6bbb50f130e9cdbbb1cf40\n76389d102e3fb729f51f77a6d7299806\n39c2f4690aff8f049a45ed2554d2f93e\ne6e65bbad248c82c4c59782c74cbf5c7\n2acb11399d4d6cc335836c728d324152\n4b71f633ddb55c6e309160eb001312fe\nbf3c19bb6bf16aa8beedd4e6b38acced\n40fc53f1c111a19c7d3c9de9415fb224\n379f2db4f028cd7925e847faed0661b\n1c08f2aa305f124262e682c9809bff14\n5e6d8f9275fc311fb7c42e403b7689ad\n6f11d4ab55b7a63e261fd7080fd6f759\n1e2ddaef401676915a7934ad3293bab5\ne896f38e6b62f25ce030e064f3b8af2b\n6584413da69096db65ba78ad9601cf1b\n8a67fd47001e52414c350d7ea5fe2a3a\ndac4af24e2facd7d3000ca4b04fcd6ac\n452d2a10ecc96b34129a4a365910676\n5427106126c9851dc862eec8232fff1e\n43681f9356e330b36ac40071701c687\ndb812fdfacf4db8df51f77a6d7299806\n69e591a9769e03012c528d33bca1ac2\n51591397480eecccf58894a68fdb6cca\nd49ce68499ee980de6c5cd45aa112726\nb2dc781aae692b2555182f299fe41fdc\nbb3516732bcd45f2490ad276cd2af3a4\n588dc044970bc56f3a4a5c95fa1b0032\n6e12481d3158dd4e8f8c11a24c52ebb\n3024deb09ba519c517089ab023f65eee\n502116e5b87d1fbe69e92c4e191537ef\ne2809feb8c0b535686c701087a194026\nb1ef4c02ac7a0b28632c9ddc45ef4651\nea628b4568d4eb527085b4353236aad\n6ec02d7a508434f1b0957d845ac33749\ne26ac9cc4c44f8709531b4e1074af521\nd107532567ee3f316663d1953862c637\nb2968ca25d2e2fe0f51f77a6d7299806\n19d3ba04e165e67dcb4387db711dc078\n533650991ca60fbfdbca69f936e89647\n2dca240a3726c004a83826e22c7812a6\nbbba083270a2b0d031d7d27dc50ba701\n79397634d362eaded96cac5d008c9fc3\nd9bf326d8ae7a430a5a7dec3df261ad1\nf4a0767a3d7039c38a841ccdc50a763\nf14a2e78a93c559b253b862f13dd465\ncf0d80feb2f6f71d9df508b37e4a3518\n96885d760de5c5e174335c2737ecf4d\nfa33e83563fc2765e238f87ef5154562\n9ab690ed709e7131b1b2ecd73d1717a3\n8ca2c0a0eed4a31abb93315448664e1d\n977b3355b3f93b09e6fe3612af521500\n691b10e17ba828e2b161f36d4e309050\n2948af0b6a12f1c7ad484915511ccff6\ne5d285ad477a33a27eaeab1f0c9120b7\n65f3d57bd9c6911d492d9da2668ec34c\n3ae2857e04641093b0957d845ac33749\nef544a816432b0a78dabc11b24766ce2\n752102fb466042576a63d6c64bf6b56\nbdacb728b23fc758fc0035da39bd5e1\n85b73c87c4c73263a7c64d6a7060b75b\nb66ef4dd7cd2674f91663a74ccd2338\n32408a694ac56775ce62834dbceac22f\n1efb3d9f1cd2499c5339eb67f6086a2b\nb42953e6e55ba5d4d2bc32977ed52527\nbd4fb5e30bd993727eaeab1f0c9120b7\n2268d24a64c2b20b16222ba719ed2541\n2e291f35746e94fa62762c7262e78952\ne84d39ce475415399f165f18603a28b1\nc4c598c29a542a5f150539b40d03634f\n4f4d7ae825908e303a8be023e0f2e100\nf5490bd0c64cd42b9ca5a26dad9fbaa\nfe20f6a58ca6c84c914eb005afa6475b\ncd989e48c5348bb530e06a011e63236a\n2c795b27253f9ada336961c9971d866b\n8cfbde91dc175e2ea54b9afa882a89ed\nbcea72fa334f593bb41b7625e8c42dfa\n5a30a8edad307d8b04cb542e2c50eb4\nb9908906f1e1f65b8e800d2aff155191\n8d40dbf5ada2f6f662e4024c69de065d\n96c019b564eb9cfbf3c9c1464e55d580\n59907bb6aaa7afeec283ca2c9df7372d\n4bbd110ccfc81dd336b0f2a1430e993a\nb7d4357aa24126a227a7baff096e3087\n4b3ddc244c521f5c6a9ab6fc87e1604e\n436ed3a8e05baa0d492d9da2668ec34c\n54054535e70d9ca0f91663a74ccd2338\n758173c2c4630eab21f01d01c8c9dec6\na07b5b7014264e0330e06a011e63236a\n7dc1a66d228c8787e39e97231748e33\n7e298a6653f0febd1f30b807ae39b61d\ne05172ca06db0781a0a34f494d525bb7\n2b9fa5950d81d925cf004563556ddb36\n987770212e08392d2c528d33bca1ac2\ne344e50eb6754cf890ef7803f19df417\n6bff9667fa51178ce9930a50732a44eb\n3270016f24001d9f3149bb9ed65c73b1\na20760333defff73d2ef7d159eb54508\n8830354625df010037b71c02ebe8cb4d\n311e72dd86f0daa981a172d69c52a28a\n8027892aa03a3d2c907a5a34fd8df2f1\na0a01b87633d31061e6becdb5008d9af\n45039c59b957063e742728b30848ed03\n6409f917fdae612f492d9da2668ec34c\n990ae87d8fb108ee80bd85224f0b94aa\n381782d3562f2fe0302dea4b3acac371\n654b7415b53b5138fc5718d28351c534\n834af6ad2a1d5581492d9da2668ec34c\ne9c99b6af129c22cf91663a74ccd2338\n58919c88a1b5b0b65cc7bfbb0ffaa52\n7729d76b67931981f9111ef49c078dbe\n7f11f4251d2faee4492d9da2668ec34c\nf859a1ed07d088be920de219c00d1c3b\n7e81b5f79e6899cea570c6c691c987a8\nc31483b018ba90c30e62accf4408263\ne5d6c3d62f96e28db3d655d5fe021844\n516d94f2658b2258d79b19c7c4f0e293\n665511c6bccac090492d9da2668ec34c\na3260f0c8fddf11cf0f4992137d8f4a3\nbca76c4925b9a33177a7d775ec38a82c\ne28c5e90a01027bb4e83b37723b7fdca\n3baff0f05a4ac225b872c385efc13c74\ne6e00a7324357c7dbec105fec16416d7\n2de10784fa2655d6ad01ec966c80ac91\n1de49c5853d04e863c8d0fdfb1cc2535\n184c07776b38d92e35836c728d324152\n331bfb4cc56f09e201cbed672acdcde\n87991eba27985f3a417a8f1d2c94eaf6\naa4b1153a1c4248930e06a011e63236a\n6b70334926f7dac3f91663a74ccd2338\n1b80175cc081f3e44e4975e87c20ce53\n8bd75ffee48bb4b845fa198471a5a8a5\n7ae6518311bf2f66e1a0327ca4c4d5a5\n6190eb8be0f39ad782e3bf439621ac4d\n8b2949a4ab8f5a7d84c7dc40ac6d743\nc55077d0b8fd893fdc4d371eb87a65ca\n26638126794a48d9b0957d845ac33749\n78446e1cc15f757297936c81e7f6629\n9a8bab7a07a869d1ac822f8036859e60\n3c9bc4876a03093414b65ac180970edb\n66342d92d51f402d3f7e27638e63d848\nc5afaadb73323de9645a86b04c64b372\n6c0fb1806d66a9cc3002761e7a3ba3bd\n1028b32dc1873c2afe26a3ac360dbd4\n676287fd6b02428f2fe023c7dc3e5231\n69933c14a02d65166e28ffc6e1f368fe\n20964e03ef001d8910684e111251a45\n3dc39c34c37860da2ef1c225dc7772c5\n7792861e0bdb95a270a43c2d978e502e\nf7dec3c72af895884cafc8d32c041834\n4300fb717f89c832d42ec7e303174a87\n6dd44ada2f481c776dddf6f75fbd4a4c\nfe224defdf08a99a3002761e7a3ba3bd\n9144c2c7b7d9f733ad484915511ccff6\n97a87f40f5eb6f04af7c7ad2549a1b15\nf3f331e64d12b76d727e9f790cd597\n7f539a846e9e88f0d9fad8aba2c312b7\n2c052f5541d4d5689b2d7f86be5d0083\n77b457b102a9b82f5dca6305fb9f97ca\nb50529fcea40cea9e8f8c11a24c52ebb\n791c14d53bd565f56ba14bfd91a75020\n73abab8429d1694c82e3bf439621ac4d\nb10dd8cb211b26ba98d5fc0473d00a1c\n6730f663d0e012506f525e79a05bbcb3\n3aa41731c9bde97796d5112fb101f3ce\n2b70fe0b5669985c100bd20b85b3554\n4f51dd4fc61c41a27ad11050da24bb12\n54f13fbf4a274267a50b88953d263a42\nd46e16509b1c91b3933dc172307a6bb9\n6921b41c2f6916e2bea04b36c2ada3a3\n387a0509406a8653b40f0ac0fb9a650d\n3bb8e6e640c32a7c36b0f2a1430e993a\nbe8dbd9726372752412dfc90452742c7\n587ee5822bb56bd07b11ae648ea92233\ne76b4872f067395988dc0b76b0c63f53\n8ec95f15623085a7b11ae648ea92233\nd0cf0982f16e5d583178d91f48c2217\n668b9f6517f2bf501e54ac67f0143e13\n1db766ad516a6993f4b6538438a0b930\n5e191b9696ff301e821a29f3de4d7cce\n8b552c23c064b96179368d1198f406e7\nfb858b9e5f2b3e1043dbb6421d614c0d\nddb53381dfd0a2d7d2b12aa6a0f050b3\n3e2375ff9e7af8002861ed753d5b88a1\n5c233981556ff20fcaf36640a0c92faf\nb5833d19f6fbd9a78c67f98c135b5710\nfd2c754ca43457107d910d51d878f708\n1d7fdf837564523dc89a28b5e6678e0\n768ea32d8303095bfe6f9308e75765b1\nc04d0cf81d9d870a7aa0699f5d30fdef\n83f74ff9d96c4d77bc5804ffb7fec416\n25957008f839ef647abe6643657b8aec\n8abd5158ec94dfd8924bf081da6f024c\n903e861a95d6a2d5a6db47a0a040d0ff\nfd05e5d8fd82508e6d0a0d492005859c\n7212f652dd37232a80360680c1602c7d\n41bf66b762decaa42c6c98851414a9d8\n62127325480bec8d2c6c98851414a9d8\n8f6634a231e3f3ccdfe9cab879fd37e8\nc133c2af39e7d169b1a9ec000a076431\n69a6407f21509325a04c9785f6d4e317\nb94002e3a92ca65efdcf3d27ddf91f4c\ne57aa2d477a818ed2af6ec758865822\n550fa302257e193ec93d39652bbb58f\na7dbbe66942a7b7c40ef1c8b63a628f9\n3d029e681e0b4a0c12bdfd84d1dcaa33\nfaca91ff3f9e2b93a87dbaf229daf408\n2dbe453ba389adf5f91663a74ccd2338\nc12ea730ea29f8945914d57d976758c0\n850b424d90dbc66f4d68bade576979ab\n82b42b0f3ba76484e4fa0af6f7c25e58\n6beb16fbb2337f65936c7265c890fef\n7d0467dcbd13505f2314deb821327685\n2cb0ac27f1cdb3f0b2db0181fdb9f615\n963452f2fc2a74f62a3f8f484e6c5c4f\n674f8f89f68491ff38a7c518e9c1b4ce\nb8772904c25b61ac6b2befe83a0efe39\n5f1b45295c72cdf03a4a5c95fa1b0032\nee03232aacadee87d4266d69a5c6f129\naa93247a7fa69991e074517a246f1e65\n9c0c0e1a83243dde6f283df3449ca535\n6163793e4e973450a9b8d9d3b5cf54cc\n27a8827b0ba5d743169bfe841050f4a4\n95039795fd8db944608244cbb9b86bf5\n3503fedf43c99f0afb63ac4eaa5569d8\n8ec3459ab9fa3ce8738e43095496b061\n59f9d0acb4cbb1465611cca00f1f427d\n8cfc69d79fca89223a4a5c95fa1b0032\n54263fcf9d6380d343638dabe1eb5336\n7316e49785de77b9630abf945d2f3e0c\n3d5053323021b1babbaf011bdbf27c0e\ne9371c17042131d93506b420c6bcd44\n2d701c588b3bbbc458c88d30f502a452\n3026908df3400c1a11d9b84664f8595c\n8a9d6ef075d5a0721242c827d7f16c58\n993dfc1874d17acd08b731e9ce099e7\n94f9fa9f8a20f7d040ef1c8b63a628f9\n7fc8b858cad8f5849df6f10c48eb6cee\n808cd961edfc236c11794406b17d66b\n1825f6f71e68da9da36af77e45b32071\n4afe3d1ef68515bdd6a6b5838ef6b356\n5fd2d226435431976f283df3449ca535\n9570ea7fa3a0ef775436c76691cf3d3\n50aa55467c87774b7215a1e3ffbff428\nafaa508214b7515a161d68600952d375\n94c8b873c9214a726e18d8b0769ce75d\naa6f5bed94640d81c20bf61cb7d8cc34\n38d000cadbd439da63be0260dd648a5e\n79ef569979791f136f10b4c199f4a16d\n6da85f0549621b837d379e8940a36f92\n35f83268d4280532dc89a28b5e6678e0\n4acc9de888c0a73dca6910e4922d61aa\n30e8b5402898334ef4b6538438a0b930\n48dbd34c00d1a5ccc9daa743e958a401\n5d9906be39e2ee012f24668c019c448f\n3eb9c5fb2a7ab54d490ad276cd2af3a4\n5bfee410a492af4f65ba78ad9601cf1b\n8fa742589b47b596e8f8c11a24c52ebb\n732ee6a49bd6db06aed393947b9cb125\n21cd62313612a7a168c2f5eb1dd4dfaa\na235f7c4947aab15bf40bda9de89848a\n8e0832b4ee38c9743b8d5c0ebdd194c8\nc8420e434b1680edaf7c7ad2549a1b15\n6d619704ac0bed9827eb00c151c6f711\n6b8c5cd585ef8c67ff2b8acf844d34d2\n6a20911ef197f358efa66822a012535e\n7521f2a08fae96a7666933f2248e8d9\n9214670b7c1e36bc1b1e2ecfb322ccbd\ncd6d000df66f03368ce66f12ba927a2b\nfe6b3c001a86d844d5767a0de8dd037e\n554dbcee2b9ea7301c75d484f9069623\nd64b2ba9f1f35362cffd61677456447e\n663f02b2ed46f991480b0456bf1622f1\n99a16c86225e538d9e72cd13d3c26c66\n7e5dada1bee3e6dfca76c527f185435c\n48015ffd76a443f89f8c3d2002c77ddb\n515f8729b20cb3612412319d111a4961\n48190d05babcbe2c68b95f9576f01a6b\n65e770a8307a9332e68b0e385524ba82\n6cbed10088dfb841e2a5f8edb044130e\nb4827a7b42d68aadbeab82a04eef83b6\n73b369b9808bc2d0f6ba522682be8978\n562fe0ba05c24bdaa52abcb0c06a3598\n6f8dfc86a34548dfb0380c06db6e7e\na2eb6e2ab073dfb2e0340d230bdc7ee7\n8098750b6089a9d8ad3a7d07aac2767\n662ecf4b0cd1f3d61f30b807ae39b61d\n114b563de051057fcda85f6a3e19b0a1\n751342c7107c86f0fa9e9ca2723d9727\nc0cdfbbf3a80105fa8699b6183baa203\nccd49951295cb4cbe139cf2f6f121cad\nf90dab51bec2bcd1a3340564b56a7f70\n4fdcd44fd622400a97fe55e7ac43b9fd\n4959bcf3886dc907108366689dda0d5c\n8c3a4f26d6ea2c864a3bb1a89bb7ce84\n3a0e5dbb68e58cf543fad16a067ce812\na27818db3f288ac8473f10e6caaeca56\n2e28fe9594c48874a6eb1dae0394cf12\nac03fd26e5c499eafbe6ed8d24e16d28\n28a60e0e9adf7eb0a3340564b56a7f70\n57a20ffcc530b8693b48a711df82173e\n4360c9c8a22facffaac6edb721277502\nb239fa34b4cb5a8e9b75b6346baf0c12\n753452a3a8f44bd38b69f185154696a3\n3ef60b4e28c22b3bc7dd78af359f0fc6\ncc8fe2000b1471b2a85f7c85e000fc79\n52d687e4f4c59dd72535b68a1251d8a8\n87afe5137d675efb73418f9a8c25ad1a\n6bb6b27aa687d422d612b1f62c413c3\n56902e76cb4f1039c482eb499cc8fbcd\nc236deaff8c6fb0d29c9a7a92b0a566d\n2dd729a07206d1f5746cec00e236149d\n78abbfe9ab73729f56d13e757b0dc374\nb36ec4a65d474384629bdb3bad305eb4\nb8049c767cb298745dca6305fb9f97ca\n735df13871e3ab4edf6cfab91d65bb91\n5c4c50c0a987f8c2d9789e40093c1324\n37cea3ba8e5a146da6fee8e2140acec9\n126e65c55961e5c166f17d3ad78f5a62\nd712f92ffb883fe6fbe6ed8d24e16d28\nd01321ae63ae0b40ad1f278e1513f3b7\n38e672f611588c0546863a778f871cc\ne658d490aaad69d1746cec00e236149d\n7af9eb2ebacde5422a373b90044f1dbe\n490384776503eea9e2dee6f9fbe318ea\n37d7029722aa0d91904cae5fc41c2d5e\nb3ef15af53eff822423da7f4f4231bf7\n7bc3dbe5a36791cb451e78cdde0ba44f\n115b11a77b8d8c3c110a27d1d78196\nd5b132a3e903e8fc8ad3a7d07aac2767\ne4b0814cb9a34107efb405803527fdbb\nbe745a383ceccfe453fa79783efbc3bf\nd1f76ed6072b9332ee558d9fec5dbe41\n86e2424968b01e241b94efa300287e71\neda8edcd64072b0db784faac204319d9\nd0bb642e810bd2fea6fee8e2140acec9\n45127e6f4fb5cf568173979dc89222c7\n4bcf02d408a42fedc399b0e96597941f\nddfe96c6ec86b8752cbb5ed9636a4451\nb5b0a880ff4e26c1a48e53188865c070\nbb9bc0e6f8ec17bb7b07a77641318a82\n5c52a6b471eb82b64ccf4672ec1e7efc\n3baacc59dc30783a524dd35a546a4c2b\n376079d4c844328ad6eefa796d2f261c\n3a95602170ff3fa89c0f0342c78089af\n45fa737cbfa8a8b69b75b6346baf0c12\n3925bf96c05c49d362e682c9809bff14\n52e2b4be107a9d6495bea7c29e873d16\n2f24021efe2ccfcc2db431502a680805\n433c6c88f1a43ab73ebe788797b18766\ndfdb73c6bb358fec18c4d7ee5b83ed4\n9d472f3426868826c43cf68e273d1539\nf0fe5f6030e999be3b9dbfb07aa21fc\n3e1e1070ed7a0ba67484091a041fe77e\n41ceeeab52fd3ed3a341228b21d337a9\na0f6ec9aede1d9039bad36d0a57d0adf\na23e9e5ace917aa350ff3fe5a0fcba13\nd481cc9e7d6d7d64baf5b49ad7809302\n575cb36c87cd4896c5ae524fbf4f75e1\n730fc3ae87640d952c528d33bca1ac2\n2773ae187d1e9d3d504721639e19f609\n59dd7258a2a554c34671fddd657dec0a\n681f4302a8bd9698f4b6538438a0b930\n3a9de2db9d78546892979c651b40698c\n6b10b9f8b8f38cfadebf8d14d5516c20\n5840d369b3e0e40f7c4ed45ce654123\neb89f3b0af31bf40a97cde0b3996ce62\n63687e533c0b16b6868fb986bc092533\nff14d078e2f0f8c65242f8291aafac22\n5d6a45296fa6c1ff7c21c7b1e8b3e343\nc7cbed6203120aabe9a3ed4e7aae9cca\nfe1081843a08b7a64d8fdc4d7658fe42\n6ea006e5c76576b89753496ba23f2183\nba3b1064eddca7212d19175e7d19b7cb\n9cd5f64caf7077ec3266c035d8afd13b\n12a56b6d02a93c5c711beb49b60c734f\nb53373122c7964c531a0ecc0d5a7b3d5\n5a10fc10de7bd8cb8bd24d13dcc47e64\nba5054bd7c2598ed832fe5f29a662936\nb475d6f1cfb6eee21071105723d4cf63\ne6b9b5d8b55df575cee7fc32eb84f3e9\n2d80c89d4284b4db21f01d01c8c9dec6\n6a152238c2ae02faf7b2f235a439923e\ndf84087fe057385019e48122ff512ea5\n6501972156717723e8b2b8dc0c816caf\n64ac9e029c4c9eb1671565dae7014737\n79bd56e6a44e5bf1a3f600c356573d21\n44f6f1cadf8e788f90a9ce3e4b15521e\ncbc5e6fce716e48ea28e529ba1f4836e\n92b81e84090fdab2f027786820c3fec4\n4e0beb356493c9cbc862eec8232fff1e\n6033c5fa61cb7b79b50d0c6a0c254040\nbfb71bd97fdedc6c48ff063e62e02115\n813f2777195efc4e19fb4103277a6b93\n6f04104e178fb858f7628281ecb18112\nb1d4d7c5aa13b0642a3f8f484e6c5c4f\n3f7c81bc7eab161e19fb4103277a6b93\nc6898b62e82e61a8930422448288ea\n17b77403b80de623f1783a44a88d6274\n789daa82e0366966c862eec8232fff1e\n512905c0211b947edc6f96c9bb9e3ae6\ncf20398c0c3e0359fa2037e5e59ff423\n33dc06a8e0933b1efc385a284336f217\n72d7299f4a0a542c76f992c4dd795e91\n53a1b68bb05d5b1bf51f77a6d7299806\n28ea1d2d2ff08b1b551d2444ac95a3d\n72ba6d6bdc6aeb7d330a170e9ceed373\nfbd234dca7bb201c1bfa4cc8d66175d1\n6714df9bb34178e4f51f77a6d7299806\nf4a36a5ae5a596942d19175e7d19b7cb\n8d3817ad88a809524b9112ce9ce98204\nc05ed12b1bb79ef6d8e8a8a207ee5bd2\n72713f2b894ad2846d16cefc94cf3648\n805bb12faecf99a9bbc0e8a3b6521117\n37a273cab5c24d457e871e09a3769b30\n40d4acc240c458a970aa4d5182ecf167\n377fbf95d0d5e9eb90c9244ba8c4eaae\n5c2b9c31cf63b0b93724abdc4106b950\nc0e3582a0c8273653c4f66791e25960f\n2aa1d5cc784b0b65f51f77a6d7299806\na4ebefeb5cc26f7378a371eb63283bfc\na1a173788669c84befb94709f30ce0d2\n78779361a406474db516c05d046e8e45\nd4a2a7d81cef335cdf6cfab91d65bb91\n331ddb6fd9c333456cbf78e1e89022\n4fe364b3390d3e158afe76b3d612e00b\n43cc05f81df8307a4357a62465045ec4\nf678b1e737eb4d5c738e43095496b061\nb1f85c18b3ccbe3a8bc6f322a9608b07\n2dd12e29d36c2b5519fb4103277a6b93\n609746ebe63abc2c2f38c0d2792fb5e\neff6231acedae01c17103f9c0716a636\n26da81dbdf7784dddb984b8f0550fcd4\n9905ba0488b0471dbfb0f09ba9f2d99\n43f15ce32c7c97ef19cb07ecb5b4102\nd0d18af5959e613ed3040d716596ad68\nba40e15e28eeaabb9fad3726e97eca06\n37a0959115e6fb4ce7c7920f6a65a54d\n751667777ff0926ab03957cf6f6ea666\n720bc3f0677a75fb2f134420f7b0d7e6\n637b36b2e5db7f513f7e27638e63d848\n3b57aac4b7f4b9f52d19175e7d19b7cb\ncfc758bfe8a1cd478c159f8d5e761b17\nd0b06607653b1744a8ff3e07cfca4801\n453e8c067c8cb5d8f51f77a6d7299806\n3aa228edd648d1e1f51f77a6d7299806\n32c2fe641cc95e2d3ed2a8b3ea354e3b\n64e440b5350da101512d71be7dbf2d60\nf5fdaff0ac02f106e8f8c11a24c52ebb\n2a1f13b41192e80bf51fa0238791f5dc\na52e8bd8b570f268f19146fa01c25917\n10991b3b01cc6cc99982a4d6320875e\n4446234d12158c42b161f36d4e309050\n8aa597e8f5498bb0165de6c381540e39\ned3e73a2609bf304377b9297f3055210\nd5cadd520263753b65ae658fdfdd758d\n33ce7f85e65320ba9a404da609e2789f\nc8860d4563be0f34f2b7580a739cd4d5\nf550b5413eb040c29829306a513f9466\n5fe9ae9eb1ece960c423490470c47d79\n96a19b41f440040426f59f4497a464fc\nfb71fc8021c89cf342d8a8c5af8997e8\n4c8cb8be444fd405bed1bd9593e318c\n8f54c32d7097b753542dfd131ca455a\n3dac0fd995c747ab336e8bf2357c029a\n38e904bee502bd31e8b2b8dc0c816caf\nff3ca63c75482c31f51f77a6d7299806\n5f256dd64efba74a4316d3320fdfa899\n80e45b0a5fc1d3ed68bbb8e471856979\n58bd152fb816ad2f7f91c3974257b780\nc9913221819588b519fb4103277a6b93\n97df0e7773e51feb331fc18393f04d2a\n733b580501f3e25c21ede3e0ecf73091\n2f4fe1db48f0cac1db573653825dd010\na232eec747955695609e2d916fa0da27\nc56dcaf6b862a6329158e0f216b27548\n74d4b9b13cd160e6f51f77a6d7299806\n8757370fa33bc4e9419786e9c37fabbe\n553c6c2a186db82597976c675750537\n36d314f3b118caa9bb557fc9202b7772\n9aecd48a3af10deeee83c0324834f3fa\n5202edffd4882c252192179b64411b43\n47f0e1452ea20e4856c07129c79effea\na543f7e8114b19cd5397d07b571cbcb\n277fb4da6bea894c19fb4103277a6b93\n86a94d95c2aadcff1a1584303f0b5ee9\nd75d1c46cff08f4767c8e42cd3ac65ef\n7220dcc0f3f95da3a84d309c7a35a478\n9e08476e458e21519fb4103277a6b93\ne287403fb2f4234560b08e5f4e1f1a8f\n1c2caacac14dfa0019fb4103277a6b93\ne0a19f7c41d7489211fc2b865c2a185b\nd1c2afb3c53dc7c8c563fcc2752ece39\naac5882aff90763affa93170c5cc3d58\n8af939d95f201d17283b00891f680579\n64eb6d8212acb69fa094848ea4d06501\n79fd9633635ab7f6490ad276cd2af3a4\nefb0e98337c0554960257b24d454e22f\n3bb2201ba3b8709523f4da4464aa0c0b\nb69ce6bf8156deb155252a6eccfc24f4\n276a4e184b9d71c4d838ae16242881dc\n42db4f765f4e6be414038d588fd1342f\n181b65afaeca2ee1a6536c847a708e24\n52f0514f5c38bc96f51f77a6d7299806\n77105ec0251d92a8ba13aa51cc141639\n38dd3fee84698e5242ecda58458cd17\n100b18376b885f206ae9ad7e32c4139d\nf31f8722de9008c8c5aaa7f1cfa788b7\na9e72050a2964ba31030665054ebb2a9\nc88eb06478809180f7628281ecb18112\n7e433512ef8beb51b17743c18fb63dc\nb1f5b155f8e080c765ae658fdfdd758d\na86c5179fc3f7ae114038d588fd1342f\n22b48b577aab6201bb99d7af794753a2\ncf04f5b16aba20e3e3849910c5019154\n7139a30ff80da3a6b12dfa50fc9e07e6\nb11640431506c15489452a0032ea575\nf1fcbd856669e000118128b8b252e07b\n7ec876482b8d80ce5a8ae8f7c307d01c\n1079635b3da12a812cee4bf5d0f11ffe\n3427a6029f253860450621b513a975bb\n97f1121561e481a3a1f1563b05df75c6\n40a32b11861df98133ec62ad9f83dbff\nd6e5a8e9e0d5dfedb0957d845ac33749\n99867a25638b6809b91b871e750ca615\n854f3cc942581aea5af597c14b093f6\nef45086ec881cb657288e3849fb636ff\n4fd654bdc7fa4658b0957d845ac33749\nea62254f0a5650579a8ef44e1d2c5b75\n31d026a65b64c4d5f529761e946287b2\n11355c7f7ffa3c09737d107bffc3cd98\n6169073a194742c5a7de7deb16b90a60\na374da8227eca67b89014675a548cbb\n2c2fbe0622220e7cf51f77a6d7299806\n971a98d242991e2222ed3259ee7e608a\na7ae914aba9eb59d84498bc295cd5a4a\n661fcd8f87d948f2fff16555386d173d\n8e21f7a88cecf4ab5ef2246d39b30aec\n3b606ca14c5f968319fb4103277a6b93\n601cddae7aca083a2db431502a680805\ne2ed8de5542c5fcd215a29c5523c5fad\nf54c7cbbd49ec8eb429c1439cde9f6d2\n11040f463a3895019fb4103277a6b93\n5d5ea6ab578db7ad331fc18393f04d2a\n831ca4306245810435836c728d324152\n4d3bf8ef55b4e4fcdb66736e6592e424\n1dc63eb0c6b1102f5369e32fb818f337\n85f4e9037425401a191c3762b497eca9\n55bc1f325928f28c738dd0d3509c7e47\naa0ad3538d0d7b3be6fe3612af521500\n86a25532f255728fdaeb838d0771f3b5\n4b38f041ed60b99f7fe17e97940646fa\n402e47d9e3f825dcb9d7c2fc41e80228\ncadf69f5353039e8593ebeeedbff73b\n187222bc1f81d57b781d9dcb8ecbccc\ne605d3ea3be01ac3b11a97ee9284a563\n72827d33aa4e3f54d8ce2b7ddb5bbcea\n55b00797abf243c3cce5160f0c502ac3\n71656875081adda78b17d6d1965c2fb6\n5a460cb21fb55f639f73340130af944\n816d1c517ef6bf7890a9ce3e4b15521e\n331e7c7897b8243694887ea54f3cfb87\ncc8066a5107a2bf5926f2c1927eee8ee\n451458fe90bd0f4144f23566597ec464\n561d50862a2cb4aabc19762eaa7ba40f\nb6fcfd4f7af69e1ce8f8c11a24c52ebb\nc54aa12a3d8c34e2efacb264ebf1ec75\nef8b9243c75bdc93347805f93d32915b\n7df2443e976658b7cdfc3ede082b8a07\n2031dca3aaeff940f7628281ecb18112\n71e139bf13970c94492d9da2668ec34c\n71b1134533fb33f489452a0032ea575\n9f212a5127b4544bbe3ca6e34dba44de\n2364d6cbee1425fdc3bd24f986301745\n6a02133392afc96b40ef1c8b63a628f9\nfe53dcce9a30c5b5348fedb5a291187e\n1b5ab441fb8e3b1b450621b513a975bb\nc405457198f59d86492d9da2668ec34c\n535289ef7d9bdba8a69bcaf4198ba9da\n53ea833512f2235319fb4103277a6b93\nd645bf9037e7dabda341228b21d337a9\n8d9061d863268349db224de2961e777c\nbaee1a3918353466d1d10c27b779ddcc\n6ad7e3a8e6f3ed1dd068cfb43a81fc7\n320261e5f3835f6381f667e2a25e0619\n90eea7c7aa913fac57b8f616df7adf9a\nd0782d2afef19adf4733824eae5cd9ae\ne67d503940c1d95b73e5f839658fc536\n8c2e0684a98bd4f82553cc33364504d5\n38444677513af4e7bc41009043d88b0\nf31a13e903da7e865e61ef8e2af97499\n9ca1c0357c3033488cc413950b617e8f\na50887c625042b48c862eec8232fff1e\nc53054060b5fb91beb0fe7d6b5545a1a\nbd5eb0bfad19c8d9cd431573238602d\nf5643e3b42fe5144c9f41f411b2bb452\nf1645567130e99a878268642d8df40d1\n24082b0254dd180c490ad276cd2af3a4\n45e2cdf1708680822165c54dcecaacb4\n10de9af4e91682851e5f7bff98fb8d02\nced5a7469c77e651fff16555386d173d\nd85b661f2c9345f819fb4103277a6b93\n356fc758685e9054347185e772ead5bd\n9e1b32f73908cae7e8f8c11a24c52ebb\n779e4f9f044c71612f95e2a1e9997b85\nc4f9249def12870a2b3e9b6eb52d35df\nb1908805f05c6f47f51f77a6d7299806\n9058e82b6cd496891e481c46590219a6\n4e222d6b128a7af7b8fa4cb65e077db1\n809cd21e86d7caac3162de0102da9582\n3116d8714420cef4ba33c5b911977a18\n4c3f655507cc6aecdbe9c90af547c85d\ne23400a634c81fec3cc5c2b17dc81196\n32788564558e513f7628281ecb18112\n1c5d66f3e7352cbf310af74324aae27f\nb5350feacacdec9e1a4c9a8c5e7ae925\n7d0e6a5c10d2f97c62e682c9809bff14\ne00291d775c572f5e8f8c11a24c52ebb\n30083f20e81ba69b593ebeeedbff73b\n98a1d709dc51ba87870894bef54d428\n934ad9821e964219c3cf9ae716575390\n420ca6eac51267538a2d6a427829a3\n71b01320c8e9dd60f7628281ecb18112\n8ecb9191ec41785b351d9ca36f76b95\ncc03a89a98cd2660c423490470c47d79\n6a227aa2e1fb8ecf51f77a6d7299806\nfcc996c2c8ff394194887ea54f3cfb87\na02d2ef9789836981bb088904f7cb154\nbe5df38dc7877c13c681404257d94ad9\n72bc27a22e5f516e8aee1b6cfa0c3234\n4e0dcb9beee7bd3f3a11565e5be9cf53\na9cc6920422b9d9c2af8b1d491b7ebc\n7f3562432f02b8a897d3ea932731fd42\nd31ab2866270fb1c19fb4103277a6b93\n3f4f6f64f5ae57a14038d588fd1342f\nae3b4195dfa9779f89e49c5729fd5d6c\nd15543efce9acacc8687ff9b0b4e4ac\nde3e16703bf6581df050758b903e6054\n3021054d61c4862bf29666f384be6c43\nd571022446bdf81ee83221ad0d21775\n2ca81da56f941624191c3762b497eca9\n3837e94954187dbf93b0969ba78346b3\n6d199c744b17d85953735b417976bbf5\n73f16e230ac102536e07666ce67ff5a\n5bec8011c4042baf14038d588fd1342f\nea77c800bba6566aaf7c7ad2549a1b15\n5b1744a03be753cf3ccbceb68fb352fd\n6e9b9e6dbef7d1d219fb4103277a6b93\n7ff2f20512e7ce8e572f8e1c1caad99e\n87c742a186ef731b464bb3035358ab7a\n19dbb6cbd039caf0a419f44cba56de45\n4c9d9b37b13b0dc720211b71e9c4c8b0\nf2dae367e56200a7d9b53420a5458c53\n2fc2b897b6b131c4dc75a59e280f3bf8\n3730f9cc29006f4b65ba78ad9601cf1b\n7e2b07c0ebc5781a297936c81e7f6629\n3f04a08d840c0a9c18b14db3b83de9ff\nfc7e2126419f5a4cb84959963148f2a2\n59fa70f195fd4ac6ae8c9d3b8c4b9bc3\ncd4fa15a13d7448a14038d588fd1342f\n52469c47362e41e719fb4103277a6b93\nc70f8a49f26a012f876b399a99a15c0f\n90f8e6e1694039c0142c8d1dd30ee99a\nfbf085824e25d7c440ef1c8b63a628f9\nd7d709cd13cdca931afedc87fe387fe\n53a442e47743fa4f457ba044c28858b1\nd4e974b1d57693ab65ae658fdfdd758d\nfd1a87a399c1c82d492d9da2668ec34c\n31dad882e67008adab1b53c63e6e87b3\n3d0b161ef3c026a28a514cac7cb18507\n4ecb13c40d55bc24fbcb0345af819bcb\ne9a16aa9d2ffdbe174cc0d9ee0d1e8c8\ne76f7d88022a0bf91b17743c18fb63dc\n6df81788b1cdd1c3ab93f6188b226527\n3ebb8f29a7c44776f51f77a6d7299806\nfbee8c9e5b8c0c19492d9da2668ec34c\nd56da491d5dabacd4453212030cbb3c9\n32f918efaa64a4d9c423490470c47d79\n11e55ca087c74082feec1f13d2353f3\nc4d1ccacb82d854b5a395b344d6773ac\nea918174759a2079e83221ad0d21775\nd0d786244fc2d7a9ecf03af5e7a1277b\n533e0a52acd257bef27383fc5a5a711c\n79be636f7f6b66724fde46457697d80\n6c16024ad8f16d6c83c7ca617c7f7461\n1b3c286bce219ddb7135fc51795b4038\n7ee5785d8695cf0ee7c7920f6a65a54d\n64067f7029087ee07eaeab1f0c9120b7\n47d13a704da37b588fda227abcbd8611\na16c172406430b6af7628281ecb18112\n4848b62ac4a996b3f51f77a6d7299806\n537924063294eb5f46ed025f8f85e067\ndcbb15dad2001a0b8a4c763d71484708\n1ab4c6ef68073113cf004563556ddb36\n51375e5aaac17a8ef7628281ecb18112\n1d9bc60209572861473f10e6caaeca56\nbdbf18aefa5b980585b479b317175b55\n9027cd82cdc7da4d2541c4d6fdd1e35f\nafbd7d1e68be93ac35836c728d324152\n61de75e888e8727486debb0a33c851f8\naef0600be3f8f384f51f77a6d7299806\n3a51a83963c167c422e8a95d8ef092f\n6f37fb57f3da696265ba78ad9601cf1b\n5f4af72ed8cd633a14038d588fd1342f\n5c83457abb14f95768c2f5eb1dd4dfaa\nc523e86242af4b4ecf6d196856691e1b\n7824cba870f915ba2922dc9c4df31134\nd92f4a4f2faa545ed08f729a736c90d6\ncfbd835002da52be8f8c11a24c52ebb\n389db7fba32b71182165c54dcecaacb4\nbe67f51c3df7dd165b9ac5a4b39649c\n4f467dcef4a710a5911016bc0ad99a16\n6c36a5b107e83d331191025061735ea3\nda292ce4ccdcfb2c842c47c8032438a1\nf8b90f63fa9ed154e759ea6e37e5585\ne0b432f43a70aa4dc71dfa81bbc5b8ef\nc1841ecc1302f45be798c4323a137f09\n980feda55fe02c5868e9405ab8968607\n2d08a64e4a257e007135fc51795b4038\n7eb566a254731d8871a782a4379556c7\n89d510c94145f0e0f7628281ecb18112\n501b15f5ff2152e5f7628281ecb18112\n885bc048615523273eec26c23f5bc80b\n94bac9505cc503567085b4353236aad\ne967c4817872b637de03ab2a27ba7531\na8f21e581e687c0fa329355bc8cbc0b5\n4c5ae0ca12a5e8b3490ad276cd2af3a4\n9d6fdcf7fd47fb5af22166a43d725fc9\nae6770f159b2f7c868c51305d76b1f8\n3311f1cf612be98290a9ce3e4b15521e\nd9dc32f36e03d9f5ea65a95e759e03d9\n6367d64115d665ef51f77a6d7299806\n6fc581beb03eb73349c9c494c2fb14ce\n58a8f29ec056a19f71a782a4379556c7\ne922bbf8088552badd7092ed47061a36\nccf29f02bfc1ba51a9ebe4a5a40bc728\n116bcb3b43de74b9df9054bbcf5c6adc\nc24b79602fccaf603379c738ca193530\n35f94bf244a7fdc5f51f77a6d7299806\n55e4b862b56e873eb36dcc661f3905d\n78d3258e4664daa9e8f8c11a24c52ebb\na00f4f424b6b4c4c19fb4103277a6b93\n7b17a70aef82c51cb8fa4cb65e077db1\n87baf0c4bd11ebe7f771b7c5ceefa9be\n54237961055ef73782db9fca4b68095\n4607280c3a4286b7319c7c751f273141\n8844e3830bbc5610d5cba62773b8025b\n376b0c463a2bb625c036371d3ae886e1\ne507b4d0aedf8451504721639e19f609\n9a5b54e835c762e4f51f77a6d7299806\n8f248770aa0b4d41e6fe3612af521500\n70be8ecf5200fddd818fffcf4a59bbc9\n694d9c2e9e769ffe83221ad0d21775\nbccedf688d8e5536eaf288f952624966\n60637687ad5682ef2b93a65c5f642e3a\n76767a15f8de108975907ca70d2973a4\ne64562ae2925d5f3f58087d377226538\n7c467486ccea38ed9c3a7877712317b8\nc5d880efc887f6f4f9111ef49c078dbe\n7948f2715d32c813fd60059ad8523f1a\n1c6eb96eab5e75b67b79156a61ad4c01\n7508cbbffe5f2f95f51f77a6d7299806\n37645c4e5ddb142e89955e67129be104\n7fee792f0dc5d74cf2cf6a9bef44d625\n9a3a80065f75e33d822e11aea23332c0\n4b904e1d68d09dd3e15e36ac023c5182\n30526709beea1350c862eec8232fff1e\nf083f6f7e9770fb7b161f36d4e309050\n5194d56c118786fa1a4e0f13d375972f\n5158aa43b78b81a0f7628281ecb18112\nfacd3e432232c27f245ac1812a4e4d0c\n6498a5053d12addb91a2a5174703986b\nf2a4d96e77d1c92a3d6cc735e3493c99\na1ef57bc2563ec37dcadf30d9ccdd100\n77e84b5e6526be75490ad276cd2af3a4\ndfa7aa13ee696833593ebeeedbff73b\n796903c53c6de2025213cec267286d18\nf9c61b40d4f49158ca998f0f87d0c84\n2c6815654a9d4c2aa3f600c356573d21\nb4b65ad3117199a2e8b2b8dc0c816caf\n37e5a1f7f0409a3b81d7f282a3dff363\n689dce303ca3781c19fb4103277a6b93\n3e72bf47e31aa669f4b6538438a0b930\n59529dfd60b211a45277f07057e8ce87\n637606c1ca1ecd81b502160362bf1664\n2e8748c612c5d3519fb4103277a6b93\n98b003470034007f51f77a6d7299806\n196b9e195ccd4a0de03ab2a27ba7531\nb167632dc5c6c72b19fb4103277a6b93\ne821fb5eb1e21368c341afa383659322\n3bbcd9e945c6ceb8d3c29b715a9f3afe\nc375f006c3384e83c71d7f4874a478cb\n286c07abeb67b83bf7248d9dbed7a7b8\necb43e4b0fc96935664b3b9b23ddfcbc\nb5706706df77157627d4fc401a34f3de\n8a8c67e553f1c85c1829bffea9d18abb\nadcc6534d6db1ff9dff990aa66c50fe0\n5d8736041ded1ac7de03ab2a27ba7531\nd6edce467efdc48eba18ade30e563d37\n33e28d560bf1bbcc32db3218111111ed\n11dac7c4d7e4b32af9aec59741c69cf7\nd9061907b7b411dbe3db80a3cacc6e3\n756487465c12a5332165c54dcecaacb4\n24c0fc01144790be305e886266e302e1\n9e15b5ae461fe0318fcdb0fca07ec8af\n52afab7f974e7bdbac1ffe34fecf39b2\nc40ea8f03ae6407462e682c9809bff14\n25871aa50531fbfc741e88434245c899\n8e2c39986badb61e6fe3612af521500\n42f77dcefe75f7eb19fb4103277a6b93\nd7db1353551d341f149c35efde9de588\n39f5eecbfb2470846666a748bda83f67\n37475326277845dc1fefdc190019db13\n5cf26a5558580c8c75a82b88fe6e733f\ne5f381dd81cca6a36a348179d243c2c5\n352aae8597fc6ac679c251b4a7838829\n3789c5b85f49b21ef7628281ecb18112\n27efa956ccd86120464bf8a1dbad4432\n268304221a5717124a05fa063da00291\n2ba108b72aa4995814513156cf2b8d0d\n632bc741220bd52e51c4deb11af7079e\n583deb9e5cf939a9daeb838d0771f3b5\n267dcb267138fc92c242632b2a8c3129\n621c62aa667c4d3cfe2fba8e5d6db330\n95e2f1fb6be241b4742728b30848ed03\n3187a69dae9fd8dced403132b02528bd\n6b94ccd432d37555fc1390934d948e09\nb6985891e45b998e7181375a1be1d1c9\n223d0330466ac6bff7628281ecb18112\n3e80bf14b5e02aedeabde033450b7299\n6ed95ed3e89e09ac191c3762b497eca9\n9e3dba0e6fd3408bf382e154aede1b6a\nce2acc9d7aea91a0988fec2229ccf13f\nda160f272c6d77f571a782a4379556c7\n3cff2db42b3ba901e83221ad0d21775\n38abcd9d3157f7fe71a782a4379556c7\nf6f3c3f97b615a19fff16555386d173d\n58b8bc3981302103b78c56df3d6a2934\n12d7ca3c06faaadf17b431cae0dd70ed\n2c4719f6aa7b2c8a5a9f35e635b7e48b\nd8edf163d5f87b055369e32fb818f337\nb856a62e23ef65324b87db09ac4cfa73\nb6ff694af011b45f4f52551bb6d0494\n4f79d43b70f5bca3d082d95e9bd50b49\n1459c329e2123d4fe5b03ab845ae95c\n58ad41e336942bf3c5243a0ab191990d\n619d9f32db0780187c34f3963ae12156\n66e204998b6c4f06ffe5cbaf6252d67f\n741bf2e8b46b3082720f4a96fb7a3b3e\nbb9027dded04f7da2b3e9b6eb52d35df\n360a12c8666f5f764c6ca0d259b5e0f5\na27a04ccbe8d5c90b91fe758ff985f40\na0421aff56cad16790a9ce3e4b15521e\n3a885865c614a5a35510d59f3ab1ed64\n60d4a780abba84d20c5de2052b8e2de\n2137a8fcee12e72d19fb4103277a6b93\n41b90d1977ef7672b9b8f177284f45fc\nf1188bef2980d2c985b479b317175b55\n5043512b70a157835a15b6547f08c8fe\n92c068abecb15e1adcfd6ca2b952d624\n562b11f6f1fe56ce586a8827cb5b82bf\n8f268673d08240d34eb6dda9557ab0ce\n31fc10f348cdd2f77f754cef9da1323a\n665fc6411855306530221b1717636e3c\n11dba3a8d7b7210f5ff61a3a2a0e2484\n4e1c6dd1146ba848f71f1345a68ed387\na2eaec61c28670a459b42406a4cdc4b3\n6050ef2e6ac4ffae490ad276cd2af3a4\nbb13760fd1e2dc182d19175e7d19b7cb\ned3cc4a95e18b3fea19b492f7b035eac\n6986aa6ac96abebc71a782a4379556c7\nd14d1da1e682a7cfaac8336231c53cd1\n521f0ff0b1d7828337b2bb75885cfc44\nc790496caf5f2904f14c803eab703899\n1196ffab55e431e11b17743c18fb63dc\n2e37697d32d085415634c21965ee6bab\ne40d5fac8951692e3849910c5019154\ncb5f7944ec02defcc6a2b7fc00a47507\nd7e5de817d603fefa123ce0dff5bf4e6\n10c08a28cae054e53a762233fffc49ea\nc7a87dff6ab53f3b7490c34ba5d2779\ndab5b7b9df65d2e2cf0bcb121cf32b53\n8590bac753fbcccb203a669367e5b2a\n12c2b7080b07146a9d4d5dcd2cc33826\n818c483496ce96745eea3e3d89293379\nd93133f1f5be7da1191c3762b497eca9\n6e5c0ca5ee70c88b77dbab4c80b965e5\n2fa970b5c40fbfb95117ae083a7e54ea\n557542994c02cffce83221ad0d21775\n3fa2fccd96f3e5b5347185e772ead5bd\nf2934658407472a92ce025aebfea84a4\n8f13ac6499dfcc83f381af8194aa4242\n3b5eb8c85130476a38dc42f802aebe31\n6fd5a9839c5caa52e8f8c11a24c52ebb\n87f8fc2fdc88e4ca1152b86a40777b4c\n42836979b217e0535836c728d324152\n3fde6688ea2022cde0f6ee1aa6b96429\nfc0c6ce55282cb4dc8687ff9b0b4e4ac\n94464e51e6f3be07f9443c9263f2354b\n8f217a409c5407ade6fe3612af521500\n8e853d5bb145c11486c701087a194026\n67b082d174af9ab06acc27496f96b513\n26f798f908ef2908c7660a81296c2300\nff9b59e29b547dd504721639e19f609\n769f2cb98735158a2334de46509d60b\n70cfdbf8d22c8176f51f77a6d7299806\n5420d4699cf0125fd08f8c5dee475682\nb0cef14f184c10e14af957103f4767ac\nd581539aa6d5c2ec7709fbdff3d15bf9\n37044d4f5fbcbe9bae536f42ef59cec5\n4f81153b0a3d2fb25f5359f3b8f96a06\n6d83067056915f4dd2f15044a9418e0d\na6f280a490010a1d593ebeeedbff73b\n9c68011042990da3abe36bab1da1fa35\n4f243d655c40702ec772d43f7a27a1e\n19d7db03d81663394733824eae5cd9ae\necad3bef91aa032b6c1d9538813ca7b2\n6131ecb5a6fc9329f51f77a6d7299806\nc69069021b390de513232b7b9d3f985\nf8bf45e20bec7cbc9cf3f05539f5c4e3\n3aec502173e565d9f7628281ecb18112\nb58b8a4646d14b7c202339ec5396045d\nebaf425ea2c92f73a3bafec3b56382db\n341ecb71545d84835ecd29875b6f0d44\ne026adae39724b4ff5f913108da5d147\nfcd8163b26250f499fe49e672436bc45\n86fda548f0fde39328f80188b7c24dcb\n8999368504d4374ce4e346ee2650d150\nf2f0f205af792d3d40332412c5d013fb\nd607e86b83f628faeaf288f952624966\n12f4d8c20ef311d988dcbe86402c7c15\n8ce6f67b8683c0126db434563c7f5ea3\n50c446295496eca73542594e05cedc89\n2745c7d9f2027d605a9f35e635b7e48b\n4f4b6167ef11ae4e8f8c11a24c52ebb\nc1e03281b9f179c7620365f6656fe3\n36bfb3be47fd957e543087eec55f714\n490797c10b8cdfcdf4b6538438a0b930\n326a0c5116e410cfe6c1a071a4e8216c\n36c4421ff44218775510d59f3ab1ed64\n9c1ee97e493fa79ce83221ad0d21775\n2fa4a8a5848f9223a10fbdfc2fa57509\ne7ae6edc3fc6c92ac423490470c47d79\na1575aa70fbaab0fc05575120a46cd3b\nec637164befa6a016bba96a850a0781f\nd5d4dfb9e6901b66a3f22b4b00de6dfb\n9910380fedce395e80165d5b901b6e64\nacbc30795b9826ec283b00891f680579\n2b0f0f530011353d15eb60d655e596e9\n6d7a7f4660e49fd130cbbda41991e4d0\n209994649e7fdf052ff84f70e18e9c53\nccea874d869ff9a579368d1198f406e7\na6afbf5a5eaafec74ccf4672ec1e7efc\neb1d92be1e6bd84c4d9a43d557cf49de\n336e92c7c570250251c4deb11af7079e\n24c0e6a8b10abb77df2b21995cbbbc4f\nf66ea5e07a8ad9eb283b00891f680579\n6d866b3d22082b89191c3762b497eca9\ne9f36f74e22ca0897298e452825d1f0c\n56e51afd9d5c5fa38b7a92edf72424a7\n609cfbe0dd76c64042e1bb4fe264125f\nfca55be264355b1ac30ba10ebbf8ea21\n6893a0aac52e31a3578fec929fed235d\n3f4e88498f4e54993f7e27638e63d848\nf351b1725b288d8847df6165146d5bbd\n2e62d5829f60bd7758df8eeaf3dad1c\nd892a0fddeb963bdff4bb1e34fb13b70\n5e4552935979a7a1c25c8c68d88e274e\n5fc3bee56e8ceae26fa2cfca412075ea\n7ec2388fdc271fc4ef22b31268b1b7ab\n21e5fb7e2de735f490ad276cd2af3a4\n411291d56a967d9fe8b2b8dc0c816caf\nc109b45b290d4cacb161f36d4e309050\nd868b5e696c362b9ae23680cee12f145\n801fe0b3a0e555a937b2bb75885cfc44\n91bd85c70bf89da2a8737fcf23389014\nc3a3d9cdaf29cf6597c8d78b9aede742\n611a76dca411bf089579c5df0e7fa96\n3a16d7535d87d441d772e458a8f80cd2\nb09e3b329eb11c7dae659483f300cdd5\na8827a6013e06261e27790b0ec8671f7\nbbf89164385610221587835cde687661\n1063d4fcd366de4060e37b3f76995f8b\ne454cdb43a7118678162dd776d80e71f\n411a1a4ac8ade7da76e9713f57a5fcb6\n470ee88d9cabc6028be5ba60d0b948a6\n2d808b6451253b7e7c7920f6a65a54d\na896856650a288c0c05575120a46cd3b\ne93d141a3dd25b46219e03e23fb59d78\n468b7e16a29ce746bd08524bcb66a009\n635906aade1c775df6cfab91d65bb91\n82d8391c62e197161282d4d9178caa92\nd75a219d343d2469e22abcbea1db98d0\ne28a52d8864870b222ed3259ee7e608a\n4f1f4c4d1b2f6ac3cf004563556ddb36\ncd6a8020b69455dbb161f36d4e309050\n51ec0bdeb8bd9b8d60eb699207aa149d\n470d626518cc53a2ff085529822a7226\n66de742ac6ee931390a9ce3e4b15521e\n247353514479969ce6fe3612af521500\nd75b618231bf0815492a611633bf8558\n56ab99b69cbc1bb50d55c58aabe6e7b\n9c8685c65403dfba2f134420f7b0d7e6\n55e6d1251fc63e1f71a782a4379556c7\n2ab2ec342a3b2a45c242632b2a8c3129\nab4fd3bdd8c1dede578d107c71db28ac\n3ab838f55e56426b35836c728d324152\n3a3ddc0c5875bae64316d3320fdfa899\nc5479437882e03eb282d0900e186958f\n2a9cac5daa8e99cbd9b53420a5458c53\n92373022868b812fe9aa238b4bc8322e\n9d961de6d462a7619fb4103277a6b93\n7a427785ad85f0c771c3cf047830ec1f\na07ec767c0a395e53cc720af04c21ce8\n3dd8c11bc608441f1b17743c18fb63dc\n547ad86927566ed0f9111ef49c078dbe\n274189e25f44397f51f77a6d7299806\n1842797b090ce2ecebc1a7ae7c4c250d\n9e36380dfd1364f6d01673c7c57450c9\n8a26820faeecd40d4bf49568516d5f0e\na6a7b00de9ccce0816a5604496f9ff11\n975d6db745442a755634c21965ee6bab\n38a2b3491e8e8a0d490ad276cd2af3a4\n6124a2bebfa255719fb4103277a6b93\n2c2a5f5a8931fa0822f0b32ec619eee6\nf1563f3906ae14dd32b8e0971fc6a65a\n5875ca8510373873f51f77a6d7299806\na1cbd161f91e80eb450e3da30d6676cd\n25c61fb5c237767919fb4103277a6b93\n73d534b85a1416eefba3e6a55f280fd\ne8c8534a16d600ba20685b5a7e34b501\nb8c678c49e40ee5307776da88d1350f\n395868f297f01d2d492d9da2668ec34c\n9bda786a525b1ef93a11565e5be9cf53\n4918512f624696278b424343280aeccb\nffd3064cff5757695ecd29875b6f0d44\n420709f63a0b15ca35836c728d324152\ne193b0d75fa674142b3e9b6eb52d35df\nbfe64c93bf5c3858c4f202fffc87396\nde351bfde19253af54a7a6750196c608\nb0a0f58be9f5dc0d3825a5bc524f67c9\n99f02614707ce072e8f8c11a24c52ebb\nfd5492b732f41dc3f7628281ecb18112\n6cb6373befd7e1a7aa918b099faddaba\nf4e5698718f3d4494311a07b696e63e3\n8fed5abf598c5d113379c738ca193530\n17f9eb6c0d818d45d7b20fded0142d7a\nebaffb5ce608e7158d09bc92d0fc6d3a\n9ddbf01abee716b39b0530265e62c9b7\nb1cbca9a2646b6f1bf899e941ea0fe55\n8f4750616cc16a3f84633b41c8a09fa0\n93e72cd3140b32513b5ed5cb2d36de1e\nb971b6c16dded4fd44db5bc086b2ea47\ne102ff4df6f28b6cdb400c09abe26220\nf0b50b64918ef41b990561fc34164364\n374e76e8b8357e5f796d422781cbc933\n305589c1e37f32b821bdbc0445d9f748\n71aa917674beaa2926d044baef0e5df2\n90a15feb4f77c63e5e73882ba2654055\n34108b791e6bc4ec1bb7158ebaf7e1c8\n972d675d3ce3555d492d9da2668ec34c\n7bdc0aaca74cca86593ebeeedbff73b\na5d41f647e7ae9deeaf288f952624966\n108238b535eb293cd79b19c7c4f0e293\nc7c7079b7555bf075e994da5ba753c34\n4f136e2a90fc8ff63ac4c571779c5fb1\n8a2c1a7b282b9bf528ea9c4c28e5ce40\nac84a2eff5e6a64347598b39fd1f6465\n89208a619341d9fdb8c516ed5c4ce32\n70711d5a1aead05b90a9ce3e4b15521e\n38436cce91dfe9a340b2974a4bd47901\n4199756380f14898e8f8c11a24c52ebb\n908fd690e253f651f1783a44a88d6274\n9061324684c39682c2c449c0c0579ec3\nb6a0afcc2ad2db2b490ad276cd2af3a4\n2fca00b377269eebdb039d8689a74349\n63e184952df0f3698f5bccb3529a48d\n23218bd682d522d19fb4103277a6b93\nbec151e32bbc7e9b28c54e8f8953f499\nc22ce6ebc2b5bc9b59a44e6453790000\n226f096dbce49857bdfa5e0753fa3240\nb4c73f4772efcf69742728b30848ed03\nd57bbc72d1b2670e4209d14d674fb332\nf239fa77c7b8aa2e81f667e2a25e0619\nc9b0828029f0405c473f10e6caaeca56\nc47e364fbc29803b2c0eb4a518e123ac\n57b4898f5b94a5a89d297e74104d3ac3\n10a1783f635b3fc181dff5c2e57ad46e\n4003f4046a3a5ed9297936c81e7f6629\neb29a065b495dffc85528d560ddea455\nc5c4e6110fbbf5d3d83578ca09f86027\nf35645e0b1141804a57b3bec78e5d1b3\nff3581996365bdddc3bd24f986301745\nbb8fbbbb9925a376d1dcc55e36186e4e\na45477c29f71d4f37597e1f94410131a\n3fabddc7c0fa27f92bdc75f1ee88d8e0\nbd500b346c427b31f7628281ecb18112\n1c3f1a9cea91359c4c3e19c2c67c262f\ne0a473eb557c424320768660cf080d12\nc8aca0182d3e48add93768e7b9b1eabf\na203bbe3c9c1c676c3bd24f986301745\n1be38f2624022098f71e06115e9c3b3e\n2a643eaf143a779f7eeca6709b6a824e\n99e2f8ae1bef62dcb74c46f4848028ad\nbab30539155767a59f422d8258cbffab\n32a9329c11b5c35d4b3c42e318f3affc\n75d3fc4649a63ac13efeda73d60343e4\na66d78cbf3603e8bba9df3ea0397b1a6\n5f06664b4eb0af4c352fc7e973ba7787\n24b5aa5ca592ca5764945fb936667f89\n20a128166fc9ac939240a35c2a5f105d\n602ada3b41238c77b87028a4b477349f\n882f30dfcc94ccb5ee57043a0b4866cc\n78bb9f39d4251624a502e035aafd3af8\nd6ac690c293a492d2d2a5d4c4022b4c6\n106e9487a1d47ff1a09cb462b3e723e2\n6ffbc6f14a7257caffa41024c63fa9db\nd8b189ddc0ca5b8c681404257d94ad9\ncc665438c4f7baab137d9700e13a503f\n8e4269ac16e13433d701c68e1045b606\n2c251c2c49aaffd54b3c42e318f3affc\n3e28e0f5ca5e03df73227452e5016b6f\n32303484de7f1998f8d44451ec1ac05\n8d80cc5cdafc4b8929e17f7efc5a2421\n77cf4ff8297014faa6fee8e2140acec9\n36a2d17d63dc83f983c05814b11dc86\n225891ce27478eec54e404e041bdecdd\nf2c1f929f451753de4ee93147efa8cb1\ndfc85456795d943bbadc820495ddb59\n5457691268846b073ca87feffb4fd9a0\na1e414f0380b7b9e1fc1bfd241d8d6a\n80f96250bed47b4f52e9aa88ca53e944\nba2f3a0d2e90025bb3234e0da44b11e4\n3a141cf2f22fed0ffebad4f49b26ec52\n47a707b2804cc98f1a3c0af5880f464\nee8208e26cffa9f8ba208e534614d8c0\n9bbccaed652a88d0ad4feb1e0e9b77d9\ncdfd278e8b1c11bfc36d58d0f13497a0\n1e3fba4500d20bb49b9f2eb77f5e247e\n5b1d0dad82acd6e5893104fdda835c64\nd081ce6cdafa416c8687ff9b0b4e4ac\nf294980dc63731dcd0ad32b8d8cec005\n2581685a8aeff78b713decb1a0563b12\n6a8f1dd7e0642ca4b367a648e9b173ab\n66654548053c709ac3bd24f986301745\n66b5fd596ac18aa79c1db271ad9472a7\nb7e01301bb1eef41f92f3e7bff4c4ab0\n87de70c9f96dc7edf5fc96890ba7d316\nda264a41dd8fdd655357c338ec9641\n5482bda23163df4f30e916fac260c672\n98d1fb12c3354d341e67ee2399c63faa\n3b0ec945e7290c3a6a0677e97a0ab6ed\nb6d43a52bc2eb8504d5af97121b5f\n1eed5ebb2af372cb5438b83aba42ca46\nb60eb72661b2e56f7445d25f394949d0\n3ae4d69fc1f9b15d2f008cb82e08f24e\nf2075f1c3088a167cf513de9a02a2561\n45828c176099f3c3d2f92ecc75b4cb66\n89dba482df6fd02732e2044f695909a\nd3562f992aa405b214b1fd95dbca05\n33442081ed6e32c4504af6e1321617aa\n3289bcc9bf8f5dab48d8ff57878739ca\ne90f124b13901eabae8375def5e736d8\nd28423569bfd84708336a02debb9923b\n4e9d664144f4249d8957917d005717e7\n4b4773ef582c002b5bfd842976fb7956\ne9651bd689ba5c14713decb1a0563b12\n49e8ef75b5ca2a7c699012d4a63c792f\nb60546b326e585e03ac416718757a350\nd6203deed1b54c8279b3e1be3524f72f\ne3a7c517fbe992ddd493bfe20f94b6ab\nfc7b535acdde11f4aa3e869226c9586e\nd0c6af0d44cc068523c1b1df1d480bd3\n1cf77ee00faa6de7fa6450cce25dc4cb\na18b3364ce7ca94d5921d1ce0656232d\n99996ded94b8bf974cddca4ca9fe5080\ne9e7883a296587ed804722305621f918\ndfd7e14d25b81c1db5d9b03636b8bad3\n5c660775f1c7b202855c835f93769fb8\nf1cb7ac166e7f23fd9d3572bbd9cf789\nb81be96660f38a8c7543d7dbfecfffbe\n4011b7d293cbeae11890f3b4ec900fa\na0c17b34d677907e1f98c0761af40e04\n6a6f0168ce551ebf40d341bbe0ce6dc3\nf0bd1732f37da50c7000797f53fee6e4\n6446846bd5cc3cef5b4aea6c98f52b6e\n48ae43c032e9f89737f67f4322e8d3d0\nc67949ee2c241e8e9b9f2eb77f5e247e\n2acc2a87aef7cc559ca96b2737246fca\n541746ddb47aa2af4e186c8346f12e6\ne9a8c9067bc733ed95bea7c29e873d16\n72fd9c2f47db23987f377effd1f7ba9e\na39f54db298e53b035d20a1a3ca345\n46e1939ce6ee14d6a4689f3cf5c22e6\nd11ee4294daf6ebe492d9da2668ec34c\nee001ffa8483ae1b7f0e458a1629fd0a\n67e6503e7ab7e666e45ef4135c266a12\n969375970515e5f6492d9da2668ec34c\nf4268a28d2a837a1167c009da6daa010\nc97b5b80a24030ae70e99aac955544a0\n388ffdd2dd3c0dc0780672cae8ec94c\n36f85b1709a62c406daafc9da8386a39\n2afa06a01a0a15fc504721639e19f609\n1006be65e7bc937e9141f9b58470d646\n51670c355ece91abe24f4cc9bc86052a\n6534de9a07438b52ee3907b60a74e8f8\n2ed3b981a9827fb0392642605da2a1e7\n728fb292d234b43d49a71f577ceadcf5\na3e990cd563b7a57ea411f5a15742da6\ne34658debcd1644dc8687ff9b0b4e4ac\n885c83345016a120c02b229e9105ae6d\n6f0def5e832f3614c01e0156f398b4d2\n6d5207270292fa01c914a9f52c152c86\n23acbdfee13b407ce42d6c2ea750090e\n11d3fc4092e616a7a6fee8e2140acec9\n341e24df542e0676d42b9650f19dd425\nbdd51e6d7ff84be7492d9da2668ec34c\n59ca6d57ddd091c26eda1c7568601317\na65cd22689f14147f155d75bbf62b80\nbbadf45aa419015c7e4d369f13ed434e\n9dc1371b6989479c9c0ca344f487323e\na2b55fd7ab49da518a049f37ab48adf9\nfbfdc8eed6598437b2bb75885cfc44\n2016d09b261b09f05413c1f22a911d58\nb89cbb45476e94a5e65235d5580cc3e0\n6cc771aa1a807dea19fb4103277a6b93\ne017c5c8562ae50882eddefc99ebacfd\nca23c31de817db9b67981fccd6325b88\nfde328d91eee1480fc0035da39bd5e1\n4bb5877100a76cf5bee7d080c8f1e1fd\n2bfa0be90c15bfa0b82cf928f6ed5338\nb6689fb8b784c570cc514b26ccc20774\n518c58b170bf5847ff2c92c2a4f65876\n524e4a1041ae53154b3c42e318f3affc\n97396529412ab7602f81cb887dc35578\nad7a6efb5aa6c289810da4adc58441d\nfc557cf617e03564da733bb42d274ff9\n29483ee10e6c6e4c2c37553db37ec752\na631fb1b054697dcfd8aaf214a1df4be\n3968956c7bccc24c203eb08a0c3b4355\n780809a0d1b68f4a8ef4ac3a24abb05b\ne6b0b43093f105277997a53584de8fa7\n32d9f69ef8ebb1778a514cac7cb18507\nue639c33f-d415-458c-8ff8-2ef68135af15\nc04c13649c4cbc5ebed0f345f50b6a5\n39ba09c13d784741dcfbbf65ff959eb1\n1190af00b6c86c99c3bd24f986301745\nb9ac31cc001a0ab72a64ba172c1ba615\n6dfa9675d27b5fc134f6a34e269f5ec1\n605ebc9107c71d54d8f5adb469ca89d3\n457aed734b0a8619ff6d40d828e0167c\n103a60f3b09107df2da1314e036b435e\nb7316f361054c8501962281db2f162a0\n74bde5a0a8927f816e107e0a7fbbb723\n5b0e833cf2ea465e42bd82e95587d8af\nfac321238dc8637eaa7cb30470f3273c\nbb831481ea5166e318656877cdc36a54\nbd3e65b625c9d994b022c94235bc8601\na11592a10d32207fd2c7b63cf34a2108\n331f49270df51b2e5bfcb9d3e84d74f0\nc50c2887ba2b5535c32fd7e88552aa9\nf2aa3808b870ba95429b498f2f24a42\n3c363c3a75aa1daee8f8c11a24c52ebb\nf4e355f3c1acc9f01ec783b810d76c4a\na95b5ea73cf0c9bc8e72c17826417b99\nc95e8fc2cf96b9349829306a513f9466\n713d651528ade2516bbe7b731c00d0e5\nbe1e5985324b401be92225287f8225f7\n736ef1325209503533d93f57729688db\nb66a32bed74e203591f74997d435672d\n33990ef5ffde80fa83bc207d8a5912e3\n9f8708db66a4ff07f4b6538438a0b930\n1f343169e6948a2a5b7d8e48ecc58356\n798fc5fd5faf3a0580067e3fdc6db24c\n5cbd738436d0523d6996454765a52e50\n3aee7c282063723d8a17805dbfb751e2\n40ee8ed17f6ea51224669056e0d19a1\n9841030f427150567dbe6b236c44c533\n5f9fd9bf28da76ebed2eab6efdeec5f8\na749c31cee6965f33dc9e0e58bb697d3\n41fead15a9ade0f090492b0341436fe0\na339a318c8a40fd4eebb133aa4be217e\n431ca0621cab1313b0204d9cc6bc8619\n5f2d4c625595dc2499b025797420aa58\na4b14d0f3cf8a8d7b37a59fbad57ca4\nc20dcfe55ce58c055c10b08ea69398c3\n6b5edd2c4df6e85cf9b9977a2406713a\n2d0344ee62954b0afc4743bde9e89079\n3d442388af50f61138ae3771b1788e76\n677846a1d3777e90ffb9df6156f4114e\n68c7f82dd1e1634d9338458f802f5ad7\n22086876a4f3bba0504721639e19f609\n44aed693950b077d4f9691cdd5f8749\ne5f405ad8aeca327d9b53420a5458c53\na9053230c8e02442c8687ff9b0b4e4ac\n58616932b0e7ab6d78b03575bb54dfd4\nd374912c3a9fca96c141a04b2a487fd9\n3d800711f41284b519fb4103277a6b93\n93bb03379efddea148bc9dfced4f8d35\n4a45b026317349130e916fac260c672\n6bcba04c2e45150779368d1198f406e7\n1157d8d6995da5c0290d57214c8512a4\neee352c9cadd79cedb1051713db42252\n866aa287bde4cff9bfd324d8acaeb3f2\nd021835e503e575b4f7a7f19de079d1c\n90500d52ac30dca9f51f77a6d7299806\n7fb75b03d3ccd58c4710269d4bc18736\n2463439444134401815b2b467e8e2eac\nb709b41d6bafd77480cef45d94d1481b\nb8552f663f2a4f4d54e4f80955961143\na439465d2bd623a14cb9f394cda169eb\ncb8e63317e0ac998e6543556f230fe9c\n326352f7a20c31e2e19a0cc107ada7cd\n3d703ecc2358ea0ff51f77a6d7299806\n38201114b7f2c48d6c63709946cf3bde\n48429b3467c7185060fcaed6cc231482\nff793ca32407b2022a54a8462d1ffe9d\na31b0ccff3aba978c3bd24f986301745\n3cc6485ab499244360b0434449421de1\nd7ba3ad07551c886a2c9d2062eb4aba4\n41660fd9cba4d5b72f4413c96d686e51\ndf6a3bc55f86781218930ac69342cc5c\n3022c71659584118c62a9d560fc45fe6\n78f722590b0885a61efc6aa41666df08\n2060f4d31feb73dd7762ba3a489df006\nf4db2e2e90e83c759b9f2eb77f5e247e\n3f7417590f1bcfded5c89ecb06d1099b\na544d05ee3bf362d27e1ddec710c515b\n96cb0c919d3f379dd0a96520c31993ad\na873a489386dc825ed843e67f2e2e9d\nc0b45de1c0e8f80d4521562865ab775e\n38279fe5f442d95f458feb88086a534\ne4c866b5dd958cd0803d0f5bac2abe4c\nd5e1c6d3e6ce16ca8f5bf896c08c419f\n9eecb9726ab34ae0492d9da2668ec34c\n21a7166815b80f3f7fee47aa19e2e28c\n1eb2e372a204a61153baab6c8235f5db\nb8726f4ca171189ca858c901f3d90b5a\nd6579d7c278cb9a47f093285855bdfd7\n60cbca441e3f062444ac83b3e97ad658\n4af5131ebc2ffc25ec7cbf3284585a40\n511a03618c9bf2e7fa762d956b3074e4\ne9043a68f672c1f3a8699b6183baa203\n6831b0aaec44c01f5d0b6dbf2c4992eb\n488041c2e021e8e87b11ae648ea92233\n11b7c86fc42306ec7e7e25239e7b8f85\na85e81c62bed11ea7f4e21263a28c500\n58e6fa617a1bed1a20b64028d2efc877\n5e598a82d584211d2681d406cc3868fb\n239c363cbe7a650c8b1ad2cf16678177\ne9effe5159dc66673b93a3cd851adcaa\n25ad35439836dd7c8fc307d246c19849\n8fcff2582b55291389e2d345fb844f4b\nb4371c352f96c4d5a6fee8e2140acec9\n75b1bcb68c8344261a648655355dc699\n30cd71fcd7616421177b96a1e00762c3\n450d40600ed92c7de9ad5e44c87685c0\n46743849f0b01b1ca72559fc4f86f700\n8af802214afcb014bd15bdbf03199e85\n39de90c34ab1dd3f327289c00b6dc9ca\n32c35f86754c0b4847307542345b60c\nea8ace071a8ffc2a50a1e454933067\n49748c9b987b6bc8dbd60fb6b8607ea6\nb4ff370c931ce57d1705b902738021f\n313bfbd7bc2d516e14d782de5388fe8c\n45a0b8c6923f587e694253b740159af8\nc30813d1130b492e81b31fbac7146568\n25b55c1686d6114de0f3ac5d28aef4d9\n465c2cc6917e02fec681404257d94ad9\nd9fe499372f2156fc0d328376073b25\n5f5cb0520b70efce750821560ab1d243\nda7aeb7a73f298329940c34828c5731f\n5aea2a227125a81bccda8d28b44378b7\nf4c6c927df8edb62c7623e33dc7256f2\na1240606049c440edbf3c13c5c0e828e\n27923c3fde05f14b5ea23a116671b38c\n2a1124c7deb11176af42602f1636bd9\n3eef51c1ba49a32ef73a9267136cfb76\n195c379defdff8b81dff5c2e57ad46e\n22cc9b68e67339738d2d730aebe7865d\n8709db708ec617ec8b5d4279936d177a\n280fe2696faf0f3a53e14f34c202d656\n429319c0c5bddfccd26c2593d1870bdb\n8e6dcb9b3eadaf9ead885ade4bf3150c\n1c2cad4df1697103a5139737ddc33fc8\nd00a7550cf050fb3720daf9b94e7a5a\ncf32f38c2b6c58dce45ef4135c266a12\ncbf829a6c4df229dfebad4f49b26ec52\nb7af84a7e76dfb59b04cb542e2c50eb4\n3f95c370fb3871621f98c0761af40e04\n5f7152813631754bba07a29886846807\naa412e95e1f9c047d9b53420a5458c53\ncf975250fbeec5148b01ef724ff374fa\nc6c7820d5e2f0011c2bf2dcc31ba1713\n7eb842de7ad4cbad3e329950ec40f6dd\n56bd6bcf5034c7e2f9b9977a2406713a\n374b3757a04c6ab6b9569033586af233\ned7ed25d40b3c16b37bf42a4ca375618\na2bffa12e0737e66febad4f49b26ec52\n4304100faeef130337f67f4322e8d3d0\n67017c046fee2900d09b414c3d8c49bc\n294f11afc4b60827d3ddd69b7fa8d158\n539dd50ce4d5fd97febad4f49b26ec52\n79862d8abd869cf6b3a8888e78d004b3\n4e15234057b863dc659dda512294c744\nef2da724b16ae36654e404e041bdecdd\neaf231f17fccb96d81dff5c2e57ad46e\n64f885f39752807c6c63b8b48495261a\nbe7897b96b04a5d12aca5d156344f8d3\n2159af8011e13b81713decb1a0563b12\nb6843e186082096ebf80985a99195eb8\n5042005e178d164481d0f12b8bf5c990\n47c33af88f4926676213fd2f62884e62\neda9dd4d0d18c3f2296420d5ebe64c52\n1f0bfd529b33c045b84e887edbdca251\nbbf45d2d189dcd758e5f5b49c9f5b3f2\ncf62f90e75531ac63cf953ab4f77463\nef6c2cd0b8bb6e8720768660cf080d12\n976f1a2aa3224af329d2a9b1cf0c2446\n11e28120789c20abc8687ff9b0b4e4ac\nd76ec8373d0a8f0dbb44d2e3e3af4857\n19a3ac2ec0312e13c8687ff9b0b4e4ac\nc1b8c2f0c4f3cc43aff7c08b060f5ed6\n51c276e96ac4c04ebe67d9b32c3ddf8\n51aa5f1157cd456f9f9dd9e7d6540d50\nb9e93c2036f24661ae890f02c6b951ff\n90129d2f4a5cb57799982a4d6320875e\n2c7d258bd18de1c28f7b968097bdb0fd\n5c1c5dd72247cb6526428c7519676cd8\n92cae2e67b788eaa9dcc460592c0e125\n672a6459e7606b23532a8e162f399205\n98ee09de954fdab1843ead12644a79bb\nca1bf3f8bac2927cefda51b1bbd149fd\n314f567d460a88c7ad02e4a3aca566f\nbbe63bca5688ac6b7236a8143b10600f\n6c25a321d75405aafdef1c01cbd4ae0c\na8da22b87a249bc9c9bfaa062f2e9d4c\n326f74afbed5d727da8b0c70313fbbae\nbdedbb7887d2c1ac6a45b3b48c00378\na7e33746f41cd181e258d1c3e7302e7b\na10ee4a0964f4ef9e3b9dbfb07aa21fc\na592c3bf73afeb9294741031f62be2f6\nc967b1e07ef7fc0bebc740fe800c0367\nb79bc903ae820b5ffefccbce7fd86667\nc62a17ea91815a7a492d9da2668ec34c\n72a86c2fc8d5cb3713d2510999d0f1d2\n99848304f52de660a26aea0642029fc\naa154024474ad7d138a720835dbeef20\ne0a011619d6c9df19f1deb04fb8ae481\na06c4c2f4634ccb1ee928ba0d9f88258\nc0d25cd4481b3c2a365f491f6e3dbc3f\nu1e22cc04-7c4d-4ed5-bda3-8ff8067f22ee\n79030f846b4dee0f9d709998b2d6e774\nf1f69b9b2dbf7402c862eec8232fff1e\na3cb39c5271c3232feec1f13d2353f3\n696bafb55dc14fa4638f48a6603fb3ff\na69c999cd76e29862f8c68dc62edc38\nb7fd3cf7f37e22e6713decb1a0563b12\n7f70642500b9a3ce45881d7eab1353ba\n212e266cab46f1dd5b903ba10d2ec446\nbbab666132885a14ea96899baeb81e22\n9795162b409011c2a6fee8e2140acec9\n588ca1d34f93eddd8ee30571b0da74e4\na32e7b7b9e2ec5c351bcd597cb80c1f9\n20ec9403d616f96ee6cfc789522bfbab\ncd547b0ff5cd668a86c701087a194026\n5e338c489e940ab73aab636b8c7f0dd2\nc0739ef0c29f005ef1f5e7b74609d54c\n81158ce36c90c319740641939c9d6dc9\n26a5761e22185ab367d783b4714d4324\nb29f5c7c73908424685a4d2d2b5da82a\n2025aa3a71f3c468d16ba2cb1292d98a\n8b52303e5ee47ac617ffa9a4ab48724c\nec758c4557250ca79f2349486c570dd4\n60e36f3ad1dad5cf71f761119ebf0b45\n48fe63616e70f84778ae896933c670d1\n475cf49d3764f04ecc8bd7a04c9659f1\n5ab321d70991c94d780bc2708a85ba9a\nbd9137fb2f1151b23def89b32cef8e45\n2bcf0b0586570ffe6c63b8b48495261a\n9ee1b4fd18b040bb5445e46058840642\n8c7d2eab593269f8607566378b3d8827\nd761518bcbcefa4080067e3fdc6db24c\n953a46766108d4e01f60a203be892cf2\n95f8a62c031dbb8ff0f455e219813ed7\n67c866143e633daaa6fee8e2140acec9\ne488826128fe3854b300c4ca2f51c01b\nf12a3ffbe0f8b5076253bf0968762241\n3d390c6f1051295d9501f2fa226917d0\n4356ef46fbc859a0b1f04c301b6ccc90\nfdc7f288b8c65494a7101992f797b6a\n493b8b8eac5d3de978f8b40f4a2ae98a\n77c02e92d5628be59db8ad97fd392b59\n177849848dc83fb9cb85ba5866080618\n39fb5d3f557f64d4389f9a01d027a78\nc93113c742415c76cffd61677456447e\n68af43642fa145115029039df67c2549\nccc772dd462e8d2da6fee8e2140acec9\nfc369b19cfb50322492d9da2668ec34c\n58a7b826ed562b7bb0957d845ac33749\neee7f5138b978078fdef1c01cbd4ae0c\na487bfde2aa50faa6d7bcadc05e0f4c2\na5eea0cf3865da9749fb53621b8edde7\nb091984264b4600f3ba7aee980c3a0ca\n9b27e1b557a5e499b01c58badc8bbc39\nbce5c7402feef6d235fce1b314c89aa4\n20b36bbb42d36e0771dcb8deedb6c8d\n66e1329d6098499382e4e6b3ab10271\n75f32479a35f39e9f43d965e3ff9c5b6\nb203918276818529febad4f49b26ec52\n781677297ef4db1ab0b54dd2cf2a35d4\n631807f69f02f1785532b747eb9b3728\n269539368eeb8ba95d99e410bbfdd132\n30ba0d3e750dd7e0876b399a99a15c0f\n8b0174afa05ed3c2dcadbd99efe6967\n879ffa2150c4537d6afcce3b00733da\n7a5d539e3771a491ca6a405498436716\na98b128938b56846ee316b26c8d85c48\n6697a325ee92e17695e321e9c6480\nf04698af574cb9847edf3a3d7d1bacae\nba673ea75085e46cbfd72d7396bc040a\n85f56a4d68ff8d75c3bd24f986301745\n1f8dde91813456e87e777e4db5dc272a\nce35ada9c4a8de2fffc6e457221b9271\n107caefdad02cf1c8ab8e68cb52baa6a\na1a34c1d45d47c371519c64630268dcd\n1ee30d218c8c730ecb01bc908e8cea6\ncb68461343aa852772dadd9292b51ceb\nbea34ffef0c02f07492d9da2668ec34c\n23299a939a6ecacda5817f81a1efa3cc\n114f72b38dcabdf0823f29d871e57676\nf030f5181057ddf75622d7484764b58f\nf9d050a51da1f3ed30bbd4cddd04c77b\nbc4d7324d2438885f4b35f4029eb1ecf\n23babf1dd4209349def08b067722d9e5\n3452faac2f4ef4d1f89f4ae158f2441\n4178fab56c04a32ae8f8c11a24c52ebb\nd8c6c9fd4919e7f1c8d01774acf97a\n7729a6ad96985f4ed1ccbd5d84e5bc86\na122cf5d1e23e88d72a5c49c981e6593\n57285ae595c5cc67eea9006d9d8918a7\n9d7a3b2b7dad91fd611b2c263b5df599\n2aa2d2bb646fdc511b7ca0421af5a45e\n65da0b239837b0f3f3ee5e8ea028d6\nb455c3037b013d85492d9da2668ec34c\n804c35699b163b7756bc5724b6282816\n4a783b2ae8fba8b29dcf2183c858e6e5\n4e5e8af0880b0d98febad4f49b26ec52\n1ace72a88565df8e56bd8571ad86331a\nfb42c4a8cf7b6d36ec89626a4213fd07\ndf6ca774d390755cbd18e74cb7446915\nc8713376eb588f422c0e1e24bb9eb3ab\nee484fb2c1e4e611a0dcc52ca811e565\n1eb5613aa22df87b8ef9327f5d5c024d\n1fe0a612dfc3fc548be8b77157b819c9\na919152f07e9e0d0fdef1c01cbd4ae0c\nc93a696c4b6f843122963ea1e168015d\n265c564e26071961e27790b0ec8671f7\nd8f7e27824e61aaa81dff5c2e57ad46e\n33617cc89afcf169e6543556f230fe9c\nbe38dc611c4bdef7f1cdfc0a8f38f2e\n36843ea8984df5a63719086e0b4ab8be\na287b508914a00a6857b1bfbb80503\n3372fd42f389a36a762ec387b772e9e1\n89133468bce0e63f8101accd22c701b9\n6b74546be8d42c76b035d20a1a3ca345\n490cc736a3ffc2a9c8687ff9b0b4e4ac\nea19940c812803d1383b5acc757bd668\n8e1f9f4e3cd226bacb916d8f4f1ff996\n762e86b38d1428fe78e6c2bcdf90770f\n66c9a5aa7b4e528a290d57214c8512a4\n4bc5920f74bbf6412acd2bb6205825cb\ne51df025a8c64a483147d51c94487639\nb919250f54644e1e326e6d76fa066efd\n241d81f586925ea0fbdebca9f6788597\n372118e3595c328c713decb1a0563b12\n60186a5e4e1aee8daf8fee88d245152b\n6d63b89b904264a15fc64c97c5117aac\n42ceba8e460de1de820898ba01899de3\n42711692db3647394b3c42e318f3affc\n8a53c692453e7565c1fa182c22e95706\n4f1e026bc520de13d66f9962327b4367\na10e8dc1cc9522b67a80d424f0f4074d\n758a68f80f0754f14a8a0ee8b17f83bc\n206dcd879e5c3fe8df4cfe396cee719e\n6ed05dd2e39e06223b12a1486cdc4b7\nfc0e86a20a9606493cd6abbbeca4e2ad\nb944154f00e7cf1fad484915511ccff6\n234f40c665976a51dc1e30a57aedbe31\n22b40d884de52ca3387379bbd607d69e\n610ea34f683eaad58cbb8bac2032149c\n41852b57b492559eb36178084a593098\n37aa434da4ef00038b424343280aeccb\ne96c3df69c2a6fdee7e684d25d4dcaf0\n4eeef58f4015cf74d93768e7b9b1eabf\n28fad854838ac444e9920dbaf13176cb\n3fc1e991fee82e42713decb1a0563b12\n6434921f88bd48deb0957d845ac33749\n53eaa7cca72c84f6cacd67ce2c72c02e\na9eae610d9ab7c40a7d147d66b8f507d\nb9a88078b22a4485fdef1c01cbd4ae0c\ne07c7d5be62d7cd73ff4affcd321d45\na4bf3b34bf49c5aa799b0b9a0d4a12cf\n987122b945dcf1fef713f414dfd3c16\n33d8a82696afadcbc3e3d5df2a6ddacc\n6d3081bce72521e088e9c1fdc7b9075c\nb1da0d9aab6d2308608505d960f2a393\n469597794b28bb2bae5a95f4529b204a\n33774f1314ea9b504b3c42e318f3affc\nbf879252fc85aa936d838816bd35691f\n91283b7062407b7381806e3880250dff\n587d174c5f2b19c1d7e48afa5cc5db41\n608b46b0f8f9eba81b1a986f753a489b\n6abacfbb354818b1adda578d985c7034\nf3499b524c5dbbefa23949c21eddef76\n753c5b7f6ee56a77d73237b8afc2f0a9\ne275ae27990e21988d2d730aebe7865d\n9a522f446662bd23a07a1bace8cff15c\n9b94592fe0fdcc34492d9da2668ec34c\n1f576eefb36c3e189a6ba4499518ef95\n244eb71b1dd140dc6f64461f0eb7cd69\n74a8078a8e89872780360680c1602c7d\nbdc58ca6d411823cae786e8787e8886a\n2b4f2fc77c47056eaefb25a27e962525\nb24b70c9aaec3932cf577b918c6f725b\n96d9944f46bd330979414e04132a8bef\n4f42be4dd95e5e0c76e9713f57a5fcb6\n568050037ad958625ea33df4b8846880\na06c400e070343cfd8a56a98f4d239c3\n5390dede41d523f71a782a4379556c7\n4e3047842ba1a384d2b12aa6a0f050b3\na63d7b6e62333b23ddc809959e304d48\nb596b505cbeb456e763d8d4012bcdd98\nc92721a95fe44b018039b09dacd0f1a7\nf64aa038d1e21e0ad2ebe04c523a4739\n79d5977609f99087473f10e6caaeca56\n64ead031d2b04ef0504721639e19f609\nfe9467d48dc6b3491dfc750afa3f442\n7553af75b08b6a87eaac479593c9ad1a\n76710f51915396e0327289c00b6dc9ca\n2c5e32bb738a5306e27790b0ec8671f7\n21bfb150cfc23accb01c58badc8bbc39\ne71ad853f50ea7872acd2bb6205825cb\n7e7f1989e852eb41352fc7e973ba7787\n1ef99f4e735ceabad97996b11dc03f35\nb8fe0dd70bae3a9dba7a8c9ac8add14\n5067a76bac4fd7892665f68ebc337f05\nbca8b73b32108ad6d42ec7e303174a87\nc45ff54d4192633684cd6dc1b226aa5b\n41ef5dfaee26499afe0dc3bdfa883025\nbb4868c1026c04fd7df0e9a69c97c97d\nc666bd15aaebd5b02de0bc4fc4d02dd6\nbbd6bde216a2c18479368d1198f406e7\nffd258571807e6425b1205fcf56bb774\nb8e40ffe5c8e61ba3c8d0fdfb1cc2535\nb5699ce2511433f3b28ede0f9f5a31e9\n5a871d6613216ecebda72093f9b5aa73\n1fd7d0fe883059e355feea066cda8f9a\n584ab19b5df1fe697daabf84de73fb1d\nc0fa1417c0cf2f20593ebeeedbff73b\n2fc6eef6605be9a4550584dfc8970d11\n341bcae1e7f366a233d93f57729688db\n11347c7e8bc5881775907ca70d2973a4\n9c7a028edc97dcbc3012f749207726db\n55dadd6acaa2a0c0dab72035db8eafd\na366bbec303662a3ec545e4e9c852271\na1314dcd76f53519492d9da2668ec34c\n8b1af8f7f37c36bb4368753867df1156\ne867483a25b070ed89ccdb4a5b6b972a\nef89cc3901e27fe0c5cedfd70cc18cf1\n2c4e9d34472b4bccc16f7010a3b8fdee\n800dd8ed32104151a37f3fc191551700\n24445a532ce3e18f7b5f4d129cc2873d\n9f6b1b905ee5ee9ddacbd849c304f00c\nf199965dc6746de38b01ef724ff374fa\na801ccbf4985a57f17adebabcec6b7e\n4b7f260d832c2776a7b43f93c63d6e63\n7772a25ce35049881dff5c2e57ad46e\n8da6959dc59296c9f2f43e6f841bd32b\n2de1bd62aef66dc9bf65e1af50b5b7d4\nd54100efac3ab743626ced72908b525d\nb83c9e0fefbbd843e88e73357a673e34\n1bf710535121b17cf453cc5da9731a22\nf68c32ea1e6cecd3c48d90eef8384210\n9635dbdc4e34b7efffcd08faf4fccd0f\nfa7f42b395c3cfce520ab6214a789faf\n6895e7aa3c739623927045b355fe1fe3\nc8166f63964058199947cf98084faa8\n21bc90d659dbe28a71aa44dea7a6d383\n7fc00af759f4382c48d90eef8384210\n3e08f5809c2abe523ebc93db58e716e\na07f62023d3784839aab0d90d6455f4a\n92b332233da033e71d022067655f6c16\n8a21b853c8de77f0c8687ff9b0b4e4ac\n7aea8e52f24cd40c496c9cdc8d0a8c08\n182c47283b90d8b2d85934de5898f0b\n64d5bd4a6af3da16327289c00b6dc9ca\n747667ef89d03f0dc79b7c4f72055bcf\na241ab0fe7fbb1f41dea5e6084523ee\nce60636e30770f9d8193714e438a24d5\ne4ce4c2a3709855450064625270cfef\n8754831d577cca437c23ad67f25bcfd0\n90cae938e34b11a429823c412ca4576c\nbfa435c63b1e96d3492d9da2668ec34c\ncf80306fbfc886095213cec267286d18\n34722e50142652e53a5e6305a3a7adee\nc951e7bd4c0cbce17ec5a98b3b8c425f\n91cd85647eef236490e75b1cd0f0169\nbebd1aac01d747e82500a3366a96c301\n935093c683edbf2087946594df4e196c\n239bb149aa17d0ddc1c43efc967e5428\n7644e30dc0d88481a3d974b4624d6717\nb96452f41194937691a3aa674c7ec1a3\n51733b725532817ac8687ff9b0b4e4ac\n9dad5d3a04753f69febad4f49b26ec52\n90dddd5e4aa586bf14513156cf2b8d0d\na1d217ba806367cbc13a0d88b632af1d\n1f1a9120cba6c1ce177b3ebe695b7c2f\n308ba1f8c1eed4fbbf80985a99195eb8\n5142e809212f8c314500047017815f5f\n320b6f3ae2893d3c9f5d3fd8c90b27d2\n52a7930e87e75591a78e44eefea09073\na32e0ecf12641f34515e5383285f6afd\ncc25ba35b3f6e8d3d064b65ccd89778c\nb9382558b6b4e858ce5de6b2dd443a15\na64bc6079afa241f762ec387b772e9e1\n2b6c09e26719b256c5facc3cc8dc041e\n2249c62788a52c61613f0dbd986ed6f8\nbb296502226ae23475becd8a4c3f1866\n80544a1e0e443c7d5438b83aba42ca46\n7a9969fac794484c327289c00b6dc9ca\n786c20111b691c152b4875f731f71cd\nc447f8e63d691e6f44d8225a445f54eb\n212ad23c8afe1f9a9d297e74104d3ac3\n891f1cd440afa11517b431cae0dd70ed\n"
  },
  {
    "path": "data/filelists/03211117_test.lst",
    "content": "b9cc669597085c028766390809048ebc\n534d3c5dca2d44641af9a5a7008cc3ec\nd32688a505930c96e2c8e43c97ec5a85\nd10dcdae2d7645ebcfe78be5b7b99c8d\na4dd6c69ac130db6795284068bb430b2\na71826a92bedd8e1f3c3e7bb31acc31a\nffc9068c8de1fe46d9869786ff7f6a46\na87214036fbca69e84a172a28c2dc\ne5b50925213ade6a340d4ac30c6d322a\n63d4e03c4effa06d6845a0762dd07baf\ndd8cebcb4d0564059352b002a7d38daa\nb05a54988fb28d20d0b341c1c5648015\n2c4f9415edb358adb71a0e5ffd778fe\n195d9d0305fd1625679efbdc830f6d0e\nf8c22e6011567f655dee408cc1ce3ebd\nf2b3efb28b5f5d56fb4038701c4e8e29\n8440ff1637f2c6d7ebe17c8dfb911d2c\n3529cd0cb733596bc22a9d71e5721aa6\n459ea1db4ad52f3d7b7c888d3626712b\nf124d85da3ef5ee5fb51920a0179fa71\n3ee0923254671a1ef2bc9da1ba799c60\n676e65417cd3d59f3aabc01aa1c5608b\naa99cc4323af7144e7321f25048c6142\n31ea284fd46d2d6013d823b13369c182\ne6304d3bec856684d9c9f98900faca52\nf3004c5b38bbc0e445804144dab4dd66\n887fdc9a9940ea57bd59d5b2d356dfd7\n1c47397db49047b9d35d1c787a8f626e\n415b39d4f60a36d742274cb89cb6c841\nec190042ef2f7aaef925cd3fbd303c2c\nb569ba9d9d74e7d5184dd44a99578080\n58837198e067db4cde008fce66fdc56a\n15e7231a97ccf7953aeb14563b37e04a\nb47b05891c5161189722ef9ae1c74e1\n5305858e5ce441d65fabfc69ee61b28b\n3cb53b32b97c0a04c04cf0f68103eaea\n1ec7d9fe07b94f6e274d4393e80e99fa\n9740d1752c70a41350577cf04f3bf74a\n441c5d2f78e1100558ecbb7ebe658148\ne70f6a81158cfb213a762233fffc49ea\n8a87846412b40900ab610b0c94236463\ne51c13070dcd4ce25432e3a73fd1f7a9\nab2f9418c111cc6ddb965514105122a4\n87d4b97120598dc54e6185a07ec22996\nac81f325fbc993d3eb42617d0a1c53b\n30fc571d408b84cd6315023d0bef39b6\ndec6a8c1c01e148d20685b5a7e34b501\n73669f92851d3b28eb34db531a289b8e\nd3193b07bd166c0611e348ae03a757ef\nf675d7c91d540e6bb45df535caecae62\n5880abd2815da0492fc6a8cbc82a5bb1\n60bde4ebc37f9b31473f10e6caaeca56\ndaae6d7f0e8d7e208a8be3c02effecce\n3017481ad6a978393eb1d3da560687e9\na9432163d01a99f1d38b9064784c4b38\n4440935e5e566502250bf58700b4d8f\n89f3262d8e06acfdeb0ce5843fe6b264\n3d4079a37c8fb40e808951ff5fb582ac\nf5f5e872bf70f59983f551e0fd7d32ac\n9972709345d24fd31ee6305032661052\n6a743f7ae8deade97e0bbc356ce23758\n35003dc3d74527729a1d432cc80562d9\neab36391bd7fb745585e5281d7025178\ncc499148f0e031054b8def6cb3b321af\nd3f9fc10276d8922f7248d9dbed7a7b8\na9a2ec15d1223290916cd984b3abbf4d\n8c4cb4ea7cbd0ff5ad3833a4ccccd8ee\n80976fe087ec183f3de42699b619b796\n42fe49800a1e65d18a6b1cf8170af1b3\nd59cbf752abeeb17f1a5dd559b550d68\n8a4cbeb489904fe3083b551ec2a5aa3\nf4097db6ad343f90d551435517f7f18d\n3cbe9bb95e5004eb342398ca9dc32672\nd0959256c79f60872a9c9a7e9520eea\n95df08344f4737e078785e24320d5ee9\ndf81df82811b2b2fe2d8a7cb76d59615\n59580147939bcb7e8b296db8a8f00728\nfc314f1e3325a47af287ec53a469521\n76d351e5df26f91fb895bc5ff828fca\n286a7629b62426b5427c20e7fc0367ac\n52a7f3e36d09848ca63c1bd05197cc\n66a50da0551d36c9f13ece01395d269b\ndfbce5e6cca00c1448627a76b6268107\n8ce9fa1075039c8c63f4b01b3d592bed\n2979d8814a450f884b8894e5e467986b\n6e4c06e5dc03291bec77bb7db6eae005\na56c13025ec97af31ac04cb85e251041\n184a3f58220427c39fd28cfa9e6e405f\n9db1c375f76c8ac1db01c957364e77d0\n9716c06d43de24387103ae93fdb3bd5f\n233a7970efc2594b26735a5c7bb362c0\n6a1e4ab7debcb3f429426a0f57e4d15e\n9ff60c2ab8d5a15abad8372756ee3232\n73c5898bf63748ff110eeb6ed2bcbbc\n5ebad73554fd866830bcd442adebae0f\n2971f417b08961475a4cd9b26f359d36\n56dee4eb44b2f0e64a6b6d001599a1e5\n40c53f54e7fb0e3ff4c409c17e0a5165\n24f34f582f9072eedc3e7f8ad872247f\n2967a5504d5aef38bb3914fb474ebce4\n74a99b32b562fcea7fa29a3ea424473\n48b8290cb0dc0a6cc785f06f424b9d06\n34d998b1845880795b1895ac674412c5\n48c17189e6c58d619f4c3c326d704746\nd85f501bf76933c609d7d8d27dbba7f\ne46e45f94470b45ad1924b802935a37a\naf2f3c9c8fe90380c75516c7217fb218\n3c7ff78e8036b217d3923426933f698d\n58fceeffe91b7b1c20685b5a7e34b501\ne7b9c172059d23a6f12f3a2695789ca4\ne5dd90d78168e53741e88434245c899\ncf16012ae10b993bd15e5f70c1308761\n2bbf7f77d43b74338a331b18e58c6914\n77f4c991478ad1c26cd5a1d5c8bb85b9\nebc62d2dac989b7d8b71a158ed504795\nd1b3804c23311181f361255e85d5896f\nd911b390503a11f96436916a86a90ed7\n4f46683ad627700edb09a997c699dabd\n6e3fafd33a4683d1fb0a4dd466ef3d66\n722df1da5778d45b1e43523279c7f09f\n1a92363c2a155ed3c397356311cbeea4\n6f9ee2b839d3a03683fb187ab7c1f026\n600bb2a17b238a927f7954f9ba534b6d\n2fc578c8daf35023ef641b9022b66b97\ne5e5018fe96e414528d0f4c81cc1f1d8\naba93b2b9b45a30dab0b172d4dea80cd\n9d51ab35cca6288da8b55d3e40d96c08\ne09670b2d890f63d84e349450a5c51b2\nc62af9a75f8779b82b8499d50978754f\nbe89d32290b9dd4aba27b59766aaedd9\n96c87c372083e06e9ce9562d3c10079\nf2f41913123a7a7e4b87db09ac4cfa73\n2e5b9f616a0805dc3704a45f4027ebcb\na6ce00ec813199804e2b01a3e0fd3197\n4736b46f6cb97d091e02c9947dc6e279\n1d9f55b1651c5190a3f4a96ccd277d49\n64fe6e4480939c5e9b485b25e7417c6f\nea4b90cca359e2d38b9be827bf6fc77\ndfe2e7c66b4063f79a6b496c6e9f4c2\n198eebeca7243399ca5ca7089655f058\n4f598d41b30b28e84158c4db508f74e8\n92e757e989dab6225ad009ac944c169e\nbe2f04d1204c86d4db70fa8937c64733\n74e3d29a7e0d5bc48ce0f31e09d08e16\n76d87469c1fa3638577ed6878ebb1511\nf7effbc133537f0aa5d0c95600bf54cb\nfbec33bb92e066ade1f2a1daf140ac9f\n44f363137d006f3cf7fe2bde3ab894f\nafcacbd7078a3b4b70bb6bcb670ecdf5\nbba0cad6dbbef2589fb287620a60b403\n2f07cae4c7809f0bcf5a37a70014c623\n1dd8b03b590dc0ff9470c43f253f33ee\n62188618e7d0b2f23dabafedd9562ca6\n6f7bbbc83183a93daafac0c8d5992bd\na52e505fb03e2d8568292529fb38e524\n4116b08cd0e4e19ff799a4672edb216b\na8e109c66a0fcce7a87d866b539e4b68\n85240d0fdd8bc669ccf3727bc3da6c48\ne6bedde4571506491fde762a4c6848dd\nbca2b66a9ef701bf585db0bff5175f74\n68206e7d85afe3619d8d0b45bd2b5b8d\n15896858de30017d8e75bb5638d14ce9\n14add565ff90153855f9913e822d5318\na990477e9c1bcaf4a70518e25ed617a7\n6afc906811e9b40421d7ca6ede0e9373\n5530382ad4ea8b364abfe5850a7ebd07\ne912fab93eb63fef6b4897a481d7d16a\n8a7712d5c8614b97974e278a62ec98f\n1a5494c28b607f699263b5578aef09fa\nddd82fb23a12e2eb2c8bd51dc6fc05b\ndb4de4095a962680c951cf8670bfff6\n600fd2598fd5761eb9099be21c212692\nf4877a34163978f84efc7e7114f1b9c5\n7940b411f730cb767ba0766d8bbd9a5c\nfe75bacab7594206ab0b172d4dea80cd\n877cadd597775369ec059109909662d2\n49ad86b608403b8ce760531185a75b14\ndcd4d3d6bbbabdc6376c487287ae2b71\n90d97637c01fd05e59122da3e1ccb92c\n30e739ed4c65f67ab71158027becbea8\n751f46191d0baf99f541411dc07303c\nf47044b611046a7bf901627f525bf7a\nd4bffa0adec5f9a73387ebdfbbe050db\nfaf54bcb640753a28c6daa755196a36\n97870c19256a95acf5f79806bd65844f\nfb92cb1fa04c2ba6bf1c304f780914c6\n792002ca0c65b1dfaf7869e0a5920f2a\n26c4051b7dfbccf4afaac116abdd44e\nc2b4ffa6f1911d4cd1ecbd6620e3fd17\n538eebd970e4870546ed33fa3575cd87\n4302bce2d7e6594cab610b0c94236463\n3ad5eaabf85f4b5cc4d320644a1ff105\ncc7bac4f85cbd7d68a04632e06812aec\na568d8aaf2b587a2f27bd2175000097\nb8386207364e622d5e7087f2d9a278a9\nf464a98b2d4f598be8581b38259c3721\n34f6cff3e8fb6315fc2aaecaba21de51\n9536f9fd4795dc2d70ef2132a4b991a\n815060a9c109ff4659de6f0155fa4014\n777a8a1c887779f47ac59aba6f9a1449\nede70dc992195dc272e55f1aa85cc5f\n32be865d1baf7eb9ca4aaad7dc0e3a16\n70dacf62da510868a5ff93a193b16554\nb86af5698f9a04a4d0d1157c0bfa4669\nc906b5644fe468a2b61fb7ca6803b7a5\n9c23caf872048374ec8285b7fd906069\n3351a012745f53a7d423fd71113e0f1d\n246f0b722dff7f16fb7ec8bd3f8b241d\n88be1603c4e07fed6418651cc29befff\ne2787b2f0dd35fccf42a90fe4baf4591\n4ee8d3a617b574ee30582dab79e5c58d\nd9b7d9a4f7560f6ffa007087bf0a09\n2190a888d3f7ba6bd3ffd38a8449bde8\n5a440522b7df4cdf318d408ca5b702a3\n813b3e438a8fcb189d9f3b4d1ec94c69\n3ca0f34c03ddd760234c2f2e8f2fe6da\n61645237bf8de4df77525a753bdd4f00\nb11d7ae45f5a84de8641d137e7c33076\n2d0138ffe3eb25b9e23244d89a2e66d6\n"
  },
  {
    "path": "data/filelists/03211117_train.lst",
    "content": "ea7dc70f0ef4b04bcbe0b8af4aec5d6c\ne2cc0d50d6953e760a25ec0f32e89e3\n301148e373839ecc37ab55b97a5e9f9\n3bb7a8505b99216a53227dcd0d547ba6\na98035c0230649c79b95c928a1983150\nb68da827b6c8852ecd0f781bc45707bd\n8399366b1dbe22edcb349a60fd15aa15\nf35e818eba233a7734bb689093b9bebf\n795fab6a3c23c0779f8445dce6fc950e\n85d0ff09690c539cfc727671f5682283\n27e65dc223cc8bc0ec059109909662d2\n2772ad703e5d4b73cf6f327fca156fb\nff8418d110a5fd5211ab369e12343c13\n93b288efbbffff30c1dae5936fc55ce0\n7034d396585632ef5450caead37a1c9f\nc9a56fbe2d5d735f9daa2bf0c68f794f\naf56bcebf21951faefc87a91fe7ba1b0\n559bdf7d41b538f6290d1211e69c442c\nc257e38f51bb660447de0ecdff019da9\n9abd70906336af9c1c209b1cd3e81587\ne3d94861020f97eb37fe7bdc65e35547\n94001a0000497e8ae4b68d3b17c43658\n7f489cfe5174ea20c29a46091cf24cad\n7e53c694e5a223346989969642549931\nc9ff448d7dd7b271c7c51d4ea74651a7\n42c0246643c8ad0a2af8f68791a7d624\nfa7324388797a2b41143ab0877fec7c3\n95832db2feb0cc7ce441f5bb6f88ca61\n33c639831fef416957015074db1e51bc\n64abc0ca2670818e441f5bb6f88ca61\ned31aec87c045ebdebe17c8dfb911d2c\n78e3dd96ff1dab94e20f4d2769bff1e6\ncadc40a7bb182a40cc229b563d900f4b\n5a4add4da7414d11f2a521bdff0d8feb\n4731c3b756e3366958aeac7d536d442b\n42a81c2a4a261f1e1bb088904f7cb154\nfac8bc5420f9d472b36c473722d8f02c\nfdf3953c665c36fdeb47c06d7d8c2d65\ned9c1a4011d870c258d40d577ba17fc6\n5a66f2589c7df206e1f2a1daf140ac9f\n44d14268d1e961e02f653d2c3f9c5e62\n9b66be71bb69a85b3e6db88fd9485c19\n7dd5b5e5fbb63466ce4aeb2e2812e0bc\ndba7ecbb12fffaebbf61576316934f86\nd8b955cb8ef35cd22f2d2270d816bf3a\nd31610e1a17c5d31631465dbc2e64814\ndbcc94dbf216e37588bef8ce0a02fc04\n792839c9e28f5afe4edf4a0df1fbc500\nfb1ca7e50ec3013b493a838ac2ced544\nd1ff5895420a205dba1a3bdff265e174\n977da77136819715cf8a1b5af7e0bc1d\nf06cab8286ad4f7cecb44abbf263be08\n3057eaec13a196fd5b244f7c2ed32e73\n95244648a330b9c0330afa9b9b51085f\nf6515d1343e25bab8913de0e5cfdcafb\ndac4f4f039a9467f46d83d16be057f3e\n7c06bba1afa0553225a454369d791fb0\n8fde0d7ae62ae2c802b4057d350ec8\n8bf89a26f5e7824a8eb91f418e60b82e\n44651d91ab8b2851fbff60ddd047b071\n6c8f7736660f2e97e441f5bb6f88ca61\ned7e0817614b1c155e7087f2d9a278a9\n385b89320cb3db4b958a493036fc8628\nc356866299f4451cd3563af8dc07cd64\n762b30a37bb098ebe7db3cc5ece34048\naa73f1b28817376c6cf19e722198d69\ndf5e129b50eb2f253bec56bff764ba78\n28b6e44e37586fd797e8123bbbc761d8\na6fe1a137c076e51d404da78b2c36d5d\na47aaca6619252acc4f499be00229a55\n225d37286bed9bb9dbf53b03c847b004\nc65b30c8ec2833692d56866e214da3cf\n453b06180bcfd33a86b76551c6a3b2b\n2b2204a683efead6dfb0e2d6f3832f45\n437d1c161da1b9fc57e4c0b864012bb5\ncab3f094677c1070202380f1becb8a55\nf4955005fc3fa1bb64b3cbf502645c74\n9b7cab4099b2d1dcab29d5c9003deef\ncdede148ed40e40187cd01e4a414d87f\n2963a8a608ba6833b6709846a0e82dc3\ncfe8df98fcd4964d9d58cf21d5faaa2c\na1e844489abee455972d35c68e1bdca3\n3863575f24e6bbe3fe5c8ffd0f5eba47\n20476424cf10985610b144a5a224780\n29aaace957daebc982c69f261576200a\nd330d50a0255529d19ed6e1a590c9122\nd1718f74c964b34e234c2f2e8f2fe6da\ne4f34d5f5cc64a85f2e5d34c7b677bc4\n6272280e5ee3637d4f8f787d72a46973\n66d6590ce707340f1c7075c2bc313334\n8ef52dd9b307eebfa31cc7b61ec6561\n5ff51c478471d1f15468776e191863a2\nb72579335543691423c841f9d5051936\ne477ab5ea25f171172249e3f2c8f56f7\neaad54605e6dfee6d862787d0e1b892b\n32413d2f2103b3a5286e185ca42b30ee\nf8a23c22e76666a3d4ab0eed66631cfe\nb90e7ec58327059e20327f464fa1f012\nd854bf9f589e5a6e69a98c3ec2f88e7d\nc201c9ddb8493c15c3b69089417dba57\n4812245f2f9fa2c953ed9ce120377769\n2ddb8a9c6a81f7c1be7e1d42d63ca9f0\ne7409303fa52f74b98de02aebd38a1f0\nd6039aa6de8b5992af6cfa169befaf46\n3a9dfefa52a6d2643ed8be9ed4b2b6c8\n5f73ccba7af987789744d3b3ee0cc03\n4d74d8c3df7a85051d225d751745cd28\nbdf3dbf43ef2637f578d107c71db28ac\n70c042c5761072bda543b6c4e1dad166\nffbe714918d982594dea158f05aae320\nf82e94964e06f23fd6d49cce41472b6e\nabc4a3eb2c6fbe8064d221a686772b82\nf4a259b4778a77b37b2bb75885cfc44\nafda884544124320642ac1f4cab4f5b\n397644e58faef380e441f5bb6f88ca61\nff2664a07ecb6edceacb155f400b9076\nde66399eb8aaaad44913c6e8e05bb2fb\n421ad85cbba562878fc3447f3635506f\n717d3ef4c7000c5917a27c3fa1d3566d\nd5ae3a2aeb50a07e75e49fe23848bbe5\n34808bb66b2bfa07ab7f9d2da6fc61cf\n801812bb859e6c91f9786f6e93041cd8\nb2ec76ac8a5c7afa40ff33d80c1d7d1e\n2b70ecfd4dfd162d4a5f5cae871f39f9\na20887f46f9974d9a23949c21eddef76\n1063cfe209bdaeb340ff33d80c1d7d1e\n314bcf37588dac1ca802f44e0266ca93\n324ef9fa783f6fa3a70ed7ac6903e853\n41bfdff7b99c13703f7e27638e63d848\n31daffe57909195455357c338ec9641\nccd03d11c95554bae4aef3a037da6f67\nd9bac9c418667d2ba62bc668cb34e698\n5bd1493a07c13d675f1b26547b9ff327\n8bd568244e513b09c3a0fa8ea839ee26\n9557d54db1c95572e15527f70689f25a\ned00d5a47a7ddbd5e464ff83d36486e8\ncf7294db3c65ca5c945ef919ad31a7a6\nc47998c0a317c60611ea7f12f22c0e84\n7cff26e6dc84bd02c598d38a6a69ad2\nad3e62240370a4eab2c358fd992922e6\n9a64fd5e660a8725ae95d460d60954d6\n111f2a331b626935d82b15a1af434a9f\ncfdd661f4521ae0e331bde3212dc4d8\na0383e1388e74ad8b0851ce87f32a267\n61a81475b820a85aa73340dd35da57bc\nf1a3e41b45de104a810988cb5fefedde\n1e6d8cfd991e829ae441f5bb6f88ca61\nad0edcc0855d1218dab76ad0db1f9537\n3c4c7ec7ffdfec50f39105e1e4d2e270\n37ed0bdf52f2eaa83c5474c35497dc65\n6c49b516b04e89a15817e30de1dabac4\n1707d858ffaf146e640578ae55230ebc\n6c56f6063ceb2ba4de1b0b03ca051f02\n937190441ee0d2568b7ba679b8625927\n56a247c3688af350723edebb30e0215f\nb3ed6cea7ecd3f56e481cbc0aafd242a\n54ec97f055d68a78ea0068b966c5177\n25df40f2502c6bc2b2fee0e811c64fd3\nbc690122f4a3646047dd811b692e315a\n5fb06d76ec44a16bfa6dbbeb09c2f316\nd96ab618ee698f008eaad608e74402f5\necb96d46eca5724fef0411fcb48f0299\n5c79b27734380b011a9e831992816ab\n5e0fe73a4d919b1af5f79806bd65844f\nd7b87d0083bf5568fd28950562697757\nc19d616f13bb70d39306959137da47ca\na44dc3e6f574bcc942e76de3842fd93c\nb38d6f1025399725815b2b467e8e2eac\nab68830951b9a5a02ba94c8f6eceab22\n6f3c489407842f81c36ff2417ee947\n288a8917e51c57deb0957d845ac33749\n79f3ccc203ed18cc2b09e302847180f5\na536c6a5f1a118feac653254a68e1397\n909bd886fceb080a6facfc0053fedfbe\nb08085c7aad830e3f45db6a75d78cb47\n786f74cbab946ef78517036a5ca6b1c7\n691ed09923a0feb95adfd0d9df77c16d\n817aa43250590b38b3425db9d50d5dff\n3783ec2d4ac3b097a7f97cee360e8d0f\n4a2a1d7cf80d6031275d003e423c59ba\n75237ff4dabf0e9592552ad7302636b3\n144ab629198c837eeeb8d422649e5f2b\n2ca1353d647e5c51df8d3317f6046bb8\n6fcbee5937d1cf28e5dbcc9343304f4a\n68944f7b386310c2515fc0d40df6c5c1\n2ba6e0c4ea459f84f5f79806bd65844f\nd0e4da00e7f9db087bf393182f1ba834\ne17da83890fca0b8290273bda7ed0d31\n8a7b80310c1d8d1b3d5369d27421e60\ne6585f8ce05ee27cf8bee374511267d3\nfd19c9fe3d5e58549c4081063e213a15\nd3bd7aa1ebfa45fcfba7d64da57889bd\n5f0119e9c7f437ff83361808b78d50c3\ndac5376988db376b7700ed9200d31a49\ne2fab6391d388d1971863f1e1f0d28a4\n816eabad5c1ca552744107c67e903f9a\ne1eb75d031091e422616600cb9fa6226\n50934056d4c1735dc9d02d4e580c2722\n481a1dfe44babb3892b08e504d6ff5ca\n3592a95cd54f38599bb952e15a37e248\n4ee9c39b1f77a29a9d5e963395eec7e9\n830b29f6fe5d9e51542a2cfb40957ec8\n1df7bf502e4b0e8647dd811b692e315a\n65582f49b9191ea805062aaa3bb7665\n64c23d38d98f7529811348287b48cb45\na18316fe31d3e24ed113457aa21fa2cf\n2eb15877e9ae80d1d50505ee01b106d8\n1bd2a09a9057cbaa2b518e07b1fccf95\nb2257460f3465f76370c049e2352d133\n91db88d4d0956e92a9a12c50dc330a66\n3defd11d1a251becc2fd601ec7a8062b\naaded29a2283bb4c4920a74a78f531dc\n75617d66e4d82ea2318461dc09ee739c\n72b55fd0ec85d68164ac9dbe3ce7e6be\n42ad980a4102f1c1bac465483662a51d\nc61bc4cd473fe3326bd865f153842b49\na17e2808f0176f87f1f3662486c882e5\n7e1212c48c877b87eca8a38e13335285\nfb62e62c2b1584b45d32c81b99496e1d\n6fa8694a2b5dd0b9db768007c05f817\n3531ea4e850159dc43a6722dac94523b\nb163a1a49784d1b890da575a4a08834\n1405ccaff7fa9dbd51b711a0825fda5b\n542ea1fa89d51f12dbb15541d28bf6f1\nfe3e7a35b8a1c06d3bb4a1304fe504d3\n52387a90d9aa2fb019945cdf27c7de1b\n4b85feeead6313806329e8c7b28434da\n8a89e2085e5f8404da89bed86b8f9261\n402938797a9a63bee270f79b60ac4232\necd1641932584115fcea08a6f6e1c30a\n5fda7abf1b684ae8f464a4627ebb5e55\n882619bc31c4e4c88091986dc5b9a01e\n25a09a149d018bdcaa95bf474e195f02\na57682cb8ebc224eedb8bbed3955f432\n48f2b6c3c82635c119609759f8339ed9\nbae43dafa75f827f4375bc8943daa105\n8359589eb5c647a61f571c9e890db987\n800ca9956f66a22a23d94393165a64e3\n6437fc773d50e93b5c915b36bc455bdf\nba29aa5a87317ee09327b89c3431616a\n54f5393846bbdc64e34e21eb7fabb319\n5934ee46f6872adbf19c9a0272a2c26\nf480ab303b2b595eb9f9e1b0ade9a295\ndf35d335e76abf5618ba239e198ef2ba\n6f1c8a6b5d684a98e3d888a4f2b9ef73\n4bfa2e1e43d64c51cbdbc7635e6b79a5\na296a6d7957a8ce9eb752889d5199f9f\n901170b0a4cf30e746407779dbd69b2d\n536bbf9f697bbe881df9770149d6661b\ne85041124d09cb07318461dc09ee739c\nd72732ab9e03ca861d73f583f51a758d\n4a8e7bab0b1bcf77103e42d04ec345ab\ndf2f0bef5a669d6262c440075d5ed193\n31f688edc350505191cb6690cc7eb18e\nf6722edbe92ed28f37b2bb75885cfc44\n58eac12dcadab8bd6ff188b4687b7936\nc4c15ab5dace66f81ba1d2ff478f3057\nc57f3b53b19aec84713decb1a0563b12\nab69e803c34c6b8536871b478a4420ba\ncccbf9be5d578b49bfba6cd89592cf9e\n9994c527e9c39bc5b50d0c6a0c254040\n9852ad45bb14a66fce2fdea99c5936e8\n13c8048199d8063c6c6253deb0c008d9\n60e6ee2c3a2aa3fd6d07c55cf995503e\neaea42ae1a406492df8cce42a274b981\n46609dafc47fdf2b74b687cfa539ab78\n740c4c76185ae7ef91a491e8257bd6fe\n763d4754a37cdb953c491389420760\n880cec9f3dff564af81b347089add3de\n1f4b16094bd83af82d2d2896f4b277fc\n3c495b3a2c2af890acc9692a1d1e7dea\ne52ef251efe783ab9475cee1777b2299\n27107e057772be0d6b07917e9ad0834a\ndf8e098d4dbcb5b2ccc4d915989bc424\n3fc7b2412782b8e9964f7ff178873e82\n9de3c0365edd0c0b3e487c876d55197b\nf47b9fc9a55a731a7bc6032416bc8ae\nd58e51e184fcc1a2fc30525e763ef5eb\nf3a03a173932c42b4b9b715645ffbf22\n3209637ef61547c040feea836646b66e\n7e3d087ac72e46c2e53dd9bb27ba3c50\nfc0b4809f5a1a613496b87cefd345586\n9a8487c37ea68b49e5a14a547274f040\nb3f23358467f8c75dc974f7ff5ddbdee\n274acc511daf0161bbf0c65ae96423ae\n134c9a46684ab57271f27bd49a6cd214\nd965c9192e2ef568d36eadf9dfcb1300\n840dfd5a8a5ad3f31db54d45f574231f\nf800fbcdef1ac9038b5dbcd4be5ceef8\n5c53dd3bab676b6444ac2f2630483b52\ndae83168187a9ef8628fbfd12f0feda1\n444fe598a0ff9d7ebe24753b6321b5ca\nccff142a647e673dc24648b5216c0d5\n6011d9bbe9b04cf7b6b6751f39e7b3e5\nb8db7ada8acd039a3406f1378b19168e\na33702c33c345df57dee7bb3061fcbd3\nd6752674a181d04829c956de83176829\ne58344689760e33158aeac7d536d442b\n416674f64be11975bc4f8438441dcb1d\neb75ac8723230375d465c64f5322e86\n3b188e87ba5f109e377cf79903309074\nb95414b9723439a6fd28950562697757\n4b29b207acce575dafb07a946d621b3c\nf3d6470b3f4f5ad71c7075c2bc313334\n48edccab11f0698be441f5bb6f88ca61\necb3d57cc0e8018f3f6b4923416758fd\n26b26a5c4a8fad9e57145c11333eb62a\n47cc124678ef84c53bb4a1304fe504d3\n8bf7dbdae495ea9c9db805a3358d2d5\n2711433532f6d1fdd7426bda0fe4ebcb\nff9a428991106434b9e65df431a37c1\n3ebda8146a84d7e64fceb9938a41179f\n2be8c8104d0025ba74dedaf762719321\n93b69d3caf90a837e441f5bb6f88ca61\n15e411905cf8d7d455c2bf8f07989ec0\nd41ff8cc1f08db6341d8f14d547541e\n79c623657fc683a54112e839a470cf05\n132df41128e6b43356fd3a55668db806\ncc3adfb500c1d443b441e189e5a85c02\n94482409d0396dfa3f8f528a267748f\n93d0756b41670e89ce2fdea99c5936e8\n2d828dc0e75a47ab760433abc0037bf6\n3f4a2b59d82e0f353e72acd01188238a\nbfa95d845671c54c26d3b1eda72fa17b\n99ab7f145618ec841a1272c8e47f5670\nb7315a68691210ebb25884c97d065d99\ndc4b21d338c4b4d1bef7854be4daf5ad\n19a4584a4d29778a78585e33b915d9a5\n14a02f4475a5df5e337758c9d9c83ebe\nedfc3a8ecc5b07e9feb0fb1dff94c98a\n2bd7f9ea0c695a309c739d3276070b8b\n23f0e9274d835f2d75796bb36346e6ad\nff62121443345bf76cff78602fbd834e\n6856b84c3a8463e3d5f7c62c7dfe63f9\ne52a477d9b54dbd5672efd73ea104790\n3fa2125a637970e2dc43f1f9f0a849c6\n8dda338160076595234c2f2e8f2fe6da\n31f6f2b4bb6c524cab1a5567c60e2688\n4428b3a883f177c262f318360c3d0c75\n5a9951b9945e67566d260179aed5cd80\n28ec688f444eeb4a394b1e418d5c594\ndd6c708c87d7160fac6198958b06e897\ncebb35bd663c82d3554a13580615ae1\n318d349c03f0926e9b72ce7a99d3dedb\na0f10ade51e1adcd8b8d299c28ab08aa\n742705ebaa879604f2e5d34c7b677bc4\n12ea5095e96f9ed185d624cfcd9a37a7\n3f15446861936b20eb1a50f8f2ea3a88\ncdf8eff26c940d7fcd1272091a2a216\n45cae393b431f75e8873c005ead1ead8\n4f11144acd79460b120322eac6386b\nb3a975cb984a8fc6cc98452c8fce6b43\n5a20c7f723b42d2b74ff95ba57b167a8\ncd9d0c82b16aed01e4db95aedeacfd37\n849b58834fec864c34794e47f2eafa39\n9ec1a96e81e1e714fa6dbbeb09c2f316\nf3f21d06ff78f426aa444c25b73bbf6\ncde799eeb40e6e8524d1772907b17f1\n5e64913f2c74cb4825680a002b1d7d67\ncb8a39997ea5433b159fbcda62e85465\nc8d02bdfb32767648e4cc49dd8a5f1a\nff7333934e9ecd5f681c36c9abb1a31b\ne9466e872848075d3aeab48ed64c0fa4\na151ea6f6bf27e2c9a7c2b8fd801b3e8\n350da53c8b5dddcde2313f5ca29127ab\n9b764d286359e0f9cb84789183638105\nfdf5375eea4c3858498a04ba00344041\nbb01397739208d30d39a67ea53079d95\ndc73dee56c43fe018047f0f85f295702\n95d82c761a54684db3690a118770a184\n611a15a623643e12fab31d1a99fa2e\n182a5ccd3c0c9887c21c5d9d91c5c9b5\n1dccc6eee1ab6f942d692d2ec5374fbb\n5bf10196a11a166466ebaa8e9b491151\n736c5f322277bd99ff21f7d46312e751\n73895e2bed7007fb2df5ba101cd14a11\nbdb87409ff3ba876cfc4c39af557e76e\n6a08ffb169d2929cda4553545dd45630\n602570deed9cebea66ae7844c5fcdd1f\n62ac1e4559205e24f9702e673573a443\nf9acfb901156d3b7dfa29c60bc1700e1\n70c43793136021289261ff87472ba275\n4dfbb9a4ee89b5b29382b62c9161999f\n7c5b291091dd0a166acb8fbfb472b3a6\n2049436c2457a4203087f84b199fd297\nbf5a771386075e449b3250464ea24783\n64f6ac23636c5c2c8a17805dbfb751e2\n7185d52bc9a5425e2f84cb7932f866fd\nbdb7abf15b1a3f437483e5069dd82374\nc4b636e2c361be9dece694d60a812f12\nc16f53ea58244af7d5297776dd9015b5\n732dde95416888ac21d25a6a55757584\nbdea41fb7dc360b57639b23a4f342494\n3899bd2eb8f9e9d07e76a21e51d48a61\nb5f473b7fb7cb7a7cc12bab62e8ade64\n9be4d56513c06315a045e7ca381c39f6\n810fac004670692fe9d7a3dffbf25100\nf7623667b09f2737a10a38d9fc3b0d4e\nd2f37af28550950f4161e123a102b12b\n8fb07bba1524168f7f6853a06fdb3f45\n8b5a96b72767f7354fac5eaf08c4d9ce\n118083b82350b53cb23e7e4bd2944793\n96f01698d0446641ea6e0950aa8ac31b\n3de6f62a6faeb80933e9820fd7ca74b3\nd89d1059b23e8c60edd8d267b4d8ab38\n45406c697e4fcbced742faccfe08d94c\ncbf33a6fa0f21270fc88f15aa2f9c9d3\n9c8a2e3431b0b2dda2cc48a1579329e\n8ec017a94a41b097b1b11b582321dc3a\n2809c09ef575f34214618fe9321a9ffc\ndee129ab8c2f74944c58a7782e1dd690\n1a9e1fb2a51ffd065b07a27512172330\n37eab42757ae1545be36894b151eda76\nf0582a84c9f7f353ba24f8032b14b71c\n462ba756d3337b475f16c469ffeb982e\n4270cebd8ca0f2593dfb5aeeb86be115\nffd0fd5aa21b9c8fb441e189e5a85c02\nd24f05f573621080af70f0a098b23d33\n36ea450f5d479481c795085b4d203932\n3e1d0fb46bc7f84f9c4081063e213a15\n6e26dd3afa4eb0a889cc5332e945f058\ncd859f728ba259b0eb5d382c7eb13b28\n18371c836b01c024b41d52ced3f83dc3\ndbff3b6424b743f6ec7770a2628afd7b\n9b1362da6b7eef2b290d7f93e1252a27\n5c67f17ab9c9db50fcf74172442ff5b7\n64a769a9a884d63f802380d5ccf70dc\nf240248beae8d20661049a5d9182333f\nbfd57bdfa26cea8b5db5515d1151e20c\n1fa9b1a775b6fd32d8d030206053b340\nf155df0854fb33a11030e4efcf938b6b\n46c594660d9fd584c8ec06d23612ae6a\n14c9e39b05dd2cf2a07f2e5419bb2c4\n4714a692a7e425285d534b823e951083\n898073ee0a493fed4c58a7782e1dd690\nec77fd7cf6e4810ea0a7b8ecc42036d5\n5097aadb04ed3518f91a08212ded5334\ne1d73ee44f1d2422b5fb024f65f6da\n12c64d690700ecd2d25ca1a27cf9bdec\nf34958255486228cd174bb92d075f795\n16e6d2d5b895f04dd3e94baac7a5a368\nc2d39973237252e85e7087f2d9a278a9\nd5b088ccd7d1a7ba8e2d66cbf6a91063\nf6a08ec163a037c310b3ff08c68acccf\na5939f4fbe1009687f2411014f221968\nd5d6824b5115b3d65167d3ead22db5b1\n90502bbf33c05edb369cafe8a991ad4a\ne1eac12837bcadcf44d2fe7d13c65f0c\nfa48bff74086eb8ad69923e104170fc5\n41f428dfe76c1788957b752c832ca929\n45c66a24bf0851246e22e2d2f64c8cef\n6a5ff378aeb44691a3fc5ccb0f902d07\n87b093f1fa5495968cb623bbd4140197\n917142dae380e5591ae30faf8d21acd7\n4abc3db68398e2cf16eb1b6d0ba9133c\nbb6392ddfeb98b19822cf0bd2945d4dd\n1d1cd29446bff16090adfc5ef6476a6e\nbb2639fdd7ee85202f58405e4baaa2ed\n1e9d554d26d4195f37ec10b15648a127\ndd724473b5eba80421844676433a0aca\ned0975c0bfab1af75f17e2852ee16b0c\nfd2f94be1061ff2ac92f2f0063445de9\na3ada0a8bc0d4b8392ababf87635e60c\n1f76e392f49bc1cda6c7922fe9004961\nfc0d0287ea544c707c65e97bab3e4970\n3324b4a3f1440d7b4161e123a102b12b\na5269c81a3d7e8a01242824b4827fe77\n1d628bde22788cb74161e123a102b12b\nb097e8761c3cafe5a35a7666f0cfa5bb\nf89e49aa0058323d677ccd99bc42875d\n5282a5a7482b317ae81a51f0a8c4cae1\na5c6d3b9945df19dc534b4cdb1fd80d6\n98a4d71b85b581fec92f2f0063445de9\n5cb4fac8452906f66ba14bfd91a75020\n871dcd6740ed8d2891a7ac029a825f73\n23c99db82c910931e2c8e43c97ec5a85\nb9b01abf4d7c9458ed756341424d6b8e\n5ecf4a1f273ae695729e474769d21582\ne38a7ba01d45953ccb7547c95fbdff26\nf75d1962eb04669a164790a64bab08f0\n6a9dcf34fdfe8ba82d8b18d11bd45e6\nb6bb7bb5927798724161e123a102b12b\nbb284aaeb7ccb54b5c4dc8ac281ba59d\n3c475567446dc6b7d6f4cef762589739\nd5eaa13bf0dae2fee2e6b284e4b0319f\nb9ef07b9ea14f4fb1dc17d595f9add09\nad0b349657fb807d88d19ffcab9e20eb\n8dd161fa61bb651eaa95bf474e195f02\nf5b05e9eedcbaf9cf4d1910799b338b7\n52e60434725b8bf8f0975d5dbdd766e\n1a4216ac5ffbf1e89c7ce4b816b39bd0\n66a71f2cb778aa726321867cfa9ee57c\nc08e59a3d09cbabf6002a1da9aad9f4f\n68a4fc70bff1e1cc700fc5aa044d9995\nc28d66941e2005cd11ea7f12f22c0e84\n2e6204b4aa7ba83fbd28395acf9af65e\n2cfbaf480d94552c43c8f1cd479ffb1e\n7a2d9d3d185cff794b85c79082892df6\n4516c31dae48a0efbff4c0ca0d98b77\n9fc580b2097a1d3beaa3086aec501406\ned9d09a17e472e0acc9692a1d1e7dea\n38ecf0c5f3d5ee533fb0920a55a7e805\n529cf5ad63bd49c8ccbd9a558eb91a2f\n8893ff22c6dae8e3a276bea9ebd065c5\ned7d00e977de27e2bdfd4afbfb3ee4a\nd475b620ef72756f795284068bb430b2\n1a98ee5b62f49c95f64616b54f9ba882\n2bb72bc8157a2d8dd5f7c62c7dfe63f9\n6bf634a79cadc9851b02cde7e81f0fc3\n31ea65d446d980162a544c9c0bfe248c\n6ffb9e26f6d0ac61e4a4a1a686b4ec8d\n6a85470c071da91a73c24ae76518fe62\n2f3bdb6fbaaf9e60eeb8d422649e5f2b\nf17247f450ab313489d3a03b2edae972\n46cb55835a88ca85eba70eb27950150e\nf84f6c14852ddad1d06e6be4f8954ac\n241b26438e8523ee2846fa729d90e125\n36ac6a08317e2c618f533a7f52262bdd\n7422a1f42ebb1a1bea9ea4147227b8a3\n5286df5fdb7ab5cf403c2939fca0114\n941c16598b8fb4f92ddfcbe9b600cb8e\n700dca3a410b751551d078b27da66690\n3077837de566c236a42abfb83da6a2e\nd53e94b52e0cd47f71dd5d95c394249c\n25913689394d86bd158b0b2e23af3d37\n792427e9b92c4de63b1969d0afef691a\nc57bb5a71ebcece8751bb40f9a4c6ba5\nbb870360cda15433e441f5bb6f88ca61\n76e8b00a0f6f78de1f82a1eb98f84dee\ne65ace5f42977a75cae346657a37ed71\n5318296d6d07e4e6d40cd81b129905bc\n597a278f80d04db46d3e11439c6c22c8\nbb5b1f086ec0012d2e80bae93fb41fe8\nb0952767eeb21b88e2b075a80e28c81b\n3934f942bb0b462a90b6c749bc63f3e6\nbd3df021605a8aa24c619b8a18eba62d\n18dd6b73f3ac2fa26da250acc5e18ffc\nae33f2b2031069e0dc67390c888f2eca\ne2e40536be6daf7615000ab5e56184f5\n7ad85d1478f03d4f4532b058befb6326\n648fe31415502db61c298d13539601a\nffa987a79bc96e869e23f6fc87a31098\nd8a44fc1f40d0ec271d096a6914e7333\nb6070e5c314eb16033fe3b9714de209e\nc98e0e745a92abccaa60d250862f15f\n31c2bcb49eebce088198059e96f7b9ac\n5b2585db758fac87bed75a82d9bfc7c\n8f032c701a2d1de772167aadb6db5f77\n5bccf9711e1cfcc914e970d26b98a862\n2475d02352162243cba9caf4d254cef0\nac2ea2d41c57d1075999f9ba82d15928\ne767c4f34fdce88a9c4081063e213a15\nae8e106b972648d5bab4cb27e92377c4\nf7d209529e47778d7a39f8821ef8c382\n609dffc42c3507212492d8a3aa63f4f5\n8007344358703f62d26c7f75d64f049f\n65988a39887ffed8edba57559632880a\n181bc7c78185f30516a6c448fcdff967\nac30fac9534c509f2de252a52ebb4cfe\n21d627f21efd9298c9b80153270af5ed\n668f2602ee2cd581a312d1c0842a5165\n78f69254fdbe4cb4ded49d32c1b10de3\n21de0761d0f8f2f9342b2a88bd008cbe\n12c1b3fa24cce3e75745b9fe8da12812\n7706cc4ddbc96d4975d665dad1b6a18e\n6a759a4b85141936e4157a1ae61981fe\n2b0b8c07582c83d426bb7052f66b6d5b\ne7a14693e9c70577ac74d552b6a649aa\n8f577d90510e94e09506335f6ccd62b6\ndbfc22d7d096f66d5f1b26547b9ff327\n586b4ef8eb5a59b39bd9aec93599c5cd\n2f1975216fc24c5e572bfae97b5793b0\nb228f0d5208fd9ac30ae9117a5a20ccf\n10953ef61c72aacccd14781dae25affc\n7fbb5bb76b0058be972398ea2df8e7c2\nc7185c6e5dd741e139b7c00cb61e68ec\n6bc1a795d199d952f97ef3b999ddb957\nb0c1b6c373c4ef3a83f09c7d0a6695f0\nd206f9b91dbe5693cc5743e8d662956\nab20e7f54f10bd0ec1f8c53978a2ad35\n77fee7e689d94e0f3637439a589fcdc5\n64f160a87582cea38a57abd4646e319\n75336682aa3e245f80ecbe6250826360\n99c0bf1f81b835129857176349e96f9a\nbdde8a0134ad5283340f0692b6ac89e8\n9d9bfaf1a4d6c3a05f8ab9d7b9f9d24a\neb712261aec94a8ddf8fce61d01de43d\n9aea8bba40aa793d9429f6a938b3978d\ndab9064d7c98acaec5aa65dab0a56ab7\nd89cb5da6288ae91a21dea5979316c3e\ndc004210d943c86073b4ec5aa28d567a\nd1fe596d83fc231ef300ba2413f318b5\nb06ad1afbbc8ba7536b34d1a0ff085ad\n767a4f06f66596a4d0e90ab6c6492cb4\n78e7b27f68570f3c47dcca01880c200f\nd10085421b3cd3a27504aecf4baaa1e\n55ee60e04ea3816e94accef64b26a3ff\n4744bc26253dd076174f1b91e00d9f2d\ncf7434589520c549e420fe49ae1a5a34\na6985e8e32df69a7fe50497d5e2cdada\n2eb7069d227393558ea0068b966c5177\nb302ee5206ec79c34ec31516689e34ad\n165531f6138b14eb107d63d06953370e\n61a9c9dd90089425769ba004c0947e77\n17226b72d812ce47272b806070e7941c\n5e70a62a7a1bdac5590b59440deecfa9\n191bc5c03d27789379857d0b1bb98706\nf2a27af5dba2217a38a57abd4646e319\n9711341338f550145b778a830599543\n8826871281dc12951072594c80fb7e4e\n9cd4467976a27ac9f3b65283778dd624\nfab433a56c7734aa16eb1b6d0ba9133c\n85395b5f99177f864311b8458795b94b\n981d4ebcfcd3c733701bcc8e95172446\n300b49e25538c0ee5088116dfed138b9\ne80b420abf6c590c3841abb8f4ea69aa\n5664e1d072c3f39dc39fc02d4c9e2419\n771a0b1638955f3946f539968f885949\nc4e4d46434173023ddc138ff009971cc\nbe2018563a5bf1a088fe6ee2419d9481\nc0c1c344c3bcea10c0a5099af057718f\n38517a97e7eaca1cf801e8fe8a186462\n2361d8f169a7f3479ed83bc63b2fb8ab\nf3d4cb310a6106f5e66202687a227eab\n3817ccc2d7a247cbd821b4c6abf4a2ac\nc32dfbc85ddecd0eab610b0c94236463\n15f23ffcc92b751af7502a3b84f78df0\n8449704b3c3c290ec5243a0ab191990d\nd54253b71f017565b441e189e5a85c02\n85e99418c109b98e8324c9a156c64d52\n79f26b0be635b891631d57ce83092826\n6f7689fbca875b034302674f512c0e5e\ncaed0c8c10f5738bafe08eb441adfc09\nf0482a9b7084c6f8c83b51ded97d6038\n44bf642d0b33752628fdea86734e40fc\nd8142f27c166cc21f103e4fb531505b4\nf1b1a1badc8ed7e739d3eeb007af69a3\nc12a485b4241be83b70b5d25a1334116\nab8af4bf679eb599ffb8194c06b9bc3c\n7c16ddd8f3d099dade6274736c2a6b68\n45a4d128553abb329bf8498db368caef\nadaceffcf1d89f9552b499dc8d840804\nc0ed587c1ca5709b1c9fef7c3e095105\ne8428a7732155fc1134821a4f2837ea4\n2198dccbee4d38e11a23ce2d1a5d3925\nd4d94e7a1f75a67e3f7b7c3393bbad8\ndddc8d8cdd6361e49c9fa9de1518212\n2c4bcdc965d6de30cfe893744630a6b9\n9cdad8b178d7743326782c9200ca97fc\n6dab3e32b5cb52f1d67173c00f9e1676\n7621d8ca26b9296b104dc10235c6ecca\n2ea0fcf4f443b36c5516f88085cb9af9\n72353901edbe553ef5f9c04ae80a1c59\n3dd60d646dc8a3da988b29896df44cd8\n2112d3266c05ad92d99bf9137e86c0b\nf84f47c7ffe0e49e44175b4dddf5be08\n9da823886a808f7da8f1d83a370a51c0\nfbe9615a45afa17524f0493013a8318f\nbafe343788f824bd372d432893cb48f8\n1f6cf74de609bae7f5542066243014cb\naef2bbdc3b1e9e026a5e01bb88954fd1\n98b12e9101b3d93c972a63e345b45a25\n5c16184e52d1317f5c188551f03b75de\n12c3e644bc371f30366648d52e38fd70\nd9c951f1008183e69755c35f0639c9f5\nd8f4c5160059ef245d79a44cb814180d\n2c1e2873955b563920685b5a7e34b501\n70df1655d1e766ece537be33cc045ee9\n9ea0bddee8c8654d6b56d21c51d762b9\nc8223ca4a4fc81b3ad1f278e1513f3b7\n646b0bd4e03fba8d566636e42679cc7f\neb2b450565c77e3efc7ff8f848d1c6c9\n21ad9636dfcc9578c78df40cf2e9097a\ncaa4afd404f24d21275c1147a304ed86\nf7a5ed426a6195d97c8d48014e04ccd1\n956f4464a0c344d621c6aa624f82ef1\n83ceb90b398df731a8b411915b2949d6\ne3201a9e4ac0a8a9e255d96ab3987a\n581df3d934bbb7d3206de7995cd4a74d\n928c86eabc0be624c2bf2dcc31ba1713\n9a24880343d943f7ec059109909662d2\n65d100a427b8078de1fb8c5792a5768b\nfaa79bebcefea4256a4b4e0348cf692\nd9bc4b2da5df08b7eedaa5970dd41792\nf5fc954736b06be15fd06491ae919ea3\ncb0bbe56efdc7c2590fbc3d35abb4728\ndca7417eaa143de13ccf3d40fbcf475f\nfc542f42b786ae20c40162916d18053d\nebe5a5c179cd4ae355b9f0c05f9db07c\n2d5d4d79cd464298566636e42679cc7f\nfe314324a1e7e5c967a964feaf6ebeb\nab64dabcbaf1086f14d199c00aad9da1\nf3bfeab806cc976072052f2ed83934f0\n7636d7c650108b884dcb5392aaf2167b\n478dded38f3f8d52934a98c0476fcf4b\n518b97c2a0892aced88854fc3e3ce05\n1a92ca1592aefb2f9531a714ad5bf7d5\nd9960f7455676e94a0a7b8ecc42036d5\n666902d92f3c8e3f8ee4af899d7fc545\n3aee103b0bde9cd7c16bf14ed6ef2f6\n692db5a6fb6cea2174649592553d1a1f\n6eaba6819fa9b07a37a807a435008662\nba5518af411cffd8cfe78be5b7b99c8d\n4a21927379f965a9e4b68d3b17c43658\n94525af6a244a33c21d7ca6ede0e9373\ned90f61317c3d3598435a9b7d922cf3b\n68dd0f25329c5779be95cd31e095c9d4\ndbc61cbed5f7f2b33c1abb78f1519c49\nd96fda816cfd848e9aefc6fb585e9617\n33083674276c5cf5b07a27512172330\n846b6c8cf241ce2648d13901d1f48e04\ndede15a6e1d27b9bd2458bf307c1dd72\n5bace77f1df591e9241640224e45ebea\ndfde382270f1d69a28010a96423245ae\n2cb149b137f5182ec2c4d83da2705396\n2d56817501cf5fdbf477ab3f8ee0ba9c\ncc1611b5120b8aad9651cd1d591d64d\n2d8a4b48acaf84d791bf924be509bc17\n1984fb95afb6dae5804722305621f918\n3813c5f6f50bb28a3e2061cce7606c61\ndfe294c64407f6035c6271c95adbdee\ndf624231ef05b83d54c7ab6aa5674ccc\naa92ecd31491bca87a88a2ad67bfd073\n2a08ac484551337a90eb6645edb4567b\n93b702bd7ae98bd16942161d780bcaa0\n37a5faaf0eb38031e0e89fd83955713c\nd7ab9503d7f6dac6b4382097c3e8bcf7\ncfac66fe0cec664a8069dabf6dffa846\n7525e9e986fa5059f64945cf4aa3c1a6\n6946bf798ab999b7cfbd2b4a434b378\nefae87e53a1fbdf05dc3653f8341633a\n93e260150e7788ab574b5684eaec43e9\neb54df4a6211364d49d7025d277c28a1\n1308ff4c4998cec02918c93bdb2b63e8\n854a48e0d902d97f9ba2cfdf95405270\ncc4b7dbffb52fdacaccd68c8aac6846c\ndbcd5a88a9d4f1d7579cfe4420588034\n31ef46873b20e53274e7ea1d002bf071\nba0f98e212668fdd22532be027c41b0c\n3e9af28eb2d6e216a4e3429ccb8eaf16\nd061d2b6c934d0cc8b4b5227fac4401\nde5813ab2771ed36c3c11bfa5a6c7ac9\nebd183cd1d075dd3bed06f4e613c0aec\ne817263a3acf985ff6c7cc6dd504006d\n51fcf8537a132b789058e0e56fa89a94\n115cf7354bf5926331067bcb59115bdc\nb4386438057e85988bfba3df1f776207\nff512c4ebd3f9e27f08984f51debc075\n9e087d56d1264f0bae8d825afe55a6fb\n7a89e5ca49a48bf6fc22823f73266007\nc5d14b600ba28289ef2d91f96fdec842\n1dd3f80712873a638f6095a93258c867\n22e8d055ae154efbd12a1bc232f6622c\nccd6958947505b34f9f3c6290096f50f\n9329eb153c1e8b4d8479362ee6ff3679\n8f9c63f788d0044dedea6f8de4918c9e\n415324f27ddd70b4ec3d7b1a84909dc7\n21e8d146503b0e72d9651cd1d591d64d\n3b01bed34001c78211eba86b475bafe7\n44c3e596206ce29dec86cc96197c0b31\n4d11b3c781f36fb3675041302508f0e1\ne6a0a8940246d5bf4e104a60eb91ab8a\n4b2a5a666ebcc1ae57c0e3dc4a759a6e\ndb13ba7f1da5dace4ad2635b7d12d09e\n5145c2175f9db9d3f0478431b5ad57db\nab8cd6dd65cb0ca9770f31b5d5715b63\n782655d93313d14726ee873dae10ece7\n9ab58a92609d8f5030b540842bf7e90a\n2c5b951b726b7672c137fd38f49b032c\ncd71c33773db5570be7e507ed67c0331\n75432c09d6b34efd336e9e51cf4eee59\n2a2369e8b0a139f67230cc2111ecdc77\n7b0327ed7286487623ab4519e0263310\n3c4382b40b0e9400279326882e8430cb\n6ac7bd79924399c4a0778cc08d9b97f8\nc4a41bdc2246d79743b1666db9daca7c\nd0792c5556bdca56d1f6a4fe2f47b311\n1412e61a9bc08ac4e6d9f3854f1baef8\n252640ae350a1e53f119712971a6882c\ncc5e011d644edf395eae7316b4dfcbbe\nef7ea1a94404fa633c1661cdd6e9aee5\n631ebdea5af51e499399ee63318a21b\nd4d8dd7053596249bc1905b3bc668597\n61d0f582475b3d2089b367279b017ccc\n7a5a80c7a2d89bc6728fa2df514c65d4\n59e53aaa8d8e9d5d9bb1951c99c5330a\nace79948f769c652fdccfdbeccce2c03\n30b5026e1c3f8c8a93e4d36e0c61da87\n993e7df9e8166312af8f68791a7d624\n2d0b890161ac04b4a4d9f38918617d27\n9ef960721520d46a922e9adbedbcd67\n5e7034ba47012cf088c7562a134f5ac2\na6a5497848d40c4a46738cc3b1934e6b\ne42fdc1419328bd7efdd13124d5ebc47\nd83dcf0d435bbb87b6d41c42f7ade8c8\nf39b7f08d4ea066be57ac88f5432bb4e\n817aa8a9ac7f57f9dd936ff7b4023f05\n50575a330ffdc66ff5a91610a18641eb\nbbfac23f57b5fbd820e867fd9fb7164\n75ba7901816b273fe24979df4ff99c50\n4407eac60124e17789e75af9d2c4ee4b\nb13c22f9eda41f328c504ffda4ce2aaa\n15ccd76ba83a2e02b0f9d182eb000fb\n946ec8b571ca42d378838533e331d3cf\n9b6d300449f7bd573cffc71116771f14\n4230f614a9d9a13625acf8f19a51a492\n3b188ac95d09cc149d74e2a2b8c0c58b\n2f12da0c7460b22cd3ab2bc0f53ca878\nc0125cb175a11bc4990549fb11675099\n195ab29b4e0bcdd07b20cb946bceb58f\n87f8c79413300052252cde31666379c\n78c2861ca4574a8fd9deb3f829cc2475\n28ce23d5e56e9afa8fb952c92850e1dc\n36255c016e837e6c234c2f2e8f2fe6da\n3f83beaa4da6209dca62ec94d15d08\n149733a616f846a2b661587eebd6c4d7\n4e49873292196f02574b5684eaec43e9\naa2f94416852aaccc60dad40a0c0e85b\n91bd5e0ff352d942abfcccdda2fa4764\n31512a50c12258726ca2b6e5474aad11\n7c889c3c89dd0933ce2fdea99c5936e8\nc514d99259ffe1abe441f5bb6f88ca61\n765526579b03cea972a71697434c2820\n4d033564f0dcb412afac285245c66df0\n217e2634c55f240c18533b168bff8839\ndada218e78c9c81e2250bf58700b4d8f\ndce03c1f0b8365c335f8aa71d1d146bc\n5cbdebf9422d9858dcabaa2ad147fa73\na51ca49763fafecf8f25f3eae9fd9c7b\n11c041a780cd7e58e8b612d9fc824411\n5757f2fe8b1b4b559ee60daa6185f65\n25c6bdd929f9aef77d6fbcfb6b291844\nf82557870d71f3a11f9b5b6530d6e16\nf3ab112671b02010be54ae8147665701\n8798383e9e4181d3f4c39a35147bf949\n339950e98c5d943a20685b5a7e34b501\n57093dac689edcf2cd318d8b7a33448f\n5f248c8e804af22f6436916a86a90ed7\nb0cc3e614afbe6546892efe917403e6c\n9727d690fe514475ac5153554deeb14e\n3317e93256b3f4f15e7087f2d9a278a9\nac06493582be880388c7562a134f5ac2\ne71f7231406aa6ee4019d3f83e009e77\n76b4b83212ffcbe034af0ed44f2ab2fe\n87882e55a8914e78a3cb15c59bd3ecf2\n9297e108b9780fe7da0ccb8671dd235b\nab729d209e3ebe2fb3cfe9e599b99e13\nb7a259bd391ad43c69b642ba22680f87\nf1d77e0f4a2adc2bb305a938e0ed1b48\na7dfbb06cf1803b0b6d41c42f7ade8c8\n58426d216f393034d24e3068806a8c67\nea58a7f6955d740fd18c7d7f7c43f51\n7560f6f70263aeb9f5b8dd4ebdc4068b\nf4d398256e6ec0b4f910da6a487551c\n2608db8ae887c6e0b996b003c2af3823\n68e75f7265569b8ca2d7e4322f7f9e03\n4476577ff4776f5fa3ca88ef9e9610f4\nd3bc26796e7fcc6b3956af37bf042355\n7fac92e1ac6e11945f6762b47fc0ecae\n7467b25f70675892d50c22be0354e623\needbd3126dad6abe5de04aad18bd94c3\ncf4c78178c9dc8c292df4681ccc21025\n9e1b897c08a6a91f94cedf1e55d56e03\n51b92bb1df3b1a10ad1d87becf13ddd9\ndecec5d8e1f9f54e1a5295d0078b5d60\n87fb8857bf2bd3a7420ada7b49a056b8\n3fcd048b1daedbdeac22ae9309c09ec\n862ac718bed40aef2715de3ea7b582d7\na03ff904fbcf341ce333e1b65ebab960\n74cb25b4b8b2b89df9f3c6290096f50f\n8c4a886b6b2c8d94d7f301df5d83f77e\nffc224f284b63b17b0f6d70666df2668\n5f2048a8af029336a186ecbc0474571d\nd34a267fb332b052901fed29c825c894\n"
  },
  {
    "path": "data/filelists/03636649_test.lst",
    "content": "845542d0f578a9db1ec48bc3c478566d\n7fa0f8d0da975ea0f323a65d99f15033\n9dad7ce60aa168d72cd2160e449d45ae\n7bc1b202ebf000625949e084b65603cf\nf7627b6ebf92fca6d3f6d823f04dd65\n99d884a5b3a6677bbebfb887e83028e1\n2ba14b4b910e3f41d983ed4f6d016adc\ndbc50a84c8d24f9168c981036afdae64\nbc49fe3559e18fcb7d910d51d878f708\n545672cd928e85e7d706ecb3379aa341\n761fb0822bb05bc8ee0cd746086d989\n923097cec128ae77469cbaa3d6420fb4\nf77abf171ff5968720331d4c3b7d944e\n526251a7530426a4b3c42e318f3affc\ne053e531fc4341b5fcb8d8c6d4df8143\nd9f6bd064c9fd456fcb8d8c6d4df8143\n73378b714c5bfed2b922d818b19db1e\nfc8cfb4ad6730207ad90876bf5435820\nf7a4590c54e2ac7ce62fad6b4f42c880\nb6989c99bba1226539b3360f500ac52a\n8f2e03f91a970464ef3a2c64cef919d0\n23c41f1c519c82202dccb0b1a2845fc\nbc704db7b62582e5d1cbf3e52b9b6237\nc906a9c7ae536a0c7fb7f79251dd7727\nafb7cc3bbc3595a4e9b3dff83c7ff715\ne93f10a58e0da99bb2920cf5c60c4da3\n864ecd5e816326dc2da4b3ec05850371\ne001d10c9aed09d9947a4fb398a91722\ne062fc06dd5e0e01469ef73f4f6c51df\ne529fc190753cc9df647dc544bb0ab61\ne35c4fadbf8d0426c26e81144f3196d5\nf6eeb5d67c32616648fda83c10428379\nbe13324c84d2a9d72b151d8b52c53b90\nb2d5929e66044aeac7db9c21ccfbc4a1\nb69c3a0a46b932e3d3c1fbbc2200e255\n370623095c9773e42ce7d46577f8a9bd\nf673fc77f397a061d49b2e04785f8492\nfc03629860dfd3608ecdcdc5181b3655\nb8c87ad9d4930983a8d82fc8a3e54728\ncdbe11124dbf418167ac0fa90111fad0\nc372499c4fb0b707e262a7452d41c334\n33b77c66e1f849b790c4e2a44fddf755\n3834d7f376879c03eca29403b7226aa1\nc26b7862f2afb7ee4b3c42e318f3affc\nd34a10201a5448a253cf897b7fc1d12\nc6424950ca9447627d8864caa856253b\nb4be7d84e2151a3e8bb3deb7fab7c9b7\n9c0b48006e3f6aeda1dbdc0360a4cc99\n42bc0dce81734d892610e2a20d7c4b61\n1475fe59961fc726f096eadaad23f93d\nc6612c884c025a48f647dc544bb0ab61\ncaa8985efa72ea528d6a77b750ad3e43\nfd15a43ef545096fb6f5e7b313e4eaae\n98cdb45ca9925feb194eb328dc97c7e2\nd779977c2417752b815c6de5374a8dd2\n4d6bced89943df73b4edf02c99e16daa\n14d3d2418165ec86bba785994a529f86\nb8350fcf08ff0b2ca950bf8f33cff658\n2af78c0b040634e5881cd5e2fd8f0f3b\nb57bcdb88c669663ec2a7a1f5fe7365d\nd1dc19013dca2182536407ae4270b9be\n1e91664763d371937dd73da65dc0e6a7\n70b78b9439a9de7530f6e0ede20c4525\n466af3262bb31094c35131da26f8061a\nb8e25e0825cb5db7765609a3f435fe9d\n4631e756666a8a208ca4aeb5e3b33af7\n236e0f8f6e74578ccbc9e602dbf6a4a\nf29758075925a871d706ecb3379aa341\n981b55897cee64403c8d0fdfb1cc2535\n92e0f64c08f0c8ac3c8d0fdfb1cc2535\n69429d8ffb5009a82060e7309fc3fc6\nc9a0c193805df62accbc9e602dbf6a4a\n33d0e0731c771712eed9bc72790ab85e\ne88e3d0c851a00fe6764a784715fb668\n26f0f37f0f2623c4a3fa46ae73c48b4\nd6db6a800c1ac87bcd783766d090e665\n4bb676c497969016de98d10ab5975b59\n5f0a23ce527d0be52f38c0d2792fb5e\n3781aa0aaed95b8049244b68aadec703\ndac278ab197b5efefaa6996ece0d86f4\ne3ee6b31e54e95b7d42b9650f19dd425\n8e025c4aa0b0201a81a172d69c52a28a\nb96c8cc6529167bfcb8d8c6d4df8143\n52783aa89adf06f3250c527721570ba0\n68491d576b5d35aade8e7376ce4e111f\n9282928d320e83091735ea0e092a805a\n9f5c3ea9f8254b8bd42b9650f19dd425\n20e1e4849339e64f5077539b37310c29\n6bb8020fa82b27dde11a3e838aa2c287\n71dffdee89efe07cdff00b2637ddcbde\n348d6ddf9e02cbddf647dc544bb0ab61\nf85f26c5a807b22312bea13341a54c3f\na29aa1d787d4d3252cd2160e449d45ae\ne6de1ff0564f172ad96790493cac7283\n66cf69a98ff895e2b55fde51a411949f\n402f7ce2b87e7d1ac066b9622c005c53\n88257c5a48d94b1e2b151d8b52c53b90\n4bd3f50f903cb1bffbaaaf5884f2c88f\n7b1fef0071908d4bd93768e7b9b1eabf\nea5ae3cfd142c3b923f93f957094a824\nc905941a8db6575fd5141de389ccb29\n703b4edd4d407a10f8ddacb75f806b29\n7bebdd742342ba93febad4f49b26ec52\ne37796d40348fa5fd8013bb984303089\ne15defcb3dd448094fffb007974c9976\nb4aee889d5e2a826f6747912091f1965\n284986b4c72d624abd73284bc3c3cbac\ne94aab17400945413225afab722d9fd2\na654df55875a2104d663817442d5278\ne15960ae59486c464ccb9dd377d00737\n4deef34d95367b58c0d95250e682f6ee\n35975525ec3d835046f58f62995211d4\n7ad15667f654fc08664b3b9b23ddfcbc\n1874da9ffb42f3ee990f8ee13a15ddf6\n771d4def2e44bc169eb34048e600e1ea\nff08713d837d87edf2098a9f7fc86999\nd8a5c77da4c92921f7258dec1a592c96\nd97a86cea650ae0baf5b49ad7809302\n994e14ddae6f642ca0a1df19404132e9\n1682d4404196cf127588e2ca59b15f8\n49cd0dd4d1c008edbbc7a6acbd8f058b\n70bf2aaedbf9499ec889c00efdaf9928\nc0b0d7e15d3dfab1733c22d8b8e1c33d\n927e0654427c4d0b82241d99b4e87f38\ncef0caa638ab9be03b1e8527d043af60\nd90639e69c82f864eb2d9895648d1206\n58e0f2ca80931a77e99f6f079f038d\n9fdaafde365beafc37f7ce56c66316ea\n8bd35721e2767dc43225afab722d9fd2\n9fc3ddc511f4ef62dced62abd38a02b0\n94940283714fdff6244ba644cf33cb2e\nc89d854d5c61e751cdd3c867acb77e12\n28793511c46b4fa030f6e0ede20c4525\n57c1bc69df779d87bbc7a6acbd8f058b\n6efc48bb9267c2ab4c6deb9ede0648df\nc802fa4c82498450af6016f34c89d087\n2d638c6b6b2feb9248da169d95204ce2\n3deedc86a83bbf23f647dc544bb0ab61\n4f16fffbe480b835276206fae5d3c473\n122fb7bfa09c184ca249f8489bc060dd\n894cdb80665ba73dbfeb5b5bfc3dfc3b\n796d944631745f69275286bf1f79c201\n913ba6b6ac6aea3356c82fefb25b338b\ne7ffebf4dd9176542cd2160e449d45ae\ncbe6d8fab4be74a11735ea0e092a805a\n88d29e1350eda810c066b9622c005c53\n72bc0272ab1ce5a3f8d6a4359d6a181b\n4c266f2b866c59e761fef32872c6fa53\nb2f18bebf6566bcc97554b6bd947feea\n79861fc79f8dd8b478b03575bb54dfd4\n389653b54a3b5d3cd73bf61f46c61ea3\n292f1f97a543d735dedf3c967c85981a\nfe02f6594ed8b96ae85a3dc26b76b2ae\n4d44c896993e80a11391d5b018495c2c\n3e7ef877f826230dedde7b5a5ea6d004\nc4dc0ac169c91ff29f8c3d2002c77ddb\n78b7adf1f72ad31a841a2fa612410176\ne688f147080f123828eb8d149efa4062\n1f115309bcbcbc5326010ae5c9a5e78f\nf228f6cd86162beb659dda512294c744\n5ffcd5bc4f1548181c7f081cf615f39b\ne99793b871d27333d42b9650f19dd425\nc695408a86062c4d242ea50288b3f64\n31c9507ec40650d0d5506bacc83bff24\n438e9c32633a7094056b9c3d62d1efd\n50683065aa8bd6bec308dc58cdbda034\n3fca250636e2b47a8d0fc77aab7a8d33\na60c6cf7d4893f2ba26bf7a8fd4719ad\n8935987356200f8d84f9e9db2fdf33bb\ncdab137a52000da1b0957d845ac33749\n1d963d5c54613202b0aa15078ea6f391\n913ff6452d0ea43c9d62807daf4a2134\n9af818e49ae8a9357bbff3af6bac359e\n527212b174a5313fdd5616230e7f3c5c\nfc602899fa852d6878aa68632c6b1d5f\na68678b3e52fcda2bd239d670cf7d8dc\nba05811f301cdd791735ea0e092a805a\ne7e45a8f0b0ab311c754474f0ac106\n29985e44b73051d923500a5b036df62e\nb4b15a84b9067f94a75d03186a0409e2\n69a708be7245f4c9786e8e92cc08146\n6ccb43088eda061dbfc838749f053cf9\n2ce7732982343c1d9792f6094a78f8d5\nf3a9cc3060fd6b0e6e4f8fc909e0d34e\n947c6753d77d8082290e2f84c414e6be\n5be8cdad3b218e373d39d8012919dd25\n6595ee36783d261ed3281970e2c44dbe\n5d3d9d6a6721646e441f5bb6f88ca61\nb02bd8e5ef9cfe354b3c42e318f3affc\n7634fbdcaa6b304d62c83ac1e3a4ebaa\n5580b95ab8e7806c6c5b8009db95f66f\nb4af7e9a7338a9a3225afab722d9fd2\n43b59fbc4703d7d1c8e6d2030713566b\nce621e6df1ab9ae35d2cdb96c1afe34\n6ba931adfa36c7965208aab875b932bc\nda8141b45da808199a06a7de97b096dc\ncd80cc92cf732e8d8a17805dbfb751e2\n4a868756ae6404a5c0bc57897eddf6f\nf29a94f969dd55ffc35131da26f8061a\n85f8a8c585742c9b96a3517f50eeb9f4\n746b82746c6a02cca5f600ed2cf472ac\n907fd296708ae71dd5fab5deb286066\n83c0ad378b5802b73d39d8012919dd25\n5b744ac897fe8bc557f40ff86fe708ff\ne2343ffc39e5f4bf85a18a4e86f89dc9\n61b57e8b5da8fb13d527a9a6f5a872b9\n50cade4e6f714f2fc72e6d708486db91\na37695d83a39adb52866fbd701f50f71\n3a0edfd418e020b97f32712aef0efc5a\nb2347fe81bd2db6a4b3c42e318f3affc\n6b10584984035b088314f68ce9e12e4c\ne507bc77c03a1b3afcb8d8c6d4df8143\n9b558be5e2b60e3eb09f0ca9c143fdfd\n1f58b59a1b6b06df766fc93a239bada0\nb1e552b454366a9d7787152e5befb05b\nc898f9b1dddbb8801735ea0e092a805a\n77883e18cc08859ddb1afe6c464e7652\nfad026744a6abb1937cf479d4bb58d\na53112591be182b9d93768e7b9b1eabf\n3cd21b83cf709f1829a42a0444436860\n5a957ade80507541ff2c92c2a4f65876\nf97506704760741b460fa882e24b7e4a\nd00157a022079bdef3655a2ce983ab1f\na3ff2bc2ac65bf093aa7852a81a014bb\n1c05f1a7125402ea4c135b40422475eb\n5849d1a237cb493c659dda512294c744\nd2d645ce6ad43434d42b9650f19dd425\n1a44dd6ee873d443da13974b3533fb59\n776e4b38023091002cd2160e449d45ae\nf38370fc4c112017a6e7138fdd58748\naa5ebe13f6d51761d197f67767b32741\n45f11cb4099c9c87bbc7a6acbd8f058b\nc080aefc6cbff8c81185ac82ed4da80d\n783b81aa54a69a26d42b9650f19dd425\nb2e46fb6018d2cf2d93768e7b9b1eabf\n4916f793d87dd184d42b9650f19dd425\na4c0f3aed58f0e092fdae21c212bf119\ne178ab3b967c7fddc901d9dddb735c9f\n3766b272cd3836cf28699debac30ad6\nd456beea1501f278f70220cd6be776f7\n44e442591f82cd4cab0ac374f450cdc\naa734f5c5dab1e672d26f74bb535ca48\n31a15957bd4f32f87eedf2c7d21f7cfa\n1d5ed34e8ccd86a88c94c2386714981e\n7be01530bf43f2ed8a83637b92bdc7\n6aa1ce4e245001589f1a71e46bbde97c\ndfe800d8d8642e9647bc3701b998a7d5\n963e6743370d5c5c9b5d51fa8cce1753\nb2ed0a4a8caa5139295966c2452536a6\nd4498a4ba89b9a0d4a73e364671ba824\na4c06cd5032733af543df75232f6ff2b\n2b194d6bed8daa82c0b2dda5ff15ea28\n64eaa45bd2e01db8991ff09eca5b27a8\n7daa2c16580e9f8ee055d2b52a9e17d8\n1ea51a962ebd04f5775b45d31226d2b3\nd4bbd93c0d85e77d7934a0d24a61231\n3b5f0c01c2b914fc6f16f167d27a7dab\nbc218fcb647e7127984fb9ec7e40829\na0e1732661667683664b3b9b23ddfcbc\neb311e6232cb7011bb5bd941c6665c21\n7075ee8d16f012e350a4c7031a41d126\nfd1371c24e12c16251d6edf97cc5502d\nd438e1e1b540a30b1f329c416dca6157\ndd818b0269b1aa15fcb8d8c6d4df8143\nd7760d5f9e1e6a622cd2160e449d45ae\n97b7d9aabe38f91df11c97be803c47d\n445724eab48f591cd650d96de5aec623\n2ac7f0509507c6cfbaaf4e0b7520fb81\n7b005e23eae2768eb08c032bedc99529\n8f7863c4940c99211735ea0e092a805a\n23040992da19679aaa7cb30470f3273c\n7f518fe982aae1b5940c8a2639c8747\nd13f1adad399c9f1ea93fe4e1ab627a2\n78a11c0b8e964c9b41657e31b569b105\ne6dae18d7ffbb7ff952c851f81463faa\n39af776c1435a3374b59758e9336ca87\n78b95abd1d1158ffef3a2c64cef919d0\n34020466b4342812218c9f1216abefd\n26f725bb6578936cd247b9308cd5c441\n93a984496599a5b82b151d8b52c53b90\n5eda619e5f36499fc1537287b5c50d9d\n7c23362b39f318cbb18d6f615cb18bdd\n495af808806f1727a753b1b88fff4abb\nd0fde1daedab10365240248232b90795\nd42435906e79e4131de8e551fc6cf2b0\n3a5a0f4c78e17b284f0c4075db76b7c\n427806f30c61059c22e05b5d2ce39e3b\n1d89da4ac1538ada9c949ae6274aa016\n600b2f00113ad714e2367b9e27f16a71\n77d1b5aaf145f8905ecb3cc57fe87cee\n155c83f40406bd0c48d945252c13120a\nea71ba1d8d8c8e5888a1de3dc61bfeef\n8581a3ae1f77319ac066b9622c005c53\n90d70f0a6b1cf72d79f0be73913de469\n5bc478e9c4e0bb8180936c51aa7ffcf5\n7591d7cc9587643caa5752b5743a662b\nbc40c19e71fd258046f1a7cdff74f3f7\nf7093dd024fd09fc7219d6d5c4afbaff\n4e54fc131882f2233c8d0fdfb1cc2535\n2f6f1fe66631572c6c5b8009db95f66f\n3b64d5033c580d2ef76898f881b76a\n9aff9fdad0e3555c7eecb4e0df212ad9\n4cf8166bbaab7c816fd1582e84bf3110\n32c0bfaac424ae9bf51f77a6d7299806\nec8dc2311d381a9e3d39d8012919dd25\nc6b545ae1a7b180879c251b4a7838829\n2b79c0ed9fc840e7e64208ea01814e71\n49749cf225cb899573ab7b7128d466a2\nd3f84442201b6c137fb7f79251dd7727\n33147aaf3d2c6fbc137af984a9f45d65\n34ce1de178694f87e76bc197b3a3ffc0\n280fa01686e780ba3501c961e91ff6d7\ncef6757831b4d9738c8f019f17f4687c\n89b168160388c29da996f5a90dae9cac\n86d7a728dc35d634f800b597bc1c1eb5\ne485053f3e0d18252cd2160e449d45ae\n4ba237c2c40313f373b3ec02b97cb0f\n1ef03aab18277ff1ef3a2c64cef919d0\n5a9e0dd068e2436bd7ebac63aa51083\nb4f166440439171741657e31b569b105\n53afad2e573b26b141657e31b569b105\n7972fd0fe5755b4ad42b9650f19dd425\nb78bef16d4f44844931e98da3a93e73e\nd16bb6b2f26084556acbef8d3bef8f28\nc25cc72cd06852e75bbea6ee257e41cc\nf12822778713f5e35b36bbc16e99b441\nfd5f6ab819910a66dc7f95a5a82e36f7\n13ba3fbe8fbc53f3ef3a2c64cef919d0\nd5480fd1d05e8962d42b9650f19dd425\n31dee666120727b0be78c8b300d2a963\n55077c2175d97b8889ab11a408196888\nce406a32bdc610198ca4aeb5e3b33af7\n92c2c146432ff304153c1c3f0c464db2\n85f71a4724fa37c33d39d8012919dd25\n941271c5d9b192eaccd8f9b9403fd602\nb230c6d9aeca66e52633ff66beb9cf31\nab3e153cd23e992b576a354bb9319732\n1bb465b8f22315d1116f219d90a571c2\n81894e0739e3fea9d49b2e04785f8492\ne5e9ff118631c2a3ee088de33038f12a\n19388898dd69dd9fddc8e6d1ec6242c3\n2a52bd01472ec7e1589ec67c01f5c1a7\n777a686890d74b350359b4e03cfdfa\n5f7abec29905605b1a19392327642641\n85e79f31c24f878cef3a2c64cef919d0\n17349d6d35aac0685ed28d6c8a1bdfe5\n2958cd9fd799bf02cfbcbf340cec6da1\n8adca6727b3275cc305056296c226e1f\n3b90765f78db34cdb827dc66c75bf2d5\nba05f660341b7b7b70be09f44cb2fef5\n7691ae0488f3be56f92cb63577c2f16d\n330b05e262c93e216078c74a96498820\nca09dc8016291c171735ea0e092a805a\n699fcda4f4e9166ec5eb7aae719027b2\nb3a98808fb1ccd892a5041fadf25a502\nf9259d31df38bd5decd204cd7180226d\nead77648c9c7dbf8d42b9650f19dd425\naed950102f1e9c7a659dda512294c744\n8a9f2e5b726ea37f60ad823977adaa23\n522bc10920249e67141c66e2b49d221\n3c4d8c4ebe9dedbc2cd2160e449d45ae\n3e2d51c40b37c9c086052e834fbd2c4a\n896abd405c79547086485c798787f66b\nbf792ee1a5570858d0615e6a68ba2d50\nb88c9a7aaab268fb42b08fbc749346d6\nb37e07ac31fa4f311735ea0e092a805a\n76eb7436c40e083384d184bdc625781a\ne180510d07b65fff571108a6d1e94edd\nbd1cbcb990375022b45fed2806c331ab\n9d41e23f00d11d153033d35b49a20c8\n77a7d38645738e2212c5719ce6179\nddc2d39dac6e84506c5b8009db95f66f\ndc8b9cc431acdda473f5a6f6800a3e79\n1f4df93fc1ca81c985bde43adc8959db\n80436dff2a30721849655ac7c771b113\n2c806132ebd0fa0eccc87962551b3d9d\n25999cece7e71cdae8c9f1b00ff43053\n90b0f9a1ac2e54ecbc7f58784fda27b5\n213d911cc489c352b5db3f95d706a0c9\n46811f96fdad80cf912acc8c54e7fc1\n90651b3febfc3afe15226aa76eb7c3e\n670ad2964ad5a98c9f1a71e46bbde97c\nc43c89d862e10552b24ecc319936dfe2\nf46d1e234c05fa4e62635f8519c19a80\ne5ff9311bee487f5ca4aaad7dc0e3a16\ndbe15772a731fff01de2a416d49fc18b\n3d82ed43806901b4df9c597227d75069\n5e6abfc7d93fa5f1dc0efee4b442070\n3ab9e4300cee0259f72e8839e840c146\n6b2a590446ad5794b10e111f2d30684d\n3768d9037d103d9630a24fed263415f3\nb0871c4ac8505d9c3d39d8012919dd25\n7a2362fbddbee9a4d197f67767b32741\na1d09074c83bbe418ca4aeb5e3b33af7\ndc005e462f4941078a3097a6302b0866\nedf15d323abc7333cf66a9e192dbe265\n3815469d7a7d336ab0a29c51aa6f10ce\nf4e1a4032b1686cec35131da26f8061a\nb7b4361b0042126ac7d17f1ea7477fc2\nf8534299ecce5c16eaf14273fa406ffc\n25427fc8b45e4c6370ad12dcb213189e\n32e9d8a4b5a141a2615efc34c3b36ef0\n1917888a2b6901091735ea0e092a805a\n39bc57beb358fae677981b941eb4f5d1\n5d97be0e2414bfe0a8930422448288ea\nd460bf2dd59883f44e1a714ee619465a\nd9e6815b6af181cab76e29c9c43bc7aa\nc54d3a5a9c8a655e46407779dbd69b2d\n15c51ecb58bf304fef3a2c64cef919d0\nec2806b889462892a84fca5de7f98b9e\n5c5119a226e1ce9934804d261199e1bf\n5254dbd4b24449edfcb8d8c6d4df8143\ncf6c082b9534049494db33559ec0df30\n5cca570916f420e64b3c42e318f3affc\n1e5e1ff56c27c0d2adc5f5aafedb1c38\n66111d2c7a23b0feb404555b84577afb\nb36bfbbc98cb45431735ea0e092a805a\ned57181b9e7644a3f51f77a6d7299806\n6f6fc4581830b1c49ae96150e853545f\n6a6fac314f0f295047a478fc5fc970de\nf01358d4f45cae23ce670f026edf07e5\n5c7965b0835a1a241de9bf5a9c22fde\n7893d0b50a7b6a768ec45924afa4ac91\n292ba732e002629e68c2f5eb1dd4dfaa\n31768574bcddbdde60ad823977adaa23\n8f85c2195890ccf671f0940f5ed452dc\naa78d1c91a8949313c8d0fdfb1cc2535\nfa9dc903c8324b85e3d605ae370b7c5c\nade3cb8149a1fe6dc066b9622c005c53\ndce4bd10d499b2f24b3c42e318f3affc\n77a5a12147a6624d786810c22b062a88\n978df83c1cee012729a60d6ab40898d\n833d33785c62634b192fe29c2d3d296a\n53846d2802f58f97c066b9622c005c53\na801be11157a7f243d39d8012919dd25\n8a6d770e6b4942c5ef3a2c64cef919d0\n2df829fa60a85466a2f2a5c7a758a47\nc1b939cc403a0662664b3b9b23ddfcbc\n9db87bf898efd448cbde89e0c48a01bf\nf092117adb1e9254d1cbf3e52b9b6237\n9841e6ef0d244f3d42b9650f19dd425\ne4c9bb21fe5bfeb3e21f078602e2eda8\ne7b719516449701362525a4d857f099d\n7124fa42397a447c34db027e489e649e\ne0a2948797cc33b2e19a0cc107ada7cd\n72ba0dc1fd49c2b5eef5d83b671bb264\n7cb828eb3b8e424b1e88064118b89a3e\na138582b1d0b9cbb137af984a9f45d65\nab8afd0f2f10be4f3443b22038d340\nbaddae470b28db0482e23b5f9fd46e1e\n36182fffe5b450fd65d1b2bc83ce78db\nca6812040234d1ecf57534363fbbac3\n3f968096c74ee3a3b04a2e6a78ff6c49\na1f602d18e9c0f06733c22d8b8e1c33d\nfe4ca0ab385784d8df6cfab91d65bb91\n24927157e3a53c1f91cb6b6c47a03f13\n2691d3491111def44674c364bb213983\nc78f6882973e616d2102429c788ba90\nfa80490adfa79863aa9da28fb4d9b628\n6272bb389bb524f0c8e1fef75f114ecc\ne6f2e77940fbc85a8e2d66cbf6a91063\n9adee08c737c7c134c6deb9ede0648df\nefedd8c990f9926c48d945252c13120a\n3dda46a537bc16e689ab11a408196888\n"
  },
  {
    "path": "data/filelists/03636649_train.lst",
    "content": "d526a340408764d8ec0f2eef0b7e551e\ne7b9477eaf6e2b64fe755e3418b63110\n1e9b2d5d65a8b7c29fe8663d47f73813\nda64c56e36024add5b903ba10d2ec446\n15332cc15b3de2e7a4ee05a5737b7178\ndd1dde844f5b8ceef361255e85d5896f\n5f901ee60f9c0d2c6297030373bd4c3f\n9fde9f07e6217b7490c2e24416edfe5b\n9c5a4f568399539b47afb7a57d27bf15\n65f23d07991128e3fbb8cbddab1c2002\n4dc9f86110ea40aaa570c6c691c987a8\n33e210ccfa79a0ed581fd19c35a5c8c\n6f4f8f3788da22817217386867d08cc\n3330789450af921544fe3ba945082ada\na172874df5369cea1e70766334ac46af\n4aba50849f4d24d7581fd19c35a5c8c\nb474613907b293682f8b82e61bb347fa\n21bca6a33809c7f26f2deb6dd348d3c7\n377df6e7a3d84edfa123ce0dff5bf4e6\n36cbe594af434ef9a89ecd28750d46ac\n89cb9b2ad175b833cadf6344ec272e8\nf69d3903096b6bb78ca4aeb5e3b33af7\nea9ec4d9db2e06202471e6dd5ac3ef92\ned45838f0c557b778a0c77569eaa010f\n87254ebbd9e57bb84dd6c3274cd9823\nc3d57dada3819e60fbaaaf5884f2c88f\n185e37856f55b2c4e9aa07397ea1cf8d\n5dbb2120f2f828d28aaae3d020f5ddf8\n374ee0d01fb25ecc9bad7d7f6ef7bb21\n1ae630bed26fcf4d448e1c9934d83117\nce3b5fdadd2b73216aea2f18ee404fd5\n8508808961d5a0b2b1f2a89349f43b2\n6e1fe96adbb5ffba8bae2d07dadd1b5d\na0812cee3fff72103ca265f557f5dc3e\n555152a8e9cdbbe41afedc87fe387fe\nea9721231b1369c93ffd072b23bde58\nd682bfc447413fd167a9bb855340227f\nc5b6259812704f11e3ebe8b18779c486\n2ac3b0a04514988e8c451c71f65d5dec\n787bd789cf2aab676e0185e256a599cc\n3c39bff6acbb6060899bad344dc01f2f\n50f14b490f3f4589f51f77a6d7299806\nc93f10431b324061581fd19c35a5c8c\ne11d2e065d90200c7543d7dbfecfffbe\n3c012309d5c68153302ef84771572fcb\nd7fb922f162360b5c66a63406f818460\n48f878a6176591190c2e24416edfe5b\nbc800138650bc4a6c7c8ce3bef5c2aa9\n12aa829de18f4e6ad5cb6d178687b980\ne4258a09db0c03bc97bc1a2d2578970d\n1d3259fe9377ca5f899bad344dc01f2f\n2e5a58c43539442a6858978be907b0c1\n98d9619ca934b01df51f77a6d7299806\n4ffb03a364a13c376b41b8bcd0404ec\n36c1653a021a526319620b61f6587b3e\nf049bbd180d89cb5490ad276cd2af3a4\n68abd2755ff4588b545bbb1b2e749fb8\na2f760540b18eac2dbde8847d3101230\n8422870b0a65255d5cae1a083183a237\nb1ec680145762d1eb784faac204319d9\nbd234f132e160fad8f045e3f1e9c8518\nf72efa4574100c12a8930422448288ea\nc6755ed48456490d2744bf8869518694\n2e32934d4a49c374b20bab10aa3ece03\nf4da1907ed935101ad5d0d05865f4466\n5c8da21eabad2dfe3d59e2f2ea85dc18\n3c9f0efc08817ab6fcb8d8c6d4df8143\n3397952c22be7309796c584ff1fcf56d\nc9a464649fb52e99d5cb6d178687b980\ne4df4ee697e71902f95e2a1e9997b85\nd73b4313372ca6e1a6a7b6e78d8d5bcb\ndda91a2215130be16035905876bb696\na708a75b3727b12fcb8d8c6d4df8143\n70e29a12260f811d8f1b70ceeb5e9a89\nec782fd2f4825158f24dd57a3f1f3b51\n67fc0e388b91d55fcb8d8c6d4df8143\n26d761549dcc3c61a1b5ceeca96f6fbc\n14c84c76c927fb282cd2160e449d45ae\n9bbe778f05a04009fcb8d8c6d4df8143\n3edde0735bdd2aeec8bd09a8ecef3d42\n437482f4d187d43893202bf99dddc268\n30e5d9149ddfeef27357c8b8283e0cce\nbea6350707d0813c85f486468112b4ec\n5128cdc2e7001b0fd8740cddcdf4464c\n379b2a19deff9954f51f77a6d7299806\n64d0f2752aea0f40a99e0f0bf1de3bbf\nbd2dea41f32e4562ce11183544874734\nf1cc6b6fa75bd67ff51f77a6d7299806\na130ec5d53e62931d93768e7b9b1eabf\nc81470e576e437a495f1c4bba38e85d\n36d90198790ed82386052e834fbd2c4a\n798028b70ab2a1d529c726e7d66b139d\n29a1afd3e6c25af71b17743c18fb63dc\n738646252a89e865bc5cf22809274024\nd08164b754c2f139b93e96f21cf0da86\nfea629edc206a49529fbb534b2045025\n370ff00dc6f08167c3bd24f986301745\n64c393bec510aa63c83f06951aa9795\n9b786274df42d55b774476b2e205b9b7\n67a087a3f917c3a7cf004563556ddb36\n4c62e3c4f9e46d015da963e90d88cb74\nae5a1b5c8b93cdf4899bad344dc01f2f\nddc2beaa04d1b06f5fa701976706a45a\nbfdfe22081bd54f7581fd19c35a5c8c\n611f9690f6eb4da79a6a8a8f3fa61f11\n183e79a892e4294d65666d9a7426c2c8\nb2acbb6717c7a842fcb8d8c6d4df8143\n8be8becbec0d42b799e70de063b51884\n65f11c0c8a86a8ea9813dd6c977cb17e\nbfeda9055368d2dce76bc197b3a3ffc0\n92f9d60912030cfb3a8888e78d004b3\ndd284c442afd361e37f2340db925336\n34e4bfd2000916c6a5f9d52c12457194\n4bf29c47c18e7020fcb8d8c6d4df8143\n6e51353655289e10ad885ade4bf3150c\n63538ead3a81058f1c1ef519b9196b63\n446f8c76eed76c199df50b7f68c99baa\n646956f902b2a134450e3da30d6676cd\nc414d046062b529ffcb8d8c6d4df8143\n1854bd4bcf32ca32e95ee7559a2a873b\n59ca30266fb153ba50f93b609ce4feaf\necf9ea749680ae432d9c07d3b9171829\nc359b4c545e5ee3efcb8d8c6d4df8143\n54a7ea6d6e297a849eb34048e600e1ea\ne9f83f1d54e959bd35836c728d324152\n9b8f6e93608fb244aec118775e1a3eb4\ne519ec9a23b1612dad19a449ad99c8fa\n4c4078f8206ef3cfe13094731a5351fc\ndbd8677c25a60799a10831b4711b98b9\nc52af321a31d28a2e95e8a5faf311c2\nb8c809f74a592a91ad5067eac75a07f7\n12dd2b962777328551014c684c004c28\n9cf1c74f842be30624a15e3e5e0014a0\nabf04f17d2c84a160e37b3f76995f8b\n6a1af043806ddc96ac789d813ddd2d16\n8d61e7c8fc9d989d1f30b807ae39b61d\n8425fcfab0cd9e601f0d826a92e0299f\n52e15c498d33748d53227dcd0d547ba6\nc83073e02e70410a35836c728d324152\nad01773f3f53bca3a8ffa3a6526018ac\n13e4f5f06cb42211fcb8d8c6d4df8143\n5a4248187b0cce798aaae3d020f5ddf8\nc60a072ba63c12cd8ae0d28389a2d006\n8304e6daccb18c2de3855de370260f05\nff43ef647c75b5a4fcb8d8c6d4df8143\n4b3bc509cc074ea5ccfcde790fc2f661\ne6629a35985260b8702476de6c89c9e9\n1f30b28f2dfe65a21735ea0e092a805a\ndef342a8d095d8501ab5f696a41d80c\ndd278cc37ecff49ce6597d391ab6fcc1\ne926dd7cf6831f9afcb8d8c6d4df8143\n475a3d88004052918a6353ea60f11b6\ncbe4301ef1418bd8b036d6b8e2579386\n55af2652c4460b05ef3a2c64cef919d0\nfaa4b839db01b86fcb8d8c6d4df8143\naa001d69c5b051591736c5c04ed41019\nc99eaaeb9b941af62ebeb1e6a8111f53\n58484d1c37df459e32acbbe2387ce75b\n28d35fb9035fcbfffd5c9a0fa28996b4\n5d69edfdd6f7f62ff88ace17ca85e37c\n3ac0f4d87162625dfcb8d8c6d4df8143\neeffd79536a7ab3e597ff152ef65c9c3\nb88130805777f2efb76e29c9c43bc7aa\n5493cc3e023e9e6ffcb8d8c6d4df8143\n31d93627f2fbf86dfcb8d8c6d4df8143\ned81fd0ffffd360638e74158ae3d41a0\n16db10b6ee500ef94b3c42e318f3affc\n94af43cc530f8c4649244b68aadec703\n81e0c3b0d851492fb79ee87044437bbc\n414d4397dddc0134fcb8d8c6d4df8143\n5c9f3efb7603bd107c57db67d218d3b9\n84e870f2255d6b6efcd4910413c446d9\ne65eb892b1d1730e52470de2774d6099\nf8d4e335655da8855e1d47baa7986b2b\n809ed642119aa5799e8bf807e902261\nea5893e12134c6272f798bd8a3edd4de\nb5b728ebd7c0833530f6e0ede20c4525\n65c87436f6d6c695cf004563556ddb36\n3bd2db092bede98957e3b0a0099797c\na06089b2d68c974c6273cbd9c7cef4c\n5680570f242c595255ee7d0585fd5223\n9e49915157b79d911735ea0e092a805a\n54654f299bbf5ce4e7a1d4df7812ed0\n270ec239221938991735ea0e092a805a\n47ff70265cba94df900cbe2c18fd90e9\nec2d7e5e968c3ace7ddffb7902a68a13\ne22cc77e9bf9eb0875d36c94c257eb30\n3f7eb5ef5d304040d847cb32379eb854\nd2ad6adbad3ac49752d7b587347d0cf4\na22c4d43974086de31ae8c8ff1eb3d45\n871e950f1d453b32597976c675750537\n89ed63af13b79f3ef42a90fe4baf4591\n926d66e2adb79d5b79cb09497d80655\n5d94d971dd819985713decb1a0563b12\n7932b195e0e8ab00726dbbf7bc5e4df3\nbe00be72836114159568832390d67ef\nf97011a0bae2b4062d1c72b9dec4baa1\n6196ca0c22f9f7271110d567ea61aa61\n955143d7f0b5c70fef76898f881b76a\nc9eca1a946d5c74930259ca79b88bb0\nf835c863f175df72fcb8d8c6d4df8143\nd90d20f02ba8fb9a6bd00d0eaa99c3c3\nf9bed8743eba72439a4cbf5d3b79df06\n94e8b7adb07de08e714531f0291497fd\n41fc6d8dcf353f9ae420612cf7bb547c\n52cd206dd4674bbd4fbd95145f67665c\nbf3c1ceb076a334acb43a77d9793979d\n8df4dd50d01bb801e9bc18ec03716e83\n57930764a16deae9b219dbeac7819b2b\nea7a5e58c0462957edf4c948f5a7c441\n99efb45cf927a0c62cd2160e449d45ae\nc8b19dd635c346a4bfe7d977deb71340\n5ec6c52d6d5dbbddded4c23d05709216\na3a13218d61daab550903fb6fac1fa18\naf8fdc831cc65f0cb0a29c51aa6f10ce\n1d198eb08540837be9bd6b804c8484dd\n9534bb19e66fa5cbfcf6007208e5f114\n23a8eaabd1343badfcb8d8c6d4df8143\n6b130799a53c2917cea97147b08cd8b\nc8305b6f8521e9b3565822a81bbbb03d\n48cde19fa1d6af1653b336293441aa49\n24c91045ef1c6a91e4407e92c4b0344c\n545ce32e4a72ac04352681850fbc4af9\nbaf7b66d35abf0ab1735ea0e092a805a\n47a7bbd995c37d3d4aeb986669a16017\n2e583ea74f46aee239b3360f500ac52a\n2b1817fbc0f3ddbe8220566e85550c0a\nc4d62e5fe71fa71f1ba2f806cba87b47\n57dfd0ac5a78c9322f841233486fac2b\naa765d04e997e36a1742918a871fc8cf\n8a840a390cc8ba885089a13cc567dbd\n46b8bc4b5b2a6094d46763ec4d902968\n6a635b75306512b3fcb8d8c6d4df8143\n9f4b472b57e4eb76376135b28de9dd8b\n4bb0f244d4abe00b44949d7685cb63ea\ne8e2c055f8ea53a144638317e9e4ff18\n922902d623e5e5dee527210494d6783c\ncf5b6127ac18e85b6aea2f18ee404fd5\nb7716e735dc72358182649d086615bf\n6283ad834ec0730720efab7988749bc4\nb64e98c991d4103170365ad078f710ff\n8c4539bca010eae1cd74bafe512884c\n9f07035e2ff0e5946ef2faffa907bc32\nce879c871fe2015b4cbf9a02e3342127\n3fb39b80530c18842417a6b5541e7395\ncaf410661e9311299dd0351f01396cda\n1dc135b611b2f4b2fcb8d8c6d4df8143\n5614d1c24806ce0a8d1fe8cdc415f4c5\n85f0a7c268fd095cfcb8d8c6d4df8143\n70652459696b25037e0f056bfb925424\n9b0c6f3ee4a7965644b289cb940133b8\nfa6f034a8beb74f6fcb8d8c6d4df8143\nffc2479f27a1013afcec439ba0368db0\ned2f272286506a5786e8e92cc08146\n7b53493f7944fcf2b691e708071fb777\n2577723d02fd914eda113afcb6c5e140\ne487374a244b5f03b428462f49e66329\ndf0823f1c81eb6bbfcb8d8c6d4df8143\n5dd2f4d3b253058dd554ab0a45f30de7\n51561910f274337c452b6f7f8fb75eae\na72410196463086561fc247a18f47792\n60fe504827e96df11fcc6cd2b8a40871\nbde9b62e181cd4694fb315ce917a9ec2\n967b6aa33d17c109e81edb73cdd34eeb\n6ffb0636180aa5d78570a59d0416a26d\nf449dd0eb25773925077539b37310c29\n989694b21ed5752d4c61a7cce317bfb7\ndc6c499e71d04971d22730b0728b2fc9\ned4f7f214ae7042cfcb8d8c6d4df8143\n721baad382f73c46fcb8d8c6d4df8143\n55b002ebe262df5cba0a7d54f5c0d947\nca5d8536386d31d0dd90cd03407bb536\ne9b1b74a44465b8b192ae1372f64f330\ne7310381c64cd87f8880edc6251fa529\n6e5a9f4f1f0ba4a7beb83c64f2162734\n2a39d5ec8856dba0fcb8d8c6d4df8143\n9afc2aefd6b17db014038d588fd1342f\naa9e96ac6c121cc54cccbece4754c7cf\n62f4efec7059e531ba5342d638d0c267\n5c8df2c17d09028543ba2b548bab2839\ndbe83cbb4cd5113c14038d588fd1342f\n683118b2740958303fe64ec32ae84891\n50a3d09ac90370ec9c48f338871146f5\n1d2c6757217bb2797388d403c2d39798\n230c9e3d0e423ade7b7adc4c6de912f0\n176b4495ed006475bbf899459f3f71bb\na7f67a2088ce033f3ec7ad443e0ae81e\nec449d7c89e84657cf66a9e192dbe265\nd60a54564aa1856fb18d6f615cb18bdd\nbfd36d77ecdb0c9de76bc197b3a3ffc0\ne37de82cff38f88d1735ea0e092a805a\nfdc4b403601fedf955b7716fb9f91d35\nf021d7374cb40f0da2ee802ea6ed091\naca8867b962deea91a8781c24b79ae57\na885ba00108cbb63e49675db0062ac74\n6d8cb53f3b1cd94a4da9b199f21864cd\n4febafd730ab294afcb8d8c6d4df8143\na186c58be79925634cc30865d6337b9c\n2ceeb17225f4e460d493bfe20f94b6ab\ne1fe4f81f074abc3e6597d391ab6fcc1\n78dc5a0c38d5aa2fe59f529cd1b6faa8\n4c3a0886647ae06a6ecf9e4734c75a01\n3a29634236aa0596f9e8cd846ef13776\nc464b5be51b387fead5067eac75a07f7\n295ba9410657325f9d7f638b2b2e0564\n58b269eba3c6d09b57f40ff86fe708ff\nb2116d5a9b93a0704f377bc8602186f5\n58483a0c6c6dc7056b1291e0cfc0c93d\nf40624156dcbab68620a56d13e6d773b\n60500e6bc230e3f3bbe00b56d7315d73\n6b837caba2f63098360a9d5ff73ffdad\n8ef9c1ffaa6f7292bd73284bc3c3cbac\n5a1484a25a5b8a08e0df09c6ef42b40d\n35bc2c88e20e099db8bed6beeaf025b3\na1bdde7b604dd3a89b1c4543cc5963cc\n1cf44cb081b1a2b2fcb8d8c6d4df8143\nce8a14614b85a8fbfcb8d8c6d4df8143\nab8e7d9b77455a8550f4a93ce2060c65\n23a4572a96dda133d624bbdc22e247c8\nad7fedee24a70d82a5f600ed2cf472ac\na2316a225facd3114f3443b22038d340\n930d6656e3df0635fcb8d8c6d4df8143\n27436a813a1abe835836c728d324152\n352d68b2a816640099e8bf807e902261\nc7b77a991430bf08b8812f80908a0273\na122a15d97594ebcfcb8d8c6d4df8143\n7dcbac101ada832568d026fbc8fe70cb\na126861b5d720843aaf2b5b6ef88c2bb\n6e913f0b67bb638288c10250d0e7fba1\nebdc97f5fa29b1dae6597d391ab6fcc1\nbe6c5d39cbc0d6f9764567afd7c5990f\n2871a6c7eca55e63d0482422df1ad01d\n674a0ba32db48cb6ba2cb2a05654d738\ncd05ada0981bd85a2c528d33bca1ac2\nb074f648cc99aca6fcb8d8c6d4df8143\n11194326770b1225d49b2e04785f8492\n230efad5abd6b56bfcb8d8c6d4df8143\n51fd15743cd0568219179d4701451afa\n9004c69559c8e6f99ea7ba54de81fa1\n1e62d260a8a64b5d8f720345751070e9\nb1ac784f48473df1e7c7920f6a65a54d\n73ed11936acd99a627ebefef2b2130c8\n397f450de4fc6fd4fcb8d8c6d4df8143\nfe200902555dd8c89f2349486c570dd4\n5926d3296767ab28543df75232f6ff2b\n9896b288bc97e6556bcc48b8d936ddf4\n68a94becfec1965e21d6b7a56ef55b4\n5cfe9300f102ad65fcb8d8c6d4df8143\ne1c49baf0a79732a7eeca6709b6a824e\n853c5ea3c279b9e9f7887b5467c02fc8\n82c10d98a1aa65e89730cb37c9a5f63b\n3c1c411ce82c4c43f193a5d512f2c2fa\n62a5d7a59b87d150e6597d391ab6fcc1\n399573561336a341b754c9a53619150c\nec344c1076b5c890b02103b4dd1798f5\n8cf524d8cca9d451fcb8d8c6d4df8143\n73a4a5e3a27aa7fcb9f5f10496f09f56\nfac2081abc0375649f41ef09e8fcdbeb\nb46eea8a6ed035279c92366a6d55d37\nacaf95927290a89182bfcd34215ccfc7\nf018f4d78d295ef3a78d991d8e8834d0\na82af4e7e81334f8876b399a99a15c0f\na4c50a7adeb7d20b51014c684c004c28\na4b3971680744f7f1742918a871fc8cf\ne0a99ab7c7a0d2d4e59f529cd1b6faa8\n2df234af39ae991afbd43c84cd4013f4\n1833ac3f2c14e6bafc26f53456c58834\n19171a11ad8bd9d5411a00390d1cd315\ndb88171d1793fa2785718c281d7fdf61\n6918fb9f51d1dc3dba9ea396e14c59f2\n5aaf61da59f1c0773225afab722d9fd2\n8ce777fa2b40476cfcb8d8c6d4df8143\n3a3d292307c4831f4dc0ed4c2f72c4cf\n7d77f1dd8bcf114ab71c4c06094146e8\nba397aa90c4af6ec98d5fc0473d00a1c\nc211f82e84eb62bb776f01d35517da23\n994f375a5f371743b5fd9907631a04b7\n36c6a6f0e206c79890fd203f931c9af5\n90e4219f897af979cbde89e0c48a01bf\n8b85d01ba70a09e9a5f600ed2cf472ac\nd190d56a1e6213e420ebca9c2a65e97d\n587b4419a39cc088ccbc9e602dbf6a4a\nb736ffab5afcc08ace1d463bed0d7bb4\n42c6478d294d71adfcb8d8c6d4df8143\n95099d85ebd865f46d11dd9fe20b7791\nc5da06189b219effcb8d8c6d4df8143\n33db0d4bf66731a7e7c7920f6a65a54d\n70b3279caee3ed985c6e7b50a2f671d3\nee9cb649ef64105b62095c48c7bd5960\n38eedb7c36b785fda81f841e85c630d5\nf5c61ca4acfb7f5435836c728d324152\n80a5ce76688700a2fdd36147bc6b8031\n8e34bb5570f790b0796c584ff1fcf56d\n3b20c6ffdaf2dc97ef0add8da8532fa8\na37f1bd2732ce11981d841466b314f95\n39acb6226133f9e0e4c9b82a33ca42e6\ncf09b30a89f70929cc67b3de75c44c76\nb0c346ea1fa3ad0b2d7dd0a148440b17\n5179edb45a24a785fbd4fd7714358815\n96e1ba69697ade7682db9fca4b68095\ne303a8b8aa3aa14a39b3360f500ac52a\n12e8d8176f2bd111978e8f21c8f49a92\n9c2699c78add2e5847ecd534f9237f9\n918b197d2a157d70fcb8d8c6d4df8143\n58c49450594bef2afcb8d8c6d4df8143\n23eaba9bdd51a5b0dfe9cab879fd37e8\nc233bd44815828b08bd5065c89cb7063\n1fcefc2c2ff00dd6c7c291dc7d41000c\n57b95c1122beac7c3fef86d7b5969363\n51b4f0fd600a7cdc580a266ffa083ba4\n41f3ad2781ee196bad0e80a2288e336\nc5a69f02323e087181d0740b20dd8fd0\n75e788db909c6e07bd4160ae8a5798e4\n1a87883fd4f52527e21c35aa7a22a003\n12d03f06746eb49990c2e24416edfe5b\n7d7dfd2bd5cdcc4cfca61b0bec17b8d3\nd06ab2779bb0b73b822a33e080d0e71c\n16327d928854b34ef11c3739edd52fa3\nb45b8df0557da6acc14d5c159bab8297\n91b7d2915bfede639b3360f500ac52a\n583a5a163e59e16da523f74182db8f2\nddb951343304bf1f351d9ca36f76b95\n2da9d9bea10d936e23c0d2e0152e91b5\n80eef85b735218b0ab8d22b09768208b\na700451d593a56b45369e32fb818f337\n3aec7c839e247954a38859fd71bee28c\na1a8616e38e5f684fcb8d8c6d4df8143\n7d6dd04be7630ff01735ea0e092a805a\n6bf0f3417f775d2c2cd2160e449d45ae\ne4d3e153ce7f9904e76bc197b3a3ffc0\n15e38eb29fb84898e7e684d25d4dcaf0\nb31a3ebb83f3c23f92bdd7f1055f4a13\na11dd450220af960ca70272754aeb3c9\nc0f67a9a45cac532fcb8d8c6d4df8143\neee7062babab62aa8930422448288ea\nfa853b92d9a5cb66168e1d639d85c126\n7fa4f80f92b8e779eef2192b7bb521a4\n3d26aa294ad1cabcfcb8d8c6d4df8143\nc02a408b63a91d294cccbece4754c7cf\nd284b73d5983b60f51f77a6d7299806\n15211f5ea7c7432686c701087a194026\nfc5aa16de2be4b2b93411b5b3583c4d6\nd450da2cf4d0b79bb20310112468976b\n1b0ecf93a4a36a70f7b783634bf3f92f\n7a67bb268436b3636a578f1b525d976c\nd00391a3bec2a9456a44fdd49dec8069\n19fc4044912f5cc4869594a32151bfdf\nb75ab10d1235158ed91ade1c391e4016\nd52bcf6a2c75ced5fcb8d8c6d4df8143\n53ae95290cca57d430c35ecdb9dea035\ne38e89e852fe924d957f81d76123f1a7\n8d1178acdd04d633c35131da26f8061a\n98c7c2542dddd40af24f994bad42f06e\n76db5f1046bfcd97fcb8d8c6d4df8143\n859182efd11b40669018dc7bde518d9\n229b7e36459a9857ef3a2c64cef919d0\n66defefd07a3fe4548eb521885c87e13\n8b60bb548c0813a7e420612cf7bb547c\n20118bc320eac59890c2e24416edfe5b\ne333f7f89b74575e9a5046bc3786ad19\n3c3e36d1faa6c53c1f886eb96ca2682f\ncfaf30102d9b7cc6cd6d67789347621\n1b35827236954b2bb6436276138aac1\na5b394e2c98f6233636c7e486232cac1\n7e61de32ddbb59c89450c010f9b3ff4a\n708aa847cb730f07fcb8d8c6d4df8143\na7b9dc38c80e86fbb13604bbce4eb6a8\ncaf2efbfc9ebf42ae068fd8aad8767f3\nbcd32489ef6fc12d8f32b552c0a1567c\n7fc85bf0b0989f864f3443b22038d340\n6b7a76b841ad8bb3488017d48a7f7eb4\nf91b13fe06141138fcb8d8c6d4df8143\n4843b9c8523a4affc29d936f5ac7e23\n97e63c1f813cb1926f43c7673a499bbc\n94eae2316754482627d265f13671170a\n1b957f2c258ed744b3c42e318f3affc\n6cb3a2872d2c2646fcb8d8c6d4df8143\nfed712ffbeff29defcb8d8c6d4df8143\n67f6c0f40fc9216e8aaae3d020f5ddf8\n4e3d1346e76084a2c1caa73a5e644b6\n608db437f2aab3c13cedb1808e691a01\n75cdbf96a597b57a29a42a0444436860\nef9e0709f535c549b3914c1351b16c4d\n348fa2fd3af7dc0a4016a312c4d162ae\n7264167cae71c90c72bce768f6d2af1c\n80650d082f6d45fc53fa79783efbc3bf\n12d44fd814bc9b40ec2a7a1f5fe7365d\n20d36ce3148091c5764b5e62529f6d7e\ned323758d0f61cfe6085a0a38e2f255\n1edec15a9740c25edf85db41e3677c28\ncbea72b8621f99703394926146371698\nf567bc1dd416ebc9dcf2183c858e6e5\n25bd069704996e073225afab722d9fd2\n89622a50662e28d56c09b6371c58b533\nfa3b05deceeddc26fcb8d8c6d4df8143\n6af800e7bbdc5f21735ea0e092a805a\nd5400264679eac33ef3a2c64cef919d0\n8be191f7e61673b13e3ed2a572e608c1\nbece8f6d89e653e6fcb8d8c6d4df8143\n8c0380a0d385c98145d451096984140d\n421c9c7d606e0cbf26c27fcd604ee778\n37be7d2937f7fd88fcb8d8c6d4df8143\n2cdb96501ab2ccbf35836c728d324152\ndacef14e18d54f3857d60a3bdfb4976c\n67e03d2c2b7f6b19b38821f893bc10f9\n88153eca8600ecf05b1ab0bf4891d200\n4524946bc53f31a92d5c7a0e60b0c525\n353224cca3fc3ea6e5da257192cf051\n417039be1c492fd4212785a561e3d296\n6d14f1e95641dbb329a42a0444436860\n41c1e411592ecabcb7487183c0e206af\n752a9fb2cf32fb5481e0c510e9bf91d1\nd8b33b356591441f23d2ff62625c9fe7\n66b98bb2b9d34431ec7cbf3284585a40\n58e32cefd2f0ca13e938fdd9451c3206\n9e0b193df5bf4f2097497273a66fca55\n596ac8748f6c946efcb8d8c6d4df8143\n9f0e6bc1fb0a97a6db493a050f0c45fc\nbafc295a6ffcb375c3d3652f80cdec64\n636d72f06ebabbdf9e8cd846ef13776\n255dd61372b3509a41657e31b569b105\n670525c759c07ac71560641bf48464ff\nede739cf0fdf5af9d49b2e04785f8492\nf01cf64f05572ac4b509f4ddcfa8ca1\n8bcbfeebef5df95fc664c3d4e2d59341\nd2c124b8c6a888fedc7a10bd316015b2\n573500f52762f0ea8485cf03cd00c621\na911474d0fa043e3cf004563556ddb36\nec0979097f7c811922a520e8315099fb\n78f5bbde973fa96780b013c1c827c9b8\nf4994cf967f3407ff47b2ae6b11d6f43\n398c948f08b778a1fcb8d8c6d4df8143\nbf2687bb57e94f4071d7520e3757f3e9\n15fc5a4a342c00525412c66cb6f267da\ndadeb9844d9f0c00f6da603e92626bf9\n5c324a7cdf6195a5303c85804d402599\nd231a8b21aeeb7d78749901456352d5\n1562318ff0c62163a488756a9c41f7e\n27ed76ca359d6eaffcb8d8c6d4df8143\n66a7a9a417660413e2364c65f912dcd4\ndca5ccbc65594b4fcb8d8c6d4df8143\n60fba8438739f3cfba9ea396e14c59f2\n1e4fd4cc6fee7cb2fcb8d8c6d4df8143\nb444be0623b2e237d73e51f8db3a696e\nee3bf15041b96387fcb8d8c6d4df8143\n91c55497aeec1fc55e29ce2c9d37b952\nd7ceec3ad0cad8093164c8a6f66d85d8\nd543465b35604aae1735ea0e092a805a\n99f8c4a6b9ff1a2ab7f1f0dea571cede\nbf4b1a3597373ac0664b3b9b23ddfcbc\ne1ecd3a4734b91fffcb8d8c6d4df8143\nde5799693fbddbe3c4560b8f156e749\n169ee245f8ae927f5dc3653f8341633a\ncf3407cf42643d3184cd259bd328e92a\na0a87d63af355b45615810b8eabca5b3\n89f8c456a55c3386157d629c9921fc15\n5bb0ad1e0c9432b2dc6493177a28df03\n44820a27f86f13e7e420612cf7bb547c\nf0b6bf1a583cd99169d13a7b2498cca9\n2324e8f0e334c218f7248d9dbed7a7b8\nca8e73b360017dfafcb8d8c6d4df8143\ne7552c8c718a1a109f2349486c570dd4\nab02e202accb9b4b65b77a565916c7f\nbb7d710f4104d16b88e7662971dc736f\nadc8129076715686b3742b0325c8aa1b\n7eaa7d0cadf48bbfa9bdc22a1e02e82\nf672eccfe1739e962dcf15e1dea29cf0\ndfd06ea82f5a5b324aeb986669a16017\nbe61621254d82a6ebb40b038e5e0b7f0\n87107afb7ad115414b3c42e318f3affc\n80ced01703281d8e87de7314a5215f9d\n2af318d179f969aecbde89e0c48a01bf\n85335cc8e6ac212a3834555ce6c51ffe\nf7c52d5d91e5ffbfbf82a0d508a096d3\n86a5fae37549690cfcb8d8c6d4df8143\n9cb61effca346d48eeed1ac073f42256\n956ef7ea0d496de01735ea0e092a805a\n8a6944062cbf8b25ef0a7c6e0ed55209\n8e03bd383d8696a7ccca59c0649ee0d0\n4ac2d95bbb9c03d1e5fc53e1eb2fc4a7\n44b84b479d9f8ae7ce2b80886d544375\n69762de7892483b64fa8d6439169bda4\n9113ec0bd742c5c5e86e8111763264e\nc1d2b20435cbeea0c0028f3b08785d05\na21744a28956c93cc5a208307819a3a1\n53d7272eee54bad2f841233486fac2b\ncbf2fd4e3b923f9ffcb8d8c6d4df8143\n676ec374028a24db76e29c9c43bc7aa\n21f7bf15d2f6a765bcde6f92ef1f7ee7\n376c16f40c95e81429eb9d04ea723179\n84d66f07cafdfbc4fcb8d8c6d4df8143\n5516c456d95ec0df2de0bc4fc4d02dd6\n3b15a4be5e248d114cc30865d6337b9c\n27b2a1bb96fbd760316fa82a71600dfa\ne8568e17d0fc6418e6543556f230fe9c\nfb4043f7fb8257d8578d107c71db28ac\ne02e79e028662e9ffcb8d8c6d4df8143\n869836fe379f585a732b621b679fbd70\n715be273074283557062f2d72cde5c95\n2e3679df6678e8776908456c5f4ff3f3\ne7da3cd73ebd81146251354a8b1397eb\n2522a20be5c204afa5534ff9c862888b\n5e2d2a5b9a69125b23c3accd4496ea68\n3889631e42a84b0f51f77a6d7299806\n1112f253e122dc8273111597f45b8227\n7bc039fffc79dec9e680aea9bdb841f9\ncce6476ac521a1d130f6e0ede20c4525\nfbcd17479bc96e0a899bad344dc01f2f\nd3e5c225e8ec17ece4a604577ef990de\n47cd62ec53571be3276206fae5d3c473\n367546484916da6275225719b7a8b341\ned54691cf655a8a3b3a8888e78d004b3\neeefddb3f2ee93dd49b2e04785f8492\ne1891813cf904b3188e7efbf7ff736b7\n923c324c530e9fc412060d1ff2024b3\ne0577be012414515fcb8d8c6d4df8143\n66fbe6533abfe75195b26656722dea64\n3469cdf83a3cba1f35836c728d324152\n78f85448752ae2963873cf6e670bb8b6\n20af3e3a79e7023a6c342cf382162bc7\nc263fec31c8d33874f51382fa3549a00\nc2aa9948afc6d4ed39b3360f500ac52a\na711c673d5b6a4b350075206bc274050\n688d88d300429b7dcf78a76e06ee9b92\n22a0864cef495771fcb8d8c6d4df8143\n7bd642ba9f7cb683fcb8d8c6d4df8143\n6c5b0451e99192cbd4bf7024dfa167d\n2a05423b37f2620e1b17743c18fb63dc\nc58b04ebb038758ba866d377a1785e37\ne9df996dd33c009bfcb8d8c6d4df8143\n49647be2c7460c5b8749901456352d5\n609dfe9367c0e64e2b520984c067934c\n1165e8de3cee9f706314698551cd43b\nc7aadb7ac29ac778aaae3d020f5ddf8\n48a5b451573920d44cb3aae7b27db2ba\n3c756a2c1c62e73b7252c133a7e17d94\n6138faeed623475b43ac09133d4c1d60\n60272eb623298fd190a9ce3e4b15521e\n8232dc35ac9ccfb016a2b5862518c93\n32bf66766c1f33983466f97f37dccbde\ne0e365a2927a7a73bafad60030e6ab60\n63ca3763b86aaa4daa29ca6a13991ec5\nc28d9f943fbf806ca0f23466c3c25e2e\na5fc64e1faa85794de03ab2a27ba7531\nf56600b8cb2f94d64d8b0368afacc65\nb10efcf01493c922e7e684d25d4dcaf0\n78c87f00ebe9491e2cd2160e449d45ae\ne35009c75fb246453f02f5b8959142cc\n13d5888a6598745f82bfcd34215ccfc7\n9b34aba70145f08b3ba6f328e4cd62be\nb31bcdeaae689dd862af18ecbdb58c38\n2a762ba822eef5fe5c7e2f94d3f5eaa7\n774d99cb78b5b82e3a5e6305a3a7adee\n98636fb562413a10dd999d2409f5212c\na90fe01c3ef3ee30fcb8d8c6d4df8143\na26a9f9ddb5f345fcb8d8c6d4df8143\nd21f149ace9ed2ffa3714990138052c2\n380a312c4eede2eb72ce68571bfc4bb2\n6a044fab6905fb1a145fa6babc33219e\naff71b0d462342aa4bf6dad97590bf33\n6c96c1bcd2579c259b12350e98805eb9\n8338a18d589c26d21c648623457982d0\na5a31ea56d8fbe0a72ad95ccf7316565\n748e643d7982fab3fbdebca9f6788597\nfd074c0819b9934f73b8ea30c1700f67\n13ec444752bd414bb01c58badc8bbc39\n38f3a721c7ac21cb8a1a0260fe4e4cb9\n74df8c15024e81f79f1a71e46bbde97c\n511917ee5ee2f91649244b68aadec703\n86bcb422f12d4d17446ab9475f488764\n1f15e31094a7460aad5067eac75a07f7\n2ed7e410931f984cd59517820ada1bea\ne86e6469000a7e7deb39e694585254c6\nc11e3e763402346f22c3a2386a9dfbe9\n94f9cf8754e2f080fcb8d8c6d4df8143\n99ec967442fe35e46aea2f18ee404fd5\n5656f1bb53d675ffcb8d8c6d4df8143\nb3530cffd4a04deab641e19ecbf0e871\nb6efb78876150d45c94b622f1207af2\nac2a766efbe869cdf51f77a6d7299806\n3bc8edd5ab3a2ddafcb8d8c6d4df8143\n2f2d4805ac5eb033e49675db0062ac74\nffc3e351b9ae77b0d42b9650f19dd425\n32a196685d10bfcad7811c9daa943fef\na90233920f619e03fcb8d8c6d4df8143\n6dd3bf7b105e88e79d3154c451a33fc0\n6faa72d18f52d7172cd2160e449d45ae\nc778a6ac6cf0c81d4904d89e9169817b\nbe02ef97e47b86c34e3474b03483338\n6c0b3b0c6bc6eb97862d7667d873e591\n525109ea19096fe8eeee03ae21af2d39\n99253484c463e9dd7688e67ac1793ffc\n4cf4ca85d2685b9b98d5fc0473d00a1c\n928505a660acfc20c7e400d2701a92d3\n551bec14757bd4b27b79156a61ad4c01\nf2f6fbeacda7cbecfcb8d8c6d4df8143\nb2bdd202470b4166f3a29b1591515940\nd357edb3b9ae47f230f6e0ede20c4525\n3eb6c3bf89e5c9312569f5d050e29bc5\n3101d2b22e21297ccff8db9efabb6c62\n3e21ab6c6d82ec4e1509d7278de350d1\nf77e6d8f251887e9fcb8d8c6d4df8143\na690290543a1b904cd5a7785cb8ad4\nb1edea6e2974e1b35c935b78db2f5ec3\naf93ccabac8d1aa9f4482a3d4ebf4782\n92c74371acbdc4b1b8e1b99345a5afd4\nbda58405e4e3319d809772d66d13ee02\n80e9c1d6499b6a9689ab11a408196888\n5115f9a3af3470ddfcb8d8c6d4df8143\ne98c05f4cc8c7afcf648915c85184f8c\ne04e5a96efd77a6ed2f5c44a5922d7b9\nf36cab1570442a83466f97f37dccbde\n27e4369a1d6a5a2d490ad276cd2af3a4\n886ff4f5cd90c6ad39b3360f500ac52a\n18145f4b303c37f11c3739edd52fa3\n5859f1dcc6e47322e7c7920f6a65a54d\nb75464a7a5546b39e9ad5e44c87685c0\n8c4ca1f645def5efd5cb6d178687b980\nf7495b2e74c906b5922ab3cc7ca1ae2c\n441726d957d718a137b2bb75885cfc44\ne35c7cd183a6de4a8bd5065c89cb7063\n58d8496e15d6945bc562b0b258e20992\ne8c75d7c6f151e2b3d23022ce06f940d\n1b9b6f1ddf363e0e8b424343280aeccb\n96b71e055f40cfc21735ea0e092a805a\nccd12ea2362ef81d8bb3deb7fab7c9b7\nd47f0a026f66e2f24b3c42e318f3affc\n66f7a541e0459b06fcb8d8c6d4df8143\n42cd4d8cfa141d4d374110224c1c4eb0\n9cfefdc1e63a3c2535836c728d324152\n297d929269bb62da43fdcbcacbbed64c\ne4d491fdfd795a9339de811989288fab\n199273d17414e77ca553fc23769e6051\n2f345ba66e683c2bc5a208307819a3a1\nf0131187d57b6390fcb8d8c6d4df8143\n9c11cbb88d574584c4f1f36666bc4b4a\nfbd59db93e38bdafc8687ff9b0b4e4ac\nf2038cb9bb9438a6c790d7efcdfb5239\n551f8026ff0917c781a172d69c52a28a\nae37dd444b0813b8fcb8d8c6d4df8143\na48ee5668d042342eef5d83b671bb264\n1eca42abff644eee57a48b78ff77644d\ncd1d426e08bcbe3e5a4e392b59939d74\nd87a2d766579f15e38b27a25d1336579\n873aad4a222d541a91c2792fcdc1ca8\n1e0bf9701623f02014038d588fd1342f\nbb3f359cbcb046a8d24a4ba64e02f65e\n9fbe081afc5868ca5c9ed170ce1aefed\nc41293c84dfc509cfcb8d8c6d4df8143\n2a9cc4404bf738302a278ff7f085c260\n4b43b17b960930af53b1634376cbfb93\n75cd24d6b485e9e01735ea0e092a805a\n43deffcae6d595f3fcb8d8c6d4df8143\ndbe5479ef7f6c752eb1f13e2de7cd7d8\nce798635ececbffd5ac3a75efa13522c\n4bca3194ec4308a837b2bb75885cfc44\n46aaf3bca1d0a3e776e9713f57a5fcb6\nb4f7f20fe212e633c14d5c159bab8297\n4c757abf44253f8360ad823977adaa23\n200fe239e1eac6a2651636b7e802cd3e\n78ccf7d2ee6d5e34fcb8d8c6d4df8143\n441d06d5a657a5dfe7ae87d20a4fdaa5\ncb4f1fc93f5047e1ecd8a55986a51a84\ndf22225de54de36d71d7520e3757f3e9\n701dd0ee2f3c86502feae54a926ce14f\nfb279afc9faba7ec36d735c5e1c16d13\nec639d4850ba9aa6fcb8d8c6d4df8143\n66cec0a2ab63d9101b6c273f8ff0e8b6\nef40f27470d99d6fcb8d8c6d4df8143\n2a5e2e5ec5eb986385bf3590978fc71f\n64a45d75c1c5bad6f51f77a6d7299806\n28b50bd5aaee8c4e7384352a7758c897\n9f47c287c921e4b429eb9d04ea723179\n53af1ea051d78e799904d527fb5485ad\n4604090264ab99ba6c1400a7733f9e62\nbf659a08301f20f2ac94db38cec7b356\n84f3f1dec806b1df82e8c06333eee87\n3993a9c841dbc35061294c3e9dd88196\nbb0ab5c460ddbd65ef3a269219210793\nfd2f5320fbfbc88a47c71c6d277c802d\n75c15dd98de4ff17bd4bf7024dfa167d\n3533b9eff82f2f9cf22140029982c6f4\n41c5a45c63f07f46c1c74fb098c415cf\nef612752f6192e8d29eb9d04ea723179\n1ac102f4a452771521e935c3c465f9f\ne44408513c20d08f37aef4415914e1d0\nd6ebf710756c5839f8d3a35c7c106515\n79041f47579a9e3f3c8d0fdfb1cc2535\n16249c6e2a76400dfcb8d8c6d4df8143\n90c323c4d6288aaabb40b038e5e0b7f0\n69222648c3e3ed986c348bc129690193\n8fdfdb325c5239e798e0d1738edd4f19\n2ee70ee71a0b7caeb15194162f658e87\n629f9f656b05ee62ac280f441d6450c6\n112058b3f8c94177d2dba55bc7acf0bc\nc8ba5b8ad05d553acd017fc6c40a6bea\n964d3a853d6e5a642b1c313558664cae\nb54f6d30b6edd7f1579cea75b38cb7ce\n6e3da73f16586dc56bd3645c59279a16\n6778917189e50370a894da3d4a669d7b\nda5db67a2385d5e8da9baff5f5368802\nebd783f677be6825b5495e8609a528b6\n538dfee2a9b520962301d516d0cd4456\n86d556273aa5075aaa660c42e675c161\n1e9a36b3360f23388962005ce0e986db\nd748241313e5664696a3517f50eeb9f4\nf392dbd90200bd7dc77f357adbe5c980\n8913c3dff1651a316a3d00506cb9ed19\n9326c0efeda12e4642f42b7e6beeed8\n594b2fcea3d15eb4fcb8d8c6d4df8143\n185b2436cc0404096ef2faffa907bc32\naad04909cf72df68bd038489dd82490c\n47adca3b217160d4b0957d845ac33749\n1b35500ce44ae7e344b6d51c32a5873f\na2ff853cea4e3ff5bddb797cbb74c\nfafef4866d1a74f3fcb8d8c6d4df8143\n1c7f8ad295bcc3795a233e989a47d3aa\ne8e4f730f9bb892a85245de9410e292e\n914a91528ef40e7bf7248d9dbed7a7b8\nd1948365bbed9de270bb6bcb670ecdf5\n904f90ab5c4d408b313c6de30934784\n5b4856005da0ab61d18826cccc613430\n4c1912cae9d53594fc26f53456c58834\n7ec821d5d8bd9f17d4aea4231844b26b\ndccb4da9805924c23466f97f37dccbde\n8a9ef07176e60ceffcb8d8c6d4df8143\n88ea703e063e715d6770da39e2737f95\nbfc4cae9fc343792fcb8d8c6d4df8143\n53685a90516a12c5f51fa0238791f5dc\nbc4db3c90716f7ede76bc197b3a3ffc0\n38c6b87674e80ee8515596bfc4f5c627\n5c9595253f292e154ce3bd4e27d8e100\nf8ca4809b68d1ad6157d629c9921fc15\n8b674da68033700333d93f57729688db\ne34d17542b26773a84aed1cd93567b2\nc78a8f317896b79f51f77a6d7299806\n40c778a9ff366c2bf36ea1eb6542fe7e\nbe60fdf6e4c9e45fdac42bdc1d2df4a3\ne4201614cb3590e41735ea0e092a805a\n2071651fb8407e4314038d588fd1342f\n9d340cb226868e39ce4f274577283b16\nac1e6d46bfff76a664b3b9b23ddfcbc\n7a9872f1e0cefafd7d8864caa856253b\ne569a4ed12ba90c220331d4c3b7d944e\nad7dbc3a78d37b4c8616812464c86290\n6e43d4b4829b66d06fa63795f94c4d8c\ne138b41985e7382cfcb8d8c6d4df8143\n9f2993a2f6cea208d3e2561755f455b9\n5077728a780b5873f8d6a4359d6a181b\n2f02e4f875d651b3c066b9622c005c53\na0963082bcabc46b762a4fefad9c8461\n85dfdbe562059fa058b65cbe3be2c45c\na04e341e7dc206edfe10244ee697dc96\nf274cbff23bda61a85024815e816c655\n4ed37408e5bb257ee356f23093e95c53\n206ef4c97f50caa4a570c6c691c987a8\n31ddb926f7e196a7fcb8d8c6d4df8143\n72d5a2931dc1c913edb30e9b97600303\n120f940d4c32c48df51f77a6d7299806\nfce6b0ca06f8a565b45df535caecae62\ne6d62a37e187bde599284d844aba7576\n74dff8f0a865368b4a8e02787dff638e\n6b29d8827f1705b0eef5d83b671bb264\nfff6acd5b543ae02a9bdc22a1e02e82\neb8466da51199e0ecc4c445068949125\n6b9f509d91eeef913efeda73d60343e4\n8e0f611116a8df69fc9ae1e9c70f67b1\nfb76c5cd78d3c9deea3655638ad668b9\n6fbc93ef5b90b06ffcb8d8c6d4df8143\neb37d11948d7b4ffe030fd2fa0608452\n43989558d13b1186dccf149c7b4065e\ne515076a09191d075fa6da97b9eb4a2f\nc2f055fac2817b263cd6abbbeca4e2ad\n9a976020602ee60b5fc8f4c1fc00b380\n308bd35d5f52de4e57b8f616df7adf9a\nbe5b76136b37205738e43095496b061\nbf3e47e405833ab715655d3195f5022b\na3c4ce97b725fc2c5f57ce7e4ba40e2c\nca4607a427a5aa127715096cb6ba15f2\ndb447b84e1a8d8d6ba5342d638d0c267\ndf31746077d19233448e1c9934d83117\nefc262f7c8bc9fe66b1291e0cfc0c93d\n54f858f74a0eb7d5ee11949398abce38\n4d61bb37c5edb2903f7bd0762436c545\n380d313b3c277f5e1735ea0e092a805a\nb7a6c5c6c27273b3253cb5b81530269b\n9627da26edc003e7d49b2e04785f8492\n70c523d337585b9743dbb6421d614c0d\n933176941f95f833fcb8d8c6d4df8143\n16258409337ee2914a200f5f1797d729\na9d554c5d9d09405fcb8d8c6d4df8143\nc5d999b26cc9ba381735ea0e092a805a\na6ae06e879fcaa019e26fe04e3dd51db\n6d5d4e506d6630b193528e10aeca0aae\nea8eb3f3d917d61850c421917af4a474\n13c361b7b046fe9f35b0d1c9f81f0b6c\n86ae11f8d3079f0869e321f074c1ab85\n8f2eec27fa65b6b7ef76898f881b76a\ne94273de8e52f9f896a3517f50eeb9f4\n5eefe57de9ad8b6114038d588fd1342f\nc7507804ba5ceca79573a52ffe6bb4cc\nb8c6a482bc4d5da6fcb8d8c6d4df8143\n176c8eee2d45e5d0535a7b6b7a43b6cd\nc816540b4e0eacd57697d9c3588bbfc5\n387429f609793f9dba5342d638d0c267\ne365a641480635d330c09d86acf3d5c1\n55eea74e6f73173b49904d779af64a6e\naea8305fcfd8a1d2ff0b82a28078fd3\ncaeabb766b3b9c67d3c1dc91e223304c\n447a8ab0523dde411936a2870d820ad3\nb89c79537ead39c1cbf3dda885c64a76\n9c2a936a664a59823c10371ef1aaa57c\n71090d1b424b4b4b29eb9d04ea723179\n75db7c2c9adbf2bfae18328edc91fc39\n605ddd207eed0d81414aaa1b9210e59a\na049ad0f20953a144cc30865d6337b9c\n26cdef36773542454d1e14997920b517\n8872dceb7ba9f34c140406de8e63ea3a\nd6c6665366854e6abec99d5b4657d5b1\n5d265be0ec25af3a7f772a7ed7ffb61\n5489ecdeac5c1cfb38bc5dac9ac556bb\n13daa0657f5c3e32cb0c0d433974e32b\n36a1e900d1b4d4b287b2013bc93e747c\ndf4e44114543e805fcb8d8c6d4df8143\n42fa87cd27edca9efcb8d8c6d4df8143\n2d9224be8cc6fdaa1050b055aafa6fb8\n13badfc11837c16cc01e0156f398b4d2\nef4478daba21f2d49244b68aadec703\nf6425a421a497aad6cc679ef84e06ad6\n8fe1766aa6997b0f899bad344dc01f2f\nec876529d01d4df490ad276cd2af3a4\n9b579915b883bea042a65b86449bc7bf\nf0421826cd511f401592f292ab531da8\neca8e4d9645271fa37b2bb75885cfc44\n9ef7ccb91a25dc988cc413950b617e8f\n266ca6ba2582dd9dbc24b3e693083ca4\n8064580d3a225366ecbab50f1720e223\n463a3ee50280fddafcb8d8c6d4df8143\ne0aa085dfdb0ac03ef3a2c64cef919d0\n2140c6a8b4648d84f3443b22038d340\n9d1e04bd3df11256bef045a510a22fbb\nf111f0e0c6c3434f30f6e0ede20c4525\n544f2afb57934bbeffb8dd272bf2a810\na51f72154f09a2f926d49ab26d3c4ce6\nd54b55ff9b0923c12cd2160e449d45ae\n6f984fe4627c8333752653a04e5ed7ed\n20c9d1713fbc0925c35131da26f8061a\n9023acca19d27f3fd49b2e04785f8492\n571137d6378372c5fcb8d8c6d4df8143\ndac3843c8f77b34362a510b8f97c658e\n68b79b143cb1538c3087f84b199fd297\n8522fb13bfa443d33cabd62faf4bd0f0\n7e5dc9256f9600d9fcb8d8c6d4df8143\ne8927203fbdbe320c02170c33e00ea64\n571027d7f9639bfa7d7103fc1114c50f\n7a1d06ba4fec22e8dac42bdc1d2df4a3\nfbb4a4faa8f2faedd661ff085a0f14b7\n8843ee2b220a702e5dac14d8f50c13f3\n2156df35753fc26c6e285dd101afcb51\n6750d3745d49f7ad3c1ac1040256359a\nd82a17b1f646e95dfcb8d8c6d4df8143\nea02a7933158caecfcb8d8c6d4df8143\n6e705a94eb0a7210e0ebca47533963a7\n27623aecfdae2d887eaeab1f0c9120b7\nbd0bbdadcd0b9fca7d57a0513a353be5\nd98c3d6304228f36d3cb982c5a53c2d2\n5116452b7826dfd92548598e855f0844\n21a4556c02678fd7e59f529cd1b6faa8\nd153ae6d65b31e00fcb8d8c6d4df8143\n6a11bbf62bfb5a5a59f8e31ca87c470e\n4d6ea3aabaf02bcd29c39f613cc72411\na8d45280f2ac4e7190c926f4231a7285\n60d1a7bf1e70c526befa8f2022732db1\n7260ad08488a3156f78e32cea3be35af\ncf0c13fb0e57bad9cb02404e1e21ec1\n9b5d13550ee386e686c0096e326e950a\n395701deeb1b2bfd48657c771cfae685\nd6fb6984306d5197e96d94a67d9df99f\n79af7fbe587692a583768a4ac1607d73\n71c9e25ec4fe08cbf7454c09d6230a4d\nf40c7b19234b07c2c8687ff9b0b4e4ac\nfc6ca834ee897c2be13f009579d33764\nbb04811d84ec072130cc41b666fd9890\nedce64335e42ac2f58452382da1a79f3\n6999ab054bc900d1868fb986bc092533\n7c8d71334a6bbe8eb3d57d6094a92e4e\n8e78283cdb07db1fb33cda5c8e604e7a\ne12e898cceec4e23f51f77a6d7299806\n2f216bc398d3da98cddf96969ede3013\n81bbe86e17196c2fd0db1e44373ee2d4\n4b7ba911d5504501b320860840f0eeef\n934981825fbc4e14ff458e602ebccbb0\nc8f5bf57a3215cbe9a6c869309041adb\n574e0de3cea53dd472b623d6378b1581\n925fe53d5075145981a172d69c52a28a\n96837f1ee184d9a4522f1ade738c024a\nca5a19cc0a5f34273b8ea30c1700f67\n1f80e265e6a038ad9c5c74ff620f967b\n6d52f0b6141dee194a200f5f1797d729\n792c3698dc7d200144175b4dddf5be08\n266d6b136cba49504b3c42e318f3affc\ne02cc9c4cac285419cb07ecb5b4102\nb668df78adedbd1735ea0e092a805a\nd4331a5810e36726b8c3db3876404c90\n51634562e4cbb4be27c4ca11e0316b1b\n41cc8b1669429bf92a7d46e74f08da70\n4924f75c6be38334f51f77a6d7299806\nada0e305757901e589daba250d5b5a5c\n35b23397ce08256e847d4e46a1f9f05\n9a9aa982c0667012ce11183544874734\n58588e4f7c57007e11bd92e9690e7fc2\nf79cd66d0a369bdb29a42a0444436860\n9ea81b2f43dca29c5412c66cb6f267da\n53d1324d1e85fd37c35131da26f8061a\ne655d36c391a57c156ca893ec1044405\n25f1a1563f38912250f0b0248b30425\nfcd263dc05862ad1bec3353c29751fdf\nc61d6c246dde340462a510b8f97c658e\n39fcaf51940333b46ab88e9b8b75d248\nf0b19b0258e8f551d5cb6d178687b980\n3fef4c8dca9dd0e0dd4763fce8a9da20\nedd398530cff676282bfcd34215ccfc7\n2d3c98d5d85f22a127babbd370e736b\n9dd9e38efea22f529a60d6ab40898d\nd0018775e9f2d109fcb8d8c6d4df8143\nd3e339b83170d89629a60d6ab40898d\nde93987085cf4dcc5208aab875b932bc\n1a5ebc8575a4e5edcc901650bbbbb0b5\nf41b9c3cb9243780dce4754e673446ce\nddeb5d944c128f78b0957d845ac33749\n163fb10d7f6f09fcf1c7a32d97b27a4f\nd982697f8c20b769aec118775e1a3eb4\n5eb0e18b12f4940d6f97b7cf7ff5d41\nc3277019e57251cfb784faac204319d9\nb9d353635f7e1134e95ee7559a2a873b\n9c4a3637ca2ce09d4454439c22a43db6\n2ab4c7882329710f29a42a0444436860\n5d693f7115e5ae984e9836419f09cc52\n54ad0800a524a96ee039576a17a0737d\nf64e567b44e550c0fcb8d8c6d4df8143\n4f3f01e4b17d018ddaaf0f74e020d2dc\n69baf1ded62a0259970e9f7b51f4efe\n4078ba4cad280d72b8b431083b6191e2\nfa6b1702f7c1fa191b17743c18fb63dc\ne89a02d4a6cc95f3fcb8d8c6d4df8143\n989a70bcea69bb4372a02c2db7bf58cd\n94fdbb748526dae4ea2d70ab68cd1d2\nb4aeed70a21518fefcb8d8c6d4df8143\nd36d4552fe1290ee90c2e24416edfe5b\nfb8be091d77118ab90fd203f931c9af5\ne293003f297e155624d1b7c6bfe44fcc\nd08941d91a52d4ca411abfe83236ee8a\n2ac3425dd13590ef1f9097f35cf9fde9\n98c6cea5f2d3ea28fcb8d8c6d4df8143\n8e8f964be5bea1068616812464c86290\n13c127aad3fc8e6af51fa0238791f5dc\nbad7893ac164cc44a43934c3f4e340d5\nff22bf19e2ef19d12f7ffc95c59dca52\ne120efa70ef8efa71ce05d96d33be415\n63e9be096e29681829a42a0444436860\na7f25e662466f59dfcb8d8c6d4df8143\n6e268cddf895c20ffcb8d8c6d4df8143\n1c9283c95c8bddd5efacb264ebf1ec75\n7d4d715c4812e42cc0f8577a553db1b0\nf6a7d85ccca5e5e34a6ecce2eeb45768\n9936875de81346fafcb8d8c6d4df8143\n1feb0beac92a26bcb0aa15078ea6f391\nc961e64a930680bb900a91cbf836390b\ncf9987efe529a5c538b27a25d1336579\n7e5b5fa94575f873c2e0b170f2ad8bc\n707a1c16fe9ba4fa60a25ec0f32e89e3\naab336a18bb4e51fcd4910413c446d9\ncfebf5d2a0382ee3fcb8d8c6d4df8143\n5f9edd0b9cdc77ded49b2e04785f8492\n67b0ef08720310aa14f846b7e32e76c4\n55f607d043cb587d5c10b08ea69398c3\nd59202f9d1504c8cc65f1ed6a348c8a9\n6b0664c9fb1a4fd1fcb8d8c6d4df8143\n9000cdad54cd0285e6597d391ab6fcc1\ncf280956401024fe92225eae846f578f\n9358ffb1bae027166aea2f18ee404fd5\n357c0ff8a3ddddf5902078d0d905735b\nedcadf508090e17bfcb8d8c6d4df8143\ne43996a9154a48e0db039d8689a74349\nca65934efe289843df446319d65b9318\n6c90f92219fd4ba74719088c8e42c6ab\nbc5f2f93922aeb65fcb8d8c6d4df8143\nd6ae7a5542800519fcb8d8c6d4df8143\na1d2f39cb17540e8988abef1fd117e7\ndba95c4ca95048982d9c07d3b9171829\n5f22096b25995531fcb8d8c6d4df8143\n6be148a3e219dc68e6597d391ab6fcc1\nfc8345dacde827e376e9713f57a5fcb6\nb31c246d2341429f76c2a9de5c96f76\ncf280bbec8017c26655715f3c8480da5\nda4fe1c3d5b1eb6ab2b4f8bf5db83688\ned6f57c8e550c60d39adae6ec56b2451\n7527ef1898765c09fcb8d8c6d4df8143\nb384676ddfb3b657fcb8d8c6d4df8143\ne69b661bb90d7e9c9dcf2183c858e6e5\n94ca5c31d2ba70f42cd2160e449d45ae\n1a963b28c5520cc737b2bb75885cfc44\n3ca8da93aff926a4edd822c7d5ea26ed\n6f5b104f7c1cb4bc636c7e486232cac1\nd3ca8a5d2e8c8ba4a320e34dad7c78bd\ne6c64600128ca2c176e9713f57a5fcb6\n5f24434ac22353708749901456352d5\ne6b34319c9ce57258d6a77b750ad3e43\n60d7d0e9c45368c282db9fca4b68095\n28210d460a79e323322123314d92e1d\n9b876bb9de59e5e9aceb781f079a299\n44eb1db902d44daa30f6e0ede20c4525\n3259e491870a8c49eef5d83b671bb264\n221e2caf85f9bc5a2f9aa70de681f2c4\n84b093611cca35f86f104b4f395219ec\nda09a8c73054e9220ca3aeb14e36a45\nde063371e5ef119cfcb8d8c6d4df8143\n8e2c822e2a316fa04f3443b22038d340\n5f865b98b4be6abf35836c728d324152\n3fb06dd95ac94436f51f77a6d7299806\na2c9d00ed67862af2c528d33bca1ac2\na415a0bc88904b24ed56e40d2df47c3\n9a447967a9fb5938bb3deb7fab7c9b7\n7b39100755e9578799284d844aba7576\nc9c2e5fc4d00db3acd99cc18cb18bf34\nbaffbaa9a9338f331735ea0e092a805a\n7ea1864f38bc326696a3517f50eeb9f4\n8b7ee8229a579ee135836c728d324152\ne20889cbe2d917787d616ef0c11d6a7f\n6c5d68e495c1f0a4d42b9650f19dd425\nc20ca2a29975866cbc7ea0c51211251\n5fba90e6e30b503461bfbba8a5defb02\n790931b57e9513bf661713a114fc5367\nd12558a4b1dec5ab37b2bb75885cfc44\ncc643d2e5b7a46f5809222e4341a7d65\nb0a3cf1e09f7a3591c1ef519b9196b63\nff1f829e2d6ff0d4fcb8d8c6d4df8143\nf5a121812ce16ed2578f5640449b6f5\n9c62735cc43add358f63636e145483fb\n6d15af6141ea7c918bb3deb7fab7c9b7\n44bcb1ec762af23b8880edc6251fa529\n981e7c99ee1fbf91fcb8d8c6d4df8143\nf34d9842b68f0b59fcb8d8c6d4df8143\n4e0aabe8a65ddc43e019184dd4eea7e1\na1db02b6b7264b6d1cf9f632ab9ad62b\n121286f843ab37f71735ea0e092a805a\n2070e39377140bdd7f32712aef0efc5a\na3c6ef6078045515ea9f23f235ccc6\n367773a008b63a2c5208aab875b932bc\n154c35bf29fa227df51f77a6d7299806\n5b12386df80fe8b0664b3b9b23ddfcbc\nabd8a95ebe132c58cf004563556ddb36\nea235afbbaa6fcccf32735686fcd8ec8\na89562207e0d50a6704c1b723fefce78\n8f5347fce0d9b517cac7c8ef7fe2392d\n37aac1913201b058c02170c33e00ea64\n5f0c4dd6cfa0def2e59f529cd1b6faa8\n9459660f359235abd9010e2a1af5e34e\na2fb35f872225ab2f6cbdab9ae1f93de\n9534d5751fd1ed574cc30865d6337b9c\na6413f422f4ef630fecfeea7038369e1\ne97ef0ba839e1e915412c66cb6f267da\n1bb78fe58e75596d9f42325587eab087\n2e06c6e29aa90245532e8683617554c4\n816bafd4dd0a04756da1275102abcdb1\na4f6213e0b627da55637847f2942f876\ne8006513d5f46d79e738f481f8560d58\naad5c7256a7c6ba92a4d67a8ec314d2a\nd2ff6b9d63c65ab71735ea0e092a805a\n107b8c870eade2481735ea0e092a805a\n7e4905eb4670c6df2f939979b0dbf5d5\n79bba57a00789023febdb1f263373824\needd40c0191a90a5cbde89e0c48a01bf\n181d2b693d7ab89457a48b78ff77644d\ne6cd04818644ee6f23acb241f0917910\n8edb515a3e77afc4a8737fcf23389014\n18ed152bad2c123b4b3c42e318f3affc\n98d0f886ae05db5af54f0f3959ecff67\na54ea55a07b96a237b2bb75885cfc44\ne959384247c0dfbe1e18a354bfd56290\na5bfb9a3571e7e86e59f529cd1b6faa8\na8d6e75a7d2712f3fcb8d8c6d4df8143\n45a2e2773a905744d5c91bd67a7ae42a\n6ea3addd99f0106b77981b941eb4f5d1\n8261f96cc33ddb264a7f20ad39e7a642\ne21f21744e65eb1a4ab1b242068f86fb\n4b031808cc2b126243dbb6421d614c0d\ndb759b73923a7e36b9df6a8c2c09592\n4f1199474ab8c9b240cd51e913c7ba8a\n6faffa042190494a3def89b32cef8e45\n540335c2788125cbc9dd845c88786daa\n89ad10075443cc8ece868a9ece283694\na90fa89d0cb8ec989cd3f9e8648111d1\naa381aff183b1427b7d9d23574a480ae\n342ea0134b504918cf5a37a70014c623\n44cb50f7614a4574d09ae058ff1abff8\n5aefcf6b38e180f06df11193c72a632e\nc0644ddc5cac342b565ae30b0a8151d8\n878d76c9657bec71fa58f9bd5c78b9e4\n266b5e8e78e4c0dfb82cf928f6ed5338\n8cb3f83d6ca1a4849364e552d5e4060f\n6c33f42a0f97360143dbb6421d614c0d\n9749404078fe4a8b6afaa22adc38077c\n561853e6377361196afaa22adc38077c\n6936b0f0e7c88e3bdc22f557e01eba14\n41fce4197aad78f76fab5a5e55726ee7\nb88ca09d13a5a472e3e80050b31d1851\n77fb025b8a2314787eaeab1f0c9120b7\n26bb7229b024a8549b0c8289d51d981b\n9cf29c3de0cf127730f6e0ede20c4525\n980e88a168a94790899bad344dc01f2f\n366b8a4c8e38961597910e2efc6028df\ne2e7f45670fc5e369a6c869309041adb\n6dcbc7efc9369de386a5dcc6ebde687f\nc904c93a0a1739e5f51f77a6d7299806\nc05273997fd65e7b88e7662971dc736f\ne1916a904163748e8cc413950b617e8f\n3ef55697cf7f68061173b43d09e96094\n7b41e8307e85ab0b87e834be7739917e\n5bbe3658e49eece0b49beb995c4209b8\nd1b15263933da857784a45ea6efa1d77\nd91cf049fa961ccb59f8e31ca87c470e\ne993492372fce761cb3a30f2c37c38a6\n9150920591733fae0fa444666ebe22d\nb5a223ea93f39c2c961b70a6f96df2a4\n97c26d66399ecdc973b8ea30c1700f67\ncec552e824883875490ad276cd2af3a4\ndc04781fbec1e188b1baefce5cfff2fa\nde26f9660d34449f6838f5d4fcdeb579\n5c25916b55fbe4ca29695ec09b98af5\n9d66a6faebd46b1d68661782af60b711\naecfc0a531b67a478b424343280aeccb\n8464de18cd5d14e138435fc2a8dffe1b\nd582dce8cd58bc57899bad344dc01f2f\n2fa7dbc66467235e2102429c788ba90\n6bd7a0abc6f77368b0cf606cb698fa08\ne86bed66672425464492223278b0e937\n940a5e53f69e193ff42a90fe4baf4591\nd3194dd3e07881828f58d8b19de93f99\nc83f19fefc2c06593e22d791db24e31c\n5ed0d3a50d9d77dcf1dc60fdf1e64165\nb66524f44170023ff7248d9dbed7a7b8\n646031cc994df3be11fd25b4ef1afe87\n8c5f6d5f0ad51f1a45c8b1285cb15c2c\n30fd90087f12d6ddb3a010e5a9dcf3a8\n81e42a3f9e13e1e52beec56b24479ed1\n99688a2668fe1fa3cf004563556ddb36\n366a93bce1f6f524eaf14273fa406ffc\nb1dc9ca886ac0cabb924fe739b83941e\n418a6ed14b4571daa5af58528d00e4fc\ne94644a89151a426876b50fc31ccedf9\n42e6823a1ad23819182816640e3b1915\neefbd20231e62d535c10b08ea69398c3\n6b9e4403230a162b54fb5025c749b481\n62ab9c2f7b826fbcb910025244eec99a\n110b426397c707bdc9c869210ebfd6b0\ned1de19103e97b74c30ba10ebbf8ea21\nbfa83d8f88e91d3fed83d50637042c60\nb479c49366c4d5def2cdf09737c19aad\n6bb38bc6fdb6adc359c5c7ba83ec931a\n437b5e12cf1b8771146f6ae9394828b0\n4865be9773c699bd2fadb0a8dd9104b7\n17b083510f14982b7eaeab1f0c9120b7\n28186fa2690df5daefe905a3f9856df5\n102273fdf8d1b90041fbc1e2da054acb\n627ed898c49543594c64af119029e57c\n6b8790947a71e9a9bc5996932c1238cd\n454b7345c01c404b6d0fc9460109eda7\nbac7b2c006c9cff76739a7caa0c577bd\n63da6d6aff4d14789bc41a35200a3af1\nca6c2a23c86be64e2b93fb2743876c57\n3f22e6719decb1bb3a9ec79b9c5da99b\n608b5df0d5946c68400789f7122dfdab\n763ceeaa4ce2ce1d6afaa22adc38077c\nb401155fbc54313330f6e0ede20c4525\na34db84654a9685f54386f3e4b944407\nb9a8cb27dbbcdb2a404a436d0f18c82a\n1845801e19ac5c22683869a26110a529\nc05cc9636722504688e7662971dc736f\n892900c66731d9c473ab7b7128d466a2\n22ca1d5fbd8e6eac7b79156a61ad4c01\n2fc19897a2f384ebc77d45d65dc3714\nd1aed86c38d9ea6761462fc0fa9b0bb4\n94f4c42b6db62c9688e7662971dc736f\n7474deb91f55a63840719e09f7e71f01\n2768a3ebfde6410dcdfc3ede082b8a07\nbb53a3c6ac9cbd386fa63795f94c4d8c\n44d1dac026839e25f690049a092c5efc\n74799fccd1636ce4df6cfab91d65bb91\na9ed31fba7eacd42f51f77a6d7299806\nc2378f62797cbcb26a5e440d54e375dc\n9c3646d9db630e1d6bab719bf4ec73ef\ncec61b6fb378925e498725b9a1405ebb\nb000d66b8f78ab20cfdfe3f21f42a111\ne9f5e9f6f8d54caae455de02837313a6\ndfb6553d8e04cbaae1263552aa9a2d35\n8c410dce9de0c632ecb14096838a20c5\n1c2327fed3930660177f2a3a0c71fbcd\n91d0d5301653c3b33da8556a622a2ae1\n64fe64c30ac05282443f70ad172f4dd5\nbad4a1e98a6111f7db48c721db3fba4\n302c3b1ea1a86a1ed2da3773f06dbf7\n19654d8fe7090a887eaeab1f0c9120b7\n5f1dec078cee0f78c580fdeb5460f6d6\nf842fd7369833b91b7e3a72c32cb38c\nba3f51c0e1e0adef4cc30865d6337b9c\n71c61e41a85671c91b82f1530fe53352\nad17118799f11952a3721d780ca17da2\n9de2685230d41d58c397356311cbeea4\n26ce3db3122afe74a5f600ed2cf472ac\naf3d58dc258e0fe06ef604d255267aae\n2b8dbd2f75503fb0c29700c28ff4f50b\nab53b6e7b2f87cb5c1935c9110af1bff\ne78c5337a56dca56bd6e55f88e701c4\nae25da30c4293fcf230584014222e685\nef45c648fe3b0dde8449e0b8dd14796b\n2269f268b32b40b35fc8f4c1fc00b380\nb45b40ea1c3a813235836c728d324152\n59e852f315216f95ba9df3ea0397b1a6\n1129a07c75f5a709cf004563556ddb36\nd6d7fb290b69e985ee2b478fec745c0a\n5383c9b60d5b66a2d22730b0728b2fc9\nca75df76115441abc516ff01c2593ee9\n4aee1567027d9dd14357a62465045ec4\n8e9c28fc5813a5bdcf004563556ddb36\n817c0b1b85437923e7321f25048c6142\nfd26f566fe08c3dac64d4b10f9dc65a\n17fb3b85fb6bf1d74888a07f79e95b66\na1d2540e0ca159ec0735e7fd8e163ce\n63fc809815b9639de7c7920f6a65a54d\nf9ee021d829cb2ba1cff7132ce500fbb\n98f1dd4a250a906fb5fd9907631a04b7\n914a876b24bea577e97426e55fb77981\n3bd57e05db01e224e7e684d25d4dcaf0\n7092dd68172560f410edd100dffd8d85\nd9adf06b7288f3cbac520a24f902dbdd\n6de220e49cf87c6bb15194162f658e87\n713fa0e1076c99c1763bbfff01efee31\n2f972bfe152e4c23f36ea1eb6542fe7e\na87825df690f900c408d050f12518231\na5423069e30181a019655a581ade300e\n4f62263f7bb10280a5f600ed2cf472ac\ne474916f1ee1635e0bc0e32d71e297\n40bbb4b123d9df2028c187222995b2b5\n5f4bc8ad5a1a0dd4cccbece4754c7cf\n87d8b99b8a43e2f930f6e0ede20c4525\nec01e8b79f2d07df784a45ea6efa1d77\n66acf7f6883db6a377b9297f3055210\n2b7eaa54eba94f34502b0796fdf972\n52284fc0b5822495ce140b3448f2e640\n57e53cf314a173f835836c728d324152\n369555d5aca3e7e65a31d91ec836a511\n6512e3a8e6566fd0cf004563556ddb36\n1c6701a695ba1b8228eb8d149efa4062\n762b4e2cbb8e643790c2e24416edfe5b\n5e4f40ec0a77cd1e876b399a99a15c0f\n8006e3cb3ba934a05b977412e02c412c\n252152593d97aabfd5f1d0bcb81c89ec\n54d9556d51287bb470a43c2d978e502e\n368188e7a9b9e1d3c24c2251620b1cc4\n98ae07e021f3227711d89826bd8e0670\nb5c4331e5896bcec1119ad686ed3f611\n5f943996d99dcf59726dbbf7bc5e4df3\n37f318fc52f4ae333f534d0cf4cbfb4f\nab7895189ef13e754f3443b22038d340\ncb614975be6370dcb6b7592323488fab\nd6a5a84cc689a2bd620365f6656fe3\n92bdae8c11323fc518df0876cc6aa6ac\n273314626729b1e973222d877df1ecac\n1e0f7ff92144792ac3ab13a0474803d5\n9a0fc544ab771054b45df535caecae62\n72b73a861b7626dcc8745da32e9100ab\n5aeb223a91320c39edd4171cd40b3feb\n67e18db74dfcf7f418df0876cc6aa6ac\n7a892d6b3951124cf004563556ddb36\n64f61c9c81e3eb7b8aaae3d020f5ddf8\n534c7e2c9495d7987b6fd5468f603b31\na0858fbc08ec5e34e7e684d25d4dcaf0\n86f8f2c064c79e6cb0c0d433974e32b\n8b4cb57c4d21a84d6af65e5aa19d2e8c\nd7a10c837316de2f3ca265f557f5dc3e\n14656fe47266b0eb88e7662971dc736f\n2e18c1bd23e4d89dbb6d3a4b6666d91\nb82e5c6e1133aafedf6cfab91d65bb91\n6baa8b21a080da186fa63795f94c4d8c\n43fce04e5e4e22bbba9ea396e14c59f2\n26316fabe129210317fad902853ecfd7\nd378c508566d68cb48d2aef7552b65e3\n19acda4f74d91d908351668cf609c7df\na47a54ea870ac35396280c8d384f22e4\nf01ce55e789efa7e5127e0873cfaa7b8\nc97cc6e7fd4b4a07d650f729d0ffe69\n71491d1e3a4c96412474124825d469e\nd217e8ab61670bbb433009863c91a425\n1728c555de071aad3ea96ac97db63fa8\nd939b56b53aa7e7c42f80363988bcb92\nf18a519effa019d819cb07ecb5b4102\nae50216235a96cffcb8d8c6d4df8143\nb6953f683e8b3feb9571d807bcd25673\n79b93ef5e8928141a54a0acb16609d15\nb4e939adfc94954a276206fae5d3c473\nd2a4c36321c50c06d28b52ade6c7e48\neecf97919cea666e67903707764646db\nb95719df909773fe65d8717db5192d1\n85a73c46a97649fa6d0c88a73d7cb14d\n9a244723bfef786294cdfc338037bd95\n55de711b4c86b86188e7662971dc736f\n79487b518c97cac315b5ce4486462d3f\n581ad338a34dc3bc30f6e0ede20c4525\n20e4c5b5783eb950490ad276cd2af3a4\naa4720a899ddf5456a5c4fd998d89f43\n80931bba35ec76db7088591b1a3e2750\n9e7ae4e322a056b954cd2a0ea6cb618b\n2ed8dcef657845be4a8e02787dff638e\n435600f37bac6ed9a28fe47978e866bb\n89ec7ebc49a312184205db2677c7526e\na4e4446f8ba07f1730612f5c0ef21eb8\n8eee3b5fd2f3abd4bcde6f92ef1f7ee7\nd1ec5f73a0d3d6e4f3ff0017952fe4bc\nb4e7c74a6e6685d2339c933a8cb966c\n3e9ce9f30f1999ab45bb7680f88b3d99\n375c6cce56f3967ed323d15bd4f8b2d\n300a2c57c5c0a31c35836c728d324152\n204a4eb580e93c559d709998b2d6e774\n9d9ade887a3fcfee89d70669fd6a0e5a\n21e25ed232808a5a6fdc47d9bd513767\n1852cf691d561b97760c1770d1a1230\n15606afd522923eb4e91947b208587c6\n3e1a71694488a4cd77b98fdac17a3204\n61555024958cb5efe4e7668ba612f00\nb6f69dd63be9146d14f1e0019ad6a8a8\n9af0807b146c564a45c4ecb2f4b73702\nee9849dc8d93e16c118ddfdb81cc6068\n50dec764276863a77933e36129e75649\n5de6d462706587e9f0f9e9e64b6b41ce\n5850799c5af71d58c13933f92cd75682\n7d097f4b38f0a8a65b6c7da997b0e5e3\nda12a5d96b465cf6bced73c51e99f8b2\n6f6a74a5528a7b5d88e7662971dc736f\nb9283738780e29c23a5fb687d9cb4ec7\na17a7f72494b303abc5744a94c74a7b9\n83353863ea1349682ebeb1e6a8111f53\nfca3ffd4ee694c1a9c0ca344f487323e\n2388c99892c2185268d1b9a1d97e2846\n852feb3fca95b6d5dc3653f8341633a\n45d24c9106f2cd7614cd86cb97af8937\nef12cf5aba58871e5510d59f3ab1ed64\n16efeb266e249dd63a52a79d6f5aab84\nb5a0f10269e2f4a6ba5342d638d0c267\nd385523f0cd93d48d6084fb53091249\n9a98a0088ac6d37a2c5b2f528cea9dd6\nd2c9d9efe9592eefcc901650bbbbb0b5\na56224d991c3eedf77d8f08447bad584\n6770adca6c298f68fc3f90c1b551a0f7\n2cba43cc26f174a8f9a65dcd8ee605f\nfa0a32c4326a42fef51f77a6d7299806\neb0d19ccdeb98cff88e7662971dc736f\n9464e80554bbd3de030fd2fa0608452\nc4dcfcc8c434f13230584014222e685\nd1ba336c09928deefc91db1746a83b15\n3ba4b7bb7b6d89415461e7d030e03e48\n41e0a38cafd737a87088591b1a3e2750\na258951f55855e41c02170c33e00ea64\n75ae2c70aaf3c818d9c283deb7cdce0f\ncd7bda99f9797d8b1878e92fa20d38a6\n656d25df742a84877e44e3c724db889f\nc7c15b7d23fdfd98808760409d52a60d\nd5a67642ff0a2908dbfbef883e8d10aa\nd83fc71f3978130e335fe03ac3704320\n69ae5e9ce88c9262dd0bffa2f83687b2\nb8e26fbbb44def8d1deb48513aeadf93\nc4e8a6d40f6433928eb8d149efa4062\n66fcb967b951c0f11bb088904f7cb154\n15238270f4f59a011b17743c18fb63dc\n72099a83e9a058ace715cd506e17332\n6068920e350f1fcef04bb0474a98ba2b\n7f5bc32085dfbbb88e7662971dc736f\n29a363fc242b282b45df535caecae62\n7324c25be8ff5cd74725f67267e31c89\n9f8c2c2c3b9796654b3d6a0fb5682cc4\n90e5bd9f10fd5216fbb8cbddab1c2002\na4f257a3eb6c5c37f716a9f638b146ab\n1a48f00729981afbc01ff6a6aade8d2\nb6d6a772087d456a3dfad56d2a4eefcd\nd5e278feb6007ccb88e7662971dc736f\n18010f1e7133415290c2e24416edfe5b\ne7287ee25156053773ab7b7128d466a2\n29f2e3d2815a018ba77f16c25b1f7f4d\nbb3c2fba4e1b712357ddce8e42aa6e90\n4b48b7f72cb4f56ef00f0216ab99ff30\nf10af3d00a4c3e89f51f77a6d7299806\nd466b21fb042a2ac605afa80919f9592\na0e4661a3c458405899bad344dc01f2f\ncb4b887b5acd27cde76bc197b3a3ffc0\ncc3eb92ef1319ba38a3c32fbf0f86f95\n3591b4c764217d2833e4e0fe8cce118e\n56cfd1c474b7b88920c80e4850e77325\n8425ceaafc6cdb0b159fbcda62e85465\n85574f6036ea1f90d8c46a3a266762d7\n9e3905c3fe967a4dc13933f92cd75682\ne083ee4f045402b2806fa01b99bcd24\ndbfa4bf005acf00d351d9ca36f76b95\ncd0f2eaac6719a3ddb039d8689a74349\n5428e217da1af02822a33e080d0e71c\nd2fc5882e1faa78c1592f292ab531da8\n5f3f11372141da8def0b2fc3511b6fbd\ndd22b87797f960f47b0f9bd97c2f1a90\n8b2b8b1048a707203c752b66cc923fdb\n169d73f18f7b17bb4a6ecce2eeb45768\naa34fbd699f88094e5c7ea227b17d897\n40e6433da380273d128650ca4a80c238\n10ba42fc70f16d7f41d86c17c15247b0\n9f09619002ab4d76f42a90fe4baf4591\n53bac55dfe78177282889f551cb32a81\ne9a9f966236acafab48ae76bc6e76e1\nf7b3550d5e59934595bea7c29e873d16\n101d0e7dbd07d8247dfd6bf7196ba84d\n635a3e20af086ce8c0a31f7b214b7805\n1fa4508dad05235a7d3aa3bae1f7b494\n79815be2cb9b004b1be03639838c9758\n46dc3daf02f51d09490ad276cd2af3a4\ncdb065e1726769ca8cd36201f5f879e6\n3977cc8807304dfc5adb3ef1dbe9e3b3\n456a6dc3d369a749519f3f3e6cd6d1a6\n1c003aabfe3e12976fd90c386180831a\n36943f6afca6cbf518134b529d13e79a\n3ccfbe8b56a3b181276206fae5d3c473\n20cd92a6797a9ee12ebeb1e6a8111f53\n5360bb53166e73958b424343280aeccb\nb990d515ee1cfc214a200f5f1797d729\n802c287eacfbcba9564b8e0b814c602e\n3a0719c32c45c16f96791035e86a30f4\nd2d76338428129f62ffd6bbc7610ab0\n833baf068fb6225c99570bac758be6a4\n67780176ebcb050dfe3e90bc90e90c63\n16ae2568c9e62681f8b8d4a282992be4\n412cac2afa6299c3f42a90fe4baf4591\n6b42816b1e70429f61bcdcc7d95ea51c\n4da9ae6448c860243dfad56d2a4eefcd\nced76fc046191db3fe5c8ffd0f5eba47\n872407329ce09557bced73c51e99f8b2\n7c0e5f39eeaa5d6cef9b6f306f98b0e9\n6ee5804580c170cdf6da603e92626bf9\nba95511c0a79f2fc73b8ea30c1700f67\n617e98c1d743c17420ccbe1c34ca182d\n2419edff383179cbc53c4281a65fe22a\n364ea921dbd5da869a58625fdbc8d761\n8207274d3677061673ab7b7128d466a2\n381c2fb265c32cb093be5e169656ef71\n1a6a520652aa2244146fa8a09fad6c38\na16fe5e25c99ee73172986dc05e3b9d1\n3abe4c174e5e5ffe490ad276cd2af3a4\nf2dbcc8dd8a7c604865a5ebd0b487fe6\ndafdd320477802a19a4cbf5d3b79df06\ncdbb91da1b21cd9c879995e59bad3d69\na26918d26e74fcb796433fd91744c67a\n2f46b8a15b15439d713f2e93cbeac35d\n4521282bd4550113a5f600ed2cf472ac\n382e40ed472250924f3443b22038d340\n9802abad61f4ea7c37c99625b0c170be\n4d63d3865d635b2be7c7920f6a65a54d\na1194aa9dd64c3c849d61704e3b15013\n2161683c44a7dc356bd865f153842b49\na3b93f34b7e36cc52460e48c67c108d4\n680e5d7185a51e26a50ffe9b7408540a\n8e4d5fa2a1c91f036a9633583f89b17f\n238138a3b01dc4fa68f9be495c6674d2\n935a5b22007014838047317417e6f5d7\n7293f886dfe144f3496d07587574cede\n30464d7e164a40aa2bc52a80abcabb17\nc226b3469c086c75a1b5ceeca96f6fbc\n5929c6937d617f3acf7d397dd220c7e2\n1b79210962721517fcddd74ee6c69025\n80d86a40527fd0a7edd4171cd40b3feb\n9c6084d24011c791c8107db508bde472\n979867c99d8e0b7a4601feca428b2996\n4cda1ff0899a6fd5f58da08b07a975ff\n6e46cdd2f97cd28ad98bf80379cd1d6\n11913615a1b732d435836c728d324152\n5038edfd2c36fdc1bf1911e2d5611e35\na0dfc97cf85ddccdac42bdc1d2df4a3\n12c0b15c8ed8a3edb039d8689a74349\n1baf036acc927ae27b79156a61ad4c01\nf8a6f60ee9926c01e7822b3160005e08\n9cdc3191bede2d0eef3a2c64cef919d0\nca968e46ba74732551970742dd566321\n84ab363e60b9bd9185d624cfcd9a37a7\n684b06c007aa83873c2e0b170f2ad8bc\n78b8718a36910dd32534572dc403ed94\n5488a4df2e78fa1eb184155425111e9f\n2848ad36017ecc69b4169e4cad9bb63a\nc9b4209f1a7e97cb90a9ce3e4b15521e\n433c55dc486ff83398b2240479533a01\n9b9b39303c66baba490ad276cd2af3a4\n9b7d490678f2c9db3d2be70e06ed6b30\na833d2cae8fada7430f6e0ede20c4525\na18b996f56dbc5cf37b2bb75885cfc44\n217bf5bf88842058b8a06a6203bc49a9\n579387a47297e1f4276206fae5d3c473\ne5fa327c14553b11e589b08489d157d\n421734c234a9ecce5c166769fb8a1974\n4bd69765d13c26ee29a42a0444436860\ne13a855926f25ffc5285aeabe3f6e218\n451fe793f6e8fc29276206fae5d3c473\n2a3267758a3caeb7cf353869450feb9a\n5a79339279fb7173fbdebca9f6788597\n1ce3f06d80025d9528eb8d149efa4062\nf41fdea6ec38439193b00be700931140\neaca02e8f065925dbaf5b49ad7809302\n8010191bdd123581a7e0a9557e913c86\n3343296bb39a9e679410a04d09c14d1a\n7f1a429b9df0dee97c36714e9fbbc038\n7603ca578be87f24b48d582908a164ed\nb11c3bda15930ee7bba5aaac798c64af\na5b8eda3cc13acfbbc8967b0321bd9d2\ndde3b4bb9fb1ad25e0d089cf3411494c\n893d9bdf1d7efe71bb5bd941c6665c21\n1ce6fb24e634d5962a510b8f97c658e\nd05b908d82722b5ab15194162f658e87\n71b7341f69f50e35e86c35c1c8efea2c\n85b3f0b7d9968d79664b3b9b23ddfcbc\nbd9b0dc06cbe7b123c8d0fdfb1cc2535\n4242398ccded25abd3ba76930e17ffc8\n34a9c2b926de1db2a50b88953d263a42\naa1e797797bcc2b161b08af0433fd9aa\n76da74f3a8f15fe8bed8734977b26c06\n211a5b7347645a99967cdbf1c849239\n356224e2ce466b551218479e9cbf7bda\n3638d46a41870173713decb1a0563b12\nc2f6c7b7b39fb06fbd4bf7024dfa167d\n2cc1ea376c68da216502fbbc8833905\n8c8ab9d274bf85bd7054f829b1ba8eb5\n2632d9a8462774cd81255bc546ed0fe3\n48fc49989a124917cd4a89b0fee32930\n1579c3aae8e26472db1afe6c464e7652\ne30a70e900f0a9565d28221e3b996124\n1833ca8ab16a7b7a43448fccd73e2957\ne8350583c84b5e6731ae8c8ff1eb3d45\nfad0ae547e1facc09f97ca916781e800\ne685cd3f7a980812e94026ea66f4d4bb\n99ab3dce10653cb7f4525a0066419a00\n6e2ccf5c1b61a09b6e56ccb2c92c79c\n20c399f42ea5e6ee748af47e1b2121e7\n5270f973e56a05f12cd2160e449d45ae\n6650c1c61c8aefc782db9fca4b68095\n3607a2301201064ce7c8fa552499fc0e\ncab6546da3916aa53c8d0fdfb1cc2535\nb15485a55d855bf980936c51aa7ffcf5\n92d7ce3f06a44aa582db9fca4b68095\ne1fedf82bf8fce9eb8b431083b6191e2\n22315c51156a826525b5da4000a94497\nb2c3fb8c5b65a63ce2c3d541bbe76212\n108a5262552050dfa9370719b830fc2c\nd3a3d52234e722825208aab875b932bc\n35e76406291b06dd66c1e3622e549d2f\ne4e93d5bfcfac3d72518f0b5d8933d6f\ndc78674611170676a87391c8bef1a77d\n5d91d6f6fae09234275d003e423c59ba\n5830c288acd8dbc5f71f6713526f9507\n1a5778ab63b3c558710629adc6653816\n13b365ef4887f5d388a942de43574033\nd0650b751034f567457ba044c28858b1\n2054bfb594262929a89fa001ff6369ec\nb2e4c14ea09658e3d0e9f1d4665fda29\ne389b9eed612e5c225a454369d791fb0\n286dc622e6f19929fdbe2bf897d8a820\n2967944ae64112c11952fef39dab6347\n7b2b1c24a60bcfab2cd2160e449d45ae\na7f071ed220b495d786810c22b062a88\n2ab86b983d36642141b0e36ebdbf4b7a\n89fb4886797187e7f63bf7d908efc575\ndaaca6107846a666a8737fcf23389014\n19d4c28ca3da609a5beaf00da5b709c2\n9bb957d69a2c2369c0f9df0cafd74e5c\n40c3135c95004291240cfa0649692c0f\nfd8f9cb134743e0c80bcdfbddc82df7a\n8566e44b5f1a818ff44a1c032c5fcdb7\n13a20b16bb59fdc712e1ea5343ce0273\n748983e71880720852ac619cbeedfc0\n5828e8ad9fd14a1cdb1afe6c464e7652\nb07acedb329345f0157f5033576317e1\nf95012d97b44f6a52a1b9710536b86bc\n5b74e8ee70acba2827d25c76a863dd52\nc2e2cbcd1cf9a5bcfcb8d8c6d4df8143\n2059087b746a931e6bc1922eaa6b6752\n4b6ba211c9731d334c614ad0ec154eb5\n39439a41656f7d50d42b9650f19dd425\nb4c69d04b835bd716c8ef569725a5272\n94f1ca2ad33eac601ae26e820e4d9a45\ndf908dc58159c82b1b3ffe2c05ec7aca\nd8d129b1a07b23b7a738de48265832af\n2c0177660b7ecc915c118a000b931714\nc561496324b6d8154c5b22ae639d5204\na721beef2162858ca2331382fbc36f94\n370a49ad568a764febb6b411cf15c31\n502e62c502cf2f10280b54299018290b\nf330eebb153447181735ea0e092a805a\n3cca977e9e6ae9e181a172d69c52a28a\nae5ecfa01e88e47f41bb00bd5475793\n1d2c2f3f398fe0ede6597d391ab6fcc1\n684a9c789b62321092cf95a109e87d7d\n7eadde33d9f9d8b272e526c4f21dfca4\nb3ee8dcfd2d814253e793fd9530521a8\n846ae34d173c06d828e0b580c4eee0e6\nf8bdd98f53fd851ec1537287b5c50d9d\n81dd7cff35cfcfba4b3c42e318f3affc\n49d9e5b7560eaa89819e369e3c49bff\n83254a427fd8309a36ca19fb57d01d2d\n1facaa0eb35496fb69783ac218a8a2bf\n1a3127ade9d7eca4fde8830b9596d8b9\nf0414c5a1d22911555683d8c4a0488e1\nf5a48805f020d3e3967cdbf1c849239\nbeab7a10e86dc5bd70d7da54cdb9b8d0\nc5946f7781bf5167aa6c5592e5d8022c\n2d4c4ceacdd41cf1f8c0f5916f81d758\n92c8a795e0dbe340145fa6babc33219e\n4dde6d694443a488edb5be732846826\n405e760fb406d96c2cd3f16bd931920d\n1e10f920ed440021cbded0430ad5ccf\n5a502ebda119949ef7dc60c6a4d98c25\n45fcbb7812f0c9e729426a0f57e4d15e\n20ddd6039bb61e97fa01175e0dff0063\ne2209dc7b188f4a061f2222dd11ba79b\nb8f5122793e92cccfde2773767fa47e8\n732a2b4f7626ca61d197f67767b32741\neb1c735af1339e294b3c42e318f3affc\n3784e4624e880e3d1735ea0e092a805a\ndc5e7460dff922246a44fdd49dec8069\naa6cdecffb9d4e403ec7ad443e0ae81e\n261cc5f20787f50cdbb57594c19a59cf\na9f5d780f8303489d8f5adb469ca89d3\n42129d6b04cb9038b2f7093e7efce142\nd508d163bd2e50a41b62028fb8bbd788\n181ec75aca2de25f6dbdf247ab8522eb\nab999b20d88829d5efb94709f30ce0d2\n62e887efeecdc1a31ebf42c64df00eb6\n5bd90c0cb1f01b24118486d21a76684f\nb6200d3340e31bf4da2dc0e73fb5c1f7\n85f1532468f57b13fb26684cf995edaa\n8b712f3a63bb01061735ea0e092a805a\nd54d7977d760f4c3bd16d4490a10a752\nfb4783fb006f89e4d9b53420a5458c53\nee8543345535674822aa4f44d9f697ed\n8937a2d361775c68aafd61baec633e88\nfec5f9c209e09dd9d49b2e04785f8492\n26f2f40fa7fc0c5538b28f94c165f833\ncb60159e291c3e5cfcb8d8c6d4df8143\n9c3c8db3c4b29c8e7bcb070cc655f13a\na500dac5ab226476b9445129e5607c02\n5c79a2bc3d2ca6b1df8d3317f6046bb8\n5e7f0e657142fff3e4692b8e5c093494\n4d08db52c717b74d49c3792a0dc29860\nd3380ee3db68aefb3f214ef9c53ac06\n6c4c45af95f811e479414e04132a8bef\n3a58b059261aa07229a42a0444436860\n3879234efb8e60219f6b6d8f19761cb8\n3c3286722b31c8e2f678c9833bd643c0\n857122dd5f5cb1b0a34f84d89d87830\n3ca37e415fe44ec2ebeb1e6a8111f53\nf530508e27911aadabd4ed5db7667131\nf9b41c5ee5ce8b6fcb8d8c6d4df8143\naa0c8d5c38e8c87f805e3a6c310c990\nf15294a164747178851f4ba6aaedaaa8\n51a0575368d16f4c99e8bf807e902261\n4f54aea89016146f771b0e756a54d849\nb286c9c136784db2af1744fdb1fbe7df\nfb2de79ee3a257eaf8f5708c6c7585cb\n6c19af16f46fa4699b2dd2b9747d7d2e\nbf6674af4ba8b95fa4080573400e0dc9\n7a3abc9f27ffaa0418a6353ea60f11b6\n1e322c9d236ed96d32acbbe2387ce75b\n2d2a1da36b840ecfd49b2e04785f8492\n699a8b91af86f5a782db9fca4b68095\n60697ef538d1372f5bc104fbace43d56\nfa9a37d95fa8c6542beec56b24479ed1\n8cc8499cdf11e9fc1735ea0e092a805a\ne613b3c2006c457ea35a7666f0cfa5bb\neb8da4f4245496c57f1cdfc0a8f38f2e\nac662716b87687be71e364dec61013a6\nf39cc29063a308168466f606a3db18ba\n57f1439f5161b8d366cff95abd9dc80\n3f6e9d27bf0e972b9f42325587eab087\nad5c4651205a59f7fa0f332f678cca2\na1a81e5d0450d463df9c597227d75069\n990aa9dec2223f108bad9bd0c4ab8e3c\nc125ab8675fdc2b03225afab722d9fd2\ndd40743536da78a2bf964fc57f6a7d6d\n9f6c2428e0cd344d157d629c9921fc15\n882aae761370df14786810c22b062a88\nd49a8626a9eb5ac2553bbd6d743ae8f6\n13f46d5ae3e33651efd0188089894554\n4775f35d9b6942081b42cc426459cc26\n26e6dc505f376ceee6597d391ab6fcc1\n5ef8a1aeeb1b25bd63fba60e6c90121a\n39262f1d1eb0678f71428d548481a9cc\na58ef2d9168f9b44de195732ce36834c\n8b6338fa5916b40e7a5d3427f09d950a\nfdcee8d924f3a8404d01f72347a40cbf\n22c24fc303fa5c8c48cef9d4cb5ab8c\n1f5919744e0376315f38797299bc3fc7\n1e83293107d6c3a92cd2160e449d45ae\n390bc0018f132788fcb8d8c6d4df8143\n6f422c48a60cda58472cd9d4266add0f\ne94643bd9c777491d49b2e04785f8492\n41caf27a559755fafcb8d8c6d4df8143\n7a8615c643bc3d96ed6eef8e856a36ea\n5d45d41ee7fea0187cbb0b604dd1148d\n33caad3abdb4f5192d48ab934af26487\na524e5a1d81df32b68b4a15ea963e059\nb5012f398c4e62a330f6e0ede20c4525\n37b0f61c553e0499be27e423fd45ffe7\nff07372af062502af47e57eb62ec59ec\n4c5a9be10106d239b0957d845ac33749\n1d21fef4a67153dab76e29c9c43bc7aa\ncec37bc68adf2a20e6d206b2ed87676\nf4db9c55f72edb36ad0d9196eb691e00\nb158a8e4f45653cecc571cd3cf8f17a1\nc0a0f01bf127b972257cafc2ddee5167\nc1532683707c38b51cce8c25b11ccdd9\n908bfd876def9e43714531f0291497fd\nb2ed672f1d7c2a34664b3b9b23ddfcbc\na957a1304a1fe3f2f78c91c136e5b5f8\na072cd9c2593414031ae8c8ff1eb3d45\n409ff705d837b30ec3c3e425b20b4636\n1a9c1cbf1ca9ca24274623f5a5d0bcdc\ncd389501a749d5b13b080c0097c00a32\n615019f5899e2aee8120bc4dfb819859\ncdf8043d57863c1b17b431cae0dd70ed\n39583310660349282b6168eeac2194de\nae67ee6392fe8ab94e7cb04dd663c825\n24fb5c490856f7bc12b31765ab67b41\n6267ef99cbfaea7741cf86c757faf4f9\ne30444ae7a929b6687d4034dde63c4f7\n4610f7cdf3923b05cea97147b08cd8b\n21ba9de4d311ff31cdb282e42e89414c\n312d6dc78d666dc88a74e38e7d86eecb\n1991d403d8ade0ad338afc540c33f34c\nc603039e59ac33a0ce1bab91cb13240\nd5815f747626cadef912acc8c54e7fc1\n6d7aeaf3c1705cc5fda82f1d3dffb320\n3ab3e07e432b0afb6b1c0c9b30aea3d\n8d93a9b663a6378ef5c0c3f661e90ca2\n57aa536c02ea697b2195f9e636aede6a\n9b1c1def3467c1a7d197f67767b32741\n4fe9a79b382d30fb1735ea0e092a805a\n1efd03d9264973c9f2098a9f7fc86999\n1499133658ea746d713f2e93cbeac35d\n639c2bfefe1bb6af1cce8c25b11ccdd9\n4003077668e23d6c9998b4eb812699dd\n7869e39e4fcaa1b7ab26a588d1ab0ca4\nd7465ce6bfe4b898c98f75a9ff83e3b7\n27910c314eadb1109998b4eb812699dd\n"
  },
  {
    "path": "data/filelists/03691459_test.lst",
    "content": "8c18ef2a9170a8144884161c20b458b0\n7ba65164444ed5be3df08ed7d70af1ee\n710014b815369e1c2bcea2cd4cc7b042\n3e21834bd08c078963de47aaa413f122\n767f4a63260c8419e279011f622f20b0\nbae089bd1855bcdcfa9922db9b6aab31\n4b29063d6237b062eabe53d90550c4a6\n2335c268bbd05a5f230584014222e685\n2a6f78d39d66f6171bd445ab4c056b71\n8b73786c112d262d4852385de47501f6\n7e63f06b3c48fadfd6d49cce41472b6e\nb0f209faa41b8f0879da6431b0766445\n2f4e9cc37c3bf5f1fdd84f4a160b8854\n460d5cc9d09ec59eb34ed614d2670aca\naf7aded6c26d2b119d3f10ce46ef328c\n1b31f250deb7e124fae32a4a57dfb78\n3b3f46308f2ad119988b934ce1e16bb7\n5f3436d8bb1620f4617146ea341ca085\nf6d4918c7dd190447f45370489ca3156\n7578b2e27851b989a374ee921da07aaa\n300d579cb4dea9338cbc76a30015552a\n2034f891fe2d1e79bb51f8b36601764d\nf0d27525fa81798d982acd4b5c0a58b0\naede81c0789358891ae45cdab702386a\n8675e32f2e122ea5c13bcab6e4ecd7e4\n17c472a6899c92efcf39ad4726172e1d\nac951c58cd826af6a89585af9e32f3d7\n35982cb980f6916c2633ff66beb9cf31\n132257fddbebc02ff14235268cca03a3\n1e82e94cf9f6bda8fe893ed5dfb6041d\n1301670e3ddb72b099284d844aba7576\n4793c0b78701e47dd529f6660fe10a17\n33d9a210df86a437cb3c1170309e6b12\n6be15f4f6dd64490d747b49524a1246e\n85eb14c504232ad1bb36a678453013a7\nf0e562c21dfcaaa1d1936ff8c5fb2337\n2aad0ff91e947e64baf402ca36cbac3b\n57b8d08d37d835995d0dded52efeb4fd\nc462e3b75f570a3b42227a2ba4dff5ab\n8dfa9921e51e0fa3f99860cd321d6c67\n10e079ff34f99777bcb3fc1376c3a85d\na1d1f232168607c81dd4da6e97c175c2\n60575cff5db034c621e6f308016fab7\n5da2a1ae6ec64155dc7dfac1f2c9f0d4\ncc88df1c3cfac12a99db62650613bd48\n622a9789d1eaf6e3cf56355417e88d12\n92039123d08d8ad6adbfb30d8d1b297e\n4c43241d7b30eee379e6d136097a1329\n76007907d4e0ae438c2ccb23eb70d81c\n4383b2bbce729356a9c2f34ef56404ef\n9a94af940a768aee5865ac92cffc2982\n8c7c72599c6bbafc8323fc17a8352c3d\n2c5dde3b43f0b0fc5afcf0aaed5d73d0\n1445e30aa2d3212db6a78dbbcf2e408\nd7233f2190432638d747b49524a1246e\n54e61267b88174967bc8772c5c1a0c19\nd14e6214d7dd4ed62d563c85edb49108\n596f7a94c6d1443870896ebcdb67d8d7\na6453864512f46dd747b49524a1246e\n5c4964d7c42cf84bdd9ef3991bf7600e\n84adc06696eea1774a2b8524bd5c98\n3b01bd24d47245289159eab9ccaa73ce\ne1be0b02973011aa4c5341ee07f41676\nfa2cf860e277919a7445d25f394949d0\nff9c1754252b9ebf73c7253ec9acd58b\n2f7b5ea50c09d928b23f3e90fedcfa3\n2325005b09d12b2585d624cfcd9a37a7\n2240cfeefea8b69fb90623b288d5691f\n496aea93dd8f7af1f3f18c4c348425c1\n9b4d3ead5066a6c5844e9c5caa6d29c6\n2daca96a8e202949c67b8955be358784\nfd11b075bb1df4b01f1c09aefb59ebea\nd09f0e2e33452a739d3f10ce46ef328c\n716d1d38cc0bcdc8c9d5b08933b9e0c1\n400fb89ed6cc3d2bf1acfa9a5200e941\naf39a67dea9ff78bf46f716b2b22b550\n1742419bf5a54be3e1a894502fdbf97b\n4d276aacd5e4c510de7da340cde8d034\nc8018ed73c5f4087eb927391bdd6c8e8\n6ab218aba38bdada2268dda5c324173f\ncfdd69078d7752298b54295fac36ff1b\nfff40d102ca88fdb52648dc23b25b1d\n5e6d30de53afebe2fb0a4dd466ef3d66\nfe977bebc78501995996c3a82deb78d6\n86f45d4bb1f5f8597a040c8bcae232df\n8629dacee484080c7ad11885dccb6f43\n5584bebdc80ecb42c9d5b08933b9e0c1\ncf0da3cd69392999da2140846c49e200\nbb570a28a0e81a51d747b49524a1246e\n93c5159d17de18f02899849b3f61c3c5\n3636ebcd2e5568616bb15da9e307a14\n6341662056860c3e225f3f0d46b4fca3\n6ef86253eb81e4d418200338a176d705\n48bf5d4693bb7ecfb4bf1edf2dd92af\nf6954ca2e4c2b03c67b2ae8c967fcba0\n7a7193771ada6796a1b0d9ebe362f8f3\nef71576ad5262c4ef398d0c5832df00e\nb859938280d0c7346583871b5c274818\n913eb13149ceb59a75a3010d3ada28ba\n68393fdf9730d1c86e95461e6c2993ce\n4c5b7420078b23b098935bd14e27f0a5\nea95cdbe8f4114107354c46aadb2b2fd\n1334b56706bddaf4451f278fffaaebae\nd6f0a0ca6446eab0c0b5947ffe18a468\n95c24657d2ac0469a3cd3bc808c81de5\n54fadd7a6c5c04d752560296120d4cb\nb93169c2360aa02ea14443313213c384\n1788d15f49a57570a0402637f097180\n8df018bf733ff01cf00aae52edb0b7b\nb7285ba6fc6628a1a43ada367b02a4fb\n42fe49780429d25d1de55fee5ac2c5c2\n81b711a75b8781956faee4308b49b522\n405db2cef5b41756fa16d3c3138134ae\ned981b60651d5ad8265d1076b4b6c5c\necd9a96ebfd0caf6d8f9dd7647048a0c\n8aea25f1090e419c9f78b1e1185445c4\n3c467fca7449a857a2b4d33761839e86\nf37f4ef72fd0204d839a84b4ae4862d3\n39ade62ad13e3c79206861ce7df4037f\n90120bf8e84315de6873d49607c1f87\n3cbeb01fae7fb6ec7238b5c2712646b7\na288498f21acdedb2a65278501cfbe7\n19a8736130ef822b93dcf5e22ecc3f5e\n10d03876d94ec5f4e7670ea63e6cabfd\nc2024c0fa0906fc724abfaa350249967\nc3733b26c3fa23ce2633ff66beb9cf31\n374df728f54322363b0edb55efd49670\n7b7904e3d5ac33a65afb688fc9d0c0\n945805d18c0de73ae3e30e20ce3a5bf5\n71b4fb2d151a9d70fb0a4dd466ef3d66\n6d28e2683df5f013c9d5b08933b9e0c1\n60d58e77382f081a69d22ff82177f51b\nd233b0a03f171cef47e72126a394af4d\n6592d33f84263ef435cd53a06b1d2317\n16ea8ecabd3f373bdef52d9b75805a83\n85e8d20d51ce13cc7fbc060fd555478\n64aed24bbb7542c6afac285245c66df0\n84cabb92bca7c3fdf2198539cbd3b69c\n451f3d4fd10530b9d5a56ecdb5a1cd39\n7263b5bed1c020d3fd8284eaee3b0fd\nfd421313164e2d7f1be6fffd725195b9\n164bf28ed57e29a6293982b5acb5446c\nac27fec4b0460b00318a4feb4ab5fd2b\nfb60dd3c36439d836d74ed7e4da4b6ec\n6450e70e275a80e0e39b302b17f4c82d\n1124d162420a75232633ff66beb9cf31\n91f570ca6702fe4abd1cba733b111584\nfae47d104b9111aafd949ebbd292d47\n1152c16d1081c32a561e8b31a1141890\n7599541dac4a89ada1efd4f01acbedc\na8f3e98220f34623b3d8c1107f6ae528\nc2bf199ce5a022a1126d510cb8dd3d9e\n7e359607ecf460f399372ee1e6dff278\n48c21ec6f9623c997ededbc2b9b4362a\n440745e23b80c41f398d0c5832df00e\n2a59accd6ff9b5265c38e15d823f1476\nfa09acded526a0105b1433436fd82800\n7d2bd4d349ae34a2fcefa74f1d0bc6e6\nf289aadb7cdf59daa62fb160d742c45\n9a017f96829a34a2b17f090763e2921e\ncb356bbfb74abea2c6573f6ede3fd543\n560a626f93c664ff9069c2d361390698\n99dce9c359b0bf4afb33d0031815b3e6\n2b3e7da84b849a84d3dbdb797d2f78b5\n40b492e1a0fb0860e2f05bd11e1d1c68\n9076b1b9e23c7446d747b49524a1246e\n3adf396785cf9dee7bbfac568080cdbc\n60765697073cc44cec7e019402cb7bad\nbdfa20e11d204ecd35cd53a06b1d2317\na3f14846404245d5bbbcb091dd094e5f\n10d16ee9c9402e6df2e5d34c7b677bc4\n21612bf3e866a8831d6b14cb827cdf85\n3972d44065257859c0b45c582c6ed736\nae4bcb4baca763c24521562865ab775e\n2ab4f9bbdc17d9cd618e9d35559b7aa\n970ada2dffb5ce49a663d9823c133130\nb04281aa2c134623cb3c1170309e6b12\naed74c2fb80bf363f5776cc601097c0a\n95db5c34357e2a81bbb94390080b5b78\n15e847b20d22d56cd288bc0586930768\n4e3669ef40de1b3b465b32805167c435\n66baf7b7b4ce43d7e50f6aaad9a07bc\nb70c600b20614f4c690135fb845b8de1\nfb86950be1b0ced7760a6b24be218cf3\nb40b4cbf6309c3519fa340262d231abd\n1ba39460a5e31c722a813544190dbe4a\n8b7afc9b056307f3d3ba59ac5475adf4\nca052c8db0c94fd345189af3887d3c51\n5ea3d1068a624c1da91bbba4742a1643\n72c5cab12c0ddb22a0fd8d18f37cdbfc\nf452418d7be7e78eeb752889d5199f9f\n923b7f0a4bf93c4fb66814b45dc64bc9\n3187862d922b0ce96583871b5c274818\nacbda0d16acd03329d4b859036b8707c\na34c80e1f6175711c9d5b08933b9e0c1\nb521957294cbb170c7c1bdfb41b9d2d\n2a8345bd5d50456d8db1a0ee98c45ee7\nc1ad8720fcc7246a1fb294203c64a4b3\n2ae8239afdabc2baaf365ec12406f363\n8bd1d73922ebc098627a66821130f814\n8a3edcc398f34fe534b2581df0f941a1\n3fc0513ac3bf11c873d25f4e2e3775f1\n3a4950ac89429ff5b396c6d231dec74d\n17c5950c89528703225f3f0d46b4fca3\nffd168e54f722339ef94793a67b4c5c0\ndd3f884d9b5b3c0de7b7e97e5332a9cf\na6216e99923da6988947789ccf4faf06\nafcd98e6a91b3d16569e2e0d2caa039\nda9c218b79205d489c4dd878242c44b7\ndcf84867f92cef75a9c2f34ef56404ef\n28b91f5ca7e3d174fb0a4dd466ef3d66\n6fcb50de7df5381835cd53a06b1d2317\nbb1b387c674fdc4750577cf04f3bf74a\ne750bda061e86402cf39ad4726172e1d\n7fc23785c19991e4e180a1a604561d3b\n64ba67a67d83811c2b688d771932c023\n9fbb43c7437c1bb8a2ec0446d32ce69\nff4bc6c329ec7bf8a0eebc16d3afb516\nfbb7610643dae4a34c5341ee07f41676\n800a0a91308845b4519f3f3e6cd6d1a6\naed97e60cd2802ce7ffb47acd56f396b\n26363bb293e6c9e499db62650613bd48\nf000edc1cfdeda11bee0494534c13f8c\nfb4c855848345ecd3e738e11bd8803f8\n37758713e7a31d1710b84d6f34c2f2e1\nafe96f3cf256cbac81a6b6721af23c58\n5336a4698616726725a4212543dabaf9\n8d55d634810b52f176f6deb1c78dfee8\n40511e6769c91cbcd3dbdb797d2f78b5\n105d0802d1ee0430bba5c9b6de65a038\n79c3e029d9ffbccbe58eb6a4fe5a2344\ne71f2c0e0c760ae98139dd63d55edc44\nf663176a43096b35a43ada367b02a4fb\n1c25b626dddfc36a28d267d044b54402\n548f94cd0c5fba501148996e35417db6\na82329a937432afe8d28f674ed08c521\n542bc1ef866548c3d24fc75b2f944a91\n80109bf3b6904d577edd21390c628646\n431892f5456a2b9ab96497d8dce09d96\nb7a6e59fe546d81cdb2e05daba43d6f\n5dd29010575d36ea73e1b2d018c0512\nf2e521a8d08e2a2f20363e2561dd589a\nbe83d48fc695dca62b4e8a84a498fb09\nbe5e0dbd5a8a589ca04f967bd94443cb\n92e409aa16d2d673b5203226c26c59ad\n4a1ffed169f04f5fd084cd4069686980\n75c408e3ce113c84d084cd4069686980\n96d6d519784e40c0c066b9622c005c53\n984d064e7e0310f54cb67f35c09e50ad\n84e6e1fb56eb60e918d385624fdfc6d0\na2dc5748b523db72bbbcb091dd094e5f\n46bd2ce6ca3439c9c2687184da14e3dc\nf9a615ecebfe7ae1b27175774c9e33e9\n8d7d7dbf8f0c0f7673e1b2d018c0512\nb754df4013a71f6873e1b2d018c0512\nb2af20dc171d40e4d4e62d99c536bbaf\n2d1302ed4d4f43ca73e1b2d018c0512\nd087ad474122e24d887e8faf8f33b0c5\n5578446e4a13451a6c7c9dba2abc9f8b\n94abce2eb2c9567da7729f9969cb563e\n27046cee7ae745e6d207241113bee327\nc75c5ae81c1fd498c066b9622c005c53\n57412ca31eeb15bf75fa5879e0c49e00\nbc11fa1bae19a90ad74a70b98d3225c0\n217733447f1ec818c066b9622c005c53\nd06efc46aa999fa21574d21c0c95092f\nb209054be0f71cfdf398d0c5832df00e\n115115104976edfdc066b9622c005c53\ne41aab211af3f84673e1b2d018c0512\n2d53b9798c7ffe7a6e55c6c7c80df9dd\n485a778cb7416a59e810658c16fad24a\n83dea2f2561fc2fbe9364d19fabb5f00\nec0a8e2fa00a746dfe74514a9fcabaf8\n1ca17d2cadd47286c066b9622c005c53\nf7a45911d01fe4a961775b840d882da9\nb0feef9f599d41cbb3d8c1107f6ae528\nd2426b884d1108e8bdc8d5970acdf989\n39554167163a7cc3f881bbcfcc456ec\ned06c596dd9b9cf3dc99793862c889e0\n68bbfac3232f153c6ecea800f06e81d\ncfc38353ff8392e73a7dda43d8d95517\na31ac0bd8915d99631c992914b89bc52\n65dfccb2d5e47538a24143eec482cd09\nc51823c76ebc7f6e464e6423c0222f3b\nc398c35b48c31188c73a379f25dda815\nebe84e8ccc8b5f3fa817854e3b5b5439\n1ac22719af776fcea2626afcc786d93\ne2c1e8958295f84459fca7a6b28640d3\nd3a872834cd0aa94d77ea5e1afa5bfe6\nc15fdc911c54f4cb62c440075d5ed193\n1bf06b16e59e482c238ad1274d829e68\n73c40350f07efb92d207241113bee327\nb3f5d033d3fed8e9d207241113bee327\ne47b83b94a1956ad7a16fcc398700938\n8e25a8e0de9ff545bf1411bc6f3b308\nb4d4338a36711ccdb113389b677f57ff\n4f152b01f056d0c35363d5176df02e54\neadad629c581c28c6b424c689f1d711a\n95d01543b46b5e43f398d0c5832df00e\nb1fa05d508d9ed81753a010738a20397\n88ae9338c167e8d5238ad1274d829e68\n90e3a0488b8ff079d207241113bee327\n108316842b17210394a42262667addbc\n29c140fb4eba078c7909eb62c64c0070\ne2dc092a4ef62c09d207241113bee327\n64ebe165fa668ad4abbfc2108a5a7885\n4468a5e60a6fedc086bb0379a61a0978\n52e827d2f969a2b61f2b6130e0fe93a6\n3ee30326a3bdf219ec2ca8479368108a\n6e6b4d2603930dfd4fc88114be3a6b6f\nd17192339d28af3234140f5d5f70bb2c\n38007ed3e5ce40ab13dd6eafe1477be1\n123f9066606d80206454c2aa07613033\na4ffce648faf8349e651a075b3dd0597\n1c5c9d780dffb5c2599d9c8430d600ff\nd69d5cf7868651effd28950562697757\n221a981adf503875e17b9e33c097dbff\n4e06e2b59a83bb6229cd1f0bcc30f82c\ncd451b74570bd84f44dc88afcdcd380\ncf7a2cb0c487f3a0bd1cba733b111584\n"
  },
  {
    "path": "data/filelists/03691459_train.lst",
    "content": "b10f7a407b4a3722296ecd3bbf65f1a3\n48a2091454502770408d050f12518231\na88fabb4286706afbb9b205a4c97698a\nc3fbe6332f413bd2bddb05cb83a4378c\n70ee226bddd4005836f19668fecae7e8\ne314110b72e1d310dae4b8efbd2ae014\n88928666d9c3939dac55321e2e1cf09\n2a77ba363947f4f38a9641b35ef045a\n4eceec9a386a21ef77818a0572bf1777\ne12178cbc10606bbb48374d47d81a219\n6abdfb1ca4d076a09c4dd878242c44b7\n73a695a6323e1d38eb5f0682bcf1d404\ne9723b5243412b462a8eeb2a1f362462\n49e47ec81395e290d3e5b33a5e1cb23e\nc7b58eb662984d701df2664cb33da9b9\n91b781b40d32b74dc491effd0ae881ea\nae66dc3ecd9c8932fc459988e6a7eba7\n96904b01dbfa0d0c5865090ad6b0dfd2\n916d2e621caefe3a1a4345b067aab43c\nd2553e5fc4f1527cfeae521e94848af6\ned0c530e245dfdb269d48411e34c9daa\n9dcf9b3c53f1cb135afcf0aaed5d73d0\n8834ec44bb6d291490146e2a0489a257\n774214a85b87204c33dbc1ea1716bde\n73c76faf92402a9183247f812f2eaa97\nb06106540932feefbb9b205a4c97698a\nbb7dc95eb35acc8bfd7a7d6380a6ae94\nbfce87b0ea79c8aa776400d171cf9dfa\nf8aa418d093076c4c194eaff7ea54233\nacc5b71d898d510f1ef58b31c4ba0d15\n1e52b6d474a08635c10555abb2efb430\n7aba5bb94270d994451485c22fb285cd\nc4ca7f58c6144e1416eb1b6d0ba9133c\ne4edc21690f623a35587d8c9be86464a\na543d9e58d4501422a9eb0f146e94477\nddfa1daa59d5bf2676c2a9de5c96f76\n19b900dfc658cdcbd4b4ae2ff4c58b57\n18abbf4da8320e69438aef443c33bffd\nca3d4a62e7a851816463df620b7b4cbc\ne02649d9d5ee2f26d07c55cf995503e\nee2d8d72b555df84ad5d27efc990ebb2\n2750caf7565977341ef58b31c4ba0d15\n403649d8cf6b019d5c01f9a624be205a\n58db9d793ce3c2ceb0109464688ee1f9\n35fa721c71ae04c1472cc88b92e0d72c\n87a0dac4a3c483de6671a3cd2be21041\nc98654c348ccf6baed1d3c8863995334\nee962ab0dbd24bcef78c4384b551bb5e\n1e8aea643deed7cc94c70e7fd262be3\nd337b40eca9f87259fd3da8ff7252b25\n80000b93ffb0ab8ae47833b310955a9f\n46ec6741dbbe69bdbc052c28a9e28ccd\n4f42950d660bffcdcdd18be3aeb2d66e\n5820d7ef5c9942e6d49b96b9f2811c7d\n337db7fe63aee7512d97367ba974aca3\ndbe86be505750b8d9c92e8251d55352d\n6d24eaf8aa3c362fdb6f3ca49e992ad8\n2c64384906f809f09e9eb484700b40ce\n492eaa948ae2f795a6d5deb42d3af608\n9ec130a3ef44b7a1e47833b310955a9f\nf9250e29e640eff9a5f99ba0b2469cd9\nf57b269b91e369f07b646fca2237eb6\nb6210936b5d1be007670e02527d78e8d\n5f9d75a41d264b9bf4fd8600b18b879c\nd05deb21bcfffb07fac7130d270bddce\n55e58eac4a2e7f4c24abfaa350249967\nec1b85abce89d680a7bc6032416bc8ae\ne8885d12901ed5aaa7d0cc9b15400f65\n4014de6b20178cb92633ff66beb9cf31\n9916643790d32d0dc4529c39a8e542cb\n1a4ec387ea6820345778775dfd5ca46a\n112deef454bb8345c6bd342792702e80\n6575a80a0daca56d1b37f37a4873fcf0\n5679f86d9eb0bd1ed4ab0eed66631cfe\n5b9b77ad6ce283a398e4bc44d45a32e\nfcd642cc82a4417848db103415b9e9da\n38f418f2d64692df63ee8a34069b7c5\n67e18c3be264e30b636095aedba53117\n3738550fa707533073312da09abb660e\nbc3e89ef012a5904688bf677a786d0bc\n3c8dd5506a17628fa43ada367b02a4fb\n5e320dffc984b6b5769dec5ec0157054\n6e97134cd7dc3067c24c52be855c1525\ne8dd60afd061fb273ad55e05c29c23ee\ndc8d31790da3b1c6c06fb481fc51ebd6\nb8b54d43aabf84a67aec59a4d1722658\n81eafc16db11da806583871b5c274818\n53856db6d2a2873c80ce1b5d66a0b782\n40169512586f3b6f77964cc933a9a0ba\n8c23967793e62320825138352acfcb46\n35196460460f022a105260687f2b18b7\nb16d2f432bb57fc76dd78e11c421d52c\n427edc7774b50232a789103b1a0f3e38\nd76360da1411848ace1db673cf70420f\n8310e1e0a80ae09967964ba700cd97f5\nee6445b3657504053839b8b68c69081c\ne8ffa936875c7b3a7ffffd2e0fcbbf0a\nb8b17a4a9b8d0d18b1561629b743a85\n3b55f9d0fecbc561de9a8c37f2997f\n1a14b00578f19b1f5c38e15d823f1476\n2686bb573a9bae79d34aabb2f31dae9e\n2e44c37aaae8052e587dcec4a739e277\n9a91398e66a8c980ebc29484102f14e3\nb638ef590025961f5adfd0d9df77c16d\ne82622f52b46e31df4e3932877a139f0\n2af99551fe3644504798316286c07255\n707f0e44e935dd55edfd593a4f114036\nfe13f67712bc5e4a1b02cde7e81f0fc3\nf657a906298e9151e3178ebc750d175\n8a3b591b72d0f5326d9bd07411a71e3\nbeab6a006f44f33de19807d50c8d841b\n58c7ab29b2cb73171e652fa812161367\n3fa5d9e396596d36f7d10596716a94c9\ndd05c61250149ba5d49b96b9f2811c7d\nfbdfa353d97d91fc719d3f85e0c9919f\nadd914368a6ca448732bda87f2718525\n1686fdd7258aa16383247f812f2eaa97\na10f7be978f78f085e2bf91b698938de\n5944386805308443cdb1aa1514be92ab\na6cd2be54bb9297d53c8f7a04cc7057b\n32cf86c686fe9b1974828baacbf242e3\n91f4c25e1e325683e7ac477bac77def9\n6d755a3d6d0f265d77ea5e1afa5bfe6\na6cc92fec1071df0fb2034808cbff90e\ne031b24fd58c84c12633ff66beb9cf31\nabd3b55d14db9b3c8db1a0ee98c45ee7\n7ab21928504c8f5983247f812f2eaa97\n4d165a6accfad3d36f18f54fab5ec8d\n88eefee684586cd3fd56d9106430c3fe\nbb3667b3a72b0bcbad6ba00d22308a6c\n60474fda23d64ef0debcce788b4a424f\ne767a0e8df4e41f4b3b44ad99a214777\n1e3da9e2f274b6a89585fee86900e65c\neb2545337b85fb987695b38431695f3\n21e46ca2f8bbd4df71187cb9cc8e1a\n4294d3cc2e413bafe45b40770dd7ed5c\n21127c6f6f4a28fd4bbad62bb35c0a72\n6eecf81ba7508617cee3603bd2c54843\n8671e50787f3486e1ad88f716ea80910\nb1112f7597347113892a11caedd0d90c\n624046a3a0cba1b6c70985f30f25f8eb\n4949c92a3f0d0946f536dbb8b34a9553\nd956f40d4b3cf48f7889725d46ad23\n6803540650949be89c4081063e213a15\n50b1f4e5a130dafbb5b1048c702c9b77\n5eb44c2aa29844391f9f3ce366e030fb\n348d289b6a08e7b44884161c20b458b0\n6d6fef896f1196416526bbcfb9a38489\na0f57b3d2c2ff2ee2666ee81c3e6ae4f\nefb33523a6be2e105a31d91ec836a511\n2dd5a69034a03d267aec59a4d1722658\n5b931476c24abb5535b5e203791a802f\n5755d5aae08a8f2dd9c568a52c35ec71\nbd76dee31cdad0f0bb62a53e25c6d701\n2cf41211ffafa4ea1f9f3ce366e030fb\nc805f5a262130e6cb4f6b6fae7a188ad\na159a9bfbe200e651ad88f716ea80910\ndc73b4f97b493d18176ac8585fbd7fcc\n6b9dd73a65dd50a71ad88f716ea80910\n6ff24c5a5003a1a5bf12d1e914fa62b\n519b0f5581c72a25db30e42459dcb06f\n414fac13be35799d19077496eff9d4b9\n5394ceacb131b5e79d7aee0f8e107545\nd80f344b9de3e280610652dddb029059\n28c30025290a56a689296e9c8a412e3b\n3db03a00661e6113f2a29b1958708a7f\n62021776119f573bc7c51d4ea74651a7\nc55edafad476d908d17058acd487e2f1\n36526654949a904b2bf4f773fe0e622\n47d3fbf37d73e0bfb9b1918ad0534ba6\nb4e7253cb9ef78852b75817a0faaa5a0\na55295b8538238ad6ab2ad957c1db573\nada2311f4edda41478108236e982c2f2\n986bd3ba96016425cc0d3a65104f5927\n3b911043f7cea0639f2401cb9e9e4a2\nacf4daa2ed704ef36a27540a4ffd1b08\n22d5aa5c6a173d31b59e9758ae7f41a7\n40efb91680a2a39476ec75ad1a6d21e9\na47b1e6d492bb68e8dcbd53cc631ab\n1f929c099da1f3d890824251c0961f3\nc280153b72c8e8ff571d223b2b8e4a24\n3dd9222c775b1779239fd9d02eb7da4e\nb8410a2c19a50aa88b04a17db360913\n739f89b772ccf495b9451ae41e1d9ea4\n460f07680e1d50866f6dffbb7673354d\n388ae2b6420bfae26cde9ab9486e09f0\n60858213ecdb37dcb7a0c56c5d82c3cd\n7488e7b4b7174ca73b2680579dc5dcf5\n209086558286d4621ad88f716ea80910\n119fc0c18388a2a2e338ca8c90019f12\ne11cde2df1c508f7e098c9e597ef1d0\n982f52d3117411a37ec3f7c14c03a92c\n375b903579b795abe3917427ea7a0e20\n9d180f7f43dff3d51ec48bc3c478566d\n78d16c052215997b925c6624a25951b5\n119d64f6de33ed4093eb0b4dff044a09\n4f53602d946e024af7617b7ba3f8e259\n5ec12b34a69e34d9c85671f86a50354e\nb92c1ad2943ec29168faa7730065e439\na29485bfe6a688f0ce3ab2c820261e42\n9a35e159b52a7b1897bc8a58bf164429\n76cb5a9b7b8dbea99b590f104a4a4c1d\n5ebf73b0ef33aac5451319990092e2bd\n5ea9cb9068520d3bac80666502f7b62e\ndfc293d76992ed9656fd7f904d2e0c\n9f43d3116f4162fdce029fab54b6cfbd\ncefb560ac4ca8b38a046bbac53886364\ne7560ac665c6fedc7d54ddaedba43004\n5a66a86082033c79a3acdfe62acaaf8d\n61add6842a1dc131b59e9758ae7f41a7\n999e0646b798f67a5a60f8212273313d\n213d39983b0a865d1369827a16f97392\ndfe7f79a9a4279d09596b23e90d45a7\n95eb96eef8f0e3a7ed10ef1927ebd15\nc94dfdebffb371022b75817a0faaa5a0\n831f70cfa81a12ba7b440c5df8efc309\n6577288320db747cea37255d6341d07d\naf4dd70becae7293efcf7226d1117163\na58fe03c817fd0311ad88f716ea80910\n9e2230b0d4d8d33e4ba7340387a30ad3\n30bf1d16fb6c28fefa70f8d6bbdfb0f4\naf4a2a3b3e3510bad49b96b9f2811c7d\n199ce49a7db017107a964f742d0e5820\ne6e7c3e1b887d2a1751b29c8fc6f20c\nf904f64f961e9cddcd3e44ab53ae1e92\n4d8420f146df7c37ec2dd234c32c102\n9b7001c69e6f1978bf518c96c02a8c5f\n98cff6064749a5f3e746404352385716\n8a8f13245888b8a1411171a7db2d5342\n1071f82bd0d6a23935cd53a06b1d2317\n58cdb18878bf9e42d00d418bbce73381\n776b1ceb53c8ca881ef58b31c4ba0d15\n65688eeafdf06f8752e2d18963a75b4d\n73a337691b4015ff1ef58b31c4ba0d15\n8150d4e919381c64e1ecc02d6acf021b\nd5f20697fdea1b20fbc9490485dff00c\n6070b86ba88f51a52d48173107aeaaf8\n196d5295dc5c62d513bedd75622dc40a\nf4290921bda21901caf9cf929ed6f71c\n19ec27b0dc5e478e2a9eb0f146e94477\nb18b9f87117cbc94c274436d9bc22f7d\n7e105d770e297ee43dd0d6160c4dfd18\n15fb39da1ab90994a9504db65c138da5\nf2bb5c899ac2de670eb1591edd539b\n6995acbcca6f9167f5e02330ef435fa\n464da0c0df4ed3c0dfdc04b8b8434e84\n343678f49806ebaef09c0ee854308ef3\n22fdef9bef225163d747b49524a1246e\n36206fcd5fd8821996ee15847b17fe3b\nd088d0b4cbf1d8447b041fd2144f3532\nfa6e17f7f928e8a44b2f94f4017fbbbb\nf6cccbb93c35fcaed49b96b9f2811c7d\n9080b08716a2be41e47833b310955a9f\n16eec6c601ae44c06299da17267bf77\n9d62c46fc3fd343d1f9f3ce366e030fb\nb8b1643518382596aa623a443910bb58\n87f10613128f3e6198e0c75f11f82c6\n8a5cdc3bf1ed6226b7b1e717b48d88bf\n6bef36ab570225cae7d74840e6097218\na0f84cab1fa73358078e785d09667d5\n18602a0608af58023b80bd981244df4c\n5e9e7b6cd01eb0edbdeac9f0a8ab72fc\n1eb6ae90ea03673ee792f9d89b97c271\nc37c230e15f8c561ce029fab54b6cfbd\n9165f1681f4c5df6f63ee8a34069b7c5\n7b7d7bc551ca91b3a03d35fe89e56e4c\n9403368e6a0bebf5664c61db46dc2c9e\nf88ff1c46ccace6d5392678120123c42\n865356c79a595c3fd3c3c7b74c67a723\n3855f5027ab422fae6ee52444763d57c\n52e710a9bb750e3235cd53a06b1d2317\n853f3c53280aa44fb63369d5dd85d25\nebbb434aba6d7c271ad88f716ea80910\n65c24305578ee500dce0005a7422ebaf\n3aa8876d86cf481d3fd2d4d929afab9\nb987e53822ad2809c7e1c32ca6dfa00d\n96ff36cb731b29a61ad88f716ea80910\nfba117b56b6829d0cbd549969c6fba9f\nfb6bb656468452fb22d1a40e420084a6\n3b63777e658e7137f36ecf951968a8b0\n438dba79401818884987b3f5f9a53cef\n2e530fca4ce161902b12aea3a74e3599\naff81ceb0788c2c2d77f9c6ccbaf6fcc\n8296f03cef18cac011cabb4938bfaf4d\naed2ee05cf37c85c9a8c31231dd99d82\n158f8a4ceaa281ab2bf4f773fe0e622\n16e3c79113685e52203eacdbee49fa8e\n1297c443d9a147ed9d783559814f4705\nd23b86065834982bdc99793862c889e0\nca9ca5c5dbc82019e6bc953d57dcc636\nad2e92448857e1cc6ad08aa387990063\nada71fe1283154ccdd70fcdaf3665b80\nb00c5ddc2efe42eea64e5c46abb30c70\nf1d170b03b23a3139cdd3031da0f98f5\n533582fec17b538e60e1d7e27755edc1\nc4733a08e1fc82373f48f08f97da0e7c\n601d696b56ed35a3b4f9aaea3b860d10\n4f228d116af6e6ad88a3e0e92891ad5\nd3e279ab7bb0dcbb85d9d97241397921\n1d4bb07ac73996182339c28050e32573\n9a8a760dd2094921bb476b1cb791329b\n17ba9b90304be1b4ebe67d9b32c3ddf8\n6c1ab06a1ae2471e86bb0379a61a0978\n9c5a473824505151fdd0cc0c1a7bf8f5\n61a4c1b213e7eb2b2633ff66beb9cf31\n14e608a76c6b77bdf6045e4ebc9df52f\nfaeb2f5501c8618ae47833b310955a9f\n20ac1211f88a8a1878396b03f57f644c\n3c71e2ce15ec92e9c8ae2f680beb7e46\n59ed437f426da7c8c3eb2e07e7561a08\nb2ed74172242cd805b2ae1f253050025\naaf32dcc3d51cdfe81757e1914c08a9b\nc3d845c1fe644b39b6ab6d583025c7a1\n513775c0ca44462d912b963d265d5e8\nd4fa4988db7f2eb477818a0572bf1777\n68d5652dfb91b82fa2b4280235a76885\n3d18b9cbc81bd83b83247f812f2eaa97\n49c6597ddbc1196be50209c399f9eaed\n3490844946e68402e47833b310955a9f\n5028625facbf77991a622b6f91cfddf\ne796a74db4708efcf115c1f523ea8464\n9a37a34c652c33d37b46c73cad9e78ec\ndbb3db217511d9cbfb906a2c84fd375f\nfc6066741f5b60e5280e0c1e89a63998\na1118bb5b6afd77e6f11d65f7a59b6f5\n3a0747975c07896f1ad88f716ea80910\n4e68ac6cecd91de23d91ae2b92426394\nda9317e5776ed22b732bda87f2718525\nc216e0b5470ec21f6ca2b6e5474aad11\n9cb881bfcd65686176d485609557b1d2\n6d070eaa65ffa57193fef5a7dc080ac7\nc0de25758444d71f77818a0572bf1777\nc7d423c4d63ae4dfa5bf0df4639be0b0\n56e2ab8ad78040432b3bd152980e4b5a\ncc6ebcef8d2e674690146e2a0489a257\nd027e01fdb3830687ffb47acd56f396b\neb8f035d56539657f90555a83c8826b\n37325d57c8ea891ad77ea5e1afa5bfe6\n5000f99de4ae981bc52c9abdcf87548e\n7f1be3e7b6adeeae9bb399e812556da2\n9821d2e9018233f665a0f3090522e03c\neae023e4c609a77799234ad1a4f88718\nba56fb3205a34768d4b4ae2ff4c58b57\nb14b479cf64c7d9ad77ea5e1afa5bfe6\ndd57cef71e09d11121572f6a2d968d88\n9b8512f0cb1fad4e73e1b2d018c0512\n8c2bfce4c190934da98a11883c15abf\na551777c3b35c06f43f491729931f44\n46f25e8462258a85a398a0556683e6e3\n1ba6735cd32d907ad493bfe20f94b6ab\n2dfc635b5ea197bbb611871e114769d9\n39318878f6e98ed2150eaf7a4ddb8bec\n6922e97ab45e4e47b59e9758ae7f41a7\n44cdc1204fa555be2633ff66beb9cf31\nb5a2b8202014ae157a3d98bc650d077e\nd1274fdcd4f8a611fe10244ee697dc96\n4583734434ae5842a820191310c9bacc\ndf8afdea84c72cd5c3dcb7e0e318dce1\nb53eaf891eccce82a4df8e9a50b4aeaf\na5e412770440524b92981997d5df910d\nec9938becbd706dc8dcc38f589890f0\nc3661475a6b1f7bcfbe246021081638e\n70acca9ae753b952c71de83a48ed3076\n3609604595f025801f9f3ce366e030fb\n481d17e1ab933142b868767ca39f1cf9\n969512b0adee661679c6a0f7677e9555\n704d0b362588638aa249f8489bc060dd\n16e0041bffa976462d563c85edb49108\n775f3b78e226f125b21450114b9ae3a\ne3a37b904381c61a46407779dbd69b2d\nbe277cf919c1467dfc1c2fb0640247ec\nb43daefea1c1e5a5b8cf54556d95458\nb8d62dc24152a3463d91ae2b92426394\n6152f977e3cf8ccae47833b310955a9f\nbc547d63373a98997dc4f6934317af74\n245ed4407d4cead6b9c1ae865c9193ec\n4902b88bb0834522ea9b57bdefcbc9bf\na1c80145373d98837dc4f6934317af74\nd62a7c344c62875f9a0cc1a6d8beba8f\nacbcfec18a26c4583247f812f2eaa97\nc91f926711d5e8261d485f425cc21556\n91ae8db92f3dd88b55a8aec4bacc60b8\nc029e58c26875322a9eb0f146e94477\n75f07f0e8343639d37276d660ae66f0b\nf75f60a086094c27e5096e2c6dd4fe11\n6c2a8b174ee60c241ad88f716ea80910\n85399d0503bc8a5b59a6208793b9dfca\n2fc738e7a7dae1b59e08df3ef197add6\na25819c97470bcb09dd0351f01396cda\n257e47c2c327ac0f86690e0779a3135e\n8705c20e8dec94539b0037ed0d57b3ef\n8684b67d71677ac95ab0bd3eb49f9a70\naf97965ad9dc0ef01ad88f716ea80910\n77f5a7479859ef79d97a4c09acdc158a\n5daa294dfd41b3c2e01d588c78e60948\n7b8aedba3024ed389e87d2bdcb41f548\n79f5622b83f85cac207a7604d676d24c\n5fdb0bb9c3c18d50602d6239bab56abc\n9d43e1b188ac816087d72888c0a9277c\na5c19b4bfab3a826236632eedd876bae\ne40e7c3dea88a733eb15975241f6a53c\n453c959963a529322633ff66beb9cf31\nc6eeddeb0366b4b6cf584303d1a1b5a3\nbc6dd957c20a08f67b440c5df8efc309\nb8cf1ee73b068390205b075c6f63f661\n84a87ff36612b3e53ef7ad0f5cedb0e3\nd5c3db96ef6559cbd867c39c06b7c506\n7bb0cc242729aa90eafe995fd10c1326\n11d9dd7b170216eabc4d71e69505510f\nab651261126de20c145adb610a878e88\n993cbabbe4b4bc4431baa3c9ee4148cd\na9d7e7bb4d72c52f1574d21c0c95092f\n2bdeb030dc3caba21ad88f716ea80910\n711b146200447f4183247f812f2eaa97\n181d03027d30429dced68ac20944148\n2379915c82c2b2d02530f02db7e9157e\n3fd4d9909c72fe47dc4f6934317af74\n1a511622eba730c79ee3c69ee7ee1fad\n5e71a80c6ac94e0177818a0572bf1777\na872cbdc66e671ec29d1e4faf5d375\n4e0473ee9d5c72aef00aae52edb0b7b\n570321d63f5fcb9391666edbc97a985a\n70d2fc496ad0da4aa7f1b033d01e1364\n461441f5606348f3d88a3e0e92891ad5\n94944fbeaf37861c61ffb06b88ae391a\nf4ecacfd4fd61afceb34db531a289b8e\ne34b3e11083387b9c9d5b08933b9e0c1\n137c1194efbdcc1bfa0892265dbce8fd\n835e01af50296235aefda81565fede7\n4e0dee54cd02258eeeb8d422649e5f2b\n3e16cce54c6f0b0f8c21317f25d028ee\n84d2d9ad08b4c39029cd33b1c7847c1d\ndafd6b7408e43ae5ec3b2e05ce8fd39b\n68e85f236ca1b43467cfbcdcd1be46c8\nb0ba01e0a7f3553897950841baebd2bd\nf529e7d74d5ec3d9a1bb636e72c59b32\n7e3e0b648aff4aeb6a6d1e86c6266511\nc7c2dcdb1f3e85dd35cd53a06b1d2317\n57374f933930a1453f92eb5e681ffef9\n46b229154ab6434177818a0572bf1777\ndc9c9ce6dc9a771f500158c23c4c5a8e\n5072c19da106b95583247f812f2eaa97\n3db832895812dd37230584014222e685\nac8fb298f7795ba47f1358f741bb7fa6\n8e55b303ce059ac5aca1a38908852eab\nc8e0a46d8a6352c58df4edffcbea21d6\n60a7df9bf00844735e7cf7bd2b19c869\n22e37482f8499fa53a081cb8ab2c8e61\n27867443c228581e515eb678a856048\ne7588cbebdae5863629c8a4be6c1e509\nc90cbb0458648665da49a3feeb6532eb\n2b3a776ab2c38e3844f57509e473c41a\nadab0912bc0ad1271ad88f716ea80910\ndc9f8240a57b7be77fd9594c37158b0\n4a158b46d8e943f2d612e9885a7318aa\n101354f9d8dede686f7b08d9de913afe\nf64068aad93d502abd1cba733b111584\nb3a4bcdee00ab993ebc29484102f14e3\n240521f502e491cd4eddc7a5aaee958e\nc6c88ee9ea728a3220815abab29462c3\n3dc77d756da1ff5eb3b44ad99a214777\na12a46aa47ce021a0ac302bb9c69c6f\n4ded23cf84c993e9df3c63f2cd487888\n267dd5dea4dfa74bd4e62d99c536bbaf\n6aab9afbcdb94edeb59e9758ae7f41a7\nda2fdf0220908ca42744bf8869518694\nb0a331fd0d599fe8e69f17d076308b42\n161de75c52763afade3a1fb6044fe536\n20fa8d1542e7f835efaf604fa2300241\ncc9edcabf65e42d3febdb1f263373824\n7e061336b31b8604d34bdc365023cf4\nc3233311a94b7b968a0181490cb73cbc\n14a21eb927d89df31ef58b31c4ba0d15\n5bfeafef1be5f4f5bb476b1cb791329b\n4f0173cf9b1472c37d4f87d95d70ab8\nf1fbb16afaac70231ad88f716ea80910\n3ff2ce8b7432b5d6feae521e94848af6\n8d88dafbfd4200c772e8dfb640f12f2b\ncf45708ed1ed436970f2559ee6f59e37\nb0705be54d6220d9a344697865361601\nb56efe51e12dfcd72c730e00f4721fb5\nfa6fab7bc0823f6e54feda409512bbb5\nb02ae2bb9756acdc5587d8c9be86464a\n18e1be943fecbad143662aee1fc05d23\na1f0c93f000051c7f1aca3fcb64b7fb2\n96778a7607802a72ce1db673cf70420f\na23a775c5bfec73d8275986ae1324d10\na234d7b21f06dc58d77ea5e1afa5bfe6\ne5012f54d03b863ecfd43bf63e641a70\n1a1ff0c5f28f10d642e265df80f79372\ned80a69f448cb9a7205b075c6f63f661\n65dbba7ce5b4c40192e34403f6f6f5f0\nf142707a0f0acab4cd229b7f28637ecd\n10421ef12dd27f3650f5fdf97aa1ef24\n6b621f006878b74f2a9eb0f146e94477\neb9de225b5d502c1278fe505f40d50be\n9f4aab6206870d5deb34db531a289b8e\n9de56b4a4a9eb3a4cd4e2b9cb7f670fc\nacdf7e6e551eaad3423723bc261e3897\n5b3bf009f0dee3f01ad88f716ea80910\n9376e8048ae8b34ea35fdda2e8d5933f\n6d83986459f72abd4884161c20b458b0\nb2ae90026d7979d8267014f0fe84b7ec\n8453a71333241062f1b584cbe791b374\nbf27f6d33ea63c041df7ea94ca903361\n614a16b7b994063af6d28508a7c94d33\nf0c6079a6dfd5e0a7a9e31f14ebb8cc\n5aad6776bda34de6831627e12e4fbb8\nbf83a8cfb72a6208432eb33b78f3e334\n5efa892adca22d37cd8f3fe9ca2145e1\ne2603611f6d3c661b9b2b9d5b2804865\n995ad1befadce7771148996e35417db6\nc533b4ce486919121cd3f324e5fa80\n59455b5c509a7e9efe96ea0860283ff8\n5e40ffef9d25d0f031f3d76ec3df45bb\necfb9655edf2b5297160646d65ba4383\nacdb8a7d906b126e20363e2561dd589a\n74d27bf812f4a7d83a2dfdc3f38ea6c3\n46acc0258b449d18f01503c3476a4944\n3ff725e1e30e4ed6a939d6b77e949639\nb526ef9f77ce64d398ed31a2f734ab49\na4a0efdf9359987515f30bbd054cf549\n841818bf97827792b6fb1533bcae7a75\nbc09422920aec02cb8901bb57b05fb9b\n51b745123abc098c10198e93f73dfd5d\nf2918caa3fe8eceb47eac12ec180489d\nf14ddd757b128a96b2b304a0ae97620c\n573a662d56db6a9d1ad88f716ea80910\n88bddaa41de4fc386f936ccdbda50e38\n457c7205d3a193c01692dd4d739ce02f\nd6cd608c3c75afd01ad88f716ea80910\n767b076382b239a72d563c85edb49108\n311354773f4c016ee1e724fc0e43bde4\n3fa75b15090b5139ec507a9b4c133ee1\n65bb8f59e10a0cd837f1b3cce66816ca\n368d30ee72c63a9512da48a027621f2b\nb6f154678c06f537db24fbbf172c2159\nff383dd89f76410a49c18a2c5bf89a47\n6c403ea54430684990146e2a0489a257\nb03b88ff24870f2720363e2561dd589a\nea1b716cdf033bc4bb844bb01fa51c1f\n75112a1fb101921edc1b62a5dd6fee95\nb96feb6abb039ab8c7c56d4a401463d1\n97e93552e141ae2432caa5592532fb76\nb8092ccc834f31b9d69825aa8e687d85\nd8fe44ea5aac77504d0c24eb0094dc21\n82ccc798c04e4592eb34db531a289b8e\n4cd3259a06b904a36a6d1e86c6266511\n8b0544e065d43369588e71e21de9f30\n37992f1a3a6eb8abf398d0c5832df00e\n7317a113f9999e28824aa039bc530c36\n47072a1458f35a8e1574d21c0c95092f\nfd4b2e3a6caf4706a817854e3b5b5439\nab79e12684746d0273e1b2d018c0512\n126ce29983c5421fce567a7bafc3f52a\n9f90d7bf89231ba94f5aa6ea4540caa\n77514a7ccd32860dd9dfbc520b0d9752\n2edc94885c4ba7ad2d563c85edb49108\nc389dd22f9209798f72fe2e3cc67d234\ne62dd51d47ec4e2ec29f84f96a7e29f\nf996317de417329b1574d21c0c95092f\n14f7468c0ae24a73d6317d54cfc1018f\n69212e8c41ec753fbe62db7ad46c40f3\n2a38fb6acef92461ed2aedc3715ac201\nd97a4771b9d796a22d1a40e420084a6\n1db62b6137f51cee8ae98a75d7488e57\n6f1913cf723bdfbec5e5fd334d8e3b16\n5976630a3b8452617ae81ddf970c0d9c\nf98620e647a77e1f8b5ea808b63cd2a6\n79e5aa259b3c148789df8842b5523a86\nab478f6a1f38a5d18a0181490cb73cbc\nf982748287ef2c7ace029fab54b6cfbd\nd04ece855d678568d74f2f4a7f5598c2\n7f7ca259133096cc4d8df313232fc497\n2dbb22fe2a25064a7e95eb283a46224\n4829f4099c72420351c3197f6363608c\n6b13ee07cfc1eaf7967b9b287e3372bd\nb4e360a10bed4677aa0022295937af95\n5ee19a13a20ab65edaa5dd7053bcd03a\n5d11e7821ec86797b646fca2237eb6\nb6ff46015b57bde9abacd1c615a34b0\n9a989485d607844c786b126bff0b0351\n709864406b03fa2f880d754debc41bc5\n5775db2064a6b0e87d72888c0a9277c\n58d0623bfc9043965c3fc20f066d524\nf25cae5549e30302803f272bf12359d9\n16ad8ba41b4caaf66a0a07a21e1bacf4\nf156e32edfe185b76ac6c4392c71284b\n155b9ee29dd8f068f9872b1642da5de0\n859ab0a5ce89e271b4607134dafdbd9a\nf07c69a33e0a1f54b6c84941dc90c1d2\n6a538eac61644b0f84145006657ffefd\n292353a763d0870432af7736a533c197\n8dded99a589a526d609daf4d63b3df5d\n710c0a8ede7edb6eb31ee294b2971a9\n2a7c52141a3a32dfdd14180aafd9db4\nb6ac65861f2b7a726bd362b3eb022b32\n71b68a5e64903e0a1ad88f716ea80910\n5bd42cdbb91db055f7e08add4085d009\nf8d4287a583bcc499393793f9cf3dbea\nb865f12d17532a3fdb24fbbf172c2159\n1e9032f25c5d068fa7a69b946cbafa2f\n591613a69c2e212f78c0a4707b40a908\n4421130ffdb720c7421e5649908a4a06\n5a59e8590b3f12580275d4a88484513\n4ba818da340a4e5d60647a90a03914e1\nb78e6c1ed34b29e7fdd1073b17e9e51e\n62fa02df51eb19a5679c9e94dfb2276d\n4a4132b1bbc364f573c609379da5b9c2\n58142a4c3a71147a2e8dbf40bb4c181d\nfa98563736440326ce1db673cf70420f\n892af085a4518fc673c609379da5b9c2\n23907d5a2bec2ba6ce029fab54b6cfbd\n869225f275f3dee12a42340e65c9f0ec\n9c98e3576baa1f25b3150cb8eff8d9d7\nde41e90d949a21d6a41c66e27a37f014\n43990265c9b6be4a989542bab68e6843\n30e85c002b800f2771fd733ac7e95be9\n56e41e5e3bdb2c8dec29f84f96a7e29f\n39c641a818474a46e10cf62a02f1a100\n8f9c393fc17d1cabd77ea5e1afa5bfe6\n384fbf785f1691d2d747b49524a1246e\n56e11f06a19f9c3edb24fbbf172c2159\n97bf4aac2d956c1d5d9e9a1d5cade7db\n4e6e05676ac77f30ce029fab54b6cfbd\n3983ad3c93f4ff0ce029fab54b6cfbd\n59b78ba40b16eafed6baaf394ad18924\n83f72a05685b80bdc7c51d4ea74651a7\nc20a8c3b7a06cd323a5b5efb52c46c0d\na24796b40f26be4a19f048d3a7935eeb\n7b81d4cddf859fe7ec8f1b76923633de\n11c1c970e9cae04183ef95920b2c145d\n663174c8076b969eff258dbde860ecfe\n2c8cb15e2d973bc847cf5450436b1047\n3986913c6dc63598d2e26510f3f5390c\n26369dd5c4cc8c55e9e3ed40810044f\n4f4629b12510571886be4ba1f667c92f\nde5a57d8fce504ced747b49524a1246e\nc8a343f35b8593981ce8823e87f4a7fd\nfe4ed2d72cc79c74b59e9758ae7f41a7\n7f382d870d2816c78ff420534f79208a\n3575177296452c98f149a4641e0b7067\n9a859f2668f727abf6da3fc8db3c804\nb24c25a01d69adbcfb14bc0c4e180ab9\nf2a13a030a8153d9133aca0b3ca7f0a8\n71c5756cce7bdf8cd6317d54cfc1018f\nff9590ccc2613d6c332d76467c18dfde\n12ddcbc94fa909502533128de72c17f\n5acc9b2fd33a9568bf19c71eb972f14e\n7dd0a1aaaf29b18529d8eecf3827c486\ne6ac4bf60e270a6512da48a027621f2b\nfba87f3cb973b06871bfdb4b1c2ed05e\ne75c0fb00d2b70ef1aadbcf355bd688f\n576fbdcf1aab3887e4e65d5ecb84eef4\n508e66670fb3830c2cd6a352b52d97b9\n8edca4e07dee64e0a08ef684995f5adb\na76f63c6b3702a4981c9b20aad15512\n53d6d8e3e4731b3bc0b5947ffe18a468\nf0b4735b45d1a6b51aadbcf355bd688f\n38e4bd990b3031bdfce87fb06e25db17\n39c15f4b2ccd699bf0a8b62260a2a216\nc72753b17403466c51fb196f32308d0\n77c70fcd8ebcfbd4c83db093c68b1d7b\n88bafe4a96ff3348dd1080d43103149\n72ecb9a2d25458ba8b4cf2c9fe044514\n47f062aeb83f19e1618595b659cf68fe\n74a4f472155ed5a3b2bf4f773fe0e622\n15c6b5792b19af3fe99c48db5f195989\nccd635e4cdca96e33b6e05aed261d1e8\nb2705ec086216be91a68031139d740d\n22654d0b3683df91650c44f51c50faee\n4c944233440d87f4b8e9f7eca3eb3e3f\n8956eaafa0afdc142633ff66beb9cf31\nae39f8cad4fe0981332d76467c18dfde\ndbfcda5d40ebc2148bbd829479b32606\n8e632ba25f8af84b9069c2d361390698\n3b6f73cc36cdabd2b3b44ad99a214777\ndf678ca1f17e32ec3d65eaf8cbd60895\n113aa3b68f515427205b075c6f63f661\n5027b6f6c32b0d28daf9b9aae267bea7\n1b24c1c65645c5f155b62c3398327a83\n792be08647d7e0fdd4221fb0ed444ec0\nc198d2df79e4a40fde3a1fb6044fe536\n2629234a2fa847dd9b106ceb230ede0\n702c2f9c3e8770b534943af333340cd2\nc2598d72d508a33060ee9c7e2ec5f91a\na690234747bb56ceb4767ab55965ebbb\n86adab79cdfbc284d7872acf770948a1\n5015233bfd8fee3f3e066187e0f408fb\n1e6a6ff6f4168459e5c00598c3e9532c\n16f4517d129ed54fd747b49524a1246e\n27415ac0b56e87528dfe57cb1b540899\n27266a732bc955e4db965514105122a4\nd5bca27bf05ac5c92e8dbf40bb4c181d\nc3180cdddec577f2e17b9e33c097dbff\n5f525c37469b0437feae521e94848af6\nc50c27f14da0f7fb86785c91e1a79038\n323f51a8d5029453d603e2778861154f\n40f8addfc03b2b1e4d0c24eb0094dc21\n424e95fed6e7fd5c14fdbb071f44a8f\n67b63929a6fc3804dc7d80effd6f43c0\n3655d8078087f1c62d563c85edb49108\n43f49627bbea5c39a052db10ff2f17aa\nce90cf5be2ffbf92505e438c8a36b3e7\nc8b4a5d2588868a7a1dc1681ada9b3cd\ncc01f463f825ee9024fa1bc380696e03\n5d3c3b2e6645df602a328c65e88727a0\n5da457ae73142749280e0c1e89a63998\n1a9a6a214c957757cc6617fc407c9ed2\n9432e02e277a206e3fccb208b0350a\nf8fde8f5f364087d2d563c85edb49108\n28be6cc8685c68464aebea9384ce74e0\ne76108274392bff53d91ae2b92426394\n48720ac336dc7012d20ac02530d96758\n3fe90423ef5b56386af2396cb8af8a8e\n1aa51463dac23d5cc9f08ea7a19d874e\n3538a656bdfe47948dfe57cb1b540899\n35815951ccf18e3eb1f6750101befd14\n619442d40cba1f667a964feaf6ebeb\n481705a12fb7d10a20363e2561dd589a\nc56e62ebcae613624c40f34de8f3bdb8\n86775c918b6f4fd2f149a4641e0b7067\n539d5ef3031544fb63c6a0e477a59b9f\n93aeccb6a5e0a62035cd53a06b1d2317\n40f0e44f749ec0c7b3e0a2cf776be56f\n36b29f93deaf22f66b1cc4d44837f930\n82b9111b3232904eec3b2e05ce8fd39b\n4d264fc57f6ea6bde389c9be84ff7ec\n2cc52cc8e9de5c12f398d0c5832df00e\n58457267e0a8e3eccd4a817c9d7b9f3\n2e0fc1bc430c5c1bdfdc04b8b8434e84\n96a3c3653c343db6ba8a1820ecdbe891\n1ab52761b829fcb375a3010d3ada28ba\n67f091721c90a533d747b49524a1246e\n192fd6e662d89b62dbf53b03c847b004\n8080831f18e0cbe1b22b2ae1c9a24291\n40007a605a25c71d747b49524a1246e\n92658be9ec3307545f7109466a688ac\ne5a6dfbc6e89ba42bbdf3c5f28fe5d98\nfb231e827089f9db69a175548b8cecb9\n3fcff447f43c75c3ea3d2e9efa07ccad\n82f1e500df50302e26870852082c4c6d\ned0f8fdfd9e1182cf83b540214901572\nbc522596f5da2ecda32913968eae7f30\na3f012045e4b62b2789df5bd89bb3ea\n46d03a4d9dec071d1047e2dc3fdce97a\n55e68ac8c812b332ce1db673cf70420f\nb6ec9f482f055259f2e5d34c7b677bc4\na423a97b5758a266d747b49524a1246e\nb3f76f7361b123f5b3878cedd8c8fe6c\n90a050674ebcfffe475649efc0ac5403\n2eacd8302d46093ee138e561e8f9c254\ne854747b2165ffd6f8b75fa4030d2e21\n46ab468d333233b062a6cf00d929f875\ne6e09672fd21f3d887695b38431695f3\ne66e2202b11cb7122d563c85edb49108\nfe613d2a63582e126e5a8ef1ff6470a3\n5551b67ffe95c01b73c7253ec9acd58b\n4c722ef308bd6362d747b49524a1246e\n36b61e14fedd020a838f7ecc5ce13037\n908202c73ba60671c0d274eb53f065ff\n1f2a8562a2de13a2c29fde65e51f52cb\n3e33b290c010b3b88bc9d953a3f1955\n9f7eb24e82020dcf40df330a2f73b17c\n4c68944b2b8105d11a2f7b80918eee9d\n2a32fbf104a7524ec78a85a5b5306f41\n44b9054ed15fac2c3a67bba344536c8c\n2336a8ba5ba8a9f0ce029fab54b6cfbd\n864546c6fbf636a2d0d6252a768bb9c\n6b5458409e54d8b99c5da70959a4c7d1\n6c71c0791b014bbe7ac477bac77def9\nefb2eac3d84429d6363cbfdd3d5388a\ncb904746fddde134b9e8bdc9c4a49aa2\nb3009e2384620945a35bbc252ec176f3\ne637b80011db78c3dd6a08110bca7bd5\ne270c383e0d9c8e0ce029fab54b6cfbd\n2edb8ba1a031b3f5ce029fab54b6cfbd\n9cd16abcc7fa224ce029fab54b6cfbd\nda21a8c569ff0ac4a7c719349406e0b7\nf046081ff90ebb6dce029fab54b6cfbd\n4fca42120b49baa526841583f16744a\nd414b33288a735c955b62c3398327a83\n1605c2ea5ce774811e4a701e01e712d1\n168150439eb31ea1ab5fa92a7378b5c0\nda706fc7141b22ece029fab54b6cfbd\n1e83ac6d9ce1541329965f7e898eb4fb\n20b0ddd49c8cda71eef785963bb59c49\n5f41f45cd57adc0b885333683933c555\n1733111366ac40b76eb0973c46aae0d4\nc1fd0e8de18620ba27e7754e513f7fef\n91d876c2c51a81797ad9e38d6dd6575e\nb7b69bc187bfea4a8b1598dab950d979\n6c31773432190681f46dcb5d9d87ce1b\n3b1a3eee64e3412b6aa8ee471986facb\na3d5207350bdc01e87d57ccb715c57f5\n99f296d0bbae5585414ff38ecabd5968\nd3b324de8e23851e55b62c3398327a83\nb9f853ae8b693ff91574d21c0c95092f\nca545c7c3bf38891af3caf4aab91511c\n24cb5019659114d5176545ad403d244\nc7965a5da1143830538cf6df9faa9b65\n56e2847e61b36a134c7bf604b18af84d\nbbb7275f2a0224eb90146e2a0489a257\n4cee7bc85dae3a58d6a78c624f639b3a\n1d7af68d31944c358a0181490cb73cbc\nbc611920d1608f96df172f74754804e6\nc766463a3623d0ab8a0181490cb73cbc\ne97a846820b094b8f439510dd98d9326\n2f41de1a2faf854d860e5e56395d4d1b\n16245718c786456b35949989d0ab81d2\n421eb9597a33cffdfdd1073b17e9e51e\n7cb1aaaca10a8efa8d8155ff8532e190\nc134c61a5b45dc281574d21c0c95092f\nf9e6e10cdb3066929a3fe7e437a02206\nba63e6e1bd33064a90146e2a0489a257\nfc5315b04ff094686d564e28438f8cbc\n46ac6f60aff34c5fdfadbc4d6667b477\n102f9164c5ae3846205b5aa6ba4df9c8\nbbda555f0874e9d5b35234ceed4dc815\n47a0132d9a497e8ef398d0c5832df00e\n98b920157670bcdd716d882f857922cf\n40cd27b2f685afe3ec7f40971ff466ac\ncb25ea4938c1d31a1a5a6c4a1d8120d4\n22e8cd8675ab57e26d2f7f4796305f20\na99cc4f1326b9b48b08cd968d6703683\n2dc57057c96ae0f74c24a2a9e289662d\nc5b38593b74c39695f7109466a688ac\nbe2df150c86b57d2c9db3276cf490d3d\n1f6b0aa7568e70675c91d2edd70c353\n29a7fe8fab62a9e134cf66ffc496802b\n95268fb7d50ddf77f398d0c5832df00e\n4d1061e19f05e919a5e698f08af11df1\n153c468a60e1116b2eafea928e361a58\n796384ba0e8cb525e17b9e33c097dbff\n64b14af80e246549a82acc849eb5e81f\n6e542a3dfae28b1cf852111eed0a5c85\n82b56b6d371031ab7c8813aa71327b73\nc556fa897131c0c833b20ff045584bf3\nd35894de19f2ac5af6ab94ce02a994c4\n3a346d78102ca842b996cd669da05484\nccffe9befaec2d1c4ffa46d1fcb77f51\n336fcd767dadec9fb611871e114769d9\nb47ec1326b29546bce6c3ccb8279bd8e\nb4cd1e4296c3e9b55ed2ad7d2e018058\nc32bfe130412d9c6d9b106ceb230ede0\n665dfd9711b2a3ece4fcc1af3285ca51\nd457ef805b078d037f5e8f62dd90fb59\na50af511d8cbc8df520f563b6d5bc71a\n97f758c8d327d072871a975200291c6f\n51bdaff7782cab384bde7bbe88086aa1\n63c4583afc2b82237f299e32f8ffced9\nb544aafb047ec5014c40f34de8f3bdb8\n16bf19a982c7cd71dd6a08110bca7bd5\nde5ecf353cace18574b0aadaa58fdcf7\nf7624b0826b4da3ae7e41e72dd76c27a\nea83b0bdf2b13bc89c0528265c614919\n569fc1b111617f4038b28f94c165f833\n359d760f7d8fc091fdd1073b17e9e51e\na05dda1538ddcb4cd747b49524a1246e\n3dae5a52602e2fe58a0181490cb73cbc\nab84f70571827b76dfdc04b8b8434e84\n7f2cb859eb00046d3bb72a8bf55ec27d\n5b7cebe280c5aee935cd53a06b1d2317\n6833234a218df871aa35b1de51ec4cad\n483c63155f2be7a8983b2cee8fd0fb3e\nc0add53ae9928d73b184474322bd24ab\n7f448ebca95a536f40e7eb33087f3287\n3eed264487fcd94bd88a3e0e92891ad5\n80aab147daf83cde332fd8bcb8108236\n40e4ae14fac94d0b45bf366c0f22b100\n164ac6f6252e22b5f5c320b27d54d683\n5b6ffc53d44363b57f2a00f370c25e25\nf1175bec19adeadde188dff443a0c2ac\nf150315ffddd85353ad55e05c29c23ee\n1ccc688123d1d873ca93bc607b24577\nb8da73245beb77848d257d2dc106cc1e\n394302e20816d0fa07828ee23920679\n33d61def031dc1ef256097a658bc66b2\n370ab315439047cba2fc84df67c2df42\ne1b3bb54b9855f12d88a3e0e92891ad5\n4a10811da56f40a989542bab68e6843\nac6d3202823055dc1918763f44383273\nc3280f7bc5fa9ff28a0181490cb73cbc\nbfe4ba1b06404e4bae19bd5568e6325\n2f9b00e9c1a1b00c47569806bbb7c5a0\n90882268b1169ce79428390c02f266d3\n61508357d7d9ff38a605f453cefe7e92\n6db722284891a7f684f5f65c78855f9f\nbb304ec80f4ba31f8a0181490cb73cbc\n93c54cd14ea713d34d0c24eb0094dc21\n87d70f424653c8c9e2a6fc5932a88f35\nc725f6e275e9942f989542bab68e6843\n9c1bc89152d90500c92750b56fccbe69\ne08b3ac3bbae3dfe5580bd812eb6e71\nd06487d7634bdfddc1b62a5dd6fee95\n7ec487384a050ccb82d710142ac471e3\nd8023575778364b035cd53a06b1d2317\n336ae67af51a13309e87d2bdcb41f548\n17f87baa813447ab9588e71e21de9f30\ndd2a4c416625f29c4f57a7ededfb3bde\n244f40cd50620b32dfdc04b8b8434e84\n115354ddf0cea683c9603934b9e8f5dc\n632510d0916f31a184d6a2fa7259858c\n5222c43f267d9f313129bd51bf061fac\nb6d83532d5479753bdcc14b36549ecc3\n918ae70cc8ff08c27f83e87789efc1c8\ndd6a03f9fdc339c6538cf6df9faa9b65\nf2bec55383f72f04f6eb098afb876d6d\n1499859135ccc6b267bde58c681df405\n7fb191e5d0d7464b538cf6df9faa9b65\ne911bf2418eae6241574d21c0c95092f\n8c919e992db7cb081e5b68ee10358ea3\n8dc1e06a23a2fdb7c77445c6f0b20418\nf0f9a2082454542751dfe6844b6e8393\n2cb180d4322b8ee9c0d2bd04416ef7c\n91a98a5ab36cd751cf99e87135c925d6\nc1cc6f59c8c6406df64115eb33ec13b\n4ddccf2b67d0cef538cf6df9faa9b65\nbda24b02920f91d1887e8faf8f33b0c5\n9d62d13afcca23d841c6e77793c5dc94\n1eb0b35e8e8ca4da85113402a7623535\n981abfda92e702e33b9f0ef1fda503b\nb8a5307c51164dac78128d32fc0f2897\neda3d466ae38e9112a40b4a3ef70af61\n43730d7a76ea63f920363e2561dd589a\n14fb43f3962bef40ce2d0b720afe8196\n81a096b49d138bca1125e131b6efeea1\n4227748867df8cc020363e2561dd589a\n77433c14eb1043a91e5b68ee10358ea3\n607096f600b6b75620363e2561dd589a\n590e2fa429a94e711b45df3fb820c9cc\n435ab5f43b24f739bc0c56c4d4a1fd3b\nc9de3e18847044da47e2162b6089a53e\nb0f6ee90a22dda571711eb7e23a7e2b\nb703762eb7b1fd39d0cd692038573317\n8cc5a2ac83bcc120e7a1105f5e7667c\n926b6071c45525726d3462e1e02b75d1\n21b9af9e21bbc7975afcf0aaed5d73d0\n5b2afef3206a153db06d0ef27244d1aa\nd9b205873345a9b35234ceed4dc815\n1d4ea80f49114ec0813621823d82b548\n79267b91b523933d73e1b2d018c0512\na18c311eba5e551d20363e2561dd589a\n1bcf25863e840c11f806e7110c573eb2\ndadb71e216b54f701c5d4854f1aaed94\n28b5a90b428358e173e1b2d018c0512\n7b08e64e66cfe5d473c609379da5b9c2\nf993f348260454bb538cf6df9faa9b65\n6bf052e16794f2a73e1b2d018c0512\nf6958e13ea65bd521b45df3fb820c9cc\n3256546f0f70af9c39c80a095f51c7bd\nbc7a4151d2098374513ea32c8c934a8e\nb7c92dfdd563ffc74533f2e74542acda\nb488f301cc8c7d0d4079257326eb1699\n46de1dfe54a261b4c7e1f9c70054d66b\n8a536e4254674fbb73e1b2d018c0512\n5c400c09175e3801bb3613d5601159a8\n8d5064233fdf0624b6d9c2cee7f2f72b\n2d408222b334fec71b45df3fb820c9cc\n91bab54d8d14100161d3e32ec60a98b7\n7174c62e843e444286a8288f8ff176fe\n88c9a7928bc35ab392b9c678bb1d631f\ne2d6a0851b9357141574d21c0c95092f\na8de7f2c7e00f9a01e5b68ee10358ea3\n552dd48f9a264d721574d21c0c95092f\nc91e878553979be9c5c378bd9e63485\nc52531bfe9fcb17a87586c1eb104adc8\n23efeac8bd7132ffb06d0ef27244d1aa\nfad354295b4c0fdb55266ce6303fe1e0\n92b3275e46a63fce1ccf3280eab717b\n956556bceabf511d871b94133e874f2e\n291b3dc6e6f0d5a7b249ecc7669d184f\nc76fc96ad122a33e75f6e8ca4d589c7b\ncf85a8c74cb76caf1574d21c0c95092f\nb68e0b294c799771ebc9199df8e5ab6\n8f920f26ead4d592cf66d96a8426fc6\n2c44213112c85413f0c1015881a0926c\nd3817d6003473f1c3971c6f4f1d0a4a0\n73fa71b650b99bc951d3c864cc68e22e\n9ea3e05166af97ed20363e2561dd589a\n5501c4caf22a5c974533f2e74542acda\n276363a6e7991caa85dbc6e74635dd32\n5a115cf7e21d34d249d7025d277c28a1\ncefdbfba01e3128920363e2561dd589a\ne849b0017baa1a978a0181490cb73cbc\n5adc7f63a154a43be9bb042b8623f922\na9957cf39fdd61fc612f7163ca95602\n8ae34239b6c46afd55a4dbb6a97481d9\n54047a2d59ac5eae3ef7ad0f5cedb0e3\nf8b0dcf0788e775db98f9e89101e3f14\n2c4d13cc64a679f3322f30a0f4208183\nb49306bfdc0d238076247c6336e7c242\n61c61c893164dbf275f6e8ca4d589c7b\nfa37905b884bdb169f69aafaa5236e51\n736820a85063a4371e5b68ee10358ea3\n8562c442745af497b5b6356ddd072fd9\n62729cd3a4f7403f712b392cfc0c51c0\nd12ec06509389e01574d21c0c95092f\nce21542cb2b0bb3458107383640dddec\n142f66a7bc5e119d18d385624fdfc6d0\ne22ec5ee664f7c172a9eb0f146e94477\ne66486c1f5644e298a0181490cb73cbc\n4ca26cee4108632859d58b5bb5e2bfcb\n3110c18edcedfb6331f3d76ec3df45bb\n90143acb141fb1cb4292de5cdfae65e2\n92b24dc36603b59685a979ae0f537b4e\n64058330533509d1d747b49524a1246e\n63f006488cfdb69bdfa0db1c1e10ab1a\n61ec03d50268a852d4c639228615260\nafa628c3dd7558be89367e7bd925ea7c\n4e8eb4a0a6dc83e0c779d976f4b3d7df\n93900698e7d9ff4d104831d5b063e54b\nabbca9c2aa1ab018ad65e8e6cc8ad9b8\nb648f6cd54d07a1023e70120ea31089\nb28c7b84869ba2aa87d72888c0a9277c\nd05c2dfdb34f38433e8a91ffbc9ffd64\n556eebe71c16acc9e17b9e33c097dbff\n5e9cb0d76e74b0a9339c90d74e7a6543\neb0c85cc627406b5d33b16aac56dbe59\n6a864ca4b19aca77645b6a2a45925e6\nd46c71be46696b1d41ba258440d3e234\n16a8c851009d6786887e8faf8f33b0c5\n33b19fdf42fd767d871a975200291c6f\n79cbb3c5f6bad447abc635d6ed355bef\n8e54ec9d554584cfdfa0db1c1e10ab1a\n87e2d9c72eeb8c49f398d0c5832df00e\n6503d74fb534ca43d4e62d99c536bbaf\n882154aab31d483e130bc0755682f7f3\ne5c2ab51068e9f8b58ad8ba2f750cf1d\n2454758b9629441cf322c3e7acea58f1\n6d5698eba0fbb1cb2a9eb0f146e94477\n2afbdce92417c3bdd9349058f7c3888e\nf6d6ab4f49238452b45df535caecae62\n67967d0213be8b199fa004564ade09f8\n563b0c299b32e73327ac18a9705c27f1\ne30bfb0ab456101cc0b5947ffe18a468\n8877b9b8e68fcda696d7d56afa10bb68\n76566bf65b49e49c864d68471e7fba29\n7f87d18e6cad013ba448d8e70febd930\nb7f4de208a1051e62a27a874411d1ac\nafb32fcdbc6716b2fb14bc0c4e180ab9\n211cf10bd078f91c01c4160f17211fe\n4d698b1e935897905e97b1b6281b6b04\naa8f197979376d792d563c85edb49108\nf7366c0025b2eaabf5fb60584950565b\nb7c5eae318e4e796d4e62d99c536bbaf\n7c02e1c88907e8426b424c689f1d711a\ndb9fa74a2b9ae465c7e50d673f14088d\n29b26d5aeae88531574d21c0c95092f\naee6f0ef9f8a7c13b54cfe6aa07c2036\nf4bb44c3b9a044ebaaa7694cf6c95b84\ne7af5657b90b9a73558880eed6ddb84a\n5a943e38dc477bac4310636931b68fdb\n4fef29cfa7ff1498442ed26ceeb35a60\n6309ba4b45aa1a648bf9fe7c1fcb7ccc\n54681e2434fdc9ccd747b49524a1246e\n58af19399a5a447e4310636931b68fdb\nafd431c30a98f782d52af5b75b4cbd2d\nb0d4ab08b9498de4f42138205659017c\n26778511109e9e76d936ebf2a7172ccb\n943e9abfee56144fc194eaff7ea54233\n799a7910c5084f1a799c6c3b2fff049\nb4bc7d540893226c507038fac66e20d6\nf3f07513f7deb6d1e4ad2926a22bd27d\nc73bd84347cd8fc9599d9c8430d600ff\nd6ad58677b397894224f9d60ad32613\nc6480c816679773dde4fca22b4a322f6\n5533322e8dfb7d69efb0fe88d2924d2d\n5bbdb492122b18cf65d1c7f91840e570\n79c0d4ba54cb08ccec29f84f96a7e29f\nf0629a8139a9ba04f398d0c5832df00e\n324c0e25576498485373b650bcccdac6\nf858ecde18c5dae2f398d0c5832df00e\n65425eebdd205119b128e24d154447c\n3a7b68f7312c16f1e9bb042b8623f922\n5787e7156ddf7a2adfa0db1c1e10ab1a\n65e35b8378bb62a3801d0b1c6eb274a4\n2eb05cd394f94bf7944366528422e02\ne465af1099b63258e17b9e33c097dbff\nda23f8427db17c3c627a66821130f814\n5b83ccf84149f28882613fcb45c2087e\n1c29d002435ce5f484f78eafcf19b8c2\n93cc6af2bbe3675cda8f53dbeb7453f9\nb3158c23dbd08f554cf39544f467e5c6\ne1385ebae6a7869d23a4cda08ffef080\nb9c2454fc2ef38db3db7c6064037cd52\n8d437b97fc1cc7bae9bba7108b76f097\n11f5f6311449da7ebb01628f533af3ce\n5260d7e4d379219df2e5d34c7b677bc4\n8d698e60c436d75cf398d0c5832df00e\n83cdedb3431e8d8a41c95631f0cd177d\n4678a534b01fd4d6a29efdf1e3212661\n98db1220073f905159f43e87f0a59fc\nf187f9369aa0a93200d439345883b61\n7c56acc57cae84a9a3e7d768d81f6afa\n52ffd6fe29e51364b21928f7573b58cb\nab5c8c38528f06daf398d0c5832df00e\nef720d2b2de59184e775d184845c9f5f\n993d30ee5f04eb7bc41d2caaa616b8ad\n63f06aff0721b648f322c3e7acea58f1\n9de3cd602d12d178887e8faf8f33b0c5\na11a2f20b1680f91b626640605322b5a\nb8417869805cc9913ef7ad0f5cedb0e3\nf57c5e8f460e659f395ea88528a634f\ne0c6692e0af5dda1459a1795a6d0c69f\n7d75382b7b9e7bcfd88a3e0e92891ad5\n37b5f7222e0eaaa78803395bce6d7b63\nd11f1c28831e85a920363e2561dd589a\n185315ddc6baf393e0b4198d87217c56\n5aa9c76ab234dc2234560c18f9de360\nfb2755146e61262fd50505ee01b106d8\n453391a5d1d60bd51e859883d2ec3f1a\nb51a5f044c349741ebc9199df8e5ab6\n5b22a13742fc7224079257326eb1699\n62e30deaa5aeac183ef7ad0f5cedb0e3\n88842eadd96e5cab570b6bda9783c8ba\n5338db4536b4a889de7da340cde8d034\nbd1ffe5dcd7239d8299f55a072267eac\nd458f71eedc7146994fa1ea146084110\n95b29837dd0209a413e18f148987464c\nef793b2369c5dcd9bb63f7ad325b6424\n4bf9f2ae5f3b32e5d74f2f4a7f5598c2\nf7023235e0282c797f357b05b0dcb89\n2e40fbdc900e69593971c6f4f1d0a4a0\n2003690fcc8390a24c40f34de8f3bdb8\na2b1f43ffd80d53aed46d95e646228af\ncbfa6c888ffd893b31b5f9e34ff03906\nb044555289c7439f4c40f34de8f3bdb8\n4c18da768d4c81c787695b38431695f3\nb819ee65569e9da21acadc443e8b347d\na4180d6214012dc7363d10d9d37a65e5\n7998efe14649e07c397a4ece637a5\n9b9b41d3d02ce68d1b009b4923bf4541\n4aa41b48ef7711f89e87d2bdcb41f548\na8277672da45a94e9d151674c6eace6c\ne878e519af882f493fc48162942e3418\nab6b43b6529d6d6f9580f98cb259b96f\n4ef6b09f9a8e1fb233ed13d3bda59480\n58e73b03f3ecd4a45a31d91ec836a511\n9c8dd83df9678d3bc33323f64a5f289e\nc117b031376d3c12cd5cc02ebe46ffbd\n1cfd7a56b1d59ed837f7fabf76ffe0b0\n703dbbf27ae78991a21971bc32fb0326\n789c800c7f6d9e00b5f0ecf6cb865832\n3d7e4939b677bd9f3670cf6e57497e9a\n2f1446816ac58936361167c63c6bbe5d\nbc7938b4fc00ff71984102bc982dc4a5\n6ca4143e8b989ddf8dfd947f5413afaa\n88c752eedbb2e133f7f12bd413763dc6\n29faf5a7c444df58a1fabddca717cbad\n23a1ad8f7fdbb6a54821f0e819875cf6\ncf42a073500a1a222a9eb0f146e94477\n94ffa3ebe53ca46327eff743d2137fff\n24e25e63d6871f884358473f5b9be205\n73f855f34572cf984bb93d09975f5005\nde68b68a234de1a0ea2f8efb8b3faa3\n2db3489b490b0d9e2268dda5c324173f\n27dfcf48220c9ce1c3554591513b53b7\n361a97dfbbcdd820b182f50d8877b64\n2c32c107198ac36d37bf4b78d36088c4\n469f794b77f3f82b5f1f3016f773503\n34fec404bf5a83dc8fe1b374a74b9d43\n72da46839789175eb6ba1e8b5cf30e\n4a124e8015bc6122778ed5a91adef178\n5948bd85a58330628de9f116e0231954\nd8f6aaa777f0cd4f5a31d91ec836a511\n5faca1b9f9a94e379a1e7168a7eb421f\n9785f01a6ee36e6d874a6a37ca17d9ff\n1eac013c89689e58d421ffb972735edc\nf5024636f3514eb51d0662c550f8f994\nb44a0f8900edef4c957a55139a8e936e\nd4562a410244eca8823eead1c8e7b3b4\n9f242e37099ac424c3bf2ffa047e96ea\n66d9f9f961a12754d1fdf116b1be3b27\n1a33c0bb3949cd3213f068fa484fb314\n85bbc49aa67149c531baa3c9ee4148cd\n9d2f1644bbce8260ff26ed0bd5d4b63f\n1f59ba1fc5d296a817a0d4867f131bc\nf5c62c89e8fbb245ce6c2bd14b4c7ba4\n72d2729801d56aa51f9f3ce366e030fb\n4e957072c3c876e02fc6b53066be64d1\n43990d5a8ffd32774f074cdf0a32eafe\n7a48d550ef85f41d4873a2cc06a4fb6\ne5deab6728f237a6fc7703ebafc3f082\n9d0734e39f06529ac0cc451921109913\naa293b3c1b4f1509e3bf55e5ac6083ca\n12e055813ed50b7b85d581c11aa2371c\n635db4f2e3fe1f918e14a32e5ed95bbe\nea944f309ec70895c9fff209a296912\n63f13073406d8a2b4092d3b515916436\nb03efb93acd16a49699abba79f165934\nf1cab229b68c9ac1c4dc2c94f81faffa\ne6e085e31c30925466bdbbf263e9429e\n8171c9bdb75a10d9abdb18c1e87978be\nff8251d486de70545272b3489d12484f\nc2007f762f6c3d9f51dabd6f23097818\nbd2d91052e6c10804c6c80caaf15808d\n98ad42e08a991125f0ea0ee719f6dcd1\ncb3bc7b6610acb7d7f38a9bfed62447a\nd14285fb64811217e50f6aaad9a07bc\n65b461241dd4a4698152e0baa78ddca4\n16d8b1fde755f7f96bc5197cc4c47fe8\ne5c1a7e9bb2dd0d65a31d91ec836a511\nb7acad8df6aef539a35fdda2e8d5933f\ndfc0bd9721814628a4eccbbe9e05e638\n9471b1f88cca01134c40f34de8f3bdb8\n475853b0ac6bec73eb752889d5199f9f\nca5fe10073293be01de55fee5ac2c5c2\nd922dd8309247d10ef94793a67b4c5c0\n576e85200907fec189d3b4ea8dc19f36\n7628ba96cc90fb4df256a8c3e3396495\n1ba62454cd137945337410fccb2e7331\neb7b66a6557a05a4ab7f9d2da6fc61cf\n529f3a898bd030f558b060a361031075\nacf4fb74200b838d874179120554c44f\nf4308c030df7d027ced68ac20944148\n19f4ee5b1f70c6a47117786c46f53d55\nf4b733690a0fae8ff357e7c4167f3100\n6751b5616193e6908219b633b364ca6a\n99c7341e243c7a2ddffb6acd1a5cf214\n93e9c3de55b1a662989c6c7df583f91e\ne6b83a9d10349930b611871e114769d9\nc82577c608e88a8fb2ce325c854088c2\nacd123e2a1fd25366cde9ab9486e09f0\ncb320fd1f48f60d347e20662b9cc792d\nb747b1fe2a8e76bfefc97c4bab792c9b\n5d0499650653cdb9a37f3fc191551700\nc6c69578203357f3e3bf55e5ac6083ca\n3bf8ec07e1643746b319b8417d912123\nf2eb4b53ea11200cfb10a282776be584\n298e3b4149c28821b9001bf6cb0603cd\nd5e77992b28da2729c90f715a36a51dd\n90cf7907801560fd27766fcc9fe2f132\n50ab4ba93bb4141320dd2dd4d7d7656c\ne1bcea986fcbb7fab359198a2f47cf13\nf682ee3b4f4dc3fcce029fab54b6cfbd\n6aa3bca1ec6b261edbddba07a492a0ac\ne51ccf3bb4413ceb61775b840d882da9\ndaa10595347937b9ae7dd8d7b134d1af\nd4ae1449bdee448b1ab68128992ea30\nef509cfed1b359a7dc1ad15ea0771770\n93b8f4ddd36419998cbc76a30015552a\n9a9e5e5e3e034e74fedde756c9eb0eaf\nea7d44b28bd22258f5ec01c1dd7b80e\n813bb87d0679eeb9e4f8604d0992a17a\nbbe69ee745bd5c427d35e00bb4edf01\n5edee1135040e2a9aa2b654345545ea\nd8ce373c4ad4e6913caae5373ff4181f\n32ce47d38aede60ed614b9a1d2062a4a\nfbcef568b50216e3e180a1a604561d3b\na4a51863fe887cd970165cb455c090fb\n67192701cf183eaaf2a2172bfa1bbe55\n3fbf353af74136feb9001bf6cb0603cd\na6fe968066893c10faa3b42d05e08ac2\n4a0278285d649ac779b2745bcc82f6a5\nba85d89312054ee95793a80f4f864500\nab70b452a7ba1c445f46e754938b29e8\n2ecc5b85b343b20c2ca06fd2350bea43\nbcada2acf7cdd8c29a08db804545b684\na9d5719c3c2af900ce029fab54b6cfbd\nc27f121649123d0a51d91df189dc282b\n44ec5df88564c859e180a1a604561d3b\n5ab3bc993eec96709aa778fe3a2080af\nc58d1c25553a224ad9d271f9da38313c\n78efefe36b492b6e5a31d91ec836a511\ndb90e043486f216ead1d87becf13ddd9\n93927ab6b44bb95a1c4980134f4ff624\nf153783eb4ae84f2405c6851258f4dc0\ne1d8c419be35ee1e209a4a663fdfe000\n893bca10c44ffd673e1b2d018c0512\n231104a34a7b7a52c67a971de046381d\n6cd4d9c6b51d785bebc9199df8e5ab6\n6d75b6211f3bf8dca999ad3d6fc50304\nea4215e0c4455737dd3b7710c385b572\n"
  },
  {
    "path": "data/filelists/04090263_test.lst",
    "content": "c518e4b872a0841e0652a919e7ad7e6\n9af23e8759e070ef35d753857de68a9a\nd2b09323f863db7a71ed4e55cca1417d\n74a38b74bb57a2af6a405aa597e7fe24\n9f0b13efed3da628309c2ee598f7f2c8\nb76f8c041122b2dbf112f20f44aa16b\n17e2291c6ef778034b349e4b3dd5565e\n8bf221c8f17b152b2607a47034bf62a6\n5fa42f48d1d279bb7de50e1a7b436c85\na2d0d9e62c7fa469f02ee453ff283e26\n561430988b5af11bd04b05b0f20a897b\n85d730adf18e0c43a06a81572261e82e\n7faeeb69a870d18a2850d4a1a9c25bca\n7d310ff81ee66564b38e8b1e877a5704\nb85aa72e2d253f34e38850a3ae501b7a\n38d7ad99e308ddc334c4a8f12da88608\ne3230062ee3def46aca1893e093d31f3\nbf6268d9d4bd22d89cd99d3d15a8756e\nc91b4aa1105a0e506a34aa94ca8a3355\n5a79d10c5665b9dc895b56cd0d702185\n1762f93a8249ef356e4806bebefb1ca8\nc7f54b82e3b1682b65564d9c2ed3b493\n760165682193d0d235d753857de68a9a\n25cf1e85d9875c9412173f61ff9d1fe5\nd3f3e2dba3dc32c0ebbc1e980ea10b4f\n48b607ea57a1e16d309c2ee598f7f2c8\n97a7a1f3c53b3c5ff9489a342636086b\nd9a07758e979ecca44bebf183fb16c3\n317353de88cac813d9e057a3558cbfd4\n6e4a5a5577d06899498dc39a5b1a1c7d\nc446a7135467cd83e906ff5bb78d7b1\n9384db12f13af3e4e1abf5082bc04e75\n8978ffe2b8b770c363e66191800dfc8a\n5e4bd1ed44830fb147e5d4c250a3c98\ne9706e37ac92aa199d360253182ac1b4\n9f4c4c60efdb3076d02276f7769397e6\n8d0947db43c20e819ad96e0af6b934eb\nb7ebbb8db6add885e5fd7320f47a8553\n8d5354101880490994deaa9fff391d41\n37681c6cd8bd88d1d04b05b0f20a897b\n61c0df4a0db0a32fe73c917c8db80e59\nf42ef3273a8b4cbbf4f70c928a738b3\n12df496292b5c016f9489a342636086b\nbcf362f325cf658e282dd3b430ec2654\nfdee9fa34e570910f2a8e4598a15f7ce\n73cfed37f9da046de2bb19fbad3e4596\n83dafc89711bbdd68cb93ad688d1ab8\naa724e9dd919edc3fef144202cb2b935\nd79182f4d76d63e9f13eed41b64dddca\nb577e94cb0a28f73e8152bb1bb6e4c3c\n5c1d73e16d1a4459b5070c7ac310bcbc\n85b6261930b2174d85639a40426ad4d7\nac6d4b9549853b509a2ee232a197081e\n23a91d141cd1cd36a9405d5e0b8196f\n25796f85c74347726a34aa94ca8a3355\n5605d839bc4fee8d51b9e8cbda863b2\n404acdd4cbb0544eeab5ee569c9de1b1\n8650b7b809ea14be6314c3b6a3a65519\n9319229e8b90b7d794a57adad86ebb52\n70ec646e9929c7cb9a2ee232a197081e\nc41ea087ba71931967a4cd2863eb1ca\n43e2cd954ae1e3ed18bc22abef3f86ce\n48f60ed3a4e32891fe00453e7ccbcad3\ncadcb2e4e882ce75dd0a2071dde26395\n41da6bb82abdc626a5aad165050e534c\nc5874d1a3b616a641703868bb196594b\n8e36f1a160e0b98c93cea328065cbce9\ncd4fe695c04daeda6d976be0196645ff\n87f0e810c573b90c803b54e9738b20a6\na52c4c07d951fcbc3068951f59ff267e\n8d9471defc6f3a8fe71e857afa9df271\neb6e7e6241c20448a3fb48700889ab3a\n178539e39c6a83efb1c46f058c033ec1\nf5ab909cc5813c7ebe8eb764bcb3c31e\ncf21d9de1440d3d203f35d9b3b48203\n57cd6329f163043a551f49d4582a8d17\n2616ad4d3e8f3ab88af39b443dc477ce\n4d355e20ad1b6eb6e7da0b4c2db4425f\nc39040b055a5ba329a2ee232a197081e\ndcf9d53ebe90d9a85f14a92a8b55f317\nc02b44f51d159cc4a37c14b361202b90\n54e1ce2402c4f754aca4b8a57632be04\ncbbeaec355a86ba9870906b5178d97bd\n63609476aad03e4b9a6e43b878d5b335\n8690ee57423c0e591f3140bdc5d4932\n12038871e583f645af56497f051566ab\nab379b3916c45a78710c119014476e8f\na6984e79681321d7665e26d8660e8f05\n8527c531b4e23b85819b42f03f652dac\nc89488a80cba5fa5870906b5178d97bd\n282f9e161a0bbf58fe00453e7ccbcad3\n1c74382abb0281e26314c3b6a3a65519\n7d7a915cefca95471db44ede0efdfd5d\n57337a97460a63129d5aeb7097eddbda\nb79cabe03c878d2980c2e60c312b0f09\nfcc1826e28e6f512b9e600da283b7f26\n722051c679217db6f436d0d7fdd21532\n2bab6ea5f35db3a4aca4b8a57632be04\n8b00e0ea294fdedf8af39b443dc477ce\n5c960809f4f0424d217fc13ba9e6b2fc\n8deda7d1c75b33676314c3b6a3a65519\n9cc96465d70061cb94deaa9fff391d41\n66f804b1400a139ab5aa01b641366717\nd8e7abded14c00cef02ee453ff283e26\n9f4658773bf2c31ffbf44f447f38c175\n45e88d85974b540732624d0392494ea2\nb9220d1c981e2824377a1335e81633a9\n5d8c7291e06122c14eb1cb28584abf8a\n81807680baebc5975516c1e9dd717741\n81d26c915198c2d857f253aeccb15f0a\n347c9ad6b867bf885d0dded52efeb4fd\nd147dfc972ff3a8c673a614c45f3afe4\n313b61a27e01ebff0fea2ee98610322\nfee4130baaca04225516c1e9dd717741\n2da91be46310f550fa6c79a0c671edcc\n6afd1407c216151994bdc5b116ecd8dd\n8c4b9320b44f674ab09afb04c84cb438\nbf76395bab45ffac2249915e95f55f08\nc65cf6b063e1a21025251b7dc26d833f\n45a794d26abda59e49c13db2bb1e6735\n337d3642a2d949a4f58d2dcaa6073061\n249e0936ae06383ab056c98b2e5e5e4e\nffe08785458e09666314c3b6a3a65519\na718521e2963077fc24d00518a3dd6ec\nc12e1342d88e78bfdb132fbd93e54108\n272e1f3a719f2e35e2bb19fbad3e4596\n8949412a776f34e6a821a9df9523f811\nada26cb4cb6e0b1946177b6d1ecbf989\n69e59c0feb5415ff71936222e0293591\ndc29aaf86b072eaf1c4b0f7f86417492\n800299ba59951df3527ce7c85e81fc57\n7ca6a11f827014b4643ae903098a314\nb5f4600ef0e9a5a8dd0a2071dde26395\nd4312787c89edb399a6e43b878d5b335\n21b7114455da0bf033e73845251cbf4e\n8fbd9668fdd563f5359ad7d9ce49f504\n69cc7f3dcec397cd3215e5c5313f5f42\n9397ae7d40c327044da9f09deacee7d4\n595fcd065407f54ca97e1deede586e49\nb095a80476a8e002bb9224760a70fece\ncc362ac31993fcb4fa0d7d9af888ead\ne0c6be7a5b560f3af13eed41b64dddca\n75368dfd449ea1d729712ea5520175b6\n6646f169a45f40bfc510111f5d1cfcfe\n1cc47a6181beff44f18a63d96554f7\n315038c85d3e3f4a1a857c47fd0ecdc3\nb3a41cbb4ddaea6786225a62b2bc2d97\n9d969dabaddc27568bb83d47cdb90d09\n157c2b391f7a7dda1a857c47fd0ecdc3\nb8970e3d0eaa2880dd0a2071dde26395\n5afd33d495b111449a2ee232a197081e\n35b5cba53b629223cc2e8ce9ba1c97dc\n11b137bf4816ed40f4c39a35147bf949\n5428fea9cd816d764fe44fa90b97c5ab\na7b088a849fdd41c25975e984b0e050b\n1cbfb1c063b34ab4ab379c9b5bf12bf8\n1e7dd1677a62d3caa672357dc73b83a6\n5a2ce6338b4e399f0fea2ee98610322\na6f0f0aab2ab2591341b8a806253912c\n124fa4277bd03c74359ad7d9ce49f504\nd5734bfe7c57d3bda1bdbe5c0cfcf6e8\nb2c3114a9acd55636d4858690640024e\n3553f6cf76c2f9e1870906b5178d97bd\n60ac11a84e307db07c52b7b7b148ce27\n5aac06335039030132f8337ee2b84248\na0361a353c93899fbe35b76ae96c4b7d\n7b0889c55d482cdcf0fea2ee98610322\n5f8a81e3c0711e087d81debe03396504\nc383dcc4c30c70b41a3b39b07e4b3d0f\n5a420b1aff4cbaddeeda694c82280de\n66e287e1d2e9c9f6e71e857afa9df271\n2c10978bbf84a263b2b9ca36f6b76586\ncfc172b9164357ad42a9381145738f08\n84b9cd6750fd102a9a2ee232a197081e\nc802de6725483fd9ab66079ce2700442\ndb8f1174280680de5e561f212b7229f3\n1c1008be00fa5edb30dd2b88f7efae34\n45f3755b324a97803bce1f290fbeceb2\n20468faa3d66dce03cfd5b33045bf719\na15719f77035596aea1c54714433d676\n55fde587d83088b39a2ee232a197081e\n56141e8844aea9e4d6c7a58fae95cf0\ncba7b6437ab3621ef0fea2ee98610322\n329f6414584d87a999b3da21343e5637\n1ecdd9fb715c6fb2b0a59d0f63b741eb\n736200c1ac8d1c34c14cbe2c343fa431\nd9c6c64bc9b2c1e0a5dd675711905b91\nc4eff07f05998965c79f92df566f8c6b\ne3f16aded8ea5a2fc79f92df566f8c6b\n8f5da7a2501f1018ae1a1b4c30d8ff9b\ne27f87039008855a341b8a806253912c\n164248eefde5ce846314c3b6a3a65519\nb01199433137d6123547ed4d05d19f04\n7f41235f55f396118aa27cedfe9e8bf6\na7de37ac9f6fd8c4d6e401b0db4905ed\n334ee6c5bd30011af8edafa0d47e47db\n1220880371b176f9a06a81572261e82e\naf877a0a066fa63ffd180252c91ed0f3\n6cf13d5b7791b8618af39b443dc477ce\nb3ae08dad4ceb33c16b34c3751bc447d\n156dbdcadae5e010337b0188275140f9\nc57d7e81270598096314c3b6a3a65519\n3d9907c402689521d8a2f3b4102511\na4001adbd9f3443d3a9a4f49cc5d8efc\n262510dc5b4cd7003d48ceeccdc87fcf\n3b4fcf1d294f11bc5db864c34fc9b1b3\nf9ee6c612895cfeaf4b4b1b903442d1d\n8894650164a2222b1a857c47fd0ecdc3\nba405d9633ec030ef27eb335b754fdaa\n71d9d636a30ed1e7d6a22172ba0f0af7\n43dade9260b93b2c3d204f0b9150b384\n8bc74fea7c5e6f05f95499016f29fbc4\nba49c58d6d320357f1cb19f636b1c2bd\n15a209524ad3fcb67b84b9482c4b66d7\nd0eac7ba7e964d72cc34b900bb2492e\n6c95a697b85c6a52683e3750b53385d5\n27a144ab9c20b710ae9e1c81f7e5b0b6\ndb396982ae541ac97f5c403400264eea\ne49e18cbd48a2479cdbadd1af48b5cd6\nc0a429d6e4cc9d0366597c7d470782b4\ncd60840ecdb0138e4b787ba27f895fbc\n85d9133c2be9be93d017eaebc1ed8e2a\n3c42d32dee40f39a1ba59fe23593fa2e\ncd50da8bd34f050af27eb335b754fdaa\na7b3c912a793ddbdd107072754c68ce7\nc044bff4423c7889a2ee232a197081e\n8d9d9b749562c59a9a2ee232a197081e\nff042c9b61e609a78e4ed0a212e54db7\n1cd506c69f575ba530dd2b88f7efae34\n4ec09a25c05bc7d0fdc1361c2b9ae6a4\n2fda76fc28c9133d8428b8de1af34c50\n91ccf1fd54bde780857835988c6a287b\n8fedf1a088427ea8ca3e540900266737\nc36992c1accaeba6803b54e9738b20a6\nd90b571a1259cef1ad51de5d9ac9dcd2\n191f8debadb867fbc24d00518a3dd6ec\nc5cfbac689f8f49310e71dd8027aa9c3\n278f6f0588771123f8edafa0d47e47db\n7ffa338b2693aef651cfdb4c9f126c12\n94386a700272405ef0d11ae402ef940e\n9a6c8702a8f5d01ad6945707de93a7ab\n3ff0d95df1076951385d661539b5c1fc\n874cc0d822e74148b88eabc621107e4c\n31895d26609fb45dfbf44f447f38c175\nc578ba526b8ef653e28e3d2f13cad462\n14a07147c6b74e9d914c738e92faad58\n5b1dd450a929e2823b2b25ffabe35ca6\nb6f2b71e726f5dabab97b3fa5a6b9e6e\n22e4139b7fd37bda2538e024d06c30fd\n2d49519d725de02396e5f13299458076\nee01a3d156cfde95b6f73775a54c59c6\nee4cf4706ce605bd37e67c992a0a6e51\n2150ef6d0dd9333ad1f5735620433167\nbb1dff989d7b563124fcd7bb489fc827\n1fe9e8fbcee0dcc8683e3750b53385d5\n38a906533b048ad8341b8a806253912c\n5b6bf22e5c355592882cef3540bf556\n8c0e6b3a8ff3e1e75427d4172e3eb61f\n99cd8bbe5b2f92fc643ae903098a314\n4bcc0ecc49ac0617525b3f0594400a46\n79008976055024fa93cea328065cbce9\n48cd9104129535283623b64770edb4be\nde9fcce5174bfe09db181f2efd806577\n469427702fd95c3c6314c3b6a3a65519\n3db828bb2a32a5f356c95a1e5409420d\n4327920bfe590d3d262eb9a9badf3c08\n556f1e3652f8c8984a2ac5bbe9a7c771\n2c9de4575938dc88d1987c07c912c6e1\nca4e431c75a8242445e0c3a4b827d51a\ndc222cfc347506ee73482852b5932f76\n8cac8a38e96e3754a59c12bac2e48f46\n3ed5ea03e0eee521bc6e84bc30e573cd\n7a2904413d538525bd337aeee16061a\nd35379324caf0e7380c2e60c312b0f09\n390d25757d6532d5dd8e6e2fb6475d03\nc14017bc897d73f46314c3b6a3a65519\n97e856173cb708ecbb9224760a70fece\n7eb5fbc480326d64f02ee453ff283e26\n43fc3a905d6024290dc2ed23ceb8a8\n39eb4b7bb1d93d94437724fec373d206\nbaa007b1a903fc432ce452abffb6910\n41fd7683b4e722b716b34c3751bc447d\n7c31ae88ca4faa649a2ee232a197081e\n383bd13aeb390df0f8edafa0d47e47db\n4a56ba0b85af56703bbe4035b770f62b\n98ed5fe737e80b11eab5ee569c9de1b1\n8fb4cf2a9f6d0abd8e7e8cfdb2f674b\naa235b7d9006c30de98e3214935cca1\ncb392c32ad0446aa576cd215d51ddd\nfc2f5a2623b4373a83bd2c1aefe617f0\n37914b7cd5c02da8fef144202cb2b935\n6d2761d9749fb354167e6355c6e5b5ad\nc0b2ff6229e1175aae9e1c81f7e5b0b6\n7fb2ec71361813bfcec05e03e317cbf8\nbcc0a71596e9df4a6314c3b6a3a65519\n7787bf25c9417c4c31f639996cb3d35d\n2a18722913244bc3c24d00518a3dd6ec\n47dbdfdcbd971cd2203f35d9b3b48203\n27326efa9e84ca6aaf365ec12406f363\n280896ad10aa1272ba11c8c9c0c3770d\nd33c5c2a6d3c4c64d730d5e13144e77a\ncc380bcdadfc3040ab49837258a1bfc5\na5e62a05ffed4b0231f639996cb3d35d\n2632b2d716be1677914c738e92faad58\n796816a563f04373c24d00518a3dd6ec\n6d5027e3411b23459a2ee232a197081e\n49e4708854f762ae9c27f9a5387b5fc\n7dba6294173994131226a6f096e4f8c8\nc4f95f531b5ab758b91a90edeb58ed0b\n7c8a7f6ad605c031e8398dbacbe1f3b1\n605cfb5fcdef75539e6170029f747a35\ne3a673dd3db3fd2c282dd3b430ec2654\n206b4a7aff5ae78ecf61781659594ce4\nbb95e848c9e1940a2b299c40b68f70c\n7e826b890b683200b63969f9f8d6f075\na5f7776b13c11e3194deaa9fff391d41\n487330fd2ba7d55f97020a1f4453e3a4\n7e13df65e9fdba575814fafedc6971c7\na86e3d993f82d44018a76e4544dcc8a5\ne63cd617410ceddfc9ae1c09f478779\na11fda24d699c02f75e83577a23faa92\n6bbfdbeba3b0273316b34c3751bc447d\n26516d0ce97296dd49352dd33f95cb9e\nef46f9c14bcb69193a3a90ed08de76ea\nebd426ae34b743f4a50ef3fc203c6ba0\n397b2068e029945216b34c3751bc447d\nd1e786e052c26ed3cfb3f4d4e98ee41e\n900211102042c2d8fcfb3ae2df2f7efd\nad5165b445e67c06cd1b85350f224c08\n42c6d1184ae147ce6e00f130b3bd101c\nae57975d9461b324d10b86bd6e8bbc34\n6b0c761060feebe4affd759bf1ff6b0\n51b6fab73fc9ea886a34aa94ca8a3355\n2306f0777527603722267cbd3eded69a\n83d1b16c362e03ee99362c38b018f042\nb76c7921d0fba930dcfd889babf6a0d4\nb12d95ad4abbf097e149ba69dbb3f6c3\nbf89af91f6f699a3b758d4b2d9dccb00\n744064e205da68779180711d39b16e1\n68c1bcd26d43d80572cad024c77ecfb1\n180846dd3deda6785127e0873cfaa7b8\nd21247f000436a8a374d02834a57040d\nb9b2f960a937bb22643ae903098a314\na299aa2fee9a1d297ca8eb6ffcff94f6\n7bb85cdfb1794a5712b38b1d99376c0b\n6bf9cdb0f879a8f894deaa9fff391d41\ned9e0161c72f98d5def607f4d4140edc\nf1bb43c7758ad37c12b38b1d99376c0b\n2a58d9c3a766742cc6f30d9ee0d5574e\n4e4b42da5513ecd175d25d68bfc74949\n30621c7dddddd06f42a2e92acc266edd\n7e5c0d35215be21ff3998727b15249db\n384d3caade76bfbda84690bd684fe15a\n27937d4b55596d689a2ee232a197081e\nd254cbd6f2e319ced348fc2382f06377\n5835ff29188f0f493bbe4035b770f62b\ne62ccd699b99b48a58dc97820d1d9537\na83bfd1065f7dc34176d7cd6eb76e767\n84149440704cddbed735fa1ab17311ec\n2b997d20df6ec1b7e290ca81b042ebb4\n8ac5aa7414e3c30030dd2b88f7efae34\n9b9d03274e856982c2c44977d8755d41\n3aa24b3c616c2d649d5aeb7097eddbda\n5ae6db470db214b258dc97820d1d9537\n144201418b5dccef1a857c47fd0ecdc3\n7d286b812a03c60e310bbd45bf9024da\nad209c1cf7e2cd6249352dd33f95cb9e\n8b8baee427b1adbe30ae8c7dca0728\n6bdec3364b44e8d8ec69d13496bd4a34\nb4f152116e77505d202b6e2a481f1de6\nf50efdafb9e486f4519f927f2bf92da9\n230851bc45f916297c9aa6759ab09b15\nb128968ac3ba7207210b7d136d269713\n8adb587e61fa424ad199d75ecc2a48b\n43c51dcb5c9c812ec1385c8c0f4d3915\n1345ba2c3b27ba786bb9681d4604e123\n75008b972144b426b8eced526ddc241c\nd5714c28b82df83d8d5783af2345d2c1\n213c8d7870b4bddf320c2b53dcebe82f\nf05e17d75e8f3e2ce378cd9d51dc5be0\nf0cdfecc69f4beb7fd434dfa483c57fa\n2d2f48b293f5ed5d40385522d1beeb20\n65b1329eee48bd00d87c63d8b3018b58\ned01d61bb0439a33b4cdad9a5bf52dd5\n9586fcb3437ab068e1abf5082bc04e75\nd27b357966e47647f8fb6cb99631d97\n899e86a8dc53568694deaa9fff391d41\nbbe366b82cec5894c082409e8305f221\na5b31577127d77d28653d927a24ffc75\n48bddbcdd626298540385522d1beeb20\naca833639091b256922309b37ed10e7a\n5f68ccfe85cba73d2a23d93958262ccc\n897084449b84192db449aac65ff63543\n36b65f1b9161a5f231f3d76ec3df45bb\n51a327bfd4cbf109a06a81572261e82e\nab0fa4305623f6c3cdf27c4099cb6beb\n242a543a598c3d7a657e1a784010b9cf\n733fd68ce2fdeeb76a853eef701ef7ce\n6efe78a38abb45bebab70e35b0e13530\n2f8a672751f8c284a5d999dbf2c5fd3b\n86baf335855c96d212b38b1d99376c0b\n7816689726ed8bbfc92b24247435700c\n2757f06b6b4d3ca3f02ee453ff283e26\nf3298345f6d6ed3dac4f72bf08dc79a6\nfd00cdc539fded38ddd7320ddee77bde\n96b74853ff1d922f42d160994fd6c822\nbd48edaecaea23d65814fafedc6971c7\ne3dae8ffcbcc498c935777dcb8deec2d\n14ae67574004fc83dd0a2071dde26395\n5ffa1a012a2b18fc83b41d2cfd151bad\n4a90c8a6980c9b53aa6420fd028bc571\n5f03499ea2b4adb5857835988c6a287b\n10a2ef896a45a682ab379c9b5bf12bf8\n5b5acb01373af13180c2e60c312b0f09\n6f739c0ca5834e825dc7ef8b006fcb7e\n8872698c6eae3a8ffb8c26d5226415eb\n45f97261ea66fefd302ca88f2e083254\n37cc0262192286c2e4235a2d12e58a2\n5df56f5b5c339b15df46f2ecb43811d1\n1068169d0f5df80e91cd21d02e676faf\n4696d7e82c49aa2a7b6175b1be6bcf01\n251deeda2394fcbc9c96fa78389d2873\n5d461974aa75e99fd88db40a5e607f21\n11126129151f3e36afb1ffba52bacfa2\n30a009a1877c9ae282a52e2a06478500\nd9180361e225bb418bfbe54b5d01550\n8c2748ffe88d346ab9915b62040615dd\n96c60386a5888d2094deaa9fff391d41\n9445546f0d348b2ddd0a2071dde26395\n4539958ad62e662ed197ecac88773a00\n38bbdc92fcc8e310405d5eab6bdcff6f\n723162e8e15f4ac55d0dded52efeb4fd\n97291a29f435517db6a44e5c103915e3\n2ce39c653c42982948b7bcada24e2926\nac13748ced7f9fca86b2bcefc261a7ea\nbc79d0cc0c27731a3a04e41b7ea7de8d\n56026588e19ac1ce5109391625c31397\ncbc84bcebe71e468d398c75d8b3af045\n7da1ea50ed1445ce2511f68da65f4c4\n4ae8bb7c50daf1352e4df18fcaa65e04\n94a58b162f17f908ecbf498fbf7a2384\n62217abb02b74e9deda1c1890030d195\n1f755931c16980e06ea2d3b1b25fdbb7\ncee56f2ecf92cdeca0834a5219dec81f\n460ad09b269895f73f82da5dbc1a5004\n3d4d7ae437d1153317c2892ca017a9e0\n6ef67d1906344eda9905a3939c890ad2\n5f69d649d9036be626b78ab29e6b0231\n2621cca0eaf82143f9014984f90a7387\n727b9b62c52fd7d6bf36cf6ce284411c\n9b1d60945756d2bd33f9b4d665d32f82\nb754214217c4405dda6cae4e030ce341\n4223e38ce99c160724270d533c13dba3\nc2ea3ff598b98f3f4528f6465fa2466d\n3ddd478e24daf437f99860cd321d6c67\na4ba46bca40afb3722fb813d47b359e3\nfd0e1e7c62efab3cbde9b246866ffe11\nc44c0319f2f31c455814fafedc6971c7\n602c00b06f2b47af8bfdbc9c53b14228\nea212437514740bb8b700cf351204203\n3c9b810025d7167fe641d7676ac20451\n85e714acb678fc59ed6071560148e6eb\n2970d1dc154363735960f9d4a75e81d8\n2a70089aa6561ce216cf8b1cd2155e02\nb266dfc3d3d3606dd281b302c458427\n8456aa006d740061bd8fcb0281cd4d0a\nec372fed4900876350c27b805d1a86be\n37f8e929e458d0a9c2c44977d8755d41\ndd9586cd8cc762dbe43969badba53c7b\n73ce9a5617acc6dbf1e0fcef68407ae5\n9b59affd52c33944c6c1e54aa8170142\n710148ab44c6e48441c4ee8eaf0d3f6e\n914cae3548759cbeb351750c5651f2bc\n5d806f9cfdf29bc640eee76592e4bb9f\nd90fda1aec4042ca42b011d8a1631bd1\n"
  },
  {
    "path": "data/filelists/04090263_train.lst",
    "content": "5909ebf625e0d04dfd6d10d22bbd142\n4c41c172046a4a5e9a6e43b878d5b335\ndecdf532717c45767a9bdfb16682d944\n528bc52f211ff34ed2a72bb74eb549ff\n271e58c2650147829a6e43b878d5b335\nfbc88753c7697b825e4f1f524019c\ne4540723eab9ff0bef0c52e20895a77d\n72aaf4a05a6d988412b52a369561019\na1f46e16994569d8743d370dddd1ff3e\nee4ccd4b40db28e2eb068a83f75a6c3d\n74b95139078ce0dfacc2abd6f796df4d\n2cc92e68121301c4ef0c52e20895a77d\nbf41504e86804d3d861bbf60d7f925f0\nb7e59df21f4859281a857c47fd0ecdc3\n8cff3ca8a9a250272472dec3b03e0eb\n5dbe96b00f0d7b201b8fee1b14934c0e\n12b346d7a60328ba9be47ac7c7e37815\n846075a4b76fe0c3052214d75e02efc\nefa6700a7609d9a59c4feb3f1af9fe7a\ndaaed98e5444c849a50b91ed3855d17b\nda6ec2d5f4d750303d7c323cf1653143\n6454206429467056cfe6670bda9305bc\n7083c94366b7c405330ab9259a8b176\nb1a6f690b8ae5ee4471299059767b3d6\naeba4ad00dae0c78c79f92df566f8c6b\nc8a74709a6a0724f96a9670983483761\n5ba39bccc3073c11e0a54e072367f4f4\n53b50183730125e68c0007e5a8235290\ndbdf82759d3a0011df6f54267ea02d3c\nbdfb8df0d6d316012b38b1d99376c0b\n75ca1520edb6825d12b38b1d99376c0b\nb65ba6d3f77ede2d79aaabe4686a1aa9\n42aa9630886c7512ed6071560148e6eb\n177d48f6f156193bdcdf952acdf10f\n6d66b80890d7e5c310a7d517f2e735d8\n931f74bd98683d493a04e41b7ea7de8d\n232beffe2c94564b678808412fe4ac8c\na5335cd2243b2d8312b38b1d99376c0b\nb151820ba72ad964fa9286f039319ff7\na5bfb8e604bb2d8173db096a9cda49d4\n20cbbde170e264f320152153c3a56171\ne5a2a579e54cf1bad87c63d8b3018b58\nb28e6d6cb4bb868ec27f2d9f006d69eb\n313b30e96bdbc29cb1d04c72ba966611\nf8a772a405e76adcf02ee453ff283e26\nceba1f5b53f3c3f0a4c018b03e3993f7\n948d90262559d560886a4efa4119c824\n587cee5495322f18cf1584c5b09d332\ncf51da336a5414031b8fee1b14934c0e\n2068c2f0972d82e569f9dfaaa2301a49\nce43c7f0642a72a25e9786b1603f45c8\n206d81abdbdbbb5c63d83c622f45f33\n3c33a0754d1c6a71b9a4a5375572bf62\n365589510c76c7cee603a5ccfc8229e4\ncca52c1d48b777b227be842e82df28b3\nb26c0df3e57ab7a298a1a2453e72ce7a\n17733d33502704ce9555419173518aa4\n1fa5a9170bb276e7fcace4d823343363\n389370f7e03b6312eb73ff4c9e061b8e\n176b7637e807853d34ad43a472bf958\n46ac5939e2eb53189a3e2fa8a8e389f2\n196b2e3c66d59cb54a4f87aa9a31cd70\n149785138bfc9c2011f7dcbb4a32aee5\nb06d8b805dcfd1ebe212dc904164c2e0\n8128e1bfcc18d4769a3e2fa8a8e389f2\nf2e592962a9df3de1d27f57617a4976d\nec688ef9a40c78451188f2b8eec55c9f\ned64394470cc3075feafd6f06fc45258\n64abde6390fa65fe26ffa6f51f050119\nfddbba55cea838b9b2d09bc8d348e46b\n65b8974ca9c4d73e34c4a8f12da88608\n346d1a548be65182a67ac8a08d7e171\n84fee75d9736808afa29682ba98e856d\ncf5538e2b369b7b33ed6ca821e0a9e81\n6cbf83cff8dc7b23623b64770edb4be\n6ab8bee75629e98d2810ab2c421a9619\nab4fd00b47d9d6f4fb5c1b0f759e2bc1\nc224535cfe42b795a39dc4a567ce225f\n18807814a9cefedcd957eaf7f4edb205\n7ccf43d35755a35976ad064d1c5fdd7c\n79ec181e02cfc63af4de29b99f103946\n76dd6c8a2cf09887bbb7f70943d3cb52\n7bd5febaf49a0cd44bec850c6c6ccac1\n3728ea8fca746a8d52499cf3d29e4e95\n63ab37430cb66270b5666ac9dae008e8\ned502e8af9df3df2c933c3e835f6d18e\n5f68383c820c1bc4a67ac8a08d7e171\nb0ec853833d21d36859a7164d38b0d13\n851afe676885dd1dd5c93d34ff51959\n8cfac69c394c3cf8de423072102e0bc5\nbc8ffdeb04d8526e1f2a1daf140ac9f\n259edfd9a26c68104c16ba0acd861632\n1723dcee921fd152d43bb185feff0470\nf8ac577e9f60ccaf3e7a62ab2a088af3\n4aa568a12086e742fe773002d2182b7e\n80915054aeb243259747e122424ea8b7\n138cbc9b5456cfef55d33831e71fa52\ndaf8f85c017aa8c3e1f2a1daf140ac9f\nb73a819d88bde44c24d00518a3dd6ec\n9db0f94cbc2ada72847c4fc4f8c08820\ne21bcbde60deaab7716183d105fb8ab1\na1f65f97e61094e1202be79d8b285c1e\n8571fdae210bfd6612b38b1d99376c0b\n809d2439412bcdac896cb6094e2801d6\n21f013795d1b241d525cc89e716770ad\n6536ba618390e1688e4cfca4542c1342\n6529b6134cafc299d43bb185feff0470\n1c292bec142b39a5aea3c9294e3d898c\n3222936b563fbccddb83191ac0ff763a\nb69973526e91e3bd68407c8bfa49d3c7\n58e1eb81bae67052c79f92df566f8c6b\nfb9a94c179ce70c4561dce3fe08634b7\nf04dfecd1ae139a23e7a62ab2a088af3\n3387f6bf3cc73546434837e2aadd6d77\n471f57562c00a5c7bb6581a048a6fb18\n257fdddbd7b231b15063ff48525b373c\n55171896c70646cdd87c63d8b3018b58\n2cb0634dfd39f71623c02c1a690f1e7\n4d772170bb26d40ea36c408ff083fee3\nb27b78d3e1c97180fa9286f039319ff7\n2859d1753713558412b38b1d99376c0b\nf5a561a38af6b829b3066d9a2ba0c7c3\n298d300e70d6bf24e1f2a1daf140ac9f\n86886a49bb69dce3fb5c1b0f759e2bc1\nb0a050985a5ce6be25508ed649b952cb\n34eb31e5ac8802246f2614b47f532d63\n36e0d91630f7c958d4ca42bc1bef451\na7072394bb9d23f54b49cd65dfcc3a9a\n8c9e592c95f95e7c9a6e43b878d5b335\n686be742e65eab7816cf8b1cd2155e02\n61064e4a00abaaec589c07868201b17e\n1e83ef6ed5d0b78b7efb854782e23566\n235853d2947a90e65e9786b1603f45c8\nda7f89368a80ce9e1f2a1daf140ac9f\n47db3b9c4b94ed61223d66e29bde9a55\naa47591498e4eb615dd9d441afd49974\nb47d65a7c6234d06b349bd01da88f0bf\n640bfdaa8cf5e3cd325474a1336ea459\nb50f6037b0f9b86879d9900c00629c24\n9b570b06ee8a7b6f56642b7cedd4edb3\n172a4e03c151d14a9f433921788191f3\n411de9a0a7a8e3e9a0d6b294e290074d\n465746159129abc7c0d38eeb2893c7a\n7864fa7de2295d33e6e039bfb82a52e6\n734c46fe71b6021416b34c3751bc447d\n2036799fd4fa273918ffe448c7d16fdf\nbe0024e025b5d75024c5c134cb8fdbe1\na11f9df8336fd83e5cd09b5ae4a3c552\n702b1c4aac9e825f51cfdb4c9f126c12\n6639f08c2275398352d6d9553235a14e\na1a89a8cc3557d373fab9f1733a68f6\n9b19164c5b17f3016da79efb34b8c0b4\nc26b1d42bad81b6397fd8ef0d14ce047\nb7f7746fc15d67343571d7763ba5a413\n6e0e38455b33bbf7632bedb12ff8cfc9\n6d247b103dece20af500cc506a763c18\n8fca9344f9583ed9f433921788191f3\ne776209bfa7f2844589c07868201b17e\ndc263bc31beedb09589c07868201b17e\n3564b539a24a1b721a638d3d0d97d12c\n3d7dfeb58c481e88e16974ffd95b0c65\ne818959be12871d461b28e02a259d647\nf1f0a765def9499c6a2345809e2bb169\n39c1ebbe7f6f1d5f4a4df88f87b30520\ne5221bee9996da87d6964d5ad6a822d\n56737c6d611f2a8465a6407cecfc902e\n93de686cc189544335a8ac768bd119f4\n840eba6d395c192c40938a189bac3257\n45c5c36e3736d3d64e868b194cfd912\n604d962eb17dfd5166c0c88d96ba938f\n2e7c6e5ee2f07f3ce19905e7053d006d\n27c9d26c58200a1527be842e82df28b3\nc88aece300c3c4e05127e0873cfaa7b8\n596c401bf2ea21e55e9786b1603f45c8\na7cf230b5a2967125f5038a2cf78b1e4\n31a0c1adeefa95f488b9635e60aa884\n891731397db0b6d36669f41869e0668\n10639ade9179e38d624a9463cbe27c6a\n169bddb624e60dffb6c8238440c79e2\nf2e64c42370475cd52533bf53842cf9c\n82686f0ea15a7c24783a7c2adc432e76\nfd2223d0b93e34dce3bdba9430565083\n1c6064f070b55dbfa449921c4b97dd7b\n8f38c44779be7fd4340b66282f54c877\ne61d4911c7142c65d735fa1ab17311ec\n40f9c088e4a4eb77df3029a778e2c881\ndbbb9a848b8a6697e1f2a1daf140ac9f\ne3d49735508753b6ac6a323abb28e29c\n7c6a21d8b91fd12a1b7837f7a64e3031\n6a9fac86136c7ba0f3dbacbbb2e7e80c\nc40d62605e84c6beba1d8c8cfb70e106\n9ce27cd793dd3da29ac0a7e766b7c815\ne07fbeeec2a12fe313b315bf7aba3803\n36d3338314e3db7cf6099a039722df68\nb63023bf7697571912b38b1d99376c0b\n97532871e6ae97d8f0e1c0df18936d05\nb589b1af4eec862beae3ab415b6ca18\n98882aaa0d1b597127aebc12b787c594\n9dd3d881c473a5323666119626b2af32\n1d50f114691be38fa9286f039319ff7\n4cb322a9a37e3a4d1c1943a82a09125f\nf3004f6eb2e5fb8eb7a51049b27f4bf4\ne42d10c193cce254719aed4531d5366b\nd3a7c0fd2e4418861fe7d5784ec6d0eb\nc2acfd34d7c030f5dce23741b366d6b\nc9b540abc1cc7a107d0c348381a9a6e4\n1fdccad4c0b826680685c30eb1daeb1\na38da7d4126b4a4912a8e5e6e6618c8e\nc755cce8095ceaff4b49cd65dfcc3a9a\n403f8de536d9842222b13c48c34706de\n1caf976f39c934f1589c07868201b17e\n124f09d314c2c229331960c3710d952\n48eaec39f20dfafa7e270f84701afcd4\n15c7233e2e883eb55a443e4394e3a0da\nf8aedbd628e010a64033826da8c9e89d\n1690a5959e2659d165b14b263bdb456e\n869ba7b568be23521c63053ffe1a64a7\n60db20e995801bdcac8247d8f020ed1c\nfb62b780ab54dbaab20f6e48f6a30cbf\n7ce9eecd689e432892cea77f96988ae6\n3722e5b8425d025895f22290198b089\ne55bc0a1b57acec4a7dd22c0aa3913f0\n98375ee901fa6ae4e2e7039a6accd4c0\n49429e1d1e90c1ca202be79d8b285c1e\n339ae95cab075926c1fb6fdac33c3f5\n2cf699bd28ec65dca58b002039bd187f\n2a1f207a0273683c9f433921788191f3\nf5a9d847f69449626f07a69f0bbe0f4\n2bdd7783684aeff0f3ece95ce0e0247d\nf3ffbc00ec1a1aa7ff5653e278e7cd2e\n6d7b8924dd47dc6e7330912d1744819c\n7231363d3ec4da1c9a6e43b878d5b335\nd0f3ee45d483cd659f433921788191f3\nc4f3ee55952e49ae12b38b1d99376c0b\n3b3839d2a22ffe94c5a12959f98a115\nfaf6a45b04c24fab1d9b004d9d8d2781\nf92b4caff4bc0f6d9352b002a7d38daa\n19d5298e49eb6e5a30b14dd156373f09\nbf22abe4fbab4acd91d13947d0d17396\n8ec7ce14af18580ea5291b13c05695e1\nbe70ada7701ea798a8d379aabc8e63ca\nd03854e6d6c6eaa19be81fcc2b07ba08\nda2799e2d7b9334ef0b45b4b4c7e33b7\n14139593048f806e79093d8935cfe4f0\n8c0827d07d79165ad87c63d8b3018b58\na99df9868677ced6ffe50f88045d4553\na8b65f50dfb2a74a9a6e43b878d5b335\nad945e636e38338d8aa7cb0651220ba4\n9c70690a9d79a4d412a8e5e6e6618c8e\n84ab70232093057c12b38b1d99376c0b\n9cf5486d4aaa5c0dd107072754c68ce7\n193520be26b57b77a5f9d279e263a051\n9a5e20b8f1881145d735fa1ab17311ec\n197f8aac538b6f7327b14e46288c9d26\n74a11a9b7ebd4baa424c267cd8f453c4\n5d40add22ff7d14c77b7d0d4764c121d\nd2f505aca92ee65fbdb8512730b99253\n8f905b2da32727682a2679e9ffca8e38\neb1655ade2554c156e49a9db8e76daf1\nd1508875426ee5f3d87c63d8b3018b58\n4d1881a99b034305e71e857afa9df271\n12a5e976e028409ca67ac8a08d7e171\n15cc5a007bb325a3405d5eab6bdcff6f\na262b6955756cbea34250dfcf5a9a6d5\n84de9995b0a416b5fb5c1b0f759e2bc1\n2300f57a06457c092235a9282623d937\n99a3238af6d1b857178b53c3b6bafa41\n394a97c4ca0132132bf26da672b84220\nd5322c4c21c1d16ceff31787d7394ead\n6075b98d3dfb0bf5c1ff4c99e4dddd02\ne8931ae7d89ebf11d1c304326f7509b\nff5319e43471e9294b49cd65dfcc3a9a\n99866ea1b82e18c982cb4f2e118e48f4\n4ba87457899d8385d735fa1ab17311ec\na45b989db049e503a04e41b7ea7de8d\nfccd8e7b6bb1a6eea1ce1dd4c7e01188\nd88c106c00384130fb5c1b0f759e2bc1\n9b8eb0dfb6dee992572dba079470b351\n2acb7ad7112de6c2394e22ae6de2db18\n357f37fd725c0fc116814c0baffb6c9c\n6f14f17167243fac5427e47767269c4b\nc9ee75f15d7f6bd13623b64770edb4be\n82267e9766dabdd653fd2f31e6ee4fc0\naf1778e415b0e0be20fc54d2500eb7f1\nfb686ac45c8e545c8d1265a14954deda\ne8f32ab6ba9ab7713a72dfa25c767709\n214dd04f06d5683ed17373579e6fd9be\n58f7db3c6be48a83537e3f6cd50ed63c\n43d4e6583cef197aafeed2d6e5e28a9f\nfaa1fb485ddd6c9c8bfbe54b5d01550\nfc1cd79a8643fe66def607f4d4140edc\n20d48326842d7c601274aa253a241db2\nc4787a48747c6db1cc34b900bb2492e\n577e1473bbc1e2654fd8f930cee8e385\n58613784e5ff705aa74a2c673ce55a44\n4b4273fd49971552cb833b31b53d151\n7bef98c5eb45b13c6c1e54aa8170142\na4f94ba638d2bde76227cba038bf7c95\nbfbe959eb045a3826e181e3da8402358\naedd534b9f323b2f9f433921788191f3\n82c241396ddd0232b3f2a90d50e9caaf\n72e4958882980380e1f2a1daf140ac9f\n16aade23487b928b8084b8c11aeb922b\nd032874b5c3129a313b55e8563d02319\na9e1e9c25f250b289546043a05bd4e6f\n8935329f244ca398cd89d443b4b6353a\nd8e7f4c92af18cf2892fde398a8eab7b\nd2aef97be32d8118433d7c8e9cebd7c2\n4a8f8e108cfa6503202be79d8b285c1e\n39c4214ab44383258a3dbbf31a87b8b0\n9c0a483ea22323c78ca4596df3cbf136\ndcf13ca83d9580bd44c069e8827241aa\na0e251b5b4305d49893bac51482eaead\n8ef53ef4767baf0d9af0e0a4fa12498b\n6aaca4e199c1f84f1087ca95a9795303\n3e0b251299b8696592cea77f96988ae6\n7aff2693a24b4faed957eaf7f4edb205\n2f0c7483f4eacbf1c03d8e9f14212b58\n1fe5ddf1ca0fde916b2c8bb96250e4a0\n5aa0e518413524436ea2d3b1b25fdbb7\n2a2b25ca77af35cf30dd2b88f7efae34\n973a961200eb14f1a64fa3a308f2f098\nf5472d552004345b51cfdb4c9f126c12\n117be2f79d591136ed9c5b25fef60d04\n2b44f7b45ac72b24683e3750b53385d5\n32d8874aadbc73daa50ef3fc203c6ba0\nfbda020053554eeceab5ee569c9de1b1\n5833fa72da0bab839c82b3f5ddca589c\n5e2661c632995b4e40c568d90bfc809d\n5128892dbc0e8e4d12a8e5e6e6618c8e\n11549f435b7454563571d7763ba5a413\n128cb9e49c7e214ef2e947b62e6a6cce\n61f01c585c581fdc8ae8d8f46e8d6c0\na4d1ad2fe0d98814e6cbbd79676d8c68\nda50ca3dcd5aaecd8bdd85f9e4c21fcb\n85a1d16ecd3989cd2e3059b0e19cba0b\nf5f4d746b6d0b8f59f433921788191f3\n1dc7cb6866488d93cbb897b3e6934456\n7c10b90abbe17fb9935777dcb8deec2d\nfaaa98e92d722d0ba7dd22c0aa3913f0\nf74ef838b3d8388b03509f6d3647539\n6571520aee22fe52eab5ee569c9de1b1\nfb62c74f88a285a712b38b1d99376c0b\nd11b1767a70922edb99f5bb707709184\na4a62998899fcea2fccc89e375e776d6\n39ff99d67fd7eb1f4aaee15c65289469\n8d65e71e5f925fac58dc97820d1d9537\n42b231fa5ac25f7dbac3a27910198725\n6169b7bdb2a76d471ee416ae4351c7b\ne1e43d3916a7e19acb7b0ec95e9a1b02\n2b22712b66d3f1d7fa9286f039319ff7\n59ff0c5e24abf33f25ff9d2d1e4772c3\n9fd0c3cd4a6a4afeb8d88853b13ee149\na85ac77659985978d43bb185feff0470\nfae9667f8fb1217d124c90ae3e698e4f\nd421d54e21e5f9edaf56497f051566ab\n61204e00cd517e4e9d360253182ac1b4\n19e16b7050b25507d43bb185feff0470\n89a5c8583b2e2306af646833cc36618e\n36846ef535bd195efa45f4d7e1ef7d0\ne9fdc6039ab91746580389adc8c1bb70\n84f068d182437e65b7266db39263f546\n2a811e61b3d6ce11c45f65ad2adf422c\n3ca8b397052d4da818336d317bffd215\n56d737fe2e8ec9d81fa5c14a532505cf\nb5aff534c7df4d86f06f0427d3aa3395\n360f8314b77730336edbaba04282b1e3\n27df401605241825fb5c1b0f759e2bc1\n7823da328516db23394e22ae6de2db18\nc7774cf7e0e74fd2194ef2821d9a630e\n6e23faad8bff1e12f7bd077790d66b82\nbfa059271ad449e13cf7a43bad229f6b\n9bf95da67ffa58213a653cb492d78488\n638b5b75b9e7b0c4bb6581a048a6fb18\n407324b2f2b89934b5945297ce426f02\n8cd9afeb654c89b8fb5c1b0f759e2bc1\n973181651497efa3230a4d129580843a\n2428abd6cf67771461cca2fd9af9f2\n4a4387ccf5b0b4a6589c07868201b17e\n4c9c33529e9a555458e51bbf75d8cac6\n21acb1cc84ab5e5040aa5b072f9ee3d1\n5b37d0eaee45e12cea768093544ea6d8\nabfec35b505a92da64c4db7c3b428292\nf6f254a6b02ad5268fc148cf8ab667ca\n7efdd44bf9d6ace13a653cb492d78488\n55518164337571f9ad0854712de182c0\nceee9df336427c427e1ff5b356a80cc6\ne3a1e9f4699dd059d9fa04bac43c622e\n641157eaebb2183ae96eacf8990e6676\n3190d8d6542e51fa4b349e4b3dd5565e\n8ec183fdbf3fb696e1f2a1daf140ac9f\n209b87f6aa188df0bce41980429512ac\nd835a2aa71cfd29dff790997f2048517\nc36fa9da71beb581eab5ee569c9de1b1\nc4f73b23f4fa46364785ea41f043d735\n4929111d16135ccf613792009f64ab4d\n79e07478f6a0a2305ee5dde2964c294c\n5ff5a86fd864ddcaf0e1c0df18936d05\n61403e9bbd37636385076c97ccb96169\nc2be1232f61da4b6e79db68bf2508b3b\nfbf5a7f93f70cfde12b38b1d99376c0b\nce351c4fddddba2a7dd22c0aa3913f0\nc7b9e0958bc8f2ae320f9466abaabfe2\n68b0af57466b5a0d735fa1ab17311ec\n2a525d9178f347ce5ab27081157ad594\n18fdbd5f5448e1eb9556d0a8c8dea494\n89f53c736eabcca966c0c88d96ba938f\n3cd7545839d7c7affc4536f2bcb40d3\nb84b0631fa25958f67ed496709eb9df5\nf02cf5cf3a6c61c7d735fa1ab17311ec\n232a75ecb85c7fef6c70dd7879e7e453\n7c07a31eca316cb83f217b945a063dd2\n2e0fd9303c251ccef02ee453ff283e26\n3da01ac97bf8e71b12b38b1d99376c0b\n1f4f948abd74399572e9add3b9371377\n4e817fcc0fcf1ba0b2d09bc8d348e46b\nf5a1080ff36f7b8c38cddde805fe966f\n268b57eb7dfa94a55eec6d8d24f1fde1\n8a669ef9b92912112b38b1d99376c0b\na8e185dcb791be07ebf69cf03ff6f737\n804342eecbe40a4c79f92df566f8c6b\nb519a23d82f367ffd39cbbc2eb28bad4\n8e40afb2fc5d8b1c91e284193311f752\n377f4054812dec1c9f433921788191f3\n49083d2b9f3e6222bde9b246866ffe11\nfc0cf8eee4c33cbcb53b1ee7df9d3a60\nfc6bb157d603772d81eae2a60736179d\na3c96f18e2aaf2efcdd76170a7089b09\ndb313451e6581570e16974ffd95b0c65\n2ad7a0bc552f1df96b2c8bb96250e4a0\nb8137473d975e1a23111ffeb58c3d257\n333ef51861a0280a561462387555febb\n6c51211b773c51cf683e3750b53385d5\n96013016f3e33bf3e1f2a1daf140ac9f\n1690354ea489c58e493055786e8f9359\nef672b394e09257d719b648239c8e160\n8e461cdfdb0536e1b5666ac9dae008e8\n91729b92eeab3fdb3a653cb492d78488\n2193f3624198ede23f0af1eceae2dd4\n69d0e94a5dc3eeb3fcfb3ae2df2f7efd\nfaf37c99fc99b88ba3e868f66b3e92fb\n8fcd6435e32af3f729454b854b87bde8\n55fe2a8c65c9f24424ee6c77dead162b\ne98b64d14d3fbf40b4b0a5ba224bba06\n152f03b7d3eb03c8276c3d558130f8b4\ne63bbc4b3a28f6fce5f887ddc636e202\n9a1bd54ed9acf1ae73ede6cad0df9fb6\n2d1fee5d2dfc73cd231b1db6fc883f4b\n35f61b951ad15590d2a0074bc2b80d37\ndfc1c3367bba345c45727cc98c29a700\ncac1edcba53ae3d16b2c8bb96250e4a0\ne892f50659fc9f8ad33dc284f29d8394\n42b7e8c381cb392740112771efe22586\n71f31b9a96f1b312ddd7320ddee77bde\nc0e05e56826d5fbc38cddde805fe966f\ne9ee67ab2cccdba5771dea817d9f8136\n190ce4466c6f4c04fa9286f039319ff7\ncb35c8f7c723d041916965fb9c37252a\n79e15b2cae644af4e8d3100f6970279c\n6af8538d532e44237b1f1d03ed22f671\nb28220a981c84b25427e47767269c4b\n67f67bc8e340fb23cdbadd1af48b5cd6\n642e457eeebe04758480c9cd0a5e2175\n5005f42fcdf718e558f55d364b38127b\n9a8186e85c80d89541deee31792586bb\n1a6aab87fdd90323d810dcd63f342aca\nbc3dcabc80b38ab6ba3efb88a329778b\n3d76e67762cacc714b49cd65dfcc3a9a\n584cc870ac0550e87a268987b1e73ce0\n2fe46eacc06b51bfeb8dcf90fc26e10c\nc51600abc4b5736ece58fb8fdf218569\n5cb8be7d0224277b74e18e0e7a19212a\na95a7781d89f271a6ecdf20adf3e54ce\n868aba7b4da060a3683e3750b53385d5\nb87fa4a82de9567af877f04737ced5b5\n7713f61fc0b829f3e196b48bc93a41a\n26744766d59c28fb6b2c8bb96250e4a0\n498b4043ab8a0675e19905e7053d006d\n22bf66e440bdb80c3d7c323cf1653143\nec0706775e0585fe4c82ce83dca284f9\nacc7a95f567e94355ce192ce2ee187bf\n44f2f626a4c73b216314c3b6a3a65519\n29c57a599a25868f57c012eda7b00ebc\n52fccffbaf93c3de71e857afa9df271\n6c56be203155b9d2c3d04f57fc87fcb0\n56b2a58cd5c679b35da6a29f026db97c\nd7da6065a37b9b42bc352a3301e817d3\n99c48010cc0c6405e1f2a1daf140ac9f\n86873de47fac054612b38b1d99376c0b\nc42ca534ab455a778625e5523ac2ce12\n546acfcb08d2af05be90eac69c95aeea\n90859d41f2b4b996cc34b900bb2492e\n59ebbe41c7427a30967ff5ed297c1ff9\n311f3a46111ef5346314c3b6a3a65519\na7da2c6df867c3e91c1943a82a09125f\n69e470b712063a2212b38b1d99376c0b\nc9e48e2db6786fb7c90b07f90175a30e\nf955bfc9ff0d300cbd2411bccc731f79\n7787dec9a3d40aa9c6b36efc015b1017\nd7ac2d2fafd9b9076314c3b6a3a65519\nac1ad4d7ac10f3e1db6f3ca49e992ad8\na5f8af7423a45b293568a24dac4b6dc2\n1655608678a4f9ffbc7bb5239e53ea6f\n607b9d1474c640fb3d7c323cf1653143\n556be45ad32a1f18726ef46500f4c772\n6d026044f6c68821de698295f9180ced\n1ae9c8f100db37692d356a2793fb4d69\nc1d5a68f196d647fb5070c7ac310bcbc\na4d20d766e6bdca4b0659fe8776130e3\n1ad3a8c8c369448c22274f18b3096ea6\n21d6c28c11dfaa72fb5c1b0f759e2bc1\ne998d23c1e691a33a0d2eb90fc1468af\n58f9adb6b5065dd6ad2b8e02a4932f3e\n1c6680f257e5c97498e6e8ec38d9445a\ne5de6a3be440fd1866a9b092716ff368\n1711fdba3382cc39fa9286f039319ff7\n69e884912b10faa880c2e60c312b0f09\n6cd490d9cce62e94d2c901959c439025\n48e24736473ae37f4b349e4b3dd5565e\n1c96532b385e22edd0a6af9bfb470a20\n83859013886286905dca6305fb9f97ca\ne444044f8872e3b9e1f2a1daf140ac9f\nd65e4cc9b69a3ec4691fdeddcb509b59\n18953ef908bc743a5baa05bb713f2498\n5870c596f2359677d3360026d8a2282d\n146529b22d3c510ddf14c6e3e40331e9\n670857f79c4d47c13a6842b1f893c19\nbbdcf803144145e09905a3939c890ad2\n7b1b02b8f71226e4bb9224760a70fece\n8181c6ea706bff129f433921788191f3\n4c883b2d79225a06a5aad165050e534c\nb6cd61c71fba44d512b38b1d99376c0b\n3d8bab78941943f7cfe6670bda9305bc\n8933f22af2576e5b9f433921788191f3\n5ed0e0b4d26a30fbd8990f79240f3290\na33697175cda9f2d742567ca48f0f7e2\n7f9e93c855aec4995e22590d7220b895\nddb85b40a6e44c387a9af63cfe0c0758\ne32501e54d05abf4f1b2b421ee7abb94\nac88c6856c21ab422a79dd7a0c99f28d\n5c646e68fe7981366314c3b6a3a65519\n7f7efcc097dd76ac8c0007e5a8235290\na979bcfe6e057e87696934ac57f77b3f\nba789d3b971e4095e2bb19fbad3e4596\nb0bfc504cf144baf2685de1ac73dc74a\nb2f4f17f6d59c6a53e1cebf83f3f1bdb\nc888076f7b8cb125550a87cda3436d95\n2f2e30fde0c26bb36b2c8bb96250e4a0\n96fef95e1fbb3763276c3d558130f8b4\n6021c3fad833e4e51646f62c9305a389\n37aaff9b0f567ca378d7c0e1adfe122c\n7bde81ebddddd161cba7035647fbacdf\n30a2198addc7de5cedb0c6ac5ecac060\ndc4b75223b732847384cbf852f305630\na4509077129f900932dee48b245ce100\n9278d3daffecc60a8e75bb5638d14ce9\nfe26829c67320001638241f3ad71c10\n4344ea073ad91f7ed87c63d8b3018b58\nfffbe09e4890f8f36314c3b6a3a65519\ne1f94a758b97b728c2ef4561daf0cd46\na4046d9996609d50b8b37cfdf060fff\nb90a8fd2c92f5d26ac0fcae21e22e3fc\nf6e2f5d6b724d8f855f41a702b987e76\n16c510cfb4186a46d44d717fb37058d9\nb7a8d379fa29b41adfb4916f5d51df47\nf53d6eb7baf5a29ec24d00518a3dd6ec\n2315893467e8b5eea50ef3fc203c6ba0\n2f4209998288a4634d0af51460733e47\na8b352220fa53a06a0834a5219dec81f\n8560fbd0b90ff133b96aa5dc23c036c\n2bdaaa66b6a2618b43c62aa3efb9d383\n5b2fc9e582dd7052d957eaf7f4edb205\nbbcaf90d1025714f98ee95803c8422bf\n85c46176f030583bb349bd01da88f0bf\nf70396fbee1bf3f2f2866d10640f3af5\nb1cf5989ae77d71180ac63732535bbcc\nfbff23bb1043116a92cea77f96988ae6\nf5b35e6452c2138de1f2a1daf140ac9f\n98205844a3267ac6423adc2e6f1b28d\n9642b6d77734a1c351cfdb4c9f126c12\n51ab5dcd79ccf3b5ffd7722cc96c6452\n22fd2b354b1d26eb306b3e8b438992c\nc95d2ac372888ef349a3c1009fa79820\n8c43f0fb829887f972cad024c77ecfb1\n377289b4275551e83624215edd93853\n5ce262d2d63b4c56357baa13baa16351\n5e3e2c6779b3bbcf5e22590d7220b895\n3ce5f5a20bae04221fca469af258e053\n65bdbbcd861aa385ac52f5edacff5504\n54fd9a41c1e7b94329d95b93a79ce1ab\n4fd2d1fd9aa1f2e4d3756a4e297a88d0\n1639ae190f0e05196df38a7dd1b448e6\n9ee24e8914555d18d0a6af9bfb470a20\n2ec617c22f8a1c7d96f12bf103d650c8\n2c867f76c95134e6d17373579e6fd9be\na0025e80ada9cf91ae9e1c81f7e5b0b6\ne2d4ef975cbfe84bd9d2bbf707e9704b\ncb9b99a239fa07bb139336f03eb955d2\n73bf687a44580f037f3efc94c2d31dc5\nddca06d91af2db70d735fa1ab17311ec\n8d5c7600f31e45482249915e95f55f08\n68333b503766aeab6171d14862875338\nd0d4e25322d8fd3a1f58b8bbfc791148\n689a9c745c6a776021d9cbc846872d86\nbc74663ae3ef56508f65605792e3e409\n35976b05836b249552c3271e911ffe19\nbf2bf9b61e8eafab30d6a7e7f84a00b3\n9dd91ae86cb9914678cf950c87657866\n52102b24df4b0e09fe75cc28d6fccb4e\n7fc4dd8163f4a67d6327d46d93c637b\nb642c89b7359f0cb66ab132932374f46\n385439035e040c1e9a2ee232a197081e\n2385f3cc7fe8490bd3932d50c4a63aef\nb5afc3eef7f7213250b870543ad6330\nb38371493e6c31ba2e2849ea51389478\nc740e2cadab236e56423adc2e6f1b28d\nc4d201c44ab9b1f3e1f2a1daf140ac9f\n188c3d3b8da2b83c2d4090ebfdad3018\n8a071ea65e9057a1c7c8ce3bef5c2aa9\n9a2d5bc2029c82cc1b7837f7a64e3031\n2b6e43e973ee42ea1080be321101ad10\n7c426a52358e8c1d64c4db7c3b428292\n36299a0fd2aebb5b1cb4c4614a9a037e\n5c64271eb8c09c3a6af1f39296f6a397\n568728cb599dc18880c2e60c312b0f09\n607a6770f3bd10a16b2c8bb96250e4a0\n9e40b56e67c305db74e18e0e7a19212a\n31f4d647d59ecaaa5d0dded52efeb4fd\n5c1d62c9ff844458cac68db180607870\n8f70b211673e64c9c97e9355e94c4f15\nd5e99caa1d8e7c859133e432dd7411d\na51c1dcbed07d1de27be842e82df28b3\n344d200007e2f72e9352b002a7d38daa\n24ba1a3b18e25e46a3a714c763a6fafd\n9e98bccdfb3cedf612db810b4de23290\n479adb86f868044b82771a19d76c960b\nf7cf0e4395996803ed901abec3fdcc06\n72e4b314e45d67bdf371f38ed06fa82a\n76e10c1cb25e814fe7d6f3ee02d4059f\n8d3cc57dc7d9c24ff6099a039722df68\nd747c1f677349e78803b54e9738b20a6\n9280249d5e91334f0864f9e40a51390\nea4247ef739736199f433921788191f3\nb7b3f609d8af14965d0dded52efeb4fd\n2509d876e7521634ad26d867b17d1a48\n8ca120d9501983b312b38b1d99376c0b\nea2d9117c341df9377b7d0d4764c121d\nd7806192d775465cf26216cc0b9f4269\n91d9c29371eb5c091b7837f7a64e3031\n3e4cc718eb6aa9e4559750dd149043e5\n54001db75b6071eca7dd22c0aa3913f0\n32909a78138cab24d4f4334cc3aff513\ned5cba88deccbeb5a0431d1f46615221\nd16ba2810dd8489cfcace4d823343363\n62f99c3f2e7d133131e1c03c914d6f10\n9f42f31d3b81ef232d07d103eb3a7540\nb77b49b9bd84123140385522d1beeb20\n226917d478be80f3542283b6fc64a8f9\n461cf03b41be093d9ee71f8982c8aa68\n78dd4dc65639258cd735fa1ab17311ec\n5de0665cd8e490f47de08b76f60612dd\neca245f9c180e7c71d9b004d9d8d2781\n243a8273104d83b6e1f2a1daf140ac9f\n8f4a280e59ed5fe859360964d7fe1813\n5dcda2b98242d00b55f41a702b987e76\nca2bafb1ba4b97a1683e3750b53385d5\n7d54a0f10b79f06af70f35281ca419ac\ned9225ab8a02b0fd4b349e4b3dd5565e\nb75dc97eb33f6f5f98469ce4eac5b4d0\nfb4969c29b155f2e9c8bfc08f511409b\n5658068646336771cba7035647fbacdf\n4b6647ba7664a03198467494eaaa2f8\n5b9b869475b3af7281112f9b0beb0a14\n19c5068675de48b839264bb933c2348b\n597f7914fa401ce1433d7c8e9cebd7c2\n287f4e9b70b010a29ddd1aa0a00ef579\n1b7f1ca21e6ab9cecc34b900bb2492e\neca3075b0b976054f471dd2a9b3b53b1\naf727bd232a8f1f4c3d83d64958925ad\na159a15c0f0acc22cd8875a52047b4d2\nb7d6f5e0a80f9502d4eec64750f57123\n5395c4dac8e66ab6543fc9b228fa4afd\n2680233498fe409060c049bb6fb2fb09\n42288e57b2436e3512b38b1d99376c0b\n22063ea2a9d53b569628553cade61af2\nf154291136c45c24545c558f9b86cc0e\n90612c4b3a2c6d849d9fecebc5860b6b\n55821f1ee5efcd6280c2e60c312b0f09\n2edfa6fb67b14cbe6659d9c9bcbf8054\n2f2f7819edaa4ab7fb47f041a00e8417\n5b1434e9b907eab76bcddb6c0dc071c3\n2eb7e88f5355630962a5697e98a94be\n48d29b4a2d749776e2e5bc9806debc17\n3c8bf6360e36d51874b27677f8e8f04\n332cc5d5d3484f8920517b73a75a21ed\n3a8526095bae7e553c79ad8cab094d8\n65e3a44a0a13a1bb547046f04c724fd3\n6a7244726ee48fc560238d65d99cb6ca\n3bdae6ac0efbaadb49a3c1009fa79820\nff6e6c1fd1069b92116f3b4758e85d85\n785ec43cb6f1a534e1f2a1daf140ac9f\nfe9777c5bc60bc393554ccf8c30febe7\n55bc5e1223f4868646862032be5afc61\n911535f04299f4a53f732a8d4ec0bf11\n461684f261c66471e3bdba9430565083\nb12faa395027a377f7bd077790d66b82\n469fe5d0ea2bba70650d38f01656985e\n9d80168647f0c0ac9f433921788191f3\n6e2dc15452034791a791c4f82c7b99c6\n3945a1d805dfde6a989c6c7df583f91e\n4a9c2632d6055fed735fa1ab17311ec\n5de8bdd7f586399ee0685d22b2927984\n4faa63f17be98cbf1389e18ca61056d3\n2c2abe6a7d754a95c79f92df566f8c6b\nd8f1721d811dabbffe085ac6ce469d2a\n608c126f0acb73dd7e338aebf530613c\n3e3ee43e001e800a8f06d4785681c4e\nb449f16a0cbad90088be2a30dd556a09\n64e5444076a4f4f53d69fb2c36f9ef2f\nd6ab580443ae008d6a2345809e2bb169\n95cb92425673feac6b2c8bb96250e4a0\n64276d3a962f6093923f5cd444c75b1c\nefd09f6901b098e4eab5ee569c9de1b1\n253bf52d80c11314c7d00c29d97b78a9\n10bcfa94dafb185411617c2f1885cb59\nb3ccd1643cffcabce37934d75f36098d\ne5e7552e8dd1b5e9653fe2b064cca38c\na32acd243e91fb32a59327b8ab7c01fd\n60a861a5b416030a93153dd7e0ee121c\n5da81098c784b512673a614c45f3afe4\n9ed0aa906ffae0c26bcd32c43682e841\n87e23cb3540dfc59c89145ad6791be51\n72405e2f1e4ad22027a9eb2a0bf0d0a9\na8e3b605c0eb659e5f6c4107d78f2cc\ned1e56bac79b13df0e1c0df18936d05\nd68f31ea513d3a5d6a816b111e5f1b47\n4315071df41d5766a7ebb24c1614411d\nbd1711225c6b87332e60a638a5e115e7\ne37b87e001f24db1e55d13d7a8d27c90\nade16e09e79526d487ec12cf5e4563a4\ne0b38e1386eec67624c5b9ac3d3770de\n108c7545e089109c9838402e8211bd73\nf42647b43072abc9c48ca2220df3a9b9\n4ce26b6d23caecb3cc34b900bb2492e\n2d34668468d0b542612389706438d0e5\ne5beb08af46a6b8f6fa28a58edcb926\nac57851b846a48529f433921788191f3\nc9e3dcd6cb94418bfbe54b5d01550\n8a40c59eaf7bc85c322a3e035e31af50\nae1a6e01d2ea5d2cc75e2dd4efaea578\nc0a8c6eca464a1ab9f433921788191f3\n1813aaa9a82a98789c82b3f5ddca589c\n5ca2752062ddaa0e21fa7072ad9ba0ea\n2caebc928dca9f84b205c7feccc0f737\n79f507c3befe69ba2987a7b722c00b7d\n198bf0b56e9235a11afbc27572ea3d1c\nf2b4650a52cca500b4cdad9a5bf52dd5\nc07f9e5e064bd0ef93c9577cd4b35faa\n9e6d1d06ae82ac106f21883e4b04581e\n604d927e4954713fd735fa1ab17311ec\n7b74f5d8a2ad8aec6ba53cbcffbd8494\nad0bdb0b1b0c8077b4cdad9a5bf52dd5\n5de2a57211e47dbd1f56bd5c23e00f1d\n5c59e7cd62f20a8bbb0bf6d0a9fb50c\n9b5a5de7af6ecc4274e18e0e7a19212a\nf26068a05c107a8823c69c7ff0f71040\n291534185aa7328217ae750b40e40d3e\n32706617176faf4a32dee48b245ce100\n1abeb8d7f5dcdaa4e06ed7bb63be5503\n419226b09e44e5bf8c8cac88a8c48208\ned9b7dbc375d3543d0a6af9bfb470a20\n7b0137debf39237d618f190677511085\na8eae38e77cabdbd873aebd175ac6f11\n783e6e45a8b4125b29ac2ce4d16a7d50\n2bc57c73ab84f2c7d14664a287de0fb9\n3d6ea8a01c3330ea8b22dc3851acefdd\n8a0a85f55ffa4a13269c192b79bdefe\n2ad41c44eab88406924d7b1c81f7a0b1\n35818f16eb3540c0bc6e84bc30e573cd\n24386a93c942c7ebad7daa06d33b72e7\nc8b9fc62a220f63fbd6317b3418b592e\nc146b0aa5541bc1fc0f919a9a9f1e7fc\nb7e7192d2b8686fb418bdc8c2bd0fb7c\nc825f86ca0c8550d45e0c3a4b827d51a\nf7f945288a571090202be79d8b285c1e\n7ca37968914be27d82b2a307d22750bd\n18a1fb21c8c1c18f4dbc4096bca262f3\n36d4635979ae79256314c3b6a3a65519\n6a5c090b753cde05b5c25a656ff55929\naf960bb41e705a579a6e43b878d5b335\n17bb6d46e1b07ed789cff8e09537ec10\n3fba044c23facdaefa45f4d7e1ef7d0\n2eea6b3bddd73b1be768fc5ed1ac23d0\nb5c1dcf4ccc0b8aca74fb613494614a8\nc1267e4fcd29c63b60053189e2e21dd\nf0cc8d1741f287fa276c3d558130f8b4\n966fb54dcc7bf00ba3fb48700889ab3a\ne5e273acb04a5687bbb7f70943d3cb52\nc45c9f4ede3246e6a54581b3915c3bcf\nbeb75684ec2f965412b38b1d99376c0b\n1a1c0ae2b0a3cf3c80c2e60c312b0f09\na3896a954602b229d9d2bbf707e9704b\n5fbdc4c221b31d5b93153dd7e0ee121c\ned941e7672a4cdb0bddd549216d19f7a\n36dee5893da238565dca6305fb9f97ca\nc7b8d834209413393110fbb3943dde1e\n2a45063d7d03b865ebeab56de94a5835\nb3bdd86b01306e7b410d23b0a192e911\n67335d8a40daad7a7e60e1bca0143d66\n575ccbbf4be84e3ff85b811e02bb4272\n7537fb364b25e32e999562d1784e5908\n955021cff365f5907ed475464ab76870\n22d742f999dd7823bd2cd7f810561bda\na669193672e033f512b38b1d99376c0b\ne65080fac483ce98f0878b58b4e887bf\nc80a831394e5fd78f0fea2ee98610322\nfa35dafb0a24ed8b2511f68da65f4c4\nc513665dbd0d0606f85b811e02bb4272\n4b5668e651a6a9664a4f87aa9a31cd70\n520ebb92353e7fae6f21883e4b04581e\nffe20b3b5f34fbd0cbc6ff5546f4ec42\n43ea7cdb23aa0e3de1f2a1daf140ac9f\naa03af3233ff0be207c113ba65e29ca\n3d5bdd3fb1f4ac0e12a8e5e6e6618c8e\n5eaad35703c992f71092539e96a339ed\n6ce72fcd06e465a6cbc6ff5546f4ec42\n34ad54857a4dd37e12b38b1d99376c0b\n41a9912bfe0dc96239169e4b52d9f093\n338998b6f6f541c712b38b1d99376c0b\n5a5f7025b960f4bc745f2f3a558dc3f8\nc6567e2f9896825b49352dd33f95cb9e\n2eaed43aa5e4ec8cc24d00518a3dd6ec\nd0062058d4eeaafe494dcb92319db1d8\nde0f9c9b67c5f5a6422f205de59ac7e6\nf7ce17ee88cdec33973c46c285b944d7\ne57483ce26ca69b08f70fa6e7b12c70\n8a95676f5965c580276c3d558130f8b4\n3fccb4301ce84fbc276c3d558130f8b4\nb10748ed5e3e01f99464f279e4e22634\n815a2488eff62e6ce641b9ab504917bf\n77241daf76a045c099d9d900afe054b8\nb34827c2da8ed1e32029d06c0cadaf74\n1ef4b49ad8b4e51f1dc5248baf82e0ba\n661ad35c5c3a908c6d1e04c7ae242f3d\nd35bd51cdc04c103882d915ba9d043ba\n76d55781aaac09f918b61860f81c82f7\nd7bcb405e59d20a112b38b1d99376c0b\n87dfac7fdf6e81bacbc6ff5546f4ec42\n345179cdbb6ac9da4dd752ddde80fb1\n8ba99099a99012c77ec95138ef83ef2f\n94540c8b2d13b48ae09d3d2b183cc5bb\neb71e9847932ddda558fc0121b183f15\n5eed8cd506081459ed6071560148e6eb\nb13c2dec1a1dd7ab9bba8f87a19ff3bd\n1c2fb199540516e2b30eb7cfb209da0e\na0a36ea333e8a39319dde5f6d908cdf5\nd82fecbd0fa3fe757e183a626c555090\nd96e0f2fdcdfc47cf1cb19f636b1c2bd\n9751e6d0a0d6c1919c82b3f5ddca589c\nefb99da78fea81e3534b1adc2aa1709\n22d2782aa73ea40960abd8a115f9899\n823b97177d57e5dd8e0bef156e045efe\n58b926ca85b6ea549a6e43b878d5b335\n350c4bccc1509f83583c7e128cdb4e36\ndf531a3c9ed88efcac074df1dc27122\n2f4d62df133d15ca5874d5106201fb13\n6b06ff0184e3108a4bcc18d4b892312c\nd07b1082474dfc9889172d41dca064d9\ncf72122ff9caadf0622bf4353f4bc7c7\ne92b167233273b73f4085f263b03d26c\n3dc3dd08910169be2e3059b0e19cba0b\n3f9522f1af5597cbf0fea2ee98610322\nccf8ce0be2e03076a49c146495d6b4d5\nbe55b1a477c465226f8c560cfa1fa0c9\n22c33fb33a18b5bfbe250bd311b0c6b8\n6f09a5d74998c8ec49a3c1009fa79820\n25d950a8c7fcf04b57855ed10703bbe0\n2288e5e13ae8aa7192cea77f96988ae6\nadd8dbf5ef758141e63959b7baa1103e\nf6fceaf62bdb85c05e9786b1603f45c8\n577388c27e850a97f0fea2ee98610322\n1af21b8dcda98fa6f3817c125fa377ee\n99957708f69cc13acd0bf1b7ed0a63c9\nc391adc028f6a3df9a6e43b878d5b335\n7d03cdedf8e023728d00a96649d5cda6\nf5ffdd214cfa8edf94c9a8d7fabdfed\n47d871d9a3b5553cff790997f2048517\n2b331127befef5a184727a9a27a761c3\n88b978e04c343d25c11d80527540607\n9a4c69fb30dd08bb5bfb24d81b25af8\n94bc0758fb14e8de104a9760d2a92bd3\n1eb186e0fc2dd979901b177556cd6c33\n908d00034bfb9a8d5d30f6c8adea5674\n3b22c066b7786677b1c46f058c033ec1\nc6e6cf657ba3f2df4376957d2c85a4a\nd8478e58902d241ae1ca70d5205a82b\ne5a481c9c2e1f17516f51ef194451b39\nd91c45e8d51b2ffb12b38b1d99376c0b\n2416892a9f7688b01638241f3ad71c10\n5738a6de833d8da68d4ca42bc1bef451\n630818ee20900d67fe0b9f6d3db7b59f\nb20e2aa33c1a54fba791c4f82c7b99c6\n6a7ee4fa2412e0c48c4d70537b8cc0a9\n3e25cad3c3379be6bbfe0a3a537396d\n70db17ecfddd51183554ccf8c30febe7\n677d8473fe8fb35280c2e60c312b0f09\n267af66d92c1b6b6e6819fcae2e26ad8\nbfd8b5214e4a174d589c07868201b17e\n38cbe2bd51cfb1e47751f287348e54d3\n5370fd7b6529876574e18e0e7a19212a\n16556179cbf2701916b34c3751bc447d\n4c5a984272a922ef94a57adad86ebb52\n1ddc9f25d09da805d957eaf7f4edb205\n4d55fbf2ec19dc227359b134afde902\nae688f34caf5bf7bf1ef0cb5613661a0\na5b6e717194781776559a92f80e3672e\n61796c118778fbddd0bc9224a67ebcda\n6c7dec6bbd8ede62f0e1c0df18936d05\n3151db7f965943ef9bba8f87a19ff3bd\ncf36df80bbcbc74a6f8398adde24f538\neeb8c212c7fbf6871fe7d5784ec6d0eb\nc1b9ec727b9ad093fd0b1d4a6a5da4f7\n6694001fb50d3f1237ff6d90891805e8\nbbc67c7095126f60e3e6e6fc6b79d595\n66c92d4b4cb90639fb5c1b0f759e2bc1\naa21e208420cd4c2202be79d8b285c1e\n56b409a50c8404afc24d00518a3dd6ec\n96023028ba4ec62b65b14b263bdb456e\n56f810f9af40b569fa57ccfa6a55cc4d\n6e91124a4ecaa1a365564d9c2ed3b493\n3fec7abae87ae773560ce90a898cf5fa\nc4efdc79b1132dc6533df38649ea120\ne6017a1e15095b4e6314c3b6a3a65519\n73903a9846293890a1ce1dd4c7e01188\nb5f52968710c4a4de1f2a1daf140ac9f\n280cbd90ba9cfd24fc105e275e6ac8f1\n39b95d373f0ca2de80c2e60c312b0f09\ne6fecb2700247e1dd87c63d8b3018b58\n5febb85000f9df46c2e0257dfc41d300\nc6cd0f7ad931ca7c997b5c86bd7c8962\nd9aea67e3209d6aa1153b2cafc57da88\nca25a955adaa031812b38b1d99376c0b\n30195a2d2fe56a1f6887cd98a5557c7b\nffba44e241dfb481efb47d8e2c9f3b57\nf79014425f660bc4d93d9e447c233c3c\neb11f8abbb974b1d12f1ef17d681ef3c\na5f55a60971922fff3059fae889f5fb2\n19949be9b9eca5c667a4cd2863eb1ca\n636c6b4415df67c5a5aad165050e534c\n2e9dad6c61b3269b1ea15a3c13db250a\n66b3e706e98f22c7324318e511b81a2e\nc5c335bfc5858d11137e0f55e7272392\n1d285f3bc7767bc8b4cdad9a5bf52dd5\nf0b6875689fb72f6feafd6f06fc45258\n263cb889dcad2b6ffcfb3ae2df2f7efd\n60035e734229f5eb19f2faa30e245eec\n29f33014b958d37e6d25219b6c577d3f\nfaffd9098e488836fb6bde4b7e6c6613\n95e3e6cb5f3c8cd39eff3cfd975ea4b3\n294c7c64f92d3b5537c107a0a05e0226\n47a40af2fde212a7b70797b2c89f136a\n99001b28e4fc6bdcfa9984f75a870c1c\nd326ce10d768da152c3271e911ffe19\n1bcf4a290a2fb6d288be2a30dd556a09\n144551f27b55f6d69127cdd763fc899a\n2d4ba3b93ed69bca2bf266a8f0187ce5\n94a724430f78e09bf0e835155cdd677d\n6cff6f4bd6a5d73e8411da876c84603f\n212a96dc292df1bce1f2a1daf140ac9f\ne534d084d3bc37184d0af51460733e47\n378c3f18cf130bace1f2a1daf140ac9f\nbc1d02e51b46cd8f12b38b1d99376c0b\na9af1bb4648a448c8ff23e7e19499284\nc4d31507a1c0f7b7c3972dbee3e8d0f9\n64559ac87f100d517246c79258663695\ncb5e01162787772ff7bd077790d66b82\nfef082ee4cbfecc4a65322353bdd17ff\ne59086e0a9bf161b170efd05fec8727\n3c92069416189d7fc7b525efdf38a3c1\n173dd045c9da9aff6099a039722df68\n1c4361c083f3abe2cc34b900bb2492e\nf6d74e48206fca39a6e43b878d5b335\n17577c2cbdb7c916642f87788fdb63a7\ne4ddaed36daa1742fa9ff575e691c052\n7ad1c8369ecca95ffb5c1b0f759e2bc1\n6e157a5e034eb9f49f433921788191f3\n50fa60269066614e70a30ad089da2cd9\n27803e00894dc087da95b0caa53ebe1c\n37cbf8e368b06b655e43a6efcaa57d09\nc640c5ff1527fde7929ae5eb653afaef\n80b03f350a5de86e3a653cb492d78488\n359ac7f4ddf3e7fbafc7bdb2f8d1ea84\n8f520b668fe5212e9f433921788191f3\n4acda16abeddc1a24d0af51460733e47\n9fc9bed98828febed4713685ae50fa13\n9079c787f6d944d69a6e43b878d5b335\n92164d8660dbb9d278fc07d6c8069b8c\nadef049969b447f87ddef91dabb146f3\n16308b7668753c078080f52bfb02d6bf\n1d4fbefad4abb85790acff7491720d9a\nc8cf9fce86c7bcb3b38e8b1e877a5704\nf172b2748cdd7027d234b3cff759c4bf\n70871551850d47c2823acdd521e722d\n9cf37ec1667dcd3b4d4925687e893b3a\ne0e0041f541a646689ea614fce832f5\n80432cdae538023ef13eed41b64dddca\nbb8ffd0d313c3e33202be79d8b285c1e\n6834350f16324d0527d7c45115828e34\nb632d00231acfc0211b5cadd4563c164\nb6799bf6047f717e7f3efc94c2d31dc5\n61a502275b50f6624a38706cd8ac54a1\n313c2f35e1c461219f433921788191f3\n49a566dd82ea542af026df30a0cc38a9\nb451d4091032fe57aca1893e093d31f3\n170574550b1b5c12fd0c2683cfdf8b6b\nff46f3fdaba78638aa7cb0651220ba4\n82c04946433c4a8f63413b0440eeb6fc\nd64825461795cad2ac2ad609ecafdf83\n5ce2da67625a1415ae42d8f433c1cdc1\n481372303918c2b22c12168d5291219c\n88cb0215d342a49abddd549216d19f7a\n7da59289cc7eddf7c92cdb7e63a33179\n68cf8f5e1bfb9ff8e71e857afa9df271\n13dd392ca784cab79adbbc95db428a81\n9773bf30a8dea97145f791e063652f65\nc61fd3dd6eee6465ccaf38f4d3340ec\n8c769f47d8d5b0c84b681a5f8ea211b6\n51dba7756ad837615e561f212b7229f3\n5a86afb38048ecc6b2c8bb96250e4a0\n1e62da4891f2021d950daf47e5ba3cf\n3d0012e27bf8ff429bddaef1ba7e1752\n92ed31e84e85000beeb5508ef773ccb1\nf6f468a51ccb62669729231d295371f\n5d3a612df6585a90cc34b900bb2492e\ncced6c0c2bd60368b0f24bb611f821a8\n1533494d4139062e9f433921788191f3\n9a8ce31de8d6f549a5aad165050e534c\n563097fac348e6463d476be0564f2b74\n9bd4ef716fa467a6c72189e41b1941d4\n84ad561ea0b15621e33e9d99abaf3052\na14547884e1ab54f48ae8c3efb265806\n204decf8bb9bc9e623c69c7ff0f71040\na413fd3df8c6a915fb5c1b0f759e2bc1\na2015aca6b4268c4dfe6ef2726050c2c\nfdcaebe1ef2f44406f21883e4b04581e\n3efa6bed63249f928bd9de6b28931bb0\na14e353d1bb05f46b785a4ac4a0dbd73\n87652d99be1b6e386d639befe132b2e1\n57287268b594fb3f3a653cb492d78488\n92fe43536b3f6dc1593fee7ac9114e04\n907def283c0727f7143bcc14d754d44d\n5707b3eb79f78b5fb9dd291f5235c28e\n8aff17e0ba5d749f6b2c8bb96250e4a0\n458578892b309b2080c9c53be28cd7ba\na90a070a0603a4fc663e90eaf6b4ca52\nc29bc7b0dcdbc2b9e1f2a1daf140ac9f\nbd23795276854614182f019eac476ad2\nad8abb01ee9066b425c01bf8ef97ff0\n366db4aa9243cbee4d0af51460733e47\nd7d7d990d385ee8a67eb21515c2e5ee3\n9cc7d4e39b1fb17993d988207a39086f\nde5438deca7f9f0712b38b1d99376c0b\n420822a543c50b05230a4d129580843a\n428eadf77b50d6a6cfe6670bda9305bc\nc44f0aa417ed2a77e270f84701afcd4\nd9f1cee28bd9a88c2f2258791e7c116a\n65d6c3cd8c1edfea719b648239c8e160\n93112d8e6d0710e774816c28a6351828\n552e31db6701e0b7381178c6c47f7400\nd33dd32b628e46f1d483df64f44884fa\n1c0d3cbd1bacfa815f8d7780d59bb4ae\nda4294d14502707a82cb4f2e118e48f4\nc4a5c40e5fcd1727a2bf3fdefce3fd4f\nce8a04e433d06b03a0ba30bb56da40fe\n736af7558693f029774a2bc3e125b7e\n7392b5a3e2ff001f13e4e654fcd57d3a\n731b2960620dd7883bb8b3b6d2fcf780\ndf0c9cef42873e71d2888692adb4769e\n62fea07f4f7a6bfc673a614c45f3afe4\ndc9a54a41fbd77314aef47a2c7bc343b\nb8430f8c82e80d4dffc0a401ac49c50\n3b614a18f9c8eecbf0fea2ee98610322\ncaff0ebc560479ced735fa1ab17311ec\n79461905bb97ebc21a77229b9f90bf5\n70928b07af4272df2d07d103eb3a7540\n18b4acd3b0809e6fc14e2939682bc455\n581f03521f0253636d75fedffe6398b3\n766db9eda4efe6aaf7bd077790d66b82\nb9d2e06cd1844f6a6325009a8a12b7e9\na02f13c708f259f97ed475464ab76870\n30c4a2e9a403c9d9d7cad6f9e585deac\n7a1e38f9d85548e256c58b78d29fd8a9\n9397161352dec4498bfbe54b5d01550\nf0acf574b96f9fc3829eee2486bd54c3\ncbcc80e6964f1080b2d09bc8d348e46b\n4e42faa1861597c9f2c612775ea2be4f\n14a3a4e859a9462bb335d40260934189\nc9812d343e4e376c95ff232cd38210b4\nac161c74926a5face378cd9d51dc5be0\ne19e9ab7d858842139336f03eb955d2\nd75ba8d56bf868b75a950bb73f1dbae4\n65aab903355c7abeb4cdad9a5bf52dd5\ne33dc844a5227c3d410e09f4a064836b\n26c60364ecc5858c80c2e60c312b0f09\n58c5409f614e42bbfd88a8f742d6b88f\n739971469c9903eeb6dc6c452bb50aac\nd439acf80dc6e1a9d40e00f72aac160e\n19fb748dbb9a97d3bc6e84bc30e573cd\n61008422050513d987bbc659fe543122\na2f3ad5b5e88482c30ae0c71c8e3e486\nffdcd1ea957aef3dc5e86946f2168706\nce400eea04127631b8611345dfd403f1\n32e4f161682231ceb785a4ac4a0dbd73\nd8c06e41fedbf387e5a528a89590d5ea\ned939aa2573fc0fd3b5abd28a9df8c72\n35f7e2c8a6c9072eb43c84780cf56b88\n9ed34fd8df53c865cccd2ea14d020703\n206d5e32ece7b8878cb55268d473f123\ne4289a32092b3e667f8cba909d4faac5\n4cdfe4029f51c3b16314c3b6a3a65519\n45a756b1fadf20c7dd0a2071dde26395\nbc82cf27b55cdf2ed735fa1ab17311ec\n5b7e127c67c72e72f6ebd7f0952711c3\ncb9255733bf39c58f2dfd8037041a218\n72033b782c4f440ffb5c1b0f759e2bc1\n6e3239e448539dd25c351e299b24e355\n4f0659c5971bcfbead2649d755c19c29\n509f0edd2fd65d5e213f0776ba8707b3\n28f82ff412a37a304c8f375eb1452283\n1c231bd6dfbefeba6bd753a4bc3410c1\nafda81e011c79d183978e5bb605fb72d\n8f48e9f97dc644ca8752becd01cbfbb8\n43aa82d8c71e6ec69f433921788191f3\n60efcea872fa7e52341b8a806253912c\ned1647e209a3f661e1f2a1daf140ac9f\n92a71ab8a9862a5452d6d9553235a14e\nd805bfbfee78282e6b2c8bb96250e4a0\nd442863599da17d951cfdb4c9f126c12\n3a23773469b2bfa8c12463ed30107df0\n3332ad937d4cf220d34156e5a2f990b\nd3795e145d8fb811d735fa1ab17311ec\nd1be6a2cebae5ed7609e2d916fa0da27\n55966a1b272679b256dafdacf26ff875\nc414225a3a0fd0211513ff7357dae269\n3af4f08a6dedbd491703868bb196594b\n45030c1a84e0c23d7ec95138ef83ef2f\n299416940399c3729d05095e3aff5e6c\n49ff48905ac9d95e585eba7ae331fc47\na9c06da447ff8ee6d6d33c92d1d05e93\n44ab011decde6fe4c41bc86ace512f24\nb20d634c826cacc3b1ba4c891c81b80a\nd945ecdf7613bfe0c7da109ecb5068a0\n193e079f24ac1ded1153b2cafc57da88\n608d83aab75edf3c48a76f6e8e0499a6\nfa4cc6689173c57a25975e984b0e050b\nc394a39997adf53d319f02af7c25cd6\n7f219882b778b66c67fd32336d183e10\n13bfc7f0f9fd39f73a6842b1f893c19\nccf770542367f03f276c3d558130f8b4\n369127e85227fe5e218e4ad7111aa13f\n5b466dcb5113a0704aef47a2c7bc343b\nee36a8770c74281b52188a7e683f7f4c\nb0417ea1c8623f189c5408f4f799fe72\nda6a91e6557973ba78dd5400499d0e7a\n57bc575daa1a56109609aa6ba54014c1\n70459a553f42c300f85b811e02bb4272\n4e292f614c51676c6118b98f3fdee6c0\ncc4eccfdaa0aaf25efcbb3a4a9f89cf0\n58d4a585abe57ff59a4b8c8271f09050\n7bfdd659a04c412efa9286f039319ff7\na66887b692d9326b51cfdb4c9f126c12\n580f6487cf149c497504cc74f24f0eee\n97e6439ba7e703dcd7d3985b6fde9645\n5bb16f97c928f6dc4b49cd65dfcc3a9a\n9c8e406a5e198529282dd3b430ec2654\n14fa15f31d713b7153b838b6058a8d95\n3cb82befc3290e36b58435942a1b4dac\ndcc4bb465d403801e1f2a1daf140ac9f\neb39683f67d5d2fcc648677bc9b1d6ad\n8210a8ae16f55c4bfb6bde4b7e6c6613\n1dc15b9574f88cb1fa9286f039319ff7\n4f98bd25bb9e03ef7ec95138ef83ef2f\n65cc9c9436e0b2c8a50ef3fc203c6ba0\n45d3b7dd92a80269da4044967c19cf99\ndb2916f1dbff9d9232967a44e902e4c2\n52a90db915a53200f0478431b5ad57db\ne5cd986f028b4e27b91a90edeb58ed0b\nafa74746fa10939d153a22537579621f\n78eef5df96ad0496e7c0ece95532142d\n179764bc36fa4246fbf44f447f38c175\n9301403c048cc8a3fbd94d73a34fbe80\n2d310466453c3e42fa596c3267b95876\nf32e61f7124ccf327aba5d123c068416\n56bb7870765f37a05ad0ccf97045200\nb13e4eef50c826a2fcf264b62ed090b6\n6ac3f88bb36968ff6797bd93e1caef31\n1037acddbd363ef5782611375da5ea9a\nd81bac8b449807bab7b81b671e901c39\na4ad8e643348a9ff3f217b945a063dd2\nfeeb8220f21521d4b4c6d1a32dc4f554\n105c9e30b6fc033d96e5f13299458076\n2eedf3a4c4eeee20af56497f051566ab\nc18b96da3e1c8a2350780f5a8c844eae\n30270408f4d258d2feaf99d0c6c9094\nc9e4c1b4cdc45601dde078ce46d9fe3a\nce50f2f8034fafe86b2c8bb96250e4a0\ne8df7ab8879ae3f895bcf48dcf4517b8\nc77af288e7c373979905a3939c890ad2\nd7192df213be19cb365a9fccb786f8e4\n76fb0e79e77923de9932cdadec1db39a\n8cdac72ba112e8f6d2c901959c439025\nc92c0ddb2c729589b6dee66cb1bf8e00\n78a0c4ff75258ecf16b34c3751bc447d\n6de1ce73a377df3633faa05410dc119c\n4407c14eb6e7ba83160ce3b5a19029bc\n3860f5c1ebea3de7fc3c7341bf676efa\n9204db8d40b7fcd7fa45f4d7e1ef7d0\n30fcbf2fed0eb241d8569d1a6c25406f\n10439f1f81fbee202be79d8b285c1e\n42291af681d91a6493ceff0200cb9e84\n7e0e797780f6945fc75e2dd4efaea578\ne74ab615b3008320e2bb19fbad3e4596\n38fa7b145b3be7fdb4cdad9a5bf52dd5\n981d2bf1b1b028e46b1aa8d90854daa1\n4e699ed7d6b3e556d3cd5c5355c4e1f6\ne53badb78702d54e15b3bff1113c0f8\n3be7b34984a3e34fde9c2fd0f82cd3a7\n782f3821e6b638d6fb6bde4b7e6c6613\nb9b9eb89bea6ce2fbeef84a1ff2df7f\n85eba152f5c367bdb3bf5cd8f4c141b8\n5c28fd7c3d261e1b3e243aaa4500940e\n897656f468deb1b9e96eacf8990e6676\n582ff2c7307daccbfae4699de9cb91a\n1be1707593a15cf9fa9286f039319ff7\n858975ab8258845f230a4d129580843a\n91fd0f24b4865bcfadfdd35441a4b4ea\n320c462553b4eb18d18f925e78a25ab7\n8c6c169c326e61df67b9bb226efd81df\n262990856b80d83d4382b46c76d2521d\n8cab7fcd543a1d0a74e18e0e7a19212a\n902ca61bd1f216f32511f68da65f4c4\n609bcf41c9d33c04fa9286f039319ff7\n56a8f2d9908cb417609e2d916fa0da27\ne6ffef0550b5b2aa7833354cdb66ee8\n7c53d8e4c566843b1e262ec64ad2c6c7\n468ac0df7f343a67addf8a484a63f540\na20f4c1ff94b9d35127e0873cfaa7b8\nd0987a5b6c5c6118143bcc14d754d44d\nc514a4eb146d84163a04e41b7ea7de8d\n69240d39dfbc47a0d15a5887ec2183c9\n3c10faabf2ff5415ee72fba28fa8d35f\n40267f5d09bb0c422c4683dd00deec1\n425f45023b30fa6ecb88c9db6e396994\n4f4cc3462f0e9dccf13eed41b64dddca\ndf6581f0ce7c00421b00524af022276f\n9e3d8792aba09939855b2b6b2e96290b\n502bcd962340e12838bd5e76f1ee812b\ne6ff26a9ad6f6321ec69d13496bd4a34\n418f388062cce47ab2b92fdc09121c9\n8532101879b57af2fa9286f039319ff7\n5c76d759674869d559db9878902bfe69\nf82762004d55da3d265b6d46c677f2ac\n75066ff8b9740bcccb88c9db6e396994\nab9da6638fe428e87f3efc94c2d31dc5\n54ed1b7f842914285488420adf4edfd0\n62fc2e971d8023e61a6fae073bf19933\nc0ac896c514cd91428a27232df2537e4\nfa811fb70a13c68f95eaa1471ee21cd2\n8fc390879ead5efea0834a5219dec81f\n552243084ecb0eddf500cc506a763c18\n39dae1fb0cd33173d2c901959c439025\n50b8d57468b748c9f471ee8186a0fef3\n75af21a2be51a8df49f0e3dd7767881\ncd6cbd60e8f7cbcbe378cd9d51dc5be0\n5f2b8f1a75a51d90e76598b090652f4a\n7e316474bc8b072fca74c4e4ab012aef\n8a1275efcf36b408488d77a033721bf4\n39219da571e93e9825c70fb1df3f879b\ndcc3914659963636b2c8bb96250e4a0\n457cbd3f2a9a710c11f7dcbb4a32aee5\ne8ceb645b5a82aad8e27654291ea5e0a\n9104e081cb7d92f0fb41747dcf822261\n1e6e823412133e585a5fb2c1a52fc5c\n8f81c50e0b90f961b40a1b2ef5e0c995\nce38b5d04d546346f27eb335b754fdaa\n57dab7fa939cb30d9f703ae3d7bd0308\na12b0328e2b9eb17f084db89eb9085ce\nf9564e57bef8a7446c16036d807ca393\n6eda9bcd1c2f4c8fa33c2b3fad570e45\nfe2e9f0363866aba8868d0641feb1888\nda478adc6169bf2b34cef5923891e520\n93bdf3bb2fe22dff7ec95138ef83ef2f\nc474fa4cf4a4c282f5cbed688a0bb106\n68432645acc0d554def607f4d4140edc\n2ab086ef262c8688d6a71f46c1c1c5da\n9e43b09d2c4115276f21883e4b04581e\n86db029236b5dbafcc34b900bb2492e\n77dbed07aef42a5e3b9e9f1cae8061dd\n84735b7ac61d2ed023c69c7ff0f71040\n27b6d2084f80ef3a7b7f00333604764a\n6d88bd6c04bd5bb01a18bc096aeb4c21\n34eb6b0af5ae9f26d957eaf7f4edb205\nb84fadbc6f41cd0375e4eff9f26b7ac8\n60eccc70ad4f9aed15b3bff1113c0f8\n6e4ed358feb31feb27c767f081f1365a\n938be7a1544953152c3271e911ffe19\n26829f9c5626be049be47ac7c7e37815\n92109df597fb12692511f68da65f4c4\n73695c25b3ec4ae372333100c25acfb3\nde0bb836ad8b5a24fa9286f039319ff7\n30ee49fefc0d62c8f14183c264ad03ef\n5a148f5250c5d987918977c639d98325\n2d81e10114fa77742c242e8cf15917cd\n69765630d57639cdd7166ab41aa5cf74\naad0d20fb05f8fb0cdbadd1af48b5cd6\n2762292f3f5629fe12b38b1d99376c0b\n98572b8a17031500c2c44977d8755d41\na24c70db5fb77268b61fca3643811d06\n816df97057a7df79f47439175208c26\n6dcd7fbe37463ff38d4ca42bc1bef451\n61a0bef6e9c5a01dfa6c79a0c671edcc\ndb97f4931d2da6e53e1271d7bd927006\n3594567f8d54fc9475e036b82df78473\n68ce5805f49f8484a90f0d3f07dcdbc1\nff84eb89a2c7e1b55cd168ffead8840c\n4a20928c1570034d77c52b6e87288e66\nbd7b5781568afa0f46177b6d1ecbf989\n6a62d0d41a2351af7f683793234d478b\ne66332d7d5d35ad1871adec4b4ff0fcb\n68a7652d28ddf2035488420adf4edfd0\ndce3a4c4ce2fa691e777176cf1197154\n9b2cead73808a61a508db6f63303da32\n5a2232cb9dd25917768d4c3a89626da8\n12ad493bc65380df1ec84866750af1e6\n1a2038ee147fc6d434837e2aadd6d77\n365ed0964805ef59f5cbed688a0bb106\n86d90ec4c1e8437dfdf24ee0428a2075\n57972c646e88289b7f9e2c1c83736d47\nfcbfd6863b56c882dda5b2729f8f3c68\n7f5f905397b76cd2304a8d13750ddfa\n7dbf5ff231497ee511f7dcbb4a32aee5\n6fcfd40ef3d8dbc1046a0002e847ad2\n2c0f882d4c5fae8f2bd05e1cf7da8957\nbc135e8d9571775f20b92c47b3d5c1a3\n791efe6841d0995a1d9b004d9d8d2781\nb40a96b48a27dbed8f38658d7fd17ab4\ne4a10d825ba51a1fc648677bc9b1d6ad\n60c856b141ec1e75a5bed5eda256483c\n3925a46f22a5587551f49d4582a8d17\n7bd5d9982d9bde427b34e94db5d1bebb\nafc13a1565e027c5d735fa1ab17311ec\nf54a04aa65598c3cbd32f07d6724eb4\n6f0de5ca4ec2493ba7dd22c0aa3913f0\n705d24724cf1b7fe4fb30f5124687748\n94a7069ee4d637de40aa5b072f9ee3d1\ndebc38fe094476bf2dbf1aa086ad30ea\nc6d573383e36ec052e38f6d9568202c7\n5d667fb09f0ad799c2e0257dfc41d300\nda5d74a592c747e9ef7cbef6334698fc\nda9069b1bef61215716e30105a919115\n3d0b35ba89b8c600efb47d8e2c9f3b57\nd5ee8eeeed055401a3a714c763a6fafd\n486e685875e840dde4b30fdd654658ce\nf90191dfe0bce3ad49f0e3dd7767881\n98fe43e81b9e1b5ed8569d1a6c25406f\n5f2f4771bf59c3a32edc45348090e195\n501312760a03072cd9deb3f829cc2475\nb68218340f090e03519f927f2bf92da9\n97a75366f7c6ef24b8d6e958e0707d71\nb76f3783324a5f7b3018d2d3c13a7462\nd72ea947f961b2bc589c07868201b17e\n680162d9443e8a408e62f59b444d701a\n69237e82dd3f7d3f8a5e49d8f4867e8f\n4081d740a9bbdc7eb5e784742c8f0ee\naad61c4d490d4a8b6dbd8278fbb6bf38\n439fd95bcbf861f572cad024c77ecfb1\ne4c32f0b48b6c4aa31fddac73d878514\n27fc4679ae16edc887ecee1779f8c08\n326eb76ab05669c55e9786b1603f45c8\ne69cc1d337df7c83cc34b900bb2492e\nb8828cd2b6bba8989091900cc7eb1968\nf646b2bad0332c0a52a927716d03931f\nc54be9902d947a1ef6fb0164eb28c4c2\n5ecb203a4b00b9a5a6d1f73319179578\n82c3357fcd007893d17373579e6fd9be\nd77515679ddbcd9c8064e4301e947b0d\n8d1cddda904b6f363a842af7a220e7d\n7744efae453f26c05e9263096a26104d\n2689d78a4fba15bbf3998727b15249db\n935645a83387dd25719c27787d6741f\nf06a233c12b64a0ffa9286f039319ff7\n6e10893742a5add1139336f03eb955d2\n5004ff6a719d0c16c52533855abed4c\n40ad008d081e3d40fa9286f039319ff7\nb4ad3d030491a7768aa7cb0651220ba4\naf06013159ad2e45cc34b900bb2492e\n57d7f154da3864e951dc50bfb39cd6f5\nd109693d2d43e65b6ed5eb4c1d0d366c\nd8e64f106fc611c186029a2be51c0321\n69252c7838ace59f8aa7cb0651220ba4\n934fabb18c71373f1326f2506129299b\nab1bf0d24526c51db524fe86a5d055d2\n73e0ab2e1d0ea752bc6e84bc30e573cd\n2e3256b3de213e7ad87c63d8b3018b58\nc836ef9c895460ae9e4b997bcf5c860\nc42fe5b663661e1b4b004f8ab4aaf710\nbb7474cb9310e33aa7dd22c0aa3913f0\nf373746d1ef6fb5da4dd752ddde80fb1\n8fb14c7aad8e829bc6e84bc30e573cd\n62586a8eabb2a67a609e2d916fa0da27\n4125cf5a6e85244f2bf266a8f0187ce5\n1c4ffc878b001a097e270f84701afcd4\n85cd554c3681ba40a24fe41bd648bb1b\nd47fb169bef4420bc4e8ec0d6d668411\n59997a310b8fb3c9c1cc3f503d10007e\ndffd6f18fbc4f7ec4bd9916dfc5dd6c7\n99a1608f8e848bf6519f927f2bf92da9\n3360456861b9f22020a8bc477aad122c\nb8ccd8d1b693e4fb11f7dcbb4a32aee5\n418439dbd9a2e674a81ccece899902be\n8c151b8df929ec9616cf8b1cd2155e02\n8c7f0954c7bde4edc8a5aac636aa172\n7ee51d04734c82198ca4596df3cbf136\nc82214579ed998e06bb9681d4604e123\n18271afb4b31686bb53dcfbf8e62caa2\nf297de88033168facb88c9db6e396994\nc7fc0b36bbaee6382bf26da672b84220\n866fc73e306a47a1f246f64ee1a24a70\ne502392ba0ba05ac683e3750b53385d5\nf4239f72396f4170e80f8461d134c14f\n4adfca873edc6ad8566f788c330079dc\ne6b01d0349c34a4b9d40dc50674e6347\nc37c062ab5ecca2ef3998727b15249db\ne91264640374a2716a0207b46ab78ca6\nae221dbffaa89b3264279e248bd2a91\n477f00b10a859851abefc916dc2adb50\na982e9bcf097e0e595ff232cd38210b4\nea9ee0992bdcad77e641d7676ac20451\n1196978aaae2ab55537a44a51980defe\nd9eede71f6941a7c766069834b8696c7\n3babca331dad56aa1b3a159059d827bf\n553b06cd4354c8ab1c15dec0da4e4dfa\n425279eb4cbd51a48bfbe54b5d01550\n62d97682c57a0a14758f3dd6623cbf27\n98ea642f1f50b9686b9603fc5970ab91\n7fa43df6d88d2391e103b85ae3ac182e\n8ab72b47faa4d2d4b524fe86a5d055d2\na4d4e316f6511990309d43c07397e2bf\ne03a316409096ecb625f0699ec733ab7\nb094f9184c3098a781fbd53a4fc6b7f8\n74e930c54ddaf8add34ad43a472bf958\n1030525f8d49753e519f927f2bf92da9\n945564d4497f3a0398838fdf70b3e60\nfcb3636dd82e1c37741da1d923dd6a96\n1a68ec72239a781627f279690428499f\n4edbccf034f4ab241c3656c6593bed66\nd31008f7c9b5d67678fc07d6c8069b8c\n152f598b96676178519f927f2bf92da9\nd91e08ed981156717a362e61d329c7ed\n51a8def44b1e4f40e8e10eefab4b2a63\n5f356bfdcf9cd4218d4ca42bc1bef451\na4051a1e8a1b78003940cfb719120315\nc3d75ea41abecf51519f927f2bf92da9\neae96ddf483e896c805d3d8e378d155e\n455a8f48d4b305bdc70a7659d08b7b72\n36d72181bce0939c49f0e3dd7767881\nd601235af9b5e93e49f0e3dd7767881\n28d70dbbc48193e0a39dc4a567ce225f\n5ca0dccd8b0f6357d1987c07c912c6e1\n9c4ba5d99727de4f737477c115ad5b33\n84a95f9216f5c3255d3426ee101e9f8e\n76fbf623256644116c830d654bd05bb9\n322a9fd05f1f68b4dc99cc00991f7287\n3240b627007008146a2345809e2bb169\n91156c525c67581f0cadf545f40c8f9\n45c8f8e154fe9642220da6190e4d5a0b\n2391fdcf2158aebf9c27f9a5387b5fc\n6f652f3940aa986e3e243aaa4500940e\n2d5208bb08d89bf9a3e2fa8a8e389f2\n4e0cf21c4e7e1eb58c7ca3bb219438a1\n10e60e0eb0d7915c8de11d571206924\ndea853cf0b776f7dbc6e84bc30e573cd\n6fafe3b82e6e07de460c5cf20e4c5e41\na3d111fe5fab82a54aef47a2c7bc343b\nb4f358642d91251d26acd17789ec9c7b\n76377dc3d6b1dad2c0aaedf10d776af7\nd3fa347a5df7d6207969ab08647690bc\n5076565550186d3a1f23c99243882ce8\n403195be81485468d10b86bd6e8bbc34\nf21a0e54ed515d344110c565e849308e\nabcfbaaa409d62001d263b1fb57ddbcf\nfb6e8e453293303a4721599ec64bb469\n4c31d19625e911e1f8edafa0d47e47db\ncbe8debb3fa41f716e96d446ae30c673\nfa4dfabf8e55704532967a44e902e4c2\n31da90b91370ff74f30ef438bb75825\n8cff6a796ea47a9cfef144202cb2b935\nf0236f202fe3588a8d4ca42bc1bef451\nd1044b04ea67ab2d3e10bd7b040a4312\n5f3487876c91c0b5ddd7320ddee77bde\ncb842e500cebf07a87856c3f95c33cd0\n72b28bc54158f0d512b38b1d99376c0b\n194a4d0bcc1443fffcfd5149a4a15414\nb0bff9f866c3d101af25bbd7d4e31ad\n1205174a90e130bf595b6fcb838bee85\n54b68b9a4c40e86b3da3f9c40ebeed54\naf0bf9c4b6397877cb88c9db6e396994\nd08bf745e6f7e4b14aef47a2c7bc343b\n8b5cb45c763602a73a70335e147b440b\nd400c42c4c4b3ec1589c07868201b17e\na84652cb6886d873643ae903098a314\ne639996b832a157e6e0c9892807c7fa1\n6cf8bb50d1a8f0d7663e90eaf6b4ca52\nb72ed7c7239e7bfd8e62f59b444d701a\na4d66892876b5e0cb5acf79024643c18\n8a8f66b04e6d8f4ca9e925ec046bd20c\ndf2cec0219c10e0ddae3730658b53fef\nfb11e17c9dd72d6851cfdb4c9f126c12\n6f447ae319cb3f8c95822127460cc765\n2d0eeaae7231064af4de29b99f103946\na573925ea3002ef5878dfef973fade71\n3a3c0edd93ed40d35a39b667673bce58\ne1ba58d83c23c6d1fd4f49e0598b199b\n5162b8d6add4dcd7f0fea2ee98610322\nc26b3833f66cf4691756b5d674acc4e5\nc6bea91c2b9ac3245127e0873cfaa7b8\n2b1fdf919d42a55828b12a43019163ae\nff7afbe21c3c9408a2e534aa19c114b0\ne0513d1ceaac23ad341b8a806253912c\ne325afe389a39f49e641d7676ac20451\nfd927e1258969e1ada4044967c19cf99\nae53ea0e6011cdbde2bb19fbad3e4596\nc7e84421af16e48eadfdd35441a4b4ea\n569416cd964e365e20152153c3a56171\n89c1d5cf1ceb8a81c8b8e03401520eba\ne40227f3cfb50588ed6e4dd9aa9b9ab0\n698623ed6f1fb3076b2c8bb96250e4a0\nfe21904b4e1548ba5bd1f946b0dbc061\nedcbf89b4491941b9905a3939c890ad2\n9b0867286d296d3934057837e526fb02\nf06f841de5e202e5a50ef3fc203c6ba0\nfb36203aa01524aaca3e540900266737\n6acc9c34a79f98d0ff790997f2048517\n4d4fdcb113d7ed643a6842b1f893c19\nc7e59e374c2cbb7ed33646b0990bb4a\ne0b23c80cbe3a2d8fd8c7a1bf5db0aeb\n8be6c2867bbd8d27143bcc14d754d44d\n5b99c77733a74f36b74ae5e50aa93037\n175ac778b726ef5d48cb5e52f6edec2b\n3977db3c5730fc7216cf8b1cd2155e02\nc3065c23eea6a998547046f04c724fd3\n4bd456ea9809a296c60369962d1bf5\n5835fd744208d5c9e6f7dedb7e5f584\n8e27088dc71b89f9faea005b8f19889\ne53f8481983564828ef0c1f0d9cc8b8\nfb38cf43741e1189396ce275998d65f5\n5c463ee11ad412ffc75e2dd4efaea578\n59159483028516c55de49355f870af76\n26bf4f71d7c24af87ec95138ef83ef2f\n3e5711b79fd4876a4ef2a27f51a6e36c\n96c96b2569853438663e90eaf6b4ca52\n154c779086865eafe906ff5bb78d7b1\n792adfe42bcc28b36b12c93c965d90bf\n691880ea91ab76abde423072102e0bc5\n67c285f5c701d6cd8ea092ebe8f64ae8\n5019d7c3b413a57012b38b1d99376c0b\nf267ad7ff7c3a5dd763221be209af140\n8b1b66ae9e416cb13b5076da3c7eba98\n2ad5e27d42573768adfdd35441a4b4ea\nbb3f4468dc88370c9caab46c14deb892\n1aa5498ac780331f782611375da5ea9a\n5eb64afe7a276c243a653cb492d78488\n6655be7932b8b984c04419d9f4e18d0d\n50e559a32e81e8a9cc57882dfaef8a57\n926ced4104fb5d572f63bc22c4d8bf9\nf6b9cfaabbcfbc494298740d1f3c17c\na2b803e958f8b80b8903bced1c63244f\nee5aede335490e0f76b7c600f9352862\n76eabf417f880fbaf0cefc099c5b436c\n181d88c9e36d9ab88aa7cb0651220ba4\ne574eb37ea6ee685e1f2a1daf140ac9f\n3eb4bf4ca864e428ce168de955fd5025\nb942751009dacded735fa1ab17311ec\n12ccacc72630c2a4c4a6c34a09e62a92\nf31b23b6dd65d8ed8edead259832feba\ne9cd2397c0a7ea86341aafe10fd0cbd4\n42b44473503d82101c7be7f1ec012899\n621502aa0a01864d20ded1536778b0f\ne24570b7293756b7cc34b900bb2492e\n6e127603e720af7855731e75c389c9d\n30d7d9f98893cfd62511f68da65f4c4\n3be0bc4b1169ca4959db9878902bfe69\nf71fd8ebea347bfa3ed1dc72750c6f75\n4c727a571a5226549a6e43b878d5b335\n1939215162425a252bf06c32262648ff\n8aeacdb5884311663716c1574460b140\n28f2da42122d400d9d5d6d3d4bb65831\nb3bc8adb8349c958de423072102e0bc5\n60cd2f3d326475e829c6b4b73d88655\n60fdb51a9cc4011289172d41dca064d9\nb52e26101ea750dfd1f50c75142faa8a\n3238588ed960920c400c7ace1cfd742a\nb012c9d123aa8064ace721126020c1a3\n64021a29f7245e0fefdff89bf9a96890\n5341d156f8af28966a52e97955091b6d\nd83e4e5a7957117be6e1d9f65d65c2b6\nb7e25fa0ff4920f28f5b599a9e7928c1\ndbe471b64f9d8647e35dc3ced109600e\nd04048099296ffe4dd084a7dcd1680de\n5a64d7b0677ea932d08e423afb7a8cd2\n163101758687bfdf30d6a7e7f84a00b3\n6fa6eb2479a09474d87c63d8b3018b58\n989b655cb51914dde423072102e0bc5\n2254c238167dd6a5672ed1a3426b68fa\nfd95cf27de958d85827b7030399884a4\n39ad36394c9b7267e2043871148f79a\n604f91e5b306393fa884e15a61a5f4a2\ne88c326a1c2a570fe2bb19fbad3e4596\nf55544d331eb019a1aca20a2bd5ca645\n49fb34153b09db8dff790997f2048517\n81ba8d540499dd04834bde3f2f2e7c0c\n4defda42f01b1345119486cb086a6c5c\n5105e493bcf5e63f75a82b88fe6e733f\n7cb94f3b4bda0dd9783a7c2adc432e76\nee7d9264ce8c77d79d9900c00629c24\n2229f60c2819cccda50ef3fc203c6ba0\n83e29d672713f0da270e90bcf29dbfc9\n83a6f7a02470263ce71e857afa9df271\n41c55010eb7ab373a4dd752ddde80fb1\ned5e68fcb3a7be0c886fe00dcdc18c8a\n7eeeec55dc10e1bcfa9286f039319ff7\n8325595fddab7e47dbf42f7773eadf2d\ne6ef0c7bb7c73e4bad4c449f974dc221\n1a8c91b4803b3470f9c75ffd2648d7cd\na58beed0a033875567a4cd2863eb1ca\n4fbeedb2f1f43293b95520b5e9aadee8\ncbac383f55b031eefe3324230bd9365d\nac25513a060b0ca3cc20f30a7355a75c\nd03318b031d2105b5bd5996a1713323f\n7d2adefb8872fb564d73c4d754d3623a\n7a79d63c2cf6df519f605c8c86eb1ec2\n47879a6571648aaf5a5d51f7f565712e\n59aee3729d8ae9a6a8304814541fbf2c\ne0824487f2bc4502e9acddb06da3928e\nc9b36427b66414de42ca7cc070f21ed3\n3907ed2cfe0cbd22853c6f214c15e60f\n5df501ece93bd3f522e2c8abc98c5f41\nda421715af11fdb4beac07ad11d3663a\n639b18f1cbf26228e666ec68139b7ff7\n5190f781a1fa9b9a733a41fc18f7f056\nfa9f56b25119ab802ca888e33c9ff27c\nb548a4e02e014405de423072102e0bc5\nca012a47cf5efca23f9d84f9a87a44e4\naf6601f4d67d85e9422881265f219fa6\na467801481b450b8cc34b900bb2492e\n93743b9b3e33a272531756272f07b3a3\nf1938c5ed63aaa7c91c108af8af49f8f\n5e7afb318ff701583018d2d3c13a7462\nb3ea2d0331ec9ec650544cd7fa263944\n897e6a6307da50906314c3b6a3a65519\naa858f23b682f5616314c3b6a3a65519\n18598beeeedb20729a6e43b878d5b335\nc8b20ee08253136b77b7d0d4764c121d\n18e5827d2cfafd05d735fa1ab17311ec\n52486aec2292ddd48f0d3a3dadaf3299\nc8889a93245d305518c3adaf57b2e1d8\n2ed25f939dd286cbf4c4f1f541cfa2a7\n2f86138fadf4e2f5af56497f051566ab\nbc187370b495d54b4c82ce83dca284f9\nfbba8fc424ed0ad6f8edafa0d47e47db\n937f3a803767480efb6bde4b7e6c6613\n36392e6edec3c8b59aa300fabdebe6be\n9c3f797d9b352d35669d741f4ab14065\n154d2a83fc91d473d735fa1ab17311ec\n77ef2da2754d6b82fa0021572e849910\nbb46900b4f00ca7292659aea259f7c91\n7bd6db14ec6c37efeac2c9f41d1276bf\ne479b8f33a323147f0eab8a2ebef8e89\n2d203e283c13fd16494585aaf374e961\n7b6a6e33903b1639a5772249c0d44247\n94d526e75ba18f3326243ac6fb5d9ad9\ne4bbdf84d07fc208703494a0657c2b45\n281790c93c1f8876972d2a72136fdc80\n1ab4e79889c1288995f22290198b089\n32d410088758f9bb89dcfda443251892\nafab3cfa9a8ad5f55dec35fda9dd6781\nf0bf5f36ac0cbb2b1a77229b9f90bf5\n7e225da92fcfb868eac137faa8adc92a\n681e871906643ac4f9a24531fe7127c2\n55b86089f042d17f81d2fc3f6a98fa93\n6e1572214d2606dbcf7516eda265328a\ne54b7a716399aa646a29c14eca4d216a\nfd2435673c53179dd1a62290a53cce98\nf53a4093fb00a490683e3750b53385d5\nf730043e6a9843befe2133a365e39c7\ne85f80f7fe4c8f3266597c7d470782b4\n10cc9af8877d795c93c9577cd4b35faa\n45272a2a7c41e0095c97ca64716dc6d5\n94510c7e5c40166d1fabf3cbd0fc77bc\nfe286de2443835694aa96bdf46776318\n98f15a80dc5ea719d0a6af9bfb470a20\n48d5a68d2228359fd735fa1ab17311ec\n92431d034edd34c760c81723f0d4ce20\n47a5a10a047f2c2582950cbf0fcd4d4f\nf130c222ff91520182c15a8613f6374a\n7da8e9ece43c210e44b4519fba3aa36\n89f4f2458aa64d94daf2e4c786df29a1\ne06992f45548f0416b34c3751bc447d\n6d751616e0ca4ca0aab32791f5a03201\n5bb02bd49d2ce6e590b94f57d8818348\nbefe2c697ac907f5410d23b0a192e911\n164fc79c2ecf843bc8e292146f3d4d52\n2eb8897f028d20bda27aa199c0989017\n59ac1042dbfeb36e51cfdb4c9f126c12\nf36f38edfbde85c73a04e41b7ea7de8d\ne9fd75b68e06c18cb056c98b2e5e5e4e\n667772e778d69333e2365746e867db8b\n5b70d54d7f40fd8e5c413e9fcbe8ea71\n35af9072a2ac0c485ab5fe67efb19452\n9548b43e0f416e3a4a4f87aa9a31cd70\n1a289f162d63c0fa8dba2b86f956c537\n981b30a44557ae28caf05f9cece7ada5\nddc90b69e90b208580c2e60c312b0f09\n71b79bf11ce7ac96b839c45792f79dd9\n9301e31bfb2f8f8d88be2a30dd556a09\n7edd1e50920e559e0befc0b4697d414\n75bf3b1cfba045819e172a9318b5b7f3\n34e8142e7b3cb229d735fa1ab17311ec\ne8a019a32c42bca7bc6e84bc30e573cd\n78a1e4efeac9bb6f55d33831e71fa52\n5fde8eee79ab6885f0c705d37665dc32\n9ebdd77ce251d68626243ac6fb5d9ad9\nf1f780b6afd284d0764c65bdf1040995\ncd157c59d1caa30b1d9b004d9d8d2781\nbca09e37935082a925ff9d2d1e4772c3\nde637cf64b212f4061b28e02a259d647\n144f38700549b35b31f639996cb3d35d\n82c56ec37b153eaf97ad4936ef9fbcdc\ne35192fa08101d5db257aa9856dac07f\nc7f8678e3ea91a99de50356926b60476\n277fd403270ca32b72e5d9d5746d6da7\nf5522cbc96faae02cfbc7d85a5791e93\na15d5a9816ba40bb76d500a9282a3dab\nbeb9c8ac912c770bd5e0e036a4082b58\n285854c90afd66c4c9e18dbb8de06b45\n74b14a0da86ff0b6e1f2a1daf140ac9f\n218c020fa843aafc99f5e7ab39748cd2\n9718f974dbf0c599f0e835155cdd677d\n8f268f9f187292f1179177d1cafed62b\n255b002258e74085d735fa1ab17311ec\n74b965dee85e951a818accd7207190a0\nf5cfa769619f708bda733a39f84326d\n20ba04acfb3a2df63fa974f1d1a1ac62\n8145a8a2b974f4df8ae8d8f46e8d6c0\nb3e73818cd2e03c080149f7d680e9c1a\n57c6c69a1406e9be21d9cbc846872d86\nfbee616945eba3a3dde107ed8a50fb4a\nf8af5b4ded94bfcb9905a3939c890ad2\n87a868bd1d4cbbfbff56a19447480f3\nbad9e6cf69ec4553db181f2efd806577\n1e57dbf3e917e55c25ef5089f95ac09e\n8caf6dcbdebba2221326f2506129299b\n2832026da7b9c61ee1f2a1daf140ac9f\n28444490d359fe49cb833b31b53d151\n63c944adedf86b80f8915bea3ae2769f\n347cee581e94fbe5d735fa1ab17311ec\n963506132e08855de5cf42144086d22a\ne57dab2d63693b0280c2e60c312b0f09\n511dbae3805dad80ab5938f464bbb85a\nb017d865b68cd1adb4cdad9a5bf52dd5\na4888af5b6c4c631cb239ba7670e0fec\ne48d07c71fac7387870906b5178d97bd\n39bfd3455413996df8f666ba0e601ac\nb6feb20b14f9519ef933a612bb11b1b8\n421da608bba18bf2688fc2fc0a14edd5\n8588b43940114af7eab5ee569c9de1b1\n6bf8c32f62fb38bce1f2a1daf140ac9f\n1d9d85fdf5241ec31dfb190851825aa0\ne1fd9153928081d93b80701afa3beec5\n6a283eba0e45bc63525c1baee1f19994\n1d69667fdee51c20e6fe695987d47043\nf30464cf9aef3abea7f9996575f1f5f7\ncb52cb876bb3ec76aca1893e093d31f3\nc0d928c692fd95b547f0c66d8dcbd422\n6072a9dbefe5fb3ab397b12318e6683\n5f0cb03ebd45ee7d735fa1ab17311ec\n3474d85a58796c7a935777dcb8deec2d\n6e700588bfb6de35f30e6249e336e80f\n9168d4697d83cb9215bec5c0df04f3\nf80ec2ac6f6e851bca7250d90eb506cf\n513ba432b16287f5baf4b37340b9dde\n6c82de0208ed0f551ff1879fbc41d0b\n574e6f325fc821ad6314c3b6a3a65519\n27257aee4b0f91b1a16c70da5e24216f\nfb96b1414205d7b525c70fb1df3f879b\ne93954daf5406e15e564d15be4778337\n2f9d017b565a274f2a1ecc02c3ced6bc\n19035d7059eaa5b1a27aa199c0989017\n33d90fc45cfadd54cc273c614d275d95\n700b82751c12e8ea3745d03a006445d\n5376c38ea63848d643b0dda994f793ec\n192309e06577f893bb4594cb67b6eaa3\n1fa2cbd03c1d57829f7e0a8a6309376\n27fc3208942d136b92cea77f96988ae6\n58f98b4bc889c7f580b72a37a25b7e72\n23a5887211380b2f663e90eaf6b4ca52\n4e007e41bad1b1cd735fa1ab17311ec\naded0c6beed6938ba39dc4a567ce225f\n73dc8568cca29c0f7bffd97a22e78e2a\nefe36ad683de3640a5aad165050e534c\n48620fb309184d4bc5e86946f2168706\n5d2c6ca737f9accf683e3750b53385d5\nb6b6d7cbe981d57276c3d558130f8b4\ne6fb0c7f8a5f944363e66191800dfc8a\n216637165f69a2b5be0132953bc535f3\nff3425cf1860b6116314c3b6a3a65519\nb3f0d3a6734e040be658483f9f1a085\n2165d568388bfe649a6e43b878d5b335\n1f01ba0f7e0948f56108ae6b1ec0f04e\nca8c360dd014910ccc34b900bb2492e\nf4775027ca39270897ddede15c51e64e\n54ea995ca2645fe0f4c4f1f541cfa2a7\n7eaed6f53420b4ca51cfdb4c9f126c12\n82ed6ca9d8f6e80ba46487e924d32c5c\n2f5dd43b4ffd7d433dd48eebe8f7b24\n9e6ba8035db3ead6cc34b900bb2492e\nf97e307455ce56a734e7e0c760ac1c0\n13ff0ba1e8d79a927f71da36e5c530dc\n91b0c8975ce241d69557371cff545901\n4bf3fd740498b489a7d276ed256acd94\ndbcad8c956d195a149a3c1009fa79820\ne8bce069e560a97f310bbd45bf9024da\n121ef8a289b232a73c5eae1befdca7aa\n59b69d23c7a2f9568f12efb4f632da7\n36083138334c7981d735fa1ab17311ec\n78c7c7037e2ac7a7e0490a4a721b5273\ncfd06e58d354213c8f2a8ddb5c970b6\n951b61886488dd94d0b636a2d5e450e4\n508230aada88eb0a550a87cda3436d95\n173476ce3541392d735fa1ab17311ec\n38c4d7fda771b9b984593c54486394e3\n4106793af469db6bf0fea2ee98610322\ndda8e93517cb8c0ac9e18dbb8de06b45\ncc353b464c22be528ae80165ba928e0c\ne6887514f6d28e446314c3b6a3a65519\n409306cbe659e516bfd79d2627fd465c\n4301f958c305ddfda1b7cf86a93141b4\n6b14119033dccaa5d735fa1ab17311ec\n305a895b0b06808b9d5aeb7097eddbda\n3919b70a16c630f9d735fa1ab17311ec\na759e6ddc0378dacfdb02ff6a9949154\n8369cd1bf3c6f377504cc74f24f0eee\nc57c4311f1f23690603b56d612737c9c\n6f09b74771f8b4808962281585efe24e\na2b9d8c5357fc0aebc6dd9ba5ebd71f\nc1e4e78ba2b714175814fafedc6971c7\n3b8a22fe5666ec993bb35aa9d5fb636b\n149adc06e4b1404940232a3c75f1f92a\n34d2582f7fc79e07a5fc2a01ff709b89\n84b0027c1568c9c3694547efe15425bd\n487ef6821e82c9548839ade0cf1fb995\nd761053ffff137701d9b004d9d8d2781\n6f86a5fd7d3a52dad735fa1ab17311ec\nc253c204b55470eaf4e90b82ab227094\n1632f8ce3254cfccc8c51c73cb7275ed\n30d2c5e8e703abe3f6503cf22f39c9c4\n199c603cb0ba88899ac559af07c55afa\nefd891428cb699e78dd4952817969d63\nd05f6ac929eb1019f5cbed688a0bb106\n81593386d69131c5228625d43be3e606\nf16eab54ab97a97c8cb82d02bad057b9\n7fe56b2c6ee7d118994714b2bc8b41cf\nc497e1a1ef3515f197e3ac788f68f6\n2348490cb8fae973b6792578a0d9ae89\n1fd98fb84317ae248cb94bbc7f05ffb7\n78e2a75ff1d93138e8914057d776d90b\n3ed4ce6dee76fc90180d8ddbbbd9bd3b\n27156455bd418715a50ef3fc203c6ba0\ne9adfa95465f806b056c98b2e5e5e4e\n166508e16d31488a6a34aa94ca8a3355\n4dff14f1635e9abeb1e00d60b0f9cc70\n5f8daf709c9d4edfd3b936925082270f\n8b0710069d95b4563a411ca33a218449\nf499b088e48914256f260fa9465b564b\na2570eec88282cb3d8569d1a6c25406f\n8036d88d38432a11ff18bc1311316304\nca13a3342c397d68952d52701459b1f0\n4edb165109339c63cc4d8251423f62a2\nd980e47a5890b42e296e0e62674e2efb\ne01eee98a8d18a29a2d71a426315b93\n3592149d9f069cff276c3d558130f8b4\n7d0b9246a180c59785c111973dec28b\n354d382fe282ff567ce76669ca87ee34\n46b29fe9796be46497ca877cfb285ed8\n156fbb9dc2645686a3daeaea95a3adc4\n4a0f1b426cea6f13fb41747dcf822261\n"
  },
  {
    "path": "data/filelists/04256520_test.lst",
    "content": "3b8f2b955ee9a904b3c42e318f3affc\n3a98a93f381ff5fb4b3c42e318f3affc\n9d5461070e008c453bdc60e3df3aace8\na7f45bd27efe50af4dbf8d635749f669\nf2edaaa8bef11dedbac8a2db6cabda6a\nc9fb9cb259692ec0f7248d9dbed7a7b8\neaec2a137b0858aa599dcc439b161a52\nf9429d6bef2df25e4dbf8d635749f669\nfe602b7929307607e59b39f8355b80d\n1fde48d83065ef5877a929f61fea4d0\ncb61e530b7c20409512941e37c7d7dd6\n20eee9b40b2f6f36e4947ad76f8ce42d\n629e4382f2d569f366b86624c235daca\n55e0dfba8cc226871b17743c18fb63dc\n14658bfae450e891b89b974fa14a05a\nd3cc9f995b1f2b2dffcd08faf4fccd0f\nc9f83c2615326e7aff04196502786921\n3c0dd3719baecf3319fb4103277a6b93\n2a9fbcc138834d07a6bc98af4c2f54ca\n559019119818194931df860464c5f16c\nf8fc1fa935aa8f792ebeb1e6a8111f53\n77196cfcaabb6f750cf3715818ccfe8\nb8ab014839e2a28af62af8489541547b\nfa5bb6d18535f66219fb4103277a6b93\n9571cf49ac1752984ee1dfc331dd3e94\nfd181390f71ec72478ae896933c670d1\n694c7bf2ad1b133b1ce14d4c70990479\n1c9d333bda4b2977f92f3e7bff4c4ab0\n9c103621101bcf9919fb4103277a6b93\ndce866778584da8219eb0cf70882af88\n7f0bd726971e34eef9aec59741c69cf7\n80e34c832c4881c1c1acd07b40d583e7\nc09ae0a971165afe4fb315ce917a9ec2\nb6049bcbc56eb65e2553cc33364504d5\nf6190e61f116d159ca119b1ec88d8df8\n42eb9cb2f34c1ac81be5c5f8d4f77343\nc80c48b901ad94effebad4f49b26ec52\n753e1bb8f3164ded7b3ec0bc4f26f615\n19dd57f04ed04422c528d33bca1ac2\n6a42a50f5f6d959ec036a40816608369\nede1eb2acb5ba12e7282872e507d5fff\n901440644e396746bab0cb5a4ccf2fb2\n899389d5ac054e7f33a851a05440ba33\n7525a8d905a7aef4b3c42e318f3affc\n4e1ee66994a95492f2543b208c9ee8e2\nf3e10fe9995b4f864b3c42e318f3affc\nd5a11602655790bcdf6cfab91d65bb91\n54a08dff9191dff13462c3e6678345f\n2f1e6b2c94d6b6c474072e8e7f655555\ne352b0882699b66a44db04bfb021976e\ne48455c2ad642df1febad4f49b26ec52\n240b9fc8d34f3af17e20865350fdf369\n34fe095ab6fbf3a09c0b027ae5b223d6\nd13cd4fdf27074854b3c42e318f3affc\n8ce496ed6befb8db78fffc86da230525\na0646924dec3b2c97348ac642586ce23\n4cd14d58eff772da946789884353d9f6\nc3664a4a708086a448b7e15d7b3646df\n979ca0cbd4bffe37c7b11e86284a2e\n6c8364730b3c64a43fddc4e3be2d83c8\n1299643f99c8a66df59decd9cfc8a5bb\n47ad0af4207beedb296baeb5500afa1a\n983f0b9bf020010159f8e31ca87c470e\n40a6a3ef4e4e4c4c300703f05f8ccc25\ne75990aa494d4dc7371ea954c8939aa\n14aa542942c9ef1264dd558a50c0650d\n450b2b913495b73e9069b3c9aa123329\nb3b18a2b0bec3bf1593ebeeedbff73b\nee7ffc0b1cead515b2cf0fffc23ad5\n784b4379cc7e74e14fb315ce917a9ec2\n819038a4b8db3ed24b3c42e318f3affc\n2358a67773472af0826fc8d57346a2e4\n9900929c21330dacfebad4f49b26ec52\n7cb3f49789714865a494798fa117187b\n453d56b5906989fff29666f384be6c43\n9866fc915383a06cc85117b19e0f4ee5\n302fc57b3d180ea4733824eae5cd9ae\n235c8256c6e973de19fb4103277a6b93\n2a310d5bb9e5b1ec162227055a96104e\nad856cfd25b91563c681404257d94ad9\n8f1ce2b3b4f352254b3c42e318f3affc\n31ae964a8a9a15e87934a0d24a61231\nacaf2b81121c78f6acacae5381781ae4\na47681de164dccc6ad04591c9486ec0\n30ae6ca65155012e4b3c42e318f3affc\n7b914fb42c8f2368393b1800bfc51a93\nf7c79c7a8fb79212ddf7c7c2aa2325be\n9357812939117927c0450f087c15de65\nd5424df6acaee9762d19175e7d19b7cb\n45aaa81cb6b7f1585e7dcc6fa9b3c324\n22d997a2ee077e3f48fda83c10428379\n5a8adf52078b5008490ad276cd2af3a4\nccbccd9a5bfd52cbd29d1a0303294bae\n6b6509e3589bc296c10c5f14d140478c\nb44d152534373752febad4f49b26ec52\n6931000a5a1932b6a494798fa117187b\na6239b94b8def78a2f7a42055c3e9340\n9fa4f3e75f6bcd89b758c822519f97be\n1543a5ea73b6ab10df2fa7eaa812363c\n2862150fe6816499130963f0203c947\ncb311c253401e27165eff2c7075317a4\n33ee49115aa7125ddc37657f7fe19edb\ndda3a0ecc85a337a593ebeeedbff73b\ne3b28c9216617a638ab9d2d7b1d714\na259b6ff6a4a787b4c30acd2d55583a\n4c1ac8bd57beb2a9ce59ea70152320fa\ne4066cefe0230cc7b2ccd937df5da28f\n91e6ad8710f56cbd91d7b2865937b45c\nbbf1d8071651580cc79b370d801db3b7\n337f25da3cdae83bc7660a81296c2300\n43e3fd98669121eb826fc8d57346a2e4\n5171a910435f4c949a502993c14408e4\nc446a77a01eb3e59a6380f3fc7269ff\ncedd4ec33ee3b2de7252a102efb37f50\ne1fe7e3d2dbdfda9bb5bd941c6665c21\n9e0feaee4da30fe7fa038765e58dd68\n3d5084d5e7654bd11cd6319703a6cb25\nf36535e1853b9aa5fbb258508605d4da\ne6e2ed3f41a3eb951197663c308adec2\n105849baff12c6fc2bf2dcc31ba1713\na8ff859fcdae8f70f2543b208c9ee8e2\nbf16681e4b86db58ea07fbd08eb87bf2\nff2a456b438b0f2ba494798fa117187b\n63e45aeea568f1b0c35131da26f8061a\n4ba2ad7525a7da6c4daf5898cf18a390\n95c9ed9cbdae00eb768c07b3cdb90be\n621dab02dc0ac842e7891ff53b0e70d\n8458d6939967ac1bbc7a6acbd8f058b\n8fce754ab94cf3c0e07a1c4b84dfd325\nb1f4e7cd4a1b24b4e086fd45e580f116\n4146baad4a04882613f96345312df593\n308a144f77a7aa2dda625e752fc62bb7\n98546869c4ac8516febad4f49b26ec52\n396ee2a2333e80815b903ba10d2ec446\n5c39c2691a36d9e5a8f59bb67a917984\n4ed87061082a0ecb273e86fe77f08a50\n6d60b813582de6c1febad4f49b26ec52\n36d43bd7a4f90e69e2ca61e91f2755b7\n42f33746d7f0a8a24d3485a4d7c3a3ee\neac135eb1aa4665c4b3c42e318f3affc\nf1d1fdca528582dca6c4f2c64bf812b4\n9be24460d1f7d084b3c42e318f3affc\nd6d69d04e3c34465e9fa215d22832290\n7a3dd8889b18cc80f51f77a6d7299806\n82d25519070e3d5d6f1ad7def14e2855\n11f31367f34bfea04b3c42e318f3affc\n7c8dfc67f9d03d02bddaa551be7f3f7d\n43131890e972bb1febad4f49b26ec52\na9a8156722fa81dcbc36ee6cb276b00a\nd377dbbf7b198ad474fedb3ee91ea4c1\nae36181b10bbc7c564810cc21086da42\nce424dd12ccad62575206c207a147264\nfee915afe193518dc036a40816608369\na409f5a41d2acd344b3c42e318f3affc\n218a7b0cfc87312925a3aaf903a41c90\naccb504861a4091b894b04fea82e6039\n6dc235ab4a2c7c6810edd100dffd8d85\n5b693b3edfb323d0febad4f49b26ec52\n33f862846366476fc79619984c97c1ff\n7b76ae65480d1312538c0715f23f94d7\n4180d98246089cf014038d588fd1342f\nd906d689ec1edccffebad4f49b26ec52\n146ad9d78f06f1f0b246c4171f2c393b\n164f50d574036cfb2ff0fced1c150b31\n5b7b8b094a52794675543092060e57fe\n144cee9408bcdc3ad062f9c4aeccfad2\ne70fb6dca41fc8bdfebad4f49b26ec52\ncd1086902b5eb749f51f77a6d7299806\n3ffc1c26db51a3ac948a3bd895ea5ecb\n24cbeedf72674d1eb615f5e15a637115\n580e58ca5b0f8dcf490ad276cd2af3a4\na6ee2e98e8ae755f37af16b2893f1d4\n1f28f2ccce4940f2c6fe57159221338c\nea9aaecb6305da9ff51f77a6d7299806\nddf7a59004522f04c366b8589aac6975\ndd572d69cfa263bfdb10cbf40397412f\n137589e785a414b38a2d601af174cc3c\n9a1b39f920863964b3c42e318f3affc\n74369d5fdfa2356a066c1f884f0378\ndc89ccf0f13d42a83abfc4d0a5688916\na4367b42274cfad1f2b7580a739cd4d5\na0a53f2f112055d496626c84a010ee5c\n21140988a7602153f05a611b5fe35f32\n44503d9ba877251a4b48718ea0a8b483\nb403f11f5ea4a6a9d8c9ac981f1e537a\na49f6cfce3d854c7dbbc9440457e303e\n4a7db7357b6b6249492d9da2668ec34c\n5cfec53fca53be4cc9fce74028b97ec9\n13169bd2b9b02ad44089c2a25bbcbf23\n6c74c7ab655d540dfebad4f49b26ec52\n33d6c09be1a1a88a48fda83c10428379\n21236ac9a464b22a91fa1c643766450d\n369dc8240dd358bbfebad4f49b26ec52\n63865747038e4c66c35131da26f8061a\n26fe44345859362569e2e0d2caa039\n30cc7577792d4dfa4b3c42e318f3affc\n8603da907b2d1bf0a9c6c82c1fd82c5f\na0bb04577e35ca2440ea7eb155c4e420\n859e3eab73311f38ce59ea70152320fa\neeb9c7f343677bc7167c63de52dd6bbd\n2853c28f2690b0a48888e7425bc4b85\nd580b1bcffceaff39f2fd5a6f642de3d\n51dd0bece7876a8744fe3ba945082ada\n96055e2a648903bbaf2302630d34f30e\nd1f68ceddaa3b0bcfebad4f49b26ec52\nd644ef328d35d28ffebad4f49b26ec52\n38fd2710b8fd5eceeffcc073d8ec38f6\n412b9f3244a5cc56b667ca2c169528e2\n306a6efdecd98ab1456cbf78e1e89022\n398bc907b92b0260285dd489701ccbff\nd31fb17a6a6515d5febad4f49b26ec52\nd0b06478f56a1306e8f8c11a24c52ebb\na875e8dc1a39c769440e386b5061b2f6\n1aafe6bb91e66b1a22e6294dfcaabbc8\nde91f9457052646eb658faecaae06eb0\nde4e483a1587da9fdb24ee630144f57f\n1e71489bb315efa0eea222b336f100f0\n58156edc9c54973014038d588fd1342f\n96e21b275c9bd83bec7cbf3284585a40\n431ed7bd770ecdcafebad4f49b26ec52\n3d863a4eb22c548e9d4d5dcd2cc33826\nb929ff628fee53d452f2ff843abfed75\nb3b659db2b29e8201dd80053668dcec7\n841cb38f7447dc698e4182295c92f949\n7dedfb51ff65c27f67bb14b25f99796e\n201a6507d261c9113847ce0a45864e80\n1c4bfbfceb9e579c708f430fbe4ae8ff\na8f10f404b317af4946789884353d9f6\nb6cbabb92f1d0965de85c11d95003a6a\n49e39486a1df116be3923f7359326ebf\n8880686b417a054fa1e36ad603c7b9c2\nafb937bd74261f5110004612ff5e29b7\n5cf46a99a9dfdc07411e8b42940aba04\na05d53587e59b2ead6784d11c8f5b5\necb362a469c76e76febad4f49b26ec52\nee5631d8abed7e69b06dae6f40c44a8\nfd7aa76019f0149b6626d14151ce40bf\ncb71cb7b36dbcb6f826fc8d57346a2e4\n9ea47bf98413280bfebad4f49b26ec52\nfe63ff3ee440cbe2cbc66df5fc1969c2\n8bb72bf16f65fced40ef1c8b63a628f9\nfd2449fd2aa8b142febad4f49b26ec52\na409a2548e7cdac7febad4f49b26ec52\nc8e37189356e5d1249655ac7c771b113\n8b3b675ddd2305b98eca6e74f79ccd04\n3550a44cffb1fe001acfe75c509b3399\n7bc386f19f261758664b3b9b23ddfcbc\ne9ffbfa88c9bf2662f3a69b1a6aa6812\n40337cef87a495ff6e8f2cf4a97051f\n6d7972e468db59a6613f0dbd986ed6f8\n9f12f8119a52b141effcc073d8ec38f6\nc63d2ed731595cdd8cbb8bac2032149c\n8a470e5b043a38904b3c42e318f3affc\na8abbef69d380399429c5e5ac1d52cde\nfee8e1e0161f69b0db039d8689a74349\n3dd89f170133fbd7d609055a51359428\n390562a0a7c74cee19fb4103277a6b93\nc7e3aa97aa279582febad4f49b26ec52\n1d4e0d1e5935091f78b03575bb54dfd4\n6bd1d677786634ad27118ebb1d23c10\naeff4f4375c08e8ab9c8adebb50c258c\n5148f79f518a42794fb315ce917a9ec2\n9ab0a81e580dc1f4f008d8a3590fb522\nf39246dedaea087c397356311cbeea4\n7c31c4d88c67d094b3c42e318f3affc\nfe48d9b6cba42ef214fa93b6acf93e82\nf7b17391a903c29ef84b0be7f50940eb\nd71b806ed0d2108dc149927e19d9b07\nce378b91236095622155ef587b4a7084\nbc0971df7f259c581d38890680ce527f\n970aaae286331b9cfdef1c01cbd4ae0c\n8a207daaf453777de79c8740b4fafe4\nc866adf9f2d0bdd9f3598efd14e493d5\n5d6a4faa40dd337826fc8d57346a2e4\n64dc2fa7007421f9cf46315936cd9301\nbabdd63b18d73a196625bd63cef94df1\n605fd6f6541ca57de56133f0e7d362b6\n1fb52b6bac60286afebad4f49b26ec52\n2b49c5bb1f8f8e50febad4f49b26ec52\n930bf61aa004692c1834dcb2b62a80a\n65dd8c9418c29ddba066c1f884f0378\na9bfb70669bd7f37757a6361b10ec08\nc9e41b8e7827cd963dbb061ded33aea\n1d5675c6d28fcaa0f797b840852566c8\n225661a6dcd77e7dbd05ef637b36b199\n67711689ee7d8dd76b4675882670d943\n6971254cdae82dccfebad4f49b26ec52\nb435dc75dfcee77c4b3c42e318f3affc\n16ca439cd60eae5f23500a5b036df62e\n6f202d8517db172a5b2e09b1c446ae22\n514d64dec987c01d552ef6186e5d52ac\n32464457314622264587e90e2fc67ac9\nf2fbd71be2c50fd89fb1d3c5138b2800\nbd3cb48163e43810f29b3e56ea45251a\n2e474051a376ecace543d6ca26cbd98\n51f11001548cc8c0febad4f49b26ec52\nb526808fe0903b4484e132150e6e3ece\ned80dfdb4a552b189d4d5dcd2cc33826\n93d943320472c9fc599dcc439b161a52\ndcfdd81e4410dab49f2349486c570dd4\n2507270b7e344bbda494798fa117187b\nca6a71e5ad6e8964ad33b69f9597739\n3b15020aeaf67cd5b085db76290ca220\n58738b85e8a13c14380e1a7742e001bb\nc6edb435655e832debe45ef6009149dd\nf846fb7af63a5e838eec9023c5b97e00\n13d0d8dcb20c0071effcc073d8ec38f6\n3cf0d27803acc8cf1290417619264ca9\ne232e06ccba3e82d27039dbb84e920ce\n6051f687d35c6ba577dfa90ae0b0a3ed\n8ce7a3ce304220257c071b4859b99983\n77f5e753014c5b69b4b4d657a4935834\n90275a9eab184067e2ca61e91f2755b7\nbe5f2498434ecf9a4b3c42e318f3affc\n602e0f167c5edf327289c00b6dc9ca\n2c6dcb7184bfed32599dcc439b161a52\n784093cacaf5a2fcf3598efd14e493d5\nc304687f0778986c6f1e631ee7d027b9\n781ef644347280bcce59ea70152320fa\n6ebad671c5ccfee94c02d21d2fa4d397\n82c4b96fb61723aef3598efd14e493d5\nef2d1c27124c41e06bb6bc0db07c71e8\nf67714d13805df294b3c42e318f3affc\n57094371244c13fbe4ee93147efa8cb1\n2e12af86321da41284e6e639680867d1\n59959eb5b4cd9fd15e0ae65e074d3ee1\n6fae3f21375b43b24ad33b69f9597739\na731e2ceb44d59e1cbc66df5fc1969c2\n89ce842fbc7c786d2d19175e7d19b7cb\ncf651d12e2048e1a4b3c42e318f3affc\n92447fe6aa69f89fd25437aef1f56568\nfa279ffe1c3d480e4b48bc115078129b\ne78c23ab7426227b4b3c42e318f3affc\n19f52379f01878ad9517a37c9996fdf8\n14016326133a68c72897bf4febc9c106\n62a0f0734b9111084e78d6c405d01fac\n8fc21752c5c874626b4675882670d943\n4e8087f3851d85cdeedfca8b846d3b01\n4f2ab57322d7a7e3df63d1c7e43c783f\n771a9729f19fcac4bbc7a6acbd8f058b\n36f4fa1689803b442d19175e7d19b7cb\n3ac6d1680c7e0ba4fb315ce917a9ec2\n1faa4c299b93a3e5593ebeeedbff73b\n3f79bfdf49c2b654c397356311cbeea4\n251fc26346ac1897febad4f49b26ec52\n934cbc4617c6a6f4b001e9ae2ac46c17\n2554d1db5fc9ebe525f8fb09254b26f9\n96aa85a45fed687dbbc7a6acbd8f058b\n548f0e39d6ce5adac036a40816608369\na4de0830d9a1020e3b85980206d96693\n3d0aea03fdbcbcc1dad4c6b86f1850a6\nf20e7f4f41f323a04b3c42e318f3affc\ndd85decc87fd988c524446331aa4f326\n6f6a4f12041ce6d2593ebeeedbff73b\n3a99bf8e2a3e5e294b3c42e318f3affc\n34bbfab80042b25bc1bc03f4ef8a4411\n96de367b3365416ac580fdeb5460f6d6\n91839305f25521a3fa5b6212657ae4a4\na5bec86d283a19aef296d2773652c8e4\n1b4cfb30e4f49edb4b3c42e318f3affc\n69b501570e12c4a12c216c5e0f221195\n4a463efb8baf30e42d19175e7d19b7cb\n8c03e6ea484108bcfebad4f49b26ec52\ne1662c8dfabda9e76eb9b08c8a74d159\n1fe1411b6c8097acf008d8a3590fb522\n3f1e897f2da10d808e52cc55aebae3ed\n6e4fab35f29925f14f438613584cbdf7\n51194e8dad49dedeb38821f893bc10f9\n569c7293b52b633814038d588fd1342f\n58d87762038f551bf2977dcfb5a9b56a\n8243278b0b5881fd41ee82033240ca28\nf756d6d576a3e238f797b840852566c8\n1b25f96d97a94b05125abe33bf4f0061\n2cb0f608feed6256165ce3a6b1468e1\nd84ffaa12c52d6a9994626ba7fe8ddf7\n5e6fe3ce7afd4490441e918a50adf356\n6b569ad307bc38c06eb9b08c8a74d159\n51142db12ba0b421997d55757516b24b\n18f8fb3fd6222959e8f8c11a24c52ebb\n7a77351c67566e4159a4e5a60d4753a\ned1acc5b1cf032b94fb315ce917a9ec2\na996982326ffe668593ebeeedbff73b\ne16abadfd438100b65569474a61cabc5\n3946ab8df54210ef1789afaa92d90146\nda77fefef637adc26eb9b08c8a74d159\ndb01af2b84f8a9f615a72fd59f390cc3\ndebcadc4067158674ab1b242068f86fb\nc309f25d69ad12dd4733824eae5cd9ae\n37fa77e9e48371545397d07b571cbcb\n5a95984eaab1d85dfebad4f49b26ec52\n31256698e33ac007dc149927e19d9b07\n7e9f11492f1db0e5e81fe3f8835bb5ff\n49d28b2dbf11e3975e4b35ff1ea95f37\n5f32acd6df675a414b3c42e318f3affc\n855a071aeff2351a593ebeeedbff73b\n5d2c7b6f863379f1788963ea499c61d\nc8466c51d29e4782dc149927e19d9b07\n4c92e530e76f4ee3febad4f49b26ec52\n8bd993fc6a605a63ac4c87b0cf5278e7\n29fb859b965bc4af691e0e3fa7867bda\n849ddda40bd6540efac8371a83e130ac\nbfd15618fcd88e104017642dab433250\n377fceb1500e6452d9651cd1d591d64d\n76a9d700dcc91a5fea4a3d2e6628d0f2\ncc644fad0b76a441d84c7dc40ac6d743\ncd5f02ca40330f18febad4f49b26ec52\nbc5a26c2915a592091a3aa674c7ec1a3\nc144f9c06cae44492fdae21c212bf119\na0c9e23365a3516dd60ef9801956a8d9\n1226d123e89626a2406329dad4c94770\n4ac96465d859ecc647826489152a0c30\nf444000ead89fbf2558ba0061239252f\nffc1283c098f46cbc6ff4c4f6444568b\ndb1ca6cab18d4084191c3762b497eca9\n7598c48286a63854c02170c33e00ea64\nc8663904bd8af794d9b53420a5458c53\nb9a1600948000fbbba50f3b3c1c84054\n8e74405f71017cd5d509fba1e6dd3b0c\n317cd5686899922e19fb4103277a6b93\nfb65fdcded332e4118039d66c0209ecb\nd98731f20d3de9c4d9b53420a5458c53\n5eb193a332576b775e333fe3dd3959a5\n8daffd33afca5e02ca8dac6d3025a7da\n1bbc63fe00a7c3e2bbc7a6acbd8f058b\n949054060a3db173d9d07e89322d9cab\nfefb2c5e88d7e647eaf288f952624966\ne481539e23b4665e20768660cf080d12\n3ddf9a51c44970fd5e4b35ff1ea95f37\n12ae9aa6900536aaf24f0645d0949356\n9ed01e198c9d70a5df6cfab91d65bb91\n83d39faa5782395b651fb4677c188d35\n325003759d3fefc7615ce01bf34878f0\n58cf696abb5d3e7426415728d9c23636\nc37d49d715cc4d2ec7e48270ba1490a5\n1ebf04ee0e620619ea006adb8af93414\n20ff83acfd590101be65001d50394fd9\ndbbf72729fafaf3737f67f4322e8d3d0\n76fb7ca32181075e9a547820eb170949\n766d94bac9ae085455f9a00acc25f137\nc55d36457611e7fb826fc8d57346a2e4\n8a0ee11e68d4565d72e26fa14efa9297\n337b0e3fb3c00f6e6ff454af1e8947f3\nef479941cb60405f8cbd400aa99bee96\n4e7062e2c776db18dbbc9440457e303e\nb228fe3ec218f2b7fd609f4a869e9831\n5560a425c597eacbff841fc99bb16039\n5e3be8a7a61235dc2099f9e22ca45b04\nf43414acdca3878674c5bf7a74b1b6df\n3582dc0c828ae4b1febad4f49b26ec52\n413e31ca041f65ee5b40246fea20c2e7\nb1db7a545796dfedce59ea70152320fa\n776e86412e7f3c6dffb78a7278f8e374\n17278f64413654cffebad4f49b26ec52\nbc8e9f4d4076ce4f6b4675882670d943\n8ae5acfaf2b115382d19175e7d19b7cb\n730dfb84b370682d9cd8353ccb52cf6\n6c9beda59f24f107b001e9ae2ac46c17\n23780fffcd205ae9f1ce854e012143bd\n5f50ec09722ee31fbcd054bcf140e51\nf85f8e6cefe5aaba4b3c42e318f3affc\nebdeea981de34c1b2d19175e7d19b7cb\n2ab2a7cdbd8770318f17764fa642770\nea581514b73f4707febad4f49b26ec52\n3a27e270712fe178ce59ea70152320fa\n5fa872fc2e0447fe75fa15ccf4d13b00\n4c044b514ab3e0eb6eb9b08c8a74d159\n402c270ea6fd4754d93768e7b9b1eabf\nf813edee6c5acaff4fb315ce917a9ec2\n85bb2ac1c8896881837d598c1c392d83\ne91742c726572352593ebeeedbff73b\n312ee9c8bc6ecec5ce59ea70152320fa\nc63e1750f61af4bc4be7464481982099\n23eb95ad8124b45cc27ecf743c1aa320\n9f5fd43df32187739f2349486c570dd4\nfcf030593c0bfac4f13ce777d031b4b2\na1b02adc96a97e176eb9b08c8a74d159\n398fb143825e597b960f73850432c28a\n9d117d7cc29c3ef314513156cf2b8d0d\n7511cf30cf10869b4f7ad0010e5a372b\nb19003d682594a71d37a26a6fbb1c7f\n2658567ef94749293784599b9f219d55\n21b22c30f1c6ddb9952d5d6c0ee49300\ne55e87415f0c23baa1845d2858b500eb\n346f3d9b39930b87dbfb0f09ba9f2d99\n719eb32ac85c77ac4e7bb85618505650\n2b9612dac350a3d6764a784715fb668\n33f47039e62a39e5febad4f49b26ec52\n207e1410735bcf5a62556536221025bc\na1743777bd7c796b57ae08c3105b4e6a\n28e246db6ffc3497384b87f5fc9c7afe\n7cf34cdf58717ef0826fc8d57346a2e4\n9c18d53831315667af78305d7f7113c\naebb3daec0cf81e695b2988c41a35527\n75d52bdc003e828af2ae88c7a945acd\n7d04346070eb5b9d19ea2628fa9897e5\ne8d6ed94c67d6f43708fed31e484f9c0\ne084204cf0c6a345febad4f49b26ec52\n18a6381f8a0dffc876828214888cb11e\n2e04a6dedc7cc5334b3c42e318f3affc\n6923a7384068b631d8e0f7676099972b\ne0c9ef28aff6484e6eb9b08c8a74d159\n523daab7896a34ed65234765b3a00e8c\n6c6cd4a17f142fffc3c1d36485e9888e\n4e1a956e406bb70714038d588fd1342f\n5f50fabf8c2012034d4134b9987a1946\n147df78321f90f20a494798fa117187b\naee5c13c32775f24b1e5b4bb39b2ab9f\nba8afc95c19a3d369753496ba23f2183\n5e8b318948817989a33ae3b0de29197\n5d3a1feb79ab7987bcedcb5f4c7257b9\nfadd7d8c94893136e4b1c2efb094888b\nfcf30cec3180c05da5f9d52c12457194\n1de06749f136ec8da066c1f884f0378\n402ccbc3f5f26c095f8ca2b92d19277\nf8d7dc3e169cd91d593ebeeedbff73b\nebc8467a8de995924b3c42e318f3affc\nc8caf9f60c19157414038d588fd1342f\nfb2bad5e3ba66eaccbc66df5fc1969c2\n8827bca86b63f748b2c9b996c5b9e81e\nb9ab5b0ba01f4d896ae963205db1109f\n4975537eb678cd54ee8a0a0ef14611b2\n3c05461b9f6330efc61d98cf72b72c17\ncd47287d6da7492e64810cc21086da42\na6cd2326b2660ac9a4dc2316a7e66d36\n26d165613b7baf134b3c42e318f3affc\n909ea8e0e2728ced59f8e31ca87c470e\n4b86c8d86e181ed8f51f77a6d7299806\n4c49cab86dc3ffd2c84c076312b543ae\n289e520179ed1e397282872e507d5fff\n6f27ca8835f0d0b54b3c42e318f3affc\ne8e8f3249b237cb3450fa717654492da\n1a04dcce7027357ab540cc4083acfa57\n65c32eacefa3f4fe2058afcc28d23393\n9ee861bebbc312d97fac4224dd2383a7\n12a0c645e0bb6601ad75d368738e0b47\n17770580d5c314ea268f063686455b81\n6a6228e06f53e31b63c49003cfba744b\nc365bb7af1fd9fd490ad276cd2af3a4\n961a646cb33dc785b0ed39ef5ec2add2\nda964fb2d92a461f6295e8bd02084b6\nd3a1db19de4e3fcf7cd71f0b7b44a907\n2b7e704b07fd21febe65001d50394fd9\n54215008a46fdb714386ad145fa8aba9\nafdb8885328a9e1e8cbb8bac2032149c\nb146fb259f64cefaeb6c29873b08c02\n4e925afce2f8fcedec9587880f9bd7d8\n25fd91f0cc5c2e30e1c2ef56608a124e\nd54be63f3df4a80aafb1dd61dbf468dd\n8e7d422141080fee59f8e31ca87c470e\n29065562beae791be069c558a1f154b2\n139b1622071f1864f7d7105e737c7740\na157ab590ef0f9b6dcdd187a6a5d68ad\nbade4726190d638498614b18e654375c\n6ed0a767dc4c570e4cb7bc8e4c7cdd90\n61ce96ea92a12f402e0ec510458499fa\n1d3dcb5fe999334f83de73f58b2fc4ff\n3f8523f11a622d8d6983f351200ac6a\nece3f9c071f7ab04bbc7a6acbd8f058b\n3a01d750779057f8febad4f49b26ec52\n5b5bd4ca75b788c6ece5b3f5f7505a42\nff73fbfb9f4a273be738f481f8560d58\ne3c42f99d05348c6d456f2c60deb666b\nf57c0d39936a324371a782a4379556c7\nd8a5ba127550669d55030a5efaf6babc\ndd4c87420882a7e6dcfceb73ef9b6e3b\nbb39e48c9c10abee77f0370a839e670\n3c61862eca2f0979febad4f49b26ec52\n6822eea5cf7f5fc9d92d669b28d58950\nc47bb0485a3aa2407252a102efb37f50\n3ab95ff520d0970b6ae963205db1109f\n70e3bf6b0eb99dd6cdcf4980e386b48d\n575876c91251e1923d6e282938a47f9e\nf611f7d72fccaa4c8bfdb54347dbe48d\n87ab409c03acea4af994e2a430ba61bf\neafc1a44c43b48b24b3c42e318f3affc\ne09efbe78b2adfc322d06a647cb73a3b\n6898a9ca21823570a888124bc30aa1c7\n385990d0223c92b5f3598efd14e493d5\nae69ea12f45b428a327289c00b6dc9ca\n7d8fde70f5c3f351567232766992241d\ncc20bb3596fd3c2e677ea8589de8c796\na17c259d1af349dd45c21ae2e309d69f\nbb529f670d4cb04160d8f573d6badb2c\n37e4e81fda1f2c923a2face9eb30ef55\nb6384ee46eec7bd5df8d3317f6046bb8\nf17b64b1f764ba323bddec837aa40d6\n55432fbc7604292ed9993d66b5a0e2be\n5f1a2fef69c5c0ce19fb4103277a6b93\n19192524e6ae1e85cdca798c54fdf54a\nfcbff3584d926ea3f13ce777d031b4b2\nd3c5ce89b20dafcc57ae08c3105b4e6a\n9d0dd1f2ebfcf0a4cbaaa37255ec05aa\n3535ee6f6b070f07a1989a802607e7f3\n9428c331f2230e33a066c1f884f0378\n5a7b6de19865d1332c8896155b09445c\n6bb62bdd954cfa07e30cb284f2e8e5bf\ne93e9beb358d9fb8c397356311cbeea4\n3140b8db45212ea0d9b53420a5458c53\n26b0765b08c86fed52db1d2b4104f173\n82b6391291239d90febad4f49b26ec52\n9a88dcf980a527cb4b3c42e318f3affc\n5a419dd9295d84c538ae0e23b03ac623\n103b76b2594a1582eaf14273fa406ffc\n13568cb7d4bb7d90c274f5fac65789d8\n2f87e4958b3c1d80b5da5256e41fa569\n187386c46e9fb3a44b3c42e318f3affc\n681f7af0ffc7e220db6d2ff65cc5b310\neb568f8bbfee977c6b4fe272da0db543\nd7a7bb6725ac5248febad4f49b26ec52\n5e118f0edd514706593ebeeedbff73b\n588556b08760e93b928c76b41dda6e10\n24f03d70f686533d7583d8e3d877fffd\n5599465b099deb5064810cc21086da42\n5d382ebe0f2ab55efefccbce7fd86667\na7b07dd40ee6af36747bd07ee1e3f697\n8d69121ec9f174cb4db79ead79f57b22\ndfcc3ebaa7e5ff1720768660cf080d12\n3c08ae3ae78253bb73800789ccff9705\n5bd1a7825fd8c16c6eb9b08c8a74d159\n5eb9da1ae0ae618f1190e285a2cbc9c\n4dd014b6e5a87cf462158b7ee658e910\n40f968fe1a3442acfebad4f49b26ec52\na4fd0a514cabe8c34fb315ce917a9ec2\n3b7f2867c3d56290267536df1b0cc6\nfd1ca30eda9a2163e2ca61e91f2755b7\nd66ab7a970a3344e34e89adf02e34b7a\n22da5fee0352cf194b3c42e318f3affc\n349402b08cc7e5e9492d9da2668ec34c\na6d807661eec51a8c0b437e347e8066\n7e1321155d43dc8bfff16555386d173d\n458bfa76a934921f4494e96d71433541\n"
  },
  {
    "path": "data/filelists/04256520_train.lst",
    "content": "fbe08af112773184e6fe3612af521500\n8180afee86f2075519fb4103277a6b93\nad023095f1868d3019fb4103277a6b93\ndfda3c467eb6066fe6fe3612af521500\n98f2d21c4dcac477f7628281ecb18112\nb67232c18d00fca7593ebeeedbff73b\naa7489c9c7cd0c1dc3a1be62b60323a7\nfcff900ce37820983f7e27638e63d848\naf28dbdce6ed8cea19fb4103277a6b93\n38fed916a35dd43d7c8c503b4b873379\n33ab50198c84645ef91663a74ccd2338\n8a1a39223639f16e833c6c72c4b62a4d\n2d1ebd7356968c0919fb4103277a6b93\n834fe65aac9ea9bce589b08489d157d\nd851b8a016cf114c742f75bc7df727ae\nf2e7ed2b973570f1a54b9afa882a89ed\neffb1b260f100f5919fb4103277a6b93\na1dbdff3da83425f3eec26c23f5bc80b\ncacb9133bc0ef01f7628281ecb18112\n8731945435676805aa29e9f0529e8ef7\n1e678fabd0622a1119fb4103277a6b93\n37cbc18323826bfb19fb4103277a6b93\nc73d63f9080e84a91b17743c18fb63dc\ne76457b55a3c041cfe49db72b6ffb2c9\n216821d05f00b1ccc3bd24f986301745\nef5eb51bbb7141c119fb4103277a6b93\n3319a9b24416ecea7ff6ace05b36a5\ne9821fb7af7db92b26f6c8b5b75f0ee9\ne491dc151c8e801186abe5555a3b447d\n359b6d3d29b08dfe19fb4103277a6b93\n8affea22019b77a1f1783a44a88d6274\n41aa5dba48b7a3f683257865d0a50551\n308f0ebcbcdad58119fb4103277a6b93\ne80ade8966a54fe419fb4103277a6b93\n73379ebbbac81af13ee8e30b29f70dfc\nb0fdc43b0b4e990719abd93be2967664\n3a44efd1fd14ea66dfa4ff010b8b9d1c\na6054a189eb45e30672e57a20276f6e9\na89e0f5b5a8157afb0aea9d5db2857a9\nf4391a20638d415e76e9713f57a5fcb6\nde82cd275086d50e41b160b9adc112fd\nd9c184cf0d80efa6150855094a28ed1d\n9ef9ea0de3fe64d4e7e684d25d4dcaf0\n281330718b2988624b3c42e318f3affc\n4e05ca172c988b72dc1f6c4cdb4bb9b3\nf5960ae57bf84fe77b79156a61ad4c01\n16bb3ec52397cdf9cf01bc59d215f0\n3e499689bae22f3ab89ca298cd9a646\n47dfe5f98cc9075850336112dffe8551\n1f6dce83e8d582e9efc579970fcfc006\nd9bb77735ff0963ae7e684d25d4dcaf0\nb5655dbb1a19b94c14038d588fd1342f\n1c78365aa05c3d2d64614cce5789ae5c\na8df97262f1f0a44e4975e87c20ce53\n41b02faaceadb39560fcec8f64d76ffb\n9d54e00d9428c07e76e9713f57a5fcb6\naed821e5939f74a461bf0ba277ea473b\nc81cf82daa56a165271513b292108db\n3aebadcd37bd3edd8f5ae2c97614087a\n9e4cbc2bb68878b57984fb9ec7e40829\n9ec5fcbfe43af15b851a116903680096\n1896f141f12a0df135836c728d324152\n4f2c9a0709eb8cb9202316dd49948ea2\n199f330c7a4880b84b3c42e318f3affc\n7cfbeb2c5af830a26a97150bb2a72733\n3610635cf623f3f8917b96045c9b6dea\nd3db0f5bf70b9e32f7823f022ac104a2\nf43b6b571d66991f95ca4adb70946a21\n67708b6fc3e76563ca691253f597ebb8\n250f7b0081d2be215cd6dcd866c8e6a9\n4fa4da6b966578cbe78a749ef6aadd72\nc9ebc7c6abcc9432560dcae81449eed0\nb4c1dafcdd5cfe67d070a4f9796238\n82a13477581d96a1fd3e75cecd4d5ab7\nadc4a9767d1c7bae8522c33a9d3f5757\n465e28e9cee51df8d5cb6d178687b980\nb3d216ad7575478d202316dd49948ea2\n81018f492277b7649f13e3294f6a3574\na73fc5b447cab6493ca57f5648ff1b0d\n8769b3281dd41c771b17743c18fb63dc\n69f6a6087f0da861af8fee88d245152b\naa41f9c1ea3647ef5dc3653f8341633a\nbfd337ddffdd91b4190a91fd9a6f7d55\n735122a1019fd6529dac46bde4c69ef2\n9f1de8e71c8a85f23087f84b199fd297\ne3610bdf0eb38f6b4b8710a3469971b1\n7461a53eae4126a79fcf47c4eee9d700\nc04dff28e5b5a2e5c283ca2c9df7372d\n65ec93f47687b6b4926f354063916d1d\n68a1f95fed336299f51f77a6d7299806\nb7cd67499b36cf60417a8f1d2c94eaf6\n7ca57c98a3557774f251828d7c328331\n23cb1d667213c3a7e897e87345fc323b\n89e00bb2b82e9e86c036a40816608369\n793aeb3e33325c491f4fac9ac5e71796\n63338a227246399141fba545b7232cfd\na841d5d39c5ddbc28ec45320afaa5d0a\n9c3b2d053adaca577b50cd55c08e6bb6\ne40e193e6468db644b3c42e318f3affc\n210076a2e26d5d53adc3470b30138f3\nbff79b49732569307ea323bc74055b8\n95d394154dc98f0ddbe9c90af547c85d\nf55beebe7409e84c873aec32fa476d61\ncd249bd432c4bc75b82cf928f6ed5338\n20b12dcbb70869c06b5c5023b0ce157e\nc9c0132c09ca16e8599dcc439b161a52\n2dd491294a34ed7eff98db9ea1554f19\nd72e78905c4d975f4f650cd6cdc94858\nca81512a7d7934d0b8e42b2c59ee19ec\nb797650c894719b99fd71c29e8052396\ne49c0df0a42bdbecc4b4c7225ff8487e\n58d4563bd1114e6a76e9713f57a5fcb6\nd01ce0f02e25fc2b42e1bb4fe264125f\n43507f90235fd3214038d588fd1342f\n39a79339b49d7cfbc16a7f7cb5642902\ncbccbd019a3029c661bfbba8a5defb02\n2c1ecb41c0f0d2cd07c7bf20dae278a\nd20c3649494f2aac14bac2ebb8f636e5\ne66f4bd6f5075d1755f9a00acc25f137\nc6329e1d12285ed761fdb06bea79b81\nf27962a9ea7a87a87140e995552e7616\n96425edfd54c925457bd9a2a12d86bbc\n3aa613c06675d2a4dd94d3cfe79da065\n4ebbe3f30aa1f5eb14038d588fd1342f\n695b90883d398e5b15cdaecfa8164583\n1bb6224360321002b8bd10c3418cc648\ndc62af0b1d8af2c676e9713f57a5fcb6\na0baf84e4bde88691912372ddaeb001\n3a72dc930392152e27787a85c3bfabc6\n986f6fb4a7e513614e4975e87c20ce53\n8920c0e0737409e29f2349486c570dd4\n71fd7103997614db490ad276cd2af3a4\nfbb0d2c65c3a26a6490ad276cd2af3a4\nf92dd3f4d0b4475514038d588fd1342f\ne4ca81487385c5f490ad276cd2af3a4\n27c82d27a4d38e6f41b160b9adc112fd\na11d94a5675bc703265c64fa53bf2c02\n8426b07a7f599d011a3b39b07e4b3d0f\n84ab3d4610acab1adb352b8394e172c8\n5b06dcaf32f92e7eb3878cedd8c8fe6c\n2f0f7c2f9e3b04a8f251828d7c328331\n8ed3fa69c808741a42e1bb4fe264125f\nfd56410fc541a09a749add7c3dfb27c1\n1670f9ce4de8a548d08f8c5dee475682\nf20e7a860fca9179d57c8a5f8e280cfb\nd053e745b565fa391c1b3b2ed8d13bf8\nc293fb5d58a88ce85b903ba10d2ec446\n9d6ac979ebf86ea9f37af16b2893f1d4\n7c299b1e1374a538e78a749ef6aadd72\n1575354ba1faad67490ad276cd2af3a4\n4f2fc9895ecc6a858032f428909bd170\n47fbf101a830769fd1dcc55e36186e4e\n79fba03fadd8c00ef10b04ee8b1c6914\n536cae63d37ef32265ba78ad9601cf1b\nfae52eb61560b246f8555ec936cd4b63\ne541933c90eec36182db9fca4b68095\nccb08f869edde5e6d8adf1ca87495d41\nb3fbac6ffe8e00622f6acf89a420ef0c\n4ed802a4aa4b8a86b161f36d4e309050\n4271d43fd97a7baa591cc7aab9026e54\nfe56059777b240bb833c6c72c4b62a4d\n9625852787b360bf20900f5b6ea8b024\n7cc630a72eca68c0457ba044c28858b1\n1e4a7cb88d31716cc9c93fe51d670e21\nf6d695e08f246d4ef5b0cb6df351ab49\nf5d7f60d4b33ea4f63d977b06bbd429d\n8b8152865839a79719fb4103277a6b93\n3af5eddf5022015788dcbe86402c7c15\n1037fd31d12178d396f164a988ef37cc\n13b9cc6c187edb98afd316e82119b42\nff2dbafa8d66856419fb4103277a6b93\nace76562ee9d7c3a913c66b05d18ae8\n3fd28462dda59ee49ecd5a75a29f0715\n5af36cc3a98642019fb4103277a6b93\nd562328792a3314519fb4103277a6b93\n6645c2afd5af2cd2610c2a68437007d6\nfa877c7d428253515e4b35ff1ea95f37\n44854046021846f219fb4103277a6b93\nef185107fb8d70ced06d60299de4d22\nacf23f78322f00f219fb4103277a6b93\ne3992b75b446fb5af7c7ad2549a1b15\nf114b76d551b5e5affcd08faf4fccd0f\n7ab86358957e386d76de5cade2fd5247\nf76d50f900b034af19fb4103277a6b93\nca8c140ca26c4d6cc9b96a88ab877904\n79df431936df0a0719fb4103277a6b93\nc837f4472115496cc93e5ef112648b04\nbe5def882071141c1a8781c24b79ae57\n42ebf2d478ab8af85ac3e286c38c6d66\n356ee11c9803f1d2fa6df2d54fa43ce\nc00d5c9b043b600019fb4103277a6b93\necad0dfdf6338cbd457ba044c28858b1\n1512e3c41de7a461e10a48f2bbb9bef4\n572da8680677fe8937b2bb75885cfc44\nf16d8f18e03669308f00a5ba54aa8088\nf50d32a6083c8f146dab7044457400e6\n77a56bf8ea88336019fb4103277a6b93\n48834ca61f0b759583e21877a4e60599\nb6e744f896a202c119fb4103277a6b93\n8173fe7964a2a06319fb4103277a6b93\n837ba605a4ab4a4f19fb4103277a6b93\n17c61068a15115a87c2f226180343d2e\n5105549b9de890319fb4103277a6b93\n13990109140043c919fb4103277a6b93\ne8f21fec8246fd5a8bbe798b99a6a988\n2639242e8f06f93919fb4103277a6b93\nd08fc6f10d07dfd8c05575120a46cd3b\n1b8894ce5f53e0007143b902ce4e435d\ncbc445c307221601433b4c9b207205a9\ne08354a352fd0d6914a163d2b227b320\n388aebe52bbe88757143b902ce4e435d\n95829021770f25fe15afaa91253fa857\n588f01ccac8746e1122e20a0279089a2\nce049a259cc2e624d5446ca68a7e06a3\n82f8c687a9cf7dcd5dc3653f8341633a\n262b2e2a13c8099d60f888b4e2fd3e4\n74490c45305da48a2b3e9b6eb52d35df\ne0591c0d35f82023610c2a68437007d6\n640aadadf4fcba8355f9a00acc25f137\n107637b6bdf8129d4904d89e9169817b\n2a8554af80cfa5e719fb4103277a6b93\nf3a24b3131da1ce619fb4103277a6b93\nb351e06f5826444c19fb4103277a6b93\nfa0eb1bb05ebe3f2dd3adf3090c701f7\n5f145696aaef1e6f342398ca9dc32672\n8c69c0bafdf91e85c05575120a46cd3b\nf98615e51a596fc5c05575120a46cd3b\n9001c9558ffe9b5651b8631af720684f\nf4370eb6449a1e8e191682d3b3321017\n6a2f4e3429093be819fb4103277a6b93\nceb04c53d8aae1319fb4103277a6b93\n65711cb0e57123e037b2bb75885cfc44\n83ce58add39dd471d314007fddce52b0\na9da19aecc65656019fb4103277a6b93\n1d878962087fbab2350c104b3ba8ddb\n7e7c1aca9d7ce7f2f7628281ecb18112\nf2446f65ba438c2119fb4103277a6b93\nad274aa281d74c7d78e2b63e72b94e04\n1b0432fd7b56f7e219fb4103277a6b93\nd9ae4cecb8203838f652f706160dc96d\n10e0543e6e316dca30b07c64830a47f3\n1878633a36518ffc19fb4103277a6b93\n73111c5505d7b5eae3db80a3cacc6e3\nd321d0c149d7762acc8bd7a04c9659f1\ndfb54a98465dffeffcd08faf4fccd0f\n93bd851dc5bb3527d437a7a1ae2552ff\n49d6f351e82d186b366971e8a2cdf120\n499edbd7de3e7423bb865c00ef25280\na76a2d34a1aca99611e76965808086c8\n8f23005418fee71819fb4103277a6b93\ncd10e95d1501ed6719fb4103277a6b93\n8aa7651cbe3651d64af957103f4767ac\n7577bddda1f3b6de73a5c8eabcf6c479\n94728591e785c00278fe949fc1419876\ne9d6a366a92a61d979c851829c339535\nf736f06f8fd04e1119fb4103277a6b93\n455fad12d4170e398d36ea78699efab5\n8568498cce4c2441ebc1a7ae7c4c250d\nee63182f95899a7419fb4103277a6b93\n93b421c66ff4529f37b2bb75885cfc44\n92be674b2edb7f54d18c447b567dbc27\n4307657b2731fd392c37553db37ec752\n104256e5bb73b0b719fb4103277a6b93\n42e06113efdedd0fbc19762eaa7ba40f\n99ca3d9ee631247f36d8dd30a594b2af\n28b9e6b16443e183fcc04d1259a0af57\n1667fb24efa940b9527e7f2c027f7469\nc1b8d982d97e337f19fb4103277a6b93\nbbd385cb3ee28279e3cb1f46427ab37a\n9cddb828b936db93c341afa383659322\ne4e0f428fcaa01bd19fb4103277a6b93\n2ccd286e8d5963199201f2703b45dd7\nc5380b779c689a919201f2703b45dd7\n1aaee46102b4bab3998b2b87439f61bf\na6cfaf6913d9559b7e66b3e5c11f24d4\n9adffacedef7ae4219fb4103277a6b93\nd4dddfd40635a72f1cda25fa42fa5ece\nb24e1117e49c75f817b431cae0dd70ed\nbaa8760ca5fbbc4840b559ef47048b86\n470dd8c92aa1b9ba593ebeeedbff73b\n638c8ca3dc94b152f6d79b8d34aa426a\na5274620fb2ba9a23862dad076579451\n7b3bab9058f7de33fab6e40cce6926d7\n6f0f6571f173bd90f9883d2fd957d60f\n4742de1edfb9462a60fd51b2fec8dcce\n75214586f291a04fd45611d32fd7733d\n3bde46b6d6fb84976193d9e76bb15876\na680830f8b76c1bbe929777b2f481029\n99ec7e5d04f32409d45611d32fd7733d\na930d381392ff51140b559ef47048b86\n683384e0e6eb5d4e81f667e2a25e0619\nc5e55f00566f0da2ec012e3517533bb1\naf9d9a0ffad9c2dc8a243182cace7dbe\n5aed18ebaa1360229d51a07a5989d077\n3aba6ceca44f747b29a72cc7a32af9e5\nf76d1470e843601f14c803eab703899\nd9fde31ef5c2f3ed17b431cae0dd70ed\nb4043ab6723a39f1406316a80ad8bed9\n944842d74aad4e2617b431cae0dd70ed\nfa563ce2209de1961f98c0761af40e04\n1ea101b73352ccd9822a33e080d0e71c\nbb31bd378273e437f4b35f4029eb1ecf\naa27de991298fb2eb3a010e5a9dcf3a8\n305d64b9fec0015b62a510b8f97c658e\nbf816001f25b2ff822e11aea23332c0\n241bf145fb2d14e67ec0186a79b9da3b\na5d1e07789845c85a5aa2898f4de80a0\n90506850596aaa99891fca5db446d193\na86bf379ca2ba8d8f2d5a0d235580548\n426d75ae016abffbdfa8261e130bcc9c\nd4aabbe3527c84f670793cd603073927\ne42f4a13086f847be55735bbf02fe10b\nc3e86ca4f6ca077459d0a47cd36512\n37113588c2d2566b4cf08511890c3458\n9e0b01fab5d15b768695754f4338760f\n9dbd663d977c64d1b982b1d54ee6ac1d\ndd7dc4e40e7d015c19fb4103277a6b93\n930873705bff9098e6e46d06d31ee634\nc529a567cf7e69e2c16bd6fd1b8c7eae\n660cad84e71a5f67a74931688d634d2\nc0d3ed00259b4d9da326264e704c832e\ne3ce79fd03b7a78d98661b9abac3e1f9\n626104245de40df863860d683ccd0da\n9808424960998ae93d4d11ac89066d36\n40a6ac0c94ae686e8dd711af5650bdcf\n21c071912ffe86fdf564f8e3eeb8449e\ne9017aa5115303957be8ee92c39a9d4b\n741dd57baaea906cb0449d422c1e5657\n252be483777007c22e7955415f58545\n4f6ba19d62789d90d71c0b5c63bf171\nf0a02b63e1c84a3fbf7df791578d3fb5\na995c3e90cc656e0c81bdfff91c7f69\nb913574ffbe7400ce8417aef1b7a422\n5850eba97de66d8e283b00891f680579\nb1b2195e45bf0495593ebeeedbff73b\nc1950e8c9869a7aa8dd711af5650bdcf\n6e3771d48b3982d0eca22c501ad0a77a\n7c4bf66c71ca90b5c2c449c0c0579ec3\nfb1bcd50b847a99d7948cb8e1d9ee487\n438c3671222b3e6c800d7b7d07715065\n81180dfb3874d4c76dc992d5c5e6b2e0\n7f6c75c2d820337b69867582939a3cf7\n2477014dfd55144ded526a7be77b30e\n163af537cd485a75e73748f506e4b955\ne32a5fdbb75ed879568af879e5634175\n317850f9c80cafb561bfbba8a5defb02\n1746d1c62d9efc742665e2e07399c56f\nb090f9315fc9e0cf9936c7914e42d921\nff35b2519455b6577b76a7024ccebf5\n53eaace9bb8bb34ab4fa97f642d1a681\n54506969a60017ac8f0a57a8b9390a\n7f0d93163b0db7a71ebf17f9e9667427\ne3d3c8dfcb19d920cc3e9831f31c9164\n7db3c05e67e9b847393b0262b4e8b707\n71e0e0315d718004e7c7920f6a65a54d\n5c54937316aaac98c563fcc2752ece39\ncd280bd68e1ce7f266260c2464355988\n253ca4f655355b6f8bc1f8036e08e44\n9473a8f3e2182d90d810b14a81e12eca\nbc2c0cf666122cc68f5c37fe197319e1\nc57bac39e7c4e151c8a0fe52b1df3602\n470bc951c8b9bb5b4ea6967a5607d572\nf398deceae25a0e752ac884aea4686b\n5149af0adc1f4a6aa45aa09d68b87656\n964887dfda95963fb0957d845ac33749\n3b7c1e67ee312cfe1bb088904f7cb154\nf8998de3b4d36dea4b3c42e318f3affc\na97a1e97d08a236a68d1b9a1d97e2846\n487635f7daf9ff48b3bd1e430b6587\n9eaaf854334b3bca676de9b6e111da8b\n8e61d151220b5397970d4dd67731c543\nfdc419e377f15e728101accd22c701b9\n83d48b9accecd4bae7200b78e3310827\n227a9255c15c267aa5c25aecef10278f\n470dd418057f9946a30f938496151204\n3ac827b804fee818b0b88207ef0f5bc6\n6660af5568f1fcea324a6d32f13e7cb6\naef8e3f17370fc8ecc98452c8fce6b43\n6bbbddc84bc4d3a68eb3bc6c6d15f9bf\n7a379a92b40f0efb3920d120afd003e0\nfce0ca2464802f5ab0474c2e080078f5\n494fe53da65650b8c358765b76c296\n3c30c45a5ba3b535f564f8e3eeb8449e\n20222a2bd14ea9609e489c1cf724666f\nf1c533e2cba193631b02cde7e81f0fc3\n294dbaa0e9afde3a35836c728d324152\n125ace480d9f2fd5369e32fb818f337\n35bbb0da45fbb2d93eec26c23f5bc80b\n742d1d33eb66d91014c0ce0d45458397\n5a94cc0c277f391df9aec59741c69cf7\n3b34c3ac871a2d40593ebeeedbff73b\n2c7d2bb93b49197cded06cbcf08b2fff\n81afa90f6229e7b456cbf78e1e89022\n34e10b72cfc4f36ad8e004adc6acd545\n72045d74edb0547581a172d69c52a28a\n7051b028c8c1facfced9bf2a92246703\nc23747cbba5d5f9edbb047330001d95\n241a341105cf3dfe593ebeeedbff73b\n40df73dfda0e26ce442b5d6d90d0cc78\n7961d0f612add0cee08bb071746122b9\n19b9fb3d3763cd1e4c4a4dca0a101f1c\n3fcb0aaa346bd46f11e76965808086c8\nec77376330a7975214e726c15c7dc200\n1685b0cf2d1a2849d0a2ef258a9c71d6\nfd33f7d4b8fcaef5d39e33fed94f56ef\na3c1bd440f319a39dd7092ed47061a36\n7d4d8e65979c28c1f8d4231017d95f74\ncfa5feb7486f88ee1b8fe07f15de05f7\n9e0071fda87df6892e73d126bf16e692\nf9f8f089be14d5b672b33dfe598bdd77\n836d2a7bc26d1b75ec195f2cc52f3287\n48a44ed3050ad12dd5b24cafb84903c7\n642aba784c86bb67fff16555386d173d\n8190efdd2054a0d9f51945de050323d3\nbb4441db7c68a4cec7c8ce3bef5c2aa9\n59c32d74e6de63643d41bddf307a46a8\n64800f14a795d8759055f83d11955109\n6017c8c817937296e1df71e82caa58ae\nbf504bde782c3f2ce8ced3508709e1db\nfce0bff765d0c49777ccdc3441fdc624\n51e5da3e9f55c77ec15dc8fdbaa55abe\nc955e564c9a73650f78bdf37d618e97e\n7d4113d5cbf4ba376efe57da6d3d385e\n7517e2a0c921b89d593ebeeedbff73b\n8331de0bbd3b0e19db8fa1712f9ee93\n328873bf304530b01b17743c18fb63dc\nb675ac4b668ace54bdcf8e3531f470bb\nfb0c0e7d7094b64c8e5f5b49c9f5b3f2\n94988ca3a0f73d16cabc196a7f35f1aa\nae2c9a06d9f7076532388c13cc4a0ba3\nc4b2bd128c424f361b02cde7e81f0fc3\n3dee5f41a11a1fdbdc83753cd31caa42\nf178d79c569c05d47edb0bede88c064d\n61d93b7c3e83541c81dff5c2e57ad46e\n12cae0fa5180fce64b7366b9d17acf07\n9875190ff87d3eb6a510987e3d5db7c5\nbdbdc31c4ba48868bd91edd7a65c1323\n7d71922494b8788ce10ddc5f810dd417\ndbe7ab8fbc9429c2cf40e78cb31675ae\n6d31bf9cfaa63bd1455785c13440f50e\n1a4a8592046253ab5ff61a3a2a0e2484\n75b57fc1eb40d27114e19520b26970dc\n7606f7f0a8d6434f4b3c42e318f3affc\n3681d113ea4b98546609f3f8aaad34cd\nefddbcc9852c0584e235eb1ec8984f53\nd0ce2d65a1f3f7f0942fb082e747f0bc\n8952146d844d41f78dd7a714af22f7ca\n526b961864b9cb0ca81116f5456ee312\n6905206d5f2ac04bd9e0690b0b191\n45ff5f465a6a907488e82c4bb71ec6f6\n5b702274926a8c433be1d0c32f5added\ncf47942a67cae94eab49dceef0d15b99\n7e2fb2fd4c604bb1ef6c510e24348d3b\nfef42356f1acb01b593ebeeedbff73b\n9500ae0f745fc9efe5b815c86e529aab\ncba1446e98640f603ffc853fc4b95a17\n2ae32451bd6b947e593ebeeedbff73b\n1ee15a07c2845ab1b9f43426f477bd71\nf125875fefd6a02af487e71bd57b6e0c\n58663919dae316f31ea2c93416c12215\n234ba0e3cdec0c306512b7b24f3d84\n7173c0462d9ee2a344949d7685cb63ea\n336ac1316e0d5cb7e6fe3612af521500\n1210afeba868a87bf91f8f6988914003\n66d4f7c3c9018c9c4d3ac4ef5709159c\n46c6d2fb8c92cba419fb4103277a6b93\naa2e8a77de22165ffe369f4f96683f52\n9b3c9023e8c570d5b307b2a73ae3e74b\n556166f38429cdfe29bdd38dd4a1a461\n80d13b57aa31f79cef188758bf2e3a30\nd9d61f08002dfae421cfc6e95839d798\nfdcf1197a5bdcfc1ab610b0c94236463\na17ba222a54865cdcbde89e0c48a01bf\na39fcabef17deeaf593ebeeedbff73b\n2ebb84f64f8f0f565db77ed1f5c8b93\ndf2fd8e97036e287dce02b254c09566e\nff51b4ea697e7bd2a59fc0a73ebddd23\n63eeb7ea2c7683b3f811db9eaa01354f\nd8751c7d4156c98ef09df371fae9d63d\naf796bbeb2990931a1ce49849c98d31c\nf94cef3a1dabeefeb26131b3eacda7f2\n9e9707ea4d5c5968a283d3d51bc54a1\n167088246175f31c593ebeeedbff73b\nb251364a878eb5fca192483aa282f8e5\n4fa6c9c06efa1fe14156f0e87c6858f1\n267dcf5952e84873fad6a32f56e259a2\nfdb3ab843f2a244eb9b4a0bf4166f120\n901eff0fb9cf6e0646a3128b588876cf\n47c45ac7187a9674421b433358248213\ndeb7ac5670e9bb27af8808fbf39db46b\n7b2ee63737854db3bd16d4490a10a752\n207c81a9bbdccbb8e8058cf23f6382c1\na4b1c819d9b606473decfe0ce0584f\n39f5e0c179377860d3eab83c82350281\ne8dfcea40c6cee9b990561fc34164364\n3d95d6237ea6db97afa2904116693357\n660df170c4337cda35836c728d324152\na25fbfb1c72811d86e4d44229ea605db\n1b5bd45428de094f593ebeeedbff73b\nfc7b96235eef479075becd8a4c3f1866\ne5f51c7ccf8ec35d2f134420f7b0d7e6\n8ead2b6ac2726710707cdefe012d0353\n4756416d882c569b7acade7eda5e06dd\n509a533e17fa45572814c9aa90ee14e\nf8519e593fdb348ab3d135d7fc8306a1\n31b21dc34d770ce8dca17035ebddd61e\necf29f5698798a74104d78b9947ee8\n67626389926740a08de89023dfc7cadd\n839807049a0c29a6ea693790a1608aab\n27be61a3c437d7a0eaf288f952624966\n899f5c18a528aac2ef0b2fc3511b6fbd\n8159bdc913cd8a23debd258f4352e626\n5d15e6c23f233a13ce60514f9a637ce\n44d172b5cd523df141b965cb8ba50814\nf986646cfa075237c02170c33e00ea64\n7b57ecf4b5e9617d6282231ccf88d909\n264d40f99914b97e577df49fb73cc67c\nb2ce2532f540cbde67b426838fce979f\ncc5f1f064a1ba342cbdb36da0ec8fda6\nd0b33818a29689a8ab5d9b3550c46460\na126dacc76977e063755f577b497208\n8ffc9da1ad2dffb3200d50e893131ba\ne8aa02effc458838f2098a9f7fc86999\n27f0c4cde547763ab8a40f9116438027\nc05c058169a31a19b149830119040db5\n1050790962944624febad4f49b26ec52\nd8a60e70bde76669e484a3178a372c3\n6c3b3c37c20bf2fbb40f0ac0fb9a650d\n683fbc39025b9b75e71d6290824c2748\nfb12015e8f705d901f8d8332ee17945a\n6c26b5608557f3e8bb41d1ff31a800de\na3eef12c108186997b9a616d4541ada8\n7b9d9c738c6042ad1c2c02171f63f02f\n70be13428e2a6eb1a789fd2e20dfbbd\n4353b992d238cff0cda85f6a3e19b0a1\neaff5688bb49f845ba41eea807f5d3c\n735578d3cfa39279d098b24937823a09\nbe19ff23b9cf375d6ee717407316be0\nf693bb3178c80d7f1783a44a88d6274\n53ce13a6f6a1a5f9f15e23b99997e42b\nb86d536860cdcf4ce7321f25048c6142\nc6fbb991bf184331847d00e95a10eacc\naeff3da4a02a22b07b0278d6b5ba1920\nd13a2ccdbb7740ea83a0857b7b9398b1\n66ea6f8add81adc848fda83c10428379\n3e3ad2629c9ab938c2eaaa1f79e71ec\n461772d07ff458d7470846ec41d04ed8\ndf912366bccfcc0258db0ef36af1d3c5\nc69ce34e38f6218b2f809039658ca52\nd3a8b906f6909b0252899f0b4e8d8ae4\n4fcaa3e642e153f3450621b513a975bb\n85bb20bc97b61c17261770c74651d29a\n2780834da1be89d1f51f77a6d7299806\nfe29b89c392e1bb39a2d92ec05f8de08\nd255253a4af43b4d4cb1d8db6be39c65\ne471ff9cacad70d391fa1c643766450d\n6aef3ffcf683005263cc440c7caf3d76\n63d67bb924a00203fff16555386d173d\n69257080fd87015369fb37a80cd44134\ne1a653600512eaccc862eec8232fff1e\ncc906e84c1a985fe80db6871fa4b6f35\n5c66c3e86a131bb969c8f7b0ff61e3de\n55f6500b52310f26352ecf815a233abb\na6e9d5735c36b80ef4a06efdbafdd7ea\nef99fe2058dbf199a2ebd6ecc07363e1\ndb19747e2c5b126148cd16ceeddb841\n8bf3680dded4772ff51fa0238791f5dc\n709f1d6837ed560bb12cf25c409aac26\n244499318ac9251c3bec56bff764ba78\n9f575d367e59591128fff7ee99dcfdf8\ne86d2ddb1e38d2e082db9fca4b68095\n1fd45c57ab27cb6cea65c47b660136e7\nb672f2487b04c2e72a7455a9948f4f3c\n5f531e379365040936a36f8fd7d27134\nc136abd9c245ed8819c798cfc4624378\n28f2563c5e757b1c1b7dbdf53d301715\n1a78f3397910037885f6153ed2033a1c\ne03147a11bd7c10e3d23022ce06f940d\n9aef63feacf65dd9cc3e9831f31c9164\na1262399c6c0ac93e84291b9d249a95b\nfe3d9267a166c57fee7d178666aae23d\nb2aaf37365cd30776b9a660069df73df\ned394e35b999f69edb039d8689a74349\n213484c5675cc80b4719088c8e42c6ab\n45963319edb54bc0dcb4d348d782a96f\nc75ade3248fb4f2f8962005ce0e986db\n9b88f0839b22b33022fea5173e5c6318\n11f47772cbe2a2d0a5f9d52c12457194\n6d41a09cc94d2505a82acb2f2fa57398\n42b297f23638f17e27813b202e608c61\n75071b6962f431175becd8a4c3f1866\ne7eb561c782fd92163d467b618e97922\n5f5c4e66f07fc2695c0be177939e290\nd8fa31c19a952efb293968bf1f72ae90\n823219c03b02a423c1a85f2b9754d96f\n71783c8431b28220593ebeeedbff73b\n615ebac351d7e8356051d49e4b21b83c\ne37b46236accac968cbb8bac2032149c\n1476ee6116538beb1d0e6f3a33226a84\n4ec9d99e4094a2bd91659e904513cf6c\nc5f48faf560bbcb3debd3ac8a0c825d6\nd5aefefca08da17819fb4103277a6b93\n306679647d906c39bbc7a6acbd8f058b\n5d27c5cc1395586c66eb0dcc2b2e2221\n9d1e8c37315e292f31a50841704a69bf\n52f6fbe3a36a4d1f19fb4103277a6b93\nbc6a3fa659dd7ec0c62ac18334863d36\n9695e057d7a4e992f2b67ae827b02632\n273e8e15b6740e5932a526e2e9a7e9ae\nf97cb4e2aed44b05593ebeeedbff73b\ne014e3cecb1bc2b949a3c1009fa79820\n272594b65264b90192fe219f5eb82836\ne9e54de1814ccae5bbb6a513934583ce\nd0bdb5de2ae0de1adfa4ff010b8b9d1c\n9c0c2110a58e15febc48810968735439\n9b94f7822f3d73e84b509f4ddcfa8ca1\n124bead2c137a6d1f652f706160dc96d\n6caa1713e795c8a2f0478431b5ad57db\n52d307203aefd6bf366971e8a2cdf120\ndd36ab979c4ff93038dc42f802aebe31\n927967e761c52c11eaf288f952624966\nab2f0f582e3fa5b1780c9f3df5b1ce52\nb4c5addeacfce8242165c54dcecaacb4\nc59ef7c56b4d184f9cd431573238602d\nc2d26d8c8d5917d443ba2b548bab2839\nea06841d7501d07436b31862e09495f2\n1aa509f3d8c1d1e46bc58b7f28700afd\nfa46769b0817a8744f52551bb6d0494\ne29fbd1feb9659dc843ead12644a79bb\n70a16608ffc4988a81ff2b419139512d\nfdca3e183b3d1eca45e6e5503635ab1\n340daf71c78f53ac593ebeeedbff73b\n6f22991fc456e7a5f63bf7d908efc575\nc70310da520e0499c2c449c0c0579ec3\n630d612af74628053b28ebac0b25d03d\n8aeec0b2dc06c3df9274d508495753d2\nebb29b67c390a28ae7c7920f6a65a54d\ncc7b690e4d86b471397aad305ec14786\ned1aee9100f58e26b9b072e1f62798f5\n7fde281d5d2cf5bcdd2b32fd72ab4fd1\n159a8e14ee6dde05f7628281ecb18112\nbda845f53dace1a7ab610b0c94236463\nb2061e554db928f233442b36ae29e50f\nada8ce574ee473827c373e0e7470a338\nb3c7b4435c3d05164dc11e421397c795\n627819d2ea8ab9d9c97e4283c3b75587\n31fb6cfde1fec63897f7290a893b9fc7\n9cf60525ffd70735edcb0677ec04fe0f\n39ba41744345959256a9d1ce1d40376c\n24178c4efeadb8bbadd1969a2adc38a6\nf094521e8579917eea65c47b660136e7\n791f224b44cc67b084a05e54516915de\n1c7c7a7b20831d699cd2678508cc27b8\n857c44dca7247e5757baa11b83badc8f\n324d7108aea113f5b60d98504d0756f4\n546a90c5b673720bdb01c957364e77d0\na4ce7b3e633a6c802c5d34a902e568f9\n4b7f63ec83da1c25c59508b4e3a82241\n8c1eff1f448e33f4d56c79d3df7792df\n20b6d398c5b93a253adc3470b30138f3\nef05b57542cbf151e7e684d25d4dcaf0\nc4ebd90eb8496903f4ed05effa0aca88\n4b139ceeb56ca3a1991d32d5bc1065a5\na1a8920f91e2f3d25dc3653f8341633a\n9c868997ced1aec1dd904956425d1eae\n87bdac1e34f3e6146db2ac45db35c175\n53c1b173913bbc2b63d467b618e97922\n5e0fa460af0e5e898223ee0bdd50697\nece6da595e7754b3eb0f7c4d37fcbed7\nef511c56878424e4a6380f3fc7269ff\n91cace4fc498690119f778c7a8b12264\n9ec7016d6978216c94fadb3555028734\n41f47dbde823f29640d304b02c5868ea\n43720278eea721d27d18877f45b7c3cc\n7f5f4774132a25f3bc8126c23d2deb4c\n68712432581f8a855739643afbd8c926\n98cff1ad40ad54bcd05576067379976c\nf3abd87858a226aabdbfcb10306a3977\nfd4285c2c5050ff7e8bb25231731c25d\n68f6b68bac9f5d64d929fe644a1325a3\n37cfcafe606611d81246538126da07a8\ncb3bb5481f214d6bf51f77a6d7299806\nf1ce06c5259f771dc24182d0db4c6889\nf1ae0c66488c39c8ecf6d12e1f8958fc\n32198f8e02253fc0d1fbf79741fcd6d6\na98956209f6723a2dedecd2df7bf25e3\nd6f7727a3e5736437b9c6deef486a7d8\nfe154cb3a5dfdffc5ae252905262c0ed\nab347f12652bda8eab7f9d2da6fc61cf\ndd375d24e534101b33f2b52ebeafcf18\n7b9f151735391e7a14513156cf2b8d0d\nbaaf2c0d399f7329e4b6769f60f49f2b\nc708f4b2649d5b2c3070413801574f\n6b25476464cb4934e039576a17a0737d\nd3a550ef8b98f55b21cfc6e95839d798\ncf571875efbd60fd3d2617f9171b5ccb\n54a209955f7a47bed8e8a8a207ee5bd2\nc71a8fe3f0f14c074016166a4bbee8e7\n8b066cf28fc1319da11411fb873de302\n16cc2e83a7ed73b7789a00cfce0c4a8b\nde1fc3a00a11e87af62af8489541547b\n954efb8e36610d1bab610b0c94236463\n4f7392168ffafb8aea91375557c834d7\n62e50e8b0d1e3207e047a3592e8436e5\n145bd097a4b1cb8a44db04bfb021976e\nac36eabbb3b405d3473f10e6caaeca56\n1a9d0480b74d782698f5bccb3529a48d\ncade7495591007c2ec53fa9e4378e66\n9ceb81a09813d5f3d2565bc39479705a\nb233a919f5d2f6ac2ad490d4d7fae486\nd9acd27e2a9b12d3ae685ca100c909e8\nfa0218bd49f8cc6d593ebeeedbff73b\nb23dc14d788e954b3adc3470b30138f3\n9381eb770cfa95bf6bd365389d6dc6e7\nc2aacd7edbf9b9f98f83f8853be14620\nbcd6db8d23cbb9a9cf19858fd1963d10\n60ad8be4124fda92408442c6701ebe92\ndb7851745fb04cf732388c13cc4a0ba3\na47c0cddeb15490cca68d7e2f215cb19\nb50519cfcc841200e8f8c11a24c52ebb\nd83aea7de9d3d4242c37553db37ec752\n62d40988172e8c685ff61a3a2a0e2484\nbb2ed216b00409665634c21965ee6bab\n2434dbf29922a0a44cd8f60141ab9d6d\n85644a68a1d5f4cbab610b0c94236463\n2351fc9da59d571d9a404da609e2789f\n9156988a1a8645e727eb00c151c6f711\nc51dc6c9f8db03f51e8fb9cbb32d2cb3\nf080807207cc4859b2403dba7fd079eb\n543e257122d8fcfacdea6af8dfcc2b18\neb34216913b891ad54a1f8a695b8eea2\n8d5acb33654685d965715e89ab65beed\nbd98ff55306cdd592c509b30860f3d1f\nbeb06b61dad3795c95c7d6b48c371712\n4b24bbd3cb03206b58db0ef36af1d3c5\n932be91adcd83bcf1336f52415aa0825\n4a264b02e0d8fc214b3c42e318f3affc\n4fc8fd0b2951d0a0b035d20a1a3ca345\n1f0f9a821671271eaf288f952624966\n9d2bb2163cba8f54c0e58de02a99f31e\nc41b7b7d81b7ea5c60a641d065bc7a27\n7e40a1af933a05a6ab610b0c94236463\ndc35836a8c5bbdc919fb4103277a6b93\nb8469c14aeb092f74fde46457697d80\n440e3ad55b603cb1b071d266df0a3bf5\n89b66c5a15e9c00b9b43c20267c98bff\naa26a6735be82e5da7de3fd12bcc8851\nfa1e1a91e66faf411de55fee5ac2c5c2\n2de1b39fe6dd601f1e03b4418ed1a4f3\ncceaeed0d8cf5bdbca68d7e2f215cb19\n4f863fb727ffab64ffffee5f2b1293da\na32e10cb422cca67eb9f96cccd63af6f\n9fdbd10380d433d0f564f8e3eeb8449e\nd87a4ae5c2a768d4283b00891f680579\n9dc28627bd03a2201e606a18cee01990\n1589b8a09c8bd67551d07d3e9ad67a2\nab1e7ae9a7e9a14a3ddab7e2e0338094\na54fbc57992e90b9593ebeeedbff73b\nc7631617fc36715c37363131ac7e8139\nc3cc9a21c0732ef9b2f052bd9ec28053\n9a7f267890144d4a7afe2ae8eef63a8c\n2b5d99fd8dbdb44141cf86c757faf4f9\n4991f4fe771cae7f18b14db3b83de9ff\n642883f79c9131d842c47c8032438a1\nd6b6f8854bda98a6ff458e602ebccbb0\nc8962afab63de682a9ed6dce8b2a37bc\n1de7678ce07c845e91ae3c216ac0d5c8\n85293b59b0f9cc1e593ebeeedbff73b\n330d44833e1b4b168b38796afe7ee552\nea0ee7b60919e35bb1dd813f3c0d0dd\n8efa91e2f3e2eaf7bdc82a7932cd806\naa7dbd4acb4878c9620f1933fa113025\n25220d902288e352632c9ddc45ef4651\n854ded41212e767c12132bd78ab15cd5\n7430f611140fffb68101accd22c701b9\ne4c4c35bffae3ea375a82b88fe6e733f\n608936a307740f5df7628281ecb18112\n8b62bb92edcede30886ee1269f93c784\n4c0aeda1ff524383ce4f58889c7849e3\nf0f3a9b0aed5ff1cf1c0e03f321d0b20\n5e9a36c61649952f555740dfce3e4a45\n923e063599dc9ac7679edf1f9e4dc0a7\nf42ca56e450c3258b4602b4f31d3d1c0\n361b60c0143d91c3593ebeeedbff73b\n9e57afbc186ff5387c0c12d35fb75ce3\n4d251436236babb87189b31b3e8c8ef3\n3600642b1b3a91422d83e0e365c4ccb4\n75e62dceb6fc577e593ebeeedbff73b\n3a525a1286d4879ed35d1c787a8f626e\n1739665585ec210fb04cb542e2c50eb4\n21b8e95a91fe7f044fa89de6e82c448\ned90b3d1d41c46a82b09cb731e7a040f\nbcff6c5cb4127aa15e0ae65e074d3ee1\nf2ad41a5ffb961c4276813f95a6b7283\n75f69b9fc22c4c04eaf288f952624966\n5cc8f84b9b53b30bdfa4ff010b8b9d1c\nfd2596a60338b08b318694f1cc6fb1f8\nbed924f1f1208f37f0bb193323cf7c6b\n3fdf33059301e1d248fda83c10428379\n2efc425b95430055f7406d785bf36110\n188505b2fc90ffad780bc2708a85ba9a\n7ac7a4f53a89ecb48f966131432ef871\n6ab5321efc4b3772492d9da2668ec34c\n8904f205681acc62dd8a663469942954\nee71654238a92dabddcbda91db0cadbd\n8f71670ddaa954c963860d683ccd0da\n9d436dcfd61622d6199833105dc1a90d\n7162718ec5f39640701dd519cbbba0c4\nce863933e9e5193322d11432250c3331\n527bc61087456aebbf27ea70a1a65d9b\n828940d7035de09f62e682c9809bff14\n9d5815f9ba8f0ddb19fb4103277a6b93\n5895b40b8c4d103ac60ea5009df4047d\ncd06c0f38b4db9b4c397356311cbeea4\n9f47842c7fbca0be593ebeeedbff73b\n160887408a65f88f67903707764646db\nf23636645d46b743ad4f8dd77b0e70fc\n60bca735b8dc8e487c4364ecff196aea\n35d44bbbaa9763a1b1b2d85ddcddb619\nb8909a5d6702f6f31680549bb1d1b739\ndbf6c49376ac9591c8e7e2daa5cdb0c4\na247bf1e595abd266080784e4b7841e1\nb913678e74f02db521f0090670ee931f\na2b3c5312188bfc2789b222a43900931\n2e2f34305ef8cbc1533ccec14d70360b\n625ffe6a78f1697d87ea4c09ea2202b1\n8092428a6a37b0b9970d4dd67731c543\n9177c05744b77b6f6157c3a167984fee\na4c8e8816a1c5f54e6e3ac4cbdf2e092\nfa5a0b7134e3e9ecb04cb542e2c50eb4\n557d878e747fa35db161f36d4e309050\n8fd43f2955e4d397b822d48a43773c62\n4373d31c2ac1d0bc57278947e7c4dc7\n8f6760875b37750b19fb4103277a6b93\nb1cfde20b5b0194af91663a74ccd2338\naddd6a0ef4f55a66d810b14a81e12eca\n9b1a7c1df1ecc3c0cabc196a7f35f1aa\na659b730251c2da7b3660298957b3f6f\nfbd0055862daa31a2d8ad3188383fcc8\na7bab06221eb932e79c251b4a7838829\nff5aa5eb5ed4041c1ef9727a7f361b49\n2fc5cf498b0fa6de1525e8c8552c3a9c\n50c1477484688492bbc7a6acbd8f058b\n5e217fd0fd2b1ce7d3a80acddc1093d9\ne963f9423720600cf506f5cb7d8ce57\n9ea95280cf81f9c5c151419181ef256\n89f4fca1f562f9103264e1c4b42b3e14\n2a07656f030d682536c2acd70c777ff0\nd510edfd51ee8a942dd4967de4160123\n507d740bec19238d18f52c8a4cfcbe33\nde3589ff77017c7df15e23b99997e42b\ne09005010542d8193d28966b7ef7a935\nfc3350236b25f198f2b841e334abcf20\n785505b155a724cb6e92e37d6e2c659\nab350e81ff71034434895070e6a9b93\n2d5cd8bb42310f3eb04cb542e2c50eb4\n2e5d49e60a1f3abae9deec47d8412ee\n2eb0a772c36144eba3f22b4b00de6dfb\nc0580211c63f4fc9cd3f9e8648111d1\ne4e660790950c277cb1362eb0fa793e9\n9f6d960c57515fb491264d3b5d25d83f\nd0dd5aeb1384125bd0cd98de57e6803\n12c6a146bde9f6f5c42c7f2c2bc04572\na8418bfeae7c4cffaf802a9d0ab09410\n5209919e8e113ce3e09a21c3ea84d95c\n725041f78f7c4274515d5d6477915e98\n903dda9c731b73acf661d29029f2c819\nd7af346415eebe008f36404f302c9440\n395e53e3fbd2e717557ab4b593540354\n374c336ccd894dca717b2a5841d92\nbc65c38188f1e72c532e8683617554c4\nfce717669ca521884e1a9fae5403e01f\nb0b942c484db4fd7afb07a946d621b3c\n4faad33041ab0f80dd8479d78721b157\n7d756e083f671c091b17743c18fb63dc\n2814c27c1ac5370a30eeafee78afcff2\n1dab0c0c72f9cd6f593ebeeedbff73b\nf563b39b846922f22ea98d69e91ba870\n9955ce757c0bfaa5843ead12644a79bb\n13b60f5be9af777cc3bd24f986301745\n81d3c178c611199831e05c4a367a9ebd\n7d6453e00288991c61bf0ba277ea473b\nae4f28a7c4e22d9535dda488a4bbb1e1\naadc03f6499b5ec5b60747861a92b009\n78fa28a031f1042f3bd16075d47dda52\n14c77d23044bdfd5327289c00b6dc9ca\ncb7cee345d3e7f75593ebeeedbff73b\nae7af4ea5c63938878585c45c8af09b2\nfabbe9b0db0846a8a823d9fb27aec30\n3946d23c7716c30d91857b3d2399f830\ne0b897af3eee5ec8d8ac5d7ad0953104\nad1428e73eafd4a6660dac8da5753e14\n83410e32b49b4f9957aa81cfc66d7b2f\nc9241b6f755e7134f564f8e3eeb8449e\n9df9d1c02e9013e7ef10d8e00e9d279c\nbdbb64bc1fac0cded0176f9a144100cd\n9e6ba78f80fbbfde5369e32fb818f337\naf0c4f45e0444ecb01c58badc8bbc39\nf0f42d26c4a0be52a53016a50348cce3\n6c4e0987896fc5df30c7f4adc2c33ad6\n7d804eb69e0eedba450447b3239e17e9\n7ae657b39aa2be68ccd1bcd57588acf8\n81c3f54ae8f5c434970d4dd67731c543\n6f48fa0ce33292249ac506757b31ba4\nd9ed3fd60f4d42aa5f75bf17509b9bf8\ndbadee62f27c31e9214c7379b0e80b7b\nbe129d18d202650f6d3e11439c6c22c8\nc2a8f4c920b6f7c24097c269bc92f53\n70e157cf567eb3aa79b26024bd30ee26\nd53620b3769bcbd664518692a46d31bd\n7c92e64a328f1b968f6cc6fefa15515a\n349f3f4d65f64c1235836c728d324152\nc943da3efba4955d3ed66fc182459935\n4ad0739a957f27dcad2fb8cd0793fa9a\na7908e8fb217aff63d6e282938a47f9e\n52dd0fac460adb45e2879d5d9f05633\nc37832a4b22cc13e6654a522b30cb96\n2b1f1929a6a5a6517b431cae0dd70ed\nea49f8fc66df2b1819fb4103277a6b93\nfbb78f2c30bfa014703a79ff0df43433\n5fd7cd5ee43e0cf0eaf288f952624966\n72252b1486f22ce3490e0c0c00192ce3\n66df0b92b5712c0c917b96045c9b6dea\n697161cff5d04992a4dc2316a7e66d36\n94699d5b8a8682067ff6ace05b36a5\naa8b70ecfdd237bbf91663a74ccd2338\na3970706133f033861b5428f30b376d\n6aac93deb58a35f56a3237a661a9fa9\n59056471bc89a215b3fdb1a7c9a60207\n3ffeb5868d6f5dbd8c46a3a266762d7\n4444828846fc38269fbbbda5e1d9195c\nc44ab66d4938052a36e4b0ae0f52067b\n389751629226a005cbde89e0c48a01bf\nb16b22f49cfd1d2541dc8e09670d2b5d\n21addfde981f0e3445c6cb69e0968783\n5161e139d0a58822a773e2c829d72a13\n8e2912b6699ea81c3db8e8b3ea723cce\n35e15a666990625a1aa34bfa6235956d\nbfc0c2ab5bcaa2df9442d81743a735a1\n4d33fb26aa7baeef88dcbe86402c7c15\naf978eb2f903536e5b9e30b3558dc362\n51a14c2d62a2963d86234e915108e6a\n8078da16e565846181ae47ffdeb90d54\n194ca5fd43b1c04be9ada1586a8c9364\nef6ec9f481a67015ee3907b60a74e8f8\nad7dd9434ad5f61db759217db94d2883\n6a5f98654b75a18c593ebeeedbff73b\ndc079a42bd90dcd9593ebeeedbff73b\n5649e603e8a9b2c295c539fc7d92aba\n5ec9b56623d25cf1e7d9f0fed41b005f\n9aa3c3c03d111640490ad276cd2af3a4\nc47c9d6c6c8291d61008a8e167b50735\ndaf0e2193c5d1096540b442e651b7ad2\n2c3a679d6640a93abd16d4490a10a752\n23e7767edf2f861e58c75a3520cc91a3\ne8840d7ef11fc9d4a54b9afa882a89ed\nc22b660349b21edb246c4171f2c393b\n56652a99cd43b77744dace04559bf008\n1837416f6aef641bafcd24b8661a2fd9\n6900b73a93136591bbc7a6acbd8f058b\n2723924e712ccf1b98f5bccb3529a48d\n212a8cab17af2454f8b0f8060696d1e7\n35da4cce6961e4f2ce9d15b850baf786\n2a7fb9c95b0e8eec8de75bb03756213a\nd1784efbc243913940ef1c8b63a628f9\n8f4ba17b19d2d5a0ee50221b2a22a6a4\n181f594fb55e7d811b17743c18fb63dc\n8d0472ffc368a8e431b5f9e34ff03906\n5660a383172900a6593ebeeedbff73b\n61711ab3e6fe99ef1c6aa36e5af1449\n68c58177f6ead1ba9f2349486c570dd4\nea9a266329617a165298386582afecd3\n9805e011defa15f37fbc060fd555478\n921a1610397b62a7db03e4f5c01cf109\n4e43e29a68b72d9fd9246d8a288bd77\nde4d86efa8bdc67684ad2abb799c0f8d\ncef25c3f7412814b4b3c42e318f3affc\ne3f5405a4843343e91fa1c643766450d\n3a693ca4add94bdffe1db2d0679386ff\n5ca1ef55ff5f68501921e7a85cf9da35\n8fb75426dae65b66a12caf23554642ba\n81a032241031c2e5f97ef3b999ddb957\nbc007cba6288e3503790005cfb7639de\n2f458ca5f25954ea9f2349486c570dd4\n549f6b723e4bcc91e2cded16638068b\n4198c7de2a9f450bf07fee5fc5c45ee2\n8f3545743c58b730a92a1b6e1dab7c04\n7c9e1876b1643e93f9377e1922a21892\n7b7c14e8fd0521bde4511d9a59e40339\n790e42476f871e29e0a954c49a0c328b\n67386a2dcd3be10b8a09f7075b904cc\na2b93b7632e98eb944949d7685cb63ea\n1b17f84df81e0165e336453ccee6eebc\n951e63303cf5eed1cd4a89b0fee32930\nde2bb45b7e200d6916d102513d0383c0\n6c50fa0b3f1bf58e178548484b14e6f6\naeb5447d59fbe49add7f28fcffe810f9\n980d28e46333db492878c1c13b7f1ba6\ne5dee68606d47d3aca9b40e76e725878\n277e5fc4d325fb1381f667e2a25e0619\naef57ed7044469ba25e322bb8575a360\n4b7785695ead572e175255c493aea87b\n37b94e004ee1f7847c63c1e5173c47a8\n1c54ad94269d0e786abe5555a3b447d\n9cff96bae9963ceab3c971099efd7fb9\ne03c28dbfe1f2d9638bb8355830240f9\n5a2da4b824000054d8390ec1728b1e3e\n5a0fb2d34e0dc4445369e32fb818f337\n1f74a21433c43c784209d14d674fb332\nca2204f36a01e3515b943c35c765be0\n51ccdee7080b11dde21111e385a0661f\n7822a1ef8d1eca8af51f77a6d7299806\nda07e1f3d336532c2346f81928a3e5eb\nd3b0fe62f115f0588bd90ebf95555835\n8d8d2859338eadc7bd16d4490a10a752\n9e014bda9022a09095369230ec06c72e\n3bc7d4d59503cc92c1a25f36f85c3fd6\n11be630221243013c087ef7d7cf00301\nfff8834b262dcf4aa89012425147541b\ne0f30a6af7bb75b8265d1076b4b6c5c\n5f93127875373b8657f15fc9385a8a01\nec836d156e8157fec862eec8232fff1e\nfc24d012f6b12036aa1f8e0da2ec8814\nb99058a0054ea0f8387625a8fa2965\n4760c46c66461a79dd3adf3090c701f7\nfd2c3219b28d98768dd711af5650bdcf\n55d89b64ec895fbbf2ca754af3aaf35\nb55d24ed786a8279ad2d3ca7f660ddd\n200324d0bafb1c2e19fb4103277a6b93\n5c69960804458df5255ac1b93c90af25\n4820b629990b6a20860f0fe00407fa79\n33eb5d4c6ebbd6b1327289c00b6dc9ca\n9df8e759e084a988fb1eb57de0e2e513\n33db94c3b6edf1efc3bd24f986301745\n9f57f0155caf1c15404a78e172d68d45\ne2965d9df7974ba25369e32fb818f337\n9f4ad442e9cb51125a31d91ec836a511\n54f81ca969051442e9362c2e21d265df\nf8e0bc0d84a8f76cece93aa52d895bf1\nffa7680b18ede5cfedeed2a7fa983956\n61177f1b2f1dc0b394fadb3555028734\nf6ef2cc4bb31d953a40f4c396e0c7dce\n4f17918826b64fc8d5cba62773b8025b\n8b4a2a614f7b2a9510edd100dffd8d85\n882d5d8f49e52e81a53276bbe109327a\n2bec1d8c0e8a1b3b7b98092cf509b83\nead777f4e8c5bc346ad8177a9d42d3c9\ndca66ae8a95f7f70552a7b4f3448af2e\n35503a69108fd2a790a1391b3fdfda26\n15410f94aefb4982ded10515704c9720\nbfd09a13ca8d039d24d3570ac22df4c2\n7eeb7a4c2f3f1a0505babec7f39a63c\n614ee0988dd6661d9559145fbf4877c0\n36f7e8086a8849fd5883ca9b41ac387\n2a9da31660f0c0b73505e48e4fe20c28\n447281db87623862413102507b68bcb5\nde431e15a30f57f27d5681734ecfe522\ncd74a153b605c6a3cabc196a7f35f1aa\n23d1a49a9a29c776ab9281d3b84673cf\nf01f6f88519a58e0e015ffca2672af29\n20f82d98b188f16cad885ade4bf3150c\nb337556f36a5e1bb9a2041f674671d05\na8b0e2a953f3ab6a68b3e52c71552a50\n4b11124f5ccf051086708ca48528bc8c\n75a451559a48b42f6e525b37bf033529\nc2f02274b4dd4431b4e7c0374e7ddf69\n82dffa2751f8e77643c18769338212d9\na53114ab5cfe2048f51f77a6d7299806\n69eaeff55a5a9c5568d1b9a1d97e2846\n38f6d097455e58053d6e282938a47f9e\n2097fba74518dc6e4a949e376cab703f\n1731d53ab8b8973973800789ccff9705\nc35d42881295d9cb86debb0a33c851f8\n990adbf32c6452878eb3bc6c6d15f9bf\nee5f19266a3ed535a6491c91cd8d7770\n4f5780a3a0466469e5c864cdd2c65afa\n2a98f28036915f805510d59f3ab1ed64\nc0036465dcbeed6a912f115faa04d51\nd20569519e7920bc38cb7d8503a3164\n978dcc1e9c3f9a3f92a31ec18c4e190a\n6fc69edce1f6d0d5e7e684d25d4dcaf0\n13a8c6129a8e80379904131b50e062f6\nc0228ff42e79e272db039d8689a74349\n1f75847dbddcd34afac76e6fcbdc3631\nd28912450f62b4efa8699b6183baa203\n9c1565c6bc50ba7668bdb5c1c01fdb25\n6db11b763b7c3e76fd5b2dc3df6521d5\n62852049a9f049cca67a896eea47bc81\n46e6485e5bea085a2b450c5933dcfcb6\n6afbcbdc7ab9357270db6230313d3ce\ndd4a6a955c925d7762fd9a1e220aec64\n6ec8a2dc3bae5a9b8b709c58c1c5ee96\n93e20cc90bc4ead618a6353ea60f11b6\n948923ab76b8d9efee7d178666aae23d\n4b3f84ca13baf80be0c381fdfcdec36d\n9c0ed8415a0a9e5c49b1e464b71de577\n6cbcf4636ee5593f75a82b88fe6e733f\n12aec536f7d558f9342398ca9dc32672\n63e91cd73f169af037f251300f603b8c\n42486ef061ba8d2e9deec47d8412ee\n64895a5b618e8a6fb40f0ac0fb9a650d\n7ab84ec80e11d03fe8daab4fe9011efe\n5b70eb12242d4a03fb6ca00006f2c76c\nf49df2996692bda02c528d33bca1ac2\nb32b7dd742f915581e6dcc1ddc222f68\n3897ad42f73988a62406c215cad9df09\n81d5e6d8bef76a51ba6c2a353e21dbe8\ncd9ef0c92376e604963cdf8b01c64c16\n9bc53cf72e1b969deda761b10992452d\ndd8de6dddffe302f84633b41c8a09fa0\n63484c8326f8fe73cb922bcc33df0268\n8a4e1f7cc3bb76da9c9245e96a55cc5\n924761d5171a0682e5c139899870edf3\n25e718b0164f54d5a9f35e635b7e48b\n150da8f39b055ad0b827fae7748988f\nbc0ef0dc1d69ed4c852bb95bccedfda9\n5c0d256f2bf7559bfc8914dd77284b3\n22b11483d6a2461814038d588fd1342f\n875aeeeda0a93481f51fa0238791f5dc\nc53ec0141303c1eb4508add1163b4513\n3746c2c38faaec395304a08899f58b0b\n29ec7e1541397b0e5ae252905262c0ed\n5d9f1c6f9ce9333994c6d0877753424f\nbd088259c8ee711c3a4642fe4c259750\nae1b6411a089bfabfff16555386d173d\ne61751c485c937fa717300ec93e59c63\nd3c677deb7e829f05728afe1a12978b\n9294163aacac61f1ad5c4e4076e069c\nc6c8b57de92a243abb3f330b15ee1442\na39749334717e07098f49a8972f75c6a\n8f5c8cdc0fc4d84aaa4296a266fbc9c0\n6c930734ea1ea82476d342de8af45d5\na053322861de88a21725b4111480fea8\na693b27591fe6ca2fee6b7db2f5f826\nc8b6897dac50a2c3eaf288f952624966\n4dbe50ba1f562fb236413faee81117b1\n592e8295672e1419e82c020151d41155\nc88d26d20803d385e8f8c11a24c52ebb\n36a6725f30a73f0e91ffcd1d3522e1d6\n81a7007ead4051cd22ed3259ee7e608a\na9698105867e9818f91663a74ccd2338\n192afbc1f0977f74861e0db9bb7afc48\ne1e2ab3bc1d604752b4aa1e18549d620\n7527c6db4e52d511db01c957364e77d0\n2b8a9009d91dc09863d467b618e97922\nde6e76b4be0db5a0f81b347089add3de\n8d87711b1fc30783f06800d5696e457f\nf6f563d47fcdfe82d67386763ad34603\n34df668babda666f7b0a2c22acd10794\n7cf9738a01e47dd6a123ce0dff5bf4e6\ncbd547bfb6b7d8e54b50faf1a96496ef\nf2bfa61e1a8894dd1071797a42296ada\na2bdc3a6cb13bf197a969536c4ba7f8\nb543411f1fce1f30e6fe3612af521500\n8d98a04f7217d91ad85fd2587ec5bc19\ne9e5da988215f06513292732a7b1ed9a\nff143cdc22f23608cbde89e0c48a01bf\nfeedba483f628b8f584e3f372dd1a2d\nf1241a9c69cf35feb3104e94482ea9ce\nbca2ce9beb8b9a3c909c248d0d9da9f5\n8a484fb8faf9dea01495d00ce1193982\n54eb2ff4ee8889f65ff59927d484940e\nf8a6cb92786bbafce8f8c11a24c52ebb\nacd97b28893414c41e4599068fc59335\ne12cf322cdec8ceb63860d683ccd0da\n4781d90373fffdcaf9aec59741c69cf7\nf551048075b5042d7d6d37ceb4807b31\nd9d4b2af7ada1426fc385a284336f217\n48e31e3a3e2aa5c0cabc196a7f35f1aa\na9ee7aaca080a86798e0d1738edd4f19\n996265f3d98601ea3bec56bff764ba78\n6f271a6c941038a6efc579970fcfc006\nc1ccf7d15c32b156cc2af5791bd669b8\nb28f66155cb67bbbf182e66e17d08d5a\n3247d4bf8bbcbeb6840bf649c20f40cb\n62b02c1b27a5793fef188758bf2e3a30\nd52584133659bcb24b3c42e318f3affc\nfcdc852692f43041fdac1e69603928f\nbdfcf2086fafb0fec8a04932b17782af\n1e4eb3bad18b75f23d6e282938a47f9e\n77a5f44875119a6b5369e32fb818f337\n88d523dbcd94be8a4af957103f4767ac\nfb74336a6192c4787afee304cce81d6f\nd4a80e7a92e2c4f98981b7cb87854e68\ncbe2e3145eea246cff40be78d008f276\nfbcaa3c4d17b8b7c9b0790357cd0493\nc1ae15118f856e5e3759b16de9b6963c\nf2458aaf4ab3e0585d7543afa4b9b4e8\n4da36f40feb209fedb52360728b4b83\n69e8d0b7366591dc578d107c71db28ac\n98e6845fd0c59edef1a8499ee563cb43\n42265c6cc8d24be09cd3f9e8648111d1\nfaf387a11f3f944a75dc34583b0239b8\n75850c6e67073a2a593ebeeedbff73b\n26b508c478a9d363f51fa0238791f5dc\n9507b4091c4d02a37e1b1f098db17ba1\n2b69e899da0c15cfb40f0ac0fb9a650d\n70ed97376be1d0a84301558fdb0b2522\n15d2efe697d229aceaf288f952624966\n669568cff92228b4e6fe3612af521500\n1843c388615d12dacb16624e184454c\ndd3d82569d4cb2b5af140afd78cbb542\n1bb31ffee286d9687597e1f94410131a\n30ed3ecec491408f7ea607586f414f8a\n47c991f72eaa53c6a8737fcf23389014\nd6f95d8ef06e6db3ba0604df5d71bead\n9ac58aaf9989a0911f98c0761af40e04\n3e4a24e15c63edb95554764d7c3c0e03\n3c56ceef171fa142126c0b0ea3ea0a2c\nc7f31b9900a1a7644785ad2feb797e\n999c10445b9126fabda72093f9b5aa73\nca7dc4294b1080acf256e6841810978e\nea295fb4335e3499f51fa0238791f5dc\na3feac5d875f764c1961e650f3cfa396\na28a2bf7c899fa38baaf4e0b7520fb81\n13534db5278d476d98e0d1738edd4f19\n8951dddfc3cd6b08e8f8c11a24c52ebb\n2fbf971de875a1277df50de84a56e505\n1908750cd67208e0c4f370f57df9b202\n1824d5cfb7472fcf9d5cfc3a8d7af21d\n995a4ed2a96d7c60140c975cafb9782e\nc29c56fe616c0986e7e684d25d4dcaf0\n427c7655012b6cc5593ebeeedbff73b\nb593b430e799ac4af256e6841810978e\n2bc178dc567eaaa7e01b76a0b6e5fec5\n3aeae4150fce9f79ed3b18fbf7db0d\n27edeaa6c6e2e670ce4f274577283b16\n1bfe2d5a13298b40eaf288f952624966\n99479cff448798a358db0ef36af1d3c5\na5a855d1b710641ba90692240cb38ca4\ne68c603dc62dbbe5a1281b4d4bd889d7\nfff199c067a6e0f019fb4103277a6b93\nd8e1f6781276eb1af34e56d1d9ad8c65\nb33ce45211c0950e3ca067e8715715df\n48acfed2c1f2d42cbd16d4490a10a752\nc344088939a4d4e4c8687ff9b0b4e4ac\n359e995834270ead614871b18a2b1957\n3ad0d0becf611ddec6fd9dc5af8f81a4\ndc6308addc91fd9eb9e8bdc9c4a49aa2\n9ea38e213819c55680dbca6e7b64a4bc\nee5cfabb3bbf211f4f46734d27ff5aef\ne323d123c60c2f2e3c777ea9821e1518\n23c4b23f2e74d6232fee6b7db2f5f826\n4264fffd38596e3a60f888b4e2fd3e4\n3acbbce6f05c2623fdb2be860bb16c8c\n4ed1591fa1c692df44265a262962e6ef\n9e3fd54c2e7dc4204b19d2c99e22ffe0\ne708bde6a2ffa4cd1ed1d681aa8388f6\n485fd17a8679ebea638c2f4fcd9a8e7b\n7a32d6d22231a58d32388c13cc4a0ba3\n93b4258c377ade381deb48513aeadf93\nf7efea85176f8cd01f274b4885739ec6\nd0fcb2993379cf9ed72ff9ec64cb596d\nc8b49063b5c805ff62a510b8f97c658e\n28cb2ca084164fc15da92fb9f7555d73\nb69fd1046deab785b3a010e5a9dcf3a8\na28bfe80037449cf5eea3e3d89293379\ne46d448389af3fe4500158c23c4c5a8e\nb216efa7925318b1e466d83a76d6230b\n79a9aa1e8b3b108cc48383e281a276ec\nd5a7ef075ff5e17a29f849a67b494905\n6e0e701ad50f5f8c63a3732f072a64ec\n2e0f5e0ed5acb122597976c675750537\n6c9f559b0adfbd6985d87e0aa09f3117\n336fc8a43b3120932c48d6b905457dcf\n777aa4f75debc4e8acbda81da5062d85\n6a62d0d3c8eeda396ba836372832f055\n3c389c01263d2eaf2b3e9b6eb52d35df\n25c859754525fdf713dd6eafe1477be1\n581808bf8d8e1d2448eb521885c87e13\n130c64a2c0232fd03fc2ef4fdfb57f60\ndb8c451f7b01ae88f91663a74ccd2338\n810e4815b0ef6f1314038d588fd1342f\n691785b64177ec582461aedb84ab8436\n2b73510e4eb3d8ca87b66c61c1f7b8e4\n725af978a11bb5c383a0857b7b9398b1\n81bb52e7a83d1b3e9c75eb4326997fae\n9b08d6288f208362dac562275d66ec29\nddc31f9e7064be80f51f77a6d7299806\n411444708e41ec314b3c42e318f3affc\n126ed5982cdd56243b02598625ec1bf7\n9451b957aa36883d6e6c0340d644e56e\nadfda3aefb86478319fb4103277a6b93\n3fc4cf00b8db1f03b086b372af6b049e\n11d5e99e8faa10ff3564590844406360\nf1e174f8ac0f5254490ad276cd2af3a4\n761b8ef3b41a84b82f84cb7932f866fd\n5a71471acef6f8153d4d11ac89066d36\nfafd58ba00e8590119abd93be2967664\n7446fc82485002938db1c6c15d875c99\ne21b95b9dbfcbed28ccbec49bbc083f6\nb6de66042941f5691301e24e9e27a9c3\nd8087961b06c9f7d4b3c42e318f3affc\n94463eb34be49887c3bd24f986301745\n933a9330407d51b6a8cfd114c4b34e97\nc49d9fb6c8b32b265beaf00da5b709c2\neda8029bfa428c38f6ab3cbe0907fba9\n63fe6b5903df38a0ba0f037fee399b18\n4e218928736f1e2bf35a12c589281a9\n24bfcb97fb60fab7e812c99c6645894b\ne2b1b05de388e7db3b52c6376e0759d3\n8701046c07327e3063f9008a349ae40b\nb3d686456bd951d42ea98d69e91ba870\n9e2a48a4263b77a06f37a8be59c15bbb\n8a01d1d686c4b0d3593ebeeedbff73b\nd835768fc0cc3300ccda8d28b44378b7\n73c8bd191a664678f5ba7cb98f498b13\nc4e36c36679f27887586d00bc0d54b2e\n45cc71dc2483972e742728b30848ed03\na00bdbddfe3511208dd711af5650bdcf\n1f8098eb2fe947398dc38b92af981645\n26d36969b0ef62b1c2c449c0c0579ec3\n57f383c1eba6bdbbbb07e1e44f4c30aa\n423d4e5cadc6dbdaeaf288f952624966\nc06d35db226f47d4de03ab2a27ba7531\na109fd29656079e714b96b665a8ac321\n4735568bd188aefcb8e1b99345a5afd4\nb53bbce3774bba2f5ade1effc174de\n8659f0f422096e3d26f6c8b5b75f0ee9\na2d798bef501195c1ecf441429b11ade\n1af8bfa4eda36bd697c597ba4db02ec7\n73e342d3bef02e923d6e282938a47f9e\nfd4dd071f73ca07355eab99951962891\n89f4bb22cb53fecaa0fded058fdc8ec2\nb821fbd0ea6086ce9670b99b613138c4\nad5ef1b493028c0bd810b14a81e12eca\nff99fb65f116dc1b24e1cdbdc9a22905\n4076958da964edb95ff61a3a2a0e2484\ndb09115f98ebf4bc20768660cf080d12\naa5fe2c92f01ce0a30cbbda41991e4d0\n896e8970c81b33d068b6f94bb42f6cd5\n92ee5842113109b05550af5454dbad36\n28e546337f4a5188e6fe3612af521500\n857c4d70af14d9d9e9b88e9734c4cd55\n5b23328fa6d5382d295b24579cf55b8\nc5ded02dd51a5482e0c5923879d79f21\n5f67ee55d76bf582c41aee3d4c9d0c9d\n4b529738e7b5f910288138d7d3420148\n10552f968486cd0ad138a53ab0d038a5\n48b67f0f05994da092a31ec18c4e190a\na7e4616a2a315dfac5ddc26ef5560e77\n79745b6df9447d3419abd93be2967664\ne92822b0b73f0ad6976792e9f0f98e95\nabc6cff85c8282cf6fe2eb61cd6e74e5\nf100212c5848f7d3898b4cd86bfa936c\n2b64dbb623899dec7bdbd1926dd38bdb\ne8342d53ae929341b6feeb62eb9d939b\n31e343b657358ed0a4e97ce1d10a5ae6\n44a17a70369e803cc7623e33dc7256f2\n9abd7abc15a5f7893eb520ff7cd241f0\n1db7c7411c5d957918f52c8a4cfcbe33\n1053897adff12c7839c40eb1ac71e4c1\n6e213a2ecc95c30544175b4dddf5be08\ne0fd6cc8f2e62ed6d1151897037aebc\n930d2bd446a43e0ee8058cf23f6382c1\n953196a4e8a813e8fc909e63d58b00ba\n26205c6a0a25d5f884099151cc96de84\nd0e419a11fd8f4bce589b08489d157d\nf0e243acfc5605bdcadbe66b40c67b2a\ne809c16325be020c795085b4d203932\nbf28dd5d38900b1314038d588fd1342f\n75fa63a7576e2f509ae676623bdd3284\n58447a958c4af154942bb07caacf4df3\n67d7f94aa2ab272bab610b0c94236463\n611f5a21a6f9ad3d7635d2483a62c61e\n29bfdc7d14677c6b3d6d3c2fb78160fd\n656ebb911f3963a81a291b1dd4baf49\nce99ea72f222e7d58bf939d21e50c410\naa2d1614a9bbaff7e6fe3612af521500\n79c3dfc2f90a5cb619fb4103277a6b93\n91ceafb0b1b2008d98223ee0bdd50697\n35eeee5f998f24e8a505985405786f0\n8258954eb7929aa13542091189dc62b5\n4a11e50e8e5c79e82cc460e9d064e57d\nb2cfba8ee63abd118fac6a8030e15671\nd4ea100ff8f94edadb1109c64edb2c4c\n117f6ac4bcd75d8b4ad65adb06bbae49\n69f5626d5dda497c2af11d59b11e0199\nfab5f1daa52608365768db72e79a5dd5\nc5dd746e08121f8f71a782a4379556c7\nb85dd5219ebb52455a1bada754e9e91\n10f2a1cbaee4101896e12b33feac8da2\na6acd78fda77bddc52862c62c571b1e\n118a7d6a1dfbbc14300703f05f8ccc25\n9ecb691016c6295a50f06b72cb7e77fd\n4ae401feb8499f5c9f2349486c570dd4\n628f7a321ce4f90fcf01bc59d215f0\nbcaf0bf7eebb7d7f4fa36fe4cfcd8f6b\n64702fcd98b04ad21206ff076758ec85\n2bd1439924492a3fcea6c8d9a419e8e0\n8d91786e13808f73e4248277d408e4b7\n9beb39285a581fa1f2e202d571b458dc\n15c66bed7e6bdf85160c7765c528fad6\n99a3e307a8e08afa575f974bef523d40\nd7bd0812487f786b19c5fea91449201\nb06afb4d11ee4eb9ce4f274577283b16\na613610e1b9eda601e20309da4bdcbd0\n89622aab3cd599787088864e604378e7\n16fd88a99f7d4c857e484225f3bb4a8\nf13ce2c21e2ebba4b40f0ac0fb9a650d\n8a66b03841197e23d93b543e2efc700b\n23833969c0011b8e98494085d68ad6a0\nac5a9b215a7d5be123448769dbb64afa\n5ea73e05bb96272b444ac0ff78e79b7\n5b27e06a178965c5300703f05f8ccc25\ncc4a8ecc0f3b4ca1dc0efee4b442070\n7550aa9d29f252611431dc89d81d788b\n5cc378efd61f0333afd8078191062c7f\n24223e3bbba442ffd19c4e0cc3eb15dd\n781a7cb1d7f9347d7ec5a98b3b8c425f\nf8ccc92a6a5d20875eea3e3d89293379\neab4334a06fafb7171c3cf047830ec1f\n5e9e4d6551b775d8cabc196a7f35f1aa\nb23656fc9bf32eaffa22474bb826a278\n45e5b5efe95ae98ff2be27e9cc5f92fd\n5d1c69aafe90cc3114038d588fd1342f\na2bd385c411aa690c795085b4d203932\nf261a5d15d8dd1cee16219238f4e984c\nf37c09d7ebf82cd642ac3369eef7a7b2\n57ceb2601802a37e534fa06200d07790\n755f23d93b06bc168cbb8bac2032149c\nfd124209f0bc1222f34e56d1d9ad8c65\n86ba626309daedc8e8f8c11a24c52ebb\n5d2ff1a62e9d58baeaf288f952624966\n4a7cafc9f91cde86200f88c4e37ac5ad\n7e728818848f191bee7d178666aae23d\n3d164c442e5788e25c7a30510dbe4e9f\nc9276f00529396bb35836c728d324152\n8c6348fe629fb8c876a45e9a12af8158\na3faa167208786cef81b7bffcd0a03c8\n2bb1b5865455b2b814513156cf2b8d0d\ndd78c16d85780d6b413102507b68bcb5\n709389fcd446ca6593ebeeedbff73b\nd8b0f33dd965d49447558b47f7ba0b0c\n681d226acbeaaf08a4ee0fb6a51564c3\ne68758f3775f700df1783a44a88d6274\nd09b21e5a16c2a0ea29038f04db9492a\n90aa5fb0cac28bfbf91663a74ccd2338\n6e7f0557400601322112c05ea370d321\n8f8aa68c8c6cc6b53dfad56d2a4eefcd\n84c480a1a055bd0f7223d6cbd6200e8f\n3b37e15f2dfe0bdf55f9a00acc25f137\n17e3db80502cd515bec7eb09198824ea\n4d05c9f0f34e1c22715de3ea7b582d7\n847ce2a3541a085ccc9651014a82e2b9\naced3dd677d1e2c46ef340d5b029818a\ne921afccfbc7137c5a95bb8b37106cdd\n2459280764bc155554a99e49f597fe94\n3eb1a7a9a4ea97e3e44bad6fc9badfe7\nc4af170f18f0d6edaaf0ad030fc37d94\nec4948183b308204e4d5ca1617e68f91\nc67a9bc21455b0d9c018b720578a03bd\n4a747546b39003dcd59517820ada1bea\na90cf2c399b7052cd4061e538ffc8def\nf567137b74a175c6f49a23658fe5597c\na3d8fb85de7cf56fb2d2900ee0ae7e0\n90b1058de189e4589215045784774049\n4653af854bf098f2d74aae0eb2ddb027\ne4ac864732a8dc40f99656b78fd61fd5\na87440fc1fe87c0d6bd4dcee82f7948d\nb2a9553d5d81060b36c9a52137c03278\nafd1b4501cbda28814f62593b9237aa3\nb08fb5e8df4c11c090a9ce3e4b15521e\n45fb33cc152121a97b8f528a5a7a471d\n9d56b14e39f4c1f9ff6eb780c82e5ec7\n3e2cd7495af88fe352e393d25dabbb72\n8a5a40fe10eb2b2eb022c94235bc8601\n9152b02103bdc98633b8015b1af14a5f\nc06ec5cdf3500b6c965332f7444deb03\n854c9e951c2cf2e3492d9da2668ec34c\ne29de3e590d4541c285e5a1f74237618\nc46a4ee98bad8264925bc492489de9c\n9aa38ab7fabbd6becb6924eecbe974f\nc4d472c94921bfc63a36ba9606d732a1\n262833bd44fb0e522535fd8b96de1b55\ne70e0e198e8de08dd23e51328875746a\n251cccb082a6d36024f2ff737a52b0c8\n4d5efa4209fc3c126c92f284160734ae\n189e64b308b4345d291d421ca3746ae2\nd5931526b56b157cab610b0c94236463\n9770f3e5ebc261794f15b22cc208bec1\ncb6b81f8c581bd2ee6fe3612af521500\nfd2f1f0d3c4b90d535ae67400a94a6fe\na92f6b7dccd0421f7248d9dbed7a7b8\n80c143c03d0d7b3087752c136d371e3f\n577625945f1b83d16296847c9d695b0b\neffe967a116f8098cc2af5791bd669b8\n79edc7c4e10a6fd8b3aef1eb2166205f\n47362cb47416904b76e38b52d9aafc11\ndb851fe630734a8aee7d178666aae23d\n1d6250cafc410fdfe8058cf23f6382c1\n2e445df8836c2f55722ac248306b14e3\nbab33dad5baa7983ecaafbe064b13083\ndac6d5f66189b340d4ffe37a3ab73512\nd992ee06ffa2455219eb0cf70882af88\n512434114e17c17d4a79bd7fa08bf04f\n2e1563209d3318b2d544b90b3a170602\ne17c6810519ba81a559916e9a5177b0e\nf4830a8e2ba2c531b18ea2be5fef7826\n9b73921863beef532d1fcd5297483645\n2c12a9ba6d4d25df8af30108ea9ccb6c\n1662f76e3762fc92413102507b68bcb5\ne771166e02fe1016bd16d4490a10a752\nc4d65d8701b7e9b977e95ce4d5a0e556\ndc097b47bf15ec8e7934a0d24a61231\n79170ac3bea792317984fb9ec7e40829\n3d498fd733de605a929a5204e472930b\nacafbbf4c4f3aed424367084627d607d\n8981c0ffae1af00a50fc88ed745bdb67\n1442fc6ef6b82c8ae1da81584e31b667\nc0b61d423f449b3c6f37a8be59c15bbb\ncb680d8c4891670d559916e9a5177b0e\n58915b74af8f69af5213cec267286d18\n93b09a953435a00175aa7f24a9b6003a\n192b06cd91bf659ce3db80a3cacc6e3\n39b0b5513ce0af42cb25d116843b43a4\n4997b2b6120f84e948eb521885c87e13\nf6dd2e82ae1f5f8d3d4d11ac89066d36\n20b601472e40f47b17b431cae0dd70ed\nbf30f90b1c864bc2d5cb6d178687b980\ndd50bf448cd6d69016e9e510d2c2a9d\ne78b5c9191f3007cd36a803949e62cea\n785ba264dfcf722bf284a86ef67b13e6\nfa71486d68dbe48bf27b78f69ac93684\necdefc9c1104da52bca88fbd368f59a\n4afee57f3134a483d9b53420a5458c53\nc460cbeabad41fae963cdf8b01c64c16\n7b8a8776c2bd135694e14fba4acebb36\nd29d2c5a1b35b85b40f0ac0fb9a650d\nfed8a89a89c96271490ad276cd2af3a4\n35b4c449b5ae845013aebd62ca4dcb58\na3604a6631bdd53b593ebeeedbff73b\n68aa553c520fdeada30a92122fc999e9\nd9d465cf1be1142a86114f7b6efc777a\nb6d1a72c1f27f4cbcd701e9c04d3cf7a\n664a84b65396e168707aff99601b0e71\n262e433c526d8b4ad84b8ba651dfb8ac\nd15ccf2af52a95f619fb4103277a6b93\n26caab5f69ebc9693eec26c23f5bc80b\n1acdc3f794d927fd63fba60e6c90121a\nfc48d6602ba4904b5bbac631310d500f\n3aab3cf29ab92ce7c29432ec481a60b1\n717e503b3846d60ee8f8c11a24c52ebb\nc734c6bc3524b673ff2c92c2a4f65876\nafcb115706de531f909c248d0d9da9f5\nac16057c9ab79f7f2c7685af80c3d87f\na23357a29af9f63ed26fff8ae28c5292\n7a6c2247a36d93b6f4553a0692c9821\nb048119e0f0828d5758f6def7204bd6b\n62bc75a69029614877bb84100a5c6b59\nee5d770da5335578f7d7b7d6143367b0\n1507432d805eba8dd773dcca82f4a71e\nbd199c38c0fd7602c9f722bbac7c6194\ne51d445efd61b1e4e1296b473bec7902\nf05f6b3e7c0afdb352fc7e973ba7787\n3a3cc27878713c19676de9b6e111da8b\n87936de578cb81c4c61648d3e90c5695\n852abac2613701ed7de67b59dfb031b\nce6c597847e7dd1e55eab99951962891\n17e050b62fc249687d3c9de9415fb224\n4a1b7de779cde76487311f65d7a3e3e6\nc4a70ab37043efeb14038d588fd1342f\ne6ecc4e6734f056855f9a00acc25f137\n90b3ec9b7f122e3ae677774c24ef850\n218f5acd2b8f2d7c85f6609ec867506c\nb651ea269f4aa92731780fdd33037c9d\naa86df339042feeba4d9f38918617d27\n9eef66b5d0444f8398cfd47a860803c5\n4106b3d95b6dc95caacb7aee27fab780\nb1d7bbccf07f38d34338dd5307c2e704\n484259aff803ddd6f51fa0238791f5dc\na2a136afb803eb35cc571cd3cf8f17a1\nd1a40b075d8aaf62e7c7920f6a65a54d\na10a157254f74b0835836c728d324152\ndfc8656b5e7e6104feec1f13d2353f3\n9484665b03423168fd1e5a951c425f11\n8673ce2da94bfe4ff42b5131862a2dd9\n69e983e816774aa01b17743c18fb63dc\nead4e128aa3ef03b9283104e53cccd61\nd60975380ebd13746a12da8b0e0f66fa\n9ef66cd1ab321cd3872052160bdade26\ndcb434ec43228c7e98621bfaa41dc79c\n1d9a26feeba782e3f91663a74ccd2338\n26a6dd90bc8d6a0e227f59b6a8b64739\nc3c5818cbe6d0903822a33e080d0e71c\nbd5bc3e6189f6972eff42b9e13c388bc\nacf458d2b16dd918ef188758bf2e3a30\n9ba5f57133b048f771e087d4163df51e\n3dc8e7cd623f5aeb65498947b67a3f6\ne62ed35d1643a56dc9f016d57db96408\nb15fb2ddfff73f502cf0d9a4f66100ac\n2f426679ff0345326e467bd7dd946c3c\n592fdb44d4bbf0ee490ad276cd2af3a4\n72988c811a2c88b11206ff076758ec85\n9fd96a966aec6594f51f77a6d7299806\ndd6f44f5b788d5963d6d3c2fb78160fd\neda881a6ea96da8a46874ce99dea28d5\n6315fad2852149fc19fb4103277a6b93\nb58291a2e96691189d1eb836604648db\n6131018e5caaedb87980e3c69ea07675\n8c788c0a04623efbb45ba874f2848e8d\n8043ff469c9bed4d48c575435d16be7c\nd7aa6e5b0c686fdee039576a17a0737d\nb0aab89e3318b09724a8d949d07d1308\nee57ae3e04b1930aa6bb70ffc9e4e52\n46eaf99e641a0fd264558a1c6a2a9f11\nf78da0aa23162f3850cf3715818ccfe8\nd21b63623023b40a593ebeeedbff73b\n8641e421ade0f7cae136ac3990ab77b2\n8f971956f31d9faecb3a30f2c37c38a6\nf2a96143ed0936265d2b890291504877\nfe79eb9d45cfa9c5ca7ed590d69b9804\n1193da9a06f87fd6a0064771a6f2cf3b\n4bebf39e3fd794937177a91ecaf96588\ne8524ce4800693ad1aab7fc1a7e09451\n15d59eaf24645f501030665054ebb2a9\n75d76c87ee1066ae7ca0c2077c3e38e0\n2d1dbcb6802bf2017879e882bea3b8aa\n2ff7a54101b3a51283c1014d9ff52cf3\n9cfeab8ccdb908a7ada629e23b16719\n1c756525061c4b0b4f3443b22038d340\n875b65ed8484c7908bd21f911d388ab2\n6f0b36b76bb0946ce642ef37786b5c80\ne233f53558015ba4f05a611b5fe35f32\n41c9fcaf5c6b83a61660e46cb2e4cc15\neb3b29fb1782c83de8a4454323586e35\nf96f7bc4d005a88db38d1ee17ad4a4a1\n2b79edc3da006592395a2b8836b4be75\ned151b7e31cf582ffe00f644e4f1521a\n5015912352daa0113e2f5d8f8875fba6\n3a503e0e9b48a8925ff61a3a2a0e2484\na627a11941892ada3707a503164f0d91\n8ef1ea7a7c4b4e7d5cba62773b8025b\nf157bee08e60f88ce6fe3612af521500\n821bebd7ac070a0550fc88ed745bdb67\nd546b9afa6d0a22fcabc196a7f35f1aa\n22c68a7a2c8142f027eb00c151c6f711\nb501220805eab01a6599ee0a44605cc8\n6b0254f2a397129a490ad276cd2af3a4\naec403bcd87487b5b3aef1eb2166205f\na078e45c64ef80954a4ccb8d69e8d887\nd8892d8a902616b1669e5c8c05e138e9\n3d0575e2fbf2ed5c99e1e63653e7d97\nfea783c6499e39ed4d304d5dc34c7e17\n73bb6025df29d208ae17f74ec30c4d4\na0eeb4524c84f7a0b8a09f7075b904cc\n87f103e24f91af8d4343db7d677fae7b\nc8e172e5708b1357545508cb156187cc\n165a78e3a2b705ef22c3a2386a9dfbe9\n8520016e497352aef51fa0238791f5dc\nc22dd8c395f465c87599bba30f391291\n9b651dee9548be90ded526a7be77b30e\n6600d60c9d3bacf8d34d30b545306d1a\n853707d42be3a24c3eb520ff7cd241f0\nebba3b7239bd43cbd4fd21ba7448467e\n7eddb52d83f3d48eee5580e1b1723da0\nfb835879f66b7b95c43a4855019be9b5\n40f6e30804ff4aae20125f039fb4c8e\n6bdcfd4b681a6254c45c0f305d0b6e87\nbdd7a0eb66e8884dad04591c9486ec0\n2fb74a2f2b2b23a8a8cba409c4409ba9\ne74d866f44f857e77b5d58e18a4bdcae\n3ce2794845ba4bff5c63d035d2a7c889\n436a96f58ef9a6fdb039d8689a74349\nbf837b5821d05c00efe1cfa376f050c5\n6d0cd48b18471a8bf1444eeb21e761c6\nb50c0ff1aa497809afbd772c78d05c2b\nd04a6f268f16bae7d472d3bb6a889c20\n64c8591e8a837cd5dc8d41086ec55d96\naa1da8200477456bab610b0c94236463\n14bf301e9548eb788430c9c8b2cd5ae6\ne877f5881c54551a2665f68ebc337f05\nf1a09674a12a3aa7297936c81e7f6629\n7061f5384074da6d6f37a8be59c15bbb\n1a713136ff3c0a506298eed3ee847aba\nbaef1491d5bfb6cb58e51facd8ce1a25\n68ae06512cfbf4f95fc186cfb5f359d1\nd8c748ced5e5f2cc7e3820d17093b7c2\ne5b0d8cabce54f524b3c42e318f3affc\ncff485b2c98410135dda488a4bbb1e1\n9136172b17108d1ba7d0cc9b15400f65\n11b544b22dedb59c654ea6737b0d3597\nfe652e6e444a8b827f06bb1a83bb6426\n150c9d9b92f7559f593ebeeedbff73b\nfce58f4938a670db91c74eb018d3bfd5\n530fc7ae6a1d6a40e830a5cca365799a\n2aa0288017b4e249f6a7b03b801e1d47\n6e97f3391a8de74bc862eec8232fff1e\n56df8103181fd18b27787a85c3bfabc6\na513bc9521717f2593ebeeedbff73b\nccd0c5e06744ad9a5ca7e476d2d4a26e\n1f860a494cd615fc7d4bf609d539b368\nf78b75284089cd6514038d588fd1342f\nd2018df95fe894c388acc944857403a5\neba5b24b9c3dc8cf9c0ca344f487323e\nb281da26ecd358e1e7e684d25d4dcaf0\n21e930917f2cab28dd711af5650bdcf\n8428d483ba327a2da11f6bacf5c7662d\nc91ed7cebef758f935836c728d324152\n8c6d7c225ba8a152387133b1607f2aef\n2dcd9c9795ce4471b65843dc986fdf7a\nb598d571630181e171e07968d18a8d52\ncf4db3515ce7c603cda053036bd1b63f\na015c48d41079f9219e48122ff512ea5\n2fa5cce72c52f5ea95696f73b672b1e8\n8d15fdb921ba675af592707fed2e148d\n8188a091928db3cb489883f17c1c79b8\n27d388a77f5b27db48186eab550b0d6e\na0ce7fd10e80a9f9f0fb3e3d2a0d34c9\ne2916cab74b3703763ffebf86d8dd00\nb5fcd21b70bddb3fbd16d4490a10a752\naf9245138b29dd19c8687ff9b0b4e4ac\n32b6c232154f2f35550644042dd119da\na15be5686c875d703201317d7803c43e\n34878cff5db772bad810b14a81e12eca\nc15b0bca48207d9d8cbb8bac2032149c\n5bf5096583e15c0080741efeb2454ffb\n22f89fd9e2a9f1a6bb6bc0db07c71e8\nd1c09e81d31e38868cbb8bac2032149c\n84a119d032947cdf1da03d263d0d0387\nfbf0c4f6a483bc15ab7a3d3a1341aba\n7d019d0342f8a70f3bec56bff764ba78\n83a7b2e11589b4cc5fc6df6674be3b9c\nea35493dd0e9039e8d2d730aebe7865d\n72421bcdcb3212f1bc2ef6ddd5c1612\n3ced29b0f7f38bcb8964df2a32faa49f\n3b3f44ac9d3245b1e7c7920f6a65a54d\n953707e41b518f631125768e50c51e2a\n76e0b10288997462c51b240dc7b068a0\n7b405c1d6d2dbea9f91663a74ccd2338\n31b5cb5dfaa253b3df85db41e3677c28\ndf19f437c753b93a72814c9aa90ee14e\nd5a2b159a5fbbc4c510e2ce46c1af6e\n8494a1f6985e8173bcdc50d6b73788ae\n17555a8b1def80abce101336817a135f\n17a768e79ba434b91ca25a4447d3477e\nc8108de19d8a3005c5beea20858a99d5\nb0a46e739da332985beab21ea89ae12d\nf644e0ae72dbe83d72ff9ec64cb596d\n8b5fb1851caf5b4c5b89c9fa863d4b06\nd2a3268e85d81c6c6bd365389d6dc6e7\nf5ee22abc76f7491cc9651014a82e2b9\ne5da166f78544aabd37035c74acfab37\n7e2d4791502378f2593ebeeedbff73b\nbe1eb41cc9eb4b04ae685ca100c909e8\nbe2d759412b18995946789884353d9f6\nd334047dcbb37017f5f004a628d601ce\nf653f39d443ac6af15c0ed29be4328d5\n12843b5b189bf39f7cf414b698427dbd\ne59bd11e144f6ca49aff919557ab16d\ndc2b5f9abce70f2b55f9a00acc25f137\n8892a081230c9e0557b8f616df7adf9a\ne817922063c3b24ca296c91af58589c8\ndb49ee0d87af106f2de0bc4fc4d02dd6\n2ee577ae974272dc9faa444e7f5fd692\n8771f9b7cd6b7c81e724074e69c062a4\n4a01490054b15c90ea5adc188e5a2fc0\n5328231a28719ed240a92729068b6b39\nb5eabf007a57d863a35a7666f0cfa5bb\n3ea6bec3578d7a0a24e449d22891bdba\n75418c9587b8eb0edd7fb8bdab16e83\n4e37752b33506d0313dd6eafe1477be1\nd3425554004d834f6dbc9d74bad392c\n39a922f31e5a93bdc563fcc2752ece39\ndf70c07c2b0a066382241d99b4e87f38\n8c9cb8a85aa36620a5f9d52c12457194\na105701680f658b8f92f3e7bff4c4ab0\nf6ccf5b4afd9171c818b86d9fa7a616c\n25bf067de33706e62bc36def1a7d775b\n5d94769d9581fa85295994a5a65844cf\nbda4b8e6a69e1fc63f07ca1042ba5dfc\n8e9de6e848ed53a248cfc982ba61d3a1\n5101b79892ce920b6ee5c30704fa2d08\n9c1b448ec62cb9fb36dd029536673b0b\n3a62563bdb750b988b83086412477462\n5b3b26c9ec974a1cdef028ff6a07adf4\nc856e6b37c9e12ab8a3de2846876a3c7\nf12c92ab5f422c07fe5adaeab9475bc5\nde5ac6717fb307e6b01c58badc8bbc39\n9d77156d64599e9b1206ff076758ec85\n28940687b3516d6e8dd711af5650bdcf\n7994498bd9b426cd37b2bb75885cfc44\n16dca17207a6a2b87f6fd4fd84c364f4\n7e4cb0c15959883242095a33119f8ea7\nb95f97ba63ab989cacbf0573260a18d4\nff1bf2df4bc49e1f79add0ba9a2ff19e\nd2711d46aac0b5ed492a9f7c65daa58d\n724ee53f18ea8e77cc166099a6fe7573\nc070cc8563e2b3d65d06d6b9708d8ce0\na3a22ad51e59d79a2fe54017cbc6c7d7\n5cc1b0be0eb9a6085dca6305fb9f97ca\n1cdc625f58dc911518af974879cc252c\n601bf25b4512502145c6cb69e0968783\n53c81bd4b93b14491e6d59363e6e833\n2bc74fa3617de19fd5bfda5cabec2102\n70cf74bb4e1e14dac15fcbb4bdbaf13\nd4c6f2749bd85e9a6a9633583f89b17f\n360c1058f401dd27fbc060fd555478\n1d86fbf39c3d2954222713fd18dc031\n7b5e46d1cbe7c2de7d92b0739e572d9\nc839f879381df0f0f42a90fe4baf4591\nfc786a8d62aad7e7e6942c5426df6055\n1a389652d23b9cc06bfa0701d875ff10\n42b13b1ac18724f84b3c42e318f3affc\naa21824de23b516995c7d6b48c371712\n4521ce028e5009811866a0bc19f46a1d\n2abe8d5b5d29ff52f7628281ecb18112\nbfc6b2328c9c12bf283b00891f680579\n978ab0578d8691ceeaf7fa9cda77a592\n49a60133d6b05b8d19fb4103277a6b93\n288837a47f55c0e9d8d964adc0b6502a\n622552cb1f5670a614038d588fd1342f\n34117792b1a8c180796c584ff1fcf56d\n3f5fdc05fc572730490ad276cd2af3a4\n29f890e465741b7ef8cb9d3fa2bcdc0\n2314a3400230f50d14038d588fd1342f\n7d8e6b132c64d909b161f36d4e309050\n386b2caac16694edbab0cb5a4ccf2fb2\nf55a514cc8f2d255f51f77a6d7299806\na27b9f94d052176af27383fc5a5a711c\n8a9630332c2cb42644ac83b3e97ad658\ndeb0889d902f08bef51f77a6d7299806\n1f438263a82a1b8919fb4103277a6b93\n447856e1071e8b83c036a40816608369\n9faefdf6814aaa975510d59f3ab1ed64\n708e7253604979d06d83c04495f2aa08\n8169b36ef1ae45ec19fb4103277a6b93\n32c1445f65f4ceb23eec26c23f5bc80b\n893e3f15f023e9abdba08b82bf5c2f3\nb5b77de7a8a05ab4f09df371fae9d63d\n1ff1912cc74a76c3b2152dcc3ff6a477\n7dfdfe28e3d25a0d19fb4103277a6b93\n50a4aa069dcd171937b2bb75885cfc44\n2a56ff0143d4e69fe6fe3612af521500\nb2c62e5b20b34fad5844a4d0ab925627\n7c68894c83afb0118e8dcbd53cc631ab\n5c9b1a32f54b12cf81f667e2a25e0619\n1230d31e3a6cbf309cd431573238602d\ndf7cced6f0e5e65c26e55d59015dabc6\na4ecec332f0ac0d22906e6acfda251cd\n36d4a1a290c541aa21d25a6a55757584\n82460a80f6e9cd8bb0851ce87f32a267\n9a24fd0d36ff856662e682c9809bff14\n1d4d7533d453ace4dae12f3947d07dec\n758895bf2fa5e4b5e68b9e5f5c3d0eca\n6b8908f72b78ddddf51f77a6d7299806\n3af6ec685a6aa14e2f99eeb199d54554\n2ea00b36ccb8d3baefc579970fcfc006\n2b4de06792ec0eba94141819f1b9662c\n2fb350e338cc61521b17743c18fb63dc\nb02c25874494cd60f51f77a6d7299806\n8cba819b9a56da95b91b871e750ca615\n5ad772a3c728b948d329896bbf26eda9\n93d5203022d651c831ae8c8ff1eb3d45\n221e8ea6bdcc1db614038d588fd1342f\n37939caae967b34da14c5748cc240cc2\n1dd6e32097b09cd6da5dde4c9576b854\na3ec914d44cd2bd8498bd5a555c21b1c\n4cb25759388ec29935fd302efa96f6d6\nad708015fa2c131853227dcd0d547ba6\n1af92afe68b3f837f51f77a6d7299806\n3425e406f20e69efddfee72cbd7395cd\nb922bbdf49b4100659f8e31ca87c470e\n429d58759c85f4750276e25240d21a2\n2c16efe54c1368b297f437b37a859ff5\n2d987393f7f7c5d1f51f77a6d7299806\nd669c884e2a9274b1e7ef3c0866377b2\n72b7ad431f8c4aa2f5520a8b6a5d82e0\n332b2573bb3675cf14038d588fd1342f\n337165c7708f17314038d588fd1342f\n6ed6b121918d8f3531ae8c8ff1eb3d45\n2bf095743bd8f21f6f37a8be59c15bbb\n24f5497f13a1841adb039d8689a74349\n4e664dae1bafe49f19fb4103277a6b93\n15ca4d51db95edd783f3ef99fe735c7e\n89045848f586c0a729404a50338e24e7\n408199b4b50fca50f415ddcc43feede\n27f8e4a89307406614038d588fd1342f\n651270d31b03d1c12f1d01f48e42a6d3\n1a477f7b2c1799e1b728e6e715c3f8cf\nab1435d685c06277409421506a05b6e1\ne063706e52feb2db039d8689a74349\n71147c7ef2258b894a1a4db9532622c3\nd44fb796a1772d5a490ad276cd2af3a4\nce46ea86a7f7a77b3adc3470b30138f3\n916abea85193002adae12f3947d07dec\nd6f81af7b34e8da814038d588fd1342f\naa36fd4d76afcaf8bdcda0bf7e7b4744\n5259557e17d437954c90f2ddc14dc59b\n241876321940a2c976e9713f57a5fcb6\n1e658eaeeb68978214038d588fd1342f\nd0f30590066a88fbd5cba62773b8025b\n7104877ee2b4f68516cfe1233e767967\na19aacbd84e0ddd92bf36b92481c5940\n57f5a7660b1f186e14038d588fd1342f\n51912ddf693219c81c8aa60fc1bb8474\n2bbd5947aca68a81d329e53feaade57\nd6176ad267c3ef92f51f77a6d7299806\n57e1cdb6f179cbdb98e0d1738edd4f19\n7f0a1abbf748d3b09a91829e64097423\nb0a85031201b0fb1df6cfab91d65bb91\n2c86b652e14005a09c39abaf208a73e5\n65fce4b727c5df50e5f5c582d1bee164\n47bfa972100a782519fb4103277a6b93\n41149ca3a44aff87707cdefe012d0353\na63bc3a5d43888a962e682c9809bff14\n79b544db8d95c3dbc1a25f36f85c3fd6\nd1738a15fe737103917b96045c9b6dea\n679010d35da8193219fb4103277a6b93\n75d58cb9ca1475f86f37a8be59c15bbb\n45d3384ab8d5b6295637fc0f4b98e88b\n2c7fd96b46b2b5b5efc579970fcfc006\n33384d4600a8bd0ad88a7002dfb37846\n90ccc3b3b344b3ea2250bf58700b4d8f\nb2f2058ab083cfa0a8055fb11b774454\nb2d70313d7d408f729404a50338e24e7\ndd9a138fd557c44f4a6b6d001599a1e5\nae4b600e137214dfb675aa3c10a97f3a\n9e88cb24b40dfbfb85b479b317175b55\n645aa5c32b9fe34014038d588fd1342f\n8918d572cff6b15df36ecf951968a8b0\ndcd9a34a9892fb11490ad276cd2af3a4\n61f828a545649e98f1d7342136779c0\n53812514f0d50568efc579970fcfc006\na66befdc2b049fa3eec26c23f5bc80b\n77371d342cddea8d8b424343280aeccb\n874bfe0bc817ac827571d17c374fac42\n54ee1ef79b340108e5b4d50aea96bfd9\n583ccd71c56aed45f14c803eab703899\n71a4f27e4c6fa0a1362d127df6d94eb\n63b0904e68e5d1c6f51f77a6d7299806\n53f4088679746f1193f685578b3d085d\n2f6f16e5a1d36f3fefc579970fcfc006\n341ef2d97f0f9091183903d8843a24ef\n13d3462293023fe71f530727405d60cf\n9bcad07a9c2e8e13490ad276cd2af3a4\n9e63faa55910e20714038d588fd1342f\n1bce3a3061de03251009233434be6ec0\ne389a5eaaa448a00d6bd2821a9079b28\nd7b69d5015110b1e2c5b2f528cea9dd6\n5cfc913387c753f114038d588fd1342f\n7833d94635b755793adc3470b30138f3\n1149bd16e834d8e6433619555ecca8aa\n68fce005fd18b5af598a453fd9fbd988\n5a99fcbf7ad93010ebc1a7ae7c4c250d\ncca6e720741a6d00f51f77a6d7299806\n4c6f6eb326716c8fc71d1873c074ffe5\n33bfb06af948d3415cab680ae8f530b6\ncb93c492c1c3c00a94c9842dcb05f464\n8d61836ca7137a07291d22c7a0bd7119\nc4dbc5a64db6c2d72a9a1691b6f98331\n5b9919f927005de3b867e31860078994\n6f84940f81a61eef2e9208ffa1a27124\n9c113b80d75659ffdb8fa1712f9ee93\n2715a63f41552d6c19fb4103277a6b93\nb0b0186fd16220d4917b96045c9b6dea\n24deb13c2dd93649d329896bbf26eda9\n80ae351dff2476fd1fa9db366c777d84\n480cd721e7bbf720b0eeccd21a9bc702\n7402b0be6d04b45da5f9d52c12457194\na3cfcc4d567590e19d4d5dcd2cc33826\n1f9cf65275610cff14038d588fd1342f\n7e832bc481a3335614038d588fd1342f\n64f47c058d0a2da68bc6f322a9608b07\nbc1b55a6807caa9b490ad276cd2af3a4\n5f66f9b4afd7d0bbbe99c53d7c66ee1\nb3cea4461eb14a3164d6551b52610c81\n222ee8debd39d5fedebd258f4352e626\na9439ca0eb112e7782287102d4d0c28e\n7875815356fb41f3d772e458a8f80cd2\n52687262fd77ba7e4de2cf65d389c763\nc2d78f31b197e0bce2d881f085d6d86d\n7dbdddc3a60664f9e87dd5740f9baf65\n1b5ae67e2ffb387341fbc1e2da054acb\n7b0f429c12c00dcf4a06efdbafdd7ea\n21f76612b56d67edf54efb4962ed3879\n828a2a981ec78e7c14038d588fd1342f\n813597b7f538820ef51f77a6d7299806\na181227b44ccf1ce6199ff1c1ae229f3\n1a38407b3036795d19fb4103277a6b93\n3f8f1d7023ae4a1c73ffdca541f4749c\ncf2e145ae0b8923488df69d6c56c6047\n16a5920c004800ca76e9713f57a5fcb6\nbf264dae9a5fd53dd39e33fed94f56ef\n1613148b579a747814038d588fd1342f\n17b1927dbf59786a45b09d36414f81ec\nc6f1601208aa5e72cde6b082a301e49c\n30e95358ed817addbaa0f6b191f18222\n221153f680f3ef015761a0b53ed37cec\n6d25000aa000a97919fb4103277a6b93\nd97b919139287ace7842a9c47d0b96c6\n199085218ed6b8f5f33e46f65e635a84\n4e25ae1d1ce18c4a40ef1c8b63a628f9\nc131c9feb56c6b7a6bb6bc0db07c71e8\n277231dcb7261ae4a9fe1734a6086750\nd50233ec66ac6ee2b70eac6546e93fd\n8dc7bba62eabeae9b3af232f92902efa\na8db9db73bb5a4dbf51f77a6d7299806\n542656b66458b918cfc64925a56d7ba\nb1b9c6c7b55d5bf845ed290334fca9ad\nd116e9440f64d7a0e7791a1581855f1e\n9ab89ecff5672c38aff5bf458c586262\n3f8aba017afa6d94f78aa2d67f081607\n25ce64639b8817065510d59f3ab1ed64\nd0842064c9900af698e0d1738edd4f19\n27781344ab489f2df29666f384be6c43\n7a82cfb4878d1162986fdea3c9eacb1\n54baa6e5d9584469b80b68728684f2ff\n2a154c6f14a749179f6fd848d2db8a5b\n96ce3abe2e2d4bd3ff24fe90298ffa71\n99b87ca5f2b859988b424343280aeccb\n36cf45005b263014917b96045c9b6dea\n9e35945e9d768135d028c2e338a88f09\nac96d2fa0e2052a790a9ce3e4b15521e\ndd370ef3f3e8097abb9760cf9cd1a953\nd863bd46db86b9dc2906e6acfda251cd\n955d633562dff06f843e991acd39f432\ndca3a1737e2e3c5c6d0fc9460109eda7\n1bfb1f52f2200860c3eb4329189b69dd\n62e90a6ed511a1b2d291861d5bc3e7c8\n511168d4461d169991a3d45e8887248a\n157ed8452a7edab161412053ff521f64\nb4a72257eff26336d7231c5bdc5ab135\n6d74c6092567868b65d5de7b04a51b37\n61e1edb3150c71a1f2165a0df94fc0a0\n1e70ddc0e4cef3a832a785b4a7e37e67\n8e4999f0e6bbb791f51f77a6d7299806\n867d1e4a9f7cc110b8df7b9b18a5c81f\n23c65f2ca9165072490ad276cd2af3a4\n3637b0d6db204c0414038d588fd1342f\nb2ea31ad8b8b3e19994626ba7fe8ddf7\n6262bddcd8bafdac3bec56bff764ba78\n7e1d225f13bf40d0d39e33fed94f56ef\nbc72ab493655beb5d329896bbf26eda9\nd27b9c12f500c3142d19175e7d19b7cb\nd8a8701f3fb8855d4d0a79ea230a0577\n15fad17654ddfd3c33defcb28e53dee4\n294fe191a191f812917b96045c9b6dea\n16632d002fc0eec9917b96045c9b6dea\n875c7185cce6b8b0813204830fbed813\n2b8d1c67d17d3911d9cff7df5347abca\nc87497b3c00b3116be8af56c801ecf41\nbeb7e6c36552f509de008fce66fdc56a\n191c92adeef9964c14038d588fd1342f\nb653a75f89a6c24237b2bb75885cfc44\n7cfccaf7557934911ee8243f54292d6\ndef69858279a9b23f841858369432cc\n33bd97e462ad2a851b17743c18fb63dc\n7598b1e15de58e67b18627bb8f2c00d9\n18e4ebaba8998410ae8c9d3b8c4b9bc3\n4774343934cead2828a3b1af7eafd3f7\n4aba95b774b2cc2233ea3991d83e660a\n9389ec8dd802a1fa7d7598e07139ebfb\n16f90b5e8d9a36fe35dda488a4bbb1e1\nb918cd058e822e00cce02970cdd7e7da\n76bef187c092b6335ff61a3a2a0e2484\n383e435cdbe406e76ab870ad2db8ed02\n63e8ec717a68181fae1162148fdbcc5f\n9e18b198e803af3513f0322d0d7e53c7\n8889b2abd894ab268d1b9a1d97e2846\na37d0d0598d73b07165fd9581927b6ad\n698a0a47dd9bba797ddb7abd4c043364\n41c838f99b46093fdb5f60e9c5fe6c8e\n4d8ec1a57f4ac78258db0ef36af1d3c5\na308db2269dbf79914038d588fd1342f\n13f398918a8ae11b17743c18fb63dc\nabd8b30650ebda9c14038d588fd1342f\n45d96e52f535907d40c4baf1afd9784\n2056de97c97b2c85b759217db94d2883\n56cafcac4df5308d35dda488a4bbb1e1\ncd2a6bf7effd529de96ac0c4e1fb9b1a\nae1754891182af2675da567c4f0a0f43\n28a77ea1fc6b43f936460820a7040825\n500fdf3d6ffbab95cb57ce1986fa546e\n11007f74b06bd90c518b6fc7ed4f3487\nb53a3566842e12b290a9ce3e4b15521e\n541e331334c95e5a3d2617f9171b5ccb\n8d2339ab19665ee3e7c7920f6a65a54d\n6e4ea95fa805aca632a526e2e9a7e9ae\n787e23d8521faa3a6b3538efbf4faad\n61cedacdae156b4dcbae681baa9e61e\n192ca330a80532471b17743c18fb63dc\ncc32fde4ca022cdf965e01bcaa1587c5\nb55c43cbec762a54eaf14273fa406ffc\n2860b2b5e16f4ae8c29432ec481a60b1\n770b9528c04f99d5a3bafec3b56382db\n5192e47e1e8267068907728f92c46d69\n82aee3c5088d005414038d588fd1342f\n8112da888f66bbf3c1a52e5a697bb944\na1a4f5670251b8314b35a7d7cea7130\n1867c1751ae7bb2829024035009201d2\ncf81e26374530f8fc08abcaf67cf0417\nd58a2c86b9b71f6bef4e42d70375aed8\n5cea034b028af000c2843529921f9ad7\nb5c6ede83e55d05048f174663905cbff\nf4a0d0169abf306a754ec1f2eef2c6cc\n9840eaff2718fe1214038d588fd1342f\ndb49cbcb6a2ac87657b1c0b6d5084bcf\n1059a78893d810bb14038d588fd1342f\n4fbadccbdd689b18b8708912bd92e115\nc805dab667ee341ca3ee83e6cad78356\nc51e57530257f6e0e0771d4c079a0ec2\n5eae999a81861da03bec56bff764ba78\n608d9d8434e52a71eaf14273fa406ffc\n1dcb4a52dbd349ceb9b8611336bc3051\n4e3f1e4f1fc88029d028c2e338a88f09\nb3346d1b7ced3daf1b2fbf268ed76a\n354c37c168778a0bd4830313df3656b\n3415f252bd71495649920492438878e5\nc40adbdd817cdb7a14038d588fd1342f\n9f4447e8dd345d33d68f196c7607adb9\n1f620792984f66fd22c3a2386a9dfbe9\nc3cb7d181b205d58a72e1f459869ef30\n2c1c9fb6e940c636b1467c71658cc329\n4da74e02ba23a7e98ec703e791db2af5\n21bf3888008b7aced6d2e576c4ef3bde\nad0e50d6f1e9a16aefc579970fcfc006\n147a9f656054d718e10a48f2bbb9bef4\n1ce97f222c9caeac14038d588fd1342f\n294afbd7a0e90ba9490ad276cd2af3a4\n12cd30f7f83f441dc13b22d2a852f9c2\n32859e7af79f494a14038d588fd1342f\n3abafff866f9319d19763227d95ac592\n1f741437c1dcadc82d19175e7d19b7cb\n77090c15f738bf3079da6431b0766445\n3a1cb5501dad77f360257b24d454e22f\nab38a559643b01908b424343280aeccb\nbb4c963786dc746855f9a00acc25f137\nd7220a39bcedbb89a14c5748cc240cc2\n2fc2409aa962c5553ca57f5648ff1b0d\nd47eb4149fbcd0c7907a5a34fd8df2f1\nba6c0baa0a122f8ce2aa36c9e5ae7ae\n35ba544cb0a342e529404a50338e24e7\n3ee93f4b1efe249bb21450114b9ae3a\nc2e4095266254bc1948a3bd895ea5ecb\n9895736717c559ad48d8ff57878739ca\n3cce581fbf55c31b8ccbec49bbc083f6\nb56d901b6dd62332813204830fbed813\n86a7258b0f094aa6a3fa78fb8c679d78\n3f1af655a7e3ee57b838ce7eb80b48a\n57183931e41c7aaa5ff61a3a2a0e2484\n499242b0da957d1e33f2b52ebeafcf18\n6bfe4dac77d317de1181122615f0a10\n66240ded565b0927a8373ea4ea947e84\n66c8df461f312684d329896bbf26eda9\n60fc7123d6360e6d620ef1b4a95dca08\n33eaa3a6a05575ab14038d588fd1342f\n3a3f425190044bdb2efb565c08a63897\n254fe5715b9de05db499b6b5bf6f9f82\n18a45593c2ac4ffb6deee1099ca09a28\nc722e02b37ec324463d444e16188727b\nde55a935ca4af29649a92ce7de587886\ncf651c9562d9267032a526e2e9a7e9ae\nb5c61f497f9354d535c2f4da17c09efa\n271cb05be2eb02c53b2e058a33951560\n99d036d409c1fc366f12b402757e5b72\n9fada8462006e138efc579970fcfc006\ncf027d5b0debe18321bdbc0445d9f748\n8f784e9c1bcf3f04225230e9f2d3c8a7\n3561da3d136b4deba023804ba421cf6b\n1545a13dc5b12f51f77a6d7299806\n518cf789a696965b5e723252788c3d6e\na9317911db005724f19c36a916a93d14\nb8f0f62a95143a60c5ae767f471fad27\n6a6c10088c857de114038d588fd1342f\nbed08d3f3d82bd2f37b2bb75885cfc44\n490383705f78d366bf67ac39195100ff\n304db04f545f53b021bdbc0445d9f748\na8395165dee1adafe0c381fdfcdec36d\nc81d3992ddcf2fb41b17743c18fb63dc\n8dd277fd02903b82bc0e720bd48e2c3\n872e3d94c4a37f00d9b53420a5458c53\ndbe7fa11097535bae7c7920f6a65a54d\n4146cfb4fce9055bf51f77a6d7299806\ndd1e9b6cfe8c2ff65ff61a3a2a0e2484\n48b2e88f7d199d43517a64eed9809d7a\na702d178064c7b81fc078d27c856022\n1914d0e6b9f0445b40e80a2d9f005aa7\n19f0a14207f4f953bb1b55ae5bd11e93\n40cdebefbd3bc2634c7384dbb75cab0d\n7b1d07d932ca5890f51f77a6d7299806\n40956fd98a04f34914038d588fd1342f\n4c29dcad235ff80df51f77a6d7299806\n4bdfbfa1871f2ca114038d588fd1342f\ndcba7668017df61ef51f77a6d7299806\n1a201d0a99d841ca684b7bc3f8a9aa55\n34d7a91d639613f6f51f77a6d7299806\n1168fc14c294f7ac14038d588fd1342f\n3a69f7f6729d8d48f51f77a6d7299806\n14b9fdab8d264fc214038d588fd1342f\n8b82330caa9b1a514038d588fd1342f\nc602f932c692ba2714038d588fd1342f\nd2964213849329b494887ea54f3cfb87\n1c912a8597962f1514038d588fd1342f\n139b38251b5bab5214038d588fd1342f\n511d9b4ffb8ad21485b479b317175b55\n79bea3f7c72e0aae490ad276cd2af3a4\n3eb9e07793635b30f51f77a6d7299806\n8a85b0675605ed8219fb4103277a6b93\nb42e4fd21f39ff4a19fb4103277a6b93\n120735afde493c277ff6ace05b36a5\n9dcede4115b4379e2af4036e9c51cbc4\nbf01483d8b58f0819767624530e7fce3\na5d21835219c8fed19fb4103277a6b93\nb37f1363aa93688619fb4103277a6b93\na73a49fd2887a030f51f77a6d7299806\nb6305089d351329681dff5c2e57ad46e\na007a3cd5b8ca7fb19fb4103277a6b93\n248e014f31771b31d3ddfaaa242f81a1\n47da08d9c7cd7e104b3c42e318f3affc\n716eba8ec4825ecb19fb4103277a6b93\n218233bd68f5261dff318cdb0cb45ca\n3230b6c7f396afff19fb4103277a6b93\nc983108db7fcfa3619fb4103277a6b93\n374fe2584abb594da094848ea4d06501\n44d55ed577b77106599dcc439b161a52\n6336e1ec8679ae5c512941e37c7d7dd6\n21e0ce3126c67610c397356311cbeea4\neaeaa6879cb8f5193a9b2e04441ce376\ncfec2302eb084b5c58f4eb05242852ad\na65534c7545a4b3a19fb4103277a6b93\nb7b15c6728478971bafac5c6f2fdd4fd\nc05bf63cd7818b6f19fb4103277a6b93\nb79a15077c4a662719fb4103277a6b93\n7e550e32d80421aa19fb4103277a6b93\na55140d6d7b1148519fb4103277a6b93\na7be35f955f8d45419fb4103277a6b93\n89155c23787c151219fb4103277a6b93\n7fd704652332a45b2ce025aebfea84a4\n1b28eabac10276cb7062f2d72cde5c95\n918ae8afec3dc70af7628281ecb18112\n6f0477514eb4f9319b0530265e62c9b7\ne922a4ef330ad87ca37f3fc191551700\n49b2df85a32176c8e47780c3e225251f\nba5cc31429d4c97479c67f086ffdd34\nb76e0d43ac0800366a035d0ca8a43948\n9b5b636b4b412d33d93768e7b9b1eabf\n13181141c0d32f2e593ebeeedbff73b\n4760fede61ec9babef410cd6a99ddc\n93e652f343412a3e1c8509b1d97a23bb\nee3d0be16a4499b7d8ce2b7ddb5bbcea\n78742b25c20ae244cf01bc59d215f0\n5ff07557bb0a3a30dbbc9440457e303e\n366c86849245170262f6790b971792e9\ned6704f132eebc3ef13ce777d031b4b2\n2c2265c2a9f3c886d0250e0e48027a4c\n48484a86775668cc7e77281775c253e\n2082b15a24a55e52cc9651014a82e2b9\n1a525427776b39259c89c86daa5af59d\n1f899a4f5418158f6721e288acfdbcb2\n4424a906da6fd4c961bf0ba277ea473b\n3d87710d90c8627dd2afe8d5254a0d04\n1e887a97e283f6dc4b3c42e318f3affc\n27ff0317be31b5932c4e6cb98409dcac\ndf4ce626dc8b2a744b3c42e318f3affc\n5319006bf5783b6919fb4103277a6b93\n2d3a484f14ec3d4d7b11ae648ea92233\n732f5f4226ceba1e593ebeeedbff73b\ne92955e3e3ee33f32650883217a11488\n34e48812eaf19420499252a7ccb366fc\n44e151bc576b4b059a46f459dd13f5c2\n97334ba30676598958f7bbfa65d864aa\ne5a4cb87310ec996e649b526d4e1735a\nc474bd0e12d386dfe25bd42000b74e3f\na46f3d5b1d3382d5cb11c9bb51caa476\n785b692194203f119fb4103277a6b93\n1d8716f741424998f29666f384be6c43\n51396ab24d97a1bb245495d3641f83a4\ne2c68936d051b926646568c803ce68ef\n4ea78c36488dd185f3598efd14e493d5\n3513af0a9abe4b48f13ce777d031b4b2\n2a027aef8813a131624a1aaab5ca52f\n8e6312c23b6ac12f956c23e7ddc28c00\n23482a90a12a7052bd184e94aa5ce5e4\nc029d82ea1d3af4e19fb4103277a6b93\n99ec963187a1cd2593ebeeedbff73b\n136d5a16b110c84566b7da89cd9376ad\n4f5611a5b8b1362e73800789ccff9705\n55bae67315330e0f131878391e12e811\n98b6c00c4fa346cd187ccdd3303d9e5a\nf15d3637d11e93f5dd17d7a192a3a64c\n9ae05089e29678adeeacda4374ad94cf\n26891b80550301721a648655355dc699\n7fe0602271e7b31f52db1d2b4104f173\nc281babcc88358f31ff05e2259c2ba15\n13f5779fa224ee03490ad276cd2af3a4\n532e2a8e2ae6f5616bfa0701d875ff10\nd5b99ed4075d9ad559497798da6e2013\n73f7237dd7ed9c1d593ebeeedbff73b\nffc0bf43dccf71865257cc5c33f9e8a3\nace4472862ff3f6d917b96045c9b6dea\n615d9c2b37a3616ace8417aef1b7a422\n7bfad524f6a550f6a6fee8e2140acec9\nc951d9b4f3da0b5519fb4103277a6b93\n43c435a4a10d90204d724d9ce5af6d8e\nb581f1d0e58ef9db584536aa725442da\n525c959a4a09aea164def4b29bf333db\n1579af0fd3cb306154b2f0044ac86c5f\n64ee5d22281ef431de03ab2a27ba7531\n2528b8f7ad0a177e1491843220e463ea\n523516236632fbc8c799384bc2c5517c\n67b1d2a43f266f4bf51f77a6d7299806\n725def83aa65422dd4fd21ba7448467e\n98f43bc0ca2c510ea12caf23554642ba\nd7280c7d6dbb6f20ff12919fb1541da6\n173d2bf95fb2e6353a9b2e04441ce376\na0a164ffbbbdac8d52979c729a1f9cc2\n82927175fc00ca7e593ebeeedbff73b\nfe45a0e02430b195b6f5fb02f36f9480\n34a2341fbd255d82b8a06a6203bc49a9\n98e474a6bbaef456febad4f49b26ec52\n2e17fbc8ae8989911751d30f076514e\nf0961a7006186493df6cfab91d65bb91\ne596ed19966b698c10edd100dffd8d85\n7669de4a8474b6f4b53857b83094d3a9\ndcd037ab067a0fbc14038d588fd1342f\n152161d238fbc55d41cf86c757faf4f9\ncde1943d3681d3dc4194871f9a6dae1d\nb6694e5bb51f8861f51f77a6d7299806\nd100d576372b75bcc6b705e3bb4769f5\n543eaf7f7a9885d57cbbb0dbdf037373\nf5639e976f7b8e70a6fd13ab3827d508\ne62a984beecfdd9a695c69bb6f9606c8\n117c47d75798788a5506ead0b132904c\n39b29bb4fd8140ac9829306a513f9466\n5b94025a52c244bfc51d071e487f31b0\nf6bfc818e9e265b34b3c42e318f3affc\n1c2fa78dbf2d2cda9e02fc85f824870c\n7b5b2e699dbab90d1ead5d83d8c2f7da\na0608ab77f25ae922b8f1e4489d2e1b1\n40da067ec8d56e2242a61f5042a573f9\n776c31753fadd5593a1c86745128d0e2\n50766e42adb211675e0d6e917505f52f\n20050b94da092fb8803805d815ede61\nc2294d5c7d629f11b17743c18fb63dc\n32cde5adb86d540a2eb3768aa5c5fa1c\n382d5ba8f3f89385debd258f4352e626\n1372c28325f2794046dd596893434005\n3a053bc6997155674ee2933c1153f63b\n25f1d50f80494d624b3c42e318f3affc\n4769bb2062392beb453a4adde9273930\n711c7f25142a3e2a57253dccd1b3fd5\n398ffbc5870c12e1b5c63839abd9baad\naf6ae25b2e295c36d79b19c7c4f0e293\nb10ae372f7988e3bc242632b2a8c3129\nff02fa8cfce2d39113dd6eafe1477be1\n6658d651878eb023c7db9c21ccfbc4a1\n8728e0df5b94173c9b709c9b379c59d9\n107bce22d72f322eedf1bb0b62653056\n6b036756d21b6d8548eb521885c87e13\nbf335aa14157162b6f8304908c816659\ncb643270a86e8fcc19fb4103277a6b93\n3d7301760bbf315f3598efd14e493d5\n9bcd5c2f575295283cd8f469f840fbd8\n1429db0e06466860dfd64b437f0ace42\n34d7f8dbbe80413c4ad33b69f9597739\n592ad41d80d018a2d614b159c22611b5\n884edfe9e34533543ede9e7417860fbf\n325fcce8c386f813e20babf15421d6de\n36ab61ce3c894d6514038d588fd1342f\n48228cf2207c7af5892eaa162d1e35d\n13de905fd21e501567a4cd2863eb1ca\n804b776428062f18f024b0f23b15c6c8\na939afd0e1336d17d20e3ea5765d7edb\n99175131585f4cfded403132b02528bd\n1d31309c617d32b51652e2e95099f284\n2291855068cbe57442b5d6d90d0cc78\n4a910d2734c9cffb44949d7685cb63ea\n54cdb325265e343619fb4103277a6b93\n9de6e26211d151931ae8c8ff1eb3d45\nb64277db98afae7f8efae927921987d4\n1d19f508f104e881a239479de51795b2\n1e6d5797be45c5a4443764597a072223\n9504e9be67514fe9c862eec8232fff1e\n8c29f480d31a1a521908c34adf823c32\ne6cc5fa521f970874c6deb9ede0648df\n6703a4ef8b0ce866a6fee8e2140acec9\n5f5150a80e5be6159141f9b58470d646\nbcc3c5da89afe93517a7e95ef7821038\nb0ed631f887c522519fb4103277a6b93\ncc4f3aff596b544e599dcc439b161a52\n897e43119c6e4b8710a82b807fbeb8c\n8760843dbfc059d6c242632b2a8c3129\n6cc0e9deb3b519eba347d2a9b736d5f\n8634968c859b2dba5e4b35ff1ea95f37\n4cd5a2a90a9bdd5eec2fdb822d0e9d44\nd2a4faf6613ea1e66db434563c7f5ea3\nd8142324c33dfe7595bea7c29e873d16\n855407f176aeecd6ee7d178666aae23d\n28cc5741095e9754cc9651014a82e2b9\nead2f0ef7103c963fc1f58a995f231d1\nd55d14f87d65faa84ccf9d6d546b307f\n9f5b090a3697b05f8f9cd2ac878055af\n8ea11732a1198be1dae12f3947d07dec\n113a2544e062127d79414e04132a8bef\n25bcc7d412b1b3f27713a8d3e281895a\na6ac0716e7f056579f2349486c570dd4\n7afd499e9b3a2e0c1a90a4432f1af114\n6d32f20579c9f422843ead12644a79bb\n83f9051ae9fb1598cbf5d61bee02065\n6043fcf2ea4aba3a8888e7425bc4b85\n5509f181ac72de8478eec18a8a3356a2\nc43bb99091f5a02cfd60059ad8523f1a\n16296126c5a0b92ea597952f9a39cf73\n96ee3d286bfb909a204812d6a020ec9b\n6ed77417302eb83832a1c3052eaae289\n1441ae85e34e1564ad33b69f9597739\n7d2032e1af7fb191cabc196a7f35f1aa\n682bc1622b438e58dd97e8e261a01f65\n6f98760567bd7f69bd16d4490a10a752\nf9f7fe005455dbec215b8895763d1ff\n8737aff6eced02df3598efd14e493d5\nd4704c12862c808b593ebeeedbff73b\n6f08148e6be15ec812ad7c55c944504a\n279150abc1b0b0b75369e32fb818f337\n92720933afa1dfdcb5c1550bc8448972\n3d297a9092136d914038d588fd1342f\n4d5adaaa9b5d9d42ef188758bf2e3a30\n7140d5cf3fb0c528b43753a53e4593db\nff213b889d304febb6f5fb02f36f9480\nf1e1585a89e6826a1d1a08d58541ab5\n978c47d21e5c66c6f519adc9991b5f11\n4538a9c622fc554dc048a125b47d14c9\n9ecd7b01b9be890d19fb4103277a6b93\n9af15fd5baed25b64b3c42e318f3affc\n1cd54be30a2aa4effe3e4e51c69744ad\n40dccfef363dd1474b3c42e318f3affc\n17bcd5b12b4c3f96d8f5a246b73a66ee\n6226851e0bf7fca877b7247857f4c82f\nbba610163b83053514038d588fd1342f\n526c4f841f777635b5b328c62af5142\n3b72c4223eb452168f5c37fe197319e1\n946ab73b9f05a85ad5b24cafb84903c7\n33ab106bfcc881b14b2bf798c0452b7e\ne80bb04a59bd72691b17743c18fb63dc\nb10f96a79a4fbb039444333dad662f20\nf144cda19f9457fef9b7ca92584b5271\n17fbdd9d8e8b3e8dd2afe8d5254a0d04\na03ca96c53c69c05f8a51dbffe0021e4\n6caf860b216a951edd97e8e261a01f65\n899a328f7c0292c5998b2b87439f61bf\n3477f074d38e57821a61e560ab9e3736\n3420ef8b6b20595e1b7dbdf53d301715\n7882a06b4612d536ae882f622d5cda14\n22ca96b824795ba8ef188758bf2e3a30\n605b9827489d47a14038d588fd1342f\n12766a14eb23967492d9da2668ec34c\nfdfcfc4e9daa45306aea2f18ee404fd5\n8cb3672d113ac9aaef188758bf2e3a30\n86b91784e9f32b8f10edd100dffd8d85\n5f5ccb837124abe11298312f680c9cb8\nadefd541f3b51aba5f5e789acd4d1122\n8ea0e8e7a863b6dab2302e21338c08b\n7d532887fcd3aef82ddd352288e7672d\n3b66e52a5272e0b4851fe006c784eab\n9508699d8e6112cbc6b21d0fcb810056\n430d315cdf5b3ca7963845a6a5eacb6c\nae9d32ee01af191a32dc1e76c3474bc\n37b3c4bd619d1c6541ec70becd1ecc7e\n7e2d1762fba4c38112ad7c55c944504a\nfb88e94765c2b3e9f16b2a6e0465cbb7\n6580148c3214df2395ca4adb70946a21\n388b70afc2bff624fe7ce990d81a91ec\n95c1e7d85da0497fc1a61b0a501d38f\nb567bd1f46bb3b347cf414b698427dbd\n2f85863e90aae79240ef1c8b63a628f9\n945a038c3e0c46ec19fb4103277a6b93\ne5d5c0cfeea2fdd11b17743c18fb63dc\nd65ef2797ae836ca8930422448288ea\n8481271bdd974c424b3c42e318f3affc\n224ccf9ba2b786d953353c404519f02f\nf990194a8401d8de68c2f5eb1dd4dfaa\n371b7d7d2f2d334c574754e046bb9a7d\nfba76a325f400c597178e3cb5f806466\n483518216d58f2581b7dbdf53d301715\nfb859910000d1e219b709c9b379c59d9\n4c395a8a8fb634d5febad4f49b26ec52\n9cf1a9ea641d548a7e1dc33a9d8d260a\n8f05bca2d46582483b28ebac0b25d03d\n469a61462432d5521625c754b61476d2\n6024afce9a12fd87318b348b36fba247\nd1016939207fc52841b7cd2d531f3797\n28ce909659a826d1599dcc439b161a52\n330caf403f42c12ace8417aef1b7a422\n53319f95d4bb6a0beaf288f952624966\n9d1886cd5aebab3019fb4103277a6b93\nb48603e4595bb61ab6f5fb02f36f9480\nc6956d32c9748c746c7c6307622a722f\n373b91686b4ac7859829306a513f9466\n87640cfc9e38bbb3ec563cfb0e79cc4c\n85a8fa447231a4fe2d19175e7d19b7cb\n9b5e8c302f7e6fb4593ebeeedbff73b\n2d4bda48253f35bf52979c729a1f9cc2\n8d0d0661c57bdd09b6cfb56a0ae182ff\n11a47d5cdd42a5104b3c42e318f3affc\n7ddd55ed6481457d4211cc92ec35b195\ne2ea1cd546d6cb4b94db33559ec0df30\ne09afc136efcabd0dbb841c441320b8a\n4b1598dc0e623eaafd86c4a0427c047f\n628d837b3c51f539dd97e8e261a01f65\n35c611ddda81b9941206ff076758ec85\nf4526b250d9ba847a1d83e910853d9db\n86d2aa8a80fd9f38dcdd187a6a5d68ad\n4f0d2de3a60f247662d15c83b2279a53\n515431e0c0854f1cce8417aef1b7a422\n93676b6ecba89ebb38449598167b268b\n4385e447533cac72d1c72b9dec4baa1\n21ff7152b3bd0bc3df63d1c7e43c783f\n4fd35417e08ffd8597e11b0362ef2f51\n4b9c06e04d329213843ead12644a79bb\n929614d79ee9b3f7ba83cc8b3ca4d7c5\nce3055223e53a46e67d4ef1ee6cc8170\n86c169593e5584233af1c639b9b2ebcf\n1cfaa8ba4979b36ea60b4d749290e4f\n11b36d8f9025062513d2510999d0f1d2\n1712200bca469561d20e3ea5765d7edb\nb9faefaee3f409ce2d86e6f67ef12498\nc97af2aa2f9f02be9ecd5a75a29f0715\n42dc453547b31f0b71a782a4379556c7\n824953234ed5ce864d52ab02d0953f29\nf34cda8bde3c79709829306a513f9466\nfe591a1cfbb6219afebad4f49b26ec52\n924339df8bd64d694b3c42e318f3affc\n46f1ec4173d32c0bf1af69e9778c153f\n2835a9015c20d891261770c74651d29a\n3ea28d2184d19410c823a47daff020c5\nc3f48348482f8c5df4ae8c93f4db5e6\n6897c646edcc98c149d579ea0e00a990\n"
  },
  {
    "path": "data/filelists/04379243_test.lst",
    "content": "8343d98e3710f5bee1b32bbe69d5bc15\nb7cead95e18b570d2c97486f63c12d76\n86b48365b2bd587e61830bc1b4d6c5ea\n237e15796ba16d86e1b32bbe69d5bc15\n73ca85d8666e7e26e836e479c0864af1\nbb1aa2cdf216d348e76bc197b3a3ffc0\n92ed9344484dd026dfd21203bf8b4b46\nfa5dce1043f44c06ab88e3acae6e8bc5\n631ab9f813568a602b70eac6546e93fd\n233c497df4d252aea5e91f4d594e20e6\n130d574de3f9d7e4c3bd24f986301745\n46f6cbaf4897aa45aae567e8dbab47de\nfa72e9cf7308066b1c072ac0b83fe07a\nf323d90dea57815e119555fc7462650d\nfb59360b5cfb54ac6f74453f2a3da519\n7c1bcea89b0037a2d67bd369ec608dad\n7cfa4ac4e24cd680c3bd24f986301745\nabbdbed926968014b3c42e318f3affc\n7f71383698c24d4f43dbb6421d614c0d\n7fadae39394c5622c3bd24f986301745\nc5a4cea5107d72f54b3c42e318f3affc\nc8cf1c77bbb79d214719088c8e42c6ab\n7982e2f2984978c6f4b6538438a0b930\n4f2eab1aa639ecdc6b17bdafaf39f370\n5d7631230b4fab707934a0d24a61231\ncf076ced8264a480cce90f0d61ed7a70\ne65066d6b0b83719c3bd24f986301745\n79c5df613523a462d42b9650f19dd425\n159964114c1991b37618b16b281bdf56\nbd25dfa62c3c2cf772bd03149507655d\nad61a5bc7cba29b88cc413950b617e8f\nda0badcc10ee1a4aea966ed2fa6fd5c0\n7610fa5f384cbfe2664b3b9b23ddfcbc\ne153f757330a4ea3cdd1f51ef2b8f2ed\n52896ba4c6c35090d3c1501c166e6b2a\n90d87b4d9a5a1e78f4b6538438a0b930\nba0cfe7ad9775de3276b6f6d90ee3a83\n17e5a64889ca085fa5526f91aecc0c37\n50894123f3f237c161062d371b5548c7\n8256e81768151f74d931803ebb8c8c44\n768cb2332a16fd63855931d119219022\n36e167a2c51751a630bbd4cddd04c77b\n1f3e217cbc871152d7465eca206fda6f\nfb2191ec35ad66da30bbd4cddd04c77b\nbdf7606e8d493149664b3b9b23ddfcbc\nd533837495d31706d4bba81d85a6a53d\n7956ac7aba6295d1c2fd07f66cbad0f7\nfcc387cf43f5c63855931d119219022\n1ca75076bcebfac76c3484ac7eef025f\n176d3994129f9307c3bd24f986301745\n41cdb5b619790d5a74eb542502c2205f\ned320d80089655bedf6cfab91d65bb91\nb2d9065a028e52c7bd1dc9077c6610f5\n5315fe89ddcd618a6b9a552adee29b1f\n70f1b5f74faa9bda664b3b9b23ddfcbc\n7a33f3e6c8a1cd0c9ccce4c6d5bb195f\n656aefa835e5f6624b3c42e318f3affc\n72cfb60a075369ab7252c133a7e17d94\n8b4ec70a3c1283b1fb5f8baea920e189\nacafaecee00323af7ff6ace05b36a5\ne3b7fbed310c2c397c8d78b9aede742\n995f33073ca76ab69856fa70a578baeb\n7bbf01c219dd51fd7d8864caa856253b\n46eb174e4df0f2e53719086e0b4ab8be\nfad9dfcbb4c1755811cdd52f3d07553\n889c9aedc4ba47592fb02b79d375eea5\ncd91028b64fbfac2733464f54a85f798\ne5a84d7ed9a5ce097f4557c0cd5f53a\n203d58d26d1546994b7b33169889d14c\n8594658920d6ea7b23656ce81843\nfead7e0c30a347b1710801cae5dc529\nac6b9f1d494c9a007ff6ace05b36a5\n9c2fb771ec6073b37ff6ace05b36a5\n2e7a728b482bd2d453e946fb2184f0c4\n5243b5491a4f8a16a2b5862518c93\na9b81cb82f73f249f7248d9dbed7a7b8\n211f8bcd0542292a90eb1f8a00f61726\n55d5fce641343449d42b9650f19dd425\n2eb503dde3cc027d86c701087a194026\nf99ebf0f053140525a0e5699b3040a35\ncc554812025dc498e7ed5b5b11f935c9\n2eb4a0d015b80a8d9ccce4c6d5bb195f\n174832b73cd6d91c9856fa70a578baeb\n199881390e6ac3a89ccce4c6d5bb195f\n10bb44a54a12a74e4719088c8e42c6ab\ne28354127815445a83e5416284930195\nfa871f2f88b933cd7a63d8989415726b\n9e5926bfdc7f01749e65a3d2929a9516\n8cb6a2e9ba365c94593ebeeedbff73b\n3cec584145ee513d635418e95eea8a17\n3c4e1361b066ea3b8ca998f0f87d0c84\na38405108fb416d8356ca1f9220b9968\ne1bdefc225831db150fa82c2f036109a\n2406cdcd4c60c84132884c4c87a2e061\nf7ec331aac39a17fb129901f80d24b7b\nf95f6251339b759b30bbd4cddd04c77b\na8a68d6e43cc0e094fde46457697d80\nbbc451f0431c1b06cea52a85deb0c978\nac424c33c6fc302355f46d55537192b6\nbc29a2ba03444764c3bd24f986301745\n40b48121d1879be2ee0605a41c3320d6\n67a49674df5b8a44f51f77a6d7299806\n370b45eeeb9b11416f04d49e4de95b59\na25141a07c77c25467de2aaf749e5256\n1b805da9981a6393f454e62143e2dffc\n8569fbd5e27a1845e7c7bcb951a9c987\na4fcd8afe8b6de585beaf00da5b709c2\n3838913e27df8fe5287005440c82669a\n6d09606aeb54b55659a44e6453790000\n39cf5ae2b497715a84253b2030fab070\ne2e3f057399a2b41276b6f6d90ee3a83\n161be2d2421c18154e61d5e9018b6ba9\n618469f067751604b0b9d11504ae34f\nc3a9dc47c5bf10aac3bd24f986301745\nc7d36b8a4b79f89dc963b248f3fa9d25\nebc82e7df36f6e9a33963916b86d221f\n40b632472f8e69a7664b3b9b23ddfcbc\n531381f5bbc69e485769b3af36a2ff9f\n55457cc3f0e7d0e06bcd32c43682e841\nbb5dbf708d5eb7f82099f9e22ca45b04\n9f1fcee83cacf964f4b6538438a0b930\n8f440a7c0e2af79f3ed0ffd59feeec00\na656b27fafb027dbaab26ebe15e9175a\n5385893962db72324b3c42e318f3affc\ndcda90e411cb4e35506d1e1cc84da713\n7b2af227264af938d42b9650f19dd425\n43321568c4bc0a7cbaf2e78ed413860a\n1028a9cbaa7a333230bbd4cddd04c77b\n5970844b794a55a736d8dd30a594b2af\nedba7eb533ae3578ece232edf44331c7\nbb93a65aa5768c557b9c6deef486a7d8\ne3cf80e575ddbc03d706ecb3379aa341\n83248f27f069f0fc8312881285c04cb3\n3249c3ad90085a9e98d5fc0473d00a1c\nbd7b7927d8e36c38c563fcc2752ece39\nbba5ce8555c8fa89ba18ade30e563d37\nb9e3e65aa754f3b49ccce4c6d5bb195f\n34d82982f75a6249ccce4c6d5bb195f\n904a4c3f1ecef5f852046ee916d15a12\n679d57762f6ae711b282e6ae268fb5a7\n9b8e6eb835f0c8bcf37af16b2893f1d4\n47317755c82114d5c3bd24f986301745\nf4b820ba5a347d939e0a5cd76ae8e45a\nb6884eb4e95d851b5f606243e56be258\n5d3d902051858e56ed1397afd2317e5b\ndb406d9b2a94bce5622d7484764b58f\n452a33df06b678c6822b5ad61b22977a\n68ea1f319a9d724ec3bd24f986301745\nda745fe2b26f5d9b9ccce4c6d5bb195f\ne25fdb977fb867fdc3bd24f986301745\ncd09a9641ea97d873823cce3247aa03b\n223fbcc813831d8c6e526771d2f7444e\n634bcd3197e337aafe4e4de1adda2150\neae36b396f6b5f97664b3b9b23ddfcbc\nfa345f8f107d93b9ba70f71694a4b74c\n5326de43a392840657f40ff86fe708ff\nab2967188299bea54cb0654f4cfa9684\n4c7931492b41f960d50eef20e0914a48\n59a1703cb9320c018f49a52c8d710d0f\n7c46b661b94fdfdd34528a88ad1d85d3\n29d9c6d84c6a126917b431cae0dd70ed\n889f48aa85accd2ee73947fdf756a329\n23acbe1f91d445f91ca1c7e576bee6b9\n2602a7b129a08e42c3bd24f986301745\n9162c1cfbd1e42db9ccce4c6d5bb195f\nda1e75a8647bfd919778416969ddad32\n416f41390bcf0f87a961b86aefe617fd\n490eb3a23cd0ec4e9ccce4c6d5bb195f\n399680cabe38c8e27b3d8399a9d05045\n2182028f013e7eb530bbd4cddd04c77b\nf907cab3a8373d56c3bd24f986301745\n419412b927d11c7d8312881285c04cb3\ncb1cf4ec74b4aae217923568dcd460b1\n38c184010d3dbed1d0c05eb40b42c942\n1bac0eef0193952558df8eeaf3dad1c\n73bbc651e2d6eb22ea65c47b660136e7\n94d6518cf1e00eaac013a7bed5288654\nb70483396e091a75808b6f0b77e3bec3\n2ba8eb5ec0a05694593ebeeedbff73b\n3c9a23693b76e2f8acb16624e184454c\n139e0706288b7ccf1657aaca7aaa9a5c\na83cda80e5c5a0fc3719086e0b4ab8be\n6cb965ebd6fe2e3bd8d12f352b5e1839\n53cdb2389fe5a5e5bc78bb6f3ca89e4c\nf82a5f3c2a57655d825da2b9ec9c8c29\n575fd4acf0112feae2b24d5cb1e4e616\n735acef5841a826b6ae95494c18318\n194b279c7e892a2d15fa8082e5524f79\n1040cd764facf6981190e285a2cbc9c\nbb838e62bfa44f538705931e60ead6a0\n74c3d551e32a1cca664b3b9b23ddfcbc\ne8c01f71fd941af11190e285a2cbc9c\n680d4a8b5a30601a4b3c42e318f3affc\na10ed77ab3a714f43dbb6421d614c0d\nd62417059f78e8e79d2be74cfb51ade1\nf2b3a2f7c9a4ec19436e6787c76ef3f0\n1af5dee23444c104fff16555386d173d\nb8c0ed645cce028b3fa313db82fc9cef\n5292f2930f188e0a7ff6ace05b36a5\n77ecc55547840f06d42b9650f19dd425\n21aaa0dad37443f3720c3a14515ab23\nad86ddf54e0db02c5d91cd746759626c\nfe20b0cb9c6a922d58df8eeaf3dad1c\n8f05326e122a6b973eea2c65c18f73c\n1328dc6429d179d056f6ef8b6ca8f4cc\n72cc0fe296b9172617271868b642acd3\n2766a883126503cac3bd24f986301745\n2a43665ce0526ec3bd24f986301745\n6f2ffe8c014a6a458af30108ea9ccb6c\nb117aac2e13630bb5d23c9bbb429abf9\n3683fdc45dc98b8955d054336de5edb5\nb10d84b3a04085b17618b16b281bdf56\nc0a18b8e41041386e1a698146efec195\n57fbb082f660c4f7716b680dedf77108\nf2a759729bafbe88fef3fa725923b557\nea60054e04139d95b90b5e5b769a3ec0\n3c686ac317c496f9a71c812e027f94d9\n6f88879125d12e03492d9da2668ec34c\n1abfb0c03c81fc2219fb4103277a6b93\n574447022c4473d455f46d55537192b6\n6724ae69c0bde4c09b7dad6c9c46bcf1\nd0b6fa6b908473b05213cec267286d18\n91bf48934d3b52ea36658c6705d0c08\n124cc3b92266c2767156f312cf4e035e\n202e7b5c3ec079e299e8bf807e902261\n827bfeaf1de70f08f7d9678498f2295\ne37262abd76852ac00ee852f6d8aa3c\n388ea3f8ba27da8b777b6246417c94ff\n28ce06aa6f25b39f2d19175e7d19b7cb\ndf5b55da209637624b3c42e318f3affc\n7e3022a7bd00eb4195b8ea6a366e14d\ne9a68d0ad5177d24ba5342d638d0c267\n4309b8cf22f0382917271868b642acd3\nc04b363fd824528bd42b9650f19dd425\n8e7c894039ae2cfe99e8bf807e902261\n90be5de0faef91ef3f7e27638e63d848\nd91619d6c9915368e6c5cd45aa112726\nfd487468f7a33adbb2a155afd9dbbb0a\nc35a14f84985f92a9856fa70a578baeb\n4e928377ae98ed8d99e8bf807e902261\n98b4af37112000d6bbd07219dafd2111\nf6f180c3e72caacb5077539b37310c29\ncc58de930acd321fac242c3aebc81b2f\nb9cdd373211c1d406349f6b5431fb3d1\n61b88b501933ebae8f7068c66465c4d6\nf718cb5d6202341dc183308b9aafe2ca\nc083552372e71f9c7ee217c21e683487\naa54c2e6850253ffe08dd63aa50202d\ndf811f7a858750875634c21965ee6bab\n397c56f15e547fad1bb088904f7cb154\nc31fb1b1dc95160d8f893d87da13e049\n82b69c9b72a5159ce76bc197b3a3ffc0\n3144ba0c286cc61f490ad276cd2af3a4\nd40aa82ee8ef7f674e0fb7a6bbb665d\na45a7ba9a2842a55634c21965ee6bab\necf3cc67ede747adba5342d638d0c267\nbcdf93ab467bd7d84fb315ce917a9ec2\nb2da5c4c116c40a241b160b9adc112fd\n30de7eb171cb381f99e8bf807e902261\nf9597fd50738ba45ba5342d638d0c267\n734c761c6fd2b260b4c161851ed2b4e4\n75b308ba45762ad499e8bf807e902261\nd4fc029d3836221b76e9713f57a5fcb6\nf954f8a605974809dafcfea63f0b694f\neb6ded7c35e0a3f69856fa70a578baeb\n4dae8fbaa2411c5598e0d1738edd4f19\neecddd2b28a9e59866f379f51753f72b\nda23d0bdcd1de093de909714df3390c0\nfa3dcf1562e5f60829e4b5aa807bb4e7\nf96aeb7884a318bee76bc197b3a3ffc0\n42384087aab891baee18bc48b60b36b7\nf621e2ad900ad48535836c728d324152\n3c475d9f0433a7eaad2650d014e970a5\n90c19c729cabdb864b8710a3469971b1\n987b7b49a1435a4b1b17743c18fb63dc\nc5ae96124c15c734e6c5cd45aa112726\nef1e4af0d76ead1afff16555386d173d\nf0d5eefef970fa4b9f2349486c570dd4\n77b83ff0d0eeb34e6349f6b5431fb3d1\n8eb366f4f602219b490ad276cd2af3a4\n87dda49474723fa816a2b5862518c93\n8be0acca4f67e4a4ea966ed2fa6fd5c0\n52eaeaf85846d638e76bc197b3a3ffc0\n594a7dedea7abb21f77e460087130a90\n23d4170c7a0a2a014b3c42e318f3affc\na1446962064bdf3ba5342d638d0c267\n79e3d485572b54bd9f2349486c570dd4\n7b5c5d7e3b9d89b577cf3bb06f394ad\nab8cdc829a360d59339797c21e8801b1\n928ea87878a7bbe26cf876b69450cd4e\nc8ee4a8b703180992985858e6f5832da\na4b2870ce7a54b8eec11c6b035aac769\nf71296c0a7e93ec282db9fca4b68095\n8118d53cd86b7aa6436e6787c76ef3f0\n678f5f5a8c95b0508cbb8bac2032149c\nc91c78e14fccbab316a2b5862518c93\n2e2894138df855b26f88aa1b7f7cc6c6\nce3c408a60cc0e19e6c5cd45aa112726\n125ef28adc874f72934a4834f9d7586\ne13f70868bd5e3a08d9d8badd9c0cbf8\n686a09b1584249ecac3c355a33b4399\n6571fbfba919ac76eca66eeb3eb4982e\n3f0e61a567fe7d366349f6b5431fb3d1\nd19b4bde0766723c9b3bb0ef2a08be04\n6f97636bb2ac5d599856fa70a578baeb\n75f9ad7ded87bffe1bb088904f7cb154\n676d05aaaeecb8a04b3c42e318f3affc\n124583cd4b54d9c01b17743c18fb63dc\nb69d9e876e7a80a29f2349486c570dd4\ncacf61ed869db8e7f84b0be7f50940eb\nc399ed276ed35cb9a6ce08f0d82ba063\n2fca68e0ce294506fe3e90bc90e90c63\n9d90a58677e619f94b8710a3469971b1\n759cb93134fd5efde76bc197b3a3ffc0\nf29863d2fe8863d4195b8ea6a366e14d\n9d8f0444a8c09adff0d4c8f4dd125299\n8b3543f09b36696b488017d48a7f7eb4\n1a00aa6b75362cc5b324368d54a7416f\n4bac1dcc5b39f3d1a4328b1daf5160d6\n335bf5e7f636ea198be1375d26d1cb89\n25bcea593e4314c3436e6787c76ef3f0\n5e409a2627f7cd7d63ecd64ef0e6814c\nfe7dd4f6b988123bd810b14a81e12eca\ne6ee101d3cb13bdd16a2b5862518c93\n72a697466cab7851f51f77a6d7299806\n1fc4b8f3fdbb5cca12464df1bb7d5f0b\nc0fb01629cdba5ade6c5cd45aa112726\n9012c6ca245c1bf4e6c5cd45aa112726\n8f8954e310eb265bd42b9650f19dd425\naf953537017f49351e3178ebc750d175\n497659c4723fbc4fe90ff84c89de437\n571c9ffa865fa70d2dff41777eb31a7\n7370a18bebe67690664b3b9b23ddfcbc\n98e8e686225b86aedb7603860ca917fe\n72c884f3b9b9119966f379f51753f72b\n24b563bccb68e78bf939d21e50c410\n6cae7a045734cfcecf03af5e7a1277b\n5516cbfe2ae44c0a7062f2d72cde5c95\n84a3c87bba5a472af51f77a6d7299806\n8e3fc5f1f8e9658ce8b2b8dc0c816caf\na1419b0cf5fd0c2c47fe5b27e60471f\na4d149a48607de3d92f4c88fd91c6b1b\n82e5309809e455d5f15fed2243deb166\n2ca883ba6a9dc6f68985be89a0ee21a\nf831f836f6468b28bebbd6eb70ab85c0\n5f226992dc83d5ead42b9650f19dd425\n4e87db85d5dab96822339a4b4aacca6b\n906eed2a218acb42699c80a6f97edc9f\ndebd06d3176a5b728cbb8bac2032149c\n425ccd56a558a719754784b56fb4c23b\nb87594dec9d851c035836c728d324152\n724b8cfc8c4b8e16300009db8b7749e9\n48273349239e81b64b3c42e318f3affc\n995e0edbe7bbfbe0659dda512294c744\n9d5718ed61c116ae4b3c42e318f3affc\nc8dd6d63b6d82f8399e8bf807e902261\n384dc1f8ec0a0cc2ce152ffe2d789882\n93cdfd14889492dd91a4fd87fee47737\nf7600660924857c0d31d0d81bfe9c743\n884d2cc0d3aa8a72640e544a5d67c33a\n6f957742745697cbceddef1607dd507\n81db02f2b3686761f51f77a6d7299806\n68e8c6def7cd57053e946fb2184f0c4\neb363770ee36b0309a79b01b89f55c86\na78273aa10b2dfb0bc8d334f99e7f52\n527445c0b9cf1cda27f5c3f15a1b92ff\n3c4786ea0997d6bbc0f947750540fb22\n93aafe1aee82e2fadafcfea63f0b694f\ndec59b04dd663d5965bc5e8933ad03bf\n4b35aeb6ad7a0370f51945de050323d3\n5adf5a7173e588ad76e9713f57a5fcb6\n39bb09201e0cd201c17e7f250c5222bd\nb2b57e89a036970d22e5ecbe03e765d\n2ef012ddcf1cca54f51f77a6d7299806\n3d8616a9aa4a8c87cba9038a9140d5df\n5d63f11757a433b914038d588fd1342f\n1a767b8130e8a5722a7d46e74f08da70\n143e612ff081f2fc3dd0bb3e608c7548\na7164d4766ff0e1b4ff124faf2d8d947\nf8f8ff7d9cfdd395765b19233e844344\n4cdfd605352adcb0da13974b3533fb59\n9dd5b7e6f90ee322b56d92c5d7b06038\n8d07df2bf706cda58c5591114064d173\n7f28dee9ae1a39f1700e86b51ee00536\n91919e69d7aec2b740dc81e448174af5\n8b5c74d6fc057bb24789ee5c8d247b09\n6fa34794adb6acde24dca86ff4e91ac2\n33b727a7c5e984bd377c09d18bd75e8a\ndcf1095b329396b3a193550461f84122\n7dfa5642ccc2b8fe5e2a5c16927ff414\n4d8abcddafc52ccc95e7043c2fdf14cf\nc3c635d741fab1615f0b5ee0fb357b4c\na83bee7cfe190a1dc26fa198e521610a\n838b05234e648ae5db4c5469c0c1ba80\n7b411de42d4960eb6e25f3efedf6785f\n1ad672c0a138f8ffe286a7dded929c2a\n564b7a755e3003da64fad3c7b88e6060\nc1df09878a7a4a81190e285a2cbc9c\n1e5f3bc86bddd77f700e86b51ee00536\n18fa0155b4fd12f9a829287b9dedcaa7\n2d468e75b3063c165dca6305fb9f97ca\nccc1fcdb8b104c97700e86b51ee00536\na224010a537bc683104e417f71823787\n78218e7cf3b5f6026e24b3256330e605\n3ce930bb150aef8a69fb38085fbc320c\ne241cba189154397718664fe76a3c7a0\n9391dcc782fa7f6bfdad344760a9dafd\n18be1556eb4da5af7ccf848ce05c84be\n3ac209693a4e89c4a4b99739648f763\n4d873bf1a658dcd523eb3ad3d378722a\n5d53ed3005f4dc6856786b90799c4fdb\ndb5a895ae7358c97b66213207f46bee7\nf5a42533b878229d942b01e78b9a302d\n4dfa73e922842c02a7e7cb173e141227\n8da6fc70195d2b4029820ac1e8a0acf2\n780479255b0af544ef56e80181daf078\nfe99a1127734f7852b70eac6546e93fd\n40dac9b7b00849366bd83cbbbf17afb6\n47164255adb1efd5fc54b7f07479f415\n495db04c204196ec47c638c0eee4a2b3\n5129899201421fe84a873bbe35452b88\n81bfbd041dfdb827c08b855dcc4d6f49\ne2930bd9b16db2a80d6227ff9b21190\nf3fd419f725aa894ba5342d638d0c267\nb685208ccf38786a6f1e07a56c129dfc\nfc51355d4d03ff4ae6c5cd45aa112726\nc9ad84452fe0ece05ab833c88a8efb15\n5740806aae21635034943af333340cd2\n4cab7b493f8f404694ed13cc64e8d835\n5f8bb62eec8f6f49616fb9ab42452112\n75c5b314933c8bccea896321ee86caf3\n878872e3494e6b26baa48d60edc63ba4\ne62c51fc96e9394a647d4fd8d921152a\ncd895c35fff495cdd0b93fa304cfa755\n6daca3df48c0e8491cfe337d09cb7c35\nece476ee957a099f5c5fd2c2f381b61\n51d196f6b12a84ddac594abb03ff6297\ndc537055864526217d970cb50eca3a9c\n9a0f67133d4757964ef2fc89218529a9\nd826633e8f45cddbc22013ebab50762\n268e68f1819a225c1b4b790955c17432\nfed49ae8578b251d9e5f3db95fcbc5c7\n74c14e9a4ac91242388406859b1b0545\ne56196f67d724cb892f4c88fd91c6b1b\n2444551d00693a0fab610b0c94236463\n4a3641784a9ecca04fa8d6439169bda4\nffa71bb0a75ebd7f93ad7cfe5cf8e21f\nd2b0fe8551e6e3b0ab610b0c94236463\n719d38e7ec228bc9ad329b1997e89fc7\n9dd63148e5b0a4f79eaa55bb236fb6e1\n7f827b92453712f3504af6e1321617aa\n9c12baa3337390578592b396b177b348\nbcfda4ca76d65ca8d4eb6d6477feba27\nacfadff8f5ab4e7880d6227ff9b21190\n828aef6559b4e1b8a9f015dc2ef2c415\n146ecd9d7712eb81e6c5cd45aa112726\n5aadc1a9220fdbb8349f14616fb49d0a\n9a71b92445cd3f023a9bc242c86fb7a0\n279c8601278e827dab610b0c94236463\n74fe5611d491a2b77b286d3c174c2040\n2b564ff0989caf58ab610b0c94236463\n81a84fcb2b247a3348eaa510713cb074\na1896691fe875eccb9968f25875bdef4\n6d580c3fb8702ceaa864ae08f4e79056\nda96905b5b3c821c8cbb8bac2032149c\nd67a0b5dfecb565f2197da8dec8488d\nd81388de1add33d8e41c171730c26c4e\n3ec4be6e96bfc2512b5fb024f65f6da\n9afaf5ab87a889f67acae9ce58893de5\nbabb0963a0e17bb59cd0aef0207ac8c6\nf0d8620b49ea76db83130614d8020b3\n70cfb2647d8246971c81cfce8a9fa8b\n408b03db5a9972cac3bd24f986301745\ne6bc7735ed67822e60a09749bdad79a6\n26b2a15646f6a3a06f1e07a56c129dfc\n216da8313bc7b192ab610b0c94236463\nf58e58ad9952e174d058858de40fec33\ncf1a7653c10aaa0eab610b0c94236463\na465210c23b0136d7afee304cce81d6f\ndd24fcb1ceb67ded3d937a346d1565b\n2f9f15a48b674ea25c87325f4fc53794\nddc404bc12e45dbfb4e3935c6cee4b35\n8dd8370dcaa8d770ea5682a3b818969a\n2ad1a20d43c6106f71b1188ea929234b\nbc842e548e68a3cbb48513409ae7c51d\n2a0f853dadd841f96f1e07a56c129dfc\n6b43cb708670013d2a475baffed905d\n613c706879ee39c9132c018af3949fe\n4ced745f960f7439b91767277279ac70\nd1efb527d5cc9f98c1dea9c21912d169\nd78c722ea1a1b2d4df253edc1fde0322\n6bc7148a5138aa6765eacc25f128a1c5\n1bce2f4937d36446a32c566d71fa585c\n8bfacae2de0067cfbfd72d7396bc040a\n12e2dcbdc199f0ef8fbd401ebc04b5b4\n5b9a7b7952996844d802aa676be38da2\nbdf183022c888426fdda2d9537f811d4\n1b273f4af777469e42fd31df8966a338\n20f561347df7703c9c9e05c155b1837a\na882ada8bc14e42080d6227ff9b21190\n53ac82e4ef6af3da9a5ac88c7195fa36\n1539b9a05dd82a3b23adfb9fc6ab1f7a\n25672204a764515578439215682e01f6\nfb89493e6389039527d4fc401a34f3de\na05c04a3cad42012fc7ff8f848d1c6c9\n337479a0afb08dc91933ffef19678834\n854b885039dd51e7ba57e2d7b7436136\nf5f5caaa07335f4e5c3654528317cdb2\nf2bca089598c94f71d246659f49791a1\n2bd90eb4b9aaff9af84b0be7f50940eb\n13c51c08c3695a09eda47978b73f5994\n67b9c88c4f75cd1e886a7d82f0a2cb9\na5cbc0a86cdd01bd348f8ec207893cce\n72a4fae0f304519dd8e0cfcf62e3e594\n3c275368d3e30e775517495984cceec\n7105bd044f464358beedb4c8fd29e2d1\n6110d87def4fa88c154c6bbaeb7d331f\n9a5cb4122d518111b339f790b1757e92\n4ce0cbd82a8f86a71dffa0a43719d0b5\n75b0a926c795a110dd965e6a8387505b\nf875ff7c72fdada820768660cf080d12\n4739bfb9ab23e4b92a87c4cb5e925da5\nbac09b6764c6c6b9f4144767ba2e06d7\nf5af26e3cc266932ea88b65c86e82a10\n21ca4d36a0f6fa69b937d98d58545fa\nc74bad51457fb0faa0ab1d82ef09f78f\ncdd6c99231cca3c65b187a2f89229cea\nec9861c234daf6bc915f51b5f5e95ffa\n28f3844a7a3d37399c0ca344f487323e\ncfd7e354a5ae982aa0ab1d82ef09f78f\n527b2d1e964f056383be1aa5a5ab0c80\n2943ee99465c7adf30bbd4cddd04c77b\nae9e04d050f5cba1492d9da2668ec34c\na95df9c4372e860c73eb02f1d995d891\ncec8fab8ad62fe3840f3ac0af6b7e700\n4e9a4060a7fb0dd230bbd4cddd04c77b\nb158eeea059f2c7484edd435e02f1ecb\nec1c92efffb9ee78beedb4c8fd29e2d1\n894e095c7036c8411933ffef19678834\n8d0d7787f4babee7e66285d36ebb986\n1834fac2f46a26f91933ffef19678834\ne3cc0b06be2c972cab610b0c94236463\nbfd32cdb923c8430e260ed121aebe3d6\nb4cc6b735f911fefcfff181817262617\nc667df83b0e77f96770db120e736ddf\nfadf4f0b608be6272648eaf710bc2c44\nea3bcd9e6c4205031964126395b17c2a\naaaba1bbe037d3b1e406974af41e8842\n613888be9e80b92fda684e203423d5f5\nc0b74c61865b563067dc358060e3c47b\n2e0a8f727d87045818e800f0d88f9019\nbb41a57386b1594c218a519212ed7c98\n99ebb9278165f04f72559100997b742e\n80f986ae572fce791429f9a19502375a\n3bc7c7450991737c36b0f2a1430e993a\n3f843409e853828803734eb00d01e20\n1908f2afe36335ebd97122acd7517380\nc1c81b60f786873262379fe9a26f5cb9\nf643a64a4e38723f73c478529c40c4e6\n4dd2d2ada39e32d15f522d72d0dd08cc\nd151d9f45d8b14536cd661fb5fd95741\n383c5e64f539b2852f852bdd38b1133b\nea3ecd082151c2137ff6ace05b36a5\nf5f7ce79ef61e0ff3f0ee3307f850b4c\nca13cadaeff93c58ad0e9e0d146abe05\nd40fb361cf8aa18767dc358060e3c47b\nfbdf9bffeb353474c3a767747b75e56\n89b478643e53d3d6285c99063fc6fcf8\n6ce30b0327db26f340b4c5428883e585\neb9b9b8d186a974a7afee304cce81d6f\n222c56ff9cddbaf4139eb23f7c8036f\naed5697ff59e3d3035478a6869a3602d\nc24b7a315dbf2f3178ab7c8b395efbfe\n35cfc39065c4073f4b8710a3469971b1\ncb87512d706828e1e95cd0dc8c2f0e83\n1f7e4805b267e71f21da01c0bdc324b2\n7c15998c0d653821ab610b0c94236463\nd01a6b35a54c8f77dd986a55e273fa14\na364b8af9a8d28acdaf1a853214fa9f\n711d3e719d7655adb8183a4a81361b94\n98578539ae351bc3876b50fc31ccedf9\n3c7cf00cd78adaef4b3c42e318f3affc\n809af89dca17068ea0ab1d82ef09f78f\nef4fa923a1c2a3215f25c76975ee64\n81eea4f86f308c6a589aae130c1f06fb\n6e0fed54fcae8a62edccc47bf0dcf5d3\nc5087fce38b009ae30bbd4cddd04c77b\nf597ff7f743d99a3550660cda66234fd\n9af7a071bbd432baa5526f91aecc0c37\nedbff6864a97cd6aa1b5ceeca96f6fbc\nc50794596b14605421c4aa1c0e1daae3\n9f4eb0d734a2b7a4ab610b0c94236463\ncaf7f51add1284ab7ae016d7bb06fd0d\n13782b95eeefcedacf004563556ddb36\n5bce0f5c92198217aace21c72a80029c\nb896a4afaa13fec7e90f16feb54700fa\n7b3dfbd70333485d219a1300d9489f4e\n89fe1ff1b8de298752e8ff799642884c\nff58a52586bb1f692c95f6d76cb3094c\n5bd924058c668abc269aba35b84eb82a\na0d2754011acdcc9d8a0e410093d6619\n8ce70dead5119191cc3492a06e9bd850\nf695567555986b6a71f08386b3af436f\nc6575b4c39a341c698d5fc0473d00a1c\nd126210a20db32c23027f298c7ea0c6f\n67e32538a35a5011a0ab1d82ef09f78f\n575e42b02249f2b3b87a068961a20739\n949c26cd898da9855c5e8df5dc8d3d85\nb0e3b90a33ced56e2029d06c0cadaf74\n3a52892dc6c06efeb2403dba7fd079eb\neb31e5efeb810c5280d6227ff9b21190\n9be565678aab11cba0ab1d82ef09f78f\nf2743fb608c502abfffc97a61124b1a9\n4d2f7c689e77df6b6dc1766995c17a41\n249de04d8d7e4061cb9cf5f7d536cddb\nc3023187d59aeb87a731e84e842dd6b1\n39f6dc2839dc4e1bbab624e35355496d\n333002057d45adfa7cc56a6af4771185\nf0abcd11d8987f7fbeedb4c8fd29e2d1\nf1324b15b7cc9cd48e689df3ea785530\n2dedcb98bb6e9375aa2e219918fb41bc\nab9bafe307e11e7a2b8a1a2aaa466160\n3b51d76c7770b81a3c6c6fc37120868d\nf8c0c4f713f0c136e9048ab4301b0c63\n4ebcc39496c64f0a50566f53e37b2171\n7062f5b229674ab7b0b54dd2cf2a35d4\n3712e31c61ea51a354b250a5bdfb0136\n5e4351c4525fae6d6fa63795f94c4d8c\n7b5b7bfa8580e913e2580b23e60e4674\n88e06a85e2a0f99fa7e7cb173e141227\ne460f8b0797b44b06a20dcde106482d4\na0b11917da240c98391e4d6c585a697a\n20292fba71362950c59c53f7df509858\n467e71e8e546721e1aa023603cb7e1bd\ne428b7d6634444a910bed4209a0dd8ed\n50d8dde1973aa467427adc6587850b2e\n6fb52c296531dc17beedb4c8fd29e2d1\nca4ce5ea2835b9d71e9c9b11de2def7\nf61d6422de7447bc4c772d26a83f790c\n1c8121e1ad6cd6fc7a480f3f1d55ed3f\nb658e507c84d6202610c2a68437007d6\n9b86da62c360aa0d824080f516909671\na2781622b5941ff2a886fe6408aa7382\n8cebe5dcfa2b907f47c638c0eee4a2b3\nd481ee7e971849339db8ad97fd392b59\na5230f3ef20e6d460a7085510f65cd6\nd9b418e6ec14dbf50efffb055ed6bd1\na2cf3d4375a5c6a65dea31ce253437e6\n9c12fada31224bdf58c4e7e56d799d97\n589f5927d37247564fad3c7b88e6060\n96edd3d807d2b1c7d1869c3a235ed163\n241ea467140a03a1e015e8084a32eed1\n3cebd4314f773f8ccb9cf5f7d536cddb\n169a72252808f9d12a7ec74a9a907cb3\nf4e0c7b0e402ac86e5a953fde71681c\n2f106667589a6cedc36874c8749f7812\na8473c68f6a6f9ad7a1efe7ddaf6952d\n77e03976667383c3d810b14a81e12eca\nd477a17223129fec53227dcd0d547ba6\ne18b448f7e5f6ecc1baf720a45fc5c38\n56b7150b4fccf41355f46d55537192b6\n97661c4a58929ff2d9886e45007f4f88\ned0be8928caab4bdab610b0c94236463\n49ad167497a2af8c9672e39f89e4622e\ncf046edeff204b81cdf7280ff8af6720\n1581d2682187764730bbd4cddd04c77b\ncfeb699abe1b76c9964afc371e247bd5\n2eecafccfce0a14546407779dbd69b2d\n297778bf1a3f8db5cea003eff0268278\ned73c41dcfe9170119cc3eaf35cd388f\n4cd119aa7b11f3f54b3c42e318f3affc\n657aad273d665f5dd9823f45c4411583\na7ab2b8bbe94bc89b41f4c6c5919541\n91569ca6f0578ea9ca2ed12df13a916a\n5b5532f71d63a7a772051d450c32f58a\nf7ced3de6f4c1ffb4e3935c6cee4b35\n684ccc0f629ee45cab610b0c94236463\na422fe1fc47fd85d59a230640e61666e\n7205a833bced185c41bad6f6f893aff7\n747dd84010a0c34d78c3eead10f81a63\n2aa624d7f91a5c16193d9e76bb15876\nfa7a5f65c561d9d2fc43dee2a1d6272c\n607f9e630d94edff9292bdf65b24b621\n2700f6693447c32d66c64744a4252d3\n21a807616afa7c6030bbd4cddd04c77b\nd5d1e750bb492dd5391e4d6c585a697a\n30dd74f09af6b1c2fe5c8ffd0f5eba47\n88b227c5fb3906ce47c638c0eee4a2b3\ne58e958428584b2b79972b30518c97e2\n1a153612bcdab3e23cc149415a408229\n1abed35643d34f60afed86cbd9fd5335\nfb1b4b6d51cbe29967d783b4714d4324\nf98b9036a56fae4626da964cc0cf44a4\ndebd11754f993031eef3a45c2f31a227\n77f6685f2df21522bc31aa2bac13542b\n2ad85522947a9cf5f4ab13f4b49ac318\neb773e1b74c883a070d809fda3b93e7b\n7d14ae7d0b7338bda0ab1d82ef09f78f\n1b84ce3667a99f1d30bbd4cddd04c77b\n2ab79a94145330a95ca21a5844017a0f\nc1660471a22c98a9c7cdfa94351d0f74\n5d93e285b2006520ab610b0c94236463\n87accfd64238d29845511d16be3037f3\n56188419e8052c0b36b0f2a1430e993a\n62ca9722d848d0d17f74248f969ff9e9\n2ec254595840417424754d384796666\nd1cf31acd02985bb50efffb055ed6bd1\n20cc098043235921d0efcca115b32b84\n83e669596e491dfe20070923ea969bd1\nc6c412c771ab0ae015a34fa27bdf3d03\n3a651c78081152e77bb4e437e41d3c3f\nc477235c02413bfc44d2ca62bee212a0\n3c04f4e0d183976a7e7cb173e141227\nc5283929da8665cdcb9cf5f7d536cddb\n874d1890f62375ea30bbd4cddd04c77b\n20ca7b1864d7badc75bff8d65bb29152\na42ad074c9b1bf2467dc358060e3c47b\nf02907c5c42e1e766f1e07a56c129dfc\nc7ff0afab4b7885a52160ba64fb535b2\nfe2f2b120d84ed909b896cf832106977\n672af8a6cb34e00678a875f897a47818\naecdd6e67c790959504af6e1321617aa\n83fa3b7b8c9d388144f6e9c2368992d3\nc728329a22124fa7e8dd400ae08fade4\nbe1a98a8e06c59311556e8f97439a098\n3b0c62bde7b24de85ce578b5b4bfae3c\n54efc0d108cce07ee166717db5dd896a\nbce2998e60345f86ab610b0c94236463\n6ab7ebf9b94176456f1e07a56c129dfc\ndd7e82f0ccddf0cdea3769fcd5f96f4\n5d9f67dc1f1518b6d5f8f84e75452c7\n6d4128ab108730f1ab610b0c94236463\n4e03170994b4347e6f1e07a56c129dfc\n4b237530ff7c8c064b2ec20c30ace65f\n16ecdb0dcbd419ce30bbd4cddd04c77b\n15c833aeea88fb19f428c5b66db689e3\nb48d04600e7cf2bebeedb4c8fd29e2d1\n5cf6612712d8ad26c5c86021644af7b5\ncf24f0128755080569080f7eaa8f3e1d\nad63116007d98a6d19758238d4c7aff2\ne4947c9bc17eed10e54cb890e8682c84\n47e7fbbce59804cd30bbd4cddd04c77b\nf30419ee8ff3edeaae04ebd863e388a1\n6c4c1465fe472cfd93ed8929b636c206\nb7fa4e123bcf7457ab610b0c94236463\n4afa7cb9a042b7e3c4f66791e25960f\ndaa9e908b5aafc2fcce90f0d61ed7a70\n41b492376a6774f9cdaf1a853214fa9f\nfc42d63af681a927e14dcb97ba059872\n9e3f1901ea14aca753315facdf531a34\n875f7a7c2d69b01a30bbd4cddd04c77b\n40d0dd3fe786e120d75c27ddd792e41a\n114377fc17eceaae3e12d7ebda60f8f\nec81c49ee12e8a70fd06de9ba37d44bd\n63d1427d86f62c45ecc46197d5349c6e\n5334d237bafced4c3719086e0b4ab8be\na04a7efb21f799f4c8bec3671aea0fa5\n59f04ddbd896f4f5430644dfe647c381\ned9dc0937009dc031311158f08f2982a\n7b92f6facc2a27bc84cc0348a73b80c3\n89cc879f005dcf50f1f50f6a678fb494\n1a6d43aa7b5c4e1d1c6a34a68ab9e1d4\nd2f811bc37858425a63ceecddc308b25\n1b5e501a28921c43d46cc1240811b39d\n8ea7ca2c8b48eb68ab610b0c94236463\na4af8f822fa8d95456c08464b83f209e\nadf574f947f00bdd548b2639ebc3e759\n7e1f5ec947e7587e391e4d6c585a697a\n8807a8fdc7a08a0fb664d1885442ba70\nec68e1edbb7e9bc7e93cebb6ba9ca43e\nf7d17f8d80fd2eaaa62ee5d388bdaf2f\n63b6ffe53e027e83aa49ce7283f547d9\n59d780e98c0c3a6f41c78a933c3b0bad\n29f110b8740bd8068c427edcde5d5e2b\n23a4fc50f123d8801ec48bc3c478566d\ne38b1f4d210fb038c97f93e2910df644\neb6f0eab4203ca0e1c19e7863a1c200b\nf864677894410315ab610b0c94236463\nd57bb12175463d188aeaff3bff7f4413\ndb64db160fd13a514e1a714ee619465a\n1264d88ae599df3fbeedb4c8fd29e2d1\n90cd1d5e2f33888ebe9fa30bb5c5d8b5\n7327bdbb165b8d034761d0d07b9cb991\na39677e069564a7ea7e7cb173e141227\na5634b2fbad2b88d5d14030c75181478\n92499724962a368d53743fbb4759270c\na1593fbe3a78c7858795000a72749c36\n59fe91d51febd1f3c83a073fb943e852\n4beaa698e6a7721279a2553310841ae9\n11084af510183635ee56c4ac0904ebb\n4768cfe825063ef930c15a57aa97b3c6\nd9ce0b512e0420f8be95ff480950e9ef\n7d1fb46a27bd93252c4683dd00deec1\n63b53646b3562677d395837145ded71\n994f6d12ab22d187c03d8b4214ec06e9\n596f93940a4d97866c752a9b08e87ad3\nb7821e69687d767aab610b0c94236463\n8e5c3b7366f2f017b4e3935c6cee4b35\n1955e341a77661a749684afbca35f3c6\n12df5c215f4364b7fe388cf6c4c3705d\na4dfdf3529355cd934fbd63590727729\n34121f5cc12135148c1cf3f7d7f0373\nddc91eea0d38268d616fb9ab42452112\nc621493100ff715f80d6227ff9b21190\nd0ef9d431a16e70de6c5cd45aa112726\ncd106955d3bdf8e751c4deb11af7079e\nb4ef1de99422b08768661782af60b711\n9a8852ff4b82a1585d624cfcd9a37a7\need2efed8f2d5604a0ab1d82ef09f78f\nb08310a1d75702eda09ce9c1262c7237\n8f841c9a11ad77a6794a9f593d938882\n6365205d2324234fc8a1efeb4b91d393\n982e83068fcf2f26a0b169584d4ab1c8\n1f067718ea071a4ec804f0ac5b784b6b\n4be0f809a66f1797ad9d8182e90fd7fb\n5b546ef5de5d10f3ecc9201d3d846bc1\nd198fccb12ad508a3c97cc6789da1c31\n8ac2feef21274a23f45db6a75d78cb47\n10733a711fe254965d7786e1df78254f\n12567fb8261120cf63a97d76062d3220\nfd1cb59eda441efc3a6294a7f35b35be\nf6474c0704d2198278696f3c9c5b8290\n7b8c92d0202211d53d098fcb46b95c\nc172807c444475ccab610b0c94236463\ndca821b9d2fed090f51f77a6d7299806\n7dea64a734cc77e6fc5030c2f25772b\ndc68436ab1a576f6573d2c9ac4b23fdf\n9c4dfafdbd7f9b76c955e5ed03ef3a2f\nb444c5e5488806439b9e80c00bcf83a0\n61198aa59e0aa31764d8b0368afacc65\n82e4990a3a9290f33ffd3a8003988fa3\n13f2a907f3ac7dfc9b8e42d3eb7abddb\n2d466533183daaf027cdc3d721fe0086\nb515a107aa3a3fd0e3dff0d5ebb43915\naa3a0c759428a9eaa5199c5eb7fa3865\n2583fa4932ddfe741ec48bc3c478566d\n1a8fe5baa2d4b5f7ee84261b3d20656\nd291243cfb51ea7dcb25d116843b43a4\nf8e3ed6b09b50d1d7f890f73fae19325\n801616c42a468c298fb2b3b07693a96e\n5e84051a6a839c24b577ea930304326\n8ee93ff23d882efef3eaa8afef8adb8d\n400393a56fc243c442c39a4fb8d01418\n6a5ff41fa5aaadf84c29eddba1f2e390\n8c5f1bf61d4c1d55b65938a95e1f893d\n6862bebc1f59a5caac7bed72580dc30f\nf39e46c8468ba7f07ba6f8f10959534c\ne2571e4eba2d9f5eab610b0c94236463\n82e1c0b874b0a9e035cd53a06b1d2317\n9afa121e3aec8bd7c387f328a37d8ece\n7d0b868cce75a059a0ab1d82ef09f78f\na1f130e921df44b037135011237cc916\nb26f4075b45a3a473c75ff89cc8b70a1\n5dd9ef055fe3582687ccf9baec60b534\nab10c2ec41e0e7f1391e4d6c585a697a\n5a09bc1430a2918d1f191e8de8001d7d\nf6497e9f02f50c98c065481f0c2ebbca\n3ed500a12dfa511ba6040757a0125a99\n9d7a8d4c013bdc8321cf7471b191cb89\n2c0ade2de5ed1ad66df14337f24e49f4\n30c9865cfc4294a7ad16260d4d73b56\n7a0b6685a30298fb8ae8d7de284e7d2\na2554ec7e2331a8fab610b0c94236463\nd760cfad1855ef2d35f7fdc3c0cd22fe\n509d9d137fd7465a85c5f690e9252fc5\n8574daf4d23e75da042d36b1c1b84\nf563e9cd92a0dbe5a07b1c1d0ca9cf45\n167559b98bf6139712d9440c7a73ec3c\n21cdc417e398378e40f3ac0af6b7e700\ned289e72b00480521fac473c90dd4a\n2edf007c0f4542554fa8d6439169bda4\n821e6d43a82eadfe8818864c19a17b87\n6a35640c7f10aa71850622797c13f562\nc05033de978da9dd5de04aad18bd94c3\n7fda06ada2d897baadab4c26397edfab\n70a2420bdd77d414820ad1ca4d3c95d5\n99720647e210078beaf288f952624966\n5a7039feb89ab32f5e6d4b8e7c0423c1\n58475b1b20ece0c5eeb8d422649e5f2b\n4b11be42b0c0482dd94faaee2b20e2bf\nf977ba3ec46bf1c064a940596f3d867b\nbb521fb4f1ec77a0ebf17edfda20712b\na0445e4888d56666b9d7c2fc41e80228\nd0220473a40678ad137619fe8083152c\ne2cc21f9d13d06e6a0ab1d82ef09f78f\ne22b23cbdaa1e259e8a94a8468340ce7\n3b8d176f94c0617867dc358060e3c47b\n7f6ddb13d3b8c07c1c19e7863a1c200b\nf3b8c91c5dd1cb6b8722573b29f0d6d8\n86bf47a73d93b66ecd037ccdf14d7446\n9472c006a5d35b9ab606ece4189242ff\n1804dd6f5c827c1a4bf8d5f43e57b138\n7a7590d19cf8274dab610b0c94236463\nf5d9f518e284989cf930da774352b970\n8ad88ee4442fd0fd8a6ba7ebad3985bb\n94f83fc24106e39f782f27684f3b650c\n7e6fea75f410181855f9913e822d5318\nce422cb06b1f372c561f802d2e81cd69\n7988dedacce42552ab610b0c94236463\ne0ea31b7fc2626ccab610b0c94236463\ne71012d27b3b3eec67142c6ea337b7b8\n963f0a74420659066c09be1a24173c83\n5d30db5c8d27e120a653489f44e1bf89\nfff492e352c8cb336240c88cd4684446\n72e0f3f2f8f8fcf12f788f981151c5d5\n5040f8f3e2293db448e116352760c52d\ndf7761a3b4ac638c9eaceb124b71b7be\n9a6ab25d91c92a5a35acfdef2ece21c0\n73ace155e7a4b1989d24dba534412246\nf5d87f88bd9b31ad2f0ebd444c10bd0c\n14be1ed92182d2da722332c7d77935ea\nf5ad10e6a938aa80e85c7a030ebdf69a\nfed1a75cf5c1ce38dee1e85d063fe6b\nf726fcaa1d031391b2a0fa0a5d25776d\n2acce0e402725f80ece694d60a812f12\nde46aee11f397e1c5af597c14b093f6\nb62d45745434ac46c4cfe384be4426c3\n941c65a25cef70c184edd435e02f1ecb\n1eab315da8b2588d285aa2b556211c86\na2baf45f001e118e2c79f7f31759bfa7\n201c3e44a5967cd030bbd4cddd04c77b\ncbd1cd9b5423f890beedb4c8fd29e2d1\n8ac4d93e65b9d58d9b937d98d58545fa\n3c34a433ab1dd3e2f657e3152307ea2a\n4302fa68485f0734776f723457d34a2e\n16e874e6165e836b30bbd4cddd04c77b\nc472e242175ecc75dea0c7d7198f1b0c\n4b2119939de4f6e892cc1f9d231c0f76\nba2f81e15029a37baf7caa8fd318856\nec356bd4c5cea755748e58db1ff83cee\nd187561a6b0cbd0acaed5ce7390f30b7\n1de679dd26d8c69cae44c65a6d0f0732\n1a35db5eb4f931a3eba0693b2c2a423b\naad7eaccc93471d6ab610b0c94236463\nacf4b272c86a011fa0ab1d82ef09f78f\nfe22668b577f0cbe88e99eda7bb1ee8e\n2e3ff4aad6da120784a05e54516915de\n3fb5033b5ddaaf365f7afad12924b3b5\n8cc8485f249a37f595b25bd3accf45b5\n9f321f05a7808719ab610b0c94236463\nd4937d73a4602e66d9a65329a03d80e5\n627248fa64c1db5fab610b0c94236463\nefbf0d75648b7c7d5792b99b8245d225\n3ba656a9bbc2a38ba22a3fbee2fd609e\n33b9bc49338800e87dd2ad68f72eb830\n6af9a593129b028eb67e68783d58425a\ne2d5de278cfff9cb55388518b8ef9c17\n1a53d35ef172a6febbaf0ab08a397b2\ne435c1e3430eb7b253fa79783efbc3bf\ne7b99aea5bbb980ad617d95dfd4d6158\n2b1684e4cb37d9e8ab541fe336214393\n8f1efc5edaf6d44a8e6d6e67bd4767b\n51c6a7298408c3f19730cb37c9a5f63b\n2ab09f4db5f5e842bf595b60a303303\n5e0ef66271f36ba862feaf6b02ccee1c\ne36e90c1db6bf1d5470412e9b69c8933\n43fcddd5232a6021a56e8b79ca4e2911\nc5fc6c1e0d446d37acce1c6e70b58979\n6efcaa530059319a720daf9b94e7a5a\n56ea26c10c478555a31cc7b61ec6561\nf27a1f3db59556cba0ab1d82ef09f78f\n49eda1b86917d3d7d0a96520c31993ad\nb29e6b183014b61e49426bcf3088611e\n229af4d0700b3fab29f2e5c9212b176c\nc418195771c7625945821c000807c3b1\n14ae5631e7dfa10430bbd4cddd04c77b\n89827ac677337629ab610b0c94236463\nf88d344aa47deb52276813f95a6b7283\nd9e3a8c4f093d66f3e474b0005d777b5\ncf7c2cfb403f2819548cdb167cc8bdd\na4047a8f57451762a0ab1d82ef09f78f\n5ad5b050fdf84825ec7962e39e3d3af9\nf5d1fc338e804d7fca7e81cd26bdd69\nfe5e1df0653804d6ce4670b160b81e9\n9c33336af33fd905776d8bc79b9caa2c\n19bc9c781df1da46824080f516909671\nd8be4b45afb21cf1616fb9ab42452112\nac965c2d5c68551be6c5cd45aa112726\n720024ff80f13fd16fcd22503aabbe\nfc95d34ab1afb92b9118eee0b123125f\n6688fbb6e3fb092eb1b6b0c5ddacb607\nb69b2ff85d0ec661d8f9dd7647048a0c\naabcb5d610e76ff19ca02c396af0c503\n50d898f6d1c05cee2d99129afd32edf4\n8b094873d775f6e21130871dbfe24c18\n6dc6bb97c387b2f3af4e8812cf1b9e1\n2f33abdfe147813e44949d7685cb63ea\n3154c61c595bd600e56ddd87eb888f65\n71fc8c7cdb48978282fa4d4f2c19b2ce\ne02fbeb78d8936fb586ef560a3203b3\n367284cdf79742334305d9043f82a6a0\n32ea6609eb659a2cec3367bccf60e518\ncda35fec5923a8602250bf58700b4d8f\n9046b2e610065fe5a5d95e73eecd308a\n9d039675f4d51869f3edd695842c6d58\n54b26954e478b1a34ea8d5f5f27d7ce3\n712167f9036fbfd050e7fa8e7f4c04f7\na98482ce1ac411406b2cda27b9d80e15\ne8870f3190f6b8d4bd1025bd755a15aa\n29b2aaca87d19a3c5759f4335ff2e408\nd8baf8507ff705dc2787b53b27e2d44e\nfb5e8a6361262c26acf7920879052e93\nabeb8fa38979d2fb9d46068d27fb8249\n689fce16d1f9099b9aebadb76803631\n66a801881c4ef524848eff6ddf1058ec\n7727cc0cb47705632dfc2f8d5d30193c\n7d4ccf874d0f1060d59c95a5810fd5d7\n4a27cb9384782ce33e95c55cb020b7e6\n94966aa8a7a6f540f6807434c358ea12\n2259e09ebd0ed2befebad4f49b26ec52\ncab027dd0162c5b7f1426260885dd0ef\nea96b8a866121d1abed1bd9593e318c\n8c2ec4b15289d88cc5d1c45cadcaa3eb\n1dc7f7d076afd0ccf11c3739edd52fa3\n51874066ba946c58aaf15b62af6b513f\n535911bcbab242877543d7dbfecfffbe\ne0940f2229e42007d98e761e6d91dfc8\nef02c88a34b3888a1b1a00a31bfed97b\n102f0532f9f8bbcdcb503f63ed915ed2\n5c63f336ce5ea7d621d1a69a8eeb6a01\nb6ad7be371729438dcfcef693e7ec696\nca6c07357ba5125b8e2adb29857f8a1\n5e3f91e841bf74d240cb0a485b0065bc\na5d5fc6b0bb7881419fb4103277a6b93\nbd7c71ca15b0d4e56c252f74b6220e29\n3b0625a3d623a7decfbec6fc6446a041\n89c095a52766ecb05d2ac47f638a4ea4\n7eed749ec4a3e391289014a3a9ce92\ne8aed77e92a8c4daac3edc5d86dabc91\n14f3de4c23d535e92c528d33bca1ac2\nf5cbbe04afdc4697562b835b63cfd09c\n95af60aa8cb9be066a76e23e6f966dea\n221812e480905c5464810cc21086da42\n9f6388c27485b03adfd21203bf8b4b46\nf2087cbd26a910355c16106acf3e4b14\n68142013a4f5e7c2febad4f49b26ec52\na94ea7183f27073248c0c0980e363341\n82f5867145f64346a9cf1782d21bd9ca\n5fef79348f4bc7b8c710d14956729baa\n71a7bcf52da934d0f008d8a3590fb522\n394c63a5658ef759b515d1675be6b5d3\nc1d44782ac45d6fe3671949e4f99cc76\n7178d8a2f91a9e1c713656cb7b79f97c\nb14a14cc2f3c38c9e3def9c422df2282\nc27a1c6a26642c907ecc778b34d42f32\na1d2dbfb4b3a6c113ff4affcd321d45\nd382d9e34f365544278d386bfa54545\nac40c46401406b71d9c36c82d746b699\nd5ca71b9b9ca6e5041b73991ca70550f\n482a76d14781e55e25374da32e705c\nee43ed656acaf774f4b6538438a0b930\n48baef3ab18d2d43d2afe8d5254a0d04\nc5a02d586ea431a1e76bc197b3a3ffc0\n3e09b5c70cc4117d9969f8371ba19c2a\na16d7c49c0899cad8e43a810a63361f0\n105f53a6471f3ceb4a420e3c1b966720\ned1e06e886b5514fe8f49d7c9e73ab9\n83f1ff21744e71ad2690c0a5b39562ad\n538cda9b8cfefa3f4854e924c443f593\n28fb9a81898f88c4ae8375def5e736d8\n408c3db9b4ee6be2e9f3e9c758fef992\n9200682ed0382e3f931e98da3a93e73e\n9482c5f0a38a73c0fa16d3c3138134ae\n4b399cdce8337c29285e0e27752e54a8\n8d4fe49d942ec85ff4b6538438a0b930\n798c315f86d8f02f931e98da3a93e73e\n480ddc59636d6516659dda512294c744\n6ca66a443e651c1423500a5b036df62e\n4b5536d2e9c5b9b7febad4f49b26ec52\n6cf6a546e2ecbffe815a7efb12912\nde077e0bd6932baef12d7184a2ad3430\n109a8d453ce93a6fc21b51dd4113da62\nc71453f2c3fbd5fc56cc009699d2a2b8\n45b23ac79688170893ba1eeaf62819a2\nc5b83c681c085f2195493ccf8f26ab2c\nb82c6769c98e877d24d29f1dedd03a57\n3f94c1aa9254356579b3e1be3524f72f\n5430799502754b5691fcddfa9c1209c7\n8654b644c766dd23d1dcc55e36186e4e\n7f4a5479c612805bb04e388f56884ae1\n3e51742cb382aa1f79b3e1be3524f72f\n747f4ccdbbe2e4452099d3739c2967d6\n51930b149cf6125373fa072a624ce947\nfc93d1a1476e4f86309c518184dfbf58\n5b375eacdbe49cfaaa539cd22945e538\n8d7ac6078989980fad16260d4d73b56\n5690d17b330f73adfeb8ceb93793cb5\n713a4be770bb19b9586b2526565371c0\nb11e0feb428f61edf008d8a3590fb522\nb3a77356e56d7c9a2820d27b806f8454\n481e00e4559705c616a2b5862518c93\n9e2318099f77d3df3527ecfeb345775f\nc3e43144fd61c56f19fb4103277a6b93\n3c5b03a212d8cd3951f776d3ed05550a\nc45e6ceae72c7a97be8908669c476d49\n88c2cbe9552b1b0571870da176ba03be\n94a62cfdb84e88ca9a3528690d225ee1\n3c5281bf572e2b6f2b70eac6546e93fd\n68a7bad2b06bc1a9d93768e7b9b1eabf\nacbc99e153b9d4d419fb4103277a6b93\nb1c7003075067621682d288075fc0dc1\n54e85b248576c4eb57cd80d4b17e7e11\n60ef2830979fd08ec72d4ae978770752\n382889dbc86b5dd919fb4103277a6b93\n1dbb8fd083f96ad279b3e1be3524f72f\nacf57dbafe8966f577fb15a8d7923976\n18b1461f48e0fe9aaf15b62af6b513f\n4c7faca525777be32f7524c98ee0fc42\n93040a14fad5588ed889130b88839a0c\n65e7fd8d158658106a76e23e6f966dea\n79eeee790ed5a5aac242632b2a8c3129\na6311f0c2108867aee18bc48b60b36b7\n6281381ce38aa988de98d10ab5975b59\n59ee80e3af7a4e3df4b6538438a0b930\n52c72274af4c7e19910979f825490a99\nc755eeaa4a588fcba9126dd5adc92c1e\n1a3cf7fca32910c4107b7172b5e0318e\n7b3b160dafe7e122d93768e7b9b1eabf\n8bb3a7e1cb24fe6febad4f49b26ec52\n3c72ddd0dca19bbedcfcef693e7ec696\nae8f31ba66709b8278cd7885232df677\n2f98d5e721e84debaa8081a7009091db\n14e5e4db3246dacff12d7184a2ad3430\na50fe14a700587304b7b1010fff3cd07\n6ace903899706a5819fb4103277a6b93\n10ed64b4c7eb6d9311ee7ca4f000feba\n9eeea5f7b030ff6ac155f88004a92bc8\nee5f85db427865e63e5399147a5b4763\n9b42cb91ccead6d42f6d10c5d1d56320\n1fb2be490f45ec6e19fb4103277a6b93\n504d908a55f3e0c764810cc21086da42\na18aa2d20d516333daf1f22b6daf05ed\neb00a4e8b33d257cad16260d4d73b56\n345c1bb95b12ff8c013a7bed5288654\n109738784a0a6129a02c88fe01f2b9c1\n34bbe284f7499df071a782a4379556c7\ne64876f5590e6fb7c3bd24f986301745\n4e9394f9f64859aef4ef86403cccc399\n7671a315e8ab32f4664b3b9b23ddfcbc\ne777df6ffb40e3a1853d412328e7e7a6\n79f63a1564928af071a782a4379556c7\ne699d5904e00a6ab748c0b14b00bc019\n24b208dd138d8af36210db75a4cd581b\n5f0c33039269b7a9f0e84b9d9ad447e2\nf2893a87ec37f8b3781cb4570305e329\n4079aaabaa6451a2765ca89770f206ec\neaea1cf98b61abd043383304411cc9ec\n2ebe5dfb7bd9a50c6effbd64ad6b71b8\n2d4005749db552232430716fc386281\ne02925509615eb5a4eaf5bbf36d243d4\n900afcc9f0f5fbfd858699aaad4acee4\na5e951c9d7a9a93f8cbb8bac2032149c\n1df409cfefbb51658b9b51ae4415d5aa\n8e07fff2ae8a542051ef8c8b1fdb41ce\n21486e6d0bd896ad5cca18918d24f6cd\n7bf5f689da285153583ff8a5fc7c1869\n307bdd2a06137694a10ff7fd5e43a633\n884f15cfc6a3eea3dcfcef693e7ec696\ndacde6546ca2e07f66dc6ea1ac82d91f\n4791914b3bcaf57efebad4f49b26ec52\n991738fc61b81af030ddb6ead95f49cc\ncb860d60db8f3d18febad4f49b26ec52\n175c0be26d0f2e916cb0bd372b0960ba\n5c6748b094725d9af008d8a3590fb522\n553c416f33c5e5e18b9b51ae4415d5aa\ne3b585b15506fa7113f96345312df593\n5dff67091a2f7ef1ab988fe471b1bd06\n97b7baeb8a172de42f56f09e5bc67bee\n7f1bd688960e2c1b97f2016c3d6097c9\n104c8e90ecf0e5351ed672982b7954af\naaf6be1d92a8c61fdcfcef693e7ec696\ne9038664b7d35e6b436e6787c76ef3f0\n55547d2fae0e3dc21705bfd3afcd10e\n56a57ef7c3385c9f2f38c0d2792fb5e\ncc6fbdc6f2aa5ea3d889130b88839a0c\n5ee4cbe45bdc4cd571a782a4379556c7\n2e3037a285fd8b5c1be2a853ec4f9e8\n8129d4c51abc3356bababe11fcea8796\n523ac3575244c7f3a130bbab7337a0cf\nc29137d144c96b17febad4f49b26ec52\n4cd35d6ec155d39633207e4c3ac155a4\n8eed35fd5b777acf58316b27df6c8e87\nc348d279fd22730a9741b7ee128375de\n3411daa955306811d93768e7b9b1eabf\n9611888ee0db1ecaf7d4d3ced798ad90\n70995336d06fc07ae9f3e9c758fef992\nf5d6579b3a1f5a879d2be74cfb51ade1\n7bc93a4cc26fab5c8c12b667670a35f2\n90343e416528b576f41d9ea5f63b1b05\n2e7cb2cbfbbb4d002ee19ebe356c2dcb\nbc1ff7fc750617d690f7bef12e52ac08\nfd7a579772b195532de421c2ab5cfb52\nb6b8ede77085c0a95bea7c29e873d16\n745a2b060d0f692bf4b6538438a0b930\n856e86709df98497dcfcef693e7ec696\n6eac64eb398b9d7145d4f35fd8d64cf3\n44360c91a7e91098d93768e7b9b1eabf\n943d786e2df9251ec76aead7da70af41\n1299579419252fa954b02959579aa6bb\n5fe429691ecc5f0311e6fe968f9f8b0\nad17445446e4fd3adcfcef693e7ec696\n2a80c95b4bbcb73d87ed2480ebb0f3d2\n171a3677999c79b32c8109e73b98d509\nd0008b042256fb5f7ab911835312d4f1\n812dd06fc99f174e9f2349486c570dd4\n6d5aaba9f6dafca977252fffd1947df5\n3f2e9c14ab1d26a0ebead06af665220\n1815c6431b06dfb4f008d8a3590fb522\n668deaeb91295739664b3b9b23ddfcbc\ndb2d4f781756e687d8864caa856253b\n81e991df9ff8b970a2ab2154e681ce15\n501f61f01aaa195adcfcef693e7ec696\n6d0ef6312f8af87a53e946fb2184f0c4\n56bb7376dfa9cb5c8cf069d506f8b5ac\n7d358a01c9467815a9505c473725122e\ne7169243daef074dc82dc2efb3363de1\nff32ec299e6c37e767d783b4714d4324\nfda71e511d095837acbf0573260a18d4\n91df49ec00f2c5ce73f1ca2ca101a20d\nc7f57e76cc1ac45d1ee2805756841071\n79df23303a3192c1cdf1dfd78f33901b\n1ffcbc064f473b7de7c13848b2d8f5ec\n14d6b4b09dfc54e9d679a95896f75103\n6327de18a3a3423c947ec73b27c6abe0\n628c4fe12881efe2bababe11fcea8796\n401fe961ec7b0cb5dcfcef693e7ec696\n4960515bed0e76c403c7d0cd70738a3\n8d84471c4af977d917271868b642acd3\n5ec5b95d9c21b05ea9af104529ef47c3\na7172fa4177661f4858699aaad4acee4\n176e3b32d749ac94d79f2fc0b8d8ffad\n94c0ab5650ea392ddcfcef693e7ec696\nc9f85a671d551086d61f9b2773e1d72a\nad461a7b5e8cc66efebad4f49b26ec52\nb3fc5247186936f1dcfcef693e7ec696\n47cb4740e2e0cb8d11bf24e88933ed8f\n41b0491fdb14d41bd25ca1a27cf9bdec\n35e821cabad939df664b3b9b23ddfcbc\nebae52c84acf994e9e4da01b847d5cb2\nbf17779bec6abccf161bc5243aab8ea4\n88ba062b171b4797e30dbde92844e593\n198ff59a42a147eb8ac5948d70801389\n83c24aad3914e61a73376642dd664bfd\n852826a94cce36ea9f1deb04fb8ae481\n2f58b1ca8634a6b48b9b51ae4415d5aa\n2fe5e4d8a871fb861b1a00a31bfed97b\n80ad1f839582d183fbf6f493308acc40\n6a3ee73d42228f8581654cb17c02fd\n737cc2beda4a023619fb4103277a6b93\nf74c321042dbc8e684d78f017ff73fd6\nb9fc2f624533bb8119fb4103277a6b93\n813d34995b5c4406b65b71636c46ae49\n7d0c5e28089c2b7bd99e852ee772dfa4\n53c11596c3fc36a8a5094cb6d104b35\n6c0fe6541769a3f6ff4f2504a49d0458\nb9c756b2ff5d66ddfebad4f49b26ec52\n1adf96850963550f19fb4103277a6b93\n6791c92944c99c029f1deb04fb8ae481\n89251f322490e7047e38640a31d0bc3\n75aaea3b26362e7a659dda512294c744\nea367e390741fc38dcfcef693e7ec696\n7f1548ee7cdd456fc2b9c3cc12089fe\n7e2c280b5839d502eee2d67fbfa67a7f\n57afaabf994feb305512673aa47c7e3d\n96b17bfa556f57e29d2be74cfb51ade1\n8f48ccd17a15baf5ce01c07526cf2aa4\n39806e081bf3fe564ee8db28f96ad26b\nc011010ac01b73c78e43a810a63361f0\n93e81005c19a74b8664b3b9b23ddfcbc\n58f8fd169c9578e62f81cb887dc35578\n3253f2c59e6bd2a119fb4103277a6b93\na8130d38d538b6306f3d2b1b15fba494\nccb96ea5f047c97f278d386bfa54545\n2fcc875b28c5557dcfcef693e7ec696\n7eeceefed2b3aa2794f3bda96cf548cc\nc26dfd3453d81bf7788eb1f5e7ba6e7b\nabbc5e4950ff6ea8f4b6538438a0b930\n4ce90fe70faf4c3e255bc16374754e69\nad139879f97c141e1ac9af6c714d1419\nd06d27bc9ad1faabd7bf6fb68df7f786\n72c957a020566f4bfca61b0bec17b8d3\n5de0ca3516c01ffe71a782a4379556c7\na211f3080f4659131622a21d32ed9c9\necf3d40b14300d3c0c26b04b6b8e17a\n35a65ddfe8690ccfbc96558434dabb4\n5c2c29fd07c365afe5c65540d3456093\n3997cdee934a9b238eb3bc6c6d15f9bf\n92016e48e44e8b8bbc16013e096d0c1f\n8cd0334f04368168b8025ff83c807f47\na2561614d015f2fdfebad4f49b26ec52\nb1ca280d9567270ade98d10ab5975b59\n3b465822b34ed20ca05d3424fd8d541a\n25f69a74efbff4d071a782a4379556c7\n9705c2610980d0fdb2d0500bdfc28f70\n12a2733fc5f6b31ef8574543281e850f\nf979c7a650d29ea819fb4103277a6b93\nb82e068c2c18cd67b09f0ca9c143fdfd\n54ba7e77a2bf5fe3158b7df020486ff2\nad92bfc65465091c48d90eef8384210\nc14fe6a74a071b73664b3b9b23ddfcbc\n2ec33e8b457ac0fa278d386bfa54545\n5431993203dfcf797ec12e029bc725db\ndc47d49db6ac670635d498476a30ff0e\nb278b58e294a7d2bac242c3aebc81b2f\n52989e315ee1d3839ccce4c6d5bb195f\n15be511a2433482aa192483aa282f8e5\ndbc5a4d1dc3a6e8271a782a4379556c7\na860e5edcaec268e615bcf72f8385966\nc38ba6c06d2b813230c589758b4b5646\n415c174ecdc612fb6f5c30e29039b12d\n631028ddb76eed4dbb0085d0daabdaea\nc3135e3b21b42e132449009b96f8a6ed\n747f70e41b927e13b73481345ae9d2cd\n2bbd62449b56abee659dda512294c744\n303ac20ea2febf9ec3bd24f986301745\nd4a7a1dc0f1a51986f15d61c214769af\n410ad32a9cd5377458c429c80cce21ba\n3817a222e96acc4ca78510b72d2281ea\n4d6b0bcf351183bef8c4b4cfc2702232\n132bfde1fabe9ab771a782a4379556c7\nf16f939baeb7722e664b3b9b23ddfcbc\nf7196ec7d732af5166decb1b3cdc5557\nb1335d826d7d60726e066e11deddab75\nb323d3002578f5f3f6cabe1df6f4c9d9\nc5230678204a1bb8dcfcef693e7ec696\n2a44569c8ab6ea22f222df538827afaa\ne1a8e9e2059f4792fbb8cbddab1c2002\n700f59abde33ee3ec2d043ecbc42284c\nce4e075487aa05ecdcfcef693e7ec696\naaf3aeda0f848344b87028a4b477349f\n52257815b77da840f7628281ecb18112\n1950a6b5594160d39453d57bf9ae92b2\n1c3310f4c05ce1f6a192483aa282f8e5\nfd7769d0eba554c53def89b32cef8e45\ncb7ebc943b1b424988386fe1512ed26f\n80af0f92ecf69f69f5ff054d67d5fe35\n3ba61eb411ec52c41586e0414b03ff10\nefc01209cfa158eadbbc9440457e303e\n5f100571ffd90f8252b4875f731f71cd\n7cd4844def36a9f5bc7589eefbdbc3c5\n5d24567426a614ecfd726e98b98fb36f\n5fe3476df92392e1397aad305ec14786\n52037005fbff92d08fa35606145b47dc\n798a07e42d76013582695d8aaeacccc5\n86ad91ef08c53dd77189b31b3e8c8ef3\n1bf9ee6578bfbcb0f4b6538438a0b930\n78a81cbd2a5720d93a938fdd57fac3b4\nbdefbb1f281434e39961e1085a81acc5\n9f732b16a7faf3fbf4052eb4c07f564\n1acf7b0939f3eea2eafdf94e5032b200\na9cc8112fb8c4ed5dfd21203bf8b4b46\n49bf25ff4401946524c10ba1eb690638\n6daed91ae491c9cbe22ea6d770699e4b\ncb31b6293506eb639a3528690d225ee1\n2d90a1998eca8778dcfcef693e7ec696\n83dcf79646ad3f0cf4b6538438a0b930\ndb0c430a51ac45c19d2be74cfb51ade1\n1a5062241d7903076f88aa1b7f7cc6c6\n4bf61d3643b7e6ba19342061b16c380c\n2fdc21532b09d7e37f768772b7a990fa\n390e0db80fe12ef65fa6da97b9eb4a2f\n7c24e4f8778e224799a5e8f6c5baa224\nc103c0f93c690f5067dc358060e3c47b\nf7b8a1d716dc1725aa7cb30470f3273c\nf54945d1d185b387659dda512294c744\n10cc8c941fc8aeaa71a782a4379556c7\n19678fdb9bc926505e4b35ff1ea95f37\n2633f011b236a8979070b65ce7b4b532\n746ceaf694d85eb5d5192f88466da1dc\n1b78b8e14a21439afab04609f4609e83\n868bab5194e93577858699aaad4acee4\n731b983cb313634fd018082a1777a5f8\n867b553b34a3399919fb4103277a6b93\n270430ab9efb9d85c0f947750540fb22\n59e1afdec89de9442b70eac6546e93fd\ne8ba9621aef9395a3019620286259e2c\n5c11a1fa21e8671cbafa5bee623d5d\nef9f3af9b8453613febad4f49b26ec52\nd5f2968e4b7254ccf4104961857ca9c\n38feb6b209579f6faadbf8208284c675\n38e90183c838f443b43753a53e4593db\n3b68fa3c60e1cfb7745a5e8b6205e3aa\n95e2a1ebabfa741cead99961c8c0ca99\n1d447e3b068b924ad91787f0eb159c8c\n60c931dcc6d0982944bda2555d37e46\nf585560965413925d706ecb3379aa341\n5fbb7a5f01f646ca5830980abc1c717a\n6fb0076db4a74b73cde18cb90697712d\nf28e030e715b9d3e318462aca9e62b6b\ncde67434193a2a6f19fb4103277a6b93\n5191d64e9a1b9664bfdcc70dcc16baa1\n2bb1bb0516d7cee747839bae1bc65257\n4775e71d37374444febad4f49b26ec52\n938e3529b774a91fcee558e7a5a02ad9\n36a6d851dbe02410ad16260d4d73b56\n159a2a760327ca5bababe11fcea8796\n8af3fd230ea7ac6518101790733ed6b2\n8d247c6f6aaf805a2530bfb25087f2b0\ndade0594e68e2250be6c545952e7fa4a\nfff7f07d1c4042f8a946c24c4f9fb58e\n33b081062b2195e71771ee930e861b13\n524af53b7863f506e227c1bcfe5b1fc6\n6152e14b042aa17546f41dc2aaef556b\n6081fd59c46769fdf4b6538438a0b930\n75f2bc98aecf198974984b9cd0997a52\nffe1c487f7b9909bfebad4f49b26ec52\n1846b3533f41ae82f8c4b4cfc2702232\nccf36a20b7ef3bd128071d61462a212d\n3037fac5bc67207e23fa92d98173c06f\n90cd6a48cf2789a9b430d97a45d5824\n6e23179a3559775a65eacc25f128a1c5\nf4976e80b8533bcf85518f8659f21d56\n25bc205f6de491f4ccde40b1205ec7ff\nabef0c609ad3e9c2edea4b985280bcc1\n6bc941dbd290c7f21acdac000802e11c\n153d0c95cd2981a46a76e23e6f966dea\nd4c330d27bbef3808f6610bf672cd686\nb86e23bb0a3d337ef4b6538438a0b930\n63fedc0334f5552dbec3a71604e140e3\n690e073a4000c7ae540e292bd26f307a\nf52e52094d8240b2dcfcef693e7ec696\n2a2d6560f14a01c6afac72146bbc9d59\n69ec86dbd4df85e51ee2805756841071\n1e3871159daf135370bc652a18e29c3d\n1534dd45b3253cfd902c0a1a69e25bd9\n1bd138c3e54a75d32f38c0d2792fb5e\nc1254fc0d8d0625b8738e7290b6f3237\n2642d805c53e243d629f73b53bd7a234\ne9c3a3aa2278608bec15b38012222fa8\n7df9115b511668bdde98d10ab5975b59\n75fb953aaa9924d1f28b9459ae3635d3\n48af84a5600ad5bc19fb4103277a6b93\nee5f0411fcff59951105a3fc18779f13\n5919dea71f3bcb071d54ab02e78bef2\n845c77d01efe2f2e425fe98d8cc1c2c\n4c809952877b2a0bde88c30a08fbb953\n15b495c101881d96e2367b9e27f16a71\n388d9e7b2b8a8f909492fbce0bd54e2e\nd8f851bbc98dccc23fa92d98173c06f\n8ad9868947e7391113625562b56161f0\n3441002a52b1cb2946b2a76c074a3f45\n46957ba752c3554bd42b9650f19dd425\n516928532093f765bababe11fcea8796\n62eff79cf2e75bc2765ee729adbdf968\n7f9d2da43d6aba67afb6676a5cd782b6\n34d280e8968c180cdf63d1c7e43c783f\n23ece3bf871619366ff454af1e8947f3\n398dbb0a34ca527871a782a4379556c7\n6b62c85b16e300557005dacb6907e37d\nbdb44c3f5215ca84b6d51da3ac2ed48\n62ae9ded861138be9d2be74cfb51ade1\nfc472163ea149f8e19fb4103277a6b93\n5b51e63726f21bb6a75d03186a0409e2\n41d280b7db61ebddfebad4f49b26ec52\n4c4c719ac4b61d8f812c9aaa38f9a422\n1c2e9a364b82f14fb9a0f5d18f1ce54c\naa3eb180a4f6d8d42de421c2ab5cfb52\nb09894688b176d426f3d2b1b15fba494\n2ef899e67eecef65190a91fd9a6f7d55\ndec1d2cf8a4563d36cb02543e4df83bf\n2091efe147f9ba11e3069fe10dd75c3c\na82387cf9d9d253aa06f94abffad1304\nccb8c52ff9e7a01819fb4103277a6b93\nfe130356df1977499c2a886f3b75f1ff\nc2c36909e461e10adaaaeef365d8f6e5\nf3f8fcf3713f89847e2388e35557b84a\nb420e0461893854bdf6cfab91d65bb91\n3a69ef9c6512041768c981036afdae64\n76338ed3326689b249524cfd5973a145\nf10f579a973af061fc527605fed20d9c\n3459eec8eb56fa312bac236fe109e385\n5cbd726c3ffd8fc49b458816be7a3962\n1011e1c9812b84d2a9ed7bb5b55809f8\n9e6d6817c0a0a022fdb7f86985d6e5ad\n6f3506c9c5202101c4e8952b27b5f370\n2db1f557e247ded7e907b6d9dc1d71b7\n83b8e64089968ae8fd3feb4581507302\n7aaad1c5c2be8c24a9ed7bb5b55809f8\nedaf24be15738ea2c5d1c45cadcaa3eb\n30655ef8f2511b4ad8f2ca82d6e1c314\n8963760f8bec0fee7f807d3c406ee\nadee49b8f5251efeaade78cbbf8fad3b\n47f25d5b367326ceaaf15b62af6b513f\n2d1d8a2f976387bd3145205f02ff9fc5\n22c5cbe6271736bffebad4f49b26ec52\n63aa14915f59ed8671a782a4379556c7\na624ebf0bf0451a8d93768e7b9b1eabf\n30b506e5e1fc282afdfcfddf24fb29ec\n443eca86041e57ab1e99b149cff6a230\n811a7be3be14bd2b62103e4bff47b4cd\n8f73278956fecb80327289c00b6dc9ca\n7c2fb7a6dde6be96bd5a65d923c337a6\n415a08a66b8527519f803a8da27dd9a9\nbe045fca16562f6764c85287e21825c4\n7dd881a26eea656d193afeeca14e3baa\n4f06092100d0164013d2510999d0f1d2\n910db4c45df40b67d3e19c2bbe0ed38c\n9d873d1e7403e2c825971c9167623d21\n994e524d70043c3496e349c87c588bf2\n3e42e3386f4aea9277cf3bb06f394ad\n6e446bb5adf14b0b6121178eafd002fd\n27295a6f585b7817febad4f49b26ec52\n7c7434a9db4a407a2b151d8b52c53b90\n913c0ff011ad0658dcfcef693e7ec696\n1ddbe75f64683937f4b6538438a0b930\nd41c8af82fe98a019fb4103277a6b93\n69c536d9e450cb79436e6787c76ef3f0\n8c67fd5a15e8d9defebad4f49b26ec52\n3a069fc75bde2735aaa6ab0dcef7c556\nd05ff7b47febe58a656db3f863b4b796\n3558aeeb9698722acf19858fd1963d10\n91ed62f2b3fd5919f12d7184a2ad3430\n57f273bd63f5287199e8bf807e902261\nac9fae8af57729945eee45c00c4de9d3\n6aaa78b81528f4846674ff79eed6185a\nf6cd420f08155054803d0f5bac2abe4c\n384bf53e12744e2019fb4103277a6b93\n401cd99ace3b92fadf6cfab91d65bb91\nb893c20bfb5d718371a782a4379556c7\neb379b2b95e76502e258d1c3e7302e7b\n983cd9caf65adf1ddf6cfab91d65bb91\n45a09b1ce3111e4f22f4fabdf1ee0670\nbda00a13a1dcbbee908afb10f96957b6\n2aad9a8f3db3272b916f241993360686\n1b6bd64fda74bdc4d6983f351200ac6a\n2e86b383f43bcb1b66dc6ea1ac82d91f\n45c5ee611c73b90a509330ce00eb0b20\n6c4c3bfe275e66b1b75e606711562bfc\nb9886dd3c4a651f3664b3b9b23ddfcbc\n8b07d458499d63f36d96c6cb347d6a90\n424c77a1f39ac41620dd2dd4d7d7656c\n2e4fbab46e264616d93768e7b9b1eabf\n40ff8ae39ad13d014a873bbe35452b88\n13e19274b358ec867aa3000697a75d55\n9f62189d260cbad33c11c3dc5dc42217\nc1d808c75cc5e7ab4da5bb83ec125010\n667a88cc3ca1cef8f37af16b2893f1d4\naafc579804cc095cbababe11fcea8796\n5d77e8f6ad3741a0c30ab36bf7b0552\n3d01fd2f13ece278e27790b0ec8671f7\n878414eb6e86494d9a8ef44e1d2c5b75\n506e4e67efe1794c1dacbc3d67b5a11a\na74cad1781afed87dcfcef693e7ec696\n369c19c0971221f3664b3b9b23ddfcbc\n1b01ef65920c342323bdffac38e6b250\na15f31e2302f6ae5d67a73ffd62ba73f\ndc6f030d9ee566a5dcfcef693e7ec696\n2fa78f97515a4d5624760bcb862cdd1b\n447f9f9dcd85f6242849dacb94997f4a\n66e0abda60998bf61a96060575291b6a\nc3c467718eb9b2a313f96345312df593\nbfaa1c23d2622422ad16260d4d73b56\n4f5c111a89b3fd27aa29e9f0529e8ef7\n4d3cc502d4444c848cbb8bac2032149c\nc0c836c630cdb4bb664b3b9b23ddfcbc\n685865c8de58d7dad75b93b39461011\nf2e6820ca69d9b7719fb4103277a6b93\nd94de64641651a2079b3e1be3524f72f\nf3164e1781a296597f6f00dc967c386\n1b4bc147baf68d4ff008d8a3590fb522\n23d68e01b77089ae76ad4f5e7c7020eb\n17f3a2945d6550cbf7628281ecb18112\nf6b3638983b0effaf3bf08ec218707d\nadcb67b58024afb99910b7ec4c4e599b\n84f5e52756fc84f86df14337f24e49f4\n8ce538a671c6e684d93768e7b9b1eabf\n1645b28322131b6258c407efcf93be6b\nabb8d6d056f48eccb8015e57f308c60\n9bb816d6a3517a5ca74c2333655a11dd\nec4675f62f6946118cbb8bac2032149c\n966cef675324e416cd415550f639925\nb905d2f688f56afff4b6538438a0b930\n890940359fdfa036569c11df1aea8ca4\n3243ddb2aa4d1659beb83c64f2162734\nb3cadc82852f5f5381901288eaf14401\n7486e6cc0f457c4c12a1d8ce70d3a8e\n55221b101eec29dc656a19d1d18fdbac\n346db24c1279e8d273fdbe4b39ff4036\nab7b0db92f96381f8cbb8bac2032149c\nec7795f1efb90af9f37db3b69001ec04\ne993ddaf6d03003071a782a4379556c7\n75e3cbf4b1ef0df971a782a4379556c7\n212f9ea1cd96196992f4c88fd91c6b1b\nd9c75799ff9ff74664b3b9b23ddfcbc\na2824ff9eb173055f4b6538438a0b930\n48600b28f63e0dd2de98d10ab5975b59\nfe710962895c20914476c40fec27b24f\n33c6e3b21a67b750e78d7b497732dce1\n375aae9fcedc76438b9b51ae4415d5aa\n585f8cdd992f541d23500a5b036df62e\n3d4399c54a60ac26febad4f49b26ec52\nc9f3ac109419150246ef4343e2399480\n8862cddf90fddb3119fb4103277a6b93\n760b1ea228d6c2f6e785b88cc9024b2a\nddbcb5a22a0c3aab35de8f8daf95ff3e\n3645a90e02d16f0584aa8fa8b66ba302\n1826930f388f5398e0c5923879d79f21\nefc9a32719fc71962c95e86abe3e6416\n490b186d11cf5675a872860b02b1bf58\nf01768b8b8ba025ee45ef4135c266a12\nf3efcbd9745da90619fb4103277a6b93\n6cd84ff61583805c85e2af9bf984f0b5\n8ad09d90888f71dfcb9cf5f7d536cddb\nf60960ae4dc8e293c8ce22a41ea48e48\na1dabdb19c7e5bd1426cd1b7e837ebc6\ne8689b8b1610bf2841bb8a7ba579a58\n73d57c83a4ac0979d80195020ba66865\n4f70d14dc276a9539a83764a2641fc5c\n9bd1c242bd66d2fbb63c01786992bd2f\n831985fb385a5b2a9ae2d75b4fc35b7\nf5a673474566ed53a9360d44e90d853d\nbb027ed892722b1f3399de188dc5ee56\n49c3ad60b7d5234dfbe06dd91adeaedb\n7813f4e4c0a58118cbb8bac2032149c\n41283ae87a29fbbe76bc197b3a3ffc0\n9e94631e0dcb5c15890bbb282640d692\nd578287c4a9452efa9af104529ef47c3\n25eefc5a3c7b30e1f103d473de33521a\nc827c0d4ef212f2b30cb1fe6fdc7d605\na8fa391882414febad4f49b26ec52\n7d22cd72bf2762b19a4b266ed4d507c9\nfcd4d0e1777f4841dcfcef693e7ec696\n204d9ecc196990ebe8479ad2eabcbab4\nd46537f513283d6cdcfcef693e7ec696\n2a64bd38a4e42f33dc43fde5155b3946\n23aca164c7b2e2d4ad8af6714b643432\nf5adf1351a56586719fb4103277a6b93\n79d0985603f7ff3be6c5cd45aa112726\n49f625856c796254d249abd69334079c\ne18d2ccfd7e0da86bc22c9f90939338\n8e637b52c16d8874f09e0399552c33e5\n9c4afb731e910d3723500a5b036df62e\n69604fc24b7976d69ccce4c6d5bb195f\nf850a69b0d308fbc19fb4103277a6b93\n7ad23def902ea4f37b7a2c2624e46d0a\nbeebc267ea0c16a5c7f6a57f6f73d8a6\n8e3303cae6cc104bad4f8ccb153c24e\n5771d5a3084b3ca3a2d7b309863cb1b\nc12147db9b29ef9ee0480c954dcd56d1\nfd42924378694d9c2554f2f6bda30622\n97718e2651d22b3a74740f837351e7eb\n9502eecc3a057115b129901f80d24b7b\nf6ef4614e853eea9de712e1694f0a344\nd3a55d20bb9c93985a7746683ad193f0\n8d05d40b15f933edc22013ebab50762\nf917474a20558aa33bbab77a66bc3671\n678f7fe1c4f977927e9fb8aa5670f37\n164ec64e7a28c08b221ea40148177a97\n4b6d73d06b7359f26cca17c12e67a536\n4a579619524b60aeba18ade30e563d37\n63e37e8a29ee34bab277610811e28cd\n8cfe3ff92244310534506cc3910614fe\n28912046d42946df7db48c721db3fba4\n88b217db267f1ec61e616612e30565e8\n99737ff619cae25d6effbd64ad6b71b8\nf9beeefdebf70350f4b6538438a0b930\nc177762c0445d57ab20aa91e9e90c311\n5be1589df948b227c955e5ed03ef3a2f\n3d7101bbd994e2f5296ea8292ef2edbc\n4292e4bc1f783b399c409b26b1e9e946\nf5aecb6607876495e03eb69820d1aaf2\nd826ce80b06bec855e5dde99dbb2920\n40a402e1d949364a104ceb84075e40d6\nfe3351c94fbab8ce3002761e7a3ba3bd\na7ef45d86ae5b496a97f238e46bc2221\ne6d8569c0957e7453002761e7a3ba3bd\n24b27de7ebb852ddb472f782e8890df8\n4d393b562df7cfad9a16b095d67f7209\n50c9d436169103249cd431573238602d\nbad7911965fdf1786487ede8a6f074c3\n54317236f4b56413002761e7a3ba3bd\n67d97102f9c54cc95512673aa47c7e3d\n5354ecb0e3aa1da074a16879fb3ac81f\n4bbf789edb243cafc955e5ed03ef3a2f\n5b74412eba257e5182b796aa5845e185\n2e5ac0552fa296c43bbab77a66bc3671\n6bfb122ded9082de7ff6ace05b36a5\nd58bdda16e6bba6f796740c80be6053\n696beb1883be838cc955e5ed03ef3a2f\n"
  },
  {
    "path": "data/filelists/04379243_train.lst",
    "content": "7ec59be3e55081f788292be2b58381eb\n69d4ba3043aee963dc2bc8a782be94b8\n3398658268644c2539eff6a5994f7472\nf18c9ab4ebdcdb8ac8595ea32135ffd9\n370e911bb0313e0cdf76e252f60565c3\n10e7056ac077a0f54a111702084d37d7\na9946cff00d5a43c3b0db8c24d855998\n7595d2709fdae7f4cd6ba6431f9f9d71\n8c65dd783d2afcf468cdbc8b02ff160a\n6d59cd216e896670b7562ed1f28478bf\n1d43a3a22ee451e62511fca00e0288b\n4b21a06b433b563f450195dfcfefd1b9\n89a7bd3d0af7be05104a4ca1203542b6\nc017ca698294d3143d27d1af90f27023\n1e6d470b0330afe7abccd5469c032787\n60c942ccc194a8e88d4313dc14de486\n1a96d308eef57195efaa61516f88b67\n1f64fc95a612c646ecb720bdac052a97\ncae4f0f8b87db72dbbdc99ec57ef9c40\n45acacde58d7717aaa7cb30470f3273c\n711de3c464c11233a82ebea018a340e4\nba993afc907987b33087f84b199fd297\nc33d942c6f7d517d346ba1ca782be6d5\n4bb8e7499f9c5466a341228b21d337a9\n9c21b194e13b84bff51f77a6d7299806\n4b4ae1bfcf9de312d1dcc55e36186e4e\ne6a1c65789846ca8c88ecf8c33c3edbe\n9269d120ecefe48da2aa7d89ba9aea43\n7b9a5531e98308c8c3bd24f986301745\na99a74777f6aacf2489e5619471f9f53\n3016d678209377c1c3bd24f986301745\ncca5144ed02e693f83ab30e82b39a93d\nfe38d140fa386ed4c434c6fce2e7773\na5af3ca6791da8292c48d6b905457dcf\n9b042d709402eb968dd711af5650bdcf\n8af6aa6372ade15d8457b637f6fe1690\nf166eeb3434b9ea4d79a1acd1a8c2d4e\n22cb00fd7f4d016429b55029703aed8d\n2b36b46dbda291b5855931d119219022\n7d6d7984fe8eeb3099e8bf807e902261\nd14a4b797fec250b83768a4ac1607d73\n4b2222cc86f2324f7383fb84b914b75f\ned2d5ed8ad10f323593ebeeedbff73b\n59366e331014e2248738e7290b6f3237\nf7ada05f68013e2dbcedcb5f4c7257b9\n2e096785b8d98d4430bbd4cddd04c77b\nf48e40d7f7b07b8ae0c7300d2b2cc1d\nd2cc7d1f7fff8488698b889b37529d3f\n7421abad75caa60a299938728adfdc7a\ne3457599e244cb83ef9a8aedf51bb497\n46e097e8c17a4098593ebeeedbff73b\n50f93f2278c3cc066bdbc69440dbff90\n8b54150f56e59a91de9149d4acef1da1\n7cd2c11133d7470db9278b13f52df097\nf6df49d754e3adfa29e4b5aa807bb4e7\n6f1d3ad68c0440a38b424343280aeccb\n8709ac2f3822955de650492e45fb14f\n66f1182a5e4dcdf9ccce4c6d5bb195f\ne0aec1747c4d7c11f24f0645d0949356\n664c6792448950dec19dc7c5f46bbf55\n81094bd607e33c1e0c5923879d79f21\nafda402f59a7737ad11ab08e7440\na871ec9aeea7cc5ccb5cb7e88a8b34ae\n97894130bbbd202df4b6538438a0b930\n1652817da2b9193bc3bd24f986301745\n584d3ed9669b1fcfbb7ac4d22a68ec08\ne809af47a0255110855931d119219022\n96d3a59baa02d7a47d117016cd1926d1\n734a664e9d0aaa1230bbd4cddd04c77b\n5a6c1cc3731fedeb55f46d55537192b6\n1096b4a30bd7717c4733824eae5cd9ae\n827166feab020929811cdd52f3d07553\nf94bd6bbed8fd60614038d588fd1342f\nad060b3914729efe2175f7e45480df72\nde500885a5cda50f99284d844aba7576\n11103f4da22fe6604b3c42e318f3affc\nfd958ba5f3116085492d9da2668ec34c\nf742dcebb1d9ab0cf51f77a6d7299806\n88ffa9b795f527b1969b9778c8fec586\n80131db5f6be83b7d7bf6fb68df7f786\nf58b9e92e45367326c3484ac7eef025f\nc627f3639caaf614a6589c01f678d8ea\n1d19305840960acde220a4c1303a51c\n6e29806cb341576ae9deec47d8412ee\n4fdb53755e578678cd7f32327bdc729f\n149b59e69d25ad09c3bd24f986301745\ne65cbeed1eb687d514038d588fd1342f\n3f4ee26a68f2e9386051d49e4b21b83c\n8af2d1420ac255be490ad276cd2af3a4\n9fd065502f87d1f4c2cd59b38b35eb54\n86eea3415d5a61df490ad276cd2af3a4\n4a944441380ba0a45990f2c81f286aec\n3929a118c5252a768cbb8bac2032149c\nb04a4cb79890c846ab7f9d2da6fc61cf\n19c0e93cdca6433fb8d33c22fd35264c\n3ceb74b707f814a17bcd6a9a3aec51dd\n5ef7fbec36f8854ef7b4b759a0c02e4a\n234e44f27b5a2852500cffceffd2bd2b\n594564c315e37c57925b56a4db8bb70e\n3dee82c33d65b74a99e8bf807e902261\n339092b2aeffea998629cea277916e93\n32b63d54261678e266a713431ac35e37\ne013ba1ff446bd56140a527375fd6757\na56fb908880a3693af8c4996d9577fba\na9aac9089791465d30db3da8ce2a0a12\nfb6cfd7064a88468a9ae1099ff133d95\n73e9e162c2d4f90a6c4acae4ea0d5870\nfd7380eb29fafff3742728b30848ed03\n8ac67043fbc976138705931e60ead6a0\n6d311facc6387a7fcd1233d74066ed8\nf434ad9d54919c9029d8eecf3827c486\n1eaad686e6b766597ff6ace05b36a5\n5247e4e978399f1b486040c0d9e85846\nc77ed43659f01a0cf51f77a6d7299806\n6b1b63af6ccd71a1b129901f80d24b7b\n852e28dd91e4fdb35c1975633309d43c\n5d65f46bcc49eef08b378a8c4400c79b\n8c878bedb8e052041944bfc1093ee4d3\n206cc839c7796a82a09e5a1a20aee2ca\n2cfd6534a6a57548d20545a75c46659d\nd15135247c2f52ce420e437840bac4fa\nff26f7003826d1a2d810b14a81e12eca\n33d18dbc04c4fc02e76bc197b3a3ffc0\n9bf704d5e2474cba3a6b5b5b9b35aa8d\ne99a4c2fa99a0038a2aa7d89ba9aea43\nb4c54426262f142fc16cddb2140115a\ne8b3da6a6d938b475966c5a46a5a6ec8\n34bdbfbe94a760aba396ce8e67d44089\n6d2c75d89b0a5f5d8cbb8bac2032149c\n87f355b618f13233d5cb6d178687b980\ncb6c20669c6d1dea593ebeeedbff73b\nf2797245a220fbf1850622797c13f562\n604efea445d3f3ab6d322cb027df34ad\n8965a7a0234bfcbf82f29b648e624c33\n425544b66203da392ebeb1e6a8111f53\nf70df4cd7109fedb4824068fb42a2b57\n5cebb89b77fcf78084cb825ff0118ad1\n437d7550e95cdf39c0ca344f487323e\n6170a0a35febdd19129dc72c6879c0ee\n472796909612bf1f1353dc45068d6f44\n622d66d9e598b7788e0faa4ef4033cfd\n7a32aac4ead10e0bf51fa0238791f5dc\n52f2c6960d67445f896f73ae4af4fc8d\n2fe5bbb0df6925d1f12d7184a2ad3430\ndc291fbd5838138a833924252d812d1e\nf469759b2790b6cf6c1a170c83f9532f\n55d2be43d71717e1f4b6538438a0b930\n59ce1f3fbd81ab18f4b6538438a0b930\n64e572ed8f8f23bb815b2b467e8e2eac\n2312d2762c1bad27f84b0be7f50940eb\n15339648435a8e6290ef7803f19df417\n8cda30b88d9bfa27d810b14a81e12eca\nec316148b4cdd446b6068c62e84866a1\n34157148280e9342d810b14a81e12eca\n506a09d327936cf8e2e6aa5366c8ffc3\n553213ef2a7657fa9ccce4c6d5bb195f\n3e915e96e22f15a1af9174ac65b8d24c\n3ac426922252c21a855931d119219022\n551bf4f010f155ea4718e6c48e1ed95d\n614b46cfcbe04994d91158b2b7873a40\ne83930a4a62413e1187ef2b10c31bd17\n233c3eace6ea1267eaf288f952624966\n8ebb14fe46f63d5a98cfd47a860803c5\n726ffd1d94bf5c0558df8eeaf3dad1c\nc266a3883e001404721f5f36cb42501\n37a73eab8cb0267f855931d119219022\nbb28f4978ec66a9d5369e32fb818f337\nfa259703a9f28b1c62d7d9f5324445af\n8e7b48d1eba786cde8ee269f00f30d13\n9c44b336e78684647523c0c037b61ec6\n3ffeeae04bdd3b51c3bd24f986301745\n6d00c1008f41a099eaf288f952624966\ne758e1b760f185e2593ebeeedbff73b\n25b6b28e3b70be1c5a6be9e325f087ce\n91c380f2d26f1a9ff128012535a24244\n114d59f2e865eee630bbd4cddd04c77b\n2ce9bdf770b06e3745a4a35cfc2e42d2\n1d9b72020d680630bbd4cddd04c77b\n4949aa2bb737317225f1bb0febd3472\nc36d04d3a10fba869e87d2bdcb41f548\n85b930a031d9036481aaf17ac7662991\n6e45d510dca43cf6490ad276cd2af3a4\nad746c9c7f7548be7608168119193cbf\n676d6d79d32de9cec3bd24f986301745\n88e9d1f8c3f988e62f21cf17406f1f25\nc52a6a569770d1b39ccce4c6d5bb195f\nca9bcd3ecad18d8fb4c161851ed2b4e4\n3f4cb895d754dbd3ce47b13319293999\na09324ab0389029260885f79b3a5579a\n42afa0dc60b32a6d7dcf230d8b7d162e\nf622d7d6892fe02937251258858a7a58\nef56ffb992754ef9efd9e6e4dec9682d\nf7c25526cd3740cb52e2d18963a75b4d\n41264bc3d705a6c1cea003eff0268278\na4eb161a000b159e2ddaf02885ddf74b\n3eef676eb5cb9db4e56bf1253ce74bd\n80acb994a8dd6d636831079c2c481dd3\na069fa41fb01fd06ac88fc1a919bbb85\nf090d4f5e82b3c25f63a1cc836eff7a\n6d9d1411a046934418b5d5fe1f3ec412\n581d698b6364116e83e95e8523a2fbf3\n4faf91d6e511e153b20565fa9224214d\n74f407ed9d20d799df0d738d0f301367\n2d52675c865f669047bc3701b998a7d5\n3237f2e39e0f2f38c3bd24f986301745\n65dbf1f9230a2913855931d119219022\nfa010af968a0e1635ba41eea807f5d3c\nb08dc9e0fd675e6664adc666ed4e2ec1\nb69b6e09d5f5bc1f21ef666e979e4e80\n17b2481d38b84b334c37b9ce3a3de242\n1c7d7b6754dccba230bbd4cddd04c77b\ncea242a600c342fd33891f25755e1e1c\n8222dcc1680112635cc877f4f71ba410\nb7e3aef758749005c3bd24f986301745\n96aff91d7898cb1358df8eeaf3dad1c\n6b678921222e3375f9395f1ee40f845e\n19354bd08463173480f6183c41836dab\n3a36028507ffd1a6ddd15630382184f\n6746eb452d8b84323087f84b199fd297\n33e59bac5a2a5c5e8300cbd55c34dfc\n80e1d8c228dced88ba6d62b5b05dcbc0\n22add506f2a09c8dab93f6188b226527\n8438555826c5a19079368d1198f406e7\n323ed7752b2a1db03ddaef18f97f546\n15c32aa0f0dcad130bbd4cddd04c77b\nd2222dbbaaae806cacd0ab81dc64966c\n15bcc664de962b04e76bc197b3a3ffc0\n2a44f4def2a20e7f4b3c42e318f3affc\n940dc92bda153346eaf14273fa406ffc\nc8532b5928b242d29ccce4c6d5bb195f\nb7bab2a7986f34005268928fe2c1fae8\n3fa4d59a29c3b506a5e91f4d594e20e6\n10e279c69b5678d39a45b69dede1154b\nd2a331898525d0d1c955e5ed03ef3a2f\nb95e59bfc90c4a0a266a96e416bad065\n35e1541babf368d83328d823e2d2a6d\n318f4fca1278ea7cab0467582043bd43\n18ea2f5371184926764a784715fb668\n33b56fcb0b86e914c3bd24f986301745\nb78d5b0748c83f3f855931d119219022\na133b092d24da436e7d9f0fed41b005f\n5ca423c2f3d176f94c5c5c89015f1980\n58b499ba308f9e82b4c161851ed2b4e4\ned36c49874dc325698fc83ea562f5c95\n7216c7ef1edfed4e593ebeeedbff73b\ncf9ed2af8cb3085917b431cae0dd70ed\n50f1ace689c05bed30bbd4cddd04c77b\n4ae4635c7c69ea908d0eb3d070197e49\n58c234e30f95394f61aa7729a1bc4626\n88c9c7a40227e935487003545673a337\n273b31cfb08c2f2aca9e6cd07e5806da\n6fa6f986755409b77f4b44e9ef57971b\nfaa5d5ba2a002922511e5b9dc733c75c\nd5de572c3f6517374b3c42e318f3affc\nad6317f2a90d71f6f4b6538438a0b930\nd073f58c96c17aca95786b1c8687acc\n515460eb527d3439e76bc197b3a3ffc0\ne0ab42e831e007cf9be2020f4ae1ea66\ne3e1762fa7f935b3f6287cb48a47c45c\na35771ed1c74b778101accd22c701b9\nd03cfa4dfa08467f19620b61f6587b3e\n5edf1990c995fcd7693e54627de491a9\n680414bc3ea1e9a67ff6ace05b36a5\n3de49fd2e80f8c95c97cfc3e8a6b1d16\n8a91b91802db34ea409421506a05b6e1\nebcd23b7d8d9247292cf95a109e87d7d\na80c06903eca9eef7b05ef4148fe3aff\n34ea33172f39665022d09160e03f114b\n81e223168807d7be74971c311d25a3b4\nb00d6677641be37dbeedb4c8fd29e2d1\n23fa6ee1004e6c6ef4b6538438a0b930\n84f0b08cc2d6747b593ebeeedbff73b\nf7646a27fa757afe1829bffea9d18abb\nf41e9600bd8bcb92716a0dc6cbf69f91\n836157300c030c9a246b9f2ca347e8e3\nde24c1b05f0ee7dc58674871bd9b2e6a\n78a93c794aa77beb47bc3701b998a7d5\nd796405237a2721937251258858a7a58\nb9c5de845a1f5ccf23f93d9b8d14f53c\n268436b1c1750a1e14659d605ff53c6f\nd5a7ae84e93368c28b015826dff11d35\n80a86204247b30fd21ef666e979e4e80\nc7f673b7b956508cf51f77a6d7299806\nc8fff605d821d607ff28aa687ec5e78a\nbf293b370275cac173eb02f1d995d891\na414a3468a40d91027a4a1658277b4d4\nc35990badac37b256c09970ea0def16f\n4d3a4749310a3d242bf2627b2d231d97\nd056e7c8c972455b22a22d22d00874ec\nb11f985f0b3aa23379368d1198f406e7\nb61dec9a8ce09e4b80360680c1602c7d\na31867914b71ac40d776c08b6a3d0a38\nbb9304218d9741489ccce4c6d5bb195f\n692e96270191113358df8eeaf3dad1c\n19140f9ff7eebc13470412e9b69c8933\nf64617385056e0b1beedb4c8fd29e2d1\nc736eb1545f8b7b4ed403132b02528bd\n882d74e3afe42d0b651fbe0e01830a4a\n65acf2f512016cdf553c860eacad5e53\n15fd9085d9aaa0fa43ed4f51d7ae210f\nb41cc94ebd03eeb2593ebeeedbff73b\n3bfc7947fb8abec5d925b06c8689bfe2\n7602875276e42d1990eb1f8a00f61726\n1e60953829fa7e0530bbd4cddd04c77b\n855f3c5541cfeffeef5609fd2064c33d\n1cc337d9f3f6d8f47f45370489ca3156\n15180f731834feeb2f0a9a342c0178db\n7ad475266c37d4d3588d78fa7ad8e5a3\na269c3b2b456e61af4e73c80c5eb704f\n757deea50fa00eb4e5595fbfd7d35143\nf0e18881d2d01e91286a9d56d8187adc\n7807ff57a21a0ab8740c0058fed336e9\n4eb3c0cffaf389fac3bd24f986301745\n675ac6cac5a81bd3811cdd52f3d07553\nbc2f853a8f2c42701b126712b4d6e5aa\n7722e83d837b5bfcddafe9b591eb9ebc\nb62f2d11c2aae12cc54baced9903a02a\n69fa3275d6aaf1dcc9ee6bf6bfac3917\n2d5b8274376a7095955824885d6e7dc0\n929cefd882de6f9b5048ab7650c7a7c\n14e1d60337a533acea003eff0268278\n24eb7a5dc2b20ab8729c5ef452d153c3\n2add476bbc4144e57c9cc507bfc0f85b\n6739b7952f7e53a7ee462e7a3aa014c7\n795baddfac35711a30e44a4c4faa2773\n8f059d82a5c37104587d0dbfbd9ca24c\nf17e630571a76d4f4b8710a3469971b1\n35aced569e5e1d869d10bf389452ce96\n58b58d56e5bb2faa16fafea97f025a07\n14d0926471af661e3087f84b199fd297\n516c46ceaf6619d07ff6ace05b36a5\ncb4cd38679773e6aa1fdf150cebcb587\nd28e03eaf042c33d714531f0291497fd\n7e1d0214a916543b37b2bb75885cfc44\n6eb9e1ec0365f5cce7e684d25d4dcaf0\nfe57d6cfb3ba455fc35f1f8a8febbdc4\nd1fe23dc2b62082121f2d1de8124ec62\ne686855b4c95330db3a8888e78d004b3\n695639f21a7995f592d5b25c536d8044\nbbeb870f0ad9a17af84b0be7f50940eb\n541ba3fe085905e19ccce4c6d5bb195f\nfed82f2ee0c82f97beedb4c8fd29e2d1\n24dfa4c63b11373f5bb375b194991e4\nfc8b1310927ce3e6d8d12f352b5e1839\nad26e8e474d42a4a79b3e1be3524f72f\nf8f36e7871d0e8382c026fed19c0d206\nb48d04aae94702504b3c42e318f3affc\n641f479a3b90e659282c910029b5cf54\ndba86ecb3a5a4d234b3c42e318f3affc\nedfc8ca3568153d7e8ee6c6df61c5951\n1e90d86b5649720047f453c4a13e89b9\na452252cd1112d346cacd811e7524a0d\n3f9b11fdf6d5aa3d9c75eb4326997fae\n5403184c2b01e0dae4061112aefd200c\n3cad8d726389e5dca5e91f4d594e20e6\n2c5d6e88359ccffc3396b0dbcf4d4bc7\nf1323a66816293be29ae2bc03882456f\n4f4ea0588e9444be30bbd4cddd04c77b\n8f1934c5ca7772837d44dc16af152638\n254bf8d40be1fcb025a517a55e2a2141\nbea8659e45a1094f625ac64d4da8b7e4\na358b5f98f632adcd1fbf79741fcd6d6\nc8ddf2c234adc19b6e848052f86fa0c\nc28f9a82cb7ddbb53651bb31f42d2f80\ne5f797c0266733a49b8de25d88149da8\nf8c37aece2b1c730928918e6ee92e0f2\n6da3c94506cd3e114a163d2b227b320\n3d929eab6abafbc5cf004563556ddb36\n895c87ab1c2e404de7c7920f6a65a54d\n1cf7bee4c0dad464c3bd24f986301745\nf9d5c41dd092dd8e78c10c978f26802f\n74b86828a5adb4c15b4baf82e4d24faf\ndb3f9b48562440acbeedb4c8fd29e2d1\nec34ee731c9dd55758df8eeaf3dad1c\n84d8b1ce802662984fa8d6439169bda4\nb62798e1d1075115e870ecf4c364a4c9\n9112b638a62b432e3521fe8ac6222005\n2bc602c2b7d9a622ee05b1e9462446d8\n10ca7bfe736d81b64b3c42e318f3affc\n54c121f22e8fb768b129901f80d24b7b\n3b112cbb833b57ce7774eacf69d476db\n57de7158b2547dbaf2a235c3708accb7\n3ca6199c8adacd4d30bbd4cddd04c77b\nd9addbc9e91eb0efb1b6b0c5ddacb607\n8fe842d92037d55be6942c5426df6055\n7ce1b7444c3ba89e74f1cdda9579594c\n178703fe974f63e9c3bd24f986301745\n2598bfc04772f90cc20778ca035801\n696482ce58cced1044b0115560181a7a\nab55372db393e4259ccce4c6d5bb195f\n97bfeed6025f68de5fe8cd129a2c0fe0\n77daa3ded63dc634d83e8d4109d37961\nbe0174f29dba41c19dd07b7af48c9a5\n64ffb47735074fb128ea9c4c28e5ce40\nce803beb471c728a4f5f1d630285ffb\n45c2a08625ade6e5e50eebdd2d05baeb\n366902c0009575664f856154cf68897d\n92c68ae13848ef32c3bd24f986301745\n441bfde4486fb4cfc3bd24f986301745\n2ca3dcbd06295835593ebeeedbff73b\n575ac593154b95b6dae7645f889ddcf0\n466e5bcb7038889d9d48ed08450a6532\n927903e9992ce4877b619f30d1fed49\nc153d0d6b4fcf74f54a61dbdbc1ac262\n68680849282fb0be21ec2f83d790ab97\n4e6db34a8ddef9abb9569033586af233\n71e00a86a67df6e9c225da989036c576\n1d53223952ac93dc3bd24f986301745\n166ca6382eb80ee830bbd4cddd04c77b\n6e13d5d26a0c53e13a66b6fe2c876ded\nac747a86af391b9548f9d76a105d8448\ncfe15cdc16a2e2054e2e1b2af0cc59a7\n61527f3ea1741800c3bd24f986301745\n866a07295aa3a8ea5804b7e86be64166\n1fdc88f78be6ba4e14b86d5282eb8301\nf80cce35d167ff9b855931d119219022\ndee160f20e1195a4b2cf6e4d01862bc5\nd3469cb008d98844902c0a1a69e25bd9\n10e2e8385b5322144708f4c6142673f0\n2f1a310ca0fb6b0177e131ed5f0fcc86\n90cd6fd66e29d712486040c0d9e85846\n15ec20de98359ec88de7bcb173109d60\n57d7f4c5b427dae69dac46bde4c69ef2\n3ab6e079e4af17401a53162afec5ca5e\n9ba82ad65b1e90a1f51fa0238791f5dc\n5bbfa33dfdab27e5821ac289e2458975\n6fb986ed2a4db0c1bc7f8f77923d8ffa\n855b1a33bfaf996ea1fdf150cebcb587\nd1fba8006e7f72bd7228984b9aa31321\n9c09df47d2aca46ed6f21f7a864a309e\n6187d4be01231460a341228b21d337a9\nad7ae42e620d2ce7e074517a246f1e65\n31af0afdf9d7bcf7855931d119219022\n9ad91992184e2b3e283b00891f680579\n539548613fa54b6725aae1be30d7ea21\n4f8ea79100a324b77445d25f394949d0\nf9ca04891f79cf2871124212e03fb7de\n8d35df98a26e8317a193550461f84122\n383fed2f8f81108c6fa63795f94c4d8c\nfd09a960ef86fecfc515407725a6e525\n387b1c9a2f50ec314b3c42e318f3affc\n48efd13f8115e3cb855931d119219022\n5de144376ad2826329909e9b8d8324a\n96ccbfacf833d023c3bd24f986301745\na70e1160739fa533f820611afeab68c6\na9cfaeaa85dcb7663ca57f5648ff1b0d\n15676a89e39262ea852bb95bccedfda9\n7dea0c96340d5b9455f46d55537192b6\nde6f494dbebd91ede057b217c7790618\ndc1645a2d2b61e5950794366030f78b\n2933b92d193e31b46cff9b44fdf0517e\n43906b48471bc76e7571d17c374fac42\nb95072f2b12a3274d810b14a81e12eca\n1ae9db7da9a6bd449453695c10a417d6\nca82beca43a3b9b59ccce4c6d5bb195f\nfdf1cbe0d8aeba868c1cf3f7d7f0373\n139c9b504cd85237c5984c8ccbe1a38f\n7953711de0134028ee18bc48b60b36b7\n6c0ee01fb43f8f46c045ebb62fca20c6\nc450bd1ef8e17865557ab4b593540354\ne3f583837f5bb80a5526f91aecc0c37\nfaeebcbc4798714188b4ba3feb03ba8c\n2f07c59d4099b5762241dba92389a637\naef9ca5d1b98b85186ac7f2dceaa530\nfc1fff82a7c97884fc5e332306225be0\n2d12d4984230e79a4b3c42e318f3affc\n2e4715cfffeb76f6e074517a246f1e65\na1da0c1db8220563b6b0dd2a0b939a74\n36821105af341539d810b14a81e12eca\n319e08128a169440c3bd24f986301745\n3834bf577a25eb2d1ce5b91ffe4491de\n2555bc9595a45e9af36ea1eb6542fe7e\n61aea77ab9adadfb3eeddbccbf885e99\n19b849328f1a8e522ee60509601408f5\nf46c84466664f3162f023f89cad43868\nde1d6e1294552606a625499f7117f27c\n66b43780a0e81cbf16a2b5862518c93\na65dd1088e44917b93edb2fe34609efb\ne7f44c111fc65019e76bc197b3a3ffc0\n7d04f5a75055273af9aec59741c69cf7\nca2070bf7d1aa372cb922bcc33df0268\nad3e2d3cf9c03fb1c045ebb62fca20c6\n2ec13bb2c3d06c0543dbb6421d614c0d\n348b2880842cbbca4ca84d60642ec7e8\nc7778ca8dabfc6809856fa70a578baeb\n32c4e455cd92d2a3c3bd24f986301745\n4822e02112a450f593ebeeedbff73b\ne603a4f0bc12522558df8eeaf3dad1c\na392cd632ea01b6f53a71d150e481685\nf99f09473fa068dfc834d9ecc7d5f465\n87ff92c179ed5ed292f4c88fd91c6b1b\nd3030c8698bc2f874c4c693a60456ebf\n4489bf9e90a6918630bbd4cddd04c77b\n650dd98cb20580cb99860e9353bb52a1\nb70eeabec7fd454581960a3202db094d\n978a4869d7fafca74b3c42e318f3affc\n53afa98f1de6af6d810b14a81e12eca\n2d1fef407ec41165700ade95b2f08044\n7f23cb04feb40ced8161eca940958ba\n30d6d671a33b6c22e76bc197b3a3ffc0\n4e3191c1f133fca0586c8517ad05e6f3\ne1369c3a3daefef158df8eeaf3dad1c\ne5c44394471f29d874739c2c9ecfb3ee\nfbf5c95ec6febbeb07cbf788ba0557c\n89875a037902c0664bd9e0690b0b191\n357d9c5b669d6aa37ec818a4524845f\n4cf6260ddc4e1ffc2ec2c1c65e9866d\nb61984e31dfb04c1d1d031a1b745cd85\nec0d4fc8d4c29e7a7ff6ace05b36a5\n4643de4838d7048437251258858a7a58\nc2b9613e2898f3381c7afcd6c011dc9e\n150c9c514d3274b315e97d83801e911c\n10f3c10837232428c3bd24f986301745\n11520534ea9a889c7d36177f6cb74069\nf46fe188be699e5c593ebeeedbff73b\ne367cc737c304024297936c81e7f6629\nf0735e59fa7222f9fe8adc3c073336\n9be8aa90001e8f6b492d9da2668ec34c\n949e39403ab4fab37ade8e3ca8db8db3\ne7abab128d0edb033396b0dbcf4d4bc7\n38b0f5874f16c1264307817adcff8140\n499ab88b7bd33cb92466f73de2a564d0\n53ff581b91740efdfbf96e9694161951\nb91d82b0ef56c395a8005eb66c8d94ac\n598e49637250f85d58df8eeaf3dad1c\n57754ca0ec4fce12990d726e600161b7\n121a3040c28295829e4b5aa807bb4e7\n5fc5ebe830d27064563796b09a95b12\nc3884d2d31ac0ac9593ebeeedbff73b\n9dfe5cbbb78cd26c9ccce4c6d5bb195f\n9e84d2ed1fc4a0efc772d43f7a27a1e\nfe3a8b30aad625ceec56aed2da084563\nd753e5da9b064152ef2438b4b778b7f8\n707b9fa6a564ba0e425fe98d8cc1c2c\n5ba5f9648b50ede83918f23e2305ede2\nbfab799cd63b345e232dbd6edd2fe625\n93d61cd5da999d774b3c42e318f3affc\nbaf006da82e4007a2d79e73bf7425e50\na0f2dfdf0d8be7ae8a543abce4efe920\nf7449ab20f45bcbab1b6b0c5ddacb607\nd656a6250fe0058fd810b14a81e12eca\n40b9f144ea6f35659928e3bfce70611d\nbae92d56010d241157aaa9693588d48c\n33dcc9e237783c3c955824885d6e7dc0\n64a7fae36a56705e3ae0df12be078c7c\n83c5f5d8ab0733093fa313db82fc9cef\n6c50ffea3a4ec86655f46d55537192b6\n8b7175b6c74385ac87187471eb78d702\n54598a1cc5f389ffbeb83c64f2162734\nc0882eb8eb6fba2d8705931e60ead6a0\n831c0e0316d51292df562efe672dd5\n8d177d02c291deeca7f2f03d5c90e79\ndfe0eb3f446059d0500cffceffd2bd2b\nd634c7577c8bc1f0492d9da2668ec34c\n3f058be47b5d4cf353c1d159a8a8422\n2783c8d705a1a146668ae11a7db5e82a\n73d4df18ad195ba6492d9da2668ec34c\n96db71d279b97c4ae02c30c9027468fb\nc3e5380fb498f749f79675bb6cb63c97\n18634e783faca47d668ae11a7db5e82a\ncd27c39dc711626d7e9fb8aa5670f37\n421657269cac10f7492d9da2668ec34c\n426a9fb4da504a96db3e66b0a511465e\n680a106cb0098e7fa71c812e027f94d9\nab0393b07d2965ef79675bb6cb63c97\n32bbf7d09d3acd4c339797c21e8801b1\n6848c467de649ac2af5e7c004818a73a\ned554b9e04b7f7eee7be13c697329304\n8fc6c8d02b4b0cab14038d588fd1342f\n3eba5f6a09e87969b76e29c9c43bc7aa\n4f64eee409e34b41aa8d36cc58ba1cf2\nd956062bec339ab6c67bebb34dbddc1a\n46165d8076918c62f51f77a6d7299806\nc0401853da58a1b7beedb4c8fd29e2d1\n6686819cbb40a3502aa2b411702b495c\n52e0dbbb53159e0fbd8980415d183a3a\naf5fb0179304e7c48cbb8bac2032149c\n5667350dffa82263968da786c4da00c\n12b1fb7c765dfe8eb76e29c9c43bc7aa\nd78d509ada047f34e1a714ee619465a\nd7d732d0ad7537eb610c2a68437007d6\n317a934556406ef84b3c42e318f3affc\neae2c096070f0a57beedb4c8fd29e2d1\n3cdf9215a9cf0ff5855931d119219022\n20129f3c7b65b98b9856fa70a578baeb\n217a31e6044506f41b17743c18fb63dc\nc5480855c540290ecb922bcc33df0268\nb7aedc93c53ab7c1490ad276cd2af3a4\n883f5e54f764056f6dd4165bd7fb497\n53b0206102d236c99f8c3d2002c77ddb\ne7abcb9f3d5876962b70eac6546e93fd\n5bcb0976657fe6df37b2bb75885cfc44\nfe0a8440aef8f597a6656391f7752a4d\n2b88cee2ab30101b9b11da89c22111dd\nddc6ea7906f28cace8e2c411e1e93d03\ncf52e17b21021ad9490ad276cd2af3a4\neff1bc2f644be748490ad276cd2af3a4\nb796639ea7368f3bec11953b27b8a03a\nfd79c30bf108dced1b17743c18fb63dc\n68f2795c385859e914038d588fd1342f\n673dc4bc9271880fa320e34dad7c78bd\n3695727c04b15887b983088451bda93b\n815ceec9c8f5dd754b8710a3469971b1\n14130d541c4a419df51f77a6d7299806\n3581d1bdd22e782a855931d119219022\nf260449e91824f96d810b14a81e12eca\n96a2a4c8e6b988d5676612319c6a30c3\na379cb01e0a98298607974568e26586f\n254cda2719087d58d810b14a81e12eca\nf511c1d4356a6a7ac0a61ad1cf92b694\na6ddbd0556f5de20c64b3fdd6a5588a9\ndf3f7ccdb375675fb145a08fb49c17fc\nbc9650bb551fc22e1f6014485d7eefc9\na1480d2276574cfee6c5cd45aa112726\n58479ad882dcbbfd9d297e74104d3ac3\nfe621b83750698a6855931d119219022\n22ea80a1c8798eb22d19175e7d19b7cb\nbc4ba0bd86545f3fcc749dbc8c455b3f\nd9a0b526a354225dad1da5f59ea6f4e3\nf6c1a97812bd6ebd952c86497c2cd532\n3d08a0ed3ba94fca6652506d959dc71d\nfb91ba29b46a519f8f37c398c1a74a0f\n7dceb027969fed5e2c0a7b8ff2381a5c\n2bac94c17bb341d84ab0e621f58e2d20\n77e24ba0c290ac3eff87aeb86717e73\n61cb695902f7905e7afed106527393f6\n6216ba4ee25256c9490ad276cd2af3a4\n7fd8601b0b0a01c9beedb4c8fd29e2d1\ne67046b9860feedeec7cbf3284585a40\nc1d99397e37782c0a8699b6183baa203\ncced836d07325938f51f77a6d7299806\n98bc840471b4fd568e6da51641e48238\n6f1594512b88901798fc1d0403f6ad0\n4cac98acfd5c43e1f51f77a6d7299806\n2810c2aafcdd9fc3f51f77a6d7299806\n2024beb1477fb5d2278d386bfa54545\n3297d1740b06d444855931d119219022\nadfef21c37071016b4c161851ed2b4e4\ndc4ba419b9035c4b917b96045c9b6dea\n8106aef3eb88f9e4578defb131c3ea1d\nfc7d921df59e86e6beedb4c8fd29e2d1\n37d500b1bf8b3a5beedb4c8fd29e2d1\ne4e30282a0089a5bff06c5af4a0771d0\n65e4bde475632e5bbeedb4c8fd29e2d1\n6f85f70a77782307f4ab13f4b49ac318\nc02d673e9b7658d52b70eac6546e93fd\n3d5f5cf765767b0fe8e2c411e1e93d03\n59dd1eef8072ad8de074517a246f1e65\n54b3cb531febad83bc9f3fbfc126b5e4\n81514408605063ccd7be956e59a3bd7a\nc733e81695923586754784b56fb4c23b\n3c5048910fe8919ed810b14a81e12eca\n6e6f8f0ea7008fee620851befcf2047a\n132ffa7d607ffc53d810b14a81e12eca\n6ba6309d74f4a131272505863dd1b8dc\ne692a96adb18ae3fce101336817a135f\n5633513a1cd1adcd9e9d84e41b20ddea\nf4692dabc20f58e0f51f77a6d7299806\n2cd0f589d64ea3ec36ac40071701c687\nd1ef98cd329a71d1d8a323bf2c61bf7a\n8eb85236a450db4c44e1d3da2eab581a\n57c21a71a3518b6a1af550e7b4aa14c\nf714747e5abc01cc14038d588fd1342f\na06c61dbd3a5f3a5b903ba10d2ec446\n3b391b1f9337fb5490ad276cd2af3a4\n4e48be33083b8c70d810b14a81e12eca\n6818e317471cf5739a83764a2641fc5c\na6b54c79a942cad5a6589c01f678d8ea\ne6cd72665faf3180f2cf6a9bef44d625\nd1087cbbd15f509c20768660cf080d12\nbf3b3076b1f43b8a855931d119219022\n6b01be46542d507e674ce64e4bf77aec\n95d3519b036c862d4e3155c362b85bd5\n11f1101ba2e29206cc963bba1556032a\n7a95843ecfa6e5b7c21dc5ac5592089e\n8a07b5fc233b5ad2f51f77a6d7299806\na5cad9ba5e73ef239b11da89c22111dd\n317d8dfc74e872832b70eac6546e93fd\n2afcecd6a801171dbe25fbd47cafc694\n76b32980bdb108df1b17743c18fb63dc\nc8e516785cbaa85259f8e31ca87c470e\n9b91c3d35057b2f93eec26c23f5bc80b\nb15ff00cf3ec4dda14038d588fd1342f\na80fd4790dfa2d226a4bc5d920331917\naeb5975090a272b89f2349486c570dd4\n282b2cd82ba901479f8c3d2002c77ddb\n97a137cc6688a07c90a9ce3e4b15521e\n44f0353cdb820886be25fbd47cafc694\necf3f077d30540fe5d5ac0a8c21f0bd4\n15ceba504a820cdfb4c161851ed2b4e4\n580373e581fa155d3ec45bd2bc895504\n2fad51052bae2366377b9297f3055210\n9e3514da2268557855931d119219022\n5b0d2362c82416695b903ba10d2ec446\n7eea0fef45efd698a22a3fbee2fd609e\n9d18858529b76154aa7cb30470f3273c\nedcb2dc19b063f8ba8737fcf23389014\n1c996c187f4354db7252c133a7e17d94\ncc3f1a06508f2ebd1aed2875db0a8711\n9f5ac902975f409e820018801b237b3d\n6db77fbd32e0af3e3f9d6e0ade5188b0\n3be738da92d36dd09db2b194203875cd\n3d6b55fe2deb2aa3a1c746794f191dc8\n9affa2569ec8968c60edf8bc2f5c8881\n44e9b15e214b390b2b70eac6546e93fd\n2e92e1ec1038ab0914513156cf2b8d0d\ne0bf1408425c886da159545213d74ea\n481e479cb50f251a7cc7de242a4585fd\n37dcf713a1842b93a8699b6183baa203\nd94795f08cc91051a7bc6296cc70fa9f\nd29dedf88bac00a21c19e7863a1c200b\n38ededbc1b3693cbb9aafffd8edadb6c\nfa7a8f6d4c33a4081f4e3943babe5979\n4fad9f5ab1d22ea95445fd9f27a38098\nb97a0bc7e2213913ae96150e4aa362f9\n1dffc3840500e89ab8e1b99345a5afd4\nb4a66058027312c7ac51268fdb437a9e\n322897a771d4591f980d4e1477df0f00\nf73fe719094a76ef62e5325f0ce7656f\n1b73a0ff61df00c5a1cccbba517add5e\n8f02a9ff58479e59ac51268fdb437a9e\nae5b18b3515c84ee39683a06407f7f3\ne5413a9305d52482ee1a5886e50e3f9a\nbe509f0aab6ce96251d3c864cc68e22e\n8a45e9dd681d40d4789ee5c8d247b09\n7a0eab4d41f461e980fc8e4355cf787d\n821f2cc776043008efe8aae804e55d6f\nd058b63b957076771d6ac856ecde9eb2\na6681ac778c7c314843f1df79528e538\n5ea758a6391a2f814b7c5e48b51e5c7c\n5ce75eec38f8437c8a64c4f643bb7cf6\n23fdefbb27881722b0f92c9828c358\ncfb97383aaabd98ead67befd78c3a0db\nb12ccf1813b424864a62dd9e5e4067d1\n1fe806fc0004aae877845ad7d2ecfba\ndad3122c094cf582ab82b08bd2b110cf\n1eb459fa4f1039ef8245b0d36e16cba8\nd49d33a379000a8d4b2ec20c30ace65f\nf50603a59b5c2ac7650419cd627ce18b\n4185ad2b10b278f83889b52430b1ab3c\nc9c29b00aa05386562daa5fd16a7828d\n365bcd79e58fe001243d6e2cf3942343\n3c9c9adaebd66ebc5fceaa39a8353bde\n8616d1bc989f83ef2df099df387d2211\n2145e510632056161afe34ec6aa383f\n1bc212abfc3ba87ae5c3f1a4056686f7\nfa09f5e809d1c8c983b3f8b7586237f4\n1c2fb38795e6e3c858df8eeaf3dad1c\n31678ef74b85de0b15b943c35c765be0\n75bb849ce0a252e72c1a544eca74c954\n15bab3d19de247cd9cd431573238602d\n887ae0ad66669f1b302fb2a9e79d3e7d\n41ffb4ec3d22e9dd9e7e7bd5f870f40d\ne9ebf354db8fc0fb4faac606fa48b508\nb90ea1e6e5574e5814038d588fd1342f\n6a436b27484166629f9a7ffc9bd1e3fe\n5b0ca203bc4021a2cf9ca735ff10053c\n2fe8de498d0f00f51f77a6d7299806\nc92e4772e218f5cbef9e56a2aea1eb90\n140f12d10c2b7fd5c77467482d6e756\n462d928e94689592cb2a965e75be701c\n85fd80db82120aa719fb4103277a6b93\n4386633c2d2a1a2c5fceaa39a8353bde\nc4bfc29898e5a1b490ad276cd2af3a4\nd35890b708c633546f31a2b0e5969628\n8dd1ca36888301919fb4103277a6b93\ne157bbb54d5a2ffdd6944324b21393b5\n2f257e35ef61553b63c9ead28992f1\nc958f04d72957fb855182f299fe41fdc\n552692f06e4fb0c9ec5b06c6d7d7648\nd2d5b8f99d977e353002761e7a3ba3bd\n9c5571c45d44edebb6aa381e6d41cd4\n469122d4947cf83ee6942c5426df6055\n85f2fc137f3c7e57a19748ad08476c18\n1686831b1e585dd9729c5ef452d153c3\n40f1be4ede6113a2e03aea0698586c31\n33486ab58b77ea46768449c155e32d73\n1a521b256704b08fb6068c62e84866a1\n5f3fd62e285aeaae4e2090b842effe89\nefe2bb181502eac1f3c9c1464e55d580\nd0b38b27495542461b02cde7e81f0fc3\n9da02326599123989bb37ee549c6e937\n57c935da692d6e4c27c29012942420f\nd3a1f88f644f36722f92c6319744ac70\n327f5df925ff54121dc8654936e2968\n1a2914169a3a1536a71646339441ab0c\n9cd3cd9e93ac389e82db9fca4b68095\na3064f61346b7891ea0464486db6b687\n36f53cf8a68d1ea73ca57f5648ff1b0d\n9551ceb9c3d5013284c687cefb7c213a\n3338d1a99d7387562a488bb287b71f6e\n7fdb1575e7f15c199d9fad88e2f4c8ff\n9dd91ad8d34c249970521b3539fadd3f\n3a85ef469535f0542cc8fcd230a7f687\ne0b333381b21780495e29b6e21e8c291\nac646aa05a0ae0e11b604216cb6e7d3d\nc2369a8875367b56fab6e40cce6926d7\na9e23932f14fe0cd323ff07d83f4248\n35705c4e27888e5d27b31bdeb5f5c79\n4967c4df72373464622e43c0e0591de0\n28743475c1892193b0097f8288b985a5\n52c379f93a8ae9de276f41435671c8b8\ne4089e22c991e2dcfd277d65d018c82e\n798fa47b8508c8b162a510b8f97c658e\n7d7510e6bafe8d2aaab74c2fedafd\n88676c2f87a5b54c4500047017815f5f\ne458913e25ca7053c1eb59469984d29b\n462afff41381a622ffcc22765a7dddc5\nc65061bae7f351e419fb4103277a6b93\n1a23f3f25a8584cc49fc9876b157a42\n938c5e8ec8703d5f7ff6ace05b36a5\n6c9ab42a8e028b103fb0920a55a7e805\n92fed8fdc8f881d2dfda46c9a34dab22\nb8ad178c1d78980472dc9d42e683347\nbfb2cfb2e454160d78cf5fa17988625c\n3779ef1608ed12dae074517a246f1e65\n548c2b0a10a3f8c798b664231032816\n2e23b1aa756399ea1138d031cf239f4b\n1ad008783272fee4c3bd24f986301745\n592819b967c53ef0f1755b5047ed68f\ncbd789375190fd62f3d2cb60d3f3bab\n5d00596375ec8bd89940e75c3dc3e7\ned45493414f9214687694c57464ff1e3\ndb49ebac740bdb91d016fde69633b7dc\nc15b0b5f7d835b5012660c1de94a79e\n599cf052b675ac2c8457b637f6fe1690\n4cd743a60cfa17d6b0a3f25f5d8cb0f8\nb5529f6f5679d705c8b2ff62b26cb42\n5f32ce6996fadc96b3f49378110b01ba\n9e0284056aed2a097543d7dbfecfffbe\n9ebaa0f7c3a7229be1fb37eefa671b59\n1ba26b0ca7507edd7c8ffa57cf4ce53a\n28f702b5c6ccffe7fcf9154182ccb5a4\n72194d338303b1b155d7f0828042fbd\n3d38d16334e796526f3d2b1b15fba494\n4fad1101568fcd48fa7b9a6c80e4e324\n19c5696d315c359dda90d20b69102dd\nbd27680b9f09262bbdb2cbbdf53d8900\n1a417e4090ced738855931d119219022\n9f56c17cafc1ba35bcf7c2310bd3f83\nc45633a0a85fb4d0631c3671ad15929d\n8a1f9d4a36baf4fdc563fcc2752ece39\nd06b3f46fd5a901d4854921d37f7e048\n10ff43e8fb49af1719fb4103277a6b93\n532a4a4b8ce7b6feb9ac39a10cc48e08\n3f682ce98ca01c85b3cf15c77de45986\nc06a4b0f57cac2b020afdc30846c0661\n83952bdf5c426c4a85cad391c250db01\na54de0e6573dabc0ac42b9d8db52fc14\n41d18d4668939ced3a8e4d3441f2dd18\n7368b47a95e0db8886cc6209ffc37d3a\n1cce99367326fb45a7f4087375d26b7\n13c680c1fd4d1ab4bdaed8eb424ecfdb\n9f7a8670a87dbde9b50d0c6a0c254040\n8c7a08d437dc8431369b4bd8c721a288\n6e3a2f1de25bcde5ed6c51d5b9c713e3\n5d10c947cde5f37f2e7ed79f4f48ff79\n3ab1e5d4f889f8f1cb7b25164a43bff\n3889c517afd62ac5dbe9c90af547c85d\n9db8f8c94dbbfe751d742b64ea8bc701\nef4bc194041cb83759b7deb32c0c31a\ne603bf3c3d2d26f9579e0a60e99d2683\na5b1e3e2c602d464ded526a7be77b30e\n4a3fe6b653bd51d03d5f95f9058dd0d4\ne77fbb3e21ccacf1a03bb2c2325d6f92\ne9fd9958920adc279943cffe175cad01\n6b0fc2214ff06578eb3bc6c6d15f9bf\n56fcca11e3d3a920c1702e8e8263bbd3\n9bcd5f77b6eb92ec415434d4384bb66e\n9cdb0315eda9e8cf9f2c21e46768be21\n5d90c1e74acbae27475bcdf5ead5bfb9\nff9bb9597cac5ef17a50afc9c93f8a50\n283e6da77ada4d65d42225b7548c8765\nb63c8ddca680a2a3492d9da2668ec34c\n8657197d00d103ad4ac2955bec7764a6\na0864018495ae55cdef39da7703174e8\nba52d8aed2dd75bba75f2876a99ed045\na5071459f9774ff43215fffb0cc2c59b\na8c9827810c66962f8fd14d222168087\nceb0c123378d24bd9f4b4145f6688869\n1cbd8a3d7208cd6b8990d2712ce4d993\n5b621e5fe06ebfc7b71f7e05ca67f031\n3d791e306d7ae620b3b8d66c43b5b940\nc7872212279d59eb540291e94bc8ddc3\n7269b683b73eb9a1aee34134dce9c534\nd064b468c3cf683cedf48f9fa39262b\nbcc14b683930f8d33924adb2bfcfed72\n4702c7f73c64fa81cc19d3672693a8a0\na5475eec7a98a02671a70be9f12ce8b0\na1c04a11d0e20691fa3982b18d6e7664\n199676c0434f5e176bdcd672c2b17215\n649eda5783cc47e7948cb8e1d9ee487\nd1fab6f92fb0682763a371f6fe9862af\nc6fc2ce48ae9867d688ad7d3969cd02a\n59a2490719d49a25aaf15b62af6b513f\nfb5d7176752898cc5fceaa39a8353bde\n4ffb8579bf17a5a7df253edc1fde0322\nbce02d42bfab37b2f4f06a8cc0f0315\n53b1f1781eb6339f5f4be3ad507aab92\n5b5f613742a2d960aec74bea859ea8a3\n2147aa5c55a3913c240ea0cdca7b391a\n8d3d9f1bdcb245b49eaa55bb236fb6e1\ne7c350f18bab885bd0bcb58c58eddb59\nb63ab8d3dd4eee098d95727c923f3722\n69adc52c58477affe074517a246f1e65\nb9328275771909fe920de219c00d1c3b\n683ca17c9b0d6c83f15d71fccc06917a\n9fc9605f6ed5762553cc33364504d5\n27cd239b41129a13c19a59cdcb309b91\n5b04e4677f1a45d3609211b089fcd35a\nc18781f9d9d6f34a79368d1198f406e7\n2167f82caf4ed2309eea323f522c6486\nd4063d86f6b2d27cd5b312abcf74b469\n4d81894947d08922beedb4c8fd29e2d1\n3c514c4f53e3f1ed4b3c42e318f3affc\nc75ad4217e58ef871833a34736708547\n1c3317b33bfccab0824080f516909671\nce88f6aa0e43bf8811099baf02792d0b\nc4e7fef0548b8d87247b7570b0fbe63d\n8b61fd451bb28c80c8bcf367bf7d8952\n9d832f72888892e66d907bf61e189d9d\nf9ac7801460434b271140e10b6211a6a\n7823530be7179f50e08668a8b378b020\n6560de55043db06ab0783d9ebb200d10\n24b997004163af21851a116903680096\n6375351785793a96412608755666abef\n42db26c80b9530b7c188d6c6d00e7440\na3ecb4d209807312492d9da2668ec34c\n497175f56357e331b4b7c06325f7a2a5\n7eef97cfb1b73681f1755b5047ed68f\nca577373ec8bbddc7730743b6aaccb6f\nce56b5a3ab23e12489aad4e9e4feaf9f\n5ac1ba406888f05e855931d119219022\n1c123801cd052c833bd248747cb27ae2\n4020a2b829f148a18d8c7827464490b9\n71d35a394d35f70619fb4103277a6b93\n111df730a9d3f2a8eab46ab0515e8186\n9b2ee4ca099fdcebb4c161851ed2b4e4\ncb8ee43492cbdda3bf6f067b2fb335d\n77e044ca2ebca1f4d148fd8215fc3114\n8bdb57e97f726a8133a39277b6bd460a\n86604589a588bfbd98cfd47a860803c5\n9e99421220d92f1da8699b6183baa203\n7122eeaaedc364fab5e360679943d9fe\ne49636394d4b0189523e5ffab409f73\n469fba8f6fa06e6d2668a5ff3e8889a1\n1c7ce8d5874553ccc3bd24f986301745\n38e83df89967420b876b399a99a15c0f\n15a95cddbc40994beefc4457af135dc1\nab08125b4f53c1779595137b79304890\n54807aa2b0f646a448efbbb060f51a02\nef92a53a5aa6ce008f88435cd882fb0c\n4d14547b54611e9bcf1ee9bc9708f08c\n2823fa4b1076324dbe0367f0d905ee09\n6351840a6f3b29d0a15e691028c09e34\n6bbd16ddf2f8be61377b9297f3055210\nd455b490f08607a57c6de7e52b00ebab\n22e3a5a8d22b268593ac14f56e1bb33b\n5141810a02a145ad55f46d55537192b6\n23b7e640f09dcfabf1477cd05362531f\n9d547553b8b68c062f3110a733450426\nda9ae22db57775cf67cda8f7f78d0d19\ne2a940682bf386d166e77edacd2d5e3a\n910a506648c64970a8737fcf23389014\n9f286ec40676d24e3dfc74c6ca03fa25\n7683778558cc36163fb0920a55a7e805\nb97cbaff986d5db4490ad276cd2af3a4\nc14e9980452c9411aaa05ac4e55dbacc\ne7058b820e66c9249cd431573238602d\n8ad1486390608fb936da5f8a6c22b2dd\n8a505843a90a7486dc2bb3ee5ca7ba76\n8a179c7244ed94f4f8369c172d21d852\n8dcd27d37c9b8bbad0733ded25052299\nb7eecafd15147c01fabd49ee8315e8b9\n9be919e0f9243b9beaf288f952624966\nc4071718e45630ee5510d59f3ab1ed64\n185e4e4fe22d65842095a33119f8ea7\n9b18c8de0d9d2882166ddaef2c2c61ae\n41590fb9de5414f244b154f79bdb5bdb\n66d7c4e6ba6c4d415963245f0923337f\n654d6b82543a863c3bd24f986301745\nd1e231e9fc0e9127ea6202eee73b76a8\n96ede227209cde474042244fe2d8ace9\n70f408c759664b953f99a25d2bc1902\n1c1f65cac6bbd1e15dd7d7985e749c1\n7807caccf26f7845e5cf802ea0702182\nd19c946f825a9786db6175ef18ad3f80\n841f48a81cf3f066ac00fd1150223027\nf86c1da9ed243ff055f46d55537192b6\n6b6ea2e841e2f00b60eb699207aa149d\n9245ea14da5198b64b21175170c559e7\n559582261b021b7e4f987dd564b75f17\ne14f505926399396b5997278ed74fcb5\nb7820dbf7820befb99860e9353bb52a1\n9a294d3a661f96a3c98555c181f6055\n8480f767da5d68ca9de7cc399bc9b2b3\na30eb4a16f30f29498648daf3d784f2f\n72ffaa15fd437b33dfecba9aa42b51d3\n14c9ffa70653cde3492d9da2668ec34c\n9a0d79f4e766f18c7d10f85858b5d957\n2dcbd662fa03dc88956c2c3ee7a48cc0\n2fde3d8a04798c325b937c87a8810c08\n5094e6f7e49f2006e6942c5426df6055\n234ca609205d8d80a1e28099cf3c0efc\ned392c6bd0a25ecf5a7a4ee31b873edb\ne88b21faa1d937f3695cf5feae151847\n20ab56e8a819c7f06a9633583f89b17f\ne4487798c95013956a7d64731fd3b515\n8d459a20748b23b8c0c6e803b020a614\n631a942d7b87387019fb4103277a6b93\ndae4f6f734088c4de3a031805ace4a99\ncf63d0c639cf4d36da1aea1fe709296\na223fb0172d705fc3234880d6f34f7eb\n4805127beacfba4a7e7e510dabdd3cc0\nb1ba4d962206bad5dfda4f5adaef3a7f\n7eb961d3f19080983ac416718757a350\ncd4357aae286fb57c5f48f9175316bec\n729673ab33a7c9cc4d3a0a56bdd58a7d\n589d2e18f9b85e4715dd7d7985e749c1\n21d160eff925f48055f46d55537192b6\n9287845470d119bb940b945d5ba9958\n1b7dd5d16aa6fdc1f716cef24b13c00\n8147ebedafb763f21fd3f440755dada6\nc5d499a443ef70906b882130fa92c175\n87666a40c8a35641c7166d921771062\nd10bf548de6c75a966130541a711692\n39dcbf2d99d0e7e778104ea7bb00d557\ne2efc1a73017a3d2e76bc197b3a3ffc0\nda7daaa940ae6700286de2124bf64f07\nc139948ad09b042991a3d45e8887248a\n70a4cc63977d8eb018d385624fdfc6d0\n33f9152bf617f22a16a2b5862518c93\n5c0810caed3ca0f83bec56bff764ba78\n4f31d399c2c778135fceaa39a8353bde\nd16b6d6daed62ead49936479d30607f4\n6e1dc5da243fc523c5f48f9175316bec\n1b70ae39748f9b97456cbf78e1e89022\n9ec420c3155ef5af707cdefe012d0353\n17624075a52c9b15cab01e89f60c9290\nc4ee00c87688f3b0b161476a346db176\n499be58242407271391e4d6c585a697a\nd8d504a5e90e5b48c3bd24f986301745\nd4f8060cf95edeba6ac2b0edda2c907b\n215dd9e926305bb7f8e7f2c38fe37243\nc4d4d0cde7e39bbeaeeec543ce96f24e\n13ec1052a32ca23bfd60059ad8523f1a\n3d7f82a1bfc5e1ee9dfa717f86ba8028\n1a9bb6a5cf448d75e6fd255f2d77a585\n1f239239d1039d60ad8e5e47362bc281\n6f5813533bb9001dd24546afc5de2582\nbbdc08f4f00c484f310af74324aae27f\ncc05a1835e7edda1c02daa819b61338\na568d1602f94c814f8a51dbffe0021e4\n5ac80d0ff2237fd8e2dba1fdf90cf48b\n192ec952a75014d09eaa55bb236fb6e1\ncce2b5399e5e46a45510d59f3ab1ed64\nedb69ee3e3e66e9bc242632b2a8c3129\n17bd2a95d2c691326fb8d4cf06fb5045\n14b96e25f93105674ee71d2f70ae4021\n7588da8ef1e427d1177f2a3a0c71fbcd\n7f3e2154bbe217d4143e713a73e832c1\na41b3ec61751fdce6c28547eeaf2a8c9\n1482036d8ce3b51ffc0035da39bd5e1\n15490f254e6e226835cf289fa8ad7115\n65f9103ab7a64e83cb7105765410e2d6\n67e6cd9381c22b9045c6cb69e0968783\n2ef075a7b9433b06b2b7d07d6c0cd464\n5771840ae9ab5a334a3ececf7e04ebcc\n3fb8797c780710e45213cec267286d18\ndaca80d92e046faaaf90989a4df930dd\n73d02435d9e077a75e062e3835b2d911\n5fc08f3f8c3aacb8456cbf78e1e89022\n93f7c646dc5dcbebbf7421909bb3502\nb2aee339ca0dfe94de1b0b03ca051f02\nee7e37046c26168dc2fd07f66cbad0f7\ncea61ac56a07271a96cc2d2cb6bf6019\n99a43717f3487aac63fba60e6c90121a\n209b2271f9434cb3c242632b2a8c3129\n4977e64ab070b003b778cbd50553af38\n68b5f18b0790e9e128ffacc8063f0f75\nb5a2a53b9b7e16e6b85cd7b6d43e8edd\n63ebf8f4f1e63fb0bc85ae0034c4dd9b\ncb65b7ed48165ab09e9f71d2c7dacf45\ne75138a7ea380470191dd4460a0b4ef0\n4368d1fa80c34433f88bdcce05b1a623\n6a3e7d05a7ceb4e1a3df3190f4f32918\n7f7bc0b7e275d1079477196152a8f4a2\nccc9cc45699f95f21bec2e8246842c2a\n7d3fc73ccd968863e40d907aaaf9adfd\nd6ed3a1e5d5eab8d97fe55e7ac43b9fd\n9b365e622638616d58df8eeaf3dad1c\neeaa44341a57c0cfb9531c981c83e1\n32d06518fd07df9bcf004563556ddb36\na8da41b28b37833d14f6a05ceb8c1a6f\nd32ccda2f4614dca4b2ec20c30ace65f\n95112920a9ab9c24f8555ec936cd4b63\nc6e3f651d2acdb0a746f36c9587bfc04\n6fd426f7cc1a2b00d5130a83cfbc8bfc\n46cdb3dd8b6c460d473f10e6caaeca56\n6c8d4952f67d47f56bf829b05be0ce22\n8478187660d5443186915ea7a2083dcd\n66bda56e82bf90a677ceee024ab73ab7\n66a3fb3a480c2b9e7b22e9efea2f565\ncdbe8e456a3e3202c55161a63fbd109a\n56ef806397cc9c4a62e6af9325f07021\n8c1775d71c36f89d6ca407465d3c74d7\n6db3d1818431bf97e785ff1b79dea9cb\n3585c614e9a6825fd42225b7548c8765\ned59a9478c7cdaa27d892bb924f972b4\n795d4213e1dac276f9814818e8ac1c35\n9e97c5ba09adfc481b17743c18fb63dc\nbf9df04aea08b0f0f51f77a6d7299806\n1bd49921fac3e815c3bd24f986301745\n98079c9fb39bc736f287ec53a469521\n88e73c92d8d5195fb8b431083b6191e2\n4cb4f4d4bb4771dd1d1d518ba4f78d6c\n6712647c8e0c6af29b6e5e087210d348\n61d9def9b2df3e40dc6f96c9bb9e3ae6\n99224f3ab2705aa9985ef0bf52b97bf5\n2c6beb9625fcb1a43c7fd9917aa4ff1e\n7730689fb323f88555f46d55537192b6\n50641bc54d5d41e2a85acc7b983a0d66\nd3b7021f03ecd58d2585ba435c7d1fcc\n1805ca3ac2779a443eec26c23f5bc80b\nee6a58b9f4a5a129ba5342d638d0c267\n3cbd3d2da993a389fb05cb5458b1da64\n128011ffc7787d50f0920fefbe028677\n9d57cb805345d761beedb4c8fd29e2d1\nc6fc21c5f51f169f365368fe0de21d22\n776732bc127417f28a7219d923f4718\n1a05bd57d0ea709e7d3ba54b9bdaa55c\n124c4b3afa6a3e56eaf288f952624966\nad243c4ca5f44fb828b75d6c308e3c12\ncb48a015b203b3084acc8059dcf0a054\n7a0ec4445356a79410643b0cbd7095e7\n4c20048e9066d768b7490c34ba5d2779\n46c3080551df8a62e8258fa1af480210\n3863d248581965c0f42980cb0dac8238\n452d4d4dd64dbd32d12d3a3073d6ef09\nde205371514307babc2e0a60f47fe031\n280949332aba8b8a6d8dfe83fd00685\na6e066da6311c2c7f4d017dd03935e6c\ne8300d560b8d60244cbf9a02e3342127\n689c4f50ce0aae27908caac6d5f8ca97\nc73070837a2f9efe1b45df3fb820c9cc\n2cef3d2d545f4a22b305a938e0ed1b48\nb3c5ef225f841cb59725f8348364f5a8\n176e6b9b4340f25a7ff6ace05b36a5\n951a9c85494b53993c2e50348f23d3d\n17c5c22c9ab97788db67d56f11b1bed6\n2199d0e64187366629d8eecf3827c486\na859f1f16a230a681a49add4e8d9a4bc\n91fa004401e96d0797059057d5df0d8\nc3134ae6fd6691d7db039d8689a74349\n8eb9536af97f1aa05608802d2be44a9\n7e833179b58ae9ec115e53c2ed23d57d\n5b99ce5dc47c76af3e57e49d8269b367\n2a0b5875dc999a7a29e047111bd79063\n4e9852331e1d5d8dc3bd24f986301745\n46dababb078a797011ea7f12f22c0e84\naa6a63745fd7ef284084fa5d51d65c65\na5815741cc777e643002761e7a3ba3bd\n4c529b6171aabea2e8058cf23f6382c1\nc8520226f277a6af77cb37b8e3bb5ba2\ne8288b5f567569f19fb4103277a6b93\n2362ec480b3e9baa4fd5721982c508ad\n621ae6c715e1af8087694c57464ff1e3\n2c094e4bfe5958267da1098dc15ca7a2\n64adf1d226e4a0894f4d213d7c852596\nb62908961c47a373b097f065a7be019c\n8aa73d4e62b33e8787e41ecbc4197db\n9f760e1d7ab97519eea323f522c6486\n1c228bbb8c23ab9295ba6c11631d3b64\n4fb0bfbe85fce25cf9a2c981b043f98a\n615b800fb332525385c5f690e9252fc5\ne92a4ff2b36cbf83490ad276cd2af3a4\nb37b72a898169c971ff2429be93a82ac\n2c6c50203f519351bf5f47124ed0461e\n20647984dbeb990ea6c03a53cf0a14c9\n9ea5a3905313b07e3d752b0785b76136\na7949f6ffcb23c178339e983761bc4a3\n86c467981ec229909b21a1a3552b6ab7\nec59bd4b5288991e9bb952e15a37e248\n68b18bb0c7eee83129e4b5aa807bb4e7\n80f8961877a467b23002761e7a3ba3bd\nd26f2c85a4aafa72db6f3ca49e992ad8\nd8bd55abd721dc0c99860e9353bb52a1\n7a3326ec918a44846e3c8a33c4ddf2ef\n6765d83445c2338555f46d55537192b6\nbd516ff50ec6fcd498d5fc0473d00a1c\n3fbeeb56c557e9d6aca1a38908852eab\n8b5061128585edb49e9583a661702ed4\n7b356bbece2dd658278d386bfa54545\nd20562f6f18add5c7dcd20e7ddd78bc8\n1cc70da57ce2e9e7309b03efb521ec1e\n279b9a722b9b203b341625d524f6398d\naa615f385b320782eb57f2e4f0583f2c\na96f4daf990b3eda53a3e8b300a51f98\n3604b060233bfd79bd08524bcb66a009\n6a311b1416a53f87697ad7b0fe6813db\n33e344d8250471396f6d5059be65ac2f\nb7e0c66b0c6641137141495dc4a593\n8b7f2caf571342398b8e4fade0702996\n4021d983b2359b2d4354f9eea413cf2c\nbc44413ddfc3f861c5f48f9175316bec\nd12b589d464fab1862ba5d2f24e5abbc\ne3287950481e9811cf48ae153052b71a\nc683f7280179260a898f72fb23e1ea6f\na6c91690dc96de97f1c28c9b4267c8f3\n6d67f92d6e11f29e5792b99b8245d225\nbd28567361a3541d97fb366fa4051f4b\n23506d31a9ba77201b54d8d0b255b88d\n178eced0bff71d3653e946fb2184f0c4\n5bfbd0f0fb965cca9df2c4ae01002f5c\n6fa2751d57a4ee44490ad276cd2af3a4\nad0c4c25d7a4d4c296db593b49da23e5\n3a7fb4cf118c30d36f3d2b1b15fba494\nc11829ca8ee139283d2617f9171b5ccb\ne52f7c8abd860fb923fe3501bb9e7193\n6d1416c57e8a875b214a15a5a42c49c0\n6e8d22c6e069b71965b77a565916c7f\n757ad2516284e2728d3e4a6c55f660b8\n5a0c76bb4dd53d13a6c03a53cf0a14c9\n4c15f432da3400ad2404817055fb55cc\n27b9211229e1bf011f3980612faf041b\n802287d31c1f5c5ba4ee05a5737b7178\n2d1400cf45b94df051a0bc243f04669e\n4cf6b0e3320f0740521fac473c90dd4a\na63f58a27c22886a721de3dd14942a\n35b696cb05089cdcc8dbe21f531a88d0\naba18a9a32753bb6390dcdc075aa60c5\ne79e55e6e08245c8dd34b2617efa7e35\n8381dcc6adaa7752b7d9d23574a480ae\n980ef88f896e4ebbe6cbbd79676d8c68\ncca695e66b222f6214038d588fd1342f\nc302d8053ed38c06b589fc18f8d1e43a\n2fd71db402f3939164a62403221fd59f\nba6a1d8d3f8e832d67668f34c2939f7d\n1c20d8cce30ded086ee08f750473a436\n4d54165ac08d47dc30bbd4cddd04c77b\n7fd24508190c2e5351d3c864cc68e22e\n162e665f12c4340f963aff3ec12fdcb\n252d046ecff65ed1f9f3162e7c61521c\n93d8e32a11a3502336b0f2a1430e993a\n54dba548def577137f14c8d2897662a6\n78a144a7c0f60dde744107c67e903f9a\n5f2b41b50439518be679b7e0ecf5c9b0\n2fe32a0c23de48b7a4462b13868efd3c\na25f904dfbc0fb0331b9e762848db625\n1ce2de1e1077d66c1d5fca03776c86\nc27bb0cf69183cdf78ebd8af2a314e49\nad09eb0cb78bc62238279ad3a29524b2\n78ecba6d2bdb55ba9174750cc2a009c3\n41e443beb22248b46ba14bfd91a75020\nd6dbb647d85df780615b3e12f53b391d\n6962c6b32fdd0a6d6b872683e72852e1\nbdcd0c8384971f2a684b7bc3f8a9aa55\n388c9f343896272813126e7abd481c60\n81a5a42f161688ef36d8dd30a594b2af\ndab44e951363e187ed44d599900d391d\nd5a78c5e48ade3e38fe22a5ce827e9fa\n667b59df5e098355c82f50464edece2d\nbc36a2facb65a01263f50818822b2585\ne27d9fece990d39a0f23466c3c25e2e\n273b600198cba2f840363d9858e1b6c4\n9d73e1a51a56683bb65b71636c46ae49\n81f049a3410c8d295833b7f8c91b5b48\n32d832455878ef581bf2b66b52bf6885\n992899a16779bdc99f8c3d2002c77ddb\n214374134d21f90354482522828e74ae\n217430853f56075915dd7d7985e749c1\nd83cfb75c24a8a89eb0ce5843fe6b264\n464a6067af815ccd843ead12644a79bb\ndd4f28a0e0d3f93c614a26402360d21a\n588b84631bead4d1c1fa182c22e95706\n8db7935008158509b55b46d261fe0021\n1f9923d1e65004d836e4b0ae0f52067b\n34e70464c2a7c17d97b40b8029c75005\n5db63af675507081118ddfdb81cc6068\nfc3d26aebbd75ed01e112f5fb42394ff\ne13ea4661bd5e168e7fcbdad594ae05b\n6b1a24847e5b666de3b5d4a92fbfd4bd\n7ee81223e7a4785ea7866257ee5db61e\n40f8588bf78172a129e4b5aa807bb4e7\n55accdd4bb5337db5cb8c3b627244050\n74db7acb40bca6eca707ebedc87d7580\nc83697d186fc799d7bf6fb68df7f786\n42c231c89dcc0f115213cec267286d18\nc433bc2bac3eed219c0c9824ccd078be\n1a614377adee252e0445fc6d980dd5c\n2a796094f95904e9c6193dcce7cff00c\nd5a374e8465fb8c2858699aaad4acee4\n91cf4849ad3f7ac2a81005b904311cb4\nec9d241cddcdb149f5a6ec2a96a47435\ndddacb5f14641b49766aeccb5d872ce4\n9d4b8c8d26c3be06d269116c7276660\n187804891c09be04f1077877e3a9d430\n5f188ef6d852a85c8d0180586cee2c13\nf1fa3fac81269971820018801b237b3d\n5d90d0c150935fe6a564497a1c91b4a\nc912a8edbaaf0fc72e6a7aad8523e7e6\n1fb025077ea5546bf7af398806a30cc7\ne97156fd53e88e27be2d01aee0780473\n5ebc9d8f82e8bd9fd3533dfc6ae82761\n41056728cbfd7aba9f8c3d2002c77ddb\nb2d64a218b373b0456d80c2792e1f42c\nc74f1c411bdf7f57d0efae8dc996b9e\na48942e0190d14a5a8930422448288ea\ne6e92596fe6fa9c965124e7461e47506\nbbb11b745f7c75fdb5b101ae4c3e9377\n190645c1f458a934c862eec8232fff1e\n2a0676c50108be8842d09291b1705b96\nb360448cc4b230c672745a2d9975c702\n2ec13926519716142b0659b9edd2a3d1\n53fe29e7363eaa70ce898a7d76534f1f\n77d20db9fe05302376e9713f57a5fcb6\na075004f2659de5a797e3338b16ee6ad\n7c278d5d7fec83ba7d0628daab3fd779\na55454529b463a1eec56aed2da084563\nead13c29c385832eb4c2969e5244fb83\n4cc695f3d582116fc655d08d986ea26\n4df3ce9b02b4765b1a8db2c23945f1fa\n62f75f68a559cd9c5edbe4a62f5ee3a4\ne679dae35e8ccd9acd2220e987e57553\n9a52ba3ccb97a11426392a5b643ed5e3\nf52b167d756420c83e5f17778b45d37e\n8be1ff29a5088b482822b5101b06e070\n4abe61d5f1f800b6c8d74856214be3b8\n5a00f82cae6d2566d249abd69334079c\n3b0e4c443ff69840c3bd24f986301745\ndad614e8c01b8acd618778e799bced5c\n1e57738f60665b1a908caac6d5f8ca97\n67fe5ba50738e325beedb4c8fd29e2d1\n1acc3dae512b56b01f8b303c0da5108d\n4fde6d734ef8490336d4accc80b34c1b\n33c4c7c47b8874123c8f5d3bbb1a3215\n2c1d79e1e1533bf1f51f77a6d7299806\nc74ea23fce212291943df36e40894fd9\n49e5f7af3e3c0ceb87e54aa3a663dbe\nac9a28dab6b10451beedb4c8fd29e2d1\ne50bed5236712874ed258f1e4fbd53d\n8a63086a3c861151ce2bbb5a9dafce04\n7a6cf20a719c16cde8258fa1af480210\na251543112f3a452fc5718d28351c534\nd950e75bf7eba6ff35836c728d324152\n775b3e38da839158ecab93c7630e9242\nc193add7ee3b4fbd63aebe2e86fe0041\n27a0e85f8fd0c7a819fb4103277a6b93\nb98dd46e9c1101e2214a15a5a42c49c0\ne897ac13dcc0adfe456cbf78e1e89022\n569e2fce2f1ab3be617e9d9aa36a8137\n564c9bc401397abc7d9b8c8596b4309a\nb08e0a90b1bd3f0879492e1986fdc4e\n399797977a78c2c3542091189dc62b5\na0ccae355918b63714038d588fd1342f\nc3732b612ee72d7f1071105723d4cf63\nfe84ae93e0eac1e45b903ba10d2ec446\n17ba1ba8f935f2bbdb01c957364e77d0\n3e0ae5d25ad60ea285d624cfcd9a37a7\n6df5ad89a152dbd26e79c14dd16aa04b\nee642ce4112cda8c229ab176c921b2b7\n89cb658542b25e1f4671d97b0fd17f51\n2fae93478f8bb6c423a62335a5f0e6d2\n372d52845e1c620fef3b6dbf349349be\n1033f41fd2decfa938da3ea2c9e0e4f\na8713681fccb1d647ff6ace05b36a5\n1a6aca00bbc88c7d30bbd4cddd04c77b\n546f5dbed1636d097ee0de88f23eac1d\n10657fcfce1d326b30bbd4cddd04c77b\ndb8756b02359c6553f28718dab796f68\n7eafe1321f7d566c9654713ddaad32c7\n2bd915e46c4b08e3f2cd47be0243fcd2\nc37912d7dc6504e3b7977f4fd4002c2b\nbdeb03b610923d868ee99ab78c7c9d6e\nc972e1b113c5972f577be0cbb9f51dc2\na546045291e8f61c8163a33a6bfa14ec\n65ffcbd025d2151ba5901d93c937a07e\n914293e9cb32a51c880e543f747aeae\n61c279a6f178a43c5f48f9175316bec\nda2f2572b10c0ed8f1783a44a88d6274\nb5eaf46797ada237738e43095496b061\nc05f807d12761472dfe9cab879fd37e8\n4d7035ed932406819223fc014b68160f\naa219609a504b01047c527f581cb7384\n8e5bc7946066f431ada975aaf86ac85d\n8aa658fb92830e0e62a510b8f97c658e\nf5ee06263c91d7eadfe9cab879fd37e8\ne15d98f37565adbe650ec61be62e0cd4\n49a5c5f524eb73b8391e4d6c585a697a\n6d54019f7543e4eaad16260d4d73b56\ne20c8cc35a498acc2ba308912365bc23\nd237260f66c00364dfe9cab879fd37e8\nd3a72603f65b921b391e4d6c585a697a\n30820b470df63087afeb21083ecb38eb\n6d22194fe700af402b5fb024f65f6da\n52e7aecf3ca3a0db391e4d6c585a697a\n1e4a2ed85bc9608d99138ce6d9b8fa3a\nf1c17621d394670b48d1a35afd3934\n809dd3a7fc2bbd2dec89626a4213fd07\n474816f0203184f13ad51ab774fc9235\neb8bee4832b65d8655252a6eccfc24f4\n99224e792b7a7f7bb98f36033d4304b1\n89157839dd80262087e118e254d6659f\n2b7fd6106236d935b516de42b9c9697a\nfe25a9fdbf70cc25f81ed792b3a38b04\n65624fa127a2537df3c9c1464e55d580\n26797a03b7940d43d9a7daf2d70e57bd\n20bc1ce03f5996bf9ee02475d7f98585\n2d96d4929d945740b1e23c7675c49239\nbb00ad069df73df5d1f943907d4f35fc\n31b4349e405e9157f927eef536ae57f1\n9e2cb89de5564d7c1dc5f68d8d7e8ab0\nb738d1a4caaf4dcb9cd431573238602d\n95eb78897f03652eaaf42e97665fa72\n9b923ffa07f51fab2032a1fc189d2617\nbf6c171ab896774d2f95e2a1e9997b85\n6797d37aae0e1d4339b483f6ce8789c\ndc3fba5ae5e86e62416e6e65da17ce54\nf62766dc071eb88472f944a50941537\n5ca0a56bcc0d469535836c728d324152\n8c81742da70c5abba7574b4673f4d777\n1c4192bcee62e018a4207c8c70da88f1\n3429a5b0d0497316ce44dc01dba1e174\n7e725fcf5f56b74bdfef331c9e51db71\n3c3c0da7a2581f20490ad276cd2af3a4\n438b2dcdbd25a93dea65c47b660136e7\n14922c38b2cbfce6fa31c88352968918\n6962e8f899bf60393d9c503e95bc363\n78f387d6eee94759db6f3ca49e992ad8\nffa875f5e2242d62d13de1e342854aa\n40eb3b0b1b43f8cdd0a96520c31993ad\ne42f2707bec24e028bfc6c6704f4dffd\nfc9f18e509b363fcac7bed72580dc30f\n3bcf1f68540a478de2680d1a8f76531\ncfa43d56d70e530160dc76a524f85955\nfb50672ad3f7b196cae684aee7caa8d9\nba3120844f785a1430730ba8faffbad9\n97610f0edc786956d5cc62720ec8273c\n2d3cb79ce06eba3c7550d396f1a3a8e1\n5807109a9db7124e894dec385705c4bd\nd3b715e7d98bfe98658d908a2254f194\n18e73a715023714691829b477862aff6\na9ac09540c655b08d0bdd07d0170f389\n2aeebc06bc97ac054287bb3d3a4847fb\n91c3c63dddd49d3a5271513b292108db\n8c68ea99b5de38d3a6d7a9f3c5f7bb41\nb5feedcaea797add4830ebf7106a333e\n5aa08289fc85d4d2ee51e40b76ccdf20\nb77556086eea0ab181187d9890753294\n3e760133301353a147cddb7c026e92eb\n4d6a3cb51ac2144dd47d15ec8813fdaa\na5029c18a50d0e4be7c7920f6a65a54d\n84a354fd068a410d40719bb3f7e29ad5\n743992f3e73c7e258ba8ff316aec8d3d\ndb77ba0cf616e2908369c37b40e82efa\n7494fb1b493b36db2b3f122bf827792d\n26d22dde8b0bf6a345891653421dc140\nab1d67b6f09b35424ea2d70ab68cd1d2\ndc49259a117af8f1d200faae04ce3f8\n8b0e0e3fdf70192e484776fb236aef2e\n251160ca48f91de7ad5067eac75a07f7\n77b60e760e8186bfee18bc48b60b36b7\n209e7d26bf9421cc9959d6de6fec7ffb\n5a550763e7705e532ea98d69e91ba870\n7c653a77d59fbfbd84d52b3f4a5fb1fb\nc25167c0af7517778cbb8bac2032149c\n689ce3419913a1c5ad5067eac75a07f7\n56cee7545143c9b67bcb070cc655f13a\nf992b2e0e44987698cb5d9909aeb1309\ned5f0875b3615861a6c03a53cf0a14c9\nd7b56f61904aca6b7422d2e1b1d40882\n980b85a3109e66562bbf333b6ea7b79f\n7c29fac52d4a061140b4c5428883e585\n34da9450728ca9fee0be4360cd00cfc\n9b4acfe0ed67b32a63848853b5b7618f\n1b739cf713702b2146f41dc2aaef556b\nf7f5cb907c50a8791f66341aa9abe5e0\nc900e6f4dfefafbae06f10e4878a855d\n4da91eb1adb9e960ad5067eac75a07f7\n3491a4102095b1e87ff6ace05b36a5\n5ef5685e19c5b253674ce64e4bf77aec\n608ea98ce4a80a61aed393947b9cb125\n765d6e5ebce3fe25aa11adad6b2a69c\ne2dac2205ed98fad5067eac75a07f7\nb34afa23c47c80db7422d2e1b1d40882\n641affca2294fe1879368d1198f406e7\n5de212ea4d57b20b526934092c2c4777\nb9dae236a2dc3476ffd5817f210f277d\n19d202ccdbc617d8eed6cfa9fc6d794c\n1c57228e08cdd81ea375e397f0227097\n12ecd8ff5fee05c68cbb8bac2032149c\n3d4a592876d60a3c0f9df0cafd74e5c\n46bfac85035dc6f0382c5a0f87d73d23\nb52f6dd58875030ead5067eac75a07f7\n283e5cbc29b92fcc8cbb8bac2032149c\n45dee2774ca0527c9f8c3d2002c77ddb\neb097732d3f31469aa11adad6b2a69c\nb69722ee8e35829feb20d49510853b52\na91ee72daa437343d1f4e3beb8257c5a\n934f8fd5d11af1e6e75232ab5942fa9\n912c044ef5e129522c98a1adaac88b94\n60fbc4c64d6032337af2ac6660aa6669\n71115e3a391785be853acd6c98b3fb18\n5e0b6969f252cee2b355cfc2bfa121d\ne7f1a77130bceb8d8ec45320afaa5d0a\n1d3d621e02b8a6edc6fcb6f3205734\nadb934d3f4ed9dce22cec5ca16c50ce\nc9da930b808c18d0923ef79fcb120ce8\nd65624cccd27e85ce8f3ad90cf010c5a\n5c1d815561a7725496c29359f424ce25\n3b45bea7b1b2ab6a20f002682bf71108\nea5f31892496ab5457c6852b34adaf61\n2555c9df5fa919692250bf58700b4d8f\ncdb13917ddd5fec6f712b42a5a217e5e\n11f2882ca78cd85c9c75eb4326997fae\n824e0f5fd086565a4eee3420590dc822\n4058207a9467712966a503e0f1ab5917\n608f7cd5e647e4a4e8258fa1af480210\n4da850645da27913a82a6374374c9dbf\n4ec8d6b5c59f656359357de4ba356705\nb69df94b39931f196c8336429b11e233\n34e260786b78eef475e2a70bd3d8ac6f\n3e0fb214c130556aea3f94b6bb1b2ed6\n9004a7d87a62e40111310cfb881ab9a6\nfcbc0127388b446b7d6b442f66caef56\nf4f000158796b9593002ed4dcf002f44\n7207fb41b7f9a0669223fc014b68160f\n34434ee1d6b154f8252b40995a250bde\n913d774c845a0d7edc889d1ef9591d24\n62d51d3d505aec1e5ca3dca3292dd1f\n214e52abf34b4e18ab96a46a16fcc9c\n39a0cbf3e4b34ca44499f83a01888ef1\n54d17ad404678720d0a96520c31993ad\nf9d9ef770e04c5772b3242897b354191\n64aa142f104b99379a535d0a5590e4c0\nc15aaf668a80aad9ee5912a5f7e89744\n6c95f72153478de8b162cef80a91798d\n9477f34f16c650f7cac9ba4482ce0612\n6da4b164828c371824507e0767ffba7\n992c967b4b1535f5f5346848b67e4cad\n679f9dd2f3d8c52e2de61958ac6aebbc\n7f53246b6aa7fd551a44da2424b9c700\n8024f88aa0136725804722305621f918\n9a1312e39df01dc1d44683cb4ca416\ncdc9ea006d761feb8c56c26d10173bf7\nb11ab64f79e13e1b714473735ef35ab\n7bbb0921945cb5fb45e2a4e5729b970d\na9206327ea5b37d75fb62d44a047792d\ne696a670af11d5431234386b1304ec62\n279351131d06222cbe9bca6d7b2e5b3\n4c907aab76195556d728db1e986e0b74\n2b6ce4f0d57ada2ce6a02cdde4c23286\n12e1f83d5fb0af107d0cdce142e729b2\n33a3aaf17cb7d0ea351aa299020a0e0c\n3f9c84917d92506f3bfb18d76f33685f\n429d850ac1621fc176dc93c8128c2c20\n335bbef681cee5b46b3f6cce098c8918\n836ddcae13c81d88a58a5ecb2008fd42\n7980d0e22c197dfa5e7e52a559b573fd\n99316252e1dfbde1d810b14a81e12eca\n4a72468fa13c36cd2bcc0cde35567dc0\n1b7cabb894adef68939793f922933b6b\n6c46312d5a6b81a59e4965f0106e00d9\n3aebb428c4f378174078a3e6d5ee40f4\nd679b6e72d6c0ead391e4d6c585a697a\n1c76a8a55699eb9694605bb30ae47fb2\ne03cdcb83404b3c3951c1fffab4f5807\ne0e00d2012c4306117fcdb9c02a9e950\nc5143483b413b4ed6991c1a663897b1e\ne0f6e43ec7c44cf0f60d4dd27a88e505\n6c413dd8728bc004d22730b0728b2fc9\n83464126ed62ef54707cdefe012d0353\na757f06addc26f314b3c42e318f3affc\ne2cb95f03f5dedf9f198b94f669bca91\n27d846b100a1be0535836c728d324152\ne35d752ecf4e205ab40f0ac0fb9a650d\ne80016d5886fced69f8f9f2bcc40c84c\nff404f70bb77a5a876e4a31295619fa6\n7b22287c9a2ad418b9deee229eae6efa\n25775a3ee25c6503dddd8ce1cda8c6d9\nae2a8d605b8c4090acc95948d4efa8e6\n2c14b0b718a1f3765828f54ccfceb8a8\na15a936f2949d518a6fee8e2140acec9\n5b3b19203b5da49c310af74324aae27f\n40604fdd535fd2b2e393e26dcd2928e3\n34c0ef1a944d5443e2f1733877da1c63\n5239e7c9a83e99762b6168eeac2194de\ne339e8b8f1bd5eb9626d7e3d07da8352\n9a60b3b87a457c73f522eecffc49e6a3\n4068a0e8533230e4ed8cfda52671df0b\n782a5262c3d349e3c3bd24f986301745\nfece36426ea77b92a7bfc1660a1e18f0\n24942a3b98d1bcb6a570c6c691c987a8\n85d5a731ea4865c1e258f9dd9d42f6c9\nbd3dddce162f59ead92dd8f41946f1b2\nf6e14672ef1ca30130aad3a2f98e3b63\n8ad152454e2f1663cd701e9c04d3cf7a\nb1850a02aafbca6aba18ade30e563d37\ndc0e0beba650c0b78bc6f322a9608b07\n7d6102f23f51764d2ed4a731510fb423\n8891a73ddf73656be4ef113421a70a46\n80f036ce585b1ef648ff063e62e02115\n5649e478e7ef25c4490ad276cd2af3a4\nc793946b036d1a9caa53a70b14c57bcb\ne74841627e110e98d9de0de5dc66ab1\n6f4c33b5becd1f3920768660cf080d12\n9c1ff252b47f13055764829adf9a789d\ne9871fd4c45b34148737eef0436997\n855c6cc99578afda6a5ef4b501708f3\n56c627c74e9c78c65ed9439580e8c076\n5835aec0e4aacb278305420c03f867ef\necf9321f6fd98688f88f925b568f2dfa\n8334a19ba0063c7faac58be63ab4013b\ndf7b982169a2d36fa8d8da6771a88b8f\nba6909f6263ff92f72b785f16db8dbf3\nbd78847e636133c179c8c70bc853d3a7\n2f3557438a95798fb76e29c9c43bc7aa\n169deb7aa6472eef2d26358520dd8de1\n731b2115d66fc850999b33727fe6db14\nd67265ea100ceb32ce11183544874734\na5c68fc026173a5671e2498adb56e791\n9ff56887e5f00cff412a0eaf6d0f1809\nf74b9b8412dd152f6558f5c8c0d2d888\na927b0088531dec823500a5b036df62e\n905628a74c7cec233a574a2e3bc99a1\nf2ac49e7de8898d6782db34fbe677487\n32ddda038bd1bc15c3bd24f986301745\nd1525a08cc96beeec786af79f5203d8e\nca77f1d8d0151975901e3cd572b4fe52\nfd5c4da3a081cf115ec69be1b6d2571\nb03bb928a8842c7ab748e35bbe935720\nc2679e65b9d5e95de6fd255f2d77a585\nedb7dfd7fe00c08e25c8be43ebcd1add\n7d9073ffce209233865f763ab6e6778a\ne7655dfef36db9908c31ab4d97f0b44\n6d9be8619f48e3dad096bf408b606360\ndd363031a195991631b72d9d4e0e505a\naa96fdfe679adefb203eb08a0c3b4355\nb5168a95f760cbefa22728b9e8cfa4dd\n69a3e5ea90d66d2efd72380f3800ba4b\nfccd86d2aa3c565334aff3344c00890c\nf9e126d15c5761b29af4053b8815b239\n5a2f605200b4e4d5eb6d17f913d54c76\n49e0fb5a2318e4c1b0a15036380e635e\nda8ec638b64227066d767b6d0313d349\na387e9c10bce09c85828f54ccfceb8a8\n2368a815da89faf940b559ef47048b86\n6dee2382e2c710fcdb266b832300e6da\n53e06d7506fa12f93fc9a2b2d10317e7\n5555cf0638339605f0fb3e3d2a0d34c9\n32160b2dd0d1c8ab507243968c1db8f3\n9aa0b98bdeafacede76bc197b3a3ffc0\n61b80232d3aa0a409ccce4c6d5bb195f\n68ae56275d366ed6cea003eff0268278\n74246960cafebda4ded4c23d05709216\n48045af90c7959e5738e43095496b061\nc5838a6cff5a0163a91116f8fe859a4b\n96ef5cd61c49b9ebdd50ab7b10e346f\n8db8568a21645abb2964e7c9f80f3597\n3f9200756c2e3aecd028c2e338a88f09\n14e9f568cd3309dd75becd8a4c3f1866\nd70bb0c4015f6e10df2b21995cbbbc4f\na78bd5277a6c03cdd3726fd70b88cb7c\n1fa966f9c1d9b994d2ae2f26e86f819c\n2c08886cba42af25f1acf3f2c6f9e1eb\n590128c134fd2fb9c1535160ddca1c61\n50fb47768cfdada29f2349486c570dd4\nce4e54dbb99b5bce98a96123d0d6b0d8\nedb32ed999f08ed4a12cedd896805aef\nd60a87c721416783ec7a87c695ada295\nfe2aee5ff66e4fe8d5f95109c85d2816\n9b02cf9719863b8e9e990e1185980a77\n14d1d6227d6e111049afcf135d820991\nf1c64d90ecf5212fac0d0a08bc077486\n2060a7a8bc18a63b1cf96a5dc33e37f1\n4b39fda4ce751bdaf51f77a6d7299806\na59b2884db9574cd1a72c98fc69f22ac\ne0f8fc5dc186a597a636371b2023a251\n20bb1a34891588c1cce90f0d61ed7a70\n68a6c680b48dbed292a0bc4ecc8b2ed9\na26046fbf2d7368cd6e1954365b10b52\n462e8745e766ed9fd4d8765e3910f617\n30f06495dec55016bde93a1daa41f517\necdcc12d56c119c5a67f11eba80d4fdd\n75e9e4fd6c512c92966130541a711692\n2d0f4d977d61aecf89c33ded8af67808\n99fede796e56b4b220eb25a3a058bd49\n4b2a7beb13fbe74296610c8d5ae64f96\n34df750af2640f576d616bfd695eec80\n7d040b260fae0807a2d3cfe77a14b5f4\ne3e1d9e88b396e6b8cae28243a4ae130\n377d6044219ec8b3063f9bdb41a65e3\nde1d044910991a072d184f71ff3205f5\n37f1637edfc6ca5ef51f77a6d7299806\ncfe4e4fb603b99c77843fb4efdc19510\n70e603b83e06f7258de9f116e0231954\n45122ce45ad6bbc0668ae11a7db5e82a\n742524cb455a050f246c3d7aafc9b697\n78420814bee5ad17f2cf6a9bef44d625\n263e097a29c520c717b431cae0dd70ed\na9747a8f0c31b46188793ca7bd0e6fb0\n8502520f19688aaee12186cc8c5022c7\n58160ac529c37aef1f0f01a76c5ff040\na6ffc5d46a146796ac4c0903ae810430\n19d5525d3d65063bb664d1885442ba70\nb87c155d6c95c768668ae11a7db5e82a\n794395f3e5e2d4f617b431cae0dd70ed\ncc6283a5bcd5452360d9b527752ac99f\n8374ea1c4c032ec8488ef35e8e3ee601\ndc589e1223aaa5e65cf2470a6eb9a24d\n8e66fc32d49732c4eff311703ed2e9b\n188ce43d9c8caabc5213169cc9897a9d\n3ebb9bfa2afb2f8c9db5a91069a42c6a\n3e08106901d3c9157145387788e4fc89\n4fb3b350f197a7e64e045e9030a39002\n9dd80e356880c9deaf268f6180933aa3\n54a0067eb07dad5ad1a59a9e9888beb8\n812f86b9e1de03419c0ca344f487323e\n9cf9313fcb038801815b2b467e8e2eac\n9665f677dff2405ef51f77a6d7299806\n8141866ff4665b814038d588fd1342f\n13cdbfd56085fc3af51f77a6d7299806\nb6afecd780203c81b9a51c308250e422\ne857e87654e3807e201a7d6fe269f8b8\n44d6debd1db8c2e57fb0dc5c3ba15465\n6b5cfd0de413ce8841b160b9adc112fd\n9d17b91f7f301cfc6655d494d4092078\n99f9eac72f5b4df04d31637b346f5216\n881756250fe9a7fa5fceaa39a8353bde\ndc0e4a9d3bb0397d5e994da5ba753c34\nf2e1735aa2cba97222fbb0d1d627b825\n3ffe22ce4ede7a187886a3eca4dfc4ab\n4be9eedfb4071f919f9a4711823598a\n660deb63defcf872e76bc197b3a3ffc0\n3edc519c38938ee8d42b9650f19dd425\nbf2a153556edcdc96325dd85752d9221\nf7921f51bcf7e93b24a15e3e5e0014a0\na4dbf0f4fef1c36cf199233c9f2ce2ce\n23b43da125fa4dbd755c957ccb0117e2\n94ef4f9589a1577e123691872d565e10\n9f5cd9e55f0b4c42ba128419b7cd4010\n57362886500b303632a11457e23fe120\nd623665165dc5af0f51f77a6d7299806\nf27eba536ca8d428eb1f243bab39fb29\nff212e47775ea7fe6a3056c8cad72d81\nfe4bcffc64838402684b7bc3f8a9aa55\nc0ac5dea15f961c9e76bc197b3a3ffc0\n64b2121e41762bd47954eb05bbab463f\na713adfd7d82df5bebf5869836d37497\ne501ac06884534b5d5f962f170e40e8e\n8a64395b321a34161191025061735ea3\n89b23586ad3af3d6252e0775cff1c394\n9f3d4541c2754cc2a516ad65be981ae\nf878dcc6987a7a8a4719088c8e42c6ab\n21a5b3d29075564e2314deb821327685\n186e501aa015cd367f768772b7a990fa\n53bc187c97cc02adda5d247a475c516d\n15ebb1e7e6663cbfa242b893d7c243a\ne702f89ce87a0b6579368d1198f406e7\n5668d49d776c954c5963245f0923337f\nd7dbf6005f2e8fccf6ef7bb1183682c\n2a2d4bc0c2ad2e7e332e588d1e0957a7\n2c7817c16702e57188e7efbf7ff736b7\n246b26ca99193386668ae11a7db5e82a\nc76d9d9756b8bbf2a86b2405ab6de30d\ncc82b660e39ee47df287722009141c0e\n9ffffefc4b5a04ec49ed2275c90a1298\naf0206602e75c8bbdc6a693174c70feb\nbe7a1bb508905459f51f77a6d7299806\nf27b818a99bf195f76e9713f57a5fcb6\na34afa94c100e8e2a45e8d2f28a9ea98\n4c5ac5335e50ba35b385698e6487d3bb\nfbdd516e90ad48902872e9c941f7c819\nb6a24109a5076d4ba5a296b0eec81c96\nf616f5c2068eebaf6aa35752fcfa44c0\n80b2eb0e500bca46f3412e3273fc1682\n2ffcf26e3cff97ee40b4c5428883e585\n73a870e530c3a9993c77a85180cab6b6\n372a6ff9847c899bfdb026c58bb97e2e\nfb7af067384d120b46ebf4f1147c3f0f\nd443a71b6cd1b4b0d0e90ab6c6492cb4\nd108dd323ed295991b17743c18fb63dc\n2cec40de07b468661aa47689117a61e1\n208903274bfe69cdc5d1c45cadcaa3eb\n5485834dbd8cd031c963bc72ef3a8742\nf619501cf26b4d533b7f931c53ba66d8\ne9d6ce5bdae4462aa187e6150daf1a0\n33bcda05749d01bc4b3c42e318f3affc\n1e31a474b6867a7dee32a260ef9debf1\nb1384cf261fa99a03002761e7a3ba3bd\n385e55a7d0e528d312fbf3eb7146682b\nbedbd91db5d280ccfebad4f49b26ec52\n54bc0f4268150dfc616626762e4bb71d\n760f49288c2691b5b4d1176ea5549480\n7e27606e126c023d5dd94d7a8cf82d08\nb3eb7f278d595307d2b12aa6a0f050b3\n74f985d5bde29b01dec11b4972c4b3e6\ndb247fa7a6d2ae45aff7c08b060f5ed6\n8aab7aa2fed02c6f3de1a463b8ceba0c\n16dd49ad350321e678996b707ffa04f5\n9e58589d9f3dc4f24b3c42e318f3affc\n580e48297791fb394e684eb336479e2c\n2a8a8ffd2ef41cef20768660cf080d12\na3d155f1ab4731a515dd7d7985e749c1\nf9ed6c993f7d65e2e5f83d0df19ff934\n50b8f401a5e2f2f431358207d42bcb21\n6f576d151a46bdefd5cb6d178687b980\nb60145d7ace5fb53aa7cb30470f3273c\n2b8961b3c1deaab8cba466d56886cb4f\n797ecd23342e744bbff15b656f256f05\n7aefbd0f95e0e9653b09cd02500a89ae\n785e93009913379a79f7c71429a96cf8\n765786fb271e394a204812d6a020ec9b\nddeb44a5621da142aa29e9f0529e8ef7\ne34d1be103e9d88145a1bc3ecd3d162f\n48ce2cbc14f391e7d7262b1b986920e7\nc5b224f6fcdbd7e655f46d55537192b6\n647692d3858790a1f1783a44a88d6274\n452ee9c2477e471b1aed2875db0a8711\n90f7b8cd8e41321c53315facdf531a34\nb8ec9bd6096a14488de42fc1392c2139\n4b8c1a30a11197a831777a3afe490d7\n42bb37f87a9a758ad43fe0060c5249d9\nb079b8fbb6199f0eef53a66b4f397367\n2145b7d411f1cf91bc4e0550f830290\nf6c5bf92d03a93e247839bae1bc65257\nd1b4a4f43818c34e490ad276cd2af3a4\ne9546947de34dde213a5873d239ac557\n1161ca9bbd655ca17b431cae0dd70ed\nbd9257f538038fac2d9fe390e23fd20f\ndf39a8c8b7ce47a25938488ff499d96a\n31551fca6e4c5d8e80ab58c152cb7c44\nf0b044c592e19f3d8dab161b48d8b921\n86e6caacc1e4ddb5e762cf5917cef4ef\nd20e0f359f37f7f5648b060eabbed82f\n200e41f83af78ee240add2170313bb0\n7a22339a0b7dd26aee088de33038f12a\n93c2221188b4948f79b2fbab4d71b78e\nfbf9b1f026a86d59eb5bc459c7142a3\nd820b240ee17047fac51268fdb437a9e\nc93685c8343e995d760858b697ef756f\nce1bfb999b211d423825a5bc524f67c9\nf37310698d465cf8c8bd09537246ca3a\nd6c68f9d1844c3bfcb002c1e2b5fc68b\n3adaf5ec2c9fa6fef7248d9dbed7a7b8\nbc6aee7279114dff428a5246ba7de3fc\n2c06e66c7a66878c3bd24f986301745\na3474b03dad787de8c5fe7d2e262dff3\nf87ef5a5c13e7b29d810b14a81e12eca\nbaaa6943a8adda4173705bc397297991\n6f630e2080aa9f10e45ef4135c266a12\n60365049ca80d98b77e620d253d331c8\n46184eb6f03e8d2afebad4f49b26ec52\n88e73431030e8494cc0436ebbd73343e\n59f4f7f1f7cfd0f3831ae64559c8e0b3\n2c72d9ccd9399fe8968731dfb1dc1f13\ncc53e7b618721da04b0c98bb5e7fbdd9\nb24d5f0395eb987e185574a5e2255bb6\n8673b121b420cc0ca23949c21eddef76\n6a9c7e9f19cd3583be92df29bb41e437\n476e60bceae151e768f8796d69d0c486\neb66e5ca3eeddee87fc7604ac712879d\nc1fab1be028d2d1192d39b162a300de1\n82130114fee63442f51f77a6d7299806\nb2564957632c596c2ebeb1e6a8111f53\nf7d727fce5ee3007984a3b60f45af7f\n4f3e1e670753c96ac955e5ed03ef3a2f\nd1ecfd2ca0baa6ad47efcaa87d68903f\n1bd555bd6f08c5f4f90f8519e58d5382\n7aadbba28333e40a77e6105b101d7310\nf7bdfe5af3b26d1b5f06dd739e88c77f\nd5f5388411866fcd6f349f21cf5447af\n96fa9d34fcb17ff21fc43d5b32fa230f\nd821813cdad2ca93183128a5e9c4cbee\n393d3977af188cd7798c257640d6867\n81c8ec54ab47bb86b04cb542e2c50eb4\n460bc82ba3a41a4f492489969eb2d929\n3aadad80a0e8d21620768660cf080d12\n9f9d8c3acc3d33e628c187222995b2b5\n86fcaf63c9e6542c858699aaad4acee4\na3a701905091355e96aaf875e27b02c9\nc82910190bf76ef216efc8582f9e6d60\ne53057e1a9f6f135b97ad864945165a1\n87a30f02d938047987b390f69ff83fb2\n8281936e9123cbbcaf95ae40867329f\n198551bcb90f2fd5ef40cf5f2b241770\n8acbca7ddfd03dc85d009c98a5b96836\nb6457c273fca48f8b5b7c35a8e7396f2\n2a48b2cc3a5b7da6833b2489037ae4d9\n43bc8b8b33811a2a54afac63dc6bafa8\nbf45b5c2c9dd8fa9fa24672a35ae8bb\nbcd046749f03aaab714531f0291497fd\n87d5a94d81a299401877c7666e1dab40\n99f50ca8fe9b541792ed85b04a73eb29\n673540ea8227449d1dbe3e8cd87b5167\n49672809018ebc55224dbcbd6815e727\nfbd83a2ac7a5dc52e915f7ff1872d16a\n8e009300d7671a33b2a5818319136c5b\nfcc5717aca6a3be188bda5f1df0be8\n5df14a5997ca80fee45ef4135c266a12\n7436f91df61e7d5bc10555abb2efb430\nba8378a73db72f51febad4f49b26ec52\nb088212c18a00fa0c3bd24f986301745\n92a05eba553fd1247674a65b52217c22\nb41f2b0ec15892e3153afb488ead2325\nf27a46a8dce3b811707cdefe012d0353\ndbf4aeb1d6c8b77a30bbd4cddd04c77b\n9daf7804f32079f7b1973049b9d84541\nadc763e089e2535fdd155b45c76af694\n62d18b3f3c520ddb37251258858a7a58\n50505520611014b07298f1711edd69a0\n7c71421a06cee4eb85718c281d7fdf61\n575a8eca414c69f67bcb070cc655f13a\n4333e8cd288f47c4e0c9d6065dbbbe16\n5370b493b077fdd39ccda3ab71692a66\nb8fb0a7e5d59693780489003722bd0ee\nf36f3912a86717146b82340329d7ca26\n322e8aaa889e25720768660cf080d12\n482fad8b18008ff8c6540fe6bc16d6f\n5510ca90cc08d0c4e825832d1f6b3273\n7093cec0f1eba67e11f3f1bdf34ac930\nf5d97731def4d875f51f77a6d7299806\nb0ee655c0c84e70be03211c8d614b25a\n61ae29ce7a0d71bc57f15fc9385a8a01\nc850233cd5ebd8a49725e3ec23636256\n52ed857e6f9965886b429fe8da4d4ec5\n332ce2f8d9c3927dffb8fce670bd5738\n462c1b0c6f14f168c3bd24f986301745\n609f064ea48440645d8fcbc36a5e8c00\n99f15c63712d9fbe84868d3618d73011\nac2f8d240e2fd36ce2acfd5544378c96\n4bf64ea69b9e7c85cf004563556ddb36\n32a7a2b6974a2e5ccd79ad97258166cb\nebfe93f04bd040ced98bf80379cd1d6\n4788fa0af36e94ea38c2e72e63f5bbba\nae5631ecb6ed463f5ad83814029a1a10\n3622046c1b2266a0fad46760e869d184\ncb631d4a3bdfb02d2c58f3c20d9d1840\n505a99351f70664238b87428c6845ef9\n799a262e7eeacf2a593ebeeedbff73b\nf4b5313a0bc95a48da7c128b58fc7554\n1408914f71c66166febad4f49b26ec52\nfe4984dbd32e69eca4ba22b64b537bba\n2bc58f346be3570ed739a99f2688300e\n8cb6234ed889390df198b94f669bca91\nadf9117f3cba509cb4e3935c6cee4b35\n4f3b404cc30d2306b96ac7572d4197cf\n2d7c48df632589a7ad5067eac75a07f7\nfb1e39667d83506a41dea5e6084523ee\n87fd23051b01997418885412f2b0a4f7\n6c322cbf532f87337c577fdb71c158\n74a73d264fb01b188ad2a89943bab6f3\nbba7bc453203fbc6e39344961f657bcc\na6543278e970aa7a396d452ec85b027e\n1a8a796da899cb2c4d672fe014b9000e\nde96be0a27fe1610d40c07d3c15cc681\n788af6bc08bbe51fd9a828fb989f49a0\n1613e86311fd7601c103f0a69924253f\nadfec21e21737eeeb000f20a5153622c\nbce971ee4e980b77e3f7a74e12a274ef\nf7e7473775d8c3f3f51fa0238791f5dc\n20d23be3b5180ea9e51ca3f3e83d9132\n259775bd1af2954e30bbd4cddd04c77b\n3af91fd634a5ba759c0ca344f487323e\n2f9c9357bfb89ac1d38913e96bbf2a5d\n1aed00532eb4311049ba300375be3b4\nfd57354b70d416386086aaeef17e8c87\nd92354e060c98854b0ffd7a60ee2298f\n18d29165fc26330467903707764646db\ncd762ebd8c8ab61361a38c5058945a3a\na78e8ad852e8d3e3cbb2a1d23fae41be\na7f98e26ccb27f0b52225a4689f7f600\n2df0d24befaef397549f05ce44760eca\nfefd88656d9d0d2d82e6c3a4e742651d\n7ad4285694233688105ea47d266f5adb\n853c3913ba95570ba2651abaf391628e\n18a9c13c3999e9c186abe5555a3b447d\n54dc32618be1ff18b3c0ea2ca7165b1c\n6a5c816eca38f130c6536c7253813c8f\n35b005d11a25b25581faebbdea6bd9be\nfc731e1489031acbe02c30c9027468fb\nec16de40e8415006855931d119219022\nefd67be7d7fff02d7b9a616d4541ada8\n597b0d10535c25d538f21a3304cc4bdc\n1f267da10062622092018116c595a95d\nb94ea1b7a715f5052b151d8b52c53b90\n4f79ef44a08bc2ff4a60c1a189046dd1\n2a88f66d5e09e502581fd77200548509\nb6d644abd3a2a54c904f770b8a17d30a\na04a45fc865cb61dbfb7d42898b82ecd\nf5fa9f592d891083996915f7802ec40\ncfefed4429defd86febdb1f263373824\nac864eb8b8a084756ddf5c10cced4ccf\na6f19d6f3a6b3cce35c6c07cec6934c5\n442546c2af24d782d197f67767b32741\n7cf3167e5a469fcb4c7384dbb75cab0d\n56210576a4afb9cf88d13d4705fa91f\nb267c88cc2a3cdbf48d189f942cedc62\n4a519fb8089dc7d248eaa510713cb074\nce2d3e0b58bb1244700ade95b2f08044\n8a6e06fbf74e811667d24b304b35bdf4\n5f8764573a6f8321c1a89c6b124f2475\n87ca3e8e37367054dcabaa2ad147fa73\n6d2783fa677cdfdc14e775cfdf4a76ca\nf8f22279842d9b8bfc6d85675a0e869f\na63d31d92b6bee14febad4f49b26ec52\n9f2dbddee73c639ecea003eff0268278\nec565aa9b442ac36ae6afb0c7fa710a4\n28e1ba582708bb21b4c161851ed2b4e4\ne86ddb9617b8c44758b3fd27263469a1\n9f1d1d13f42bd2728490246570868c8d\nb7621e8afb9e7b18890992ddacc04113\n6f934779da945914bccaad2aa3926367\nb8425a23b0525ccf004563556ddb36\n33ef80eb8ebf4207fe7e23d061690240\n8483abf40b0b4a65d009c98a5b96836\n62a0d0647476f5e5f8ece882ca124c40\n839af4cf455c049347839bae1bc65257\ndb5f1c46d8af7d17db073a02eddafbe6\n3f63afde3842a73affccbd0b169a39\na95176f3c7a102acdfb197c00c97d72b\nae0ed75bbd4c5a74b7c9606efbb8bb3d\n3b874fc5f84eff21492d9da2668ec34c\nac2ee1eebd5f2e335c8a49a27f01fd12\n31c278a2aa2a490241fe42b98fee4b0b\n407276907088c8c9f51f77a6d7299806\nef62dad7755794a47558b47f7ba0b0c\n3fa5372c0ff38e447135e387a71e9d31\nb9695f4e1589c6bde12186cc8c5022c7\n21691795da12fdc7bc95db5d49def9cc\n335c2e4c3991768218ed1f44219ab7b1\nfa0580ea9b8940dfef1b7984700142ff\n23937a360c840bbd2b70eac6546e93fd\ne7b41a39388925c364f6d058992c3399\n1480684381add1e7fff16555386d173d\n3d8feac23ebc7b5dc6a19173dfae14a8\nbc4a64f68f9cfb0733286e10d1a7be57\nce8fc9bf9c9fe3ce99e434a62f00f7de\n82346c794fd098f77a1f550045b16384\n53433c9845f6b53955034479f8a160c7\nde4fb391ab81be927ff6ace05b36a5\n94a53bc306d106708bc6f322a9608b07\nff127b5ab0e36faec3bec646284d5a6a\nf38a18709e55e4647ee217c21e683487\n8aeb236e281bd5a4f51f77a6d7299806\ne42e2c616f8c38619ccce4c6d5bb195f\n1eece111c9bc0a126172e4028919692e\ne96108e514142d13b3cf15c77de45986\n850564e1e8587f35617092ec6e36103f\ndba5223072bb092f76ff40a3c0e00e06\nf7a0f1e7e03fba8c9628f611995a13ab\n689cf8174210c2701933ffef19678834\nc5178a8a0da618a25d78ff7fb413274d\nfaa36ee5b5a296ff7e66b3e5c11f24d4\n5767cd2fa0c64c92a0263d691f98a9af\ned963e8e0589eaa5490ad276cd2af3a4\n17b444c072a6a3ec76e9713f57a5fcb6\n6449378cb78f081b2369c46027bce7af\nb254462a49aa73df51f77a6d7299806\nb9a0e6854bfab1682db9fca4b68095\nf9f9d2fda27c310b266b42a2f1bdd7cf\n993ce4314e32140f38454b411e0edc29\n8797234d59d03951bcc69f56814897a1\n3e0f8c39a72f3c91200ad3f421b6c3d0\nf3f6e3dc8c3b0eaf97b6421ec010dd0d\ne8afe4f07f221087620018391309f97\n949143f5e3b772a7986b72a93898270f\nb48d333e39b8aa1c663191fd557d3a61\nce4fde399bd5f6f6784a45ea6efa1d77\n238a974ab3fd46e0ba7b07dcdf3d00b4\n7da19b39d092fc8e33b12e4baae47737\n428279529d61b45260ddf36bc44130c3\n9171bc27d62095bfe82a8550427833e4\n6def73c13a40922d9274d508495753d2\nc1180df0a7ad92afad5067eac75a07f7\ne089dc57993ffcc72fd098ed2128156\nf00992135ebf50a9339797c21e8801b1\ne21392ebcec0e7cb1a3a884dfddd1bde\n4b8e0b22664904c1c8b8dbae22c1c086\n89478118c3618b353e615cf0ba033d62\nea093e60ddd1c7467afee304cce81d6f\n758df6055459cdf6cf58a1b90d479c9\n945565e4684886ea9db6feaa7eb1b013\ncdf0a34dc3504e40643beaf431c0975a\nb14c4d5783a339609fd4171283f33ca8\n6a53e24442be0a9598f91bb06151de8f\ne2a56bcdb18d820047ad57fbec8be0bc\n9d547457c4404412635469b95109803c\nd51c7bcf851a368f90193fd5f5187893\n3c4c8e7ebdb95c2089a886870891682e\n5441f511736c03f9738e43095496b061\n5562593c6448e4856402b8f491cd92c7\na75a5570ba1571447e1dc03b595bd36c\ncbef425aa02873c0f51f77a6d7299806\nedf4152aa274a8ec78fe949fc1419876\nadf250aa1c9e0f9567232766992241d\n4264ba880cb763d37342f7d672371a5e\nd819fc4d86af592f7394c9d8807c7bdd\n1a442af63ca5159d86478bfcc70b1bc5\n3959856509e65a18a36258eabc2b9c\ne046b02e2d5c5187fe38a836aa59c483\n5e14471dd0ac3e47765ee729adbdf968\n3b082e34a78a3c23100d4716c7fbfbed\n681ee7768f9fa9072c5d34a902e568f9\n6eb19c354c19e759d5883ca9b41ac387\n9d71f9424fc659e17a50afc9c93f8a50\n44a525e7793e37c5d340e35bb5304768\n4f38d59a7fc3010fd7483d79670cc91e\n2bb137095c73ef6fe45ef4135c266a12\n3bde1338423d06b4c4fc66bd9d1f7f00\n4231174a23bac5d354d30af857cfae06\nf6ec4343f78b94b42553cc33364504d5\nb14cec4ece246fb75b937c87a8810c08\n79e7911ce615b63078831722644c29c3\n8acbc1b934489d6fefe244bf6a6a9769\ne96bc1b7f02caf77eaf288f952624966\na145bba4e4409bcac905813b9803ef0d\nc36b95723ccd6f6da99d925f789b1cf1\n12df0535bb43633abdd9b7a602ec35ec\nbb1ff02f14d1cdd19ccce4c6d5bb195f\nc9a3680859a722a0858699aaad4acee4\nea37d7670bf3294e60a3b49d78923dc3\n8ad01793daeda43dbd71cb387c4297a8\na6c888f2d78e83075936c7265c890fef\nbf77a1c8a520eb6deb0fe7d6b5545a1a\ne52a290532a567aefa10901ed3f9da3\nae4507fa0f4c936a31055213877993a3\nb69087245c6ce1c57fc1f91f1396c600\n974cc395f9684d47c955e5ed03ef3a2f\ndb32d69c5b2c77ba51b5726fdf67f095\n5e68b3e485b9e033ab4d0308b2ec6512\n8b62f4352dca92f657c81a572b80bc7\ne9a38d17361a5f20af268f6180933aa3\n89942c8f3c2796a71e54ac67f0143e13\n6aae683be40c3a9610c2a68437007d6\nd30873e4da202806d42b9650f19dd425\nba03fd0b4b54655df51f77a6d7299806\n7e5b7032a9faef913c5e1addd9922bf2\n4c55e5b0eb04f854297c137c93a4b9a5\n1d90363feb72fada9cdecade71f5dca2\nced7d80d220dca01ce5b275ea2158e2\n363c9169b12de77e1d4c681138512bef\n15a6e8fae3343178b4c161851ed2b4e4\nf28874ee319d1e2dd3bd10ac60e54bc9\n1d98ebfb72120470283b00891f680579\n2148ddc7d6228861e4dd86e9188294f\n839334dd754c09e5b7ea82317702e856\nb66ea953531a8d78f0c92c2dfba3cdce\nab04df0d02dd6126c183308b9aafe2ca\n610ccbf900e1bf4aeb34db531a289b8e\nc9675e9b6358165f66ccbd11a6ef0f68\n5e83bcbf2cafd5663087f84b199fd297\nf49c7d43808b1033f91663a74ccd2338\n1692563658149377630047043c6a0c50\n1cb5ed66917df7b3615b3e12f53b391d\n1ba43964b343f6b6ddad726b9e01fa69\n4a41fa511183aa138cbb8bac2032149c\n88c833a60e220f2320ccbe1c34ca182d\n68b2ed56ad8d4e1896b84415a3f1393b\n57ee5654191b4265890992ddacc04113\n77f54df25e2d1bf99a1735fdc80135be\n72f0bf15522498993f10a8b8beb12d1\n9140c6a8599f28fbf27a87e2aac4fd31\n12936ff9bc1103944b3c42e318f3affc\n12ecbeacae03825ef211221ba01b03bb\nd03256544371f1eafa6e1fd63f4a1c35\n8d0390d8d66bf1cc30b07c64830a47f3\nc6591f825c72dc6553a2cae48abaea7d\n29def96b77d4cfe372f9a9353d57f9ef\n83433f0c0a3801942eca57a2fad76f58\ndfdef0c8739cdd0944b0115560181a7a\n92e742c940c11e60812e3ecbeaae3980\n9ffd670b6eb68ae8840e9c8d11bc8e80\n285857e7d12f1b74a4d2a71d4ca57f99\n636fb360173b08e788dcbe86402c7c15\n8a47668d3584eef1e4317813b39d4fe\nf10473382b623504d79b19c7c4f0e293\ncaa172578943812ec50fe5c30bda6ca4\nbc5fdc598162f85076c7054c38bb1311\n4a47ff44cd2f024635cf289fa8ad7115\n1aaaed47c3a77219f2b931201029bc76\n294d38860c334c4954a61dbdbc1ac262\n768e965bfe1f6141473f10e6caaeca56\nd312c70dfc7017e9c55161a63fbd109a\n75f2e71073707ffd9ed6e8a0d47c5a7a\na034755df11115a1a71c812e027f94d9\n7da66ff46ecb79e52225858d7500e21\n32761afb4b1eaf31810493eb9cc85e00\n165e579c965b215b43dbb6421d614c0d\na7809c62e26301e08850ff5e612b6198\n970e70ae46244887c35d3c5d3b1fcf7\n265851637a59eb2f882f822c83877cbc\n2b39330072a4d5c83825a5bc524f67c9\n51205a57beb69476fa4763675e844f9c\n78b4eb949311548236da5f8a6c22b2dd\nddbbe3651f274503c7f9b652b66aa35c\n8a385fd026d4efdc517376ab44a447e5\n79eb4b57cbd73e117e2e50070ddfd27c\n5fc0812f8673249aa6a7b6e78d8d5bcb\nb54d222311420195d9fad8aba2c312b7\naeb34b796044d26f2705f56670a32884\nb12b2f12db92ed70c48d90eef8384210\n13f7210d5d472518febad4f49b26ec52\nfe167899fda76d1e88dcbe86402c7c15\n4ff1ae700013a877ca6910e4922d61aa\n82b5a7823990ff0f48964aae007fabd0\nb40b97894f2c750bdbf8817a0e330a74\nd430b0c4136e87327e72463702194870\n23dffe55684018589030b5e29a228aff\n4fb40a85a2989785d5abaf84513415a2\nca22c129ee2ad8a1f0ca692121a428c5\n4cfe758f926fbdf2f51fa0238791f5dc\n426fbc6c365147fb6430c2c15987e4cd\n7cad0234edde1e90edd9ab1253e1a9c4\n2764d2783f999fd0214a15a5a42c49c0\n1d42f42755aa3a87b2644d7d4d7ea2c7\n3031461b84576d7d6a69760cb58e50e8\ncb71e1cf52531981593ebeeedbff73b\nb16567c16d0aca41532e8683617554c4\n3b8af4931096a5b7310cd758d9b7cf\n26432bcd60baec3182c17278756c0a5b\n8cb5ae6c0998479a8cbb8bac2032149c\neee08384e4f5c338a6ff78107fd2d715\na1d9f62e3bf2863278f39854b0025475\n1f5ee5ebb9ba55f454d30af857cfae06\nd9fb408a6fd11e6c22ce72a02bf771ea\ndd0521f27114171e492d9da2668ec34c\n9b722071fde9069ccce4c6d5bb195f\n6f92486fa7a1aea221ab9b8a0e862145\n84d5c290aa1c5c3e28d0a21d73b2739d\n3e4434c7714ebf307ac0fae7c37e01a7\na88b21425768bce39f6ec855d7c1f09c\n1c679d8a4fc274f47523f50a56d94935\neb291380d399ddebafaac116abdd44e\n722bd78d5f625018d27b31bdeb5f5c79\n6d4e96c31d1b1f9d16aeb5e4ffcb8813\n5788395c87b524db79157224cf10b26\n3239a4e1c62099556ee5c30704fa2d08\ne5ea9b41ff06d7ce2c396131c7cc7ef8\na69b27f76baf9f75d612e9885a7318aa\nae2575fb16051c6b668ae11a7db5e82a\n4380ce2f9c06f92744175b4dddf5be08\n34208e6a1f53551366d6af16d45fa132\n83786b4a5d955949a495869179e36802\n14ed71cd9f154616bdfa5e0753fa3240\nfe2c951f711bf1971a12d98ab62a7b8e\n6be99fd273c3eb879d4c79351958f461\na14d6cda9c2ca5c0c955e5ed03ef3a2f\n8be5c241cef6212fbd1f60c111786ed\n57364a6bcfdd730f166ddaef2c2c61ae\n1f748bcf0ee8eea7da9c49a653a829eb\nfca884f9aaea06cc9c1e87e8cf2e52d8\n2e007165e4f48ee3cd4a89b0fee32930\ned59907918516bbb4c24aa998833ed98\n34ca15546a48e34798d5fc0473d00a1c\n417f1c15c20966a54f5039bed03ee12\n5ec773b266374121e8058cf23f6382c1\n981f5f50bd8821e8d935bb36a3b0560c\nfcf0e9c2aed826c7fdb2052f1980b788\n17936c67b822fdbb6129e6c3b6c36a7e\n6a4bbd1a2d533741849f98fb0b88a16a\n47b6fc814d22a030db6175ef18ad3f80\n268116c288b215c43dbb6421d614c0d\nc2e2206394f6de78a78a19ca5a5a5ca3\ncf2ea610fbafece363944951133f1c85\nea60ea168f766580617092ec6e36103f\n38ec61e847b8ec152864bfffd12f80b5\n9c57462582737eb7d46cc1240811b39d\nd1b34fc25b5ed4e42fa77440dcb93214\n70d8bfb20df2a08ce4730f03eef08800\n33eff70928eefb54738e43095496b061\n840ab934a623e29d4253be890e153964\naec823460d983866d23df9ad1134a651\ncc4c36724d3c26c65ff61a3a2a0e2484\n4b57450a988be6c1f51f77a6d7299806\ne21fddb872844e02713f2e93cbeac35d\n332c75b56c4a80f77ff6ace05b36a5\n683fd587db784b87a71c812e027f94d9\na713c7f070c4fda022abf78951dd8624\nfb0459ca3947e2fecf5d00de99803a2b\ndd197fdad7f339cbe8b31d97326b3fa0\n876794a6a673dcfe502c728096f4ea53\n441e0682fa5eea135c49e0733c4459d0\n79ea27001d37617b4f7c5e1744a5e6f5\n6e31a64910fa5fdc9db8ad97fd392b59\n9ee885f08e0dd5273d154a49485f64f1\n335858ca88e800c34897c77cbc788880\n47758895632d44efba4e573e8ad2f887\n6ae5a011c8724eb5c3bd24f986301745\n67b25a96e4a0f49bc41d4e0e25295960\nc86d75f3408c7ab5a6b3538efbf4faad\n8a3fe76dcc0c54cb502ac2eb9128f9a\n657bc03a22b4ee207638fc7b029fa96\nb23030e1b7084fd9d38913e96bbf2a5d\n50323d86b68db6fbc35131da26f8061a\nc49e9c8c1306d3a4f09a2b323d5dc94c\n6d5a70271c0529071360172b4b6205b1\nb16b0c22f89f43ca9b40e76e725878\nda0def87fd8cd658da094b3bbad5f5e4\n97e3768e85c686f9601bea3dca268229\n30c88fa790ac14f750d31060ff1b5551\n6278f1b6aa0c85effebad4f49b26ec52\n10c0eecb17d1bac64b3c42e318f3affc\n4369d61d4409bac0413500ea4648b88\n6acf2b080e171859412dfc90452742c7\n1ad0e2f815c6f242d197f67767b32741\n31451828a0b452174705d3a68027b503\n4c3ca87e50585617f9696ffb3e2cb66\n4d45859eaf2627f5ba350d190cd1c00\nd007026a83d6be854e48282b72e69035\n2ae89daf7433f4d14b3c42e318f3affc\n9d54c8a7ea484adea330b2d4b3aea8f9\nea45801f26b84935d0ebb3b81115ac90\nae62ecc28b56c7ad68e125404f814ba\nf195ff52401da593344db0d9ed96427e\n9d1f337286e7a4d39aabd1d2b22d025\nbd12dca2d655a093bda72093f9b5aa73\nba08fa516347f4e6f51f77a6d7299806\nc1dcefb2613afebfebe4b9fb2707d260\nd7da105cbde6ad8ad027f5769c5504b9\n7c793900baa4ca16371fff21f277e702\ne4f6069dee09b0df237af722b64576c2\nbf81d46925ba8ef7ef6c510e24348d3b\ndf63a11436240ec7fb906a2c84fd375f\n61fe7cce3cc4b7f2f1783a44a88d6274\n375652536313a1c2278f90ef85162deb\n8504c3823e5485f8951c1fffab4f5807\n3d83fa746851500cba85f67361bdb32\n2ab14a50afa530d5253e170a96a633c1\ndca260c356a236053f2fc07aab1b396c\n7acabc265397e604593ebeeedbff73b\n9d0c9d8e03fa4f281a67ed3cdf707521\n6f6d4abfb84b9eb527c3aad6317cf3db\ndd9782826dda1284b3104e94482ea9ce\nc57c4616b4a9c14ca93412f1b60e6fba\nebc897217df591d73542091189dc62b5\n486b0764bb1fb92cc3bd24f986301745\n2fb395d53b34b02fae5873f5a6ed699\n91a56c9037ba4a63a393ceda265543cf\n43842d53c1ecb4ef2e3a784001157d1e\n7ff6c7f050eecd378c9b2896f4602557\nb4855f52572ce2b0febad4f49b26ec52\n236380670cdbf2c3a4a70f7cc08674ca\n4b47e8b6ac084de116a2b5862518c93\n46e88f122a869874d989c9f989a09ff\nc421fdd1b116030fb129901f80d24b7b\nbab86ce3e5bf3aac9715146e52a0621c\n6722714a020f703451c4deb11af7079e\n857ae7eeae1508e9b0957d845ac33749\ne6ec89773cb0e3ab3880b925e059dd8\n963bfaef4271c4e6955824885d6e7dc0\ncd6f5c39cdf1b57a93bf4c26a8803fd4\nbe4db395f7b2f089391e4d6c585a697a\nbf29f1397cfcf056febad4f49b26ec52\nde5de9cd2d952cc5278f90ef85162deb\n8a1687e286cb0b6f9f2349486c570dd4\nfebbc5702f304c16f51fa0238791f5dc\n8421fd68fddd2a033f40a91f25bb93a\na0e6486608007bf4c955e5ed03ef3a2f\n98dcbe480586e9a951d5d1004657a651\n712a7d7ab58960829408655f72318aa1\nccb1c5fecc863084391e4d6c585a697a\na9504a750945231f91bed99343331f7c\ndc868ad981c23d22f91663a74ccd2338\nf0e98a20a4ad33b15578685df571d8b6\nff5a2e340869e9c45981503fc6dfccb2\n8ec96360a8674db5b000f20a5153622c\n35bce0bd439e04e63d039fd0dc042dcf\n5eba36c416524db2f42a90fe4baf4591\n9e6aba6596ffbf95a9bdc22a1e02e82\n3532707a0addc62e13680f9c7026bd5b\nf624b401d623b74a87b2f182070d92e2\n5af813d1c68d4e557307e0a6ee770fe0\nc9cda6b019153ded8cbb8bac2032149c\n8416d97c1e7b4ab323eb3ad3d378722a\n9b0a6771ddd952a036b0f2a1430e993a\n66e49590fed26b4b8a6a1538ac23319d\n425e21671035806ff51fa0238791f5dc\nbdc159bdb0147e2d54f10b531fe5914c\na767059df7040b5fbe127423452ccc7b\n9e560ee4c7438578f51f77a6d7299806\nf4f96a7c9b71fa9855b72fb3e8922a58\nb95b9f2d28ab42e49bdca9b7303475c3\n3a3f32deb30dc4e32ea98d69e91ba870\n892127d87f684bd14b91ba28fa583347\ndfafa039da1cf318a42557fe008dfc94\nd08a421a6362b4bcb000f20a5153622c\n1e37f6dad9bb5fdf2f05c3ceed4d6250\nd9daa0e33f695897136d9cfd13835101\na3e030b5fd13158d7a2166c62eb7eb3\na42a58b3fae9ce5054f5039bed03ee12\nf40c11ff508e477d55f46d55537192b6\n214e9b1346a498c0f51f77a6d7299806\n711d439d6638b4c33efa790205f68f8\n4f2b4f1c35054480438d580e74643a65\nad9adf7c2c45842ae7354dcb6082ee59\n210ad02f34db100c236f7a807f5aed3c\ncbb90091d43fabcbd5cb6d178687b980\nd8b547a164d2f356ff24b36f1450b61c\n7f2d4ff98dec893094210977e5394f26\nc43d83c84e8d2614742728b30848ed03\n9aca8b4392e603fcb1763573e754f7af\n81ece5ee42a4f814d384177e3e0b693c\n8d0563a9920592d10b3ff08c68acccf\n12b7462856335e3d2404817055fb55cc\ncf010623152e31ad2366f6466c2cbc19\n535b4f96f57a03b2bea4b6e7618432\na8840b65c6dacc627984fb9ec7e40829\n4ea4834db898a3f58cbb8bac2032149c\n1a1fb603583ce36fc3bd24f986301745\n43aef0e663e734b75dcc7ddfa72357b1\n33d620c4e8af291d5dcc7ddfa72357b1\ne79b8e7272ea19ca2112c05ea370d321\nf1b10865243d1ebd77cf3bb06f394ad\n71e814e5c0f59c1ec45dce3c044e7ab3\na253b171a28f3ecdb781d9dcb8ecbccc\n70c02e8ff7d19554e6fe3612af521500\nde10ce891b1cd33635836c728d324152\n4cd11ae56eba48684733824eae5cd9ae\nfb3c684afcafce085a3075d93a0a3a93\n5db80b2854ccfb6ae2b372d25f6c9482\n120ac04ddb930aa9b2029d92310f4aeb\n1a1223b411a9cf92e7c7920f6a65a54d\nd20dbb223dc5e26e6e4d44229ea605db\na86b48fbcd775bb16cff9b44fdf0517e\n459304c1c27aa82aa14bb1d7e401bf06\n392ed157b61814e2febad4f49b26ec52\n519d1f0e03a9fbefaf794c3011d17461\ndb89cf8ec0ae8e10f42e033ed19d598b\nc5ea662fb31f56cb2a155afd9dbbb0a\n5aefdd5252fb662df51fa0238791f5dc\ne6684a7ab98d2809856053d38b62525e\nb598794290077d8cfbbc7c456d85ce59\nc8276ccc8fc631104a7dc8b5b1635d46\n637bc87d013b1b09f51f77a6d7299806\nd48b1d27c46b56f2bde1c279d540fc66\nc7f4004cece37b4bc08256cf85537e\n72fef5cb33aae9cf94d7e6d8577c8ff\n39b851143b4f68ba21d25a6a55757584\n81d84727a6da7ea7bb8dc0cd2a40a9a4\n266ba504ee57b85c5298386582afecd3\n86b942f68417df36cbde89e0c48a01bf\n2e9be34fe47802b217ffa9a4ab48724c\nafbb16b9771a020d123691872d565e10\n98b0b99d86a2342b2b23d7805f9b288c\n8fc0e4d561b5f551dcc34b96ec9c53d3\n7aeafb18b724738b9d57383d20e2e6b7\n62b17d7d8fa7ad00f51fa0238791f5dc\n956752510546d938788e70128ded264a\nbd974108a3455842668ae11a7db5e82a\n5fa362fd2bd9e4b5febad4f49b26ec52\n43f2e83d015469c71ba2f806cba87b47\nb256041abd83a94862158b7ee658e910\nd6b61af7935d36a6f0aeabfdcb4e1dd9\n63aa4cdf9276e6bc19cdd91652400369\n40ae20513a1ddcdcf6cabe1df6f4c9d9\nfd7ed06e2ceb26d766c55b7c01b230bc\n2b7b66623a00dd8b78838533e331d3cf\n468955eaf3b3a4c6df8b5f0b7511efe5\n6f7260eb15f4531348ca89b7a9405654\n82d1c45956b00636b7b774bdb9e14e53\n6cadd91f66569c584f60f15da4c665d0\n3a8c86ee236ad156c6542d86974f9497\n8bfdaf14a1b271954be714694b176f45\nea5e7b13d0eda809663191fd557d3a61\nf81301719860a0e14626b1c05b10e40e\nab463d43646bd5dcd27b31bdeb5f5c79\n97af27d6dd13962fae9714d138f9ea9d\nf78e16c1dbc4dbd31349824369d952b3\nc365c85ae03b768667fd127a03ee9f72\n45e24015d08d65eb8d861be5b561accd\n7041d4ec390b8b12234a98794d9f2b5d\nd939c9aff66ee720c47a35332c17cce2\n3f80c1ddfce08d18525211e12d56c55f\nfd1573fb1fc4a99b4c161851ed2b4e4\n34105c5e1e64f66b23eb3ad3d378722a\nc613e4469bfeda17cc4256bed53b2ee2\nfaa05897ccdaa0e4f51f77a6d7299806\n8a2598fefd4a81e9c7b11e86284a2e\nce1e09dec6387f715fcce4c360a80a36\nf1a6dd0d5d9bccf3825a5bc524f67c9\n5d7f7ef4f2f2e99f1e923e5a90fc6bf2\ne490518bf6d40e138288267d39a90f5\ne3da34a62e53689e82028a475156419\nf7fea253245d97786c02d42bfa6c5667\na4b09d3dc36ce23bab4d0308b2ec6512\ne48675e37096a6898527e24d5de49fe6\nd0b6d6210a65f1e4e50369287c07141d\n3e0b229e646595261a719e2a845bdada\n3e32e9de344b723435c5f7d532a05db4\n17a5f7fd90d2bf98b40f0ac0fb9a650d\n12fa3eea2b02ab9e931178a47d29b194\n6ae63bfca4db6e42937c609387f975a5\nb390566645360e5d69fb38085fbc320c\n3f48840eca0de14ee693975eda4e3db8\n37bed46307d59fa5cc4dc0a78fc422fa\nb1d643bee9cc33d9668ae11a7db5e82a\nb0c37b379725feec97ed2c3bf3711e68\na084dbfaa217331894c13f8f78a6d62\nf3db554c71dcae06a40d3d325dad76b5\n9a01ec707c25dc606199d6fe090be061\n60fdeb4561048f63f5823a6b2902a9e4\nf4ce170a6abb80b081654cb17c02fd\nbe461a1a083481c8488017d48a7f7eb4\nef5788dd59881f2dbeea80ff21252e37\n7e871b4bbc5e3d175cfc8af3b7d60a4b\n5c3932413e5433e0f51f77a6d7299806\nb2eb5e56fb8342f81c25d54737ed5c8e\n884a1ff382ca00d340d1d1b64916e0c7\nbbb7ad20cbe09b9b2ae0028d477b835f\n16fa03bfc61770652c5d34a902e568f9\n50480d9733231475eaf288f952624966\n22c2431d6be8a3a8d6983f351200ac6a\n4ccb70092f002d124212ff51b27f0221\n952da8ad85350267b9b072e1f62798f5\nf82473746c17ef04f2baf097673c64e5\ndd2238408ee5d84d8d1c97149a00bd19\n9768599990ec4b54575fb26548334725\na42d138bdd78cfe640abe029c3c77771\n30c669e02f875ae6668ae11a7db5e82a\nd16bb369a03f260cc48d90eef8384210\n1810b6accc77d7893918f23e2305ede2\ne9cbfadc69d199c6368aec320face349\n877e3505ebab096848f551687b50fb00\nb7c36f0afe9f16655b1ab0bf4891d200\na542ba8480b71843cea3bc3a9009695\nbc7a99b74e3dd257c955e5ed03ef3a2f\nf7477e845dad9568b0aa15078ea6f391\nf9a795649f679b578f3be993fec1ba7b\ne3820857258a0bd2800d7b7d07715065\n74a626c1b31c14cbf8b8d4a282992be4\n5276058cfc1e139326392a5b643ed5e3\nd1296da8d3a45ac88aaae3d020f5ddf8\n30ef2e867e365b735445e46058840642\n3b7db1bbe9ca00204d851671c3f1cc65\n8e8b8a01fc4abd88fc4a4d8514534de1\n91d5f09b7126c4b9d158bbba9bf9a9e1\n3437f0ce3933d664842f894f9ca76d59\ndcdea1e749d4e20c63eb57c871ab1d8e\n8519a614ac4b1c642b70eac6546e93fd\nc9ab6dcc7e4606adf00f0216ab99ff30\n26ab5349a902d570d42b9650f19dd425\nc43868d3e8ed646f4510596cb4be6a33\n8df054f74a538e72c955e5ed03ef3a2f\n375972fee9a2a6e28d2d730aebe7865d\nf995c1239510cf8b5d009c98a5b96836\n66517b894b9ea3ffe22ea6d770699e4b\n9b8e7652eac8daef33e6ceca7fd89911\n8c2bb08ed6fcbcf3fdd3e2baf05d0f57\n5214aab74399556959f8e31ca87c470e\n615417f66fc542c6f51f77a6d7299806\n57e3a5f82b410e24febad4f49b26ec52\n63f568ee89ac03c6603557e69ac4ca11\n2b9153514eb1c46bc6a830e27533d086\n229b99c5f07fc657798b7aa9a1ef8938\n87af702a9a5370aceea6a5a0ebf81e97\n23486b58246302de979ace30a051374c\nc4202200cd2ff878489ea1c28ddd58f0\nfd07e0a8265d1e15db11d29991a4fad8\n5b06d5db4da42b96492d9da2668ec34c\nd7edd292f614e9dc58b7984178830447\n74e9d9cd7b3d632a504721639e19f609\n55c2262e68f311fea5526f91aecc0c37\ne1d8f005e47f3a4ead01cc66cfa1fb80\nd6064ca673a721ee44175b4dddf5be08\nadc027df0d7ee0c9ccce4c6d5bb195f\n6c4cb518c38c50c9939c47ac2990d9c1\n572abcadc95a8ed14b3c42e318f3affc\ne05344d8bd3ef63c5b7bf37141f96eae\n746f88894a7cadb6253bda70c38d078\ne724ee5c326ecb9659db00799f9936b2\nef7ff0018b4041ad577f990873b69f82\n343b2351e2605a075445e46058840642\n4cef53c3310bc0561826247b46b2ae8\n22e1bbacd4ae7812a23d33d54fbb4b2b\n54f33905a3c8973a4b3c42e318f3affc\n520b83f501329fa955f46d55537192b6\nffd45a17e325bfa91933ffef19678834\nbe9a0901f9ac115d71b883b95236fc2b\na90014ce65aef22135836c728d324152\n1bba8d173012111f5fceaa39a8353bde\ncf478aac2058cae0e589b08489d157d\n9cd301c49dd65c68819b97ced0e92930\n9199b088ede8a2c920768660cf080d12\n7fc2174b2016f76abffa9cc541347f97\n7b504e7d89d9e8d822a33e080d0e71c\n7f1019432a168f451512cfcf562674ac\n8885e21ea12d6fc2b41f1e9ce6f64e36\n89bfd0ececc5a00b6e861001bc3826a\n66298b3f4d2dc69db6572d78be2f91d8\nd704a2ea75d8a2b3507969980fe06783\na375aa82c58fdeb67cf50d57d36c5a02\n53e8fff5ddea1b47d44dc16af152638\n4ed5863efaae348d8b773535ea8cba6d\nc29a4a7506b89be2af4d0d91ea903469\ne7b9c7a47208cb067b14a4ce87ce734f\ne6b84acd543ebf20662cdc2f77e49a85\naccdf18e9eea0dc31191025061735ea3\n138a1ff3aa457b30497839e108373e6e\n7e03f7b740e118abeae724160fcfe6b4\nc826802d2a084845979f073230404b25\n8e3a92a1f9155845d810b14a81e12eca\n7f1749643345953cf51f77a6d7299806\n131bca5d855f49d428e3317d62e4ff40\n59dd0aee74ce6d1798b8c800ae001b66\n6555b5004c742433e3785a46a5c831bd\n70a17261539dd92fce1403db8f7dbbbb\n5f66c21e40105601958cd9a7e5831839\n757bd36fa1b0f3984b3c42e318f3affc\n50e69dfb7802b094cfedb1d8b135cde9\n7257fc99c253994c6fd6654fda9ac5f0\nd6acd7d7c9e0deaacc963bba1556032a\ndeb8b5c0baed637625f61c02205f9a5c\n47315d244171ef7171a782a4379556c7\n36fa3daee9a560f049ad73d13f0c98e0\n78ccb410de7bfd821f8d8332ee17945a\nc966a18da154da2c467289cae69b100f\n8befcc7798ae971bef5d2a19d1cee3f1\nf0c5410293e85a695a96bae7b017a6d9\n9bb7bbab61c5d4e947839bae1bc65257\n8cc6cd529cbd74b5769cf9dd5d8f2768\n1ef6c2b9d413fb7c681404257d94ad9\nab8f7cd2ba798e33b035d20a1a3ca345\nee077280e4f7c4a5ca554b08dbb3ef2\ne0c570b6776eeccec715f352ef265874\n455df1ea3058c48e33c1aef7ee7c6797\naa69a26be784dcd2cf004563556ddb36\n661b8e9d5a93e2a4b4c161851ed2b4e4\n7ad02b2b54c9456335ce7cf30c872281\nd37560b9ea27af4efe354164024016d6\n9792d6d50c07e27627992812a922e94a\n39adf6058de74934ba18ade30e563d37\n7147a78bce941b6e9784d1512b6b87bb\nf4f168b88686872f785f45147f3e474\n953ffe955229423213d2510999d0f1d2\n25136703ff8fe0a8a27b22aaa3daadd6\n391fa4da294c70d0a4e97ce1d10a5ae6\na4b1d784abd7eba15b17dbcbc75d58df\nc0ec7cca02bd2225f1783a44a88d6274\nf92b1c64b0306322de6ff974c28c2f8b\n7bc45a32e5b7f14f7e1dc33a9d8d260a\ndc3a90ee32e36cad43dbb6421d614c0d\n79ae3e5787e0a07542ff37a1b760099b\n971939c687f63b9eca76c527f185435c\n9c1b0058dfe027cbf519adc9991b5f11\nf9bbfd8acdee30158a63c123f2a561a6\n62fd8ef531c663bf6fe2eb61cd6e74e5\ne44531f7204b6fb9fe43ff1e45af424d\nae6594f65639a51845f0e5dddef26b1a\n8bfb5dbd48e6bcd5aec454eed44c3c27\n6fe854efba4d9ddcd4cfbd0aef5a371\n302ba9e290485f9c310cd758d9b7cf\n3e30deadc87180b6c3bd24f986301745\ne6a188bbf8315d11f1783a44a88d6274\n3af1f6a0d7a8584d719d8721fec72f0c\n2144d79a6310f1e2934cee69ace78b94\na447c1fe6f458a02e76bc197b3a3ffc0\nbce46214d9982829f51f77a6d7299806\ne2022bd4d83dd6155a15b6547f08c8fe\n8aac86cf8c72a375dcc7ddfa72357b1\n6aa865b9e1e9384d40ed3786e46af8d\na569cf5284a45a3f353c1d159a8a8422\n79b1e6c1e72490c98ca0fe30c6caf3f4\ndbe17b86d79a24f1ae96150e4aa362f9\n5bfef1c85186b2d836b0f2a1430e993a\nd3f4d13ab71856953f5dcc11a7c57129\nde551ddcab968586a90dd8e076a5a7f9\n27ef271434e2ab43f07fee5fc5c45ee2\n88e6afb8c56788899470764d5e97d4ad\nf7ff2f9bb62a9f5c96de5fa2ca080bfe\nf31398b4a1f8562f9297752c3edd590\n8b319bad7b3ff1b2ea60ed8d67a889c\ne78e481200b9c01323720b60324690f9\nf0617cdf9dd8ece3d838ae16242881dc\na96eb4bdd69c103dd293c20958d173d3\nadbd3814cdb655a7b11ae648ea92233\n76635dc55e9783b6c8c2a1a2edf00686\nd268aa3ecf296572c0806ee26b689c99\ne751c765bfb096da43f06ece0b2b5196\n3576a576c81f2966f2f40b9b3af5eeca\n96dc43fe4cfe5668cdb6b5e54fc64b6a\nda9ff1881e8d59847d76632660780a8c\ne407b3cb5cbd7d4fe0f0631862fa9bfa\n31f47d0373170683f6c84947abf8f003\n20b5a668a57dcdb3402fc9e845187711\nfc8768524737826190e7e9cd4c47f9dc\ne3cb6cc8df6f7390d1a63a2e2039ff73\n3e34ca92c5067543fe9536dd9aed405f\n68ef6fc62b9d7f161a8a283df3396be6\nec91cae6576b5149484539ed1814944e\nca56e6241a3c762a391c070c9832629\nff1c8d1e157f3b74b0ceed2c36e897b8\n313957e318bb7849febad4f49b26ec52\nc074e43821469150d6084fb53091249\nbfa77d6ff4e853a275b278bf2780ee51\n64d243c58e649783002761e7a3ba3bd\n39fb0260d1e669bed0037f03195bf42\nf4d0e1be9884f45cd2fc64a9331b7788\n4d22674c2acd9cc9f51f77a6d7299806\n4502c9c63e7b0bda412dfc90452742c7\n73dfee7c17dd0b2e469ceade478d6997\ndf9a0a4a35c0a1482a610b86c623da3d\ne6da3e780a427429791f2019e8710746\n282d36d7ca9705f6ca421e9e01647b4a\n8cd343b3adf5118d7fa29a3ea424473\n2330e9debdedf9ff99284d844aba7576\n20e5bb165c5e129ea5a11194083a61e7\na3db8fc07fefad03db984b8f0550fcd4\n52997bb331942b64f84b0be7f50940eb\n37299b12d2ac7fe13fcaef19d88744fb\nb696793f05faa0debc5c12f67106b799\ne3d7cdd0224a4fedd810b14a81e12eca\n4f9bfdae2b76536b3212177d8262e8ae\nad38f4e8026d7858c3bd24f986301745\nfafd354b0713882e4532856089dfcdf5\n7813370035ee02eee0c5923879d79f21\ne263fafc76ddb82b4cc80585c0d3d970\n6b276165b6118e85ad312873b158ac49\n224be4e98e6edc46cdc7385b337a3db1\n785a68eefd1035f468661782af60b711\ne7eb326a867912fe16b2b5432674ae6\nac6f632b60ec643650fa82c2f036109a\nc6116173a1cffecaec9ff818c66c8a16\n89552ce12717e70d40ef1c8b63a628f9\na0aeb5a735e15171f15e29f2d0bc457\n3fde8835e0f31a64d8cad143689f8b51\n8b972b066bfdd7c44f016493aa9fd9\ne9bbdfed8a39f4cbcb2a965e75be701c\nf73cc62cf8ca9d954c7384dbb75cab0d\n45d5801abb4affea5b411468d0e36e1e\nc679e4eab49f91fcb4392c1299b1bbaf\n7f284e0ae4c1430fc5beea20858a99d5\n43deedd337b00bfcf84b0be7f50940eb\n63e109fc1e40fda246b9f3b6ee20ff4b\nf4203c90d740596f70b396e6f5e48bfe\nf7ce798a5ea0850c4b3c42e318f3affc\ne7b76d66231ad077cf004563556ddb36\n46cef01263d9b449405738a4d4d0fc7f\n5ba34bb2440aa2b917b431cae0dd70ed\n3b64bf8731a6a2a63c5e1addd9922bf2\n98583f22ba708ddb4b3c42e318f3affc\n904141878e75b065f48f3ef41449c816\n5f4ce562f8ebfb00a9f598bc574004c2\nd9467c88e3e26d3c4b3c42e318f3affc\n7620cd93dbf32cce5213cec267286d18\nba6992957c2e6e6df67676f416157590\nade4f7281cc55e016fad58965decd164\nea7ca8c7d68c1f62660d2c57f39fb65d\na0fa360b6e9b22196db2ac45db35c175\n7ab4a9f2c8aa3636cce18f92a75d5ffa\nf0f1835eca48e3ae3241548166bb146\n1c66f97bf8375052c13e020d985215e3\nc393265168bcc56cf3ced7613d1c130b\nacde36e1b4c14b9aec2d07c46434bacd\nd236d890ebc96f9ddaeb6f944439aef2\n230047ad76c117412cba66dc6aeabcd4\n38ae45935dcc83fcc8c2a1a2edf00686\n57d6c26b519918d770cd267ba4f2b2ee\n7a2a0c5175ea17d88101accd22c701b9\n18fef71ad80139a2af02521b7ec8a38e\ndd63ad97240a5744a022be8e8ae85897\ncc8e9d46def8065c5fc367a00ce4b49d\n5a9a9b14c1830de641cf86c757faf4f9\ne8d55124a196c71f64a8099f44773f21\nbed0b40333f195c52ea6ece84d077ef0\n5353ec05576ed7c0aa7cb30470f3273c\n777365e9179ef98cea4f74d1efed63c3\nc8662ebf433759bd4bcc3951a8858950\n3fc6396e6a1270bdbca69f936e89647\n2c9f91ed0b0584e196a3517f50eeb9f4\n15e651b8b7a0c880ac13edc49a7166b9\nffe02f7b3b421ee96cff9b44fdf0517e\n564385b1081e9ab760eb699207aa149d\n3bbaad82416c897d82d19a07de9030f1\n7a0a47c08464a493d1433b6d2f686197\n41e1dd0f69afd7b093e18ebd46d61795\nb063b55df11f5df434b168be15357fd0\ne290e905c015ea0cc58b5b892c704fe5\n2437cb5665522ae3e329950ec40f6dd\n9437fea69f0b44e8f97ef3b999ddb957\n5e8f470250f92a0f597976c675750537\ncb6a8ea7b323c023f046f610ef0e4e90\nfbcdfe3edfc9a679ad5067eac75a07f7\na6fea71cb6bee0ccf529ce6ea3376441\nb82e94209375e92a17b431cae0dd70ed\nc64b12e620977f0a87039a8d98cfc027\n1dae9ed6781af75f6675521fa630312c\na12a759155f4d0ed7eaa96064512efab\n47ba08a0f617efc7a71c812e027f94d9\n4a6d33949265bb6569eabdc5c4c6d724\n146f90f6a4d8c7bd142fb08fcc642f29\nba44082e55ea58f431475fd256bf1b7a\n8af24cacd38e9c0aba5342d638d0c267\nbb7672d1a987dc303fb0851e9bc87551\n1c6eb4cd121175f5d009c98a5b96836\n565ad2f2a4caf3429d297e74104d3ac3\nab5faf4dc8b23517ded06cbcf08b2fff\n1f95c9d8e65c117343dbb6421d614c0d\n7f39803c32028449e76bc197b3a3ffc0\n63669ae28cf69b767f51cfad32a5bc58\n17d3e93e5f3bf2044671d97b0fd17f51\ne09377eefe363b4f8101accd22c701b9\n97b1b1f674df7fd08d413b6cca5747d1\ne439549f5da57f5ea5676001632ead27\n90908595d267ed89d970a88713e6172a\n965abcd187b93da3f1783a44a88d6274\n2da86dfedc2620b61001738bb075c8ce\n98c67a49d64d7bed1cf96a5dc33e37f1\n684dd5cc9c642f98f2dc935ce0a740fa\naba115d7fd94b7cd4bd9e0690b0b191\n56daddb695e25fac341afa383659322\n7cb4211c4a8dc2cbad5067eac75a07f7\n9323cd461b771e8ecb503f63ed915ed2\n2cee786a3480113a2241dba92389a637\n369b720841edc539611a3acf20a3c963\n92bfb87451cca049febad4f49b26ec52\na334f2d3eeebaccab40f0ac0fb9a650d\n6200bfa29b2912048b083202dd9c4b6b\nc8dc82f68335fdbe6b41b8bcd0404ec\n3e504f94b63c77c34b3c42e318f3affc\n1671665cd0e2ce05660aaee3010d2fe2\n5c45f8d68b676f634b3c42e318f3affc\n9431f50b757b81fb15e0f0bc4a421e4a\nbdd9dbe62272e25c48d90eef8384210\n4987ccbc34697b446385bd4c1a835150\ndd35a3f0ba7c5f2e73ea70c16ec9e2b7\n569095c884b4361f77161ca74d215eee\ncc1a9fc08b4c481c382c5a0f87d73d23\n50e269a6c3f3b558db19fa16d5cba023\nd1d9e395bff3d3a7c8fc6229eb64e56a\nb3ca1f79cfb6b29cfc25405fbf8f85f4\n5d21564e87d0a1f3ea4b8033405be154\nd8c35b0ed66cfafa426c7177f78cd656\n1b9605a88fdee0626bdcd672c2b17215\n67584a2261e175ccfbed972ae4fd63af\n39a71631941673b1c287a33ab134ac42\n6661ae18418d7cb28965f16c5573871b\nc9e09052118e6fc112e2da326535f859\n6a8df7fe3bed16f736ac40071701c687\na00017528f02804e85c2318bffd77ab\n4e232b14eff92afb268cf362bf3a8d20\n64e260594e3c3dceabe659e45c4a5b67\nc9a9feb520968bc79ccce4c6d5bb195f\nadefdce69de361c58d8358620132e773\nbc4167ab0fa22678e0fcc90cf126de96\n7842ac8b7a053dbf61bf305cc5ea87da\ne8ed10a7666a10a1edc98d150672fbfd\n5b349df34184e7fc2ad490d4d7fae486\n32c78783100eac55b45b50ab552e35ba\n9a3df6c365a3df3db000f20a5153622c\n73157856beb04619eda877ebd51b3abd\na6c192247329a32e6a19b0779ac03754\n1bc326fc94e0cfc1cf5a37a70014c623\n54addcbdd400808f54d30af857cfae06\n80a2c69d8ca29bd136b0f2a1430e993a\n16f603525c5ce57b23f7198a00163bb6\n65bb2d37c52ce089e76bc197b3a3ffc0\n3512806247a9e1ae4ffcc2bca1c09e9\nfc1956b87d9cb195f5854716eabccda7\n6913ad01e9b00c4ca6c03a53cf0a14c9\n1fdb34aefd1d6eebb4f9aaea3b860d10\n48ccce122177c96c3dc1643807625350\n415e3d53c7a93ef88b90ca5a8d93018c\n46e1e82d296cceb389a52d0b0203298\n649da94b45bafa807f8769b595aa12b0\n81b379e6871c97e45964cca694d01a7e\nf2c4fbc0c7c9b87d961b3f02493c4f73\nea98f80f4a663d7bdadcd309a90928c9\ne6ddcae1c08b880811d3792a7f546aa8\n72edff728d75b0b8f994e2a430ba61bf\nab529bd91a158a53851911ab8e53bed\n5e978c92d55f7852185574a5e2255bb6\nbde0b499bb218666c6f42ae239fa6819\n707e63122691f0cb490ad276cd2af3a4\n2c6dcfd1c08950554b3c42e318f3affc\n65f126afcc43ba69a4d89a7050f2b7cf\ne5567a82c577e8af83ab2e8865eef185\n273f79cbdf5d793c6d5053bb66ea65ce\nae4367ce28f1e5d96917161dc6c05572\n649fb8e1ead691c6359e4b9c4f6dadd\n9aff0e9f8722f063c0169cd3bf2650a0\ndb94dde04aad570d2f8bc0d6e7c6775\n271db646af45e4e48312cb7420a2ad11\n5c466b385c17f36dda6f252b9392c507\n61397fb909774541e3c62e8199fc6b89\n1844a4ed0ff7ed38c2474c54a2e772f2\n6762370303178268d323d6bd8db8de5b\n741b91f2187d54792d4fd2b0f2040d45\n327fcae0643a70d916768ffb6be40591\nee6ab3dfcd7757bc6f2c5bf7cec019c1\n627f4b1f48b6190b9341eeec703c4d4f\na369da8e8e47d0f3f51f77a6d7299806\nda0ee60c93c215a05b30881dc0ecdd7a\n64f73518c32b8b7af49a23658fe5597c\ne750a8adb862c9f654f948e69de0f232\n6bccd5c9b9c64af7812abbc2a4d00ee8\nbd4662a53f8efdd955f46d55537192b6\nf52e33287b89f0109bbfb8262cd69a18\nf07cde4ef5e76ae6c4cd9efc031e94b\n9d2c5a0dbfc811b3f9ae74fa595a8a63\nbda99c11fd261f1ffc980c1b685e9930\n586edb4eba5c3c7557ab4b593540354\n5ac2020b6b8e2c5c8e5e60055b9b9f67\n93d6b4ad8a164927febad4f49b26ec52\nff42855b8cd62a1060fdcc1483180fd1\n7e215b6386f3fd4156d1d06c447a736\n90d08564f19279ce714531f0291497fd\nebd353db403531b4257d13bddbc14c41\n97bda10740c4a74036b0f2a1430e993a\na3d5d0122b01f7be62a280769c3934a3\n6235d7bbd30566e4c955e5ed03ef3a2f\ne0caa2e794d98c814c9587cb3f654544\n685b5890e66bd010dcba2d9cc78a3a32\n352be15a6b1439c135836c728d324152\n5689abd8ba685b3e72075e8b19ae0485\nea6b9474514df497febad4f49b26ec52\naea8be27a9e5dcec1158f00955d38a\n25b9dbd6cab8f22c37a346dba83c013b\n6086c6195df8e051cce17d79b4472d62\n6560601e3e72b64296c50b25b74de6ab\ne7b0ff6ffeb24ac2cfde2e560cf498ca\n9c0485519f34076a486150a9b7f2cf18\ndaa7a962994ff710d19f6764502e1046\n98b3a7df1e233ac7ff10e98a19606836\n6ac583c624b9b76b9d6741c36fd1cd2b\n3e6e16cc5a4f26da30bbd4cddd04c77b\n578f935f182c5cb3bc5c4c571faa8806\n5b69a60d7b980b134671d97b0fd17f51\nab0d3af786b87262fa74bdb8d964a92e\n79e3bca3008fbfcfe635ea97678c24b\n5bbc7d606ddd5d17e492aefec5dc15c7\n93078952823dddaa5e56625f6688e473\nd6daf5eca30ca0965722577712723fd1\n82236bf856dff003b8fe77caf901462\n5e70abb053c31036e9de663abbea1800\n8d0e190bf8d8021cea7b477e7b62986d\nda5d6d0da4ed0c1cea65c47b660136e7\n3f14c153dc861c0990453a996fcb7627\ne8d118117b86ab2e8884a069d9619eaf\n4894b2193e36814dd42b9650f19dd425\nde9b2870157cdba6f83df7938e45b43c\nf2d39c20369e9c524b1c88aaac3e0ad7\nb19e399e93447dbdd2dd99b484971e89\nb99ad68ca697301a88386fe1512ed26f\n810c87b90f7dc301da9bd441f1db1dfb\n28f3a48bdca643e22b151d8b52c53b90\nd045064064381237e9ada1586a8c9364\n34303ee69f402e0f2b931201029bc76\n1f116a581f9e15e01b17743c18fb63dc\n3f74e2274140ec70705165b0e6ec548\n7bbd4240f837e20a6716685cf333d2c1\n4442b044230ac5c043dbb6421d614c0d\n89975eeeb0a1313e4b3c42e318f3affc\n45b6c77fd17726713002761e7a3ba3bd\ne731318d8d28bd585913832d290e62af\n864499eb14b077b4e5aa1f8c960ae63\n4606eee54ad02693e06d804f36424ced\na47fcd8bc5aa29dc998473a1ceac4e95\n3f5497bf65ff9b91c48d90eef8384210\n245a4070c930aaae71e2498adb56e791\na877ec39efb4c8cff37af16b2893f1d4\n4f59b7e00a94352fb0bf045ee98272fc\n8e3a98ea6d37d14c59a230640e61666e\nd3c31829b1295d0abf22a5ca4fa4678e\ne2a2fe3713803e9e04e2b29e7a72f7\nf9f122b492c3f1273084c5a9cbef5cd\n5c938860481a2d0f62ba00e4e73bbc2\n41a4cfee883a91f2d9ec500769fff320\nc4998912c5b40b8de1590f407a430d33\nc2c4846106b3597ce76bc197b3a3ffc0\n19c2fb727de9c13c51d3c864cc68e22e\n7bfd75013a4d7aeb5ba41eea807f5d3c\n151c68b48a1359c58566c6c3bc94c70c\nc5fc106c1c426fd1db63c1c69fa4f81f\ne3ade6122be60b39742cd3471ca7caf4\n8069dde16a0f987664b3b9b23ddfcbc\ned20a233783090839039bc4ea22a379b\n8569c03c2a233f7b4b3c42e318f3affc\nf6f9626b892a529c2b642dfce4c7d8fc\n4786e3a9fc33024dfeec1f13d2353f3\naeba3a81cac0687abf3f8e8aa5b07c2a\n3073165c54b44f276e1bbb3913878400\nf183fd6b062f642b5fceaa39a8353bde\n81fc73cf3796dc2ce14c803a60e383\n6fd88eb1bc87efd6f51fa0238791f5dc\nf361b2c70470eb71b71df3a52d67a993\n4c977a08c3969494d5883ca9b41ac387\n3279edef6a631940ea41b93204b74265\nd013cc09fdad8ecca282c4787019214e\nd528d80f04f387fea570c6c691c987a8\nd21ad1e0d76175e3486040c0d9e85846\n5f3f97d6854426cfb41eedea248a6d25\n59cd90e24a68f3f5f1783a44a88d6274\nc8062ed073ce04058cbb8bac2032149c\n766fce6fad5a071bc5beea20858a99d5\n3a7d5468084399cd11ddc5a6b5ad5cd3\n3b9b877ffac13289b6536581b321be90\n4282180ccf703ca59ccce4c6d5bb195f\ne86e665af1e1cae8c2f0a1a44c64aad4\nb514d9ac72abf291914858ee6a7fe3b8\n3a990272ef4b83ca8d3e8783b997c75\n884589066f028f237d3a650ebc940efd\ndb0685c490a05ac7c5facc3cc8dc041e\n63606249852d537ee958df2e8332e31c\n7d518c96a145547073ee7d53b833ad02\nfcc3a9a4e880b5f35966c5a46a5a6ec8\n93a6eb93e11437e1bdfa5e0753fa3240\nd35a2fb01107b6178727c7a6ed7a8927\ne795845c4e472bfcac4834e2c94f2b9d\n9ada332060a35a9ea8a8d4103b2a0b3f\n38ef005583b3cfd955357c338ec9641\nf2b641d16cd8a3ed33473d0d0e8c464e\ne2f60503a4fabc4aed20ed9a17aa05a4\ne4571a5b7457d2dacea003eff0268278\ndd2c3ff28a34556a47839bae1bc65257\nffb7b155cea1159a3a8e4d3441f2dd18\nacd6ba50b3081e5cd3470f853139ec0c\ncf2351b8172fa011a6f925961cc8367b\n32f8195c437b5aef51f77a6d7299806\n7a42b366e7f1da98a5d446d7637cc06a\n918e7e6a01c7645bcb8248441df6c2f5\n96c2ac95683fa21d80a13a8344996270\nf444ea9df9132a3616a2b5862518c93\n59027dc9bd7a066ec031b2e122ae5028\ne36dc839d70d3bb927445c0c7cf3becc\nda2a145da58d39c7aa5ceeb306445170\n98bba4f6837ece036c18e23645ff9868\nfa89bec3cccc137b10eb3ebb0bbddbb0\nc07c9ca0cfbb531359c956f09c934d51\n9e229ffbaf9b7395efb9eda839fc42fc\n7e154e1cd9f231dab8afe053c66e5d4a\n5261950cc1cc0d2a9ccce4c6d5bb195f\n3ada04a73dd3fe98c520ac3fa0a4f674\n11cf749cd0a65ca13339d8259ddfa7bb\n4eaf30762a61db196cc318d65b897138\ne8ce7c3e66e6aec08ee0a9ed0efc243f\n459f1e82f058fbd0ca42ad68b92de4c8\nd7f9651b64c82c799e7c6a73ef46f40c\n47bfb0c5ef5c3c7ddb6175ef18ad3f80\nb21a6839869018c6ab10c969b34d14c2\n93f94ca2abb0e6aeda9c49a653a829eb\n38aab2d4679f51a7d70e365688839034\nbf06de9143b2e36190eb1f8a00f61726\n10b246b375c15ab59fa24672a35ae8bb\ne35775e1f550d3d65339eb67f6086a2b\n55a3fb19f099a06adc061043e7c712\n4726a178bb7b40544b3c42e318f3affc\nf476ea8dabe53bb8efb94709f30ce0d2\n281f296380a0e4a81db7abc68608fde1\n2568994ff8112b6d65daa37b7e13aee8\ncd82d526e58e3e7f4fb85ea6fd426098\ncfeda84f71e95e6169ee3dc2896968a5\n927bf59af25793ab76e29c9c43bc7aa\nffb5e48fde2cca54518bdb78540c51ed\nbee1f4fa0730c6c5735aedaf68f44c57\nd0c369ef812dc0cb1839c27e793b8c3c\n83cf3765597a631e4ef113421a70a46\n6b9b672041acc540e61062b89cc2de3b\na886752590af36549e726e922f49b373\n20cdd491a443bc30d9651cd1d591d64d\n1fcc1a3a879b2a037d43e094da89ace\nb0264f893f25e10ec955e5ed03ef3a2f\nff60e4b29c5cc38fceda3ac62a593e9c\n351057418704d299f51fa0238791f5dc\n478cc8d5c72f2823d2ad39bada7a0a\nc33f90746a3573878b39b912ed4a7b59\na56200b624a644f7df6cfab91d65bb91\n2b1c1e0fad3cb3b8fad46760e869d184\n11b110b37b1cbfd6bdfce662c3df88af\n32760b2e81bd4deac67fbc2559fd3fde\n8b0480b9d0bffa6e8d740231f5a3de96\n817b41f37bc9f022812e3ecbeaae3980\n5de75da0a8142dfb17b431cae0dd70ed\n9c87f81ccf8a2559dd33a7e96aec2a56\ne9e47d6b53c915f3e12186cc8c5022c7\n3379b29c3a6221d79996b1334107828f\n4de159bb2663fa4d58b22e372d13dd2e\na4f302ce157687e0861ac00f334ea98c\n4c8472bdc535102870553da2430bcd98\n8ba76dfda765f72b7c363db824bff7dc\n612117acf07984468e52a975e7251969\nbc7d143f0c666d816f80e82f51b5db7\n73f34f95a001731b855931d119219022\n4a310db5ebe11142eaf288f952624966\n26d174935d283cfd4ea7ef03cbe21992\n4b1bb0475e67abe029426a0f57e4d15e\ne08d1cd0dc7dc73db9d7c2fc41e80228\n645500232eb286aa8f6d69f1a6681149\n45b9800c1bcdc13735836c728d324152\n4175d6f2d66c2e1353c1d159a8a8422\ncd44665771f7b7d2b2000d40d3899456\n8c4d7014c59f619c2b1c5715bfc0f094\n1ab0b879f52e7cbe958d575443776c9b\nc24bc140335164ba815b2b467e8e2eac\n3565f5bce51b333e9b19181a19104021\n33f24a72a875633297e755dddca14449\n44c35996414c4d89f1f3662486c882e5\n3a17eae5843c2c7660a62758a708c922\na8126dbed61e760433ea3991d83e660a\n88dbdfd6e8cccf1ca9f547acc5e1dd79\n87ebd707ca90700d8b424343280aeccb\ne047af849d703eb51933ffef19678834\n1d393a06a5cf567d3892cfdb72a66fb4\n1cd6a00b71f02b06430c2c15987e4cd\naa97318224630a33f51f77a6d7299806\n53bad3b72a7b6c1bd810b14a81e12eca\nb23405a8f15f3fdb44175b4dddf5be08\n7c29c16650cc74bcd17bccae1d897a22\n74239bc42f23639f3ea6912ae089646c\n482123c5f097d29f278d386bfa54545\n2447732fa2e0d8d870febc66c2c7f4f6\n3cb345b1ef0f4d929a7e020ff2597416\nd309951e04fd344c7b56d76bb19dcf39\n307474fd0cab5c982fa77440dcb93214\n6620b366c1532835789195d85b2f8718\naae0d0d70c13b8c781faebbdea6bd9be\nf7dc5f5fde343cc5c955e5ed03ef3a2f\n677f0b4f9c5398caa3e1d5a29d2bb5b9\ned2d7f09d80ec3a259577d199a67fd7\nba212f7bfeb2faa75e05d85b12fbe60c\ne095933fc153f7371ffe260c5a3e6b53\n439ea10da7a148bb2f210d96281fe860\nd256323d2b756b9e76bc197b3a3ffc0\n7a22c6cba42b73cbb5a356b3f810d217\n977787b51140f4bba100d1443e9d6b3a\n5a04d5055cb9e3c3e45ef4135c266a12\ncd0581de9bae7c6c7d1aee311ce12c70\neabe7e2ee9547616214a15a5a42c49c0\n3b4dede09e8125639d653bd9cc95fa15\n7580dc6788ab60123fe64ec32ae84891\n7aaed3e906eaf675a57b3bec78e5d1b3\n94c98b1e67618bd234943af333340cd2\nad6fc60679879c234e08ba22112c59b1\n78253ff57339985a28c0cecb7de2397a\n34feac86a178437527eb00c151c6f711\ncff664776c56345a6c71cc363c51a922\nf22dc1d847c5b82f585f699d798e7ecf\n993675648a0f1b1a9a87002a4eeaf610\n53f5bd148ec293f92f44039661980ed\n1fe2d919fb4685ea93271d2223fe04be\n9da456630ad311b917fe334c5911fe13\ne881a6fa6c3443ad5d28221e3b996124\n250cd21169a42a2bfaf26c91ad27299b\n8e5866a0c093f5a17eaeab1f0c9120b7\nb6e4f287aad69f285aefe1fcbc7169cd\n5f726d7fca7ec04131ec2883e34b06d0\nea6571f7ef98f562fca88347d0eb86ef\n8c89f56df87eab907e5207b5eb59c49c\n1eefaae6b1ab9615a22802c4e64a501c\n6e29841d23d6a8a06cee93ad801259bf\ndb8678030bede8ba88853ff6bbbb4a9d\n392315d4bc7f11f0ca67acef5667509c\n8934c3cc317957db4637188d1bc69cfd\n14f18c8b697d79e099e8bf807e902261\nccd3c75b72708a90c955e5ed03ef3a2f\n3b9e28ad033825b6d0ae74ce506ca590\ne6b3255eb51908a53c99073e1068144\n45b839c347e02c86b20aa91e9e90c311\ne1b85df09d33ddea3e43be0b542efff8\na38f012987a2b29593df8c78d1d8e26d\nd1950f4d38df72f59d297e74104d3ac3\n29ae41cd05f7bb1e377940ad91815d8c\n6ed74f11887c521f25f6f84717a88f8f\n44087c74e5ea66dede436dc05ae39dcf\nd58ea40d8a5c8c0c362f4098f2ea31b0\n577155d24ebec9833ce2d31ef93d6e81\n818258b7cc1925031b17743c18fb63dc\n4cd0c4c75f124cc117b431cae0dd70ed\na1a9c417180124f1a6c03a53cf0a14c9\n7efc699b5fc94757f93239519b75aa98\n8a8934756916a42855ce350c1c834503\nbc48080ee5498d721fca2012865943e2\n9954b8f6fc40f0ab1cf96a5dc33e37f1\nca13d22c81c74698d97cb887517a1526\n625d465a8d9342867ff6ace05b36a5\n9098e2c564337b01bde1c279d540fc66\ne39bfe8848fbf76540a98a90bd0efcca\nc4388c59f863de596edd3f7982f0bf26\n161b5260bcc6f8fc9befe610bb4b9f25\nd15d37d902d2b8494ca386b8f1ce4c62\n8840824c8e5cfafff2b7361116ad2337\nf7ef48c7de69ae03cea3bc3a9009695\n20812fc7f9dac9a51b3e6b75a323070\n7d517ccbf0d2b16c50fa82c2f036109a\nb2582dd22be909767ff6ace05b36a5\n5d45378d9d2e11ff497df23b9b74f339\nfaf951210266013cbe9d845bb7506ca4\n343838f40056270a738e43095496b061\n98356e87a3f5db06a0bde355e2e21370\ne8632c8830944cfe422be95e44ce930\ne1f77c5cfd7ea402738e43095496b061\ne1e7caa05e80e973308c1120d480c5b8\nf90bf59515aa8368e42c56c78fb88524\n9b673972e8873bc403c57e7ce69f902\n3fc5f57053b75b5a91cd5c82dce55c17\n37ca38d0074d19978c9e244e3fbf98f0\nf19fb80eae2ed668962a9d5e42f53a23\n82a1545cc0b3227ede650492e45fb14f\ndfef8f26e9a8437782db9fca4b68095\nfba0f822f16932aa10566a0096ed09d\nc68ee4070eb551c84e71b4762a7e566\n7a5acf5f20f8cffbaf030eae870a2d14\na29ee68d1279e8ff98d5fc0473d00a1c\nc98eb7f9b2b99702f51f77a6d7299806\n52c2b3f2ee5b3519febad4f49b26ec52\n2a896f1d6925cc61dc89a28b5e6678e0\n26a28d973e40648db40f0ac0fb9a650d\n460a915796f36eaa55f86bb3ad320a33\n12cecbf8685f52aaad762904f2c09cd0\nc85ba9a3e1896eb254adaad15f0d584e\n7fd9f6bc9a89d240800a0120f3e757a2\n746f953a49a68cc2b76e29c9c43bc7aa\n8d10d8d72f135011febad4f49b26ec52\n339b9707363c16d895341c0dcefceb68\nd26eacf8d87a522647839bae1bc65257\nef130b03885738918f7d9678498f2295\na79ed851896a40d8c10555abb2efb430\nf7d4a0beda480047448174f83c9a5f1f\n5b75e36e302eb2cee9b7ceaf400b2906\nf9509165955416a79b4cf10910d2df7e\na1cc1745e89098913a4642fe4c259750\n778d75fb125165379d297e74104d3ac3\n4b887a7bdcfbc4ca7e04e68609264bc1\n8e33e392d91ecf1c668ae11a7db5e82a\ne4c8211dafa5b903febad4f49b26ec52\n9e408f772321bb1920768660cf080d12\n409a932e371e12d490ad276cd2af3a4\n42fad469afab19939724db0ba5853d76\nf7bb30d9c073c0be786dd1f2ad4d8c65\nc5ded58bf0e362eaef9f898cda0ff409\n70e3188676407076c3bd24f986301745\n3ad4ddfda32220c388eed60433632c64\n984ccfa5aa5c87334187eeeb0dea4986\n83dfe7d2df18ab58fcd4910413c446d9\n1eb732041cb7f2d649dd82184c01c565\n6ab1ece006f03b9c955e5ed03ef3a2f\n56f6e87023f0dcbceba48f396a34b9dc\n3fedf94dd96ccf8db595eebc49c98d3\n16001e59100b03c5fca0560918d50ea1\n933937b12b4313dbe7c58a5ade21d962\n11fcb3abf0a487b9c3bd24f986301745\n9e5c21e11110fc9ec60dad40a0c0e85b\n43b0de9be0df3ecf51f77a6d7299806\n364b9c00797efba693ab1bc955ac34ff\n81922145630fced4b49e18913f04bee3\nd1807006e89f9e7c3087f84b199fd297\n299ff1bf2618a4b584b039efed4b32d7\nfdb61d6d639b1f51851f4ba6aaedaaa8\n2f5f32ab1652320dba18ade30e563d37\nf8050e698bff9fef8d1c65d617ea0b5e\n40b55c0578228337f521e1d72c94993\n91282b5e9c019a1944ee2f4962f1290\n487bdb1274b8942ab8e1b99345a5afd4\n31ecf1e704642491ce372179a495fcb\n82a60a0aaec8d532150d30262f9b49dc\nd05c4f1b47e37e574b3c42e318f3affc\n4454343a673c8b3483e0de42574c850a\n3c1f16ccf38710e64b3c42e318f3affc\n3e0b8992e00a327bcb2a965e75be701c\n45320414e630ca38b96f0049223adf04\naa6cfcdad80f0ea961e8d86dc5569c02\n33c8b21a29bef56645de94e1bc93a4f6\na6f69bef589c295d51ef8c8b1fdb41ce\nf37348b116d83408febad4f49b26ec52\n1ef656b0524b755eca6c3f11f48d07ed\n48a944dc8751ca7531370540942e6ad\n2c671dc7902c140d3b52a6690de3e81d\n5844a7d413c48b3eb9ea118461aa8a00\n70d0937e1d38a9c2a45b742ddc5add59\nadabe7da527cc52983572753b9298b2b\ndaf4f3295db84cd39420b255bb5956f0\n9fa0a6c2c9d102cf2bfb1b91e3f49afe\n5fbfc884ac25001e29426a0f57e4d15e\nf9c98f76522d375d20bac10b01e55c85\n98412ad8301f965210c709fd84118ff1\n35f7655867f9223d82db9fca4b68095\n10a4e263f8087c4b8cf2bc41970d572a\n948f1bc3a1d574196086aaeef17e8c87\n2a5618e34de3e26a20768660cf080d12\n691b01b959200d20e44c4b5687d5d5c8\ne7e0942dddd1e709cc963bba1556032a\na3f060a21d7a29bfe5b095b06da9076\n70bfb9d08e50970093fcbf4338a54def\nb20105f74c7a469647839bae1bc65257\n2cdbe6c91dbe4fbabc7589eefbdbc3c5\nd4a3c7e26b4a6eef30bbd4cddd04c77b\ndb545f0422e72d3379368d1198f406e7\n35f6b25bc7e016228cbb8bac2032149c\n1ae856def06f8ee36bec1b6707900b50\n4ff87c5a639b181b6c6add082247679\n95483e7754185e03986b14b31452df23\n28249c48cb603cb9668ae11a7db5e82a\ncc2a9dd5dd6fda66e02a8ce45e810a15\n9b10ca8fefd82fad5c10b08ea69398c3\nbccc9bc81809cc0d31a3de62b78a7245\n5a7f0ba2b1845e7bd2a79e157dad9b1a\n74d470850c9f9fbcc2b64c0adffbe398\nc572c44eb47c2a15c43d2b61614d0d0\naa118e3ed06f00a85c886bf880a258e\n35e5159ed908c99c8fc6229eb64e56a\nf1468b16ea560ae551d3c864cc68e22e\n7cf228b6fe5c6c596c342cf382162bc7\nb0b704778e9e06ee22dc61df4cdad42d\n9e22ea3530631b5e95937f6e581cbd41\n59b6e5cc2b4dab5ebcd25191f45283d0\na886d16c7fffeb874d6c356c3dcebb\nac440171fe3edf2a5284eac239212f2d\n711075229a3bb0fff51f77a6d7299806\n5d6b4205111991c879170a5f8beda902\na00b79f779bbf4d7bdfce662c3df88af\n3a1a6dcf1900fe42bdeec9c43546255e\nd9744ed1255664e7b0c90fa5479c8a6\n11aeb1b72f433cac279f06792ea23384\n97e6d79058bad189ca96b2737246fca\n6ca761172d2c1ba3ce522e6dda26fb51\n3820449f17744298847dc1a0820caba6\n5883da6d43e3b9743087f84b199fd297\n8768002c872788b8e513931a191fd77c\n63790a73bd92ec04a55e6ad8c321a190\n941e751844d8b0aa8b424343280aeccb\n4116d19d60fc24f037a346dba83c013b\n50b076e7917c1297cfb87ab5efe3dc31\nbb84310d8f022346f2b931201029bc76\n5525e36ebab96f98d989c9f989a09ff\nc87729314f0a7e2fe67d6af004465e0b\n76595f5c7689a4559ccce4c6d5bb195f\n4e5172cf359d577154ffd0de2b0db5e3\na767beea4085c58d301fa758e52a6264\ncbc2d0b1d7a64ffd2ce1f2e292dc9c31\n1b90a6d174038fca46ae6b1cc949e238\nd9b264b94aa3aab652f6234a019827aa\n1bf71e2f8abc7698b232f4221eaa5610\n12c8ea55000707be8ea4cedb988ff461\n696425932b878a839335a4bbd2281da5\n725f69c0f29b712e8c6540fe6bc16d6f\n2aca16abe2e5175281faebbdea6bd9be\n1f8ff48858b1d78136c236fff3cd03ce\n96cd9d2f9dc5e102a8529d50958b092\n289f7178bfabe667550a2025ec9eef3d\n127e202f77eee5725d02cdadf545c773\n92aab082da6375cf5b9744d121bf802\n7fa4f9f5b204af31e95cd0dc8c2f0e83\n30573f43ecfd93f0684b7bc3f8a9aa55\n421d60140736eb03d098fcb46b95c\nf7c7e05da64f6e4f2aa0f30a1572c50\na99b37edfd721010bc7eb7ec22211551\nb47d8874381c5a03a561edf54b47b109\n8b7f24a53beb18e8a69f5de385a4c191\n2538c4fb2a271b06e74bf18c5b9ed60a\n79f4f47f29267c4cc46152dd624f1d49\n497d75f6a5b0c25077cf3bb06f394ad\n7afdd54c53562cfe43008e14d7d4c137\n440d371725f4f6bca570c6c691c987a8\n56ffb40d5f85f46f1a72c98fc69f22ac\n4f5719eaa2e58c9cedb0cb3987e137d0\ne92bd321064e981e5208aab875b932bc\n8bd48b85e15e23e162c098c9081f25f4\n6a31302378d14412d42ec7e303174a87\n5a3789ede7e60884e35c5921850b7bf\n7aba44f7a5ca1fd9a35da04de92b0f11\nfb9e9c0767a92d2e923b3c05c4c4fae\n1f24b9a75606239466e24bbfdb446f55\n8c8690ed4cd0a297e4bbc5bb7fd2afa\n3a466eacf622b3a13a5badb049bb270\n520fad3fdb9cba4f1f335cc23d448de8\n638c86ffc1c9e00c5749f7a8e1644575\ne6b61073fa46571df71e06115e9c3b3e\n19708555411f795459a339f8ff4d3160\nd38a9d0fd304f3eeb6e024121d412dd\nff3f1004c4126b966d75aa5db61c1fe9\ne40afb4171ccc460de03ab2a27ba7531\nc72f97d0b25e030db0892e337a99f42d\nd1ea83fd1ee634963d5da2a72f595df5\n29531549b0a6a0f5ed403132b02528bd\ncd2a53371cacfac49a3528690d225ee1\n5245ab687729495b8c728dabc1255d\na4473d9c69324b492c026fed19c0d206\n6358336cbeedb9232d9fe390e23fd20f\nabd1518f823abd0ff51fa0238791f5dc\n6718e0bfb822e591738e43095496b061\n50d253ed67d73392140251e5a7586890\n1875947951e8d536365c18a0ba9d127c\nd14752f7aa2f7ed5d684faddec3c0090\n791987a0e943f009b5872b4cd3f92676\nfbee497d2941270d79368d1198f406e7\nc271d00152fb6363214a15a5a42c49c0\n62d2038ffb8b9df253041c49040be3d5\n26dc6dbcf6b36278ed4893d5d6c77f16\nebfc108a60197d8d55f46d55537192b6\naf8636a4e4d6bfecfebad4f49b26ec52\n7bbdfac048aefc9a5634c21965ee6bab\nda84e4621c255691490ad276cd2af3a4\n6cdb79b485d9df2dc667146eae95e931\n7be495e700afefe6cfedb1d8b135cde9\n366a7129cdbaa0b8fb94cf898f4fa24c\nd5f55cf498a7562eb000f20a5153622c\n64630e265ab5e1604b3c42e318f3affc\na9dfd3433837da823fe4267232c5893a\n6f019fe6ab60a3e37b11ae648ea92233\n8b3bae4e65ee0f67caf7718498824d44\nb23bf5b53e1e61768984d623cdd9496c\n924ea50a921ac1e032fe69ab8bb2a7c3\nbe971a899c96649262158b7ee658e910\n8d1a33ecdc93bafd727e9f790cd597\n20ba57a048c518e5732649bffe80ba61\nd3aeb75da27b505f1c9acd0bdfdc9f62\n6b13e49c5c13050f5589b48ab7a00cdd\n440b50a6bd10d00eb000f20a5153622c\n37f8726074a5bbf42979546ca769ba4d\n665a646e8413fb17fe537547af4fdabb\nc29fc3e0096d399e8d4b2547f739c887\n889a50c35328c8ddfd91359c9f546b9a\n27eea1054be1880a7eaeab1f0c9120b7\na479fea6394b100a98f849d6224d303b\n664dd0e93a0f941a47fe752318e646fc\nf25cf833c2200fef239d0ce9a68d2afa\nb879ff9d30911558fe2d13a096d8b561\n892e2630024144f94f29aafe46fcf418\nced7aa76ea532e0a68e125404f814ba\n9eba16c76875225a2d69ef58c7c1b72c\n92246f29bdcfe82cd323d6bd8db8de5b\n681581df89b7d39975eb2bddebec5e6b\n49f7fadfe67b54c478b3bb39df25d28\n5c94122a5a3682bdb2d2900ee0ae7e0\n5897116720fbf6b5d1308d82a3302eb3\n738e5983a229c432db984b8f0550fcd4\n155599b6ab61a872f51f77a6d7299806\ndd46ae4a6d6cd1154b3c42e318f3affc\nf1695a9ec05b757ec7cb90e4399b486d\n668da5fd442fa5ceb74af32735cc24bf\n2a5cd32bacd3ce601ba08c4ff5d0476f\n99e89417f985d077738e43095496b061\n9f097427c4d2bb4af2c0658ad22a9a9b\n57b68a9891773c89d27b31bdeb5f5c79\n5b100f548ae5b162f51fa0238791f5dc\na40281aa13c75ca2ec4a754398bdb370\n3bd1fcc6ef50264112126d1916209079\nc838d6a451994749310af74324aae27f\nf6e56ad2fe9e6c30253be0083bb3c718\n2c0b0f0e9ac21f6ca1a2ce4cc65d552c\n76665ee7994012f2bc74913d2fc4a0c\nb8003b8cd4263cb51573632af24b9a9\n7ec1ec1db13eb349ff085529822a7226\na7d4b7751892502a9055f83d11955109\ne2312615b21d7690c4f22423196a0dd2\n4e76319c1489ee71f4a4c7b91852bb65\n60c0cb7599fddb50d3d709dbfce9caca\nec6de49b6fee801a4b3c42e318f3affc\n33bf7aa0aa429a98bbfa993b02d27a30\n49d441b49adde95b20768660cf080d12\nd6ef0aa7b674c171fb4f26e87f6a6814\n2c9756c06606c05bfa85bd040b2a2468\ne5b4980736c034257de96030404c16e9\nf9bac9ba3b878cf23a6e0d0a575f76a3\n48c2e34854c9aab889b74a90878aa3cb\nf220f4b4c7b79d7ab54f2a7bd7b06a98\nd8a73e0d8fae54c23002761e7a3ba3bd\n43c9aa5ba91b803edcfcef693e7ec696\n67ec09f7e7cd6f059f2349486c570dd4\n29c4539ae1760a50c955e5ed03ef3a2f\n4e8d9f4bebd6a97670553da2430bcd98\nc3cd2a7f997a6a40f3017d945b17b4d6\nfc7ec69f0402424de27790b0ec8671f7\n22f298bfabc8982691a76c36d0ba1ac\n8915112d9819c83633b2a5760b4dd1f\n7fef7125c14e0fc3b3ec4062c13aac32\n7e85deaa7bd114eedcad73f240f03a20\n888faedfa6002b8cdd7e7281b421bca5\n8fdb0cce840b2977d0edc2a586731adb\na7887db4982215cc5afc372fcbe94f4a\n9c5ed0a888a5807ca9b8d9d3b5cf54cc\n450ca83285f0a0bff51f77a6d7299806\n96122c5c0777cb85d3520bbaf4a08c12\n54108a40e3e2f09b940268b86285118f\n6ef3a3de6152b19be513a3136ebdf08f\nb878329d1c965d195f9efc5cadcb44d7\nfdc04ac9fe8dd6db04cb542e2c50eb4\nf1f3021c1469c8e5610c2a68437007d6\na68f06157d6ba8d4f51f77a6d7299806\n62cb358e8c73add6b71af98eaf823ae8\nfcc0737ae08a9cfb63eca8f941f00cca\n86996ef1ba6aeacc64558a1c6a2a9f11\n16b72d74bcac545fe3eedd8db265e106\ne3c8c6e7bc421e52e4721974983917c4\n884f8604518cdc98c3bd24f986301745\nfa83ef67ce97491ac955e5ed03ef3a2f\nf116ba8983e6728eb1f243bab39fb29\na3f86421758cec25a092cc351404fb5d\n63de5ec054b2d310dddd8ce1cda8c6d9\n25aae534f3aadc9c9aa9d7f676c1fd7e\n201e927f4979bed6febad4f49b26ec52\ne81af191bb828526815b2b467e8e2eac\nb04e9713af0d7048ce87696fce7b6aee\n6a72d6a26d28b02bd626c689702869b7\n3b91620452041b664b3c42e318f3affc\n616a8ac7d1667a062c1a544eca74c954\n89e9fa41863867de72ee08e78374a212\n7ccb70ddb69bf162298a458038c49d73\n5807c27ba3c04612f51f77a6d7299806\n1872afa831cc7f671b50574ebd76a45b\n6b5f3b7fab02f9e358220b7cab409d3e\n6a357f24085bf0fcae199f04f49518bf\nd62f718a14db87cdb40f0ac0fb9a650d\nc1a04d0c233263aaaa199671f55e5379\n844199875fab83dd1b17743c18fb63dc\nc46bea30afbbf07fc1997d3da2532033\n7e261e5b2b11cddc557e22af3c71c6c\n679e46c5c67fadd5c3bd24f986301745\n33cb211cda607e9b922752cea2acdd17\nc2ad4e19213d839873baa2510487646b\nfa4d09b10928d8322685733c782593df\nea4fbea57b0b7b677c0ffcaa63ee0500\nf720b36f39f9dc0e5582a46a1071249\nddb20a7778038d87f51f77a6d7299806\n2633bba6168a580c8997f7623978b6e4\n3d7a9a28bd6b772a878cf98f645da333\n3dafd09d21c9ca607d55378e40c7c3d9\n2c3a4ab3efbf12d74ef530b007e93f59\nc6304f008d2a44f81943903831aa7f4d\n785c03a00ad37ffb8b424343280aeccb\n5530f95795fce09ca71c812e027f94d9\nf83f03cd8d6d787f73678cf8aa86fc01\n98440aaa709af51192d5b25c536d8044\n6631de96600690d158c88d30f502a452\n97551108bbb5afc36199d6fe090be061\n51f0461221d5a86370d2e38b8c410c62\nbd14692fff933409856ce0c2a704bc40\n5e84a7deca3e153ce1c2d3f86b7aa002\nd95fe848b19c277a1fd3f440755dada6\n104c5225ef0a288ff932326d9778e21b\ne12ce317c2d9fd0eb9fb1fee7d937756\n28411ec68714ab87b9ea118461aa8a00\n1a9036f081dd51683a9bf8c718fc345e\nf1b42fa8b6b48e927c34b035140384\n8d29772f3fbffe408fb9278cf94ef5eb\n1c2aa66d76302e1f696f6d06eaf4948d\nb4c66c291f2c46581c1b3b2ed8d13bf8\ne14e867c0cfbf1f42cef66bb37b0cc33\n2e71bc549eca25fdfebad4f49b26ec52\ndd0377d3a40b57c360885f79b3a5579a\na377ae927e09bbe976e9713f57a5fcb6\n1a42167b30554eb8f5a6c82f073f291b\n8e9954ebd739a4aa10234beea2422457\n43ac9f2d108ebcd0c3bd24f986301745\n7f29e2e6496ee99aeca1c556848f5db1\n6f87ef47500b9d20768660cf080d12\ndc956d4dc6982188febad4f49b26ec52\n8219a48422582b01c345108a8f6e3cb\n52cb81e736aa856cbea68008b6e5c5b7\n614c37441ed33c338a3c75a1023723f3\na7197c1bd1bd1e47f9715dc5d7dc0802\n31e3a6b2e0b40045cb2a965e75be701c\n7573bc5999555ad635e2fdf95cd06839\n2c730735f7f3e60f848ac41b30fbbc29\n688bd4df748faa62820018801b237b3d\nd1a0b26d98ee4a877fa6d07b5977c143\nfc7a8af42911dc77b4169e4cad9bb63a\ndfa86ce9f892793cf51f77a6d7299806\na0fd031270822841febad4f49b26ec52\nbdc7c9339145602af51fa0238791f5dc\nbef379d51df02d5fdbcb30b4afc25496\n86dec892a246e0c02cbf13da1d4abcc5\n1fa211118fcf90d858df8eeaf3dad1c\ne2807c8c5f5653d4bd91edd7a65c1323\nab8644ffc94a2f2dc746cacb18b4d81a\n9b56632bff0d00dbd626c689702869b7\n2b0c16b26ebfb88f490ad276cd2af3a4\nfa1dc9a58da9ddb6235820b1d1961ea7\n72da00b4d8ab22bda571da3abf5b1931\n23437993281f7e1fb06ed3dfa60b19a1\nb052445a4de3c06a10c0c01485abc473\nb9ac8f3615d8ba0bf51f77a6d7299806\ne5261b63c63b226bf7e56c1f3346606a\n71581e6511d7782282e6c3a4e742651d\nb4fe4d5be595c1158c1cf3f7d7f0373\nb266c6e40c1e976ef3c6b7a01c418f2d\n3c6ced93a3103cf34b28edba8d17a601\n5b54a7ca6d758fa1e12186cc8c5022c7\n5ad2333321746a8b3f222a37719e9945\n12193ca7bef40d40a84aed1cd93567b2\n2f8b594d23665a2de8058cf23f6382c1\n5ca1a1574679afed68661782af60b711\n6124096fd3488b7fbbc8ef3196ea5fd2\n1599c3f78f521c0c3bd24f986301745\n7e651b7d860842deb612ac3ee32028ed\n82271bc614a76c28890992ddacc04113\ndea755ad1156374f55f46d55537192b6\n63c4c59906d69b0ffe15c1377dcce2f7\nd43664b8f4df83341ee9d48493ad639\ncc5ef32dc87e0f245dcc7ddfa72357b1\n726164afa497b154b075b4c36d25279a\n57a50a7bca63cd91e03b4418ed1a4f3\nd77287719eb7bf0d66ef9dd2f3ef27d3\ndd3de76ab27a6aee8141276dba5d99db\n317c099a20806d10b5c1550bc8448972\nec8efc59f0e8c0fa97b2fb14fbcb9c20\n5d9f9ee95a7e1623fe9d8ee1a924ac2e\ne8f5c6944e41c12840d79382490f0976\n3c46109dc46f1714cb2a965e75be701c\n9f78ea7856f21a4ac8e00bb0b2c9ef1f\n10b5723ea035cb047464e25da6d2e90\nb96a360ca5a86bcbc48d90eef8384210\n30b3454ab0aedff9fc30525e763ef5eb\nddcaa720a7b878a4beedb4c8fd29e2d1\n15b0e9fbea6581354ea9b65fc2574d0a\n651560f344dd987fda6f0c2ce3101382\n4ba447371db8c37c74739c2c9ecfb3ee\n9fecccf2e75e7c8e1099144def22d76\n76de9805c6e208e6b2644d7d4d7ea2c7\n7bf29d83522f630190ff2a7142510fc1\n438f44f223f116e3c2a9901441a2941b\n9e068a0ec94cb7dbf51f77a6d7299806\ncf46448f9ef495c81d022067655f6c16\n967d0f37416158b897a6420376995cd0\n9207224582ee8aebf57b7c8ba41c730e\n6bf058da5c3835b415ca6115a4467dd6\n65e5036f67dbac4e1cb7b51444dabacd\neda7058a8c6440b7abf529d72f4c9152\n61ed0adc69dd8eafc3569a6df9a670f2\nc479482694623359fdf2e93846e20960\n827af0ff0d9eaad196a3517f50eeb9f4\n37c76d4830a4968b719d8721fec72f0c\n75ddfe6d71b14184134155606601dcb2\n8f380fecd7c5b0e4cb95bbaeca3ed4f1\nf82e5554f1c877a1e074517a246f1e65\nf84b49a7d9e6f31ae0c8359faeb78bbe\n7d3a5c7a3c319544bc4ac3caf16ef65\nbe81240ed3cb8e5a7d8864caa856253b\n5db59a8ae13705bd7843fb4efdc19510\n1cba04d4679da07ef51f77a6d7299806\n592420fc90be625a8b83086412477462\n7fdad5057b8da165fa9f3ec600076f26\n682263e19fe7c52d492d9da2668ec34c\n3bf8b96b10519a984afda4ff857119a2\n2f5d2dfc1c8b75666c8f2acb6194d7e9\na52ca2940a24a916ebadcdfba7971b71\n5c8668d215fd79079a037b4abf810691\nedffc05155544431436e6787c76ef3f0\ncdf9659a23c89e80a23949c21eddef76\n93bb999fd7e586199fd83fd2ba5fe30c\nb1a156c751cb960f270371af13f7e37\n87dc5ace74ed29fafe43ff1e45af424d\n7d8ed7685620a16db2c48fbe46b01575\n91b12d3af7bc52c5550384fc1c3c3d02\nf4888967269031b295feea036c244c98\n55589c71a2abfe97f09df371fae9d63d\ne20f1fff2b84f8ea71ba8e8bdf40d1ea\nc62dd18f43f11b858d2fa6ffb11d1cb3\n43c1a78d9d8b3735f2b931201029bc76\n2da6752496e0c37961c55d3f6d7eeb14\nf12210d97248ee00e3db80a3cacc6e3\n1b82432d7a959b8dfebad4f49b26ec52\ne7dd71eaab0f209dad5067eac75a07f7\n8a86e3045ac5fe7e1f335cc23d448de8\nb9009a7b33df161ba022b82859ebabcb\neca46f21f2893069c0a61ad1cf92b694\n8db2878df7471c53e45ef4135c266a12\na3f3c3f288a750de83d38badc3559dbd\n9b6395c94a80daefcea003eff0268278\nb3477e3ea9fd1676f016aee3d784d83c\nf94b4fa5703a0d96983ba8b03ccecdb9\n4cd7d883aec1db86890992ddacc04113\n76206b183e39910a1c6b880f91673ae8\n27008d8569ba4426f577ff4de1ac394c\nfc64a8a31f30ab8bb780b07b76df3b4a\n2053961ba985591af51f77a6d7299806\n6f53e944fcac6e49795407f097f1ca4\n739a97e0e3c446c15255bb0d3c16575\na5e061fc25bff768623d10a210f40a3f\n449491be7c2586bf261efd8e659b02a2\na516711827a396085528d560ddea455\na9a81543d5297d13dc20930e6fc85682\n4c49252bedda66402c2d6a2f47ceb5ce\n2b6fd7a94ad69b019ad1212263439f22\n797c7f154643169bb07cbf788ba0557c\nd1f808613f6dd787a2c8f09e8ae34f27\nc5195b46ac75dc8c20c6f761e8cbbf\n9a3194d78a592039a95110eea24f99c6\n3dc68207126e2e3dd038992c6975ea76\n43daa5027409cbbd4b3c42e318f3affc\n9f76504d9b551e548c37cfe791015e2f\n83ce738c3cc05c54283b00891f680579\n27ee20b7a7e2467980dbca6e7b64a4bc\ne7eec2839ea91f07df6cfab91d65bb91\n573922f28958f34446bb945d4cb1ad55\nd120d47f8c9bc5028640bc5712201c4a\nfa6952fbf7f52682aece045e8bdac80f\n8821c22c61ed87e3a585c7706fdbbe10\nd87841ba0db5931576a45e9a12af8158\n869516eb98eb3c2fb54d798b09097adc\n62a4f3c24bc69f593eff95e5c4b79279\n24181beca16bb46bf9931f8a466b18bd\n40fa6161e7f921f6738e43095496b061\n5fed2b96d705323b8bec49a2a30e37ed\n706dbdfc48b19b0f423f1f7d60608f89\nfb7124d1ea2937f252219cd24638ae38\n264a075e293394a843638dabe1eb5336\n5b109b578e82cd4f40ebe9b2fa95ae8\nb623ede2cc40ae1d377b9297f3055210\nbc15e43c4af5a6d0f51f77a6d7299806\n379ad91ceb20859b0a3f25f5d8cb0f8\nd81df8f708d4360c5e05d85b12fbe60c\n8df9eb57d6f6bf7f490ad276cd2af3a4\n5000e001c72cebf44f60f15da4c665d0\n606b2e47238b02178c37cfe791015e2f\n80ef50d3e67bfa8783ca982ecb7c4900\n68794d2e264ea2d75cf2470a6eb9a24d\nd3645a097a49042bbeab86a0a7f61a1\n7135fed6de70df8d25fc264b1d80bb27\n519ff6f082f8c41692f109aef7d7d6fa\n9bae37b85e2c71ae62158b7ee658e910\ne2f632abcd84c03ae7354dcb6082ee59\ncda92b4188af3a17c03a563a9407c5ea\n65ad913e23eec800cea003eff0268278\n4a3839f687aad9122d98de61f824e5b2\nf4b83b7fde9a4f0cdc3d55ecee5c17b3\nbb3aa93ba6c9a38afcbe4e14ff0c4707\nf7ddd0ae5b0107efdde6d22342684df5\n7eabef19cb02a9e6aa29e9f0529e8ef7\nd2ad73295752e323255c4b3adac8f815\n625c161306cf958eb000f20a5153622c\n7afb1812e86fac4f492d9da2668ec34c\nb3f05a35fcb82f678d3a66f462d312e5\n98f00281db9a43aa6430c2c15987e4cd\n2b567360f02ba48e4923701c409a8965\nf74a63793db25c8911fc2b865c2a185b\nae1cc74a1db83b0e6ab95c4e859970\na4e595d77097b224e2b372d25f6c9482\n8730e3ce4daf7e264f265f0c85da0b1b\n27805445a3c587c1db039d8689a74349\n7d6ad371f7037a6679368d1198f406e7\n6b2edba33e92b96998fc1d0403f6ad0\ne58448ee821f56bc409de7db3ae4697a\nffe4383cff6d000a3628187d1bb97b92\nc5f14fe692e70a5f668ae11a7db5e82a\n5c2ec61293c30ee7bdba4e1fee183355\nf5de3fdb7c073f48dbbc9440457e303e\n316a52439f11450355f46d55537192b6\ncde43e92674a66f46f3f02fb4d0927eb\nd177f7632a4bb3405073c32a9cf4a6a9\n343b9ae8ea03e45070f79ce36975718f\n49c24587a96211191679687a9323c13\ncba38f14dc16d5b5fbbc7c456d85ce59\na44249589b77b4674b3c42e318f3affc\n161a209c418646444b3c42e318f3affc\n60ebae123ae653e2a4385667567ce9e5\nf9add10d9e9f13f413ee1dc69b2c2bdc\n228561e28a40fa1dda49e29c548bb1eb\nfe5be6c8f1599697c3bd24f986301745\nf1afa2f6205f5c552ecfa9be42d43d0\nfc2ae302325d2c796820bd77cbfc18d6\n9e3586331eca79e48a5e3400c9c8f4e3\nce998bbfe6fa0d22bd6c42a70e9434e7\n41a464b6ea17ef5ce7321f25048c6142\n8669bdebc11a4646618b7927ac6e11ea\n688a2fcca4d94685a11f6bacf5c7662d\n623c9a5812ff9ac920768660cf080d12\n22c4449df36e20a025ca952293bf3fda\ned30f840756baab042678d21fbad4632\nbef84446fe50feccec7cbf3284585a40\n75bde51fca930e35dcc7ddfa72357b1\n994fac397c6246beba878f7904755875\n2cf794ec5ac1f1e0f5a97170d660a78c\n6606f65226a75c2e34fe19fa8681ba9e\n963ead3bc27459b2f51f77a6d7299806\ncebc20baf900f828147637a0471f2f73\n66255a0a235927ea1b81a92ddeaca85c\n26642892c5579f25998886098b83a99e\n1a43bd2e53364313f51f77a6d7299806\n29d2c8d1297d9f5c9fa24672a35ae8bb\n5884f7c8367ea46c7c6c78d6efdd12ae\ne476ca4169c3d0ca490ad276cd2af3a4\n912589813b9dbedaec85606b5c87ea7e\ndd468c350fc655eafebad4f49b26ec52\n190ac74c619a233470412e9b69c8933\nd11363fff4e2dc6589cc5332e945f058\na8dac23add615b33313f9af5275b7c70\n97779400c9a7a15e3c7dffee9c6890af\nf77643cf323921d7c6542d86974f9497\n9b7b33f2892e7bb9562c69acee9936b0\n88140d7ce3a1f6c4664b3b9b23ddfcbc\n2ad18975be0934bfa93e942a054d60b5\ne935cf0b43767dc9c3bec646284d5a6a\n86e6ef5ae3420e95963080fd7249126d\n8d900764c04127df4b3c42e318f3affc\n770f6ebf01b135e556938a56df3469d5\nc8f29afd512b8595b000f20a5153622c\n6c026a5f412f0b93002761e7a3ba3bd\n8f4c9f7f38e15d03593ebeeedbff73b\nfaedeae65bb5644040ef1c8b63a628f9\nb0abbb1a540e4b3431540522caac8407\n29b55c6cc05c37606e066e11deddab75\n2df1f411c26e7d93ad64f84f9d54ddae\n64fd4269b04f91ecc68c5db94fe444f4\ncc6696abd1d76062f90f8519e58d5382\n8ac4ba5328ac4f423a14972b15e80b93\n74cca53996772272e91a460ae1e88b96\nfcf216336b414bfd2ea86336b05b146a\n4229653c43599d726ed8927720f5e445\n905ac0420ec18c415aa4c6e8ff29695d\ned6e26db873ded9573e85324169605dc\n64c8873572f3eae175c80d0dd670fabd\n1dce0f95df134fa6498e56bb9f3fbb8e\n3eedf733e9318ee06bf0788e630e3deb\nc094e213b2199035ed90a8a4ccf0ca93\nf46d7f7da9a056d7fff16555386d173d\na1cb5947d7b09c2c7ca68e217a316e15\n5a61158cfba0bb6a80360680c1602c7d\n3273b3eb8dfbbd8e6942c5426df6055\n8e28f1259c6572b86cdcd27a8d5231b7\nfb4cfc22ce88e69625d15f7f2ce4065f\nad5c26058efb026446b5ed2bbbe6c\n9a066882ba79738fe3767a60a4ba1ba5\naffb5a80f11b383e1c25d54737ed5c8e\nf708d5284928431355ce350c1c834503\n5ec6da31cbe72c7f492d9da2668ec34c\n3ea744a70049d4edbd069216df40b64d\n17e171f6714e330d869e5ec10662e58e\n9184aa5ef68a383918c27c564e9b3b91\na06be76ebccfceb91c8935ddaf3dd9f5\ned964779023b7af85f6276ff8d24e520\nf6f3b8e08af617e44733824eae5cd9ae\n7d5e1184ee0db5cebda5f96847fc5070\n6a52c7461aa23233c2e50348f23d3d\n2dc5edae3c234a5b5706d1c54190f27a\nbd9758dc06e3c2a01e4317813b39d4fe\n6dad3b17869cb20fdf94ba6a907dbe8\n527458cf1c581025d4b7f1dc8ac42b22\nbe5501adc4564d9edf30786b8faddb78\n3c65571a506b6486db5ebc3f027decaf\nadc1d752f04c338bfbe07b96393f97f7\nbacef6e42574bc25d43cd8b5619b5cb8\n4cbfd25faaa706daea0e09825584e0d\nfe82d64b0268ba75febad4f49b26ec52\n9d59a4bb0e08150148eaa510713cb074\nb305fed48f77f5d3b40f0ac0fb9a650d\ndd6e80140b3462f4a1b2e810c76f942a\n2da4d3085b438b4f35836c728d324152\n1af43a3e8d164168e563c86a0b8645c8\n91c2adae3b942b60d1f4836ba5ad2863\n61128b7cb47e0e6bd6e704b04fd0cd56\nb24092dde9ca927758aaf363794b1631\n2854c3a6724724dbf5561b9d69a2eca7\nfb4d877cc4f2c63b20768660cf080d12\n5d5fe5537c5496f71f344185981b2096\neb98dcef687ca46970553da2430bcd98\n82fe7fa7a6655955f51f77a6d7299806\n6c10998b950dadd4cea003eff0268278\n98108861d6d5235017b431cae0dd70ed\n7e967a3c6d2a46c3e2d62d6f0e6f01ec\n5437d8fcd8dcb47a4733824eae5cd9ae\nb3cf5b09372826af658d908a2254f194\n1270e7980d2d69d293a790c6eb6d2ee5\nead93856b735ec90f0aeabfdcb4e1dd9\ndcae4e8f41346522e1448c25c538991a\n4bbedd35668b06514b3c42e318f3affc\n21ce3306dc9589dec7cb90e4399b486d\n2b1747c389f4d4f1ebadcdfba7971b71\n25695002a51a61c38596fa5b590d746a\nab7405d5b3ae15565e7087f2d9a278a9\n3f31ad5e9cf3e51fa6255bf8e0b4ea3e\nc1371e87799885a7a329355bc8cbc0b5\n10506aab1adfe9f4eb7b988bf4f0d1ef\nd5402d5be271438ef51fa0238791f5dc\n9377b1b5c83bb05ce76bc197b3a3ffc0\na59ef94cc10c7a434e6953a92bb25210\n50da3e6b87b52ccc99e8bf807e902261\naf592a064d5a83989ccce4c6d5bb195f\n794dc333392caee153041c49040be3d5\n6146dea482c1e5eaf713a1a6bbd3da86\n15bae7fe612add11bf899e941ea0fe55\nfe9d363792ee708b35836c728d324152\n3dd0f8b4dd8a688aba893aa9f42bc953\ne8c92eb88e60460e9128f82277957970\n6f8f9aa1ac705db9fcbe4e14ff0c4707\nfcad199862c19cd97fb247f6727f93f3\n9d9d1a2c33b32c2078aeec4d01b034df\n29b57f226644c696e921ee447a9e7b42\n7ab9eefef9fddaa416a2b5862518c93\n4804f348d4028033134ee81f8ff0778d\nc842f85477f9bac0a7a7a90dc2dc5bd\n832607835e99761c276b6f6d90ee3a83\n3365fa395d93bfd8f181ff4e3cb0a33c\naf057970729b2cb255182f299fe41fdc\n8b963c7f5f091b3c98100807afd99d94\n7ef03c6cfa3621f8ae46e333ff78e5b2\n13b744116e4f23c340914702d8ab1d37\n30ddc80e5fd46bbef51fa0238791f5dc\ne222abacac76f2a5470d3ca356fc4190\n7f531dece49aceeb4d1bf4af7e44abf\n54215af9f13cbb0c62d6ddeaf5a29144\n5aa3a0e7ef40f2d385c2318bffd77ab\nc47d1d0aae5de919f2bf00ef0d8c7aac\n17f4b14ebbe37179ab2b7e9ed9191486\n72458d4233742f29fa24672a35ae8bb\n2e8500336964ddabcb51f8085cd316d0\n3dd217a06e76292b372b6139ac78b39e\n2c6741a965bc580072f9a9353d57f9ef\na0a17ed0d2367f433c40408002fc3026\nab16eb9d6122a5fb41cf86c757faf4f9\ne7c9af90b186c098490ad276cd2af3a4\n7f7d80803ccc727137b816e68e48019c\nd3a5f7b56e3e6e1482e6c3a4e742651d\n8bd8776f65913f17b3c03e06e3a5c3f8\nf5526d438b53a244bda2eee2725ec127\n3a0bb4b6c7245e0435836c728d324152\n38bcc47be092398cbc2921df9ee1c4f4\na19e6780182c72cf9bf8bea04806ba15\n287f1318fd5e282a185574a5e2255bb6\ne2c7ca786fc4b050a8a813669d8b4f2\n519c9687ede3906dccda8d28b44378b7\nf4fecae627f0c8906a4e86536413f450\nb7d6030b31b59895ba0b91d2ba672bfc\nd60166dbf522deccdc8726953f344666\nc9857deb88989a67b5851007eadc6f74\n3b3b35ab4412c3263edd525d249a1362\n9bdb8268baafde1f44c642950fb4550a\n6c8bea32e31192a5f1dc60fdf1e64165\nd60054176a178d18febad4f49b26ec52\ne88f6f4e0ed6d01effc6e457221b9271\nbda51fed12335c5e999b33727fe6db14\nab76021d53504f38f51f77a6d7299806\n9458b7fef8e84b819f2349486c570dd4\n4019bfe9bd7605f7a52709499e423710\n55aea0b2f76b3f7819592f8d1b2d193\ne5eb64f97f6161ebf51f77a6d7299806\n4381d6508786fbdbc694ced1c311421b\ne056700bca093e0c1cf96a5dc33e37f1\nd5b21d6154c0795813dd6eafe1477be1\na91554caeaa6f9db399bb05f18e8188b\n8497e2cce58a0ab46827eb366939da8b\nc40a88d13709eba91f30b807ae39b61d\n41fb180e6e8b19a14ee40fa7f6af487c\nbf886e6f28740776f1783a44a88d6274\n68247c737f565de8615b3e12f53b391d\n91dfc3575149ff71342398ca9dc32672\n701dd3ef213c653b39401293115e30c\n2da415184cca0aeb2063f99c33f5c49e\n8c3e8ef43fdacf68230ea05136ea3925\nf4fb644d5c81e60e1a1485fc0329e88d\n259125651db34085a4865f78beea84b7\n376a1d212ab8971125f61c02205f9a5c\n8d45802ef679d08a1a3b40747093a35e\n1e4d84c0be21fadfe84db9643b62f161\n2e61f5b4f26b890cf27383fc5a5a711c\n6cb41b2a5e27533f436e6787c76ef3f0\nfa0ee25a0c8109639f5f9b9f432d1ba0\n1aba52edddfad70d1bf0233e4c77d163\nb661b93b67d0ca908cc8e5a741a7e8bd\nf674a5a3c9c5c7c781faebbdea6bd9be\n1455ee780321fd14c3bd24f986301745\nc6442db6d5fc94a62744bf8869518694\n97001433dad08b48e471c0726d35978f\n15d58d8098de68aa48d189f942cedc62\n9bac9418d56234bcbc5996932c1238cd\n998d6e318306153c3d67fb6c1e0f28\n7473f09709d14a2a8d1dabf86742ec3c\n400369fdca7608a531292d1fc01277d8\n992c576d8efa6d5870c3ad1df4ebf5ca\nda234c874b8beef22e1a5fb6897c8678\nfbe97577070afd195c1975633309d43c\n63ed1dfd7ccdb5be20768660cf080d12\nc180b07c9b0f46b9f8c3d2002c77ddb\na342324aeff75ec7983d269bb8e4ede9\na3f369c885720efc459b850e737e0048\n642fa34b5b7c5e5414c0d1332b864458\nb8cc89f8dbffe099a2da1afa391f92db\nec1e1abd7c9f2eaf5dc565f18990abf4\nd828c9f6c3e9f67367d177b869ee03bf\n38fb3322efc35807486150a9b7f2cf18\n1ab2ac2a0af6bf36798e7d16c343c306\na59f0a9956137c0735962325b2299f4c\n6d31e827bea8e970f198b94f669bca91\nce8ec2504676cf874b3c42e318f3affc\n55104b3d3c3f853992bd9b46d18a6c1b\n601fea1fbb6d791589ccdb4a5b6b972a\nd5a3401380fdefa0f51f77a6d7299806\na7d1fb495c33316cfdbe2bf897d8a820\nc31155f4beed339e855931d119219022\n2e3e46e427b45207765ee729adbdf968\n69689176b53be82df51f77a6d7299806\ne791f274c6cc7ded36a36f8fd7d27134\ne9a1325245afff7c405d9b5bb7b18be5\n89580ac98637f985c3bd24f986301745\ndaaa70967da2bad4e80de6380bdd8c21\n7249c3e41c4807c0f7e0e05bae6131\nf797885ebb3b15fbf417851aee42d8cd\n4c0e985f49767f90388021e2e5bfc1bf\n80d80b73981eb265b30ae4347e74f709\nf67d8afd7611fcdb45e0993de2a122d7\n635005efb9077ca282c22b790c082c19\nd8e3d77a83528e5cdc1206c3c8202eef\n66378f0a068a111e57211f5bbbd90b35\n761a4fba430377171f335cc23d448de8\n8653180e64d70a47b3cf15c77de45986\n6b43398bac2b6979438d8caa9ae106fa\n1a10879bcfca0534f8bc1f8036e08e44\n2ee72f0fa8848523f1d2a696b973c343\nf7896eb08596dcd6f9883d2fd957d60f\n7556cf66da8b4498e12186cc8c5022c7\na21d0b3b4ae4436e76bc197b3a3ffc0\n8ccbd2949fd8809b82cdf8854f156846\na96c429fad0af4c6bd1cdc725a461877\n962bea9f435909bf3c6e55b962f380e9\n42f22cf6e29876a9c19a59cdcb309b91\nae632e7cfc0bd3a861687229b61f22f8\n2d5f99d5c2f3463d477551ed4bff707c\ndce2d814513f5035bfe64eef3e5b93b8\nde214239a28de6b9d00689b1b6482b4f\n612caa5ea6c888c850cf3715818ccfe8\ne534dbb5eacd708c18885412f2b0a4f7\nf48a955a73fa0fe79aad7644557603ac\nba99a0f31b2ba6e51f087e2218f8d26\nb1333bac9640db456e5061f0592f234c\neafa1680912b4ee3391e4d6c585a697a\n66dfbdb8c35a6db779bd5cf8fc22cc7d\n58fc0d5a44ebbf194f6edfbf4641cd2a\naadf84936183c2d7414701ac79f88733\n68bdc363716f181c61b4bfc684868124\n48443cc15bbca01f20768660cf080d12\na860f37217b12b26bffdf578c739e217\n77a683709892e56fc535a1d76df92ef3\n44ee5a33ebe173c4d28a525d8260e58\nf9573b0425b08a38f673eef39387003a\naff5771db62fa63d2406c215cad9df09\nf85a362c7607921a7aeca7115f6949c7\n44295d4ec0d1e1ae4eb7315d59c5142c\n58182c7837f0edc35da16758ae613576\nf0cee441d88de6dafebad4f49b26ec52\nddae5f8a28d8d616e4bbcfa1dc6a2906\n288aadc96e908b29cc156800563d212\n4e855038d6060cbb47e81ce1f9a6ff7\n9271bb0cab9365d44b3c42e318f3affc\n6bb09b26c75b70b01c6ed23568095b6b\nb1b499e90f17a6332ebeb1e6a8111f53\nd58af24ca497ba8c4b3c42e318f3affc\n90b0880e3c85c133cf7ff48fd8d30a70\n24187332192704e4519259b5fe9bdf5d\n37ac02e6ef9c1ac2e21111e385a0661f\n511cf6bce918c6738e0afce805a277dc\n324f0d772a7b728c36350d50e191a45\nb36ee7cbb41ad82c9b11da89c22111dd\n5e96ddc94f51f99d2165c54dcecaacb4\nbd430a701652963faf0ff870be225563\n19eef9f0da098279c8bd09537246ca3a\n305795f4aec83b53a51d50d3f9ced065\n697e5edceaffe68e738e43095496b061\nf5529ea819c6e97decdeb21614063c36\n4ef4f289b6c23719588e951dcb8abdba\nfd7a4cdd680495c7dbe9c90af547c85d\ncf5a0589134088ba37e5c2aed7049b42\n9df064dd2a0f58a1d0176f9a144100cd\na9a618507a691298febad4f49b26ec52\n4d5362a8446fbc8f8cbb8bac2032149c\na93d61d10d489c8eb2c2cd006d206129\ne1d7b48449559549303c85804d402599\n5aa83cb8217619d9ed8de30c53213f6f\n244b56d46b9eec86f51f77a6d7299806\n5912cbf7bd756d3bf51f77a6d7299806\n283844acddc9df141191025061735ea3\n855e0dd7d801faf61886830ef08153db\n4f7c024d01141f23f51f77a6d7299806\n3185d26189034bfa48db03d58a820cad\n2275823b40c3e669be2020f4ae1ea66\n4572e2658d6e6cfe531eb43ec132817f\n6ba59a9ea719aefcd323d6bd8db8de5b\n4d43e9b908d77ddd2d19175e7d19b7cb\n496b37559f4ac973b9fd3978c6bb311c\nf17661552a06bf85282d5d529f9dee5b\n7c42d9809322b3993002761e7a3ba3bd\n7f837553c70b2a63684b7bc3f8a9aa55\nbc2a117e1c6b9d0da9f547acc5e1dd79\n2486659a274a6400ff07dc9cc50c993b\n3564c6480a95a60323fe3501bb9e7193\n1a08afbeb4334efeefa472e59de52b43\nd2a3193796284084e8775b281dde57f\nde90266b552fd26c2ebeb1e6a8111f53\n5348f1ce4dac7dbd5dcc7ddfa72357b1\ne97b4992a642a13c789195d85b2f8718\n7f57fcbe1e7af1c1b000f20a5153622c\nfeb92b34c698d396cbde89e0c48a01bf\nac7280f9774cd16432bb5d496e1304f7\n9649ef758d3334c74500047017815f5f\n7c77974a20ec2629d8f27b2e727c3511\n5ec15b09dedf4dfe961b3f02493c4f73\nbfa2808f136b8f7f3c8fd4a2aec82d26\ndf5ac7a785ab39fbb5677466d30ffffb\nbc5d39edb7a6efd77b9bc6a8e1b90da7\n5e4a74e0bfb5bd2835836c728d324152\n2367a0e01767df36dc40b058754deaf8\n7cc444f165a22b80cb2a965e75be701c\n8a98eb9c64d878dd419786e9c37fabbe\n25640329444772c6c2e20ec62321c272\nf89a468c302c89d9534fa06200d07790\n668fc6063bd05447e4bf96d5b836adbc\naf09abc2c30ac934b3c42e318f3affc\n75e59e4626875167b2f7093e7efce142\nb286f1a5450d3958c5da39cd0403824\n763737ea91a58b0360eda59359536e76\nc6d1d2f8261885abb2c2cd006d206129\nef4e5099cb7c543830bbd4cddd04c77b\n14e00e9bc6ea1b7230bbd4cddd04c77b\n31f1b54fb7c9e5a3cfb87ab5efe3dc31\nb292c70f70377635192ae4e26f16c930\na0e7dc01e9bb5de1858699aaad4acee4\n735afb29934346513d41bddf307a46a8\n7bbd69e2b6e1bb49f7075cbf4d009544\nf85e243539823dd56fa63795f94c4d8c\ne58c53d29aaee1fc8101accd22c701b9\n2fced9721464b4d9c955e5ed03ef3a2f\nf10936939b1c9277d6134c153bee8ea0\n832bcb192b80378fdb039d8689a74349\nf3775c07e5ba9515d6944324b21393b5\n6965b32c6732f5c0668ae11a7db5e82a\n807c73aa0a556bd496a3517f50eeb9f4\n120f8e2ef276fc6b9a45b69dede1154b\nb7bb5f021d40ae59f7b4b759a0c02e4a\n8a42ddd769a999a9e6942c5426df6055\n573e85e0e02dec63c5a208307819a3a1\n2d1d1b66d6e268d8c67c3af5181fac2d\n3822433e287ad25799e8bf807e902261\n133f18648797d149e27790b0ec8671f7\neda01b811087e2f17002d0c486c20865\nb7bd6522f540436c23500a5b036df62e\n73ea0e595fe794dced787bd949919203\n9130392b20b977813c41e9c62d62dbcd\n7772fe52eeb64fe8318694f1cc6fb1f8\nb491449d06aa40cc82e6c3a4e742651d\nd1b97ecf63191e19c19a59cdcb309b91\n29367fd1bfe6b23827775562146ecea9\n8bf421d191e4908bb8fa4cb65e077db1\ne24979696e6b8e7060edf8bc2f5c8881\n869bf2bfa51062c47b8ec2c9a49686dd\n8ff873162e6237fe571b2dc3839da461\n299b3728b46d7a4de343d70bc2971644\n889f05b7771f6b9fe76bc197b3a3ffc0\na7c9de3c0808584ef827070eae09df\n5d2d0250111a44d49ca96b2737246fca\nd77f7643e6e34ac91933ffef19678834\n2c08b5408a7ee4da98cfd47a860803c5\nb7f733e648c850abdd91f8f6f381b291\nc4a43d8473ddd9b4554be8f12e385710\n7a1d2827369011344d3fed2e930520c\ncf97b60fbf85b0656f236f75bfa0f434\ne65cd563d3a74dd4c0a61ad1cf92b694\nf0a7dba4e3c7c1e4ffa178ce1c2c6b13\nfc8e92ecfc4a39a47149dc6ae5708157\n954ae626fe09e5ccd5cb6d178687b980\n32d64e4638eb6e371594fba9df8f37fb\n6d6123585f79a8a54fa2fb9adc6e6779\n14ba2a965791a003b37e6e0c89177ef9\na26897b681a3841aa81634d14a6ca786\n95301825e69b3b2db04cb542e2c50eb4\n1307c27c3f1d1f7a895e947287fb0c95\n58611e7338c17f2bde909714df3390c0\ned50f2409be0ad022b6168eeac2194de\n10c25bdfea5eccfd153555abe935e806\ne448e3e40395d4d679414e04132a8bef\nebece7c581e3a42c32ba69f5f654ada\n94a458e0932f189f755454a26c190c21\n8627071fef9f1ccfc79fd92a0bf07e20\n1faef163785bbc427b11ae648ea92233\n8cf448cafd11acee84d4c0ff7581c569\nef72310b39244eca6aa35752fcfa44c0\n539d207a10c615fe76bc197b3a3ffc0\nfd861b13a3fb637e463650bb8b4560e7\n8ebe791395cadf8dcdc074d7b3f1e7e1\n4cb84e424122cfa7b9148a949a91556\nc582922f61a11b1ae76bc197b3a3ffc0\nb14270faa0beb387f36ea1eb6542fe7e\n445402730a420ee63190a57d5547dcac\n5a9e3e5bcfe506cb323ead02771c3ad6\nee5dda5cfc8349caad5067eac75a07f7\n197f31b2a8fb2e1aba5342d638d0c267\n4eb395cd5dfe658318a93a45bf780820\n49c0aaeed2f926e3f2cf6a9bef44d625\n359ffca14508cbcc86c701087a194026\nf88dca28140a1685490ad276cd2af3a4\nd6728931be54e6924b3c42e318f3affc\n40a7ed7ce8ba70fa4ddda47ee90d6a21\nedf1d95e72479c4bbe13ce34aa7c0c1c\n356e173817daabb0f44dc88afcdcd380\n8d143c8169ed42ada6fee8e2140acec9\n1f67cbeebf4f65b22b71faa8701e3f78\nbfd91773d0b2a32fd39e33fed94f56ef\nae099c7bf362b3e5c3bd24f986301745\ne055a8a5d8ca0b9869df3aa2bce421f5\n82e47329faf11e5c7235016c2c2c8150\nf46f68598988b922eede8c01bbe6592b\n1e4bf6ab2b2be368614fa2de2dbe583a\n90494fe31b3db5f927eacc88b2b78746\n825c5f7bad217f49d96790493cac7283\nd1611599e3dad7292f4c88fd91c6b1b\n9928c36919730b927c077130cb57dad\n752d13c1011bbe94f68132aeb243f95b\n4c5bc4f3d5a37c6dca9d5f70cc5f6d22\nef3ae300317c571b490ad276cd2af3a4\n68f72d87a2f94e0c8f58b2a82381f0a1\nf44c91626e4900a5a26aea0642029fc\nb723429f1ff9df7dd604f93937ce2d3f\n212756a9f7bff5892f6b08a7db6d1426\n45d1e19ee0b79df377e131ed5f0fcc86\ndf4593480b94850bbf6d78b1e39e2718\ne6a89aaa226b116a60885f79b3a5579a\nb595da70965fff189427e63287029752\nc0d8f876e068f17adebc282c830998c6\nc8b3d39ca53c0cfa4b3c42e318f3affc\nd4491f4fc4d37391f8333d818f5f80e1\nf48d32cd065088b6a6551b53c4ec69b3\n6ed257cfcd73fc6830bbd4cddd04c77b\nde2f120b21e228c2e6c5cd45aa112726\n711b4eeae1c12b77cdd18be3aeb2d66e\n11cdaf2939502622815a10e5a35009c9\n290dc618c8ac785cb000f20a5153622c\nc0546f05e8a4542f1cf1ba58f558540c\n763fe8469c9d204931a818ce55e517b8\n31a85a1a9bb22c3bf1e23636310b7e7a\ne07c83841b933e74c5facc3cc8dc041e\n6e18de4fa33bc9bcc0639593f50066f\na9d27bcf51153e4567de2aaf749e5256\n19e80d699bcbd3168821642e9a54505\nbc644d8f492e3c25febad4f49b26ec52\n97b3dfb3af4487b2b7d2794d2db4b0e7\n2d38fa0a1b4f94981faebbdea6bd9be\n5b2c4198bb1be0373704a45f4027ebcb\na10406dec2b6e9a2df81d783214232f2\n62bb78bfca7f4bba6113140c4b8aa3a\n1f05e080ea6e8b64ffcd08faf4fccd0f\n5f64c977d89c2417e2059182b9d400ca\nec98b08c2093d435f51f77a6d7299806\nbf9674274a0581bb11632b225817c709\ne3aa92f57f96a50c4ac1ecd2766586e1\n3cf25cdc0cc8b384c652d01955093125\n8b077b3be444a1338aa76d17cc411fb3\na6947349fdaf27ee9cba29f8b9fba633\n14b250fe1e9d53beb97452240e92ab9f\ne8bf7ba06998867d653227f952929af5\n9825c19c22c97af2aff4f3612743fea\na70771fd3bf24d65c16bd6fd1b8c7eae\n8d9b10974c5e3b35a82a6374374c9dbf\nfe2e9385283b62922de0bc4fc4d02dd6\n9634e0b7d04586865fca6ef890703085\n1b43b4892ab3a4612e85eab6bca44d5c\n51c7851a252ed0ff8211891ea560a7f0\n6af7f1e6035abb9570c2e04669f9304e\n796fed2b90efc756dad3b08da15912d\n2a5f29019fea4513dc0970d34db41136\n8b4ccdf057b895f888a682c7326c32d1\n6be2058f02beb0569699d7bc7fedec1c\nc363667046c562c7d9c568a52c35ec71\n51b4537837adf046fec95a1eac04b338\n7a8653592db2dea36518d4b6acd71be6\n9081c28e6a90fab1698da6fabf8a99e2\nd9512362b43efd8f91fee7773e951339\n728ec88a2fe37abd4a2f90e76b7328d2\n7988c8f23dc634678de5f815e8387cfc\n411811d0fac7dea18705931e60ead6a0\nf158c5c293106fb17af2ac6660aa6669\n72010b2aabc328ba2d1beed6f591ab11\nc20a339e2983a462406281a1e760ea19\ndc611d5add49200d868cace2a58d7210\n78c577ff52f4d79ae0a0b410fb7d15f4\n6986716a76d8a2952ca3f5e9a38d33a0\ncf5e67d5e6d7cf03f26f8ea67fbd8269\nba2ed19060724207508ab97c29985b12\n10cd74fb0af8021fbf7cf6012a0af9fc\n8d2aac03aac051bedd3adf3090c701f7\n274e9bcb57548a02dab956ed03b0f26c\n7b89037bf1695628eb03e749ccd7a541\n62be982d61ccf61d92e675672199574\n5b0e8fdc7208b8d3cafef66236db7ef0\ne4b2faf6b123b90286603115d2739530\n5b62582a39681d809699d7bc7fedec1c\ne72421299768187426a61458b682cfd6\n276e35b78c24f8b2127787d2c89d5a93\neeabc27816119ff429ae5ea47a8f21e0\n97deac79537426ac9255fc5df0de0bff\n649bcbf07f29fcae355d9ff291618ea6\n6c160b3f23bdb1af1832c6620d562eb1\n53afd3dc40b699cf124123a40f9164a5\n9c32d9398c04a66bddaf28b23330377\n9b17a95b794b3dc341a298cc53deb86e\na1379276f75d137ac5ddf9f6c8e4b3a9\n7f52ac1cf8e52a58be46d062a5971723\nb34982af1d6e18736b4393ff6e4e0f88\n161e0ae498eb2b9be3ea982be8e701e5\nbf15d331be699886a005442d4981d053\n2abe61af67cbd99aaa1d46a2befc5e09\n3250cee2b00f2bfc9141594c44ac35a8\na05d8e55e329df41ca2ed12df13a916a\n89aa38d569b025b2dd70fcdaf3665b80\n8143949bf6d5e294ff2c800153491d59\nce82dbe1906e605d9b678eaf6920cd86\nd48ceb6fe098d078f0cfa7d27eaf1bef\n8cecee14e55bf1f4c255a5f53b753fe4\nc876b151a22b59a24702663c3b3faf8f\n94aef6e5634907b16ed6e9e08c602c83\n739a2551d3826d5ad25ca1a27cf9bdec\n20bf71868949fba4b445ec1f6a39e0b8\n25fc395dc873bb478a252571106d569a\n3222d3e3c90f4a3238b3634f169dcc74\n356fbc66c305dae355f46d55537192b6\n7e1c4bdfbf19aa22d3cf0d40743efc0b\n5b2fcf551345b64bf3412e3273fc1682\n672cf4b2e0deff1e693e54627de491a9\neca9efad6364021cf42a90fe4baf4591\nfc3d08b88b00d95212610a4585592f3\n29c6a184dfee3050820018801b237b3d\naa8f7d94b5aa9cc1f9ef5ec0bb70f1c\n9d5941cd2ae236db2a63bbf40292a37e\n9417a62558b74cb8fda92aec8c5adcfe\n7ee773e031400d09b4fc0a2b20c3cddd\nf835366205ba8afd9b678eaf6920cd86\nc516c27390cd9890f3a67cbaf0fde1bd\neb984a4ef0dba0eb445e85eb534460b0\nf96c029d342f72d6ae59128002f89f91\nc9a3ea912a35c3e1601bea3dca268229\n293f2e28d5570bfeaff8240d22dfd73\n2dfdedc4e2d10ccbce9509a520498ebc\n6f86cce2bf8fa88821da01c0bdc324b2\n90f2e686389b56b3bf262660cda9995d\n4ba0563454fc10f365f5f793afed824e\n96de9fda13fa986d9cd431573238602d\n75234e713a2baed84d5f12fa5114b4e\n3b6b823039a912023002761e7a3ba3bd\n6a3c9ea7e4cc8fabb20aa91e9e90c311\nd582887570d2c1c2d7e17ccda34f6b0c\naca97b802b08e220ee36f204dec02883\n85bbafe7db85e0d44c4373a4939914cc\n6f835f3532151c25c2a21be00e77ae82\n7a1e70d3b087970a23fe3501bb9e7193\n89142ab0273740f221bdbc0445d9f748\n587143666166faf155fe0f12b5bf32dd\n5d819ba4e21208ac2b5fb024f65f6da\n3134eb0e0dae6dd7b26d198318b74e09\nf66d010471970cf0391e4d6c585a697a\nfa29ae17ed1482ed8aaae3d020f5ddf8\nf5b682cabede450d1191025061735ea3\n4d85392c3233b2b8d3299846d5c00f08\n9da75bbb92f594f19cd431573238602d\nfac2aedc7b6ab4b93002761e7a3ba3bd\n72f501d4168713b9445e85eb534460b0\n24d1d32aa33c38716a97150bb2a72733\n6ff63214c89d65d7b87028a4b477349f\ndb00e248dce5fe409cd431573238602d\n51fd921d3703b86381289b3cbd650b9d\n9e5973d8a4ac051f6e71174964d90e49\ne0eb9f5421ef2c4584904c716bc3b619\na7ab34edcd45d7573da27ece6ae88fff\n20edff7e1500fc4ed45f502ecff9e44f\n5929d3983eeb8d5cbf96d22e92924ea2\n2f32966fc64688969a08db804545b684\n3f9462d720929e73873bf2cf33e10943\n65b353144d52d75e98d5fc0473d00a1c\ndc0db74cd78a3805f5600f911d112095\nd6f122e1570e4180d6686dc2df08cca5\n52329d991c54c5104febf42664c91820\ne537c592fdd7f7b7c3bd24f986301745\n22a67cefe94bd5eedb402a46aa8f1779\n24bf4d4382c6bbf0d99562b7e15abcc1\nffc2c7813c80d8fd323d6bd8db8de5b\n6d9d5501c0a3d8f1615fc479d27ea86c\nb85174a2ea03f4189cd431573238602d\ne0aee89fa986647257256b1738023f7b\nab7b56ba63f481af9cd431573238602d\n7356817f2b175b80f7088fd42bf47c7a\nb9bbe91d581fbedac8ba7a179c3a36e0\n2475fc0196ea39aea81329004b7398d4\n1d3aa66972004e861f5bdd219902caa1\n938ea1c89e7a62a9d6d49cce41472b6e\n794f6c8575cb9828b44aa1973fabbd64\n1ee0509358dc8bcae19134c8fbb91f2\n1bdb9df06d749be1a7146643e6b355e4\n872e9d0bc078b4c8b9a1f0848a4940cc\n726c677962874743002761e7a3ba3bd\n58884a3e77d874efc3bd24f986301745\nf298b3663ae591a2276bf4bce35c96fc\n14c35137c3612fd0d409d3400adf2d96\n7a7188e439a39ffd9a2cc6d7b7b4954e\na2dbd26e8a382509738e43095496b061\n38310f3d796ac0b56bdcd672c2b17215\nb5bc21c92dc997cb7209833c7512d6a2\n8770701a1d5cddb9def21b8ee4b159e4\nb8ffc016a4e080a6d2e5fdcf2bc010e2\n891c1cd45e849766b07cbf788ba0557c\ne69dd1a9bbeb62523002761e7a3ba3bd\n96e9571393290511be52c3c71dbf7749\n7c08d40119ea39923fe3501bb9e7193\n8551281fe6e37db43002761e7a3ba3bd\n6dd08b216592dec6a6797fa823fd42d2\nba73c0ea2797bded8adb98ef1d9443ba\n1248597ca22fa1e71332a40d0134407\nb1d834cd686cb8b8477f06cc543186ab\n98fe480bea8f8f0486abe5555a3b447d\nf247cb60019ea321dffe3352803d6df5\n5e8452a2014eadd5ea8049eca11c54ef\n9eb1ec4c70696799851f4ba6aaedaaa8\n4f7497a449c2e4a56b9e47850f23a791\na3d05dc39ca639bc662cdc2f77e49a85\nf772e5b89475fd2e4719088c8e42c6ab\n8d1d04d72b7a240d4c61a7cce317bfb7\nccad4d1ffac1b5e978ebd8af2a314e49\nfa1e6b0591047eaeef78a907ef09669e\n472fe5ae8d386452bcd6195ec0f1e297\n889654f30ea7b4c3ce84b253beeae59\n780799646ab0a19b589fc18f8d1e43a\n89054836cd41bfb9820018801b237b3d\n3b334febd0aa9ba7b20aa91e9e90c311\na44a0a014b0c1d60609fb05dbd8681bd\n94df93e1c5f96c1891bed99343331f7c\n49374090de654a54fcd4910413c446d9\nbcb349231b83952a3da27ece6ae88fff\n818723195f30327b445e85eb534460b0\n21a65be5dfed538fa3461a37f23a9515\n6349f0d123ad1ca62ee5d388bdaf2f\n73bfba756e6e8511c3bd24f986301745\n727b33a75f10861423fe3501bb9e7193\ne01e72e173dd2cec8c76ec1f86d432b3\n45da524a32676350b5817dafa1567392\n20b72612211287d43002761e7a3ba3bd\n30a525c7bd5ee80192b396ed960b67ad\ncae89eddba3c4fa1b20aa91e9e90c311\n5aa1db3eb76c53aeb660da28fa2f03da\nbfe05e0cf137791d1029f6318b92e21b\n7d4c3e8b3304d8f823fe3501bb9e7193\nbf3b9638b7be27bb4c26a0d2e78f0aae\nc676bf562cb559e5ea820b41f77ab7c8\n7c7c705c9f3b0ced3002761e7a3ba3bd\nf86ad1699aa2da6dc955e5ed03ef3a2f\nc4b5ed6c9ae1ec5e8c54ec820a9ed1cd\n857d1ef816b8409fb20aa91e9e90c311\n2a34205ffef345d13002761e7a3ba3bd\n94672a37947da258f70bf5700b78659f\n65cbf486ccc5afc53002761e7a3ba3bd\n804a9b89e0279aff1ed1d681aa8388f6\n52ec1d25f2d6aac661d4e2b4b8b99e7b\ne2dbb55cd453fc2ead852a56afc15951\n2baa1d2adfec9a58445e85eb534460b0\n6f530fe373def431a6fd617b2ff5d2d\n975b724129620c9af4b6538438a0b930\nef575c402b734f8d810b14a81e12eca\ndf1b280b7763abde3002761e7a3ba3bd\nc416034b70b1d339838b39398d1628f8\n26a97ad8dd79eb1ad0c63a304a95442d\n5d8ea325e7182fd84b757d0f16894ea9\nf26d68c69a06b95ac440f8a1412258d1\ndb969c98e24511cc98cfd47a860803c5\nd7de6b2deca39eb0b20aa91e9e90c311\n5e52ffe27434ff446875e2781cdd26\n16961ddf69b6e91ea8ff4f6e9563bff6\nb699dcd9de34b5023002761e7a3ba3bd\n8e6254609ffacf233e5f17778b45d37e\n1c38f1631efaf9fbaccd05bb6a369505\n1c97870c90ff3a4f23fe3501bb9e7193\n4d4eedf718daacf945714140d50db61\n77e4ad83f78eb8c3fc8b5999cff24f2c\n758649ba384b28856dc24db120ad1ab9\n2a0eff86efdf60a89a682a6d0e92c30\n541087bc5ff0e0bb349c13532142fc61\nc7cd5977b531acd76b41b8bcd0404ec\n6b8e579c5178d3e117b431cae0dd70ed\ncda580f16378e12c3002761e7a3ba3bd\n8eba29bc85c8c830b4c161851ed2b4e4\nb57f0907adb6a60b391e4d6c585a697a\nada2aa7ccc81977d4ba437934dd25596\nb5548e1e944a31c077ceee024ab73ab7\n242b7dde571b99bd3002761e7a3ba3bd\n3f411154853b403921db4632488a2ae9\na2730a66ac07818cd3299846d5c00f08\ndc9a7d116351f2cca16af3198c99de08\n3a3c922623ddb42e5d81820421265171\ndbf2123ee206a81b8b00eeaf68a1358\n4dba531ab70199ec3002761e7a3ba3bd\naf3ad492135860eed8fe1b8aaa4afeb2\nd903be5d4ceb3fd56eceb9b47ba95c\ne440f87f88335680b20aa91e9e90c311\n61d5c19a08b3f4a9b3dfbaddaa1a935c\nf9a9c8e70b6a2b31b20aa91e9e90c311\nec07a28c3d57d3275c6a44a505804654\n61c9711cf5308ff98d4b556335cc5d64\nf0275c22904d275222dab9b5e1c1282d\n326342c53d6b26bb423d2dbc3b38c389\n91530c95f442dd71793b6229a2639a1c\n6f58b8c1d826a301a97bcacc05204e5c\n5700152736510e2b45c44a42b411ced8\n24019c15c4707356bf96d22e92924ea2\n616894d973384f358be590460e3754d8\n6d67f5a9d2daec3467ca2ad6571afff\n31b972951e7a8ed323fe3501bb9e7193\nc9221b4eef51600ad9deb3f829cc2475\n1ac080a115a94477c9fc9da372dd139a\n2b51c3e9b524ddf560b5fd678a94e9cd\n996096692592afa91a0e159a720dabf7\nf472e9e63984b443f155d75bbf62b80\n240ddf8b63318ef534506cc3910614fe\n28ff86c01e0faad758df8eeaf3dad1c\ndb3d26a5f2a99aec433eec73a2fff97a\n6183e3d4c73872cdc955e5ed03ef3a2f\n378a4f0524756b0ab20aa91e9e90c311\n862cf2d35bd106c55230ba3c88b645e3\n385f8323f5051b85f2c48e2288633251\na2f9a8c649bb70d35c08aa223a05362d\n77fd14f1a7f2d27ec3bd24f986301745\n2517066dc728ebb955dbece39a4b7905\n6292216ef69f6edb11c5cce13f76151\n968714b674baa3152cf0938654a53e55\n6ec12aacb68a918a311268c007111527\nf0990151fa433f1498cfd47a860803c5\ncafca523ae3653502454f22008de5a3e\n95b7d8f0fe70e768827291701dfaa1ff\n3f036c403ab34bdac3bd24f986301745\nc578d2fa302f0b935e7f9846384b5857\n73fc0f27cd57942ea2edf7a1fa4be45a\nae5ac5b2b027fcf9118ddfdb81cc6068\n690c3f8a4e7d384f1270a3c39ec25c61\n10d9b52541550c909cd431573238602d\n4df369ee72ea8b2c3da27ece6ae88fff\n6ae77e7aa510e044c955e5ed03ef3a2f\n6ab612b7a5d4def82454f22008de5a3e\nee16bda18e585ce3445e85eb534460b0\nd9faa371af8e7f443fa7114f9b06aaa5\ne77d26aa88ec531cc17e7f250c5222bd\n62f7c1abde6bd25e601bea3dca268229\n7e2c9dca60e09009df1d847ee0a8f3d3\na6a7ea033ff20abac133e11c42c6f6f4\n7a415346ab7eb481f8d77b3fd14416e3\ne300cdc549ff426723fe3501bb9e7193\n37ef68300b944adac5a1529d102e7db9\ne3fff8b83cf999467ff6ace05b36a5\n242b7a0fa9e9c439b20aa91e9e90c311\nf4d21f925b703fb7e46b767696592d01\naf71e4dcd477656f9cd431573238602d\nddc16ae1263d506c955e5ed03ef3a2f\n31c090b23f52bb61208c8c852ee795bc\n9d02362926dcb3f6951c1fffab4f5807\nbb201d4811ab271ecf5469d07a8db811\n9fe655d18bce7ede23fe3501bb9e7193\n74ade89963828a37d94ed55f750426f\nbe5349431760322c7b7b1bcdebeec13d\n451e66939d40c5be61bfbba8a5defb02\nbc8e050a6c0e49afea5682a3b818969a\n2777463657ece1a3299457639cc3cfe3\n819676c81556d0d09ed5db740d23ca46\nfa5d7f9c54f5bb2010b97bd228fca721\n4da9a56cce188c838aaae3d020f5ddf8\n3b2855b73aac8d04d6686dc2df08cca5\ne19080d150b1932ab20aa91e9e90c311\nfbf9ef8784c0cb8485c1a9fb01e08349\n65cceb90a30f7b15bf6d866879baaa7f\nb0910467658fa43f7fde87eb01f5851\n7d0eea8581ece273820018801b237b3d\n92cbad40c55de5843002761e7a3ba3bd\n60fe09a5de2a484f45613f5c2df1029a\n8b612b06a3d668eb67dc575d3328bcb2\na406ef7c367e9c043ce425098c6116e5\ne7ed7eeb46e18296fdb9ebad3cf3755b\n351c0bb85c887df27ff6ace05b36a5\na257171096faa6252ea98d69e91ba870\n392093300321b9e1eca22c501ad0a77a\n5ebf57428b18f78a1ee6305032661052\n15f0878e6bd57e6c417da6e71c86659f\n951d129ced4e7d13cd4e8a27ff8b78cf\n8cc8e16280748c3823fe3501bb9e7193\nefa1b72ece626ac6e3989b96851850ed\nc356393b27c3fbca34ee3fb22432c207\n22ee7f1fdddddaccd78a975872fcaff\n5b5fe86aa8e93f91c3bd24f986301745\nd6d29b0c347f2ce23002761e7a3ba3bd\n3fff3e35a4b68352820018801b237b3d\nf41198b81216f36ff155d75bbf62b80\n50f52f9ce377596fc955e5ed03ef3a2f\nb8411c6434b79e59d6686dc2df08cca5\n97d1c4b5a82891e33002761e7a3ba3bd\nb825cc91b6257e73002761e7a3ba3bd\nfb6d011741ccdb374a00834418a35d1d\n83120585ebf07ee93002761e7a3ba3bd\n78c4b505894342269299936b751bd77b\n1d93291de09fa5c876e9713f57a5fcb6\ndcab9aad5876cecd597ff152ef65c9c3\n42c35105a94ae6e68ec80f11cb8c2f41\ne5140547647bee72490ad276cd2af3a4\n1c40ccb81c862cbf595d2b7814efa054\nb8261a2db6b6525f490ad276cd2af3a4\nd47189d9686125553caaa84ea4cea094\nb2b4829e281f1ca09a87002a4eeaf610\n832ea764f0d3ffad9923defa57043b67\n276d614d42ecfd1490ad276cd2af3a4\n6b6c03883c704389c3bd24f986301745\nd14bcc93169f80d9b2d5d82056287083\n322b055809086143c7860707e3deb3e1\n1bba52fa91ad1f9d7ff6ace05b36a5\n5f62b83cebad8dd1473f10e6caaeca56\n306f10749606ec9355f46d55537192b6\n338c59dd95a2e93362e5325f0ce7656f\nd5e003575739a8ce1bb088904f7cb154\n3c886639d67798f671a70be9f12ce8b0\naa122afea2dcf725db039d8689a74349\n2391f652acdb73dbe958df2e8332e31c\n25244dda23e8f58d788f926f4d51e733\n18635aca8099ec5a3eec26c23f5bc80b\n20765ccd89f9d915d200faae04ce3f8\n2b06a917abc1150b554ad4a156f6b68\nda7310bedd8595879daeea1362fbd792\ne17121f04e884edde480eba094ece03b\n3942f02501161134c3bd24f986301745\n3d54679cfdfe8d72e1aff9039d025\n4fa9bcd45574827d4f0331b81f3e1ef\nb28f6acc151cc20e19fb4103277a6b93\n8b2c3c73b624c3faf4b35f4029eb1ecf\n435da96586eb1325cc719373d4fe991c\n5dbdb35766fd2d4c9f4b4145f6688869\naee3dc454d9b5af0dccf03d91dc58d38\nafd9337f23ea759b54cd2a0ea6cb618b\na8fd0c73fb6214cad56c79d3df7792df\n1509a8710d2fce3c4785a5d3b6c47521\n73eba3054b62c14b76c7054c38bb1311\n57f64087490954d2c015b1a51bdead97\nd5d7324c2233d6edf51f77a6d7299806\nb399584ed464f6f5d2bdf2c065ab29bf\n18b58b179b73dc958c9e244e3fbf98f0\nc65ab1fc77cfeb37f7c07d2e56f26a5a\n8839cf79a5338a568ce66f12ba927a2b\nbdd12e21daf8664689940e75c3dc3e7\n813d7c5131f6369cb898f6ca189a940f\nb4ee137cd86d7e3a6afaa22adc38077c\n45b4df78e3cec0d99860e9353bb52a1\n19b46cdd0a44286823eb3ad3d378722a\n3b7fcc7c030ecd496062e86c1d0c60f8\nd37205936d372513ff868cd4e441fef3\n43ca66b4cebe3aab41c3fecef2f1308d\nb606da9c4be6e6106cbce046ef0f1d8f\ne18c2cce4bbab2e45b7bf37141f96eae\n5fdde770581fa1fcbae326b60581fb7d\ne99f7a450afce3b62553cc33364504d5\n71ec472682954cee353c1d159a8a8422\na1d7eacfc3e946cbed4671e7b5b34212\n6bb78393aaff36b8f42467d8c501ee9\nb4e22060a8aa48c9b1b2ecd73d1717a3\n7f0aaa160a9f024e492d9da2668ec34c\n21e8c818e9d517f919fb4103277a6b93\n44a3f66a0a40f21119fb4103277a6b93\n898936a8b8e448ad1d70b774ac91773\n4fc00c3e48cdee77883679e873099585\n6d78f55d24f1c4e714038d588fd1342f\nc35f0f50664264d5e6a1cd9763fc2f3f\n47a9339b6a731a1019fb4103277a6b93\n63df9bf9884c5b485e7087f2d9a278a9\n2a901fa05ae444eff4b6538438a0b930\n562288b15bd065d4b29ac64be50e118a\na003e49331f19341b0449d422c1e5657\n920842b21a3c471b597976c675750537\ndd86b0fcacb9990914038d588fd1342f\nea5f45fc61e1e26bf994e2a430ba61bf\nb4ca27e38b327aa0240c1f0f1e25335\n79650ee83a0aabc8e1dbce34224f2394\n7534b0ffb603e3c571a70be9f12ce8b0\n3db6ff15d7ee52482db431502a680805\n867e978b82c313693002761e7a3ba3bd\n9d41c5e8ac8ca4e6827b73eb36515554\n5be46c0c35d3cff2297936c81e7f6629\n517a4c16b7c5960bac2b62da1791c2b6\nb4015b8800115683b3f10885d03d0fb6\nd1a80144a7efe02e585ed17f54616d23\n1901183525f0063d2822b5101b06e070\n32eceb8ea5b43926de4d0883c61d7e14\nde0267e2e1753bfe684b7bc3f8a9aa55\n8a37a87d367ec0fa276b6f6d90ee3a83\n2e20f537a7b64de177981b941eb4f5d1\ncd94233033b1d958ef2438b4b778b7f8\n3f4e117f6172555bd7691f54dfc57244\n2bb9537b798dfda490ad276cd2af3a4\n6e08e7ef76b1c27027f02aaa836b59f6\nd7792a9c16aaf16d98e0d1738edd4f19\na017b980b5bc255c19fb4103277a6b93\n8e424220b8f053c81ee2805756841071\n8a545c071537d55014038d588fd1342f\na0a123a2c7e0429c1b17743c18fb63dc\n5067a85ef67c2e45ed403132b02528bd\n1f0df5b240c73a5078dd615a59de5f05\n1a2abbc9712e2fffc3bd24f986301745\n485516a2c88eb0b8b516c05d046e8e45\n47e24c3995150688d810b14a81e12eca\n277e13392e16006557183d3afb0a522\n99686d07d8ced954490ad276cd2af3a4\n44e4ff8c96e5864742d23b95defe1ce5\ncbf56579ffce57d84cbbac005f3700ba\n4a0db050c8703a8d6e3c8a33c4ddf2ef\n23ce23d83f097dfe30e9c0571435b6e3\nd4bf9872856d6fc2b300c4ca2f51c01b\n5472624a2a130443e70021280aa1db1b\n119819c15bec2e1e299457639cc3cfe3\nbac7bae00f0553bac88c75598a661012\n783af15c06117bb29dd45a4e759f1d9c\n7edb9183dade5413ae685ca100c909e8\n549bfb6738e5c5a019fb4103277a6b93\n5f274ad7c2989f5119fb4103277a6b93\nbe8a750947549c7555f9913e822d5318\ne59fa20a6988b93e29e4b5aa807bb4e7\n175a624623ad6fb037b2bb75885cfc44\n97cb53b5e54a2abedf6cfab91d65bb91\n69a96a236eb59dbb4594f83fd12bcf18\na1efc57eedf9a2e93c8311d2f6bcff87\na3dd0302fd716e8624d89cbad731b903\n734271cab27abd133d0f9f8a61342808\n8d608e1a1a1f34adf4b6538438a0b930\ne87136a7996cc5c82d6b4fb79c7b302b\n9d63f4971a332c55f7628281ecb18112\n6f317ae1892ec6e22f63d70fe82e78de\n4126746447b424197fcb8ee54b1a951\n4c804ebc195b99d3f0b45b4b4c7e33b7\n59c8b38f75ae93bf785953e8e787ef2a\n34ba7b78ffcf0b46d30ffa15d9c1eeb4\nb160e3f80850d23755f46d55537192b6\n92d806ba93c283f73379bf463ad73282\na530dd6e10797f3dfa5f1c647c19b0d7\na5d6b025b4c7239df1c7a32d97b27a4f\ndf7f8b7ea0e2c4ee55f46d55537192b6\ndcc24b55654a9e6bb65b71636c46ae49\n95c2e462b2c3e5e529d8eecf3827c486\n44ebc446b2cb44b0c12f5058c05b3979\n79a3bd60b48584b11ea954af295a6a98\ne104beba32cf40bee369d8ecc5b0e866\n9831a5ae9045c6f39155acfad44fdd03\n40e4f56f34f98a779ebe79011e3a0eae\naf4bb12decb39ab082f29b648e624c33\n87385a994745e92cbc052c28a9e28ccd\n545c6c30ead2d411e6c5cd45aa112726\n5d38978fa7591a3465a50d0cd9008f5\n2b8ffe339a50f0a5f51f77a6d7299806\n114d3d770d9203fbec82976a49dc\n7e15b41158aa0bf73542594e05cedc89\n783f84e17b53447de76bc197b3a3ffc0\n460bd446c3f1cd5711beb49b60c734f\n871530f9e0ad4e2be6b70bffe12b936c\n6558819685f96577c0f947750540fb22\n7a2f94d95992b5716521d4b69744cc6d\nd0a4d46fd42a0c3df6cfab91d65bb91\n8ae2ae3b341fe20bf80985a99195eb8\n59d4c154eea079c5492d9da2668ec34c\n4d43a00b356701d914f14c67f445762b\n8b835170d8123a1dcf004563556ddb36\n98feac40e78b92bda1fe796dee2910f3\ne8599df1d0465e3811f3906fc1b00350\n51a2b4db530f383339797c21e8801b1\n2aecf3003735e8b34cbbac005f3700ba\n843713faa2ee00cba5d9ad16964840ab\n179841c6d26cada5d75fa3d7e144089a\n7f5a875b5a2811b07d2313b9cd9e2952\n2dc57230d14506eacd6ce29440b718cf\n29ec54b06d35acb2027cee422df2aa3\n224820b020c1b6136b0f2a1430e993a\n9c71de3e26788e20d810b14a81e12eca\n1deaeff17e093d1c8029e7f07c5ed73a\n3838d78a4b4a76282027cee422df2aa3\n22c470174c40a0c33dc1643807625350\ne566fd9bbc3d51d377b9297f3055210\n521e51c43fe3def573ae93d3b4dd6712\nc7e03bba4ab333cfb20716e5484f7807\n927dbeedb2d864d635dda488a4bbb1e1\n242055fadd675e626bf0788e630e3deb\n6f3e12831cfefc20a1d8e55816ec2b5a\n5c4557a826e80297490ad276cd2af3a4\nc37632eafbf41b9c1fb41007d56c0ca1\n7937479e527b07dd19fb4103277a6b93\nbdf99b327d1079fb35836c728d324152\ne36a5e4069db8198bbbe32d7a5038eaf\n312a5be8c4449afa456cbf78e1e89022\n33e4866b6db3f49e6fe3612af521500\n12a5cc49c75b93af5b4aea6c98f52b6e\n6e9e8100ffa2a7fb3b1bee6df796f998\n97e4bfc6f8d2e2fb986b72a93898270f\ne28af7dd5593fe6f820018801b237b3d\n6feac0a35c8f8626e73947fdf756a329\n5f31ed4efc21b67711a59b122fb65ee9\n8cabaa720e1fe52723eb3ad3d378722a\ndf38d8c2f3b36ff76e4b69f8ed4dc344\n3c1c6695e665ab474b8710a3469971b1\n4b9ccbb4884f12376a5e440d54e375dc\n589e7c32a63816b1d4a147733422d301\n8c0999396ba60e758738e7290b6f3237\n4f06f4d04d239448bfa17a32b3866b83\n38888628843f7b38f8b8d4a282992be4\n1db2c973f2a3b154659277e23bf9b970\n5de8e8b5034ded6b707cdefe012d0353\n4fe7555a7457c763db352b8394e172c8\n6491dfcf1c9782154932af0c4e356b6a\nea87ec56cc2fe88fb20577fd2a0fb434\na9dcc147e83c2a0619fb4103277a6b93\ne1c190513b084f4c4804b5831b58a04d\n611e834a83c63f50a8840b31c6de34ce\n39dba8b2e416449a19fb4103277a6b93\n9c162d575505f102ad16260d4d73b56\n2b4cee8331e825806bd0aad3d992cb54\n94fa2ca1212536d84a8050bb0dd3c541\n8215382c95d5dc0a5c6a44a505804654\n8fae5133d952b2ddcfd3cc1d09bc8fc6\ne75ddddd62dac8a119fb4103277a6b93\n39f0da2d45ad3b6deb82e56bb4ec31e1\n30cd6bee25352baed5857f15f877a4e5\n43f1b98f950af6d04f3443b22038d340\n2a963bc9ad704e5f525b133235812833\n83a8d95b2dcdd3a854cd2a0ea6cb618b\n192812aa4ad73d2fe6c5cd45aa112726\n2c118800181f296a855931d119219022\nbc33b97457ce7a0a569537f38fcb7202\n569b338df880d560a71c812e027f94d9\n9d7e5e8279ed8a30f2fc41ded2e6c02d\nb5fe80b6cbb9f5d1a6c03a53cf0a14c9\nd3624229f0310175658d908a2254f194\nb9aeea4fbc8db8f3a08ae93bc9509b4e\nd416139067bf7db337b2bb75885cfc44\n4d484d20a59a18d3fa6df2d54fa43ce\ncf37563a68edc94bd71ce74ab5e9c1b5\n8af35280574ac141bf7ea2059cd7e422\n5362db12d934a50719fb4103277a6b93\n252fa50674207d749eb332cd2d2a300\n5ed584534db04e128ddc9f1b5f92baac\n314f35827359105d6faea4ea390b4428\n17e773bf0007544ce76bc197b3a3ffc0\n8d01e61b216324d0f9814818e8ac1c35\n92ee07567c94fd6d9a53d72e083de39\nc6dbc7938060818cf51f77a6d7299806\n3f756d8d35b51ad629e4b5aa807bb4e7\n3a8b062c50c0a5b7977a08097a2f2d7\nf078a5940280c0a22c6c98851414a9d8\n316863fc4ed4dcf7251178be84deb2e\nda09745bd5be34b9aaff8bf395bfe94\nafab57dbd3c7ef0e98d5fc0473d00a1c\nc2fe8c88c2b42564415434d4384bb66e\ne90b641f8f1489d44b5e2e6b95708893\na33b6291afb1f8b066b38b193b506338\n9ad79b67c56ead5dc862eec8232fff1e\n7f6a5ee3a0fb9ff19fb4103277a6b93\n8e358c6f92a0624219fb4103277a6b93\nc68407d2f752ae71ab2bcc3443271151\n5c1f92f1c0bd459386a48a74e08b1cc6\ne97546c24cad95ee9eea323f522c6486\n268a739200930797c862eec8232fff1e\n7153026411fbb33cae685ca100c909e8\n39f202c92b0afd0429d8eecf3827c486\n958c5eac527deb6e89a6f9d60821eb9\n413ceae95ebcb6b5707cdefe012d0353\n2afb64e4868b6dcb8775a2d8ffff3881\n9ff98fa1fd750053cf853995b84c068d\n2b4d9c4722bfc075ebeb8f91be624923\n1b48826b38c2dc0630d4c74109f9e072\nd7576f0e6f9acba7d261e17fa0c462a7\n60b2e4ccf3ec715ec3abfe135b5412af\n4fc0bc3fb6438dffab1d1edf764243e3\n5420d2a9cdd0d511e76bc197b3a3ffc0\n34fba2f856e97796b0a6e87d5d5521b6\n75e24952ed996c1072dc9d42e683347\n6a2c94b2c34c6134490ad276cd2af3a4\nd5d8632e5a2a286bea46bea76c64cc3d\nad0082e4bc0b5ecd2058afcc28d23393\n16802a946bd714e819fb4103277a6b93\ncc8217e65e253ffcf51f77a6d7299806\n40ad41340725a2477251178be84deb2e\n6b9c15484369406919152a83d1ba40ea\n785f073399d19cf5b000f20a5153622c\n64298fc3b7cb8171eaf288f952624966\n6b8b6d09fcd05c1819fb4103277a6b93\ne77bdb7d3e12d6231eb51344489c49f3\n1c1c9e7676dd618e6652506d959dc71d\n1bab21890e560d54d5cb6d178687b980\n25dedf655982acf6490ad276cd2af3a4\nf03a86b27bd0a6b3d86234e915108e6a\naa03428d48a820697a138f06ba3ebae3\nbb794c54a628a3db6ff454af1e8947f3\nd0578233f05855fcf58998c8c192d0a9\n99a3484c310cd1211e8fb9cbb32d2cb3\nd2b7b34e176262513521fe8ac6222005\nedfd25e28cc7b003869c91937070800b\ncd0dccabc5966b40d42ec7e303174a87\n4d56ccf8487a0a64fbd58bd1e0b7491d\n670c2d3d20dded2bc5a208307819a3a1\n27a463aebb289175f51f77a6d7299806\n9dcda566c3265d2784868d3618d73011\n47ebb5ac05b46c18488e54fc0c1b4fef\nd21405eeeebe4085d42ec7e303174a87\nd5c3aa73e043303b7ff6ace05b36a5\n10b0d655bf4938eae1ab19b3beff6716\n1f34ff8c2ecab3b0a4ee05a5737b7178\nb0d7e13b20b190afaf1a814fb0f45a9\n639d99161524c7dd54e6ead821103617\ndde92f6460b1d7b2b4cb6dc412eb15ce\nad50c756edb20111e76bc197b3a3ffc0\nd1494e0665f06507b79de6fdd84b2221\n77147f716a20028635469b95109803c\n23fc3f07efc7ae4d19fb4103277a6b93\n91f6f0813eaf4e52707cdefe012d0353\n977457a28e32ddbec242632b2a8c3129\naa2b82f576f3df62f51f77a6d7299806\n1e6143253f8f984735d95c26c81752cf\n3edf1ef61a9802e6492d9da2668ec34c\n5dfb4f36101a933ae1f4ca4f393a5a35\n3fcea883442d7e5bc0f947750540fb22\nbc38dd123d9d50ad8b17d6d1965c2fb6\nbe025ee89a077c31a9bdc22a1e02e82\nb86657d541c2e26a4197bf8bf6f07b46\n330b4c2ab42bc715f1783a44a88d6274\n88ebe411acb90592e8952e902d0fccc8\nece1e39b8c5f851b9eea323f522c6486\n74ca743e2ba959f56623a58a6d7bc060\nc734ed1d590bba80df6cfab91d65bb91\n385521a6e023307644fad574b043beb8\n48cc2f299fb1692288c3056e77bac805\n7f14110c96ee2cf6afa167a727ddfb67\n941c99dcbf881c6939070a7367ed1554\nea7dcf537a18150cd3dad974dc098fa1\n28de11ca3a3bfc00acbc34d1ed23b6a\na186ef9f36fb95c3bd24f986301745\n704f75e32974f0f9d5316414c56bc1a8\n1893e7831f8852a2f51fa0238791f5dc\n389aab2eb6debceea5a5170d48a648c\n28001cb70c38f19cf32b6091d9628440\nd4054b29b329a700490ad276cd2af3a4\n1f036102a311fdc174813b7165294e91\n2820444f78ca0d82399f8b5570a02c59\n3629fe311f6a83eaac8336231c53cd1\ndc13119307bb03338aaae3d020f5ddf8\n4a5fa41eb0fff4496316c951e41c61a5\n7093c8218c88118b3c5f24f851caaab7\nd91c5659ba4770b3650590f03418c5e4\n3253af88a5568d6e5e0e77e9cf965949\nb72bd5538da87c0da54b9afa882a89ed\n5e1ca9adfe8c6af61f8d8332ee17945a\ne70d9645a26a4e941832ad614f693f66\n6fd5741bbf559e0ff51f77a6d7299806\n9c62e14436f27b6c457ba044c28858b1\n6ab805062d5d945d53e946fb2184f0c4\n18c25f8049fac943bb7ac4d22a68ec08\n760d38c2740eddfb8b38796afe7ee552\n126b0452fa8b16bbf7ba6397f9858441\nd799cc222f34fc0879bb09dc5605a57\n7653898ee4d8173827edb0fd78caee34\n47aa3e340eb5be093fccb8cf9f00542f\n4bf6707d8cc11c0fc631e7eec6a153bb\n2d22f3f0723011548aaae3d020f5ddf8\nd9ed9f1577b22330aeba6a38e5ba02f1\n54f4d28ee9986b329a1a0970b4896ca3\na072caf10178224ad038992c6975ea76\n8662bfcaec06798ac46037df6c915494\nca7bcac6b92b5a7d377b9297f3055210\nc57e4f64b18e9b9aa320e34dad7c78bd\n7607b1762ab9c79719fb4103277a6b93\n725fbbe72a41e6feafc1aae4dd82ec1f\n22daa2fdacd34e086c701087a194026\n7efa6d2ff959183c3002761e7a3ba3bd\nd69a4fe99afe6e0097a5b791ac4ae3c8\n394e24e46063786ef7632814cbc80bf2\n4b1ca7263ad178f8bed8cac5da4f54bb\nb602636c7967016f7305052ff007b248\na87c9d907feba5e944187aa25305d7b7\n3e4cba53909d9bc8455060ebe53aefc2\nb3e92f795bfea504492d9da2668ec34c\n218f7d1742293b9b2f56d03f2a22adfb\nb67fc33298d026033e0a119fd0be5d3f\n5a38d21dd30f52e972463ee0ec4cc614\n98d93b260a69366c490ad276cd2af3a4\n195a2ed4931241d3c3bd24f986301745\nb659c2162c4ff214684b7bc3f8a9aa55\n57a27a7ce775e13197ff8153b678d004\nbbddae0c95f3b7b636b0f2a1430e993a\n3d3e1b8e6f1cd412492d9da2668ec34c\n296cfdd6b347a8e219fb4103277a6b93\ndc5b7cbcf45e557f310af74324aae27f\n8c7bff49acf7fbc54850c7706670a44c\n6bdc37f729eef70d18706cd9c51d6358\neb8a34ab2eb9a26fe93eff560d16430\n3bf20deddacf5cc64b8710a3469971b1\ne653570cc6bcf8783f9f131076f84791\nbff0d461cd0fe835b67d6c1fd03fd403\n729ff2cedd68a1ad489b0e2838fd952f\n104ebf7f96c77fb46a0faccc2a4015d8\n7918d848b37db85ee1495fb833264cc9\nb977915b93e87cbdd724c69102d5ef2\n6c6f63434cc1f447f51f77a6d7299806\n599dfdedd707f7c8ef38727c2b4dc2e6\n38b5da2eb70009d6c045ebb62fca20c6\nccf3a20e438ecb09384512f195951058\nc7623649c8f34cab23afb61f25e1136e\n399b6e11c037f7fb5a11acddfe168a04\n16febbf5498604acfb666b203f8cdb86\n956776ee66e095df2822b5101b06e070\n8ee19157170f16dec12312ed5983ff64\na90e18bb9bdadf6a6d8b4dad28688a76\n5151ae4f84a800a189035c25f0dfeb63\na355108bb5272ff256d80c2792e1f42c\n95656a46c15d75592d1c552a8c88e58c\na9dfcb1e1ac5ae67468b43c22b6f785e\n96cc60da5c390047c242632b2a8c3129\nc26913f8e139a80baa2b654345545ea\nead000700697a012310af74324aae27f\nc5e37e895124731176e9713f57a5fcb6\n1f47bcef63468cd9b90b306cee0c8c91\n43ba3898894751d4a2be11b607ccaafd\n7462ac6e44457697d017709a3cfbb660\n7a8399fc51d83969a8b1d0fdee586dc9\naf8d3848b96bbd0d18821e110fa8400d\n54db32cdda20128ffff16555386d173d\n90992c45f7b2ee7d71a48b5339c6e0da\n2e30c286710fd73d492d9da2668ec34c\n497bd3f966eba2d76402b8f491cd92c7\nef873c6f267860cd43ac09133d4c1d60\n2575d3108a55adfaba0351028b825931\nd4b3c13ec756196f94b77d9f59f49ab0\n884eb62c72c1ee75e6fe3612af521500\n7d96b0823233ebe7b49b261a212e60b5\n154fd969a077a39772dc9d42e683347\n621ebcbaafeb91a78616812464c86290\nf0c1fe7cfedf97e9b91b871e750ca615\n91aa75800ef385e9f51fa0238791f5dc\n2e0a396cc21ed4e3781e3b226aea8d4\nd08ea9c1e5b9c2687bcae7a654cc37\nccec9e173fb41a3323eb3ad3d378722a\na7941c2ffe089884fff16555386d173d\n45722fed3a3035fc59f8e31ca87c470e\n16532364b5876d3881a172d69c52a28a\na62114bf11affdb1139408582c8ed98\n211d17b0424b10c539d3717288022c20\n77986a9d5546899819fb4103277a6b93\n6373c7a17a41666219fb4103277a6b93\n1797eec0a23dcb1dff29be004a6f7c0a\na296a3504163b053e6fe3612af521500\n5c6cad6a12d7cff3bb6e988dd2500ba5\ne296f2e967aad03a55f46d55537192b6\n7f1edef2e2fe5aee33ed950c745c5ef8\n798598965a343fc9b0957d845ac33749\n40addb4af618318dad5067eac75a07f7\n36047e4ed31420904738a251b334366e\na01e8ade2a92a0eb35836c728d324152\n11c16f6a5fbedf4213c3458a0fe5598\n77b57f3eebab844707cdefe012d0353\nefe6257c1073e003c862eec8232fff1e\nc527f1e7ae2c7b8a4f7482420c2e91df\n7311255cee3e412771a782a4379556c7\ne731ffc67b03d0555f46d55537192b6\n592296965078028282db9fca4b68095\n174928ae6f9aaf3cb1b6b0c5ddacb607\n26ebcfb2ebd8345f14b86d5282eb8301\nc9e9466f782d1b4f7fdd70657322b4ac\nd1cc46478cde981b9a980acf1a5058aa\n47a381f4ed3d30614187eeeb0dea4986\n91dbfe4dac593d3e35836c728d324152\n8d44182e9916d617938da3ea2c9e0e4f\n7b356141695f75e271a782a4379556c7\n658138c87c9184f279368d1198f406e7\n142060f848466cad97ef9a13efb5e3f7\n758f982c1aa6f5edd6eefa796d2f261c\n8bcba9172db65219ad5067eac75a07f7\n575beb82bd20f61fad5067eac75a07f7\n2bbafd62a8c5a2d1520ac90ee81efb48\n599200313a698b6cad5067eac75a07f7\n2fd962562b9f0370339797c21e8801b1\n3ea2fc7c32abc9f758df8eeaf3dad1c\n6dbfbee18b2e149c71a782a4379556c7\n6e029f7d5901aa2e2e4e89f168578552\ne9faaa484cb11948cc89f898f3cf6588\n180c5218bb39d31f5510d59f3ab1ed64\n86745eb914ded54c4ddda47ee90d6a21\n48ff9804a1ae69f4ad5067eac75a07f7\n16570d98a47c9907bd1aeba6ff85928a\n33e18d453f4a8c90ab610b0c94236463\n1c9048855223f744fb85ea6fd426098\n3c079f540fafa7e13b3db95ce254f64d\n7543553927036b0352b7768d51b257d9\ncad4cd1fc0c0952e71a782a4379556c7\n58595b39bcad6b2fad5067eac75a07f7\na0796a2532fcb95fb1b6b0c5ddacb607\n4517f2aee2482e904da62592caaeb495\n17fd058dc352b9d11191025061735ea3\nc9ad9501c31fae5c71a782a4379556c7\n78625405f6c44bdccd67f05ece4a06eb\n40afcc31186c0b452d19175e7d19b7cb\nb909b35804e9751daece045e8bdac80f\na5f3c1314c027654f12d7184a2ad3430\na82406382a5d563099e8bf807e902261\n94ffc8179ae6bf8ddcfd6ca2b952d624\nb5a3017da6739ea0c46152dd624f1d49\n70500798fb5d593be76bc197b3a3ffc0\nd2beb9795e88d3dadcfd6ca2b952d624\n3c991b31710144c5923e4a84d4dce694\nd0891a7d205203a9beedb4c8fd29e2d1\ne0b849b1545d35dab04cb542e2c50eb4\n2fa04d6a788be63f32db3066d0100ee4\n5783c7479b89f76b0783d9ebb200d10\n6c0bc03812d3209fcffd61677456447e\n42fc350dd15b5ee07bcb070cc655f13a\n893d3871e46b18f79b11da89c22111dd\n57dbdc49bd549a508d1542df8403619f\n40fab70cda2e2dc7beedb4c8fd29e2d1\n4d9a737a9ffa6277589aae130c1f06fb\nedb5fe83efeaf086fb0eb7e753c06942\n391005d8f1291cb71bb088904f7cb154\nbc6646a52843dd63474659fc572ff56b\n60052d2cbcb9f8e725c578fb351f3549\n627b977736bac8b0a1f97bf2d7a10a96\n98bab29db492767bc3bd24f986301745\nca43d45909245ceb4ca2c1f43556033c\n8010b1ce4e4b1a472a82acb89c31cb53\ne7c8486921138d5c7ff6ace05b36a5\n8e3bfa092e83c28d55f46d55537192b6\n978936fc521780702c5b6d66521f20aa\ne285d68fe197f968492d9da2668ec34c\n91d47945645a1039eaf14273fa406ffc\naf90af72a4808ea767c8e42cd3ac65ef\n8fbcd8920abcdcc519fb4103277a6b93\n8cd6a33e6ba794419cd431573238602d\nc8bab1768e4af6ad5e89486951545417\n64e65f881d846d9235836c728d324152\n24929a5fbdc7682d7fbc060fd555478\nea21cba1d83526f6deab8d9bfbc24756\ncd224ca2a8aa04b11362d127df6d94eb\nc3b49ab37876c7f219fb4103277a6b93\ncdb0bd21fd5d075bbd1f60c111786ed\n84611112c9300d6b19fb4103277a6b93\ne57509d06a49646c490ad276cd2af3a4\n93fcd3809bc2b9e955f46d55537192b6\nd330377051e6180319fb4103277a6b93\n6d705b609f98e559173b9f28a2caa84d\n1ce87c214e0be0e87dd6aeb162858c12\n5237a2e80c68f90abf7421909bb3502\nd70877569d163235aece045e8bdac80f\neef44075cd1781f1b0a6e87d5d5521b6\n6777718e193b45c4f2b931201029bc76\na44b3e23fa01c205c3bd24f986301745\ned6dcbd0d670784537a0eda928b574d2\n27a90972dfe64be5c3bd24f986301745\na98d6ce7eca8cf272d7d7823aa90da0f\n38b341526f21cc9f6e1c16d8c5e127\n2f7a2d27e58224e689035c25f0dfeb63\n54af9e8e80a0030c42c28aee4f9d8a89\n1c431bd426e880e24719088c8e42c6ab\ne4f9062ec3d2c6247d7b76078f434820\n8ed0ac779ec4bbc9beedb4c8fd29e2d1\n7303502cf80ac41481f172e682de585c\n6110ca3d6213d128c96f5ad2252495c6\n9ae98c4b9fc07bc1beedb4c8fd29e2d1\nc12ab3b5a8d40626c6027d1f057f82f5\ne9383126d043156fc1302d82d108316\n954f39bdb27c54cbeedb4c8fd29e2d1\n339f5b3610ea836682f29b648e624c33\n71a26c00d3a4bf834397d3416be8cfe5\n4707256a1f8fb862a8bcbe9721909844\n67c246e981ece9aa9f0f464e9e8e09b4\n45970e6048cadb39691e5fa75e122ce\ne157aa6411d02cb16f1e631ee7d027b9\n9a70b1d07f3027719fb4103277a6b93\n5d2c769d1afa6e3742f75bc7df727ae\n97e2ca564decce0b575f9747ff6fb5e8\necf301eedfbb508dbeedb4c8fd29e2d1\n1d53304accfb6fb3c3bd24f986301745\n788c9d078cc971bf91a6d2f5a0fae0\n253b7cf1ca03674bf4b6538438a0b930\n2e25c45a4456df3f36270e8efbeb40ec\n7634b09c8ce172ba71a782a4379556c7\n17d336aa38bb77fab1b6b0c5ddacb607\n42756ba88f851b6e3c8d0fdfb1cc2535\nb7a0dda52974fa642250bf58700b4d8f\n6a56d0f447d477e12de0bc4fc4d02dd6\n4d3bdfe96a1d334d3c329e0c5f819d20\na9d890e4b6b426dd358ffaf8d4d252a\n4e46ec6d0826e4525228d12f1858463\n9ce40bd942c332644ee9d52ff0ec4dcc\na86969194537bd5a3a602af85160c9b5\n14624a2cc43aac50e3a031805ace4a99\na8ff038540e5ef35daa3ef8c2a95fdb6\ne2121844a25d93b2c3bd24f986301745\n6b58fd8948d4d34851581925776a606b\n915855afcc5f8918ab27cc93fdc68c94\n133d7c9a1f79b01ad0176f9a144100cd\n166cb38606acc1834265eb8d6103818\n6a61c9e8ade75fbbc3bd24f986301745\n3a1f1de9d4693576938da3ea2c9e0e4f\nd722d42dd739e2a35e0bc0e32d71e297\n5b31b07efaee09fde63a9e8397b31118\nb320afa9ad7573401bb64c55dcda87d4\nc35a4a82cac49ecc55f46d55537192b6\nb1cb375e7f3fe171c242632b2a8c3129\n6dc0048e4326feaaa6c03a53cf0a14c9\nc2f870eebd0ac7494719088c8e42c6ab\nb73a89c916a0237e90faae3c2240cd5a\need2fa156d662c79b26e384cea2f274e\n3dab0646af0e6945beedb4c8fd29e2d1\n12a73c63681d65587a0f32fa630f6a0e\nc0eda75ff5b23100a6536c847a708e24\n2bf3e370da5d2f73ed403132b02528bd\nd3fd6d332e6e8bccd5382f3f8f33a9f4\nea45019340b754c155f46d55537192b6\n1c111a837580fda6c3bd24f986301745\n2ca0370bb8ba5ad0e46a4046edfd3265\n5f1ccf0974b862c6f0d0eca70b77de34\nc0b4b99b37cfed365143f38859a6efa4\n6e77d23b324ddbd65661fcc99c72bf48\n6f87c833355679ef36b0f2a1430e993a\n591a2b1a6c44e5ae535089b1cfcbf17\n1d332d00746e2dc0f8fe975c2cbdb85c\n4bff004a90877ea319fb4103277a6b93\neb62d577d4de8bcbdda7f1d27cdf247c\n1f8205bc25d4d5f21771ee930e861b13\nf0305c34a57664ba32388c13cc4a0ba3\n6eddf598e4199497d684faddec3c0090\n13c8f06bf87c074f9b75b6346baf0c12\ndd543a069376134aba5342d638d0c267\n82f1ed2a66bf8b49f08a713d0c983d8d\n565225390d303601c0f947750540fb22\nd5978095ef90e63375dc74e2f2f50364\neece94f60e91c3d819fb4103277a6b93\nc93aa39b76980ff655f46d55537192b6\n2a4f92a70be4e2159c0b027ae5b223d6\n8f3642beb6eb088d37251258858a7a58\n580cac53a1f9a799446ad0d387c02a3\n8f9f4ac0dd2734d77ff6ace05b36a5\n70f90f5959de7752c0f947750540fb22\n6c763c259b83b9bcbeedb4c8fd29e2d1\n227308a94bc7b231e5490ac94fb8e485\n56597cf3ace4916743ac09133d4c1d60\n4fe5fa039fceaa1823eb3ad3d378722a\nba68b45f1cc9038abeedb4c8fd29e2d1\ne1f9b43eda445dc8c862eec8232fff1e\na13c36acbc45184de76bc197b3a3ffc0\nbfa36cca677c512357f3bb43ed044708\ne4f206e9aee482a15510d59f3ab1ed64\n291e43df05fba9b53d36088e1ac945e3\n561cd495a38e22dfddbe8a6b8178038f\nd485cc87ba99e2caffc6e457221b9271\n32f116e50ba1dcde7ff6ace05b36a5\nb0b0df035ab58b92822a33e080d0e71c\nad14b4bde4a656dd53b1634376cbfb93\ne15a28c0743ded35673b9aac59c306c4\n21fe96bc7ca206cf4ce89debb609dbc8\n2e13d82c2dd5d0714251f7ff551cfb5e\n4b687008902de4543e3a599e79b43485\n9052a28510a4240d49d36f5b69384ad6\n7d0e1c7c5ef289bf94d582a4a37a8dbb\n2b40fbee96b93a5eae25f6fe802a8997\n4b3d009920bd7ff51f5bdd219902caa1\n525d48d65079b2003f222a37719e9945\n88670667d9fcd992eadc9f074ecd1df1\nd6f8a3bdcd20146929e4b5aa807bb4e7\n7f808e545bb01ab7ac91966b4f1152b0\n34b7b563f09f3e937848af3cb674ead1\n25c0559c051e57cc7fe20aad99c84084\n9f75d067359e6db4f9f8d2db335100b\n8fd9d529453e8d56c09af5354c5cbf4e\n36770c30c74a32e16dbc8927361b2733\n11cd9cbf28d3918f1b17743c18fb63dc\n630de8111b5299f5f51f77a6d7299806\n38ad5333308ec5b5f4b6538438a0b930\nc53b11ceba592177564c88c75bda3a02\n7a0280b9d2fbc2244cbbac005f3700ba\n11e12804b2712d08bee8ec52a122c491\n1952d19986c5f122fcf7c0d4b65182c4\n8d5dafee7c2e89aa4cbf9a02e3342127\n82109c884a0e195714038d588fd1342f\n1b1f24767e5555d8c3bd24f986301745\n48054442012cf1989eea323f522c6486\n306cab12f4dc8a47f51f77a6d7299806\n186f6c911a4255bc1b17743c18fb63dc\n92dccb2a3e6445d5c790d7efcdfb5239\n9e55b1135ddf93211c8d18742f91c015\n525b2042bd4547fd7ef440dbce8c5be5\n9a762e9ca86ce96da5e3e028709e0474\n4c51b04b1b32ddcc4ef96d1bb8be503c\n70f9acbbc2881b7657629428a2666327\n1315d61d095210c05510d59f3ab1ed64\nd5c3542c080d61462c45f75322191dd7\nb8efc08bc8eab52a330a170e9ceed373\n712d2c844d61aa9cefead98a255f706f\n87504deae620d0dbf4b6538438a0b930\na9fcd41e05a12a0d7e1dc03b595bd36c\nb130260b9f5d05bb5510d59f3ab1ed64\n6c081d6351e07db937251258858a7a58\n87c752e8280cfa2316a2500eff5eef3a\n2b68cd4ffe443506abb564bb0657e0d6\n79d5aff74dbfa0c2307557ffe40d48d7\n1fd1d459e79ad6c1c3bd24f986301745\nb2cee79b97104212aab142a21aede3bf\nd07b44f271ded6a9c211251dafe812c1\nb789ef3e2e28aa0c3b08200028f31a6a\n8ffcdc51a930bc408964093366ba01ab\ncaee24359d445f4fac509329c62279e6\n8f0a115dc4c1c183f16363d52e74cddf\n39b90508935f0118dde86ae42c792b26\n5533c35223061f231ff2429be93a82ac\n1a5febd8d65b97e4f4b6538438a0b930\n9b3433ca11cd09bae7c7920f6a65a54d\n414f3eb4c4de757cdc97baf002c8189d\n8c3c81a802ecdc45609fb05dbd8681bd\n81148566eef063bf6b1cb83d86c19bfc\nc7feff682976809482db9fca4b68095\nbd2949103a92dd56d3dad974dc098fa1\nd6410c33772aa719dcafa176d8811639\n6d3828602ec4b79232a1f4cd459cdfdd\n841082ec0a936a16a4bec68446bb57f4\n594ca5d155b0bdc2c3bd24f986301745\n3281ed5a4af3494f67990f5b8451542b\nb35bba0caa2faa642eaa34003788a9a2\n63a2d10d7c77424ad214ef3f65f73d74\n6bb2a335613e8e2ce26ba91c6bf4ff82\n26e020b7c9be193782db9fca4b68095\n602526e4a9de3f2c822a33e080d0e71c\n76c01c98aba64318fafec1d6d9ed06d\nb59753a2c0751e7f37251258858a7a58\n416af739e6ae8b2ca9e3e4940ed610e4\n136f3b0a4893cadf4f1b88c70d074e4a\n567ca6e5eebb09f87d0efae8dc996b9e\n121ae3ce921a1e43ef40aa033482abea\naec39c7f691c2ad15a824ea0c4d9b625\n3de638f1ace536c41b17743c18fb63dc\n177c1102dd46badce958df2e8332e31c\n8a12ba383cbda72b91829b477862aff6\ne4a9b9db82ff871a1b17743c18fb63dc\nf09cdde03794151a17be1b91fdcd9df\n20e65777d2ce327035ae67400a94a6fe\n18c8f6ded2f14010746cec00e236149d\naf53fe05e692a7ea2e09703471e30fff\nd1457e572ef95ddbd2096b2fa6f98cc7\n9a2529a1b49282cd6eeb02236344250\nbbe30ffa9234cb3af268f6180933aa3\n43b3d26626b7ac54b35c92fbf601983\nc7fb18d9ee7dc33318a6353ea60f11b6\ndd8693cd2fbb5a0c7d0efae8dc996b9e\nd60a5ae4802e7338951c1fffab4f5807\n2ba4638aa672a0c419fb4103277a6b93\nb6758a9b899d540919fb4103277a6b93\ndace4e7f0ec285abcaa22a10624245b6\n10f1b51f2207766ff11c3739edd52fa3\nc27e9191723f352d91829b477862aff6\n9a314f79b18ba7914187eeeb0dea4986\n57f881c06c1080ac91829b477862aff6\n5b4a3107afc425be60ddc468fe733ed1\ne705fde0d14090d05f2733e561547b29\nd5402158d5fb9fa8c283ca2c9df7372d\n6a754d9c379ff246fbb20af1c3b4b0e9\n788a2ae90158f42af4b6538438a0b930\n5325e56ec7dcfdfb83130614d8020b3\n5b1000b7bc6e0d3b7e67c36deaaa271e\n603e2237e14611f9d4091fbf7990ddf0\n4a11c4ed20638d74c3bd24f986301745\n5a3e5f0fff5a7220b4ca2ef8c032d07d\n8f27f3da43406402bd5d9cd72de2e1b3\n138c29cb642dcd6352620f29156438e2\n2692e57df4705d4d10faac7a8c2754de\n904ad336345205dce76bc197b3a3ffc0\n3439020f6fd015c02d51eba7952634c5\ne8dedc79c201f076973f95b50a1641d3\n2b3b491b70535af2f7f596f1d05d059\n50bf2749c1963d319d84faf1493a1f98\n4de6d195f07edbe5cd18e512cbf0ebf8\ncb374c698a5339f3d6fab6a6a552905a\nd36f8b6fbc03cb3630aec64313e58bdc\nc1ba1f5fa5781abe276333179717351a\ndf2d80be5033d200e2af4d98190aea8\n860995856455e258fc0004571aec2fa2\n60c580efa09c28a91ceb062da003617b\n45363f30a1e16c215963245f0923337f\n456601c88eae2449f51fa0238791f5dc\n4afbcdeba648df2e19fb4103277a6b93\nd1e9a83ee99b48a49856fa70a578baeb\n8345588ba41cd2a87e4bbc5bb7fd2afa\ne004afd245bd06337e2a6b10ca75153d\n4f35874fc0301d015cd4f7d5b0608a\n4ef54a72580df356d5617443b3fe2227\na131dabb9fddd3c97a845b3267216856\n38cc604066d18d1cae685ca100c909e8\n3af5b1ef3e742dedf4b6538438a0b930\n28e64eefcada205fddf120185fc0b2a0\n85db937f27544f5f9f23b3819daf3902\n35dc5a90392dbc1563f26b71f9dca732\n212476fd8bf012b1e3ecbdfbb6709c74\nc7b8f5ba396c07331eb51344489c49f3\n44302defc423e34a8afd316e82119b42\n99ff33b261920e8a55f9913e822d5318\na16a6d438d57667bd3299846d5c00f08\n19d04a424a82894e641aac62064f7645\nad62637a77b172af3542091189dc62b5\n41c538c37e2ade9047f446d318aa6c9e\na5f1b90f85d875f13afadfff198a630\n2a3297e263d9931b814465edb1048711\n38d5b6ad3077e8b1caa22a10624245b6\ne94dcd39a8e438851b17743c18fb63dc\n34309cdc141101e42027cee422df2aa3\n71d50d287357e7e719fb4103277a6b93\na3a4cda9949c347ddb039d8689a74349\nd45385e0a60f71e1427fcd6e404d0cf5\n37f684f64af84541609fb05dbd8681bd\n81808dc89c4461bd9a3d6682397a3947\n4fb805fd299207e7848af3cb674ead1\n316021f1937b32c8e3e78c911e081c08\n146a019a7269fabc45656b6a28cfe2cf\n5026668bb2bcedebccfcde790fc2f661\nac4761dada79926919bebd2312571a3\ndbb5de72508efbbbcad4c3cef7575bef\ncde57c6c75d1453a372bb05ca908b13\nc503356361873b89730cb37c9a5f63b\nf0b827eed9f044bdcdcd8e1ae308f03a\n873d8928f314d95045613f5c2df1029a\n4dc3e9e293450817d3dad974dc098fa1\naa6b5cad531b9ef982db9fca4b68095\n3b384a4919d180a666ef9dd2f3ef27d3\n44bc2b9ceba25f8555f46d55537192b6\n16bb609914396bd0fa7b9a6c80e4e324\nccf0059e0697982ecaa22a10624245b6\necbb5a30557f659b2c528d33bca1ac2\nc6cc25ee47d08674842c47c8032438a1\n52837fa3e281763aed88854fc3e3ce05\n39f30c279e085ae41683a1f2bb7ab319\n1d8536c4e1b1b8eec5ae767f471fad27\n2ff9f572b715e86b1cfb6a573ef73942\n4c8992b5868f945c8164355cfcd0b549\nee00ed62953f4bd280afdc8bd41edec3\nbe00704e7366ec2ceb1488c2b7631b3e\nba34c92a41a9ac9f20d3c05c08e26f\nad75eb223ce16ec5b6dbeff8ebe9459\nbd75fa23435df54b8430b7446f9e1252\n77c74742e9504005a7d0cc9b15400f65\nc87012fece9848de87f79701ecbb26ac\naeb33188a1d1f0aaeb1b6e7f54488efd\n95a7581a491d3706996336ab975e6575\nb99bad700049d8f7cbe3d3c1931d32af\n4132539ff314f0654d1fe7f29df13cf6\n919b2b8877c90f6885718c281d7fdf61\n72659c0df8a3d5f77ee217c21e683487\nf01ca36bab1a7a1d9e9583a661702ed4\nd9994cf6d5d444379dbfd5cfd194350d\ne630732939f6188957f5e6dcbb0b7930\n14786ae920496ca7197c43c7dc584772\n1c70e72ac0eb77816349f6b5431fb3d1\na18c4bd95d90f37091829b477862aff6\n25bff1399600790bc3bd24f986301745\nae1a7b7c3ec72178b848d7d3af8eb610\nd0346744d67b08b099e8bf807e902261\naad4591952dd151189485cd87f37f89f\nc21637acf98dd08649bab4be538c970f\n1b6ea0e8c6785638ad8d9da81848733\n1f2fe0bf66eba0b03968da786c4da00c\n3b72f2c31c5aac6ab3421b3649fb16c1\n3ee0a3bc5e7af23d1bb088904f7cb154\n3e645e9f5703d14e51d3c864cc68e22e\n3cb17903afe49e6962e682c9809bff14\n459a13812561557e26217a9a857cd404\n4180532fda31d19b37251258858a7a58\naf65bb882c818f9861dcc050524e1d17\nce96139ae5a4dbfa55f46d55537192b6\n155a08c8e150e7008c4f202fffc87396\n70e58cec417d5e1ec283ca2c9df7372d\n758ab4ddc8fde77cb2b755acb296d925\n6afba6bbc7ca32bd339797c21e8801b1\n54b4555dacd9fc16e1eb1991fb37eb9b\ne1b3412d67d2c18c59f8e31ca87c470e\na6cadf8f6d6e5d26f12d7184a2ad3430\n10f0753ae756fe489c0c9824ccd078be\n63cde6b5e85cae2bf4b6538438a0b930\n9b77e481163e91214038d588fd1342f\n224766e5a022785af51fa0238791f5dc\n6f052c8606dd3ac3de03ab2a27ba7531\n56eeebd64c7821dd641aac62064f7645\neddd80bdb6f6c8b48bfc6c6704f4dffd\nc06f1cb96170e548b2c2cd006d206129\n4b4b745af2c816c28ffa76d198ce7f6c\nb074b6460f46170660edf8bc2f5c8881\n3a800ccb5e7de7811705bfd3afcd10e\ndb20d1cc56356476a58a1de596e6d773\ne801542eb03f6e3b96d5fa1ee6ada8d1\n79d992df7306436da1ed581c544d9fd9\n35ae6545bdefd0ae7ee217c21e683487\n1ceaa8bd231d922cc3bd24f986301745\n84c52a5ac0f8d1d060ddc468fe733ed1\n88789f9c90fd644550c5faea6c3af4f8\nb1835f603e1477f61b50574ebd76a45b\n2519505d0cee2edff08984f51debc075\n3f198d5bb97b930c87e847ff3a8836f1\n94be8cf5e1538257f51fa0238791f5dc\n49ce1344c3c8a652f9883d2fd957d60f\nb17bfa9db55c2d2e4702663c3b3faf8f\nc44792206360e4e4be1b0e1de3e987b3\nb10228c0b83a6d436b8cc29ba15869e8\n565c8256aa446f152685733c782593df\nbcceb065b8c433b99a87002a4eeaf610\n4de9fa90bcbd6beec3bd24f986301745\n1e588358e4681e1ac3bd24f986301745\n97f5d86912ce0f872caaf8842dbb8ac2\nec8a05151bdfd44779368d1198f406e7\ncf24aa524055dd5ceebb0db1929cfe93\n1e3dc37e2cc335441326da246d3ca9c5\nce1c3321de30433b16ec4c6284dcbcbe\n56e46d8bbb70b17491829b477862aff6\n62e723ad4ee0ba9d65579260f47a2d77\n224ccf4c3cfd4cc1b9a0f5d18f1ce54c\nba444152722b67444b8710a3469971b1\nd8fa26d89a3ec264ee1dfc331dd3e94\n713c28954944221f618af5c2f6d28c1e\ncf3270a5af169626efa153ac02df4ca3\nb588c0169924f8e32d6a698a89d341f2\nc8ba87c9581f9122f51f77a6d7299806\n75a824a5acd71051bb29ecbc4d013bd1\n599f4550ef24f59d19fb4103277a6b93\n8a09f540491889f519fb4103277a6b93\n1f2c84d387bd1af9609fb05dbd8681bd\n7364fd26628b7f6a3e0881f7de9a6e52\neff2f84104e78435d6f4cef762589739\na06fa6a604ddc974ccd77b10347fd7d3\ncc445d016f3a487d84cc5b3c1e5e75d5\na333abca08fceb434eec4d2d414b38e0\n9e42bbdbfe36680391e4d6c585a697a\n37726dbb4357739bded526a7be77b30e\n82a9838fc655d7f62e6da3d97725a350\n2927b65bc7b9561bf51f77a6d7299806\nddb760d364ee3c5aa7257db74b7b377\n1241ec2dc5e59b0ec3bd24f986301745\ndccb87aacbcb40a4f1783a44a88d6274\n8c9782f2dcd99d5255f46d55537192b6\n5d82e3924ace17d814038d588fd1342f\n3fdd61db58e5856c91c74eb018d3bfd5\nc2a33328b7df204e1754bd6e58ab2748\n6ebd63203c1ba404f51f77a6d7299806\n98416e9f15b3f80fe76bc197b3a3ffc0\n995b7cc4da9f0371eadc9f074ecd1df1\n65f27b374b83dff560ddc468fe733ed1\n83a2a5dfe03a2be1b2b755acb296d925\neb54a7a886da95f69223fc014b68160f\n3822df9afd06c2d875a82b88fe6e733f\ne588e603f5d0e366490ad276cd2af3a4\n651706776926937314b86d5282eb8301\n21227197948fd2857c2f94a943a8669b\nb1bf0b775e6fc085391e4d6c585a697a\ndcee2fa2aa02fa7c4a05fa063da00291\n913c38e7faa82c984a62fa5dd236505b\n5b685a0318bcf5ff4ced24553b268ec\n5bccf52849ce93b5f4d0ace72e0fac85\n48afc56a733cf916660094e03bb531dd\n224ec626233b7a0c14038d588fd1342f\ne563bbcb07d70dcc3321831d2245cf06\na4e5a85d21a6b36ba60a29091f2ab01f\n937fba1b3389783684b7bc3f8a9aa55\n1377448893b499a5a8e4e5c9426fb9cb\n65164df6ae3dd848a1d7c136d0e341\ncb214fef007a2a46bed1bd9593e318c\n1fe846f8b74b5fc66b510e987fd42f59\n99d329e5aee0fd21c8c7b57a94dbb2e\n9614faa3e0472656b988865f09908beb\n9c17ba009a1f68a5f31d4c4da1121d06\n45bd3bed8ef1315ed42ec7e303174a87\n308a43b7ad3f8c2bdf8a6816927a07f4\n72ac0fd17bbe76375af983a27c524ad0\n189f519f6cb7b8c516fdce62f5c06e29\n28365bca55784894e99f3a1de720cdd\n5e0340e08510cfc52f84cb7932f866fd\n307bc4f0db5cb0452f0ebd444c10bd0c\n5407f938370ffd34390dcdc075aa60c5\n50fdd5311091e5d742d09291b1705b96\n92973023278f568a4594f83fd12bcf18\n415d7746f792eb1de0445fc6d980dd5c\n86a7bbaceee66eb36b63d78a2e71a26\n3339d615f108948876e9713f57a5fcb6\n1674e0a5bde2dd67f12d7184a2ad3430\ne64f3681d7c76bb743638dabe1eb5336\n34ec5656afb6860af3c9c1464e55d580\nb68a370aadfe0b4d4f3443b22038d340\n29de23533f0a9c31b79de6fdd84b2221\nd3a8019633567d71b20716e5484f7807\n2cafcc8c772d4860c2d043ecbc42284c\na8d59c4b6577b9eb37a0eda928b574d2\n719c8fe47dc6d3d9b6b5a7b8c31557c\ne98dcd0334fa639fef9f898cda0ff409\n5aef22f5441b495d19fb4103277a6b93\na54eeb7ca4dfe0bea71c812e027f94d9\n647678ff9809303260eb699207aa149d\n89e73205e8d18a8c99e8bf807e902261\n7c07ffc0147bef7df3c9c1464e55d580\n4c18b279e078ebb91a8781c24b79ae57\n471f9b50c57b07056abfacdc918044f4\n11a1bb35960f02d83dc1643807625350\n51149acaab6049d05938488ff499d96a\n9c510bfa2304c78480cd53d4e54e1fe\ndc5a136f23bd3f31c710d14956729baa\nb00de96484b0275a5cca18918d24f6cd\nece7f04700c5767a4cbf9a02e3342127\n2e8a4184f4067657f2cf6a9bef44d625\n184c944daf00dc9919fb4103277a6b93\nb814241f84521f797ea323bc74055b8\n392b7f2c8b72ba54d05b3855d81c2ed0\n5fbbdc1e83a45d258d1c65d617ea0b5e\n5c5f434f9ea8bf777bcb070cc655f13a\n53bc49f45214d8d6ea73a64ae4344bc3\ndcf246280361e20d1bf2b66b52bf6885\n56e00d6764a7205fa9fe1734a6086750\n61b6b273190637e5788a7b7b4713dbc6\n5dca7ed62a72a5fe81a172d69c52a28a\n53b815fbd98e6ed237be8761f2d10359\n710f2f56520b0bdd9b11da89c22111dd\n67d11f49bb73a66535836c728d324152\n6acba1cf4d21321a9ac279f421086f50\n2b2d827267baf5e75510d59f3ab1ed64\n84c9082a8cbd03e5e76bc197b3a3ffc0\nd673e7a605249edf7c1af3afc3f87aef\nc71fa66202239b58d6de1645a30c4052\nae3f65ef020c8170cd80f9971acfba\n4aab0e569f1dc3bc8d7e9f13fd8f661d\ncf10ac71297ae632f44880b8ee951142\ndf03ded86df8fbd2ebd284456950c944\n1311cade594e030fe497c7dfb96f4c60\n62bba707a00a2fd0c271edf49b97f472\n24c854eb3f4bdba21b17743c18fb63dc\ndb9458fd1459982347b1b3e368e511da\n197393cdb4c836a713c18ca5acf69765\n9feefc5eb43adb4fb7db0056a767efc7\n4c2103f096818e16ca368f1abf470106\n98791e9d594a7bcd41f7bb21ee1aab57\n72f98e4a45f971ffaa0fb4126a41efc4\n1f0c62f30be6f19aa6fc75a75fb8d65e\n58a9e0e6fc43ccc5db32b682f6360550\n6b4800452f4655e7d34b068b4d9c2c60\n36f771a41910dd89fb713eaada66481d\n5d46bcc77b2815fca71c812e027f94d9\n187f32df6f393d18490ad276cd2af3a4\n103ad97126bc54f4fc5e9e325e1bd5b8\n7dd4c0baac6c76703002761e7a3ba3bd\n76f4352b12cebc55685756818b5a05e\n1ee2b2bc538245a85de04aad18bd94c3\n7eac5c3e4a8e4e086e5b9257c4084ca2\n7b5544ecc31bc609a8e4e5c9426fb9cb\n6bf4bc4a845bf639ce65ba7fab42a621\n9fc50a184e6d86a9b3fdb1a7c9a60207\nc359be2db828da29cfcb2cdfd88e07cb\n826b18241c9c2fa83eeddbccbf885e99\n4e15b52579903323f51f77a6d7299806\nbca062605b3f79b9a75c3b311265cd31\n3b57aa434803b0ec189c2d5c093a2652\n1bc8eb160194017cde26427f80dbcfad\n41adf7a8d492a41ff12d7184a2ad3430\n46a07944ca646df01ff8bce0e3352d0c\nafea61dd761b70a3fc0035da39bd5e1\n901eb5d8bab4bbe48fe31aea3727611\nb0d7c6d51712d1fbe76bc197b3a3ffc0\n14bbf802bf00121267d783b4714d4324\n972ff7998554988ae6c5cd45aa112726\nb1a5b2caa2b7dc95f51f77a6d7299806\ndf74203c0a1585f9a29294366c3334b2\n1adc25c3c29e98c454683b99ac4500e8\n7822d47b9ce66e5591a1a434bc319a99\n35803ad1072c4221e8b2b8dc0c816caf\na53650752c2d73ce83eca490ad2084\n5e0e607f01cdf9ed93f709c6d6d99cb9\n105b9a03ddfaf5c5e7828dbf1991f6a4\n675c225ef7bf4b4b3db912a90d289dfc\na49d69c86f512f5d28783a5eb7743d5f\n8b8de5b5ce7fc61def9f898cda0ff409\nd5deca423faade89bb814dc1a3fcda86\n9ce692996699529b8430b7446f9e1252\nbbae4abbff206a2a14038d588fd1342f\n4506f150e4f43633fab6e40cce6926d7\n4acb95a2fc33c3dd19fb4103277a6b93\n3b569be398a7e56eb4d174e5c61f344\n68c52fa67028fceb47637d2621d965b1\n396a32fab409303c811237b87ea8b154\n6e16dc2baf237aeb5b87cb2d9a815c73\nf073fc78c930ca06f777b6b1bae343f6\n114a39da3b4bf118d42ec7e303174a87\nb18fcb1483fc0f4c8ea6bd444282b41b\nd22e15286d0d99ec52d2de7b04447df3\n10e5ffa28c252aceea46bea76c64cc3d\n4a9ded4f31e089129cd1fe76686a65\n5554b586330150ab6d5ac6b606b81bbd\n611354b629b71f72d5b708f09789d978\n6afec996cdd847031638d1ffbbaa0c53\n7f5c20bafb143b92492d9da2668ec34c\n905edb931ab4be1e27356ce25a15eb6d\nc7358b3aed4160cb21bc3cf138f79e\nbcac0b4a07a61efed498ea2919be2102\n453e290f4425e0604671fddd657dec0a\n1b2dc847e12c32d4a430f20b4b0a337c\n3f21494d8a34df8481a172d69c52a28a\n304ff1fce32b5bdfadccd0ac21fd007a\n1855a4b70958b3354b8710a3469971b1\nd4de4deff5410e2be499c77acfcee9f4\n587f53986db55d45738e43095496b061\nd14dfaade3e105306ebc5c7b8e36e351\nedc14df2b7e3bed1b15370175a9d2c81\nb0890c9a4332f7a07e28af1b4b42317e\n2bc37c326782ecfb9bbc8ad5ece3c1b\n5826f35dcc58f9206025dd3b37729bd3\n6137e19255f71a0a26700e14156d231c\n5fcf8f8ae6c226b03002761e7a3ba3bd\n3b36f062f56e320674b9a1885f058618\n52c0950979a8572ad42ec7e303174a87\n4b82103c9ee9ae4f98e0d1738edd4f19\n8647063ec039c4eff51f77a6d7299806\n3bcd7dc964487b1ae6c5cd45aa112726\n33e0b076b1dfd411654495ddff111d98\n90a1748069ca92df9667b9ba9d06c778\nb9943f2962f4ac9840ef1c8b63a628f9\ncd4e8748514e028642d23b95defe1ce5\n6176df18ef54e0a3f12d7184a2ad3430\na18a9e2ea68eeacd36b0f2a1430e993a\ndd0c4018a8b310edafaeb6535dda1ed\nb9089b8cf70c95e1f4b6538438a0b930\ndf2244d33847f7cc4802d94e40825ea\n18cea57b061a65e5a346e6ee1c343985\n5ba371858d595d4ef645e44148cef56\nb7ff6501981195caf771fa2e8f483ca5\n9330bd524773fa17915e97a8e8ae6c48\n5d4eec616095ed87dbe6f297e0ec0d5e\n9859cddbb637f5c8d3bb9bbe8087feb7\n43a7d89c62a2fa86a5aee46eeae32d13\n8efb3d9ec93520a797046e48d8f1e936\n54ec14c2afc2b7e37c5d07ba5fee5aad\nbdf30e94446293c645de94e1bc93a4f6\n1ea28bffca73c3d44b8710a3469971b1\n1be0ad8c6375f5d47edd45e036b3c8b1\n3da823da4b6acf395b903ba10d2ec446\n168e317409670cf2a0006518e6ab8b1\naf5e2282958114c3f12d7184a2ad3430\n2eb880249672bc2386b647696ec80093\n7625201ed0ef311eb65b71636c46ae49\ndecd9ab8c2714f2e7235016c2c2c8150\nc15f3a4903ca16b98c0a2d703f217201\nc9b834aeda78274029edbf57bdd3b0af\n58f6e2538ba750008223f9660fdfaf1\n7191fe8893bb6a89b5b7c35a8e7396f2\nc20a5f8cfa29824b310af74324aae27f\nbcbc5e30e12a58f07ea323bc74055b8\ndd276ac55465f51e1457f3eb061a2fca\ne4dc0ff7a1f3151814f68a949b9a6baf\n62c6addae5defe8bc62ff677c806df30\ndff9b5c37bedc55e9f011a37a96f51f\n7713f8a266cfcb1ee31752932c101137\ndff5b7cb4f72def6641f7a370ac2809e\n537e9f07962478412de1f397a20604d2\n7f9c12456dea1c2531c7871fa99a9d36\nc0e8eca9811baaf1237b12b19575e7ae\nb3371ffc36150f817bb281f66a49b55\n629d09ce8c10a4f866603970dfcc17a6\na24cc636d32bea058c833bc3a0fba1ca\ne5567158ce772a43fcf7d910cd22d7c2\n9d1485d7d82df9aef4ab13f4b49ac318\nb84b06178cb49ee171d0a1a8ffd305f4\n687c7be604090bf89cd431573238602d\n64dedff769355d281bce08795c661fc1\n5b0185f3a758e481618970cea28848f6\n7affe342bb9be16d5936c7265c890fef\n2b00c0cd6353e2fc52ed0af58ae88731\na5c6be40bd9332e873d4ab618ffba803\ne469e53c260a5ca47d2695833906aa3a\n9f035e68630d704b46fb9c38320df24e\n41eda879e1b7eee2dec2e3fb3c73544\n54401b6df397d9464719088c8e42c6ab\n9109c50681f033d83b233a16f6b369c3\na8c7402b6bb693219786ace2aaa77b00\ned0b1bd723063c8ee1be359afa82825\n4eae659d4bc093465f675b8d0bab4126\n72a7c2a8221afcd27e6cebe5e9a662c6\n24732a80e4b1a44282db9fca4b68095\nd97819998f885d54fb977fd7ef10cdde\n718df0ef71586a6ecccd93cbd8dfdb84\n7df8028783ecc6ba6d5fdff4a5ada0ca\nd31b0d2a41051f2c7b79156a61ad4c01\n9cce8b636c333950eb98f4ac131ee005\n28fb3bc8ab9f518035836c728d324152\n45f04dd3dfbc4926d42ec7e303174a87\n30afd447dd7201d652c0eaae5c15cab1\na80b1f16f5dfae242aed93548190eee8\n7170910538470c80738e43095496b061\nd083fd20f6f953fd4187eeeb0dea4986\n3842d805856309df777b6246417c94ff\nafa90f39238804b35778775dfd5ca46a\nc0470c413b0a260979368d1198f406e7\n1f7ae7a902f453b39dd0cb4dfd5b80bc\n4639656b53d21ab1278d386bfa54545\n72bd77bd74cce09cbc6a236746230424\n24f753c88ee4376f19fb4103277a6b93\n382b49301bbd3d707d6dfba3e792b660\nc8cd7f01dd79bff03b92b6b9488ceadd\n2a6010074025d1d85dc3653f8341633a\n7dca56442a9756a2e38cad80f0be5c63\n6f13be4d995e55b25ed28ed911e69310\n1c814f977bcda5b79a87002a4eeaf610\n9a4303e83aaeae9cb2ee6b27e0eef6ad\n4220d2a91737c68019fb4103277a6b93\n506ad995cecb082f54e1b6f41fdd78a\nf06857189fae823f35836c728d324152\n9b32bae53b91a01f278d386bfa54545\n5d59c0f64642450911794406b17d66b\n325d922d3092f7bfc3bd24f986301745\nbee3ff1926f3068cf09df371fae9d63d\n5b719bcb32b8f291f16681d085170878\n6adda4f50154d662492d9da2668ec34c\n2b34724248743a36a71c812e027f94d9\nc11167eda66f60f219fb4103277a6b93\n28db458b524dc934f2c9082debcece6\n89fa346209ccdd0f16626db88aecf64\n9cc8c5869737e8e3f51fa0238791f5dc\nb23b29f4b08cb2e7b65b71636c46ae49\n5a5d896489318c0279c251b4a7838829\n4e784e440912c48819fb4103277a6b93\n69e670c5a40a40ec9095fe1213108032\n36a14a47b91d7c42f51f77a6d7299806\n6aae2a0daba548f082ec48ff3a4fe07c\n3804253f3eacff56a55e6ad8c321a190\n6f39877ac66ff1b55936c7265c890fef\n7050eed75c60753cf0eaa338269104ae\ne97089561bcb8e85833c6c72c4b62a4d\n41101b30e8a82faaa640b0223e089df8\n25bca46cd4b9c517d1bd956578bfe63e\nafa91ef326c0309768966ba896bb15dd\na0379565daf4b6e6579cea75b38cb7ce\nd37fd2ce56b3340eaccac37ae24b8e2\n52bc4d1cdb3789407ff6ace05b36a5\n492de0f32fc58c83297936c81e7f6629\n33ceeac71f2031577cc56a6af4771185\na7e343ab31f1e113beedb4c8fd29e2d1\n9160a9dc1c840e79c607634b4693f04f\nea9e7db452d2df55d42ec7e303174a87\nc715a29db7d888dd23f9e4320fcb3664\n83b28dc11de6b2625c8a41baad250b1b\neeb23be65d6c76123199fadac163f8c6\nd9c11381adf0cf48f1783a44a88d6274\n72bf6e88fc05d48c2ebeb1e6a8111f53\nd40ba4b29c5ae69dae14646a8c8ddd34\nbcb51814564c9308b27067c40cfa2f80\nc97fe8ab1bb4e195af983a27c524ad0\n92dcd20f1b208af9f51f77a6d7299806\n1a9ea91307d15d91f51f77a6d7299806\nd43d8df70f357bcb83776366d314ddd7\ne8502118aeed3381d5b708f09789d978\nca484b4b04e546938c9e244e3fbf98f0\n31f09d77217fc9e0e76bc197b3a3ffc0\n3f1b826134c88f5fa0a2f1a46df5a003\n6e81c795bb5f2fdaadb72b90b2eeacbb\n3f10bef75e979d83b32d32632cd702eb\nd4acb5110512f5c38369c37b40e82efa\n3ac69f9e2517f836a341228b21d337a9\n59ef41df3ae8a4026c2e61baa2a8130\n622e30a7ccf34ed5b64a7c8189aa3893\n724fa46215e03f4c52d9fc61873164a1\na2405bb8642d5bcecce90f0d61ed7a70\n718679874bec63183c9bc0d98cd0376e\nacf0ad26f9feff411191025061735ea3\n2cd211982e3293a7492d9da2668ec34c\n5924fe80dc26ae812b0c00d36a59e875\ne8d505c5e89f313dd42ec7e303174a87\n38c395f4655e0e70fabe21cb4fa2fa68\n4548b28199a044ab19fb4103277a6b93\n6949e65a18ca505298d5fc0473d00a1c\n38bbdd91e895c0f92c0404a105e586\n24bfb2f2e403e025d5b708f09789d978\nb3d7407f79c36ee7367336fdf5bd5f57\n6c844e3f4a99bc3ae8375def5e736d8\ne3fc414b6b9b52ac50d71b436e21a7da\nb2867d5067f44e0d6b1cb83d86c19bfc\n812a19a717fb5bf34510596cb4be6a33\n6afd8ac8c1a2e31cd42ec7e303174a87\nef29c3dcc28f4e314785a5d3b6c47521\na797546d87b4a03bf4b6538438a0b930\n19c9beb4e4a5ea352c79b4f0fac9a79d\n4dbea9b679493c3c31ec4caf9b70d4ed\ne94b1ab02a3264c89eaa55bb236fb6e1\n56ad1b4f94a1d84ae340086172f20153\n7960127aa69c0447492d9da2668ec34c\n8d9e1624c85dc88621bdbc0445d9f748\n71a782bd942c4b0147d5777b892afbf7\n33c9515dc8f887bc664b3b9b23ddfcbc\n20cba21d7122fec4784a45ea6efa1d77\n9ee005b0d0cf88a0e7e684d25d4dcaf0\n2563d1fd68ae9d77ac803318d4b3b4b2\n8f7d16c0303d8cf4593ebeeedbff73b\nec379ae9e5d850459f2349486c570dd4\n3f5daa8fe93b68fa87e2d08958d6900c\n10139657dfa9afe0c3bd24f986301745\n15d8de2e2c672a445af983a27c524ad0\nda90bb35949fb45ac3bd24f986301745\n133686fa1a2136092c280c3b5abf8255\n7fc3bc8542f4c17ce4511d9a59e40339\n1ab95754a8af2257ad75d368738e0b47\nd1c6ed48a115eed0659dda512294c744\nd9628700a086ca293c85bd0482f3094\nac343084fcd0677bf78817f740055424\n1b4e6f9dd22a8c628ef9d976af675b86\n33005098444c222b2b70eac6546e93fd\ne7adfbfabcafa394278f90ef85162deb\n193aa6ce8777814b90e2ed261620fef5\n5a2c14bbfcd9ca4d68f8796d69d0c486\nf1858f78989891172027cee422df2aa3\n726a974620efd98c377b9297f3055210\ndf166b0407fef7ae4b3c42e318f3affc\n697779230551768eedf21eadb26f2ac0\n10fbf670bb017ec94ebb593f0d0b4581\na7536a73ce066981c6641602bad03c73\n3fc1002b5a538aee50c9fe3e733d8740\ncd5f235344ff4c10d5b24cafb84903c7\nb8fbc4e32270751830bbd4cddd04c77b\n87c49d4ca6b740d5275d003e423c59ba\n731b5127b72cbbd9b9a17f7cc0030785\nbc3c03577d04c17a8dc9009357301fae\ne97106cc8bd3ef5730bbd4cddd04c77b\n290df469e3338a67c3bd24f986301745\nfe4c20766801dc98bc2e5d5fd57660fe\nb1cad66b13e1a1e7714531f0291497fd\nc927a92a2ce0be7030bbd4cddd04c77b\n817f1c820e82cd498962005ce0e986db\nc92ea3f511378ab1e21111e385a0661f\n96dd123d4b16ce2afc62a892407efc0c\n2d018cff733a8e176870e413ec7729b0\n8700e5f711dd180bef207763b5f4c54e\ne41da371550711697062f2d72cde5c95\nffc75a8bdb88c751b7fbcb21c074906c\n640da7c995f9fcdeab571431db8834c7\n9dfcd3488a7109745b5b328c62af5142\n8aaca7e2c1b0ec549eea323f522c6486\nf023a5489450b924520ad20925ff9d2d\need0984ed7a72e99cd1c64069cf52e3\na41865cc8dfffcc137ad4a99518dba6d\n5365dead8b3f7d4166ccbd11a6ef0f68\n63ca298a0bc7dac4d1f4a577576ffb5d\nba48c686c1070c63f37af16b2893f1d4\n5d30966509f58394237c47118f6132c8\nc277ca4a9195df2ffebad4f49b26ec52\n4ce62e31dff3ac18ffc6e457221b9271\n3a6a01d03f28cf83664b3b9b23ddfcbc\nf7574c55aa4d5c80cba9caf4d254cef0\n2f8395ded89cf84f40b4c5428883e585\n6c56052772cdc2b66289707fcc0ca1d\n34b36de23e2e64852e3db45253b87bcb\n1615fc31b6daa088c3bd24f986301745\nacc0b552910e603955f46d55537192b6\n5a945b9e86d60a4aa75d03186a0409e2\n6ea2512df0b4f49244175b4dddf5be08\n42018e077cb76cd3948fd22ef0eabdf1\na4d27a18402f6f4511c3daed4b8d9da2\n5fc81c6ef8ae997a6ba09c1bcc052706\nad41461d3fa9b483f6bf408264db131b\n7ae9c3f17c5f9c569284ac9fef3539eb\n284831cd2c3c4641668ae11a7db5e82a\n932079d89ba2e7ead16260d4d73b56\n4e08d2efcf14b7adee170fb6995748d0\n1a80520ab14439ef79b3e1be3524f72f\n2908340693e3dbbd8608f23147a4e121\na5abb8bcc70e8099ff39d54f280fc5d8\n10e6398274554867fdf2e93846e20960\n70562998ddeecf5ff5816ac43b9e4b2b\n691caf9e558fa4dec7f671ba289ebd83\ne7373d97df1216af869f35aa46529daf\naf2feda1ed22097d6200682ef9a0dc75\n74444148ff8d13d0febad4f49b26ec52\n5918b05f59251e8c24507ea38c2d7c6c\n21d141b130a76e0e497b98603e1cd1f\n21ce94947b07b5d1f91663a74ccd2338\n2d8fd94c6aeb5be2beafccdad931a74a\n90889a0cf4285ff4f46e6e4e575a5bf\n1c00da8a9bd6f7403b846408f8d3469d\nf22cffb7f3ca2ea1d719cc16de395dac\n42496cee03df8154ac2b62da1791c2b6\ndbc98a58a2425925febad4f49b26ec52\n366645cdaab60c793e5eb583c9d92b57\nbbf0968957f58e78f00f21861968ae14\nd7cde91c536c6502d7a1dc9bb68fc381\n51cef4b98624473e193a311b8faf4ace\n119a538325398df617b2b37d6988a89b\na53e528827345c7b593ebeeedbff73b\n57399be7d3352241b8812f80908a0273\nf2fee52b9098c13fdcfa6f33a3c5eb83\n5b6bba613d5dccdb21b55dcb76ec1538\nadf35ea69635bade7b9c6deef486a7d8\n24a95d1ffe9b8853468a0257ee459475\nd45cb36eb4c38786b9a7614f2da8d7ae\n44d70581b7c1468e1771ee930e861b13\n29207ae4e01c415894fc399eb2c2f348\n50bc6269b12da0e5f88cd736e1bad067\n47c51069048eedfea9646a2bf24db0c5\naa96704dbd5e852cd9fad8aba2c312b7\na72b18ca7d4aec7e67cfebe3c2e9790f\n6b521eb69b5af97dcddece8d514fc823\n75b3ffb0c09ce8b5febad4f49b26ec52\n14d8555f9a21f341edf3b24dfcb75e6c\n175b6c97de52974a8f27e336794e60cf\n9f3d0cb709260aa09ccce4c6d5bb195f\n376c99ec94d34cf4e76bc197b3a3ffc0\nabb1710ecb79812d93f55c796c857bef\n9c49b5339e9f3cfa5c6b6ad017b2e512\n40343df799bfbc12c506ad4a52a913c4\nf408befab026f5001e5e1a907376dffc\n87ab01946ad4a2f6e56bc109beb9eb57\n2da006ded7b80b61febad4f49b26ec52\neef0387bc4e72a1efebad4f49b26ec52\n50882181ce7f2bc1739680f4e31f35e0\nd1ef95530469a1de1fc4857cc94b6562\n9b7352c3a8d69c2a1185ac82ed4da80d\n485b69363fa53a5ec35131da26f8061a\nab8735a26c5c9ea4f8574543281e850f\n33857c2548cc653ba53276bbe109327a\n4315e96a1dbf9337cacf13745dbfd112\nfd8cffbc99f7388e4f2b9e837678be87\n669a8114b9a602c2febad4f49b26ec52\nfe5f543fd0c6b34edbbc9440457e303e\n67057f4425cf8fa5f46b0a91833c80a4\n206a239d64ad2b31664b3b9b23ddfcbc\n1460b1e3fb02755e67db1ddda25e199f\n94f9034f0a3e85d3ee881d4feac7f213\n1600f311c31ad47fa4bec68446bb57f4\n7d95cbca44393d12ca39a5500b69b164\n6c6aaa451538a8ed6ec2cd9a23ae5af9\nbf9d12b9a6a79eed342501391dc44531\nab5dbe7338e842e36f7826c82fdc3f35\ndbb28a435349c9c76b1cb83d86c19bfc\nbd10eeed8d8190ccb041f249f731e3da\n4f0fd96b50c261ed48fda83c10428379\n114520b78a1726cf86de8d6734d81fc9\nfaabf2f29b99589991752ed21892d778\n5b4997ae8d1e46fd16a2b5862518c93\n22b4c1176e8433134ea79bdd828d5828\n1c90216659d7b97fec5d8105ca6b7dcc\ncd01fd75885d9f606ce1f91756352daf\na4cd409ceb0aa148d93cf5f5bfd78ab4\nd458bc90f183605119fb4103277a6b93\nca9bbb0ecdcde978178548484b14e6f6\n2c6d9b85e2be02d9d76ce82841b0eded\n58a0638f8bf4f0fb79414e04132a8bef\nfd7f26ea3a1d1cfab092f06f28d82d71\n4fa88f9362f216481b99c25df49800ad\ndcca76b81c747e76a65e19246f8119cb\n135f9b1fb72e16d0dcf4cc877ea9b3ab\n21925c161a6aa5bf6d65f86bdc92afdc\ne921675e5dddf58b30477f27f55db318\n1cce1fd7a0184a48cbb8bac2032149c\n659e7b7166d8b9972f84a7804aae667f\n92b044e982b28fb02075b603cae7ba22\nfeda1b3bf39743d8f16ec553491baad7\nf8e8b0059395805d9bd3e6056359bce9\n40cb833fe986db191ce7600faa926b91\n156ebd353a36f36ac3bd24f986301745\naa8bc1794eb3437977de2663bcb4d12c\nc809bf0ed02eef7016a2b5862518c93\nba311a09f08ea7899c39abaf208a73e5\n803fd62336eca9d58797727ac1d88278\n57e4a4a4806c38e33702d3e624608075\nd76d897ff334065a82130856eb48454e\ne2ccba151d9fee85a71c812e027f94d9\n4e934cf95db4cd3bce58f346b4d8abe\n505dca88c2a9f7bba75d03186a0409e2\n610709315a0f542552b3505ff8f3d685\n96ef0920cb6be395e44bad6fc9badfe7\n5f8baa8b2f5c37f3124c962aae03701\ndf767f2df999315b74ffc2f06690002e\n1370db5c4f0b84026aa35752fcfa44c0\n516f73ee8b530042593ebeeedbff73b\ne8ac113e9db33ac8cfdf2d08e1ba2a48\nf76bddb92341f2a8a8a7283d9841addf\n8f7cbae92fc1c6f9327289c00b6dc9ca\n34c00f5a77147ac6b041f249f731e3da\n71752a166bbbb06592bf3ce6b900c3ae\n50b6c4c7681aa3fcbaf2e78ed413860a\n2425d3befad0440febad4f49b26ec52\nfe0e7198411fc340c057222d6d091c56\ndc61d1287fff3ebdd2afe8d5254a0d04\n15090e10ae2d06306e25f3efedf6785f\naa0d0d753ed85d62389bb6b6a6e983d9\nd8ef132f3ae98f688231f48f0f8de6d4\nb59743992b870052255fc74f0e7640d5\nd51dfe604d380ba9bf01c8d1f07a5c67\n8e3524b6312f60738ac5263758737a81\n15cb1696b45ef647dcad484e89744ca\n328e8b5e3419c66c493f7199d76f57a\nf3cbca2c7a6b2821f4b6538438a0b930\n2bc3439a36c0518b4b3c42e318f3affc\ne5437217b4f28c976c45c685905d0ecb\n6a4a9790706a558c2f84a7804aae667f\ndb09ccbc677e2afc9f60147421585c0d\n60014b37baab2a2fdcc3461f14d611f\nff2b5b315173f3244fb315ce917a9ec2\n85a20e4f7fc9256eba9cbc5d66bac4b8\nbc351c5cb264d29e278d386bfa54545\n199d183157f213e0da7c128b58fc7554\n813599653f44dcbf245495d3641f83a4\ncda2b04eb27a6b429ccce4c6d5bb195f\na8e015f1de2c48c5f51f77a6d7299806\n11c192ef34f5dea0a1bc88a716ad63b2\nf577193ba408f5eba71c812e027f94d9\ndab06bbea57f6051d0b93fa304cfa755\n95bb0549666284168d2b632e2708f79b\ncfa823ee81496f5912b57997414c1d71\n3372c6b94fc719b9a75d03186a0409e2\nd5e79960180078237062f2d72cde5c95\n6dffe86c24e3870cbeedb4c8fd29e2d1\n10db06b0d15bd4ee72f847ab4bec38ed\nbe9467a2641fb58330bbb59b54a585de\na1be21c9a71d133dc5beea20858a99d5\n6402177ad47a8a9514d771bf63ae2f60\nfb097cffc3cdd8512027cee422df2aa3\n511a939f29ca6763f169404e5c013db\nbfb8531870be8be971a782a4379556c7\nc46135263f88cf68bfca5f90d2eb0e0\n17ceee4f264733871dfa540c3e10c55d\n72c8fb162c90a716dc6d75c6559b82a2\nd6c875f6b3fa82fd9aa3aca17bb25c50\n5a720d961df190d459a6208793b9dfca\n6ef4f1f0b3f8aad48cbb8bac2032149c\n91b962b6de5efaad79679c2bd6c2f2c2\n6a613281bac861a49dbf2f762a644724\n16ee1b2d9a12abead99c7626c95596\nda330cf1b5a8f1ad26f51cb1aef0ea9c\n51d386439cb748c54f2b9e837678be87\n14c66bb1292a764f7e7c9f487eee4fdb\ne41e3b1d11fdf7cef9c9f9697d1ec60\nd1e01c36346b4b839abebb636ba42f4\n9bb646155fe7afd84e55f99914fbe961\nfdd8dae63e8781414a803c33df86f3bd\n772b0908f5aa09c687d3d93a515ee29f\ne94ed46ede91eafa50f1b9873bba60ae\n2ef5b582482d7d52cb71061323057eb9\n34787e9a9a0c1ff4905477d2a8504646\n19c8ff25264b77666716685cf333d2c1\ne98f06e93bcc237afebad4f49b26ec52\nb31bf17ab00837ce30bbb59b54a585de\nc15e74a91f0b59d533f68dc899e13f\n7c59421abd239c358b069fa6e7378ac2\n4f7f8af38b1a13f67c1b348241918030\ndc3167808a79ebe24a1806c17996a001\nf21154a95d49ca29e6c5cd45aa112726\n41d9b3064aca3c74e7d71bdc5700ff8b\n351d39fa6f9b659f2377f2addb49ed93\n764c1145134d658275e36e88b6617f01\n90446c710f3495f4e90047543e308ba1\n93277f95f365b958ffd5817f210f277d\nb5daa2d15dad58d24fa2457d6e4d0c91\n43e2a0220f1fbb9cc1bb249ae60b3bdc\nbc23348d2f16d4237155483601ac0c56\nda9676ff70b2e78a0a7b8ecc42036d5\n155af42283f8ccb9b3664229461d7332\n4c4675bc602b2a95febad4f49b26ec52\nc0ef2c3ec04860e5b0e0dee6075b101d\n2698d4b8ff59120179b3e1be3524f72f\n933096cbd0f7ef0aa73562d75299fcd8\n9eac41860580d9ea8a75ef32ea6ce62\n132f7a4ddfe7f230fd6ec91a99a73de9\n47008a5646d3d84d85969b141e43f51\n98ec86d721b235374d18c1ce5fca6777\ndddd611b4262ede6e3b9db784be35882\nfad834ac9ebf8d5595b7b91db37ae400\nb1a1d78a2736dc2755f46d55537192b6\ncd413f0540b54bc1fcf003a332eb3241\nf11b09dd3782f084f78bdf37d618e97e\n81fd25d9d26de497c34335c1a2a9193f\ncbf3470a35aff67e483fd274b1c29225\n11ac24d90fbc20bc5d714c9d7df1c4ed\n2873620cf8be87ec798432661977bc1\n6777c68f2b62b581b3f89af909332a40\n91763ac2faf129e9b35bd41c666704ac\na0ee8f7c4c2907b4e45ef4135c266a12\n2a7130734389335c5c5a7639ceca3973\nf910c50ed20073928be66dc0939fd23\n7e51fe2b0e56f2e771b7a1511b87f5b\nc490945c032f5ca0fc0035da39bd5e1\n6159304c015c2d54bd7b3ab3cb320beb\n580a053d716c2d5aa09e5a1a20aee2ca\n4b455e9b8dc1380dbd508cb7996d6164\n37c932b30ce507c6510e28eb1584c355\n461e2b86470326ed70e89b1ce671b01f\ne49b95f478df00bedbbc9440457e303e\n4ceba450382724f7861fea89ab9e083a\n6e849ffbc0c14739b31b6dfccf08260e\ne5aba07854af35d89e6a137715910e1f\nc26d26e409d01e8420d2507f5cf72c4c\n9228f548332eacc51287e03b5b76fc86\n6b5f5a51340e371ea753e2e06c37201\n2087680eed2edc0a20bf3b65a70accd3\nd2578e2ab0be1ea3332e588d1e0957a7\nd63496bc51de5d77e3837ef7356e7613\nd386586a2fef0389393a1ce5402b0d23\n3836e0568d0ab079ffc6e457221b9271\nbd594555e192d5797d3a650ebc940efd\n782cef41b14a2009a71c812e027f94d9\n2889aae96f0b236e27790b0ec8671f7\nb22bf7aa80627ee61ded04ad3995fc44\necfb5ad31b6e40b72b70eac6546e93fd\n74b8222078ba776c661673811de66400\na9e371d1c714f222716641f54c7a54f1\ncb242dc225308003de21d22522bdaf\na24af284041888bd5f05ba8053abf6cf\n6c06faf4538bdc00b9e8bdc9c4a49aa2\nb0d1fc9676e551849e25afd4f06934a3\nd27130df514414d1d8c46a3a266762d7\n1557647df4c4d298f6e8f2cf4a97051f\nfb158adc15a6b5aa75a82b88fe6e733f\nf09ef9a34df9b34d9420b255bb5956f0\nbbc685f481cee10f668ae11a7db5e82a\n10b6147009cbc17ec25cfdac7cd67ea3\n90631514bc5dd234c798432661977bc1\n91981bcdf94b60cf3e5af54d0ed82d00\n63c93cb827f004c9c738b9c67433b6a8\nd1b44c2dc663cca6b8baed360b6cc5ee\n6f1985e1c09aa1be7dd7d23ce6ceed2e\nc67b454761d7c84eb2a155afd9dbbb0a\nbe06e77602ee4d089c0ca344f487323e\nf9ca8f7549af695a5aad165050e534c\n2c6d08c15a19891079dea5ba5d13aa5e\n51cfb783895a8af9febad4f49b26ec52\n9913e76fbe2c438f4bb836860bc1cca3\nf1bfec97b7e9f7b776a402eb60ff1f9d\nf94e4eb78fa79d9d41578d1a851771d6\n194fd39afab11888b84c578d4c100fe6\n3931ce39e77a25a9dfefa992cb59ea0\n27f9965a337bf46d85924458b86f34\nd599b1176343728c6705ae120c2282cf\n3aa65a29330bb87f980f165bc2b4c765\ndbf47e19a5f352e0f1b010366bb60ce8\n5d1333eea1b2a9bf85857023d32c345a\nc85fffa8b368d05663191fd557d3a61\n67eaa2b16399f3e88809fffd0cefbf72\n3456178d3ff37ae1e76bc197b3a3ffc0\n2ef28aca6afaff1d88863f114bcd9f80\n8ca1fd346eb62580ffc6e457221b9271\n58cbc849279b38e0c16f7010a3b8fdee\n41c027788c1388bbc48d90eef8384210\n336c81a0546a4ebaa71c812e027f94d9\n575b467b6ebb2f234eaa3180e8182d9e\n5d3d9689b1447e01febad4f49b26ec52\n75e206fbfaa7a973eff7102cbb9312c2\nd732f1d1e8a8510ff68e7a883fa7f8e4\n7b023a0954a15f6b37b9035bdec8f884\n80ad425b12c2c008738e7290b6f3237\nec3f93916a91e386c29f1e5c35eaaf93\n4561b621e5b7c1ae8cb5d9909aeb1309\n2d27e4d0f8cc2c9cf577ff4de1ac394c\n2bc4caa1941fed746500462ee46bc39\ne053e9199d9d7f2d276b6f6d90ee3a83\neecec73da85e87ccf008d8a3590fb522\ncfd0fa8a6d9ee06e6456cc507eb8f5c1\neee6cf14a56af26ad71f17d6e8238d04\n8d2e17e38a624565fb70a55ca9d14169\n4c1048076c0a8a09c785f06f424b9d06\n4003c20ffb525c7ee3def9c422df2282\ndb96923291ea465d593ebeeedbff73b\n3736ae6b32d288fad832a3fe59576848\na95828fa4607295674c8eb7e4d6198a5\n855e3ed8e5f233cd2b722fc42ccb4c6a\nf3d5911a52b16bf78bf1cb9ea68ce0cb\na2418ff066f38084ead6784d11c8f5b5\n58bfcc581879c121b20808ae6de0ac93\n5808fa88b17592217caed426d97afe76\nfa719ece51c607383f3fb2f375c18a84\n1cbd4d2be9cf0e3e84ef3d675a0511c0\n4cabc64d91668d76890992ddacc04113\n1be435a3027d58824461bb4901a4cb6a\n3c899eb5c23784f9febad4f49b26ec52\n75024d18227e53b565f968dab29b0192\nc0de139953efa6ea2b151d8b52c53b90\n3ce4b963a4869248febad4f49b26ec52\n86951b133a4c6e9bd989b7b3fc68c580\n190028e65867076ee12186cc8c5022c7\n4a9a73e93f19ece06652506d959dc71d\n634fece55dc20d232a978d3a5b04bbfd\n2356544fa047516126f51cb1aef0ea9c\n7b50357760759ad58a70042c3e4356d2\ndb6561b883e56b9072c6d81e4b9f21e4\nf41ead4917ec05a149524cfd5973a145\ne7bf775ba6774a2e278d386bfa54545\n2a88b6cbfe4b9a3ce2dee6f9fbe318ea\n8383a9cf1380405dd9006da2b93c0a4\ndb665d85f1d9b1ea5c6a44a505804654\ne7580c72525b4bb1cc786970133d7717\n6e96a8c237b549b6e3f7a74e12a274ef\nd93d1957e7a38a6619fb4103277a6b93\n1d06d1bc8f10c45ab1732c7d45a02ba0\nbfcff8d45de2f950f751d8c0e5773abb\ne10181e68d41be9a75f27865805fd94a\ned30d775da40ee9ebd907eb5031fe9ca\n1c9aa0fdd563da04c397356311cbeea4\n1db1bfaa8eca186e9295484d295fcc9\n743d8382aa44117e593ebeeedbff73b\n3802e59d5a3970d5ee6f3ff2305dcb14\na088285efee5f0dbbc6a6acad56465f2\n1b33172342f58feb76963e5e6f4f642a\n85e359daf7e56d6a94ec70278e148371\n234a106ec36821d8c9f016d57db96408\n48c61eb9c9453db75828f54ccfceb8a8\ndd528cd176c8d99686de8d6734d81fc9\nd6e677600a93bc118ac5263758737a81\na70f937b5c1a26e68962005ce0e986db\n5275e0ee91ab4e755d009c98a5b96836\n7689de934d5af6505e8431ceb98e6b3b\n3842243b1f246b3dc4e62ff7caeb0b29\n5317439efc03a22de27790b0ec8671f7\n63b5d8f4fcb29b12d0125a4a81c5d058\n1d8278324bf01d50c45662a6a951b979\nf580dcfbb898139df6cfab91d65bb91\n22a19599946e4db6c3bd24f986301745\nb45217934564854288e0556a2aaca7c7\n2e990f9b5c2bb3098eb91f418e60b82e\n4903be367953db8c579961b8f4afc151\n61a898c20ddb028dfebad4f49b26ec52\n41b548aa6f4146fb1962281db2f162a0\nf026d1e8b71bd18e97f16d67bfc59c23\n731561e2626163e8a4dc6822aaa2cf2f\n8fed49d9a02124903002761e7a3ba3bd\nd497f192ea400165da22561748cba914\n5e5f15626f1f230bff7e95552a1d6a0e\nadd1279c481f88a1955e0ab55bea4388\n3092a18a275497f54b3c42e318f3affc\ne6cd3e7a25cfb1c3593ebeeedbff73b\n1c8d1cb23d037f2a9e4965f0106e00d9\n12dfe5b5c7acf776beedb4c8fd29e2d1\naa79a19ba1fb3cd1febad4f49b26ec52\n5c593d79b5f9c918b398a1cfd1079875\n1b0dadf0e60a563b3671949e4f99cc76\n84a0b93cb41ee6e129cb4c9f87f87751\n30e12322c7e23ac358db0ef36af1d3c5\n76814dd29a8fdd76e400ee8c5c49a7eb\ne53f5f3d4b20df8176331cff7db8f268\nbf899a2e47420008ef1759e0b43f0fd3\n2e2a612aaeafebd5ea23ec7dabaae1fa\n6726c2d72f835554781ba0fdb47276df\n649cea3b17ffb31bfebad4f49b26ec52\nbfcd5d38663fd5338738e7290b6f3237\n98482492d4cd11698a40b9ddd9e5eea5\n9976f7053b1b7bf2318694f1cc6fb1f8\n1cc5bcbad2fdc660d942e529754fbd45\n7a488c92c601f83c821340ef6a9a830d\n8abb8d75987c92144417a5312cf9d851\ncc1666f0fa7a1672e5a8eba5f6050bab\nd2f884d5637c979214c06184923f6962\n21136301f27dc9bf84633b41c8a09fa0\n1469f244a1968345e2d95336601deece\n517683d0866085dd2beec56b24479ed1\n68fb0825ec07a521febad4f49b26ec52\n21b8b1e51237f4aee76bc197b3a3ffc0\n126347c2c4404eba96a3517f50eeb9f4\nf907cd8cfb723ee6d6eba0d14df5347e\n496de03106abdf4ba766a367d5e2d6fc\n5e3ad0f79dc0c429bc8967b0321bd9d2\nf7e0e36f618039dff39d7554d3e63ae4\n875758df9f03fab669a10a3a70c69e8f\n3950da9e4a5083d7b4fa97f642d1a681\n7dee34ea0b8cefe8668ae11a7db5e82a\n895d688a910d8ba0bd647f71fcfdcbe2\nea89750a67ae2335b9315f9098d51eae\n4c39c5bcd53c1b593d08add0058f34c7\n21c58ff6f87b750cb9a0f5d18f1ce54c\n9d5ffd7cc6f9084abd790f9b668aa24f\n8f29431ef2b28d27bfb1fc5d146cf068\nde2d98c18293a15219fb4103277a6b93\n25c9cd32e5ec1e7cdf54d2cac06dae5f\nfe0ac2e334ad4d844fb315ce917a9ec2\n5b97f44d872864c21f7d7307c1f45af8\nc76b1d97bda153f51226a0a31e4f771f\nc8575754df874644dbbc9440457e303e\n525148edf1f9aa72bc7f58784fda27b5\nbfe852b57d198bd2e83f416cc5d1e30\nd157a0598ef5c33416e09341cb9bfb7\n287d78d72d12b03c3bd24f986301745\nb3b8817a8b781fce2e4761573669341a\n2bafe9aa12aa1d3bfebad4f49b26ec52\n733722cae46eb715febad4f49b26ec52\nce7a0aaab23c9317a71c812e027f94d9\n127d935d17cb36c8b0a3f25f5d8cb0f8\n91e7dd99a4c945f9dd03ec353c1af474\n9c390832c0d1569b664b3b9b23ddfcbc\n2e632844af2fd0892ad0b8f780281bcb\n23e1e8b7ea54079cd5217e3e48d1c0d9\n2a295b1bbb386e2f3ffa3a50996ad39e\n5b5095b6d5612d298877c667ba5c2021\n400a2dd6c371a2d446de2420e311135b\n3fa4ca95ea2c3d4649a734174fea032e\neba66ca2e46521ecb16ea05e48de73ee\n6581edd8565321685512673aa47c7e3d\n77a115a1ad9d7e687634fef39c2ce2c7\n5fc39e0ecc8e50f0902a571380e15334\ncc182c3aa204614540f68c5e459bb389\n6dedce56f7f60da423f7198a00163bb6\n30335a7b507390407689cc8768f5250\nc45fe6d9f2c516997062f2d72cde5c95\n30e0f3d959b16c64473f10e6caaeca56\n57fd351d970d60fd60a25ec0f32e89e3\nda76df9a506534fa5eee45c00c4de9d3\ne29252434d37520ff008d8a3590fb522\n49dfb00ce7ed1602b05fbbe21a0097ea\n35e033efcf79391ef581ec61f9db71f\n2325ec6e77f29578d9b00ae2f30c0a5c\n8ed32fc808a31eb5ecd447b0bcf9cfb5\n268a263f41b82227f10f2cd5149de8c9\nd89d8aff18d0f4fa6262f7bca314d953\n6c27a2a85e8d512ce6c5cd45aa112726\ncca7e05c69a5d8e0a3056fa1e8da3997\n3344c70694e1bacdc5bd1ef3bc48a26\nba6e6f8263e961c243f6b77085610df6\nf2ba8040ab2d2745febad4f49b26ec52\n343bf23c280a14cc4ee8db28f96ad26b\n476e7d25434b67e75f490d1795e78588\n1a15e651e26622b0e5c7ea227b17d897\nbdb5a2a25223d1b645613f5c2df1029a\nc306205a10978fd695a4c885dffe439d\na0745770bc3d12477b11ae648ea92233\ne834ef941f7bc9c9e7df9f1005942e3d\n3d6e337c521f73f3fe222bdfe4498489\naca4c523f999de86febad4f49b26ec52\n6a8f125c174c07a57b11ae648ea92233\nf9aab5dd0162b688e9a1a03c1d065394\n3c5148ac155d020763ed57e35c972b4b\n95bfb466d603b6baa45e8d2f28a9ea98\nb4b5eedfa5c159e0d4e369d956a06b76\nd80a4629ab6badc16469e58b3534356e\n28447e9816bfedd268a2b8e2b27b7d8a\nb112088ed4afade413b554f4133f4b49\n50ea883b804766c458a565d8b69ccaf\nba8b2d50ab955e94beedb4c8fd29e2d1\n20b8c6959784f2da83b763ebf4ad2b38\nec5469035d19434f9ba80f08c401fbed\n4a4f58b882325236f6e8f2cf4a97051f\nce6e4aa17c710b3cd6d67789347621\n61fafe333f8c79c78716341f2dff4249\n262f3ee836b6b023c5beea20858a99d5\nbab2fefad03208b0935d906e24c18439\nfd6a530388f275c926700e14156d231c\ncfb7e0b0f44819c5e2f409c9efab99cd\n53f6531e2fc2d31ab2c2cd006d206129\ne6cb8965b985b8a07eec403e4de3e723\n21009983c23be33dde39a695c03bae3a\nfad62f2339aefa8f9d86e5f05f1da2b7\n631251b7c08bad443e890a18a7c6a6e8\nd3a5d161ca44660d4671d97b0fd17f51\n6361a90210b69a9590a2e9c21353bf7d\n1164897f678f3bd627e98d0f3d735480\n7bebd474258ec29e3c594bb716fb0dca\n6240ad3b8776b5e88e4f659f0755a47a\nff49113c1bda893155c5c4533d35b323\n9823679747e563b4d42b9650f19dd425\nbfa94cc8557253982efa4e574711a177\n6c2e919b70c335f240ef1c8b63a628f9\n2e5d2487b7e1b708e4f659f0755a47a\n92d64294a4c9af5cf8609c6280e52413\n8cb18fd9c7a54ceb715f13aeb6bde9cb\nc245772cbf233578164e1349afbd1b70\nc0b7cf5017ba0f21504c7f76533ac19b\nbbc0faf338bd07c3cffd61677456447e\n1799a85dc6eaaf48d25222e04574632c\n201833c55354f1a2d1d1bb832a2f0352\n50336797d9a86e9625d9442054ff1a51\n2d11e38388d212634cafc8d32c041834\nf34a17d1b45ccc541763ab8766fa2282\ncc3cdaa52b4b96fa55f46d55537192b6\n614f1c6f5e0d2372ef5f18853edea926\n7853c9da0f57af87e649091ae21aee74\n8c10cd9e5b4d589299ef6b0e70be718\n93f3d802ab5132d162079c4c0e1b031\n3f1579c1713ae72e2d07d128adae16ff\n1f59698c02bd1662dbbc9440457e303e\nfc9910fa6262cd4e1125c64abbb51ddf\n6d5211390473c3bc3bd24f986301745\n99d03f162477263b22996d48badb33c9\n37e1a5d6689a83d3b03169de4ffd172b\n55b586076edb416ea169b9ecd9e046dc\nfb32e9a7a8c2dfad74eb542502c2205f\n424f30af1472fec6668ae11a7db5e82a\nc712261a32a0efca4b3c42e318f3affc\na31e317e57540f3ffebad4f49b26ec52\n19dc20a7065fba0501a7e3ae8c65473\n589599503c7b88129a87002a4eeaf610\n11aee78983b57cb34138477d68528833\nc0a143c5fd0048bbcd01aef15a146d7a\n3068bb896d8a43c040e6664f04cec8b2\n3b5195c53046e4bd6e9ad486918e1764\n6122a22d4275acc796fcae44a3024b7b\na96600d919eff11c3f92fc6b6f6f5bda\n380f9d534e139af5dde0caad53ba7e0c\n8b0f94dde4b772d41ca25a4447d3477e\n69c74567d77a88fe5af397cf24be6deb\n1c259cf6c1206aadb6f6d1d58b7b1311\nc547a17e35360322fd6501c4dd41b22d\n73ce68f6021be015122dab9909481e14\n4475dea2d05c1ee4fd9792d1e260da32\n30b176f8b5e7e04ceed0bb714b97ca82\ne811612c42cf5c5ae0cc7e7449604bbc\n161da97088255c645ff9646ea22eac1\nd70bd276cd9f66f0a909821b8b014ef2\nf41ff2d573ac836dad3a17b61c0ca09a\nb5d5db47b33a9186ffac3d5f2301b75e\n5f4c30f80956bbd25fc5e56a56e86bdf\nfa1317f3a80bd8b1278d386bfa54545\n1417875756d55264ab94214c753c8efe\n1f326aac412e727b62ca3aa650ba65f5\n9ef38dea16d4d335a71c812e027f94d9\ndb302d0ac596b4e059db00799f9936b2\n9c8c8bfbf77716f36b4fe272da0db543\nd6577674aee8f8cbe986c6d94503b284\n5b67be496c11533c66289707fcc0ca1d\n68c76bd1d8ddd433dcfcef693e7ec696\n5be5ddf3780d2cbf71a782a4379556c7\na814fbd363007fcfd93cf5f5bfd78ab4\n66b56ba61af420e654a2b6b20aeaf693\na4990b3c86c680c3a71c812e027f94d9\n431340a089f0b3f5f320b5d9bf24e8e9\ncddbf3a55a623e423002761e7a3ba3bd\ncc5b638d81529dde3c2e50348f23d3d\nd9b82ebcd756397c371fff21f277e702\nd97e2a50640387adf90c06a14471bc6\n9203f560599ca558c16f7010a3b8fdee\n177f4749d22ccddbf4ae8c93f4db5e6\necdebac7ddf6ef0011c50f6f633c5e38\n114a55b4647938cee3dff0d5ebb43915\na11b3450e77331367948cb8e1d9ee487\n3083f8a34c6a2087a538396439009b89\nc4621b03630247f816baadb9e8e34df7\n5640f565daac3dd3772b104757a4809\ne608701de43f3edcc0f947750540fb22\nfb4d71ac2bbefa2297936c81e7f6629\n26adf340ea5d552d3c5e1addd9922bf2\n4b1744fbbe73dfb39ccce4c6d5bb195f\n9d80e026c9935fa9ea4fe6fd890fcb78\n14146d1e359f998b19b278d00a891f19\n18cc2e8b4034da8fb20aa91e9e90c311\n1d825a5cd1884610b08fe058d24e7e61\ne7045bfa00de20a39a0d3e7e907e5b53\n86a955d448e4dc0c3ba9e53316119012\n42191edf2eddbd733def89b32cef8e45\ndf297071493f894e79b3e1be3524f72f\n69c655d9411692a319fb4103277a6b93\naa41c42a9a79070de4a490bdf2c3ee62\ndb75ed97a5c5234e8f7d9678498f2295\n20cd5280f106b36fff90854b4e00880b\na84f09300e4b1c1ac624b11e153a6d87\n15616cf6115c302264e63375fc652d6\nfb3816ce98c668157e22078abbbc121d\n64155ca51be435614c9ef68654bd2fe9\nf80427c47d2fc4169ccce4c6d5bb195f\n1bd801dd5da88655d989c9f989a09ff\n2afbff3cd25cdd426392a5b643ed5e3\ne03d534f3ce3c77d19fb4103277a6b93\n9ae7f60bc9e20008533841f5cdbf3b2\na48e4c2930d39f289d297e74104d3ac3\nffe2bf44f5d9760b9a8ef44e1d2c5b75\nfed87d16ece9ac0ad42ec7e303174a87\n5cb93ef515036277253e170a96a633c1\n7084db2193bc9ee43d113b8340bd5029\n87b15b50b03054360cbb0bb881f838f\ne67447e5ab4b63246d871377f0c1e8cb\nb20204ca63c530fae3f7a74e12a274ef\nd37b0328d4b5a9454d9e7559651bb818\nf741f1bb6a7ef8ff7916bf6f8da94ee5\n92cae8ac60b09e3c6cfd6748e1399a49\n16aca29aae2d252cb8372f06f79c32ca\n18c7c6eed722b9761f8d2643b5438b70\nb1c80d73aa4114811011cbc4b5232a4a\nd7c40ca08579ba4e664b3b9b23ddfcbc\n184f3a06dc5eaa52881e214542763909\nbd39b7924b0f69359d0d74633db4834d\nb4e356d1702c4ca2febad4f49b26ec52\n392963c87d26a617d5d95a669ff2219\n3eea280aa5da733e95166372d7ac113b\n7dc6c6f96b77b7d3febad4f49b26ec52\ne75f2a369eca1346b157bfb9ccdf274b\nf28a91c02b1f32c7126e8f891cf24099\nf856245a7a9485deeb2d738c3fe5867f\n4bb4904b8f4c7f8b0e5927ab4191382\n1345a6b69c9e7330427e34fb2aadd7a4\nbae99f3e4af5bd5ad9b53420a5458c53\n3125b833a365799ac79619984c97c1ff\n11cf833ad0f8ddc1a6f925961cc8367b\nac1f8fe1e544b87fc798432661977bc1\nf1c3fdbbba8e36bf62a510b8f97c658e\n4b95230707396e18916c024499b21ce6\nf9d405eae2dd08fd12439bb9f264f4d9\n449c32cd053b97ac623f20df7a811122\n49230cfa054929bc718a34fa24049f1e\n11a559d19457ea3950cf3715818ccfe8\ne7c6731436bc2301bf94502f7765c22\nc8aaf90c4e66e235b9c440034ab48a1e\nf252711946bff75aa5234533e6540c01\n11ff78cc42de92ca597976c675750537\n30e642f1d7b0d8818430b7446f9e1252\n7c7e0d1157c727371c7fe5be55ca5cfd\ne6cb56c84042891b201e82f29479384c\nf65decafeb2b8518dcfcef693e7ec696\n2f4d4e41a5ea61df8cb5d9909aeb1309\n39f03b3ec91103af33367a1c9ac6c143\n57213d6dd723e767cbde89e0c48a01bf\nfc31999571a8bf64ad5d470346bc4d15\ne0194110e31c999aa91c75874136f43d\n26fa34f25c673a7f4f41773fb12c1cbd\ne026b4997f7d037c39d3717288022c20\n180dd8913e894dbf5c6a44a505804654\ndb454c99849016f8febad4f49b26ec52\n3b9f12fa1f257b9d85fcc38efca7d59c\n79b7bd0c910e833ba5dde908aa701435\nf97cf997df0945fa1e09e4a1b10c649e\n67a9dcc974fc402552d23bb2388b1b0d\n1e2565b2c28e69d3deb25e31ec3122be\n9826f7752703d7bd58cf2448c6d2934c\n54a22269051c9674cfdf2d08e1ba2a48\nfc9116a6ee32b9b79223fc014b68160f\nc5faa34d589240b859d0a47cd36512\nda3e68c20b832c47a3b06ba374e12b77\n1f7143556f4d75522d1adc013ed654e9\nac35b0d3d4b33477e76bc197b3a3ffc0\ncd2ad198854d47c6e5e7067ae780b222\n1aebb6c07b8d53737062f2d72cde5c95\ne2869255db01d51df577ff4de1ac394c\n78e1ea4568b0a1f5e7608f43dfbc9312\n29b70ee8da440240de98d10ab5975b59\ned00de0ec65a54c823ed665630afd1ce\n4fe648810cf1b4b5f4ae8c93f4db5e6\n9c9554e0883818c9febad4f49b26ec52\n1cb2fe52097b5304217ffa735084910f\ne0be4621b0ea9893593ebeeedbff73b\n2c8cb823e48531fa9d1db1d6d9537bce\n1d6e0462e30692d8492d9da2668ec34c\ned8dd7ac0d865ac686f1a0f58f951001\n1949b4cd6b88fa0713a5873d239ac557\n1e5db720b375205315bb540f42facfa9\n83ca8d37a6f44dff1652fb73e93ef5e7\n15985d08df01b47bf0bb193323cf7c6b\n445528514535ca621d5ccc40b510e4bd\n6bea2e040e199020e0c5923879d79f21\na4d907884de88227febad4f49b26ec52\nc0df578cee43eb8526f51cb1aef0ea9c\ne1581daad0ddbbe4465d230735fb8831\ncc42f5cd765780d5dbbc9440457e303e\nb6ee1aa4e11df2bf8f5708c6c7585cb\naafa8e4293eca14d6bb54533c16c8fa\n1e202e618d6375052945e400e1430726\neb34935c60281450d42b9650f19dd425\n26305aa1754510f79b3e1be3524f72f\ne21f715035a4471ae7fda7f082299746\n4e5fc1f56057d5f439b1b7041443703a\n5153292b91b93dc772ee08e78374a212\na275f4b42b430eaf320f10afdfbaa18\nac9f82fd26fba6aac45e8c8bb42d23a\n8991703fa2ac67e7310cd758d9b7cf\n4d959d3b7b3721d448ee6d5fb14cf83d\nca6071926d0d910372ee08e78374a212\na4bea095f35a74d0e6c5cd45aa112726\n6ec67ee0e57282c01e6058fbce2703bb\n32a6ef11cd29c6333002761e7a3ba3bd\n8f940fbfffb9b3cfebad4f49b26ec52\ned66ef9698fef541b945039752747042\n6a94aa414d11c624552edbe2a62e882b\n656b7353e4580f8fa93e942a054d60b5\nb31a613e7f289c8bf5f6997e99549136\n7c3507fc4eeb9854febad4f49b26ec52\nc3959f18e44ed46b40f4518b250404ee\n7bdfc4bd3fde9066b0028474d8c979d1\n72f46e20632f469c9cf718a4c796aece\nc1c52930adc815564810cc21086da42\n5463f71800fcf2e5e89951e6ee90b3d8\n8f7ffcbcc7e8e5a4263a16a1017ab2fb\nb1dcc70ae478e417664b3b9b23ddfcbc\nf70b502758db5927be2f6e4bb98bc38c\n681c53daf7810b9f92d5b25c536d8044\n81271aca364735e4e6c5cd45aa112726\nd6874aa362830375ef8af3aeeb9bcffa\n15647d8895f78f6096a3517f50eeb9f4\ne920d6df55f51b9d3abfc4d0a5688916\n87935bfb0ff57aa4668ae11a7db5e82a\n8f8f98df7a9caa18febad4f49b26ec52\n5c7dde9febf82c72e4d8d44a2bc9dd4d\n6f03a6f024145fc9febad4f49b26ec52\n20714210c5319a68b16d12ee250aa07\n233efac14ec7189e809222e4341a7d65\n60f273bb4993eac8d4c42dd307b636f8\n6b457dbbd8d875afd3520bbaf4a08c12\nf294a34bf1c9ebb7f12d7184a2ad3430\ne55dde3c1153ae5d7eb43b1b22d3185e\nfc66d797cc6b4bb672a7060b4557c0e\nea559127f7f21405372d8d157558385e\n11bf776fe946cb7af897d07ebee05db5\n3763dc87aed9fd73be6b1cdaab15028\n24672a92667a51885878d4300758f637\na37bc9fad75b6def3087f84b199fd297\n11fc4731e38789e0210283402c81dbf4\nd4a1fb16866d22287db09046a5e7a0a\n899f815eaad62b56d8cad143689f8b51\n1cb0232d2ec82f9ead135ea7bc8aeff3\n2e666b458f1641f248cb96c78f6ddc11\ne39d56046b309a64229048a9abc3ab6\n15dfec695110505227c1f8d037f650\n2181ecc9b382a7a873fdbe4b39ff4036\n4391d4d7984a245be0182fa3e963fc11\n631c8be7f3559e4e5691f959a7121ab2\ne0229fb0e8d85e1fbfd790572919a77f\n3c1b4a85f3a287fe47d51fb55a1c2980\n4b548d4f399066e1c2f0a1a44c64aad4\nf69b664bb78a4c2f7537eb150af3dadf\nda9d681e20d2c123604b3895514420b1\ndecb34ff7d69d024e6c5cd45aa112726\n1d4e22bc8ed400fc368162d385acdaa9\n67ac830369ffe09b664b3b9b23ddfcbc\n40ee6a47e485cb4d41873672d11706f4\ne72ff1a58d752d5867279908dcfb86fc\n7478ed7307756ccba10ff7fd5e43a633\ncdee5ccae3613c507e1dc03b595bd36c\n3eb80174aa72a62910126c0551113ce5\n2892423e515ee379530176ce07cad21b\nba49e13288189be6fcb704ced9323624\n93d4c1821a6eccea462118aaf3f93639\nf64138f5515e5031f785f45147f3e474\n3c12d6e9cef0adaede2627e1e10e2802\n7a702fc01ec83c36b93dc42f7dcef6a\nf73d62321bd0a5b7d42ec7e303174a87\nb4bc3e5192dc476f609fb05dbd8681bd\n48dd6b701f9909da6a8a13d57e4d05f0\n156d606fa86ba19c4eb174a255d0ec5e\n610f10d57a44e0d1ba18ade30e563d37\n28710bbf732bd651c955e5ed03ef3a2f\ncb7114df1c8ad743af04c22d77ac98f\n62b7145b5920a67aba18ade30e563d37\n"
  },
  {
    "path": "data/filelists/04401088_test.lst",
    "content": "45301b15dce2724e483a0f6665d9ffe0\nc4b66fac952d4ef7d9039fb3a1715e96\neaf85cce060622c88de42b14089e0e7c\nacda976ba347a3e58ba35fc6cd3da287\nf48acd0450cf96cde6b9b562e2cde99e\n8e9c97d54060d1282085d549612807d7\n7ba45cacce4b4c09c7a217851f86faa1\nb984d7e958fe9eb961179e7ef17bf7b5\ne006061cc51617b9498dffe5de12eacd\n2a38116473099355498dffe5de12eacd\n3bd6626a05b4f79bcf17364e7927abd\n96f4e3797b8e66042b8a15395c060463\n295d6f0caa702a1a2f58405e4baaa2ed\nab2cdd82bc69255f1fc489fbdec3fa1\n9b91faa0835a0287db45a112fe2d5592\n5891622298f30916f31b75c4a94a8879\nb801c4ebbc1149b34961b0d325e91640\nd56bca3888d3a595e93f5e23021ef900\nfca7558e383a8200a1a64f95774cf79d\ne3291bf83de108ad98b4ae7d0ad0f9\n9c5952804e0b2ba3e1fb8c5792a5768b\n67743ab1b28ab5cab3fcf86503541b68\nc960421b8c637137fb4952f06d5e75bd\n57aa54c9db88e364502122ac3599bb74\n800ef55c1401c26ef5d4e1af18c85258\n743b747a119307e8e3785a46a5c831bd\n79f11cd09522565fecb1ea9fbacd5278\n57daa58dd0715c58beafa80aadbc3232\n2ef0e93ce68dfa74bd1f358005ee8ea2\nb575152bd96a4dc4adf82b2748b1cb62\n80d73417fa12508d7d6b888b4eb1ac9f\nb490aed1d7d9a42ec4e2c9b051d6a014\nab5fc5879ace7418bdec90548bc24588\n6f725c21e92ae3e8dfac5fb05629bdfd\nb7741503cf1fe40378bfad8b5ed8c4ef\ndafeda191170938ad33f96248c28a3a9\n87b696d3942f6845fe75c83a5776ab77\ne11ff7bea65e8545c3f912172873d52f\n2fe4f1ea84cf924ea4d4dcdfc6fd3059\n4f2b1a13f06a85961138452c33de4a3d\nba9f7bd05d6f028fc1a1659eb4f57afc\nf1f794c3b6ed8951d07b37cd4d789f4d\n8b291d445d412c09cc018c0e073a98f6\n10b3b46298af96d40e7407386eaee0f\n68082af238b7973aa4d4dcdfc6fd3059\n1f4e56064de606093e746e5f1700ce1a\n96700b47eb9bf33889a1b8cd5b44ae5e\nab47334a425e1650bbef66962a25aa5f\nc771a9b2dc439adac38a7eff5af707a2\ne85bac837e951f3780ed245d94a6a268\nf928f74ed34e46c4b5ce02cb8ffbdc86\nd62ebc23fe1a7e6a985b19765176f4ab\n19bb5e75692793fd45df661aef5d0a33\n57056c8f465dd1aec03bc4569d70377c\n6693fcd81ce5a4e6f5d789e33b735c9e\n73ab63e7ac7a404b545fb5ece69fbf4e\nb4c1d8191707ead52e10692b3b33e38\n6c53f579c7a8da15c7ef7dadd1baff8\n60193289e8d9689b62f6b877265e2679\ne97033321b1930ed4391592096b033ae\n424d356bbbdb38daab0fba1d15eaeacf\nfef0bba982a4ad5296913ea8ca1ac015\n7cf110165b54e7511d3a21e67b7da85e\nd0c5bdc45a59669a39a4971adc53c51d\n3f95b3ecbe55c83e9c3a7294039d408\n74314be9ad38b02171eade9e9bdd0f45\n162341ffb94a3884e4ba5fe92f32019a\nc4dcbb047d219cfeb4018979c856c916\n12f2156b99444e955d73afbd7c310e93\n1a0fab14a11b39d1a5295d0078b5d60\nb307961888415ab88ec5d235d7e81cc6\n649c8024460077cce8f3b203d0634c16\na53b3ac989d9e6f35f8a15a7cb97bf7a\na4c32dbcb71076d5825732a29ddd146e\n43d96f5a6a619c06bc663b874223ed74\n8f3250e029d561341b92a1339af2f7ce\nfc07770a57d7a87022d3f170937c6a0b\n98eab6b7dee0d64519907bbfddac6b6\n2d3208fa267160862c611effe1bec8cf\na04e8cce46e70fc48f2c50408e4e65f6\ndacb3f6f6b0cc7a52b1abd641c06dcad\n2e6c1cc7d262bc36c1d28dd38097a536\n83dedc1afeb57e199edca1fee171b669\n4458a5056f633fa13abacfd1353cca42\n692ed312d9ba1663577cfcf36d9b3392\n294d1fa4193f54528db944c07f28e3d8\nbdb87a4218cc7ecd23bb4223d09fa6a0\nd61ddb57397143e38d03482ac0270137\n9f6acb21f86a88d93ff936510fe2e02f\n709a0c498dfa2b32db9f110046803f4f\n9e2169e8e8186a3a27bac6c74974cca2\n2caa10c91355efe6ae2545602370c249\n85a94f368a791343985b19765176f4ab\n63e84b82309bae535b6795b7faa3170f\n257ef557fee9c083324b3288c1587efe\nfa98d507d82d325c80202e5aaf48e957\n74dd744f5c5b9d132fb56cff2a0f826\n23cf8469ffbd93ff8faab772f03eba4b\nf022d7789de219e1fb7ad0eb0a148aa8\n93d617cb7bf7558671fd17a89eb6aa70\n7a458ea841e4e67a11ee7ca4f000feba\n6d7a0e701b4417504161e123a102b12b\n678ed514423f067fba55419d0f0e294\n58ece48e59781da1fd0a2086d631b6a0\nc1c23c7a80e4bf388c34a8518a7b6811\n9e98174951026624164c8c77555f8e1f\nab621af8d265667a396287d16057dbdd\nba669a9b03186ee8108c9111b239151\n158f605ffbe6b036436916a86a90ed7\n4f2919438ca46d8de8d8ad3bdef6aca2\nc3ded7599240c96f8bbff91b1135bb3c\n3035c3d7d7eef1fc952c851f81463faa\ne679783f54c36220b99a2cc4ddf0d3f9\n8b174c67bfa00f03df269b2c62a1bd4a\n9878b77e157e4b0dffc2eedcd24a87fb\nde271ee7c512d31551c2056c93a582cf\ndc2c4f42a5715d0a6d1ffe1a45470ad7\nc8550b3e45672f5d891ef59b77a7541b\n832d6075c8fafe4de862e3cac45aa769\ncc6c216e25469966bf14f57b214697e5\n18bab729642c42631308c95c9c0fcafc\n36ff3418849b9b8635d9dd2d03e6c396\n5ae839d512364bd4da0f54fde38627c3\n13dfb842c1944c64de3b109acc7ed8a\n69e334b26683a81935bbff93749c520\n49db0f97d215a109a2db3e68315c7819\ne96198cfb23a8b9d1d7ccb77d69f693e\n520bdc1f312a9c92e44148b82b01a424\n590017c9eabc3a1cfe8474bfd438f6d8\n68918effca4b9becf3434ae1311a0329\n856d33d16a97605bc9164fb9f03dc1ac\n98c63a8e5485b0a12737a4ff69ca3cd7\n7176e9baddd8a2ea33ac431572f43a21\n75d6dd4112038b8359aa4ad538fd90de\nbc27ec84fdfa912437ab6ee77f8c5e9e\n74a65213a90e1f2d850a112e6048afc4\nef34d9789a83659c9f8f9b52e89f6554\need72e5bc3dc4e85150c05906b260c9e\n7483bc04eec05077b6d41c42f7ade8c8\n479e2ed536698d478f257ecba9a6ef8\ne0355773a18fc61224d795aabf4bd88\n9c2e939e173fb6e88af54f33b2f21f70\n198557f515ecfe73f3c5246a46375579\ne3ad9c85b958737ef7c1509e74f67ac7\nf75cac5b112f14002c32dcd0becbedb7\n2c8699277b2717be66289707fcc0ca1d\n20bcd48918a843946e74af071fa12682\n541cc8b3ccf4c799502122ac3599bb74\ndcc94b8d84b5093df47a365062723f15\n678ec09bbde5f116716c29316ac4d0a0\n39b91aa425472c3676fb191f3b44695a\n738e377ef785ee92d3429357dd0adcaa\ndb059495c20c0e2e514ce6dee24d82db\n89d70d3e0c97baaa859b0bef8825325f\nb7dd49e4f54f736afd5d38d2ca555422\n4cbd57cc8e6aef9f2ed91d160fd4ae97\n36290375c3ff67b9fa391a6b067626b4\n15bc36a3ce59163bce8584f8b28da0ba\n4133d764b4ce5323a44bdc236120a21e\n99fa43c391f71ffd592461222e5fed0\ne2784eee13f340f2195cb740f5da17ea\n62a6de09ff956e997b239f1b8ec0d46d\n42ce5fc532b667bf9f8c6ee75b301991\n235cca962513b7a7629cefcc54d102ca\n170f4eab739637f2a101047bb63a1772\nf2245c0ff356a85dda10b9c82531bbc2\n142e9e68380daef34eb88be3370bffe7\ncbe652c317a4366b4298c9fe028be1cd\ne8c4ef4c74c631e83628c1e9941a8ab9\nf46531484dea3574a803a040655859ad\neb6fd5cae6ee26c8a2651abaf391628e\nab2e514557ecb359224096f37ce8c08c\n10a1aa2255ede06589b4abee87a908b9\n7f55d778584ee63d2271b84575f49c3b\nde48276b397bfbbe8fc27711a3d87327\n7a1eba075f17d7b0a456028305c31de3\n1049bf1611874c9cf0c2cf8583536651\nfbd120d2c01484d56c95c6d882af3c0\n5050d6be55dbb7cbbf82a0d508a096d3\nf9bc179b45d2e5ffc55273be8e22f2c\n67b3696286a96a8c171bc7a10f38839b\na6fa27ebfdcfb0e165f198d5d73e9283\n75dce3b2e5152c01ead1b13838d77bb3\n52541b667e4dee9b1c1be4d7e88f11d5\n4f71662203c45d66cb2c0b430ff869c\n2682cb34e7db8735bdc7fd7cf135ade2\n5681c4fec43043c1a9f85d9079e13c55\n5f03b8d583798f7fac18d1d66482053f\n58d40261b05f9a148abea0092096036\ne7ef78ddc23ab4edbad0eedd46c6260f\na262dd4b61d374c8b91c0e89daffb776\n6adb3426ac55ba827efa8dff0d683ef7\nf5eb39c7d2e7452ee7ef9fff09638f8e\n2b829a38051e6f8d1f6dfedaba98d5f9\nbe7a560b2a6996558c646f076042ffd9\nfcd923f9bcf1e859e2a1e51fbada37b3\n597b3a321198f0a029b6ce1cfa22349d\neb1fa4d2a399d4c38334e57fff4eb77b\n467ab7ee9487525b13e4f8e4c4578272\n30e53b35873e59da73ea3d752b4ac8ec\n652a6fd052491909ab19ce2dec0d1925\n5b7901974a37066aee44e0ef4ed60fd\ne8508eef82fb9163a1288f74f9304471\nfecfbab790d979a25d560b84ad8d9e87\n3ef3e3008fd2696ca1033de17902ec9b\n57245f4db78fc2be7aa291768a04b26f\na2b921dea6df33765282621e4b0cea7\n91240b6e6ca6136dd25ac584f0a4b696\n5ff8806e12ef72e0650185da4813c6fe\nfa21f65c051ea2577500d68c500fdb4b\n7c134eee62290ae7fd130953acb6f543\nc13cfcc92e41e5a924fb403e4bf9a6b1\na801c5a24131f1842ed91d160fd4ae97\ne71c51adfe4d4f00341e76467b172f31\n719a564d600f1ab38162d5a2262f4a8\n34d8c06ade78bee87e273378b31b6ba6\n"
  },
  {
    "path": "data/filelists/04401088_train.lst",
    "content": "611afaaa1671ac8cc56f78d9daf213b\n9f3ad4e5f16f40b3d0f9f958bc79097c\n21a7e90867b64433316979ee2b237f2b\n74e5759913a2ac208b0d3d4e51815944\nb8555009f82af5da8c3645155d02fccc\n73339a7ed1e72d89aef10502d58d4967\nfb1e1826c233104a4e09ebaf49b0cb2f\n6039379abd69be2f5383626fb6f0dbda\n474b04796bf1ec91962bfd5bcfc9bf86\nabf5c8d2cbcd97d81a0d6bd0d03a1fc9\n202fd2497d2e85f0dd6c14adedcbd4c3\n16549bfa3cd0f53d2110cfd44d2335d\n38881e9944ea86dca374e5b9b6427c16\n6909da0ff58823615a82137b384b94e\n7f643ee632aa0a3f51ad7743381c8a7d\nb7ebfa514d14036e2da685d55be1eb\n1b1969121f2d099b27192dc5dc6ab252\ncb21dc07d0ca602b151d8b52c53b90\nf18dbf3cbc7d3822de764ca2f457c756\nb207b3f3617db6cb85089a13cc567dbd\nc9a50d65e19a4aa3e2da685d55be1eb\n4f3c487c54ca29f2439292e4b8fd557e\n5413423e80c9f264abe7f17e61fac246\n27ef3bc1f4a05157bcff4302eb453f85\n816aef1e285ab957b1c67c24f425bd0e\nd6120b12aca39e73cdbe8a30cf95821\ne1b7a28e8f8ddf15a4ecfe858e518c15\nf73493b7c8a78000b594bbf2c494ab81\n2216e78a43c5d587b8e1b99345a5afd4\nfe9d97823a25e56d95e43220ee0eb824\nb18f0d53dd3db1999410a04d09c14d1a\nfb050aca4d5f2573cf1d3d11d6121bb4\na434289b281e629b81139543c959a70a\n6e183cdeba6b83b3805062aaa3bb7665\nff8676e76a0fd471fc115be4ff5cfb9e\nac6f6437f9e63981b6d41c42f7ade8c8\n3bc6f902628b3f7f85f6153ed2033a1c\nac1e771d6392e912f594ca916b37180c\nd7ed913a3888696d289b03e5721252f3\n8cac6df50c515c498be6bc9d57b6a438\n74aab120cfb4d88257de0221db0b9d32\n5101c0131cdf76d03f9d84f9a87a44e4\ndb89fa13b1c3c53afff0e9d5e9e3da5b\na6b2c1427dec317525bf2427892579c7\n5b111b3a3e94b5907e1c85c5c15da7fb\ne458abdbff34fefe255591a17641445\ne30f2d19e9f44f6ab0cb879d4613195c\nb35c2da756f8df5aa0eb5a85db887292\n1847d3782970e60679510444cc61f839\n77f5498dd2277aacfd71ce99fb45ba0c\naa833540c3f2d77e2915acf4d1de24fe\n73b87e2025cfdb6daf19fa8e8218bf64\nf3aac8f54f5f2a2f983ec12a2b33f18b\n308cce8808b076bff49084215d845d01\n9644fb6a1520af7fa90f3ad3635b46d5\nccfac9fefb0326003f548cb8701b2293\n1b43d9193794748e31811399a4ff3aa0\n1b41282fb44f9bb28f6823689e03ea4\n8d55c1677626cc48214d974150b798e9\nef2472e661320b03e324fbf60278e45a\n901a0180abe1011b3c629b56d283e7b8\n4bef48f1c1b4a40fbdeec9c43546255e\n70fe91a7bc072c39cf81faac56233ce6\nfa9b007a326be6975c8fa950032e0987\nd2f3eb92a31649647c17b7a9bb17a24\n8da5c29d14a1003d23247d005da93d43\n1f93dbc9622d83de7a9f0bb7b1eb35a4\ncf7973f49aa611346be7f66e5722d994\n43b59b01866f23e6f8d380ef6d10e2a7\n54bb14aad2406a124ce28f0f1b509eda\n9dc0c2ca8de18e28b4c18e3209e12990\n2c32c1b5d13074431c1943a82a09125f\n81f527c62191bcd465c46de8aef92580\n1d9169471bf9223423e378ba27e11ea6\n18dc34a116734b43bfd324d8acaeb3f2\nff8ba237ee9164c8ff86292618094648\n5a37ad3759b4d93df843a7d4732b1d6\nabcda75b9f826fce8dd7bd77b545a577\ncfdd44745ba101bc714ce1441b585593\n1b1aaa9a95ae964746becd46a4907f38\n113303df7880cd71226bc3b9ce9ff2a1\na9d358ce2d54d95e54c7ab6aa5674ccc\n922380f231a342cf388f6c7a9d3e1552\n6ff995a8e9faa6e83e43be0b542efff8\nee7d2d986f2c989ac66dc18b3cf1700\n85841bf9d27c85a26062f54263899d21\n8270c952b147d263b9746cb9e2b9d08\n89019c955310bc56eeb3fafe1bc8c07d\n5c8d554075a904bfa7ca3fec59d82214\nda24f27173874672ed7485a1aa598365\na82fbd031a79f88eb6d41c42f7ade8c8\n2a6d70bc7ac6db391d4136675e1527dd\ne48a2eff0b0d0a39a0eb5a85db887292\n692e5fc16bc6ebd23737433332467411\na4d81a74a416b88948637414dbe9de8d\n98eb601db13d2a99611f4167fca99b42\n3c0801c11fc7e4c5f31b75c4a94a8879\n1ac1e6fc09611ff049c647f92ae11714\n3a3fb2919b1bd92658c2dcb60645f75c\n1cd8004a1e0dd825c33f370fa5b41cf7\n722acb5e8ccd39391e5d846d206adf3d\nd9ce2d0be1f3952aa36bec4fa7cd58c9\n5e6ee0c5d155d2298b13932a0c28e98b\nefed528241cd773fa2c7c5886f4bbc93\nef2b505068cf120efe48f52a0ccc160d\n2eae0713342e1103397d790c3d0a8fb5\n39359aaddcc4b761b0a79e28606cb167\nbf15900bf5afb946b35f223cefd97829\n96b1d230e88cba16f71555c6480aef72\n9dcc24af7e0df254525b3f0594400a46\nb7ab1b6f7dc5026dea8f4709e6949c8\n6167bf752533508dfd6e968ab91bff17\n6bd7f7a17a7bbd2d68acf22a03600648\n7772938405ac56c1b6d41c42f7ade8c8\nf5f1fbeca9af99c98efee9b82d757c0b\nfc1675526d043e81a2811061ff7e0824\nd944c42ad08401651e5d846d206adf3d\nc202335fd3dccf9d45e2a4e5729b970d\n4991cd37af08577070346e4935b9a42b\nbcc1760ef463671c825b62bd6c28eac\nbe66886215eafadd56b70d2dbf032aa1\nd41b332b9e6efddaa0eb5a85db887292\n6a073661711d8b9f1a5b805dbbf26206\nfcdbba7127ad58a84155fcb773414092\nf7cb2d921f246c00cc8eea03ea8843cc\n8b11b38e035143ddb007a3ad40c5add6\ne840fab2f764532ce4bb3cae511f21f0\n8f049b65309d8390f5304dc8cfbb76e1\n8a56e999d75c4d6e8d1dabf86742ec3c\n25eff75e43287223f1cb19f636b1c2bd\nc3e18e5d0f7a8709e41b17b375798648\n1292caa1282ad8cffc3c4ad908ac06f4\n76a4a3e8370bdc24bd2d4107e8dc02b8\nd9d06d2772ecc526c0dc3ed657ab97f0\ne13a5d5b3f7581cbecf207e73a787c06\n53cd656555da181db6d41c42f7ade8c8\n457b4310870bcf047f4e0c14aca1a926\nc864337d009c823290a9c3b0b32f8569\n19208607cafce17dcb85f279c97d4c5c\n9e302a3f21a992c0bb579d1d8d989550\nbf0f0ba650108d03cf144715a1bb5595\n9efabcf2ff8a4be9a59562d67b11f3d\nf7fcc773249429a2761eb63018291094\n953a952a18e389e4eb386a4e845c05f5\n38afc0467599bd6bfa13d53e5e4a7d2a\n452b924abd2ece2d58932236a22029d3\n71121add7e94b024fb88c3d40924fb73\n4116965029bd24393423610e52061098\n556b1ebe82977992c51777c7f8bdea09\n7f41f4b186fdf84c7ecaf377af2046d6\nc87bd717c3640f0f741e88434245c899\nbf2a5f434972f11a690a03770c5de186\n320d0f9256ab9cc3a046bbac53886364\nd299bcdfee69c57d419fdfebc874eb8f\n312c430f8b1a3fc80249ed612e14df4\nbf7daa3ade10ee75bad093be69512dcd\n58c6118bd15ca3b48dd025faf4cea27d\nf8d97bebf67cad12a0eb5a85db887292\nbef91c1804ec226e5b1c02ea3a290822\n2acc3bd87282a7e31da45817bd55c1e\n5e87bca3231cbdf15b5f05be350ae67e\n9fac50c7b7c72dc694f8f49303e93f14\nec39e26f8c0829b3413ef77469a0f9cf\nab8243a880170c00cca1221aa4c4f70a\nf760cdb0f8cbc6fa3c28e819722231b4\nd72b00ba0cbe10a1157f4a560c24391b\n5286f018c374d3ec3f7fe3cbfc3d51a7\n610a9f79a2f2faacc43c9f60fcc79b4c\naf983238a3e47692f90d7ee51bc3530a\n84cff93cb8ed08e55acbb5d30672759\n424ccff9ceea33451c81652b127a0ec9\nbcbf0ce42d2b0f91abae9246594d3f7d\n44ce10ddb982c8ff72152988eac576ab\n3ed359e502a24e5a79510444cc61f839\nd932fb5d06d5e4f8da8c8a88ff86c5a7\n9c26b9b0584920f1539baeab407f4a02\n5fe99904fa4b22d4ff1911c2640f2e42\n383a304edf67f757769dec5ec0157054\n420138dffb14f929f0b45b4b4c7e33b7\n7dd788cca7df768495b1245be456cdf5\n3036e6b2a898fc85e85776440ad91264\na1e51e185a9f24354b8478bdb97333d3\n112cdf6f3466e35fa36266c295c27a25\n313e9b124e421a4efa9922db9b6aab31\n92ec69548761efc61f74e5d5bf005208\n500fbdefb58e261af2cdad303f49c9f9\ne06b902efc1576c62fd4061aba358325\n271421566061988a93d9d97ff82834ba\n3bdd569911660da81229c79e4cce736a\nd2636f3af00fb3e2538f655e65b0b57\n1101db09207b39c244f01fc4278d10c1\nc43c9123ed893de5a0eb5a85db887292\n17072ff9ec47bfadc3fd2392bc923b2f\n878135eab6ae9aa181471a5ba59fd0fa\n89f17a3563941ba9f2fdbae39bae1eff\n1f565ab552dc89727e51366b0cf7747\n2a48a703451da580555dee99eadeb47b\n6609f05bbe9c49172cf708d3028fb325\n25e03c305f41c5dd226bc3b9ce9ff2a1\n6f63df7ca322514f41ced50d3a574698\n59a168f51f8d7dd9e59685727bdd9ae9\ndf2299185baf20a17b1546f309a98bd9\n31e8327ffa4ba6a87790cd6f6e8952aa\nb1085da37756ddd1d3f1ccf368ff60f9\n2df0bc8b46ad3cb858932236a22029d3\na698b67778c02fcb5a0a15c8380e928f\nef57d8665eb5ef7cdb965514105122a4\nf77811bd35b9215dfd06b6d6f44d62dc\nbbbca195cd6b85f1562c8e1ac545ef78\nd37afdca0c48251044b992023e0d3ef0\n7bd9b1b1297013ed65f78a217bb320fd\n27085a2456319497f1cb19f636b1c2bd\ne8e9617b4f7247fa3578fcb734a22822\n2163366f7c3a7a0e6c63b8b48495261a\n35d370a1531826adbe5693b333a3dd92\n3dc95447a57f8d06c1e615a94e798da1\ne513675ffb2da709a060e584e7409aab\n29f27d4472a17e723fd445ae159c2cb2\n1bb65c38e6b563d919bade123d9b1a21\n144d8038c1688e37ab3dd76bf33b0f5e\n5deb3e8911dbef1adce6ba04fb42df\n68189c0fdca1a8744db121a0d72356af\n52494d36a6d136f6b34ae4286be3d813\nae7098f0bc20cc6b2a87aa332da7bee6\n436d7a114f72dc03d4713685ae50fa13\n234d1646b21fd765ee45e1eced971f52\n34e36249166b8c6bc3f912172873d52f\n16685299c37055c2be40226527c9872\nb73398902d1c267b5eed8c8b1cd54386\n49081a0c0cd4ad32166f3c6af52a7c59\neb58b011745519194fde46457697d80\n97e214d6b93e012f6337fbfda5096043\nc7e4a425cebaa04bf9c8feac0b33491e\ncb9e8cd0a29cbb26b6d41c42f7ade8c8\n54539e30a59cce413864ee650d9e9c5c\n2cbfb354e5dd731dfd6c7e3f0d9c56c1\n267a2d6fbf29c04cbc17518d87dd1f7a\ne691c8f0fd7d64d7ab0b172d4dea80cd\n52d1db0a460723949582767760266e88\nf66d8ca1f6b259de2a9eb0f146e94477\nbaafe1add38af23a5f0b5b54dbc4f35c\n5bb9020da1d3bdc260a9d7568d474ade\n774bec08bd534dd28a1687774f473322\n76781e8b967f98b5a0eb5a85db887292\nd5fd6679ddfc8ddc59f56ab706e2f74c\n3ff176780a009cd93b61739f3c4d4342\nfabcaa4858df16e35817e30de1dabac4\n609321c1351a955c1e1f8455cdf1c0bb\nfe553cf733e29a349426aa93c5c54668\n3d1d0255e2163917f4ad1770263e7f39\ndf90c50a892611ca8536be73396b323e\n78b4f3aa956b52139531a714ad5bf7d5\nab9c56981431ec70f7b18034d9df056d\n40dbb04ab8f780d6cc571cd3cf8f17a1\nffd186dcf855e13e26479a182158bae5\n5828a8259ba570bbd24e3068806a8c67\n8e3e1213e47661506457f8736d1c9e5d\na3c1c9fc390b1bbbb099170e6f5a4af9\n5e5c0391952208e81213f8f7891e7fa0\nb7049148a4ffa22fdfe197f9f37aa72d\nd4a038b20b1250d7241d076ab53023c1\nceb47998c0ffa704f1cb19f636b1c2bd\nd51e5d7eae216c9ef1cb19f636b1c2bd\n4b96f974453ef59ea2c7c5886f4bbc93\n8e00be7402a612e17d6b888b4eb1ac9f\n6d85b3dfd681eba530400184d5d3220b\ne1a4ea72b1f98e92d265c94f4d41d924\ndb96e9b2c96c273de7d92dda5756fcfd\n4a81237a7fc743763992b1138bb05b3c\n8a26be623e40850a203d19a168d29f04\ne0b1cb72aba261731fa8e666182e8619\nfe34b663c44baf622ad536a59974757f\n521fa79c95f4d3e26d9f55fbf45cc0c\n8ede5d8c00e10a2ff35554ebed2bf2\nd740b0679a9996ae56acd5d5597a72c4\ne3c02395e83fefaa42dbe6bfe3cdb29d\n3c244a5e76cec2cf6f108f2b64e6593a\n2fe9e8fd2a7c512ad1f278e1513f3b7\n27f7ab052f3fce42b35f223cefd97829\nbd7b84ae3b88bd5cd2dd279a9538db3c\n8ea128f9035474394cb30fc798a4d976\n64b6ddb847da082d761eb63018291094\n3ef278f78ddb1db52a39b1d7ef8834b0\n3d5c17c3e60a168bdaab9d410eb59af2\n983b045d30322f96b102e855af58e521\n86fc58a0c40316f2562c8e1ac545ef78\nc3e0378cf861099ae3f7a74e12a274ef\nc410d13694b8ca1d15e144fc878b7afa\n7d93b8dae79d5bbe7015d3b6f402d5a4\n52a81d42c352a903a0eb5a85db887292\n9c1286570bbc6fc78f257ecba9a6ef8\nb02d8e0fb3ec903b4a952171144f2812\naef45c975ed647778768dbb598f40c93\nbf259988d2e8728c391790b8b8084f0a\n6e6d7c2ffadc2fad2fffec7af390883\ncea8f15682797fe6eb386a4e845c05f5\n88c64c14d4b6ae5aa7636d58d56f8570\n453c590f0a1b37c1e0c2427da07ca8c6\n2274e1f494d6d2c3226bc3b9ce9ff2a1\n7afdaca858bb0a964a28575f3344964\na7056690a5bf34d24ffbcf8cf904ca12\n6a0c0c55f355cc23a0eb5a85db887292\n1edc7aa574624ca0200a0406803801e9\n959975a60ae104c48780444eaa02106b\ne33124aa016bd1f19c1db271ad9472a7\nc7407877d3325f7f391258277c122351\n22fc328d136756361e5d846d206adf3d\n6682bf5d835701abe1a8044199c77d84\n57657c2b0d983a1658975870bb96a55c\ne6f4ceda4907fcc13c47272ccf8f316c\ncd1739ec8797049072f1ebe52d9b9daa\n35dc3f0f2f5fe8d667a434dda72a2c24\n81ad8af206d6b21b89b367279b017ccc\na86eec9735db06a8226bc3b9ce9ff2a1\necbb1c53e881c2b25f4e4793ed432bc1\nd7b2a9546b6f68bfd0659574aaccef0b\n2b48b14e226b131af3b2c084b195b056\n69e45e401c1d05b767d8789d3a6519d0\nd79b59ea51a9d80c483afc91de6851e4\n388415634e1056942ab70120fece57c0\n8ec3b148b8c608a0562c671ec5000f23\nee7ef8b40cc2c90d6b7170bfc4da1f8\n2c6d9512b4013504ff0682cfb57a62dd\nda390e1a895506db28792f2ae4de363e\n5dcb666efc36d9a68480fb9b9f30e540\n9a94067c6ae50d59227a8035cf3430d9\n5814df537b8f1bcde95cd0dc8c2f0e83\na4910da0271b6f213a7e932df8806f9e\n33db5943a8942fdfd998bbb6a9d203d8\nb1feb3020d9380ba4fb324159a14f34e\n2d26f853e710b3e894088ff49a6baac4\nc6ad139da5e0799c712cb59213324f9d\nc71acd79ec4cf1cdd11ec2c68afc26e4\n8b4d28e4df5ac6e8656557acf97c5e2a\nd3dcafb368c1defaa2c7c5886f4bbc93\nad66da8440023d8a1e929774f9727b5e\n5148da752bcd11884ce243cdbc967ce2\n912d81dbf33f20956aedbd2a02b96953\nb77f57d319fd864fda5309001d158b32\n1a9707b3e9d8345048891ddb73756acf\n35f584cf8fd22794e4b68d3b17c43658\n9a4812cc600c67a6bc4fefdf821af065\nc28ca490e5e7d104b1508bbfb8b56edb\n5f4937b6e428e4ee122db064a7596ea\n585f02091286a7a82b7045644a6897b2\nf0b3e6f5bd34ca3cf0c6f578f0594c3\n"
  },
  {
    "path": "data/filelists/04530566_test.lst",
    "content": "b497c390de93b4dcba21fe79619ae253\nc991fc4636615e64ed01ae0c90548352\n5a0ca7a6df97542e69c3c818538357ad\n2fb7d918e4a738fd97556ba76bc2663\n23be001cceb4c31af6f70779d83413f3\n28be32d7361adce59e5ca238b1551011\nac93c084dc99fa8a1613e32ab05e546d\ne3f81331fa00c5f893375feb9c1d5577\n8c3148ee031b15446e0dbba30ac27e8\n728fa87ee84c5c2d2fc7e4ac493eaaf8\nd4fcf6486fd18a4982266a2b21a2294\na8976b06101853deb4d272023dce0149\n1d075cc087e9c9e3e3d3b281e2d34942\n2a301f7070178c028cd011e47ff1df1\nb5290cd73084cec0283f6ecb26ba2c4c\n67b312f1ecd5e4a9810b5070d24f8934\n4b54d54c1e9cd6cbff5cc490d863ff3d\n498bc74044946e85484d83b7c37bccdd\n2552d0de59d21f1bfbc6fe0b6b7dde54\n4f8e847d3453f2f17301f2b895d332ac\n8d7c4ca5e08a8a3a6d4334e260ec617d\n924eeaf6f203fb636be14c19eeda8326\neb1d9a98d4024b2e89d2f742ca991829\ne7bd994999e1d6d87ad17faf524063ac\ncb79681fc1caae04a63e14ddd32fec78\ncc97fdf906ef08afc5646791c1cc7f13\n25159673c007368b8b44023403d275d4\n3c52a65c90a604f36d41dce38b96c472\n738eee54143b5406615bb39b45716cb5\n587793fcbae6a6fbf5abe4b4be4c3d4b\n834dead664b43efb1ca19e5e5c1d5766\n70b7ef0d69c7013473965669ebe40616\n2a569537a0f6abd34b5acb1c7aa990eb\n6e52344e2aa435d37e264261353b57e1\n6a9764e3e4127744be2fa29f46d19511\nfeaf5c41e664348220dfe072b77502f8\nc929e6d77b548b27e6f3ce318264cd13\n3838f398264452a47c97d792b03a31cc\n614aaafb767bfe62dcf47132cab9d51b\neb90fdddcb1f25fca60ce6f0a0028c13\n8d8113b30710a6bb68d1fcae6985bcc8\nd5f0a8785afc39120dfe072b77502f8\nfc15175b34b5e47ec57b4b6e80796be3\n1b19bc5a09198bc85fa2a5df3ce5bc40\n927c8ab9d2603aec2d4fe9f5177af0\n4a7375e11a8ac1ae565f244baeeca983\n2c7a846828d3584f2e332a83fed6fe76\n327be46d4b15ba2aa79c0870e481d9eb\nc9d1159874c934f16f1b09a7281511b8\ne3c5033a9367bfa5a6dc0341d8503142\nb032f7baa738f10ef1ec74085c31730d\n325d6d879e306fec3547bc1786bc3b6\nd2f5b582c65ee9567f79d93424b708f0\n1dce61f6dd85dc469811751e3fab8939\n6c99359667a1b49d657a96a9bceb8713\na7444ff7be7aad024c8ad92cfce1307c\n60c58f42072396986d4334e260ec617d\n54b6788d413eb45bf6b4f9d652536b82\n37aeaa30913d6ac73e7331a68f273ff6\n8fb16643e061a3bd82b5804533e545b1\n10212c1a94915e146fc883a34ed13b89\n5ab18f317c0a5d21576932faf8645222\n9380065fd20eec791a7be2887bc37d1\nac736a87ca813c6d701c68e1045b606\n1a2f00c6886f14354d85fb76de815344\na85ef79371cb1edb52fd6b83c5929135\n8851329ba7c3394d41556f795d265590\n47c53f9cfdd4addfe054bb56e3407f7b\n79803d0a02bbdc93ff790997f2048517\nca529b32d5bccdfe7d66e5fb8a76ea1f\n9a0c149f5c47207f22252c899eb7861f\nc29e6490308ad33320d713ce6286f99c\n721a41c68f8d1e1af898a4b2192a12e\ne00d3546401b6759710b5d09f274df\nd65fc1dbe7fe802a5761a0b53ed37cec\n635bed8b6b180fa3e65273dbd0c0f949\n2d136ffca92d9c4e3639e751e7f78cf0\n5f1956ad3dd52a69d3a2c7c88c74aa63\n2080308141b05e9e584c6557cf979aa5\nc23960425c8cb654c6cb0dfa2f14f9d4\nd1f0353c7fa985c91915777d56cf77e0\n27bee532a7cbe5dbc4bd6e2ad0dc6de6\ne765446c37351a26850e00840470903a\n41d1856d2e24a738b4624ce09086ad45\n29c5c9924a3e1e2367585a906cb87a62\nf17262f7443b98de38d037116a032a18\n5aac718c51fc73ca00223dcc18ecf69\n3283111173c12947622984b5941cfb8\nd9e771ae62f0bebd28642b2f4910862d\n2c68972ae4868355a6a720afea6887c\n6824763a090a0b2fd942f20c59bd7ad0\na51410ca51a40c2529412f6cb23454eb\n1d2aa0bcc9ade276a70cfb3232f40c6\n72a9394882b8151bef94bcb012573cf2\n1175df3d5cedc3365c00e52236fed2eb\n24beb61e46bf6b1970d557f49392fb1\nfcb92e30085a580d9c6645849b3b7d65\n61eaa4afe332ba113547ed4d05d19f04\n189668ffa80d37877622984b5941cfb8\n72a68c898941cb3541556f795d265590\n24000ec6bcb6ab9182b5804533e545b1\n607b88a99de743eda0fefbd3658c7966\nfa2b5f163549ca457ba04de7d6d93ce8\n68d32bb51ab2050efe999a207e6e230e\ncd4240b8246555df54102e7ecaeb1c5\n34c099dc4cbcb0ee7c304709a8c6cd35\n7103677dbfe63b1ff85fa5c7c88c6c9f\nb2f200bd0861e1daeb78d3e0a9401d4b\n6f36c486675210cdd566d7f46e9a16d3\n587cc1fc65ac4991ff920fdb73e92549\n2f004ec4a719d231e513e51a78e5ea1b\n9122c94c6aa76d9e652b5e55e45d0bc1\n1fb07d5bf3421a46e2b83b21c9537e1b\n283dc6c755398547657a96a9bceb8713\naa695b15cb58096f36aafa2ff65e6955\n46fefa9e95b353f4b1bb46d2556ba67d\n6419254bff42d878e820a92cdd43b76d\n68babb87d66a981dd187e410b169ccd0\nad2c82cd40584b43fc4c78b4701b2fab\n58a768c309c01b2cd6dc46f6baef3245\na32082d31b6b9a0566dd4c46ee29f5d0\n693566461a33af90d7f8e93419dcfd5f\ne1e3c053f4b4f1405e45696ec6d1a105\nd5c7613bf466d33e94daa4565dd30535\nf02b990da656df8dba71d80f7b736179\n8676b1989d68f3e970c565b5a7d76650\na755dbab93afbb3a1a05bdebf75f301d\n8d95b6ddd06a8a80f57109a0257e61dd\n5c313324778eb79ad976d6ec0305833a\n20c2bcd71abffc2a93add66353cae8ec\na431fbb7e58ef0c46c03c11657c96c60\n3c835bfc9201041a34f2450730697f14\n4ecbd1471e916cd6c1ae34bcb12af75b\n86fafe5bf7013d18248c5646daf6718\na0372d1c35e531e7130b54be1fe602e\n6e1781a84b5dbda6fb3e64e796c0391a\n77d2d34922964c7b57c58fd0f9b1d74\ne5524ebe2d9f1e8c47caa6b5f3c46e10\nbad5505a49b50dc8b89145155e320b60\nf03f7c963928073227ac692756be9e24\n83ecbc5daab43647ff790997f2048517\n6c687a500aff678ad83f267e8f0b536\n3e7923c788b0b9a67297c18bca670e89\neb05e72eb8f94a24816427daa1887efe\n6911bfee295138ccae6afdd0fd1549e\nc359eef375afa3b6dd42314e00caace4\n90d83e1dde32426407e66c6e74f5ce3\n20d1090d07a49fe927ac692756be9e24\na3109a4b09953b5e2b141dc6bd7c4bce\n41032fa8e4f632a5447ea5854b3cf405\nec685f1f4bd71a191bf585548743bf8\na36f6174628ee5807789fc10abcbc749\n6371cc04f48161ec43b0018b6edb5e48\n6d71354936e0e1e8c362d63d34a4d0a\nc715bbc7a1586afe64ab9e610db7c692\n7a6634eb949d72719e6f7dedb7e5f584\n6313352481b445a8ecbbed03ea2b4cdc\n25f20d56a125b4028d8e8d98cb30b332\n848164edcd9aa41594daa4565dd30535\n93285afc55afb00f6bad0887a204b994\n84b75e53176c9f1fe1e2f026632da15\nba05637e557909b19527abfa7ff95c0f\n52fb0261b905147d2fe023c7dc3e5231\n183054ec6b2665a38b2b48d71cfe16ab\n5c695e7aa51d16ee557500503415b4e6\n2362039302d80f99f2c9de96bdb467eb\n27e9a27b6e3b49c227ac692756be9e24\nacc820666df876cb33af5a5d96363fe1\n508e6fc3b47590556be64995e9ed73eb\nd1e59a48852965fb036cb639ea80765\n7edbaebf7d4fa994eca93934e5f39869\ndd4b3fc340bddb7f70adfca72a15271b\n5b88544e42981ce0a71aa3ce894d7bf7\nac8a42622eed9830ae433bf4d273c8e2\nb89d4bfad9c9b64d476a01ad767951be\n9262aa413df7b369d735fa1ab17311ec\n70744087c22ee199a51aab4cdab636bb\ne0d1f833e8dc5c604947b319a9e09fd\n307a956fb5eaf7a629d81e9641dd535d\nca129502c7b2b8186d54dce3f3e9f18b\n9696dd7f30247c5c573080510ce7a6bb\ndde0cd836238f7946cde899c8674e2a8\n73fd73a8bda002eae8d6be23f236225a\n77cf1b9003d904df96bb95f1b1976a40\naeb021c1e1838706b44ca19ee8c5531e\n2114fe40b577ced9c7640fef6931a907\n1d176576e4ded157a313c221866393fc\ne3e2bf1879ec9298c711893477336d39\nabdd2218a607a19819194900293f58f0\n6c2c2ce0215d3f979b3523fcb9cc5680\nd45f39e14c365801892294bafc22e040\n9f468767b1fd9285eb2c303a0e0d287b\n409ff4fbba1ba94adab1bb7802748e9e\nea34a8282ae86edcd3fb60637c014c9e\nb7d831d7b1dcad77a8596b6b008107ab\n2067c22906b79faff877f04737ced5b5\nb03e831a78f2f16a5b04bf7f324b7e5e\n1f20ff37655c5dd61aa01ae491663d9\n6847480bd905f05b544654c1c7449887\nf81ae8a4452ad290aa9bbcb26e1c5ea7\nf269ef3a1c758432e8d6be23f236225a\nff77dc4561e1a8a531d119333f70ecc8\n72d110284cdf597e68b6f3ae18faf6b7\nb090b42f3dc0e7a4aa7c6f19b4833a28\n2b17c0705ee0426e53b2b4f48361e0b2\n5e1c4ca986d216866554a94f24190b8a\n697c8a9055e5ff2ea7a62969e8bea32d\n2615224e88e47ed29e5ca238b1551011\n703e4a7096ac1aba8f7e96a8530f50cf\n6f8bb01950141f63b3e3c8d3ee0e8f52\n2e54c2bad5d117994daa4565dd30535\n57b1795508e5f9d19996f95a20b4c45a\n9a7b0effb53375625f647c1b0a6369bc\ndf73ce22935c8081b04c44c0f84a941e\n7eedbeaa5216ff06ccd600f441988364\n52ad452f1c63aee5a66bcb069f7626a7\n2b58ca08b8f93769c5408f4f799fe72\ne1a43edb6152a3726e23bf72aec61fd1\n22a66588db3822831d20b5ad5ef1cb1b\n8c0199fb20e7d4d391347c63d1dae43c\nc89c8eca488d5072cdd34f38f87d26cf\n4bd85ce20325ba7442c20743f866e1a6\n2abe34f72a7ed4eb0d00cfc385a039b\nc8f85606ab95f0bd75086ae01906f5ab\nb093af9dabb14b70cfd826dd468a5497\n2571a0b3d1eb9280f26f17fb5c4740a9\n7ee49cd8ad72bfd2c620cf302459a7d3\n6a5f7a634b13ea7a94daa4565dd30535\nbeacf34e9b0c0597894b951d14f8e56\n7e16ed13ded8aba83f59687345e725a\n9e3c0b7fb69ec3997cd1f8dd6fbce8fb\nd703643f4a4f76a16c63b8b48495261a\n6c1cfb2fe245b969c2e818a707fdb3e0\nc15004cb38217b33af018ffb2ed4ff85\n9d3f9edb3fe0ada39bddaef1ba7e1752\n5a2bdc97e9d6683077f1d7a36adeef7b\n370ab590d5f9f6e12998de2923cbf8ed\n2d847f7ada349864a4f87aa9a31cd70\nc1b48711737649616a740b8023d40f30\nffacadade68cec7b926a1ee5a429907\n995547c0276be2626bd4106c65ec103c\n395ce591ad2e2d9be47b958d3d1f5177\nf90a485c72b6047b102edba1bfa321c4\n7b602de66f5eff247991cd6455da4fb3\n123c021333485d698a75485f44bcc744\ndace99ad1144747eaec7ac3c7340a2f9\n2988a53fc376653aae529ab4a75c4af\nddf03991440ea0d15eb13ba95b07c9cb\n65e829c5a8a52b9491347c63d1dae43c\n703c1f85dc01baad9fb3e3631a88cdab\nf91e712b124915514b6c44ccda750d2e\n65be4fb7c78125eda52f887aa13ba9c2\ne11279543f1e3ea015ebc00dd3588bef\ne88c7403ff401716b7002bddf0942f8e\nc21024d97247df5ae922b610a625137b\n8e8a38abbfa3ddec942654e703edf3c5\n847e8fedddf6bee5518c49741aed1bc1\n9bedc0d32c657b5a95003e7aecc71b93\n8faf5fbe39f67f3dfa2eb3102eea4e72\n54da496566d05afb568b456e2715b08f\n93c013c922b90649ec08eb6485163157\n816efac46f2f3c99452a4c76a476a0f6\n2e620c48f90f6fb2f569f587daa38158\na28a7d34ad5f006f959df312c935a698\n887be2603a56d8acc13b4b8de5611825\n73c6ef5ee071b7f9791ed0cd6a81047\nc6e127fca727e2be3d312efac35b8a09\n8d5e3b659cf0df154327dc86b5ea9517\n95de565a937cc4ccdb024f6e72f57630\n35960e065788a31b123c06ea72522927\n377ea2491f8db13c4808655181d482fb\nf3f66f0bce27d439c1dbab1d1ee81853\n5fd1b1b185638c49c13c29cdfe828247\n4214845c44563c5fb1bb46d2556ba67d\n602df167ba6cb5f5443efa8c2bef3b97\nd09202ccf8fa18d7de6289e76b045123\n6ea8d00d7359f08f9e4614310319ea50\n1eac28fe0b2d620bf0f75e254acd7ce4\nbacbb452a0f6917a663e90eaf6b4ca52\n389d122da973fd5cd812ac1676a22587\ne93a47089f5c03fb7220891f188bc420\nc993c40ab88b161e3cedf90fdd80720e\n6fd433c69f9c498a12d1578498a3b488\n7890b89eba662af0ce90854bc9efdc95\n1f846bab69b20a23561fc06c3ebd59d2\nf8b80289dbba94bdb7002bddf0942f8e\nc680824e615c772d18d5c097fe7ed300\n411da0cd0b0089362b249fd16295bbfb\nf99537c4b6d50126d87c63d8b3018b58\n1d5ff455b6ebd04e413559acd5524c40\n1abf3b20f05ed8ea902d6f4ac8edb5f4\n7aba61c9096ce60b7002bddf0942f8e\nc8f5f746daa5bd96b34ff70ac6c9e4d5\n2212bb44240a9f0b57cf4c4836e6df44\n921a5d88994aa99c71327f667b2179b0\n2e958577e7756f59bf9717d602b327f4\n83122dd93e3f42c08099d0cb75c1d1e1\n2ba37ef44fa116f8300ca77569ad3884\n2ee1a459db90488826fea6918e74b120\ne82e97e22066a75d798832e32e32aae6\n83aa90436933149311c337781d78350b\n6d6e65b938b88eaf3a4406b2a58a646a\nf12f615701b9fd31a9e77d2a83027228\nbdc39427c6267262c541ae04c251c7da\nae65e1f6bb539fa775e66ae917e551ed\neba55caf770565989c063286c702ba92\n368dadba3b837dd926be51fab07b7ec6\n4140a889b730d00cc613c8345c33a85a\n957ac9708448e111f0ef63bb932093ce\n9004946f75082a8632c0857fb4bcf47a\n97b9c8f223390554e2584b7a39a94cb9\n3897d265d993ee2a1fabf3cbd0fc77bc\nb5b320871c5dd884a24134966691a2dc\nbb601d5ded9bdc00746ffcbc44510229\n854728b0055ec423e4f0b6b21d3809cf\n2e6a74a610868d5be1e91cfa8fea7dba\nbe8efba4b5c1cbfb94daa4565dd30535\n71d6ab6979e5a313dde8c025d72da437\nc45f67b42b7febf52b249fd16295bbfb\nf18739a47f1f08e08510ad9ae6ed36b6\n4464fb8cf0d04cb732c0857fb4bcf47a\n2c8725b9a09b6d0a44ebbc705ad8c07\nd4079a1fa9c5eee8a3599da6d4b3696d\na13e0728cbc8a41594ebaf95f022dfde\nf73392abd103857666ab813654be63ca\ne4717ec5f7e12fbf07aa2d157764a08\n92f08b4bd8aed9bedc2616ac929c8116\nb9c516eec45c825979283d5c77809cc1\n1f9315ee16e03c64450e0a3087ad6863\n39ee3af7e07310f494daa4565dd30535\n72f3510fb835c3557c0ab7347b9e831a\ncdfe819679f7c2e2916576b265053633\n438a1ce3825bc06a18803813f0c0dee8\n4d8ae6327ab4ed301e66f1783a4812d7\n522614512d74a2f8c5f391634c2a5ade\n20c2e1a09d00f51294daa4565dd30535\nac479ce45b04972891bdbed880f31c72\n10e10b663a81801148c1c53e2c827229\na0b661c93028d7de798832e32e32aae6\n9d8d5086930871efe2e5f41247736024\ndfd7315b7f8a07ca67585a906cb87a62\n24a0d85f723fed2d7f332834f123f44\n59a363d3852757572b249fd16295bbfb\n49075ee8db9d66538d1140748efc85ed\n9114091d7dce55242e5cac9166d7a1f5\n698f399e6c578386b64d3e1832079349\n7551b29b91fa4d47ca732a92ee1dda3b\nace32fcd2b6c3fd081e9f45621d2c8eb\n739a6f209a49040a4f44d84b9baa5f42\n1fb578de4aebcd62b249fd16295bbfb\n7af3abe01d2ba4ddf09d36263ac1039c\ne2595bc7ef0809097c0ab7347b9e831a\na4d9445d191c80a235a6b421c152ac60\ne92386352c19221ac99bbfcf5650bf52\n8a553a23adde929ceb2c303a0e0d287b\nba5723d5cab50a0b7d86b3749977e29\nbc698a05ff49b6e06d793283e2a4a87e\n758c75266d7788c0f5678db9e73ab77e\nd317c39473534f97b1bb46d2556ba67d\n3f3043e275bac07a6f315eca7454150f\n751aeec5f1d50668332d76467c18dfde\nd37263bdd876ddf6f885c09aa3e51c57\n37b4b837ca7da6a4561fc06c3ebd59d2\n49665c3dca5441d77c0ab7347b9e831a\n1378b7d4dc05adba9069b3c9aa123329\n33e3b187089a68d3f983f6a1267b9260\na99574a44a78208981f422b7e55b97ef\nc8414ce9b8848c3c1a3ad8aa8e24c7d1\n76dab7acad83682765aae3dfe86a49ae\n84097ba1b35f844ceb2c303a0e0d287b\n4e3cd4d3b11584dda70cfb3232f40c6\n33f7a4ca412285334616fd0dc3d5279\n786f18c5f99f7006b1d1509c24a9f631\nffffe224db39febe288b05b36358465d\n5fb24b87514df43a82b0247bfa21216b\n8605c975778dc8634c634743f56177d4\n98da594a65640370c8333f6c4d99e2c8\n"
  },
  {
    "path": "data/filelists/04530566_train.lst",
    "content": "98a61aa6d78f6f49de91bdb310db8e7e\n82be57a43d5d1e14fa286e2f06a75d07\n54daf1472c51bb47a97a590141e0046\nf4923b4ce88bdda3a9142e7277ee08f1\nd35fc449232d68474163d08524f89006\n722b68d90bc3955d2e5eb68672f87e15\n161d9d8a1550390ff4000b62f164055f\n1baadd62642d9f03a134736201a79843\n3fe8b8d9fcf031574bac1c894ff81b3e\n212a323fdfc0d8e59399f7cdb64577ad\n397f37249263000990960087ed86644\nf60404b62c44fd3b49f0e3dd7767881\ndaa873aacd7960d61d2d2f3b717d35d5\n8849abb0be0a0ca99cace9782a7cd30a\nb472526267976d94e145e5e8ca0d926\n11c2a8719a7d23207ca6caab209ed3be\naf936a44c902756dfb04eeadf4d8d0aa\nec4a394fd782e66b749227c7279794e\n3ffae5def89153e911141f4b3ef0acd0\n6a0da87e5858b4373e45dd2f173cbf9b\ndb3a31bb1fb188c727ca48a52046110e\na40a870c5abd8c83d84b8ba651dfb8ac\n303736b1be32f43c1c426bf7baf37c25\na8dd1e23448a492aad67d63ac9e4b707\n90bf73b91185303139555c8c231d0eb7\n4c8c605b2b452cbba66c1707a338712c\nf6762e2b8bef4ffa476a01ad767951be\nbcf9572e3f21a9505c0be177939e290\n772835e02fec3a93629f9e3e495fed76\n3e874274afe2d37c70640aa5d7fd3004\nbbf1507f7126733665224ccd01ad35d4\n88ea6d51dcf2cdee3a6f102e22936e2c\n82180d1a6a7edf815e585de41f56d4fd\nd795b03f47dc7cd5525c5b030c9fa146\n5001bc761fe86d60a43a471ceb7c72ac\n44ee47ab9926aa821e062833a4a1a38\n13b7b299d346020a4de203ef6842ee61\n4a01d52c0d8346fda8215f78849a813c\nfc252e6ab475cfd6882046e7e9998f89\nffb0a1240833569b9041e5038dbb1ef6\n3632e9d36e280dcc6a6cc078f0eef937\n93de96748cab511731205bd848315f04\n3c785a132fbf152249d508bbe117085\n4c6e4bc79308e23e480060a68009533d\n9feb86becf3f22f93df8f4ac45647158\n75078bd36089fd98243f62fe7d2ba690\nf226832ef907984fd8d4a0e4fc199475\n597975f72770523eedb8bbed3955f432\n3ff4ba746d73fdd08f845c46c317c0e2\nb791549dfe175150a7d88fdd8b14a0fa\n965153f3599a6ed6be7ca2216dc1576a\ne57c1a72d265147548c2e07e979bc75\n38b6dc2ce1e8cd05e8d6be23f236225a\n81c9e9d3f461c4da9917c7f0cf5ea813\nfa18b7197a462d9b87c4e42a13b47711\nb6ec93c690df4cac711722c32e47b894\n8cbb360233696342309e1bb5976741f2\na5a16ec8ebc811f1aff407511d7dfc96\n7b568afff918289614621506c22882a0\ne271e4ef2c327dda28d0def75843d7e0\n4cb135ddc5d3211c713a67cd30c1e1dc\n3da3c73abafe7a9eb9e86d477b879ac0\n5d301491ba435b71257fc1c453f165b6\nedb4574369f95b50689cbb453f479f9f\nd235d9f72448d9f82c1bf9a642a59d24\n108d62bb197c948c60c7b57bf6d67c74\nc8bce97e59665f2811b9a587ace886f7\n53fb6683aac2191fa8a3d44052f8cb25\n72eb488206297aeaa60ce6f0a0028c13\n5e8276dfb4c1db936f31e247620349e3\nccf527bf6ea742f0afe1d4530f4c6e24\nd49066858c55d7b021d7ca6ede0e9373\n991dab2b2339600a27da61c271c9c6a1\nf69f4b2abc707f667610cb1c03c9c3ea\n223d2316bb8b74a979170a5f8beda902\n1994120ab63fd4fa3df8f4ac45647158\n93304640e3a2a60d611cd70ef25f5235\nb1bc73627283a4076b861850ae66c9d1\nc06ec9a0e32cfd11abdc408c54a4b577\ne5a3728a3b5a7ecd1d2d2f3b717d35d5\n429dea3aadb0c3bdc753f4f2b4288d6\n6ba7c592495e203f49006426f75e891e\n60a1ffde62956a96e4723800c586d63\nb4d3624a4e2651ac6bfc202176cd1f2c\n72f4c3c433492d585001cb19c4a0eee4\n3f3912cf68cd28eed7259ae7450dc47b\n5b0e4acffe94b6ebd283df6ee191ad24\nf2c8239dc51b315858e86ae676396826\n9fd71a532f7c732fb036cb639ea80765\n9de5e010b46919293bb25e78abe7f382\n3b60a8a4d71e3f192063cebb14246130\n5edcd7984de7fd4b42cdbb9140b25a0d\n6fabf91638fda8bcce1decf313ece97f\n7a4fb637dc511c19b1bb46d2556ba67d\n7bdcc3c9462eed64482170356260f668\n7b0ed74742d27ff3ccc6f1de97150965\nc55868566d2cd547d8d2db57c9e192a\n67dd862f05f659c71f98035449adc4bb\n9043c404e310864cd5dfe0108665de88\n27476b5c965b010618b731fab8bc3743\nd57e124826aabbbfc6cb0dfa2f14f9d4\naa05992294efaa26a47eca0fafc43370\n248092c201dbf7008088de1a3d7f09f1\n956c3b989bdd0603158a3417d0510bc\nf531f4b2ca36d626e18dd06c1afbc426\nb71deabf89e42df5cb167b89a3c3ef9a\n59d2e9b3b4de8695a0c75f497eade21\n512251a635bd548f3463d0a80e47bc52\na7b07a2aad642f3f18b731fab8bc3743\n42d4dfd73f7e27677e72e199dc6b40e\n82138919402b3b8f642f9e27aaf0c47a\nf31b394d652f0bd0592f00ecf480857e\n645382862cc284869bfdd98fcb85ea6d\n52f3ad585a3900792de1329cfb242f46\n6729875f6c9b48cbe4707b1374ec004d\nfd255f604c44b9cf497768bbb615071b\n74093f3d2583f3be7b0299baad14624c\n693272dde72519813cee85b510079413\neb00c722894c3d70c40386bdd72f9a0\nc8dcc1e4f2276ef1ca6895dabdbc0ada\n82ff35912d0a143a4e2501f4797d0851\n7aaa404bd120be52816427daa1887efe\n8d8e8de880b4d7dd12ce033f7610a23e\n6ec5e181c6df65d9a7afac0aa00dd174\nd0e9f4c4bb582c3cfa0636f27a8b2a9c\na48181b53d207f702ec88d3440bc2d77\n11766a7b1f86adf36bfc202176cd1f2c\ndd012d1ee91543ff500cc506a763c18\ndde98d21d4359f24799c6c3b2fff049\n677ffbc1ee40a0a0db5a9ea3574bb285\nd0aa1202f01227f7b9528bf167ff877e\nd80bd439608923e07610cb1c03c9c3ea\n5e6e9a61eb078041556f795d265590\n44858e0564cdf90e299482fc72b07ee\ncd67f7d1ba943b162f84cb7932f866fd\ne9da320a14afc7098031a892cba81629\n96b27c98daf461269ff59e10e6ad1a4c\n4c8fa5d0d4b2c54644dbf20ba8545fd\n67adcb4dd6d1b51f3a2bf22c38d431a9\n5b6d80dac7d626baa218acf6a387078\n31a41e6a73c5d019efffdb45d12d0585\n6189947ef21a4f4b7f6ea2f642fdf12a\nf10162679968fb0d8f21fab201b7ef8d\n31ddf87b5ef64c9080c9c53be28cd7ba\ndaa1781b81a74852bddd6eea3463dff0\n2c7a0d5909d8dd46a3599da6d4b3696d\na70c472cef0c354dba2abf2ecc57eeda\n28c2e4576e53da5ee25f26a257fd7871\n7400be7b247ce021be99fd8a5f540d8f\nfe7362e8a02d00072e4aadf908a27d12\na10a3ed95539d9e81f0c83f3777b8bde\nfe482b5db6daa95f88e2183678696c9a\na3905dbb972cbb3db57379b548da98a0\necdd85e25c18ea404d73ca91c97c0cb3\n3bd4a80ef718b9c9a069f11e22e91bb4\nea940968d0ba131e7b66b8fe985fb060\n2fcb8c472f1cbdef185cce17ce166549\nb93e07e84bdfd620f4000b62f164055f\n45351c87f019646115aa5b227c027ee0\n507e097913d1364bba2dc6b0ec935a93\n13c289d915523f2348132c07d51cd81a\ne3923f2d2fc2d1d39263b5578aef09fa\nfa2580f6b9a29f5454f886603823eb9\n5aaec5938224841f36cf5f476d32636f\n59fefd79eba35dbb723877c00e9cdc03\ndcb390b2e8e5093def84f4e0accfb14e\n25164e1af059f8507129983ba40a1750\n206c86e4cf614dd5d03c0ce6ad42cc93\n1b00f29471a41f59e92b1dc10fc46551\nf5812d814e114a185c8b6bf3197caaf6\n726a60f7dabb1c88c746ec5b7259bed7\n1660bbd9c43284d98bfe41fc81907f54\n4cbffb314a589346b9b184da9c0040b5\n767e561fa1214fb83651bb31f42d2f80\nd66b7128600af54e7afee304cce81d6f\nac4286c2e92e3367d5ba5130450bf929\nd3c26b292a4a6a82621153a3cbe4a77f\n7e7ec66ebdd4df7ed1745f739fc0fa03\nd617c5194daf4f7298a97ddfb532e08c\ne6a9f9135e36b6c17c0ab7347b9e831a\nd271233ccca1e7ee23a3427fc25942e0\n859daa33e58191bee2d4c157e5bf1dde\nbc691ae1f2d6cf0ba628de2fd7989b40\n61df71a58a9d0161202de8d12c6f7633\neb8569cf15db1dac1640aadca4c54050\n5b1552a30341a3b27ac692756be9e24\n52176ee07927984ab13f6ba928a796f\nddd02c6fb780d4f6c683d3e7114aaa37\n4e341338a4425ea391fb4dce28166bd1\n293781c9bf4f6168c4ff53ac1cae3d62\n9472a24df8372cd42e436d38f27146ec\n3f3bf820fa5d171bd45d4d5673b732bd\n9c92c9e16d1d214b81eadf50fbd8addb\n50c0bd9933f7259fe59358c5e6239c84\n27d32838007b5a07c63bc8fdb41b8eea\nf3a1538193bfc54fad3766494450e53a\n71fb9e98e62ae65f6a8fde3b294e520d\n6c1c628f4ff60addc5b0cf694baa734f\n6abd7ebbc9020871bfbc6e788697e036\nd0afe316f1648d22b5d16f91270f7fa2\n55d87dea079d2b991bc665188b93587b\n12a01b67cb987d385859fb379730f7f7\n3f35daa80c8b364fb7b1411b0ad3bd0d\ne6d6a78f53ed5a34d0a07165a76e5a8\nbed3fb84c9b876f930d7c2b672980ace\nac2e609dec5745b9e00ca2cd74ddfc7a\n490ba339e10c0b7f4de203ef6842ee61\nc9bb36ffd5ccf7584cbfeb2946087e59\n7114f947ac296d8034d05799e615961a\n4e45c5a16f45c3bad9356bb4e82527e5\nd0652ef190720c84f4e9dade6d46323d\nff54247b18f676d9129032621d548b11\n8185d9e558f822c177cb090a86675a1a\n58c05eceed8e0a48f3e39f2e17005efc\nf2bf8fdce1a33c66a60ce6f0a0028c13\n3d33ac667a885a1a7856807e3e4b01ad\n1d8b27e78b2f326480d90033321f5c09\nf728f7efb5612cfe6be14c19eeda8326\n423f4d084e13106db75e46a5ead1e5fd\n7ba8d5a8edb7ab991f377e6c4dfe0096\n7abde2cf79febf6efe4db18443aaee4d\n1039c49d2976eb87d5faf4905977884\nd24616fb070d105d3a10f0b86a89bfc3\nb0ef1a0332a50ad1ae4c18c4a7d1a8bd\n64ceb6b8d122c2b3c9b5311300e82c12\nba62a620689a976f721c8a4254856c86\n5f2ddca70687dd3062ba640dde834b4c\n5c46f6ce5efa21175060c1b57f88c056\n91eda08cecf2e0f1c6cb0dfa2f14f9d4\n88baa5e1db4d1c624c24aa820d0994e\n5059b4e973a0fc7f928a2a26ac296b52\na443271055ad0ebccc9f5b25407f3c72\nab40191e935c415cef0a5cdc2cab422d\na473fe0a7f11c7ae9041531b90641b86\n3e900d7ea70fccaae6100699d3d743a7\nf8d3af1d1a20123c249ba97ee36ba54\n40d4cf2e4c0042b81f6b8c144863b7d\n306aa8588bead6f3ccbb877d944b8a64\n4021a170452d19393c79f1baa816886a\n209f569f50d42f7e45e2a4e5729b970d\n2dc008ba026e4c8c8209e983a346eb25\nbff4e5d71e9b695dc6a303e6239bc3b0\n620f33e5f326e3c642f9e27aaf0c47a\n7e0d128b6c8ce8b59e5ca238b1551011\n969c3262a594bda487a9e46bb7812fbd\n7a3ad44b854faf361f377e6c4dfe0096\n215861c4bebeb328d9a75de54b023ae1\n98a9c16aa2c6030f7d962e3e9892f8dc\nbadc6f1a2c19f724f3e39f2e17005efc\nca2e4bd483c006a5c9f3294669fff77d\n44a50dc1a9d8a8a65144962e2c20b832\nd8acb2681ea3e2466c64e0542c2b0af\n80c6a14accb189a9c2c2c81e2232aa95\n74480b3e812f7c1428cf87eb5ebe5e6\nb91a01dfd51d615b4f84436cd4bc7d29\n33692290561c798e780bc2708a85ba9a\n50f0d14029f7f7be450c3626dae37aec\n62b67cadf45841ab82b5804533e545b1\nb942192d17d2e267b7cc248da6c5c5b6\na8daa7461ff94965c0be177939e290\na8f5ce05ab3aac91cbd32f07d6724eb4\nefdfd88f3fcbc162b4c316c21a905ad4\n852a4a82f02d64fb31205bd848315f04\n54ad30894e9c74f28abdeb0a990504a\n9a20ab78eb6a5e7af7ff315fbee3c6eb\n91e0e1a6dbf302c3d55da98ad008849b\n64ccd647293ba2a75e73d168e741c7c8\na230c555488ec2664b07b7d8c0d68c50\nb1dea53e9995486c1b4a375734e87fc5\n3038a5f927db994e6702681953f194c0\ndc0d90ae6a41e0acf68668364a569266\n7bfd756573de367176098e230fa177d\na034dc83750e7b8144c1f09f7df84b24\n77aacd8997c67145cf10e9e4657f415e\na728c32eccd560e69412a62cd6b1bf5\n28db3989d5ef36e9c3691cf0253958f4\n60ecf4adf9e115f91eff78a25c58572c\n1c7f49bab676187480901e43af4435c7\ne0845c8579c5d4acc3e7754d5a998758\n3e5e782373516ad760ddc468fe733ed1\n6cea89128bc0b5e83b9f2b6367bac7ce\n5e65f519b9f5361e657a96a9bceb8713\n54cf5783ca03b3e015ea3a1685d773da\nabb6fe97ba97e1f84e3f9dc2fe7cec4a\n24ce8f07f05d14bfb274bf54d5e89093\nfa656e5b70f12edcbe7ca2216dc1576a\n203c2cac2c46e06c320fa6e2cd857828\nadb1b651af34dc6f42534f02c8e8b5ac\n954c459bc6762abc24f2ecb72410a6d9\ne5ede813e9f07ee4f3e39f2e17005efc\n30cf2b36478a21ee701c1f58e22b85e8\nceaacadde93c2be6ee138bcc5a7d5853\n1d451877c6270d97fe755e3418b63110\n7a5de2857213a2547ea0f302610f14a5\nfcab40b30e1ca530713e7356d62985db\nc7fb35a9ca583715ef0445a3d98d3d35\n4a886c242f8d02c8b5d16f91270f7fa2\nbf4386d3e823a09e57a4e26112104eae\nabb16b391d1634a84de203ef6842ee61\n3de0aae73a33188ecc8c5a250a07787a\nf61132a535bd608c85f7a3de54751f1b\n8b0d1cd6731593974543d90faa1260e8\n54c0a11324d0ca82942dbbe2d0488895\n66fc4d3e245a643c4f7b88e5a2748214\n1dabc979fd569a0e850e00840470903a\nefa50c4e3e691d3bda1b3e013aeb1e59\n4ac3edea6f7b3521cd71f832bc14be6f\n249d543a30a88020be7995d5b4bc81b7\nd214cdddcfaeb0cbcf8dc8d39d90900d\na346005de2c522e9c9078664355a9ff2\n8a779f2127dee13b28db2e450917f8b5\nb33a673da4745b08b5ee11a06ae8ae58\n90e6c6083fcd47833e45dd2f173cbf9b\n70dcc0d460cacce0e63ec060b551ac57\n2340319ec4d93ae8c1df6b0203ecb359\n5810aaf1a0818553b05dfc874f00d5f3\nf72222b43e40e7e84cd259bd328e92a\nfdd7433470c31c8b5332ddd5fe4d4fe0\nad8623ad47d72317eda0f8d4b3ce03d\nfad2e708e354b0315e585de41f56d4fd\nb04e4650e547e0509803291b0f4bf532\nec3e0694850f1a923b7cda02ebfc1f62\n1522b8c3c28a9d57ace571be2585c620\n51f002bbc33e4b34aff407511d7dfc96\n6556015faea5ba45e0f0f0669675011\ncfb7ca78b0b65c4f2d615e80824301ca\n133c9fa2562498d28ae10bd53dffee76\n1b89cb2463ccaf15e1e2fc42e32162ff\n6f4a328af926532b642f9e27aaf0c47a\n4e5b83181a13e0661868b1150be0eef4\nb5d1a551525c6b7876ed13a8bcf33762\n6bbd0b0e09dd43017ddd35a83509257f\ne3206eef4da407e7c08fee43ebed0bfa\n9798a8b84987bd661851363a5850bdc\nfdf4b58a27a3ac8ead83f267e8f0b536\n65f8bb163e351bfa9399f7cdb64577ad\n1c4ea31563b54bc8b77192b0405b4a6d\n863fd298e6ea46a5614edc3c9b2489f4\n9efd4dac9e4b1698876eb99526752ffb\n4f513b39cfce2d269eddf484109e2999\ne2f4c0d1c8b6e26549e3c7e37819c26e\n338e37f313d48118789eecd157794d2a\n684d665be29eaa49a1e649e7e3e5f054\n8fdc3288bd73ef58a127697b1776e4b1\nadbbaa33c52c3b0d5c0be177939e290\n2a020ea3cd5e4fba37363131ac7e8139\n99a27d7e2553c629b0828c4cf6b95ee9\n44571992d18375483506f52bbfa5b648\n7a9ad733a68b93bbb1bb46d2556ba67d\n5b6044746e12fb6733b68f5ec4e8a690\n5cee5c3afee327cf360d3819686769c9\n160271b40b1d6822c40386bdd72f9a0\nfddb69f72a853e2f8ff5243f1df2529\ne36cda06eed31d11d816402a0e81d922\ndffd4f1a6a4d3647568f91064f82e7ec\n498773c5047c01b35fa1a6e8897313f4\n9b90b9cbd9577d842b72b4a851b36ab9\n67e41dd24b6902da49f471d054f6b528\n564d88a1c49ba742473f10e6caaeca56\n845426b7dd1b0e55a9142e7277ee08f1\n9bb4fa1026322f0f3e39f2e17005efc\n9fe579f5bc52735cdef1530f49dfe050\n3fd6e59f9c95a24d88b3e1662276b5b\naeb094e328468631d3cf225db57b7a46\nbffc229892a3d301c8bb4876165f947c\n8eeb2bec8499fc6ba60ce6f0a0028c13\n4b491c434e9c230c9e450dd115401ef\n296f0b6a15012e33d87f29c9afcc633e\n254f1c0cf13108c46c63b8b48495261a\n66a90b7b92ff2549f2635cfccf45023\n18642f35971d1bec86c51c3aa93bf029\n573c69987f0508d210572d5e96d039f0\nfda1e57da58ec9bee88464b900e0eced\n9c4ae8501ef74e82cffae3eeba6126e6\n5c9d5cedcb75cd2bad7daee13cc76c38\n8d53d8f4cacbff77853339423b00f029\n485f63613911c93fd316c98a55307c24\naec79b6f0379b1749fb6fb8ca3454a08\n2a492069b6009dec37363131ac7e8139\n8b2e1eabf620d76840633dde0a3c28c8\na53eb39c51a7e0a2dcb7d7c06abe0da3\n4f245403e6366d48fb3294f1e40c8a29\n6f3384e934f3588ccc37416b6163cbbd\n2f4d7a1873384f5a7301f2b895d332ac\na5fa8ae8f743d5498052128bafa4f7d8\na0f1e4ef99b57121a9142e7277ee08f1\n5bc8a432a5911a4c14621506c22882a0\n7b7847ccb4f15fa9b1bb46d2556ba67d\ncce41dda51ef0335a413908c0e169330\naba35304010a7ca093f1a6337ed3a54c\n9b02ecc129d89000f4841afd366e16cb\nda57d296d06af50d6fbde5631e3e226\ndc422a7fdde68d8bbfc744c1348ee017\n3b726a3562a1bc6e9d2b0f4ee2fe01a0\n36b38fd918d01c6b6c63b8b48495261a\n81a7b820899ccbf15ddefb7321dceac0\n92be906c57e20430fd87075a257732c6\ne9c603efb5aea8087610cb1c03c9c3ea\ncb497aa6439c5a058c8c82196ef75032\nc2eb256cde2dbb93c17ff170974eac43\n39c41184f49edccbc381729395a38d7b\ne93d2ab44861bbd32a4947824596dce3\n724ca82e43f5e4816811fda0ba2e1809\nf8ec76f3861f7c68b76982957f05710f\ned397dd3d2ca4c8a69852296a4bb593c\nd830527d616f47c811b9a587ace886f7\n90a71287364b3d1bccb9d5278825aef9\n87e1eda2a99c713d4fbe64e9d0fe42b6\nf4f66aef4ae1ca243146aa85e47ab8e1\n47c35e001ddd44bf1f2cd7f4ede43a74\nd04816fe3c531b66f647317afa6ffdd4\n1f4e0613a3ec7b5a975be43df8325f3d\n54196fe702cd0f5ba27ad5a09bb4c2bf\n19df5aa5324f265d4de203ef6842ee61\nfd850819ad05f139bd4f838682e34d2a\n75d41ee15fc8fa4cca581939cd410ca\nc78d6f5c908e2ff1b05dfc874f00d5f3\n91c1e885c5cb2ace3c01fd24534f394d\n5fa144c3a8cb5234379339ae6512a12\nfb8206abb1fde4c08abe79d18310fd73\nf582d2315b6182ec6f6b59ea659e8324\n209213f07114a06a2b249fd16295bbfb\n24f5011d64dff5cf1c0f52f4ec8b820b\nc0f619a710e4cccd15c8f969616647e5\ncab0b302a23381adcdcba7385a96c2c8\n8b25d01f3fd3d5a373e9b20a29bc1d50\nbdd8d8f6e6536c0d4d16452ef1302b59\n804e29433fda9657746ffcbc44510229\n291e48a99be418846c03c11657c96c60\nda4003977c998e81f74f6fb7142d37cb\n6edd37977522996a9b8e79aa9da22fd7\n991b0f19022a0233bb97258c2be2acca\n4bef06fbd04377d4d6e2030b844bcb2\n5da7daeff2b24f23206066da291e8981\n51f269a4ff48c2214de203ef6842ee61\n8410626d841dca3218b14db3b83de9ff\nc19f98f149ee5da8b1bb46d2556ba67d\n12b5302a8aa697a138b0c448fc291f4a\n9b91a683da8c4781f990230c33049243\n3c8dc4a3621674aabb29ab7e4f889a04\n7a188a5ed26af4b360a251068e7dcf6d\naa6a256cce6f8248b1bb46d2556ba67d\n40752c807c2be827c924fc2f78f9cea0\n4e6264af2f2c3e135a15c264bb25007a\nac5dad64a080899bba2dc6b0ec935a93\n7f8d800b3fce12a7874f0e42f84eb4f5\n482ad82769d6b5b11274a3ddd0ec9301\nb8905c60432aadddb4a8f569bbe9f7c5\n320b3f040f6d5147ab87075c54b494cb\nff404dc428ac3cb7102f71c17954fcf0\n6f5df8d6d0d77039be286ae2fb79c470\n3e233d02a6943be81c99ec30e7a67a36\n143df6dce1d90696874f0e42f84eb4f5\nc6bc9330b0a75d83cc73edf5d735208\nc00a8f1dc19a0e5341213ed93def741e\n5a3924c1fb78bb908dea00b146cfa3de\n8b3cf3842a88136c67c16c85d5f8c7d7\n2ab688c7eaa21bbd77e7acf84a1c4b6\nfe7b7ad843678dfcd8c527d4042f291\n812c1a3dacdce93ab4b5d7d0cd89b504\n20286f6d7aa7a853b48c6de5e38e3312\n1ce3bf4b1ee8c4b41542b16dedc43949\n1442afdc0aade741c46814fb26e284d4\n6367d10f3cb043e1cdcba7385a96c2c8\nd19c003cf7dbf111543941eaaf04581f\n7cf500d15ff839e92f35bf9c34b31609\nc3119babc97b4cb374f75d9e92dd466\neb891509436863da874f0e42f84eb4f5\n294283d06ca9a9abfe755e3418b63110\n68e60ab321e4198ab437d385637c4e1c\nd7fe3d95cde66115874f0e42f84eb4f5\neab41e8a5c5fbdff151300a2afaaffe0\ne0fc9177fe0aab2fb50d0c6a0c254040\nb31884906c966b4fa54923b7d85aee7d\n8dd5ad35a45f72a64bad9b80eddb4cd1\n85ca7456e200e8cb874f0e42f84eb4f5\n6b87ed6710a0fc8d8aae7c4db7244339\n6e3db071ed95552b3faeafe37c2ce4f6\n8b335b0be37debefd85e5191b992b560\n996c90952cfff5b24baa0720a34ff704\n769a3afbadaa92648bfbe54b5d01550\ne5c3835b9f3ae3634a27b0b4657ac8b5\n99ccd811a0e3052634e1b4a71050e6de\nb7f288e9187a72ea5d3426ee101e9f8e\n1b00e4c41b4195807e1c97634acf0214\n1e127a7ca9bfcba86df38a7dd1b448e6\n5c54100c798dd681bfeb646a8eadb57\na848decbfe26833c4a27b0b4657ac8b5\n973b398bbcc97c3fea9bd4954e1c8c49\n194ea4b2297cc2ce90c91984b829ab51\n2e447f96f152a33a7428866500a95dd8\n35e1639eac2c9b96cfea3d4fc15719ea\n6436ddeaa11efffdcdd34f38f87d26cf\nc6ef6b859205ab53609e2d916fa0da27\n83d2a7a4cd616008e19ccaf2c9aa161d\na58fb21bfa4e2f451ddea1d5aef06a06\n8508ec8efeedf4a41ff8f5b5b24b7b46\n1fe84ad7b78667e47428866500a95dd8\ne177d4186bff96ea6dae8586082d789\na89cda9712b67a97d1e97c10e2464c2d\nc6e255195b9a8691ea9bd4954e1c8c49\n18761559208a970188d5590328ce0ddf\na53312711cd84c9fcfea3d4fc15719ea\nad251b2cd68290a41c9545c3c7193d55\nd4882179bb3a1868abc6b16fdb345d24\n3625522559a753b78dd2cbb9124e6d20\n24ab70fe2e704df45b76db9a8a523dba\n8b57b62c984575334f89761f054e2019\n860e632b27b9d2469f1deb04fb8ae481\n8666e4e88dc55c5795ea46728bcdc15d\n80d381a6760185d8c45977b13fbe7645\n94e1c24d7f205a39779adafea0303e70\nb1a080228ad8a7c6eb2c303a0e0d287b\n4d9a23b8b75a412c82fc4dc31c839439\nf2b504b2e368bee6d3c2fcae9650358c\n3a68e8dc897fba988332d0d58794c3c4\nc74dbde6656efb4eb4248d66f92b2feb\nbec39afc5bad2dc45ef003dbb9fb9184\ne12095f9d33eeeb6711722c32e47b894\n4719acf1c3e56fb489d39b85991ba25a\n81170170d0cf36eaa5c5aafe837d3f8f\n5c6c725a75645a305de2c7f7608a946f\n8497e02fa1662113776d8bc79b9caa2c\nd95c49195e51912056f316a86bec8b19\ndc3336883fae5239d76134f29a265550\na2f46716962afe72b106d5ef46e12c19\nfa63720ea3f8bd379a6e43b878d5b335\n6974280e14023bd6bf984c00fef39915\nc554a1d4895b67b457f5c96598c7eb45\n71fbcc8e65022567b031dd7b49fa6191\n91fd8bfce87a0e7d847c4e55bb965ab0\n176d386905bf227da56b564158d089de\na9737969ac039c9323dfd33205b06c1a\nd6ad84cfb652f5dd27ac692756be9e24\n379fa7ba7c753376619ef21bc094a137\n3d4b80858a5ae3d694daa4565dd30535\nd608bdcd8a87f3af7d2dc2b4ad06dc44\nda15ecf40742e9e46d813b270092aa6d\n5573567872450417d61794222ef2800f\nc52ab3a375bec0baaff407511d7dfc96\na3459aeef2676d7653b838b6058a8d95\n7eefcf457d32b9b03146aa85e47ab8e1\ne6fa4d02d2df5a9b1bb46d2556ba67d\n55dce6844c2bb0145368bed34e5564d5\n66fcc3b9b53e0564d619719db5285416\nf5fc09f67a5fdb0142d0e83abdfab1fd\n69c4fbba77ee7891a3c3bb12365964c6\n2b1d09f8412f647899c0080e6a5589fa\neaaeb5f4195eb55c1cec93449f0f44dc\n47133569866031669268271e4d570275\na83a9d54e0680aca640afc71da6e41a1\nb6eefb8fe960df93d4dd83fc93961e73\nc521d7e4482fc7f7a716de2121565fe\n203d75b8112369d66a4afad911312b2b\nad0879d8dc9312b5c6cb0dfa2f14f9d4\n605b56aa6a4c9ef49f1deb04fb8ae481\n47a07536cc3ff3219c42421cfc900873\nb3baa99a603abe4415aeee24c2916cad\n92e3343250e181e1428cf87eb5ebe5e6\n35e014dccdd4fed12c791a7edd1fdff6\n5295994daf6e427dbec3353c29751fdf\n3807ccfaad3716ec59d8a2cd36b3278\ncdaff2fe98efb90058a8952c93ff9829\n29af666e04825f66576378847ca0b69\n377497ba926616fbfd7a80a80a3ebd45\n73343fd92c286e80c570a3d482a3f588\nc00cee4431f3c2db89d39b85991ba25a\n3ff7e02233affcc350eb615eb69452b\ne708ec80c30086c36dd8881532b5a3d9\n8b92073eb06f0365e18960ef54b079a3\ne42655032562701e746ffcbc44510229\n217966c23fe43ab83bde759c61eecdb6\n707f009ba421780c2af11d59b11e0199\nc46b2f2069ce543c4bbcee86e282d431\ndbe05209a14fca8fdf72e713dd4f492a\na31a0ca1247e23ceb1bb46d2556ba67d\n7c23b6218a5041f36a2173cf491934bd\nf45d51939d8ee9122698fe11741f2ba4\n94aeb294adb9be58b05dfc874f00d5f3\n2a86437a50f1b51727ac692756be9e24\n83c90f7b104816ecc748af2814b558c4\nefa85ab5aa4704d299429033f40f0f8b\n26bdd8852a95cd2d4e4ba49b2943b913\nfe09fbe9e43aa889a08db804545b684\nd7c58ed725b2449dc570a3d482a3f588\n9bdb0cf464f5c65956b5365bdce185d\n38b55fc61393e40653d45bb9e1743653\n563d66d82ad3f27e324be6ae66f7fdf\nc3bbda10fd915342c24de8a3b5a07552\n7dbcab223200092feb2c303a0e0d287b\n968848dda6faa772a9c79146773bd1b6\n76dc1a35fee28991a5103c3a2f33a5e9\nec8d021a7d3816f2e46fe97e5f3e2c98\n7703ba29545cc381acf9e4b0d73d2434\nee0e9bd4c375f1e76c07231ab3c62b82\ncc7369fee843cbfc8d1322963ff40d1e\n70f91186bb61208c56988d12ecb12e06\n806834c2b3c0bce7989a4a13be837150\n94e216dc57731577c14e2939682bc455\n6d96d3f9f621292b7eabc15108a128c0\nd7b1c89328c8f0099c42421cfc900873\n215e4b59683247378a3e8bd3a4e48433\n696136ed6723971649f471d054f6b528\nfe24ea1bc3383631370d3273b84cb8bf\n5fd55e301007884c742bc8027e4951ae\n9408002c21ae222b27ac692756be9e24\n2f682d31b26398cc2218383c174cbd7c\ncd1d407bf8637a019a6249baee317a57\n9b5077b81457cfc2986bcbcf53ae184f\n94a0345790869eace074faa875b76f82\nafcafaf311af722a5446fdbcaa866773\n1c89943a24952d1737f4612124cea14f\n884454f0d5a376c295ea46728bcdc15d\naac813074775281a4163d08524f89006\nc2d6e8710215b74c82689dfa8a7d7e7f\n6e0f329ced87d7a3c9cfe13d43d30dc\nd74ea3567f8861dc182929c56117755a\nb91c482da95cf3055f41c9ba4474959f\n5c116a0ca9477e44318f6eb5e296bb88\nde55eb89c357cd5baff407511d7dfc96\n7b00ce37add93f06ffbdd9e9972332a7\n52492bb52701aa4eac05cacef62577ec\ned94229d6bb18b783f351db9d8c0e76\n3b662a6ae2eab330d7ea446be069b8cf\n3750fdd9ef7f941d2173755309fd0db7\n51b25c88fd90ae2b57c58fd0f9b1d74\ncc3957e0605cd684bb48c7922d71f3d0\n5a7635031cd518daefa33903c8f77ab8\n9c50b10fb651e57fdd93d77eaf89012\n70d4ca23f31a5c4373c03aee5e8475d4\nd00fe7ce177483ed5cb65f793213d431\n68925483ebc30618698ab31ac670e62f\n80d9d9fc9c6138c4800a0120f3e757a2\n6fbf3621aa1d3a8e49f0e3dd7767881\n388c5175593b057a66bc841ba9cad258\n3bcfc7f00e9fb213846571d66928670\n77331918e10b8eacd07153997ca82b26\na8f225774d1bc8d0b7002bddf0942f8e\n31f7c298ea24bb99847c4e55bb965ab0\n6a65cd6bd6897cbb42df9eeba89a416c\n4ce56405f7f67d3c38cd6a6c9620e96d\n11e04ef8f037194919869180453a248\n1e8c9dd30d54392856d301bf1319ad4\n8bc922537410e1ce847c4e55bb965ab0\ndded8a613927539cd72535fe84d882f0\nb78f1dd3083c35a1a716de2121565fe\n79a13d8bffa87b8ba8ae9698506bed5\n74d3bec29981aaa0efbed58ec3ee6f0a\n6c1458eec06ad0c147a67ad1fb1cf329\n29a131678dfba5339a6e43b878d5b335\nd5b2fe7ceeed1ff59268271e4d570275\nae93355992a29c428064e4301e947b0d\nf791188138166b4d9db44e8b39ef337\n7c4b6e4ef996f109a2b4e6eee41ad14a\n1c6c51d2d315d576852d4401c7cd1fee\n7380c6bedbd13059eb2c303a0e0d287b\n5d0d84924e96eee6b6162efbd23a9d5f\nfe8f54e34ccfa35f3ceaa5264772e8b6\nbf0084fbcc74d5632754043d4b10740c\n8480865aa92d13dd46687b3834d255fa\ncab7f319f0b3cf8e57e59e0ad2d11e74\nf5dcf3213002301ee4326375f53c1686\n5ae9838a4646c0551780f6e6561db9c8\n294644520ccc2ce27795dd28016933fc\nbaeb1f25ccc59698cca5d826f4b024b3\n1b2a8980c17fdd97c897e89b561760b1\n92fec5e70e9c972130327a4f3a474384\n46421ef3a412660b428cf87eb5ebe5e6\n99d12cf62a1b5cc3f4352ea917328a5b\na08180869abc48b75b0cd10627918af8\n13a9352a47bab8c98cfe472915a175bb\nda738558b1230b8288d5590328ce0ddf\n404061915066692d89e410fd8930ae43\n799d446d33e604f990f7927ebadab5fc\n12159b68a31a4a7eacb3e49e16caebeb\n19a72473173bf26ff7bc9a344bb7bae5\n476bc79bd6fec6b088f5c2d4f2395a95\nabbef6c2f909b9719ef9dcee729574d5\n5f7c0e4368784e795dbfbfcedb83d61\n99acfc63ec4f4ad09f97ca916781e800\n7e6aa3337c2e52ff196f35b142096073\n6cae5a0551aca4fdb39afb07adb2a544\nea491bbee7524859cfea3d4fc15719ea\n3679338b5a90bbf5fd1d4880da709562\n3583b3e2b8dab3f29d8ea13dd61813ef\n792427f5da01907ddf48ca5a34c88e7c\n461517433312704299986cc2d8a2c28b\n340a4a4420b4d9c0406483a4cd65b281\nd23e71adcc315d56c748af2814b558c4\n91a124454518abb7f2ad837508eb2db7\n61c17240229bf84581d9d9b1473043a2\n667c662b55519e4650cff0d5bea1684\n4c1c5200b239b15db700877f4d4ef8cc\nf61eeef9235a776073fab9f1733a68f6\n94ddf20a9a6e035e85f7a3de54751f1b\n45642e87b3904a1395f5b96bf7fdcaf5\nf36e77f80e2944ae73fb6350806be955\n810cdbec3687a16e122e1a230357df67\naa741f0f7784b791e99164b294d0c671\n5eb2d085267142f26192896700aa3bd4\n34b77143d6313e3f717ad2ef4c4af2e5\n201fdafa7287d2fe8a55122197709269\ne453412c14d47ef176dfbd72ad52dca6\na64d2249cbe63b5f9cbca1f73829701e\n8c611205ba2d189068b6f3ae18faf6b7\n988e1d7106b705d692336765b86c93d9\n553a28a8cadedc9344046d4d2ed11860\n71aedddffbb7b1befb4a964cf6619fc2\n47adcb0683a3de6cd202a4790115f0c\n110acfe04edbd526969f70ba15f2ef4f\n65f78142a6c33a89ea7dce1646d86149\n9746bffb188fa8d776dfbd72ad52dca6\ne738f72e4c461e79cd202a4790115f0c\n7fa94092d77b9f7877c1e07fcf5968a5\n8595fde74bf250a5d9fd1bb6b75d9865\n80e8c7703883a40c9e4614310319ea50\nf39ff9453d6247fd5ad805579cc24068\na77c64b41bcc66bbca4b459ebb5d9bcb\na2d4f32a82902118aaac2db0a60f403c\nc2b394de8407988bb538a15c6737824e\n3b8c16861667747fcfea3d4fc15719ea\n4af786ed4226705279863338881ed398\n6834c4f307753dd1427c8de062c1497a\n29f385987ef4594ff6b98f041a0ed52\n3948782a95f084b92336765b86c93d9\nd3f6fc016f72c08f1346991b5a9f4d21\nab9359cafda4fd98a726cf6fcecd0742\nf5217865935d63c61f2cd7f4ede43a74\nc746175e0993abc19a6e43b878d5b335\ne70fa867da6276efa65562f270f71c81\nd152611e5b14420460e26fdb6baad14d\n90c5c6b05a71381cd97a7aaf09adfff5\n320683da0d8bd1f394a6427195fa0bd9\n9798a8da8fb83d63847c4e55bb965ab0\n92e4ae4dfff684832dbef90d406185fa\neddb01638a0c8be89c9cb44b983e47a\n44d1e432239591887b2cd6c1f3acedb0\nebb7451625233d772afc5c10dbf83b25\n943567584893fd5218591932caa46ff6\nd841f12d8e22039f56f77b6bc6731cda\n4f16bb70a2c3ca48104d2711f226a055\nc4c9a32c9b1c3e515586434189043e91\n408cdd476e8bb202852ae095a967f0ca\n4e6313bce5ee3698909d4348e3fee2dd\n6a7ce5d7027678c299429033f40f0f8b\n9902e521bbd9ff3348d84ab7c5cd4c19\n3176313945e3739e10508e1f7e97aa01\n3fb4fa12a4718cdb2001fe4ad7074729\nc4830136a2451f8f45aff212946058fc\n176cea94ab59ce9949f0e3dd7767881\n6cf0d9cb4e2d607856f77b6bc6731cda\n8e06600c02764ee98aa3ca9bfd776ccf\n1e047e25506b4885eb5715ea2e14242a\nc74fe97df26a078facae7037c88ca7f5\n567e385bc5c40247e414f982f9c422f7\n22078503d5625b985dd2c581ea62184\n358bac5415f0773941d6cd38228b9631\nab01205090242c7277945fcb3f0ff3f2\n8790881fbc0331a87cef2df31bcf9d93\ndc27c81f14e3a89c84306f3bf0a1f2d7\n61142394175b9e2b6a42e03bb7759e0c\n37ea55e2d023f9ae9588e71e21de9f30\n715699f07f8e59a1620e7892e762134\nf7b13135feabfbbd91347c63d1dae43c\nb1b5e16d0c96f34c46b7a006accd201\n762afb11bf41fc61642f9e27aaf0c47a\n5a8c1f3f0ff3e5a87bb222726cf5a84c\n548c6234fc7c787bfeea5c85a86089b5\nfa3ed7b176b0794d5b4b8b1a2a708ac6\n9b300840d96e46f08c173f7caf7ef0ff\n6ab4ddc238851014802f537afffb178\n5a6439bde2204588fc3f5f3afbd6c5df\nae9ab937f6c1998fcc34b900bb2492e\ne964c2fe232f6c3e3ece64552d44d319\nead18d83024fab8deb2c303a0e0d287b\n79284d5d39e4738394749f185cc702f2\nec51dbe499e88615a267c8b6fcca89d9\n511befaedb0123cd96600832daa83ed7\n7dc72dc46c46410168ac0d25269a2c67\n25c736b7ca26bcb7bfccc00eb137e6ec\n70af463b4a51f0819330265a9fff38de\ne51dc5bb6b97700747d2f4d1390fa93e\n6a43eb690d0157bddeadc9ca0263db5a\n19640fee71ffa82816581cd5751ca97f\ncb7bc049274173df73a75ef44d66eede\nff2b8253ca3190d5d65fb76f5f0a1db7\n849c8b9c0acc91b6ed4404549c4013f5\n33a9a04e7d8ab8ce861ba49603151327\naf09fac5d37072a3b830672ec83e0072\naa0be5a337baedac950c27aa880e8898\n325d1e9be246e1644d44f5db04bf14b8\n9d737c1e2872b322d2ff3af4b7716b6\n75991571412e7ce74059b9174ed51649\n7c4ed531d1ecacb156258bc213b2f9c6\nde010f7468ceefc6fcfb3ae2df2f7efd\nc189e1768a4f291d4de203ef6842ee61\nc6e36ffba5630fcd7301f2b895d332ac\n99f00898c6b373d5eb2c303a0e0d287b\neea06d3bf1f7ce6cb538a15c6737824e\n2bf9436a79954087bc585c195913193c\n48cfd8b4bc4919e6cbc6ff5546f4ec42\n5ecf8b2c217b840fef5e991e1c32e94a\n1d8adfa96dca83849143982c80da1e75\n9c3810b8bc98c59426fa791c6af15500\n3d396cf4279378456d165da625f3894c\nc172ec6226c1374c43a8324aee7340e\ncfd92436ff0d0779b011f864ecc25526\n341905f73563a75717e4d86bbbb01f9f\n491a1618a4891fc73d1328bfe2caad0a\nba3eaddcf1a2e829fb64f9487ce62dd2\n598f1f474f1cedcf33827bf0303796ff\n55da76d97620d111e3ecd2d9271dad4c\neca25540e280ac1c2d1e53cffa2132f6\n2fe634902b6ba945b4e4ece897f04daa\nd1a5a246ffc956d68c841014ca8dc002\nb5a1facfd0a023251e6afa6efa6add34\ncff1998a2a2f1b5985f7a3de54751f1b\n850d6a53ae03a9aab2640ff8dd6f4f82\nb1991078d16797eb221fc8bb1161b418\neadf347da5aa8877da97052ff1f36504\nafe3c44c5c05c22649d2623ea24fca00\n78c2790d999b0f9c1403af6fa4ab17f0\n65e21949247e36a541db137505613210\n7d997dbaf47acf92866219ff4a62ebc4\n135a15f938c824ff90e2484c52623a2\n969163f17ce6467d9378da473ee38a8d\n577acbe57ebdcbbdeeb8eb76c515e836\naf964792bea4edac541ae04c251c7da\n74470719a1b44c9a45aff212946058fc\n705df680888e17ed8841beb2e0280e42\n73e6d10ad309d831ddb86907b4b5f05d\n953adc8c58842c1281d9d9b1473043a2\n849f7c682fe9160d8c1a083ca347f005\n1117e714368f61ee1fba2cab1ada6bf6\n6cc258399daf767ae1942965937d3cef\nb9dde09099e081e65f76b0776a50c136\ne9cb5c7799f291ce51b48b48046ec39f\n9e49192ba54ab0fc92c108c58096cae\n1e0c84d82fd52f8c394eb4a27c704b88\n5e0e9215f91c163d7c513e87d3f6c6c\n99ecd71c5103416e698137c717c4ad11\nb3090ee38204289cb90142192ec795d\n8b5ccc3b1eba2c9bdf921d807a1adbf\nd262a9cfdeca256e228ca1071b304db\ne951df8d8d2f6ebc96f165bae5f0d61a\n7ba457477629beb8888d5ca4abf8aff\n3efda6b0c4e70f7decdcd70d755bfc70\ne19c3bb778bc8e9ed372f295778d1591\nd8b92646ee0cad39866219ff4a62ebc4\nad00fa76c831858ebb4a6ccf078584ed\n7d2194fb89c42da8ae5c852356538a5e\n876a4bea4fc35db067fd6c1ab7f8324\n313aaf9d79105fea82fd5ed7e39258c7\n5b1ef304e7a8cebde255aabfeb1b2b82\nc386c703e0f06a9b3a980283f1a7085f\neb1b91b2e6458a813f6d8df212adba77\nf1800fb3a9873af1e64f09105f9c8a56\n6f61d84f9373f7c5c05557706bb20c4\nb1c2fda8665fa9b19a6e43b878d5b335\n77e304ed79aded1e454ff46d89fe2a0a\ne2ee62e09af461498d84ac376021f1\n7aeadfeb93825b387b3c166137b0d772\nbb79e21e85306ba19e51f6d13f6d609a\n90bb60a421727973e3852f9948e4ef35\n6ec6d6a7124542c1973b07394b864922\nbb248dedd82b2f28deed0e4a55ad5dd6\n7d7fe630419cb3e3ff217e1345ac0f8\n85dbbed13875a3a2b90142192ec795d\nd8d0fcfc22f1b587308717e0a8b6a9a\n873b7ab23a5c85e365a308491a8f2afe\n3970dff155f0a8731aa129fffe673b3e\ncf254a334ba1af0aaf96425967f2d458\nc48e3ab1cc01521cdfaef96860d73193\n58f13d9c96d702c72d5c18abc132bda5\nfa8af8f2bedb0d461f29de30ec1bf6a3\n7488e965278a8b8524e54dbd7430a489\na9eda0d90297844cf92c4a072103d4f3\n3c3161464bb86b2d3ece64552d44d319\n1f2e662c92843dc9c083d5272d526845\nce5db5f4082b56b2eb2c303a0e0d287b\n355f5aa01c79fe1458a8952c93ff9829\ncdd493581ed137c5a6dae8586082d789\n410b12d445e5deb49588e71e21de9f30\n234541314abebbd02783b84b5d2d6e46\n925c05dbefada808cfe472915a175bb\ndf307c1941ca4bbd8f6810e1a2b6aa04\n2570f4db767fa046760fb52676c518d9\nd2f2ccde17f68aa6f0a2921fde94663d\nbdf142a3fdc97a23af018ffb2ed4ff85\nf2192f3c34a877f1d01eaac447e2e9b\naee93c0ff8dcf746ece2f98c4b805551\n731b8fb370639bec2c8b4a1ac32beb2d\nad8c4e406743c29a5b84e0ded5ffcc87\ncc3ebcb96229bd325f8dd1b77a5d87c4\nc9b7da24378152d082e68e57491bae0e\n5e8ce498a93fb7eae1a9c234926c21e2\n7f05275eddecedd06f3d18c7cf5f8b6\nae1a4397815849a682b5804533e545b1\n83ca38043fa57a7de8e8428fe69dbbc6\n9e4f7b6ed7936401af2bbb4162e3123\ne5bb455414be46bbe62f291403035429\nbea93ebc1fa965ab34292139f0435d74\n9951a6732eb8438a79662f01dd94fba1\n3a4c31888d291859f8e1db0ba8b72d09\nfa18c9283443b67388fb22c0c1b2b173\n1b3a8fa303445f3e4ff4a2772e8deea\nece02b7fb2257df139bf01a73033939f\n47ab7cf5568066fc86f968b3508ebacf\n591d1b833b9ebfe798b8c800ae001b66\n4ec2f4afebc5933638d037116a032a18\n4e8a28d0659e430845aff212946058fc\nfbc2e96b16209642fc86577bf738024a\n7a1754186937d247ad78ed9a26ab1091\ne49935adf322de2f77e672c4996ec4a3\n5261e8e52d1581d2398589a18564a81\n1f7f1d7c3882f638fb64f9487ce62dd2\n9e4cf06ced9331d3bed4193378c6c5c8\nc2d6eb0899e5d10dff531859cd52e4b5\n55853d0f4d5ba19745aff212946058fc\nee09bd0664e0a02292b9fcc49a614e2b\ncd65ea1bb0e091d5a1ea2dd0a4cf317e\n6c2fffad4d28822c1d57de40f2cd04f6\n78e347c044ac743de2d4c157e5bf1dde\n840d9078c31c188feae47c2aade5a70b\n20e8718d1c6d5a665a525c461820c6b3\n112743160fae5bd7ad83f267e8f0b536\naec5ec913aa2084b543941eaaf04581f\n5bd0346e72866c8256f77b6bc6731cda\n4c433697f371db56459e601c4b110252\nd35a759e08855e24dfe2d17b28f48786\n4ee0ed0c56540273a6dae8586082d789\nbfd8b473e1a8fd650eb615eb69452b\nfef52f113f59137dc541ae04c251c7da\n227db3047b2ab275b3492776d9bac18\nd8d49c7e002656aab572a59093f8c0bc\n80930e10f1f3ab9358401a911725e987\n75198f9e1c5a075c1e6afa6efa6add34\n36fba9c2f4c256dc4387c5ea62cbbe8b\n2f0acfd47622a8fa419fe456f622e6b2\n22bfa8eb9cdce735d90cecb09ba6f1b8\n4a523f749fd08ffa698137c717c4ad11\ncea154f7fb5351bc26da67afecb7dc87\n2d189012a5b5a64aeb5178df7a9bd7f4\n7773c432613c96596cdd81a51107bb1c\n70e4afbe0fa15ef3bc1624bd222f607e\n3899f8b55ec9f1db8a1ec28cb7d97871\nc8f5e3891a7b0d1188d5590328ce0ddf\ne64611b8f590d12d2ae6c39a82bec2c9\n8500272b43352ae6f844b7e844d01ddc\ncb89a617351ec4c4eb2c303a0e0d287b\n5adf37321156a7bcbfe1cbc47170312\n325c2da58c641c12e3bdba9430565083\nf26d39cd431135cbc92e1912af872cc\n9115745cde6f30c67f141c9abbacbdb8\n65c55828d88fd02da08632bc2f6881eb\n43f7e9f8ad44e8236557d610dab4f1b2\ndcaf4238da8ef379106f24d0bacaba69\nd9e8f45b4cd81f0fd1c387e16c0a41b0\n3658be4cae1c98b84a51f4b900f5eb50\n7677121309eded5fbbd09450267d17cc\n4944328c0ea895c53f464857aba8c0eb\nf2ad53e569f8ea255b9ed5fa79e9ec30\n8e4fbd72746ed71c20d966555ebf57d2\ndb01f2f8cff7b7e1c517f0fe59ec7ee\nc84cc7d62a9112f7b9d24c378f086d93\n147fd27a40793d7e9bbe4f1047e9e5fd\ne27fc8b68996d205f650f4803ec7962d\nd7fc7ed59558b7b3f3e39f2e17005efc\n4690184ef7ea805dfdd29529d1a15514\n5e9890e2f4cab96dbc6cd96a5e6546c\ncdb70178e2562e7a80ac63732535bbcc\n2e4aeae716401155bf9913347b9df76\nb2b616535ffca936c9189a1f098bd081\n50848665c2b2d6f491347c63d1dae43c\n7e35bae76c10fd7968cdca3005c2cffc\nd3ba52601a902f407f436bc8bb8973a3\n4bf2dba91007f0285ce1e6c1c914b7a9\nc600a1ae674cb65c335aeab2c20177db\n30f5a0395aa8ce14d152039c9a3ad601\nd3de6c76e6d96f7fc5fc3eafa9cdfb3f\n98cbe2b3e62879058e3175d49fbb0f30\n268110d849a3aafdec2f14500e179e92\n6b72a64f1a6a745ec99bbfcf5650bf52\n750f5d76abca0a05bdb69bbe5cb6055\nd188b20659011142c8067f9682b92f0e\n459decbc3c6bb150ba2abf2ecc57eeda\na6d232b7443609fd20ded1536778b0f\ncc4f56a126353cd81985296f8eaaf6ef\n486e953ff691d414d8190076748f5b20\ne687e0074b0dc5bc470938161c06eb7d\n35857ac61388f9fec2912ef1a1302821\n8ff4c7162259b1d5cf816caaec167fbf\nf5a0bce67dca5ccbe3de75b155d3b403\n933382c8b6cc6e24f0cdce9bd16b6c9a\n48a02e067f83c803473f10e6caaeca56\na2e82524f7920e12d3ded2945a65f23f\nb25e91edf5510306eb2c303a0e0d287b\n3173f703a1e52d7f38d037116a032a18\nbc4ab06257678e8db25f0198c2ecfb0e\n246335e0dfc3a0ea834ac3b5e36b95c\ne0ddb444604f573d48260190ec06324e\nb1ed34ab6779919510f652915f26dbdd\n19b29e973ad05c71e0a1fe48a8d148cb\n81d9e9f072f73e42c71a2f2273897a58\na49537b465965537fe3128d27fad4d2\ncde9d2f6302fda60cd8d9984f3ad2fd7\n2defbf22a2d6c97d48f817470e1b499a\n8f9e62cf323515c4ca380c8375c4cdb6\nb9d541ece25778e12783b84b5d2d6e46\nbc8cfba04c86ab537117d5d39e7f9235\nbc9448e22c2379d487f08fb94cd2785e\nc3648d0cd141035428cf87eb5ebe5e6\n4fbc7c634bd4488798b8c800ae001b66\n583ef94812afcd26e025e00c738da634\nd939109a33e6e2d175517226b23c384c\nd188656d279f4d8b94daa4565dd30535\nf9cb8429f822b8469ae563bb6367e47c\n337381e4b5c11c4f8c9312de4e9cb8a8\nb0238a48839d2b1b64ada2fd6418de4e\n14b8bed0391dfe1dfa808b0b90ff6379\na554a62acf40e578cba07fb2573fff75\n39875815bdfdce2193b1b9ed21f1fb92\n3cbb8096ac9bef3533ffceb8a4acbfe1\n7f81a9c7137c855cd03428b7741c342b\n1e3400a7a099823371feee345701e9eb\nab52de94b627af794c0b957b7129452a\n4abbc9f36affe95dbcbc3fd6f72b94c\nd651a1f3e02593772b23aad8ba1ba03a\n2d702653fd65092cd3ac8c766eb7aca3\n4869abf7743f09b71f29de30ec1bf6a3\n55cf3c1207e421a29e3e34eaf1f39535\n99450835aba6e4c4da2951c4977eb283\n8e1778cdc0bfec3e18693dd92ffa710d\ne72c59779e1a85f05308b39b1b1978d6\n630bc6dc892aa9bc642f9e27aaf0c47a\naf07125f24a17476eb2c303a0e0d287b\n36c8dc4d5bbc44c87ce8c809505eca2f\n5168b7d5df698bb2852d4401c7cd1fee\nd6cf4f71059b98a13d9a3c3392922df1\n395471e88200756d88d5590328ce0ddf\n99b9eb5e1a7dd3b9e4614310319ea50\n63f170670881b2deaf6320700e3cf173\nc48ed09355e7ab34275e12937d8e1776\n59585673328efdf2efa33903c8f77ab8\nbc09ba292bd9e684610faa04834ad4e6\nb10850ed8a61d4dd148bc340784a8c1\n782b29db43c02f7442b917ff8145b491\n2dbe5ea82a45443b71f3cc81eb6c076e\n1a2b1863733c2ca65e26ee427f1e5a4c\nbf8995f756b59102698137c717c4ad11\nee3d521376d89f408c954439655c356e\n82242062558a24bc97a9c690ec97cc81\n4adb08a459076889574b6f4c9eeb8eea\n75947361891546713c3d3b81c7ce4f52\n4b63a567e41b63974de203ef6842ee61\n2467cd9f4ae70875e26aef76db45b56\n44b4972b96604e08a2fe1981a00251e0\n38189a2101b5e6c3da32b7c218678a0d\nb26565bf67d9f61abdda868bb83c524f\n81358250f7b811e73c70f7afafd32393\ncfffdac8ecda7575de208b4547dba0e\n2212a794bfca650384d5ba37e7a649b7\n1f883bf1bf0f6bc7a993db466b6d73d3\ndf575767acf17d7188ca49762bf17cdc\n56e2b7332f9011b28fecb9f40039f353\na06a7f4b82beb87df6fc999231665677\nb9bf493040c8b434f3e39f2e17005efc\nd25531bd6b7b8274ceb0dd441125df3e\nbfa34aeefb04b4c2356c09782a9de7a4\nc0eb62cb64ee1a31f29de30ec1bf6a3\n12e012fc28fc8d784de203ef6842ee61\n1dffc8919a03627ecc015b9f8906f7b4\n4b501c73f3cb02c63438e17bc657daf1\n15d805635f77420ef724cdbbd599557b\n410c336c78ce00ebe2f628ca3c07d462\nf46a84c0b15f8c0492f7f11d4bb65374\nd9e044a3cdd4359110f59460c26e963e\n677fb8c312d9c5642712ffd807ced208\n5c0e6663c131610a2c3770cecdd58208\n2507ed5c9eb161569a704df179502ac7\nd76ad4ffab09bf27f3e39f2e17005efc\n6dd448ee6a2288ff5a680bf43a0499b7\ne8b93c451e4278277220891f188bc420\n5702b12bfba4b9eb9223657c918f0a45\nf1d39ce0d8c25403b4caa017b521f7\n30e45246151fa36a9cccee214bcb0021\n4818277b913b682a3c3bd8d7abbd3fc8\n68f118940e88df383ac122c0078b9b60\nd3043fff20dad5c41dc762869682f4f\ne86aed19f3272118e8340a4561cb4030\n73be7ff2caea7fd47c173089abc6401\nf7f62b9657aecbe77f00b68989ad3ebc\n1f1fb65b78e0f6ac816e21307f82dd39\n87f68a979aece6f71f29de30ec1bf6a3\n11d9bfb57990eed6d674557449cdc5a4\n2b7ce6a0492cb7818c0e3fdb2a94c91d\n47130fa6563a4712af6320700e3cf173\n89ca399e4ab129a60014fe834c82238\nd3eaeb69557892657828ce3c6ecfce8b\n9a9bd517b3d9c60f9e23f6fc87a31098\na668bb9ccffe8cb627ca60ff81c74bf5\n9c19eacc8033da3698a97ddfb532e08c\nf2e303d85466a0fd88d5590328ce0ddf\nebff6d8111c67fbdb52763715f7a6959\ne64bb04b54022e708d7bd537eb907025\n8db75d7703406e81e4f8f268ed99350e\n263eeac4bcfca21285f7a3de54751f1b\n390de3a1bd0191c881d9d9b1473043a2\n7fb484e04409f7323f3cc56bc9bfcde3\n8742b1778f2a6e7deb0cc8797c62d3c8\n5bc0bff4ead8277b421dcde4f714e772\n355a85d0156984c75e559927dcb9417c\nbd4614ae4c709729f8527bdfe6691c9\n6a541c64083d2bb9c5408f4f799fe72\n4dc17782858aab6e3308cf743f153e29\n1b86008df6322c5d438d829603922fbc\n67da87349baf66e3c1ccec171a275967\n8eb481ee0fa4f55bf9d742d7f0246fb0\n4765a72ac8a0eec3993eb1c02818be1e\ne969147de0934040b2533fe4d795f40c\n36123091df7600dab1f22ce939b4db68\n42b1b67e53c9a8ad14de76bc030c9322\na02fb3d1e8e9d34ffdd29529d1a15514\n296c315f8f0c7d5d87c63d8b3018b58\n366c8a02305d2a0f4c9b81664e789bca\n77327d5b8b56083415a0ff0aad35ca87\n88cc060aa20b340611b3e656ab4bd115\n25677ae07e0257955dd2c581ea62184\n2458e4e41633c95642f9e27aaf0c47a\ne3fe6f0e74fa641c2247d987054751d2\n5b542fec3cd96c872e28b2b96a4985ba\na4cf574f52d4e8d4642f9e27aaf0c47a\n2ca06dc9165d4cdf5fbe3e7e4d41e98c\n733105c0a74ab0a2b83ec978f31c7f76\n32dc0308ca44f256ae9e3df35a893c9\nad8b5aaa3eb9f2f69330265a9fff38de\n1c974cf5f4053701876d2c2355e426da\ne74a9275bf24d3e47dd35385411db37c\nda73f51f17f0a8bfb0d00cfc385a039b\nb4a2778eb3f3dc55f877f04737ced5b5\nb820d42d6b9a08a03cf31426f0438400\n973d0293e286c80bf3e39f2e17005efc\n65577c66f22fd84d6eb9a4c3b55eb0c4\n8d7af39621a060ef6483ed11b9134e43\nb6ce7ac71fd3e33617a96ef097e71178\n29a895c9367516c1de08ac29282054f6\nd8ea840a28472e04954c06f15cb2b5c8\n1d389060e50915e223676ae79aaa08f7\nc83910ef0a35953756e0cfd6e5118fc9\n10a57262251f03b28b27d51d442cae1c\n128ab8b74fa037597fe03c0a35dc1886\n4a5ad5b71ce08abc687e743787d2aa6b\nd0d2753d2d3e6d3d2752699ac7aab1\n6d2c856797bc246898f9d8529de7066\n3bb6a5deec68ef77fee64ca302793912\nc1825c8ddf2f263ed6f64c5c0b0cdccc\n8f3d3eb663508afb1143e3955ded9f0a\n44c07d26323910f4fdef75f370a46dd5\nd350936cad33863bf2ad837508eb2db7\n7fbdbc374263bc0e44fe68fe7fbc12cf\n39b7b83a42af6d83ad0582c282e8474\n481e13e24905af01ba1e7c529a2559b5\nfbca0e2a510f2b3594daa4565dd30535\n2c0b850acd7d11dc428659c2b5124968\n58e6243d1aade364186e889431adb691\n269ada03c39d200498a4434c6f79eefc\n8e7fd92d91a9974a2d220e1baafcedd8\n9f34d1dbf06b4d989330265a9fff38de\n5d48d75153eb221b476c772fd813166d\nd0ed110df0d56672b26ad4ebd4ebcb88\n58b6ab987872ed42f36dc23129445ac0\na74f3cc7adbdaad2a072c5ad67cebc91\n23c31b1c25689d2a7ba04de7d6d93ce8\n973a6d80a9dfba962625c670c48fcecd\n3a71bdf6dd3e42bd6d08077e9257af3\nfd52c80ae21d19251e0d0f6bac6856eb\n767cd95abc076d3af9d742d7f0246fb0\n68dc6f43a895e7e143909b9ada90aa22\nd25d9a2bf4820003f3e39f2e17005efc\ne853f137948055b188d5590328ce0ddf\n27f0d2bf42b0e3374ed242fafe836df1\n2005e1613f1a46b5c083d5272d526845\ndf15e931e12c32c38a5d92735846f6c\n5da69ec4bee76b21f3e39f2e17005efc\n89f52a2a136ce55728ba119bc0e1c878\n42a8428a3d909fd64de203ef6842ee61\n950ebca8ad7d94051fba2cab1ada6bf6\n141b2e976df2d4ed4ccd729f8bcb378\n5cf29e4dff6535c394eb4a27c704b88\nd14c92a31d848b1371090852934fa2c1\n33f4d31a559bc07fc1ccec171a275967\n6de5985910b222f8afa96d6d0eac8962\naafc192d33956391b82d6a0b1fbc7c80\ne0190bd315d8109f542c6282a2a9329c\na7fdfc15268ff4d68413778731d6cd28\n340bed24d1dbd33ba9142e7277ee08f1\n7ba19c8354c66edbb74e6fa236ab84b4\n6fbb26f9372ee87648192cebc0015590\n1b4268c4d812e54943bd01645155d3ee\n3e408017d8b03ec5a5e52d43f595c657\n16f53391dba14c9829ebc23acefb248a\ne3a49772e431fa6a4911559f9f073abb\ne02d395707464e692ef42ab47be9662\n49861c22df11a02b910f44c20a5d1839\n29bff2fc529f82d676051c4eae3f0a9\ne28a79fa4880c3c5b0df8f7e348f816a\n9908b25da1e19480b51edc80d299de94\n9df836e5ae285e2a5c5cb89ac1b518ee\n6a7da232456b16e852f03e17d84c12b\n58d8ded0bcfae37985974f8a4d3be0b0\n21256efa0a78f86b4448fadc60fab7a7\ndf0f90c6abbfeaa0255deca950ace5f9\n6c9020061d71b190a4755e7555b1e1a4\n6c00d47d1c8b81fb90142192ec795d\nf65e78e69d1d5eac465721b273720f4c\na88f4ec8440e412c92336765b86c93d9\n5ef0011ffbd75eb6dc1a42a6163b8fdd\na3f6f17c5febd688cb5e9b11b96f53b9\nda675d2149827fe56ba3edb0853a984f\n4d95b6e392c9d95981e1e9063401fa72\n2e19e953c01ddd69d5bb7fc09b61862a\ne16e0925ab21f2d3a45eddb1d745bdff\n99b36b2d2174f061ff8f632f1c753803\n1d6d57f489ef47fca716de2121565fe\n85481518c0938a6eb1bb46d2556ba67d\n8fe646e75e9b99bbb58435942a1b4dac\ncc03dbbf18adc483bcf964ea747b39ec\n57658278fe1fe0571711b4192259c7f2\n5a84b0529edd7101d3ca4877ecd2c01b\nfed3590199534e0f300dee22a3d8ed99\n861048281f4507b45935a8bd0d2fe1f3\n97dd02cb0afa088d485fd5204f716152\n611824dac2873f5b59f280bab375e8b4\n6d0c48b62f610ec0b90142192ec795d\n9848322f786fc6d9eb2c303a0e0d287b\nf7220f2e7b880c2492ab202de6ff04fa\n1a9bc7dd64da10f344ebbc705ad8c07\ndc38553436df0e4bb129901f80d24b7b\n79c98bef5c1870b64c55cd455710ca53\nde0964254f4599e8666f23db664db86\n5456c7546e3f3c3d9c5408f4f799fe72\nb4f254a5c49748a2db2b485c26c9f191\n3e5147f0fcca2ed7c2920de4c5efc2ee\nb3aa94c4aac0534ec34b1b7198ff8321\n9ea697394812ce328b68234f52d97099\nf66bca54b97bf719b1bb46d2556ba67d\n92d7254e73fdab7289c6f1079da7a8d4\n6271c832e8f629b73c83f6e156ad107a\n50ec883d9c1f715614edc3c9b2489f4\necbfa1faba336185bc33bb3e21836dd7\n6a5405246814b82281c5ee986f4484ec\n933aa8e54e97de9392694c864c93195e\nb77075c46e424ce9eb2c303a0e0d287b\n7127c0b5fbcdbf21adcf800d8263e5d6\n853edd2a09215d83aad3e4869fb7b555\n63d91bce2f3d26abdeb3e56da26a6974\n447a43ec44a3e672e7cbc4e41c1d1020\n4fc0f4f2d29a463cb1bb46d2556ba67d\n9e653d3b0b8f8c6b28f998b2aa4c5983\n1b5e114692abf9a5fdbbffe94281448\nfcf21e1176459664806b90e3f08c9a28\n176c629c93b5a1f73cf0b8b75857cc24\n6d537a1a09de6b13f5678db9e73ab77e\na88fa5daf540c14a4f6190a680acb783\nd10cd8bfe5eb85572aec0b439528eb79\n7b200ae33e01eda467fd076ce612c54\nf83474c31e7bb6bc1022decd5ff96217\neb01f5a73f0239a348c096ae17d885c9\nb0e8c331eacdc9bef3e39f2e17005efc\n18f650bbd1068f0589c6f1079da7a8d4\n544ed8713bb6b697846f1b9d68a7eecd\n8687ac78ffaa38584de203ef6842ee61\n14fff3ebab1e144d6b77971fd22cc80d\ncfa697be9ee40b5357018179649e2bb7\nf4aa1a1c7216fdfcd3d8a17e1b074875\na8db7dcc16750af73c83f6e156ad107a\n5af5aa92ba49930c3f41ddf3713a131\nfc71778c7daf92e49786591d9b03a096\nf8cf09473d99d5ebfb7214357e073eb7\neb214ca65059e8d8fb8de648691848ea\nf6288a9297948fdc67383adf153b22c5\nd0e7102863fdb18fb90142192ec795d\n9119eaa9b5996cd3b1bb46d2556ba67d\ndaf5575e801967cdcefe7473eb81422f\n925f3de9b1256113538505dcebf57ab1\nabee560e2dd721eeb129901f80d24b7b\ncafc4d2198b6531bd5527b961edeb7bd\nae8ccc2a90c7d57ff107f18bfa25e296\n955507bbb3aa0b97b1bb46d2556ba67d\n51537c56f71ec82acfd826dd468a5497\n1d6bcf04874000a9ea96bfd37cd8bdfb\n65b75158bb049f5af647317afa6ffdd4\n30e536833dee7cd8a9d21767a2141a63\nac52cf0b598e930ab38d3c03866c1379\n7baed55a551f03efa27ad5a09bb4c2bf\n9b87bdd824e68950f4a06efdbafdd7ea\n8bef56b64003be1789f903fb361de4ca\n396fb90a02afe669258bd22729297863\ndf63e149e706e3741556f795d265590\nd4ffdf377bda1aa5f650f4803ec7962d\n43bc1dd4f4d7f07a84f7e91f7eafd792\n2e4adc3992a773b1eaac92a15231622\n332d072efa23ec9ae89f0d5485194c5\n8e431fd55a7aca0b124dae0a32996c4c\n5f5490a8a7af2898b1bb46d2556ba67d\nefc4de2b174c736dc99bbfcf5650bf52\n571a2485fb205e5fa9142e7277ee08f1\n80439bf303734b76ff37346ffc41ec74\n686a53aff9209c258d25d8990968dc68\n787e381b4a968a55af5574caf3b1433d\n1b2e790b7c57fc5d2a08194fd3f4120d\n337531151abc41a7b390176e65ea3f39\na35aea08a3cb9391fc1bbbe626c79a7d\ne2446b9f4b9fb179f525bb02d30fbbfe\n1b1cf4f2cc24a2a2a5895e3729304f68\nff70051c32217b2df671917093bd361\n6dd917d73699da0d255465ee23ab5b12\nb00e1af5a8d0674efe9d6d96542b8ef4\na8455459a7b93aef9e5629b793f22d35\ne604463b6c45712395ea46728bcdc15d\na3be3018a002bbecacd548a9de859b7d\ne8b19c46e5beb3823b12275bdb30c153\n8f2eb4f44b95da78639e286420a03c3f\n393f1f8b2c656484a7ace102781bfe8b\n4a0cbef5bbb19d840b6c13818321d0e\n4cff5eb82cac0f56b7b1411b0ad3bd0d\n4be2461bad10aa82a875c848d0fb1664\n7d3eb0d2de5c5b8672a78a0929ee12bc\n502f848385718cb76e1f79eab597a3af\nf84196260e558ff5abb59ca95d19016\n3d908c2b4f5812702fc668af6d3ad0ad\n501154d9504b62b9da27170f98feb295\na6d50000249d71cf70c8aed16b49b164\n4af6289f159094d21197663c308adec2\n19cbb5d8d74f8813e60e51f454cfc3c9\n8411cba605709e46c26de8baaf779d69\n7915c47b72e6d496e453885abe85c310\n57a8ccaf2eb8d6a3924d278e5faa7137\n3e03e3d547d6fd9e4ca65624f18b38a2\n606b512701e71ef6fb80910115d3c39f\na56c3a66dbe0ddf4a70cfb3232f40c6\n62255074b0df6a115fa2a5df3ce5bc40\ndbcf36d87385eeadf64bc205d76349ec\n78fe059e63f817a296f6c44da3269880\n5b86640d3bc2e43decac3f40526a2cc2\n10fe40ebace4de15f457958925a36a51\n819a7b31f925a302474a33db0a80b327\nc77c30796e80cc291edf59b9c77b0b75\nb7d6c9e38884b121cf439004777f8b49\nabe4b3c405e1cc67bcd376892ed4f5df\n97402ccd78c061251141cd3611961b0\n27d5c5d0dec7b209124dae0a32996c4c\nb998ce1c2a335d80868bf275e08c687\n9a8c57edf56dff168a76a2dc0f9ed02b\nc2d83f3b8665638c664b3b9b23ddfcbc\n1e3f014e8eba0db7fa575e221973fef\na646c8780e79d091cd079e2d482994e\n99102724561012729ebc23acefb248a\n57b3fb45b6c484c8cd9052ebaae01826\n528689641a6562e7bd7a55708242b1bb\n704aaee1bba4d220179fa02faff22219\nf2d7625709d7bdaea6dae8586082d789\ne456eded209aac05a8b0c9e2ebd8eeb\nf89a76e638ecb1aec79d3cf109867c13\ndf8fdfbda6e15f38fc740ecd0dc695a2\n2de6a45649b392d2f7051f81d65f99eb\n86e404c548d965c6d28357d0413f2f80\n9625f56fdbada3377220891f188bc420\n713861441f4c7110b7b1411b0ad3bd0d\nbd04c982ef479f160014fe834c82238\ncfb1882ac34b81d8a357368f9af15b34\n406e7646609bc8bd8a53c9119bc523d3\n11e101e938688081d3b936925082270f\nec97e9975c94f7ba727ef88d634f1148\n118d43609d6de540fdd92f489e57a4cc\nec779915957e5361ce000b0a5d25ebdd\nce15225b24bb4ed2742fb0ba5ae222f2\n9b93b845578ee8a20c10ff7bcef26d\nbf47c2f0b5d1c6fef37a9c459d3dd62a\na4d1ec9841281a3cd1e97c10e2464c2d\n7cc3c41e998caed8a70cfb3232f40c6\nfd488ccadbc89bc7ece8bb633fd3452d\n9e6d54edea8f2adb41556f795d265590\n3c5d0c6c971d39aa70cfb3232f40c6\n9c41a1bc835ab6d81194cbd9c0740031\naa0e4a79926c68f9bba1d36dfe35a060\n6db27ae2c9cf722d1743d8ffcf66c439\n8e0e3c0c19d38ea1696cc0dd628edec7\nf678356e3e61872a28730ed49126392b\na45cbcfb2763423a6540eb087d7e15bd\n7bfb0e8e74e1bd2bbe7ca2216dc1576a\ne23e4845d3a990d25fc186cfb5f359d1\ne0b49aa20792f2fdc99bbfcf5650bf52\nefd174efe9130399be7ca2216dc1576a\na492984be2c03294213a43a25cd73264\nd55ce64040e0b3e4ecc9205d69d88837\ne2e0d0dbe736e3164947b319a9e09fd\n1f5d3310cc5f9346f1d7b2f32e8fa69\n5a4e0cb4562b2e0ef647317afa6ffdd4\n77a02f09cd22e9f879863338881ed398\n3216e49e5dd304956bed41d0253513f3\nac8afdd8c70178abf0a977ae17a6b223\nc2d71194be5909a75f71e6fef75fd750\nfe84b8e3bf172880f54a2210c7b2aa25\n1356fcf0ea4a95bcbe7ca2216dc1576a\n88ba72c3f33343ae9e6f7dedb7e5f584\n997054b7ea21f5829588e71e21de9f30\nefc2b7a0ab3828761194cbd9c0740031\n6b7284918634488da1d10a704f5ebc89\n2ceb5d34a15b73393302308333adc4be\nc46aa66acaffc37af4a06efdbafdd7ea\n2c23f32d6eaac557b93dc42f7dcef6a\n8877086211c9976cd27beaa6c9701d39\n3e97094bc123e370be7ca2216dc1576a\naca0172e1b301b8b60c68a106ad561fd\nf15c255128f2c9c6b7963b720a430c5d\nd9ca42c1199196a8f8785957fc1b208\nc318af82802fdcfa9863712216521456\n5b45a9913b90c67f8e2d64007fd7ea91\n907c179103304ce8efcba30d0f49b70\nc28ec663f25bc97de8bdcdb326f0e57b\ne219390e6eb152024d0a79ea230a0577\n6067d0e8dda0b78c4628573ed5739806\nc3d22ce3607156466ac9421934926ab8\n2a9df36f9327beb27244f3b2d7f5074d\nab6724e38aa593602a99899765aa8dc1\n448148366050fa2b17dccc00bc197b9b\n1cd39434382e08ab8510ad9ae6ed36b6\n31230e9a2e4d7cf7cf291a4a9f36cece\ne50e4b01588116c69eadbed0f2d15378\n4bcb45bdbf0309201d2d2f3b717d35d5\n43ff0403af233774a245ccf922912805\n1849ee33d087288ebf473eeb55ae85d0\n30dcb4eb8ae2163792e235fb0f1931f3\n48a037d4699261d3b274bf54d5e89093\n7be86a514fd217dbc91817453f80389d\n3bf976118908886611b5f34c8a675124\n75aef09a516f59da49f73a97204d432b\ndae38d7110c4bf252f84cb7932f866fd\n4f9d7b905bdd80792b786ce268ccf414\n8cf34976d5cb61b0f8901acdb7280141\ndeae1ec7a6e340e7c500d4aac3b87ab\nd7755acf25baf326e625a0837cc45a0f\n12900e06f0f4ec9e49f471d054f6b528\nd8a72e6a9f34ee36b571511eb0f92ed9\n6fd0071445c70e9297e6e890ac2fb198\n3c041c05395b37782c8a76ae283dd98b\nb38a6ed1bb88dc6ccd57b018370ca909\n9c4d83025107322b2aed6a9a322ced74\n2722150ea003017d7fa575e221973fef\n69379ea3029bb2f6ee5140f12d845ca9\n14241942d79f89226587cb13c78fb9b\n5b00c251f971aaa437a692cc86ebcb7c\n99c19a1c05dea30454e3de9fd2bf8dea\n4d5d231a701433110a313d673794913\n33d7cf0698dea49acaf9c991e0bc2cd\nc04df151b8677becd8af3a076c923cf\nca3d2f904f53f945d02db4eaa8d7ba76\n2a9b44ad6d6200c02b3fb35c6618f417\nad62a23a7de3965f94daa4565dd30535\nfada91842e68dac015ebc00dd3588bef\n6737f75bb87e3cc0847c4e55bb965ab0\na7f5b96f138649c6bc30e923e47d8bd4\n759c3321f016c1cf7cd1f8dd6fbce8fb\n49fb20c0d5c84e2757920cec1ab34b29\n48a584c9080f7495b97c9314bd4647d5\n9ac6483c969f1120b05dfc874f00d5f3\n8a3a23f85c4c4fc4f2ad837508eb2db7\nf193688fa17197f7798832e32e32aae6\n9c92fb3f3a4fbe8cac932f3ba44b77b\nfd13e9a9d84bf26266d02be2d9ba0945\n27540cb221ffee07983f0317c2c6f92e\nb044558b01dfb98d3d8de7c49284d3\nbfe67a6080ff5bc17ac1d5790f13a22c\n"
  },
  {
    "path": "demo/demo.py",
    "content": "import argparse\nfrom datetime import datetime\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport os\nimport sys\nimport h5py\nimport struct\nBASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'cam_est'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nimport model_normalization as model\nimport model_cam_old as model_cam\nfrom concurrent.futures import ThreadPoolExecutor\nimport create_file_lst\nimport cv2\nslim = tf.contrib.slim\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg dim')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--multi_view', action='store_true')\nparser.add_argument('--num_sample_points', type=int, default=1, help='Sample Point Number [default: 2048]')\nparser.add_argument('--shift', action=\"store_true\")\nparser.add_argument('--loss_mode', type=str, default=\"3D\", help='loss on 3D points or 2D points')\n\nparser.add_argument('--log_dir', default='checkpoint/SDF_DISN', help='Log dir [default: log]')\nparser.add_argument('--cam_log_dir', default='./cam_est/checkpoint/cam_DISN', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--iso', type=float, default=0.0, help='iso value')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--create_obj', action='store_true', help=\"create_obj or test accuracy on test set\")\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--view_num', type=int, default=24, help=\"how many views do you want to create for each obj\")\nparser.add_argument('--cam_est', action='store_true', help=\"if you are using the estimated camera image h5\")\n\nparser.add_argument('--augcolorfore', action='store_true')\nparser.add_argument('--augcolorback', action='store_true')\nparser.add_argument('--backcolorwhite', action='store_true')\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nNUM_POINTS = FLAGS.num_points\nBATCH_SIZE = FLAGS.batch_size\nRESOLUTION = FLAGS.sdf_res+1\nTOTAL_POINTS = RESOLUTION * RESOLUTION * RESOLUTION\nif FLAGS.img_feat_twostream:\n    SPLIT_SIZE = int(np.ceil(TOTAL_POINTS / 214669.0))\nelif FLAGS.threedcnn :\n    SPLIT_SIZE = 1\nelse:\n    SPLIT_SIZE = int(np.ceil(TOTAL_POINTS / 274625.0))\nNUM_SAMPLE_POINTS = int(np.ceil(TOTAL_POINTS / SPLIT_SIZE))\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nif FLAGS.cam_est:\n    RESULT_OBJ_PATH = os.path.join(\"./demo/\")\n    print(\"RESULT_OBJ_PATH: \",RESULT_OBJ_PATH)\nelse:\n    RESULT_OBJ_PATH = os.path.join(\"./demo/\")\n\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nIMG_SIZE = FLAGS.img_h\nHOSTNAME = socket.gethostname()\nprint(\"HOSTNAME:\", HOSTNAME)\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"]}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"]}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2']}\n\n# cam_gt=[326.421594487, 29.0316186116, 0, 0.790311739218, 25]\n\ndef create():\n    log_string(LOG_DIR)\n\n    batch_data = read_img_get_transmat()\n\n    input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (IMG_SIZE, IMG_SIZE),\n                        num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl', FLAGS=FLAGS)\n    is_training_pl = tf.placeholder(tf.bool, shape=())\n    print(is_training_pl)\n    batch = tf.Variable(0, name='batch')\n\n    print(\"--- Get model and loss\")\n    # Get model and loss\n\n    end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, bn=False,FLAGS=FLAGS)\n\n    loss, end_points = model.get_loss(end_points,\n        sdf_weight=SDF_WEIGHT, num_sample_points=NUM_SAMPLE_POINTS, FLAGS=FLAGS)\n    # Create a session\n    gpu_options = tf.GPUOptions() # per_process_gpu_memory_fraction=0.99\n    config = tf.ConfigProto(gpu_options=gpu_options)\n    config.gpu_options.allow_growth = True\n    config.allow_soft_placement = True\n    config.log_device_placement = False\n    sess = tf.Session(config=config)\n\n    init = tf.global_variables_initializer()\n    sess.run(init)\n\n    ######### Loading Checkpoint ###############\n    saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if\n                            ('lr' not in v.name) and ('batch' not in v.name)])\n    ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)\n\n    if ckptstate is not None:\n        LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))\n        try:\n            # load_model(sess, PRETRAINED_PN_MODEL_FILE, ['refpc_reconstruction','sdfprediction','vgg_16'], strict=True)\n            with NoStdStreams():\n                saver.restore(sess, LOAD_MODEL_FILE)\n            print(\"Model loaded in file: %s\" % LOAD_MODEL_FILE)\n        except:\n            print(\"Fail to load overall modelfile: %s\" % PRETRAINED_MODEL_PATH)\n\n    ###########################################\n\n    ops = {'input_pls': input_pls,\n           'is_training_pl': is_training_pl,\n           'loss': loss,\n           'step': batch,\n           'end_points': end_points}\n\n    test_one_epoch(sess, ops, batch_data)\n\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef cam_evl(img_arr):\n    with tf.Graph().as_default():\n        with tf.device('/gpu:0'):\n            input_pls = model_cam.placeholder_inputs(1, NUM_POINTS, (IMG_SIZE, IMG_SIZE), num_pc=NUM_POINTS,\n                                                 num_sample_pc=1, scope='inputs_pl')\n            is_training_pl = tf.placeholder(tf.bool, shape=())\n            print(is_training_pl)\n\n            # Note the global_step=batch parameter to minimize.\n            # That tells the optimizer to helpfully increment the 'batch' parameter for you every time it trains.\n            batch = tf.Variable(0, name='batch')\n\n            print(\"--- cam Get model_cam and loss\")\n            # Get model and loss\n\n            end_points = model_cam.get_model(input_pls, NUM_POINTS, is_training_pl, img_size=(IMG_SIZE, IMG_SIZE), bn=False, wd=2e-3, FLAGS=FLAGS)\n            loss, end_points = model_cam.get_loss(end_points, sdf_weight=SDF_WEIGHT, FLAGS=FLAGS)\n            tf.summary.scalar('loss', loss)\n\n            print(\"--- Get training operator\")\n            # Get training operator\n\n            # Create a session\n            config = tf.ConfigProto()\n            gpu_options = tf.GPUOptions()  # per_process_gpu_memory_fraction=0.99)\n            config = tf.ConfigProto(gpu_options=gpu_options)\n            config.gpu_options.allow_growth = True\n            config.allow_soft_placement = True\n            config.log_device_placement = False\n            sess = tf.Session(config=config)\n            # Init variables\n            init = tf.global_variables_initializer()\n            sess.run(init)\n\n            ######### Loading Checkpoint ###############\n\n            saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if\n                                    ('lr' not in v.name) and ('batch' not in v.name)])\n            ckptstate = tf.train.get_checkpoint_state(FLAGS.cam_log_dir)\n\n            if ckptstate is not None:\n                LOAD_MODEL_FILE = os.path.join(FLAGS.cam_log_dir, os.path.basename(ckptstate.model_checkpoint_path))\n                try:\n                    with NoStdStreams():\n                        saver.restore(sess, LOAD_MODEL_FILE)\n                    print(\"model_cam loaded in file: %s\" % LOAD_MODEL_FILE)\n                except:\n                    print(\"Fail to load overall modelfile: %s\" % LOAD_MODEL_FILE)\n            ###########################################\n\n            ops = {'input_pls': input_pls,\n                   'is_training_pl': is_training_pl,\n                   'step': batch,\n                   'end_points': end_points}\n\n            is_training = False\n            batch_data = img_arr\n\n            feed_dict = {ops['is_training_pl']: is_training,\n                         ops['input_pls']['imgs']: batch_data}\n\n            pred_trans_mat_val = sess.run(ops['end_points']['pred_trans_mat'], feed_dict=feed_dict)\n            print(\"pred_trans_mat_val\", pred_trans_mat_val)\n            return pred_trans_mat_val\n\n\ndef read_img_get_transmat():\n    img_file = \"./demo/03001627_17e916fc863540ee3def89b32cef8e45_20.png\"\n    img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)[:, :, :3]\n    batch_img = np.asarray([img_arr.astype(np.float32) / 255.])\n    batch_data = {}\n    batch_data['img'] = batch_img\n    if FLAGS.cam_est:\n        print(\"here we use our cam est network to estimate cam parameters:\")\n        batch_data['trans_mat'] = cam_evl(batch_img)\n    else:\n        print(\"here we use gt cam parameters\")\n        batch_data['trans_mat'] = np.asarray(\n            [[[-68.453156, 5.5086656, -0.37556022],\n              [-17.138561  , -84.685486  ,  -0.250198  ],\n              [-47.284092  ,  -3.6569588 ,   0.2493176 ],\n              [101.133705  , 101.34268   ,   1.4305686 ]]], dtype=np.float32)\n\n    batch_data['sdf_params'] = np.array([[-1, -1, -1, 1, 1, 1]])  # only useful if we want to compare it with gt, here random set some value\n    return batch_data\n\ndef test_one_epoch(sess, ops, batch_data):\n    \"\"\" ops: dict mapping from string to tf ops \"\"\"\n    is_training = False\n\n    # Shuffle train samples\n    log_string(str(datetime.now()))\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0\n\n    with ThreadPoolExecutor(max_workers=4) as executor:\n        extra_pts = np.zeros((1, SPLIT_SIZE * NUM_SAMPLE_POINTS - TOTAL_POINTS, 3), dtype=np.float32)\n        batch_points = np.zeros((SPLIT_SIZE, 0, NUM_SAMPLE_POINTS, 3), dtype=np.float32)\n        if not FLAGS.threedcnn:\n            for b in range(BATCH_SIZE):\n                sdf_params = batch_data['sdf_params'][b]\n                x_ = np.linspace(sdf_params[0], sdf_params[3], num=RESOLUTION)\n                y_ = np.linspace(sdf_params[1], sdf_params[4], num=RESOLUTION)\n                z_ = np.linspace(sdf_params[2], sdf_params[5], num=RESOLUTION)\n                z, y, x = np.meshgrid(z_, y_, x_, indexing='ij')\n                x = np.expand_dims(x, 3)\n                y = np.expand_dims(y, 3)\n                z = np.expand_dims(z, 3)\n                all_pts = np.concatenate((x, y, z), axis=3).astype(np.float32)\n                all_pts = all_pts.reshape(1, -1, 3)\n                all_pts = np.concatenate((all_pts, extra_pts), axis=1).reshape(SPLIT_SIZE, 1, -1, 3)\n                print('all_pts', all_pts.shape)\n                batch_points = np.concatenate((batch_points, all_pts), axis=1)\n\n        pred_sdf_val_all = np.zeros((SPLIT_SIZE, BATCH_SIZE, NUM_SAMPLE_POINTS, 2 if FLAGS.binary else 1))\n\n        for sp in range(SPLIT_SIZE):\n            if FLAGS.threedcnn:\n                feed_dict = {ops['is_training_pl']: is_training,\n                             ops['input_pls']['imgs']: batch_data['img']}\n            else:\n                feed_dict = {ops['is_training_pl']: is_training,\n                             ops['input_pls']['sample_pc']: batch_points[sp,...].reshape(BATCH_SIZE, -1, 3),\n                             ops['input_pls']['sample_pc_rot']: batch_points[sp,...].reshape(BATCH_SIZE, -1, 3),\n                             ops['input_pls']['imgs']: batch_data['img'],\n                             ops['input_pls']['trans_mat']: batch_data['trans_mat']}\n\n            output_list = [ops['end_points']['pred_sdf'], ops['end_points']['ref_img'],\n                           ops['end_points']['sample_img_points']]\n            pred_sdf_val, ref_img_val, sample_img_points_val = sess.run(output_list, feed_dict=feed_dict)\n            pred_sdf_val_all[sp,:,:,:] = pred_sdf_val\n        pred_sdf_val_all = np.swapaxes(pred_sdf_val_all,0,1) # B, S, NUM SAMPLE, 1 or 2\n        pred_sdf_val_all = pred_sdf_val_all.reshape((BATCH_SIZE,-1,2 if FLAGS.binary else 1))[:, :TOTAL_POINTS, :]\n        if FLAGS.binary:\n            expo = np.exp(pred_sdf_val_all)\n            prob = expo[:,:,1] / np.sum(expo, axis = 2)\n            result = (prob - 0.5) / 10.\n            print(\"result.shape\", result.shape)\n        else:\n            result = pred_sdf_val_all / SDF_WEIGHT\n        for b in range(BATCH_SIZE):\n            print(\"submit create_obj\")\n            executor.submit(create_obj, result[b], batch_data['sdf_params'][b], RESULT_OBJ_PATH,\n                FLAGS.iso)\n\n\ndef to_binary(res, pos, pred_sdf_val_all, sdf_file):\n    f_sdf_bin = open(sdf_file, 'wb')\n\n    f_sdf_bin.write(struct.pack('i', -res))  # write an int\n    f_sdf_bin.write(struct.pack('i', res))  # write an int\n    f_sdf_bin.write(struct.pack('i', res))  # write an int\n\n    positions = struct.pack('d' * len(pos), *pos)\n    f_sdf_bin.write(positions)\n    val = struct.pack('=%sf'%pred_sdf_val_all.shape[0], *(pred_sdf_val_all))\n    f_sdf_bin.write(val)\n    f_sdf_bin.close()\n\ndef create_obj(pred_sdf_val, sdf_params, dir, i):\n    obj_nm = \"result\"\n    cube_obj_file = os.path.join(dir, obj_nm+\".obj\")\n    sdf_file = os.path.join(dir, obj_nm+\".dist\")\n    to_binary((RESOLUTION-1), sdf_params, pred_sdf_val, sdf_file)\n    create_one_cube_obj(\"./isosurface/computeMarchingCubes\", i, sdf_file, cube_obj_file)\n    command_str = \"rm -rf \" + sdf_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n\ndef create_one_cube_obj(marching_cube_command, i, sdf_file, cube_obj_file):\n    command_str = marching_cube_command + \" \" + sdf_file + \" \" + cube_obj_file + \" -i \" + str(i)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    return cube_obj_file\n\ndef get_sdf_h5(sdf_h5_file, cat_id, obj):\n    h5_f = h5py.File(sdf_h5_file, 'r')\n    try:\n        if ('pc_sdf_original' in h5_f.keys()\n                and 'pc_sdf_sample' in h5_f.keys()\n                and 'norm_params' in h5_f.keys()):\n            ori_sdf = h5_f['pc_sdf_original'][:].astype(np.float32)\n            # sample_sdf = np.reshape(h5_f['pc_sdf_sample'][:],(ori_sdf.shape[0], -1 ,4)).astype(np.float32)\n            sample_sdf = h5_f['pc_sdf_sample'][:].astype(np.float32)\n            ori_pt = ori_sdf[:,:3]#, ori_sdf[:,3]\n            ori_sdf_val = None\n            if sample_sdf.shape[1] == 4:\n                sample_pt, sample_sdf_val = sample_sdf[:,:3], sample_sdf[:,3]\n            else:\n                sample_pt, sample_sdf_val = None, sample_sdf[:, 0]\n            norm_params = h5_f['norm_params'][:]\n            sdf_params = h5_f['sdf_params'][:]\n        else:\n            raise Exception(cat_id, obj, \"no sdf and sample\")\n    finally:\n        h5_f.close()\n    return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\n\nif __name__ == \"__main__\":\n\n\n    # 1. create all categories / some of the categories:\n    create()\n\n\n\n    # 2. create single obj, just run python -u create_sdf.py\n\n    # ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params = \\\n    #     get_sdf_h5(\"/ssd1/datasets/ShapeNet/SDF_full/64_expr_1.2/03001627/47cd848a5584867b1e8791c225564ae0/ori_sample.h5\",\n    #                 \"03001627\", \"47cd848a5584867b1e8791c225564ae0\")\n    # create_obj(sample_sdf_val, sdf_params, \"send/\",\n    #            \"03001627\", \"97cd4ed02e022ce7174150bd56e389a8\", \"111\", 0.00)\n\n"
  },
  {
    "path": "demo/result.obj",
    "content": "# Generated by the TriMeshRef class\n# Number of vertices: 82584\n# Number of faces: 165196\nv 0.46875 -0.179688 -0.382966\nv 0.476562 -0.179688 -0.382958\nv 0.46875 -0.171875 -0.382835\nv 0.476562 -0.171875 -0.383137\nv 0.484375 -0.171875 -0.382899\nv 0.46875 -0.164062 -0.383203\nv 0.476562 -0.164062 -0.383534\nv 0.484375 -0.164062 -0.383115\nv 0.46875 -0.15625 -0.383189\nv 0.476562 -0.15625 -0.383765\nv 0.484375 -0.15625 -0.38348\nv 0.46875 -0.148438 -0.383054\nv 0.476562 -0.148438 -0.383488\nv 0.484375 -0.148438 -0.383326\nv 0.46875 -0.140625 -0.382817\nv 0.476562 -0.140625 -0.382925\nv -0.320312 0.523438 -0.38284\nv -0.320312 0.53125 -0.383316\nv -0.320312 0.539062 -0.383389\nv -0.320312 0.546875 -0.383454\nv -0.320312 0.554688 -0.383407\nv -0.320312 0.5625 -0.383364\nv -0.320312 0.570312 -0.383046\nv 0.453125 -0.726562 -0.375159\nv 0.460938 -0.726562 -0.375003\nv 0.414062 -0.71875 -0.375073\nv 0.421875 -0.71875 -0.375876\nv 0.429688 -0.71875 -0.37624\nv 0.4375 -0.71875 -0.376556\nv 0.445312 -0.71875 -0.376939\nv 0.453125 -0.71875 -0.377317\nv 0.460938 -0.71875 -0.377656\nv 0.46875 -0.71875 -0.377829\nv 0.476562 -0.71875 -0.377218\nv 0.484375 -0.71875 -0.376187\nv 0.492188 -0.71875 -0.375038\nv 0.40625 -0.710938 -0.375074\nv 0.414062 -0.710938 -0.377068\nv 0.421875 -0.710938 -0.377571\nv 0.429688 -0.710938 -0.37775\nv 0.4375 -0.710938 -0.377741\nv 0.445312 -0.710938 -0.377881\nv 0.453125 -0.710938 -0.377975\nv 0.460938 -0.710938 -0.378119\nv 0.46875 -0.710938 -0.378385\nv 0.476562 -0.710938 -0.378075\nv 0.484375 -0.710938 -0.37705\nv 0.492188 -0.710938 -0.375464\nv 0.40625 -0.703125 -0.376299\nv 0.414062 -0.703125 -0.378156\nv 0.421875 -0.703125 -0.378767\nv 0.429688 -0.703125 -0.378859\nv 0.4375 -0.703125 -0.378686\nv 0.445312 -0.703125 -0.378561\nv 0.453125 -0.703125 -0.378366\nv 0.460938 -0.703125 -0.378396\nv 0.46875 -0.703125 -0.378503\nv 0.476562 -0.703125 -0.378385\nv 0.484375 -0.703125 -0.377491\nv 0.492188 -0.703125 -0.375821\nv -0.304688 -0.695312 -0.375142\nv -0.289062 -0.695312 -0.375114\nv 0.40625 -0.695312 -0.377398\nv 0.414062 -0.695312 -0.3788\nv 0.421875 -0.695312 -0.379289\nv 0.429688 -0.695312 -0.379343\nv 0.4375 -0.695312 -0.379192\nv 0.445312 -0.695312 -0.378964\nv 0.453125 -0.695312 -0.378642\nv 0.460938 -0.695312 -0.378449\nv 0.46875 -0.695312 -0.378347\nv 0.476562 -0.695312 -0.378236\nv 0.484375 -0.695312 -0.377635\nv 0.492188 -0.695312 -0.375912\nv -0.289062 -0.6875 -0.375111\nv 0.40625 -0.6875 -0.377493\nv 0.414062 -0.6875 -0.378787\nv 0.421875 -0.6875 -0.379218\nv 0.429688 -0.6875 -0.379196\nv 0.4375 -0.6875 -0.379037\nv 0.445312 -0.6875 -0.378886\nv 0.453125 -0.6875 -0.378597\nv 0.460938 -0.6875 -0.378333\nv 0.46875 -0.6875 -0.37803\nv 0.476562 -0.6875 -0.377881\nv 0.484375 -0.6875 -0.377295\nv 0.492188 -0.6875 -0.375637\nv -0.289062 -0.679688 -0.37523\nv 0.40625 -0.679688 -0.377559\nv 0.414062 -0.679688 -0.378775\nv 0.421875 -0.679688 -0.379215\nv 0.429688 -0.679688 -0.379208\nv 0.4375 -0.679688 -0.378907\nv 0.445312 -0.679688 -0.378747\nv 0.453125 -0.679688 -0.378603\nv 0.460938 -0.679688 -0.378438\nv 0.46875 -0.679688 -0.37809\nv 0.476562 -0.679688 -0.377903\nv 0.484375 -0.679688 -0.377323\nv 0.492188 -0.679688 -0.375673\nv -0.296875 -0.671875 -0.375016\nv -0.289062 -0.671875 -0.375324\nv 0.40625 -0.671875 -0.37757\nv 0.414062 -0.671875 -0.378665\nv 0.421875 -0.671875 -0.379102\nv 0.429688 -0.671875 -0.379169\nv 0.4375 -0.671875 -0.378836\nv 0.445312 -0.671875 -0.37868\nv 0.453125 -0.671875 -0.378591\nv 0.460938 -0.671875 -0.378708\nv 0.46875 -0.671875 -0.378482\nv 0.476562 -0.671875 -0.378241\nv 0.484375 -0.671875 -0.377571\nv 0.492188 -0.671875 -0.375948\nv -0.296875 -0.664062 -0.375005\nv -0.289062 -0.664062 -0.375538\nv -0.28125 -0.664062 -0.37523\nv -0.273438 -0.664062 -0.375208\nv 0.398438 -0.664062 -0.375015\nv 0.40625 -0.664062 -0.377585\nv 0.414062 -0.664062 -0.378508\nv 0.421875 -0.664062 -0.378887\nv 0.429688 -0.664062 -0.379084\nv 0.4375 -0.664062 -0.37888\nv 0.445312 -0.664062 -0.378748\nv 0.453125 -0.664062 -0.378668\nv 0.460938 -0.664062 -0.378829\nv 0.46875 -0.664062 -0.378892\nv 0.476562 -0.664062 -0.378676\nv 0.484375 -0.664062 -0.377994\nv 0.492188 -0.664062 -0.376293\nv -0.289062 -0.65625 -0.375525\nv -0.28125 -0.65625 -0.37546\nv -0.273438 -0.65625 -0.375578\nv -0.265625 -0.65625 -0.375295\nv 0.398438 -0.65625 -0.375005\nv 0.40625 -0.65625 -0.377585\nv 0.414062 -0.65625 -0.378487\nv 0.421875 -0.65625 -0.378825\nv 0.429688 -0.65625 -0.378985\nv 0.4375 -0.65625 -0.378835\nv 0.445312 -0.65625 -0.378822\nv 0.453125 -0.65625 -0.378806\nv 0.460938 -0.65625 -0.378894\nv 0.46875 -0.65625 -0.379081\nv 0.476562 -0.65625 -0.379135\nv 0.484375 -0.65625 -0.378511\nv 0.492188 -0.65625 -0.376737\nv -0.289062 -0.648438 -0.37558\nv -0.28125 -0.648438 -0.375588\nv -0.273438 -0.648438 -0.375856\nv -0.265625 -0.648438 -0.375754\nv -0.257812 -0.648438 -0.375103\nv 0.40625 -0.648438 -0.377701\nv 0.414062 -0.648438 -0.378453\nv 0.421875 -0.648438 -0.378824\nv 0.429688 -0.648438 -0.378967\nv 0.4375 -0.648438 -0.378746\nv 0.445312 -0.648438 -0.378797\nv 0.453125 -0.648438 -0.378857\nv 0.460938 -0.648438 -0.379022\nv 0.46875 -0.648438 -0.379243\nv 0.476562 -0.648438 -0.379405\nv 0.484375 -0.648438 -0.379012\nv 0.492188 -0.648438 -0.377332\nv -0.289062 -0.640625 -0.375684\nv -0.28125 -0.640625 -0.375754\nv -0.273438 -0.640625 -0.376081\nv -0.265625 -0.640625 -0.376181\nv -0.257812 -0.640625 -0.375674\nv 0.398438 -0.640625 -0.375062\nv 0.40625 -0.640625 -0.377902\nv 0.414062 -0.640625 -0.378604\nv 0.421875 -0.640625 -0.379025\nv 0.429688 -0.640625 -0.379216\nv 0.4375 -0.640625 -0.378969\nv 0.445312 -0.640625 -0.37899\nv 0.453125 -0.640625 -0.379049\nv 0.460938 -0.640625 -0.379245\nv 0.46875 -0.640625 -0.379557\nv 0.476562 -0.640625 -0.379709\nv 0.484375 -0.640625 -0.3793\nv 0.492188 -0.640625 -0.377933\nv -0.296875 -0.632812 -0.375203\nv -0.289062 -0.632812 -0.376002\nv -0.28125 -0.632812 -0.376107\nv -0.273438 -0.632812 -0.37643\nv -0.265625 -0.632812 -0.376498\nv -0.257812 -0.632812 -0.376046\nv -0.25 -0.632812 -0.375361\nv 0.398438 -0.632812 -0.375105\nv 0.40625 -0.632812 -0.378006\nv 0.414062 -0.632812 -0.378742\nv 0.421875 -0.632812 -0.379246\nv 0.429688 -0.632812 -0.379509\nv 0.4375 -0.632812 -0.379269\nv 0.445312 -0.632812 -0.37918\nv 0.453125 -0.632812 -0.379217\nv 0.460938 -0.632812 -0.379407\nv 0.46875 -0.632812 -0.379725\nv 0.476562 -0.632812 -0.380033\nv 0.484375 -0.632812 -0.379541\nv 0.492188 -0.632812 -0.378218\nv 0.5 -0.632812 -0.375017\nv -0.296875 -0.625 -0.37539\nv -0.289062 -0.625 -0.376191\nv -0.28125 -0.625 -0.376345\nv -0.273438 -0.625 -0.376647\nv -0.265625 -0.625 -0.37672\nv -0.257812 -0.625 -0.376234\nv -0.25 -0.625 -0.375612\nv 0.398438 -0.625 -0.37512\nv 0.40625 -0.625 -0.378126\nv 0.414062 -0.625 -0.378843\nv 0.421875 -0.625 -0.379385\nv 0.429688 -0.625 -0.379694\nv 0.4375 -0.625 -0.37958\nv 0.445312 -0.625 -0.379417\nv 0.453125 -0.625 -0.379411\nv 0.460938 -0.625 -0.379614\nv 0.46875 -0.625 -0.379865\nv 0.476562 -0.625 -0.380169\nv 0.484375 -0.625 -0.379762\nv 0.492188 -0.625 -0.3785\nv 0.5 -0.625 -0.375236\nv -0.296875 -0.617188 -0.375625\nv -0.289062 -0.617188 -0.376258\nv -0.28125 -0.617188 -0.376526\nv -0.273438 -0.617188 -0.376802\nv -0.265625 -0.617188 -0.376904\nv -0.257812 -0.617188 -0.376483\nv -0.25 -0.617188 -0.375801\nv 0.398438 -0.617188 -0.375199\nv 0.40625 -0.617188 -0.378259\nv 0.414062 -0.617188 -0.378968\nv 0.421875 -0.617188 -0.379503\nv 0.429688 -0.617188 -0.379817\nv 0.4375 -0.617188 -0.379782\nv 0.445312 -0.617188 -0.379705\nv 0.453125 -0.617188 -0.379607\nv 0.460938 -0.617188 -0.379786\nv 0.46875 -0.617188 -0.380026\nv 0.476562 -0.617188 -0.380248\nv 0.484375 -0.617188 -0.379778\nv 0.492188 -0.617188 -0.378686\nv 0.5 -0.617188 -0.375451\nv -0.304688 -0.609375 -0.37525\nv -0.296875 -0.609375 -0.375853\nv -0.289062 -0.609375 -0.376442\nv -0.28125 -0.609375 -0.376601\nv -0.273438 -0.609375 -0.376916\nv -0.265625 -0.609375 -0.377036\nv -0.257812 -0.609375 -0.3767\nv -0.25 -0.609375 -0.375931\nv 0.398438 -0.609375 -0.375255\nv 0.40625 -0.609375 -0.378377\nv 0.414062 -0.609375 -0.379155\nv 0.421875 -0.609375 -0.37969\nv 0.429688 -0.609375 -0.379928\nv 0.4375 -0.609375 -0.379894\nv 0.445312 -0.609375 -0.37994\nv 0.453125 -0.609375 -0.37985\nv 0.460938 -0.609375 -0.379947\nv 0.46875 -0.609375 -0.380186\nv 0.476562 -0.609375 -0.380319\nv 0.484375 -0.609375 -0.379718\nv 0.492188 -0.609375 -0.378598\nv 0.5 -0.609375 -0.375453\nv -0.304688 -0.601562 -0.375476\nv -0.296875 -0.601562 -0.376089\nv -0.289062 -0.601562 -0.376662\nv -0.28125 -0.601562 -0.376728\nv -0.273438 -0.601562 -0.376929\nv -0.265625 -0.601562 -0.377153\nv -0.257812 -0.601562 -0.376792\nv -0.25 -0.601562 -0.375967\nv 0.398438 -0.601562 -0.375133\nv 0.40625 -0.601562 -0.378463\nv 0.414062 -0.601562 -0.379265\nv 0.421875 -0.601562 -0.379876\nv 0.429688 -0.601562 -0.380072\nv 0.4375 -0.601562 -0.380013\nv 0.445312 -0.601562 -0.380045\nv 0.453125 -0.601562 -0.38005\nv 0.460938 -0.601562 -0.380093\nv 0.46875 -0.601562 -0.380225\nv 0.476562 -0.601562 -0.380234\nv 0.484375 -0.601562 -0.379568\nv 0.492188 -0.601562 -0.378319\nv 0.5 -0.601562 -0.375179\nv -0.3125 -0.59375 -0.375084\nv -0.304688 -0.59375 -0.375556\nv -0.296875 -0.59375 -0.376147\nv -0.289062 -0.59375 -0.376774\nv -0.28125 -0.59375 -0.376811\nv -0.273438 -0.59375 -0.376831\nv -0.265625 -0.59375 -0.376977\nv -0.257812 -0.59375 -0.376629\nv -0.25 -0.59375 -0.375786\nv 0.40625 -0.59375 -0.378367\nv 0.414062 -0.59375 -0.379282\nv 0.421875 -0.59375 -0.379933\nv 0.429688 -0.59375 -0.380121\nv 0.4375 -0.59375 -0.380027\nv 0.445312 -0.59375 -0.379991\nv 0.453125 -0.59375 -0.379939\nv 0.460938 -0.59375 -0.379966\nv 0.46875 -0.59375 -0.379993\nv 0.476562 -0.59375 -0.379808\nv 0.484375 -0.59375 -0.379091\nv 0.492188 -0.59375 -0.377571\nv -0.3125 -0.585938 -0.375127\nv -0.304688 -0.585938 -0.375613\nv -0.296875 -0.585938 -0.37617\nv -0.289062 -0.585938 -0.376739\nv -0.28125 -0.585938 -0.376771\nv -0.273438 -0.585938 -0.376737\nv -0.265625 -0.585938 -0.376698\nv -0.257812 -0.585938 -0.376299\nv -0.25 -0.585938 -0.375492\nv 0.40625 -0.585938 -0.37787\nv 0.414062 -0.585938 -0.378976\nv 0.421875 -0.585938 -0.379722\nv 0.429688 -0.585938 -0.379951\nv 0.4375 -0.585938 -0.379901\nv 0.445312 -0.585938 -0.379795\nv 0.453125 -0.585938 -0.379762\nv 0.460938 -0.585938 -0.379776\nv 0.46875 -0.585938 -0.379725\nv 0.476562 -0.585938 -0.379461\nv 0.484375 -0.585938 -0.378692\nv 0.492188 -0.585938 -0.376914\nv -0.3125 -0.578125 -0.375135\nv -0.304688 -0.578125 -0.375571\nv -0.296875 -0.578125 -0.376131\nv -0.289062 -0.578125 -0.376683\nv -0.28125 -0.578125 -0.376789\nv -0.273438 -0.578125 -0.376744\nv -0.265625 -0.578125 -0.376584\nv -0.257812 -0.578125 -0.37596\nv -0.25 -0.578125 -0.375206\nv 0.40625 -0.578125 -0.377333\nv 0.414062 -0.578125 -0.378612\nv 0.421875 -0.578125 -0.379468\nv 0.429688 -0.578125 -0.379786\nv 0.4375 -0.578125 -0.379788\nv 0.445312 -0.578125 -0.379726\nv 0.453125 -0.578125 -0.379689\nv 0.460938 -0.578125 -0.379652\nv 0.46875 -0.578125 -0.37952\nv 0.476562 -0.578125 -0.37913\nv 0.484375 -0.578125 -0.378369\nv 0.492188 -0.578125 -0.37654\nv -0.3125 -0.570312 -0.375014\nv -0.304688 -0.570312 -0.375512\nv -0.296875 -0.570312 -0.376083\nv -0.289062 -0.570312 -0.376589\nv -0.28125 -0.570312 -0.376738\nv -0.273438 -0.570312 -0.3767\nv -0.265625 -0.570312 -0.376537\nv -0.257812 -0.570312 -0.375809\nv 0.40625 -0.570312 -0.376841\nv 0.414062 -0.570312 -0.378337\nv 0.421875 -0.570312 -0.379234\nv 0.429688 -0.570312 -0.379625\nv 0.4375 -0.570312 -0.379677\nv 0.445312 -0.570312 -0.379646\nv 0.453125 -0.570312 -0.379634\nv 0.460938 -0.570312 -0.379655\nv 0.46875 -0.570312 -0.379528\nv 0.476562 -0.570312 -0.379035\nv 0.484375 -0.570312 -0.378187\nv 0.492188 -0.570312 -0.376342\nv -0.304688 -0.5625 -0.375446\nv -0.296875 -0.5625 -0.376027\nv -0.289062 -0.5625 -0.376506\nv -0.28125 -0.5625 -0.376662\nv -0.273438 -0.5625 -0.37663\nv -0.265625 -0.5625 -0.376489\nv -0.257812 -0.5625 -0.375714\nv 0.40625 -0.5625 -0.376386\nv 0.414062 -0.5625 -0.378134\nv 0.421875 -0.5625 -0.379049\nv 0.429688 -0.5625 -0.379555\nv 0.4375 -0.5625 -0.379726\nv 0.445312 -0.5625 -0.379748\nv 0.453125 -0.5625 -0.379701\nv 0.460938 -0.5625 -0.379715\nv 0.46875 -0.5625 -0.379602\nv 0.476562 -0.5625 -0.378978\nv 0.484375 -0.5625 -0.377986\nv 0.492188 -0.5625 -0.376101\nv -0.304688 -0.554688 -0.375445\nv -0.296875 -0.554688 -0.376117\nv -0.289062 -0.554688 -0.376625\nv -0.28125 -0.554688 -0.376783\nv -0.273438 -0.554688 -0.376724\nv -0.265625 -0.554688 -0.376537\nv -0.257812 -0.554688 -0.375745\nv 0.40625 -0.554688 -0.376145\nv 0.414062 -0.554688 -0.378071\nv 0.421875 -0.554688 -0.378961\nv 0.429688 -0.554688 -0.379559\nv 0.4375 -0.554688 -0.379713\nv 0.445312 -0.554688 -0.379769\nv 0.453125 -0.554688 -0.379691\nv 0.460938 -0.554688 -0.379665\nv 0.46875 -0.554688 -0.379579\nv 0.476562 -0.554688 -0.378882\nv 0.484375 -0.554688 -0.377833\nv 0.492188 -0.554688 -0.375972\nv -0.304688 -0.546875 -0.375375\nv -0.296875 -0.546875 -0.376093\nv -0.289062 -0.546875 -0.37671\nv -0.28125 -0.546875 -0.376958\nv -0.273438 -0.546875 -0.376909\nv -0.265625 -0.546875 -0.376671\nv -0.257812 -0.546875 -0.375864\nv 0.40625 -0.546875 -0.37597\nv 0.414062 -0.546875 -0.377947\nv 0.421875 -0.546875 -0.37882\nv 0.429688 -0.546875 -0.379436\nv 0.4375 -0.546875 -0.379596\nv 0.445312 -0.546875 -0.37971\nv 0.453125 -0.546875 -0.37962\nv 0.460938 -0.546875 -0.379579\nv 0.46875 -0.546875 -0.37947\nv 0.476562 -0.546875 -0.378758\nv 0.484375 -0.546875 -0.377762\nv 0.492188 -0.546875 -0.37589\nv -0.304688 -0.539062 -0.375352\nv -0.296875 -0.539062 -0.376092\nv -0.289062 -0.539062 -0.376785\nv -0.28125 -0.539062 -0.377096\nv -0.273438 -0.539062 -0.377105\nv -0.265625 -0.539062 -0.376816\nv -0.257812 -0.539062 -0.376009\nv -0.25 -0.539062 -0.375106\nv 0.40625 -0.539062 -0.376043\nv 0.414062 -0.539062 -0.377754\nv 0.421875 -0.539062 -0.378498\nv 0.429688 -0.539062 -0.379272\nv 0.4375 -0.539062 -0.379532\nv 0.445312 -0.539062 -0.379697\nv 0.453125 -0.539062 -0.379608\nv 0.460938 -0.539062 -0.379509\nv 0.46875 -0.539062 -0.3794\nv 0.476562 -0.539062 -0.378634\nv 0.484375 -0.539062 -0.377714\nv 0.492188 -0.539062 -0.375923\nv -0.3125 -0.53125 -0.375074\nv -0.304688 -0.53125 -0.37545\nv -0.296875 -0.53125 -0.376182\nv -0.289062 -0.53125 -0.376919\nv -0.28125 -0.53125 -0.377257\nv -0.273438 -0.53125 -0.377302\nv -0.265625 -0.53125 -0.376853\nv -0.257812 -0.53125 -0.376252\nv -0.25 -0.53125 -0.375564\nv 0.40625 -0.53125 -0.376524\nv 0.414062 -0.53125 -0.378018\nv 0.421875 -0.53125 -0.378495\nv 0.429688 -0.53125 -0.379181\nv 0.4375 -0.53125 -0.379553\nv 0.445312 -0.53125 -0.379708\nv 0.453125 -0.53125 -0.379633\nv 0.460938 -0.53125 -0.379519\nv 0.46875 -0.53125 -0.379335\nv 0.476562 -0.53125 -0.378665\nv 0.484375 -0.53125 -0.377714\nv 0.492188 -0.53125 -0.376\nv -0.320312 -0.523438 -0.375037\nv -0.3125 -0.523438 -0.375344\nv -0.304688 -0.523438 -0.375644\nv -0.296875 -0.523438 -0.376374\nv -0.289062 -0.523438 -0.377165\nv -0.28125 -0.523438 -0.377512\nv -0.273438 -0.523438 -0.377562\nv -0.265625 -0.523438 -0.377179\nv -0.257812 -0.523438 -0.376706\nv -0.25 -0.523438 -0.376063\nv -0.109375 -0.523438 -0.375775\nv -0.101562 -0.523438 -0.376381\nv -0.09375 -0.523438 -0.376565\nv -0.0859375 -0.523438 -0.376568\nv -0.078125 -0.523438 -0.376617\nv -0.0703125 -0.523438 -0.37664\nv -0.0625 -0.523438 -0.37667\nv -0.0546875 -0.523438 -0.376722\nv -0.046875 -0.523438 -0.376746\nv -0.0390625 -0.523438 -0.376522\nv -0.03125 -0.523438 -0.376349\nv -0.0234375 -0.523438 -0.376371\nv -0.015625 -0.523438 -0.376278\nv -0.0078125 -0.523438 -0.376145\nv 0 -0.523438 -0.376158\nv 0.0078125 -0.523438 -0.375941\nv 0.015625 -0.523438 -0.375649\nv 0.0234375 -0.523438 -0.375294\nv 0.03125 -0.523438 -0.375076\nv 0.195312 -0.523438 -0.375012\nv 0.203125 -0.523438 -0.375316\nv 0.210938 -0.523438 -0.375197\nv 0.21875 -0.523438 -0.375155\nv 0.226562 -0.523438 -0.375256\nv 0.234375 -0.523438 -0.375297\nv 0.242188 -0.523438 -0.375172\nv 0.25 -0.523438 -0.37512\nv 0.257812 -0.523438 -0.375123\nv 0.265625 -0.523438 -0.375162\nv 0.273438 -0.523438 -0.375025\nv 0.28125 -0.523438 -0.375548\nv 0.289062 -0.523438 -0.37559\nv 0.296875 -0.523438 -0.375596\nv 0.304688 -0.523438 -0.375664\nv 0.3125 -0.523438 -0.375633\nv 0.320312 -0.523438 -0.37573\nv 0.328125 -0.523438 -0.376088\nv 0.335938 -0.523438 -0.376285\nv 0.34375 -0.523438 -0.376529\nv 0.351562 -0.523438 -0.375817\nv 0.398438 -0.523438 -0.375126\nv 0.40625 -0.523438 -0.377125\nv 0.414062 -0.523438 -0.378505\nv 0.421875 -0.523438 -0.378849\nv 0.429688 -0.523438 -0.379209\nv 0.4375 -0.523438 -0.379493\nv 0.445312 -0.523438 -0.379656\nv 0.453125 -0.523438 -0.379575\nv 0.460938 -0.523438 -0.379545\nv 0.46875 -0.523438 -0.379284\nv 0.476562 -0.523438 -0.378637\nv 0.484375 -0.523438 -0.377766\nv 0.492188 -0.523438 -0.376167\nv -0.320312 -0.515625 -0.375263\nv -0.3125 -0.515625 -0.375641\nv -0.304688 -0.515625 -0.375912\nv -0.296875 -0.515625 -0.376587\nv -0.289062 -0.515625 -0.377394\nv -0.28125 -0.515625 -0.377836\nv -0.273438 -0.515625 -0.378008\nv -0.265625 -0.515625 -0.377536\nv -0.257812 -0.515625 -0.377033\nv -0.25 -0.515625 -0.376522\nv -0.242188 -0.515625 -0.375147\nv -0.171875 -0.515625 -0.375389\nv -0.164062 -0.515625 -0.37591\nv -0.15625 -0.515625 -0.376161\nv -0.148438 -0.515625 -0.376396\nv -0.140625 -0.515625 -0.376729\nv -0.132812 -0.515625 -0.376619\nv -0.125 -0.515625 -0.376406\nv -0.117188 -0.515625 -0.377153\nv -0.109375 -0.515625 -0.377919\nv -0.101562 -0.515625 -0.378321\nv -0.09375 -0.515625 -0.378439\nv -0.0859375 -0.515625 -0.378494\nv -0.078125 -0.515625 -0.378575\nv -0.0703125 -0.515625 -0.378731\nv -0.0625 -0.515625 -0.378896\nv -0.0546875 -0.515625 -0.378963\nv -0.046875 -0.515625 -0.379014\nv -0.0390625 -0.515625 -0.379008\nv -0.03125 -0.515625 -0.378649\nv -0.0234375 -0.515625 -0.378766\nv -0.015625 -0.515625 -0.378873\nv -0.0078125 -0.515625 -0.378828\nv 0 -0.515625 -0.378882\nv 0.0078125 -0.515625 -0.378619\nv 0.015625 -0.515625 -0.378285\nv 0.0234375 -0.515625 -0.377836\nv 0.03125 -0.515625 -0.37747\nv 0.0390625 -0.515625 -0.37716\nv 0.046875 -0.515625 -0.376876\nv 0.0546875 -0.515625 -0.376635\nv 0.0625 -0.515625 -0.376467\nv 0.0703125 -0.515625 -0.376208\nv 0.078125 -0.515625 -0.375857\nv 0.0859375 -0.515625 -0.375451\nv 0.09375 -0.515625 -0.37506\nv 0.15625 -0.515625 -0.375205\nv 0.164062 -0.515625 -0.375556\nv 0.171875 -0.515625 -0.375838\nv 0.179688 -0.515625 -0.376131\nv 0.1875 -0.515625 -0.376587\nv 0.195312 -0.515625 -0.377017\nv 0.203125 -0.515625 -0.377381\nv 0.210938 -0.515625 -0.377414\nv 0.21875 -0.515625 -0.377361\nv 0.226562 -0.515625 -0.377343\nv 0.234375 -0.515625 -0.377372\nv 0.242188 -0.515625 -0.377278\nv 0.25 -0.515625 -0.377285\nv 0.257812 -0.515625 -0.377207\nv 0.265625 -0.515625 -0.376975\nv 0.273438 -0.515625 -0.377152\nv 0.28125 -0.515625 -0.377716\nv 0.289062 -0.515625 -0.377652\nv 0.296875 -0.515625 -0.377602\nv 0.304688 -0.515625 -0.377596\nv 0.3125 -0.515625 -0.377574\nv 0.320312 -0.515625 -0.37774\nv 0.328125 -0.515625 -0.378196\nv 0.335938 -0.515625 -0.378397\nv 0.34375 -0.515625 -0.378628\nv 0.351562 -0.515625 -0.378095\nv 0.359375 -0.515625 -0.37694\nv 0.367188 -0.515625 -0.375636\nv 0.390625 -0.515625 -0.376023\nv 0.398438 -0.515625 -0.376697\nv 0.40625 -0.515625 -0.37792\nv 0.414062 -0.515625 -0.379101\nv 0.421875 -0.515625 -0.379342\nv 0.429688 -0.515625 -0.379556\nv 0.4375 -0.515625 -0.379676\nv 0.445312 -0.515625 -0.379665\nv 0.453125 -0.515625 -0.379554\nv 0.460938 -0.515625 -0.379442\nv 0.46875 -0.515625 -0.379162\nv 0.476562 -0.515625 -0.378535\nv 0.484375 -0.515625 -0.37769\nv 0.492188 -0.515625 -0.376369\nv -0.320312 -0.507812 -0.375459\nv -0.3125 -0.507812 -0.375819\nv -0.304688 -0.507812 -0.37606\nv -0.296875 -0.507812 -0.376714\nv -0.289062 -0.507812 -0.377748\nv -0.28125 -0.507812 -0.378228\nv -0.273438 -0.507812 -0.378336\nv -0.265625 -0.507812 -0.377811\nv -0.257812 -0.507812 -0.377315\nv -0.25 -0.507812 -0.376805\nv -0.242188 -0.507812 -0.375521\nv -0.179688 -0.507812 -0.375829\nv -0.171875 -0.507812 -0.376444\nv -0.164062 -0.507812 -0.376883\nv -0.15625 -0.507812 -0.377133\nv -0.148438 -0.507812 -0.377411\nv -0.140625 -0.507812 -0.377668\nv -0.132812 -0.507812 -0.377461\nv -0.125 -0.507812 -0.377477\nv -0.117188 -0.507812 -0.378267\nv -0.109375 -0.507812 -0.379001\nv -0.101562 -0.507812 -0.379348\nv -0.09375 -0.507812 -0.379525\nv -0.0859375 -0.507812 -0.379676\nv -0.078125 -0.507812 -0.379767\nv -0.0703125 -0.507812 -0.379925\nv -0.0625 -0.507812 -0.380189\nv -0.0546875 -0.507812 -0.380415\nv -0.046875 -0.507812 -0.380453\nv -0.0390625 -0.507812 -0.380405\nv -0.03125 -0.507812 -0.380326\nv -0.0234375 -0.507812 -0.38056\nv -0.015625 -0.507812 -0.380551\nv -0.0078125 -0.507812 -0.38061\nv 0 -0.507812 -0.380696\nv 0.0078125 -0.507812 -0.380429\nv 0.015625 -0.507812 -0.380038\nv 0.0234375 -0.507812 -0.379472\nv 0.03125 -0.507812 -0.379079\nv 0.0390625 -0.507812 -0.378703\nv 0.046875 -0.507812 -0.378373\nv 0.0546875 -0.507812 -0.378102\nv 0.0625 -0.507812 -0.377848\nv 0.0703125 -0.507812 -0.377574\nv 0.078125 -0.507812 -0.37723\nv 0.0859375 -0.507812 -0.376913\nv 0.09375 -0.507812 -0.376577\nv 0.101562 -0.507812 -0.376378\nv 0.109375 -0.507812 -0.376373\nv 0.117188 -0.507812 -0.376367\nv 0.125 -0.507812 -0.376374\nv 0.132812 -0.507812 -0.376383\nv 0.140625 -0.507812 -0.376261\nv 0.148438 -0.507812 -0.376253\nv 0.15625 -0.507812 -0.37647\nv 0.164062 -0.507812 -0.37685\nv 0.171875 -0.507812 -0.377213\nv 0.179688 -0.507812 -0.377599\nv 0.1875 -0.507812 -0.377987\nv 0.195312 -0.507812 -0.378332\nv 0.203125 -0.507812 -0.378609\nv 0.210938 -0.507812 -0.37879\nv 0.21875 -0.507812 -0.37882\nv 0.226562 -0.507812 -0.37873\nv 0.234375 -0.507812 -0.378642\nv 0.242188 -0.507812 -0.378608\nv 0.25 -0.507812 -0.378584\nv 0.257812 -0.507812 -0.378297\nv 0.265625 -0.507812 -0.378152\nv 0.273438 -0.507812 -0.378541\nv 0.28125 -0.507812 -0.378786\nv 0.289062 -0.507812 -0.37877\nv 0.296875 -0.507812 -0.378742\nv 0.304688 -0.507812 -0.378786\nv 0.3125 -0.507812 -0.378818\nv 0.320312 -0.507812 -0.379027\nv 0.328125 -0.507812 -0.379524\nv 0.335938 -0.507812 -0.379813\nv 0.34375 -0.507812 -0.379989\nv 0.351562 -0.507812 -0.379584\nv 0.359375 -0.507812 -0.37852\nv 0.367188 -0.507812 -0.37723\nv 0.375 -0.507812 -0.376101\nv 0.382812 -0.507812 -0.375598\nv 0.390625 -0.507812 -0.377173\nv 0.398438 -0.507812 -0.377987\nv 0.40625 -0.507812 -0.378916\nv 0.414062 -0.507812 -0.379627\nv 0.421875 -0.507812 -0.379748\nv 0.429688 -0.507812 -0.379832\nv 0.4375 -0.507812 -0.379857\nv 0.445312 -0.507812 -0.379663\nv 0.453125 -0.507812 -0.379451\nv 0.460938 -0.507812 -0.379276\nv 0.46875 -0.507812 -0.379007\nv 0.476562 -0.507812 -0.378368\nv 0.484375 -0.507812 -0.377498\nv 0.492188 -0.507812 -0.37633\nv -0.320312 -0.5 -0.37567\nv -0.3125 -0.5 -0.375987\nv -0.304688 -0.5 -0.376229\nv -0.296875 -0.5 -0.376766\nv -0.289062 -0.5 -0.377741\nv -0.28125 -0.5 -0.378093\nv -0.273438 -0.5 -0.378178\nv -0.265625 -0.5 -0.377705\nv -0.257812 -0.5 -0.377244\nv -0.25 -0.5 -0.376696\nv -0.242188 -0.5 -0.375458\nv -0.140625 -0.5 -0.375101\nv -0.117188 -0.5 -0.375164\nv -0.109375 -0.5 -0.376227\nv -0.101562 -0.5 -0.377018\nv -0.09375 -0.5 -0.377376\nv -0.0859375 -0.5 -0.377666\nv -0.078125 -0.5 -0.37787\nv -0.0703125 -0.5 -0.378097\nv -0.0625 -0.5 -0.378448\nv -0.0546875 -0.5 -0.378819\nv -0.046875 -0.5 -0.379052\nv -0.0390625 -0.5 -0.379158\nv -0.03125 -0.5 -0.379259\nv -0.0234375 -0.5 -0.379516\nv -0.015625 -0.5 -0.379671\nv -0.0078125 -0.5 -0.379755\nv 0 -0.5 -0.379901\nv 0.0078125 -0.5 -0.379584\nv 0.015625 -0.5 -0.379143\nv 0.0234375 -0.5 -0.378484\nv 0.03125 -0.5 -0.378014\nv 0.0390625 -0.5 -0.377561\nv 0.046875 -0.5 -0.377099\nv 0.0546875 -0.5 -0.376742\nv 0.0625 -0.5 -0.376313\nv 0.0703125 -0.5 -0.375933\nv 0.078125 -0.5 -0.375479\nv 0.0859375 -0.5 -0.375096\nv 0.171875 -0.5 -0.375279\nv 0.179688 -0.5 -0.375655\nv 0.1875 -0.5 -0.375975\nv 0.195312 -0.5 -0.376165\nv 0.203125 -0.5 -0.376363\nv 0.210938 -0.5 -0.376522\nv 0.21875 -0.5 -0.376596\nv 0.226562 -0.5 -0.376657\nv 0.234375 -0.5 -0.376661\nv 0.242188 -0.5 -0.376663\nv 0.25 -0.5 -0.376601\nv 0.257812 -0.5 -0.376259\nv 0.265625 -0.5 -0.376267\nv 0.273438 -0.5 -0.376545\nv 0.28125 -0.5 -0.376748\nv 0.289062 -0.5 -0.37671\nv 0.296875 -0.5 -0.37682\nv 0.304688 -0.5 -0.376961\nv 0.3125 -0.5 -0.376993\nv 0.320312 -0.5 -0.377232\nv 0.328125 -0.5 -0.377944\nv 0.335938 -0.5 -0.378306\nv 0.34375 -0.5 -0.378374\nv 0.351562 -0.5 -0.377859\nv 0.359375 -0.5 -0.376822\nv 0.367188 -0.5 -0.375549\nv 0.382812 -0.5 -0.375245\nv 0.390625 -0.5 -0.377022\nv 0.398438 -0.5 -0.378098\nv 0.40625 -0.5 -0.379353\nv 0.414062 -0.5 -0.379831\nv 0.421875 -0.5 -0.379826\nv 0.429688 -0.5 -0.37979\nv 0.4375 -0.5 -0.379643\nv 0.445312 -0.5 -0.379392\nv 0.453125 -0.5 -0.379248\nv 0.460938 -0.5 -0.379105\nv 0.46875 -0.5 -0.378807\nv 0.476562 -0.5 -0.378188\nv 0.484375 -0.5 -0.377321\nv 0.492188 -0.5 -0.376235\nv -0.320312 -0.492188 -0.375705\nv -0.3125 -0.492188 -0.375974\nv -0.304688 -0.492188 -0.376204\nv -0.296875 -0.492188 -0.37669\nv -0.289062 -0.492188 -0.377724\nv -0.28125 -0.492188 -0.377938\nv -0.273438 -0.492188 -0.377903\nv -0.265625 -0.492188 -0.377451\nv -0.257812 -0.492188 -0.37704\nv -0.25 -0.492188 -0.376468\nv -0.242188 -0.492188 -0.375244\nv -0.078125 -0.492188 -0.375127\nv -0.0703125 -0.492188 -0.375391\nv -0.0625 -0.492188 -0.375686\nv -0.0546875 -0.492188 -0.375987\nv -0.046875 -0.492188 -0.376244\nv -0.0390625 -0.492188 -0.376422\nv -0.03125 -0.492188 -0.376568\nv -0.0234375 -0.492188 -0.376924\nv -0.015625 -0.492188 -0.377142\nv -0.0078125 -0.492188 -0.377328\nv 0 -0.492188 -0.37755\nv 0.0078125 -0.492188 -0.377355\nv 0.015625 -0.492188 -0.376949\nv 0.0234375 -0.492188 -0.376398\nv 0.03125 -0.492188 -0.376063\nv 0.0390625 -0.492188 -0.375668\nv 0.046875 -0.492188 -0.375184\nv 0.328125 -0.492188 -0.375283\nv 0.335938 -0.492188 -0.37583\nv 0.34375 -0.492188 -0.375768\nv 0.390625 -0.492188 -0.376524\nv 0.398438 -0.492188 -0.378266\nv 0.40625 -0.492188 -0.379472\nv 0.414062 -0.492188 -0.380114\nv 0.421875 -0.492188 -0.379859\nv 0.429688 -0.492188 -0.379756\nv 0.4375 -0.492188 -0.379503\nv 0.445312 -0.492188 -0.379222\nv 0.453125 -0.492188 -0.379156\nv 0.460938 -0.492188 -0.379005\nv 0.46875 -0.492188 -0.378687\nv 0.476562 -0.492188 -0.378131\nv 0.484375 -0.492188 -0.377295\nv 0.492188 -0.492188 -0.376254\nv -0.320312 -0.484375 -0.375803\nv -0.3125 -0.484375 -0.376001\nv -0.304688 -0.484375 -0.376245\nv -0.296875 -0.484375 -0.376708\nv -0.289062 -0.484375 -0.377701\nv -0.28125 -0.484375 -0.377932\nv -0.273438 -0.484375 -0.377677\nv -0.265625 -0.484375 -0.377219\nv -0.257812 -0.484375 -0.376856\nv -0.25 -0.484375 -0.376318\nv -0.242188 -0.484375 -0.375009\nv 0.390625 -0.484375 -0.376439\nv 0.398438 -0.484375 -0.378329\nv 0.40625 -0.484375 -0.380035\nv 0.414062 -0.484375 -0.380503\nv 0.421875 -0.484375 -0.38017\nv 0.429688 -0.484375 -0.379889\nv 0.4375 -0.484375 -0.379559\nv 0.445312 -0.484375 -0.379312\nv 0.453125 -0.484375 -0.379181\nv 0.460938 -0.484375 -0.378952\nv 0.46875 -0.484375 -0.378662\nv 0.476562 -0.484375 -0.378175\nv 0.484375 -0.484375 -0.377412\nv 0.492188 -0.484375 -0.376382\nv -0.320312 -0.476562 -0.375933\nv -0.3125 -0.476562 -0.37609\nv -0.304688 -0.476562 -0.376339\nv -0.296875 -0.476562 -0.376795\nv -0.289062 -0.476562 -0.377772\nv -0.28125 -0.476562 -0.377974\nv -0.273438 -0.476562 -0.377673\nv -0.265625 -0.476562 -0.377198\nv -0.257812 -0.476562 -0.376794\nv -0.25 -0.476562 -0.37619\nv 0.390625 -0.476562 -0.376145\nv 0.398438 -0.476562 -0.378572\nv 0.40625 -0.476562 -0.380442\nv 0.414062 -0.476562 -0.38102\nv 0.421875 -0.476562 -0.380594\nv 0.429688 -0.476562 -0.38027\nv 0.4375 -0.476562 -0.379813\nv 0.445312 -0.476562 -0.379529\nv 0.453125 -0.476562 -0.379192\nv 0.460938 -0.476562 -0.378955\nv 0.46875 -0.476562 -0.378616\nv 0.476562 -0.476562 -0.378207\nv 0.484375 -0.476562 -0.377534\nv 0.492188 -0.476562 -0.37649\nv -0.320312 -0.46875 -0.37605\nv -0.3125 -0.46875 -0.376198\nv -0.304688 -0.46875 -0.376461\nv -0.296875 -0.46875 -0.37687\nv -0.289062 -0.46875 -0.377827\nv -0.28125 -0.46875 -0.378011\nv -0.273438 -0.46875 -0.377704\nv -0.265625 -0.46875 -0.377346\nv -0.257812 -0.46875 -0.376889\nv -0.25 -0.46875 -0.376022\nv 0.390625 -0.46875 -0.375575\nv 0.398438 -0.46875 -0.378679\nv 0.40625 -0.46875 -0.380717\nv 0.414062 -0.46875 -0.381264\nv 0.421875 -0.46875 -0.38112\nv 0.429688 -0.46875 -0.380732\nv 0.4375 -0.46875 -0.380234\nv 0.445312 -0.46875 -0.379776\nv 0.453125 -0.46875 -0.379288\nv 0.460938 -0.46875 -0.378972\nv 0.46875 -0.46875 -0.378608\nv 0.476562 -0.46875 -0.378222\nv 0.484375 -0.46875 -0.377631\nv 0.492188 -0.46875 -0.376591\nv -0.320312 -0.460938 -0.376196\nv -0.3125 -0.460938 -0.376331\nv -0.304688 -0.460938 -0.376589\nv -0.296875 -0.460938 -0.376986\nv -0.289062 -0.460938 -0.377884\nv -0.28125 -0.460938 -0.378037\nv -0.273438 -0.460938 -0.377756\nv -0.265625 -0.460938 -0.377446\nv -0.257812 -0.460938 -0.377039\nv -0.25 -0.460938 -0.376117\nv 0.398438 -0.460938 -0.378371\nv 0.40625 -0.460938 -0.380867\nv 0.414062 -0.460938 -0.381384\nv 0.421875 -0.460938 -0.381439\nv 0.429688 -0.460938 -0.381265\nv 0.4375 -0.460938 -0.380487\nv 0.445312 -0.460938 -0.37996\nv 0.453125 -0.460938 -0.379449\nv 0.460938 -0.460938 -0.379031\nv 0.46875 -0.460938 -0.378609\nv 0.476562 -0.460938 -0.378208\nv 0.484375 -0.460938 -0.377707\nv 0.492188 -0.460938 -0.376676\nv -0.320312 -0.453125 -0.376299\nv -0.3125 -0.453125 -0.37649\nv -0.304688 -0.453125 -0.376714\nv -0.296875 -0.453125 -0.377122\nv -0.289062 -0.453125 -0.377953\nv -0.28125 -0.453125 -0.378032\nv -0.273438 -0.453125 -0.377721\nv -0.265625 -0.453125 -0.377521\nv -0.257812 -0.453125 -0.377018\nv -0.25 -0.453125 -0.376136\nv 0.398438 -0.453125 -0.377571\nv 0.40625 -0.453125 -0.38043\nv 0.414062 -0.453125 -0.381508\nv 0.421875 -0.453125 -0.381722\nv 0.429688 -0.453125 -0.381454\nv 0.4375 -0.453125 -0.380701\nv 0.445312 -0.453125 -0.380118\nv 0.453125 -0.453125 -0.379619\nv 0.460938 -0.453125 -0.379207\nv 0.46875 -0.453125 -0.378729\nv 0.476562 -0.453125 -0.378217\nv 0.484375 -0.453125 -0.377851\nv 0.492188 -0.453125 -0.376823\nv -0.320312 -0.445312 -0.376369\nv -0.3125 -0.445312 -0.37666\nv -0.304688 -0.445312 -0.376816\nv -0.296875 -0.445312 -0.37727\nv -0.289062 -0.445312 -0.377986\nv -0.28125 -0.445312 -0.377851\nv -0.273438 -0.445312 -0.37756\nv -0.265625 -0.445312 -0.377435\nv -0.257812 -0.445312 -0.376953\nv -0.25 -0.445312 -0.376169\nv 0.398438 -0.445312 -0.376497\nv 0.40625 -0.445312 -0.379694\nv 0.414062 -0.445312 -0.381262\nv 0.421875 -0.445312 -0.382045\nv 0.429688 -0.445312 -0.381621\nv 0.4375 -0.445312 -0.380846\nv 0.445312 -0.445312 -0.380286\nv 0.453125 -0.445312 -0.379825\nv 0.460938 -0.445312 -0.379406\nv 0.46875 -0.445312 -0.3789\nv 0.476562 -0.445312 -0.378279\nv 0.484375 -0.445312 -0.378039\nv 0.492188 -0.445312 -0.377072\nv -0.320312 -0.4375 -0.37642\nv -0.3125 -0.4375 -0.376818\nv -0.304688 -0.4375 -0.37687\nv -0.296875 -0.4375 -0.377269\nv -0.289062 -0.4375 -0.37775\nv -0.28125 -0.4375 -0.377518\nv -0.273438 -0.4375 -0.377338\nv -0.265625 -0.4375 -0.377257\nv -0.257812 -0.4375 -0.376865\nv -0.25 -0.4375 -0.376191\nv 0.398438 -0.4375 -0.37508\nv 0.40625 -0.4375 -0.37904\nv 0.414062 -0.4375 -0.380833\nv 0.421875 -0.4375 -0.381582\nv 0.429688 -0.4375 -0.381536\nv 0.4375 -0.4375 -0.380918\nv 0.445312 -0.4375 -0.380419\nv 0.453125 -0.4375 -0.379917\nv 0.460938 -0.4375 -0.379559\nv 0.46875 -0.4375 -0.379066\nv 0.476562 -0.4375 -0.378403\nv 0.484375 -0.4375 -0.378261\nv 0.492188 -0.4375 -0.377316\nv -0.320312 -0.429688 -0.376422\nv -0.3125 -0.429688 -0.376876\nv -0.304688 -0.429688 -0.376856\nv -0.296875 -0.429688 -0.377116\nv -0.289062 -0.429688 -0.377458\nv -0.28125 -0.429688 -0.377246\nv -0.273438 -0.429688 -0.377094\nv -0.265625 -0.429688 -0.377013\nv -0.257812 -0.429688 -0.376745\nv -0.25 -0.429688 -0.376215\nv 0.40625 -0.429688 -0.378374\nv 0.414062 -0.429688 -0.380333\nv 0.421875 -0.429688 -0.380998\nv 0.429688 -0.429688 -0.380902\nv 0.4375 -0.429688 -0.380602\nv 0.445312 -0.429688 -0.380351\nv 0.453125 -0.429688 -0.379948\nv 0.460938 -0.429688 -0.379531\nv 0.46875 -0.429688 -0.379027\nv 0.476562 -0.429688 -0.378524\nv 0.484375 -0.429688 -0.378357\nv 0.492188 -0.429688 -0.377537\nv -0.320312 -0.421875 -0.376346\nv -0.3125 -0.421875 -0.376865\nv -0.304688 -0.421875 -0.37676\nv -0.296875 -0.421875 -0.376956\nv -0.289062 -0.421875 -0.377146\nv -0.28125 -0.421875 -0.376978\nv -0.273438 -0.421875 -0.376775\nv -0.265625 -0.421875 -0.376747\nv -0.257812 -0.421875 -0.376613\nv -0.25 -0.421875 -0.37616\nv 0.40625 -0.421875 -0.377596\nv 0.414062 -0.421875 -0.379632\nv 0.421875 -0.421875 -0.380406\nv 0.429688 -0.421875 -0.380271\nv 0.4375 -0.421875 -0.380104\nv 0.445312 -0.421875 -0.379985\nv 0.453125 -0.421875 -0.379761\nv 0.460938 -0.421875 -0.379412\nv 0.46875 -0.421875 -0.378894\nv 0.476562 -0.421875 -0.378496\nv 0.484375 -0.421875 -0.378397\nv 0.492188 -0.421875 -0.377763\nv -0.320312 -0.414062 -0.376224\nv -0.3125 -0.414062 -0.37673\nv -0.304688 -0.414062 -0.376626\nv -0.296875 -0.414062 -0.376789\nv -0.289062 -0.414062 -0.376841\nv -0.28125 -0.414062 -0.376678\nv -0.273438 -0.414062 -0.376412\nv -0.265625 -0.414062 -0.376443\nv -0.257812 -0.414062 -0.37638\nv -0.25 -0.414062 -0.376083\nv 0.40625 -0.414062 -0.37703\nv 0.414062 -0.414062 -0.379089\nv 0.421875 -0.414062 -0.379917\nv 0.429688 -0.414062 -0.379712\nv 0.4375 -0.414062 -0.379511\nv 0.445312 -0.414062 -0.37945\nv 0.453125 -0.414062 -0.379386\nv 0.460938 -0.414062 -0.379203\nv 0.46875 -0.414062 -0.378773\nv 0.476562 -0.414062 -0.378384\nv 0.484375 -0.414062 -0.3783\nv 0.492188 -0.414062 -0.377997\nv 0.5 -0.414062 -0.375131\nv -0.320312 -0.40625 -0.375776\nv -0.3125 -0.40625 -0.376575\nv -0.304688 -0.40625 -0.376451\nv -0.296875 -0.40625 -0.37648\nv -0.289062 -0.40625 -0.376458\nv -0.28125 -0.40625 -0.376322\nv -0.273438 -0.40625 -0.375958\nv -0.265625 -0.40625 -0.375958\nv -0.257812 -0.40625 -0.376114\nv -0.25 -0.40625 -0.375946\nv 0.40625 -0.40625 -0.376722\nv 0.414062 -0.40625 -0.378563\nv 0.421875 -0.40625 -0.379379\nv 0.429688 -0.40625 -0.379157\nv 0.4375 -0.40625 -0.37893\nv 0.445312 -0.40625 -0.378836\nv 0.453125 -0.40625 -0.3788\nv 0.460938 -0.40625 -0.378845\nv 0.46875 -0.40625 -0.378547\nv 0.476562 -0.40625 -0.378138\nv 0.484375 -0.40625 -0.378092\nv 0.492188 -0.40625 -0.377912\nv 0.5 -0.40625 -0.375268\nv -0.320312 -0.398438 -0.375234\nv -0.3125 -0.398438 -0.376527\nv -0.304688 -0.398438 -0.376386\nv -0.296875 -0.398438 -0.376185\nv -0.289062 -0.398438 -0.37617\nv -0.28125 -0.398438 -0.37596\nv -0.273438 -0.398438 -0.375518\nv -0.265625 -0.398438 -0.37551\nv -0.257812 -0.398438 -0.375853\nv -0.25 -0.398438 -0.375878\nv 0.40625 -0.398438 -0.3765\nv 0.414062 -0.398438 -0.378176\nv 0.421875 -0.398438 -0.379062\nv 0.429688 -0.398438 -0.378826\nv 0.4375 -0.398438 -0.378615\nv 0.445312 -0.398438 -0.378486\nv 0.453125 -0.398438 -0.378433\nv 0.460938 -0.398438 -0.378461\nv 0.46875 -0.398438 -0.378226\nv 0.476562 -0.398438 -0.377909\nv 0.484375 -0.398438 -0.377901\nv 0.492188 -0.398438 -0.377753\nv 0.5 -0.398438 -0.375275\nv -0.3125 -0.390625 -0.376489\nv -0.304688 -0.390625 -0.376361\nv -0.296875 -0.390625 -0.376056\nv -0.289062 -0.390625 -0.375956\nv -0.28125 -0.390625 -0.375684\nv -0.273438 -0.390625 -0.375211\nv -0.265625 -0.390625 -0.375143\nv -0.257812 -0.390625 -0.375455\nv -0.25 -0.390625 -0.375692\nv 0.40625 -0.390625 -0.376219\nv 0.414062 -0.390625 -0.37765\nv 0.421875 -0.390625 -0.378637\nv 0.429688 -0.390625 -0.378522\nv 0.4375 -0.390625 -0.378307\nv 0.445312 -0.390625 -0.378189\nv 0.453125 -0.390625 -0.378155\nv 0.460938 -0.390625 -0.378154\nv 0.46875 -0.390625 -0.377907\nv 0.476562 -0.390625 -0.377613\nv 0.484375 -0.390625 -0.377625\nv 0.492188 -0.390625 -0.377509\nv 0.5 -0.390625 -0.375218\nv -0.3125 -0.382812 -0.37644\nv -0.304688 -0.382812 -0.376373\nv -0.296875 -0.382812 -0.376062\nv -0.289062 -0.382812 -0.37573\nv -0.28125 -0.382812 -0.375455\nv -0.257812 -0.382812 -0.375095\nv -0.25 -0.382812 -0.375462\nv 0.40625 -0.382812 -0.375153\nv 0.414062 -0.382812 -0.377041\nv 0.421875 -0.382812 -0.378109\nv 0.429688 -0.382812 -0.378009\nv 0.4375 -0.382812 -0.377942\nv 0.445312 -0.382812 -0.377852\nv 0.453125 -0.382812 -0.377891\nv 0.460938 -0.382812 -0.377896\nv 0.46875 -0.382812 -0.37765\nv 0.476562 -0.382812 -0.377345\nv 0.484375 -0.382812 -0.377367\nv 0.492188 -0.382812 -0.377087\nv -0.3125 -0.375 -0.376409\nv -0.304688 -0.375 -0.37649\nv -0.296875 -0.375 -0.376165\nv -0.289062 -0.375 -0.375729\nv -0.28125 -0.375 -0.375342\nv -0.25 -0.375 -0.375288\nv 0.414062 -0.375 -0.37625\nv 0.421875 -0.375 -0.377457\nv 0.429688 -0.375 -0.377494\nv 0.4375 -0.375 -0.377533\nv 0.445312 -0.375 -0.377452\nv 0.453125 -0.375 -0.377478\nv 0.460938 -0.375 -0.377606\nv 0.46875 -0.375 -0.377406\nv 0.476562 -0.375 -0.37715\nv 0.484375 -0.375 -0.377174\nv 0.492188 -0.375 -0.376547\nv -0.3125 -0.367188 -0.376342\nv -0.304688 -0.367188 -0.376653\nv -0.296875 -0.367188 -0.376309\nv -0.289062 -0.367188 -0.375771\nv -0.28125 -0.367188 -0.375336\nv -0.25 -0.367188 -0.375154\nv 0.414062 -0.367188 -0.375481\nv 0.421875 -0.367188 -0.376653\nv 0.429688 -0.367188 -0.376845\nv 0.4375 -0.367188 -0.377055\nv 0.445312 -0.367188 -0.377083\nv 0.453125 -0.367188 -0.377057\nv 0.460938 -0.367188 -0.377286\nv 0.46875 -0.367188 -0.377178\nv 0.476562 -0.367188 -0.376936\nv 0.484375 -0.367188 -0.376971\nv 0.492188 -0.367188 -0.376026\nv -0.3125 -0.359375 -0.376307\nv -0.304688 -0.359375 -0.376808\nv -0.296875 -0.359375 -0.376419\nv -0.289062 -0.359375 -0.375871\nv -0.28125 -0.359375 -0.375395\nv -0.25 -0.359375 -0.375022\nv 0.414062 -0.359375 -0.375066\nv 0.421875 -0.359375 -0.376115\nv 0.429688 -0.359375 -0.376303\nv 0.4375 -0.359375 -0.376694\nv 0.445312 -0.359375 -0.376682\nv 0.453125 -0.359375 -0.376721\nv 0.460938 -0.359375 -0.376983\nv 0.46875 -0.359375 -0.376983\nv 0.476562 -0.359375 -0.376796\nv 0.484375 -0.359375 -0.376749\nv 0.492188 -0.359375 -0.375773\nv -0.3125 -0.351562 -0.376314\nv -0.304688 -0.351562 -0.376905\nv -0.296875 -0.351562 -0.376562\nv -0.289062 -0.351562 -0.375973\nv -0.28125 -0.351562 -0.375438\nv 0.421875 -0.351562 -0.375822\nv 0.429688 -0.351562 -0.375956\nv 0.4375 -0.351562 -0.376274\nv 0.445312 -0.351562 -0.376283\nv 0.453125 -0.351562 -0.376463\nv 0.460938 -0.351562 -0.376788\nv 0.46875 -0.351562 -0.37682\nv 0.476562 -0.351562 -0.376778\nv 0.484375 -0.351562 -0.376651\nv 0.492188 -0.351562 -0.375685\nv -0.3125 -0.34375 -0.376326\nv -0.304688 -0.34375 -0.377079\nv -0.296875 -0.34375 -0.376737\nv -0.289062 -0.34375 -0.376051\nv -0.28125 -0.34375 -0.375487\nv 0.421875 -0.34375 -0.375653\nv 0.429688 -0.34375 -0.375908\nv 0.4375 -0.34375 -0.376164\nv 0.445312 -0.34375 -0.376021\nv 0.453125 -0.34375 -0.37629\nv 0.460938 -0.34375 -0.376671\nv 0.46875 -0.34375 -0.376684\nv 0.476562 -0.34375 -0.376791\nv 0.484375 -0.34375 -0.376637\nv 0.492188 -0.34375 -0.375637\nv -0.3125 -0.335938 -0.376391\nv -0.304688 -0.335938 -0.377274\nv -0.296875 -0.335938 -0.376965\nv -0.289062 -0.335938 -0.37619\nv -0.28125 -0.335938 -0.375567\nv 0.421875 -0.335938 -0.375928\nv 0.429688 -0.335938 -0.376017\nv 0.4375 -0.335938 -0.376061\nv 0.445312 -0.335938 -0.375969\nv 0.453125 -0.335938 -0.376225\nv 0.460938 -0.335938 -0.376576\nv 0.46875 -0.335938 -0.37668\nv 0.476562 -0.335938 -0.376853\nv 0.484375 -0.335938 -0.376706\nv 0.492188 -0.335938 -0.375658\nv -0.3125 -0.328125 -0.376513\nv -0.304688 -0.328125 -0.37754\nv -0.296875 -0.328125 -0.377238\nv -0.289062 -0.328125 -0.376355\nv -0.28125 -0.328125 -0.375773\nv 0.414062 -0.328125 -0.375387\nv 0.421875 -0.328125 -0.376214\nv 0.429688 -0.328125 -0.376095\nv 0.4375 -0.328125 -0.375963\nv 0.445312 -0.328125 -0.37603\nv 0.453125 -0.328125 -0.376281\nv 0.460938 -0.328125 -0.376683\nv 0.46875 -0.328125 -0.376767\nv 0.476562 -0.328125 -0.376927\nv 0.484375 -0.328125 -0.376791\nv 0.492188 -0.328125 -0.375641\nv -0.3125 -0.320312 -0.37658\nv -0.304688 -0.320312 -0.377862\nv -0.296875 -0.320312 -0.377538\nv -0.289062 -0.320312 -0.376577\nv -0.28125 -0.320312 -0.375971\nv 0.414062 -0.320312 -0.375255\nv 0.421875 -0.320312 -0.376348\nv 0.429688 -0.320312 -0.376279\nv 0.4375 -0.320312 -0.376177\nv 0.445312 -0.320312 -0.376229\nv 0.453125 -0.320312 -0.376485\nv 0.460938 -0.320312 -0.376931\nv 0.46875 -0.320312 -0.376961\nv 0.476562 -0.320312 -0.377027\nv 0.484375 -0.320312 -0.376808\nv 0.492188 -0.320312 -0.375535\nv -0.3125 -0.3125 -0.376524\nv -0.304688 -0.3125 -0.378177\nv -0.296875 -0.3125 -0.377863\nv -0.289062 -0.3125 -0.376829\nv -0.28125 -0.3125 -0.376191\nv -0.273438 -0.3125 -0.375015\nv -0.25 -0.3125 -0.375268\nv -0.242188 -0.3125 -0.375214\nv 0.414062 -0.3125 -0.375063\nv 0.421875 -0.3125 -0.376247\nv 0.429688 -0.3125 -0.376332\nv 0.4375 -0.3125 -0.376339\nv 0.445312 -0.3125 -0.376507\nv 0.453125 -0.3125 -0.376716\nv 0.460938 -0.3125 -0.377147\nv 0.46875 -0.3125 -0.377156\nv 0.476562 -0.3125 -0.377178\nv 0.484375 -0.3125 -0.376812\nv 0.492188 -0.3125 -0.375546\nv -0.3125 -0.304688 -0.376293\nv -0.304688 -0.304688 -0.37828\nv -0.296875 -0.304688 -0.378114\nv -0.289062 -0.304688 -0.37705\nv -0.28125 -0.304688 -0.376388\nv -0.273438 -0.304688 -0.375188\nv -0.265625 -0.304688 -0.375011\nv -0.257812 -0.304688 -0.375249\nv -0.25 -0.304688 -0.375669\nv -0.242188 -0.304688 -0.375549\nv 0.421875 -0.304688 -0.376017\nv 0.429688 -0.304688 -0.376272\nv 0.4375 -0.304688 -0.376433\nv 0.445312 -0.304688 -0.376662\nv 0.453125 -0.304688 -0.376894\nv 0.460938 -0.304688 -0.377357\nv 0.46875 -0.304688 -0.37727\nv 0.476562 -0.304688 -0.377256\nv 0.484375 -0.304688 -0.376904\nv 0.492188 -0.304688 -0.375837\nv -0.3125 -0.296875 -0.376054\nv -0.304688 -0.296875 -0.378298\nv -0.296875 -0.296875 -0.37836\nv -0.289062 -0.296875 -0.377318\nv -0.28125 -0.296875 -0.376584\nv -0.273438 -0.296875 -0.375486\nv -0.265625 -0.296875 -0.375346\nv -0.257812 -0.296875 -0.375657\nv -0.25 -0.296875 -0.376053\nv -0.242188 -0.296875 -0.375899\nv 0.421875 -0.296875 -0.37593\nv 0.429688 -0.296875 -0.37629\nv 0.4375 -0.296875 -0.376436\nv 0.445312 -0.296875 -0.376714\nv 0.453125 -0.296875 -0.377032\nv 0.460938 -0.296875 -0.377506\nv 0.46875 -0.296875 -0.377382\nv 0.476562 -0.296875 -0.377324\nv 0.484375 -0.296875 -0.377041\nv 0.492188 -0.296875 -0.3761\nv -0.3125 -0.289062 -0.375868\nv -0.304688 -0.289062 -0.378243\nv -0.296875 -0.289062 -0.378554\nv -0.289062 -0.289062 -0.37757\nv -0.28125 -0.289062 -0.37682\nv -0.273438 -0.289062 -0.37575\nv -0.265625 -0.289062 -0.375728\nv -0.257812 -0.289062 -0.376056\nv -0.25 -0.289062 -0.376468\nv -0.242188 -0.289062 -0.376233\nv -0.234375 -0.289062 -0.375074\nv 0.421875 -0.289062 -0.376018\nv 0.429688 -0.289062 -0.376373\nv 0.4375 -0.289062 -0.376541\nv 0.445312 -0.289062 -0.376793\nv 0.453125 -0.289062 -0.377117\nv 0.460938 -0.289062 -0.377664\nv 0.46875 -0.289062 -0.37757\nv 0.476562 -0.289062 -0.377481\nv 0.484375 -0.289062 -0.377208\nv 0.492188 -0.289062 -0.376358\nv -0.3125 -0.28125 -0.375568\nv -0.304688 -0.28125 -0.378118\nv -0.296875 -0.28125 -0.37863\nv -0.289062 -0.28125 -0.377714\nv -0.28125 -0.28125 -0.377006\nv -0.273438 -0.28125 -0.375953\nv -0.265625 -0.28125 -0.375999\nv -0.257812 -0.28125 -0.376414\nv -0.25 -0.28125 -0.376782\nv -0.242188 -0.28125 -0.376612\nv -0.234375 -0.28125 -0.375583\nv 0.414062 -0.28125 -0.375027\nv 0.421875 -0.28125 -0.37614\nv 0.429688 -0.28125 -0.376615\nv 0.4375 -0.28125 -0.376843\nv 0.445312 -0.28125 -0.377014\nv 0.453125 -0.28125 -0.37739\nv 0.460938 -0.28125 -0.377916\nv 0.46875 -0.28125 -0.377718\nv 0.476562 -0.28125 -0.377521\nv 0.484375 -0.28125 -0.377248\nv 0.492188 -0.28125 -0.376517\nv -0.3125 -0.273438 -0.375205\nv -0.304688 -0.273438 -0.377978\nv -0.296875 -0.273438 -0.378656\nv -0.289062 -0.273438 -0.377829\nv -0.28125 -0.273438 -0.377009\nv -0.273438 -0.273438 -0.375989\nv -0.265625 -0.273438 -0.376124\nv -0.257812 -0.273438 -0.376585\nv -0.25 -0.273438 -0.376881\nv -0.242188 -0.273438 -0.376765\nv -0.234375 -0.273438 -0.375904\nv 0.414062 -0.273438 -0.375214\nv 0.421875 -0.273438 -0.376247\nv 0.429688 -0.273438 -0.376769\nv 0.4375 -0.273438 -0.377097\nv 0.445312 -0.273438 -0.377193\nv 0.453125 -0.273438 -0.377539\nv 0.460938 -0.273438 -0.377972\nv 0.46875 -0.273438 -0.377779\nv 0.476562 -0.273438 -0.377442\nv 0.484375 -0.273438 -0.377121\nv 0.492188 -0.273438 -0.376626\nv -0.304688 -0.265625 -0.3778\nv -0.296875 -0.265625 -0.378573\nv -0.289062 -0.265625 -0.377889\nv -0.28125 -0.265625 -0.376982\nv -0.273438 -0.265625 -0.375929\nv -0.265625 -0.265625 -0.376133\nv -0.257812 -0.265625 -0.376712\nv -0.25 -0.265625 -0.376936\nv -0.242188 -0.265625 -0.376801\nv -0.234375 -0.265625 -0.376075\nv 0.414062 -0.265625 -0.375432\nv 0.421875 -0.265625 -0.376365\nv 0.429688 -0.265625 -0.37688\nv 0.4375 -0.265625 -0.377136\nv 0.445312 -0.265625 -0.377302\nv 0.453125 -0.265625 -0.377705\nv 0.460938 -0.265625 -0.378061\nv 0.46875 -0.265625 -0.377863\nv 0.476562 -0.265625 -0.377407\nv 0.484375 -0.265625 -0.377156\nv 0.492188 -0.265625 -0.376554\nv -0.304688 -0.257812 -0.37768\nv -0.296875 -0.257812 -0.378596\nv -0.289062 -0.257812 -0.377981\nv -0.28125 -0.257812 -0.376958\nv -0.273438 -0.257812 -0.375727\nv -0.265625 -0.257812 -0.375889\nv -0.257812 -0.257812 -0.376601\nv -0.25 -0.257812 -0.376847\nv -0.242188 -0.257812 -0.376785\nv -0.234375 -0.257812 -0.376074\nv 0.414062 -0.257812 -0.375565\nv 0.421875 -0.257812 -0.376484\nv 0.429688 -0.257812 -0.377009\nv 0.4375 -0.257812 -0.377159\nv 0.445312 -0.257812 -0.377372\nv 0.453125 -0.257812 -0.377901\nv 0.460938 -0.257812 -0.37821\nv 0.46875 -0.257812 -0.378015\nv 0.476562 -0.257812 -0.377588\nv 0.484375 -0.257812 -0.377337\nv 0.492188 -0.257812 -0.376499\nv -0.304688 -0.25 -0.377557\nv -0.296875 -0.25 -0.378611\nv -0.289062 -0.25 -0.378108\nv -0.28125 -0.25 -0.376932\nv -0.273438 -0.25 -0.37555\nv -0.265625 -0.25 -0.375593\nv -0.257812 -0.25 -0.376273\nv -0.25 -0.25 -0.376611\nv -0.242188 -0.25 -0.376582\nv -0.234375 -0.25 -0.375908\nv 0.414062 -0.25 -0.375818\nv 0.421875 -0.25 -0.376598\nv 0.429688 -0.25 -0.377076\nv 0.4375 -0.25 -0.377147\nv 0.445312 -0.25 -0.377468\nv 0.453125 -0.25 -0.378121\nv 0.460938 -0.25 -0.378503\nv 0.46875 -0.25 -0.378414\nv 0.476562 -0.25 -0.37793\nv 0.484375 -0.25 -0.377647\nv 0.492188 -0.25 -0.376495\nv -0.304688 -0.242188 -0.377542\nv -0.296875 -0.242188 -0.378634\nv -0.289062 -0.242188 -0.378204\nv -0.28125 -0.242188 -0.376921\nv -0.273438 -0.242188 -0.37539\nv -0.265625 -0.242188 -0.375371\nv -0.257812 -0.242188 -0.375934\nv -0.25 -0.242188 -0.376365\nv -0.242188 -0.242188 -0.37638\nv -0.234375 -0.242188 -0.375721\nv 0.40625 -0.242188 -0.375663\nv 0.414062 -0.242188 -0.376316\nv 0.421875 -0.242188 -0.376674\nv 0.429688 -0.242188 -0.377034\nv 0.4375 -0.242188 -0.377142\nv 0.445312 -0.242188 -0.37756\nv 0.453125 -0.242188 -0.378318\nv 0.460938 -0.242188 -0.378833\nv 0.46875 -0.242188 -0.378963\nv 0.476562 -0.242188 -0.378448\nv 0.484375 -0.242188 -0.378154\nv 0.492188 -0.242188 -0.376802\nv -0.304688 -0.234375 -0.377591\nv -0.296875 -0.234375 -0.378617\nv -0.289062 -0.234375 -0.378236\nv -0.28125 -0.234375 -0.376907\nv -0.273438 -0.234375 -0.375158\nv -0.265625 -0.234375 -0.375098\nv -0.257812 -0.234375 -0.375622\nv -0.25 -0.234375 -0.376028\nv -0.242188 -0.234375 -0.376152\nv -0.234375 -0.234375 -0.375545\nv 0.40625 -0.234375 -0.376555\nv 0.414062 -0.234375 -0.37698\nv 0.421875 -0.234375 -0.377149\nv 0.429688 -0.234375 -0.377187\nv 0.4375 -0.234375 -0.377214\nv 0.445312 -0.234375 -0.377693\nv 0.453125 -0.234375 -0.378642\nv 0.460938 -0.234375 -0.379279\nv 0.46875 -0.234375 -0.379561\nv 0.476562 -0.234375 -0.379012\nv 0.484375 -0.234375 -0.378591\nv 0.492188 -0.234375 -0.377241\nv -0.304688 -0.226562 -0.37766\nv -0.296875 -0.226562 -0.378675\nv -0.289062 -0.226562 -0.378247\nv -0.28125 -0.226562 -0.376876\nv -0.257812 -0.226562 -0.375353\nv -0.25 -0.226562 -0.375784\nv -0.242188 -0.226562 -0.375903\nv -0.234375 -0.226562 -0.375325\nv 0.398438 -0.226562 -0.375336\nv 0.40625 -0.226562 -0.377795\nv 0.414062 -0.226562 -0.377549\nv 0.421875 -0.226562 -0.377592\nv 0.429688 -0.226562 -0.377557\nv 0.4375 -0.226562 -0.377443\nv 0.445312 -0.226562 -0.377909\nv 0.453125 -0.226562 -0.378912\nv 0.460938 -0.226562 -0.379784\nv 0.46875 -0.226562 -0.380116\nv 0.476562 -0.226562 -0.379565\nv 0.484375 -0.226562 -0.379072\nv 0.492188 -0.226562 -0.377847\nv -0.304688 -0.21875 -0.377824\nv -0.296875 -0.21875 -0.378894\nv -0.289062 -0.21875 -0.378356\nv -0.28125 -0.21875 -0.376981\nv -0.257812 -0.21875 -0.375107\nv -0.25 -0.21875 -0.375576\nv -0.242188 -0.21875 -0.37565\nv -0.234375 -0.21875 -0.375098\nv 0.398438 -0.21875 -0.375359\nv 0.40625 -0.21875 -0.378392\nv 0.414062 -0.21875 -0.378509\nv 0.421875 -0.21875 -0.377987\nv 0.429688 -0.21875 -0.377903\nv 0.4375 -0.21875 -0.37788\nv 0.445312 -0.21875 -0.378316\nv 0.453125 -0.21875 -0.379293\nv 0.460938 -0.21875 -0.380221\nv 0.46875 -0.21875 -0.380605\nv 0.476562 -0.21875 -0.380171\nv 0.484375 -0.21875 -0.379667\nv 0.492188 -0.21875 -0.378627\nv -0.304688 -0.210938 -0.377916\nv -0.296875 -0.210938 -0.379076\nv -0.289062 -0.210938 -0.37863\nv -0.28125 -0.210938 -0.377241\nv -0.273438 -0.210938 -0.375105\nv -0.257812 -0.210938 -0.375102\nv -0.25 -0.210938 -0.37543\nv -0.242188 -0.210938 -0.375598\nv 0.398438 -0.210938 -0.375071\nv 0.40625 -0.210938 -0.378427\nv 0.414062 -0.210938 -0.378777\nv 0.421875 -0.210938 -0.378544\nv 0.429688 -0.210938 -0.378313\nv 0.4375 -0.210938 -0.378308\nv 0.445312 -0.210938 -0.378773\nv 0.453125 -0.210938 -0.379805\nv 0.460938 -0.210938 -0.380839\nv 0.46875 -0.210938 -0.381172\nv 0.476562 -0.210938 -0.380863\nv 0.484375 -0.210938 -0.380327\nv 0.492188 -0.210938 -0.379275\nv 0.5 -0.210938 -0.375679\nv -0.304688 -0.203125 -0.377926\nv -0.296875 -0.203125 -0.379211\nv -0.289062 -0.203125 -0.37902\nv -0.28125 -0.203125 -0.377751\nv -0.273438 -0.203125 -0.375491\nv -0.265625 -0.203125 -0.375126\nv -0.257812 -0.203125 -0.375312\nv -0.25 -0.203125 -0.375605\nv -0.242188 -0.203125 -0.375757\nv 0.40625 -0.203125 -0.377877\nv 0.414062 -0.203125 -0.378478\nv 0.421875 -0.203125 -0.378464\nv 0.429688 -0.203125 -0.378469\nv 0.4375 -0.203125 -0.378603\nv 0.445312 -0.203125 -0.379226\nv 0.453125 -0.203125 -0.380393\nv 0.460938 -0.203125 -0.381401\nv 0.46875 -0.203125 -0.38174\nv 0.476562 -0.203125 -0.381503\nv 0.484375 -0.203125 -0.380946\nv 0.492188 -0.203125 -0.379879\nv 0.5 -0.203125 -0.376558\nv -0.304688 -0.195312 -0.377596\nv -0.296875 -0.195312 -0.379129\nv -0.289062 -0.195312 -0.379115\nv -0.28125 -0.195312 -0.377973\nv -0.273438 -0.195312 -0.375857\nv -0.265625 -0.195312 -0.375373\nv -0.257812 -0.195312 -0.375354\nv -0.25 -0.195312 -0.37569\nv -0.242188 -0.195312 -0.375753\nv 0.40625 -0.195312 -0.37707\nv 0.414062 -0.195312 -0.378039\nv 0.421875 -0.195312 -0.378437\nv 0.429688 -0.195312 -0.378524\nv 0.4375 -0.195312 -0.378767\nv 0.445312 -0.195312 -0.379711\nv 0.453125 -0.195312 -0.381094\nv 0.460938 -0.195312 -0.381885\nv 0.46875 -0.195312 -0.382246\nv 0.476562 -0.195312 -0.382067\nv 0.484375 -0.195312 -0.381516\nv 0.492188 -0.195312 -0.380412\nv 0.5 -0.195312 -0.37722\nv -0.304688 -0.1875 -0.37717\nv -0.296875 -0.1875 -0.379002\nv -0.289062 -0.1875 -0.37909\nv -0.28125 -0.1875 -0.378033\nv -0.273438 -0.1875 -0.376196\nv -0.265625 -0.1875 -0.375701\nv -0.257812 -0.1875 -0.375634\nv -0.25 -0.1875 -0.375927\nv -0.242188 -0.1875 -0.375594\nv 0.40625 -0.1875 -0.376223\nv 0.414062 -0.1875 -0.377462\nv 0.421875 -0.1875 -0.378131\nv 0.429688 -0.1875 -0.378664\nv 0.4375 -0.1875 -0.378932\nv 0.445312 -0.1875 -0.380012\nv 0.453125 -0.1875 -0.381429\nv 0.460938 -0.1875 -0.382314\nv 0.46875 -0.183994 -0.382812\nv 0.46875 -0.1875 -0.382682\nv 0.476562 -0.183334 -0.382812\nv 0.476562 -0.1875 -0.382631\nv 0.484375 -0.1875 -0.38204\nv 0.492188 -0.1875 -0.380874\nv 0.5 -0.1875 -0.377793\nv -0.304688 -0.179688 -0.376588\nv -0.296875 -0.179688 -0.37863\nv -0.289062 -0.179688 -0.378957\nv -0.28125 -0.179688 -0.377968\nv -0.273438 -0.179688 -0.376418\nv -0.265625 -0.179688 -0.375999\nv -0.257812 -0.179688 -0.376085\nv -0.25 -0.179688 -0.376188\nv -0.242188 -0.179688 -0.375587\nv 0.40625 -0.179688 -0.375757\nv 0.414062 -0.179688 -0.3769\nv 0.421875 -0.179688 -0.377775\nv 0.429688 -0.179688 -0.378519\nv 0.4375 -0.179688 -0.379056\nv 0.445312 -0.179688 -0.380198\nv 0.453125 -0.179688 -0.381458\nv 0.466394 -0.179688 -0.382812\nv 0.460938 -0.179688 -0.382444\nv 0.480079 -0.179688 -0.382812\nv 0.484375 -0.174415 -0.382812\nv 0.484375 -0.179688 -0.382594\nv 0.492188 -0.179688 -0.381141\nv 0.5 -0.179688 -0.378036\nv -0.304688 -0.171875 -0.376361\nv -0.296875 -0.171875 -0.378544\nv -0.289062 -0.171875 -0.379006\nv -0.28125 -0.171875 -0.378189\nv -0.273438 -0.171875 -0.376974\nv -0.265625 -0.171875 -0.37648\nv -0.257812 -0.171875 -0.376518\nv -0.25 -0.171875 -0.376439\nv -0.242188 -0.171875 -0.375808\nv 0.40625 -0.171875 -0.375536\nv 0.414062 -0.171875 -0.376621\nv 0.421875 -0.171875 -0.377542\nv 0.429688 -0.171875 -0.378301\nv 0.4375 -0.171875 -0.378835\nv 0.445312 -0.171875 -0.380014\nv 0.453125 -0.171875 -0.381386\nv 0.468355 -0.171875 -0.382812\nv 0.460938 -0.171875 -0.382377\nv 0.484924 -0.171875 -0.382812\nv 0.492188 -0.171875 -0.381251\nv 0.5 -0.171875 -0.378166\nv -0.304688 -0.164062 -0.376276\nv -0.296875 -0.164062 -0.378627\nv -0.289062 -0.164062 -0.379274\nv -0.28125 -0.164062 -0.378512\nv -0.273438 -0.164062 -0.377465\nv -0.265625 -0.164062 -0.376908\nv -0.257812 -0.164062 -0.377002\nv -0.25 -0.164062 -0.376743\nv -0.242188 -0.164062 -0.376007\nv 0.40625 -0.164062 -0.37512\nv 0.414062 -0.164062 -0.376487\nv 0.421875 -0.164062 -0.377355\nv 0.429688 -0.164062 -0.378152\nv 0.4375 -0.164062 -0.378737\nv 0.445312 -0.164062 -0.379878\nv 0.453125 -0.164062 -0.381383\nv 0.463544 -0.164062 -0.382812\nv 0.460938 -0.164062 -0.382593\nv 0.486253 -0.164062 -0.382812\nv 0.492188 -0.164062 -0.381486\nv 0.5 -0.164062 -0.37839\nv -0.304688 -0.15625 -0.376225\nv -0.296875 -0.15625 -0.378892\nv -0.289062 -0.15625 -0.379541\nv -0.28125 -0.15625 -0.378793\nv -0.273438 -0.15625 -0.377838\nv -0.265625 -0.15625 -0.377423\nv -0.257812 -0.15625 -0.377359\nv -0.25 -0.15625 -0.376982\nv -0.242188 -0.15625 -0.376262\nv 0.414062 -0.15625 -0.37614\nv 0.421875 -0.15625 -0.377279\nv 0.429688 -0.15625 -0.378126\nv 0.4375 -0.15625 -0.378622\nv 0.445312 -0.15625 -0.37979\nv 0.453125 -0.15625 -0.381186\nv 0.464979 -0.15625 -0.382812\nv 0.460938 -0.15625 -0.382367\nv 0.488423 -0.15625 -0.382812\nv 0.492188 -0.15625 -0.381879\nv 0.5 -0.15625 -0.378566\nv -0.304688 -0.148438 -0.376246\nv -0.296875 -0.148438 -0.379048\nv -0.289062 -0.148438 -0.379696\nv -0.28125 -0.148438 -0.379068\nv -0.273438 -0.148438 -0.378378\nv -0.265625 -0.148438 -0.37796\nv -0.257812 -0.148438 -0.377543\nv -0.25 -0.148438 -0.376893\nv -0.242188 -0.148438 -0.376181\nv 0.414062 -0.148438 -0.375883\nv 0.421875 -0.148438 -0.377248\nv 0.429688 -0.148438 -0.378101\nv 0.4375 -0.148438 -0.378628\nv 0.445312 -0.148438 -0.379697\nv 0.453125 -0.148438 -0.38094\nv 0.466311 -0.148438 -0.382812\nv 0.460938 -0.148438 -0.382206\nv 0.487414 -0.148438 -0.382812\nv 0.484375 -0.14131 -0.382812\nv 0.492188 -0.148438 -0.381598\nv 0.5 -0.148438 -0.378204\nv -0.304688 -0.140625 -0.376283\nv -0.296875 -0.140625 -0.379095\nv -0.289062 -0.140625 -0.379786\nv -0.28125 -0.140625 -0.379206\nv -0.273438 -0.140625 -0.378623\nv -0.265625 -0.140625 -0.378065\nv -0.257812 -0.140625 -0.3773\nv -0.25 -0.140625 -0.376697\nv -0.242188 -0.140625 -0.37599\nv 0.414062 -0.140625 -0.375362\nv 0.421875 -0.140625 -0.376612\nv 0.429688 -0.140625 -0.377794\nv 0.4375 -0.140625 -0.378198\nv 0.445312 -0.140625 -0.379155\nv 0.453125 -0.140625 -0.380326\nv 0.468712 -0.140625 -0.382812\nv 0.460938 -0.140625 -0.381805\nv 0.46875 -0.140583 -0.382812\nv 0.482097 -0.140625 -0.382812\nv 0.476562 -0.139655 -0.382812\nv 0.484375 -0.140625 -0.382747\nv 0.492188 -0.140625 -0.380726\nv 0.5 -0.140625 -0.377271\nv -0.304688 -0.132812 -0.376031\nv -0.296875 -0.132812 -0.378933\nv -0.289062 -0.132812 -0.379793\nv -0.28125 -0.132812 -0.379341\nv -0.273438 -0.132812 -0.378745\nv -0.265625 -0.132812 -0.377976\nv -0.257812 -0.132812 -0.377055\nv -0.25 -0.132812 -0.376564\nv -0.242188 -0.132812 -0.375901\nv 0.421875 -0.132812 -0.376171\nv 0.429688 -0.132812 -0.377428\nv 0.4375 -0.132812 -0.377898\nv 0.445312 -0.132812 -0.378617\nv 0.453125 -0.132812 -0.379727\nv 0.460938 -0.132812 -0.381055\nv 0.46875 -0.132812 -0.381877\nv 0.476562 -0.132812 -0.381899\nv 0.484375 -0.132812 -0.381572\nv 0.492188 -0.132812 -0.379409\nv 0.5 -0.132812 -0.376069\nv -0.304688 -0.125 -0.375516\nv -0.296875 -0.125 -0.378635\nv -0.289062 -0.125 -0.379535\nv -0.28125 -0.125 -0.379286\nv -0.273438 -0.125 -0.378621\nv -0.265625 -0.125 -0.377531\nv -0.257812 -0.125 -0.376676\nv -0.25 -0.125 -0.376287\nv -0.242188 -0.125 -0.375629\nv 0.421875 -0.125 -0.37575\nv 0.429688 -0.125 -0.376787\nv 0.4375 -0.125 -0.377403\nv 0.445312 -0.125 -0.378164\nv 0.453125 -0.125 -0.379218\nv 0.460938 -0.125 -0.380282\nv 0.46875 -0.125 -0.381011\nv 0.476562 -0.125 -0.381027\nv 0.484375 -0.125 -0.380612\nv 0.492188 -0.125 -0.378361\nv -0.304688 -0.117188 -0.375011\nv -0.296875 -0.117188 -0.378246\nv -0.289062 -0.117188 -0.379204\nv -0.28125 -0.117188 -0.379048\nv -0.273438 -0.117188 -0.378034\nv -0.265625 -0.117188 -0.376908\nv -0.257812 -0.117188 -0.376049\nv -0.25 -0.117188 -0.375876\nv -0.242188 -0.117188 -0.375253\nv 0.421875 -0.117188 -0.375095\nv 0.429688 -0.117188 -0.376125\nv 0.4375 -0.117188 -0.376788\nv 0.445312 -0.117188 -0.37774\nv 0.453125 -0.117188 -0.378645\nv 0.460938 -0.117188 -0.379578\nv 0.46875 -0.117188 -0.380404\nv 0.476562 -0.117188 -0.380596\nv 0.484375 -0.117188 -0.380067\nv 0.492188 -0.117188 -0.377614\nv -0.296875 -0.109375 -0.377817\nv -0.289062 -0.109375 -0.379049\nv -0.28125 -0.109375 -0.378709\nv -0.273438 -0.109375 -0.377373\nv -0.265625 -0.109375 -0.376291\nv -0.257812 -0.109375 -0.375438\nv -0.25 -0.109375 -0.375362\nv 0.421875 -0.109375 -0.37503\nv 0.429688 -0.109375 -0.375806\nv 0.4375 -0.109375 -0.376357\nv 0.445312 -0.109375 -0.377312\nv 0.453125 -0.109375 -0.378215\nv 0.460938 -0.109375 -0.379134\nv 0.46875 -0.109375 -0.379803\nv 0.476562 -0.109375 -0.380163\nv 0.484375 -0.109375 -0.37957\nv 0.492188 -0.109375 -0.377311\nv -0.296875 -0.101562 -0.377431\nv -0.289062 -0.101562 -0.378562\nv -0.28125 -0.101562 -0.378177\nv -0.273438 -0.101562 -0.376661\nv -0.265625 -0.101562 -0.375542\nv 0.429688 -0.101562 -0.37573\nv 0.4375 -0.101562 -0.376184\nv 0.445312 -0.101562 -0.377034\nv 0.453125 -0.101562 -0.377824\nv 0.460938 -0.101562 -0.378708\nv 0.46875 -0.101562 -0.379363\nv 0.476562 -0.101562 -0.379788\nv 0.484375 -0.101562 -0.379215\nv 0.492188 -0.101562 -0.377293\nv -0.296875 -0.09375 -0.377208\nv -0.289062 -0.09375 -0.378158\nv -0.28125 -0.09375 -0.377803\nv -0.273438 -0.09375 -0.376354\nv -0.265625 -0.09375 -0.375424\nv 0.421875 -0.09375 -0.375234\nv 0.429688 -0.09375 -0.375907\nv 0.4375 -0.09375 -0.376249\nv 0.445312 -0.09375 -0.376906\nv 0.453125 -0.09375 -0.377465\nv 0.460938 -0.09375 -0.378414\nv 0.46875 -0.09375 -0.379219\nv 0.476562 -0.09375 -0.379765\nv 0.484375 -0.09375 -0.379282\nv 0.492188 -0.09375 -0.377574\nv -0.304688 -0.0859375 -0.37541\nv -0.296875 -0.0859375 -0.377581\nv -0.289062 -0.0859375 -0.378116\nv -0.28125 -0.0859375 -0.377738\nv -0.273438 -0.0859375 -0.376426\nv -0.265625 -0.0859375 -0.37572\nv -0.257812 -0.0859375 -0.375142\nv -0.25 -0.0859375 -0.375038\nv 0.414062 -0.0859375 -0.375242\nv 0.421875 -0.0859375 -0.375762\nv 0.429688 -0.0859375 -0.376153\nv 0.4375 -0.0859375 -0.376416\nv 0.445312 -0.0859375 -0.37687\nv 0.453125 -0.0859375 -0.377418\nv 0.460938 -0.0859375 -0.378211\nv 0.46875 -0.0859375 -0.379004\nv 0.476562 -0.0859375 -0.379643\nv 0.484375 -0.0859375 -0.379531\nv 0.492188 -0.0859375 -0.378466\nv 0.5 -0.0859375 -0.375137\nv -0.304688 -0.078125 -0.375873\nv -0.296875 -0.078125 -0.377605\nv -0.289062 -0.078125 -0.378082\nv -0.28125 -0.078125 -0.377965\nv -0.273438 -0.078125 -0.376815\nv -0.265625 -0.078125 -0.376258\nv -0.257812 -0.078125 -0.375522\nv -0.25 -0.078125 -0.375159\nv 0.414062 -0.078125 -0.375532\nv 0.421875 -0.078125 -0.375998\nv 0.429688 -0.078125 -0.376343\nv 0.4375 -0.078125 -0.376352\nv 0.445312 -0.078125 -0.376716\nv 0.453125 -0.078125 -0.377351\nv 0.460938 -0.078125 -0.378169\nv 0.46875 -0.078125 -0.378871\nv 0.476562 -0.078125 -0.379727\nv 0.484375 -0.078125 -0.380175\nv 0.492188 -0.078125 -0.379232\nv 0.5 -0.078125 -0.375943\nv -0.304688 -0.0703125 -0.376442\nv -0.296875 -0.0703125 -0.377665\nv -0.289062 -0.0703125 -0.377844\nv -0.28125 -0.0703125 -0.378042\nv -0.273438 -0.0703125 -0.377245\nv -0.265625 -0.0703125 -0.376872\nv -0.257812 -0.0703125 -0.376335\nv -0.25 -0.0703125 -0.375819\nv -0.242188 -0.0703125 -0.375322\nv 0.414062 -0.0703125 -0.376153\nv 0.421875 -0.0703125 -0.376545\nv 0.429688 -0.0703125 -0.376669\nv 0.4375 -0.0703125 -0.376403\nv 0.445312 -0.0703125 -0.376595\nv 0.453125 -0.0703125 -0.377232\nv 0.460938 -0.0703125 -0.378204\nv 0.46875 -0.0703125 -0.379002\nv 0.476562 -0.0703125 -0.380067\nv 0.484375 -0.0703125 -0.380469\nv 0.492188 -0.0703125 -0.379647\nv 0.5 -0.0703125 -0.376302\nv -0.304688 -0.0625 -0.376352\nv -0.296875 -0.0625 -0.377612\nv -0.289062 -0.0625 -0.377788\nv -0.28125 -0.0625 -0.378073\nv -0.273438 -0.0625 -0.377475\nv -0.265625 -0.0625 -0.377235\nv -0.257812 -0.0625 -0.376801\nv -0.25 -0.0625 -0.37636\nv -0.242188 -0.0625 -0.375699\nv 0.40625 -0.0625 -0.375822\nv 0.414062 -0.0625 -0.377039\nv 0.421875 -0.0625 -0.377252\nv 0.429688 -0.0625 -0.377177\nv 0.4375 -0.0625 -0.376909\nv 0.445312 -0.0625 -0.376936\nv 0.453125 -0.0625 -0.377415\nv 0.460938 -0.0625 -0.378537\nv 0.46875 -0.0625 -0.379341\nv 0.476562 -0.0625 -0.380474\nv 0.484375 -0.0625 -0.380834\nv 0.492188 -0.0625 -0.379864\nv 0.5 -0.0625 -0.376594\nv -0.304688 -0.0546875 -0.375802\nv -0.296875 -0.0546875 -0.37736\nv -0.289062 -0.0546875 -0.377812\nv -0.28125 -0.0546875 -0.37833\nv -0.273438 -0.0546875 -0.377808\nv -0.265625 -0.0546875 -0.377561\nv -0.257812 -0.0546875 -0.377319\nv -0.25 -0.0546875 -0.376893\nv -0.242188 -0.0546875 -0.375984\nv 0.40625 -0.0546875 -0.376381\nv 0.414062 -0.0546875 -0.377278\nv 0.421875 -0.0546875 -0.377452\nv 0.429688 -0.0546875 -0.377468\nv 0.4375 -0.0546875 -0.377204\nv 0.445312 -0.0546875 -0.377262\nv 0.453125 -0.0546875 -0.377706\nv 0.460938 -0.0546875 -0.378835\nv 0.46875 -0.0546875 -0.379726\nv 0.476562 -0.0546875 -0.380703\nv 0.484375 -0.0546875 -0.380878\nv 0.492188 -0.0546875 -0.379899\nv 0.5 -0.0546875 -0.376743\nv -0.304688 -0.046875 -0.375497\nv -0.296875 -0.046875 -0.377249\nv -0.289062 -0.046875 -0.377941\nv -0.28125 -0.046875 -0.378714\nv -0.273438 -0.046875 -0.378266\nv -0.265625 -0.046875 -0.378072\nv -0.257812 -0.046875 -0.378059\nv -0.25 -0.046875 -0.377741\nv -0.242188 -0.046875 -0.376717\nv -0.234375 -0.046875 -0.375198\nv 0.398438 -0.046875 -0.375558\nv 0.40625 -0.046875 -0.376731\nv 0.414062 -0.046875 -0.377524\nv 0.421875 -0.046875 -0.3777\nv 0.429688 -0.046875 -0.377598\nv 0.4375 -0.046875 -0.3774\nv 0.445312 -0.046875 -0.377621\nv 0.453125 -0.046875 -0.378042\nv 0.460938 -0.046875 -0.379064\nv 0.46875 -0.046875 -0.37975\nv 0.476562 -0.046875 -0.380615\nv 0.484375 -0.046875 -0.380711\nv 0.492188 -0.046875 -0.379293\nv 0.5 -0.046875 -0.375639\nv -0.304688 -0.0390625 -0.37525\nv -0.296875 -0.0390625 -0.377158\nv -0.289062 -0.0390625 -0.378227\nv -0.28125 -0.0390625 -0.379041\nv -0.273438 -0.0390625 -0.378772\nv -0.265625 -0.0390625 -0.37871\nv -0.257812 -0.0390625 -0.378792\nv -0.25 -0.0390625 -0.378479\nv -0.242188 -0.0390625 -0.377441\nv -0.234375 -0.0390625 -0.37567\nv 0.398438 -0.0390625 -0.376071\nv 0.40625 -0.0390625 -0.377014\nv 0.414062 -0.0390625 -0.377746\nv 0.421875 -0.0390625 -0.377983\nv 0.429688 -0.0390625 -0.377871\nv 0.4375 -0.0390625 -0.377667\nv 0.445312 -0.0390625 -0.378018\nv 0.453125 -0.0390625 -0.37826\nv 0.460938 -0.0390625 -0.379089\nv 0.46875 -0.0390625 -0.379463\nv 0.476562 -0.0390625 -0.380154\nv 0.484375 -0.0390625 -0.379829\nv 0.492188 -0.0390625 -0.378056\nv -0.296875 -0.03125 -0.376931\nv -0.289062 -0.03125 -0.37812\nv -0.28125 -0.03125 -0.379158\nv -0.273438 -0.03125 -0.379068\nv -0.265625 -0.03125 -0.379179\nv -0.257812 -0.03125 -0.379401\nv -0.25 -0.03125 -0.379147\nv -0.242188 -0.03125 -0.377905\nv -0.234375 -0.03125 -0.375866\nv 0.398438 -0.03125 -0.376361\nv 0.40625 -0.03125 -0.377297\nv 0.414062 -0.03125 -0.377804\nv 0.421875 -0.03125 -0.378213\nv 0.429688 -0.03125 -0.378227\nv 0.4375 -0.03125 -0.377873\nv 0.445312 -0.03125 -0.377959\nv 0.453125 -0.03125 -0.378154\nv 0.460938 -0.03125 -0.378587\nv 0.46875 -0.03125 -0.378643\nv 0.476562 -0.03125 -0.379048\nv 0.484375 -0.03125 -0.378884\nv 0.492188 -0.03125 -0.37692\nv -0.296875 -0.0234375 -0.376932\nv -0.289062 -0.0234375 -0.377948\nv -0.28125 -0.0234375 -0.378881\nv -0.273438 -0.0234375 -0.379232\nv -0.265625 -0.0234375 -0.379385\nv -0.257812 -0.0234375 -0.379562\nv -0.25 -0.0234375 -0.379643\nv -0.242188 -0.0234375 -0.378029\nv -0.234375 -0.0234375 -0.375774\nv 0.390625 -0.0234375 -0.375034\nv 0.398438 -0.0234375 -0.376451\nv 0.40625 -0.0234375 -0.377017\nv 0.414062 -0.0234375 -0.37736\nv 0.421875 -0.0234375 -0.377926\nv 0.429688 -0.0234375 -0.378002\nv 0.4375 -0.0234375 -0.377696\nv 0.445312 -0.0234375 -0.377363\nv 0.453125 -0.0234375 -0.377216\nv 0.460938 -0.0234375 -0.377503\nv 0.46875 -0.0234375 -0.377411\nv 0.476562 -0.0234375 -0.377778\nv 0.484375 -0.0234375 -0.377612\nv 0.492188 -0.0234375 -0.375831\nv -0.296875 -0.015625 -0.376771\nv -0.289062 -0.015625 -0.377924\nv -0.28125 -0.015625 -0.378478\nv -0.273438 -0.015625 -0.37859\nv -0.265625 -0.015625 -0.378929\nv -0.257812 -0.015625 -0.379481\nv -0.25 -0.015625 -0.379614\nv -0.242188 -0.015625 -0.377975\nv -0.234375 -0.015625 -0.375917\nv 0.398438 -0.015625 -0.375977\nv 0.40625 -0.015625 -0.376398\nv 0.414062 -0.015625 -0.376401\nv 0.421875 -0.015625 -0.377042\nv 0.429688 -0.015625 -0.37708\nv 0.4375 -0.015625 -0.376837\nv 0.445312 -0.015625 -0.376539\nv 0.453125 -0.015625 -0.37631\nv 0.460938 -0.015625 -0.376132\nv 0.46875 -0.015625 -0.376274\nv 0.476562 -0.015625 -0.376619\nv 0.484375 -0.015625 -0.376615\nv -0.296875 -0.0078125 -0.376797\nv -0.289062 -0.0078125 -0.378091\nv -0.28125 -0.0078125 -0.378569\nv -0.273438 -0.0078125 -0.378435\nv -0.265625 -0.0078125 -0.378479\nv -0.257812 -0.0078125 -0.378979\nv -0.25 -0.0078125 -0.378854\nv -0.242188 -0.0078125 -0.377395\nv -0.234375 -0.0078125 -0.375174\nv 0.398438 -0.0078125 -0.375218\nv 0.40625 -0.0078125 -0.37541\nv 0.414062 -0.0078125 -0.375361\nv 0.421875 -0.0078125 -0.375698\nv 0.429688 -0.0078125 -0.375978\nv 0.4375 -0.0078125 -0.375912\nv 0.445312 -0.0078125 -0.375695\nv 0.453125 -0.0078125 -0.375381\nv 0.460938 -0.0078125 -0.375013\nv 0.46875 -0.0078125 -0.375292\nv 0.476562 -0.0078125 -0.375666\nv 0.484375 -0.0078125 -0.375899\nv -0.296875 0 -0.377157\nv -0.289062 0 -0.378537\nv -0.28125 0 -0.379332\nv -0.273438 0 -0.379167\nv -0.265625 0 -0.379182\nv -0.257812 0 -0.379127\nv -0.25 0 -0.37836\nv -0.242188 0 -0.376909\nv -0.234375 0 -0.375031\nv 0.476562 0 -0.375316\nv 0.484375 0 -0.375835\nv -0.296875 0.0078125 -0.377608\nv -0.289062 0.0078125 -0.379\nv -0.28125 0.0078125 -0.379642\nv -0.273438 0.0078125 -0.379681\nv -0.265625 0.0078125 -0.37956\nv -0.257812 0.0078125 -0.379226\nv -0.25 0.0078125 -0.378193\nv -0.242188 0.0078125 -0.376943\nv 0.46875 0.0078125 -0.375347\nv 0.476562 0.0078125 -0.375625\nv 0.484375 0.0078125 -0.376183\nv -0.296875 0.015625 -0.377796\nv -0.289062 0.015625 -0.379307\nv -0.28125 0.015625 -0.379642\nv -0.273438 0.015625 -0.37978\nv -0.265625 0.015625 -0.379382\nv -0.257812 0.015625 -0.378982\nv -0.25 0.015625 -0.377937\nv -0.242188 0.015625 -0.376626\nv 0.476562 0.015625 -0.375801\nv 0.484375 0.015625 -0.376091\nv -0.304688 0.0234375 -0.375015\nv -0.296875 0.0234375 -0.377865\nv -0.289062 0.0234375 -0.379199\nv -0.28125 0.0234375 -0.379812\nv -0.273438 0.0234375 -0.379819\nv -0.265625 0.0234375 -0.379214\nv -0.257812 0.0234375 -0.378691\nv -0.25 0.0234375 -0.377721\nv -0.242188 0.0234375 -0.376618\nv 0.476562 0.0234375 -0.375507\nv 0.484375 0.0234375 -0.37535\nv -0.304688 0.03125 -0.375565\nv -0.296875 0.03125 -0.378328\nv -0.289062 0.03125 -0.379243\nv -0.28125 0.03125 -0.379772\nv -0.273438 0.03125 -0.379699\nv -0.265625 0.03125 -0.379381\nv -0.257812 0.03125 -0.378679\nv -0.25 0.03125 -0.377785\nv -0.242188 0.03125 -0.376717\nv -0.304688 0.0390625 -0.375918\nv -0.296875 0.0390625 -0.37869\nv -0.289062 0.0390625 -0.379436\nv -0.28125 0.0390625 -0.379827\nv -0.273438 0.0390625 -0.379494\nv -0.265625 0.0390625 -0.379286\nv -0.257812 0.0390625 -0.378746\nv -0.25 0.0390625 -0.377995\nv -0.242188 0.0390625 -0.377058\nv -0.234375 0.0390625 -0.37533\nv -0.304688 0.046875 -0.375878\nv -0.296875 0.046875 -0.378701\nv -0.289062 0.046875 -0.379514\nv -0.28125 0.046875 -0.37972\nv -0.273438 0.046875 -0.379313\nv -0.265625 0.046875 -0.378882\nv -0.257812 0.046875 -0.378491\nv -0.25 0.046875 -0.377868\nv -0.242188 0.046875 -0.377159\nv -0.234375 0.046875 -0.37583\nv -0.304688 0.0546875 -0.375106\nv -0.296875 0.0546875 -0.377814\nv -0.289062 0.0546875 -0.378884\nv -0.28125 0.0546875 -0.378985\nv -0.273438 0.0546875 -0.378503\nv -0.265625 0.0546875 -0.378043\nv -0.257812 0.0546875 -0.377752\nv -0.25 0.0546875 -0.377475\nv -0.242188 0.0546875 -0.377087\nv -0.234375 0.0546875 -0.376028\nv -0.296875 0.0625 -0.376684\nv -0.289062 0.0625 -0.378076\nv -0.28125 0.0625 -0.378135\nv -0.273438 0.0625 -0.377661\nv -0.265625 0.0625 -0.377232\nv -0.257812 0.0625 -0.377136\nv -0.25 0.0625 -0.37695\nv -0.242188 0.0625 -0.376599\nv -0.234375 0.0625 -0.375567\nv -0.296875 0.0703125 -0.375442\nv -0.289062 0.0703125 -0.376935\nv -0.28125 0.0703125 -0.376949\nv -0.273438 0.0703125 -0.376552\nv -0.265625 0.0703125 -0.376093\nv -0.257812 0.0703125 -0.37635\nv -0.25 0.0703125 -0.37635\nv -0.242188 0.0703125 -0.375937\nv -0.234375 0.0703125 -0.375131\nv -0.296875 0.078125 -0.375264\nv -0.289062 0.078125 -0.376592\nv -0.28125 0.078125 -0.376574\nv -0.273438 0.078125 -0.37609\nv -0.265625 0.078125 -0.375466\nv -0.257812 0.078125 -0.376025\nv -0.25 0.078125 -0.375963\nv -0.242188 0.078125 -0.375614\nv -0.296875 0.0859375 -0.376019\nv -0.289062 0.0859375 -0.377301\nv -0.28125 0.0859375 -0.377404\nv -0.273438 0.0859375 -0.376803\nv -0.265625 0.0859375 -0.375843\nv -0.257812 0.0859375 -0.3758\nv -0.25 0.0859375 -0.375585\nv -0.242188 0.0859375 -0.375245\nv -0.296875 0.09375 -0.376149\nv -0.289062 0.09375 -0.377335\nv -0.28125 0.09375 -0.377502\nv -0.273438 0.09375 -0.377094\nv -0.265625 0.09375 -0.376787\nv -0.257812 0.09375 -0.376718\nv -0.25 0.09375 -0.376046\nv -0.296875 0.101562 -0.376057\nv -0.289062 0.101562 -0.377049\nv -0.28125 0.101562 -0.377222\nv -0.273438 0.101562 -0.376888\nv -0.265625 0.101562 -0.376649\nv -0.257812 0.101562 -0.376611\nv -0.25 0.101562 -0.376007\nv -0.296875 0.109375 -0.375798\nv -0.289062 0.109375 -0.376759\nv -0.28125 0.109375 -0.376903\nv -0.273438 0.109375 -0.376662\nv -0.265625 0.109375 -0.376455\nv -0.257812 0.109375 -0.376494\nv -0.25 0.109375 -0.375906\nv -0.296875 0.117188 -0.375495\nv -0.289062 0.117188 -0.376392\nv -0.28125 0.117188 -0.376583\nv -0.273438 0.117188 -0.376441\nv -0.265625 0.117188 -0.376284\nv -0.257812 0.117188 -0.376393\nv -0.25 0.117188 -0.375903\nv -0.296875 0.125 -0.375178\nv -0.289062 0.125 -0.376165\nv -0.28125 0.125 -0.376367\nv -0.273438 0.125 -0.376274\nv -0.265625 0.125 -0.376038\nv -0.257812 0.125 -0.376207\nv -0.25 0.125 -0.375609\nv -0.289062 0.132812 -0.376001\nv -0.28125 0.132812 -0.376265\nv -0.273438 0.132812 -0.376269\nv -0.265625 0.132812 -0.375951\nv -0.257812 0.132812 -0.37612\nv -0.25 0.132812 -0.375367\nv -0.289062 0.140625 -0.375863\nv -0.28125 0.140625 -0.376188\nv -0.273438 0.140625 -0.376261\nv -0.265625 0.140625 -0.376024\nv -0.257812 0.140625 -0.376284\nv -0.25 0.140625 -0.375451\nv -0.289062 0.148438 -0.376023\nv -0.28125 0.148438 -0.376351\nv -0.273438 0.148438 -0.376402\nv -0.265625 0.148438 -0.376223\nv -0.257812 0.148438 -0.376352\nv -0.25 0.148438 -0.375478\nv -0.296875 0.15625 -0.375004\nv -0.289062 0.15625 -0.376183\nv -0.28125 0.15625 -0.376461\nv -0.273438 0.15625 -0.376568\nv -0.265625 0.15625 -0.376413\nv -0.257812 0.15625 -0.376323\nv -0.25 0.15625 -0.375463\nv -0.296875 0.164062 -0.375148\nv -0.289062 0.164062 -0.376268\nv -0.28125 0.164062 -0.37658\nv -0.273438 0.164062 -0.376675\nv -0.265625 0.164062 -0.376509\nv -0.257812 0.164062 -0.376356\nv -0.25 0.164062 -0.375449\nv -0.296875 0.171875 -0.375247\nv -0.289062 0.171875 -0.3763\nv -0.28125 0.171875 -0.376704\nv -0.273438 0.171875 -0.376797\nv -0.265625 0.171875 -0.376498\nv -0.257812 0.171875 -0.376263\nv -0.25 0.171875 -0.375333\nv -0.296875 0.179688 -0.375407\nv -0.289062 0.179688 -0.376444\nv -0.28125 0.179688 -0.376806\nv -0.273438 0.179688 -0.376923\nv -0.265625 0.179688 -0.376486\nv -0.257812 0.179688 -0.376129\nv -0.25 0.179688 -0.375162\nv -0.296875 0.1875 -0.375446\nv -0.289062 0.1875 -0.376459\nv -0.28125 0.1875 -0.376895\nv -0.273438 0.1875 -0.377161\nv -0.265625 0.1875 -0.376587\nv -0.257812 0.1875 -0.376154\nv -0.25 0.1875 -0.375096\nv -0.296875 0.195312 -0.375524\nv -0.289062 0.195312 -0.376563\nv -0.28125 0.195312 -0.377064\nv -0.273438 0.195312 -0.377337\nv -0.265625 0.195312 -0.376676\nv -0.257812 0.195312 -0.376219\nv -0.25 0.195312 -0.375176\nv -0.296875 0.203125 -0.375708\nv -0.289062 0.203125 -0.376778\nv -0.28125 0.203125 -0.377326\nv -0.273438 0.203125 -0.377522\nv -0.265625 0.203125 -0.376838\nv -0.257812 0.203125 -0.376364\nv -0.25 0.203125 -0.375293\nv -0.296875 0.210938 -0.375885\nv -0.289062 0.210938 -0.37703\nv -0.28125 0.210938 -0.377642\nv -0.273438 0.210938 -0.377707\nv -0.265625 0.210938 -0.37701\nv -0.257812 0.210938 -0.376611\nv -0.25 0.210938 -0.375429\nv -0.296875 0.21875 -0.375984\nv -0.289062 0.21875 -0.377234\nv -0.28125 0.21875 -0.377873\nv -0.273438 0.21875 -0.377897\nv -0.265625 0.21875 -0.377242\nv -0.257812 0.21875 -0.376878\nv -0.25 0.21875 -0.375655\nv -0.304688 0.226562 -0.375234\nv -0.296875 0.226562 -0.376257\nv -0.289062 0.226562 -0.377495\nv -0.28125 0.226562 -0.378108\nv -0.273438 0.226562 -0.377999\nv -0.265625 0.226562 -0.377369\nv -0.257812 0.226562 -0.377028\nv -0.25 0.226562 -0.375706\nv -0.304688 0.234375 -0.375367\nv -0.296875 0.234375 -0.376375\nv -0.289062 0.234375 -0.377596\nv -0.28125 0.234375 -0.377978\nv -0.273438 0.234375 -0.377895\nv -0.265625 0.234375 -0.377363\nv -0.257812 0.234375 -0.377086\nv -0.25 0.234375 -0.375745\nv -0.304688 0.242188 -0.375449\nv -0.296875 0.242188 -0.376378\nv -0.289062 0.242188 -0.377538\nv -0.28125 0.242188 -0.37774\nv -0.273438 0.242188 -0.377706\nv -0.265625 0.242188 -0.377266\nv -0.257812 0.242188 -0.376934\nv -0.25 0.242188 -0.375471\nv -0.304688 0.25 -0.375583\nv -0.296875 0.25 -0.376396\nv -0.289062 0.25 -0.377511\nv -0.28125 0.25 -0.377578\nv -0.273438 0.25 -0.377545\nv -0.265625 0.25 -0.377198\nv -0.257812 0.25 -0.376793\nv -0.25 0.25 -0.375109\nv -0.304688 0.257812 -0.375751\nv -0.296875 0.257812 -0.376565\nv -0.289062 0.257812 -0.37761\nv -0.28125 0.257812 -0.377517\nv -0.273438 0.257812 -0.377442\nv -0.265625 0.257812 -0.377241\nv -0.257812 0.257812 -0.37673\nv -0.304688 0.265625 -0.376074\nv -0.296875 0.265625 -0.376838\nv -0.289062 0.265625 -0.377759\nv -0.28125 0.265625 -0.377673\nv -0.273438 0.265625 -0.377475\nv -0.265625 0.265625 -0.377251\nv -0.257812 0.265625 -0.376692\nv -0.304688 0.273438 -0.376421\nv -0.296875 0.273438 -0.377255\nv -0.289062 0.273438 -0.378148\nv -0.28125 0.273438 -0.37798\nv -0.273438 0.273438 -0.377682\nv -0.265625 0.273438 -0.377458\nv -0.257812 0.273438 -0.376756\nv -0.304688 0.28125 -0.376823\nv -0.296875 0.28125 -0.377758\nv -0.289062 0.28125 -0.378566\nv -0.28125 0.28125 -0.378351\nv -0.273438 0.28125 -0.377988\nv -0.265625 0.28125 -0.377715\nv -0.257812 0.28125 -0.376862\nv -0.304688 0.289062 -0.377275\nv -0.296875 0.289062 -0.378255\nv -0.289062 0.289062 -0.378943\nv -0.28125 0.289062 -0.378653\nv -0.273438 0.289062 -0.378239\nv -0.265625 0.289062 -0.377959\nv -0.257812 0.289062 -0.377007\nv -0.3125 0.296875 -0.375155\nv -0.304688 0.296875 -0.377816\nv -0.296875 0.296875 -0.37879\nv -0.289062 0.296875 -0.379312\nv -0.28125 0.296875 -0.37881\nv -0.273438 0.296875 -0.378465\nv -0.265625 0.296875 -0.378189\nv -0.257812 0.296875 -0.377213\nv -0.3125 0.304688 -0.37561\nv -0.304688 0.304688 -0.378441\nv -0.296875 0.304688 -0.379317\nv -0.289062 0.304688 -0.379584\nv -0.28125 0.304688 -0.378981\nv -0.273438 0.304688 -0.378679\nv -0.265625 0.304688 -0.378378\nv -0.257812 0.304688 -0.37734\nv -0.3125 0.3125 -0.376195\nv -0.304688 0.3125 -0.378981\nv -0.296875 0.3125 -0.379691\nv -0.289062 0.3125 -0.379825\nv -0.28125 0.3125 -0.379124\nv -0.273438 0.3125 -0.378842\nv -0.265625 0.3125 -0.378518\nv -0.257812 0.3125 -0.377469\nv -0.3125 0.320312 -0.376402\nv -0.304688 0.320312 -0.379201\nv -0.296875 0.320312 -0.379953\nv -0.289062 0.320312 -0.380029\nv -0.28125 0.320312 -0.379348\nv -0.273438 0.320312 -0.379004\nv -0.265625 0.320312 -0.378609\nv -0.257812 0.320312 -0.377606\nv -0.3125 0.328125 -0.376413\nv -0.304688 0.328125 -0.379126\nv -0.296875 0.328125 -0.379874\nv -0.289062 0.328125 -0.379968\nv -0.28125 0.328125 -0.37933\nv -0.273438 0.328125 -0.379031\nv -0.265625 0.328125 -0.378509\nv -0.257812 0.328125 -0.377555\nv -0.3125 0.335938 -0.376388\nv -0.304688 0.335938 -0.378996\nv -0.296875 0.335938 -0.379709\nv -0.289062 0.335938 -0.379719\nv -0.28125 0.335938 -0.379145\nv -0.273438 0.335938 -0.378897\nv -0.265625 0.335938 -0.378213\nv -0.257812 0.335938 -0.377257\nv -0.3125 0.34375 -0.376468\nv -0.304688 0.34375 -0.378936\nv -0.296875 0.34375 -0.379555\nv -0.289062 0.34375 -0.379367\nv -0.28125 0.34375 -0.378967\nv -0.273438 0.34375 -0.378738\nv -0.265625 0.34375 -0.377909\nv -0.257812 0.34375 -0.376907\nv -0.3125 0.351562 -0.376836\nv -0.304688 0.351562 -0.379028\nv -0.296875 0.351562 -0.379517\nv -0.289062 0.351562 -0.379179\nv -0.28125 0.351562 -0.378913\nv -0.273438 0.351562 -0.378655\nv -0.265625 0.351562 -0.377757\nv -0.257812 0.351562 -0.37671\nv -0.3125 0.359375 -0.377229\nv -0.304688 0.359375 -0.379214\nv -0.296875 0.359375 -0.379548\nv -0.289062 0.359375 -0.379136\nv -0.28125 0.359375 -0.378986\nv -0.273438 0.359375 -0.3787\nv -0.265625 0.359375 -0.377786\nv -0.257812 0.359375 -0.376761\nv -0.3125 0.367188 -0.37754\nv -0.304688 0.367188 -0.379338\nv -0.296875 0.367188 -0.379589\nv -0.289062 0.367188 -0.379146\nv -0.28125 0.367188 -0.379085\nv -0.273438 0.367188 -0.378735\nv -0.265625 0.367188 -0.377808\nv -0.257812 0.367188 -0.376839\nv -0.3125 0.375 -0.377804\nv -0.304688 0.375 -0.379413\nv -0.296875 0.375 -0.379596\nv -0.289062 0.375 -0.379167\nv -0.28125 0.375 -0.379172\nv -0.273438 0.375 -0.378812\nv -0.265625 0.375 -0.377869\nv -0.257812 0.375 -0.376912\nv -0.3125 0.382812 -0.378002\nv -0.304688 0.382812 -0.379463\nv -0.296875 0.382812 -0.379487\nv -0.289062 0.382812 -0.379142\nv -0.28125 0.382812 -0.379228\nv -0.273438 0.382812 -0.378847\nv -0.265625 0.382812 -0.377987\nv -0.257812 0.382812 -0.377012\nv -0.3125 0.390625 -0.378183\nv -0.304688 0.390625 -0.379492\nv -0.296875 0.390625 -0.3794\nv -0.289062 0.390625 -0.379063\nv -0.28125 0.390625 -0.379188\nv -0.273438 0.390625 -0.378765\nv -0.265625 0.390625 -0.378003\nv -0.257812 0.390625 -0.377054\nv -0.3125 0.398438 -0.378445\nv -0.304688 0.398438 -0.379574\nv -0.296875 0.398438 -0.379321\nv -0.289062 0.398438 -0.378942\nv -0.28125 0.398438 -0.379128\nv -0.273438 0.398438 -0.378686\nv -0.265625 0.398438 -0.377943\nv -0.257812 0.398438 -0.376913\nv -0.3125 0.40625 -0.378754\nv -0.304688 0.40625 -0.379733\nv -0.296875 0.40625 -0.379257\nv -0.289062 0.40625 -0.378882\nv -0.28125 0.40625 -0.379094\nv -0.273438 0.40625 -0.378629\nv -0.265625 0.40625 -0.377871\nv -0.257812 0.40625 -0.376778\nv -0.320312 0.414062 -0.375515\nv -0.3125 0.414062 -0.37907\nv -0.304688 0.414062 -0.379824\nv -0.296875 0.414062 -0.37917\nv -0.289062 0.414062 -0.378845\nv -0.28125 0.414062 -0.379103\nv -0.273438 0.414062 -0.37863\nv -0.265625 0.414062 -0.377701\nv -0.257812 0.414062 -0.376885\nv -0.320312 0.421875 -0.376007\nv -0.3125 0.421875 -0.379342\nv -0.304688 0.421875 -0.379839\nv -0.296875 0.421875 -0.379099\nv -0.289062 0.421875 -0.378816\nv -0.28125 0.421875 -0.379121\nv -0.273438 0.421875 -0.378579\nv -0.265625 0.421875 -0.377695\nv -0.257812 0.421875 -0.377166\nv -0.320312 0.429688 -0.376525\nv -0.3125 0.429688 -0.379695\nv -0.304688 0.429688 -0.3799\nv -0.296875 0.429688 -0.379053\nv -0.289062 0.429688 -0.378823\nv -0.28125 0.429688 -0.379073\nv -0.273438 0.429688 -0.37847\nv -0.265625 0.429688 -0.377942\nv -0.257812 0.429688 -0.377358\nv -0.320312 0.4375 -0.377249\nv -0.3125 0.4375 -0.380183\nv -0.304688 0.4375 -0.380026\nv -0.296875 0.4375 -0.379094\nv -0.289062 0.4375 -0.378893\nv -0.28125 0.4375 -0.378956\nv -0.273438 0.4375 -0.378532\nv -0.265625 0.4375 -0.378169\nv -0.257812 0.4375 -0.377364\nv -0.320312 0.445312 -0.377971\nv -0.3125 0.445312 -0.380691\nv -0.304688 0.445312 -0.380173\nv -0.296875 0.445312 -0.379238\nv -0.289062 0.445312 -0.378956\nv -0.28125 0.445312 -0.378934\nv -0.273438 0.445312 -0.3789\nv -0.265625 0.445312 -0.37828\nv -0.257812 0.445312 -0.377379\nv -0.320312 0.453125 -0.378642\nv -0.3125 0.453125 -0.380894\nv -0.304688 0.453125 -0.380345\nv -0.296875 0.453125 -0.379375\nv -0.289062 0.453125 -0.3789\nv -0.28125 0.453125 -0.379068\nv -0.273438 0.453125 -0.379137\nv -0.265625 0.453125 -0.378322\nv -0.257812 0.453125 -0.377426\nv -0.320312 0.460938 -0.379313\nv -0.3125 0.460938 -0.380981\nv -0.304688 0.460938 -0.380503\nv -0.296875 0.460938 -0.379431\nv -0.289062 0.460938 -0.379052\nv -0.28125 0.460938 -0.379442\nv -0.273438 0.460938 -0.379284\nv -0.265625 0.460938 -0.378389\nv -0.257812 0.460938 -0.377438\nv -0.328125 0.46875 -0.375602\nv -0.320312 0.46875 -0.379883\nv -0.3125 0.46875 -0.381115\nv -0.304688 0.46875 -0.380483\nv -0.296875 0.46875 -0.379318\nv -0.289062 0.46875 -0.379341\nv -0.28125 0.46875 -0.379676\nv -0.273438 0.46875 -0.379428\nv -0.265625 0.46875 -0.378545\nv -0.257812 0.46875 -0.377528\nv -0.328125 0.476562 -0.376108\nv -0.320312 0.476562 -0.380388\nv -0.3125 0.476562 -0.381267\nv -0.304688 0.476562 -0.380434\nv -0.296875 0.476562 -0.379493\nv -0.289062 0.476562 -0.379711\nv -0.28125 0.476562 -0.379786\nv -0.273438 0.476562 -0.379556\nv -0.265625 0.476562 -0.378709\nv -0.257812 0.476562 -0.377605\nv -0.328125 0.484375 -0.376595\nv -0.320312 0.484375 -0.380803\nv -0.3125 0.484375 -0.381188\nv -0.304688 0.484375 -0.380385\nv -0.296875 0.484375 -0.379867\nv -0.289062 0.484375 -0.379993\nv -0.28125 0.484375 -0.379916\nv -0.273438 0.484375 -0.379692\nv -0.265625 0.484375 -0.378883\nv -0.257812 0.484375 -0.377673\nv -0.328125 0.492188 -0.377247\nv -0.320312 0.492188 -0.381283\nv -0.3125 0.492188 -0.381126\nv -0.304688 0.492188 -0.380538\nv -0.296875 0.492188 -0.380147\nv -0.289062 0.492188 -0.380142\nv -0.28125 0.492188 -0.380082\nv -0.273438 0.492188 -0.379865\nv -0.265625 0.492188 -0.379039\nv -0.257812 0.492188 -0.377749\nv -0.25 0.492188 -0.375002\nv -0.328125 0.5 -0.377919\nv -0.320312 0.5 -0.381465\nv -0.3125 0.5 -0.381305\nv -0.304688 0.5 -0.380847\nv -0.296875 0.5 -0.380338\nv -0.289062 0.5 -0.38023\nv -0.28125 0.5 -0.380178\nv -0.273438 0.5 -0.380003\nv -0.265625 0.5 -0.379179\nv -0.257812 0.5 -0.377869\nv -0.25 0.5 -0.37517\nv -0.328125 0.507812 -0.378559\nv -0.320312 0.507812 -0.381633\nv -0.3125 0.507812 -0.381797\nv -0.304688 0.507812 -0.381038\nv -0.296875 0.507812 -0.38042\nv -0.289062 0.507812 -0.380309\nv -0.28125 0.507812 -0.380258\nv -0.273438 0.507812 -0.380102\nv -0.265625 0.507812 -0.37926\nv -0.257812 0.507812 -0.377955\nv -0.25 0.507812 -0.375365\nv -0.328125 0.515625 -0.379119\nv -0.320312 0.523078 -0.382812\nv -0.320312 0.515625 -0.382148\nv -0.3125 0.515625 -0.382374\nv -0.304688 0.515625 -0.381141\nv -0.296875 0.515625 -0.380477\nv -0.289062 0.515625 -0.380361\nv -0.28125 0.515625 -0.380297\nv -0.273438 0.515625 -0.38016\nv -0.265625 0.515625 -0.379241\nv -0.257812 0.515625 -0.378012\nv -0.25 0.515625 -0.375578\nv -0.335938 0.523438 -0.375626\nv -0.320381 0.523438 -0.382812\nv -0.328125 0.523438 -0.379547\nv -0.31964 0.523438 -0.382812\nv -0.3125 0.523438 -0.382491\nv -0.304688 0.523438 -0.381177\nv -0.296875 0.523438 -0.380567\nv -0.289062 0.523438 -0.380423\nv -0.28125 0.523438 -0.380346\nv -0.273438 0.523438 -0.380177\nv -0.265625 0.523438 -0.379144\nv -0.257812 0.523438 -0.377985\nv -0.25 0.523438 -0.375477\nv -0.335938 0.53125 -0.376463\nv -0.321736 0.53125 -0.382812\nv -0.328125 0.53125 -0.380176\nv -0.314846 0.53125 -0.382812\nv -0.3125 0.53125 -0.382573\nv -0.304688 0.53125 -0.381258\nv -0.296875 0.53125 -0.38065\nv -0.289062 0.53125 -0.380329\nv -0.28125 0.53125 -0.380319\nv -0.273438 0.53125 -0.380059\nv -0.265625 0.53125 -0.378856\nv -0.257812 0.53125 -0.377845\nv -0.25 0.53125 -0.375301\nv -0.335938 0.539062 -0.377122\nv -0.322383 0.539062 -0.382812\nv -0.328125 0.539062 -0.380953\nv -0.313976 0.539062 -0.382812\nv -0.3125 0.539062 -0.382667\nv -0.304688 0.539062 -0.381271\nv -0.296875 0.539062 -0.38061\nv -0.289062 0.539062 -0.380205\nv -0.28125 0.539062 -0.380171\nv -0.273438 0.539062 -0.379775\nv -0.265625 0.539062 -0.37858\nv -0.257812 0.539062 -0.377627\nv -0.25 0.539062 -0.375114\nv -0.335938 0.546875 -0.377838\nv -0.323447 0.546875 -0.382812\nv -0.328125 0.546875 -0.381731\nv -0.313936 0.546875 -0.382812\nv -0.3125 0.546875 -0.382656\nv -0.304688 0.546875 -0.381118\nv -0.296875 0.546875 -0.380433\nv -0.289062 0.546875 -0.380054\nv -0.28125 0.546875 -0.379864\nv -0.273438 0.546875 -0.37961\nv -0.265625 0.546875 -0.378341\nv -0.257812 0.546875 -0.377371\nv -0.335938 0.554688 -0.378746\nv -0.323891 0.554688 -0.382812\nv -0.328125 0.554688 -0.382074\nv -0.31519 0.554688 -0.382812\nv -0.3125 0.554688 -0.382482\nv -0.304688 0.554688 -0.380802\nv -0.296875 0.554688 -0.380252\nv -0.289062 0.554688 -0.379824\nv -0.28125 0.554688 -0.379647\nv -0.273438 0.554688 -0.379518\nv -0.265625 0.554688 -0.378198\nv -0.257812 0.554688 -0.377119\nv -0.335938 0.5625 -0.379514\nv -0.324438 0.5625 -0.382812\nv -0.328125 0.5625 -0.382301\nv -0.316889 0.5625 -0.382812\nv -0.3125 0.5625 -0.382061\nv -0.304688 0.5625 -0.380462\nv -0.296875 0.5625 -0.38003\nv -0.289062 0.5625 -0.379536\nv -0.28125 0.5625 -0.379533\nv -0.273438 0.5625 -0.379452\nv -0.265625 0.5625 -0.37804\nv -0.257812 0.5625 -0.376833\nv -0.335938 0.570312 -0.380074\nv -0.323323 0.570312 -0.382812\nv -0.328125 0.570312 -0.382432\nv -0.319017 0.570312 -0.382812\nv -0.320312 0.574724 -0.382812\nv -0.3125 0.570312 -0.381574\nv -0.304688 0.570312 -0.380096\nv -0.296875 0.570312 -0.379716\nv -0.289062 0.570312 -0.379265\nv -0.28125 0.570312 -0.379561\nv -0.273438 0.570312 -0.379462\nv -0.265625 0.570312 -0.37787\nv -0.257812 0.570312 -0.376533\nv -0.335938 0.578125 -0.38037\nv -0.328125 0.578125 -0.382277\nv -0.320312 0.578125 -0.382623\nv -0.3125 0.578125 -0.381028\nv -0.304688 0.578125 -0.379669\nv -0.296875 0.578125 -0.379336\nv -0.289062 0.578125 -0.37913\nv -0.28125 0.578125 -0.37961\nv -0.273438 0.578125 -0.3794\nv -0.265625 0.578125 -0.377746\nv -0.257812 0.578125 -0.376219\nv -0.34375 0.585938 -0.375378\nv -0.335938 0.585938 -0.380515\nv -0.328125 0.585938 -0.381995\nv -0.320312 0.585938 -0.382123\nv -0.3125 0.585938 -0.38044\nv -0.304688 0.585938 -0.379252\nv -0.296875 0.585938 -0.378993\nv -0.289062 0.585938 -0.379131\nv -0.28125 0.585938 -0.379627\nv -0.273438 0.585938 -0.379247\nv -0.265625 0.585938 -0.377666\nv -0.257812 0.585938 -0.375943\nv -0.34375 0.59375 -0.376254\nv -0.335938 0.59375 -0.380532\nv -0.328125 0.59375 -0.381682\nv -0.320312 0.59375 -0.38165\nv -0.3125 0.59375 -0.379939\nv -0.304688 0.59375 -0.378837\nv -0.296875 0.59375 -0.378758\nv -0.289062 0.59375 -0.37915\nv -0.28125 0.59375 -0.379641\nv -0.273438 0.59375 -0.379069\nv -0.265625 0.59375 -0.377598\nv -0.257812 0.59375 -0.375792\nv -0.34375 0.601562 -0.376988\nv -0.335938 0.601562 -0.380539\nv -0.328125 0.601562 -0.381453\nv -0.320312 0.601562 -0.38127\nv -0.3125 0.601562 -0.379571\nv -0.304688 0.601562 -0.378596\nv -0.296875 0.601562 -0.378686\nv -0.289062 0.601562 -0.379186\nv -0.28125 0.601562 -0.379621\nv -0.273438 0.601562 -0.37888\nv -0.265625 0.601562 -0.377536\nv -0.257812 0.601562 -0.375522\nv -0.34375 0.609375 -0.377402\nv -0.335938 0.609375 -0.380334\nv -0.328125 0.609375 -0.381174\nv -0.320312 0.609375 -0.380859\nv -0.3125 0.609375 -0.379224\nv -0.304688 0.609375 -0.378581\nv -0.296875 0.609375 -0.378783\nv -0.289062 0.609375 -0.379322\nv -0.28125 0.609375 -0.379761\nv -0.273438 0.609375 -0.378874\nv -0.265625 0.609375 -0.377539\nv -0.257812 0.609375 -0.375337\nv -0.34375 0.617188 -0.377577\nv -0.335938 0.617188 -0.380056\nv -0.328125 0.617188 -0.380826\nv -0.320312 0.617188 -0.380237\nv -0.3125 0.617188 -0.378798\nv -0.304688 0.617188 -0.378589\nv -0.296875 0.617188 -0.378984\nv -0.289062 0.617188 -0.37959\nv -0.28125 0.617188 -0.380034\nv -0.273438 0.617188 -0.378895\nv -0.265625 0.617188 -0.377575\nv -0.34375 0.625 -0.377543\nv -0.335938 0.625 -0.379861\nv -0.328125 0.625 -0.380502\nv -0.320312 0.625 -0.379714\nv -0.3125 0.625 -0.378479\nv -0.304688 0.625 -0.378683\nv -0.296875 0.625 -0.379095\nv -0.289062 0.625 -0.379796\nv -0.28125 0.625 -0.380133\nv -0.273438 0.625 -0.378811\nv -0.265625 0.625 -0.37751\nv -0.34375 0.632812 -0.377059\nv -0.335938 0.632812 -0.379375\nv -0.328125 0.632812 -0.380074\nv -0.320312 0.632812 -0.379236\nv -0.3125 0.632812 -0.378374\nv -0.304688 0.632812 -0.378746\nv -0.296875 0.632812 -0.379308\nv -0.289062 0.632812 -0.38001\nv -0.28125 0.632812 -0.38012\nv -0.273438 0.632812 -0.37864\nv -0.265625 0.632812 -0.377314\nv -0.34375 0.640625 -0.376588\nv -0.335938 0.640625 -0.378728\nv -0.328125 0.640625 -0.379369\nv -0.320312 0.640625 -0.378717\nv -0.3125 0.640625 -0.378401\nv -0.304688 0.640625 -0.378921\nv -0.296875 0.640625 -0.379549\nv -0.289062 0.640625 -0.380259\nv -0.28125 0.640625 -0.380035\nv -0.273438 0.640625 -0.378499\nv -0.265625 0.640625 -0.376973\nv -0.34375 0.648438 -0.376092\nv -0.335938 0.648438 -0.378118\nv -0.328125 0.648438 -0.37871\nv -0.320312 0.648438 -0.378476\nv -0.3125 0.648438 -0.3785\nv -0.304688 0.648438 -0.379047\nv -0.296875 0.648438 -0.379751\nv -0.289062 0.648438 -0.380366\nv -0.28125 0.648438 -0.379866\nv -0.273438 0.648438 -0.378359\nv -0.265625 0.648438 -0.376418\nv -0.34375 0.65625 -0.375493\nv -0.335938 0.65625 -0.377476\nv -0.328125 0.65625 -0.378235\nv -0.320312 0.65625 -0.378651\nv -0.3125 0.65625 -0.378702\nv -0.304688 0.65625 -0.379122\nv -0.296875 0.65625 -0.379812\nv -0.289062 0.65625 -0.380317\nv -0.28125 0.65625 -0.379654\nv -0.273438 0.65625 -0.378157\nv -0.265625 0.65625 -0.375777\nv -0.335938 0.664062 -0.376849\nv -0.328125 0.664062 -0.378129\nv -0.320312 0.664062 -0.378908\nv -0.3125 0.664062 -0.378944\nv -0.304688 0.664062 -0.379184\nv -0.296875 0.664062 -0.379886\nv -0.289062 0.664062 -0.380365\nv -0.28125 0.664062 -0.37942\nv -0.273438 0.664062 -0.377861\nv -0.265625 0.664062 -0.375338\nv -0.335938 0.671875 -0.376556\nv -0.328125 0.671875 -0.378181\nv -0.320312 0.671875 -0.379175\nv -0.3125 0.671875 -0.379108\nv -0.304688 0.671875 -0.379224\nv -0.296875 0.671875 -0.379962\nv -0.289062 0.671875 -0.380434\nv -0.28125 0.671875 -0.37925\nv -0.273438 0.671875 -0.377612\nv -0.335938 0.679688 -0.376476\nv -0.328125 0.679688 -0.378406\nv -0.320312 0.679688 -0.379267\nv -0.3125 0.679688 -0.37908\nv -0.304688 0.679688 -0.379321\nv -0.296875 0.679688 -0.380062\nv -0.289062 0.679688 -0.380482\nv -0.28125 0.679688 -0.379151\nv -0.273438 0.679688 -0.377441\nv -0.335938 0.6875 -0.376423\nv -0.328125 0.6875 -0.378456\nv -0.320312 0.6875 -0.379249\nv -0.3125 0.6875 -0.378993\nv -0.304688 0.6875 -0.379295\nv -0.296875 0.6875 -0.380015\nv -0.289062 0.6875 -0.380496\nv -0.28125 0.6875 -0.379084\nv -0.273438 0.6875 -0.377331\nv -0.335938 0.695312 -0.376367\nv -0.328125 0.695312 -0.37837\nv -0.320312 0.695312 -0.379184\nv -0.3125 0.695312 -0.378876\nv -0.304688 0.695312 -0.379211\nv -0.296875 0.695312 -0.379904\nv -0.289062 0.695312 -0.380413\nv -0.28125 0.695312 -0.378972\nv -0.273438 0.695312 -0.377257\nv -0.335938 0.703125 -0.376434\nv -0.328125 0.703125 -0.378214\nv -0.320312 0.703125 -0.379095\nv -0.3125 0.703125 -0.378837\nv -0.304688 0.703125 -0.379248\nv -0.296875 0.703125 -0.379916\nv -0.289062 0.703125 -0.380329\nv -0.28125 0.703125 -0.378812\nv -0.273438 0.703125 -0.377017\nv -0.335938 0.710938 -0.376453\nv -0.328125 0.710938 -0.378175\nv -0.320312 0.710938 -0.379028\nv -0.3125 0.710938 -0.378914\nv -0.304688 0.710938 -0.379382\nv -0.296875 0.710938 -0.38008\nv -0.289062 0.710938 -0.380336\nv -0.28125 0.710938 -0.378744\nv -0.273438 0.710938 -0.376724\nv -0.335938 0.71875 -0.3765\nv -0.328125 0.71875 -0.378234\nv -0.320312 0.71875 -0.379061\nv -0.3125 0.71875 -0.379139\nv -0.304688 0.71875 -0.37965\nv -0.296875 0.71875 -0.380313\nv -0.289062 0.71875 -0.380436\nv -0.28125 0.71875 -0.378673\nv -0.273438 0.71875 -0.376527\nv -0.335938 0.726562 -0.376725\nv -0.328125 0.726562 -0.37832\nv -0.320312 0.726562 -0.37921\nv -0.3125 0.726562 -0.379524\nv -0.304688 0.726562 -0.380035\nv -0.296875 0.726562 -0.380783\nv -0.289062 0.726562 -0.380611\nv -0.28125 0.726562 -0.378728\nv -0.273438 0.726562 -0.376387\nv -0.335938 0.734375 -0.376901\nv -0.328125 0.734375 -0.378603\nv -0.320312 0.734375 -0.379684\nv -0.3125 0.734375 -0.380365\nv -0.304688 0.734375 -0.380796\nv -0.296875 0.734375 -0.381399\nv -0.289062 0.734375 -0.380818\nv -0.28125 0.734375 -0.378946\nv -0.273438 0.734375 -0.376854\nv -0.335938 0.742188 -0.377001\nv -0.328125 0.742188 -0.378873\nv -0.320312 0.742188 -0.380344\nv -0.3125 0.742188 -0.381086\nv -0.304688 0.742188 -0.381154\nv -0.296875 0.742188 -0.381284\nv -0.289062 0.742188 -0.380546\nv -0.28125 0.742188 -0.379384\nv -0.273438 0.742188 -0.377164\nv -0.335938 0.75 -0.376979\nv -0.328125 0.75 -0.37909\nv -0.320312 0.75 -0.380919\nv -0.3125 0.75 -0.381167\nv -0.304688 0.75 -0.381031\nv -0.296875 0.75 -0.380869\nv -0.289062 0.75 -0.380712\nv -0.28125 0.75 -0.380521\nv -0.273438 0.75 -0.375669\nv -0.335938 0.757812 -0.376868\nv -0.328125 0.757812 -0.379181\nv -0.320312 0.757812 -0.380642\nv -0.3125 0.757812 -0.381274\nv -0.304688 0.757812 -0.381389\nv -0.296875 0.757812 -0.38101\nv -0.289062 0.757812 -0.381361\nv -0.28125 0.757812 -0.381279\nv -0.335938 0.765625 -0.376984\nv -0.328125 0.765625 -0.379442\nv -0.320312 0.765625 -0.380688\nv -0.3125 0.765625 -0.381525\nv -0.304688 0.765625 -0.381543\nv -0.296875 0.765625 -0.381104\nv -0.289062 0.765625 -0.381973\nv -0.28125 0.765625 -0.380343\nv -0.335938 0.773438 -0.37746\nv -0.328125 0.773438 -0.379601\nv -0.320312 0.773438 -0.380801\nv -0.3125 0.773438 -0.381875\nv -0.304688 0.773438 -0.381605\nv -0.296875 0.773438 -0.381521\nv -0.289062 0.773438 -0.381916\nv -0.28125 0.773438 -0.378559\nv -0.335938 0.78125 -0.377274\nv -0.328125 0.78125 -0.379811\nv -0.320312 0.78125 -0.381057\nv -0.3125 0.78125 -0.381847\nv -0.304688 0.78125 -0.381246\nv -0.296875 0.78125 -0.382066\nv -0.289062 0.78125 -0.381509\nv -0.28125 0.78125 -0.376662\nv -0.335938 0.789062 -0.376731\nv -0.328125 0.789062 -0.379391\nv -0.320312 0.789062 -0.380799\nv -0.3125 0.789062 -0.38148\nv -0.304688 0.789062 -0.381138\nv -0.296875 0.789062 -0.381619\nv -0.289062 0.789062 -0.379818\nv -0.335938 0.796875 -0.375604\nv -0.328125 0.796875 -0.378665\nv -0.320312 0.796875 -0.380764\nv -0.3125 0.796875 -0.381176\nv -0.304688 0.796875 -0.381138\nv -0.296875 0.796875 -0.380758\nv -0.289062 0.796875 -0.377626\nv -0.328125 0.804688 -0.377743\nv -0.320312 0.804688 -0.380283\nv -0.3125 0.804688 -0.380921\nv -0.304688 0.804688 -0.381291\nv -0.296875 0.804688 -0.380159\nv -0.289062 0.804688 -0.375013\nv -0.328125 0.8125 -0.376825\nv -0.320312 0.8125 -0.379667\nv -0.3125 0.8125 -0.380537\nv -0.304688 0.8125 -0.380811\nv -0.296875 0.8125 -0.379585\nv -0.328125 0.820312 -0.376832\nv -0.320312 0.820312 -0.379604\nv -0.3125 0.820312 -0.380518\nv -0.304688 0.820312 -0.380557\nv -0.296875 0.820312 -0.37786\nv -0.328125 0.828125 -0.376892\nv -0.320312 0.828125 -0.379816\nv -0.3125 0.828125 -0.381041\nv -0.304688 0.828125 -0.380755\nv -0.296875 0.828125 -0.377802\nv -0.328125 0.835938 -0.376087\nv -0.320312 0.835938 -0.378639\nv -0.3125 0.835938 -0.379935\nv -0.304688 0.835938 -0.379388\nv -0.296875 0.835938 -0.3763\nv -0.320312 0.84375 -0.376758\nv -0.3125 0.84375 -0.378326\nv -0.304688 0.84375 -0.378252\nv -0.296875 0.84375 -0.3764\nv 0.4375 -0.734375 -0.367614\nv 0.445312 -0.734375 -0.36876\nv 0.453125 -0.726849 -0.375\nv 0.453125 -0.734375 -0.369248\nv 0.460938 -0.726568 -0.375\nv 0.460938 -0.734375 -0.368579\nv 0.46875 -0.734375 -0.367666\nv -0.328125 -0.726562 -0.369256\nv -0.320312 -0.726562 -0.369234\nv -0.3125 -0.726562 -0.368974\nv -0.304688 -0.726562 -0.369208\nv -0.296875 -0.726562 -0.369414\nv -0.289062 -0.726562 -0.369244\nv -0.28125 -0.726562 -0.367746\nv 0.414062 -0.718904 -0.375\nv 0.414062 -0.726562 -0.368535\nv 0.421875 -0.721102 -0.375\nv 0.421875 -0.726562 -0.37184\nv 0.429688 -0.722725 -0.375\nv 0.429688 -0.726562 -0.373377\nv 0.4375 -0.723742 -0.375\nv 0.4375 -0.726562 -0.373882\nv 0.451248 -0.726562 -0.375\nv 0.445312 -0.725031 -0.375\nv 0.445312 -0.726562 -0.374434\nv 0.461514 -0.726562 -0.375\nv 0.46875 -0.726464 -0.375\nv 0.46875 -0.726562 -0.374946\nv 0.476562 -0.725048 -0.375\nv 0.476562 -0.726562 -0.374237\nv 0.484375 -0.722733 -0.375\nv 0.484375 -0.726562 -0.373414\nv 0.492188 -0.718958 -0.375\nv 0.492188 -0.726562 -0.371528\nv -0.335938 -0.71875 -0.367812\nv -0.328125 -0.71875 -0.371176\nv -0.320312 -0.71875 -0.37165\nv -0.3125 -0.71875 -0.371999\nv -0.304688 -0.71875 -0.372502\nv -0.296875 -0.71875 -0.372607\nv -0.289062 -0.71875 -0.372169\nv -0.28125 -0.71875 -0.370924\nv -0.273438 -0.71875 -0.368883\nv 0.413817 -0.71875 -0.375\nv 0.40625 -0.711174 -0.375\nv 0.40625 -0.71875 -0.370631\nv 0.492331 -0.71875 -0.375\nv 0.5 -0.71875 -0.369947\nv -0.335938 -0.710938 -0.369063\nv -0.328125 -0.710938 -0.372238\nv -0.320312 -0.710938 -0.372762\nv -0.3125 -0.710938 -0.373331\nv -0.304688 -0.710938 -0.37412\nv -0.296875 -0.710938 -0.374018\nv -0.289062 -0.710938 -0.373629\nv -0.28125 -0.710938 -0.372772\nv -0.273438 -0.710938 -0.371929\nv -0.265625 -0.710938 -0.370431\nv -0.257812 -0.710938 -0.367925\nv 0.406068 -0.710938 -0.375\nv 0.398438 -0.710938 -0.370143\nv 0.493503 -0.710938 -0.375\nv 0.5 -0.710938 -0.370536\nv -0.335938 -0.703125 -0.368859\nv -0.328125 -0.703125 -0.372308\nv -0.320312 -0.703125 -0.373492\nv -0.3125 -0.703125 -0.374239\nv -0.304688 -0.698027 -0.375\nv -0.304688 -0.703125 -0.37474\nv -0.296875 -0.703125 -0.37457\nv -0.289062 -0.69676 -0.375\nv -0.289062 -0.703125 -0.37452\nv -0.28125 -0.703125 -0.373695\nv -0.273438 -0.703125 -0.373237\nv -0.265625 -0.703125 -0.372331\nv -0.257812 -0.703125 -0.371496\nv -0.25 -0.703125 -0.369399\nv 0.390625 -0.703125 -0.36754\nv 0.402871 -0.703125 -0.375\nv 0.398438 -0.703125 -0.372722\nv 0.494118 -0.703125 -0.375\nv 0.5 -0.703125 -0.371009\nv -0.335938 -0.695312 -0.368189\nv -0.328125 -0.695312 -0.372146\nv -0.320312 -0.695312 -0.373792\nv -0.309882 -0.695312 -0.375\nv -0.3125 -0.695312 -0.374922\nv -0.297835 -0.695312 -0.375\nv -0.304688 -0.688156 -0.375\nv -0.295827 -0.695312 -0.375\nv -0.296875 -0.695312 -0.374983\nv -0.287492 -0.695312 -0.375\nv -0.28125 -0.695312 -0.374606\nv -0.273438 -0.695312 -0.374336\nv -0.265625 -0.695312 -0.373519\nv -0.257812 -0.695312 -0.372851\nv -0.25 -0.695312 -0.371594\nv -0.242188 -0.695312 -0.368718\nv 0.390625 -0.695312 -0.369227\nv 0.399619 -0.695312 -0.375\nv 0.398438 -0.695312 -0.374413\nv 0.494233 -0.695312 -0.375\nv 0.5 -0.695312 -0.37109\nv -0.328125 -0.6875 -0.371476\nv -0.320312 -0.6875 -0.373455\nv -0.3125 -0.6875 -0.374693\nv -0.304688 -0.6875 -0.374988\nv -0.294519 -0.6875 -0.375\nv -0.296875 -0.6875 -0.374956\nv -0.286925 -0.6875 -0.375\nv -0.28125 -0.6875 -0.374749\nv -0.273438 -0.6875 -0.374497\nv -0.265625 -0.6875 -0.373716\nv -0.257812 -0.6875 -0.373024\nv -0.25 -0.6875 -0.371837\nv -0.242188 -0.6875 -0.369652\nv 0.390625 -0.6875 -0.369801\nv 0.399406 -0.6875 -0.375\nv 0.398438 -0.6875 -0.374553\nv 0.493612 -0.6875 -0.375\nv 0.5 -0.6875 -0.371003\nv -0.328125 -0.679688 -0.370839\nv -0.320312 -0.679688 -0.372947\nv -0.3125 -0.679688 -0.374471\nv -0.304688 -0.679688 -0.374819\nv -0.295889 -0.679688 -0.375\nv -0.296875 -0.674262 -0.375\nv -0.296875 -0.679688 -0.374969\nv -0.283878 -0.679688 -0.375\nv -0.28125 -0.679688 -0.374899\nv -0.273438 -0.679688 -0.374674\nv -0.265625 -0.679688 -0.373989\nv -0.257812 -0.679688 -0.373288\nv -0.25 -0.679688 -0.372197\nv -0.242188 -0.679688 -0.370095\nv 0.390625 -0.679688 -0.370157\nv 0.399128 -0.679688 -0.375\nv 0.398438 -0.679688 -0.374689\nv 0.493797 -0.679688 -0.375\nv 0.5 -0.679688 -0.371323\nv -0.328125 -0.671875 -0.370408\nv -0.320312 -0.671875 -0.372672\nv -0.3125 -0.671875 -0.37423\nv -0.297232 -0.671875 -0.375\nv -0.304688 -0.671875 -0.374686\nv -0.282308 -0.671875 -0.375\nv -0.28125 -0.670493 -0.375\nv -0.28125 -0.671875 -0.374956\nv -0.273438 -0.668372 -0.375\nv -0.273438 -0.671875 -0.374847\nv -0.265625 -0.671875 -0.37435\nv -0.257812 -0.671875 -0.373541\nv -0.25 -0.671875 -0.372597\nv -0.242188 -0.671875 -0.370498\nv 0.390625 -0.671875 -0.370233\nv 0.398569 -0.671875 -0.375\nv 0.398438 -0.666061 -0.375\nv 0.398438 -0.671875 -0.374944\nv 0.494508 -0.671875 -0.375\nv 0.5 -0.671875 -0.371684\nv -0.328125 -0.664062 -0.369923\nv -0.320312 -0.664062 -0.37248\nv -0.3125 -0.664062 -0.37398\nv -0.296938 -0.664062 -0.375\nv -0.304688 -0.664062 -0.374434\nv -0.296875 -0.663722 -0.375\nv -0.269616 -0.664062 -0.375\nv -0.265625 -0.660769 -0.375\nv -0.265625 -0.664062 -0.374796\nv -0.257812 -0.664062 -0.374013\nv -0.25 -0.664062 -0.373053\nv -0.242188 -0.664062 -0.370986\nv -0.234375 -0.664062 -0.367741\nv 0.398405 -0.664062 -0.375\nv 0.390625 -0.664062 -0.370142\nv 0.495311 -0.664062 -0.375\nv 0.5 -0.664062 -0.372087\nv -0.328125 -0.65625 -0.369483\nv -0.320312 -0.65625 -0.372213\nv -0.3125 -0.65625 -0.373733\nv -0.304688 -0.65625 -0.374256\nv -0.295675 -0.65625 -0.375\nv -0.296875 -0.65625 -0.374902\nv -0.262665 -0.65625 -0.375\nv -0.257812 -0.649743 -0.375\nv -0.257812 -0.65625 -0.374513\nv -0.25 -0.65625 -0.373611\nv -0.242188 -0.65625 -0.371685\nv -0.234375 -0.65625 -0.368688\nv 0.398427 -0.65625 -0.375\nv 0.390625 -0.65625 -0.370011\nv 0.398438 -0.652288 -0.375\nv 0.496189 -0.65625 -0.375\nv 0.5 -0.65625 -0.372581\nv -0.328125 -0.648438 -0.369228\nv -0.320312 -0.648438 -0.372071\nv -0.3125 -0.648438 -0.37353\nv -0.304688 -0.648438 -0.37418\nv -0.295451 -0.648438 -0.375\nv -0.296875 -0.648438 -0.374866\nv -0.256843 -0.648438 -0.375\nv -0.25 -0.648438 -0.37424\nv -0.242188 -0.648438 -0.372453\nv -0.234375 -0.648438 -0.36966\nv 0.390625 -0.648438 -0.369957\nv 0.398451 -0.648438 -0.375\nv 0.398438 -0.647856 -0.375\nv 0.398438 -0.648438 -0.374994\nv 0.497262 -0.648438 -0.375\nv 0.5 -0.648438 -0.37324\nv -0.328125 -0.640625 -0.368956\nv -0.320312 -0.640625 -0.372173\nv -0.3125 -0.640625 -0.373425\nv -0.304688 -0.640625 -0.374208\nv -0.295962 -0.640625 -0.375\nv -0.296875 -0.638048 -0.375\nv -0.296875 -0.640625 -0.374907\nv -0.251028 -0.640625 -0.375\nv -0.25 -0.638803 -0.375\nv -0.25 -0.640625 -0.374886\nv -0.242188 -0.640625 -0.373186\nv -0.234375 -0.640625 -0.370401\nv 0.398305 -0.640625 -0.375\nv 0.390625 -0.640625 -0.370053\nv 0.498798 -0.640625 -0.375\nv 0.5 -0.633034 -0.375\nv 0.5 -0.640625 -0.374226\nv -0.328125 -0.632812 -0.368848\nv -0.320312 -0.632812 -0.37249\nv -0.3125 -0.632812 -0.373622\nv -0.298822 -0.632812 -0.375\nv -0.304688 -0.632812 -0.374373\nv -0.248108 -0.632812 -0.375\nv -0.242188 -0.632812 -0.373687\nv -0.234375 -0.632812 -0.370849\nv 0.398208 -0.632812 -0.375\nv 0.390625 -0.632812 -0.3702\nv 0.500029 -0.632812 -0.375\nv -0.328125 -0.625 -0.368522\nv -0.320312 -0.625 -0.3728\nv -0.3125 -0.625 -0.373927\nv -0.300985 -0.625 -0.375\nv -0.304688 -0.625 -0.37463\nv -0.246447 -0.625 -0.375\nv -0.242188 -0.625 -0.374115\nv -0.234375 -0.625 -0.37117\nv 0.398174 -0.625 -0.375\nv 0.390625 -0.625 -0.370318\nv 0.500404 -0.625 -0.375\nv -0.328125 -0.617188 -0.368159\nv -0.320312 -0.617188 -0.373099\nv -0.3125 -0.617188 -0.374321\nv -0.3037 -0.617188 -0.375\nv -0.304688 -0.615079 -0.375\nv -0.304688 -0.617188 -0.374905\nv -0.245395 -0.617188 -0.375\nv -0.242188 -0.617188 -0.374327\nv -0.234375 -0.617188 -0.371389\nv 0.398023 -0.617188 -0.375\nv 0.390625 -0.617188 -0.370366\nv 0.500733 -0.617188 -0.375\nv -0.328125 -0.609375 -0.368403\nv -0.320312 -0.609375 -0.373447\nv -0.308227 -0.609375 -0.375\nv -0.3125 -0.609375 -0.374662\nv -0.244514 -0.609375 -0.375\nv -0.242188 -0.609375 -0.374511\nv -0.234375 -0.609375 -0.371524\nv -0.226562 -0.609375 -0.367391\nv 0.397936 -0.609375 -0.375\nv 0.390625 -0.609375 -0.370202\nv 0.500715 -0.609375 -0.375\nv -0.328125 -0.601562 -0.368698\nv -0.320312 -0.601562 -0.373845\nv -0.312109 -0.601562 -0.375\nv -0.3125 -0.599742 -0.375\nv -0.3125 -0.601562 -0.374972\nv -0.24442 -0.601562 -0.375\nv -0.242188 -0.601562 -0.374519\nv -0.234375 -0.601562 -0.371523\nv -0.226562 -0.601562 -0.367507\nv 0.398195 -0.601562 -0.375\nv 0.390625 -0.601562 -0.369862\nv 0.398438 -0.598212 -0.375\nv 0.500269 -0.601562 -0.375\nv 0.5 -0.599231 -0.375\nv -0.328125 -0.59375 -0.36842\nv -0.313276 -0.59375 -0.375\nv -0.320312 -0.59375 -0.374005\nv -0.245318 -0.59375 -0.375\nv -0.242188 -0.59375 -0.37434\nv -0.234375 -0.59375 -0.371294\nv -0.226562 -0.59375 -0.367382\nv 0.390625 -0.59375 -0.369609\nv 0.398812 -0.59375 -0.375\nv 0.398438 -0.59375 -0.374798\nv 0.498884 -0.59375 -0.375\nv 0.5 -0.59375 -0.374014\nv -0.328125 -0.585938 -0.368292\nv -0.313758 -0.585938 -0.375\nv -0.320312 -0.585938 -0.374109\nv -0.247029 -0.585938 -0.375\nv -0.242188 -0.585938 -0.374006\nv -0.234375 -0.585938 -0.370995\nv 0.390625 -0.585938 -0.369117\nv 0.399985 -0.585938 -0.375\nv 0.398438 -0.585938 -0.374188\nv 0.497123 -0.585938 -0.375\nv 0.5 -0.585938 -0.372183\nv -0.328125 -0.578125 -0.368161\nv -0.313945 -0.578125 -0.375\nv -0.320312 -0.578125 -0.374181\nv -0.248785 -0.578125 -0.375\nv -0.25 -0.572519 -0.375\nv -0.242188 -0.578125 -0.373658\nv -0.234375 -0.578125 -0.370698\nv 0.390625 -0.578125 -0.368653\nv 0.400916 -0.578125 -0.375\nv 0.398438 -0.578125 -0.373732\nv 0.495968 -0.578125 -0.375\nv 0.5 -0.578125 -0.37069\nv -0.328125 -0.570312 -0.36781\nv -0.312659 -0.570312 -0.375\nv -0.320312 -0.570312 -0.374075\nv -0.3125 -0.569208 -0.375\nv -0.250706 -0.570312 -0.375\nv -0.25 -0.570312 -0.374918\nv -0.242188 -0.570312 -0.373448\nv -0.234375 -0.570312 -0.370467\nv 0.390625 -0.570312 -0.368261\nv 0.40186 -0.570312 -0.375\nv 0.398438 -0.570312 -0.3733\nv 0.495315 -0.570312 -0.375\nv 0.5 -0.570312 -0.369842\nv -0.328125 -0.5625 -0.367621\nv -0.320312 -0.5625 -0.373945\nv -0.311275 -0.5625 -0.375\nv -0.3125 -0.5625 -0.374909\nv -0.251944 -0.5625 -0.375\nv -0.25 -0.5625 -0.374761\nv -0.242188 -0.5625 -0.373281\nv -0.234375 -0.5625 -0.370388\nv 0.390625 -0.5625 -0.368031\nv 0.402827 -0.5625 -0.375\nv 0.398438 -0.5625 -0.372846\nv 0.494774 -0.5625 -0.375\nv 0.5 -0.5625 -0.369413\nv -0.328125 -0.554688 -0.367574\nv -0.320312 -0.554688 -0.373976\nv -0.311128 -0.554688 -0.375\nv -0.3125 -0.554688 -0.374896\nv -0.252169 -0.554688 -0.375\nv -0.25 -0.554688 -0.374716\nv -0.242188 -0.554688 -0.373154\nv -0.234375 -0.554688 -0.370426\nv 0.390625 -0.554688 -0.367913\nv 0.403326 -0.554688 -0.375\nv 0.398438 -0.554688 -0.372576\nv 0.494578 -0.554688 -0.375\nv 0.5 -0.554688 -0.369238\nv -0.328125 -0.546875 -0.367389\nv -0.320312 -0.546875 -0.373976\nv -0.310414 -0.546875 -0.375\nv -0.3125 -0.546875 -0.374851\nv -0.251047 -0.546875 -0.375\nv -0.25 -0.542494 -0.375\nv -0.25 -0.546875 -0.374868\nv -0.242188 -0.546875 -0.373376\nv -0.234375 -0.546875 -0.371056\nv -0.226562 -0.546875 -0.368264\nv 0.273438 -0.546875 -0.36752\nv 0.28125 -0.546875 -0.367726\nv 0.289062 -0.546875 -0.367343\nv 0.304688 -0.546875 -0.367354\nv 0.3125 -0.546875 -0.367258\nv 0.320312 -0.546875 -0.367561\nv 0.328125 -0.546875 -0.367888\nv 0.335938 -0.546875 -0.367732\nv 0.34375 -0.546875 -0.367737\nv 0.390625 -0.546875 -0.368539\nv 0.403527 -0.546875 -0.375\nv 0.398438 -0.546875 -0.372641\nv 0.494469 -0.546875 -0.375\nv 0.5 -0.546875 -0.369233\nv -0.328125 -0.539062 -0.367642\nv -0.320312 -0.539062 -0.374185\nv -0.311097 -0.539062 -0.375\nv -0.3125 -0.535061 -0.375\nv -0.3125 -0.539062 -0.374917\nv -0.249298 -0.539062 -0.375\nv -0.242188 -0.539062 -0.373868\nv -0.234375 -0.539062 -0.37166\nv -0.226562 -0.539062 -0.369317\nv -0.21875 -0.539062 -0.367912\nv -0.179688 -0.539062 -0.367486\nv -0.171875 -0.539062 -0.367946\nv -0.164062 -0.539062 -0.368446\nv -0.15625 -0.539062 -0.36875\nv -0.148438 -0.539062 -0.36889\nv -0.140625 -0.539062 -0.369109\nv -0.132812 -0.539062 -0.36809\nv -0.125 -0.539062 -0.367506\nv -0.117188 -0.539062 -0.368442\nv -0.109375 -0.539062 -0.369377\nv -0.101562 -0.539062 -0.370332\nv -0.09375 -0.539062 -0.370914\nv -0.0859375 -0.539062 -0.371061\nv -0.078125 -0.539062 -0.370865\nv -0.0703125 -0.539062 -0.370574\nv -0.0625 -0.539062 -0.370054\nv -0.0546875 -0.539062 -0.36951\nv -0.046875 -0.539062 -0.369329\nv -0.0390625 -0.539062 -0.369248\nv -0.03125 -0.539062 -0.369133\nv -0.0234375 -0.539062 -0.36893\nv -0.015625 -0.539062 -0.368665\nv -0.0078125 -0.539062 -0.368538\nv 0 -0.539062 -0.368681\nv 0.0078125 -0.539062 -0.368552\nv 0.015625 -0.539062 -0.368453\nv 0.0234375 -0.539062 -0.368231\nv 0.03125 -0.539062 -0.368172\nv 0.0390625 -0.539062 -0.368032\nv 0.046875 -0.539062 -0.367871\nv 0.0546875 -0.539062 -0.367748\nv 0.0625 -0.539062 -0.367581\nv 0.0703125 -0.539062 -0.367269\nv 0.164062 -0.539062 -0.367317\nv 0.171875 -0.539062 -0.36759\nv 0.179688 -0.539062 -0.367887\nv 0.1875 -0.539062 -0.368378\nv 0.195312 -0.539062 -0.368831\nv 0.203125 -0.539062 -0.369228\nv 0.210938 -0.539062 -0.369548\nv 0.21875 -0.539062 -0.369682\nv 0.226562 -0.539062 -0.369755\nv 0.234375 -0.539062 -0.369912\nv 0.242188 -0.539062 -0.369926\nv 0.25 -0.539062 -0.369965\nv 0.257812 -0.539062 -0.370147\nv 0.265625 -0.539062 -0.370467\nv 0.273438 -0.539062 -0.370944\nv 0.28125 -0.539062 -0.370841\nv 0.289062 -0.539062 -0.370531\nv 0.296875 -0.539062 -0.370793\nv 0.304688 -0.539062 -0.370719\nv 0.3125 -0.539062 -0.370473\nv 0.320312 -0.539062 -0.370522\nv 0.328125 -0.539062 -0.370891\nv 0.335938 -0.539062 -0.371162\nv 0.34375 -0.539062 -0.371087\nv 0.351562 -0.539062 -0.370193\nv 0.359375 -0.539062 -0.368909\nv 0.367188 -0.539062 -0.367381\nv 0.390625 -0.539062 -0.369494\nv 0.402777 -0.539062 -0.375\nv 0.398438 -0.539062 -0.373204\nv 0.494491 -0.539062 -0.375\nv 0.5 -0.539062 -0.36902\nv -0.328125 -0.53125 -0.368132\nv -0.314048 -0.53125 -0.375\nv -0.320312 -0.524297 -0.375\nv -0.320312 -0.53125 -0.374543\nv -0.24646 -0.53125 -0.375\nv -0.242188 -0.53125 -0.374284\nv -0.234375 -0.53125 -0.372069\nv -0.226562 -0.53125 -0.370046\nv -0.21875 -0.53125 -0.369111\nv -0.210938 -0.53125 -0.368423\nv -0.203125 -0.53125 -0.36859\nv -0.195312 -0.53125 -0.368864\nv -0.1875 -0.53125 -0.369426\nv -0.179688 -0.53125 -0.370148\nv -0.171875 -0.53125 -0.370661\nv -0.164062 -0.53125 -0.371254\nv -0.15625 -0.53125 -0.37153\nv -0.148438 -0.53125 -0.37171\nv -0.140625 -0.53125 -0.371955\nv -0.132812 -0.53125 -0.371318\nv -0.125 -0.53125 -0.370847\nv -0.117188 -0.53125 -0.371803\nv -0.109375 -0.525974 -0.375\nv -0.109375 -0.53125 -0.372905\nv -0.101562 -0.528376 -0.375\nv -0.101562 -0.53125 -0.373902\nv -0.09375 -0.529154 -0.375\nv -0.09375 -0.53125 -0.374239\nv -0.0859375 -0.529232 -0.375\nv -0.0859375 -0.53125 -0.374294\nv -0.078125 -0.529002 -0.375\nv -0.078125 -0.53125 -0.374164\nv -0.0703125 -0.528608 -0.375\nv -0.0703125 -0.53125 -0.373953\nv -0.0625 -0.52855 -0.375\nv -0.0625 -0.53125 -0.373895\nv -0.0546875 -0.528285 -0.375\nv -0.0546875 -0.53125 -0.3737\nv -0.046875 -0.527569 -0.375\nv -0.046875 -0.53125 -0.373189\nv -0.0390625 -0.527576 -0.375\nv -0.0390625 -0.53125 -0.373225\nv -0.03125 -0.527776 -0.375\nv -0.03125 -0.53125 -0.37344\nv -0.0234375 -0.527665 -0.375\nv -0.0234375 -0.53125 -0.373344\nv -0.015625 -0.527131 -0.375\nv -0.015625 -0.53125 -0.37307\nv -0.0078125 -0.526698 -0.375\nv -0.0078125 -0.53125 -0.372876\nv 0 -0.52668 -0.375\nv 0 -0.53125 -0.372909\nv 0.0078125 -0.526095 -0.375\nv 0.0078125 -0.53125 -0.372706\nv 0.015625 -0.525296 -0.375\nv 0.015625 -0.53125 -0.372466\nv 0.0234375 -0.524303 -0.375\nv 0.0234375 -0.53125 -0.372174\nv 0.03125 -0.52367 -0.375\nv 0.03125 -0.53125 -0.371988\nv 0.0390625 -0.53125 -0.371776\nv 0.046875 -0.53125 -0.371519\nv 0.0546875 -0.53125 -0.371335\nv 0.0625 -0.53125 -0.371122\nv 0.0703125 -0.53125 -0.370854\nv 0.078125 -0.53125 -0.370504\nv 0.0859375 -0.53125 -0.370185\nv 0.09375 -0.53125 -0.36982\nv 0.101562 -0.53125 -0.369678\nv 0.109375 -0.53125 -0.369662\nv 0.117188 -0.53125 -0.369763\nv 0.125 -0.53125 -0.369768\nv 0.132812 -0.53125 -0.369776\nv 0.140625 -0.53125 -0.369856\nv 0.148438 -0.53125 -0.370018\nv 0.15625 -0.53125 -0.370455\nv 0.164062 -0.53125 -0.370664\nv 0.171875 -0.53125 -0.370812\nv 0.179688 -0.53125 -0.371087\nv 0.1875 -0.53125 -0.371826\nv 0.195312 -0.523477 -0.375\nv 0.195312 -0.53125 -0.372314\nv 0.203125 -0.524488 -0.375\nv 0.203125 -0.53125 -0.372552\nv 0.210938 -0.524094 -0.375\nv 0.210938 -0.53125 -0.372622\nv 0.21875 -0.52397 -0.375\nv 0.21875 -0.53125 -0.372703\nv 0.226562 -0.524268 -0.375\nv 0.226562 -0.53125 -0.372621\nv 0.234375 -0.524513 -0.375\nv 0.234375 -0.53125 -0.372816\nv 0.242188 -0.524054 -0.375\nv 0.242188 -0.53125 -0.372744\nv 0.25 -0.523852 -0.375\nv 0.25 -0.53125 -0.372748\nv 0.257812 -0.523868 -0.375\nv 0.257812 -0.53125 -0.372783\nv 0.265625 -0.524094 -0.375\nv 0.265625 -0.53125 -0.37302\nv 0.273438 -0.523555 -0.375\nv 0.273438 -0.53125 -0.373289\nv 0.28125 -0.525374 -0.375\nv 0.28125 -0.53125 -0.373263\nv 0.289062 -0.52567 -0.375\nv 0.289062 -0.53125 -0.373435\nv 0.296875 -0.525745 -0.375\nv 0.296875 -0.53125 -0.373477\nv 0.304688 -0.525964 -0.375\nv 0.304688 -0.53125 -0.373449\nv 0.3125 -0.525859 -0.375\nv 0.3125 -0.53125 -0.373359\nv 0.320312 -0.526152 -0.375\nv 0.320312 -0.53125 -0.373398\nv 0.328125 -0.527627 -0.375\nv 0.328125 -0.53125 -0.373821\nv 0.335938 -0.528426 -0.375\nv 0.335938 -0.53125 -0.374098\nv 0.34375 -0.529011 -0.375\nv 0.34375 -0.53125 -0.374266\nv 0.351562 -0.525966 -0.375\nv 0.351562 -0.53125 -0.373082\nv 0.359375 -0.53125 -0.371732\nv 0.367188 -0.53125 -0.370319\nv 0.375 -0.53125 -0.369068\nv 0.382812 -0.53125 -0.369491\nv 0.390625 -0.53125 -0.371382\nv 0.401114 -0.53125 -0.375\nv 0.398438 -0.52444 -0.375\nv 0.398438 -0.53125 -0.373977\nv 0.494732 -0.53125 -0.375\nv 0.5 -0.53125 -0.369453\nv -0.320442 -0.523438 -0.375\nv -0.328125 -0.523438 -0.368762\nv -0.243826 -0.523438 -0.375\nv -0.242188 -0.518108 -0.375\nv -0.242188 -0.523438 -0.374701\nv -0.234375 -0.523438 -0.372513\nv -0.226562 -0.523438 -0.370714\nv -0.21875 -0.523438 -0.370343\nv -0.210938 -0.523438 -0.37038\nv -0.203125 -0.523438 -0.370795\nv -0.195312 -0.523438 -0.370954\nv -0.1875 -0.523438 -0.371667\nv -0.179688 -0.523438 -0.372486\nv -0.171875 -0.517011 -0.375\nv -0.171875 -0.523438 -0.373118\nv -0.164062 -0.518979 -0.375\nv -0.164062 -0.523438 -0.373697\nv -0.15625 -0.519929 -0.375\nv -0.15625 -0.523438 -0.373975\nv -0.148438 -0.520794 -0.375\nv -0.148438 -0.523438 -0.374218\nv -0.140625 -0.521824 -0.375\nv -0.140625 -0.523438 -0.374501\nv -0.132812 -0.521269 -0.375\nv -0.132812 -0.523438 -0.374249\nv -0.125 -0.520271 -0.375\nv -0.125 -0.523438 -0.373888\nv -0.116355 -0.523438 -0.375\nv -0.117188 -0.523098 -0.375\nv -0.117188 -0.523438 -0.374882\nv 0.0336332 -0.523438 -0.375\nv 0.0390625 -0.522863 -0.375\nv 0.0390625 -0.523438 -0.374791\nv 0.046875 -0.521985 -0.375\nv 0.046875 -0.523438 -0.374486\nv 0.0546875 -0.521078 -0.375\nv 0.0546875 -0.523438 -0.374194\nv 0.0625 -0.520389 -0.375\nv 0.0625 -0.523438 -0.373959\nv 0.0703125 -0.519467 -0.375\nv 0.0703125 -0.523438 -0.37364\nv 0.078125 -0.518352 -0.375\nv 0.078125 -0.523438 -0.373271\nv 0.0859375 -0.517013 -0.375\nv 0.0859375 -0.523438 -0.372879\nv 0.09375 -0.515802 -0.375\nv 0.09375 -0.523438 -0.372511\nv 0.101562 -0.523438 -0.372306\nv 0.109375 -0.523438 -0.372306\nv 0.117188 -0.523438 -0.372394\nv 0.125 -0.523438 -0.372401\nv 0.132812 -0.523438 -0.372395\nv 0.140625 -0.523438 -0.372377\nv 0.148438 -0.523438 -0.372535\nv 0.15625 -0.516325 -0.375\nv 0.15625 -0.523438 -0.373\nv 0.164062 -0.517554 -0.375\nv 0.164062 -0.523438 -0.373338\nv 0.171875 -0.518499 -0.375\nv 0.171875 -0.523438 -0.373555\nv 0.179688 -0.519471 -0.375\nv 0.179688 -0.523438 -0.373766\nv 0.195133 -0.523438 -0.375\nv 0.1875 -0.52148 -0.375\nv 0.1875 -0.523438 -0.374406\nv 0.35611 -0.523438 -0.375\nv 0.359375 -0.521557 -0.375\nv 0.359375 -0.523438 -0.374343\nv 0.367188 -0.517797 -0.375\nv 0.367188 -0.523438 -0.373105\nv 0.375 -0.523438 -0.371842\nv 0.382812 -0.523438 -0.37192\nv 0.397546 -0.523438 -0.375\nv 0.390625 -0.5199 -0.375\nv 0.390625 -0.523438 -0.373794\nv 0.495195 -0.523438 -0.375\nv 0.5 -0.523438 -0.370155\nv -0.321176 -0.515625 -0.375\nv -0.328125 -0.515625 -0.369218\nv -0.241639 -0.515625 -0.375\nv -0.234375 -0.515625 -0.373005\nv -0.226562 -0.515625 -0.371608\nv -0.21875 -0.515625 -0.371629\nv -0.210938 -0.515625 -0.372264\nv -0.203125 -0.515625 -0.37292\nv -0.195312 -0.515625 -0.373022\nv -0.1875 -0.515625 -0.373715\nv -0.176184 -0.515625 -0.375\nv -0.179688 -0.513379 -0.375\nv -0.179688 -0.515625 -0.374666\nv 0.0962953 -0.515625 -0.375\nv 0.101562 -0.514978 -0.375\nv 0.101562 -0.515625 -0.374883\nv 0.109375 -0.514963 -0.375\nv 0.109375 -0.515625 -0.37488\nv 0.117188 -0.514986 -0.375\nv 0.117188 -0.515625 -0.374887\nv 0.125 -0.514988 -0.375\nv 0.125 -0.515625 -0.374887\nv 0.132812 -0.514909 -0.375\nv 0.132812 -0.515625 -0.374873\nv 0.140625 -0.514578 -0.375\nv 0.140625 -0.515625 -0.374823\nv 0.15172 -0.515625 -0.375\nv 0.148438 -0.514747 -0.375\nv 0.148438 -0.515625 -0.374858\nv 0.372718 -0.515625 -0.375\nv 0.375 -0.514049 -0.375\nv 0.375 -0.515625 -0.374673\nv 0.385615 -0.515625 -0.375\nv 0.382812 -0.511626 -0.375\nv 0.382812 -0.515625 -0.374293\nv 0.495817 -0.515625 -0.375\nv 0.5 -0.515625 -0.370927\nv -0.321744 -0.507812 -0.375\nv -0.328125 -0.507812 -0.3695\nv -0.240189 -0.507812 -0.375\nv -0.234375 -0.507812 -0.373456\nv -0.226562 -0.507812 -0.372148\nv -0.21875 -0.507812 -0.372443\nv -0.210938 -0.507812 -0.37322\nv -0.203125 -0.507812 -0.373912\nv -0.195312 -0.507812 -0.374201\nv -0.186395 -0.507812 -0.375\nv -0.1875 -0.507812 -0.374867\nv -0.179688 -0.505581 -0.375\nv -0.171875 -0.503911 -0.375\nv -0.164062 -0.502636 -0.375\nv -0.15625 -0.501662 -0.375\nv -0.148438 -0.500734 -0.375\nv -0.132812 -0.502018 -0.375\nv -0.125 -0.501938 -0.375\nv 0.09375 -0.501393 -0.375\nv 0.101562 -0.502278 -0.375\nv 0.109375 -0.50244 -0.375\nv 0.117188 -0.502507 -0.375\nv 0.125 -0.502461 -0.375\nv 0.132812 -0.502254 -0.375\nv 0.140625 -0.502582 -0.375\nv 0.148438 -0.502564 -0.375\nv 0.15625 -0.501659 -0.375\nv 0.164062 -0.500316 -0.375\nv 0.375 -0.50162 -0.375\nv 0.495807 -0.507812 -0.375\nv 0.5 -0.507812 -0.371075\nv -0.322323 -0.5 -0.375\nv -0.328125 -0.5 -0.369793\nv -0.240346 -0.5 -0.375\nv -0.234375 -0.5 -0.373487\nv -0.226562 -0.5 -0.370874\nv -0.21875 -0.5 -0.370312\nv -0.210938 -0.5 -0.370384\nv -0.203125 -0.5 -0.370859\nv -0.195312 -0.5 -0.371322\nv -0.1875 -0.5 -0.372089\nv -0.179688 -0.5 -0.372948\nv -0.171875 -0.5 -0.37349\nv -0.164062 -0.5 -0.373974\nv -0.15625 -0.5 -0.374365\nv -0.142913 -0.5 -0.375\nv -0.148438 -0.5 -0.374705\nv -0.139728 -0.5 -0.375\nv -0.140625 -0.49971 -0.375\nv -0.132812 -0.5 -0.373825\nv -0.118511 -0.5 -0.375\nv -0.125 -0.5 -0.373915\nv -0.117188 -0.499629 -0.375\nv -0.109375 -0.497108 -0.375\nv -0.101562 -0.494764 -0.375\nv -0.09375 -0.493236 -0.375\nv -0.0859375 -0.492433 -0.375\nv 0.0546875 -0.492889 -0.375\nv 0.0625 -0.494984 -0.375\nv 0.0703125 -0.496781 -0.375\nv 0.078125 -0.498487 -0.375\nv 0.0877109 -0.5 -0.375\nv 0.0859375 -0.499715 -0.375\nv 0.09375 -0.5 -0.374664\nv 0.101562 -0.5 -0.374455\nv 0.109375 -0.5 -0.374406\nv 0.117188 -0.5 -0.374394\nv 0.125 -0.5 -0.374413\nv 0.132812 -0.5 -0.374485\nv 0.140625 -0.5 -0.374433\nv 0.148438 -0.5 -0.37444\nv 0.15625 -0.5 -0.374625\nv 0.165651 -0.5 -0.375\nv 0.164062 -0.5 -0.374922\nv 0.171875 -0.499212 -0.375\nv 0.179688 -0.498122 -0.375\nv 0.1875 -0.497086 -0.375\nv 0.195312 -0.496317 -0.375\nv 0.203125 -0.495576 -0.375\nv 0.210938 -0.494947 -0.375\nv 0.21875 -0.494771 -0.375\nv 0.226562 -0.494562 -0.375\nv 0.234375 -0.494512 -0.375\nv 0.242188 -0.49466 -0.375\nv 0.25 -0.495002 -0.375\nv 0.257812 -0.496051 -0.375\nv 0.265625 -0.495665 -0.375\nv 0.273438 -0.494899 -0.375\nv 0.28125 -0.494493 -0.375\nv 0.289062 -0.494709 -0.375\nv 0.296875 -0.49449 -0.375\nv 0.304688 -0.494013 -0.375\nv 0.3125 -0.494073 -0.375\nv 0.320312 -0.493704 -0.375\nv 0.351562 -0.492401 -0.375\nv 0.359375 -0.49536 -0.375\nv 0.372314 -0.5 -0.375\nv 0.367188 -0.498518 -0.375\nv 0.379265 -0.5 -0.375\nv 0.375 -0.5 -0.374658\nv 0.382812 -0.497839 -0.375\nv 0.495601 -0.5 -0.375\nv 0.5 -0.5 -0.371034\nv -0.322389 -0.492188 -0.375\nv -0.328125 -0.492188 -0.369791\nv -0.241106 -0.492188 -0.375\nv -0.234375 -0.492188 -0.37342\nv -0.226562 -0.492188 -0.370783\nv -0.21875 -0.492188 -0.367868\nv -0.210938 -0.492188 -0.367355\nv -0.195312 -0.492188 -0.36777\nv -0.1875 -0.492188 -0.3689\nv -0.179688 -0.492188 -0.36976\nv -0.171875 -0.492188 -0.37024\nv -0.164062 -0.492188 -0.370678\nv -0.15625 -0.492188 -0.371093\nv -0.148438 -0.492188 -0.37125\nv -0.140625 -0.492188 -0.371052\nv -0.132812 -0.492188 -0.368877\nv -0.125 -0.492188 -0.369107\nv -0.117188 -0.492188 -0.370487\nv -0.109375 -0.492188 -0.371962\nv -0.101562 -0.492188 -0.373449\nv -0.09375 -0.492188 -0.374455\nv -0.0827433 -0.492188 -0.375\nv -0.0859375 -0.492188 -0.374883\nv -0.078125 -0.49184 -0.375\nv -0.0703125 -0.491095 -0.375\nv -0.0625 -0.490272 -0.375\nv -0.0546875 -0.489492 -0.375\nv -0.046875 -0.488811 -0.375\nv -0.0390625 -0.488303 -0.375\nv -0.03125 -0.487858 -0.375\nv -0.0234375 -0.48701 -0.375\nv -0.015625 -0.486444 -0.375\nv -0.0078125 -0.486011 -0.375\nv 0 -0.485352 -0.375\nv 0.0078125 -0.485698 -0.375\nv 0.015625 -0.486719 -0.375\nv 0.0234375 -0.488242 -0.375\nv 0.03125 -0.489128 -0.375\nv 0.0390625 -0.490201 -0.375\nv 0.0510883 -0.492188 -0.375\nv 0.046875 -0.491625 -0.375\nv 0.0546875 -0.492188 -0.374783\nv 0.0625 -0.492188 -0.374121\nv 0.0703125 -0.492188 -0.373466\nv 0.078125 -0.492188 -0.372832\nv 0.0859375 -0.492188 -0.372345\nv 0.09375 -0.492188 -0.371867\nv 0.101562 -0.492188 -0.371624\nv 0.109375 -0.492188 -0.371569\nv 0.117188 -0.492188 -0.371581\nv 0.125 -0.492188 -0.371627\nv 0.132812 -0.492188 -0.371708\nv 0.140625 -0.492188 -0.371686\nv 0.148438 -0.492188 -0.371696\nv 0.15625 -0.492188 -0.371738\nv 0.164062 -0.492188 -0.371896\nv 0.171875 -0.492188 -0.37216\nv 0.179688 -0.492188 -0.372522\nv 0.1875 -0.492188 -0.372935\nv 0.195312 -0.492188 -0.373313\nv 0.203125 -0.492188 -0.373638\nv 0.210938 -0.492188 -0.373943\nv 0.21875 -0.492188 -0.374054\nv 0.226562 -0.492188 -0.374113\nv 0.234375 -0.492188 -0.374133\nv 0.242188 -0.492188 -0.374069\nv 0.25 -0.492188 -0.373931\nv 0.257812 -0.492188 -0.373599\nv 0.265625 -0.492188 -0.373848\nv 0.273438 -0.492188 -0.374085\nv 0.28125 -0.492188 -0.37418\nv 0.289062 -0.492188 -0.374109\nv 0.296875 -0.492188 -0.374158\nv 0.304688 -0.492188 -0.374292\nv 0.3125 -0.492188 -0.374242\nv 0.325419 -0.492188 -0.375\nv 0.320312 -0.492188 -0.374347\nv 0.328125 -0.491384 -0.375\nv 0.335938 -0.489859 -0.375\nv 0.350901 -0.492188 -0.375\nv 0.34375 -0.490037 -0.375\nv 0.351562 -0.492188 -0.374897\nv 0.359375 -0.492188 -0.37345\nv 0.367188 -0.492188 -0.372283\nv 0.375 -0.492188 -0.372041\nv 0.385112 -0.492188 -0.375\nv 0.382812 -0.492188 -0.374242\nv 0.49567 -0.492188 -0.375\nv 0.5 -0.492188 -0.37127\nv -0.322671 -0.484375 -0.375\nv -0.328125 -0.484375 -0.370038\nv -0.242149 -0.484375 -0.375\nv -0.242188 -0.484113 -0.375\nv -0.234375 -0.484375 -0.3732\nv -0.226562 -0.484375 -0.370608\nv -0.15625 -0.484375 -0.36756\nv -0.148438 -0.484375 -0.367577\nv -0.101562 -0.484375 -0.368208\nv -0.09375 -0.484375 -0.369778\nv -0.0859375 -0.484375 -0.370743\nv -0.078125 -0.484375 -0.371349\nv -0.0703125 -0.484375 -0.371771\nv -0.0625 -0.484375 -0.372181\nv -0.0546875 -0.484375 -0.372529\nv -0.046875 -0.484375 -0.372839\nv -0.0390625 -0.484375 -0.373089\nv -0.03125 -0.484375 -0.373321\nv -0.0234375 -0.484375 -0.373707\nv -0.015625 -0.484375 -0.373975\nv -0.0078125 -0.484375 -0.374188\nv 0 -0.484375 -0.374514\nv 0.0078125 -0.484375 -0.37436\nv 0.015625 -0.484375 -0.373913\nv 0.0234375 -0.484375 -0.373251\nv 0.03125 -0.484375 -0.372799\nv 0.0390625 -0.484375 -0.372308\nv 0.046875 -0.484375 -0.37177\nv 0.0546875 -0.484375 -0.371425\nv 0.0625 -0.484375 -0.370852\nv 0.0703125 -0.484375 -0.370162\nv 0.078125 -0.484375 -0.369464\nv 0.0859375 -0.484375 -0.36895\nv 0.09375 -0.484375 -0.368462\nv 0.101562 -0.484375 -0.368187\nv 0.109375 -0.484375 -0.368142\nv 0.117188 -0.484375 -0.368191\nv 0.125 -0.484375 -0.368326\nv 0.132812 -0.484375 -0.368394\nv 0.140625 -0.484375 -0.368375\nv 0.148438 -0.484375 -0.368408\nv 0.15625 -0.484375 -0.36844\nv 0.164062 -0.484375 -0.368447\nv 0.171875 -0.484375 -0.36853\nv 0.179688 -0.484375 -0.36879\nv 0.1875 -0.484375 -0.369269\nv 0.195312 -0.484375 -0.369699\nv 0.203125 -0.484375 -0.370127\nv 0.210938 -0.484375 -0.370516\nv 0.21875 -0.484375 -0.37087\nv 0.226562 -0.484375 -0.37098\nv 0.234375 -0.484375 -0.370935\nv 0.242188 -0.484375 -0.370899\nv 0.25 -0.484375 -0.370769\nv 0.257812 -0.484375 -0.37075\nv 0.265625 -0.484375 -0.371002\nv 0.273438 -0.484375 -0.371274\nv 0.28125 -0.484375 -0.371357\nv 0.289062 -0.484375 -0.371288\nv 0.296875 -0.484375 -0.371233\nv 0.304688 -0.484375 -0.371009\nv 0.3125 -0.484375 -0.370585\nv 0.320312 -0.484375 -0.370537\nv 0.328125 -0.484375 -0.371661\nv 0.335938 -0.484375 -0.372008\nv 0.34375 -0.484375 -0.371762\nv 0.351562 -0.484375 -0.370777\nv 0.359375 -0.484375 -0.369199\nv 0.367188 -0.484375 -0.368369\nv 0.375 -0.484375 -0.370335\nv 0.386835 -0.484375 -0.375\nv 0.382812 -0.484375 -0.373097\nv 0.495965 -0.484375 -0.375\nv 0.5 -0.484375 -0.371522\nv -0.323066 -0.476562 -0.375\nv -0.328125 -0.476562 -0.370368\nv -0.243441 -0.476562 -0.375\nv -0.242188 -0.476562 -0.374765\nv -0.234375 -0.476562 -0.372947\nv -0.226562 -0.476562 -0.370263\nv -0.0703125 -0.476562 -0.36767\nv -0.0625 -0.476562 -0.368117\nv -0.0546875 -0.476562 -0.368504\nv -0.046875 -0.476562 -0.368793\nv -0.0390625 -0.476562 -0.369064\nv -0.03125 -0.476562 -0.369299\nv -0.0234375 -0.476562 -0.369713\nv -0.015625 -0.476562 -0.369927\nv -0.0078125 -0.476562 -0.370113\nv 0 -0.476562 -0.370317\nv 0.0078125 -0.476562 -0.370033\nv 0.015625 -0.476562 -0.369685\nv 0.0234375 -0.476562 -0.369316\nv 0.03125 -0.476562 -0.368959\nv 0.0390625 -0.476562 -0.368396\nv 0.046875 -0.476562 -0.367838\nv 0.0546875 -0.476562 -0.367456\nv 0.265625 -0.476562 -0.367305\nv 0.273438 -0.476562 -0.367561\nv 0.28125 -0.476562 -0.367494\nv 0.289062 -0.476562 -0.367277\nv 0.375 -0.476562 -0.367687\nv 0.387943 -0.476562 -0.375\nv 0.382812 -0.476562 -0.371933\nv 0.496218 -0.476562 -0.375\nv 0.5 -0.476562 -0.371817\nv -0.32337 -0.46875 -0.375\nv -0.328125 -0.46875 -0.370585\nv -0.244667 -0.46875 -0.375\nv -0.242188 -0.46875 -0.374502\nv -0.234375 -0.46875 -0.372623\nv -0.226562 -0.46875 -0.369793\nv 0.389541 -0.46875 -0.375\nv 0.382812 -0.46875 -0.370235\nv 0.390625 -0.462954 -0.375\nv 0.496378 -0.46875 -0.375\nv 0.5 -0.46875 -0.371985\nv -0.323721 -0.460938 -0.375\nv -0.328125 -0.460938 -0.370708\nv -0.245087 -0.460938 -0.375\nv -0.242188 -0.460938 -0.374286\nv -0.234375 -0.460938 -0.372243\nv -0.226562 -0.460938 -0.36926\nv 0.382812 -0.460938 -0.368222\nv 0.391099 -0.460938 -0.375\nv 0.390625 -0.460938 -0.374673\nv 0.496438 -0.460938 -0.375\nv 0.5 -0.460938 -0.37209\nv -0.323869 -0.453125 -0.375\nv -0.328125 -0.453125 -0.370777\nv -0.244676 -0.453125 -0.375\nv -0.242188 -0.453125 -0.374419\nv -0.234375 -0.453125 -0.37197\nv -0.226562 -0.453125 -0.368657\nv 0.392982 -0.453125 -0.375\nv 0.390625 -0.453125 -0.37332\nv 0.496643 -0.453125 -0.375\nv 0.5 -0.453125 -0.372299\nv -0.323962 -0.445312 -0.375\nv -0.328125 -0.445312 -0.370949\nv -0.244421 -0.445312 -0.375\nv -0.242188 -0.445312 -0.374493\nv -0.234375 -0.445312 -0.371948\nv -0.226562 -0.445312 -0.368258\nv 0.395605 -0.445312 -0.375\nv 0.390625 -0.445312 -0.371414\nv 0.497125 -0.445312 -0.375\nv 0.5 -0.445312 -0.372724\nv -0.32395 -0.4375 -0.375\nv -0.328125 -0.4375 -0.370998\nv -0.243983 -0.4375 -0.375\nv -0.242188 -0.4375 -0.374617\nv -0.234375 -0.4375 -0.372017\nv -0.226562 -0.4375 -0.368271\nv 0.398307 -0.4375 -0.375\nv 0.390625 -0.4375 -0.369846\nv 0.398438 -0.436994 -0.375\nv 0.49775 -0.4375 -0.375\nv 0.5 -0.4375 -0.37328\nv -0.32377 -0.429688 -0.375\nv -0.328125 -0.429688 -0.370674\nv -0.243571 -0.429688 -0.375\nv -0.242188 -0.429688 -0.374717\nv -0.234375 -0.429688 -0.372087\nv -0.226562 -0.429688 -0.36847\nv 0.390625 -0.429688 -0.368926\nv 0.400226 -0.429688 -0.375\nv 0.398438 -0.429688 -0.373943\nv 0.498422 -0.429688 -0.375\nv 0.5 -0.429688 -0.373826\nv -0.323371 -0.421875 -0.375\nv -0.328125 -0.421875 -0.369913\nv -0.24337 -0.421875 -0.375\nv -0.242188 -0.421875 -0.374775\nv -0.234375 -0.421875 -0.372147\nv -0.226562 -0.421875 -0.36865\nv 0.390625 -0.421875 -0.368588\nv 0.401233 -0.421875 -0.375\nv 0.398438 -0.421875 -0.373478\nv 0.499287 -0.421875 -0.375\nv 0.5 -0.416269 -0.375\nv 0.5 -0.421875 -0.37447\nv -0.322965 -0.414062 -0.375\nv -0.328125 -0.414062 -0.369233\nv -0.243294 -0.414062 -0.375\nv -0.242188 -0.414062 -0.374807\nv -0.234375 -0.414062 -0.37222\nv -0.226562 -0.414062 -0.368806\nv 0.390625 -0.414062 -0.368557\nv 0.401977 -0.414062 -0.375\nv 0.398438 -0.414062 -0.37313\nv 0.500211 -0.414062 -0.375\nv -0.321999 -0.40625 -0.375\nv -0.328125 -0.40625 -0.368343\nv -0.243887 -0.40625 -0.375\nv -0.242188 -0.40625 -0.374723\nv -0.234375 -0.40625 -0.372208\nv -0.226562 -0.40625 -0.368526\nv 0.390625 -0.40625 -0.368278\nv 0.40261 -0.40625 -0.375\nv 0.398438 -0.40625 -0.372671\nv 0.500432 -0.40625 -0.375\nv -0.320824 -0.398438 -0.375\nv -0.320312 -0.394348 -0.375\nv -0.244128 -0.398438 -0.375\nv -0.242188 -0.398438 -0.374692\nv -0.234375 -0.398438 -0.372224\nv -0.226562 -0.398438 -0.368623\nv 0.390625 -0.398438 -0.367405\nv 0.403087 -0.398438 -0.375\nv 0.398438 -0.398438 -0.372176\nv 0.500446 -0.398438 -0.375\nv -0.319452 -0.390625 -0.375\nv -0.320312 -0.390625 -0.374697\nv -0.273438 -0.3846 -0.375\nv -0.265625 -0.387217 -0.375\nv -0.24447 -0.390625 -0.375\nv -0.242188 -0.390625 -0.374708\nv -0.234375 -0.390625 -0.372489\nv -0.226562 -0.390625 -0.369156\nv 0.403693 -0.390625 -0.375\nv 0.398438 -0.390625 -0.371603\nv 0.500364 -0.390625 -0.375\nv 0.5 -0.383394 -0.375\nv -0.318221 -0.382812 -0.375\nv -0.320312 -0.382812 -0.374094\nv -0.274348 -0.382812 -0.375\nv -0.273438 -0.382812 -0.374943\nv -0.260352 -0.382812 -0.375\nv -0.265625 -0.382812 -0.374828\nv -0.257812 -0.379937 -0.375\nv -0.245289 -0.382812 -0.375\nv -0.242188 -0.382812 -0.374686\nv -0.234375 -0.382812 -0.372701\nv -0.226562 -0.382812 -0.369619\nv 0.40596 -0.382812 -0.375\nv 0.398438 -0.382812 -0.370495\nv 0.40625 -0.381574 -0.375\nv 0.499941 -0.382812 -0.375\nv 0.5 -0.382812 -0.37497\nv -0.317602 -0.375 -0.375\nv -0.320312 -0.375 -0.373615\nv -0.276509 -0.375 -0.375\nv -0.273438 -0.375 -0.374787\nv -0.265625 -0.375 -0.37464\nv -0.25499 -0.375 -0.375\nv -0.257812 -0.375 -0.374848\nv -0.246474 -0.375 -0.375\nv -0.242188 -0.375 -0.374644\nv -0.234375 -0.375 -0.372788\nv -0.226562 -0.375 -0.369756\nv 0.398438 -0.375 -0.369873\nv 0.409365 -0.375 -0.375\nv 0.40625 -0.375 -0.374125\nv 0.497997 -0.375 -0.375\nv 0.5 -0.375 -0.374065\nv -0.316985 -0.367188 -0.375\nv -0.320312 -0.367188 -0.37302\nv -0.277508 -0.367188 -0.375\nv -0.273438 -0.367188 -0.374645\nv -0.265625 -0.367188 -0.374473\nv -0.252611 -0.367188 -0.375\nv -0.257812 -0.367188 -0.374714\nv -0.247499 -0.367188 -0.375\nv -0.242188 -0.367188 -0.37467\nv -0.234375 -0.367188 -0.37285\nv -0.226562 -0.367188 -0.369701\nv 0.398438 -0.367188 -0.369435\nv 0.412171 -0.367188 -0.375\nv 0.40625 -0.367188 -0.373431\nv 0.495911 -0.367188 -0.375\nv 0.5 -0.367188 -0.373148\nv -0.316499 -0.359375 -0.375\nv -0.320312 -0.359375 -0.372382\nv -0.277562 -0.359375 -0.375\nv -0.273438 -0.359375 -0.374562\nv -0.265625 -0.359375 -0.374308\nv -0.250361 -0.359375 -0.375\nv -0.257812 -0.359375 -0.374573\nv -0.249551 -0.359375 -0.375\nv -0.25 -0.358156 -0.375\nv -0.242188 -0.359375 -0.374632\nv -0.234375 -0.359375 -0.372909\nv -0.226562 -0.359375 -0.3696\nv 0.398438 -0.359375 -0.369191\nv 0.413809 -0.359375 -0.375\nv 0.40625 -0.359375 -0.372932\nv 0.414062 -0.358273 -0.375\nv 0.49501 -0.359375 -0.375\nv 0.5 -0.359375 -0.37281\nv -0.316224 -0.351562 -0.375\nv -0.320312 -0.351562 -0.371756\nv -0.277462 -0.351562 -0.375\nv -0.273438 -0.351562 -0.37453\nv -0.265625 -0.351562 -0.37417\nv -0.257812 -0.351562 -0.374462\nv -0.25 -0.351562 -0.374885\nv -0.242188 -0.351562 -0.374569\nv -0.234375 -0.351562 -0.372911\nv -0.226562 -0.351562 -0.369502\nv 0.398438 -0.351562 -0.369517\nv 0.40625 -0.351562 -0.372623\nv 0.416484 -0.351562 -0.375\nv 0.414062 -0.351562 -0.374651\nv 0.494673 -0.351562 -0.375\nv 0.5 -0.351562 -0.37271\nv -0.316079 -0.34375 -0.375\nv -0.320312 -0.34375 -0.371278\nv -0.277359 -0.34375 -0.375\nv -0.273438 -0.34375 -0.374499\nv -0.265625 -0.34375 -0.37407\nv -0.257812 -0.34375 -0.374295\nv -0.25 -0.34375 -0.374799\nv -0.242188 -0.34375 -0.374566\nv -0.234375 -0.34375 -0.372916\nv -0.226562 -0.34375 -0.369355\nv 0.398438 -0.34375 -0.369988\nv 0.40625 -0.34375 -0.372912\nv 0.417549 -0.34375 -0.375\nv 0.414062 -0.34375 -0.374512\nv 0.49456 -0.34375 -0.375\nv 0.5 -0.34375 -0.372723\nv -0.316044 -0.335938 -0.375\nv -0.320312 -0.335938 -0.370769\nv -0.277156 -0.335938 -0.375\nv -0.273438 -0.335938 -0.374477\nv -0.265625 -0.335938 -0.374069\nv -0.257812 -0.335938 -0.374256\nv -0.25 -0.335938 -0.37476\nv -0.242188 -0.335938 -0.374552\nv -0.234375 -0.335938 -0.372928\nv -0.226562 -0.335938 -0.369278\nv 0.398438 -0.335938 -0.369964\nv 0.40625 -0.335938 -0.373187\nv 0.414211 -0.335938 -0.375\nv 0.414062 -0.335596 -0.375\nv 0.414062 -0.335938 -0.37498\nv 0.494816 -0.335938 -0.375\nv 0.5 -0.335938 -0.372996\nv -0.316078 -0.328125 -0.375\nv -0.320312 -0.328125 -0.370341\nv -0.276072 -0.328125 -0.375\nv -0.273438 -0.328125 -0.374601\nv -0.265625 -0.328125 -0.374166\nv -0.257812 -0.328125 -0.374352\nv -0.25 -0.328125 -0.374809\nv -0.242188 -0.328125 -0.374588\nv -0.234375 -0.328125 -0.373016\nv -0.226562 -0.328125 -0.369388\nv 0.398438 -0.328125 -0.369663\nv 0.412354 -0.328125 -0.375\nv 0.40625 -0.328125 -0.373372\nv 0.494772 -0.328125 -0.375\nv 0.5 -0.328125 -0.373055\nv -0.315948 -0.320312 -0.375\nv -0.320312 -0.320312 -0.369699\nv -0.274719 -0.320312 -0.375\nv -0.273438 -0.313023 -0.375\nv -0.273438 -0.320312 -0.374809\nv -0.265625 -0.320312 -0.374394\nv -0.257812 -0.320312 -0.374541\nv -0.25 -0.318946 -0.375\nv -0.25 -0.320312 -0.37495\nv -0.242188 -0.316982 -0.375\nv -0.242188 -0.320312 -0.374844\nv -0.234375 -0.320312 -0.373274\nv -0.226562 -0.320312 -0.369597\nv 0.398438 -0.320312 -0.369607\nv 0.413145 -0.320312 -0.375\nv 0.40625 -0.320312 -0.372938\nv 0.494441 -0.320312 -0.375\nv 0.5 -0.320312 -0.37313\nv -0.315672 -0.3125 -0.375\nv -0.320312 -0.3125 -0.369103\nv -0.273063 -0.3125 -0.375\nv -0.265625 -0.304968 -0.375\nv -0.265625 -0.3125 -0.374705\nv -0.255273 -0.3125 -0.375\nv -0.257812 -0.309892 -0.375\nv -0.257812 -0.3125 -0.374885\nv -0.240975 -0.3125 -0.375\nv -0.234375 -0.3125 -0.373694\nv -0.226562 -0.3125 -0.369907\nv 0.398438 -0.3125 -0.369716\nv 0.413852 -0.3125 -0.375\nv 0.40625 -0.3125 -0.372645\nv 0.414062 -0.309631 -0.375\nv 0.494542 -0.3125 -0.375\nv 0.5 -0.3125 -0.373244\nv -0.315057 -0.304688 -0.375\nv -0.320312 -0.304688 -0.368379\nv -0.238848 -0.304688 -0.375\nv -0.234375 -0.304688 -0.374152\nv -0.226562 -0.304688 -0.370237\nv 0.398438 -0.304688 -0.369968\nv 0.40625 -0.304688 -0.372641\nv 0.41485 -0.304688 -0.375\nv 0.414062 -0.304688 -0.374883\nv 0.495447 -0.304688 -0.375\nv 0.5 -0.304688 -0.373406\nv -0.314463 -0.296875 -0.375\nv -0.320312 -0.296875 -0.367587\nv -0.236508 -0.296875 -0.375\nv -0.234375 -0.290441 -0.375\nv -0.234375 -0.296875 -0.374589\nv -0.226562 -0.296875 -0.370596\nv 0.398438 -0.296875 -0.369982\nv 0.40625 -0.296875 -0.372789\nv 0.414391 -0.296875 -0.375\nv 0.414062 -0.296875 -0.374957\nv 0.495975 -0.296875 -0.375\nv 0.5 -0.296875 -0.373404\nv -0.313995 -0.289062 -0.375\nv -0.234159 -0.289062 -0.375\nv -0.226562 -0.289062 -0.370993\nv 0.398438 -0.289062 -0.37027\nv 0.40625 -0.289062 -0.372923\nv 0.414595 -0.289062 -0.375\nv 0.414062 -0.283252 -0.375\nv 0.414062 -0.289062 -0.374923\nv 0.496441 -0.289062 -0.375\nv 0.5 -0.289062 -0.373427\nv -0.313412 -0.28125 -0.375\nv -0.232744 -0.28125 -0.375\nv -0.226562 -0.28125 -0.371366\nv 0.398438 -0.28125 -0.370444\nv 0.413952 -0.28125 -0.375\nv 0.40625 -0.28125 -0.373147\nv 0.496661 -0.28125 -0.375\nv 0.5 -0.28125 -0.373343\nv -0.312811 -0.273438 -0.375\nv -0.3125 -0.270434 -0.375\nv -0.231863 -0.273438 -0.375\nv -0.226562 -0.273438 -0.371665\nv 0.398438 -0.273438 -0.370402\nv 0.41315 -0.273438 -0.375\nv 0.40625 -0.273438 -0.373332\nv 0.496692 -0.273438 -0.375\nv 0.5 -0.273438 -0.373126\nv -0.311809 -0.265625 -0.375\nv -0.3125 -0.265625 -0.374445\nv -0.231344 -0.265625 -0.375\nv -0.226562 -0.265625 -0.371804\nv 0.398438 -0.265625 -0.370616\nv 0.41217 -0.265625 -0.375\nv 0.40625 -0.265625 -0.373558\nv 0.496349 -0.265625 -0.375\nv 0.5 -0.265625 -0.372748\nv -0.310983 -0.257812 -0.375\nv -0.3125 -0.257812 -0.37368\nv -0.230919 -0.257812 -0.375\nv -0.226562 -0.257812 -0.372228\nv 0.398438 -0.257812 -0.371403\nv 0.410967 -0.257812 -0.375\nv 0.40625 -0.257812 -0.374025\nv 0.495933 -0.257812 -0.375\nv 0.5 -0.257812 -0.372274\nv -0.310204 -0.25 -0.375\nv -0.3125 -0.25 -0.372875\nv -0.230609 -0.25 -0.375\nv -0.226562 -0.25 -0.372817\nv 0.398438 -0.25 -0.372401\nv 0.407834 -0.25 -0.375\nv 0.40625 -0.247908 -0.375\nv 0.40625 -0.25 -0.374769\nv 0.495645 -0.25 -0.375\nv 0.5 -0.25 -0.371836\nv -0.309704 -0.242188 -0.375\nv -0.3125 -0.242188 -0.372229\nv -0.230948 -0.242188 -0.375\nv -0.226562 -0.242188 -0.372884\nv 0.390625 -0.242188 -0.367719\nv 0.403419 -0.242188 -0.375\nv 0.398438 -0.242188 -0.373274\nv 0.496036 -0.242188 -0.375\nv 0.5 -0.242188 -0.371873\nv -0.30987 -0.234375 -0.375\nv -0.3125 -0.234375 -0.372269\nv -0.273438 -0.228811 -0.375\nv -0.265625 -0.231367 -0.375\nv -0.231646 -0.234375 -0.375\nv -0.226562 -0.234375 -0.372693\nv 0.390625 -0.234375 -0.368543\nv 0.399737 -0.234375 -0.375\nv 0.398438 -0.230249 -0.375\nv 0.398438 -0.234375 -0.37455\nv 0.496744 -0.234375 -0.375\nv 0.5 -0.234375 -0.372252\nv -0.310228 -0.226562 -0.375\nv -0.3125 -0.226562 -0.37269\nv -0.273685 -0.226562 -0.375\nv -0.273438 -0.226562 -0.374949\nv -0.263286 -0.226562 -0.375\nv -0.265625 -0.226562 -0.374855\nv -0.232723 -0.226562 -0.375\nv -0.226562 -0.226562 -0.372379\nv 0.397957 -0.226562 -0.375\nv 0.390625 -0.226562 -0.368525\nv 0.498059 -0.226562 -0.375\nv 0.5 -0.226562 -0.373249\nv -0.310706 -0.21875 -0.375\nv -0.3125 -0.21875 -0.373193\nv -0.273788 -0.21875 -0.375\nv -0.273438 -0.214765 -0.375\nv -0.273438 -0.21875 -0.374921\nv -0.259727 -0.21875 -0.375\nv -0.265625 -0.21875 -0.374689\nv -0.233856 -0.21875 -0.375\nv -0.234375 -0.214774 -0.375\nv -0.226562 -0.21875 -0.372185\nv 0.397964 -0.21875 -0.375\nv 0.390625 -0.21875 -0.368248\nv 0.499705 -0.21875 -0.375\nv 0.5 -0.216987 -0.375\nv 0.5 -0.21875 -0.374712\nv -0.310516 -0.210938 -0.375\nv -0.3125 -0.210938 -0.373029\nv -0.270768 -0.210938 -0.375\nv -0.260587 -0.210938 -0.375\nv -0.265625 -0.2061 -0.375\nv -0.265625 -0.210938 -0.374826\nv -0.235504 -0.210938 -0.375\nv -0.234375 -0.210938 -0.374869\nv -0.226562 -0.210938 -0.372156\nv 0.398355 -0.210938 -0.375\nv 0.390625 -0.210938 -0.367679\nv 0.398438 -0.210407 -0.375\nv 0.500669 -0.210938 -0.375\nv -0.310346 -0.203125 -0.375\nv -0.3125 -0.203125 -0.372912\nv -0.235916 -0.203125 -0.375\nv -0.234375 -0.203125 -0.374758\nv -0.226562 -0.203125 -0.371958\nv 0.400128 -0.203125 -0.375\nv 0.398438 -0.203125 -0.373917\nv 0.501581 -0.203125 -0.375\nv -0.309682 -0.195312 -0.375\nv -0.3125 -0.195312 -0.372459\nv -0.236926 -0.195312 -0.375\nv -0.234375 -0.195312 -0.374527\nv -0.226562 -0.195312 -0.371612\nv 0.401984 -0.195312 -0.375\nv 0.398438 -0.195312 -0.372691\nv 0.502365 -0.195312 -0.375\nv -0.308787 -0.1875 -0.375\nv -0.3125 -0.1875 -0.371657\nv -0.237899 -0.1875 -0.375\nv -0.234375 -0.1875 -0.374367\nv -0.226562 -0.1875 -0.371372\nv 0.40375 -0.1875 -0.375\nv 0.398438 -0.1875 -0.371636\nv 0.50299 -0.1875 -0.375\nv -0.307665 -0.179688 -0.375\nv -0.3125 -0.179688 -0.370646\nv -0.237885 -0.179688 -0.375\nv -0.234375 -0.179688 -0.374409\nv -0.226562 -0.179688 -0.371295\nv 0.404716 -0.179688 -0.375\nv 0.398438 -0.179688 -0.370791\nv 0.503207 -0.179688 -0.375\nv -0.307204 -0.171875 -0.375\nv -0.3125 -0.171875 -0.370105\nv -0.237272 -0.171875 -0.375\nv -0.234375 -0.171875 -0.374434\nv -0.226562 -0.171875 -0.371579\nv 0.405303 -0.171875 -0.375\nv 0.398438 -0.171875 -0.370094\nv 0.50323 -0.171875 -0.375\nv -0.306968 -0.164062 -0.375\nv -0.3125 -0.164062 -0.369808\nv -0.236675 -0.164062 -0.375\nv -0.234375 -0.164062 -0.374519\nv -0.226562 -0.164062 -0.371796\nv 0.405998 -0.164062 -0.375\nv 0.398438 -0.164062 -0.370249\nv 0.40625 -0.158329 -0.375\nv 0.503242 -0.164062 -0.375\nv -0.306805 -0.15625 -0.375\nv -0.3125 -0.15625 -0.369618\nv -0.235628 -0.15625 -0.375\nv -0.234375 -0.15625 -0.374731\nv -0.226562 -0.15625 -0.371944\nv 0.398438 -0.15625 -0.370163\nv 0.406535 -0.15625 -0.375\nv 0.40625 -0.15625 -0.374948\nv 0.503036 -0.15625 -0.375\nv -0.306634 -0.148438 -0.375\nv -0.3125 -0.148438 -0.368316\nv -0.236105 -0.148438 -0.375\nv -0.234375 -0.148438 -0.374638\nv -0.226562 -0.148438 -0.372052\nv 0.398438 -0.148438 -0.369753\nv 0.408819 -0.148438 -0.375\nv 0.40625 -0.148438 -0.374506\nv 0.502606 -0.148438 -0.375\nv -0.306471 -0.140625 -0.375\nv -0.236613 -0.140625 -0.375\nv -0.234375 -0.140625 -0.374573\nv -0.226562 -0.140625 -0.372172\nv 0.398438 -0.140625 -0.369392\nv 0.411891 -0.140625 -0.375\nv 0.40625 -0.140625 -0.373941\nv 0.414062 -0.133669 -0.375\nv 0.501859 -0.140625 -0.375\nv -0.306138 -0.132812 -0.375\nv -0.237186 -0.132812 -0.375\nv -0.234375 -0.132812 -0.374447\nv -0.226562 -0.132812 -0.37203\nv 0.398438 -0.132812 -0.369862\nv 0.40625 -0.132812 -0.373681\nv 0.414362 -0.132812 -0.375\nv 0.414062 -0.132812 -0.374955\nv 0.500843 -0.132812 -0.375\nv 0.5 -0.12734 -0.375\nv -0.305426 -0.125 -0.375\nv -0.238674 -0.125 -0.375\nv -0.234375 -0.125 -0.374158\nv -0.226562 -0.125 -0.371527\nv 0.398438 -0.125 -0.370021\nv 0.40625 -0.125 -0.373343\nv 0.416893 -0.125 -0.375\nv 0.414062 -0.125 -0.374592\nv 0.499089 -0.125 -0.375\nv 0.5 -0.125 -0.373646\nv -0.304704 -0.117188 -0.375\nv -0.304688 -0.116791 -0.375\nv -0.24082 -0.117188 -0.375\nv -0.242188 -0.112268 -0.375\nv -0.234375 -0.117188 -0.373677\nv -0.226562 -0.117188 -0.370895\nv 0.398438 -0.117188 -0.370073\nv 0.40625 -0.117188 -0.373045\nv 0.420984 -0.117188 -0.375\nv 0.414062 -0.117188 -0.374319\nv 0.497426 -0.117188 -0.375\nv 0.5 -0.117188 -0.37129\nv -0.304248 -0.109375 -0.375\nv -0.304688 -0.109375 -0.374759\nv -0.257812 -0.102672 -0.375\nv -0.244553 -0.109375 -0.375\nv -0.25 -0.102052 -0.375\nv -0.242188 -0.109375 -0.374849\nv -0.234375 -0.109375 -0.372982\nv -0.226562 -0.109375 -0.370228\nv 0.398438 -0.109375 -0.370159\nv 0.40625 -0.109375 -0.372977\nv 0.421565 -0.109375 -0.375\nv 0.414062 -0.109375 -0.374271\nv 0.421875 -0.107238 -0.375\nv 0.496885 -0.109375 -0.375\nv 0.5 -0.109375 -0.37059\nv -0.303633 -0.101562 -0.375\nv -0.304688 -0.101562 -0.374434\nv -0.258687 -0.101562 -0.375\nv -0.257812 -0.101562 -0.374938\nv -0.25 -0.101562 -0.374977\nv -0.242188 -0.101562 -0.374473\nv -0.234375 -0.101562 -0.372551\nv -0.226562 -0.101562 -0.369864\nv 0.398438 -0.101562 -0.370406\nv 0.40625 -0.101562 -0.372953\nv 0.414062 -0.101562 -0.374051\nv 0.4226 -0.101562 -0.375\nv 0.421875 -0.0996549 -0.375\nv 0.421875 -0.101562 -0.374922\nv 0.496935 -0.101562 -0.375\nv 0.5 -0.101562 -0.370569\nv -0.303984 -0.09375 -0.375\nv -0.304688 -0.0907195 -0.375\nv -0.304688 -0.09375 -0.374684\nv -0.259231 -0.09375 -0.375\nv -0.257812 -0.0906123 -0.375\nv -0.257812 -0.09375 -0.374915\nv -0.25 -0.0923892 -0.375\nv -0.25 -0.09375 -0.374992\nv -0.242188 -0.09375 -0.374375\nv -0.234375 -0.09375 -0.37251\nv -0.226562 -0.09375 -0.369906\nv 0.390625 -0.09375 -0.367726\nv 0.398438 -0.09375 -0.371141\nv 0.40625 -0.09375 -0.373607\nv 0.41907 -0.09375 -0.375\nv 0.414062 -0.0887653 -0.375\nv 0.414062 -0.09375 -0.374553\nv 0.497727 -0.09375 -0.375\nv 0.5 -0.0868566 -0.375\nv 0.5 -0.09375 -0.371869\nv -0.305486 -0.0859375 -0.375\nv -0.249607 -0.0859375 -0.375\nv -0.242188 -0.0859375 -0.374298\nv -0.234375 -0.0859375 -0.372609\nv -0.226562 -0.0859375 -0.370337\nv 0.390625 -0.0859375 -0.368522\nv 0.398438 -0.0859375 -0.371822\nv 0.411733 -0.0859375 -0.375\nv 0.40625 -0.0859375 -0.374328\nv 0.500127 -0.0859375 -0.375\nv -0.306654 -0.078125 -0.375\nv -0.3125 -0.078125 -0.368658\nv -0.24831 -0.078125 -0.375\nv -0.242188 -0.0731595 -0.375\nv -0.242188 -0.078125 -0.374484\nv -0.234375 -0.078125 -0.373187\nv -0.226562 -0.078125 -0.371357\nv -0.21875 -0.078125 -0.368473\nv 0.390625 -0.078125 -0.369067\nv 0.398438 -0.078125 -0.372149\nv 0.409631 -0.078125 -0.375\nv 0.40625 -0.078125 -0.374504\nv 0.500878 -0.078125 -0.375\nv -0.30784 -0.0703125 -0.375\nv -0.3125 -0.0703125 -0.370419\nv -0.240098 -0.0703125 -0.375\nv -0.234375 -0.0703125 -0.374161\nv -0.226562 -0.0703125 -0.373166\nv -0.21875 -0.0703125 -0.370931\nv 0.390625 -0.0703125 -0.369668\nv 0.398438 -0.0703125 -0.37267\nv 0.40689 -0.0703125 -0.375\nv 0.40625 -0.0693383 -0.375\nv 0.40625 -0.0703125 -0.374869\nv 0.501275 -0.0703125 -0.375\nv -0.307815 -0.0625 -0.375\nv -0.3125 -0.0625 -0.370925\nv -0.237993 -0.0625 -0.375\nv -0.234375 -0.0625 -0.374495\nv -0.226562 -0.0625 -0.373662\nv -0.21875 -0.0625 -0.371452\nv -0.210938 -0.0625 -0.368008\nv 0.382812 -0.0625 -0.368532\nv 0.390625 -0.0625 -0.371035\nv 0.402444 -0.0625 -0.375\nv 0.398438 -0.0625 -0.373957\nv 0.501724 -0.0625 -0.375\nv -0.306369 -0.0546875 -0.375\nv -0.3125 -0.0546875 -0.369546\nv -0.236533 -0.0546875 -0.375\nv -0.234375 -0.0495017 -0.375\nv -0.234375 -0.0546875 -0.374702\nv -0.226562 -0.0546875 -0.373687\nv -0.21875 -0.0546875 -0.371341\nv -0.210938 -0.0546875 -0.368731\nv -0.203125 -0.0546875 -0.367617\nv -0.1875 -0.0546875 -0.367324\nv -0.179688 -0.0546875 -0.367278\nv 0.132812 -0.0546875 -0.367569\nv 0.140625 -0.0546875 -0.368022\nv 0.148438 -0.0546875 -0.368275\nv 0.15625 -0.0546875 -0.368435\nv 0.164062 -0.0546875 -0.368621\nv 0.171875 -0.0546875 -0.368752\nv 0.179688 -0.0546875 -0.368753\nv 0.1875 -0.0546875 -0.368706\nv 0.195312 -0.0546875 -0.368691\nv 0.203125 -0.0546875 -0.368697\nv 0.210938 -0.0546875 -0.368693\nv 0.21875 -0.0546875 -0.368653\nv 0.226562 -0.0546875 -0.368627\nv 0.234375 -0.0546875 -0.368626\nv 0.242188 -0.0546875 -0.368511\nv 0.25 -0.0546875 -0.368373\nv 0.257812 -0.0546875 -0.368246\nv 0.265625 -0.0546875 -0.36838\nv 0.273438 -0.0546875 -0.368519\nv 0.28125 -0.0546875 -0.368216\nv 0.289062 -0.0546875 -0.367968\nv 0.296875 -0.0546875 -0.367936\nv 0.304688 -0.0546875 -0.36751\nv 0.367188 -0.0546875 -0.36735\nv 0.375 -0.0546875 -0.367756\nv 0.382812 -0.0546875 -0.369835\nv 0.390625 -0.0546875 -0.372183\nv 0.39863 -0.0546875 -0.375\nv 0.398438 -0.0542282 -0.375\nv 0.398438 -0.0546875 -0.374953\nv 0.501818 -0.0546875 -0.375\nv -0.305573 -0.046875 -0.375\nv -0.3125 -0.046875 -0.368334\nv -0.233318 -0.046875 -0.375\nv -0.226562 -0.046875 -0.373915\nv -0.21875 -0.046875 -0.371478\nv -0.210938 -0.046875 -0.369606\nv -0.203125 -0.046875 -0.369258\nv -0.195312 -0.046875 -0.369232\nv -0.1875 -0.046875 -0.369331\nv -0.179688 -0.046875 -0.369365\nv -0.171875 -0.046875 -0.369347\nv -0.164062 -0.046875 -0.369402\nv -0.15625 -0.046875 -0.368187\nv 0.101562 -0.046875 -0.367718\nv 0.109375 -0.046875 -0.368336\nv 0.117188 -0.046875 -0.368873\nv 0.125 -0.046875 -0.36926\nv 0.132812 -0.046875 -0.369635\nv 0.140625 -0.046875 -0.370081\nv 0.148438 -0.046875 -0.370493\nv 0.15625 -0.046875 -0.370818\nv 0.164062 -0.046875 -0.370997\nv 0.171875 -0.046875 -0.371115\nv 0.179688 -0.046875 -0.371158\nv 0.1875 -0.046875 -0.371181\nv 0.195312 -0.046875 -0.371174\nv 0.203125 -0.046875 -0.371135\nv 0.210938 -0.046875 -0.371059\nv 0.21875 -0.046875 -0.371013\nv 0.226562 -0.046875 -0.37096\nv 0.234375 -0.046875 -0.370902\nv 0.242188 -0.046875 -0.370865\nv 0.25 -0.046875 -0.370753\nv 0.257812 -0.046875 -0.370645\nv 0.265625 -0.046875 -0.370658\nv 0.273438 -0.046875 -0.370783\nv 0.28125 -0.046875 -0.37056\nv 0.289062 -0.046875 -0.370037\nv 0.296875 -0.046875 -0.369735\nv 0.304688 -0.046875 -0.369497\nv 0.3125 -0.046875 -0.369209\nv 0.320312 -0.046875 -0.369227\nv 0.328125 -0.046875 -0.369242\nv 0.335938 -0.046875 -0.369301\nv 0.34375 -0.046875 -0.369374\nv 0.351562 -0.046875 -0.369523\nv 0.359375 -0.046875 -0.369643\nv 0.367188 -0.046875 -0.369645\nv 0.375 -0.046875 -0.369711\nv 0.382812 -0.046875 -0.371148\nv 0.396398 -0.046875 -0.375\nv 0.390625 -0.046875 -0.373139\nv 0.500638 -0.046875 -0.375\nv 0.5 -0.043824 -0.375\nv -0.305137 -0.0390625 -0.375\nv -0.3125 -0.0390625 -0.367665\nv -0.304688 -0.0326826 -0.375\nv -0.231364 -0.0390625 -0.375\nv -0.226562 -0.0390625 -0.373983\nv -0.21875 -0.0390625 -0.371508\nv -0.210938 -0.0390625 -0.37053\nv -0.203125 -0.0390625 -0.370502\nv -0.195312 -0.0390625 -0.370788\nv -0.1875 -0.0390625 -0.370621\nv -0.179688 -0.0390625 -0.370584\nv -0.171875 -0.0390625 -0.370613\nv -0.164062 -0.0390625 -0.37057\nv -0.15625 -0.0390625 -0.370038\nv -0.148438 -0.0390625 -0.369253\nv -0.140625 -0.0390625 -0.368582\nv -0.132812 -0.0390625 -0.36861\nv -0.125 -0.0390625 -0.368567\nv -0.117188 -0.0390625 -0.368661\nv -0.109375 -0.0390625 -0.36856\nv -0.101562 -0.0390625 -0.36843\nv -0.09375 -0.0390625 -0.368412\nv -0.0859375 -0.0390625 -0.368288\nv -0.078125 -0.0390625 -0.368022\nv -0.0703125 -0.0390625 -0.367712\nv -0.0625 -0.0390625 -0.367465\nv -0.0546875 -0.0390625 -0.367356\nv -0.046875 -0.0390625 -0.367531\nv -0.0390625 -0.0390625 -0.367798\nv -0.03125 -0.0390625 -0.367808\nv -0.0234375 -0.0390625 -0.367641\nv -0.015625 -0.0390625 -0.367417\nv -0.0078125 -0.0390625 -0.367206\nv 0.0078125 -0.0390625 -0.367568\nv 0.015625 -0.0390625 -0.367935\nv 0.0234375 -0.0390625 -0.367893\nv 0.03125 -0.0390625 -0.367767\nv 0.0390625 -0.0390625 -0.367648\nv 0.046875 -0.0390625 -0.367557\nv 0.0546875 -0.0390625 -0.36749\nv 0.0625 -0.0390625 -0.367571\nv 0.0703125 -0.0390625 -0.367734\nv 0.078125 -0.0390625 -0.367904\nv 0.0859375 -0.0390625 -0.36804\nv 0.09375 -0.0390625 -0.368526\nv 0.101562 -0.0390625 -0.369159\nv 0.109375 -0.0390625 -0.36981\nv 0.117188 -0.0390625 -0.370373\nv 0.125 -0.0390625 -0.370747\nv 0.132812 -0.0390625 -0.371081\nv 0.140625 -0.0390625 -0.371516\nv 0.148438 -0.0390625 -0.3719\nv 0.15625 -0.0390625 -0.372254\nv 0.164062 -0.0390625 -0.372579\nv 0.171875 -0.0390625 -0.372666\nv 0.179688 -0.0390625 -0.372709\nv 0.1875 -0.0390625 -0.372736\nv 0.195312 -0.0390625 -0.372727\nv 0.203125 -0.0390625 -0.372618\nv 0.210938 -0.0390625 -0.372553\nv 0.21875 -0.0390625 -0.372508\nv 0.226562 -0.0390625 -0.372452\nv 0.234375 -0.0390625 -0.372376\nv 0.242188 -0.0390625 -0.372312\nv 0.25 -0.0390625 -0.372198\nv 0.257812 -0.0390625 -0.372045\nv 0.265625 -0.0390625 -0.371977\nv 0.273438 -0.0390625 -0.37209\nv 0.28125 -0.0390625 -0.372047\nv 0.289062 -0.0390625 -0.371576\nv 0.296875 -0.0390625 -0.371275\nv 0.304688 -0.0390625 -0.371081\nv 0.3125 -0.0390625 -0.370841\nv 0.320312 -0.0390625 -0.370907\nv 0.328125 -0.0390625 -0.370958\nv 0.335938 -0.0390625 -0.371122\nv 0.34375 -0.0390625 -0.37118\nv 0.351562 -0.0390625 -0.371352\nv 0.359375 -0.0390625 -0.371419\nv 0.367188 -0.0390625 -0.371438\nv 0.375 -0.0390625 -0.371552\nv 0.382812 -0.0390625 -0.372618\nv 0.393771 -0.0390625 -0.375\nv 0.390625 -0.0390625 -0.374161\nv 0.498257 -0.0390625 -0.375\nv 0.5 -0.0390625 -0.373366\nv -0.3125 -0.03125 -0.367984\nv -0.304501 -0.03125 -0.375\nv -0.304688 -0.03125 -0.374936\nv -0.23123 -0.03125 -0.375\nv -0.226562 -0.03125 -0.373734\nv -0.21875 -0.03125 -0.371758\nv -0.210938 -0.03125 -0.371178\nv -0.203125 -0.03125 -0.371364\nv -0.195312 -0.03125 -0.371546\nv -0.1875 -0.03125 -0.371428\nv -0.179688 -0.03125 -0.371261\nv -0.171875 -0.03125 -0.370983\nv -0.164062 -0.03125 -0.37081\nv -0.15625 -0.03125 -0.370345\nv -0.148438 -0.03125 -0.369917\nv -0.140625 -0.03125 -0.369669\nv -0.132812 -0.03125 -0.369694\nv -0.125 -0.03125 -0.369685\nv -0.117188 -0.03125 -0.369608\nv -0.109375 -0.03125 -0.369454\nv -0.101562 -0.03125 -0.369273\nv -0.09375 -0.03125 -0.36922\nv -0.0859375 -0.03125 -0.369058\nv -0.078125 -0.03125 -0.368839\nv -0.0703125 -0.03125 -0.368585\nv -0.0625 -0.03125 -0.368405\nv -0.0546875 -0.03125 -0.368348\nv -0.046875 -0.03125 -0.36838\nv -0.0390625 -0.03125 -0.368507\nv -0.03125 -0.03125 -0.368523\nv -0.0234375 -0.03125 -0.368392\nv -0.015625 -0.03125 -0.368177\nv -0.0078125 -0.03125 -0.367901\nv 0 -0.03125 -0.367893\nv 0.0078125 -0.03125 -0.36832\nv 0.015625 -0.03125 -0.368756\nv 0.0234375 -0.03125 -0.368779\nv 0.03125 -0.03125 -0.368647\nv 0.0390625 -0.03125 -0.368508\nv 0.046875 -0.03125 -0.368451\nv 0.0546875 -0.03125 -0.368324\nv 0.0625 -0.03125 -0.368385\nv 0.0703125 -0.03125 -0.368499\nv 0.078125 -0.03125 -0.368649\nv 0.0859375 -0.03125 -0.368802\nv 0.09375 -0.03125 -0.369063\nv 0.101562 -0.03125 -0.36961\nv 0.109375 -0.03125 -0.37017\nv 0.117188 -0.03125 -0.370631\nv 0.125 -0.03125 -0.370989\nv 0.132812 -0.03125 -0.371315\nv 0.140625 -0.03125 -0.37174\nv 0.148438 -0.03125 -0.372103\nv 0.15625 -0.03125 -0.372446\nv 0.164062 -0.03125 -0.372794\nv 0.171875 -0.03125 -0.373044\nv 0.179688 -0.03125 -0.373036\nv 0.1875 -0.03125 -0.373019\nv 0.195312 -0.03125 -0.373055\nv 0.203125 -0.03125 -0.37299\nv 0.210938 -0.03125 -0.372955\nv 0.21875 -0.03125 -0.372906\nv 0.226562 -0.03125 -0.372877\nv 0.234375 -0.03125 -0.372826\nv 0.242188 -0.03125 -0.372765\nv 0.25 -0.03125 -0.37263\nv 0.257812 -0.03125 -0.372458\nv 0.265625 -0.03125 -0.37239\nv 0.273438 -0.03125 -0.372511\nv 0.28125 -0.03125 -0.372496\nv 0.289062 -0.03125 -0.372073\nv 0.296875 -0.03125 -0.371858\nv 0.304688 -0.03125 -0.371762\nv 0.3125 -0.03125 -0.371652\nv 0.320312 -0.03125 -0.371751\nv 0.328125 -0.03125 -0.371766\nv 0.335938 -0.03125 -0.371812\nv 0.34375 -0.03125 -0.37193\nv 0.351562 -0.03125 -0.371965\nv 0.359375 -0.03125 -0.372\nv 0.367188 -0.03125 -0.372147\nv 0.375 -0.03125 -0.372301\nv 0.382812 -0.03125 -0.373243\nv 0.391111 -0.03125 -0.375\nv 0.390625 -0.0254536 -0.375\nv 0.390625 -0.03125 -0.374901\nv 0.495939 -0.03125 -0.375\nv 0.5 -0.03125 -0.371168\nv -0.3125 -0.0234375 -0.367986\nv -0.303862 -0.0234375 -0.375\nv -0.304688 -0.0234375 -0.374705\nv -0.231465 -0.0234375 -0.375\nv -0.226562 -0.0234375 -0.373743\nv -0.21875 -0.0234375 -0.37246\nv -0.210938 -0.0234375 -0.371543\nv -0.203125 -0.0234375 -0.371774\nv -0.195312 -0.0234375 -0.372085\nv -0.1875 -0.0234375 -0.372024\nv -0.179688 -0.0234375 -0.371714\nv -0.171875 -0.0234375 -0.371544\nv -0.164062 -0.0234375 -0.371512\nv -0.15625 -0.0234375 -0.371288\nv -0.148438 -0.0234375 -0.370851\nv -0.140625 -0.0234375 -0.37066\nv -0.132812 -0.0234375 -0.370683\nv -0.125 -0.0234375 -0.37065\nv -0.117188 -0.0234375 -0.370497\nv -0.109375 -0.0234375 -0.370348\nv -0.101562 -0.0234375 -0.370214\nv -0.09375 -0.0234375 -0.370123\nv -0.0859375 -0.0234375 -0.369921\nv -0.078125 -0.0234375 -0.369691\nv -0.0703125 -0.0234375 -0.369419\nv -0.0625 -0.0234375 -0.369219\nv -0.0546875 -0.0234375 -0.369183\nv -0.046875 -0.0234375 -0.369223\nv -0.0390625 -0.0234375 -0.369365\nv -0.03125 -0.0234375 -0.369392\nv -0.0234375 -0.0234375 -0.369303\nv -0.015625 -0.0234375 -0.369075\nv -0.0078125 -0.0234375 -0.36873\nv 0 -0.0234375 -0.368626\nv 0.0078125 -0.0234375 -0.368907\nv 0.015625 -0.0234375 -0.36928\nv 0.0234375 -0.0234375 -0.369349\nv 0.03125 -0.0234375 -0.369221\nv 0.0390625 -0.0234375 -0.36909\nv 0.046875 -0.0234375 -0.369029\nv 0.0546875 -0.0234375 -0.368894\nv 0.0625 -0.0234375 -0.368885\nv 0.0703125 -0.0234375 -0.368976\nv 0.078125 -0.0234375 -0.369119\nv 0.0859375 -0.0234375 -0.369219\nv 0.09375 -0.0234375 -0.36942\nv 0.101562 -0.0234375 -0.369772\nv 0.109375 -0.0234375 -0.370219\nv 0.117188 -0.0234375 -0.370647\nv 0.125 -0.0234375 -0.370943\nv 0.132812 -0.0234375 -0.371239\nv 0.140625 -0.0234375 -0.371695\nv 0.148438 -0.0234375 -0.372103\nv 0.15625 -0.0234375 -0.372456\nv 0.164062 -0.0234375 -0.372787\nv 0.171875 -0.0234375 -0.373101\nv 0.179688 -0.0234375 -0.37324\nv 0.1875 -0.0234375 -0.373202\nv 0.195312 -0.0234375 -0.373189\nv 0.203125 -0.0234375 -0.373172\nv 0.210938 -0.0234375 -0.373164\nv 0.21875 -0.0234375 -0.373111\nv 0.226562 -0.0234375 -0.373113\nv 0.234375 -0.0234375 -0.373073\nv 0.242188 -0.0234375 -0.37301\nv 0.25 -0.0234375 -0.372873\nv 0.257812 -0.0234375 -0.372698\nv 0.265625 -0.0234375 -0.372645\nv 0.273438 -0.0234375 -0.372821\nv 0.28125 -0.0234375 -0.372984\nv 0.289062 -0.0234375 -0.372653\nv 0.296875 -0.0234375 -0.372527\nv 0.304688 -0.0234375 -0.372457\nv 0.3125 -0.0234375 -0.372456\nv 0.320312 -0.0234375 -0.372277\nv 0.328125 -0.0234375 -0.372312\nv 0.335938 -0.0234375 -0.372511\nv 0.34375 -0.0234375 -0.37258\nv 0.351562 -0.0234375 -0.372539\nv 0.359375 -0.0234375 -0.372518\nv 0.367188 -0.0234375 -0.372576\nv 0.375 -0.0234375 -0.37269\nv 0.390472 -0.0234375 -0.375\nv 0.382812 -0.0234375 -0.373518\nv 0.390625 -0.0226779 -0.375\nv 0.493891 -0.0234375 -0.375\nv 0.492188 -0.0165749 -0.375\nv 0.5 -0.0234375 -0.368946\nv -0.3125 -0.015625 -0.368548\nv -0.302889 -0.015625 -0.375\nv -0.304688 -0.015625 -0.37437\nv -0.230384 -0.015625 -0.375\nv -0.226562 -0.015625 -0.374075\nv -0.21875 -0.015625 -0.372878\nv -0.210938 -0.015625 -0.372219\nv -0.203125 -0.015625 -0.372328\nv -0.195312 -0.015625 -0.372756\nv -0.1875 -0.015625 -0.372494\nv -0.179688 -0.015625 -0.372306\nv -0.171875 -0.015625 -0.372299\nv -0.164062 -0.015625 -0.372285\nv -0.15625 -0.015625 -0.372044\nv -0.148438 -0.015625 -0.371799\nv -0.140625 -0.015625 -0.371696\nv -0.132812 -0.015625 -0.371677\nv -0.125 -0.015625 -0.371571\nv -0.117188 -0.015625 -0.371391\nv -0.109375 -0.015625 -0.371189\nv -0.101562 -0.015625 -0.371185\nv -0.09375 -0.015625 -0.371132\nv -0.0859375 -0.015625 -0.370943\nv -0.078125 -0.015625 -0.370736\nv -0.0703125 -0.015625 -0.370455\nv -0.0625 -0.015625 -0.370218\nv -0.0546875 -0.015625 -0.370203\nv -0.046875 -0.015625 -0.370246\nv -0.0390625 -0.015625 -0.370323\nv -0.03125 -0.015625 -0.370313\nv -0.0234375 -0.015625 -0.370234\nv -0.015625 -0.015625 -0.37011\nv -0.0078125 -0.015625 -0.369791\nv 0 -0.015625 -0.369673\nv 0.0078125 -0.015625 -0.369785\nv 0.015625 -0.015625 -0.369998\nv 0.0234375 -0.015625 -0.37006\nv 0.03125 -0.015625 -0.369923\nv 0.0390625 -0.015625 -0.369794\nv 0.046875 -0.015625 -0.369678\nv 0.0546875 -0.015625 -0.369536\nv 0.0625 -0.015625 -0.369449\nv 0.0703125 -0.015625 -0.369499\nv 0.078125 -0.015625 -0.369637\nv 0.0859375 -0.015625 -0.369756\nv 0.09375 -0.015625 -0.369984\nv 0.101562 -0.015625 -0.370319\nv 0.109375 -0.015625 -0.370629\nv 0.117188 -0.015625 -0.37094\nv 0.125 -0.015625 -0.371209\nv 0.132812 -0.015625 -0.371476\nv 0.140625 -0.015625 -0.371916\nv 0.148438 -0.015625 -0.372287\nv 0.15625 -0.015625 -0.372561\nv 0.164062 -0.015625 -0.372816\nv 0.171875 -0.015625 -0.373015\nv 0.179688 -0.015625 -0.373198\nv 0.1875 -0.015625 -0.373239\nv 0.195312 -0.015625 -0.373152\nv 0.203125 -0.015625 -0.373081\nv 0.210938 -0.015625 -0.373109\nv 0.21875 -0.015625 -0.37302\nv 0.226562 -0.015625 -0.373047\nv 0.234375 -0.015625 -0.373033\nv 0.242188 -0.015625 -0.372982\nv 0.25 -0.015625 -0.372866\nv 0.257812 -0.015625 -0.372754\nv 0.265625 -0.015625 -0.372733\nv 0.273438 -0.015625 -0.372948\nv 0.28125 -0.015625 -0.373191\nv 0.289062 -0.015625 -0.372838\nv 0.296875 -0.015625 -0.372711\nv 0.304688 -0.015625 -0.372722\nv 0.3125 -0.015625 -0.372777\nv 0.320312 -0.015625 -0.372744\nv 0.328125 -0.015625 -0.37275\nv 0.335938 -0.015625 -0.372794\nv 0.34375 -0.015625 -0.372673\nv 0.351562 -0.015625 -0.372511\nv 0.359375 -0.015625 -0.372401\nv 0.367188 -0.015625 -0.372379\nv 0.375 -0.015625 -0.372589\nv 0.382812 -0.015625 -0.373283\nv 0.392262 -0.015625 -0.375\nv 0.390625 -0.015625 -0.374716\nv 0.491745 -0.015625 -0.375\nv 0.492188 -0.015625 -0.374843\nv 0.5 -0.015625 -0.367188\nv -0.3125 -0.0078125 -0.368144\nv -0.30277 -0.0078125 -0.375\nv -0.304688 -0.0078125 -0.374295\nv -0.233492 -0.0078125 -0.375\nv -0.226562 -0.0078125 -0.373652\nv -0.21875 -0.0078125 -0.372992\nv -0.210938 -0.0078125 -0.372536\nv -0.203125 -0.0078125 -0.372082\nv -0.195312 -0.0078125 -0.372154\nv -0.1875 -0.0078125 -0.371948\nv -0.179688 -0.0078125 -0.371964\nv -0.171875 -0.0078125 -0.372056\nv -0.164062 -0.0078125 -0.37224\nv -0.15625 -0.0078125 -0.372097\nv -0.148438 -0.0078125 -0.371908\nv -0.140625 -0.0078125 -0.371766\nv -0.132812 -0.0078125 -0.371817\nv -0.125 -0.0078125 -0.371815\nv -0.117188 -0.0078125 -0.371793\nv -0.109375 -0.0078125 -0.371554\nv -0.101562 -0.0078125 -0.371571\nv -0.09375 -0.0078125 -0.371472\nv -0.0859375 -0.0078125 -0.371287\nv -0.078125 -0.0078125 -0.371085\nv -0.0703125 -0.0078125 -0.370832\nv -0.0625 -0.0078125 -0.370587\nv -0.0546875 -0.0078125 -0.370521\nv -0.046875 -0.0078125 -0.370542\nv -0.0390625 -0.0078125 -0.370544\nv -0.03125 -0.0078125 -0.370441\nv -0.0234375 -0.0078125 -0.370332\nv -0.015625 -0.0078125 -0.370207\nv -0.0078125 -0.0078125 -0.369986\nv 0 -0.0078125 -0.370003\nv 0.0078125 -0.0078125 -0.370067\nv 0.015625 -0.0078125 -0.37017\nv 0.0234375 -0.0078125 -0.370167\nv 0.03125 -0.0078125 -0.369978\nv 0.0390625 -0.0078125 -0.369851\nv 0.046875 -0.0078125 -0.369775\nv 0.0546875 -0.0078125 -0.369669\nv 0.0625 -0.0078125 -0.369512\nv 0.0703125 -0.0078125 -0.369556\nv 0.078125 -0.0078125 -0.369656\nv 0.0859375 -0.0078125 -0.36971\nv 0.09375 -0.0078125 -0.369848\nv 0.101562 -0.0078125 -0.370105\nv 0.109375 -0.0078125 -0.370391\nv 0.117188 -0.0078125 -0.370631\nv 0.125 -0.0078125 -0.370761\nv 0.132812 -0.0078125 -0.370973\nv 0.140625 -0.0078125 -0.371347\nv 0.148438 -0.0078125 -0.37166\nv 0.15625 -0.0078125 -0.371917\nv 0.164062 -0.0078125 -0.372103\nv 0.171875 -0.0078125 -0.372223\nv 0.179688 -0.0078125 -0.372337\nv 0.1875 -0.0078125 -0.372444\nv 0.195312 -0.0078125 -0.372408\nv 0.203125 -0.0078125 -0.372272\nv 0.210938 -0.0078125 -0.372224\nv 0.21875 -0.0078125 -0.372154\nv 0.226562 -0.0078125 -0.372155\nv 0.234375 -0.0078125 -0.372129\nv 0.242188 -0.0078125 -0.372023\nv 0.25 -0.0078125 -0.371866\nv 0.257812 -0.0078125 -0.371731\nv 0.265625 -0.0078125 -0.371744\nv 0.273438 -0.0078125 -0.371945\nv 0.28125 -0.0078125 -0.372146\nv 0.289062 -0.0078125 -0.371894\nv 0.296875 -0.0078125 -0.371847\nv 0.304688 -0.0078125 -0.371962\nv 0.3125 -0.0078125 -0.372093\nv 0.320312 -0.0078125 -0.37233\nv 0.328125 -0.0078125 -0.372419\nv 0.335938 -0.0078125 -0.372359\nv 0.34375 -0.0078125 -0.372157\nv 0.351562 -0.0078125 -0.371851\nv 0.359375 -0.0078125 -0.371653\nv 0.367188 -0.0078125 -0.371798\nv 0.375 -0.0078125 -0.372072\nv 0.382812 -0.0078125 -0.37276\nv 0.396722 -0.0078125 -0.375\nv 0.390625 -0.0078125 -0.374166\nv 0.398438 -0.00615208 -0.375\nv 0.40625 -0.00539607 -0.375\nv 0.414062 -0.00539428 -0.375\nv 0.421875 -0.0038659 -0.375\nv 0.429688 -0.00232797 -0.375\nv 0.4375 -0.00213009 -0.375\nv 0.445312 -0.00205112 -0.375\nv 0.453125 -0.0044573 -0.375\nv 0.460938 -0.00761114 -0.375\nv 0.46875 -0.00231798 -0.375\nv 0.489041 -0.0078125 -0.375\nv 0.492188 -0.0078125 -0.374089\nv -0.3125 0 -0.367379\nv -0.302827 0 -0.375\nv -0.304688 0 -0.374199\nv -0.234238 0 -0.375\nv -0.234375 0.00338053 -0.375\nv -0.226562 0 -0.373162\nv -0.21875 0 -0.372535\nv -0.210938 0 -0.371946\nv -0.203125 0 -0.371348\nv -0.195312 0 -0.370981\nv -0.1875 0 -0.37111\nv -0.179688 0 -0.37105\nv -0.171875 0 -0.371264\nv -0.164062 0 -0.371716\nv -0.15625 0 -0.371607\nv -0.148438 0 -0.371479\nv -0.140625 0 -0.37147\nv -0.132812 0 -0.37154\nv -0.125 0 -0.371523\nv -0.117188 0 -0.371529\nv -0.109375 0 -0.371376\nv -0.101562 0 -0.371311\nv -0.09375 0 -0.37122\nv -0.0859375 0 -0.370957\nv -0.078125 0 -0.370675\nv -0.0703125 0 -0.370402\nv -0.0625 0 -0.370098\nv -0.0546875 0 -0.369934\nv -0.046875 0 -0.369876\nv -0.0390625 0 -0.369764\nv -0.03125 0 -0.369535\nv -0.0234375 0 -0.369236\nv -0.015625 0 -0.369062\nv -0.0078125 0 -0.36874\nv 0 0 -0.368789\nv 0.0078125 0 -0.368952\nv 0.015625 0 -0.368982\nv 0.0234375 0 -0.369022\nv 0.03125 0 -0.368874\nv 0.0390625 0 -0.368754\nv 0.046875 0 -0.368656\nv 0.0546875 0 -0.368528\nv 0.0625 0 -0.368277\nv 0.0703125 0 -0.368202\nv 0.078125 0 -0.368231\nv 0.0859375 0 -0.368277\nv 0.09375 0 -0.368491\nv 0.101562 0 -0.368795\nv 0.109375 0 -0.369108\nv 0.117188 0 -0.36937\nv 0.125 0 -0.369513\nv 0.132812 0 -0.369645\nv 0.140625 0 -0.370007\nv 0.148438 0 -0.370298\nv 0.15625 0 -0.370531\nv 0.164062 0 -0.370728\nv 0.171875 0 -0.370912\nv 0.179688 0 -0.37102\nv 0.1875 0 -0.371101\nv 0.195312 0 -0.371089\nv 0.203125 0 -0.371054\nv 0.210938 0 -0.371016\nv 0.21875 0 -0.370887\nv 0.226562 0 -0.370837\nv 0.234375 0 -0.37075\nv 0.242188 0 -0.370626\nv 0.25 0 -0.37042\nv 0.257812 0 -0.370261\nv 0.265625 0 -0.370328\nv 0.273438 0 -0.370602\nv 0.28125 0 -0.370712\nv 0.289062 0 -0.370601\nv 0.296875 0 -0.370684\nv 0.304688 0 -0.370927\nv 0.3125 0 -0.3713\nv 0.320312 0 -0.371636\nv 0.328125 0 -0.371731\nv 0.335938 0 -0.371694\nv 0.34375 0 -0.371619\nv 0.351562 0 -0.3715\nv 0.359375 0 -0.37152\nv 0.367188 0 -0.37165\nv 0.375 0 -0.371835\nv 0.382812 0 -0.372318\nv 0.390625 0 -0.373424\nv 0.398438 0 -0.374144\nv 0.40625 0 -0.374137\nv 0.414062 0 -0.374223\nv 0.421875 0 -0.374315\nv 0.429688 0 -0.374587\nv 0.4375 0 -0.374656\nv 0.445312 0 -0.374752\nv 0.453125 0 -0.374504\nv 0.460938 0 -0.374534\nv 0.47111 0 -0.375\nv 0.46875 0.00212132 -0.375\nv 0.46875 0 -0.374878\nv 0.488943 0 -0.375\nv 0.492188 0 -0.374149\nv 0.5 0 -0.367412\nv -0.302942 0.0078125 -0.375\nv -0.304688 0.0078125 -0.374107\nv -0.234544 0.0078125 -0.375\nv -0.234375 0.0078125 -0.374961\nv -0.226562 0.0078125 -0.373258\nv -0.21875 0.0078125 -0.3723\nv -0.210938 0.0078125 -0.371359\nv -0.203125 0.0078125 -0.370515\nv -0.195312 0.0078125 -0.369796\nv -0.1875 0.0078125 -0.369721\nv -0.179688 0.0078125 -0.370139\nv -0.171875 0.0078125 -0.370613\nv -0.164062 0.0078125 -0.371404\nv -0.15625 0.0078125 -0.37152\nv -0.148438 0.0078125 -0.37135\nv -0.140625 0.0078125 -0.371418\nv -0.132812 0.0078125 -0.371471\nv -0.125 0.0078125 -0.37139\nv -0.117188 0.0078125 -0.371384\nv -0.109375 0.0078125 -0.371373\nv -0.101562 0.0078125 -0.371403\nv -0.09375 0.0078125 -0.371263\nv -0.0859375 0.0078125 -0.370998\nv -0.078125 0.0078125 -0.370653\nv -0.0703125 0.0078125 -0.370288\nv -0.0625 0.0078125 -0.369841\nv -0.0546875 0.0078125 -0.369581\nv -0.046875 0.0078125 -0.369415\nv -0.0390625 0.0078125 -0.369251\nv -0.03125 0.0078125 -0.368993\nv -0.0234375 0.0078125 -0.36861\nv -0.015625 0.0078125 -0.368343\nv -0.0078125 0.0078125 -0.36805\nv 0 0.0078125 -0.368088\nv 0.0078125 0.0078125 -0.368256\nv 0.015625 0.0078125 -0.368219\nv 0.0234375 0.0078125 -0.368325\nv 0.03125 0.0078125 -0.368212\nv 0.0390625 0.0078125 -0.368051\nv 0.046875 0.0078125 -0.367862\nv 0.0546875 0.0078125 -0.36765\nv 0.0625 0.0078125 -0.367368\nv 0.0703125 0.0078125 -0.367378\nv 0.078125 0.0078125 -0.367456\nv 0.0859375 0.0078125 -0.367531\nv 0.09375 0.0078125 -0.367762\nv 0.101562 0.0078125 -0.368061\nv 0.109375 0.0078125 -0.368375\nv 0.117188 0.0078125 -0.36859\nv 0.125 0.0078125 -0.368669\nv 0.132812 0.0078125 -0.368741\nv 0.140625 0.0078125 -0.368933\nv 0.148438 0.0078125 -0.369097\nv 0.15625 0.0078125 -0.369314\nv 0.164062 0.0078125 -0.369567\nv 0.171875 0.0078125 -0.369681\nv 0.179688 0.0078125 -0.369642\nv 0.1875 0.0078125 -0.369564\nv 0.195312 0.0078125 -0.369489\nv 0.203125 0.0078125 -0.369355\nv 0.210938 0.0078125 -0.369225\nv 0.21875 0.0078125 -0.369101\nv 0.226562 0.0078125 -0.369109\nv 0.234375 0.0078125 -0.369021\nv 0.242188 0.0078125 -0.368941\nv 0.25 0.0078125 -0.368863\nv 0.257812 0.0078125 -0.368791\nv 0.265625 0.0078125 -0.368947\nv 0.273438 0.0078125 -0.369221\nv 0.28125 0.0078125 -0.369278\nv 0.289062 0.0078125 -0.369128\nv 0.296875 0.0078125 -0.369171\nv 0.304688 0.0078125 -0.369407\nv 0.3125 0.0078125 -0.369878\nv 0.320312 0.0078125 -0.370107\nv 0.328125 0.0078125 -0.37025\nv 0.335938 0.0078125 -0.370334\nv 0.34375 0.0078125 -0.370301\nv 0.351562 0.0078125 -0.370452\nv 0.359375 0.0078125 -0.370708\nv 0.367188 0.0078125 -0.370975\nv 0.375 0.0078125 -0.371227\nv 0.382812 0.0078125 -0.371699\nv 0.390625 0.0078125 -0.37253\nv 0.398438 0.0078125 -0.373206\nv 0.40625 0.0078125 -0.373145\nv 0.414062 0.0078125 -0.37281\nv 0.421875 0.0078125 -0.372706\nv 0.429688 0.0078125 -0.373095\nv 0.4375 0.0078125 -0.373201\nv 0.445312 0.0078125 -0.373649\nv 0.453125 0.0078125 -0.374002\nv 0.465718 0.0078125 -0.375\nv 0.460938 0.0078125 -0.374466\nv 0.46875 0.0150541 -0.375\nv 0.489992 0.0078125 -0.375\nv 0.492188 0.0078125 -0.374317\nv -0.30335 0.015625 -0.375\nv -0.304688 0.0232717 -0.375\nv -0.304688 0.015625 -0.37428\nv -0.234888 0.015625 -0.375\nv -0.234375 0.015625 -0.374897\nv -0.226562 0.015625 -0.373317\nv -0.21875 0.015625 -0.372567\nv -0.210938 0.015625 -0.371673\nv -0.203125 0.015625 -0.370633\nv -0.195312 0.015625 -0.369792\nv -0.1875 0.015625 -0.369275\nv -0.179688 0.015625 -0.369351\nv -0.171875 0.015625 -0.370313\nv -0.164062 0.015625 -0.37145\nv -0.15625 0.015625 -0.371882\nv -0.148438 0.015625 -0.371513\nv -0.140625 0.015625 -0.371538\nv -0.132812 0.015625 -0.371657\nv -0.125 0.015625 -0.371727\nv -0.117188 0.015625 -0.371947\nv -0.109375 0.015625 -0.372121\nv -0.101562 0.015625 -0.372405\nv -0.09375 0.015625 -0.372197\nv -0.0859375 0.015625 -0.371923\nv -0.078125 0.015625 -0.371448\nv -0.0703125 0.015625 -0.371013\nv -0.0625 0.015625 -0.370639\nv -0.0546875 0.015625 -0.370341\nv -0.046875 0.015625 -0.370133\nv -0.0390625 0.015625 -0.369883\nv -0.03125 0.015625 -0.369525\nv -0.0234375 0.015625 -0.369044\nv -0.015625 0.015625 -0.368615\nv -0.0078125 0.015625 -0.368264\nv 0 0.015625 -0.368335\nv 0.0078125 0.015625 -0.368565\nv 0.015625 0.015625 -0.368617\nv 0.0234375 0.015625 -0.368743\nv 0.03125 0.015625 -0.368803\nv 0.0390625 0.015625 -0.368814\nv 0.046875 0.015625 -0.368809\nv 0.0546875 0.015625 -0.368777\nv 0.0625 0.015625 -0.368593\nv 0.0703125 0.015625 -0.368599\nv 0.078125 0.015625 -0.368616\nv 0.0859375 0.015625 -0.368541\nv 0.09375 0.015625 -0.368556\nv 0.101562 0.015625 -0.368627\nv 0.109375 0.015625 -0.368697\nv 0.117188 0.015625 -0.368712\nv 0.125 0.015625 -0.36863\nv 0.132812 0.015625 -0.368522\nv 0.140625 0.015625 -0.368547\nv 0.148438 0.015625 -0.368537\nv 0.15625 0.015625 -0.368494\nv 0.164062 0.015625 -0.368461\nv 0.171875 0.015625 -0.368389\nv 0.179688 0.015625 -0.368291\nv 0.1875 0.015625 -0.368187\nv 0.195312 0.015625 -0.368148\nv 0.203125 0.015625 -0.36809\nv 0.210938 0.015625 -0.368021\nv 0.21875 0.015625 -0.367923\nv 0.226562 0.015625 -0.367839\nv 0.234375 0.015625 -0.367905\nv 0.242188 0.015625 -0.367914\nv 0.25 0.015625 -0.367916\nv 0.257812 0.015625 -0.367884\nv 0.265625 0.015625 -0.368\nv 0.273438 0.015625 -0.368257\nv 0.28125 0.015625 -0.368165\nv 0.289062 0.015625 -0.367946\nv 0.296875 0.015625 -0.367891\nv 0.304688 0.015625 -0.368103\nv 0.3125 0.015625 -0.36835\nv 0.320312 0.015625 -0.368272\nv 0.328125 0.015625 -0.368393\nv 0.335938 0.015625 -0.368662\nv 0.34375 0.015625 -0.368924\nv 0.351562 0.015625 -0.369277\nv 0.359375 0.015625 -0.369567\nv 0.367188 0.015625 -0.369835\nv 0.375 0.015625 -0.370128\nv 0.382812 0.015625 -0.370506\nv 0.390625 0.015625 -0.371148\nv 0.398438 0.015625 -0.371721\nv 0.40625 0.015625 -0.371739\nv 0.414062 0.015625 -0.371442\nv 0.421875 0.015625 -0.3713\nv 0.429688 0.015625 -0.37147\nv 0.4375 0.015625 -0.371872\nv 0.445312 0.015625 -0.372806\nv 0.453125 0.015625 -0.373645\nv 0.460938 0.015625 -0.374254\nv 0.469014 0.015625 -0.375\nv 0.46875 0.015625 -0.374972\nv 0.488995 0.015625 -0.375\nv 0.492188 0.015625 -0.373858\nv -0.304711 0.0234375 -0.375\nv -0.3125 0.0234375 -0.367438\nv -0.234621 0.0234375 -0.375\nv -0.234375 0.0234375 -0.37495\nv -0.226562 0.0234375 -0.373408\nv -0.21875 0.0234375 -0.372769\nv -0.210938 0.0234375 -0.37223\nv -0.203125 0.0234375 -0.371253\nv -0.195312 0.0234375 -0.370285\nv -0.1875 0.0234375 -0.369822\nv -0.179688 0.0234375 -0.369853\nv -0.171875 0.0234375 -0.37053\nv -0.164062 0.0234375 -0.371746\nv -0.15625 0.0234375 -0.372117\nv -0.148438 0.0234375 -0.371672\nv -0.140625 0.0234375 -0.371777\nv -0.132812 0.0234375 -0.372054\nv -0.125 0.0234375 -0.372264\nv -0.117188 0.0234375 -0.372592\nv -0.109375 0.0234375 -0.372864\nv -0.101562 0.0234375 -0.373199\nv -0.09375 0.0234375 -0.373137\nv -0.0859375 0.0234375 -0.372691\nv -0.078125 0.0234375 -0.372253\nv -0.0703125 0.0234375 -0.371845\nv -0.0625 0.0234375 -0.371594\nv -0.0546875 0.0234375 -0.37138\nv -0.046875 0.0234375 -0.37118\nv -0.0390625 0.0234375 -0.370992\nv -0.03125 0.0234375 -0.370714\nv -0.0234375 0.0234375 -0.370409\nv -0.015625 0.0234375 -0.370112\nv -0.0078125 0.0234375 -0.369859\nv 0 0.0234375 -0.370023\nv 0.0078125 0.0234375 -0.370234\nv 0.015625 0.0234375 -0.370162\nv 0.0234375 0.0234375 -0.370176\nv 0.03125 0.0234375 -0.370087\nv 0.0390625 0.0234375 -0.369994\nv 0.046875 0.0234375 -0.369871\nv 0.0546875 0.0234375 -0.369725\nv 0.0625 0.0234375 -0.369394\nv 0.0703125 0.0234375 -0.36924\nv 0.078125 0.0234375 -0.369123\nv 0.0859375 0.0234375 -0.368983\nv 0.09375 0.0234375 -0.369022\nv 0.101562 0.0234375 -0.369008\nv 0.109375 0.0234375 -0.368982\nv 0.117188 0.0234375 -0.368885\nv 0.125 0.0234375 -0.368725\nv 0.132812 0.0234375 -0.368544\nv 0.140625 0.0234375 -0.368463\nv 0.148438 0.0234375 -0.368403\nv 0.15625 0.0234375 -0.368321\nv 0.164062 0.0234375 -0.368218\nv 0.171875 0.0234375 -0.368056\nv 0.179688 0.0234375 -0.367875\nv 0.1875 0.0234375 -0.367696\nv 0.195312 0.0234375 -0.367598\nv 0.203125 0.0234375 -0.367464\nv 0.210938 0.0234375 -0.367338\nv 0.21875 0.0234375 -0.367221\nv 0.226562 0.0234375 -0.36724\nv 0.234375 0.0234375 -0.367388\nv 0.242188 0.0234375 -0.367503\nv 0.25 0.0234375 -0.367546\nv 0.257812 0.0234375 -0.367506\nv 0.265625 0.0234375 -0.36749\nv 0.273438 0.0234375 -0.367604\nv 0.28125 0.0234375 -0.367383\nv 0.3125 0.0234375 -0.367608\nv 0.320312 0.0234375 -0.367813\nv 0.328125 0.0234375 -0.36805\nv 0.335938 0.0234375 -0.368159\nv 0.34375 0.0234375 -0.3682\nv 0.351562 0.0234375 -0.368373\nv 0.359375 0.0234375 -0.368836\nv 0.367188 0.0234375 -0.369287\nv 0.375 0.0234375 -0.369572\nv 0.382812 0.0234375 -0.369938\nv 0.390625 0.0234375 -0.370637\nv 0.398438 0.0234375 -0.371657\nv 0.40625 0.0234375 -0.371848\nv 0.414062 0.0234375 -0.371523\nv 0.421875 0.0234375 -0.371226\nv 0.429688 0.0234375 -0.3712\nv 0.4375 0.0234375 -0.371361\nv 0.445312 0.0234375 -0.372366\nv 0.453125 0.0234375 -0.373274\nv 0.460938 0.0234375 -0.373871\nv 0.471006 0.0234375 -0.375\nv 0.46875 0.0234375 -0.374792\nv 0.476562 0.0286724 -0.375\nv 0.4858 0.0234375 -0.375\nv 0.484375 0.0251721 -0.375\nv 0.492188 0.0234375 -0.372572\nv -0.305568 0.03125 -0.375\nv -0.3125 0.03125 -0.368036\nv -0.234874 0.03125 -0.375\nv -0.234375 0.0334311 -0.375\nv -0.234375 0.03125 -0.374886\nv -0.226562 0.03125 -0.373253\nv -0.21875 0.03125 -0.372816\nv -0.210938 0.03125 -0.372206\nv -0.203125 0.03125 -0.371316\nv -0.195312 0.03125 -0.370493\nv -0.1875 0.03125 -0.370166\nv -0.179688 0.03125 -0.370338\nv -0.171875 0.03125 -0.370948\nv -0.164062 0.03125 -0.371612\nv -0.15625 0.03125 -0.37196\nv -0.148438 0.03125 -0.371652\nv -0.140625 0.03125 -0.371696\nv -0.132812 0.03125 -0.371869\nv -0.125 0.03125 -0.371981\nv -0.117188 0.03125 -0.372135\nv -0.109375 0.03125 -0.372168\nv -0.101562 0.03125 -0.372153\nv -0.09375 0.03125 -0.372121\nv -0.0859375 0.03125 -0.371789\nv -0.078125 0.03125 -0.371392\nv -0.0703125 0.03125 -0.370964\nv -0.0625 0.03125 -0.37064\nv -0.0546875 0.03125 -0.37046\nv -0.046875 0.03125 -0.370282\nv -0.0390625 0.03125 -0.370115\nv -0.03125 0.03125 -0.369862\nv -0.0234375 0.03125 -0.369552\nv -0.015625 0.03125 -0.369274\nv -0.0078125 0.03125 -0.369046\nv 0 0.03125 -0.369232\nv 0.0078125 0.03125 -0.36939\nv 0.015625 0.03125 -0.369265\nv 0.0234375 0.03125 -0.369277\nv 0.03125 0.03125 -0.369012\nv 0.0390625 0.03125 -0.368859\nv 0.046875 0.03125 -0.368701\nv 0.0546875 0.03125 -0.36854\nv 0.0625 0.03125 -0.368165\nv 0.0703125 0.03125 -0.368011\nv 0.078125 0.03125 -0.36787\nv 0.0859375 0.03125 -0.367696\nv 0.09375 0.03125 -0.367732\nv 0.101562 0.03125 -0.36774\nv 0.109375 0.03125 -0.367767\nv 0.117188 0.03125 -0.367717\nv 0.125 0.03125 -0.367586\nv 0.132812 0.03125 -0.367399\nv 0.140625 0.03125 -0.367358\nv 0.148438 0.03125 -0.367341\nv 0.15625 0.03125 -0.367317\nv 0.164062 0.03125 -0.367272\nv 0.304688 0.03125 -0.367445\nv 0.3125 0.03125 -0.367859\nv 0.320312 0.03125 -0.368093\nv 0.328125 0.03125 -0.368279\nv 0.335938 0.03125 -0.368312\nv 0.34375 0.03125 -0.368341\nv 0.351562 0.03125 -0.368547\nv 0.359375 0.03125 -0.368602\nv 0.367188 0.03125 -0.368739\nv 0.375 0.03125 -0.368974\nv 0.382812 0.03125 -0.369438\nv 0.390625 0.03125 -0.370411\nv 0.398438 0.03125 -0.371494\nv 0.40625 0.03125 -0.372311\nv 0.414062 0.03125 -0.372117\nv 0.421875 0.03125 -0.371616\nv 0.429688 0.03125 -0.371361\nv 0.4375 0.03125 -0.371373\nv 0.445312 0.03125 -0.371918\nv 0.453125 0.03125 -0.372644\nv 0.460938 0.03125 -0.373394\nv 0.46875 0.03125 -0.374775\nv 0.476562 0.03125 -0.374738\nv 0.484375 0.03125 -0.373521\nv 0.492188 0.03125 -0.369333\nv -0.306066 0.0390625 -0.375\nv -0.3125 0.0390625 -0.368133\nv -0.232926 0.0390625 -0.375\nv -0.226562 0.0390625 -0.37361\nv -0.21875 0.0390625 -0.373216\nv -0.210938 0.0390625 -0.372557\nv -0.203125 0.0390625 -0.37139\nv -0.195312 0.0390625 -0.370729\nv -0.1875 0.0390625 -0.370462\nv -0.179688 0.0390625 -0.370394\nv -0.171875 0.0390625 -0.370726\nv -0.164062 0.0390625 -0.371025\nv -0.15625 0.0390625 -0.370847\nv -0.148438 0.0390625 -0.370451\nv -0.140625 0.0390625 -0.370136\nv -0.132812 0.0390625 -0.369861\nv -0.125 0.0390625 -0.369767\nv -0.117188 0.0390625 -0.369727\nv -0.109375 0.0390625 -0.369639\nv -0.101562 0.0390625 -0.369441\nv -0.09375 0.0390625 -0.369338\nv -0.0859375 0.0390625 -0.369206\nv -0.078125 0.0390625 -0.368958\nv -0.0703125 0.0390625 -0.368644\nv -0.0625 0.0390625 -0.368328\nv -0.0546875 0.0390625 -0.368252\nv -0.046875 0.0390625 -0.368129\nv -0.0390625 0.0390625 -0.368016\nv -0.03125 0.0390625 -0.367765\nv -0.0234375 0.0390625 -0.367464\nv 0.320312 0.0390625 -0.367221\nv 0.328125 0.0390625 -0.367506\nv 0.335938 0.0390625 -0.367638\nv 0.34375 0.0390625 -0.36773\nv 0.351562 0.0390625 -0.367928\nv 0.359375 0.0390625 -0.368121\nv 0.367188 0.0390625 -0.368201\nv 0.375 0.0390625 -0.368256\nv 0.382812 0.0390625 -0.368494\nv 0.390625 0.0390625 -0.36923\nv 0.398438 0.0390625 -0.370021\nv 0.40625 0.0390625 -0.371103\nv 0.414062 0.0390625 -0.371328\nv 0.421875 0.0390625 -0.371109\nv 0.429688 0.0390625 -0.370863\nv 0.4375 0.0390625 -0.370842\nv 0.445312 0.0390625 -0.37136\nv 0.453125 0.0390625 -0.371646\nv 0.460938 0.0390625 -0.372009\nv 0.46875 0.0390625 -0.372669\nv 0.476562 0.0390625 -0.372264\nv 0.484375 0.0390625 -0.370126\nv -0.30595 0.046875 -0.375\nv -0.3125 0.046875 -0.367382\nv -0.231453 0.046875 -0.375\nv -0.226562 0.046875 -0.373628\nv -0.21875 0.046875 -0.37316\nv -0.210938 0.046875 -0.372522\nv -0.203125 0.046875 -0.371224\nv -0.195312 0.046875 -0.369842\nv -0.1875 0.046875 -0.369293\nv -0.179688 0.046875 -0.368819\nv -0.171875 0.046875 -0.368954\nv -0.164062 0.046875 -0.369049\nv -0.15625 0.046875 -0.368719\nv -0.148438 0.046875 -0.368297\nv -0.140625 0.046875 -0.368014\nv -0.132812 0.046875 -0.367824\nv -0.125 0.046875 -0.367614\nv -0.117188 0.046875 -0.367393\nv -0.109375 0.046875 -0.367266\nv 0.414062 0.046875 -0.367683\nv 0.421875 0.046875 -0.367791\nv 0.429688 0.046875 -0.367581\nv 0.4375 0.046875 -0.367526\nv 0.445312 0.046875 -0.367586\nv 0.453125 0.046875 -0.367752\nv 0.460938 0.046875 -0.36816\nv 0.46875 0.046875 -0.36861\nv 0.476562 0.046875 -0.36816\nv -0.304846 0.0546875 -0.375\nv -0.304688 0.0553845 -0.375\nv -0.230561 0.0546875 -0.375\nv -0.226562 0.0546875 -0.373944\nv -0.21875 0.0546875 -0.373606\nv -0.210938 0.0546875 -0.372553\nv -0.203125 0.0546875 -0.37074\nv -0.195312 0.0546875 -0.369512\nv -0.1875 0.0546875 -0.368634\nv -0.179688 0.0546875 -0.367993\nv -0.171875 0.0546875 -0.367759\nv -0.164062 0.0546875 -0.36763\nv -0.302105 0.0625 -0.375\nv -0.304688 0.0625 -0.373762\nv -0.231741 0.0625 -0.375\nv -0.226562 0.0625 -0.373886\nv -0.21875 0.0625 -0.372908\nv -0.210938 0.0625 -0.371379\nv -0.203125 0.0625 -0.369474\nv -0.195312 0.0625 -0.367725\nv -0.298212 0.0703125 -0.375\nv -0.304688 0.0703125 -0.371825\nv -0.233834 0.0703125 -0.375\nv -0.234375 0.0724102 -0.375\nv -0.226562 0.0703125 -0.373252\nv -0.21875 0.0703125 -0.371906\nv -0.210938 0.0703125 -0.369203\nv -0.297673 0.078125 -0.375\nv -0.304688 0.078125 -0.371568\nv -0.237132 0.078125 -0.375\nv -0.234375 0.078125 -0.374683\nv -0.226562 0.078125 -0.372078\nv -0.21875 0.078125 -0.368282\nv -0.29966 0.0859375 -0.375\nv -0.304688 0.0859375 -0.372061\nv -0.240905 0.0859375 -0.375\nv -0.242188 0.0898925 -0.375\nv -0.234375 0.0859375 -0.373762\nv -0.226562 0.0859375 -0.370215\nv -0.299752 0.09375 -0.375\nv -0.304688 0.09375 -0.371597\nv -0.243533 0.09375 -0.375\nv -0.242188 0.09375 -0.374798\nv -0.234375 0.09375 -0.372385\nv -0.226562 0.09375 -0.367604\nv -0.299606 0.101562 -0.375\nv -0.304688 0.101562 -0.371458\nv -0.245103 0.101562 -0.375\nv -0.242188 0.101562 -0.374417\nv -0.234375 0.101562 -0.371305\nv -0.299003 0.109375 -0.375\nv -0.304688 0.109375 -0.371068\nv -0.245945 0.109375 -0.375\nv -0.242188 0.109375 -0.374146\nv -0.234375 0.109375 -0.371031\nv -0.298232 0.117188 -0.375\nv -0.304688 0.117188 -0.370703\nv -0.246049 0.117188 -0.375\nv -0.242188 0.117188 -0.374061\nv -0.234375 0.117188 -0.370887\nv -0.297386 0.125 -0.375\nv -0.304688 0.125 -0.370577\nv -0.296875 0.129643 -0.375\nv -0.247212 0.125 -0.375\nv -0.242188 0.125 -0.373799\nv -0.234375 0.125 -0.370404\nv -0.304688 0.132812 -0.370445\nv -0.296093 0.132812 -0.375\nv -0.296875 0.132812 -0.374813\nv -0.248426 0.132812 -0.375\nv -0.242188 0.132812 -0.373418\nv -0.234375 0.132812 -0.369812\nv -0.304688 0.140625 -0.370508\nv -0.294673 0.140625 -0.375\nv -0.296875 0.140625 -0.374451\nv -0.248527 0.140625 -0.375\nv -0.242188 0.140625 -0.372881\nv -0.234375 0.140625 -0.369448\nv -0.304688 0.148438 -0.370748\nv -0.295563 0.148438 -0.375\nv -0.296875 0.156095 -0.375\nv -0.296875 0.148438 -0.374664\nv -0.248728 0.148438 -0.375\nv -0.242188 0.148438 -0.372464\nv -0.234375 0.148438 -0.369043\nv -0.296889 0.15625 -0.375\nv -0.304688 0.15625 -0.371118\nv -0.248835 0.15625 -0.375\nv -0.242188 0.15625 -0.372269\nv -0.234375 0.15625 -0.36864\nv -0.297368 0.164062 -0.375\nv -0.304688 0.164062 -0.371687\nv -0.248867 0.164062 -0.375\nv -0.242188 0.164062 -0.37229\nv -0.234375 0.164062 -0.368243\nv -0.3125 0.171875 -0.368064\nv -0.297761 0.171875 -0.375\nv -0.304688 0.171875 -0.372207\nv -0.249094 0.171875 -0.375\nv -0.242188 0.171875 -0.372457\nv -0.234375 0.171875 -0.368257\nv -0.3125 0.179688 -0.368768\nv -0.298422 0.179688 -0.375\nv -0.304688 0.179688 -0.372672\nv -0.249511 0.179688 -0.375\nv -0.242188 0.179688 -0.372566\nv -0.234375 0.179688 -0.368214\nv -0.3125 0.1875 -0.369218\nv -0.298789 0.1875 -0.375\nv -0.304688 0.1875 -0.373047\nv -0.249661 0.1875 -0.375\nv -0.242188 0.1875 -0.372787\nv -0.234375 0.1875 -0.368142\nv -0.3125 0.195312 -0.369601\nv -0.299427 0.195312 -0.375\nv -0.304688 0.195312 -0.373462\nv -0.249281 0.195312 -0.375\nv -0.242188 0.195312 -0.373129\nv -0.234375 0.195312 -0.368221\nv -0.3125 0.203125 -0.370023\nv -0.300702 0.203125 -0.375\nv -0.304688 0.203125 -0.373947\nv -0.248653 0.203125 -0.375\nv -0.242188 0.203125 -0.373426\nv -0.234375 0.203125 -0.368218\nv -0.3125 0.210938 -0.370497\nv -0.302082 0.210938 -0.375\nv -0.304688 0.210938 -0.374374\nv -0.247954 0.210938 -0.375\nv -0.242188 0.210938 -0.373574\nv -0.234375 0.210938 -0.368195\nv -0.3125 0.21875 -0.370997\nv -0.303876 0.21875 -0.375\nv -0.304688 0.221404 -0.375\nv -0.304688 0.21875 -0.374838\nv -0.247054 0.21875 -0.375\nv -0.242188 0.21875 -0.373648\nv -0.234375 0.21875 -0.368283\nv -0.305363 0.226562 -0.375\nv -0.3125 0.226562 -0.371537\nv -0.247098 0.226562 -0.375\nv -0.242188 0.226562 -0.373514\nv -0.234375 0.226562 -0.368261\nv -0.305758 0.234375 -0.375\nv -0.3125 0.234375 -0.371822\nv -0.247219 0.234375 -0.375\nv -0.242188 0.234375 -0.373275\nv -0.234375 0.234375 -0.368054\nv -0.320312 0.242188 -0.367516\nv -0.306052 0.242188 -0.375\nv -0.3125 0.242188 -0.372073\nv -0.248366 0.242188 -0.375\nv -0.242188 0.242188 -0.372669\nv -0.234375 0.242188 -0.367501\nv -0.320312 0.25 -0.368001\nv -0.306505 0.25 -0.375\nv -0.3125 0.25 -0.372356\nv -0.249646 0.25 -0.375\nv -0.25 0.254008 -0.375\nv -0.242188 0.25 -0.371963\nv -0.320312 0.257812 -0.368672\nv -0.307129 0.257812 -0.375\nv -0.3125 0.257812 -0.372765\nv -0.250403 0.257812 -0.375\nv -0.25 0.257812 -0.374896\nv -0.242188 0.257812 -0.371272\nv -0.320312 0.265625 -0.369347\nv -0.308389 0.265625 -0.375\nv -0.3125 0.265625 -0.37339\nv -0.251437 0.265625 -0.375\nv -0.25 0.265625 -0.374577\nv -0.242188 0.265625 -0.370663\nv -0.320312 0.273438 -0.369835\nv -0.309635 0.273438 -0.375\nv -0.3125 0.273438 -0.373905\nv -0.252119 0.273438 -0.375\nv -0.25 0.273438 -0.374271\nv -0.242188 0.273438 -0.370065\nv -0.320312 0.28125 -0.370355\nv -0.310656 0.28125 -0.375\nv -0.3125 0.28125 -0.374283\nv -0.252239 0.28125 -0.375\nv -0.25 0.28125 -0.374155\nv -0.242188 0.28125 -0.369574\nv -0.320312 0.289062 -0.370873\nv -0.311759 0.289062 -0.375\nv -0.3125 0.293938 -0.375\nv -0.3125 0.289062 -0.374706\nv -0.252297 0.289062 -0.375\nv -0.25 0.289062 -0.374052\nv -0.242188 0.289062 -0.369341\nv -0.312882 0.296875 -0.375\nv -0.320312 0.296875 -0.371481\nv -0.252057 0.296875 -0.375\nv -0.25 0.296875 -0.37411\nv -0.242188 0.296875 -0.369236\nv -0.313942 0.304688 -0.375\nv -0.320312 0.304688 -0.371972\nv -0.251746 0.304688 -0.375\nv -0.25 0.304688 -0.374254\nv -0.242188 0.304688 -0.369451\nv -0.315007 0.3125 -0.375\nv -0.320312 0.3125 -0.372254\nv -0.251425 0.3125 -0.375\nv -0.25 0.3125 -0.37439\nv -0.242188 0.3125 -0.369578\nv -0.315226 0.320312 -0.375\nv -0.320312 0.320312 -0.372333\nv -0.250992 0.320312 -0.375\nv -0.25 0.320312 -0.374579\nv -0.242188 0.320312 -0.369667\nv -0.31513 0.328125 -0.375\nv -0.320312 0.328125 -0.37223\nv -0.251098 0.328125 -0.375\nv -0.25 0.328125 -0.374524\nv -0.242188 0.328125 -0.369332\nv -0.314953 0.335938 -0.375\nv -0.320312 0.335938 -0.372038\nv -0.251749 0.335938 -0.375\nv -0.25 0.335938 -0.374249\nv -0.242188 0.335938 -0.368583\nv -0.315011 0.34375 -0.375\nv -0.320312 0.34375 -0.372012\nv -0.252475 0.34375 -0.375\nv -0.25 0.34375 -0.373994\nv -0.242188 0.34375 -0.368148\nv -0.315648 0.351562 -0.375\nv -0.320312 0.351562 -0.3724\nv -0.25295 0.351562 -0.375\nv -0.25 0.351562 -0.37383\nv -0.242188 0.351562 -0.367895\nv -0.31635 0.359375 -0.375\nv -0.320312 0.359375 -0.372796\nv -0.252815 0.359375 -0.375\nv -0.25 0.359375 -0.373874\nv -0.242188 0.359375 -0.367909\nv -0.316907 0.367188 -0.375\nv -0.320312 0.367188 -0.373132\nv -0.252612 0.367188 -0.375\nv -0.25 0.367188 -0.373944\nv -0.242188 0.367188 -0.367888\nv -0.317475 0.375 -0.375\nv -0.320312 0.375 -0.373483\nv -0.25237 0.375 -0.375\nv -0.25 0.375 -0.374051\nv -0.242188 0.375 -0.367913\nv -0.318027 0.382812 -0.375\nv -0.320312 0.382812 -0.373824\nv -0.252272 0.382812 -0.375\nv -0.25 0.382812 -0.374077\nv -0.242188 0.382812 -0.367742\nv -0.328125 0.390625 -0.367451\nv -0.3186 0.390625 -0.375\nv -0.320312 0.390625 -0.374158\nv -0.2525 0.390625 -0.375\nv -0.25 0.390625 -0.37393\nv -0.242188 0.390625 -0.367437\nv -0.328125 0.398438 -0.368087\nv -0.319275 0.398438 -0.375\nv -0.320312 0.398438 -0.374513\nv -0.252745 0.398438 -0.375\nv -0.25 0.398438 -0.373832\nv -0.242188 0.398438 -0.367832\nv -0.328125 0.40625 -0.36872\nv -0.320292 0.40625 -0.375\nv -0.320312 0.40641 -0.375\nv -0.320312 0.40625 -0.374991\nv -0.252403 0.40625 -0.375\nv -0.25 0.40625 -0.374097\nv -0.242188 0.40625 -0.368289\nv -0.321069 0.414062 -0.375\nv -0.328125 0.414062 -0.369438\nv -0.251759 0.414062 -0.375\nv -0.25 0.414062 -0.374402\nv -0.242188 0.414062 -0.368422\nv -0.321847 0.421875 -0.375\nv -0.328125 0.421875 -0.370178\nv -0.251548 0.421875 -0.375\nv -0.25 0.421875 -0.374429\nv -0.242188 0.421875 -0.3684\nv -0.322709 0.429688 -0.375\nv -0.328125 0.429688 -0.371038\nv -0.251371 0.429688 -0.375\nv -0.25 0.429688 -0.374448\nv -0.242188 0.429688 -0.368354\nv -0.323917 0.4375 -0.375\nv -0.328125 0.4375 -0.372041\nv -0.251211 0.4375 -0.375\nv -0.25 0.4375 -0.374519\nv -0.242188 0.4375 -0.368376\nv -0.325152 0.445312 -0.375\nv -0.328125 0.445312 -0.372985\nv -0.251182 0.445312 -0.375\nv -0.25 0.445312 -0.374535\nv -0.242188 0.445312 -0.368325\nv -0.326506 0.453125 -0.375\nv -0.328125 0.453125 -0.373937\nv -0.251087 0.453125 -0.375\nv -0.25 0.453125 -0.374571\nv -0.242188 0.453125 -0.368244\nv -0.327986 0.460938 -0.375\nv -0.328125 0.46171 -0.375\nv -0.328125 0.460938 -0.374912\nv -0.25095 0.460938 -0.375\nv -0.25 0.460938 -0.374622\nv -0.242188 0.460938 -0.368151\nv -0.328886 0.46875 -0.375\nv -0.250732 0.46875 -0.375\nv -0.25 0.46875 -0.374696\nv -0.242188 0.46875 -0.368083\nv -0.329539 0.476562 -0.375\nv -0.250533 0.476562 -0.375\nv -0.25 0.476562 -0.374769\nv -0.242188 0.476562 -0.367986\nv -0.33024 0.484375 -0.375\nv -0.250344 0.484375 -0.375\nv -0.25 0.492074 -0.375\nv -0.25 0.484375 -0.374844\nv -0.242188 0.484375 -0.3677\nv -0.331278 0.492188 -0.375\nv -0.335938 0.492188 -0.367782\nv -0.249996 0.492188 -0.375\nv -0.242188 0.492188 -0.367496\nv -0.33252 0.5 -0.375\nv -0.335938 0.5 -0.369824\nv -0.249646 0.5 -0.375\nv -0.333884 0.507812 -0.375\nv -0.335938 0.507812 -0.372032\nv -0.249218 0.507812 -0.375\nv -0.335381 0.515625 -0.375\nv -0.335938 0.518267 -0.375\nv -0.335938 0.515625 -0.374253\nv -0.248727 0.515625 -0.375\nv -0.336612 0.523438 -0.375\nv -0.248969 0.523438 -0.375\nv -0.337603 0.53125 -0.375\nv -0.249394 0.53125 -0.375\nv -0.338499 0.539062 -0.375\nv -0.249779 0.539062 -0.375\nv -0.25 0.542885 -0.375\nv -0.339448 0.546875 -0.375\nv -0.250352 0.546875 -0.375\nv -0.25 0.546875 -0.37476\nv -0.340568 0.554688 -0.375\nv -0.251148 0.554688 -0.375\nv -0.25 0.554688 -0.374167\nv -0.341495 0.5625 -0.375\nv -0.252308 0.5625 -0.375\nv -0.25 0.5625 -0.373147\nv -0.342433 0.570312 -0.375\nv -0.34375 0.570312 -0.370083\nv -0.253385 0.570312 -0.375\nv -0.25 0.570312 -0.372002\nv -0.343193 0.578125 -0.375\nv -0.34375 0.582662 -0.375\nv -0.34375 0.578125 -0.372789\nv -0.25444 0.578125 -0.375\nv -0.25 0.578125 -0.370711\nv -0.344026 0.585938 -0.375\nv -0.255333 0.585938 -0.375\nv -0.25 0.585938 -0.369431\nv -0.344728 0.59375 -0.375\nv -0.255952 0.59375 -0.375\nv -0.25 0.59375 -0.368171\nv -0.345423 0.601562 -0.375\nv -0.256694 0.601562 -0.375\nv -0.345906 0.609375 -0.375\nv -0.257149 0.609375 -0.375\nv -0.257812 0.615357 -0.375\nv -0.346284 0.617188 -0.375\nv -0.258103 0.617188 -0.375\nv -0.257812 0.617188 -0.374835\nv -0.346398 0.625 -0.375\nv -0.259465 0.625 -0.375\nv -0.257812 0.625 -0.373897\nv -0.345979 0.632812 -0.375\nv -0.260586 0.632812 -0.375\nv -0.257812 0.632812 -0.372918\nv -0.345558 0.640625 -0.375\nv -0.261585 0.640625 -0.375\nv -0.257812 0.640625 -0.37201\nv -0.345067 0.648438 -0.375\nv -0.262764 0.648438 -0.375\nv -0.257812 0.648438 -0.371067\nv -0.344387 0.65625 -0.375\nv -0.34375 0.663929 -0.375\nv -0.264129 0.65625 -0.375\nv -0.257812 0.65625 -0.369929\nv -0.343716 0.664062 -0.375\nv -0.34375 0.664062 -0.374978\nv -0.264973 0.664062 -0.375\nv -0.265625 0.67062 -0.375\nv -0.257812 0.664062 -0.369182\nv -0.342248 0.671875 -0.375\nv -0.34375 0.671875 -0.373942\nv -0.265782 0.671875 -0.375\nv -0.265625 0.671875 -0.374916\nv -0.257812 0.671875 -0.368708\nv -0.341402 0.679688 -0.375\nv -0.34375 0.679688 -0.373269\nv -0.26639 0.679688 -0.375\nv -0.265625 0.679688 -0.374584\nv -0.257812 0.679688 -0.368396\nv -0.340879 0.6875 -0.375\nv -0.34375 0.6875 -0.372803\nv -0.26684 0.6875 -0.375\nv -0.265625 0.6875 -0.374329\nv -0.257812 0.6875 -0.368183\nv -0.340519 0.695312 -0.375\nv -0.34375 0.695312 -0.372484\nv -0.26715 0.695312 -0.375\nv -0.265625 0.695312 -0.374112\nv -0.257812 0.695312 -0.36794\nv -0.340418 0.703125 -0.375\nv -0.34375 0.703125 -0.372203\nv -0.267854 0.703125 -0.375\nv -0.265625 0.703125 -0.373706\nv -0.257812 0.703125 -0.367349\nv -0.340316 0.710938 -0.375\nv -0.34375 0.710938 -0.372139\nv -0.268667 0.710938 -0.375\nv -0.265625 0.710938 -0.37332\nv -0.340328 0.71875 -0.375\nv -0.34375 0.71875 -0.37224\nv -0.269319 0.71875 -0.375\nv -0.265625 0.71875 -0.372973\nv -0.340834 0.726562 -0.375\nv -0.34375 0.726562 -0.372559\nv -0.269928 0.726562 -0.375\nv -0.265625 0.726562 -0.372457\nv -0.340903 0.734375 -0.375\nv -0.34375 0.734375 -0.372579\nv -0.269852 0.734375 -0.375\nv -0.265625 0.734375 -0.371534\nv -0.341319 0.742188 -0.375\nv -0.34375 0.742188 -0.373137\nv -0.270438 0.742188 -0.375\nv -0.265625 0.742188 -0.369235\nv -0.341117 0.75 -0.375\nv -0.34375 0.75 -0.373168\nv -0.272767 0.75 -0.375\nv -0.273438 0.753195 -0.375\nv -0.340899 0.757812 -0.375\nv -0.34375 0.757812 -0.373196\nv -0.27436 0.757812 -0.375\nv -0.273438 0.757812 -0.373996\nv -0.34057 0.765625 -0.375\nv -0.34375 0.765625 -0.373073\nv -0.275817 0.765625 -0.375\nv -0.273438 0.765625 -0.371874\nv -0.340974 0.773438 -0.375\nv -0.34375 0.773438 -0.373348\nv -0.278016 0.773438 -0.375\nv -0.340307 0.78125 -0.375\nv -0.34375 0.78125 -0.373185\nv -0.279891 0.78125 -0.375\nv -0.28125 0.785499 -0.375\nv -0.339951 0.789062 -0.375\nv -0.34375 0.789062 -0.37334\nv -0.282908 0.789062 -0.375\nv -0.28125 0.789062 -0.372746\nv -0.337426 0.796875 -0.375\nv -0.34375 0.796875 -0.372158\nv -0.335938 0.799566 -0.375\nv -0.285948 0.796875 -0.375\nv -0.28125 0.796875 -0.368166\nv -0.34375 0.804688 -0.370406\nv -0.333558 0.804688 -0.375\nv -0.335938 0.804688 -0.373922\nv -0.289047 0.804688 -0.375\nv -0.289062 0.804752 -0.375\nv -0.34375 0.8125 -0.368695\nv -0.331548 0.8125 -0.375\nv -0.335938 0.8125 -0.372828\nv -0.29084 0.8125 -0.375\nv -0.289062 0.8125 -0.373331\nv -0.34375 0.820312 -0.367599\nv -0.331702 0.820312 -0.375\nv -0.335938 0.820312 -0.372773\nv -0.292839 0.820312 -0.375\nv -0.289062 0.820312 -0.37107\nv -0.33164 0.828125 -0.375\nv -0.335938 0.828125 -0.372482\nv -0.292522 0.828125 -0.375\nv -0.289062 0.828125 -0.369775\nv -0.329896 0.835938 -0.375\nv -0.335938 0.835938 -0.37137\nv -0.328125 0.838735 -0.375\nv -0.294701 0.835938 -0.375\nv -0.289062 0.835938 -0.36908\nv -0.335938 0.84375 -0.368142\nv -0.323858 0.84375 -0.375\nv -0.328125 0.84375 -0.373149\nv -0.320312 0.84637 -0.375\nv -0.3125 0.849341 -0.375\nv -0.304688 0.851447 -0.375\nv -0.293949 0.84375 -0.375\nv -0.296875 0.849505 -0.375\nv -0.289062 0.84375 -0.370098\nv -0.320312 0.851562 -0.371602\nv -0.3125 0.851562 -0.373563\nv -0.304688 0.851562 -0.374918\nv -0.296875 0.851562 -0.37402\nv -0.289062 0.851562 -0.368452\nv -0.304688 0.859375 -0.367494\nv 0.4375 -0.734746 -0.367188\nv 0.445312 -0.735971 -0.367188\nv 0.453125 -0.736451 -0.367188\nv 0.460938 -0.735854 -0.367188\nv 0.46875 -0.734842 -0.367188\nv -0.328125 -0.728801 -0.367188\nv -0.320312 -0.729038 -0.367188\nv -0.3125 -0.728758 -0.367188\nv -0.3125 -0.734375 -0.360309\nv -0.304688 -0.729066 -0.367188\nv -0.304688 -0.734375 -0.360424\nv -0.296875 -0.729435 -0.367188\nv -0.296875 -0.734375 -0.359774\nv -0.289062 -0.729269 -0.367188\nv -0.28125 -0.727284 -0.367188\nv 0.414062 -0.727671 -0.367188\nv 0.421875 -0.731054 -0.367188\nv 0.434969 -0.734375 -0.367188\nv 0.429688 -0.733549 -0.367188\nv 0.429688 -0.734375 -0.363805\nv 0.472756 -0.734375 -0.367188\nv 0.476562 -0.733944 -0.367188\nv 0.476562 -0.734375 -0.365933\nv 0.484375 -0.732377 -0.367188\nv 0.492188 -0.729234 -0.367188\nv -0.332096 -0.726562 -0.367188\nv -0.335938 -0.720024 -0.367188\nv -0.335938 -0.726562 -0.359993\nv -0.279876 -0.726562 -0.367188\nv -0.273438 -0.721702 -0.367188\nv -0.273438 -0.726562 -0.362917\nv 0.412028 -0.726562 -0.367188\nv 0.40625 -0.722277 -0.367188\nv 0.49632 -0.726562 -0.367188\nv 0.5 -0.722019 -0.367188\nv -0.336483 -0.71875 -0.367188\nv -0.269247 -0.71875 -0.367188\nv -0.265625 -0.716493 -0.367188\nv -0.265625 -0.71875 -0.365247\nv -0.257812 -0.711909 -0.367188\nv -0.257812 -0.71875 -0.360054\nv 0.4024 -0.71875 -0.367188\nv 0.398438 -0.714804 -0.367188\nv 0.398438 -0.71875 -0.359832\nv 0.501445 -0.71875 -0.367188\nv -0.337896 -0.710938 -0.367188\nv -0.256435 -0.710938 -0.367188\nv -0.25 -0.706401 -0.367188\nv -0.25 -0.710938 -0.362735\nv 0.395195 -0.710938 -0.367188\nv 0.390625 -0.703892 -0.367188\nv 0.390625 -0.710938 -0.360831\nv 0.502238 -0.710938 -0.367188\nv -0.337731 -0.703125 -0.367188\nv -0.24614 -0.703125 -0.367188\nv -0.242188 -0.698539 -0.367188\nv -0.242188 -0.703125 -0.363452\nv 0.390302 -0.703125 -0.367188\nv 0.503127 -0.703125 -0.367188\nv -0.336938 -0.695312 -0.367188\nv -0.335938 -0.689676 -0.367188\nv -0.239849 -0.695312 -0.367188\nv 0.388836 -0.695312 -0.367188\nv 0.503367 -0.695312 -0.367188\nv -0.335458 -0.6875 -0.367188\nv -0.335938 -0.6875 -0.366402\nv -0.237773 -0.6875 -0.367188\nv -0.234375 -0.6875 -0.363427\nv 0.387968 -0.6875 -0.367188\nv 0.503343 -0.6875 -0.367188\nv -0.333943 -0.679688 -0.367188\nv -0.335938 -0.679688 -0.363577\nv -0.236251 -0.679688 -0.367188\nv -0.234375 -0.679688 -0.365517\nv 0.387269 -0.679688 -0.367188\nv 0.50366 -0.679688 -0.367188\nv -0.332811 -0.671875 -0.367188\nv -0.335938 -0.671875 -0.360522\nv -0.234698 -0.671875 -0.367188\nv -0.234375 -0.670028 -0.367188\nv -0.234375 -0.671875 -0.36696\nv 0.386973 -0.671875 -0.367188\nv 0.504075 -0.671875 -0.367188\nv -0.331819 -0.664062 -0.367188\nv -0.233562 -0.664062 -0.367188\nv -0.226562 -0.664062 -0.360833\nv 0.387003 -0.664062 -0.367188\nv 0.382812 -0.664062 -0.359781\nv 0.504375 -0.664062 -0.367188\nv -0.331067 -0.65625 -0.367188\nv -0.232027 -0.65625 -0.367188\nv -0.226562 -0.65625 -0.362421\nv 0.387068 -0.65625 -0.367188\nv 0.382812 -0.65625 -0.360849\nv 0.504757 -0.65625 -0.367188\nv -0.330488 -0.648438 -0.367188\nv -0.230448 -0.648438 -0.367188\nv -0.226562 -0.648438 -0.364127\nv 0.387105 -0.648438 -0.367188\nv 0.382812 -0.648438 -0.36165\nv 0.505315 -0.648438 -0.367188\nv 0.507812 -0.648438 -0.359544\nv -0.329896 -0.640625 -0.367188\nv -0.229177 -0.640625 -0.367188\nv -0.226562 -0.640625 -0.36518\nv 0.387037 -0.640625 -0.367188\nv 0.382812 -0.640625 -0.362216\nv 0.505895 -0.640625 -0.367188\nv 0.507812 -0.640625 -0.360742\nv -0.329512 -0.632812 -0.367188\nv -0.228158 -0.632812 -0.367188\nv -0.226562 -0.632812 -0.365985\nv 0.386879 -0.632812 -0.367188\nv 0.382812 -0.632812 -0.362605\nv 0.506193 -0.632812 -0.367188\nv 0.507812 -0.632812 -0.360447\nv -0.329082 -0.625 -0.367188\nv -0.22737 -0.625 -0.367188\nv -0.226562 -0.625 -0.366605\nv -0.21875 -0.625 -0.359818\nv 0.386735 -0.625 -0.367188\nv 0.382812 -0.625 -0.362933\nv 0.506006 -0.625 -0.367188\nv -0.32872 -0.617188 -0.367188\nv -0.226718 -0.617188 -0.367188\nv -0.226562 -0.614772 -0.367188\nv -0.226562 -0.617188 -0.367078\nv -0.21875 -0.617188 -0.360382\nv 0.386747 -0.617188 -0.367188\nv 0.382812 -0.617188 -0.363056\nv 0.505791 -0.617188 -0.367188\nv -0.328821 -0.609375 -0.367188\nv -0.226264 -0.609375 -0.367188\nv -0.21875 -0.609375 -0.360859\nv 0.386981 -0.609375 -0.367188\nv 0.382812 -0.609375 -0.363066\nv 0.505364 -0.609375 -0.367188\nv -0.328965 -0.601562 -0.367188\nv -0.226075 -0.601562 -0.367188\nv -0.21875 -0.601562 -0.361158\nv 0.387183 -0.601562 -0.367188\nv 0.382812 -0.601562 -0.363237\nv 0.504553 -0.601562 -0.367188\nv -0.32878 -0.59375 -0.367188\nv -0.226252 -0.59375 -0.367188\nv -0.226562 -0.58793 -0.367188\nv -0.21875 -0.59375 -0.36116\nv 0.387309 -0.59375 -0.367188\nv 0.382812 -0.59375 -0.363427\nv 0.503542 -0.59375 -0.367188\nv -0.328703 -0.585938 -0.367188\nv -0.226689 -0.585938 -0.367188\nv -0.226562 -0.585938 -0.367104\nv -0.21875 -0.585938 -0.361044\nv 0.387883 -0.585938 -0.367188\nv 0.382812 -0.585938 -0.363138\nv 0.502436 -0.585938 -0.367188\nv -0.328611 -0.578125 -0.367188\nv -0.227187 -0.578125 -0.367188\nv -0.226562 -0.578125 -0.36679\nv -0.21875 -0.578125 -0.360973\nv 0.388607 -0.578125 -0.367188\nv 0.382812 -0.578125 -0.362726\nv 0.501647 -0.578125 -0.367188\nv -0.328429 -0.570312 -0.367188\nv -0.227516 -0.570312 -0.367188\nv -0.226562 -0.570312 -0.36659\nv -0.21875 -0.570312 -0.361053\nv 0.389077 -0.570312 -0.367188\nv 0.382812 -0.570312 -0.362553\nv 0.501266 -0.570312 -0.367188\nv -0.328337 -0.5625 -0.367188\nv -0.227533 -0.5625 -0.367188\nv -0.226562 -0.5625 -0.366592\nv -0.21875 -0.5625 -0.361229\nv 0.389259 -0.5625 -0.367188\nv 0.382812 -0.5625 -0.362609\nv 0.50107 -0.5625 -0.367188\nv -0.328311 -0.554688 -0.367188\nv -0.226782 -0.554688 -0.367188\nv -0.226562 -0.55408 -0.367188\nv -0.226562 -0.554688 -0.367066\nv -0.21875 -0.554688 -0.363198\nv -0.210938 -0.554688 -0.360464\nv 0.273438 -0.547348 -0.367188\nv 0.28125 -0.547638 -0.367188\nv 0.289062 -0.547107 -0.367188\nv 0.304688 -0.547081 -0.367188\nv 0.3125 -0.546968 -0.367188\nv 0.320312 -0.547374 -0.367188\nv 0.328125 -0.547792 -0.367188\nv 0.335938 -0.54764 -0.367188\nv 0.34375 -0.547703 -0.367188\nv 0.34375 -0.554688 -0.359843\nv 0.351562 -0.554688 -0.359768\nv 0.375 -0.554688 -0.359924\nv 0.389329 -0.554688 -0.367188\nv 0.382812 -0.554688 -0.363154\nv 0.500963 -0.554688 -0.367188\nv -0.328219 -0.546875 -0.367188\nv -0.221553 -0.546875 -0.367188\nv -0.21875 -0.543293 -0.367188\nv -0.21875 -0.546875 -0.366401\nv -0.210938 -0.546875 -0.364346\nv -0.203125 -0.546875 -0.362609\nv -0.195312 -0.546875 -0.362512\nv -0.1875 -0.546875 -0.362882\nv -0.179688 -0.539704 -0.367188\nv -0.179688 -0.546875 -0.363374\nv -0.171875 -0.54057 -0.367188\nv -0.171875 -0.546875 -0.363591\nv -0.164062 -0.541519 -0.367188\nv -0.164062 -0.546875 -0.363797\nv -0.15625 -0.542063 -0.367188\nv -0.15625 -0.546875 -0.363787\nv -0.148438 -0.5422 -0.367188\nv -0.148438 -0.546875 -0.363627\nv -0.140625 -0.5424 -0.367188\nv -0.140625 -0.546875 -0.362847\nv -0.132812 -0.540298 -0.367188\nv -0.132812 -0.546875 -0.359852\nv -0.125 -0.539467 -0.367188\nv -0.117188 -0.540607 -0.367188\nv -0.117188 -0.546875 -0.359947\nv -0.109375 -0.541685 -0.367188\nv -0.109375 -0.546875 -0.361298\nv -0.101562 -0.542819 -0.367188\nv -0.101562 -0.546875 -0.362538\nv -0.09375 -0.543667 -0.367188\nv -0.09375 -0.546875 -0.363328\nv -0.0859375 -0.544105 -0.367188\nv -0.0859375 -0.546875 -0.364043\nv -0.078125 -0.544253 -0.367188\nv -0.078125 -0.546875 -0.364528\nv -0.0703125 -0.543322 -0.367188\nv -0.0703125 -0.546875 -0.363886\nv -0.0625 -0.542613 -0.367188\nv -0.0625 -0.546875 -0.363549\nv -0.0546875 -0.542527 -0.367188\nv -0.0546875 -0.546875 -0.363662\nv -0.046875 -0.542719 -0.367188\nv -0.046875 -0.546875 -0.363933\nv -0.0390625 -0.542482 -0.367188\nv -0.0390625 -0.546875 -0.363752\nv -0.03125 -0.542096 -0.367188\nv -0.03125 -0.546875 -0.363476\nv -0.0234375 -0.541751 -0.367188\nv -0.0234375 -0.546875 -0.363237\nv -0.015625 -0.54127 -0.367188\nv -0.015625 -0.546875 -0.362882\nv -0.0078125 -0.541054 -0.367188\nv -0.0078125 -0.546875 -0.36277\nv 0 -0.54122 -0.367188\nv 0 -0.546875 -0.362957\nv 0.0078125 -0.541029 -0.367188\nv 0.0078125 -0.546875 -0.362818\nv 0.015625 -0.540934 -0.367188\nv 0.015625 -0.546875 -0.362665\nv 0.0234375 -0.540637 -0.367188\nv 0.0234375 -0.546875 -0.362463\nv 0.03125 -0.54059 -0.367188\nv 0.03125 -0.546875 -0.362476\nv 0.0390625 -0.540412 -0.367188\nv 0.0390625 -0.546875 -0.362514\nv 0.046875 -0.540184 -0.367188\nv 0.046875 -0.546875 -0.3624\nv 0.0546875 -0.540009 -0.367188\nv 0.0546875 -0.546875 -0.362156\nv 0.0625 -0.539748 -0.367188\nv 0.0625 -0.546875 -0.361947\nv 0.0703125 -0.539202 -0.367188\nv 0.0703125 -0.546875 -0.361642\nv 0.078125 -0.546875 -0.361247\nv 0.0859375 -0.546875 -0.36105\nv 0.09375 -0.546875 -0.360737\nv 0.101562 -0.546875 -0.360561\nv 0.109375 -0.546875 -0.360241\nv 0.117188 -0.546875 -0.360104\nv 0.125 -0.546875 -0.360165\nv 0.132812 -0.546875 -0.360355\nv 0.140625 -0.546875 -0.36056\nv 0.148438 -0.546875 -0.36072\nv 0.15625 -0.546875 -0.361121\nv 0.164062 -0.539296 -0.367188\nv 0.164062 -0.546875 -0.361556\nv 0.171875 -0.539811 -0.367188\nv 0.171875 -0.546875 -0.361884\nv 0.179688 -0.540333 -0.367188\nv 0.179688 -0.546875 -0.362095\nv 0.1875 -0.541199 -0.367188\nv 0.1875 -0.546875 -0.362546\nv 0.195312 -0.54197 -0.367188\nv 0.195312 -0.546875 -0.363181\nv 0.203125 -0.542655 -0.367188\nv 0.203125 -0.546875 -0.363795\nv 0.210938 -0.543067 -0.367188\nv 0.210938 -0.546875 -0.363894\nv 0.21875 -0.543686 -0.367188\nv 0.21875 -0.546875 -0.364315\nv 0.226562 -0.543891 -0.367188\nv 0.226562 -0.546875 -0.364616\nv 0.234375 -0.544259 -0.367188\nv 0.234375 -0.546875 -0.365064\nv 0.242188 -0.544683 -0.367188\nv 0.242188 -0.546875 -0.365489\nv 0.25 -0.545364 -0.367188\nv 0.25 -0.546875 -0.366099\nv 0.257812 -0.546052 -0.367188\nv 0.257812 -0.546875 -0.366628\nv 0.267338 -0.546875 -0.367188\nv 0.265625 -0.546658 -0.367188\nv 0.265625 -0.546875 -0.367045\nv 0.296112 -0.546875 -0.367188\nv 0.297651 -0.546875 -0.367188\nv 0.296875 -0.546836 -0.367188\nv 0.296875 -0.546875 -0.367163\nv 0.350247 -0.546875 -0.367188\nv 0.351562 -0.546567 -0.367188\nv 0.351562 -0.546875 -0.367018\nv 0.359375 -0.543601 -0.367188\nv 0.359375 -0.546875 -0.365497\nv 0.367188 -0.539541 -0.367188\nv 0.367188 -0.546875 -0.363894\nv 0.375 -0.546875 -0.363686\nv 0.388087 -0.546875 -0.367188\nv 0.382812 -0.546875 -0.364614\nv 0.500935 -0.546875 -0.367188\nv -0.328334 -0.539062 -0.367188\nv -0.214747 -0.539062 -0.367188\nv -0.210938 -0.536384 -0.367188\nv -0.210938 -0.539062 -0.366443\nv -0.203125 -0.535477 -0.367188\nv -0.203125 -0.539062 -0.365906\nv -0.195312 -0.536306 -0.367188\nv -0.195312 -0.539062 -0.366199\nv -0.182944 -0.539062 -0.367188\nv -0.1875 -0.537852 -0.367188\nv -0.1875 -0.539062 -0.366744\nv 0.0718741 -0.539062 -0.367188\nv 0.078125 -0.538383 -0.367188\nv 0.078125 -0.539062 -0.366795\nv 0.0859375 -0.537726 -0.367188\nv 0.0859375 -0.539062 -0.366423\nv 0.09375 -0.537229 -0.367188\nv 0.09375 -0.539062 -0.366165\nv 0.101562 -0.537161 -0.367188\nv 0.101562 -0.539062 -0.366134\nv 0.109375 -0.53698 -0.367188\nv 0.109375 -0.539062 -0.366019\nv 0.117188 -0.536972 -0.367188\nv 0.117188 -0.539062 -0.36598\nv 0.125 -0.53699 -0.367188\nv 0.125 -0.539062 -0.365969\nv 0.132812 -0.537276 -0.367188\nv 0.132812 -0.539062 -0.366167\nv 0.140625 -0.537601 -0.367188\nv 0.140625 -0.539062 -0.366361\nv 0.148438 -0.537976 -0.367188\nv 0.148438 -0.539062 -0.366569\nv 0.160318 -0.539062 -0.367188\nv 0.15625 -0.538737 -0.367188\nv 0.15625 -0.539062 -0.366994\nv 0.3685 -0.539062 -0.367188\nv 0.375 -0.536243 -0.367188\nv 0.375 -0.539062 -0.366226\nv 0.38403 -0.539062 -0.367188\nv 0.382812 -0.538038 -0.367188\nv 0.382812 -0.539062 -0.366841\nv 0.50086 -0.539062 -0.367188\nv -0.328553 -0.53125 -0.367188\nv 0.501096 -0.53125 -0.367188\nv -0.328835 -0.523438 -0.367188\nv 0.501517 -0.523438 -0.367188\nv -0.329057 -0.515625 -0.367188\nv 0.501972 -0.515625 -0.367188\nv -0.329193 -0.507812 -0.367188\nv 0.502149 -0.507812 -0.367188\nv -0.329316 -0.5 -0.367188\nv -0.203125 -0.492192 -0.367188\nv 0.502159 -0.5 -0.367188\nv -0.329318 -0.492188 -0.367188\nv -0.21875 -0.486897 -0.367188\nv -0.203231 -0.492188 -0.367188\nv -0.210938 -0.491723 -0.367188\nv -0.203095 -0.492188 -0.367188\nv -0.203125 -0.492188 -0.367185\nv -0.195312 -0.491007 -0.367188\nv -0.1875 -0.48876 -0.367188\nv -0.179688 -0.486584 -0.367188\nv -0.171875 -0.485444 -0.367188\nv -0.164062 -0.484637 -0.367188\nv -0.140625 -0.48628 -0.367188\nv -0.132812 -0.48966 -0.367188\nv -0.125 -0.489332 -0.367188\nv -0.117188 -0.48734 -0.367188\nv -0.109375 -0.48519 -0.367188\nv 0.502411 -0.492188 -0.367188\nv -0.329435 -0.484375 -0.367188\nv -0.219432 -0.484375 -0.367188\nv -0.21875 -0.484375 -0.366742\nv -0.210938 -0.484375 -0.363991\nv -0.203125 -0.484375 -0.363197\nv -0.195312 -0.484375 -0.363289\nv -0.1875 -0.484375 -0.364272\nv -0.179688 -0.484375 -0.365682\nv -0.171875 -0.484375 -0.366487\nv -0.162062 -0.484375 -0.367188\nv -0.164062 -0.484375 -0.367008\nv -0.15625 -0.483657 -0.367188\nv -0.14634 -0.484375 -0.367188\nv -0.148438 -0.483656 -0.367188\nv -0.140625 -0.484375 -0.365091\nv -0.132812 -0.484375 -0.361268\nv -0.125 -0.484375 -0.361698\nv -0.117188 -0.484375 -0.36398\nv -0.106547 -0.484375 -0.367188\nv -0.109375 -0.484375 -0.366315\nv -0.101562 -0.483025 -0.367188\nv -0.09375 -0.480785 -0.367188\nv -0.0859375 -0.478765 -0.367188\nv -0.078125 -0.476837 -0.367188\nv 0.0625 -0.476987 -0.367188\nv 0.0703125 -0.478308 -0.367188\nv 0.078125 -0.479649 -0.367188\nv 0.0859375 -0.480747 -0.367188\nv 0.09375 -0.481731 -0.367188\nv 0.101562 -0.482247 -0.367188\nv 0.109375 -0.482378 -0.367188\nv 0.117188 -0.482314 -0.367188\nv 0.125 -0.482049 -0.367188\nv 0.132812 -0.481785 -0.367188\nv 0.140625 -0.481748 -0.367188\nv 0.148438 -0.481713 -0.367188\nv 0.15625 -0.481794 -0.367188\nv 0.164062 -0.481865 -0.367188\nv 0.171875 -0.481742 -0.367188\nv 0.179688 -0.481307 -0.367188\nv 0.1875 -0.480468 -0.367188\nv 0.195312 -0.479748 -0.367188\nv 0.203125 -0.478931 -0.367188\nv 0.210938 -0.478324 -0.367188\nv 0.21875 -0.477663 -0.367188\nv 0.226562 -0.477477 -0.367188\nv 0.234375 -0.477511 -0.367188\nv 0.242188 -0.477457 -0.367188\nv 0.25 -0.477585 -0.367188\nv 0.257812 -0.477197 -0.367188\nv 0.296875 -0.477163 -0.367188\nv 0.304688 -0.478461 -0.367188\nv 0.3125 -0.479766 -0.367188\nv 0.320312 -0.480012 -0.367188\nv 0.328125 -0.477358 -0.367188\nv 0.335938 -0.477409 -0.367188\nv 0.34375 -0.478508 -0.367188\nv 0.351562 -0.479557 -0.367188\nv 0.359375 -0.481333 -0.367188\nv 0.367188 -0.481359 -0.367188\nv 0.502633 -0.484375 -0.367188\nv -0.329581 -0.476562 -0.367188\nv -0.220641 -0.476562 -0.367188\nv -0.21875 -0.476562 -0.365787\nv -0.210938 -0.476562 -0.36081\nv -0.171875 -0.476562 -0.360223\nv -0.164062 -0.476562 -0.360868\nv -0.15625 -0.476562 -0.361336\nv -0.148438 -0.476562 -0.359571\nv -0.101562 -0.476562 -0.360116\nv -0.09375 -0.476562 -0.362781\nv -0.0859375 -0.476562 -0.365087\nv -0.0762375 -0.476562 -0.367188\nv -0.078125 -0.476562 -0.366954\nv -0.0703125 -0.475905 -0.367188\nv -0.0625 -0.475166 -0.367188\nv -0.0546875 -0.474572 -0.367188\nv -0.046875 -0.474177 -0.367188\nv -0.0390625 -0.473779 -0.367188\nv -0.03125 -0.473368 -0.367188\nv -0.0234375 -0.472791 -0.367188\nv -0.015625 -0.472565 -0.367188\nv -0.0078125 -0.472402 -0.367188\nv 0 -0.472256 -0.367188\nv 0.0078125 -0.472795 -0.367188\nv 0.015625 -0.473369 -0.367188\nv 0.0234375 -0.473823 -0.367188\nv 0.03125 -0.474276 -0.367188\nv 0.0390625 -0.474957 -0.367188\nv 0.046875 -0.475655 -0.367188\nv 0.0589696 -0.476562 -0.367188\nv 0.0546875 -0.476194 -0.367188\nv 0.0625 -0.476562 -0.366891\nv 0.0703125 -0.476562 -0.366012\nv 0.078125 -0.476562 -0.365173\nv 0.0859375 -0.476562 -0.364499\nv 0.09375 -0.476562 -0.363971\nv 0.101562 -0.476562 -0.3637\nv 0.109375 -0.476562 -0.363542\nv 0.117188 -0.476562 -0.363455\nv 0.125 -0.476562 -0.363509\nv 0.132812 -0.476562 -0.363763\nv 0.140625 -0.476562 -0.363634\nv 0.148438 -0.476562 -0.363435\nv 0.15625 -0.476562 -0.363232\nv 0.164062 -0.476562 -0.363148\nv 0.171875 -0.476562 -0.363231\nv 0.179688 -0.476562 -0.363172\nv 0.1875 -0.476562 -0.363731\nv 0.195312 -0.476562 -0.36435\nv 0.203125 -0.476562 -0.365071\nv 0.210938 -0.476562 -0.365548\nv 0.21875 -0.476562 -0.366035\nv 0.226562 -0.476562 -0.36623\nv 0.234375 -0.476562 -0.366254\nv 0.242188 -0.476562 -0.366302\nv 0.25 -0.476562 -0.366072\nv 0.26358 -0.476562 -0.367188\nv 0.257812 -0.476562 -0.366465\nv 0.265625 -0.476384 -0.367188\nv 0.273438 -0.475992 -0.367188\nv 0.28125 -0.476095 -0.367188\nv 0.290554 -0.476562 -0.367188\nv 0.289062 -0.476436 -0.367188\nv 0.296875 -0.476562 -0.366115\nv 0.304688 -0.476562 -0.363626\nv 0.3125 -0.476562 -0.360942\nv 0.320312 -0.476562 -0.35952\nv 0.328125 -0.476562 -0.365272\nv 0.335938 -0.476562 -0.365422\nv 0.34375 -0.476562 -0.363449\nv 0.351562 -0.476562 -0.361956\nv 0.359375 -0.476562 -0.360924\nv 0.373611 -0.476562 -0.367188\nv 0.367188 -0.476562 -0.363276\nv 0.375 -0.474745 -0.367188\nv 0.502927 -0.476562 -0.367188\nv -0.329691 -0.46875 -0.367188\nv -0.221846 -0.46875 -0.367188\nv -0.21875 -0.46875 -0.364831\nv -0.0625 -0.46875 -0.36035\nv -0.0546875 -0.46875 -0.361319\nv -0.046875 -0.46875 -0.362025\nv -0.0390625 -0.46875 -0.362395\nv -0.03125 -0.46875 -0.362884\nv -0.0234375 -0.46875 -0.363309\nv -0.015625 -0.46875 -0.36328\nv -0.0078125 -0.46875 -0.363268\nv 0 -0.46875 -0.36318\nv 0.0078125 -0.46875 -0.362151\nv 0.015625 -0.46875 -0.36088\nv 0.0234375 -0.46875 -0.359514\nv 0.377854 -0.46875 -0.367188\nv 0.375 -0.46875 -0.363419\nv 0.503186 -0.46875 -0.367188\nv -0.329734 -0.460938 -0.367188\nv -0.223118 -0.460938 -0.367188\nv -0.21875 -0.460938 -0.36378\nv 0.381443 -0.460938 -0.367188\nv 0.382812 -0.456998 -0.367188\nv 0.50345 -0.460938 -0.367188\nv -0.329811 -0.453125 -0.367188\nv -0.224265 -0.453125 -0.367188\nv -0.21875 -0.453125 -0.362759\nv 0.384088 -0.453125 -0.367188\nv 0.382812 -0.453125 -0.365463\nv 0.503811 -0.453125 -0.367188\nv -0.32995 -0.445312 -0.367188\nv -0.224997 -0.445312 -0.367188\nv -0.21875 -0.445312 -0.361562\nv 0.386219 -0.445312 -0.367188\nv 0.382812 -0.445312 -0.362678\nv 0.504267 -0.445312 -0.367188\nv -0.330018 -0.4375 -0.367188\nv -0.22504 -0.4375 -0.367188\nv -0.21875 -0.4375 -0.36088\nv 0.387461 -0.4375 -0.367188\nv 0.382812 -0.4375 -0.360665\nv 0.50482 -0.4375 -0.367188\nv -0.329837 -0.429688 -0.367188\nv -0.224783 -0.429688 -0.367188\nv -0.21875 -0.429688 -0.360766\nv 0.388252 -0.429688 -0.367188\nv 0.505279 -0.429688 -0.367188\nv -0.329425 -0.421875 -0.367188\nv -0.224479 -0.421875 -0.367188\nv -0.21875 -0.421875 -0.360996\nv 0.388714 -0.421875 -0.367188\nv 0.505654 -0.421875 -0.367188\nv -0.329073 -0.414062 -0.367188\nv -0.224221 -0.414062 -0.367188\nv -0.21875 -0.414062 -0.360531\nv 0.388757 -0.414062 -0.367188\nv 0.506145 -0.414062 -0.367188\nv -0.32865 -0.40625 -0.367188\nv -0.328125 -0.398997 -0.367188\nv -0.224702 -0.40625 -0.367188\nv -0.21875 -0.40625 -0.359764\nv 0.389196 -0.40625 -0.367188\nv 0.506289 -0.40625 -0.367188\nv -0.328073 -0.398438 -0.367188\nv -0.328125 -0.398438 -0.366071\nv -0.224543 -0.398438 -0.367188\nv -0.21875 -0.398438 -0.359963\nv 0.390353 -0.398438 -0.367188\nv 0.390625 -0.396434 -0.367188\nv 0.506345 -0.398438 -0.367188\nv -0.327271 -0.390625 -0.367188\nv -0.223829 -0.390625 -0.367188\nv -0.21875 -0.390625 -0.360685\nv 0.391605 -0.390625 -0.367188\nv 0.390625 -0.390625 -0.365851\nv 0.506455 -0.390625 -0.367188\nv -0.326525 -0.382812 -0.367188\nv -0.223072 -0.382812 -0.367188\nv -0.21875 -0.382812 -0.361501\nv 0.392794 -0.382812 -0.367188\nv 0.390625 -0.382812 -0.364922\nv 0.506307 -0.382812 -0.367188\nv -0.32563 -0.375 -0.367188\nv -0.22277 -0.375 -0.367188\nv -0.21875 -0.375 -0.362115\nv 0.393623 -0.375 -0.367188\nv 0.390625 -0.375 -0.36435\nv 0.505794 -0.375 -0.367188\nv -0.324659 -0.367188 -0.367188\nv -0.222827 -0.367188 -0.367188\nv -0.21875 -0.367188 -0.362088\nv 0.394549 -0.367188 -0.367188\nv 0.390625 -0.367188 -0.363845\nv 0.505327 -0.367188 -0.367188\nv -0.323712 -0.359375 -0.367188\nv -0.222988 -0.359375 -0.367188\nv -0.21875 -0.359375 -0.361965\nv 0.394269 -0.359375 -0.367188\nv 0.390625 -0.359375 -0.364831\nv 0.505209 -0.359375 -0.367188\nv -0.322969 -0.351562 -0.367188\nv -0.223076 -0.351562 -0.367188\nv -0.21875 -0.351562 -0.362095\nv 0.393464 -0.351562 -0.367188\nv 0.390625 -0.351562 -0.364996\nv 0.505339 -0.351562 -0.367188\nv -0.322459 -0.34375 -0.367188\nv -0.22322 -0.34375 -0.367188\nv -0.21875 -0.34375 -0.362094\nv 0.392924 -0.34375 -0.367188\nv 0.390625 -0.34375 -0.36476\nv 0.50549 -0.34375 -0.367188\nv -0.322008 -0.335938 -0.367188\nv -0.223368 -0.335938 -0.367188\nv -0.21875 -0.335938 -0.361027\nv 0.393868 -0.335938 -0.367188\nv 0.390625 -0.335938 -0.363613\nv 0.505835 -0.335938 -0.367188\nv -0.32173 -0.328125 -0.367188\nv -0.223363 -0.328125 -0.367188\nv -0.21875 -0.328125 -0.360285\nv 0.394517 -0.328125 -0.367188\nv 0.390625 -0.328125 -0.363049\nv 0.506073 -0.328125 -0.367188\nv -0.321412 -0.320312 -0.367188\nv -0.223172 -0.320312 -0.367188\nv 0.394682 -0.320312 -0.367188\nv 0.390625 -0.320312 -0.362884\nv 0.506267 -0.320312 -0.367188\nv -0.321126 -0.3125 -0.367188\nv -0.222971 -0.3125 -0.367188\nv 0.394514 -0.3125 -0.367188\nv 0.390625 -0.3125 -0.36291\nv 0.506423 -0.3125 -0.367188\nv -0.320824 -0.304688 -0.367188\nv -0.223047 -0.304688 -0.367188\nv 0.394321 -0.304688 -0.367188\nv 0.390625 -0.304688 -0.362812\nv 0.506309 -0.304688 -0.367188\nv -0.320485 -0.296875 -0.367188\nv -0.320312 -0.293287 -0.367188\nv -0.320312 -0.296875 -0.362383\nv -0.223206 -0.296875 -0.367188\nv 0.394254 -0.296875 -0.367188\nv 0.390625 -0.296875 -0.362797\nv 0.506118 -0.296875 -0.367188\nv -0.320041 -0.289062 -0.367188\nv -0.223365 -0.289062 -0.367188\nv 0.394051 -0.289062 -0.367188\nv 0.390625 -0.289062 -0.362504\nv 0.505944 -0.289062 -0.367188\nv -0.319415 -0.28125 -0.367188\nv -0.223405 -0.28125 -0.367188\nv 0.393971 -0.28125 -0.367188\nv 0.390625 -0.28125 -0.362142\nv 0.50569 -0.28125 -0.367188\nv -0.318638 -0.273438 -0.367188\nv -0.223495 -0.273438 -0.367188\nv 0.393679 -0.273438 -0.367188\nv 0.390625 -0.273438 -0.362169\nv 0.505164 -0.273438 -0.367188\nv -0.317831 -0.265625 -0.367188\nv -0.22362 -0.265625 -0.367188\nv 0.393403 -0.265625 -0.367188\nv 0.390625 -0.265625 -0.362593\nv 0.504552 -0.265625 -0.367188\nv -0.317182 -0.257812 -0.367188\nv -0.22353 -0.257812 -0.367188\nv 0.392285 -0.257812 -0.367188\nv 0.390625 -0.257812 -0.364037\nv 0.504024 -0.257812 -0.367188\nv -0.316572 -0.25 -0.367188\nv -0.223342 -0.25 -0.367188\nv 0.391295 -0.25 -0.367188\nv 0.390625 -0.245873 -0.367188\nv 0.390625 -0.25 -0.365784\nv 0.50356 -0.25 -0.367188\nv -0.315936 -0.242188 -0.367188\nv -0.223177 -0.242188 -0.367188\nv 0.39002 -0.242188 -0.367188\nv 0.503585 -0.242188 -0.367188\nv -0.315666 -0.234375 -0.367188\nv -0.223122 -0.234375 -0.367188\nv 0.389327 -0.234375 -0.367188\nv 0.503739 -0.234375 -0.367188\nv -0.315939 -0.226562 -0.367188\nv -0.223118 -0.226562 -0.367188\nv 0.389436 -0.226562 -0.367188\nv 0.504068 -0.226562 -0.367188\nv -0.316301 -0.21875 -0.367188\nv -0.223051 -0.21875 -0.367188\nv 0.389762 -0.21875 -0.367188\nv 0.504521 -0.21875 -0.367188\nv -0.316593 -0.210938 -0.367188\nv -0.222889 -0.210938 -0.367188\nv 0.390227 -0.210938 -0.367188\nv 0.390625 -0.208237 -0.367188\nv 0.504946 -0.210938 -0.367188\nv -0.316721 -0.203125 -0.367188\nv -0.222954 -0.203125 -0.367188\nv 0.391587 -0.203125 -0.367188\nv 0.390625 -0.203125 -0.363081\nv 0.505407 -0.203125 -0.367188\nv -0.316468 -0.195312 -0.367188\nv -0.223122 -0.195312 -0.367188\nv 0.392958 -0.195312 -0.367188\nv 0.505856 -0.195312 -0.367188\nv -0.315726 -0.1875 -0.367188\nv -0.22328 -0.1875 -0.367188\nv 0.393951 -0.1875 -0.367188\nv 0.506125 -0.1875 -0.367188\nv -0.314909 -0.179688 -0.367188\nv -0.223218 -0.179688 -0.367188\nv 0.394857 -0.179688 -0.367188\nv 0.505814 -0.179688 -0.367188\nv -0.314394 -0.171875 -0.367188\nv -0.223039 -0.171875 -0.367188\nv 0.394985 -0.171875 -0.367188\nv 0.505367 -0.171875 -0.367188\nv -0.314108 -0.164062 -0.367188\nv -0.222625 -0.164062 -0.367188\nv 0.394694 -0.164062 -0.367188\nv 0.504914 -0.164062 -0.367188\nv -0.313855 -0.15625 -0.367188\nv -0.222106 -0.15625 -0.367188\nv 0.394914 -0.15625 -0.367188\nv 0.504267 -0.15625 -0.367188\nv -0.313052 -0.148438 -0.367188\nv -0.3125 -0.14181 -0.367188\nv -0.221471 -0.148438 -0.367188\nv -0.21875 -0.148438 -0.360833\nv 0.395371 -0.148438 -0.367188\nv 0.503834 -0.148438 -0.367188\nv -0.31239 -0.140625 -0.367188\nv -0.3125 -0.140625 -0.366446\nv -0.220732 -0.140625 -0.367188\nv -0.21875 -0.140625 -0.362597\nv 0.395837 -0.140625 -0.367188\nv 0.503226 -0.140625 -0.367188\nv -0.311928 -0.132812 -0.367188\nv -0.3125 -0.132812 -0.363251\nv -0.220448 -0.132812 -0.367188\nv -0.21875 -0.132812 -0.363784\nv 0.395292 -0.132812 -0.367188\nv 0.390625 -0.132812 -0.36054\nv 0.502505 -0.132812 -0.367188\nv -0.311506 -0.125 -0.367188\nv -0.3125 -0.125 -0.360638\nv -0.220363 -0.125 -0.367188\nv -0.21875 -0.125 -0.364604\nv 0.394932 -0.125 -0.367188\nv 0.390625 -0.125 -0.361964\nv 0.501588 -0.125 -0.367188\nv -0.311255 -0.117188 -0.367188\nv -0.221056 -0.117188 -0.367188\nv -0.21875 -0.117188 -0.364672\nv 0.394538 -0.117188 -0.367188\nv 0.390625 -0.117188 -0.363241\nv 0.501034 -0.117188 -0.367188\nv -0.310936 -0.109375 -0.367188\nv -0.221763 -0.109375 -0.367188\nv -0.21875 -0.109375 -0.364715\nv 0.393995 -0.109375 -0.367188\nv 0.390625 -0.109375 -0.364385\nv 0.500895 -0.109375 -0.367188\nv -0.310646 -0.101562 -0.367188\nv -0.222036 -0.101562 -0.367188\nv -0.21875 -0.101562 -0.364833\nv 0.393004 -0.101562 -0.367188\nv 0.390625 -0.0958948 -0.367188\nv 0.390625 -0.101562 -0.365693\nv 0.500891 -0.101562 -0.367188\nv -0.311195 -0.09375 -0.367188\nv -0.3125 -0.09375 -0.359498\nv -0.221715 -0.09375 -0.367188\nv -0.21875 -0.09375 -0.36529\nv 0.389996 -0.09375 -0.367188\nv 0.382812 -0.09375 -0.360671\nv 0.501308 -0.09375 -0.367188\nv -0.311989 -0.0859375 -0.367188\nv -0.3125 -0.0824571 -0.367188\nv -0.3125 -0.0859375 -0.364607\nv -0.220478 -0.0859375 -0.367188\nv -0.21875 -0.0825608 -0.367188\nv -0.21875 -0.0859375 -0.366226\nv -0.210938 -0.0859375 -0.361431\nv 0.388671 -0.0859375 -0.367188\nv 0.382812 -0.0859375 -0.362591\nv 0.50251 -0.0859375 -0.367188\nv -0.3131 -0.078125 -0.367188\nv -0.216623 -0.078125 -0.367188\nv -0.210938 -0.078125 -0.363734\nv 0.386642 -0.078125 -0.367188\nv 0.382812 -0.078125 -0.36493\nv 0.503823 -0.078125 -0.367188\nv -0.314043 -0.0703125 -0.367188\nv -0.211691 -0.0703125 -0.367188\nv -0.210938 -0.0677891 -0.367188\nv -0.210938 -0.0703125 -0.366764\nv -0.203125 -0.0703125 -0.363464\nv -0.195312 -0.0703125 -0.360811\nv 0.375 -0.0703125 -0.361057\nv 0.384915 -0.0703125 -0.367188\nv 0.382812 -0.0671363 -0.367188\nv 0.382812 -0.0703125 -0.366258\nv 0.504595 -0.0703125 -0.367188\nv -0.314365 -0.0625 -0.367188\nv -0.207239 -0.0625 -0.367188\nv -0.203125 -0.0574331 -0.367188\nv -0.203125 -0.0625 -0.366292\nv -0.195312 -0.0625 -0.365335\nv -0.1875 -0.0551625 -0.367188\nv -0.1875 -0.0625 -0.36453\nv -0.179688 -0.0549351 -0.367188\nv -0.179688 -0.0625 -0.36394\nv -0.171875 -0.0625 -0.36313\nv -0.164062 -0.0625 -0.362503\nv -0.15625 -0.0625 -0.361275\nv -0.148438 -0.0625 -0.359912\nv 0.078125 -0.0625 -0.359729\nv 0.0859375 -0.0625 -0.360389\nv 0.09375 -0.0625 -0.361081\nv 0.101562 -0.0625 -0.361762\nv 0.109375 -0.0625 -0.362392\nv 0.117188 -0.0625 -0.363022\nv 0.125 -0.0625 -0.363569\nv 0.132812 -0.0557407 -0.367188\nv 0.132812 -0.0625 -0.364015\nv 0.140625 -0.056827 -0.367188\nv 0.140625 -0.0625 -0.364306\nv 0.148438 -0.0572521 -0.367188\nv 0.148438 -0.0625 -0.364394\nv 0.15625 -0.0575818 -0.367188\nv 0.15625 -0.0625 -0.364567\nv 0.164062 -0.0580154 -0.367188\nv 0.164062 -0.0625 -0.364837\nv 0.171875 -0.0583363 -0.367188\nv 0.171875 -0.0625 -0.364993\nv 0.179688 -0.0583213 -0.367188\nv 0.179688 -0.0625 -0.365047\nv 0.1875 -0.0582343 -0.367188\nv 0.1875 -0.0625 -0.365054\nv 0.195312 -0.0581923 -0.367188\nv 0.195312 -0.0625 -0.365086\nv 0.203125 -0.0581124 -0.367188\nv 0.203125 -0.0625 -0.365044\nv 0.210938 -0.0580887 -0.367188\nv 0.210938 -0.0625 -0.365026\nv 0.21875 -0.0579539 -0.367188\nv 0.21875 -0.0625 -0.364964\nv 0.226562 -0.0578585 -0.367188\nv 0.226562 -0.0625 -0.36489\nv 0.234375 -0.0577888 -0.367188\nv 0.234375 -0.0625 -0.364774\nv 0.242188 -0.0574505 -0.367188\nv 0.242188 -0.0625 -0.364533\nv 0.25 -0.0570937 -0.367188\nv 0.25 -0.0625 -0.3643\nv 0.257812 -0.0568208 -0.367188\nv 0.257812 -0.0625 -0.364188\nv 0.265625 -0.0571348 -0.367188\nv 0.265625 -0.0625 -0.36427\nv 0.273438 -0.0574012 -0.367188\nv 0.273438 -0.0625 -0.364239\nv 0.28125 -0.056704 -0.367188\nv 0.28125 -0.0625 -0.363842\nv 0.289062 -0.0562976 -0.367188\nv 0.289062 -0.0625 -0.363718\nv 0.296875 -0.056267 -0.367188\nv 0.296875 -0.0625 -0.363718\nv 0.304688 -0.0553693 -0.367188\nv 0.304688 -0.0625 -0.363538\nv 0.3125 -0.0625 -0.362946\nv 0.320312 -0.0625 -0.362617\nv 0.328125 -0.0625 -0.362496\nv 0.335938 -0.0625 -0.362519\nv 0.34375 -0.0625 -0.362541\nv 0.351562 -0.0625 -0.362754\nv 0.359375 -0.0625 -0.363118\nv 0.367188 -0.0550976 -0.367188\nv 0.367188 -0.0625 -0.363554\nv 0.378888 -0.0625 -0.367188\nv 0.375 -0.057031 -0.367188\nv 0.375 -0.0625 -0.36565\nv 0.505454 -0.0625 -0.367188\nv 0.507812 -0.0625 -0.359651\nv -0.313766 -0.0546875 -0.367188\nv -0.195751 -0.0546875 -0.367188\nv -0.19404 -0.0546875 -0.367188\nv -0.195312 -0.0545926 -0.367188\nv -0.195312 -0.0546875 -0.36716\nv -0.178261 -0.0546875 -0.367188\nv -0.171875 -0.053449 -0.367188\nv -0.171875 -0.0546875 -0.366707\nv -0.164062 -0.0519377 -0.367188\nv -0.164062 -0.0546875 -0.365857\nv -0.15625 -0.0488419 -0.367188\nv -0.15625 -0.0546875 -0.364465\nv -0.148438 -0.0546875 -0.363061\nv -0.140625 -0.0546875 -0.362152\nv -0.132812 -0.0546875 -0.361898\nv -0.125 -0.0546875 -0.361633\nv -0.117188 -0.0546875 -0.361545\nv -0.109375 -0.0546875 -0.361593\nv -0.101562 -0.0546875 -0.361645\nv -0.09375 -0.0546875 -0.36148\nv -0.0859375 -0.0546875 -0.361141\nv -0.078125 -0.0546875 -0.360724\nv -0.0703125 -0.0546875 -0.360256\nv -0.0625 -0.0546875 -0.359885\nv -0.0546875 -0.0546875 -0.359811\nv -0.046875 -0.0546875 -0.359917\nv -0.0390625 -0.0546875 -0.3601\nv -0.03125 -0.0546875 -0.360325\nv -0.0234375 -0.0546875 -0.360562\nv -0.015625 -0.0546875 -0.360684\nv -0.0078125 -0.0546875 -0.360576\nv 0 -0.0546875 -0.360764\nv 0.0078125 -0.0546875 -0.361185\nv 0.015625 -0.0546875 -0.361818\nv 0.0234375 -0.0546875 -0.361868\nv 0.03125 -0.0546875 -0.361802\nv 0.0390625 -0.0546875 -0.361797\nv 0.046875 -0.0546875 -0.361777\nv 0.0546875 -0.0546875 -0.36192\nv 0.0625 -0.0546875 -0.36216\nv 0.0703125 -0.0546875 -0.36247\nv 0.078125 -0.0546875 -0.363096\nv 0.0859375 -0.0546875 -0.363792\nv 0.09375 -0.0546875 -0.364505\nv 0.101562 -0.0488673 -0.367188\nv 0.101562 -0.0546875 -0.365243\nv 0.109375 -0.0510396 -0.367188\nv 0.109375 -0.0546875 -0.365942\nv 0.117188 -0.0529045 -0.367188\nv 0.117188 -0.0546875 -0.366582\nv 0.126168 -0.0546875 -0.367188\nv 0.125 -0.0544554 -0.367188\nv 0.125 -0.0546875 -0.36711\nv 0.308391 -0.0546875 -0.367188\nv 0.3125 -0.053593 -0.367188\nv 0.3125 -0.0546875 -0.366823\nv 0.320312 -0.0530368 -0.367188\nv 0.320312 -0.0546875 -0.366572\nv 0.328125 -0.0529493 -0.367188\nv 0.328125 -0.0546875 -0.36653\nv 0.335938 -0.0531114 -0.367188\nv 0.335938 -0.0546875 -0.366583\nv 0.34375 -0.0534563 -0.367188\nv 0.34375 -0.0546875 -0.366714\nv 0.351562 -0.0537792 -0.367188\nv 0.351562 -0.0546875 -0.366819\nv 0.361012 -0.0546875 -0.367188\nv 0.359375 -0.0545608 -0.367188\nv 0.359375 -0.0546875 -0.36714\nv 0.505527 -0.0546875 -0.367188\nv 0.507812 -0.0546875 -0.360057\nv -0.31317 -0.046875 -0.367188\nv -0.151622 -0.046875 -0.367188\nv -0.148438 -0.0450579 -0.367188\nv -0.148438 -0.046875 -0.366556\nv -0.140625 -0.0426851 -0.367188\nv -0.140625 -0.046875 -0.365629\nv -0.132812 -0.0423183 -0.367188\nv -0.132812 -0.046875 -0.365305\nv -0.125 -0.042345 -0.367188\nv -0.125 -0.046875 -0.365263\nv -0.117188 -0.0429156 -0.367188\nv -0.117188 -0.046875 -0.365475\nv -0.109375 -0.0426734 -0.367188\nv -0.109375 -0.046875 -0.36539\nv -0.101562 -0.0423335 -0.367188\nv -0.101562 -0.046875 -0.365342\nv -0.09375 -0.0422456 -0.367188\nv -0.09375 -0.046875 -0.365256\nv -0.0859375 -0.041938 -0.367188\nv -0.0859375 -0.046875 -0.365094\nv -0.078125 -0.0412662 -0.367188\nv -0.078125 -0.046875 -0.364793\nv -0.0703125 -0.0404574 -0.367188\nv -0.0703125 -0.046875 -0.364439\nv -0.0625 -0.0397993 -0.367188\nv -0.0625 -0.046875 -0.364146\nv -0.0546875 -0.0395099 -0.367188\nv -0.0546875 -0.046875 -0.364017\nv -0.046875 -0.0400275 -0.367188\nv -0.046875 -0.046875 -0.364235\nv -0.0390625 -0.0408019 -0.367188\nv -0.0390625 -0.046875 -0.36447\nv -0.03125 -0.040966 -0.367188\nv -0.03125 -0.046875 -0.364681\nv -0.0234375 -0.0406289 -0.367188\nv -0.0234375 -0.046875 -0.364806\nv -0.015625 -0.039955 -0.367188\nv -0.015625 -0.046875 -0.364873\nv -0.0078125 -0.0391447 -0.367188\nv -0.0078125 -0.046875 -0.364848\nv 0 -0.046875 -0.365083\nv 0.0078125 -0.0409818 -0.367188\nv 0.0078125 -0.046875 -0.365605\nv 0.015625 -0.0429647 -0.367188\nv 0.015625 -0.046875 -0.366197\nv 0.0234375 -0.0427589 -0.367188\nv 0.0234375 -0.046875 -0.366169\nv 0.03125 -0.042112 -0.367188\nv 0.03125 -0.046875 -0.366041\nv 0.0390625 -0.0415004 -0.367188\nv 0.0390625 -0.046875 -0.365928\nv 0.046875 -0.0409882 -0.367188\nv 0.046875 -0.046875 -0.365818\nv 0.0546875 -0.0406686 -0.367188\nv 0.0546875 -0.046875 -0.365796\nv 0.0625 -0.0411191 -0.367188\nv 0.0625 -0.046875 -0.365934\nv 0.0703125 -0.0419592 -0.367188\nv 0.0703125 -0.046875 -0.366114\nv 0.078125 -0.0427121 -0.367188\nv 0.078125 -0.046875 -0.366261\nv 0.0859375 -0.0440493 -0.367188\nv 0.0859375 -0.046875 -0.366642\nv 0.0944436 -0.046875 -0.367188\nv 0.09375 -0.0466 -0.367188\nv 0.09375 -0.046875 -0.367133\nv 0.504534 -0.046875 -0.367188\nv -0.312778 -0.0390625 -0.367188\nv -0.00528808 -0.0390625 -0.367188\nv 0.000745921 -0.0390625 -0.367188\nv 0 -0.0386639 -0.367188\nv 0 -0.0390625 -0.367138\nv 0.503213 -0.0390625 -0.367188\nv -0.313002 -0.03125 -0.367188\nv 0.502053 -0.03125 -0.367188\nv -0.312997 -0.0234375 -0.367188\nv 0.50087 -0.0234375 -0.367188\nv -0.313359 -0.015625 -0.367188\nv 0.5 -0.015625 -0.367188\nv 0.5 -0.0155963 -0.367188\nv -0.313124 -0.0078125 -0.367188\nv 0.499912 -0.0078125 -0.367188\nv 0.5 -0.00487206 -0.367188\nv 0.5 -0.0078125 -0.366975\nv -0.312629 0 -0.367188\nv -0.3125 0.00301333 -0.367188\nv 0.500106 0 -0.367188\nv 0.5 0.00212903 -0.367188\nv -0.312267 0.0078125 -0.367188\nv -0.3125 0.0078125 -0.366677\nv 0.499638 0.0078125 -0.367188\nv 0.5 0.0078125 -0.366476\nv -0.312295 0.015625 -0.367188\nv -0.3125 0.0197386 -0.367188\nv -0.3125 0.015625 -0.366746\nv 0.289062 0.0226712 -0.367188\nv 0.296875 0.0217397 -0.367188\nv 0.304688 0.0229361 -0.367188\nv 0.498609 0.015625 -0.367188\nv 0.5 0.015625 -0.364325\nv -0.312654 0.0234375 -0.367188\nv 0.171875 0.0308138 -0.367188\nv 0.179688 0.0292052 -0.367188\nv 0.1875 0.0276296 -0.367188\nv 0.195312 0.027089 -0.367188\nv 0.203125 0.0259769 -0.367188\nv 0.210938 0.0248742 -0.367188\nv 0.21875 0.0238081 -0.367188\nv 0.226562 0.0239975 -0.367188\nv 0.234375 0.0255031 -0.367188\nv 0.242188 0.0262619 -0.367188\nv 0.25 0.0262551 -0.367188\nv 0.257812 0.0259237 -0.367188\nv 0.265625 0.0257903 -0.367188\nv 0.273438 0.0274878 -0.367188\nv 0.286653 0.0234375 -0.367188\nv 0.28125 0.0260926 -0.367188\nv 0.289062 0.0234375 -0.3671\nv 0.296875 0.0234375 -0.366989\nv 0.30577 0.0234375 -0.367188\nv 0.304688 0.0250692 -0.367188\nv 0.304688 0.0234375 -0.367122\nv 0.497257 0.0234375 -0.367188\nv 0.5 0.0234375 -0.362237\nv -0.312973 0.03125 -0.367188\nv -0.015625 0.0388756 -0.367188\nv -0.0078125 0.0378872 -0.367188\nv 0 0.0384449 -0.367188\nv 0.0078125 0.0388644 -0.367188\nv 0.015625 0.0382908 -0.367188\nv 0.0234375 0.0384487 -0.367188\nv 0.03125 0.0375378 -0.367188\nv 0.0390625 0.0369087 -0.367188\nv 0.046875 0.0363692 -0.367188\nv 0.0546875 0.0358482 -0.367188\nv 0.0625 0.0345586 -0.367188\nv 0.0703125 0.0341288 -0.367188\nv 0.078125 0.0336705 -0.367188\nv 0.0859375 0.0330391 -0.367188\nv 0.09375 0.0331415 -0.367188\nv 0.101562 0.0331682 -0.367188\nv 0.109375 0.0332407 -0.367188\nv 0.117188 0.0330873 -0.367188\nv 0.125 0.0326208 -0.367188\nv 0.132812 0.0319782 -0.367188\nv 0.140625 0.03182 -0.367188\nv 0.148438 0.031755 -0.367188\nv 0.15625 0.0316861 -0.367188\nv 0.169043 0.03125 -0.367188\nv 0.164062 0.0315389 -0.367188\nv 0.171875 0.03125 -0.367133\nv 0.179688 0.03125 -0.366931\nv 0.1875 0.03125 -0.366729\nv 0.195312 0.03125 -0.366691\nv 0.203125 0.03125 -0.366585\nv 0.210938 0.03125 -0.366498\nv 0.21875 0.03125 -0.36649\nv 0.226562 0.03125 -0.366478\nv 0.234375 0.03125 -0.366601\nv 0.242188 0.03125 -0.366608\nv 0.25 0.03125 -0.366523\nv 0.257812 0.03125 -0.366483\nv 0.265625 0.03125 -0.366483\nv 0.273438 0.03125 -0.366783\nv 0.28125 0.03125 -0.366799\nv 0.289062 0.03125 -0.366826\nv 0.299554 0.03125 -0.367188\nv 0.296875 0.03125 -0.367053\nv 0.304688 0.0331773 -0.367188\nv 0.3125 0.0370569 -0.367188\nv 0.494474 0.03125 -0.367188\nv 0.492188 0.0362602 -0.367188\nv -0.31297 0.0390625 -0.367188\nv -0.101562 0.0465446 -0.367188\nv -0.09375 0.0460032 -0.367188\nv -0.0859375 0.0459388 -0.367188\nv -0.078125 0.0455202 -0.367188\nv -0.0703125 0.0450626 -0.367188\nv -0.0625 0.0437794 -0.367188\nv -0.0546875 0.0432695 -0.367188\nv -0.046875 0.0428546 -0.367188\nv -0.0390625 0.0422323 -0.367188\nv -0.03125 0.0412414 -0.367188\nv -0.016811 0.0390625 -0.367188\nv -0.0234375 0.0400856 -0.367188\nv -0.015625 0.0390625 -0.367134\nv -0.0078125 0.0390625 -0.366848\nv 0 0.0390625 -0.367001\nv 0.0078125 0.0390625 -0.367127\nv 0.015625 0.0390625 -0.36695\nv 0.0234375 0.0390625 -0.366997\nv 0.03125 0.0390625 -0.366715\nv 0.0390625 0.0390625 -0.366516\nv 0.046875 0.0390625 -0.366356\nv 0.0546875 0.0390625 -0.366203\nv 0.0625 0.0390625 -0.365827\nv 0.0703125 0.0390625 -0.365718\nv 0.078125 0.0390625 -0.36558\nv 0.0859375 0.0390625 -0.365387\nv 0.09375 0.0390625 -0.365399\nv 0.101562 0.0390625 -0.36541\nv 0.109375 0.0390625 -0.365419\nv 0.117188 0.0390625 -0.365387\nv 0.125 0.0390625 -0.365246\nv 0.132812 0.0390625 -0.365064\nv 0.140625 0.0390625 -0.364957\nv 0.148438 0.0390625 -0.364876\nv 0.15625 0.0390625 -0.364892\nv 0.164062 0.0390625 -0.36489\nv 0.171875 0.0390625 -0.364862\nv 0.179688 0.0390625 -0.364852\nv 0.1875 0.0390625 -0.364832\nv 0.195312 0.0390625 -0.364835\nv 0.203125 0.0390625 -0.364817\nv 0.210938 0.0390625 -0.364865\nv 0.21875 0.0390625 -0.364927\nv 0.226562 0.0390625 -0.364892\nv 0.234375 0.0390625 -0.364978\nv 0.242188 0.0390625 -0.365087\nv 0.25 0.0390625 -0.365143\nv 0.257812 0.0390625 -0.365157\nv 0.265625 0.0390625 -0.365288\nv 0.273438 0.0390625 -0.365682\nv 0.28125 0.0390625 -0.365744\nv 0.289062 0.0390625 -0.365871\nv 0.296875 0.0390625 -0.366019\nv 0.304688 0.0390625 -0.366468\nv 0.319254 0.0390625 -0.367188\nv 0.3125 0.0390625 -0.366967\nv 0.320312 0.0391774 -0.367188\nv 0.328125 0.0401514 -0.367188\nv 0.335938 0.0405892 -0.367188\nv 0.34375 0.0409533 -0.367188\nv 0.351562 0.0415392 -0.367188\nv 0.359375 0.0420531 -0.367188\nv 0.367188 0.0421443 -0.367188\nv 0.375 0.0422978 -0.367188\nv 0.382812 0.042874 -0.367188\nv 0.390625 0.0449462 -0.367188\nv 0.398438 0.0449611 -0.367188\nv 0.40625 0.046128 -0.367188\nv 0.49002 0.0390625 -0.367188\nv 0.484375 0.0438523 -0.367188\nv 0.492188 0.0390625 -0.365261\nv -0.312586 0.046875 -0.367188\nv -0.3125 0.0478687 -0.367188\nv -0.15625 0.0540355 -0.367188\nv -0.148438 0.0512357 -0.367188\nv -0.140625 0.050092 -0.367188\nv -0.132812 0.0493012 -0.367188\nv -0.125 0.0484592 -0.367188\nv -0.117188 0.0475972 -0.367188\nv -0.105795 0.046875 -0.367188\nv -0.109375 0.047132 -0.367188\nv -0.101562 0.046875 -0.36709\nv -0.09375 0.046875 -0.366926\nv -0.0859375 0.046875 -0.366909\nv -0.078125 0.046875 -0.366788\nv -0.0703125 0.046875 -0.366697\nv -0.0625 0.046875 -0.366361\nv -0.0546875 0.046875 -0.366172\nv -0.046875 0.046875 -0.366044\nv -0.0390625 0.046875 -0.365797\nv -0.03125 0.046875 -0.365505\nv -0.0234375 0.046875 -0.365154\nv -0.015625 0.046875 -0.364867\nv -0.0078125 0.046875 -0.364634\nv 0 0.046875 -0.36472\nv 0.0078125 0.046875 -0.36496\nv 0.015625 0.046875 -0.364904\nv 0.0234375 0.046875 -0.364913\nv 0.03125 0.046875 -0.364664\nv 0.0390625 0.046875 -0.364407\nv 0.046875 0.046875 -0.364251\nv 0.0546875 0.046875 -0.36411\nv 0.0625 0.046875 -0.363784\nv 0.0703125 0.046875 -0.363663\nv 0.078125 0.046875 -0.36351\nv 0.0859375 0.046875 -0.363368\nv 0.09375 0.046875 -0.363399\nv 0.101562 0.046875 -0.36343\nv 0.109375 0.046875 -0.363489\nv 0.117188 0.046875 -0.363475\nv 0.125 0.046875 -0.363386\nv 0.132812 0.046875 -0.363268\nv 0.140625 0.046875 -0.363234\nv 0.148438 0.046875 -0.363232\nv 0.15625 0.046875 -0.363193\nv 0.164062 0.046875 -0.36314\nv 0.171875 0.046875 -0.363074\nv 0.179688 0.046875 -0.363081\nv 0.1875 0.046875 -0.36316\nv 0.195312 0.046875 -0.363301\nv 0.203125 0.046875 -0.363389\nv 0.210938 0.046875 -0.363479\nv 0.21875 0.046875 -0.363525\nv 0.226562 0.046875 -0.363433\nv 0.234375 0.046875 -0.363553\nv 0.242188 0.046875 -0.363721\nv 0.25 0.046875 -0.363838\nv 0.257812 0.046875 -0.363941\nv 0.265625 0.046875 -0.364104\nv 0.273438 0.046875 -0.364314\nv 0.28125 0.046875 -0.364182\nv 0.289062 0.046875 -0.364151\nv 0.296875 0.046875 -0.364332\nv 0.304688 0.046875 -0.36463\nv 0.3125 0.046875 -0.364876\nv 0.320312 0.046875 -0.36505\nv 0.328125 0.046875 -0.365281\nv 0.335938 0.046875 -0.365388\nv 0.34375 0.046875 -0.365525\nv 0.351562 0.046875 -0.365596\nv 0.359375 0.046875 -0.365649\nv 0.367188 0.046875 -0.365583\nv 0.375 0.046875 -0.365614\nv 0.382812 0.046875 -0.365805\nv 0.390625 0.046875 -0.366454\nv 0.398438 0.046875 -0.366347\nv 0.409967 0.046875 -0.367188\nv 0.40625 0.046875 -0.366804\nv 0.414062 0.0480679 -0.367188\nv 0.421875 0.0484677 -0.367188\nv 0.429688 0.0478799 -0.367188\nv 0.4375 0.0477097 -0.367188\nv 0.445312 0.047776 -0.367188\nv 0.453125 0.0479149 -0.367188\nv 0.460938 0.0486228 -0.367188\nv 0.46875 0.0493726 -0.367188\nv 0.47968 0.046875 -0.367188\nv 0.476562 0.0486436 -0.367188\nv 0.484375 0.046875 -0.365251\nv -0.311731 0.0546875 -0.367188\nv -0.3125 0.0546875 -0.364134\nv -0.1875 0.0594289 -0.367188\nv -0.179688 0.0572447 -0.367188\nv -0.171875 0.0563701 -0.367188\nv -0.158093 0.0546875 -0.367188\nv -0.164062 0.0558389 -0.367188\nv -0.15625 0.0546875 -0.367038\nv -0.148438 0.0546875 -0.366248\nv -0.140625 0.0546875 -0.365893\nv -0.132812 0.0546875 -0.365615\nv -0.125 0.0546875 -0.365275\nv -0.117188 0.0546875 -0.364849\nv -0.109375 0.0546875 -0.364484\nv -0.101562 0.0546875 -0.364124\nv -0.09375 0.0546875 -0.36379\nv -0.0859375 0.0546875 -0.363606\nv -0.078125 0.0546875 -0.363431\nv -0.0703125 0.0546875 -0.3633\nv -0.0625 0.0546875 -0.363127\nv -0.0546875 0.0546875 -0.362926\nv -0.046875 0.0546875 -0.362857\nv -0.0390625 0.0546875 -0.362557\nv -0.03125 0.0546875 -0.362241\nv -0.0234375 0.0546875 -0.361894\nv -0.015625 0.0546875 -0.361656\nv -0.0078125 0.0546875 -0.361445\nv 0 0.0546875 -0.361578\nv 0.0078125 0.0546875 -0.361654\nv 0.015625 0.0546875 -0.361559\nv 0.0234375 0.0546875 -0.361582\nv 0.03125 0.0546875 -0.361348\nv 0.0390625 0.0546875 -0.361042\nv 0.046875 0.0546875 -0.360958\nv 0.0546875 0.0546875 -0.360926\nv 0.0625 0.0546875 -0.360708\nv 0.0703125 0.0546875 -0.360676\nv 0.078125 0.0546875 -0.360607\nv 0.0859375 0.0546875 -0.360548\nv 0.09375 0.0546875 -0.36066\nv 0.101562 0.0546875 -0.360784\nv 0.109375 0.0546875 -0.360901\nv 0.117188 0.0546875 -0.360932\nv 0.125 0.0546875 -0.360912\nv 0.132812 0.0546875 -0.360843\nv 0.140625 0.0546875 -0.360799\nv 0.148438 0.0546875 -0.36077\nv 0.15625 0.0546875 -0.360769\nv 0.164062 0.0546875 -0.360762\nv 0.171875 0.0546875 -0.360757\nv 0.179688 0.0546875 -0.360812\nv 0.1875 0.0546875 -0.36088\nv 0.195312 0.0546875 -0.360964\nv 0.203125 0.0546875 -0.361051\nv 0.210938 0.0546875 -0.361138\nv 0.21875 0.0546875 -0.361165\nv 0.226562 0.0546875 -0.361092\nv 0.234375 0.0546875 -0.361167\nv 0.242188 0.0546875 -0.361281\nv 0.25 0.0546875 -0.361386\nv 0.257812 0.0546875 -0.361536\nv 0.265625 0.0546875 -0.361752\nv 0.273438 0.0546875 -0.361935\nv 0.28125 0.0546875 -0.361653\nv 0.289062 0.0546875 -0.361644\nv 0.296875 0.0546875 -0.36188\nv 0.304688 0.0546875 -0.362169\nv 0.3125 0.0546875 -0.362369\nv 0.320312 0.0546875 -0.362538\nv 0.328125 0.0546875 -0.362743\nv 0.335938 0.0546875 -0.362876\nv 0.34375 0.0546875 -0.36296\nv 0.351562 0.0546875 -0.362931\nv 0.359375 0.0546875 -0.36279\nv 0.367188 0.0546875 -0.362598\nv 0.375 0.0546875 -0.362359\nv 0.382812 0.0546875 -0.362541\nv 0.390625 0.0546875 -0.36287\nv 0.398438 0.0546875 -0.362905\nv 0.40625 0.0546875 -0.363202\nv 0.414062 0.0546875 -0.364114\nv 0.421875 0.0546875 -0.364167\nv 0.429688 0.0546875 -0.363983\nv 0.4375 0.0546875 -0.363978\nv 0.445312 0.0546875 -0.36383\nv 0.453125 0.0546875 -0.363174\nv 0.460938 0.0546875 -0.363234\nv 0.46875 0.0546875 -0.363396\nv 0.476562 0.0546875 -0.362779\nv 0.484375 0.0546875 -0.360671\nv -0.310494 0.0625 -0.367188\nv -0.203125 0.0670274 -0.367188\nv -0.192625 0.0625 -0.367188\nv -0.195312 0.0633871 -0.367188\nv -0.1875 0.0625 -0.36586\nv -0.179688 0.0625 -0.365014\nv -0.171875 0.0625 -0.364468\nv -0.164062 0.0625 -0.363829\nv -0.15625 0.0625 -0.363023\nv -0.148438 0.0625 -0.362198\nv -0.140625 0.0625 -0.361817\nv -0.132812 0.0625 -0.361531\nv -0.125 0.0625 -0.361191\nv -0.117188 0.0625 -0.360662\nv -0.109375 0.0625 -0.360098\nv -0.101562 0.0625 -0.359483\nv -0.309416 0.0703125 -0.367188\nv -0.206804 0.0703125 -0.367188\nv -0.210938 0.0735215 -0.367188\nv -0.203125 0.0703125 -0.364731\nv -0.195312 0.0703125 -0.360298\nv -0.309308 0.078125 -0.367188\nv -0.216602 0.078125 -0.367188\nv -0.21875 0.0812361 -0.367188\nv -0.210938 0.078125 -0.361689\nv -0.309683 0.0859375 -0.367188\nv -0.221393 0.0859375 -0.367188\nv -0.21875 0.0859375 -0.363828\nv -0.309119 0.09375 -0.367188\nv -0.226045 0.09375 -0.367188\nv -0.226562 0.095092 -0.367188\nv -0.309043 0.101562 -0.367188\nv -0.228801 0.101562 -0.367188\nv -0.226562 0.101562 -0.365071\nv -0.308697 0.109375 -0.367188\nv -0.229279 0.109375 -0.367188\nv -0.226562 0.109375 -0.364427\nv -0.308466 0.117188 -0.367188\nv -0.3125 0.117188 -0.359528\nv -0.229772 0.117188 -0.367188\nv -0.226562 0.117188 -0.363703\nv -0.308749 0.125 -0.367188\nv -0.3125 0.125 -0.36077\nv -0.230532 0.125 -0.367188\nv -0.226562 0.125 -0.363154\nv -0.309156 0.132812 -0.367188\nv -0.3125 0.132812 -0.362051\nv -0.231117 0.132812 -0.367188\nv -0.226562 0.132812 -0.362452\nv -0.30978 0.140625 -0.367188\nv -0.3125 0.140625 -0.363256\nv -0.231343 0.140625 -0.367188\nv -0.226562 0.140625 -0.362002\nv -0.310564 0.148438 -0.367188\nv -0.3125 0.148438 -0.364493\nv -0.231749 0.148438 -0.367188\nv -0.226562 0.148438 -0.361603\nv -0.311448 0.15625 -0.367188\nv -0.3125 0.15625 -0.365793\nv -0.232292 0.15625 -0.367188\nv -0.226562 0.15625 -0.361067\nv -0.312442 0.164062 -0.367188\nv -0.3125 0.164375 -0.367188\nv -0.3125 0.164062 -0.367111\nv -0.232904 0.164062 -0.367188\nv -0.226562 0.164062 -0.360319\nv -0.313462 0.171875 -0.367188\nv -0.232883 0.171875 -0.367188\nv -0.226562 0.171875 -0.360365\nv -0.314367 0.179688 -0.367188\nv -0.232997 0.179688 -0.367188\nv -0.226562 0.179688 -0.360485\nv -0.315024 0.1875 -0.367188\nv -0.233146 0.1875 -0.367188\nv -0.226562 0.1875 -0.360568\nv -0.315678 0.195312 -0.367188\nv -0.233074 0.195312 -0.367188\nv -0.226562 0.195312 -0.3608\nv -0.31644 0.203125 -0.367188\nv -0.233098 0.203125 -0.367188\nv -0.226562 0.203125 -0.360845\nv -0.317364 0.210938 -0.367188\nv -0.233098 0.210938 -0.367188\nv -0.226562 0.210938 -0.361036\nv -0.318344 0.21875 -0.367188\nv -0.320312 0.21875 -0.361055\nv -0.232998 0.21875 -0.367188\nv -0.226562 0.21875 -0.361206\nv -0.319304 0.226562 -0.367188\nv -0.320312 0.226562 -0.364639\nv -0.233001 0.226562 -0.367188\nv -0.226562 0.226562 -0.361455\nv -0.320019 0.234375 -0.367188\nv -0.320312 0.237339 -0.367188\nv -0.320312 0.234375 -0.366559\nv -0.233254 0.234375 -0.367188\nv -0.226562 0.234375 -0.36145\nv -0.320576 0.242188 -0.367188\nv -0.233966 0.242188 -0.367188\nv -0.234375 0.245179 -0.367188\nv -0.226562 0.242188 -0.360938\nv -0.320977 0.25 -0.367188\nv -0.235131 0.25 -0.367188\nv -0.234375 0.25 -0.366733\nv -0.226562 0.25 -0.36004\nv -0.321542 0.257812 -0.367188\nv -0.236156 0.257812 -0.367188\nv -0.234375 0.257812 -0.366144\nv -0.322162 0.265625 -0.367188\nv -0.237094 0.265625 -0.367188\nv -0.234375 0.265625 -0.365627\nv -0.322661 0.273438 -0.367188\nv -0.237941 0.273438 -0.367188\nv -0.234375 0.273438 -0.3651\nv -0.323226 0.28125 -0.367188\nv -0.238595 0.28125 -0.367188\nv -0.234375 0.28125 -0.364639\nv -0.323847 0.289062 -0.367188\nv -0.238965 0.289062 -0.367188\nv -0.234375 0.289062 -0.364208\nv -0.324478 0.296875 -0.367188\nv -0.239122 0.296875 -0.367188\nv -0.234375 0.296875 -0.363775\nv -0.324842 0.304688 -0.367188\nv -0.238918 0.304688 -0.367188\nv -0.234375 0.304688 -0.363249\nv -0.32509 0.3125 -0.367188\nv -0.238703 0.3125 -0.367188\nv -0.234375 0.3125 -0.362888\nv -0.325259 0.320312 -0.367188\nv -0.238723 0.320312 -0.367188\nv -0.234375 0.320312 -0.362415\nv -0.325227 0.328125 -0.367188\nv -0.239366 0.328125 -0.367188\nv -0.234375 0.328125 -0.361249\nv -0.325157 0.335938 -0.367188\nv -0.240495 0.335938 -0.367188\nv -0.325231 0.34375 -0.367188\nv -0.241053 0.34375 -0.367188\nv -0.32574 0.351562 -0.367188\nv -0.328125 0.351562 -0.360062\nv -0.241378 0.351562 -0.367188\nv -0.326296 0.359375 -0.367188\nv -0.328125 0.359375 -0.361865\nv -0.241382 0.359375 -0.367188\nv -0.326806 0.367188 -0.367188\nv -0.328125 0.367188 -0.363515\nv -0.241447 0.367188 -0.367188\nv -0.327309 0.375 -0.367188\nv -0.328125 0.375 -0.364968\nv -0.241461 0.375 -0.367188\nv -0.327836 0.382812 -0.367188\nv -0.328125 0.387101 -0.367188\nv -0.328125 0.382812 -0.366405\nv -0.241635 0.382812 -0.367188\nv -0.328305 0.390625 -0.367188\nv -0.241949 0.390625 -0.367188\nv -0.328737 0.398438 -0.367188\nv -0.241598 0.398438 -0.367188\nv -0.329157 0.40625 -0.367188\nv -0.2412 0.40625 -0.367188\nv -0.329627 0.414062 -0.367188\nv -0.241103 0.414062 -0.367188\nv -0.330089 0.421875 -0.367188\nv -0.241139 0.421875 -0.367188\nv -0.330656 0.429688 -0.367188\nv -0.241207 0.429688 -0.367188\nv -0.331291 0.4375 -0.367188\nv -0.24123 0.4375 -0.367188\nv -0.331896 0.445312 -0.367188\nv -0.241311 0.445312 -0.367188\nv -0.332527 0.453125 -0.367188\nv -0.241415 0.453125 -0.367188\nv -0.333176 0.460938 -0.367188\nv -0.241527 0.460938 -0.367188\nv -0.333841 0.46875 -0.367188\nv -0.241611 0.46875 -0.367188\nv -0.334499 0.476562 -0.367188\nv -0.241699 0.476562 -0.367188\nv -0.335237 0.484375 -0.367188\nv -0.335938 0.490094 -0.367188\nv -0.335938 0.484375 -0.360242\nv -0.241886 0.484375 -0.367188\nv -0.336161 0.492188 -0.367188\nv -0.242021 0.492188 -0.367188\nv -0.242188 0.49942 -0.367188\nv -0.336894 0.5 -0.367188\nv -0.242203 0.5 -0.367188\nv -0.242188 0.5 -0.367107\nv -0.33772 0.507812 -0.367188\nv -0.242456 0.507812 -0.367188\nv -0.242188 0.507812 -0.365497\nv -0.33861 0.515625 -0.367188\nv -0.242655 0.515625 -0.367188\nv -0.242188 0.515625 -0.363307\nv -0.339487 0.523438 -0.367188\nv -0.24336 0.523438 -0.367188\nv -0.340379 0.53125 -0.367188\nv -0.244171 0.53125 -0.367188\nv -0.34124 0.539062 -0.367188\nv -0.244898 0.539062 -0.367188\nv -0.342028 0.546875 -0.367188\nv -0.245645 0.546875 -0.367188\nv -0.342942 0.554688 -0.367188\nv -0.246359 0.554688 -0.367188\nv -0.343698 0.5625 -0.367188\nv -0.34375 0.563156 -0.367188\nv -0.247098 0.5625 -0.367188\nv -0.344288 0.570312 -0.367188\nv -0.247821 0.570312 -0.367188\nv -0.34473 0.578125 -0.367188\nv -0.248495 0.578125 -0.367188\nv -0.345265 0.585938 -0.367188\nv -0.249086 0.585938 -0.367188\nv -0.34577 0.59375 -0.367188\nv -0.249595 0.59375 -0.367188\nv -0.25 0.599163 -0.367188\nv -0.346338 0.601562 -0.367188\nv -0.250237 0.601562 -0.367188\nv -0.25 0.601562 -0.366663\nv -0.346877 0.609375 -0.367188\nv -0.250766 0.609375 -0.367188\nv -0.25 0.609375 -0.3654\nv -0.347453 0.617188 -0.367188\nv -0.251329 0.617188 -0.367188\nv -0.25 0.617188 -0.363757\nv -0.347837 0.625 -0.367188\nv -0.252232 0.625 -0.367188\nv -0.25 0.625 -0.360694\nv -0.347744 0.632812 -0.367188\nv -0.253169 0.632812 -0.367188\nv -0.347576 0.640625 -0.367188\nv -0.253868 0.640625 -0.367188\nv -0.34743 0.648438 -0.367188\nv -0.254531 0.648438 -0.367188\nv -0.34722 0.65625 -0.367188\nv -0.255405 0.65625 -0.367188\nv -0.346927 0.664062 -0.367188\nv -0.256079 0.664062 -0.367188\nv -0.346616 0.671875 -0.367188\nv -0.256518 0.671875 -0.367188\nv -0.34655 0.679688 -0.367188\nv -0.256802 0.679688 -0.367188\nv -0.346344 0.6875 -0.367188\nv -0.257017 0.6875 -0.367188\nv -0.346237 0.695312 -0.367188\nv -0.257235 0.695312 -0.367188\nv -0.346164 0.703125 -0.367188\nv -0.257697 0.703125 -0.367188\nv -0.257812 0.70426 -0.367188\nv -0.346235 0.710938 -0.367188\nv -0.258705 0.710938 -0.367188\nv -0.257812 0.710938 -0.364789\nv -0.346424 0.71875 -0.367188\nv -0.259647 0.71875 -0.367188\nv -0.257812 0.71875 -0.362118\nv -0.346671 0.726562 -0.367188\nv -0.260677 0.726562 -0.367188\nv -0.34689 0.734375 -0.367188\nv -0.262184 0.734375 -0.367188\nv -0.347272 0.742188 -0.367188\nv -0.264295 0.742188 -0.367188\nv -0.265625 0.745988 -0.367188\nv -0.347473 0.75 -0.367188\nv -0.266921 0.75 -0.367188\nv -0.265625 0.75 -0.363071\nv -0.347525 0.757812 -0.367188\nv -0.268915 0.757812 -0.367188\nv -0.347831 0.765625 -0.367188\nv -0.271025 0.765625 -0.367188\nv -0.273438 0.771748 -0.367188\nv -0.348688 0.773438 -0.367188\nv -0.274248 0.773438 -0.367188\nv -0.273438 0.773438 -0.360145\nv -0.349014 0.78125 -0.367188\nv -0.276841 0.78125 -0.367188\nv -0.349311 0.789062 -0.367188\nv -0.279187 0.789062 -0.367188\nv -0.348585 0.796875 -0.367188\nv -0.351562 0.796875 -0.359474\nv -0.280885 0.796875 -0.367188\nv -0.28125 0.798683 -0.367188\nv -0.347323 0.804688 -0.367188\nv -0.282791 0.804688 -0.367188\nv -0.28125 0.804688 -0.359986\nv -0.345859 0.8125 -0.367188\nv -0.284146 0.8125 -0.367188\nv -0.34445 0.820312 -0.367188\nv -0.34375 0.824452 -0.367188\nv -0.286301 0.820312 -0.367188\nv -0.343302 0.828125 -0.367188\nv -0.34375 0.828125 -0.36679\nv -0.28783 0.828125 -0.367188\nv -0.341491 0.835938 -0.367188\nv -0.34375 0.835938 -0.36513\nv -0.287971 0.835938 -0.367188\nv -0.337303 0.84375 -0.367188\nv -0.34375 0.84375 -0.361532\nv -0.335938 0.844992 -0.367188\nv -0.328125 0.851367 -0.367188\nv -0.287374 0.84375 -0.367188\nv -0.327834 0.851562 -0.367188\nv -0.328125 0.851562 -0.366844\nv -0.320312 0.8561 -0.367188\nv -0.3125 0.859365 -0.367188\nv -0.296875 0.858368 -0.367188\nv -0.288305 0.851562 -0.367188\nv -0.289062 0.853138 -0.367188\nv -0.289062 0.851562 -0.363209\nv -0.320312 0.859375 -0.359876\nv -0.312255 0.859375 -0.367188\nv -0.3125 0.859375 -0.367169\nv -0.302609 0.859375 -0.367188\nv -0.304688 0.85965 -0.367188\nv -0.296875 0.859375 -0.36507\nv -0.3125 -0.734947 -0.359375\nv -0.304688 -0.734993 -0.359375\nv -0.296875 -0.734604 -0.359375\nv 0.429688 -0.735206 -0.359375\nv 0.4375 -0.73689 -0.359375\nv 0.445312 -0.737715 -0.359375\nv 0.453125 -0.738423 -0.359375\nv 0.460938 -0.73878 -0.359375\nv 0.46875 -0.738098 -0.359375\nv 0.476562 -0.736211 -0.359375\nv -0.335938 -0.726758 -0.359375\nv -0.328125 -0.730753 -0.359375\nv -0.316502 -0.734375 -0.359375\nv -0.320312 -0.733787 -0.359375\nv -0.29498 -0.734375 -0.359375\nv -0.289062 -0.733648 -0.359375\nv -0.289062 -0.734375 -0.357129\nv -0.28125 -0.731986 -0.359375\nv -0.273438 -0.729144 -0.359375\nv 0.414062 -0.730051 -0.359375\nv 0.42639 -0.734375 -0.359375\nv 0.421875 -0.733157 -0.359375\nv 0.421875 -0.734375 -0.351782\nv 0.482838 -0.734375 -0.359375\nv 0.484375 -0.733871 -0.359375\nv 0.492188 -0.731113 -0.359375\nv -0.336208 -0.726562 -0.359375\nv -0.268247 -0.726562 -0.359375\nv -0.265625 -0.724932 -0.359375\nv -0.265625 -0.726562 -0.356809\nv -0.257812 -0.719238 -0.359375\nv 0.398438 -0.718992 -0.359375\nv 0.407169 -0.726562 -0.359375\nv 0.40625 -0.725866 -0.359375\nv 0.40625 -0.726562 -0.35774\nv 0.499596 -0.726562 -0.359375\nv 0.5 -0.726215 -0.359375\nv 0.5 -0.726562 -0.357452\nv -0.339813 -0.71875 -0.359375\nv -0.257168 -0.71875 -0.359375\nv -0.25 -0.713448 -0.359375\nv 0.398232 -0.71875 -0.359375\nv 0.390625 -0.711884 -0.359375\nv 0.504259 -0.71875 -0.359375\nv -0.34074 -0.710938 -0.359375\nv -0.247245 -0.710938 -0.359375\nv -0.242188 -0.706 -0.359375\nv 0.389951 -0.710938 -0.359375\nv 0.50502 -0.710938 -0.359375\nv -0.340092 -0.703125 -0.359375\nv -0.239609 -0.703125 -0.359375\nv 0.386586 -0.703125 -0.359375\nv 0.505816 -0.703125 -0.359375\nv -0.339458 -0.695312 -0.359375\nv -0.234455 -0.695312 -0.359375\nv -0.234375 -0.695073 -0.359375\nv -0.234375 -0.695312 -0.359091\nv 0.38557 -0.695312 -0.359375\nv 0.506202 -0.695312 -0.359375\nv -0.338324 -0.6875 -0.359375\nv -0.231732 -0.6875 -0.359375\nv 0.384759 -0.6875 -0.359375\nv 0.506297 -0.6875 -0.359375\nv -0.337233 -0.679688 -0.359375\nv -0.229404 -0.679688 -0.359375\nv 0.383822 -0.679688 -0.359375\nv 0.382812 -0.679688 -0.352638\nv 0.506662 -0.679688 -0.359375\nv 0.507812 -0.679688 -0.352495\nv -0.33625 -0.671875 -0.359375\nv -0.335938 -0.669238 -0.359375\nv -0.227209 -0.671875 -0.359375\nv -0.226562 -0.669371 -0.359375\nv -0.226562 -0.671875 -0.355859\nv 0.383134 -0.671875 -0.359375\nv 0.382812 -0.667163 -0.359375\nv 0.382812 -0.671875 -0.356444\nv 0.506911 -0.671875 -0.359375\nv 0.507812 -0.671875 -0.353136\nv -0.335257 -0.664062 -0.359375\nv -0.335938 -0.664062 -0.35619\nv -0.225202 -0.664062 -0.359375\nv 0.382625 -0.664062 -0.359375\nv 0.507222 -0.664062 -0.359375\nv 0.507812 -0.664062 -0.353812\nv -0.334113 -0.65625 -0.359375\nv -0.223335 -0.65625 -0.359375\nv 0.382019 -0.65625 -0.359375\nv 0.50747 -0.65625 -0.359375\nv 0.507812 -0.649588 -0.359375\nv 0.507812 -0.65625 -0.354943\nv -0.332936 -0.648438 -0.359375\nv -0.221141 -0.648438 -0.359375\nv 0.381421 -0.648438 -0.359375\nv 0.507867 -0.648438 -0.359375\nv -0.331788 -0.640625 -0.359375\nv -0.219901 -0.640625 -0.359375\nv -0.21875 -0.640625 -0.355915\nv 0.380839 -0.640625 -0.359375\nv 0.508208 -0.640625 -0.359375\nv -0.331122 -0.632812 -0.359375\nv -0.219002 -0.632812 -0.359375\nv -0.21875 -0.630099 -0.359375\nv -0.21875 -0.632812 -0.358675\nv 0.38028 -0.632812 -0.359375\nv 0.508051 -0.632812 -0.359375\nv 0.507812 -0.626929 -0.359375\nv -0.330465 -0.625 -0.359375\nv -0.218302 -0.625 -0.359375\nv 0.37991 -0.625 -0.359375\nv 0.507729 -0.625 -0.359375\nv -0.329839 -0.617188 -0.359375\nv -0.217711 -0.617188 -0.359375\nv 0.379667 -0.617188 -0.359375\nv 0.507295 -0.617188 -0.359375\nv -0.329933 -0.609375 -0.359375\nv -0.217175 -0.609375 -0.359375\nv 0.379451 -0.609375 -0.359375\nv 0.506241 -0.609375 -0.359375\nv -0.330095 -0.601562 -0.359375\nv -0.216808 -0.601562 -0.359375\nv 0.379147 -0.601562 -0.359375\nv 0.505108 -0.601562 -0.359375\nv -0.330028 -0.59375 -0.359375\nv -0.216754 -0.59375 -0.359375\nv 0.378837 -0.59375 -0.359375\nv 0.504066 -0.59375 -0.359375\nv -0.329968 -0.585938 -0.359375\nv -0.216813 -0.585938 -0.359375\nv 0.378847 -0.585938 -0.359375\nv 0.375 -0.585938 -0.352441\nv 0.503132 -0.585938 -0.359375\nv -0.329825 -0.578125 -0.359375\nv -0.216871 -0.578125 -0.359375\nv 0.378757 -0.578125 -0.359375\nv 0.375 -0.578125 -0.353697\nv 0.502644 -0.578125 -0.359375\nv -0.329588 -0.570312 -0.359375\nv -0.21677 -0.570312 -0.359375\nv 0.378694 -0.570312 -0.359375\nv 0.375 -0.570312 -0.354511\nv 0.502417 -0.570312 -0.359375\nv -0.32947 -0.5625 -0.359375\nv -0.215541 -0.5625 -0.359375\nv -0.210938 -0.557109 -0.359375\nv -0.210938 -0.5625 -0.355283\nv 0.34375 -0.555101 -0.359375\nv 0.351562 -0.555063 -0.359375\nv 0.367188 -0.5625 -0.352345\nv 0.378257 -0.5625 -0.359375\nv 0.375 -0.556397 -0.359375\nv 0.375 -0.5625 -0.356195\nv 0.50243 -0.5625 -0.359375\nv -0.329488 -0.554688 -0.359375\nv -0.207707 -0.554688 -0.359375\nv -0.203125 -0.552478 -0.359375\nv -0.203125 -0.554688 -0.357519\nv -0.195312 -0.551518 -0.359375\nv -0.195312 -0.554688 -0.355741\nv -0.1875 -0.551601 -0.359375\nv -0.1875 -0.554688 -0.354691\nv -0.179688 -0.552118 -0.359375\nv -0.179688 -0.554688 -0.354322\nv -0.171875 -0.552213 -0.359375\nv -0.171875 -0.554688 -0.353031\nv -0.164062 -0.551961 -0.359375\nv -0.15625 -0.55139 -0.359375\nv -0.148438 -0.550731 -0.359375\nv -0.140625 -0.549236 -0.359375\nv -0.132812 -0.547191 -0.359375\nv -0.117188 -0.547261 -0.359375\nv -0.109375 -0.548176 -0.359375\nv -0.101562 -0.548896 -0.359375\nv -0.09375 -0.549333 -0.359375\nv -0.0859375 -0.549755 -0.359375\nv -0.078125 -0.550136 -0.359375\nv -0.0703125 -0.550371 -0.359375\nv -0.0625 -0.55057 -0.359375\nv -0.0546875 -0.5508 -0.359375\nv -0.046875 -0.550965 -0.359375\nv -0.0390625 -0.550796 -0.359375\nv -0.03125 -0.550691 -0.359375\nv -0.0234375 -0.550605 -0.359375\nv -0.015625 -0.550391 -0.359375\nv -0.0078125 -0.550382 -0.359375\nv 0 -0.550674 -0.359375\nv 0.0078125 -0.55053 -0.359375\nv 0.015625 -0.550362 -0.359375\nv 0.0234375 -0.550168 -0.359375\nv 0.03125 -0.550187 -0.359375\nv 0.0390625 -0.550257 -0.359375\nv 0.046875 -0.55011 -0.359375\nv 0.0546875 -0.549721 -0.359375\nv 0.0625 -0.549473 -0.359375\nv 0.0703125 -0.54917 -0.359375\nv 0.078125 -0.548836 -0.359375\nv 0.0859375 -0.548702 -0.359375\nv 0.09375 -0.548361 -0.359375\nv 0.101562 -0.548094 -0.359375\nv 0.109375 -0.547772 -0.359375\nv 0.117188 -0.547622 -0.359375\nv 0.125 -0.547683 -0.359375\nv 0.132812 -0.547851 -0.359375\nv 0.140625 -0.548037 -0.359375\nv 0.148438 -0.548231 -0.359375\nv 0.15625 -0.548678 -0.359375\nv 0.164062 -0.549119 -0.359375\nv 0.171875 -0.54932 -0.359375\nv 0.179688 -0.549416 -0.359375\nv 0.1875 -0.549686 -0.359375\nv 0.195312 -0.550135 -0.359375\nv 0.203125 -0.55064 -0.359375\nv 0.210938 -0.550673 -0.359375\nv 0.21875 -0.550726 -0.359375\nv 0.226562 -0.55108 -0.359375\nv 0.234375 -0.551509 -0.359375\nv 0.242188 -0.551982 -0.359375\nv 0.25 -0.552487 -0.359375\nv 0.257812 -0.553026 -0.359375\nv 0.257812 -0.554688 -0.353212\nv 0.265625 -0.553582 -0.359375\nv 0.265625 -0.554688 -0.355416\nv 0.273438 -0.554122 -0.359375\nv 0.273438 -0.554688 -0.357436\nv 0.28125 -0.554398 -0.359375\nv 0.28125 -0.554688 -0.358517\nv 0.289062 -0.554587 -0.359375\nv 0.289062 -0.554688 -0.359058\nv 0.296875 -0.554441 -0.359375\nv 0.296875 -0.554688 -0.358571\nv 0.304688 -0.55399 -0.359375\nv 0.304688 -0.554688 -0.356688\nv 0.3125 -0.554018 -0.359375\nv 0.3125 -0.554688 -0.356495\nv 0.320312 -0.55409 -0.359375\nv 0.320312 -0.554688 -0.357344\nv 0.328125 -0.554219 -0.359375\nv 0.328125 -0.554688 -0.358065\nv 0.338828 -0.554688 -0.359375\nv 0.335938 -0.554466 -0.359375\nv 0.335938 -0.554688 -0.35886\nv 0.354632 -0.554688 -0.359375\nv 0.359375 -0.553978 -0.359375\nv 0.359375 -0.554688 -0.35862\nv 0.370228 -0.554688 -0.359375\nv 0.367188 -0.554089 -0.359375\nv 0.367188 -0.554688 -0.358926\nv 0.502514 -0.554688 -0.359375\nv -0.329493 -0.546875 -0.359375\nv -0.129924 -0.546875 -0.359375\nv -0.120507 -0.546875 -0.359375\nv -0.125 -0.54618 -0.359375\nv -0.125 -0.546875 -0.356445\nv 0.502523 -0.546875 -0.359375\nv -0.329554 -0.539062 -0.359375\nv 0.502569 -0.539062 -0.359375\nv -0.329612 -0.53125 -0.359375\nv 0.502872 -0.53125 -0.359375\nv -0.329751 -0.523438 -0.359375\nv 0.503336 -0.523438 -0.359375\nv -0.329812 -0.515625 -0.359375\nv 0.503777 -0.515625 -0.359375\nv -0.329761 -0.507812 -0.359375\nv 0.503898 -0.507812 -0.359375\nv -0.329685 -0.5 -0.359375\nv 0.503918 -0.5 -0.359375\nv -0.329563 -0.492188 -0.359375\nv 0.504151 -0.492188 -0.359375\nv -0.329594 -0.484375 -0.359375\nv -0.203125 -0.477835 -0.359375\nv -0.195312 -0.478772 -0.359375\nv -0.1875 -0.477663 -0.359375\nv -0.179688 -0.476591 -0.359375\nv -0.140625 -0.479661 -0.359375\nv -0.132812 -0.482901 -0.359375\nv -0.125 -0.482502 -0.359375\nv -0.117188 -0.480478 -0.359375\nv -0.109375 -0.478394 -0.359375\nv 0.50449 -0.484375 -0.359375\nv -0.329652 -0.476562 -0.359375\nv -0.206382 -0.476562 -0.359375\nv -0.210938 -0.471408 -0.359375\nv -0.203125 -0.476562 -0.357712\nv -0.195312 -0.476562 -0.356493\nv -0.1875 -0.476562 -0.357824\nv -0.179481 -0.476562 -0.359375\nv -0.179688 -0.476562 -0.359333\nv -0.171875 -0.475624 -0.359375\nv -0.164062 -0.47501 -0.359375\nv -0.15625 -0.474799 -0.359375\nv -0.148052 -0.476562 -0.359375\nv -0.148438 -0.476436 -0.359375\nv -0.103641 -0.476562 -0.359375\nv -0.109375 -0.476562 -0.353875\nv -0.101562 -0.476082 -0.359375\nv -0.09375 -0.474213 -0.359375\nv -0.0859375 -0.472307 -0.359375\nv -0.078125 -0.470469 -0.359375\nv -0.0703125 -0.46898 -0.359375\nv 0.03125 -0.469069 -0.359375\nv 0.0390625 -0.469297 -0.359375\nv 0.046875 -0.469218 -0.359375\nv 0.0546875 -0.469457 -0.359375\nv 0.0625 -0.469977 -0.359375\nv 0.0703125 -0.470544 -0.359375\nv 0.078125 -0.470945 -0.359375\nv 0.0859375 -0.471368 -0.359375\nv 0.09375 -0.471857 -0.359375\nv 0.101562 -0.472238 -0.359375\nv 0.109375 -0.472344 -0.359375\nv 0.117188 -0.472376 -0.359375\nv 0.125 -0.472409 -0.359375\nv 0.132812 -0.472301 -0.359375\nv 0.140625 -0.472684 -0.359375\nv 0.148438 -0.473024 -0.359375\nv 0.15625 -0.473226 -0.359375\nv 0.164062 -0.47333 -0.359375\nv 0.171875 -0.473349 -0.359375\nv 0.179688 -0.473673 -0.359375\nv 0.1875 -0.473318 -0.359375\nv 0.195312 -0.472798 -0.359375\nv 0.203125 -0.472268 -0.359375\nv 0.210938 -0.471807 -0.359375\nv 0.21875 -0.471754 -0.359375\nv 0.226562 -0.471573 -0.359375\nv 0.234375 -0.471483 -0.359375\nv 0.242188 -0.471647 -0.359375\nv 0.25 -0.471899 -0.359375\nv 0.257812 -0.472306 -0.359375\nv 0.265625 -0.472357 -0.359375\nv 0.273438 -0.472203 -0.359375\nv 0.28125 -0.47213 -0.359375\nv 0.289062 -0.472693 -0.359375\nv 0.296875 -0.473551 -0.359375\nv 0.304688 -0.474669 -0.359375\nv 0.3125 -0.475889 -0.359375\nv 0.3125 -0.476562 -0.355689\nv 0.320312 -0.476505 -0.359375\nv 0.320312 -0.476562 -0.359046\nv 0.328125 -0.474713 -0.359375\nv 0.335938 -0.474046 -0.359375\nv 0.34375 -0.474759 -0.359375\nv 0.351562 -0.475307 -0.359375\nv 0.359375 -0.47551 -0.359375\nv 0.367188 -0.472881 -0.359375\nv 0.504808 -0.476562 -0.359375\nv -0.329706 -0.46875 -0.359375\nv -0.211939 -0.46875 -0.359375\nv -0.210938 -0.46875 -0.356766\nv -0.0685124 -0.46875 -0.359375\nv -0.0703125 -0.46875 -0.352449\nv -0.0625 -0.468075 -0.359375\nv -0.0546875 -0.467329 -0.359375\nv -0.046875 -0.466649 -0.359375\nv -0.0390625 -0.466239 -0.359375\nv -0.03125 -0.465768 -0.359375\nv -0.0234375 -0.46544 -0.359375\nv -0.015625 -0.465602 -0.359375\nv -0.0078125 -0.465717 -0.359375\nv 0 -0.465978 -0.359375\nv 0.0078125 -0.466876 -0.359375\nv 0.015625 -0.467795 -0.359375\nv 0.0249902 -0.46875 -0.359375\nv 0.0234375 -0.468669 -0.359375\nv 0.03125 -0.46875 -0.358474\nv 0.0390625 -0.46875 -0.357758\nv 0.046875 -0.46875 -0.357857\nv 0.0546875 -0.46875 -0.357064\nv 0.0625 -0.46875 -0.355711\nv 0.0703125 -0.46875 -0.35437\nv 0.078125 -0.46875 -0.353579\nv 0.0859375 -0.46875 -0.353501\nv 0.09375 -0.46875 -0.352973\nv 0.101562 -0.46875 -0.352333\nv 0.109375 -0.46875 -0.352116\nv 0.117188 -0.46875 -0.351964\nv 0.125 -0.46875 -0.351675\nv 0.371827 -0.46875 -0.359375\nv 0.375 -0.464005 -0.359375\nv 0.505106 -0.46875 -0.359375\nv -0.329738 -0.460938 -0.359375\nv -0.213799 -0.460938 -0.359375\nv 0.3766 -0.460938 -0.359375\nv 0.505343 -0.460938 -0.359375\nv -0.329775 -0.453125 -0.359375\nv -0.215239 -0.453125 -0.359375\nv 0.379323 -0.453125 -0.359375\nv 0.505625 -0.453125 -0.359375\nv -0.329845 -0.445312 -0.359375\nv -0.216674 -0.445312 -0.359375\nv 0.380767 -0.445312 -0.359375\nv 0.505872 -0.445312 -0.359375\nv -0.329958 -0.4375 -0.359375\nv -0.217512 -0.4375 -0.359375\nv 0.382024 -0.4375 -0.359375\nv 0.382812 -0.429895 -0.359375\nv 0.50605 -0.4375 -0.359375\nv -0.329826 -0.429688 -0.359375\nv -0.217625 -0.429688 -0.359375\nv 0.382834 -0.429688 -0.359375\nv 0.382812 -0.429688 -0.359318\nv 0.50619 -0.429688 -0.359375\nv -0.329554 -0.421875 -0.359375\nv -0.217536 -0.421875 -0.359375\nv 0.383381 -0.421875 -0.359375\nv 0.382812 -0.421875 -0.357468\nv 0.506368 -0.421875 -0.359375\nv -0.329279 -0.414062 -0.359375\nv -0.218022 -0.414062 -0.359375\nv 0.385215 -0.414062 -0.359375\nv 0.506626 -0.414062 -0.359375\nv -0.328855 -0.40625 -0.359375\nv -0.218515 -0.40625 -0.359375\nv 0.387022 -0.40625 -0.359375\nv 0.506537 -0.40625 -0.359375\nv -0.328351 -0.398438 -0.359375\nv -0.328125 -0.39549 -0.359375\nv -0.218392 -0.398438 -0.359375\nv 0.387506 -0.398438 -0.359375\nv 0.506608 -0.398438 -0.359375\nv -0.3277 -0.390625 -0.359375\nv -0.217947 -0.390625 -0.359375\nv 0.387234 -0.390625 -0.359375\nv 0.506677 -0.390625 -0.359375\nv -0.326965 -0.382812 -0.359375\nv -0.217478 -0.382812 -0.359375\nv 0.3869 -0.382812 -0.359375\nv 0.5064 -0.382812 -0.359375\nv -0.32599 -0.375 -0.359375\nv -0.217067 -0.375 -0.359375\nv 0.387029 -0.375 -0.359375\nv 0.505982 -0.375 -0.359375\nv -0.325023 -0.367188 -0.359375\nv -0.217003 -0.367188 -0.359375\nv 0.386972 -0.367188 -0.359375\nv 0.505699 -0.367188 -0.359375\nv -0.324076 -0.359375 -0.359375\nv -0.217045 -0.359375 -0.359375\nv 0.386252 -0.359375 -0.359375\nv 0.505598 -0.359375 -0.359375\nv -0.323221 -0.351562 -0.359375\nv -0.21707 -0.351562 -0.359375\nv 0.38659 -0.351562 -0.359375\nv 0.505568 -0.351562 -0.359375\nv -0.322661 -0.34375 -0.359375\nv -0.217219 -0.34375 -0.359375\nv 0.387346 -0.34375 -0.359375\nv 0.505632 -0.34375 -0.359375\nv -0.322164 -0.335938 -0.359375\nv -0.217947 -0.335938 -0.359375\nv 0.387903 -0.335938 -0.359375\nv 0.505703 -0.335938 -0.359375\nv -0.321793 -0.328125 -0.359375\nv -0.218335 -0.328125 -0.359375\nv -0.21875 -0.320901 -0.359375\nv 0.388017 -0.328125 -0.359375\nv 0.505902 -0.328125 -0.359375\nv -0.321378 -0.320312 -0.359375\nv -0.218784 -0.320312 -0.359375\nv -0.21875 -0.320312 -0.359265\nv 0.388039 -0.320312 -0.359375\nv 0.506208 -0.320312 -0.359375\nv -0.321006 -0.3125 -0.359375\nv -0.219278 -0.3125 -0.359375\nv -0.21875 -0.3125 -0.357664\nv 0.388089 -0.3125 -0.359375\nv 0.506636 -0.3125 -0.359375\nv -0.320547 -0.304688 -0.359375\nv -0.320312 -0.299275 -0.359375\nv -0.320312 -0.304688 -0.353993\nv -0.219746 -0.304688 -0.359375\nv -0.21875 -0.304688 -0.356251\nv 0.388087 -0.304688 -0.359375\nv 0.506805 -0.304688 -0.359375\nv -0.320202 -0.296875 -0.359375\nv -0.220286 -0.296875 -0.359375\nv -0.21875 -0.296875 -0.354758\nv 0.388057 -0.296875 -0.359375\nv 0.506765 -0.296875 -0.359375\nv -0.31983 -0.289062 -0.359375\nv -0.22081 -0.289062 -0.359375\nv -0.21875 -0.289062 -0.353389\nv 0.388291 -0.289062 -0.359375\nv 0.506695 -0.289062 -0.359375\nv -0.319282 -0.28125 -0.359375\nv -0.221255 -0.28125 -0.359375\nv -0.21875 -0.28125 -0.351864\nv 0.388684 -0.28125 -0.359375\nv 0.506613 -0.28125 -0.359375\nv -0.318621 -0.273438 -0.359375\nv -0.221612 -0.273438 -0.359375\nv 0.388896 -0.273438 -0.359375\nv 0.506203 -0.273438 -0.359375\nv -0.318001 -0.265625 -0.359375\nv -0.221766 -0.265625 -0.359375\nv 0.388692 -0.265625 -0.359375\nv 0.50552 -0.265625 -0.359375\nv -0.31749 -0.257812 -0.359375\nv -0.22158 -0.257812 -0.359375\nv 0.38839 -0.257812 -0.359375\nv 0.505 -0.257812 -0.359375\nv -0.317032 -0.25 -0.359375\nv -0.221306 -0.25 -0.359375\nv 0.387947 -0.25 -0.359375\nv 0.504685 -0.25 -0.359375\nv -0.316525 -0.242188 -0.359375\nv -0.221082 -0.242188 -0.359375\nv 0.387552 -0.242188 -0.359375\nv 0.504714 -0.242188 -0.359375\nv -0.316251 -0.234375 -0.359375\nv -0.221024 -0.234375 -0.359375\nv -0.21875 -0.234375 -0.352231\nv 0.387784 -0.234375 -0.359375\nv 0.504798 -0.234375 -0.359375\nv -0.316275 -0.226562 -0.359375\nv -0.221074 -0.226562 -0.359375\nv -0.21875 -0.226562 -0.352691\nv 0.38825 -0.226562 -0.359375\nv 0.50494 -0.226562 -0.359375\nv -0.316612 -0.21875 -0.359375\nv -0.220947 -0.21875 -0.359375\nv -0.21875 -0.21875 -0.353654\nv 0.388755 -0.21875 -0.359375\nv 0.505029 -0.21875 -0.359375\nv -0.317054 -0.210938 -0.359375\nv -0.220607 -0.210938 -0.359375\nv -0.21875 -0.210938 -0.35488\nv 0.389214 -0.210938 -0.359375\nv 0.505292 -0.210938 -0.359375\nv -0.317495 -0.203125 -0.359375\nv -0.220385 -0.203125 -0.359375\nv -0.21875 -0.203125 -0.355628\nv 0.389972 -0.203125 -0.359375\nv 0.390625 -0.19693 -0.359375\nv 0.505387 -0.203125 -0.359375\nv -0.317452 -0.195312 -0.359375\nv -0.220703 -0.195312 -0.359375\nv -0.21875 -0.195312 -0.354938\nv 0.3908 -0.195312 -0.359375\nv 0.390625 -0.195312 -0.358148\nv 0.505375 -0.195312 -0.359375\nv -0.316933 -0.1875 -0.359375\nv -0.221102 -0.1875 -0.359375\nv -0.21875 -0.1875 -0.354098\nv 0.391596 -0.1875 -0.359375\nv 0.390625 -0.1875 -0.35214\nv 0.505406 -0.1875 -0.359375\nv -0.316325 -0.179688 -0.359375\nv -0.221003 -0.179688 -0.359375\nv -0.21875 -0.179688 -0.353428\nv 0.392364 -0.179688 -0.359375\nv 0.505305 -0.179688 -0.359375\nv -0.315766 -0.171875 -0.359375\nv -0.220494 -0.171875 -0.359375\nv -0.21875 -0.171875 -0.353088\nv 0.392647 -0.171875 -0.359375\nv 0.505072 -0.171875 -0.359375\nv -0.315438 -0.164062 -0.359375\nv -0.219785 -0.164062 -0.359375\nv -0.21875 -0.164062 -0.354567\nv 0.392471 -0.164062 -0.359375\nv 0.504579 -0.164062 -0.359375\nv -0.314841 -0.15625 -0.359375\nv -0.21904 -0.15625 -0.359375\nv -0.21875 -0.153668 -0.359375\nv -0.21875 -0.15625 -0.357942\nv 0.391958 -0.15625 -0.359375\nv 0.504039 -0.15625 -0.359375\nv -0.313994 -0.148438 -0.359375\nv -0.218234 -0.148438 -0.359375\nv 0.391611 -0.148438 -0.359375\nv 0.390625 -0.148438 -0.352707\nv 0.503669 -0.148438 -0.359375\nv -0.313331 -0.140625 -0.359375\nv -0.217685 -0.140625 -0.359375\nv 0.391278 -0.140625 -0.359375\nv 0.390625 -0.136837 -0.359375\nv 0.390625 -0.140625 -0.356239\nv 0.503186 -0.140625 -0.359375\nv -0.312964 -0.132812 -0.359375\nv -0.21721 -0.132812 -0.359375\nv 0.389962 -0.132812 -0.359375\nv 0.502537 -0.132812 -0.359375\nv -0.312659 -0.125 -0.359375\nv -0.3125 -0.121097 -0.359375\nv -0.216631 -0.125 -0.359375\nv 0.388928 -0.125 -0.359375\nv 0.501773 -0.125 -0.359375\nv -0.312333 -0.117188 -0.359375\nv -0.21563 -0.117188 -0.359375\nv 0.387701 -0.117188 -0.359375\nv 0.50158 -0.117188 -0.359375\nv -0.312151 -0.109375 -0.359375\nv -0.214638 -0.109375 -0.359375\nv 0.386166 -0.109375 -0.359375\nv 0.501607 -0.109375 -0.359375\nv -0.312 -0.101562 -0.359375\nv -0.3125 -0.0939996 -0.359375\nv -0.21352 -0.101562 -0.359375\nv 0.384146 -0.101562 -0.359375\nv 0.382812 -0.0976324 -0.359375\nv 0.382812 -0.101562 -0.356321\nv 0.501641 -0.101562 -0.359375\nv -0.312517 -0.09375 -0.359375\nv -0.3125 -0.09375 -0.359116\nv -0.211138 -0.09375 -0.359375\nv -0.210938 -0.0932506 -0.359375\nv -0.210938 -0.09375 -0.3587\nv 0.381723 -0.09375 -0.359375\nv 0.502363 -0.09375 -0.359375\nv -0.313375 -0.0859375 -0.359375\nv -0.208731 -0.0859375 -0.359375\nv 0.380079 -0.0859375 -0.359375\nv 0.503749 -0.0859375 -0.359375\nv -0.314443 -0.078125 -0.359375\nv -0.205021 -0.078125 -0.359375\nv -0.203125 -0.0760612 -0.359375\nv -0.203125 -0.078125 -0.356272\nv -0.195312 -0.0718567 -0.359375\nv 0.377911 -0.078125 -0.359375\nv 0.375 -0.0728906 -0.359375\nv 0.375 -0.078125 -0.354855\nv 0.505474 -0.078125 -0.359375\nv -0.3155 -0.0703125 -0.359375\nv -0.18847 -0.0703125 -0.359375\nv -0.1875 -0.0700332 -0.359375\nv -0.1875 -0.0703125 -0.359043\nv -0.179688 -0.0689112 -0.359375\nv -0.179688 -0.0703125 -0.357446\nv -0.171875 -0.0683791 -0.359375\nv -0.171875 -0.0703125 -0.356843\nv -0.164062 -0.0675131 -0.359375\nv -0.164062 -0.0703125 -0.355547\nv -0.15625 -0.0656585 -0.359375\nv -0.15625 -0.0703125 -0.352789\nv -0.148438 -0.0634135 -0.359375\nv 0.0390625 -0.0703125 -0.351586\nv 0.046875 -0.0703125 -0.351751\nv 0.0546875 -0.0703125 -0.351954\nv 0.0625 -0.0703125 -0.352151\nv 0.0703125 -0.0703125 -0.352451\nv 0.078125 -0.0629274 -0.359375\nv 0.078125 -0.0703125 -0.352872\nv 0.0859375 -0.0637192 -0.359375\nv 0.0859375 -0.0703125 -0.353294\nv 0.09375 -0.0644972 -0.359375\nv 0.09375 -0.0703125 -0.353717\nv 0.101562 -0.0652134 -0.359375\nv 0.101562 -0.0703125 -0.353813\nv 0.109375 -0.0658935 -0.359375\nv 0.109375 -0.0703125 -0.353839\nv 0.117188 -0.0663647 -0.359375\nv 0.117188 -0.0703125 -0.353728\nv 0.125 -0.0667038 -0.359375\nv 0.125 -0.0703125 -0.353584\nv 0.132812 -0.0668546 -0.359375\nv 0.132812 -0.0703125 -0.353348\nv 0.140625 -0.0669261 -0.359375\nv 0.140625 -0.0703125 -0.352956\nv 0.148438 -0.0669533 -0.359375\nv 0.148438 -0.0703125 -0.352642\nv 0.15625 -0.0670801 -0.359375\nv 0.15625 -0.0703125 -0.352466\nv 0.164062 -0.0672514 -0.359375\nv 0.164062 -0.0703125 -0.352321\nv 0.171875 -0.0673503 -0.359375\nv 0.171875 -0.0703125 -0.352212\nv 0.179688 -0.067431 -0.359375\nv 0.179688 -0.0703125 -0.352041\nv 0.1875 -0.067466 -0.359375\nv 0.1875 -0.0703125 -0.351605\nv 0.195312 -0.0675071 -0.359375\nv 0.203125 -0.0674475 -0.359375\nv 0.210938 -0.0673704 -0.359375\nv 0.21875 -0.0673196 -0.359375\nv 0.226562 -0.0672522 -0.359375\nv 0.234375 -0.0671439 -0.359375\nv 0.242188 -0.0669181 -0.359375\nv 0.25 -0.0668182 -0.359375\nv 0.257812 -0.0668078 -0.359375\nv 0.265625 -0.0668855 -0.359375\nv 0.273438 -0.0667796 -0.359375\nv 0.28125 -0.0666502 -0.359375\nv 0.289062 -0.0668249 -0.359375\nv 0.296875 -0.0669714 -0.359375\nv 0.304688 -0.0670084 -0.359375\nv 0.3125 -0.0665946 -0.359375\nv 0.320312 -0.0661034 -0.359375\nv 0.328125 -0.0659096 -0.359375\nv 0.335938 -0.0657058 -0.359375\nv 0.34375 -0.0656487 -0.359375\nv 0.34375 -0.0703125 -0.351693\nv 0.351562 -0.0659074 -0.359375\nv 0.351562 -0.0703125 -0.352543\nv 0.359375 -0.0664936 -0.359375\nv 0.359375 -0.0703125 -0.353891\nv 0.371769 -0.0703125 -0.359375\nv 0.367188 -0.0674776 -0.359375\nv 0.367188 -0.0703125 -0.356067\nv 0.507001 -0.0703125 -0.359375\nv 0.507812 -0.063264 -0.359375\nv -0.315833 -0.0625 -0.359375\nv -0.143627 -0.0625 -0.359375\nv -0.140625 -0.0616503 -0.359375\nv -0.140625 -0.0625 -0.358742\nv -0.132812 -0.0615154 -0.359375\nv -0.132812 -0.0625 -0.358701\nv -0.125 -0.0612373 -0.359375\nv -0.125 -0.0625 -0.358587\nv -0.117188 -0.0612628 -0.359375\nv -0.117188 -0.0625 -0.358624\nv -0.109375 -0.0614054 -0.359375\nv -0.109375 -0.0625 -0.358678\nv -0.101562 -0.0609722 -0.359375\nv -0.101562 -0.0625 -0.358355\nv -0.09375 -0.0601158 -0.359375\nv -0.09375 -0.0625 -0.357859\nv -0.0859375 -0.0589538 -0.359375\nv -0.0859375 -0.0625 -0.357257\nv -0.078125 -0.057813 -0.359375\nv -0.078125 -0.0625 -0.356675\nv -0.0703125 -0.0566812 -0.359375\nv -0.0703125 -0.0625 -0.356201\nv -0.0625 -0.0558111 -0.359375\nv -0.0625 -0.0625 -0.355937\nv -0.0546875 -0.0556355 -0.359375\nv -0.0546875 -0.0625 -0.355876\nv -0.046875 -0.055817 -0.359375\nv -0.046875 -0.0625 -0.355954\nv -0.0390625 -0.0561806 -0.359375\nv -0.0390625 -0.0625 -0.356268\nv -0.03125 -0.0566297 -0.359375\nv -0.03125 -0.0625 -0.356556\nv -0.0234375 -0.0572379 -0.359375\nv -0.0234375 -0.0625 -0.356918\nv -0.015625 -0.057467 -0.359375\nv -0.015625 -0.0625 -0.357\nv -0.0078125 -0.0572037 -0.359375\nv -0.0078125 -0.0625 -0.3569\nv 0 -0.0576465 -0.359375\nv 0 -0.0625 -0.357188\nv 0.0078125 -0.0584473 -0.359375\nv 0.0078125 -0.0625 -0.357589\nv 0.015625 -0.0595579 -0.359375\nv 0.015625 -0.0625 -0.358078\nv 0.0234375 -0.0597599 -0.359375\nv 0.0234375 -0.0625 -0.358206\nv 0.03125 -0.0597868 -0.359375\nv 0.03125 -0.0625 -0.358263\nv 0.0390625 -0.0598221 -0.359375\nv 0.0390625 -0.0625 -0.358276\nv 0.046875 -0.0598767 -0.359375\nv 0.046875 -0.0625 -0.358318\nv 0.0546875 -0.0602986 -0.359375\nv 0.0546875 -0.0625 -0.358494\nv 0.0625 -0.0606309 -0.359375\nv 0.0625 -0.0625 -0.358616\nv 0.0747816 -0.0625 -0.359375\nv 0.0703125 -0.0615097 -0.359375\nv 0.0703125 -0.0625 -0.358976\nv 0.507883 -0.0625 -0.359375\nv 0.507812 -0.0625 -0.352201\nv -0.315754 -0.0546875 -0.359375\nv 0.508 -0.0546875 -0.359375\nv 0.507812 -0.0530576 -0.359375\nv -0.315429 -0.046875 -0.359375\nv 0.507079 -0.046875 -0.359375\nv -0.315098 -0.0390625 -0.359375\nv 0.505836 -0.0390625 -0.359375\nv -0.315148 -0.03125 -0.359375\nv 0.504529 -0.03125 -0.359375\nv -0.315147 -0.0234375 -0.359375\nv 0.503321 -0.0234375 -0.359375\nv -0.315168 -0.015625 -0.359375\nv 0.50232 -0.015625 -0.359375\nv -0.315332 -0.0078125 -0.359375\nv 0.502376 -0.0078125 -0.359375\nv -0.315203 0 -0.359375\nv 0.503023 0 -0.359375\nv -0.314931 0.0078125 -0.359375\nv 0.502697 0.0078125 -0.359375\nv -0.314931 0.015625 -0.359375\nv 0.501955 0.015625 -0.359375\nv -0.314927 0.0234375 -0.359375\nv 0.501146 0.0234375 -0.359375\nv 0.5 0.0276832 -0.359375\nv -0.314736 0.03125 -0.359375\nv 0.498847 0.03125 -0.359375\nv 0.5 0.03125 -0.356114\nv -0.314454 0.0390625 -0.359375\nv 0.495577 0.0390625 -0.359375\nv 0.492188 0.0452323 -0.359375\nv -0.31419 0.046875 -0.359375\nv 0.491091 0.046875 -0.359375\nv 0.492188 0.046875 -0.35719\nv -0.313369 0.0546875 -0.359375\nv -0.3125 0.0617332 -0.359375\nv -0.09375 0.0616387 -0.359375\nv -0.0859375 0.0608771 -0.359375\nv -0.078125 0.0605393 -0.359375\nv -0.0703125 0.0601558 -0.359375\nv -0.0625 0.0597514 -0.359375\nv -0.0546875 0.0595725 -0.359375\nv -0.046875 0.059489 -0.359375\nv -0.0390625 0.059154 -0.359375\nv -0.03125 0.0586395 -0.359375\nv -0.0234375 0.0581092 -0.359375\nv -0.015625 0.0577113 -0.359375\nv -0.0078125 0.0574216 -0.359375\nv 0 0.0575595 -0.359375\nv 0.0078125 0.0575712 -0.359375\nv 0.015625 0.0574454 -0.359375\nv 0.0234375 0.0575228 -0.359375\nv 0.03125 0.0573222 -0.359375\nv 0.0390625 0.0570255 -0.359375\nv 0.046875 0.0570011 -0.359375\nv 0.0546875 0.0570082 -0.359375\nv 0.0625 0.0567216 -0.359375\nv 0.0703125 0.0567159 -0.359375\nv 0.078125 0.0566713 -0.359375\nv 0.0859375 0.0566366 -0.359375\nv 0.09375 0.0568934 -0.359375\nv 0.101562 0.057155 -0.359375\nv 0.109375 0.0573811 -0.359375\nv 0.117188 0.0574683 -0.359375\nv 0.125 0.0574716 -0.359375\nv 0.132812 0.0574096 -0.359375\nv 0.140625 0.0573734 -0.359375\nv 0.148438 0.0573526 -0.359375\nv 0.15625 0.0573861 -0.359375\nv 0.164062 0.057419 -0.359375\nv 0.171875 0.0574808 -0.359375\nv 0.179688 0.0576638 -0.359375\nv 0.1875 0.0577612 -0.359375\nv 0.195312 0.0578656 -0.359375\nv 0.203125 0.0580163 -0.359375\nv 0.210938 0.0581144 -0.359375\nv 0.21875 0.058162 -0.359375\nv 0.226562 0.0580302 -0.359375\nv 0.234375 0.0582078 -0.359375\nv 0.242188 0.0584643 -0.359375\nv 0.25 0.0586725 -0.359375\nv 0.257812 0.0589462 -0.359375\nv 0.265625 0.0596731 -0.359375\nv 0.273438 0.0599495 -0.359375\nv 0.28125 0.0595267 -0.359375\nv 0.289062 0.0598388 -0.359375\nv 0.296875 0.0601704 -0.359375\nv 0.304688 0.0603815 -0.359375\nv 0.3125 0.0604765 -0.359375\nv 0.320312 0.0604763 -0.359375\nv 0.328125 0.0606016 -0.359375\nv 0.335938 0.0604952 -0.359375\nv 0.34375 0.0603122 -0.359375\nv 0.351562 0.0600949 -0.359375\nv 0.359375 0.0597095 -0.359375\nv 0.367188 0.0592238 -0.359375\nv 0.375 0.0587546 -0.359375\nv 0.382812 0.0591862 -0.359375\nv 0.390625 0.0590513 -0.359375\nv 0.398438 0.0590607 -0.359375\nv 0.40625 0.059187 -0.359375\nv 0.414062 0.0598964 -0.359375\nv 0.421875 0.0603029 -0.359375\nv 0.429688 0.0608042 -0.359375\nv 0.4375 0.0608894 -0.359375\nv 0.445312 0.0607601 -0.359375\nv 0.453125 0.0597016 -0.359375\nv 0.460938 0.0593945 -0.359375\nv 0.46875 0.0593468 -0.359375\nv 0.476562 0.0587203 -0.359375\nv 0.485851 0.0546875 -0.359375\nv 0.484375 0.0563012 -0.359375\nv -0.312387 0.0625 -0.359375\nv -0.1875 0.0681891 -0.359375\nv -0.179688 0.0668246 -0.359375\nv -0.171875 0.0663296 -0.359375\nv -0.164062 0.0657176 -0.359375\nv -0.15625 0.0652055 -0.359375\nv -0.148438 0.0646881 -0.359375\nv -0.140625 0.0644715 -0.359375\nv -0.132812 0.0642536 -0.359375\nv -0.125 0.0639469 -0.359375\nv -0.117188 0.0635054 -0.359375\nv -0.109375 0.0630484 -0.359375\nv -0.10043 0.0625 -0.359375\nv -0.101562 0.0625789 -0.359375\nv -0.09375 0.0625 -0.358807\nv -0.0859375 0.0625 -0.358264\nv -0.078125 0.0625 -0.357987\nv -0.0703125 0.0625 -0.357685\nv -0.0625 0.0625 -0.35733\nv -0.0546875 0.0625 -0.357107\nv -0.046875 0.0625 -0.356932\nv -0.0390625 0.0625 -0.356686\nv -0.03125 0.0625 -0.356221\nv -0.0234375 0.0625 -0.35574\nv -0.015625 0.0625 -0.355244\nv -0.0078125 0.0625 -0.354839\nv 0 0.0625 -0.354963\nv 0.0078125 0.0625 -0.355048\nv 0.015625 0.0625 -0.355013\nv 0.0234375 0.0625 -0.355076\nv 0.03125 0.0625 -0.355021\nv 0.0390625 0.0625 -0.354868\nv 0.046875 0.0625 -0.354777\nv 0.0546875 0.0625 -0.354674\nv 0.0625 0.0625 -0.354368\nv 0.0703125 0.0625 -0.354283\nv 0.078125 0.0625 -0.354305\nv 0.0859375 0.0625 -0.354388\nv 0.09375 0.0625 -0.354652\nv 0.101562 0.0625 -0.354914\nv 0.109375 0.0625 -0.355118\nv 0.117188 0.0625 -0.355231\nv 0.125 0.0625 -0.355342\nv 0.132812 0.0625 -0.355448\nv 0.140625 0.0625 -0.35553\nv 0.148438 0.0625 -0.355619\nv 0.15625 0.0625 -0.35574\nv 0.164062 0.0625 -0.355894\nv 0.171875 0.0625 -0.356062\nv 0.179688 0.0625 -0.356236\nv 0.1875 0.0625 -0.356329\nv 0.195312 0.0625 -0.356419\nv 0.203125 0.0625 -0.356528\nv 0.210938 0.0625 -0.356564\nv 0.21875 0.0625 -0.356589\nv 0.226562 0.0625 -0.356546\nv 0.234375 0.0625 -0.356701\nv 0.242188 0.0625 -0.356884\nv 0.25 0.0625 -0.357005\nv 0.257812 0.0625 -0.357184\nv 0.265625 0.0625 -0.357619\nv 0.273438 0.0625 -0.357665\nv 0.28125 0.0625 -0.357539\nv 0.289062 0.0625 -0.357751\nv 0.296875 0.0625 -0.357822\nv 0.304688 0.0625 -0.357849\nv 0.3125 0.0625 -0.357842\nv 0.320312 0.0625 -0.35772\nv 0.328125 0.0625 -0.357682\nv 0.335938 0.0625 -0.357472\nv 0.34375 0.0625 -0.357133\nv 0.351562 0.0625 -0.356791\nv 0.359375 0.0625 -0.356399\nv 0.367188 0.0625 -0.355941\nv 0.375 0.0625 -0.355733\nv 0.382812 0.0625 -0.35569\nv 0.390625 0.0625 -0.355502\nv 0.398438 0.0625 -0.355377\nv 0.40625 0.0625 -0.355509\nv 0.414062 0.0625 -0.356114\nv 0.421875 0.0625 -0.356689\nv 0.429688 0.0625 -0.357411\nv 0.4375 0.0625 -0.357518\nv 0.445312 0.0625 -0.357601\nv 0.453125 0.0625 -0.356497\nv 0.460938 0.0625 -0.356084\nv 0.46875 0.0625 -0.355886\nv 0.476562 0.0625 -0.353829\nv -0.31179 0.0703125 -0.359375\nv -0.203125 0.0742103 -0.359375\nv -0.193505 0.0703125 -0.359375\nv -0.195312 0.0708599 -0.359375\nv -0.1875 0.0703125 -0.356199\nv -0.179688 0.0703125 -0.353706\nv -0.171875 0.0703125 -0.352477\nv -0.311926 0.078125 -0.359375\nv -0.20909 0.078125 -0.359375\nv -0.210938 0.0797767 -0.359375\nv -0.203125 0.078125 -0.351591\nv -0.311807 0.0859375 -0.359375\nv -0.216202 0.0859375 -0.359375\nv -0.21875 0.0900603 -0.359375\nv -0.311867 0.09375 -0.359375\nv -0.220451 0.09375 -0.359375\nv -0.21875 0.09375 -0.355368\nv -0.312007 0.101562 -0.359375\nv -0.222637 0.101562 -0.359375\nv -0.312146 0.109375 -0.359375\nv -0.3125 0.116114 -0.359375\nv -0.223571 0.109375 -0.359375\nv -0.312558 0.117188 -0.359375\nv -0.224159 0.117188 -0.359375\nv -0.313052 0.125 -0.359375\nv -0.224372 0.125 -0.359375\nv -0.313572 0.132812 -0.359375\nv -0.22471 0.132812 -0.359375\nv -0.314089 0.140625 -0.359375\nv -0.224986 0.140625 -0.359375\nv -0.31465 0.148438 -0.359375\nv -0.225235 0.148438 -0.359375\nv -0.315255 0.15625 -0.359375\nv -0.225589 0.15625 -0.359375\nv -0.315863 0.164062 -0.359375\nv -0.226053 0.164062 -0.359375\nv -0.316387 0.171875 -0.359375\nv -0.226043 0.171875 -0.359375\nv -0.31694 0.179688 -0.359375\nv -0.22596 0.179688 -0.359375\nv -0.317649 0.1875 -0.359375\nv -0.225883 0.1875 -0.359375\nv -0.318376 0.195312 -0.359375\nv -0.225707 0.195312 -0.359375\nv -0.319076 0.203125 -0.359375\nv -0.225645 0.203125 -0.359375\nv -0.319804 0.210938 -0.359375\nv -0.320312 0.215652 -0.359375\nv -0.225504 0.210938 -0.359375\nv -0.320616 0.21875 -0.359375\nv -0.225368 0.21875 -0.359375\nv -0.321433 0.226562 -0.359375\nv -0.225173 0.226562 -0.359375\nv -0.322043 0.234375 -0.359375\nv -0.225126 0.234375 -0.359375\nv -0.322595 0.242188 -0.359375\nv -0.225443 0.242188 -0.359375\nv -0.323184 0.25 -0.359375\nv -0.226087 0.25 -0.359375\nv -0.226562 0.256471 -0.359375\nv -0.323972 0.257812 -0.359375\nv -0.226683 0.257812 -0.359375\nv -0.226562 0.257812 -0.358918\nv -0.324794 0.265625 -0.359375\nv -0.227192 0.265625 -0.359375\nv -0.226562 0.265625 -0.357131\nv -0.32549 0.273438 -0.359375\nv -0.227812 0.273438 -0.359375\nv -0.226562 0.273438 -0.355216\nv -0.326116 0.28125 -0.359375\nv -0.228477 0.28125 -0.359375\nv -0.226562 0.28125 -0.353145\nv -0.3267 0.289062 -0.359375\nv -0.229242 0.289062 -0.359375\nv -0.327104 0.296875 -0.359375\nv -0.328125 0.296875 -0.353559\nv -0.23003 0.296875 -0.359375\nv -0.327331 0.304688 -0.359375\nv -0.328125 0.304688 -0.354919\nv -0.231032 0.304688 -0.359375\nv -0.327559 0.3125 -0.359375\nv -0.328125 0.3125 -0.356344\nv -0.231729 0.3125 -0.359375\nv -0.327749 0.320312 -0.359375\nv -0.328125 0.320312 -0.357447\nv -0.232263 0.320312 -0.359375\nv -0.32774 0.328125 -0.359375\nv -0.328125 0.328125 -0.357465\nv -0.233187 0.328125 -0.359375\nv -0.234375 0.335869 -0.359375\nv -0.327743 0.335938 -0.359375\nv -0.328125 0.335938 -0.357602\nv -0.234385 0.335938 -0.359375\nv -0.234375 0.335938 -0.35934\nv -0.327865 0.34375 -0.359375\nv -0.328125 0.348394 -0.359375\nv -0.328125 0.34375 -0.358232\nv -0.235304 0.34375 -0.359375\nv -0.234375 0.34375 -0.356221\nv -0.328309 0.351562 -0.359375\nv -0.236118 0.351562 -0.359375\nv -0.234375 0.351562 -0.353403\nv -0.328802 0.359375 -0.359375\nv -0.236647 0.359375 -0.359375\nv -0.329295 0.367188 -0.359375\nv -0.236949 0.367188 -0.359375\nv -0.329726 0.375 -0.359375\nv -0.237171 0.375 -0.359375\nv -0.330121 0.382812 -0.359375\nv -0.23742 0.382812 -0.359375\nv -0.330526 0.390625 -0.359375\nv -0.237633 0.390625 -0.359375\nv -0.330922 0.398438 -0.359375\nv -0.237673 0.398438 -0.359375\nv -0.331294 0.40625 -0.359375\nv -0.237622 0.40625 -0.359375\nv -0.331647 0.414062 -0.359375\nv -0.237739 0.414062 -0.359375\nv -0.332042 0.421875 -0.359375\nv -0.237969 0.421875 -0.359375\nv -0.332452 0.429688 -0.359375\nv -0.238244 0.429688 -0.359375\nv -0.332877 0.4375 -0.359375\nv -0.238501 0.4375 -0.359375\nv -0.333367 0.445312 -0.359375\nv -0.238751 0.445312 -0.359375\nv -0.333912 0.453125 -0.359375\nv -0.238999 0.453125 -0.359375\nv -0.334478 0.460938 -0.359375\nv -0.23926 0.460938 -0.359375\nv -0.335087 0.46875 -0.359375\nv -0.239549 0.46875 -0.359375\nv -0.335596 0.476562 -0.359375\nv -0.335938 0.482919 -0.359375\nv -0.335938 0.476562 -0.35447\nv -0.239803 0.476562 -0.359375\nv -0.336018 0.484375 -0.359375\nv -0.240089 0.484375 -0.359375\nv -0.336725 0.492188 -0.359375\nv -0.240519 0.492188 -0.359375\nv -0.337434 0.5 -0.359375\nv -0.240996 0.5 -0.359375\nv -0.338137 0.507812 -0.359375\nv -0.241429 0.507812 -0.359375\nv -0.338906 0.515625 -0.359375\nv -0.241818 0.515625 -0.359375\nv -0.242188 0.521213 -0.359375\nv -0.339686 0.523438 -0.359375\nv -0.242367 0.523438 -0.359375\nv -0.242188 0.523438 -0.3585\nv -0.340488 0.53125 -0.359375\nv -0.242928 0.53125 -0.359375\nv -0.242188 0.53125 -0.355327\nv -0.341282 0.539062 -0.359375\nv -0.243386 0.539062 -0.359375\nv -0.242188 0.539062 -0.352311\nv -0.342046 0.546875 -0.359375\nv -0.244003 0.546875 -0.359375\nv -0.342865 0.554688 -0.359375\nv -0.244619 0.554688 -0.359375\nv -0.343618 0.5625 -0.359375\nv -0.34375 0.564616 -0.359375\nv -0.245286 0.5625 -0.359375\nv -0.344104 0.570312 -0.359375\nv -0.245926 0.570312 -0.359375\nv -0.344664 0.578125 -0.359375\nv -0.246499 0.578125 -0.359375\nv -0.345204 0.585938 -0.359375\nv -0.246946 0.585938 -0.359375\nv -0.34575 0.59375 -0.359375\nv -0.247324 0.59375 -0.359375\nv -0.346225 0.601562 -0.359375\nv -0.247768 0.601562 -0.359375\nv -0.346629 0.609375 -0.359375\nv -0.24824 0.609375 -0.359375\nv -0.347159 0.617188 -0.359375\nv -0.248837 0.617188 -0.359375\nv -0.347717 0.625 -0.359375\nv -0.249669 0.625 -0.359375\nv -0.25 0.628334 -0.359375\nv -0.347762 0.632812 -0.359375\nv -0.250473 0.632812 -0.359375\nv -0.25 0.632812 -0.353714\nv -0.347789 0.640625 -0.359375\nv -0.2512 0.640625 -0.359375\nv -0.347936 0.648438 -0.359375\nv -0.25164 0.648438 -0.359375\nv -0.348032 0.65625 -0.359375\nv -0.252127 0.65625 -0.359375\nv -0.348169 0.664062 -0.359375\nv -0.252655 0.664062 -0.359375\nv -0.348348 0.671875 -0.359375\nv -0.253027 0.671875 -0.359375\nv -0.348509 0.679688 -0.359375\nv -0.253529 0.679688 -0.359375\nv -0.348662 0.6875 -0.359375\nv -0.25403 0.6875 -0.359375\nv -0.348928 0.695312 -0.359375\nv -0.254615 0.695312 -0.359375\nv -0.349281 0.703125 -0.359375\nv -0.25541 0.703125 -0.359375\nv -0.349801 0.710938 -0.359375\nv -0.256376 0.710938 -0.359375\nv -0.350363 0.71875 -0.359375\nv -0.351562 0.71875 -0.352918\nv -0.257058 0.71875 -0.359375\nv -0.257812 0.725405 -0.359375\nv -0.35072 0.726562 -0.359375\nv -0.351562 0.726562 -0.355193\nv -0.257949 0.726562 -0.359375\nv -0.350862 0.734375 -0.359375\nv -0.351562 0.734375 -0.355937\nv -0.259099 0.734375 -0.359375\nv -0.350754 0.742188 -0.359375\nv -0.351562 0.742188 -0.353502\nv -0.26122 0.742188 -0.359375\nv -0.350001 0.75 -0.359375\nv -0.264498 0.75 -0.359375\nv -0.265625 0.752983 -0.359375\nv -0.349036 0.757812 -0.359375\nv -0.267365 0.757812 -0.359375\nv -0.349155 0.765625 -0.359375\nv -0.27031 0.765625 -0.359375\nv -0.349857 0.773438 -0.359375\nv -0.273375 0.773438 -0.359375\nv -0.273438 0.773628 -0.359375\nv -0.273438 0.773438 -0.358675\nv -0.350234 0.78125 -0.359375\nv -0.2759 0.78125 -0.359375\nv -0.351071 0.789062 -0.359375\nv -0.351562 0.796396 -0.359375\nv -0.351562 0.789062 -0.354731\nv -0.27801 0.789062 -0.359375\nv -0.351592 0.796875 -0.359375\nv -0.351562 0.797159 -0.359375\nv -0.279812 0.796875 -0.359375\nv -0.28125 0.796875 -0.35363\nv -0.350554 0.804688 -0.359375\nv -0.351562 0.804688 -0.355823\nv -0.281163 0.804688 -0.359375\nv -0.28125 0.805337 -0.359375\nv -0.28125 0.804688 -0.358981\nv -0.349596 0.8125 -0.359375\nv -0.351562 0.8125 -0.353931\nv -0.282532 0.8125 -0.359375\nv -0.350157 0.820312 -0.359375\nv -0.351562 0.820312 -0.356114\nv -0.285582 0.820312 -0.359375\nv -0.349942 0.828125 -0.359375\nv -0.351562 0.828125 -0.356045\nv -0.28729 0.828125 -0.359375\nv -0.289062 0.828125 -0.35495\nv -0.349071 0.835938 -0.359375\nv -0.351562 0.835938 -0.354507\nv -0.28755 0.835938 -0.359375\nv -0.289062 0.835938 -0.356157\nv -0.345965 0.84375 -0.359375\nv -0.34375 0.846177 -0.359375\nv -0.335938 0.850694 -0.359375\nv -0.28772 0.84375 -0.359375\nv -0.289062 0.848908 -0.359375\nv -0.289062 0.84375 -0.356684\nv -0.334354 0.851562 -0.359375\nv -0.335938 0.851562 -0.35666\nv -0.328125 0.855099 -0.359375\nv -0.289938 0.851562 -0.359375\nv -0.320674 0.859375 -0.359375\nv -0.320312 0.859542 -0.359375\nv -0.3125 0.861804 -0.359375\nv -0.304688 0.862733 -0.359375\nv -0.294789 0.859375 -0.359375\nv -0.296875 0.86128 -0.359375\nv -0.296875 0.859375 -0.354311\nv -0.3125 -0.735578 -0.351562\nv -0.304688 -0.736756 -0.351562\nv -0.296875 -0.736664 -0.351562\nv -0.289062 -0.735781 -0.351562\nv 0.421875 -0.734404 -0.351562\nv 0.429688 -0.736324 -0.351562\nv 0.4375 -0.737504 -0.351562\nv 0.445312 -0.738449 -0.351562\nv 0.453125 -0.738297 -0.351562\nv 0.460938 -0.737566 -0.351562\nv 0.46875 -0.736733 -0.351562\nv 0.476562 -0.735674 -0.351562\nv -0.335938 -0.728901 -0.351562\nv -0.328125 -0.731586 -0.351562\nv -0.317494 -0.734375 -0.351562\nv -0.320312 -0.733751 -0.351562\nv -0.282939 -0.734375 -0.351562\nv -0.28125 -0.733959 -0.351562\nv -0.28125 -0.734375 -0.349643\nv -0.273438 -0.731643 -0.351562\nv -0.265625 -0.72847 -0.351562\nv 0.40625 -0.728065 -0.351562\nv 0.421792 -0.734375 -0.351562\nv 0.414062 -0.731586 -0.351562\nv 0.482605 -0.734375 -0.351562\nv 0.484375 -0.733965 -0.351562\nv 0.492188 -0.73203 -0.351562\nv 0.5 -0.727407 -0.351562\nv -0.338845 -0.726562 -0.351562\nv -0.262658 -0.726562 -0.351562\nv -0.257812 -0.723039 -0.351562\nv -0.257812 -0.726562 -0.346209\nv 0.403385 -0.726562 -0.351562\nv 0.398438 -0.722075 -0.351562\nv 0.398438 -0.726562 -0.345285\nv 0.500778 -0.726562 -0.351562\nv -0.341011 -0.71875 -0.351562\nv -0.251763 -0.71875 -0.351562\nv -0.25 -0.717294 -0.351562\nv -0.25 -0.71875 -0.348702\nv 0.394762 -0.71875 -0.351562\nv 0.390625 -0.71427 -0.351562\nv 0.390625 -0.71875 -0.345124\nv 0.505677 -0.71875 -0.351562\nv -0.341634 -0.710938 -0.351562\nv -0.242792 -0.710938 -0.351562\nv -0.242188 -0.710266 -0.351562\nv -0.242188 -0.710938 -0.350075\nv 0.388827 -0.710938 -0.351562\nv 0.506907 -0.710938 -0.351562\nv -0.341478 -0.703125 -0.351562\nv -0.236798 -0.703125 -0.351562\nv -0.234375 -0.698649 -0.351562\nv 0.386156 -0.703125 -0.351562\nv 0.507497 -0.703125 -0.351562\nv -0.341028 -0.695312 -0.351562\nv -0.232363 -0.695312 -0.351562\nv 0.383922 -0.695312 -0.351562\nv 0.382812 -0.695312 -0.347583\nv 0.507656 -0.695312 -0.351562\nv -0.339913 -0.6875 -0.351562\nv -0.22988 -0.6875 -0.351562\nv 0.383209 -0.6875 -0.351562\nv 0.382812 -0.681753 -0.351562\nv 0.382812 -0.6875 -0.349983\nv 0.507764 -0.6875 -0.351562\nv 0.507812 -0.685577 -0.351562\nv -0.338863 -0.679688 -0.351562\nv -0.227799 -0.679688 -0.351562\nv -0.226562 -0.674739 -0.351562\nv -0.226562 -0.679688 -0.346452\nv 0.382692 -0.679688 -0.351562\nv 0.507953 -0.679688 -0.351562\nv 0.507812 -0.679688 -0.345123\nv -0.337776 -0.671875 -0.351562\nv -0.225793 -0.671875 -0.351562\nv 0.382388 -0.671875 -0.351562\nv 0.508025 -0.671875 -0.351562\nv -0.336746 -0.664062 -0.351562\nv -0.335938 -0.658356 -0.351562\nv -0.223538 -0.664062 -0.351562\nv 0.382094 -0.664062 -0.351562\nv 0.508044 -0.664062 -0.351562\nv 0.507812 -0.664062 -0.347441\nv -0.335604 -0.65625 -0.351562\nv -0.335938 -0.65625 -0.350014\nv -0.221316 -0.65625 -0.351562\nv 0.381786 -0.65625 -0.351562\nv 0.508073 -0.65625 -0.351562\nv 0.507812 -0.65625 -0.345914\nv -0.33423 -0.648438 -0.351562\nv -0.219018 -0.648438 -0.351562\nv -0.21875 -0.647114 -0.351562\nv 0.381218 -0.648438 -0.351562\nv 0.508356 -0.648438 -0.351562\nv -0.333028 -0.640625 -0.351562\nv -0.217541 -0.640625 -0.351562\nv 0.380462 -0.640625 -0.351562\nv 0.508306 -0.640625 -0.351562\nv 0.507812 -0.640625 -0.34661\nv -0.332164 -0.632812 -0.351562\nv -0.216642 -0.632812 -0.351562\nv 0.379517 -0.632812 -0.351562\nv 0.507916 -0.632812 -0.351562\nv 0.507812 -0.63068 -0.351562\nv 0.507812 -0.632812 -0.350526\nv -0.331351 -0.625 -0.351562\nv -0.215912 -0.625 -0.351562\nv 0.378662 -0.625 -0.351562\nv 0.507529 -0.625 -0.351562\nv -0.330606 -0.617188 -0.351562\nv -0.215276 -0.617188 -0.351562\nv 0.377828 -0.617188 -0.351562\nv 0.506826 -0.617188 -0.351562\nv -0.330604 -0.609375 -0.351562\nv -0.214714 -0.609375 -0.351562\nv 0.376997 -0.609375 -0.351562\nv 0.505715 -0.609375 -0.351562\nv -0.330621 -0.601562 -0.351562\nv -0.214183 -0.601562 -0.351562\nv 0.376082 -0.601562 -0.351562\nv 0.504682 -0.601562 -0.351562\nv -0.33047 -0.59375 -0.351562\nv -0.213733 -0.59375 -0.351562\nv 0.375383 -0.59375 -0.351562\nv 0.375 -0.590246 -0.351562\nv 0.503751 -0.59375 -0.351562\nv -0.330323 -0.585938 -0.351562\nv -0.213284 -0.585938 -0.351562\nv 0.374531 -0.585938 -0.351562\nv 0.503044 -0.585938 -0.351562\nv -0.330166 -0.578125 -0.351562\nv -0.212715 -0.578125 -0.351562\nv 0.373664 -0.578125 -0.351562\nv 0.502711 -0.578125 -0.351562\nv -0.330026 -0.570312 -0.351562\nv -0.212253 -0.570312 -0.351562\nv -0.210938 -0.567725 -0.351562\nv 0.372612 -0.570312 -0.351562\nv 0.367188 -0.563607 -0.351562\nv 0.503076 -0.570312 -0.351562\nv -0.329956 -0.5625 -0.351562\nv -0.204983 -0.5625 -0.351562\nv -0.203125 -0.561548 -0.351562\nv -0.203125 -0.5625 -0.348529\nv -0.195312 -0.558807 -0.351562\nv -0.1875 -0.556777 -0.351562\nv -0.179688 -0.555995 -0.351562\nv -0.171875 -0.555202 -0.351562\nv 0.257812 -0.555093 -0.351562\nv 0.265625 -0.55567 -0.351562\nv 0.273438 -0.556231 -0.351562\nv 0.28125 -0.55683 -0.351562\nv 0.289062 -0.556924 -0.351562\nv 0.296875 -0.556633 -0.351562\nv 0.304688 -0.555956 -0.351562\nv 0.3125 -0.555739 -0.351562\nv 0.320312 -0.556253 -0.351562\nv 0.328125 -0.556802 -0.351562\nv 0.335938 -0.557579 -0.351562\nv 0.34375 -0.558541 -0.351562\nv 0.351562 -0.559581 -0.351562\nv 0.364319 -0.5625 -0.351562\nv 0.359375 -0.561123 -0.351562\nv 0.359375 -0.5625 -0.347112\nv 0.503658 -0.5625 -0.351562\nv -0.32998 -0.554688 -0.351562\nv -0.168384 -0.554688 -0.351562\nv -0.164062 -0.554073 -0.351562\nv -0.164062 -0.554688 -0.347434\nv -0.15625 -0.553665 -0.351562\nv -0.148438 -0.553012 -0.351562\nv -0.140625 -0.550915 -0.351562\nv -0.132812 -0.548642 -0.351562\nv -0.125 -0.547751 -0.351562\nv -0.117188 -0.548464 -0.351562\nv -0.109375 -0.549082 -0.351562\nv -0.101562 -0.549531 -0.351562\nv -0.09375 -0.549901 -0.351562\nv -0.0859375 -0.550281 -0.351562\nv -0.078125 -0.550819 -0.351562\nv -0.0703125 -0.551379 -0.351562\nv -0.0625 -0.551939 -0.351562\nv -0.0546875 -0.552453 -0.351562\nv -0.046875 -0.552994 -0.351562\nv -0.0390625 -0.553278 -0.351562\nv -0.03125 -0.553615 -0.351562\nv -0.0234375 -0.554022 -0.351562\nv -0.015625 -0.554161 -0.351562\nv -0.015625 -0.554688 -0.346036\nv -0.0078125 -0.554229 -0.351562\nv -0.0078125 -0.554688 -0.348382\nv 0 -0.554168 -0.351562\nv 0 -0.554688 -0.348154\nv 0.0078125 -0.554107 -0.351562\nv 0.0078125 -0.554688 -0.347546\nv 0.015625 -0.554089 -0.351562\nv 0.015625 -0.554688 -0.346615\nv 0.0234375 -0.554011 -0.351562\nv 0.0234375 -0.554688 -0.346404\nv 0.03125 -0.554072 -0.351562\nv 0.03125 -0.554688 -0.346307\nv 0.0390625 -0.554048 -0.351562\nv 0.0390625 -0.554688 -0.346215\nv 0.046875 -0.553907 -0.351562\nv 0.046875 -0.554688 -0.344176\nv 0.0546875 -0.553754 -0.351562\nv 0.0625 -0.553706 -0.351562\nv 0.0703125 -0.553597 -0.351562\nv 0.078125 -0.553424 -0.351562\nv 0.0859375 -0.553284 -0.351562\nv 0.09375 -0.55308 -0.351562\nv 0.101562 -0.552803 -0.351562\nv 0.109375 -0.552564 -0.351562\nv 0.117188 -0.552479 -0.351562\nv 0.125 -0.552492 -0.351562\nv 0.132812 -0.55245 -0.351562\nv 0.140625 -0.552501 -0.351562\nv 0.148438 -0.55261 -0.351562\nv 0.15625 -0.552959 -0.351562\nv 0.15625 -0.554688 -0.343978\nv 0.164062 -0.553185 -0.351562\nv 0.164062 -0.554688 -0.344475\nv 0.171875 -0.55334 -0.351562\nv 0.171875 -0.554688 -0.34554\nv 0.179688 -0.553495 -0.351562\nv 0.179688 -0.554688 -0.346098\nv 0.1875 -0.553608 -0.351562\nv 0.1875 -0.554688 -0.34638\nv 0.195312 -0.553747 -0.351562\nv 0.195312 -0.554688 -0.346851\nv 0.203125 -0.553753 -0.351562\nv 0.203125 -0.554688 -0.346089\nv 0.210938 -0.553653 -0.351562\nv 0.210938 -0.554688 -0.344633\nv 0.21875 -0.553621 -0.351562\nv 0.226562 -0.553713 -0.351562\nv 0.234375 -0.553918 -0.351562\nv 0.234375 -0.554688 -0.344255\nv 0.242188 -0.5542 -0.351562\nv 0.242188 -0.554688 -0.346148\nv 0.251215 -0.554688 -0.351562\nv 0.25 -0.554612 -0.351562\nv 0.25 -0.554688 -0.350747\nv 0.504071 -0.554688 -0.351562\nv -0.329988 -0.546875 -0.351562\nv 0.504335 -0.546875 -0.351562\nv -0.330005 -0.539062 -0.351562\nv 0.504483 -0.539062 -0.351562\nv -0.33006 -0.53125 -0.351562\nv 0.504637 -0.53125 -0.351562\nv -0.330164 -0.523438 -0.351562\nv 0.50495 -0.523438 -0.351562\nv -0.33022 -0.515625 -0.351562\nv 0.5053 -0.515625 -0.351562\nv -0.330225 -0.507812 -0.351562\nv 0.50536 -0.507812 -0.351562\nv -0.330158 -0.5 -0.351562\nv 0.505263 -0.5 -0.351562\nv -0.329949 -0.492188 -0.351562\nv 0.505348 -0.492188 -0.351562\nv -0.329897 -0.484375 -0.351562\nv -0.140625 -0.477286 -0.351562\nv -0.132812 -0.480309 -0.351562\nv -0.125 -0.479997 -0.351562\nv -0.117188 -0.477923 -0.351562\nv 0.3125 -0.477303 -0.351562\nv 0.320312 -0.477841 -0.351562\nv 0.505572 -0.484375 -0.351562\nv -0.329866 -0.476562 -0.351562\nv -0.203125 -0.472025 -0.351562\nv -0.195312 -0.472967 -0.351562\nv -0.1875 -0.472743 -0.351562\nv -0.179688 -0.472005 -0.351562\nv -0.171875 -0.471419 -0.351562\nv -0.164062 -0.471607 -0.351562\nv -0.15625 -0.472606 -0.351562\nv -0.142487 -0.476562 -0.351562\nv -0.148438 -0.474679 -0.351562\nv -0.112139 -0.476562 -0.351562\nv -0.109375 -0.476039 -0.351562\nv -0.101562 -0.47445 -0.351562\nv -0.09375 -0.472687 -0.351562\nv -0.0859375 -0.471106 -0.351562\nv -0.078125 -0.46991 -0.351562\nv 0.132812 -0.468799 -0.351562\nv 0.140625 -0.469121 -0.351562\nv 0.148438 -0.46946 -0.351562\nv 0.15625 -0.469844 -0.351562\nv 0.164062 -0.470462 -0.351562\nv 0.171875 -0.471068 -0.351562\nv 0.179688 -0.471494 -0.351562\nv 0.1875 -0.471562 -0.351562\nv 0.195312 -0.471319 -0.351562\nv 0.203125 -0.471228 -0.351562\nv 0.210938 -0.47127 -0.351562\nv 0.21875 -0.471295 -0.351562\nv 0.226562 -0.47144 -0.351562\nv 0.234375 -0.471549 -0.351562\nv 0.242188 -0.471632 -0.351562\nv 0.25 -0.471853 -0.351562\nv 0.257812 -0.472001 -0.351562\nv 0.265625 -0.472109 -0.351562\nv 0.273438 -0.472273 -0.351562\nv 0.28125 -0.472421 -0.351562\nv 0.289062 -0.472976 -0.351562\nv 0.296875 -0.474205 -0.351562\nv 0.309111 -0.476562 -0.351562\nv 0.304688 -0.475549 -0.351562\nv 0.304688 -0.476562 -0.346752\nv 0.325256 -0.476562 -0.351562\nv 0.328125 -0.475799 -0.351562\nv 0.328125 -0.476562 -0.345522\nv 0.335938 -0.473683 -0.351562\nv 0.34375 -0.473274 -0.351562\nv 0.351562 -0.473964 -0.351562\nv 0.359375 -0.473575 -0.351562\nv 0.367188 -0.470086 -0.351562\nv 0.50563 -0.476562 -0.351562\nv -0.329853 -0.46875 -0.351562\nv -0.208202 -0.46875 -0.351562\nv -0.210938 -0.464562 -0.351562\nv -0.0704816 -0.46875 -0.351562\nv -0.0703125 -0.468726 -0.351562\nv -0.0703125 -0.46875 -0.351284\nv -0.0625 -0.467576 -0.351562\nv -0.0546875 -0.466462 -0.351562\nv -0.046875 -0.465369 -0.351562\nv -0.0390625 -0.464563 -0.351562\nv -0.03125 -0.463973 -0.351562\nv -0.0234375 -0.463245 -0.351562\nv -0.015625 -0.462786 -0.351562\nv -0.0078125 -0.4628 -0.351562\nv 0 -0.463536 -0.351562\nv 0.0078125 -0.464654 -0.351562\nv 0.015625 -0.465553 -0.351562\nv 0.0234375 -0.466085 -0.351562\nv 0.03125 -0.4664 -0.351562\nv 0.0390625 -0.466734 -0.351562\nv 0.046875 -0.466993 -0.351562\nv 0.0546875 -0.467243 -0.351562\nv 0.0625 -0.467504 -0.351562\nv 0.0703125 -0.46785 -0.351562\nv 0.078125 -0.468091 -0.351562\nv 0.0859375 -0.46802 -0.351562\nv 0.09375 -0.468149 -0.351562\nv 0.101562 -0.4684 -0.351562\nv 0.109375 -0.468497 -0.351562\nv 0.117188 -0.468573 -0.351562\nv 0.129015 -0.46875 -0.351562\nv 0.125 -0.4687 -0.351562\nv 0.132812 -0.46875 -0.351393\nv 0.140625 -0.46875 -0.350348\nv 0.148438 -0.46875 -0.349242\nv 0.15625 -0.46875 -0.347241\nv 0.368715 -0.46875 -0.351562\nv 0.367188 -0.46875 -0.349858\nv 0.375 -0.461058 -0.351562\nv 0.505683 -0.46875 -0.351562\nv -0.329887 -0.460938 -0.351562\nv -0.212518 -0.460938 -0.351562\nv 0.375056 -0.460938 -0.351562\nv 0.375 -0.460938 -0.351454\nv 0.5058 -0.460938 -0.351562\nv -0.32999 -0.453125 -0.351562\nv -0.214772 -0.453125 -0.351562\nv 0.377241 -0.453125 -0.351562\nv 0.375 -0.453125 -0.347164\nv 0.505889 -0.453125 -0.351562\nv -0.330126 -0.445312 -0.351562\nv -0.216639 -0.445312 -0.351562\nv 0.378303 -0.445312 -0.351562\nv 0.375 -0.445312 -0.344163\nv 0.506015 -0.445312 -0.351562\nv -0.330205 -0.4375 -0.351562\nv -0.217601 -0.4375 -0.351562\nv 0.379382 -0.4375 -0.351562\nv 0.506206 -0.4375 -0.351562\nv -0.330059 -0.429688 -0.351562\nv -0.21763 -0.429688 -0.351562\nv 0.380332 -0.429688 -0.351562\nv 0.506443 -0.429688 -0.351562\nv -0.329729 -0.421875 -0.351562\nv -0.21775 -0.421875 -0.351562\nv 0.381525 -0.421875 -0.351562\nv 0.382812 -0.416201 -0.351562\nv 0.506715 -0.421875 -0.351562\nv -0.329424 -0.414062 -0.351562\nv -0.218183 -0.414062 -0.351562\nv 0.383254 -0.414062 -0.351562\nv 0.382812 -0.414062 -0.350039\nv 0.506966 -0.414062 -0.351562\nv -0.328962 -0.40625 -0.351562\nv -0.218511 -0.40625 -0.351562\nv 0.384587 -0.40625 -0.351562\nv 0.382812 -0.40625 -0.34485\nv 0.506945 -0.40625 -0.351562\nv -0.328318 -0.398438 -0.351562\nv -0.328125 -0.396416 -0.351562\nv -0.218037 -0.398438 -0.351562\nv 0.384665 -0.398438 -0.351562\nv 0.382812 -0.398438 -0.345204\nv 0.506994 -0.398438 -0.351562\nv -0.327554 -0.390625 -0.351562\nv -0.328125 -0.390625 -0.347838\nv -0.217115 -0.390625 -0.351562\nv 0.384024 -0.390625 -0.351562\nv 0.382812 -0.390625 -0.345352\nv 0.506912 -0.390625 -0.351562\nv -0.326821 -0.382812 -0.351562\nv -0.21621 -0.382812 -0.351562\nv 0.38379 -0.382812 -0.351562\nv 0.506678 -0.382812 -0.351562\nv -0.325937 -0.375 -0.351562\nv -0.215462 -0.375 -0.351562\nv 0.38379 -0.375 -0.351562\nv 0.506321 -0.375 -0.351562\nv -0.325067 -0.367188 -0.351562\nv -0.21527 -0.367188 -0.351562\nv 0.383953 -0.367188 -0.351562\nv 0.505961 -0.367188 -0.351562\nv -0.324199 -0.359375 -0.351562\nv -0.215112 -0.359375 -0.351562\nv 0.384464 -0.359375 -0.351562\nv 0.505828 -0.359375 -0.351562\nv -0.323308 -0.351562 -0.351562\nv -0.215388 -0.351562 -0.351562\nv 0.385153 -0.351562 -0.351562\nv 0.505653 -0.351562 -0.351562\nv -0.322603 -0.34375 -0.351562\nv -0.215848 -0.34375 -0.351562\nv 0.38589 -0.34375 -0.351562\nv 0.505698 -0.34375 -0.351562\nv -0.32209 -0.335938 -0.351562\nv -0.216307 -0.335938 -0.351562\nv 0.386225 -0.335938 -0.351562\nv 0.505881 -0.335938 -0.351562\nv -0.321688 -0.328125 -0.351562\nv -0.216575 -0.328125 -0.351562\nv 0.386385 -0.328125 -0.351562\nv 0.505983 -0.328125 -0.351562\nv -0.321255 -0.320312 -0.351562\nv -0.216775 -0.320312 -0.351562\nv 0.386666 -0.320312 -0.351562\nv 0.50616 -0.320312 -0.351562\nv -0.320762 -0.3125 -0.351562\nv -0.320312 -0.306074 -0.351562\nv -0.217079 -0.3125 -0.351562\nv 0.386982 -0.3125 -0.351562\nv 0.506459 -0.3125 -0.351562\nv -0.320219 -0.304688 -0.351562\nv -0.320312 -0.304688 -0.350726\nv -0.217397 -0.304688 -0.351562\nv 0.387188 -0.304688 -0.351562\nv 0.506633 -0.304688 -0.351562\nv -0.31979 -0.296875 -0.351562\nv -0.320312 -0.296875 -0.346043\nv -0.217754 -0.296875 -0.351562\nv 0.387307 -0.296875 -0.351562\nv 0.506731 -0.296875 -0.351562\nv -0.319412 -0.289062 -0.351562\nv -0.218167 -0.289062 -0.351562\nv 0.38738 -0.289062 -0.351562\nv 0.506733 -0.289062 -0.351562\nv -0.318994 -0.28125 -0.351562\nv -0.218658 -0.28125 -0.351562\nv -0.21875 -0.279965 -0.351562\nv 0.387772 -0.28125 -0.351562\nv 0.506696 -0.28125 -0.351562\nv -0.318472 -0.273438 -0.351562\nv -0.219247 -0.273438 -0.351562\nv 0.388491 -0.273438 -0.351562\nv 0.506362 -0.273438 -0.351562\nv -0.317931 -0.265625 -0.351562\nv -0.219691 -0.265625 -0.351562\nv 0.388849 -0.265625 -0.351562\nv 0.505944 -0.265625 -0.351562\nv -0.317443 -0.257812 -0.351562\nv -0.2196 -0.257812 -0.351562\nv -0.21875 -0.257812 -0.34441\nv 0.38876 -0.257812 -0.351562\nv 0.505612 -0.257812 -0.351562\nv -0.316954 -0.25 -0.351562\nv -0.219206 -0.25 -0.351562\nv -0.21875 -0.25 -0.34834\nv 0.388457 -0.25 -0.351562\nv 0.505569 -0.25 -0.351562\nv -0.316492 -0.242188 -0.351562\nv -0.218799 -0.242188 -0.351562\nv -0.21875 -0.240778 -0.351562\nv -0.21875 -0.242188 -0.351257\nv 0.388284 -0.242188 -0.351562\nv 0.505634 -0.242188 -0.351562\nv -0.316233 -0.234375 -0.351562\nv -0.218545 -0.234375 -0.351562\nv 0.388391 -0.234375 -0.351562\nv 0.505717 -0.234375 -0.351562\nv -0.316107 -0.226562 -0.351562\nv -0.218371 -0.226562 -0.351562\nv 0.388496 -0.226562 -0.351562\nv 0.505759 -0.226562 -0.351562\nv -0.316144 -0.21875 -0.351562\nv -0.217985 -0.21875 -0.351562\nv 0.388673 -0.21875 -0.351562\nv 0.505612 -0.21875 -0.351562\nv -0.316462 -0.210938 -0.351562\nv -0.217479 -0.210938 -0.351562\nv 0.388859 -0.210938 -0.351562\nv 0.505504 -0.210938 -0.351562\nv -0.316878 -0.203125 -0.351562\nv -0.217192 -0.203125 -0.351562\nv 0.389272 -0.203125 -0.351562\nv 0.505431 -0.203125 -0.351562\nv -0.316715 -0.195312 -0.351562\nv -0.217447 -0.195312 -0.351562\nv 0.38984 -0.195312 -0.351562\nv 0.505341 -0.195312 -0.351562\nv -0.316257 -0.1875 -0.351562\nv -0.217732 -0.1875 -0.351562\nv 0.390561 -0.1875 -0.351562\nv 0.390625 -0.186513 -0.351562\nv 0.390625 -0.1875 -0.348801\nv 0.505332 -0.1875 -0.351562\nv -0.315893 -0.179688 -0.351562\nv -0.218108 -0.179688 -0.351562\nv 0.391094 -0.179688 -0.351562\nv 0.505167 -0.179688 -0.351562\nv -0.315401 -0.171875 -0.351562\nv -0.218356 -0.171875 -0.351562\nv 0.391441 -0.171875 -0.351562\nv 0.504665 -0.171875 -0.351562\nv -0.315041 -0.164062 -0.351562\nv -0.218183 -0.164062 -0.351562\nv 0.391556 -0.164062 -0.351562\nv 0.504174 -0.164062 -0.351562\nv -0.314473 -0.15625 -0.351562\nv -0.217655 -0.15625 -0.351562\nv 0.391116 -0.15625 -0.351562\nv 0.390625 -0.150173 -0.351562\nv 0.503775 -0.15625 -0.351562\nv -0.313809 -0.148438 -0.351562\nv -0.217247 -0.148438 -0.351562\nv 0.390487 -0.148438 -0.351562\nv 0.390625 -0.148438 -0.347739\nv 0.503553 -0.148438 -0.351562\nv -0.313252 -0.140625 -0.351562\nv -0.216779 -0.140625 -0.351562\nv 0.389815 -0.140625 -0.351562\nv 0.503162 -0.140625 -0.351562\nv -0.312919 -0.132812 -0.351562\nv -0.216473 -0.132812 -0.351562\nv 0.388383 -0.132812 -0.351562\nv 0.502753 -0.132812 -0.351562\nv -0.312545 -0.125 -0.351562\nv -0.3125 -0.124213 -0.351562\nv -0.215743 -0.125 -0.351562\nv 0.387144 -0.125 -0.351562\nv 0.502229 -0.125 -0.351562\nv -0.312113 -0.117188 -0.351562\nv -0.214547 -0.117188 -0.351562\nv 0.385688 -0.117188 -0.351562\nv 0.501977 -0.117188 -0.351562\nv -0.311784 -0.109375 -0.351562\nv -0.213392 -0.109375 -0.351562\nv 0.38362 -0.109375 -0.351562\nv 0.382812 -0.107006 -0.351562\nv 0.501717 -0.109375 -0.351562\nv -0.311609 -0.101562 -0.351562\nv -0.211875 -0.101562 -0.351562\nv -0.210938 -0.0985365 -0.351562\nv 0.381087 -0.101562 -0.351562\nv 0.501639 -0.101562 -0.351562\nv -0.312034 -0.09375 -0.351562\nv -0.3125 -0.0902755 -0.351562\nv -0.209398 -0.09375 -0.351562\nv 0.378315 -0.09375 -0.351562\nv 0.502292 -0.09375 -0.351562\nv -0.313136 -0.0859375 -0.351562\nv -0.205963 -0.0859375 -0.351562\nv -0.203125 -0.0817429 -0.351562\nv 0.376194 -0.0859375 -0.351562\nv 0.375 -0.0830859 -0.351562\nv 0.503445 -0.0859375 -0.351562\nv -0.314383 -0.078125 -0.351562\nv -0.198143 -0.078125 -0.351562\nv -0.195312 -0.076705 -0.351562\nv -0.1875 -0.0747367 -0.351562\nv -0.179688 -0.0734108 -0.351562\nv -0.171875 -0.0726724 -0.351562\nv -0.164062 -0.0719855 -0.351562\nv -0.15625 -0.0708101 -0.351562\nv 0.0390625 -0.0703297 -0.351562\nv 0.046875 -0.0704556 -0.351562\nv 0.0546875 -0.0706184 -0.351562\nv 0.0625 -0.0707757 -0.351562\nv 0.0703125 -0.0709877 -0.351562\nv 0.078125 -0.0712617 -0.351562\nv 0.0859375 -0.0714776 -0.351562\nv 0.09375 -0.07165 -0.351562\nv 0.101562 -0.0715712 -0.351562\nv 0.109375 -0.0714346 -0.351562\nv 0.117188 -0.0713055 -0.351562\nv 0.125 -0.0711896 -0.351562\nv 0.132812 -0.0710435 -0.351562\nv 0.140625 -0.0708443 -0.351562\nv 0.148438 -0.0707016 -0.351562\nv 0.15625 -0.0706187 -0.351562\nv 0.164062 -0.070555 -0.351562\nv 0.171875 -0.0705118 -0.351562\nv 0.179688 -0.0704539 -0.351562\nv 0.1875 -0.0703245 -0.351562\nv 0.34375 -0.0703773 -0.351562\nv 0.351562 -0.0708368 -0.351562\nv 0.359375 -0.0717323 -0.351562\nv 0.372257 -0.078125 -0.351562\nv 0.367188 -0.0735471 -0.351562\nv 0.504822 -0.078125 -0.351562\nv -0.315529 -0.0703125 -0.351562\nv -0.153556 -0.0703125 -0.351562\nv -0.148438 -0.069011 -0.351562\nv -0.140625 -0.0675583 -0.351562\nv -0.132812 -0.0674584 -0.351562\nv -0.125 -0.0674677 -0.351562\nv -0.117188 -0.0674796 -0.351562\nv -0.109375 -0.0675945 -0.351562\nv -0.101562 -0.0677239 -0.351562\nv -0.09375 -0.0678199 -0.351562\nv -0.0859375 -0.0677355 -0.351562\nv -0.078125 -0.0674209 -0.351562\nv -0.0703125 -0.067218 -0.351562\nv -0.0625 -0.0671938 -0.351562\nv -0.0546875 -0.0672066 -0.351562\nv -0.046875 -0.0672611 -0.351562\nv -0.0390625 -0.0677569 -0.351562\nv -0.03125 -0.0681726 -0.351562\nv -0.0234375 -0.0684731 -0.351562\nv -0.015625 -0.0686913 -0.351562\nv -0.0078125 -0.0686592 -0.351562\nv 0 -0.0689955 -0.351562\nv 0 -0.0703125 -0.344954\nv 0.0078125 -0.0695269 -0.351562\nv 0.0078125 -0.0703125 -0.346792\nv 0.015625 -0.0700211 -0.351562\nv 0.015625 -0.0703125 -0.349306\nv 0.0234375 -0.070154 -0.351562\nv 0.0234375 -0.0703125 -0.350513\nv 0.0367276 -0.0703125 -0.351562\nv 0.03125 -0.0702614 -0.351562\nv 0.03125 -0.0703125 -0.351247\nv 0.188203 -0.0703125 -0.351562\nv 0.195312 -0.0701826 -0.351562\nv 0.203125 -0.0700362 -0.351562\nv 0.210938 -0.0699545 -0.351562\nv 0.21875 -0.0698541 -0.351562\nv 0.226562 -0.0696505 -0.351562\nv 0.234375 -0.0694736 -0.351562\nv 0.242188 -0.0692931 -0.351562\nv 0.25 -0.0691966 -0.351562\nv 0.257812 -0.0691501 -0.351562\nv 0.265625 -0.0691195 -0.351562\nv 0.273438 -0.0691476 -0.351562\nv 0.28125 -0.06932 -0.351562\nv 0.28125 -0.0703125 -0.343882\nv 0.289062 -0.0695529 -0.351562\nv 0.289062 -0.0703125 -0.346229\nv 0.296875 -0.0697497 -0.351562\nv 0.296875 -0.0703125 -0.347556\nv 0.304688 -0.0697653 -0.351562\nv 0.304688 -0.0703125 -0.34803\nv 0.3125 -0.0698152 -0.351562\nv 0.3125 -0.0703125 -0.34883\nv 0.320312 -0.0698587 -0.351562\nv 0.320312 -0.0703125 -0.349678\nv 0.328125 -0.0698526 -0.351562\nv 0.328125 -0.0703125 -0.350048\nv 0.342411 -0.0703125 -0.351562\nv 0.335938 -0.0699919 -0.351562\nv 0.335938 -0.0703125 -0.350609\nv 0.506145 -0.0703125 -0.351562\nv -0.315962 -0.0625 -0.351562\nv 0.507806 -0.0625 -0.351562\nv 0.507812 -0.0623631 -0.351562\nv -0.315853 -0.0546875 -0.351562\nv 0.508117 -0.0546875 -0.351562\nv 0.507812 -0.0503922 -0.351562\nv 0.507812 -0.0546875 -0.348553\nv -0.3154 -0.046875 -0.351562\nv 0.507542 -0.046875 -0.351562\nv -0.315061 -0.0390625 -0.351562\nv 0.506762 -0.0390625 -0.351562\nv -0.315053 -0.03125 -0.351562\nv 0.505991 -0.03125 -0.351562\nv -0.315028 -0.0234375 -0.351562\nv 0.505001 -0.0234375 -0.351562\nv -0.315241 -0.015625 -0.351562\nv 0.504456 -0.015625 -0.351562\nv -0.315356 -0.0078125 -0.351562\nv 0.504416 -0.0078125 -0.351562\nv -0.315252 0 -0.351562\nv 0.505252 0 -0.351562\nv -0.314998 0.0078125 -0.351562\nv 0.504991 0.0078125 -0.351562\nv -0.314931 0.015625 -0.351562\nv 0.504535 0.015625 -0.351562\nv -0.314689 0.0234375 -0.351562\nv 0.503531 0.0234375 -0.351562\nv -0.314432 0.03125 -0.351562\nv 0.501326 0.03125 -0.351562\nv 0.5 0.0352993 -0.351562\nv -0.314313 0.0390625 -0.351562\nv 0.498582 0.0390625 -0.351562\nv -0.314143 0.046875 -0.351562\nv 0.494565 0.046875 -0.351562\nv 0.492188 0.0503617 -0.351562\nv -0.313323 0.0546875 -0.351562\nv -0.3125 0.0622849 -0.351562\nv 0.48813 0.0546875 -0.351562\nv 0.484375 0.0578352 -0.351562\nv -0.312473 0.0625 -0.351562\nv -0.164062 0.0700754 -0.351562\nv -0.15625 0.0697655 -0.351562\nv -0.148438 0.0695217 -0.351562\nv -0.140625 0.0695647 -0.351562\nv -0.132812 0.0696583 -0.351562\nv -0.125 0.0697749 -0.351562\nv -0.117188 0.0696756 -0.351562\nv -0.109375 0.0693756 -0.351562\nv -0.101562 0.0689866 -0.351562\nv -0.09375 0.0685369 -0.351562\nv -0.0859375 0.0681549 -0.351562\nv -0.078125 0.0679285 -0.351562\nv -0.0703125 0.0678323 -0.351562\nv -0.0625 0.0676473 -0.351562\nv -0.0546875 0.0674652 -0.351562\nv -0.046875 0.0672289 -0.351562\nv -0.0390625 0.0671128 -0.351562\nv -0.03125 0.0666988 -0.351562\nv -0.0234375 0.066305 -0.351562\nv -0.015625 0.0658618 -0.351562\nv -0.0078125 0.0654857 -0.351562\nv 0 0.0656843 -0.351562\nv 0.0078125 0.0658741 -0.351562\nv 0.015625 0.0659194 -0.351562\nv 0.0234375 0.0660213 -0.351562\nv 0.03125 0.0659734 -0.351562\nv 0.0390625 0.0657957 -0.351562\nv 0.046875 0.0656457 -0.351562\nv 0.0546875 0.0655188 -0.351562\nv 0.0625 0.065187 -0.351562\nv 0.0703125 0.0650599 -0.351562\nv 0.078125 0.0650698 -0.351562\nv 0.0859375 0.0651509 -0.351562\nv 0.09375 0.0653586 -0.351562\nv 0.101562 0.0656213 -0.351562\nv 0.109375 0.0658471 -0.351562\nv 0.117188 0.0660284 -0.351562\nv 0.125 0.0662098 -0.351562\nv 0.132812 0.0664259 -0.351562\nv 0.140625 0.0665782 -0.351562\nv 0.148438 0.0667259 -0.351562\nv 0.15625 0.0668743 -0.351562\nv 0.164062 0.0670538 -0.351562\nv 0.171875 0.0672283 -0.351562\nv 0.179688 0.0673593 -0.351562\nv 0.1875 0.067477 -0.351562\nv 0.195312 0.067595 -0.351562\nv 0.203125 0.0676638 -0.351562\nv 0.210938 0.0676384 -0.351562\nv 0.21875 0.0675763 -0.351562\nv 0.226562 0.0674691 -0.351562\nv 0.234375 0.0675956 -0.351562\nv 0.242188 0.0676922 -0.351562\nv 0.25 0.067878 -0.351562\nv 0.257812 0.0681865 -0.351562\nv 0.265625 0.068468 -0.351562\nv 0.273438 0.0682001 -0.351562\nv 0.28125 0.0682139 -0.351562\nv 0.289062 0.0683615 -0.351562\nv 0.296875 0.0683156 -0.351562\nv 0.304688 0.0680569 -0.351562\nv 0.3125 0.0678736 -0.351562\nv 0.320312 0.0675863 -0.351562\nv 0.328125 0.0672337 -0.351562\nv 0.335938 0.066926 -0.351562\nv 0.34375 0.0664792 -0.351562\nv 0.351562 0.0661335 -0.351562\nv 0.359375 0.0658107 -0.351562\nv 0.367188 0.0654375 -0.351562\nv 0.375 0.0653424 -0.351562\nv 0.382812 0.0649794 -0.351562\nv 0.390625 0.0649101 -0.351562\nv 0.398438 0.064849 -0.351562\nv 0.40625 0.0649531 -0.351562\nv 0.414062 0.0651871 -0.351562\nv 0.421875 0.0652153 -0.351562\nv 0.429688 0.0655998 -0.351562\nv 0.4375 0.0657026 -0.351562\nv 0.445312 0.0662143 -0.351562\nv 0.453125 0.0659362 -0.351562\nv 0.460938 0.065703 -0.351562\nv 0.46875 0.0654939 -0.351562\nv 0.478408 0.0625 -0.351562\nv 0.476562 0.0637257 -0.351562\nv -0.311774 0.0703125 -0.351562\nv -0.195312 0.0746623 -0.351562\nv -0.1875 0.0726944 -0.351562\nv -0.179688 0.0714426 -0.351562\nv -0.166573 0.0703125 -0.351562\nv -0.171875 0.0707594 -0.351562\nv -0.164062 0.0703125 -0.35097\nv -0.15625 0.0703125 -0.350206\nv -0.148438 0.0703125 -0.349542\nv -0.140625 0.0703125 -0.349559\nv -0.132812 0.0703125 -0.349751\nv -0.125 0.0703125 -0.349965\nv -0.117188 0.0703125 -0.349684\nv -0.109375 0.0703125 -0.348996\nv -0.101562 0.0703125 -0.348277\nv -0.09375 0.0703125 -0.347544\nv -0.0859375 0.0703125 -0.347123\nv -0.078125 0.0703125 -0.346772\nv -0.0703125 0.0703125 -0.3463\nv -0.0625 0.0703125 -0.345565\nv -0.0546875 0.0703125 -0.345007\nv -0.046875 0.0703125 -0.344559\nv -0.0390625 0.0703125 -0.344234\nv 0.0390625 0.0703125 -0.343829\nv 0.046875 0.0703125 -0.343978\nv 0.0546875 0.0703125 -0.34392\nv 0.125 0.0703125 -0.343758\nv 0.132812 0.0703125 -0.343912\nv 0.140625 0.0703125 -0.344297\nv 0.148438 0.0703125 -0.344795\nv 0.15625 0.0703125 -0.34514\nv 0.164062 0.0703125 -0.345442\nv 0.171875 0.0703125 -0.345781\nv 0.179688 0.0703125 -0.346005\nv 0.1875 0.0703125 -0.346227\nv 0.195312 0.0703125 -0.346351\nv 0.203125 0.0703125 -0.346405\nv 0.210938 0.0703125 -0.346255\nv 0.21875 0.0703125 -0.345949\nv 0.226562 0.0703125 -0.34566\nv 0.234375 0.0703125 -0.345542\nv 0.242188 0.0703125 -0.345483\nv 0.25 0.0703125 -0.345554\nv 0.257812 0.0703125 -0.345987\nv 0.265625 0.0703125 -0.346327\nv 0.273438 0.0703125 -0.346079\nv 0.28125 0.0703125 -0.346336\nv 0.289062 0.0703125 -0.346361\nv 0.296875 0.0703125 -0.345782\nv 0.304688 0.0703125 -0.34411\nv -0.311465 0.078125 -0.351562\nv -0.210938 0.0848474 -0.351562\nv -0.203098 0.078125 -0.351562\nv -0.203125 0.0781444 -0.351562\nv -0.311334 0.0859375 -0.351562\nv -0.211838 0.0859375 -0.351562\nv -0.210938 0.0859375 -0.349161\nv -0.311453 0.09375 -0.351562\nv -0.216828 0.09375 -0.351562\nv -0.21875 0.0975501 -0.351562\nv -0.311648 0.101562 -0.351562\nv -0.220162 0.101562 -0.351562\nv -0.21875 0.101562 -0.345493\nv -0.312106 0.109375 -0.351562\nv -0.3125 0.115667 -0.351562\nv -0.221424 0.109375 -0.351562\nv -0.312603 0.117188 -0.351562\nv -0.222125 0.117188 -0.351562\nv -0.313202 0.125 -0.351562\nv -0.222643 0.125 -0.351562\nv -0.313753 0.132812 -0.351562\nv -0.223117 0.132812 -0.351562\nv -0.314352 0.140625 -0.351562\nv -0.223394 0.140625 -0.351562\nv -0.315004 0.148438 -0.351562\nv -0.223809 0.148438 -0.351562\nv -0.315666 0.15625 -0.351562\nv -0.224421 0.15625 -0.351562\nv -0.316261 0.164062 -0.351562\nv -0.225152 0.164062 -0.351562\nv -0.316728 0.171875 -0.351562\nv -0.225093 0.171875 -0.351562\nv -0.317174 0.179688 -0.351562\nv -0.224971 0.179688 -0.351562\nv -0.317695 0.1875 -0.351562\nv -0.224973 0.1875 -0.351562\nv -0.318426 0.195312 -0.351562\nv -0.22474 0.195312 -0.351562\nv -0.319352 0.203125 -0.351562\nv -0.224475 0.203125 -0.351562\nv -0.320302 0.210938 -0.351562\nv -0.320312 0.21102 -0.351562\nv -0.224199 0.210938 -0.351562\nv -0.321191 0.21875 -0.351562\nv -0.223973 0.21875 -0.351562\nv -0.322067 0.226562 -0.351562\nv -0.223756 0.226562 -0.351562\nv -0.322763 0.234375 -0.351562\nv -0.223757 0.234375 -0.351562\nv -0.323371 0.242188 -0.351562\nv -0.2241 0.242188 -0.351562\nv -0.324051 0.25 -0.351562\nv -0.224631 0.25 -0.351562\nv -0.324915 0.257812 -0.351562\nv -0.225039 0.257812 -0.351562\nv -0.325757 0.265625 -0.351562\nv -0.225305 0.265625 -0.351562\nv -0.326542 0.273438 -0.351562\nv -0.2257 0.273438 -0.351562\nv -0.327217 0.28125 -0.351562\nv -0.226192 0.28125 -0.351562\nv -0.226562 0.2867 -0.351562\nv -0.327894 0.289062 -0.351562\nv -0.328125 0.292207 -0.351562\nv -0.22676 0.289062 -0.351562\nv -0.226562 0.289062 -0.350614\nv -0.328429 0.296875 -0.351562\nv -0.328125 0.296875 -0.347686\nv -0.22737 0.296875 -0.351562\nv -0.226562 0.296875 -0.347297\nv -0.328662 0.304688 -0.351562\nv -0.328125 0.304688 -0.344355\nv -0.228298 0.304688 -0.351562\nv -0.328948 0.3125 -0.351562\nv -0.229122 0.3125 -0.351562\nv -0.329206 0.320312 -0.351562\nv -0.229766 0.320312 -0.351562\nv -0.329278 0.328125 -0.351562\nv -0.230775 0.328125 -0.351562\nv -0.329398 0.335938 -0.351562\nv -0.23197 0.335938 -0.351562\nv -0.329642 0.34375 -0.351562\nv -0.23286 0.34375 -0.351562\nv -0.330148 0.351562 -0.351562\nv -0.233777 0.351562 -0.351562\nv -0.234375 0.358612 -0.351562\nv -0.330681 0.359375 -0.351562\nv -0.234429 0.359375 -0.351562\nv -0.234375 0.359375 -0.35127\nv -0.331184 0.367188 -0.351562\nv -0.235034 0.367188 -0.351562\nv -0.234375 0.367188 -0.348009\nv -0.331645 0.375 -0.351562\nv -0.235482 0.375 -0.351562\nv -0.234375 0.375 -0.345361\nv -0.332023 0.382812 -0.351562\nv -0.235665 0.382812 -0.351562\nv -0.332402 0.390625 -0.351562\nv -0.235883 0.390625 -0.351562\nv -0.332789 0.398438 -0.351562\nv -0.236044 0.398438 -0.351562\nv -0.333141 0.40625 -0.351562\nv -0.236031 0.40625 -0.351562\nv -0.333455 0.414062 -0.351562\nv -0.236027 0.414062 -0.351562\nv -0.333725 0.421875 -0.351562\nv -0.236204 0.421875 -0.351562\nv -0.334023 0.429688 -0.351562\nv -0.236427 0.429688 -0.351562\nv -0.334353 0.4375 -0.351562\nv -0.236768 0.4375 -0.351562\nv -0.33473 0.445312 -0.351562\nv -0.237103 0.445312 -0.351562\nv -0.335122 0.453125 -0.351562\nv -0.237402 0.453125 -0.351562\nv -0.335586 0.460938 -0.351562\nv -0.237643 0.460938 -0.351562\nv -0.335898 0.46875 -0.351562\nv -0.335938 0.47012 -0.351562\nv -0.237809 0.46875 -0.351562\nv -0.336139 0.476562 -0.351562\nv -0.335938 0.476562 -0.349815\nv -0.238053 0.476562 -0.351562\nv -0.336491 0.484375 -0.351562\nv -0.335938 0.484375 -0.346281\nv -0.238494 0.484375 -0.351562\nv -0.337153 0.492188 -0.351562\nv -0.238935 0.492188 -0.351562\nv -0.337804 0.5 -0.351562\nv -0.239486 0.5 -0.351562\nv -0.338424 0.507812 -0.351562\nv -0.239962 0.507812 -0.351562\nv -0.339104 0.515625 -0.351562\nv -0.240402 0.515625 -0.351562\nv -0.339832 0.523438 -0.351562\nv -0.241071 0.523438 -0.351562\nv -0.340562 0.53125 -0.351562\nv -0.241642 0.53125 -0.351562\nv -0.34125 0.539062 -0.351562\nv -0.242088 0.539062 -0.351562\nv -0.242188 0.540675 -0.351562\nv -0.341976 0.546875 -0.351562\nv -0.242588 0.546875 -0.351562\nv -0.242188 0.546875 -0.347915\nv -0.342761 0.554688 -0.351562\nv -0.24318 0.554688 -0.351562\nv -0.343552 0.5625 -0.351562\nv -0.34375 0.56497 -0.351562\nv -0.243888 0.5625 -0.351562\nv -0.344151 0.570312 -0.351562\nv -0.34375 0.570312 -0.349534\nv -0.244583 0.570312 -0.351562\nv -0.344735 0.578125 -0.351562\nv -0.34375 0.578125 -0.347109\nv -0.245177 0.578125 -0.351562\nv -0.345372 0.585938 -0.351562\nv -0.34375 0.585938 -0.344322\nv -0.245741 0.585938 -0.351562\nv -0.346044 0.59375 -0.351562\nv -0.246187 0.59375 -0.351562\nv -0.346469 0.601562 -0.351562\nv -0.246655 0.601562 -0.351562\nv -0.34691 0.609375 -0.351562\nv -0.247249 0.609375 -0.351562\nv -0.347418 0.617188 -0.351562\nv -0.248028 0.617188 -0.351562\nv -0.347945 0.625 -0.351562\nv -0.248928 0.625 -0.351562\nv -0.348057 0.632812 -0.351562\nv -0.24981 0.632812 -0.351562\nv -0.25 0.634636 -0.351562\nv -0.34808 0.640625 -0.351562\nv -0.250592 0.640625 -0.351562\nv -0.348157 0.648438 -0.351562\nv -0.250876 0.648438 -0.351562\nv -0.348279 0.65625 -0.351562\nv -0.251108 0.65625 -0.351562\nv -0.348517 0.664062 -0.351562\nv -0.251399 0.664062 -0.351562\nv -0.348836 0.671875 -0.351562\nv -0.251625 0.671875 -0.351562\nv -0.349194 0.679688 -0.351562\nv -0.2521 0.679688 -0.351562\nv -0.349531 0.6875 -0.351562\nv -0.252835 0.6875 -0.351562\nv -0.349993 0.695312 -0.351562\nv -0.253769 0.695312 -0.351562\nv -0.350394 0.703125 -0.351562\nv -0.254883 0.703125 -0.351562\nv -0.35112 0.710938 -0.351562\nv -0.351562 0.716045 -0.351562\nv -0.255929 0.710938 -0.351562\nv -0.351772 0.71875 -0.351562\nv -0.256798 0.71875 -0.351562\nv -0.257812 0.725384 -0.351562\nv -0.35217 0.726562 -0.351562\nv -0.257992 0.726562 -0.351562\nv -0.352305 0.734375 -0.351562\nv -0.259059 0.734375 -0.351562\nv -0.351799 0.742188 -0.351562\nv -0.351562 0.744005 -0.351562\nv -0.351562 0.742188 -0.347634\nv -0.26083 0.742188 -0.351562\nv -0.350665 0.75 -0.351562\nv -0.263717 0.75 -0.351562\nv -0.265625 0.754333 -0.351562\nv -0.349625 0.757812 -0.351562\nv -0.267048 0.757812 -0.351562\nv -0.350002 0.765625 -0.351562\nv -0.270543 0.765625 -0.351562\nv -0.273438 0.77191 -0.351562\nv -0.350595 0.773438 -0.351562\nv -0.274083 0.773438 -0.351562\nv -0.351272 0.78125 -0.351562\nv -0.351562 0.785207 -0.351562\nv -0.277135 0.78125 -0.351562\nv -0.351838 0.789062 -0.351562\nv -0.351562 0.789062 -0.349565\nv -0.280013 0.789062 -0.351562\nv -0.28125 0.794574 -0.351562\nv -0.28125 0.789062 -0.346354\nv -0.352872 0.796875 -0.351562\nv -0.281765 0.796875 -0.351562\nv -0.352755 0.804688 -0.351562\nv -0.351562 0.804688 -0.344638\nv -0.28308 0.804688 -0.351562\nv -0.352612 0.8125 -0.351562\nv -0.285625 0.8125 -0.351562\nv -0.289062 0.8125 -0.345637\nv -0.35384 0.820312 -0.351562\nv -0.288751 0.820312 -0.351562\nv -0.289062 0.821935 -0.351562\nv -0.289062 0.820312 -0.351003\nv -0.35388 0.828125 -0.351562\nv -0.290584 0.828125 -0.351562\nv -0.352975 0.835938 -0.351562\nv -0.351562 0.842078 -0.351562\nv -0.291492 0.835938 -0.351562\nv -0.351139 0.84375 -0.351562\nv -0.351562 0.84375 -0.3454\nv -0.34375 0.850998 -0.351562\nv -0.291904 0.84375 -0.351562\nv -0.341929 0.851562 -0.351562\nv -0.34375 0.851562 -0.348773\nv -0.335938 0.853193 -0.351562\nv -0.328125 0.857545 -0.351562\nv -0.294085 0.851562 -0.351562\nv -0.296875 0.857256 -0.351562\nv -0.296875 0.851562 -0.344686\nv -0.324832 0.859375 -0.351562\nv -0.320312 0.86144 -0.351562\nv -0.3125 0.863502 -0.351562\nv -0.298486 0.859375 -0.351562\nv -0.304688 0.863011 -0.351562\nv -0.3125 -0.734656 -0.34375\nv -0.304688 -0.736073 -0.34375\nv -0.296875 -0.736535 -0.34375\nv -0.289062 -0.736717 -0.34375\nv -0.28125 -0.735412 -0.34375\nv 0.421875 -0.736408 -0.34375\nv 0.429688 -0.738175 -0.34375\nv 0.4375 -0.738758 -0.34375\nv 0.445312 -0.738874 -0.34375\nv 0.453125 -0.738785 -0.34375\nv 0.460938 -0.738083 -0.34375\nv 0.46875 -0.7368 -0.34375\nv 0.476562 -0.734994 -0.34375\nv -0.335938 -0.730012 -0.34375\nv -0.328125 -0.732294 -0.34375\nv -0.314275 -0.734375 -0.34375\nv -0.320312 -0.733414 -0.34375\nv -0.3125 -0.734375 -0.341737\nv -0.276649 -0.734375 -0.34375\nv -0.273438 -0.733661 -0.34375\nv -0.273438 -0.734375 -0.338399\nv -0.265625 -0.73105 -0.34375\nv -0.257812 -0.728049 -0.34375\nv 0.398438 -0.727236 -0.34375\nv 0.40625 -0.731472 -0.34375\nv 0.40625 -0.734375 -0.337097\nv 0.414098 -0.734375 -0.34375\nv 0.414062 -0.734365 -0.34375\nv 0.414062 -0.734375 -0.343721\nv 0.482036 -0.734375 -0.34375\nv 0.484375 -0.734086 -0.34375\nv 0.492188 -0.732007 -0.34375\nv 0.5 -0.727383 -0.34375\nv -0.339579 -0.726562 -0.34375\nv -0.255305 -0.726562 -0.34375\nv -0.25 -0.721776 -0.34375\nv 0.397425 -0.726562 -0.34375\nv 0.390625 -0.719514 -0.34375\nv 0.500752 -0.726562 -0.34375\nv -0.341771 -0.71875 -0.34375\nv -0.246769 -0.71875 -0.34375\nv -0.242188 -0.713969 -0.34375\nv 0.390066 -0.71875 -0.34375\nv 0.506004 -0.71875 -0.34375\nv -0.342608 -0.710938 -0.34375\nv -0.239787 -0.710938 -0.34375\nv 0.386744 -0.710938 -0.34375\nv 0.507547 -0.710938 -0.34375\nv -0.342781 -0.703125 -0.34375\nv -0.235162 -0.703125 -0.34375\nv -0.234375 -0.701591 -0.34375\nv -0.234375 -0.703125 -0.339589\nv 0.384105 -0.703125 -0.34375\nv 0.382812 -0.698911 -0.34375\nv 0.382812 -0.703125 -0.338514\nv 0.507577 -0.703125 -0.34375\nv -0.342329 -0.695312 -0.34375\nv -0.230763 -0.695312 -0.34375\nv 0.381803 -0.695312 -0.34375\nv 0.507398 -0.695312 -0.34375\nv -0.341238 -0.6875 -0.34375\nv -0.227923 -0.6875 -0.34375\nv -0.226562 -0.682316 -0.34375\nv 0.381415 -0.6875 -0.34375\nv 0.507587 -0.6875 -0.34375\nv -0.340097 -0.679688 -0.34375\nv -0.225882 -0.679688 -0.34375\nv 0.3812 -0.679688 -0.34375\nv 0.507781 -0.679688 -0.34375\nv 0.507812 -0.672221 -0.34375\nv -0.339104 -0.671875 -0.34375\nv -0.224101 -0.671875 -0.34375\nv 0.380701 -0.671875 -0.34375\nv 0.507814 -0.671875 -0.34375\nv 0.507812 -0.67182 -0.34375\nv 0.507812 -0.671875 -0.343729\nv -0.338127 -0.664062 -0.34375\nv -0.222445 -0.664062 -0.34375\nv 0.38032 -0.664062 -0.34375\nv 0.507611 -0.664062 -0.34375\nv -0.337095 -0.65625 -0.34375\nv -0.335938 -0.64936 -0.34375\nv -0.220814 -0.65625 -0.34375\nv 0.38022 -0.65625 -0.34375\nv 0.507713 -0.65625 -0.34375\nv 0.507812 -0.65224 -0.34375\nv -0.33577 -0.648438 -0.34375\nv -0.335938 -0.648438 -0.342334\nv -0.219253 -0.648438 -0.34375\nv -0.21875 -0.645546 -0.34375\nv 0.380503 -0.648438 -0.34375\nv 0.507906 -0.648438 -0.34375\nv 0.507812 -0.646511 -0.34375\nv 0.507812 -0.648438 -0.342229\nv -0.334455 -0.640625 -0.34375\nv -0.217954 -0.640625 -0.34375\nv 0.380656 -0.640625 -0.34375\nv 0.507512 -0.640625 -0.34375\nv -0.333487 -0.632812 -0.34375\nv -0.216936 -0.632812 -0.34375\nv 0.380409 -0.632812 -0.34375\nv 0.507124 -0.632812 -0.34375\nv -0.332585 -0.625 -0.34375\nv -0.216162 -0.625 -0.34375\nv 0.379946 -0.625 -0.34375\nv 0.506704 -0.625 -0.34375\nv -0.331799 -0.617188 -0.34375\nv -0.215752 -0.617188 -0.34375\nv 0.379087 -0.617188 -0.34375\nv 0.505666 -0.617188 -0.34375\nv -0.331727 -0.609375 -0.34375\nv -0.215309 -0.609375 -0.34375\nv 0.378217 -0.609375 -0.34375\nv 0.504858 -0.609375 -0.34375\nv -0.331626 -0.601562 -0.34375\nv -0.214778 -0.601562 -0.34375\nv 0.377253 -0.601562 -0.34375\nv 0.504195 -0.601562 -0.34375\nv -0.331331 -0.59375 -0.34375\nv -0.213942 -0.59375 -0.34375\nv 0.376216 -0.59375 -0.34375\nv 0.375 -0.58625 -0.34375\nv 0.503602 -0.59375 -0.34375\nv -0.33112 -0.585938 -0.34375\nv -0.213179 -0.585938 -0.34375\nv 0.374945 -0.585938 -0.34375\nv 0.375 -0.585938 -0.343378\nv 0.50328 -0.585938 -0.34375\nv -0.330907 -0.578125 -0.34375\nv -0.212379 -0.578125 -0.34375\nv 0.373527 -0.578125 -0.34375\nv 0.503543 -0.578125 -0.34375\nv -0.330695 -0.570312 -0.34375\nv -0.211188 -0.570312 -0.34375\nv -0.210938 -0.569885 -0.34375\nv -0.203125 -0.56404 -0.34375\nv 0.359375 -0.563471 -0.34375\nv 0.371073 -0.570312 -0.34375\nv 0.367188 -0.566768 -0.34375\nv 0.504208 -0.570312 -0.34375\nv -0.330575 -0.5625 -0.34375\nv -0.199574 -0.5625 -0.34375\nv -0.195312 -0.560993 -0.34375\nv -0.1875 -0.558413 -0.34375\nv -0.179688 -0.557048 -0.34375\nv -0.171875 -0.556062 -0.34375\nv -0.164062 -0.555196 -0.34375\nv -0.015625 -0.554856 -0.34375\nv -0.0078125 -0.555197 -0.34375\nv 0 -0.555215 -0.34375\nv 0.0078125 -0.55513 -0.34375\nv 0.015625 -0.554969 -0.34375\nv 0.0234375 -0.554969 -0.34375\nv 0.03125 -0.554927 -0.34375\nv 0.0390625 -0.554921 -0.34375\nv 0.046875 -0.554723 -0.34375\nv 0.15625 -0.55473 -0.34375\nv 0.164062 -0.554816 -0.34375\nv 0.171875 -0.555028 -0.34375\nv 0.179688 -0.555106 -0.34375\nv 0.1875 -0.555124 -0.34375\nv 0.195312 -0.555193 -0.34375\nv 0.203125 -0.555028 -0.34375\nv 0.210938 -0.554805 -0.34375\nv 0.234375 -0.554737 -0.34375\nv 0.242188 -0.554893 -0.34375\nv 0.25 -0.555304 -0.34375\nv 0.257812 -0.555665 -0.34375\nv 0.265625 -0.556269 -0.34375\nv 0.273438 -0.556917 -0.34375\nv 0.28125 -0.557331 -0.34375\nv 0.289062 -0.557295 -0.34375\nv 0.296875 -0.556859 -0.34375\nv 0.304688 -0.556316 -0.34375\nv 0.3125 -0.555992 -0.34375\nv 0.320312 -0.557025 -0.34375\nv 0.328125 -0.557794 -0.34375\nv 0.335938 -0.558525 -0.34375\nv 0.34375 -0.559325 -0.34375\nv 0.356728 -0.5625 -0.34375\nv 0.351562 -0.560817 -0.34375\nv 0.504863 -0.5625 -0.34375\nv -0.330579 -0.554688 -0.34375\nv -0.157045 -0.554688 -0.34375\nv -0.15625 -0.55463 -0.34375\nv -0.15625 -0.554688 -0.342659\nv -0.148438 -0.553174 -0.34375\nv -0.140625 -0.55097 -0.34375\nv -0.132812 -0.548799 -0.34375\nv -0.125 -0.5477 -0.34375\nv -0.117188 -0.54818 -0.34375\nv -0.109375 -0.54853 -0.34375\nv -0.101562 -0.548806 -0.34375\nv -0.09375 -0.54907 -0.34375\nv -0.0859375 -0.549523 -0.34375\nv -0.078125 -0.550126 -0.34375\nv -0.0703125 -0.550829 -0.34375\nv -0.0625 -0.551539 -0.34375\nv -0.0546875 -0.55218 -0.34375\nv -0.046875 -0.552821 -0.34375\nv -0.0390625 -0.553303 -0.34375\nv -0.03125 -0.553796 -0.34375\nv -0.0187855 -0.554688 -0.34375\nv -0.0234375 -0.5544 -0.34375\nv -0.0234375 -0.554688 -0.340236\nv 0.0484977 -0.554688 -0.34375\nv 0.0546875 -0.554529 -0.34375\nv 0.0546875 -0.554688 -0.342623\nv 0.0625 -0.554545 -0.34375\nv 0.0625 -0.554688 -0.34285\nv 0.0703125 -0.55456 -0.34375\nv 0.0703125 -0.554688 -0.343019\nv 0.078125 -0.554547 -0.34375\nv 0.078125 -0.554688 -0.342953\nv 0.0859375 -0.554531 -0.34375\nv 0.0859375 -0.554688 -0.342855\nv 0.09375 -0.554413 -0.34375\nv 0.09375 -0.554688 -0.342197\nv 0.101562 -0.554276 -0.34375\nv 0.101562 -0.554688 -0.341406\nv 0.109375 -0.55424 -0.34375\nv 0.109375 -0.554688 -0.341007\nv 0.117188 -0.554038 -0.34375\nv 0.117188 -0.554688 -0.339521\nv 0.125 -0.553987 -0.34375\nv 0.125 -0.554688 -0.33925\nv 0.132812 -0.554081 -0.34375\nv 0.132812 -0.554688 -0.340076\nv 0.140625 -0.554221 -0.34375\nv 0.140625 -0.554688 -0.340993\nv 0.15467 -0.554688 -0.34375\nv 0.148438 -0.554486 -0.34375\nv 0.148438 -0.554688 -0.34254\nv 0.215719 -0.554688 -0.34375\nv 0.21875 -0.55461 -0.34375\nv 0.231363 -0.554688 -0.34375\nv 0.226562 -0.554609 -0.34375\nv 0.505324 -0.554688 -0.34375\nv -0.330532 -0.546875 -0.34375\nv 0.505576 -0.546875 -0.34375\nv -0.330548 -0.539062 -0.34375\nv 0.505808 -0.539062 -0.34375\nv -0.330608 -0.53125 -0.34375\nv 0.506095 -0.53125 -0.34375\nv -0.330732 -0.523438 -0.34375\nv 0.506463 -0.523438 -0.34375\nv -0.330887 -0.515625 -0.34375\nv 0.50667 -0.515625 -0.34375\nv -0.331046 -0.507812 -0.34375\nv 0.506597 -0.507812 -0.34375\nv -0.331085 -0.5 -0.34375\nv 0.506407 -0.5 -0.34375\nv -0.330932 -0.492188 -0.34375\nv 0.506283 -0.492188 -0.34375\nv -0.330937 -0.484375 -0.34375\nv -0.140625 -0.477322 -0.34375\nv -0.132812 -0.479894 -0.34375\nv -0.125 -0.479608 -0.34375\nv -0.117188 -0.477457 -0.34375\nv 0.304688 -0.477197 -0.34375\nv 0.3125 -0.478743 -0.34375\nv 0.320312 -0.478942 -0.34375\nv 0.328125 -0.476795 -0.34375\nv 0.50619 -0.484375 -0.34375\nv -0.331015 -0.476562 -0.34375\nv -0.203125 -0.469267 -0.34375\nv -0.195312 -0.4702 -0.34375\nv -0.1875 -0.471255 -0.34375\nv -0.179688 -0.471072 -0.34375\nv -0.171875 -0.470153 -0.34375\nv -0.164062 -0.470728 -0.34375\nv -0.15625 -0.472849 -0.34375\nv -0.14307 -0.476562 -0.34375\nv -0.148438 -0.47511 -0.34375\nv -0.113825 -0.476562 -0.34375\nv -0.109375 -0.475658 -0.34375\nv -0.109375 -0.476562 -0.336326\nv -0.101562 -0.474305 -0.34375\nv -0.09375 -0.473039 -0.34375\nv -0.0859375 -0.471762 -0.34375\nv -0.078125 -0.470529 -0.34375\nv -0.0703125 -0.469429 -0.34375\nv 0.164062 -0.468774 -0.34375\nv 0.171875 -0.469332 -0.34375\nv 0.179688 -0.469683 -0.34375\nv 0.1875 -0.469959 -0.34375\nv 0.195312 -0.470071 -0.34375\nv 0.203125 -0.470152 -0.34375\nv 0.210938 -0.470382 -0.34375\nv 0.21875 -0.470541 -0.34375\nv 0.226562 -0.470979 -0.34375\nv 0.234375 -0.471402 -0.34375\nv 0.242188 -0.471614 -0.34375\nv 0.25 -0.471578 -0.34375\nv 0.257812 -0.471739 -0.34375\nv 0.265625 -0.472503 -0.34375\nv 0.273438 -0.473139 -0.34375\nv 0.28125 -0.473499 -0.34375\nv 0.289062 -0.474129 -0.34375\nv 0.301659 -0.476562 -0.34375\nv 0.296875 -0.475522 -0.34375\nv 0.328794 -0.476562 -0.34375\nv 0.335938 -0.47396 -0.34375\nv 0.34375 -0.472727 -0.34375\nv 0.351562 -0.472248 -0.34375\nv 0.359375 -0.470402 -0.34375\nv 0.506168 -0.476562 -0.34375\nv -0.331154 -0.46875 -0.34375\nv -0.204509 -0.46875 -0.34375\nv -0.210938 -0.462721 -0.34375\nv -0.203125 -0.46875 -0.34197\nv -0.195312 -0.46875 -0.336659\nv -0.0655398 -0.46875 -0.34375\nv -0.0625 -0.468334 -0.34375\nv -0.0625 -0.46875 -0.336342\nv -0.0546875 -0.467508 -0.34375\nv -0.046875 -0.466745 -0.34375\nv -0.0390625 -0.465883 -0.34375\nv -0.03125 -0.465054 -0.34375\nv -0.0234375 -0.464114 -0.34375\nv -0.015625 -0.46331 -0.34375\nv -0.0078125 -0.463116 -0.34375\nv 0 -0.46366 -0.34375\nv 0.0078125 -0.46452 -0.34375\nv 0.015625 -0.465204 -0.34375\nv 0.0234375 -0.465564 -0.34375\nv 0.03125 -0.465967 -0.34375\nv 0.0390625 -0.466231 -0.34375\nv 0.046875 -0.466317 -0.34375\nv 0.0546875 -0.46642 -0.34375\nv 0.0625 -0.466566 -0.34375\nv 0.0703125 -0.466666 -0.34375\nv 0.078125 -0.466703 -0.34375\nv 0.0859375 -0.466637 -0.34375\nv 0.09375 -0.466611 -0.34375\nv 0.101562 -0.466625 -0.34375\nv 0.109375 -0.466576 -0.34375\nv 0.117188 -0.466519 -0.34375\nv 0.125 -0.466507 -0.34375\nv 0.132812 -0.466495 -0.34375\nv 0.140625 -0.466682 -0.34375\nv 0.148438 -0.466991 -0.34375\nv 0.163864 -0.46875 -0.34375\nv 0.15625 -0.467779 -0.34375\nv 0.164062 -0.46875 -0.343697\nv 0.171875 -0.46875 -0.342374\nv 0.179688 -0.46875 -0.341025\nv 0.1875 -0.46875 -0.338391\nv 0.362122 -0.46875 -0.34375\nv 0.359375 -0.46875 -0.339012\nv 0.367188 -0.463312 -0.34375\nv 0.506147 -0.46875 -0.34375\nv -0.331351 -0.460938 -0.34375\nv -0.211851 -0.460938 -0.34375\nv -0.210938 -0.460938 -0.34122\nv 0.369169 -0.460938 -0.34375\nv 0.367188 -0.460938 -0.339547\nv 0.506147 -0.460938 -0.34375\nv -0.331506 -0.453125 -0.34375\nv -0.214392 -0.453125 -0.34375\nv 0.372835 -0.453125 -0.34375\nv 0.506144 -0.453125 -0.34375\nv -0.331616 -0.445312 -0.34375\nv -0.215703 -0.445312 -0.34375\nv 0.374814 -0.445312 -0.34375\nv 0.375 -0.444303 -0.34375\nv 0.506202 -0.445312 -0.34375\nv -0.331549 -0.4375 -0.34375\nv -0.216173 -0.4375 -0.34375\nv 0.376199 -0.4375 -0.34375\nv 0.375 -0.4375 -0.340208\nv 0.50632 -0.4375 -0.34375\nv -0.331371 -0.429688 -0.34375\nv -0.216288 -0.429688 -0.34375\nv 0.377495 -0.429688 -0.34375\nv 0.506467 -0.429688 -0.34375\nv -0.331029 -0.421875 -0.34375\nv -0.216902 -0.421875 -0.34375\nv 0.379314 -0.421875 -0.34375\nv 0.5067 -0.421875 -0.34375\nv -0.330647 -0.414062 -0.34375\nv -0.217092 -0.414062 -0.34375\nv 0.38102 -0.414062 -0.34375\nv 0.50685 -0.414062 -0.34375\nv -0.330086 -0.40625 -0.34375\nv -0.217245 -0.40625 -0.34375\nv 0.382556 -0.40625 -0.34375\nv 0.506891 -0.40625 -0.34375\nv -0.329405 -0.398438 -0.34375\nv -0.216912 -0.398438 -0.34375\nv 0.382507 -0.398438 -0.34375\nv 0.507 -0.398438 -0.34375\nv -0.328704 -0.390625 -0.34375\nv -0.328125 -0.384106 -0.34375\nv -0.216358 -0.390625 -0.34375\nv 0.382608 -0.390625 -0.34375\nv 0.382812 -0.387827 -0.34375\nv 0.506906 -0.390625 -0.34375\nv -0.327997 -0.382812 -0.34375\nv -0.328125 -0.382812 -0.342952\nv -0.216018 -0.382812 -0.34375\nv 0.383249 -0.382812 -0.34375\nv 0.382812 -0.382812 -0.339974\nv 0.506781 -0.382812 -0.34375\nv -0.327143 -0.375 -0.34375\nv -0.328125 -0.375 -0.33804\nv -0.215806 -0.375 -0.34375\nv 0.383735 -0.375 -0.34375\nv 0.506559 -0.375 -0.34375\nv -0.326307 -0.367188 -0.34375\nv -0.215898 -0.367188 -0.34375\nv 0.38431 -0.367188 -0.34375\nv 0.506269 -0.367188 -0.34375\nv -0.325384 -0.359375 -0.34375\nv -0.216139 -0.359375 -0.34375\nv 0.384748 -0.359375 -0.34375\nv 0.506227 -0.359375 -0.34375\nv -0.324443 -0.351562 -0.34375\nv -0.216378 -0.351562 -0.34375\nv 0.38527 -0.351562 -0.34375\nv 0.50619 -0.351562 -0.34375\nv -0.323698 -0.34375 -0.34375\nv -0.216668 -0.34375 -0.34375\nv 0.385792 -0.34375 -0.34375\nv 0.506206 -0.34375 -0.34375\nv -0.323113 -0.335938 -0.34375\nv -0.216982 -0.335938 -0.34375\nv 0.386122 -0.335938 -0.34375\nv 0.506499 -0.335938 -0.34375\nv -0.322672 -0.328125 -0.34375\nv -0.217173 -0.328125 -0.34375\nv 0.386231 -0.328125 -0.34375\nv 0.506735 -0.328125 -0.34375\nv -0.322191 -0.320312 -0.34375\nv -0.217426 -0.320312 -0.34375\nv 0.386424 -0.320312 -0.34375\nv 0.506931 -0.320312 -0.34375\nv -0.321682 -0.3125 -0.34375\nv -0.217637 -0.3125 -0.34375\nv 0.386734 -0.3125 -0.34375\nv 0.507102 -0.3125 -0.34375\nv -0.321105 -0.304688 -0.34375\nv -0.21784 -0.304688 -0.34375\nv 0.387043 -0.304688 -0.34375\nv 0.50716 -0.304688 -0.34375\nv -0.320531 -0.296875 -0.34375\nv -0.320312 -0.292348 -0.34375\nv -0.218063 -0.296875 -0.34375\nv 0.387318 -0.296875 -0.34375\nv 0.507236 -0.296875 -0.34375\nv -0.320156 -0.289062 -0.34375\nv -0.320312 -0.289062 -0.342812\nv -0.218267 -0.289062 -0.34375\nv 0.387539 -0.289062 -0.34375\nv 0.50725 -0.289062 -0.34375\nv -0.319783 -0.28125 -0.34375\nv -0.320312 -0.28125 -0.340612\nv -0.218456 -0.28125 -0.34375\nv -0.21875 -0.273603 -0.34375\nv 0.388059 -0.28125 -0.34375\nv 0.507156 -0.28125 -0.34375\nv -0.319273 -0.273438 -0.34375\nv -0.320312 -0.273438 -0.337359\nv -0.218757 -0.273438 -0.34375\nv -0.21875 -0.273438 -0.343583\nv 0.388724 -0.273438 -0.34375\nv 0.506731 -0.273438 -0.34375\nv -0.318688 -0.265625 -0.34375\nv -0.219017 -0.265625 -0.34375\nv -0.21875 -0.259393 -0.34375\nv -0.21875 -0.265625 -0.338363\nv 0.389321 -0.265625 -0.34375\nv 0.506208 -0.265625 -0.34375\nv -0.318134 -0.257812 -0.34375\nv -0.218686 -0.257812 -0.34375\nv 0.389346 -0.257812 -0.34375\nv 0.50581 -0.257812 -0.34375\nv -0.317565 -0.25 -0.34375\nv -0.218239 -0.25 -0.34375\nv 0.389068 -0.25 -0.34375\nv 0.505714 -0.25 -0.34375\nv -0.317103 -0.242188 -0.34375\nv -0.217845 -0.242188 -0.34375\nv 0.388991 -0.242188 -0.34375\nv 0.505713 -0.242188 -0.34375\nv -0.316832 -0.234375 -0.34375\nv -0.217609 -0.234375 -0.34375\nv 0.389057 -0.234375 -0.34375\nv 0.505783 -0.234375 -0.34375\nv -0.316655 -0.226562 -0.34375\nv -0.217541 -0.226562 -0.34375\nv 0.389022 -0.226562 -0.34375\nv 0.505654 -0.226562 -0.34375\nv -0.316552 -0.21875 -0.34375\nv -0.21731 -0.21875 -0.34375\nv 0.389036 -0.21875 -0.34375\nv 0.505336 -0.21875 -0.34375\nv -0.316646 -0.210938 -0.34375\nv -0.216965 -0.210938 -0.34375\nv 0.389143 -0.210938 -0.34375\nv 0.50507 -0.210938 -0.34375\nv -0.316953 -0.203125 -0.34375\nv -0.217 -0.203125 -0.34375\nv 0.389615 -0.203125 -0.34375\nv 0.504968 -0.203125 -0.34375\nv -0.316673 -0.195312 -0.34375\nv -0.217276 -0.195312 -0.34375\nv 0.390201 -0.195312 -0.34375\nv 0.390625 -0.189204 -0.34375\nv 0.504788 -0.195312 -0.34375\nv -0.316134 -0.1875 -0.34375\nv -0.217556 -0.1875 -0.34375\nv 0.390741 -0.1875 -0.34375\nv 0.504742 -0.1875 -0.34375\nv -0.315752 -0.179688 -0.34375\nv -0.217942 -0.179688 -0.34375\nv 0.391146 -0.179688 -0.34375\nv 0.50435 -0.179688 -0.34375\nv -0.315256 -0.171875 -0.34375\nv -0.218296 -0.171875 -0.34375\nv 0.391435 -0.171875 -0.34375\nv 0.503653 -0.171875 -0.34375\nv -0.314779 -0.164062 -0.34375\nv -0.218449 -0.164062 -0.34375\nv 0.391426 -0.164062 -0.34375\nv 0.503247 -0.164062 -0.34375\nv -0.314332 -0.15625 -0.34375\nv -0.218307 -0.15625 -0.34375\nv 0.391089 -0.15625 -0.34375\nv 0.502894 -0.15625 -0.34375\nv -0.313642 -0.148438 -0.34375\nv -0.218022 -0.148438 -0.34375\nv 0.390768 -0.148438 -0.34375\nv 0.390625 -0.147387 -0.34375\nv 0.502774 -0.148438 -0.34375\nv -0.313279 -0.140625 -0.34375\nv -0.217604 -0.140625 -0.34375\nv 0.389726 -0.140625 -0.34375\nv 0.502555 -0.140625 -0.34375\nv -0.313079 -0.132812 -0.34375\nv -0.217278 -0.132812 -0.34375\nv 0.38835 -0.132812 -0.34375\nv 0.502217 -0.132812 -0.34375\nv -0.312859 -0.125 -0.34375\nv -0.3125 -0.118276 -0.34375\nv -0.216583 -0.125 -0.34375\nv 0.387244 -0.125 -0.34375\nv 0.501731 -0.125 -0.34375\nv -0.312444 -0.117188 -0.34375\nv -0.3125 -0.117188 -0.342779\nv -0.215799 -0.117188 -0.34375\nv 0.385984 -0.117188 -0.34375\nv 0.501466 -0.117188 -0.34375\nv -0.312155 -0.109375 -0.34375\nv -0.214602 -0.109375 -0.34375\nv 0.384126 -0.109375 -0.34375\nv 0.382812 -0.104959 -0.34375\nv 0.501344 -0.109375 -0.34375\nv -0.31187 -0.101562 -0.34375\nv -0.212846 -0.101562 -0.34375\nv -0.210938 -0.0960171 -0.34375\nv 0.381848 -0.101562 -0.34375\nv 0.382812 -0.101562 -0.336853\nv 0.501299 -0.101562 -0.34375\nv -0.312125 -0.09375 -0.34375\nv -0.3125 -0.0910128 -0.34375\nv -0.210056 -0.09375 -0.34375\nv -0.210938 -0.09375 -0.338333\nv 0.379219 -0.09375 -0.34375\nv 0.502106 -0.09375 -0.34375\nv -0.313263 -0.0859375 -0.34375\nv -0.206444 -0.0859375 -0.34375\nv -0.203125 -0.0810968 -0.34375\nv 0.376422 -0.0859375 -0.34375\nv 0.375 -0.0833252 -0.34375\nv 0.503175 -0.0859375 -0.34375\nv -0.314508 -0.078125 -0.34375\nv -0.198757 -0.078125 -0.34375\nv -0.195312 -0.0765028 -0.34375\nv -0.1875 -0.0749874 -0.34375\nv -0.179688 -0.0740155 -0.34375\nv -0.171875 -0.0732122 -0.34375\nv -0.164062 -0.0725621 -0.34375\nv -0.15625 -0.0713457 -0.34375\nv 0 -0.0705006 -0.34375\nv 0.0078125 -0.0707119 -0.34375\nv 0.015625 -0.0708962 -0.34375\nv 0.0234375 -0.0711415 -0.34375\nv 0.03125 -0.0712978 -0.34375\nv 0.0390625 -0.0714748 -0.34375\nv 0.046875 -0.0716559 -0.34375\nv 0.0546875 -0.0718611 -0.34375\nv 0.0625 -0.0720251 -0.34375\nv 0.0703125 -0.0721994 -0.34375\nv 0.078125 -0.0723336 -0.34375\nv 0.0859375 -0.0724385 -0.34375\nv 0.09375 -0.0722217 -0.34375\nv 0.101562 -0.0719848 -0.34375\nv 0.109375 -0.0717839 -0.34375\nv 0.117188 -0.0715963 -0.34375\nv 0.125 -0.0714881 -0.34375\nv 0.132812 -0.0713618 -0.34375\nv 0.140625 -0.0711777 -0.34375\nv 0.148438 -0.0710862 -0.34375\nv 0.15625 -0.0709854 -0.34375\nv 0.164062 -0.0708631 -0.34375\nv 0.171875 -0.0707658 -0.34375\nv 0.179688 -0.0706191 -0.34375\nv 0.1875 -0.0704818 -0.34375\nv 0.28125 -0.0703289 -0.34375\nv 0.289062 -0.0706556 -0.34375\nv 0.296875 -0.0708322 -0.34375\nv 0.304688 -0.0709677 -0.34375\nv 0.3125 -0.0712337 -0.34375\nv 0.320312 -0.0716449 -0.34375\nv 0.328125 -0.0720395 -0.34375\nv 0.335938 -0.0723521 -0.34375\nv 0.34375 -0.0726782 -0.34375\nv 0.351562 -0.0729222 -0.34375\nv 0.359375 -0.0738236 -0.34375\nv 0.370432 -0.078125 -0.34375\nv 0.367188 -0.0758262 -0.34375\nv 0.504414 -0.078125 -0.34375\nv -0.315631 -0.0703125 -0.34375\nv -0.150742 -0.0703125 -0.34375\nv -0.148438 -0.0697031 -0.34375\nv -0.140625 -0.0681233 -0.34375\nv -0.132812 -0.0679832 -0.34375\nv -0.125 -0.0679493 -0.34375\nv -0.117188 -0.0679677 -0.34375\nv -0.109375 -0.068085 -0.34375\nv -0.101562 -0.0682074 -0.34375\nv -0.09375 -0.0684242 -0.34375\nv -0.0859375 -0.06869 -0.34375\nv -0.078125 -0.0689897 -0.34375\nv -0.0703125 -0.0691803 -0.34375\nv -0.0625 -0.0692249 -0.34375\nv -0.0546875 -0.0691918 -0.34375\nv -0.046875 -0.0692385 -0.34375\nv -0.0390625 -0.0695742 -0.34375\nv -0.03125 -0.0699146 -0.34375\nv -0.0234375 -0.0700485 -0.34375\nv -0.015625 -0.0700554 -0.34375\nv -0.00655875 -0.0703125 -0.34375\nv -0.0078125 -0.0702639 -0.34375\nv 0 -0.0703125 -0.342698\nv 0.0078125 -0.0703125 -0.34148\nv 0.015625 -0.0703125 -0.340313\nv 0.0234375 -0.0703125 -0.338841\nv 0.03125 -0.0703125 -0.337737\nv 0.0390625 -0.0703125 -0.336734\nv 0.101562 -0.0703125 -0.336993\nv 0.109375 -0.0703125 -0.338038\nv 0.117188 -0.0703125 -0.33893\nv 0.125 -0.0703125 -0.339543\nv 0.132812 -0.0703125 -0.340114\nv 0.140625 -0.0703125 -0.340684\nv 0.148438 -0.0703125 -0.340941\nv 0.15625 -0.0703125 -0.341313\nv 0.164062 -0.0703125 -0.341772\nv 0.171875 -0.0703125 -0.342143\nv 0.179688 -0.0703125 -0.342643\nv 0.193632 -0.0703125 -0.34375\nv 0.1875 -0.0703125 -0.343138\nv 0.195312 -0.0702631 -0.34375\nv 0.203125 -0.0701332 -0.34375\nv 0.210938 -0.0700588 -0.34375\nv 0.21875 -0.0699894 -0.34375\nv 0.226562 -0.0698967 -0.34375\nv 0.234375 -0.0697555 -0.34375\nv 0.242188 -0.0696737 -0.34375\nv 0.25 -0.0695884 -0.34375\nv 0.257812 -0.0695986 -0.34375\nv 0.265625 -0.0697926 -0.34375\nv 0.280812 -0.0703125 -0.34375\nv 0.273438 -0.0700095 -0.34375\nv 0.28125 -0.0703125 -0.343693\nv 0.289062 -0.0703125 -0.342683\nv 0.296875 -0.0703125 -0.34223\nv 0.304688 -0.0703125 -0.341911\nv 0.3125 -0.0703125 -0.341318\nv 0.320312 -0.0703125 -0.340406\nv 0.328125 -0.0703125 -0.339276\nv 0.335938 -0.0703125 -0.338059\nv 0.34375 -0.0703125 -0.336752\nv 0.505704 -0.0703125 -0.34375\nv -0.315998 -0.0625 -0.34375\nv 0.50693 -0.0625 -0.34375\nv -0.315936 -0.0546875 -0.34375\nv 0.507296 -0.0546875 -0.34375\nv -0.315618 -0.046875 -0.34375\nv 0.506931 -0.046875 -0.34375\nv -0.315385 -0.0390625 -0.34375\nv 0.50637 -0.0390625 -0.34375\nv -0.315297 -0.03125 -0.34375\nv 0.505576 -0.03125 -0.34375\nv -0.314975 -0.0234375 -0.34375\nv 0.505104 -0.0234375 -0.34375\nv -0.315014 -0.015625 -0.34375\nv 0.504665 -0.015625 -0.34375\nv -0.31516 -0.0078125 -0.34375\nv 0.504313 -0.0078125 -0.34375\nv -0.314788 0 -0.34375\nv 0.50491 0 -0.34375\nv -0.314457 0.0078125 -0.34375\nv 0.504894 0.0078125 -0.34375\nv -0.314258 0.015625 -0.34375\nv 0.504517 0.015625 -0.34375\nv -0.314107 0.0234375 -0.34375\nv 0.503916 0.0234375 -0.34375\nv -0.31406 0.03125 -0.34375\nv 0.502501 0.03125 -0.34375\nv 0.5 0.0390492 -0.34375\nv -0.31394 0.0390625 -0.34375\nv 0.499995 0.0390625 -0.34375\nv 0.5 0.0390625 -0.343682\nv -0.31368 0.046875 -0.34375\nv 0.496348 0.046875 -0.34375\nv 0.492188 0.0515057 -0.34375\nv -0.312515 0.0546875 -0.34375\nv -0.3125 0.0547823 -0.34375\nv -0.3125 0.0546875 -0.343657\nv 0.488221 0.0546875 -0.34375\nv 0.484375 0.0580426 -0.34375\nv -0.311246 0.0625 -0.34375\nv -0.03125 0.070165 -0.34375\nv -0.0234375 0.0698131 -0.34375\nv -0.015625 0.0696495 -0.34375\nv -0.0078125 0.0696469 -0.34375\nv 0 0.0698849 -0.34375\nv 0.0078125 0.0700702 -0.34375\nv 0.015625 0.0701519 -0.34375\nv 0.0234375 0.0702446 -0.34375\nv 0.03125 0.0703012 -0.34375\nv 0.0625 0.0702523 -0.34375\nv 0.0703125 0.0702148 -0.34375\nv 0.078125 0.0702025 -0.34375\nv 0.0859375 0.0701562 -0.34375\nv 0.09375 0.0701801 -0.34375\nv 0.101562 0.0702228 -0.34375\nv 0.109375 0.0702479 -0.34375\nv 0.117188 0.0702777 -0.34375\nv 0.3125 0.0698776 -0.34375\nv 0.320312 0.0693603 -0.34375\nv 0.328125 0.0689519 -0.34375\nv 0.335938 0.0686009 -0.34375\nv 0.34375 0.0682429 -0.34375\nv 0.351562 0.0679095 -0.34375\nv 0.359375 0.0675775 -0.34375\nv 0.367188 0.0673332 -0.34375\nv 0.375 0.0669892 -0.34375\nv 0.382812 0.0668118 -0.34375\nv 0.390625 0.0667584 -0.34375\nv 0.398438 0.0666537 -0.34375\nv 0.40625 0.066548 -0.34375\nv 0.414062 0.0663639 -0.34375\nv 0.421875 0.0661949 -0.34375\nv 0.429688 0.0661438 -0.34375\nv 0.4375 0.0661678 -0.34375\nv 0.445312 0.0669124 -0.34375\nv 0.453125 0.0669238 -0.34375\nv 0.460938 0.0659631 -0.34375\nv 0.46875 0.0648272 -0.34375\nv 0.477715 0.0625 -0.34375\nv 0.476562 0.0630904 -0.34375\nv 0.476562 0.0625 -0.33987\nv -0.310616 0.0703125 -0.34375\nv -0.195312 0.0777232 -0.34375\nv -0.1875 0.0753223 -0.34375\nv -0.179688 0.0739926 -0.34375\nv -0.171875 0.0731153 -0.34375\nv -0.164062 0.0725115 -0.34375\nv -0.15625 0.0721757 -0.34375\nv -0.148438 0.0718236 -0.34375\nv -0.140625 0.071712 -0.34375\nv -0.132812 0.0717015 -0.34375\nv -0.125 0.0716573 -0.34375\nv -0.117188 0.0716349 -0.34375\nv -0.109375 0.0715894 -0.34375\nv -0.101562 0.0715581 -0.34375\nv -0.09375 0.0714742 -0.34375\nv -0.0859375 0.0714474 -0.34375\nv -0.078125 0.071336 -0.34375\nv -0.0703125 0.071123 -0.34375\nv -0.0625 0.0708628 -0.34375\nv -0.0546875 0.0706875 -0.34375\nv -0.046875 0.0705603 -0.34375\nv -0.0344362 0.0703125 -0.34375\nv -0.0390625 0.0704577 -0.34375\nv -0.03125 0.0703125 -0.342374\nv -0.0234375 0.0703125 -0.33965\nv -0.015625 0.0703125 -0.338707\nv -0.0078125 0.0703125 -0.338755\nv 0 0.0703125 -0.340081\nv 0.0078125 0.0703125 -0.34173\nv 0.015625 0.0703125 -0.342531\nv 0.0234375 0.0703125 -0.343215\nv 0.0329847 0.0703125 -0.34375\nv 0.03125 0.0703125 -0.343648\nv 0.0390625 0.0703372 -0.34375\nv 0.046875 0.0703881 -0.34375\nv 0.0594697 0.0703125 -0.34375\nv 0.0546875 0.070369 -0.34375\nv 0.0625 0.0703125 -0.343049\nv 0.0703125 0.0703125 -0.342533\nv 0.078125 0.0703125 -0.342226\nv 0.0859375 0.0703125 -0.34134\nv 0.09375 0.0703125 -0.341354\nv 0.101562 0.0703125 -0.341893\nv 0.109375 0.0703125 -0.342088\nv 0.124348 0.0703125 -0.34375\nv 0.117188 0.0703125 -0.342763\nv 0.125 0.0703146 -0.34375\nv 0.132812 0.0703555 -0.34375\nv 0.140625 0.0704616 -0.34375\nv 0.148438 0.0706039 -0.34375\nv 0.15625 0.0707042 -0.34375\nv 0.164062 0.0707887 -0.34375\nv 0.171875 0.0708863 -0.34375\nv 0.179688 0.0709572 -0.34375\nv 0.1875 0.0710269 -0.34375\nv 0.195312 0.0710551 -0.34375\nv 0.203125 0.0710664 -0.34375\nv 0.210938 0.0710267 -0.34375\nv 0.21875 0.0709312 -0.34375\nv 0.21875 0.0703125 -0.336585\nv 0.226562 0.0708619 -0.34375\nv 0.226562 0.0703125 -0.336503\nv 0.234375 0.070816 -0.34375\nv 0.242188 0.0707928 -0.34375\nv 0.25 0.0707806 -0.34375\nv 0.257812 0.0708648 -0.34375\nv 0.265625 0.0708983 -0.34375\nv 0.273438 0.0708885 -0.34375\nv 0.28125 0.0709875 -0.34375\nv 0.289062 0.0709526 -0.34375\nv 0.296875 0.0707855 -0.34375\nv 0.296875 0.0703125 -0.337525\nv 0.306036 0.0703125 -0.34375\nv 0.304688 0.0703898 -0.34375\nv 0.304688 0.0703125 -0.342559\nv -0.310566 0.078125 -0.34375\nv -0.19649 0.078125 -0.34375\nv -0.203125 0.0813136 -0.34375\nv -0.195312 0.078125 -0.341199\nv -0.311118 0.0859375 -0.34375\nv -0.208554 0.0859375 -0.34375\nv -0.210938 0.0883848 -0.34375\nv -0.311527 0.09375 -0.34375\nv -0.214603 0.09375 -0.34375\nv -0.311995 0.101562 -0.34375\nv -0.218257 0.101562 -0.34375\nv -0.21875 0.103533 -0.34375\nv -0.312497 0.109375 -0.34375\nv -0.3125 0.109418 -0.34375\nv -0.3125 0.109375 -0.342251\nv -0.220003 0.109375 -0.34375\nv -0.31307 0.117188 -0.34375\nv -0.221047 0.117188 -0.34375\nv -0.313614 0.125 -0.34375\nv -0.221862 0.125 -0.34375\nv -0.31414 0.132812 -0.34375\nv -0.222667 0.132812 -0.34375\nv -0.314785 0.140625 -0.34375\nv -0.223255 0.140625 -0.34375\nv -0.315301 0.148438 -0.34375\nv -0.223707 0.148438 -0.34375\nv -0.315932 0.15625 -0.34375\nv -0.224131 0.15625 -0.34375\nv -0.316482 0.164062 -0.34375\nv -0.224303 0.164062 -0.34375\nv -0.316894 0.171875 -0.34375\nv -0.224079 0.171875 -0.34375\nv -0.317245 0.179688 -0.34375\nv -0.224014 0.179688 -0.34375\nv -0.317676 0.1875 -0.34375\nv -0.22403 0.1875 -0.34375\nv -0.318214 0.195312 -0.34375\nv -0.223664 0.195312 -0.34375\nv -0.318874 0.203125 -0.34375\nv -0.222978 0.203125 -0.34375\nv -0.319685 0.210938 -0.34375\nv -0.320312 0.216024 -0.34375\nv -0.222519 0.210938 -0.34375\nv -0.320618 0.21875 -0.34375\nv -0.320312 0.21875 -0.341065\nv -0.222154 0.21875 -0.34375\nv -0.321491 0.226562 -0.34375\nv -0.221905 0.226562 -0.34375\nv -0.322217 0.234375 -0.34375\nv -0.221962 0.234375 -0.34375\nv -0.322816 0.242188 -0.34375\nv -0.222383 0.242188 -0.34375\nv -0.323477 0.25 -0.34375\nv -0.222955 0.25 -0.34375\nv -0.324305 0.257812 -0.34375\nv -0.223443 0.257812 -0.34375\nv -0.325134 0.265625 -0.34375\nv -0.223818 0.265625 -0.34375\nv -0.325865 0.273438 -0.34375\nv -0.224268 0.273438 -0.34375\nv -0.326539 0.28125 -0.34375\nv -0.224866 0.28125 -0.34375\nv -0.327203 0.289062 -0.34375\nv -0.225464 0.289062 -0.34375\nv -0.327777 0.296875 -0.34375\nv -0.226057 0.296875 -0.34375\nv -0.226562 0.302399 -0.34375\nv -0.328075 0.304688 -0.34375\nv -0.328125 0.306001 -0.34375\nv -0.226827 0.304688 -0.34375\nv -0.226562 0.304688 -0.341914\nv -0.328342 0.3125 -0.34375\nv -0.328125 0.3125 -0.342917\nv -0.22763 0.3125 -0.34375\nv -0.328546 0.320312 -0.34375\nv -0.328125 0.320312 -0.342073\nv -0.228339 0.320312 -0.34375\nv -0.328608 0.328125 -0.34375\nv -0.328125 0.328125 -0.341803\nv -0.229359 0.328125 -0.34375\nv -0.328764 0.335938 -0.34375\nv -0.328125 0.335938 -0.341154\nv -0.230576 0.335938 -0.34375\nv -0.329042 0.34375 -0.34375\nv -0.328125 0.34375 -0.339983\nv -0.231474 0.34375 -0.34375\nv -0.329519 0.351562 -0.34375\nv -0.328125 0.351562 -0.33817\nv -0.232287 0.351562 -0.34375\nv -0.33 0.359375 -0.34375\nv -0.328125 0.359375 -0.336269\nv -0.232944 0.359375 -0.34375\nv -0.330479 0.367188 -0.34375\nv -0.233583 0.367188 -0.34375\nv -0.330946 0.375 -0.34375\nv -0.234096 0.375 -0.34375\nv -0.234375 0.3795 -0.34375\nv -0.33134 0.382812 -0.34375\nv -0.234569 0.382812 -0.34375\nv -0.234375 0.382812 -0.342005\nv -0.331727 0.390625 -0.34375\nv -0.234934 0.390625 -0.34375\nv -0.234375 0.390625 -0.338047\nv -0.332112 0.398438 -0.34375\nv -0.235126 0.398438 -0.34375\nv -0.332481 0.40625 -0.34375\nv -0.235401 0.40625 -0.34375\nv -0.332827 0.414062 -0.34375\nv -0.235551 0.414062 -0.34375\nv -0.333121 0.421875 -0.34375\nv -0.235658 0.421875 -0.34375\nv -0.333417 0.429688 -0.34375\nv -0.235873 0.429688 -0.34375\nv -0.333693 0.4375 -0.34375\nv -0.236206 0.4375 -0.34375\nv -0.334018 0.445312 -0.34375\nv -0.236483 0.445312 -0.34375\nv -0.334299 0.453125 -0.34375\nv -0.236736 0.453125 -0.34375\nv -0.334654 0.460938 -0.34375\nv -0.237016 0.460938 -0.34375\nv -0.334987 0.46875 -0.34375\nv -0.237365 0.46875 -0.34375\nv -0.335296 0.476562 -0.34375\nv -0.237721 0.476562 -0.34375\nv -0.335695 0.484375 -0.34375\nv -0.335938 0.486927 -0.34375\nv -0.238123 0.484375 -0.34375\nv -0.336434 0.492188 -0.34375\nv -0.335938 0.492188 -0.342151\nv -0.238564 0.492188 -0.34375\nv -0.337055 0.5 -0.34375\nv -0.335938 0.5 -0.340165\nv -0.239032 0.5 -0.34375\nv -0.33762 0.507812 -0.34375\nv -0.335938 0.507812 -0.338346\nv -0.239453 0.507812 -0.34375\nv -0.338185 0.515625 -0.34375\nv -0.335938 0.515625 -0.336461\nv -0.239875 0.515625 -0.34375\nv -0.338793 0.523438 -0.34375\nv -0.240385 0.523438 -0.34375\nv -0.339335 0.53125 -0.34375\nv -0.240784 0.53125 -0.34375\nv -0.339901 0.539062 -0.34375\nv -0.241266 0.539062 -0.34375\nv -0.340527 0.546875 -0.34375\nv -0.241728 0.546875 -0.34375\nv -0.242188 0.554228 -0.34375\nv -0.341173 0.554688 -0.34375\nv -0.24222 0.554688 -0.34375\nv -0.242188 0.554688 -0.342032\nv -0.341834 0.5625 -0.34375\nv -0.242841 0.5625 -0.34375\nv -0.342499 0.570312 -0.34375\nv -0.24348 0.570312 -0.34375\nv -0.342961 0.578125 -0.34375\nv -0.24405 0.578125 -0.34375\nv -0.343617 0.585938 -0.34375\nv -0.34375 0.587431 -0.34375\nv -0.244613 0.585938 -0.34375\nv -0.344323 0.59375 -0.34375\nv -0.34375 0.59375 -0.341781\nv -0.245149 0.59375 -0.34375\nv -0.344985 0.601562 -0.34375\nv -0.34375 0.601562 -0.339449\nv -0.245836 0.601562 -0.34375\nv -0.345576 0.609375 -0.34375\nv -0.34375 0.609375 -0.336578\nv -0.246629 0.609375 -0.34375\nv -0.346299 0.617188 -0.34375\nv -0.247565 0.617188 -0.34375\nv -0.346956 0.625 -0.34375\nv -0.248629 0.625 -0.34375\nv -0.347237 0.632812 -0.34375\nv -0.249475 0.632812 -0.34375\nv -0.25 0.63962 -0.34375\nv -0.347392 0.640625 -0.34375\nv -0.250078 0.640625 -0.34375\nv -0.347563 0.648438 -0.34375\nv -0.250531 0.648438 -0.34375\nv -0.347927 0.65625 -0.34375\nv -0.250947 0.65625 -0.34375\nv -0.348394 0.664062 -0.34375\nv -0.251291 0.664062 -0.34375\nv -0.348813 0.671875 -0.34375\nv -0.251536 0.671875 -0.34375\nv -0.349134 0.679688 -0.34375\nv -0.252121 0.679688 -0.34375\nv -0.349471 0.6875 -0.34375\nv -0.252857 0.6875 -0.34375\nv -0.349872 0.695312 -0.34375\nv -0.253927 0.695312 -0.34375\nv -0.350303 0.703125 -0.34375\nv -0.255237 0.703125 -0.34375\nv -0.351 0.710938 -0.34375\nv -0.351562 0.716817 -0.34375\nv -0.256382 0.710938 -0.34375\nv -0.351742 0.71875 -0.34375\nv -0.351562 0.71875 -0.343\nv -0.257181 0.71875 -0.34375\nv -0.257812 0.722677 -0.34375\nv -0.352015 0.726562 -0.34375\nv -0.351562 0.726562 -0.341833\nv -0.258406 0.726562 -0.34375\nv -0.352013 0.734375 -0.34375\nv -0.351562 0.73961 -0.34375\nv -0.351562 0.734375 -0.342135\nv -0.259529 0.734375 -0.34375\nv -0.351291 0.742188 -0.34375\nv -0.261156 0.742188 -0.34375\nv -0.349791 0.75 -0.34375\nv -0.263534 0.75 -0.34375\nv -0.265625 0.755087 -0.34375\nv -0.348901 0.757812 -0.34375\nv -0.26683 0.757812 -0.34375\nv -0.349227 0.765625 -0.34375\nv -0.271152 0.765625 -0.34375\nv -0.273438 0.769855 -0.34375\nv -0.349737 0.773438 -0.34375\nv -0.275287 0.773438 -0.34375\nv -0.350122 0.78125 -0.34375\nv -0.278748 0.78125 -0.34375\nv -0.28125 0.787347 -0.34375\nv -0.28125 0.78125 -0.33634\nv -0.350685 0.789062 -0.34375\nv -0.351562 0.795517 -0.34375\nv -0.281943 0.789062 -0.34375\nv -0.351743 0.796875 -0.34375\nv -0.351562 0.801645 -0.34375\nv -0.351562 0.796875 -0.343314\nv -0.284441 0.796875 -0.34375\nv -0.351397 0.804688 -0.34375\nv -0.351562 0.809282 -0.34375\nv -0.286759 0.804688 -0.34375\nv -0.289062 0.810056 -0.34375\nv -0.289062 0.804688 -0.339147\nv -0.351711 0.8125 -0.34375\nv -0.351562 0.8125 -0.343348\nv -0.290174 0.8125 -0.34375\nv -0.353102 0.820312 -0.34375\nv -0.351562 0.820312 -0.33899\nv -0.293029 0.820312 -0.34375\nv -0.296875 0.820312 -0.33681\nv -0.353878 0.828125 -0.34375\nv -0.294949 0.828125 -0.34375\nv -0.296875 0.828125 -0.340341\nv -0.353228 0.835938 -0.34375\nv -0.295342 0.835938 -0.34375\nv -0.296875 0.835938 -0.340905\nv -0.351667 0.84375 -0.34375\nv -0.351562 0.843911 -0.34375\nv -0.351562 0.84375 -0.343219\nv -0.295671 0.84375 -0.34375\nv -0.296875 0.850166 -0.34375\nv -0.296875 0.84375 -0.341203\nv -0.34501 0.851562 -0.34375\nv -0.34375 0.852367 -0.34375\nv -0.335938 0.854077 -0.34375\nv -0.328125 0.858441 -0.34375\nv -0.297226 0.851562 -0.34375\nv -0.326749 0.859375 -0.34375\nv -0.320312 0.862505 -0.34375\nv -0.3125 0.86443 -0.34375\nv -0.301525 0.859375 -0.34375\nv -0.304688 0.862422 -0.34375\nv -0.304688 0.859375 -0.336595\nv -0.304688 -0.734465 -0.335938\nv -0.296875 -0.735353 -0.335938\nv -0.289062 -0.735551 -0.335938\nv -0.28125 -0.73551 -0.335938\nv -0.273438 -0.734666 -0.335938\nv 0.40625 -0.734813 -0.335938\nv 0.414062 -0.736837 -0.335938\nv 0.421875 -0.73809 -0.335938\nv 0.429688 -0.738739 -0.335938\nv 0.4375 -0.738923 -0.335938\nv 0.445312 -0.739021 -0.335938\nv 0.453125 -0.738553 -0.335938\nv 0.460938 -0.737778 -0.335938\nv 0.46875 -0.736716 -0.335938\nv 0.476562 -0.735086 -0.335938\nv -0.335938 -0.729273 -0.335938\nv -0.328125 -0.731775 -0.335938\nv -0.320312 -0.732808 -0.335938\nv -0.305512 -0.734375 -0.335938\nv -0.3125 -0.73356 -0.335938\nv -0.304688 -0.734375 -0.335444\nv -0.296875 -0.734375 -0.331426\nv -0.289062 -0.734375 -0.329753\nv -0.28125 -0.734375 -0.328155\nv -0.272269 -0.734375 -0.335938\nv -0.265625 -0.732643 -0.335938\nv -0.257812 -0.730133 -0.335938\nv 0.405236 -0.734375 -0.335938\nv 0.398438 -0.730946 -0.335938\nv 0.480421 -0.734375 -0.335938\nv 0.476562 -0.734375 -0.332199\nv 0.484375 -0.733482 -0.335938\nv 0.492188 -0.73094 -0.335938\nv 0.5 -0.726588 -0.335938\nv -0.338879 -0.726562 -0.335938\nv -0.335938 -0.726562 -0.328764\nv -0.250708 -0.726562 -0.335938\nv -0.25 -0.726059 -0.335938\nv -0.25 -0.726562 -0.333566\nv 0.391758 -0.726562 -0.335938\nv 0.390625 -0.724733 -0.335938\nv 0.500028 -0.726562 -0.335938\nv 0.5 -0.726562 -0.335819\nv -0.342057 -0.71875 -0.335938\nv -0.242756 -0.71875 -0.335938\nv -0.242188 -0.717829 -0.335938\nv -0.242188 -0.71875 -0.329671\nv 0.387965 -0.71875 -0.335938\nv 0.506008 -0.71875 -0.335938\nv -0.343279 -0.710938 -0.335938\nv -0.237996 -0.710938 -0.335938\nv -0.234375 -0.704547 -0.335938\nv 0.385134 -0.710938 -0.335938\nv 0.382812 -0.704768 -0.335938\nv 0.507452 -0.710938 -0.335938\nv -0.34361 -0.703125 -0.335938\nv -0.23364 -0.703125 -0.335938\nv -0.234375 -0.703125 -0.331676\nv 0.382205 -0.703125 -0.335938\nv 0.50722 -0.703125 -0.335938\nv -0.343158 -0.695312 -0.335938\nv -0.229443 -0.695312 -0.335938\nv 0.380441 -0.695312 -0.335938\nv 0.507241 -0.695312 -0.335938\nv -0.342008 -0.6875 -0.335938\nv -0.22657 -0.6875 -0.335938\nv -0.226562 -0.687463 -0.335938\nv 0.380156 -0.6875 -0.335938\nv 0.507264 -0.6875 -0.335938\nv -0.340823 -0.679688 -0.335938\nv -0.225009 -0.679688 -0.335938\nv 0.38005 -0.679688 -0.335938\nv 0.507286 -0.679688 -0.335938\nv -0.339757 -0.671875 -0.335938\nv -0.223172 -0.671875 -0.335938\nv 0.379981 -0.671875 -0.335938\nv 0.507272 -0.671875 -0.335938\nv -0.33872 -0.664062 -0.335938\nv -0.221529 -0.664062 -0.335938\nv 0.379792 -0.664062 -0.335938\nv 0.507212 -0.664062 -0.335938\nv -0.337707 -0.65625 -0.335938\nv -0.220293 -0.65625 -0.335938\nv 0.379913 -0.65625 -0.335938\nv 0.507447 -0.65625 -0.335938\nv -0.336656 -0.648438 -0.335938\nv -0.335938 -0.643862 -0.335938\nv -0.219193 -0.648438 -0.335938\nv -0.21875 -0.643425 -0.335938\nv 0.380022 -0.648438 -0.335938\nv 0.507389 -0.648438 -0.335938\nv -0.335391 -0.640625 -0.335938\nv -0.335938 -0.640625 -0.328426\nv -0.218514 -0.640625 -0.335938\nv -0.21875 -0.640625 -0.335047\nv 0.380371 -0.640625 -0.335938\nv 0.506952 -0.640625 -0.335938\nv -0.334441 -0.632812 -0.335938\nv -0.217977 -0.632812 -0.335938\nv -0.21875 -0.632812 -0.333421\nv 0.380276 -0.632812 -0.335938\nv 0.506419 -0.632812 -0.335938\nv -0.333561 -0.625 -0.335938\nv -0.217475 -0.625 -0.335938\nv -0.21875 -0.625 -0.332166\nv 0.380064 -0.625 -0.335938\nv 0.5057 -0.625 -0.335938\nv -0.332843 -0.617188 -0.335938\nv -0.217082 -0.617188 -0.335938\nv -0.21875 -0.617188 -0.331029\nv 0.379742 -0.617188 -0.335938\nv 0.505053 -0.617188 -0.335938\nv -0.332754 -0.609375 -0.335938\nv -0.21661 -0.609375 -0.335938\nv -0.21875 -0.609375 -0.329719\nv 0.379276 -0.609375 -0.335938\nv 0.504703 -0.609375 -0.335938\nv -0.332563 -0.601562 -0.335938\nv -0.216272 -0.601562 -0.335938\nv -0.21875 -0.601562 -0.328351\nv 0.378496 -0.601562 -0.335938\nv 0.504374 -0.601562 -0.335938\nv -0.332196 -0.59375 -0.335938\nv -0.215634 -0.59375 -0.335938\nv 0.377457 -0.59375 -0.335938\nv 0.50408 -0.59375 -0.335938\nv -0.331894 -0.585938 -0.335938\nv -0.214785 -0.585938 -0.335938\nv 0.376072 -0.585938 -0.335938\nv 0.375 -0.580499 -0.335938\nv 0.504017 -0.585938 -0.335938\nv -0.331617 -0.578125 -0.335938\nv -0.213772 -0.578125 -0.335938\nv 0.374446 -0.578125 -0.335938\nv 0.375 -0.578125 -0.335325\nv 0.504381 -0.578125 -0.335938\nv -0.33137 -0.570312 -0.335938\nv -0.211831 -0.570312 -0.335938\nv -0.210938 -0.569268 -0.335938\nv -0.203125 -0.565114 -0.335938\nv 0.359375 -0.564849 -0.335938\nv 0.370027 -0.570312 -0.335938\nv 0.367188 -0.567957 -0.335938\nv 0.375 -0.570312 -0.331384\nv 0.504837 -0.570312 -0.335938\nv -0.331182 -0.5625 -0.335938\nv -0.196621 -0.5625 -0.335938\nv -0.195312 -0.562036 -0.335938\nv -0.1875 -0.559533 -0.335938\nv -0.179688 -0.557548 -0.335938\nv -0.171875 -0.556696 -0.335938\nv -0.164062 -0.556493 -0.335938\nv -0.15625 -0.555024 -0.335938\nv -0.0234375 -0.554986 -0.335938\nv -0.015625 -0.555396 -0.335938\nv -0.0078125 -0.555895 -0.335938\nv 0 -0.556111 -0.335938\nv 0.0078125 -0.556099 -0.335938\nv 0.015625 -0.555908 -0.335938\nv 0.0234375 -0.555842 -0.335938\nv 0.03125 -0.555816 -0.335938\nv 0.0390625 -0.555775 -0.335938\nv 0.046875 -0.55558 -0.335938\nv 0.0546875 -0.555503 -0.335938\nv 0.0625 -0.55564 -0.335938\nv 0.0703125 -0.55576 -0.335938\nv 0.078125 -0.555761 -0.335938\nv 0.0859375 -0.555741 -0.335938\nv 0.09375 -0.555661 -0.335938\nv 0.101562 -0.555528 -0.335938\nv 0.109375 -0.555395 -0.335938\nv 0.117188 -0.555171 -0.335938\nv 0.125 -0.555142 -0.335938\nv 0.132812 -0.555295 -0.335938\nv 0.140625 -0.555445 -0.335938\nv 0.148438 -0.555638 -0.335938\nv 0.15625 -0.555789 -0.335938\nv 0.164062 -0.55582 -0.335938\nv 0.171875 -0.555625 -0.335938\nv 0.179688 -0.55529 -0.335938\nv 0.1875 -0.555032 -0.335938\nv 0.195312 -0.554969 -0.335938\nv 0.203125 -0.554866 -0.335938\nv 0.210938 -0.554737 -0.335938\nv 0.234375 -0.554866 -0.335938\nv 0.242188 -0.555148 -0.335938\nv 0.25 -0.55525 -0.335938\nv 0.257812 -0.555616 -0.335938\nv 0.265625 -0.556433 -0.335938\nv 0.273438 -0.557085 -0.335938\nv 0.28125 -0.556969 -0.335938\nv 0.289062 -0.556899 -0.335938\nv 0.296875 -0.55686 -0.335938\nv 0.304688 -0.556844 -0.335938\nv 0.3125 -0.556707 -0.335938\nv 0.320312 -0.557556 -0.335938\nv 0.328125 -0.559161 -0.335938\nv 0.335938 -0.560316 -0.335938\nv 0.34375 -0.560792 -0.335938\nv 0.352008 -0.5625 -0.335938\nv 0.351562 -0.562376 -0.335938\nv 0.359375 -0.5625 -0.33284\nv 0.367188 -0.5625 -0.329953\nv 0.505017 -0.5625 -0.335938\nv -0.331202 -0.554688 -0.335938\nv -0.154751 -0.554688 -0.335938\nv -0.148438 -0.553274 -0.335938\nv -0.140625 -0.5514 -0.335938\nv -0.132812 -0.548981 -0.335938\nv -0.125 -0.547667 -0.335938\nv -0.117188 -0.548042 -0.335938\nv -0.109375 -0.548374 -0.335938\nv -0.101562 -0.548756 -0.335938\nv -0.09375 -0.549148 -0.335938\nv -0.0859375 -0.549642 -0.335938\nv -0.078125 -0.550346 -0.335938\nv -0.0703125 -0.551159 -0.335938\nv -0.0625 -0.551959 -0.335938\nv -0.0546875 -0.552619 -0.335938\nv -0.046875 -0.553302 -0.335938\nv -0.0390625 -0.553875 -0.335938\nv -0.0282259 -0.554688 -0.335938\nv -0.03125 -0.554467 -0.335938\nv 0.179688 -0.554688 -0.328881\nv 0.1875 -0.554688 -0.331124\nv 0.195312 -0.554688 -0.332801\nv 0.203125 -0.554688 -0.334242\nv 0.214138 -0.554688 -0.335938\nv 0.210938 -0.554688 -0.335487\nv 0.21875 -0.554613 -0.335938\nv 0.229505 -0.554688 -0.335938\nv 0.226562 -0.554581 -0.335938\nv 0.234375 -0.554688 -0.33428\nv 0.242188 -0.554688 -0.329806\nv 0.505149 -0.554688 -0.335938\nv -0.331161 -0.546875 -0.335938\nv -0.125 -0.546875 -0.329974\nv -0.117188 -0.546875 -0.328167\nv 0.505228 -0.546875 -0.335938\nv -0.331069 -0.539062 -0.335938\nv 0.505365 -0.539062 -0.335938\nv -0.331102 -0.53125 -0.335938\nv 0.505391 -0.53125 -0.335938\nv -0.331227 -0.523438 -0.335938\nv 0.50554 -0.523438 -0.335938\nv -0.331393 -0.515625 -0.335938\nv 0.505669 -0.515625 -0.335938\nv -0.331584 -0.507812 -0.335938\nv 0.505542 -0.507812 -0.335938\nv -0.331653 -0.5 -0.335938\nv 0.505343 -0.5 -0.335938\nv -0.331561 -0.492188 -0.335938\nv 0.50532 -0.492188 -0.335938\nv -0.331588 -0.484375 -0.335938\nv -0.140625 -0.47776 -0.335938\nv -0.132812 -0.480782 -0.335938\nv -0.132812 -0.484375 -0.331414\nv -0.125 -0.480296 -0.335938\nv -0.125 -0.484375 -0.331161\nv -0.117188 -0.478307 -0.335938\nv -0.117188 -0.484375 -0.328886\nv -0.109375 -0.476621 -0.335938\nv 0.304688 -0.477608 -0.335938\nv 0.3125 -0.479522 -0.335938\nv 0.3125 -0.484375 -0.329579\nv 0.320312 -0.479488 -0.335938\nv 0.320312 -0.484375 -0.329484\nv 0.328125 -0.477359 -0.335938\nv 0.505349 -0.484375 -0.335938\nv -0.331657 -0.476562 -0.335938\nv -0.1875 -0.469917 -0.335938\nv -0.179688 -0.469747 -0.335938\nv -0.171875 -0.469787 -0.335938\nv -0.164062 -0.471444 -0.335938\nv -0.15625 -0.473502 -0.335938\nv -0.15625 -0.476562 -0.330423\nv -0.144667 -0.476562 -0.335938\nv -0.148438 -0.475585 -0.335938\nv -0.148438 -0.476562 -0.334337\nv -0.109107 -0.476562 -0.335938\nv -0.101562 -0.475177 -0.335938\nv -0.101562 -0.476562 -0.33389\nv -0.09375 -0.473639 -0.335938\nv -0.09375 -0.476562 -0.331561\nv -0.0859375 -0.472128 -0.335938\nv -0.0859375 -0.476562 -0.329465\nv -0.078125 -0.470795 -0.335938\nv -0.0703125 -0.469787 -0.335938\nv -0.0625 -0.468774 -0.335938\nv 0.195312 -0.468918 -0.335938\nv 0.203125 -0.469577 -0.335938\nv 0.210938 -0.470353 -0.335938\nv 0.21875 -0.470819 -0.335938\nv 0.21875 -0.476562 -0.328693\nv 0.226562 -0.471497 -0.335938\nv 0.226562 -0.476562 -0.330495\nv 0.234375 -0.472736 -0.335938\nv 0.234375 -0.476562 -0.330818\nv 0.242188 -0.472865 -0.335938\nv 0.242188 -0.476562 -0.331117\nv 0.25 -0.472816 -0.335938\nv 0.25 -0.476562 -0.331542\nv 0.257812 -0.473063 -0.335938\nv 0.257812 -0.476562 -0.331938\nv 0.265625 -0.473504 -0.335938\nv 0.265625 -0.476562 -0.331855\nv 0.273438 -0.473938 -0.335938\nv 0.273438 -0.476562 -0.330636\nv 0.28125 -0.4745 -0.335938\nv 0.28125 -0.476562 -0.331597\nv 0.289062 -0.474826 -0.335938\nv 0.289062 -0.476562 -0.332807\nv 0.299739 -0.476562 -0.335938\nv 0.296875 -0.476 -0.335938\nv 0.296875 -0.476562 -0.334924\nv 0.330189 -0.476562 -0.335938\nv 0.335938 -0.474241 -0.335938\nv 0.335938 -0.476562 -0.332426\nv 0.34375 -0.471869 -0.335938\nv 0.34375 -0.476562 -0.329592\nv 0.351562 -0.469577 -0.335938\nv 0.351562 -0.476562 -0.328248\nv 0.505367 -0.476562 -0.335938\nv -0.331781 -0.46875 -0.335938\nv -0.203125 -0.466374 -0.335938\nv -0.194518 -0.46875 -0.335938\nv -0.195312 -0.468594 -0.335938\nv -0.195312 -0.46875 -0.330182\nv -0.0622762 -0.46875 -0.335938\nv -0.0546875 -0.46802 -0.335938\nv -0.0546875 -0.46875 -0.334733\nv -0.046875 -0.467403 -0.335938\nv -0.046875 -0.46875 -0.333388\nv -0.0390625 -0.466535 -0.335938\nv -0.0390625 -0.46875 -0.331184\nv -0.03125 -0.465904 -0.335938\nv -0.03125 -0.46875 -0.328715\nv -0.0234375 -0.46528 -0.335938\nv -0.015625 -0.464654 -0.335938\nv -0.0078125 -0.464111 -0.335938\nv 0 -0.464077 -0.335938\nv 0.0078125 -0.464251 -0.335938\nv 0.015625 -0.464216 -0.335938\nv 0.0234375 -0.464225 -0.335938\nv 0.03125 -0.464249 -0.335938\nv 0.0390625 -0.464152 -0.335938\nv 0.046875 -0.463907 -0.335938\nv 0.0546875 -0.463552 -0.335938\nv 0.0625 -0.463466 -0.335938\nv 0.0703125 -0.463435 -0.335938\nv 0.078125 -0.463307 -0.335938\nv 0.0859375 -0.463123 -0.335938\nv 0.09375 -0.462701 -0.335938\nv 0.101562 -0.46213 -0.335938\nv 0.109375 -0.461653 -0.335938\nv 0.117188 -0.461545 -0.335938\nv 0.125 -0.461368 -0.335938\nv 0.132812 -0.46135 -0.335938\nv 0.140625 -0.46182 -0.335938\nv 0.148438 -0.462532 -0.335938\nv 0.15625 -0.463745 -0.335938\nv 0.164062 -0.464959 -0.335938\nv 0.171875 -0.465863 -0.335938\nv 0.179688 -0.466952 -0.335938\nv 0.19356 -0.46875 -0.335938\nv 0.1875 -0.468182 -0.335938\nv 0.1875 -0.46875 -0.332536\nv 0.354779 -0.46875 -0.335938\nv 0.359375 -0.46717 -0.335938\nv 0.359375 -0.46875 -0.334433\nv 0.367188 -0.46875 -0.329065\nv 0.505331 -0.46875 -0.335938\nv -0.332 -0.460938 -0.335938\nv -0.208829 -0.460938 -0.335938\nv -0.210938 -0.456207 -0.335938\nv 0.0625 -0.460938 -0.329491\nv 0.0703125 -0.460938 -0.329831\nv 0.078125 -0.460938 -0.330677\nv 0.0859375 -0.460938 -0.331833\nv 0.09375 -0.460938 -0.333061\nv 0.101562 -0.460938 -0.334066\nv 0.109375 -0.460938 -0.334807\nv 0.117188 -0.460938 -0.334937\nv 0.125 -0.460938 -0.335145\nv 0.132812 -0.460938 -0.334994\nv 0.140625 -0.460938 -0.333258\nv 0.365527 -0.460938 -0.335938\nv 0.367188 -0.458713 -0.335938\nv 0.367188 -0.460938 -0.334086\nv 0.505337 -0.460938 -0.335938\nv -0.332246 -0.453125 -0.335938\nv -0.211988 -0.453125 -0.335938\nv 0.370383 -0.453125 -0.335938\nv 0.505287 -0.453125 -0.335938\nv -0.33242 -0.445312 -0.335938\nv -0.213408 -0.445312 -0.335938\nv 0.372317 -0.445312 -0.335938\nv 0.375 -0.445312 -0.329466\nv 0.505287 -0.445312 -0.335938\nv -0.332326 -0.4375 -0.335938\nv -0.214111 -0.4375 -0.335938\nv 0.373538 -0.4375 -0.335938\nv 0.375 -0.429717 -0.335938\nv 0.375 -0.4375 -0.331812\nv 0.505381 -0.4375 -0.335938\nv -0.332174 -0.429688 -0.335938\nv -0.214871 -0.429688 -0.335938\nv 0.375005 -0.429688 -0.335938\nv 0.50542 -0.429688 -0.335938\nv -0.331915 -0.421875 -0.335938\nv -0.21587 -0.421875 -0.335938\nv 0.376929 -0.421875 -0.335938\nv 0.505483 -0.421875 -0.335938\nv -0.331577 -0.414062 -0.335938\nv -0.216459 -0.414062 -0.335938\nv 0.378592 -0.414062 -0.335938\nv 0.505598 -0.414062 -0.335938\nv -0.331037 -0.40625 -0.335938\nv -0.216868 -0.40625 -0.335938\nv 0.380479 -0.40625 -0.335938\nv 0.505649 -0.40625 -0.335938\nv -0.33038 -0.398438 -0.335938\nv -0.216696 -0.398438 -0.335938\nv 0.381247 -0.398438 -0.335938\nv 0.505787 -0.398438 -0.335938\nv -0.329725 -0.390625 -0.335938\nv -0.216208 -0.390625 -0.335938\nv 0.381844 -0.390625 -0.335938\nv 0.505801 -0.390625 -0.335938\nv -0.32915 -0.382812 -0.335938\nv -0.216205 -0.382812 -0.335938\nv 0.382362 -0.382812 -0.335938\nv 0.382812 -0.37745 -0.335938\nv 0.505857 -0.382812 -0.335938\nv -0.328464 -0.375 -0.335938\nv -0.328125 -0.371585 -0.335938\nv -0.216244 -0.375 -0.335938\nv 0.382999 -0.375 -0.335938\nv 0.505851 -0.375 -0.335938\nv -0.327621 -0.367188 -0.335938\nv -0.216317 -0.367188 -0.335938\nv 0.383672 -0.367188 -0.335938\nv 0.505767 -0.367188 -0.335938\nv -0.326698 -0.359375 -0.335938\nv -0.21637 -0.359375 -0.335938\nv 0.38417 -0.359375 -0.335938\nv 0.505925 -0.359375 -0.335938\nv -0.325778 -0.351562 -0.335938\nv -0.216478 -0.351562 -0.335938\nv 0.384664 -0.351562 -0.335938\nv 0.506058 -0.351562 -0.335938\nv -0.325007 -0.34375 -0.335938\nv -0.216693 -0.34375 -0.335938\nv 0.38511 -0.34375 -0.335938\nv 0.506122 -0.34375 -0.335938\nv -0.324331 -0.335938 -0.335938\nv -0.216975 -0.335938 -0.335938\nv 0.385408 -0.335938 -0.335938\nv 0.506327 -0.335938 -0.335938\nv -0.323842 -0.328125 -0.335938\nv -0.217199 -0.328125 -0.335938\nv 0.38552 -0.328125 -0.335938\nv 0.506621 -0.328125 -0.335938\nv -0.323388 -0.320312 -0.335938\nv -0.217344 -0.320312 -0.335938\nv 0.385691 -0.320312 -0.335938\nv 0.506699 -0.320312 -0.335938\nv -0.322895 -0.3125 -0.335938\nv -0.217505 -0.3125 -0.335938\nv 0.385906 -0.3125 -0.335938\nv 0.506848 -0.3125 -0.335938\nv -0.322448 -0.304688 -0.335938\nv -0.217632 -0.304688 -0.335938\nv 0.386126 -0.304688 -0.335938\nv 0.50693 -0.304688 -0.335938\nv -0.321975 -0.296875 -0.335938\nv -0.217727 -0.296875 -0.335938\nv 0.386312 -0.296875 -0.335938\nv 0.50698 -0.296875 -0.335938\nv -0.321486 -0.289062 -0.335938\nv -0.320312 -0.289062 -0.32863\nv -0.21791 -0.289062 -0.335938\nv 0.386566 -0.289062 -0.335938\nv 0.507018 -0.289062 -0.335938\nv -0.321079 -0.28125 -0.335938\nv -0.320312 -0.28125 -0.331228\nv -0.218146 -0.28125 -0.335938\nv 0.387151 -0.28125 -0.335938\nv 0.50688 -0.28125 -0.335938\nv -0.320533 -0.273438 -0.335938\nv -0.320312 -0.270665 -0.335938\nv -0.320312 -0.273438 -0.334502\nv -0.218451 -0.273438 -0.335938\nv 0.387735 -0.273438 -0.335938\nv 0.506387 -0.273438 -0.335938\nv -0.319845 -0.265625 -0.335938\nv -0.218633 -0.265625 -0.335938\nv 0.38809 -0.265625 -0.335938\nv 0.505874 -0.265625 -0.335938\nv -0.319137 -0.257812 -0.335938\nv -0.218458 -0.257812 -0.335938\nv 0.388194 -0.257812 -0.335938\nv 0.505428 -0.257812 -0.335938\nv -0.318421 -0.25 -0.335938\nv -0.218005 -0.25 -0.335938\nv 0.388274 -0.25 -0.335938\nv 0.505299 -0.25 -0.335938\nv -0.317832 -0.242188 -0.335938\nv -0.217592 -0.242188 -0.335938\nv 0.388389 -0.242188 -0.335938\nv 0.505092 -0.242188 -0.335938\nv -0.31758 -0.234375 -0.335938\nv -0.217318 -0.234375 -0.335938\nv 0.38862 -0.234375 -0.335938\nv 0.50491 -0.234375 -0.335938\nv -0.317344 -0.226562 -0.335938\nv -0.217238 -0.226562 -0.335938\nv 0.388884 -0.226562 -0.335938\nv 0.504716 -0.226562 -0.335938\nv -0.317083 -0.21875 -0.335938\nv -0.217054 -0.21875 -0.335938\nv 0.389029 -0.21875 -0.335938\nv 0.504444 -0.21875 -0.335938\nv -0.316972 -0.210938 -0.335938\nv -0.216759 -0.210938 -0.335938\nv 0.389262 -0.210938 -0.335938\nv 0.504203 -0.210938 -0.335938\nv -0.317099 -0.203125 -0.335938\nv -0.216877 -0.203125 -0.335938\nv 0.389788 -0.203125 -0.335938\nv 0.504223 -0.203125 -0.335938\nv -0.316757 -0.195312 -0.335938\nv -0.2171 -0.195312 -0.335938\nv 0.390448 -0.195312 -0.335938\nv 0.390625 -0.192076 -0.335938\nv 0.390625 -0.195312 -0.332489\nv 0.504018 -0.195312 -0.335938\nv -0.316286 -0.1875 -0.335938\nv -0.217316 -0.1875 -0.335938\nv 0.390863 -0.1875 -0.335938\nv 0.503758 -0.1875 -0.335938\nv -0.315925 -0.179688 -0.335938\nv -0.217555 -0.179688 -0.335938\nv 0.391116 -0.179688 -0.335938\nv 0.503365 -0.179688 -0.335938\nv -0.315431 -0.171875 -0.335938\nv -0.217788 -0.171875 -0.335938\nv 0.391384 -0.171875 -0.335938\nv 0.502934 -0.171875 -0.335938\nv -0.314898 -0.164062 -0.335938\nv -0.21793 -0.164062 -0.335938\nv 0.391201 -0.164062 -0.335938\nv 0.502512 -0.164062 -0.335938\nv -0.314443 -0.15625 -0.335938\nv -0.217932 -0.15625 -0.335938\nv 0.390944 -0.15625 -0.335938\nv 0.502243 -0.15625 -0.335938\nv -0.313702 -0.148438 -0.335938\nv -0.3125 -0.148438 -0.32977\nv -0.217697 -0.148438 -0.335938\nv 0.390635 -0.148438 -0.335938\nv 0.390625 -0.148328 -0.335938\nv 0.502029 -0.148438 -0.335938\nv -0.313463 -0.140625 -0.335938\nv -0.3125 -0.140625 -0.330267\nv -0.217608 -0.140625 -0.335938\nv 0.389936 -0.140625 -0.335938\nv 0.390625 -0.140625 -0.329707\nv 0.501848 -0.140625 -0.335938\nv -0.313356 -0.132812 -0.335938\nv -0.3125 -0.132812 -0.331615\nv -0.217617 -0.132812 -0.335938\nv 0.388715 -0.132812 -0.335938\nv 0.501398 -0.132812 -0.335938\nv -0.313214 -0.125 -0.335938\nv -0.3125 -0.125 -0.333179\nv -0.216938 -0.125 -0.335938\nv 0.387546 -0.125 -0.335938\nv 0.500701 -0.125 -0.335938\nv 0.5 -0.125 -0.33019\nv -0.312881 -0.117188 -0.335938\nv -0.3125 -0.109753 -0.335938\nv -0.3125 -0.117188 -0.334665\nv -0.216023 -0.117188 -0.335938\nv 0.386409 -0.117188 -0.335938\nv 0.50039 -0.117188 -0.335938\nv 0.5 -0.117188 -0.332666\nv -0.312481 -0.109375 -0.335938\nv -0.215174 -0.109375 -0.335938\nv 0.384817 -0.109375 -0.335938\nv 0.500396 -0.109375 -0.335938\nv 0.5 -0.109375 -0.332833\nv -0.311973 -0.101562 -0.335938\nv -0.213837 -0.101562 -0.335938\nv 0.382946 -0.101562 -0.335938\nv 0.382812 -0.101188 -0.335938\nv 0.500487 -0.101562 -0.335938\nv 0.5 -0.101562 -0.331276\nv -0.311931 -0.09375 -0.335938\nv -0.3125 -0.0873475 -0.335938\nv -0.21132 -0.09375 -0.335938\nv -0.210938 -0.0925982 -0.335938\nv 0.379856 -0.09375 -0.335938\nv 0.501377 -0.09375 -0.335938\nv -0.312645 -0.0859375 -0.335938\nv -0.3125 -0.0859375 -0.335406\nv -0.208162 -0.0859375 -0.335938\nv -0.210938 -0.0859375 -0.330637\nv -0.203125 -0.0794319 -0.335938\nv 0.376156 -0.0859375 -0.335938\nv 0.375 -0.0837171 -0.335938\nv 0.502448 -0.0859375 -0.335938\nv -0.313702 -0.078125 -0.335938\nv -0.3125 -0.078125 -0.331385\nv -0.201159 -0.078125 -0.335938\nv -0.203125 -0.078125 -0.334047\nv -0.195312 -0.075248 -0.335938\nv -0.1875 -0.0740366 -0.335938\nv -0.179688 -0.0733657 -0.335938\nv -0.171875 -0.072659 -0.335938\nv -0.164062 -0.0717623 -0.335938\nv -0.15625 -0.0705721 -0.335938\nv 0.046875 -0.0704567 -0.335938\nv 0.0546875 -0.0707036 -0.335938\nv 0.0625 -0.0708653 -0.335938\nv 0.0703125 -0.0709905 -0.335938\nv 0.078125 -0.070884 -0.335938\nv 0.0859375 -0.0706981 -0.335938\nv 0.09375 -0.0703587 -0.335938\nv 0.351562 -0.0707531 -0.335938\nv 0.359375 -0.0720255 -0.335938\nv 0.370534 -0.078125 -0.335938\nv 0.367188 -0.0751842 -0.335938\nv 0.375 -0.078125 -0.329713\nv 0.503588 -0.078125 -0.335938\nv -0.314668 -0.0703125 -0.335938\nv -0.1875 -0.0703125 -0.32986\nv -0.179688 -0.0703125 -0.331552\nv -0.171875 -0.0703125 -0.332688\nv -0.164062 -0.0703125 -0.333851\nv -0.155006 -0.0703125 -0.335938\nv -0.15625 -0.0703125 -0.335551\nv -0.148438 -0.0682538 -0.335938\nv -0.140625 -0.0664047 -0.335938\nv -0.132812 -0.0662856 -0.335938\nv -0.125 -0.0663897 -0.335938\nv -0.117188 -0.0665785 -0.335938\nv -0.109375 -0.0666557 -0.335938\nv -0.101562 -0.0667331 -0.335938\nv -0.09375 -0.0668585 -0.335938\nv -0.0859375 -0.0670655 -0.335938\nv -0.078125 -0.0672965 -0.335938\nv -0.0703125 -0.0675356 -0.335938\nv -0.0625 -0.0677926 -0.335938\nv -0.0546875 -0.0680361 -0.335938\nv -0.046875 -0.0679403 -0.335938\nv -0.0390625 -0.0679601 -0.335938\nv -0.03125 -0.0680254 -0.335938\nv -0.0234375 -0.0680691 -0.335938\nv -0.015625 -0.0681202 -0.335938\nv -0.0078125 -0.0683289 -0.335938\nv 0 -0.0686609 -0.335938\nv 0.0078125 -0.0689851 -0.335938\nv 0.015625 -0.0693078 -0.335938\nv 0.0234375 -0.0696382 -0.335938\nv 0.03125 -0.0699086 -0.335938\nv 0.0429778 -0.0703125 -0.335938\nv 0.0390625 -0.0701308 -0.335938\nv 0.046875 -0.0703125 -0.334859\nv 0.0546875 -0.0703125 -0.333318\nv 0.0625 -0.0703125 -0.332429\nv 0.0703125 -0.0703125 -0.331936\nv 0.078125 -0.0703125 -0.332229\nv 0.0859375 -0.0703125 -0.332968\nv 0.0948559 -0.0703125 -0.335938\nv 0.09375 -0.0703125 -0.335528\nv 0.101562 -0.0699962 -0.335938\nv 0.109375 -0.0696616 -0.335938\nv 0.117188 -0.0693617 -0.335938\nv 0.125 -0.0691211 -0.335938\nv 0.132812 -0.0688937 -0.335938\nv 0.140625 -0.0687324 -0.335938\nv 0.148438 -0.0686787 -0.335938\nv 0.15625 -0.0685696 -0.335938\nv 0.164062 -0.068428 -0.335938\nv 0.171875 -0.0683142 -0.335938\nv 0.179688 -0.0682246 -0.335938\nv 0.1875 -0.0681023 -0.335938\nv 0.195312 -0.0679993 -0.335938\nv 0.203125 -0.0679471 -0.335938\nv 0.210938 -0.0679377 -0.335938\nv 0.21875 -0.0678892 -0.335938\nv 0.226562 -0.0677497 -0.335938\nv 0.234375 -0.0676385 -0.335938\nv 0.242188 -0.0675235 -0.335938\nv 0.25 -0.0674373 -0.335938\nv 0.257812 -0.0675589 -0.335938\nv 0.265625 -0.0676138 -0.335938\nv 0.273438 -0.0675849 -0.335938\nv 0.28125 -0.0675613 -0.335938\nv 0.289062 -0.0675598 -0.335938\nv 0.296875 -0.0675766 -0.335938\nv 0.304688 -0.0676536 -0.335938\nv 0.3125 -0.0678233 -0.335938\nv 0.320312 -0.0680792 -0.335938\nv 0.328125 -0.0686386 -0.335938\nv 0.335938 -0.0693179 -0.335938\nv 0.347165 -0.0703125 -0.335938\nv 0.34375 -0.0699575 -0.335938\nv 0.351562 -0.0703125 -0.33497\nv 0.359375 -0.0703125 -0.332353\nv 0.504354 -0.0703125 -0.335938\nv -0.315075 -0.0625 -0.335938\nv -0.148438 -0.0625 -0.329446\nv -0.140625 -0.0625 -0.331225\nv -0.132812 -0.0625 -0.331083\nv -0.125 -0.0625 -0.330809\nv -0.117188 -0.0625 -0.330407\nv -0.109375 -0.0625 -0.33013\nv -0.101562 -0.0625 -0.330096\nv -0.09375 -0.0625 -0.329811\nv -0.0859375 -0.0625 -0.329282\nv -0.078125 -0.0625 -0.328624\nv -0.0703125 -0.0625 -0.328185\nv 0.25 -0.0625 -0.328358\nv 0.257812 -0.0625 -0.32834\nv 0.296875 -0.0625 -0.328204\nv 0.304688 -0.0625 -0.328291\nv 0.505508 -0.0625 -0.335938\nv -0.315213 -0.0546875 -0.335938\nv 0.505875 -0.0546875 -0.335938\nv -0.315134 -0.046875 -0.335938\nv 0.506047 -0.046875 -0.335938\nv -0.315116 -0.0390625 -0.335938\nv 0.505621 -0.0390625 -0.335938\nv -0.315348 -0.03125 -0.335938\nv 0.505274 -0.03125 -0.335938\nv -0.315191 -0.0234375 -0.335938\nv 0.504983 -0.0234375 -0.335938\nv -0.314921 -0.015625 -0.335938\nv 0.504396 -0.015625 -0.335938\nv -0.314933 -0.0078125 -0.335938\nv 0.503914 -0.0078125 -0.335938\nv -0.314372 0 -0.335938\nv 0.504094 0 -0.335938\nv -0.313812 0.0078125 -0.335938\nv -0.3125 0.0078125 -0.330241\nv 0.504097 0.0078125 -0.335938\nv -0.313408 0.015625 -0.335938\nv -0.3125 0.015625 -0.331238\nv 0.504175 0.015625 -0.335938\nv -0.313302 0.0234375 -0.335938\nv -0.3125 0.0234375 -0.331549\nv 0.504005 0.0234375 -0.335938\nv -0.313282 0.03125 -0.335938\nv -0.3125 0.03125 -0.331308\nv 0.502733 0.03125 -0.335938\nv -0.312951 0.0390625 -0.335938\nv -0.3125 0.0390625 -0.332366\nv 0.500539 0.0390625 -0.335938\nv 0.5 0.0403056 -0.335938\nv -0.312536 0.046875 -0.335938\nv -0.3125 0.047094 -0.335938\nv -0.3125 0.046875 -0.335517\nv 0.496614 0.046875 -0.335938\nv 0.492188 0.051542 -0.335938\nv -0.311224 0.0546875 -0.335938\nv 0.476562 0.0617912 -0.335938\nv 0.48785 0.0546875 -0.335938\nv 0.484375 0.0574582 -0.335938\nv -0.310017 0.0625 -0.335938\nv 0.21875 0.0702529 -0.335938\nv 0.226562 0.0702666 -0.335938\nv 0.296875 0.0701883 -0.335938\nv 0.304688 0.0698718 -0.335938\nv 0.3125 0.0696221 -0.335938\nv 0.320312 0.0693726 -0.335938\nv 0.328125 0.0691744 -0.335938\nv 0.335938 0.069029 -0.335938\nv 0.34375 0.0689285 -0.335938\nv 0.351562 0.0687481 -0.335938\nv 0.359375 0.0685981 -0.335938\nv 0.367188 0.0683986 -0.335938\nv 0.375 0.0681269 -0.335938\nv 0.382812 0.0679506 -0.335938\nv 0.390625 0.0678543 -0.335938\nv 0.398438 0.0675139 -0.335938\nv 0.40625 0.0673548 -0.335938\nv 0.414062 0.0672518 -0.335938\nv 0.421875 0.0672071 -0.335938\nv 0.429688 0.0673223 -0.335938\nv 0.4375 0.0676022 -0.335938\nv 0.445312 0.0679907 -0.335938\nv 0.453125 0.0670549 -0.335938\nv 0.460938 0.0658655 -0.335938\nv 0.475044 0.0625 -0.335938\nv 0.46875 0.0647712 -0.335938\nv -0.309817 0.0703125 -0.335938\nv -0.1875 0.0761043 -0.335938\nv -0.179688 0.0743232 -0.335938\nv -0.171875 0.0731381 -0.335938\nv -0.164062 0.0723185 -0.335938\nv -0.15625 0.0719152 -0.335938\nv -0.148438 0.0717346 -0.335938\nv -0.140625 0.0718132 -0.335938\nv -0.132812 0.0719526 -0.335938\nv -0.125 0.071897 -0.335938\nv -0.117188 0.0717762 -0.335938\nv -0.109375 0.0716642 -0.335938\nv -0.101562 0.0714344 -0.335938\nv -0.09375 0.0711765 -0.335938\nv -0.0859375 0.0710895 -0.335938\nv -0.078125 0.0710356 -0.335938\nv -0.0703125 0.0709561 -0.335938\nv -0.0625 0.0709047 -0.335938\nv -0.0546875 0.070902 -0.335938\nv -0.046875 0.0709017 -0.335938\nv -0.0390625 0.0708667 -0.335938\nv -0.03125 0.070789 -0.335938\nv -0.0234375 0.0706347 -0.335938\nv -0.015625 0.0705715 -0.335938\nv -0.0078125 0.0705734 -0.335938\nv 0 0.0706387 -0.335938\nv 0.0078125 0.070767 -0.335938\nv 0.015625 0.0708718 -0.335938\nv 0.0234375 0.0709073 -0.335938\nv 0.03125 0.0708708 -0.335938\nv 0.0390625 0.0708164 -0.335938\nv 0.046875 0.070812 -0.335938\nv 0.0546875 0.0707604 -0.335938\nv 0.0625 0.070693 -0.335938\nv 0.0703125 0.0706438 -0.335938\nv 0.078125 0.0705974 -0.335938\nv 0.0859375 0.0705334 -0.335938\nv 0.09375 0.0705044 -0.335938\nv 0.101562 0.0705031 -0.335938\nv 0.101562 0.0703125 -0.329377\nv 0.109375 0.0704762 -0.335938\nv 0.109375 0.0703125 -0.330131\nv 0.117188 0.0704805 -0.335938\nv 0.117188 0.0703125 -0.33027\nv 0.125 0.0704894 -0.335938\nv 0.125 0.0703125 -0.33034\nv 0.132812 0.0705267 -0.335938\nv 0.132812 0.0703125 -0.330465\nv 0.140625 0.0705946 -0.335938\nv 0.140625 0.0703125 -0.33049\nv 0.148438 0.0705992 -0.335938\nv 0.148438 0.0703125 -0.3309\nv 0.15625 0.0705601 -0.335938\nv 0.15625 0.0703125 -0.330967\nv 0.164062 0.0705373 -0.335938\nv 0.164062 0.0703125 -0.330435\nv 0.171875 0.0705251 -0.335938\nv 0.171875 0.0703125 -0.330132\nv 0.179688 0.0704651 -0.335938\nv 0.179688 0.0703125 -0.330527\nv 0.1875 0.0703999 -0.335938\nv 0.1875 0.0703125 -0.331799\nv 0.195312 0.0703798 -0.335938\nv 0.195312 0.0703125 -0.331767\nv 0.203125 0.0703853 -0.335938\nv 0.210995 0.0703125 -0.335938\nv 0.210938 0.0703129 -0.335938\nv 0.210938 0.0703125 -0.33587\nv 0.233788 0.0703125 -0.335938\nv 0.234375 0.0703162 -0.335938\nv 0.234375 0.0703125 -0.335526\nv 0.242188 0.0703146 -0.335938\nv 0.242188 0.0703125 -0.335806\nv 0.25 0.0703154 -0.335938\nv 0.25 0.0703125 -0.335699\nv 0.257812 0.0703926 -0.335938\nv 0.257812 0.0703125 -0.333041\nv 0.265625 0.0704381 -0.335938\nv 0.265625 0.0703125 -0.332509\nv 0.273438 0.0704422 -0.335938\nv 0.273438 0.0703125 -0.333353\nv 0.28125 0.0704908 -0.335938\nv 0.28125 0.0703125 -0.333068\nv 0.292469 0.0703125 -0.335938\nv 0.289062 0.0704051 -0.335938\nv 0.289062 0.0703125 -0.333628\nv -0.309921 0.078125 -0.335938\nv -0.203125 0.0835161 -0.335938\nv -0.193307 0.078125 -0.335938\nv -0.195312 0.0791084 -0.335938\nv -0.310564 0.0859375 -0.335938\nv -0.205752 0.0859375 -0.335938\nv -0.210938 0.0912874 -0.335938\nv -0.311249 0.09375 -0.335938\nv -0.212715 0.09375 -0.335938\nv -0.311918 0.101562 -0.335938\nv -0.3125 0.109201 -0.335938\nv -0.3125 0.101562 -0.329869\nv -0.216676 0.101562 -0.335938\nv -0.21875 0.108737 -0.335938\nv -0.21875 0.101562 -0.330898\nv -0.312514 0.109375 -0.335938\nv -0.218898 0.109375 -0.335938\nv -0.313067 0.117188 -0.335938\nv -0.220328 0.117188 -0.335938\nv -0.313398 0.125 -0.335938\nv -0.221388 0.125 -0.335938\nv -0.313767 0.132812 -0.335938\nv -0.221997 0.132812 -0.335938\nv -0.314263 0.140625 -0.335938\nv -0.222509 0.140625 -0.335938\nv -0.314588 0.148438 -0.335938\nv -0.223113 0.148438 -0.335938\nv -0.315132 0.15625 -0.335938\nv -0.223584 0.15625 -0.335938\nv -0.315628 0.164062 -0.335938\nv -0.223732 0.164062 -0.335938\nv -0.316116 0.171875 -0.335938\nv -0.223355 0.171875 -0.335938\nv -0.316677 0.179688 -0.335938\nv -0.223087 0.179688 -0.335938\nv -0.317291 0.1875 -0.335938\nv -0.222827 0.1875 -0.335938\nv -0.317893 0.195312 -0.335938\nv -0.22236 0.195312 -0.335938\nv -0.318438 0.203125 -0.335938\nv -0.221707 0.203125 -0.335938\nv -0.318995 0.210938 -0.335938\nv -0.221215 0.210938 -0.335938\nv -0.319637 0.21875 -0.335938\nv -0.320312 0.224265 -0.335938\nv -0.220688 0.21875 -0.335938\nv -0.320569 0.226562 -0.335938\nv -0.320312 0.226562 -0.333784\nv -0.220582 0.226562 -0.335938\nv -0.321297 0.234375 -0.335938\nv -0.320312 0.234375 -0.328679\nv -0.220752 0.234375 -0.335938\nv -0.321855 0.242188 -0.335938\nv -0.221382 0.242188 -0.335938\nv -0.322348 0.25 -0.335938\nv -0.222068 0.25 -0.335938\nv -0.322834 0.257812 -0.335938\nv -0.22262 0.257812 -0.335938\nv -0.323376 0.265625 -0.335938\nv -0.222992 0.265625 -0.335938\nv -0.323977 0.273438 -0.335938\nv -0.223444 0.273438 -0.335938\nv -0.324483 0.28125 -0.335938\nv -0.224071 0.28125 -0.335938\nv -0.324997 0.289062 -0.335938\nv -0.224593 0.289062 -0.335938\nv -0.325436 0.296875 -0.335938\nv -0.225199 0.296875 -0.335938\nv -0.325684 0.304688 -0.335938\nv -0.225927 0.304688 -0.335938\nv -0.226562 0.31058 -0.335938\nv -0.326074 0.3125 -0.335938\nv -0.226822 0.3125 -0.335938\nv -0.326389 0.320312 -0.335938\nv -0.227692 0.320312 -0.335938\nv -0.326511 0.328125 -0.335938\nv -0.228749 0.328125 -0.335938\nv -0.326689 0.335938 -0.335938\nv -0.229957 0.335938 -0.335938\nv -0.327024 0.34375 -0.335938\nv -0.230932 0.34375 -0.335938\nv -0.327504 0.351562 -0.335938\nv -0.231732 0.351562 -0.335938\nv -0.328033 0.359375 -0.335938\nv -0.328125 0.360596 -0.335938\nv -0.23235 0.359375 -0.335938\nv -0.328565 0.367188 -0.335938\nv -0.328125 0.367188 -0.334963\nv -0.232918 0.367188 -0.335938\nv -0.234375 0.367188 -0.329777\nv -0.329075 0.375 -0.335938\nv -0.328125 0.375 -0.333843\nv -0.233302 0.375 -0.335938\nv -0.234375 0.375 -0.331654\nv -0.329445 0.382812 -0.335938\nv -0.328125 0.382812 -0.333062\nv -0.233707 0.382812 -0.335938\nv -0.234375 0.382812 -0.333206\nv -0.329794 0.390625 -0.335938\nv -0.328125 0.390625 -0.332336\nv -0.234171 0.390625 -0.335938\nv -0.234375 0.395018 -0.335938\nv -0.234375 0.390625 -0.334978\nv -0.330143 0.398438 -0.335938\nv -0.328125 0.398438 -0.33172\nv -0.23456 0.398438 -0.335938\nv -0.330498 0.40625 -0.335938\nv -0.328125 0.40625 -0.33119\nv -0.234764 0.40625 -0.335938\nv -0.330823 0.414062 -0.335938\nv -0.328125 0.414062 -0.330725\nv -0.23505 0.414062 -0.335938\nv -0.331018 0.421875 -0.335938\nv -0.328125 0.421875 -0.330421\nv -0.235333 0.421875 -0.335938\nv -0.331242 0.429688 -0.335938\nv -0.328125 0.429688 -0.329972\nv -0.235793 0.429688 -0.335938\nv -0.331436 0.4375 -0.335938\nv -0.328125 0.4375 -0.329469\nv -0.236212 0.4375 -0.335938\nv -0.331648 0.445312 -0.335938\nv -0.328125 0.445312 -0.328891\nv -0.236651 0.445312 -0.335938\nv -0.331892 0.453125 -0.335938\nv -0.328125 0.453125 -0.328311\nv -0.237022 0.453125 -0.335938\nv -0.332232 0.460938 -0.335938\nv -0.237472 0.460938 -0.335938\nv -0.332562 0.46875 -0.335938\nv -0.237905 0.46875 -0.335938\nv -0.332868 0.476562 -0.335938\nv -0.238265 0.476562 -0.335938\nv -0.333209 0.484375 -0.335938\nv -0.23865 0.484375 -0.335938\nv -0.333951 0.492188 -0.335938\nv -0.238966 0.492188 -0.335938\nv -0.334593 0.5 -0.335938\nv -0.239359 0.5 -0.335938\nv -0.335188 0.507812 -0.335938\nv -0.239789 0.507812 -0.335938\nv -0.335779 0.515625 -0.335938\nv -0.335938 0.517785 -0.335938\nv -0.240212 0.515625 -0.335938\nv -0.242188 0.515625 -0.328145\nv -0.336389 0.523438 -0.335938\nv -0.335938 0.523438 -0.335067\nv -0.240637 0.523438 -0.335938\nv -0.242188 0.523438 -0.32959\nv -0.336986 0.53125 -0.335938\nv -0.335938 0.53125 -0.333885\nv -0.240979 0.53125 -0.335938\nv -0.242188 0.53125 -0.331051\nv -0.337686 0.539062 -0.335938\nv -0.335938 0.539062 -0.33249\nv -0.241236 0.539062 -0.335938\nv -0.242188 0.539062 -0.332345\nv -0.338389 0.546875 -0.335938\nv -0.335938 0.546875 -0.331034\nv -0.241619 0.546875 -0.335938\nv -0.242188 0.546875 -0.333899\nv -0.339063 0.554688 -0.335938\nv -0.335938 0.554688 -0.329722\nv -0.242077 0.554688 -0.335938\nv -0.242188 0.556509 -0.335938\nv -0.242188 0.554688 -0.335549\nv -0.339657 0.5625 -0.335938\nv -0.335938 0.5625 -0.328626\nv -0.242632 0.5625 -0.335938\nv -0.340238 0.570312 -0.335938\nv -0.243124 0.570312 -0.335938\nv -0.340773 0.578125 -0.335938\nv -0.243687 0.578125 -0.335938\nv -0.341409 0.585938 -0.335938\nv -0.244244 0.585938 -0.335938\nv -0.342138 0.59375 -0.335938\nv -0.244796 0.59375 -0.335938\nv -0.342807 0.601562 -0.335938\nv -0.24536 0.601562 -0.335938\nv -0.3436 0.609375 -0.335938\nv -0.34375 0.611168 -0.335938\nv -0.246205 0.609375 -0.335938\nv -0.25 0.609375 -0.328858\nv -0.34428 0.617188 -0.335938\nv -0.34375 0.617188 -0.334646\nv -0.247334 0.617188 -0.335938\nv -0.25 0.617188 -0.330618\nv -0.345097 0.625 -0.335938\nv -0.34375 0.625 -0.332442\nv -0.248331 0.625 -0.335938\nv -0.25 0.625 -0.331693\nv -0.345302 0.632812 -0.335938\nv -0.34375 0.632812 -0.331885\nv -0.249191 0.632812 -0.335938\nv -0.25 0.639762 -0.335938\nv -0.25 0.632812 -0.333859\nv -0.345333 0.640625 -0.335938\nv -0.34375 0.640625 -0.331881\nv -0.250106 0.640625 -0.335938\nv -0.345582 0.648438 -0.335938\nv -0.34375 0.648438 -0.33108\nv -0.25101 0.648438 -0.335938\nv -0.345982 0.65625 -0.335938\nv -0.34375 0.65625 -0.329886\nv -0.251736 0.65625 -0.335938\nv -0.34644 0.664062 -0.335938\nv -0.34375 0.664062 -0.328773\nv -0.252113 0.664062 -0.335938\nv -0.346874 0.671875 -0.335938\nv -0.25229 0.671875 -0.335938\nv -0.347294 0.679688 -0.335938\nv -0.252342 0.679688 -0.335938\nv -0.347704 0.6875 -0.335938\nv -0.252635 0.6875 -0.335938\nv -0.348147 0.695312 -0.335938\nv -0.253681 0.695312 -0.335938\nv -0.348544 0.703125 -0.335938\nv -0.255113 0.703125 -0.335938\nv -0.349157 0.710938 -0.335938\nv -0.256444 0.710938 -0.335938\nv -0.257812 0.710938 -0.331816\nv -0.349736 0.71875 -0.335938\nv -0.2574 0.71875 -0.335938\nv -0.257812 0.720931 -0.335938\nv -0.257812 0.71875 -0.334738\nv -0.349958 0.726562 -0.335938\nv -0.258976 0.726562 -0.335938\nv -0.349426 0.734375 -0.335938\nv -0.260431 0.734375 -0.335938\nv -0.348198 0.742188 -0.335938\nv -0.34375 0.742188 -0.328399\nv -0.262815 0.742188 -0.335938\nv -0.265625 0.742188 -0.328483\nv -0.347089 0.75 -0.335938\nv -0.34375 0.75 -0.330686\nv -0.265459 0.75 -0.335938\nv -0.265625 0.750409 -0.335938\nv -0.265625 0.75 -0.335464\nv -0.345974 0.757812 -0.335938\nv -0.34375 0.757812 -0.332413\nv -0.26846 0.757812 -0.335938\nv -0.346084 0.765625 -0.335938\nv -0.34375 0.765625 -0.332289\nv -0.272768 0.765625 -0.335938\nv -0.273438 0.766797 -0.335938\nv -0.273438 0.765625 -0.330431\nv -0.346464 0.773438 -0.335938\nv -0.34375 0.773438 -0.331757\nv -0.277169 0.773438 -0.335938\nv -0.28125 0.780964 -0.335938\nv -0.34712 0.78125 -0.335938\nv -0.34375 0.78125 -0.3307\nv -0.28141 0.78125 -0.335938\nv -0.347448 0.789062 -0.335938\nv -0.34375 0.789062 -0.330043\nv -0.285339 0.789062 -0.335938\nv -0.289062 0.789062 -0.330448\nv -0.348065 0.796875 -0.335938\nv -0.34375 0.796875 -0.329487\nv -0.28811 0.796875 -0.335938\nv -0.289062 0.799972 -0.335938\nv -0.289062 0.796875 -0.334687\nv -0.348198 0.804688 -0.335938\nv -0.34375 0.804688 -0.329247\nv -0.290771 0.804688 -0.335938\nv -0.296875 0.804688 -0.328295\nv -0.349312 0.8125 -0.335938\nv -0.294264 0.8125 -0.335938\nv -0.296875 0.818974 -0.335938\nv -0.296875 0.8125 -0.33274\nv -0.350663 0.820312 -0.335938\nv -0.351562 0.824706 -0.335938\nv -0.297364 0.820312 -0.335938\nv -0.352194 0.828125 -0.335938\nv -0.351562 0.828125 -0.33423\nv -0.299276 0.828125 -0.335938\nv -0.304688 0.828125 -0.328395\nv -0.351716 0.835938 -0.335938\nv -0.351562 0.836649 -0.335938\nv -0.351562 0.835938 -0.335366\nv -0.299616 0.835938 -0.335938\nv -0.349871 0.84375 -0.335938\nv -0.299922 0.84375 -0.335938\nv -0.34439 0.851562 -0.335938\nv -0.34375 0.851965 -0.335938\nv -0.34375 0.851562 -0.334323\nv -0.335938 0.853063 -0.335938\nv -0.335938 0.851562 -0.331784\nv -0.328125 0.856568 -0.335938\nv -0.301255 0.851562 -0.335938\nv -0.304688 0.858838 -0.335938\nv -0.304688 0.851562 -0.329043\nv -0.323778 0.859375 -0.335938\nv -0.320312 0.861185 -0.335938\nv -0.320312 0.859375 -0.329934\nv -0.305261 0.859375 -0.335938\nv -0.3125 0.862622 -0.335938\nv -0.273438 -0.734453 -0.328125\nv 0.40625 -0.736661 -0.328125\nv 0.414062 -0.738254 -0.328125\nv 0.421875 -0.739319 -0.328125\nv 0.429688 -0.739427 -0.328125\nv 0.4375 -0.739128 -0.328125\nv 0.445312 -0.738852 -0.328125\nv 0.453125 -0.738308 -0.328125\nv 0.460938 -0.737322 -0.328125\nv 0.46875 -0.735747 -0.328125\nv -0.328125 -0.730142 -0.328125\nv -0.320312 -0.731617 -0.328125\nv -0.3125 -0.732567 -0.328125\nv -0.304688 -0.733035 -0.328125\nv -0.296875 -0.733657 -0.328125\nv -0.289062 -0.734068 -0.328125\nv -0.280871 -0.734375 -0.328125\nv -0.28125 -0.734371 -0.328125\nv -0.273137 -0.734375 -0.328125\nv -0.273438 -0.734375 -0.327618\nv -0.265625 -0.732294 -0.328125\nv -0.257812 -0.730213 -0.328125\nv -0.25 -0.727435 -0.328125\nv 0.399854 -0.734375 -0.328125\nv 0.398438 -0.733653 -0.328125\nv 0.398438 -0.734375 -0.325621\nv 0.473939 -0.734375 -0.328125\nv 0.46875 -0.734375 -0.323106\nv 0.476562 -0.733538 -0.328125\nv 0.484375 -0.730903 -0.328125\nv 0.492188 -0.728634 -0.328125\nv -0.335531 -0.726562 -0.328125\nv -0.335938 -0.726186 -0.328125\nv -0.248367 -0.726562 -0.328125\nv -0.25 -0.726562 -0.321835\nv -0.242188 -0.718995 -0.328125\nv 0.390657 -0.726562 -0.328125\nv 0.390625 -0.726481 -0.328125\nv 0.484375 -0.726562 -0.320501\nv 0.49686 -0.726562 -0.328125\nv 0.492188 -0.726562 -0.323696\nv 0.5 -0.724609 -0.328125\nv -0.340459 -0.71875 -0.328125\nv -0.242035 -0.71875 -0.328125\nv -0.242188 -0.71875 -0.327646\nv 0.388271 -0.71875 -0.328125\nv 0.505372 -0.71875 -0.328125\nv -0.342525 -0.710938 -0.328125\nv -0.23847 -0.710938 -0.328125\nv 0.385569 -0.710938 -0.328125\nv 0.382812 -0.703641 -0.328125\nv 0.507305 -0.710938 -0.328125\nv -0.343218 -0.703125 -0.328125\nv -0.234952 -0.703125 -0.328125\nv -0.234375 -0.702034 -0.328125\nv 0.382617 -0.703125 -0.328125\nv 0.382812 -0.703125 -0.322548\nv 0.506675 -0.703125 -0.328125\nv -0.342677 -0.695312 -0.328125\nv -0.23064 -0.695312 -0.328125\nv 0.38135 -0.695312 -0.328125\nv 0.506221 -0.695312 -0.328125\nv -0.341766 -0.6875 -0.328125\nv -0.228299 -0.6875 -0.328125\nv -0.226562 -0.679848 -0.328125\nv 0.381284 -0.6875 -0.328125\nv 0.506074 -0.6875 -0.328125\nv -0.340761 -0.679688 -0.328125\nv -0.226528 -0.679688 -0.328125\nv -0.226562 -0.679688 -0.328041\nv 0.381472 -0.679688 -0.328125\nv 0.505995 -0.679688 -0.328125\nv -0.339695 -0.671875 -0.328125\nv -0.225241 -0.671875 -0.328125\nv -0.226562 -0.671875 -0.325158\nv 0.381539 -0.671875 -0.328125\nv 0.506131 -0.671875 -0.328125\nv -0.338784 -0.664062 -0.328125\nv -0.224028 -0.664062 -0.328125\nv -0.226562 -0.664062 -0.322495\nv 0.381698 -0.664062 -0.328125\nv 0.382812 -0.664062 -0.321938\nv 0.506338 -0.664062 -0.328125\nv -0.337933 -0.65625 -0.328125\nv -0.222779 -0.65625 -0.328125\nv 0.381714 -0.65625 -0.328125\nv 0.382812 -0.65625 -0.32235\nv 0.506616 -0.65625 -0.328125\nv -0.336955 -0.648438 -0.328125\nv -0.221438 -0.648438 -0.328125\nv 0.381719 -0.648438 -0.328125\nv 0.382812 -0.648438 -0.322218\nv 0.506371 -0.648438 -0.328125\nv -0.335958 -0.640625 -0.328125\nv -0.335938 -0.64045 -0.328125\nv -0.335938 -0.640625 -0.327886\nv -0.220684 -0.640625 -0.328125\nv 0.38189 -0.640625 -0.328125\nv 0.382812 -0.640625 -0.321163\nv 0.506174 -0.640625 -0.328125\nv -0.334935 -0.632812 -0.328125\nv -0.220435 -0.632812 -0.328125\nv 0.382023 -0.632812 -0.328125\nv 0.382812 -0.632812 -0.321697\nv 0.505796 -0.632812 -0.328125\nv -0.334037 -0.625 -0.328125\nv -0.220172 -0.625 -0.328125\nv 0.381945 -0.625 -0.328125\nv 0.382812 -0.625 -0.324218\nv 0.505022 -0.625 -0.328125\nv -0.33344 -0.617188 -0.328125\nv -0.219775 -0.617188 -0.328125\nv 0.381718 -0.617188 -0.328125\nv 0.382812 -0.617188 -0.325457\nv 0.504595 -0.617188 -0.328125\nv -0.333495 -0.609375 -0.328125\nv -0.219332 -0.609375 -0.328125\nv 0.381404 -0.609375 -0.328125\nv 0.382812 -0.609375 -0.325651\nv 0.50438 -0.609375 -0.328125\nv -0.333339 -0.601562 -0.328125\nv -0.218827 -0.601562 -0.328125\nv -0.21875 -0.60089 -0.328125\nv 0.381534 -0.601562 -0.328125\nv 0.382812 -0.601562 -0.326375\nv 0.504127 -0.601562 -0.328125\nv -0.332932 -0.59375 -0.328125\nv -0.217942 -0.59375 -0.328125\nv -0.21875 -0.59375 -0.327119\nv 0.381887 -0.59375 -0.328125\nv 0.382812 -0.59375 -0.326935\nv 0.503997 -0.59375 -0.328125\nv -0.332486 -0.585938 -0.328125\nv -0.216941 -0.585938 -0.328125\nv -0.21875 -0.585938 -0.326211\nv 0.381489 -0.585938 -0.328125\nv 0.382812 -0.585938 -0.326521\nv 0.503917 -0.585938 -0.328125\nv -0.332119 -0.578125 -0.328125\nv -0.215845 -0.578125 -0.328125\nv -0.21875 -0.578125 -0.325438\nv 0.381036 -0.578125 -0.328125\nv 0.382812 -0.578125 -0.32599\nv 0.503963 -0.578125 -0.328125\nv -0.331787 -0.570312 -0.328125\nv -0.213614 -0.570312 -0.328125\nv -0.21875 -0.570312 -0.324797\nv -0.210938 -0.567997 -0.328125\nv -0.203125 -0.564484 -0.328125\nv 0.378505 -0.570312 -0.328125\nv 0.375 -0.565172 -0.328125\nv 0.382812 -0.570312 -0.323639\nv 0.504078 -0.570312 -0.328125\nv -0.331466 -0.5625 -0.328125\nv -0.21875 -0.5625 -0.320619\nv -0.210938 -0.5625 -0.323102\nv -0.197251 -0.5625 -0.328125\nv -0.203125 -0.5625 -0.32581\nv -0.195312 -0.561845 -0.328125\nv -0.1875 -0.559533 -0.328125\nv -0.179688 -0.557569 -0.328125\nv -0.171875 -0.556994 -0.328125\nv -0.164062 -0.557081 -0.328125\nv -0.15625 -0.555446 -0.328125\nv -0.0234375 -0.554957 -0.328125\nv -0.015625 -0.555424 -0.328125\nv -0.0078125 -0.555844 -0.328125\nv 0 -0.556022 -0.328125\nv 0.0078125 -0.556024 -0.328125\nv 0.015625 -0.556009 -0.328125\nv 0.0234375 -0.556048 -0.328125\nv 0.03125 -0.556097 -0.328125\nv 0.0390625 -0.556068 -0.328125\nv 0.046875 -0.555993 -0.328125\nv 0.0546875 -0.555907 -0.328125\nv 0.0625 -0.555994 -0.328125\nv 0.0703125 -0.555863 -0.328125\nv 0.078125 -0.555652 -0.328125\nv 0.0859375 -0.555613 -0.328125\nv 0.09375 -0.555573 -0.328125\nv 0.101562 -0.555448 -0.328125\nv 0.109375 -0.555328 -0.328125\nv 0.117188 -0.555044 -0.328125\nv 0.125 -0.554912 -0.328125\nv 0.132812 -0.555003 -0.328125\nv 0.140625 -0.555249 -0.328125\nv 0.148438 -0.555284 -0.328125\nv 0.15625 -0.555047 -0.328125\nv 0.164062 -0.554852 -0.328125\nv 0.171875 -0.554736 -0.328125\nv 0.25 -0.555297 -0.328125\nv 0.257812 -0.556025 -0.328125\nv 0.265625 -0.556278 -0.328125\nv 0.273438 -0.556439 -0.328125\nv 0.28125 -0.556631 -0.328125\nv 0.289062 -0.556688 -0.328125\nv 0.296875 -0.55671 -0.328125\nv 0.304688 -0.556759 -0.328125\nv 0.3125 -0.556535 -0.328125\nv 0.320312 -0.557138 -0.328125\nv 0.328125 -0.558229 -0.328125\nv 0.335938 -0.558073 -0.328125\nv 0.34375 -0.557343 -0.328125\nv 0.351562 -0.557555 -0.328125\nv 0.359375 -0.558525 -0.328125\nv 0.371255 -0.5625 -0.328125\nv 0.367188 -0.560745 -0.328125\nv 0.375 -0.5625 -0.32618\nv 0.50414 -0.5625 -0.328125\nv -0.331402 -0.554688 -0.328125\nv -0.1875 -0.554688 -0.321716\nv -0.179688 -0.554688 -0.32354\nv -0.171875 -0.554688 -0.323716\nv -0.164062 -0.554688 -0.320624\nv -0.1532 -0.554688 -0.328125\nv -0.148438 -0.5535 -0.328125\nv -0.140625 -0.551034 -0.328125\nv -0.132812 -0.548252 -0.328125\nv -0.109375 -0.547053 -0.328125\nv -0.101562 -0.547438 -0.328125\nv -0.09375 -0.547996 -0.328125\nv -0.0859375 -0.548722 -0.328125\nv -0.078125 -0.549561 -0.328125\nv -0.0703125 -0.550505 -0.328125\nv -0.0625 -0.551573 -0.328125\nv -0.0546875 -0.552452 -0.328125\nv -0.046875 -0.553067 -0.328125\nv -0.0390625 -0.553664 -0.328125\nv -0.0270153 -0.554688 -0.328125\nv -0.03125 -0.554315 -0.328125\nv -0.0234375 -0.554688 -0.323939\nv 0.101562 -0.554688 -0.321597\nv 0.109375 -0.554688 -0.323283\nv 0.117188 -0.554688 -0.325337\nv 0.125 -0.554688 -0.326149\nv 0.132812 -0.554688 -0.325307\nv 0.140625 -0.554688 -0.324394\nv 0.148438 -0.554688 -0.324045\nv 0.15625 -0.554688 -0.324124\nv 0.164062 -0.554688 -0.325539\nv 0.175145 -0.554688 -0.328125\nv 0.171875 -0.554688 -0.327334\nv 0.179688 -0.554612 -0.328125\nv 0.1875 -0.55443 -0.328125\nv 0.195312 -0.554187 -0.328125\nv 0.203125 -0.553943 -0.328125\nv 0.210938 -0.553774 -0.328125\nv 0.21875 -0.55372 -0.328125\nv 0.226562 -0.553673 -0.328125\nv 0.234375 -0.553985 -0.328125\nv 0.243617 -0.554688 -0.328125\nv 0.242188 -0.55455 -0.328125\nv 0.25 -0.554688 -0.321113\nv 0.257812 -0.554688 -0.321328\nv 0.265625 -0.554688 -0.322832\nv 0.273438 -0.554688 -0.323543\nv 0.28125 -0.554688 -0.323491\nv 0.289062 -0.554688 -0.323743\nv 0.296875 -0.554688 -0.324309\nv 0.304688 -0.554688 -0.324598\nv 0.3125 -0.554688 -0.324964\nv 0.320312 -0.554688 -0.324052\nv 0.328125 -0.554688 -0.323351\nv 0.335938 -0.554688 -0.323702\nv 0.34375 -0.554688 -0.324416\nv 0.351562 -0.554688 -0.324247\nv 0.359375 -0.554688 -0.323312\nv 0.367188 -0.554688 -0.321151\nv 0.504205 -0.554688 -0.328125\nv -0.331264 -0.546875 -0.328125\nv -0.126227 -0.546875 -0.328125\nv -0.125 -0.546545 -0.328125\nv -0.116911 -0.546875 -0.328125\nv -0.117188 -0.546867 -0.328125\nv -0.109375 -0.546875 -0.32183\nv 0.504246 -0.546875 -0.328125\nv -0.331099 -0.539062 -0.328125\nv 0.504198 -0.539062 -0.328125\nv -0.330987 -0.53125 -0.328125\nv 0.504221 -0.53125 -0.328125\nv -0.331015 -0.523438 -0.328125\nv 0.504313 -0.523438 -0.328125\nv -0.33113 -0.515625 -0.328125\nv 0.504486 -0.515625 -0.328125\nv -0.331266 -0.507812 -0.328125\nv 0.504382 -0.507812 -0.328125\nv -0.331443 -0.5 -0.328125\nv 0.504152 -0.5 -0.328125\nv -0.331499 -0.492188 -0.328125\nv -0.132812 -0.487045 -0.328125\nv -0.125 -0.487097 -0.328125\nv -0.117188 -0.485062 -0.328125\nv 0.304688 -0.492188 -0.321935\nv 0.3125 -0.485855 -0.328125\nv 0.3125 -0.492188 -0.323854\nv 0.320312 -0.485686 -0.328125\nv 0.320312 -0.492188 -0.323858\nv 0.328125 -0.492188 -0.321438\nv 0.335938 -0.492188 -0.320673\nv 0.50411 -0.492188 -0.328125\nv -0.331671 -0.484375 -0.328125\nv -0.15625 -0.478011 -0.328125\nv -0.15625 -0.484375 -0.320844\nv -0.148438 -0.480761 -0.328125\nv -0.148438 -0.484375 -0.322929\nv -0.139125 -0.484375 -0.328125\nv -0.140625 -0.48376 -0.328125\nv -0.140625 -0.484375 -0.327006\nv -0.114725 -0.484375 -0.328125\nv -0.109375 -0.483 -0.328125\nv -0.109375 -0.484375 -0.326023\nv -0.101562 -0.481015 -0.328125\nv -0.101562 -0.484375 -0.323494\nv -0.09375 -0.479137 -0.328125\nv -0.09375 -0.484375 -0.322028\nv -0.0859375 -0.477618 -0.328125\nv -0.0859375 -0.484375 -0.321433\nv 0.21875 -0.477023 -0.328125\nv 0.226562 -0.478412 -0.328125\nv 0.234375 -0.478582 -0.328125\nv 0.242188 -0.478756 -0.328125\nv 0.242188 -0.484375 -0.320933\nv 0.25 -0.479087 -0.328125\nv 0.25 -0.484375 -0.321675\nv 0.257812 -0.479353 -0.328125\nv 0.257812 -0.484375 -0.321885\nv 0.265625 -0.479005 -0.328125\nv 0.265625 -0.484375 -0.321788\nv 0.273438 -0.477927 -0.328125\nv 0.273438 -0.484375 -0.322309\nv 0.28125 -0.47843 -0.328125\nv 0.28125 -0.484375 -0.323317\nv 0.289062 -0.479511 -0.328125\nv 0.289062 -0.484375 -0.324089\nv 0.296875 -0.481009 -0.328125\nv 0.296875 -0.484375 -0.325427\nv 0.308545 -0.484375 -0.328125\nv 0.304688 -0.483051 -0.328125\nv 0.304688 -0.484375 -0.327191\nv 0.323568 -0.484375 -0.328125\nv 0.328125 -0.48267 -0.328125\nv 0.328125 -0.484375 -0.326771\nv 0.335938 -0.479858 -0.328125\nv 0.335938 -0.484375 -0.325018\nv 0.34375 -0.478169 -0.328125\nv 0.34375 -0.484375 -0.324639\nv 0.351562 -0.476687 -0.328125\nv 0.351562 -0.484375 -0.323764\nv 0.359375 -0.484375 -0.321955\nv 0.504087 -0.484375 -0.328125\nv -0.331821 -0.476562 -0.328125\nv -0.210938 -0.476562 -0.321246\nv -0.203125 -0.476562 -0.322139\nv -0.195312 -0.468812 -0.328125\nv -0.195312 -0.476562 -0.322827\nv -0.1875 -0.470179 -0.328125\nv -0.1875 -0.476562 -0.323945\nv -0.179688 -0.470765 -0.328125\nv -0.179688 -0.476562 -0.324568\nv -0.171875 -0.472022 -0.328125\nv -0.171875 -0.476562 -0.324706\nv -0.160196 -0.476562 -0.328125\nv -0.164062 -0.475159 -0.328125\nv -0.164062 -0.476562 -0.326647\nv -0.0805055 -0.476562 -0.328125\nv -0.078125 -0.476174 -0.328125\nv -0.078125 -0.476562 -0.327676\nv -0.0703125 -0.475669 -0.328125\nv -0.0703125 -0.476562 -0.326946\nv -0.0625 -0.474767 -0.328125\nv -0.0625 -0.476562 -0.325764\nv -0.0546875 -0.473428 -0.328125\nv -0.0546875 -0.476562 -0.324274\nv -0.046875 -0.471953 -0.328125\nv -0.046875 -0.476562 -0.322572\nv -0.0390625 -0.470422 -0.328125\nv -0.0390625 -0.476562 -0.320875\nv -0.03125 -0.469015 -0.328125\nv 0.1875 -0.469556 -0.328125\nv 0.195312 -0.471274 -0.328125\nv 0.203125 -0.472742 -0.328125\nv 0.203125 -0.476562 -0.32234\nv 0.217314 -0.476562 -0.328125\nv 0.210938 -0.474575 -0.328125\nv 0.210938 -0.476562 -0.324754\nv 0.351949 -0.476562 -0.328125\nv 0.359375 -0.474198 -0.328125\nv 0.359375 -0.476562 -0.326597\nv 0.367188 -0.470064 -0.328125\nv 0.367188 -0.476562 -0.324959\nv 0.375 -0.476562 -0.321681\nv 0.503991 -0.476562 -0.328125\nv -0.332005 -0.46875 -0.328125\nv -0.21875 -0.46875 -0.322728\nv -0.210938 -0.46875 -0.325797\nv -0.195591 -0.46875 -0.328125\nv -0.203125 -0.46697 -0.328125\nv -0.203125 -0.46875 -0.327177\nv -0.0293961 -0.46875 -0.328125\nv -0.0234375 -0.467842 -0.328125\nv -0.0234375 -0.46875 -0.326905\nv -0.015625 -0.467043 -0.328125\nv -0.015625 -0.46875 -0.325483\nv -0.0078125 -0.466454 -0.328125\nv -0.0078125 -0.46875 -0.324171\nv 0 -0.465666 -0.328125\nv 0 -0.46875 -0.322988\nv 0.0078125 -0.465369 -0.328125\nv 0.0078125 -0.46875 -0.32234\nv 0.015625 -0.464945 -0.328125\nv 0.015625 -0.46875 -0.321895\nv 0.0234375 -0.464486 -0.328125\nv 0.0234375 -0.46875 -0.321551\nv 0.03125 -0.464306 -0.328125\nv 0.03125 -0.46875 -0.321007\nv 0.0390625 -0.463787 -0.328125\nv 0.046875 -0.462656 -0.328125\nv 0.0546875 -0.461082 -0.328125\nv 0.148438 -0.461058 -0.328125\nv 0.15625 -0.463103 -0.328125\nv 0.164062 -0.464805 -0.328125\nv 0.171875 -0.466317 -0.328125\nv 0.183697 -0.46875 -0.328125\nv 0.179688 -0.467913 -0.328125\nv 0.179688 -0.46875 -0.32438\nv 0.368269 -0.46875 -0.328125\nv 0.375 -0.46875 -0.32425\nv 0.503873 -0.46875 -0.328125\nv -0.332261 -0.460938 -0.328125\nv -0.21875 -0.460938 -0.324403\nv -0.210182 -0.460938 -0.328125\nv -0.210938 -0.459524 -0.328125\nv -0.210938 -0.460938 -0.327814\nv 0.0563415 -0.460938 -0.328125\nv 0.0625 -0.460566 -0.328125\nv 0.0625 -0.460938 -0.327143\nv 0.0703125 -0.460356 -0.328125\nv 0.0703125 -0.460938 -0.326175\nv 0.078125 -0.459992 -0.328125\nv 0.078125 -0.460938 -0.323142\nv 0.0859375 -0.459301 -0.328125\nv 0.09375 -0.458477 -0.328125\nv 0.101562 -0.45786 -0.328125\nv 0.109375 -0.457579 -0.328125\nv 0.117188 -0.457481 -0.328125\nv 0.125 -0.457527 -0.328125\nv 0.132812 -0.458114 -0.328125\nv 0.147945 -0.460938 -0.328125\nv 0.140625 -0.459336 -0.328125\nv 0.140625 -0.460938 -0.321762\nv 0.3725 -0.460938 -0.328125\nv 0.375 -0.460938 -0.326563\nv 0.382812 -0.460938 -0.321141\nv 0.503716 -0.460938 -0.328125\nv -0.332527 -0.453125 -0.328125\nv -0.213415 -0.453125 -0.328125\nv -0.21875 -0.453125 -0.32499\nv 0.374846 -0.453125 -0.328125\nv 0.375 -0.451561 -0.328125\nv 0.375 -0.453125 -0.328007\nv 0.382812 -0.453125 -0.321533\nv 0.503604 -0.453125 -0.328125\nv -0.332663 -0.445312 -0.328125\nv -0.214956 -0.445312 -0.328125\nv -0.21875 -0.445312 -0.325191\nv 0.375502 -0.445312 -0.328125\nv 0.382812 -0.445312 -0.321649\nv 0.503536 -0.445312 -0.328125\nv -0.332576 -0.4375 -0.328125\nv -0.215415 -0.4375 -0.328125\nv -0.21875 -0.4375 -0.324921\nv 0.376268 -0.4375 -0.328125\nv 0.382812 -0.4375 -0.321668\nv 0.503603 -0.4375 -0.328125\nv -0.332457 -0.429688 -0.328125\nv -0.216209 -0.429688 -0.328125\nv -0.21875 -0.429688 -0.325094\nv 0.377893 -0.429688 -0.328125\nv 0.382812 -0.429688 -0.322429\nv 0.503738 -0.429688 -0.328125\nv -0.33226 -0.421875 -0.328125\nv -0.216863 -0.421875 -0.328125\nv -0.21875 -0.421875 -0.325189\nv 0.379702 -0.421875 -0.328125\nv 0.382812 -0.421875 -0.323927\nv 0.50393 -0.421875 -0.328125\nv -0.331876 -0.414062 -0.328125\nv -0.217043 -0.414062 -0.328125\nv -0.21875 -0.414062 -0.324667\nv 0.381208 -0.414062 -0.328125\nv 0.382812 -0.414062 -0.325521\nv 0.504188 -0.414062 -0.328125\nv -0.33125 -0.40625 -0.328125\nv -0.216955 -0.40625 -0.328125\nv -0.21875 -0.40625 -0.324093\nv 0.382376 -0.40625 -0.328125\nv 0.382812 -0.40625 -0.327203\nv 0.504312 -0.40625 -0.328125\nv -0.330676 -0.398438 -0.328125\nv -0.216651 -0.398438 -0.328125\nv -0.21875 -0.398438 -0.322505\nv 0.38256 -0.398438 -0.328125\nv 0.382812 -0.398438 -0.327403\nv 0.504428 -0.398438 -0.328125\nv -0.33004 -0.390625 -0.328125\nv -0.216139 -0.390625 -0.328125\nv 0.382221 -0.390625 -0.328125\nv 0.382812 -0.390625 -0.326343\nv 0.504508 -0.390625 -0.328125\nv -0.329408 -0.382812 -0.328125\nv -0.216178 -0.382812 -0.328125\nv 0.382584 -0.382812 -0.328125\nv 0.382812 -0.379144 -0.328125\nv 0.382812 -0.382812 -0.32723\nv 0.504707 -0.382812 -0.328125\nv -0.32865 -0.375 -0.328125\nv -0.328125 -0.370017 -0.328125\nv -0.328125 -0.375 -0.324698\nv -0.216205 -0.375 -0.328125\nv 0.383076 -0.375 -0.328125\nv 0.504819 -0.375 -0.328125\nv -0.327769 -0.367188 -0.328125\nv -0.216342 -0.367188 -0.328125\nv 0.383628 -0.367188 -0.328125\nv 0.504717 -0.367188 -0.328125\nv -0.326695 -0.359375 -0.328125\nv -0.216512 -0.359375 -0.328125\nv 0.384135 -0.359375 -0.328125\nv 0.504854 -0.359375 -0.328125\nv -0.325529 -0.351562 -0.328125\nv -0.216705 -0.351562 -0.328125\nv 0.384681 -0.351562 -0.328125\nv 0.505032 -0.351562 -0.328125\nv -0.324445 -0.34375 -0.328125\nv -0.216861 -0.34375 -0.328125\nv 0.38519 -0.34375 -0.328125\nv 0.505231 -0.34375 -0.328125\nv -0.323474 -0.335938 -0.328125\nv -0.21702 -0.335938 -0.328125\nv 0.385529 -0.335938 -0.328125\nv 0.505407 -0.335938 -0.328125\nv -0.322798 -0.328125 -0.328125\nv -0.21717 -0.328125 -0.328125\nv -0.21875 -0.328125 -0.320684\nv 0.385568 -0.328125 -0.328125\nv 0.505704 -0.328125 -0.328125\nv -0.32224 -0.320312 -0.328125\nv -0.320312 -0.320312 -0.321271\nv -0.217236 -0.320312 -0.328125\nv -0.21875 -0.320312 -0.320846\nv 0.385622 -0.320312 -0.328125\nv 0.506028 -0.320312 -0.328125\nv -0.321691 -0.3125 -0.328125\nv -0.320312 -0.3125 -0.322942\nv -0.217325 -0.3125 -0.328125\nv -0.21875 -0.3125 -0.321336\nv 0.385717 -0.3125 -0.328125\nv 0.506421 -0.3125 -0.328125\nv -0.321192 -0.304688 -0.328125\nv -0.320312 -0.304688 -0.324782\nv -0.217458 -0.304688 -0.328125\nv -0.21875 -0.304688 -0.322201\nv 0.385983 -0.304688 -0.328125\nv 0.506779 -0.304688 -0.328125\nv -0.320714 -0.296875 -0.328125\nv -0.320312 -0.290437 -0.328125\nv -0.320312 -0.296875 -0.326612\nv -0.21755 -0.296875 -0.328125\nv -0.21875 -0.296875 -0.322918\nv 0.386297 -0.296875 -0.328125\nv 0.50691 -0.296875 -0.328125\nv -0.320212 -0.289062 -0.328125\nv -0.217703 -0.289062 -0.328125\nv -0.21875 -0.289062 -0.323755\nv 0.386715 -0.289062 -0.328125\nv 0.506986 -0.289062 -0.328125\nv -0.319672 -0.28125 -0.328125\nv -0.218014 -0.28125 -0.328125\nv -0.21875 -0.28125 -0.325079\nv 0.387314 -0.28125 -0.328125\nv 0.506879 -0.28125 -0.328125\nv -0.319062 -0.273438 -0.328125\nv -0.218401 -0.273438 -0.328125\nv -0.21875 -0.273438 -0.326658\nv 0.387979 -0.273438 -0.328125\nv 0.506459 -0.273438 -0.328125\nv -0.31836 -0.265625 -0.328125\nv -0.218628 -0.265625 -0.328125\nv -0.21875 -0.265625 -0.327596\nv 0.388491 -0.265625 -0.328125\nv 0.505862 -0.265625 -0.328125\nv -0.317769 -0.257812 -0.328125\nv -0.21822 -0.257812 -0.328125\nv -0.21875 -0.257812 -0.325777\nv 0.388674 -0.257812 -0.328125\nv 0.505387 -0.257812 -0.328125\nv -0.317148 -0.25 -0.328125\nv -0.217797 -0.25 -0.328125\nv -0.21875 -0.25 -0.323869\nv 0.388871 -0.25 -0.328125\nv 0.505121 -0.25 -0.328125\nv -0.316747 -0.242188 -0.328125\nv -0.21746 -0.242188 -0.328125\nv -0.21875 -0.242188 -0.323249\nv 0.388854 -0.242188 -0.328125\nv 0.504856 -0.242188 -0.328125\nv -0.316593 -0.234375 -0.328125\nv -0.217249 -0.234375 -0.328125\nv -0.21875 -0.234375 -0.323113\nv 0.388999 -0.234375 -0.328125\nv 0.504588 -0.234375 -0.328125\nv -0.316279 -0.226562 -0.328125\nv -0.217318 -0.226562 -0.328125\nv -0.21875 -0.226562 -0.323624\nv 0.389275 -0.226562 -0.328125\nv 0.504407 -0.226562 -0.328125\nv -0.31601 -0.21875 -0.328125\nv -0.217409 -0.21875 -0.328125\nv -0.21875 -0.21875 -0.324087\nv 0.389421 -0.21875 -0.328125\nv 0.390625 -0.21875 -0.321459\nv 0.50425 -0.21875 -0.328125\nv -0.315797 -0.210938 -0.328125\nv -0.217281 -0.210938 -0.328125\nv -0.21875 -0.210938 -0.323434\nv 0.389674 -0.210938 -0.328125\nv 0.390625 -0.210938 -0.32353\nv 0.504069 -0.210938 -0.328125\nv -0.315683 -0.203125 -0.328125\nv -0.217234 -0.203125 -0.328125\nv -0.21875 -0.203125 -0.323195\nv 0.390283 -0.203125 -0.328125\nv 0.390625 -0.198348 -0.328125\nv 0.390625 -0.203125 -0.326599\nv 0.504016 -0.203125 -0.328125\nv -0.315108 -0.195312 -0.328125\nv -0.217282 -0.195312 -0.328125\nv -0.21875 -0.195312 -0.322942\nv 0.390852 -0.195312 -0.328125\nv 0.503857 -0.195312 -0.328125\nv -0.314631 -0.1875 -0.328125\nv -0.217346 -0.1875 -0.328125\nv -0.21875 -0.1875 -0.322066\nv 0.391275 -0.1875 -0.328125\nv 0.503392 -0.1875 -0.328125\nv -0.314271 -0.179688 -0.328125\nv -0.3125 -0.179688 -0.32074\nv -0.217379 -0.179688 -0.328125\nv -0.21875 -0.179688 -0.321951\nv 0.391551 -0.179688 -0.328125\nv 0.502909 -0.179688 -0.328125\nv -0.313783 -0.171875 -0.328125\nv -0.3125 -0.171875 -0.322412\nv -0.217552 -0.171875 -0.328125\nv -0.21875 -0.171875 -0.323367\nv 0.391886 -0.171875 -0.328125\nv 0.502409 -0.171875 -0.328125\nv -0.313264 -0.164062 -0.328125\nv -0.3125 -0.164062 -0.324589\nv -0.217852 -0.164062 -0.328125\nv -0.21875 -0.164062 -0.324857\nv 0.391789 -0.164062 -0.328125\nv 0.502054 -0.164062 -0.328125\nv -0.312709 -0.15625 -0.328125\nv -0.3125 -0.153242 -0.328125\nv -0.3125 -0.15625 -0.327309\nv -0.217857 -0.15625 -0.328125\nv -0.21875 -0.15625 -0.324884\nv 0.391632 -0.15625 -0.328125\nv 0.501895 -0.15625 -0.328125\nv -0.312178 -0.148438 -0.328125\nv -0.218016 -0.148438 -0.328125\nv -0.21875 -0.148438 -0.325527\nv 0.391401 -0.148438 -0.328125\nv 0.501615 -0.148438 -0.328125\nv -0.312126 -0.140625 -0.328125\nv -0.218187 -0.140625 -0.328125\nv -0.21875 -0.140625 -0.326204\nv 0.390811 -0.140625 -0.328125\nv 0.390625 -0.138597 -0.328125\nv 0.500992 -0.140625 -0.328125\nv 0.5 -0.140625 -0.322808\nv -0.311802 -0.132812 -0.328125\nv -0.218292 -0.132812 -0.328125\nv -0.21875 -0.132812 -0.326607\nv 0.390097 -0.132812 -0.328125\nv 0.390625 -0.132812 -0.326881\nv 0.500328 -0.132812 -0.328125\nv 0.5 -0.128341 -0.328125\nv 0.5 -0.132812 -0.326477\nv -0.311204 -0.125 -0.328125\nv -0.218116 -0.125 -0.328125\nv -0.21875 -0.125 -0.326103\nv 0.389153 -0.125 -0.328125\nv 0.390625 -0.125 -0.325096\nv 0.499713 -0.125 -0.328125\nv -0.310577 -0.117188 -0.328125\nv -0.217826 -0.117188 -0.328125\nv -0.21875 -0.117188 -0.325351\nv 0.388174 -0.117188 -0.328125\nv 0.390625 -0.117188 -0.322965\nv 0.499376 -0.117188 -0.328125\nv -0.310346 -0.109375 -0.328125\nv -0.217173 -0.109375 -0.328125\nv -0.21875 -0.109375 -0.32455\nv 0.386502 -0.109375 -0.328125\nv 0.499291 -0.109375 -0.328125\nv -0.309948 -0.101562 -0.328125\nv -0.216168 -0.101562 -0.328125\nv -0.21875 -0.101562 -0.323391\nv 0.384309 -0.101562 -0.328125\nv 0.382812 -0.0972703 -0.328125\nv 0.499608 -0.101562 -0.328125\nv 0.5 -0.0990724 -0.328125\nv -0.310137 -0.09375 -0.328125\nv -0.214074 -0.09375 -0.328125\nv -0.21875 -0.09375 -0.32157\nv 0.381489 -0.09375 -0.328125\nv 0.382812 -0.09375 -0.325845\nv 0.500733 -0.09375 -0.328125\nv 0.5 -0.09375 -0.323089\nv -0.310879 -0.0859375 -0.328125\nv -0.21211 -0.0859375 -0.328125\nv -0.21875 -0.0859375 -0.320482\nv -0.210938 -0.0817429 -0.328125\nv 0.378437 -0.0859375 -0.328125\nv 0.382812 -0.0859375 -0.322575\nv 0.501766 -0.0859375 -0.328125\nv -0.31178 -0.078125 -0.328125\nv -0.3125 -0.0711115 -0.328125\nv -0.21875 -0.078125 -0.320568\nv -0.208877 -0.078125 -0.328125\nv -0.210938 -0.078125 -0.326741\nv -0.203125 -0.0743194 -0.328125\nv -0.195312 -0.0708762 -0.328125\nv 0.367188 -0.0705343 -0.328125\nv 0.375746 -0.078125 -0.328125\nv 0.375 -0.0768724 -0.328125\nv 0.382812 -0.078125 -0.321001\nv 0.502571 -0.078125 -0.328125\nv -0.312593 -0.0703125 -0.328125\nv -0.3125 -0.0703125 -0.327665\nv -0.203125 -0.0703125 -0.32368\nv -0.193 -0.0703125 -0.328125\nv -0.195312 -0.0703125 -0.327468\nv -0.1875 -0.0684798 -0.328125\nv -0.179688 -0.0663043 -0.328125\nv -0.171875 -0.0651301 -0.328125\nv -0.164062 -0.0640948 -0.328125\nv -0.15625 -0.062902 -0.328125\nv -0.0625 -0.0627561 -0.328125\nv -0.0546875 -0.0629397 -0.328125\nv -0.046875 -0.0630714 -0.328125\nv -0.0390625 -0.0631921 -0.328125\nv -0.03125 -0.0635332 -0.328125\nv -0.0234375 -0.0639514 -0.328125\nv -0.015625 -0.0646584 -0.328125\nv -0.0078125 -0.0654752 -0.328125\nv 0 -0.0660774 -0.328125\nv 0.0078125 -0.0665988 -0.328125\nv 0.015625 -0.0671484 -0.328125\nv 0.0234375 -0.0679393 -0.328125\nv 0.03125 -0.068576 -0.328125\nv 0.0390625 -0.0689254 -0.328125\nv 0.046875 -0.069108 -0.328125\nv 0.0546875 -0.0692732 -0.328125\nv 0.0625 -0.0693904 -0.328125\nv 0.0703125 -0.069428 -0.328125\nv 0.078125 -0.0694625 -0.328125\nv 0.0859375 -0.06949 -0.328125\nv 0.09375 -0.0692566 -0.328125\nv 0.101562 -0.0690208 -0.328125\nv 0.109375 -0.0687373 -0.328125\nv 0.117188 -0.0684229 -0.328125\nv 0.125 -0.068127 -0.328125\nv 0.132812 -0.0677744 -0.328125\nv 0.140625 -0.0675222 -0.328125\nv 0.148438 -0.0672772 -0.328125\nv 0.15625 -0.0669275 -0.328125\nv 0.164062 -0.0665612 -0.328125\nv 0.171875 -0.0662387 -0.328125\nv 0.179688 -0.0659007 -0.328125\nv 0.1875 -0.0653827 -0.328125\nv 0.195312 -0.0649161 -0.328125\nv 0.203125 -0.0644941 -0.328125\nv 0.210938 -0.0641134 -0.328125\nv 0.21875 -0.0637453 -0.328125\nv 0.226562 -0.0633908 -0.328125\nv 0.234375 -0.0631215 -0.328125\nv 0.242188 -0.0627038 -0.328125\nv 0.265625 -0.0626486 -0.328125\nv 0.273438 -0.0629262 -0.328125\nv 0.28125 -0.0629491 -0.328125\nv 0.289062 -0.0627403 -0.328125\nv 0.3125 -0.0629686 -0.328125\nv 0.320312 -0.0634833 -0.328125\nv 0.328125 -0.0638336 -0.328125\nv 0.335938 -0.0645677 -0.328125\nv 0.34375 -0.0656764 -0.328125\nv 0.351562 -0.0666525 -0.328125\nv 0.366458 -0.0703125 -0.328125\nv 0.359375 -0.0683768 -0.328125\nv 0.367188 -0.0703125 -0.327886\nv 0.375 -0.0703125 -0.323709\nv 0.503706 -0.0703125 -0.328125\nv -0.312963 -0.0625 -0.328125\nv -0.3125 -0.0625 -0.325872\nv -0.195312 -0.0625 -0.322061\nv -0.1875 -0.0625 -0.323745\nv -0.179688 -0.0625 -0.325229\nv -0.171875 -0.0625 -0.326029\nv -0.164062 -0.0625 -0.326902\nv -0.154239 -0.0625 -0.328125\nv -0.15625 -0.0625 -0.327828\nv -0.148438 -0.0605577 -0.328125\nv -0.140625 -0.0582398 -0.328125\nv -0.132812 -0.0584861 -0.328125\nv -0.125 -0.0587932 -0.328125\nv -0.117188 -0.0593439 -0.328125\nv -0.109375 -0.0598818 -0.328125\nv -0.101562 -0.0600593 -0.328125\nv -0.09375 -0.0604878 -0.328125\nv -0.0859375 -0.0611639 -0.328125\nv -0.078125 -0.0619415 -0.328125\nv -0.0691902 -0.0625 -0.328125\nv -0.0703125 -0.0624316 -0.328125\nv -0.0625 -0.0625 -0.327962\nv -0.0546875 -0.0625 -0.32784\nv -0.046875 -0.0625 -0.32775\nv -0.0390625 -0.0625 -0.327644\nv -0.03125 -0.0625 -0.327348\nv -0.0234375 -0.0625 -0.327026\nv -0.015625 -0.0625 -0.326489\nv -0.0078125 -0.0625 -0.325817\nv 0 -0.0625 -0.325356\nv 0.0078125 -0.0625 -0.325086\nv 0.015625 -0.0625 -0.324835\nv 0.0234375 -0.0625 -0.32424\nv 0.03125 -0.0625 -0.323685\nv 0.0390625 -0.0625 -0.323322\nv 0.046875 -0.0625 -0.32306\nv 0.0546875 -0.0625 -0.322901\nv 0.0625 -0.0625 -0.322783\nv 0.0703125 -0.0625 -0.322637\nv 0.078125 -0.0625 -0.322459\nv 0.0859375 -0.0625 -0.322235\nv 0.09375 -0.0625 -0.322233\nv 0.101562 -0.0625 -0.32226\nv 0.109375 -0.0625 -0.322401\nv 0.117188 -0.0625 -0.322579\nv 0.125 -0.0625 -0.322731\nv 0.132812 -0.0625 -0.323039\nv 0.140625 -0.0625 -0.323367\nv 0.148438 -0.0625 -0.323674\nv 0.15625 -0.0625 -0.323995\nv 0.164062 -0.0625 -0.324318\nv 0.171875 -0.0625 -0.324651\nv 0.179688 -0.0625 -0.325023\nv 0.1875 -0.0625 -0.325559\nv 0.195312 -0.0625 -0.326019\nv 0.203125 -0.0625 -0.32639\nv 0.210938 -0.0625 -0.326735\nv 0.21875 -0.0625 -0.32705\nv 0.226562 -0.0625 -0.327345\nv 0.234375 -0.0625 -0.32757\nv 0.24663 -0.0625 -0.328125\nv 0.242188 -0.0625 -0.32794\nv 0.25 -0.0621413 -0.328125\nv 0.261681 -0.0625 -0.328125\nv 0.257812 -0.0621827 -0.328125\nv 0.265625 -0.0625 -0.327973\nv 0.273438 -0.0625 -0.327674\nv 0.28125 -0.0625 -0.327642\nv 0.295484 -0.0625 -0.328125\nv 0.289062 -0.0625 -0.327858\nv 0.296875 -0.0623761 -0.328125\nv 0.306373 -0.0625 -0.328125\nv 0.304688 -0.0622239 -0.328125\nv 0.3125 -0.0625 -0.32762\nv 0.320312 -0.0625 -0.327108\nv 0.328125 -0.0625 -0.326834\nv 0.335938 -0.0625 -0.326252\nv 0.34375 -0.0625 -0.325416\nv 0.351562 -0.0625 -0.324397\nv 0.359375 -0.0625 -0.322837\nv 0.367188 -0.0625 -0.321396\nv 0.50504 -0.0625 -0.328125\nv -0.313078 -0.0546875 -0.328125\nv -0.3125 -0.0546875 -0.325255\nv -0.1875 -0.0546875 -0.321327\nv -0.179688 -0.0546875 -0.322622\nv -0.171875 -0.0546875 -0.323328\nv -0.164062 -0.0546875 -0.323902\nv -0.15625 -0.0546875 -0.32472\nv -0.148438 -0.0546875 -0.325906\nv -0.140625 -0.0546875 -0.326766\nv -0.132812 -0.0546875 -0.326708\nv -0.125 -0.0546875 -0.326644\nv -0.117188 -0.0546875 -0.32652\nv -0.109375 -0.0546875 -0.326352\nv -0.101562 -0.0546875 -0.326244\nv -0.09375 -0.0546875 -0.326107\nv -0.0859375 -0.0546875 -0.325911\nv -0.078125 -0.0546875 -0.325662\nv -0.0703125 -0.0546875 -0.325534\nv -0.0625 -0.0546875 -0.325357\nv -0.0546875 -0.0546875 -0.325113\nv -0.046875 -0.0546875 -0.324873\nv -0.0390625 -0.0546875 -0.324538\nv -0.03125 -0.0546875 -0.324248\nv -0.0234375 -0.0546875 -0.323988\nv -0.015625 -0.0546875 -0.32352\nv -0.0078125 -0.0546875 -0.322932\nv 0 -0.0546875 -0.3226\nv 0.0078125 -0.0546875 -0.322364\nv 0.015625 -0.0546875 -0.322106\nv 0.0234375 -0.0546875 -0.32139\nv 0.03125 -0.0546875 -0.320871\nv 0.0390625 -0.0546875 -0.320583\nv 0.046875 -0.0546875 -0.320355\nv 0.148438 -0.0546875 -0.320653\nv 0.15625 -0.0546875 -0.321038\nv 0.164062 -0.0546875 -0.321365\nv 0.171875 -0.0546875 -0.321659\nv 0.179688 -0.0546875 -0.321949\nv 0.1875 -0.0546875 -0.322525\nv 0.195312 -0.0546875 -0.3231\nv 0.203125 -0.0546875 -0.323533\nv 0.210938 -0.0546875 -0.32396\nv 0.21875 -0.0546875 -0.324382\nv 0.226562 -0.0546875 -0.324682\nv 0.234375 -0.0546875 -0.32489\nv 0.242188 -0.0546875 -0.325148\nv 0.25 -0.0546875 -0.32515\nv 0.257812 -0.0546875 -0.324876\nv 0.265625 -0.0546875 -0.324569\nv 0.273438 -0.0546875 -0.324224\nv 0.28125 -0.0546875 -0.324222\nv 0.289062 -0.0546875 -0.324313\nv 0.296875 -0.0546875 -0.324681\nv 0.304688 -0.0546875 -0.324856\nv 0.3125 -0.0546875 -0.324607\nv 0.320312 -0.0546875 -0.324479\nv 0.328125 -0.0546875 -0.324322\nv 0.335938 -0.0546875 -0.323794\nv 0.34375 -0.0546875 -0.323255\nv 0.351562 -0.0546875 -0.322509\nv 0.359375 -0.0546875 -0.321374\nv 0.505427 -0.0546875 -0.328125\nv -0.313207 -0.046875 -0.328125\nv -0.3125 -0.046875 -0.324528\nv -0.179688 -0.046875 -0.32053\nv -0.171875 -0.046875 -0.321167\nv -0.164062 -0.046875 -0.321504\nv -0.15625 -0.046875 -0.322417\nv -0.148438 -0.046875 -0.323501\nv -0.140625 -0.046875 -0.32431\nv -0.132812 -0.046875 -0.324358\nv -0.125 -0.046875 -0.324351\nv -0.117188 -0.046875 -0.324221\nv -0.109375 -0.046875 -0.324083\nv -0.101562 -0.046875 -0.324017\nv -0.09375 -0.046875 -0.323944\nv -0.0859375 -0.046875 -0.323742\nv -0.078125 -0.046875 -0.323544\nv -0.0703125 -0.046875 -0.32344\nv -0.0625 -0.046875 -0.323204\nv -0.0546875 -0.046875 -0.322839\nv -0.046875 -0.046875 -0.322504\nv -0.0390625 -0.046875 -0.32208\nv -0.03125 -0.046875 -0.321705\nv -0.0234375 -0.046875 -0.321402\nv -0.015625 -0.046875 -0.320936\nv 0.1875 -0.046875 -0.320658\nv 0.195312 -0.046875 -0.321191\nv 0.203125 -0.046875 -0.321634\nv 0.210938 -0.046875 -0.322075\nv 0.21875 -0.046875 -0.322496\nv 0.226562 -0.046875 -0.322698\nv 0.234375 -0.046875 -0.322912\nv 0.242188 -0.046875 -0.3232\nv 0.25 -0.046875 -0.323158\nv 0.257812 -0.046875 -0.322897\nv 0.265625 -0.046875 -0.322639\nv 0.273438 -0.046875 -0.322278\nv 0.28125 -0.046875 -0.322193\nv 0.289062 -0.046875 -0.322112\nv 0.296875 -0.046875 -0.322332\nv 0.304688 -0.046875 -0.322588\nv 0.3125 -0.046875 -0.322721\nv 0.320312 -0.046875 -0.322784\nv 0.328125 -0.046875 -0.322656\nv 0.335938 -0.046875 -0.322326\nv 0.34375 -0.046875 -0.32196\nv 0.351562 -0.046875 -0.321051\nv 0.505719 -0.046875 -0.328125\nv -0.313002 -0.0390625 -0.328125\nv -0.3125 -0.0390625 -0.326036\nv -0.15625 -0.0390625 -0.320548\nv -0.148438 -0.0390625 -0.321614\nv -0.140625 -0.0390625 -0.322437\nv -0.132812 -0.0390625 -0.32256\nv -0.125 -0.0390625 -0.322593\nv -0.117188 -0.0390625 -0.322488\nv -0.109375 -0.0390625 -0.322316\nv -0.101562 -0.0390625 -0.32223\nv -0.09375 -0.0390625 -0.322133\nv -0.0859375 -0.0390625 -0.321945\nv -0.078125 -0.0390625 -0.321801\nv -0.0703125 -0.0390625 -0.321734\nv -0.0625 -0.0390625 -0.321576\nv -0.0546875 -0.0390625 -0.321222\nv -0.046875 -0.0390625 -0.320818\nv 0.203125 -0.0390625 -0.320621\nv 0.210938 -0.0390625 -0.321021\nv 0.21875 -0.0390625 -0.321355\nv 0.226562 -0.0390625 -0.321526\nv 0.234375 -0.0390625 -0.32178\nv 0.242188 -0.0390625 -0.322176\nv 0.25 -0.0390625 -0.322122\nv 0.257812 -0.0390625 -0.321885\nv 0.265625 -0.0390625 -0.321616\nv 0.273438 -0.0390625 -0.32127\nv 0.28125 -0.0390625 -0.321066\nv 0.289062 -0.0390625 -0.320887\nv 0.296875 -0.0390625 -0.32102\nv 0.304688 -0.0390625 -0.321236\nv 0.3125 -0.0390625 -0.321412\nv 0.320312 -0.0390625 -0.321399\nv 0.328125 -0.0390625 -0.321285\nv 0.335938 -0.0390625 -0.3211\nv 0.34375 -0.0390625 -0.320981\nv 0.505375 -0.0390625 -0.328125\nv -0.31322 -0.03125 -0.328125\nv -0.3125 -0.03125 -0.325644\nv -0.140625 -0.03125 -0.320835\nv -0.132812 -0.03125 -0.320863\nv -0.125 -0.03125 -0.320928\nv -0.117188 -0.03125 -0.320839\nv -0.109375 -0.03125 -0.320634\nv -0.101562 -0.03125 -0.320603\nv -0.09375 -0.03125 -0.32057\nv -0.0859375 -0.03125 -0.32038\nv 0.21875 -0.03125 -0.320506\nv 0.226562 -0.03125 -0.320707\nv 0.234375 -0.03125 -0.321098\nv 0.242188 -0.03125 -0.321466\nv 0.25 -0.03125 -0.321373\nv 0.257812 -0.03125 -0.321134\nv 0.265625 -0.03125 -0.320812\nv 0.273438 -0.03125 -0.320474\nv 0.304688 -0.03125 -0.320322\nv 0.3125 -0.03125 -0.320326\nv 0.504955 -0.03125 -0.328125\nv -0.313289 -0.0234375 -0.328125\nv -0.3125 -0.0234375 -0.325232\nv 0.504565 -0.0234375 -0.328125\nv -0.313406 -0.015625 -0.328125\nv -0.3125 -0.015625 -0.3241\nv 0.503897 -0.015625 -0.328125\nv -0.313165 -0.0078125 -0.328125\nv -0.3125 -0.0078125 -0.324429\nv 0.503345 -0.0078125 -0.328125\nv -0.312561 0 -0.328125\nv -0.3125 0.000852418 -0.328125\nv -0.3125 0 -0.327538\nv 0.503194 0 -0.328125\nv -0.312022 0.0078125 -0.328125\nv 0.503402 0.0078125 -0.328125\nv -0.311914 0.015625 -0.328125\nv 0.503653 0.015625 -0.328125\nv -0.311878 0.0234375 -0.328125\nv 0.503514 0.0234375 -0.328125\nv -0.311936 0.03125 -0.328125\nv 0.502157 0.03125 -0.328125\nv -0.311915 0.0390625 -0.328125\nv 0.500079 0.0390625 -0.328125\nv 0.5 0.0392362 -0.328125\nv 0.5 0.0390625 -0.327706\nv -0.311754 0.046875 -0.328125\nv 0.495586 0.046875 -0.328125\nv 0.492188 0.0503009 -0.328125\nv -0.310395 0.0546875 -0.328125\nv 0.476562 0.061018 -0.328125\nv 0.486297 0.0546875 -0.328125\nv 0.484375 0.0562154 -0.328125\nv -0.309099 0.0625 -0.328125\nv 0.101562 0.0702707 -0.328125\nv 0.109375 0.0702491 -0.328125\nv 0.117188 0.0702425 -0.328125\nv 0.125 0.0702367 -0.328125\nv 0.132812 0.0702156 -0.328125\nv 0.140625 0.0701858 -0.328125\nv 0.148438 0.0701522 -0.328125\nv 0.15625 0.0701713 -0.328125\nv 0.164062 0.0702193 -0.328125\nv 0.171875 0.0702408 -0.328125\nv 0.179688 0.0702476 -0.328125\nv 0.1875 0.0702391 -0.328125\nv 0.195312 0.0702565 -0.328125\nv 0.210938 0.0702625 -0.328125\nv 0.21875 0.0702574 -0.328125\nv 0.226562 0.0702692 -0.328125\nv 0.234375 0.070248 -0.328125\nv 0.242188 0.0701922 -0.328125\nv 0.25 0.070222 -0.328125\nv 0.257812 0.0701816 -0.328125\nv 0.265625 0.0701577 -0.328125\nv 0.273438 0.070061 -0.328125\nv 0.28125 0.0700192 -0.328125\nv 0.289062 0.0701006 -0.328125\nv 0.296875 0.0702339 -0.328125\nv 0.304688 0.0702157 -0.328125\nv 0.3125 0.0701414 -0.328125\nv 0.320312 0.0700247 -0.328125\nv 0.328125 0.069908 -0.328125\nv 0.335938 0.0698522 -0.328125\nv 0.34375 0.0696726 -0.328125\nv 0.351562 0.0694983 -0.328125\nv 0.359375 0.0691559 -0.328125\nv 0.367188 0.0687825 -0.328125\nv 0.375 0.0685032 -0.328125\nv 0.382812 0.0683991 -0.328125\nv 0.390625 0.0682411 -0.328125\nv 0.398438 0.0679781 -0.328125\nv 0.40625 0.0679554 -0.328125\nv 0.414062 0.067916 -0.328125\nv 0.421875 0.0678578 -0.328125\nv 0.429688 0.0678617 -0.328125\nv 0.4375 0.0680952 -0.328125\nv 0.445312 0.068533 -0.328125\nv 0.453125 0.0675959 -0.328125\nv 0.460938 0.0656817 -0.328125\nv 0.47345 0.0625 -0.328125\nv 0.46875 0.0645264 -0.328125\nv -0.309323 0.0703125 -0.328125\nv -0.1875 0.0766265 -0.328125\nv -0.179688 0.0751134 -0.328125\nv -0.171875 0.0740435 -0.328125\nv -0.164062 0.0732627 -0.328125\nv -0.15625 0.0724909 -0.328125\nv -0.148438 0.072138 -0.328125\nv -0.140625 0.0722144 -0.328125\nv -0.132812 0.0723246 -0.328125\nv -0.125 0.0724398 -0.328125\nv -0.117188 0.0724265 -0.328125\nv -0.109375 0.0723751 -0.328125\nv -0.101562 0.0723733 -0.328125\nv -0.09375 0.0723042 -0.328125\nv -0.0859375 0.072243 -0.328125\nv -0.078125 0.072143 -0.328125\nv -0.0703125 0.0719825 -0.328125\nv -0.0625 0.071756 -0.328125\nv -0.0546875 0.0715359 -0.328125\nv -0.046875 0.071365 -0.328125\nv -0.0390625 0.0712717 -0.328125\nv -0.03125 0.0711839 -0.328125\nv -0.0234375 0.0711689 -0.328125\nv -0.015625 0.071143 -0.328125\nv -0.0078125 0.0710799 -0.328125\nv 0 0.0710953 -0.328125\nv 0.0078125 0.0710951 -0.328125\nv 0.015625 0.0710923 -0.328125\nv 0.0234375 0.071078 -0.328125\nv 0.03125 0.0710327 -0.328125\nv 0.0390625 0.0709706 -0.328125\nv 0.046875 0.0709513 -0.328125\nv 0.0546875 0.0708496 -0.328125\nv 0.0625 0.0707471 -0.328125\nv 0.0703125 0.0706397 -0.328125\nv 0.078125 0.0705376 -0.328125\nv 0.0859375 0.0704162 -0.328125\nv 0.0953775 0.0703125 -0.328125\nv 0.09375 0.0703231 -0.328125\nv 0.101562 0.0703125 -0.327744\nv 0.109375 0.0703125 -0.327573\nv 0.117188 0.0703125 -0.327515\nv 0.125 0.0703125 -0.327474\nv 0.132812 0.0703125 -0.327307\nv 0.140625 0.0703125 -0.327073\nv 0.148438 0.0703125 -0.326824\nv 0.15625 0.0703125 -0.32697\nv 0.164062 0.0703125 -0.32735\nv 0.171875 0.0703125 -0.327522\nv 0.179688 0.0703125 -0.327571\nv 0.1875 0.0703125 -0.327496\nv 0.201799 0.0703125 -0.328125\nv 0.195312 0.0703125 -0.327626\nv 0.204564 0.0703125 -0.328125\nv 0.203125 0.0703243 -0.328125\nv 0.210938 0.0703125 -0.327561\nv 0.21875 0.0703125 -0.327483\nv 0.226562 0.0703125 -0.327599\nv 0.234375 0.0703125 -0.32732\nv 0.242188 0.0703125 -0.326555\nv 0.25 0.0703125 -0.326524\nv 0.257812 0.0703125 -0.325316\nv 0.265625 0.0703125 -0.324509\nv 0.273438 0.0703125 -0.322541\nv 0.28125 0.0703125 -0.321418\nv 0.289062 0.0703125 -0.32222\nv 0.296875 0.0703125 -0.324391\nv 0.304688 0.0703125 -0.323158\nv -0.309763 0.078125 -0.328125\nv -0.203125 0.0820771 -0.328125\nv -0.193176 0.078125 -0.328125\nv -0.195312 0.0788498 -0.328125\nv -0.195312 0.078125 -0.322685\nv -0.31068 0.0859375 -0.328125\nv -0.208626 0.0859375 -0.328125\nv -0.210938 0.0879358 -0.328125\nv -0.210938 0.0859375 -0.324934\nv -0.31169 0.09375 -0.328125\nv -0.3125 0.100181 -0.328125\nv -0.215275 0.09375 -0.328125\nv -0.21875 0.0993856 -0.328125\nv -0.21875 0.09375 -0.323359\nv -0.312679 0.101562 -0.328125\nv -0.3125 0.101562 -0.32738\nv -0.219846 0.101562 -0.328125\nv -0.313368 0.109375 -0.328125\nv -0.3125 0.109375 -0.324819\nv -0.222 0.109375 -0.328125\nv -0.226562 0.109375 -0.321853\nv -0.313989 0.117188 -0.328125\nv -0.3125 0.117188 -0.323016\nv -0.223065 0.117188 -0.328125\nv -0.226562 0.117188 -0.323198\nv -0.31421 0.125 -0.328125\nv -0.3125 0.125 -0.322196\nv -0.223833 0.125 -0.328125\nv -0.226562 0.125 -0.323634\nv -0.314455 0.132812 -0.328125\nv -0.3125 0.132812 -0.321237\nv -0.224436 0.132812 -0.328125\nv -0.226562 0.132812 -0.324436\nv -0.314609 0.140625 -0.328125\nv -0.3125 0.140625 -0.320752\nv -0.225157 0.140625 -0.328125\nv -0.226562 0.140625 -0.325797\nv -0.314675 0.148438 -0.328125\nv -0.3125 0.148438 -0.320627\nv -0.225591 0.148438 -0.328125\nv -0.226562 0.148438 -0.326497\nv -0.314937 0.15625 -0.328125\nv -0.225924 0.15625 -0.328125\nv -0.226562 0.15625 -0.326918\nv -0.315221 0.164062 -0.328125\nv -0.225774 0.164062 -0.328125\nv -0.226562 0.164062 -0.326447\nv -0.315581 0.171875 -0.328125\nv -0.225204 0.171875 -0.328125\nv -0.226562 0.171875 -0.324929\nv -0.316105 0.179688 -0.328125\nv -0.224727 0.179688 -0.328125\nv -0.226562 0.179688 -0.323115\nv -0.316714 0.1875 -0.328125\nv -0.224235 0.1875 -0.328125\nv -0.226562 0.1875 -0.321053\nv -0.317305 0.195312 -0.328125\nv -0.223634 0.195312 -0.328125\nv -0.31787 0.203125 -0.328125\nv -0.223111 0.203125 -0.328125\nv -0.318419 0.210938 -0.328125\nv -0.222574 0.210938 -0.328125\nv -0.318986 0.21875 -0.328125\nv -0.22204 0.21875 -0.328125\nv -0.319582 0.226562 -0.328125\nv -0.221829 0.226562 -0.328125\nv -0.320232 0.234375 -0.328125\nv -0.320312 0.235525 -0.328125\nv -0.221748 0.234375 -0.328125\nv -0.320746 0.242188 -0.328125\nv -0.320312 0.242188 -0.326614\nv -0.22208 0.242188 -0.328125\nv -0.321061 0.25 -0.328125\nv -0.320312 0.25 -0.325666\nv -0.222557 0.25 -0.328125\nv -0.321441 0.257812 -0.328125\nv -0.320312 0.257812 -0.32461\nv -0.22292 0.257812 -0.328125\nv -0.321742 0.265625 -0.328125\nv -0.320312 0.265625 -0.324116\nv -0.223184 0.265625 -0.328125\nv -0.322015 0.273438 -0.328125\nv -0.320312 0.273438 -0.324025\nv -0.223418 0.273438 -0.328125\nv -0.322207 0.28125 -0.328125\nv -0.320312 0.28125 -0.323972\nv -0.223962 0.28125 -0.328125\nv -0.322342 0.289062 -0.328125\nv -0.320312 0.289062 -0.323919\nv -0.22449 0.289062 -0.328125\nv -0.322295 0.296875 -0.328125\nv -0.320312 0.296875 -0.324165\nv -0.225381 0.296875 -0.328125\nv -0.226562 0.296875 -0.32203\nv -0.322373 0.304688 -0.328125\nv -0.320312 0.304688 -0.324112\nv -0.226253 0.304688 -0.328125\nv -0.226562 0.307093 -0.328125\nv -0.226562 0.304688 -0.326707\nv -0.322676 0.3125 -0.328125\nv -0.320312 0.3125 -0.323739\nv -0.227389 0.3125 -0.328125\nv -0.322887 0.320312 -0.328125\nv -0.320312 0.320312 -0.323542\nv -0.228467 0.320312 -0.328125\nv -0.323038 0.328125 -0.328125\nv -0.320312 0.328125 -0.323501\nv -0.229827 0.328125 -0.328125\nv -0.323187 0.335938 -0.328125\nv -0.320312 0.335938 -0.323361\nv -0.231314 0.335938 -0.328125\nv -0.234375 0.335938 -0.322856\nv -0.323457 0.34375 -0.328125\nv -0.320312 0.34375 -0.323045\nv -0.232521 0.34375 -0.328125\nv -0.234375 0.34375 -0.325078\nv -0.323848 0.351562 -0.328125\nv -0.320312 0.351562 -0.322479\nv -0.233494 0.351562 -0.328125\nv -0.234375 0.351562 -0.326545\nv -0.324266 0.359375 -0.328125\nv -0.320312 0.359375 -0.321947\nv -0.234202 0.359375 -0.328125\nv -0.234375 0.361505 -0.328125\nv -0.234375 0.359375 -0.32777\nv -0.324726 0.367188 -0.328125\nv -0.320312 0.367188 -0.321405\nv -0.234869 0.367188 -0.328125\nv -0.32519 0.375 -0.328125\nv -0.320312 0.375 -0.320875\nv -0.235464 0.375 -0.328125\nv -0.325567 0.382812 -0.328125\nv -0.320312 0.382812 -0.32037\nv -0.235868 0.382812 -0.328125\nv -0.3259 0.390625 -0.328125\nv -0.236095 0.390625 -0.328125\nv -0.326173 0.398438 -0.328125\nv -0.23626 0.398438 -0.328125\nv -0.326394 0.40625 -0.328125\nv -0.236419 0.40625 -0.328125\nv -0.326617 0.414062 -0.328125\nv -0.236671 0.414062 -0.328125\nv -0.326809 0.421875 -0.328125\nv -0.237012 0.421875 -0.328125\nv -0.327081 0.429688 -0.328125\nv -0.237622 0.429688 -0.328125\nv -0.327383 0.4375 -0.328125\nv -0.238185 0.4375 -0.328125\nv -0.327712 0.445312 -0.328125\nv -0.238716 0.445312 -0.328125\nv -0.242188 0.445312 -0.321453\nv -0.328027 0.453125 -0.328125\nv -0.328125 0.455387 -0.328125\nv -0.239371 0.453125 -0.328125\nv -0.242188 0.453125 -0.322865\nv -0.328362 0.460938 -0.328125\nv -0.328125 0.460938 -0.327735\nv -0.23988 0.460938 -0.328125\nv -0.242188 0.460938 -0.323756\nv -0.328677 0.46875 -0.328125\nv -0.328125 0.46875 -0.3272\nv -0.240188 0.46875 -0.328125\nv -0.242188 0.46875 -0.32427\nv -0.328991 0.476562 -0.328125\nv -0.328125 0.476562 -0.326672\nv -0.24047 0.476562 -0.328125\nv -0.242188 0.476562 -0.324834\nv -0.329318 0.484375 -0.328125\nv -0.328125 0.484375 -0.32616\nv -0.24085 0.484375 -0.328125\nv -0.242188 0.484375 -0.32552\nv -0.330002 0.492188 -0.328125\nv -0.328125 0.492188 -0.325103\nv -0.241156 0.492188 -0.328125\nv -0.242188 0.492188 -0.326069\nv -0.330682 0.5 -0.328125\nv -0.328125 0.5 -0.324071\nv -0.241478 0.5 -0.328125\nv -0.242188 0.5 -0.326723\nv -0.331318 0.507812 -0.328125\nv -0.328125 0.507812 -0.322939\nv -0.241804 0.507812 -0.328125\nv -0.242188 0.515513 -0.328125\nv -0.242188 0.507812 -0.327399\nv -0.331931 0.515625 -0.328125\nv -0.328125 0.515625 -0.321801\nv -0.242194 0.515625 -0.328125\nv -0.332561 0.523438 -0.328125\nv -0.328125 0.523438 -0.320536\nv -0.242666 0.523438 -0.328125\nv -0.333207 0.53125 -0.328125\nv -0.243202 0.53125 -0.328125\nv -0.33388 0.539062 -0.328125\nv -0.243777 0.539062 -0.328125\nv -0.33455 0.546875 -0.328125\nv -0.244436 0.546875 -0.328125\nv -0.25 0.546875 -0.321023\nv -0.335167 0.554688 -0.328125\nv -0.245085 0.554688 -0.328125\nv -0.25 0.554688 -0.321612\nv -0.335704 0.5625 -0.328125\nv -0.335938 0.565871 -0.328125\nv -0.245809 0.5625 -0.328125\nv -0.25 0.5625 -0.322452\nv -0.336278 0.570312 -0.328125\nv -0.335938 0.570312 -0.327523\nv -0.246729 0.570312 -0.328125\nv -0.25 0.570312 -0.323924\nv -0.336853 0.578125 -0.328125\nv -0.335938 0.578125 -0.326491\nv -0.247679 0.578125 -0.328125\nv -0.25 0.578125 -0.325463\nv -0.337551 0.585938 -0.328125\nv -0.335938 0.585938 -0.325297\nv -0.248478 0.585938 -0.328125\nv -0.25 0.585938 -0.326503\nv -0.338382 0.59375 -0.328125\nv -0.335938 0.59375 -0.324037\nv -0.249125 0.59375 -0.328125\nv -0.25 0.59375 -0.327177\nv -0.339244 0.601562 -0.328125\nv -0.335938 0.601562 -0.322789\nv -0.249629 0.601562 -0.328125\nv -0.25 0.605235 -0.328125\nv -0.25 0.601562 -0.327704\nv -0.340227 0.609375 -0.328125\nv -0.335938 0.609375 -0.321051\nv -0.250447 0.609375 -0.328125\nv -0.341209 0.617188 -0.328125\nv -0.251349 0.617188 -0.328125\nv -0.257812 0.617188 -0.321001\nv -0.342199 0.625 -0.328125\nv -0.251442 0.625 -0.328125\nv -0.342477 0.632812 -0.328125\nv -0.252314 0.632812 -0.328125\nv -0.34249 0.640625 -0.328125\nv -0.253131 0.640625 -0.328125\nv -0.342755 0.648438 -0.328125\nv -0.253914 0.648438 -0.328125\nv -0.34315 0.65625 -0.328125\nv -0.254654 0.65625 -0.328125\nv -0.343523 0.664062 -0.328125\nv -0.34375 0.66906 -0.328125\nv -0.25524 0.664062 -0.328125\nv -0.257812 0.664062 -0.320886\nv -0.343891 0.671875 -0.328125\nv -0.34375 0.671875 -0.327809\nv -0.255583 0.671875 -0.328125\nv -0.257812 0.671875 -0.321719\nv -0.344278 0.679688 -0.328125\nv -0.34375 0.679688 -0.326956\nv -0.255363 0.679688 -0.328125\nv -0.257812 0.679688 -0.320355\nv -0.344651 0.6875 -0.328125\nv -0.34375 0.6875 -0.326188\nv -0.255415 0.6875 -0.328125\nv -0.345109 0.695312 -0.328125\nv -0.34375 0.695312 -0.325243\nv -0.2564 0.695312 -0.328125\nv -0.257812 0.695312 -0.32218\nv -0.345513 0.703125 -0.328125\nv -0.34375 0.703125 -0.324524\nv -0.257666 0.703125 -0.328125\nv -0.257812 0.703963 -0.328125\nv -0.257812 0.703125 -0.327402\nv -0.345906 0.710938 -0.328125\nv -0.34375 0.710938 -0.324281\nv -0.258977 0.710938 -0.328125\nv -0.346158 0.71875 -0.328125\nv -0.34375 0.71875 -0.32414\nv -0.260125 0.71875 -0.328125\nv -0.345762 0.726562 -0.328125\nv -0.34375 0.726562 -0.325023\nv -0.261779 0.726562 -0.328125\nv -0.344807 0.734375 -0.328125\nv -0.34375 0.741103 -0.328125\nv -0.34375 0.734375 -0.326621\nv -0.263048 0.734375 -0.328125\nv -0.265625 0.741809 -0.328125\nv -0.343592 0.742188 -0.328125\nv -0.265741 0.742188 -0.328125\nv -0.342221 0.75 -0.328125\nv -0.267905 0.75 -0.328125\nv -0.341179 0.757812 -0.328125\nv -0.270533 0.757812 -0.328125\nv -0.273438 0.765029 -0.328125\nv -0.273438 0.757812 -0.321376\nv -0.341119 0.765625 -0.328125\nv -0.273841 0.765625 -0.328125\nv -0.341232 0.773438 -0.328125\nv -0.280288 0.773438 -0.328125\nv -0.28125 0.774583 -0.328125\nv -0.28125 0.773438 -0.326553\nv -0.341826 0.78125 -0.328125\nv -0.286066 0.78125 -0.328125\nv -0.289062 0.786091 -0.328125\nv -0.289062 0.78125 -0.322888\nv -0.3422 0.789062 -0.328125\nv -0.290603 0.789062 -0.328125\nv -0.342658 0.796875 -0.328125\nv -0.294477 0.796875 -0.328125\nv -0.296875 0.804302 -0.328125\nv -0.296875 0.796875 -0.325621\nv -0.342884 0.804688 -0.328125\nv -0.34375 0.807322 -0.328125\nv -0.296998 0.804688 -0.328125\nv -0.304688 0.804688 -0.320481\nv -0.345437 0.8125 -0.328125\nv -0.34375 0.8125 -0.325957\nv -0.300091 0.8125 -0.328125\nv -0.304688 0.8125 -0.324121\nv -0.347429 0.820312 -0.328125\nv -0.34375 0.820312 -0.323145\nv -0.302509 0.820312 -0.328125\nv -0.304688 0.827556 -0.328125\nv -0.304688 0.820312 -0.326027\nv -0.34923 0.828125 -0.328125\nv -0.304931 0.828125 -0.328125\nv -0.3125 0.828125 -0.321369\nv -0.304688 0.833357 -0.328125\nv -0.349575 0.835938 -0.328125\nv -0.3046 0.835938 -0.328125\nv -0.304688 0.835938 -0.328027\nv -0.347695 0.84375 -0.328125\nv -0.34375 0.848915 -0.328125\nv -0.335938 0.850062 -0.328125\nv -0.304161 0.84375 -0.328125\nv -0.304688 0.848253 -0.328125\nv -0.304688 0.84375 -0.327552\nv -0.331273 0.851562 -0.328125\nv -0.328125 0.852728 -0.328125\nv -0.328125 0.851562 -0.325629\nv -0.320312 0.858631 -0.328125\nv -0.305345 0.851562 -0.328125\nv -0.317047 0.859375 -0.328125\nv -0.311177 0.859375 -0.328125\nv -0.3125 0.860146 -0.328125\nv -0.3125 0.859375 -0.326667\nv 0.398438 -0.735463 -0.320312\nv 0.40625 -0.737528 -0.320312\nv 0.414062 -0.739397 -0.320312\nv 0.421875 -0.74023 -0.320312\nv 0.429688 -0.73974 -0.320312\nv 0.4375 -0.739123 -0.320312\nv 0.445312 -0.738439 -0.320312\nv 0.453125 -0.737169 -0.320312\nv 0.460938 -0.735496 -0.320312\nv -0.328125 -0.728248 -0.320312\nv -0.320312 -0.730406 -0.320312\nv -0.3125 -0.731056 -0.320312\nv -0.304688 -0.731579 -0.320312\nv -0.296875 -0.732128 -0.320312\nv -0.289062 -0.732738 -0.320312\nv -0.28125 -0.733196 -0.320312\nv -0.273438 -0.733085 -0.320312\nv -0.265625 -0.731689 -0.320312\nv -0.257812 -0.729905 -0.320312\nv 0.396382 -0.734375 -0.320312\nv 0.398438 -0.734375 -0.314462\nv 0.453125 -0.734375 -0.312687\nv 0.465581 -0.734375 -0.320312\nv 0.460938 -0.734375 -0.317554\nv 0.46875 -0.733458 -0.320312\nv 0.476562 -0.72968 -0.320312\nv -0.331163 -0.726562 -0.320312\nv -0.335938 -0.721774 -0.320312\nv -0.328125 -0.726562 -0.315274\nv -0.250435 -0.726562 -0.320312\nv -0.25 -0.725999 -0.320312\nv 0.391106 -0.726562 -0.320312\nv 0.390625 -0.725052 -0.320312\nv 0.484145 -0.726562 -0.320312\nv 0.476562 -0.726562 -0.315506\nv 0.484375 -0.726441 -0.320312\nv 0.492188 -0.724784 -0.320312\nv 0.5 -0.722121 -0.320312\nv -0.337929 -0.71875 -0.320312\nv -0.335938 -0.71875 -0.315317\nv -0.245126 -0.71875 -0.320312\nv -0.25 -0.71875 -0.314615\nv -0.242188 -0.712972 -0.320312\nv 0.389035 -0.71875 -0.320312\nv 0.390625 -0.71875 -0.315776\nv 0.492188 -0.71875 -0.313771\nv 0.503542 -0.71875 -0.320312\nv 0.5 -0.71875 -0.316938\nv -0.340628 -0.710938 -0.320312\nv -0.24137 -0.710938 -0.320312\nv -0.242188 -0.710938 -0.319115\nv 0.385734 -0.710938 -0.320312\nv 0.505247 -0.710938 -0.320312\nv 0.5 -0.710938 -0.313791\nv -0.341398 -0.703125 -0.320312\nv -0.237825 -0.703125 -0.320312\nv -0.242188 -0.703125 -0.314033\nv -0.234375 -0.69549 -0.320312\nv 0.3829 -0.703125 -0.320312\nv 0.382812 -0.702697 -0.320312\nv 0.504565 -0.703125 -0.320312\nv -0.341163 -0.695312 -0.320312\nv -0.234293 -0.695312 -0.320312\nv -0.234375 -0.695312 -0.320156\nv 0.381604 -0.695312 -0.320312\nv 0.382812 -0.695312 -0.315583\nv 0.504069 -0.695312 -0.320312\nv -0.340477 -0.6875 -0.320312\nv -0.231751 -0.6875 -0.320312\nv -0.234375 -0.6875 -0.314774\nv 0.381943 -0.6875 -0.320312\nv 0.382812 -0.6875 -0.317144\nv 0.504157 -0.6875 -0.320312\nv -0.339682 -0.679688 -0.320312\nv -0.229849 -0.679688 -0.320312\nv -0.234375 -0.679688 -0.312966\nv 0.382348 -0.679688 -0.320312\nv 0.382812 -0.679688 -0.318792\nv 0.504413 -0.679688 -0.320312\nv -0.338803 -0.671875 -0.320312\nv -0.228702 -0.671875 -0.320312\nv 0.382779 -0.671875 -0.320312\nv 0.382812 -0.671087 -0.320312\nv 0.382812 -0.671875 -0.320214\nv 0.504644 -0.671875 -0.320312\nv -0.338038 -0.664062 -0.320312\nv -0.227535 -0.664062 -0.320312\nv -0.226562 -0.658321 -0.320312\nv 0.383106 -0.664062 -0.320312\nv 0.504831 -0.664062 -0.320312\nv -0.337117 -0.65625 -0.320312\nv -0.335938 -0.65625 -0.315849\nv -0.226205 -0.65625 -0.320312\nv -0.226562 -0.65625 -0.319593\nv 0.383206 -0.65625 -0.320312\nv 0.504661 -0.65625 -0.320312\nv -0.336183 -0.648438 -0.320312\nv -0.335938 -0.646521 -0.320312\nv -0.335938 -0.648438 -0.319375\nv -0.224953 -0.648438 -0.320312\nv -0.226562 -0.648438 -0.317189\nv 0.383192 -0.648438 -0.320312\nv 0.504464 -0.648438 -0.320312\nv -0.335097 -0.640625 -0.320312\nv -0.22419 -0.640625 -0.320312\nv -0.226562 -0.640625 -0.315815\nv 0.382938 -0.640625 -0.320312\nv 0.504089 -0.640625 -0.320312\nv -0.334241 -0.632812 -0.320312\nv -0.223839 -0.632812 -0.320312\nv -0.226562 -0.632812 -0.316543\nv 0.382999 -0.632812 -0.320312\nv 0.503474 -0.632812 -0.320312\nv -0.333356 -0.625 -0.320312\nv -0.223508 -0.625 -0.320312\nv -0.226562 -0.625 -0.317082\nv 0.38381 -0.625 -0.320312\nv 0.390625 -0.625 -0.313013\nv 0.50296 -0.625 -0.320312\nv 0.5 -0.625 -0.312746\nv -0.332976 -0.617188 -0.320312\nv -0.234375 -0.617188 -0.31257\nv -0.223187 -0.617188 -0.320312\nv -0.226562 -0.617188 -0.317405\nv 0.385235 -0.617188 -0.320312\nv 0.390625 -0.617188 -0.314489\nv 0.502505 -0.617188 -0.320312\nv 0.5 -0.617188 -0.313993\nv -0.333097 -0.609375 -0.320312\nv -0.234375 -0.609375 -0.313544\nv -0.223965 -0.609375 -0.320312\nv -0.226562 -0.609375 -0.318394\nv 0.386345 -0.609375 -0.320312\nv 0.390625 -0.609375 -0.315817\nv 0.502195 -0.609375 -0.320312\nv 0.5 -0.609375 -0.314864\nv -0.33301 -0.601562 -0.320312\nv -0.234375 -0.601562 -0.314186\nv -0.225027 -0.601562 -0.320312\nv -0.226562 -0.601562 -0.319161\nv 0.387474 -0.601562 -0.320312\nv 0.390625 -0.601562 -0.317042\nv 0.501913 -0.601562 -0.320312\nv 0.5 -0.601562 -0.315651\nv -0.332577 -0.59375 -0.320312\nv -0.234375 -0.59375 -0.31419\nv -0.225107 -0.59375 -0.320312\nv -0.226562 -0.59375 -0.319224\nv 0.388116 -0.59375 -0.320312\nv 0.390625 -0.59375 -0.317749\nv 0.50183 -0.59375 -0.320312\nv 0.5 -0.59375 -0.316935\nv -0.332065 -0.585938 -0.320312\nv -0.234375 -0.585938 -0.314246\nv -0.225065 -0.585938 -0.320312\nv -0.226562 -0.585938 -0.31921\nv 0.38805 -0.585938 -0.320312\nv 0.390625 -0.585938 -0.31783\nv 0.501779 -0.585938 -0.320312\nv 0.5 -0.585938 -0.317675\nv -0.331567 -0.578125 -0.320312\nv -0.234375 -0.578125 -0.314224\nv -0.224877 -0.578125 -0.320312\nv -0.226562 -0.578125 -0.319124\nv 0.387629 -0.578125 -0.320312\nv 0.390625 -0.578125 -0.317559\nv 0.501674 -0.578125 -0.320312\nv 0.5 -0.578125 -0.317864\nv -0.331098 -0.570312 -0.320312\nv -0.234375 -0.570312 -0.313956\nv -0.224139 -0.570312 -0.320312\nv -0.226562 -0.570312 -0.318728\nv 0.385906 -0.570312 -0.320312\nv 0.382812 -0.564655 -0.320312\nv 0.390625 -0.570312 -0.316439\nv 0.501583 -0.570312 -0.320312\nv 0.5 -0.570312 -0.317665\nv -0.330629 -0.5625 -0.320312\nv -0.234375 -0.5625 -0.313183\nv -0.219373 -0.5625 -0.320312\nv -0.226562 -0.5625 -0.317445\nv -0.21875 -0.56216 -0.320312\nv -0.210938 -0.559683 -0.320312\nv -0.203125 -0.557364 -0.320312\nv -0.195312 -0.555525 -0.320312\nv -0.15625 -0.555198 -0.320312\nv -0.015625 -0.554763 -0.320312\nv -0.0078125 -0.555184 -0.320312\nv 0 -0.555452 -0.320312\nv 0.0078125 -0.55555 -0.320312\nv 0.015625 -0.555689 -0.320312\nv 0.0234375 -0.55578 -0.320312\nv 0.03125 -0.555923 -0.320312\nv 0.0390625 -0.555966 -0.320312\nv 0.046875 -0.555865 -0.320312\nv 0.0546875 -0.555717 -0.320312\nv 0.0625 -0.55531 -0.320312\nv 0.0703125 -0.555063 -0.320312\nv 0.078125 -0.554962 -0.320312\nv 0.0859375 -0.555021 -0.320312\nv 0.09375 -0.554926 -0.320312\nv 0.381396 -0.5625 -0.320312\nv 0.375 -0.557028 -0.320312\nv 0.382812 -0.5625 -0.319208\nv 0.390625 -0.5625 -0.313454\nv 0.501668 -0.5625 -0.320312\nv 0.5 -0.5625 -0.317433\nv -0.330367 -0.554688 -0.320312\nv -0.226562 -0.554688 -0.312581\nv -0.21875 -0.554688 -0.313959\nv -0.210938 -0.554688 -0.315902\nv -0.203125 -0.554688 -0.317922\nv -0.192079 -0.554688 -0.320312\nv -0.195312 -0.554688 -0.319519\nv -0.1875 -0.553549 -0.320312\nv -0.179688 -0.552509 -0.320312\nv -0.171875 -0.552729 -0.320312\nv -0.162751 -0.554688 -0.320312\nv -0.164062 -0.554568 -0.320312\nv -0.154061 -0.554688 -0.320312\nv -0.15625 -0.554688 -0.319616\nv -0.148438 -0.553408 -0.320312\nv -0.140625 -0.550881 -0.320312\nv -0.132812 -0.548018 -0.320312\nv -0.101562 -0.547218 -0.320312\nv -0.09375 -0.547646 -0.320312\nv -0.0859375 -0.548246 -0.320312\nv -0.078125 -0.549053 -0.320312\nv -0.0703125 -0.549882 -0.320312\nv -0.0625 -0.55071 -0.320312\nv -0.0546875 -0.55161 -0.320312\nv -0.046875 -0.55241 -0.320312\nv -0.0390625 -0.553132 -0.320312\nv -0.03125 -0.553836 -0.320312\nv -0.0174938 -0.554688 -0.320312\nv -0.0234375 -0.554412 -0.320312\nv -0.015625 -0.554688 -0.319615\nv -0.0078125 -0.554688 -0.315823\nv 0 -0.554688 -0.31518\nv 0.0078125 -0.554688 -0.315942\nv 0.015625 -0.554688 -0.315527\nv 0.0234375 -0.554688 -0.31521\nv 0.03125 -0.554688 -0.315129\nv 0.0390625 -0.554688 -0.315308\nv 0.046875 -0.554688 -0.316409\nv 0.0546875 -0.554688 -0.317002\nv 0.0625 -0.554688 -0.318168\nv 0.0703125 -0.554688 -0.31895\nv 0.078125 -0.554688 -0.319284\nv 0.0859375 -0.554688 -0.319191\nv 0.0984293 -0.554688 -0.320312\nv 0.09375 -0.554688 -0.319542\nv 0.101562 -0.554492 -0.320312\nv 0.109375 -0.554157 -0.320312\nv 0.117188 -0.553813 -0.320312\nv 0.125 -0.553778 -0.320312\nv 0.132812 -0.553913 -0.320312\nv 0.140625 -0.553827 -0.320312\nv 0.148438 -0.553908 -0.320312\nv 0.15625 -0.554196 -0.320312\nv 0.164062 -0.55424 -0.320312\nv 0.171875 -0.554145 -0.320312\nv 0.179688 -0.553771 -0.320312\nv 0.1875 -0.553562 -0.320312\nv 0.195312 -0.553464 -0.320312\nv 0.203125 -0.553305 -0.320312\nv 0.210938 -0.553182 -0.320312\nv 0.21875 -0.553165 -0.320312\nv 0.226562 -0.553254 -0.320312\nv 0.234375 -0.553637 -0.320312\nv 0.242188 -0.554168 -0.320312\nv 0.25 -0.554611 -0.320312\nv 0.257812 -0.554458 -0.320312\nv 0.265625 -0.553814 -0.320312\nv 0.273438 -0.553236 -0.320312\nv 0.28125 -0.553014 -0.320312\nv 0.289062 -0.552784 -0.320312\nv 0.296875 -0.552236 -0.320312\nv 0.304688 -0.551818 -0.320312\nv 0.3125 -0.551501 -0.320312\nv 0.320312 -0.551979 -0.320312\nv 0.328125 -0.552378 -0.320312\nv 0.335938 -0.551947 -0.320312\nv 0.34375 -0.551342 -0.320312\nv 0.351562 -0.551547 -0.320312\nv 0.359375 -0.552358 -0.320312\nv 0.369211 -0.554688 -0.320312\nv 0.367188 -0.553943 -0.320312\nv 0.375 -0.554688 -0.317383\nv 0.382812 -0.554688 -0.31274\nv 0.501929 -0.554688 -0.320312\nv 0.5 -0.554688 -0.316565\nv -0.330058 -0.546875 -0.320312\nv -0.328125 -0.546875 -0.313295\nv -0.1875 -0.546875 -0.313356\nv -0.179688 -0.546875 -0.313556\nv -0.171875 -0.546875 -0.313313\nv -0.127039 -0.546875 -0.320312\nv -0.132812 -0.546875 -0.316866\nv -0.125 -0.54634 -0.320312\nv -0.117188 -0.546759 -0.320312\nv -0.108516 -0.546875 -0.320312\nv -0.109375 -0.546825 -0.320312\nv -0.101562 -0.546875 -0.317863\nv -0.09375 -0.546875 -0.314704\nv 0.28125 -0.546875 -0.312999\nv 0.289062 -0.546875 -0.313866\nv 0.296875 -0.546875 -0.314705\nv 0.304688 -0.546875 -0.315332\nv 0.3125 -0.546875 -0.315333\nv 0.320312 -0.546875 -0.31459\nv 0.328125 -0.546875 -0.313757\nv 0.335938 -0.546875 -0.314084\nv 0.34375 -0.546875 -0.31478\nv 0.351562 -0.546875 -0.314968\nv 0.359375 -0.546875 -0.313556\nv 0.502195 -0.546875 -0.320312\nv 0.5 -0.546875 -0.315001\nv -0.329775 -0.539062 -0.320312\nv -0.328125 -0.539062 -0.314396\nv 0.50236 -0.539062 -0.320312\nv 0.5 -0.539062 -0.314522\nv -0.329614 -0.53125 -0.320312\nv -0.328125 -0.53125 -0.31518\nv 0.502543 -0.53125 -0.320312\nv 0.5 -0.53125 -0.313915\nv -0.329604 -0.523438 -0.320312\nv -0.328125 -0.523438 -0.315446\nv 0.502759 -0.523438 -0.320312\nv 0.5 -0.523438 -0.313049\nv -0.329763 -0.515625 -0.320312\nv -0.328125 -0.515625 -0.315053\nv 0.502904 -0.515625 -0.320312\nv 0.5 -0.515625 -0.312787\nv -0.32995 -0.507812 -0.320312\nv -0.328125 -0.507812 -0.314753\nv 0.50268 -0.507812 -0.320312\nv 0.5 -0.507812 -0.312979\nv -0.330247 -0.5 -0.320312\nv -0.328125 -0.5 -0.314161\nv 0.296875 -0.5 -0.31397\nv 0.304688 -0.494256 -0.320312\nv 0.304688 -0.5 -0.315942\nv 0.3125 -0.496773 -0.320312\nv 0.3125 -0.5 -0.317572\nv 0.320312 -0.497007 -0.320312\nv 0.320312 -0.5 -0.317524\nv 0.328125 -0.494107 -0.320312\nv 0.328125 -0.5 -0.316582\nv 0.335938 -0.49285 -0.320312\nv 0.335938 -0.5 -0.315582\nv 0.34375 -0.5 -0.314303\nv 0.351562 -0.5 -0.312968\nv 0.502294 -0.5 -0.320312\nv 0.5 -0.5 -0.313962\nv -0.330464 -0.492188 -0.320312\nv -0.328125 -0.492188 -0.31354\nv -0.195312 -0.492188 -0.313493\nv -0.1875 -0.492188 -0.314343\nv -0.179688 -0.492188 -0.315584\nv -0.171875 -0.492188 -0.315811\nv -0.164062 -0.492188 -0.31539\nv -0.15625 -0.484871 -0.320312\nv -0.15625 -0.492188 -0.315075\nv -0.148438 -0.486509 -0.320312\nv -0.148438 -0.492188 -0.315373\nv -0.140625 -0.488445 -0.320312\nv -0.140625 -0.492188 -0.316823\nv -0.132812 -0.491929 -0.320312\nv -0.132812 -0.492188 -0.320008\nv -0.125 -0.491991 -0.320312\nv -0.125 -0.492188 -0.320058\nv -0.117188 -0.490294 -0.320312\nv -0.117188 -0.492188 -0.317829\nv -0.109375 -0.488472 -0.320312\nv -0.109375 -0.492188 -0.316204\nv -0.101562 -0.486968 -0.320312\nv -0.101562 -0.492188 -0.314748\nv -0.09375 -0.485927 -0.320312\nv -0.09375 -0.492188 -0.313117\nv -0.0859375 -0.485537 -0.320312\nv 0.226562 -0.492188 -0.312716\nv 0.234375 -0.492188 -0.314272\nv 0.242188 -0.484948 -0.320312\nv 0.242188 -0.492188 -0.314883\nv 0.25 -0.485617 -0.320312\nv 0.25 -0.492188 -0.315272\nv 0.257812 -0.485732 -0.320312\nv 0.257812 -0.492188 -0.315203\nv 0.265625 -0.485775 -0.320312\nv 0.265625 -0.492188 -0.315684\nv 0.273438 -0.486493 -0.320312\nv 0.273438 -0.492188 -0.31625\nv 0.28125 -0.487923 -0.320312\nv 0.28125 -0.492188 -0.316837\nv 0.289062 -0.489366 -0.320312\nv 0.289062 -0.492188 -0.318111\nv 0.298668 -0.492188 -0.320312\nv 0.296875 -0.491523 -0.320312\nv 0.296875 -0.492188 -0.319811\nv 0.339632 -0.492188 -0.320312\nv 0.34375 -0.491475 -0.320312\nv 0.34375 -0.492188 -0.319788\nv 0.351562 -0.48997 -0.320312\nv 0.351562 -0.492188 -0.31869\nv 0.359375 -0.487093 -0.320312\nv 0.359375 -0.492188 -0.317089\nv 0.367188 -0.492188 -0.314639\nv 0.502099 -0.492188 -0.320312\nv 0.5 -0.492188 -0.314696\nv -0.330717 -0.484375 -0.320312\nv -0.328125 -0.484375 -0.312997\nv -0.234375 -0.484375 -0.313504\nv -0.226562 -0.484375 -0.315869\nv -0.21875 -0.484375 -0.31647\nv -0.210938 -0.477983 -0.320312\nv -0.210938 -0.484375 -0.317003\nv -0.203125 -0.479145 -0.320312\nv -0.203125 -0.484375 -0.317633\nv -0.195312 -0.479808 -0.320312\nv -0.195312 -0.484375 -0.318134\nv -0.1875 -0.481586 -0.320312\nv -0.1875 -0.484375 -0.318851\nv -0.179688 -0.483571 -0.320312\nv -0.179688 -0.484375 -0.319879\nv -0.171875 -0.484241 -0.320312\nv -0.171875 -0.484375 -0.320243\nv -0.159504 -0.484375 -0.320312\nv -0.164062 -0.48362 -0.320312\nv -0.164062 -0.484375 -0.319879\nv -0.0783542 -0.484375 -0.320312\nv -0.078125 -0.48434 -0.320312\nv -0.078125 -0.484375 -0.320257\nv -0.0703125 -0.483069 -0.320312\nv -0.0703125 -0.484375 -0.31821\nv -0.0625 -0.481565 -0.320312\nv -0.0625 -0.484375 -0.315902\nv -0.0546875 -0.480007 -0.320312\nv -0.0546875 -0.484375 -0.313705\nv -0.046875 -0.47859 -0.320312\nv -0.0390625 -0.477088 -0.320312\nv 0.195312 -0.484375 -0.312866\nv 0.203125 -0.478188 -0.320312\nv 0.203125 -0.484375 -0.314343\nv 0.210938 -0.480266 -0.320312\nv 0.210938 -0.484375 -0.315859\nv 0.21875 -0.481727 -0.320312\nv 0.21875 -0.484375 -0.317386\nv 0.226562 -0.48265 -0.320312\nv 0.226562 -0.484375 -0.31874\nv 0.238169 -0.484375 -0.320312\nv 0.234375 -0.483738 -0.320312\nv 0.234375 -0.484375 -0.319784\nv 0.364659 -0.484375 -0.320312\nv 0.367188 -0.483098 -0.320312\nv 0.367188 -0.484375 -0.319517\nv 0.375 -0.479223 -0.320312\nv 0.375 -0.484375 -0.317754\nv 0.382812 -0.484375 -0.314493\nv 0.501995 -0.484375 -0.320312\nv 0.5 -0.484375 -0.315232\nv -0.331013 -0.476562 -0.320312\nv -0.234375 -0.476562 -0.315509\nv -0.226562 -0.476562 -0.318141\nv -0.216385 -0.476562 -0.320312\nv -0.21875 -0.475465 -0.320312\nv -0.21875 -0.476562 -0.319996\nv -0.0361607 -0.476562 -0.320312\nv -0.03125 -0.475609 -0.320312\nv -0.03125 -0.476562 -0.318761\nv -0.0234375 -0.474174 -0.320312\nv -0.0234375 -0.476562 -0.316491\nv -0.015625 -0.472487 -0.320312\nv -0.015625 -0.476562 -0.314604\nv -0.0078125 -0.471091 -0.320312\nv -0.0078125 -0.476562 -0.313705\nv 0 -0.47037 -0.320312\nv 0 -0.476562 -0.313285\nv 0.0078125 -0.470084 -0.320312\nv 0.0078125 -0.476562 -0.313356\nv 0.015625 -0.469953 -0.320312\nv 0.015625 -0.476562 -0.313058\nv 0.0234375 -0.469761 -0.320312\nv 0.0234375 -0.476562 -0.312855\nv 0.03125 -0.469203 -0.320312\nv 0.179688 -0.469909 -0.320312\nv 0.179688 -0.476562 -0.312964\nv 0.1875 -0.472036 -0.320312\nv 0.1875 -0.476562 -0.316871\nv 0.198821 -0.476562 -0.320312\nv 0.195312 -0.475117 -0.320312\nv 0.195312 -0.476562 -0.319212\nv 0.377415 -0.476562 -0.320312\nv 0.382812 -0.476562 -0.317384\nv 0.390625 -0.476562 -0.313291\nv 0.501929 -0.476562 -0.320312\nv 0.5 -0.476562 -0.31551\nv -0.33138 -0.46875 -0.320312\nv -0.234375 -0.46875 -0.316541\nv -0.22413 -0.46875 -0.320312\nv -0.226562 -0.46875 -0.319564\nv 0.0370076 -0.46875 -0.320312\nv 0.0390625 -0.468554 -0.320312\nv 0.0390625 -0.46875 -0.320102\nv 0.046875 -0.466707 -0.320312\nv 0.046875 -0.46875 -0.317971\nv 0.0546875 -0.465999 -0.320312\nv 0.0546875 -0.46875 -0.31627\nv 0.0625 -0.464548 -0.320312\nv 0.0625 -0.46875 -0.31398\nv 0.0703125 -0.463025 -0.320312\nv 0.078125 -0.461603 -0.320312\nv 0.140625 -0.461429 -0.320312\nv 0.148438 -0.463176 -0.320312\nv 0.148438 -0.46875 -0.312515\nv 0.15625 -0.465101 -0.320312\nv 0.15625 -0.46875 -0.315038\nv 0.164062 -0.466709 -0.320312\nv 0.164062 -0.46875 -0.317392\nv 0.174551 -0.46875 -0.320312\nv 0.171875 -0.4682 -0.320312\nv 0.171875 -0.46875 -0.31956\nv 0.381505 -0.46875 -0.320312\nv 0.382812 -0.464923 -0.320312\nv 0.382812 -0.46875 -0.319513\nv 0.390625 -0.46875 -0.314642\nv 0.501822 -0.46875 -0.320312\nv 0.5 -0.46875 -0.315755\nv -0.331736 -0.460938 -0.320312\nv -0.234375 -0.460938 -0.316352\nv -0.225366 -0.460938 -0.320312\nv -0.226562 -0.460938 -0.319772\nv 0.0840623 -0.460938 -0.320312\nv 0.0859375 -0.460784 -0.320312\nv 0.0859375 -0.460938 -0.320032\nv 0.09375 -0.460244 -0.320312\nv 0.09375 -0.460938 -0.318939\nv 0.101562 -0.459728 -0.320312\nv 0.101562 -0.460938 -0.317651\nv 0.109375 -0.459211 -0.320312\nv 0.109375 -0.460938 -0.316482\nv 0.117188 -0.458942 -0.320312\nv 0.117188 -0.460938 -0.316035\nv 0.125 -0.459172 -0.320312\nv 0.125 -0.460938 -0.316714\nv 0.13855 -0.460938 -0.320312\nv 0.132812 -0.460006 -0.320312\nv 0.132812 -0.460938 -0.318388\nv 0.383853 -0.460938 -0.320312\nv 0.390625 -0.460938 -0.315661\nv 0.501684 -0.460938 -0.320312\nv 0.5 -0.460938 -0.316105\nv -0.332053 -0.453125 -0.320312\nv -0.234375 -0.453125 -0.315673\nv -0.225366 -0.453125 -0.320312\nv -0.226562 -0.453125 -0.319654\nv 0.384263 -0.453125 -0.320312\nv 0.390625 -0.453125 -0.315593\nv 0.501572 -0.453125 -0.320312\nv 0.5 -0.453125 -0.316413\nv -0.332115 -0.445312 -0.320312\nv -0.234375 -0.445312 -0.314628\nv -0.224696 -0.445312 -0.320312\nv -0.226562 -0.445312 -0.319162\nv 0.38437 -0.445312 -0.320312\nv 0.390625 -0.445312 -0.31535\nv 0.501709 -0.445312 -0.320312\nv 0.5 -0.445312 -0.316542\nv -0.332059 -0.4375 -0.320312\nv -0.234375 -0.4375 -0.313508\nv -0.223655 -0.4375 -0.320312\nv -0.226562 -0.4375 -0.318447\nv 0.384288 -0.4375 -0.320312\nv 0.390625 -0.4375 -0.315219\nv 0.501944 -0.4375 -0.320312\nv 0.5 -0.4375 -0.316382\nv -0.331921 -0.429688 -0.320312\nv -0.222888 -0.429688 -0.320312\nv -0.226562 -0.429688 -0.3179\nv 0.384769 -0.429688 -0.320312\nv 0.390625 -0.429688 -0.31543\nv 0.502161 -0.429688 -0.320312\nv 0.5 -0.429688 -0.316075\nv -0.331718 -0.421875 -0.320312\nv -0.22201 -0.421875 -0.320312\nv -0.226562 -0.421875 -0.31717\nv 0.385572 -0.421875 -0.320312\nv 0.390625 -0.421875 -0.315902\nv 0.502515 -0.421875 -0.320312\nv 0.5 -0.421875 -0.315525\nv -0.331232 -0.414062 -0.320312\nv -0.220918 -0.414062 -0.320312\nv -0.226562 -0.414062 -0.316157\nv 0.386041 -0.414062 -0.320312\nv 0.390625 -0.414062 -0.316104\nv 0.50284 -0.414062 -0.320312\nv 0.5 -0.414062 -0.315095\nv -0.330477 -0.40625 -0.320312\nv -0.328125 -0.40625 -0.312532\nv -0.220433 -0.40625 -0.320312\nv -0.226562 -0.40625 -0.315356\nv 0.386091 -0.40625 -0.320312\nv 0.390625 -0.40625 -0.315951\nv 0.502968 -0.40625 -0.320312\nv 0.5 -0.40625 -0.315031\nv -0.329801 -0.398438 -0.320312\nv -0.328125 -0.398438 -0.315143\nv -0.219682 -0.398438 -0.320312\nv -0.226562 -0.398438 -0.314035\nv -0.21875 -0.391085 -0.320312\nv 0.385532 -0.398438 -0.320312\nv 0.390625 -0.398438 -0.314895\nv 0.503032 -0.398438 -0.320312\nv 0.5 -0.398438 -0.314862\nv -0.3291 -0.390625 -0.320312\nv -0.328125 -0.390625 -0.31742\nv -0.218699 -0.390625 -0.320312\nv -0.21875 -0.390625 -0.32025\nv 0.385216 -0.390625 -0.320312\nv 0.390625 -0.390625 -0.313391\nv 0.503231 -0.390625 -0.320312\nv 0.5 -0.390625 -0.314471\nv -0.328344 -0.382812 -0.320312\nv -0.328125 -0.38099 -0.320312\nv -0.328125 -0.382812 -0.319666\nv -0.217998 -0.382812 -0.320312\nv -0.21875 -0.382812 -0.319169\nv 0.384922 -0.382812 -0.320312\nv 0.503475 -0.382812 -0.320312\nv 0.5 -0.382812 -0.314136\nv -0.327233 -0.375 -0.320312\nv -0.217604 -0.375 -0.320312\nv -0.21875 -0.375 -0.318369\nv 0.384636 -0.375 -0.320312\nv 0.503546 -0.375 -0.320312\nv 0.5 -0.375 -0.314212\nv -0.325984 -0.367188 -0.320312\nv -0.217832 -0.367188 -0.320312\nv -0.21875 -0.367188 -0.318501\nv 0.384964 -0.367188 -0.320312\nv 0.503403 -0.367188 -0.320312\nv 0.5 -0.367188 -0.314319\nv -0.324715 -0.359375 -0.320312\nv -0.218061 -0.359375 -0.320312\nv -0.21875 -0.359375 -0.31878\nv 0.385365 -0.359375 -0.320312\nv 0.503505 -0.359375 -0.320312\nv 0.5 -0.359375 -0.314074\nv -0.323434 -0.351562 -0.320312\nv -0.218255 -0.351562 -0.320312\nv -0.21875 -0.351562 -0.31919\nv 0.385769 -0.351562 -0.320312\nv 0.503668 -0.351562 -0.320312\nv 0.5 -0.351562 -0.313749\nv -0.322319 -0.34375 -0.320312\nv -0.320312 -0.34375 -0.315034\nv -0.218463 -0.34375 -0.320312\nv -0.21875 -0.34375 -0.319628\nv 0.386037 -0.34375 -0.320312\nv 0.503911 -0.34375 -0.320312\nv 0.5 -0.34375 -0.313416\nv -0.32131 -0.335938 -0.320312\nv -0.320312 -0.335938 -0.317631\nv -0.218667 -0.335938 -0.320312\nv -0.21875 -0.331921 -0.320312\nv -0.21875 -0.335938 -0.320106\nv 0.386396 -0.335938 -0.320312\nv 0.504032 -0.335938 -0.320312\nv 0.5 -0.335938 -0.312979\nv -0.320601 -0.328125 -0.320312\nv -0.320312 -0.324265 -0.320312\nv -0.320312 -0.328125 -0.319523\nv -0.218827 -0.328125 -0.320312\nv 0.386568 -0.328125 -0.320312\nv 0.504198 -0.328125 -0.320312\nv 0.5 -0.328125 -0.312605\nv -0.320017 -0.320312 -0.320312\nv -0.218859 -0.320312 -0.320312\nv 0.386656 -0.320312 -0.320312\nv 0.504529 -0.320312 -0.320312\nv -0.31952 -0.3125 -0.320312\nv -0.218965 -0.3125 -0.320312\nv 0.386764 -0.3125 -0.320312\nv 0.504874 -0.3125 -0.320312\nv -0.318966 -0.304688 -0.320312\nv -0.219168 -0.304688 -0.320312\nv 0.387041 -0.304688 -0.320312\nv 0.505154 -0.304688 -0.320312\nv -0.318364 -0.296875 -0.320312\nv -0.219366 -0.296875 -0.320312\nv 0.387315 -0.296875 -0.320312\nv 0.505367 -0.296875 -0.320312\nv -0.317754 -0.289062 -0.320312\nv -0.219599 -0.289062 -0.320312\nv 0.387927 -0.289062 -0.320312\nv 0.505536 -0.289062 -0.320312\nv -0.317194 -0.28125 -0.320312\nv -0.219931 -0.28125 -0.320312\nv 0.388767 -0.28125 -0.320312\nv 0.390625 -0.28125 -0.313797\nv 0.50555 -0.28125 -0.320312\nv -0.31664 -0.273438 -0.320312\nv -0.220272 -0.273438 -0.320312\nv 0.389591 -0.273438 -0.320312\nv 0.390625 -0.273438 -0.316526\nv 0.505331 -0.273438 -0.320312\nv -0.316041 -0.265625 -0.320312\nv -0.220464 -0.265625 -0.320312\nv 0.390146 -0.265625 -0.320312\nv 0.390625 -0.265625 -0.318329\nv 0.505006 -0.265625 -0.320312\nv -0.315546 -0.257812 -0.320312\nv -0.220077 -0.257812 -0.320312\nv 0.390208 -0.257812 -0.320312\nv 0.390625 -0.257812 -0.318561\nv 0.504638 -0.257812 -0.320312\nv -0.315021 -0.25 -0.320312\nv -0.3125 -0.25 -0.312822\nv -0.219595 -0.25 -0.320312\nv 0.390011 -0.25 -0.320312\nv 0.390625 -0.25 -0.317978\nv 0.5044 -0.25 -0.320312\nv -0.314772 -0.242188 -0.320312\nv -0.3125 -0.242188 -0.31308\nv -0.219545 -0.242188 -0.320312\nv 0.389977 -0.242188 -0.320312\nv 0.390625 -0.242188 -0.317967\nv 0.504204 -0.242188 -0.320312\nv -0.314678 -0.234375 -0.320312\nv -0.3125 -0.234375 -0.313152\nv -0.219597 -0.234375 -0.320312\nv 0.390124 -0.234375 -0.320312\nv 0.390625 -0.234375 -0.318626\nv 0.503992 -0.234375 -0.320312\nv -0.314606 -0.226562 -0.320312\nv -0.3125 -0.226562 -0.312957\nv -0.219831 -0.226562 -0.320312\nv 0.390541 -0.226562 -0.320312\nv 0.390625 -0.224447 -0.320312\nv 0.390625 -0.226562 -0.320029\nv 0.503825 -0.226562 -0.320312\nv -0.314379 -0.21875 -0.320312\nv -0.3125 -0.21875 -0.313046\nv -0.220051 -0.21875 -0.320312\nv 0.390859 -0.21875 -0.320312\nv 0.503625 -0.21875 -0.320312\nv -0.314177 -0.210938 -0.320312\nv -0.3125 -0.210938 -0.313857\nv -0.219781 -0.210938 -0.320312\nv 0.39139 -0.210938 -0.320312\nv 0.503467 -0.210938 -0.320312\nv -0.31369 -0.203125 -0.320312\nv -0.3125 -0.203125 -0.315805\nv -0.219675 -0.203125 -0.320312\nv 0.392181 -0.203125 -0.320312\nv 0.503317 -0.203125 -0.320312\nv -0.313069 -0.195312 -0.320312\nv -0.3125 -0.195312 -0.318193\nv -0.219519 -0.195312 -0.320312\nv 0.392892 -0.195312 -0.320312\nv 0.503123 -0.195312 -0.320312\nv -0.312701 -0.1875 -0.320312\nv -0.3125 -0.182412 -0.320312\nv -0.3125 -0.1875 -0.319596\nv -0.219177 -0.1875 -0.320312\nv 0.393282 -0.1875 -0.320312\nv 0.502819 -0.1875 -0.320312\nv -0.312394 -0.179688 -0.320312\nv -0.219138 -0.179688 -0.320312\nv 0.393521 -0.179688 -0.320312\nv 0.502466 -0.179688 -0.320312\nv -0.312004 -0.171875 -0.320312\nv -0.219584 -0.171875 -0.320312\nv 0.393958 -0.171875 -0.320312\nv 0.50214 -0.171875 -0.320312\nv 0.5 -0.171875 -0.312718\nv -0.311537 -0.164062 -0.320312\nv -0.220085 -0.164062 -0.320312\nv 0.393901 -0.164062 -0.320312\nv 0.501649 -0.164062 -0.320312\nv 0.5 -0.164062 -0.314996\nv -0.310659 -0.15625 -0.320312\nv -0.220103 -0.15625 -0.320312\nv 0.393806 -0.15625 -0.320312\nv 0.500882 -0.15625 -0.320312\nv 0.5 -0.15625 -0.317318\nv -0.309817 -0.148438 -0.320312\nv -0.220331 -0.148438 -0.320312\nv 0.39371 -0.148438 -0.320312\nv 0.398438 -0.148438 -0.312513\nv 0.50021 -0.148438 -0.320312\nv 0.5 -0.146146 -0.320312\nv 0.5 -0.148438 -0.319582\nv -0.309318 -0.140625 -0.320312\nv -0.304688 -0.140625 -0.31343\nv -0.220623 -0.140625 -0.320312\nv 0.393564 -0.140625 -0.320312\nv 0.398438 -0.140625 -0.312625\nv 0.499447 -0.140625 -0.320312\nv -0.308848 -0.132812 -0.320312\nv -0.304688 -0.132812 -0.313977\nv -0.220799 -0.132812 -0.320312\nv 0.393401 -0.132812 -0.320312\nv 0.398438 -0.132812 -0.313362\nv 0.498578 -0.132812 -0.320312\nv -0.308363 -0.125 -0.320312\nv -0.304688 -0.125 -0.313851\nv -0.220672 -0.125 -0.320312\nv -0.226562 -0.125 -0.312709\nv 0.393096 -0.125 -0.320312\nv 0.398438 -0.125 -0.313729\nv 0.4979 -0.125 -0.320312\nv -0.308016 -0.117188 -0.320312\nv -0.304688 -0.117188 -0.313632\nv -0.220502 -0.117188 -0.320312\nv -0.226562 -0.117188 -0.313855\nv 0.392076 -0.117188 -0.320312\nv 0.390625 -0.110276 -0.320312\nv 0.398438 -0.117188 -0.31337\nv 0.497656 -0.117188 -0.320312\nv -0.308018 -0.109375 -0.320312\nv -0.304688 -0.109375 -0.313444\nv -0.220828 -0.109375 -0.320312\nv -0.226562 -0.109375 -0.314896\nv 0.390457 -0.109375 -0.320312\nv 0.390625 -0.109375 -0.320062\nv 0.497678 -0.109375 -0.320312\nv -0.308025 -0.101562 -0.320312\nv -0.304688 -0.101562 -0.312718\nv -0.220789 -0.101562 -0.320312\nv -0.226562 -0.101562 -0.315735\nv 0.389345 -0.101562 -0.320312\nv 0.390625 -0.101562 -0.318723\nv 0.497989 -0.101562 -0.320312\nv -0.308606 -0.09375 -0.320312\nv -0.219894 -0.09375 -0.320312\nv -0.226562 -0.09375 -0.315855\nv 0.387186 -0.09375 -0.320312\nv 0.390625 -0.09375 -0.316908\nv 0.499479 -0.09375 -0.320312\nv 0.5 -0.0906976 -0.320312\nv -0.309567 -0.0859375 -0.320312\nv -0.234375 -0.0859375 -0.31269\nv -0.218969 -0.0859375 -0.320312\nv -0.226562 -0.0859375 -0.315884\nv 0.385252 -0.0859375 -0.320312\nv 0.390625 -0.0859375 -0.315528\nv 0.500651 -0.0859375 -0.320312\nv 0.5 -0.0859375 -0.315284\nv -0.310481 -0.078125 -0.320312\nv -0.219138 -0.078125 -0.320312\nv -0.226562 -0.078125 -0.315486\nv -0.21875 -0.0773339 -0.320312\nv -0.210938 -0.0709516 -0.320312\nv 0.383735 -0.078125 -0.320312\nv 0.382812 -0.0759302 -0.320312\nv 0.390625 -0.078125 -0.314927\nv 0.50162 -0.078125 -0.320312\nv -0.311199 -0.0703125 -0.320312\nv -0.226562 -0.0703125 -0.313734\nv -0.21875 -0.0703125 -0.317449\nv -0.209713 -0.0703125 -0.320312\nv -0.210938 -0.0703125 -0.319875\nv -0.203125 -0.0657108 -0.320312\nv 0.37994 -0.0703125 -0.320312\nv 0.375 -0.0639826 -0.320312\nv 0.382812 -0.0703125 -0.3185\nv 0.390625 -0.0703125 -0.313646\nv 0.50298 -0.0703125 -0.320312\nv -0.311482 -0.0625 -0.320312\nv -0.21875 -0.0625 -0.314561\nv -0.210938 -0.0625 -0.316953\nv -0.199068 -0.0625 -0.320312\nv -0.203125 -0.0625 -0.318843\nv -0.195312 -0.0563712 -0.320312\nv 0.0546875 -0.0549558 -0.320312\nv 0.0625 -0.0555177 -0.320312\nv 0.0703125 -0.055989 -0.320312\nv 0.078125 -0.0565989 -0.320312\nv 0.0859375 -0.0573042 -0.320312\nv 0.09375 -0.0573709 -0.320312\nv 0.101562 -0.0572993 -0.320312\nv 0.109375 -0.0570418 -0.320312\nv 0.117188 -0.0567434 -0.320312\nv 0.125 -0.0565738 -0.320312\nv 0.132812 -0.0560577 -0.320312\nv 0.140625 -0.0549378 -0.320312\nv 0.371924 -0.0625 -0.320312\nv 0.367188 -0.0562259 -0.320312\nv 0.375 -0.0625 -0.319507\nv 0.382812 -0.0625 -0.315862\nv 0.504106 -0.0625 -0.320312\nv -0.311623 -0.0546875 -0.320312\nv -0.21875 -0.0546875 -0.313752\nv -0.210938 -0.0546875 -0.316211\nv -0.203125 -0.0546875 -0.318298\nv -0.193092 -0.0546875 -0.320312\nv -0.195312 -0.0546875 -0.319937\nv -0.1875 -0.0512211 -0.320312\nv -0.0078125 -0.0470489 -0.320312\nv 0 -0.0482417 -0.320312\nv 0.0078125 -0.048921 -0.320312\nv 0.015625 -0.0496492 -0.320312\nv 0.0234375 -0.0517682 -0.320312\nv 0.03125 -0.0532981 -0.320312\nv 0.0390625 -0.0540329 -0.320312\nv 0.0493744 -0.0546875 -0.320312\nv 0.046875 -0.0545782 -0.320312\nv 0.0546875 -0.0546875 -0.320255\nv 0.0625 -0.0546875 -0.320125\nv 0.0703125 -0.0546875 -0.320014\nv 0.078125 -0.0546875 -0.319866\nv 0.0859375 -0.0546875 -0.319691\nv 0.09375 -0.0546875 -0.319665\nv 0.101562 -0.0546875 -0.319692\nv 0.109375 -0.0546875 -0.319745\nv 0.117188 -0.0546875 -0.319809\nv 0.125 -0.0546875 -0.31984\nv 0.132812 -0.0546875 -0.319954\nv 0.142263 -0.0546875 -0.320312\nv 0.140625 -0.0546875 -0.320248\nv 0.148438 -0.0532234 -0.320312\nv 0.15625 -0.0515316 -0.320312\nv 0.164062 -0.0500858 -0.320312\nv 0.171875 -0.0488317 -0.320312\nv 0.179688 -0.0475274 -0.320312\nv 0.365757 -0.0546875 -0.320312\nv 0.359375 -0.049076 -0.320312\nv 0.367188 -0.0546875 -0.320011\nv 0.375 -0.0546875 -0.31867\nv 0.382812 -0.0546875 -0.315644\nv 0.504271 -0.0546875 -0.320312\nv -0.311743 -0.046875 -0.320312\nv -0.21875 -0.046875 -0.312517\nv -0.210938 -0.046875 -0.315056\nv -0.203125 -0.046875 -0.317066\nv -0.195312 -0.046875 -0.318605\nv -0.181034 -0.046875 -0.320312\nv -0.1875 -0.046875 -0.319151\nv -0.179688 -0.0461287 -0.320312\nv -0.171875 -0.0435466 -0.320312\nv -0.164062 -0.0419227 -0.320312\nv -0.0390625 -0.039066 -0.320312\nv -0.03125 -0.0411477 -0.320312\nv -0.0234375 -0.0428063 -0.320312\nv -0.00842468 -0.046875 -0.320312\nv -0.015625 -0.0446541 -0.320312\nv -0.0078125 -0.046875 -0.320262\nv 0 -0.046875 -0.319939\nv 0.0078125 -0.046875 -0.319798\nv 0.015625 -0.046875 -0.31967\nv 0.0234375 -0.046875 -0.319209\nv 0.03125 -0.046875 -0.318773\nv 0.0390625 -0.046875 -0.318562\nv 0.046875 -0.046875 -0.318485\nv 0.0546875 -0.046875 -0.318437\nv 0.0625 -0.046875 -0.318412\nv 0.0703125 -0.046875 -0.318408\nv 0.078125 -0.046875 -0.318376\nv 0.0859375 -0.046875 -0.318279\nv 0.09375 -0.046875 -0.31827\nv 0.101562 -0.046875 -0.31836\nv 0.109375 -0.046875 -0.318476\nv 0.117188 -0.046875 -0.318594\nv 0.125 -0.046875 -0.318661\nv 0.132812 -0.046875 -0.318748\nv 0.140625 -0.046875 -0.319011\nv 0.148438 -0.046875 -0.319324\nv 0.15625 -0.046875 -0.319583\nv 0.164062 -0.046875 -0.319801\nv 0.171875 -0.046875 -0.319992\nv 0.181733 -0.046875 -0.320312\nv 0.179688 -0.046875 -0.320207\nv 0.1875 -0.0442548 -0.320312\nv 0.195312 -0.0400539 -0.320312\nv 0.356618 -0.046875 -0.320312\nv 0.351562 -0.0398565 -0.320312\nv 0.359375 -0.046875 -0.319809\nv 0.367188 -0.046875 -0.31854\nv 0.375 -0.046875 -0.31738\nv 0.382812 -0.046875 -0.31472\nv 0.50462 -0.046875 -0.320312\nv -0.311376 -0.0390625 -0.320312\nv -0.210938 -0.0390625 -0.313276\nv -0.203125 -0.0390625 -0.315292\nv -0.195312 -0.0390625 -0.316897\nv -0.1875 -0.0390625 -0.317541\nv -0.179688 -0.0390625 -0.31809\nv -0.171875 -0.0390625 -0.318859\nv -0.158253 -0.0390625 -0.320312\nv -0.164062 -0.0390625 -0.319407\nv -0.15625 -0.0378531 -0.320312\nv -0.148438 -0.0322504 -0.320312\nv -0.078125 -0.0315329 -0.320312\nv -0.0703125 -0.0325854 -0.320312\nv -0.0625 -0.0335859 -0.320312\nv -0.0546875 -0.0352246 -0.320312\nv -0.0390736 -0.0390625 -0.320312\nv -0.046875 -0.0369712 -0.320312\nv -0.0390625 -0.0390625 -0.320312\nv -0.03125 -0.0390625 -0.319754\nv -0.0234375 -0.0390625 -0.319303\nv -0.015625 -0.0390625 -0.318852\nv -0.0078125 -0.0390625 -0.318309\nv 0 -0.0390625 -0.31822\nv 0.0078125 -0.0390625 -0.318339\nv 0.015625 -0.0390625 -0.318415\nv 0.0234375 -0.0390625 -0.318064\nv 0.03125 -0.0390625 -0.317698\nv 0.0390625 -0.0390625 -0.317561\nv 0.046875 -0.0390625 -0.317626\nv 0.0546875 -0.0390625 -0.317663\nv 0.0625 -0.0390625 -0.31767\nv 0.0703125 -0.0390625 -0.317653\nv 0.078125 -0.0390625 -0.317612\nv 0.0859375 -0.0390625 -0.317521\nv 0.09375 -0.0390625 -0.317498\nv 0.101562 -0.0390625 -0.317549\nv 0.109375 -0.0390625 -0.317666\nv 0.117188 -0.0390625 -0.317802\nv 0.125 -0.0390625 -0.317858\nv 0.132812 -0.0390625 -0.317919\nv 0.140625 -0.0390625 -0.318078\nv 0.148438 -0.0390625 -0.31835\nv 0.15625 -0.0390625 -0.318641\nv 0.164062 -0.0390625 -0.318871\nv 0.171875 -0.0390625 -0.319085\nv 0.179688 -0.0390625 -0.319308\nv 0.1875 -0.0390625 -0.319694\nv 0.197367 -0.0390625 -0.320312\nv 0.195312 -0.0390625 -0.320193\nv 0.203125 -0.036063 -0.320312\nv 0.210938 -0.032038 -0.320312\nv 0.28125 -0.032139 -0.320312\nv 0.289062 -0.0339323 -0.320312\nv 0.296875 -0.0325191 -0.320312\nv 0.320312 -0.0320481 -0.320312\nv 0.328125 -0.0333247 -0.320312\nv 0.335938 -0.0346383 -0.320312\nv 0.350813 -0.0390625 -0.320312\nv 0.34375 -0.0342026 -0.320312\nv 0.351562 -0.0390625 -0.320209\nv 0.359375 -0.0390625 -0.318975\nv 0.367188 -0.0390625 -0.317477\nv 0.375 -0.0390625 -0.315997\nv 0.382812 -0.0390625 -0.313587\nv 0.504769 -0.0390625 -0.320312\nv -0.311157 -0.03125 -0.320312\nv -0.210938 -0.03125 -0.312699\nv -0.203125 -0.03125 -0.314787\nv -0.195312 -0.03125 -0.316267\nv -0.1875 -0.03125 -0.316782\nv -0.179688 -0.03125 -0.31718\nv -0.171875 -0.03125 -0.317553\nv -0.164062 -0.03125 -0.317835\nv -0.15625 -0.03125 -0.318799\nv -0.146407 -0.03125 -0.320312\nv -0.148438 -0.03125 -0.320081\nv -0.140625 -0.029266 -0.320312\nv -0.132812 -0.0292278 -0.320312\nv -0.125 -0.0290248 -0.320312\nv -0.117188 -0.0292594 -0.320312\nv -0.109375 -0.0299957 -0.320312\nv -0.101562 -0.0301072 -0.320312\nv -0.09375 -0.0302715 -0.320312\nv -0.0816433 -0.03125 -0.320312\nv -0.0859375 -0.0309964 -0.320312\nv -0.078125 -0.03125 -0.320252\nv -0.0703125 -0.03125 -0.319987\nv -0.0625 -0.03125 -0.319689\nv -0.0546875 -0.03125 -0.319226\nv -0.046875 -0.03125 -0.318762\nv -0.0390625 -0.03125 -0.318248\nv -0.03125 -0.03125 -0.317918\nv -0.0234375 -0.03125 -0.317843\nv -0.015625 -0.03125 -0.317758\nv -0.0078125 -0.03125 -0.317473\nv 0 -0.03125 -0.317454\nv 0.0078125 -0.03125 -0.317546\nv 0.015625 -0.03125 -0.317668\nv 0.0234375 -0.03125 -0.317501\nv 0.03125 -0.03125 -0.317245\nv 0.0390625 -0.03125 -0.317193\nv 0.046875 -0.03125 -0.317212\nv 0.0546875 -0.03125 -0.317183\nv 0.0625 -0.03125 -0.317117\nv 0.0703125 -0.03125 -0.317053\nv 0.078125 -0.03125 -0.316981\nv 0.0859375 -0.03125 -0.316889\nv 0.09375 -0.03125 -0.316875\nv 0.101562 -0.03125 -0.316948\nv 0.109375 -0.03125 -0.31711\nv 0.117188 -0.03125 -0.317241\nv 0.125 -0.03125 -0.317323\nv 0.132812 -0.03125 -0.317374\nv 0.140625 -0.03125 -0.317485\nv 0.148438 -0.03125 -0.317627\nv 0.15625 -0.03125 -0.317853\nv 0.164062 -0.03125 -0.318024\nv 0.171875 -0.03125 -0.318211\nv 0.179688 -0.03125 -0.318414\nv 0.1875 -0.03125 -0.318744\nv 0.195312 -0.03125 -0.319253\nv 0.203125 -0.03125 -0.319753\nv 0.213213 -0.03125 -0.320312\nv 0.210938 -0.03125 -0.320217\nv 0.21875 -0.0298632 -0.320312\nv 0.226562 -0.028464 -0.320312\nv 0.234375 -0.0259562 -0.320312\nv 0.242188 -0.0243411 -0.320312\nv 0.25 -0.025751 -0.320312\nv 0.257812 -0.0271493 -0.320312\nv 0.265625 -0.0287638 -0.320312\nv 0.278388 -0.03125 -0.320312\nv 0.273438 -0.0304108 -0.320312\nv 0.28125 -0.03125 -0.320187\nv 0.289062 -0.03125 -0.319949\nv 0.30421 -0.03125 -0.320312\nv 0.296875 -0.03125 -0.320151\nv 0.304688 -0.0312141 -0.320312\nv 0.313304 -0.03125 -0.320312\nv 0.3125 -0.0312015 -0.320312\nv 0.320312 -0.03125 -0.320178\nv 0.328125 -0.03125 -0.319942\nv 0.335938 -0.03125 -0.319676\nv 0.34375 -0.03125 -0.319799\nv 0.351562 -0.03125 -0.319088\nv 0.359375 -0.03125 -0.318135\nv 0.367188 -0.03125 -0.316725\nv 0.375 -0.03125 -0.315407\nv 0.382812 -0.03125 -0.313289\nv 0.504338 -0.03125 -0.320312\nv -0.311087 -0.0234375 -0.320312\nv -0.203125 -0.0234375 -0.314339\nv -0.195312 -0.0234375 -0.31588\nv -0.1875 -0.0234375 -0.31622\nv -0.179688 -0.0234375 -0.31657\nv -0.171875 -0.0234375 -0.316712\nv -0.164062 -0.0234375 -0.316992\nv -0.15625 -0.0234375 -0.317537\nv -0.148438 -0.0234375 -0.318155\nv -0.140625 -0.0234375 -0.318653\nv -0.132812 -0.0234375 -0.318684\nv -0.125 -0.0234375 -0.318766\nv -0.117188 -0.0234375 -0.318799\nv -0.109375 -0.0234375 -0.318691\nv -0.101562 -0.0234375 -0.318677\nv -0.09375 -0.0234375 -0.318575\nv -0.0859375 -0.0234375 -0.318386\nv -0.078125 -0.0234375 -0.318257\nv -0.0703125 -0.0234375 -0.318123\nv -0.0625 -0.0234375 -0.317978\nv -0.0546875 -0.0234375 -0.317611\nv -0.046875 -0.0234375 -0.317207\nv -0.0390625 -0.0234375 -0.316973\nv -0.03125 -0.0234375 -0.316852\nv -0.0234375 -0.0234375 -0.316727\nv -0.015625 -0.0234375 -0.316642\nv -0.0078125 -0.0234375 -0.316419\nv 0 -0.0234375 -0.316582\nv 0.0078125 -0.0234375 -0.316846\nv 0.015625 -0.0234375 -0.317044\nv 0.0234375 -0.0234375 -0.31692\nv 0.03125 -0.0234375 -0.316694\nv 0.0390625 -0.0234375 -0.316657\nv 0.046875 -0.0234375 -0.316628\nv 0.0546875 -0.0234375 -0.316642\nv 0.0625 -0.0234375 -0.316621\nv 0.0703125 -0.0234375 -0.316596\nv 0.078125 -0.0234375 -0.316569\nv 0.0859375 -0.0234375 -0.316518\nv 0.09375 -0.0234375 -0.316527\nv 0.101562 -0.0234375 -0.316618\nv 0.109375 -0.0234375 -0.316807\nv 0.117188 -0.0234375 -0.316947\nv 0.125 -0.0234375 -0.317015\nv 0.132812 -0.0234375 -0.317089\nv 0.140625 -0.0234375 -0.317274\nv 0.148438 -0.0234375 -0.317424\nv 0.15625 -0.0234375 -0.317547\nv 0.164062 -0.0234375 -0.317695\nv 0.171875 -0.0234375 -0.317772\nv 0.179688 -0.0234375 -0.317887\nv 0.1875 -0.0234375 -0.317999\nv 0.195312 -0.0234375 -0.318391\nv 0.203125 -0.0234375 -0.318768\nv 0.210938 -0.0234375 -0.318966\nv 0.21875 -0.0234375 -0.319133\nv 0.226562 -0.0234375 -0.319361\nv 0.234375 -0.0234375 -0.319777\nv 0.242188 -0.0234375 -0.320091\nv 0.25 -0.0234375 -0.319706\nv 0.257812 -0.0234375 -0.319281\nv 0.265625 -0.0234375 -0.31884\nv 0.273438 -0.0234375 -0.318521\nv 0.28125 -0.0234375 -0.318159\nv 0.289062 -0.0234375 -0.317943\nv 0.296875 -0.0234375 -0.318099\nv 0.304688 -0.0234375 -0.318122\nv 0.3125 -0.0234375 -0.318076\nv 0.320312 -0.0234375 -0.317972\nv 0.328125 -0.0234375 -0.317949\nv 0.335938 -0.0234375 -0.31809\nv 0.34375 -0.0234375 -0.318465\nv 0.351562 -0.0234375 -0.318057\nv 0.359375 -0.0234375 -0.317603\nv 0.367188 -0.0234375 -0.316728\nv 0.375 -0.0234375 -0.31585\nv 0.382812 -0.0234375 -0.314075\nv 0.503787 -0.0234375 -0.320312\nv -0.311425 -0.015625 -0.320312\nv -0.203125 -0.015625 -0.31393\nv -0.195312 -0.015625 -0.315494\nv -0.1875 -0.015625 -0.315806\nv -0.179688 -0.015625 -0.316028\nv -0.171875 -0.015625 -0.316112\nv -0.164062 -0.015625 -0.316457\nv -0.15625 -0.015625 -0.316993\nv -0.148438 -0.015625 -0.317355\nv -0.140625 -0.015625 -0.317538\nv -0.132812 -0.015625 -0.31774\nv -0.125 -0.015625 -0.317879\nv -0.117188 -0.015625 -0.317902\nv -0.109375 -0.015625 -0.317829\nv -0.101562 -0.015625 -0.317806\nv -0.09375 -0.015625 -0.31768\nv -0.0859375 -0.015625 -0.317534\nv -0.078125 -0.015625 -0.317343\nv -0.0703125 -0.015625 -0.317189\nv -0.0625 -0.015625 -0.317042\nv -0.0546875 -0.015625 -0.316743\nv -0.046875 -0.015625 -0.316318\nv -0.0390625 -0.015625 -0.316071\nv -0.03125 -0.015625 -0.316016\nv -0.0234375 -0.015625 -0.315998\nv -0.015625 -0.015625 -0.316\nv -0.0078125 -0.015625 -0.315995\nv 0 -0.015625 -0.316312\nv 0.0078125 -0.015625 -0.316689\nv 0.015625 -0.015625 -0.316862\nv 0.0234375 -0.015625 -0.316786\nv 0.03125 -0.015625 -0.316637\nv 0.0390625 -0.015625 -0.316622\nv 0.046875 -0.015625 -0.316585\nv 0.0546875 -0.015625 -0.316585\nv 0.0625 -0.015625 -0.31657\nv 0.0703125 -0.015625 -0.316543\nv 0.078125 -0.015625 -0.316498\nv 0.0859375 -0.015625 -0.316449\nv 0.09375 -0.015625 -0.316432\nv 0.101562 -0.015625 -0.316473\nv 0.109375 -0.015625 -0.316654\nv 0.117188 -0.015625 -0.316773\nv 0.125 -0.015625 -0.316854\nv 0.132812 -0.015625 -0.316942\nv 0.140625 -0.015625 -0.317142\nv 0.148438 -0.015625 -0.317336\nv 0.15625 -0.015625 -0.317542\nv 0.164062 -0.015625 -0.317705\nv 0.171875 -0.015625 -0.317861\nv 0.179688 -0.015625 -0.317963\nv 0.1875 -0.015625 -0.318044\nv 0.195312 -0.015625 -0.318264\nv 0.203125 -0.015625 -0.318472\nv 0.210938 -0.015625 -0.318571\nv 0.21875 -0.015625 -0.318682\nv 0.226562 -0.015625 -0.318822\nv 0.234375 -0.015625 -0.319117\nv 0.242188 -0.015625 -0.31933\nv 0.25 -0.015625 -0.318629\nv 0.257812 -0.015625 -0.317892\nv 0.265625 -0.015625 -0.317179\nv 0.273438 -0.015625 -0.316697\nv 0.28125 -0.015625 -0.316274\nv 0.289062 -0.015625 -0.316106\nv 0.296875 -0.015625 -0.315907\nv 0.304688 -0.015625 -0.315668\nv 0.3125 -0.015625 -0.315754\nv 0.320312 -0.015625 -0.315895\nv 0.328125 -0.015625 -0.316179\nv 0.335938 -0.015625 -0.316738\nv 0.34375 -0.015625 -0.317253\nv 0.351562 -0.015625 -0.317209\nv 0.359375 -0.015625 -0.316952\nv 0.367188 -0.015625 -0.316474\nv 0.375 -0.015625 -0.315895\nv 0.382812 -0.015625 -0.314668\nv 0.390625 -0.015625 -0.312629\nv 0.5031 -0.015625 -0.320312\nv -0.311604 -0.0078125 -0.320312\nv -0.203125 -0.0078125 -0.312555\nv -0.195312 -0.0078125 -0.31457\nv -0.1875 -0.0078125 -0.31524\nv -0.179688 -0.0078125 -0.315632\nv -0.171875 -0.0078125 -0.315766\nv -0.164062 -0.0078125 -0.316125\nv -0.15625 -0.0078125 -0.316529\nv -0.148438 -0.0078125 -0.316746\nv -0.140625 -0.0078125 -0.316819\nv -0.132812 -0.0078125 -0.316889\nv -0.125 -0.0078125 -0.317056\nv -0.117188 -0.0078125 -0.317148\nv -0.109375 -0.0078125 -0.317219\nv -0.101562 -0.0078125 -0.317316\nv -0.09375 -0.0078125 -0.317277\nv -0.0859375 -0.0078125 -0.31721\nv -0.078125 -0.0078125 -0.3171\nv -0.0703125 -0.0078125 -0.316949\nv -0.0625 -0.0078125 -0.316753\nv -0.0546875 -0.0078125 -0.31649\nv -0.046875 -0.0078125 -0.316194\nv -0.0390625 -0.0078125 -0.316088\nv -0.03125 -0.0078125 -0.316237\nv -0.0234375 -0.0078125 -0.31649\nv -0.015625 -0.0078125 -0.316828\nv -0.0078125 -0.0078125 -0.316954\nv 0 -0.0078125 -0.317351\nv 0.0078125 -0.0078125 -0.317804\nv 0.015625 -0.0078125 -0.318039\nv 0.0234375 -0.0078125 -0.318018\nv 0.03125 -0.0078125 -0.317874\nv 0.0390625 -0.0078125 -0.317853\nv 0.046875 -0.0078125 -0.317815\nv 0.0546875 -0.0078125 -0.317809\nv 0.0625 -0.0078125 -0.317737\nv 0.0703125 -0.0078125 -0.317615\nv 0.078125 -0.0078125 -0.317494\nv 0.0859375 -0.0078125 -0.317388\nv 0.09375 -0.0078125 -0.317248\nv 0.101562 -0.0078125 -0.317139\nv 0.109375 -0.0078125 -0.317154\nv 0.117188 -0.0078125 -0.317115\nv 0.125 -0.0078125 -0.317025\nv 0.132812 -0.0078125 -0.316977\nv 0.140625 -0.0078125 -0.317089\nv 0.148438 -0.0078125 -0.317215\nv 0.15625 -0.0078125 -0.317354\nv 0.164062 -0.0078125 -0.31746\nv 0.171875 -0.0078125 -0.317575\nv 0.179688 -0.0078125 -0.317719\nv 0.1875 -0.0078125 -0.317798\nv 0.195312 -0.0078125 -0.31794\nv 0.203125 -0.0078125 -0.318015\nv 0.210938 -0.0078125 -0.317988\nv 0.21875 -0.0078125 -0.317873\nv 0.226562 -0.0078125 -0.317775\nv 0.234375 -0.0078125 -0.317818\nv 0.242188 -0.0078125 -0.317568\nv 0.25 -0.0078125 -0.316801\nv 0.257812 -0.0078125 -0.316002\nv 0.265625 -0.0078125 -0.315269\nv 0.273438 -0.0078125 -0.314723\nv 0.28125 -0.0078125 -0.314245\nv 0.289062 -0.0078125 -0.313722\nv 0.296875 -0.0078125 -0.313452\nv 0.304688 -0.0078125 -0.313332\nv 0.3125 -0.0078125 -0.313878\nv 0.320312 -0.0078125 -0.314419\nv 0.328125 -0.0078125 -0.314913\nv 0.335938 -0.0078125 -0.315712\nv 0.34375 -0.0078125 -0.316172\nv 0.351562 -0.0078125 -0.316296\nv 0.359375 -0.0078125 -0.316287\nv 0.367188 -0.0078125 -0.316229\nv 0.375 -0.0078125 -0.31563\nv 0.382812 -0.0078125 -0.314565\nv 0.390625 -0.0078125 -0.312887\nv 0.502423 -0.0078125 -0.320312\nv -0.311726 0 -0.320312\nv -0.195312 0 -0.314031\nv -0.1875 0 -0.314865\nv -0.179688 0 -0.315348\nv -0.171875 0 -0.315683\nv -0.164062 0 -0.316008\nv -0.15625 0 -0.316397\nv -0.148438 0 -0.316811\nv -0.140625 0 -0.316926\nv -0.132812 0 -0.316996\nv -0.125 0 -0.317128\nv -0.117188 0 -0.317153\nv -0.109375 0 -0.31719\nv -0.101562 0 -0.317336\nv -0.09375 0 -0.317253\nv -0.0859375 0 -0.31723\nv -0.078125 0 -0.31711\nv -0.0703125 0 -0.317023\nv -0.0625 0 -0.316973\nv -0.0546875 0 -0.316849\nv -0.046875 0 -0.316678\nv -0.0390625 0 -0.316601\nv -0.03125 0 -0.316781\nv -0.0234375 0 -0.317113\nv -0.015625 0 -0.317445\nv -0.0078125 0 -0.317589\nv 0 0 -0.317969\nv 0.0078125 0 -0.318402\nv 0.015625 0 -0.318681\nv 0.0234375 0 -0.318791\nv 0.03125 0 -0.318748\nv 0.0390625 0 -0.318745\nv 0.046875 0 -0.318649\nv 0.0546875 0 -0.318593\nv 0.0625 0 -0.318478\nv 0.0703125 0 -0.318323\nv 0.078125 0 -0.318225\nv 0.0859375 0 -0.31814\nv 0.09375 0 -0.317995\nv 0.101562 0 -0.317878\nv 0.109375 0 -0.317874\nv 0.117188 0 -0.317818\nv 0.125 0 -0.317705\nv 0.132812 0 -0.317569\nv 0.140625 0 -0.317572\nv 0.148438 0 -0.317601\nv 0.15625 0 -0.317608\nv 0.164062 0 -0.317539\nv 0.171875 0 -0.317452\nv 0.179688 0 -0.31742\nv 0.1875 0 -0.31742\nv 0.195312 0 -0.317379\nv 0.203125 0 -0.31741\nv 0.210938 0 -0.317313\nv 0.21875 0 -0.317065\nv 0.226562 0 -0.316829\nv 0.234375 0 -0.316686\nv 0.242188 0 -0.316375\nv 0.25 0 -0.315656\nv 0.257812 0 -0.314914\nv 0.265625 0 -0.314229\nv 0.273438 0 -0.313713\nv 0.28125 0 -0.313161\nv 0.289062 0 -0.312519\nv 0.328125 0 -0.312768\nv 0.335938 0 -0.313624\nv 0.34375 0 -0.314262\nv 0.351562 0 -0.314642\nv 0.359375 0 -0.3148\nv 0.367188 0 -0.314893\nv 0.375 0 -0.31463\nv 0.382812 0 -0.314071\nv 0.390625 0 -0.313155\nv 0.502228 0 -0.320312\nv -0.31167 0.0078125 -0.320312\nv -0.195312 0.0078125 -0.313183\nv -0.1875 0.0078125 -0.314171\nv -0.179688 0.0078125 -0.314595\nv -0.171875 0.0078125 -0.314971\nv -0.164062 0.0078125 -0.31538\nv -0.15625 0.0078125 -0.315892\nv -0.148438 0.0078125 -0.316323\nv -0.140625 0.0078125 -0.316674\nv -0.132812 0.0078125 -0.316906\nv -0.125 0.0078125 -0.317129\nv -0.117188 0.0078125 -0.317344\nv -0.109375 0.0078125 -0.317479\nv -0.101562 0.0078125 -0.317677\nv -0.09375 0.0078125 -0.31762\nv -0.0859375 0.0078125 -0.317771\nv -0.078125 0.0078125 -0.317756\nv -0.0703125 0.0078125 -0.317667\nv -0.0625 0.0078125 -0.31756\nv -0.0546875 0.0078125 -0.317395\nv -0.046875 0.0078125 -0.317255\nv -0.0390625 0.0078125 -0.317273\nv -0.03125 0.0078125 -0.317469\nv -0.0234375 0.0078125 -0.317741\nv -0.015625 0.0078125 -0.317969\nv -0.0078125 0.0078125 -0.318084\nv 0 0.0078125 -0.318446\nv 0.0078125 0.0078125 -0.318851\nv 0.015625 0.0078125 -0.319087\nv 0.0234375 0.0078125 -0.319151\nv 0.03125 0.0078125 -0.319156\nv 0.0390625 0.0078125 -0.319071\nv 0.046875 0.0078125 -0.318873\nv 0.0546875 0.0078125 -0.318753\nv 0.0625 0.0078125 -0.318608\nv 0.0703125 0.0078125 -0.318439\nv 0.078125 0.0078125 -0.318349\nv 0.0859375 0.0078125 -0.318211\nv 0.09375 0.0078125 -0.318046\nv 0.101562 0.0078125 -0.317944\nv 0.109375 0.0078125 -0.317986\nv 0.117188 0.0078125 -0.317991\nv 0.125 0.0078125 -0.317827\nv 0.132812 0.0078125 -0.31762\nv 0.140625 0.0078125 -0.317566\nv 0.148438 0.0078125 -0.317582\nv 0.15625 0.0078125 -0.317585\nv 0.164062 0.0078125 -0.31754\nv 0.171875 0.0078125 -0.317507\nv 0.179688 0.0078125 -0.317524\nv 0.1875 0.0078125 -0.317549\nv 0.195312 0.0078125 -0.317454\nv 0.203125 0.0078125 -0.317386\nv 0.210938 0.0078125 -0.317265\nv 0.21875 0.0078125 -0.317018\nv 0.226562 0.0078125 -0.316548\nv 0.234375 0.0078125 -0.316263\nv 0.242188 0.0078125 -0.315958\nv 0.25 0.0078125 -0.31532\nv 0.257812 0.0078125 -0.314608\nv 0.265625 0.0078125 -0.314117\nv 0.273438 0.0078125 -0.313704\nv 0.28125 0.0078125 -0.313054\nv 0.335938 0.0078125 -0.313268\nv 0.34375 0.0078125 -0.31355\nv 0.351562 0.0078125 -0.313686\nv 0.359375 0.0078125 -0.313968\nv 0.367188 0.0078125 -0.31411\nv 0.375 0.0078125 -0.314123\nv 0.382812 0.0078125 -0.313713\nv 0.390625 0.0078125 -0.312836\nv 0.502404 0.0078125 -0.320312\nv -0.311617 0.015625 -0.320312\nv -0.179688 0.015625 -0.313239\nv -0.171875 0.015625 -0.313965\nv -0.164062 0.015625 -0.314393\nv -0.15625 0.015625 -0.31484\nv -0.148438 0.015625 -0.315205\nv -0.140625 0.015625 -0.315538\nv -0.132812 0.015625 -0.315853\nv -0.125 0.015625 -0.316238\nv -0.117188 0.015625 -0.316531\nv -0.109375 0.015625 -0.316753\nv -0.101562 0.015625 -0.317083\nv -0.09375 0.015625 -0.317248\nv -0.0859375 0.015625 -0.317367\nv -0.078125 0.015625 -0.317303\nv -0.0703125 0.015625 -0.317249\nv -0.0625 0.015625 -0.317153\nv -0.0546875 0.015625 -0.316948\nv -0.046875 0.015625 -0.316833\nv -0.0390625 0.015625 -0.316751\nv -0.03125 0.015625 -0.316929\nv -0.0234375 0.015625 -0.317143\nv -0.015625 0.015625 -0.317356\nv -0.0078125 0.015625 -0.31746\nv 0 0.015625 -0.317755\nv 0.0078125 0.015625 -0.318037\nv 0.015625 0.015625 -0.31803\nv 0.0234375 0.015625 -0.318032\nv 0.03125 0.015625 -0.318034\nv 0.0390625 0.015625 -0.31793\nv 0.046875 0.015625 -0.317654\nv 0.0546875 0.015625 -0.317509\nv 0.0625 0.015625 -0.317319\nv 0.0703125 0.015625 -0.317131\nv 0.078125 0.015625 -0.316978\nv 0.0859375 0.015625 -0.316799\nv 0.09375 0.015625 -0.31657\nv 0.101562 0.015625 -0.316412\nv 0.109375 0.015625 -0.316379\nv 0.117188 0.015625 -0.316311\nv 0.125 0.015625 -0.316137\nv 0.132812 0.015625 -0.315928\nv 0.140625 0.015625 -0.315843\nv 0.148438 0.015625 -0.315792\nv 0.15625 0.015625 -0.315759\nv 0.164062 0.015625 -0.315687\nv 0.171875 0.015625 -0.315593\nv 0.179688 0.015625 -0.315487\nv 0.1875 0.015625 -0.315412\nv 0.195312 0.015625 -0.315313\nv 0.203125 0.015625 -0.315289\nv 0.210938 0.015625 -0.315221\nv 0.21875 0.015625 -0.314953\nv 0.226562 0.015625 -0.314688\nv 0.234375 0.015625 -0.314703\nv 0.242188 0.015625 -0.314575\nv 0.25 0.015625 -0.314144\nv 0.257812 0.015625 -0.313662\nv 0.265625 0.015625 -0.313402\nv 0.273438 0.015625 -0.312986\nv 0.28125 0.015625 -0.312638\nv 0.375 0.015625 -0.312682\nv 0.382812 0.015625 -0.312766\nv 0.502513 0.015625 -0.320312\nv -0.31155 0.0234375 -0.320312\nv -0.109375 0.0234375 -0.312522\nv -0.101562 0.0234375 -0.312651\nv -0.09375 0.0234375 -0.312828\nv -0.0859375 0.0234375 -0.312844\nv -0.078125 0.0234375 -0.312803\nv -0.0703125 0.0234375 -0.31266\nv 0.502068 0.0234375 -0.320312\nv -0.311456 0.03125 -0.320312\nv 0.500898 0.03125 -0.320312\nv 0.5 0.0345659 -0.320312\nv -0.31099 0.0390625 -0.320312\nv 0.498487 0.0390625 -0.320312\nv -0.310298 0.046875 -0.320312\nv 0.493757 0.046875 -0.320312\nv 0.492188 0.0485339 -0.320312\nv -0.309193 0.0546875 -0.320312\nv 0.476562 0.0603419 -0.320312\nv 0.48527 0.0546875 -0.320312\nv 0.484375 0.055473 -0.320312\nv -0.307905 0.0625 -0.320312\nv 0.3125 0.0702571 -0.320312\nv 0.320312 0.0701627 -0.320312\nv 0.328125 0.0700768 -0.320312\nv 0.335938 0.0700424 -0.320312\nv 0.34375 0.0700831 -0.320312\nv 0.351562 0.0698937 -0.320312\nv 0.359375 0.0695502 -0.320312\nv 0.367188 0.0692492 -0.320312\nv 0.375 0.0689433 -0.320312\nv 0.382812 0.0686693 -0.320312\nv 0.390625 0.068453 -0.320312\nv 0.398438 0.0682638 -0.320312\nv 0.40625 0.0682682 -0.320312\nv 0.414062 0.0683429 -0.320312\nv 0.421875 0.0683768 -0.320312\nv 0.429688 0.0682923 -0.320312\nv 0.4375 0.0684693 -0.320312\nv 0.445312 0.0684938 -0.320312\nv 0.453125 0.0678158 -0.320312\nv 0.460938 0.0656608 -0.320312\nv 0.471911 0.0625 -0.320312\nv 0.46875 0.0639106 -0.320312\nv -0.307892 0.0703125 -0.320312\nv -0.195312 0.0778517 -0.320312\nv -0.1875 0.0759366 -0.320312\nv -0.179688 0.0744832 -0.320312\nv -0.171875 0.0735742 -0.320312\nv -0.164062 0.0732036 -0.320312\nv -0.15625 0.0729085 -0.320312\nv -0.148438 0.0725873 -0.320312\nv -0.140625 0.0725218 -0.320312\nv -0.132812 0.0724941 -0.320312\nv -0.125 0.072476 -0.320312\nv -0.117188 0.0725304 -0.320312\nv -0.109375 0.0725809 -0.320312\nv -0.101562 0.0726502 -0.320312\nv -0.09375 0.072693 -0.320312\nv -0.0859375 0.0726056 -0.320312\nv -0.078125 0.0724845 -0.320312\nv -0.0703125 0.0723662 -0.320312\nv -0.0625 0.0722108 -0.320312\nv -0.0546875 0.0720163 -0.320312\nv -0.046875 0.0718389 -0.320312\nv -0.0390625 0.0716801 -0.320312\nv -0.03125 0.0715769 -0.320312\nv -0.0234375 0.0714886 -0.320312\nv -0.015625 0.0714204 -0.320312\nv -0.0078125 0.071388 -0.320312\nv 0 0.0714253 -0.320312\nv 0.0078125 0.0714122 -0.320312\nv 0.015625 0.0713984 -0.320312\nv 0.0234375 0.0714141 -0.320312\nv 0.03125 0.0713953 -0.320312\nv 0.0390625 0.0713731 -0.320312\nv 0.046875 0.0713837 -0.320312\nv 0.0546875 0.071313 -0.320312\nv 0.0625 0.0712972 -0.320312\nv 0.0703125 0.0712825 -0.320312\nv 0.078125 0.0712498 -0.320312\nv 0.0859375 0.0711914 -0.320312\nv 0.09375 0.0711399 -0.320312\nv 0.101562 0.0711099 -0.320312\nv 0.109375 0.0711364 -0.320312\nv 0.117188 0.0711488 -0.320312\nv 0.125 0.0711681 -0.320312\nv 0.132812 0.0711759 -0.320312\nv 0.140625 0.0711653 -0.320312\nv 0.148438 0.0711547 -0.320312\nv 0.15625 0.071167 -0.320312\nv 0.164062 0.0711913 -0.320312\nv 0.171875 0.0712 -0.320312\nv 0.179688 0.0711925 -0.320312\nv 0.1875 0.0711793 -0.320312\nv 0.195312 0.0711616 -0.320312\nv 0.203125 0.0710924 -0.320312\nv 0.210938 0.0709811 -0.320312\nv 0.21875 0.0709575 -0.320312\nv 0.226562 0.0709422 -0.320312\nv 0.234375 0.0709037 -0.320312\nv 0.242188 0.0708265 -0.320312\nv 0.25 0.0706934 -0.320312\nv 0.257812 0.070567 -0.320312\nv 0.265625 0.0705068 -0.320312\nv 0.273438 0.0704211 -0.320312\nv 0.28125 0.0703655 -0.320312\nv 0.289062 0.070387 -0.320312\nv 0.296875 0.0704053 -0.320312\nv 0.308668 0.0703125 -0.320312\nv 0.304688 0.0703723 -0.320312\nv 0.3125 0.0703125 -0.319238\nv 0.320312 0.0703125 -0.317084\nv 0.328125 0.0703125 -0.314815\nv 0.335938 0.0703125 -0.314272\nv -0.308154 0.078125 -0.320312\nv -0.210938 0.0831021 -0.320312\nv -0.196646 0.078125 -0.320312\nv -0.203125 0.0797823 -0.320312\nv -0.203125 0.078125 -0.313704\nv -0.308834 0.0859375 -0.320312\nv -0.213926 0.0859375 -0.320312\nv -0.21875 0.0907085 -0.320312\nv -0.21875 0.0859375 -0.313102\nv -0.309845 0.09375 -0.320312\nv -0.221028 0.09375 -0.320312\nv -0.226562 0.09375 -0.313408\nv -0.310672 0.101562 -0.320312\nv -0.225679 0.101562 -0.320312\nv -0.226562 0.104648 -0.320312\nv -0.226562 0.101562 -0.319016\nv -0.31123 0.109375 -0.320312\nv -0.227625 0.109375 -0.320312\nv -0.234375 0.109375 -0.312684\nv -0.311645 0.117188 -0.320312\nv -0.228523 0.117188 -0.320312\nv -0.234375 0.117188 -0.313215\nv -0.311913 0.125 -0.320312\nv -0.228686 0.125 -0.320312\nv -0.234375 0.125 -0.313652\nv -0.31222 0.132812 -0.320312\nv -0.228981 0.132812 -0.320312\nv -0.234375 0.132812 -0.314245\nv -0.312369 0.140625 -0.320312\nv -0.229735 0.140625 -0.320312\nv -0.234375 0.140625 -0.314354\nv -0.312407 0.148438 -0.320312\nv -0.3125 0.15243 -0.320312\nv -0.229945 0.148438 -0.320312\nv -0.234375 0.148438 -0.313914\nv -0.312589 0.15625 -0.320312\nv -0.3125 0.15625 -0.320085\nv -0.229837 0.15625 -0.320312\nv -0.234375 0.15625 -0.313181\nv -0.312919 0.164062 -0.320312\nv -0.3125 0.164062 -0.319282\nv -0.229565 0.164062 -0.320312\nv -0.313349 0.171875 -0.320312\nv -0.3125 0.171875 -0.318205\nv -0.228764 0.171875 -0.320312\nv -0.314041 0.179688 -0.320312\nv -0.3125 0.179688 -0.316627\nv -0.227773 0.179688 -0.320312\nv -0.314717 0.1875 -0.320312\nv -0.3125 0.1875 -0.315325\nv -0.226854 0.1875 -0.320312\nv -0.226562 0.189824 -0.320312\nv -0.315298 0.195312 -0.320312\nv -0.3125 0.195312 -0.31446\nv -0.225914 0.195312 -0.320312\nv -0.226562 0.195312 -0.318055\nv -0.315848 0.203125 -0.320312\nv -0.3125 0.203125 -0.313529\nv -0.225158 0.203125 -0.320312\nv -0.226562 0.203125 -0.315084\nv -0.31644 0.210938 -0.320312\nv -0.3125 0.210938 -0.312589\nv -0.224448 0.210938 -0.320312\nv -0.317054 0.21875 -0.320312\nv -0.22382 0.21875 -0.320312\nv -0.317664 0.226562 -0.320312\nv -0.223493 0.226562 -0.320312\nv -0.318095 0.234375 -0.320312\nv -0.223339 0.234375 -0.320312\nv -0.318352 0.242188 -0.320312\nv -0.223513 0.242188 -0.320312\nv -0.318566 0.25 -0.320312\nv -0.223831 0.25 -0.320312\nv -0.318785 0.257812 -0.320312\nv -0.223983 0.257812 -0.320312\nv -0.318747 0.265625 -0.320312\nv -0.224125 0.265625 -0.320312\nv -0.318468 0.273438 -0.320312\nv -0.224404 0.273438 -0.320312\nv -0.318271 0.28125 -0.320312\nv -0.3125 0.28125 -0.31297\nv -0.225111 0.28125 -0.320312\nv -0.318093 0.289062 -0.320312\nv -0.3125 0.289062 -0.313455\nv -0.225795 0.289062 -0.320312\nv -0.226562 0.29438 -0.320312\nv -0.226562 0.289062 -0.313254\nv -0.317874 0.296875 -0.320312\nv -0.3125 0.296875 -0.313934\nv -0.227062 0.296875 -0.320312\nv -0.317799 0.304688 -0.320312\nv -0.3125 0.304688 -0.314041\nv -0.228727 0.304688 -0.320312\nv -0.31785 0.3125 -0.320312\nv -0.3125 0.3125 -0.313949\nv -0.230498 0.3125 -0.320312\nv -0.317831 0.320312 -0.320312\nv -0.3125 0.320312 -0.313924\nv -0.232038 0.320312 -0.320312\nv -0.234375 0.320312 -0.312512\nv -0.317812 0.328125 -0.320312\nv -0.3125 0.328125 -0.313689\nv -0.23415 0.328125 -0.320312\nv -0.234375 0.32897 -0.320312\nv -0.234375 0.328125 -0.319672\nv -0.317884 0.335938 -0.320312\nv -0.3125 0.335938 -0.313496\nv -0.236037 0.335938 -0.320312\nv -0.318092 0.34375 -0.320312\nv -0.3125 0.34375 -0.31319\nv -0.237396 0.34375 -0.320312\nv -0.318562 0.351562 -0.320312\nv -0.3125 0.351562 -0.312505\nv -0.237924 0.351562 -0.320312\nv -0.318995 0.359375 -0.320312\nv -0.238161 0.359375 -0.320312\nv -0.319433 0.367188 -0.320312\nv -0.238278 0.367188 -0.320312\nv -0.319863 0.375 -0.320312\nv -0.238314 0.375 -0.320312\nv -0.320267 0.382812 -0.320312\nv -0.320312 0.38397 -0.320312\nv -0.23837 0.382812 -0.320312\nv -0.320552 0.390625 -0.320312\nv -0.320312 0.390625 -0.319944\nv -0.238441 0.390625 -0.320312\nv -0.320822 0.398438 -0.320312\nv -0.320312 0.398438 -0.319522\nv -0.23848 0.398438 -0.320312\nv -0.321085 0.40625 -0.320312\nv -0.320312 0.40625 -0.319112\nv -0.238549 0.40625 -0.320312\nv -0.321356 0.414062 -0.320312\nv -0.320312 0.414062 -0.318691\nv -0.238767 0.414062 -0.320312\nv -0.321641 0.421875 -0.320312\nv -0.320312 0.421875 -0.318243\nv -0.239297 0.421875 -0.320312\nv -0.321995 0.429688 -0.320312\nv -0.320312 0.429688 -0.317697\nv -0.240191 0.429688 -0.320312\nv -0.242188 0.429688 -0.315762\nv -0.322349 0.4375 -0.320312\nv -0.320312 0.4375 -0.317143\nv -0.241524 0.4375 -0.320312\nv -0.242188 0.44135 -0.320312\nv -0.242188 0.4375 -0.318733\nv -0.32268 0.445312 -0.320312\nv -0.320312 0.445312 -0.316591\nv -0.242872 0.445312 -0.320312\nv -0.322998 0.453125 -0.320312\nv -0.320312 0.453125 -0.316136\nv -0.243873 0.453125 -0.320312\nv -0.25 0.453125 -0.312814\nv -0.323261 0.460938 -0.320312\nv -0.320312 0.460938 -0.315865\nv -0.244319 0.460938 -0.320312\nv -0.25 0.460938 -0.313529\nv -0.323565 0.46875 -0.320312\nv -0.320312 0.46875 -0.315627\nv -0.244546 0.46875 -0.320312\nv -0.25 0.46875 -0.313933\nv -0.323853 0.476562 -0.320312\nv -0.320312 0.476562 -0.315428\nv -0.244884 0.476562 -0.320312\nv -0.25 0.476562 -0.314473\nv -0.324117 0.484375 -0.320312\nv -0.320312 0.484375 -0.315197\nv -0.245253 0.484375 -0.320312\nv -0.25 0.484375 -0.315032\nv -0.324763 0.492188 -0.320312\nv -0.320312 0.492188 -0.314483\nv -0.245607 0.492188 -0.320312\nv -0.25 0.492188 -0.315782\nv -0.325538 0.5 -0.320312\nv -0.320312 0.5 -0.313451\nv -0.246179 0.5 -0.320312\nv -0.25 0.5 -0.316655\nv -0.326384 0.507812 -0.320312\nv -0.320312 0.507812 -0.312501\nv -0.246694 0.507812 -0.320312\nv -0.25 0.507812 -0.317207\nv -0.327171 0.515625 -0.320312\nv -0.247344 0.515625 -0.320312\nv -0.25 0.515625 -0.317759\nv -0.327985 0.523438 -0.320312\nv -0.328125 0.524847 -0.320312\nv -0.248193 0.523438 -0.320312\nv -0.25 0.523438 -0.318535\nv -0.328786 0.53125 -0.320312\nv -0.328125 0.53125 -0.319443\nv -0.249104 0.53125 -0.320312\nv -0.25 0.53125 -0.319401\nv -0.329542 0.539062 -0.320312\nv -0.328125 0.539062 -0.318447\nv -0.249874 0.539062 -0.320312\nv -0.25 0.540484 -0.320312\nv -0.25 0.539062 -0.320175\nv -0.330245 0.546875 -0.320312\nv -0.328125 0.546875 -0.317438\nv -0.250548 0.546875 -0.320312\nv -0.330877 0.554688 -0.320312\nv -0.328125 0.554688 -0.316544\nv -0.25095 0.554688 -0.320312\nv -0.257812 0.554688 -0.312705\nv -0.33153 0.5625 -0.320312\nv -0.328125 0.5625 -0.315606\nv -0.251512 0.5625 -0.320312\nv -0.257812 0.5625 -0.313608\nv -0.332118 0.570312 -0.320312\nv -0.328125 0.570312 -0.314491\nv -0.252618 0.570312 -0.320312\nv -0.257812 0.570312 -0.314867\nv -0.33274 0.578125 -0.320312\nv -0.328125 0.578125 -0.313376\nv -0.254109 0.578125 -0.320312\nv -0.257812 0.578125 -0.315833\nv -0.333366 0.585938 -0.320312\nv -0.255136 0.585938 -0.320312\nv -0.257812 0.585938 -0.316894\nv -0.33397 0.59375 -0.320312\nv -0.255465 0.59375 -0.320312\nv -0.257812 0.59375 -0.317471\nv -0.334624 0.601562 -0.320312\nv -0.255898 0.601562 -0.320312\nv -0.257812 0.601562 -0.31824\nv -0.335522 0.609375 -0.320312\nv -0.335938 0.611875 -0.320312\nv -0.257028 0.609375 -0.320312\nv -0.257812 0.613884 -0.320312\nv -0.257812 0.609375 -0.319561\nv -0.336846 0.617188 -0.320312\nv -0.335938 0.617188 -0.318927\nv -0.258281 0.617188 -0.320312\nv -0.257812 0.62088 -0.320312\nv -0.337989 0.625 -0.320312\nv -0.335938 0.625 -0.31719\nv -0.257279 0.625 -0.320312\nv -0.257812 0.625 -0.319601\nv -0.338859 0.632812 -0.320312\nv -0.335938 0.632812 -0.315747\nv -0.255973 0.632812 -0.320312\nv -0.257812 0.632812 -0.317723\nv -0.339121 0.640625 -0.320312\nv -0.335938 0.640625 -0.314926\nv -0.255965 0.640625 -0.320312\nv -0.257812 0.640625 -0.315299\nv -0.339453 0.648438 -0.320312\nv -0.335938 0.648438 -0.314122\nv -0.256675 0.648438 -0.320312\nv -0.257812 0.648438 -0.31641\nv -0.339828 0.65625 -0.320312\nv -0.335938 0.65625 -0.313029\nv -0.257366 0.65625 -0.320312\nv -0.257812 0.661587 -0.320312\nv -0.257812 0.65625 -0.318769\nv -0.340194 0.664062 -0.320312\nv -0.257997 0.664062 -0.320312\nv -0.340445 0.671875 -0.320312\nv -0.258255 0.671875 -0.320312\nv -0.340624 0.679688 -0.320312\nv -0.257825 0.679688 -0.320312\nv -0.257812 0.680775 -0.320312\nv -0.340787 0.6875 -0.320312\nv -0.257729 0.6875 -0.320312\nv -0.257812 0.6888 -0.320312\nv -0.257812 0.6875 -0.320074\nv -0.341127 0.695312 -0.320312\nv -0.258245 0.695312 -0.320312\nv -0.341402 0.703125 -0.320312\nv -0.259184 0.703125 -0.320312\nv -0.341244 0.710938 -0.320312\nv -0.260545 0.710938 -0.320312\nv -0.341128 0.71875 -0.320312\nv -0.261838 0.71875 -0.320312\nv -0.34041 0.726562 -0.320312\nv -0.335938 0.726562 -0.313269\nv -0.263523 0.726562 -0.320312\nv -0.33914 0.734375 -0.320312\nv -0.335938 0.734375 -0.315185\nv -0.264938 0.734375 -0.320312\nv -0.265625 0.73593 -0.320312\nv -0.265625 0.734375 -0.318363\nv -0.337656 0.742188 -0.320312\nv -0.335938 0.742188 -0.317501\nv -0.268017 0.742188 -0.320312\nv -0.33641 0.75 -0.320312\nv -0.335938 0.75 -0.319451\nv -0.27035 0.75 -0.320312\nv -0.273438 0.756727 -0.320312\nv -0.273438 0.75 -0.31271\nv -0.336191 0.757812 -0.320312\nv -0.335938 0.757812 -0.319789\nv -0.274099 0.757812 -0.320312\nv -0.336473 0.765625 -0.320312\nv -0.335938 0.765625 -0.319263\nv -0.279332 0.765625 -0.320312\nv -0.28125 0.768302 -0.320312\nv -0.28125 0.765625 -0.317213\nv -0.336482 0.773438 -0.320312\nv -0.335938 0.773438 -0.319266\nv -0.284814 0.773438 -0.320312\nv -0.289062 0.779113 -0.320312\nv -0.289062 0.773438 -0.315846\nv -0.337007 0.78125 -0.320312\nv -0.335938 0.78125 -0.318471\nv -0.290422 0.78125 -0.320312\nv -0.296875 0.78125 -0.313657\nv -0.33661 0.789062 -0.320312\nv -0.335938 0.789062 -0.319275\nv -0.296796 0.789062 -0.320312\nv -0.296875 0.789172 -0.320312\nv -0.296875 0.789062 -0.320216\nv -0.337014 0.796875 -0.320312\nv -0.335938 0.796875 -0.318769\nv -0.302117 0.796875 -0.320312\nv -0.304688 0.804181 -0.320312\nv -0.304688 0.796875 -0.317572\nv -0.337465 0.804688 -0.320312\nv -0.335938 0.804688 -0.318062\nv -0.304867 0.804688 -0.320312\nv -0.3125 0.804688 -0.313648\nv -0.339361 0.8125 -0.320312\nv -0.335938 0.8125 -0.315288\nv -0.309139 0.8125 -0.320312\nv -0.3125 0.8125 -0.31707\nv -0.341148 0.820312 -0.320312\nv -0.34375 0.825125 -0.320312\nv -0.335938 0.820312 -0.314755\nv -0.320312 0.820312 -0.314493\nv -0.311194 0.820312 -0.320312\nv -0.3125 0.824912 -0.320312\nv -0.3125 0.820312 -0.319088\nv -0.344963 0.828125 -0.320312\nv -0.34375 0.828125 -0.318251\nv -0.314024 0.828125 -0.320312\nv -0.320312 0.828125 -0.316496\nv -0.3125 0.835313 -0.320312\nv -0.345866 0.835938 -0.320312\nv -0.34375 0.835938 -0.315933\nv -0.320312 0.835938 -0.315957\nv -0.312416 0.835938 -0.320312\nv -0.3125 0.835938 -0.320229\nv -0.344051 0.84375 -0.320312\nv -0.34375 0.84417 -0.320312\nv -0.34375 0.84375 -0.319697\nv -0.335938 0.846405 -0.320312\nv -0.335938 0.84375 -0.315559\nv -0.328125 0.848275 -0.320312\nv -0.328125 0.84375 -0.315951\nv -0.320312 0.84375 -0.31572\nv -0.310877 0.84375 -0.320312\nv -0.3125 0.84375 -0.318787\nv -0.324145 0.851562 -0.320312\nv -0.320312 0.854024 -0.320312\nv -0.320312 0.851562 -0.318284\nv -0.312407 0.851562 -0.320312\nv -0.3125 0.851773 -0.320312\nv -0.3125 0.851562 -0.320233\nv 0.40625 -0.737418 -0.3125\nv 0.414062 -0.739256 -0.3125\nv 0.421875 -0.739885 -0.3125\nv 0.429688 -0.739293 -0.3125\nv 0.4375 -0.738164 -0.3125\nv 0.445312 -0.736331 -0.3125\nv -0.320312 -0.727667 -0.3125\nv -0.3125 -0.728831 -0.3125\nv -0.304688 -0.729637 -0.3125\nv -0.296875 -0.730422 -0.3125\nv -0.289062 -0.730879 -0.3125\nv -0.28125 -0.73151 -0.3125\nv -0.273438 -0.731331 -0.3125\nv -0.265625 -0.729828 -0.3125\nv -0.257812 -0.727427 -0.3125\nv 0.399351 -0.734375 -0.3125\nv 0.398438 -0.73318 -0.3125\nv 0.40625 -0.734375 -0.306811\nv 0.452847 -0.734375 -0.3125\nv 0.445312 -0.734375 -0.307968\nv 0.453125 -0.734285 -0.3125\nv 0.460938 -0.73138 -0.3125\nv 0.46875 -0.727961 -0.3125\nv -0.324664 -0.726562 -0.3125\nv -0.328125 -0.72467 -0.3125\nv -0.320312 -0.726562 -0.310653\nv -0.3125 -0.726562 -0.308293\nv -0.304688 -0.726562 -0.304852\nv -0.265625 -0.726562 -0.307359\nv -0.256178 -0.726562 -0.3125\nv -0.257812 -0.726562 -0.311324\nv 0.39457 -0.726562 -0.3125\nv 0.398438 -0.726562 -0.308585\nv 0.460938 -0.726562 -0.306558\nv 0.471786 -0.726562 -0.3125\nv 0.46875 -0.726562 -0.310694\nv 0.476562 -0.723658 -0.3125\nv 0.484375 -0.720022 -0.3125\nv -0.334023 -0.71875 -0.3125\nv -0.335938 -0.715955 -0.3125\nv -0.328125 -0.71875 -0.307846\nv -0.320312 -0.71875 -0.305066\nv -0.251872 -0.71875 -0.3125\nv -0.257812 -0.71875 -0.307277\nv -0.25 -0.714874 -0.3125\nv 0.392133 -0.71875 -0.3125\nv 0.390625 -0.716128 -0.3125\nv 0.398438 -0.71875 -0.305662\nv 0.46875 -0.71875 -0.305853\nv 0.476562 -0.71875 -0.308075\nv 0.488189 -0.71875 -0.3125\nv 0.484375 -0.71875 -0.311243\nv 0.492188 -0.716742 -0.3125\nv -0.337848 -0.710938 -0.3125\nv -0.335938 -0.710938 -0.308846\nv -0.248099 -0.710938 -0.3125\nv -0.25 -0.710938 -0.310524\nv 0.388109 -0.710938 -0.3125\nv 0.390625 -0.710938 -0.308689\nv 0.476562 -0.710938 -0.304946\nv 0.484375 -0.710938 -0.305915\nv 0.498386 -0.710938 -0.3125\nv 0.492188 -0.710938 -0.308485\nv 0.5 -0.705224 -0.3125\nv -0.338694 -0.703125 -0.3125\nv -0.335938 -0.703125 -0.305603\nv -0.24332 -0.703125 -0.3125\nv -0.242188 -0.701208 -0.3125\nv 0.385428 -0.703125 -0.3125\nv 0.390625 -0.703125 -0.306116\nv 0.492188 -0.703125 -0.305666\nv 0.5004 -0.703125 -0.3125\nv 0.5 -0.703125 -0.31208\nv -0.339096 -0.695312 -0.3125\nv -0.238638 -0.695312 -0.3125\nv -0.242188 -0.695312 -0.308039\nv 0.383996 -0.695312 -0.3125\nv 0.492188 -0.695312 -0.305213\nv 0.500289 -0.695312 -0.3125\nv 0.5 -0.695312 -0.312201\nv -0.33845 -0.6875 -0.3125\nv -0.335938 -0.6875 -0.305237\nv -0.235938 -0.6875 -0.3125\nv -0.242188 -0.6875 -0.306613\nv 0.384511 -0.6875 -0.3125\nv 0.390625 -0.6875 -0.305116\nv 0.492188 -0.6875 -0.304911\nv 0.500397 -0.6875 -0.3125\nv 0.5 -0.6875 -0.312084\nv -0.337675 -0.679688 -0.3125\nv -0.335938 -0.679688 -0.306925\nv -0.234726 -0.679688 -0.3125\nv -0.242188 -0.679688 -0.305698\nv -0.234375 -0.677201 -0.3125\nv 0.385181 -0.679688 -0.3125\nv 0.390625 -0.679688 -0.306443\nv 0.492188 -0.679688 -0.304854\nv 0.500834 -0.679688 -0.3125\nv 0.5 -0.679688 -0.311574\nv -0.336738 -0.671875 -0.3125\nv -0.335938 -0.671875 -0.30962\nv -0.242188 -0.671875 -0.304788\nv -0.233615 -0.671875 -0.3125\nv -0.234375 -0.671875 -0.311814\nv 0.385804 -0.671875 -0.3125\nv 0.390625 -0.671875 -0.307535\nv 0.492188 -0.671875 -0.304722\nv 0.501348 -0.671875 -0.3125\nv 0.5 -0.671875 -0.311011\nv -0.335951 -0.664062 -0.3125\nv -0.335938 -0.663956 -0.3125\nv -0.335938 -0.664062 -0.312444\nv -0.232446 -0.664062 -0.3125\nv -0.234375 -0.664062 -0.310983\nv 0.386278 -0.664062 -0.3125\nv 0.390625 -0.664062 -0.308385\nv 0.501566 -0.664062 -0.3125\nv 0.5 -0.664062 -0.310811\nv -0.334876 -0.65625 -0.3125\nv -0.231234 -0.65625 -0.3125\nv -0.234375 -0.65625 -0.310369\nv 0.386717 -0.65625 -0.3125\nv 0.390625 -0.65625 -0.308932\nv 0.501758 -0.65625 -0.3125\nv 0.5 -0.65625 -0.310529\nv -0.333855 -0.648438 -0.3125\nv -0.22986 -0.648438 -0.3125\nv -0.234375 -0.648438 -0.30976\nv 0.387386 -0.648438 -0.3125\nv 0.390625 -0.648438 -0.309605\nv 0.398438 -0.648438 -0.305338\nv 0.501661 -0.648438 -0.3125\nv 0.5 -0.648438 -0.310585\nv -0.332808 -0.640625 -0.3125\nv -0.229011 -0.640625 -0.3125\nv -0.234375 -0.640625 -0.309387\nv 0.38827 -0.640625 -0.3125\nv 0.390625 -0.640625 -0.310378\nv 0.398438 -0.640625 -0.306378\nv 0.40625 -0.640625 -0.304995\nv 0.501015 -0.640625 -0.3125\nv 0.5 -0.640625 -0.311366\nv -0.3319 -0.632812 -0.3125\nv -0.242188 -0.632812 -0.304705\nv -0.230664 -0.632812 -0.3125\nv -0.234375 -0.632812 -0.310272\nv 0.389613 -0.632812 -0.3125\nv 0.390625 -0.627814 -0.3125\nv 0.390625 -0.632812 -0.311655\nv 0.398438 -0.632812 -0.307412\nv 0.40625 -0.632812 -0.305724\nv 0.492188 -0.632812 -0.304817\nv 0.500402 -0.632812 -0.3125\nv 0.5 -0.626555 -0.3125\nv 0.5 -0.632812 -0.312062\nv -0.331064 -0.625 -0.3125\nv -0.242188 -0.625 -0.305897\nv -0.232601 -0.625 -0.3125\nv -0.234375 -0.617698 -0.3125\nv -0.234375 -0.625 -0.311427\nv 0.391227 -0.625 -0.3125\nv 0.398438 -0.625 -0.308239\nv 0.40625 -0.625 -0.306268\nv 0.414062 -0.625 -0.305067\nv 0.499886 -0.625 -0.3125\nv 0.492188 -0.625 -0.305246\nv -0.330864 -0.617188 -0.3125\nv -0.234476 -0.617188 -0.3125\nv -0.242188 -0.617188 -0.307027\nv 0.392887 -0.617188 -0.3125\nv 0.398438 -0.617188 -0.308919\nv 0.40625 -0.617188 -0.306768\nv 0.414062 -0.617188 -0.305594\nv 0.499314 -0.617188 -0.3125\nv 0.492188 -0.617188 -0.305902\nv -0.331036 -0.609375 -0.3125\nv -0.235887 -0.609375 -0.3125\nv -0.242188 -0.609375 -0.308042\nv 0.394357 -0.609375 -0.3125\nv 0.398438 -0.609375 -0.309795\nv 0.40625 -0.609375 -0.307298\nv 0.414062 -0.609375 -0.306077\nv 0.421875 -0.609375 -0.304842\nv 0.498948 -0.609375 -0.3125\nv 0.492188 -0.609375 -0.307601\nv -0.331041 -0.601562 -0.3125\nv -0.236847 -0.601562 -0.3125\nv -0.242188 -0.601562 -0.308708\nv 0.395847 -0.601562 -0.3125\nv 0.398438 -0.601562 -0.310763\nv 0.40625 -0.601562 -0.307956\nv 0.414062 -0.601562 -0.306689\nv 0.421875 -0.601562 -0.305474\nv 0.484375 -0.601562 -0.305124\nv 0.498622 -0.601562 -0.3125\nv 0.492188 -0.601562 -0.308157\nv -0.330701 -0.59375 -0.3125\nv -0.236844 -0.59375 -0.3125\nv -0.242188 -0.59375 -0.308723\nv 0.396779 -0.59375 -0.3125\nv 0.398438 -0.59375 -0.31136\nv 0.40625 -0.59375 -0.308172\nv 0.414062 -0.59375 -0.306824\nv 0.421875 -0.59375 -0.305629\nv 0.484375 -0.59375 -0.305293\nv 0.497603 -0.59375 -0.3125\nv 0.492188 -0.59375 -0.30842\nv -0.330272 -0.585938 -0.3125\nv -0.328125 -0.585938 -0.305937\nv -0.236863 -0.585938 -0.3125\nv -0.242188 -0.585938 -0.308755\nv 0.396978 -0.585938 -0.3125\nv 0.398438 -0.585938 -0.311493\nv 0.40625 -0.585938 -0.308045\nv 0.414062 -0.585938 -0.306716\nv 0.421875 -0.585938 -0.305514\nv 0.484375 -0.585938 -0.305005\nv 0.496495 -0.585938 -0.3125\nv 0.492188 -0.585938 -0.308893\nv -0.329795 -0.578125 -0.3125\nv -0.328125 -0.578125 -0.307408\nv -0.236788 -0.578125 -0.3125\nv -0.242188 -0.578125 -0.308699\nv 0.396767 -0.578125 -0.3125\nv 0.398438 -0.578125 -0.311386\nv 0.40625 -0.578125 -0.30779\nv 0.414062 -0.578125 -0.30637\nv 0.421875 -0.578125 -0.305267\nv 0.496208 -0.578125 -0.3125\nv 0.492188 -0.578125 -0.309048\nv -0.329176 -0.570312 -0.3125\nv -0.328125 -0.570312 -0.309465\nv -0.236451 -0.570312 -0.3125\nv -0.242188 -0.570312 -0.308589\nv 0.39606 -0.570312 -0.3125\nv 0.398438 -0.570312 -0.31108\nv 0.40625 -0.570312 -0.307496\nv 0.414062 -0.570312 -0.306024\nv 0.421875 -0.570312 -0.304927\nv 0.496334 -0.570312 -0.3125\nv 0.492188 -0.570312 -0.309033\nv -0.328588 -0.5625 -0.3125\nv -0.328125 -0.5625 -0.31123\nv -0.235404 -0.5625 -0.3125\nv -0.242188 -0.5625 -0.307882\nv -0.234375 -0.560654 -0.3125\nv 0.392062 -0.5625 -0.3125\nv 0.390625 -0.560489 -0.3125\nv 0.398438 -0.5625 -0.308924\nv 0.40625 -0.5625 -0.306101\nv 0.414062 -0.5625 -0.305219\nv 0.496291 -0.5625 -0.3125\nv 0.492188 -0.5625 -0.309082\nv -0.328265 -0.554688 -0.3125\nv -0.328125 -0.551835 -0.3125\nv -0.328125 -0.554688 -0.312135\nv -0.226788 -0.554688 -0.3125\nv -0.234375 -0.554688 -0.30901\nv -0.226562 -0.554576 -0.3125\nv -0.21875 -0.552874 -0.3125\nv -0.210938 -0.550825 -0.3125\nv -0.203125 -0.548949 -0.3125\nv -0.195312 -0.547092 -0.3125\nv -0.164062 -0.547329 -0.3125\nv -0.15625 -0.548335 -0.3125\nv -0.148438 -0.549045 -0.3125\nv -0.140625 -0.547302 -0.3125\nv -0.0859375 -0.547204 -0.3125\nv -0.078125 -0.547853 -0.3125\nv -0.0703125 -0.548477 -0.3125\nv -0.0625 -0.549308 -0.3125\nv -0.0546875 -0.550261 -0.3125\nv -0.046875 -0.551264 -0.3125\nv -0.0390625 -0.552031 -0.3125\nv -0.03125 -0.552756 -0.3125\nv -0.0234375 -0.553362 -0.3125\nv -0.015625 -0.553734 -0.3125\nv -0.0078125 -0.554222 -0.3125\nv 0 -0.554167 -0.3125\nv 0.0078125 -0.553832 -0.3125\nv 0.015625 -0.553858 -0.3125\nv 0.0234375 -0.553914 -0.3125\nv 0.03125 -0.553863 -0.3125\nv 0.0390625 -0.553756 -0.3125\nv 0.046875 -0.553184 -0.3125\nv 0.0546875 -0.552913 -0.3125\nv 0.0625 -0.552681 -0.3125\nv 0.0703125 -0.552571 -0.3125\nv 0.078125 -0.552529 -0.3125\nv 0.0859375 -0.552264 -0.3125\nv 0.09375 -0.551995 -0.3125\nv 0.101562 -0.551449 -0.3125\nv 0.109375 -0.550957 -0.3125\nv 0.117188 -0.550578 -0.3125\nv 0.125 -0.550243 -0.3125\nv 0.132812 -0.549883 -0.3125\nv 0.140625 -0.549656 -0.3125\nv 0.148438 -0.549693 -0.3125\nv 0.15625 -0.549938 -0.3125\nv 0.164062 -0.550125 -0.3125\nv 0.171875 -0.550325 -0.3125\nv 0.179688 -0.550422 -0.3125\nv 0.1875 -0.550622 -0.3125\nv 0.195312 -0.551172 -0.3125\nv 0.203125 -0.551364 -0.3125\nv 0.210938 -0.551389 -0.3125\nv 0.21875 -0.551395 -0.3125\nv 0.226562 -0.55136 -0.3125\nv 0.234375 -0.550937 -0.3125\nv 0.242188 -0.550188 -0.3125\nv 0.25 -0.549484 -0.3125\nv 0.257812 -0.548909 -0.3125\nv 0.265625 -0.548044 -0.3125\nv 0.273438 -0.547138 -0.3125\nv 0.367188 -0.547791 -0.3125\nv 0.375 -0.550052 -0.3125\nv 0.383293 -0.554688 -0.3125\nv 0.382812 -0.554367 -0.3125\nv 0.390625 -0.554688 -0.309399\nv 0.398438 -0.554688 -0.306338\nv 0.497095 -0.554688 -0.3125\nv 0.492188 -0.554688 -0.30821\nv -0.327794 -0.546875 -0.3125\nv -0.226562 -0.546875 -0.305974\nv -0.21875 -0.546875 -0.308079\nv -0.210938 -0.546875 -0.30936\nv -0.203125 -0.546875 -0.310758\nv -0.193763 -0.546875 -0.3125\nv -0.195312 -0.546875 -0.312319\nv -0.1875 -0.545748 -0.3125\nv -0.179688 -0.545571 -0.3125\nv -0.166986 -0.546875 -0.3125\nv -0.171875 -0.545821 -0.3125\nv -0.164062 -0.546875 -0.312151\nv -0.15625 -0.546875 -0.311283\nv -0.148438 -0.546875 -0.310439\nv -0.139067 -0.546875 -0.3125\nv -0.140625 -0.546875 -0.31193\nv -0.132812 -0.54428 -0.3125\nv -0.125 -0.542714 -0.3125\nv -0.117188 -0.544417 -0.3125\nv -0.109375 -0.545329 -0.3125\nv -0.101562 -0.545893 -0.3125\nv -0.0900226 -0.546875 -0.3125\nv -0.09375 -0.546482 -0.3125\nv -0.0859375 -0.546875 -0.311382\nv -0.078125 -0.546875 -0.307475\nv 0.109375 -0.546875 -0.304751\nv 0.117188 -0.546875 -0.305776\nv 0.125 -0.546875 -0.306386\nv 0.132812 -0.546875 -0.306987\nv 0.140625 -0.546875 -0.307596\nv 0.148438 -0.546875 -0.30799\nv 0.15625 -0.546875 -0.307928\nv 0.164062 -0.546875 -0.307571\nv 0.171875 -0.546875 -0.306827\nv 0.179688 -0.546875 -0.30599\nv 0.1875 -0.546875 -0.305874\nv 0.195312 -0.546875 -0.305467\nv 0.203125 -0.546875 -0.304856\nv 0.210938 -0.546875 -0.30559\nv 0.21875 -0.546875 -0.306976\nv 0.226562 -0.546875 -0.307997\nv 0.234375 -0.546875 -0.308922\nv 0.242188 -0.546875 -0.309589\nv 0.25 -0.546875 -0.31016\nv 0.257812 -0.546875 -0.310628\nv 0.265625 -0.546875 -0.311406\nv 0.276233 -0.546875 -0.3125\nv 0.273438 -0.546875 -0.312261\nv 0.28125 -0.546112 -0.3125\nv 0.289062 -0.544555 -0.3125\nv 0.296875 -0.542697 -0.3125\nv 0.304688 -0.541211 -0.3125\nv 0.3125 -0.541004 -0.3125\nv 0.320312 -0.542808 -0.3125\nv 0.328125 -0.544286 -0.3125\nv 0.335938 -0.543706 -0.3125\nv 0.34375 -0.542668 -0.3125\nv 0.351562 -0.542535 -0.3125\nv 0.363455 -0.546875 -0.3125\nv 0.359375 -0.544859 -0.3125\nv 0.367188 -0.546875 -0.311402\nv 0.375 -0.546875 -0.309524\nv 0.382812 -0.546875 -0.307431\nv 0.390625 -0.546875 -0.30523\nv 0.498482 -0.546875 -0.3125\nv 0.492188 -0.546875 -0.307334\nv -0.327331 -0.539062 -0.3125\nv -0.210938 -0.539062 -0.305626\nv -0.203125 -0.539062 -0.307001\nv -0.195312 -0.539062 -0.308253\nv -0.1875 -0.539062 -0.308611\nv -0.179688 -0.539062 -0.308832\nv -0.171875 -0.539062 -0.30885\nv -0.164062 -0.539062 -0.308221\nv -0.15625 -0.539062 -0.307305\nv -0.148438 -0.539062 -0.306614\nv -0.140625 -0.539062 -0.306788\nv -0.132812 -0.539062 -0.308753\nv -0.125 -0.539062 -0.309696\nv -0.117188 -0.539062 -0.307968\nv -0.109375 -0.539062 -0.306048\nv 0.234375 -0.539062 -0.304937\nv 0.242188 -0.539062 -0.305629\nv 0.25 -0.539062 -0.306266\nv 0.257812 -0.539062 -0.306836\nv 0.265625 -0.539062 -0.307453\nv 0.273438 -0.539062 -0.308161\nv 0.28125 -0.539062 -0.308959\nv 0.289062 -0.539062 -0.309714\nv 0.296875 -0.539062 -0.310589\nv 0.304688 -0.539062 -0.311322\nv 0.3125 -0.539062 -0.311555\nv 0.320312 -0.539062 -0.310655\nv 0.328125 -0.539062 -0.309629\nv 0.335938 -0.539062 -0.309179\nv 0.34375 -0.539062 -0.309637\nv 0.351562 -0.539062 -0.309725\nv 0.359375 -0.539062 -0.309036\nv 0.367188 -0.539062 -0.306843\nv 0.375 -0.539062 -0.304765\nv 0.498909 -0.539062 -0.3125\nv 0.492188 -0.539062 -0.306858\nv -0.326955 -0.53125 -0.3125\nv -0.320312 -0.53125 -0.304814\nv -0.203125 -0.53125 -0.305065\nv -0.195312 -0.53125 -0.305841\nv -0.1875 -0.53125 -0.306111\nv -0.179688 -0.53125 -0.306687\nv -0.171875 -0.53125 -0.307177\nv -0.164062 -0.53125 -0.306547\nv -0.15625 -0.53125 -0.305604\nv -0.148438 -0.53125 -0.304885\nv -0.132812 -0.53125 -0.30534\nv -0.125 -0.53125 -0.305947\nv 0.265625 -0.53125 -0.305291\nv 0.273438 -0.53125 -0.306045\nv 0.28125 -0.53125 -0.307028\nv 0.289062 -0.53125 -0.308099\nv 0.296875 -0.53125 -0.309058\nv 0.304688 -0.53125 -0.309835\nv 0.3125 -0.53125 -0.310235\nv 0.320312 -0.53125 -0.309062\nv 0.328125 -0.53125 -0.307725\nv 0.335938 -0.53125 -0.306998\nv 0.34375 -0.53125 -0.305994\nv 0.351562 -0.53125 -0.305229\nv 0.359375 -0.53125 -0.305195\nv 0.499249 -0.53125 -0.3125\nv 0.492188 -0.53125 -0.306644\nv -0.326772 -0.523438 -0.3125\nv -0.320312 -0.523438 -0.304883\nv -0.1875 -0.523438 -0.304785\nv -0.179688 -0.523438 -0.305718\nv -0.171875 -0.523438 -0.306123\nv -0.164062 -0.523438 -0.305599\nv 0.273438 -0.523438 -0.305131\nv 0.28125 -0.523438 -0.306127\nv 0.289062 -0.523438 -0.307759\nv 0.296875 -0.523438 -0.308952\nv 0.304688 -0.523438 -0.309972\nv 0.3125 -0.523438 -0.310306\nv 0.320312 -0.523438 -0.309156\nv 0.328125 -0.523438 -0.308252\nv 0.335938 -0.523438 -0.307359\nv 0.34375 -0.523438 -0.305952\nv 0.351562 -0.523438 -0.304961\nv 0.499714 -0.523438 -0.3125\nv 0.492188 -0.523438 -0.30655\nv -0.326905 -0.515625 -0.3125\nv -0.320312 -0.515625 -0.304812\nv -0.1875 -0.515625 -0.304841\nv -0.179688 -0.515625 -0.30572\nv -0.171875 -0.515625 -0.306123\nv -0.164062 -0.515625 -0.305607\nv 0.273438 -0.515625 -0.304799\nv 0.28125 -0.515625 -0.305711\nv 0.289062 -0.515625 -0.30744\nv 0.296875 -0.515625 -0.30867\nv 0.304688 -0.515625 -0.309898\nv 0.3125 -0.515625 -0.310191\nv 0.320312 -0.515625 -0.30952\nv 0.328125 -0.515625 -0.308966\nv 0.335938 -0.515625 -0.307819\nv 0.34375 -0.515625 -0.30631\nv 0.351562 -0.515625 -0.304999\nv 0.499847 -0.515625 -0.3125\nv 0.492188 -0.515625 -0.306077\nv -0.326993 -0.507812 -0.3125\nv -0.195312 -0.507812 -0.305252\nv -0.1875 -0.507812 -0.306067\nv -0.179688 -0.507812 -0.306918\nv -0.171875 -0.507812 -0.307088\nv -0.164062 -0.507812 -0.306627\nv -0.15625 -0.507812 -0.30576\nv -0.148438 -0.507812 -0.304983\nv -0.140625 -0.507812 -0.304696\nv -0.132812 -0.507812 -0.305369\nv -0.125 -0.507812 -0.30629\nv -0.117188 -0.507812 -0.305313\nv 0.25 -0.507812 -0.304907\nv 0.257812 -0.507812 -0.305274\nv 0.265625 -0.507812 -0.305186\nv 0.273438 -0.507812 -0.305612\nv 0.28125 -0.507812 -0.306486\nv 0.289062 -0.507812 -0.307701\nv 0.296875 -0.501975 -0.3125\nv 0.296875 -0.507812 -0.308949\nv 0.304688 -0.50541 -0.3125\nv 0.304688 -0.507812 -0.310631\nv 0.3125 -0.505814 -0.3125\nv 0.3125 -0.507812 -0.310812\nv 0.320312 -0.506236 -0.3125\nv 0.320312 -0.507812 -0.311128\nv 0.328125 -0.505886 -0.3125\nv 0.328125 -0.507812 -0.310817\nv 0.335938 -0.504534 -0.3125\nv 0.335938 -0.507812 -0.309743\nv 0.34375 -0.502609 -0.3125\nv 0.34375 -0.507812 -0.308351\nv 0.351562 -0.500703 -0.3125\nv 0.351562 -0.507812 -0.307086\nv 0.359375 -0.507812 -0.306134\nv 0.367188 -0.507812 -0.304747\nv 0.499775 -0.507812 -0.3125\nv 0.492188 -0.507812 -0.305476\nv -0.327245 -0.5 -0.3125\nv -0.234375 -0.5 -0.305333\nv -0.226562 -0.5 -0.30708\nv -0.21875 -0.5 -0.307583\nv -0.210938 -0.5 -0.308172\nv -0.203125 -0.5 -0.308877\nv -0.195312 -0.494015 -0.3125\nv -0.195312 -0.5 -0.309754\nv -0.1875 -0.495771 -0.3125\nv -0.1875 -0.5 -0.31049\nv -0.179688 -0.497902 -0.3125\nv -0.179688 -0.5 -0.311421\nv -0.171875 -0.497919 -0.3125\nv -0.171875 -0.5 -0.311441\nv -0.164062 -0.497135 -0.3125\nv -0.164062 -0.5 -0.310987\nv -0.15625 -0.496404 -0.3125\nv -0.15625 -0.5 -0.310529\nv -0.148438 -0.495519 -0.3125\nv -0.148438 -0.5 -0.309881\nv -0.140625 -0.497047 -0.3125\nv -0.140625 -0.5 -0.310349\nv -0.132812 -0.499002 -0.3125\nv -0.132812 -0.5 -0.311783\nv -0.125 -0.498623 -0.3125\nv -0.125 -0.5 -0.311577\nv -0.117188 -0.496689 -0.3125\nv -0.117188 -0.5 -0.310252\nv -0.109375 -0.495733 -0.3125\nv -0.109375 -0.5 -0.309327\nv -0.101562 -0.494672 -0.3125\nv -0.101562 -0.5 -0.308601\nv -0.09375 -0.49291 -0.3125\nv -0.09375 -0.5 -0.307551\nv -0.0859375 -0.5 -0.306104\nv 0.210938 -0.5 -0.305439\nv 0.21875 -0.5 -0.306719\nv 0.226562 -0.492518 -0.3125\nv 0.226562 -0.5 -0.308059\nv 0.234375 -0.495434 -0.3125\nv 0.234375 -0.5 -0.309549\nv 0.242188 -0.496199 -0.3125\nv 0.242188 -0.5 -0.310047\nv 0.25 -0.496142 -0.3125\nv 0.25 -0.5 -0.309833\nv 0.257812 -0.495956 -0.3125\nv 0.257812 -0.5 -0.309755\nv 0.265625 -0.496581 -0.3125\nv 0.265625 -0.5 -0.310012\nv 0.273438 -0.497382 -0.3125\nv 0.273438 -0.5 -0.310513\nv 0.28125 -0.497656 -0.3125\nv 0.28125 -0.5 -0.310882\nv 0.291644 -0.5 -0.3125\nv 0.289062 -0.499166 -0.3125\nv 0.289062 -0.5 -0.311953\nv 0.354459 -0.5 -0.3125\nv 0.359375 -0.498818 -0.3125\nv 0.359375 -0.5 -0.311684\nv 0.367188 -0.495225 -0.3125\nv 0.367188 -0.5 -0.309413\nv 0.375 -0.5 -0.307251\nv 0.382812 -0.5 -0.304912\nv 0.499373 -0.5 -0.3125\nv 0.492188 -0.5 -0.305681\nv -0.32757 -0.492188 -0.3125\nv -0.242188 -0.492188 -0.306724\nv -0.234375 -0.48679 -0.3125\nv -0.234375 -0.492188 -0.309951\nv -0.226562 -0.490537 -0.3125\nv -0.226562 -0.492188 -0.311592\nv -0.21875 -0.490651 -0.3125\nv -0.21875 -0.492188 -0.311641\nv -0.210938 -0.490876 -0.3125\nv -0.210938 -0.492188 -0.311774\nv -0.201689 -0.492188 -0.3125\nv -0.203125 -0.491897 -0.3125\nv -0.203125 -0.492188 -0.312337\nv -0.0900153 -0.492188 -0.3125\nv -0.0859375 -0.491517 -0.3125\nv -0.0859375 -0.492188 -0.311825\nv -0.078125 -0.490333 -0.3125\nv -0.078125 -0.492188 -0.310495\nv -0.0703125 -0.488847 -0.3125\nv -0.0703125 -0.492188 -0.308815\nv -0.0625 -0.487001 -0.3125\nv -0.0625 -0.492188 -0.306663\nv -0.0546875 -0.485409 -0.3125\nv 0.1875 -0.492188 -0.30543\nv 0.195312 -0.484937 -0.3125\nv 0.195312 -0.492188 -0.306534\nv 0.203125 -0.486737 -0.3125\nv 0.203125 -0.492188 -0.308201\nv 0.210938 -0.487964 -0.3125\nv 0.210938 -0.492188 -0.309759\nv 0.225455 -0.492188 -0.3125\nv 0.21875 -0.489877 -0.3125\nv 0.21875 -0.492188 -0.311144\nv 0.374023 -0.492188 -0.3125\nv 0.375 -0.491716 -0.3125\nv 0.375 -0.492188 -0.312225\nv 0.382812 -0.487314 -0.3125\nv 0.382812 -0.492188 -0.309861\nv 0.390625 -0.492188 -0.307879\nv 0.398438 -0.492188 -0.305305\nv 0.499127 -0.492188 -0.3125\nv 0.492188 -0.492188 -0.305304\nv -0.327858 -0.484375 -0.3125\nv -0.328125 -0.478419 -0.3125\nv -0.25 -0.484375 -0.305968\nv -0.236116 -0.484375 -0.3125\nv -0.242188 -0.484375 -0.309185\nv -0.0503099 -0.484375 -0.3125\nv -0.046875 -0.483707 -0.3125\nv -0.046875 -0.484375 -0.311542\nv -0.0390625 -0.48232 -0.3125\nv -0.0390625 -0.484375 -0.309551\nv -0.03125 -0.480877 -0.3125\nv -0.03125 -0.484375 -0.307986\nv -0.0234375 -0.479455 -0.3125\nv -0.0234375 -0.484375 -0.306805\nv -0.015625 -0.478268 -0.3125\nv -0.015625 -0.484375 -0.306212\nv -0.0078125 -0.477659 -0.3125\nv -0.0078125 -0.484375 -0.304807\nv 0 -0.477383 -0.3125\nv 0.0078125 -0.477471 -0.3125\nv 0.015625 -0.477116 -0.3125\nv 0.0234375 -0.476876 -0.3125\nv 0.171875 -0.484375 -0.305579\nv 0.179688 -0.477007 -0.3125\nv 0.179688 -0.484375 -0.307844\nv 0.193986 -0.484375 -0.3125\nv 0.1875 -0.482154 -0.3125\nv 0.1875 -0.484375 -0.310593\nv 0.387094 -0.484375 -0.3125\nv 0.390625 -0.479286 -0.3125\nv 0.390625 -0.484375 -0.311199\nv 0.398438 -0.484375 -0.307664\nv 0.40625 -0.484375 -0.304767\nv 0.498836 -0.484375 -0.3125\nv 0.492188 -0.484375 -0.304994\nv -0.328186 -0.476562 -0.3125\nv -0.328125 -0.476562 -0.312375\nv -0.25 -0.476562 -0.307104\nv -0.239033 -0.476562 -0.3125\nv -0.242188 -0.476562 -0.310592\nv 0.028518 -0.476562 -0.3125\nv 0.03125 -0.476378 -0.3125\nv 0.03125 -0.476562 -0.312269\nv 0.0390625 -0.47502 -0.3125\nv 0.0390625 -0.476562 -0.310229\nv 0.046875 -0.473545 -0.3125\nv 0.046875 -0.476562 -0.307021\nv 0.0546875 -0.471635 -0.3125\nv 0.0625 -0.469732 -0.3125\nv 0.148438 -0.468761 -0.3125\nv 0.15625 -0.470644 -0.3125\nv 0.164062 -0.472521 -0.3125\nv 0.164062 -0.476562 -0.307745\nv 0.178145 -0.476562 -0.3125\nv 0.171875 -0.474755 -0.3125\nv 0.171875 -0.476562 -0.311011\nv 0.392075 -0.476562 -0.3125\nv 0.398438 -0.476562 -0.309337\nv 0.40625 -0.476562 -0.305976\nv 0.414062 -0.476562 -0.305181\nv 0.498631 -0.476562 -0.3125\nv 0.492188 -0.476562 -0.305482\nv -0.328487 -0.46875 -0.3125\nv -0.328125 -0.46875 -0.311787\nv -0.257812 -0.46875 -0.304889\nv -0.25 -0.46875 -0.307899\nv -0.240463 -0.46875 -0.3125\nv -0.242188 -0.46875 -0.311343\nv 0.0669392 -0.46875 -0.3125\nv 0.0703125 -0.468102 -0.3125\nv 0.0703125 -0.46875 -0.311201\nv 0.078125 -0.466948 -0.3125\nv 0.078125 -0.46875 -0.30869\nv 0.0859375 -0.466077 -0.3125\nv 0.0859375 -0.46875 -0.306512\nv 0.09375 -0.465001 -0.3125\nv 0.101562 -0.464009 -0.3125\nv 0.109375 -0.463438 -0.3125\nv 0.117188 -0.46342 -0.3125\nv 0.125 -0.464113 -0.3125\nv 0.132812 -0.465172 -0.3125\nv 0.148392 -0.46875 -0.3125\nv 0.140625 -0.466782 -0.3125\nv 0.140625 -0.46875 -0.308789\nv 0.394358 -0.46875 -0.3125\nv 0.398438 -0.46875 -0.31034\nv 0.40625 -0.46875 -0.306877\nv 0.414062 -0.46875 -0.305917\nv 0.421875 -0.46875 -0.30512\nv 0.498447 -0.46875 -0.3125\nv 0.492188 -0.46875 -0.305997\nv -0.328777 -0.460938 -0.3125\nv -0.328125 -0.460938 -0.311254\nv -0.257812 -0.460938 -0.30491\nv -0.25 -0.460938 -0.307852\nv -0.240119 -0.460938 -0.3125\nv -0.242188 -0.460938 -0.311224\nv 0.395654 -0.460938 -0.3125\nv 0.398438 -0.460938 -0.310869\nv 0.40625 -0.460938 -0.307005\nv 0.414062 -0.460938 -0.305617\nv 0.421875 -0.460938 -0.304825\nv 0.498222 -0.460938 -0.3125\nv 0.492188 -0.460938 -0.306471\nv -0.329052 -0.453125 -0.3125\nv -0.328125 -0.453125 -0.310786\nv -0.25 -0.453125 -0.30751\nv -0.238913 -0.453125 -0.3125\nv -0.242188 -0.453125 -0.310513\nv 0.395206 -0.453125 -0.3125\nv 0.398438 -0.453125 -0.310491\nv 0.40625 -0.453125 -0.306467\nv 0.414062 -0.453125 -0.305041\nv 0.498006 -0.453125 -0.3125\nv 0.492188 -0.453125 -0.306888\nv -0.329244 -0.445312 -0.3125\nv -0.328125 -0.445312 -0.310392\nv -0.25 -0.445312 -0.307046\nv -0.237579 -0.445312 -0.3125\nv -0.242188 -0.445312 -0.309876\nv 0.394626 -0.445312 -0.3125\nv 0.398438 -0.445312 -0.310021\nv 0.40625 -0.445312 -0.305997\nv 0.497729 -0.445312 -0.3125\nv 0.492188 -0.445312 -0.307296\nv -0.329457 -0.4375 -0.3125\nv -0.328125 -0.4375 -0.309875\nv -0.25 -0.4375 -0.306354\nv -0.235922 -0.4375 -0.3125\nv -0.242188 -0.4375 -0.309143\nv -0.234375 -0.430048 -0.3125\nv 0.394197 -0.4375 -0.3125\nv 0.398438 -0.4375 -0.309605\nv 0.40625 -0.4375 -0.305466\nv 0.497703 -0.4375 -0.3125\nv 0.492188 -0.4375 -0.307367\nv -0.329668 -0.429688 -0.3125\nv -0.328125 -0.429688 -0.30945\nv -0.25 -0.429688 -0.305694\nv -0.242188 -0.429688 -0.30861\nv -0.234307 -0.429688 -0.3125\nv -0.234375 -0.429688 -0.312457\nv 0.394338 -0.429688 -0.3125\nv 0.398438 -0.429688 -0.309531\nv 0.40625 -0.429688 -0.305151\nv 0.484375 -0.429688 -0.304768\nv 0.497799 -0.429688 -0.3125\nv 0.492188 -0.429688 -0.307383\nv -0.329509 -0.421875 -0.3125\nv -0.328125 -0.421875 -0.309802\nv -0.25 -0.421875 -0.305455\nv -0.242188 -0.421875 -0.308308\nv -0.233234 -0.421875 -0.3125\nv -0.234375 -0.421875 -0.311837\nv 0.394761 -0.421875 -0.3125\nv 0.398438 -0.421875 -0.309688\nv 0.40625 -0.421875 -0.305214\nv 0.484375 -0.421875 -0.304959\nv 0.497964 -0.421875 -0.3125\nv 0.492188 -0.421875 -0.307405\nv -0.329128 -0.414062 -0.3125\nv -0.328125 -0.406328 -0.3125\nv -0.328125 -0.414062 -0.310604\nv -0.25 -0.414062 -0.304998\nv -0.242188 -0.414062 -0.307863\nv -0.23182 -0.414062 -0.3125\nv -0.234375 -0.414062 -0.311085\nv 0.394859 -0.414062 -0.3125\nv 0.398438 -0.414062 -0.309805\nv 0.40625 -0.414062 -0.30502\nv 0.484375 -0.414062 -0.304967\nv 0.498119 -0.414062 -0.3125\nv 0.492188 -0.414062 -0.30751\nv -0.32811 -0.40625 -0.3125\nv -0.242188 -0.40625 -0.307252\nv -0.230331 -0.40625 -0.3125\nv -0.234375 -0.40625 -0.310224\nv 0.394424 -0.40625 -0.3125\nv 0.398438 -0.40625 -0.309415\nv 0.484375 -0.40625 -0.305116\nv 0.498047 -0.40625 -0.3125\nv 0.492188 -0.40625 -0.30781\nv -0.326947 -0.398438 -0.3125\nv -0.320312 -0.398438 -0.30478\nv -0.242188 -0.398438 -0.306206\nv -0.228277 -0.398438 -0.3125\nv -0.234375 -0.398438 -0.308961\nv -0.226562 -0.393284 -0.3125\nv 0.393168 -0.398438 -0.3125\nv 0.398438 -0.398438 -0.308416\nv 0.484375 -0.398438 -0.304845\nv 0.498148 -0.398438 -0.3125\nv 0.492188 -0.398438 -0.30765\nv -0.325953 -0.390625 -0.3125\nv -0.320312 -0.390625 -0.305148\nv -0.242188 -0.390625 -0.304826\nv -0.234375 -0.390625 -0.307565\nv -0.22573 -0.390625 -0.3125\nv -0.226562 -0.390625 -0.311929\nv 0.391441 -0.390625 -0.3125\nv 0.390625 -0.387279 -0.3125\nv 0.398438 -0.390625 -0.307072\nv 0.4984 -0.390625 -0.3125\nv 0.492188 -0.390625 -0.307289\nv -0.325023 -0.382812 -0.3125\nv -0.320312 -0.382812 -0.305647\nv -0.234375 -0.382812 -0.306336\nv -0.223682 -0.382812 -0.3125\nv -0.226562 -0.382812 -0.310376\nv 0.389612 -0.382812 -0.3125\nv 0.390625 -0.382812 -0.311603\nv 0.398438 -0.382812 -0.305564\nv 0.498631 -0.382812 -0.3125\nv 0.492188 -0.382812 -0.306701\nv -0.323919 -0.375 -0.3125\nv -0.320312 -0.375 -0.30676\nv -0.234375 -0.375 -0.305135\nv -0.222799 -0.375 -0.3125\nv -0.226562 -0.375 -0.309358\nv 0.388484 -0.375 -0.3125\nv 0.390625 -0.375 -0.310456\nv 0.498671 -0.375 -0.3125\nv 0.492188 -0.375 -0.306002\nv -0.322774 -0.367188 -0.3125\nv -0.320312 -0.367188 -0.308298\nv -0.222199 -0.367188 -0.3125\nv -0.226562 -0.367188 -0.308389\nv 0.388294 -0.367188 -0.3125\nv 0.390625 -0.367188 -0.31001\nv 0.498729 -0.367188 -0.3125\nv 0.492188 -0.367188 -0.30539\nv -0.321681 -0.359375 -0.3125\nv -0.320312 -0.359375 -0.310036\nv -0.221797 -0.359375 -0.3125\nv -0.226562 -0.359375 -0.307788\nv 0.388182 -0.359375 -0.3125\nv 0.390625 -0.359375 -0.309554\nv 0.498982 -0.359375 -0.3125\nv 0.492188 -0.359375 -0.304947\nv -0.320542 -0.351562 -0.3125\nv -0.320312 -0.350061 -0.3125\nv -0.320312 -0.351562 -0.312081\nv -0.221672 -0.351562 -0.3125\nv -0.226562 -0.351562 -0.307347\nv 0.388398 -0.351562 -0.3125\nv 0.390625 -0.351562 -0.309\nv 0.49925 -0.351562 -0.3125\nv -0.319234 -0.34375 -0.3125\nv -0.221552 -0.34375 -0.3125\nv -0.226562 -0.34375 -0.306933\nv 0.388569 -0.34375 -0.3125\nv 0.390625 -0.34375 -0.30863\nv 0.49946 -0.34375 -0.3125\nv -0.318227 -0.335938 -0.3125\nv -0.3125 -0.335938 -0.304861\nv -0.221493 -0.335938 -0.3125\nv -0.226562 -0.335938 -0.306577\nv 0.388681 -0.335938 -0.3125\nv 0.390625 -0.335938 -0.308474\nv 0.499724 -0.335938 -0.3125\nv -0.317516 -0.328125 -0.3125\nv -0.3125 -0.328125 -0.305684\nv -0.221551 -0.328125 -0.3125\nv -0.226562 -0.328125 -0.30637\nv 0.388817 -0.328125 -0.3125\nv 0.390625 -0.328125 -0.3087\nv 0.499942 -0.328125 -0.3125\nv 0.5 -0.325456 -0.3125\nv -0.316885 -0.320312 -0.3125\nv -0.3125 -0.320312 -0.30637\nv -0.221513 -0.320312 -0.3125\nv -0.226562 -0.320312 -0.306033\nv 0.388899 -0.320312 -0.3125\nv 0.390625 -0.320312 -0.308814\nv 0.500123 -0.320312 -0.3125\nv 0.5 -0.320312 -0.312356\nv -0.316318 -0.3125 -0.3125\nv -0.3125 -0.3125 -0.307195\nv -0.221579 -0.3125 -0.3125\nv -0.226562 -0.3125 -0.305724\nv 0.38893 -0.3125 -0.3125\nv 0.390625 -0.3125 -0.308888\nv 0.500609 -0.3125 -0.3125\nv 0.5 -0.3125 -0.311831\nv -0.315761 -0.304688 -0.3125\nv -0.3125 -0.304688 -0.307905\nv -0.221745 -0.304688 -0.3125\nv -0.226562 -0.304688 -0.305528\nv 0.38925 -0.304688 -0.3125\nv 0.390625 -0.304688 -0.309398\nv 0.501015 -0.304688 -0.3125\nv 0.5 -0.304688 -0.311366\nv -0.315121 -0.296875 -0.3125\nv -0.3125 -0.296875 -0.30866\nv -0.221935 -0.296875 -0.3125\nv -0.226562 -0.296875 -0.305607\nv 0.389456 -0.296875 -0.3125\nv 0.390625 -0.296875 -0.309825\nv 0.501356 -0.296875 -0.3125\nv 0.5 -0.296875 -0.310964\nv -0.314522 -0.289062 -0.3125\nv -0.3125 -0.289062 -0.309434\nv -0.222227 -0.289062 -0.3125\nv -0.226562 -0.289062 -0.306215\nv 0.390204 -0.289062 -0.3125\nv 0.390625 -0.285016 -0.3125\nv 0.390625 -0.289062 -0.311527\nv 0.501655 -0.289062 -0.3125\nv 0.5 -0.289062 -0.310549\nv -0.314027 -0.28125 -0.3125\nv -0.3125 -0.28125 -0.310251\nv -0.222586 -0.28125 -0.3125\nv -0.226562 -0.28125 -0.306766\nv 0.391055 -0.28125 -0.3125\nv 0.501825 -0.28125 -0.3125\nv 0.5 -0.28125 -0.310286\nv -0.313409 -0.273438 -0.3125\nv -0.3125 -0.273438 -0.311188\nv -0.222946 -0.273438 -0.3125\nv -0.226562 -0.273438 -0.307311\nv 0.391897 -0.273438 -0.3125\nv 0.501734 -0.273438 -0.3125\nv 0.5 -0.273438 -0.310268\nv -0.313014 -0.265625 -0.3125\nv -0.3125 -0.265625 -0.311754\nv -0.223479 -0.265625 -0.3125\nv -0.226562 -0.265625 -0.308147\nv 0.392316 -0.265625 -0.3125\nv 0.501594 -0.265625 -0.3125\nv 0.5 -0.265625 -0.310228\nv -0.312749 -0.257812 -0.3125\nv -0.3125 -0.25261 -0.3125\nv -0.3125 -0.257812 -0.31212\nv -0.223692 -0.257812 -0.3125\nv -0.226562 -0.257812 -0.308005\nv 0.392396 -0.257812 -0.3125\nv 0.501598 -0.257812 -0.3125\nv 0.5 -0.257812 -0.310006\nv -0.312371 -0.25 -0.3125\nv -0.223415 -0.25 -0.3125\nv -0.226562 -0.25 -0.307106\nv 0.39243 -0.25 -0.3125\nv 0.50165 -0.25 -0.3125\nv 0.5 -0.25 -0.309808\nv -0.312269 -0.242188 -0.3125\nv -0.223074 -0.242188 -0.3125\nv -0.226562 -0.242188 -0.306216\nv 0.392476 -0.242188 -0.3125\nv 0.501623 -0.242188 -0.3125\nv 0.5 -0.242188 -0.309782\nv -0.312236 -0.234375 -0.3125\nv -0.222908 -0.234375 -0.3125\nv -0.226562 -0.234375 -0.305776\nv 0.392789 -0.234375 -0.3125\nv 0.501525 -0.234375 -0.3125\nv 0.5 -0.234375 -0.309817\nv -0.312318 -0.226562 -0.3125\nv -0.222948 -0.226562 -0.3125\nv -0.226562 -0.226562 -0.305353\nv 0.393324 -0.226562 -0.3125\nv 0.398438 -0.226562 -0.3054\nv 0.501496 -0.226562 -0.3125\nv 0.5 -0.226562 -0.309708\nv -0.312301 -0.21875 -0.3125\nv -0.222947 -0.21875 -0.3125\nv -0.226562 -0.21875 -0.305169\nv 0.394052 -0.21875 -0.3125\nv 0.398438 -0.21875 -0.306564\nv 0.5015 -0.21875 -0.3125\nv 0.5 -0.21875 -0.309553\nv -0.312028 -0.210938 -0.3125\nv -0.222828 -0.210938 -0.3125\nv -0.226562 -0.210938 -0.304896\nv 0.39468 -0.210938 -0.3125\nv 0.398438 -0.210938 -0.307726\nv 0.501419 -0.210938 -0.3125\nv 0.5 -0.210938 -0.309627\nv -0.311456 -0.203125 -0.3125\nv -0.223027 -0.203125 -0.3125\nv -0.226562 -0.203125 -0.304968\nv 0.395594 -0.203125 -0.3125\nv 0.398438 -0.203125 -0.308881\nv 0.501418 -0.203125 -0.3125\nv 0.5 -0.203125 -0.309409\nv -0.310752 -0.195312 -0.3125\nv -0.304688 -0.195312 -0.304796\nv -0.223033 -0.195312 -0.3125\nv 0.396394 -0.195312 -0.3125\nv 0.398438 -0.195312 -0.309813\nv 0.501386 -0.195312 -0.3125\nv 0.5 -0.195312 -0.309314\nv -0.310215 -0.1875 -0.3125\nv -0.304688 -0.1875 -0.30582\nv -0.222735 -0.1875 -0.3125\nv 0.396658 -0.1875 -0.3125\nv 0.398438 -0.1875 -0.310139\nv 0.501208 -0.1875 -0.3125\nv 0.5 -0.1875 -0.310017\nv -0.309522 -0.179688 -0.3125\nv -0.304688 -0.179688 -0.307071\nv -0.222644 -0.179688 -0.3125\nv 0.396845 -0.179688 -0.3125\nv 0.398438 -0.179688 -0.310553\nv 0.40625 -0.179688 -0.304968\nv 0.500649 -0.179688 -0.3125\nv 0.5 -0.172615 -0.3125\nv 0.5 -0.179688 -0.311281\nv -0.30846 -0.171875 -0.3125\nv -0.304688 -0.171875 -0.308293\nv -0.223021 -0.171875 -0.3125\nv -0.226562 -0.171875 -0.30574\nv 0.397298 -0.171875 -0.3125\nv 0.398438 -0.171875 -0.31118\nv 0.40625 -0.171875 -0.305657\nv 0.499929 -0.171875 -0.3125\nv -0.307085 -0.164062 -0.3125\nv -0.304688 -0.164062 -0.309777\nv -0.223607 -0.164062 -0.3125\nv -0.226562 -0.164062 -0.306795\nv 0.397528 -0.164062 -0.3125\nv 0.398438 -0.164062 -0.31144\nv 0.40625 -0.164062 -0.306056\nv 0.499116 -0.164062 -0.3125\nv -0.30584 -0.15625 -0.3125\nv -0.304688 -0.15625 -0.311109\nv -0.224029 -0.15625 -0.3125\nv -0.226562 -0.15625 -0.307889\nv 0.397998 -0.15625 -0.3125\nv 0.398438 -0.148579 -0.3125\nv 0.398438 -0.15625 -0.311979\nv 0.40625 -0.15625 -0.306497\nv 0.498367 -0.15625 -0.3125\nv -0.304728 -0.148438 -0.3125\nv -0.304688 -0.148017 -0.3125\nv -0.304688 -0.148438 -0.312447\nv -0.296875 -0.148438 -0.304788\nv -0.234375 -0.148438 -0.304729\nv -0.224507 -0.148438 -0.3125\nv -0.226562 -0.148438 -0.309547\nv 0.398449 -0.148438 -0.3125\nv 0.40625 -0.148438 -0.307188\nv 0.49763 -0.148438 -0.3125\nv -0.303936 -0.140625 -0.3125\nv -0.296875 -0.140625 -0.304941\nv -0.234375 -0.140625 -0.305976\nv -0.224931 -0.140625 -0.3125\nv -0.226562 -0.140625 -0.31057\nv 0.398581 -0.140625 -0.3125\nv 0.40625 -0.140625 -0.308007\nv 0.496949 -0.140625 -0.3125\nv 0.492188 -0.140625 -0.305181\nv -0.303544 -0.132812 -0.3125\nv -0.296875 -0.132812 -0.305087\nv -0.234375 -0.132812 -0.30694\nv -0.22547 -0.132812 -0.3125\nv -0.226562 -0.126088 -0.3125\nv -0.226562 -0.132812 -0.311346\nv 0.399615 -0.132812 -0.3125\nv 0.40625 -0.132812 -0.308814\nv 0.414062 -0.132812 -0.305513\nv 0.496168 -0.132812 -0.3125\nv 0.492188 -0.132812 -0.305979\nv -0.303752 -0.125 -0.3125\nv -0.296875 -0.125 -0.304749\nv -0.242188 -0.125 -0.304785\nv -0.226841 -0.125 -0.3125\nv -0.234375 -0.125 -0.307881\nv 0.400206 -0.125 -0.3125\nv 0.40625 -0.125 -0.309351\nv 0.414062 -0.125 -0.306288\nv 0.495424 -0.125 -0.3125\nv 0.492188 -0.125 -0.307026\nv -0.304024 -0.117188 -0.3125\nv -0.242188 -0.117188 -0.305584\nv -0.228771 -0.117188 -0.3125\nv -0.234375 -0.117188 -0.309071\nv 0.39981 -0.117188 -0.3125\nv 0.398438 -0.111372 -0.3125\nv 0.40625 -0.117188 -0.309508\nv 0.414062 -0.117188 -0.306661\nv 0.494998 -0.117188 -0.3125\nv 0.492188 -0.117188 -0.307621\nv -0.304141 -0.109375 -0.3125\nv -0.242188 -0.109375 -0.306357\nv -0.230763 -0.109375 -0.3125\nv -0.234375 -0.109375 -0.310318\nv 0.39808 -0.109375 -0.3125\nv 0.398438 -0.109375 -0.312265\nv 0.40625 -0.109375 -0.309041\nv 0.414062 -0.109375 -0.306604\nv 0.49487 -0.109375 -0.3125\nv 0.492188 -0.109375 -0.307669\nv -0.304567 -0.101562 -0.3125\nv -0.304688 -0.100903 -0.3125\nv -0.242188 -0.101562 -0.307214\nv -0.232582 -0.101562 -0.3125\nv -0.234375 -0.101562 -0.311485\nv 0.396906 -0.101562 -0.3125\nv 0.398438 -0.101562 -0.311555\nv 0.40625 -0.101562 -0.308735\nv 0.414062 -0.101562 -0.306326\nv 0.495592 -0.101562 -0.3125\nv 0.492188 -0.101562 -0.305949\nv -0.305848 -0.09375 -0.3125\nv -0.304688 -0.09375 -0.309444\nv -0.242188 -0.09375 -0.30803\nv -0.233699 -0.09375 -0.3125\nv -0.234375 -0.0889741 -0.3125\nv -0.234375 -0.09375 -0.312144\nv 0.395212 -0.09375 -0.3125\nv 0.398438 -0.09375 -0.310689\nv 0.40625 -0.09375 -0.307978\nv 0.414062 -0.09375 -0.305491\nv 0.497463 -0.09375 -0.3125\nv -0.307068 -0.0859375 -0.3125\nv -0.304688 -0.0859375 -0.305679\nv -0.234807 -0.0859375 -0.3125\nv -0.242188 -0.0859375 -0.308577\nv -0.234375 -0.081776 -0.3125\nv 0.394364 -0.0859375 -0.3125\nv 0.398438 -0.0859375 -0.310538\nv 0.40625 -0.0859375 -0.308092\nv 0.414062 -0.0859375 -0.305099\nv 0.499461 -0.0859375 -0.3125\nv 0.5 -0.0823101 -0.3125\nv -0.30802 -0.078125 -0.3125\nv -0.242188 -0.078125 -0.307935\nv -0.233905 -0.078125 -0.3125\nv -0.234375 -0.078125 -0.312271\nv 0.393912 -0.078125 -0.3125\nv 0.398438 -0.078125 -0.310257\nv 0.40625 -0.078125 -0.307354\nv 0.500449 -0.078125 -0.3125\nv 0.5 -0.078125 -0.310456\nv -0.30913 -0.0703125 -0.3125\nv -0.242188 -0.0703125 -0.30502\nv -0.229512 -0.0703125 -0.3125\nv -0.234375 -0.0703125 -0.310075\nv -0.226562 -0.0655747 -0.3125\nv 0.392777 -0.0703125 -0.3125\nv 0.390625 -0.0663007 -0.3125\nv 0.398438 -0.0703125 -0.310017\nv 0.40625 -0.0703125 -0.306575\nv 0.501708 -0.0703125 -0.3125\nv -0.309932 -0.0625 -0.3125\nv -0.234375 -0.0625 -0.306459\nv -0.224469 -0.0625 -0.3125\nv -0.226562 -0.0625 -0.31143\nv 0.388732 -0.0625 -0.3125\nv 0.390625 -0.0625 -0.311548\nv 0.398438 -0.0625 -0.307827\nv 0.502833 -0.0625 -0.3125\nv -0.310313 -0.0546875 -0.3125\nv -0.222016 -0.0546875 -0.3125\nv -0.226562 -0.0546875 -0.309566\nv 0.389996 -0.0546875 -0.3125\nv 0.390625 -0.0546875 -0.31223\nv 0.398438 -0.0546875 -0.308099\nv 0.50305 -0.0546875 -0.3125\nv -0.310453 -0.046875 -0.3125\nv -0.21879 -0.046875 -0.3125\nv -0.226562 -0.046875 -0.307066\nv -0.21875 -0.0468148 -0.3125\nv 0.389574 -0.046875 -0.3125\nv 0.390625 -0.046875 -0.312147\nv 0.398438 -0.046875 -0.308465\nv 0.503922 -0.046875 -0.3125\nv -0.310069 -0.0390625 -0.3125\nv -0.213005 -0.0390625 -0.3125\nv -0.21875 -0.0390625 -0.30918\nv 0.386274 -0.0390625 -0.3125\nv 0.390625 -0.0390625 -0.311159\nv 0.398438 -0.0390625 -0.308243\nv 0.504298 -0.0390625 -0.3125\nv -0.309557 -0.03125 -0.3125\nv -0.21151 -0.03125 -0.3125\nv -0.21875 -0.03125 -0.307711\nv -0.210938 -0.0290158 -0.3125\nv 0.385253 -0.03125 -0.3125\nv 0.390625 -0.03125 -0.311192\nv 0.398438 -0.03125 -0.308625\nv 0.40625 -0.03125 -0.305453\nv 0.503846 -0.03125 -0.3125\nv -0.309606 -0.0234375 -0.3125\nv -0.21875 -0.0234375 -0.306026\nv -0.209329 -0.0234375 -0.3125\nv -0.210938 -0.0234375 -0.311473\nv 0.38849 -0.0234375 -0.3125\nv 0.390625 -0.0170262 -0.3125\nv 0.390625 -0.0234375 -0.312022\nv 0.398438 -0.0234375 -0.309859\nv 0.40625 -0.0234375 -0.306654\nv 0.503156 -0.0234375 -0.3125\nv -0.310577 -0.015625 -0.3125\nv -0.207975 -0.015625 -0.3125\nv -0.210938 -0.015625 -0.31031\nv 0.391375 -0.015625 -0.3125\nv 0.398438 -0.015625 -0.311076\nv 0.40625 -0.015625 -0.307525\nv 0.502127 -0.015625 -0.3125\nv -0.311621 -0.0078125 -0.3125\nv -0.203315 -0.0078125 -0.3125\nv -0.210938 -0.0078125 -0.307284\nv -0.203125 -0.00724743 -0.3125\nv 0.296875 -0.00264032 -0.3125\nv 0.304688 -0.00365862 -0.3125\nv 0.3125 -0.00178615 -0.3125\nv 0.320312 -0.000353595 -0.3125\nv 0.393318 -0.0078125 -0.3125\nv 0.398438 -0.0078125 -0.311508\nv 0.40625 -0.0078125 -0.308459\nv 0.50144 -0.0078125 -0.3125\nv -0.311658 0 -0.3125\nv -0.210938 0 -0.304755\nv -0.200702 0 -0.3125\nv -0.203125 0 -0.31089\nv 0.289361 0 -0.3125\nv 0.289062 0.00157978 -0.3125\nv 0.296875 0 -0.312101\nv 0.304688 0 -0.31193\nv 0.3125 0 -0.312158\nv 0.322471 0 -0.3125\nv 0.320312 0 -0.31242\nv 0.328125 0.0053346 -0.3125\nv 0.395452 0 -0.3125\nv 0.398438 0 -0.31171\nv 0.40625 0 -0.308799\nv 0.501366 0 -0.3125\nv -0.311566 0.0078125 -0.3125\nv -0.197297 0.0078125 -0.3125\nv -0.203125 0.0078125 -0.30714\nv -0.195312 0.010746 -0.3125\nv -0.1875 0.0153894 -0.3125\nv 0.28815 0.0078125 -0.3125\nv 0.289062 0.0078125 -0.312422\nv 0.296875 0.0078125 -0.31199\nv 0.304688 0.0078125 -0.311682\nv 0.3125 0.0078125 -0.311719\nv 0.320312 0.0078125 -0.312035\nv 0.329159 0.0078125 -0.3125\nv 0.328125 0.0078125 -0.312389\nv 0.335938 0.014637 -0.3125\nv 0.34375 0.0150858 -0.3125\nv 0.351562 0.0149541 -0.3125\nv 0.359375 0.0150619 -0.3125\nv 0.367188 0.0155481 -0.3125\nv 0.393725 0.0078125 -0.3125\nv 0.390625 0.011297 -0.3125\nv 0.398438 0.0078125 -0.311242\nv 0.40625 0.0078125 -0.307486\nv 0.501094 0.0078125 -0.3125\nv -0.31153 0.015625 -0.3125\nv -0.195312 0.015625 -0.309177\nv -0.186973 0.015625 -0.3125\nv -0.1875 0.015625 -0.312364\nv -0.179688 0.0172584 -0.3125\nv -0.171875 0.0190307 -0.3125\nv -0.164062 0.0199143 -0.3125\nv -0.15625 0.0207759 -0.3125\nv -0.148438 0.021353 -0.3125\nv -0.140625 0.0217946 -0.3125\nv -0.132812 0.0221952 -0.3125\nv -0.125 0.0227222 -0.3125\nv -0.117188 0.0231924 -0.3125\nv -0.0625 0.0232288 -0.3125\nv -0.0546875 0.0226456 -0.3125\nv -0.046875 0.0222347 -0.3125\nv -0.0390625 0.0218508 -0.3125\nv -0.03125 0.0217493 -0.3125\nv -0.0234375 0.0219846 -0.3125\nv -0.015625 0.0220947 -0.3125\nv -0.0078125 0.0221311 -0.3125\nv 0 0.0223324 -0.3125\nv 0.0078125 0.022348 -0.3125\nv 0.015625 0.022249 -0.3125\nv 0.0234375 0.0222957 -0.3125\nv 0.03125 0.0222125 -0.3125\nv 0.0390625 0.0221331 -0.3125\nv 0.046875 0.021951 -0.3125\nv 0.0546875 0.0217585 -0.3125\nv 0.0625 0.0215355 -0.3125\nv 0.0703125 0.0213589 -0.3125\nv 0.078125 0.0212509 -0.3125\nv 0.0859375 0.0211334 -0.3125\nv 0.09375 0.0209537 -0.3125\nv 0.101562 0.0208311 -0.3125\nv 0.109375 0.020806 -0.3125\nv 0.117188 0.020696 -0.3125\nv 0.125 0.0204626 -0.3125\nv 0.132812 0.0202164 -0.3125\nv 0.140625 0.0200833 -0.3125\nv 0.148438 0.0199621 -0.3125\nv 0.15625 0.0198491 -0.3125\nv 0.164062 0.0197466 -0.3125\nv 0.171875 0.0196131 -0.3125\nv 0.179688 0.0194385 -0.3125\nv 0.1875 0.019254 -0.3125\nv 0.195312 0.0190242 -0.3125\nv 0.203125 0.0188563 -0.3125\nv 0.210938 0.0186632 -0.3125\nv 0.21875 0.0184169 -0.3125\nv 0.226562 0.0182393 -0.3125\nv 0.234375 0.0184302 -0.3125\nv 0.242188 0.0183199 -0.3125\nv 0.25 0.0179289 -0.3125\nv 0.257812 0.0173739 -0.3125\nv 0.265625 0.0170985 -0.3125\nv 0.273438 0.0164682 -0.3125\nv 0.28419 0.015625 -0.3125\nv 0.28125 0.0158854 -0.3125\nv 0.289062 0.015625 -0.31224\nv 0.296875 0.015625 -0.311903\nv 0.304688 0.015625 -0.311496\nv 0.3125 0.015625 -0.311395\nv 0.320312 0.015625 -0.311649\nv 0.328125 0.015625 -0.311811\nv 0.335938 0.015625 -0.312372\nv 0.34375 0.015625 -0.31241\nv 0.351562 0.015625 -0.312364\nv 0.359375 0.015625 -0.312354\nv 0.367808 0.015625 -0.3125\nv 0.367188 0.015625 -0.312476\nv 0.375 0.0161893 -0.3125\nv 0.385756 0.015625 -0.3125\nv 0.382812 0.0165146 -0.3125\nv 0.390625 0.015625 -0.311414\nv 0.398438 0.015625 -0.30843\nv 0.501271 0.015625 -0.3125\nv -0.311405 0.0234375 -0.3125\nv -0.179688 0.0234375 -0.304866\nv -0.171875 0.0234375 -0.306955\nv -0.164062 0.0234375 -0.308359\nv -0.15625 0.0234375 -0.309651\nv -0.148438 0.0234375 -0.310433\nv -0.140625 0.0234375 -0.310924\nv -0.132812 0.0234375 -0.311324\nv -0.125 0.0234375 -0.311786\nv -0.110457 0.0234375 -0.3125\nv -0.117188 0.0234375 -0.312232\nv -0.109375 0.0234586 -0.3125\nv -0.101562 0.0235733 -0.3125\nv -0.09375 0.0237308 -0.3125\nv -0.0859375 0.0237365 -0.3125\nv -0.078125 0.0237009 -0.3125\nv -0.0662081 0.0234375 -0.3125\nv -0.0703125 0.0235743 -0.3125\nv -0.0625 0.0234375 -0.312253\nv -0.0546875 0.0234375 -0.311576\nv -0.046875 0.0234375 -0.31108\nv -0.0390625 0.0234375 -0.310598\nv -0.03125 0.0234375 -0.310393\nv -0.0234375 0.0234375 -0.310555\nv -0.015625 0.0234375 -0.310567\nv -0.0078125 0.0234375 -0.310522\nv 0 0.0234375 -0.310713\nv 0.0078125 0.0234375 -0.310577\nv 0.015625 0.0234375 -0.310306\nv 0.0234375 0.0234375 -0.310356\nv 0.03125 0.0234375 -0.310212\nv 0.0390625 0.0234375 -0.310099\nv 0.046875 0.0234375 -0.309847\nv 0.0546875 0.0234375 -0.309496\nv 0.0625 0.0234375 -0.309077\nv 0.0703125 0.0234375 -0.308761\nv 0.078125 0.0234375 -0.308596\nv 0.0859375 0.0234375 -0.308474\nv 0.09375 0.0234375 -0.30829\nv 0.101562 0.0234375 -0.3082\nv 0.109375 0.0234375 -0.308211\nv 0.117188 0.0234375 -0.308117\nv 0.125 0.0234375 -0.30789\nv 0.132812 0.0234375 -0.307514\nv 0.140625 0.0234375 -0.30722\nv 0.148438 0.0234375 -0.306926\nv 0.15625 0.0234375 -0.306715\nv 0.164062 0.0234375 -0.306455\nv 0.171875 0.0234375 -0.306195\nv 0.179688 0.0234375 -0.305943\nv 0.1875 0.0234375 -0.305643\nv 0.195312 0.0234375 -0.305494\nv 0.203125 0.0234375 -0.30536\nv 0.210938 0.0234375 -0.305289\nv 0.21875 0.0234375 -0.30516\nv 0.226562 0.0234375 -0.305388\nv 0.234375 0.0234375 -0.305681\nv 0.242188 0.0234375 -0.305691\nv 0.25 0.0234375 -0.305628\nv 0.257812 0.0234375 -0.30566\nv 0.265625 0.0234375 -0.305645\nv 0.273438 0.0234375 -0.305784\nv 0.28125 0.0234375 -0.306349\nv 0.289062 0.0234375 -0.306953\nv 0.296875 0.0234375 -0.307486\nv 0.304688 0.0234375 -0.307722\nv 0.3125 0.0234375 -0.30803\nv 0.320312 0.0234375 -0.308253\nv 0.328125 0.0234375 -0.308617\nv 0.335938 0.0234375 -0.309252\nv 0.34375 0.0234375 -0.309583\nv 0.351562 0.0234375 -0.309575\nv 0.359375 0.0234375 -0.309369\nv 0.367188 0.0234375 -0.309141\nv 0.375 0.0234375 -0.308823\nv 0.382812 0.0234375 -0.307994\nv 0.390625 0.0234375 -0.304986\nv 0.501303 0.0234375 -0.3125\nv -0.311062 0.03125 -0.3125\nv 0.500188 0.03125 -0.3125\nv 0.5 0.0318406 -0.3125\nv 0.5 0.03125 -0.310923\nv -0.310299 0.0390625 -0.3125\nv 0.497212 0.0390625 -0.3125\nv -0.309596 0.046875 -0.3125\nv 0.492726 0.046875 -0.3125\nv 0.492188 0.0475012 -0.3125\nv 0.492188 0.046875 -0.307988\nv -0.308557 0.0546875 -0.3125\nv 0.476562 0.0598264 -0.3125\nv 0.484678 0.0546875 -0.3125\nv 0.484375 0.0549456 -0.3125\nv 0.484375 0.0546875 -0.309584\nv -0.307143 0.0625 -0.3125\nv 0.34375 0.0703035 -0.3125\nv 0.351562 0.0701444 -0.3125\nv 0.359375 0.069866 -0.3125\nv 0.367188 0.0695579 -0.3125\nv 0.375 0.0692896 -0.3125\nv 0.382812 0.0689928 -0.3125\nv 0.390625 0.068699 -0.3125\nv 0.398438 0.06859 -0.3125\nv 0.40625 0.0686431 -0.3125\nv 0.414062 0.0687162 -0.3125\nv 0.421875 0.0687389 -0.3125\nv 0.429688 0.0686403 -0.3125\nv 0.4375 0.0685565 -0.3125\nv 0.445312 0.0684012 -0.3125\nv 0.453125 0.0671814 -0.3125\nv 0.460938 0.0654488 -0.3125\nv 0.470874 0.0625 -0.3125\nv 0.46875 0.0634686 -0.3125\nv -0.306844 0.0703125 -0.3125\nv -0.203125 0.0778803 -0.3125\nv -0.195312 0.0767367 -0.3125\nv -0.1875 0.0752135 -0.3125\nv -0.179688 0.0740798 -0.3125\nv -0.171875 0.0734515 -0.3125\nv -0.164062 0.0730631 -0.3125\nv -0.15625 0.0728911 -0.3125\nv -0.148438 0.0727035 -0.3125\nv -0.140625 0.0726198 -0.3125\nv -0.132812 0.0726469 -0.3125\nv -0.125 0.0727497 -0.3125\nv -0.117188 0.0728324 -0.3125\nv -0.109375 0.0729173 -0.3125\nv -0.101562 0.0730487 -0.3125\nv -0.09375 0.0731687 -0.3125\nv -0.0859375 0.0732812 -0.3125\nv -0.078125 0.073271 -0.3125\nv -0.0703125 0.073159 -0.3125\nv -0.0625 0.0729383 -0.3125\nv -0.0546875 0.0727576 -0.3125\nv -0.046875 0.0725517 -0.3125\nv -0.0390625 0.0723301 -0.3125\nv -0.03125 0.0721562 -0.3125\nv -0.0234375 0.0719841 -0.3125\nv -0.015625 0.0719132 -0.3125\nv -0.0078125 0.0718472 -0.3125\nv 0 0.0718668 -0.3125\nv 0.0078125 0.0717844 -0.3125\nv 0.015625 0.0716918 -0.3125\nv 0.0234375 0.0716855 -0.3125\nv 0.03125 0.0716364 -0.3125\nv 0.0390625 0.0715548 -0.3125\nv 0.046875 0.0714666 -0.3125\nv 0.0546875 0.0713926 -0.3125\nv 0.0625 0.0713554 -0.3125\nv 0.0703125 0.071347 -0.3125\nv 0.078125 0.0713119 -0.3125\nv 0.0859375 0.0712658 -0.3125\nv 0.09375 0.0712549 -0.3125\nv 0.101562 0.0712628 -0.3125\nv 0.109375 0.0712705 -0.3125\nv 0.117188 0.0713063 -0.3125\nv 0.125 0.0713459 -0.3125\nv 0.132812 0.0714109 -0.3125\nv 0.140625 0.0714175 -0.3125\nv 0.148438 0.0713909 -0.3125\nv 0.15625 0.0714114 -0.3125\nv 0.164062 0.0714403 -0.3125\nv 0.171875 0.0714444 -0.3125\nv 0.179688 0.0714165 -0.3125\nv 0.1875 0.0714108 -0.3125\nv 0.195312 0.0714256 -0.3125\nv 0.203125 0.0713674 -0.3125\nv 0.210938 0.0713529 -0.3125\nv 0.21875 0.0713142 -0.3125\nv 0.226562 0.0712561 -0.3125\nv 0.234375 0.0711633 -0.3125\nv 0.242188 0.0710312 -0.3125\nv 0.25 0.0709122 -0.3125\nv 0.257812 0.0708093 -0.3125\nv 0.265625 0.0707395 -0.3125\nv 0.273438 0.0706929 -0.3125\nv 0.28125 0.070684 -0.3125\nv 0.289062 0.0707116 -0.3125\nv 0.296875 0.0707063 -0.3125\nv 0.304688 0.0706887 -0.3125\nv 0.3125 0.07067 -0.3125\nv 0.320312 0.070532 -0.3125\nv 0.328125 0.0704144 -0.3125\nv 0.342955 0.0703125 -0.3125\nv 0.335938 0.0703916 -0.3125\nv 0.34375 0.0703125 -0.312225\nv 0.351562 0.0703125 -0.307043\nv -0.306983 0.078125 -0.3125\nv -0.21875 0.0855666 -0.3125\nv -0.204369 0.078125 -0.3125\nv -0.210938 0.0798303 -0.3125\nv -0.307326 0.0859375 -0.3125\nv -0.219332 0.0859375 -0.3125\nv -0.226562 0.0924675 -0.3125\nv -0.307998 0.09375 -0.3125\nv -0.265625 0.09375 -0.305534\nv -0.227475 0.09375 -0.3125\nv -0.308373 0.101562 -0.3125\nv -0.304688 0.101562 -0.304915\nv -0.265625 0.101562 -0.305356\nv -0.242188 0.101562 -0.306745\nv -0.232964 0.101562 -0.3125\nv -0.234375 0.108006 -0.3125\nv -0.234375 0.101562 -0.310364\nv -0.308527 0.109375 -0.3125\nv -0.304688 0.109375 -0.305489\nv -0.234702 0.109375 -0.3125\nv -0.242188 0.109375 -0.305641\nv -0.308763 0.117188 -0.3125\nv -0.304688 0.117188 -0.305223\nv -0.23554 0.117188 -0.3125\nv -0.242188 0.117188 -0.306044\nv -0.309163 0.125 -0.3125\nv -0.2363 0.125 -0.3125\nv -0.242188 0.125 -0.307449\nv -0.309525 0.132812 -0.3125\nv -0.2371 0.132812 -0.3125\nv -0.242188 0.132812 -0.308353\nv -0.309461 0.140625 -0.3125\nv -0.236836 0.140625 -0.3125\nv -0.242188 0.140625 -0.307761\nv -0.309315 0.148438 -0.3125\nv -0.235858 0.148438 -0.3125\nv -0.242188 0.148438 -0.305654\nv -0.309307 0.15625 -0.3125\nv -0.234983 0.15625 -0.3125\nv -0.234375 0.163362 -0.3125\nv -0.309442 0.164062 -0.3125\nv -0.234333 0.164062 -0.3125\nv -0.234375 0.164062 -0.312435\nv -0.30994 0.171875 -0.3125\nv -0.23299 0.171875 -0.3125\nv -0.234375 0.171875 -0.309854\nv -0.310578 0.179688 -0.3125\nv -0.231542 0.179688 -0.3125\nv -0.234375 0.179688 -0.304825\nv -0.311075 0.1875 -0.3125\nv -0.229766 0.1875 -0.3125\nv -0.311451 0.195312 -0.3125\nv -0.22833 0.195312 -0.3125\nv -0.311913 0.203125 -0.3125\nv -0.227323 0.203125 -0.3125\nv -0.226562 0.209233 -0.3125\nv -0.312445 0.210938 -0.3125\nv -0.3125 0.211785 -0.3125\nv -0.226361 0.210938 -0.3125\nv -0.226562 0.210938 -0.311507\nv -0.31291 0.21875 -0.3125\nv -0.3125 0.21875 -0.311825\nv -0.225505 0.21875 -0.3125\nv -0.226562 0.21875 -0.306037\nv -0.313414 0.226562 -0.3125\nv -0.3125 0.226562 -0.311054\nv -0.224956 0.226562 -0.3125\nv -0.313754 0.234375 -0.3125\nv -0.3125 0.234375 -0.310584\nv -0.224702 0.234375 -0.3125\nv -0.313833 0.242188 -0.3125\nv -0.3125 0.242188 -0.310511\nv -0.224635 0.242188 -0.3125\nv -0.313584 0.25 -0.3125\nv -0.3125 0.25 -0.310933\nv -0.224762 0.25 -0.3125\nv -0.313496 0.257812 -0.3125\nv -0.3125 0.257812 -0.311132\nv -0.224957 0.257812 -0.3125\nv -0.312996 0.265625 -0.3125\nv -0.3125 0.265625 -0.311837\nv -0.225142 0.265625 -0.3125\nv -0.312544 0.273438 -0.3125\nv -0.3125 0.274288 -0.3125\nv -0.3125 0.273438 -0.312443\nv -0.225378 0.273438 -0.3125\nv -0.312106 0.28125 -0.3125\nv -0.225958 0.28125 -0.3125\nv -0.226562 0.28813 -0.3125\nv -0.226562 0.28125 -0.306483\nv -0.311701 0.289062 -0.3125\nv -0.226684 0.289062 -0.3125\nv -0.311306 0.296875 -0.3125\nv -0.304688 0.296875 -0.305062\nv -0.22828 0.296875 -0.3125\nv -0.311225 0.304688 -0.3125\nv -0.304688 0.304688 -0.305352\nv -0.230142 0.304688 -0.3125\nv -0.311306 0.3125 -0.3125\nv -0.304688 0.3125 -0.305394\nv -0.232414 0.3125 -0.3125\nv -0.234375 0.320298 -0.3125\nv -0.234375 0.3125 -0.305363\nv -0.311367 0.320312 -0.3125\nv -0.304688 0.320312 -0.305164\nv -0.234379 0.320312 -0.3125\nv -0.311568 0.328125 -0.3125\nv -0.304688 0.328125 -0.304704\nv -0.237262 0.328125 -0.3125\nv -0.242188 0.328125 -0.304839\nv -0.311718 0.335938 -0.3125\nv -0.239966 0.335938 -0.3125\nv -0.242188 0.335938 -0.309352\nv -0.311958 0.34375 -0.3125\nv -0.242096 0.34375 -0.3125\nv -0.242188 0.34375 -0.312357\nv -0.312496 0.351562 -0.3125\nv -0.3125 0.351612 -0.3125\nv -0.24194 0.351562 -0.3125\nv -0.242188 0.351562 -0.312085\nv -0.31306 0.359375 -0.3125\nv -0.3125 0.359375 -0.311712\nv -0.241718 0.359375 -0.3125\nv -0.242188 0.359375 -0.31173\nv -0.313668 0.367188 -0.3125\nv -0.3125 0.367188 -0.310807\nv -0.241717 0.367188 -0.3125\nv -0.242188 0.367188 -0.311706\nv -0.314255 0.375 -0.3125\nv -0.3125 0.375 -0.309895\nv -0.241582 0.375 -0.3125\nv -0.242188 0.375 -0.311405\nv -0.314815 0.382812 -0.3125\nv -0.3125 0.382812 -0.308979\nv -0.241348 0.382812 -0.3125\nv -0.242188 0.382812 -0.310858\nv -0.315261 0.390625 -0.3125\nv -0.3125 0.390625 -0.308231\nv -0.24126 0.390625 -0.3125\nv -0.242188 0.390625 -0.310605\nv -0.31564 0.398438 -0.3125\nv -0.3125 0.398438 -0.307694\nv -0.24108 0.398438 -0.3125\nv -0.242188 0.398438 -0.310272\nv -0.315914 0.40625 -0.3125\nv -0.3125 0.40625 -0.307411\nv -0.241107 0.40625 -0.3125\nv -0.242188 0.40625 -0.310427\nv -0.316176 0.414062 -0.3125\nv -0.3125 0.414062 -0.307246\nv -0.241331 0.414062 -0.3125\nv -0.242188 0.414062 -0.310874\nv -0.316426 0.421875 -0.3125\nv -0.3125 0.421875 -0.307236\nv -0.24198 0.421875 -0.3125\nv -0.242188 0.422857 -0.3125\nv -0.242188 0.421875 -0.312091\nv -0.316714 0.429688 -0.3125\nv -0.3125 0.429688 -0.307186\nv -0.243912 0.429688 -0.3125\nv -0.317002 0.4375 -0.3125\nv -0.3125 0.4375 -0.30725\nv -0.245594 0.4375 -0.3125\nv -0.25 0.4375 -0.305972\nv -0.317326 0.445312 -0.3125\nv -0.3125 0.445312 -0.307132\nv -0.248013 0.445312 -0.3125\nv -0.25 0.451942 -0.3125\nv -0.25 0.445312 -0.309935\nv -0.317573 0.453125 -0.3125\nv -0.3125 0.453125 -0.307042\nv -0.25035 0.453125 -0.3125\nv -0.317705 0.460938 -0.3125\nv -0.3125 0.460938 -0.307018\nv -0.251161 0.460938 -0.3125\nv -0.257812 0.460938 -0.30553\nv -0.317792 0.46875 -0.3125\nv -0.3125 0.46875 -0.306853\nv -0.251651 0.46875 -0.3125\nv -0.257812 0.46875 -0.30633\nv -0.317876 0.476562 -0.3125\nv -0.3125 0.476562 -0.306685\nv -0.252177 0.476562 -0.3125\nv -0.257812 0.476562 -0.306827\nv -0.318034 0.484375 -0.3125\nv -0.3125 0.484375 -0.306454\nv -0.252641 0.484375 -0.3125\nv -0.257812 0.484375 -0.307333\nv -0.318561 0.492188 -0.3125\nv -0.3125 0.492188 -0.306096\nv -0.253509 0.492188 -0.3125\nv -0.257812 0.492188 -0.308627\nv -0.319436 0.5 -0.3125\nv -0.3125 0.5 -0.305449\nv -0.254522 0.5 -0.3125\nv -0.257812 0.5 -0.309601\nv -0.320312 0.507812 -0.3125\nv -0.320312 0.507817 -0.3125\nv -0.3125 0.507812 -0.304789\nv -0.255362 0.507812 -0.3125\nv -0.257812 0.507812 -0.310255\nv -0.321236 0.515625 -0.3125\nv -0.320312 0.515625 -0.311346\nv -0.255914 0.515625 -0.3125\nv -0.257812 0.515625 -0.310662\nv -0.322144 0.523438 -0.3125\nv -0.320312 0.523438 -0.310243\nv -0.256537 0.523438 -0.3125\nv -0.257812 0.523438 -0.311202\nv -0.322851 0.53125 -0.3125\nv -0.320312 0.53125 -0.309436\nv -0.265625 0.53125 -0.304731\nv -0.256918 0.53125 -0.3125\nv -0.257812 0.53125 -0.311492\nv -0.323451 0.539062 -0.3125\nv -0.320312 0.539062 -0.308869\nv -0.265625 0.539062 -0.304968\nv -0.257151 0.539062 -0.3125\nv -0.257812 0.539062 -0.311705\nv -0.324126 0.546875 -0.3125\nv -0.320312 0.546875 -0.308387\nv -0.265625 0.546875 -0.305389\nv -0.257412 0.546875 -0.3125\nv -0.257812 0.552116 -0.3125\nv -0.257812 0.546875 -0.312028\nv -0.324783 0.554688 -0.3125\nv -0.320312 0.554688 -0.3079\nv -0.258041 0.554688 -0.3125\nv -0.265625 0.554688 -0.306004\nv -0.325494 0.5625 -0.3125\nv -0.320312 0.5625 -0.307301\nv -0.259119 0.5625 -0.3125\nv -0.265625 0.5625 -0.30649\nv -0.326413 0.570312 -0.3125\nv -0.320312 0.570312 -0.306549\nv -0.260851 0.570312 -0.3125\nv -0.265625 0.570312 -0.307487\nv -0.327363 0.578125 -0.3125\nv -0.328125 0.585269 -0.3125\nv -0.320312 0.578125 -0.305482\nv -0.262031 0.578125 -0.3125\nv -0.265625 0.578125 -0.308586\nv -0.328185 0.585938 -0.3125\nv -0.328125 0.585938 -0.312425\nv -0.262618 0.585938 -0.3125\nv -0.265625 0.585938 -0.309076\nv -0.32884 0.59375 -0.3125\nv -0.328125 0.59375 -0.31161\nv -0.262808 0.59375 -0.3125\nv -0.265625 0.59375 -0.309374\nv -0.329628 0.601562 -0.3125\nv -0.328125 0.601562 -0.310637\nv -0.263774 0.601562 -0.3125\nv -0.265625 0.601562 -0.310252\nv -0.330702 0.609375 -0.3125\nv -0.328125 0.609375 -0.309155\nv -0.273438 0.609375 -0.304762\nv -0.265231 0.609375 -0.3125\nv -0.265625 0.609375 -0.311982\nv -0.331695 0.617188 -0.3125\nv -0.328125 0.617188 -0.307\nv -0.265061 0.617188 -0.3125\nv -0.265625 0.617188 -0.31153\nv -0.332708 0.625 -0.3125\nv -0.328125 0.625 -0.30487\nv -0.263139 0.625 -0.3125\nv -0.265625 0.625 -0.307688\nv -0.333656 0.632812 -0.3125\nv -0.261179 0.632812 -0.3125\nv -0.334394 0.640625 -0.3125\nv -0.258769 0.640625 -0.3125\nv -0.334996 0.648438 -0.3125\nv -0.258793 0.648438 -0.3125\nv -0.335647 0.65625 -0.3125\nv -0.335938 0.660145 -0.3125\nv -0.259345 0.65625 -0.3125\nv -0.336239 0.664062 -0.3125\nv -0.335938 0.664062 -0.311741\nv -0.259876 0.664062 -0.3125\nv -0.336535 0.671875 -0.3125\nv -0.335938 0.671875 -0.310935\nv -0.260186 0.671875 -0.3125\nv -0.336681 0.679688 -0.3125\nv -0.335938 0.679688 -0.310545\nv -0.260046 0.679688 -0.3125\nv -0.336877 0.6875 -0.3125\nv -0.335938 0.6875 -0.310139\nv -0.260111 0.6875 -0.3125\nv -0.337269 0.695312 -0.3125\nv -0.335938 0.695312 -0.309369\nv -0.26025 0.695312 -0.3125\nv -0.337523 0.703125 -0.3125\nv -0.335938 0.703125 -0.308894\nv -0.260725 0.703125 -0.3125\nv -0.337119 0.710938 -0.3125\nv -0.335938 0.710938 -0.309786\nv -0.261926 0.710938 -0.3125\nv -0.33671 0.71875 -0.3125\nv -0.335938 0.723571 -0.3125\nv -0.335938 0.71875 -0.310815\nv -0.263427 0.71875 -0.3125\nv -0.33549 0.726562 -0.3125\nv -0.265384 0.726562 -0.3125\nv -0.265625 0.727323 -0.3125\nv -0.265625 0.726562 -0.311128\nv -0.334416 0.734375 -0.3125\nv -0.267517 0.734375 -0.3125\nv -0.333307 0.742188 -0.3125\nv -0.270456 0.742188 -0.3125\nv -0.273438 0.749766 -0.3125\nv -0.332492 0.75 -0.3125\nv -0.273534 0.75 -0.3125\nv -0.332297 0.757812 -0.3125\nv -0.278699 0.757812 -0.3125\nv -0.28125 0.7617 -0.3125\nv -0.28125 0.757812 -0.305823\nv -0.332118 0.765625 -0.3125\nv -0.328125 0.765625 -0.306017\nv -0.284448 0.765625 -0.3125\nv -0.289062 0.770013 -0.3125\nv -0.289062 0.765625 -0.307375\nv -0.331663 0.773438 -0.3125\nv -0.328125 0.773438 -0.308103\nv -0.292047 0.773438 -0.3125\nv -0.296875 0.779655 -0.3125\nv -0.296875 0.773438 -0.307171\nv -0.331321 0.78125 -0.3125\nv -0.328125 0.78125 -0.309715\nv -0.297964 0.78125 -0.3125\nv -0.330084 0.789062 -0.3125\nv -0.328125 0.789062 -0.311204\nv -0.320312 0.789062 -0.30712\nv -0.304151 0.789062 -0.3125\nv -0.304688 0.789722 -0.3125\nv -0.304688 0.789062 -0.311779\nv -0.330018 0.796875 -0.3125\nv -0.328125 0.796875 -0.311389\nv -0.320312 0.796875 -0.307736\nv -0.30973 0.796875 -0.3125\nv -0.3125 0.802084 -0.3125\nv -0.3125 0.796875 -0.308207\nv -0.330048 0.804688 -0.3125\nv -0.328125 0.804688 -0.311467\nv -0.314991 0.804688 -0.3125\nv -0.320312 0.804688 -0.309418\nv -0.33166 0.8125 -0.3125\nv -0.328125 0.8125 -0.311209\nv -0.319993 0.8125 -0.3125\nv -0.320312 0.813248 -0.3125\nv -0.320312 0.8125 -0.312256\nv -0.331205 0.820312 -0.3125\nv -0.335938 0.825004 -0.3125\nv -0.325766 0.820312 -0.3125\nv -0.328125 0.820312 -0.311635\nv -0.337791 0.828125 -0.3125\nv -0.335938 0.828125 -0.31164\nv -0.327706 0.828125 -0.3125\nv -0.328125 0.828125 -0.312271\nv -0.340433 0.835938 -0.3125\nv -0.335938 0.840817 -0.3125\nv -0.335938 0.835938 -0.310765\nv -0.327992 0.835938 -0.3125\nv -0.328125 0.836199 -0.3125\nv -0.328125 0.835938 -0.312445\nv 0.414062 -0.735873 -0.304688\nv 0.421875 -0.736557 -0.304688\nv 0.429688 -0.735937 -0.304688\nv 0.4375 -0.734697 -0.304688\nv -0.296875 -0.727412 -0.304688\nv -0.289062 -0.727803 -0.304688\nv -0.28125 -0.727982 -0.304688\nv -0.273438 -0.727024 -0.304688\nv 0.410168 -0.734375 -0.304688\nv 0.40625 -0.730964 -0.304688\nv 0.414062 -0.734375 -0.303465\nv 0.421875 -0.734375 -0.302831\nv 0.429688 -0.734375 -0.303133\nv 0.438818 -0.734375 -0.304688\nv 0.4375 -0.734375 -0.304266\nv 0.445312 -0.732052 -0.304688\nv 0.453125 -0.728468 -0.304688\nv -0.3125 -0.722632 -0.304688\nv -0.30399 -0.726562 -0.304688\nv -0.304688 -0.726378 -0.304688\nv -0.296875 -0.726562 -0.303417\nv -0.289062 -0.726562 -0.302861\nv -0.28125 -0.726562 -0.302962\nv -0.272059 -0.726562 -0.304688\nv -0.273438 -0.726562 -0.304174\nv -0.265625 -0.722746 -0.304688\nv 0.403144 -0.726562 -0.304688\nv 0.40625 -0.726562 -0.302977\nv 0.414062 -0.726562 -0.300171\nv 0.421875 -0.726562 -0.299482\nv 0.429688 -0.726562 -0.299481\nv 0.4375 -0.726562 -0.299646\nv 0.445312 -0.726562 -0.300508\nv 0.457086 -0.726562 -0.304688\nv 0.453125 -0.726562 -0.303149\nv 0.460938 -0.721731 -0.304688\nv -0.328125 -0.714723 -0.304688\nv -0.319453 -0.71875 -0.304688\nv -0.320312 -0.7183 -0.304688\nv -0.3125 -0.71875 -0.30216\nv -0.304688 -0.71875 -0.300537\nv -0.296875 -0.71875 -0.299556\nv -0.289062 -0.71875 -0.299331\nv -0.28125 -0.71875 -0.299675\nv -0.273438 -0.71875 -0.299924\nv -0.261625 -0.71875 -0.304688\nv -0.265625 -0.71875 -0.302377\nv -0.257812 -0.714 -0.304688\nv 0.399635 -0.71875 -0.304688\nv 0.398438 -0.717012 -0.304688\nv 0.40625 -0.71875 -0.301372\nv 0.414062 -0.71875 -0.299455\nv 0.421875 -0.71875 -0.298772\nv 0.429688 -0.71875 -0.29853\nv 0.4375 -0.71875 -0.298915\nv 0.445312 -0.71875 -0.300056\nv 0.453125 -0.71875 -0.30171\nv 0.464316 -0.71875 -0.304688\nv 0.460938 -0.71875 -0.303795\nv 0.46875 -0.715446 -0.304688\nv -0.331955 -0.710938 -0.304688\nv -0.328125 -0.710938 -0.301857\nv -0.320312 -0.710938 -0.299742\nv -0.3125 -0.710938 -0.299028\nv -0.304688 -0.710938 -0.298808\nv -0.296875 -0.710938 -0.298118\nv -0.289062 -0.710938 -0.297998\nv -0.28125 -0.710938 -0.297155\nv -0.273438 -0.710938 -0.29704\nv -0.265625 -0.710938 -0.298919\nv -0.255839 -0.710938 -0.304688\nv -0.257812 -0.710938 -0.302985\nv -0.25 -0.703449 -0.304688\nv 0.39453 -0.710938 -0.304688\nv 0.398438 -0.710938 -0.30244\nv 0.40625 -0.710938 -0.299913\nv 0.414062 -0.710938 -0.298793\nv 0.421875 -0.710938 -0.298385\nv 0.429688 -0.710938 -0.298146\nv 0.4375 -0.710938 -0.297951\nv 0.445312 -0.710938 -0.298754\nv 0.453125 -0.710938 -0.300039\nv 0.460938 -0.710938 -0.301174\nv 0.475385 -0.710938 -0.304688\nv 0.46875 -0.710938 -0.303141\nv 0.476562 -0.710267 -0.304688\nv 0.484375 -0.70804 -0.304688\nv -0.335465 -0.703125 -0.304688\nv -0.335938 -0.698112 -0.304688\nv -0.328125 -0.703125 -0.297516\nv -0.320312 -0.703125 -0.296926\nv -0.265625 -0.703125 -0.29735\nv -0.257812 -0.703125 -0.29936\nv -0.24977 -0.703125 -0.304688\nv -0.25 -0.703125 -0.304477\nv 0.392415 -0.703125 -0.304688\nv 0.390625 -0.695711 -0.304688\nv 0.398438 -0.703125 -0.301839\nv 0.40625 -0.703125 -0.299968\nv 0.414062 -0.703125 -0.298486\nv 0.421875 -0.703125 -0.297501\nv 0.429688 -0.703125 -0.297098\nv 0.4375 -0.703125 -0.297205\nv 0.445312 -0.703125 -0.297613\nv 0.453125 -0.703125 -0.298408\nv 0.460938 -0.703125 -0.29924\nv 0.46875 -0.703125 -0.300287\nv 0.476562 -0.703125 -0.301818\nv 0.489877 -0.703125 -0.304688\nv 0.484375 -0.703125 -0.303043\nv -0.336142 -0.695312 -0.304688\nv -0.335938 -0.691328 -0.304688\nv -0.335938 -0.695312 -0.304304\nv -0.257812 -0.695312 -0.297939\nv -0.245776 -0.695312 -0.304688\nv -0.25 -0.695312 -0.301323\nv 0.390549 -0.695312 -0.304688\nv 0.390625 -0.69411 -0.304688\nv 0.390625 -0.695312 -0.304645\nv 0.398438 -0.695312 -0.302128\nv 0.40625 -0.695312 -0.300739\nv 0.414062 -0.695312 -0.299319\nv 0.421875 -0.695312 -0.297685\nv 0.4375 -0.695312 -0.296976\nv 0.445312 -0.695312 -0.297349\nv 0.453125 -0.695312 -0.297301\nv 0.460938 -0.695312 -0.297851\nv 0.46875 -0.695312 -0.299002\nv 0.476562 -0.695312 -0.300556\nv 0.491086 -0.695312 -0.304688\nv 0.484375 -0.695312 -0.302193\nv -0.335722 -0.6875 -0.304688\nv -0.257812 -0.6875 -0.297328\nv -0.244442 -0.6875 -0.304688\nv -0.25 -0.6875 -0.300391\nv 0.391349 -0.6875 -0.304688\nv 0.398438 -0.6875 -0.302758\nv 0.40625 -0.6875 -0.301594\nv 0.414062 -0.6875 -0.299922\nv 0.421875 -0.6875 -0.298134\nv 0.429688 -0.6875 -0.297524\nv 0.4375 -0.6875 -0.29746\nv 0.445312 -0.6875 -0.297476\nv 0.453125 -0.6875 -0.297481\nv 0.460938 -0.6875 -0.297948\nv 0.46875 -0.6875 -0.298991\nv 0.476562 -0.6875 -0.300599\nv 0.491728 -0.6875 -0.304688\nv 0.484375 -0.6875 -0.302057\nv -0.335142 -0.679688 -0.304688\nv -0.2434 -0.679688 -0.304688\nv -0.25 -0.679688 -0.299683\nv 0.393903 -0.679688 -0.304688\nv 0.398438 -0.679688 -0.303454\nv 0.40625 -0.679688 -0.302191\nv 0.414062 -0.679688 -0.300414\nv 0.421875 -0.679688 -0.298772\nv 0.429688 -0.679688 -0.298203\nv 0.4375 -0.679688 -0.298134\nv 0.445312 -0.679688 -0.297751\nv 0.453125 -0.679688 -0.297603\nv 0.460938 -0.679688 -0.29815\nv 0.46875 -0.679688 -0.29902\nv 0.476562 -0.679688 -0.300598\nv 0.491829 -0.679688 -0.304688\nv 0.484375 -0.679688 -0.302035\nv -0.334318 -0.671875 -0.304688\nv -0.24231 -0.671875 -0.304688\nv -0.25 -0.671875 -0.299199\nv -0.242188 -0.664361 -0.304688\nv 0.396241 -0.671875 -0.304688\nv 0.398438 -0.671875 -0.304065\nv 0.40625 -0.671875 -0.302584\nv 0.414062 -0.671875 -0.301081\nv 0.421875 -0.671875 -0.299675\nv 0.429688 -0.671875 -0.298834\nv 0.4375 -0.671875 -0.298425\nv 0.445312 -0.671875 -0.298199\nv 0.453125 -0.671875 -0.297863\nv 0.460938 -0.671875 -0.298264\nv 0.46875 -0.671875 -0.299104\nv 0.476562 -0.671875 -0.300641\nv 0.492115 -0.671875 -0.304688\nv 0.484375 -0.671875 -0.301919\nv 0.492188 -0.67028 -0.304688\nv -0.333509 -0.664062 -0.304688\nv -0.25 -0.664062 -0.29882\nv -0.242183 -0.664062 -0.304688\nv -0.242188 -0.664062 -0.304684\nv 0.397498 -0.664062 -0.304688\nv 0.398438 -0.664062 -0.304378\nv 0.40625 -0.664062 -0.302901\nv 0.414062 -0.664062 -0.301816\nv 0.421875 -0.664062 -0.300448\nv 0.429688 -0.664062 -0.299352\nv 0.4375 -0.664062 -0.298736\nv 0.445312 -0.664062 -0.298386\nv 0.453125 -0.664062 -0.298303\nv 0.460938 -0.664062 -0.29837\nv 0.46875 -0.664062 -0.299113\nv 0.476562 -0.664062 -0.300748\nv 0.484375 -0.664062 -0.301955\nv 0.492385 -0.664062 -0.304688\nv 0.492188 -0.664062 -0.304573\nv -0.332426 -0.65625 -0.304688\nv -0.25 -0.65625 -0.298746\nv -0.241808 -0.65625 -0.304688\nv -0.242188 -0.65625 -0.304388\nv 0.398226 -0.65625 -0.304688\nv 0.398438 -0.655114 -0.304688\nv 0.398438 -0.65625 -0.304609\nv 0.40625 -0.65625 -0.303584\nv 0.414062 -0.65625 -0.30257\nv 0.421875 -0.65625 -0.30104\nv 0.429688 -0.65625 -0.299701\nv 0.4375 -0.65625 -0.299013\nv 0.445312 -0.65625 -0.29853\nv 0.453125 -0.65625 -0.298405\nv 0.460938 -0.65625 -0.298689\nv 0.46875 -0.65625 -0.299092\nv 0.476562 -0.65625 -0.300575\nv 0.484375 -0.65625 -0.302058\nv 0.492748 -0.65625 -0.304688\nv 0.492188 -0.65625 -0.304375\nv -0.33139 -0.648438 -0.304688\nv -0.328125 -0.648438 -0.297285\nv -0.25 -0.648438 -0.29874\nv -0.241447 -0.648438 -0.304688\nv -0.242188 -0.648438 -0.304089\nv 0.402398 -0.648438 -0.304688\nv 0.40625 -0.643733 -0.304688\nv 0.40625 -0.648438 -0.304207\nv 0.414062 -0.648438 -0.303116\nv 0.421875 -0.648438 -0.301309\nv 0.429688 -0.648438 -0.299867\nv 0.4375 -0.648438 -0.29919\nv 0.445312 -0.648438 -0.298623\nv 0.453125 -0.648438 -0.298553\nv 0.460938 -0.648438 -0.298766\nv 0.46875 -0.648438 -0.299324\nv 0.476562 -0.648438 -0.300494\nv 0.484375 -0.648438 -0.301947\nv 0.493045 -0.648438 -0.304688\nv 0.492188 -0.648438 -0.304193\nv -0.330316 -0.640625 -0.304688\nv -0.328125 -0.640625 -0.299249\nv -0.25 -0.640625 -0.298803\nv -0.24107 -0.640625 -0.304688\nv -0.242188 -0.632979 -0.304688\nv -0.242188 -0.640625 -0.303782\nv 0.407994 -0.640625 -0.304688\nv 0.414062 -0.640625 -0.303595\nv 0.421875 -0.640625 -0.301801\nv 0.429688 -0.640625 -0.300366\nv 0.4375 -0.640625 -0.299726\nv 0.445312 -0.640625 -0.299188\nv 0.453125 -0.640625 -0.299118\nv 0.460938 -0.640625 -0.299486\nv 0.46875 -0.640625 -0.29999\nv 0.476562 -0.640625 -0.300872\nv 0.484375 -0.640625 -0.302171\nv 0.492609 -0.640625 -0.304688\nv 0.492188 -0.634848 -0.304688\nv 0.492188 -0.640625 -0.304427\nv -0.329361 -0.632812 -0.304688\nv -0.328125 -0.632812 -0.301609\nv -0.257812 -0.632812 -0.297734\nv -0.242215 -0.632812 -0.304688\nv -0.25 -0.632812 -0.299774\nv 0.412409 -0.632812 -0.304688\nv 0.414062 -0.629559 -0.304688\nv 0.414062 -0.632812 -0.304404\nv 0.421875 -0.632812 -0.302656\nv 0.429688 -0.632812 -0.301288\nv 0.4375 -0.632812 -0.300595\nv 0.445312 -0.632812 -0.300037\nv 0.453125 -0.632812 -0.299852\nv 0.460938 -0.632812 -0.300113\nv 0.46875 -0.632812 -0.300743\nv 0.476562 -0.632812 -0.301502\nv 0.49193 -0.632812 -0.304688\nv 0.484375 -0.632812 -0.302429\nv -0.328573 -0.625 -0.304688\nv -0.328125 -0.625 -0.303602\nv -0.265625 -0.625 -0.297269\nv -0.257812 -0.625 -0.29897\nv -0.24418 -0.625 -0.304688\nv -0.25 -0.625 -0.301107\nv 0.416127 -0.625 -0.304688\nv 0.421875 -0.625 -0.303525\nv 0.429688 -0.625 -0.30218\nv 0.4375 -0.625 -0.30144\nv 0.445312 -0.625 -0.300899\nv 0.453125 -0.625 -0.300616\nv 0.460938 -0.625 -0.300746\nv 0.46875 -0.625 -0.301402\nv 0.476562 -0.625 -0.30235\nv 0.490841 -0.625 -0.304688\nv 0.484375 -0.625 -0.303282\nv -0.328551 -0.617188 -0.304688\nv -0.328125 -0.617188 -0.303697\nv -0.265625 -0.617188 -0.298367\nv -0.257812 -0.617188 -0.300124\nv -0.246091 -0.617188 -0.304688\nv -0.25 -0.617188 -0.302315\nv 0.419352 -0.617188 -0.304688\nv 0.421875 -0.611368 -0.304688\nv 0.421875 -0.617188 -0.304218\nv 0.429688 -0.617188 -0.302987\nv 0.4375 -0.617188 -0.302258\nv 0.445312 -0.617188 -0.3018\nv 0.453125 -0.617188 -0.301499\nv 0.460938 -0.617188 -0.301542\nv 0.46875 -0.617188 -0.302168\nv 0.476562 -0.617188 -0.302896\nv 0.488589 -0.617188 -0.304688\nv 0.484375 -0.617188 -0.303911\nv -0.328776 -0.609375 -0.304688\nv -0.328125 -0.609375 -0.303284\nv -0.273438 -0.609375 -0.29746\nv -0.265625 -0.609375 -0.299245\nv -0.257812 -0.609375 -0.301243\nv -0.24786 -0.609375 -0.304688\nv -0.25 -0.609375 -0.303425\nv 0.423047 -0.609375 -0.304688\nv 0.429688 -0.609375 -0.303765\nv 0.4375 -0.609375 -0.303082\nv 0.445312 -0.609375 -0.302653\nv 0.453125 -0.609375 -0.302352\nv 0.460938 -0.609375 -0.302373\nv 0.46875 -0.609375 -0.302901\nv 0.476562 -0.609375 -0.303511\nv 0.485353 -0.609375 -0.304688\nv 0.484375 -0.605888 -0.304688\nv 0.484375 -0.609375 -0.304376\nv -0.328537 -0.601562 -0.304688\nv -0.328125 -0.601562 -0.303849\nv -0.28125 -0.601562 -0.296991\nv -0.273438 -0.601562 -0.297963\nv -0.265625 -0.601562 -0.299739\nv -0.257812 -0.601562 -0.301919\nv -0.249281 -0.601562 -0.304688\nv -0.25 -0.601562 -0.304294\nv 0.428468 -0.601562 -0.304688\nv 0.429688 -0.601562 -0.304533\nv 0.4375 -0.601562 -0.303855\nv 0.445312 -0.601562 -0.303366\nv 0.453125 -0.601562 -0.303106\nv 0.460938 -0.601562 -0.303055\nv 0.46875 -0.601562 -0.303326\nv 0.482058 -0.601562 -0.304688\nv 0.476562 -0.601562 -0.303827\nv -0.328129 -0.59375 -0.304688\nv -0.328125 -0.593683 -0.304688\nv -0.328125 -0.59375 -0.30468\nv -0.28125 -0.59375 -0.29714\nv -0.273438 -0.59375 -0.298137\nv -0.265625 -0.59375 -0.299848\nv -0.257812 -0.59375 -0.301934\nv -0.249455 -0.59375 -0.304688\nv -0.25 -0.59375 -0.304402\nv 0.428723 -0.59375 -0.304688\nv 0.429688 -0.59375 -0.304545\nv 0.4375 -0.59375 -0.303908\nv 0.445312 -0.59375 -0.30346\nv 0.453125 -0.59375 -0.303241\nv 0.460938 -0.59375 -0.303135\nv 0.46875 -0.59375 -0.303281\nv 0.4822 -0.59375 -0.304688\nv 0.476562 -0.59375 -0.30336\nv -0.327457 -0.585938 -0.304688\nv -0.28125 -0.585938 -0.297323\nv -0.273438 -0.585938 -0.298328\nv -0.265625 -0.585938 -0.300075\nv -0.257812 -0.585938 -0.302078\nv -0.249435 -0.585938 -0.304688\nv -0.25 -0.585938 -0.304392\nv 0.427877 -0.585938 -0.304688\nv 0.429688 -0.585938 -0.304421\nv 0.4375 -0.585938 -0.303829\nv 0.445312 -0.585938 -0.303461\nv 0.453125 -0.585938 -0.30324\nv 0.460938 -0.585938 -0.303136\nv 0.46875 -0.585938 -0.303125\nv 0.483391 -0.585938 -0.304688\nv 0.476562 -0.585938 -0.302878\nv 0.484375 -0.578517 -0.304688\nv -0.326621 -0.578125 -0.304688\nv -0.320312 -0.578125 -0.297649\nv -0.28125 -0.578125 -0.297566\nv -0.273438 -0.578125 -0.2986\nv -0.265625 -0.578125 -0.300344\nv -0.257812 -0.578125 -0.302323\nv -0.249829 -0.578125 -0.304688\nv -0.25 -0.578125 -0.304603\nv 0.426303 -0.578125 -0.304688\nv 0.429688 -0.578125 -0.304208\nv 0.4375 -0.578125 -0.303647\nv 0.445312 -0.578125 -0.303366\nv 0.453125 -0.578125 -0.30329\nv 0.460938 -0.578125 -0.303217\nv 0.46875 -0.578125 -0.302889\nv 0.476562 -0.578125 -0.302417\nv 0.48441 -0.578125 -0.304688\nv 0.484375 -0.578125 -0.304669\nv -0.32533 -0.570312 -0.304688\nv -0.320312 -0.570312 -0.299158\nv -0.289062 -0.570312 -0.297281\nv -0.28125 -0.570312 -0.297972\nv -0.273438 -0.570312 -0.29893\nv -0.265625 -0.570312 -0.300541\nv -0.257812 -0.570312 -0.302382\nv -0.249932 -0.570312 -0.304688\nv -0.25 -0.570312 -0.304652\nv 0.42368 -0.570312 -0.304688\nv 0.421875 -0.565359 -0.304688\nv 0.429688 -0.570312 -0.303839\nv 0.4375 -0.570312 -0.303354\nv 0.445312 -0.570312 -0.303327\nv 0.453125 -0.570312 -0.303261\nv 0.460938 -0.570312 -0.303023\nv 0.46875 -0.570312 -0.302476\nv 0.476562 -0.570312 -0.302022\nv 0.485015 -0.570312 -0.304688\nv 0.484375 -0.570312 -0.304319\nv -0.324064 -0.5625 -0.304688\nv -0.320312 -0.5625 -0.300608\nv -0.3125 -0.5625 -0.297884\nv -0.289062 -0.5625 -0.297801\nv -0.28125 -0.5625 -0.298238\nv -0.273438 -0.5625 -0.299101\nv -0.265625 -0.5625 -0.300394\nv -0.257812 -0.5625 -0.301918\nv -0.248862 -0.5625 -0.304688\nv -0.25 -0.5625 -0.304028\nv -0.242188 -0.555559 -0.304688\nv 0.40625 -0.555717 -0.304688\nv 0.42022 -0.5625 -0.304688\nv 0.414062 -0.559303 -0.304688\nv 0.421875 -0.5625 -0.304519\nv 0.429688 -0.5625 -0.303462\nv 0.4375 -0.5625 -0.303265\nv 0.445312 -0.5625 -0.303334\nv 0.453125 -0.5625 -0.303148\nv 0.460938 -0.5625 -0.302931\nv 0.46875 -0.5625 -0.302347\nv 0.476562 -0.5625 -0.302007\nv 0.485163 -0.5625 -0.304688\nv 0.484375 -0.5625 -0.30421\nv -0.323095 -0.554688 -0.304688\nv -0.320312 -0.554688 -0.302118\nv -0.3125 -0.554688 -0.29999\nv -0.304688 -0.554688 -0.298099\nv -0.296875 -0.554688 -0.297218\nv -0.289062 -0.554688 -0.298113\nv -0.28125 -0.554688 -0.298049\nv -0.273438 -0.554688 -0.298302\nv -0.265625 -0.554688 -0.29892\nv -0.257812 -0.554688 -0.299291\nv -0.25 -0.554688 -0.300198\nv -0.241211 -0.554688 -0.304688\nv -0.242188 -0.554688 -0.303989\nv -0.234375 -0.549464 -0.304688\nv -0.0703125 -0.547775 -0.304688\nv -0.0625 -0.548433 -0.304688\nv -0.0546875 -0.549072 -0.304688\nv -0.046875 -0.549772 -0.304688\nv -0.0390625 -0.55038 -0.304688\nv -0.03125 -0.550904 -0.304688\nv -0.0234375 -0.551376 -0.304688\nv -0.015625 -0.551706 -0.304688\nv -0.0078125 -0.552126 -0.304688\nv 0 -0.551975 -0.304688\nv 0.0078125 -0.55155 -0.304688\nv 0.015625 -0.551427 -0.304688\nv 0.0234375 -0.551339 -0.304688\nv 0.03125 -0.551233 -0.304688\nv 0.0390625 -0.551081 -0.304688\nv 0.046875 -0.550763 -0.304688\nv 0.0546875 -0.550563 -0.304688\nv 0.0625 -0.55025 -0.304688\nv 0.0703125 -0.549785 -0.304688\nv 0.078125 -0.549305 -0.304688\nv 0.0859375 -0.548792 -0.304688\nv 0.09375 -0.548196 -0.304688\nv 0.101562 -0.547544 -0.304688\nv 0.405088 -0.554688 -0.304688\nv 0.398438 -0.550027 -0.304688\nv 0.40625 -0.554688 -0.30449\nv 0.414062 -0.554688 -0.303839\nv 0.421875 -0.554688 -0.30315\nv 0.429688 -0.554688 -0.302756\nv 0.4375 -0.554688 -0.302987\nv 0.445312 -0.554688 -0.303091\nv 0.453125 -0.554688 -0.3029\nv 0.460938 -0.554688 -0.302698\nv 0.46875 -0.554688 -0.302078\nv 0.476562 -0.554688 -0.301779\nv 0.485995 -0.554688 -0.304688\nv 0.484375 -0.554688 -0.303835\nv -0.321854 -0.546875 -0.304688\nv -0.320312 -0.546875 -0.303473\nv -0.3125 -0.546875 -0.301765\nv -0.304688 -0.546875 -0.30008\nv -0.296875 -0.546875 -0.298091\nv -0.242188 -0.546875 -0.297871\nv -0.229666 -0.546875 -0.304688\nv -0.234375 -0.546875 -0.302444\nv -0.226562 -0.543772 -0.304688\nv -0.21875 -0.539842 -0.304688\nv -0.101562 -0.540011 -0.304688\nv -0.09375 -0.541939 -0.304688\nv -0.0859375 -0.543658 -0.304688\nv -0.0751618 -0.546875 -0.304688\nv -0.078125 -0.54596 -0.304688\nv -0.0703125 -0.546875 -0.303206\nv -0.0625 -0.546875 -0.30193\nv -0.0546875 -0.546875 -0.300546\nv -0.046875 -0.546875 -0.298774\nv 0.078125 -0.546875 -0.298816\nv 0.0859375 -0.546875 -0.30019\nv 0.09375 -0.546875 -0.301484\nv 0.109026 -0.546875 -0.304688\nv 0.101562 -0.546875 -0.303057\nv 0.109375 -0.546837 -0.304688\nv 0.117188 -0.546175 -0.304688\nv 0.125 -0.545753 -0.304688\nv 0.132812 -0.545388 -0.304688\nv 0.140625 -0.545023 -0.304688\nv 0.148438 -0.54459 -0.304688\nv 0.15625 -0.544377 -0.304688\nv 0.164062 -0.544603 -0.304688\nv 0.171875 -0.545069 -0.304688\nv 0.179688 -0.545786 -0.304688\nv 0.1875 -0.545909 -0.304688\nv 0.195312 -0.546149 -0.304688\nv 0.203125 -0.546681 -0.304688\nv 0.210938 -0.545477 -0.304688\nv 0.21875 -0.543146 -0.304688\nv 0.226562 -0.540833 -0.304688\nv 0.382812 -0.541793 -0.304688\nv 0.392845 -0.546875 -0.304688\nv 0.390625 -0.545497 -0.304688\nv 0.398438 -0.546875 -0.303575\nv 0.40625 -0.546875 -0.30342\nv 0.414062 -0.546875 -0.302822\nv 0.421875 -0.546875 -0.302068\nv 0.429688 -0.546875 -0.301579\nv 0.4375 -0.546875 -0.301555\nv 0.445312 -0.546875 -0.301803\nv 0.453125 -0.546875 -0.301897\nv 0.460938 -0.546875 -0.301999\nv 0.46875 -0.546875 -0.301578\nv 0.476562 -0.546875 -0.301449\nv 0.487126 -0.546875 -0.304688\nv 0.484375 -0.546875 -0.303466\nv -0.320805 -0.539062 -0.304688\nv -0.320312 -0.533184 -0.304688\nv -0.320312 -0.539062 -0.304305\nv -0.3125 -0.539062 -0.302751\nv -0.304688 -0.539062 -0.301151\nv -0.296875 -0.539062 -0.298031\nv -0.234375 -0.539062 -0.299096\nv -0.226562 -0.539062 -0.302567\nv -0.21656 -0.539062 -0.304688\nv -0.21875 -0.539062 -0.304262\nv -0.210938 -0.534955 -0.304688\nv -0.140625 -0.531555 -0.304688\nv -0.117188 -0.532247 -0.304688\nv -0.104508 -0.539062 -0.304688\nv -0.109375 -0.536325 -0.304688\nv -0.101562 -0.539062 -0.304101\nv -0.09375 -0.539062 -0.302711\nv -0.0859375 -0.539062 -0.301235\nv -0.078125 -0.539062 -0.299406\nv -0.0703125 -0.539062 -0.297429\nv 0.15625 -0.539062 -0.297446\nv 0.164062 -0.539062 -0.298975\nv 0.171875 -0.539062 -0.298797\nv 0.179688 -0.539062 -0.2994\nv 0.1875 -0.539062 -0.299643\nv 0.195312 -0.539062 -0.300085\nv 0.203125 -0.539062 -0.300616\nv 0.210938 -0.539062 -0.301695\nv 0.21875 -0.539062 -0.302599\nv 0.232525 -0.539062 -0.304688\nv 0.226562 -0.539062 -0.303798\nv 0.234375 -0.538174 -0.304688\nv 0.242188 -0.535794 -0.304688\nv 0.25 -0.533686 -0.304688\nv 0.257812 -0.531525 -0.304688\nv 0.367188 -0.533612 -0.304688\nv 0.375369 -0.539062 -0.304688\nv 0.375 -0.538868 -0.304688\nv 0.382812 -0.539062 -0.303349\nv 0.390625 -0.539062 -0.302072\nv 0.398438 -0.539062 -0.30131\nv 0.40625 -0.539062 -0.301992\nv 0.414062 -0.539062 -0.301742\nv 0.421875 -0.539062 -0.300935\nv 0.429688 -0.539062 -0.300202\nv 0.4375 -0.539062 -0.30006\nv 0.445312 -0.539062 -0.30028\nv 0.453125 -0.539062 -0.300413\nv 0.460938 -0.539062 -0.300661\nv 0.46875 -0.539062 -0.300664\nv 0.476562 -0.539062 -0.300963\nv 0.487799 -0.539062 -0.304688\nv 0.484375 -0.539062 -0.303236\nv -0.319604 -0.53125 -0.304688\nv -0.3125 -0.53125 -0.30326\nv -0.304688 -0.53125 -0.30115\nv -0.234375 -0.53125 -0.297012\nv -0.226562 -0.53125 -0.299932\nv -0.21875 -0.53125 -0.302364\nv -0.205697 -0.53125 -0.304688\nv -0.210938 -0.53125 -0.303728\nv -0.203125 -0.528922 -0.304688\nv -0.195312 -0.526687 -0.304688\nv -0.15625 -0.52432 -0.304688\nv -0.14271 -0.53125 -0.304688\nv -0.148438 -0.529804 -0.304688\nv -0.139654 -0.53125 -0.304688\nv -0.140625 -0.53125 -0.304625\nv -0.132812 -0.528576 -0.304688\nv -0.119308 -0.53125 -0.304688\nv -0.125 -0.526779 -0.304688\nv -0.117188 -0.53125 -0.304381\nv -0.109375 -0.53125 -0.303208\nv -0.101562 -0.53125 -0.301966\nv -0.09375 -0.53125 -0.300841\nv -0.0859375 -0.53125 -0.299563\nv -0.078125 -0.53125 -0.297835\nv 0.171875 -0.53125 -0.29814\nv 0.179688 -0.53125 -0.298512\nv 0.1875 -0.53125 -0.298805\nv 0.195312 -0.53125 -0.299135\nv 0.203125 -0.53125 -0.299665\nv 0.210938 -0.53125 -0.299913\nv 0.21875 -0.53125 -0.300268\nv 0.226562 -0.53125 -0.301655\nv 0.234375 -0.53125 -0.30253\nv 0.242188 -0.53125 -0.303291\nv 0.25 -0.53125 -0.303924\nv 0.258735 -0.53125 -0.304688\nv 0.257812 -0.53125 -0.304603\nv 0.265625 -0.525877 -0.304688\nv 0.361959 -0.53125 -0.304688\nv 0.359375 -0.528893 -0.304688\nv 0.367188 -0.53125 -0.30379\nv 0.375 -0.53125 -0.301957\nv 0.382812 -0.53125 -0.300655\nv 0.390625 -0.53125 -0.299775\nv 0.398438 -0.53125 -0.299624\nv 0.40625 -0.53125 -0.301116\nv 0.414062 -0.53125 -0.301125\nv 0.421875 -0.53125 -0.300148\nv 0.429688 -0.53125 -0.299501\nv 0.4375 -0.53125 -0.299326\nv 0.445312 -0.53125 -0.299486\nv 0.453125 -0.53125 -0.299607\nv 0.460938 -0.53125 -0.299945\nv 0.46875 -0.53125 -0.299895\nv 0.476562 -0.53125 -0.300234\nv 0.488187 -0.53125 -0.304688\nv 0.484375 -0.53125 -0.302947\nv -0.31927 -0.523438 -0.304688\nv -0.3125 -0.523438 -0.303057\nv -0.304688 -0.523438 -0.300272\nv -0.226562 -0.523438 -0.298699\nv -0.21875 -0.523438 -0.301183\nv -0.210938 -0.523438 -0.302411\nv -0.203125 -0.523438 -0.303687\nv -0.18842 -0.523438 -0.304688\nv -0.195312 -0.523438 -0.303934\nv -0.15708 -0.523438 -0.304688\nv -0.15625 -0.523438 -0.304576\nv -0.148438 -0.523438 -0.303895\nv -0.140625 -0.523438 -0.303698\nv -0.132812 -0.523438 -0.303908\nv -0.125 -0.523438 -0.304077\nv -0.117188 -0.523438 -0.303326\nv -0.109375 -0.523438 -0.302516\nv -0.101562 -0.523438 -0.301395\nv -0.09375 -0.523438 -0.300369\nv -0.0859375 -0.523438 -0.299223\nv -0.078125 -0.523438 -0.297903\nv 0.179688 -0.523438 -0.297728\nv 0.1875 -0.523438 -0.298429\nv 0.195312 -0.523438 -0.298827\nv 0.203125 -0.523438 -0.299453\nv 0.210938 -0.523438 -0.300048\nv 0.21875 -0.523438 -0.300734\nv 0.226562 -0.523438 -0.30159\nv 0.234375 -0.523438 -0.302316\nv 0.242188 -0.523438 -0.302791\nv 0.25 -0.523438 -0.303225\nv 0.257812 -0.523438 -0.30377\nv 0.268726 -0.523438 -0.304688\nv 0.265625 -0.523438 -0.304422\nv 0.353429 -0.523438 -0.304688\nv 0.359375 -0.523438 -0.303881\nv 0.367188 -0.523438 -0.302486\nv 0.375 -0.523438 -0.300769\nv 0.382812 -0.523438 -0.298797\nv 0.390625 -0.523438 -0.298047\nv 0.398438 -0.523438 -0.298365\nv 0.40625 -0.523438 -0.299954\nv 0.414062 -0.523438 -0.300098\nv 0.421875 -0.523438 -0.299188\nv 0.429688 -0.523438 -0.298714\nv 0.4375 -0.523438 -0.298419\nv 0.445312 -0.523438 -0.29853\nv 0.453125 -0.523438 -0.298603\nv 0.460938 -0.523438 -0.299051\nv 0.46875 -0.523438 -0.299194\nv 0.476562 -0.523438 -0.299303\nv 0.488865 -0.523438 -0.304688\nv 0.484375 -0.523438 -0.302086\nv -0.319831 -0.515625 -0.304688\nv -0.320312 -0.512583 -0.304688\nv -0.3125 -0.515625 -0.301766\nv -0.304688 -0.515625 -0.29787\nv -0.234375 -0.515625 -0.297235\nv -0.226562 -0.515625 -0.29923\nv -0.21875 -0.515625 -0.300859\nv -0.210938 -0.515625 -0.302161\nv -0.203125 -0.515625 -0.303016\nv -0.18896 -0.515625 -0.304688\nv -0.195312 -0.511508 -0.304688\nv -0.195312 -0.515625 -0.303935\nv -0.156956 -0.515625 -0.304688\nv -0.15625 -0.514968 -0.304688\nv -0.15625 -0.515625 -0.304598\nv -0.148438 -0.509947 -0.304688\nv -0.148438 -0.515625 -0.304047\nv -0.140625 -0.507863 -0.304688\nv -0.140625 -0.515625 -0.303807\nv -0.132812 -0.510535 -0.304688\nv -0.132812 -0.515625 -0.303878\nv -0.125 -0.51372 -0.304688\nv -0.125 -0.515625 -0.304266\nv -0.117188 -0.510905 -0.304688\nv -0.117188 -0.515625 -0.303859\nv -0.109375 -0.515625 -0.303217\nv -0.101562 -0.515625 -0.302624\nv -0.09375 -0.515625 -0.301428\nv -0.0859375 -0.515625 -0.299911\nv -0.078125 -0.515625 -0.298277\nv 0.1875 -0.515625 -0.297713\nv 0.195312 -0.515625 -0.298912\nv 0.203125 -0.515625 -0.299779\nv 0.210938 -0.515625 -0.300716\nv 0.21875 -0.515625 -0.301936\nv 0.226562 -0.515625 -0.302576\nv 0.234375 -0.515625 -0.302577\nv 0.242188 -0.515625 -0.302811\nv 0.25 -0.508906 -0.304688\nv 0.25 -0.515625 -0.303188\nv 0.257812 -0.510799 -0.304688\nv 0.257812 -0.515625 -0.303594\nv 0.27229 -0.515625 -0.304688\nv 0.265625 -0.511489 -0.304688\nv 0.265625 -0.515625 -0.304106\nv 0.35431 -0.515625 -0.304688\nv 0.359375 -0.513491 -0.304688\nv 0.359375 -0.515625 -0.30417\nv 0.367188 -0.508084 -0.304688\nv 0.367188 -0.515625 -0.302976\nv 0.375 -0.515625 -0.300959\nv 0.382812 -0.515625 -0.299042\nv 0.390625 -0.515625 -0.29732\nv 0.398438 -0.515625 -0.296955\nv 0.40625 -0.515625 -0.298954\nv 0.414062 -0.515625 -0.299138\nv 0.421875 -0.515625 -0.298278\nv 0.429688 -0.515625 -0.297797\nv 0.4375 -0.515625 -0.297447\nv 0.445312 -0.515625 -0.297417\nv 0.453125 -0.515625 -0.297508\nv 0.460938 -0.515625 -0.297965\nv 0.46875 -0.515625 -0.298248\nv 0.476562 -0.515625 -0.298604\nv 0.490159 -0.515625 -0.304688\nv 0.484375 -0.515625 -0.300933\nv -0.320521 -0.507812 -0.304688\nv -0.320312 -0.507812 -0.304428\nv -0.3125 -0.507812 -0.299614\nv -0.234375 -0.50076 -0.304688\nv -0.234375 -0.507812 -0.299172\nv -0.226562 -0.503175 -0.304688\nv -0.226562 -0.507812 -0.301174\nv -0.21875 -0.504257 -0.304688\nv -0.21875 -0.507812 -0.302475\nv -0.210938 -0.505342 -0.304688\nv -0.210938 -0.507812 -0.303171\nv -0.199375 -0.507812 -0.304688\nv -0.203125 -0.50703 -0.304688\nv -0.203125 -0.507812 -0.304174\nv -0.113031 -0.507812 -0.304688\nv -0.109375 -0.50694 -0.304688\nv -0.109375 -0.507812 -0.30418\nv -0.101562 -0.505769 -0.304688\nv -0.101562 -0.507812 -0.303496\nv -0.09375 -0.504348 -0.304688\nv -0.09375 -0.507812 -0.302589\nv -0.0859375 -0.50204 -0.304688\nv -0.0859375 -0.507812 -0.301242\nv -0.078125 -0.507812 -0.299538\nv -0.0703125 -0.507812 -0.29785\nv 0.195312 -0.507812 -0.298349\nv 0.203125 -0.507812 -0.299518\nv 0.210938 -0.501262 -0.304688\nv 0.210938 -0.507812 -0.300621\nv 0.21875 -0.503764 -0.304688\nv 0.21875 -0.507812 -0.302104\nv 0.226562 -0.50622 -0.304688\nv 0.226562 -0.507812 -0.303663\nv 0.234375 -0.507465 -0.304688\nv 0.234375 -0.507812 -0.304448\nv 0.244172 -0.507812 -0.304688\nv 0.242188 -0.507684 -0.304688\nv 0.242188 -0.507812 -0.304591\nv 0.367381 -0.507812 -0.304688\nv 0.375 -0.504232 -0.304688\nv 0.375 -0.507812 -0.302562\nv 0.382812 -0.500361 -0.304688\nv 0.382812 -0.507812 -0.300453\nv 0.390625 -0.507812 -0.298699\nv 0.398438 -0.507812 -0.297817\nv 0.40625 -0.507812 -0.299191\nv 0.414062 -0.507812 -0.299607\nv 0.421875 -0.507812 -0.298701\nv 0.429688 -0.507812 -0.297924\nv 0.4375 -0.507812 -0.297561\nv 0.445312 -0.507812 -0.297409\nv 0.453125 -0.507812 -0.29733\nv 0.460938 -0.507812 -0.297841\nv 0.46875 -0.507812 -0.298257\nv 0.476562 -0.507812 -0.29876\nv 0.490934 -0.507812 -0.304688\nv 0.484375 -0.507812 -0.300884\nv -0.321014 -0.5 -0.304688\nv -0.320312 -0.5 -0.303978\nv -0.3125 -0.5 -0.300259\nv -0.304688 -0.5 -0.297719\nv -0.296875 -0.5 -0.297331\nv -0.289062 -0.5 -0.29714\nv -0.265625 -0.5 -0.29734\nv -0.257812 -0.5 -0.29803\nv -0.25 -0.5 -0.299076\nv -0.236013 -0.5 -0.304688\nv -0.242188 -0.495844 -0.304688\nv -0.242188 -0.5 -0.302046\nv -0.0785977 -0.5 -0.304688\nv -0.078125 -0.499841 -0.304688\nv -0.078125 -0.5 -0.304603\nv -0.0703125 -0.496758 -0.304688\nv -0.0703125 -0.5 -0.302928\nv -0.0625 -0.494318 -0.304688\nv -0.0625 -0.5 -0.301288\nv -0.0546875 -0.5 -0.299189\nv -0.046875 -0.5 -0.297003\nv 0.171875 -0.5 -0.297957\nv 0.179688 -0.5 -0.299826\nv 0.1875 -0.493259 -0.304688\nv 0.1875 -0.5 -0.301098\nv 0.195312 -0.4949 -0.304688\nv 0.195312 -0.5 -0.302351\nv 0.207391 -0.5 -0.304688\nv 0.203125 -0.497949 -0.304688\nv 0.203125 -0.5 -0.303785\nv 0.383535 -0.5 -0.304688\nv 0.390625 -0.496661 -0.304688\nv 0.390625 -0.5 -0.30274\nv 0.398438 -0.493467 -0.304688\nv 0.398438 -0.5 -0.301875\nv 0.40625 -0.5 -0.301918\nv 0.414062 -0.5 -0.301579\nv 0.421875 -0.5 -0.300358\nv 0.429688 -0.5 -0.299214\nv 0.4375 -0.5 -0.298832\nv 0.445312 -0.5 -0.29866\nv 0.453125 -0.5 -0.298626\nv 0.460938 -0.5 -0.299044\nv 0.46875 -0.5 -0.29947\nv 0.476562 -0.5 -0.299885\nv 0.490271 -0.5 -0.304688\nv 0.484375 -0.5 -0.301782\nv -0.32144 -0.492188 -0.304688\nv -0.320312 -0.492188 -0.303539\nv -0.3125 -0.492188 -0.299543\nv -0.304688 -0.492188 -0.299027\nv -0.296875 -0.492188 -0.299481\nv -0.289062 -0.492188 -0.29963\nv -0.28125 -0.492188 -0.298729\nv -0.273438 -0.492188 -0.299263\nv -0.265625 -0.492188 -0.300294\nv -0.257812 -0.492188 -0.30117\nv -0.246739 -0.492188 -0.304688\nv -0.25 -0.48863 -0.304688\nv -0.25 -0.492188 -0.303079\nv -0.0555072 -0.492188 -0.304688\nv -0.0546875 -0.491976 -0.304688\nv -0.0546875 -0.492188 -0.304522\nv -0.046875 -0.490374 -0.304688\nv -0.046875 -0.492188 -0.302994\nv -0.0390625 -0.488927 -0.304688\nv -0.0390625 -0.492188 -0.301435\nv -0.03125 -0.487823 -0.304688\nv -0.03125 -0.492188 -0.300647\nv -0.0234375 -0.48676 -0.304688\nv -0.0234375 -0.492188 -0.2999\nv -0.015625 -0.48607 -0.304688\nv -0.015625 -0.492188 -0.297824\nv -0.0078125 -0.484506 -0.304688\nv 0.164062 -0.492188 -0.298881\nv 0.171875 -0.486013 -0.304688\nv 0.171875 -0.492188 -0.301746\nv 0.184686 -0.492188 -0.304688\nv 0.179688 -0.490276 -0.304688\nv 0.179688 -0.492188 -0.303659\nv 0.400718 -0.492188 -0.304688\nv 0.40625 -0.484851 -0.304688\nv 0.40625 -0.492188 -0.303613\nv 0.414062 -0.492188 -0.303019\nv 0.421875 -0.492188 -0.301814\nv 0.429688 -0.492188 -0.300631\nv 0.4375 -0.492188 -0.3002\nv 0.445312 -0.492188 -0.300037\nv 0.453125 -0.492188 -0.300143\nv 0.460938 -0.492188 -0.300335\nv 0.46875 -0.492188 -0.300688\nv 0.476562 -0.492188 -0.300958\nv 0.490838 -0.492188 -0.304688\nv 0.484375 -0.492188 -0.302256\nv -0.321699 -0.484375 -0.304688\nv -0.320312 -0.484375 -0.303216\nv -0.3125 -0.484375 -0.297857\nv -0.304688 -0.484375 -0.29875\nv -0.296875 -0.484375 -0.30033\nv -0.289062 -0.484375 -0.30112\nv -0.28125 -0.484375 -0.300354\nv -0.273438 -0.484375 -0.300741\nv -0.265625 -0.484375 -0.30173\nv -0.253712 -0.484375 -0.304688\nv -0.257812 -0.484375 -0.303128\nv -0.00695354 -0.484375 -0.304688\nv 0 -0.483546 -0.304688\nv 0 -0.484375 -0.30348\nv 0.0078125 -0.483295 -0.304688\nv 0.0078125 -0.484375 -0.303147\nv 0.015625 -0.483096 -0.304688\nv 0.015625 -0.484375 -0.302912\nv 0.0234375 -0.482859 -0.304688\nv 0.0234375 -0.484375 -0.30237\nv 0.03125 -0.481869 -0.304688\nv 0.03125 -0.484375 -0.300289\nv 0.0390625 -0.479867 -0.304688\nv 0.046875 -0.477985 -0.304688\nv 0.15625 -0.484375 -0.298416\nv 0.170143 -0.484375 -0.304688\nv 0.164062 -0.479476 -0.304688\nv 0.164062 -0.484375 -0.302185\nv 0.407135 -0.484375 -0.304688\nv 0.414062 -0.480387 -0.304688\nv 0.414062 -0.484375 -0.304122\nv 0.421875 -0.484375 -0.303181\nv 0.429688 -0.484375 -0.302159\nv 0.4375 -0.484375 -0.301537\nv 0.445312 -0.484375 -0.301222\nv 0.453125 -0.484375 -0.301292\nv 0.460938 -0.484375 -0.30136\nv 0.46875 -0.484375 -0.301445\nv 0.476562 -0.484375 -0.301558\nv 0.49158 -0.484375 -0.304688\nv 0.484375 -0.484375 -0.302228\nv -0.321875 -0.476562 -0.304688\nv -0.320312 -0.476562 -0.303041\nv -0.304688 -0.476562 -0.298135\nv -0.296875 -0.476562 -0.300442\nv -0.289062 -0.476562 -0.301352\nv -0.28125 -0.476562 -0.300944\nv -0.273438 -0.476562 -0.301769\nv -0.265625 -0.476562 -0.302956\nv -0.256454 -0.476562 -0.304688\nv -0.257812 -0.471018 -0.304688\nv -0.257812 -0.476562 -0.304174\nv 0.0520465 -0.476562 -0.304688\nv 0.0546875 -0.475915 -0.304688\nv 0.0546875 -0.476562 -0.303391\nv 0.0625 -0.474106 -0.304688\nv 0.0625 -0.476562 -0.300365\nv 0.0703125 -0.472623 -0.304688\nv 0.0703125 -0.476562 -0.297919\nv 0.078125 -0.470938 -0.304688\nv 0.0859375 -0.469658 -0.304688\nv 0.132812 -0.476562 -0.297629\nv 0.140625 -0.471389 -0.304688\nv 0.140625 -0.476562 -0.300459\nv 0.148438 -0.47419 -0.304688\nv 0.148438 -0.476562 -0.302497\nv 0.156375 -0.476562 -0.304688\nv 0.15625 -0.476515 -0.304688\nv 0.15625 -0.476562 -0.304646\nv 0.419138 -0.476562 -0.304688\nv 0.421875 -0.473723 -0.304688\nv 0.421875 -0.476562 -0.304356\nv 0.429688 -0.476562 -0.303324\nv 0.4375 -0.476562 -0.302645\nv 0.445312 -0.476562 -0.301942\nv 0.453125 -0.476562 -0.301758\nv 0.460938 -0.476562 -0.301635\nv 0.46875 -0.476562 -0.301585\nv 0.476562 -0.476562 -0.301873\nv 0.490744 -0.476562 -0.304688\nv 0.484375 -0.476562 -0.302379\nv -0.322041 -0.46875 -0.304688\nv -0.320312 -0.46875 -0.302872\nv -0.304688 -0.46875 -0.297716\nv -0.296875 -0.46875 -0.300046\nv -0.289062 -0.46875 -0.300942\nv -0.28125 -0.46875 -0.300819\nv -0.273438 -0.46875 -0.301755\nv -0.258828 -0.46875 -0.304688\nv -0.265625 -0.46875 -0.303283\nv 0.0913098 -0.46875 -0.304688\nv 0.09375 -0.468429 -0.304688\nv 0.09375 -0.46875 -0.303938\nv 0.101562 -0.467652 -0.304688\nv 0.101562 -0.46875 -0.302224\nv 0.109375 -0.467295 -0.304688\nv 0.109375 -0.46875 -0.30166\nv 0.117188 -0.467241 -0.304688\nv 0.117188 -0.46875 -0.301741\nv 0.125 -0.467731 -0.304688\nv 0.125 -0.46875 -0.302831\nv 0.133022 -0.46875 -0.304688\nv 0.132812 -0.468705 -0.304688\nv 0.132812 -0.46875 -0.304618\nv 0.424852 -0.46875 -0.304688\nv 0.429688 -0.46875 -0.303821\nv 0.4375 -0.46875 -0.302977\nv 0.445312 -0.46875 -0.302264\nv 0.453125 -0.46875 -0.301892\nv 0.460938 -0.46875 -0.301655\nv 0.46875 -0.46875 -0.301689\nv 0.476562 -0.46875 -0.302073\nv 0.490075 -0.46875 -0.304688\nv 0.484375 -0.46875 -0.302475\nv -0.322207 -0.460938 -0.304688\nv -0.320312 -0.460938 -0.302777\nv -0.304688 -0.460938 -0.297395\nv -0.296875 -0.460938 -0.299705\nv -0.289062 -0.460938 -0.300299\nv -0.28125 -0.460938 -0.300408\nv -0.273438 -0.460938 -0.301624\nv -0.258774 -0.460938 -0.304688\nv -0.265625 -0.460938 -0.303038\nv -0.257812 -0.455603 -0.304688\nv 0.422985 -0.460938 -0.304688\nv 0.421875 -0.458832 -0.304688\nv 0.429688 -0.460938 -0.303698\nv 0.4375 -0.460938 -0.302945\nv 0.445312 -0.460938 -0.302344\nv 0.453125 -0.460938 -0.301973\nv 0.460938 -0.460938 -0.301732\nv 0.46875 -0.460938 -0.301862\nv 0.476562 -0.460938 -0.302206\nv 0.489381 -0.460938 -0.304688\nv 0.484375 -0.460938 -0.302626\nv -0.322382 -0.453125 -0.304688\nv -0.320312 -0.453125 -0.302698\nv -0.304688 -0.453125 -0.297156\nv -0.296875 -0.453125 -0.299422\nv -0.289062 -0.453125 -0.299809\nv -0.28125 -0.453125 -0.299992\nv -0.273438 -0.453125 -0.301258\nv -0.265625 -0.453125 -0.302752\nv -0.257554 -0.453125 -0.304688\nv -0.257812 -0.453125 -0.30459\nv 0.417756 -0.453125 -0.304688\nv 0.414062 -0.449105 -0.304688\nv 0.421875 -0.453125 -0.304239\nv 0.429688 -0.453125 -0.303261\nv 0.4375 -0.453125 -0.302644\nv 0.445312 -0.453125 -0.302194\nv 0.453125 -0.453125 -0.301902\nv 0.460938 -0.453125 -0.301785\nv 0.46875 -0.453125 -0.302048\nv 0.476562 -0.453125 -0.302326\nv 0.488196 -0.453125 -0.304688\nv 0.484375 -0.453125 -0.303177\nv -0.322594 -0.445312 -0.304688\nv -0.320312 -0.445312 -0.30261\nv -0.3125 -0.445312 -0.297279\nv -0.304688 -0.445312 -0.297286\nv -0.296875 -0.445312 -0.299043\nv -0.289062 -0.445312 -0.299352\nv -0.28125 -0.445312 -0.299652\nv -0.273438 -0.445312 -0.300932\nv -0.265625 -0.445312 -0.302382\nv -0.256766 -0.445312 -0.304688\nv -0.257812 -0.445312 -0.30431\nv 0.412253 -0.445312 -0.304688\nv 0.414062 -0.445312 -0.304359\nv 0.421875 -0.445312 -0.303601\nv 0.429688 -0.445312 -0.302742\nv 0.4375 -0.445312 -0.302241\nv 0.445312 -0.445312 -0.301811\nv 0.453125 -0.445312 -0.301743\nv 0.460938 -0.445312 -0.301761\nv 0.46875 -0.445312 -0.302192\nv 0.476562 -0.445312 -0.302442\nv 0.486628 -0.445312 -0.304688\nv 0.484375 -0.445312 -0.303893\nv -0.322906 -0.4375 -0.304688\nv -0.320312 -0.4375 -0.302513\nv -0.3125 -0.4375 -0.297889\nv -0.304688 -0.4375 -0.29806\nv -0.296875 -0.4375 -0.298773\nv -0.289062 -0.4375 -0.298959\nv -0.28125 -0.4375 -0.299332\nv -0.273438 -0.4375 -0.30065\nv -0.265625 -0.4375 -0.302046\nv -0.255402 -0.4375 -0.304688\nv -0.257812 -0.4375 -0.303936\nv 0.409687 -0.4375 -0.304688\nv 0.414062 -0.4375 -0.303859\nv 0.421875 -0.4375 -0.30297\nv 0.429688 -0.4375 -0.302172\nv 0.4375 -0.4375 -0.301719\nv 0.445312 -0.4375 -0.301382\nv 0.453125 -0.4375 -0.301458\nv 0.460938 -0.4375 -0.301475\nv 0.46875 -0.4375 -0.301867\nv 0.476562 -0.4375 -0.302533\nv 0.485441 -0.4375 -0.304688\nv 0.484375 -0.431269 -0.304688\nv 0.484375 -0.4375 -0.30436\nv -0.323009 -0.429688 -0.304688\nv -0.320312 -0.429688 -0.302676\nv -0.3125 -0.429688 -0.298765\nv -0.304688 -0.429688 -0.298894\nv -0.296875 -0.429688 -0.298642\nv -0.289062 -0.429688 -0.298656\nv -0.28125 -0.429688 -0.299039\nv -0.273438 -0.429688 -0.300456\nv -0.265625 -0.429688 -0.301802\nv -0.253644 -0.429688 -0.304688\nv -0.257812 -0.429688 -0.303563\nv 0.408111 -0.429688 -0.304688\nv 0.414062 -0.429688 -0.303469\nv 0.421875 -0.429688 -0.302459\nv 0.429688 -0.429688 -0.301638\nv 0.4375 -0.429688 -0.301257\nv 0.445312 -0.429688 -0.300852\nv 0.453125 -0.429688 -0.300833\nv 0.460938 -0.429688 -0.300911\nv 0.46875 -0.429688 -0.301405\nv 0.484077 -0.429688 -0.304688\nv 0.476562 -0.429688 -0.30269\nv -0.322387 -0.421875 -0.304688\nv -0.320312 -0.421875 -0.303157\nv -0.3125 -0.421875 -0.299402\nv -0.304688 -0.421875 -0.299405\nv -0.296875 -0.421875 -0.298433\nv -0.289062 -0.421875 -0.297902\nv -0.28125 -0.421875 -0.298558\nv -0.273438 -0.421875 -0.300266\nv -0.265625 -0.421875 -0.301796\nv -0.252915 -0.421875 -0.304688\nv -0.257812 -0.421875 -0.303466\nv 0.408239 -0.421875 -0.304688\nv 0.414062 -0.421875 -0.303458\nv 0.421875 -0.421875 -0.302418\nv 0.429688 -0.421875 -0.301447\nv 0.4375 -0.421875 -0.300836\nv 0.445312 -0.421875 -0.300389\nv 0.453125 -0.421875 -0.300314\nv 0.460938 -0.421875 -0.300363\nv 0.46875 -0.421875 -0.301073\nv 0.4834 -0.421875 -0.304688\nv 0.476562 -0.421875 -0.302759\nv -0.321428 -0.414062 -0.304688\nv -0.320312 -0.414062 -0.303786\nv -0.3125 -0.414062 -0.299852\nv -0.304688 -0.414062 -0.299587\nv -0.296875 -0.414062 -0.298971\nv -0.289062 -0.414062 -0.29768\nv -0.28125 -0.414062 -0.298398\nv -0.273438 -0.414062 -0.300118\nv -0.265625 -0.414062 -0.301641\nv -0.25127 -0.414062 -0.304688\nv -0.257812 -0.414062 -0.303213\nv -0.25 -0.408949 -0.304688\nv 0.407408 -0.414062 -0.304688\nv 0.40625 -0.407802 -0.304688\nv 0.414062 -0.414062 -0.30321\nv 0.421875 -0.414062 -0.302083\nv 0.429688 -0.414062 -0.301196\nv 0.4375 -0.414062 -0.300697\nv 0.445312 -0.414062 -0.30025\nv 0.453125 -0.414062 -0.300178\nv 0.460938 -0.414062 -0.300297\nv 0.46875 -0.414062 -0.300907\nv 0.483497 -0.414062 -0.304688\nv 0.476562 -0.414062 -0.302505\nv -0.320713 -0.40625 -0.304688\nv -0.320312 -0.400226 -0.304688\nv -0.320312 -0.40625 -0.304328\nv -0.3125 -0.40625 -0.300099\nv -0.304688 -0.40625 -0.299806\nv -0.296875 -0.40625 -0.299616\nv -0.289062 -0.40625 -0.298258\nv -0.28125 -0.40625 -0.29831\nv -0.273438 -0.40625 -0.299783\nv -0.265625 -0.40625 -0.301196\nv -0.257812 -0.40625 -0.302808\nv -0.249559 -0.40625 -0.304688\nv -0.25 -0.40625 -0.304535\nv 0.406103 -0.40625 -0.304688\nv 0.40625 -0.40625 -0.304622\nv 0.414062 -0.40625 -0.30286\nv 0.421875 -0.40625 -0.301639\nv 0.429688 -0.40625 -0.300855\nv 0.4375 -0.40625 -0.30045\nv 0.445312 -0.40625 -0.300104\nv 0.453125 -0.40625 -0.300077\nv 0.460938 -0.40625 -0.300414\nv 0.46875 -0.40625 -0.301334\nv 0.48289 -0.40625 -0.304688\nv 0.476562 -0.40625 -0.302866\nv -0.320156 -0.398438 -0.304688\nv -0.3125 -0.398438 -0.300251\nv -0.304688 -0.398438 -0.29956\nv -0.296875 -0.398438 -0.29934\nv -0.289062 -0.398438 -0.298007\nv -0.28125 -0.398438 -0.298111\nv -0.273438 -0.398438 -0.299045\nv -0.265625 -0.398438 -0.300192\nv -0.257812 -0.398438 -0.30191\nv -0.246773 -0.398438 -0.304688\nv -0.25 -0.398438 -0.303638\nv 0.404387 -0.398438 -0.304688\nv 0.40625 -0.398438 -0.303843\nv 0.414062 -0.398438 -0.302097\nv 0.421875 -0.398438 -0.300913\nv 0.429688 -0.398438 -0.300225\nv 0.4375 -0.398438 -0.299869\nv 0.445312 -0.398438 -0.299564\nv 0.453125 -0.398438 -0.299764\nv 0.460938 -0.398438 -0.300283\nv 0.46875 -0.398438 -0.301327\nv 0.483815 -0.398438 -0.304688\nv 0.476562 -0.398438 -0.302718\nv 0.484375 -0.395847 -0.304688\nv -0.319624 -0.390625 -0.304688\nv -0.3125 -0.390625 -0.300201\nv -0.304688 -0.390625 -0.299112\nv -0.296875 -0.390625 -0.298952\nv -0.289062 -0.390625 -0.297613\nv -0.28125 -0.390625 -0.297703\nv -0.273438 -0.390625 -0.298611\nv -0.265625 -0.390625 -0.299236\nv -0.257812 -0.390625 -0.300829\nv -0.242615 -0.390625 -0.304688\nv -0.25 -0.390625 -0.302479\nv -0.242188 -0.389844 -0.304688\nv 0.402133 -0.390625 -0.304688\nv 0.40625 -0.390625 -0.302776\nv 0.414062 -0.390625 -0.301191\nv 0.421875 -0.390625 -0.300041\nv 0.429688 -0.390625 -0.299413\nv 0.4375 -0.390625 -0.299054\nv 0.445312 -0.390625 -0.29894\nv 0.453125 -0.390625 -0.299289\nv 0.460938 -0.390625 -0.30013\nv 0.46875 -0.390625 -0.301109\nv 0.476562 -0.390625 -0.302396\nv 0.485543 -0.390625 -0.304688\nv 0.484375 -0.390625 -0.304357\nv -0.319068 -0.382812 -0.304688\nv -0.3125 -0.382812 -0.30025\nv -0.304688 -0.382812 -0.298828\nv -0.296875 -0.382812 -0.29862\nv -0.289062 -0.382812 -0.29741\nv -0.28125 -0.382812 -0.297303\nv -0.273438 -0.382812 -0.298091\nv -0.265625 -0.382812 -0.298705\nv -0.257812 -0.382812 -0.299962\nv -0.25 -0.382812 -0.301517\nv -0.238822 -0.382812 -0.304688\nv -0.242188 -0.382812 -0.303472\nv 0.399812 -0.382812 -0.304688\nv 0.398438 -0.378111 -0.304688\nv 0.40625 -0.382812 -0.301809\nv 0.414062 -0.382812 -0.300324\nv 0.421875 -0.382812 -0.299183\nv 0.429688 -0.382812 -0.298616\nv 0.4375 -0.382812 -0.298258\nv 0.445312 -0.382812 -0.298284\nv 0.453125 -0.382812 -0.299147\nv 0.460938 -0.382812 -0.29999\nv 0.46875 -0.382812 -0.3009\nv 0.476562 -0.382812 -0.30202\nv 0.487251 -0.382812 -0.304688\nv 0.484375 -0.382812 -0.303881\nv -0.317992 -0.375 -0.304688\nv -0.3125 -0.375 -0.300574\nv -0.304688 -0.375 -0.298902\nv -0.296875 -0.375 -0.29849\nv -0.289062 -0.375 -0.297418\nv -0.28125 -0.375 -0.296993\nv -0.273438 -0.375 -0.29769\nv -0.265625 -0.375 -0.298294\nv -0.257812 -0.375 -0.299491\nv -0.25 -0.375 -0.300932\nv -0.235794 -0.375 -0.304688\nv -0.242188 -0.375 -0.302787\nv -0.234375 -0.367221 -0.304688\nv 0.397684 -0.375 -0.304688\nv 0.398438 -0.375 -0.304186\nv 0.40625 -0.375 -0.300983\nv 0.414062 -0.375 -0.299578\nv 0.421875 -0.375 -0.298468\nv 0.429688 -0.375 -0.297939\nv 0.4375 -0.375 -0.297648\nv 0.445312 -0.375 -0.297932\nv 0.453125 -0.375 -0.299075\nv 0.460938 -0.375 -0.299901\nv 0.46875 -0.375 -0.30079\nv 0.476562 -0.375 -0.301808\nv 0.488883 -0.375 -0.304688\nv 0.484375 -0.375 -0.303444\nv -0.31687 -0.367188 -0.304688\nv -0.3125 -0.367188 -0.301001\nv -0.304688 -0.367188 -0.29923\nv -0.296875 -0.367188 -0.298489\nv -0.289062 -0.367188 -0.29743\nv -0.273438 -0.367188 -0.297431\nv -0.265625 -0.367188 -0.298044\nv -0.257812 -0.367188 -0.299132\nv -0.25 -0.367188 -0.300614\nv -0.242188 -0.367188 -0.302325\nv -0.23437 -0.367188 -0.304688\nv -0.234375 -0.367188 -0.304686\nv 0.396302 -0.367188 -0.304688\nv 0.398438 -0.367188 -0.303261\nv 0.40625 -0.367188 -0.30028\nv 0.414062 -0.367188 -0.29892\nv 0.421875 -0.367188 -0.297909\nv 0.429688 -0.367188 -0.297445\nv 0.4375 -0.367188 -0.297108\nv 0.445312 -0.367188 -0.297897\nv 0.453125 -0.367188 -0.299117\nv 0.460938 -0.367188 -0.299898\nv 0.46875 -0.367188 -0.300828\nv 0.476562 -0.367188 -0.301709\nv 0.490332 -0.367188 -0.304688\nv 0.484375 -0.367188 -0.30312\nv -0.315819 -0.359375 -0.304688\nv -0.3125 -0.359375 -0.301637\nv -0.304688 -0.359375 -0.299505\nv -0.296875 -0.359375 -0.298424\nv -0.289062 -0.359375 -0.29736\nv -0.273438 -0.359375 -0.297112\nv -0.265625 -0.359375 -0.297772\nv -0.257812 -0.359375 -0.298804\nv -0.25 -0.359375 -0.300252\nv -0.242188 -0.359375 -0.30189\nv -0.233623 -0.359375 -0.304688\nv -0.234375 -0.359375 -0.304388\nv 0.395249 -0.359375 -0.304688\nv 0.398438 -0.359375 -0.30256\nv 0.40625 -0.359375 -0.299709\nv 0.414062 -0.359375 -0.298271\nv 0.421875 -0.359375 -0.297347\nv 0.429688 -0.359375 -0.296884\nv 0.4375 -0.359375 -0.29701\nv 0.445312 -0.359375 -0.297897\nv 0.453125 -0.359375 -0.29913\nv 0.460938 -0.359375 -0.299905\nv 0.46875 -0.359375 -0.300821\nv 0.476562 -0.359375 -0.301531\nv 0.491489 -0.359375 -0.304688\nv 0.484375 -0.359375 -0.302756\nv 0.492188 -0.355598 -0.304688\nv -0.314538 -0.351562 -0.304688\nv -0.3125 -0.351562 -0.30269\nv -0.304688 -0.351562 -0.299927\nv -0.296875 -0.351562 -0.298468\nv -0.289062 -0.351562 -0.297337\nv -0.265625 -0.351562 -0.29746\nv -0.257812 -0.351562 -0.298469\nv -0.25 -0.351562 -0.299955\nv -0.242188 -0.351562 -0.301385\nv -0.232514 -0.351562 -0.304688\nv -0.234375 -0.351562 -0.303926\nv 0.394115 -0.351562 -0.304688\nv 0.398438 -0.351562 -0.301906\nv 0.40625 -0.351562 -0.299229\nv 0.414062 -0.351562 -0.297706\nv 0.445312 -0.351562 -0.297864\nv 0.453125 -0.351562 -0.299084\nv 0.460938 -0.351562 -0.299828\nv 0.46875 -0.351562 -0.300708\nv 0.476562 -0.351562 -0.301356\nv 0.484375 -0.351562 -0.302435\nv 0.49246 -0.351562 -0.304688\nv 0.492188 -0.351562 -0.30448\nv -0.313242 -0.34375 -0.304688\nv -0.3125 -0.337326 -0.304688\nv -0.3125 -0.34375 -0.303917\nv -0.304688 -0.34375 -0.300427\nv -0.296875 -0.34375 -0.298851\nv -0.289062 -0.34375 -0.297642\nv -0.265625 -0.34375 -0.297168\nv -0.257812 -0.34375 -0.298105\nv -0.25 -0.34375 -0.299594\nv -0.242188 -0.34375 -0.300933\nv -0.231502 -0.34375 -0.304688\nv -0.234375 -0.34375 -0.303487\nv 0.393393 -0.34375 -0.304688\nv 0.398438 -0.34375 -0.301346\nv 0.40625 -0.34375 -0.298795\nv 0.414062 -0.34375 -0.297288\nv 0.445312 -0.34375 -0.297778\nv 0.453125 -0.34375 -0.298961\nv 0.460938 -0.34375 -0.299703\nv 0.46875 -0.34375 -0.300625\nv 0.476562 -0.34375 -0.301263\nv 0.484375 -0.34375 -0.302283\nv 0.492716 -0.34375 -0.304688\nv 0.492188 -0.34375 -0.304285\nv -0.312235 -0.335938 -0.304688\nv -0.304688 -0.335938 -0.300719\nv -0.296875 -0.335938 -0.29931\nv -0.289062 -0.335938 -0.298044\nv -0.265625 -0.335938 -0.296955\nv -0.257812 -0.335938 -0.297692\nv -0.25 -0.335938 -0.299214\nv -0.242188 -0.335938 -0.300479\nv -0.230504 -0.335938 -0.304688\nv -0.234375 -0.335938 -0.302983\nv 0.393188 -0.335938 -0.304688\nv 0.398438 -0.335938 -0.301042\nv 0.40625 -0.335938 -0.29863\nv 0.414062 -0.335938 -0.297062\nv 0.445312 -0.335938 -0.297683\nv 0.453125 -0.335938 -0.298801\nv 0.460938 -0.335938 -0.299615\nv 0.46875 -0.335938 -0.300673\nv 0.476562 -0.335938 -0.301321\nv 0.484375 -0.335938 -0.302232\nv 0.492715 -0.335938 -0.304688\nv 0.492188 -0.335938 -0.304303\nv -0.311075 -0.328125 -0.304688\nv -0.304688 -0.328125 -0.300995\nv -0.296875 -0.328125 -0.299741\nv -0.289062 -0.328125 -0.298474\nv -0.265625 -0.328125 -0.297031\nv -0.257812 -0.328125 -0.297538\nv -0.25 -0.328125 -0.29891\nv -0.242188 -0.328125 -0.30012\nv -0.229773 -0.328125 -0.304688\nv -0.234375 -0.328125 -0.302549\nv 0.393208 -0.328125 -0.304688\nv 0.398438 -0.328125 -0.300774\nv 0.40625 -0.328125 -0.298535\nv 0.414062 -0.328125 -0.29691\nv 0.445312 -0.328125 -0.297715\nv 0.453125 -0.328125 -0.298879\nv 0.460938 -0.328125 -0.2997\nv 0.46875 -0.328125 -0.300784\nv 0.476562 -0.328125 -0.301452\nv 0.484375 -0.328125 -0.302226\nv 0.492769 -0.328125 -0.304688\nv 0.492188 -0.328125 -0.304285\nv -0.310268 -0.320312 -0.304688\nv -0.304688 -0.320312 -0.301217\nv -0.296875 -0.320312 -0.30003\nv -0.289062 -0.320312 -0.29873\nv -0.28125 -0.320312 -0.297066\nv -0.265625 -0.320312 -0.296885\nv -0.257812 -0.320312 -0.297376\nv -0.25 -0.320312 -0.298718\nv -0.242188 -0.320312 -0.299707\nv -0.228897 -0.320312 -0.304688\nv -0.234375 -0.320312 -0.302024\nv 0.393177 -0.320312 -0.304688\nv 0.398438 -0.320312 -0.300494\nv 0.40625 -0.320312 -0.2984\nv 0.445312 -0.320312 -0.297935\nv 0.453125 -0.320312 -0.298951\nv 0.460938 -0.320312 -0.299807\nv 0.46875 -0.320312 -0.300899\nv 0.476562 -0.320312 -0.301602\nv 0.484375 -0.320312 -0.302338\nv 0.492701 -0.320312 -0.304688\nv 0.492188 -0.320312 -0.304337\nv -0.309438 -0.3125 -0.304688\nv -0.304688 -0.3125 -0.301424\nv -0.296875 -0.3125 -0.300251\nv -0.289062 -0.3125 -0.298996\nv -0.28125 -0.3125 -0.29728\nv -0.273438 -0.3125 -0.296879\nv -0.257812 -0.3125 -0.297281\nv -0.25 -0.3125 -0.298583\nv -0.242188 -0.3125 -0.299485\nv -0.228188 -0.3125 -0.304688\nv -0.234375 -0.3125 -0.301579\nv 0.393211 -0.3125 -0.304688\nv 0.398438 -0.3125 -0.300444\nv 0.40625 -0.3125 -0.298311\nv 0.4375 -0.3125 -0.297054\nv 0.445312 -0.3125 -0.298181\nv 0.453125 -0.3125 -0.299094\nv 0.460938 -0.3125 -0.299933\nv 0.46875 -0.3125 -0.301033\nv 0.476562 -0.3125 -0.301794\nv 0.484375 -0.3125 -0.302538\nv 0.492397 -0.3125 -0.304688\nv 0.492188 -0.3125 -0.304554\nv -0.308822 -0.304688 -0.304688\nv -0.304688 -0.304688 -0.30164\nv -0.296875 -0.304688 -0.300663\nv -0.289062 -0.304688 -0.299393\nv -0.28125 -0.304688 -0.297514\nv -0.273438 -0.304688 -0.296975\nv -0.257812 -0.304688 -0.297266\nv -0.25 -0.304688 -0.298609\nv -0.242188 -0.304688 -0.299407\nv -0.227748 -0.304688 -0.304688\nv -0.234375 -0.304688 -0.301286\nv 0.393297 -0.304688 -0.304688\nv 0.398438 -0.304688 -0.300515\nv 0.40625 -0.304688 -0.298307\nv 0.429688 -0.304688 -0.297005\nv 0.4375 -0.304688 -0.29746\nv 0.445312 -0.304688 -0.298445\nv 0.453125 -0.304688 -0.299257\nv 0.460938 -0.304688 -0.300109\nv 0.46875 -0.304688 -0.301248\nv 0.476562 -0.304688 -0.302108\nv 0.484375 -0.304688 -0.302859\nv 0.49242 -0.304688 -0.304688\nv 0.492188 -0.304688 -0.304548\nv -0.30829 -0.296875 -0.304688\nv -0.304688 -0.296875 -0.301839\nv -0.296875 -0.296875 -0.301103\nv -0.289062 -0.296875 -0.299849\nv -0.28125 -0.296875 -0.29784\nv -0.273438 -0.296875 -0.297131\nv -0.257812 -0.296875 -0.297344\nv -0.25 -0.296875 -0.298637\nv -0.242188 -0.296875 -0.299429\nv -0.227786 -0.296875 -0.304688\nv -0.234375 -0.296875 -0.301273\nv 0.393503 -0.296875 -0.304688\nv 0.398438 -0.296875 -0.300791\nv 0.40625 -0.296875 -0.298395\nv 0.414062 -0.296875 -0.296964\nv 0.421875 -0.296875 -0.297069\nv 0.429688 -0.296875 -0.297313\nv 0.4375 -0.296875 -0.297797\nv 0.445312 -0.296875 -0.298717\nv 0.453125 -0.296875 -0.299426\nv 0.460938 -0.296875 -0.300262\nv 0.46875 -0.296875 -0.301499\nv 0.476562 -0.296875 -0.302426\nv 0.484375 -0.296875 -0.302672\nv 0.492445 -0.296875 -0.304688\nv 0.492188 -0.296875 -0.304537\nv -0.307707 -0.289062 -0.304688\nv -0.304688 -0.289062 -0.302161\nv -0.296875 -0.289062 -0.30139\nv -0.289062 -0.289062 -0.300326\nv -0.28125 -0.289062 -0.298247\nv -0.273438 -0.289062 -0.297341\nv -0.265625 -0.289062 -0.296977\nv -0.257812 -0.289062 -0.297605\nv -0.25 -0.289062 -0.298689\nv -0.242188 -0.289062 -0.299477\nv -0.228464 -0.289062 -0.304688\nv -0.234375 -0.289062 -0.301356\nv 0.394411 -0.289062 -0.304688\nv 0.398438 -0.289062 -0.301521\nv 0.40625 -0.289062 -0.299039\nv 0.414062 -0.289062 -0.297541\nv 0.421875 -0.289062 -0.297522\nv 0.429688 -0.289062 -0.297687\nv 0.4375 -0.289062 -0.298102\nv 0.445312 -0.289062 -0.299028\nv 0.453125 -0.289062 -0.299625\nv 0.460938 -0.289062 -0.30035\nv 0.46875 -0.289062 -0.301613\nv 0.476562 -0.289062 -0.302058\nv 0.484375 -0.289062 -0.302323\nv 0.492338 -0.289062 -0.304688\nv 0.492188 -0.289062 -0.304606\nv -0.307115 -0.28125 -0.304688\nv -0.304688 -0.28125 -0.302516\nv -0.296875 -0.28125 -0.301433\nv -0.289062 -0.28125 -0.30065\nv -0.28125 -0.28125 -0.298532\nv -0.273438 -0.28125 -0.297763\nv -0.265625 -0.28125 -0.297471\nv -0.257812 -0.28125 -0.29796\nv -0.25 -0.28125 -0.298898\nv -0.242188 -0.28125 -0.299625\nv -0.229012 -0.28125 -0.304688\nv -0.234375 -0.28125 -0.301437\nv 0.395452 -0.28125 -0.304688\nv 0.398438 -0.28125 -0.302339\nv 0.40625 -0.28125 -0.299671\nv 0.414062 -0.28125 -0.298111\nv 0.421875 -0.28125 -0.298093\nv 0.429688 -0.28125 -0.298279\nv 0.4375 -0.28125 -0.298656\nv 0.445312 -0.28125 -0.29943\nv 0.453125 -0.28125 -0.299897\nv 0.460938 -0.28125 -0.30044\nv 0.46875 -0.28125 -0.301445\nv 0.476562 -0.28125 -0.301741\nv 0.484375 -0.28125 -0.30209\nv 0.492638 -0.28125 -0.304688\nv 0.492188 -0.28125 -0.304443\nv -0.306669 -0.273438 -0.304688\nv -0.304688 -0.273438 -0.302866\nv -0.296875 -0.273438 -0.301439\nv -0.289062 -0.273438 -0.300978\nv -0.28125 -0.273438 -0.298821\nv -0.273438 -0.273438 -0.298277\nv -0.265625 -0.273438 -0.297894\nv -0.257812 -0.273438 -0.298222\nv -0.25 -0.273438 -0.299096\nv -0.242188 -0.273438 -0.299934\nv -0.229576 -0.273438 -0.304688\nv -0.234375 -0.273438 -0.30165\nv 0.396559 -0.273438 -0.304688\nv 0.398438 -0.273438 -0.303263\nv 0.40625 -0.273438 -0.300381\nv 0.414062 -0.273438 -0.298632\nv 0.421875 -0.273438 -0.298561\nv 0.429688 -0.273438 -0.298674\nv 0.4375 -0.273438 -0.299129\nv 0.445312 -0.273438 -0.299787\nv 0.453125 -0.273438 -0.300383\nv 0.460938 -0.273438 -0.300653\nv 0.46875 -0.273438 -0.301476\nv 0.476562 -0.273438 -0.301599\nv 0.484375 -0.273438 -0.301919\nv 0.493048 -0.273438 -0.304688\nv 0.492188 -0.273438 -0.304195\nv -0.306405 -0.265625 -0.304688\nv -0.304688 -0.265625 -0.303142\nv -0.296875 -0.265625 -0.301534\nv -0.289062 -0.265625 -0.301102\nv -0.28125 -0.265625 -0.299244\nv -0.273438 -0.265625 -0.298634\nv -0.265625 -0.265625 -0.298044\nv -0.257812 -0.265625 -0.298367\nv -0.25 -0.265625 -0.299228\nv -0.242188 -0.265625 -0.300106\nv -0.230367 -0.265625 -0.304688\nv -0.234375 -0.265625 -0.301879\nv 0.39699 -0.265625 -0.304688\nv 0.398438 -0.265625 -0.303618\nv 0.40625 -0.265625 -0.300692\nv 0.414062 -0.265625 -0.298588\nv 0.421875 -0.265625 -0.298395\nv 0.429688 -0.265625 -0.298358\nv 0.4375 -0.265625 -0.298935\nv 0.445312 -0.265625 -0.299727\nv 0.453125 -0.265625 -0.300488\nv 0.460938 -0.265625 -0.300851\nv 0.46875 -0.265625 -0.301733\nv 0.476562 -0.265625 -0.301403\nv 0.484375 -0.265625 -0.301537\nv 0.493934 -0.265625 -0.304688\nv 0.492188 -0.265625 -0.303621\nv -0.306205 -0.257812 -0.304688\nv -0.304688 -0.257812 -0.303335\nv -0.296875 -0.257812 -0.301116\nv -0.289062 -0.257812 -0.30067\nv -0.28125 -0.257812 -0.298991\nv -0.273438 -0.257812 -0.298213\nv -0.265625 -0.257812 -0.297539\nv -0.257812 -0.257812 -0.297824\nv -0.25 -0.257812 -0.298611\nv -0.242188 -0.257812 -0.299234\nv -0.22962 -0.257812 -0.304688\nv -0.234375 -0.257812 -0.300961\nv 0.397229 -0.257812 -0.304688\nv 0.398438 -0.257812 -0.303822\nv 0.40625 -0.257812 -0.301092\nv 0.414062 -0.257812 -0.298778\nv 0.421875 -0.257812 -0.298525\nv 0.429688 -0.257812 -0.298441\nv 0.4375 -0.257812 -0.29897\nv 0.445312 -0.257812 -0.299717\nv 0.453125 -0.257812 -0.300493\nv 0.460938 -0.257812 -0.300814\nv 0.46875 -0.257812 -0.301495\nv 0.476562 -0.257812 -0.300907\nv 0.484375 -0.257812 -0.301145\nv 0.494586 -0.257812 -0.304688\nv 0.492188 -0.257812 -0.303153\nv -0.306063 -0.25 -0.304688\nv -0.304688 -0.25 -0.303333\nv -0.296875 -0.25 -0.300719\nv -0.289062 -0.25 -0.300198\nv -0.28125 -0.25 -0.298416\nv -0.273438 -0.25 -0.297713\nv -0.265625 -0.25 -0.296893\nv -0.25 -0.25 -0.297437\nv -0.242188 -0.25 -0.297915\nv -0.228446 -0.25 -0.304688\nv -0.234375 -0.25 -0.299445\nv 0.397413 -0.25 -0.304688\nv 0.398438 -0.25 -0.304015\nv 0.40625 -0.25 -0.301475\nv 0.414062 -0.25 -0.299243\nv 0.421875 -0.25 -0.298762\nv 0.429688 -0.25 -0.298595\nv 0.4375 -0.25 -0.298965\nv 0.445312 -0.25 -0.299578\nv 0.453125 -0.25 -0.300325\nv 0.460938 -0.25 -0.30058\nv 0.46875 -0.25 -0.300953\nv 0.476562 -0.25 -0.300195\nv 0.484375 -0.25 -0.300568\nv 0.495213 -0.25 -0.304688\nv 0.492188 -0.25 -0.302532\nv -0.305913 -0.242188 -0.304688\nv -0.304688 -0.242188 -0.303453\nv -0.296875 -0.242188 -0.300499\nv -0.289062 -0.242188 -0.299777\nv -0.28125 -0.242188 -0.297837\nv -0.273438 -0.242188 -0.297165\nv -0.227609 -0.242188 -0.304688\nv -0.234375 -0.242188 -0.29792\nv 0.397564 -0.242188 -0.304688\nv 0.398438 -0.242188 -0.304151\nv 0.40625 -0.242188 -0.301698\nv 0.414062 -0.242188 -0.29947\nv 0.421875 -0.242188 -0.298612\nv 0.429688 -0.242188 -0.298467\nv 0.4375 -0.242188 -0.298711\nv 0.445312 -0.242188 -0.299272\nv 0.453125 -0.242188 -0.299788\nv 0.460938 -0.242188 -0.300013\nv 0.46875 -0.242188 -0.300134\nv 0.476562 -0.242188 -0.299357\nv 0.484375 -0.242188 -0.299985\nv 0.49566 -0.242188 -0.304688\nv 0.492188 -0.242188 -0.301897\nv -0.305657 -0.234375 -0.304688\nv -0.304688 -0.234375 -0.303691\nv -0.296875 -0.234375 -0.300454\nv -0.289062 -0.234375 -0.299455\nv -0.28125 -0.234375 -0.297482\nv -0.22726 -0.234375 -0.304688\nv -0.234375 -0.234375 -0.297111\nv 0.398256 -0.234375 -0.304688\nv 0.398438 -0.232831 -0.304688\nv 0.398438 -0.234375 -0.304577\nv 0.40625 -0.234375 -0.301998\nv 0.414062 -0.234375 -0.299759\nv 0.421875 -0.234375 -0.298472\nv 0.429688 -0.234375 -0.298203\nv 0.4375 -0.234375 -0.298655\nv 0.445312 -0.234375 -0.299099\nv 0.453125 -0.234375 -0.299271\nv 0.460938 -0.234375 -0.299238\nv 0.46875 -0.234375 -0.299364\nv 0.476562 -0.234375 -0.298624\nv 0.484375 -0.234375 -0.299536\nv 0.496026 -0.234375 -0.304688\nv 0.492188 -0.234375 -0.301315\nv -0.30561 -0.226562 -0.304688\nv -0.304688 -0.226562 -0.303708\nv -0.296875 -0.226562 -0.3004\nv -0.289062 -0.226562 -0.299073\nv -0.28125 -0.226562 -0.297016\nv -0.226982 -0.226562 -0.304688\nv 0.399611 -0.226562 -0.304688\nv 0.40625 -0.226562 -0.302569\nv 0.414062 -0.226562 -0.300354\nv 0.421875 -0.226562 -0.29865\nv 0.429688 -0.226562 -0.298252\nv 0.4375 -0.226562 -0.298769\nv 0.445312 -0.226562 -0.29897\nv 0.453125 -0.226562 -0.299105\nv 0.460938 -0.226562 -0.299\nv 0.46875 -0.226562 -0.298962\nv 0.476562 -0.226562 -0.298574\nv 0.484375 -0.226562 -0.299438\nv 0.49639 -0.226562 -0.304688\nv 0.492188 -0.226562 -0.300942\nv -0.305701 -0.21875 -0.304688\nv -0.304688 -0.21875 -0.303546\nv -0.296875 -0.21875 -0.300166\nv -0.289062 -0.21875 -0.298677\nv -0.226871 -0.21875 -0.304688\nv 0.401507 -0.21875 -0.304688\nv 0.40625 -0.21875 -0.303126\nv 0.414062 -0.21875 -0.300781\nv 0.421875 -0.21875 -0.298793\nv 0.429688 -0.21875 -0.298122\nv 0.4375 -0.21875 -0.298635\nv 0.445312 -0.21875 -0.298745\nv 0.453125 -0.21875 -0.298923\nv 0.460938 -0.21875 -0.298698\nv 0.46875 -0.21875 -0.2985\nv 0.476562 -0.21875 -0.298249\nv 0.484375 -0.21875 -0.299184\nv 0.496667 -0.21875 -0.304688\nv 0.492188 -0.21875 -0.300534\nv -0.305736 -0.210938 -0.304688\nv -0.304688 -0.210938 -0.303481\nv -0.296875 -0.210938 -0.300029\nv -0.289062 -0.210938 -0.298308\nv -0.226696 -0.210938 -0.304688\nv 0.403254 -0.210938 -0.304688\nv 0.40625 -0.210938 -0.303628\nv 0.414062 -0.210938 -0.301255\nv 0.421875 -0.210938 -0.299087\nv 0.429688 -0.210938 -0.298051\nv 0.4375 -0.210938 -0.298461\nv 0.445312 -0.210938 -0.298611\nv 0.453125 -0.210938 -0.298554\nv 0.460938 -0.210938 -0.298132\nv 0.46875 -0.210938 -0.297863\nv 0.476562 -0.210938 -0.297781\nv 0.484375 -0.210938 -0.298536\nv 0.4968 -0.210938 -0.304688\nv 0.492188 -0.210938 -0.30018\nv -0.305492 -0.203125 -0.304688\nv -0.304688 -0.196173 -0.304688\nv -0.304688 -0.203125 -0.303757\nv -0.296875 -0.203125 -0.300065\nv -0.289062 -0.203125 -0.2983\nv -0.226738 -0.203125 -0.304688\nv -0.226562 -0.198917 -0.304688\nv 0.404782 -0.203125 -0.304688\nv 0.40625 -0.203125 -0.30415\nv 0.414062 -0.203125 -0.301705\nv 0.421875 -0.203125 -0.299741\nv 0.429688 -0.203125 -0.298347\nv 0.4375 -0.203125 -0.298597\nv 0.445312 -0.203125 -0.298566\nv 0.453125 -0.203125 -0.298176\nv 0.460938 -0.203125 -0.297523\nv 0.46875 -0.203125 -0.297185\nv 0.476562 -0.203125 -0.297232\nv 0.484375 -0.203125 -0.298073\nv 0.497073 -0.203125 -0.304688\nv 0.492188 -0.203125 -0.299984\nv -0.304503 -0.195312 -0.304688\nv -0.296875 -0.195312 -0.300833\nv -0.289062 -0.195312 -0.299011\nv -0.28125 -0.195312 -0.29751\nv -0.226442 -0.195312 -0.304688\nv -0.226562 -0.195312 -0.304403\nv 0.405471 -0.195312 -0.304688\nv 0.40625 -0.195312 -0.304409\nv 0.414062 -0.195312 -0.30215\nv 0.421875 -0.195312 -0.300216\nv 0.429688 -0.195312 -0.298836\nv 0.4375 -0.195312 -0.298747\nv 0.445312 -0.195312 -0.298509\nv 0.453125 -0.195312 -0.298003\nv 0.460938 -0.195312 -0.297172\nv 0.46875 -0.195312 -0.296967\nv 0.476562 -0.195312 -0.29732\nv 0.484375 -0.195312 -0.298122\nv 0.497344 -0.195312 -0.304688\nv 0.492188 -0.195312 -0.300041\nv -0.302869 -0.1875 -0.304688\nv -0.296875 -0.1875 -0.301635\nv -0.289062 -0.1875 -0.299722\nv -0.28125 -0.1875 -0.298368\nv -0.273438 -0.1875 -0.297186\nv -0.22624 -0.1875 -0.304688\nv -0.226562 -0.1875 -0.303866\nv 0.405816 -0.1875 -0.304688\nv 0.40625 -0.184035 -0.304688\nv 0.40625 -0.1875 -0.304535\nv 0.414062 -0.1875 -0.302258\nv 0.421875 -0.1875 -0.300387\nv 0.429688 -0.1875 -0.299177\nv 0.4375 -0.1875 -0.299018\nv 0.445312 -0.1875 -0.298517\nv 0.453125 -0.1875 -0.297949\nv 0.460938 -0.1875 -0.297196\nv 0.46875 -0.1875 -0.297137\nv 0.476562 -0.1875 -0.297512\nv 0.484375 -0.1875 -0.298247\nv 0.496781 -0.1875 -0.304688\nv 0.492188 -0.1875 -0.300432\nv -0.300593 -0.179688 -0.304688\nv -0.296875 -0.179688 -0.302816\nv -0.289062 -0.179688 -0.300764\nv -0.28125 -0.179688 -0.299274\nv -0.273438 -0.179688 -0.298259\nv -0.265625 -0.179688 -0.297112\nv -0.234375 -0.179688 -0.297264\nv -0.226273 -0.179688 -0.304688\nv -0.226562 -0.177181 -0.304688\nv -0.226562 -0.179688 -0.304146\nv 0.406923 -0.179688 -0.304688\nv 0.414062 -0.179688 -0.302445\nv 0.421875 -0.179688 -0.300486\nv 0.429688 -0.179688 -0.299467\nv 0.4375 -0.179688 -0.299239\nv 0.445312 -0.179688 -0.298703\nv 0.453125 -0.179688 -0.298017\nv 0.460938 -0.179688 -0.29713\nv 0.46875 -0.179688 -0.29721\nv 0.476562 -0.179688 -0.297778\nv 0.484375 -0.179688 -0.298579\nv 0.495656 -0.179688 -0.304688\nv 0.492188 -0.179688 -0.301409\nv -0.298916 -0.171875 -0.304688\nv -0.296875 -0.171875 -0.303568\nv -0.289062 -0.171875 -0.301617\nv -0.28125 -0.171875 -0.299953\nv -0.273438 -0.171875 -0.299028\nv -0.265625 -0.171875 -0.298022\nv -0.227609 -0.171875 -0.304688\nv -0.234375 -0.171875 -0.299069\nv 0.408656 -0.171875 -0.304688\nv 0.414062 -0.171875 -0.302762\nv 0.421875 -0.171875 -0.300681\nv 0.429688 -0.171875 -0.299772\nv 0.4375 -0.171875 -0.299593\nv 0.445312 -0.171875 -0.298958\nv 0.453125 -0.171875 -0.29843\nv 0.460938 -0.171875 -0.297391\nv 0.46875 -0.171875 -0.297433\nv 0.476562 -0.171875 -0.298293\nv 0.484375 -0.171875 -0.299272\nv 0.494553 -0.171875 -0.304688\nv 0.492188 -0.171875 -0.30243\nv -0.297594 -0.164062 -0.304688\nv -0.296875 -0.164062 -0.304244\nv -0.289062 -0.164062 -0.301814\nv -0.28125 -0.164062 -0.299939\nv -0.273438 -0.164062 -0.299374\nv -0.265625 -0.164062 -0.298598\nv -0.257812 -0.164062 -0.297606\nv -0.242188 -0.164062 -0.297986\nv -0.229065 -0.164062 -0.304688\nv -0.234375 -0.164062 -0.301163\nv 0.409649 -0.164062 -0.304688\nv 0.414062 -0.164062 -0.302919\nv 0.421875 -0.164062 -0.300829\nv 0.429688 -0.164062 -0.299966\nv 0.4375 -0.164062 -0.299695\nv 0.445312 -0.164062 -0.299182\nv 0.453125 -0.164062 -0.298837\nv 0.460938 -0.164062 -0.298141\nv 0.46875 -0.164062 -0.29793\nv 0.476562 -0.164062 -0.298719\nv 0.484375 -0.164062 -0.299491\nv 0.493965 -0.164062 -0.304688\nv 0.492188 -0.164062 -0.302914\nv -0.29701 -0.15625 -0.304688\nv -0.296875 -0.152368 -0.304688\nv -0.296875 -0.15625 -0.30459\nv -0.289062 -0.15625 -0.301441\nv -0.28125 -0.15625 -0.299521\nv -0.273438 -0.15625 -0.298943\nv -0.265625 -0.15625 -0.298741\nv -0.257812 -0.15625 -0.297925\nv -0.25 -0.15625 -0.297388\nv -0.242188 -0.15625 -0.299441\nv -0.230931 -0.15625 -0.304688\nv -0.234375 -0.148657 -0.304688\nv -0.234375 -0.15625 -0.302787\nv 0.410616 -0.15625 -0.304688\nv 0.414062 -0.15625 -0.30327\nv 0.421875 -0.15625 -0.301167\nv 0.429688 -0.15625 -0.300325\nv 0.4375 -0.15625 -0.299852\nv 0.445312 -0.15625 -0.299303\nv 0.453125 -0.15625 -0.298981\nv 0.460938 -0.15625 -0.29877\nv 0.46875 -0.15625 -0.298565\nv 0.476562 -0.15625 -0.299123\nv 0.484375 -0.15625 -0.299813\nv 0.493228 -0.15625 -0.304688\nv 0.492188 -0.15625 -0.303624\nv -0.296676 -0.148438 -0.304688\nv -0.289062 -0.148438 -0.300905\nv -0.28125 -0.148438 -0.298907\nv -0.273438 -0.148438 -0.298481\nv -0.265625 -0.148438 -0.298391\nv -0.257812 -0.148438 -0.29778\nv -0.25 -0.148438 -0.298083\nv -0.234471 -0.148438 -0.304688\nv -0.242188 -0.148438 -0.300545\nv 0.412043 -0.148438 -0.304688\nv 0.414062 -0.148438 -0.303837\nv 0.421875 -0.148438 -0.301448\nv 0.429688 -0.148438 -0.300494\nv 0.4375 -0.148438 -0.299976\nv 0.445312 -0.148438 -0.299449\nv 0.453125 -0.148438 -0.299164\nv 0.460938 -0.148438 -0.299005\nv 0.46875 -0.148438 -0.29895\nv 0.476562 -0.148438 -0.299737\nv 0.484375 -0.148438 -0.300529\nv 0.49241 -0.148438 -0.304688\nv 0.492188 -0.145588 -0.304688\nv 0.492188 -0.148438 -0.304449\nv -0.296433 -0.140625 -0.304688\nv -0.289062 -0.140625 -0.300469\nv -0.28125 -0.140625 -0.298255\nv -0.273438 -0.140625 -0.29805\nv -0.265625 -0.140625 -0.298276\nv -0.257812 -0.140625 -0.298039\nv -0.25 -0.140625 -0.299075\nv -0.237537 -0.140625 -0.304688\nv -0.242188 -0.140625 -0.302154\nv 0.413761 -0.140625 -0.304688\nv 0.414062 -0.139585 -0.304688\nv 0.414062 -0.140625 -0.304558\nv 0.421875 -0.140625 -0.30196\nv 0.429688 -0.140625 -0.300885\nv 0.4375 -0.140625 -0.300233\nv 0.445312 -0.140625 -0.29973\nv 0.453125 -0.140625 -0.29932\nv 0.460938 -0.140625 -0.299075\nv 0.46875 -0.140625 -0.299489\nv 0.476562 -0.140625 -0.300148\nv 0.491489 -0.140625 -0.304688\nv 0.484375 -0.140625 -0.300838\nv -0.296229 -0.132812 -0.304688\nv -0.289062 -0.132812 -0.300123\nv -0.28125 -0.132812 -0.297592\nv -0.273438 -0.132812 -0.298045\nv -0.265625 -0.132812 -0.29848\nv -0.257812 -0.132812 -0.298417\nv -0.25 -0.132812 -0.300204\nv -0.240351 -0.132812 -0.304688\nv -0.242188 -0.126033 -0.304688\nv -0.242188 -0.132812 -0.303703\nv 0.416697 -0.132812 -0.304688\nv 0.421875 -0.132812 -0.302944\nv 0.429688 -0.132812 -0.301736\nv 0.4375 -0.132812 -0.300824\nv 0.445312 -0.132812 -0.300011\nv 0.453125 -0.132812 -0.299565\nv 0.460938 -0.132812 -0.299365\nv 0.46875 -0.132812 -0.299851\nv 0.476562 -0.132812 -0.300006\nv 0.490528 -0.132812 -0.304688\nv 0.484375 -0.132812 -0.300989\nv -0.296781 -0.125 -0.304688\nv -0.296875 -0.124596 -0.304688\nv -0.289062 -0.125 -0.299554\nv -0.273438 -0.125 -0.297551\nv -0.265625 -0.125 -0.298241\nv -0.257812 -0.125 -0.298569\nv -0.242465 -0.125 -0.304688\nv -0.25 -0.125 -0.300944\nv 0.418767 -0.125 -0.304688\nv 0.421875 -0.125 -0.303524\nv 0.429688 -0.125 -0.302391\nv 0.4375 -0.125 -0.301114\nv 0.445312 -0.125 -0.299746\nv 0.453125 -0.125 -0.299183\nv 0.460938 -0.125 -0.298792\nv 0.46875 -0.125 -0.299139\nv 0.476562 -0.125 -0.298982\nv 0.489737 -0.125 -0.304688\nv 0.484375 -0.125 -0.300628\nv -0.298008 -0.117188 -0.304688\nv -0.296875 -0.117188 -0.303345\nv -0.289062 -0.117188 -0.298011\nv -0.273438 -0.117188 -0.296884\nv -0.265625 -0.117188 -0.2976\nv -0.257812 -0.117188 -0.298796\nv -0.244457 -0.117188 -0.304688\nv -0.25 -0.117188 -0.301711\nv 0.420053 -0.117188 -0.304688\nv 0.421875 -0.117188 -0.303969\nv 0.429688 -0.117188 -0.302393\nv 0.4375 -0.117188 -0.300878\nv 0.445312 -0.117188 -0.298991\nv 0.453125 -0.117188 -0.298117\nv 0.460938 -0.117188 -0.297727\nv 0.46875 -0.117188 -0.29795\nv 0.476562 -0.117188 -0.297686\nv 0.489599 -0.117188 -0.304688\nv 0.484375 -0.117188 -0.299964\nv -0.299111 -0.109375 -0.304688\nv -0.296875 -0.109375 -0.301819\nv -0.257812 -0.109375 -0.298987\nv -0.246138 -0.109375 -0.304688\nv -0.25 -0.109375 -0.302563\nv 0.420411 -0.109375 -0.304688\nv 0.421875 -0.109375 -0.304105\nv 0.429688 -0.109375 -0.302197\nv 0.4375 -0.109375 -0.300413\nv 0.445312 -0.109375 -0.298477\nv 0.453125 -0.109375 -0.297312\nv 0.489852 -0.109375 -0.304688\nv 0.484375 -0.109375 -0.299316\nv -0.30027 -0.101562 -0.304688\nv -0.296875 -0.101562 -0.300382\nv -0.257812 -0.101562 -0.29928\nv -0.247586 -0.101562 -0.304688\nv -0.25 -0.101562 -0.303243\nv 0.419863 -0.101562 -0.304688\nv 0.421875 -0.101562 -0.303875\nv 0.429688 -0.101562 -0.30157\nv 0.4375 -0.101562 -0.299515\nv 0.445312 -0.101562 -0.297357\nv 0.491314 -0.101562 -0.304688\nv 0.484375 -0.101562 -0.297217\nv 0.492188 -0.0991596 -0.304688\nv -0.302165 -0.09375 -0.304688\nv -0.296875 -0.09375 -0.298171\nv -0.257812 -0.09375 -0.29934\nv -0.249569 -0.09375 -0.304688\nv -0.25 -0.09375 -0.30444\nv 0.416601 -0.09375 -0.304688\nv 0.421875 -0.09375 -0.302246\nv 0.429688 -0.09375 -0.299804\nv 0.4375 -0.09375 -0.297964\nv 0.493894 -0.09375 -0.304688\nv 0.492188 -0.09375 -0.302409\nv -0.304199 -0.0859375 -0.304688\nv -0.304688 -0.0838729 -0.304688\nv -0.257812 -0.0859375 -0.299059\nv -0.249886 -0.0859375 -0.304688\nv -0.25 -0.0859375 -0.304616\nv 0.41528 -0.0859375 -0.304688\nv 0.414062 -0.0825057 -0.304688\nv 0.421875 -0.0859375 -0.301163\nv 0.429688 -0.0859375 -0.298426\nv 0.49662 -0.0859375 -0.304688\nv 0.492188 -0.0859375 -0.298341\nv -0.30569 -0.078125 -0.304688\nv -0.304688 -0.078125 -0.302127\nv -0.248048 -0.078125 -0.304688\nv -0.25 -0.078125 -0.303249\nv 0.41281 -0.078125 -0.304688\nv 0.414062 -0.078125 -0.303823\nv 0.421875 -0.078125 -0.298284\nv 0.49834 -0.078125 -0.304688\nv 0.5 -0.0714441 -0.304688\nv -0.307413 -0.0703125 -0.304688\nv -0.304688 -0.0703125 -0.297127\nv -0.242646 -0.0703125 -0.304688\nv -0.242188 -0.0696561 -0.304688\nv 0.410724 -0.0703125 -0.304688\nv 0.40625 -0.0646743 -0.304688\nv 0.414062 -0.0703125 -0.302128\nv 0.500227 -0.0703125 -0.304688\nv 0.5 -0.0703125 -0.303931\nv -0.3084 -0.0625 -0.304688\nv -0.236725 -0.0625 -0.304688\nv -0.234375 -0.0575928 -0.304688\nv 0.404648 -0.0625 -0.304688\nv 0.40625 -0.0625 -0.303203\nv 0.501816 -0.0625 -0.304688\nv -0.308693 -0.0546875 -0.304688\nv -0.232887 -0.0546875 -0.304688\nv -0.234375 -0.0546875 -0.301263\nv 0.404591 -0.0546875 -0.304688\nv 0.40625 -0.0546875 -0.303159\nv 0.502469 -0.0546875 -0.304688\nv -0.308856 -0.046875 -0.304688\nv -0.22973 -0.046875 -0.304688\nv -0.226562 -0.0406211 -0.304688\nv 0.405242 -0.046875 -0.304688\nv 0.40625 -0.046875 -0.303863\nv 0.414062 -0.046875 -0.296945\nv 0.503265 -0.046875 -0.304688\nv -0.308798 -0.0390625 -0.304688\nv -0.225715 -0.0390625 -0.304688\nv -0.226562 -0.0390625 -0.303245\nv 0.405792 -0.0390625 -0.304688\nv 0.40625 -0.0373106 -0.304688\nv 0.40625 -0.0390625 -0.304309\nv 0.414062 -0.0390625 -0.297368\nv 0.503731 -0.0390625 -0.304688\nv -0.309068 -0.03125 -0.304688\nv -0.22336 -0.03125 -0.304688\nv -0.226562 -0.03125 -0.298908\nv 0.40766 -0.03125 -0.304688\nv 0.414062 -0.03125 -0.299118\nv 0.503165 -0.03125 -0.304688\nv -0.309596 -0.0234375 -0.304688\nv -0.220709 -0.0234375 -0.304688\nv -0.21875 -0.0175011 -0.304688\nv 0.409692 -0.0234375 -0.304688\nv 0.414062 -0.0234375 -0.300955\nv 0.502412 -0.0234375 -0.304688\nv -0.310822 -0.015625 -0.304688\nv -0.218169 -0.015625 -0.304688\nv -0.21875 -0.015625 -0.303082\nv 0.411571 -0.015625 -0.304688\nv 0.414062 -0.015625 -0.302901\nv 0.501283 -0.015625 -0.304688\nv -0.312025 -0.0078125 -0.304688\nv -0.214325 -0.0078125 -0.304688\nv 0.412542 -0.0078125 -0.304688\nv 0.414062 -0.0078125 -0.303252\nv 0.500254 -0.0078125 -0.304688\nv -0.311889 0 -0.304688\nv -0.21101 0 -0.304688\nv -0.210938 0.000110469 -0.304688\nv 0.413235 0 -0.304688\nv 0.414062 0 -0.303818\nv 0.500435 0 -0.304688\nv -0.311762 0.0078125 -0.304688\nv -0.205621 0.0078125 -0.304688\nv -0.203125 0.0113553 -0.304688\nv 0.410728 0.0078125 -0.304688\nv 0.40625 0.0134793 -0.304688\nv 0.414062 0.0078125 -0.301382\nv 0.500464 0.0078125 -0.304688\nv -0.311472 0.015625 -0.304688\nv -0.199852 0.015625 -0.304688\nv -0.203125 0.015625 -0.29905\nv -0.195312 0.0186509 -0.304688\nv -0.1875 0.0216615 -0.304688\nv 0.40429 0.015625 -0.304688\nv 0.398438 0.0193467 -0.304688\nv 0.40625 0.015625 -0.302734\nv 0.500743 0.015625 -0.304688\nv -0.310847 0.0234375 -0.304688\nv -0.180223 0.0234375 -0.304688\nv -0.1875 0.0234375 -0.298199\nv -0.179688 0.0235255 -0.304688\nv -0.171875 0.0245193 -0.304688\nv -0.164062 0.0253635 -0.304688\nv -0.15625 0.0262033 -0.304688\nv -0.148438 0.0268846 -0.304688\nv -0.140625 0.0272205 -0.304688\nv -0.132812 0.0272658 -0.304688\nv -0.125 0.02723 -0.304688\nv -0.117188 0.0270368 -0.304688\nv -0.109375 0.0269123 -0.304688\nv -0.101562 0.0269061 -0.304688\nv -0.09375 0.0268891 -0.304688\nv -0.0859375 0.02688 -0.304688\nv -0.078125 0.0268758 -0.304688\nv -0.0703125 0.0268568 -0.304688\nv -0.0625 0.0267381 -0.304688\nv -0.0546875 0.0265878 -0.304688\nv -0.046875 0.0264676 -0.304688\nv -0.0390625 0.0263401 -0.304688\nv -0.03125 0.0262636 -0.304688\nv -0.0234375 0.0262257 -0.304688\nv -0.015625 0.0261496 -0.304688\nv -0.0078125 0.0261157 -0.304688\nv 0 0.0260451 -0.304688\nv 0.0078125 0.0257938 -0.304688\nv 0.015625 0.0256192 -0.304688\nv 0.0234375 0.0255824 -0.304688\nv 0.03125 0.0255744 -0.304688\nv 0.0390625 0.0255831 -0.304688\nv 0.046875 0.0255738 -0.304688\nv 0.0546875 0.0254665 -0.304688\nv 0.0625 0.0252973 -0.304688\nv 0.0703125 0.0251669 -0.304688\nv 0.078125 0.025082 -0.304688\nv 0.0859375 0.0250502 -0.304688\nv 0.09375 0.0249961 -0.304688\nv 0.101562 0.0249677 -0.304688\nv 0.109375 0.0249739 -0.304688\nv 0.117188 0.0249567 -0.304688\nv 0.125 0.0248998 -0.304688\nv 0.132812 0.0247385 -0.304688\nv 0.140625 0.0245872 -0.304688\nv 0.148438 0.0244284 -0.304688\nv 0.15625 0.0243272 -0.304688\nv 0.164062 0.024201 -0.304688\nv 0.171875 0.0240877 -0.304688\nv 0.179688 0.023982 -0.304688\nv 0.1875 0.0238552 -0.304688\nv 0.195312 0.0237986 -0.304688\nv 0.203125 0.0237447 -0.304688\nv 0.210938 0.0237197 -0.304688\nv 0.21875 0.0236621 -0.304688\nv 0.226562 0.02378 -0.304688\nv 0.234375 0.0239072 -0.304688\nv 0.242188 0.0239041 -0.304688\nv 0.25 0.0238898 -0.304688\nv 0.257812 0.0239221 -0.304688\nv 0.265625 0.0239143 -0.304688\nv 0.273438 0.0239909 -0.304688\nv 0.28125 0.0243149 -0.304688\nv 0.289062 0.0247238 -0.304688\nv 0.296875 0.0251467 -0.304688\nv 0.304688 0.0254057 -0.304688\nv 0.3125 0.0257936 -0.304688\nv 0.320312 0.0259731 -0.304688\nv 0.328125 0.0262385 -0.304688\nv 0.335938 0.0263719 -0.304688\nv 0.34375 0.02646 -0.304688\nv 0.351562 0.0265366 -0.304688\nv 0.359375 0.0263897 -0.304688\nv 0.367188 0.0261926 -0.304688\nv 0.375 0.0260183 -0.304688\nv 0.382812 0.0253045 -0.304688\nv 0.391159 0.0234375 -0.304688\nv 0.390625 0.0235917 -0.304688\nv 0.398438 0.0234375 -0.298244\nv 0.500778 0.0234375 -0.304688\nv 0.5 0.0274424 -0.304688\nv -0.310224 0.03125 -0.304688\nv 0.49914 0.03125 -0.304688\nv -0.309431 0.0390625 -0.304688\nv 0.496115 0.0390625 -0.304688\nv 0.492188 0.0462648 -0.304688\nv -0.308616 0.046875 -0.304688\nv 0.491819 0.046875 -0.304688\nv 0.484375 0.0542972 -0.304688\nv -0.307473 0.0546875 -0.304688\nv 0.483771 0.0546875 -0.304688\nv 0.476562 0.0593715 -0.304688\nv -0.305757 0.0625 -0.304688\nv -0.304688 0.0625 -0.301338\nv 0.359375 0.0702015 -0.304688\nv 0.367188 0.0699095 -0.304688\nv 0.375 0.0696284 -0.304688\nv 0.382812 0.0693479 -0.304688\nv 0.390625 0.069013 -0.304688\nv 0.398438 0.0689434 -0.304688\nv 0.40625 0.0689968 -0.304688\nv 0.414062 0.0690741 -0.304688\nv 0.421875 0.0690528 -0.304688\nv 0.429688 0.0688966 -0.304688\nv 0.4375 0.068742 -0.304688\nv 0.445312 0.0683648 -0.304688\nv 0.453125 0.0667774 -0.304688\nv 0.460938 0.0652845 -0.304688\nv 0.470931 0.0625 -0.304688\nv 0.46875 0.0636279 -0.304688\nv -0.304757 0.0703125 -0.304688\nv -0.304688 0.0703125 -0.304511\nv -0.203125 0.0775123 -0.304688\nv -0.195312 0.0763414 -0.304688\nv -0.1875 0.0753601 -0.304688\nv -0.179688 0.0742616 -0.304688\nv -0.171875 0.0737078 -0.304688\nv -0.164062 0.0735256 -0.304688\nv -0.15625 0.0735007 -0.304688\nv -0.148438 0.0734874 -0.304688\nv -0.140625 0.0735299 -0.304688\nv -0.132812 0.0735602 -0.304688\nv -0.125 0.0736642 -0.304688\nv -0.117188 0.0737456 -0.304688\nv -0.109375 0.073787 -0.304688\nv -0.101562 0.0738873 -0.304688\nv -0.09375 0.0739668 -0.304688\nv -0.0859375 0.074072 -0.304688\nv -0.078125 0.074029 -0.304688\nv -0.0703125 0.0738671 -0.304688\nv -0.0625 0.0736748 -0.304688\nv -0.0546875 0.0735135 -0.304688\nv -0.046875 0.0733551 -0.304688\nv -0.0390625 0.0732299 -0.304688\nv -0.03125 0.0730907 -0.304688\nv -0.0234375 0.0729675 -0.304688\nv -0.015625 0.072844 -0.304688\nv -0.0078125 0.0727482 -0.304688\nv 0 0.0726495 -0.304688\nv 0.0078125 0.0724411 -0.304688\nv 0.015625 0.0723018 -0.304688\nv 0.0234375 0.0721959 -0.304688\nv 0.03125 0.0721328 -0.304688\nv 0.0390625 0.0720486 -0.304688\nv 0.046875 0.0718759 -0.304688\nv 0.0546875 0.0717441 -0.304688\nv 0.0625 0.0716297 -0.304688\nv 0.0703125 0.0715558 -0.304688\nv 0.078125 0.0714515 -0.304688\nv 0.0859375 0.0713531 -0.304688\nv 0.09375 0.071291 -0.304688\nv 0.101562 0.0712963 -0.304688\nv 0.109375 0.0713519 -0.304688\nv 0.117188 0.0714363 -0.304688\nv 0.125 0.071518 -0.304688\nv 0.132812 0.071608 -0.304688\nv 0.140625 0.0716463 -0.304688\nv 0.148438 0.0716904 -0.304688\nv 0.15625 0.0717437 -0.304688\nv 0.164062 0.0718103 -0.304688\nv 0.171875 0.0718576 -0.304688\nv 0.179688 0.0718988 -0.304688\nv 0.1875 0.0719159 -0.304688\nv 0.195312 0.0718986 -0.304688\nv 0.203125 0.0718502 -0.304688\nv 0.210938 0.0718602 -0.304688\nv 0.21875 0.0718005 -0.304688\nv 0.226562 0.0716928 -0.304688\nv 0.234375 0.0715911 -0.304688\nv 0.242188 0.0714311 -0.304688\nv 0.25 0.0712794 -0.304688\nv 0.257812 0.0711592 -0.304688\nv 0.265625 0.0710726 -0.304688\nv 0.273438 0.0710158 -0.304688\nv 0.28125 0.0709883 -0.304688\nv 0.289062 0.0709855 -0.304688\nv 0.296875 0.0709908 -0.304688\nv 0.304688 0.0709531 -0.304688\nv 0.3125 0.0708894 -0.304688\nv 0.320312 0.0708332 -0.304688\nv 0.328125 0.0707788 -0.304688\nv 0.335938 0.0706985 -0.304688\nv 0.34375 0.0705556 -0.304688\nv 0.354687 0.0703125 -0.304688\nv 0.351562 0.0703841 -0.304688\nv 0.359375 0.0703125 -0.300464\nv -0.304853 0.078125 -0.304688\nv -0.304688 0.078125 -0.304275\nv -0.273438 0.078125 -0.29821\nv -0.265625 0.078125 -0.298426\nv -0.21875 0.083842 -0.304688\nv -0.206167 0.078125 -0.304688\nv -0.210938 0.0792188 -0.304688\nv -0.304767 0.0859375 -0.304688\nv -0.304688 0.0859375 -0.304506\nv -0.289062 0.0859375 -0.297263\nv -0.28125 0.0859375 -0.297701\nv -0.273438 0.0859375 -0.29997\nv -0.265625 0.0882893 -0.304688\nv -0.265625 0.0859375 -0.303238\nv -0.225834 0.0859375 -0.304688\nv -0.226562 0.0863149 -0.304688\nv -0.226562 0.0859375 -0.304019\nv -0.304978 0.09375 -0.304688\nv -0.304688 0.0994928 -0.304688\nv -0.304688 0.09375 -0.304157\nv -0.296875 0.09375 -0.299122\nv -0.289062 0.09375 -0.299545\nv -0.28125 0.09375 -0.299581\nv -0.268491 0.09375 -0.304688\nv -0.273438 0.09375 -0.302221\nv -0.260169 0.09375 -0.304688\nv -0.257812 0.09375 -0.303142\nv -0.25 0.09375 -0.30108\nv -0.242188 0.0976905 -0.304688\nv -0.242188 0.09375 -0.301442\nv -0.233148 0.09375 -0.304688\nv -0.234375 0.0953766 -0.304688\nv -0.234375 0.09375 -0.302953\nv -0.304535 0.101562 -0.304688\nv -0.296875 0.101562 -0.300602\nv -0.289062 0.101562 -0.300171\nv -0.28125 0.101562 -0.299692\nv -0.26795 0.101562 -0.304688\nv -0.273438 0.101562 -0.301884\nv -0.259789 0.101562 -0.304688\nv -0.265625 0.106822 -0.304688\nv -0.257812 0.101562 -0.303856\nv -0.246592 0.101562 -0.304688\nv -0.25 0.101562 -0.30305\nv -0.304006 0.109375 -0.304688\nv -0.296875 0.109375 -0.301543\nv -0.289062 0.109375 -0.300875\nv -0.28125 0.109375 -0.299896\nv -0.273438 0.109375 -0.301138\nv -0.265625 0.109375 -0.303707\nv -0.257812 0.109375 -0.301055\nv -0.244125 0.109375 -0.304688\nv -0.25 0.109375 -0.301828\nv -0.304146 0.117188 -0.304688\nv -0.304688 0.120681 -0.304688\nv -0.296875 0.117188 -0.302011\nv -0.289062 0.117188 -0.301408\nv -0.28125 0.117188 -0.300104\nv -0.273438 0.117188 -0.301052\nv -0.265625 0.117188 -0.302774\nv -0.257812 0.117188 -0.300448\nv -0.244761 0.117188 -0.304688\nv -0.25 0.117188 -0.301687\nv -0.30508 0.125 -0.304688\nv -0.304688 0.125 -0.304246\nv -0.296875 0.125 -0.301381\nv -0.289062 0.125 -0.300683\nv -0.28125 0.125 -0.299709\nv -0.273438 0.125 -0.301001\nv -0.265625 0.125 -0.302546\nv -0.257812 0.125 -0.301445\nv -0.247473 0.125 -0.304688\nv -0.25 0.125 -0.303283\nv -0.305478 0.132812 -0.304688\nv -0.304688 0.132812 -0.303655\nv -0.296875 0.132812 -0.30078\nv -0.289062 0.132812 -0.299609\nv -0.28125 0.132812 -0.29791\nv -0.273438 0.132812 -0.298092\nv -0.265625 0.132812 -0.299754\nv -0.257812 0.132812 -0.300975\nv -0.248627 0.132812 -0.304688\nv -0.25 0.132812 -0.303929\nv -0.305413 0.140625 -0.304688\nv -0.304688 0.140625 -0.303556\nv -0.296875 0.140625 -0.300253\nv -0.289062 0.140625 -0.298334\nv -0.257812 0.140625 -0.297778\nv -0.245925 0.140625 -0.304688\nv -0.25 0.140625 -0.301407\nv -0.305332 0.148438 -0.304688\nv -0.304688 0.148438 -0.303532\nv -0.296875 0.148438 -0.299821\nv -0.289062 0.148438 -0.296983\nv -0.243225 0.148438 -0.304688\nv -0.25 0.148438 -0.298906\nv -0.242188 0.152489 -0.304688\nv -0.305391 0.15625 -0.304688\nv -0.304688 0.15625 -0.30331\nv -0.296875 0.15625 -0.298945\nv -0.25 0.15625 -0.296976\nv -0.241523 0.15625 -0.304688\nv -0.242188 0.15625 -0.303908\nv -0.305607 0.164062 -0.304688\nv -0.304688 0.164062 -0.302851\nv -0.296875 0.164062 -0.297948\nv -0.239562 0.164062 -0.304688\nv -0.242188 0.164062 -0.300835\nv -0.306205 0.171875 -0.304688\nv -0.304688 0.171875 -0.301724\nv -0.237035 0.171875 -0.304688\nv -0.306645 0.179688 -0.304688\nv -0.304688 0.179688 -0.300785\nv -0.234426 0.179688 -0.304688\nv -0.234375 0.179872 -0.304688\nv -0.306969 0.1875 -0.304688\nv -0.304688 0.1875 -0.300099\nv -0.232226 0.1875 -0.304688\nv -0.234375 0.1875 -0.296923\nv -0.307405 0.195312 -0.304688\nv -0.304688 0.195312 -0.298891\nv -0.230503 0.195312 -0.304688\nv -0.307674 0.203125 -0.304688\nv -0.304688 0.203125 -0.298218\nv -0.229261 0.203125 -0.304688\nv -0.30784 0.210938 -0.304688\nv -0.304688 0.210938 -0.297808\nv -0.228126 0.210938 -0.304688\nv -0.307996 0.21875 -0.304688\nv -0.304688 0.21875 -0.297536\nv -0.22683 0.21875 -0.304688\nv -0.226562 0.221156 -0.304688\nv -0.308114 0.226562 -0.304688\nv -0.304688 0.226562 -0.297774\nv -0.226058 0.226562 -0.304688\nv -0.226562 0.226562 -0.301491\nv -0.308112 0.234375 -0.304688\nv -0.304688 0.234375 -0.298339\nv -0.225797 0.234375 -0.304688\nv -0.226562 0.234375 -0.299701\nv -0.307939 0.242188 -0.304688\nv -0.304688 0.242188 -0.299095\nv -0.225733 0.242188 -0.304688\nv -0.226562 0.242188 -0.298973\nv -0.307502 0.25 -0.304688\nv -0.304688 0.25 -0.299968\nv -0.225886 0.25 -0.304688\nv -0.226562 0.25 -0.300634\nv -0.306875 0.257812 -0.304688\nv -0.304688 0.257812 -0.301074\nv -0.226017 0.257812 -0.304688\nv -0.226562 0.257812 -0.301863\nv -0.306336 0.265625 -0.304688\nv -0.304688 0.265625 -0.302231\nv -0.226099 0.265625 -0.304688\nv -0.226562 0.265625 -0.302467\nv -0.305921 0.273438 -0.304688\nv -0.304688 0.273438 -0.303013\nv -0.226244 0.273438 -0.304688\nv -0.226562 0.278539 -0.304688\nv -0.226562 0.273438 -0.303113\nv -0.305486 0.28125 -0.304688\nv -0.304688 0.28125 -0.303704\nv -0.226828 0.28125 -0.304688\nv -0.304878 0.289062 -0.304688\nv -0.304688 0.291902 -0.304688\nv -0.304688 0.289062 -0.30447\nv -0.227994 0.289062 -0.304688\nv -0.304348 0.296875 -0.304688\nv -0.229663 0.296875 -0.304688\nv -0.304044 0.304688 -0.304688\nv -0.231715 0.304688 -0.304688\nv -0.234375 0.311927 -0.304688\nv -0.303998 0.3125 -0.304688\nv -0.234625 0.3125 -0.304688\nv -0.304224 0.320312 -0.304688\nv -0.238053 0.320312 -0.304688\nv -0.242188 0.327893 -0.304688\nv -0.304671 0.328125 -0.304688\nv -0.304688 0.328494 -0.304688\nv -0.242288 0.328125 -0.304688\nv -0.305014 0.335938 -0.304688\nv -0.304688 0.335938 -0.304333\nv -0.245555 0.335938 -0.304688\nv -0.25 0.335938 -0.297361\nv -0.305473 0.34375 -0.304688\nv -0.304688 0.34375 -0.303824\nv -0.247404 0.34375 -0.304688\nv -0.25 0.34375 -0.300162\nv -0.306249 0.351562 -0.304688\nv -0.304688 0.351562 -0.302966\nv -0.247405 0.351562 -0.304688\nv -0.25 0.351562 -0.30058\nv -0.306945 0.359375 -0.304688\nv -0.304688 0.359375 -0.302154\nv -0.247101 0.359375 -0.304688\nv -0.25 0.359375 -0.300155\nv -0.307719 0.367188 -0.304688\nv -0.304688 0.367188 -0.30124\nv -0.246618 0.367188 -0.304688\nv -0.25 0.367188 -0.299544\nv -0.308437 0.375 -0.304688\nv -0.304688 0.375 -0.300305\nv -0.24593 0.375 -0.304688\nv -0.25 0.375 -0.298436\nv -0.309135 0.382812 -0.304688\nv -0.304688 0.382812 -0.29931\nv -0.245535 0.382812 -0.304688\nv -0.25 0.382812 -0.297029\nv -0.309736 0.390625 -0.304688\nv -0.304688 0.390625 -0.298434\nv -0.245444 0.390625 -0.304688\nv -0.310097 0.398438 -0.304688\nv -0.304688 0.398438 -0.298201\nv -0.245463 0.398438 -0.304688\nv -0.310177 0.40625 -0.304688\nv -0.304688 0.40625 -0.298887\nv -0.245704 0.40625 -0.304688\nv -0.310072 0.414062 -0.304688\nv -0.304688 0.414062 -0.29975\nv -0.245951 0.414062 -0.304688\nv -0.309842 0.421875 -0.304688\nv -0.304688 0.421875 -0.300978\nv -0.246857 0.421875 -0.304688\nv -0.25 0.421875 -0.298409\nv -0.309613 0.429688 -0.304688\nv -0.304688 0.429688 -0.301871\nv -0.296875 0.429688 -0.297715\nv -0.248363 0.429688 -0.304688\nv -0.25 0.434742 -0.304688\nv -0.25 0.429688 -0.302013\nv -0.309377 0.4375 -0.304688\nv -0.304688 0.4375 -0.302194\nv -0.296875 0.4375 -0.298848\nv -0.289062 0.4375 -0.297885\nv -0.251252 0.4375 -0.304688\nv -0.3096 0.445312 -0.304688\nv -0.304688 0.445312 -0.301944\nv -0.296875 0.445312 -0.298986\nv -0.289062 0.445312 -0.298587\nv -0.254975 0.445312 -0.304688\nv -0.257812 0.445312 -0.301392\nv -0.309763 0.453125 -0.304688\nv -0.304688 0.453125 -0.30173\nv -0.296875 0.453125 -0.299143\nv -0.289062 0.453125 -0.298814\nv -0.257362 0.453125 -0.304688\nv -0.257812 0.455579 -0.304688\nv -0.257812 0.453125 -0.304098\nv -0.309853 0.460938 -0.304688\nv -0.304688 0.460938 -0.301528\nv -0.296875 0.460938 -0.299074\nv -0.289062 0.460938 -0.298816\nv -0.258799 0.460938 -0.304688\nv -0.310076 0.46875 -0.304688\nv -0.304688 0.46875 -0.301328\nv -0.296875 0.46875 -0.298818\nv -0.289062 0.46875 -0.298442\nv -0.259739 0.46875 -0.304688\nv -0.265625 0.46875 -0.298389\nv -0.310223 0.476562 -0.304688\nv -0.304688 0.476562 -0.301303\nv -0.296875 0.476562 -0.298664\nv -0.289062 0.476562 -0.298119\nv -0.260291 0.476562 -0.304688\nv -0.265625 0.476562 -0.299338\nv -0.310396 0.484375 -0.304688\nv -0.304688 0.484375 -0.301315\nv -0.296875 0.484375 -0.298805\nv -0.289062 0.484375 -0.29842\nv -0.260937 0.484375 -0.304688\nv -0.265625 0.484375 -0.300383\nv -0.310706 0.492188 -0.304688\nv -0.304688 0.492188 -0.301326\nv -0.296875 0.492188 -0.298944\nv -0.289062 0.492188 -0.298685\nv -0.28125 0.492188 -0.296989\nv -0.262755 0.492188 -0.304688\nv -0.265625 0.492188 -0.302104\nv -0.31147 0.5 -0.304688\nv -0.304688 0.5 -0.300983\nv -0.296875 0.5 -0.298867\nv -0.289062 0.5 -0.298637\nv -0.28125 0.5 -0.2974\nv -0.273438 0.5 -0.297729\nv -0.264158 0.5 -0.304688\nv -0.265625 0.5 -0.303332\nv -0.312351 0.507812 -0.304688\nv -0.3125 0.5095 -0.304688\nv -0.304688 0.507812 -0.300647\nv -0.296875 0.507812 -0.29867\nv -0.289062 0.507812 -0.298375\nv -0.28125 0.507812 -0.297207\nv -0.273438 0.507812 -0.297718\nv -0.264691 0.507812 -0.304688\nv -0.265625 0.507812 -0.303733\nv -0.312947 0.515625 -0.304688\nv -0.3125 0.515625 -0.304374\nv -0.304688 0.515625 -0.300376\nv -0.296875 0.515625 -0.298445\nv -0.289062 0.515625 -0.297967\nv -0.273438 0.515625 -0.297687\nv -0.265079 0.515625 -0.304688\nv -0.265625 0.515625 -0.304134\nv -0.313319 0.523438 -0.304688\nv -0.3125 0.523438 -0.304154\nv -0.304688 0.523438 -0.30012\nv -0.296875 0.523438 -0.298219\nv -0.289062 0.523438 -0.297734\nv -0.273438 0.523438 -0.297285\nv -0.265377 0.523438 -0.304688\nv -0.265625 0.529885 -0.304688\nv -0.265625 0.523438 -0.304414\nv -0.313713 0.53125 -0.304688\nv -0.3125 0.53125 -0.303901\nv -0.304688 0.53125 -0.299587\nv -0.296875 0.53125 -0.297935\nv -0.289062 0.53125 -0.297353\nv -0.265679 0.53125 -0.304688\nv -0.314296 0.539062 -0.304688\nv -0.3125 0.539062 -0.303476\nv -0.304688 0.539062 -0.298767\nv -0.296875 0.539062 -0.297505\nv -0.289062 0.539062 -0.296924\nv -0.265929 0.539062 -0.304688\nv -0.315053 0.546875 -0.304688\nv -0.3125 0.546875 -0.302922\nv -0.304688 0.546875 -0.298024\nv -0.296875 0.546875 -0.297008\nv -0.266379 0.546875 -0.304688\nv -0.315752 0.554688 -0.304688\nv -0.3125 0.554688 -0.302467\nv -0.304688 0.554688 -0.298367\nv -0.296875 0.554688 -0.297047\nv -0.267055 0.554688 -0.304688\nv -0.273438 0.554688 -0.297095\nv -0.316717 0.5625 -0.304688\nv -0.3125 0.5625 -0.301949\nv -0.304688 0.5625 -0.298651\nv -0.267566 0.5625 -0.304688\nv -0.273438 0.5625 -0.297624\nv -0.3178 0.570312 -0.304688\nv -0.3125 0.570312 -0.301282\nv -0.304688 0.570312 -0.298346\nv -0.268165 0.570312 -0.304688\nv -0.273438 0.570312 -0.298297\nv -0.319271 0.578125 -0.304688\nv -0.320312 0.584389 -0.304688\nv -0.3125 0.578125 -0.300574\nv -0.304688 0.578125 -0.297461\nv -0.268763 0.578125 -0.304688\nv -0.273438 0.578125 -0.299673\nv -0.320516 0.585938 -0.304688\nv -0.320312 0.585938 -0.304521\nv -0.3125 0.585938 -0.299902\nv -0.26935 0.585938 -0.304688\nv -0.273438 0.585938 -0.300735\nv -0.321416 0.59375 -0.304688\nv -0.320312 0.59375 -0.303821\nv -0.3125 0.59375 -0.299289\nv -0.270295 0.59375 -0.304688\nv -0.273438 0.59375 -0.301512\nv -0.322482 0.601562 -0.304688\nv -0.320312 0.601562 -0.302724\nv -0.3125 0.601562 -0.298491\nv -0.271457 0.601562 -0.304688\nv -0.273438 0.609013 -0.304688\nv -0.273438 0.601562 -0.302429\nv -0.323854 0.609375 -0.304688\nv -0.320312 0.609375 -0.300994\nv -0.273525 0.609375 -0.304688\nv -0.273438 0.609646 -0.304688\nv -0.326118 0.617188 -0.304688\nv -0.320312 0.617188 -0.297917\nv -0.271041 0.617188 -0.304688\nv -0.273438 0.617188 -0.300697\nv -0.327987 0.625 -0.304688\nv -0.328125 0.625743 -0.304688\nv -0.267715 0.625 -0.304688\nv -0.265625 0.630845 -0.304688\nv -0.329262 0.632812 -0.304688\nv -0.328125 0.632812 -0.302365\nv -0.265025 0.632812 -0.304688\nv -0.265625 0.632812 -0.302826\nv -0.330216 0.640625 -0.304688\nv -0.328125 0.640625 -0.300245\nv -0.261817 0.640625 -0.304688\nv -0.331106 0.648438 -0.304688\nv -0.328125 0.648438 -0.298512\nv -0.26022 0.648438 -0.304688\nv -0.332159 0.65625 -0.304688\nv -0.328125 0.65625 -0.296884\nv -0.260631 0.65625 -0.304688\nv -0.332954 0.664062 -0.304688\nv -0.261026 0.664062 -0.304688\nv -0.333389 0.671875 -0.304688\nv -0.261239 0.671875 -0.304688\nv -0.333638 0.679688 -0.304688\nv -0.261204 0.679688 -0.304688\nv -0.333793 0.6875 -0.304688\nv -0.261443 0.6875 -0.304688\nv -0.333987 0.695312 -0.304688\nv -0.26168 0.695312 -0.304688\nv -0.334087 0.703125 -0.304688\nv -0.262112 0.703125 -0.304688\nv -0.333768 0.710938 -0.304688\nv -0.263146 0.710938 -0.304688\nv -0.333273 0.71875 -0.304688\nv -0.264717 0.71875 -0.304688\nv -0.265625 0.722445 -0.304688\nv -0.265625 0.71875 -0.299275\nv -0.331957 0.726562 -0.304688\nv -0.266594 0.726562 -0.304688\nv -0.330882 0.734375 -0.304688\nv -0.328125 0.734375 -0.298548\nv -0.269262 0.734375 -0.304688\nv -0.330004 0.742188 -0.304688\nv -0.328125 0.742188 -0.300672\nv -0.272498 0.742188 -0.304688\nv -0.273438 0.744186 -0.304688\nv -0.273438 0.742188 -0.301141\nv -0.32914 0.75 -0.304688\nv -0.328125 0.75 -0.30285\nv -0.276112 0.75 -0.304688\nv -0.28125 0.757229 -0.304688\nv -0.328464 0.757812 -0.304688\nv -0.328125 0.760157 -0.304688\nv -0.328125 0.757812 -0.304206\nv -0.281849 0.757812 -0.304688\nv -0.289062 0.763503 -0.304688\nv -0.326946 0.765625 -0.304688\nv -0.320312 0.765625 -0.298859\nv -0.291245 0.765625 -0.304688\nv -0.296875 0.77107 -0.304688\nv -0.324238 0.773438 -0.304688\nv -0.320312 0.773438 -0.301798\nv -0.299029 0.773438 -0.304688\nv -0.320681 0.78125 -0.304688\nv -0.320312 0.781974 -0.304688\nv -0.320312 0.78125 -0.30433\nv -0.3125 0.78125 -0.29777\nv -0.304442 0.78125 -0.304688\nv -0.304688 0.78161 -0.304688\nv -0.304688 0.78125 -0.30424\nv -0.313527 0.789062 -0.304688\nv -0.31188 0.789062 -0.304688\nv -0.3125 0.790219 -0.304688\nv -0.3125 0.789062 -0.303629\nv -0.3125 -0.703519 -0.296875\nv -0.304688 -0.704665 -0.296875\nv -0.296875 -0.706955 -0.296875\nv -0.289062 -0.707175 -0.296875\nv -0.28125 -0.70991 -0.296875\nv -0.273438 -0.710048 -0.296875\nv -0.328125 -0.696959 -0.296875\nv -0.317878 -0.703125 -0.296875\nv -0.320312 -0.702898 -0.296875\nv -0.3125 -0.703125 -0.296762\nv -0.304688 -0.703125 -0.296408\nv -0.296875 -0.703125 -0.295856\nv -0.289062 -0.703125 -0.295751\nv -0.28125 -0.703125 -0.295138\nv -0.267921 -0.703125 -0.296875\nv -0.273438 -0.703125 -0.295719\nv -0.265625 -0.699783 -0.296875\nv 0.429688 -0.699533 -0.296875\nv -0.328384 -0.695312 -0.296875\nv -0.328125 -0.695312 -0.296738\nv -0.320312 -0.695312 -0.295063\nv -0.3125 -0.695312 -0.294773\nv -0.304688 -0.695312 -0.294345\nv -0.296875 -0.695312 -0.294081\nv -0.289062 -0.695312 -0.293758\nv -0.28125 -0.695312 -0.293696\nv -0.273438 -0.695312 -0.294462\nv -0.262644 -0.695312 -0.296875\nv -0.265625 -0.695312 -0.296224\nv 0.427993 -0.695312 -0.296875\nv 0.435317 -0.695312 -0.296875\nv 0.429688 -0.693195 -0.296875\nv 0.429688 -0.695312 -0.296663\nv -0.329378 -0.6875 -0.296875\nv -0.328125 -0.6875 -0.296034\nv -0.320312 -0.6875 -0.294305\nv -0.3125 -0.6875 -0.29421\nv -0.304688 -0.6875 -0.294143\nv -0.296875 -0.6875 -0.293864\nv -0.289062 -0.6875 -0.293619\nv -0.28125 -0.6875 -0.293467\nv -0.273438 -0.6875 -0.293933\nv -0.259838 -0.6875 -0.296875\nv -0.265625 -0.6875 -0.295662\nv -0.257812 -0.681526 -0.296875\nv -0.329932 -0.679688 -0.296875\nv -0.328125 -0.679688 -0.295421\nv -0.320312 -0.679688 -0.29362\nv -0.3125 -0.679688 -0.293634\nv -0.304688 -0.679688 -0.29408\nv -0.296875 -0.679688 -0.293853\nv -0.289062 -0.679688 -0.293576\nv -0.28125 -0.679688 -0.293186\nv -0.273438 -0.679688 -0.293463\nv -0.265625 -0.679688 -0.295224\nv -0.257391 -0.679688 -0.296875\nv -0.257812 -0.679688 -0.296741\nv -0.330027 -0.671875 -0.296875\nv -0.328125 -0.671875 -0.295119\nv -0.320312 -0.671875 -0.293204\nv -0.3125 -0.671875 -0.293123\nv -0.304688 -0.671875 -0.293883\nv -0.296875 -0.671875 -0.29404\nv -0.289062 -0.671875 -0.293625\nv -0.28125 -0.671875 -0.292931\nv -0.273438 -0.671875 -0.293071\nv -0.265625 -0.671875 -0.294798\nv -0.256052 -0.671875 -0.296875\nv -0.257812 -0.671875 -0.296324\nv -0.329355 -0.664062 -0.296875\nv -0.328125 -0.664062 -0.295542\nv -0.320312 -0.664062 -0.292665\nv -0.3125 -0.664062 -0.292476\nv -0.304688 -0.664062 -0.293559\nv -0.296875 -0.664062 -0.294113\nv -0.289062 -0.664062 -0.293697\nv -0.28125 -0.664062 -0.292832\nv -0.273438 -0.664062 -0.292988\nv -0.265625 -0.664062 -0.294416\nv -0.255406 -0.664062 -0.296875\nv -0.257812 -0.664062 -0.296132\nv -0.328572 -0.65625 -0.296875\nv -0.328125 -0.650835 -0.296875\nv -0.328125 -0.65625 -0.296287\nv -0.320312 -0.65625 -0.292154\nv -0.3125 -0.65625 -0.291808\nv -0.304688 -0.65625 -0.293182\nv -0.296875 -0.65625 -0.293872\nv -0.289062 -0.65625 -0.29372\nv -0.28125 -0.65625 -0.292975\nv -0.273438 -0.65625 -0.292916\nv -0.265625 -0.65625 -0.294293\nv -0.255657 -0.65625 -0.296875\nv -0.257812 -0.65625 -0.296251\nv -0.327781 -0.648438 -0.296875\nv -0.320312 -0.648438 -0.29206\nv -0.3125 -0.648438 -0.291257\nv -0.304688 -0.648438 -0.292814\nv -0.296875 -0.648438 -0.293519\nv -0.289062 -0.648438 -0.293656\nv -0.28125 -0.648438 -0.293241\nv -0.273438 -0.648438 -0.293007\nv -0.265625 -0.648438 -0.294657\nv -0.255979 -0.648438 -0.296875\nv -0.257812 -0.648438 -0.296386\nv -0.326495 -0.640625 -0.296875\nv -0.320312 -0.640625 -0.292137\nv -0.3125 -0.640625 -0.291055\nv -0.304688 -0.640625 -0.292371\nv -0.296875 -0.640625 -0.293136\nv -0.289062 -0.640625 -0.293563\nv -0.28125 -0.640625 -0.293424\nv -0.273438 -0.640625 -0.293381\nv -0.265625 -0.640625 -0.295191\nv -0.257418 -0.640625 -0.296875\nv -0.257812 -0.639892 -0.296875\nv -0.257812 -0.640625 -0.296788\nv -0.324988 -0.632812 -0.296875\nv -0.320312 -0.632812 -0.292855\nv -0.3125 -0.632812 -0.291025\nv -0.304688 -0.632812 -0.292117\nv -0.296875 -0.632812 -0.29308\nv -0.289062 -0.632812 -0.293688\nv -0.28125 -0.632812 -0.293771\nv -0.273438 -0.632812 -0.294539\nv -0.261943 -0.632812 -0.296875\nv -0.265625 -0.62771 -0.296875\nv -0.265625 -0.632812 -0.296103\nv -0.323575 -0.625 -0.296875\nv -0.320312 -0.625 -0.293873\nv -0.3125 -0.625 -0.290991\nv -0.304688 -0.625 -0.291777\nv -0.296875 -0.625 -0.292849\nv -0.289062 -0.625 -0.293758\nv -0.28125 -0.625 -0.294632\nv -0.267701 -0.625 -0.296875\nv -0.273438 -0.625 -0.29569\nv -0.323298 -0.617188 -0.296875\nv -0.320312 -0.617188 -0.29396\nv -0.3125 -0.617188 -0.290656\nv -0.304688 -0.617188 -0.291288\nv -0.296875 -0.617188 -0.292799\nv -0.289062 -0.617188 -0.294729\nv -0.28125 -0.617188 -0.295565\nv -0.272601 -0.617188 -0.296875\nv -0.273438 -0.615417 -0.296875\nv -0.273438 -0.617188 -0.296677\nv -0.323105 -0.609375 -0.296875\nv -0.320312 -0.609375 -0.294129\nv -0.3125 -0.609375 -0.290519\nv -0.304688 -0.609375 -0.290944\nv -0.296875 -0.609375 -0.293667\nv -0.289062 -0.609375 -0.295596\nv -0.27805 -0.609375 -0.296875\nv -0.28125 -0.603301 -0.296875\nv -0.28125 -0.609375 -0.296403\nv -0.322606 -0.601562 -0.296875\nv -0.320312 -0.601562 -0.294553\nv -0.3125 -0.601562 -0.290397\nv -0.304688 -0.601562 -0.291277\nv -0.296875 -0.601562 -0.29423\nv -0.282461 -0.601562 -0.296875\nv -0.289062 -0.601562 -0.296162\nv -0.321802 -0.59375 -0.296875\nv -0.320312 -0.59375 -0.295349\nv -0.3125 -0.59375 -0.29078\nv -0.304688 -0.59375 -0.291561\nv -0.296875 -0.59375 -0.294306\nv -0.283868 -0.59375 -0.296875\nv -0.289062 -0.59375 -0.296285\nv -0.320829 -0.585938 -0.296875\nv -0.320312 -0.582687 -0.296875\nv -0.320312 -0.585938 -0.296346\nv -0.3125 -0.585938 -0.291989\nv -0.304688 -0.585938 -0.292371\nv -0.296875 -0.585938 -0.294681\nv -0.285466 -0.585938 -0.296875\nv -0.289062 -0.585938 -0.29645\nv -0.318992 -0.578125 -0.296875\nv -0.3125 -0.578125 -0.293659\nv -0.304688 -0.578125 -0.293298\nv -0.296875 -0.578125 -0.295202\nv -0.288537 -0.578125 -0.296875\nv -0.289062 -0.57715 -0.296875\nv -0.289062 -0.578125 -0.296818\nv -0.315214 -0.570312 -0.296875\nv -0.3125 -0.566314 -0.296875\nv -0.3125 -0.570312 -0.295753\nv -0.304688 -0.570312 -0.294512\nv -0.291611 -0.570312 -0.296875\nv -0.296875 -0.570312 -0.295872\nv -0.30842 -0.5625 -0.296875\nv -0.304688 -0.55908 -0.296875\nv -0.304688 -0.5625 -0.296084\nv -0.294755 -0.5625 -0.296875\nv -0.296875 -0.558114 -0.296875\nv -0.296875 -0.5625 -0.296481\nv -0.289062 -0.546979 -0.296875\nv -0.28125 -0.550663 -0.296875\nv -0.273438 -0.550867 -0.296875\nv -0.265625 -0.550149 -0.296875\nv -0.257812 -0.550403 -0.296875\nv -0.25 -0.549615 -0.296875\nv -0.0390625 -0.546915 -0.296875\nv -0.03125 -0.54753 -0.296875\nv -0.0234375 -0.548365 -0.296875\nv -0.015625 -0.549037 -0.296875\nv -0.0078125 -0.549713 -0.296875\nv 0 -0.549967 -0.296875\nv 0.0078125 -0.54968 -0.296875\nv 0.015625 -0.549612 -0.296875\nv 0.0234375 -0.549532 -0.296875\nv 0.03125 -0.549368 -0.296875\nv 0.0390625 -0.54904 -0.296875\nv 0.046875 -0.548649 -0.296875\nv 0.0546875 -0.548334 -0.296875\nv 0.0625 -0.547741 -0.296875\nv 0.0703125 -0.547013 -0.296875\nv -0.289199 -0.546875 -0.296875\nv -0.289062 -0.546875 -0.29684\nv -0.28125 -0.546875 -0.294571\nv -0.273438 -0.546875 -0.293883\nv -0.265625 -0.546875 -0.294229\nv -0.257812 -0.546875 -0.294603\nv -0.244841 -0.546875 -0.296875\nv -0.25 -0.546875 -0.295088\nv -0.242188 -0.544444 -0.296875\nv -0.0625 -0.54111 -0.296875\nv -0.0546875 -0.543443 -0.296875\nv -0.0393772 -0.546875 -0.296875\nv -0.046875 -0.545422 -0.296875\nv -0.0390625 -0.546875 -0.296769\nv -0.03125 -0.546875 -0.295095\nv -0.0234375 -0.546875 -0.292592\nv -0.015625 -0.546875 -0.290281\nv 0.0546875 -0.546875 -0.290003\nv 0.0625 -0.546875 -0.293281\nv 0.0715177 -0.546875 -0.296875\nv 0.0703125 -0.546875 -0.296356\nv 0.078125 -0.545888 -0.296875\nv 0.0859375 -0.545045 -0.296875\nv 0.09375 -0.544308 -0.296875\nv 0.101562 -0.543563 -0.296875\nv 0.109375 -0.542851 -0.296875\nv 0.117188 -0.542271 -0.296875\nv 0.125 -0.541842 -0.296875\nv 0.132812 -0.541407 -0.296875\nv 0.140625 -0.540614 -0.296875\nv 0.148438 -0.539724 -0.296875\nv -0.291944 -0.539062 -0.296875\nv -0.296875 -0.531541 -0.296875\nv -0.289062 -0.539062 -0.295908\nv -0.28125 -0.539062 -0.293241\nv -0.273438 -0.539062 -0.292562\nv -0.265625 -0.539062 -0.292349\nv -0.257812 -0.539062 -0.292622\nv -0.25 -0.539062 -0.292418\nv -0.238379 -0.539062 -0.296875\nv -0.242188 -0.539062 -0.294732\nv -0.0680099 -0.539062 -0.296875\nv -0.0703125 -0.537138 -0.296875\nv -0.0625 -0.539062 -0.295136\nv -0.0546875 -0.539062 -0.292647\nv -0.046875 -0.539062 -0.290428\nv 0.117188 -0.539062 -0.290948\nv 0.125 -0.539062 -0.292892\nv 0.132812 -0.539062 -0.294203\nv 0.140625 -0.539062 -0.295706\nv 0.153168 -0.539062 -0.296875\nv 0.148438 -0.539062 -0.296459\nv 0.15625 -0.537878 -0.296875\nv 0.164062 -0.531551 -0.296875\nv -0.296992 -0.53125 -0.296875\nv -0.296875 -0.53125 -0.296809\nv -0.289062 -0.53125 -0.294606\nv -0.28125 -0.53125 -0.292691\nv -0.273438 -0.53125 -0.292097\nv -0.265625 -0.53125 -0.291561\nv -0.257812 -0.53125 -0.291724\nv -0.25 -0.53125 -0.291337\nv -0.234628 -0.53125 -0.296875\nv -0.242188 -0.53125 -0.292982\nv -0.234375 -0.530542 -0.296875\nv -0.0748783 -0.53125 -0.296875\nv -0.0703125 -0.53125 -0.295346\nv -0.0625 -0.53125 -0.293334\nv -0.0546875 -0.53125 -0.291324\nv -0.046875 -0.53125 -0.289629\nv 0.140625 -0.53125 -0.292644\nv 0.148438 -0.53125 -0.293726\nv 0.15625 -0.53125 -0.295357\nv 0.164376 -0.53125 -0.296875\nv 0.164062 -0.53125 -0.296822\nv 0.171875 -0.525995 -0.296875\nv -0.298674 -0.523438 -0.296875\nv -0.296875 -0.523438 -0.295891\nv -0.289062 -0.523438 -0.293638\nv -0.28125 -0.523438 -0.292025\nv -0.273438 -0.523438 -0.291686\nv -0.265625 -0.523438 -0.291749\nv -0.257812 -0.523438 -0.292078\nv -0.25 -0.523438 -0.291947\nv -0.242188 -0.523438 -0.293528\nv -0.231153 -0.523438 -0.296875\nv -0.234375 -0.517653 -0.296875\nv -0.234375 -0.523438 -0.295798\nv -0.0719225 -0.523438 -0.296875\nv -0.0703125 -0.523438 -0.296373\nv -0.0625 -0.523438 -0.293523\nv -0.0546875 -0.523438 -0.290838\nv 0.140625 -0.523438 -0.289211\nv 0.148438 -0.523438 -0.291278\nv 0.15625 -0.523438 -0.293144\nv 0.164062 -0.523438 -0.294481\nv 0.175282 -0.523438 -0.296875\nv 0.171875 -0.523438 -0.296231\nv 0.179688 -0.518887 -0.296875\nv -0.302913 -0.515625 -0.296875\nv -0.304688 -0.512836 -0.296875\nv -0.296875 -0.515625 -0.293731\nv -0.289062 -0.515625 -0.292328\nv -0.28125 -0.515625 -0.290762\nv -0.273438 -0.515625 -0.290599\nv -0.265625 -0.515625 -0.291328\nv -0.257812 -0.515625 -0.292449\nv -0.25 -0.515625 -0.2927\nv -0.235415 -0.515625 -0.296875\nv -0.242188 -0.515625 -0.29442\nv -0.0710635 -0.515625 -0.296875\nv -0.0703125 -0.514504 -0.296875\nv -0.0703125 -0.515625 -0.296617\nv -0.0625 -0.515625 -0.294043\nv -0.0546875 -0.515625 -0.291665\nv -0.046875 -0.515625 -0.28918\nv 0.148438 -0.515625 -0.289708\nv 0.15625 -0.515625 -0.291632\nv 0.164062 -0.515625 -0.293278\nv 0.171875 -0.515625 -0.29492\nv 0.182997 -0.515625 -0.296875\nv 0.179688 -0.515625 -0.296281\nv 0.1875 -0.508475 -0.296875\nv -0.307851 -0.507812 -0.296875\nv -0.304688 -0.502678 -0.296875\nv -0.304688 -0.507812 -0.294538\nv -0.296875 -0.500978 -0.296875\nv -0.296875 -0.507812 -0.292385\nv -0.289062 -0.500464 -0.296875\nv -0.289062 -0.507812 -0.291782\nv -0.28125 -0.507812 -0.290685\nv -0.273438 -0.507812 -0.290603\nv -0.265625 -0.500964 -0.296875\nv -0.265625 -0.507812 -0.291656\nv -0.257812 -0.50233 -0.296875\nv -0.257812 -0.507812 -0.292766\nv -0.25 -0.503971 -0.296875\nv -0.25 -0.507812 -0.293907\nv -0.241826 -0.507812 -0.296875\nv -0.242188 -0.507619 -0.296875\nv -0.242188 -0.507812 -0.296701\nv -0.0656115 -0.507812 -0.296875\nv -0.0625 -0.506765 -0.296875\nv -0.0625 -0.507812 -0.295816\nv -0.0546875 -0.503469 -0.296875\nv -0.0546875 -0.507812 -0.29306\nv -0.046875 -0.500188 -0.296875\nv -0.046875 -0.507812 -0.290884\nv 0.15625 -0.507812 -0.290751\nv 0.164062 -0.507812 -0.292382\nv 0.171875 -0.502309 -0.296875\nv 0.171875 -0.507812 -0.294348\nv 0.179688 -0.505378 -0.296875\nv 0.179688 -0.507812 -0.295634\nv 0.187889 -0.507812 -0.296875\nv 0.1875 -0.507674 -0.296875\nv 0.1875 -0.507812 -0.296804\nv -0.287779 -0.5 -0.296875\nv -0.28125 -0.496926 -0.296875\nv -0.28125 -0.5 -0.295498\nv -0.268865 -0.5 -0.296875\nv -0.273438 -0.498146 -0.296875\nv -0.273438 -0.5 -0.295813\nv -0.0463361 -0.5 -0.296875\nv -0.0390625 -0.497501 -0.296875\nv -0.0390625 -0.5 -0.29484\nv -0.03125 -0.496004 -0.296875\nv -0.03125 -0.5 -0.292881\nv -0.0234375 -0.494902 -0.296875\nv -0.0234375 -0.5 -0.29085\nv -0.015625 -0.492954 -0.296875\nv 0.148438 -0.5 -0.290793\nv 0.15625 -0.5 -0.293451\nv 0.168248 -0.5 -0.296875\nv 0.164062 -0.497276 -0.296875\nv 0.164062 -0.5 -0.295761\nv -0.0123217 -0.492188 -0.296875\nv -0.0078125 -0.491076 -0.296875\nv -0.0078125 -0.492188 -0.295557\nv 0 -0.49009 -0.296875\nv 0 -0.492188 -0.294506\nv 0.0078125 -0.489815 -0.296875\nv 0.0078125 -0.492188 -0.293785\nv 0.015625 -0.489691 -0.296875\nv 0.015625 -0.492188 -0.292871\nv 0.0234375 -0.488109 -0.296875\nv 0.0234375 -0.492188 -0.290162\nv 0.03125 -0.486223 -0.296875\nv 0.148438 -0.492188 -0.29234\nv 0.159358 -0.492188 -0.296875\nv 0.15625 -0.487721 -0.296875\nv 0.15625 -0.492188 -0.295693\nv -0.3125 -0.479271 -0.296875\nv 0.0388047 -0.484375 -0.296875\nv 0.0390625 -0.484314 -0.296875\nv 0.0390625 -0.484375 -0.296766\nv 0.046875 -0.482238 -0.296875\nv 0.046875 -0.484375 -0.291304\nv 0.0546875 -0.480493 -0.296875\nv 0.0625 -0.478741 -0.296875\nv 0.0703125 -0.477191 -0.296875\nv 0.132812 -0.477421 -0.296875\nv 0.132812 -0.484375 -0.290621\nv 0.140625 -0.480503 -0.296875\nv 0.140625 -0.484375 -0.293507\nv 0.151597 -0.484375 -0.296875\nv 0.148438 -0.482928 -0.296875\nv 0.148438 -0.484375 -0.295853\nv -0.31316 -0.476562 -0.296875\nv -0.310657 -0.476562 -0.296875\nv -0.3125 -0.476562 -0.296413\nv 0.0730279 -0.476562 -0.296875\nv 0.078125 -0.475414 -0.296875\nv 0.078125 -0.476562 -0.293953\nv 0.0859375 -0.474107 -0.296875\nv 0.0859375 -0.476562 -0.290852\nv 0.09375 -0.473105 -0.296875\nv 0.09375 -0.476562 -0.28969\nv 0.101562 -0.472394 -0.296875\nv 0.101562 -0.476562 -0.289788\nv 0.109375 -0.472257 -0.296875\nv 0.109375 -0.476562 -0.290129\nv 0.117188 -0.472806 -0.296875\nv 0.117188 -0.476562 -0.29153\nv 0.130746 -0.476562 -0.296875\nv 0.125 -0.474306 -0.296875\nv 0.125 -0.476562 -0.294253\nv -0.313053 -0.46875 -0.296875\nv -0.310455 -0.46875 -0.296875\nv -0.3125 -0.46875 -0.296512\nv -0.312872 -0.460938 -0.296875\nv -0.310435 -0.460938 -0.296875\nv -0.3125 -0.460938 -0.296653\nv -0.312574 -0.453125 -0.296875\nv -0.311633 -0.453125 -0.296875\nv -0.3125 -0.452258 -0.296875\nv -0.3125 -0.453125 -0.296833\nv -0.28125 -0.370315 -0.296875\nv -0.282284 -0.367188 -0.296875\nv -0.280307 -0.367188 -0.296875\nv -0.28125 -0.367188 -0.296794\nv -0.284731 -0.359375 -0.296875\nv -0.276586 -0.359375 -0.296875\nv -0.28125 -0.359375 -0.296512\nv -0.273438 -0.353604 -0.296875\nv 0.421875 -0.352744 -0.296875\nv 0.429688 -0.35923 -0.296875\nv 0.4375 -0.352178 -0.296875\nv -0.285862 -0.351562 -0.296875\nv -0.28125 -0.351562 -0.296267\nv -0.272504 -0.351562 -0.296875\nv -0.273438 -0.351562 -0.296793\nv 0.421153 -0.351562 -0.296875\nv 0.421875 -0.351562 -0.296793\nv 0.429688 -0.351562 -0.296474\nv 0.437586 -0.351562 -0.296875\nv 0.4375 -0.351562 -0.296865\nv -0.284884 -0.34375 -0.296875\nv -0.28125 -0.34375 -0.296262\nv -0.269349 -0.34375 -0.296875\nv -0.273438 -0.34375 -0.296549\nv 0.417045 -0.34375 -0.296875\nv 0.421875 -0.34375 -0.296241\nv 0.429688 -0.34375 -0.296383\nv 0.438496 -0.34375 -0.296875\nv 0.4375 -0.34375 -0.296752\nv -0.283134 -0.335938 -0.296875\nv -0.28125 -0.335938 -0.296531\nv -0.267027 -0.335938 -0.296875\nv -0.273438 -0.335938 -0.296503\nv 0.415698 -0.335938 -0.296875\nv 0.421875 -0.335938 -0.296217\nv 0.429688 -0.335938 -0.296339\nv 0.43934 -0.335938 -0.296875\nv 0.4375 -0.335938 -0.296646\nv -0.281376 -0.328125 -0.296875\nv -0.28125 -0.327234 -0.296875\nv -0.28125 -0.328125 -0.296851\nv -0.269221 -0.328125 -0.296875\nv -0.273438 -0.328125 -0.296678\nv 0.414426 -0.328125 -0.296875\nv 0.414062 -0.326737 -0.296875\nv 0.421875 -0.328125 -0.296214\nv 0.429688 -0.328125 -0.296346\nv 0.43943 -0.328125 -0.296875\nv 0.4375 -0.328125 -0.296618\nv -0.276277 -0.320312 -0.296875\nv -0.266316 -0.320312 -0.296875\nv -0.273438 -0.312828 -0.296875\nv -0.273438 -0.320312 -0.296767\nv -0.265625 -0.318848 -0.296875\nv 0.413309 -0.320312 -0.296875\nv 0.414062 -0.320312 -0.296734\nv 0.421875 -0.320312 -0.296225\nv 0.429688 -0.320312 -0.296394\nv 0.438112 -0.320312 -0.296875\nv 0.4375 -0.317616 -0.296875\nv 0.4375 -0.320312 -0.29679\nv -0.272699 -0.3125 -0.296875\nv -0.264926 -0.3125 -0.296875\nv -0.265625 -0.3125 -0.296834\nv 0.412963 -0.3125 -0.296875\nv 0.414062 -0.3125 -0.29668\nv 0.421875 -0.3125 -0.296438\nv 0.433935 -0.3125 -0.296875\nv 0.429688 -0.307644 -0.296875\nv 0.429688 -0.3125 -0.296677\nv -0.269495 -0.304688 -0.296875\nv -0.264147 -0.304688 -0.296875\nv -0.265625 -0.304688 -0.296781\nv 0.413343 -0.304688 -0.296875\nv 0.414062 -0.299828 -0.296875\nv 0.414062 -0.304688 -0.296757\nv 0.425551 -0.304688 -0.296875\nv 0.421875 -0.301778 -0.296875\nv 0.421875 -0.304688 -0.296764\nv -0.267633 -0.296875 -0.296875\nv -0.264486 -0.296875 -0.296875\nv -0.265625 -0.293316 -0.296875\nv -0.265625 -0.296875 -0.296792\nv -0.257812 -0.250365 -0.296875\nv -0.263446 -0.25 -0.296875\nv -0.265625 -0.249802 -0.296875\nv -0.257177 -0.25 -0.296875\nv -0.257812 -0.25 -0.296819\nv -0.25 -0.2465 -0.296875\nv -0.242188 -0.244201 -0.296875\nv -0.271142 -0.242188 -0.296875\nv -0.273438 -0.236586 -0.296875\nv -0.265625 -0.242188 -0.296066\nv -0.257812 -0.242188 -0.295683\nv -0.25 -0.242188 -0.296099\nv -0.239764 -0.242188 -0.296875\nv -0.242188 -0.242188 -0.296464\nv -0.274941 -0.234375 -0.296875\nv -0.273438 -0.234375 -0.296742\nv -0.265625 -0.234375 -0.295795\nv -0.257812 -0.234375 -0.295402\nv -0.25 -0.234375 -0.295629\nv -0.235465 -0.234375 -0.296875\nv -0.242188 -0.234375 -0.29563\nv -0.234375 -0.232076 -0.296875\nv -0.280221 -0.226562 -0.296875\nv -0.28125 -0.222871 -0.296875\nv -0.273438 -0.226562 -0.296081\nv -0.265625 -0.226562 -0.295477\nv -0.257812 -0.226562 -0.295097\nv -0.25 -0.226562 -0.295148\nv -0.242188 -0.226562 -0.295021\nv -0.233602 -0.226562 -0.296875\nv -0.234375 -0.226562 -0.296282\nv -0.281967 -0.21875 -0.296875\nv -0.28125 -0.21875 -0.296706\nv -0.273438 -0.21875 -0.295437\nv -0.265625 -0.21875 -0.294673\nv -0.257812 -0.21875 -0.294454\nv -0.25 -0.21875 -0.294603\nv -0.242188 -0.21875 -0.294252\nv -0.23281 -0.21875 -0.296875\nv -0.234375 -0.21875 -0.295464\nv -0.282745 -0.210938 -0.296875\nv -0.28125 -0.210938 -0.296565\nv -0.273438 -0.210938 -0.294924\nv -0.265625 -0.210938 -0.294044\nv -0.257812 -0.210938 -0.293714\nv -0.25 -0.210938 -0.293812\nv -0.242188 -0.210938 -0.293185\nv -0.232142 -0.210938 -0.296875\nv -0.234375 -0.210938 -0.294748\nv -0.281782 -0.203125 -0.296875\nv -0.28125 -0.202157 -0.296875\nv -0.28125 -0.203125 -0.296786\nv -0.273438 -0.203125 -0.295063\nv -0.265625 -0.203125 -0.293716\nv -0.257812 -0.203125 -0.292922\nv -0.25 -0.203125 -0.293167\nv -0.242188 -0.203125 -0.292311\nv -0.231894 -0.203125 -0.296875\nv -0.234375 -0.203125 -0.294194\nv -0.278298 -0.195312 -0.296875\nv -0.273438 -0.189575 -0.296875\nv -0.273438 -0.195312 -0.295982\nv -0.265625 -0.195312 -0.294569\nv -0.257812 -0.195312 -0.293531\nv -0.25 -0.195312 -0.292813\nv -0.242188 -0.195312 -0.291928\nv -0.232236 -0.195312 -0.296875\nv -0.234375 -0.195312 -0.294596\nv -0.271669 -0.1875 -0.296875\nv -0.265625 -0.181185 -0.296875\nv -0.265625 -0.1875 -0.295781\nv -0.257812 -0.1875 -0.294396\nv -0.25 -0.1875 -0.293395\nv -0.242188 -0.1875 -0.29281\nv -0.232336 -0.1875 -0.296875\nv -0.234375 -0.181353 -0.296875\nv -0.234375 -0.1875 -0.295214\nv -0.264378 -0.179688 -0.296875\nv -0.257812 -0.179688 -0.29551\nv -0.25 -0.179688 -0.29454\nv -0.235438 -0.179688 -0.296875\nv -0.242188 -0.179688 -0.294376\nv -0.259001 -0.171875 -0.296875\nv -0.257812 -0.170067 -0.296875\nv -0.257812 -0.171875 -0.296643\nv -0.25 -0.171875 -0.295864\nv -0.240848 -0.171875 -0.296875\nv -0.242188 -0.169759 -0.296875\nv -0.242188 -0.171875 -0.296416\nv -0.250386 -0.164062 -0.296875\nv -0.249652 -0.164062 -0.296875\nv -0.25 -0.163417 -0.296875\nv -0.25 -0.164062 -0.296832\nv -0.28125 -0.126347 -0.296875\nv -0.28177 -0.125 -0.296875\nv -0.280015 -0.125 -0.296875\nv -0.28125 -0.125 -0.296737\nv -0.285456 -0.117188 -0.296875\nv -0.289062 -0.111094 -0.296875\nv -0.273516 -0.117188 -0.296875\nv -0.28125 -0.117188 -0.295885\nv -0.273438 -0.117131 -0.296875\nv -0.265625 -0.110648 -0.296875\nv 0.460938 -0.110157 -0.296875\nv 0.46875 -0.110085 -0.296875\nv 0.476562 -0.112338 -0.296875\nv -0.289653 -0.109375 -0.296875\nv -0.289062 -0.109375 -0.296586\nv -0.28125 -0.109375 -0.294859\nv -0.273438 -0.109375 -0.29543\nv -0.26514 -0.109375 -0.296875\nv -0.265625 -0.109375 -0.29672\nv 0.459552 -0.109375 -0.296875\nv 0.453125 -0.107068 -0.296875\nv 0.460938 -0.109375 -0.296778\nv 0.46875 -0.109375 -0.296774\nv 0.478061 -0.109375 -0.296875\nv 0.476562 -0.109375 -0.296432\nv -0.292002 -0.101562 -0.296875\nv -0.289062 -0.101562 -0.295208\nv -0.28125 -0.101562 -0.293579\nv -0.273438 -0.101562 -0.293579\nv -0.264101 -0.101562 -0.296875\nv -0.265625 -0.101562 -0.296231\nv 0.447638 -0.101562 -0.296875\nv 0.445312 -0.0991627 -0.296875\nv 0.453125 -0.101562 -0.29577\nv 0.460938 -0.101562 -0.294739\nv 0.46875 -0.101562 -0.294315\nv 0.483784 -0.101562 -0.296875\nv 0.476562 -0.101562 -0.293804\nv 0.484375 -0.100669 -0.296875\nv -0.295021 -0.09375 -0.296875\nv -0.296875 -0.0907253 -0.296875\nv -0.289062 -0.09375 -0.293202\nv -0.28125 -0.09375 -0.291361\nv -0.273438 -0.09375 -0.291406\nv -0.263126 -0.09375 -0.296875\nv -0.265625 -0.09375 -0.295469\nv 0.441141 -0.09375 -0.296875\nv 0.4375 -0.0886853 -0.296875\nv 0.445312 -0.09375 -0.295725\nv 0.453125 -0.09375 -0.293944\nv 0.460938 -0.09375 -0.292412\nv 0.46875 -0.09375 -0.291973\nv 0.476562 -0.09375 -0.291102\nv 0.487028 -0.09375 -0.296875\nv 0.484375 -0.09375 -0.294199\nv -0.298817 -0.0859375 -0.296875\nv -0.296875 -0.0859375 -0.294431\nv -0.289062 -0.0859375 -0.289682\nv -0.273438 -0.0859375 -0.290046\nv -0.262038 -0.0859375 -0.296875\nv -0.265625 -0.0859375 -0.294433\nv -0.257812 -0.0785455 -0.296875\nv 0.435112 -0.0859375 -0.296875\nv 0.429688 -0.0826959 -0.296875\nv 0.4375 -0.0859375 -0.296267\nv 0.445312 -0.0859375 -0.294005\nv 0.453125 -0.0859375 -0.292478\nv 0.460938 -0.0859375 -0.290161\nv 0.46875 -0.0859375 -0.289224\nv 0.490796 -0.0859375 -0.296875\nv 0.484375 -0.0859375 -0.290679\nv 0.492188 -0.0829245 -0.296875\nv -0.301732 -0.078125 -0.296875\nv -0.296875 -0.078125 -0.28914\nv -0.265625 -0.078125 -0.289816\nv -0.257611 -0.078125 -0.296875\nv -0.257812 -0.078125 -0.296664\nv -0.25 -0.0706926 -0.296875\nv 0.424738 -0.078125 -0.296875\nv 0.421875 -0.0721609 -0.296875\nv 0.429688 -0.078125 -0.294526\nv 0.4375 -0.078125 -0.292773\nv 0.445312 -0.078125 -0.291001\nv 0.493891 -0.078125 -0.296875\nv 0.492188 -0.078125 -0.294438\nv -0.304561 -0.0703125 -0.296875\nv -0.304688 -0.0698159 -0.296875\nv -0.249502 -0.0703125 -0.296875\nv -0.25 -0.0703125 -0.296323\nv -0.242188 -0.0636998 -0.296875\nv 0.421188 -0.0703125 -0.296875\nv 0.414062 -0.063417 -0.296875\nv 0.421875 -0.0703125 -0.296262\nv 0.429688 -0.0703125 -0.291138\nv 0.49668 -0.0703125 -0.296875\nv 0.5 -0.0641963 -0.296875\nv -0.306206 -0.0625 -0.296875\nv -0.304688 -0.0625 -0.292594\nv -0.241013 -0.0625 -0.296875\nv -0.242188 -0.0625 -0.295396\nv 0.413201 -0.0625 -0.296875\nv 0.414062 -0.0625 -0.295905\nv 0.500658 -0.0625 -0.296875\nv 0.5 -0.0625 -0.294114\nv -0.306828 -0.0546875 -0.296875\nv -0.236251 -0.0546875 -0.296875\nv -0.234375 -0.0494395 -0.296875\nv 0.412839 -0.0546875 -0.296875\nv 0.414062 -0.0473425 -0.296875\nv 0.414062 -0.0546875 -0.295496\nv 0.50157 -0.0546875 -0.296875\nv -0.30737 -0.046875 -0.296875\nv -0.233396 -0.046875 -0.296875\nv -0.234375 -0.046875 -0.295423\nv 0.414139 -0.046875 -0.296875\nv 0.502289 -0.046875 -0.296875\nv -0.308495 -0.0390625 -0.296875\nv -0.230257 -0.0390625 -0.296875\nv -0.234375 -0.0390625 -0.291045\nv 0.414597 -0.0390625 -0.296875\nv 0.502772 -0.0390625 -0.296875\nv -0.309028 -0.03125 -0.296875\nv -0.227627 -0.03125 -0.296875\nv -0.226562 -0.0284277 -0.296875\nv 0.416488 -0.03125 -0.296875\nv 0.421875 -0.03125 -0.289669\nv 0.502533 -0.03125 -0.296875\nv -0.309451 -0.0234375 -0.296875\nv -0.224495 -0.0234375 -0.296875\nv -0.226562 -0.0234375 -0.293661\nv 0.418082 -0.0234375 -0.296875\nv 0.421875 -0.0234375 -0.291586\nv 0.502246 -0.0234375 -0.296875\nv -0.31061 -0.015625 -0.296875\nv -0.220926 -0.015625 -0.296875\nv -0.21875 -0.0101536 -0.296875\nv 0.419491 -0.015625 -0.296875\nv 0.421875 -0.015625 -0.293612\nv 0.501416 -0.015625 -0.296875\nv -0.311699 -0.0078125 -0.296875\nv -0.217814 -0.0078125 -0.296875\nv -0.21875 -0.0078125 -0.294917\nv 0.42061 -0.0078125 -0.296875\nv 0.421875 -0.0078125 -0.295327\nv 0.500436 -0.0078125 -0.296875\nv -0.311906 0 -0.296875\nv -0.214305 0 -0.296875\nv -0.210938 0.00552312 -0.296875\nv 0.420207 0 -0.296875\nv 0.421875 0 -0.294769\nv 0.500105 0 -0.296875\nv -0.311446 0.0078125 -0.296875\nv -0.209497 0.0078125 -0.296875\nv -0.210938 0.0078125 -0.293658\nv 0.417739 0.0078125 -0.296875\nv 0.414062 0.0133063 -0.296875\nv 0.421875 0.0078125 -0.290985\nv 0.500331 0.0078125 -0.296875\nv -0.310566 0.015625 -0.296875\nv -0.204213 0.015625 -0.296875\nv -0.203125 0.0164843 -0.296875\nv -0.195312 0.0212235 -0.296875\nv 0.411922 0.015625 -0.296875\nv 0.40625 0.0193999 -0.296875\nv 0.414062 0.015625 -0.294339\nv 0.50041 0.015625 -0.296875\nv -0.309576 0.0234375 -0.296875\nv -0.188507 0.0234375 -0.296875\nv -0.1875 0.0236745 -0.296875\nv -0.179688 0.0244872 -0.296875\nv -0.171875 0.0251359 -0.296875\nv -0.164062 0.0257695 -0.296875\nv -0.15625 0.0263623 -0.296875\nv -0.148438 0.0266479 -0.296875\nv -0.140625 0.0268358 -0.296875\nv -0.132812 0.0267607 -0.296875\nv -0.125 0.0266883 -0.296875\nv -0.117188 0.0266265 -0.296875\nv -0.109375 0.026584 -0.296875\nv -0.101562 0.0266729 -0.296875\nv -0.09375 0.0267118 -0.296875\nv -0.0859375 0.0267378 -0.296875\nv -0.078125 0.0268006 -0.296875\nv -0.0703125 0.0268124 -0.296875\nv -0.0625 0.0267022 -0.296875\nv -0.0546875 0.0265366 -0.296875\nv -0.046875 0.0264356 -0.296875\nv -0.0390625 0.0263473 -0.296875\nv -0.03125 0.0262875 -0.296875\nv -0.0234375 0.0262506 -0.296875\nv -0.015625 0.0261719 -0.296875\nv -0.0078125 0.0261044 -0.296875\nv 0 0.0260341 -0.296875\nv 0.0078125 0.0258684 -0.296875\nv 0.015625 0.0257442 -0.296875\nv 0.0234375 0.0257107 -0.296875\nv 0.03125 0.0256864 -0.296875\nv 0.0390625 0.0256706 -0.296875\nv 0.046875 0.0256456 -0.296875\nv 0.0546875 0.0256254 -0.296875\nv 0.0625 0.0255948 -0.296875\nv 0.0703125 0.0256031 -0.296875\nv 0.078125 0.0256384 -0.296875\nv 0.0859375 0.025644 -0.296875\nv 0.09375 0.0256366 -0.296875\nv 0.101562 0.0256616 -0.296875\nv 0.109375 0.0256687 -0.296875\nv 0.117188 0.0256364 -0.296875\nv 0.125 0.0255947 -0.296875\nv 0.132812 0.0255171 -0.296875\nv 0.140625 0.0254471 -0.296875\nv 0.148438 0.0253632 -0.296875\nv 0.15625 0.0252932 -0.296875\nv 0.164062 0.0252249 -0.296875\nv 0.171875 0.0251409 -0.296875\nv 0.179688 0.0250892 -0.296875\nv 0.1875 0.0250665 -0.296875\nv 0.195312 0.0250735 -0.296875\nv 0.203125 0.0250898 -0.296875\nv 0.210938 0.0251293 -0.296875\nv 0.21875 0.0251814 -0.296875\nv 0.226562 0.0252445 -0.296875\nv 0.234375 0.0252904 -0.296875\nv 0.242188 0.0253361 -0.296875\nv 0.25 0.0253539 -0.296875\nv 0.257812 0.0253848 -0.296875\nv 0.265625 0.0255434 -0.296875\nv 0.273438 0.0258571 -0.296875\nv 0.28125 0.0261322 -0.296875\nv 0.289062 0.0263629 -0.296875\nv 0.296875 0.0265918 -0.296875\nv 0.304688 0.0268742 -0.296875\nv 0.3125 0.0271436 -0.296875\nv 0.320312 0.0273571 -0.296875\nv 0.328125 0.0275211 -0.296875\nv 0.335938 0.0274645 -0.296875\nv 0.34375 0.0275341 -0.296875\nv 0.351562 0.0275718 -0.296875\nv 0.359375 0.027574 -0.296875\nv 0.367188 0.0275469 -0.296875\nv 0.375 0.0274064 -0.296875\nv 0.382812 0.0268817 -0.296875\nv 0.390625 0.0256559 -0.296875\nv 0.399833 0.0234375 -0.296875\nv 0.398438 0.0238621 -0.296875\nv 0.40625 0.0234375 -0.289462\nv 0.500589 0.0234375 -0.296875\nv 0.5 0.0258775 -0.296875\nv -0.308147 0.03125 -0.296875\nv 0.498398 0.03125 -0.296875\nv -0.306847 0.0390625 -0.296875\nv -0.304688 0.0390625 -0.291427\nv 0.495473 0.0390625 -0.296875\nv 0.492188 0.0455418 -0.296875\nv -0.305651 0.046875 -0.296875\nv -0.304688 0.046875 -0.294456\nv 0.491463 0.046875 -0.296875\nv 0.484375 0.0538567 -0.296875\nv -0.304788 0.0546875 -0.296875\nv -0.304688 0.0551837 -0.296875\nv -0.304688 0.0546875 -0.296601\nv 0.48311 0.0546875 -0.296875\nv 0.476562 0.0592648 -0.296875\nv -0.30281 0.0625 -0.296875\nv 0.367188 0.0702853 -0.296875\nv 0.375 0.0700263 -0.296875\nv 0.382812 0.0697607 -0.296875\nv 0.390625 0.0695284 -0.296875\nv 0.398438 0.0694212 -0.296875\nv 0.40625 0.0693659 -0.296875\nv 0.414062 0.0693339 -0.296875\nv 0.421875 0.0692602 -0.296875\nv 0.429688 0.0690711 -0.296875\nv 0.4375 0.0689622 -0.296875\nv 0.445312 0.068319 -0.296875\nv 0.453125 0.0666431 -0.296875\nv 0.460938 0.0649894 -0.296875\nv 0.471206 0.0625 -0.296875\nv 0.46875 0.0638366 -0.296875\nv -0.300948 0.0703125 -0.296875\nv -0.296875 0.0703125 -0.290399\nv -0.273438 0.0754035 -0.296875\nv -0.265625 0.077276 -0.296875\nv -0.203125 0.0773868 -0.296875\nv -0.195312 0.076406 -0.296875\nv -0.1875 0.0756253 -0.296875\nv -0.179688 0.0747213 -0.296875\nv -0.171875 0.074415 -0.296875\nv -0.164062 0.0742625 -0.296875\nv -0.15625 0.0742212 -0.296875\nv -0.148438 0.0741865 -0.296875\nv -0.140625 0.0742017 -0.296875\nv -0.132812 0.0742165 -0.296875\nv -0.125 0.0742507 -0.296875\nv -0.117188 0.0742634 -0.296875\nv -0.109375 0.0742667 -0.296875\nv -0.101562 0.074308 -0.296875\nv -0.09375 0.0744196 -0.296875\nv -0.0859375 0.0744973 -0.296875\nv -0.078125 0.0745158 -0.296875\nv -0.0703125 0.0744127 -0.296875\nv -0.0625 0.0742422 -0.296875\nv -0.0546875 0.0740484 -0.296875\nv -0.046875 0.0738878 -0.296875\nv -0.0390625 0.073782 -0.296875\nv -0.03125 0.0736823 -0.296875\nv -0.0234375 0.0735291 -0.296875\nv -0.015625 0.0733431 -0.296875\nv -0.0078125 0.0731846 -0.296875\nv 0 0.0730599 -0.296875\nv 0.0078125 0.0728639 -0.296875\nv 0.015625 0.0727528 -0.296875\nv 0.0234375 0.0726457 -0.296875\nv 0.03125 0.0725877 -0.296875\nv 0.0390625 0.0725318 -0.296875\nv 0.046875 0.072374 -0.296875\nv 0.0546875 0.0722786 -0.296875\nv 0.0625 0.0721805 -0.296875\nv 0.0703125 0.0721147 -0.296875\nv 0.078125 0.0720288 -0.296875\nv 0.0859375 0.0719729 -0.296875\nv 0.09375 0.0719492 -0.296875\nv 0.101562 0.0719443 -0.296875\nv 0.109375 0.071955 -0.296875\nv 0.117188 0.0719867 -0.296875\nv 0.125 0.0720416 -0.296875\nv 0.132812 0.0720489 -0.296875\nv 0.140625 0.0720399 -0.296875\nv 0.148438 0.0720672 -0.296875\nv 0.15625 0.0721149 -0.296875\nv 0.164062 0.0721727 -0.296875\nv 0.171875 0.0722114 -0.296875\nv 0.179688 0.0722284 -0.296875\nv 0.1875 0.0722263 -0.296875\nv 0.195312 0.0721589 -0.296875\nv 0.203125 0.0721625 -0.296875\nv 0.210938 0.0721491 -0.296875\nv 0.21875 0.0720567 -0.296875\nv 0.226562 0.0719733 -0.296875\nv 0.234375 0.0718042 -0.296875\nv 0.242188 0.071665 -0.296875\nv 0.25 0.0715587 -0.296875\nv 0.257812 0.0714646 -0.296875\nv 0.265625 0.0713953 -0.296875\nv 0.273438 0.0713193 -0.296875\nv 0.28125 0.0712677 -0.296875\nv 0.289062 0.0712333 -0.296875\nv 0.296875 0.0712076 -0.296875\nv 0.304688 0.071141 -0.296875\nv 0.3125 0.0710934 -0.296875\nv 0.320312 0.0711062 -0.296875\nv 0.328125 0.0710067 -0.296875\nv 0.335938 0.0708719 -0.296875\nv 0.34375 0.0707111 -0.296875\nv 0.351562 0.070566 -0.296875\nv 0.365446 0.0703125 -0.296875\nv 0.359375 0.0704041 -0.296875\nv 0.367188 0.0703125 -0.296087\nv 0.375 0.0703125 -0.291727\nv -0.300564 0.078125 -0.296875\nv -0.296875 0.078125 -0.293696\nv -0.289062 0.0844737 -0.296875\nv -0.289062 0.078125 -0.292966\nv -0.278134 0.078125 -0.296875\nv -0.28125 0.0821658 -0.296875\nv -0.28125 0.078125 -0.295141\nv -0.264588 0.078125 -0.296875\nv -0.226562 0.0840343 -0.296875\nv -0.21875 0.0824671 -0.296875\nv -0.207128 0.078125 -0.296875\nv -0.210938 0.0788444 -0.296875\nv -0.296959 0.0859375 -0.296875\nv -0.29637 0.0859375 -0.296875\nv -0.296875 0.0860455 -0.296875\nv -0.296875 0.0859375 -0.29683\nv -0.258216 0.0859375 -0.296875\nv -0.257812 0.0863716 -0.296875\nv -0.257812 0.0859375 -0.296315\nv -0.25 0.0905371 -0.296875\nv -0.242188 0.0911088 -0.296875\nv -0.231645 0.0859375 -0.296875\nv -0.234375 0.0883472 -0.296875\nv -0.234375 0.0859375 -0.29404\nv -0.28125 0.137572 -0.296875\nv -0.273438 0.135455 -0.296875\nv -0.265625 0.137392 -0.296875\nv -0.283556 0.140625 -0.296875\nv -0.28125 0.140625 -0.294683\nv -0.273438 0.140625 -0.293519\nv -0.260565 0.140625 -0.296875\nv -0.265625 0.140625 -0.295039\nv -0.257812 0.142887 -0.296875\nv -0.28876 0.148438 -0.296875\nv -0.289062 0.149002 -0.296875\nv -0.265625 0.148438 -0.290793\nv -0.2541 0.148438 -0.296875\nv -0.257812 0.148438 -0.295107\nv -0.29201 0.15625 -0.296875\nv -0.289062 0.15625 -0.289834\nv -0.250156 0.15625 -0.296875\nv -0.257812 0.15625 -0.291641\nv -0.25 0.156437 -0.296875\nv -0.294697 0.164062 -0.296875\nv -0.296875 0.171706 -0.296875\nv -0.246088 0.164062 -0.296875\nv -0.25 0.164062 -0.292477\nv -0.242188 0.169372 -0.296875\nv -0.296972 0.171875 -0.296875\nv -0.296875 0.171875 -0.296814\nv -0.240923 0.171875 -0.296875\nv -0.242188 0.171875 -0.29463\nv -0.300373 0.179688 -0.296875\nv -0.296875 0.179688 -0.293517\nv -0.237822 0.179688 -0.296875\nv -0.301614 0.1875 -0.296875\nv -0.296875 0.1875 -0.289727\nv -0.23439 0.1875 -0.296875\nv -0.234375 0.187558 -0.296875\nv -0.303158 0.195312 -0.296875\nv -0.232408 0.195312 -0.296875\nv -0.234375 0.195312 -0.289466\nv -0.303851 0.203125 -0.296875\nv -0.230852 0.203125 -0.296875\nv -0.304193 0.210938 -0.296875\nv -0.229656 0.210938 -0.296875\nv -0.304385 0.21875 -0.296875\nv -0.228402 0.21875 -0.296875\nv -0.304304 0.226562 -0.296875\nv -0.227457 0.226562 -0.296875\nv -0.304051 0.234375 -0.296875\nv -0.227098 0.234375 -0.296875\nv -0.303692 0.242188 -0.296875\nv -0.226945 0.242188 -0.296875\nv -0.303297 0.25 -0.296875\nv -0.227339 0.25 -0.296875\nv -0.302808 0.257812 -0.296875\nv -0.227785 0.257812 -0.296875\nv -0.301977 0.265625 -0.296875\nv -0.228082 0.265625 -0.296875\nv -0.301201 0.273438 -0.296875\nv -0.228284 0.273438 -0.296875\nv -0.300347 0.28125 -0.296875\nv -0.228957 0.28125 -0.296875\nv -0.299362 0.289062 -0.296875\nv -0.230068 0.289062 -0.296875\nv -0.298315 0.296875 -0.296875\nv -0.296875 0.296875 -0.291627\nv -0.231579 0.296875 -0.296875\nv -0.297603 0.304688 -0.296875\nv -0.296875 0.304688 -0.294976\nv -0.233976 0.304688 -0.296875\nv -0.234375 0.305577 -0.296875\nv -0.234375 0.304688 -0.295801\nv -0.297301 0.3125 -0.296875\nv -0.296875 0.3125 -0.296116\nv -0.238036 0.3125 -0.296875\nv -0.297498 0.320312 -0.296875\nv -0.296875 0.320312 -0.29605\nv -0.241919 0.320312 -0.296875\nv -0.242188 0.320731 -0.296875\nv -0.242188 0.320312 -0.296395\nv -0.297947 0.328125 -0.296875\nv -0.296875 0.328125 -0.295517\nv -0.246838 0.328125 -0.296875\nv -0.25 0.335234 -0.296875\nv -0.25 0.328125 -0.292104\nv -0.298438 0.335938 -0.296875\nv -0.296875 0.335938 -0.294942\nv -0.250374 0.335938 -0.296875\nv -0.298899 0.34375 -0.296875\nv -0.296875 0.34375 -0.294432\nv -0.252358 0.34375 -0.296875\nv -0.299479 0.351562 -0.296875\nv -0.296875 0.351562 -0.293596\nv -0.252848 0.351562 -0.296875\nv -0.300191 0.359375 -0.296875\nv -0.296875 0.359375 -0.29227\nv -0.252719 0.359375 -0.296875\nv -0.301031 0.367188 -0.296875\nv -0.296875 0.367188 -0.290516\nv -0.252195 0.367188 -0.296875\nv -0.301904 0.375 -0.296875\nv -0.251265 0.375 -0.296875\nv -0.302775 0.382812 -0.296875\nv -0.250109 0.382812 -0.296875\nv -0.25 0.383575 -0.296875\nv -0.303487 0.390625 -0.296875\nv -0.249136 0.390625 -0.296875\nv -0.25 0.390625 -0.294978\nv -0.303675 0.398438 -0.296875\nv -0.248787 0.398438 -0.296875\nv -0.25 0.398438 -0.294342\nv -0.30299 0.40625 -0.296875\nv -0.296875 0.40625 -0.289919\nv -0.248964 0.40625 -0.296875\nv -0.25 0.40625 -0.294477\nv -0.301779 0.414062 -0.296875\nv -0.296875 0.414062 -0.292372\nv -0.249472 0.414062 -0.296875\nv -0.25 0.417209 -0.296875\nv -0.25 0.414062 -0.295879\nv -0.298611 0.421875 -0.296875\nv -0.296875 0.42596 -0.296875\nv -0.296875 0.421875 -0.295557\nv -0.289062 0.421875 -0.291101\nv -0.250911 0.421875 -0.296875\nv -0.29285 0.429688 -0.296875\nv -0.289062 0.433591 -0.296875\nv -0.289062 0.429688 -0.295195\nv -0.253637 0.429688 -0.296875\nv -0.257812 0.429688 -0.290637\nv -0.287517 0.4375 -0.296875\nv -0.257558 0.4375 -0.296875\nv -0.257812 0.438037 -0.296875\nv -0.257812 0.4375 -0.296504\nv -0.286115 0.445312 -0.296875\nv -0.28125 0.445312 -0.290017\nv -0.262082 0.445312 -0.296875\nv -0.265625 0.445312 -0.292431\nv -0.285316 0.453125 -0.296875\nv -0.28125 0.453125 -0.291771\nv -0.263865 0.453125 -0.296875\nv -0.265625 0.453125 -0.294653\nv -0.284765 0.460938 -0.296875\nv -0.28125 0.460938 -0.293227\nv -0.273438 0.460938 -0.289068\nv -0.265525 0.460938 -0.296875\nv -0.265625 0.461394 -0.296875\nv -0.265625 0.460938 -0.296762\nv -0.284883 0.46875 -0.296875\nv -0.28125 0.46875 -0.293792\nv -0.26753 0.46875 -0.296875\nv -0.273438 0.46875 -0.290768\nv -0.285459 0.476562 -0.296875\nv -0.28125 0.476562 -0.293862\nv -0.268689 0.476562 -0.296875\nv -0.273438 0.476562 -0.291813\nv -0.283627 0.484375 -0.296875\nv -0.28125 0.49122 -0.296875\nv -0.28125 0.484375 -0.29551\nv -0.270483 0.484375 -0.296875\nv -0.273438 0.484375 -0.294009\nv -0.27831 0.492188 -0.296875\nv -0.273069 0.492188 -0.296875\nv -0.273438 0.493799 -0.296875\nv -0.273438 0.492188 -0.296518\nv -0.28125 0.515211 -0.296875\nv -0.281365 0.515625 -0.296875\nv -0.281025 0.515625 -0.296875\nv -0.28125 0.515625 -0.296838\nv -0.284724 0.523438 -0.296875\nv -0.275666 0.523438 -0.296875\nv -0.28125 0.523438 -0.295258\nv -0.273438 0.527589 -0.296875\nv -0.287017 0.53125 -0.296875\nv -0.28125 0.53125 -0.293666\nv -0.272976 0.53125 -0.296875\nv -0.273438 0.53125 -0.296255\nv -0.288838 0.539062 -0.296875\nv -0.289062 0.539757 -0.296875\nv -0.28125 0.539062 -0.293143\nv -0.272496 0.539062 -0.296875\nv -0.273438 0.539062 -0.295605\nv -0.295076 0.546875 -0.296875\nv -0.289062 0.546875 -0.296021\nv -0.28125 0.546875 -0.293234\nv -0.272967 0.546875 -0.296875\nv -0.273438 0.552127 -0.296875\nv -0.273438 0.546875 -0.296271\nv -0.295722 0.554688 -0.296875\nv -0.296875 0.560041 -0.296875\nv -0.289062 0.554688 -0.295129\nv -0.274011 0.554688 -0.296875\nv -0.28125 0.554688 -0.293338\nv -0.297219 0.5625 -0.296875\nv -0.296875 0.5625 -0.296718\nv -0.289062 0.5625 -0.293449\nv -0.274918 0.5625 -0.296875\nv -0.28125 0.5625 -0.293202\nv -0.299544 0.570312 -0.296875\nv -0.296875 0.570312 -0.29529\nv -0.289062 0.570312 -0.291068\nv -0.275877 0.570312 -0.296875\nv -0.28125 0.570312 -0.293335\nv -0.302634 0.578125 -0.296875\nv -0.304688 0.582774 -0.296875\nv -0.296875 0.578125 -0.293538\nv -0.278037 0.578125 -0.296875\nv -0.28125 0.578125 -0.294108\nv -0.305436 0.585938 -0.296875\nv -0.304688 0.585938 -0.296303\nv -0.296875 0.585938 -0.291816\nv -0.278992 0.585938 -0.296875\nv -0.28125 0.585938 -0.294278\nv -0.306401 0.59375 -0.296875\nv -0.304688 0.59375 -0.295655\nv -0.296875 0.59375 -0.290246\nv -0.278672 0.59375 -0.296875\nv -0.28125 0.59375 -0.292969\nv -0.307417 0.601562 -0.296875\nv -0.3125 0.608728 -0.296875\nv -0.304688 0.601562 -0.295185\nv -0.296875 0.601562 -0.289859\nv -0.278588 0.601562 -0.296875\nv -0.28125 0.601562 -0.292801\nv -0.312835 0.609375 -0.296875\nv -0.3125 0.609375 -0.296643\nv -0.304688 0.609375 -0.292383\nv -0.278325 0.609375 -0.296875\nv -0.31908 0.617188 -0.296875\nv -0.320312 0.619542 -0.296875\nv -0.3125 0.617188 -0.290909\nv -0.27533 0.617188 -0.296875\nv -0.273438 0.621083 -0.296875\nv -0.322482 0.625 -0.296875\nv -0.320312 0.625 -0.293398\nv -0.271315 0.625 -0.296875\nv -0.324948 0.632812 -0.296875\nv -0.267885 0.632812 -0.296875\nv -0.265625 0.637075 -0.296875\nv -0.326294 0.640625 -0.296875\nv -0.264243 0.640625 -0.296875\nv -0.265625 0.640625 -0.292502\nv -0.327255 0.648438 -0.296875\nv -0.262366 0.648438 -0.296875\nv -0.32812 0.65625 -0.296875\nv -0.328125 0.656285 -0.296875\nv -0.262618 0.65625 -0.296875\nv -0.329229 0.664062 -0.296875\nv -0.328125 0.664062 -0.294125\nv -0.262515 0.664062 -0.296875\nv -0.329677 0.671875 -0.296875\nv -0.328125 0.671875 -0.292949\nv -0.262388 0.671875 -0.296875\nv -0.329995 0.679688 -0.296875\nv -0.328125 0.679688 -0.291963\nv -0.262098 0.679688 -0.296875\nv -0.330218 0.6875 -0.296875\nv -0.328125 0.6875 -0.291377\nv -0.262455 0.6875 -0.296875\nv -0.330209 0.695312 -0.296875\nv -0.328125 0.695312 -0.291636\nv -0.26289 0.695312 -0.296875\nv -0.330035 0.703125 -0.296875\nv -0.328125 0.703125 -0.292213\nv -0.2634 0.703125 -0.296875\nv -0.32981 0.710938 -0.296875\nv -0.328125 0.710938 -0.292875\nv -0.26437 0.710938 -0.296875\nv -0.265625 0.717015 -0.296875\nv -0.265625 0.710938 -0.291118\nv -0.329464 0.71875 -0.296875\nv -0.328125 0.71875 -0.293767\nv -0.266009 0.71875 -0.296875\nv -0.328205 0.726562 -0.296875\nv -0.328125 0.727323 -0.296875\nv -0.328125 0.726562 -0.296672\nv -0.26831 0.726562 -0.296875\nv -0.327296 0.734375 -0.296875\nv -0.271481 0.734375 -0.296875\nv -0.273438 0.739303 -0.296875\nv -0.273438 0.734375 -0.28908\nv -0.326047 0.742188 -0.296875\nv -0.27449 0.742188 -0.296875\nv -0.32408 0.75 -0.296875\nv -0.278443 0.75 -0.296875\nv -0.28125 0.753707 -0.296875\nv -0.322215 0.757812 -0.296875\nv -0.320312 0.761902 -0.296875\nv -0.320312 0.757812 -0.293837\nv -0.285698 0.757812 -0.296875\nv -0.289062 0.760417 -0.296875\nv -0.318099 0.765625 -0.296875\nv -0.29502 0.765625 -0.296875\nv -0.296875 0.767239 -0.296875\nv -0.31406 0.773438 -0.296875\nv -0.3125 0.779189 -0.296875\nv -0.3125 0.773438 -0.293002\nv -0.303583 0.773438 -0.296875\nv -0.304688 0.774911 -0.296875\nv -0.304688 0.773438 -0.293723\nv -0.0078125 -0.547369 -0.289062\nv 0 -0.548217 -0.289062\nv 0.0078125 -0.548381 -0.289062\nv 0.015625 -0.548472 -0.289062\nv 0.0234375 -0.548324 -0.289062\nv 0.03125 -0.548119 -0.289062\nv 0.0390625 -0.547816 -0.289062\nv 0.046875 -0.547313 -0.289062\nv -0.0390625 -0.541218 -0.289062\nv -0.03125 -0.543227 -0.289062\nv -0.0234375 -0.544844 -0.289062\nv -0.0121332 -0.546875 -0.289062\nv -0.015625 -0.546228 -0.289062\nv -0.0078125 -0.546875 -0.287223\nv 0 -0.546875 -0.282077\nv 0.052248 -0.546875 -0.289062\nv 0.046875 -0.546875 -0.285969\nv 0.0546875 -0.546617 -0.289062\nv 0.0625 -0.545533 -0.289062\nv 0.0703125 -0.544309 -0.289062\nv 0.078125 -0.543128 -0.289062\nv 0.0859375 -0.542299 -0.289062\nv 0.09375 -0.541343 -0.289062\nv 0.101562 -0.540218 -0.289062\nv 0.109375 -0.539133 -0.289062\nv -0.0434136 -0.539062 -0.289062\nv -0.0390625 -0.539062 -0.287601\nv -0.03125 -0.539062 -0.285145\nv -0.0234375 -0.539062 -0.283482\nv 0.101562 -0.539062 -0.285735\nv 0.109852 -0.539062 -0.289062\nv 0.109375 -0.539062 -0.288894\nv 0.117188 -0.537307 -0.289062\nv 0.125 -0.534733 -0.289062\nv 0.132812 -0.531617 -0.289062\nv -0.0448694 -0.53125 -0.289062\nv -0.046875 -0.527142 -0.289062\nv -0.0390625 -0.53125 -0.286836\nv -0.03125 -0.53125 -0.283973\nv -0.0234375 -0.53125 -0.282011\nv 0.117188 -0.53125 -0.282517\nv 0.125 -0.53125 -0.287001\nv 0.13315 -0.53125 -0.289062\nv 0.132812 -0.53125 -0.288906\nv -0.0488367 -0.523438 -0.289062\nv -0.046875 -0.51687 -0.289062\nv -0.046875 -0.523438 -0.288298\nv -0.0390625 -0.523438 -0.285221\nv -0.03125 -0.523438 -0.282686\nv -0.0234375 -0.523438 -0.281308\nv 0.125 -0.523438 -0.282341\nv 0.140296 -0.523438 -0.289062\nv 0.132812 -0.523438 -0.285746\nv 0.140625 -0.5229 -0.289062\nv -0.0465535 -0.515625 -0.289062\nv -0.0390625 -0.515625 -0.285847\nv -0.03125 -0.515625 -0.282956\nv 0.132812 -0.515625 -0.283556\nv 0.146177 -0.515625 -0.289062\nv 0.140625 -0.515625 -0.286866\nv 0.148438 -0.510779 -0.289062\nv -0.0404116 -0.507812 -0.289062\nv -0.0390625 -0.50732 -0.289062\nv -0.0390625 -0.507812 -0.28857\nv -0.03125 -0.503799 -0.289062\nv -0.03125 -0.507812 -0.285091\nv -0.0234375 -0.501639 -0.289062\nv -0.0234375 -0.507812 -0.282326\nv 0.140625 -0.507812 -0.284815\nv 0.150063 -0.507812 -0.289062\nv 0.148438 -0.50631 -0.289062\nv 0.148438 -0.507812 -0.288457\nv -0.01741 -0.5 -0.289062\nv -0.015625 -0.499533 -0.289062\nv -0.015625 -0.5 -0.288531\nv -0.0078125 -0.497812 -0.289062\nv -0.0078125 -0.5 -0.286332\nv 0 -0.49696 -0.289062\nv 0 -0.5 -0.284494\nv 0.0078125 -0.495613 -0.289062\nv 0.0078125 -0.5 -0.28212\nv 0.015625 -0.494172 -0.289062\nv 0.0234375 -0.492704 -0.289062\nv 0.145155 -0.5 -0.289062\nv 0.140625 -0.5 -0.28567\nv 0.0258043 -0.492188 -0.289062\nv 0.03125 -0.49084 -0.289062\nv 0.03125 -0.492188 -0.286652\nv 0.0390625 -0.488395 -0.289062\nv 0.046875 -0.485511 -0.289062\nv 0.132812 -0.486434 -0.289062\nv 0.132812 -0.492188 -0.284607\nv 0.140888 -0.492188 -0.289062\nv 0.140625 -0.491878 -0.289062\nv 0.140625 -0.492188 -0.288883\nv 0.0513494 -0.484375 -0.289062\nv 0.0546875 -0.483711 -0.289062\nv 0.0546875 -0.484375 -0.286858\nv 0.0625 -0.481919 -0.289062\nv 0.0625 -0.484375 -0.282188\nv 0.0703125 -0.480134 -0.289062\nv 0.078125 -0.478594 -0.289062\nv 0.0859375 -0.477365 -0.289062\nv 0.09375 -0.476896 -0.289062\nv 0.101562 -0.477017 -0.289062\nv 0.109375 -0.477328 -0.289062\nv 0.117188 -0.478609 -0.289062\nv 0.129419 -0.484375 -0.289062\nv 0.125 -0.481852 -0.289062\nv 0.125 -0.484375 -0.286224\nv -0.28125 -0.087241 -0.289062\nv 0.476562 -0.0884918 -0.289062\nv -0.284928 -0.0859375 -0.289062\nv -0.289062 -0.0849697 -0.289062\nv -0.278509 -0.0859375 -0.289062\nv -0.28125 -0.0859375 -0.288313\nv -0.273438 -0.0840199 -0.289062\nv 0.453125 -0.0790089 -0.289062\nv 0.460938 -0.0837967 -0.289062\nv 0.469922 -0.0859375 -0.289062\nv 0.46875 -0.085631 -0.289062\nv 0.479917 -0.0859375 -0.289062\nv 0.476562 -0.0859375 -0.28768\nv 0.484375 -0.082775 -0.289062\nv -0.296776 -0.078125 -0.289062\nv -0.296875 -0.078039 -0.289062\nv -0.289062 -0.078125 -0.282723\nv -0.266868 -0.078125 -0.289062\nv -0.273438 -0.078125 -0.28436\nv -0.265625 -0.0774115 -0.289062\nv -0.257812 -0.071225 -0.289062\nv 0.4375 -0.0731011 -0.289062\nv 0.45134 -0.078125 -0.289062\nv 0.445312 -0.0759132 -0.289062\nv 0.453125 -0.078125 -0.288031\nv 0.460938 -0.078125 -0.282124\nv 0.486992 -0.078125 -0.289062\nv 0.484375 -0.078125 -0.284196\nv 0.492188 -0.0706905 -0.289062\nv -0.300877 -0.0703125 -0.289062\nv -0.256576 -0.0703125 -0.289062\nv -0.257812 -0.0703125 -0.287646\nv -0.25 -0.0653483 -0.289062\nv 0.421875 -0.0628656 -0.289062\nv 0.433122 -0.0703125 -0.289062\nv 0.429688 -0.0680165 -0.289062\nv 0.4375 -0.0703125 -0.285744\nv 0.492424 -0.0703125 -0.289062\nv 0.492188 -0.0703125 -0.288398\nv -0.303345 -0.0625 -0.289062\nv -0.304688 -0.0548117 -0.289062\nv -0.246889 -0.0625 -0.289062\nv -0.25 -0.0625 -0.283611\nv -0.242188 -0.055483 -0.289062\nv 0.421438 -0.0625 -0.289062\nv 0.421875 -0.0625 -0.288557\nv 0.429688 -0.0625 -0.281276\nv 0.498113 -0.0625 -0.289062\nv 0.5 -0.0568536 -0.289062\nv -0.304709 -0.0546875 -0.289062\nv -0.304688 -0.0546875 -0.288183\nv -0.241605 -0.0546875 -0.289062\nv -0.242188 -0.0546875 -0.288154\nv 0.421147 -0.0546875 -0.289062\nv 0.421875 -0.0546875 -0.288137\nv 0.500507 -0.0546875 -0.289062\nv 0.5 -0.0546875 -0.285933\nv -0.306051 -0.046875 -0.289062\nv -0.23855 -0.046875 -0.289062\nv -0.242188 -0.046875 -0.283896\nv 0.421369 -0.046875 -0.289062\nv 0.421875 -0.046875 -0.288136\nv 0.501513 -0.046875 -0.289062\nv -0.307866 -0.0390625 -0.289062\nv -0.235673 -0.0390625 -0.289062\nv -0.234375 -0.0349462 -0.289062\nv 0.420624 -0.0390625 -0.289062\nv 0.421875 -0.033617 -0.289062\nv 0.421875 -0.0390625 -0.286828\nv 0.502161 -0.0390625 -0.289062\nv -0.308905 -0.03125 -0.289062\nv -0.232837 -0.03125 -0.289062\nv -0.234375 -0.03125 -0.287462\nv 0.422515 -0.03125 -0.289062\nv 0.502555 -0.03125 -0.289062\nv -0.309335 -0.0234375 -0.289062\nv -0.229875 -0.0234375 -0.289062\nv -0.234375 -0.0234375 -0.283923\nv -0.226562 -0.0180794 -0.289062\nv 0.42428 -0.0234375 -0.289062\nv 0.429688 -0.0234375 -0.283082\nv 0.502477 -0.0234375 -0.289062\nv -0.310256 -0.015625 -0.289062\nv -0.225188 -0.015625 -0.289062\nv -0.226562 -0.015625 -0.287509\nv 0.425774 -0.015625 -0.289062\nv 0.429688 -0.015625 -0.28468\nv 0.501588 -0.015625 -0.289062\nv -0.31099 -0.0078125 -0.289062\nv -0.22158 -0.0078125 -0.289062\nv -0.226562 -0.0078125 -0.283769\nv -0.21875 -0.00221275 -0.289062\nv 0.42679 -0.0078125 -0.289062\nv 0.429688 -0.0078125 -0.285532\nv 0.500516 -0.0078125 -0.289062\nv -0.310929 0 -0.289062\nv -0.217726 0 -0.289062\nv -0.21875 0 -0.287549\nv 0.428229 0 -0.289062\nv 0.429688 0 -0.287181\nv 0.50027 0 -0.289062\nv -0.309878 0.0078125 -0.289062\nv -0.212896 0.0078125 -0.289062\nv -0.210938 0.0103723 -0.289062\nv 0.423729 0.0078125 -0.289062\nv 0.421875 0.00993883 -0.289062\nv 0.500245 0.0078125 -0.289062\nv -0.308303 0.015625 -0.289062\nv -0.206798 0.015625 -0.289062\nv -0.203125 0.0181628 -0.289062\nv -0.195312 0.0225659 -0.289062\nv 0.41775 0.015625 -0.289062\nv 0.414062 0.0184416 -0.289062\nv 0.421875 0.015625 -0.283034\nv 0.500146 0.015625 -0.289062\nv 0.5 0.015625 -0.282115\nv -0.306864 0.0234375 -0.289062\nv -0.191503 0.0234375 -0.289062\nv -0.195312 0.0234375 -0.284717\nv -0.1875 0.0241387 -0.289062\nv -0.179688 0.0246854 -0.289062\nv -0.171875 0.0251711 -0.289062\nv -0.164062 0.025659 -0.289062\nv -0.15625 0.0259598 -0.289062\nv -0.148438 0.0261535 -0.289062\nv -0.140625 0.0263017 -0.289062\nv -0.132812 0.0264327 -0.289062\nv -0.125 0.0264437 -0.289062\nv -0.117188 0.0264817 -0.289062\nv -0.109375 0.0265584 -0.289062\nv -0.101562 0.0266464 -0.289062\nv -0.09375 0.0267142 -0.289062\nv -0.0859375 0.0268259 -0.289062\nv -0.078125 0.0269423 -0.289062\nv -0.0703125 0.0269297 -0.289062\nv -0.0625 0.0267544 -0.289062\nv -0.0546875 0.0266011 -0.289062\nv -0.046875 0.0265263 -0.289062\nv -0.0390625 0.0264504 -0.289062\nv -0.03125 0.0263703 -0.289062\nv -0.0234375 0.0263562 -0.289062\nv -0.015625 0.0263346 -0.289062\nv -0.0078125 0.0262707 -0.289062\nv 0 0.0262018 -0.289062\nv 0.0078125 0.0260455 -0.289062\nv 0.015625 0.0259349 -0.289062\nv 0.0234375 0.0259009 -0.289062\nv 0.03125 0.0258911 -0.289062\nv 0.0390625 0.025882 -0.289062\nv 0.046875 0.0258768 -0.289062\nv 0.0546875 0.0258834 -0.289062\nv 0.0625 0.025887 -0.289062\nv 0.0703125 0.025893 -0.289062\nv 0.078125 0.0259148 -0.289062\nv 0.0859375 0.0258975 -0.289062\nv 0.09375 0.0258902 -0.289062\nv 0.101562 0.0259006 -0.289062\nv 0.109375 0.0258685 -0.289062\nv 0.117188 0.0258283 -0.289062\nv 0.125 0.0257997 -0.289062\nv 0.132812 0.0257134 -0.289062\nv 0.140625 0.0256387 -0.289062\nv 0.148438 0.0255835 -0.289062\nv 0.15625 0.0255504 -0.289062\nv 0.164062 0.025507 -0.289062\nv 0.171875 0.0254979 -0.289062\nv 0.179688 0.0254857 -0.289062\nv 0.1875 0.0254427 -0.289062\nv 0.195312 0.0254436 -0.289062\nv 0.203125 0.0254878 -0.289062\nv 0.210938 0.025535 -0.289062\nv 0.21875 0.0255523 -0.289062\nv 0.226562 0.0255972 -0.289062\nv 0.234375 0.0256522 -0.289062\nv 0.242188 0.0257247 -0.289062\nv 0.25 0.0257807 -0.289062\nv 0.257812 0.0258391 -0.289062\nv 0.265625 0.0259043 -0.289062\nv 0.273438 0.0260005 -0.289062\nv 0.28125 0.0263224 -0.289062\nv 0.289062 0.0266328 -0.289062\nv 0.296875 0.0268877 -0.289062\nv 0.304688 0.027114 -0.289062\nv 0.3125 0.0274485 -0.289062\nv 0.320312 0.0277308 -0.289062\nv 0.328125 0.0279246 -0.289062\nv 0.335938 0.0280815 -0.289062\nv 0.34375 0.02813 -0.289062\nv 0.351562 0.0281545 -0.289062\nv 0.359375 0.0282104 -0.289062\nv 0.367188 0.0282592 -0.289062\nv 0.375 0.0282305 -0.289062\nv 0.382812 0.0279069 -0.289062\nv 0.390625 0.026861 -0.289062\nv 0.398438 0.0254277 -0.289062\nv 0.406561 0.0234375 -0.289062\nv 0.40625 0.0235392 -0.289062\nv 0.500289 0.0234375 -0.289062\nv 0.5 0.0245223 -0.289062\nv 0.5 0.0234375 -0.282729\nv -0.30542 0.03125 -0.289062\nv -0.304688 0.0346584 -0.289062\nv -0.304688 0.03125 -0.281562\nv 0.497868 0.03125 -0.289062\nv -0.303889 0.0390625 -0.289062\nv 0.495076 0.0390625 -0.289062\nv 0.492188 0.044628 -0.289062\nv -0.302565 0.046875 -0.289062\nv 0.491035 0.046875 -0.289062\nv 0.484375 0.0539312 -0.289062\nv -0.301543 0.0546875 -0.289062\nv 0.483253 0.0546875 -0.289062\nv 0.476562 0.0595371 -0.289062\nv -0.299075 0.0625 -0.289062\nv -0.296875 0.0681531 -0.289062\nv -0.296875 0.0625 -0.282457\nv 0.382812 0.0701679 -0.289062\nv 0.390625 0.0699077 -0.289062\nv 0.398438 0.0697757 -0.289062\nv 0.40625 0.069615 -0.289062\nv 0.414062 0.0695166 -0.289062\nv 0.421875 0.069453 -0.289062\nv 0.429688 0.069264 -0.289062\nv 0.4375 0.0690775 -0.289062\nv 0.445312 0.0682655 -0.289062\nv 0.453125 0.0664996 -0.289062\nv 0.460938 0.0647566 -0.289062\nv 0.471709 0.0625 -0.289062\nv 0.46875 0.0640736 -0.289062\nv -0.293863 0.0703125 -0.289062\nv -0.289062 0.0728774 -0.289062\nv -0.289062 0.0703125 -0.286824\nv -0.28125 0.0705105 -0.289062\nv -0.28125 0.0703125 -0.288662\nv -0.273438 0.0713339 -0.289062\nv -0.273438 0.0703125 -0.285227\nv -0.265625 0.0745923 -0.289062\nv -0.203125 0.0775302 -0.289062\nv -0.195312 0.0764888 -0.289062\nv -0.1875 0.075904 -0.289062\nv -0.179688 0.0753876 -0.289062\nv -0.171875 0.0751194 -0.289062\nv -0.164062 0.0749952 -0.289062\nv -0.15625 0.0748576 -0.289062\nv -0.148438 0.0747124 -0.289062\nv -0.140625 0.0747424 -0.289062\nv -0.132812 0.0747883 -0.289062\nv -0.125 0.0747762 -0.289062\nv -0.117188 0.0746936 -0.289062\nv -0.109375 0.074749 -0.289062\nv -0.101562 0.0748349 -0.289062\nv -0.09375 0.074842 -0.289062\nv -0.0859375 0.0748258 -0.289062\nv -0.078125 0.0748373 -0.289062\nv -0.0703125 0.0747124 -0.289062\nv -0.0625 0.0745586 -0.289062\nv -0.0546875 0.0744163 -0.289062\nv -0.046875 0.0742791 -0.289062\nv -0.0390625 0.074163 -0.289062\nv -0.03125 0.0740742 -0.289062\nv -0.0234375 0.0739283 -0.289062\nv -0.015625 0.0737683 -0.289062\nv -0.0078125 0.0735862 -0.289062\nv 0 0.0734404 -0.289062\nv 0.0078125 0.073263 -0.289062\nv 0.015625 0.073161 -0.289062\nv 0.0234375 0.073066 -0.289062\nv 0.03125 0.0730086 -0.289062\nv 0.0390625 0.0729638 -0.289062\nv 0.046875 0.0728296 -0.289062\nv 0.0546875 0.0727379 -0.289062\nv 0.0625 0.0726461 -0.289062\nv 0.0703125 0.0726017 -0.289062\nv 0.078125 0.0725125 -0.289062\nv 0.0859375 0.0724973 -0.289062\nv 0.09375 0.0725195 -0.289062\nv 0.101562 0.0725618 -0.289062\nv 0.109375 0.0725879 -0.289062\nv 0.117188 0.0726211 -0.289062\nv 0.125 0.0726454 -0.289062\nv 0.132812 0.0726328 -0.289062\nv 0.140625 0.0725979 -0.289062\nv 0.148438 0.0726036 -0.289062\nv 0.15625 0.0726379 -0.289062\nv 0.164062 0.0726699 -0.289062\nv 0.171875 0.0727091 -0.289062\nv 0.179688 0.0727368 -0.289062\nv 0.1875 0.0727095 -0.289062\nv 0.195312 0.0726354 -0.289062\nv 0.203125 0.0726287 -0.289062\nv 0.210938 0.0726088 -0.289062\nv 0.21875 0.0725327 -0.289062\nv 0.226562 0.0723891 -0.289062\nv 0.234375 0.0722186 -0.289062\nv 0.242188 0.0721285 -0.289062\nv 0.25 0.0720279 -0.289062\nv 0.257812 0.0719517 -0.289062\nv 0.265625 0.0718707 -0.289062\nv 0.273438 0.0717787 -0.289062\nv 0.28125 0.0717131 -0.289062\nv 0.289062 0.0716626 -0.289062\nv 0.296875 0.0716219 -0.289062\nv 0.304688 0.0715518 -0.289062\nv 0.3125 0.0715404 -0.289062\nv 0.320312 0.0715179 -0.289062\nv 0.328125 0.0714099 -0.289062\nv 0.335938 0.0711536 -0.289062\nv 0.34375 0.0709899 -0.289062\nv 0.351562 0.0708026 -0.289062\nv 0.359375 0.0706574 -0.289062\nv 0.367188 0.0705483 -0.289062\nv 0.378976 0.0703125 -0.289062\nv 0.375 0.0704572 -0.289062\nv 0.382812 0.0703125 -0.286169\nv -0.261121 0.078125 -0.289062\nv -0.257812 0.0822613 -0.289062\nv -0.234375 0.0836089 -0.289062\nv -0.226562 0.0822363 -0.289062\nv -0.21875 0.0809087 -0.289062\nv -0.207301 0.078125 -0.289062\nv -0.210938 0.0786317 -0.289062\nv -0.210938 0.078125 -0.282152\nv -0.25126 0.0859375 -0.289062\nv -0.25 0.0865162 -0.289062\nv -0.25 0.0859375 -0.287903\nv -0.239942 0.0859375 -0.289062\nv -0.242188 0.0868635 -0.289062\nv -0.242188 0.0859375 -0.286801\nv -0.28125 0.144823 -0.289062\nv -0.273438 0.145081 -0.289062\nv -0.283962 0.148438 -0.289062\nv -0.28125 0.148438 -0.284072\nv -0.268792 0.148438 -0.289062\nv -0.273438 0.148438 -0.285927\nv -0.265625 0.150474 -0.289062\nv -0.288817 0.15625 -0.289062\nv -0.289062 0.156907 -0.289062\nv -0.261003 0.15625 -0.289062\nv -0.265625 0.15625 -0.282095\nv -0.257812 0.159682 -0.289062\nv -0.291276 0.164062 -0.289062\nv -0.253951 0.164062 -0.289062\nv -0.25 0.168386 -0.289062\nv -0.292977 0.171875 -0.289062\nv -0.247268 0.171875 -0.289062\nv -0.25 0.171875 -0.284996\nv -0.242188 0.178485 -0.289062\nv -0.294784 0.179688 -0.289062\nv -0.241591 0.179688 -0.289062\nv -0.242188 0.179688 -0.287656\nv -0.296641 0.1875 -0.289062\nv -0.296875 0.188387 -0.289062\nv -0.296875 0.1875 -0.285848\nv -0.237481 0.1875 -0.289062\nv -0.299099 0.195312 -0.289062\nv -0.234499 0.195312 -0.289062\nv -0.234375 0.195927 -0.289062\nv -0.300808 0.203125 -0.289062\nv -0.232841 0.203125 -0.289062\nv -0.234375 0.203125 -0.283519\nv -0.30174 0.210938 -0.289062\nv -0.231654 0.210938 -0.289062\nv -0.302354 0.21875 -0.289062\nv -0.230475 0.21875 -0.289062\nv -0.30248 0.226562 -0.289062\nv -0.22972 0.226562 -0.289062\nv -0.30241 0.234375 -0.289062\nv -0.229365 0.234375 -0.289062\nv -0.30229 0.242188 -0.289062\nv -0.229204 0.242188 -0.289062\nv -0.302059 0.25 -0.289062\nv -0.229536 0.25 -0.289062\nv -0.301689 0.257812 -0.289062\nv -0.230054 0.257812 -0.289062\nv -0.300963 0.265625 -0.289062\nv -0.230504 0.265625 -0.289062\nv -0.300199 0.273438 -0.289062\nv -0.230869 0.273438 -0.289062\nv -0.298992 0.28125 -0.289062\nv -0.231469 0.28125 -0.289062\nv -0.297489 0.289062 -0.289062\nv -0.296875 0.292751 -0.289062\nv -0.296875 0.289062 -0.285193\nv -0.23255 0.289062 -0.289062\nv -0.234375 0.289062 -0.281917\nv -0.296221 0.296875 -0.289062\nv -0.233778 0.296875 -0.289062\nv -0.234375 0.29872 -0.289062\nv -0.234375 0.296875 -0.286662\nv -0.294821 0.304688 -0.289062\nv -0.237314 0.304688 -0.289062\nv -0.293597 0.3125 -0.289062\nv -0.242084 0.3125 -0.289062\nv -0.242188 0.312694 -0.289062\nv -0.242188 0.3125 -0.288807\nv -0.291679 0.320312 -0.289062\nv -0.289062 0.320312 -0.283973\nv -0.24632 0.320312 -0.289062\nv -0.25 0.325311 -0.289062\nv -0.25 0.320312 -0.283432\nv -0.291576 0.328125 -0.289062\nv -0.289062 0.328125 -0.285249\nv -0.252244 0.328125 -0.289062\nv -0.257812 0.328125 -0.28321\nv -0.291647 0.335938 -0.289062\nv -0.289062 0.335938 -0.285774\nv -0.255232 0.335938 -0.289062\nv -0.257812 0.335938 -0.28435\nv -0.291319 0.34375 -0.289062\nv -0.289062 0.34375 -0.286161\nv -0.256437 0.34375 -0.289062\nv -0.257812 0.34375 -0.286218\nv -0.292181 0.351562 -0.289062\nv -0.289062 0.351562 -0.285019\nv -0.257166 0.351562 -0.289062\nv -0.257812 0.351562 -0.287732\nv -0.293848 0.359375 -0.289062\nv -0.289062 0.359375 -0.283346\nv -0.256756 0.359375 -0.289062\nv -0.257812 0.359375 -0.287128\nv -0.295596 0.367188 -0.289062\nv -0.296875 0.371641 -0.289062\nv -0.256339 0.367188 -0.289062\nv -0.257812 0.367188 -0.286609\nv -0.297634 0.375 -0.289062\nv -0.296875 0.375 -0.288172\nv -0.255384 0.375 -0.289062\nv -0.257812 0.375 -0.28421\nv -0.298848 0.382812 -0.289062\nv -0.296875 0.382812 -0.286881\nv -0.254027 0.382812 -0.289062\nv -0.257812 0.382812 -0.282011\nv -0.299701 0.390625 -0.289062\nv -0.296875 0.390625 -0.285989\nv -0.25284 0.390625 -0.289062\nv -0.299266 0.398438 -0.289062\nv -0.296875 0.404383 -0.289062\nv -0.296875 0.398438 -0.286262\nv -0.252488 0.398438 -0.289062\nv -0.295602 0.40625 -0.289062\nv -0.252384 0.40625 -0.289062\nv -0.291346 0.414062 -0.289062\nv -0.289062 0.417814 -0.289062\nv -0.289062 0.414062 -0.286395\nv -0.253778 0.414062 -0.289062\nv -0.257812 0.414062 -0.283621\nv -0.28723 0.421875 -0.289062\nv -0.256229 0.421875 -0.289062\nv -0.257812 0.426868 -0.289062\nv -0.257812 0.421875 -0.286999\nv -0.283933 0.429688 -0.289062\nv -0.28125 0.429688 -0.284671\nv -0.259482 0.429688 -0.289062\nv -0.265625 0.429688 -0.284755\nv -0.281605 0.4375 -0.289062\nv -0.28125 0.440547 -0.289062\nv -0.28125 0.4375 -0.28847\nv -0.273438 0.4375 -0.282036\nv -0.264479 0.4375 -0.289062\nv -0.265625 0.439751 -0.289062\nv -0.265625 0.4375 -0.288003\nv -0.279739 0.445312 -0.289062\nv -0.268983 0.445312 -0.289062\nv -0.273438 0.445312 -0.285138\nv -0.277146 0.453125 -0.289062\nv -0.270928 0.453125 -0.289062\nv -0.273438 0.460922 -0.289062\nv -0.273438 0.453125 -0.286864\nv -0.289062 0.577668 -0.289062\nv -0.289226 0.578125 -0.289062\nv -0.288898 0.578125 -0.289062\nv -0.289062 0.578125 -0.28893\nv -0.291529 0.585938 -0.289062\nv -0.287485 0.585938 -0.289062\nv -0.289062 0.585938 -0.287372\nv -0.295069 0.59375 -0.289062\nv -0.285422 0.59375 -0.289062\nv -0.289062 0.59375 -0.284938\nv -0.295923 0.601562 -0.289062\nv -0.296875 0.602321 -0.289062\nv -0.284974 0.601562 -0.289062\nv -0.289062 0.601562 -0.282754\nv -0.28125 0.609339 -0.289062\nv -0.300861 0.609375 -0.289062\nv -0.304688 0.612898 -0.289062\nv -0.281241 0.609375 -0.289062\nv -0.28125 0.609375 -0.289028\nv -0.309664 0.617188 -0.289062\nv -0.3125 0.619315 -0.289062\nv -0.277181 0.617188 -0.289062\nv -0.273438 0.623413 -0.289062\nv -0.317221 0.625 -0.289062\nv -0.320312 0.631209 -0.289062\nv -0.3125 0.625 -0.281654\nv -0.272439 0.625 -0.289062\nv -0.273438 0.625 -0.284222\nv -0.320971 0.632812 -0.289062\nv -0.320312 0.632812 -0.287678\nv -0.269917 0.632812 -0.289062\nv -0.322761 0.640625 -0.289062\nv -0.320312 0.640625 -0.283051\nv -0.266735 0.640625 -0.289062\nv -0.265625 0.646008 -0.289062\nv -0.324034 0.648438 -0.289062\nv -0.265093 0.648438 -0.289062\nv -0.265625 0.648438 -0.287781\nv -0.324977 0.65625 -0.289062\nv -0.26531 0.65625 -0.289062\nv -0.265625 0.65625 -0.288227\nv -0.326008 0.664062 -0.289062\nv -0.264633 0.664062 -0.289062\nv -0.265625 0.664062 -0.285806\nv -0.326581 0.671875 -0.289062\nv -0.264067 0.671875 -0.289062\nv -0.265625 0.671875 -0.283032\nv -0.327033 0.679688 -0.289062\nv -0.263645 0.679688 -0.289062\nv -0.327258 0.6875 -0.289062\nv -0.264012 0.6875 -0.289062\nv -0.265625 0.6875 -0.282416\nv -0.327122 0.695312 -0.289062\nv -0.264584 0.695312 -0.289062\nv -0.265625 0.695312 -0.285034\nv -0.326895 0.703125 -0.289062\nv -0.265018 0.703125 -0.289062\nv -0.265625 0.707826 -0.289062\nv -0.265625 0.703125 -0.286732\nv -0.326589 0.710938 -0.289062\nv -0.266097 0.710938 -0.289062\nv -0.326132 0.71875 -0.289062\nv -0.267904 0.71875 -0.289062\nv -0.325048 0.726562 -0.289062\nv -0.270282 0.726562 -0.289062\nv -0.273438 0.734365 -0.289062\nv -0.324395 0.734375 -0.289062\nv -0.273442 0.734375 -0.289062\nv -0.322563 0.742188 -0.289062\nv -0.276603 0.742188 -0.289062\nv -0.320615 0.75 -0.289062\nv -0.320312 0.75083 -0.289062\nv -0.320312 0.75 -0.287973\nv -0.280904 0.75 -0.289062\nv -0.28125 0.750472 -0.289062\nv -0.28125 0.75 -0.287685\nv -0.317304 0.757812 -0.289062\nv -0.288833 0.757812 -0.289062\nv -0.289062 0.758027 -0.289062\nv -0.289062 0.757812 -0.288481\nv -0.314664 0.765625 -0.289062\nv -0.3125 0.770751 -0.289062\nv -0.304688 0.771877 -0.289062\nv -0.296404 0.765625 -0.289062\nv -0.296875 0.766013 -0.289062\nv -0.296875 0.765625 -0.286871\nv 0.0078125 -0.547344 -0.28125\nv 0.015625 -0.547576 -0.28125\nv 0.0234375 -0.547577 -0.28125\nv 0.03125 -0.547459 -0.28125\nv 0.0390625 -0.546984 -0.28125\nv -0.015625 -0.539749 -0.28125\nv -0.0078125 -0.543691 -0.28125\nv 0.0019185 -0.546875 -0.28125\nv 0 -0.54655 -0.28125\nv 0.0078125 -0.546875 -0.277002\nv 0.040228 -0.546875 -0.28125\nv 0.0390625 -0.546875 -0.27758\nv 0.046875 -0.546018 -0.28125\nv 0.0546875 -0.544862 -0.28125\nv 0.0625 -0.543595 -0.28125\nv 0.0703125 -0.542907 -0.28125\nv 0.078125 -0.541934 -0.28125\nv 0.0859375 -0.540742 -0.28125\nv 0.09375 -0.539285 -0.28125\nv -0.0171088 -0.539062 -0.28125\nv -0.015625 -0.539062 -0.280226\nv -0.0078125 -0.539062 -0.273565\nv 0.0947519 -0.539062 -0.28125\nv 0.09375 -0.539062 -0.279604\nv 0.101562 -0.536827 -0.28125\nv 0.109375 -0.534009 -0.28125\nv -0.0213375 -0.53125 -0.28125\nv -0.015625 -0.53125 -0.277194\nv 0.114896 -0.53125 -0.28125\nv 0.109375 -0.53125 -0.275854\nv 0.117188 -0.53018 -0.28125\nv -0.0232498 -0.523438 -0.28125\nv -0.0234375 -0.521993 -0.28125\nv -0.015625 -0.523438 -0.276818\nv 0.123368 -0.523438 -0.28125\nv 0.125 -0.521797 -0.28125\nv -0.0244796 -0.515625 -0.28125\nv -0.0234375 -0.514047 -0.28125\nv -0.0234375 -0.515625 -0.280832\nv -0.015625 -0.515625 -0.277983\nv 0.12951 -0.515625 -0.28125\nv 0.125 -0.515625 -0.27472\nv 0.132812 -0.511268 -0.28125\nv -0.0183454 -0.507812 -0.28125\nv -0.015625 -0.507239 -0.28125\nv -0.015625 -0.507812 -0.280052\nv -0.0078125 -0.504546 -0.28125\nv -0.0078125 -0.507812 -0.274259\nv 0 -0.502305 -0.28125\nv 0.0078125 -0.500536 -0.28125\nv 0.135585 -0.507812 -0.28125\nv 0.132812 -0.507812 -0.277018\nv 0.0104508 -0.5 -0.28125\nv 0.015625 -0.498987 -0.28125\nv 0.015625 -0.5 -0.278767\nv 0.0234375 -0.497176 -0.28125\nv 0.0234375 -0.5 -0.273553\nv 0.03125 -0.494643 -0.28125\nv 0.134437 -0.5 -0.28125\nv 0.132812 -0.497049 -0.28125\nv 0.132812 -0.5 -0.276235\nv 0.0363789 -0.492188 -0.28125\nv 0.0390625 -0.491047 -0.28125\nv 0.0390625 -0.492188 -0.277092\nv 0.046875 -0.489084 -0.28125\nv 0.0546875 -0.486666 -0.28125\nv 0.0625 -0.48472 -0.28125\nv 0.12769 -0.492188 -0.28125\nv 0.125 -0.489638 -0.28125\nv 0.0638033 -0.484375 -0.28125\nv 0.0703125 -0.482704 -0.28125\nv 0.078125 -0.480903 -0.28125\nv 0.0859375 -0.479735 -0.28125\nv 0.09375 -0.479368 -0.28125\nv 0.101562 -0.479474 -0.28125\nv 0.109375 -0.480275 -0.28125\nv 0.119671 -0.484375 -0.28125\nv 0.117188 -0.482495 -0.28125\nv -0.28125 -0.0795628 -0.28125\nv 0.46875 -0.0784595 -0.28125\nv 0.476562 -0.0797218 -0.28125\nv -0.296875 -0.0733061 -0.28125\nv -0.285429 -0.078125 -0.28125\nv -0.289062 -0.0770625 -0.28125\nv -0.27843 -0.078125 -0.28125\nv -0.28125 -0.078125 -0.279575\nv -0.273438 -0.0759808 -0.28125\nv -0.265625 -0.0717845 -0.28125\nv 0.445312 -0.0719082 -0.28125\nv 0.453125 -0.0742482 -0.28125\nv 0.465766 -0.078125 -0.28125\nv 0.460938 -0.0775804 -0.28125\nv 0.46875 -0.078125 -0.280579\nv 0.480487 -0.078125 -0.28125\nv 0.476562 -0.078125 -0.277855\nv 0.484375 -0.076521 -0.28125\nv -0.299281 -0.0703125 -0.28125\nv -0.263385 -0.0703125 -0.28125\nv -0.265625 -0.0703125 -0.278302\nv -0.257812 -0.0667837 -0.28125\nv 0.442324 -0.0703125 -0.28125\nv 0.4375 -0.066993 -0.28125\nv 0.445312 -0.0703125 -0.275999\nv 0.489714 -0.0703125 -0.28125\nv 0.492188 -0.0670318 -0.28125\nv -0.302794 -0.0625 -0.28125\nv -0.251517 -0.0625 -0.28125\nv -0.25 -0.0606444 -0.28125\nv 0.429714 -0.0625 -0.28125\nv 0.429688 -0.0621475 -0.28125\nv 0.496009 -0.0625 -0.28125\nv -0.304509 -0.0546875 -0.28125\nv -0.304688 -0.0538967 -0.28125\nv -0.245966 -0.0546875 -0.28125\nv 0.42913 -0.0546875 -0.28125\nv 0.429688 -0.0546875 -0.280164\nv 0.498828 -0.0546875 -0.28125\nv 0.5 -0.0494438 -0.28125\nv -0.306012 -0.046875 -0.28125\nv -0.24341 -0.046875 -0.28125\nv -0.242188 -0.0422047 -0.28125\nv 0.427743 -0.046875 -0.28125\nv 0.429688 -0.046875 -0.27649\nv 0.500365 -0.046875 -0.28125\nv 0.5 -0.046875 -0.27866\nv -0.307681 -0.0390625 -0.28125\nv -0.24097 -0.0390625 -0.28125\nv -0.242188 -0.0390625 -0.279388\nv 0.425917 -0.0390625 -0.28125\nv 0.429688 -0.0390625 -0.274751\nv 0.501474 -0.0390625 -0.28125\nv -0.308571 -0.03125 -0.28125\nv -0.238945 -0.03125 -0.28125\nv -0.242188 -0.03125 -0.27632\nv 0.428954 -0.03125 -0.28125\nv 0.429688 -0.0287278 -0.28125\nv 0.429688 -0.03125 -0.28031\nv 0.502216 -0.03125 -0.28125\nv -0.309068 -0.0234375 -0.28125\nv -0.236458 -0.0234375 -0.28125\nv -0.242188 -0.0234375 -0.273535\nv -0.234375 -0.0193343 -0.28125\nv 0.43061 -0.0234375 -0.28125\nv 0.502096 -0.0234375 -0.28125\nv -0.309896 -0.015625 -0.28125\nv -0.232367 -0.015625 -0.28125\nv -0.234375 -0.015625 -0.279095\nv 0.431495 -0.015625 -0.28125\nv 0.501461 -0.015625 -0.28125\nv -0.310209 -0.0078125 -0.28125\nv -0.229189 -0.0078125 -0.28125\nv -0.234375 -0.0078125 -0.276254\nv -0.226562 -0.00312433 -0.28125\nv 0.431655 -0.0078125 -0.28125\nv 0.500515 -0.0078125 -0.28125\nv -0.310006 0 -0.28125\nv -0.224583 0 -0.28125\nv -0.226562 0 -0.279565\nv -0.21875 0.00748552 -0.28125\nv 0.431634 0 -0.28125\nv 0.429688 0.00630235 -0.28125\nv 0.500293 0 -0.28125\nv -0.308883 0.0078125 -0.28125\nv -0.218489 0.0078125 -0.28125\nv -0.21875 0.0078125 -0.281017\nv -0.210938 0.0141185 -0.28125\nv 0.428592 0.0078125 -0.28125\nv 0.429688 0.0078125 -0.27965\nv 0.500278 0.0078125 -0.28125\nv 0.5 0.0151849 -0.28125\nv -0.307421 0.015625 -0.28125\nv -0.209635 0.015625 -0.28125\nv -0.210938 0.015625 -0.279331\nv -0.203125 0.0198471 -0.28125\nv 0.414062 0.0217811 -0.28125\nv 0.423215 0.015625 -0.28125\nv 0.421875 0.0164834 -0.28125\nv 0.49998 0.015625 -0.28125\nv -0.306168 0.0234375 -0.28125\nv -0.304688 0.0311142 -0.28125\nv -0.196665 0.0234375 -0.28125\nv -0.195312 0.0239316 -0.28125\nv -0.1875 0.0252286 -0.28125\nv -0.179688 0.0255433 -0.28125\nv -0.171875 0.025757 -0.28125\nv -0.164062 0.0258821 -0.28125\nv -0.15625 0.0259387 -0.28125\nv -0.148438 0.0260143 -0.28125\nv -0.140625 0.0260765 -0.28125\nv -0.132812 0.0262344 -0.28125\nv -0.125 0.0262895 -0.28125\nv -0.117188 0.0263575 -0.28125\nv -0.109375 0.0265187 -0.28125\nv -0.101562 0.0267297 -0.28125\nv -0.09375 0.026865 -0.28125\nv -0.0859375 0.0269907 -0.28125\nv -0.078125 0.0270228 -0.28125\nv -0.0703125 0.0269677 -0.28125\nv -0.0625 0.0268808 -0.28125\nv -0.0546875 0.0267852 -0.28125\nv -0.046875 0.0267261 -0.28125\nv -0.0390625 0.0266407 -0.28125\nv -0.03125 0.0265111 -0.28125\nv -0.0234375 0.0264255 -0.28125\nv -0.015625 0.0263955 -0.28125\nv -0.0078125 0.0263366 -0.28125\nv 0 0.0263007 -0.28125\nv 0.0078125 0.0261779 -0.28125\nv 0.015625 0.0260907 -0.28125\nv 0.0234375 0.0260819 -0.28125\nv 0.03125 0.0260966 -0.28125\nv 0.0390625 0.0261026 -0.28125\nv 0.046875 0.0261068 -0.28125\nv 0.0546875 0.0261162 -0.28125\nv 0.0625 0.0261311 -0.28125\nv 0.0703125 0.0261381 -0.28125\nv 0.078125 0.0261716 -0.28125\nv 0.0859375 0.0261801 -0.28125\nv 0.09375 0.0261936 -0.28125\nv 0.101562 0.0261803 -0.28125\nv 0.109375 0.0261508 -0.28125\nv 0.117188 0.0261114 -0.28125\nv 0.125 0.0260643 -0.28125\nv 0.132812 0.025991 -0.28125\nv 0.140625 0.0259694 -0.28125\nv 0.148438 0.0259413 -0.28125\nv 0.15625 0.0259121 -0.28125\nv 0.164062 0.0258856 -0.28125\nv 0.171875 0.0258761 -0.28125\nv 0.179688 0.0258831 -0.28125\nv 0.1875 0.0258577 -0.28125\nv 0.195312 0.0258076 -0.28125\nv 0.203125 0.0258446 -0.28125\nv 0.210938 0.0259125 -0.28125\nv 0.21875 0.0259685 -0.28125\nv 0.226562 0.0260192 -0.28125\nv 0.234375 0.026085 -0.28125\nv 0.242188 0.0261732 -0.28125\nv 0.25 0.0262687 -0.28125\nv 0.257812 0.026332 -0.28125\nv 0.265625 0.026375 -0.28125\nv 0.273438 0.0264173 -0.28125\nv 0.28125 0.0265271 -0.28125\nv 0.289062 0.0267995 -0.28125\nv 0.296875 0.0270772 -0.28125\nv 0.304688 0.0273194 -0.28125\nv 0.3125 0.0274725 -0.28125\nv 0.320312 0.0276922 -0.28125\nv 0.328125 0.0279857 -0.28125\nv 0.335938 0.0282842 -0.28125\nv 0.34375 0.0284898 -0.28125\nv 0.351562 0.0286191 -0.28125\nv 0.359375 0.0286403 -0.28125\nv 0.367188 0.0286437 -0.28125\nv 0.375 0.0285639 -0.28125\nv 0.382812 0.0282444 -0.28125\nv 0.390625 0.0273778 -0.28125\nv 0.398438 0.0262756 -0.28125\nv 0.411283 0.0234375 -0.28125\nv 0.40625 0.0247803 -0.28125\nv 0.414062 0.0234375 -0.276134\nv 0.499917 0.0234375 -0.28125\nv -0.304661 0.03125 -0.28125\nv 0.497702 0.03125 -0.28125\nv -0.303003 0.0390625 -0.28125\nv 0.494778 0.0390625 -0.28125\nv 0.492188 0.0441794 -0.28125\nv -0.301328 0.046875 -0.28125\nv 0.490923 0.046875 -0.28125\nv 0.484375 0.0541378 -0.28125\nv -0.299928 0.0546875 -0.28125\nv -0.296875 0.0616841 -0.28125\nv 0.483621 0.0546875 -0.28125\nv 0.476562 0.0599573 -0.28125\nv -0.296247 0.0625 -0.28125\nv -0.289062 0.0670293 -0.28125\nv -0.28125 0.0684474 -0.28125\nv -0.273438 0.0696748 -0.28125\nv 0.390625 0.0702622 -0.28125\nv 0.398438 0.0700226 -0.28125\nv 0.40625 0.0697788 -0.28125\nv 0.414062 0.0696429 -0.28125\nv 0.421875 0.0695814 -0.28125\nv 0.429688 0.0694102 -0.28125\nv 0.4375 0.0691569 -0.28125\nv 0.445312 0.0682631 -0.28125\nv 0.453125 0.0663372 -0.28125\nv 0.460938 0.0647007 -0.28125\nv 0.472 0.0625 -0.28125\nv 0.46875 0.0641321 -0.28125\nv -0.271764 0.0703125 -0.28125\nv -0.265625 0.0729055 -0.28125\nv -0.210938 0.0780589 -0.28125\nv -0.203125 0.0773794 -0.28125\nv -0.195312 0.0766772 -0.28125\nv -0.1875 0.0764541 -0.28125\nv -0.179688 0.0760715 -0.28125\nv -0.171875 0.0757664 -0.28125\nv -0.164062 0.07557 -0.28125\nv -0.15625 0.075354 -0.28125\nv -0.148438 0.0751518 -0.28125\nv -0.140625 0.0751734 -0.28125\nv -0.132812 0.0752383 -0.28125\nv -0.125 0.0751689 -0.28125\nv -0.117188 0.0749869 -0.28125\nv -0.109375 0.0749334 -0.28125\nv -0.101562 0.0749515 -0.28125\nv -0.09375 0.074928 -0.28125\nv -0.0859375 0.0749442 -0.28125\nv -0.078125 0.0749768 -0.28125\nv -0.0703125 0.0749224 -0.28125\nv -0.0625 0.0747497 -0.28125\nv -0.0546875 0.0746162 -0.28125\nv -0.046875 0.074477 -0.28125\nv -0.0390625 0.0743516 -0.28125\nv -0.03125 0.0742112 -0.28125\nv -0.0234375 0.0740523 -0.28125\nv -0.015625 0.0738641 -0.28125\nv -0.0078125 0.0736525 -0.28125\nv 0 0.0735271 -0.28125\nv 0.0078125 0.073406 -0.28125\nv 0.015625 0.0733275 -0.28125\nv 0.0234375 0.0732821 -0.28125\nv 0.03125 0.073235 -0.28125\nv 0.0390625 0.07315 -0.28125\nv 0.046875 0.0730615 -0.28125\nv 0.0546875 0.0729839 -0.28125\nv 0.0625 0.0729334 -0.28125\nv 0.0703125 0.0729041 -0.28125\nv 0.078125 0.0728697 -0.28125\nv 0.0859375 0.0728968 -0.28125\nv 0.09375 0.0729364 -0.28125\nv 0.101562 0.0729903 -0.28125\nv 0.109375 0.0730212 -0.28125\nv 0.117188 0.07306 -0.28125\nv 0.125 0.0730907 -0.28125\nv 0.132812 0.0730661 -0.28125\nv 0.140625 0.0730768 -0.28125\nv 0.148438 0.0731355 -0.28125\nv 0.15625 0.0732025 -0.28125\nv 0.164062 0.073261 -0.28125\nv 0.171875 0.0732926 -0.28125\nv 0.179688 0.0732958 -0.28125\nv 0.1875 0.0732204 -0.28125\nv 0.195312 0.0731787 -0.28125\nv 0.203125 0.0731604 -0.28125\nv 0.210938 0.0731181 -0.28125\nv 0.21875 0.0730151 -0.28125\nv 0.226562 0.0728016 -0.28125\nv 0.234375 0.0726384 -0.28125\nv 0.242188 0.0725215 -0.28125\nv 0.25 0.0724522 -0.28125\nv 0.257812 0.0723967 -0.28125\nv 0.265625 0.0723079 -0.28125\nv 0.273438 0.0722181 -0.28125\nv 0.28125 0.0721471 -0.28125\nv 0.289062 0.0720856 -0.28125\nv 0.296875 0.0720569 -0.28125\nv 0.304688 0.0720206 -0.28125\nv 0.3125 0.0719991 -0.28125\nv 0.320312 0.0718718 -0.28125\nv 0.328125 0.0717696 -0.28125\nv 0.335938 0.0716099 -0.28125\nv 0.34375 0.0714144 -0.28125\nv 0.351562 0.0711896 -0.28125\nv 0.359375 0.0710043 -0.28125\nv 0.367188 0.0708546 -0.28125\nv 0.375 0.0707158 -0.28125\nv 0.389322 0.0703125 -0.28125\nv 0.382812 0.0705515 -0.28125\nv 0.390625 0.0703125 -0.280278\nv 0.398438 0.0703125 -0.274763\nv -0.258986 0.078125 -0.28125\nv -0.257812 0.0793773 -0.28125\nv -0.257812 0.078125 -0.273521\nv -0.25 0.0831252 -0.28125\nv -0.242188 0.0830585 -0.28125\nv -0.234375 0.0815337 -0.28125\nv -0.226562 0.0812338 -0.28125\nv -0.211259 0.078125 -0.28125\nv -0.21875 0.0797508 -0.28125\nv -0.28125 0.150093 -0.28125\nv -0.273438 0.152223 -0.28125\nv -0.288635 0.15625 -0.28125\nv -0.289062 0.156997 -0.28125\nv -0.26663 0.15625 -0.28125\nv -0.265625 0.156853 -0.28125\nv -0.257812 0.163842 -0.28125\nv -0.291251 0.164062 -0.28125\nv -0.257676 0.164062 -0.28125\nv -0.257812 0.164062 -0.280806\nv -0.293158 0.171875 -0.28125\nv -0.252295 0.171875 -0.28125\nv -0.25 0.174492 -0.28125\nv -0.295085 0.179688 -0.28125\nv -0.296875 0.186375 -0.28125\nv -0.296875 0.179688 -0.273619\nv -0.245759 0.179688 -0.28125\nv -0.242188 0.183518 -0.28125\nv -0.297194 0.1875 -0.28125\nv -0.23949 0.1875 -0.28125\nv -0.299061 0.195312 -0.28125\nv -0.235993 0.195312 -0.28125\nv -0.300663 0.203125 -0.28125\nv -0.235014 0.203125 -0.28125\nv -0.234375 0.206736 -0.28125\nv -0.301428 0.210938 -0.28125\nv -0.233654 0.210938 -0.28125\nv -0.234375 0.210938 -0.277768\nv -0.302001 0.21875 -0.28125\nv -0.232453 0.21875 -0.28125\nv -0.302105 0.226562 -0.28125\nv -0.231718 0.226562 -0.28125\nv -0.302076 0.234375 -0.28125\nv -0.231406 0.234375 -0.28125\nv -0.301965 0.242188 -0.28125\nv -0.231266 0.242188 -0.28125\nv -0.301798 0.25 -0.28125\nv -0.231711 0.25 -0.28125\nv -0.301381 0.257812 -0.28125\nv -0.23228 0.257812 -0.28125\nv -0.30059 0.265625 -0.28125\nv -0.232682 0.265625 -0.28125\nv -0.234375 0.265625 -0.273994\nv -0.299694 0.273438 -0.28125\nv -0.232994 0.273438 -0.28125\nv -0.234375 0.273438 -0.275855\nv -0.298136 0.28125 -0.28125\nv -0.296875 0.286589 -0.28125\nv -0.233522 0.28125 -0.28125\nv -0.234375 0.287832 -0.28125\nv -0.234375 0.28125 -0.278011\nv -0.296282 0.289062 -0.28125\nv -0.23461 0.289062 -0.28125\nv -0.294222 0.296875 -0.28125\nv -0.236361 0.296875 -0.28125\nv -0.292082 0.304688 -0.28125\nv -0.240879 0.304688 -0.28125\nv -0.242188 0.307071 -0.28125\nv -0.242188 0.304688 -0.278418\nv -0.289822 0.3125 -0.28125\nv -0.289062 0.315711 -0.28125\nv -0.289062 0.3125 -0.278402\nv -0.245486 0.3125 -0.28125\nv -0.25 0.318357 -0.28125\nv -0.287661 0.320312 -0.28125\nv -0.251721 0.320312 -0.28125\nv -0.257812 0.326137 -0.28125\nv -0.286159 0.328125 -0.28125\nv -0.2597 0.328125 -0.28125\nv -0.285018 0.335938 -0.28125\nv -0.28125 0.335938 -0.273824\nv -0.260289 0.335938 -0.28125\nv -0.265625 0.335938 -0.274529\nv -0.28404 0.34375 -0.28125\nv -0.28125 0.34375 -0.276879\nv -0.26275 0.34375 -0.28125\nv -0.265625 0.34375 -0.278609\nv -0.285162 0.351562 -0.28125\nv -0.28125 0.351562 -0.276223\nv -0.264121 0.351562 -0.28125\nv -0.265625 0.351562 -0.279981\nv -0.286654 0.359375 -0.28125\nv -0.289062 0.366619 -0.28125\nv -0.28125 0.359375 -0.275133\nv -0.264055 0.359375 -0.28125\nv -0.265625 0.359375 -0.280118\nv -0.289175 0.367188 -0.28125\nv -0.289062 0.367188 -0.281011\nv -0.263012 0.367188 -0.28125\nv -0.265625 0.367188 -0.27915\nv -0.290351 0.375 -0.28125\nv -0.289062 0.375 -0.278313\nv -0.260302 0.375 -0.28125\nv -0.265625 0.375 -0.27687\nv -0.291104 0.382812 -0.28125\nv -0.289062 0.382812 -0.27718\nv -0.258487 0.382812 -0.28125\nv -0.265625 0.382812 -0.274849\nv -0.257812 0.386702 -0.28125\nv -0.291618 0.390625 -0.28125\nv -0.289062 0.390625 -0.276819\nv -0.265625 0.390625 -0.274057\nv -0.257422 0.390625 -0.28125\nv -0.257812 0.390625 -0.280747\nv -0.291327 0.398438 -0.28125\nv -0.289062 0.398438 -0.277902\nv -0.257076 0.398438 -0.28125\nv -0.257812 0.398438 -0.28028\nv -0.289109 0.40625 -0.28125\nv -0.289062 0.406355 -0.28125\nv -0.289062 0.40625 -0.281189\nv -0.265625 0.40625 -0.274228\nv -0.257098 0.40625 -0.28125\nv -0.257812 0.408658 -0.28125\nv -0.257812 0.40625 -0.280358\nv -0.285822 0.414062 -0.28125\nv -0.28125 0.414062 -0.275746\nv -0.260645 0.414062 -0.28125\nv -0.265625 0.414062 -0.277502\nv -0.281786 0.421875 -0.28125\nv -0.28125 0.423482 -0.28125\nv -0.28125 0.421875 -0.280578\nv -0.273438 0.421875 -0.275719\nv -0.265233 0.421875 -0.28125\nv -0.265625 0.422501 -0.28125\nv -0.265625 0.421875 -0.28096\nv -0.27678 0.429688 -0.28125\nv -0.270522 0.429688 -0.28125\nv -0.273438 0.435742 -0.28125\nv -0.273438 0.429688 -0.279296\nv -0.296875 0.604737 -0.28125\nv -0.289062 0.60248 -0.28125\nv -0.29964 0.609375 -0.28125\nv -0.304688 0.61424 -0.28125\nv -0.28398 0.609375 -0.28125\nv -0.28125 0.612067 -0.28125\nv -0.306961 0.617188 -0.28125\nv -0.27848 0.617188 -0.28125\nv -0.312213 0.625 -0.28125\nv -0.3125 0.625291 -0.28125\nv -0.273938 0.625 -0.28125\nv -0.273438 0.626725 -0.28125\nv -0.317517 0.632812 -0.28125\nv -0.271659 0.632812 -0.28125\nv -0.273438 0.632812 -0.276151\nv -0.319606 0.640625 -0.28125\nv -0.320312 0.643912 -0.28125\nv -0.269195 0.640625 -0.28125\nv -0.321275 0.648438 -0.28125\nv -0.320312 0.648438 -0.276519\nv -0.268145 0.648438 -0.28125\nv -0.322503 0.65625 -0.28125\nv -0.268013 0.65625 -0.28125\nv -0.323618 0.664062 -0.28125\nv -0.266953 0.664062 -0.28125\nv -0.324297 0.671875 -0.28125\nv -0.266058 0.671875 -0.28125\nv -0.265625 0.678805 -0.28125\nv -0.324761 0.679688 -0.28125\nv -0.26557 0.679688 -0.28125\nv -0.265625 0.681023 -0.28125\nv -0.265625 0.679688 -0.281054\nv -0.324951 0.6875 -0.28125\nv -0.265909 0.6875 -0.28125\nv -0.324903 0.695312 -0.28125\nv -0.266652 0.695312 -0.28125\nv -0.324618 0.703125 -0.28125\nv -0.267195 0.703125 -0.28125\nv -0.324247 0.710938 -0.28125\nv -0.268399 0.710938 -0.28125\nv -0.323838 0.71875 -0.28125\nv -0.270068 0.71875 -0.28125\nv -0.323112 0.726562 -0.28125\nv -0.27234 0.726562 -0.28125\nv -0.273438 0.729511 -0.28125\nv -0.273438 0.726562 -0.277283\nv -0.32255 0.734375 -0.28125\nv -0.27532 0.734375 -0.28125\nv -0.320747 0.742188 -0.28125\nv -0.320312 0.743781 -0.28125\nv -0.320312 0.742188 -0.278226\nv -0.278661 0.742188 -0.28125\nv -0.28125 0.747116 -0.28125\nv -0.318264 0.75 -0.28125\nv -0.283049 0.75 -0.28125\nv -0.289062 0.75568 -0.28125\nv -0.315535 0.757812 -0.28125\nv -0.291242 0.757812 -0.28125\nv -0.296875 0.764427 -0.28125\nv -0.313133 0.765625 -0.28125\nv -0.3125 0.767246 -0.28125\nv -0.3125 0.765625 -0.276324\nv -0.298253 0.765625 -0.28125\nv -0.304688 0.770032 -0.28125\nv 0.015625 -0.54727 -0.273438\nv 0.0234375 -0.547514 -0.273438\nv 0.03125 -0.547175 -0.273438\nv 0 -0.54326 -0.273438\nv 0.0117114 -0.546875 -0.273438\nv 0.0078125 -0.545868 -0.273438\nv 0.0367801 -0.546875 -0.273438\nv 0.0390625 -0.546687 -0.273438\nv 0.0390625 -0.546875 -0.271383\nv 0.046875 -0.545629 -0.273438\nv 0.0546875 -0.544771 -0.273438\nv 0.0625 -0.543722 -0.273438\nv 0.0703125 -0.542679 -0.273438\nv 0.078125 -0.541551 -0.273438\nv 0.0859375 -0.540043 -0.273438\nv -0.00761746 -0.539062 -0.273438\nv -0.0078125 -0.53886 -0.273438\nv 0.0902994 -0.539062 -0.273438\nv 0.0859375 -0.539062 -0.265797\nv 0.09375 -0.537958 -0.273438\nv 0.101562 -0.534497 -0.273438\nv -0.0116607 -0.53125 -0.273438\nv -0.0078125 -0.53125 -0.268315\nv 0.107652 -0.53125 -0.273438\nv 0.109375 -0.530389 -0.273438\nv 0.117188 -0.524353 -0.273438\nv -0.0116142 -0.523438 -0.273438\nv -0.0078125 -0.523438 -0.270391\nv 0.118238 -0.523438 -0.273438\nv 0.117188 -0.523438 -0.27159\nv -0.0101279 -0.515625 -0.273438\nv -0.0078125 -0.510077 -0.273438\nv -0.0078125 -0.515625 -0.27142\nv 0 -0.515625 -0.266125\nv 0.124097 -0.515625 -0.273438\nv 0.125 -0.514623 -0.273438\nv -0.00663481 -0.507812 -0.273438\nv 0 -0.505775 -0.273438\nv 0 -0.507812 -0.268633\nv 0.0078125 -0.504041 -0.273438\nv 0.015625 -0.502075 -0.273438\nv 0.0234375 -0.500032 -0.273438\nv 0.130709 -0.507812 -0.273438\nv 0.0234973 -0.5 -0.273438\nv 0.03125 -0.496263 -0.273438\nv 0.0390625 -0.493396 -0.273438\nv 0.131455 -0.5 -0.273438\nv 0.042121 -0.492188 -0.273438\nv 0.046875 -0.49064 -0.273438\nv 0.0546875 -0.488355 -0.273438\nv 0.0625 -0.486134 -0.273438\nv 0.125549 -0.492188 -0.273438\nv 0.125 -0.491516 -0.273438\nv 0.125 -0.492188 -0.270922\nv 0.0691935 -0.484375 -0.273438\nv 0.0703125 -0.484077 -0.273438\nv 0.0703125 -0.484375 -0.271951\nv 0.078125 -0.482378 -0.273438\nv 0.0859375 -0.481433 -0.273438\nv 0.09375 -0.481161 -0.273438\nv 0.101562 -0.481326 -0.273438\nv 0.109375 -0.482152 -0.273438\nv 0.117236 -0.484375 -0.273438\nv 0.117188 -0.484346 -0.273438\nv 0.117188 -0.484375 -0.27332\nv -0.296875 -0.0715249 -0.273438\nv -0.289062 -0.0731725 -0.273438\nv -0.28125 -0.0738604 -0.273438\nv -0.273438 -0.0716551 -0.273438\nv 0.453125 -0.0722898 -0.273438\nv 0.460938 -0.0745767 -0.273438\nv 0.46875 -0.0751043 -0.273438\nv 0.476562 -0.0762427 -0.273438\nv 0.484375 -0.0734476 -0.273438\nv -0.298059 -0.0703125 -0.273438\nv -0.296875 -0.0703125 -0.269528\nv -0.289062 -0.0703125 -0.266426\nv -0.270469 -0.0703125 -0.273438\nv -0.273438 -0.0703125 -0.268921\nv -0.265625 -0.0677885 -0.273438\nv -0.257812 -0.0643705 -0.273438\nv 0.4375 -0.064437 -0.273438\nv 0.447256 -0.0703125 -0.273438\nv 0.445312 -0.0695942 -0.273438\nv 0.487403 -0.0703125 -0.273438\nv 0.492188 -0.0646199 -0.273438\nv -0.301889 -0.0625 -0.273438\nv -0.25503 -0.0625 -0.273438\nv -0.257812 -0.0625 -0.266846\nv -0.25 -0.0561266 -0.273438\nv 0.433906 -0.0625 -0.273438\nv 0.494038 -0.0625 -0.273438\nv -0.303964 -0.0546875 -0.273438\nv -0.304688 -0.0520695 -0.273438\nv -0.249177 -0.0546875 -0.273438\nv -0.25 -0.0546875 -0.271292\nv 0.432113 -0.0546875 -0.273438\nv 0.496903 -0.0546875 -0.273438\nv -0.305774 -0.046875 -0.273438\nv -0.246539 -0.046875 -0.273438\nv 0.43035 -0.046875 -0.273438\nv 0.499072 -0.046875 -0.273438\nv 0.5 -0.0423869 -0.273438\nv -0.307283 -0.0390625 -0.273438\nv -0.244722 -0.0390625 -0.273438\nv 0.430085 -0.0390625 -0.273438\nv 0.500547 -0.0390625 -0.273438\nv 0.5 -0.0390625 -0.268544\nv -0.308036 -0.03125 -0.273438\nv -0.243494 -0.03125 -0.273438\nv 0.432704 -0.03125 -0.273438\nv 0.501373 -0.03125 -0.273438\nv -0.308597 -0.0234375 -0.273438\nv -0.242232 -0.0234375 -0.273438\nv -0.242188 -0.0232693 -0.273438\nv 0.433923 -0.0234375 -0.273438\nv 0.501708 -0.0234375 -0.273438\nv -0.309379 -0.015625 -0.273438\nv -0.239056 -0.015625 -0.273438\nv -0.242188 -0.015625 -0.269704\nv 0.434556 -0.015625 -0.273438\nv 0.501233 -0.015625 -0.273438\nv -0.309788 -0.0078125 -0.273438\nv -0.236895 -0.0078125 -0.273438\nv -0.242188 -0.0078125 -0.267391\nv -0.234375 -0.00146932 -0.273438\nv 0.434398 -0.0078125 -0.273438\nv 0.500441 -0.0078125 -0.273438\nv -0.309465 0 -0.273438\nv -0.233624 0 -0.273438\nv -0.234375 0 -0.272805\nv -0.226562 0.00731906 -0.273438\nv 0.433847 0 -0.273438\nv 0.50033 0 -0.273438\nv -0.308223 0.0078125 -0.273438\nv -0.226131 0.0078125 -0.273438\nv -0.226562 0.0078125 -0.27301\nv -0.21875 0.0136546 -0.273438\nv 0.431873 0.0078125 -0.273438\nv 0.429688 0.0132857 -0.273438\nv 0.500116 0.0078125 -0.273438\nv 0.5 0.0109389 -0.273438\nv 0.5 0.0078125 -0.270579\nv -0.306835 0.015625 -0.273438\nv -0.216087 0.015625 -0.273438\nv -0.21875 0.015625 -0.270464\nv -0.210938 0.018113 -0.273438\nv -0.203125 0.0222768 -0.273438\nv 0.428097 0.015625 -0.273438\nv 0.421875 0.019552 -0.273438\nv 0.429688 0.015625 -0.270795\nv 0.499806 0.015625 -0.273438\nv -0.305527 0.0234375 -0.273438\nv -0.304688 0.028547 -0.273438\nv -0.200217 0.0234375 -0.273438\nv -0.203125 0.0234375 -0.270326\nv -0.195312 0.0246917 -0.273438\nv -0.1875 0.0265133 -0.273438\nv -0.179688 0.0267028 -0.273438\nv -0.171875 0.0267379 -0.273438\nv -0.164062 0.0265745 -0.273438\nv -0.15625 0.0263376 -0.273438\nv -0.148438 0.0261842 -0.273438\nv -0.140625 0.0261333 -0.273438\nv -0.132812 0.0261739 -0.273438\nv -0.125 0.0263026 -0.273438\nv -0.117188 0.0263692 -0.273438\nv -0.109375 0.0265371 -0.273438\nv -0.101562 0.0267969 -0.273438\nv -0.09375 0.0269714 -0.273438\nv -0.0859375 0.0270863 -0.273438\nv -0.078125 0.0271726 -0.273438\nv -0.0703125 0.0271212 -0.273438\nv -0.0625 0.0269683 -0.273438\nv -0.0546875 0.0268329 -0.273438\nv -0.046875 0.026715 -0.273438\nv -0.0390625 0.0265619 -0.273438\nv -0.03125 0.0263937 -0.273438\nv -0.0234375 0.0262766 -0.273438\nv -0.015625 0.0262765 -0.273438\nv -0.0078125 0.026285 -0.273438\nv 0 0.0262598 -0.273438\nv 0.0078125 0.026137 -0.273438\nv 0.015625 0.0260801 -0.273438\nv 0.0234375 0.0260989 -0.273438\nv 0.03125 0.026136 -0.273438\nv 0.0390625 0.0261387 -0.273438\nv 0.046875 0.0261395 -0.273438\nv 0.0546875 0.0261375 -0.273438\nv 0.0625 0.0261507 -0.273438\nv 0.0703125 0.0261598 -0.273438\nv 0.078125 0.0261925 -0.273438\nv 0.0859375 0.0261947 -0.273438\nv 0.09375 0.026209 -0.273438\nv 0.101562 0.0262206 -0.273438\nv 0.109375 0.0262312 -0.273438\nv 0.117188 0.0262467 -0.273438\nv 0.125 0.0262097 -0.273438\nv 0.132812 0.0261957 -0.273438\nv 0.140625 0.0261972 -0.273438\nv 0.148438 0.0261988 -0.273438\nv 0.15625 0.0261858 -0.273438\nv 0.164062 0.0261707 -0.273438\nv 0.171875 0.0261837 -0.273438\nv 0.179688 0.0261987 -0.273438\nv 0.1875 0.0261884 -0.273438\nv 0.195312 0.0261785 -0.273438\nv 0.203125 0.0261788 -0.273438\nv 0.210938 0.0262503 -0.273438\nv 0.21875 0.026281 -0.273438\nv 0.226562 0.0263517 -0.273438\nv 0.234375 0.0264561 -0.273438\nv 0.242188 0.0265669 -0.273438\nv 0.25 0.0266777 -0.273438\nv 0.257812 0.0267658 -0.273438\nv 0.265625 0.0268515 -0.273438\nv 0.273438 0.0269129 -0.273438\nv 0.28125 0.0269672 -0.273438\nv 0.289062 0.0270305 -0.273438\nv 0.296875 0.0272345 -0.273438\nv 0.304688 0.0273886 -0.273438\nv 0.3125 0.0275317 -0.273438\nv 0.320312 0.0276704 -0.273438\nv 0.328125 0.0278932 -0.273438\nv 0.335938 0.0281971 -0.273438\nv 0.34375 0.0285632 -0.273438\nv 0.351562 0.0287732 -0.273438\nv 0.359375 0.0288554 -0.273438\nv 0.367188 0.0287918 -0.273438\nv 0.375 0.0286868 -0.273438\nv 0.382812 0.0284208 -0.273438\nv 0.390625 0.0276288 -0.273438\nv 0.398438 0.0266947 -0.273438\nv 0.40625 0.0254759 -0.273438\nv 0.415415 0.0234375 -0.273438\nv 0.414062 0.0238453 -0.273438\nv 0.499854 0.0234375 -0.273438\nv -0.304206 0.03125 -0.273438\nv 0.4976 0.03125 -0.273438\nv -0.302363 0.0390625 -0.273438\nv 0.494567 0.0390625 -0.273438\nv 0.492188 0.0441609 -0.273438\nv -0.300212 0.046875 -0.273438\nv 0.491002 0.046875 -0.273438\nv 0.484375 0.0545516 -0.273438\nv -0.298114 0.0546875 -0.273438\nv -0.296875 0.0577404 -0.273438\nv 0.484206 0.0546875 -0.273438\nv 0.476562 0.0603993 -0.273438\nv 0.484375 0.0546875 -0.271414\nv -0.293262 0.0625 -0.273438\nv -0.289062 0.0649042 -0.273438\nv -0.28125 0.0670562 -0.273438\nv -0.273438 0.0686784 -0.273438\nv 0.40625 0.0699947 -0.273438\nv 0.414062 0.0697652 -0.273438\nv 0.421875 0.0696187 -0.273438\nv 0.429688 0.0694646 -0.273438\nv 0.4375 0.0692615 -0.273438\nv 0.445312 0.0683143 -0.273438\nv 0.453125 0.0663057 -0.273438\nv 0.460938 0.0646294 -0.273438\nv 0.47238 0.0625 -0.273438\nv 0.46875 0.0641855 -0.273438\nv -0.269003 0.0703125 -0.273438\nv -0.265625 0.0715336 -0.273438\nv -0.257812 0.0781151 -0.273438\nv -0.210938 0.0778806 -0.273438\nv -0.203125 0.0772777 -0.273438\nv -0.195312 0.0766852 -0.273438\nv -0.1875 0.0766531 -0.273438\nv -0.179688 0.0763932 -0.273438\nv -0.171875 0.0761088 -0.273438\nv -0.164062 0.0758386 -0.273438\nv -0.15625 0.0756435 -0.273438\nv -0.148438 0.0753523 -0.273438\nv -0.140625 0.0753153 -0.273438\nv -0.132812 0.0752468 -0.273438\nv -0.125 0.0751974 -0.273438\nv -0.117188 0.0750709 -0.273438\nv -0.109375 0.0749452 -0.273438\nv -0.101562 0.0748838 -0.273438\nv -0.09375 0.0748948 -0.273438\nv -0.0859375 0.074944 -0.273438\nv -0.078125 0.074904 -0.273438\nv -0.0703125 0.0747908 -0.273438\nv -0.0625 0.0746804 -0.273438\nv -0.0546875 0.0745413 -0.273438\nv -0.046875 0.0744183 -0.273438\nv -0.0390625 0.074358 -0.273438\nv -0.03125 0.0742724 -0.273438\nv -0.0234375 0.0741267 -0.273438\nv -0.015625 0.0739558 -0.273438\nv -0.0078125 0.0737277 -0.273438\nv 0 0.0736245 -0.273438\nv 0.0078125 0.0735257 -0.273438\nv 0.015625 0.0734652 -0.273438\nv 0.0234375 0.0734337 -0.273438\nv 0.03125 0.0733823 -0.273438\nv 0.0390625 0.0732626 -0.273438\nv 0.046875 0.0731669 -0.273438\nv 0.0546875 0.0730695 -0.273438\nv 0.0625 0.0730049 -0.273438\nv 0.0703125 0.0729477 -0.273438\nv 0.078125 0.0728926 -0.273438\nv 0.0859375 0.072909 -0.273438\nv 0.09375 0.0729459 -0.273438\nv 0.101562 0.0730053 -0.273438\nv 0.109375 0.0730616 -0.273438\nv 0.117188 0.0731232 -0.273438\nv 0.125 0.0731717 -0.273438\nv 0.132812 0.0731762 -0.273438\nv 0.140625 0.0732234 -0.273438\nv 0.148438 0.0732936 -0.273438\nv 0.15625 0.0733478 -0.273438\nv 0.164062 0.073398 -0.273438\nv 0.171875 0.0734317 -0.273438\nv 0.179688 0.0734659 -0.273438\nv 0.1875 0.0734222 -0.273438\nv 0.195312 0.0734047 -0.273438\nv 0.203125 0.0733957 -0.273438\nv 0.210938 0.0733865 -0.273438\nv 0.21875 0.0732618 -0.273438\nv 0.226562 0.0730865 -0.273438\nv 0.234375 0.0729547 -0.273438\nv 0.242188 0.0728633 -0.273438\nv 0.25 0.0727943 -0.273438\nv 0.257812 0.0727258 -0.273438\nv 0.265625 0.0726495 -0.273438\nv 0.273438 0.0725648 -0.273438\nv 0.28125 0.0724879 -0.273438\nv 0.289062 0.072419 -0.273438\nv 0.296875 0.072417 -0.273438\nv 0.304688 0.0723717 -0.273438\nv 0.3125 0.0722594 -0.273438\nv 0.320312 0.0721532 -0.273438\nv 0.328125 0.0720714 -0.273438\nv 0.335938 0.0720055 -0.273438\nv 0.34375 0.0718299 -0.273438\nv 0.351562 0.0715926 -0.273438\nv 0.359375 0.0713605 -0.273438\nv 0.367188 0.0711676 -0.273438\nv 0.375 0.0710209 -0.273438\nv 0.382812 0.0708611 -0.273438\nv 0.390625 0.0706517 -0.273438\nv 0.399672 0.0703125 -0.273438\nv 0.398438 0.0703699 -0.273438\nv -0.257794 0.078125 -0.273438\nv -0.25 0.0819935 -0.273438\nv -0.242188 0.0825737 -0.273438\nv -0.234375 0.0815415 -0.273438\nv -0.226562 0.081054 -0.273438\nv -0.211957 0.078125 -0.273438\nv -0.21875 0.0798026 -0.273438\nv -0.28125 0.153316 -0.273438\nv -0.273438 0.15432 -0.273438\nv -0.284861 0.15625 -0.273438\nv -0.289062 0.159134 -0.273438\nv -0.28125 0.15625 -0.26832\nv -0.270725 0.15625 -0.273438\nv -0.273438 0.15625 -0.269937\nv -0.265625 0.159758 -0.273438\nv -0.2926 0.164062 -0.273438\nv -0.261433 0.164062 -0.273438\nv -0.257812 0.166919 -0.273438\nv -0.295033 0.171875 -0.273438\nv -0.296875 0.179489 -0.273438\nv -0.254389 0.171875 -0.273438\nv -0.25 0.177025 -0.273438\nv -0.296919 0.179688 -0.273438\nv -0.247619 0.179688 -0.273438\nv -0.242188 0.185732 -0.273438\nv -0.298846 0.1875 -0.273438\nv -0.240927 0.1875 -0.273438\nv -0.300524 0.195312 -0.273438\nv -0.237365 0.195312 -0.273438\nv -0.301492 0.203125 -0.273438\nv -0.236643 0.203125 -0.273438\nv -0.301951 0.210938 -0.273438\nv -0.235299 0.210938 -0.273438\nv -0.234375 0.217044 -0.273438\nv -0.302205 0.21875 -0.273438\nv -0.234127 0.21875 -0.273438\nv -0.234375 0.21875 -0.272296\nv -0.302258 0.226562 -0.273438\nv -0.233569 0.226562 -0.273438\nv -0.234375 0.226562 -0.269834\nv -0.30212 0.234375 -0.273438\nv -0.23319 0.234375 -0.273438\nv -0.234375 0.234375 -0.268274\nv -0.301936 0.242188 -0.273438\nv -0.232991 0.242188 -0.273438\nv -0.234375 0.242188 -0.267829\nv -0.301732 0.25 -0.273438\nv -0.23349 0.25 -0.273438\nv -0.234375 0.25 -0.26979\nv -0.301284 0.257812 -0.273438\nv -0.233994 0.257812 -0.273438\nv -0.234375 0.263638 -0.273438\nv -0.234375 0.257812 -0.271841\nv -0.300462 0.265625 -0.273438\nv -0.234527 0.265625 -0.273438\nv -0.299453 0.273438 -0.273438\nv -0.23512 0.273438 -0.273438\nv -0.297727 0.28125 -0.273438\nv -0.296875 0.284233 -0.273438\nv -0.235889 0.28125 -0.273438\nv -0.295479 0.289062 -0.273438\nv -0.237478 0.289062 -0.273438\nv -0.293035 0.296875 -0.273438\nv -0.239758 0.296875 -0.273438\nv -0.242188 0.301094 -0.273438\nv -0.242188 0.296875 -0.266139\nv -0.290504 0.304688 -0.273438\nv -0.289062 0.308844 -0.273438\nv -0.244726 0.304688 -0.273438\nv -0.287395 0.3125 -0.273438\nv -0.249162 0.3125 -0.273438\nv -0.25 0.313831 -0.273438\nv -0.25 0.3125 -0.271462\nv -0.284525 0.320312 -0.273438\nv -0.255908 0.320312 -0.273438\nv -0.257812 0.321473 -0.273438\nv -0.257812 0.320312 -0.270013\nv -0.282861 0.328125 -0.273438\nv -0.28125 0.335159 -0.273438\nv -0.28125 0.328125 -0.267134\nv -0.264936 0.328125 -0.273438\nv -0.265625 0.332198 -0.273438\nv -0.265625 0.328125 -0.271809\nv -0.28075 0.335938 -0.273438\nv -0.266903 0.335938 -0.273438\nv -0.273438 0.335938 -0.267476\nv -0.276068 0.34375 -0.273438\nv -0.271553 0.34375 -0.273438\nv -0.273438 0.34375 -0.271602\nv -0.275197 0.351562 -0.273438\nv -0.27264 0.351562 -0.273438\nv -0.273438 0.351562 -0.272712\nv -0.2765 0.359375 -0.273438\nv -0.28125 0.363038 -0.273438\nv -0.272502 0.359375 -0.273438\nv -0.273438 0.359375 -0.272557\nv -0.282975 0.367188 -0.273438\nv -0.28125 0.367188 -0.27169\nv -0.270861 0.367188 -0.273438\nv -0.273438 0.367188 -0.270462\nv -0.285591 0.375 -0.273438\nv -0.28125 0.375 -0.269395\nv -0.26869 0.375 -0.273438\nv -0.273438 0.375 -0.268077\nv -0.28627 0.382812 -0.273438\nv -0.28125 0.382812 -0.268976\nv -0.266945 0.382812 -0.273438\nv -0.273438 0.382812 -0.26697\nv -0.286436 0.390625 -0.273438\nv -0.28125 0.390625 -0.268785\nv -0.266261 0.390625 -0.273438\nv -0.273438 0.390625 -0.267059\nv -0.265625 0.39441 -0.273438\nv -0.285585 0.398438 -0.273438\nv -0.28125 0.398438 -0.269094\nv -0.273438 0.398438 -0.26661\nv -0.265022 0.398438 -0.273438\nv -0.265625 0.402011 -0.273438\nv -0.265625 0.398438 -0.27283\nv -0.282489 0.40625 -0.273438\nv -0.28125 0.409033 -0.273438\nv -0.28125 0.40625 -0.272196\nv -0.266625 0.40625 -0.273438\nv -0.273438 0.40625 -0.269324\nv -0.276395 0.414062 -0.273438\nv -0.271314 0.414062 -0.273438\nv -0.273438 0.41712 -0.273438\nv -0.273438 0.414062 -0.272123\nv -0.296875 0.6064 -0.273438\nv -0.289062 0.607291 -0.273438\nv -0.299181 0.609375 -0.273438\nv -0.304688 0.614319 -0.273438\nv -0.296875 0.609375 -0.267299\nv -0.287466 0.609375 -0.273438\nv -0.289062 0.609375 -0.269037\nv -0.28125 0.616853 -0.273438\nv -0.306848 0.617188 -0.273438\nv -0.281058 0.617188 -0.273438\nv -0.28125 0.617188 -0.272796\nv -0.31055 0.625 -0.273438\nv -0.3125 0.627616 -0.273438\nv -0.276034 0.625 -0.273438\nv -0.315739 0.632812 -0.273438\nv -0.274319 0.632812 -0.273438\nv -0.273438 0.636669 -0.273438\nv -0.31748 0.640625 -0.273438\nv -0.272573 0.640625 -0.273438\nv -0.273438 0.640625 -0.271243\nv -0.319751 0.648438 -0.273438\nv -0.320312 0.651762 -0.273438\nv -0.271208 0.648438 -0.273438\nv -0.273438 0.648438 -0.267583\nv -0.321091 0.65625 -0.273438\nv -0.270702 0.65625 -0.273438\nv -0.322215 0.664062 -0.273438\nv -0.269359 0.664062 -0.273438\nv -0.322848 0.671875 -0.273438\nv -0.268212 0.671875 -0.273438\nv -0.323255 0.679688 -0.273438\nv -0.267699 0.679688 -0.273438\nv -0.323333 0.6875 -0.273438\nv -0.267922 0.6875 -0.273438\nv -0.323321 0.695312 -0.273438\nv -0.2685 0.695312 -0.273438\nv -0.323001 0.703125 -0.273438\nv -0.269241 0.703125 -0.273438\nv -0.32254 0.710938 -0.273438\nv -0.270517 0.710938 -0.273438\nv -0.322237 0.71875 -0.273438\nv -0.272155 0.71875 -0.273438\nv -0.273438 0.723213 -0.273438\nv -0.273438 0.71875 -0.268214\nv -0.321705 0.726562 -0.273438\nv -0.274417 0.726562 -0.273438\nv -0.321175 0.734375 -0.273438\nv -0.320312 0.738781 -0.273438\nv -0.320312 0.734375 -0.268731\nv -0.277476 0.734375 -0.273438\nv -0.319499 0.742188 -0.273438\nv -0.28082 0.742188 -0.273438\nv -0.28125 0.743065 -0.273438\nv -0.28125 0.742188 -0.272116\nv -0.316811 0.75 -0.273438\nv -0.285337 0.75 -0.273438\nv -0.289062 0.753626 -0.273438\nv -0.314512 0.757812 -0.273438\nv -0.3125 0.764429 -0.273438\nv -0.293265 0.757812 -0.273438\nv -0.296875 0.761715 -0.273438\nv -0.311196 0.765625 -0.273438\nv -0.301504 0.765625 -0.273438\nv -0.304688 0.767921 -0.273438\nv 0.015625 -0.547651 -0.265625\nv 0.0234375 -0.547831 -0.265625\nv 0.03125 -0.547588 -0.265625\nv 0.0390625 -0.54721 -0.265625\nv 0 -0.541791 -0.265625\nv 0.00786569 -0.546875 -0.265625\nv 0.0078125 -0.546859 -0.265625\nv 0.0078125 -0.546875 -0.265582\nv 0.0449815 -0.546875 -0.265625\nv 0.046875 -0.546703 -0.265625\nv 0.046875 -0.546875 -0.264568\nv 0.0546875 -0.545567 -0.265625\nv 0.0625 -0.544074 -0.265625\nv 0.0703125 -0.542709 -0.265625\nv 0.078125 -0.541137 -0.265625\nv -0.00257655 -0.539062 -0.265625\nv 0.0858529 -0.539062 -0.265625\nv 0.0859375 -0.539033 -0.265625\nv 0.09375 -0.535684 -0.265625\nv 0.101562 -0.531654 -0.265625\nv -0.00558673 -0.53125 -0.265625\nv 0.102075 -0.53125 -0.265625\nv 0.101562 -0.53125 -0.263662\nv 0.109375 -0.526672 -0.265625\nv -0.00348542 -0.523438 -0.265625\nv 0 -0.516432 -0.265625\nv 0.113972 -0.523438 -0.265625\nv 0.117188 -0.520452 -0.265625\nv 0.000508408 -0.515625 -0.265625\nv 0.121751 -0.515625 -0.265625\nv 0.125 -0.512007 -0.265625\nv 0.00481685 -0.507812 -0.265625\nv 0.0078125 -0.507028 -0.265625\nv 0.0078125 -0.507812 -0.259936\nv 0.015625 -0.50467 -0.265625\nv 0.0234375 -0.501758 -0.265625\nv 0.128552 -0.507812 -0.265625\nv 0.0270184 -0.5 -0.265625\nv 0.03125 -0.497914 -0.265625\nv 0.0390625 -0.495056 -0.265625\nv 0.128251 -0.5 -0.265625\nv 0.125 -0.493789 -0.265625\nv 0.0450912 -0.492188 -0.265625\nv 0.046875 -0.491419 -0.265625\nv 0.0546875 -0.489301 -0.265625\nv 0.0625 -0.487369 -0.265625\nv 0.0703125 -0.485635 -0.265625\nv 0.123612 -0.492188 -0.265625\nv 0.117188 -0.486794 -0.265625\nv 0.0769137 -0.484375 -0.265625\nv 0.078125 -0.484136 -0.265625\nv 0.078125 -0.484375 -0.262249\nv 0.0859375 -0.483265 -0.265625\nv 0.09375 -0.483128 -0.265625\nv 0.101562 -0.483366 -0.265625\nv 0.110673 -0.484375 -0.265625\nv 0.109375 -0.484108 -0.265625\nv 0.109375 -0.484375 -0.262932\nv -0.28125 -0.0706918 -0.265625\nv 0.453125 -0.071302 -0.265625\nv 0.460938 -0.0729828 -0.265625\nv 0.46875 -0.0723596 -0.265625\nv 0.476562 -0.0733257 -0.265625\nv 0.484375 -0.0706023 -0.265625\nv -0.296875 -0.0682864 -0.265625\nv -0.285841 -0.0703125 -0.265625\nv -0.289062 -0.0699443 -0.265625\nv -0.2789 -0.0703125 -0.265625\nv -0.28125 -0.0703125 -0.264199\nv -0.273438 -0.0691173 -0.265625\nv -0.265625 -0.0655444 -0.265625\nv 0.4375 -0.0631058 -0.265625\nv 0.450312 -0.0703125 -0.265625\nv 0.445312 -0.0682418 -0.265625\nv 0.484695 -0.0703125 -0.265625\nv 0.484375 -0.0703125 -0.264802\nv 0.492188 -0.0628203 -0.265625\nv -0.300416 -0.0625 -0.265625\nv -0.258666 -0.0625 -0.265625\nv -0.257812 -0.0619473 -0.265625\nv 0.436103 -0.0625 -0.265625\nv 0.492495 -0.0625 -0.265625\nv 0.492188 -0.0625 -0.263465\nv -0.302822 -0.0546875 -0.265625\nv -0.304688 -0.0491471 -0.265625\nv -0.252399 -0.0546875 -0.265625\nv -0.25 -0.048865 -0.265625\nv 0.433456 -0.0546875 -0.265625\nv 0.495729 -0.0546875 -0.265625\nv -0.30524 -0.046875 -0.265625\nv -0.304688 -0.046875 -0.261612\nv -0.249405 -0.046875 -0.265625\nv -0.25 -0.046875 -0.263933\nv 0.431701 -0.046875 -0.265625\nv 0.49804 -0.046875 -0.265625\nv -0.306812 -0.0390625 -0.265625\nv -0.247705 -0.0390625 -0.265625\nv -0.25 -0.0390625 -0.25909\nv 0.432792 -0.0390625 -0.265625\nv 0.499565 -0.0390625 -0.265625\nv 0.5 -0.035554 -0.265625\nv -0.307529 -0.03125 -0.265625\nv -0.246616 -0.03125 -0.265625\nv 0.434624 -0.03125 -0.265625\nv 0.500418 -0.03125 -0.265625\nv 0.5 -0.03125 -0.262218\nv -0.307741 -0.0234375 -0.265625\nv -0.245656 -0.0234375 -0.265625\nv 0.436516 -0.0234375 -0.265625\nv 0.4375 -0.0234375 -0.261064\nv 0.500933 -0.0234375 -0.265625\nv -0.3085 -0.015625 -0.265625\nv -0.244559 -0.015625 -0.265625\nv 0.437082 -0.015625 -0.265625\nv 0.4375 -0.015625 -0.26427\nv 0.500923 -0.015625 -0.265625\nv -0.308949 -0.0078125 -0.265625\nv -0.243898 -0.0078125 -0.265625\nv -0.242188 -0.00228175 -0.265625\nv 0.436118 -0.0078125 -0.265625\nv 0.4375 -0.0078125 -0.260159\nv 0.500384 -0.0078125 -0.265625\nv -0.308615 0 -0.265625\nv -0.241502 0 -0.265625\nv -0.242188 0 -0.264872\nv -0.234375 0.00770397 -0.265625\nv 0.435516 0 -0.265625\nv 0.500149 0 -0.265625\nv 0.5 0.00331304 -0.265625\nv 0.5 0 -0.261215\nv -0.307549 0.0078125 -0.265625\nv -0.242188 0.0078125 -0.25819\nv -0.234263 0.0078125 -0.265625\nv -0.234375 0.0078125 -0.265515\nv -0.226562 0.0138134 -0.265625\nv 0.434091 0.0078125 -0.265625\nv 0.49979 0.0078125 -0.265625\nv -0.306124 0.015625 -0.265625\nv -0.22377 0.015625 -0.265625\nv -0.226562 0.015625 -0.263007\nv -0.21875 0.0177553 -0.265625\nv -0.210938 0.0217859 -0.265625\nv 0.421875 0.022269 -0.265625\nv 0.431562 0.015625 -0.265625\nv 0.429688 0.0176839 -0.265625\nv 0.499546 0.015625 -0.265625\nv -0.304736 0.0234375 -0.265625\nv -0.304688 0.023739 -0.265625\nv -0.304688 0.0234375 -0.265248\nv -0.207095 0.0234375 -0.265625\nv -0.210938 0.0234375 -0.261971\nv -0.203125 0.0245616 -0.265625\nv -0.195312 0.026184 -0.265625\nv -0.1875 0.0274083 -0.265625\nv -0.179688 0.0275569 -0.265625\nv -0.171875 0.0272625 -0.265625\nv -0.164062 0.0270457 -0.265625\nv -0.15625 0.0267496 -0.265625\nv -0.148438 0.0265756 -0.265625\nv -0.140625 0.0264708 -0.265625\nv -0.132812 0.0265074 -0.265625\nv -0.125 0.0265896 -0.265625\nv -0.117188 0.0267397 -0.265625\nv -0.109375 0.0269282 -0.265625\nv -0.101562 0.0271491 -0.265625\nv -0.09375 0.027327 -0.265625\nv -0.0859375 0.0274056 -0.265625\nv -0.078125 0.0274689 -0.265625\nv -0.0703125 0.0273067 -0.265625\nv -0.0625 0.0270974 -0.265625\nv -0.0546875 0.0268822 -0.265625\nv -0.046875 0.0267019 -0.265625\nv -0.0390625 0.0265323 -0.265625\nv -0.03125 0.0263728 -0.265625\nv -0.0234375 0.0262281 -0.265625\nv -0.015625 0.026156 -0.265625\nv -0.0078125 0.0261504 -0.265625\nv 0 0.0261216 -0.265625\nv 0.0078125 0.025984 -0.265625\nv 0.015625 0.0259682 -0.265625\nv 0.0234375 0.0260219 -0.265625\nv 0.03125 0.0260672 -0.265625\nv 0.0390625 0.0260809 -0.265625\nv 0.046875 0.0261106 -0.265625\nv 0.0546875 0.0261462 -0.265625\nv 0.0625 0.0261775 -0.265625\nv 0.0703125 0.0262214 -0.265625\nv 0.078125 0.026256 -0.265625\nv 0.0859375 0.0262559 -0.265625\nv 0.09375 0.0262495 -0.265625\nv 0.101562 0.0262607 -0.265625\nv 0.109375 0.0262873 -0.265625\nv 0.117188 0.0262935 -0.265625\nv 0.125 0.0262792 -0.265625\nv 0.132812 0.0262576 -0.265625\nv 0.140625 0.0262461 -0.265625\nv 0.148438 0.026215 -0.265625\nv 0.15625 0.0261813 -0.265625\nv 0.164062 0.0261749 -0.265625\nv 0.171875 0.0261941 -0.265625\nv 0.179688 0.0262476 -0.265625\nv 0.1875 0.0263007 -0.265625\nv 0.195312 0.0263456 -0.265625\nv 0.203125 0.0264095 -0.265625\nv 0.210938 0.0264678 -0.265625\nv 0.21875 0.0265067 -0.265625\nv 0.226562 0.0265886 -0.265625\nv 0.234375 0.0266982 -0.265625\nv 0.242188 0.0268242 -0.265625\nv 0.25 0.0269515 -0.265625\nv 0.257812 0.0270701 -0.265625\nv 0.265625 0.0271582 -0.265625\nv 0.273438 0.0271978 -0.265625\nv 0.28125 0.0272292 -0.265625\nv 0.289062 0.0272442 -0.265625\nv 0.296875 0.027266 -0.265625\nv 0.304688 0.0273717 -0.265625\nv 0.3125 0.0275347 -0.265625\nv 0.320312 0.0276592 -0.265625\nv 0.328125 0.0277776 -0.265625\nv 0.335938 0.0280678 -0.265625\nv 0.34375 0.0283989 -0.265625\nv 0.351562 0.0287459 -0.265625\nv 0.359375 0.028977 -0.265625\nv 0.367188 0.028965 -0.265625\nv 0.375 0.028883 -0.265625\nv 0.382812 0.0285722 -0.265625\nv 0.390625 0.0277771 -0.265625\nv 0.398438 0.0270176 -0.265625\nv 0.40625 0.0260559 -0.265625\nv 0.419278 0.0234375 -0.265625\nv 0.414062 0.024679 -0.265625\nv 0.421875 0.0234375 -0.260765\nv 0.499597 0.0234375 -0.265625\nv -0.303377 0.03125 -0.265625\nv 0.497381 0.03125 -0.265625\nv -0.30145 0.0390625 -0.265625\nv 0.494345 0.0390625 -0.265625\nv 0.492188 0.0441593 -0.265625\nv -0.299062 0.046875 -0.265625\nv 0.491104 0.046875 -0.265625\nv -0.296993 0.0546875 -0.265625\nv -0.296875 0.0549956 -0.265625\nv -0.296875 0.0546875 -0.264883\nv 0.476562 0.0606917 -0.265625\nv 0.484789 0.0546875 -0.265625\nv 0.484375 0.0550316 -0.265625\nv -0.291382 0.0625 -0.265625\nv -0.289062 0.0637382 -0.265625\nv -0.28125 0.0656322 -0.265625\nv -0.273438 0.0679471 -0.265625\nv 0.40625 0.070248 -0.265625\nv 0.414062 0.0698946 -0.265625\nv 0.421875 0.0696861 -0.265625\nv 0.429688 0.0694911 -0.265625\nv 0.4375 0.0693296 -0.265625\nv 0.445312 0.0683259 -0.265625\nv 0.453125 0.0662914 -0.265625\nv 0.460938 0.0645831 -0.265625\nv 0.472667 0.0625 -0.265625\nv 0.46875 0.0641718 -0.265625\nv -0.267406 0.0703125 -0.265625\nv -0.265625 0.070931 -0.265625\nv -0.257812 0.0775388 -0.265625\nv -0.210938 0.0780778 -0.265625\nv -0.203125 0.077149 -0.265625\nv -0.195312 0.0768056 -0.265625\nv -0.1875 0.0769893 -0.265625\nv -0.179688 0.0768579 -0.265625\nv -0.171875 0.0764585 -0.265625\nv -0.164062 0.0762075 -0.265625\nv -0.15625 0.0758201 -0.265625\nv -0.148438 0.0754142 -0.265625\nv -0.140625 0.0752568 -0.265625\nv -0.132812 0.0751346 -0.265625\nv -0.125 0.0750375 -0.265625\nv -0.117188 0.0749639 -0.265625\nv -0.109375 0.0747979 -0.265625\nv -0.101562 0.0746596 -0.265625\nv -0.09375 0.0746481 -0.265625\nv -0.0859375 0.0747299 -0.265625\nv -0.078125 0.0747253 -0.265625\nv -0.0703125 0.0746213 -0.265625\nv -0.0625 0.0745674 -0.265625\nv -0.0546875 0.0744821 -0.265625\nv -0.046875 0.0744075 -0.265625\nv -0.0390625 0.0743474 -0.265625\nv -0.03125 0.0743115 -0.265625\nv -0.0234375 0.0741894 -0.265625\nv -0.015625 0.0740623 -0.265625\nv -0.0078125 0.0738813 -0.265625\nv 0 0.0737665 -0.265625\nv 0.0078125 0.0736553 -0.265625\nv 0.015625 0.0736038 -0.265625\nv 0.0234375 0.07354 -0.265625\nv 0.03125 0.0734396 -0.265625\nv 0.0390625 0.073327 -0.265625\nv 0.046875 0.0731993 -0.265625\nv 0.0546875 0.0730973 -0.265625\nv 0.0625 0.0730062 -0.265625\nv 0.0703125 0.0729421 -0.265625\nv 0.078125 0.0729082 -0.265625\nv 0.0859375 0.07293 -0.265625\nv 0.09375 0.0729834 -0.265625\nv 0.101562 0.0730475 -0.265625\nv 0.109375 0.0731214 -0.265625\nv 0.117188 0.0731664 -0.265625\nv 0.125 0.073203 -0.265625\nv 0.132812 0.0732197 -0.265625\nv 0.140625 0.0732655 -0.265625\nv 0.148438 0.0733163 -0.265625\nv 0.15625 0.0733568 -0.265625\nv 0.164062 0.0734 -0.265625\nv 0.171875 0.0734429 -0.265625\nv 0.179688 0.0734344 -0.265625\nv 0.1875 0.0734246 -0.265625\nv 0.195312 0.0734124 -0.265625\nv 0.203125 0.0734237 -0.265625\nv 0.210938 0.0733815 -0.265625\nv 0.21875 0.0732705 -0.265625\nv 0.226562 0.0731529 -0.265625\nv 0.234375 0.0730716 -0.265625\nv 0.242188 0.0729969 -0.265625\nv 0.25 0.0729243 -0.265625\nv 0.257812 0.0728605 -0.265625\nv 0.265625 0.0727833 -0.265625\nv 0.273438 0.0727187 -0.265625\nv 0.28125 0.0726773 -0.265625\nv 0.289062 0.0726675 -0.265625\nv 0.296875 0.072671 -0.265625\nv 0.304688 0.0725668 -0.265625\nv 0.3125 0.0724985 -0.265625\nv 0.320312 0.0724438 -0.265625\nv 0.328125 0.072382 -0.265625\nv 0.335938 0.0724029 -0.265625\nv 0.34375 0.072238 -0.265625\nv 0.351562 0.0719876 -0.265625\nv 0.359375 0.0717328 -0.265625\nv 0.367188 0.0715261 -0.265625\nv 0.375 0.0713522 -0.265625\nv 0.382812 0.0710858 -0.265625\nv 0.390625 0.0708716 -0.265625\nv 0.404884 0.0703125 -0.265625\nv 0.398438 0.0706056 -0.265625\nv 0.40625 0.0703125 -0.262493\nv -0.256761 0.078125 -0.265625\nv -0.25 0.0814433 -0.265625\nv -0.242188 0.0827879 -0.265625\nv -0.234375 0.0821447 -0.265625\nv -0.226562 0.0813296 -0.265625\nv -0.211166 0.078125 -0.265625\nv -0.21875 0.0797439 -0.265625\nv -0.289062 0.161319 -0.265625\nv -0.28125 0.157219 -0.265625\nv -0.273438 0.158076 -0.265625\nv -0.265625 0.162616 -0.265625\nv -0.292266 0.164062 -0.265625\nv -0.263996 0.164062 -0.265625\nv -0.257812 0.168195 -0.265625\nv -0.295477 0.171875 -0.265625\nv -0.296875 0.177167 -0.265625\nv -0.25491 0.171875 -0.265625\nv -0.25 0.17755 -0.265625\nv -0.297516 0.179688 -0.265625\nv -0.247885 0.179688 -0.265625\nv -0.242188 0.185877 -0.265625\nv -0.299654 0.1875 -0.265625\nv -0.241181 0.1875 -0.265625\nv -0.301378 0.195312 -0.265625\nv -0.238707 0.195312 -0.265625\nv -0.302027 0.203125 -0.265625\nv -0.238104 0.203125 -0.265625\nv -0.302441 0.210938 -0.265625\nv -0.236883 0.210938 -0.265625\nv -0.302514 0.21875 -0.265625\nv -0.235938 0.21875 -0.265625\nv -0.30249 0.226562 -0.265625\nv -0.235377 0.226562 -0.265625\nv -0.302335 0.234375 -0.265625\nv -0.235011 0.234375 -0.265625\nv -0.302237 0.242188 -0.265625\nv -0.234954 0.242188 -0.265625\nv -0.302022 0.25 -0.265625\nv -0.235461 0.25 -0.265625\nv -0.301616 0.257812 -0.265625\nv -0.236028 0.257812 -0.265625\nv -0.300697 0.265625 -0.265625\nv -0.236619 0.265625 -0.265625\nv -0.299643 0.273438 -0.265625\nv -0.23723 0.273438 -0.265625\nv -0.297514 0.28125 -0.265625\nv -0.296875 0.283096 -0.265625\nv -0.296875 0.28125 -0.258499\nv -0.237966 0.28125 -0.265625\nv -0.294748 0.289062 -0.265625\nv -0.239463 0.289062 -0.265625\nv -0.242188 0.296492 -0.265625\nv -0.292091 0.296875 -0.265625\nv -0.242411 0.296875 -0.265625\nv -0.28934 0.304688 -0.265625\nv -0.289062 0.305274 -0.265625\nv -0.289062 0.304688 -0.261013\nv -0.247819 0.304688 -0.265625\nv -0.25 0.308448 -0.265625\nv -0.25 0.304688 -0.258106\nv -0.28481 0.3125 -0.265625\nv -0.252073 0.3125 -0.265625\nv -0.257812 0.31877 -0.265625\nv -0.281681 0.320312 -0.265625\nv -0.28125 0.32426 -0.265625\nv -0.260691 0.320312 -0.265625\nv -0.265625 0.324301 -0.265625\nv -0.279602 0.328125 -0.265625\nv -0.270264 0.328125 -0.265625\nv -0.273438 0.333129 -0.265625\nv -0.273438 0.328125 -0.261551\nv -0.304688 0.616211 -0.265625\nv -0.296875 0.609896 -0.265625\nv -0.289062 0.610497 -0.265625\nv -0.305602 0.617188 -0.265625\nv -0.304688 0.617188 -0.263707\nv -0.283564 0.617188 -0.265625\nv -0.28125 0.620334 -0.265625\nv -0.309828 0.625 -0.265625\nv -0.3125 0.62905 -0.265625\nv -0.27851 0.625 -0.265625\nv -0.28125 0.625 -0.259412\nv -0.314443 0.632812 -0.265625\nv -0.3125 0.632812 -0.259139\nv -0.276594 0.632812 -0.265625\nv -0.316228 0.640625 -0.265625\nv -0.275613 0.640625 -0.265625\nv -0.318701 0.648438 -0.265625\nv -0.320312 0.655462 -0.265625\nv -0.27416 0.648438 -0.265625\nv -0.273438 0.653132 -0.265625\nv -0.320485 0.65625 -0.265625\nv -0.320312 0.65625 -0.264539\nv -0.272957 0.65625 -0.265625\nv -0.273438 0.65625 -0.262904\nv -0.321912 0.664062 -0.265625\nv -0.271503 0.664062 -0.265625\nv -0.322254 0.671875 -0.265625\nv -0.270261 0.671875 -0.265625\nv -0.322338 0.679688 -0.265625\nv -0.269797 0.679688 -0.265625\nv -0.322275 0.6875 -0.265625\nv -0.269895 0.6875 -0.265625\nv -0.32212 0.695312 -0.265625\nv -0.270614 0.695312 -0.265625\nv -0.321752 0.703125 -0.265625\nv -0.320312 0.703125 -0.258187\nv -0.271357 0.703125 -0.265625\nv -0.321319 0.710938 -0.265625\nv -0.320312 0.710938 -0.259781\nv -0.27248 0.710938 -0.265625\nv -0.273438 0.715894 -0.265625\nv -0.273438 0.710938 -0.257998\nv -0.321016 0.71875 -0.265625\nv -0.320312 0.71875 -0.26192\nv -0.27402 0.71875 -0.265625\nv -0.320472 0.726562 -0.265625\nv -0.320312 0.728256 -0.265625\nv -0.320312 0.726562 -0.264914\nv -0.276451 0.726562 -0.265625\nv -0.319714 0.734375 -0.265625\nv -0.279934 0.734375 -0.265625\nv -0.28125 0.737433 -0.265625\nv -0.318376 0.742188 -0.265625\nv -0.283295 0.742188 -0.265625\nv -0.315479 0.75 -0.265625\nv -0.287585 0.75 -0.265625\nv -0.289062 0.751528 -0.265625\nv -0.313045 0.757812 -0.265625\nv -0.3125 0.759563 -0.265625\nv -0.3125 0.757812 -0.263438\nv -0.295389 0.757812 -0.265625\nv -0.296875 0.759519 -0.265625\nv -0.305749 0.765625 -0.265625\nv -0.304176 0.765625 -0.265625\nv -0.304688 0.765994 -0.265625\nv -0.304688 0.765625 -0.262593\nv 0.0078125 -0.547887 -0.257812\nv 0.015625 -0.548549 -0.257812\nv 0.0234375 -0.548779 -0.257812\nv 0.03125 -0.548679 -0.257812\nv 0.0390625 -0.548246 -0.257812\nv 0.046875 -0.547533 -0.257812\nv 0.00204673 -0.546875 -0.257812\nv 0 -0.545685 -0.257812\nv 0 -0.546875 -0.255699\nv 0.0525572 -0.546875 -0.257812\nv 0.0546875 -0.546512 -0.257812\nv 0.0546875 -0.546875 -0.255531\nv 0.0625 -0.544907 -0.257812\nv 0.0703125 -0.543256 -0.257812\nv 0.078125 -0.541139 -0.257812\nv -0.0066031 -0.539062 -0.257812\nv -0.0078125 -0.539062 -0.255828\nv 0.0850129 -0.539062 -0.257812\nv 0.0859375 -0.538709 -0.257812\nv 0.0859375 -0.539062 -0.2562\nv 0.09375 -0.535105 -0.257812\nv -0.00508282 -0.53125 -0.257812\nv 0.0995848 -0.53125 -0.257812\nv 0.101562 -0.530186 -0.257812\nv 0.109375 -0.525332 -0.257812\nv -0.00137675 -0.523438 -0.257812\nv 0 -0.519809 -0.257812\nv 0.112101 -0.523438 -0.257812\nv 0.117188 -0.518823 -0.257812\nv 0.0023286 -0.515625 -0.257812\nv 0.0078125 -0.508681 -0.257812\nv 0.12045 -0.515625 -0.257812\nv 0.125 -0.510821 -0.257812\nv 0.00864855 -0.507812 -0.257812\nv 0.0078125 -0.507812 -0.253646\nv 0.015625 -0.505638 -0.257812\nv 0.0234375 -0.502059 -0.257812\nv 0.127619 -0.507812 -0.257812\nv 0.0271421 -0.5 -0.257812\nv 0.03125 -0.497861 -0.257812\nv 0.0390625 -0.494332 -0.257812\nv 0.128104 -0.5 -0.257812\nv 0.125 -0.493383 -0.257812\nv 0.0441983 -0.492188 -0.257812\nv 0.046875 -0.491162 -0.257812\nv 0.0546875 -0.489062 -0.257812\nv 0.0625 -0.48739 -0.257812\nv 0.0703125 -0.485955 -0.257812\nv 0.078125 -0.484671 -0.257812\nv 0.109375 -0.484942 -0.257812\nv 0.123875 -0.492188 -0.257812\nv 0.117188 -0.487876 -0.257812\nv 0.125 -0.492188 -0.25578\nv 0.0808942 -0.484375 -0.257812\nv 0.078125 -0.484375 -0.256043\nv 0.0859375 -0.483843 -0.257812\nv 0.09375 -0.483513 -0.257812\nv 0.10632 -0.484375 -0.257812\nv 0.101562 -0.483697 -0.257812\nv 0.109375 -0.484375 -0.255189\nv 0.453125 -0.0704447 -0.257812\nv 0.460938 -0.0716955 -0.257812\nv 0.46875 -0.070749 -0.257812\nv 0.476562 -0.0708607 -0.257812\nv -0.296875 -0.0643537 -0.257812\nv -0.289062 -0.0671233 -0.257812\nv -0.28125 -0.0682218 -0.257812\nv -0.273438 -0.0670969 -0.257812\nv -0.265625 -0.0637523 -0.257812\nv 0.4375 -0.0628889 -0.257812\nv 0.452726 -0.0703125 -0.257812\nv 0.445312 -0.0670558 -0.257812\nv 0.453125 -0.0703125 -0.256469\nv 0.46875 -0.0703125 -0.255149\nv 0.478248 -0.0703125 -0.257812\nv 0.476562 -0.0703125 -0.255993\nv 0.484375 -0.0680466 -0.257812\nv -0.298336 -0.0625 -0.257812\nv -0.296875 -0.0625 -0.252559\nv -0.262878 -0.0625 -0.257812\nv -0.265625 -0.0625 -0.252801\nv -0.257812 -0.0585696 -0.257812\nv 0.43653 -0.0625 -0.257812\nv 0.491313 -0.0625 -0.257812\nv 0.492188 -0.06081 -0.257812\nv -0.301224 -0.0546875 -0.257812\nv -0.255339 -0.0546875 -0.257812\nv -0.257812 -0.0546875 -0.250375\nv 0.434019 -0.0546875 -0.257812\nv 0.494675 -0.0546875 -0.257812\nv -0.304017 -0.046875 -0.257812\nv -0.304688 -0.0445281 -0.257812\nv -0.252174 -0.046875 -0.257812\nv 0.433587 -0.046875 -0.257812\nv 0.497 -0.046875 -0.257812\nv -0.305874 -0.0390625 -0.257812\nv -0.250379 -0.0390625 -0.257812\nv -0.25 -0.0362353 -0.257812\nv 0.434274 -0.0390625 -0.257812\nv 0.498447 -0.0390625 -0.257812\nv -0.306567 -0.03125 -0.257812\nv -0.249221 -0.03125 -0.257812\nv -0.25 -0.03125 -0.255427\nv 0.43624 -0.03125 -0.257812\nv 0.4375 -0.02611 -0.257812\nv 0.4375 -0.03125 -0.251093\nv 0.49928 -0.03125 -0.257812\nv 0.5 -0.0249081 -0.257812\nv -0.306671 -0.0234375 -0.257812\nv -0.248634 -0.0234375 -0.257812\nv -0.25 -0.0234375 -0.253296\nv 0.438114 -0.0234375 -0.257812\nv 0.500131 -0.0234375 -0.257812\nv 0.5 -0.0234375 -0.256767\nv -0.307201 -0.015625 -0.257812\nv -0.248461 -0.015625 -0.257812\nv -0.25 -0.015625 -0.253664\nv 0.439026 -0.015625 -0.257812\nv 0.500346 -0.015625 -0.257812\nv 0.5 -0.015625 -0.253232\nv -0.307857 -0.0078125 -0.257812\nv -0.249848 -0.0078125 -0.257812\nv -0.25 -0.0078125 -0.257527\nv 0.438022 -0.0078125 -0.257812\nv 0.4375 -0.00273573 -0.257812\nv 0.500177 -0.0078125 -0.257812\nv 0.5 -0.00319919 -0.257812\nv 0.5 -0.0078125 -0.25435\nv -0.307664 0 -0.257812\nv -0.249502 0 -0.257812\nv -0.25 0 -0.257208\nv 0.437071 0 -0.257812\nv 0.4375 0 -0.25493\nv 0.49987 0 -0.257812\nv -0.306806 0.0078125 -0.257812\nv -0.242635 0.0078125 -0.257812\nv -0.25 0.0078125 -0.250002\nv -0.242188 0.0082112 -0.257812\nv -0.234375 0.014466 -0.257812\nv 0.435984 0.0078125 -0.257812\nv 0.4375 0.0078125 -0.250939\nv 0.499468 0.0078125 -0.257812\nv -0.305343 0.015625 -0.257812\nv -0.304688 0.018863 -0.257812\nv -0.304688 0.015625 -0.252049\nv -0.232587 0.015625 -0.257812\nv -0.234375 0.015625 -0.256065\nv -0.226562 0.0179764 -0.257812\nv -0.21875 0.0213962 -0.257812\nv 0.433398 0.015625 -0.257812\nv 0.429688 0.0196097 -0.257812\nv 0.499226 0.015625 -0.257812\nv -0.303692 0.0234375 -0.257812\nv -0.214731 0.0234375 -0.257812\nv -0.21875 0.0234375 -0.251891\nv -0.210938 0.0246013 -0.257812\nv -0.203125 0.0263365 -0.257812\nv -0.195312 0.027622 -0.257812\nv -0.1875 0.0285053 -0.257812\nv -0.179688 0.0281336 -0.257812\nv -0.171875 0.0277186 -0.257812\nv -0.164062 0.0273029 -0.257812\nv -0.15625 0.0269781 -0.257812\nv -0.148438 0.0269339 -0.257812\nv -0.140625 0.0268723 -0.257812\nv -0.132812 0.0269658 -0.257812\nv -0.125 0.0271129 -0.257812\nv -0.117188 0.0273157 -0.257812\nv -0.109375 0.027498 -0.257812\nv -0.101562 0.0275913 -0.257812\nv -0.09375 0.0276779 -0.257812\nv -0.0859375 0.0277185 -0.257812\nv -0.078125 0.027596 -0.257812\nv -0.0703125 0.0273309 -0.257812\nv -0.0625 0.0270316 -0.257812\nv -0.0546875 0.0267821 -0.257812\nv -0.046875 0.0265992 -0.257812\nv -0.0390625 0.0264252 -0.257812\nv -0.03125 0.0262781 -0.257812\nv -0.0234375 0.0261441 -0.257812\nv -0.015625 0.0260641 -0.257812\nv -0.0078125 0.0260688 -0.257812\nv 0 0.0260082 -0.257812\nv 0.0078125 0.0258785 -0.257812\nv 0.015625 0.0258694 -0.257812\nv 0.0234375 0.0259353 -0.257812\nv 0.03125 0.0259665 -0.257812\nv 0.0390625 0.0259586 -0.257812\nv 0.046875 0.0259763 -0.257812\nv 0.0546875 0.0260112 -0.257812\nv 0.0625 0.0260307 -0.257812\nv 0.0703125 0.0260427 -0.257812\nv 0.078125 0.0260582 -0.257812\nv 0.0859375 0.0260421 -0.257812\nv 0.09375 0.0260465 -0.257812\nv 0.101562 0.0260697 -0.257812\nv 0.109375 0.02611 -0.257812\nv 0.117188 0.0261031 -0.257812\nv 0.125 0.0260735 -0.257812\nv 0.132812 0.0260543 -0.257812\nv 0.140625 0.0260487 -0.257812\nv 0.148438 0.0260453 -0.257812\nv 0.15625 0.0260329 -0.257812\nv 0.164062 0.0260498 -0.257812\nv 0.171875 0.0260777 -0.257812\nv 0.179688 0.0261429 -0.257812\nv 0.1875 0.0262204 -0.257812\nv 0.195312 0.0262687 -0.257812\nv 0.203125 0.0263277 -0.257812\nv 0.210938 0.0263676 -0.257812\nv 0.21875 0.0264633 -0.257812\nv 0.226562 0.0266514 -0.257812\nv 0.234375 0.026848 -0.257812\nv 0.242188 0.0270376 -0.257812\nv 0.25 0.0271893 -0.257812\nv 0.257812 0.0273026 -0.257812\nv 0.265625 0.0273944 -0.257812\nv 0.273438 0.0274515 -0.257812\nv 0.28125 0.0274643 -0.257812\nv 0.289062 0.0274685 -0.257812\nv 0.296875 0.0274328 -0.257812\nv 0.304688 0.027396 -0.257812\nv 0.3125 0.0274195 -0.257812\nv 0.320312 0.0275884 -0.257812\nv 0.328125 0.0278081 -0.257812\nv 0.335938 0.0280263 -0.257812\nv 0.34375 0.028275 -0.257812\nv 0.351562 0.0286343 -0.257812\nv 0.359375 0.029021 -0.257812\nv 0.367188 0.0292823 -0.257812\nv 0.375 0.0291913 -0.257812\nv 0.382812 0.0288139 -0.257812\nv 0.390625 0.0280482 -0.257812\nv 0.398438 0.0273035 -0.257812\nv 0.40625 0.0264683 -0.257812\nv 0.414062 0.0253951 -0.257812\nv 0.42315 0.0234375 -0.257812\nv 0.421875 0.0238253 -0.257812\nv 0.499294 0.0234375 -0.257812\nv -0.30212 0.03125 -0.257812\nv 0.497024 0.03125 -0.257812\nv -0.300306 0.0390625 -0.257812\nv 0.494028 0.0390625 -0.257812\nv 0.492188 0.0442819 -0.257812\nv -0.297804 0.046875 -0.257812\nv -0.296875 0.0503118 -0.257812\nv -0.296875 0.046875 -0.250532\nv 0.491305 0.046875 -0.257812\nv -0.295337 0.0546875 -0.257812\nv 0.476562 0.0606644 -0.257812\nv 0.485142 0.0546875 -0.257812\nv 0.484375 0.055294 -0.257812\nv -0.289566 0.0625 -0.257812\nv -0.289062 0.0628378 -0.257812\nv -0.28125 0.0649381 -0.257812\nv -0.273438 0.0674798 -0.257812\nv 0.414062 0.069933 -0.257812\nv 0.421875 0.0695773 -0.257812\nv 0.429688 0.0693573 -0.257812\nv 0.4375 0.069186 -0.257812\nv 0.445312 0.0682599 -0.257812\nv 0.453125 0.0663507 -0.257812\nv 0.460938 0.0645994 -0.257812\nv 0.472604 0.0625 -0.257812\nv 0.46875 0.0641322 -0.257812\nv -0.266795 0.0703125 -0.257812\nv -0.265625 0.0707358 -0.257812\nv -0.257812 0.0770095 -0.257812\nv -0.210938 0.0779892 -0.257812\nv -0.203125 0.0770427 -0.257812\nv -0.195312 0.0769794 -0.257812\nv -0.1875 0.0772217 -0.257812\nv -0.179688 0.0771474 -0.257812\nv -0.171875 0.0767573 -0.257812\nv -0.164062 0.0763643 -0.257812\nv -0.15625 0.0759245 -0.257812\nv -0.148438 0.0754307 -0.257812\nv -0.140625 0.0752067 -0.257812\nv -0.132812 0.0749993 -0.257812\nv -0.125 0.0748778 -0.257812\nv -0.117188 0.0747216 -0.257812\nv -0.109375 0.0745818 -0.257812\nv -0.101562 0.0745104 -0.257812\nv -0.09375 0.0745173 -0.257812\nv -0.0859375 0.0745215 -0.257812\nv -0.078125 0.074551 -0.257812\nv -0.0703125 0.0744963 -0.257812\nv -0.0625 0.0744367 -0.257812\nv -0.0546875 0.074469 -0.257812\nv -0.046875 0.0744494 -0.257812\nv -0.0390625 0.0744233 -0.257812\nv -0.03125 0.0743598 -0.257812\nv -0.0234375 0.0742286 -0.257812\nv -0.015625 0.0741187 -0.257812\nv -0.0078125 0.0739779 -0.257812\nv 0 0.0738519 -0.257812\nv 0.0078125 0.0737482 -0.257812\nv 0.015625 0.0736939 -0.257812\nv 0.0234375 0.0736464 -0.257812\nv 0.03125 0.0735154 -0.257812\nv 0.0390625 0.0733909 -0.257812\nv 0.046875 0.0732565 -0.257812\nv 0.0546875 0.0731392 -0.257812\nv 0.0625 0.0730665 -0.257812\nv 0.0703125 0.073012 -0.257812\nv 0.078125 0.0729943 -0.257812\nv 0.0859375 0.0730319 -0.257812\nv 0.09375 0.0730654 -0.257812\nv 0.101562 0.0731036 -0.257812\nv 0.109375 0.0731576 -0.257812\nv 0.117188 0.0731916 -0.257812\nv 0.125 0.0731928 -0.257812\nv 0.132812 0.0731724 -0.257812\nv 0.140625 0.073221 -0.257812\nv 0.148438 0.0732587 -0.257812\nv 0.15625 0.0733029 -0.257812\nv 0.164062 0.073346 -0.257812\nv 0.171875 0.0733939 -0.257812\nv 0.179688 0.0733722 -0.257812\nv 0.1875 0.0733614 -0.257812\nv 0.195312 0.0733638 -0.257812\nv 0.203125 0.0733396 -0.257812\nv 0.210938 0.0732705 -0.257812\nv 0.21875 0.0732072 -0.257812\nv 0.226562 0.0731384 -0.257812\nv 0.234375 0.0730685 -0.257812\nv 0.242188 0.0730044 -0.257812\nv 0.25 0.072959 -0.257812\nv 0.257812 0.0729286 -0.257812\nv 0.265625 0.0728713 -0.257812\nv 0.273438 0.0728013 -0.257812\nv 0.28125 0.0727706 -0.257812\nv 0.289062 0.072785 -0.257812\nv 0.296875 0.072707 -0.257812\nv 0.304688 0.0726456 -0.257812\nv 0.3125 0.0726074 -0.257812\nv 0.320312 0.0725786 -0.257812\nv 0.328125 0.0726005 -0.257812\nv 0.335938 0.0726363 -0.257812\nv 0.34375 0.0725226 -0.257812\nv 0.351562 0.0723001 -0.257812\nv 0.359375 0.0719929 -0.257812\nv 0.367188 0.0717204 -0.257812\nv 0.375 0.0714976 -0.257812\nv 0.382812 0.0712134 -0.257812\nv 0.390625 0.070958 -0.257812\nv 0.398438 0.0707384 -0.257812\nv 0.407809 0.0703125 -0.257812\nv 0.40625 0.0704062 -0.257812\nv -0.256023 0.078125 -0.257812\nv -0.25 0.0811353 -0.257812\nv -0.242188 0.0831012 -0.257812\nv -0.234375 0.0829714 -0.257812\nv -0.226562 0.081297 -0.257812\nv -0.211659 0.078125 -0.257812\nv -0.21875 0.0795239 -0.257812\nv -0.289062 0.162388 -0.257812\nv -0.28125 0.159171 -0.257812\nv -0.273438 0.160078 -0.257812\nv -0.265625 0.162955 -0.257812\nv -0.291519 0.164062 -0.257812\nv -0.264059 0.164062 -0.257812\nv -0.257812 0.167676 -0.257812\nv -0.29544 0.171875 -0.257812\nv -0.296875 0.178586 -0.257812\nv -0.254231 0.171875 -0.257812\nv -0.25 0.176801 -0.257812\nv -0.297116 0.179688 -0.257812\nv -0.296875 0.179688 -0.253954\nv -0.247195 0.179688 -0.257812\nv -0.242188 0.18503 -0.257812\nv -0.299262 0.1875 -0.257812\nv -0.240661 0.1875 -0.257812\nv -0.301221 0.195312 -0.257812\nv -0.238628 0.195312 -0.257812\nv -0.302001 0.203125 -0.257812\nv -0.238073 0.203125 -0.257812\nv -0.302537 0.210938 -0.257812\nv -0.236871 0.210938 -0.257812\nv -0.302652 0.21875 -0.257812\nv -0.236203 0.21875 -0.257812\nv -0.302475 0.226562 -0.257812\nv -0.235779 0.226562 -0.257812\nv -0.302375 0.234375 -0.257812\nv -0.23576 0.234375 -0.257812\nv -0.302298 0.242188 -0.257812\nv -0.235929 0.242188 -0.257812\nv -0.30212 0.25 -0.257812\nv -0.236423 0.25 -0.257812\nv -0.301735 0.257812 -0.257812\nv -0.237166 0.257812 -0.257812\nv -0.300841 0.265625 -0.257812\nv -0.237942 0.265625 -0.257812\nv -0.299408 0.273438 -0.257812\nv -0.296875 0.281072 -0.257812\nv -0.238486 0.273438 -0.257812\nv -0.296813 0.28125 -0.257812\nv -0.239449 0.28125 -0.257812\nv -0.293801 0.289062 -0.257812\nv -0.240867 0.289062 -0.257812\nv -0.242188 0.292155 -0.257812\nv -0.29109 0.296875 -0.257812\nv -0.289062 0.304005 -0.257812\nv -0.245265 0.296875 -0.257812\nv -0.25 0.304555 -0.257812\nv -0.288861 0.304688 -0.257812\nv -0.289062 0.304688 -0.253831\nv -0.250071 0.304688 -0.257812\nv -0.284254 0.3125 -0.257812\nv -0.253563 0.3125 -0.257812\nv -0.257812 0.316817 -0.257812\nv -0.281351 0.320312 -0.257812\nv -0.28125 0.320652 -0.257812\nv -0.28125 0.320312 -0.255103\nv -0.273438 0.325238 -0.257812\nv -0.264344 0.320312 -0.257812\nv -0.265625 0.32126 -0.257812\nv -0.265625 0.320312 -0.251015\nv -0.296875 0.613482 -0.257812\nv -0.289062 0.614514 -0.257812\nv -0.301134 0.617188 -0.257812\nv -0.304688 0.621103 -0.257812\nv -0.296875 0.617188 -0.253415\nv -0.286939 0.617188 -0.257812\nv -0.289062 0.617188 -0.254524\nv -0.307236 0.625 -0.257812\nv -0.304688 0.625 -0.251303\nv -0.282029 0.625 -0.257812\nv -0.28125 0.626409 -0.257812\nv -0.311897 0.632812 -0.257812\nv -0.3125 0.634307 -0.257812\nv -0.27832 0.632812 -0.257812\nv -0.314341 0.640625 -0.257812\nv -0.3125 0.640625 -0.250878\nv -0.277345 0.640625 -0.257812\nv -0.317079 0.648438 -0.257812\nv -0.275798 0.648438 -0.257812\nv -0.319208 0.65625 -0.257812\nv -0.320312 0.661715 -0.257812\nv -0.274287 0.65625 -0.257812\nv -0.273438 0.660389 -0.257812\nv -0.320755 0.664062 -0.257812\nv -0.320312 0.664062 -0.254233\nv -0.272627 0.664062 -0.257812\nv -0.321369 0.671875 -0.257812\nv -0.271376 0.671875 -0.257812\nv -0.32124 0.679688 -0.257812\nv -0.270922 0.679688 -0.257812\nv -0.32101 0.6875 -0.257812\nv -0.320312 0.6875 -0.251596\nv -0.270974 0.6875 -0.257812\nv -0.320648 0.695312 -0.257812\nv -0.320312 0.701671 -0.257812\nv -0.320312 0.695312 -0.255264\nv -0.271637 0.695312 -0.257812\nv -0.320236 0.703125 -0.257812\nv -0.272365 0.703125 -0.257812\nv -0.273438 0.710769 -0.257812\nv -0.319948 0.710938 -0.257812\nv -0.27346 0.710938 -0.257812\nv -0.319439 0.71875 -0.257812\nv -0.274877 0.71875 -0.257812\nv -0.318594 0.726562 -0.257812\nv -0.277413 0.726562 -0.257812\nv -0.317797 0.734375 -0.257812\nv -0.281183 0.734375 -0.257812\nv -0.28125 0.734529 -0.257812\nv -0.28125 0.734375 -0.256838\nv -0.316992 0.742188 -0.257812\nv -0.284269 0.742188 -0.257812\nv -0.313988 0.75 -0.257812\nv -0.3125 0.754185 -0.257812\nv -0.288797 0.75 -0.257812\nv -0.289062 0.750303 -0.257812\nv -0.289062 0.75 -0.25439\nv -0.310309 0.757812 -0.257812\nv -0.304688 0.764726 -0.257812\nv -0.296402 0.757812 -0.257812\nv -0.296875 0.758435 -0.257812\nv -0.296875 0.757812 -0.251067\nv 0 -0.547886 -0.25\nv 0.0078125 -0.549227 -0.25\nv 0.015625 -0.550017 -0.25\nv 0.0234375 -0.550265 -0.25\nv 0.03125 -0.55002 -0.25\nv 0.0390625 -0.5494 -0.25\nv 0.046875 -0.548488 -0.25\nv 0.0546875 -0.547453 -0.25\nv -0.00345855 -0.546875 -0.25\nv -0.0078125 -0.542723 -0.25\nv 0.0583482 -0.546875 -0.25\nv 0.0625 -0.546049 -0.25\nv 0.0625 -0.546875 -0.242922\nv 0.0703125 -0.544215 -0.25\nv 0.078125 -0.542247 -0.25\nv 0.0859375 -0.539794 -0.25\nv -0.00953761 -0.539062 -0.25\nv -0.0078125 -0.535929 -0.25\nv 0.0875241 -0.539062 -0.25\nv 0.09375 -0.535423 -0.25\nv -0.00564588 -0.53125 -0.25\nv 0.0999845 -0.53125 -0.25\nv 0.101562 -0.530297 -0.25\nv 0.109375 -0.525365 -0.25\nv -0.00265553 -0.523438 -0.25\nv 0 -0.516718 -0.25\nv 0.112208 -0.523438 -0.25\nv 0.117188 -0.519061 -0.25\nv 0.000505147 -0.515625 -0.25\nv 0 -0.515625 -0.24866\nv 0.121004 -0.515625 -0.25\nv 0.125 -0.511911 -0.25\nv 0.00701133 -0.507812 -0.25\nv 0.0078125 -0.507577 -0.25\nv 0.015625 -0.504312 -0.25\nv 0.0234375 -0.500809 -0.25\nv 0.128925 -0.507812 -0.25\nv 0.0247384 -0.5 -0.25\nv 0.0234375 -0.5 -0.243174\nv 0.03125 -0.496427 -0.25\nv 0.0390625 -0.492491 -0.25\nv 0.130125 -0.5 -0.25\nv 0.0398222 -0.492188 -0.25\nv 0.0390625 -0.492188 -0.247944\nv 0.046875 -0.489929 -0.25\nv 0.0546875 -0.487651 -0.25\nv 0.0625 -0.485962 -0.25\nv 0.0703125 -0.484678 -0.25\nv 0.117188 -0.485665 -0.25\nv 0.127481 -0.492188 -0.25\nv 0.125 -0.490043 -0.25\nv 0.0722111 -0.484375 -0.25\nv 0.0703125 -0.484375 -0.248226\nv 0.078125 -0.483464 -0.25\nv 0.0859375 -0.48268 -0.25\nv 0.09375 -0.482212 -0.25\nv 0.101562 -0.482498 -0.25\nv 0.11326 -0.484375 -0.25\nv 0.109375 -0.483517 -0.25\nv 0.460938 -0.0706601 -0.25\nv -0.289062 -0.0650134 -0.25\nv -0.28125 -0.0660968 -0.25\nv -0.273438 -0.0653961 -0.25\nv 0.4375 -0.062849 -0.25\nv 0.445312 -0.0668103 -0.25\nv 0.458039 -0.0703125 -0.25\nv 0.453125 -0.0696085 -0.25\nv 0.463328 -0.0703125 -0.25\nv 0.460938 -0.0703125 -0.247212\nv 0.46875 -0.069496 -0.25\nv 0.476562 -0.0686866 -0.25\nv 0.484375 -0.0660109 -0.25\nv -0.295164 -0.0625 -0.25\nv -0.296875 -0.0609675 -0.25\nv -0.267221 -0.0625 -0.25\nv -0.265625 -0.0615229 -0.25\nv 0.436859 -0.0625 -0.25\nv 0.489664 -0.0625 -0.25\nv 0.492188 -0.0581829 -0.25\nv -0.299562 -0.0546875 -0.25\nv -0.257992 -0.0546875 -0.25\nv -0.257812 -0.0544634 -0.25\nv 0.435261 -0.0546875 -0.25\nv 0.493509 -0.0546875 -0.25\nv 0.492188 -0.0546875 -0.244111\nv -0.302439 -0.046875 -0.25\nv -0.304688 -0.0395427 -0.25\nv -0.254675 -0.046875 -0.25\nv 0.435284 -0.046875 -0.25\nv 0.495472 -0.046875 -0.25\nv -0.304801 -0.0390625 -0.25\nv -0.304688 -0.0390625 -0.249236\nv -0.252514 -0.0390625 -0.25\nv 0.436251 -0.0390625 -0.25\nv 0.4375 -0.0324694 -0.25\nv 0.4375 -0.0390625 -0.244325\nv 0.496854 -0.0390625 -0.25\nv -0.305526 -0.03125 -0.25\nv -0.304688 -0.03125 -0.244689\nv -0.25149 -0.03125 -0.25\nv 0.437728 -0.03125 -0.25\nv 0.497724 -0.03125 -0.25\nv -0.305383 -0.0234375 -0.25\nv -0.304688 -0.0234375 -0.245927\nv -0.250802 -0.0234375 -0.25\nv 0.439082 -0.0234375 -0.25\nv 0.498852 -0.0234375 -0.25\nv -0.305875 -0.015625 -0.25\nv -0.304688 -0.015625 -0.242459\nv -0.251129 -0.015625 -0.25\nv 0.440343 -0.015625 -0.25\nv 0.499664 -0.015625 -0.25\nv -0.306751 -0.0078125 -0.25\nv -0.252248 -0.0078125 -0.25\nv 0.439594 -0.0078125 -0.25\nv 0.499735 -0.0078125 -0.25\nv -0.306783 0 -0.25\nv -0.253066 0 -0.25\nv 0.438078 0 -0.25\nv 0.499498 0 -0.25\nv -0.306093 0.0078125 -0.25\nv -0.304688 0.0145267 -0.25\nv -0.250001 0.0078125 -0.25\nv -0.25 0.00781439 -0.25\nv -0.242188 0.0153526 -0.25\nv 0.437626 0.0078125 -0.25\nv 0.4375 0.00837794 -0.25\nv 0.49914 0.0078125 -0.25\nv -0.304418 0.015625 -0.25\nv -0.241765 0.015625 -0.25\nv -0.242188 0.015625 -0.249656\nv -0.234375 0.0182925 -0.25\nv -0.226562 0.020951 -0.25\nv 0.434877 0.015625 -0.25\nv 0.429688 0.021138 -0.25\nv 0.499052 0.015625 -0.25\nv -0.302693 0.0234375 -0.25\nv -0.220277 0.0234375 -0.25\nv -0.21875 0.0238447 -0.25\nv -0.210938 0.0262796 -0.25\nv -0.203125 0.0277898 -0.25\nv -0.195312 0.0288057 -0.25\nv -0.1875 0.0294287 -0.25\nv -0.179688 0.0289171 -0.25\nv -0.171875 0.0282329 -0.25\nv -0.164062 0.0276106 -0.25\nv -0.15625 0.027312 -0.25\nv -0.148438 0.0273192 -0.25\nv -0.140625 0.0272938 -0.25\nv -0.132812 0.0273802 -0.25\nv -0.125 0.0275198 -0.25\nv -0.117188 0.027619 -0.25\nv -0.109375 0.0276856 -0.25\nv -0.101562 0.0277481 -0.25\nv -0.09375 0.0277241 -0.25\nv -0.0859375 0.0276267 -0.25\nv -0.078125 0.0274508 -0.25\nv -0.0703125 0.0271075 -0.25\nv -0.0625 0.0268477 -0.25\nv -0.0546875 0.0266297 -0.25\nv -0.046875 0.0265066 -0.25\nv -0.0390625 0.0263926 -0.25\nv -0.03125 0.0262668 -0.25\nv -0.0234375 0.0261238 -0.25\nv -0.015625 0.0260098 -0.25\nv -0.0078125 0.0259989 -0.25\nv 0 0.0259396 -0.25\nv 0.0078125 0.0257996 -0.25\nv 0.015625 0.0257505 -0.25\nv 0.0234375 0.0257964 -0.25\nv 0.03125 0.0258515 -0.25\nv 0.0390625 0.0258444 -0.25\nv 0.046875 0.0258372 -0.25\nv 0.0546875 0.0258347 -0.25\nv 0.0625 0.0258567 -0.25\nv 0.0703125 0.0258809 -0.25\nv 0.078125 0.0258662 -0.25\nv 0.0859375 0.0258457 -0.25\nv 0.09375 0.0258312 -0.25\nv 0.101562 0.0258881 -0.25\nv 0.109375 0.0259294 -0.25\nv 0.117188 0.0258982 -0.25\nv 0.125 0.0258396 -0.25\nv 0.132812 0.0257968 -0.25\nv 0.140625 0.0257886 -0.25\nv 0.148438 0.0257766 -0.25\nv 0.15625 0.0257705 -0.25\nv 0.164062 0.0257832 -0.25\nv 0.171875 0.0258078 -0.25\nv 0.179688 0.0258549 -0.25\nv 0.1875 0.0259029 -0.25\nv 0.195312 0.025918 -0.25\nv 0.203125 0.0259453 -0.25\nv 0.210938 0.0259859 -0.25\nv 0.21875 0.0260807 -0.25\nv 0.226562 0.0262664 -0.25\nv 0.234375 0.0264799 -0.25\nv 0.242188 0.0267477 -0.25\nv 0.25 0.0270225 -0.25\nv 0.257812 0.0272317 -0.25\nv 0.265625 0.0273747 -0.25\nv 0.273438 0.0274129 -0.25\nv 0.28125 0.0274847 -0.25\nv 0.289062 0.0274701 -0.25\nv 0.296875 0.0273934 -0.25\nv 0.304688 0.0273624 -0.25\nv 0.3125 0.0273659 -0.25\nv 0.320312 0.0273783 -0.25\nv 0.328125 0.0276207 -0.25\nv 0.335938 0.0279554 -0.25\nv 0.34375 0.0282169 -0.25\nv 0.351562 0.0285814 -0.25\nv 0.359375 0.0290207 -0.25\nv 0.367188 0.0294009 -0.25\nv 0.375 0.0296326 -0.25\nv 0.382812 0.0292118 -0.25\nv 0.390625 0.0283883 -0.25\nv 0.398438 0.0277045 -0.25\nv 0.40625 0.0269412 -0.25\nv 0.414062 0.02597 -0.25\nv 0.424936 0.0234375 -0.25\nv 0.421875 0.0242694 -0.25\nv 0.499275 0.0234375 -0.25\nv -0.301189 0.03125 -0.25\nv 0.496885 0.03125 -0.25\nv -0.299429 0.0390625 -0.25\nv -0.296875 0.0467041 -0.25\nv 0.49404 0.0390625 -0.25\nv 0.492188 0.0448087 -0.25\nv -0.296797 0.046875 -0.25\nv 0.491522 0.046875 -0.25\nv -0.294228 0.0546875 -0.25\nv 0.476562 0.0607504 -0.25\nv 0.485498 0.0546875 -0.25\nv 0.484375 0.0555492 -0.25\nv -0.289447 0.0625 -0.25\nv -0.289062 0.0628054 -0.25\nv -0.28125 0.0646615 -0.25\nv -0.273438 0.0678068 -0.25\nv 0.414062 0.070071 -0.25\nv 0.421875 0.0696877 -0.25\nv 0.429688 0.0693609 -0.25\nv 0.4375 0.069178 -0.25\nv 0.445312 0.0682304 -0.25\nv 0.453125 0.0663154 -0.25\nv 0.460938 0.0646233 -0.25\nv 0.472693 0.0625 -0.25\nv 0.46875 0.0641225 -0.25\nv -0.267136 0.0703125 -0.25\nv -0.265625 0.0708104 -0.25\nv -0.257812 0.0764496 -0.25\nv -0.210938 0.0777145 -0.25\nv -0.203125 0.0769035 -0.25\nv -0.195312 0.0770177 -0.25\nv -0.1875 0.0772654 -0.25\nv -0.179688 0.0772059 -0.25\nv -0.171875 0.0767374 -0.25\nv -0.164062 0.0763452 -0.25\nv -0.15625 0.0760047 -0.25\nv -0.148438 0.0754987 -0.25\nv -0.140625 0.0752114 -0.25\nv -0.132812 0.0749882 -0.25\nv -0.125 0.0748934 -0.25\nv -0.117188 0.0747075 -0.25\nv -0.109375 0.0745756 -0.25\nv -0.101562 0.0745062 -0.25\nv -0.09375 0.0744793 -0.25\nv -0.0859375 0.074444 -0.25\nv -0.078125 0.07444 -0.25\nv -0.0703125 0.0744681 -0.25\nv -0.0625 0.0744302 -0.25\nv -0.0546875 0.0744833 -0.25\nv -0.046875 0.0745173 -0.25\nv -0.0390625 0.0744935 -0.25\nv -0.03125 0.0744321 -0.25\nv -0.0234375 0.0743005 -0.25\nv -0.015625 0.0741771 -0.25\nv -0.0078125 0.074033 -0.25\nv 0 0.0738631 -0.25\nv 0.0078125 0.0737268 -0.25\nv 0.015625 0.0736801 -0.25\nv 0.0234375 0.0736525 -0.25\nv 0.03125 0.0735709 -0.25\nv 0.0390625 0.0734617 -0.25\nv 0.046875 0.0733199 -0.25\nv 0.0546875 0.073216 -0.25\nv 0.0625 0.0731583 -0.25\nv 0.0703125 0.0731047 -0.25\nv 0.078125 0.0730885 -0.25\nv 0.0859375 0.0731106 -0.25\nv 0.09375 0.0731209 -0.25\nv 0.101562 0.0731493 -0.25\nv 0.109375 0.0731742 -0.25\nv 0.117188 0.0731804 -0.25\nv 0.125 0.0731586 -0.25\nv 0.132812 0.0731392 -0.25\nv 0.140625 0.0731741 -0.25\nv 0.148438 0.0732067 -0.25\nv 0.15625 0.0732263 -0.25\nv 0.164062 0.0732718 -0.25\nv 0.171875 0.0732696 -0.25\nv 0.179688 0.0732874 -0.25\nv 0.1875 0.0732578 -0.25\nv 0.195312 0.0732435 -0.25\nv 0.203125 0.0731921 -0.25\nv 0.210938 0.0731365 -0.25\nv 0.21875 0.0731142 -0.25\nv 0.226562 0.0730578 -0.25\nv 0.234375 0.0729895 -0.25\nv 0.242188 0.0729384 -0.25\nv 0.25 0.0728993 -0.25\nv 0.257812 0.0728545 -0.25\nv 0.265625 0.072805 -0.25\nv 0.273438 0.0727678 -0.25\nv 0.28125 0.0727913 -0.25\nv 0.289062 0.0727563 -0.25\nv 0.296875 0.0727042 -0.25\nv 0.304688 0.0726667 -0.25\nv 0.3125 0.0726446 -0.25\nv 0.320312 0.0726634 -0.25\nv 0.328125 0.0727087 -0.25\nv 0.335938 0.0727548 -0.25\nv 0.34375 0.0727074 -0.25\nv 0.351562 0.0724892 -0.25\nv 0.359375 0.0721973 -0.25\nv 0.367188 0.071902 -0.25\nv 0.375 0.0716486 -0.25\nv 0.382812 0.0712769 -0.25\nv 0.390625 0.0709998 -0.25\nv 0.398438 0.0707817 -0.25\nv 0.409255 0.0703125 -0.25\nv 0.40625 0.0704642 -0.25\nv -0.255678 0.078125 -0.25\nv -0.25 0.0817757 -0.25\nv -0.242188 0.083658 -0.25\nv -0.234375 0.0830836 -0.25\nv -0.226562 0.0810514 -0.25\nv -0.212999 0.078125 -0.25\nv -0.21875 0.0793126 -0.25\nv -0.289062 0.162604 -0.25\nv -0.28125 0.159209 -0.25\nv -0.273438 0.159881 -0.25\nv -0.265625 0.162748 -0.25\nv -0.291251 0.164062 -0.25\nv -0.263672 0.164062 -0.25\nv -0.257812 0.167403 -0.25\nv -0.294987 0.171875 -0.25\nv -0.2537 0.171875 -0.25\nv -0.25 0.175778 -0.25\nv -0.296648 0.179688 -0.25\nv -0.296875 0.180511 -0.25\nv -0.246449 0.179688 -0.25\nv -0.242188 0.184946 -0.25\nv -0.298854 0.1875 -0.25\nv -0.240749 0.1875 -0.25\nv -0.300863 0.195312 -0.25\nv -0.238652 0.195312 -0.25\nv -0.30206 0.203125 -0.25\nv -0.237941 0.203125 -0.25\nv -0.30268 0.210938 -0.25\nv -0.23691 0.210938 -0.25\nv -0.302822 0.21875 -0.25\nv -0.236378 0.21875 -0.25\nv -0.30255 0.226562 -0.25\nv -0.236004 0.226562 -0.25\nv -0.302452 0.234375 -0.25\nv -0.236065 0.234375 -0.25\nv -0.30225 0.242188 -0.25\nv -0.236265 0.242188 -0.25\nv -0.302043 0.25 -0.25\nv -0.236726 0.25 -0.25\nv -0.301629 0.257812 -0.25\nv -0.237602 0.257812 -0.25\nv -0.30068 0.265625 -0.25\nv -0.238525 0.265625 -0.25\nv -0.298934 0.273438 -0.25\nv -0.296875 0.279541 -0.25\nv -0.238927 0.273438 -0.25\nv -0.296284 0.28125 -0.25\nv -0.240168 0.28125 -0.25\nv -0.293654 0.289062 -0.25\nv -0.241835 0.289062 -0.25\nv -0.242188 0.289779 -0.25\nv -0.242188 0.289062 -0.247474\nv -0.291223 0.296875 -0.25\nv -0.247676 0.296875 -0.25\nv -0.25 0.300449 -0.25\nv -0.289222 0.304688 -0.25\nv -0.289062 0.305026 -0.25\nv -0.252209 0.304688 -0.25\nv -0.284861 0.3125 -0.25\nv -0.28125 0.320022 -0.25\nv -0.265625 0.320218 -0.25\nv -0.255763 0.3125 -0.25\nv -0.257812 0.314566 -0.25\nv -0.280606 0.320312 -0.25\nv -0.28125 0.320312 -0.247726\nv -0.265948 0.320312 -0.25\nv -0.273438 0.323739 -0.25\nv -0.296875 0.619777 -0.25\nv -0.289062 0.620583 -0.25\nv -0.303938 0.625 -0.25\nv -0.304688 0.626147 -0.25\nv -0.285643 0.625 -0.25\nv -0.289062 0.625 -0.242554\nv -0.28125 0.630383 -0.25\nv -0.307742 0.632812 -0.25\nv -0.279682 0.632812 -0.25\nv -0.28125 0.632812 -0.242833\nv -0.31224 0.640625 -0.25\nv -0.3125 0.641191 -0.25\nv -0.27815 0.640625 -0.25\nv -0.315693 0.648438 -0.25\nv -0.276564 0.648438 -0.25\nv -0.318183 0.65625 -0.25\nv -0.275121 0.65625 -0.25\nv -0.273438 0.66359 -0.25\nv -0.319742 0.664062 -0.25\nv -0.320312 0.670494 -0.25\nv -0.273315 0.664062 -0.25\nv -0.273438 0.664062 -0.24887\nv -0.320433 0.671875 -0.25\nv -0.320312 0.671875 -0.246562\nv -0.272204 0.671875 -0.25\nv -0.320471 0.679688 -0.25\nv -0.320312 0.683405 -0.25\nv -0.271542 0.679688 -0.25\nv -0.320133 0.6875 -0.25\nv -0.271275 0.6875 -0.25\nv -0.319629 0.695312 -0.25\nv -0.271764 0.695312 -0.25\nv -0.319168 0.703125 -0.25\nv -0.272446 0.703125 -0.25\nv -0.273438 0.709198 -0.25\nv -0.318763 0.710938 -0.25\nv -0.273708 0.710938 -0.25\nv -0.31809 0.71875 -0.25\nv -0.275231 0.71875 -0.25\nv -0.317203 0.726562 -0.25\nv -0.277772 0.726562 -0.25\nv -0.28125 0.733498 -0.25\nv -0.31649 0.734375 -0.25\nv -0.281609 0.734375 -0.25\nv -0.315688 0.742188 -0.25\nv -0.284737 0.742188 -0.25\nv -0.289062 0.749509 -0.25\nv -0.312765 0.75 -0.25\nv -0.3125 0.750917 -0.25\nv -0.3125 0.75 -0.248309\nv -0.289415 0.75 -0.25\nv -0.296875 0.757741 -0.25\nv -0.309167 0.757812 -0.25\nv -0.297029 0.757812 -0.25\nv -0.304688 0.763721 -0.25\nv -0.296875 0.757812 -0.247451\nv 0 -0.549277 -0.242188\nv 0.0078125 -0.550852 -0.242188\nv 0.015625 -0.551637 -0.242188\nv 0.0234375 -0.551674 -0.242188\nv 0.03125 -0.551298 -0.242188\nv 0.0390625 -0.550596 -0.242188\nv 0.046875 -0.549606 -0.242188\nv 0.0546875 -0.548384 -0.242188\nv 0.0625 -0.546941 -0.242188\nv -0.00658452 -0.546875 -0.242188\nv -0.0078125 -0.5457 -0.242188\nv -0.0078125 -0.546875 -0.235444\nv 0.062834 -0.546875 -0.242188\nv 0.0703125 -0.545229 -0.242188\nv 0.078125 -0.543191 -0.242188\nv 0.0859375 -0.540407 -0.242188\nv -0.0107873 -0.539062 -0.242188\nv -0.0078125 -0.533269 -0.242188\nv 0.0886675 -0.539062 -0.242188\nv 0.09375 -0.535788 -0.242188\nv -0.00687567 -0.53125 -0.242188\nv -0.0078125 -0.53125 -0.238676\nv 0.100733 -0.53125 -0.242188\nv 0.101562 -0.530738 -0.242188\nv 0.101562 -0.53125 -0.235062\nv 0.109375 -0.525867 -0.242188\nv -0.0051979 -0.523438 -0.242188\nv 0.11325 -0.523438 -0.242188\nv 0.117188 -0.520153 -0.242188\nv -0.00287394 -0.515625 -0.242188\nv 0 -0.511609 -0.242188\nv 0.122528 -0.515625 -0.242188\nv 0.125 -0.513404 -0.242188\nv 0.00299716 -0.507812 -0.242188\nv 0.0078125 -0.506161 -0.242188\nv 0.015625 -0.502909 -0.242188\nv 0.130844 -0.507812 -0.242188\nv 0.0230065 -0.5 -0.242188\nv 0.0234375 -0.499848 -0.242188\nv 0.03125 -0.495709 -0.242188\nv 0.132545 -0.5 -0.242188\nv 0.132812 -0.5 -0.239531\nv 0.0379483 -0.492188 -0.242188\nv 0.0390625 -0.491631 -0.242188\nv 0.046875 -0.488989 -0.242188\nv 0.0546875 -0.486343 -0.242188\nv 0.0625 -0.484724 -0.242188\nv 0.117188 -0.484745 -0.242188\nv 0.129349 -0.492188 -0.242188\nv 0.125 -0.488462 -0.242188\nv 0.0644682 -0.484375 -0.242188\nv 0.0625 -0.484375 -0.239194\nv 0.0703125 -0.483355 -0.242188\nv 0.078125 -0.482224 -0.242188\nv 0.0859375 -0.481679 -0.242188\nv 0.09375 -0.481398 -0.242188\nv 0.101562 -0.481389 -0.242188\nv 0.116198 -0.484375 -0.242188\nv 0.109375 -0.482431 -0.242188\nv -0.289062 -0.0631385 -0.242188\nv -0.28125 -0.0642938 -0.242188\nv -0.273438 -0.0638638 -0.242188\nv 0.4375 -0.0628644 -0.242188\nv 0.445312 -0.0665703 -0.242188\nv 0.453125 -0.0695569 -0.242188\nv 0.460938 -0.0695888 -0.242188\nv 0.46875 -0.0683508 -0.242188\nv 0.476562 -0.0671655 -0.242188\nv 0.484375 -0.064365 -0.242188\nv -0.290716 -0.0625 -0.242188\nv -0.296875 -0.057227 -0.242188\nv -0.289062 -0.0625 -0.238959\nv -0.270729 -0.0625 -0.242188\nv -0.273438 -0.0625 -0.235284\nv -0.265625 -0.0587055 -0.242188\nv 0.437101 -0.0625 -0.242188\nv 0.4375 -0.0625 -0.24029\nv 0.487686 -0.0625 -0.242188\nv -0.297912 -0.0546875 -0.242188\nv -0.296875 -0.0546875 -0.236375\nv -0.261557 -0.0546875 -0.242188\nv -0.257812 -0.0494882 -0.242188\nv 0.436951 -0.0546875 -0.242188\nv 0.4375 -0.0546875 -0.240242\nv 0.491547 -0.0546875 -0.242188\nv 0.492188 -0.0519345 -0.242188\nv -0.300877 -0.046875 -0.242188\nv -0.2569 -0.046875 -0.242188\nv -0.257812 -0.046875 -0.238301\nv 0.437227 -0.046875 -0.242188\nv 0.4375 -0.044279 -0.242188\nv 0.4375 -0.046875 -0.241036\nv 0.493082 -0.046875 -0.242188\nv 0.492188 -0.046875 -0.239149\nv -0.30342 -0.0390625 -0.242188\nv -0.254766 -0.0390625 -0.242188\nv 0.437959 -0.0390625 -0.242188\nv 0.494258 -0.0390625 -0.242188\nv -0.304242 -0.03125 -0.242188\nv -0.253564 -0.03125 -0.242188\nv 0.439391 -0.03125 -0.242188\nv 0.495641 -0.03125 -0.242188\nv -0.304035 -0.0234375 -0.242188\nv -0.252902 -0.0234375 -0.242188\nv 0.440262 -0.0234375 -0.242188\nv 0.497717 -0.0234375 -0.242188\nv -0.304644 -0.015625 -0.242188\nv -0.304688 -0.0153216 -0.242188\nv -0.253437 -0.015625 -0.242188\nv 0.441216 -0.015625 -0.242188\nv 0.499108 -0.015625 -0.242188\nv -0.305752 -0.0078125 -0.242188\nv -0.254507 -0.0078125 -0.242188\nv 0.440642 -0.0078125 -0.242188\nv 0.499343 -0.0078125 -0.242188\nv -0.306056 0 -0.242188\nv -0.255713 0 -0.242188\nv 0.438908 0 -0.242188\nv 0.499143 0 -0.242188\nv -0.305241 0.0078125 -0.242188\nv -0.304688 0.0105827 -0.242188\nv -0.304688 0.0078125 -0.235395\nv -0.254868 0.0078125 -0.242188\nv -0.25 0.01454 -0.242188\nv 0.438493 0.0078125 -0.242188\nv 0.4375 0.0123169 -0.242188\nv 0.498896 0.0078125 -0.242188\nv -0.303529 0.015625 -0.242188\nv -0.248839 0.015625 -0.242188\nv -0.25 0.015625 -0.238401\nv -0.242188 0.0195094 -0.242188\nv -0.234375 0.0207586 -0.242188\nv -0.226562 0.0229434 -0.242188\nv 0.436294 0.015625 -0.242188\nv 0.429688 0.0219671 -0.242188\nv 0.499031 0.015625 -0.242188\nv -0.301922 0.0234375 -0.242188\nv -0.225354 0.0234375 -0.242188\nv -0.226562 0.0234375 -0.235528\nv -0.21875 0.0252691 -0.242188\nv -0.210938 0.0274921 -0.242188\nv -0.203125 0.0287901 -0.242188\nv -0.195312 0.0295734 -0.242188\nv -0.1875 0.0299217 -0.242188\nv -0.179688 0.029272 -0.242188\nv -0.171875 0.0284715 -0.242188\nv -0.164062 0.0278421 -0.242188\nv -0.15625 0.0273789 -0.242188\nv -0.148438 0.027315 -0.242188\nv -0.140625 0.0273665 -0.242188\nv -0.132812 0.0274105 -0.242188\nv -0.125 0.0275493 -0.242188\nv -0.117188 0.0276518 -0.242188\nv -0.109375 0.0277198 -0.242188\nv -0.101562 0.0277401 -0.242188\nv -0.09375 0.0276204 -0.242188\nv -0.0859375 0.0274763 -0.242188\nv -0.078125 0.0272255 -0.242188\nv -0.0703125 0.0269145 -0.242188\nv -0.0625 0.0266879 -0.242188\nv -0.0546875 0.0265249 -0.242188\nv -0.046875 0.026442 -0.242188\nv -0.0390625 0.0263592 -0.242188\nv -0.03125 0.026236 -0.242188\nv -0.0234375 0.0261053 -0.242188\nv -0.015625 0.0259589 -0.242188\nv -0.0078125 0.0258778 -0.242188\nv 0 0.0258246 -0.242188\nv 0.0078125 0.0257136 -0.242188\nv 0.015625 0.0257005 -0.242188\nv 0.0234375 0.0257272 -0.242188\nv 0.03125 0.0257195 -0.242188\nv 0.0390625 0.0257066 -0.242188\nv 0.046875 0.025701 -0.242188\nv 0.0546875 0.0257104 -0.242188\nv 0.0625 0.0257148 -0.242188\nv 0.0703125 0.0257247 -0.242188\nv 0.078125 0.0256957 -0.242188\nv 0.0859375 0.0256794 -0.242188\nv 0.09375 0.0257234 -0.242188\nv 0.101562 0.0257965 -0.242188\nv 0.109375 0.0258262 -0.242188\nv 0.117188 0.0257837 -0.242188\nv 0.125 0.0257137 -0.242188\nv 0.132812 0.0256683 -0.242188\nv 0.140625 0.0256413 -0.242188\nv 0.148438 0.0256364 -0.242188\nv 0.15625 0.0256217 -0.242188\nv 0.164062 0.0256252 -0.242188\nv 0.171875 0.0256334 -0.242188\nv 0.179688 0.0256601 -0.242188\nv 0.1875 0.0256634 -0.242188\nv 0.195312 0.0256647 -0.242188\nv 0.203125 0.0256901 -0.242188\nv 0.210938 0.0257109 -0.242188\nv 0.21875 0.0257488 -0.242188\nv 0.226562 0.0258624 -0.242188\nv 0.234375 0.0260782 -0.242188\nv 0.242188 0.0263424 -0.242188\nv 0.25 0.0266225 -0.242188\nv 0.257812 0.0268863 -0.242188\nv 0.265625 0.0270924 -0.242188\nv 0.273438 0.0272545 -0.242188\nv 0.28125 0.0273182 -0.242188\nv 0.289062 0.0272423 -0.242188\nv 0.296875 0.0271635 -0.242188\nv 0.304688 0.0271115 -0.242188\nv 0.3125 0.0270792 -0.242188\nv 0.320312 0.0270984 -0.242188\nv 0.328125 0.0271402 -0.242188\nv 0.335938 0.0273288 -0.242188\nv 0.34375 0.0276676 -0.242188\nv 0.351562 0.0280229 -0.242188\nv 0.359375 0.0284506 -0.242188\nv 0.367188 0.0289078 -0.242188\nv 0.375 0.0292946 -0.242188\nv 0.382812 0.0291862 -0.242188\nv 0.390625 0.028376 -0.242188\nv 0.398438 0.0277365 -0.242188\nv 0.40625 0.0270998 -0.242188\nv 0.414062 0.0261885 -0.242188\nv 0.425985 0.0234375 -0.242188\nv 0.421875 0.0243956 -0.242188\nv 0.499345 0.0234375 -0.242188\nv -0.300342 0.03125 -0.242188\nv 0.496953 0.03125 -0.242188\nv -0.29877 0.0390625 -0.242188\nv -0.296875 0.0454361 -0.242188\nv 0.494177 0.0390625 -0.242188\nv 0.492188 0.0456105 -0.242188\nv -0.296285 0.046875 -0.242188\nv 0.491795 0.046875 -0.242188\nv -0.293865 0.0546875 -0.242188\nv 0.476562 0.0608819 -0.242188\nv 0.485809 0.0546875 -0.242188\nv 0.484375 0.0557808 -0.242188\nv -0.289578 0.0625 -0.242188\nv -0.289062 0.0629358 -0.242188\nv -0.28125 0.0651493 -0.242188\nv -0.273438 0.0683807 -0.242188\nv 0.414062 0.0702315 -0.242188\nv 0.421875 0.0698267 -0.242188\nv 0.429688 0.0694579 -0.242188\nv 0.4375 0.0692239 -0.242188\nv 0.445312 0.0682247 -0.242188\nv 0.453125 0.0663336 -0.242188\nv 0.460938 0.0647327 -0.242188\nv 0.472976 0.0625 -0.242188\nv 0.46875 0.0642008 -0.242188\nv -0.268865 0.0703125 -0.242188\nv -0.265625 0.0715699 -0.242188\nv -0.257812 0.0768912 -0.242188\nv -0.210938 0.0775751 -0.242188\nv -0.203125 0.0768452 -0.242188\nv -0.195312 0.0770502 -0.242188\nv -0.1875 0.0771917 -0.242188\nv -0.179688 0.0771267 -0.242188\nv -0.171875 0.0767039 -0.242188\nv -0.164062 0.0763452 -0.242188\nv -0.15625 0.0760425 -0.242188\nv -0.148438 0.0755902 -0.242188\nv -0.140625 0.0753097 -0.242188\nv -0.132812 0.0751871 -0.242188\nv -0.125 0.0750189 -0.242188\nv -0.117188 0.0747916 -0.242188\nv -0.109375 0.0746537 -0.242188\nv -0.101562 0.0745492 -0.242188\nv -0.09375 0.0745036 -0.242188\nv -0.0859375 0.0744951 -0.242188\nv -0.078125 0.0744826 -0.242188\nv -0.0703125 0.0744859 -0.242188\nv -0.0625 0.0745338 -0.242188\nv -0.0546875 0.0745367 -0.242188\nv -0.046875 0.0745845 -0.242188\nv -0.0390625 0.0745688 -0.242188\nv -0.03125 0.0744936 -0.242188\nv -0.0234375 0.074351 -0.242188\nv -0.015625 0.0741902 -0.242188\nv -0.0078125 0.0740167 -0.242188\nv 0 0.0738311 -0.242188\nv 0.0078125 0.0737092 -0.242188\nv 0.015625 0.0736729 -0.242188\nv 0.0234375 0.0736321 -0.242188\nv 0.03125 0.0735475 -0.242188\nv 0.0390625 0.0734827 -0.242188\nv 0.046875 0.0733714 -0.242188\nv 0.0546875 0.0732949 -0.242188\nv 0.0625 0.0732109 -0.242188\nv 0.0703125 0.0731488 -0.242188\nv 0.078125 0.0731172 -0.242188\nv 0.0859375 0.0731276 -0.242188\nv 0.09375 0.073116 -0.242188\nv 0.101562 0.0731313 -0.242188\nv 0.109375 0.0731449 -0.242188\nv 0.117188 0.0731564 -0.242188\nv 0.125 0.0731276 -0.242188\nv 0.132812 0.0731076 -0.242188\nv 0.140625 0.0731277 -0.242188\nv 0.148438 0.073138 -0.242188\nv 0.15625 0.0731408 -0.242188\nv 0.164062 0.0731578 -0.242188\nv 0.171875 0.0731291 -0.242188\nv 0.179688 0.0731146 -0.242188\nv 0.1875 0.0730964 -0.242188\nv 0.195312 0.0730694 -0.242188\nv 0.203125 0.0730228 -0.242188\nv 0.210938 0.0729915 -0.242188\nv 0.21875 0.0729829 -0.242188\nv 0.226562 0.0729392 -0.242188\nv 0.234375 0.0728666 -0.242188\nv 0.242188 0.0728189 -0.242188\nv 0.25 0.0727782 -0.242188\nv 0.257812 0.0727367 -0.242188\nv 0.265625 0.0726939 -0.242188\nv 0.273438 0.0727268 -0.242188\nv 0.28125 0.0727395 -0.242188\nv 0.289062 0.0727264 -0.242188\nv 0.296875 0.0726914 -0.242188\nv 0.304688 0.0726484 -0.242188\nv 0.3125 0.0726843 -0.242188\nv 0.320312 0.0727464 -0.242188\nv 0.328125 0.0728087 -0.242188\nv 0.335938 0.0728379 -0.242188\nv 0.34375 0.072849 -0.242188\nv 0.351562 0.0725731 -0.242188\nv 0.359375 0.0722941 -0.242188\nv 0.367188 0.0720086 -0.242188\nv 0.375 0.0716961 -0.242188\nv 0.382812 0.0713821 -0.242188\nv 0.390625 0.0711425 -0.242188\nv 0.398438 0.0709836 -0.242188\nv 0.412637 0.0703125 -0.242188\nv 0.40625 0.0706686 -0.242188\nv 0.414062 0.0703125 -0.239427\nv -0.256293 0.078125 -0.242188\nv -0.25 0.0825123 -0.242188\nv -0.242188 0.0842467 -0.242188\nv -0.234375 0.0826102 -0.242188\nv -0.226562 0.0808538 -0.242188\nv -0.214154 0.078125 -0.242188\nv -0.21875 0.0789602 -0.242188\nv -0.289062 0.162392 -0.242188\nv -0.28125 0.159225 -0.242188\nv -0.273438 0.159546 -0.242188\nv -0.265625 0.162422 -0.242188\nv -0.291316 0.164062 -0.242188\nv -0.263331 0.164062 -0.242188\nv -0.257812 0.167444 -0.242188\nv -0.294483 0.171875 -0.242188\nv -0.253815 0.171875 -0.242188\nv -0.25 0.175985 -0.242188\nv -0.29627 0.179688 -0.242188\nv -0.296875 0.181784 -0.242188\nv -0.246839 0.179688 -0.242188\nv -0.242188 0.186551 -0.242188\nv -0.298538 0.1875 -0.242188\nv -0.241691 0.1875 -0.242188\nv -0.242188 0.1875 -0.237883\nv -0.300563 0.195312 -0.242188\nv -0.239192 0.195312 -0.242188\nv -0.302095 0.203125 -0.242188\nv -0.238148 0.203125 -0.242188\nv -0.302711 0.210938 -0.242188\nv -0.237214 0.210938 -0.242188\nv -0.302862 0.21875 -0.242188\nv -0.236759 0.21875 -0.242188\nv -0.302586 0.226562 -0.242188\nv -0.236429 0.226562 -0.242188\nv -0.30243 0.234375 -0.242188\nv -0.236476 0.234375 -0.242188\nv -0.302025 0.242188 -0.242188\nv -0.236705 0.242188 -0.242188\nv -0.301946 0.25 -0.242188\nv -0.237183 0.25 -0.242188\nv -0.301536 0.257812 -0.242188\nv -0.238092 0.257812 -0.242188\nv -0.300602 0.265625 -0.242188\nv -0.23893 0.265625 -0.242188\nv -0.298691 0.273438 -0.242188\nv -0.296875 0.278724 -0.242188\nv -0.23926 0.273438 -0.242188\nv -0.295984 0.28125 -0.242188\nv -0.240554 0.28125 -0.242188\nv -0.242188 0.286724 -0.242188\nv -0.293427 0.289062 -0.242188\nv -0.243205 0.289062 -0.242188\nv -0.291484 0.296875 -0.242188\nv -0.248644 0.296875 -0.242188\nv -0.25 0.299104 -0.242188\nv -0.289302 0.304688 -0.242188\nv -0.289062 0.305226 -0.242188\nv -0.289062 0.304688 -0.238053\nv -0.25302 0.304688 -0.242188\nv -0.284948 0.3125 -0.242188\nv -0.265625 0.32017 -0.242188\nv -0.257226 0.3125 -0.242188\nv -0.257812 0.313087 -0.242188\nv -0.257812 0.3125 -0.237574\nv -0.281636 0.320312 -0.242188\nv -0.28125 0.321064 -0.242188\nv -0.265964 0.320312 -0.242188\nv -0.273438 0.32391 -0.242188\nv -0.296875 0.624002 -0.242188\nv -0.29882 0.625 -0.242188\nv -0.304688 0.630548 -0.242188\nv -0.290219 0.625 -0.242188\nv -0.296875 0.625 -0.240106\nv -0.289062 0.625168 -0.242188\nv -0.306053 0.632812 -0.242188\nv -0.304688 0.632812 -0.235778\nv -0.281428 0.632812 -0.242188\nv -0.28125 0.633299 -0.242188\nv -0.310723 0.640625 -0.242188\nv -0.3125 0.643743 -0.242188\nv -0.279259 0.640625 -0.242188\nv -0.314945 0.648438 -0.242188\nv -0.277401 0.648438 -0.242188\nv -0.317665 0.65625 -0.242188\nv -0.2758 0.65625 -0.242188\nv -0.319277 0.664062 -0.242188\nv -0.274093 0.664062 -0.242188\nv -0.273438 0.669213 -0.242188\nv -0.320154 0.671875 -0.242188\nv -0.320312 0.678451 -0.242188\nv -0.273064 0.671875 -0.242188\nv -0.273438 0.671875 -0.237135\nv -0.320341 0.679688 -0.242188\nv -0.320312 0.680891 -0.242188\nv -0.272094 0.679688 -0.242188\nv -0.320145 0.6875 -0.242188\nv -0.271596 0.6875 -0.242188\nv -0.319723 0.695312 -0.242188\nv -0.272088 0.695312 -0.242188\nv -0.319248 0.703125 -0.242188\nv -0.272773 0.703125 -0.242188\nv -0.273438 0.707211 -0.242188\nv -0.318678 0.710938 -0.242188\nv -0.274015 0.710938 -0.242188\nv -0.317536 0.71875 -0.242188\nv -0.275691 0.71875 -0.242188\nv -0.316643 0.726562 -0.242188\nv -0.278216 0.726562 -0.242188\nv -0.28125 0.732708 -0.242188\nv -0.315726 0.734375 -0.242188\nv -0.281902 0.734375 -0.242188\nv -0.314589 0.742188 -0.242188\nv -0.3125 0.747591 -0.242188\nv -0.284914 0.742188 -0.242188\nv -0.289062 0.749333 -0.242188\nv -0.311296 0.75 -0.242188\nv -0.289555 0.75 -0.242188\nv -0.289062 0.75 -0.23737\nv -0.308307 0.757812 -0.242188\nv -0.304688 0.762649 -0.242188\nv -0.296703 0.757812 -0.242188\nv -0.296875 0.758007 -0.242188\nv -0.0078125 -0.546954 -0.234375\nv 0 -0.550474 -0.234375\nv 0.0078125 -0.552159 -0.234375\nv 0.015625 -0.55296 -0.234375\nv 0.0234375 -0.55284 -0.234375\nv 0.03125 -0.552412 -0.234375\nv 0.0390625 -0.551655 -0.234375\nv 0.046875 -0.55066 -0.234375\nv 0.0546875 -0.54934 -0.234375\nv 0.0625 -0.547713 -0.234375\nv -0.00798647 -0.546875 -0.234375\nv 0.0663131 -0.546875 -0.234375\nv 0.0703125 -0.545952 -0.234375\nv 0.078125 -0.543726 -0.234375\nv 0.0859375 -0.540756 -0.234375\nv -0.0120177 -0.539062 -0.234375\nv 0.0894944 -0.539062 -0.234375\nv 0.09375 -0.536317 -0.234375\nv 0.101562 -0.531302 -0.234375\nv -0.00911595 -0.53125 -0.234375\nv -0.0078125 -0.526976 -0.234375\nv 0.101647 -0.53125 -0.234375\nv 0.109375 -0.526793 -0.234375\nv -0.00665289 -0.523438 -0.234375\nv 0.114814 -0.523438 -0.234375\nv 0.117188 -0.521521 -0.234375\nv -0.00416681 -0.515625 -0.234375\nv 0 -0.5097 -0.234375\nv 0.124119 -0.515625 -0.234375\nv 0.125 -0.514817 -0.234375\nv 0.125 -0.515625 -0.229264\nv 0.00146475 -0.507812 -0.234375\nv 0.0078125 -0.505184 -0.234375\nv 0.015625 -0.502017 -0.234375\nv 0.131975 -0.507812 -0.234375\nv 0.132812 -0.502365 -0.234375\nv 0.132812 -0.507812 -0.232105\nv 0.0209254 -0.5 -0.234375\nv 0.0234375 -0.499152 -0.234375\nv 0.03125 -0.495021 -0.234375\nv 0.133151 -0.5 -0.234375\nv 0.132812 -0.498313 -0.234375\nv 0.0365914 -0.492188 -0.234375\nv 0.0390625 -0.490896 -0.234375\nv 0.046875 -0.488067 -0.234375\nv 0.0546875 -0.48523 -0.234375\nv 0.117188 -0.485068 -0.234375\nv 0.13045 -0.492188 -0.234375\nv 0.125 -0.488225 -0.234375\nv 0.0594755 -0.484375 -0.234375\nv 0.0625 -0.483814 -0.234375\nv 0.0703125 -0.482371 -0.234375\nv 0.078125 -0.481495 -0.234375\nv 0.0859375 -0.481023 -0.234375\nv 0.09375 -0.480857 -0.234375\nv 0.101562 -0.480961 -0.234375\nv 0.115181 -0.484375 -0.234375\nv 0.109375 -0.482685 -0.234375\nv -0.28125 -0.0627307 -0.234375\nv 0.445312 -0.0663331 -0.234375\nv 0.453125 -0.0692269 -0.234375\nv 0.460938 -0.068691 -0.234375\nv 0.46875 -0.0666508 -0.234375\nv 0.476562 -0.0655274 -0.234375\nv 0.484375 -0.062526 -0.234375\nv -0.282823 -0.0625 -0.234375\nv -0.289062 -0.0610595 -0.234375\nv -0.276931 -0.0625 -0.234375\nv -0.28125 -0.0625 -0.233079\nv -0.273438 -0.0622181 -0.234375\nv -0.265625 -0.0558387 -0.234375\nv 0.439329 -0.0625 -0.234375\nv 0.484421 -0.0625 -0.234375\nv 0.484375 -0.0625 -0.234259\nv -0.296176 -0.0546875 -0.234375\nv -0.296875 -0.0537651 -0.234375\nv -0.264644 -0.0546875 -0.234375\nv -0.265625 -0.0546875 -0.230607\nv 0.439244 -0.0546875 -0.234375\nv 0.488774 -0.0546875 -0.234375\nv -0.299435 -0.046875 -0.234375\nv -0.259146 -0.046875 -0.234375\nv -0.257812 -0.0430551 -0.234375\nv 0.439009 -0.046875 -0.234375\nv 0.490751 -0.046875 -0.234375\nv 0.492188 -0.0403365 -0.234375\nv -0.30208 -0.0390625 -0.234375\nv -0.256983 -0.0390625 -0.234375\nv -0.257812 -0.0390625 -0.231396\nv 0.439467 -0.0390625 -0.234375\nv 0.49248 -0.0390625 -0.234375\nv 0.492188 -0.0390625 -0.232784\nv -0.303122 -0.03125 -0.234375\nv -0.255983 -0.03125 -0.234375\nv 0.440779 -0.03125 -0.234375\nv 0.494206 -0.03125 -0.234375\nv -0.302979 -0.0234375 -0.234375\nv -0.255084 -0.0234375 -0.234375\nv 0.441425 -0.0234375 -0.234375\nv 0.496782 -0.0234375 -0.234375\nv -0.303824 -0.015625 -0.234375\nv -0.304688 -0.0100897 -0.234375\nv -0.255775 -0.015625 -0.234375\nv 0.441985 -0.015625 -0.234375\nv 0.498529 -0.015625 -0.234375\nv -0.305032 -0.0078125 -0.234375\nv -0.304688 -0.0078125 -0.230694\nv -0.256716 -0.0078125 -0.234375\nv 0.441108 -0.0078125 -0.234375\nv 0.499218 -0.0078125 -0.234375\nv -0.305273 0 -0.234375\nv -0.304688 0.00673512 -0.234375\nv -0.304688 0 -0.226677\nv -0.257651 0 -0.234375\nv -0.257812 0 -0.23105\nv 0.439416 0 -0.234375\nv 0.499207 0 -0.234375\nv -0.304576 0.0078125 -0.234375\nv -0.257124 0.0078125 -0.234375\nv 0.438768 0.0078125 -0.234375\nv 0.4375 0.0148572 -0.234375\nv 0.498961 0.0078125 -0.234375\nv -0.302818 0.015625 -0.234375\nv -0.251179 0.015625 -0.234375\nv -0.25 0.0165258 -0.234375\nv -0.242188 0.020782 -0.234375\nv -0.234375 0.021444 -0.234375\nv 0.43727 0.015625 -0.234375\nv 0.429688 0.0221775 -0.234375\nv 0.4375 0.015625 -0.232806\nv 0.499074 0.015625 -0.234375\nv -0.301403 0.0234375 -0.234375\nv -0.226909 0.0234375 -0.234375\nv -0.226562 0.0235034 -0.234375\nv -0.21875 0.025741 -0.234375\nv -0.210938 0.0279054 -0.234375\nv -0.203125 0.0292131 -0.234375\nv -0.195312 0.0297474 -0.234375\nv -0.1875 0.0299709 -0.234375\nv -0.179688 0.0291812 -0.234375\nv -0.171875 0.0283902 -0.234375\nv -0.164062 0.0278313 -0.234375\nv -0.15625 0.0273874 -0.234375\nv -0.148438 0.0273105 -0.234375\nv -0.140625 0.0273255 -0.234375\nv -0.132812 0.0274125 -0.234375\nv -0.125 0.027546 -0.234375\nv -0.117188 0.027649 -0.234375\nv -0.109375 0.0277059 -0.234375\nv -0.101562 0.027689 -0.234375\nv -0.09375 0.0275297 -0.234375\nv -0.0859375 0.0273274 -0.234375\nv -0.078125 0.0270731 -0.234375\nv -0.0703125 0.0267789 -0.234375\nv -0.0625 0.0266067 -0.234375\nv -0.0546875 0.0264493 -0.234375\nv -0.046875 0.0263604 -0.234375\nv -0.0390625 0.0262752 -0.234375\nv -0.03125 0.0261616 -0.234375\nv -0.0234375 0.0260165 -0.234375\nv -0.015625 0.0258688 -0.234375\nv -0.0078125 0.0257668 -0.234375\nv 0 0.0257527 -0.234375\nv 0.0078125 0.0256738 -0.234375\nv 0.015625 0.0256595 -0.234375\nv 0.0234375 0.0256796 -0.234375\nv 0.03125 0.0256358 -0.234375\nv 0.0390625 0.0256218 -0.234375\nv 0.046875 0.0256159 -0.234375\nv 0.0546875 0.0256091 -0.234375\nv 0.0625 0.0255877 -0.234375\nv 0.0703125 0.0255523 -0.234375\nv 0.078125 0.0255384 -0.234375\nv 0.0859375 0.0255429 -0.234375\nv 0.09375 0.0256008 -0.234375\nv 0.101562 0.0256859 -0.234375\nv 0.109375 0.0257064 -0.234375\nv 0.117188 0.0256646 -0.234375\nv 0.125 0.0255921 -0.234375\nv 0.132812 0.0255595 -0.234375\nv 0.140625 0.0255363 -0.234375\nv 0.148438 0.0255106 -0.234375\nv 0.15625 0.0254932 -0.234375\nv 0.164062 0.025472 -0.234375\nv 0.171875 0.0254655 -0.234375\nv 0.179688 0.0254699 -0.234375\nv 0.1875 0.0254537 -0.234375\nv 0.195312 0.0254314 -0.234375\nv 0.203125 0.025443 -0.234375\nv 0.210938 0.0254673 -0.234375\nv 0.21875 0.0255104 -0.234375\nv 0.226562 0.025611 -0.234375\nv 0.234375 0.0258147 -0.234375\nv 0.242188 0.0260421 -0.234375\nv 0.25 0.0262921 -0.234375\nv 0.257812 0.0264914 -0.234375\nv 0.265625 0.0267498 -0.234375\nv 0.273438 0.0269584 -0.234375\nv 0.28125 0.0270933 -0.234375\nv 0.289062 0.027089 -0.234375\nv 0.296875 0.027013 -0.234375\nv 0.304688 0.0269421 -0.234375\nv 0.3125 0.0269079 -0.234375\nv 0.320312 0.0269006 -0.234375\nv 0.328125 0.0269212 -0.234375\nv 0.335938 0.0269647 -0.234375\nv 0.34375 0.0272082 -0.234375\nv 0.351562 0.0275221 -0.234375\nv 0.359375 0.0278079 -0.234375\nv 0.367188 0.0282823 -0.234375\nv 0.375 0.0288221 -0.234375\nv 0.382812 0.0289669 -0.234375\nv 0.390625 0.0283355 -0.234375\nv 0.398438 0.0277079 -0.234375\nv 0.40625 0.027086 -0.234375\nv 0.414062 0.0262942 -0.234375\nv 0.426563 0.0234375 -0.234375\nv 0.421875 0.0246052 -0.234375\nv 0.499438 0.0234375 -0.234375\nv -0.299905 0.03125 -0.234375\nv 0.49705 0.03125 -0.234375\nv -0.298478 0.0390625 -0.234375\nv -0.296875 0.0447537 -0.234375\nv 0.49435 0.0390625 -0.234375\nv 0.492188 0.0464765 -0.234375\nv -0.296045 0.046875 -0.234375\nv 0.492063 0.046875 -0.234375\nv -0.293864 0.0546875 -0.234375\nv 0.476562 0.0609524 -0.234375\nv 0.486251 0.0546875 -0.234375\nv 0.484375 0.0560871 -0.234375\nv -0.29009 0.0625 -0.234375\nv -0.289062 0.0635747 -0.234375\nv -0.28125 0.0660037 -0.234375\nv -0.273438 0.0696508 -0.234375\nv 0.421875 0.069987 -0.234375\nv 0.429688 0.0695631 -0.234375\nv 0.4375 0.0693092 -0.234375\nv 0.445312 0.0682592 -0.234375\nv 0.453125 0.0663008 -0.234375\nv 0.460938 0.0647985 -0.234375\nv 0.473059 0.0625 -0.234375\nv 0.46875 0.0642088 -0.234375\nv -0.2715 0.0703125 -0.234375\nv -0.273438 0.0703125 -0.23016\nv -0.265625 0.0723509 -0.234375\nv -0.257812 0.0777428 -0.234375\nv -0.210938 0.0773349 -0.234375\nv -0.203125 0.0765485 -0.234375\nv -0.195312 0.0768746 -0.234375\nv -0.1875 0.0770448 -0.234375\nv -0.179688 0.0770584 -0.234375\nv -0.171875 0.0766829 -0.234375\nv -0.164062 0.0763819 -0.234375\nv -0.15625 0.076001 -0.234375\nv -0.148438 0.0756274 -0.234375\nv -0.140625 0.0754759 -0.234375\nv -0.132812 0.0754093 -0.234375\nv -0.125 0.0751419 -0.234375\nv -0.117188 0.074874 -0.234375\nv -0.109375 0.0746929 -0.234375\nv -0.101562 0.0745724 -0.234375\nv -0.09375 0.0745369 -0.234375\nv -0.0859375 0.0745384 -0.234375\nv -0.078125 0.0745747 -0.234375\nv -0.0703125 0.0745354 -0.234375\nv -0.0625 0.0745364 -0.234375\nv -0.0546875 0.0745654 -0.234375\nv -0.046875 0.0745735 -0.234375\nv -0.0390625 0.0745975 -0.234375\nv -0.03125 0.0745007 -0.234375\nv -0.0234375 0.0743438 -0.234375\nv -0.015625 0.0741686 -0.234375\nv -0.0078125 0.0739856 -0.234375\nv 0 0.0738165 -0.234375\nv 0.0078125 0.0736684 -0.234375\nv 0.015625 0.0736142 -0.234375\nv 0.0234375 0.0735522 -0.234375\nv 0.03125 0.0734709 -0.234375\nv 0.0390625 0.0734336 -0.234375\nv 0.046875 0.0733499 -0.234375\nv 0.0546875 0.0732456 -0.234375\nv 0.0625 0.0731431 -0.234375\nv 0.0703125 0.0730545 -0.234375\nv 0.078125 0.0730223 -0.234375\nv 0.0859375 0.0730337 -0.234375\nv 0.09375 0.0730122 -0.234375\nv 0.101562 0.073032 -0.234375\nv 0.109375 0.0730466 -0.234375\nv 0.117188 0.0730545 -0.234375\nv 0.125 0.0730195 -0.234375\nv 0.132812 0.072995 -0.234375\nv 0.140625 0.0730066 -0.234375\nv 0.148438 0.0730212 -0.234375\nv 0.15625 0.0730164 -0.234375\nv 0.164062 0.0729666 -0.234375\nv 0.171875 0.072923 -0.234375\nv 0.179688 0.07291 -0.234375\nv 0.1875 0.0728946 -0.234375\nv 0.195312 0.0728567 -0.234375\nv 0.203125 0.072861 -0.234375\nv 0.210938 0.0728412 -0.234375\nv 0.21875 0.0728492 -0.234375\nv 0.226562 0.0728199 -0.234375\nv 0.234375 0.0727572 -0.234375\nv 0.242188 0.0727122 -0.234375\nv 0.25 0.0726595 -0.234375\nv 0.257812 0.0725989 -0.234375\nv 0.265625 0.0726175 -0.234375\nv 0.273438 0.0726371 -0.234375\nv 0.28125 0.0726784 -0.234375\nv 0.289062 0.07273 -0.234375\nv 0.296875 0.0727374 -0.234375\nv 0.304688 0.072737 -0.234375\nv 0.3125 0.0727879 -0.234375\nv 0.320312 0.0727807 -0.234375\nv 0.328125 0.0728062 -0.234375\nv 0.335938 0.0728194 -0.234375\nv 0.34375 0.0728483 -0.234375\nv 0.351562 0.0726982 -0.234375\nv 0.359375 0.0724729 -0.234375\nv 0.367188 0.0721605 -0.234375\nv 0.375 0.0718633 -0.234375\nv 0.382812 0.0715192 -0.234375\nv 0.390625 0.0712608 -0.234375\nv 0.398438 0.0711316 -0.234375\nv 0.40625 0.0708583 -0.234375\nv 0.416513 0.0703125 -0.234375\nv 0.414062 0.0704582 -0.234375\nv -0.257326 0.078125 -0.234375\nv -0.257812 0.078125 -0.231356\nv -0.25 0.0840307 -0.234375\nv -0.242188 0.0849294 -0.234375\nv -0.234375 0.0826324 -0.234375\nv -0.226562 0.080635 -0.234375\nv -0.215598 0.078125 -0.234375\nv -0.21875 0.0787057 -0.234375\nv -0.289062 0.162439 -0.234375\nv -0.28125 0.159165 -0.234375\nv -0.273438 0.159583 -0.234375\nv -0.265625 0.162544 -0.234375\nv -0.291077 0.164062 -0.234375\nv -0.26354 0.164062 -0.234375\nv -0.257812 0.167812 -0.234375\nv -0.293942 0.171875 -0.234375\nv -0.2543 0.171875 -0.234375\nv -0.25 0.176398 -0.234375\nv -0.295958 0.179688 -0.234375\nv -0.296875 0.18289 -0.234375\nv -0.247431 0.179688 -0.234375\nv -0.298147 0.1875 -0.234375\nv -0.242667 0.1875 -0.234375\nv -0.242188 0.188698 -0.234375\nv -0.300158 0.195312 -0.234375\nv -0.239657 0.195312 -0.234375\nv -0.30188 0.203125 -0.234375\nv -0.238437 0.203125 -0.234375\nv -0.302414 0.210938 -0.234375\nv -0.237511 0.210938 -0.234375\nv -0.302702 0.21875 -0.234375\nv -0.236962 0.21875 -0.234375\nv -0.302535 0.226562 -0.234375\nv -0.236561 0.226562 -0.234375\nv -0.302288 0.234375 -0.234375\nv -0.236706 0.234375 -0.234375\nv -0.30178 0.242188 -0.234375\nv -0.236989 0.242188 -0.234375\nv -0.301825 0.25 -0.234375\nv -0.237601 0.25 -0.234375\nv -0.301393 0.257812 -0.234375\nv -0.238623 0.257812 -0.234375\nv -0.300456 0.265625 -0.234375\nv -0.239423 0.265625 -0.234375\nv -0.298347 0.273438 -0.234375\nv -0.296875 0.277592 -0.234375\nv -0.23982 0.273438 -0.234375\nv -0.295564 0.28125 -0.234375\nv -0.241364 0.28125 -0.234375\nv -0.242188 0.28395 -0.234375\nv -0.242188 0.28125 -0.228596\nv -0.293069 0.289062 -0.234375\nv -0.244214 0.289062 -0.234375\nv -0.291301 0.296875 -0.234375\nv -0.289062 0.303924 -0.234375\nv -0.248842 0.296875 -0.234375\nv -0.25 0.299057 -0.234375\nv -0.288792 0.304688 -0.234375\nv -0.253178 0.304688 -0.234375\nv -0.257812 0.311827 -0.234375\nv -0.284737 0.3125 -0.234375\nv -0.25835 0.3125 -0.234375\nv -0.265625 0.319618 -0.234375\nv -0.281611 0.320312 -0.234375\nv -0.28125 0.320973 -0.234375\nv -0.2669 0.320312 -0.234375\nv -0.273438 0.324313 -0.234375\nv -0.265625 0.320312 -0.229194\nv -0.296875 0.627928 -0.234375\nv -0.289062 0.628924 -0.234375\nv -0.304254 0.632812 -0.234375\nv -0.304688 0.633251 -0.234375\nv -0.284502 0.632812 -0.234375\nv -0.28125 0.640079 -0.234375\nv -0.309799 0.640625 -0.234375\nv -0.3125 0.645113 -0.234375\nv -0.281096 0.640625 -0.234375\nv -0.28125 0.640625 -0.233765\nv -0.314406 0.648438 -0.234375\nv -0.277959 0.648438 -0.234375\nv -0.317237 0.65625 -0.234375\nv -0.276116 0.65625 -0.234375\nv -0.318859 0.664062 -0.234375\nv -0.27464 0.664062 -0.234375\nv -0.320076 0.671875 -0.234375\nv -0.320312 0.678353 -0.234375\nv -0.273618 0.671875 -0.234375\nv -0.273438 0.673143 -0.234375\nv -0.320358 0.679688 -0.234375\nv -0.320312 0.682006 -0.234375\nv -0.272377 0.679688 -0.234375\nv -0.320201 0.6875 -0.234375\nv -0.271887 0.6875 -0.234375\nv -0.319834 0.695312 -0.234375\nv -0.272379 0.695312 -0.234375\nv -0.319433 0.703125 -0.234375\nv -0.273123 0.703125 -0.234375\nv -0.273438 0.705172 -0.234375\nv -0.273438 0.703125 -0.228734\nv -0.318826 0.710938 -0.234375\nv -0.274269 0.710938 -0.234375\nv -0.317504 0.71875 -0.234375\nv -0.275919 0.71875 -0.234375\nv -0.316656 0.726562 -0.234375\nv -0.278438 0.726562 -0.234375\nv -0.28125 0.733128 -0.234375\nv -0.315732 0.734375 -0.234375\nv -0.281684 0.734375 -0.234375\nv -0.314496 0.742188 -0.234375\nv -0.3125 0.748281 -0.234375\nv -0.284759 0.742188 -0.234375\nv -0.31178 0.75 -0.234375\nv -0.3125 0.75 -0.231533\nv -0.288791 0.75 -0.234375\nv -0.289062 0.750462 -0.234375\nv -0.308531 0.757812 -0.234375\nv -0.304688 0.762951 -0.234375\nv -0.294939 0.757812 -0.234375\nv -0.296875 0.759874 -0.234375\nv -0.304688 0.765625 -0.226798\nv -0.0078125 -0.547603 -0.226562\nv 0 -0.550789 -0.226562\nv 0.0078125 -0.55292 -0.226562\nv 0.015625 -0.554031 -0.226562\nv 0.0234375 -0.55387 -0.226562\nv 0.03125 -0.553325 -0.226562\nv 0.0390625 -0.552667 -0.226562\nv 0.046875 -0.551598 -0.226562\nv 0.0546875 -0.550157 -0.226562\nv 0.0625 -0.54846 -0.226562\nv -0.0092968 -0.546875 -0.226562\nv 0.069795 -0.546875 -0.226562\nv 0.0703125 -0.546759 -0.226562\nv 0.0703125 -0.546875 -0.225066\nv 0.078125 -0.544304 -0.226562\nv 0.0859375 -0.541124 -0.226562\nv -0.0139941 -0.539062 -0.226562\nv 0.0904706 -0.539062 -0.226562\nv 0.09375 -0.536959 -0.226562\nv 0.101562 -0.532411 -0.226562\nv -0.010204 -0.53125 -0.226562\nv -0.0078125 -0.525854 -0.226562\nv 0.103491 -0.53125 -0.226562\nv 0.109375 -0.527864 -0.226562\nv -0.00661668 -0.523438 -0.226562\nv 0.116402 -0.523438 -0.226562\nv 0.117188 -0.522782 -0.226562\nv 0.117188 -0.523438 -0.224624\nv 0.125 -0.516269 -0.226562\nv -0.00316157 -0.515625 -0.226562\nv 0 -0.511611 -0.226562\nv 0.12604 -0.515625 -0.226562\nv 0.132812 -0.51113 -0.226562\nv 0.132812 -0.515625 -0.2221\nv 0.00293942 -0.507812 -0.226562\nv 0.0078125 -0.505273 -0.226562\nv 0.015625 -0.501423 -0.226562\nv 0.136497 -0.507812 -0.226562\nv 0.140625 -0.507812 -0.221079\nv 0.0188457 -0.5 -0.226562\nv 0.0234375 -0.49823 -0.226562\nv 0.03125 -0.494339 -0.226562\nv 0.135722 -0.5 -0.226562\nv 0.132812 -0.495727 -0.226562\nv 0.0354032 -0.492188 -0.226562\nv 0.0390625 -0.490272 -0.226562\nv 0.046875 -0.487324 -0.226562\nv 0.0546875 -0.48438 -0.226562\nv 0.117188 -0.485837 -0.226562\nv 0.12955 -0.492188 -0.226562\nv 0.125 -0.489382 -0.226562\nv 0.0547192 -0.484375 -0.226562\nv 0.0546875 -0.484375 -0.226484\nv 0.0625 -0.483175 -0.226562\nv 0.0703125 -0.481846 -0.226562\nv 0.078125 -0.481126 -0.226562\nv 0.0859375 -0.480711 -0.226562\nv 0.09375 -0.481142 -0.226562\nv 0.101562 -0.482044 -0.226562\nv 0.112584 -0.484375 -0.226562\nv 0.109375 -0.483512 -0.226562\nv 0.109375 -0.484375 -0.221239\nv 0.445312 -0.0652634 -0.226562\nv 0.453125 -0.0686969 -0.226562\nv 0.460938 -0.0681716 -0.226562\nv 0.46875 -0.0648112 -0.226562\nv 0.476562 -0.0637398 -0.226562\nv -0.289062 -0.0587639 -0.226562\nv -0.28125 -0.0607436 -0.226562\nv -0.273438 -0.0600077 -0.226562\nv 0.44259 -0.0625 -0.226562\nv 0.480105 -0.0625 -0.226562\nv 0.476562 -0.0625 -0.219756\nv 0.484375 -0.058972 -0.226562\nv -0.29358 -0.0546875 -0.226562\nv -0.296875 -0.0502587 -0.226562\nv -0.26715 -0.0546875 -0.226562\nv -0.265625 -0.0533179 -0.226562\nv 0.441583 -0.0546875 -0.226562\nv 0.487151 -0.0546875 -0.226562\nv -0.2981 -0.046875 -0.226562\nv -0.262201 -0.046875 -0.226562\nv 0.441252 -0.046875 -0.226562\nv 0.489543 -0.046875 -0.226562\nv -0.30085 -0.0390625 -0.226562\nv -0.259672 -0.0390625 -0.226562\nv -0.257812 -0.0313327 -0.226562\nv 0.441544 -0.0390625 -0.226562\nv 0.491104 -0.0390625 -0.226562\nv 0.492188 -0.0348244 -0.226562\nv -0.302168 -0.03125 -0.226562\nv -0.257799 -0.03125 -0.226562\nv -0.257812 -0.03125 -0.22641\nv 0.442512 -0.03125 -0.226562\nv 0.493123 -0.03125 -0.226562\nv -0.301974 -0.0234375 -0.226562\nv -0.256576 -0.0234375 -0.226562\nv 0.442492 -0.0234375 -0.226562\nv 0.496425 -0.0234375 -0.226562\nv -0.302913 -0.015625 -0.226562\nv -0.256841 -0.015625 -0.226562\nv 0.442166 -0.015625 -0.226562\nv 0.498755 -0.015625 -0.226562\nv -0.304264 -0.0078125 -0.226562\nv -0.25718 -0.0078125 -0.226562\nv -0.257812 -0.00184413 -0.226562\nv 0.440847 -0.0078125 -0.226562\nv 0.499424 -0.0078125 -0.226562\nv -0.304676 0 -0.226562\nv -0.258024 0 -0.226562\nv -0.257812 0.00343342 -0.226562\nv 0.439161 0 -0.226562\nv 0.499379 0 -0.226562\nv -0.303921 0.0078125 -0.226562\nv -0.257445 0.0078125 -0.226562\nv 0.439366 0.0078125 -0.226562\nv 0.499045 0.0078125 -0.226562\nv -0.30233 0.015625 -0.226562\nv -0.25269 0.015625 -0.226562\nv -0.25 0.0177623 -0.226562\nv -0.242188 0.0213883 -0.226562\nv -0.234375 0.0219759 -0.226562\nv 0.429688 0.0228249 -0.226562\nv 0.438103 0.015625 -0.226562\nv 0.4375 0.0164443 -0.226562\nv 0.499186 0.015625 -0.226562\nv -0.301048 0.0234375 -0.226562\nv -0.228854 0.0234375 -0.226562\nv -0.226562 0.0238729 -0.226562\nv -0.21875 0.0261207 -0.226562\nv -0.210938 0.0283029 -0.226562\nv -0.203125 0.0294957 -0.226562\nv -0.195312 0.0298899 -0.226562\nv -0.1875 0.0300029 -0.226562\nv -0.179688 0.0291967 -0.226562\nv -0.171875 0.0283787 -0.226562\nv -0.164062 0.027816 -0.226562\nv -0.15625 0.0274618 -0.226562\nv -0.148438 0.0274155 -0.226562\nv -0.140625 0.0274105 -0.226562\nv -0.132812 0.0274536 -0.226562\nv -0.125 0.0275512 -0.226562\nv -0.117188 0.0276589 -0.226562\nv -0.109375 0.027713 -0.226562\nv -0.101562 0.0276369 -0.226562\nv -0.09375 0.0274071 -0.226562\nv -0.0859375 0.0271863 -0.226562\nv -0.078125 0.0269505 -0.226562\nv -0.0703125 0.0266624 -0.226562\nv -0.0625 0.0264849 -0.226562\nv -0.0546875 0.0263409 -0.226562\nv -0.046875 0.026226 -0.226562\nv -0.0390625 0.0261307 -0.226562\nv -0.03125 0.0260366 -0.226562\nv -0.0234375 0.0259277 -0.226562\nv -0.015625 0.0258135 -0.226562\nv -0.0078125 0.0257432 -0.226562\nv 0 0.0257279 -0.226562\nv 0.0078125 0.025626 -0.226562\nv 0.015625 0.0256194 -0.226562\nv 0.0234375 0.0256389 -0.226562\nv 0.03125 0.0256124 -0.226562\nv 0.0390625 0.0255801 -0.226562\nv 0.046875 0.0255506 -0.226562\nv 0.0546875 0.0255127 -0.226562\nv 0.0625 0.0254842 -0.226562\nv 0.0703125 0.025447 -0.226562\nv 0.078125 0.0254175 -0.226562\nv 0.0859375 0.0254279 -0.226562\nv 0.09375 0.0254705 -0.226562\nv 0.101562 0.0255412 -0.226562\nv 0.109375 0.02556 -0.226562\nv 0.117188 0.0255285 -0.226562\nv 0.125 0.0254797 -0.226562\nv 0.132812 0.0254502 -0.226562\nv 0.140625 0.0254317 -0.226562\nv 0.148438 0.0253834 -0.226562\nv 0.15625 0.025363 -0.226562\nv 0.164062 0.0253423 -0.226562\nv 0.171875 0.0253063 -0.226562\nv 0.179688 0.0252902 -0.226562\nv 0.1875 0.0252504 -0.226562\nv 0.195312 0.0252183 -0.226562\nv 0.203125 0.0252236 -0.226562\nv 0.210938 0.0252523 -0.226562\nv 0.21875 0.0253345 -0.226562\nv 0.226562 0.025458 -0.226562\nv 0.234375 0.0256102 -0.226562\nv 0.242188 0.0258291 -0.226562\nv 0.25 0.0260146 -0.226562\nv 0.257812 0.0262481 -0.226562\nv 0.265625 0.0264623 -0.226562\nv 0.273438 0.0266433 -0.226562\nv 0.28125 0.0268221 -0.226562\nv 0.289062 0.0269401 -0.226562\nv 0.296875 0.0269054 -0.226562\nv 0.304688 0.0268397 -0.226562\nv 0.3125 0.0267642 -0.226562\nv 0.320312 0.0267674 -0.226562\nv 0.328125 0.0267709 -0.226562\nv 0.335938 0.0268003 -0.226562\nv 0.34375 0.0269099 -0.226562\nv 0.351562 0.0271892 -0.226562\nv 0.359375 0.0274782 -0.226562\nv 0.367188 0.0277973 -0.226562\nv 0.375 0.0283027 -0.226562\nv 0.382812 0.0285017 -0.226562\nv 0.390625 0.0281805 -0.226562\nv 0.398438 0.0275823 -0.226562\nv 0.40625 0.026965 -0.226562\nv 0.414062 0.0262299 -0.226562\nv 0.428005 0.0234375 -0.226562\nv 0.421875 0.0248186 -0.226562\nv 0.499581 0.0234375 -0.226562\nv -0.299581 0.03125 -0.226562\nv 0.49714 0.03125 -0.226562\nv -0.298341 0.0390625 -0.226562\nv -0.296875 0.0441977 -0.226562\nv 0.494538 0.0390625 -0.226562\nv 0.492188 0.0468535 -0.226562\nv -0.295837 0.046875 -0.226562\nv 0.49218 0.046875 -0.226562\nv 0.492188 0.046875 -0.226321\nv -0.293795 0.0546875 -0.226562\nv 0.476562 0.0608636 -0.226562\nv 0.486585 0.0546875 -0.226562\nv 0.484375 0.0562847 -0.226562\nv -0.290463 0.0625 -0.226562\nv -0.289062 0.0641283 -0.226562\nv -0.28125 0.066781 -0.226562\nv 0.421875 0.0702 -0.226562\nv 0.429688 0.0697308 -0.226562\nv 0.4375 0.0694332 -0.226562\nv 0.445312 0.0682899 -0.226562\nv 0.453125 0.0663078 -0.226562\nv 0.460938 0.0648503 -0.226562\nv 0.472864 0.0625 -0.226562\nv 0.46875 0.0641955 -0.226562\nv -0.274476 0.0703125 -0.226562\nv -0.273438 0.0709868 -0.226562\nv -0.265625 0.0735874 -0.226562\nv -0.210938 0.0770236 -0.226562\nv -0.203125 0.0762738 -0.226562\nv -0.195312 0.0765599 -0.226562\nv -0.1875 0.0768708 -0.226562\nv -0.179688 0.0769552 -0.226562\nv -0.171875 0.0765919 -0.226562\nv -0.164062 0.0762824 -0.226562\nv -0.15625 0.0759982 -0.226562\nv -0.148438 0.0757237 -0.226562\nv -0.140625 0.0755595 -0.226562\nv -0.132812 0.0754558 -0.226562\nv -0.125 0.0752223 -0.226562\nv -0.117188 0.0749201 -0.226562\nv -0.109375 0.0747068 -0.226562\nv -0.101562 0.0745433 -0.226562\nv -0.09375 0.0745116 -0.226562\nv -0.0859375 0.0745526 -0.226562\nv -0.078125 0.0745179 -0.226562\nv -0.0703125 0.0745255 -0.226562\nv -0.0625 0.0744901 -0.226562\nv -0.0546875 0.0745032 -0.226562\nv -0.046875 0.0744977 -0.226562\nv -0.0390625 0.0744936 -0.226562\nv -0.03125 0.0744136 -0.226562\nv -0.0234375 0.0742441 -0.226562\nv -0.015625 0.0740715 -0.226562\nv -0.0078125 0.0739418 -0.226562\nv 0 0.0737752 -0.226562\nv 0.0078125 0.0736211 -0.226562\nv 0.015625 0.0735433 -0.226562\nv 0.0234375 0.0734743 -0.226562\nv 0.03125 0.0733604 -0.226562\nv 0.0390625 0.0732696 -0.226562\nv 0.046875 0.0731683 -0.226562\nv 0.0546875 0.0730934 -0.226562\nv 0.0625 0.0730226 -0.226562\nv 0.0703125 0.0729671 -0.226562\nv 0.078125 0.0729071 -0.226562\nv 0.0859375 0.0728918 -0.226562\nv 0.09375 0.0729016 -0.226562\nv 0.101562 0.0729297 -0.226562\nv 0.109375 0.0729205 -0.226562\nv 0.117188 0.0729024 -0.226562\nv 0.125 0.0728627 -0.226562\nv 0.132812 0.0728565 -0.226562\nv 0.140625 0.0728821 -0.226562\nv 0.148438 0.072902 -0.226562\nv 0.15625 0.072891 -0.226562\nv 0.164062 0.0728141 -0.226562\nv 0.171875 0.0727348 -0.226562\nv 0.179688 0.0727238 -0.226562\nv 0.1875 0.0726805 -0.226562\nv 0.195312 0.0726684 -0.226562\nv 0.203125 0.0726797 -0.226562\nv 0.210938 0.0726985 -0.226562\nv 0.21875 0.0727235 -0.226562\nv 0.226562 0.0726841 -0.226562\nv 0.234375 0.0726265 -0.226562\nv 0.242188 0.0725836 -0.226562\nv 0.25 0.0725277 -0.226562\nv 0.257812 0.0725584 -0.226562\nv 0.265625 0.0725648 -0.226562\nv 0.273438 0.0725997 -0.226562\nv 0.28125 0.0726625 -0.226562\nv 0.289062 0.072687 -0.226562\nv 0.296875 0.0727554 -0.226562\nv 0.304688 0.0727895 -0.226562\nv 0.3125 0.0728261 -0.226562\nv 0.320312 0.0728618 -0.226562\nv 0.328125 0.0728879 -0.226562\nv 0.335938 0.0728909 -0.226562\nv 0.34375 0.0728918 -0.226562\nv 0.351562 0.0727838 -0.226562\nv 0.359375 0.0725892 -0.226562\nv 0.367188 0.0723071 -0.226562\nv 0.375 0.0720185 -0.226562\nv 0.382812 0.0716279 -0.226562\nv 0.390625 0.0713418 -0.226562\nv 0.398438 0.0712322 -0.226562\nv 0.40625 0.0710468 -0.226562\nv 0.420091 0.0703125 -0.226562\nv 0.414062 0.0706776 -0.226562\nv 0.421875 0.0703125 -0.222999\nv -0.25876 0.078125 -0.226562\nv -0.257812 0.0789772 -0.226562\nv -0.25 0.0851182 -0.226562\nv -0.242188 0.0856606 -0.226562\nv -0.234375 0.0824719 -0.226562\nv -0.226562 0.0802676 -0.226562\nv -0.218105 0.078125 -0.226562\nv -0.21875 0.0782352 -0.226562\nv -0.21875 0.078125 -0.224612\nv -0.289062 0.16371 -0.226562\nv -0.28125 0.160357 -0.226562\nv -0.273438 0.160084 -0.226562\nv -0.265625 0.163004 -0.226562\nv -0.289518 0.164062 -0.226562\nv -0.289062 0.164062 -0.225422\nv -0.264178 0.164062 -0.226562\nv -0.265625 0.164062 -0.221042\nv -0.257812 0.168221 -0.226562\nv -0.293172 0.171875 -0.226562\nv -0.254865 0.171875 -0.226562\nv -0.25 0.177729 -0.226562\nv -0.295402 0.179688 -0.226562\nv -0.296875 0.184335 -0.226562\nv -0.248633 0.179688 -0.226562\nv -0.25 0.179688 -0.220979\nv -0.297779 0.1875 -0.226562\nv -0.243517 0.1875 -0.226562\nv -0.242188 0.190454 -0.226562\nv -0.299753 0.195312 -0.226562\nv -0.24009 0.195312 -0.226562\nv -0.301629 0.203125 -0.226562\nv -0.238733 0.203125 -0.226562\nv -0.302109 0.210938 -0.226562\nv -0.237914 0.210938 -0.226562\nv -0.302463 0.21875 -0.226562\nv -0.237415 0.21875 -0.226562\nv -0.302349 0.226562 -0.226562\nv -0.237171 0.226562 -0.226562\nv -0.302046 0.234375 -0.226562\nv -0.237249 0.234375 -0.226562\nv -0.301588 0.242188 -0.226562\nv -0.237614 0.242188 -0.226562\nv -0.301563 0.25 -0.226562\nv -0.238326 0.25 -0.226562\nv -0.301098 0.257812 -0.226562\nv -0.239358 0.257812 -0.226562\nv -0.300113 0.265625 -0.226562\nv -0.240116 0.265625 -0.226562\nv -0.29795 0.273438 -0.226562\nv -0.296875 0.276583 -0.226562\nv -0.240688 0.273438 -0.226562\nv -0.242188 0.28001 -0.226562\nv -0.295248 0.28125 -0.226562\nv -0.242493 0.28125 -0.226562\nv -0.292791 0.289062 -0.226562\nv -0.245582 0.289062 -0.226562\nv -0.290858 0.296875 -0.226562\nv -0.289062 0.302842 -0.226562\nv -0.2493 0.296875 -0.226562\nv -0.25 0.298355 -0.226562\nv -0.25 0.296875 -0.222908\nv -0.288381 0.304688 -0.226562\nv -0.253253 0.304688 -0.226562\nv -0.257812 0.311628 -0.226562\nv -0.28456 0.3125 -0.226562\nv -0.258556 0.3125 -0.226562\nv -0.281557 0.320312 -0.226562\nv -0.28125 0.320836 -0.226562\nv -0.28125 0.320312 -0.223882\nv -0.273438 0.324582 -0.226562\nv -0.265318 0.320312 -0.226562\nv -0.265625 0.320648 -0.226562\nv -0.265625 0.320312 -0.223671\nv -0.296875 0.631874 -0.226562\nv -0.289062 0.632679 -0.226562\nv -0.298645 0.632812 -0.226562\nv -0.304688 0.636345 -0.226562\nv -0.296875 0.632812 -0.224974\nv -0.288906 0.632812 -0.226562\nv -0.289062 0.632812 -0.226303\nv -0.308884 0.640625 -0.226562\nv -0.3125 0.646331 -0.226562\nv -0.283586 0.640625 -0.226562\nv -0.28125 0.643632 -0.226562\nv -0.313717 0.648438 -0.226562\nv -0.278313 0.648438 -0.226562\nv -0.31671 0.65625 -0.226562\nv -0.27633 0.65625 -0.226562\nv -0.318518 0.664062 -0.226562\nv -0.275098 0.664062 -0.226562\nv -0.319895 0.671875 -0.226562\nv -0.320312 0.678502 -0.226562\nv -0.273978 0.671875 -0.226562\nv -0.273438 0.675362 -0.226562\nv -0.320381 0.679688 -0.226562\nv -0.320312 0.682607 -0.226562\nv -0.272662 0.679688 -0.226562\nv -0.320192 0.6875 -0.226562\nv -0.272187 0.6875 -0.226562\nv -0.319822 0.695312 -0.226562\nv -0.272728 0.695312 -0.226562\nv -0.273438 0.701988 -0.226562\nv -0.319386 0.703125 -0.226562\nv -0.273549 0.703125 -0.226562\nv -0.31894 0.710938 -0.226562\nv -0.274596 0.710938 -0.226562\nv -0.317724 0.71875 -0.226562\nv -0.276212 0.71875 -0.226562\nv -0.316772 0.726562 -0.226562\nv -0.27861 0.726562 -0.226562\nv -0.28125 0.733232 -0.226562\nv -0.315999 0.734375 -0.226562\nv -0.28161 0.734375 -0.226562\nv -0.315014 0.742188 -0.226562\nv -0.284243 0.742188 -0.226562\nv -0.313511 0.75 -0.226562\nv -0.3125 0.753227 -0.226562\nv -0.28753 0.75 -0.226562\nv -0.289062 0.752958 -0.226562\nv -0.310556 0.757812 -0.226562\nv -0.3125 0.757812 -0.221909\nv -0.292695 0.757812 -0.226562\nv -0.296875 0.762992 -0.226562\nv -0.304781 0.765625 -0.226562\nv -0.304471 0.765625 -0.226562\nv -0.304688 0.765704 -0.226562\nv -0.296875 0.765625 -0.221624\nv -0.0078125 -0.547594 -0.21875\nv 0 -0.550687 -0.21875\nv 0.0078125 -0.552834 -0.21875\nv 0.015625 -0.55437 -0.21875\nv 0.0234375 -0.554489 -0.21875\nv 0.03125 -0.553949 -0.21875\nv 0.0390625 -0.55311 -0.21875\nv 0.046875 -0.552085 -0.21875\nv 0.0546875 -0.550649 -0.21875\nv 0.0625 -0.549053 -0.21875\nv 0.0703125 -0.547287 -0.21875\nv -0.00921644 -0.546875 -0.21875\nv -0.0078125 -0.546875 -0.215477\nv 0.0715467 -0.546875 -0.21875\nv 0.0703125 -0.546875 -0.212797\nv 0.078125 -0.544665 -0.21875\nv 0.0859375 -0.541486 -0.21875\nv -0.0146679 -0.539062 -0.21875\nv 0.0914543 -0.539062 -0.21875\nv 0.09375 -0.537662 -0.21875\nv 0.101562 -0.533296 -0.21875\nv -0.0103332 -0.53125 -0.21875\nv -0.0078125 -0.526229 -0.21875\nv 0.104959 -0.53125 -0.21875\nv 0.109375 -0.528565 -0.21875\nv 0.109375 -0.53125 -0.211958\nv 0.117188 -0.52536 -0.21875\nv -0.00627803 -0.523438 -0.21875\nv 0.122825 -0.523438 -0.21875\nv 0.125 -0.522474 -0.21875\nv 0.125 -0.523438 -0.217081\nv 0.132812 -0.51906 -0.21875\nv -0.00232628 -0.515625 -0.21875\nv 0 -0.51193 -0.21875\nv 0.137405 -0.515625 -0.21875\nv 0.140625 -0.510939 -0.21875\nv 0.140625 -0.515625 -0.211692\nv 0.00304383 -0.507812 -0.21875\nv 0.0078125 -0.505275 -0.21875\nv 0.015625 -0.501273 -0.21875\nv 0.142356 -0.507812 -0.21875\nv 0.140625 -0.505819 -0.21875\nv 0.0180806 -0.5 -0.21875\nv 0.0234375 -0.497469 -0.21875\nv 0.03125 -0.493824 -0.21875\nv 0.135863 -0.5 -0.21875\nv 0.132812 -0.49701 -0.21875\nv 0.0345938 -0.492188 -0.21875\nv 0.0390625 -0.489887 -0.21875\nv 0.046875 -0.486999 -0.21875\nv 0.109375 -0.4848 -0.21875\nv 0.117188 -0.487108 -0.21875\nv 0.127383 -0.492188 -0.21875\nv 0.125 -0.490617 -0.21875\nv 0.125 -0.492188 -0.213556\nv 0.0537344 -0.484375 -0.21875\nv 0.0546875 -0.484037 -0.21875\nv 0.0625 -0.482606 -0.21875\nv 0.0703125 -0.481514 -0.21875\nv 0.078125 -0.481007 -0.21875\nv 0.0859375 -0.481298 -0.21875\nv 0.09375 -0.481948 -0.21875\nv 0.107556 -0.484375 -0.21875\nv 0.101562 -0.483068 -0.21875\nv 0.101562 -0.484375 -0.211895\nv 0.445312 -0.0632083 -0.21875\nv 0.453125 -0.0674258 -0.21875\nv 0.460938 -0.0675064 -0.21875\nv 0.46875 -0.0633142 -0.21875\nv -0.289062 -0.0571255 -0.21875\nv -0.28125 -0.0594139 -0.21875\nv -0.273438 -0.0585498 -0.21875\nv 0.444757 -0.0625 -0.21875\nv 0.445312 -0.0625 -0.214815\nv 0.475214 -0.0625 -0.21875\nv 0.476562 -0.0621338 -0.21875\nv 0.484375 -0.0570046 -0.21875\nv -0.291903 -0.0546875 -0.21875\nv -0.296875 -0.0484282 -0.21875\nv -0.268445 -0.0546875 -0.21875\nv -0.265625 -0.0520623 -0.21875\nv 0.444106 -0.0546875 -0.21875\nv 0.485956 -0.0546875 -0.21875\nv -0.297464 -0.046875 -0.21875\nv -0.263244 -0.046875 -0.21875\nv 0.443609 -0.046875 -0.21875\nv 0.489189 -0.046875 -0.21875\nv -0.300258 -0.0390625 -0.21875\nv -0.260475 -0.0390625 -0.21875\nv 0.443054 -0.0390625 -0.21875\nv 0.491214 -0.0390625 -0.21875\nv 0.492188 -0.0353586 -0.21875\nv -0.30155 -0.03125 -0.21875\nv -0.258755 -0.03125 -0.21875\nv -0.257812 -0.0274178 -0.21875\nv 0.443275 -0.03125 -0.21875\nv 0.493284 -0.03125 -0.21875\nv -0.301152 -0.0234375 -0.21875\nv -0.257111 -0.0234375 -0.21875\nv 0.442802 -0.0234375 -0.21875\nv 0.496498 -0.0234375 -0.21875\nv -0.302067 -0.015625 -0.21875\nv -0.257229 -0.015625 -0.21875\nv -0.257812 -0.015625 -0.213399\nv 0.442329 -0.015625 -0.21875\nv 0.498635 -0.015625 -0.21875\nv -0.303564 -0.0078125 -0.21875\nv -0.257525 -0.0078125 -0.21875\nv -0.257812 -0.00462937 -0.21875\nv -0.257812 -0.0078125 -0.216471\nv 0.440837 -0.0078125 -0.21875\nv 0.499488 -0.0078125 -0.21875\nv -0.304016 0 -0.21875\nv -0.258289 0 -0.21875\nv -0.257812 0.00730822 -0.21875\nv 0.43933 0 -0.21875\nv 0.499582 0 -0.21875\nv -0.303398 0.0078125 -0.21875\nv -0.257772 0.0078125 -0.21875\nv -0.257812 0.0078125 -0.218344\nv 0.440037 0.0078125 -0.21875\nv 0.499238 0.0078125 -0.21875\nv -0.301964 0.015625 -0.21875\nv -0.254037 0.015625 -0.21875\nv -0.25 0.0190426 -0.21875\nv -0.242188 0.0221997 -0.21875\nv -0.234375 0.0225584 -0.21875\nv 0.429688 0.0232178 -0.21875\nv 0.438973 0.015625 -0.21875\nv 0.4375 0.0174504 -0.21875\nv 0.499386 0.015625 -0.21875\nv -0.300754 0.0234375 -0.21875\nv -0.230833 0.0234375 -0.21875\nv -0.226562 0.024205 -0.21875\nv -0.21875 0.0264513 -0.21875\nv -0.210938 0.0286638 -0.21875\nv -0.203125 0.0296767 -0.21875\nv -0.195312 0.0299602 -0.21875\nv -0.1875 0.0300178 -0.21875\nv -0.179688 0.0292338 -0.21875\nv -0.171875 0.0283438 -0.21875\nv -0.164062 0.0278197 -0.21875\nv -0.15625 0.0275598 -0.21875\nv -0.148438 0.0275689 -0.21875\nv -0.140625 0.0275614 -0.21875\nv -0.132812 0.0275967 -0.21875\nv -0.125 0.0276737 -0.21875\nv -0.117188 0.0277193 -0.21875\nv -0.109375 0.0276785 -0.21875\nv -0.101562 0.0275448 -0.21875\nv -0.09375 0.0273126 -0.21875\nv -0.0859375 0.0270769 -0.21875\nv -0.078125 0.0268071 -0.21875\nv -0.0703125 0.0264926 -0.21875\nv -0.0625 0.0263023 -0.21875\nv -0.0546875 0.0261681 -0.21875\nv -0.046875 0.0260883 -0.21875\nv -0.0390625 0.026009 -0.21875\nv -0.03125 0.0259295 -0.21875\nv -0.0234375 0.0258359 -0.21875\nv -0.015625 0.0257795 -0.21875\nv -0.0078125 0.0257211 -0.21875\nv 0 0.0256858 -0.21875\nv 0.0078125 0.0255947 -0.21875\nv 0.015625 0.0256057 -0.21875\nv 0.0234375 0.0255942 -0.21875\nv 0.03125 0.025553 -0.21875\nv 0.0390625 0.0255156 -0.21875\nv 0.046875 0.0254788 -0.21875\nv 0.0546875 0.0254297 -0.21875\nv 0.0625 0.0253799 -0.21875\nv 0.0703125 0.0253556 -0.21875\nv 0.078125 0.0253244 -0.21875\nv 0.0859375 0.0253277 -0.21875\nv 0.09375 0.0253519 -0.21875\nv 0.101562 0.0254013 -0.21875\nv 0.109375 0.0254126 -0.21875\nv 0.117188 0.0253943 -0.21875\nv 0.125 0.0253548 -0.21875\nv 0.132812 0.0253522 -0.21875\nv 0.140625 0.025325 -0.21875\nv 0.148438 0.0253075 -0.21875\nv 0.15625 0.0252471 -0.21875\nv 0.164062 0.0251844 -0.21875\nv 0.171875 0.0251431 -0.21875\nv 0.179688 0.0251221 -0.21875\nv 0.1875 0.0250834 -0.21875\nv 0.195312 0.0250423 -0.21875\nv 0.203125 0.0250323 -0.21875\nv 0.210938 0.0250713 -0.21875\nv 0.21875 0.0251802 -0.21875\nv 0.226562 0.0253026 -0.21875\nv 0.234375 0.025427 -0.21875\nv 0.242188 0.0256028 -0.21875\nv 0.25 0.0258459 -0.21875\nv 0.257812 0.0260153 -0.21875\nv 0.265625 0.0261839 -0.21875\nv 0.273438 0.026357 -0.21875\nv 0.28125 0.026528 -0.21875\nv 0.289062 0.0266832 -0.21875\nv 0.296875 0.0267543 -0.21875\nv 0.304688 0.0267 -0.21875\nv 0.3125 0.0266455 -0.21875\nv 0.320312 0.026621 -0.21875\nv 0.328125 0.0266243 -0.21875\nv 0.335938 0.0266702 -0.21875\nv 0.34375 0.026781 -0.21875\nv 0.351562 0.0270281 -0.21875\nv 0.359375 0.0272843 -0.21875\nv 0.367188 0.0275219 -0.21875\nv 0.375 0.0279254 -0.21875\nv 0.382812 0.0281989 -0.21875\nv 0.390625 0.0279409 -0.21875\nv 0.398438 0.0273528 -0.21875\nv 0.40625 0.0267507 -0.21875\nv 0.414062 0.0260395 -0.21875\nv 0.429032 0.0234375 -0.21875\nv 0.421875 0.024897 -0.21875\nv 0.499783 0.0234375 -0.21875\nv -0.29941 0.03125 -0.21875\nv 0.497301 0.03125 -0.21875\nv -0.298262 0.0390625 -0.21875\nv -0.296875 0.0436123 -0.21875\nv 0.494747 0.0390625 -0.21875\nv -0.295581 0.046875 -0.21875\nv 0.492392 0.046875 -0.21875\nv 0.492188 0.0472744 -0.21875\nv -0.293568 0.0546875 -0.21875\nv 0.476562 0.0608574 -0.21875\nv 0.486991 0.0546875 -0.21875\nv 0.484375 0.0565132 -0.21875\nv -0.290471 0.0625 -0.21875\nv -0.289062 0.0642538 -0.21875\nv -0.28125 0.0676957 -0.21875\nv 0.429688 0.069958 -0.21875\nv 0.4375 0.0696003 -0.21875\nv 0.445312 0.0683207 -0.21875\nv 0.453125 0.0663553 -0.21875\nv 0.460938 0.0649525 -0.21875\nv 0.472791 0.0625 -0.21875\nv 0.46875 0.0642072 -0.21875\nv -0.276648 0.0703125 -0.21875\nv -0.273438 0.0724165 -0.21875\nv -0.265625 0.0741144 -0.21875\nv -0.21875 0.0778564 -0.21875\nv -0.210938 0.0766219 -0.21875\nv -0.203125 0.0760671 -0.21875\nv -0.195312 0.0763413 -0.21875\nv -0.1875 0.076596 -0.21875\nv -0.179688 0.0767594 -0.21875\nv -0.171875 0.076365 -0.21875\nv -0.164062 0.0760512 -0.21875\nv -0.15625 0.0759858 -0.21875\nv -0.148438 0.075777 -0.21875\nv -0.140625 0.0756118 -0.21875\nv -0.132812 0.075432 -0.21875\nv -0.125 0.0751983 -0.21875\nv -0.117188 0.0748869 -0.21875\nv -0.109375 0.0746823 -0.21875\nv -0.101562 0.0745335 -0.21875\nv -0.09375 0.0744518 -0.21875\nv -0.0859375 0.0744496 -0.21875\nv -0.078125 0.0744454 -0.21875\nv -0.0703125 0.0744631 -0.21875\nv -0.0625 0.0744793 -0.21875\nv -0.0546875 0.0744773 -0.21875\nv -0.046875 0.0744527 -0.21875\nv -0.0390625 0.0743895 -0.21875\nv -0.03125 0.0743365 -0.21875\nv -0.0234375 0.0742065 -0.21875\nv -0.015625 0.0740314 -0.21875\nv -0.0078125 0.0739172 -0.21875\nv 0 0.0737666 -0.21875\nv 0.0078125 0.0736113 -0.21875\nv 0.015625 0.0734825 -0.21875\nv 0.0234375 0.0733686 -0.21875\nv 0.03125 0.0732441 -0.21875\nv 0.0390625 0.0731555 -0.21875\nv 0.046875 0.0730617 -0.21875\nv 0.0546875 0.0729742 -0.21875\nv 0.0625 0.072871 -0.21875\nv 0.0703125 0.0727733 -0.21875\nv 0.078125 0.0727203 -0.21875\nv 0.0859375 0.0727404 -0.21875\nv 0.09375 0.0727799 -0.21875\nv 0.101562 0.0728096 -0.21875\nv 0.109375 0.0728224 -0.21875\nv 0.117188 0.072794 -0.21875\nv 0.125 0.0727481 -0.21875\nv 0.132812 0.0727401 -0.21875\nv 0.140625 0.0727711 -0.21875\nv 0.148438 0.0727794 -0.21875\nv 0.15625 0.0727534 -0.21875\nv 0.164062 0.0726774 -0.21875\nv 0.171875 0.0726266 -0.21875\nv 0.179688 0.0725649 -0.21875\nv 0.1875 0.0725026 -0.21875\nv 0.195312 0.0724737 -0.21875\nv 0.203125 0.0724655 -0.21875\nv 0.210938 0.0725085 -0.21875\nv 0.21875 0.072561 -0.21875\nv 0.226562 0.072579 -0.21875\nv 0.234375 0.0725421 -0.21875\nv 0.242188 0.0725032 -0.21875\nv 0.25 0.0725129 -0.21875\nv 0.257812 0.0724589 -0.21875\nv 0.265625 0.0724762 -0.21875\nv 0.273438 0.0725255 -0.21875\nv 0.28125 0.0726307 -0.21875\nv 0.289062 0.0727412 -0.21875\nv 0.296875 0.072836 -0.21875\nv 0.304688 0.0728783 -0.21875\nv 0.3125 0.072897 -0.21875\nv 0.320312 0.0729339 -0.21875\nv 0.328125 0.0729737 -0.21875\nv 0.335938 0.0729588 -0.21875\nv 0.34375 0.0729486 -0.21875\nv 0.351562 0.0728795 -0.21875\nv 0.359375 0.0726767 -0.21875\nv 0.367188 0.0724161 -0.21875\nv 0.375 0.0721091 -0.21875\nv 0.382812 0.0717268 -0.21875\nv 0.390625 0.0714271 -0.21875\nv 0.398438 0.0713287 -0.21875\nv 0.40625 0.0712076 -0.21875\nv 0.414062 0.0708597 -0.21875\nv 0.424026 0.0703125 -0.21875\nv 0.421875 0.070442 -0.21875\nv -0.259695 0.078125 -0.21875\nv -0.257812 0.0797535 -0.21875\nv -0.25 0.0846049 -0.21875\nv -0.242188 0.0857137 -0.21875\nv -0.234375 0.0823004 -0.21875\nv -0.220043 0.078125 -0.21875\nv -0.226562 0.0798263 -0.21875\nv -0.28125 0.162029 -0.21875\nv -0.273438 0.16162 -0.21875\nv -0.28521 0.164062 -0.21875\nv -0.289062 0.167307 -0.21875\nv -0.28125 0.164062 -0.214147\nv -0.266775 0.164062 -0.21875\nv -0.273438 0.164062 -0.21345\nv -0.265625 0.164452 -0.21875\nv -0.257812 0.169827 -0.21875\nv -0.292077 0.171875 -0.21875\nv -0.256378 0.171875 -0.21875\nv -0.257812 0.171875 -0.213389\nv -0.294454 0.179688 -0.21875\nv -0.296875 0.186648 -0.21875\nv -0.25062 0.179688 -0.21875\nv -0.25 0.180398 -0.21875\nv -0.29715 0.1875 -0.21875\nv -0.296875 0.1875 -0.216578\nv -0.244883 0.1875 -0.21875\nv -0.242188 0.192621 -0.21875\nv -0.299327 0.195312 -0.21875\nv -0.240791 0.195312 -0.21875\nv -0.301269 0.203125 -0.21875\nv -0.239296 0.203125 -0.21875\nv -0.301843 0.210938 -0.21875\nv -0.238589 0.210938 -0.21875\nv -0.302109 0.21875 -0.21875\nv -0.238229 0.21875 -0.21875\nv -0.30213 0.226562 -0.21875\nv -0.238058 0.226562 -0.21875\nv -0.301821 0.234375 -0.21875\nv -0.238017 0.234375 -0.21875\nv -0.301426 0.242188 -0.21875\nv -0.238383 0.242188 -0.21875\nv -0.301311 0.25 -0.21875\nv -0.239234 0.25 -0.21875\nv -0.300819 0.257812 -0.21875\nv -0.240368 0.257812 -0.21875\nv -0.299652 0.265625 -0.21875\nv -0.241035 0.265625 -0.21875\nv -0.297512 0.273438 -0.21875\nv -0.296875 0.275426 -0.21875\nv -0.241939 0.273438 -0.21875\nv -0.242188 0.2744 -0.21875\nv -0.242188 0.273438 -0.217238\nv -0.294999 0.28125 -0.21875\nv -0.244129 0.28125 -0.21875\nv -0.292697 0.289062 -0.21875\nv -0.24739 0.289062 -0.21875\nv -0.25 0.29511 -0.21875\nv -0.290489 0.296875 -0.21875\nv -0.289062 0.301752 -0.21875\nv -0.250789 0.296875 -0.21875\nv -0.287928 0.304688 -0.21875\nv -0.254405 0.304688 -0.21875\nv -0.257812 0.309996 -0.21875\nv -0.284397 0.3125 -0.21875\nv -0.28125 0.319063 -0.21875\nv -0.259959 0.3125 -0.21875\nv -0.265625 0.319619 -0.21875\nv -0.27961 0.320312 -0.21875\nv -0.266742 0.320312 -0.21875\nv -0.273438 0.323887 -0.21875\nv -0.304688 0.638066 -0.21875\nv -0.296875 0.635507 -0.21875\nv -0.289062 0.636844 -0.21875\nv -0.308293 0.640625 -0.21875\nv -0.3125 0.646959 -0.21875\nv -0.285247 0.640625 -0.21875\nv -0.28125 0.644535 -0.21875\nv -0.313315 0.648438 -0.21875\nv -0.27841 0.648438 -0.21875\nv -0.316246 0.65625 -0.21875\nv -0.276468 0.65625 -0.21875\nv -0.318227 0.664062 -0.21875\nv -0.275533 0.664062 -0.21875\nv -0.319919 0.671875 -0.21875\nv -0.320312 0.678326 -0.21875\nv -0.274305 0.671875 -0.21875\nv -0.273438 0.677385 -0.21875\nv -0.320388 0.679688 -0.21875\nv -0.320312 0.683978 -0.21875\nv -0.273015 0.679688 -0.21875\nv -0.320246 0.6875 -0.21875\nv -0.27272 0.6875 -0.21875\nv -0.319887 0.695312 -0.21875\nv -0.273184 0.695312 -0.21875\nv -0.273438 0.697616 -0.21875\nv -0.273438 0.695312 -0.215064\nv -0.319304 0.703125 -0.21875\nv -0.273999 0.703125 -0.21875\nv -0.318854 0.710938 -0.21875\nv -0.274969 0.710938 -0.21875\nv -0.318164 0.71875 -0.21875\nv -0.276506 0.71875 -0.21875\nv -0.317463 0.726562 -0.21875\nv -0.278697 0.726562 -0.21875\nv -0.28125 0.733997 -0.21875\nv -0.31672 0.734375 -0.21875\nv -0.281359 0.734375 -0.21875\nv -0.28125 0.734375 -0.217025\nv -0.316163 0.742188 -0.21875\nv -0.283774 0.742188 -0.21875\nv -0.315025 0.75 -0.21875\nv -0.286389 0.75 -0.21875\nv -0.289062 0.755464 -0.21875\nv -0.313567 0.757812 -0.21875\nv -0.3125 0.761901 -0.21875\nv -0.290644 0.757812 -0.21875\nv -0.289062 0.757812 -0.214295\nv -0.310562 0.765625 -0.21875\nv -0.3125 0.765625 -0.216106\nv -0.304688 0.769606 -0.21875\nv -0.295563 0.765625 -0.21875\nv -0.296875 0.766789 -0.21875\nv 0 -0.54883 -0.210938\nv 0.0078125 -0.550922 -0.210938\nv 0.015625 -0.55294 -0.210938\nv 0.0234375 -0.553673 -0.210938\nv 0.03125 -0.553129 -0.210938\nv 0.0390625 -0.552429 -0.210938\nv 0.046875 -0.551518 -0.210938\nv 0.0546875 -0.550263 -0.210938\nv 0.0625 -0.548649 -0.210938\nv -0.00525445 -0.546875 -0.210938\nv -0.0078125 -0.545264 -0.210938\nv 0 -0.546875 -0.203694\nv 0.0697503 -0.546875 -0.210938\nv 0.0703125 -0.546734 -0.210938\nv 0.078125 -0.544373 -0.210938\nv 0.0859375 -0.541434 -0.210938\nv -0.0124919 -0.539062 -0.210938\nv 0.0914658 -0.539062 -0.210938\nv 0.09375 -0.53768 -0.210938\nv 0.101562 -0.534645 -0.210938\nv 0.109375 -0.531705 -0.210938\nv -0.00955019 -0.53125 -0.210938\nv -0.0078125 -0.527656 -0.210938\nv 0.111039 -0.53125 -0.210938\nv 0.117188 -0.529364 -0.210938\nv 0.125 -0.526818 -0.210938\nv -0.00541675 -0.523438 -0.210938\nv 0.132707 -0.523438 -0.210938\nv 0.132812 -0.523331 -0.210938\nv 0.132812 -0.523438 -0.21016\nv 0.140625 -0.516166 -0.210938\nv -0.000815121 -0.515625 -0.210938\nv 0 -0.514315 -0.210938\nv 0 -0.515625 -0.207883\nv 0.141052 -0.515625 -0.210938\nv 0.00447649 -0.507812 -0.210938\nv 0.0078125 -0.506008 -0.210938\nv 0.015625 -0.5015 -0.210938\nv 0.14444 -0.507812 -0.210938\nv 0.140625 -0.504751 -0.210938\nv 0.0183101 -0.5 -0.210938\nv 0.0234375 -0.497427 -0.210938\nv 0.03125 -0.493492 -0.210938\nv 0.125 -0.493074 -0.210938\nv 0.135079 -0.5 -0.210938\nv 0.132812 -0.498551 -0.210938\nv 0.0340005 -0.492188 -0.210938\nv 0.0390625 -0.489683 -0.210938\nv 0.046875 -0.486703 -0.210938\nv 0.101562 -0.484555 -0.210938\nv 0.109375 -0.486401 -0.210938\nv 0.123675 -0.492188 -0.210938\nv 0.117188 -0.488802 -0.210938\nv 0.0537931 -0.484375 -0.210938\nv 0.0546875 -0.484089 -0.210938\nv 0.0546875 -0.484375 -0.209057\nv 0.0625 -0.482871 -0.210938\nv 0.0625 -0.484375 -0.204697\nv 0.0703125 -0.482159 -0.210938\nv 0.078125 -0.481985 -0.210938\nv 0.0859375 -0.482307 -0.210938\nv 0.0859375 -0.484375 -0.204116\nv 0.100635 -0.484375 -0.210938\nv 0.09375 -0.483103 -0.210938\nv 0.09375 -0.484375 -0.206444\nv 0.453125 -0.06631 -0.210938\nv 0.460938 -0.0670534 -0.210938\nv 0.46875 -0.0631054 -0.210938\nv -0.289062 -0.0568389 -0.210938\nv -0.28125 -0.0595193 -0.210938\nv -0.273438 -0.0586986 -0.210938\nv 0.446432 -0.0625 -0.210938\nv 0.445312 -0.0584926 -0.210938\nv 0.474081 -0.0625 -0.210938\nv 0.476562 -0.0619303 -0.210938\nv 0.484375 -0.0573459 -0.210938\nv -0.2915 -0.0546875 -0.210938\nv -0.296875 -0.0477836 -0.210938\nv -0.268796 -0.0546875 -0.210938\nv -0.265625 -0.0514067 -0.210938\nv 0.444844 -0.0546875 -0.210938\nv 0.486294 -0.0546875 -0.210938\nv -0.29721 -0.046875 -0.210938\nv -0.263707 -0.046875 -0.210938\nv 0.443957 -0.046875 -0.210938\nv 0.489489 -0.046875 -0.210938\nv -0.299673 -0.0390625 -0.210938\nv -0.261239 -0.0390625 -0.210938\nv 0.443462 -0.0390625 -0.210938\nv 0.491424 -0.0390625 -0.210938\nv 0.492188 -0.0357522 -0.210938\nv -0.300809 -0.03125 -0.210938\nv -0.259812 -0.03125 -0.210938\nv -0.257812 -0.0234508 -0.210938\nv 0.443738 -0.03125 -0.210938\nv 0.493271 -0.03125 -0.210938\nv -0.300386 -0.0234375 -0.210938\nv -0.25781 -0.0234375 -0.210938\nv -0.257812 -0.0233369 -0.210938\nv -0.257812 -0.0234375 -0.210879\nv 0.442966 -0.0234375 -0.210938\nv 0.496526 -0.0234375 -0.210938\nv -0.301277 -0.015625 -0.210938\nv -0.258167 -0.015625 -0.210938\nv 0.442358 -0.015625 -0.210938\nv 0.498492 -0.015625 -0.210938\nv -0.302935 -0.0078125 -0.210938\nv -0.258601 -0.0078125 -0.210938\nv 0.440652 -0.0078125 -0.210938\nv 0.499518 -0.0078125 -0.210938\nv -0.303467 0 -0.210938\nv -0.259073 0 -0.210938\nv 0.43946 0 -0.210938\nv 0.499758 0 -0.210938\nv -0.303071 0.0078125 -0.210938\nv -0.258471 0.0078125 -0.210938\nv -0.257812 0.0101834 -0.210938\nv 0.440554 0.0078125 -0.210938\nv 0.49939 0.0078125 -0.210938\nv -0.301712 0.015625 -0.210938\nv -0.255331 0.015625 -0.210938\nv -0.25 0.0202574 -0.210938\nv -0.242188 0.0228948 -0.210938\nv -0.234375 0.0230968 -0.210938\nv 0.429688 0.0232243 -0.210938\nv 0.439503 0.015625 -0.210938\nv 0.4375 0.017861 -0.210938\nv 0.499593 0.015625 -0.210938\nv -0.300562 0.0234375 -0.210938\nv -0.233026 0.0234375 -0.210938\nv -0.226562 0.0246333 -0.210938\nv -0.21875 0.0268753 -0.210938\nv -0.210938 0.0289844 -0.210938\nv -0.203125 0.0297882 -0.210938\nv -0.195312 0.0300152 -0.210938\nv -0.1875 0.0300058 -0.210938\nv -0.179688 0.0292236 -0.210938\nv -0.171875 0.0282872 -0.210938\nv -0.164062 0.0277669 -0.210938\nv -0.15625 0.0275502 -0.210938\nv -0.148438 0.0276173 -0.210938\nv -0.140625 0.0276212 -0.210938\nv -0.132812 0.0276524 -0.210938\nv -0.125 0.0277385 -0.210938\nv -0.117188 0.0277482 -0.210938\nv -0.109375 0.0276202 -0.210938\nv -0.101562 0.0274624 -0.210938\nv -0.09375 0.0271995 -0.210938\nv -0.0859375 0.0269641 -0.210938\nv -0.078125 0.0266375 -0.210938\nv -0.0703125 0.026294 -0.210938\nv -0.0625 0.0261377 -0.210938\nv -0.0546875 0.0260637 -0.210938\nv -0.046875 0.0260491 -0.210938\nv -0.0390625 0.0260239 -0.210938\nv -0.03125 0.0259605 -0.210938\nv -0.0234375 0.0258866 -0.210938\nv -0.015625 0.0258486 -0.210938\nv -0.0078125 0.0258493 -0.210938\nv 0 0.025797 -0.210938\nv 0.0078125 0.0257144 -0.210938\nv 0.015625 0.0257141 -0.210938\nv 0.0234375 0.0256807 -0.210938\nv 0.03125 0.0256156 -0.210938\nv 0.0390625 0.0255191 -0.210938\nv 0.046875 0.0254257 -0.210938\nv 0.0546875 0.0253402 -0.210938\nv 0.0625 0.0253221 -0.210938\nv 0.0703125 0.0252627 -0.210938\nv 0.078125 0.0252119 -0.210938\nv 0.0859375 0.0252239 -0.210938\nv 0.09375 0.0252471 -0.210938\nv 0.101562 0.0252637 -0.210938\nv 0.109375 0.0252692 -0.210938\nv 0.117188 0.0252496 -0.210938\nv 0.125 0.0252329 -0.210938\nv 0.132812 0.0252436 -0.210938\nv 0.140625 0.0252336 -0.210938\nv 0.148438 0.0252064 -0.210938\nv 0.15625 0.0251335 -0.210938\nv 0.164062 0.0250446 -0.210938\nv 0.171875 0.0250055 -0.210938\nv 0.179688 0.0249697 -0.210938\nv 0.1875 0.024915 -0.210938\nv 0.195312 0.0248798 -0.210938\nv 0.203125 0.0248614 -0.210938\nv 0.210938 0.0248888 -0.210938\nv 0.21875 0.0249915 -0.210938\nv 0.226562 0.0251161 -0.210938\nv 0.234375 0.0252579 -0.210938\nv 0.242188 0.0254439 -0.210938\nv 0.25 0.0256237 -0.210938\nv 0.257812 0.0257991 -0.210938\nv 0.265625 0.0259481 -0.210938\nv 0.273438 0.0261086 -0.210938\nv 0.28125 0.0262776 -0.210938\nv 0.289062 0.0264326 -0.210938\nv 0.296875 0.0265469 -0.210938\nv 0.304688 0.0265929 -0.210938\nv 0.3125 0.0265372 -0.210938\nv 0.320312 0.0264892 -0.210938\nv 0.328125 0.0265078 -0.210938\nv 0.335938 0.0265759 -0.210938\nv 0.34375 0.026725 -0.210938\nv 0.351562 0.0268963 -0.210938\nv 0.359375 0.0271465 -0.210938\nv 0.367188 0.0273484 -0.210938\nv 0.375 0.0276445 -0.210938\nv 0.382812 0.027897 -0.210938\nv 0.390625 0.0277058 -0.210938\nv 0.398438 0.027166 -0.210938\nv 0.40625 0.0265156 -0.210938\nv 0.414062 0.0257977 -0.210938\nv 0.428935 0.0234375 -0.210938\nv 0.421875 0.024705 -0.210938\nv 0.499955 0.0234375 -0.210938\nv 0.5 0.0234375 -0.207939\nv -0.299294 0.03125 -0.210938\nv 0.497429 0.03125 -0.210938\nv -0.298188 0.0390625 -0.210938\nv -0.296875 0.0432813 -0.210938\nv 0.494815 0.0390625 -0.210938\nv -0.295466 0.046875 -0.210938\nv 0.492508 0.046875 -0.210938\nv 0.492188 0.0475268 -0.210938\nv -0.293307 0.0546875 -0.210938\nv 0.476562 0.0609461 -0.210938\nv 0.487467 0.0546875 -0.210938\nv 0.484375 0.0568049 -0.210938\nv -0.290614 0.0625 -0.210938\nv -0.289062 0.0643602 -0.210938\nv -0.28125 0.0672037 -0.210938\nv 0.429688 0.0701851 -0.210938\nv 0.4375 0.0698214 -0.210938\nv 0.445312 0.0683621 -0.210938\nv 0.453125 0.0664134 -0.210938\nv 0.460938 0.0651178 -0.210938\nv 0.472893 0.0625 -0.210938\nv 0.46875 0.0642433 -0.210938\nv -0.276042 0.0703125 -0.210938\nv -0.273438 0.0720481 -0.210938\nv -0.265625 0.0732306 -0.210938\nv -0.21875 0.0775485 -0.210938\nv -0.210938 0.0762307 -0.210938\nv -0.203125 0.0757291 -0.210938\nv -0.195312 0.076017 -0.210938\nv -0.1875 0.0762633 -0.210938\nv -0.179688 0.0763896 -0.210938\nv -0.171875 0.0760288 -0.210938\nv -0.164062 0.0757846 -0.210938\nv -0.15625 0.0758289 -0.210938\nv -0.148438 0.0756943 -0.210938\nv -0.140625 0.0755874 -0.210938\nv -0.132812 0.0753712 -0.210938\nv -0.125 0.075115 -0.210938\nv -0.117188 0.0748087 -0.210938\nv -0.109375 0.0745275 -0.210938\nv -0.101562 0.0743456 -0.210938\nv -0.09375 0.0743198 -0.210938\nv -0.0859375 0.0743693 -0.210938\nv -0.078125 0.0744766 -0.210938\nv -0.0703125 0.0745185 -0.210938\nv -0.0625 0.0745091 -0.210938\nv -0.0546875 0.0744565 -0.210938\nv -0.046875 0.07438 -0.210938\nv -0.0390625 0.0743067 -0.210938\nv -0.03125 0.0742322 -0.210938\nv -0.0234375 0.074142 -0.210938\nv -0.015625 0.0739768 -0.210938\nv -0.0078125 0.0738898 -0.210938\nv 0 0.0737611 -0.210938\nv 0.0078125 0.0735823 -0.210938\nv 0.015625 0.0734388 -0.210938\nv 0.0234375 0.0732876 -0.210938\nv 0.03125 0.0731911 -0.210938\nv 0.0390625 0.0731062 -0.210938\nv 0.046875 0.0730072 -0.210938\nv 0.0546875 0.0728996 -0.210938\nv 0.0625 0.0727799 -0.210938\nv 0.0703125 0.0726816 -0.210938\nv 0.078125 0.072622 -0.210938\nv 0.0859375 0.0726252 -0.210938\nv 0.09375 0.0726595 -0.210938\nv 0.101562 0.0726868 -0.210938\nv 0.109375 0.0726977 -0.210938\nv 0.117188 0.0726726 -0.210938\nv 0.125 0.0726405 -0.210938\nv 0.132812 0.0726627 -0.210938\nv 0.140625 0.0726935 -0.210938\nv 0.148438 0.0726896 -0.210938\nv 0.15625 0.0726419 -0.210938\nv 0.164062 0.0725552 -0.210938\nv 0.171875 0.0724946 -0.210938\nv 0.179688 0.0724314 -0.210938\nv 0.1875 0.0723721 -0.210938\nv 0.195312 0.0723396 -0.210938\nv 0.203125 0.0723288 -0.210938\nv 0.210938 0.072385 -0.210938\nv 0.21875 0.0724145 -0.210938\nv 0.226562 0.0724012 -0.210938\nv 0.234375 0.0723758 -0.210938\nv 0.242188 0.0724204 -0.210938\nv 0.25 0.0724292 -0.210938\nv 0.257812 0.0724462 -0.210938\nv 0.265625 0.0724906 -0.210938\nv 0.273438 0.0725565 -0.210938\nv 0.28125 0.0726932 -0.210938\nv 0.289062 0.0728053 -0.210938\nv 0.296875 0.0729061 -0.210938\nv 0.304688 0.0729456 -0.210938\nv 0.3125 0.0729693 -0.210938\nv 0.320312 0.07302 -0.210938\nv 0.328125 0.0730402 -0.210938\nv 0.335938 0.0730271 -0.210938\nv 0.34375 0.072999 -0.210938\nv 0.351562 0.0729481 -0.210938\nv 0.359375 0.0727352 -0.210938\nv 0.367188 0.0725177 -0.210938\nv 0.375 0.0722243 -0.210938\nv 0.382812 0.0718238 -0.210938\nv 0.390625 0.071499 -0.210938\nv 0.398438 0.0713996 -0.210938\nv 0.40625 0.0712927 -0.210938\nv 0.414062 0.0710292 -0.210938\nv 0.427659 0.0703125 -0.210938\nv 0.421875 0.0706552 -0.210938\nv 0.429688 0.0703125 -0.206776\nv -0.258764 0.078125 -0.210938\nv -0.257812 0.078992 -0.210938\nv -0.25 0.0838289 -0.210938\nv -0.242188 0.0855304 -0.210938\nv -0.234375 0.0818648 -0.210938\nv -0.221457 0.078125 -0.210938\nv -0.226562 0.0795126 -0.210938\nv -0.289062 0.170521 -0.210938\nv -0.28125 0.165395 -0.210938\nv -0.273438 0.165115 -0.210938\nv -0.265625 0.167128 -0.210938\nv -0.290217 0.171875 -0.210938\nv -0.259085 0.171875 -0.210938\nv -0.257812 0.172662 -0.210938\nv -0.292951 0.179688 -0.210938\nv -0.252186 0.179688 -0.210938\nv -0.25 0.182093 -0.210938\nv -0.296028 0.1875 -0.210938\nv -0.296875 0.189845 -0.210938\nv -0.245896 0.1875 -0.210938\nv -0.242188 0.19433 -0.210938\nv -0.2986 0.195312 -0.210938\nv -0.241643 0.195312 -0.210938\nv -0.242188 0.195312 -0.203269\nv -0.300571 0.203125 -0.210938\nv -0.240097 0.203125 -0.210938\nv -0.301384 0.210938 -0.210938\nv -0.239406 0.210938 -0.210938\nv -0.301586 0.21875 -0.210938\nv -0.239071 0.21875 -0.210938\nv -0.301784 0.226562 -0.210938\nv -0.238904 0.226562 -0.210938\nv -0.301568 0.234375 -0.210938\nv -0.238812 0.234375 -0.210938\nv -0.30132 0.242188 -0.210938\nv -0.239203 0.242188 -0.210938\nv -0.301061 0.25 -0.210938\nv -0.240173 0.25 -0.210938\nv -0.300462 0.257812 -0.210938\nv -0.241411 0.257812 -0.210938\nv -0.299202 0.265625 -0.210938\nv -0.242158 0.265625 -0.210938\nv -0.242188 0.265848 -0.210938\nv -0.242188 0.265625 -0.210657\nv -0.297328 0.273438 -0.210938\nv -0.296875 0.275008 -0.210938\nv -0.243381 0.273438 -0.210938\nv -0.294946 0.28125 -0.210938\nv -0.246007 0.28125 -0.210938\nv -0.292508 0.289062 -0.210938\nv -0.249044 0.289062 -0.210938\nv -0.25 0.291427 -0.210938\nv -0.289827 0.296875 -0.210938\nv -0.289062 0.300037 -0.210938\nv -0.252219 0.296875 -0.210938\nv -0.28753 0.304688 -0.210938\nv -0.255628 0.304688 -0.210938\nv -0.257812 0.308424 -0.210938\nv -0.284123 0.3125 -0.210938\nv -0.28125 0.318128 -0.210938\nv -0.261289 0.3125 -0.210938\nv -0.265625 0.318166 -0.210938\nv -0.278253 0.320312 -0.210938\nv -0.268621 0.320312 -0.210938\nv -0.273438 0.323059 -0.210938\nv -0.304688 0.638387 -0.210938\nv -0.296875 0.636192 -0.210938\nv -0.289062 0.635976 -0.210938\nv -0.308657 0.640625 -0.210938\nv -0.3125 0.646694 -0.210938\nv -0.283669 0.640625 -0.210938\nv -0.28125 0.643417 -0.210938\nv -0.313392 0.648438 -0.210938\nv -0.277952 0.648438 -0.210938\nv -0.316084 0.65625 -0.210938\nv -0.276306 0.65625 -0.210938\nv -0.318236 0.664062 -0.210938\nv -0.275639 0.664062 -0.210938\nv -0.319934 0.671875 -0.210938\nv -0.320312 0.67938 -0.210938\nv -0.274476 0.671875 -0.210938\nv -0.273438 0.679042 -0.210938\nv -0.320327 0.679688 -0.210938\nv -0.320312 0.682154 -0.210938\nv -0.320312 0.679688 -0.208338\nv -0.273328 0.679688 -0.210938\nv -0.273438 0.679688 -0.206851\nv -0.320279 0.6875 -0.210938\nv -0.273219 0.6875 -0.210938\nv -0.273438 0.690817 -0.210938\nv -0.273438 0.6875 -0.203961\nv -0.319998 0.695312 -0.210938\nv -0.273697 0.695312 -0.210938\nv -0.319396 0.703125 -0.210938\nv -0.274355 0.703125 -0.210938\nv -0.318943 0.710938 -0.210938\nv -0.275262 0.710938 -0.210938\nv -0.318612 0.71875 -0.210938\nv -0.27663 0.71875 -0.210938\nv -0.318364 0.726562 -0.210938\nv -0.278702 0.726562 -0.210938\nv -0.317884 0.734375 -0.210938\nv -0.280795 0.734375 -0.210938\nv -0.28125 0.735988 -0.210938\nv -0.317489 0.742188 -0.210938\nv -0.282783 0.742188 -0.210938\nv -0.31675 0.75 -0.210938\nv -0.284956 0.75 -0.210938\nv -0.316139 0.757812 -0.210938\nv -0.288058 0.757812 -0.210938\nv -0.289062 0.760328 -0.210938\nv -0.314403 0.765625 -0.210938\nv -0.3125 0.76979 -0.210938\nv -0.304688 0.773013 -0.210938\nv -0.291913 0.765625 -0.210938\nv -0.296875 0.770568 -0.210938\nv -0.3125 0.773438 -0.206752\nv -0.304688 0.773438 -0.210192\nv -0.296875 0.773438 -0.205292\nv 0.0078125 -0.54859 -0.203125\nv 0.015625 -0.550372 -0.203125\nv 0.0234375 -0.551556 -0.203125\nv 0.03125 -0.551939 -0.203125\nv 0.0390625 -0.551409 -0.203125\nv 0.046875 -0.550422 -0.203125\nv 0.0546875 -0.549141 -0.203125\nv 0.0625 -0.547646 -0.203125\nv -0.0078125 -0.541668 -0.203125\nv 0.000619389 -0.546875 -0.203125\nv 0 -0.54666 -0.203125\nv 0.0078125 -0.546875 -0.19794\nv 0.0660744 -0.546875 -0.203125\nv 0.0625 -0.546875 -0.199005\nv 0.0703125 -0.545899 -0.203125\nv 0.078125 -0.543473 -0.203125\nv 0.0859375 -0.540871 -0.203125\nv -0.00994589 -0.539062 -0.203125\nv -0.0078125 -0.539062 -0.196458\nv 0.0933157 -0.539062 -0.203125\nv 0.09375 -0.538883 -0.203125\nv 0.101562 -0.536103 -0.203125\nv 0.109375 -0.533331 -0.203125\nv -0.00798013 -0.53125 -0.203125\nv -0.0078125 -0.530869 -0.203125\nv -0.0078125 -0.53125 -0.202281\nv 0.114869 -0.53125 -0.203125\nv 0.117188 -0.530242 -0.203125\nv 0.125 -0.527188 -0.203125\nv 0.132812 -0.523974 -0.203125\nv -0.0041665 -0.523438 -0.203125\nv 0 -0.516738 -0.203125\nv 0.133994 -0.523438 -0.203125\nv 0.140625 -0.517203 -0.203125\nv 0.000773334 -0.515625 -0.203125\nv 0.142229 -0.515625 -0.203125\nv 0.00685696 -0.507812 -0.203125\nv 0.0078125 -0.507282 -0.203125\nv 0.0078125 -0.507812 -0.200359\nv 0.015625 -0.502555 -0.203125\nv 0.145906 -0.507812 -0.203125\nv 0.140625 -0.504302 -0.203125\nv 0.0201192 -0.5 -0.203125\nv 0.0234375 -0.498349 -0.203125\nv 0.03125 -0.494098 -0.203125\nv 0.125 -0.496222 -0.203125\nv 0.133987 -0.5 -0.203125\nv 0.132812 -0.499437 -0.203125\nv 0.03478 -0.492188 -0.203125\nv 0.0390625 -0.489897 -0.203125\nv 0.046875 -0.486878 -0.203125\nv 0.0546875 -0.485509 -0.203125\nv 0.0625 -0.484776 -0.203125\nv 0.0859375 -0.484695 -0.203125\nv 0.09375 -0.485365 -0.203125\nv 0.101562 -0.486898 -0.203125\nv 0.109375 -0.488879 -0.203125\nv 0.109375 -0.492188 -0.196525\nv 0.117922 -0.492188 -0.203125\nv 0.117188 -0.491834 -0.203125\nv 0.117188 -0.492188 -0.201968\nv 0.0698359 -0.484375 -0.203125\nv 0.0703125 -0.484349 -0.203125\nv 0.0703125 -0.484375 -0.203045\nv 0.0782537 -0.484375 -0.203125\nv 0.078125 -0.48437 -0.203125\nv 0.078125 -0.484375 -0.203109\nv 0.453125 -0.0660004 -0.203125\nv 0.460938 -0.0668035 -0.203125\nv 0.46875 -0.0630561 -0.203125\nv -0.289062 -0.0566277 -0.203125\nv -0.28125 -0.0593391 -0.203125\nv -0.273438 -0.0585872 -0.203125\nv 0.447365 -0.0625 -0.203125\nv 0.445312 -0.0560309 -0.203125\nv 0.476035 -0.0625 -0.203125\nv 0.476562 -0.0624231 -0.203125\nv 0.476562 -0.0625 -0.20077\nv 0.484375 -0.0580148 -0.203125\nv -0.291284 -0.0546875 -0.203125\nv -0.296875 -0.0473726 -0.203125\nv -0.269071 -0.0546875 -0.203125\nv -0.265625 -0.0511545 -0.203125\nv 0.445096 -0.0546875 -0.203125\nv 0.445312 -0.0546875 -0.196194\nv 0.486657 -0.0546875 -0.203125\nv -0.297047 -0.046875 -0.203125\nv -0.263806 -0.046875 -0.203125\nv 0.444153 -0.046875 -0.203125\nv 0.489712 -0.046875 -0.203125\nv -0.299237 -0.0390625 -0.203125\nv -0.261434 -0.0390625 -0.203125\nv 0.443735 -0.0390625 -0.203125\nv 0.49151 -0.0390625 -0.203125\nv 0.492188 -0.0361578 -0.203125\nv -0.300297 -0.03125 -0.203125\nv -0.260074 -0.03125 -0.203125\nv 0.444049 -0.03125 -0.203125\nv 0.493394 -0.03125 -0.203125\nv -0.299969 -0.0234375 -0.203125\nv -0.258409 -0.0234375 -0.203125\nv 0.443014 -0.0234375 -0.203125\nv 0.496554 -0.0234375 -0.203125\nv -0.300956 -0.015625 -0.203125\nv -0.258404 -0.015625 -0.203125\nv 0.442269 -0.015625 -0.203125\nv 0.498474 -0.015625 -0.203125\nv -0.302832 -0.0078125 -0.203125\nv -0.25884 -0.0078125 -0.203125\nv 0.440362 -0.0078125 -0.203125\nv 0.49956 -0.0078125 -0.203125\nv -0.30351 0 -0.203125\nv -0.259138 0 -0.203125\nv 0.439488 0 -0.203125\nv 0.499877 0 -0.203125\nv -0.303208 0.0078125 -0.203125\nv -0.258483 0.0078125 -0.203125\nv -0.257812 0.0101907 -0.203125\nv 0.440786 0.0078125 -0.203125\nv 0.499497 0.0078125 -0.203125\nv -0.301868 0.015625 -0.203125\nv -0.255332 0.015625 -0.203125\nv -0.25 0.0202831 -0.203125\nv -0.242188 0.0228873 -0.203125\nv -0.234375 0.0230395 -0.203125\nv 0.429688 0.0230519 -0.203125\nv 0.439728 0.015625 -0.203125\nv 0.4375 0.0179352 -0.203125\nv 0.499766 0.015625 -0.203125\nv 0.5 0.0217632 -0.203125\nv -0.300758 0.0234375 -0.203125\nv -0.232956 0.0234375 -0.203125\nv -0.226562 0.0247544 -0.203125\nv -0.21875 0.0270205 -0.203125\nv -0.210938 0.0288387 -0.203125\nv -0.203125 0.0295209 -0.203125\nv -0.195312 0.0297093 -0.203125\nv -0.1875 0.0297238 -0.203125\nv -0.179688 0.0289619 -0.203125\nv -0.171875 0.0279598 -0.203125\nv -0.164062 0.0275554 -0.203125\nv -0.15625 0.0274253 -0.203125\nv -0.148438 0.0275803 -0.203125\nv -0.140625 0.0275524 -0.203125\nv -0.132812 0.0276364 -0.203125\nv -0.125 0.0277159 -0.203125\nv -0.117188 0.0277417 -0.203125\nv -0.109375 0.0275486 -0.203125\nv -0.101562 0.0273199 -0.203125\nv -0.09375 0.0270715 -0.203125\nv -0.0859375 0.0268541 -0.203125\nv -0.078125 0.026602 -0.203125\nv -0.0703125 0.0262923 -0.203125\nv -0.0625 0.026144 -0.203125\nv -0.0546875 0.0260911 -0.203125\nv -0.046875 0.0261017 -0.203125\nv -0.0390625 0.0260942 -0.203125\nv -0.03125 0.0260611 -0.203125\nv -0.0234375 0.026002 -0.203125\nv -0.015625 0.0259895 -0.203125\nv -0.0078125 0.0260203 -0.203125\nv 0 0.0259584 -0.203125\nv 0.0078125 0.0258458 -0.203125\nv 0.015625 0.0258509 -0.203125\nv 0.0234375 0.0257963 -0.203125\nv 0.03125 0.0257022 -0.203125\nv 0.0390625 0.0255943 -0.203125\nv 0.046875 0.0255051 -0.203125\nv 0.0546875 0.0254377 -0.203125\nv 0.0625 0.0253855 -0.203125\nv 0.0703125 0.025289 -0.203125\nv 0.078125 0.0252065 -0.203125\nv 0.0859375 0.0251557 -0.203125\nv 0.09375 0.0251417 -0.203125\nv 0.101562 0.0251255 -0.203125\nv 0.109375 0.0251017 -0.203125\nv 0.117188 0.0250718 -0.203125\nv 0.125 0.0250724 -0.203125\nv 0.132812 0.0250722 -0.203125\nv 0.140625 0.0250878 -0.203125\nv 0.148438 0.0250586 -0.203125\nv 0.15625 0.0249708 -0.203125\nv 0.164062 0.0249003 -0.203125\nv 0.171875 0.0248584 -0.203125\nv 0.179688 0.0248103 -0.203125\nv 0.1875 0.0247588 -0.203125\nv 0.195312 0.0247175 -0.203125\nv 0.203125 0.0247041 -0.203125\nv 0.210938 0.0247301 -0.203125\nv 0.21875 0.0248143 -0.203125\nv 0.226562 0.0249622 -0.203125\nv 0.234375 0.0251401 -0.203125\nv 0.242188 0.0252595 -0.203125\nv 0.25 0.02544 -0.203125\nv 0.257812 0.0255973 -0.203125\nv 0.265625 0.0257618 -0.203125\nv 0.273438 0.0259227 -0.203125\nv 0.28125 0.0260518 -0.203125\nv 0.289062 0.0262078 -0.203125\nv 0.296875 0.0263118 -0.203125\nv 0.304688 0.0264321 -0.203125\nv 0.3125 0.0264179 -0.203125\nv 0.320312 0.0263691 -0.203125\nv 0.328125 0.0263879 -0.203125\nv 0.335938 0.0265109 -0.203125\nv 0.34375 0.0266536 -0.203125\nv 0.351562 0.0267946 -0.203125\nv 0.359375 0.0269766 -0.203125\nv 0.367188 0.0271718 -0.203125\nv 0.375 0.0273846 -0.203125\nv 0.382812 0.0276195 -0.203125\nv 0.390625 0.0274793 -0.203125\nv 0.398438 0.0269833 -0.203125\nv 0.40625 0.0262639 -0.203125\nv 0.414062 0.0255348 -0.203125\nv 0.428157 0.0234375 -0.203125\nv 0.421875 0.0244909 -0.203125\nv 0.500059 0.0234375 -0.203125\nv 0.5 0.0236671 -0.203125\nv -0.299467 0.03125 -0.203125\nv 0.49747 0.03125 -0.203125\nv -0.298411 0.0390625 -0.203125\nv -0.296875 0.0440822 -0.203125\nv 0.494887 0.0390625 -0.203125\nv -0.295803 0.046875 -0.203125\nv 0.492502 0.046875 -0.203125\nv 0.492188 0.0475575 -0.203125\nv -0.293402 0.0546875 -0.203125\nv 0.476562 0.0610689 -0.203125\nv 0.487895 0.0546875 -0.203125\nv 0.484375 0.0570847 -0.203125\nv -0.290883 0.0625 -0.203125\nv -0.289062 0.0647248 -0.203125\nv -0.28125 0.0675798 -0.203125\nv 0.4375 0.0700324 -0.203125\nv 0.445312 0.0684403 -0.203125\nv 0.453125 0.066518 -0.203125\nv 0.460938 0.0653078 -0.203125\nv 0.473168 0.0625 -0.203125\nv 0.46875 0.0643884 -0.203125\nv -0.276682 0.0703125 -0.203125\nv -0.273438 0.0725308 -0.203125\nv -0.265625 0.0735283 -0.203125\nv -0.21875 0.0772003 -0.203125\nv -0.210938 0.0758217 -0.203125\nv -0.203125 0.075427 -0.203125\nv -0.195312 0.0758278 -0.203125\nv -0.1875 0.0760846 -0.203125\nv -0.179688 0.0761235 -0.203125\nv -0.171875 0.075807 -0.203125\nv -0.164062 0.0757032 -0.203125\nv -0.15625 0.0757587 -0.203125\nv -0.148438 0.0756666 -0.203125\nv -0.140625 0.0755681 -0.203125\nv -0.132812 0.0753424 -0.203125\nv -0.125 0.0750706 -0.203125\nv -0.117188 0.0747525 -0.203125\nv -0.109375 0.0744677 -0.203125\nv -0.101562 0.0742721 -0.203125\nv -0.09375 0.0742575 -0.203125\nv -0.0859375 0.0743654 -0.203125\nv -0.078125 0.0744661 -0.203125\nv -0.0703125 0.0745051 -0.203125\nv -0.0625 0.0744758 -0.203125\nv -0.0546875 0.0744038 -0.203125\nv -0.046875 0.0743188 -0.203125\nv -0.0390625 0.0742212 -0.203125\nv -0.03125 0.074139 -0.203125\nv -0.0234375 0.0740752 -0.203125\nv -0.015625 0.0739617 -0.203125\nv -0.0078125 0.0738683 -0.203125\nv 0 0.0737425 -0.203125\nv 0.0078125 0.0735736 -0.203125\nv 0.015625 0.0734301 -0.203125\nv 0.0234375 0.0732729 -0.203125\nv 0.03125 0.0731824 -0.203125\nv 0.0390625 0.0730879 -0.203125\nv 0.046875 0.0729732 -0.203125\nv 0.0546875 0.0728631 -0.203125\nv 0.0625 0.0727411 -0.203125\nv 0.0703125 0.0726569 -0.203125\nv 0.078125 0.0726102 -0.203125\nv 0.0859375 0.0725906 -0.203125\nv 0.09375 0.0726054 -0.203125\nv 0.101562 0.0726252 -0.203125\nv 0.109375 0.0726341 -0.203125\nv 0.117188 0.0726039 -0.203125\nv 0.125 0.0725852 -0.203125\nv 0.132812 0.0726038 -0.203125\nv 0.140625 0.0726227 -0.203125\nv 0.148438 0.0726068 -0.203125\nv 0.15625 0.0725345 -0.203125\nv 0.164062 0.0724863 -0.203125\nv 0.171875 0.0724133 -0.203125\nv 0.179688 0.0723362 -0.203125\nv 0.1875 0.0722478 -0.203125\nv 0.195312 0.0721481 -0.203125\nv 0.203125 0.0721347 -0.203125\nv 0.210938 0.0721734 -0.203125\nv 0.21875 0.0722205 -0.203125\nv 0.226562 0.0722797 -0.203125\nv 0.234375 0.0723827 -0.203125\nv 0.242188 0.0724156 -0.203125\nv 0.25 0.0724399 -0.203125\nv 0.257812 0.0724677 -0.203125\nv 0.265625 0.0725311 -0.203125\nv 0.273438 0.0726399 -0.203125\nv 0.28125 0.0727754 -0.203125\nv 0.289062 0.072877 -0.203125\nv 0.296875 0.0729688 -0.203125\nv 0.304688 0.0730071 -0.203125\nv 0.3125 0.0730414 -0.203125\nv 0.320312 0.0730813 -0.203125\nv 0.328125 0.0730929 -0.203125\nv 0.335938 0.0730867 -0.203125\nv 0.34375 0.0730402 -0.203125\nv 0.351562 0.073008 -0.203125\nv 0.359375 0.0728077 -0.203125\nv 0.367188 0.0726091 -0.203125\nv 0.375 0.0723529 -0.203125\nv 0.382812 0.0719408 -0.203125\nv 0.390625 0.0715994 -0.203125\nv 0.398438 0.071463 -0.203125\nv 0.40625 0.07135 -0.203125\nv 0.414062 0.0711842 -0.203125\nv 0.421875 0.0708212 -0.203125\nv 0.43191 0.0703125 -0.203125\nv 0.429688 0.0704182 -0.203125\nv -0.259359 0.078125 -0.203125\nv -0.257812 0.0795921 -0.203125\nv -0.25 0.0839143 -0.203125\nv -0.242188 0.0854236 -0.203125\nv -0.234375 0.0820616 -0.203125\nv -0.222652 0.078125 -0.203125\nv -0.226562 0.0793399 -0.203125\nv -0.289062 0.171699 -0.203125\nv -0.28125 0.167329 -0.203125\nv -0.273438 0.167009 -0.203125\nv -0.265625 0.169129 -0.203125\nv -0.289239 0.171875 -0.203125\nv -0.261537 0.171875 -0.203125\nv -0.257812 0.173831 -0.203125\nv -0.292159 0.179688 -0.203125\nv -0.252529 0.179688 -0.203125\nv -0.25 0.182465 -0.203125\nv -0.295322 0.1875 -0.203125\nv -0.296875 0.191357 -0.203125\nv -0.246033 0.1875 -0.203125\nv -0.298243 0.195312 -0.203125\nv -0.2422 0.195312 -0.203125\nv -0.242188 0.195368 -0.203125\nv -0.242188 0.195312 -0.202928\nv -0.30028 0.203125 -0.203125\nv -0.240754 0.203125 -0.203125\nv -0.301297 0.210938 -0.203125\nv -0.239956 0.210938 -0.203125\nv -0.301405 0.21875 -0.203125\nv -0.239552 0.21875 -0.203125\nv -0.301602 0.226562 -0.203125\nv -0.239328 0.226562 -0.203125\nv -0.301484 0.234375 -0.203125\nv -0.239187 0.234375 -0.203125\nv -0.301386 0.242188 -0.203125\nv -0.239674 0.242188 -0.203125\nv -0.301046 0.25 -0.203125\nv -0.240727 0.25 -0.203125\nv -0.300322 0.257812 -0.203125\nv -0.242068 0.257812 -0.203125\nv -0.242188 0.258833 -0.203125\nv -0.299051 0.265625 -0.203125\nv -0.243042 0.265625 -0.203125\nv -0.297397 0.273438 -0.203125\nv -0.296875 0.275396 -0.203125\nv -0.244316 0.273438 -0.203125\nv -0.295238 0.28125 -0.203125\nv -0.246758 0.28125 -0.203125\nv -0.292959 0.289062 -0.203125\nv -0.249601 0.289062 -0.203125\nv -0.25 0.290101 -0.203125\nv -0.290139 0.296875 -0.203125\nv -0.289062 0.302835 -0.203125\nv -0.25256 0.296875 -0.203125\nv -0.288538 0.304688 -0.203125\nv -0.289062 0.304688 -0.197374\nv -0.25569 0.304688 -0.203125\nv -0.257812 0.308924 -0.203125\nv -0.28516 0.3125 -0.203125\nv -0.28125 0.319914 -0.203125\nv -0.260796 0.3125 -0.203125\nv -0.265625 0.318236 -0.203125\nv -0.280561 0.320312 -0.203125\nv -0.28125 0.320312 -0.196376\nv -0.268258 0.320312 -0.203125\nv -0.273438 0.323611 -0.203125\nv -0.304688 0.63739 -0.203125\nv -0.296875 0.635334 -0.203125\nv -0.289062 0.634609 -0.203125\nv -0.289062 0.632812 -0.198371\nv -0.309666 0.640625 -0.203125\nv -0.3125 0.645764 -0.203125\nv -0.281576 0.640625 -0.203125\nv -0.28125 0.641107 -0.203125\nv -0.28125 0.640625 -0.202361\nv -0.313792 0.648438 -0.203125\nv -0.277209 0.648438 -0.203125\nv -0.316099 0.65625 -0.203125\nv -0.275923 0.65625 -0.203125\nv -0.318333 0.664062 -0.203125\nv -0.275477 0.664062 -0.203125\nv -0.319933 0.671875 -0.203125\nv -0.274393 0.671875 -0.203125\nv -0.320282 0.679688 -0.203125\nv -0.273524 0.679688 -0.203125\nv -0.320202 0.6875 -0.203125\nv -0.27346 0.6875 -0.203125\nv -0.319962 0.695312 -0.203125\nv -0.273964 0.695312 -0.203125\nv -0.319569 0.703125 -0.203125\nv -0.274587 0.703125 -0.203125\nv -0.31917 0.710938 -0.203125\nv -0.275447 0.710938 -0.203125\nv -0.319016 0.71875 -0.203125\nv -0.276741 0.71875 -0.203125\nv -0.319073 0.726562 -0.203125\nv -0.278759 0.726562 -0.203125\nv -0.318922 0.734375 -0.203125\nv -0.280614 0.734375 -0.203125\nv -0.28125 0.737066 -0.203125\nv -0.319028 0.742188 -0.203125\nv -0.320312 0.742188 -0.196534\nv -0.282334 0.742188 -0.203125\nv -0.318599 0.75 -0.203125\nv -0.320312 0.75 -0.196566\nv -0.284229 0.75 -0.203125\nv -0.318577 0.757812 -0.203125\nv -0.320312 0.757812 -0.197401\nv -0.287073 0.757812 -0.203125\nv -0.289062 0.763628 -0.203125\nv -0.31739 0.765625 -0.203125\nv -0.289914 0.765625 -0.203125\nv -0.289062 0.765625 -0.19768\nv -0.313902 0.773438 -0.203125\nv -0.3125 0.775926 -0.203125\nv -0.304688 0.77693 -0.203125\nv -0.295717 0.773438 -0.203125\nv -0.296875 0.774312 -0.203125\nv 0.015625 -0.547731 -0.195312\nv 0.0234375 -0.549138 -0.195312\nv 0.03125 -0.549833 -0.195312\nv 0.0390625 -0.549616 -0.195312\nv 0.046875 -0.54843 -0.195312\nv 0.0546875 -0.547283 -0.195312\nv 0 -0.543127 -0.195312\nv 0.0117476 -0.546875 -0.195312\nv 0.0078125 -0.545791 -0.195312\nv 0.015625 -0.546875 -0.192291\nv 0.0234375 -0.546875 -0.188747\nv 0.03125 -0.546875 -0.187562\nv 0.046875 -0.546875 -0.189152\nv 0.05726 -0.546875 -0.195312\nv 0.0546875 -0.546875 -0.1937\nv 0.0625 -0.546043 -0.195312\nv 0.0703125 -0.544245 -0.195312\nv 0.078125 -0.54229 -0.195312\nv 0.0859375 -0.540408 -0.195312\nv -0.00714796 -0.539062 -0.195312\nv 0.09091 -0.539062 -0.195312\nv 0.0859375 -0.539062 -0.189224\nv 0.09375 -0.537843 -0.195312\nv 0.101562 -0.535218 -0.195312\nv 0.109375 -0.532603 -0.195312\nv -0.0062223 -0.53125 -0.195312\nv 0.114772 -0.53125 -0.195312\nv 0.117188 -0.530514 -0.195312\nv 0.125 -0.527508 -0.195312\nv 0.132812 -0.524253 -0.195312\nv -0.00257832 -0.523438 -0.195312\nv 0 -0.519059 -0.195312\nv 0.134855 -0.523438 -0.195312\nv 0.140625 -0.518609 -0.195312\nv 0.00230124 -0.515625 -0.195312\nv 0.0078125 -0.509117 -0.195312\nv 0.144102 -0.515625 -0.195312\nv 0.148438 -0.515625 -0.187737\nv 0.00890682 -0.507812 -0.195312\nv 0.015625 -0.50358 -0.195312\nv 0.14783 -0.507812 -0.195312\nv 0.140625 -0.504068 -0.195312\nv 0.148438 -0.507812 -0.19426\nv 0.0219727 -0.5 -0.195312\nv 0.0234375 -0.499299 -0.195312\nv 0.0234375 -0.5 -0.191622\nv 0.03125 -0.495194 -0.195312\nv 0.109375 -0.492866 -0.195312\nv 0.117188 -0.494483 -0.195312\nv 0.125 -0.496862 -0.195312\nv 0.133163 -0.5 -0.195312\nv 0.132812 -0.499852 -0.195312\nv 0.0367479 -0.492188 -0.195312\nv 0.0390625 -0.490959 -0.195312\nv 0.0390625 -0.492188 -0.190759\nv 0.046875 -0.489065 -0.195312\nv 0.0546875 -0.487849 -0.195312\nv 0.0625 -0.487231 -0.195312\nv 0.0703125 -0.486974 -0.195312\nv 0.078125 -0.486916 -0.195312\nv 0.0859375 -0.487353 -0.195312\nv 0.09375 -0.48852 -0.195312\nv 0.107433 -0.492188 -0.195312\nv 0.101562 -0.490319 -0.195312\nv 0.101562 -0.492188 -0.189593\nv 0.453125 -0.0657897 -0.195312\nv 0.460938 -0.0667065 -0.195312\nv 0.46875 -0.0630609 -0.195312\nv 0.476562 -0.0625965 -0.195312\nv -0.289062 -0.0567131 -0.195312\nv -0.28125 -0.0593597 -0.195312\nv -0.273438 -0.0585313 -0.195312\nv 0.447975 -0.0625 -0.195312\nv 0.476981 -0.0625 -0.195312\nv 0.484375 -0.0586476 -0.195312\nv -0.291417 -0.0546875 -0.195312\nv -0.296875 -0.0473326 -0.195312\nv -0.269146 -0.0546875 -0.195312\nv -0.265625 -0.0511055 -0.195312\nv 0.445349 -0.0546875 -0.195312\nv 0.445312 -0.0544661 -0.195312\nv 0.486967 -0.0546875 -0.195312\nv -0.297025 -0.046875 -0.195312\nv -0.263797 -0.046875 -0.195312\nv 0.44438 -0.046875 -0.195312\nv 0.490015 -0.046875 -0.195312\nv -0.299079 -0.0390625 -0.195312\nv -0.261488 -0.0390625 -0.195312\nv 0.444043 -0.0390625 -0.195312\nv 0.49165 -0.0390625 -0.195312\nv 0.492188 -0.0368917 -0.195312\nv -0.300089 -0.03125 -0.195312\nv -0.26021 -0.03125 -0.195312\nv 0.444278 -0.03125 -0.195312\nv 0.493633 -0.03125 -0.195312\nv -0.299795 -0.0234375 -0.195312\nv -0.258853 -0.0234375 -0.195312\nv 0.443075 -0.0234375 -0.195312\nv 0.496557 -0.0234375 -0.195312\nv -0.30082 -0.015625 -0.195312\nv -0.258632 -0.015625 -0.195312\nv 0.442194 -0.015625 -0.195312\nv 0.498463 -0.015625 -0.195312\nv -0.30279 -0.0078125 -0.195312\nv -0.258986 -0.0078125 -0.195312\nv 0.440215 -0.0078125 -0.195312\nv 0.499469 -0.0078125 -0.195312\nv -0.303686 0 -0.195312\nv -0.259154 0 -0.195312\nv 0.439491 0 -0.195312\nv 0.499888 0 -0.195312\nv 0.5 0 -0.188028\nv -0.303387 0.0078125 -0.195312\nv -0.258397 0.0078125 -0.195312\nv -0.257812 0.00987448 -0.195312\nv 0.440805 0.0078125 -0.195312\nv 0.499551 0.0078125 -0.195312\nv -0.302116 0.015625 -0.195312\nv -0.255241 0.015625 -0.195312\nv -0.25 0.0202556 -0.195312\nv -0.242188 0.0228641 -0.195312\nv -0.234375 0.0229038 -0.195312\nv 0.429688 0.0228708 -0.195312\nv 0.439685 0.015625 -0.195312\nv 0.4375 0.0177871 -0.195312\nv 0.49988 0.015625 -0.195312\nv 0.5 0.0194659 -0.195312\nv -0.300936 0.0234375 -0.195312\nv -0.232535 0.0234375 -0.195312\nv -0.226562 0.0247166 -0.195312\nv -0.21875 0.0270418 -0.195312\nv -0.210938 0.028719 -0.195312\nv -0.203125 0.0293128 -0.195312\nv -0.195312 0.0294049 -0.195312\nv -0.1875 0.0294088 -0.195312\nv -0.179688 0.0287651 -0.195312\nv -0.171875 0.0277785 -0.195312\nv -0.164062 0.0273862 -0.195312\nv -0.15625 0.0273121 -0.195312\nv -0.148438 0.0275314 -0.195312\nv -0.140625 0.0274959 -0.195312\nv -0.132812 0.0276095 -0.195312\nv -0.125 0.0277162 -0.195312\nv -0.117188 0.0277246 -0.195312\nv -0.109375 0.0274489 -0.195312\nv -0.101562 0.0271936 -0.195312\nv -0.09375 0.0270093 -0.195312\nv -0.0859375 0.0269102 -0.195312\nv -0.078125 0.0267029 -0.195312\nv -0.0703125 0.0263755 -0.195312\nv -0.0625 0.0261756 -0.195312\nv -0.0546875 0.0261265 -0.195312\nv -0.046875 0.0261258 -0.195312\nv -0.0390625 0.0261151 -0.195312\nv -0.03125 0.0260984 -0.195312\nv -0.0234375 0.0260818 -0.195312\nv -0.015625 0.026102 -0.195312\nv -0.0078125 0.0261447 -0.195312\nv 0 0.026091 -0.195312\nv 0.0078125 0.0259542 -0.195312\nv 0.015625 0.0259653 -0.195312\nv 0.0234375 0.0258758 -0.195312\nv 0.03125 0.0257839 -0.195312\nv 0.0390625 0.0256829 -0.195312\nv 0.046875 0.0256188 -0.195312\nv 0.0546875 0.0255454 -0.195312\nv 0.0625 0.025476 -0.195312\nv 0.0703125 0.0253839 -0.195312\nv 0.078125 0.0253072 -0.195312\nv 0.0859375 0.0252683 -0.195312\nv 0.09375 0.0251877 -0.195312\nv 0.101562 0.0251285 -0.195312\nv 0.109375 0.0250339 -0.195312\nv 0.117188 0.0249617 -0.195312\nv 0.125 0.0249215 -0.195312\nv 0.132812 0.024912 -0.195312\nv 0.140625 0.0249257 -0.195312\nv 0.148438 0.0248745 -0.195312\nv 0.15625 0.0248075 -0.195312\nv 0.164062 0.0247347 -0.195312\nv 0.171875 0.0246857 -0.195312\nv 0.179688 0.0246491 -0.195312\nv 0.1875 0.0246073 -0.195312\nv 0.195312 0.0245637 -0.195312\nv 0.203125 0.0245723 -0.195312\nv 0.210938 0.0246124 -0.195312\nv 0.21875 0.0247289 -0.195312\nv 0.226562 0.0248709 -0.195312\nv 0.234375 0.024985 -0.195312\nv 0.242188 0.0251269 -0.195312\nv 0.25 0.0252539 -0.195312\nv 0.257812 0.0254025 -0.195312\nv 0.265625 0.0255632 -0.195312\nv 0.273438 0.0257231 -0.195312\nv 0.28125 0.0258752 -0.195312\nv 0.289062 0.0260004 -0.195312\nv 0.296875 0.026083 -0.195312\nv 0.304688 0.0262085 -0.195312\nv 0.3125 0.0262847 -0.195312\nv 0.320312 0.0262665 -0.195312\nv 0.328125 0.0263007 -0.195312\nv 0.335938 0.0264191 -0.195312\nv 0.34375 0.0265607 -0.195312\nv 0.351562 0.0266946 -0.195312\nv 0.359375 0.0267952 -0.195312\nv 0.367188 0.0269955 -0.195312\nv 0.375 0.0272012 -0.195312\nv 0.382812 0.0273551 -0.195312\nv 0.390625 0.0272095 -0.195312\nv 0.398438 0.0267858 -0.195312\nv 0.40625 0.0261401 -0.195312\nv 0.414062 0.0253718 -0.195312\nv 0.427359 0.0234375 -0.195312\nv 0.421875 0.0243514 -0.195312\nv 0.500115 0.0234375 -0.195312\nv 0.5 0.0238633 -0.195312\nv -0.299654 0.03125 -0.195312\nv 0.497448 0.03125 -0.195312\nv -0.298592 0.0390625 -0.195312\nv -0.296875 0.044403 -0.195312\nv 0.494924 0.0390625 -0.195312\nv -0.295894 0.046875 -0.195312\nv 0.492447 0.046875 -0.195312\nv 0.492188 0.0474735 -0.195312\nv -0.293474 0.0546875 -0.195312\nv 0.476562 0.0612125 -0.195312\nv 0.488202 0.0546875 -0.195312\nv 0.484375 0.05729 -0.195312\nv -0.290783 0.0625 -0.195312\nv -0.289062 0.0648187 -0.195312\nv -0.28125 0.0682251 -0.195312\nv 0.4375 0.0701885 -0.195312\nv 0.445312 0.0686085 -0.195312\nv 0.453125 0.06668 -0.195312\nv 0.460938 0.0655186 -0.195312\nv 0.473574 0.0625 -0.195312\nv 0.46875 0.0646038 -0.195312\nv -0.277686 0.0703125 -0.195312\nv -0.273438 0.0732787 -0.195312\nv -0.265625 0.0743476 -0.195312\nv -0.21875 0.0769184 -0.195312\nv -0.210938 0.0755184 -0.195312\nv -0.203125 0.0752205 -0.195312\nv -0.195312 0.0755557 -0.195312\nv -0.1875 0.0758433 -0.195312\nv -0.179688 0.0759238 -0.195312\nv -0.171875 0.0756039 -0.195312\nv -0.164062 0.0756279 -0.195312\nv -0.15625 0.0756636 -0.195312\nv -0.148438 0.0756464 -0.195312\nv -0.140625 0.0755117 -0.195312\nv -0.132812 0.0753285 -0.195312\nv -0.125 0.0750553 -0.195312\nv -0.117188 0.0747451 -0.195312\nv -0.109375 0.074474 -0.195312\nv -0.101562 0.0742921 -0.195312\nv -0.09375 0.0743015 -0.195312\nv -0.0859375 0.0743699 -0.195312\nv -0.078125 0.0744093 -0.195312\nv -0.0703125 0.0744689 -0.195312\nv -0.0625 0.074415 -0.195312\nv -0.0546875 0.0743521 -0.195312\nv -0.046875 0.0742709 -0.195312\nv -0.0390625 0.0741774 -0.195312\nv -0.03125 0.0740721 -0.195312\nv -0.0234375 0.0740051 -0.195312\nv -0.015625 0.0739389 -0.195312\nv -0.0078125 0.0738561 -0.195312\nv 0 0.0737216 -0.195312\nv 0.0078125 0.0735522 -0.195312\nv 0.015625 0.0734043 -0.195312\nv 0.0234375 0.073246 -0.195312\nv 0.03125 0.0731423 -0.195312\nv 0.0390625 0.0730331 -0.195312\nv 0.046875 0.0729166 -0.195312\nv 0.0546875 0.0728241 -0.195312\nv 0.0625 0.072709 -0.195312\nv 0.0703125 0.0726302 -0.195312\nv 0.078125 0.0725887 -0.195312\nv 0.0859375 0.0725806 -0.195312\nv 0.09375 0.0725687 -0.195312\nv 0.101562 0.07256 -0.195312\nv 0.109375 0.0725479 -0.195312\nv 0.117188 0.0725356 -0.195312\nv 0.125 0.0725463 -0.195312\nv 0.132812 0.0726134 -0.195312\nv 0.140625 0.0726309 -0.195312\nv 0.148438 0.0725884 -0.195312\nv 0.15625 0.0724844 -0.195312\nv 0.164062 0.0723235 -0.195312\nv 0.171875 0.072243 -0.195312\nv 0.179688 0.072157 -0.195312\nv 0.1875 0.0720795 -0.195312\nv 0.195312 0.0720146 -0.195312\nv 0.203125 0.0720034 -0.195312\nv 0.210938 0.0720251 -0.195312\nv 0.21875 0.0720783 -0.195312\nv 0.226562 0.0722451 -0.195312\nv 0.234375 0.0723584 -0.195312\nv 0.242188 0.0724067 -0.195312\nv 0.25 0.072437 -0.195312\nv 0.257812 0.0724885 -0.195312\nv 0.265625 0.0725923 -0.195312\nv 0.273438 0.0727161 -0.195312\nv 0.28125 0.0728318 -0.195312\nv 0.289062 0.07295 -0.195312\nv 0.296875 0.073042 -0.195312\nv 0.304688 0.0730755 -0.195312\nv 0.3125 0.0731055 -0.195312\nv 0.320312 0.0731423 -0.195312\nv 0.328125 0.0731547 -0.195312\nv 0.335938 0.073138 -0.195312\nv 0.34375 0.0731011 -0.195312\nv 0.351562 0.0730884 -0.195312\nv 0.359375 0.0728973 -0.195312\nv 0.367188 0.0726853 -0.195312\nv 0.375 0.0724475 -0.195312\nv 0.382812 0.0720703 -0.195312\nv 0.390625 0.0717208 -0.195312\nv 0.398438 0.0715635 -0.195312\nv 0.40625 0.0714506 -0.195312\nv 0.414062 0.0713309 -0.195312\nv 0.421875 0.0710062 -0.195312\nv 0.43536 0.0703125 -0.195312\nv 0.429688 0.0706247 -0.195312\nv 0.4375 0.0703125 -0.191191\nv -0.260653 0.078125 -0.195312\nv -0.257812 0.0809592 -0.195312\nv -0.25 0.0847645 -0.195312\nv -0.242188 0.0856887 -0.195312\nv -0.234375 0.0822593 -0.195312\nv -0.223972 0.078125 -0.195312\nv -0.226562 0.0789173 -0.195312\nv -0.242188 0.0859375 -0.192402\nv -0.289062 0.171716 -0.195312\nv -0.28125 0.167922 -0.195312\nv -0.273438 0.167483 -0.195312\nv -0.265625 0.169114 -0.195312\nv -0.289247 0.171875 -0.195312\nv -0.260272 0.171875 -0.195312\nv -0.257812 0.172905 -0.195312\nv -0.257812 0.171875 -0.188168\nv -0.292406 0.179688 -0.195312\nv -0.25125 0.179688 -0.195312\nv -0.25 0.181117 -0.195312\nv -0.295566 0.1875 -0.195312\nv -0.296875 0.190704 -0.195312\nv -0.245017 0.1875 -0.195312\nv -0.242188 0.194295 -0.195312\nv -0.298499 0.195312 -0.195312\nv -0.241794 0.195312 -0.195312\nv -0.300487 0.203125 -0.195312\nv -0.240718 0.203125 -0.195312\nv -0.301468 0.210938 -0.195312\nv -0.240029 0.210938 -0.195312\nv -0.301449 0.21875 -0.195312\nv -0.239523 0.21875 -0.195312\nv -0.301564 0.226562 -0.195312\nv -0.239199 0.226562 -0.195312\nv -0.301402 0.234375 -0.195312\nv -0.239041 0.234375 -0.195312\nv -0.301371 0.242188 -0.195312\nv -0.239691 0.242188 -0.195312\nv -0.301015 0.25 -0.195312\nv -0.240666 0.25 -0.195312\nv -0.300165 0.257812 -0.195312\nv -0.242097 0.257812 -0.195312\nv -0.242188 0.258431 -0.195312\nv -0.242188 0.257812 -0.192529\nv -0.299072 0.265625 -0.195312\nv -0.243222 0.265625 -0.195312\nv -0.297657 0.273438 -0.195312\nv -0.296875 0.27683 -0.195312\nv -0.244359 0.273438 -0.195312\nv -0.295841 0.28125 -0.195312\nv -0.246278 0.28125 -0.195312\nv -0.293673 0.289062 -0.195312\nv -0.248884 0.289062 -0.195312\nv -0.25 0.292128 -0.195312\nv -0.290899 0.296875 -0.195312\nv -0.251619 0.296875 -0.195312\nv -0.289184 0.304688 -0.195312\nv -0.289062 0.305059 -0.195312\nv -0.289062 0.304688 -0.188766\nv -0.254739 0.304688 -0.195312\nv -0.257812 0.311412 -0.195312\nv -0.285819 0.3125 -0.195312\nv -0.258731 0.3125 -0.195312\nv -0.265625 0.318589 -0.195312\nv -0.281286 0.320312 -0.195312\nv -0.28125 0.320364 -0.195312\nv -0.268188 0.320312 -0.195312\nv -0.273438 0.323364 -0.195312\nv -0.289062 0.631387 -0.195312\nv -0.304688 0.636143 -0.195312\nv -0.292855 0.632812 -0.195312\nv -0.296875 0.633878 -0.195312\nv -0.296875 0.632812 -0.191441\nv -0.286488 0.632812 -0.195312\nv -0.28125 0.636665 -0.195312\nv -0.28125 0.632812 -0.188994\nv -0.310631 0.640625 -0.195312\nv -0.3125 0.644269 -0.195312\nv -0.278843 0.640625 -0.195312\nv -0.314378 0.648438 -0.195312\nv -0.276281 0.648438 -0.195312\nv -0.316414 0.65625 -0.195312\nv -0.275531 0.65625 -0.195312\nv -0.31845 0.664062 -0.195312\nv -0.275054 0.664062 -0.195312\nv -0.319831 0.671875 -0.195312\nv -0.274256 0.671875 -0.195312\nv -0.320185 0.679688 -0.195312\nv -0.273678 0.679688 -0.195312\nv -0.320116 0.6875 -0.195312\nv -0.273624 0.6875 -0.195312\nv -0.319901 0.695312 -0.195312\nv -0.274084 0.695312 -0.195312\nv -0.319689 0.703125 -0.195312\nv -0.274723 0.703125 -0.195312\nv -0.319505 0.710938 -0.195312\nv -0.27555 0.710938 -0.195312\nv -0.319545 0.71875 -0.195312\nv -0.27675 0.71875 -0.195312\nv -0.319748 0.726562 -0.195312\nv -0.278761 0.726562 -0.195312\nv -0.319985 0.734375 -0.195312\nv -0.320312 0.738991 -0.195312\nv -0.320312 0.734375 -0.190475\nv -0.280494 0.734375 -0.195312\nv -0.28125 0.737908 -0.195312\nv -0.320509 0.742188 -0.195312\nv -0.282078 0.742188 -0.195312\nv -0.320574 0.75 -0.195312\nv -0.283642 0.75 -0.195312\nv -0.320821 0.757812 -0.195312\nv -0.320312 0.765343 -0.195312\nv -0.286297 0.757812 -0.195312\nv -0.320288 0.765625 -0.195312\nv -0.320312 0.765625 -0.195212\nv -0.288771 0.765625 -0.195312\nv -0.289062 0.766267 -0.195312\nv -0.317103 0.773438 -0.195312\nv -0.3125 0.780476 -0.195312\nv -0.304688 0.779926 -0.195312\nv -0.293852 0.773438 -0.195312\nv -0.296875 0.77606 -0.195312\nv -0.3125 0.78125 -0.193171\nv -0.304688 0.78125 -0.189343\nv 0.0390625 -0.546935 -0.1875\nv 0 -0.54004 -0.1875\nv 0.0078125 -0.542987 -0.1875\nv 0.015625 -0.545361 -0.1875\nv 0.0234375 -0.54641 -0.1875\nv 0.0334249 -0.546875 -0.1875\nv 0.03125 -0.546848 -0.1875\nv 0.0400176 -0.546875 -0.1875\nv 0.0390625 -0.546875 -0.187276\nv 0.046875 -0.546431 -0.1875\nv 0.0546875 -0.54526 -0.1875\nv 0.0625 -0.543984 -0.1875\nv 0.0703125 -0.542404 -0.1875\nv 0.078125 -0.540496 -0.1875\nv -0.00188026 -0.539062 -0.1875\nv 0 -0.539062 -0.18263\nv 0.0840721 -0.539062 -0.1875\nv 0.078125 -0.539062 -0.180467\nv 0.0859375 -0.538377 -0.1875\nv 0.09375 -0.535759 -0.1875\nv 0.101562 -0.53447 -0.1875\nv 0.109375 -0.532712 -0.1875\nv -0.00411108 -0.53125 -0.1875\nv 0.114649 -0.53125 -0.1875\nv 0.117188 -0.530362 -0.1875\nv 0.125 -0.52755 -0.1875\nv 0.132812 -0.524482 -0.1875\nv -0.000946768 -0.523438 -0.1875\nv 0 -0.521921 -0.1875\nv 0.136136 -0.523438 -0.1875\nv 0.140625 -0.520623 -0.1875\nv 0.140625 -0.523438 -0.183443\nv 0.148438 -0.515747 -0.1875\nv 0.00396479 -0.515625 -0.1875\nv 0.0078125 -0.511228 -0.1875\nv 0.1486 -0.515625 -0.1875\nv 0.15625 -0.515625 -0.182278\nv 0.0109239 -0.507812 -0.1875\nv 0.015625 -0.504869 -0.1875\nv 0.0234375 -0.500781 -0.1875\nv 0.140625 -0.502596 -0.1875\nv 0.152195 -0.507812 -0.1875\nv 0.148438 -0.505687 -0.1875\nv 0.15625 -0.507812 -0.183702\nv 0.0247574 -0.5 -0.1875\nv 0.03125 -0.496794 -0.1875\nv 0.0390625 -0.493422 -0.1875\nv 0.101562 -0.492913 -0.1875\nv 0.109375 -0.493955 -0.1875\nv 0.117188 -0.495278 -0.1875\nv 0.125 -0.497165 -0.1875\nv 0.133869 -0.5 -0.1875\nv 0.132812 -0.499716 -0.1875\nv 0.0427458 -0.492188 -0.1875\nv 0.046875 -0.490843 -0.1875\nv 0.0546875 -0.489977 -0.1875\nv 0.0625 -0.489451 -0.1875\nv 0.0703125 -0.489128 -0.1875\nv 0.078125 -0.489439 -0.1875\nv 0.0859375 -0.49045 -0.1875\nv 0.096935 -0.492188 -0.1875\nv 0.09375 -0.491719 -0.1875\nv 0.453125 -0.0656739 -0.1875\nv 0.460938 -0.0666766 -0.1875\nv 0.46875 -0.0631608 -0.1875\nv 0.476562 -0.0626909 -0.1875\nv -0.289062 -0.0570244 -0.1875\nv -0.28125 -0.0597226 -0.1875\nv -0.273438 -0.0586474 -0.1875\nv 0.448439 -0.0625 -0.1875\nv 0.477385 -0.0625 -0.1875\nv 0.484375 -0.0588535 -0.1875\nv -0.29174 -0.0546875 -0.1875\nv -0.296875 -0.0476542 -0.1875\nv -0.269152 -0.0546875 -0.1875\nv -0.265625 -0.0510985 -0.1875\nv 0.44576 -0.0546875 -0.1875\nv 0.445312 -0.0517513 -0.1875\nv 0.487172 -0.0546875 -0.1875\nv -0.297127 -0.046875 -0.1875\nv -0.263783 -0.046875 -0.1875\nv 0.444706 -0.046875 -0.1875\nv 0.490338 -0.046875 -0.1875\nv -0.299085 -0.0390625 -0.1875\nv -0.261561 -0.0390625 -0.1875\nv 0.444412 -0.0390625 -0.1875\nv 0.492025 -0.0390625 -0.1875\nv 0.492188 -0.0384208 -0.1875\nv 0.492188 -0.0390625 -0.182004\nv -0.300036 -0.03125 -0.1875\nv -0.260364 -0.03125 -0.1875\nv 0.444475 -0.03125 -0.1875\nv 0.493985 -0.03125 -0.1875\nv -0.299675 -0.0234375 -0.1875\nv -0.259272 -0.0234375 -0.1875\nv 0.443202 -0.0234375 -0.1875\nv 0.496747 -0.0234375 -0.1875\nv -0.300752 -0.015625 -0.1875\nv -0.258765 -0.015625 -0.1875\nv 0.4422 -0.015625 -0.1875\nv 0.498604 -0.015625 -0.1875\nv -0.302706 -0.0078125 -0.1875\nv -0.259055 -0.0078125 -0.1875\nv 0.440193 -0.0078125 -0.1875\nv 0.499429 -0.0078125 -0.1875\nv 0.5 -0.000134094 -0.1875\nv -0.303804 0 -0.1875\nv -0.259144 0 -0.1875\nv 0.439571 0 -0.1875\nv 0.500007 0 -0.1875\nv 0.5 0.000199745 -0.1875\nv -0.303469 0.0078125 -0.1875\nv -0.258357 0.0078125 -0.1875\nv -0.257812 0.0097456 -0.1875\nv 0.440877 0.0078125 -0.1875\nv 0.499717 0.0078125 -0.1875\nv -0.302282 0.015625 -0.1875\nv -0.255311 0.015625 -0.1875\nv -0.25 0.0202251 -0.1875\nv -0.242188 0.0228736 -0.1875\nv -0.234375 0.0228695 -0.1875\nv 0.429688 0.022682 -0.1875\nv 0.439677 0.015625 -0.1875\nv 0.4375 0.0177298 -0.1875\nv 0.499977 0.015625 -0.1875\nv 0.5 0.0164946 -0.1875\nv -0.301037 0.0234375 -0.1875\nv -0.232317 0.0234375 -0.1875\nv -0.226562 0.0246281 -0.1875\nv -0.21875 0.0269583 -0.1875\nv -0.210938 0.0285193 -0.1875\nv -0.203125 0.0291398 -0.1875\nv -0.195312 0.0291212 -0.1875\nv -0.1875 0.0291454 -0.1875\nv -0.179688 0.0285722 -0.1875\nv -0.171875 0.0276999 -0.1875\nv -0.164062 0.0273299 -0.1875\nv -0.15625 0.0273364 -0.1875\nv -0.148438 0.0275184 -0.1875\nv -0.140625 0.0275036 -0.1875\nv -0.132812 0.0276 -0.1875\nv -0.125 0.0277407 -0.1875\nv -0.117188 0.0276907 -0.1875\nv -0.109375 0.027384 -0.1875\nv -0.101562 0.0271704 -0.1875\nv -0.09375 0.0270915 -0.1875\nv -0.0859375 0.0269804 -0.1875\nv -0.078125 0.0267847 -0.1875\nv -0.0703125 0.0264692 -0.1875\nv -0.0625 0.0262306 -0.1875\nv -0.0546875 0.0261139 -0.1875\nv -0.046875 0.0260888 -0.1875\nv -0.0390625 0.0261114 -0.1875\nv -0.03125 0.0261042 -0.1875\nv -0.0234375 0.0261051 -0.1875\nv -0.015625 0.0261489 -0.1875\nv -0.0078125 0.0262172 -0.1875\nv 0 0.0261578 -0.1875\nv 0.0078125 0.0260668 -0.1875\nv 0.015625 0.026042 -0.1875\nv 0.0234375 0.0259531 -0.1875\nv 0.03125 0.0258603 -0.1875\nv 0.0390625 0.0257752 -0.1875\nv 0.046875 0.025705 -0.1875\nv 0.0546875 0.0256478 -0.1875\nv 0.0625 0.0255788 -0.1875\nv 0.0703125 0.0254768 -0.1875\nv 0.078125 0.0254003 -0.1875\nv 0.0859375 0.0253567 -0.1875\nv 0.09375 0.025302 -0.1875\nv 0.101562 0.0251832 -0.1875\nv 0.109375 0.025114 -0.1875\nv 0.117188 0.0249957 -0.1875\nv 0.125 0.0248945 -0.1875\nv 0.132812 0.0248451 -0.1875\nv 0.140625 0.0247932 -0.1875\nv 0.148438 0.0247152 -0.1875\nv 0.15625 0.0246336 -0.1875\nv 0.164062 0.0245694 -0.1875\nv 0.171875 0.0245193 -0.1875\nv 0.179688 0.0244836 -0.1875\nv 0.1875 0.0244525 -0.1875\nv 0.195312 0.0244215 -0.1875\nv 0.203125 0.0244525 -0.1875\nv 0.210938 0.0245457 -0.1875\nv 0.21875 0.0246848 -0.1875\nv 0.226562 0.0247698 -0.1875\nv 0.234375 0.0248686 -0.1875\nv 0.242188 0.0250036 -0.1875\nv 0.25 0.0250727 -0.1875\nv 0.257812 0.0252141 -0.1875\nv 0.265625 0.0253743 -0.1875\nv 0.273438 0.0255614 -0.1875\nv 0.28125 0.0257068 -0.1875\nv 0.289062 0.0257929 -0.1875\nv 0.296875 0.0258664 -0.1875\nv 0.304688 0.0259813 -0.1875\nv 0.3125 0.0261588 -0.1875\nv 0.320312 0.0261946 -0.1875\nv 0.328125 0.0262049 -0.1875\nv 0.335938 0.0263154 -0.1875\nv 0.34375 0.0264666 -0.1875\nv 0.351562 0.0266147 -0.1875\nv 0.359375 0.0266723 -0.1875\nv 0.367188 0.0268842 -0.1875\nv 0.375 0.0271183 -0.1875\nv 0.382812 0.0271967 -0.1875\nv 0.390625 0.0270451 -0.1875\nv 0.398438 0.0266896 -0.1875\nv 0.40625 0.0260762 -0.1875\nv 0.414062 0.0252326 -0.1875\nv 0.426551 0.0234375 -0.1875\nv 0.421875 0.0242218 -0.1875\nv 0.500165 0.0234375 -0.1875\nv 0.5 0.0240485 -0.1875\nv -0.299785 0.03125 -0.1875\nv 0.497477 0.03125 -0.1875\nv -0.298695 0.0390625 -0.1875\nv -0.296875 0.044621 -0.1875\nv 0.494923 0.0390625 -0.1875\nv -0.29597 0.046875 -0.1875\nv 0.492391 0.046875 -0.1875\nv 0.492188 0.0473808 -0.1875\nv -0.293627 0.0546875 -0.1875\nv 0.476562 0.0614227 -0.1875\nv 0.488496 0.0546875 -0.1875\nv 0.484375 0.057455 -0.1875\nv -0.290646 0.0625 -0.1875\nv -0.289062 0.0648173 -0.1875\nv -0.28125 0.0687234 -0.1875\nv 0.445312 0.0687818 -0.1875\nv 0.453125 0.0668399 -0.1875\nv 0.460938 0.0656949 -0.1875\nv 0.473988 0.0625 -0.1875\nv 0.46875 0.06473 -0.1875\nv -0.278463 0.0703125 -0.1875\nv -0.273438 0.0737669 -0.1875\nv -0.265625 0.0751788 -0.1875\nv -0.21875 0.0766388 -0.1875\nv -0.210938 0.0752377 -0.1875\nv -0.203125 0.0749205 -0.1875\nv -0.195312 0.0752344 -0.1875\nv -0.1875 0.0755542 -0.1875\nv -0.179688 0.0757015 -0.1875\nv -0.171875 0.075417 -0.1875\nv -0.164062 0.0754619 -0.1875\nv -0.15625 0.0755001 -0.1875\nv -0.148438 0.0755792 -0.1875\nv -0.140625 0.0754255 -0.1875\nv -0.132812 0.0753061 -0.1875\nv -0.125 0.07512 -0.1875\nv -0.117188 0.0747871 -0.1875\nv -0.109375 0.0745548 -0.1875\nv -0.101562 0.0743996 -0.1875\nv -0.09375 0.0743748 -0.1875\nv -0.0859375 0.0743965 -0.1875\nv -0.078125 0.0744172 -0.1875\nv -0.0703125 0.0744728 -0.1875\nv -0.0625 0.0744012 -0.1875\nv -0.0546875 0.0743172 -0.1875\nv -0.046875 0.0742068 -0.1875\nv -0.0390625 0.0741043 -0.1875\nv -0.03125 0.0739881 -0.1875\nv -0.0234375 0.0738963 -0.1875\nv -0.015625 0.0738384 -0.1875\nv -0.0078125 0.0737854 -0.1875\nv 0 0.0736464 -0.1875\nv 0.0078125 0.0734761 -0.1875\nv 0.015625 0.073352 -0.1875\nv 0.0234375 0.073224 -0.1875\nv 0.03125 0.0731211 -0.1875\nv 0.0390625 0.0730326 -0.1875\nv 0.046875 0.0729406 -0.1875\nv 0.0546875 0.0728562 -0.1875\nv 0.0625 0.0727322 -0.1875\nv 0.0703125 0.0726458 -0.1875\nv 0.078125 0.0726072 -0.1875\nv 0.0859375 0.0725939 -0.1875\nv 0.09375 0.0725604 -0.1875\nv 0.101562 0.0725552 -0.1875\nv 0.109375 0.0725375 -0.1875\nv 0.117188 0.0725265 -0.1875\nv 0.125 0.0724898 -0.1875\nv 0.132812 0.0724961 -0.1875\nv 0.140625 0.0725553 -0.1875\nv 0.148438 0.0725352 -0.1875\nv 0.15625 0.0724293 -0.1875\nv 0.164062 0.0722755 -0.1875\nv 0.171875 0.0721657 -0.1875\nv 0.179688 0.0720969 -0.1875\nv 0.1875 0.0720087 -0.1875\nv 0.195312 0.0719087 -0.1875\nv 0.203125 0.0718574 -0.1875\nv 0.210938 0.0718612 -0.1875\nv 0.21875 0.0720185 -0.1875\nv 0.226562 0.0721682 -0.1875\nv 0.234375 0.0722672 -0.1875\nv 0.242188 0.0723335 -0.1875\nv 0.25 0.0723983 -0.1875\nv 0.257812 0.0725093 -0.1875\nv 0.265625 0.0726372 -0.1875\nv 0.273438 0.072749 -0.1875\nv 0.28125 0.0728683 -0.1875\nv 0.289062 0.0729872 -0.1875\nv 0.296875 0.073085 -0.1875\nv 0.304688 0.0731435 -0.1875\nv 0.3125 0.0731781 -0.1875\nv 0.320312 0.0732106 -0.1875\nv 0.328125 0.0732308 -0.1875\nv 0.335938 0.0732212 -0.1875\nv 0.34375 0.0731851 -0.1875\nv 0.351562 0.0731674 -0.1875\nv 0.359375 0.0729857 -0.1875\nv 0.367188 0.0727738 -0.1875\nv 0.375 0.072556 -0.1875\nv 0.382812 0.0721856 -0.1875\nv 0.390625 0.0718323 -0.1875\nv 0.398438 0.0717075 -0.1875\nv 0.40625 0.0716048 -0.1875\nv 0.414062 0.0715055 -0.1875\nv 0.421875 0.0712705 -0.1875\nv 0.429688 0.070916 -0.1875\nv 0.438021 0.0703125 -0.1875\nv 0.4375 0.0704184 -0.1875\nv -0.261787 0.078125 -0.1875\nv -0.257812 0.0824515 -0.1875\nv -0.25 0.0857676 -0.1875\nv -0.234375 0.0819905 -0.1875\nv -0.225333 0.078125 -0.1875\nv -0.226562 0.0785043 -0.1875\nv -0.247022 0.0859375 -0.1875\nv -0.25 0.0859375 -0.186194\nv -0.241482 0.0859375 -0.1875\nv -0.242188 0.0862173 -0.1875\nv -0.289062 0.171599 -0.1875\nv -0.28125 0.167947 -0.1875\nv -0.273438 0.167113 -0.1875\nv -0.265625 0.168469 -0.1875\nv -0.257812 0.171758 -0.1875\nv -0.289404 0.171875 -0.1875\nv -0.257701 0.171875 -0.1875\nv -0.29259 0.179688 -0.1875\nv -0.250025 0.179688 -0.1875\nv -0.25 0.179719 -0.1875\nv -0.25 0.179688 -0.187136\nv -0.295662 0.1875 -0.1875\nv -0.296875 0.190601 -0.1875\nv -0.244158 0.1875 -0.1875\nv -0.242188 0.19395 -0.1875\nv -0.298464 0.195312 -0.1875\nv -0.241824 0.195312 -0.1875\nv -0.242188 0.195312 -0.18189\nv -0.300435 0.203125 -0.1875\nv -0.240959 0.203125 -0.1875\nv -0.301445 0.210938 -0.1875\nv -0.240068 0.210938 -0.1875\nv -0.301394 0.21875 -0.1875\nv -0.239536 0.21875 -0.1875\nv -0.301404 0.226562 -0.1875\nv -0.239082 0.226562 -0.1875\nv -0.301249 0.234375 -0.1875\nv -0.238998 0.234375 -0.1875\nv -0.301245 0.242188 -0.1875\nv -0.239767 0.242188 -0.1875\nv -0.301013 0.25 -0.1875\nv -0.240822 0.25 -0.1875\nv -0.242188 0.256983 -0.1875\nv -0.300164 0.257812 -0.1875\nv -0.242345 0.257812 -0.1875\nv -0.29923 0.265625 -0.1875\nv -0.243529 0.265625 -0.1875\nv -0.298083 0.273438 -0.1875\nv -0.296875 0.279026 -0.1875\nv -0.244488 0.273438 -0.1875\nv -0.296373 0.28125 -0.1875\nv -0.245992 0.28125 -0.1875\nv -0.294267 0.289062 -0.1875\nv -0.248146 0.289062 -0.1875\nv -0.25 0.294282 -0.1875\nv -0.291792 0.296875 -0.1875\nv -0.289062 0.304631 -0.1875\nv -0.250917 0.296875 -0.1875\nv -0.289033 0.304688 -0.1875\nv -0.254027 0.304688 -0.1875\nv -0.257812 0.312046 -0.1875\nv -0.285826 0.3125 -0.1875\nv -0.258205 0.3125 -0.1875\nv -0.265625 0.318455 -0.1875\nv -0.257812 0.3125 -0.184948\nv -0.281396 0.320312 -0.1875\nv -0.28125 0.32051 -0.1875\nv -0.268627 0.320312 -0.1875\nv -0.273438 0.323242 -0.1875\nv -0.296875 0.631335 -0.1875\nv -0.289062 0.627146 -0.1875\nv -0.289062 0.625 -0.1836\nv -0.28125 0.631853 -0.1875\nv -0.301061 0.632812 -0.1875\nv -0.304688 0.634171 -0.1875\nv -0.304688 0.632812 -0.184301\nv -0.28054 0.632812 -0.1875\nv -0.311568 0.640625 -0.1875\nv -0.3125 0.642823 -0.1875\nv -0.276691 0.640625 -0.1875\nv -0.314659 0.648438 -0.1875\nv -0.275706 0.648438 -0.1875\nv -0.316701 0.65625 -0.1875\nv -0.274989 0.65625 -0.1875\nv -0.318457 0.664062 -0.1875\nv -0.274487 0.664062 -0.1875\nv -0.319659 0.671875 -0.1875\nv -0.274064 0.671875 -0.1875\nv -0.320103 0.679688 -0.1875\nv -0.273882 0.679688 -0.1875\nv -0.32013 0.6875 -0.1875\nv -0.273899 0.6875 -0.1875\nv -0.319982 0.695312 -0.1875\nv -0.274301 0.695312 -0.1875\nv -0.319834 0.703125 -0.1875\nv -0.27487 0.703125 -0.1875\nv -0.319723 0.710938 -0.1875\nv -0.275689 0.710938 -0.1875\nv -0.319864 0.71875 -0.1875\nv -0.27678 0.71875 -0.1875\nv -0.32018 0.726562 -0.1875\nv -0.320312 0.729608 -0.1875\nv -0.320312 0.726562 -0.185316\nv -0.278742 0.726562 -0.1875\nv -0.320508 0.734375 -0.1875\nv -0.280402 0.734375 -0.1875\nv -0.28125 0.738672 -0.1875\nv -0.321203 0.742188 -0.1875\nv -0.281881 0.742188 -0.1875\nv -0.321338 0.75 -0.1875\nv -0.283319 0.75 -0.1875\nv -0.321859 0.757812 -0.1875\nv -0.285648 0.757812 -0.1875\nv -0.321841 0.765625 -0.1875\nv -0.320312 0.77162 -0.1875\nv -0.288117 0.765625 -0.1875\nv -0.289062 0.767756 -0.1875\nv -0.319727 0.773438 -0.1875\nv -0.320312 0.773438 -0.18533\nv -0.292608 0.773438 -0.1875\nv -0.296875 0.777891 -0.1875\nv -0.314324 0.78125 -0.1875\nv -0.3125 0.783109 -0.1875\nv -0.303724 0.78125 -0.1875\nv -0.304688 0.781576 -0.1875\nv 0.0078125 -0.540916 -0.179688\nv 0.015625 -0.542657 -0.179688\nv 0.0234375 -0.543865 -0.179688\nv 0.03125 -0.544408 -0.179688\nv 0.0390625 -0.544697 -0.179688\nv 0.046875 -0.544863 -0.179688\nv 0.0546875 -0.544036 -0.179688\nv 0.0625 -0.54275 -0.179688\nv 0.0703125 -0.540956 -0.179688\nv 0.00167478 -0.539062 -0.179688\nv 0 -0.537771 -0.179688\nv 0.0078125 -0.539062 -0.173117\nv 0.0775176 -0.539062 -0.179688\nv 0.078125 -0.538825 -0.179688\nv 0.078125 -0.539062 -0.176616\nv 0.0859375 -0.537142 -0.179688\nv 0.09375 -0.536155 -0.179688\nv 0.101562 -0.534815 -0.179688\nv 0.109375 -0.533088 -0.179688\nv -0.00322896 -0.53125 -0.179688\nv 0.116309 -0.53125 -0.179688\nv 0.117188 -0.530958 -0.179688\nv 0.117188 -0.53125 -0.178981\nv 0.125 -0.528862 -0.179688\nv 0.125 -0.53125 -0.174764\nv 0.132812 -0.526872 -0.179688\nv 0.140625 -0.52479 -0.179688\nv -0.000891098 -0.523438 -0.179688\nv 0 -0.522213 -0.179688\nv 0 -0.523438 -0.172959\nv 0.147315 -0.523438 -0.179688\nv 0.148438 -0.522931 -0.179688\nv 0.148438 -0.523438 -0.179248\nv 0.15625 -0.51914 -0.179688\nv 0.15625 -0.523438 -0.175656\nv 0.00510044 -0.515625 -0.179688\nv 0.0078125 -0.512652 -0.179688\nv 0.158871 -0.515625 -0.179688\nv 0.164062 -0.515625 -0.17536\nv 0.0128288 -0.507812 -0.179688\nv 0.015625 -0.506029 -0.179688\nv 0.0234375 -0.501749 -0.179688\nv 0.140625 -0.500024 -0.179688\nv 0.148438 -0.502426 -0.179688\nv 0.159911 -0.507812 -0.179688\nv 0.15625 -0.505502 -0.179688\nv 0.164062 -0.507812 -0.175397\nv 0.0265524 -0.5 -0.179688\nv 0.03125 -0.497711 -0.179688\nv 0.0390625 -0.494679 -0.179688\nv 0.101562 -0.492713 -0.179688\nv 0.109375 -0.493741 -0.179688\nv 0.117188 -0.494981 -0.179688\nv 0.125 -0.496534 -0.179688\nv 0.14055 -0.5 -0.179688\nv 0.132812 -0.498228 -0.179688\nv 0.140625 -0.5 -0.17963\nv 0.148438 -0.5 -0.17349\nv 0.0464492 -0.492188 -0.179688\nv 0.046875 -0.492046 -0.179688\nv 0.046875 -0.492188 -0.177026\nv 0.0546875 -0.49052 -0.179688\nv 0.0625 -0.490084 -0.179688\nv 0.0703125 -0.490287 -0.179688\nv 0.078125 -0.491086 -0.179688\nv 0.0859375 -0.491791 -0.179688\nv 0.0957938 -0.492188 -0.179688\nv 0.09375 -0.492008 -0.179688\nv 0.101562 -0.492188 -0.17595\nv 0.453125 -0.0655689 -0.179688\nv 0.460938 -0.0666894 -0.179688\nv 0.46875 -0.0633484 -0.179688\nv 0.476562 -0.0627972 -0.179688\nv -0.289062 -0.057356 -0.179688\nv -0.28125 -0.0601589 -0.179688\nv -0.273438 -0.0590222 -0.179688\nv 0.448812 -0.0625 -0.179688\nv 0.477822 -0.0625 -0.179688\nv 0.484375 -0.0590603 -0.179688\nv -0.292061 -0.0546875 -0.179688\nv -0.296875 -0.0479421 -0.179688\nv -0.26922 -0.0546875 -0.179688\nv -0.265625 -0.0506199 -0.179688\nv 0.445975 -0.0546875 -0.179688\nv 0.445312 -0.0501976 -0.179688\nv 0.487354 -0.0546875 -0.179688\nv -0.297216 -0.046875 -0.179688\nv -0.263939 -0.046875 -0.179688\nv 0.444899 -0.046875 -0.179688\nv 0.490587 -0.046875 -0.179688\nv 0.492188 -0.0394125 -0.179688\nv -0.299082 -0.0390625 -0.179688\nv -0.261642 -0.0390625 -0.179688\nv 0.444578 -0.0390625 -0.179688\nv 0.49225 -0.0390625 -0.179688\nv -0.299963 -0.03125 -0.179688\nv -0.260474 -0.03125 -0.179688\nv 0.444454 -0.03125 -0.179688\nv 0.49419 -0.03125 -0.179688\nv -0.299634 -0.0234375 -0.179688\nv -0.259576 -0.0234375 -0.179688\nv 0.44316 -0.0234375 -0.179688\nv 0.496951 -0.0234375 -0.179688\nv -0.300742 -0.015625 -0.179688\nv -0.258862 -0.015625 -0.179688\nv 0.442094 -0.015625 -0.179688\nv 0.498731 -0.015625 -0.179688\nv -0.302642 -0.0078125 -0.179688\nv -0.259153 -0.0078125 -0.179688\nv 0.440193 -0.0078125 -0.179688\nv 0.49945 -0.0078125 -0.179688\nv 0.5 -0.0014076 -0.179688\nv -0.303955 0 -0.179688\nv -0.259176 0 -0.179688\nv 0.439581 0 -0.179688\nv 0.500091 0 -0.179688\nv 0.5 0.00297563 -0.179688\nv -0.303559 0.0078125 -0.179688\nv -0.258372 0.0078125 -0.179688\nv -0.257812 0.00976493 -0.179688\nv 0.440931 0.0078125 -0.179688\nv 0.499851 0.0078125 -0.179688\nv -0.30242 0.015625 -0.179688\nv -0.255375 0.015625 -0.179688\nv -0.25 0.0202145 -0.179688\nv -0.242188 0.0228105 -0.179688\nv -0.234375 0.0227469 -0.179688\nv 0.429688 0.0225238 -0.179688\nv 0.439675 0.015625 -0.179688\nv 0.4375 0.0176947 -0.179688\nv 0.499995 0.015625 -0.179688\nv 0.5 0.0159157 -0.179688\nv -0.301128 0.0234375 -0.179688\nv -0.232 0.0234375 -0.179688\nv -0.226562 0.0246306 -0.179688\nv -0.21875 0.0269666 -0.179688\nv -0.210938 0.0283957 -0.179688\nv -0.203125 0.0289223 -0.179688\nv -0.195312 0.0289515 -0.179688\nv -0.1875 0.0289122 -0.179688\nv -0.179688 0.0284526 -0.179688\nv -0.171875 0.0276492 -0.179688\nv -0.164062 0.0273816 -0.179688\nv -0.15625 0.0274113 -0.179688\nv -0.148438 0.0275316 -0.179688\nv -0.140625 0.0275303 -0.179688\nv -0.132812 0.0276092 -0.179688\nv -0.125 0.0277319 -0.179688\nv -0.117188 0.0276424 -0.179688\nv -0.109375 0.0273736 -0.179688\nv -0.101562 0.0272631 -0.179688\nv -0.09375 0.0271598 -0.179688\nv -0.0859375 0.0270406 -0.179688\nv -0.078125 0.0268378 -0.179688\nv -0.0703125 0.026498 -0.179688\nv -0.0625 0.026234 -0.179688\nv -0.0546875 0.0260755 -0.179688\nv -0.046875 0.0260274 -0.179688\nv -0.0390625 0.0260608 -0.179688\nv -0.03125 0.0261332 -0.179688\nv -0.0234375 0.0261661 -0.179688\nv -0.015625 0.0262089 -0.179688\nv -0.0078125 0.0262666 -0.179688\nv 0 0.0262034 -0.179688\nv 0.0078125 0.0261231 -0.179688\nv 0.015625 0.0260796 -0.179688\nv 0.0234375 0.0259925 -0.179688\nv 0.03125 0.0259316 -0.179688\nv 0.0390625 0.0258611 -0.179688\nv 0.046875 0.0258027 -0.179688\nv 0.0546875 0.0257491 -0.179688\nv 0.0625 0.0256641 -0.179688\nv 0.0703125 0.0255607 -0.179688\nv 0.078125 0.0254764 -0.179688\nv 0.0859375 0.0254446 -0.179688\nv 0.09375 0.0253743 -0.179688\nv 0.101562 0.0252701 -0.179688\nv 0.109375 0.0251897 -0.179688\nv 0.117188 0.0250591 -0.179688\nv 0.125 0.0249676 -0.179688\nv 0.132812 0.024921 -0.179688\nv 0.140625 0.0248071 -0.179688\nv 0.148438 0.024664 -0.179688\nv 0.15625 0.024496 -0.179688\nv 0.164062 0.0244065 -0.179688\nv 0.171875 0.0243515 -0.179688\nv 0.179688 0.0243171 -0.179688\nv 0.1875 0.0242792 -0.179688\nv 0.195312 0.0243132 -0.179688\nv 0.203125 0.0243373 -0.179688\nv 0.210938 0.0244609 -0.179688\nv 0.21875 0.0245752 -0.179688\nv 0.226562 0.024685 -0.179688\nv 0.234375 0.0247766 -0.179688\nv 0.242188 0.0248569 -0.179688\nv 0.25 0.0249234 -0.179688\nv 0.257812 0.0250653 -0.179688\nv 0.265625 0.0252116 -0.179688\nv 0.273438 0.0253836 -0.179688\nv 0.28125 0.0255318 -0.179688\nv 0.289062 0.0256057 -0.179688\nv 0.296875 0.0256585 -0.179688\nv 0.304688 0.025789 -0.179688\nv 0.3125 0.0260377 -0.179688\nv 0.320312 0.0261518 -0.179688\nv 0.328125 0.0261768 -0.179688\nv 0.335938 0.0262856 -0.179688\nv 0.34375 0.0264756 -0.179688\nv 0.351562 0.0266249 -0.179688\nv 0.359375 0.026681 -0.179688\nv 0.367188 0.0268325 -0.179688\nv 0.375 0.0270802 -0.179688\nv 0.382812 0.0271399 -0.179688\nv 0.390625 0.0268738 -0.179688\nv 0.398438 0.0265543 -0.179688\nv 0.40625 0.0260026 -0.179688\nv 0.414062 0.0251376 -0.179688\nv 0.425861 0.0234375 -0.179688\nv 0.421875 0.0241024 -0.179688\nv 0.500127 0.0234375 -0.179688\nv 0.5 0.0239111 -0.179688\nv -0.299899 0.03125 -0.179688\nv 0.497453 0.03125 -0.179688\nv -0.298794 0.0390625 -0.179688\nv -0.296875 0.0449624 -0.179688\nv 0.494898 0.0390625 -0.179688\nv -0.296111 0.046875 -0.179688\nv 0.4925 0.046875 -0.179688\nv 0.492188 0.047701 -0.179688\nv -0.293754 0.0546875 -0.179688\nv 0.476562 0.0615828 -0.179688\nv 0.488853 0.0546875 -0.179688\nv 0.484375 0.0576345 -0.179688\nv -0.290564 0.0625 -0.179688\nv -0.289062 0.0648889 -0.179688\nv -0.28125 0.0691978 -0.179688\nv 0.445312 0.0689666 -0.179688\nv 0.453125 0.0669835 -0.179688\nv 0.460938 0.0658423 -0.179688\nv 0.474288 0.0625 -0.179688\nv 0.46875 0.0647865 -0.179688\nv -0.279208 0.0703125 -0.179688\nv -0.273438 0.0742831 -0.179688\nv -0.265625 0.0759897 -0.179688\nv -0.21875 0.076454 -0.179688\nv -0.210938 0.0750324 -0.179688\nv -0.203125 0.074697 -0.179688\nv -0.195312 0.0749663 -0.179688\nv -0.1875 0.0753705 -0.179688\nv -0.179688 0.0755465 -0.179688\nv -0.171875 0.0753672 -0.179688\nv -0.164062 0.0753921 -0.179688\nv -0.15625 0.0754302 -0.179688\nv -0.148438 0.0755269 -0.179688\nv -0.140625 0.0753897 -0.179688\nv -0.132812 0.0753028 -0.179688\nv -0.125 0.0750918 -0.179688\nv -0.117188 0.0748043 -0.179688\nv -0.109375 0.0746402 -0.179688\nv -0.101562 0.0744898 -0.179688\nv -0.09375 0.0744438 -0.179688\nv -0.0859375 0.0744579 -0.179688\nv -0.078125 0.0744592 -0.179688\nv -0.0703125 0.0744799 -0.179688\nv -0.0625 0.0744133 -0.179688\nv -0.0546875 0.0742794 -0.179688\nv -0.046875 0.0741493 -0.179688\nv -0.0390625 0.0739886 -0.179688\nv -0.03125 0.0738626 -0.179688\nv -0.0234375 0.0737625 -0.179688\nv -0.015625 0.0736755 -0.179688\nv -0.0078125 0.0736609 -0.179688\nv 0 0.0735524 -0.179688\nv 0.0078125 0.0734104 -0.179688\nv 0.015625 0.0733207 -0.179688\nv 0.0234375 0.0732546 -0.179688\nv 0.03125 0.0731462 -0.179688\nv 0.0390625 0.0730386 -0.179688\nv 0.046875 0.0729641 -0.179688\nv 0.0546875 0.0728767 -0.179688\nv 0.0625 0.0727748 -0.179688\nv 0.0703125 0.072707 -0.179688\nv 0.078125 0.0726687 -0.179688\nv 0.0859375 0.0726389 -0.179688\nv 0.09375 0.0725492 -0.179688\nv 0.101562 0.0725065 -0.179688\nv 0.109375 0.0724793 -0.179688\nv 0.117188 0.0724605 -0.179688\nv 0.125 0.0724478 -0.179688\nv 0.132812 0.0724967 -0.179688\nv 0.140625 0.0725613 -0.179688\nv 0.148438 0.0725304 -0.179688\nv 0.15625 0.0723924 -0.179688\nv 0.164062 0.0722612 -0.179688\nv 0.171875 0.0721451 -0.179688\nv 0.179688 0.0720462 -0.179688\nv 0.1875 0.0719207 -0.179688\nv 0.195312 0.0718591 -0.179688\nv 0.203125 0.0718011 -0.179688\nv 0.210938 0.0718355 -0.179688\nv 0.21875 0.0719322 -0.179688\nv 0.226562 0.0720511 -0.179688\nv 0.234375 0.0721642 -0.179688\nv 0.242188 0.0722614 -0.179688\nv 0.25 0.0723501 -0.179688\nv 0.257812 0.0724982 -0.179688\nv 0.265625 0.0726221 -0.179688\nv 0.273438 0.072745 -0.179688\nv 0.28125 0.0728758 -0.179688\nv 0.289062 0.0730003 -0.179688\nv 0.296875 0.0731116 -0.179688\nv 0.304688 0.073186 -0.179688\nv 0.3125 0.0732412 -0.179688\nv 0.320312 0.0732592 -0.179688\nv 0.328125 0.0732993 -0.179688\nv 0.335938 0.0732855 -0.179688\nv 0.34375 0.0732596 -0.179688\nv 0.351562 0.0732356 -0.179688\nv 0.359375 0.0730898 -0.179688\nv 0.367188 0.0728987 -0.179688\nv 0.375 0.0727024 -0.179688\nv 0.382812 0.0723401 -0.179688\nv 0.390625 0.0720047 -0.179688\nv 0.398438 0.0718896 -0.179688\nv 0.40625 0.0717803 -0.179688\nv 0.414062 0.0716978 -0.179688\nv 0.421875 0.0715204 -0.179688\nv 0.429688 0.0712056 -0.179688\nv 0.439263 0.0703125 -0.179688\nv 0.4375 0.0706873 -0.179688\nv -0.263126 0.078125 -0.179688\nv -0.257812 0.0844467 -0.179688\nv -0.234375 0.0819076 -0.179688\nv -0.226219 0.078125 -0.179688\nv -0.226562 0.0782317 -0.179688\nv -0.253597 0.0859375 -0.179688\nv -0.257812 0.0859375 -0.17212\nv -0.25 0.0869392 -0.179688\nv -0.240831 0.0859375 -0.179688\nv -0.242188 0.0865941 -0.179688\nv -0.289062 0.171718 -0.179688\nv -0.28125 0.167595 -0.179688\nv -0.273438 0.166715 -0.179688\nv -0.265625 0.167837 -0.179688\nv -0.257812 0.170431 -0.179688\nv -0.289242 0.171875 -0.179688\nv -0.289062 0.171875 -0.17358\nv -0.256402 0.171875 -0.179688\nv -0.25 0.179024 -0.179688\nv -0.292543 0.179688 -0.179688\nv -0.249545 0.179688 -0.179688\nv -0.29575 0.1875 -0.179688\nv -0.296875 0.19055 -0.179688\nv -0.244126 0.1875 -0.179688\nv -0.298411 0.195312 -0.179688\nv -0.242343 0.195312 -0.179688\nv -0.242188 0.196181 -0.179688\nv -0.300411 0.203125 -0.179688\nv -0.241072 0.203125 -0.179688\nv -0.301305 0.210938 -0.179688\nv -0.240044 0.210938 -0.179688\nv -0.301242 0.21875 -0.179688\nv -0.239494 0.21875 -0.179688\nv -0.301177 0.226562 -0.179688\nv -0.239028 0.226562 -0.179688\nv -0.301168 0.234375 -0.179688\nv -0.239039 0.234375 -0.179688\nv -0.301131 0.242188 -0.179688\nv -0.23989 0.242188 -0.179688\nv -0.300901 0.25 -0.179688\nv -0.240924 0.25 -0.179688\nv -0.242188 0.256365 -0.179688\nv -0.300161 0.257812 -0.179688\nv -0.242476 0.257812 -0.179688\nv -0.299374 0.265625 -0.179688\nv -0.243755 0.265625 -0.179688\nv -0.298396 0.273438 -0.179688\nv -0.296875 0.280924 -0.179688\nv -0.244639 0.273438 -0.179688\nv -0.296806 0.28125 -0.179688\nv -0.296875 0.28125 -0.176645\nv -0.245826 0.28125 -0.179688\nv -0.294821 0.289062 -0.179688\nv -0.247451 0.289062 -0.179688\nv -0.25 0.296097 -0.179688\nv -0.292465 0.296875 -0.179688\nv -0.289062 0.30452 -0.179688\nv -0.250309 0.296875 -0.179688\nv -0.25 0.296875 -0.176369\nv -0.288963 0.304688 -0.179688\nv -0.289062 0.304688 -0.177972\nv -0.253416 0.304688 -0.179688\nv -0.285929 0.3125 -0.179688\nv -0.265625 0.31898 -0.179688\nv -0.257286 0.3125 -0.179688\nv -0.257812 0.313007 -0.179688\nv -0.281598 0.320312 -0.179688\nv -0.28125 0.320807 -0.179688\nv -0.267977 0.320312 -0.179688\nv -0.273438 0.323965 -0.179688\nv -0.289062 0.623444 -0.179688\nv -0.304688 0.630948 -0.179688\nv -0.291933 0.625 -0.179688\nv -0.296875 0.628188 -0.179688\nv -0.296875 0.625 -0.173581\nv -0.28394 0.625 -0.179688\nv -0.28125 0.62638 -0.179688\nv -0.28125 0.625 -0.178015\nv -0.30706 0.632812 -0.179688\nv -0.27623 0.632812 -0.179688\nv -0.31248 0.640625 -0.179688\nv -0.3125 0.640676 -0.179688\nv -0.3125 0.640625 -0.17942\nv -0.275034 0.640625 -0.179688\nv -0.273438 0.640625 -0.172723\nv -0.31519 0.648438 -0.179688\nv -0.274537 0.648438 -0.179688\nv -0.273438 0.648438 -0.173276\nv -0.317061 0.65625 -0.179688\nv -0.274268 0.65625 -0.179688\nv -0.318438 0.664062 -0.179688\nv -0.274067 0.664062 -0.179688\nv -0.273438 0.664062 -0.172909\nv -0.319616 0.671875 -0.179688\nv -0.273628 0.671875 -0.179688\nv -0.273438 0.671875 -0.176229\nv -0.320029 0.679688 -0.179688\nv -0.273765 0.679688 -0.179688\nv -0.3202 0.6875 -0.179688\nv -0.320312 0.6875 -0.172321\nv -0.274016 0.6875 -0.179688\nv -0.320165 0.695312 -0.179688\nv -0.320312 0.695312 -0.174932\nv -0.274497 0.695312 -0.179688\nv -0.320113 0.703125 -0.179688\nv -0.320312 0.703125 -0.174161\nv -0.275026 0.703125 -0.179688\nv -0.320036 0.710938 -0.179688\nv -0.320312 0.710938 -0.173086\nv -0.275813 0.710938 -0.179688\nv -0.320241 0.71875 -0.179688\nv -0.320312 0.720078 -0.179688\nv -0.320312 0.71875 -0.178338\nv -0.276906 0.71875 -0.179688\nv -0.320642 0.726562 -0.179688\nv -0.278752 0.726562 -0.179688\nv -0.321056 0.734375 -0.179688\nv -0.28032 0.734375 -0.179688\nv -0.28125 0.739354 -0.179688\nv -0.321758 0.742188 -0.179688\nv -0.281737 0.742188 -0.179688\nv -0.32204 0.75 -0.179688\nv -0.283121 0.75 -0.179688\nv -0.322592 0.757812 -0.179688\nv -0.285151 0.757812 -0.179688\nv -0.322787 0.765625 -0.179688\nv -0.287659 0.765625 -0.179688\nv -0.289062 0.76853 -0.179688\nv -0.321562 0.773438 -0.179688\nv -0.320312 0.776026 -0.179688\nv -0.292273 0.773438 -0.179688\nv -0.296875 0.778268 -0.179688\nv -0.316263 0.78125 -0.179688\nv -0.3125 0.784432 -0.179688\nv -0.301499 0.78125 -0.179688\nv -0.304688 0.782651 -0.179688\nv 0.015625 -0.540689 -0.171875\nv 0.0234375 -0.541995 -0.171875\nv 0.03125 -0.542593 -0.171875\nv 0.0390625 -0.543043 -0.171875\nv 0.046875 -0.543041 -0.171875\nv 0.0546875 -0.542926 -0.171875\nv 0.0625 -0.541574 -0.171875\nv 0.0703125 -0.540041 -0.171875\nv 0.078125 -0.539325 -0.171875\nv 0 -0.533381 -0.171875\nv 0.00913116 -0.539062 -0.171875\nv 0.0078125 -0.538415 -0.171875\nv 0.015625 -0.539062 -0.166304\nv 0.0821144 -0.539062 -0.171875\nv 0.0859375 -0.538687 -0.171875\nv 0.0859375 -0.539062 -0.169672\nv 0.09375 -0.537643 -0.171875\nv 0.09375 -0.539062 -0.164449\nv 0.101562 -0.536341 -0.171875\nv 0.109375 -0.534893 -0.171875\nv 0.117188 -0.533755 -0.171875\nv 0.125 -0.532505 -0.171875\nv -0.00162008 -0.53125 -0.171875\nv 0 -0.524507 -0.171875\nv 0 -0.53125 -0.168206\nv 0.131871 -0.53125 -0.171875\nv 0.132812 -0.531051 -0.171875\nv 0.132812 -0.53125 -0.171417\nv 0.140625 -0.529152 -0.171875\nv 0.140625 -0.53125 -0.167039\nv 0.148438 -0.527403 -0.171875\nv 0.15625 -0.525218 -0.171875\nv 0.000218667 -0.523438 -0.171875\nv 0.162782 -0.523438 -0.171875\nv 0.164062 -0.522473 -0.171875\nv 0.164062 -0.523438 -0.170001\nv 0.00693769 -0.515625 -0.171875\nv 0.0078125 -0.514536 -0.171875\nv 0.0078125 -0.515625 -0.167137\nv 0.167569 -0.515625 -0.171875\nv 0.0138896 -0.507812 -0.171875\nv 0.015625 -0.506722 -0.171875\nv 0.0234375 -0.502192 -0.171875\nv 0.15625 -0.502279 -0.171875\nv 0.166937 -0.507812 -0.171875\nv 0.164062 -0.505836 -0.171875\nv 0.027337 -0.5 -0.171875\nv 0.03125 -0.498151 -0.171875\nv 0.0390625 -0.49488 -0.171875\nv 0.046875 -0.492495 -0.171875\nv 0.109375 -0.492672 -0.171875\nv 0.117188 -0.493567 -0.171875\nv 0.125 -0.494527 -0.171875\nv 0.132812 -0.496049 -0.171875\nv 0.140625 -0.497892 -0.171875\nv 0.150013 -0.5 -0.171875\nv 0.148438 -0.4996 -0.171875\nv 0.0483336 -0.492188 -0.171875\nv 0.0546875 -0.49084 -0.171875\nv 0.0625 -0.490628 -0.171875\nv 0.0703125 -0.491135 -0.171875\nv 0.078125 -0.490736 -0.171875\nv 0.0859375 -0.490691 -0.171875\nv 0.09375 -0.490948 -0.171875\nv 0.105798 -0.492188 -0.171875\nv 0.101562 -0.491628 -0.171875\nv 0.109375 -0.492188 -0.169517\nv 0.117188 -0.492188 -0.164749\nv 0.453125 -0.0654622 -0.171875\nv 0.460938 -0.0667814 -0.171875\nv 0.46875 -0.063496 -0.171875\nv 0.476562 -0.062965 -0.171875\nv -0.289062 -0.0577444 -0.171875\nv -0.28125 -0.0606188 -0.171875\nv -0.273438 -0.0592567 -0.171875\nv 0.448937 -0.0625 -0.171875\nv 0.478492 -0.0625 -0.171875\nv 0.484375 -0.0594467 -0.171875\nv -0.292466 -0.0546875 -0.171875\nv -0.296875 -0.0483359 -0.171875\nv -0.26936 -0.0546875 -0.171875\nv -0.265625 -0.0500298 -0.171875\nv 0.44585 -0.0546875 -0.171875\nv 0.445312 -0.0509937 -0.171875\nv 0.487651 -0.0546875 -0.171875\nv -0.297329 -0.046875 -0.171875\nv -0.264174 -0.046875 -0.171875\nv 0.444828 -0.046875 -0.171875\nv 0.490792 -0.046875 -0.171875\nv 0.492188 -0.0401188 -0.171875\nv -0.299119 -0.0390625 -0.171875\nv -0.261725 -0.0390625 -0.171875\nv 0.444617 -0.0390625 -0.171875\nv 0.49237 -0.0390625 -0.171875\nv -0.299904 -0.03125 -0.171875\nv -0.260611 -0.03125 -0.171875\nv 0.444355 -0.03125 -0.171875\nv 0.494321 -0.03125 -0.171875\nv -0.299609 -0.0234375 -0.171875\nv -0.259759 -0.0234375 -0.171875\nv 0.443045 -0.0234375 -0.171875\nv 0.497101 -0.0234375 -0.171875\nv -0.300724 -0.015625 -0.171875\nv -0.258981 -0.015625 -0.171875\nv 0.44199 -0.015625 -0.171875\nv 0.498862 -0.015625 -0.171875\nv -0.302638 -0.0078125 -0.171875\nv -0.259333 -0.0078125 -0.171875\nv 0.440184 -0.0078125 -0.171875\nv 0.499511 -0.0078125 -0.171875\nv 0.5 -0.00159275 -0.171875\nv -0.304232 0 -0.171875\nv -0.259328 0 -0.171875\nv 0.439578 0 -0.171875\nv 0.500095 0 -0.171875\nv 0.5 0.00414358 -0.171875\nv -0.303727 0.0078125 -0.171875\nv -0.258522 0.0078125 -0.171875\nv -0.257812 0.0102165 -0.171875\nv 0.440982 0.0078125 -0.171875\nv 0.499915 0.0078125 -0.171875\nv 0.5 0.0078125 -0.164106\nv -0.302554 0.015625 -0.171875\nv -0.255542 0.015625 -0.171875\nv -0.25 0.0201923 -0.171875\nv -0.242188 0.0224884 -0.171875\nv -0.234375 0.0226425 -0.171875\nv 0.429688 0.0223036 -0.171875\nv 0.439562 0.015625 -0.171875\nv 0.4375 0.0175103 -0.171875\nv 0.499969 0.015625 -0.171875\nv 0.5 0.0172892 -0.171875\nv -0.301271 0.0234375 -0.171875\nv -0.231749 0.0234375 -0.171875\nv -0.226562 0.0246232 -0.171875\nv -0.21875 0.0269323 -0.171875\nv -0.210938 0.0283232 -0.171875\nv -0.203125 0.0286879 -0.171875\nv -0.195312 0.0286974 -0.171875\nv -0.1875 0.0287715 -0.171875\nv -0.179688 0.0283387 -0.171875\nv -0.171875 0.0276553 -0.171875\nv -0.164062 0.0274745 -0.171875\nv -0.15625 0.0275658 -0.171875\nv -0.148438 0.0276253 -0.171875\nv -0.140625 0.0275945 -0.171875\nv -0.132812 0.0276387 -0.171875\nv -0.125 0.0277029 -0.171875\nv -0.117188 0.0276061 -0.171875\nv -0.109375 0.0274737 -0.171875\nv -0.101562 0.0273878 -0.171875\nv -0.09375 0.0272566 -0.171875\nv -0.0859375 0.0270776 -0.171875\nv -0.078125 0.0268357 -0.171875\nv -0.0703125 0.0264874 -0.171875\nv -0.0625 0.0261989 -0.171875\nv -0.0546875 0.026028 -0.171875\nv -0.046875 0.0259776 -0.171875\nv -0.0390625 0.0259897 -0.171875\nv -0.03125 0.0261046 -0.171875\nv -0.0234375 0.0261971 -0.171875\nv -0.015625 0.0262647 -0.171875\nv -0.0078125 0.0263129 -0.171875\nv 0 0.026258 -0.171875\nv 0.0078125 0.0261648 -0.171875\nv 0.015625 0.0261112 -0.171875\nv 0.0234375 0.0260551 -0.171875\nv 0.03125 0.0260027 -0.171875\nv 0.0390625 0.0259351 -0.171875\nv 0.046875 0.0258821 -0.171875\nv 0.0546875 0.0258327 -0.171875\nv 0.0625 0.0257445 -0.171875\nv 0.0703125 0.0256656 -0.171875\nv 0.078125 0.025587 -0.171875\nv 0.0859375 0.0255391 -0.171875\nv 0.09375 0.0254662 -0.171875\nv 0.101562 0.0253789 -0.171875\nv 0.109375 0.025265 -0.171875\nv 0.117188 0.0251432 -0.171875\nv 0.125 0.0250945 -0.171875\nv 0.132812 0.0250232 -0.171875\nv 0.140625 0.0248889 -0.171875\nv 0.148438 0.0247084 -0.171875\nv 0.15625 0.0245222 -0.171875\nv 0.164062 0.0243699 -0.171875\nv 0.171875 0.0242416 -0.171875\nv 0.179688 0.0241925 -0.171875\nv 0.1875 0.0241738 -0.171875\nv 0.195312 0.0241948 -0.171875\nv 0.203125 0.024256 -0.171875\nv 0.210938 0.0243443 -0.171875\nv 0.21875 0.0244339 -0.171875\nv 0.226562 0.0245602 -0.171875\nv 0.234375 0.0246779 -0.171875\nv 0.242188 0.0247321 -0.171875\nv 0.25 0.0248004 -0.171875\nv 0.257812 0.0249342 -0.171875\nv 0.265625 0.0250747 -0.171875\nv 0.273438 0.0252318 -0.171875\nv 0.28125 0.0253904 -0.171875\nv 0.289062 0.0254752 -0.171875\nv 0.296875 0.0255422 -0.171875\nv 0.304688 0.0257204 -0.171875\nv 0.3125 0.025967 -0.171875\nv 0.320312 0.0261671 -0.171875\nv 0.328125 0.0262061 -0.171875\nv 0.335938 0.0262955 -0.171875\nv 0.34375 0.0264812 -0.171875\nv 0.351562 0.0266299 -0.171875\nv 0.359375 0.0267012 -0.171875\nv 0.367188 0.0267695 -0.171875\nv 0.375 0.0270015 -0.171875\nv 0.382812 0.0270502 -0.171875\nv 0.390625 0.0267379 -0.171875\nv 0.398438 0.0264119 -0.171875\nv 0.40625 0.0259439 -0.171875\nv 0.414062 0.0251203 -0.171875\nv 0.425067 0.0234375 -0.171875\nv 0.421875 0.0240043 -0.171875\nv 0.500102 0.0234375 -0.171875\nv 0.5 0.0238151 -0.171875\nv -0.300045 0.03125 -0.171875\nv 0.497401 0.03125 -0.171875\nv -0.298955 0.0390625 -0.171875\nv -0.296875 0.0455122 -0.171875\nv 0.494866 0.0390625 -0.171875\nv -0.296333 0.046875 -0.171875\nv 0.492677 0.046875 -0.171875\nv 0.492188 0.0482156 -0.171875\nv -0.293936 0.0546875 -0.171875\nv 0.476562 0.0616801 -0.171875\nv 0.489139 0.0546875 -0.171875\nv 0.484375 0.0577823 -0.171875\nv -0.290535 0.0625 -0.171875\nv -0.289062 0.065083 -0.171875\nv -0.28125 0.0698626 -0.171875\nv 0.445312 0.0691599 -0.171875\nv 0.453125 0.0671222 -0.171875\nv 0.460938 0.0659873 -0.171875\nv 0.474498 0.0625 -0.171875\nv 0.46875 0.0648595 -0.171875\nv -0.280447 0.0703125 -0.171875\nv -0.28125 0.0703125 -0.167187\nv -0.273438 0.0752051 -0.171875\nv -0.265625 0.077073 -0.171875\nv -0.21875 0.0763234 -0.171875\nv -0.210938 0.0749319 -0.171875\nv -0.203125 0.0746192 -0.171875\nv -0.195312 0.0748355 -0.171875\nv -0.1875 0.0751901 -0.171875\nv -0.179688 0.0754527 -0.171875\nv -0.171875 0.0753624 -0.171875\nv -0.164062 0.0753697 -0.171875\nv -0.15625 0.075388 -0.171875\nv -0.148438 0.0755068 -0.171875\nv -0.140625 0.0753454 -0.171875\nv -0.132812 0.075241 -0.171875\nv -0.125 0.0750669 -0.171875\nv -0.117188 0.074887 -0.171875\nv -0.109375 0.0746788 -0.171875\nv -0.101562 0.074545 -0.171875\nv -0.09375 0.0745084 -0.171875\nv -0.0859375 0.0745138 -0.171875\nv -0.078125 0.0745326 -0.171875\nv -0.0703125 0.0745153 -0.171875\nv -0.0625 0.0744221 -0.171875\nv -0.0546875 0.0742686 -0.171875\nv -0.046875 0.0741208 -0.171875\nv -0.0390625 0.0739272 -0.171875\nv -0.03125 0.0737836 -0.171875\nv -0.0234375 0.0736544 -0.171875\nv -0.015625 0.0735318 -0.171875\nv -0.0078125 0.0734821 -0.171875\nv 0 0.0734307 -0.171875\nv 0.0078125 0.0732906 -0.171875\nv 0.015625 0.0732164 -0.171875\nv 0.0234375 0.0731717 -0.171875\nv 0.03125 0.0731418 -0.171875\nv 0.0390625 0.0730495 -0.171875\nv 0.046875 0.0729897 -0.171875\nv 0.0546875 0.0729223 -0.171875\nv 0.0625 0.0728141 -0.171875\nv 0.0703125 0.0727267 -0.171875\nv 0.078125 0.0727025 -0.171875\nv 0.0859375 0.0726556 -0.171875\nv 0.09375 0.0726216 -0.171875\nv 0.101562 0.0725942 -0.171875\nv 0.109375 0.0725578 -0.171875\nv 0.117188 0.0725265 -0.171875\nv 0.125 0.0725105 -0.171875\nv 0.132812 0.0725464 -0.171875\nv 0.140625 0.07256 -0.171875\nv 0.148438 0.0724606 -0.171875\nv 0.15625 0.0723838 -0.171875\nv 0.164062 0.0722635 -0.171875\nv 0.171875 0.0721362 -0.171875\nv 0.179688 0.0720271 -0.171875\nv 0.1875 0.0719005 -0.171875\nv 0.195312 0.0718155 -0.171875\nv 0.203125 0.0718213 -0.171875\nv 0.210938 0.0718475 -0.171875\nv 0.21875 0.0718684 -0.171875\nv 0.226562 0.0719413 -0.171875\nv 0.234375 0.0720693 -0.171875\nv 0.242188 0.07218 -0.171875\nv 0.25 0.0723094 -0.171875\nv 0.257812 0.0724724 -0.171875\nv 0.265625 0.0725996 -0.171875\nv 0.273438 0.0727458 -0.171875\nv 0.28125 0.072873 -0.171875\nv 0.289062 0.0730075 -0.171875\nv 0.296875 0.0731305 -0.171875\nv 0.304688 0.0732194 -0.171875\nv 0.3125 0.0732681 -0.171875\nv 0.320312 0.0732793 -0.171875\nv 0.328125 0.0733418 -0.171875\nv 0.335938 0.0733735 -0.171875\nv 0.34375 0.0733674 -0.171875\nv 0.351562 0.0733493 -0.171875\nv 0.359375 0.0732405 -0.171875\nv 0.367188 0.0730606 -0.171875\nv 0.375 0.072884 -0.171875\nv 0.382812 0.072534 -0.171875\nv 0.390625 0.0722195 -0.171875\nv 0.398438 0.0721083 -0.171875\nv 0.40625 0.071985 -0.171875\nv 0.414062 0.0718839 -0.171875\nv 0.421875 0.0717408 -0.171875\nv 0.429688 0.0714524 -0.171875\nv 0.440257 0.0703125 -0.171875\nv 0.4375 0.0709065 -0.171875\nv -0.264507 0.078125 -0.171875\nv -0.265625 0.078125 -0.166336\nv -0.234375 0.0821371 -0.171875\nv -0.226345 0.078125 -0.171875\nv -0.226562 0.0781973 -0.171875\nv -0.257877 0.0859375 -0.171875\nv -0.257812 0.0859961 -0.171875\nv -0.25 0.0880708 -0.171875\nv -0.240632 0.0859375 -0.171875\nv -0.242188 0.0867516 -0.171875\nv -0.28125 0.167342 -0.171875\nv -0.273438 0.166364 -0.171875\nv -0.265625 0.167353 -0.171875\nv -0.257812 0.169629 -0.171875\nv -0.289006 0.171875 -0.171875\nv -0.289062 0.17199 -0.171875\nv -0.255662 0.171875 -0.171875\nv -0.25 0.178466 -0.171875\nv -0.292443 0.179688 -0.171875\nv -0.249175 0.179688 -0.171875\nv -0.29593 0.1875 -0.171875\nv -0.296875 0.190116 -0.171875\nv -0.2445 0.1875 -0.171875\nv -0.298535 0.195312 -0.171875\nv -0.242701 0.195312 -0.171875\nv -0.242188 0.197778 -0.171875\nv -0.300509 0.203125 -0.171875\nv -0.241149 0.203125 -0.171875\nv -0.301292 0.210938 -0.171875\nv -0.239982 0.210938 -0.171875\nv -0.301207 0.21875 -0.171875\nv -0.239479 0.21875 -0.171875\nv -0.300997 0.226562 -0.171875\nv -0.239051 0.226562 -0.171875\nv -0.300992 0.234375 -0.171875\nv -0.239202 0.234375 -0.171875\nv -0.300916 0.242188 -0.171875\nv -0.239997 0.242188 -0.171875\nv -0.300704 0.25 -0.171875\nv -0.241054 0.25 -0.171875\nv -0.242188 0.256248 -0.171875\nv -0.300093 0.257812 -0.171875\nv -0.242477 0.257812 -0.171875\nv -0.299401 0.265625 -0.171875\nv -0.243813 0.265625 -0.171875\nv -0.29858 0.273438 -0.171875\nv -0.2446 0.273438 -0.171875\nv -0.296981 0.28125 -0.171875\nv -0.296875 0.281679 -0.171875\nv -0.245684 0.28125 -0.171875\nv -0.29506 0.289062 -0.171875\nv -0.247164 0.289062 -0.171875\nv -0.292676 0.296875 -0.171875\nv -0.249604 0.296875 -0.171875\nv -0.25 0.29778 -0.171875\nv -0.289369 0.304688 -0.171875\nv -0.289062 0.305619 -0.171875\nv -0.253134 0.304688 -0.171875\nv -0.286065 0.3125 -0.171875\nv -0.265625 0.320137 -0.171875\nv -0.256243 0.3125 -0.171875\nv -0.257812 0.31452 -0.171875\nv -0.282529 0.320312 -0.171875\nv -0.28125 0.322357 -0.171875\nv -0.265998 0.320312 -0.171875\nv -0.273438 0.325339 -0.171875\nv -0.265625 0.320312 -0.171144\nv -0.273438 0.328125 -0.165018\nv -0.296875 0.624258 -0.171875\nv -0.289062 0.619946 -0.171875\nv -0.289062 0.617188 -0.1682\nv -0.28125 0.621429 -0.171875\nv -0.28125 0.617188 -0.167104\nv -0.299005 0.625 -0.171875\nv -0.304688 0.627986 -0.171875\nv -0.304688 0.625 -0.166465\nv -0.275729 0.625 -0.171875\nv -0.273438 0.625 -0.166916\nv -0.309186 0.632812 -0.171875\nv -0.3125 0.639476 -0.171875\nv -0.273626 0.632812 -0.171875\nv -0.273438 0.636489 -0.171875\nv -0.273438 0.632812 -0.171147\nv -0.313016 0.640625 -0.171875\nv -0.273229 0.640625 -0.171875\nv -0.315503 0.648438 -0.171875\nv -0.273174 0.648438 -0.171875\nv -0.273438 0.655642 -0.171875\nv -0.317381 0.65625 -0.171875\nv -0.273457 0.65625 -0.171875\nv -0.273438 0.65755 -0.171875\nv -0.273438 0.65625 -0.171682\nv -0.318646 0.664062 -0.171875\nv -0.273333 0.664062 -0.171875\nv -0.319648 0.671875 -0.171875\nv -0.273185 0.671875 -0.171875\nv -0.273438 0.678403 -0.171875\nv -0.320072 0.679688 -0.171875\nv -0.320312 0.687286 -0.171875\nv -0.273484 0.679688 -0.171875\nv -0.273438 0.679688 -0.166763\nv -0.320319 0.6875 -0.171875\nv -0.273921 0.6875 -0.171875\nv -0.320402 0.695312 -0.171875\nv -0.274456 0.695312 -0.171875\nv -0.320392 0.703125 -0.171875\nv -0.275011 0.703125 -0.171875\nv -0.320362 0.710938 -0.171875\nv -0.275867 0.710938 -0.171875\nv -0.320638 0.71875 -0.171875\nv -0.277041 0.71875 -0.171875\nv -0.321016 0.726562 -0.171875\nv -0.278815 0.726562 -0.171875\nv -0.321625 0.734375 -0.171875\nv -0.280235 0.734375 -0.171875\nv -0.28125 0.740007 -0.171875\nv -0.322318 0.742188 -0.171875\nv -0.281619 0.742188 -0.171875\nv -0.322836 0.75 -0.171875\nv -0.283028 0.75 -0.171875\nv -0.323237 0.757812 -0.171875\nv -0.284883 0.757812 -0.171875\nv -0.32336 0.765625 -0.171875\nv -0.287218 0.765625 -0.171875\nv -0.289062 0.769422 -0.171875\nv -0.322552 0.773438 -0.171875\nv -0.320312 0.778253 -0.171875\nv -0.291923 0.773438 -0.171875\nv -0.296875 0.778226 -0.171875\nv -0.317996 0.78125 -0.171875\nv -0.3125 0.785413 -0.171875\nv -0.301368 0.78125 -0.171875\nv -0.304688 0.782993 -0.171875\nv 0.0234375 -0.5398 -0.164062\nv 0.03125 -0.540375 -0.164062\nv 0.0390625 -0.540563 -0.164062\nv 0.046875 -0.540772 -0.164062\nv 0.0546875 -0.540739 -0.164062\nv 0.0625 -0.541253 -0.164062\nv 0.0703125 -0.540757 -0.164062\nv 0.078125 -0.540113 -0.164062\nv 0.0859375 -0.539713 -0.164062\nv 0.09375 -0.539113 -0.164062\nv 0.0078125 -0.534287 -0.164062\nv 0.0190864 -0.539062 -0.164062\nv 0.015625 -0.537983 -0.164062\nv 0.0234375 -0.539062 -0.16185\nv 0.03125 -0.539062 -0.160244\nv 0.0390625 -0.539062 -0.158728\nv 0.0945784 -0.539062 -0.164062\nv 0.101562 -0.538408 -0.164062\nv 0.101562 -0.539062 -0.161911\nv 0.109375 -0.537614 -0.164062\nv 0.109375 -0.539062 -0.159645\nv 0.117188 -0.536722 -0.164062\nv 0.117188 -0.539062 -0.15687\nv 0.125 -0.535667 -0.164062\nv 0.132812 -0.534305 -0.164062\nv 0.140625 -0.532528 -0.164062\nv 0.00293373 -0.53125 -0.164062\nv 0.0078125 -0.53125 -0.157088\nv 0.145187 -0.53125 -0.164062\nv 0.148438 -0.530243 -0.164062\nv 0.148438 -0.53125 -0.160026\nv 0.15625 -0.52791 -0.164062\nv 0.164062 -0.524714 -0.164062\nv 0.00246078 -0.523438 -0.164062\nv 0.0078125 -0.516574 -0.164062\nv 0.166301 -0.523438 -0.164062\nv 0.0084735 -0.515625 -0.164062\nv 0.170578 -0.515625 -0.164062\nv 0.0143641 -0.507812 -0.164062\nv 0.015625 -0.50697 -0.164062\nv 0.0234375 -0.501618 -0.164062\nv 0.15625 -0.501306 -0.164062\nv 0.16964 -0.507812 -0.164062\nv 0.164062 -0.504625 -0.164062\nv 0.0262377 -0.5 -0.164062\nv 0.0234375 -0.5 -0.157768\nv 0.03125 -0.49744 -0.164062\nv 0.0390625 -0.494923 -0.164062\nv 0.046875 -0.493278 -0.164062\nv 0.125 -0.493206 -0.164062\nv 0.132812 -0.494873 -0.164062\nv 0.140625 -0.496694 -0.164062\nv 0.153067 -0.5 -0.164062\nv 0.148438 -0.498707 -0.164062\nv 0.0536597 -0.492188 -0.164062\nv 0.0546875 -0.492018 -0.164062\nv 0.0625 -0.49039 -0.164062\nv 0.0703125 -0.489708 -0.164062\nv 0.078125 -0.48951 -0.164062\nv 0.0859375 -0.489578 -0.164062\nv 0.09375 -0.489896 -0.164062\nv 0.101562 -0.490353 -0.164062\nv 0.109375 -0.491084 -0.164062\nv 0.118079 -0.492188 -0.164062\nv 0.117188 -0.492057 -0.164062\nv 0.125 -0.492188 -0.157639\nv 0.453125 -0.0654303 -0.164062\nv 0.460938 -0.0668943 -0.164062\nv 0.46875 -0.0636653 -0.164062\nv 0.476562 -0.0631768 -0.164062\nv -0.289062 -0.0582888 -0.164062\nv -0.28125 -0.0610915 -0.164062\nv -0.273438 -0.059572 -0.164062\nv 0.448951 -0.0625 -0.164062\nv 0.47925 -0.0625 -0.164062\nv 0.484375 -0.0598302 -0.164062\nv -0.292958 -0.0546875 -0.164062\nv -0.296875 -0.0488142 -0.164062\nv -0.269378 -0.0546875 -0.164062\nv -0.265625 -0.0495409 -0.164062\nv 0.445831 -0.0546875 -0.164062\nv 0.445312 -0.0515341 -0.164062\nv 0.488034 -0.0546875 -0.164062\nv -0.297463 -0.046875 -0.164062\nv -0.264409 -0.046875 -0.164062\nv 0.444696 -0.046875 -0.164062\nv 0.491077 -0.046875 -0.164062\nv 0.492188 -0.0414063 -0.164062\nv -0.299174 -0.0390625 -0.164062\nv -0.261841 -0.0390625 -0.164062\nv 0.44461 -0.0390625 -0.164062\nv 0.492585 -0.0390625 -0.164062\nv -0.299847 -0.03125 -0.164062\nv -0.260749 -0.03125 -0.164062\nv 0.444222 -0.03125 -0.164062\nv 0.49453 -0.03125 -0.164062\nv -0.299593 -0.0234375 -0.164062\nv -0.259968 -0.0234375 -0.164062\nv 0.442884 -0.0234375 -0.164062\nv 0.497291 -0.0234375 -0.164062\nv -0.300708 -0.015625 -0.164062\nv -0.25912 -0.015625 -0.164062\nv 0.441894 -0.015625 -0.164062\nv 0.499022 -0.015625 -0.164062\nv -0.302606 -0.0078125 -0.164062\nv -0.259507 -0.0078125 -0.164062\nv 0.44021 -0.0078125 -0.164062\nv 0.499676 -0.0078125 -0.164062\nv 0.5 -0.00302815 -0.164062\nv -0.304504 0 -0.164062\nv -0.259481 0 -0.164062\nv 0.439621 0 -0.164062\nv 0.500158 0 -0.164062\nv -0.303911 0.0078125 -0.164062\nv -0.258715 0.0078125 -0.164062\nv -0.257812 0.0106206 -0.164062\nv 0.441109 0.0078125 -0.164062\nv 0.5 0.0078125 -0.164062\nv 0.5 0.00788989 -0.164062\nv -0.302666 0.015625 -0.164062\nv -0.255551 0.015625 -0.164062\nv -0.25 0.0201017 -0.164062\nv -0.242188 0.0221488 -0.164062\nv -0.234375 0.0224851 -0.164062\nv 0.429688 0.0221268 -0.164062\nv 0.439547 0.015625 -0.164062\nv 0.4375 0.0174104 -0.164062\nv 0.499951 0.015625 -0.164062\nv 0.5 0.0178877 -0.164062\nv 0.5 0.015625 -0.159527\nv -0.301423 0.0234375 -0.164062\nv -0.231262 0.0234375 -0.164062\nv -0.226562 0.0245443 -0.164062\nv -0.21875 0.026804 -0.164062\nv -0.210938 0.0282106 -0.164062\nv -0.203125 0.0285464 -0.164062\nv -0.195312 0.0285178 -0.164062\nv -0.1875 0.0286075 -0.164062\nv -0.179688 0.0282551 -0.164062\nv -0.171875 0.0276756 -0.164062\nv -0.164062 0.0275277 -0.164062\nv -0.15625 0.0276722 -0.164062\nv -0.148438 0.0277395 -0.164062\nv -0.140625 0.0276452 -0.164062\nv -0.132812 0.0276505 -0.164062\nv -0.125 0.0277082 -0.164062\nv -0.117188 0.0276404 -0.164062\nv -0.109375 0.0275337 -0.164062\nv -0.101562 0.0274446 -0.164062\nv -0.09375 0.0272939 -0.164062\nv -0.0859375 0.0270854 -0.164062\nv -0.078125 0.0268256 -0.164062\nv -0.0703125 0.0264843 -0.164062\nv -0.0625 0.0262191 -0.164062\nv -0.0546875 0.0260544 -0.164062\nv -0.046875 0.0259918 -0.164062\nv -0.0390625 0.026032 -0.164062\nv -0.03125 0.0261066 -0.164062\nv -0.0234375 0.0262182 -0.164062\nv -0.015625 0.0263029 -0.164062\nv -0.0078125 0.0264115 -0.164062\nv 0 0.0263635 -0.164062\nv 0.0078125 0.0262697 -0.164062\nv 0.015625 0.0262174 -0.164062\nv 0.0234375 0.0261633 -0.164062\nv 0.03125 0.026109 -0.164062\nv 0.0390625 0.0260425 -0.164062\nv 0.046875 0.0259985 -0.164062\nv 0.0546875 0.025958 -0.164062\nv 0.0625 0.0258795 -0.164062\nv 0.0703125 0.0257991 -0.164062\nv 0.078125 0.0256909 -0.164062\nv 0.0859375 0.0256135 -0.164062\nv 0.09375 0.0255559 -0.164062\nv 0.101562 0.0254497 -0.164062\nv 0.109375 0.0253468 -0.164062\nv 0.117188 0.0252305 -0.164062\nv 0.125 0.025233 -0.164062\nv 0.132812 0.0251315 -0.164062\nv 0.140625 0.0249781 -0.164062\nv 0.148438 0.0247755 -0.164062\nv 0.15625 0.0245666 -0.164062\nv 0.164062 0.0244124 -0.164062\nv 0.171875 0.0242695 -0.164062\nv 0.179688 0.0241164 -0.164062\nv 0.1875 0.0240939 -0.164062\nv 0.195312 0.0241209 -0.164062\nv 0.203125 0.0241614 -0.164062\nv 0.210938 0.0242521 -0.164062\nv 0.21875 0.0243424 -0.164062\nv 0.226562 0.0244641 -0.164062\nv 0.234375 0.0246066 -0.164062\nv 0.242188 0.0246747 -0.164062\nv 0.25 0.0247246 -0.164062\nv 0.257812 0.0248539 -0.164062\nv 0.265625 0.0250018 -0.164062\nv 0.273438 0.0251738 -0.164062\nv 0.28125 0.0253415 -0.164062\nv 0.289062 0.0254321 -0.164062\nv 0.296875 0.0255175 -0.164062\nv 0.304688 0.0256818 -0.164062\nv 0.3125 0.025906 -0.164062\nv 0.320312 0.0261561 -0.164062\nv 0.328125 0.0262247 -0.164062\nv 0.335938 0.0262944 -0.164062\nv 0.34375 0.0264428 -0.164062\nv 0.351562 0.0265995 -0.164062\nv 0.359375 0.0266766 -0.164062\nv 0.367188 0.0267239 -0.164062\nv 0.375 0.0269675 -0.164062\nv 0.382812 0.0270025 -0.164062\nv 0.390625 0.0266787 -0.164062\nv 0.398438 0.0262449 -0.164062\nv 0.40625 0.025844 -0.164062\nv 0.414062 0.0250666 -0.164062\nv 0.424156 0.0234375 -0.164062\nv 0.421875 0.0238428 -0.164062\nv 0.500105 0.0234375 -0.164062\nv 0.5 0.0238299 -0.164062\nv -0.300208 0.03125 -0.164062\nv 0.497412 0.03125 -0.164062\nv -0.299117 0.0390625 -0.164062\nv -0.296875 0.0461237 -0.164062\nv 0.49488 0.0390625 -0.164062\nv -0.29658 0.046875 -0.164062\nv 0.492868 0.046875 -0.164062\nv 0.492188 0.0487654 -0.164062\nv -0.294119 0.0546875 -0.164062\nv 0.476562 0.0618711 -0.164062\nv 0.489441 0.0546875 -0.164062\nv 0.484375 0.057988 -0.164062\nv -0.290897 0.0625 -0.164062\nv -0.289062 0.0659428 -0.164062\nv 0.445312 0.0693344 -0.164062\nv 0.453125 0.0673036 -0.164062\nv 0.460938 0.0661015 -0.164062\nv 0.474907 0.0625 -0.164062\nv 0.46875 0.0649348 -0.164062\nv -0.282 0.0703125 -0.164062\nv -0.28125 0.0708645 -0.164062\nv -0.273438 0.0761014 -0.164062\nv -0.21875 0.07624 -0.164062\nv -0.210938 0.0748683 -0.164062\nv -0.203125 0.0745665 -0.164062\nv -0.195312 0.0747499 -0.164062\nv -0.1875 0.0751232 -0.164062\nv -0.179688 0.0753953 -0.164062\nv -0.171875 0.0753634 -0.164062\nv -0.164062 0.0753608 -0.164062\nv -0.15625 0.0753523 -0.164062\nv -0.148438 0.0755043 -0.164062\nv -0.140625 0.0753693 -0.164062\nv -0.132812 0.0751362 -0.164062\nv -0.125 0.0750085 -0.164062\nv -0.117188 0.0748996 -0.164062\nv -0.109375 0.0747094 -0.164062\nv -0.101562 0.0745927 -0.164062\nv -0.09375 0.0745863 -0.164062\nv -0.0859375 0.0746036 -0.164062\nv -0.078125 0.0746114 -0.164062\nv -0.0703125 0.0745726 -0.164062\nv -0.0625 0.0744777 -0.164062\nv -0.0546875 0.0743143 -0.164062\nv -0.046875 0.0741202 -0.164062\nv -0.0390625 0.073948 -0.164062\nv -0.03125 0.0737425 -0.164062\nv -0.0234375 0.0735491 -0.164062\nv -0.015625 0.0734207 -0.164062\nv -0.0078125 0.0733347 -0.164062\nv 0 0.0732904 -0.164062\nv 0.0078125 0.0732186 -0.164062\nv 0.015625 0.0731636 -0.164062\nv 0.0234375 0.0731317 -0.164062\nv 0.03125 0.0730767 -0.164062\nv 0.0390625 0.0729888 -0.164062\nv 0.046875 0.0729274 -0.164062\nv 0.0546875 0.0728798 -0.164062\nv 0.0625 0.0728358 -0.164062\nv 0.0703125 0.0728025 -0.164062\nv 0.078125 0.0727831 -0.164062\nv 0.0859375 0.0727691 -0.164062\nv 0.09375 0.0727655 -0.164062\nv 0.101562 0.0727156 -0.164062\nv 0.109375 0.0726849 -0.164062\nv 0.117188 0.0726555 -0.164062\nv 0.125 0.0726355 -0.164062\nv 0.132812 0.0726619 -0.164062\nv 0.140625 0.0725507 -0.164062\nv 0.148438 0.072429 -0.164062\nv 0.15625 0.0723513 -0.164062\nv 0.164062 0.072241 -0.164062\nv 0.171875 0.0721219 -0.164062\nv 0.179688 0.0720118 -0.164062\nv 0.1875 0.0719108 -0.164062\nv 0.195312 0.071872 -0.164062\nv 0.203125 0.0718191 -0.164062\nv 0.210938 0.0718113 -0.164062\nv 0.21875 0.0718248 -0.164062\nv 0.226562 0.0718448 -0.164062\nv 0.234375 0.0719827 -0.164062\nv 0.242188 0.0721264 -0.164062\nv 0.25 0.0722836 -0.164062\nv 0.257812 0.0724443 -0.164062\nv 0.265625 0.0725776 -0.164062\nv 0.273438 0.0727173 -0.164062\nv 0.28125 0.0728653 -0.164062\nv 0.289062 0.0730357 -0.164062\nv 0.296875 0.0731844 -0.164062\nv 0.304688 0.0732788 -0.164062\nv 0.3125 0.0733228 -0.164062\nv 0.320312 0.0733475 -0.164062\nv 0.328125 0.0734022 -0.164062\nv 0.335938 0.0734609 -0.164062\nv 0.34375 0.0734655 -0.164062\nv 0.351562 0.0734639 -0.164062\nv 0.359375 0.0734061 -0.164062\nv 0.367188 0.0732329 -0.164062\nv 0.375 0.0730686 -0.164062\nv 0.382812 0.0727597 -0.164062\nv 0.390625 0.0724351 -0.164062\nv 0.398438 0.0722896 -0.164062\nv 0.40625 0.0721604 -0.164062\nv 0.414062 0.0720637 -0.164062\nv 0.421875 0.0719735 -0.164062\nv 0.429688 0.0716901 -0.164062\nv 0.440978 0.0703125 -0.164062\nv 0.4375 0.0710544 -0.164062\nv -0.266937 0.078125 -0.164062\nv -0.265625 0.0789886 -0.164062\nv -0.234375 0.0821778 -0.164062\nv -0.226255 0.078125 -0.164062\nv -0.226562 0.0782307 -0.164062\nv -0.226562 0.078125 -0.158715\nv -0.259807 0.0859375 -0.164062\nv -0.257812 0.0875966 -0.164062\nv -0.25 0.0891792 -0.164062\nv -0.239951 0.0859375 -0.164062\nv -0.242188 0.0872366 -0.164062\nv -0.28125 0.1674 -0.164062\nv -0.273438 0.166204 -0.164062\nv -0.265625 0.166764 -0.164062\nv -0.257812 0.169042 -0.164062\nv -0.288369 0.171875 -0.164062\nv -0.289062 0.173151 -0.164062\nv -0.255214 0.171875 -0.164062\nv -0.25 0.17833 -0.164062\nv -0.292443 0.179688 -0.164062\nv -0.249147 0.179688 -0.164062\nv -0.296184 0.1875 -0.164062\nv -0.296875 0.189455 -0.164062\nv -0.244965 0.1875 -0.164062\nv -0.298758 0.195312 -0.164062\nv -0.242879 0.195312 -0.164062\nv -0.242188 0.198677 -0.164062\nv -0.300667 0.203125 -0.164062\nv -0.2413 0.203125 -0.164062\nv -0.301306 0.210938 -0.164062\nv -0.240117 0.210938 -0.164062\nv -0.301027 0.21875 -0.164062\nv -0.239611 0.21875 -0.164062\nv -0.300767 0.226562 -0.164062\nv -0.239195 0.226562 -0.164062\nv -0.300784 0.234375 -0.164062\nv -0.23945 0.234375 -0.164062\nv -0.300725 0.242188 -0.164062\nv -0.240121 0.242188 -0.164062\nv -0.300528 0.25 -0.164062\nv -0.241126 0.25 -0.164062\nv -0.242188 0.255826 -0.164062\nv -0.300064 0.257812 -0.164062\nv -0.242559 0.257812 -0.164062\nv -0.299536 0.265625 -0.164062\nv -0.243876 0.265625 -0.164062\nv -0.298618 0.273438 -0.164062\nv -0.244536 0.273438 -0.164062\nv -0.297032 0.28125 -0.164062\nv -0.296875 0.281948 -0.164062\nv -0.245547 0.28125 -0.164062\nv -0.29526 0.289062 -0.164062\nv -0.247094 0.289062 -0.164062\nv -0.292884 0.296875 -0.164062\nv -0.249527 0.296875 -0.164062\nv -0.25 0.298059 -0.164062\nv -0.29 0.304688 -0.164062\nv -0.289062 0.307205 -0.164062\nv -0.252836 0.304688 -0.164062\nv -0.286384 0.3125 -0.164062\nv -0.255637 0.3125 -0.164062\nv -0.257812 0.316503 -0.164062\nv -0.283421 0.320312 -0.164062\nv -0.28125 0.324583 -0.164062\nv -0.262224 0.320312 -0.164062\nv -0.265625 0.322738 -0.164062\nv -0.257812 0.320312 -0.156434\nv -0.274433 0.328125 -0.164062\nv -0.28125 0.328125 -0.158153\nv -0.272916 0.328125 -0.164062\nv -0.273438 0.328554 -0.164062\nv -0.265625 0.328125 -0.158286\nv -0.289062 0.601562 -0.158149\nv -0.28125 0.601562 -0.158109\nv -0.289062 0.612198 -0.164062\nv -0.289062 0.609375 -0.161893\nv -0.28125 0.609971 -0.164062\nv -0.28125 0.609375 -0.163706\nv -0.273438 0.609375 -0.157997\nv -0.304688 0.62388 -0.164062\nv -0.293517 0.617188 -0.164062\nv -0.296875 0.620059 -0.164062\nv -0.296875 0.617188 -0.159416\nv -0.275803 0.617188 -0.164062\nv -0.273438 0.621712 -0.164062\nv -0.273438 0.617188 -0.161328\nv -0.305922 0.625 -0.164062\nv -0.272489 0.625 -0.164062\nv -0.310555 0.632812 -0.164062\nv -0.3125 0.637482 -0.164062\nv -0.271592 0.632812 -0.164062\nv -0.313711 0.640625 -0.164062\nv -0.271662 0.640625 -0.164062\nv -0.315814 0.648438 -0.164062\nv -0.272228 0.648438 -0.164062\nv -0.317741 0.65625 -0.164062\nv -0.272612 0.65625 -0.164062\nv -0.318851 0.664062 -0.164062\nv -0.272674 0.664062 -0.164062\nv -0.3197 0.671875 -0.164062\nv -0.272898 0.671875 -0.164062\nv -0.320136 0.679688 -0.164062\nv -0.320312 0.685384 -0.164062\nv -0.273412 0.679688 -0.164062\nv -0.273438 0.680074 -0.164062\nv -0.273438 0.679688 -0.16169\nv -0.320376 0.6875 -0.164062\nv -0.273907 0.6875 -0.164062\nv -0.320556 0.695312 -0.164062\nv -0.274332 0.695312 -0.164062\nv -0.320614 0.703125 -0.164062\nv -0.27492 0.703125 -0.164062\nv -0.320638 0.710938 -0.164062\nv -0.275896 0.710938 -0.164062\nv -0.32094 0.71875 -0.164062\nv -0.277226 0.71875 -0.164062\nv -0.321335 0.726562 -0.164062\nv -0.278935 0.726562 -0.164062\nv -0.322047 0.734375 -0.164062\nv -0.2803 0.734375 -0.164062\nv -0.28125 0.740013 -0.164062\nv -0.322842 0.742188 -0.164062\nv -0.281606 0.742188 -0.164062\nv -0.323474 0.75 -0.164062\nv -0.283108 0.75 -0.164062\nv -0.323688 0.757812 -0.164062\nv -0.284796 0.757812 -0.164062\nv -0.323658 0.765625 -0.164062\nv -0.287071 0.765625 -0.164062\nv -0.289062 0.770074 -0.164062\nv -0.322947 0.773438 -0.164062\nv -0.320312 0.779701 -0.164062\nv -0.291388 0.773438 -0.164062\nv -0.296875 0.778673 -0.164062\nv -0.319157 0.78125 -0.164062\nv -0.320312 0.78125 -0.158873\nv -0.3125 0.786375 -0.164062\nv -0.30071 0.78125 -0.164062\nv -0.304688 0.783656 -0.164062\nv 0.046875 -0.539368 -0.15625\nv 0.0546875 -0.540386 -0.15625\nv 0.0625 -0.541148 -0.15625\nv 0.0703125 -0.541228 -0.15625\nv 0.078125 -0.540989 -0.15625\nv 0.0859375 -0.540925 -0.15625\nv 0.09375 -0.540661 -0.15625\nv 0.101562 -0.54029 -0.15625\nv 0.109375 -0.539858 -0.15625\nv 0.117188 -0.5392 -0.15625\nv 0.015625 -0.534714 -0.15625\nv 0.0234375 -0.536151 -0.15625\nv 0.03125 -0.536889 -0.15625\nv 0.0444779 -0.539062 -0.15625\nv 0.0390625 -0.537946 -0.15625\nv 0.046875 -0.539062 -0.151083\nv 0.11864 -0.539062 -0.15625\nv 0.125 -0.53813 -0.15625\nv 0.125 -0.539062 -0.151207\nv 0.132812 -0.53647 -0.15625\nv 0.140625 -0.534473 -0.15625\nv 0.148438 -0.532197 -0.15625\nv 0.00844114 -0.53125 -0.15625\nv 0.0078125 -0.530562 -0.15625\nv 0.015625 -0.53125 -0.148487\nv 0.150854 -0.53125 -0.15625\nv 0.15625 -0.528778 -0.15625\nv 0.164062 -0.523985 -0.15625\nv 0.00434079 -0.523438 -0.15625\nv 0.0078125 -0.515908 -0.15625\nv 0.164907 -0.523438 -0.15625\nv 0.164062 -0.523438 -0.152497\nv 0.00794979 -0.515625 -0.15625\nv 0.0078125 -0.515625 -0.15572\nv 0.16919 -0.515625 -0.15625\nv 0.0124242 -0.507812 -0.15625\nv 0.015625 -0.504205 -0.15625\nv 0.15625 -0.501042 -0.15625\nv 0.169178 -0.507812 -0.15625\nv 0.164062 -0.505159 -0.15625\nv 0.0226353 -0.5 -0.15625\nv 0.0234375 -0.499608 -0.15625\nv 0.03125 -0.497301 -0.15625\nv 0.0390625 -0.495359 -0.15625\nv 0.046875 -0.493702 -0.15625\nv 0.132812 -0.493696 -0.15625\nv 0.140625 -0.495997 -0.15625\nv 0.154051 -0.5 -0.15625\nv 0.148438 -0.498283 -0.15625\nv 0.0532686 -0.492188 -0.15625\nv 0.0546875 -0.491846 -0.15625\nv 0.0625 -0.48978 -0.15625\nv 0.0703125 -0.488366 -0.15625\nv 0.078125 -0.488151 -0.15625\nv 0.0859375 -0.488207 -0.15625\nv 0.09375 -0.488449 -0.15625\nv 0.101562 -0.48892 -0.15625\nv 0.109375 -0.489725 -0.15625\nv 0.117188 -0.49072 -0.15625\nv 0.126002 -0.492188 -0.15625\nv 0.125 -0.491966 -0.15625\nv 0.453125 -0.0654655 -0.15625\nv 0.460938 -0.067012 -0.15625\nv 0.46875 -0.0638431 -0.15625\nv 0.476562 -0.0633399 -0.15625\nv -0.289062 -0.0588422 -0.15625\nv -0.28125 -0.0616066 -0.15625\nv -0.273438 -0.0599107 -0.15625\nv 0.448982 -0.0625 -0.15625\nv 0.479937 -0.0625 -0.15625\nv 0.484375 -0.0602224 -0.15625\nv -0.293352 -0.0546875 -0.15625\nv -0.296875 -0.0491563 -0.15625\nv -0.269347 -0.0546875 -0.15625\nv -0.265625 -0.0491292 -0.15625\nv 0.445846 -0.0546875 -0.15625\nv 0.445312 -0.0514539 -0.15625\nv 0.488331 -0.0546875 -0.15625\nv -0.297556 -0.046875 -0.15625\nv -0.264624 -0.046875 -0.15625\nv 0.44469 -0.046875 -0.15625\nv 0.491352 -0.046875 -0.15625\nv 0.492188 -0.0428558 -0.15625\nv -0.299228 -0.0390625 -0.15625\nv -0.262056 -0.0390625 -0.15625\nv 0.444688 -0.0390625 -0.15625\nv 0.492843 -0.0390625 -0.15625\nv -0.299802 -0.03125 -0.15625\nv -0.260928 -0.03125 -0.15625\nv 0.444137 -0.03125 -0.15625\nv 0.494812 -0.03125 -0.15625\nv -0.299565 -0.0234375 -0.15625\nv -0.260183 -0.0234375 -0.15625\nv 0.44284 -0.0234375 -0.15625\nv 0.497564 -0.0234375 -0.15625\nv -0.300745 -0.015625 -0.15625\nv -0.25925 -0.015625 -0.15625\nv 0.441971 -0.015625 -0.15625\nv 0.49929 -0.015625 -0.15625\nv -0.302561 -0.0078125 -0.15625\nv -0.259668 -0.0078125 -0.15625\nv 0.440298 -0.0078125 -0.15625\nv 0.499945 -0.0078125 -0.15625\nv 0.5 -0.006717 -0.15625\nv 0.5 -0.0078125 -0.154121\nv -0.304626 0 -0.15625\nv -0.304688 0 -0.151938\nv -0.259598 0 -0.15625\nv 0.439671 0 -0.15625\nv 0.500263 0 -0.15625\nv -0.304083 0.0078125 -0.15625\nv -0.258901 0.0078125 -0.15625\nv -0.257812 0.0109188 -0.15625\nv 0.441225 0.0078125 -0.15625\nv 0.500127 0.0078125 -0.15625\nv -0.302768 0.015625 -0.15625\nv -0.255439 0.015625 -0.15625\nv -0.25 0.0199185 -0.15625\nv -0.242188 0.0217355 -0.15625\nv -0.234375 0.0221914 -0.15625\nv 0.429688 0.0219334 -0.15625\nv 0.439407 0.015625 -0.15625\nv 0.4375 0.0172219 -0.15625\nv 0.500034 0.015625 -0.15625\nv -0.301564 0.0234375 -0.15625\nv -0.230416 0.0234375 -0.15625\nv -0.226562 0.0244008 -0.15625\nv -0.21875 0.0266565 -0.15625\nv -0.210938 0.0280207 -0.15625\nv -0.203125 0.028359 -0.15625\nv -0.195312 0.0284014 -0.15625\nv -0.1875 0.028483 -0.15625\nv -0.179688 0.0281236 -0.15625\nv -0.171875 0.0276653 -0.15625\nv -0.164062 0.0275329 -0.15625\nv -0.15625 0.0276519 -0.15625\nv -0.148438 0.0277769 -0.15625\nv -0.140625 0.0276818 -0.15625\nv -0.132812 0.0276561 -0.15625\nv -0.125 0.0276678 -0.15625\nv -0.117188 0.0276602 -0.15625\nv -0.109375 0.0275262 -0.15625\nv -0.101562 0.0274297 -0.15625\nv -0.09375 0.0272686 -0.15625\nv -0.0859375 0.0270686 -0.15625\nv -0.078125 0.0268186 -0.15625\nv -0.0703125 0.026471 -0.15625\nv -0.0625 0.0262114 -0.15625\nv -0.0546875 0.0260456 -0.15625\nv -0.046875 0.0259963 -0.15625\nv -0.0390625 0.0260294 -0.15625\nv -0.03125 0.0261363 -0.15625\nv -0.0234375 0.0262441 -0.15625\nv -0.015625 0.0263785 -0.15625\nv -0.0078125 0.0264911 -0.15625\nv 0 0.0264844 -0.15625\nv 0.0078125 0.0263989 -0.15625\nv 0.015625 0.026358 -0.15625\nv 0.0234375 0.0263078 -0.15625\nv 0.03125 0.0262729 -0.15625\nv 0.0390625 0.026203 -0.15625\nv 0.046875 0.0261683 -0.15625\nv 0.0546875 0.0261324 -0.15625\nv 0.0625 0.0260514 -0.15625\nv 0.0703125 0.025962 -0.15625\nv 0.078125 0.02583 -0.15625\nv 0.0859375 0.0257618 -0.15625\nv 0.09375 0.0256929 -0.15625\nv 0.101562 0.0255936 -0.15625\nv 0.109375 0.0254973 -0.15625\nv 0.117188 0.025431 -0.15625\nv 0.125 0.0253168 -0.15625\nv 0.132812 0.0251925 -0.15625\nv 0.140625 0.0250039 -0.15625\nv 0.148438 0.0248006 -0.15625\nv 0.15625 0.0246019 -0.15625\nv 0.164062 0.0244596 -0.15625\nv 0.171875 0.0243136 -0.15625\nv 0.179688 0.0241636 -0.15625\nv 0.1875 0.0240615 -0.15625\nv 0.195312 0.0240521 -0.15625\nv 0.203125 0.024088 -0.15625\nv 0.210938 0.0241783 -0.15625\nv 0.21875 0.024293 -0.15625\nv 0.226562 0.0244402 -0.15625\nv 0.234375 0.0245897 -0.15625\nv 0.242188 0.0246923 -0.15625\nv 0.25 0.0247295 -0.15625\nv 0.257812 0.0248313 -0.15625\nv 0.265625 0.0249716 -0.15625\nv 0.273438 0.0251317 -0.15625\nv 0.28125 0.025296 -0.15625\nv 0.289062 0.0254303 -0.15625\nv 0.296875 0.0255238 -0.15625\nv 0.304688 0.0256489 -0.15625\nv 0.3125 0.0258561 -0.15625\nv 0.320312 0.0261284 -0.15625\nv 0.328125 0.0262113 -0.15625\nv 0.335938 0.0263021 -0.15625\nv 0.34375 0.0264307 -0.15625\nv 0.351562 0.0265968 -0.15625\nv 0.359375 0.0266971 -0.15625\nv 0.367188 0.0266952 -0.15625\nv 0.375 0.0268977 -0.15625\nv 0.382812 0.0269299 -0.15625\nv 0.390625 0.0266159 -0.15625\nv 0.398438 0.0261846 -0.15625\nv 0.40625 0.0258004 -0.15625\nv 0.414062 0.0250478 -0.15625\nv 0.423399 0.0234375 -0.15625\nv 0.421875 0.0237163 -0.15625\nv 0.500214 0.0234375 -0.15625\nv 0.5 0.0242326 -0.15625\nv -0.300362 0.03125 -0.15625\nv 0.497523 0.03125 -0.15625\nv -0.299271 0.0390625 -0.15625\nv -0.296875 0.0468275 -0.15625\nv 0.494996 0.0390625 -0.15625\nv -0.296857 0.046875 -0.15625\nv -0.296875 0.046875 -0.155701\nv 0.492969 0.046875 -0.15625\nv 0.492188 0.0491794 -0.15625\nv -0.294322 0.0546875 -0.15625\nv 0.476562 0.0620561 -0.15625\nv 0.489807 0.0546875 -0.15625\nv 0.484375 0.0582187 -0.15625\nv -0.291348 0.0625 -0.15625\nv -0.289062 0.0669315 -0.15625\nv 0.445312 0.0695064 -0.15625\nv 0.453125 0.0674737 -0.15625\nv 0.460938 0.0661918 -0.15625\nv 0.47535 0.0625 -0.15625\nv 0.46875 0.0650563 -0.15625\nv -0.28382 0.0703125 -0.15625\nv -0.28125 0.0720604 -0.15625\nv -0.273438 0.0767238 -0.15625\nv -0.226562 0.0780848 -0.15625\nv -0.21875 0.0761254 -0.15625\nv -0.210938 0.0747603 -0.15625\nv -0.203125 0.074499 -0.15625\nv -0.195312 0.0746975 -0.15625\nv -0.1875 0.0750817 -0.15625\nv -0.179688 0.0753764 -0.15625\nv -0.171875 0.0753823 -0.15625\nv -0.164062 0.0753062 -0.15625\nv -0.15625 0.0753242 -0.15625\nv -0.148438 0.0754445 -0.15625\nv -0.140625 0.075288 -0.15625\nv -0.132812 0.0751366 -0.15625\nv -0.125 0.0750118 -0.15625\nv -0.117188 0.0749146 -0.15625\nv -0.109375 0.0747643 -0.15625\nv -0.101562 0.0746934 -0.15625\nv -0.09375 0.0747332 -0.15625\nv -0.0859375 0.0747522 -0.15625\nv -0.078125 0.0747467 -0.15625\nv -0.0703125 0.0746625 -0.15625\nv -0.0625 0.0744729 -0.15625\nv -0.0546875 0.0742407 -0.15625\nv -0.046875 0.0740605 -0.15625\nv -0.0390625 0.0739093 -0.15625\nv -0.03125 0.0737759 -0.15625\nv -0.0234375 0.0736151 -0.15625\nv -0.015625 0.0734726 -0.15625\nv -0.0078125 0.0733792 -0.15625\nv 0 0.0732548 -0.15625\nv 0.0078125 0.0731867 -0.15625\nv 0.015625 0.0731857 -0.15625\nv 0.0234375 0.0731653 -0.15625\nv 0.03125 0.0731548 -0.15625\nv 0.0390625 0.0731089 -0.15625\nv 0.046875 0.073039 -0.15625\nv 0.0546875 0.07298 -0.15625\nv 0.0625 0.0729226 -0.15625\nv 0.0703125 0.0728922 -0.15625\nv 0.078125 0.0728438 -0.15625\nv 0.0859375 0.0728693 -0.15625\nv 0.09375 0.0728844 -0.15625\nv 0.101562 0.0728381 -0.15625\nv 0.109375 0.0728045 -0.15625\nv 0.117188 0.0727827 -0.15625\nv 0.125 0.072773 -0.15625\nv 0.132812 0.0727308 -0.15625\nv 0.140625 0.0725767 -0.15625\nv 0.148438 0.0724328 -0.15625\nv 0.15625 0.0722959 -0.15625\nv 0.164062 0.0721856 -0.15625\nv 0.171875 0.0720809 -0.15625\nv 0.179688 0.0720064 -0.15625\nv 0.1875 0.0719571 -0.15625\nv 0.195312 0.0719042 -0.15625\nv 0.203125 0.0718352 -0.15625\nv 0.210938 0.0717818 -0.15625\nv 0.21875 0.0717852 -0.15625\nv 0.226562 0.0718093 -0.15625\nv 0.234375 0.0719368 -0.15625\nv 0.242188 0.0720791 -0.15625\nv 0.25 0.0722638 -0.15625\nv 0.257812 0.0724526 -0.15625\nv 0.265625 0.0726056 -0.15625\nv 0.273438 0.0727575 -0.15625\nv 0.28125 0.0729409 -0.15625\nv 0.289062 0.0731222 -0.15625\nv 0.296875 0.0732685 -0.15625\nv 0.304688 0.0733473 -0.15625\nv 0.3125 0.073392 -0.15625\nv 0.320312 0.0734181 -0.15625\nv 0.328125 0.073472 -0.15625\nv 0.335938 0.0735367 -0.15625\nv 0.34375 0.0735395 -0.15625\nv 0.351562 0.0735578 -0.15625\nv 0.359375 0.0735497 -0.15625\nv 0.367188 0.0733911 -0.15625\nv 0.375 0.0732538 -0.15625\nv 0.382812 0.0729385 -0.15625\nv 0.390625 0.0726014 -0.15625\nv 0.398438 0.0724384 -0.15625\nv 0.40625 0.0723166 -0.15625\nv 0.414062 0.0722216 -0.15625\nv 0.421875 0.072123 -0.15625\nv 0.429688 0.0718637 -0.15625\nv 0.441664 0.0703125 -0.15625\nv 0.4375 0.0711857 -0.15625\nv -0.270324 0.078125 -0.15625\nv -0.265625 0.0817837 -0.15625\nv -0.226671 0.078125 -0.15625\nv -0.234375 0.0821803 -0.15625\nv -0.261476 0.0859375 -0.15625\nv -0.257812 0.0886692 -0.15625\nv -0.25 0.0898727 -0.15625\nv -0.239713 0.0859375 -0.15625\nv -0.242188 0.087406 -0.15625\nv -0.28125 0.167519 -0.15625\nv -0.273438 0.166248 -0.15625\nv -0.265625 0.166225 -0.15625\nv -0.257812 0.16892 -0.15625\nv -0.287667 0.171875 -0.15625\nv -0.289062 0.173989 -0.15625\nv -0.255248 0.171875 -0.15625\nv -0.25 0.17929 -0.15625\nv -0.292654 0.179688 -0.15625\nv -0.249777 0.179688 -0.15625\nv -0.25 0.179688 -0.152875\nv -0.296487 0.1875 -0.15625\nv -0.296875 0.188497 -0.15625\nv -0.296875 0.1875 -0.149963\nv -0.245362 0.1875 -0.15625\nv -0.299247 0.195312 -0.15625\nv -0.24298 0.195312 -0.15625\nv -0.242188 0.199446 -0.15625\nv -0.300856 0.203125 -0.15625\nv -0.241489 0.203125 -0.15625\nv -0.301131 0.210938 -0.15625\nv -0.240413 0.210938 -0.15625\nv -0.300858 0.21875 -0.15625\nv -0.239819 0.21875 -0.15625\nv -0.300625 0.226562 -0.15625\nv -0.239472 0.226562 -0.15625\nv -0.300643 0.234375 -0.15625\nv -0.239789 0.234375 -0.15625\nv -0.300558 0.242188 -0.15625\nv -0.24034 0.242188 -0.15625\nv -0.300407 0.25 -0.15625\nv -0.241173 0.25 -0.15625\nv -0.242188 0.255639 -0.15625\nv -0.300148 0.257812 -0.15625\nv -0.242596 0.257812 -0.15625\nv -0.299726 0.265625 -0.15625\nv -0.243881 0.265625 -0.15625\nv -0.298625 0.273438 -0.15625\nv -0.244405 0.273438 -0.15625\nv -0.297109 0.28125 -0.15625\nv -0.296875 0.282292 -0.15625\nv -0.245371 0.28125 -0.15625\nv -0.295347 0.289062 -0.15625\nv -0.247075 0.289062 -0.15625\nv -0.293286 0.296875 -0.15625\nv -0.249732 0.296875 -0.15625\nv -0.25 0.297581 -0.15625\nv -0.290815 0.304688 -0.15625\nv -0.289062 0.30906 -0.15625\nv -0.252827 0.304688 -0.15625\nv -0.287208 0.3125 -0.15625\nv -0.255004 0.3125 -0.15625\nv -0.284658 0.320312 -0.15625\nv -0.257757 0.320312 -0.15625\nv -0.257812 0.320449 -0.15625\nv -0.281791 0.328125 -0.15625\nv -0.28125 0.329405 -0.15625\nv -0.273438 0.335056 -0.15625\nv -0.263217 0.328125 -0.15625\nv -0.265625 0.330616 -0.15625\nv -0.257812 0.328125 -0.148875\nv -0.28125 0.335938 -0.152235\nv -0.273438 0.335938 -0.155767\nv -0.265625 0.335938 -0.153554\nv -0.28125 0.34375 -0.149866\nv -0.273438 0.34375 -0.153525\nv -0.265625 0.34375 -0.151518\nv -0.28125 0.351562 -0.14866\nv -0.273438 0.351562 -0.152415\nv -0.265625 0.351562 -0.150359\nv -0.273438 0.359375 -0.151104\nv -0.265625 0.359375 -0.149177\nv -0.273438 0.367188 -0.149476\nv -0.289062 0.599772 -0.15625\nv -0.289062 0.59375 -0.150287\nv -0.28125 0.599816 -0.15625\nv -0.28125 0.59375 -0.150976\nv -0.273438 0.59375 -0.148589\nv -0.2914 0.601562 -0.15625\nv -0.296875 0.601562 -0.149164\nv -0.277019 0.601562 -0.15625\nv -0.273438 0.606599 -0.15625\nv -0.273438 0.601562 -0.153118\nv -0.295393 0.609375 -0.15625\nv -0.296875 0.612511 -0.15625\nv -0.296875 0.609375 -0.15397\nv -0.272358 0.609375 -0.15625\nv -0.300178 0.617188 -0.15625\nv -0.304688 0.620809 -0.15625\nv -0.271028 0.617188 -0.15625\nv -0.308195 0.625 -0.15625\nv -0.270065 0.625 -0.15625\nv -0.312334 0.632812 -0.15625\nv -0.3125 0.633331 -0.15625\nv -0.3125 0.632812 -0.155193\nv -0.270121 0.632812 -0.15625\nv -0.314635 0.640625 -0.15625\nv -0.270896 0.640625 -0.15625\nv -0.316392 0.648438 -0.15625\nv -0.271539 0.648438 -0.15625\nv -0.318359 0.65625 -0.15625\nv -0.272155 0.65625 -0.15625\nv -0.319206 0.664062 -0.15625\nv -0.272576 0.664062 -0.15625\nv -0.319838 0.671875 -0.15625\nv -0.272933 0.671875 -0.15625\nv -0.273438 0.678892 -0.15625\nv -0.320248 0.679688 -0.15625\nv -0.320312 0.681681 -0.15625\nv -0.320312 0.679688 -0.153349\nv -0.273494 0.679688 -0.15625\nv -0.320497 0.6875 -0.15625\nv -0.274013 0.6875 -0.15625\nv -0.320674 0.695312 -0.15625\nv -0.274365 0.695312 -0.15625\nv -0.320758 0.703125 -0.15625\nv -0.274918 0.703125 -0.15625\nv -0.320829 0.710938 -0.15625\nv -0.275935 0.710938 -0.15625\nv -0.321195 0.71875 -0.15625\nv -0.277415 0.71875 -0.15625\nv -0.321622 0.726562 -0.15625\nv -0.279077 0.726562 -0.15625\nv -0.322411 0.734375 -0.15625\nv -0.280508 0.734375 -0.15625\nv -0.28125 0.738569 -0.15625\nv -0.323271 0.742188 -0.15625\nv -0.281866 0.742188 -0.15625\nv -0.323966 0.75 -0.15625\nv -0.283275 0.75 -0.15625\nv -0.324228 0.757812 -0.15625\nv -0.284822 0.757812 -0.15625\nv -0.324061 0.765625 -0.15625\nv -0.286844 0.765625 -0.15625\nv -0.289062 0.771011 -0.15625\nv -0.323239 0.773438 -0.15625\nv -0.290714 0.773438 -0.15625\nv -0.296875 0.779886 -0.15625\nv -0.320662 0.78125 -0.15625\nv -0.320312 0.78206 -0.15625\nv -0.3125 0.788103 -0.15625\nv -0.298718 0.78125 -0.15625\nv -0.304688 0.785024 -0.15625\nv -0.3125 0.789062 -0.152675\nv 0.0546875 -0.540208 -0.148438\nv 0.0625 -0.541219 -0.148438\nv 0.0703125 -0.542088 -0.148438\nv 0.078125 -0.542385 -0.148438\nv 0.0859375 -0.54232 -0.148438\nv 0.09375 -0.542144 -0.148438\nv 0.101562 -0.541759 -0.148438\nv 0.109375 -0.541308 -0.148438\nv 0.117188 -0.540452 -0.148438\nv 0.125 -0.539412 -0.148438\nv 0.0234375 -0.532722 -0.148438\nv 0.03125 -0.53427 -0.148438\nv 0.0390625 -0.536683 -0.148438\nv 0.0478191 -0.539062 -0.148438\nv 0.046875 -0.538825 -0.148438\nv 0.127552 -0.539062 -0.148438\nv 0.132812 -0.537905 -0.148438\nv 0.140625 -0.535385 -0.148438\nv 0.148438 -0.532019 -0.148438\nv 0.0078125 -0.526941 -0.148438\nv 0.015729 -0.53125 -0.148438\nv 0.015625 -0.531219 -0.148438\nv 0.150005 -0.53125 -0.148438\nv 0.15625 -0.527672 -0.148438\nv 0.00421666 -0.523438 -0.148438\nv 0.163117 -0.523438 -0.148438\nv 0.164062 -0.521786 -0.148438\nv 0.00621169 -0.515625 -0.148438\nv 0.0078125 -0.509267 -0.148438\nv 0.16735 -0.515625 -0.148438\nv 0.0084297 -0.507812 -0.148438\nv 0.0078125 -0.507812 -0.144909\nv 0.015625 -0.502595 -0.148438\nv 0.15625 -0.501552 -0.148438\nv 0.167045 -0.507812 -0.148438\nv 0.164062 -0.506059 -0.148438\nv 0.0207246 -0.5 -0.148438\nv 0.0234375 -0.499181 -0.148438\nv 0.03125 -0.49674 -0.148438\nv 0.0390625 -0.494799 -0.148438\nv 0.046875 -0.49288 -0.148438\nv 0.132812 -0.492959 -0.148438\nv 0.140625 -0.495591 -0.148438\nv 0.153541 -0.5 -0.148438\nv 0.148438 -0.498169 -0.148438\nv 0.0496652 -0.492188 -0.148438\nv 0.046875 -0.492188 -0.141986\nv 0.0546875 -0.490932 -0.148438\nv 0.0625 -0.489169 -0.148438\nv 0.0703125 -0.487294 -0.148438\nv 0.078125 -0.486593 -0.148438\nv 0.0859375 -0.486677 -0.148438\nv 0.09375 -0.486892 -0.148438\nv 0.101562 -0.487388 -0.148438\nv 0.109375 -0.488296 -0.148438\nv 0.117188 -0.489433 -0.148438\nv 0.130048 -0.492188 -0.148438\nv 0.125 -0.49081 -0.148438\nv 0.453125 -0.0655401 -0.148438\nv 0.460938 -0.067142 -0.148438\nv 0.46875 -0.0640202 -0.148438\nv 0.476562 -0.0635202 -0.148438\nv -0.289062 -0.0593609 -0.148438\nv -0.28125 -0.0620744 -0.148438\nv -0.273438 -0.0602537 -0.148438\nv 0.448958 -0.0625 -0.148438\nv 0.480678 -0.0625 -0.148438\nv 0.484375 -0.0606138 -0.148438\nv -0.293654 -0.0546875 -0.148438\nv -0.296875 -0.049419 -0.148438\nv -0.269306 -0.0546875 -0.148438\nv -0.265625 -0.0487572 -0.148438\nv 0.445942 -0.0546875 -0.148438\nv 0.445312 -0.0507467 -0.148438\nv 0.488643 -0.0546875 -0.148438\nv -0.297634 -0.046875 -0.148438\nv -0.264814 -0.046875 -0.148438\nv 0.444794 -0.046875 -0.148438\nv 0.491596 -0.046875 -0.148438\nv 0.492188 -0.0441287 -0.148438\nv -0.299262 -0.0390625 -0.148438\nv -0.262238 -0.0390625 -0.148438\nv 0.444894 -0.0390625 -0.148438\nv 0.493095 -0.0390625 -0.148438\nv -0.299748 -0.03125 -0.148438\nv -0.261112 -0.03125 -0.148438\nv 0.444261 -0.03125 -0.148438\nv 0.495105 -0.03125 -0.148438\nv -0.299586 -0.0234375 -0.148438\nv -0.260405 -0.0234375 -0.148438\nv 0.442949 -0.0234375 -0.148438\nv 0.49788 -0.0234375 -0.148438\nv -0.300773 -0.015625 -0.148438\nv -0.259382 -0.015625 -0.148438\nv 0.442172 -0.015625 -0.148438\nv 0.499596 -0.015625 -0.148438\nv 0.5 -0.0100267 -0.148438\nv -0.302551 -0.0078125 -0.148438\nv -0.304688 -0.000155575 -0.148438\nv -0.259811 -0.0078125 -0.148438\nv 0.440459 -0.0078125 -0.148438\nv 0.500124 -0.0078125 -0.148438\nv -0.304722 0 -0.148438\nv -0.304688 0.000689768 -0.148438\nv -0.259714 0 -0.148438\nv 0.439812 0 -0.148438\nv 0.500307 0 -0.148438\nv -0.304244 0.0078125 -0.148438\nv -0.259054 0.0078125 -0.148438\nv -0.257812 0.0110197 -0.148438\nv 0.441396 0.0078125 -0.148438\nv 0.500216 0.0078125 -0.148438\nv -0.302857 0.015625 -0.148438\nv -0.25524 0.015625 -0.148438\nv -0.25 0.0197054 -0.148438\nv -0.242188 0.0213053 -0.148438\nv -0.234375 0.0218961 -0.148438\nv 0.429688 0.021796 -0.148438\nv 0.439484 0.015625 -0.148438\nv 0.4375 0.017243 -0.148438\nv 0.500117 0.015625 -0.148438\nv -0.301716 0.0234375 -0.148438\nv -0.229538 0.0234375 -0.148438\nv -0.226562 0.0242137 -0.148438\nv -0.21875 0.0265252 -0.148438\nv -0.210938 0.0278292 -0.148438\nv -0.203125 0.0281962 -0.148438\nv -0.195312 0.0282639 -0.148438\nv -0.1875 0.0283554 -0.148438\nv -0.179688 0.0280704 -0.148438\nv -0.171875 0.0276382 -0.148438\nv -0.164062 0.027503 -0.148438\nv -0.15625 0.027641 -0.148438\nv -0.148438 0.0277266 -0.148438\nv -0.140625 0.0276992 -0.148438\nv -0.132812 0.027687 -0.148438\nv -0.125 0.0276389 -0.148438\nv -0.117188 0.0276419 -0.148438\nv -0.109375 0.0274563 -0.148438\nv -0.101562 0.027338 -0.148438\nv -0.09375 0.0271917 -0.148438\nv -0.0859375 0.0270042 -0.148438\nv -0.078125 0.0267858 -0.148438\nv -0.0703125 0.0264719 -0.148438\nv -0.0625 0.0262106 -0.148438\nv -0.0546875 0.0260349 -0.148438\nv -0.046875 0.0260044 -0.148438\nv -0.0390625 0.0260576 -0.148438\nv -0.03125 0.0261694 -0.148438\nv -0.0234375 0.0262618 -0.148438\nv -0.015625 0.0263595 -0.148438\nv -0.0078125 0.0264617 -0.148438\nv 0 0.0264827 -0.148438\nv 0.0078125 0.0264689 -0.148438\nv 0.015625 0.0264464 -0.148438\nv 0.0234375 0.0264201 -0.148438\nv 0.03125 0.0263943 -0.148438\nv 0.0390625 0.0263662 -0.148438\nv 0.046875 0.0263446 -0.148438\nv 0.0546875 0.0262908 -0.148438\nv 0.0625 0.0262059 -0.148438\nv 0.0703125 0.0261 -0.148438\nv 0.078125 0.0259482 -0.148438\nv 0.0859375 0.0258972 -0.148438\nv 0.09375 0.0258213 -0.148438\nv 0.101562 0.0257195 -0.148438\nv 0.109375 0.0256461 -0.148438\nv 0.117188 0.025544 -0.148438\nv 0.125 0.025411 -0.148438\nv 0.132812 0.0252639 -0.148438\nv 0.140625 0.0250583 -0.148438\nv 0.148438 0.0248485 -0.148438\nv 0.15625 0.0246808 -0.148438\nv 0.164062 0.0245455 -0.148438\nv 0.171875 0.0243838 -0.148438\nv 0.179688 0.0242414 -0.148438\nv 0.1875 0.024157 -0.148438\nv 0.195312 0.0240378 -0.148438\nv 0.203125 0.0240944 -0.148438\nv 0.210938 0.0241867 -0.148438\nv 0.21875 0.0243182 -0.148438\nv 0.226562 0.02446 -0.148438\nv 0.234375 0.0245897 -0.148438\nv 0.242188 0.0246943 -0.148438\nv 0.25 0.0247408 -0.148438\nv 0.257812 0.0248227 -0.148438\nv 0.265625 0.0249496 -0.148438\nv 0.273438 0.0250977 -0.148438\nv 0.28125 0.0252983 -0.148438\nv 0.289062 0.0254256 -0.148438\nv 0.296875 0.0255216 -0.148438\nv 0.304688 0.0256551 -0.148438\nv 0.3125 0.0258536 -0.148438\nv 0.320312 0.0261115 -0.148438\nv 0.328125 0.0262228 -0.148438\nv 0.335938 0.026279 -0.148438\nv 0.34375 0.0264294 -0.148438\nv 0.351562 0.026585 -0.148438\nv 0.359375 0.0266891 -0.148438\nv 0.367188 0.0267252 -0.148438\nv 0.375 0.0268881 -0.148438\nv 0.382812 0.0269044 -0.148438\nv 0.390625 0.0266018 -0.148438\nv 0.398438 0.0261471 -0.148438\nv 0.40625 0.0257412 -0.148438\nv 0.414062 0.0250022 -0.148438\nv 0.422774 0.0234375 -0.148438\nv 0.421875 0.023605 -0.148438\nv 0.500343 0.0234375 -0.148438\nv 0.5 0.0247045 -0.148438\nv -0.300536 0.03125 -0.148438\nv 0.497656 0.03125 -0.148438\nv -0.299436 0.0390625 -0.148438\nv 0.495123 0.0390625 -0.148438\nv -0.297106 0.046875 -0.148438\nv -0.296875 0.0475209 -0.148438\nv 0.493066 0.046875 -0.148438\nv 0.492188 0.0496694 -0.148438\nv -0.294444 0.0546875 -0.148438\nv 0.476562 0.0622866 -0.148438\nv 0.490196 0.0546875 -0.148438\nv 0.484375 0.0584353 -0.148438\nv -0.291378 0.0625 -0.148438\nv -0.289062 0.0671165 -0.148438\nv 0.445312 0.0697012 -0.148438\nv 0.453125 0.0676545 -0.148438\nv 0.460938 0.0663223 -0.148438\nv 0.475966 0.0625 -0.148438\nv 0.46875 0.0652452 -0.148438\nv 0.476562 0.0625 -0.14302\nv -0.285027 0.0703125 -0.148438\nv -0.28125 0.0729609 -0.148438\nv -0.273438 0.0773639 -0.148438\nv -0.226562 0.077989 -0.148438\nv -0.21875 0.0759884 -0.148438\nv -0.210938 0.0746478 -0.148438\nv -0.203125 0.0744512 -0.148438\nv -0.195312 0.0746376 -0.148438\nv -0.1875 0.0750307 -0.148438\nv -0.179688 0.0753494 -0.148438\nv -0.171875 0.0753649 -0.148438\nv -0.164062 0.0752852 -0.148438\nv -0.15625 0.0753057 -0.148438\nv -0.148438 0.0753701 -0.148438\nv -0.140625 0.0751659 -0.148438\nv -0.132812 0.0750729 -0.148438\nv -0.125 0.0750367 -0.148438\nv -0.117188 0.0749706 -0.148438\nv -0.109375 0.0749037 -0.148438\nv -0.101562 0.0748651 -0.148438\nv -0.09375 0.0749124 -0.148438\nv -0.0859375 0.0748924 -0.148438\nv -0.078125 0.0748218 -0.148438\nv -0.0703125 0.074678 -0.148438\nv -0.0625 0.0744761 -0.148438\nv -0.0546875 0.0742748 -0.148438\nv -0.046875 0.07412 -0.148438\nv -0.0390625 0.0739812 -0.148438\nv -0.03125 0.0738159 -0.148438\nv -0.0234375 0.0736332 -0.148438\nv -0.015625 0.0735098 -0.148438\nv -0.0078125 0.0734242 -0.148438\nv 0 0.0733323 -0.148438\nv 0.0078125 0.0732592 -0.148438\nv 0.015625 0.0732585 -0.148438\nv 0.0234375 0.0732736 -0.148438\nv 0.03125 0.0732718 -0.148438\nv 0.0390625 0.073233 -0.148438\nv 0.046875 0.0731897 -0.148438\nv 0.0546875 0.0731089 -0.148438\nv 0.0625 0.0730579 -0.148438\nv 0.0703125 0.0730255 -0.148438\nv 0.078125 0.0730005 -0.148438\nv 0.0859375 0.0730182 -0.148438\nv 0.09375 0.0729998 -0.148438\nv 0.101562 0.0729307 -0.148438\nv 0.109375 0.0729069 -0.148438\nv 0.117188 0.072884 -0.148438\nv 0.125 0.0729259 -0.148438\nv 0.132812 0.0727907 -0.148438\nv 0.140625 0.0726326 -0.148438\nv 0.148438 0.0724813 -0.148438\nv 0.15625 0.0723317 -0.148438\nv 0.164062 0.0721807 -0.148438\nv 0.171875 0.0720853 -0.148438\nv 0.179688 0.0720269 -0.148438\nv 0.1875 0.0720106 -0.148438\nv 0.195312 0.0719384 -0.148438\nv 0.203125 0.071865 -0.148438\nv 0.210938 0.0718116 -0.148438\nv 0.21875 0.0717588 -0.148438\nv 0.226562 0.0718502 -0.148438\nv 0.234375 0.0719724 -0.148438\nv 0.242188 0.0721155 -0.148438\nv 0.25 0.0723136 -0.148438\nv 0.257812 0.0725168 -0.148438\nv 0.265625 0.0726679 -0.148438\nv 0.273438 0.0728301 -0.148438\nv 0.28125 0.0730267 -0.148438\nv 0.289062 0.0732114 -0.148438\nv 0.296875 0.0733342 -0.148438\nv 0.304688 0.0734034 -0.148438\nv 0.3125 0.0734426 -0.148438\nv 0.320312 0.0734785 -0.148438\nv 0.328125 0.0735363 -0.148438\nv 0.335938 0.0735933 -0.148438\nv 0.34375 0.0736057 -0.148438\nv 0.351562 0.0736296 -0.148438\nv 0.359375 0.07364 -0.148438\nv 0.367188 0.0734842 -0.148438\nv 0.375 0.0733672 -0.148438\nv 0.382812 0.0730574 -0.148438\nv 0.390625 0.0727214 -0.148438\nv 0.398438 0.0725685 -0.148438\nv 0.40625 0.0724552 -0.148438\nv 0.414062 0.0723442 -0.148438\nv 0.421875 0.0722221 -0.148438\nv 0.429688 0.0719607 -0.148438\nv 0.442451 0.0703125 -0.148438\nv 0.4375 0.0713042 -0.148438\nv -0.272027 0.078125 -0.148438\nv -0.265625 0.0831163 -0.148438\nv -0.226934 0.078125 -0.148438\nv -0.234375 0.0820176 -0.148438\nv -0.26217 0.0859375 -0.148438\nv -0.257812 0.0892729 -0.148438\nv -0.25 0.0900178 -0.148438\nv -0.239874 0.0859375 -0.148438\nv -0.242188 0.0872201 -0.148438\nv -0.28125 0.167732 -0.148438\nv -0.273438 0.166517 -0.148438\nv -0.265625 0.166088 -0.148438\nv -0.257812 0.168968 -0.148438\nv -0.287531 0.171875 -0.148438\nv -0.289062 0.17396 -0.148438\nv -0.255325 0.171875 -0.148438\nv -0.292961 0.179688 -0.148438\nv -0.296875 0.187293 -0.148438\nv -0.250304 0.179688 -0.148438\nv -0.25 0.180058 -0.148438\nv -0.25 0.179688 -0.140749\nv -0.296961 0.1875 -0.148438\nv -0.245698 0.1875 -0.148438\nv -0.299581 0.195312 -0.148438\nv -0.242974 0.195312 -0.148438\nv -0.242188 0.199606 -0.148438\nv -0.300949 0.203125 -0.148438\nv -0.241545 0.203125 -0.148438\nv -0.300971 0.210938 -0.148438\nv -0.240613 0.210938 -0.148438\nv -0.300734 0.21875 -0.148438\nv -0.239998 0.21875 -0.148438\nv -0.300566 0.226562 -0.148438\nv -0.239723 0.226562 -0.148438\nv -0.300534 0.234375 -0.148438\nv -0.240063 0.234375 -0.148438\nv -0.300464 0.242188 -0.148438\nv -0.240537 0.242188 -0.148438\nv -0.300443 0.25 -0.148438\nv -0.241343 0.25 -0.148438\nv -0.242188 0.254901 -0.148438\nv -0.300251 0.257812 -0.148438\nv -0.242706 0.257812 -0.148438\nv -0.299888 0.265625 -0.148438\nv -0.24389 0.265625 -0.148438\nv -0.298652 0.273438 -0.148438\nv -0.244324 0.273438 -0.148438\nv -0.297103 0.28125 -0.148438\nv -0.296875 0.282297 -0.148438\nv -0.24524 0.28125 -0.148438\nv -0.295394 0.289062 -0.148438\nv -0.247124 0.289062 -0.148438\nv -0.293636 0.296875 -0.148438\nv -0.249628 0.296875 -0.148438\nv -0.25 0.297956 -0.148438\nv -0.29159 0.304688 -0.148438\nv -0.289062 0.311431 -0.148438\nv -0.252465 0.304688 -0.148438\nv -0.288555 0.3125 -0.148438\nv -0.289062 0.3125 -0.146955\nv -0.25433 0.3125 -0.148438\nv -0.286865 0.320312 -0.148438\nv -0.289062 0.320312 -0.143817\nv -0.256361 0.320312 -0.148438\nv -0.285235 0.328125 -0.148438\nv -0.289062 0.328125 -0.141187\nv -0.257645 0.328125 -0.148438\nv -0.257812 0.32885 -0.148438\nv -0.283562 0.335938 -0.148438\nv -0.289062 0.335938 -0.140965\nv -0.25971 0.335938 -0.148438\nv -0.282391 0.34375 -0.148438\nv -0.289062 0.34375 -0.140751\nv -0.26166 0.34375 -0.148438\nv -0.281461 0.351562 -0.148438\nv -0.28125 0.352324 -0.148438\nv -0.263105 0.351562 -0.148438\nv -0.278105 0.359375 -0.148438\nv -0.28125 0.359375 -0.146294\nv -0.264513 0.359375 -0.148438\nv -0.265625 0.362642 -0.148438\nv -0.275413 0.367188 -0.148438\nv -0.28125 0.367188 -0.144993\nv -0.269092 0.367188 -0.148438\nv -0.273438 0.373291 -0.148438\nv -0.265625 0.367188 -0.145892\nv -0.28125 0.375 -0.143213\nv -0.273438 0.375 -0.148001\nv -0.265625 0.375 -0.142788\nv -0.273438 0.382812 -0.142951\nv -0.289062 0.59127 -0.148438\nv -0.289062 0.585938 -0.144616\nv -0.28125 0.588936 -0.148438\nv -0.28125 0.585938 -0.146258\nv -0.273438 0.593413 -0.148438\nv -0.273438 0.585938 -0.142532\nv -0.291721 0.59375 -0.148438\nv -0.296875 0.600733 -0.148438\nv -0.296875 0.59375 -0.14298\nv -0.273256 0.59375 -0.148438\nv -0.297656 0.601562 -0.148438\nv -0.270765 0.601562 -0.148438\nv -0.301331 0.609375 -0.148438\nv -0.304688 0.609375 -0.14225\nv -0.269663 0.609375 -0.148438\nv -0.304483 0.617188 -0.148438\nv -0.304688 0.617396 -0.148438\nv -0.304688 0.617188 -0.147957\nv -0.269198 0.617188 -0.148438\nv -0.310466 0.625 -0.148438\nv -0.3125 0.629984 -0.148438\nv -0.269281 0.625 -0.148438\nv -0.313481 0.632812 -0.148438\nv -0.269586 0.632812 -0.148438\nv -0.315467 0.640625 -0.148438\nv -0.270435 0.640625 -0.148438\nv -0.317267 0.648438 -0.148438\nv -0.271346 0.648438 -0.148438\nv -0.318954 0.65625 -0.148438\nv -0.272202 0.65625 -0.148438\nv -0.319491 0.664062 -0.148438\nv -0.272682 0.664062 -0.148438\nv -0.320028 0.671875 -0.148438\nv -0.320312 0.677535 -0.148438\nv -0.27311 0.671875 -0.148438\nv -0.273438 0.67744 -0.148438\nv -0.320419 0.679688 -0.148438\nv -0.27357 0.679688 -0.148438\nv -0.320708 0.6875 -0.148438\nv -0.274014 0.6875 -0.148438\nv -0.320878 0.695312 -0.148438\nv -0.274398 0.695312 -0.148438\nv -0.32098 0.703125 -0.148438\nv -0.27494 0.703125 -0.148438\nv -0.321043 0.710938 -0.148438\nv -0.275994 0.710938 -0.148438\nv -0.321447 0.71875 -0.148438\nv -0.277434 0.71875 -0.148438\nv -0.32185 0.726562 -0.148438\nv -0.279066 0.726562 -0.148438\nv -0.322666 0.734375 -0.148438\nv -0.280441 0.734375 -0.148438\nv -0.28125 0.738587 -0.148438\nv -0.323541 0.742188 -0.148438\nv -0.281937 0.742188 -0.148438\nv -0.324276 0.75 -0.148438\nv -0.283288 0.75 -0.148438\nv -0.324616 0.757812 -0.148438\nv -0.284839 0.757812 -0.148438\nv -0.324511 0.765625 -0.148438\nv -0.286631 0.765625 -0.148438\nv -0.289062 0.771965 -0.148438\nv -0.323956 0.773438 -0.148438\nv -0.290049 0.773438 -0.148438\nv -0.296875 0.781184 -0.148438\nv -0.321879 0.78125 -0.148438\nv -0.320312 0.785044 -0.148438\nv -0.296949 0.78125 -0.148438\nv -0.304688 0.786793 -0.148438\nv -0.296875 0.78125 -0.147925\nv -0.315051 0.789062 -0.148438\nv -0.309951 0.789062 -0.148438\nv -0.3125 0.7905 -0.148438\nv -0.304688 0.789062 -0.141252\nv 0.0546875 -0.540308 -0.140625\nv 0.0625 -0.541744 -0.140625\nv 0.0703125 -0.542989 -0.140625\nv 0.078125 -0.543824 -0.140625\nv 0.0859375 -0.543675 -0.140625\nv 0.09375 -0.543309 -0.140625\nv 0.101562 -0.542802 -0.140625\nv 0.109375 -0.542232 -0.140625\nv 0.117188 -0.541312 -0.140625\nv 0.125 -0.540034 -0.140625\nv 0.0234375 -0.531283 -0.140625\nv 0.03125 -0.534074 -0.140625\nv 0.0390625 -0.536634 -0.140625\nv 0.0476946 -0.539062 -0.140625\nv 0.046875 -0.538844 -0.140625\nv 0.046875 -0.539062 -0.137486\nv 0.129863 -0.539062 -0.140625\nv 0.132812 -0.538131 -0.140625\nv 0.140625 -0.535115 -0.140625\nv 0.148438 -0.531711 -0.140625\nv 0.0078125 -0.52496 -0.140625\nv 0.0233402 -0.53125 -0.140625\nv 0.015625 -0.528107 -0.140625\nv 0.149396 -0.53125 -0.140625\nv 0.15625 -0.527029 -0.140625\nv 0.00542488 -0.523438 -0.140625\nv 0.161198 -0.523438 -0.140625\nv 0.164062 -0.517646 -0.140625\nv 0.00431222 -0.515625 -0.140625\nv 0.16509 -0.515625 -0.140625\nv 0.164062 -0.515625 -0.136285\nv 0.00692251 -0.507812 -0.140625\nv 0.0078125 -0.507237 -0.140625\nv 0.015625 -0.501371 -0.140625\nv 0.15625 -0.502896 -0.140625\nv 0.16441 -0.507812 -0.140625\nv 0.164062 -0.507613 -0.140625\nv 0.164062 -0.507812 -0.139312\nv 0.0178054 -0.5 -0.140625\nv 0.0234375 -0.498198 -0.140625\nv 0.03125 -0.495845 -0.140625\nv 0.0390625 -0.493859 -0.140625\nv 0.132812 -0.49252 -0.140625\nv 0.140625 -0.495429 -0.140625\nv 0.151838 -0.5 -0.140625\nv 0.148438 -0.498599 -0.140625\nv 0.0462245 -0.492188 -0.140625\nv 0.046875 -0.492038 -0.140625\nv 0.0546875 -0.490325 -0.140625\nv 0.0625 -0.488404 -0.140625\nv 0.0703125 -0.486458 -0.140625\nv 0.078125 -0.484856 -0.140625\nv 0.0859375 -0.484831 -0.140625\nv 0.09375 -0.485102 -0.140625\nv 0.101562 -0.485912 -0.140625\nv 0.109375 -0.487033 -0.140625\nv 0.117188 -0.488376 -0.140625\nv 0.131723 -0.492188 -0.140625\nv 0.125 -0.490166 -0.140625\nv 0.078125 -0.484375 -0.137901\nv 0.0859375 -0.484375 -0.138638\nv 0.09375 -0.484375 -0.136693\nv 0.453125 -0.0655925 -0.140625\nv 0.460938 -0.0672589 -0.140625\nv 0.46875 -0.0641645 -0.140625\nv 0.476562 -0.0636982 -0.140625\nv -0.289062 -0.059875 -0.140625\nv -0.28125 -0.0624884 -0.140625\nv -0.28125 -0.0625 -0.140418\nv -0.273438 -0.0605665 -0.140625\nv 0.449104 -0.0625 -0.140625\nv 0.481303 -0.0625 -0.140625\nv 0.484375 -0.0609176 -0.140625\nv -0.293946 -0.0546875 -0.140625\nv -0.296875 -0.0497305 -0.140625\nv -0.269231 -0.0546875 -0.140625\nv -0.265625 -0.0485249 -0.140625\nv 0.446236 -0.0546875 -0.140625\nv 0.445312 -0.0488988 -0.140625\nv 0.488878 -0.0546875 -0.140625\nv -0.297721 -0.046875 -0.140625\nv -0.264937 -0.046875 -0.140625\nv 0.44503 -0.046875 -0.140625\nv 0.445312 -0.046875 -0.133451\nv 0.491851 -0.046875 -0.140625\nv 0.492188 -0.0453859 -0.140625\nv -0.299302 -0.0390625 -0.140625\nv -0.262345 -0.0390625 -0.140625\nv 0.445174 -0.0390625 -0.140625\nv 0.445312 -0.0390625 -0.137342\nv 0.493377 -0.0390625 -0.140625\nv -0.29968 -0.03125 -0.140625\nv -0.261285 -0.03125 -0.140625\nv 0.444453 -0.03125 -0.140625\nv 0.495418 -0.03125 -0.140625\nv -0.299598 -0.0234375 -0.140625\nv -0.260648 -0.0234375 -0.140625\nv 0.44313 -0.0234375 -0.140625\nv 0.498181 -0.0234375 -0.140625\nv -0.300775 -0.015625 -0.140625\nv -0.259573 -0.015625 -0.140625\nv 0.442486 -0.015625 -0.140625\nv 0.499876 -0.015625 -0.140625\nv 0.5 -0.013183 -0.140625\nv 0.5 -0.015625 -0.134858\nv -0.302538 -0.0078125 -0.140625\nv -0.304688 -0.00045521 -0.140625\nv -0.259977 -0.0078125 -0.140625\nv 0.44074 -0.0078125 -0.140625\nv 0.500214 -0.0078125 -0.140625\nv -0.304793 0 -0.140625\nv -0.304688 0.00214912 -0.140625\nv -0.259836 0 -0.140625\nv 0.440013 0 -0.140625\nv 0.500265 0 -0.140625\nv -0.304337 0.0078125 -0.140625\nv -0.259155 0.0078125 -0.140625\nv -0.257812 0.0109533 -0.140625\nv 0.441498 0.0078125 -0.140625\nv 0.500211 0.0078125 -0.140625\nv -0.302957 0.015625 -0.140625\nv -0.254915 0.015625 -0.140625\nv -0.25 0.0194105 -0.140625\nv -0.242188 0.0208404 -0.140625\nv -0.234375 0.0216015 -0.140625\nv 0.429688 0.0217319 -0.140625\nv 0.439522 0.015625 -0.140625\nv 0.4375 0.0172407 -0.140625\nv 0.500206 0.015625 -0.140625\nv -0.301859 0.0234375 -0.140625\nv -0.228615 0.0234375 -0.140625\nv -0.226562 0.023987 -0.140625\nv -0.21875 0.0264564 -0.140625\nv -0.210938 0.0276459 -0.140625\nv -0.203125 0.0280536 -0.140625\nv -0.195312 0.0281299 -0.140625\nv -0.1875 0.0282108 -0.140625\nv -0.179688 0.027969 -0.140625\nv -0.171875 0.0276287 -0.140625\nv -0.164062 0.027468 -0.140625\nv -0.15625 0.0275655 -0.140625\nv -0.148438 0.0276987 -0.140625\nv -0.140625 0.0276706 -0.140625\nv -0.132812 0.0277115 -0.140625\nv -0.125 0.0276652 -0.140625\nv -0.117188 0.0276096 -0.140625\nv -0.109375 0.0273857 -0.140625\nv -0.101562 0.0272394 -0.140625\nv -0.09375 0.027074 -0.140625\nv -0.0859375 0.0268962 -0.140625\nv -0.078125 0.0267009 -0.140625\nv -0.0703125 0.0264323 -0.140625\nv -0.0625 0.0261859 -0.140625\nv -0.0546875 0.0260215 -0.140625\nv -0.046875 0.0260123 -0.140625\nv -0.0390625 0.0260729 -0.140625\nv -0.03125 0.0261759 -0.140625\nv -0.0234375 0.0262224 -0.140625\nv -0.015625 0.0262745 -0.140625\nv -0.0078125 0.0263852 -0.140625\nv 0 0.0264432 -0.140625\nv 0.0078125 0.0264574 -0.140625\nv 0.015625 0.0264954 -0.140625\nv 0.0234375 0.0264842 -0.140625\nv 0.03125 0.026463 -0.140625\nv 0.0390625 0.026454 -0.140625\nv 0.046875 0.0264338 -0.140625\nv 0.0546875 0.0263887 -0.140625\nv 0.0625 0.0263361 -0.140625\nv 0.0703125 0.0262177 -0.140625\nv 0.078125 0.0260927 -0.140625\nv 0.0859375 0.0260241 -0.140625\nv 0.09375 0.025937 -0.140625\nv 0.101562 0.0258317 -0.140625\nv 0.109375 0.0257836 -0.140625\nv 0.117188 0.0256385 -0.140625\nv 0.125 0.0255022 -0.140625\nv 0.132812 0.0253146 -0.140625\nv 0.140625 0.0251448 -0.140625\nv 0.148438 0.0249781 -0.140625\nv 0.15625 0.0248224 -0.140625\nv 0.164062 0.0246635 -0.140625\nv 0.171875 0.024498 -0.140625\nv 0.179688 0.0243779 -0.140625\nv 0.1875 0.0242742 -0.140625\nv 0.195312 0.0241572 -0.140625\nv 0.203125 0.0241292 -0.140625\nv 0.210938 0.0242229 -0.140625\nv 0.21875 0.024344 -0.140625\nv 0.226562 0.024485 -0.140625\nv 0.234375 0.0245935 -0.140625\nv 0.242188 0.0246834 -0.140625\nv 0.25 0.0247455 -0.140625\nv 0.257812 0.0248121 -0.140625\nv 0.265625 0.0249253 -0.140625\nv 0.273438 0.0251116 -0.140625\nv 0.28125 0.0253374 -0.140625\nv 0.289062 0.0254504 -0.140625\nv 0.296875 0.0255233 -0.140625\nv 0.304688 0.0256115 -0.140625\nv 0.3125 0.0258071 -0.140625\nv 0.320312 0.0260779 -0.140625\nv 0.328125 0.0262582 -0.140625\nv 0.335938 0.0263532 -0.140625\nv 0.34375 0.0264872 -0.140625\nv 0.351562 0.0266219 -0.140625\nv 0.359375 0.0267186 -0.140625\nv 0.367188 0.0267558 -0.140625\nv 0.375 0.0268807 -0.140625\nv 0.382812 0.0268829 -0.140625\nv 0.390625 0.026581 -0.140625\nv 0.398438 0.0261047 -0.140625\nv 0.40625 0.0257037 -0.140625\nv 0.414062 0.0249531 -0.140625\nv 0.422457 0.0234375 -0.140625\nv 0.421875 0.0235462 -0.140625\nv 0.50047 0.0234375 -0.140625\nv 0.5 0.0251688 -0.140625\nv -0.300628 0.03125 -0.140625\nv 0.497817 0.03125 -0.140625\nv -0.299544 0.0390625 -0.140625\nv 0.495253 0.0390625 -0.140625\nv -0.297219 0.046875 -0.140625\nv -0.296875 0.0477816 -0.140625\nv 0.493159 0.046875 -0.140625\nv 0.492188 0.0502629 -0.140625\nv -0.294435 0.0546875 -0.140625\nv 0.490568 0.0546875 -0.140625\nv 0.484375 0.0586117 -0.140625\nv -0.291534 0.0625 -0.140625\nv -0.289062 0.0677558 -0.140625\nv 0.445312 0.0698807 -0.140625\nv 0.453125 0.0678639 -0.140625\nv 0.460938 0.066461 -0.140625\nv 0.46875 0.0654737 -0.140625\nv 0.476741 0.0625 -0.140625\nv 0.476562 0.0625981 -0.140625\nv -0.286337 0.0703125 -0.140625\nv -0.28125 0.0737175 -0.140625\nv -0.273438 0.077667 -0.140625\nv -0.226562 0.0778501 -0.140625\nv -0.21875 0.0758471 -0.140625\nv -0.210938 0.0745031 -0.140625\nv -0.203125 0.0743787 -0.140625\nv -0.195312 0.0745776 -0.140625\nv -0.1875 0.0749425 -0.140625\nv -0.179688 0.0752756 -0.140625\nv -0.171875 0.0753093 -0.140625\nv -0.164062 0.0752377 -0.140625\nv -0.15625 0.0752901 -0.140625\nv -0.148438 0.075289 -0.140625\nv -0.140625 0.0750349 -0.140625\nv -0.132812 0.0750071 -0.140625\nv -0.125 0.0751071 -0.140625\nv -0.117188 0.0750578 -0.140625\nv -0.109375 0.074973 -0.140625\nv -0.101562 0.0749561 -0.140625\nv -0.09375 0.075064 -0.140625\nv -0.0859375 0.0750562 -0.140625\nv -0.078125 0.0749276 -0.140625\nv -0.0703125 0.0747331 -0.140625\nv -0.0625 0.0744862 -0.140625\nv -0.0546875 0.0742909 -0.140625\nv -0.046875 0.0741082 -0.140625\nv -0.0390625 0.073943 -0.140625\nv -0.03125 0.0738273 -0.140625\nv -0.0234375 0.073686 -0.140625\nv -0.015625 0.0735729 -0.140625\nv -0.0078125 0.0735146 -0.140625\nv 0 0.0734558 -0.140625\nv 0.0078125 0.0733798 -0.140625\nv 0.015625 0.0733393 -0.140625\nv 0.0234375 0.073354 -0.140625\nv 0.03125 0.0733735 -0.140625\nv 0.0390625 0.0733461 -0.140625\nv 0.046875 0.073308 -0.140625\nv 0.0546875 0.0732385 -0.140625\nv 0.0625 0.0731809 -0.140625\nv 0.0703125 0.0731421 -0.140625\nv 0.078125 0.0731278 -0.140625\nv 0.0859375 0.073148 -0.140625\nv 0.09375 0.0731105 -0.140625\nv 0.101562 0.0730607 -0.140625\nv 0.109375 0.0729906 -0.140625\nv 0.117188 0.0729845 -0.140625\nv 0.125 0.0729533 -0.140625\nv 0.132812 0.072844 -0.140625\nv 0.140625 0.0727184 -0.140625\nv 0.148438 0.0725575 -0.140625\nv 0.15625 0.0724268 -0.140625\nv 0.164062 0.0722954 -0.140625\nv 0.171875 0.0722215 -0.140625\nv 0.179688 0.0721897 -0.140625\nv 0.1875 0.0721425 -0.140625\nv 0.195312 0.0721046 -0.140625\nv 0.203125 0.0720644 -0.140625\nv 0.210938 0.0719971 -0.140625\nv 0.21875 0.071948 -0.140625\nv 0.226562 0.0719848 -0.140625\nv 0.234375 0.0721149 -0.140625\nv 0.242188 0.0721908 -0.140625\nv 0.25 0.0723663 -0.140625\nv 0.257812 0.072598 -0.140625\nv 0.265625 0.072749 -0.140625\nv 0.273438 0.0729222 -0.140625\nv 0.28125 0.0731197 -0.140625\nv 0.289062 0.0732746 -0.140625\nv 0.296875 0.0733802 -0.140625\nv 0.304688 0.0734406 -0.140625\nv 0.3125 0.0734684 -0.140625\nv 0.320312 0.0734892 -0.140625\nv 0.328125 0.0735376 -0.140625\nv 0.335938 0.0736074 -0.140625\nv 0.34375 0.0736525 -0.140625\nv 0.351562 0.0736793 -0.140625\nv 0.359375 0.0737116 -0.140625\nv 0.367188 0.0735635 -0.140625\nv 0.375 0.0734328 -0.140625\nv 0.382812 0.0731487 -0.140625\nv 0.390625 0.0728246 -0.140625\nv 0.398438 0.0726657 -0.140625\nv 0.40625 0.0725507 -0.140625\nv 0.414062 0.0724349 -0.140625\nv 0.421875 0.0722704 -0.140625\nv 0.429688 0.0720091 -0.140625\nv 0.443188 0.0703125 -0.140625\nv 0.4375 0.0713881 -0.140625\nv -0.272648 0.078125 -0.140625\nv -0.265625 0.083567 -0.140625\nv -0.227316 0.078125 -0.140625\nv -0.234375 0.081753 -0.140625\nv -0.262464 0.0859375 -0.140625\nv -0.257812 0.0896533 -0.140625\nv -0.25 0.0897441 -0.140625\nv -0.240401 0.0859375 -0.140625\nv -0.242188 0.0868716 -0.140625\nv -0.28125 0.167808 -0.140625\nv -0.273438 0.166963 -0.140625\nv -0.265625 0.165938 -0.140625\nv -0.257812 0.168872 -0.140625\nv -0.288001 0.171875 -0.140625\nv -0.289062 0.173329 -0.140625\nv -0.255151 0.171875 -0.140625\nv -0.25 0.179676 -0.140625\nv -0.293428 0.179688 -0.140625\nv -0.296875 0.186295 -0.140625\nv -0.249995 0.179688 -0.140625\nv -0.297367 0.1875 -0.140625\nv -0.245599 0.1875 -0.140625\nv -0.299804 0.195312 -0.140625\nv -0.242697 0.195312 -0.140625\nv -0.242188 0.198566 -0.140625\nv -0.300932 0.203125 -0.140625\nv -0.241456 0.203125 -0.140625\nv -0.300836 0.210938 -0.140625\nv -0.240687 0.210938 -0.140625\nv -0.30061 0.21875 -0.140625\nv -0.240108 0.21875 -0.140625\nv -0.300459 0.226562 -0.140625\nv -0.239976 0.226562 -0.140625\nv -0.300392 0.234375 -0.140625\nv -0.240324 0.234375 -0.140625\nv -0.300267 0.242188 -0.140625\nv -0.240719 0.242188 -0.140625\nv -0.300392 0.25 -0.140625\nv -0.24155 0.25 -0.140625\nv -0.242188 0.253938 -0.140625\nv -0.300263 0.257812 -0.140625\nv -0.242832 0.257812 -0.140625\nv -0.299932 0.265625 -0.140625\nv -0.243837 0.265625 -0.140625\nv -0.298619 0.273438 -0.140625\nv -0.24424 0.273438 -0.140625\nv -0.297078 0.28125 -0.140625\nv -0.296875 0.282283 -0.140625\nv -0.245144 0.28125 -0.140625\nv -0.295512 0.289062 -0.140625\nv -0.247093 0.289062 -0.140625\nv -0.29394 0.296875 -0.140625\nv -0.249351 0.296875 -0.140625\nv -0.25 0.299069 -0.140625\nv -0.292345 0.304688 -0.140625\nv -0.251811 0.304688 -0.140625\nv -0.290832 0.3125 -0.140625\nv -0.253766 0.3125 -0.140625\nv -0.290123 0.320312 -0.140625\nv -0.255316 0.320312 -0.140625\nv -0.289271 0.328125 -0.140625\nv -0.256542 0.328125 -0.140625\nv -0.257812 0.334005 -0.140625\nv -0.289245 0.335938 -0.140625\nv -0.258256 0.335938 -0.140625\nv -0.257812 0.335938 -0.137762\nv -0.289144 0.34375 -0.140625\nv -0.289062 0.345617 -0.140625\nv -0.259717 0.34375 -0.140625\nv -0.288671 0.351562 -0.140625\nv -0.289062 0.351562 -0.139762\nv -0.260714 0.351562 -0.140625\nv -0.286899 0.359375 -0.140625\nv -0.289062 0.359375 -0.136647\nv -0.261052 0.359375 -0.140625\nv -0.285596 0.367188 -0.140625\nv -0.289062 0.367188 -0.135517\nv -0.262904 0.367188 -0.140625\nv -0.28321 0.375 -0.140625\nv -0.28125 0.379026 -0.140625\nv -0.264199 0.375 -0.140625\nv -0.265625 0.379077 -0.140625\nv -0.277283 0.382812 -0.140625\nv -0.28125 0.382812 -0.137891\nv -0.267982 0.382812 -0.140625\nv -0.273438 0.386556 -0.140625\nv -0.265625 0.382812 -0.136366\nv -0.273438 0.390625 -0.137044\nv -0.28125 0.570312 -0.133188\nv -0.296875 0.578125 -0.132988\nv -0.289062 0.579026 -0.140625\nv -0.289062 0.578125 -0.139848\nv -0.28125 0.578965 -0.140625\nv -0.28125 0.578125 -0.139869\nv -0.273438 0.584217 -0.140625\nv -0.273438 0.578125 -0.135036\nv -0.294585 0.585938 -0.140625\nv -0.296875 0.590052 -0.140625\nv -0.296875 0.585938 -0.137412\nv -0.272113 0.585938 -0.140625\nv -0.299708 0.59375 -0.140625\nv -0.304688 0.59375 -0.133292\nv -0.270329 0.59375 -0.140625\nv -0.303138 0.601562 -0.140625\nv -0.304688 0.606641 -0.140625\nv -0.304688 0.601562 -0.137517\nv -0.268745 0.601562 -0.140625\nv -0.305479 0.609375 -0.140625\nv -0.268682 0.609375 -0.140625\nv -0.307845 0.617188 -0.140625\nv -0.268913 0.617188 -0.140625\nv -0.312083 0.625 -0.140625\nv -0.3125 0.626266 -0.140625\nv -0.3125 0.625 -0.136715\nv -0.269108 0.625 -0.140625\nv -0.314384 0.632812 -0.140625\nv -0.269616 0.632812 -0.140625\nv -0.31628 0.640625 -0.140625\nv -0.270623 0.640625 -0.140625\nv -0.317879 0.648438 -0.140625\nv -0.271578 0.648438 -0.140625\nv -0.319257 0.65625 -0.140625\nv -0.272482 0.65625 -0.140625\nv -0.319638 0.664062 -0.140625\nv -0.272987 0.664062 -0.140625\nv -0.32007 0.671875 -0.140625\nv -0.320312 0.676481 -0.140625\nv -0.273377 0.671875 -0.140625\nv -0.273438 0.673147 -0.140625\nv -0.273438 0.671875 -0.139279\nv -0.32048 0.679688 -0.140625\nv -0.273751 0.679688 -0.140625\nv -0.320875 0.6875 -0.140625\nv -0.274165 0.6875 -0.140625\nv -0.321068 0.695312 -0.140625\nv -0.274507 0.695312 -0.140625\nv -0.321203 0.703125 -0.140625\nv -0.275137 0.703125 -0.140625\nv -0.321212 0.710938 -0.140625\nv -0.276131 0.710938 -0.140625\nv -0.321651 0.71875 -0.140625\nv -0.27752 0.71875 -0.140625\nv -0.322054 0.726562 -0.140625\nv -0.279049 0.726562 -0.140625\nv -0.322864 0.734375 -0.140625\nv -0.280314 0.734375 -0.140625\nv -0.28125 0.739548 -0.140625\nv -0.323743 0.742188 -0.140625\nv -0.28175 0.742188 -0.140625\nv -0.324509 0.75 -0.140625\nv -0.283225 0.75 -0.140625\nv -0.324928 0.757812 -0.140625\nv -0.284784 0.757812 -0.140625\nv -0.325007 0.765625 -0.140625\nv -0.286444 0.765625 -0.140625\nv -0.289062 0.773133 -0.140625\nv -0.324794 0.773438 -0.140625\nv -0.289252 0.773438 -0.140625\nv -0.289062 0.773438 -0.139173\nv -0.323318 0.78125 -0.140625\nv -0.320312 0.788486 -0.140625\nv -0.295963 0.78125 -0.140625\nv -0.296875 0.782271 -0.140625\nv -0.319665 0.789062 -0.140625\nv -0.320312 0.789062 -0.139751\nv -0.3125 0.793398 -0.140625\nv -0.304393 0.789062 -0.140625\nv -0.304688 0.789229 -0.140625\nv 0.046875 -0.53928 -0.132812\nv 0.0546875 -0.540862 -0.132812\nv 0.0625 -0.542215 -0.132812\nv 0.0703125 -0.54337 -0.132812\nv 0.078125 -0.544404 -0.132812\nv 0.0859375 -0.544651 -0.132812\nv 0.09375 -0.544269 -0.132812\nv 0.101562 -0.543762 -0.132812\nv 0.109375 -0.543099 -0.132812\nv 0.117188 -0.541868 -0.132812\nv 0.125 -0.540202 -0.132812\nv 0.0234375 -0.531601 -0.132812\nv 0.03125 -0.534569 -0.132812\nv 0.0457699 -0.539062 -0.132812\nv 0.0390625 -0.53697 -0.132812\nv 0.130134 -0.539062 -0.132812\nv 0.132812 -0.538102 -0.132812\nv 0.140625 -0.534966 -0.132812\nv 0.148438 -0.531303 -0.132812\nv 0.0078125 -0.524556 -0.132812\nv 0.0224861 -0.53125 -0.132812\nv 0.015625 -0.528355 -0.132812\nv 0.148537 -0.53125 -0.132812\nv 0.148438 -0.53125 -0.132312\nv 0.15625 -0.525556 -0.132812\nv 0.00571809 -0.523438 -0.132812\nv 0.15908 -0.523438 -0.132812\nv 0.00268378 -0.515625 -0.132812\nv 0.163192 -0.515625 -0.132812\nv 0.00492819 -0.507812 -0.132812\nv 0.0078125 -0.505975 -0.132812\nv 0.015625 -0.50068 -0.132812\nv 0.162263 -0.507812 -0.132812\nv 0.15625 -0.504264 -0.132812\nv 0.0166042 -0.5 -0.132812\nv 0.0234375 -0.497483 -0.132812\nv 0.03125 -0.494858 -0.132812\nv 0.0390625 -0.492998 -0.132812\nv 0.132812 -0.492329 -0.132812\nv 0.140625 -0.495812 -0.132812\nv 0.149981 -0.5 -0.132812\nv 0.148438 -0.499351 -0.132812\nv 0.148438 -0.5 -0.126631\nv 0.0425555 -0.492188 -0.132812\nv 0.0390625 -0.492188 -0.12714\nv 0.046875 -0.49117 -0.132812\nv 0.0546875 -0.489142 -0.132812\nv 0.0625 -0.487196 -0.132812\nv 0.0703125 -0.48529 -0.132812\nv 0.101562 -0.484596 -0.132812\nv 0.109375 -0.485924 -0.132812\nv 0.117188 -0.487477 -0.132812\nv 0.132433 -0.492188 -0.132812\nv 0.125 -0.489606 -0.132812\nv 0.0742715 -0.484375 -0.132812\nv 0.0703125 -0.484375 -0.127737\nv 0.078125 -0.483469 -0.132812\nv 0.0859375 -0.483038 -0.132812\nv 0.0997217 -0.484375 -0.132812\nv 0.09375 -0.483666 -0.132812\nv 0.101562 -0.484375 -0.131403\nv -0.28125 -0.0628009 -0.132812\nv 0.453125 -0.0655849 -0.132812\nv 0.460938 -0.0673004 -0.132812\nv 0.46875 -0.0642704 -0.132812\nv 0.476562 -0.0638028 -0.132812\nv -0.282678 -0.0625 -0.132812\nv -0.289062 -0.0604329 -0.132812\nv -0.27967 -0.0625 -0.132812\nv -0.273438 -0.0609032 -0.132812\nv 0.449375 -0.0625 -0.132812\nv 0.481593 -0.0625 -0.132812\nv 0.484375 -0.0610509 -0.132812\nv -0.294191 -0.0546875 -0.132812\nv -0.296875 -0.0499994 -0.132812\nv -0.269106 -0.0546875 -0.132812\nv -0.265625 -0.0484253 -0.132812\nv 0.446678 -0.0546875 -0.132812\nv 0.489015 -0.0546875 -0.132812\nv -0.2978 -0.046875 -0.132812\nv -0.264994 -0.046875 -0.132812\nv 0.445339 -0.046875 -0.132812\nv 0.492082 -0.046875 -0.132812\nv 0.492188 -0.0463934 -0.132812\nv 0.492188 -0.046875 -0.126985\nv -0.299298 -0.0390625 -0.132812\nv -0.26242 -0.0390625 -0.132812\nv 0.445509 -0.0390625 -0.132812\nv 0.445312 -0.0371811 -0.132812\nv 0.493537 -0.0390625 -0.132812\nv -0.299626 -0.03125 -0.132812\nv -0.261436 -0.03125 -0.132812\nv 0.444734 -0.03125 -0.132812\nv 0.495638 -0.03125 -0.132812\nv -0.299616 -0.0234375 -0.132812\nv -0.260819 -0.0234375 -0.132812\nv 0.443428 -0.0234375 -0.132812\nv 0.498467 -0.0234375 -0.132812\nv 0.5 -0.0158712 -0.132812\nv -0.300771 -0.015625 -0.132812\nv -0.259827 -0.015625 -0.132812\nv 0.442835 -0.015625 -0.132812\nv 0.500037 -0.015625 -0.132812\nv -0.302522 -0.0078125 -0.132812\nv -0.304688 -0.000450473 -0.132812\nv -0.260096 -0.0078125 -0.132812\nv 0.441075 -0.0078125 -0.132812\nv 0.500216 -0.0078125 -0.132812\nv -0.304793 0 -0.132812\nv -0.304688 0.00198505 -0.132812\nv -0.25997 0 -0.132812\nv 0.440214 0 -0.132812\nv 0.500168 0 -0.132812\nv 0.5 0 -0.127755\nv -0.304299 0.0078125 -0.132812\nv -0.259162 0.0078125 -0.132812\nv -0.257812 0.0107124 -0.132812\nv 0.441591 0.0078125 -0.132812\nv 0.500196 0.0078125 -0.132812\nv 0.5 0.0078125 -0.128085\nv -0.302974 0.015625 -0.132812\nv -0.254428 0.015625 -0.132812\nv -0.25 0.0190233 -0.132812\nv -0.242188 0.0203684 -0.132812\nv -0.234375 0.021295 -0.132812\nv 0.429688 0.0216639 -0.132812\nv 0.439526 0.015625 -0.132812\nv 0.4375 0.0172038 -0.132812\nv 0.500242 0.015625 -0.132812\nv 0.5 0.015625 -0.12626\nv -0.301923 0.0234375 -0.132812\nv -0.227883 0.0234375 -0.132812\nv -0.226562 0.0238108 -0.132812\nv -0.21875 0.0263876 -0.132812\nv -0.210938 0.0275045 -0.132812\nv -0.203125 0.0279068 -0.132812\nv -0.195312 0.0280021 -0.132812\nv -0.1875 0.0280349 -0.132812\nv -0.179688 0.0278411 -0.132812\nv -0.171875 0.0275995 -0.132812\nv -0.164062 0.0274859 -0.132812\nv -0.15625 0.02753 -0.132812\nv -0.148438 0.0276292 -0.132812\nv -0.140625 0.0276487 -0.132812\nv -0.132812 0.027672 -0.132812\nv -0.125 0.0277135 -0.132812\nv -0.117188 0.02763 -0.132812\nv -0.109375 0.0273199 -0.132812\nv -0.101562 0.0271261 -0.132812\nv -0.09375 0.0269442 -0.132812\nv -0.0859375 0.0267805 -0.132812\nv -0.078125 0.0265997 -0.132812\nv -0.0703125 0.0263567 -0.132812\nv -0.0625 0.026118 -0.132812\nv -0.0546875 0.0260015 -0.132812\nv -0.046875 0.0260266 -0.132812\nv -0.0390625 0.0260827 -0.132812\nv -0.03125 0.0261383 -0.132812\nv -0.0234375 0.0261891 -0.132812\nv -0.015625 0.0262344 -0.132812\nv -0.0078125 0.0263324 -0.132812\nv 0 0.0263825 -0.132812\nv 0.0078125 0.0263752 -0.132812\nv 0.015625 0.02649 -0.132812\nv 0.0234375 0.0265073 -0.132812\nv 0.03125 0.0264941 -0.132812\nv 0.0390625 0.0264663 -0.132812\nv 0.046875 0.0264892 -0.132812\nv 0.0546875 0.0264419 -0.132812\nv 0.0625 0.0263918 -0.132812\nv 0.0703125 0.0262939 -0.132812\nv 0.078125 0.0261691 -0.132812\nv 0.0859375 0.0260968 -0.132812\nv 0.09375 0.0260196 -0.132812\nv 0.101562 0.0259652 -0.132812\nv 0.109375 0.0258641 -0.132812\nv 0.117188 0.0257324 -0.132812\nv 0.125 0.0255992 -0.132812\nv 0.132812 0.025459 -0.132812\nv 0.140625 0.0252657 -0.132812\nv 0.148438 0.0251222 -0.132812\nv 0.15625 0.0249726 -0.132812\nv 0.164062 0.0248112 -0.132812\nv 0.171875 0.0246299 -0.132812\nv 0.179688 0.0244735 -0.132812\nv 0.1875 0.0243561 -0.132812\nv 0.195312 0.024273 -0.132812\nv 0.203125 0.0242369 -0.132812\nv 0.210938 0.0242793 -0.132812\nv 0.21875 0.0243667 -0.132812\nv 0.226562 0.0244795 -0.132812\nv 0.234375 0.0245732 -0.132812\nv 0.242188 0.024681 -0.132812\nv 0.25 0.0247612 -0.132812\nv 0.257812 0.0248173 -0.132812\nv 0.265625 0.0249226 -0.132812\nv 0.273438 0.0250769 -0.132812\nv 0.28125 0.0252868 -0.132812\nv 0.289062 0.0254057 -0.132812\nv 0.296875 0.0255018 -0.132812\nv 0.304688 0.0256489 -0.132812\nv 0.3125 0.0258489 -0.132812\nv 0.320312 0.0261173 -0.132812\nv 0.328125 0.0263581 -0.132812\nv 0.335938 0.0264511 -0.132812\nv 0.34375 0.0265539 -0.132812\nv 0.351562 0.0266809 -0.132812\nv 0.359375 0.0267596 -0.132812\nv 0.367188 0.0267784 -0.132812\nv 0.375 0.0268761 -0.132812\nv 0.382812 0.02687 -0.132812\nv 0.390625 0.0265602 -0.132812\nv 0.398438 0.0260906 -0.132812\nv 0.40625 0.0256577 -0.132812\nv 0.414062 0.0249062 -0.132812\nv 0.422017 0.0234375 -0.132812\nv 0.421875 0.0234638 -0.132812\nv 0.421875 0.0234375 -0.130473\nv 0.500427 0.0234375 -0.132812\nv 0.5 0.0250183 -0.132812\nv -0.300687 0.03125 -0.132812\nv 0.4978 0.03125 -0.132812\nv -0.299606 0.0390625 -0.132812\nv 0.495184 0.0390625 -0.132812\nv -0.297252 0.046875 -0.132812\nv -0.296875 0.0478495 -0.132812\nv 0.49305 0.046875 -0.132812\nv 0.492188 0.0500096 -0.132812\nv -0.294438 0.0546875 -0.132812\nv 0.490603 0.0546875 -0.132812\nv 0.484375 0.058736 -0.132812\nv -0.291648 0.0625 -0.132812\nv -0.289062 0.0677349 -0.132812\nv 0.445312 0.0700907 -0.132812\nv 0.453125 0.0680703 -0.132812\nv 0.460938 0.066613 -0.132812\nv 0.46875 0.0657629 -0.132812\nv 0.477197 0.0625 -0.132812\nv 0.476562 0.0628602 -0.132812\nv -0.286658 0.0703125 -0.132812\nv -0.28125 0.0741561 -0.132812\nv -0.273438 0.077822 -0.132812\nv -0.226562 0.07784 -0.132812\nv -0.21875 0.0757416 -0.132812\nv -0.210938 0.0743659 -0.132812\nv -0.203125 0.0743041 -0.132812\nv -0.195312 0.0744989 -0.132812\nv -0.1875 0.0749092 -0.132812\nv -0.179688 0.0752063 -0.132812\nv -0.171875 0.0752543 -0.132812\nv -0.164062 0.0752187 -0.132812\nv -0.15625 0.075224 -0.132812\nv -0.148438 0.075182 -0.132812\nv -0.140625 0.0750018 -0.132812\nv -0.132812 0.074929 -0.132812\nv -0.125 0.0751657 -0.132812\nv -0.117188 0.075205 -0.132812\nv -0.109375 0.075176 -0.132812\nv -0.101562 0.0751338 -0.132812\nv -0.09375 0.0751644 -0.132812\nv -0.0859375 0.0751102 -0.132812\nv -0.078125 0.074921 -0.132812\nv -0.0703125 0.074692 -0.132812\nv -0.0625 0.0745015 -0.132812\nv -0.0546875 0.0743201 -0.132812\nv -0.046875 0.0741161 -0.132812\nv -0.0390625 0.0739385 -0.132812\nv -0.03125 0.0737939 -0.132812\nv -0.0234375 0.0736701 -0.132812\nv -0.015625 0.0735938 -0.132812\nv -0.0078125 0.073573 -0.132812\nv 0 0.0735303 -0.132812\nv 0.0078125 0.0734924 -0.132812\nv 0.015625 0.0734935 -0.132812\nv 0.0234375 0.0734474 -0.132812\nv 0.03125 0.0734487 -0.132812\nv 0.0390625 0.0734409 -0.132812\nv 0.046875 0.0734045 -0.132812\nv 0.0546875 0.073367 -0.132812\nv 0.0625 0.0733348 -0.132812\nv 0.0703125 0.0732851 -0.132812\nv 0.078125 0.0732718 -0.132812\nv 0.0859375 0.0732695 -0.132812\nv 0.09375 0.0732312 -0.132812\nv 0.101562 0.0731711 -0.132812\nv 0.109375 0.0731085 -0.132812\nv 0.117188 0.0730691 -0.132812\nv 0.125 0.072966 -0.132812\nv 0.132812 0.0728655 -0.132812\nv 0.140625 0.0727617 -0.132812\nv 0.148438 0.0726793 -0.132812\nv 0.15625 0.0725765 -0.132812\nv 0.164062 0.0724879 -0.132812\nv 0.171875 0.0724682 -0.132812\nv 0.179688 0.0724008 -0.132812\nv 0.1875 0.0723671 -0.132812\nv 0.195312 0.0723194 -0.132812\nv 0.203125 0.0722753 -0.132812\nv 0.210938 0.0722237 -0.132812\nv 0.21875 0.0721797 -0.132812\nv 0.226562 0.072164 -0.132812\nv 0.234375 0.0722527 -0.132812\nv 0.242188 0.0723138 -0.132812\nv 0.25 0.072468 -0.132812\nv 0.257812 0.0726859 -0.132812\nv 0.265625 0.0728448 -0.132812\nv 0.273438 0.0730169 -0.132812\nv 0.28125 0.0731888 -0.132812\nv 0.289062 0.0733424 -0.132812\nv 0.296875 0.0734286 -0.132812\nv 0.304688 0.0734702 -0.132812\nv 0.3125 0.0734859 -0.132812\nv 0.320312 0.0735117 -0.132812\nv 0.328125 0.0735476 -0.132812\nv 0.335938 0.0736171 -0.132812\nv 0.34375 0.0736703 -0.132812\nv 0.351562 0.0737021 -0.132812\nv 0.359375 0.073733 -0.132812\nv 0.367188 0.07361 -0.132812\nv 0.375 0.0734846 -0.132812\nv 0.382812 0.0732003 -0.132812\nv 0.390625 0.0728966 -0.132812\nv 0.398438 0.0727398 -0.132812\nv 0.40625 0.072615 -0.132812\nv 0.414062 0.0724744 -0.132812\nv 0.421875 0.0722913 -0.132812\nv 0.429688 0.072034 -0.132812\nv 0.444112 0.0703125 -0.132812\nv 0.4375 0.0714548 -0.132812\nv -0.272897 0.078125 -0.132812\nv -0.265625 0.0836453 -0.132812\nv -0.227377 0.078125 -0.132812\nv -0.234375 0.0815446 -0.132812\nv -0.262475 0.0859375 -0.132812\nv -0.257812 0.0898995 -0.132812\nv -0.25 0.089454 -0.132812\nv -0.240635 0.0859375 -0.132812\nv -0.242188 0.086718 -0.132812\nv -0.28125 0.167868 -0.132812\nv -0.273438 0.167247 -0.132812\nv -0.265625 0.165733 -0.132812\nv -0.257812 0.16803 -0.132812\nv -0.28879 0.171875 -0.132812\nv -0.289062 0.172245 -0.132812\nv -0.289062 0.171875 -0.13079\nv -0.254587 0.171875 -0.132812\nv -0.25 0.178212 -0.132812\nv -0.293839 0.179688 -0.132812\nv -0.296875 0.185564 -0.132812\nv -0.249403 0.179688 -0.132812\nv -0.297683 0.1875 -0.132812\nv -0.245201 0.1875 -0.132812\nv -0.29991 0.195312 -0.132812\nv -0.242269 0.195312 -0.132812\nv -0.242188 0.195976 -0.132812\nv -0.242188 0.195312 -0.130945\nv -0.300755 0.203125 -0.132812\nv -0.241252 0.203125 -0.132812\nv -0.300695 0.210938 -0.132812\nv -0.24067 0.210938 -0.132812\nv -0.300514 0.21875 -0.132812\nv -0.240192 0.21875 -0.132812\nv -0.30038 0.226562 -0.132812\nv -0.240248 0.226562 -0.132812\nv -0.300278 0.234375 -0.132812\nv -0.240581 0.234375 -0.132812\nv -0.300146 0.242188 -0.132812\nv -0.240943 0.242188 -0.132812\nv -0.300325 0.25 -0.132812\nv -0.241731 0.25 -0.132812\nv -0.242188 0.252998 -0.132812\nv -0.300253 0.257812 -0.132812\nv -0.242936 0.257812 -0.132812\nv -0.299887 0.265625 -0.132812\nv -0.243844 0.265625 -0.132812\nv -0.298576 0.273438 -0.132812\nv -0.244238 0.273438 -0.132812\nv -0.297081 0.28125 -0.132812\nv -0.296875 0.282492 -0.132812\nv -0.245137 0.28125 -0.132812\nv -0.295754 0.289062 -0.132812\nv -0.2471 0.289062 -0.132812\nv -0.294298 0.296875 -0.132812\nv -0.249243 0.296875 -0.132812\nv -0.25 0.299923 -0.132812\nv -0.292939 0.304688 -0.132812\nv -0.251271 0.304688 -0.132812\nv -0.292285 0.3125 -0.132812\nv -0.253204 0.3125 -0.132812\nv -0.291985 0.320312 -0.132812\nv -0.254769 0.320312 -0.132812\nv -0.291781 0.328125 -0.132812\nv -0.255963 0.328125 -0.132812\nv -0.29174 0.335938 -0.132812\nv -0.257129 0.335938 -0.132812\nv -0.257812 0.340733 -0.132812\nv -0.29166 0.34375 -0.132812\nv -0.258281 0.34375 -0.132812\nv -0.257812 0.34375 -0.129364\nv -0.291386 0.351562 -0.132812\nv -0.258712 0.351562 -0.132812\nv -0.257812 0.351562 -0.126478\nv -0.290734 0.359375 -0.132812\nv -0.259511 0.359375 -0.132812\nv -0.290395 0.367188 -0.132812\nv -0.289062 0.374679 -0.132812\nv -0.261057 0.367188 -0.132812\nv -0.28897 0.375 -0.132812\nv -0.289062 0.375 -0.132527\nv -0.26256 0.375 -0.132812\nv -0.285157 0.382812 -0.132812\nv -0.289062 0.382812 -0.126085\nv -0.28125 0.389704 -0.132812\nv -0.264357 0.382812 -0.132812\nv -0.265625 0.38615 -0.132812\nv -0.279952 0.390625 -0.132812\nv -0.28125 0.390625 -0.131958\nv -0.267762 0.390625 -0.132812\nv -0.273438 0.394523 -0.132812\nv -0.265625 0.390625 -0.12754\nv -0.273438 0.398438 -0.128447\nv -0.289062 0.5625 -0.12617\nv -0.28125 0.569773 -0.132812\nv -0.28125 0.5625 -0.127374\nv -0.296875 0.577954 -0.132812\nv -0.296875 0.570312 -0.125065\nv -0.283379 0.570312 -0.132812\nv -0.289062 0.57159 -0.132812\nv -0.289062 0.570312 -0.131573\nv -0.28015 0.570312 -0.132812\nv -0.273438 0.575317 -0.132812\nv -0.273438 0.570312 -0.128502\nv -0.297112 0.578125 -0.132812\nv -0.271556 0.578125 -0.132812\nv -0.301259 0.585938 -0.132812\nv -0.304688 0.59309 -0.132812\nv -0.304688 0.585938 -0.1255\nv -0.269239 0.585938 -0.132812\nv -0.304932 0.59375 -0.132812\nv -0.267844 0.59375 -0.132812\nv -0.306635 0.601562 -0.132812\nv -0.267818 0.601562 -0.132812\nv -0.308263 0.609375 -0.132812\nv -0.268294 0.609375 -0.132812\nv -0.30973 0.617188 -0.132812\nv -0.3125 0.623691 -0.132812\nv -0.268798 0.617188 -0.132812\nv -0.312869 0.625 -0.132812\nv -0.269142 0.625 -0.132812\nv -0.315055 0.632812 -0.132812\nv -0.269791 0.632812 -0.132812\nv -0.316703 0.640625 -0.132812\nv -0.270951 0.640625 -0.132812\nv -0.318032 0.648438 -0.132812\nv -0.272033 0.648438 -0.132812\nv -0.319216 0.65625 -0.132812\nv -0.272953 0.65625 -0.132812\nv -0.319569 0.664062 -0.132812\nv -0.273406 0.664062 -0.132812\nv -0.273438 0.664839 -0.132812\nv -0.273438 0.664062 -0.132221\nv -0.319994 0.671875 -0.132812\nv -0.320312 0.677136 -0.132812\nv -0.273728 0.671875 -0.132812\nv -0.320467 0.679688 -0.132812\nv -0.274107 0.679688 -0.132812\nv -0.320889 0.6875 -0.132812\nv -0.274562 0.6875 -0.132812\nv -0.321118 0.695312 -0.132812\nv -0.274962 0.695312 -0.132812\nv -0.321257 0.703125 -0.132812\nv -0.275527 0.703125 -0.132812\nv -0.321294 0.710938 -0.132812\nv -0.276377 0.710938 -0.132812\nv -0.321783 0.71875 -0.132812\nv -0.277718 0.71875 -0.132812\nv -0.322256 0.726562 -0.132812\nv -0.27909 0.726562 -0.132812\nv -0.32309 0.734375 -0.132812\nv -0.280298 0.734375 -0.132812\nv -0.28125 0.739672 -0.132812\nv -0.32398 0.742188 -0.132812\nv -0.281725 0.742188 -0.132812\nv -0.324808 0.75 -0.132812\nv -0.283084 0.75 -0.132812\nv -0.325284 0.757812 -0.132812\nv -0.284657 0.757812 -0.132812\nv -0.325557 0.765625 -0.132812\nv -0.286161 0.765625 -0.132812\nv -0.325567 0.773438 -0.132812\nv -0.288588 0.773438 -0.132812\nv -0.289062 0.774503 -0.132812\nv -0.324866 0.78125 -0.132812\nv -0.294238 0.78125 -0.132812\nv -0.296875 0.784309 -0.132812\nv -0.322287 0.789062 -0.132812\nv -0.320312 0.79382 -0.132812\nv -0.3125 0.795967 -0.132812\nv -0.301653 0.789062 -0.132812\nv -0.304688 0.791336 -0.132812\nv -0.320312 0.796875 -0.125512\nv -0.3125 0.796875 -0.130431\nv 0.046875 -0.539767 -0.125\nv 0.0546875 -0.54125 -0.125\nv 0.0625 -0.542663 -0.125\nv 0.0703125 -0.543963 -0.125\nv 0.078125 -0.544916 -0.125\nv 0.0859375 -0.545388 -0.125\nv 0.09375 -0.544961 -0.125\nv 0.101562 -0.544335 -0.125\nv 0.109375 -0.543456 -0.125\nv 0.117188 -0.54192 -0.125\nv 0.125 -0.540082 -0.125\nv 0.0234375 -0.532138 -0.125\nv 0.03125 -0.534807 -0.125\nv 0.0433217 -0.539062 -0.125\nv 0.0390625 -0.537698 -0.125\nv 0.129051 -0.539062 -0.125\nv 0.132812 -0.537511 -0.125\nv 0.140625 -0.533884 -0.125\nv 0.0078125 -0.524958 -0.125\nv 0.0208455 -0.53125 -0.125\nv 0.015625 -0.529173 -0.125\nv 0.146719 -0.53125 -0.125\nv 0.148438 -0.530112 -0.125\nv 0.15625 -0.524306 -0.125\nv 0.0049487 -0.523438 -0.125\nv 0.157409 -0.523438 -0.125\nv 0.15625 -0.523438 -0.118694\nv 0.00156607 -0.515625 -0.125\nv 0.161523 -0.515625 -0.125\nv 0.00486247 -0.507812 -0.125\nv 0.0078125 -0.506064 -0.125\nv 0.015625 -0.50042 -0.125\nv 0.148438 -0.500306 -0.125\nv 0.160188 -0.507812 -0.125\nv 0.15625 -0.505545 -0.125\nv 0.0162276 -0.5 -0.125\nv 0.0234375 -0.496823 -0.125\nv 0.03125 -0.49403 -0.125\nv 0.132812 -0.492701 -0.125\nv 0.148057 -0.5 -0.125\nv 0.140625 -0.496524 -0.125\nv 0.03784 -0.492188 -0.125\nv 0.0390625 -0.491886 -0.125\nv 0.046875 -0.48982 -0.125\nv 0.0546875 -0.48776 -0.125\nv 0.0625 -0.485833 -0.125\nv 0.109375 -0.484975 -0.125\nv 0.117188 -0.486891 -0.125\nv 0.131683 -0.492188 -0.125\nv 0.125 -0.489491 -0.125\nv 0.0683072 -0.484375 -0.125\nv 0.0703125 -0.483882 -0.125\nv 0.078125 -0.482516 -0.125\nv 0.0859375 -0.481649 -0.125\nv 0.09375 -0.482427 -0.125\nv 0.106454 -0.484375 -0.125\nv 0.101562 -0.483387 -0.125\nv -0.28125 -0.0631291 -0.125\nv 0.453125 -0.0656036 -0.125\nv 0.460938 -0.0673115 -0.125\nv 0.46875 -0.0643728 -0.125\nv 0.476562 -0.0638257 -0.125\nv -0.284211 -0.0625 -0.125\nv -0.289062 -0.0609154 -0.125\nv -0.278096 -0.0625 -0.125\nv -0.273438 -0.0612544 -0.125\nv 0.449583 -0.0625 -0.125\nv 0.4816 -0.0625 -0.125\nv 0.484375 -0.0610749 -0.125\nv -0.29439 -0.0546875 -0.125\nv -0.296875 -0.0503138 -0.125\nv -0.268958 -0.0546875 -0.125\nv -0.265625 -0.0483788 -0.125\nv 0.447075 -0.0546875 -0.125\nv 0.489084 -0.0546875 -0.125\nv 0.492188 -0.0469717 -0.125\nv -0.29792 -0.046875 -0.125\nv -0.265026 -0.046875 -0.125\nv 0.44556 -0.046875 -0.125\nv 0.492216 -0.046875 -0.125\nv -0.299296 -0.0390625 -0.125\nv -0.262558 -0.0390625 -0.125\nv 0.445736 -0.0390625 -0.125\nv 0.445312 -0.0349568 -0.125\nv 0.493679 -0.0390625 -0.125\nv -0.299571 -0.03125 -0.125\nv -0.261582 -0.03125 -0.125\nv 0.444961 -0.03125 -0.125\nv 0.495878 -0.03125 -0.125\nv -0.2996 -0.0234375 -0.125\nv -0.260954 -0.0234375 -0.125\nv 0.443728 -0.0234375 -0.125\nv 0.498772 -0.0234375 -0.125\nv 0.5 -0.0170166 -0.125\nv -0.300739 -0.015625 -0.125\nv -0.260013 -0.015625 -0.125\nv 0.443123 -0.015625 -0.125\nv 0.500187 -0.015625 -0.125\nv -0.302455 -0.0078125 -0.125\nv -0.304688 -0.000169548 -0.125\nv -0.260146 -0.0078125 -0.125\nv 0.441378 -0.0078125 -0.125\nv 0.500087 -0.0078125 -0.125\nv 0.5 -0.00412933 -0.125\nv 0.5 -0.0078125 -0.122342\nv -0.304727 0 -0.125\nv -0.304688 0.000865605 -0.125\nv -0.304688 0 -0.117834\nv -0.260047 0 -0.125\nv 0.440429 0 -0.125\nv 0.499902 0 -0.125\nv -0.304289 0.0078125 -0.125\nv -0.258998 0.0078125 -0.125\nv -0.257812 0.0102053 -0.125\nv 0.441604 0.0078125 -0.125\nv 0.499868 0.0078125 -0.125\nv -0.303005 0.015625 -0.125\nv -0.253811 0.015625 -0.125\nv -0.25 0.0185659 -0.125\nv -0.242188 0.019912 -0.125\nv -0.234375 0.020972 -0.125\nv 0.421875 0.0233665 -0.125\nv 0.429688 0.0216325 -0.125\nv 0.43954 0.015625 -0.125\nv 0.4375 0.0172241 -0.125\nv 0.49995 0.015625 -0.125\nv 0.5 0.0175143 -0.125\nv -0.301972 0.0234375 -0.125\nv -0.227257 0.0234375 -0.125\nv -0.226562 0.0236482 -0.125\nv -0.21875 0.0262901 -0.125\nv -0.210938 0.0273676 -0.125\nv -0.203125 0.0277396 -0.125\nv -0.195312 0.0278356 -0.125\nv -0.1875 0.0278619 -0.125\nv -0.179688 0.0276921 -0.125\nv -0.171875 0.0275614 -0.125\nv -0.164062 0.0274912 -0.125\nv -0.15625 0.0275251 -0.125\nv -0.148438 0.0276279 -0.125\nv -0.140625 0.0275724 -0.125\nv -0.132812 0.0276021 -0.125\nv -0.125 0.0277305 -0.125\nv -0.117188 0.0276406 -0.125\nv -0.109375 0.0273228 -0.125\nv -0.101562 0.027059 -0.125\nv -0.09375 0.0268227 -0.125\nv -0.0859375 0.0266663 -0.125\nv -0.078125 0.026509 -0.125\nv -0.0703125 0.0262901 -0.125\nv -0.0625 0.0260599 -0.125\nv -0.0546875 0.0259648 -0.125\nv -0.046875 0.0260082 -0.125\nv -0.0390625 0.0260674 -0.125\nv -0.03125 0.0261062 -0.125\nv -0.0234375 0.0261528 -0.125\nv -0.015625 0.0261867 -0.125\nv -0.0078125 0.0263137 -0.125\nv 0 0.0263403 -0.125\nv 0.0078125 0.0262532 -0.125\nv 0.015625 0.0263851 -0.125\nv 0.0234375 0.0264514 -0.125\nv 0.03125 0.026448 -0.125\nv 0.0390625 0.0264565 -0.125\nv 0.046875 0.0264801 -0.125\nv 0.0546875 0.0264575 -0.125\nv 0.0625 0.0264084 -0.125\nv 0.0703125 0.0263209 -0.125\nv 0.078125 0.026224 -0.125\nv 0.0859375 0.026195 -0.125\nv 0.09375 0.0261369 -0.125\nv 0.101562 0.0260813 -0.125\nv 0.109375 0.0259543 -0.125\nv 0.117188 0.0258152 -0.125\nv 0.125 0.0257037 -0.125\nv 0.132812 0.0255803 -0.125\nv 0.140625 0.0254172 -0.125\nv 0.148438 0.0252279 -0.125\nv 0.15625 0.0250852 -0.125\nv 0.164062 0.0249214 -0.125\nv 0.171875 0.0246905 -0.125\nv 0.179688 0.0245154 -0.125\nv 0.1875 0.024425 -0.125\nv 0.195312 0.0243425 -0.125\nv 0.203125 0.0243398 -0.125\nv 0.210938 0.0243454 -0.125\nv 0.21875 0.0244173 -0.125\nv 0.226562 0.0244955 -0.125\nv 0.234375 0.0245565 -0.125\nv 0.242188 0.0246321 -0.125\nv 0.25 0.0247053 -0.125\nv 0.257812 0.024789 -0.125\nv 0.265625 0.0249308 -0.125\nv 0.273438 0.0251123 -0.125\nv 0.28125 0.0252943 -0.125\nv 0.289062 0.0254194 -0.125\nv 0.296875 0.0255413 -0.125\nv 0.304688 0.0257004 -0.125\nv 0.3125 0.025906 -0.125\nv 0.320312 0.0261703 -0.125\nv 0.328125 0.0264489 -0.125\nv 0.335938 0.0265543 -0.125\nv 0.34375 0.0266489 -0.125\nv 0.351562 0.0267424 -0.125\nv 0.359375 0.0267962 -0.125\nv 0.367188 0.0268108 -0.125\nv 0.375 0.0268788 -0.125\nv 0.382812 0.0268388 -0.125\nv 0.390625 0.0265259 -0.125\nv 0.398438 0.0260511 -0.125\nv 0.40625 0.0255991 -0.125\nv 0.421584 0.0234375 -0.125\nv 0.414062 0.0248783 -0.125\nv 0.500134 0.0234375 -0.125\nv 0.5 0.0239617 -0.125\nv 0.5 0.0234375 -0.120819\nv -0.300747 0.03125 -0.125\nv 0.497579 0.03125 -0.125\nv -0.29966 0.0390625 -0.125\nv 0.494931 0.0390625 -0.125\nv -0.297274 0.046875 -0.125\nv -0.296875 0.0478949 -0.125\nv 0.49287 0.046875 -0.125\nv 0.492188 0.0495319 -0.125\nv -0.294441 0.0546875 -0.125\nv 0.490565 0.0546875 -0.125\nv 0.484375 0.0587361 -0.125\nv -0.291674 0.0625 -0.125\nv -0.289062 0.0674377 -0.125\nv 0.445312 0.070228 -0.125\nv 0.453125 0.0682674 -0.125\nv 0.460938 0.0667482 -0.125\nv 0.46875 0.0659002 -0.125\nv 0.477295 0.0625 -0.125\nv 0.476562 0.0629225 -0.125\nv -0.286304 0.0703125 -0.125\nv -0.28125 0.0741426 -0.125\nv -0.273438 0.0778294 -0.125\nv -0.226562 0.0777199 -0.125\nv -0.21875 0.0756544 -0.125\nv -0.210938 0.0743053 -0.125\nv -0.203125 0.0742307 -0.125\nv -0.195312 0.0744469 -0.125\nv -0.1875 0.0748398 -0.125\nv -0.179688 0.0750872 -0.125\nv -0.171875 0.0750996 -0.125\nv -0.164062 0.0751059 -0.125\nv -0.15625 0.0751568 -0.125\nv -0.148438 0.0751872 -0.125\nv -0.140625 0.075025 -0.125\nv -0.132812 0.0750033 -0.125\nv -0.125 0.0752144 -0.125\nv -0.117188 0.0753086 -0.125\nv -0.109375 0.0753494 -0.125\nv -0.101562 0.0753044 -0.125\nv -0.09375 0.0752195 -0.125\nv -0.0859375 0.0751389 -0.125\nv -0.078125 0.0749588 -0.125\nv -0.0703125 0.0747253 -0.125\nv -0.0625 0.074496 -0.125\nv -0.0546875 0.0743109 -0.125\nv -0.046875 0.0741303 -0.125\nv -0.0390625 0.0739378 -0.125\nv -0.03125 0.0737711 -0.125\nv -0.0234375 0.0736595 -0.125\nv -0.015625 0.073605 -0.125\nv -0.0078125 0.0736326 -0.125\nv 0 0.0736185 -0.125\nv 0.0078125 0.0735868 -0.125\nv 0.015625 0.0736275 -0.125\nv 0.0234375 0.0736208 -0.125\nv 0.03125 0.0735497 -0.125\nv 0.0390625 0.0735438 -0.125\nv 0.046875 0.0735156 -0.125\nv 0.0546875 0.0734811 -0.125\nv 0.0625 0.0734652 -0.125\nv 0.0703125 0.0734137 -0.125\nv 0.078125 0.0734003 -0.125\nv 0.0859375 0.0733761 -0.125\nv 0.09375 0.0733386 -0.125\nv 0.101562 0.0732664 -0.125\nv 0.109375 0.0732292 -0.125\nv 0.117188 0.0731189 -0.125\nv 0.125 0.0730091 -0.125\nv 0.132812 0.0729452 -0.125\nv 0.140625 0.0728995 -0.125\nv 0.148438 0.072844 -0.125\nv 0.15625 0.0727917 -0.125\nv 0.164062 0.0727727 -0.125\nv 0.171875 0.0726919 -0.125\nv 0.179688 0.0726331 -0.125\nv 0.1875 0.0725775 -0.125\nv 0.195312 0.0725261 -0.125\nv 0.203125 0.0724746 -0.125\nv 0.210938 0.0724389 -0.125\nv 0.21875 0.0723862 -0.125\nv 0.226562 0.0723456 -0.125\nv 0.234375 0.0723626 -0.125\nv 0.242188 0.0724281 -0.125\nv 0.25 0.0725386 -0.125\nv 0.257812 0.0727455 -0.125\nv 0.265625 0.0729368 -0.125\nv 0.273438 0.0730712 -0.125\nv 0.28125 0.0732261 -0.125\nv 0.289062 0.0733545 -0.125\nv 0.296875 0.0734371 -0.125\nv 0.304688 0.0734901 -0.125\nv 0.3125 0.0735023 -0.125\nv 0.320312 0.0735329 -0.125\nv 0.328125 0.0735688 -0.125\nv 0.335938 0.0736349 -0.125\nv 0.34375 0.0736832 -0.125\nv 0.351562 0.0737381 -0.125\nv 0.359375 0.0737852 -0.125\nv 0.367188 0.0736896 -0.125\nv 0.375 0.0735548 -0.125\nv 0.382812 0.0732677 -0.125\nv 0.390625 0.0729707 -0.125\nv 0.398438 0.0727972 -0.125\nv 0.40625 0.0726611 -0.125\nv 0.414062 0.072512 -0.125\nv 0.421875 0.072316 -0.125\nv 0.429688 0.0720666 -0.125\nv 0.444819 0.0703125 -0.125\nv 0.4375 0.0715009 -0.125\nv -0.272883 0.078125 -0.125\nv -0.265625 0.084079 -0.125\nv -0.227764 0.078125 -0.125\nv -0.234375 0.0812091 -0.125\nv -0.262894 0.0859375 -0.125\nv -0.257812 0.0901301 -0.125\nv -0.25 0.0892863 -0.125\nv -0.241313 0.0859375 -0.125\nv -0.242188 0.0863739 -0.125\nv -0.289062 0.171388 -0.125\nv -0.28125 0.167877 -0.125\nv -0.273438 0.166867 -0.125\nv -0.265625 0.165228 -0.125\nv -0.257812 0.167222 -0.125\nv -0.289772 0.171875 -0.125\nv -0.254125 0.171875 -0.125\nv -0.25 0.17756 -0.125\nv -0.29438 0.179688 -0.125\nv -0.296875 0.184905 -0.125\nv -0.249112 0.179688 -0.125\nv -0.297928 0.1875 -0.125\nv -0.244888 0.1875 -0.125\nv -0.242188 0.194747 -0.125\nv -0.300016 0.195312 -0.125\nv -0.241932 0.195312 -0.125\nv -0.300621 0.203125 -0.125\nv -0.241173 0.203125 -0.125\nv -0.300614 0.210938 -0.125\nv -0.240709 0.210938 -0.125\nv -0.300477 0.21875 -0.125\nv -0.240304 0.21875 -0.125\nv -0.300392 0.226562 -0.125\nv -0.240462 0.226562 -0.125\nv -0.300254 0.234375 -0.125\nv -0.24077 0.234375 -0.125\nv -0.300227 0.242188 -0.125\nv -0.2412 0.242188 -0.125\nv -0.300416 0.25 -0.125\nv -0.241947 0.25 -0.125\nv -0.242188 0.251648 -0.125\nv -0.30036 0.257812 -0.125\nv -0.24309 0.257812 -0.125\nv -0.299823 0.265625 -0.125\nv -0.243908 0.265625 -0.125\nv -0.298652 0.273438 -0.125\nv -0.244353 0.273438 -0.125\nv -0.297246 0.28125 -0.125\nv -0.296875 0.283687 -0.125\nv -0.245362 0.28125 -0.125\nv -0.296021 0.289062 -0.125\nv -0.247106 0.289062 -0.125\nv -0.294699 0.296875 -0.125\nv -0.248972 0.296875 -0.125\nv -0.25 0.301366 -0.125\nv -0.293486 0.304688 -0.125\nv -0.250828 0.304688 -0.125\nv -0.292909 0.3125 -0.125\nv -0.252668 0.3125 -0.125\nv -0.292497 0.320312 -0.125\nv -0.254125 0.320312 -0.125\nv -0.29239 0.328125 -0.125\nv -0.255368 0.328125 -0.125\nv -0.29257 0.335938 -0.125\nv -0.256316 0.335938 -0.125\nv -0.292926 0.34375 -0.125\nv -0.257287 0.34375 -0.125\nv -0.292591 0.351562 -0.125\nv -0.257604 0.351562 -0.125\nv -0.257812 0.353287 -0.125\nv -0.292191 0.359375 -0.125\nv -0.258556 0.359375 -0.125\nv -0.257812 0.359375 -0.118108\nv -0.29176 0.367188 -0.125\nv -0.260004 0.367188 -0.125\nv -0.290809 0.375 -0.125\nv -0.261197 0.375 -0.125\nv -0.289523 0.382812 -0.125\nv -0.289062 0.383835 -0.125\nv -0.262472 0.382812 -0.125\nv -0.285189 0.390625 -0.125\nv -0.289062 0.390625 -0.1176\nv -0.28125 0.397943 -0.125\nv -0.26462 0.390625 -0.125\nv -0.265625 0.392383 -0.125\nv -0.280299 0.398438 -0.125\nv -0.28125 0.398438 -0.124532\nv -0.269068 0.398438 -0.125\nv -0.273438 0.402504 -0.125\nv -0.28125 0.40625 -0.119392\nv -0.273438 0.40625 -0.121089\nv -0.289062 0.560812 -0.125\nv -0.289062 0.554688 -0.119541\nv -0.28125 0.558999 -0.125\nv -0.28125 0.554688 -0.121252\nv -0.273438 0.554688 -0.117439\nv -0.290582 0.5625 -0.125\nv -0.296875 0.570224 -0.125\nv -0.296875 0.5625 -0.118537\nv -0.276158 0.5625 -0.125\nv -0.273438 0.565534 -0.125\nv -0.273438 0.5625 -0.122578\nv -0.296965 0.570312 -0.125\nv -0.270707 0.570312 -0.125\nv -0.302237 0.578125 -0.125\nv -0.304688 0.585289 -0.125\nv -0.304688 0.578125 -0.119743\nv -0.26845 0.578125 -0.125\nv -0.304867 0.585938 -0.125\nv -0.267109 0.585938 -0.125\nv -0.307277 0.59375 -0.125\nv -0.267183 0.59375 -0.125\nv -0.308359 0.601562 -0.125\nv -0.267744 0.601562 -0.125\nv -0.309068 0.609375 -0.125\nv -0.268393 0.609375 -0.125\nv -0.310213 0.617188 -0.125\nv -0.3125 0.622758 -0.125\nv -0.268928 0.617188 -0.125\nv -0.313134 0.625 -0.125\nv -0.269485 0.625 -0.125\nv -0.315198 0.632812 -0.125\nv -0.270343 0.632812 -0.125\nv -0.316732 0.640625 -0.125\nv -0.271501 0.640625 -0.125\nv -0.317946 0.648438 -0.125\nv -0.27259 0.648438 -0.125\nv -0.273438 0.648438 -0.1185\nv -0.319093 0.65625 -0.125\nv -0.273418 0.65625 -0.125\nv -0.273438 0.656624 -0.125\nv -0.273438 0.65625 -0.124848\nv -0.319459 0.664062 -0.125\nv -0.273829 0.664062 -0.125\nv -0.319939 0.671875 -0.125\nv -0.320312 0.67741 -0.125\nv -0.274181 0.671875 -0.125\nv -0.320466 0.679688 -0.125\nv -0.274622 0.679688 -0.125\nv -0.320923 0.6875 -0.125\nv -0.275136 0.6875 -0.125\nv -0.321167 0.695312 -0.125\nv -0.275498 0.695312 -0.125\nv -0.321258 0.703125 -0.125\nv -0.275991 0.703125 -0.125\nv -0.321311 0.710938 -0.125\nv -0.276714 0.710938 -0.125\nv -0.32187 0.71875 -0.125\nv -0.277927 0.71875 -0.125\nv -0.322423 0.726562 -0.125\nv -0.279178 0.726562 -0.125\nv -0.323361 0.734375 -0.125\nv -0.280341 0.734375 -0.125\nv -0.28125 0.739357 -0.125\nv -0.324257 0.742188 -0.125\nv -0.281791 0.742188 -0.125\nv -0.32509 0.75 -0.125\nv -0.282982 0.75 -0.125\nv -0.325672 0.757812 -0.125\nv -0.28443 0.757812 -0.125\nv -0.326177 0.765625 -0.125\nv -0.285895 0.765625 -0.125\nv -0.326352 0.773438 -0.125\nv -0.28805 0.773438 -0.125\nv -0.289062 0.775881 -0.125\nv -0.326334 0.78125 -0.125\nv -0.292867 0.78125 -0.125\nv -0.296875 0.786292 -0.125\nv -0.324699 0.789062 -0.125\nv -0.299625 0.789062 -0.125\nv -0.304688 0.79402 -0.125\nv -0.320434 0.796875 -0.125\nv -0.320312 0.797175 -0.125\nv -0.30866 0.796875 -0.125\nv -0.3125 0.799465 -0.125\nv 0.046875 -0.540502 -0.117188\nv 0.0546875 -0.541922 -0.117188\nv 0.0625 -0.543187 -0.117188\nv 0.0703125 -0.544257 -0.117188\nv 0.078125 -0.545058 -0.117188\nv 0.0859375 -0.545487 -0.117188\nv 0.09375 -0.545155 -0.117188\nv 0.101562 -0.544388 -0.117188\nv 0.109375 -0.543333 -0.117188\nv 0.117188 -0.541525 -0.117188\nv 0.125 -0.539417 -0.117188\nv 0.0234375 -0.533155 -0.117188\nv 0.03125 -0.536178 -0.117188\nv 0.0392708 -0.539062 -0.117188\nv 0.0390625 -0.538998 -0.117188\nv 0.0390625 -0.539062 -0.116733\nv 0.126333 -0.539062 -0.117188\nv 0.125 -0.539062 -0.111115\nv 0.132812 -0.536245 -0.117188\nv 0.140625 -0.532925 -0.117188\nv 0.0078125 -0.526065 -0.117188\nv 0.0183781 -0.53125 -0.117188\nv 0.015625 -0.530001 -0.117188\nv 0.015625 -0.53125 -0.110042\nv 0.144676 -0.53125 -0.117188\nv 0.148438 -0.528905 -0.117188\nv 0.00342544 -0.523438 -0.117188\nv 0.155968 -0.523438 -0.117188\nv 0.15625 -0.522928 -0.117188\nv 0.000803649 -0.515625 -0.117188\nv 0.160251 -0.515625 -0.117188\nv 0.00460205 -0.507812 -0.117188\nv 0.0078125 -0.505882 -0.117188\nv 0.015625 -0.500542 -0.117188\nv 0.148438 -0.501117 -0.117188\nv 0.159198 -0.507812 -0.117188\nv 0.15625 -0.505975 -0.117188\nv 0.0163711 -0.5 -0.117188\nv 0.015625 -0.5 -0.112224\nv 0.0234375 -0.496221 -0.117188\nv 0.03125 -0.492815 -0.117188\nv 0.132812 -0.493423 -0.117188\nv 0.146951 -0.5 -0.117188\nv 0.140625 -0.497188 -0.117188\nv 0.033181 -0.492188 -0.117188\nv 0.03125 -0.492188 -0.113997\nv 0.0390625 -0.490634 -0.117188\nv 0.046875 -0.488606 -0.117188\nv 0.0546875 -0.486584 -0.117188\nv 0.0625 -0.484864 -0.117188\nv 0.109375 -0.484482 -0.117188\nv 0.117188 -0.486876 -0.117188\nv 0.130318 -0.492188 -0.117188\nv 0.125 -0.489886 -0.117188\nv 0.0648704 -0.484375 -0.117188\nv 0.0625 -0.484375 -0.111444\nv 0.0703125 -0.48327 -0.117188\nv 0.078125 -0.481979 -0.117188\nv 0.0859375 -0.48082 -0.117188\nv 0.09375 -0.481165 -0.117188\nv 0.108955 -0.484375 -0.117188\nv 0.101562 -0.482534 -0.117188\nv -0.28125 -0.0635033 -0.117188\nv 0.453125 -0.0655544 -0.117188\nv 0.460938 -0.0673149 -0.117188\nv 0.46875 -0.0644652 -0.117188\nv 0.476562 -0.0638749 -0.117188\nv -0.285871 -0.0625 -0.117188\nv -0.289062 -0.0614303 -0.117188\nv -0.276496 -0.0625 -0.117188\nv -0.273438 -0.0616483 -0.117188\nv 0.449835 -0.0625 -0.117188\nv 0.481918 -0.0625 -0.117188\nv 0.484375 -0.0612749 -0.117188\nv -0.294574 -0.0546875 -0.117188\nv -0.296875 -0.0504301 -0.117188\nv -0.268739 -0.0546875 -0.117188\nv -0.265625 -0.0485303 -0.117188\nv 0.447405 -0.0546875 -0.117188\nv 0.489331 -0.0546875 -0.117188\nv 0.492188 -0.047571 -0.117188\nv -0.29794 -0.046875 -0.117188\nv -0.264977 -0.046875 -0.117188\nv 0.445717 -0.046875 -0.117188\nv 0.492392 -0.046875 -0.117188\nv -0.299236 -0.0390625 -0.117188\nv -0.26263 -0.0390625 -0.117188\nv 0.445954 -0.0390625 -0.117188\nv 0.445312 -0.0323399 -0.117188\nv 0.493898 -0.0390625 -0.117188\nv -0.299483 -0.03125 -0.117188\nv -0.261645 -0.03125 -0.117188\nv 0.445218 -0.03125 -0.117188\nv 0.445312 -0.03125 -0.113715\nv 0.496128 -0.03125 -0.117188\nv -0.299568 -0.0234375 -0.117188\nv -0.261039 -0.0234375 -0.117188\nv 0.44405 -0.0234375 -0.117188\nv 0.498952 -0.0234375 -0.117188\nv 0.5 -0.0168731 -0.117188\nv -0.300752 -0.015625 -0.117188\nv -0.260064 -0.015625 -0.117188\nv 0.443426 -0.015625 -0.117188\nv 0.500139 -0.015625 -0.117188\nv 0.5 -0.0121097 -0.117188\nv 0.5 -0.015625 -0.114405\nv -0.302437 -0.0078125 -0.117188\nv -0.26011 -0.0078125 -0.117188\nv 0.441667 -0.0078125 -0.117188\nv 0.499805 -0.0078125 -0.117188\nv -0.304682 0 -0.117188\nv -0.260152 0 -0.117188\nv 0.440617 0 -0.117188\nv 0.499591 0 -0.117188\nv -0.304331 0.0078125 -0.117188\nv -0.258787 0.0078125 -0.117188\nv -0.257812 0.00964617 -0.117188\nv 0.441607 0.0078125 -0.117188\nv 0.499551 0.0078125 -0.117188\nv -0.303007 0.015625 -0.117188\nv -0.253201 0.015625 -0.117188\nv -0.25 0.0181061 -0.117188\nv -0.242188 0.0194867 -0.117188\nv -0.234375 0.020717 -0.117188\nv 0.421875 0.0232819 -0.117188\nv 0.429688 0.021613 -0.117188\nv 0.43953 0.015625 -0.117188\nv 0.4375 0.017247 -0.117188\nv 0.499697 0.015625 -0.117188\nv -0.301945 0.0234375 -0.117188\nv -0.226814 0.0234375 -0.117188\nv -0.226562 0.0235182 -0.117188\nv -0.226562 0.0234375 -0.112394\nv -0.21875 0.0261859 -0.117188\nv -0.210938 0.0272147 -0.117188\nv -0.203125 0.0275597 -0.117188\nv -0.195312 0.02765 -0.117188\nv -0.1875 0.0277075 -0.117188\nv -0.179688 0.0275498 -0.117188\nv -0.171875 0.0275188 -0.117188\nv -0.164062 0.0274719 -0.117188\nv -0.15625 0.0275031 -0.117188\nv -0.148438 0.0276164 -0.117188\nv -0.140625 0.0275423 -0.117188\nv -0.132812 0.0275126 -0.117188\nv -0.125 0.0276598 -0.117188\nv -0.117188 0.0276347 -0.117188\nv -0.109375 0.0273417 -0.117188\nv -0.101562 0.0270437 -0.117188\nv -0.09375 0.0267507 -0.117188\nv -0.0859375 0.0265523 -0.117188\nv -0.078125 0.0264256 -0.117188\nv -0.0703125 0.0262259 -0.117188\nv -0.0625 0.0259895 -0.117188\nv -0.0546875 0.0259093 -0.117188\nv -0.046875 0.0259442 -0.117188\nv -0.0390625 0.0259979 -0.117188\nv -0.03125 0.0260588 -0.117188\nv -0.0234375 0.0260772 -0.117188\nv -0.015625 0.0260973 -0.117188\nv -0.0078125 0.026214 -0.117188\nv 0 0.0262532 -0.117188\nv 0.0078125 0.0261441 -0.117188\nv 0.015625 0.0262075 -0.117188\nv 0.0234375 0.0263245 -0.117188\nv 0.03125 0.0263648 -0.117188\nv 0.0390625 0.0264014 -0.117188\nv 0.046875 0.0264468 -0.117188\nv 0.0546875 0.0264991 -0.117188\nv 0.0625 0.0264732 -0.117188\nv 0.0703125 0.0263728 -0.117188\nv 0.078125 0.0262781 -0.117188\nv 0.0859375 0.0262643 -0.117188\nv 0.09375 0.0262647 -0.117188\nv 0.101562 0.026174 -0.117188\nv 0.109375 0.0260389 -0.117188\nv 0.117188 0.0259188 -0.117188\nv 0.125 0.0258024 -0.117188\nv 0.132812 0.025665 -0.117188\nv 0.140625 0.0255083 -0.117188\nv 0.148438 0.0253067 -0.117188\nv 0.15625 0.0251751 -0.117188\nv 0.164062 0.0249508 -0.117188\nv 0.171875 0.0247418 -0.117188\nv 0.179688 0.0245892 -0.117188\nv 0.1875 0.0245085 -0.117188\nv 0.195312 0.0244364 -0.117188\nv 0.203125 0.0243907 -0.117188\nv 0.210938 0.0243243 -0.117188\nv 0.21875 0.0243718 -0.117188\nv 0.226562 0.0244177 -0.117188\nv 0.234375 0.0244957 -0.117188\nv 0.242188 0.0246151 -0.117188\nv 0.25 0.0247161 -0.117188\nv 0.257812 0.0248103 -0.117188\nv 0.265625 0.024962 -0.117188\nv 0.273438 0.0251442 -0.117188\nv 0.28125 0.0253266 -0.117188\nv 0.289062 0.0254575 -0.117188\nv 0.296875 0.0255719 -0.117188\nv 0.304688 0.0257324 -0.117188\nv 0.3125 0.0259388 -0.117188\nv 0.320312 0.0262282 -0.117188\nv 0.328125 0.0265344 -0.117188\nv 0.335938 0.0266264 -0.117188\nv 0.34375 0.0267019 -0.117188\nv 0.351562 0.0267843 -0.117188\nv 0.359375 0.0268167 -0.117188\nv 0.367188 0.0268026 -0.117188\nv 0.375 0.026823 -0.117188\nv 0.382812 0.026778 -0.117188\nv 0.390625 0.0264729 -0.117188\nv 0.398438 0.0260134 -0.117188\nv 0.40625 0.0255651 -0.117188\nv 0.421276 0.0234375 -0.117188\nv 0.414062 0.0248848 -0.117188\nv 0.499855 0.0234375 -0.117188\nv -0.300755 0.03125 -0.117188\nv 0.497413 0.03125 -0.117188\nv -0.299664 0.0390625 -0.117188\nv 0.494793 0.0390625 -0.117188\nv -0.297245 0.046875 -0.117188\nv -0.296875 0.0478015 -0.117188\nv 0.492773 0.046875 -0.117188\nv 0.492188 0.0492354 -0.117188\nv -0.294357 0.0546875 -0.117188\nv 0.490543 0.0546875 -0.117188\nv 0.484375 0.058711 -0.117188\nv -0.29155 0.0625 -0.117188\nv -0.289062 0.0670383 -0.117188\nv 0.445312 0.0702647 -0.117188\nv 0.453125 0.0682488 -0.117188\nv 0.460938 0.0668143 -0.117188\nv 0.46875 0.0659307 -0.117188\nv 0.477247 0.0625 -0.117188\nv 0.476562 0.0628944 -0.117188\nv -0.285881 0.0703125 -0.117188\nv -0.28125 0.0744636 -0.117188\nv -0.273438 0.0779301 -0.117188\nv -0.226562 0.0776061 -0.117188\nv -0.21875 0.0755725 -0.117188\nv -0.210938 0.074184 -0.117188\nv -0.203125 0.074152 -0.117188\nv -0.195312 0.0743303 -0.117188\nv -0.1875 0.0747763 -0.117188\nv -0.179688 0.0750181 -0.117188\nv -0.171875 0.0750196 -0.117188\nv -0.164062 0.0750624 -0.117188\nv -0.15625 0.0751273 -0.117188\nv -0.148438 0.0751664 -0.117188\nv -0.140625 0.0750082 -0.117188\nv -0.132812 0.0749966 -0.117188\nv -0.125 0.0752789 -0.117188\nv -0.117188 0.0754029 -0.117188\nv -0.109375 0.0754413 -0.117188\nv -0.101562 0.0754024 -0.117188\nv -0.09375 0.0752906 -0.117188\nv -0.0859375 0.0751338 -0.117188\nv -0.078125 0.0749763 -0.117188\nv -0.0703125 0.0747516 -0.117188\nv -0.0625 0.0744856 -0.117188\nv -0.0546875 0.0743 -0.117188\nv -0.046875 0.0741441 -0.117188\nv -0.0390625 0.0739527 -0.117188\nv -0.03125 0.0737693 -0.117188\nv -0.0234375 0.0736203 -0.117188\nv -0.015625 0.0736226 -0.117188\nv -0.0078125 0.0737111 -0.117188\nv 0 0.0736971 -0.117188\nv 0.0078125 0.0736415 -0.117188\nv 0.015625 0.0736844 -0.117188\nv 0.0234375 0.0737358 -0.117188\nv 0.03125 0.0736988 -0.117188\nv 0.0390625 0.0736363 -0.117188\nv 0.046875 0.0736018 -0.117188\nv 0.0546875 0.0736013 -0.117188\nv 0.0625 0.0735744 -0.117188\nv 0.0703125 0.0735364 -0.117188\nv 0.078125 0.0735163 -0.117188\nv 0.0859375 0.0734986 -0.117188\nv 0.09375 0.0734732 -0.117188\nv 0.101562 0.0734308 -0.117188\nv 0.109375 0.0733649 -0.117188\nv 0.117188 0.07324 -0.117188\nv 0.125 0.0731183 -0.117188\nv 0.132812 0.0730924 -0.117188\nv 0.140625 0.073039 -0.117188\nv 0.148438 0.0730018 -0.117188\nv 0.15625 0.0730056 -0.117188\nv 0.164062 0.0729631 -0.117188\nv 0.171875 0.0729048 -0.117188\nv 0.179688 0.0728358 -0.117188\nv 0.1875 0.0727723 -0.117188\nv 0.195312 0.0726963 -0.117188\nv 0.203125 0.0726628 -0.117188\nv 0.210938 0.0726142 -0.117188\nv 0.21875 0.0725462 -0.117188\nv 0.226562 0.0724991 -0.117188\nv 0.234375 0.0724726 -0.117188\nv 0.242188 0.0725535 -0.117188\nv 0.25 0.0726414 -0.117188\nv 0.257812 0.0728107 -0.117188\nv 0.265625 0.0729793 -0.117188\nv 0.273438 0.0730985 -0.117188\nv 0.28125 0.0732458 -0.117188\nv 0.289062 0.0733775 -0.117188\nv 0.296875 0.0734556 -0.117188\nv 0.304688 0.0734922 -0.117188\nv 0.3125 0.0735146 -0.117188\nv 0.320312 0.0735258 -0.117188\nv 0.328125 0.073565 -0.117188\nv 0.335938 0.0736459 -0.117188\nv 0.34375 0.073705 -0.117188\nv 0.351562 0.0737622 -0.117188\nv 0.359375 0.0738188 -0.117188\nv 0.367188 0.0737421 -0.117188\nv 0.375 0.0736004 -0.117188\nv 0.382812 0.0733027 -0.117188\nv 0.390625 0.0730017 -0.117188\nv 0.398438 0.0728117 -0.117188\nv 0.40625 0.0726619 -0.117188\nv 0.414062 0.072514 -0.117188\nv 0.421875 0.0723176 -0.117188\nv 0.429688 0.072096 -0.117188\nv 0.445033 0.0703125 -0.117188\nv 0.4375 0.0715378 -0.117188\nv -0.273068 0.078125 -0.117188\nv -0.273438 0.078125 -0.112354\nv -0.265625 0.0847452 -0.117188\nv -0.228099 0.078125 -0.117188\nv -0.234375 0.081049 -0.117188\nv -0.263644 0.0859375 -0.117188\nv -0.257812 0.090209 -0.117188\nv -0.25 0.0885921 -0.117188\nv -0.242049 0.0859375 -0.117188\nv -0.242188 0.0860032 -0.117188\nv -0.289062 0.170741 -0.117188\nv -0.28125 0.167428 -0.117188\nv -0.273438 0.166635 -0.117188\nv -0.265625 0.165355 -0.117188\nv -0.257812 0.166917 -0.117188\nv -0.290703 0.171875 -0.117188\nv -0.254079 0.171875 -0.117188\nv -0.25 0.177751 -0.117188\nv -0.294922 0.179688 -0.117188\nv -0.296875 0.184183 -0.117188\nv -0.249123 0.179688 -0.117188\nv -0.298094 0.1875 -0.117188\nv -0.244545 0.1875 -0.117188\nv -0.242188 0.194612 -0.117188\nv -0.300049 0.195312 -0.117188\nv -0.241913 0.195312 -0.117188\nv -0.300489 0.203125 -0.117188\nv -0.241165 0.203125 -0.117188\nv -0.300568 0.210938 -0.117188\nv -0.240687 0.210938 -0.117188\nv -0.300474 0.21875 -0.117188\nv -0.240413 0.21875 -0.117188\nv -0.300393 0.226562 -0.117188\nv -0.240613 0.226562 -0.117188\nv -0.300246 0.234375 -0.117188\nv -0.240901 0.234375 -0.117188\nv -0.300361 0.242188 -0.117188\nv -0.241332 0.242188 -0.117188\nv -0.300504 0.25 -0.117188\nv -0.242099 0.25 -0.117188\nv -0.242188 0.250621 -0.117188\nv -0.242188 0.25 -0.112979\nv -0.300429 0.257812 -0.117188\nv -0.243202 0.257812 -0.117188\nv -0.299787 0.265625 -0.117188\nv -0.243937 0.265625 -0.117188\nv -0.298756 0.273438 -0.117188\nv -0.244502 0.273438 -0.117188\nv -0.29743 0.28125 -0.117188\nv -0.296875 0.285245 -0.117188\nv -0.245529 0.28125 -0.117188\nv -0.296328 0.289062 -0.117188\nv -0.247051 0.289062 -0.117188\nv -0.295023 0.296875 -0.117188\nv -0.248636 0.296875 -0.117188\nv -0.25 0.303621 -0.117188\nv -0.293929 0.304688 -0.117188\nv -0.250248 0.304688 -0.117188\nv -0.293294 0.3125 -0.117188\nv -0.252016 0.3125 -0.117188\nv -0.292865 0.320312 -0.117188\nv -0.253238 0.320312 -0.117188\nv -0.292902 0.328125 -0.117188\nv -0.254564 0.328125 -0.117188\nv -0.293293 0.335938 -0.117188\nv -0.255637 0.335938 -0.117188\nv -0.293519 0.34375 -0.117188\nv -0.256059 0.34375 -0.117188\nv -0.293195 0.351562 -0.117188\nv -0.256488 0.351562 -0.117188\nv -0.292919 0.359375 -0.117188\nv -0.257686 0.359375 -0.117188\nv -0.257812 0.360038 -0.117188\nv -0.292545 0.367188 -0.117188\nv -0.258904 0.367188 -0.117188\nv -0.257812 0.367188 -0.109588\nv -0.291955 0.375 -0.117188\nv -0.25976 0.375 -0.117188\nv -0.291053 0.382812 -0.117188\nv -0.260778 0.382812 -0.117188\nv -0.289234 0.390625 -0.117188\nv -0.289062 0.391155 -0.117188\nv -0.262361 0.390625 -0.117188\nv -0.265625 0.398246 -0.117188\nv -0.285818 0.398438 -0.117188\nv -0.289062 0.398438 -0.110575\nv -0.265687 0.398438 -0.117188\nv -0.265625 0.398438 -0.116996\nv -0.282672 0.40625 -0.117188\nv -0.28125 0.409788 -0.117188\nv -0.269302 0.40625 -0.117188\nv -0.273438 0.411163 -0.117188\nv -0.265625 0.40625 -0.111537\nv -0.28125 0.414062 -0.113984\nv -0.273438 0.414062 -0.114522\nv -0.273438 0.46875 -0.109925\nv -0.28125 0.53125 -0.110864\nv -0.28125 0.539062 -0.113094\nv -0.273438 0.539062 -0.110816\nv -0.289062 0.55151 -0.117188\nv -0.289062 0.546875 -0.113624\nv -0.28125 0.548181 -0.117188\nv -0.28125 0.546875 -0.116452\nv -0.273438 0.554183 -0.117188\nv -0.273438 0.546875 -0.113319\nv -0.291954 0.554688 -0.117188\nv -0.296875 0.560583 -0.117188\nv -0.296875 0.554688 -0.111524\nv -0.273083 0.554688 -0.117188\nv -0.298309 0.5625 -0.117188\nv -0.269463 0.5625 -0.117188\nv -0.303094 0.570312 -0.117188\nv -0.304688 0.574795 -0.117188\nv -0.304688 0.570312 -0.113662\nv -0.267667 0.570312 -0.117188\nv -0.305537 0.578125 -0.117188\nv -0.266775 0.578125 -0.117188\nv -0.307428 0.585938 -0.117188\nv -0.266894 0.585938 -0.117188\nv -0.308311 0.59375 -0.117188\nv -0.267436 0.59375 -0.117188\nv -0.308787 0.601562 -0.117188\nv -0.268118 0.601562 -0.117188\nv -0.309342 0.609375 -0.117188\nv -0.268679 0.609375 -0.117188\nv -0.310248 0.617188 -0.117188\nv -0.3125 0.623273 -0.117188\nv -0.269413 0.617188 -0.117188\nv -0.312954 0.625 -0.117188\nv -0.270165 0.625 -0.117188\nv -0.315012 0.632812 -0.117188\nv -0.271181 0.632812 -0.117188\nv -0.316468 0.640625 -0.117188\nv -0.272448 0.640625 -0.117188\nv -0.273438 0.647277 -0.117188\nv -0.317619 0.648438 -0.117188\nv -0.273605 0.648438 -0.117188\nv -0.318825 0.65625 -0.117188\nv -0.274393 0.65625 -0.117188\nv -0.319289 0.664062 -0.117188\nv -0.274747 0.664062 -0.117188\nv -0.319817 0.671875 -0.117188\nv -0.320312 0.678391 -0.117188\nv -0.275068 0.671875 -0.117188\nv -0.32041 0.679688 -0.117188\nv -0.320312 0.679688 -0.113854\nv -0.275537 0.679688 -0.117188\nv -0.320873 0.6875 -0.117188\nv -0.276034 0.6875 -0.117188\nv -0.321152 0.695312 -0.117188\nv -0.276227 0.695312 -0.117188\nv -0.321264 0.703125 -0.117188\nv -0.276525 0.703125 -0.117188\nv -0.321315 0.710938 -0.117188\nv -0.277121 0.710938 -0.117188\nv -0.321907 0.71875 -0.117188\nv -0.27815 0.71875 -0.117188\nv -0.322507 0.726562 -0.117188\nv -0.279258 0.726562 -0.117188\nv -0.323501 0.734375 -0.117188\nv -0.280361 0.734375 -0.117188\nv -0.28125 0.739505 -0.117188\nv -0.324481 0.742188 -0.117188\nv -0.281743 0.742188 -0.117188\nv -0.325292 0.75 -0.117188\nv -0.28295 0.75 -0.117188\nv -0.326031 0.757812 -0.117188\nv -0.284256 0.757812 -0.117188\nv -0.326829 0.765625 -0.117188\nv -0.285644 0.765625 -0.117188\nv -0.327261 0.773438 -0.117188\nv -0.287479 0.773438 -0.117188\nv -0.289062 0.777637 -0.117188\nv -0.32737 0.78125 -0.117188\nv -0.328125 0.78125 -0.111194\nv -0.291442 0.78125 -0.117188\nv -0.296875 0.788268 -0.117188\nv -0.326866 0.789062 -0.117188\nv -0.328125 0.789062 -0.110823\nv -0.297651 0.789062 -0.117188\nv -0.304688 0.796639 -0.117188\nv -0.296875 0.789062 -0.113867\nv -0.323429 0.796875 -0.117188\nv -0.320312 0.802708 -0.117188\nv -0.30491 0.796875 -0.117188\nv -0.3125 0.802602 -0.117188\nv -0.304688 0.796875 -0.116378\nv -0.320312 0.804688 -0.113196\nv -0.3125 0.804688 -0.112883\nv 0.0390625 -0.539713 -0.109375\nv 0.046875 -0.541058 -0.109375\nv 0.0546875 -0.542308 -0.109375\nv 0.0625 -0.543534 -0.109375\nv 0.0703125 -0.544523 -0.109375\nv 0.078125 -0.545037 -0.109375\nv 0.0859375 -0.545172 -0.109375\nv 0.09375 -0.544847 -0.109375\nv 0.101562 -0.543934 -0.109375\nv 0.109375 -0.542727 -0.109375\nv 0.117188 -0.540894 -0.109375\nv 0.015625 -0.531346 -0.109375\nv 0.0234375 -0.534519 -0.109375\nv 0.035891 -0.539062 -0.109375\nv 0.03125 -0.537527 -0.109375\nv 0.124587 -0.539062 -0.109375\nv 0.125 -0.538897 -0.109375\nv 0.132812 -0.535739 -0.109375\nv 0.140625 -0.532389 -0.109375\nv 0.0153968 -0.53125 -0.109375\nv 0.0078125 -0.526964 -0.109375\nv 0.143222 -0.53125 -0.109375\nv 0.140625 -0.53125 -0.102481\nv 0.148438 -0.528074 -0.109375\nv 0.00221885 -0.523438 -0.109375\nv 0.154377 -0.523438 -0.109375\nv 0.15625 -0.519728 -0.109375\nv 0.000485001 -0.515625 -0.109375\nv 0 -0.515625 -0.104871\nv 0.158097 -0.515625 -0.109375\nv 0.15625 -0.515625 -0.105673\nv 0.00399526 -0.507812 -0.109375\nv 0.0078125 -0.505494 -0.109375\nv 0.148438 -0.501 -0.109375\nv 0.157526 -0.507812 -0.109375\nv 0.15625 -0.506734 -0.109375\nv 0.15625 -0.507812 -0.106736\nv 0.0152429 -0.5 -0.109375\nv 0.015625 -0.499735 -0.109375\nv 0.0234375 -0.494805 -0.109375\nv 0.132812 -0.49376 -0.109375\nv 0.146945 -0.5 -0.109375\nv 0.140625 -0.497421 -0.109375\nv 0.0290262 -0.492188 -0.109375\nv 0.03125 -0.491477 -0.109375\nv 0.0390625 -0.489493 -0.109375\nv 0.046875 -0.487628 -0.109375\nv 0.0546875 -0.485854 -0.109375\nv 0.109375 -0.484497 -0.109375\nv 0.117188 -0.487281 -0.109375\nv 0.129667 -0.492188 -0.109375\nv 0.125 -0.490207 -0.109375\nv 0.06169 -0.484375 -0.109375\nv 0.0625 -0.484205 -0.109375\nv 0.0703125 -0.482765 -0.109375\nv 0.078125 -0.481551 -0.109375\nv 0.0859375 -0.480564 -0.109375\nv 0.09375 -0.480388 -0.109375\nv 0.108995 -0.484375 -0.109375\nv 0.101562 -0.482072 -0.109375\nv -0.28125 -0.0638828 -0.109375\nv 0.453125 -0.0654185 -0.109375\nv 0.460938 -0.0672657 -0.109375\nv 0.46875 -0.0645923 -0.109375\nv 0.476562 -0.064095 -0.109375\nv -0.287395 -0.0625 -0.109375\nv -0.289062 -0.0619269 -0.109375\nv -0.289062 -0.0625 -0.101609\nv -0.274698 -0.0625 -0.109375\nv -0.273438 -0.0621518 -0.109375\nv -0.273438 -0.0625 -0.105409\nv 0.450061 -0.0625 -0.109375\nv 0.482909 -0.0625 -0.109375\nv 0.484375 -0.0617734 -0.109375\nv 0.484375 -0.0625 -0.10181\nv -0.294779 -0.0546875 -0.109375\nv -0.296875 -0.0505407 -0.109375\nv -0.26842 -0.0546875 -0.109375\nv -0.265625 -0.0489637 -0.109375\nv 0.447703 -0.0546875 -0.109375\nv 0.489557 -0.0546875 -0.109375\nv 0.492188 -0.0474452 -0.109375\nv -0.297943 -0.046875 -0.109375\nv -0.264824 -0.046875 -0.109375\nv 0.445873 -0.046875 -0.109375\nv 0.492342 -0.046875 -0.109375\nv -0.299199 -0.0390625 -0.109375\nv -0.262605 -0.0390625 -0.109375\nv 0.446173 -0.0390625 -0.109375\nv 0.493839 -0.0390625 -0.109375\nv -0.299434 -0.03125 -0.109375\nv -0.26162 -0.03125 -0.109375\nv 0.445435 -0.03125 -0.109375\nv 0.445312 -0.0304749 -0.109375\nv 0.495961 -0.03125 -0.109375\nv -0.299559 -0.0234375 -0.109375\nv -0.261046 -0.0234375 -0.109375\nv 0.444425 -0.0234375 -0.109375\nv 0.498663 -0.0234375 -0.109375\nv -0.300807 -0.015625 -0.109375\nv -0.260012 -0.015625 -0.109375\nv 0.443744 -0.015625 -0.109375\nv 0.499681 -0.015625 -0.109375\nv -0.302438 -0.0078125 -0.109375\nv -0.260031 -0.0078125 -0.109375\nv 0.441876 -0.0078125 -0.109375\nv 0.499386 -0.0078125 -0.109375\nv -0.30464 0 -0.109375\nv -0.260118 0 -0.109375\nv 0.440773 0 -0.109375\nv 0.499236 0 -0.109375\nv -0.304369 0.0078125 -0.109375\nv -0.258674 0.0078125 -0.109375\nv -0.257812 0.00928958 -0.109375\nv 0.441582 0.0078125 -0.109375\nv 0.499248 0.0078125 -0.109375\nv -0.30301 0.015625 -0.109375\nv -0.252517 0.015625 -0.109375\nv -0.25 0.0175786 -0.109375\nv -0.242188 0.0191134 -0.109375\nv -0.234375 0.0204579 -0.109375\nv -0.226562 0.0233887 -0.109375\nv 0.421875 0.0232372 -0.109375\nv 0.429688 0.021601 -0.109375\nv 0.439536 0.015625 -0.109375\nv 0.4375 0.0172788 -0.109375\nv 0.499434 0.015625 -0.109375\nv -0.301931 0.0234375 -0.109375\nv -0.226448 0.0234375 -0.109375\nv -0.21875 0.0260459 -0.109375\nv -0.210938 0.0270373 -0.109375\nv -0.203125 0.0273705 -0.109375\nv -0.195312 0.0274458 -0.109375\nv -0.1875 0.027555 -0.109375\nv -0.179688 0.0274079 -0.109375\nv -0.171875 0.0274595 -0.109375\nv -0.164062 0.0274193 -0.109375\nv -0.15625 0.02747 -0.109375\nv -0.148438 0.0275637 -0.109375\nv -0.140625 0.0274793 -0.109375\nv -0.132812 0.027452 -0.109375\nv -0.125 0.0276308 -0.109375\nv -0.117188 0.0275801 -0.109375\nv -0.109375 0.0273459 -0.109375\nv -0.101562 0.0270272 -0.109375\nv -0.09375 0.0267002 -0.109375\nv -0.0859375 0.0264612 -0.109375\nv -0.078125 0.0262933 -0.109375\nv -0.0703125 0.0261531 -0.109375\nv -0.0625 0.0259266 -0.109375\nv -0.0546875 0.0258416 -0.109375\nv -0.046875 0.0258645 -0.109375\nv -0.0390625 0.0259203 -0.109375\nv -0.03125 0.0259662 -0.109375\nv -0.0234375 0.0259359 -0.109375\nv -0.015625 0.0259671 -0.109375\nv -0.0078125 0.0260921 -0.109375\nv 0 0.0261519 -0.109375\nv 0.0078125 0.0261088 -0.109375\nv 0.015625 0.0260849 -0.109375\nv 0.0234375 0.0262231 -0.109375\nv 0.03125 0.026318 -0.109375\nv 0.0390625 0.0263915 -0.109375\nv 0.046875 0.0264355 -0.109375\nv 0.0546875 0.0264873 -0.109375\nv 0.0625 0.0264895 -0.109375\nv 0.0703125 0.0264097 -0.109375\nv 0.078125 0.0263263 -0.109375\nv 0.0859375 0.0263251 -0.109375\nv 0.09375 0.0263089 -0.109375\nv 0.101562 0.0262461 -0.109375\nv 0.109375 0.0261252 -0.109375\nv 0.117188 0.0259905 -0.109375\nv 0.125 0.025866 -0.109375\nv 0.132812 0.0257127 -0.109375\nv 0.140625 0.0255706 -0.109375\nv 0.148438 0.0254252 -0.109375\nv 0.15625 0.0251945 -0.109375\nv 0.164062 0.0250043 -0.109375\nv 0.171875 0.024766 -0.109375\nv 0.179688 0.0245806 -0.109375\nv 0.1875 0.0244879 -0.109375\nv 0.195312 0.0244125 -0.109375\nv 0.203125 0.0243539 -0.109375\nv 0.210938 0.0243181 -0.109375\nv 0.21875 0.0243287 -0.109375\nv 0.226562 0.0243552 -0.109375\nv 0.234375 0.0244393 -0.109375\nv 0.242188 0.0245894 -0.109375\nv 0.25 0.0246926 -0.109375\nv 0.257812 0.0248323 -0.109375\nv 0.265625 0.0250095 -0.109375\nv 0.273438 0.0251895 -0.109375\nv 0.28125 0.0253625 -0.109375\nv 0.289062 0.0254877 -0.109375\nv 0.296875 0.0256144 -0.109375\nv 0.304688 0.0257605 -0.109375\nv 0.3125 0.0259747 -0.109375\nv 0.320312 0.0262809 -0.109375\nv 0.328125 0.0266036 -0.109375\nv 0.335938 0.0266816 -0.109375\nv 0.34375 0.0267381 -0.109375\nv 0.351562 0.0268133 -0.109375\nv 0.359375 0.0268349 -0.109375\nv 0.367188 0.0267822 -0.109375\nv 0.375 0.0267784 -0.109375\nv 0.382812 0.0267163 -0.109375\nv 0.390625 0.0264169 -0.109375\nv 0.398438 0.0259657 -0.109375\nv 0.40625 0.0255308 -0.109375\nv 0.42113 0.0234375 -0.109375\nv 0.414062 0.0248899 -0.109375\nv 0.499644 0.0234375 -0.109375\nv -0.300738 0.03125 -0.109375\nv 0.497401 0.03125 -0.109375\nv -0.299664 0.0390625 -0.109375\nv 0.494822 0.0390625 -0.109375\nv -0.297234 0.046875 -0.109375\nv -0.296875 0.0477728 -0.109375\nv 0.49283 0.046875 -0.109375\nv 0.492188 0.0495931 -0.109375\nv -0.294329 0.0546875 -0.109375\nv 0.490718 0.0546875 -0.109375\nv 0.484375 0.0587811 -0.109375\nv -0.291541 0.0625 -0.109375\nv -0.289062 0.067178 -0.109375\nv 0.445312 0.0702588 -0.109375\nv 0.453125 0.0682464 -0.109375\nv 0.460938 0.0668801 -0.109375\nv 0.46875 0.0659802 -0.109375\nv 0.477286 0.0625 -0.109375\nv 0.476562 0.0629144 -0.109375\nv -0.286045 0.0703125 -0.109375\nv -0.28125 0.0751319 -0.109375\nv -0.226562 0.0774254 -0.109375\nv -0.21875 0.0754842 -0.109375\nv -0.210938 0.0741351 -0.109375\nv -0.203125 0.0741128 -0.109375\nv -0.195312 0.074273 -0.109375\nv -0.1875 0.0746694 -0.109375\nv -0.179688 0.0749002 -0.109375\nv -0.171875 0.0749136 -0.109375\nv -0.164062 0.0750248 -0.109375\nv -0.15625 0.0750975 -0.109375\nv -0.148438 0.0751209 -0.109375\nv -0.140625 0.0750406 -0.109375\nv -0.132812 0.0750241 -0.109375\nv -0.125 0.0752921 -0.109375\nv -0.117188 0.0754475 -0.109375\nv -0.109375 0.0754934 -0.109375\nv -0.101562 0.0753787 -0.109375\nv -0.09375 0.0753198 -0.109375\nv -0.0859375 0.0751817 -0.109375\nv -0.078125 0.0749594 -0.109375\nv -0.0703125 0.0747491 -0.109375\nv -0.0625 0.0744903 -0.109375\nv -0.0546875 0.0742802 -0.109375\nv -0.046875 0.0741328 -0.109375\nv -0.0390625 0.073966 -0.109375\nv -0.03125 0.0737847 -0.109375\nv -0.0234375 0.073635 -0.109375\nv -0.015625 0.0736265 -0.109375\nv -0.0078125 0.0737508 -0.109375\nv 0 0.0737546 -0.109375\nv 0.0078125 0.073691 -0.109375\nv 0.015625 0.0737227 -0.109375\nv 0.0234375 0.0737741 -0.109375\nv 0.03125 0.0738136 -0.109375\nv 0.0390625 0.0737647 -0.109375\nv 0.046875 0.0737132 -0.109375\nv 0.0546875 0.0737243 -0.109375\nv 0.0625 0.0737033 -0.109375\nv 0.0703125 0.0736534 -0.109375\nv 0.078125 0.0736447 -0.109375\nv 0.0859375 0.0736357 -0.109375\nv 0.09375 0.0736209 -0.109375\nv 0.101562 0.0735857 -0.109375\nv 0.109375 0.0734868 -0.109375\nv 0.117188 0.073375 -0.109375\nv 0.125 0.0733003 -0.109375\nv 0.132812 0.0732386 -0.109375\nv 0.140625 0.0731934 -0.109375\nv 0.148438 0.0731839 -0.109375\nv 0.15625 0.0731088 -0.109375\nv 0.164062 0.0730666 -0.109375\nv 0.171875 0.073033 -0.109375\nv 0.179688 0.0729837 -0.109375\nv 0.1875 0.0728978 -0.109375\nv 0.195312 0.072842 -0.109375\nv 0.203125 0.0728175 -0.109375\nv 0.210938 0.0727436 -0.109375\nv 0.21875 0.0726702 -0.109375\nv 0.226562 0.0726017 -0.109375\nv 0.234375 0.0725519 -0.109375\nv 0.242188 0.0725845 -0.109375\nv 0.25 0.0726735 -0.109375\nv 0.257812 0.0728035 -0.109375\nv 0.265625 0.0729516 -0.109375\nv 0.273438 0.0731052 -0.109375\nv 0.28125 0.0732436 -0.109375\nv 0.289062 0.0733664 -0.109375\nv 0.296875 0.0734289 -0.109375\nv 0.304688 0.073471 -0.109375\nv 0.3125 0.0734952 -0.109375\nv 0.320312 0.0735149 -0.109375\nv 0.328125 0.0735621 -0.109375\nv 0.335938 0.0736521 -0.109375\nv 0.34375 0.0737188 -0.109375\nv 0.351562 0.073761 -0.109375\nv 0.359375 0.0738215 -0.109375\nv 0.367188 0.0737617 -0.109375\nv 0.375 0.0736188 -0.109375\nv 0.382812 0.0732907 -0.109375\nv 0.390625 0.0729712 -0.109375\nv 0.398438 0.0727756 -0.109375\nv 0.40625 0.0726262 -0.109375\nv 0.414062 0.0724727 -0.109375\nv 0.421875 0.0722835 -0.109375\nv 0.429688 0.0720396 -0.109375\nv 0.444984 0.0703125 -0.109375\nv 0.4375 0.0714648 -0.109375\nv -0.273846 0.078125 -0.109375\nv -0.273438 0.0784331 -0.109375\nv -0.265625 0.0845055 -0.109375\nv -0.228589 0.078125 -0.109375\nv -0.234375 0.0809927 -0.109375\nv -0.263335 0.0859375 -0.109375\nv -0.257812 0.0901255 -0.109375\nv -0.25 0.0885335 -0.109375\nv -0.242009 0.0859375 -0.109375\nv -0.242188 0.0860253 -0.109375\nv -0.242188 0.0859375 -0.106593\nv -0.289062 0.170271 -0.109375\nv -0.28125 0.167343 -0.109375\nv -0.273438 0.166455 -0.109375\nv -0.265625 0.16583 -0.109375\nv -0.257812 0.167598 -0.109375\nv -0.291365 0.171875 -0.109375\nv -0.254536 0.171875 -0.109375\nv -0.25 0.178351 -0.109375\nv -0.295404 0.179688 -0.109375\nv -0.296875 0.183315 -0.109375\nv -0.249357 0.179688 -0.109375\nv -0.298252 0.1875 -0.109375\nv -0.244341 0.1875 -0.109375\nv -0.242188 0.194624 -0.109375\nv -0.299993 0.195312 -0.109375\nv -0.241951 0.195312 -0.109375\nv -0.300303 0.203125 -0.109375\nv -0.241106 0.203125 -0.109375\nv -0.300399 0.210938 -0.109375\nv -0.240583 0.210938 -0.109375\nv -0.300362 0.21875 -0.109375\nv -0.2405 0.21875 -0.109375\nv -0.300295 0.226562 -0.109375\nv -0.24074 0.226562 -0.109375\nv -0.30012 0.234375 -0.109375\nv -0.241056 0.234375 -0.109375\nv -0.300344 0.242188 -0.109375\nv -0.241492 0.242188 -0.109375\nv -0.242188 0.249242 -0.109375\nv -0.30049 0.25 -0.109375\nv -0.242262 0.25 -0.109375\nv -0.300409 0.257812 -0.109375\nv -0.24325 0.257812 -0.109375\nv -0.299813 0.265625 -0.109375\nv -0.243973 0.265625 -0.109375\nv -0.2989 0.273438 -0.109375\nv -0.244633 0.273438 -0.109375\nv -0.29776 0.28125 -0.109375\nv -0.296875 0.287096 -0.109375\nv -0.245699 0.28125 -0.109375\nv -0.296568 0.289062 -0.109375\nv -0.247256 0.289062 -0.109375\nv -0.295207 0.296875 -0.109375\nv -0.248739 0.296875 -0.109375\nv -0.25 0.303785 -0.109375\nv -0.294252 0.304688 -0.109375\nv -0.250185 0.304688 -0.109375\nv -0.293548 0.3125 -0.109375\nv -0.251775 0.3125 -0.109375\nv -0.293102 0.320312 -0.109375\nv -0.252701 0.320312 -0.109375\nv -0.293282 0.328125 -0.109375\nv -0.253912 0.328125 -0.109375\nv -0.293642 0.335938 -0.109375\nv -0.254741 0.335938 -0.109375\nv -0.293865 0.34375 -0.109375\nv -0.254837 0.34375 -0.109375\nv -0.293691 0.351562 -0.109375\nv -0.255289 0.351562 -0.109375\nv -0.293595 0.359375 -0.109375\nv -0.256392 0.359375 -0.109375\nv -0.293284 0.367188 -0.109375\nv -0.257774 0.367188 -0.109375\nv -0.257812 0.367711 -0.109375\nv -0.292791 0.375 -0.109375\nv -0.258292 0.375 -0.109375\nv -0.257812 0.375 -0.105907\nv -0.292068 0.382812 -0.109375\nv -0.259003 0.382812 -0.109375\nv -0.257812 0.382812 -0.102315\nv -0.29073 0.390625 -0.109375\nv -0.260172 0.390625 -0.109375\nv -0.289507 0.398438 -0.109375\nv -0.289062 0.400251 -0.109375\nv -0.262262 0.398438 -0.109375\nv -0.28685 0.40625 -0.109375\nv -0.289062 0.40625 -0.104629\nv -0.264099 0.40625 -0.109375\nv -0.265625 0.410506 -0.109375\nv -0.28429 0.414062 -0.109375\nv -0.28125 0.421563 -0.109375\nv -0.267184 0.414062 -0.109375\nv -0.273438 0.420031 -0.109375\nv -0.265625 0.414062 -0.107479\nv -0.28125 0.421875 -0.109173\nv -0.273438 0.421875 -0.108119\nv -0.265625 0.421875 -0.104029\nv -0.28125 0.429688 -0.105847\nv -0.273438 0.429688 -0.104409\nv -0.28125 0.4375 -0.103811\nv -0.273438 0.4375 -0.101703\nv -0.28125 0.445312 -0.103295\nv -0.28125 0.453125 -0.105678\nv -0.273438 0.453125 -0.104466\nv -0.289062 0.460938 -0.102545\nv -0.28125 0.460938 -0.107317\nv -0.273438 0.465841 -0.109375\nv -0.273438 0.460938 -0.107856\nv -0.275634 0.46875 -0.109375\nv -0.28125 0.46875 -0.107357\nv -0.272456 0.46875 -0.109375\nv -0.273438 0.473062 -0.109375\nv -0.28125 0.476562 -0.106526\nv -0.273438 0.476562 -0.108463\nv -0.28125 0.484375 -0.106235\nv -0.273438 0.484375 -0.106434\nv -0.28125 0.492188 -0.106487\nv -0.273438 0.492188 -0.105774\nv -0.28125 0.5 -0.106936\nv -0.273438 0.5 -0.105491\nv -0.28125 0.507812 -0.107536\nv -0.273438 0.507812 -0.105133\nv -0.28125 0.515625 -0.107916\nv -0.273438 0.515625 -0.105038\nv -0.289062 0.523438 -0.10285\nv -0.28125 0.525516 -0.109375\nv -0.28125 0.523438 -0.108752\nv -0.273438 0.523438 -0.105304\nv -0.283719 0.53125 -0.109375\nv -0.289062 0.53125 -0.10596\nv -0.276279 0.53125 -0.109375\nv -0.273438 0.534103 -0.109375\nv -0.273438 0.53125 -0.107807\nv -0.288817 0.539062 -0.109375\nv -0.289062 0.539319 -0.109375\nv -0.289062 0.539062 -0.109231\nv -0.271183 0.539062 -0.109375\nv -0.293255 0.546875 -0.109375\nv -0.296875 0.552338 -0.109375\nv -0.296875 0.546875 -0.104746\nv -0.269102 0.546875 -0.109375\nv -0.298644 0.554688 -0.109375\nv -0.267855 0.554688 -0.109375\nv -0.302955 0.5625 -0.109375\nv -0.304688 0.566306 -0.109375\nv -0.304688 0.5625 -0.104662\nv -0.26701 0.5625 -0.109375\nv -0.30603 0.570312 -0.109375\nv -0.26648 0.570312 -0.109375\nv -0.307528 0.578125 -0.109375\nv -0.266701 0.578125 -0.109375\nv -0.308217 0.585938 -0.109375\nv -0.267158 0.585938 -0.109375\nv -0.308673 0.59375 -0.109375\nv -0.267871 0.59375 -0.109375\nv -0.309002 0.601562 -0.109375\nv -0.268533 0.601562 -0.109375\nv -0.309354 0.609375 -0.109375\nv -0.26927 0.609375 -0.109375\nv -0.309922 0.617188 -0.109375\nv -0.3125 0.624113 -0.109375\nv -0.270199 0.617188 -0.109375\nv -0.312733 0.625 -0.109375\nv -0.3125 0.625 -0.107116\nv -0.271007 0.625 -0.109375\nv -0.314687 0.632812 -0.109375\nv -0.271995 0.632812 -0.109375\nv -0.316098 0.640625 -0.109375\nv -0.273215 0.640625 -0.109375\nv -0.273438 0.64203 -0.109375\nv -0.273438 0.640625 -0.107254\nv -0.317234 0.648438 -0.109375\nv -0.274431 0.648438 -0.109375\nv -0.318532 0.65625 -0.109375\nv -0.275247 0.65625 -0.109375\nv -0.319059 0.664062 -0.109375\nv -0.27572 0.664062 -0.109375\nv -0.319591 0.671875 -0.109375\nv -0.276084 0.671875 -0.109375\nv -0.32018 0.679688 -0.109375\nv -0.320312 0.681748 -0.109375\nv -0.27654 0.679688 -0.109375\nv -0.320681 0.6875 -0.109375\nv -0.276972 0.6875 -0.109375\nv -0.320996 0.695312 -0.109375\nv -0.276994 0.695312 -0.109375\nv -0.321203 0.703125 -0.109375\nv -0.277106 0.703125 -0.109375\nv -0.321288 0.710938 -0.109375\nv -0.277573 0.710938 -0.109375\nv -0.32193 0.71875 -0.109375\nv -0.278463 0.71875 -0.109375\nv -0.322591 0.726562 -0.109375\nv -0.279333 0.726562 -0.109375\nv -0.323621 0.734375 -0.109375\nv -0.280317 0.734375 -0.109375\nv -0.28125 0.739998 -0.109375\nv -0.324704 0.742188 -0.109375\nv -0.281648 0.742188 -0.109375\nv -0.325526 0.75 -0.109375\nv -0.282935 0.75 -0.109375\nv -0.32633 0.757812 -0.109375\nv -0.284205 0.757812 -0.109375\nv -0.327408 0.765625 -0.109375\nv -0.285516 0.765625 -0.109375\nv -0.328033 0.773438 -0.109375\nv -0.328125 0.775959 -0.109375\nv -0.328125 0.773438 -0.108341\nv -0.287182 0.773438 -0.109375\nv -0.289062 0.778971 -0.109375\nv -0.328268 0.78125 -0.109375\nv -0.290374 0.78125 -0.109375\nv -0.328301 0.789062 -0.109375\nv -0.328125 0.790536 -0.109375\nv -0.296016 0.789062 -0.109375\nv -0.296875 0.790409 -0.109375\nv -0.326791 0.796875 -0.109375\nv -0.328125 0.796875 -0.104913\nv -0.302556 0.796875 -0.109375\nv -0.304688 0.799227 -0.109375\nv -0.321858 0.804688 -0.109375\nv -0.320312 0.80684 -0.109375\nv -0.309877 0.804688 -0.109375\nv -0.3125 0.806541 -0.109375\nv 0.0390625 -0.540254 -0.101562\nv 0.046875 -0.541537 -0.101562\nv 0.0546875 -0.54272 -0.101562\nv 0.0625 -0.543841 -0.101562\nv 0.0703125 -0.544572 -0.101562\nv 0.078125 -0.544834 -0.101562\nv 0.0859375 -0.544831 -0.101562\nv 0.09375 -0.544537 -0.101562\nv 0.101562 -0.543285 -0.101562\nv 0.109375 -0.542124 -0.101562\nv 0.117188 -0.540658 -0.101562\nv 0.015625 -0.532201 -0.101562\nv 0.0234375 -0.535785 -0.101562\nv 0.0325806 -0.539062 -0.101562\nv 0.03125 -0.538676 -0.101562\nv 0.03125 -0.539062 -0.0953072\nv 0.123689 -0.539062 -0.101562\nv 0.125 -0.538533 -0.101562\nv 0.132812 -0.535003 -0.101562\nv 0.0134392 -0.53125 -0.101562\nv 0.0078125 -0.528124 -0.101562\nv 0.140315 -0.53125 -0.101562\nv 0.140625 -0.531052 -0.101562\nv 0.148438 -0.525127 -0.101562\nv 0.00042165 -0.523438 -0.101562\nv 0 -0.519154 -0.101562\nv 0 -0.523438 -0.0999859\nv 0.15053 -0.523438 -0.101562\nv 0.148438 -0.523438 -0.0981552\nv -0.000305817 -0.515625 -0.101562\nv 0 -0.514965 -0.101562\nv 0.154215 -0.515625 -0.101562\nv 0.00323394 -0.507812 -0.101562\nv 0.0078125 -0.504844 -0.101562\nv 0.153902 -0.507812 -0.101562\nv 0.148438 -0.502921 -0.101562\nv 0.0145052 -0.5 -0.101562\nv 0.015625 -0.499147 -0.101562\nv 0.0234375 -0.493328 -0.101562\nv 0.132812 -0.494271 -0.101562\nv 0.144549 -0.5 -0.101562\nv 0.140625 -0.498098 -0.101562\nv 0.0255802 -0.492188 -0.101562\nv 0.0234375 -0.492188 -0.0953348\nv 0.03125 -0.490351 -0.101562\nv 0.0390625 -0.488591 -0.101562\nv 0.046875 -0.486911 -0.101562\nv 0.0546875 -0.485193 -0.101562\nv 0.109375 -0.484527 -0.101562\nv 0.117188 -0.487381 -0.101562\nv 0.128699 -0.492188 -0.101562\nv 0.125 -0.49064 -0.101562\nv 0.0586907 -0.484375 -0.101562\nv 0.0546875 -0.484375 -0.0951576\nv 0.0625 -0.483595 -0.101562\nv 0.0703125 -0.482128 -0.101562\nv 0.078125 -0.481101 -0.101562\nv 0.0859375 -0.480128 -0.101562\nv 0.09375 -0.479736 -0.101562\nv 0.108939 -0.484375 -0.101562\nv 0.101562 -0.481814 -0.101562\nv -0.289062 -0.0625026 -0.101562\nv -0.28125 -0.0643438 -0.101562\nv -0.273438 -0.0627623 -0.101562\nv 0.453125 -0.0654455 -0.101562\nv 0.460938 -0.0672715 -0.101562\nv 0.46875 -0.0648877 -0.101562\nv 0.476562 -0.0644517 -0.101562\nv 0.484375 -0.0625125 -0.101562\nv -0.289066 -0.0625 -0.101562\nv -0.27314 -0.0625 -0.101562\nv 0.450128 -0.0625 -0.101562\nv 0.4844 -0.0625 -0.101562\nv -0.294997 -0.0546875 -0.101562\nv -0.296875 -0.0506887 -0.101562\nv -0.268044 -0.0546875 -0.101562\nv -0.265625 -0.0495789 -0.101562\nv 0.447866 -0.0546875 -0.101562\nv 0.489786 -0.0546875 -0.101562\nv 0.492188 -0.0473207 -0.101562\nv -0.297953 -0.046875 -0.101562\nv -0.264606 -0.046875 -0.101562\nv 0.445969 -0.046875 -0.101562\nv 0.492299 -0.046875 -0.101562\nv -0.29921 -0.0390625 -0.101562\nv -0.262563 -0.0390625 -0.101562\nv 0.446312 -0.0390625 -0.101562\nv 0.49384 -0.0390625 -0.101562\nv -0.29943 -0.03125 -0.101562\nv -0.261579 -0.03125 -0.101562\nv 0.445568 -0.03125 -0.101562\nv 0.445312 -0.0291948 -0.101562\nv 0.495821 -0.03125 -0.101562\nv -0.299566 -0.0234375 -0.101562\nv -0.261018 -0.0234375 -0.101562\nv 0.444729 -0.0234375 -0.101562\nv 0.498411 -0.0234375 -0.101562\nv -0.300899 -0.015625 -0.101562\nv -0.259916 -0.015625 -0.101562\nv 0.443991 -0.015625 -0.101562\nv 0.499464 -0.015625 -0.101562\nv -0.302471 -0.0078125 -0.101562\nv -0.259901 -0.0078125 -0.101562\nv 0.442082 -0.0078125 -0.101562\nv 0.499227 -0.0078125 -0.101562\nv -0.30456 0 -0.101562\nv -0.260043 0 -0.101562\nv 0.440916 0 -0.101562\nv 0.499146 0 -0.101562\nv -0.304388 0.0078125 -0.101562\nv -0.258541 0.0078125 -0.101562\nv -0.257812 0.00900144 -0.101562\nv 0.441473 0.0078125 -0.101562\nv 0.49916 0.0078125 -0.101562\nv -0.303022 0.015625 -0.101562\nv -0.251921 0.015625 -0.101562\nv -0.25 0.0170671 -0.101562\nv -0.242188 0.0187706 -0.101562\nv -0.234375 0.0202264 -0.101562\nv -0.226562 0.0232602 -0.101562\nv 0.421875 0.0232098 -0.101562\nv 0.429688 0.0216013 -0.101562\nv 0.439454 0.015625 -0.101562\nv 0.4375 0.0172715 -0.101562\nv 0.49933 0.015625 -0.101562\nv -0.301897 0.0234375 -0.101562\nv -0.226131 0.0234375 -0.101562\nv -0.21875 0.0258611 -0.101562\nv -0.210938 0.0268407 -0.101562\nv -0.203125 0.0271883 -0.101562\nv -0.195312 0.0272445 -0.101562\nv -0.1875 0.0273835 -0.101562\nv -0.179688 0.0272777 -0.101562\nv -0.171875 0.0274021 -0.101562\nv -0.164062 0.0273438 -0.101562\nv -0.15625 0.0273812 -0.101562\nv -0.148438 0.0274932 -0.101562\nv -0.140625 0.0274082 -0.101562\nv -0.132812 0.027382 -0.101562\nv -0.125 0.0276169 -0.101562\nv -0.117188 0.0275599 -0.101562\nv -0.109375 0.0273018 -0.101562\nv -0.101562 0.0270139 -0.101562\nv -0.09375 0.0266614 -0.101562\nv -0.0859375 0.0263469 -0.101562\nv -0.078125 0.0261573 -0.101562\nv -0.0703125 0.0260505 -0.101562\nv -0.0625 0.0258691 -0.101562\nv -0.0546875 0.0258013 -0.101562\nv -0.046875 0.0257678 -0.101562\nv -0.0390625 0.0257997 -0.101562\nv -0.03125 0.025859 -0.101562\nv -0.0234375 0.0258457 -0.101562\nv -0.015625 0.0258863 -0.101562\nv -0.0078125 0.026031 -0.101562\nv 0 0.026066 -0.101562\nv 0.0078125 0.0260411 -0.101562\nv 0.015625 0.0260855 -0.101562\nv 0.0234375 0.0261366 -0.101562\nv 0.03125 0.0262612 -0.101562\nv 0.0390625 0.0263356 -0.101562\nv 0.046875 0.0263947 -0.101562\nv 0.0546875 0.0264074 -0.101562\nv 0.0625 0.0264075 -0.101562\nv 0.0703125 0.0264015 -0.101562\nv 0.078125 0.0263283 -0.101562\nv 0.0859375 0.0263114 -0.101562\nv 0.09375 0.0263024 -0.101562\nv 0.101562 0.026264 -0.101562\nv 0.109375 0.0261653 -0.101562\nv 0.117188 0.0260383 -0.101562\nv 0.125 0.025913 -0.101562\nv 0.132812 0.0257566 -0.101562\nv 0.140625 0.0255933 -0.101562\nv 0.148438 0.0253863 -0.101562\nv 0.15625 0.0252119 -0.101562\nv 0.164062 0.0249079 -0.101562\nv 0.171875 0.0247306 -0.101562\nv 0.179688 0.024573 -0.101562\nv 0.1875 0.0244722 -0.101562\nv 0.195312 0.024407 -0.101562\nv 0.203125 0.0243448 -0.101562\nv 0.210938 0.0242809 -0.101562\nv 0.21875 0.0242486 -0.101562\nv 0.226562 0.0242721 -0.101562\nv 0.234375 0.0243428 -0.101562\nv 0.242188 0.0245098 -0.101562\nv 0.25 0.0246586 -0.101562\nv 0.257812 0.0248332 -0.101562\nv 0.265625 0.0250196 -0.101562\nv 0.273438 0.0252189 -0.101562\nv 0.28125 0.0254065 -0.101562\nv 0.289062 0.0255271 -0.101562\nv 0.296875 0.025659 -0.101562\nv 0.304688 0.0258114 -0.101562\nv 0.3125 0.0260251 -0.101562\nv 0.320312 0.0263263 -0.101562\nv 0.328125 0.0266533 -0.101562\nv 0.335938 0.0267282 -0.101562\nv 0.34375 0.0267901 -0.101562\nv 0.351562 0.0268478 -0.101562\nv 0.359375 0.0268503 -0.101562\nv 0.367188 0.0267946 -0.101562\nv 0.375 0.0267655 -0.101562\nv 0.382812 0.026682 -0.101562\nv 0.390625 0.0263813 -0.101562\nv 0.398438 0.025912 -0.101562\nv 0.40625 0.0254898 -0.101562\nv 0.421034 0.0234375 -0.101562\nv 0.414062 0.024861 -0.101562\nv 0.499532 0.0234375 -0.101562\nv -0.300698 0.03125 -0.101562\nv 0.497366 0.03125 -0.101562\nv -0.299636 0.0390625 -0.101562\nv 0.494785 0.0390625 -0.101562\nv -0.297216 0.046875 -0.101562\nv -0.296875 0.0477646 -0.101562\nv 0.492834 0.046875 -0.101562\nv 0.492188 0.0496475 -0.101562\nv -0.294427 0.0546875 -0.101562\nv 0.490771 0.0546875 -0.101562\nv 0.484375 0.0588228 -0.101562\nv -0.291508 0.0625 -0.101562\nv -0.289062 0.0674274 -0.101562\nv 0.445312 0.0702617 -0.101562\nv 0.453125 0.0682709 -0.101562\nv 0.460938 0.0669891 -0.101562\nv 0.46875 0.0660687 -0.101562\nv 0.477291 0.0625 -0.101562\nv 0.476562 0.0629182 -0.101562\nv -0.286245 0.0703125 -0.101562\nv -0.28125 0.0754178 -0.101562\nv -0.226562 0.0773403 -0.101562\nv -0.21875 0.0753639 -0.101562\nv -0.210938 0.0740146 -0.101562\nv -0.203125 0.0740293 -0.101562\nv -0.195312 0.0742276 -0.101562\nv -0.1875 0.0746457 -0.101562\nv -0.179688 0.0748226 -0.101562\nv -0.171875 0.0748722 -0.101562\nv -0.164062 0.074988 -0.101562\nv -0.15625 0.0750863 -0.101562\nv -0.148438 0.0751413 -0.101562\nv -0.140625 0.0750592 -0.101562\nv -0.132812 0.0750597 -0.101562\nv -0.125 0.0753138 -0.101562\nv -0.117188 0.0754648 -0.101562\nv -0.109375 0.0754597 -0.101562\nv -0.101562 0.0753334 -0.101562\nv -0.09375 0.075263 -0.101562\nv -0.0859375 0.0751755 -0.101562\nv -0.078125 0.0749722 -0.101562\nv -0.0703125 0.0747102 -0.101562\nv -0.0625 0.0744745 -0.101562\nv -0.0546875 0.0742713 -0.101562\nv -0.046875 0.0740944 -0.101562\nv -0.0390625 0.0739561 -0.101562\nv -0.03125 0.0738169 -0.101562\nv -0.0234375 0.0736437 -0.101562\nv -0.015625 0.0736155 -0.101562\nv -0.0078125 0.0737508 -0.101562\nv 0 0.0737521 -0.101562\nv 0.0078125 0.0737128 -0.101562\nv 0.015625 0.0737334 -0.101562\nv 0.0234375 0.0738015 -0.101562\nv 0.03125 0.0738872 -0.101562\nv 0.0390625 0.0739113 -0.101562\nv 0.046875 0.0738577 -0.101562\nv 0.0546875 0.0738108 -0.101562\nv 0.0625 0.0737845 -0.101562\nv 0.0703125 0.0737037 -0.101562\nv 0.078125 0.0736962 -0.101562\nv 0.0859375 0.0737194 -0.101562\nv 0.09375 0.0737084 -0.101562\nv 0.101562 0.0736789 -0.101562\nv 0.109375 0.0736019 -0.101562\nv 0.117188 0.0734871 -0.101562\nv 0.125 0.0734267 -0.101562\nv 0.132812 0.0733519 -0.101562\nv 0.140625 0.0733363 -0.101562\nv 0.148438 0.0732386 -0.101562\nv 0.15625 0.0731548 -0.101562\nv 0.164062 0.0731051 -0.101562\nv 0.171875 0.0730679 -0.101562\nv 0.179688 0.0730392 -0.101562\nv 0.1875 0.0729694 -0.101562\nv 0.195312 0.0729121 -0.101562\nv 0.203125 0.0728633 -0.101562\nv 0.210938 0.0727823 -0.101562\nv 0.21875 0.0727014 -0.101562\nv 0.226562 0.0726326 -0.101562\nv 0.234375 0.072586 -0.101562\nv 0.242188 0.0726058 -0.101562\nv 0.25 0.0726949 -0.101562\nv 0.257812 0.072818 -0.101562\nv 0.265625 0.0729479 -0.101562\nv 0.273438 0.073094 -0.101562\nv 0.28125 0.0732265 -0.101562\nv 0.289062 0.0733517 -0.101562\nv 0.296875 0.0734169 -0.101562\nv 0.304688 0.0734592 -0.101562\nv 0.3125 0.0734904 -0.101562\nv 0.320312 0.0735239 -0.101562\nv 0.328125 0.0735774 -0.101562\nv 0.335938 0.0736627 -0.101562\nv 0.34375 0.0737357 -0.101562\nv 0.351562 0.0737572 -0.101562\nv 0.359375 0.0738193 -0.101562\nv 0.367188 0.0737781 -0.101562\nv 0.375 0.0736143 -0.101562\nv 0.382812 0.0732529 -0.101562\nv 0.390625 0.0729244 -0.101562\nv 0.398438 0.0727139 -0.101562\nv 0.40625 0.0725704 -0.101562\nv 0.414062 0.0723867 -0.101562\nv 0.421875 0.072179 -0.101562\nv 0.429688 0.0719184 -0.101562\nv 0.444974 0.0703125 -0.101562\nv 0.4375 0.0713642 -0.101562\nv 0.445312 0.0703125 -0.0969032\nv -0.275807 0.078125 -0.101562\nv -0.273438 0.0797646 -0.101562\nv -0.265625 0.0849913 -0.101562\nv -0.242188 0.0857157 -0.101562\nv -0.22886 0.078125 -0.101562\nv -0.234375 0.0807051 -0.101562\nv -0.264208 0.0859375 -0.101562\nv -0.257812 0.0905409 -0.101562\nv -0.242535 0.0859375 -0.101562\nv -0.25 0.089266 -0.101562\nv -0.289062 0.16985 -0.101562\nv -0.28125 0.167396 -0.101562\nv -0.273438 0.166153 -0.101562\nv -0.265625 0.165938 -0.101562\nv -0.257812 0.168298 -0.101562\nv -0.291996 0.171875 -0.101562\nv -0.254801 0.171875 -0.101562\nv -0.25 0.178564 -0.101562\nv -0.295775 0.179688 -0.101562\nv -0.296875 0.18258 -0.101562\nv -0.249414 0.179688 -0.101562\nv -0.298375 0.1875 -0.101562\nv -0.244485 0.1875 -0.101562\nv -0.242188 0.194925 -0.101562\nv -0.299837 0.195312 -0.101562\nv -0.242048 0.195312 -0.101562\nv -0.242188 0.195312 -0.0989033\nv -0.300106 0.203125 -0.101562\nv -0.241137 0.203125 -0.101562\nv -0.300255 0.210938 -0.101562\nv -0.24054 0.210938 -0.101562\nv -0.300246 0.21875 -0.101562\nv -0.240658 0.21875 -0.101562\nv -0.300172 0.226562 -0.101562\nv -0.240913 0.226562 -0.101562\nv -0.300015 0.234375 -0.101562\nv -0.241229 0.234375 -0.101562\nv -0.300271 0.242188 -0.101562\nv -0.241685 0.242188 -0.101562\nv -0.242188 0.247451 -0.101562\nv -0.300394 0.25 -0.101562\nv -0.242429 0.25 -0.101562\nv -0.300322 0.257812 -0.101562\nv -0.243292 0.257812 -0.101562\nv -0.299826 0.265625 -0.101562\nv -0.244098 0.265625 -0.101562\nv -0.29906 0.273438 -0.101562\nv -0.244854 0.273438 -0.101562\nv -0.298058 0.28125 -0.101562\nv -0.296875 0.288652 -0.101562\nv -0.24603 0.28125 -0.101562\nv -0.296807 0.289062 -0.101562\nv -0.296875 0.289062 -0.100172\nv -0.247573 0.289062 -0.101562\nv -0.295342 0.296875 -0.101562\nv -0.249012 0.296875 -0.101562\nv -0.25 0.30236 -0.101562\nv -0.294461 0.304688 -0.101562\nv -0.250477 0.304688 -0.101562\nv -0.293754 0.3125 -0.101562\nv -0.252148 0.3125 -0.101562\nv -0.293315 0.320312 -0.101562\nv -0.252976 0.320312 -0.101562\nv -0.293588 0.328125 -0.101562\nv -0.254173 0.328125 -0.101562\nv -0.293904 0.335938 -0.101562\nv -0.254875 0.335938 -0.101562\nv -0.294043 0.34375 -0.101562\nv -0.254737 0.34375 -0.101562\nv -0.294107 0.351562 -0.101562\nv -0.255019 0.351562 -0.101562\nv -0.294147 0.359375 -0.101562\nv -0.255889 0.359375 -0.101562\nv -0.293814 0.367188 -0.101562\nv -0.256752 0.367188 -0.101562\nv -0.293401 0.375 -0.101562\nv -0.257231 0.375 -0.101562\nv -0.292822 0.382812 -0.101562\nv -0.257716 0.382812 -0.101562\nv -0.257812 0.383587 -0.101562\nv -0.291919 0.390625 -0.101562\nv -0.25902 0.390625 -0.101562\nv -0.291082 0.398438 -0.101562\nv -0.260428 0.398438 -0.101562\nv -0.290056 0.40625 -0.101562\nv -0.289062 0.411137 -0.101562\nv -0.261522 0.40625 -0.101562\nv -0.288219 0.414062 -0.101562\nv -0.289062 0.414062 -0.0999626\nv -0.262695 0.414062 -0.101562\nv -0.286415 0.421875 -0.101562\nv -0.289062 0.421875 -0.0973447\nv -0.263948 0.421875 -0.101562\nv -0.265625 0.429067 -0.101562\nv -0.284992 0.429688 -0.101562\nv -0.289062 0.429688 -0.0956022\nv -0.266035 0.429688 -0.101562\nv -0.265625 0.429688 -0.100881\nv -0.283422 0.4375 -0.101562\nv -0.273032 0.4375 -0.101562\nv -0.273438 0.438321 -0.101562\nv -0.265625 0.4375 -0.0943362\nv -0.283467 0.445312 -0.101562\nv -0.289062 0.445312 -0.0966881\nv -0.276533 0.445312 -0.101562\nv -0.273438 0.447256 -0.101562\nv -0.273438 0.445312 -0.100369\nv -0.287572 0.453125 -0.101562\nv -0.289062 0.45695 -0.101562\nv -0.289062 0.453125 -0.10012\nv -0.26937 0.453125 -0.101562\nv -0.289765 0.460938 -0.101562\nv -0.289062 0.465759 -0.101562\nv -0.267513 0.460938 -0.101562\nv -0.265625 0.460938 -0.0954021\nv -0.288233 0.46875 -0.101562\nv -0.289062 0.46875 -0.100359\nv -0.267192 0.46875 -0.101562\nv -0.265625 0.46875 -0.0965828\nv -0.286639 0.476562 -0.101562\nv -0.289062 0.476562 -0.098164\nv -0.267881 0.476562 -0.101562\nv -0.265625 0.476562 -0.0951201\nv -0.285746 0.484375 -0.101562\nv -0.289062 0.484375 -0.09679\nv -0.268602 0.484375 -0.101562\nv -0.265625 0.484375 -0.0944825\nv -0.285416 0.492188 -0.101562\nv -0.289062 0.492188 -0.0960393\nv -0.26924 0.492188 -0.101562\nv -0.285546 0.5 -0.101562\nv -0.289062 0.5 -0.0965951\nv -0.26962 0.5 -0.101562\nv -0.286461 0.507812 -0.101562\nv -0.289062 0.507812 -0.0980968\nv -0.269881 0.507812 -0.101562\nv -0.287577 0.515625 -0.101562\nv -0.289062 0.519843 -0.101562\nv -0.289062 0.515625 -0.0997815\nv -0.269901 0.515625 -0.101562\nv -0.290176 0.523438 -0.101562\nv -0.269713 0.523438 -0.101562\nv -0.293166 0.53125 -0.101562\nv -0.296875 0.53125 -0.0955628\nv -0.268627 0.53125 -0.101562\nv -0.296344 0.539062 -0.101562\nv -0.296875 0.540479 -0.101562\nv -0.296875 0.539062 -0.100434\nv -0.267707 0.539062 -0.101562\nv -0.299474 0.546875 -0.101562\nv -0.267017 0.546875 -0.101562\nv -0.302985 0.554688 -0.101562\nv -0.304688 0.559439 -0.101562\nv -0.304688 0.554688 -0.0953047\nv -0.266507 0.554688 -0.101562\nv -0.305524 0.5625 -0.101562\nv -0.266324 0.5625 -0.101562\nv -0.307131 0.570312 -0.101562\nv -0.266504 0.570312 -0.101562\nv -0.307756 0.578125 -0.101562\nv -0.266934 0.578125 -0.101562\nv -0.308257 0.585938 -0.101562\nv -0.267552 0.585938 -0.101562\nv -0.308528 0.59375 -0.101562\nv -0.268361 0.59375 -0.101562\nv -0.308673 0.601562 -0.101562\nv -0.269148 0.601562 -0.101562\nv -0.308676 0.609375 -0.101562\nv -0.270061 0.609375 -0.101562\nv -0.308924 0.617188 -0.101562\nv -0.271081 0.617188 -0.101562\nv -0.311877 0.625 -0.101562\nv -0.3125 0.627312 -0.101562\nv -0.271966 0.625 -0.101562\nv -0.313928 0.632812 -0.101562\nv -0.272857 0.632812 -0.101562\nv -0.273438 0.636668 -0.101562\nv -0.273438 0.632812 -0.0958073\nv -0.315464 0.640625 -0.101562\nv -0.274027 0.640625 -0.101562\nv -0.31669 0.648438 -0.101562\nv -0.275213 0.648438 -0.101562\nv -0.318057 0.65625 -0.101562\nv -0.27604 0.65625 -0.101562\nv -0.318711 0.664062 -0.101562\nv -0.276466 0.664062 -0.101562\nv -0.319307 0.671875 -0.101562\nv -0.276784 0.671875 -0.101562\nv -0.319968 0.679688 -0.101562\nv -0.320312 0.684853 -0.101562\nv -0.277267 0.679688 -0.101562\nv -0.320484 0.6875 -0.101562\nv -0.320312 0.6875 -0.0986396\nv -0.277727 0.6875 -0.101562\nv -0.320848 0.695312 -0.101562\nv -0.277735 0.695312 -0.101562\nv -0.32116 0.703125 -0.101562\nv -0.277722 0.703125 -0.101562\nv -0.321288 0.710938 -0.101562\nv -0.277923 0.710938 -0.101562\nv -0.321954 0.71875 -0.101562\nv -0.278673 0.71875 -0.101562\nv -0.322694 0.726562 -0.101562\nv -0.279464 0.726562 -0.101562\nv -0.323821 0.734375 -0.101562\nv -0.280335 0.734375 -0.101562\nv -0.28125 0.7404 -0.101562\nv -0.324902 0.742188 -0.101562\nv -0.281556 0.742188 -0.101562\nv -0.325733 0.75 -0.101562\nv -0.282909 0.75 -0.101562\nv -0.326541 0.757812 -0.101562\nv -0.284142 0.757812 -0.101562\nv -0.327747 0.765625 -0.101562\nv -0.328125 0.768962 -0.101562\nv -0.285415 0.765625 -0.101562\nv -0.328538 0.773438 -0.101562\nv -0.287003 0.773438 -0.101562\nv -0.289062 0.780136 -0.101562\nv -0.328904 0.78125 -0.101562\nv -0.289615 0.78125 -0.101562\nv -0.329122 0.789062 -0.101562\nv -0.294548 0.789062 -0.101562\nv -0.296875 0.792984 -0.101562\nv -0.328738 0.796875 -0.101562\nv -0.328125 0.799391 -0.101562\nv -0.300038 0.796875 -0.101562\nv -0.304688 0.801985 -0.101562\nv -0.325683 0.804688 -0.101562\nv -0.328125 0.804688 -0.0966751\nv -0.320312 0.811276 -0.101562\nv -0.306976 0.804688 -0.101562\nv -0.3125 0.809241 -0.101562\nv -0.320312 0.8125 -0.0989194\nv -0.3125 0.8125 -0.0955833\nv 0.03125 -0.539126 -0.09375\nv 0.0390625 -0.540622 -0.09375\nv 0.046875 -0.541911 -0.09375\nv 0.0546875 -0.54305 -0.09375\nv 0.0625 -0.543868 -0.09375\nv 0.0703125 -0.544308 -0.09375\nv 0.078125 -0.5444 -0.09375\nv 0.0859375 -0.544428 -0.09375\nv 0.09375 -0.544204 -0.09375\nv 0.101562 -0.543001 -0.09375\nv 0.109375 -0.54167 -0.09375\nv 0.117188 -0.539839 -0.09375\nv 0.015625 -0.533488 -0.09375\nv 0.0309464 -0.539062 -0.09375\nv 0.0234375 -0.536659 -0.09375\nv 0.120136 -0.539062 -0.09375\nv 0.117188 -0.539062 -0.0884938\nv 0.125 -0.536949 -0.09375\nv 0.132812 -0.532881 -0.09375\nv 0 -0.524607 -0.09375\nv 0.0109885 -0.53125 -0.09375\nv 0.0078125 -0.52932 -0.09375\nv 0.135481 -0.53125 -0.09375\nv 0.132812 -0.53125 -0.0901058\nv 0.140625 -0.527364 -0.09375\nv -0.00144023 -0.523438 -0.09375\nv 0.145752 -0.523438 -0.09375\nv 0.148438 -0.51689 -0.09375\nv -0.00159813 -0.515625 -0.09375\nv 0 -0.512244 -0.09375\nv 0.148964 -0.515625 -0.09375\nv 0.148438 -0.515625 -0.0928064\nv 0.00207801 -0.507812 -0.09375\nv 0 -0.507812 -0.0874023\nv 0.0078125 -0.503829 -0.09375\nv 0.150042 -0.507812 -0.09375\nv 0.148438 -0.506331 -0.09375\nv 0.148438 -0.507812 -0.0903582\nv 0.0130298 -0.5 -0.09375\nv 0.015625 -0.497794 -0.09375\nv 0.132812 -0.494775 -0.09375\nv 0.140975 -0.5 -0.09375\nv 0.140625 -0.4998 -0.09375\nv 0.140625 -0.5 -0.092792\nv 0.0229938 -0.492188 -0.09375\nv 0.0234375 -0.492001 -0.09375\nv 0.03125 -0.489628 -0.09375\nv 0.0390625 -0.487773 -0.09375\nv 0.046875 -0.486073 -0.09375\nv 0.109375 -0.484949 -0.09375\nv 0.117188 -0.488032 -0.09375\nv 0.128022 -0.492188 -0.09375\nv 0.125 -0.491009 -0.09375\nv 0.0539485 -0.484375 -0.09375\nv 0.0546875 -0.484196 -0.09375\nv 0.0625 -0.482738 -0.09375\nv 0.0703125 -0.481497 -0.09375\nv 0.078125 -0.480669 -0.09375\nv 0.0859375 -0.479885 -0.09375\nv 0.09375 -0.479759 -0.09375\nv 0.107867 -0.484375 -0.09375\nv 0.101562 -0.48209 -0.09375\nv -0.289062 -0.0629717 -0.09375\nv -0.28125 -0.0647466 -0.09375\nv -0.273438 -0.0632502 -0.09375\nv 0.453125 -0.0656797 -0.09375\nv 0.460938 -0.0673696 -0.09375\nv 0.46875 -0.0650953 -0.09375\nv 0.476562 -0.0647065 -0.09375\nv 0.484375 -0.062782 -0.09375\nv -0.289758 -0.0625 -0.09375\nv -0.272583 -0.0625 -0.09375\nv 0.449853 -0.0625 -0.09375\nv 0.484921 -0.0625 -0.09375\nv -0.295205 -0.0546875 -0.09375\nv -0.296875 -0.0508876 -0.09375\nv -0.267648 -0.0546875 -0.09375\nv -0.265625 -0.0502855 -0.09375\nv 0.447629 -0.0546875 -0.09375\nv 0.489923 -0.0546875 -0.09375\nv 0.492188 -0.0472377 -0.09375\nv -0.297985 -0.046875 -0.09375\nv -0.264364 -0.046875 -0.09375\nv 0.445703 -0.046875 -0.09375\nv 0.492273 -0.046875 -0.09375\nv -0.299222 -0.0390625 -0.09375\nv -0.262509 -0.0390625 -0.09375\nv 0.44595 -0.0390625 -0.09375\nv 0.493744 -0.0390625 -0.09375\nv -0.299436 -0.03125 -0.09375\nv -0.261538 -0.03125 -0.09375\nv 0.445333 -0.03125 -0.09375\nv 0.445312 -0.0310797 -0.09375\nv 0.445312 -0.03125 -0.0932361\nv 0.495778 -0.03125 -0.09375\nv -0.299622 -0.0234375 -0.09375\nv -0.260957 -0.0234375 -0.09375\nv 0.444556 -0.0234375 -0.09375\nv 0.49839 -0.0234375 -0.09375\nv -0.300984 -0.015625 -0.09375\nv -0.259757 -0.015625 -0.09375\nv 0.443707 -0.015625 -0.09375\nv 0.499506 -0.015625 -0.09375\nv -0.302574 -0.0078125 -0.09375\nv -0.259738 -0.0078125 -0.09375\nv 0.441754 -0.0078125 -0.09375\nv 0.499276 -0.0078125 -0.09375\nv -0.304499 0 -0.09375\nv -0.259842 0 -0.09375\nv 0.440458 0 -0.09375\nv 0.499155 0 -0.09375\nv -0.304413 0.0078125 -0.09375\nv -0.258371 0.0078125 -0.09375\nv -0.257812 0.00871143 -0.09375\nv 0.440846 0.0078125 -0.09375\nv 0.499118 0.0078125 -0.09375\nv -0.303032 0.015625 -0.09375\nv -0.251342 0.015625 -0.09375\nv -0.25 0.0165861 -0.09375\nv -0.242188 0.0184046 -0.09375\nv -0.234375 0.0200129 -0.09375\nv -0.226562 0.0231 -0.09375\nv 0.421875 0.0230836 -0.09375\nv 0.429688 0.0215501 -0.09375\nv 0.438795 0.015625 -0.09375\nv 0.4375 0.0167576 -0.09375\nv 0.499275 0.015625 -0.09375\nv -0.301849 0.0234375 -0.09375\nv -0.225715 0.0234375 -0.09375\nv -0.21875 0.0256645 -0.09375\nv -0.210938 0.0266454 -0.09375\nv -0.203125 0.0269989 -0.09375\nv -0.195312 0.0270242 -0.09375\nv -0.1875 0.0272074 -0.09375\nv -0.179688 0.0271362 -0.09375\nv -0.171875 0.0273131 -0.09375\nv -0.164062 0.0272412 -0.09375\nv -0.15625 0.0272732 -0.09375\nv -0.148438 0.0274068 -0.09375\nv -0.140625 0.0273389 -0.09375\nv -0.132812 0.0273435 -0.09375\nv -0.125 0.0276088 -0.09375\nv -0.117188 0.0275647 -0.09375\nv -0.109375 0.0272854 -0.09375\nv -0.101562 0.0269281 -0.09375\nv -0.09375 0.0266198 -0.09375\nv -0.0859375 0.026296 -0.09375\nv -0.078125 0.0260968 -0.09375\nv -0.0703125 0.0259842 -0.09375\nv -0.0625 0.0257839 -0.09375\nv -0.0546875 0.0256985 -0.09375\nv -0.046875 0.0256669 -0.09375\nv -0.0390625 0.0257073 -0.09375\nv -0.03125 0.0257594 -0.09375\nv -0.0234375 0.0257993 -0.09375\nv -0.015625 0.0258307 -0.09375\nv -0.0078125 0.0259575 -0.09375\nv 0 0.025976 -0.09375\nv 0.0078125 0.0259688 -0.09375\nv 0.015625 0.0260742 -0.09375\nv 0.0234375 0.0261723 -0.09375\nv 0.03125 0.0262185 -0.09375\nv 0.0390625 0.0262866 -0.09375\nv 0.046875 0.026312 -0.09375\nv 0.0546875 0.0262992 -0.09375\nv 0.0625 0.0263013 -0.09375\nv 0.0703125 0.0263038 -0.09375\nv 0.078125 0.0263024 -0.09375\nv 0.0859375 0.0263039 -0.09375\nv 0.09375 0.0262838 -0.09375\nv 0.101562 0.0262326 -0.09375\nv 0.109375 0.0261163 -0.09375\nv 0.117188 0.0260069 -0.09375\nv 0.125 0.0258762 -0.09375\nv 0.132812 0.0257481 -0.09375\nv 0.140625 0.0255625 -0.09375\nv 0.148438 0.0254074 -0.09375\nv 0.15625 0.0252028 -0.09375\nv 0.164062 0.0249362 -0.09375\nv 0.171875 0.0247097 -0.09375\nv 0.179688 0.0245674 -0.09375\nv 0.1875 0.0244622 -0.09375\nv 0.195312 0.0244034 -0.09375\nv 0.203125 0.0243315 -0.09375\nv 0.210938 0.0242431 -0.09375\nv 0.21875 0.0241732 -0.09375\nv 0.226562 0.0242018 -0.09375\nv 0.234375 0.0242899 -0.09375\nv 0.242188 0.0244531 -0.09375\nv 0.25 0.0246275 -0.09375\nv 0.257812 0.0248277 -0.09375\nv 0.265625 0.0250149 -0.09375\nv 0.273438 0.0252187 -0.09375\nv 0.28125 0.0254101 -0.09375\nv 0.289062 0.0255428 -0.09375\nv 0.296875 0.0256799 -0.09375\nv 0.304688 0.0258538 -0.09375\nv 0.3125 0.0260711 -0.09375\nv 0.320312 0.0263784 -0.09375\nv 0.328125 0.0267002 -0.09375\nv 0.335938 0.026783 -0.09375\nv 0.34375 0.0268408 -0.09375\nv 0.351562 0.0268711 -0.09375\nv 0.359375 0.0268758 -0.09375\nv 0.367188 0.0268122 -0.09375\nv 0.375 0.0267856 -0.09375\nv 0.382812 0.0266817 -0.09375\nv 0.390625 0.0263485 -0.09375\nv 0.398438 0.0258848 -0.09375\nv 0.40625 0.0254493 -0.09375\nv 0.420589 0.0234375 -0.09375\nv 0.414062 0.0247882 -0.09375\nv 0.499432 0.0234375 -0.09375\nv -0.300629 0.03125 -0.09375\nv 0.497323 0.03125 -0.09375\nv -0.299582 0.0390625 -0.09375\nv 0.494776 0.0390625 -0.09375\nv -0.297218 0.046875 -0.09375\nv -0.296875 0.0477209 -0.09375\nv 0.492888 0.046875 -0.09375\nv 0.492188 0.0497138 -0.09375\nv -0.294367 0.0546875 -0.09375\nv 0.490735 0.0546875 -0.09375\nv 0.484375 0.0588527 -0.09375\nv -0.291349 0.0625 -0.09375\nv -0.289062 0.0680268 -0.09375\nv 0.453125 0.0683725 -0.09375\nv 0.460938 0.0671306 -0.09375\nv 0.46875 0.0661597 -0.09375\nv 0.477281 0.0625 -0.09375\nv 0.476562 0.0629174 -0.09375\nv -0.287194 0.0703125 -0.09375\nv -0.28125 0.0765457 -0.09375\nv -0.226562 0.0771279 -0.09375\nv -0.21875 0.0752587 -0.09375\nv -0.210938 0.0739612 -0.09375\nv -0.203125 0.0740389 -0.09375\nv -0.195312 0.0742819 -0.09375\nv -0.1875 0.0746637 -0.09375\nv -0.179688 0.0748114 -0.09375\nv -0.171875 0.0748702 -0.09375\nv -0.164062 0.0749924 -0.09375\nv -0.15625 0.0751007 -0.09375\nv -0.148438 0.0751751 -0.09375\nv -0.140625 0.0750646 -0.09375\nv -0.132812 0.0750866 -0.09375\nv -0.125 0.0753022 -0.09375\nv -0.117188 0.0754673 -0.09375\nv -0.109375 0.075401 -0.09375\nv -0.101562 0.0752646 -0.09375\nv -0.09375 0.0751876 -0.09375\nv -0.0859375 0.0751635 -0.09375\nv -0.078125 0.0749658 -0.09375\nv -0.0703125 0.074712 -0.09375\nv -0.0625 0.0744538 -0.09375\nv -0.0546875 0.074254 -0.09375\nv -0.046875 0.0740796 -0.09375\nv -0.0390625 0.0739575 -0.09375\nv -0.03125 0.0738236 -0.09375\nv -0.0234375 0.0736917 -0.09375\nv -0.015625 0.0736344 -0.09375\nv -0.0078125 0.0737383 -0.09375\nv 0 0.0737593 -0.09375\nv 0.0078125 0.0737379 -0.09375\nv 0.015625 0.073744 -0.09375\nv 0.0234375 0.0738101 -0.09375\nv 0.03125 0.0739273 -0.09375\nv 0.0390625 0.0739943 -0.09375\nv 0.046875 0.0739543 -0.09375\nv 0.0546875 0.0738875 -0.09375\nv 0.0625 0.0737963 -0.09375\nv 0.0703125 0.0737271 -0.09375\nv 0.078125 0.0737221 -0.09375\nv 0.0859375 0.073754 -0.09375\nv 0.09375 0.0737607 -0.09375\nv 0.101562 0.0737658 -0.09375\nv 0.109375 0.0736875 -0.09375\nv 0.117188 0.0735538 -0.09375\nv 0.125 0.0734944 -0.09375\nv 0.132812 0.0734693 -0.09375\nv 0.140625 0.0733576 -0.09375\nv 0.148438 0.0732666 -0.09375\nv 0.15625 0.0731731 -0.09375\nv 0.164062 0.0731114 -0.09375\nv 0.171875 0.0730584 -0.09375\nv 0.179688 0.073045 -0.09375\nv 0.1875 0.0730018 -0.09375\nv 0.195312 0.0729279 -0.09375\nv 0.203125 0.0728658 -0.09375\nv 0.210938 0.0727875 -0.09375\nv 0.21875 0.0727057 -0.09375\nv 0.226562 0.0726519 -0.09375\nv 0.234375 0.0726343 -0.09375\nv 0.242188 0.0726355 -0.09375\nv 0.25 0.0727217 -0.09375\nv 0.257812 0.07283 -0.09375\nv 0.265625 0.0729508 -0.09375\nv 0.273438 0.0730639 -0.09375\nv 0.28125 0.0731948 -0.09375\nv 0.289062 0.073322 -0.09375\nv 0.296875 0.0733872 -0.09375\nv 0.304688 0.0734441 -0.09375\nv 0.3125 0.073487 -0.09375\nv 0.320312 0.0735201 -0.09375\nv 0.328125 0.0735778 -0.09375\nv 0.335938 0.073672 -0.09375\nv 0.34375 0.0737438 -0.09375\nv 0.351562 0.0737646 -0.09375\nv 0.359375 0.0737929 -0.09375\nv 0.367188 0.0737383 -0.09375\nv 0.375 0.073544 -0.09375\nv 0.382812 0.0731734 -0.09375\nv 0.390625 0.072831 -0.09375\nv 0.398438 0.0726142 -0.09375\nv 0.40625 0.0724347 -0.09375\nv 0.414062 0.0722665 -0.09375\nv 0.421875 0.0720833 -0.09375\nv 0.429688 0.0718425 -0.09375\nv 0.4375 0.0713456 -0.09375\nv 0.445452 0.0703125 -0.09375\nv 0.445312 0.0703451 -0.09375\nv -0.278386 0.078125 -0.09375\nv -0.273438 0.0811696 -0.09375\nv -0.265625 0.08553 -0.09375\nv -0.242188 0.0850027 -0.09375\nv -0.22948 0.078125 -0.09375\nv -0.234375 0.0803321 -0.09375\nv -0.264891 0.0859375 -0.09375\nv -0.257812 0.090369 -0.09375\nv -0.243466 0.0859375 -0.09375\nv -0.25 0.0891991 -0.09375\nv -0.289062 0.169486 -0.09375\nv -0.28125 0.167454 -0.09375\nv -0.273438 0.165814 -0.09375\nv -0.265625 0.165693 -0.09375\nv -0.257812 0.168746 -0.09375\nv -0.292462 0.171875 -0.09375\nv -0.255032 0.171875 -0.09375\nv -0.25 0.178953 -0.09375\nv -0.296034 0.179688 -0.09375\nv -0.296875 0.181971 -0.09375\nv -0.249594 0.179688 -0.09375\nv -0.25 0.179688 -0.0866\nv -0.298472 0.1875 -0.09375\nv -0.24493 0.1875 -0.09375\nv -0.299662 0.195312 -0.09375\nv -0.242446 0.195312 -0.09375\nv -0.242188 0.197614 -0.09375\nv -0.299885 0.203125 -0.09375\nv -0.24153 0.203125 -0.09375\nv -0.300089 0.210938 -0.09375\nv -0.240825 0.210938 -0.09375\nv -0.300099 0.21875 -0.09375\nv -0.241007 0.21875 -0.09375\nv -0.300017 0.226562 -0.09375\nv -0.241193 0.226562 -0.09375\nv -0.299902 0.234375 -0.09375\nv -0.241416 0.234375 -0.09375\nv -0.300178 0.242188 -0.09375\nv -0.241926 0.242188 -0.09375\nv -0.242188 0.245335 -0.09375\nv -0.300277 0.25 -0.09375\nv -0.242573 0.25 -0.09375\nv -0.300169 0.257812 -0.09375\nv -0.243345 0.257812 -0.09375\nv -0.299871 0.265625 -0.09375\nv -0.244157 0.265625 -0.09375\nv -0.299231 0.273438 -0.09375\nv -0.24498 0.273438 -0.09375\nv -0.29833 0.28125 -0.09375\nv -0.246223 0.28125 -0.09375\nv -0.297181 0.289062 -0.09375\nv -0.296875 0.290753 -0.09375\nv -0.247837 0.289062 -0.09375\nv -0.295745 0.296875 -0.09375\nv -0.249367 0.296875 -0.09375\nv -0.25 0.300084 -0.09375\nv -0.294946 0.304688 -0.09375\nv -0.251002 0.304688 -0.09375\nv -0.294188 0.3125 -0.09375\nv -0.252521 0.3125 -0.09375\nv -0.293866 0.320312 -0.09375\nv -0.253342 0.320312 -0.09375\nv -0.294131 0.328125 -0.09375\nv -0.254587 0.328125 -0.09375\nv -0.294455 0.335938 -0.09375\nv -0.255266 0.335938 -0.09375\nv -0.294472 0.34375 -0.09375\nv -0.255069 0.34375 -0.09375\nv -0.294531 0.351562 -0.09375\nv -0.25495 0.351562 -0.09375\nv -0.294582 0.359375 -0.09375\nv -0.255548 0.359375 -0.09375\nv -0.294256 0.367188 -0.09375\nv -0.256018 0.367188 -0.09375\nv -0.293894 0.375 -0.09375\nv -0.256393 0.375 -0.09375\nv -0.293501 0.382812 -0.09375\nv -0.257188 0.382812 -0.09375\nv -0.257812 0.387676 -0.09375\nv -0.292974 0.390625 -0.09375\nv -0.258309 0.390625 -0.09375\nv -0.257812 0.390625 -0.0872389\nv -0.292579 0.398438 -0.09375\nv -0.259534 0.398438 -0.09375\nv -0.292176 0.40625 -0.09375\nv -0.26071 0.40625 -0.09375\nv -0.291431 0.414062 -0.09375\nv -0.261855 0.414062 -0.09375\nv -0.290455 0.421875 -0.09375\nv -0.263023 0.421875 -0.09375\nv -0.289789 0.429688 -0.09375\nv -0.289062 0.437407 -0.09375\nv -0.26421 0.429688 -0.09375\nv -0.289047 0.4375 -0.09375\nv -0.289062 0.437548 -0.09375\nv -0.289062 0.4375 -0.0937235\nv -0.265448 0.4375 -0.09375\nv -0.265625 0.43844 -0.09375\nv -0.29068 0.445312 -0.09375\nv -0.267081 0.445312 -0.09375\nv -0.265625 0.445312 -0.0894089\nv -0.292314 0.453125 -0.09375\nv -0.265805 0.453125 -0.09375\nv -0.265625 0.455339 -0.09375\nv -0.265625 0.453125 -0.0929096\nv -0.292545 0.460938 -0.09375\nv -0.265241 0.460938 -0.09375\nv -0.291952 0.46875 -0.09375\nv -0.264971 0.46875 -0.09375\nv -0.291594 0.476562 -0.09375\nv -0.265301 0.476562 -0.09375\nv -0.291227 0.484375 -0.09375\nv -0.265428 0.484375 -0.09375\nv -0.265625 0.489811 -0.09375\nv -0.290937 0.492188 -0.09375\nv -0.26574 0.492188 -0.09375\nv -0.265625 0.492188 -0.0931294\nv -0.291644 0.5 -0.09375\nv -0.26601 0.5 -0.09375\nv -0.265625 0.5 -0.091767\nv -0.292791 0.507812 -0.09375\nv -0.266228 0.507812 -0.09375\nv -0.265625 0.507812 -0.0906485\nv -0.293967 0.515625 -0.09375\nv -0.296875 0.515625 -0.0868929\nv -0.266348 0.515625 -0.09375\nv -0.265625 0.515625 -0.0894635\nv -0.296181 0.523438 -0.09375\nv -0.296875 0.526062 -0.09375\nv -0.296875 0.523438 -0.0917275\nv -0.266487 0.523438 -0.09375\nv -0.265625 0.523438 -0.0874256\nv -0.298121 0.53125 -0.09375\nv -0.266428 0.53125 -0.09375\nv -0.300392 0.539062 -0.09375\nv -0.266302 0.539062 -0.09375\nv -0.302747 0.546875 -0.09375\nv -0.304688 0.55326 -0.09375\nv -0.266398 0.546875 -0.09375\nv -0.30501 0.554688 -0.09375\nv -0.266488 0.554688 -0.09375\nv -0.306276 0.5625 -0.09375\nv -0.266565 0.5625 -0.09375\nv -0.307033 0.570312 -0.09375\nv -0.266898 0.570312 -0.09375\nv -0.307515 0.578125 -0.09375\nv -0.267424 0.578125 -0.09375\nv -0.307788 0.585938 -0.09375\nv -0.268181 0.585938 -0.09375\nv -0.308021 0.59375 -0.09375\nv -0.268943 0.59375 -0.09375\nv -0.308052 0.601562 -0.09375\nv -0.269682 0.601562 -0.09375\nv -0.307986 0.609375 -0.09375\nv -0.270624 0.609375 -0.09375\nv -0.307992 0.617188 -0.09375\nv -0.271849 0.617188 -0.09375\nv -0.310684 0.625 -0.09375\nv -0.3125 0.632184 -0.09375\nv -0.272759 0.625 -0.09375\nv -0.273438 0.630839 -0.09375\nv -0.273438 0.625 -0.0880146\nv -0.312661 0.632812 -0.09375\nv -0.3125 0.632812 -0.0916198\nv -0.273651 0.632812 -0.09375\nv -0.314314 0.640625 -0.09375\nv -0.274817 0.640625 -0.09375\nv -0.315545 0.648438 -0.09375\nv -0.275985 0.648438 -0.09375\nv -0.31694 0.65625 -0.09375\nv -0.276698 0.65625 -0.09375\nv -0.31785 0.664062 -0.09375\nv -0.277129 0.664062 -0.09375\nv -0.31851 0.671875 -0.09375\nv -0.277486 0.671875 -0.09375\nv -0.319288 0.679688 -0.09375\nv -0.277967 0.679688 -0.09375\nv -0.320007 0.6875 -0.09375\nv -0.320312 0.692081 -0.09375\nv -0.278443 0.6875 -0.09375\nv -0.320522 0.695312 -0.09375\nv -0.320312 0.695312 -0.0897357\nv -0.27846 0.695312 -0.09375\nv -0.320947 0.703125 -0.09375\nv -0.278347 0.703125 -0.09375\nv -0.321209 0.710938 -0.09375\nv -0.278437 0.710938 -0.09375\nv -0.321961 0.71875 -0.09375\nv -0.278966 0.71875 -0.09375\nv -0.322775 0.726562 -0.09375\nv -0.279631 0.726562 -0.09375\nv -0.323889 0.734375 -0.09375\nv -0.280412 0.734375 -0.09375\nv -0.28125 0.740141 -0.09375\nv -0.324988 0.742188 -0.09375\nv -0.281589 0.742188 -0.09375\nv -0.325853 0.75 -0.09375\nv -0.282938 0.75 -0.09375\nv -0.32664 0.757812 -0.09375\nv -0.284123 0.757812 -0.09375\nv -0.327925 0.765625 -0.09375\nv -0.328125 0.766971 -0.09375\nv -0.285324 0.765625 -0.09375\nv -0.328929 0.773438 -0.09375\nv -0.28685 0.773438 -0.09375\nv -0.289062 0.781215 -0.09375\nv -0.329415 0.78125 -0.09375\nv -0.289078 0.78125 -0.09375\nv -0.289062 0.78125 -0.0934672\nv -0.329748 0.789062 -0.09375\nv -0.293347 0.789062 -0.09375\nv -0.296875 0.795395 -0.09375\nv -0.329645 0.796875 -0.09375\nv -0.298002 0.796875 -0.09375\nv -0.304688 0.804366 -0.09375\nv -0.296875 0.796875 -0.0876993\nv -0.328887 0.804688 -0.09375\nv -0.328125 0.807027 -0.09375\nv -0.304957 0.804688 -0.09375\nv -0.304688 0.804688 -0.0926091\nv -0.323151 0.8125 -0.09375\nv -0.320312 0.815128 -0.09375\nv -0.311258 0.8125 -0.09375\nv -0.3125 0.813471 -0.09375\nv 0.03125 -0.539377 -0.0859375\nv 0.0390625 -0.540989 -0.0859375\nv 0.046875 -0.542062 -0.0859375\nv 0.0546875 -0.542775 -0.0859375\nv 0.0625 -0.543383 -0.0859375\nv 0.0703125 -0.543669 -0.0859375\nv 0.078125 -0.54367 -0.0859375\nv 0.0859375 -0.543778 -0.0859375\nv 0.09375 -0.543785 -0.0859375\nv 0.101562 -0.542354 -0.0859375\nv 0.109375 -0.54076 -0.0859375\nv 0.015625 -0.533673 -0.0859375\nv 0.0298427 -0.539062 -0.0859375\nv 0.0234375 -0.536841 -0.0859375\nv 0.11578 -0.539062 -0.0859375\nv 0.117188 -0.538497 -0.0859375\nv 0.125 -0.53425 -0.0859375\nv 0 -0.526166 -0.0859375\nv 0.00945911 -0.53125 -0.0859375\nv 0.0078125 -0.53043 -0.0859375\nv 0.129883 -0.53125 -0.0859375\nv 0.132812 -0.529272 -0.0859375\nv 0.140625 -0.523857 -0.0859375\nv -0.00334692 -0.523438 -0.0859375\nv 0.141201 -0.523438 -0.0859375\nv 0.140625 -0.523438 -0.0847662\nv -0.00392214 -0.515625 -0.0859375\nv 0.144883 -0.515625 -0.0859375\nv -0.000458589 -0.507812 -0.0859375\nv 0 -0.507487 -0.0859375\nv 0.0078125 -0.50266 -0.0859375\nv 0.146438 -0.507812 -0.0859375\nv 0.140625 -0.502146 -0.0859375\nv 0.0123029 -0.5 -0.0859375\nv 0.015625 -0.497652 -0.0859375\nv 0.138402 -0.5 -0.0859375\nv 0.132812 -0.495721 -0.0859375\nv 0.0225393 -0.492188 -0.0859375\nv 0.0234375 -0.491784 -0.0859375\nv 0.03125 -0.489142 -0.0859375\nv 0.0390625 -0.487284 -0.0859375\nv 0.046875 -0.48561 -0.0859375\nv 0.109375 -0.485144 -0.0859375\nv 0.117188 -0.488232 -0.0859375\nv 0.128068 -0.492188 -0.0859375\nv 0.125 -0.490721 -0.0859375\nv 0.0534471 -0.484375 -0.0859375\nv 0.0546875 -0.484135 -0.0859375\nv 0.0546875 -0.484375 -0.0805006\nv 0.0625 -0.482827 -0.0859375\nv 0.0703125 -0.481796 -0.0859375\nv 0.078125 -0.480988 -0.0859375\nv 0.0859375 -0.48037 -0.0859375\nv 0.09375 -0.480092 -0.0859375\nv 0.107141 -0.484375 -0.0859375\nv 0.101562 -0.482494 -0.0859375\nv -0.289062 -0.0632162 -0.0859375\nv -0.28125 -0.0650716 -0.0859375\nv -0.273438 -0.0635516 -0.0859375\nv 0.453125 -0.0659122 -0.0859375\nv 0.460938 -0.0675811 -0.0859375\nv 0.46875 -0.0653205 -0.0859375\nv 0.476562 -0.0649418 -0.0859375\nv 0.484375 -0.0630344 -0.0859375\nv -0.290037 -0.0625 -0.0859375\nv -0.27227 -0.0625 -0.0859375\nv 0.449668 -0.0625 -0.0859375\nv 0.485386 -0.0625 -0.0859375\nv -0.295242 -0.0546875 -0.0859375\nv -0.296875 -0.0508318 -0.0859375\nv -0.267348 -0.0546875 -0.0859375\nv -0.265625 -0.0509128 -0.0859375\nv 0.447512 -0.0546875 -0.0859375\nv 0.490089 -0.0546875 -0.0859375\nv 0.492188 -0.0473929 -0.0859375\nv -0.29796 -0.046875 -0.0859375\nv -0.26412 -0.046875 -0.0859375\nv 0.445482 -0.046875 -0.0859375\nv 0.445312 -0.046875 -0.0833376\nv 0.492305 -0.046875 -0.0859375\nv -0.299195 -0.0390625 -0.0859375\nv -0.262401 -0.0390625 -0.0859375\nv 0.445554 -0.0390625 -0.0859375\nv 0.445312 -0.0357068 -0.0859375\nv 0.445312 -0.0390625 -0.0825093\nv 0.493904 -0.0390625 -0.0859375\nv -0.299427 -0.03125 -0.0859375\nv -0.261459 -0.03125 -0.0859375\nv 0.445047 -0.03125 -0.0859375\nv 0.495949 -0.03125 -0.0859375\nv -0.299664 -0.0234375 -0.0859375\nv -0.260869 -0.0234375 -0.0859375\nv 0.444323 -0.0234375 -0.0859375\nv 0.498482 -0.0234375 -0.0859375\nv -0.301063 -0.015625 -0.0859375\nv -0.259639 -0.015625 -0.0859375\nv 0.44344 -0.015625 -0.0859375\nv 0.499599 -0.015625 -0.0859375\nv -0.302654 -0.0078125 -0.0859375\nv -0.259625 -0.0078125 -0.0859375\nv 0.441456 -0.0078125 -0.0859375\nv 0.499323 -0.0078125 -0.0859375\nv -0.304459 0 -0.0859375\nv -0.259705 0 -0.0859375\nv 0.440142 0 -0.0859375\nv 0.499132 0 -0.0859375\nv -0.304433 0.0078125 -0.0859375\nv -0.258293 0.0078125 -0.0859375\nv -0.257812 0.0085828 -0.0859375\nv 0.440445 0.0078125 -0.0859375\nv 0.499067 0.0078125 -0.0859375\nv -0.303015 0.015625 -0.0859375\nv -0.251188 0.015625 -0.0859375\nv -0.25 0.0164499 -0.0859375\nv -0.242188 0.0180437 -0.0859375\nv -0.234375 0.0197968 -0.0859375\nv -0.226562 0.0229318 -0.0859375\nv 0.421875 0.0228882 -0.0859375\nv 0.429688 0.0214758 -0.0859375\nv 0.43845 0.015625 -0.0859375\nv 0.4375 0.0164952 -0.0859375\nv 0.499207 0.015625 -0.0859375\nv -0.301801 0.0234375 -0.0859375\nv -0.225261 0.0234375 -0.0859375\nv -0.21875 0.0254706 -0.0859375\nv -0.210938 0.0264584 -0.0859375\nv -0.203125 0.0267923 -0.0859375\nv -0.195312 0.0268113 -0.0859375\nv -0.1875 0.0270207 -0.0859375\nv -0.179688 0.0269779 -0.0859375\nv -0.171875 0.0271845 -0.0859375\nv -0.164062 0.0271349 -0.0859375\nv -0.15625 0.0271758 -0.0859375\nv -0.148438 0.0273329 -0.0859375\nv -0.140625 0.0272932 -0.0859375\nv -0.132812 0.0273185 -0.0859375\nv -0.125 0.0276077 -0.0859375\nv -0.117188 0.0275583 -0.0859375\nv -0.109375 0.0272428 -0.0859375\nv -0.101562 0.0268763 -0.0859375\nv -0.09375 0.0266135 -0.0859375\nv -0.0859375 0.0263234 -0.0859375\nv -0.078125 0.0261011 -0.0859375\nv -0.0703125 0.0259209 -0.0859375\nv -0.0625 0.0257036 -0.0859375\nv -0.0546875 0.0256135 -0.0859375\nv -0.046875 0.025596 -0.0859375\nv -0.0390625 0.0256162 -0.0859375\nv -0.03125 0.0256488 -0.0859375\nv -0.0234375 0.0256856 -0.0859375\nv -0.015625 0.0257805 -0.0859375\nv -0.0078125 0.0258863 -0.0859375\nv 0 0.0259235 -0.0859375\nv 0.0078125 0.0259344 -0.0859375\nv 0.015625 0.0260013 -0.0859375\nv 0.0234375 0.0261474 -0.0859375\nv 0.03125 0.0262276 -0.0859375\nv 0.0390625 0.0262429 -0.0859375\nv 0.046875 0.0262219 -0.0859375\nv 0.0546875 0.0262303 -0.0859375\nv 0.0625 0.0262206 -0.0859375\nv 0.0703125 0.0262166 -0.0859375\nv 0.078125 0.0262136 -0.0859375\nv 0.0859375 0.0262425 -0.0859375\nv 0.09375 0.0261978 -0.0859375\nv 0.101562 0.0261379 -0.0859375\nv 0.109375 0.0260417 -0.0859375\nv 0.117188 0.0259504 -0.0859375\nv 0.125 0.025882 -0.0859375\nv 0.132812 0.0257321 -0.0859375\nv 0.140625 0.0255687 -0.0859375\nv 0.148438 0.0253836 -0.0859375\nv 0.15625 0.0251754 -0.0859375\nv 0.164062 0.0249367 -0.0859375\nv 0.171875 0.0246979 -0.0859375\nv 0.179688 0.0245495 -0.0859375\nv 0.1875 0.0244418 -0.0859375\nv 0.195312 0.024387 -0.0859375\nv 0.203125 0.0243097 -0.0859375\nv 0.210938 0.0242222 -0.0859375\nv 0.21875 0.0241611 -0.0859375\nv 0.226562 0.0241757 -0.0859375\nv 0.234375 0.0242701 -0.0859375\nv 0.242188 0.0244239 -0.0859375\nv 0.25 0.0246008 -0.0859375\nv 0.257812 0.0248234 -0.0859375\nv 0.265625 0.0250158 -0.0859375\nv 0.273438 0.0252263 -0.0859375\nv 0.28125 0.0254141 -0.0859375\nv 0.289062 0.025548 -0.0859375\nv 0.296875 0.0256875 -0.0859375\nv 0.304688 0.0258611 -0.0859375\nv 0.3125 0.0260961 -0.0859375\nv 0.320312 0.0264301 -0.0859375\nv 0.328125 0.0267313 -0.0859375\nv 0.335938 0.0268002 -0.0859375\nv 0.34375 0.0268313 -0.0859375\nv 0.351562 0.026868 -0.0859375\nv 0.359375 0.0268925 -0.0859375\nv 0.367188 0.0268563 -0.0859375\nv 0.375 0.0268304 -0.0859375\nv 0.382812 0.0266915 -0.0859375\nv 0.390625 0.026349 -0.0859375\nv 0.398438 0.0258665 -0.0859375\nv 0.40625 0.025386 -0.0859375\nv 0.419871 0.0234375 -0.0859375\nv 0.414062 0.0246333 -0.0859375\nv 0.499326 0.0234375 -0.0859375\nv -0.300563 0.03125 -0.0859375\nv 0.497225 0.03125 -0.0859375\nv -0.299499 0.0390625 -0.0859375\nv 0.494785 0.0390625 -0.0859375\nv -0.297167 0.046875 -0.0859375\nv -0.296875 0.0475687 -0.0859375\nv 0.492955 0.046875 -0.0859375\nv 0.492188 0.0497521 -0.0859375\nv -0.294233 0.0546875 -0.0859375\nv 0.490659 0.0546875 -0.0859375\nv 0.484375 0.05888 -0.0859375\nv -0.291585 0.0625 -0.0859375\nv -0.289062 0.0691106 -0.0859375\nv 0.453125 0.0684768 -0.0859375\nv 0.460938 0.0672765 -0.0859375\nv 0.46875 0.0662981 -0.0859375\nv 0.477328 0.0625 -0.0859375\nv 0.476562 0.0629488 -0.0859375\nv -0.288295 0.0703125 -0.0859375\nv -0.28125 0.07745 -0.0859375\nv -0.226562 0.0768926 -0.0859375\nv -0.21875 0.0751129 -0.0859375\nv -0.210938 0.073947 -0.0859375\nv -0.203125 0.0740323 -0.0859375\nv -0.195312 0.074298 -0.0859375\nv -0.1875 0.0746767 -0.0859375\nv -0.179688 0.0747709 -0.0859375\nv -0.171875 0.0748683 -0.0859375\nv -0.164062 0.0749808 -0.0859375\nv -0.15625 0.0751181 -0.0859375\nv -0.148438 0.0751764 -0.0859375\nv -0.140625 0.0750649 -0.0859375\nv -0.132812 0.0751177 -0.0859375\nv -0.125 0.0752732 -0.0859375\nv -0.117188 0.0754352 -0.0859375\nv -0.109375 0.0753431 -0.0859375\nv -0.101562 0.0751894 -0.0859375\nv -0.09375 0.075121 -0.0859375\nv -0.0859375 0.0750991 -0.0859375\nv -0.078125 0.0749907 -0.0859375\nv -0.0703125 0.0747172 -0.0859375\nv -0.0625 0.0744756 -0.0859375\nv -0.0546875 0.0742405 -0.0859375\nv -0.046875 0.0740945 -0.0859375\nv -0.0390625 0.0739778 -0.0859375\nv -0.03125 0.073866 -0.0859375\nv -0.0234375 0.0737585 -0.0859375\nv -0.015625 0.073697 -0.0859375\nv -0.0078125 0.0737579 -0.0859375\nv 0 0.0737603 -0.0859375\nv 0.0078125 0.0737759 -0.0859375\nv 0.015625 0.0737813 -0.0859375\nv 0.0234375 0.0738496 -0.0859375\nv 0.03125 0.0739668 -0.0859375\nv 0.0390625 0.0740313 -0.0859375\nv 0.046875 0.0740433 -0.0859375\nv 0.0546875 0.0739591 -0.0859375\nv 0.0625 0.073812 -0.0859375\nv 0.0703125 0.0737017 -0.0859375\nv 0.078125 0.0737166 -0.0859375\nv 0.0859375 0.0737566 -0.0859375\nv 0.09375 0.073808 -0.0859375\nv 0.101562 0.0737927 -0.0859375\nv 0.109375 0.0737067 -0.0859375\nv 0.117188 0.0735814 -0.0859375\nv 0.125 0.0735537 -0.0859375\nv 0.132812 0.0734767 -0.0859375\nv 0.140625 0.0733898 -0.0859375\nv 0.148438 0.0732243 -0.0859375\nv 0.15625 0.0731514 -0.0859375\nv 0.164062 0.073088 -0.0859375\nv 0.171875 0.0730309 -0.0859375\nv 0.179688 0.073045 -0.0859375\nv 0.1875 0.0730123 -0.0859375\nv 0.195312 0.0729357 -0.0859375\nv 0.203125 0.0728662 -0.0859375\nv 0.210938 0.0727753 -0.0859375\nv 0.21875 0.0726961 -0.0859375\nv 0.226562 0.0726849 -0.0859375\nv 0.234375 0.0726927 -0.0859375\nv 0.242188 0.0726684 -0.0859375\nv 0.25 0.0727527 -0.0859375\nv 0.257812 0.0728597 -0.0859375\nv 0.265625 0.072967 -0.0859375\nv 0.273438 0.0730647 -0.0859375\nv 0.28125 0.0731805 -0.0859375\nv 0.289062 0.07332 -0.0859375\nv 0.296875 0.0733956 -0.0859375\nv 0.304688 0.0734548 -0.0859375\nv 0.3125 0.073494 -0.0859375\nv 0.320312 0.0735263 -0.0859375\nv 0.328125 0.0735903 -0.0859375\nv 0.335938 0.0736866 -0.0859375\nv 0.34375 0.0737586 -0.0859375\nv 0.351562 0.0737711 -0.0859375\nv 0.359375 0.0737631 -0.0859375\nv 0.367188 0.0736797 -0.0859375\nv 0.375 0.0734637 -0.0859375\nv 0.382812 0.0730532 -0.0859375\nv 0.390625 0.0727003 -0.0859375\nv 0.398438 0.0724986 -0.0859375\nv 0.40625 0.0723508 -0.0859375\nv 0.414062 0.0722113 -0.0859375\nv 0.421875 0.0720329 -0.0859375\nv 0.429688 0.071814 -0.0859375\nv 0.4375 0.0713571 -0.0859375\nv 0.445908 0.0703125 -0.0859375\nv 0.445312 0.0704529 -0.0859375\nv -0.279769 0.078125 -0.0859375\nv -0.273438 0.0813572 -0.0859375\nv -0.265625 0.0851178 -0.0859375\nv -0.242188 0.0842082 -0.0859375\nv -0.230252 0.078125 -0.0859375\nv -0.234375 0.0799124 -0.0859375\nv -0.26409 0.0859375 -0.0859375\nv -0.257812 0.0897724 -0.0859375\nv -0.244617 0.0859375 -0.0859375\nv -0.25 0.088677 -0.0859375\nv -0.289062 0.16916 -0.0859375\nv -0.28125 0.167422 -0.0859375\nv -0.273438 0.165729 -0.0859375\nv -0.265625 0.165704 -0.0859375\nv -0.257812 0.169054 -0.0859375\nv -0.292711 0.171875 -0.0859375\nv -0.255476 0.171875 -0.0859375\nv -0.29635 0.179688 -0.0859375\nv -0.296875 0.181115 -0.0859375\nv -0.250038 0.179688 -0.0859375\nv -0.25 0.17975 -0.0859375\nv -0.298665 0.1875 -0.0859375\nv -0.245236 0.1875 -0.0859375\nv -0.299618 0.195312 -0.0859375\nv -0.242757 0.195312 -0.0859375\nv -0.242188 0.200094 -0.0859375\nv -0.299796 0.203125 -0.0859375\nv -0.241806 0.203125 -0.0859375\nv -0.300003 0.210938 -0.0859375\nv -0.241173 0.210938 -0.0859375\nv -0.299975 0.21875 -0.0859375\nv -0.241209 0.21875 -0.0859375\nv -0.299899 0.226562 -0.0859375\nv -0.241339 0.226562 -0.0859375\nv -0.299842 0.234375 -0.0859375\nv -0.241554 0.234375 -0.0859375\nv -0.300069 0.242188 -0.0859375\nv -0.242072 0.242188 -0.0859375\nv -0.242188 0.243737 -0.0859375\nv -0.242188 0.242188 -0.0816012\nv -0.300177 0.25 -0.0859375\nv -0.242651 0.25 -0.0859375\nv -0.300084 0.257812 -0.0859375\nv -0.243339 0.257812 -0.0859375\nv -0.299837 0.265625 -0.0859375\nv -0.24408 0.265625 -0.0859375\nv -0.299243 0.273438 -0.0859375\nv -0.24484 0.273438 -0.0859375\nv -0.29837 0.28125 -0.0859375\nv -0.246133 0.28125 -0.0859375\nv -0.297251 0.289062 -0.0859375\nv -0.296875 0.291349 -0.0859375\nv -0.247819 0.289062 -0.0859375\nv -0.295917 0.296875 -0.0859375\nv -0.249523 0.296875 -0.0859375\nv -0.25 0.298901 -0.0859375\nv -0.295046 0.304688 -0.0859375\nv -0.251518 0.304688 -0.0859375\nv -0.294304 0.3125 -0.0859375\nv -0.252952 0.3125 -0.0859375\nv -0.294091 0.320312 -0.0859375\nv -0.253883 0.320312 -0.0859375\nv -0.29441 0.328125 -0.0859375\nv -0.255272 0.328125 -0.0859375\nv -0.294787 0.335938 -0.0859375\nv -0.255825 0.335938 -0.0859375\nv -0.294739 0.34375 -0.0859375\nv -0.255591 0.34375 -0.0859375\nv -0.294826 0.351562 -0.0859375\nv -0.25535 0.351562 -0.0859375\nv -0.294796 0.359375 -0.0859375\nv -0.255696 0.359375 -0.0859375\nv -0.294571 0.367188 -0.0859375\nv -0.255906 0.367188 -0.0859375\nv -0.294312 0.375 -0.0859375\nv -0.256354 0.375 -0.0859375\nv -0.294037 0.382812 -0.0859375\nv -0.256993 0.382812 -0.0859375\nv -0.293675 0.390625 -0.0859375\nv -0.257739 0.390625 -0.0859375\nv -0.257812 0.391161 -0.0859375\nv -0.257812 0.390625 -0.0825404\nv -0.293456 0.398438 -0.0859375\nv -0.258983 0.398438 -0.0859375\nv -0.293385 0.40625 -0.0859375\nv -0.260079 0.40625 -0.0859375\nv -0.293307 0.414062 -0.0859375\nv -0.261162 0.414062 -0.0859375\nv -0.293065 0.421875 -0.0859375\nv -0.262221 0.421875 -0.0859375\nv -0.292391 0.429688 -0.0859375\nv -0.263187 0.429688 -0.0859375\nv -0.291925 0.4375 -0.0859375\nv -0.263938 0.4375 -0.0859375\nv -0.293502 0.445312 -0.0859375\nv -0.264664 0.445312 -0.0859375\nv -0.294333 0.453125 -0.0859375\nv -0.264322 0.453125 -0.0859375\nv -0.294564 0.460938 -0.0859375\nv -0.263948 0.460938 -0.0859375\nv -0.294561 0.46875 -0.0859375\nv -0.263978 0.46875 -0.0859375\nv -0.294682 0.476562 -0.0859375\nv -0.264305 0.476562 -0.0859375\nv -0.294658 0.484375 -0.0859375\nv -0.296875 0.484375 -0.0789299\nv -0.264416 0.484375 -0.0859375\nv -0.29484 0.492188 -0.0859375\nv -0.296875 0.492188 -0.0804375\nv -0.264665 0.492188 -0.0859375\nv -0.295554 0.5 -0.0859375\nv -0.296875 0.5 -0.0826592\nv -0.264862 0.5 -0.0859375\nv -0.296286 0.507812 -0.0859375\nv -0.296875 0.512281 -0.0859375\nv -0.296875 0.507812 -0.0843093\nv -0.265041 0.507812 -0.0859375\nv -0.297245 0.515625 -0.0859375\nv -0.265256 0.515625 -0.0859375\nv -0.298671 0.523438 -0.0859375\nv -0.265495 0.523438 -0.0859375\nv -0.265625 0.528789 -0.0859375\nv -0.300292 0.53125 -0.0859375\nv -0.265709 0.53125 -0.0859375\nv -0.265625 0.53125 -0.0844284\nv -0.302152 0.539062 -0.0859375\nv -0.265788 0.539062 -0.0859375\nv -0.265625 0.539062 -0.0803488\nv -0.304105 0.546875 -0.0859375\nv -0.304688 0.550156 -0.0859375\nv -0.266045 0.546875 -0.0859375\nv -0.305314 0.554688 -0.0859375\nv -0.266227 0.554688 -0.0859375\nv -0.306145 0.5625 -0.0859375\nv -0.266607 0.5625 -0.0859375\nv -0.306792 0.570312 -0.0859375\nv -0.267147 0.570312 -0.0859375\nv -0.307101 0.578125 -0.0859375\nv -0.267833 0.578125 -0.0859375\nv -0.307331 0.585938 -0.0859375\nv -0.268672 0.585938 -0.0859375\nv -0.307479 0.59375 -0.0859375\nv -0.269498 0.59375 -0.0859375\nv -0.307328 0.601562 -0.0859375\nv -0.270282 0.601562 -0.0859375\nv -0.307264 0.609375 -0.0859375\nv -0.271414 0.609375 -0.0859375\nv -0.307502 0.617188 -0.0859375\nv -0.27271 0.617188 -0.0859375\nv -0.273438 0.622999 -0.0859375\nv -0.273438 0.617188 -0.0820852\nv -0.310111 0.625 -0.0859375\nv -0.273689 0.625 -0.0859375\nv -0.312085 0.632812 -0.0859375\nv -0.3125 0.634799 -0.0859375\nv -0.274443 0.632812 -0.0859375\nv -0.3137 0.640625 -0.0859375\nv -0.275532 0.640625 -0.0859375\nv -0.314896 0.648438 -0.0859375\nv -0.276599 0.648438 -0.0859375\nv -0.316215 0.65625 -0.0859375\nv -0.277178 0.65625 -0.0859375\nv -0.317204 0.664062 -0.0859375\nv -0.277633 0.664062 -0.0859375\nv -0.317778 0.671875 -0.0859375\nv -0.278047 0.671875 -0.0859375\nv -0.31854 0.679688 -0.0859375\nv -0.278575 0.679688 -0.0859375\nv -0.319374 0.6875 -0.0859375\nv -0.278968 0.6875 -0.0859375\nv -0.320108 0.695312 -0.0859375\nv -0.320312 0.697731 -0.0859375\nv -0.278986 0.695312 -0.0859375\nv -0.320747 0.703125 -0.0859375\nv -0.27891 0.703125 -0.0859375\nv -0.321122 0.710938 -0.0859375\nv -0.27904 0.710938 -0.0859375\nv -0.321892 0.71875 -0.0859375\nv -0.279404 0.71875 -0.0859375\nv -0.322765 0.726562 -0.0859375\nv -0.279793 0.726562 -0.0859375\nv -0.323875 0.734375 -0.0859375\nv -0.280455 0.734375 -0.0859375\nv -0.28125 0.739635 -0.0859375\nv -0.324986 0.742188 -0.0859375\nv -0.281689 0.742188 -0.0859375\nv -0.325917 0.75 -0.0859375\nv -0.282995 0.75 -0.0859375\nv -0.326678 0.757812 -0.0859375\nv -0.284104 0.757812 -0.0859375\nv -0.328002 0.765625 -0.0859375\nv -0.328125 0.766344 -0.0859375\nv -0.285268 0.765625 -0.0859375\nv -0.329172 0.773438 -0.0859375\nv -0.286736 0.773438 -0.0859375\nv -0.329823 0.78125 -0.0859375\nv -0.288798 0.78125 -0.0859375\nv -0.289062 0.782109 -0.0859375\nv -0.330209 0.789062 -0.0859375\nv -0.292491 0.789062 -0.0859375\nv -0.330328 0.796875 -0.0859375\nv -0.296619 0.796875 -0.0859375\nv -0.296875 0.797314 -0.0859375\nv -0.330018 0.804688 -0.0859375\nv -0.328125 0.811907 -0.0859375\nv -0.302864 0.804688 -0.0859375\nv -0.304688 0.806718 -0.0859375\nv -0.327754 0.8125 -0.0859375\nv -0.328125 0.8125 -0.0850509\nv -0.320312 0.818304 -0.0859375\nv -0.309305 0.8125 -0.0859375\nv -0.3125 0.815415 -0.0859375\nv -0.320312 0.820312 -0.0799911\nv 0.03125 -0.539166 -0.078125\nv 0.0390625 -0.540237 -0.078125\nv 0.046875 -0.541145 -0.078125\nv 0.0546875 -0.541921 -0.078125\nv 0.0625 -0.542439 -0.078125\nv 0.0703125 -0.542656 -0.078125\nv 0.078125 -0.542846 -0.078125\nv 0.0859375 -0.543014 -0.078125\nv 0.09375 -0.543104 -0.078125\nv 0.101562 -0.541451 -0.078125\nv 0.109375 -0.539443 -0.078125\nv 0.015625 -0.533537 -0.078125\nv 0.0307518 -0.539062 -0.078125\nv 0.0234375 -0.536718 -0.078125\nv 0.03125 -0.539062 -0.077491\nv 0.0390625 -0.539062 -0.0708719\nv 0.110436 -0.539062 -0.078125\nv 0.109375 -0.539062 -0.0758717\nv 0.117188 -0.535535 -0.078125\nv 0.125 -0.531784 -0.078125\nv 0 -0.527075 -0.078125\nv 0.00910076 -0.53125 -0.078125\nv 0.0078125 -0.530699 -0.078125\nv 0.125973 -0.53125 -0.078125\nv 0.125 -0.53125 -0.075962\nv 0.132812 -0.526821 -0.078125\nv -0.00552411 -0.523438 -0.078125\nv 0.137584 -0.523438 -0.078125\nv 0.140625 -0.516142 -0.078125\nv -0.00641375 -0.515625 -0.078125\nv 0.140806 -0.515625 -0.078125\nv 0.140625 -0.515625 -0.0777618\nv -0.00254607 -0.507812 -0.078125\nv 0 -0.506302 -0.078125\nv 0.0078125 -0.502017 -0.078125\nv 0.142147 -0.507812 -0.078125\nv 0.140625 -0.505868 -0.078125\nv 0.140625 -0.507812 -0.0754161\nv 0.0112026 -0.5 -0.078125\nv 0.015625 -0.497143 -0.078125\nv 0.13602 -0.5 -0.078125\nv 0.132812 -0.496884 -0.078125\nv 0.0224949 -0.492188 -0.078125\nv 0.0234375 -0.491739 -0.078125\nv 0.03125 -0.48917 -0.078125\nv 0.0390625 -0.487295 -0.078125\nv 0.046875 -0.485728 -0.078125\nv 0.0546875 -0.484479 -0.078125\nv 0.109375 -0.484582 -0.078125\nv 0.117188 -0.48681 -0.078125\nv 0.127665 -0.492188 -0.078125\nv 0.125 -0.490629 -0.078125\nv 0.0554881 -0.484375 -0.078125\nv 0.0625 -0.48343 -0.078125\nv 0.0703125 -0.482394 -0.078125\nv 0.078125 -0.481127 -0.078125\nv 0.0859375 -0.480489 -0.078125\nv 0.09375 -0.480095 -0.078125\nv 0.108673 -0.484375 -0.078125\nv 0.101562 -0.482443 -0.078125\nv 0.109375 -0.484375 -0.0775111\nv -0.289062 -0.0634632 -0.078125\nv -0.28125 -0.0653219 -0.078125\nv -0.273438 -0.0637617 -0.078125\nv 0.453125 -0.0662829 -0.078125\nv 0.460938 -0.0678534 -0.078125\nv 0.46875 -0.0655774 -0.078125\nv 0.476562 -0.0652077 -0.078125\nv 0.484375 -0.0632681 -0.078125\nv -0.290301 -0.0625 -0.078125\nv -0.272045 -0.0625 -0.078125\nv 0.449198 -0.0625 -0.078125\nv 0.485837 -0.0625 -0.078125\nv -0.295105 -0.0546875 -0.078125\nv -0.296875 -0.050526 -0.078125\nv -0.267318 -0.0546875 -0.078125\nv -0.265625 -0.0510214 -0.078125\nv 0.446981 -0.0546875 -0.078125\nv 0.445312 -0.048212 -0.078125\nv 0.490362 -0.0546875 -0.078125\nv 0.492188 -0.0483704 -0.078125\nv -0.297911 -0.046875 -0.078125\nv -0.264018 -0.046875 -0.078125\nv 0.445019 -0.046875 -0.078125\nv 0.492529 -0.046875 -0.078125\nv -0.299151 -0.0390625 -0.078125\nv -0.262358 -0.0390625 -0.078125\nv 0.44503 -0.0390625 -0.078125\nv 0.494164 -0.0390625 -0.078125\nv -0.299408 -0.03125 -0.078125\nv -0.261433 -0.03125 -0.078125\nv 0.444755 -0.03125 -0.078125\nv 0.496119 -0.03125 -0.078125\nv -0.299682 -0.0234375 -0.078125\nv -0.260872 -0.0234375 -0.078125\nv 0.444062 -0.0234375 -0.078125\nv 0.498615 -0.0234375 -0.078125\nv -0.301114 -0.015625 -0.078125\nv -0.259639 -0.015625 -0.078125\nv 0.443211 -0.015625 -0.078125\nv 0.499703 -0.015625 -0.078125\nv -0.302692 -0.0078125 -0.078125\nv -0.259571 -0.0078125 -0.078125\nv 0.441186 -0.0078125 -0.078125\nv 0.4994 -0.0078125 -0.078125\nv -0.304368 0 -0.078125\nv -0.259674 0 -0.078125\nv 0.43989 0 -0.078125\nv 0.499117 0 -0.078125\nv -0.304428 0.0078125 -0.078125\nv -0.258315 0.0078125 -0.078125\nv -0.257812 0.00861242 -0.078125\nv 0.440128 0.0078125 -0.078125\nv 0.499039 0.0078125 -0.078125\nv -0.302967 0.015625 -0.078125\nv -0.251239 0.015625 -0.078125\nv -0.25 0.0164879 -0.078125\nv -0.242188 0.0178715 -0.078125\nv -0.234375 0.0197164 -0.078125\nv -0.226562 0.0227918 -0.078125\nv 0.421875 0.0227429 -0.078125\nv 0.429688 0.0214017 -0.078125\nv 0.438235 0.015625 -0.078125\nv 0.4375 0.0163244 -0.078125\nv 0.499164 0.015625 -0.078125\nv -0.301737 0.0234375 -0.078125\nv -0.224859 0.0234375 -0.078125\nv -0.21875 0.0252947 -0.078125\nv -0.210938 0.0262802 -0.078125\nv -0.203125 0.0265961 -0.078125\nv -0.195312 0.0266344 -0.078125\nv -0.1875 0.0268451 -0.078125\nv -0.179688 0.026843 -0.078125\nv -0.171875 0.0270732 -0.078125\nv -0.164062 0.0270359 -0.078125\nv -0.15625 0.0270835 -0.078125\nv -0.148438 0.027243 -0.078125\nv -0.140625 0.0272611 -0.078125\nv -0.132812 0.0273238 -0.078125\nv -0.125 0.0276152 -0.078125\nv -0.117188 0.0275516 -0.078125\nv -0.109375 0.0272308 -0.078125\nv -0.101562 0.0268835 -0.078125\nv -0.09375 0.02662 -0.078125\nv -0.0859375 0.0263601 -0.078125\nv -0.078125 0.0261117 -0.078125\nv -0.0703125 0.0258923 -0.078125\nv -0.0625 0.0256703 -0.078125\nv -0.0546875 0.0255638 -0.078125\nv -0.046875 0.0255245 -0.078125\nv -0.0390625 0.025557 -0.078125\nv -0.03125 0.0255553 -0.078125\nv -0.0234375 0.0255895 -0.078125\nv -0.015625 0.0256706 -0.078125\nv -0.0078125 0.0257959 -0.078125\nv 0 0.0258397 -0.078125\nv 0.0078125 0.025873 -0.078125\nv 0.015625 0.0259552 -0.078125\nv 0.0234375 0.026087 -0.078125\nv 0.03125 0.0262673 -0.078125\nv 0.0390625 0.0262357 -0.078125\nv 0.046875 0.0260851 -0.078125\nv 0.0546875 0.0260878 -0.078125\nv 0.0625 0.0260836 -0.078125\nv 0.0703125 0.0260831 -0.078125\nv 0.078125 0.0260796 -0.078125\nv 0.0859375 0.026144 -0.078125\nv 0.09375 0.0261537 -0.078125\nv 0.101562 0.0260862 -0.078125\nv 0.109375 0.0259764 -0.078125\nv 0.117188 0.0259094 -0.078125\nv 0.125 0.025847 -0.078125\nv 0.132812 0.0257307 -0.078125\nv 0.140625 0.0255415 -0.078125\nv 0.148438 0.0253517 -0.078125\nv 0.15625 0.0251392 -0.078125\nv 0.164062 0.0249064 -0.078125\nv 0.171875 0.0247128 -0.078125\nv 0.179688 0.0244745 -0.078125\nv 0.1875 0.0244199 -0.078125\nv 0.195312 0.0243657 -0.078125\nv 0.203125 0.0243035 -0.078125\nv 0.210938 0.0242385 -0.078125\nv 0.21875 0.024192 -0.078125\nv 0.226562 0.0241592 -0.078125\nv 0.234375 0.0242634 -0.078125\nv 0.242188 0.0244129 -0.078125\nv 0.25 0.0245789 -0.078125\nv 0.257812 0.0248157 -0.078125\nv 0.265625 0.0250223 -0.078125\nv 0.273438 0.0252354 -0.078125\nv 0.28125 0.0254166 -0.078125\nv 0.289062 0.0255687 -0.078125\nv 0.296875 0.0257049 -0.078125\nv 0.304688 0.0258685 -0.078125\nv 0.3125 0.0261123 -0.078125\nv 0.320312 0.0264383 -0.078125\nv 0.328125 0.0267337 -0.078125\nv 0.335938 0.0267884 -0.078125\nv 0.34375 0.0268141 -0.078125\nv 0.351562 0.0268573 -0.078125\nv 0.359375 0.0268994 -0.078125\nv 0.367188 0.0268849 -0.078125\nv 0.375 0.0268848 -0.078125\nv 0.382812 0.0267171 -0.078125\nv 0.390625 0.0263487 -0.078125\nv 0.398438 0.0258239 -0.078125\nv 0.40625 0.0253422 -0.078125\nv 0.419329 0.0234375 -0.078125\nv 0.414062 0.024521 -0.078125\nv 0.49922 0.0234375 -0.078125\nv -0.300486 0.03125 -0.078125\nv 0.497116 0.03125 -0.078125\nv -0.299413 0.0390625 -0.078125\nv 0.494826 0.0390625 -0.078125\nv -0.297036 0.046875 -0.078125\nv -0.296875 0.0472612 -0.078125\nv -0.296875 0.046875 -0.0740219\nv 0.493034 0.046875 -0.078125\nv 0.492188 0.0498621 -0.078125\nv -0.294061 0.0546875 -0.078125\nv 0.490609 0.0546875 -0.078125\nv 0.484375 0.0589307 -0.078125\nv -0.291843 0.0625 -0.078125\nv -0.289062 0.0693072 -0.078125\nv 0.453125 0.0685868 -0.078125\nv 0.460938 0.0674042 -0.078125\nv 0.46875 0.0664488 -0.078125\nv 0.477531 0.0625 -0.078125\nv 0.476562 0.0630725 -0.078125\nv -0.288472 0.0703125 -0.078125\nv -0.28125 0.0768804 -0.078125\nv -0.226562 0.0767346 -0.078125\nv -0.21875 0.0750135 -0.078125\nv -0.210938 0.0739382 -0.078125\nv -0.203125 0.074002 -0.078125\nv -0.195312 0.0742624 -0.078125\nv -0.1875 0.0746231 -0.078125\nv -0.179688 0.0747006 -0.078125\nv -0.171875 0.0748711 -0.078125\nv -0.164062 0.074982 -0.078125\nv -0.15625 0.0751335 -0.078125\nv -0.148438 0.0751816 -0.078125\nv -0.140625 0.0750811 -0.078125\nv -0.132812 0.0751223 -0.078125\nv -0.125 0.0752577 -0.078125\nv -0.117188 0.0753755 -0.078125\nv -0.109375 0.0752954 -0.078125\nv -0.101562 0.0751314 -0.078125\nv -0.09375 0.0750607 -0.078125\nv -0.0859375 0.0750707 -0.078125\nv -0.078125 0.0749505 -0.078125\nv -0.0703125 0.0748163 -0.078125\nv -0.0625 0.0745831 -0.078125\nv -0.0546875 0.0743383 -0.078125\nv -0.046875 0.0741669 -0.078125\nv -0.0390625 0.0740528 -0.078125\nv -0.03125 0.0739573 -0.078125\nv -0.0234375 0.0738194 -0.078125\nv -0.015625 0.0737486 -0.078125\nv -0.0078125 0.0737756 -0.078125\nv 0 0.0737785 -0.078125\nv 0.0078125 0.0737998 -0.078125\nv 0.015625 0.073843 -0.078125\nv 0.0234375 0.0738988 -0.078125\nv 0.03125 0.0740109 -0.078125\nv 0.0390625 0.0740673 -0.078125\nv 0.046875 0.0740867 -0.078125\nv 0.0546875 0.0740108 -0.078125\nv 0.0625 0.0738624 -0.078125\nv 0.0703125 0.073706 -0.078125\nv 0.078125 0.0737207 -0.078125\nv 0.0859375 0.0737819 -0.078125\nv 0.09375 0.0738211 -0.078125\nv 0.101562 0.0737984 -0.078125\nv 0.109375 0.0736899 -0.078125\nv 0.117188 0.0736004 -0.078125\nv 0.125 0.0735313 -0.078125\nv 0.132812 0.0734515 -0.078125\nv 0.140625 0.0733405 -0.078125\nv 0.148438 0.0731931 -0.078125\nv 0.15625 0.0731023 -0.078125\nv 0.164062 0.0730392 -0.078125\nv 0.171875 0.0729945 -0.078125\nv 0.179688 0.0730103 -0.078125\nv 0.1875 0.0729844 -0.078125\nv 0.195312 0.0729234 -0.078125\nv 0.203125 0.0728707 -0.078125\nv 0.210938 0.0728165 -0.078125\nv 0.21875 0.0727685 -0.078125\nv 0.226562 0.0727704 -0.078125\nv 0.234375 0.0727598 -0.078125\nv 0.242188 0.0727225 -0.078125\nv 0.25 0.0727982 -0.078125\nv 0.257812 0.0729109 -0.078125\nv 0.265625 0.0729973 -0.078125\nv 0.273438 0.0731125 -0.078125\nv 0.28125 0.0732323 -0.078125\nv 0.289062 0.0733718 -0.078125\nv 0.296875 0.0734468 -0.078125\nv 0.304688 0.0734996 -0.078125\nv 0.3125 0.0735389 -0.078125\nv 0.320312 0.0735672 -0.078125\nv 0.328125 0.0736243 -0.078125\nv 0.335938 0.073713 -0.078125\nv 0.34375 0.0737759 -0.078125\nv 0.351562 0.0737792 -0.078125\nv 0.359375 0.073742 -0.078125\nv 0.367188 0.0736182 -0.078125\nv 0.375 0.0733653 -0.078125\nv 0.382812 0.0729629 -0.078125\nv 0.390625 0.0726452 -0.078125\nv 0.398438 0.0724329 -0.078125\nv 0.40625 0.0723007 -0.078125\nv 0.414062 0.0721479 -0.078125\nv 0.421875 0.0719762 -0.078125\nv 0.429688 0.0718029 -0.078125\nv 0.4375 0.0713586 -0.078125\nv 0.446218 0.0703125 -0.078125\nv 0.445312 0.0705238 -0.078125\nv -0.278524 0.078125 -0.078125\nv -0.273438 0.0807242 -0.078125\nv -0.265625 0.084334 -0.078125\nv -0.242188 0.0834913 -0.078125\nv -0.23096 0.078125 -0.078125\nv -0.234375 0.0795185 -0.078125\nv -0.262765 0.0859375 -0.078125\nv -0.257812 0.08906 -0.078125\nv -0.245739 0.0859375 -0.078125\nv -0.25 0.0881609 -0.078125\nv -0.289062 0.169147 -0.078125\nv -0.28125 0.167585 -0.078125\nv -0.273438 0.166046 -0.078125\nv -0.265625 0.165987 -0.078125\nv -0.257812 0.16958 -0.078125\nv -0.292758 0.171875 -0.078125\nv -0.255978 0.171875 -0.078125\nv -0.2966 0.179688 -0.078125\nv -0.296875 0.180419 -0.078125\nv -0.250628 0.179688 -0.078125\nv -0.25 0.180769 -0.078125\nv -0.298834 0.1875 -0.078125\nv -0.245756 0.1875 -0.078125\nv -0.299582 0.195312 -0.078125\nv -0.24331 0.195312 -0.078125\nv -0.242188 0.203079 -0.078125\nv -0.299741 0.203125 -0.078125\nv -0.24218 0.203125 -0.078125\nv -0.242188 0.203125 -0.0779964\nv -0.299891 0.210938 -0.078125\nv -0.241608 0.210938 -0.078125\nv -0.299865 0.21875 -0.078125\nv -0.241436 0.21875 -0.078125\nv -0.29978 0.226562 -0.078125\nv -0.241498 0.226562 -0.078125\nv -0.299759 0.234375 -0.078125\nv -0.241773 0.234375 -0.078125\nv -0.242188 0.240775 -0.078125\nv -0.299953 0.242188 -0.078125\nv -0.242278 0.242188 -0.078125\nv -0.299999 0.25 -0.078125\nv -0.242771 0.25 -0.078125\nv -0.299892 0.257812 -0.078125\nv -0.243346 0.257812 -0.078125\nv -0.299575 0.265625 -0.078125\nv -0.244031 0.265625 -0.078125\nv -0.299026 0.273438 -0.078125\nv -0.244887 0.273438 -0.078125\nv -0.298156 0.28125 -0.078125\nv -0.246163 0.28125 -0.078125\nv -0.296911 0.289062 -0.078125\nv -0.296875 0.289285 -0.078125\nv -0.296875 0.289062 -0.0777031\nv -0.247904 0.289062 -0.078125\nv -0.295567 0.296875 -0.078125\nv -0.249807 0.296875 -0.078125\nv -0.25 0.297555 -0.078125\nv -0.25 0.296875 -0.0736636\nv -0.294685 0.304688 -0.078125\nv -0.252212 0.304688 -0.078125\nv -0.293864 0.3125 -0.078125\nv -0.253558 0.3125 -0.078125\nv -0.293766 0.320312 -0.078125\nv -0.254581 0.320312 -0.078125\nv -0.294133 0.328125 -0.078125\nv -0.255916 0.328125 -0.078125\nv -0.294434 0.335938 -0.078125\nv -0.256431 0.335938 -0.078125\nv -0.29453 0.34375 -0.078125\nv -0.256221 0.34375 -0.078125\nv -0.294764 0.351562 -0.078125\nv -0.256052 0.351562 -0.078125\nv -0.294795 0.359375 -0.078125\nv -0.256195 0.359375 -0.078125\nv -0.294677 0.367188 -0.078125\nv -0.256493 0.367188 -0.078125\nv -0.294516 0.375 -0.078125\nv -0.256843 0.375 -0.078125\nv -0.29426 0.382812 -0.078125\nv -0.257259 0.382812 -0.078125\nv -0.257812 0.389538 -0.078125\nv -0.257812 0.382812 -0.072102\nv -0.293927 0.390625 -0.078125\nv -0.257918 0.390625 -0.078125\nv -0.293699 0.398438 -0.078125\nv -0.258747 0.398438 -0.078125\nv -0.293699 0.40625 -0.078125\nv -0.259704 0.40625 -0.078125\nv -0.293797 0.414062 -0.078125\nv -0.260621 0.414062 -0.078125\nv -0.293838 0.421875 -0.078125\nv -0.261434 0.421875 -0.078125\nv -0.293704 0.429688 -0.078125\nv -0.262143 0.429688 -0.078125\nv -0.293866 0.4375 -0.078125\nv -0.262798 0.4375 -0.078125\nv -0.294756 0.445312 -0.078125\nv -0.263278 0.445312 -0.078125\nv -0.295917 0.453125 -0.078125\nv -0.263239 0.453125 -0.078125\nv -0.296101 0.460938 -0.078125\nv -0.296875 0.460938 -0.0712378\nv -0.262862 0.460938 -0.078125\nv -0.296274 0.46875 -0.078125\nv -0.296875 0.46875 -0.0733122\nv -0.26302 0.46875 -0.078125\nv -0.296738 0.476562 -0.078125\nv -0.296875 0.47927 -0.078125\nv -0.296875 0.476562 -0.0770726\nv -0.263253 0.476562 -0.078125\nv -0.297054 0.484375 -0.078125\nv -0.263486 0.484375 -0.078125\nv -0.297401 0.492188 -0.078125\nv -0.263791 0.492188 -0.078125\nv -0.298071 0.5 -0.078125\nv -0.264095 0.5 -0.078125\nv -0.298586 0.507812 -0.078125\nv -0.264434 0.507812 -0.078125\nv -0.299208 0.515625 -0.078125\nv -0.26475 0.515625 -0.078125\nv -0.300126 0.523438 -0.078125\nv -0.265067 0.523438 -0.078125\nv -0.301324 0.53125 -0.078125\nv -0.265378 0.53125 -0.078125\nv -0.302778 0.539062 -0.078125\nv -0.265578 0.539062 -0.078125\nv -0.265625 0.540476 -0.078125\nv -0.304189 0.546875 -0.078125\nv -0.304688 0.550466 -0.078125\nv -0.265907 0.546875 -0.078125\nv -0.305159 0.554688 -0.078125\nv -0.266238 0.554688 -0.078125\nv -0.305858 0.5625 -0.078125\nv -0.266812 0.5625 -0.078125\nv -0.306368 0.570312 -0.078125\nv -0.267391 0.570312 -0.078125\nv -0.306565 0.578125 -0.078125\nv -0.268206 0.578125 -0.078125\nv -0.306928 0.585938 -0.078125\nv -0.269173 0.585938 -0.078125\nv -0.306958 0.59375 -0.078125\nv -0.270235 0.59375 -0.078125\nv -0.306779 0.601562 -0.078125\nv -0.271274 0.601562 -0.078125\nv -0.306783 0.609375 -0.078125\nv -0.272489 0.609375 -0.078125\nv -0.273438 0.613802 -0.078125\nv -0.273438 0.609375 -0.0755821\nv -0.306849 0.617188 -0.078125\nv -0.274202 0.617188 -0.078125\nv -0.30915 0.625 -0.078125\nv -0.275728 0.625 -0.078125\nv -0.311139 0.632812 -0.078125\nv -0.3125 0.639094 -0.078125\nv -0.276671 0.632812 -0.078125\nv -0.312837 0.640625 -0.078125\nv -0.3125 0.640625 -0.0747855\nv -0.277495 0.640625 -0.078125\nv -0.31413 0.648438 -0.078125\nv -0.278294 0.648438 -0.078125\nv -0.28125 0.648438 -0.0717802\nv -0.315486 0.65625 -0.078125\nv -0.278507 0.65625 -0.078125\nv -0.28125 0.65625 -0.0719871\nv -0.316591 0.664062 -0.078125\nv -0.278726 0.664062 -0.078125\nv -0.28125 0.664062 -0.0717427\nv -0.317191 0.671875 -0.078125\nv -0.278906 0.671875 -0.078125\nv -0.317911 0.679688 -0.078125\nv -0.27918 0.679688 -0.078125\nv -0.3187 0.6875 -0.078125\nv -0.279448 0.6875 -0.078125\nv -0.319588 0.695312 -0.078125\nv -0.320312 0.70172 -0.078125\nv -0.279398 0.695312 -0.078125\nv -0.320462 0.703125 -0.078125\nv -0.320312 0.703125 -0.0759772\nv -0.279309 0.703125 -0.078125\nv -0.321031 0.710938 -0.078125\nv -0.279418 0.710938 -0.078125\nv -0.321832 0.71875 -0.078125\nv -0.279866 0.71875 -0.078125\nv -0.32275 0.726562 -0.078125\nv -0.280124 0.726562 -0.078125\nv -0.323814 0.734375 -0.078125\nv -0.280449 0.734375 -0.078125\nv -0.28125 0.739647 -0.078125\nv -0.324948 0.742188 -0.078125\nv -0.281697 0.742188 -0.078125\nv -0.325931 0.75 -0.078125\nv -0.283034 0.75 -0.078125\nv -0.326755 0.757812 -0.078125\nv -0.284081 0.757812 -0.078125\nv -0.328071 0.765625 -0.078125\nv -0.328125 0.765922 -0.078125\nv -0.285242 0.765625 -0.078125\nv -0.329342 0.773438 -0.078125\nv -0.286663 0.773438 -0.078125\nv -0.330209 0.78125 -0.078125\nv -0.288588 0.78125 -0.078125\nv -0.289062 0.782849 -0.078125\nv -0.330603 0.789062 -0.078125\nv -0.292017 0.789062 -0.078125\nv -0.330828 0.796875 -0.078125\nv -0.295656 0.796875 -0.078125\nv -0.296875 0.799002 -0.078125\nv -0.330752 0.804688 -0.078125\nv -0.301459 0.804688 -0.078125\nv -0.304688 0.80869 -0.078125\nv -0.329529 0.8125 -0.078125\nv -0.328125 0.815093 -0.078125\nv -0.307399 0.8125 -0.078125\nv -0.3125 0.817887 -0.078125\nv -0.321263 0.820312 -0.078125\nv -0.318516 0.820312 -0.078125\nv -0.320312 0.820891 -0.078125\nv 0.046875 -0.539773 -0.0703125\nv 0.0546875 -0.540368 -0.0703125\nv 0.0625 -0.541179 -0.0703125\nv 0.0703125 -0.54165 -0.0703125\nv 0.078125 -0.541936 -0.0703125\nv 0.0859375 -0.541904 -0.0703125\nv 0.09375 -0.541622 -0.0703125\nv 0.101562 -0.539947 -0.0703125\nv 0.015625 -0.533355 -0.0703125\nv 0.0234375 -0.535581 -0.0703125\nv 0.03125 -0.537289 -0.0703125\nv 0.0399319 -0.539062 -0.0703125\nv 0.0390625 -0.538919 -0.0703125\nv 0.046875 -0.539062 -0.066143\nv 0.105339 -0.539062 -0.0703125\nv 0.109375 -0.537739 -0.0703125\nv 0.117188 -0.534173 -0.0703125\nv 0 -0.527558 -0.0703125\nv 0.0092806 -0.53125 -0.0703125\nv 0.0078125 -0.530676 -0.0703125\nv 0.122532 -0.53125 -0.0703125\nv 0.125 -0.529537 -0.0703125\nv 0.132812 -0.523859 -0.0703125\nv -0.00642995 -0.523438 -0.0703125\nv 0.133326 -0.523438 -0.0703125\nv 0.132812 -0.523438 -0.0694377\nv -0.00776887 -0.515625 -0.0703125\nv -0.0078125 -0.515625 -0.0700028\nv 0.136743 -0.515625 -0.0703125\nv 0.132812 -0.515625 -0.0635044\nv -0.00424786 -0.507812 -0.0703125\nv 0 -0.505291 -0.0703125\nv 0.0078125 -0.501148 -0.0703125\nv 0.138072 -0.507812 -0.0703125\nv 0.010048 -0.5 -0.0703125\nv 0.015625 -0.49703 -0.0703125\nv 0.133971 -0.5 -0.0703125\nv 0.132812 -0.498389 -0.0703125\nv 0.0233377 -0.492188 -0.0703125\nv 0.0234375 -0.49214 -0.0703125\nv 0.0234375 -0.492188 -0.0699218\nv 0.03125 -0.489522 -0.0703125\nv 0.0390625 -0.487683 -0.0703125\nv 0.046875 -0.486091 -0.0703125\nv 0.0546875 -0.484844 -0.0703125\nv 0.117188 -0.484983 -0.0703125\nv 0.128365 -0.492188 -0.0703125\nv 0.125 -0.489824 -0.0703125\nv 0.057568 -0.484375 -0.0703125\nv 0.0625 -0.483637 -0.0703125\nv 0.0703125 -0.482139 -0.0703125\nv 0.078125 -0.481064 -0.0703125\nv 0.0859375 -0.480582 -0.0703125\nv 0.09375 -0.480537 -0.0703125\nv 0.101562 -0.480666 -0.0703125\nv 0.115832 -0.484375 -0.0703125\nv 0.109375 -0.481945 -0.0703125\nv 0.117188 -0.484375 -0.0685658\nv -0.289062 -0.0637314 -0.0703125\nv -0.28125 -0.0655736 -0.0703125\nv -0.273438 -0.0640104 -0.0703125\nv 0.453125 -0.0667138 -0.0703125\nv 0.460938 -0.0682063 -0.0703125\nv 0.46875 -0.0658719 -0.0703125\nv 0.476562 -0.0654887 -0.0703125\nv 0.484375 -0.0634571 -0.0703125\nv -0.290559 -0.0625 -0.0703125\nv -0.271788 -0.0625 -0.0703125\nv 0.448671 -0.0625 -0.0703125\nv 0.486188 -0.0625 -0.0703125\nv -0.294945 -0.0546875 -0.0703125\nv -0.296875 -0.0500784 -0.0703125\nv -0.267188 -0.0546875 -0.0703125\nv -0.265625 -0.0511998 -0.0703125\nv 0.446417 -0.0546875 -0.0703125\nv 0.445312 -0.0504312 -0.0703125\nv 0.490512 -0.0546875 -0.0703125\nv 0.492188 -0.0490693 -0.0703125\nv -0.297807 -0.046875 -0.0703125\nv -0.263956 -0.046875 -0.0703125\nv 0.444531 -0.046875 -0.0703125\nv 0.492722 -0.046875 -0.0703125\nv -0.299138 -0.0390625 -0.0703125\nv -0.262271 -0.0390625 -0.0703125\nv 0.444575 -0.0390625 -0.0703125\nv 0.494337 -0.0390625 -0.0703125\nv -0.299439 -0.03125 -0.0703125\nv -0.261369 -0.03125 -0.0703125\nv 0.44446 -0.03125 -0.0703125\nv 0.496279 -0.03125 -0.0703125\nv -0.299763 -0.0234375 -0.0703125\nv -0.260842 -0.0234375 -0.0703125\nv 0.443857 -0.0234375 -0.0703125\nv 0.498777 -0.0234375 -0.0703125\nv -0.301196 -0.015625 -0.0703125\nv -0.259598 -0.015625 -0.0703125\nv 0.443056 -0.015625 -0.0703125\nv 0.499839 -0.015625 -0.0703125\nv 0.5 -0.015625 -0.0642762\nv -0.302737 -0.0078125 -0.0703125\nv -0.259492 -0.0078125 -0.0703125\nv 0.441038 -0.0078125 -0.0703125\nv 0.499482 -0.0078125 -0.0703125\nv -0.304276 0 -0.0703125\nv -0.259629 0 -0.0703125\nv 0.439754 0 -0.0703125\nv 0.499127 0 -0.0703125\nv -0.304347 0.0078125 -0.0703125\nv -0.258246 0.0078125 -0.0703125\nv -0.257812 0.00850248 -0.0703125\nv 0.439873 0.0078125 -0.0703125\nv 0.499033 0.0078125 -0.0703125\nv -0.302882 0.015625 -0.0703125\nv -0.251312 0.015625 -0.0703125\nv -0.25 0.016551 -0.0703125\nv -0.242188 0.0178453 -0.0703125\nv -0.234375 0.0196704 -0.0703125\nv -0.226562 0.0227212 -0.0703125\nv 0.421875 0.022558 -0.0703125\nv 0.429688 0.0213356 -0.0703125\nv 0.438052 0.015625 -0.0703125\nv 0.4375 0.0161702 -0.0703125\nv 0.499138 0.015625 -0.0703125\nv -0.301639 0.0234375 -0.0703125\nv -0.224598 0.0234375 -0.0703125\nv -0.21875 0.0251664 -0.0703125\nv -0.210938 0.026157 -0.0703125\nv -0.203125 0.0264457 -0.0703125\nv -0.195312 0.0265076 -0.0703125\nv -0.1875 0.0266964 -0.0703125\nv -0.179688 0.0267342 -0.0703125\nv -0.171875 0.0270182 -0.0703125\nv -0.164062 0.0270174 -0.0703125\nv -0.15625 0.0270667 -0.0703125\nv -0.148438 0.0272097 -0.0703125\nv -0.140625 0.0272529 -0.0703125\nv -0.132812 0.0273107 -0.0703125\nv -0.125 0.0275986 -0.0703125\nv -0.117188 0.0275337 -0.0703125\nv -0.109375 0.0272118 -0.0703125\nv -0.101562 0.0268841 -0.0703125\nv -0.09375 0.0266003 -0.0703125\nv -0.0859375 0.0263468 -0.0703125\nv -0.078125 0.0261576 -0.0703125\nv -0.0703125 0.0259249 -0.0703125\nv -0.0625 0.0256661 -0.0703125\nv -0.0546875 0.0255048 -0.0703125\nv -0.046875 0.0254743 -0.0703125\nv -0.0390625 0.0254722 -0.0703125\nv -0.03125 0.0254866 -0.0703125\nv -0.0234375 0.0254756 -0.0703125\nv -0.015625 0.0255643 -0.0703125\nv -0.0078125 0.0257014 -0.0703125\nv 0 0.0257661 -0.0703125\nv 0.0078125 0.0258235 -0.0703125\nv 0.015625 0.0258752 -0.0703125\nv 0.0234375 0.026002 -0.0703125\nv 0.03125 0.026151 -0.0703125\nv 0.0390625 0.0261671 -0.0703125\nv 0.046875 0.0260401 -0.0703125\nv 0.0546875 0.0259965 -0.0703125\nv 0.0625 0.0260121 -0.0703125\nv 0.0703125 0.0259708 -0.0703125\nv 0.078125 0.0259453 -0.0703125\nv 0.0859375 0.0260056 -0.0703125\nv 0.09375 0.026047 -0.0703125\nv 0.101562 0.0260162 -0.0703125\nv 0.109375 0.0259417 -0.0703125\nv 0.117188 0.0258628 -0.0703125\nv 0.125 0.0257818 -0.0703125\nv 0.132812 0.0256511 -0.0703125\nv 0.140625 0.0254874 -0.0703125\nv 0.148438 0.0252975 -0.0703125\nv 0.15625 0.0250876 -0.0703125\nv 0.164062 0.0248576 -0.0703125\nv 0.171875 0.0246677 -0.0703125\nv 0.179688 0.0244945 -0.0703125\nv 0.1875 0.0243365 -0.0703125\nv 0.195312 0.0243457 -0.0703125\nv 0.203125 0.0242991 -0.0703125\nv 0.210938 0.0242496 -0.0703125\nv 0.21875 0.0242097 -0.0703125\nv 0.226562 0.024134 -0.0703125\nv 0.234375 0.024254 -0.0703125\nv 0.242188 0.0244114 -0.0703125\nv 0.25 0.0245665 -0.0703125\nv 0.257812 0.0248039 -0.0703125\nv 0.265625 0.0250205 -0.0703125\nv 0.273438 0.0252415 -0.0703125\nv 0.28125 0.0254212 -0.0703125\nv 0.289062 0.0255649 -0.0703125\nv 0.296875 0.0256984 -0.0703125\nv 0.304688 0.0258625 -0.0703125\nv 0.3125 0.0261082 -0.0703125\nv 0.320312 0.0264408 -0.0703125\nv 0.328125 0.0267382 -0.0703125\nv 0.335938 0.026796 -0.0703125\nv 0.34375 0.026843 -0.0703125\nv 0.351562 0.0268912 -0.0703125\nv 0.359375 0.0269451 -0.0703125\nv 0.367188 0.0269314 -0.0703125\nv 0.375 0.02693 -0.0703125\nv 0.382812 0.0267304 -0.0703125\nv 0.390625 0.0263155 -0.0703125\nv 0.398438 0.0257578 -0.0703125\nv 0.40625 0.0252781 -0.0703125\nv 0.418658 0.0234375 -0.0703125\nv 0.414062 0.0243963 -0.0703125\nv 0.499143 0.0234375 -0.0703125\nv -0.300367 0.03125 -0.0703125\nv 0.497073 0.03125 -0.0703125\nv -0.299272 0.0390625 -0.0703125\nv -0.296875 0.046475 -0.0703125\nv 0.494879 0.0390625 -0.0703125\nv -0.296736 0.046875 -0.0703125\nv 0.493054 0.046875 -0.0703125\nv 0.492188 0.0498812 -0.0703125\nv -0.293769 0.0546875 -0.0703125\nv 0.490608 0.0546875 -0.0703125\nv 0.484375 0.0590698 -0.0703125\nv -0.291736 0.0625 -0.0703125\nv -0.289062 0.0684436 -0.0703125\nv 0.453125 0.0686678 -0.0703125\nv 0.460938 0.0675117 -0.0703125\nv 0.46875 0.0666115 -0.0703125\nv 0.47784 0.0625 -0.0703125\nv 0.476562 0.0632391 -0.0703125\nv -0.287861 0.0703125 -0.0703125\nv -0.28125 0.0759276 -0.0703125\nv -0.226562 0.076394 -0.0703125\nv -0.21875 0.0747659 -0.0703125\nv -0.210938 0.0737458 -0.0703125\nv -0.203125 0.0739069 -0.0703125\nv -0.195312 0.0741783 -0.0703125\nv -0.1875 0.0745471 -0.0703125\nv -0.179688 0.0746687 -0.0703125\nv -0.171875 0.0748596 -0.0703125\nv -0.164062 0.0750014 -0.0703125\nv -0.15625 0.075144 -0.0703125\nv -0.148438 0.0751808 -0.0703125\nv -0.140625 0.0750549 -0.0703125\nv -0.132812 0.0750953 -0.0703125\nv -0.125 0.0752504 -0.0703125\nv -0.117188 0.0753328 -0.0703125\nv -0.109375 0.0752656 -0.0703125\nv -0.101562 0.0751137 -0.0703125\nv -0.09375 0.0750481 -0.0703125\nv -0.0859375 0.0750594 -0.0703125\nv -0.078125 0.0749549 -0.0703125\nv -0.0703125 0.0748229 -0.0703125\nv -0.0625 0.0747464 -0.0703125\nv -0.0546875 0.07451 -0.0703125\nv -0.046875 0.0743016 -0.0703125\nv -0.0390625 0.0741628 -0.0703125\nv -0.03125 0.0740461 -0.0703125\nv -0.0234375 0.0738835 -0.0703125\nv -0.015625 0.0737982 -0.0703125\nv -0.0078125 0.0738064 -0.0703125\nv 0 0.0738187 -0.0703125\nv 0.0078125 0.0738402 -0.0703125\nv 0.015625 0.0738865 -0.0703125\nv 0.0234375 0.0739392 -0.0703125\nv 0.03125 0.0740379 -0.0703125\nv 0.0390625 0.074074 -0.0703125\nv 0.046875 0.0740619 -0.0703125\nv 0.0546875 0.0740287 -0.0703125\nv 0.0625 0.0739034 -0.0703125\nv 0.0703125 0.0737716 -0.0703125\nv 0.078125 0.0737019 -0.0703125\nv 0.0859375 0.0737843 -0.0703125\nv 0.09375 0.0737993 -0.0703125\nv 0.101562 0.0737642 -0.0703125\nv 0.109375 0.0736813 -0.0703125\nv 0.117188 0.0735707 -0.0703125\nv 0.125 0.0734993 -0.0703125\nv 0.132812 0.0734078 -0.0703125\nv 0.140625 0.0733058 -0.0703125\nv 0.148438 0.0731879 -0.0703125\nv 0.15625 0.0730787 -0.0703125\nv 0.164062 0.073006 -0.0703125\nv 0.171875 0.0729851 -0.0703125\nv 0.179688 0.0729867 -0.0703125\nv 0.1875 0.0729698 -0.0703125\nv 0.195312 0.0729394 -0.0703125\nv 0.203125 0.0729097 -0.0703125\nv 0.210938 0.0728775 -0.0703125\nv 0.21875 0.0728481 -0.0703125\nv 0.226562 0.0728217 -0.0703125\nv 0.234375 0.0728101 -0.0703125\nv 0.242188 0.0727767 -0.0703125\nv 0.25 0.0728461 -0.0703125\nv 0.257812 0.0729599 -0.0703125\nv 0.265625 0.0730562 -0.0703125\nv 0.273438 0.0731901 -0.0703125\nv 0.28125 0.0733094 -0.0703125\nv 0.289062 0.0734378 -0.0703125\nv 0.296875 0.0734981 -0.0703125\nv 0.304688 0.0735485 -0.0703125\nv 0.3125 0.0735893 -0.0703125\nv 0.320312 0.0736286 -0.0703125\nv 0.328125 0.0736847 -0.0703125\nv 0.335938 0.0737705 -0.0703125\nv 0.34375 0.0738232 -0.0703125\nv 0.351562 0.0737793 -0.0703125\nv 0.359375 0.07373 -0.0703125\nv 0.367188 0.0735925 -0.0703125\nv 0.375 0.0733432 -0.0703125\nv 0.382812 0.072921 -0.0703125\nv 0.390625 0.0726024 -0.0703125\nv 0.398438 0.0723742 -0.0703125\nv 0.40625 0.0722568 -0.0703125\nv 0.414062 0.072125 -0.0703125\nv 0.421875 0.0719688 -0.0703125\nv 0.429688 0.0718051 -0.0703125\nv 0.4375 0.0713559 -0.0703125\nv 0.446358 0.0703125 -0.0703125\nv 0.445312 0.0705535 -0.0703125\nv -0.276958 0.078125 -0.0703125\nv -0.273438 0.0798289 -0.0703125\nv -0.265625 0.0835831 -0.0703125\nv -0.242188 0.0827621 -0.0703125\nv -0.232513 0.078125 -0.0703125\nv -0.234375 0.0788461 -0.0703125\nv -0.234375 0.078125 -0.0628891\nv -0.261835 0.0859375 -0.0703125\nv -0.257812 0.0885133 -0.0703125\nv -0.246694 0.0859375 -0.0703125\nv -0.25 0.0876489 -0.0703125\nv -0.289062 0.170564 -0.0703125\nv -0.28125 0.168258 -0.0703125\nv -0.273438 0.166511 -0.0703125\nv -0.265625 0.166604 -0.0703125\nv -0.257812 0.170245 -0.0703125\nv -0.291158 0.171875 -0.0703125\nv -0.289062 0.171875 -0.063222\nv -0.256526 0.171875 -0.0703125\nv -0.296472 0.179688 -0.0703125\nv -0.296875 0.180677 -0.0703125\nv -0.251424 0.179688 -0.0703125\nv -0.25 0.18217 -0.0703125\nv -0.298792 0.1875 -0.0703125\nv -0.246798 0.1875 -0.0703125\nv -0.2994 0.195312 -0.0703125\nv -0.244041 0.195312 -0.0703125\nv -0.299592 0.203125 -0.0703125\nv -0.24261 0.203125 -0.0703125\nv -0.242188 0.209751 -0.0703125\nv -0.29971 0.210938 -0.0703125\nv -0.242105 0.210938 -0.0703125\nv -0.242188 0.210938 -0.0691426\nv -0.29967 0.21875 -0.0703125\nv -0.241575 0.21875 -0.0703125\nv -0.299624 0.226562 -0.0703125\nv -0.241674 0.226562 -0.0703125\nv -0.299639 0.234375 -0.0703125\nv -0.242079 0.234375 -0.0703125\nv -0.242188 0.236356 -0.0703125\nv -0.299787 0.242188 -0.0703125\nv -0.242495 0.242188 -0.0703125\nv -0.299769 0.25 -0.0703125\nv -0.242818 0.25 -0.0703125\nv -0.299591 0.257812 -0.0703125\nv -0.2434 0.257812 -0.0703125\nv -0.299185 0.265625 -0.0703125\nv -0.24409 0.265625 -0.0703125\nv -0.298645 0.273438 -0.0703125\nv -0.24494 0.273438 -0.0703125\nv -0.297661 0.28125 -0.0703125\nv -0.296875 0.285579 -0.0703125\nv -0.246109 0.28125 -0.0703125\nv -0.296209 0.289062 -0.0703125\nv -0.247848 0.289062 -0.0703125\nv -0.25 0.296382 -0.0703125\nv -0.294984 0.296875 -0.0703125\nv -0.250171 0.296875 -0.0703125\nv -0.294099 0.304688 -0.0703125\nv -0.252997 0.304688 -0.0703125\nv -0.293261 0.3125 -0.0703125\nv -0.254259 0.3125 -0.0703125\nv -0.293217 0.320312 -0.0703125\nv -0.255413 0.320312 -0.0703125\nv -0.29367 0.328125 -0.0703125\nv -0.256489 0.328125 -0.0703125\nv -0.29408 0.335938 -0.0703125\nv -0.257048 0.335938 -0.0703125\nv -0.257812 0.335938 -0.0632929\nv -0.29428 0.34375 -0.0703125\nv -0.256881 0.34375 -0.0703125\nv -0.257812 0.34375 -0.0626694\nv -0.294663 0.351562 -0.0703125\nv -0.256918 0.351562 -0.0703125\nv -0.257812 0.351562 -0.0643346\nv -0.29484 0.359375 -0.0703125\nv -0.257005 0.359375 -0.0703125\nv -0.257812 0.359375 -0.0654026\nv -0.294893 0.367188 -0.0703125\nv -0.257329 0.367188 -0.0703125\nv -0.257812 0.367188 -0.0667609\nv -0.29473 0.375 -0.0703125\nv -0.257594 0.375 -0.0703125\nv -0.257812 0.379489 -0.0703125\nv -0.257812 0.375 -0.0684055\nv -0.294527 0.382812 -0.0703125\nv -0.257991 0.382812 -0.0703125\nv -0.294273 0.390625 -0.0703125\nv -0.25849 0.390625 -0.0703125\nv -0.294018 0.398438 -0.0703125\nv -0.259031 0.398438 -0.0703125\nv -0.294071 0.40625 -0.0703125\nv -0.25958 0.40625 -0.0703125\nv -0.294277 0.414062 -0.0703125\nv -0.260094 0.414062 -0.0703125\nv -0.29449 0.421875 -0.0703125\nv -0.260668 0.421875 -0.0703125\nv -0.294595 0.429688 -0.0703125\nv -0.261258 0.429688 -0.0703125\nv -0.294983 0.4375 -0.0703125\nv -0.261888 0.4375 -0.0703125\nv -0.295692 0.445312 -0.0703125\nv -0.262388 0.445312 -0.0703125\nv -0.29674 0.453125 -0.0703125\nv -0.296875 0.457633 -0.0703125\nv -0.296875 0.453125 -0.0688851\nv -0.262507 0.453125 -0.0703125\nv -0.296964 0.460938 -0.0703125\nv -0.262383 0.460938 -0.0703125\nv -0.297172 0.46875 -0.0703125\nv -0.262648 0.46875 -0.0703125\nv -0.297501 0.476562 -0.0703125\nv -0.262921 0.476562 -0.0703125\nv -0.297799 0.484375 -0.0703125\nv -0.263223 0.484375 -0.0703125\nv -0.298162 0.492188 -0.0703125\nv -0.263587 0.492188 -0.0703125\nv -0.298886 0.5 -0.0703125\nv -0.263941 0.5 -0.0703125\nv -0.299424 0.507812 -0.0703125\nv -0.264253 0.507812 -0.0703125\nv -0.300023 0.515625 -0.0703125\nv -0.264551 0.515625 -0.0703125\nv -0.300807 0.523438 -0.0703125\nv -0.264886 0.523438 -0.0703125\nv -0.301799 0.53125 -0.0703125\nv -0.265213 0.53125 -0.0703125\nv -0.303021 0.539062 -0.0703125\nv -0.26552 0.539062 -0.0703125\nv -0.265625 0.541533 -0.0703125\nv -0.304185 0.546875 -0.0703125\nv -0.304688 0.551827 -0.0703125\nv -0.265929 0.546875 -0.0703125\nv -0.304935 0.554688 -0.0703125\nv -0.266473 0.554688 -0.0703125\nv -0.30551 0.5625 -0.0703125\nv -0.267094 0.5625 -0.0703125\nv -0.305979 0.570312 -0.0703125\nv -0.267876 0.570312 -0.0703125\nv -0.306312 0.578125 -0.0703125\nv -0.26877 0.578125 -0.0703125\nv -0.306483 0.585938 -0.0703125\nv -0.270012 0.585938 -0.0703125\nv -0.306493 0.59375 -0.0703125\nv -0.271096 0.59375 -0.0703125\nv -0.306236 0.601562 -0.0703125\nv -0.272583 0.601562 -0.0703125\nv -0.273438 0.603851 -0.0703125\nv -0.273438 0.601562 -0.0671422\nv -0.30622 0.609375 -0.0703125\nv -0.275252 0.609375 -0.0703125\nv -0.306161 0.617188 -0.0703125\nv -0.304688 0.617188 -0.0631975\nv -0.277749 0.617188 -0.0703125\nv -0.28125 0.617188 -0.0633848\nv -0.308243 0.625 -0.0703125\nv -0.279735 0.625 -0.0703125\nv -0.28125 0.625 -0.0675339\nv -0.310296 0.632812 -0.0703125\nv -0.280268 0.632812 -0.0703125\nv -0.28125 0.632812 -0.0683208\nv -0.312078 0.640625 -0.0703125\nv -0.3125 0.643286 -0.0703125\nv -0.281154 0.640625 -0.0703125\nv -0.28125 0.641661 -0.0703125\nv -0.28125 0.640625 -0.0701229\nv -0.313376 0.648438 -0.0703125\nv -0.281895 0.648438 -0.0703125\nv -0.31476 0.65625 -0.0703125\nv -0.281941 0.65625 -0.0703125\nv -0.315993 0.664062 -0.0703125\nv -0.281794 0.664062 -0.0703125\nv -0.28125 0.671011 -0.0703125\nv -0.316607 0.671875 -0.0703125\nv -0.281193 0.671875 -0.0703125\nv -0.28125 0.671875 -0.0701828\nv -0.317319 0.679688 -0.0703125\nv -0.280891 0.679688 -0.0703125\nv -0.28125 0.679688 -0.069347\nv -0.318043 0.6875 -0.0703125\nv -0.28058 0.6875 -0.0703125\nv -0.28125 0.6875 -0.0673491\nv -0.318809 0.695312 -0.0703125\nv -0.280313 0.695312 -0.0703125\nv -0.319888 0.703125 -0.0703125\nv -0.320312 0.706628 -0.0703125\nv -0.280048 0.703125 -0.0703125\nv -0.320797 0.710938 -0.0703125\nv -0.280005 0.710938 -0.0703125\nv -0.32179 0.71875 -0.0703125\nv -0.280382 0.71875 -0.0703125\nv -0.322773 0.726562 -0.0703125\nv -0.280849 0.726562 -0.0703125\nv -0.28125 0.726562 -0.0626757\nv -0.323772 0.734375 -0.0703125\nv -0.280785 0.734375 -0.0703125\nv -0.28125 0.738042 -0.0703125\nv -0.28125 0.734375 -0.063132\nv -0.324901 0.742188 -0.0703125\nv -0.281872 0.742188 -0.0703125\nv -0.325926 0.75 -0.0703125\nv -0.283147 0.75 -0.0703125\nv -0.326782 0.757812 -0.0703125\nv -0.284162 0.757812 -0.0703125\nv -0.328123 0.765625 -0.0703125\nv -0.328125 0.765633 -0.0703125\nv -0.285264 0.765625 -0.0703125\nv -0.329462 0.773438 -0.0703125\nv -0.286618 0.773438 -0.0703125\nv -0.330486 0.78125 -0.0703125\nv -0.288477 0.78125 -0.0703125\nv -0.289062 0.783367 -0.0703125\nv -0.331006 0.789062 -0.0703125\nv -0.291583 0.789062 -0.0703125\nv -0.331326 0.796875 -0.0703125\nv -0.29494 0.796875 -0.0703125\nv -0.296875 0.800458 -0.0703125\nv -0.331417 0.804688 -0.0703125\nv -0.300129 0.804688 -0.0703125\nv -0.304688 0.810326 -0.0703125\nv -0.330677 0.8125 -0.0703125\nv -0.328125 0.817259 -0.0703125\nv -0.306184 0.8125 -0.0703125\nv -0.3125 0.819552 -0.0703125\nv -0.324458 0.820312 -0.0703125\nv -0.313952 0.820312 -0.0703125\nv -0.320312 0.82267 -0.0703125\nv -0.3125 0.820312 -0.0672017\nv 0.0546875 -0.539249 -0.0625\nv 0.0625 -0.540224 -0.0625\nv 0.0703125 -0.540683 -0.0625\nv 0.078125 -0.540733 -0.0625\nv 0.0859375 -0.54067 -0.0625\nv 0.09375 -0.540538 -0.0625\nv 0.101562 -0.539224 -0.0625\nv 0.015625 -0.531947 -0.0625\nv 0.0234375 -0.533904 -0.0625\nv 0.03125 -0.535326 -0.0625\nv 0.0390625 -0.536632 -0.0625\nv 0.0528244 -0.539062 -0.0625\nv 0.046875 -0.538099 -0.0625\nv 0.0546875 -0.539062 -0.0611793\nv 0.0625 -0.539062 -0.0560116\nv 0.102212 -0.539062 -0.0625\nv 0.101562 -0.539062 -0.061418\nv 0.109375 -0.536478 -0.0625\nv 0.117188 -0.532172 -0.0625\nv 0 -0.527503 -0.0625\nv 0.0123287 -0.53125 -0.0625\nv 0.0078125 -0.530098 -0.0625\nv 0.015625 -0.53125 -0.0598831\nv 0.118591 -0.53125 -0.0625\nv 0.117188 -0.53125 -0.0602719\nv 0.125 -0.526209 -0.0625\nv -0.00735607 -0.523438 -0.0625\nv -0.0078125 -0.521357 -0.0625\nv 0.128549 -0.523438 -0.0625\nv 0.125 -0.523438 -0.0586625\nv -0.00880915 -0.515625 -0.0625\nv -0.0078125 -0.513321 -0.0625\nv 0.13235 -0.515625 -0.0625\nv 0.132812 -0.514627 -0.0625\nv -0.00527222 -0.507812 -0.0625\nv 0 -0.504821 -0.0625\nv 0.0078125 -0.501144 -0.0625\nv 0.134943 -0.507812 -0.0625\nv 0.132812 -0.507812 -0.0568624\nv 0.0102367 -0.5 -0.0625\nv 0.015625 -0.497574 -0.0625\nv 0.0234375 -0.49347 -0.0625\nv 0.133613 -0.5 -0.0625\nv 0.132812 -0.497152 -0.0625\nv 0.0260287 -0.492188 -0.0625\nv 0.03125 -0.490309 -0.0625\nv 0.0390625 -0.488324 -0.0625\nv 0.046875 -0.48662 -0.0625\nv 0.0546875 -0.485041 -0.0625\nv 0.130763 -0.492188 -0.0625\nv 0.125 -0.487381 -0.0625\nv 0.132812 -0.492188 -0.0568979\nv 0.0582323 -0.484375 -0.0625\nv 0.0625 -0.483692 -0.0625\nv 0.0703125 -0.482376 -0.0625\nv 0.078125 -0.481625 -0.0625\nv 0.0859375 -0.479748 -0.0625\nv 0.09375 -0.477063 -0.0625\nv 0.101562 -0.477557 -0.0625\nv 0.109375 -0.479223 -0.0625\nv 0.120765 -0.484375 -0.0625\nv 0.117188 -0.482198 -0.0625\nv 0.125 -0.484375 -0.0562174\nv 0.09375 -0.476562 -0.0612909\nv 0.101562 -0.476562 -0.060079\nv 0.109375 -0.476562 -0.0563277\nv -0.289062 -0.0640683 -0.0625\nv -0.28125 -0.0658523 -0.0625\nv -0.273438 -0.0642355 -0.0625\nv 0.453125 -0.0671482 -0.0625\nv 0.460938 -0.0685792 -0.0625\nv 0.46875 -0.0661195 -0.0625\nv 0.476562 -0.0656872 -0.0625\nv 0.484375 -0.0637185 -0.0625\nv -0.290868 -0.0625 -0.0625\nv -0.271582 -0.0625 -0.0625\nv 0.448159 -0.0625 -0.0625\nv 0.486706 -0.0625 -0.0625\nv -0.294841 -0.0546875 -0.0625\nv -0.296875 -0.049673 -0.0625\nv -0.267071 -0.0546875 -0.0625\nv -0.265625 -0.0512523 -0.0625\nv 0.445946 -0.0546875 -0.0625\nv 0.445312 -0.0522619 -0.0625\nv 0.490953 -0.0546875 -0.0625\nv 0.492188 -0.0503473 -0.0625\nv -0.297685 -0.046875 -0.0625\nv -0.264003 -0.046875 -0.0625\nv 0.444103 -0.046875 -0.0625\nv 0.492983 -0.046875 -0.0625\nv -0.299092 -0.0390625 -0.0625\nv -0.262223 -0.0390625 -0.0625\nv 0.444195 -0.0390625 -0.0625\nv 0.494642 -0.0390625 -0.0625\nv -0.29947 -0.03125 -0.0625\nv -0.261302 -0.03125 -0.0625\nv 0.444167 -0.03125 -0.0625\nv 0.496557 -0.03125 -0.0625\nv -0.299841 -0.0234375 -0.0625\nv -0.26079 -0.0234375 -0.0625\nv 0.443678 -0.0234375 -0.0625\nv 0.498995 -0.0234375 -0.0625\nv 0.5 -0.0160172 -0.0625\nv -0.301278 -0.015625 -0.0625\nv -0.259526 -0.015625 -0.0625\nv 0.442956 -0.015625 -0.0625\nv 0.500035 -0.015625 -0.0625\nv 0.5 -0.0149154 -0.0625\nv -0.302802 -0.0078125 -0.0625\nv -0.259387 -0.0078125 -0.0625\nv 0.440927 -0.0078125 -0.0625\nv 0.499584 -0.0078125 -0.0625\nv -0.304198 0 -0.0625\nv -0.25957 0 -0.0625\nv 0.439588 0 -0.0625\nv 0.499196 0 -0.0625\nv -0.304229 0.0078125 -0.0625\nv -0.258158 0.0078125 -0.0625\nv -0.257812 0.00837044 -0.0625\nv 0.439556 0.0078125 -0.0625\nv 0.499074 0.0078125 -0.0625\nv -0.302808 0.015625 -0.0625\nv -0.251384 0.015625 -0.0625\nv -0.25 0.0166024 -0.0625\nv -0.242188 0.017843 -0.0625\nv -0.234375 0.0196511 -0.0625\nv -0.226562 0.0226429 -0.0625\nv 0.421875 0.0223481 -0.0625\nv 0.429688 0.0212419 -0.0625\nv 0.437879 0.015625 -0.0625\nv 0.4375 0.0160103 -0.0625\nv 0.499111 0.015625 -0.0625\nv -0.301547 0.0234375 -0.0625\nv -0.224286 0.0234375 -0.0625\nv -0.21875 0.0250407 -0.0625\nv -0.210938 0.0260619 -0.0625\nv -0.203125 0.0263591 -0.0625\nv -0.195312 0.0264606 -0.0625\nv -0.1875 0.0266512 -0.0625\nv -0.179688 0.026719 -0.0625\nv -0.171875 0.0270329 -0.0625\nv -0.164062 0.027055 -0.0625\nv -0.15625 0.0271235 -0.0625\nv -0.148438 0.0272453 -0.0625\nv -0.140625 0.0272358 -0.0625\nv -0.132812 0.0272588 -0.0625\nv -0.125 0.0275509 -0.0625\nv -0.117188 0.0275074 -0.0625\nv -0.109375 0.0271864 -0.0625\nv -0.101562 0.0268534 -0.0625\nv -0.09375 0.0265959 -0.0625\nv -0.0859375 0.0263567 -0.0625\nv -0.078125 0.0261455 -0.0625\nv -0.0703125 0.0259582 -0.0625\nv -0.0625 0.0256942 -0.0625\nv -0.0546875 0.0254689 -0.0625\nv -0.046875 0.0254417 -0.0625\nv -0.0390625 0.0254535 -0.0625\nv -0.03125 0.0254187 -0.0625\nv -0.0234375 0.0254286 -0.0625\nv -0.015625 0.0254433 -0.0625\nv -0.0078125 0.0255931 -0.0625\nv 0 0.0256767 -0.0625\nv 0.0078125 0.0257494 -0.0625\nv 0.015625 0.0258439 -0.0625\nv 0.0234375 0.0259878 -0.0625\nv 0.03125 0.0260996 -0.0625\nv 0.0390625 0.0261611 -0.0625\nv 0.046875 0.0260505 -0.0625\nv 0.0546875 0.0259756 -0.0625\nv 0.0625 0.0259028 -0.0625\nv 0.0703125 0.0258453 -0.0625\nv 0.078125 0.0258041 -0.0625\nv 0.0859375 0.0258462 -0.0625\nv 0.09375 0.0259076 -0.0625\nv 0.101562 0.0259391 -0.0625\nv 0.109375 0.0258864 -0.0625\nv 0.117188 0.0258007 -0.0625\nv 0.125 0.0256952 -0.0625\nv 0.132812 0.0255406 -0.0625\nv 0.140625 0.025405 -0.0625\nv 0.148438 0.0252256 -0.0625\nv 0.15625 0.0250189 -0.0625\nv 0.164062 0.0247939 -0.0625\nv 0.171875 0.0245988 -0.0625\nv 0.179688 0.0244595 -0.0625\nv 0.1875 0.0243749 -0.0625\nv 0.195312 0.0243152 -0.0625\nv 0.203125 0.024277 -0.0625\nv 0.210938 0.0242354 -0.0625\nv 0.21875 0.0242161 -0.0625\nv 0.226562 0.0241538 -0.0625\nv 0.234375 0.0242647 -0.0625\nv 0.242188 0.0244277 -0.0625\nv 0.25 0.0245793 -0.0625\nv 0.257812 0.0247983 -0.0625\nv 0.265625 0.0250269 -0.0625\nv 0.273438 0.0252416 -0.0625\nv 0.28125 0.0254283 -0.0625\nv 0.289062 0.0255866 -0.0625\nv 0.296875 0.0257221 -0.0625\nv 0.304688 0.0259002 -0.0625\nv 0.3125 0.0261423 -0.0625\nv 0.320312 0.0264752 -0.0625\nv 0.328125 0.0267689 -0.0625\nv 0.335938 0.0268293 -0.0625\nv 0.34375 0.0268782 -0.0625\nv 0.351562 0.026923 -0.0625\nv 0.359375 0.0269706 -0.0625\nv 0.367188 0.0269576 -0.0625\nv 0.375 0.0269456 -0.0625\nv 0.382812 0.0267181 -0.0625\nv 0.390625 0.026278 -0.0625\nv 0.398438 0.0257201 -0.0625\nv 0.40625 0.0252467 -0.0625\nv 0.417889 0.0234375 -0.0625\nv 0.414062 0.0242461 -0.0625\nv 0.499118 0.0234375 -0.0625\nv -0.30027 0.03125 -0.0625\nv 0.497075 0.03125 -0.0625\nv -0.299055 0.0390625 -0.0625\nv -0.296875 0.0457414 -0.0625\nv 0.494919 0.0390625 -0.0625\nv -0.296477 0.046875 -0.0625\nv 0.493122 0.046875 -0.0625\nv 0.492188 0.0501683 -0.0625\nv -0.293476 0.0546875 -0.0625\nv 0.490725 0.0546875 -0.0625\nv 0.484375 0.0592405 -0.0625\nv -0.291051 0.0625 -0.0625\nv -0.289062 0.0669887 -0.0625\nv 0.453125 0.0687353 -0.0625\nv 0.460938 0.0676041 -0.0625\nv 0.46875 0.0667479 -0.0625\nv 0.478148 0.0625 -0.0625\nv 0.476562 0.0633901 -0.0625\nv -0.28697 0.0703125 -0.0625\nv -0.28125 0.0747714 -0.0625\nv -0.234375 0.0780945 -0.0625\nv -0.226562 0.0758561 -0.0625\nv -0.21875 0.0744002 -0.0625\nv -0.210938 0.0734718 -0.0625\nv -0.203125 0.0737533 -0.0625\nv -0.195312 0.0740686 -0.0625\nv -0.1875 0.0744872 -0.0625\nv -0.179688 0.0746624 -0.0625\nv -0.171875 0.0749022 -0.0625\nv -0.164062 0.0750448 -0.0625\nv -0.15625 0.0751654 -0.0625\nv -0.148438 0.0751859 -0.0625\nv -0.140625 0.0750627 -0.0625\nv -0.132812 0.0751008 -0.0625\nv -0.125 0.0752725 -0.0625\nv -0.117188 0.0753201 -0.0625\nv -0.109375 0.0752432 -0.0625\nv -0.101562 0.0751241 -0.0625\nv -0.09375 0.0750731 -0.0625\nv -0.0859375 0.0750793 -0.0625\nv -0.078125 0.0749878 -0.0625\nv -0.0703125 0.0748765 -0.0625\nv -0.0625 0.0748032 -0.0625\nv -0.0546875 0.07466 -0.0625\nv -0.046875 0.0745092 -0.0625\nv -0.0390625 0.0742943 -0.0625\nv -0.03125 0.0741121 -0.0625\nv -0.0234375 0.0739275 -0.0625\nv -0.015625 0.0737875 -0.0625\nv -0.0078125 0.0737988 -0.0625\nv 0 0.0738284 -0.0625\nv 0.0078125 0.0738764 -0.0625\nv 0.015625 0.0738954 -0.0625\nv 0.0234375 0.0739675 -0.0625\nv 0.03125 0.0740262 -0.0625\nv 0.0390625 0.0740398 -0.0625\nv 0.046875 0.0740279 -0.0625\nv 0.0546875 0.0739914 -0.0625\nv 0.0625 0.0739463 -0.0625\nv 0.0703125 0.0737815 -0.0625\nv 0.078125 0.0737467 -0.0625\nv 0.0859375 0.0737529 -0.0625\nv 0.09375 0.0737647 -0.0625\nv 0.101562 0.0737673 -0.0625\nv 0.109375 0.0736977 -0.0625\nv 0.117188 0.0735583 -0.0625\nv 0.125 0.0734555 -0.0625\nv 0.132812 0.0733757 -0.0625\nv 0.140625 0.0732912 -0.0625\nv 0.148438 0.0731752 -0.0625\nv 0.15625 0.0730757 -0.0625\nv 0.164062 0.0729762 -0.0625\nv 0.171875 0.0729898 -0.0625\nv 0.179688 0.0729976 -0.0625\nv 0.1875 0.0730012 -0.0625\nv 0.195312 0.0729863 -0.0625\nv 0.203125 0.0729665 -0.0625\nv 0.210938 0.0729329 -0.0625\nv 0.21875 0.0728964 -0.0625\nv 0.226562 0.072858 -0.0625\nv 0.234375 0.072852 -0.0625\nv 0.242188 0.0728273 -0.0625\nv 0.25 0.0728778 -0.0625\nv 0.257812 0.0729696 -0.0625\nv 0.265625 0.0730682 -0.0625\nv 0.273438 0.073214 -0.0625\nv 0.28125 0.0733532 -0.0625\nv 0.289062 0.0734667 -0.0625\nv 0.296875 0.0735432 -0.0625\nv 0.304688 0.0736185 -0.0625\nv 0.3125 0.073675 -0.0625\nv 0.320312 0.0737014 -0.0625\nv 0.328125 0.0737901 -0.0625\nv 0.335938 0.0738587 -0.0625\nv 0.34375 0.0738616 -0.0625\nv 0.351562 0.0738096 -0.0625\nv 0.359375 0.0737452 -0.0625\nv 0.367188 0.0736145 -0.0625\nv 0.375 0.0733237 -0.0625\nv 0.382812 0.0728801 -0.0625\nv 0.390625 0.0725689 -0.0625\nv 0.398438 0.0723441 -0.0625\nv 0.40625 0.0722353 -0.0625\nv 0.414062 0.0721088 -0.0625\nv 0.421875 0.0719366 -0.0625\nv 0.429688 0.0717706 -0.0625\nv 0.4375 0.0713493 -0.0625\nv 0.446496 0.0703125 -0.0625\nv 0.445312 0.0705843 -0.0625\nv -0.275574 0.078125 -0.0625\nv -0.273438 0.0792876 -0.0625\nv -0.265625 0.0828038 -0.0625\nv -0.234459 0.078125 -0.0625\nv -0.242188 0.0817628 -0.0625\nv -0.260344 0.0859375 -0.0625\nv -0.257812 0.0875525 -0.0625\nv -0.248672 0.0859375 -0.0625\nv -0.25 0.0865695 -0.0625\nv -0.25 0.0859375 -0.0596057\nv -0.28125 0.16915 -0.0625\nv -0.273438 0.167119 -0.0625\nv -0.265625 0.167255 -0.0625\nv -0.257812 0.170852 -0.0625\nv -0.288824 0.171875 -0.0625\nv -0.289062 0.172043 -0.0625\nv -0.257078 0.171875 -0.0625\nv -0.257812 0.171875 -0.0561736\nv -0.295855 0.179688 -0.0625\nv -0.296875 0.182078 -0.0625\nv -0.252405 0.179688 -0.0625\nv -0.25 0.183715 -0.0625\nv -0.298395 0.1875 -0.0625\nv -0.247871 0.1875 -0.0625\nv -0.299022 0.195312 -0.0625\nv -0.244805 0.195312 -0.0625\nv -0.299336 0.203125 -0.0625\nv -0.243131 0.203125 -0.0625\nv -0.29948 0.210938 -0.0625\nv -0.242624 0.210938 -0.0625\nv -0.242188 0.216624 -0.0625\nv -0.299415 0.21875 -0.0625\nv -0.242006 0.21875 -0.0625\nv -0.242188 0.21875 -0.0568481\nv -0.299421 0.226562 -0.0625\nv -0.241934 0.226562 -0.0625\nv -0.299565 0.234375 -0.0625\nv -0.242178 0.234375 -0.0625\nv -0.242188 0.234572 -0.0625\nv -0.242188 0.234375 -0.0619162\nv -0.299678 0.242188 -0.0625\nv -0.242546 0.242188 -0.0625\nv -0.299586 0.25 -0.0625\nv -0.242782 0.25 -0.0625\nv -0.299424 0.257812 -0.0625\nv -0.243356 0.257812 -0.0625\nv -0.298998 0.265625 -0.0625\nv -0.24409 0.265625 -0.0625\nv -0.298413 0.273438 -0.0625\nv -0.244883 0.273438 -0.0625\nv -0.297135 0.28125 -0.0625\nv -0.296875 0.282506 -0.0625\nv -0.296875 0.28125 -0.0594567\nv -0.246019 0.28125 -0.0625\nv -0.295436 0.289062 -0.0625\nv -0.247782 0.289062 -0.0625\nv -0.25 0.29624 -0.0625\nv -0.294237 0.296875 -0.0625\nv -0.250237 0.296875 -0.0625\nv -0.293297 0.304688 -0.0625\nv -0.2532 0.304688 -0.0625\nv -0.292568 0.3125 -0.0625\nv -0.254535 0.3125 -0.0625\nv -0.292564 0.320312 -0.0625\nv -0.255929 0.320312 -0.0625\nv -0.293061 0.328125 -0.0625\nv -0.257165 0.328125 -0.0625\nv -0.257812 0.334983 -0.0625\nv -0.293606 0.335938 -0.0625\nv -0.257901 0.335938 -0.0625\nv -0.293876 0.34375 -0.0625\nv -0.257835 0.34375 -0.0625\nv -0.29428 0.351562 -0.0625\nv -0.258102 0.351562 -0.0625\nv -0.294568 0.359375 -0.0625\nv -0.258309 0.359375 -0.0625\nv -0.294802 0.367188 -0.0625\nv -0.258399 0.367188 -0.0625\nv -0.294828 0.375 -0.0625\nv -0.258514 0.375 -0.0625\nv -0.294749 0.382812 -0.0625\nv -0.258803 0.382812 -0.0625\nv -0.294623 0.390625 -0.0625\nv -0.259193 0.390625 -0.0625\nv -0.294415 0.398438 -0.0625\nv -0.259585 0.398438 -0.0625\nv -0.29453 0.40625 -0.0625\nv -0.259859 0.40625 -0.0625\nv -0.294827 0.414062 -0.0625\nv -0.260009 0.414062 -0.0625\nv -0.29519 0.421875 -0.0625\nv -0.260259 0.421875 -0.0625\nv -0.295408 0.429688 -0.0625\nv -0.260656 0.429688 -0.0625\nv -0.295956 0.4375 -0.0625\nv -0.261099 0.4375 -0.0625\nv -0.296586 0.445312 -0.0625\nv -0.296875 0.447843 -0.0625\nv -0.296875 0.445312 -0.0596251\nv -0.261527 0.445312 -0.0625\nv -0.297419 0.453125 -0.0625\nv -0.261827 0.453125 -0.0625\nv -0.297709 0.460938 -0.0625\nv -0.262098 0.460938 -0.0625\nv -0.298028 0.46875 -0.0625\nv -0.262451 0.46875 -0.0625\nv -0.298248 0.476562 -0.0625\nv -0.262754 0.476562 -0.0625\nv -0.298486 0.484375 -0.0625\nv -0.263109 0.484375 -0.0625\nv -0.298785 0.492188 -0.0625\nv -0.263466 0.492188 -0.0625\nv -0.299384 0.5 -0.0625\nv -0.263876 0.5 -0.0625\nv -0.300002 0.507812 -0.0625\nv -0.2642 0.507812 -0.0625\nv -0.300571 0.515625 -0.0625\nv -0.264464 0.515625 -0.0625\nv -0.301298 0.523438 -0.0625\nv -0.264812 0.523438 -0.0625\nv -0.302217 0.53125 -0.0625\nv -0.265176 0.53125 -0.0625\nv -0.303226 0.539062 -0.0625\nv -0.265549 0.539062 -0.0625\nv -0.265625 0.540395 -0.0625\nv -0.265625 0.539062 -0.0572458\nv -0.304161 0.546875 -0.0625\nv -0.304688 0.553036 -0.0625\nv -0.266126 0.546875 -0.0625\nv -0.304812 0.554688 -0.0625\nv -0.304688 0.554688 -0.0556028\nv -0.266758 0.554688 -0.0625\nv -0.305368 0.5625 -0.0625\nv -0.267597 0.5625 -0.0625\nv -0.305787 0.570312 -0.0625\nv -0.268473 0.570312 -0.0625\nv -0.305894 0.578125 -0.0625\nv -0.269551 0.578125 -0.0625\nv -0.305867 0.585938 -0.0625\nv -0.270738 0.585938 -0.0625\nv -0.305867 0.59375 -0.0625\nv -0.27199 0.59375 -0.0625\nv -0.273438 0.597841 -0.0625\nv -0.305531 0.601562 -0.0625\nv -0.304688 0.601562 -0.0592827\nv -0.274772 0.601562 -0.0625\nv -0.30511 0.609375 -0.0625\nv -0.304688 0.615207 -0.0625\nv -0.304688 0.609375 -0.0613046\nv -0.278201 0.609375 -0.0625\nv -0.28125 0.616078 -0.0625\nv -0.304487 0.617188 -0.0625\nv -0.304688 0.617925 -0.0625\nv -0.2818 0.617188 -0.0625\nv -0.306223 0.625 -0.0625\nv -0.304688 0.625 -0.0595598\nv -0.284406 0.625 -0.0625\nv -0.30898 0.632812 -0.0625\nv -0.304688 0.632812 -0.0552723\nv -0.284656 0.632812 -0.0625\nv -0.311179 0.640625 -0.0625\nv -0.3125 0.648364 -0.0625\nv -0.285595 0.640625 -0.0625\nv -0.289062 0.640625 -0.0555316\nv -0.312512 0.648438 -0.0625\nv -0.3125 0.648438 -0.0624681\nv -0.285916 0.648438 -0.0625\nv -0.289062 0.648438 -0.0555555\nv -0.313919 0.65625 -0.0625\nv -0.3125 0.65625 -0.0584247\nv -0.285827 0.65625 -0.0625\nv -0.289062 0.65625 -0.0549137\nv -0.315369 0.664062 -0.0625\nv -0.285588 0.664062 -0.0625\nv -0.31609 0.671875 -0.0625\nv -0.284913 0.671875 -0.0625\nv -0.316866 0.679688 -0.0625\nv -0.28399 0.679688 -0.0625\nv -0.3176 0.6875 -0.0625\nv -0.282373 0.6875 -0.0625\nv -0.28125 0.695066 -0.0625\nv -0.318313 0.695312 -0.0625\nv -0.281214 0.695312 -0.0625\nv -0.28125 0.695312 -0.0623081\nv -0.319211 0.703125 -0.0625\nv -0.320312 0.710039 -0.0625\nv -0.280713 0.703125 -0.0625\nv -0.28125 0.703125 -0.0579817\nv -0.32045 0.710938 -0.0625\nv -0.320312 0.710938 -0.0608802\nv -0.280576 0.710938 -0.0625\nv -0.321605 0.71875 -0.0625\nv -0.280789 0.71875 -0.0625\nv -0.28125 0.726404 -0.0625\nv -0.28125 0.71875 -0.0556665\nv -0.322787 0.726562 -0.0625\nv -0.28126 0.726562 -0.0625\nv -0.323758 0.734375 -0.0625\nv -0.281297 0.734375 -0.0625\nv -0.32491 0.742188 -0.0625\nv -0.282174 0.742188 -0.0625\nv -0.325949 0.75 -0.0625\nv -0.283268 0.75 -0.0625\nv -0.326796 0.757812 -0.0625\nv -0.284295 0.757812 -0.0625\nv -0.328095 0.765625 -0.0625\nv -0.328125 0.765773 -0.0625\nv -0.285395 0.765625 -0.0625\nv -0.329589 0.773438 -0.0625\nv -0.2867 0.773438 -0.0625\nv -0.330711 0.78125 -0.0625\nv -0.288493 0.78125 -0.0625\nv -0.289062 0.783404 -0.0625\nv -0.331425 0.789062 -0.0625\nv -0.291433 0.789062 -0.0625\nv -0.331828 0.796875 -0.0625\nv -0.294424 0.796875 -0.0625\nv -0.296875 0.801729 -0.0625\nv -0.331973 0.804688 -0.0625\nv -0.29902 0.804688 -0.0625\nv -0.304688 0.812061 -0.0625\nv -0.331622 0.8125 -0.0625\nv -0.328125 0.819761 -0.0625\nv -0.304988 0.8125 -0.0625\nv -0.304688 0.8125 -0.0599033\nv -0.327506 0.820312 -0.0625\nv -0.328125 0.820312 -0.0609554\nv -0.320312 0.824138 -0.0625\nv -0.311261 0.820312 -0.0625\nv -0.3125 0.821221 -0.0625\nv 0.0703125 -0.539325 -0.0546875\nv 0.078125 -0.539864 -0.0546875\nv 0.0859375 -0.539986 -0.0546875\nv 0.09375 -0.540132 -0.0546875\nv 0.0234375 -0.531645 -0.0546875\nv 0.03125 -0.532985 -0.0546875\nv 0.0390625 -0.534563 -0.0546875\nv 0.046875 -0.536047 -0.0546875\nv 0.0546875 -0.537562 -0.0546875\nv 0.0663232 -0.539062 -0.0546875\nv 0.0625 -0.538668 -0.0546875\nv 0.0703125 -0.539062 -0.0511344\nv 0.0979296 -0.539062 -0.0546875\nv 0.101562 -0.537832 -0.0546875\nv 0.109375 -0.534362 -0.0546875\nv 0 -0.526283 -0.0546875\nv 0.0078125 -0.528091 -0.0546875\nv 0.0216708 -0.53125 -0.0546875\nv 0.015625 -0.529688 -0.0546875\nv 0.0234375 -0.53125 -0.0529381\nv 0.03125 -0.53125 -0.0474181\nv 0.114026 -0.53125 -0.0546875\nv 0.117188 -0.529009 -0.0546875\nv -0.00638776 -0.523438 -0.0546875\nv -0.0078125 -0.518832 -0.0546875\nv 0.122699 -0.523438 -0.0546875\nv 0.125 -0.520776 -0.0546875\nv -0.00855328 -0.515625 -0.0546875\nv -0.0078125 -0.513859 -0.0546875\nv -0.0078125 -0.515625 -0.050869\nv 0.128395 -0.515625 -0.0546875\nv -0.0049915 -0.507812 -0.0546875\nv 0 -0.505174 -0.0546875\nv 0.0078125 -0.501532 -0.0546875\nv 0.131972 -0.507812 -0.0546875\nv 0.132812 -0.500076 -0.0546875\nv 0.0110979 -0.5 -0.0546875\nv 0.015625 -0.498104 -0.0546875\nv 0.0234375 -0.494309 -0.0546875\nv 0.13282 -0.5 -0.0546875\nv 0.132812 -0.5 -0.0546443\nv 0.0280172 -0.492188 -0.0546875\nv 0.03125 -0.490901 -0.0546875\nv 0.0390625 -0.488738 -0.0546875\nv 0.046875 -0.487042 -0.0546875\nv 0.0546875 -0.485209 -0.0546875\nv 0.133228 -0.492188 -0.0546875\nv 0.132812 -0.49142 -0.0546875\nv 0.132812 -0.492188 -0.0471676\nv 0.0591534 -0.484375 -0.0546875\nv 0.0625 -0.48391 -0.0546875\nv 0.0703125 -0.482537 -0.0546875\nv 0.078125 -0.479629 -0.0546875\nv 0.0859375 -0.476974 -0.0546875\nv 0.117188 -0.478736 -0.0546875\nv 0.125826 -0.484375 -0.0546875\nv 0.125 -0.483673 -0.0546875\nv 0.0869948 -0.476562 -0.0546875\nv 0.0859375 -0.476562 -0.0534261\nv 0.09375 -0.473957 -0.0546875\nv 0.101562 -0.474403 -0.0546875\nv 0.11152 -0.476562 -0.0546875\nv 0.109375 -0.475864 -0.0546875\nv 0.117188 -0.476562 -0.049316\nv -0.289062 -0.0644534 -0.0546875\nv -0.28125 -0.0661439 -0.0546875\nv -0.273438 -0.0645194 -0.0546875\nv 0.453125 -0.0674386 -0.0546875\nv 0.460938 -0.0685086 -0.0546875\nv 0.46875 -0.0661757 -0.0546875\nv 0.476562 -0.065828 -0.0546875\nv 0.484375 -0.064031 -0.0546875\nv -0.291232 -0.0625 -0.0546875\nv -0.271319 -0.0625 -0.0546875\nv 0.44768 -0.0625 -0.0546875\nv 0.487313 -0.0625 -0.0546875\nv -0.294886 -0.0546875 -0.0546875\nv -0.296875 -0.0494926 -0.0546875\nv -0.266898 -0.0546875 -0.0546875\nv -0.265625 -0.0514221 -0.0546875\nv 0.445449 -0.0546875 -0.0546875\nv 0.445312 -0.0541821 -0.0546875\nv 0.445312 -0.0546875 -0.0520147\nv 0.491572 -0.0546875 -0.0546875\nv 0.492188 -0.0525475 -0.0546875\nv 0.492188 -0.0546875 -0.0485113\nv -0.297604 -0.046875 -0.0546875\nv -0.264042 -0.046875 -0.0546875\nv 0.443624 -0.046875 -0.0546875\nv 0.493476 -0.046875 -0.0546875\nv -0.298986 -0.0390625 -0.0546875\nv -0.262304 -0.0390625 -0.0546875\nv 0.443835 -0.0390625 -0.0546875\nv 0.495189 -0.0390625 -0.0546875\nv -0.299482 -0.03125 -0.0546875\nv -0.261301 -0.03125 -0.0546875\nv 0.443976 -0.03125 -0.0546875\nv 0.497225 -0.03125 -0.0546875\nv -0.299879 -0.0234375 -0.0546875\nv -0.260798 -0.0234375 -0.0546875\nv 0.443573 -0.0234375 -0.0546875\nv 0.499714 -0.0234375 -0.0546875\nv 0.5 -0.0204594 -0.0546875\nv 0.5 -0.0234375 -0.0521105\nv -0.301283 -0.015625 -0.0546875\nv -0.259565 -0.015625 -0.0546875\nv 0.442874 -0.015625 -0.0546875\nv 0.500306 -0.015625 -0.0546875\nv 0.5 -0.0111259 -0.0546875\nv -0.302821 -0.0078125 -0.0546875\nv -0.259339 -0.0078125 -0.0546875\nv 0.440827 -0.0078125 -0.0546875\nv 0.499742 -0.0078125 -0.0546875\nv 0.5 -0.0078125 -0.0510026\nv -0.304107 0 -0.0546875\nv -0.259599 0 -0.0546875\nv 0.439419 0 -0.0546875\nv 0.499333 0 -0.0546875\nv -0.304105 0.0078125 -0.0546875\nv -0.25815 0.0078125 -0.0546875\nv -0.257812 0.00836132 -0.0546875\nv 0.439249 0.0078125 -0.0546875\nv 0.499181 0.0078125 -0.0546875\nv -0.302729 0.015625 -0.0546875\nv -0.251518 0.015625 -0.0546875\nv -0.25 0.016698 -0.0546875\nv -0.242188 0.0178506 -0.0546875\nv -0.234375 0.0197069 -0.0546875\nv -0.226562 0.0225922 -0.0546875\nv 0.421875 0.0220942 -0.0546875\nv 0.429688 0.0211528 -0.0546875\nv 0.437687 0.015625 -0.0546875\nv 0.4375 0.0158221 -0.0546875\nv 0.499193 0.015625 -0.0546875\nv -0.301461 0.0234375 -0.0546875\nv -0.224066 0.0234375 -0.0546875\nv -0.21875 0.0249673 -0.0546875\nv -0.210938 0.0260065 -0.0546875\nv -0.203125 0.0262979 -0.0546875\nv -0.195312 0.0264064 -0.0546875\nv -0.1875 0.0266024 -0.0546875\nv -0.179688 0.0266951 -0.0546875\nv -0.171875 0.0270546 -0.0546875\nv -0.164062 0.0271203 -0.0546875\nv -0.15625 0.0271985 -0.0546875\nv -0.148438 0.0273166 -0.0546875\nv -0.140625 0.0272343 -0.0546875\nv -0.132812 0.02723 -0.0546875\nv -0.125 0.0274931 -0.0546875\nv -0.117188 0.0274533 -0.0546875\nv -0.109375 0.0270885 -0.0546875\nv -0.101562 0.0267937 -0.0546875\nv -0.09375 0.0265658 -0.0546875\nv -0.0859375 0.0263426 -0.0546875\nv -0.078125 0.0261438 -0.0546875\nv -0.0703125 0.0259677 -0.0546875\nv -0.0625 0.0257469 -0.0546875\nv -0.0546875 0.0254973 -0.0546875\nv -0.046875 0.025406 -0.0546875\nv -0.0390625 0.0253638 -0.0546875\nv -0.03125 0.0253493 -0.0546875\nv -0.0234375 0.0253484 -0.0546875\nv -0.015625 0.0254147 -0.0546875\nv -0.0078125 0.0255374 -0.0546875\nv 0 0.025619 -0.0546875\nv 0.0078125 0.0256965 -0.0546875\nv 0.015625 0.0258188 -0.0546875\nv 0.0234375 0.0259376 -0.0546875\nv 0.03125 0.0260238 -0.0546875\nv 0.0390625 0.0260752 -0.0546875\nv 0.046875 0.0260451 -0.0546875\nv 0.0546875 0.0259346 -0.0546875\nv 0.0625 0.0257962 -0.0546875\nv 0.0703125 0.0256956 -0.0546875\nv 0.078125 0.0256688 -0.0546875\nv 0.0859375 0.0256927 -0.0546875\nv 0.09375 0.025787 -0.0546875\nv 0.101562 0.0258237 -0.0546875\nv 0.109375 0.0257982 -0.0546875\nv 0.117188 0.025708 -0.0546875\nv 0.125 0.0255927 -0.0546875\nv 0.132812 0.0254425 -0.0546875\nv 0.140625 0.0253269 -0.0546875\nv 0.148438 0.0251706 -0.0546875\nv 0.15625 0.0249638 -0.0546875\nv 0.164062 0.0247468 -0.0546875\nv 0.171875 0.0245661 -0.0546875\nv 0.179688 0.0244401 -0.0546875\nv 0.1875 0.0243952 -0.0546875\nv 0.195312 0.0243097 -0.0546875\nv 0.203125 0.0242725 -0.0546875\nv 0.210938 0.0242448 -0.0546875\nv 0.21875 0.0242376 -0.0546875\nv 0.226562 0.0241782 -0.0546875\nv 0.234375 0.0242787 -0.0546875\nv 0.242188 0.0244329 -0.0546875\nv 0.25 0.0245969 -0.0546875\nv 0.257812 0.0248248 -0.0546875\nv 0.265625 0.0250576 -0.0546875\nv 0.273438 0.0252892 -0.0546875\nv 0.28125 0.0254828 -0.0546875\nv 0.289062 0.0256463 -0.0546875\nv 0.296875 0.0257699 -0.0546875\nv 0.304688 0.0259398 -0.0546875\nv 0.3125 0.0261895 -0.0546875\nv 0.320312 0.0265289 -0.0546875\nv 0.328125 0.0268117 -0.0546875\nv 0.335938 0.0268743 -0.0546875\nv 0.34375 0.0269212 -0.0546875\nv 0.351562 0.0269457 -0.0546875\nv 0.359375 0.0269819 -0.0546875\nv 0.367188 0.0269716 -0.0546875\nv 0.375 0.0269537 -0.0546875\nv 0.382812 0.0267186 -0.0546875\nv 0.390625 0.0262536 -0.0546875\nv 0.398438 0.0256766 -0.0546875\nv 0.40625 0.0252013 -0.0546875\nv 0.417054 0.0234375 -0.0546875\nv 0.414062 0.024081 -0.0546875\nv 0.499192 0.0234375 -0.0546875\nv -0.300169 0.03125 -0.0546875\nv 0.497202 0.03125 -0.0546875\nv -0.298847 0.0390625 -0.0546875\nv -0.296875 0.0452093 -0.0546875\nv 0.495097 0.0390625 -0.0546875\nv -0.296307 0.046875 -0.0546875\nv 0.493366 0.046875 -0.0546875\nv 0.492188 0.0509519 -0.0546875\nv -0.293129 0.0546875 -0.0546875\nv 0.490948 0.0546875 -0.0546875\nv 0.484375 0.0593943 -0.0546875\nv -0.290554 0.0625 -0.0546875\nv -0.289062 0.0654895 -0.0546875\nv 0.453125 0.0687997 -0.0546875\nv 0.460938 0.0676923 -0.0546875\nv 0.46875 0.0668646 -0.0546875\nv 0.478359 0.0625 -0.0546875\nv 0.476562 0.0634874 -0.0546875\nv -0.285475 0.0703125 -0.0546875\nv -0.28125 0.0735497 -0.0546875\nv -0.234375 0.0776108 -0.0546875\nv -0.226562 0.0753681 -0.0546875\nv -0.21875 0.0739774 -0.0546875\nv -0.210938 0.0731557 -0.0546875\nv -0.203125 0.0735095 -0.0546875\nv -0.195312 0.0739469 -0.0546875\nv -0.1875 0.0744453 -0.0546875\nv -0.179688 0.0746924 -0.0546875\nv -0.171875 0.0749706 -0.0546875\nv -0.164062 0.0751336 -0.0546875\nv -0.15625 0.0752241 -0.0546875\nv -0.148438 0.0752406 -0.0546875\nv -0.140625 0.0751048 -0.0546875\nv -0.132812 0.0751316 -0.0546875\nv -0.125 0.0752934 -0.0546875\nv -0.117188 0.0753197 -0.0546875\nv -0.109375 0.0752535 -0.0546875\nv -0.101562 0.0751609 -0.0546875\nv -0.09375 0.0751353 -0.0546875\nv -0.0859375 0.0751374 -0.0546875\nv -0.078125 0.0750382 -0.0546875\nv -0.0703125 0.0749397 -0.0546875\nv -0.0625 0.0748548 -0.0546875\nv -0.0546875 0.0747325 -0.0546875\nv -0.046875 0.0746345 -0.0546875\nv -0.0390625 0.0744689 -0.0546875\nv -0.03125 0.0741699 -0.0546875\nv -0.0234375 0.0739153 -0.0546875\nv -0.015625 0.0737928 -0.0546875\nv -0.0078125 0.0737463 -0.0546875\nv 0 0.0737633 -0.0546875\nv 0.0078125 0.0738124 -0.0546875\nv 0.015625 0.0738471 -0.0546875\nv 0.0234375 0.0738984 -0.0546875\nv 0.03125 0.073922 -0.0546875\nv 0.0390625 0.0739236 -0.0546875\nv 0.046875 0.0739515 -0.0546875\nv 0.0546875 0.0739662 -0.0546875\nv 0.0625 0.0739329 -0.0546875\nv 0.0703125 0.073815 -0.0546875\nv 0.078125 0.0738172 -0.0546875\nv 0.0859375 0.0737884 -0.0546875\nv 0.09375 0.0737768 -0.0546875\nv 0.101562 0.0737607 -0.0546875\nv 0.109375 0.0736889 -0.0546875\nv 0.117188 0.0735453 -0.0546875\nv 0.125 0.0734153 -0.0546875\nv 0.132812 0.0733318 -0.0546875\nv 0.140625 0.0732439 -0.0546875\nv 0.148438 0.0731396 -0.0546875\nv 0.15625 0.0730766 -0.0546875\nv 0.164062 0.0730143 -0.0546875\nv 0.171875 0.072978 -0.0546875\nv 0.179688 0.0730195 -0.0546875\nv 0.1875 0.0730164 -0.0546875\nv 0.195312 0.0729981 -0.0546875\nv 0.203125 0.0729666 -0.0546875\nv 0.210938 0.0729188 -0.0546875\nv 0.21875 0.0728612 -0.0546875\nv 0.226562 0.0728207 -0.0546875\nv 0.234375 0.0727994 -0.0546875\nv 0.242188 0.0728072 -0.0546875\nv 0.25 0.0728719 -0.0546875\nv 0.257812 0.0729476 -0.0546875\nv 0.265625 0.0730575 -0.0546875\nv 0.273438 0.0732137 -0.0546875\nv 0.28125 0.0733679 -0.0546875\nv 0.289062 0.0734672 -0.0546875\nv 0.296875 0.0735434 -0.0546875\nv 0.304688 0.073642 -0.0546875\nv 0.3125 0.0737134 -0.0546875\nv 0.320312 0.0737314 -0.0546875\nv 0.328125 0.0737787 -0.0546875\nv 0.335938 0.073819 -0.0546875\nv 0.34375 0.0738524 -0.0546875\nv 0.351562 0.0738325 -0.0546875\nv 0.359375 0.0737821 -0.0546875\nv 0.367188 0.0736519 -0.0546875\nv 0.375 0.0733207 -0.0546875\nv 0.382812 0.0728687 -0.0546875\nv 0.390625 0.0725651 -0.0546875\nv 0.398438 0.0723338 -0.0546875\nv 0.40625 0.0722348 -0.0546875\nv 0.414062 0.0720679 -0.0546875\nv 0.421875 0.0718916 -0.0546875\nv 0.429688 0.0717352 -0.0546875\nv 0.4375 0.0713162 -0.0546875\nv 0.446604 0.0703125 -0.0546875\nv 0.445312 0.0706024 -0.0546875\nv -0.273937 0.078125 -0.0546875\nv -0.273438 0.0783907 -0.0546875\nv -0.273438 0.078125 -0.05259\nv -0.265625 0.081531 -0.0546875\nv -0.25 0.0845423 -0.0546875\nv -0.235743 0.078125 -0.0546875\nv -0.242188 0.0807473 -0.0546875\nv -0.257861 0.0859375 -0.0546875\nv -0.257573 0.0859375 -0.0546875\nv -0.257812 0.0859692 -0.0546875\nv -0.257812 0.0859375 -0.0545012\nv -0.28125 0.170009 -0.0546875\nv -0.273438 0.168043 -0.0546875\nv -0.265625 0.167886 -0.0546875\nv -0.28623 0.171875 -0.0546875\nv -0.289062 0.173791 -0.0546875\nv -0.258249 0.171875 -0.0546875\nv -0.257812 0.172144 -0.0546875\nv -0.295247 0.179688 -0.0546875\nv -0.296875 0.183156 -0.0546875\nv -0.253594 0.179688 -0.0546875\nv -0.25 0.185453 -0.0546875\nv -0.29808 0.1875 -0.0546875\nv -0.248881 0.1875 -0.0546875\nv -0.298711 0.195312 -0.0546875\nv -0.245651 0.195312 -0.0546875\nv -0.299076 0.203125 -0.0546875\nv -0.243457 0.203125 -0.0546875\nv -0.299211 0.210938 -0.0546875\nv -0.242887 0.210938 -0.0546875\nv -0.299152 0.21875 -0.0546875\nv -0.242254 0.21875 -0.0546875\nv -0.242188 0.223078 -0.0546875\nv -0.29918 0.226562 -0.0546875\nv -0.242127 0.226562 -0.0546875\nv -0.242188 0.229258 -0.0546875\nv -0.242188 0.226562 -0.0524996\nv -0.299497 0.234375 -0.0546875\nv -0.242301 0.234375 -0.0546875\nv -0.299615 0.242188 -0.0546875\nv -0.242517 0.242188 -0.0546875\nv -0.299473 0.25 -0.0546875\nv -0.242786 0.25 -0.0546875\nv -0.299298 0.257812 -0.0546875\nv -0.24343 0.257812 -0.0546875\nv -0.298813 0.265625 -0.0546875\nv -0.244197 0.265625 -0.0546875\nv -0.298109 0.273438 -0.0546875\nv -0.296875 0.279363 -0.0546875\nv -0.244939 0.273438 -0.0546875\nv -0.296449 0.28125 -0.0546875\nv -0.246042 0.28125 -0.0546875\nv -0.294647 0.289062 -0.0546875\nv -0.247894 0.289062 -0.0546875\nv -0.25 0.295721 -0.0546875\nv -0.293457 0.296875 -0.0546875\nv -0.250437 0.296875 -0.0546875\nv -0.292531 0.304688 -0.0546875\nv -0.253137 0.304688 -0.0546875\nv -0.29194 0.3125 -0.0546875\nv -0.254672 0.3125 -0.0546875\nv -0.292128 0.320312 -0.0546875\nv -0.256339 0.320312 -0.0546875\nv -0.292627 0.328125 -0.0546875\nv -0.257688 0.328125 -0.0546875\nv -0.257812 0.329127 -0.0546875\nv -0.257812 0.328125 -0.0529805\nv -0.293031 0.335938 -0.0546875\nv -0.25865 0.335938 -0.0546875\nv -0.293346 0.34375 -0.0546875\nv -0.259074 0.34375 -0.0546875\nv -0.293694 0.351562 -0.0546875\nv -0.259657 0.351562 -0.0546875\nv -0.294114 0.359375 -0.0546875\nv -0.259947 0.359375 -0.0546875\nv -0.294466 0.367188 -0.0546875\nv -0.260001 0.367188 -0.0546875\nv -0.294687 0.375 -0.0546875\nv -0.260097 0.375 -0.0546875\nv -0.294828 0.382812 -0.0546875\nv -0.260342 0.382812 -0.0546875\nv -0.294941 0.390625 -0.0546875\nv -0.260616 0.390625 -0.0546875\nv -0.294905 0.398438 -0.0546875\nv -0.260946 0.398438 -0.0546875\nv -0.295179 0.40625 -0.0546875\nv -0.261123 0.40625 -0.0546875\nv -0.295588 0.414062 -0.0546875\nv -0.261135 0.414062 -0.0546875\nv -0.295967 0.421875 -0.0546875\nv -0.296875 0.421875 -0.0471045\nv -0.261168 0.421875 -0.0546875\nv -0.296137 0.429688 -0.0546875\nv -0.296875 0.429688 -0.0491204\nv -0.261259 0.429688 -0.0546875\nv -0.296714 0.4375 -0.0546875\nv -0.296875 0.439467 -0.0546875\nv -0.296875 0.4375 -0.0533996\nv -0.261428 0.4375 -0.0546875\nv -0.297336 0.445312 -0.0546875\nv -0.261642 0.445312 -0.0546875\nv -0.297866 0.453125 -0.0546875\nv -0.261861 0.453125 -0.0546875\nv -0.298137 0.460938 -0.0546875\nv -0.26211 0.460938 -0.0546875\nv -0.2984 0.46875 -0.0546875\nv -0.262441 0.46875 -0.0546875\nv -0.29863 0.476562 -0.0546875\nv -0.262765 0.476562 -0.0546875\nv -0.298907 0.484375 -0.0546875\nv -0.263078 0.484375 -0.0546875\nv -0.299206 0.492188 -0.0546875\nv -0.263395 0.492188 -0.0546875\nv -0.299739 0.5 -0.0546875\nv -0.263813 0.5 -0.0546875\nv -0.300422 0.507812 -0.0546875\nv -0.264166 0.507812 -0.0546875\nv -0.300886 0.515625 -0.0546875\nv -0.264411 0.515625 -0.0546875\nv -0.301473 0.523438 -0.0546875\nv -0.264771 0.523438 -0.0546875\nv -0.302281 0.53125 -0.0546875\nv -0.265163 0.53125 -0.0546875\nv -0.265625 0.538495 -0.0546875\nv -0.303202 0.539062 -0.0546875\nv -0.265677 0.539062 -0.0546875\nv -0.303982 0.546875 -0.0546875\nv -0.266544 0.546875 -0.0546875\nv -0.30467 0.554688 -0.0546875\nv -0.304688 0.554992 -0.0546875\nv -0.267355 0.554688 -0.0546875\nv -0.305097 0.5625 -0.0546875\nv -0.304688 0.5625 -0.049093\nv -0.268293 0.5625 -0.0546875\nv -0.305354 0.570312 -0.0546875\nv -0.304688 0.570312 -0.0479164\nv -0.269118 0.570312 -0.0546875\nv -0.305201 0.578125 -0.0546875\nv -0.304688 0.578125 -0.0478026\nv -0.270245 0.578125 -0.0546875\nv -0.30519 0.585938 -0.0546875\nv -0.304688 0.585938 -0.0472449\nv -0.271248 0.585938 -0.0546875\nv -0.304957 0.59375 -0.0546875\nv -0.304688 0.595223 -0.0546875\nv -0.304688 0.59375 -0.0535329\nv -0.272753 0.59375 -0.0546875\nv -0.273438 0.594956 -0.0546875\nv -0.273438 0.59375 -0.0521867\nv -0.303265 0.601562 -0.0546875\nv -0.276985 0.601562 -0.0546875\nv -0.301853 0.609375 -0.0546875\nv -0.280756 0.609375 -0.0546875\nv -0.28125 0.610531 -0.0546875\nv -0.28125 0.609375 -0.0529642\nv -0.298924 0.617188 -0.0546875\nv -0.296875 0.617188 -0.0509445\nv -0.285175 0.617188 -0.0546875\nv -0.300316 0.625 -0.0546875\nv -0.296875 0.625 -0.0496458\nv -0.288079 0.625 -0.0546875\nv -0.289062 0.625 -0.0507629\nv -0.303959 0.632812 -0.0546875\nv -0.304688 0.63417 -0.0546875\nv -0.296875 0.632812 -0.0470362\nv -0.288674 0.632812 -0.0546875\nv -0.289062 0.635895 -0.0546875\nv -0.289062 0.632812 -0.0531273\nv -0.306693 0.640625 -0.0546875\nv -0.304688 0.640625 -0.0523689\nv -0.290048 0.640625 -0.0546875\nv -0.308749 0.648438 -0.0546875\nv -0.304688 0.648438 -0.0496516\nv -0.289822 0.648438 -0.0546875\nv -0.310875 0.65625 -0.0546875\nv -0.3125 0.660449 -0.0546875\nv -0.289221 0.65625 -0.0546875\nv -0.289062 0.658967 -0.0546875\nv -0.313658 0.664062 -0.0546875\nv -0.3125 0.664062 -0.0526281\nv -0.288879 0.664062 -0.0546875\nv -0.289062 0.664062 -0.0542592\nv -0.315039 0.671875 -0.0546875\nv -0.3125 0.671875 -0.0491384\nv -0.288306 0.671875 -0.0546875\nv -0.289062 0.671875 -0.0529184\nv -0.316114 0.679688 -0.0546875\nv -0.286925 0.679688 -0.0546875\nv -0.289062 0.679688 -0.0495571\nv -0.317063 0.6875 -0.0546875\nv -0.28496 0.6875 -0.0546875\nv -0.317835 0.695312 -0.0546875\nv -0.282689 0.695312 -0.0546875\nv -0.318664 0.703125 -0.0546875\nv -0.281648 0.703125 -0.0546875\nv -0.28125 0.710115 -0.0546875\nv -0.319763 0.710938 -0.0546875\nv -0.320312 0.713695 -0.0546875\nv -0.281206 0.710938 -0.0546875\nv -0.28125 0.714182 -0.0546875\nv -0.28125 0.710938 -0.054315\nv -0.321256 0.71875 -0.0546875\nv -0.281316 0.71875 -0.0546875\nv -0.322658 0.726562 -0.0546875\nv -0.281626 0.726562 -0.0546875\nv -0.323726 0.734375 -0.0546875\nv -0.281774 0.734375 -0.0546875\nv -0.324903 0.742188 -0.0546875\nv -0.282555 0.742188 -0.0546875\nv -0.325956 0.75 -0.0546875\nv -0.283363 0.75 -0.0546875\nv -0.326828 0.757812 -0.0546875\nv -0.284286 0.757812 -0.0546875\nv -0.328081 0.765625 -0.0546875\nv -0.328125 0.765837 -0.0546875\nv -0.285428 0.765625 -0.0546875\nv -0.329635 0.773438 -0.0546875\nv -0.286699 0.773438 -0.0546875\nv -0.330852 0.78125 -0.0546875\nv -0.288396 0.78125 -0.0546875\nv -0.289062 0.783947 -0.0546875\nv -0.331707 0.789062 -0.0546875\nv -0.291098 0.789062 -0.0546875\nv -0.332196 0.796875 -0.0546875\nv -0.294011 0.796875 -0.0546875\nv -0.296875 0.802615 -0.0546875\nv -0.332416 0.804688 -0.0546875\nv -0.298321 0.804688 -0.0546875\nv -0.332203 0.8125 -0.0546875\nv -0.304047 0.8125 -0.0546875\nv -0.304688 0.813433 -0.0546875\nv -0.329419 0.820312 -0.0546875\nv -0.328125 0.821767 -0.0546875\nv -0.320312 0.827075 -0.0546875\nv -0.309467 0.820312 -0.0546875\nv -0.3125 0.823283 -0.0546875\nv -0.320312 0.828125 -0.0509108\nv 0.078125 -0.539314 -0.046875\nv 0.0859375 -0.539744 -0.046875\nv 0.09375 -0.539576 -0.046875\nv 0.0390625 -0.53219 -0.046875\nv 0.046875 -0.533339 -0.046875\nv 0.0546875 -0.534799 -0.046875\nv 0.0625 -0.537275 -0.046875\nv 0.0745321 -0.539062 -0.046875\nv 0.0703125 -0.538625 -0.046875\nv 0.078125 -0.539062 -0.0397639\nv 0.0952741 -0.539062 -0.046875\nv 0.09375 -0.539062 -0.042083\nv 0.101562 -0.536347 -0.046875\nv 0.109375 -0.53236 -0.046875\nv 0 -0.524459 -0.046875\nv 0.0078125 -0.526133 -0.046875\nv 0.015625 -0.527493 -0.046875\nv 0.0234375 -0.529701 -0.046875\nv 0.0321593 -0.53125 -0.046875\nv 0.03125 -0.5311 -0.046875\nv 0.0390625 -0.53125 -0.04306\nv 0.110503 -0.53125 -0.046875\nv 0.109375 -0.53125 -0.0446021\nv 0.117188 -0.525311 -0.046875\nv -0.0028154 -0.523438 -0.046875\nv 0 -0.523438 -0.03974\nv 0.119464 -0.523438 -0.046875\nv 0.117188 -0.523438 -0.0401964\nv 0.125 -0.516358 -0.046875\nv -0.00672948 -0.515625 -0.046875\nv 0.125607 -0.515625 -0.046875\nv 0.125 -0.515625 -0.0443001\nv -0.00325853 -0.507812 -0.046875\nv 0 -0.506162 -0.046875\nv 0.0078125 -0.50255 -0.046875\nv 0.13038 -0.507812 -0.046875\nv 0.0130887 -0.5 -0.046875\nv 0.015625 -0.498927 -0.046875\nv 0.015625 -0.5 -0.041953\nv 0.0234375 -0.495302 -0.046875\nv 0.131481 -0.5 -0.046875\nv 0.0310104 -0.492188 -0.046875\nv 0.03125 -0.492087 -0.046875\nv 0.03125 -0.492188 -0.0465148\nv 0.0390625 -0.489561 -0.046875\nv 0.046875 -0.487913 -0.046875\nv 0.0546875 -0.485639 -0.046875\nv 0.132792 -0.492188 -0.046875\nv 0.0571611 -0.484375 -0.046875\nv 0.0546875 -0.484375 -0.0431351\nv 0.0625 -0.482677 -0.046875\nv 0.0703125 -0.479919 -0.046875\nv 0.078125 -0.477461 -0.046875\nv 0.128423 -0.484375 -0.046875\nv 0.125 -0.481306 -0.046875\nv 0.0805304 -0.476562 -0.046875\nv 0.078125 -0.476562 -0.0440684\nv 0.0859375 -0.474605 -0.046875\nv 0.09375 -0.470987 -0.046875\nv 0.101562 -0.471751 -0.046875\nv 0.109375 -0.473407 -0.046875\nv 0.11862 -0.476562 -0.046875\nv 0.117188 -0.475713 -0.046875\nv -0.289062 -0.0648551 -0.046875\nv -0.28125 -0.0664718 -0.046875\nv -0.273438 -0.0648392 -0.046875\nv 0.453125 -0.0669025 -0.046875\nv 0.460938 -0.0681228 -0.046875\nv 0.46875 -0.0661788 -0.046875\nv 0.476562 -0.0660298 -0.046875\nv 0.484375 -0.0642936 -0.046875\nv -0.291624 -0.0625 -0.046875\nv -0.271022 -0.0625 -0.046875\nv 0.447899 -0.0625 -0.046875\nv 0.445312 -0.0554703 -0.046875\nv 0.487901 -0.0625 -0.046875\nv 0.492188 -0.0550976 -0.046875\nv -0.29499 -0.0546875 -0.046875\nv -0.296875 -0.0494708 -0.046875\nv -0.266734 -0.0546875 -0.046875\nv -0.265625 -0.0516387 -0.046875\nv 0.445062 -0.0546875 -0.046875\nv 0.445312 -0.0546875 -0.0448535\nv 0.492313 -0.0546875 -0.046875\nv -0.297571 -0.046875 -0.046875\nv -0.264047 -0.046875 -0.046875\nv 0.443244 -0.046875 -0.046875\nv 0.494083 -0.046875 -0.046875\nv -0.298966 -0.0390625 -0.046875\nv -0.262396 -0.0390625 -0.046875\nv 0.443596 -0.0390625 -0.046875\nv 0.495853 -0.0390625 -0.046875\nv -0.299526 -0.03125 -0.046875\nv -0.26136 -0.03125 -0.046875\nv 0.443841 -0.03125 -0.046875\nv 0.498041 -0.03125 -0.046875\nv 0.5 -0.0252093 -0.046875\nv -0.299978 -0.0234375 -0.046875\nv -0.260846 -0.0234375 -0.046875\nv 0.443485 -0.0234375 -0.046875\nv 0.50044 -0.0234375 -0.046875\nv -0.301314 -0.015625 -0.046875\nv -0.259676 -0.015625 -0.046875\nv 0.442828 -0.015625 -0.046875\nv 0.50087 -0.015625 -0.046875\nv -0.302856 -0.0078125 -0.046875\nv -0.25945 -0.0078125 -0.046875\nv 0.440792 -0.0078125 -0.046875\nv 0.50026 -0.0078125 -0.046875\nv 0.5 -0.00490738 -0.046875\nv -0.303969 0 -0.046875\nv -0.259701 0 -0.046875\nv 0.439327 0 -0.046875\nv 0.499584 0 -0.046875\nv 0.5 0 -0.0407777\nv -0.303924 0.0078125 -0.046875\nv -0.258278 0.0078125 -0.046875\nv -0.257812 0.0086005 -0.046875\nv 0.439009 0.0078125 -0.046875\nv 0.499328 0.0078125 -0.046875\nv -0.302595 0.015625 -0.046875\nv -0.251838 0.015625 -0.046875\nv -0.25 0.0168889 -0.046875\nv -0.242188 0.0178757 -0.046875\nv -0.234375 0.0197627 -0.046875\nv -0.226562 0.0225792 -0.046875\nv 0.421875 0.0218624 -0.046875\nv 0.429688 0.0210673 -0.046875\nv 0.437528 0.015625 -0.046875\nv 0.4375 0.0156555 -0.046875\nv 0.4375 0.015625 -0.0446315\nv 0.49933 0.015625 -0.046875\nv -0.301377 0.0234375 -0.046875\nv -0.223924 0.0234375 -0.046875\nv -0.21875 0.0248938 -0.046875\nv -0.210938 0.0259502 -0.046875\nv -0.203125 0.0262474 -0.046875\nv -0.195312 0.0263462 -0.046875\nv -0.1875 0.0265484 -0.046875\nv -0.179688 0.0266616 -0.046875\nv -0.171875 0.0270612 -0.046875\nv -0.164062 0.0271682 -0.046875\nv -0.15625 0.0272506 -0.046875\nv -0.148438 0.0273174 -0.046875\nv -0.140625 0.0271996 -0.046875\nv -0.132812 0.0271875 -0.046875\nv -0.125 0.0274353 -0.046875\nv -0.117188 0.0273584 -0.046875\nv -0.109375 0.0270483 -0.046875\nv -0.101562 0.0267942 -0.046875\nv -0.09375 0.0265619 -0.046875\nv -0.0859375 0.0263346 -0.046875\nv -0.078125 0.0261147 -0.046875\nv -0.0703125 0.0259193 -0.046875\nv -0.0625 0.0257544 -0.046875\nv -0.0546875 0.0255532 -0.046875\nv -0.046875 0.0254273 -0.046875\nv -0.0390625 0.0254167 -0.046875\nv -0.03125 0.025374 -0.046875\nv -0.0234375 0.0253717 -0.046875\nv -0.015625 0.0253789 -0.046875\nv -0.0078125 0.0254698 -0.046875\nv 0 0.0255181 -0.046875\nv 0.0078125 0.0256293 -0.046875\nv 0.015625 0.0257536 -0.046875\nv 0.0234375 0.0258689 -0.046875\nv 0.03125 0.0259467 -0.046875\nv 0.0390625 0.0260023 -0.046875\nv 0.046875 0.0259689 -0.046875\nv 0.0546875 0.0258332 -0.046875\nv 0.0625 0.0256905 -0.046875\nv 0.0703125 0.0255469 -0.046875\nv 0.078125 0.0254933 -0.046875\nv 0.0859375 0.0255982 -0.046875\nv 0.09375 0.0256412 -0.046875\nv 0.101562 0.0256763 -0.046875\nv 0.109375 0.0256429 -0.046875\nv 0.117188 0.0255996 -0.046875\nv 0.125 0.0254962 -0.046875\nv 0.132812 0.0253562 -0.046875\nv 0.140625 0.0252432 -0.046875\nv 0.148438 0.0251196 -0.046875\nv 0.15625 0.0249333 -0.046875\nv 0.164062 0.0247397 -0.046875\nv 0.171875 0.0245435 -0.046875\nv 0.179688 0.0244432 -0.046875\nv 0.1875 0.0244259 -0.046875\nv 0.195312 0.024383 -0.046875\nv 0.203125 0.0242199 -0.046875\nv 0.210938 0.0242449 -0.046875\nv 0.21875 0.0242453 -0.046875\nv 0.226562 0.0241939 -0.046875\nv 0.234375 0.0242867 -0.046875\nv 0.242188 0.0244249 -0.046875\nv 0.25 0.0245918 -0.046875\nv 0.257812 0.0248305 -0.046875\nv 0.265625 0.0250556 -0.046875\nv 0.273438 0.0252823 -0.046875\nv 0.28125 0.0254707 -0.046875\nv 0.289062 0.0256531 -0.046875\nv 0.296875 0.0257845 -0.046875\nv 0.304688 0.0259792 -0.046875\nv 0.3125 0.0262305 -0.046875\nv 0.320312 0.0265636 -0.046875\nv 0.328125 0.0268448 -0.046875\nv 0.335938 0.026904 -0.046875\nv 0.34375 0.026951 -0.046875\nv 0.351562 0.0269828 -0.046875\nv 0.359375 0.0270094 -0.046875\nv 0.367188 0.026997 -0.046875\nv 0.375 0.0269759 -0.046875\nv 0.382812 0.0267487 -0.046875\nv 0.390625 0.0262619 -0.046875\nv 0.398438 0.0256536 -0.046875\nv 0.40625 0.025177 -0.046875\nv 0.416341 0.0234375 -0.046875\nv 0.414062 0.0239357 -0.046875\nv 0.499385 0.0234375 -0.046875\nv -0.300049 0.03125 -0.046875\nv 0.497514 0.03125 -0.046875\nv -0.298729 0.0390625 -0.046875\nv -0.296875 0.0447403 -0.046875\nv 0.495392 0.0390625 -0.046875\nv -0.296144 0.046875 -0.046875\nv 0.493635 0.046875 -0.046875\nv 0.492188 0.0517554 -0.046875\nv -0.292958 0.0546875 -0.046875\nv 0.491175 0.0546875 -0.046875\nv 0.484375 0.0595494 -0.046875\nv -0.289832 0.0625 -0.046875\nv -0.289062 0.0640357 -0.046875\nv 0.453125 0.0688461 -0.046875\nv 0.460938 0.0677861 -0.046875\nv 0.46875 0.0669698 -0.046875\nv 0.478553 0.0625 -0.046875\nv 0.476562 0.0635702 -0.046875\nv -0.284343 0.0703125 -0.046875\nv -0.28125 0.0725417 -0.046875\nv -0.273438 0.0771366 -0.046875\nv -0.234375 0.0773117 -0.046875\nv -0.226562 0.0750834 -0.046875\nv -0.21875 0.0737167 -0.046875\nv -0.210938 0.0729109 -0.046875\nv -0.203125 0.0733411 -0.046875\nv -0.195312 0.0738608 -0.046875\nv -0.1875 0.0743793 -0.046875\nv -0.179688 0.0746978 -0.046875\nv -0.171875 0.075054 -0.046875\nv -0.164062 0.0752708 -0.046875\nv -0.15625 0.0752805 -0.046875\nv -0.148438 0.0753053 -0.046875\nv -0.140625 0.075194 -0.046875\nv -0.132812 0.0752119 -0.046875\nv -0.125 0.0753487 -0.046875\nv -0.117188 0.0753614 -0.046875\nv -0.109375 0.0752948 -0.046875\nv -0.101562 0.0751904 -0.046875\nv -0.09375 0.0751827 -0.046875\nv -0.0859375 0.0751777 -0.046875\nv -0.078125 0.0750849 -0.046875\nv -0.0703125 0.0749923 -0.046875\nv -0.0625 0.0749024 -0.046875\nv -0.0546875 0.0747939 -0.046875\nv -0.046875 0.0746844 -0.046875\nv -0.0390625 0.0744974 -0.046875\nv -0.03125 0.074311 -0.046875\nv -0.0234375 0.0740431 -0.046875\nv -0.015625 0.0738139 -0.046875\nv -0.0078125 0.073733 -0.046875\nv 0 0.0736994 -0.046875\nv 0.0078125 0.0737204 -0.046875\nv 0.015625 0.0737802 -0.046875\nv 0.0234375 0.0737957 -0.046875\nv 0.03125 0.0737442 -0.046875\nv 0.0390625 0.0737715 -0.046875\nv 0.046875 0.0738381 -0.046875\nv 0.0546875 0.0738311 -0.046875\nv 0.0625 0.0737809 -0.046875\nv 0.0703125 0.0737784 -0.046875\nv 0.078125 0.0738077 -0.046875\nv 0.0859375 0.0738419 -0.046875\nv 0.09375 0.073824 -0.046875\nv 0.101562 0.0737443 -0.046875\nv 0.109375 0.0736323 -0.046875\nv 0.117188 0.0735267 -0.046875\nv 0.125 0.0734037 -0.046875\nv 0.132812 0.0732858 -0.046875\nv 0.140625 0.0731583 -0.046875\nv 0.148438 0.0730492 -0.046875\nv 0.15625 0.0730013 -0.046875\nv 0.164062 0.0729614 -0.046875\nv 0.171875 0.0729287 -0.046875\nv 0.179688 0.0729326 -0.046875\nv 0.1875 0.0729398 -0.046875\nv 0.195312 0.0729334 -0.046875\nv 0.203125 0.0728999 -0.046875\nv 0.210938 0.0728587 -0.046875\nv 0.21875 0.0728266 -0.046875\nv 0.226562 0.0728049 -0.046875\nv 0.234375 0.0727825 -0.046875\nv 0.242188 0.0728066 -0.046875\nv 0.25 0.0728747 -0.046875\nv 0.257812 0.0729734 -0.046875\nv 0.265625 0.0730759 -0.046875\nv 0.273438 0.0732224 -0.046875\nv 0.28125 0.0733725 -0.046875\nv 0.289062 0.0735006 -0.046875\nv 0.296875 0.0735784 -0.046875\nv 0.304688 0.0736606 -0.046875\nv 0.3125 0.073707 -0.046875\nv 0.320312 0.0737056 -0.046875\nv 0.328125 0.0737294 -0.046875\nv 0.335938 0.0737588 -0.046875\nv 0.34375 0.0737708 -0.046875\nv 0.351562 0.0737568 -0.046875\nv 0.359375 0.0737333 -0.046875\nv 0.367188 0.0736393 -0.046875\nv 0.375 0.0733044 -0.046875\nv 0.382812 0.0728232 -0.046875\nv 0.390625 0.0725258 -0.046875\nv 0.398438 0.0722979 -0.046875\nv 0.40625 0.0721777 -0.046875\nv 0.414062 0.0720091 -0.046875\nv 0.421875 0.0718319 -0.046875\nv 0.429688 0.0716789 -0.046875\nv 0.4375 0.0712604 -0.046875\nv 0.446479 0.0703125 -0.046875\nv 0.445312 0.0705608 -0.046875\nv -0.271793 0.078125 -0.046875\nv -0.265625 0.080635 -0.046875\nv -0.257812 0.084198 -0.046875\nv -0.25 0.0827984 -0.046875\nv -0.236564 0.078125 -0.046875\nv -0.242188 0.0802022 -0.046875\nv -0.28125 0.170817 -0.046875\nv -0.273438 0.168934 -0.046875\nv -0.265625 0.168495 -0.046875\nv -0.284093 0.171875 -0.046875\nv -0.289062 0.175157 -0.046875\nv -0.259752 0.171875 -0.046875\nv -0.257812 0.17319 -0.046875\nv -0.294484 0.179688 -0.046875\nv -0.296875 0.184428 -0.046875\nv -0.254398 0.179688 -0.046875\nv -0.25 0.186898 -0.046875\nv -0.297684 0.1875 -0.046875\nv -0.249679 0.1875 -0.046875\nv -0.25 0.1875 -0.0425483\nv -0.298464 0.195312 -0.046875\nv -0.246229 0.195312 -0.046875\nv -0.298813 0.203125 -0.046875\nv -0.243711 0.203125 -0.046875\nv -0.298984 0.210938 -0.046875\nv -0.243 0.210938 -0.046875\nv -0.298974 0.21875 -0.046875\nv -0.24238 0.21875 -0.046875\nv -0.299095 0.226562 -0.046875\nv -0.242334 0.226562 -0.046875\nv -0.299528 0.234375 -0.046875\nv -0.242442 0.234375 -0.046875\nv -0.299636 0.242188 -0.046875\nv -0.242623 0.242188 -0.046875\nv -0.299486 0.25 -0.046875\nv -0.242872 0.25 -0.046875\nv -0.299231 0.257812 -0.046875\nv -0.243484 0.257812 -0.046875\nv -0.298758 0.265625 -0.046875\nv -0.244288 0.265625 -0.046875\nv -0.297801 0.273438 -0.046875\nv -0.296875 0.277455 -0.046875\nv -0.24492 0.273438 -0.046875\nv -0.295952 0.28125 -0.046875\nv -0.24593 0.28125 -0.046875\nv -0.294149 0.289062 -0.046875\nv -0.248077 0.289062 -0.046875\nv -0.25 0.295042 -0.046875\nv -0.292973 0.296875 -0.046875\nv -0.250672 0.296875 -0.046875\nv -0.292004 0.304688 -0.046875\nv -0.253115 0.304688 -0.046875\nv -0.291542 0.3125 -0.046875\nv -0.254854 0.3125 -0.046875\nv -0.291759 0.320312 -0.046875\nv -0.25673 0.320312 -0.046875\nv -0.257812 0.325821 -0.046875\nv -0.29221 0.328125 -0.046875\nv -0.25829 0.328125 -0.046875\nv -0.292359 0.335938 -0.046875\nv -0.259573 0.335938 -0.046875\nv -0.292557 0.34375 -0.046875\nv -0.260664 0.34375 -0.046875\nv -0.293019 0.351562 -0.046875\nv -0.261377 0.351562 -0.046875\nv -0.29352 0.359375 -0.046875\nv -0.261689 0.359375 -0.046875\nv -0.294016 0.367188 -0.046875\nv -0.261703 0.367188 -0.046875\nv -0.294323 0.375 -0.046875\nv -0.261827 0.375 -0.046875\nv -0.294615 0.382812 -0.046875\nv -0.261896 0.382812 -0.046875\nv -0.294922 0.390625 -0.046875\nv -0.261896 0.390625 -0.046875\nv -0.295245 0.398438 -0.046875\nv -0.261934 0.398438 -0.046875\nv -0.295812 0.40625 -0.046875\nv -0.261975 0.40625 -0.046875\nv -0.296464 0.414062 -0.046875\nv -0.296875 0.421386 -0.046875\nv -0.261969 0.414062 -0.046875\nv -0.296901 0.421875 -0.046875\nv -0.26199 0.421875 -0.046875\nv -0.297156 0.429688 -0.046875\nv -0.262022 0.429688 -0.046875\nv -0.297627 0.4375 -0.046875\nv -0.262084 0.4375 -0.046875\nv -0.297942 0.445312 -0.046875\nv -0.262251 0.445312 -0.046875\nv -0.298201 0.453125 -0.046875\nv -0.262433 0.453125 -0.046875\nv -0.298418 0.460938 -0.046875\nv -0.262684 0.460938 -0.046875\nv -0.29864 0.46875 -0.046875\nv -0.262958 0.46875 -0.046875\nv -0.298874 0.476562 -0.046875\nv -0.263224 0.476562 -0.046875\nv -0.299114 0.484375 -0.046875\nv -0.263412 0.484375 -0.046875\nv -0.299347 0.492188 -0.046875\nv -0.263643 0.492188 -0.046875\nv -0.299865 0.5 -0.046875\nv -0.263997 0.5 -0.046875\nv -0.300603 0.507812 -0.046875\nv -0.26433 0.507812 -0.046875\nv -0.301014 0.515625 -0.046875\nv -0.264629 0.515625 -0.046875\nv -0.30154 0.523438 -0.046875\nv -0.265056 0.523438 -0.046875\nv -0.302289 0.53125 -0.046875\nv -0.265553 0.53125 -0.046875\nv -0.265625 0.532215 -0.046875\nv -0.265625 0.53125 -0.0453254\nv -0.303073 0.539062 -0.046875\nv -0.266333 0.539062 -0.046875\nv -0.303778 0.546875 -0.046875\nv -0.267229 0.546875 -0.046875\nv -0.304254 0.554688 -0.046875\nv -0.268182 0.554688 -0.046875\nv -0.304526 0.5625 -0.046875\nv -0.269049 0.5625 -0.046875\nv -0.304586 0.570312 -0.046875\nv -0.269791 0.570312 -0.046875\nv -0.30462 0.578125 -0.046875\nv -0.27082 0.578125 -0.046875\nv -0.304663 0.585938 -0.046875\nv -0.271618 0.585938 -0.046875\nv -0.273438 0.590335 -0.046875\nv -0.303141 0.59375 -0.046875\nv -0.274904 0.59375 -0.046875\nv -0.301502 0.601562 -0.046875\nv -0.279865 0.601562 -0.046875\nv -0.28125 0.604883 -0.046875\nv -0.28125 0.601562 -0.0412466\nv -0.29853 0.609375 -0.046875\nv -0.296875 0.61351 -0.046875\nv -0.296875 0.609375 -0.0407479\nv -0.283799 0.609375 -0.046875\nv -0.292437 0.617188 -0.046875\nv -0.28788 0.617188 -0.046875\nv -0.289062 0.621237 -0.046875\nv -0.289062 0.617188 -0.0425528\nv -0.296875 0.633769 -0.046875\nv -0.297775 0.640625 -0.046875\nv -0.295749 0.640625 -0.046875\nv -0.296875 0.640625 -0.0451226\nv -0.300233 0.648438 -0.046875\nv -0.304688 0.654649 -0.046875\nv -0.294664 0.648438 -0.046875\nv -0.296875 0.648438 -0.0429464\nv -0.305299 0.65625 -0.046875\nv -0.304688 0.65625 -0.0460803\nv -0.293979 0.65625 -0.046875\nv -0.296875 0.65625 -0.0417844\nv -0.308291 0.664062 -0.046875\nv -0.304688 0.664062 -0.0421282\nv -0.293325 0.664062 -0.046875\nv -0.311268 0.671875 -0.046875\nv -0.3125 0.674768 -0.046875\nv -0.29219 0.671875 -0.046875\nv -0.314404 0.679688 -0.046875\nv -0.3125 0.679688 -0.0424987\nv -0.290367 0.679688 -0.046875\nv -0.289062 0.683435 -0.046875\nv -0.316106 0.6875 -0.046875\nv -0.287652 0.6875 -0.046875\nv -0.289062 0.6875 -0.0394231\nv -0.317141 0.695312 -0.046875\nv -0.284878 0.695312 -0.046875\nv -0.318078 0.703125 -0.046875\nv -0.282893 0.703125 -0.046875\nv -0.319111 0.710938 -0.046875\nv -0.320312 0.717767 -0.046875\nv -0.282174 0.710938 -0.046875\nv -0.320483 0.71875 -0.046875\nv -0.320312 0.71875 -0.0442091\nv -0.282037 0.71875 -0.046875\nv -0.322217 0.726562 -0.046875\nv -0.282206 0.726562 -0.046875\nv -0.323515 0.734375 -0.046875\nv -0.282098 0.734375 -0.046875\nv -0.324764 0.742188 -0.046875\nv -0.282839 0.742188 -0.046875\nv -0.325859 0.75 -0.046875\nv -0.283541 0.75 -0.046875\nv -0.326794 0.757812 -0.046875\nv -0.284369 0.757812 -0.046875\nv -0.32801 0.765625 -0.046875\nv -0.328125 0.766166 -0.046875\nv -0.285441 0.765625 -0.046875\nv -0.329609 0.773438 -0.046875\nv -0.28666 0.773438 -0.046875\nv -0.330882 0.78125 -0.046875\nv -0.288281 0.78125 -0.046875\nv -0.289062 0.784557 -0.046875\nv -0.331893 0.789062 -0.046875\nv -0.290794 0.789062 -0.046875\nv -0.332459 0.796875 -0.046875\nv -0.293547 0.796875 -0.046875\nv -0.296875 0.803624 -0.046875\nv -0.332715 0.804688 -0.046875\nv -0.297619 0.804688 -0.046875\nv -0.332586 0.8125 -0.046875\nv -0.303378 0.8125 -0.046875\nv -0.304688 0.814455 -0.046875\nv -0.330885 0.820312 -0.046875\nv -0.328125 0.824653 -0.046875\nv -0.308676 0.820312 -0.046875\nv -0.3125 0.824282 -0.046875\nv -0.322575 0.828125 -0.046875\nv -0.318386 0.828125 -0.046875\nv -0.320312 0.828689 -0.046875\nv 0.0859375 -0.539397 -0.0390625\nv 0.046875 -0.531833 -0.0390625\nv 0.0546875 -0.534743 -0.0390625\nv 0.0625 -0.537046 -0.0390625\nv 0.0703125 -0.538282 -0.0390625\nv 0.0786549 -0.539062 -0.0390625\nv 0.078125 -0.53903 -0.0390625\nv 0.0899655 -0.539062 -0.0390625\nv 0.0859375 -0.539062 -0.0323841\nv 0.09375 -0.538664 -0.0390625\nv 0.101562 -0.534948 -0.0390625\nv 0.0078125 -0.524399 -0.0390625\nv 0.015625 -0.525568 -0.0390625\nv 0.0234375 -0.527361 -0.0390625\nv 0.03125 -0.528853 -0.0390625\nv 0.0438989 -0.53125 -0.0390625\nv 0.0390625 -0.530125 -0.0390625\nv 0.10634 -0.53125 -0.0390625\nv 0.109375 -0.528974 -0.0390625\nv 0.000661082 -0.523438 -0.0390625\nv 0 -0.52301 -0.0390625\nv 0.0078125 -0.523438 -0.0340169\nv 0.116791 -0.523438 -0.0390625\nv 0.117188 -0.523014 -0.0390625\nv -0.00441858 -0.515625 -0.0390625\nv 0 -0.515625 -0.0332528\nv 0.123849 -0.515625 -0.0390625\nv 0.125 -0.513911 -0.0390625\nv -0.000684094 -0.507812 -0.0390625\nv 0 -0.507488 -0.0390625\nv 0 -0.507812 -0.0378282\nv 0.0078125 -0.504222 -0.0390625\nv 0.015625 -0.500759 -0.0390625\nv 0.129311 -0.507812 -0.0390625\nv 0.0172579 -0.5 -0.0390625\nv 0.0234375 -0.497504 -0.0390625\nv 0.03125 -0.494425 -0.0390625\nv 0.130354 -0.5 -0.0390625\nv 0.0368847 -0.492188 -0.0390625\nv 0.0390625 -0.491405 -0.0390625\nv 0.046875 -0.488055 -0.0390625\nv 0.132205 -0.492188 -0.0390625\nv 0.0523516 -0.484375 -0.0390625\nv 0.0546875 -0.483537 -0.0390625\nv 0.0625 -0.480787 -0.0390625\nv 0.0703125 -0.478112 -0.0390625\nv 0.129214 -0.484375 -0.0390625\nv 0.125 -0.480117 -0.0390625\nv 0.0741649 -0.476562 -0.0390625\nv 0.078125 -0.475119 -0.0390625\nv 0.0859375 -0.472454 -0.0390625\nv 0.09375 -0.469628 -0.0390625\nv 0.101562 -0.470448 -0.0390625\nv 0.109375 -0.471669 -0.0390625\nv 0.121054 -0.476562 -0.0390625\nv 0.117188 -0.474015 -0.0390625\nv -0.289062 -0.0652405 -0.0390625\nv -0.28125 -0.0667977 -0.0390625\nv -0.273438 -0.0651273 -0.0390625\nv 0.453125 -0.0659755 -0.0390625\nv 0.460938 -0.0677284 -0.0390625\nv 0.46875 -0.0662083 -0.0390625\nv 0.476562 -0.0662528 -0.0390625\nv 0.484375 -0.0645133 -0.0390625\nv -0.29201 -0.0625 -0.0390625\nv -0.270764 -0.0625 -0.0390625\nv 0.449266 -0.0625 -0.0390625\nv 0.48847 -0.0625 -0.0390625\nv 0.492188 -0.057041 -0.0390625\nv -0.295182 -0.0546875 -0.0390625\nv -0.296875 -0.0498525 -0.0390625\nv -0.266568 -0.0546875 -0.0390625\nv -0.265625 -0.0519157 -0.0390625\nv 0.446088 -0.0546875 -0.0390625\nv 0.445312 -0.0525728 -0.0390625\nv 0.493 -0.0546875 -0.0390625\nv -0.297653 -0.046875 -0.0390625\nv -0.264041 -0.046875 -0.0390625\nv 0.443447 -0.046875 -0.0390625\nv 0.494691 -0.046875 -0.0390625\nv -0.299057 -0.0390625 -0.0390625\nv -0.262496 -0.0390625 -0.0390625\nv 0.443623 -0.0390625 -0.0390625\nv 0.496521 -0.0390625 -0.0390625\nv -0.299671 -0.03125 -0.0390625\nv -0.261431 -0.03125 -0.0390625\nv 0.443731 -0.03125 -0.0390625\nv 0.498847 -0.03125 -0.0390625\nv 0.5 -0.0277313 -0.0390625\nv -0.300197 -0.0234375 -0.0390625\nv -0.26084 -0.0234375 -0.0390625\nv 0.443441 -0.0234375 -0.0390625\nv 0.50107 -0.0234375 -0.0390625\nv -0.301483 -0.015625 -0.0390625\nv -0.259766 -0.015625 -0.0390625\nv 0.442819 -0.015625 -0.0390625\nv 0.501465 -0.015625 -0.0390625\nv -0.30306 -0.0078125 -0.0390625\nv -0.259567 -0.0078125 -0.0390625\nv 0.440727 -0.0078125 -0.0390625\nv 0.500842 -0.0078125 -0.0390625\nv -0.303981 0 -0.0390625\nv -0.25979 0 -0.0390625\nv 0.439206 0 -0.0390625\nv 0.500116 0 -0.0390625\nv 0.5 0.00180729 -0.0390625\nv -0.303922 0.0078125 -0.0390625\nv -0.258438 0.0078125 -0.0390625\nv -0.257812 0.00888578 -0.0390625\nv 0.438821 0.0078125 -0.0390625\nv 0.4375 0.0153319 -0.0390625\nv 0.499627 0.0078125 -0.0390625\nv 0.5 0.0078125 -0.033672\nv -0.302597 0.015625 -0.0390625\nv -0.252173 0.015625 -0.0390625\nv -0.25 0.0171206 -0.0390625\nv -0.242188 0.0179878 -0.0390625\nv -0.234375 0.019922 -0.0390625\nv -0.226562 0.0226077 -0.0390625\nv 0.421875 0.0216516 -0.0390625\nv 0.437411 0.015625 -0.0390625\nv 0.429688 0.0209011 -0.0390625\nv 0.499453 0.015625 -0.0390625\nv -0.301364 0.0234375 -0.0390625\nv -0.223879 0.0234375 -0.0390625\nv -0.21875 0.0248306 -0.0390625\nv -0.210938 0.0259014 -0.0390625\nv -0.203125 0.0262113 -0.0390625\nv -0.195312 0.0263173 -0.0390625\nv -0.1875 0.0265075 -0.0390625\nv -0.179688 0.0266416 -0.0390625\nv -0.171875 0.027041 -0.0390625\nv -0.164062 0.0271765 -0.0390625\nv -0.15625 0.0272551 -0.0390625\nv -0.148438 0.027267 -0.0390625\nv -0.140625 0.027178 -0.0390625\nv -0.132812 0.0271692 -0.0390625\nv -0.125 0.0273771 -0.0390625\nv -0.117188 0.0273036 -0.0390625\nv -0.109375 0.0269994 -0.0390625\nv -0.101562 0.0267904 -0.0390625\nv -0.09375 0.0265485 -0.0390625\nv -0.0859375 0.0263311 -0.0390625\nv -0.078125 0.0261412 -0.0390625\nv -0.0703125 0.0259571 -0.0390625\nv -0.0625 0.0258279 -0.0390625\nv -0.0546875 0.0256976 -0.0390625\nv -0.046875 0.0255478 -0.0390625\nv -0.0390625 0.0254537 -0.0390625\nv -0.03125 0.0254599 -0.0390625\nv -0.0234375 0.0253881 -0.0390625\nv -0.015625 0.0253407 -0.0390625\nv -0.0078125 0.0253673 -0.0390625\nv 0 0.0253804 -0.0390625\nv 0.0078125 0.0254587 -0.0390625\nv 0.015625 0.0255496 -0.0390625\nv 0.0234375 0.025707 -0.0390625\nv 0.03125 0.0257942 -0.0390625\nv 0.0390625 0.0258332 -0.0390625\nv 0.046875 0.0257439 -0.0390625\nv 0.0546875 0.0256729 -0.0390625\nv 0.0625 0.025563 -0.0390625\nv 0.0703125 0.0254658 -0.0390625\nv 0.078125 0.0254032 -0.0390625\nv 0.0859375 0.0254479 -0.0390625\nv 0.09375 0.0255038 -0.0390625\nv 0.101562 0.0254831 -0.0390625\nv 0.109375 0.0254806 -0.0390625\nv 0.117188 0.0254493 -0.0390625\nv 0.125 0.0254143 -0.0390625\nv 0.132812 0.0252968 -0.0390625\nv 0.140625 0.0251758 -0.0390625\nv 0.148438 0.0250488 -0.0390625\nv 0.15625 0.0248654 -0.0390625\nv 0.164062 0.0246597 -0.0390625\nv 0.171875 0.0244919 -0.0390625\nv 0.179688 0.0244172 -0.0390625\nv 0.1875 0.0244093 -0.0390625\nv 0.195312 0.0243601 -0.0390625\nv 0.203125 0.0242795 -0.0390625\nv 0.210938 0.024197 -0.0390625\nv 0.21875 0.0242459 -0.0390625\nv 0.226562 0.0241979 -0.0390625\nv 0.234375 0.024289 -0.0390625\nv 0.242188 0.0244246 -0.0390625\nv 0.25 0.0245806 -0.0390625\nv 0.257812 0.0248403 -0.0390625\nv 0.265625 0.0250706 -0.0390625\nv 0.273438 0.0252965 -0.0390625\nv 0.28125 0.0254884 -0.0390625\nv 0.289062 0.025658 -0.0390625\nv 0.296875 0.0257984 -0.0390625\nv 0.304688 0.0260079 -0.0390625\nv 0.3125 0.026247 -0.0390625\nv 0.320312 0.0265638 -0.0390625\nv 0.328125 0.0268341 -0.0390625\nv 0.335938 0.0269154 -0.0390625\nv 0.34375 0.0269856 -0.0390625\nv 0.351562 0.02703 -0.0390625\nv 0.359375 0.0270425 -0.0390625\nv 0.367188 0.02703 -0.0390625\nv 0.375 0.0270114 -0.0390625\nv 0.382812 0.0267872 -0.0390625\nv 0.390625 0.026307 -0.0390625\nv 0.398438 0.0256632 -0.0390625\nv 0.40625 0.0251773 -0.0390625\nv 0.415777 0.0234375 -0.0390625\nv 0.414062 0.0238218 -0.0390625\nv 0.499569 0.0234375 -0.0390625\nv -0.300017 0.03125 -0.0390625\nv 0.497751 0.03125 -0.0390625\nv -0.298753 0.0390625 -0.0390625\nv -0.296875 0.0446601 -0.0390625\nv 0.495587 0.0390625 -0.0390625\nv -0.296091 0.046875 -0.0390625\nv 0.493834 0.046875 -0.0390625\nv 0.492188 0.0521174 -0.0390625\nv -0.29296 0.0546875 -0.0390625\nv 0.491247 0.0546875 -0.0390625\nv 0.484375 0.0597057 -0.0390625\nv -0.289377 0.0625 -0.0390625\nv -0.289062 0.0630807 -0.0390625\nv 0.453125 0.0688828 -0.0390625\nv 0.460938 0.0678658 -0.0390625\nv 0.46875 0.0670767 -0.0390625\nv 0.478762 0.0625 -0.0390625\nv 0.476562 0.0636499 -0.0390625\nv -0.28312 0.0703125 -0.0390625\nv -0.28125 0.0716052 -0.0390625\nv -0.273438 0.076132 -0.0390625\nv -0.234375 0.0771189 -0.0390625\nv -0.226562 0.0749167 -0.0390625\nv -0.21875 0.073584 -0.0390625\nv -0.210938 0.072774 -0.0390625\nv -0.203125 0.0731984 -0.0390625\nv -0.195312 0.0738095 -0.0390625\nv -0.1875 0.0743563 -0.0390625\nv -0.179688 0.0747162 -0.0390625\nv -0.171875 0.0750758 -0.0390625\nv -0.164062 0.0753761 -0.0390625\nv -0.15625 0.0753714 -0.0390625\nv -0.148438 0.0753643 -0.0390625\nv -0.140625 0.0752708 -0.0390625\nv -0.132812 0.0753029 -0.0390625\nv -0.125 0.0754154 -0.0390625\nv -0.117188 0.0754338 -0.0390625\nv -0.109375 0.0753717 -0.0390625\nv -0.101562 0.0752378 -0.0390625\nv -0.09375 0.0752194 -0.0390625\nv -0.0859375 0.0752014 -0.0390625\nv -0.078125 0.0751025 -0.0390625\nv -0.0703125 0.0750154 -0.0390625\nv -0.0625 0.0749071 -0.0390625\nv -0.0546875 0.074822 -0.0390625\nv -0.046875 0.0746688 -0.0390625\nv -0.0390625 0.0745092 -0.0390625\nv -0.03125 0.0743576 -0.0390625\nv -0.0234375 0.0741873 -0.0390625\nv -0.015625 0.0739331 -0.0390625\nv -0.0078125 0.0737274 -0.0390625\nv 0 0.0736486 -0.0390625\nv 0.0078125 0.073631 -0.0390625\nv 0.015625 0.0736524 -0.0390625\nv 0.0234375 0.0736216 -0.0390625\nv 0.03125 0.0735744 -0.0390625\nv 0.0390625 0.0736161 -0.0390625\nv 0.046875 0.0736723 -0.0390625\nv 0.0546875 0.0736521 -0.0390625\nv 0.0625 0.0736504 -0.0390625\nv 0.0703125 0.0736958 -0.0390625\nv 0.078125 0.0738036 -0.0390625\nv 0.0859375 0.0738323 -0.0390625\nv 0.09375 0.0738204 -0.0390625\nv 0.101562 0.0737182 -0.0390625\nv 0.109375 0.0735682 -0.0390625\nv 0.117188 0.0734495 -0.0390625\nv 0.125 0.0733193 -0.0390625\nv 0.132812 0.0731437 -0.0390625\nv 0.140625 0.0730104 -0.0390625\nv 0.148438 0.072933 -0.0390625\nv 0.15625 0.0729024 -0.0390625\nv 0.164062 0.0728618 -0.0390625\nv 0.171875 0.0728515 -0.0390625\nv 0.179688 0.0728262 -0.0390625\nv 0.1875 0.0728536 -0.0390625\nv 0.195312 0.0728618 -0.0390625\nv 0.203125 0.0728586 -0.0390625\nv 0.210938 0.0728458 -0.0390625\nv 0.21875 0.0728231 -0.0390625\nv 0.226562 0.072799 -0.0390625\nv 0.234375 0.0727843 -0.0390625\nv 0.242188 0.072789 -0.0390625\nv 0.25 0.0728813 -0.0390625\nv 0.257812 0.0730109 -0.0390625\nv 0.265625 0.0731386 -0.0390625\nv 0.273438 0.0732786 -0.0390625\nv 0.28125 0.0734056 -0.0390625\nv 0.289062 0.0735166 -0.0390625\nv 0.296875 0.07357 -0.0390625\nv 0.304688 0.0736525 -0.0390625\nv 0.3125 0.0736741 -0.0390625\nv 0.320312 0.0736464 -0.0390625\nv 0.328125 0.0736486 -0.0390625\nv 0.335938 0.0736489 -0.0390625\nv 0.34375 0.07367 -0.0390625\nv 0.351562 0.0736451 -0.0390625\nv 0.359375 0.0736071 -0.0390625\nv 0.367188 0.0735056 -0.0390625\nv 0.375 0.0731498 -0.0390625\nv 0.382812 0.0726584 -0.0390625\nv 0.390625 0.0724134 -0.0390625\nv 0.398438 0.0722379 -0.0390625\nv 0.40625 0.0721281 -0.0390625\nv 0.414062 0.0719485 -0.0390625\nv 0.421875 0.0717671 -0.0390625\nv 0.429688 0.0716286 -0.0390625\nv 0.4375 0.071205 -0.0390625\nv 0.446306 0.0703125 -0.0390625\nv 0.445312 0.0705111 -0.0390625\nv -0.270099 0.078125 -0.0390625\nv -0.265625 0.0799109 -0.0390625\nv -0.257812 0.0829898 -0.0390625\nv -0.25 0.0824671 -0.0390625\nv -0.237832 0.078125 -0.0390625\nv -0.242188 0.0794729 -0.0390625\nv -0.28125 0.171767 -0.0390625\nv -0.273438 0.169941 -0.0390625\nv -0.265625 0.169374 -0.0390625\nv -0.281559 0.171875 -0.0390625\nv -0.289062 0.176132 -0.0390625\nv -0.28125 0.171875 -0.0379056\nv -0.261119 0.171875 -0.0390625\nv -0.257812 0.17409 -0.0390625\nv -0.293622 0.179688 -0.0390625\nv -0.296875 0.185457 -0.0390625\nv -0.254872 0.179688 -0.0390625\nv -0.297459 0.1875 -0.0390625\nv -0.250288 0.1875 -0.0390625\nv -0.25 0.188068 -0.0390625\nv -0.298277 0.195312 -0.0390625\nv -0.246511 0.195312 -0.0390625\nv -0.29861 0.203125 -0.0390625\nv -0.243987 0.203125 -0.0390625\nv -0.29875 0.210938 -0.0390625\nv -0.24307 0.210938 -0.0390625\nv -0.298796 0.21875 -0.0390625\nv -0.242573 0.21875 -0.0390625\nv -0.299019 0.226562 -0.0390625\nv -0.242623 0.226562 -0.0390625\nv -0.299474 0.234375 -0.0390625\nv -0.242727 0.234375 -0.0390625\nv -0.299533 0.242188 -0.0390625\nv -0.242822 0.242188 -0.0390625\nv -0.299387 0.25 -0.0390625\nv -0.243033 0.25 -0.0390625\nv -0.29917 0.257812 -0.0390625\nv -0.243606 0.257812 -0.0390625\nv -0.298787 0.265625 -0.0390625\nv -0.244253 0.265625 -0.0390625\nv -0.297764 0.273438 -0.0390625\nv -0.296875 0.277526 -0.0390625\nv -0.244804 0.273438 -0.0390625\nv -0.295996 0.28125 -0.0390625\nv -0.24584 0.28125 -0.0390625\nv -0.294355 0.289062 -0.0390625\nv -0.248179 0.289062 -0.0390625\nv -0.25 0.29433 -0.0390625\nv -0.29308 0.296875 -0.0390625\nv -0.25099 0.296875 -0.0390625\nv -0.292038 0.304688 -0.0390625\nv -0.253449 0.304688 -0.0390625\nv -0.291446 0.3125 -0.0390625\nv -0.25574 0.3125 -0.0390625\nv -0.291365 0.320312 -0.0390625\nv -0.257689 0.320312 -0.0390625\nv -0.257812 0.320894 -0.0390625\nv -0.257812 0.320312 -0.0382028\nv -0.291523 0.328125 -0.0390625\nv -0.259437 0.328125 -0.0390625\nv -0.291174 0.335938 -0.0390625\nv -0.260941 0.335938 -0.0390625\nv -0.29108 0.34375 -0.0390625\nv -0.262223 0.34375 -0.0390625\nv -0.291612 0.351562 -0.0390625\nv -0.26297 0.351562 -0.0390625\nv -0.265625 0.351562 -0.0313256\nv -0.292105 0.359375 -0.0390625\nv -0.263485 0.359375 -0.0390625\nv -0.265625 0.359375 -0.0327065\nv -0.292619 0.367188 -0.0390625\nv -0.26353 0.367188 -0.0390625\nv -0.265625 0.367188 -0.032526\nv -0.293156 0.375 -0.0390625\nv -0.2635 0.375 -0.0390625\nv -0.265625 0.375 -0.0322308\nv -0.293692 0.382812 -0.0390625\nv -0.263393 0.382812 -0.0390625\nv -0.294137 0.390625 -0.0390625\nv -0.263323 0.390625 -0.0390625\nv -0.294796 0.398438 -0.0390625\nv -0.263191 0.398438 -0.0390625\nv -0.295675 0.40625 -0.0390625\nv -0.262982 0.40625 -0.0390625\nv -0.296538 0.414062 -0.0390625\nv -0.296875 0.417098 -0.0390625\nv -0.262752 0.414062 -0.0390625\nv -0.297361 0.421875 -0.0390625\nv -0.296875 0.421875 -0.0315499\nv -0.262674 0.421875 -0.0390625\nv -0.297899 0.429688 -0.0390625\nv -0.262686 0.429688 -0.0390625\nv -0.298242 0.4375 -0.0390625\nv -0.262708 0.4375 -0.0390625\nv -0.29838 0.445312 -0.0390625\nv -0.262885 0.445312 -0.0390625\nv -0.298515 0.453125 -0.0390625\nv -0.26305 0.453125 -0.0390625\nv -0.298683 0.460938 -0.0390625\nv -0.263337 0.460938 -0.0390625\nv -0.298859 0.46875 -0.0390625\nv -0.26363 0.46875 -0.0390625\nv -0.299086 0.476562 -0.0390625\nv -0.26383 0.476562 -0.0390625\nv -0.299314 0.484375 -0.0390625\nv -0.263892 0.484375 -0.0390625\nv -0.299542 0.492188 -0.0390625\nv -0.264015 0.492188 -0.0390625\nv -0.300093 0.5 -0.0390625\nv -0.264345 0.5 -0.0390625\nv -0.300796 0.507812 -0.0390625\nv -0.264676 0.507812 -0.0390625\nv -0.301189 0.515625 -0.0390625\nv -0.265001 0.515625 -0.0390625\nv -0.301683 0.523438 -0.0390625\nv -0.265491 0.523438 -0.0390625\nv -0.265625 0.525922 -0.0390625\nv -0.265625 0.523438 -0.0359804\nv -0.302354 0.53125 -0.0390625\nv -0.266034 0.53125 -0.0390625\nv -0.303002 0.539062 -0.0390625\nv -0.266796 0.539062 -0.0390625\nv -0.303479 0.546875 -0.0390625\nv -0.267668 0.546875 -0.0390625\nv -0.303816 0.554688 -0.0390625\nv -0.268541 0.554688 -0.0390625\nv -0.303995 0.5625 -0.0390625\nv -0.269396 0.5625 -0.0390625\nv -0.304086 0.570312 -0.0390625\nv -0.270171 0.570312 -0.0390625\nv -0.304336 0.578125 -0.0390625\nv -0.271198 0.578125 -0.0390625\nv -0.304219 0.585938 -0.0390625\nv -0.271917 0.585938 -0.0390625\nv -0.273438 0.58864 -0.0390625\nv -0.302044 0.59375 -0.0390625\nv -0.276674 0.59375 -0.0390625\nv -0.28125 0.600649 -0.0390625\nv -0.299303 0.601562 -0.0390625\nv -0.296875 0.608216 -0.0390625\nv -0.282073 0.601562 -0.0390625\nv -0.2957 0.609375 -0.0390625\nv -0.286117 0.609375 -0.0390625\nv -0.289062 0.615156 -0.0390625\nv -0.296875 0.662971 -0.0390625\nv -0.297748 0.664062 -0.0390625\nv -0.304688 0.669041 -0.0390625\nv -0.296653 0.664062 -0.0390625\nv -0.296875 0.664062 -0.0381642\nv -0.30606 0.671875 -0.0390625\nv -0.304688 0.671875 -0.0361471\nv -0.294641 0.671875 -0.0390625\nv -0.310773 0.679688 -0.0390625\nv -0.3125 0.682723 -0.0390625\nv -0.292171 0.679688 -0.0390625\nv -0.314912 0.6875 -0.0390625\nv -0.3125 0.6875 -0.0328977\nv -0.289142 0.6875 -0.0390625\nv -0.289062 0.687715 -0.0390625\nv -0.316413 0.695312 -0.0390625\nv -0.286348 0.695312 -0.0390625\nv -0.317556 0.703125 -0.0390625\nv -0.284374 0.703125 -0.0390625\nv -0.318636 0.710938 -0.0390625\nv -0.283036 0.710938 -0.0390625\nv -0.319983 0.71875 -0.0390625\nv -0.320312 0.720212 -0.0390625\nv -0.282752 0.71875 -0.0390625\nv -0.321653 0.726562 -0.0390625\nv -0.282722 0.726562 -0.0390625\nv -0.323159 0.734375 -0.0390625\nv -0.282579 0.734375 -0.0390625\nv -0.324539 0.742188 -0.0390625\nv -0.283169 0.742188 -0.0390625\nv -0.325636 0.75 -0.0390625\nv -0.283827 0.75 -0.0390625\nv -0.326596 0.757812 -0.0390625\nv -0.284532 0.757812 -0.0390625\nv -0.32783 0.765625 -0.0390625\nv -0.328125 0.766995 -0.0390625\nv -0.285429 0.765625 -0.0390625\nv -0.329472 0.773438 -0.0390625\nv -0.28665 0.773438 -0.0390625\nv -0.330806 0.78125 -0.0390625\nv -0.288213 0.78125 -0.0390625\nv -0.289062 0.784979 -0.0390625\nv -0.331862 0.789062 -0.0390625\nv -0.290564 0.789062 -0.0390625\nv -0.332537 0.796875 -0.0390625\nv -0.293354 0.796875 -0.0390625\nv -0.296875 0.804205 -0.0390625\nv -0.332849 0.804688 -0.0390625\nv -0.297193 0.804688 -0.0390625\nv -0.33281 0.8125 -0.0390625\nv -0.302795 0.8125 -0.0390625\nv -0.304688 0.81545 -0.0390625\nv -0.331489 0.820312 -0.0390625\nv -0.328125 0.825705 -0.0390625\nv -0.307834 0.820312 -0.0390625\nv -0.3125 0.825498 -0.0390625\nv -0.324491 0.828125 -0.0390625\nv -0.316582 0.828125 -0.0390625\nv -0.320312 0.82919 -0.0390625\nv 0.046875 -0.532555 -0.03125\nv 0.0546875 -0.535418 -0.03125\nv 0.0625 -0.537366 -0.03125\nv 0.0703125 -0.538497 -0.03125\nv 0.0703125 -0.539062 -0.0235452\nv 0.078125 -0.539035 -0.03125\nv 0.078125 -0.539062 -0.0303692\nv 0.0859375 -0.538996 -0.03125\nv 0.09375 -0.537255 -0.03125\nv 0.101562 -0.53225 -0.03125\nv 0.015625 -0.524227 -0.03125\nv 0.0234375 -0.525691 -0.03125\nv 0.03125 -0.527192 -0.03125\nv 0.0427057 -0.53125 -0.03125\nv 0.0390625 -0.529893 -0.03125\nv 0.103238 -0.53125 -0.03125\nv 0.101562 -0.53125 -0.0273597\nv 0.109375 -0.527175 -0.03125\nv 0.0109107 -0.523438 -0.03125\nv 0.0078125 -0.521462 -0.03125\nv 0.015625 -0.523438 -0.0240583\nv 0.115097 -0.523438 -0.03125\nv 0.117188 -0.521307 -0.03125\nv 0.00197985 -0.515625 -0.03125\nv 0.1228 -0.515625 -0.03125\nv 0.125 -0.512156 -0.03125\nv 0.00385846 -0.507812 -0.03125\nv 0.0078125 -0.505942 -0.03125\nv 0.015625 -0.502589 -0.03125\nv 0.127707 -0.507812 -0.03125\nv 0.0211039 -0.5 -0.03125\nv 0.0234375 -0.49903 -0.03125\nv 0.03125 -0.495812 -0.03125\nv 0.128971 -0.5 -0.03125\nv 0.0371594 -0.492188 -0.03125\nv 0.0390625 -0.491141 -0.03125\nv 0.046875 -0.486418 -0.03125\nv 0.131256 -0.492188 -0.03125\nv 0.0497477 -0.484375 -0.03125\nv 0.0546875 -0.482443 -0.03125\nv 0.0625 -0.479519 -0.03125\nv 0.0703125 -0.476598 -0.03125\nv 0.128782 -0.484375 -0.03125\nv 0.125 -0.480765 -0.03125\nv 0.0704093 -0.476562 -0.03125\nv 0.0703125 -0.476562 -0.0309295\nv 0.078125 -0.474049 -0.03125\nv 0.0859375 -0.471706 -0.03125\nv 0.09375 -0.469517 -0.03125\nv 0.101562 -0.470055 -0.03125\nv 0.109375 -0.470835 -0.03125\nv 0.120328 -0.476562 -0.03125\nv 0.117188 -0.474264 -0.03125\nv -0.289062 -0.0655943 -0.03125\nv -0.28125 -0.0671306 -0.03125\nv -0.273438 -0.0653998 -0.03125\nv 0.453125 -0.0651317 -0.03125\nv 0.460938 -0.0675421 -0.03125\nv 0.46875 -0.0662763 -0.03125\nv 0.476562 -0.0664514 -0.03125\nv 0.484375 -0.0646036 -0.03125\nv -0.29241 -0.0625 -0.03125\nv -0.270533 -0.0625 -0.03125\nv 0.450361 -0.0625 -0.03125\nv 0.488806 -0.0625 -0.03125\nv 0.492188 -0.0579023 -0.03125\nv -0.295474 -0.0546875 -0.03125\nv -0.296875 -0.0505862 -0.03125\nv -0.26648 -0.0546875 -0.03125\nv -0.265625 -0.0520484 -0.03125\nv 0.4472 -0.0546875 -0.03125\nv 0.445312 -0.0495882 -0.03125\nv 0.49335 -0.0546875 -0.03125\nv -0.297822 -0.046875 -0.03125\nv -0.264079 -0.046875 -0.03125\nv 0.444394 -0.046875 -0.03125\nv 0.495237 -0.046875 -0.03125\nv -0.299213 -0.0390625 -0.03125\nv -0.262649 -0.0390625 -0.03125\nv 0.443979 -0.0390625 -0.03125\nv 0.497164 -0.0390625 -0.03125\nv -0.299878 -0.03125 -0.03125\nv -0.261564 -0.03125 -0.03125\nv 0.444007 -0.03125 -0.03125\nv 0.499618 -0.03125 -0.03125\nv 0.5 -0.0300786 -0.03125\nv 0.5 -0.03125 -0.0269196\nv -0.300409 -0.0234375 -0.03125\nv -0.260931 -0.0234375 -0.03125\nv 0.443512 -0.0234375 -0.03125\nv 0.501661 -0.0234375 -0.03125\nv -0.301699 -0.015625 -0.03125\nv -0.259868 -0.015625 -0.03125\nv 0.442769 -0.015625 -0.03125\nv 0.502054 -0.015625 -0.03125\nv -0.303271 -0.0078125 -0.03125\nv -0.259679 -0.0078125 -0.03125\nv 0.440577 -0.0078125 -0.03125\nv 0.501498 -0.0078125 -0.03125\nv -0.303986 0 -0.03125\nv -0.259877 0 -0.03125\nv 0.438961 0 -0.03125\nv 0.500683 0 -0.03125\nv -0.303945 0.0078125 -0.03125\nv -0.258662 0.0078125 -0.03125\nv -0.257812 0.00928869 -0.03125\nv 0.438611 0.0078125 -0.03125\nv 0.4375 0.0142848 -0.03125\nv 0.500166 0.0078125 -0.03125\nv 0.5 0.0124885 -0.03125\nv -0.302614 0.015625 -0.03125\nv -0.252458 0.015625 -0.03125\nv -0.25 0.017284 -0.03125\nv -0.242188 0.0181376 -0.03125\nv -0.234375 0.0201058 -0.03125\nv -0.226562 0.0226656 -0.03125\nv 0.421875 0.0214716 -0.03125\nv 0.437095 0.015625 -0.03125\nv 0.429688 0.0207271 -0.03125\nv 0.499886 0.015625 -0.03125\nv 0.5 0.015625 -0.0293469\nv -0.301366 0.0234375 -0.03125\nv -0.22393 0.0234375 -0.03125\nv -0.21875 0.0247845 -0.03125\nv -0.210938 0.0258594 -0.03125\nv -0.203125 0.0261587 -0.03125\nv -0.195312 0.0262654 -0.03125\nv -0.1875 0.0264529 -0.03125\nv -0.179688 0.0266071 -0.03125\nv -0.171875 0.0270501 -0.03125\nv -0.164062 0.0272095 -0.03125\nv -0.15625 0.0272498 -0.03125\nv -0.148438 0.0272427 -0.03125\nv -0.140625 0.0271204 -0.03125\nv -0.132812 0.027123 -0.03125\nv -0.125 0.027271 -0.03125\nv -0.117188 0.0272405 -0.03125\nv -0.109375 0.0269951 -0.03125\nv -0.101562 0.0268064 -0.03125\nv -0.09375 0.0265753 -0.03125\nv -0.0859375 0.0263971 -0.03125\nv -0.078125 0.0262068 -0.03125\nv -0.0703125 0.0260452 -0.03125\nv -0.0625 0.025954 -0.03125\nv -0.0546875 0.0258114 -0.03125\nv -0.046875 0.0257112 -0.03125\nv -0.0390625 0.0255337 -0.03125\nv -0.03125 0.0254486 -0.03125\nv -0.0234375 0.025406 -0.03125\nv -0.015625 0.0253297 -0.03125\nv -0.0078125 0.0253077 -0.03125\nv 0 0.0252993 -0.03125\nv 0.0078125 0.0252753 -0.03125\nv 0.015625 0.0253529 -0.03125\nv 0.0234375 0.0254787 -0.03125\nv 0.03125 0.0256002 -0.03125\nv 0.0390625 0.0256085 -0.03125\nv 0.046875 0.0254715 -0.03125\nv 0.0546875 0.0254202 -0.03125\nv 0.0625 0.0254153 -0.03125\nv 0.0703125 0.0253704 -0.03125\nv 0.078125 0.0253352 -0.03125\nv 0.0859375 0.0253148 -0.03125\nv 0.09375 0.0253381 -0.03125\nv 0.101562 0.0253255 -0.03125\nv 0.109375 0.0253131 -0.03125\nv 0.117188 0.0253191 -0.03125\nv 0.125 0.0253 -0.03125\nv 0.132812 0.025232 -0.03125\nv 0.140625 0.025106 -0.03125\nv 0.148438 0.0249524 -0.03125\nv 0.15625 0.0247855 -0.03125\nv 0.164062 0.0246007 -0.03125\nv 0.171875 0.024447 -0.03125\nv 0.179688 0.0244027 -0.03125\nv 0.1875 0.0244041 -0.03125\nv 0.195312 0.0243796 -0.03125\nv 0.203125 0.0243259 -0.03125\nv 0.210938 0.0242534 -0.03125\nv 0.21875 0.0242574 -0.03125\nv 0.226562 0.0242205 -0.03125\nv 0.234375 0.0243243 -0.03125\nv 0.242188 0.0244647 -0.03125\nv 0.25 0.0246099 -0.03125\nv 0.257812 0.0248647 -0.03125\nv 0.265625 0.0250916 -0.03125\nv 0.273438 0.0253082 -0.03125\nv 0.28125 0.025492 -0.03125\nv 0.289062 0.0256604 -0.03125\nv 0.296875 0.025814 -0.03125\nv 0.304688 0.0260257 -0.03125\nv 0.3125 0.0262748 -0.03125\nv 0.320312 0.026581 -0.03125\nv 0.328125 0.0268204 -0.03125\nv 0.335938 0.0269086 -0.03125\nv 0.34375 0.0269894 -0.03125\nv 0.351562 0.0270407 -0.03125\nv 0.359375 0.0270587 -0.03125\nv 0.367188 0.027053 -0.03125\nv 0.375 0.0270444 -0.03125\nv 0.382812 0.0268088 -0.03125\nv 0.390625 0.0263417 -0.03125\nv 0.398438 0.0257043 -0.03125\nv 0.40625 0.0252088 -0.03125\nv 0.415425 0.0234375 -0.03125\nv 0.414062 0.0237488 -0.03125\nv 0.499885 0.0234375 -0.03125\nv 0.5 0.0234375 -0.0289791\nv -0.30011 0.03125 -0.03125\nv 0.497958 0.03125 -0.03125\nv -0.298769 0.0390625 -0.03125\nv -0.296875 0.0445882 -0.03125\nv 0.49574 0.0390625 -0.03125\nv -0.296072 0.046875 -0.03125\nv 0.494025 0.046875 -0.03125\nv 0.492188 0.0524612 -0.03125\nv -0.293062 0.0546875 -0.03125\nv 0.491327 0.0546875 -0.03125\nv 0.484375 0.0598427 -0.03125\nv -0.289476 0.0625 -0.03125\nv -0.289062 0.0632142 -0.03125\nv 0.453125 0.0688638 -0.03125\nv 0.460938 0.067912 -0.03125\nv 0.46875 0.0671361 -0.03125\nv 0.479 0.0625 -0.03125\nv 0.476562 0.0637476 -0.03125\nv -0.282503 0.0703125 -0.03125\nv -0.28125 0.0711212 -0.03125\nv -0.273438 0.0753769 -0.03125\nv -0.234375 0.0769618 -0.03125\nv -0.226562 0.074831 -0.03125\nv -0.21875 0.073572 -0.03125\nv -0.210938 0.072776 -0.03125\nv -0.203125 0.0732053 -0.03125\nv -0.195312 0.0738087 -0.03125\nv -0.1875 0.0743662 -0.03125\nv -0.179688 0.0747422 -0.03125\nv -0.171875 0.0750438 -0.03125\nv -0.164062 0.0753618 -0.03125\nv -0.15625 0.0753561 -0.03125\nv -0.148438 0.0753341 -0.03125\nv -0.140625 0.0752448 -0.03125\nv -0.132812 0.075298 -0.03125\nv -0.125 0.0753704 -0.03125\nv -0.117188 0.0754306 -0.03125\nv -0.109375 0.0753723 -0.03125\nv -0.101562 0.0752257 -0.03125\nv -0.09375 0.0752075 -0.03125\nv -0.0859375 0.0751943 -0.03125\nv -0.078125 0.0751151 -0.03125\nv -0.0703125 0.0750316 -0.03125\nv -0.0625 0.0749435 -0.03125\nv -0.0546875 0.0748208 -0.03125\nv -0.046875 0.0746274 -0.03125\nv -0.0390625 0.0744687 -0.03125\nv -0.03125 0.074322 -0.03125\nv -0.0234375 0.0741534 -0.03125\nv -0.015625 0.0739842 -0.03125\nv -0.0078125 0.0737843 -0.03125\nv 0 0.0736153 -0.03125\nv 0.0078125 0.0734975 -0.03125\nv 0.015625 0.0734629 -0.03125\nv 0.0234375 0.0734081 -0.03125\nv 0.03125 0.0734301 -0.03125\nv 0.0390625 0.0734375 -0.03125\nv 0.046875 0.0734533 -0.03125\nv 0.0546875 0.0734447 -0.03125\nv 0.0625 0.0735304 -0.03125\nv 0.0703125 0.0735955 -0.03125\nv 0.078125 0.0737038 -0.03125\nv 0.0859375 0.0737529 -0.03125\nv 0.09375 0.0736755 -0.03125\nv 0.101562 0.0735344 -0.03125\nv 0.109375 0.0734229 -0.03125\nv 0.117188 0.0732649 -0.03125\nv 0.125 0.0731444 -0.03125\nv 0.132812 0.0730176 -0.03125\nv 0.140625 0.0729071 -0.03125\nv 0.148438 0.072835 -0.03125\nv 0.15625 0.0727914 -0.03125\nv 0.164062 0.0727573 -0.03125\nv 0.171875 0.0727727 -0.03125\nv 0.179688 0.0728077 -0.03125\nv 0.1875 0.0727471 -0.03125\nv 0.195312 0.0728174 -0.03125\nv 0.203125 0.0728386 -0.03125\nv 0.210938 0.0728193 -0.03125\nv 0.21875 0.0728163 -0.03125\nv 0.226562 0.0728239 -0.03125\nv 0.234375 0.0728376 -0.03125\nv 0.242188 0.0728468 -0.03125\nv 0.25 0.0729251 -0.03125\nv 0.257812 0.0730661 -0.03125\nv 0.265625 0.0731907 -0.03125\nv 0.273438 0.073289 -0.03125\nv 0.28125 0.0734054 -0.03125\nv 0.289062 0.0735035 -0.03125\nv 0.296875 0.0735561 -0.03125\nv 0.304688 0.0735834 -0.03125\nv 0.3125 0.0735926 -0.03125\nv 0.320312 0.0735648 -0.03125\nv 0.328125 0.0735577 -0.03125\nv 0.335938 0.0735686 -0.03125\nv 0.34375 0.073582 -0.03125\nv 0.351562 0.0735575 -0.03125\nv 0.359375 0.0734985 -0.03125\nv 0.367188 0.0733757 -0.03125\nv 0.375 0.07302 -0.03125\nv 0.382812 0.0725173 -0.03125\nv 0.390625 0.0722983 -0.03125\nv 0.398438 0.0721549 -0.03125\nv 0.40625 0.0720362 -0.03125\nv 0.414062 0.0718586 -0.03125\nv 0.421875 0.0716757 -0.03125\nv 0.429688 0.0715626 -0.03125\nv 0.4375 0.071122 -0.03125\nv 0.445984 0.0703125 -0.03125\nv 0.445312 0.0704418 -0.03125\nv 0.445312 0.0703125 -0.024243\nv -0.269226 0.078125 -0.03125\nv -0.265625 0.0798168 -0.03125\nv -0.257812 0.0833744 -0.03125\nv -0.25 0.0824463 -0.03125\nv -0.238943 0.078125 -0.03125\nv -0.242188 0.0790396 -0.03125\nv -0.273438 0.170549 -0.03125\nv -0.265625 0.169595 -0.03125\nv -0.289062 0.176834 -0.03125\nv -0.278471 0.171875 -0.03125\nv -0.28125 0.172663 -0.03125\nv -0.261612 0.171875 -0.03125\nv -0.257812 0.174438 -0.03125\nv -0.292788 0.179688 -0.03125\nv -0.296875 0.186266 -0.03125\nv -0.254899 0.179688 -0.03125\nv -0.297281 0.1875 -0.03125\nv -0.250507 0.1875 -0.03125\nv -0.25 0.188418 -0.03125\nv -0.25 0.1875 -0.0239345\nv -0.298073 0.195312 -0.03125\nv -0.246391 0.195312 -0.03125\nv -0.298463 0.203125 -0.03125\nv -0.2441 0.203125 -0.03125\nv -0.298621 0.210938 -0.03125\nv -0.243059 0.210938 -0.03125\nv -0.298748 0.21875 -0.03125\nv -0.242739 0.21875 -0.03125\nv -0.299043 0.226562 -0.03125\nv -0.242871 0.226562 -0.03125\nv -0.29941 0.234375 -0.03125\nv -0.243021 0.234375 -0.03125\nv -0.299402 0.242188 -0.03125\nv -0.243075 0.242188 -0.03125\nv -0.2994 0.25 -0.03125\nv -0.243197 0.25 -0.03125\nv -0.299275 0.257812 -0.03125\nv -0.24379 0.257812 -0.03125\nv -0.29889 0.265625 -0.03125\nv -0.244249 0.265625 -0.03125\nv -0.297809 0.273438 -0.03125\nv -0.296875 0.277907 -0.03125\nv -0.244691 0.273438 -0.03125\nv -0.296109 0.28125 -0.03125\nv -0.245731 0.28125 -0.03125\nv -0.294642 0.289062 -0.03125\nv -0.248238 0.289062 -0.03125\nv -0.25 0.293915 -0.03125\nv -0.293324 0.296875 -0.03125\nv -0.25123 0.296875 -0.03125\nv -0.291985 0.304688 -0.03125\nv -0.254084 0.304688 -0.03125\nv -0.291193 0.3125 -0.03125\nv -0.256731 0.3125 -0.03125\nv -0.257812 0.316407 -0.03125\nv -0.290781 0.320312 -0.03125\nv -0.258902 0.320312 -0.03125\nv -0.290504 0.328125 -0.03125\nv -0.260717 0.328125 -0.03125\nv -0.289853 0.335938 -0.03125\nv -0.289062 0.335938 -0.0260058\nv -0.262316 0.335938 -0.03125\nv -0.289886 0.34375 -0.03125\nv -0.289062 0.34375 -0.0270255\nv -0.264131 0.34375 -0.03125\nv -0.265625 0.351419 -0.03125\nv -0.265625 0.34375 -0.0253481\nv -0.290222 0.351562 -0.03125\nv -0.289062 0.351562 -0.025898\nv -0.265654 0.351562 -0.03125\nv -0.290535 0.359375 -0.03125\nv -0.289062 0.359375 -0.024642\nv -0.266191 0.359375 -0.03125\nv -0.290862 0.367188 -0.03125\nv -0.266082 0.367188 -0.03125\nv -0.291542 0.375 -0.03125\nv -0.265947 0.375 -0.03125\nv -0.265625 0.382194 -0.03125\nv -0.292388 0.382812 -0.03125\nv -0.265602 0.382812 -0.03125\nv -0.265625 0.382812 -0.0311934\nv -0.29316 0.390625 -0.03125\nv -0.265186 0.390625 -0.03125\nv -0.265625 0.390625 -0.0298257\nv -0.293904 0.398438 -0.03125\nv -0.26496 0.398438 -0.03125\nv -0.265625 0.398438 -0.0285675\nv -0.294828 0.40625 -0.03125\nv -0.264585 0.40625 -0.03125\nv -0.265625 0.40625 -0.0259424\nv -0.295867 0.414062 -0.03125\nv -0.264157 0.414062 -0.03125\nv -0.296853 0.421875 -0.03125\nv -0.296875 0.422102 -0.03125\nv -0.263969 0.421875 -0.03125\nv -0.297571 0.429688 -0.03125\nv -0.263825 0.429688 -0.03125\nv -0.297965 0.4375 -0.03125\nv -0.263698 0.4375 -0.03125\nv -0.298161 0.445312 -0.03125\nv -0.263786 0.445312 -0.03125\nv -0.298295 0.453125 -0.03125\nv -0.263896 0.453125 -0.03125\nv -0.298496 0.460938 -0.03125\nv -0.26416 0.460938 -0.03125\nv -0.298718 0.46875 -0.03125\nv -0.264396 0.46875 -0.03125\nv -0.298983 0.476562 -0.03125\nv -0.264528 0.476562 -0.03125\nv -0.299269 0.484375 -0.03125\nv -0.264509 0.484375 -0.03125\nv -0.29955 0.492188 -0.03125\nv -0.264441 0.492188 -0.03125\nv -0.300094 0.5 -0.03125\nv -0.264657 0.5 -0.03125\nv -0.300768 0.507812 -0.03125\nv -0.264965 0.507812 -0.03125\nv -0.301178 0.515625 -0.03125\nv -0.265363 0.515625 -0.03125\nv -0.265625 0.519963 -0.03125\nv -0.301593 0.523438 -0.03125\nv -0.265921 0.523438 -0.03125\nv -0.30213 0.53125 -0.03125\nv -0.266547 0.53125 -0.03125\nv -0.302664 0.539062 -0.03125\nv -0.267325 0.539062 -0.03125\nv -0.303023 0.546875 -0.03125\nv -0.268151 0.546875 -0.03125\nv -0.303354 0.554688 -0.03125\nv -0.268967 0.554688 -0.03125\nv -0.303589 0.5625 -0.03125\nv -0.269855 0.5625 -0.03125\nv -0.303805 0.570312 -0.03125\nv -0.270758 0.570312 -0.03125\nv -0.304195 0.578125 -0.03125\nv -0.271564 0.578125 -0.03125\nv -0.302712 0.585938 -0.03125\nv -0.272534 0.585938 -0.03125\nv -0.273438 0.587397 -0.03125\nv -0.273438 0.585938 -0.0252541\nv -0.300545 0.59375 -0.03125\nv -0.277852 0.59375 -0.03125\nv -0.28125 0.599545 -0.03125\nv -0.297616 0.601562 -0.03125\nv -0.296875 0.603671 -0.03125\nv -0.282935 0.601562 -0.03125\nv -0.291322 0.609375 -0.03125\nv -0.287968 0.609375 -0.03125\nv -0.289062 0.611541 -0.03125\nv -0.289062 0.609375 -0.0252707\nv -0.296875 0.669474 -0.03125\nv -0.299297 0.671875 -0.03125\nv -0.304688 0.675075 -0.03125\nv -0.296154 0.671875 -0.03125\nv -0.307384 0.679688 -0.03125\nv -0.293119 0.679688 -0.03125\nv -0.311825 0.6875 -0.03125\nv -0.3125 0.68908 -0.03125\nv -0.290071 0.6875 -0.03125\nv -0.289062 0.690689 -0.03125\nv -0.315004 0.695312 -0.03125\nv -0.287644 0.695312 -0.03125\nv -0.316664 0.703125 -0.03125\nv -0.285764 0.703125 -0.03125\nv -0.3179 0.710938 -0.03125\nv -0.283647 0.710938 -0.03125\nv -0.319361 0.71875 -0.03125\nv -0.320312 0.723118 -0.03125\nv -0.283308 0.71875 -0.03125\nv -0.321014 0.726562 -0.03125\nv -0.283033 0.726562 -0.03125\nv -0.322688 0.734375 -0.03125\nv -0.282879 0.734375 -0.03125\nv -0.324238 0.742188 -0.03125\nv -0.28345 0.742188 -0.03125\nv -0.325353 0.75 -0.03125\nv -0.284058 0.75 -0.03125\nv -0.326347 0.757812 -0.03125\nv -0.284601 0.757812 -0.03125\nv -0.327623 0.765625 -0.03125\nv -0.328125 0.767919 -0.03125\nv -0.28548 0.765625 -0.03125\nv -0.329312 0.773438 -0.03125\nv -0.286632 0.773438 -0.03125\nv -0.330743 0.78125 -0.03125\nv -0.288134 0.78125 -0.03125\nv -0.289062 0.785269 -0.03125\nv -0.331828 0.789062 -0.03125\nv -0.29046 0.789062 -0.03125\nv -0.332544 0.796875 -0.03125\nv -0.293204 0.796875 -0.03125\nv -0.296875 0.804647 -0.03125\nv -0.332979 0.804688 -0.03125\nv -0.296901 0.804688 -0.03125\nv -0.296875 0.804688 -0.0304319\nv -0.332993 0.8125 -0.03125\nv -0.302167 0.8125 -0.03125\nv -0.304688 0.816483 -0.03125\nv -0.331858 0.820312 -0.03125\nv -0.328125 0.826855 -0.03125\nv -0.307099 0.820312 -0.03125\nv -0.3125 0.826716 -0.03125\nv -0.326353 0.828125 -0.03125\nv -0.314701 0.828125 -0.03125\nv -0.320312 0.829799 -0.03125\nv 0.0703125 -0.539068 -0.0234375\nv 0.078125 -0.539222 -0.0234375\nv 0.046875 -0.533827 -0.0234375\nv 0.0546875 -0.53638 -0.0234375\nv 0.0702391 -0.539062 -0.0234375\nv 0.0625 -0.53819 -0.0234375\nv 0.0813744 -0.539062 -0.0234375\nv 0.0859375 -0.53879 -0.0234375\nv 0.09375 -0.535106 -0.0234375\nv 0.0234375 -0.525083 -0.0234375\nv 0.03125 -0.528026 -0.0234375\nv 0.0400141 -0.53125 -0.0234375\nv 0.0390625 -0.530818 -0.0234375\nv 0.0390625 -0.53125 -0.0204743\nv 0.100056 -0.53125 -0.0234375\nv 0.101562 -0.530226 -0.0234375\nv 0.109375 -0.525338 -0.0234375\nv 0.0078125 -0.519099 -0.0234375\nv 0.015925 -0.523438 -0.0234375\nv 0.015625 -0.523234 -0.0234375\nv 0.112664 -0.523438 -0.0234375\nv 0.117188 -0.519523 -0.0234375\nv 0.00386238 -0.515625 -0.0234375\nv 0.120979 -0.515625 -0.0234375\nv 0.125 -0.509284 -0.0234375\nv 0.00484231 -0.507812 -0.0234375\nv 0.0078125 -0.506638 -0.0234375\nv 0.015625 -0.503748 -0.0234375\nv 0.125926 -0.507812 -0.0234375\nv 0.0224089 -0.5 -0.0234375\nv 0.0234375 -0.499506 -0.0234375\nv 0.03125 -0.494711 -0.0234375\nv 0.128385 -0.5 -0.0234375\nv 0.0349944 -0.492188 -0.0234375\nv 0.0390625 -0.489586 -0.0234375\nv 0.046875 -0.484609 -0.0234375\nv 0.130839 -0.492188 -0.0234375\nv 0.0471989 -0.484375 -0.0234375\nv 0.046875 -0.484375 -0.0196139\nv 0.0546875 -0.481363 -0.0234375\nv 0.0625 -0.478627 -0.0234375\nv 0.128058 -0.484375 -0.0234375\nv 0.125 -0.481508 -0.0234375\nv 0.0680669 -0.476562 -0.0234375\nv 0.0703125 -0.47583 -0.0234375\nv 0.078125 -0.473605 -0.0234375\nv 0.0859375 -0.471294 -0.0234375\nv 0.09375 -0.469438 -0.0234375\nv 0.101562 -0.47034 -0.0234375\nv 0.109375 -0.471437 -0.0234375\nv 0.119232 -0.476562 -0.0234375\nv 0.117188 -0.475045 -0.0234375\nv -0.289062 -0.0658508 -0.0234375\nv -0.28125 -0.0674068 -0.0234375\nv -0.273438 -0.0656748 -0.0234375\nv 0.453125 -0.0645516 -0.0234375\nv 0.460938 -0.0674145 -0.0234375\nv 0.46875 -0.066337 -0.0234375\nv 0.476562 -0.0665611 -0.0234375\nv 0.484375 -0.0647296 -0.0234375\nv -0.29273 -0.0625 -0.0234375\nv -0.270314 -0.0625 -0.0234375\nv 0.451094 -0.0625 -0.0234375\nv 0.489321 -0.0625 -0.0234375\nv 0.492188 -0.0587355 -0.0234375\nv -0.295753 -0.0546875 -0.0234375\nv -0.296875 -0.0513508 -0.0234375\nv -0.266408 -0.0546875 -0.0234375\nv -0.265625 -0.0521308 -0.0234375\nv 0.447989 -0.0546875 -0.0234375\nv 0.445312 -0.047437 -0.0234375\nv 0.493585 -0.0546875 -0.0234375\nv -0.298002 -0.046875 -0.0234375\nv -0.264139 -0.046875 -0.0234375\nv 0.445121 -0.046875 -0.0234375\nv 0.445312 -0.046875 -0.021184\nv 0.495592 -0.046875 -0.0234375\nv -0.29938 -0.0390625 -0.0234375\nv -0.262825 -0.0390625 -0.0234375\nv 0.444513 -0.0390625 -0.0234375\nv 0.49774 -0.0390625 -0.0234375\nv 0.5 -0.0321309 -0.0234375\nv -0.300058 -0.03125 -0.0234375\nv -0.261732 -0.03125 -0.0234375\nv 0.444274 -0.03125 -0.0234375\nv 0.500244 -0.03125 -0.0234375\nv -0.300556 -0.0234375 -0.0234375\nv -0.26109 -0.0234375 -0.0234375\nv 0.443798 -0.0234375 -0.0234375\nv 0.502225 -0.0234375 -0.0234375\nv -0.301904 -0.015625 -0.0234375\nv -0.259949 -0.015625 -0.0234375\nv 0.442988 -0.015625 -0.0234375\nv 0.502574 -0.015625 -0.0234375\nv -0.303461 -0.0078125 -0.0234375\nv -0.259794 -0.0078125 -0.0234375\nv 0.440423 -0.0078125 -0.0234375\nv 0.502115 -0.0078125 -0.0234375\nv -0.303973 0 -0.0234375\nv -0.25989 0 -0.0234375\nv 0.438723 0 -0.0234375\nv 0.501311 0 -0.0234375\nv -0.303955 0.0078125 -0.0234375\nv -0.258859 0.0078125 -0.0234375\nv -0.257812 0.0096592 -0.0234375\nv 0.438323 0.0078125 -0.0234375\nv 0.4375 0.012372 -0.0234375\nv 0.500713 0.0078125 -0.0234375\nv -0.302649 0.015625 -0.0234375\nv -0.252721 0.015625 -0.0234375\nv -0.25 0.0173942 -0.0234375\nv -0.242188 0.018288 -0.0234375\nv -0.234375 0.0202293 -0.0234375\nv -0.226562 0.0227163 -0.0234375\nv 0.421875 0.0213321 -0.0234375\nv 0.436501 0.015625 -0.0234375\nv 0.429688 0.0205662 -0.0234375\nv 0.500349 0.015625 -0.0234375\nv -0.301399 0.0234375 -0.0234375\nv -0.22398 0.0234375 -0.0234375\nv -0.21875 0.024727 -0.0234375\nv -0.210938 0.0258068 -0.0234375\nv -0.203125 0.0261293 -0.0234375\nv -0.195312 0.0262226 -0.0234375\nv -0.1875 0.0264171 -0.0234375\nv -0.179688 0.0265465 -0.0234375\nv -0.171875 0.0269901 -0.0234375\nv -0.164062 0.0271651 -0.0234375\nv -0.15625 0.0271805 -0.0234375\nv -0.148438 0.027176 -0.0234375\nv -0.140625 0.0270699 -0.0234375\nv -0.132812 0.0270365 -0.0234375\nv -0.125 0.027209 -0.0234375\nv -0.117188 0.0271841 -0.0234375\nv -0.109375 0.0269823 -0.0234375\nv -0.101562 0.0267923 -0.0234375\nv -0.09375 0.0265871 -0.0234375\nv -0.0859375 0.0264054 -0.0234375\nv -0.078125 0.0262329 -0.0234375\nv -0.0703125 0.0260861 -0.0234375\nv -0.0625 0.0260296 -0.0234375\nv -0.0546875 0.0259087 -0.0234375\nv -0.046875 0.0257795 -0.0234375\nv -0.0390625 0.0256451 -0.0234375\nv -0.03125 0.025395 -0.0234375\nv -0.0234375 0.0252611 -0.0234375\nv -0.015625 0.025199 -0.0234375\nv -0.0078125 0.0252216 -0.0234375\nv 0 0.0251241 -0.0234375\nv 0.0078125 0.025059 -0.0234375\nv 0.015625 0.0251312 -0.0234375\nv 0.0234375 0.0252053 -0.0234375\nv 0.03125 0.0253171 -0.0234375\nv 0.0390625 0.0252985 -0.0234375\nv 0.046875 0.0252211 -0.0234375\nv 0.0546875 0.0252235 -0.0234375\nv 0.0625 0.0252645 -0.0234375\nv 0.0703125 0.0252771 -0.0234375\nv 0.078125 0.0252196 -0.0234375\nv 0.0859375 0.0252101 -0.0234375\nv 0.09375 0.0251751 -0.0234375\nv 0.101562 0.025161 -0.0234375\nv 0.109375 0.025133 -0.0234375\nv 0.117188 0.0251424 -0.0234375\nv 0.125 0.0251625 -0.0234375\nv 0.132812 0.025158 -0.0234375\nv 0.140625 0.0250347 -0.0234375\nv 0.148438 0.0248895 -0.0234375\nv 0.15625 0.0247396 -0.0234375\nv 0.164062 0.0245648 -0.0234375\nv 0.171875 0.0244384 -0.0234375\nv 0.179688 0.0243881 -0.0234375\nv 0.1875 0.0243844 -0.0234375\nv 0.195312 0.0243802 -0.0234375\nv 0.203125 0.0243665 -0.0234375\nv 0.210938 0.0243513 -0.0234375\nv 0.21875 0.0242979 -0.0234375\nv 0.226562 0.0243147 -0.0234375\nv 0.234375 0.0243992 -0.0234375\nv 0.242188 0.0245325 -0.0234375\nv 0.25 0.0246726 -0.0234375\nv 0.257812 0.0249076 -0.0234375\nv 0.265625 0.0251227 -0.0234375\nv 0.273438 0.0253162 -0.0234375\nv 0.28125 0.0254891 -0.0234375\nv 0.289062 0.0256705 -0.0234375\nv 0.296875 0.0258476 -0.0234375\nv 0.304688 0.0260727 -0.0234375\nv 0.3125 0.0263305 -0.0234375\nv 0.320312 0.0266422 -0.0234375\nv 0.328125 0.0268448 -0.0234375\nv 0.335938 0.0269378 -0.0234375\nv 0.34375 0.0270136 -0.0234375\nv 0.351562 0.027052 -0.0234375\nv 0.359375 0.0270698 -0.0234375\nv 0.367188 0.0270665 -0.0234375\nv 0.375 0.0270811 -0.0234375\nv 0.382812 0.0268614 -0.0234375\nv 0.390625 0.0264013 -0.0234375\nv 0.398438 0.025774 -0.0234375\nv 0.40625 0.0252301 -0.0234375\nv 0.415247 0.0234375 -0.0234375\nv 0.414062 0.0237162 -0.0234375\nv 0.500242 0.0234375 -0.0234375\nv 0.5 0.0245535 -0.0234375\nv -0.300188 0.03125 -0.0234375\nv 0.498246 0.03125 -0.0234375\nv -0.298766 0.0390625 -0.0234375\nv -0.296875 0.0449512 -0.0234375\nv 0.495918 0.0390625 -0.0234375\nv -0.296249 0.046875 -0.0234375\nv 0.494224 0.046875 -0.0234375\nv 0.492188 0.0529084 -0.0234375\nv -0.293201 0.0546875 -0.0234375\nv 0.491475 0.0546875 -0.0234375\nv 0.484375 0.0599895 -0.0234375\nv -0.28943 0.0625 -0.0234375\nv -0.289062 0.0631014 -0.0234375\nv 0.445312 0.0702971 -0.0234375\nv 0.453125 0.0687787 -0.0234375\nv 0.460938 0.0679144 -0.0234375\nv 0.46875 0.067152 -0.0234375\nv 0.479274 0.0625 -0.0234375\nv 0.476562 0.0638402 -0.0234375\nv -0.282483 0.0703125 -0.0234375\nv -0.28125 0.0711322 -0.0234375\nv -0.273438 0.075379 -0.0234375\nv -0.234375 0.0769123 -0.0234375\nv -0.226562 0.0747829 -0.0234375\nv -0.21875 0.0735003 -0.0234375\nv -0.210938 0.0727323 -0.0234375\nv -0.203125 0.0732634 -0.0234375\nv -0.195312 0.0738389 -0.0234375\nv -0.1875 0.074364 -0.0234375\nv -0.179688 0.0747365 -0.0234375\nv -0.171875 0.0750315 -0.0234375\nv -0.164062 0.0753313 -0.0234375\nv -0.15625 0.0753164 -0.0234375\nv -0.148438 0.0753175 -0.0234375\nv -0.140625 0.0752028 -0.0234375\nv -0.132812 0.0752906 -0.0234375\nv -0.125 0.0753703 -0.0234375\nv -0.117188 0.0754163 -0.0234375\nv -0.109375 0.075354 -0.0234375\nv -0.101562 0.0752152 -0.0234375\nv -0.09375 0.0751534 -0.0234375\nv -0.0859375 0.075143 -0.0234375\nv -0.078125 0.0751047 -0.0234375\nv -0.0703125 0.0750382 -0.0234375\nv -0.0625 0.0749729 -0.0234375\nv -0.0546875 0.0747929 -0.0234375\nv -0.046875 0.0745926 -0.0234375\nv -0.0390625 0.074423 -0.0234375\nv -0.03125 0.0742651 -0.0234375\nv -0.0234375 0.0740678 -0.0234375\nv -0.015625 0.0738742 -0.0234375\nv -0.0078125 0.0737324 -0.0234375\nv 0 0.073632 -0.0234375\nv 0.0078125 0.0734703 -0.0234375\nv 0.015625 0.0733449 -0.0234375\nv 0.0234375 0.0732867 -0.0234375\nv 0.03125 0.0732742 -0.0234375\nv 0.0390625 0.0732611 -0.0234375\nv 0.046875 0.0732464 -0.0234375\nv 0.0546875 0.0733127 -0.0234375\nv 0.0625 0.0734041 -0.0234375\nv 0.0703125 0.0734292 -0.0234375\nv 0.078125 0.073489 -0.0234375\nv 0.0859375 0.0735265 -0.0234375\nv 0.09375 0.0734861 -0.0234375\nv 0.101562 0.0733275 -0.0234375\nv 0.109375 0.0731962 -0.0234375\nv 0.117188 0.0730982 -0.0234375\nv 0.125 0.0730054 -0.0234375\nv 0.132812 0.0729441 -0.0234375\nv 0.140625 0.0728354 -0.0234375\nv 0.148438 0.0727693 -0.0234375\nv 0.15625 0.0727179 -0.0234375\nv 0.164062 0.0726941 -0.0234375\nv 0.171875 0.0727174 -0.0234375\nv 0.179688 0.0727447 -0.0234375\nv 0.1875 0.072743 -0.0234375\nv 0.195312 0.0727561 -0.0234375\nv 0.203125 0.0728438 -0.0234375\nv 0.210938 0.0728439 -0.0234375\nv 0.21875 0.0728658 -0.0234375\nv 0.226562 0.0728871 -0.0234375\nv 0.234375 0.0729001 -0.0234375\nv 0.242188 0.0729127 -0.0234375\nv 0.25 0.0729688 -0.0234375\nv 0.257812 0.073083 -0.0234375\nv 0.265625 0.0731686 -0.0234375\nv 0.273438 0.0732521 -0.0234375\nv 0.28125 0.0733704 -0.0234375\nv 0.289062 0.0734701 -0.0234375\nv 0.296875 0.0734951 -0.0234375\nv 0.304688 0.0735034 -0.0234375\nv 0.3125 0.0734902 -0.0234375\nv 0.320312 0.0734688 -0.0234375\nv 0.328125 0.0734861 -0.0234375\nv 0.335938 0.073498 -0.0234375\nv 0.34375 0.0735025 -0.0234375\nv 0.351562 0.0734802 -0.0234375\nv 0.359375 0.0734045 -0.0234375\nv 0.367188 0.073263 -0.0234375\nv 0.375 0.0729016 -0.0234375\nv 0.382812 0.0724108 -0.0234375\nv 0.390625 0.0721876 -0.0234375\nv 0.398438 0.0720621 -0.0234375\nv 0.40625 0.0719255 -0.0234375\nv 0.414062 0.0717359 -0.0234375\nv 0.421875 0.0715324 -0.0234375\nv 0.429688 0.0714031 -0.0234375\nv 0.445142 0.0703125 -0.0234375\nv 0.4375 0.0709583 -0.0234375\nv -0.269408 0.078125 -0.0234375\nv -0.265625 0.0801184 -0.0234375\nv -0.257812 0.0831327 -0.0234375\nv -0.25 0.0824241 -0.0234375\nv -0.238542 0.078125 -0.0234375\nv -0.242188 0.0792974 -0.0234375\nv -0.273438 0.169746 -0.0234375\nv -0.265625 0.168533 -0.0234375\nv -0.289062 0.176131 -0.0234375\nv -0.279987 0.171875 -0.0234375\nv -0.28125 0.172317 -0.0234375\nv -0.28125 0.171875 -0.0195429\nv -0.260091 0.171875 -0.0234375\nv -0.257812 0.173379 -0.0234375\nv -0.293791 0.179688 -0.0234375\nv -0.296875 0.185898 -0.0234375\nv -0.254029 0.179688 -0.0234375\nv -0.25 0.18743 -0.0234375\nv -0.297336 0.1875 -0.0234375\nv -0.249964 0.1875 -0.0234375\nv -0.298076 0.195312 -0.0234375\nv -0.24592 0.195312 -0.0234375\nv -0.298357 0.203125 -0.0234375\nv -0.243851 0.203125 -0.0234375\nv -0.29855 0.210938 -0.0234375\nv -0.242988 0.210938 -0.0234375\nv -0.298846 0.21875 -0.0234375\nv -0.242755 0.21875 -0.0234375\nv -0.299181 0.226562 -0.0234375\nv -0.242954 0.226562 -0.0234375\nv -0.299429 0.234375 -0.0234375\nv -0.243101 0.234375 -0.0234375\nv -0.299525 0.242188 -0.0234375\nv -0.243127 0.242188 -0.0234375\nv -0.299565 0.25 -0.0234375\nv -0.243197 0.25 -0.0234375\nv -0.299494 0.257812 -0.0234375\nv -0.243728 0.257812 -0.0234375\nv -0.299062 0.265625 -0.0234375\nv -0.24408 0.265625 -0.0234375\nv -0.297951 0.273438 -0.0234375\nv -0.296875 0.278739 -0.0234375\nv -0.244585 0.273438 -0.0234375\nv -0.296308 0.28125 -0.0234375\nv -0.245862 0.28125 -0.0234375\nv -0.294923 0.289062 -0.0234375\nv -0.248335 0.289062 -0.0234375\nv -0.25 0.293474 -0.0234375\nv -0.293329 0.296875 -0.0234375\nv -0.251466 0.296875 -0.0234375\nv -0.291797 0.304688 -0.0234375\nv -0.2545 0.304688 -0.0234375\nv -0.290765 0.3125 -0.0234375\nv -0.257468 0.3125 -0.0234375\nv -0.257812 0.31375 -0.0234375\nv -0.290241 0.320312 -0.0234375\nv -0.259575 0.320312 -0.0234375\nv -0.289586 0.328125 -0.0234375\nv -0.289062 0.332643 -0.0234375\nv -0.289062 0.328125 -0.0196105\nv -0.26149 0.328125 -0.0234375\nv -0.288615 0.335938 -0.0234375\nv -0.26359 0.335938 -0.0234375\nv -0.265625 0.342232 -0.0234375\nv -0.288173 0.34375 -0.0234375\nv -0.266188 0.34375 -0.0234375\nv -0.288298 0.351562 -0.0234375\nv -0.269105 0.351562 -0.0234375\nv -0.273438 0.351562 -0.0164411\nv -0.288664 0.359375 -0.0234375\nv -0.289062 0.363064 -0.0234375\nv -0.269639 0.359375 -0.0234375\nv -0.273438 0.359375 -0.0169995\nv -0.289369 0.367188 -0.0234375\nv -0.289062 0.367188 -0.0224594\nv -0.270032 0.367188 -0.0234375\nv -0.273438 0.367188 -0.0174434\nv -0.29032 0.375 -0.0234375\nv -0.289062 0.375 -0.0190763\nv -0.269879 0.375 -0.0234375\nv -0.273438 0.375 -0.0163514\nv -0.291257 0.382812 -0.0234375\nv -0.268839 0.382812 -0.0234375\nv -0.292079 0.390625 -0.0234375\nv -0.267667 0.390625 -0.0234375\nv -0.293092 0.398438 -0.0234375\nv -0.266892 0.398438 -0.0234375\nv -0.294208 0.40625 -0.0234375\nv -0.266125 0.40625 -0.0234375\nv -0.265625 0.412218 -0.0234375\nv -0.295178 0.414062 -0.0234375\nv -0.265467 0.414062 -0.0234375\nv -0.265625 0.414062 -0.0224726\nv -0.296152 0.421875 -0.0234375\nv -0.296875 0.429345 -0.0234375\nv -0.265352 0.421875 -0.0234375\nv -0.265625 0.421875 -0.021923\nv -0.296907 0.429688 -0.0234375\nv -0.296875 0.429688 -0.0231663\nv -0.265228 0.429688 -0.0234375\nv -0.265625 0.429688 -0.0214293\nv -0.297401 0.4375 -0.0234375\nv -0.296875 0.4375 -0.0180257\nv -0.265171 0.4375 -0.0234375\nv -0.265625 0.4375 -0.0214359\nv -0.297603 0.445312 -0.0234375\nv -0.265193 0.445312 -0.0234375\nv -0.265625 0.445312 -0.0215951\nv -0.297835 0.453125 -0.0234375\nv -0.265126 0.453125 -0.0234375\nv -0.265625 0.453125 -0.021283\nv -0.298109 0.460938 -0.0234375\nv -0.26525 0.460938 -0.0234375\nv -0.265625 0.460938 -0.0216959\nv -0.298369 0.46875 -0.0234375\nv -0.265327 0.46875 -0.0234375\nv -0.265625 0.46875 -0.0217778\nv -0.298697 0.476562 -0.0234375\nv -0.265288 0.476562 -0.0234375\nv -0.265625 0.476562 -0.0206304\nv -0.299024 0.484375 -0.0234375\nv -0.265073 0.484375 -0.0234375\nv -0.265625 0.484375 -0.0175452\nv -0.299334 0.492188 -0.0234375\nv -0.265 0.492188 -0.0234375\nv -0.299879 0.5 -0.0234375\nv -0.265192 0.5 -0.0234375\nv -0.300494 0.507812 -0.0234375\nv -0.265349 0.507812 -0.0234375\nv -0.300887 0.515625 -0.0234375\nv -0.265606 0.515625 -0.0234375\nv -0.265625 0.515957 -0.0234375\nv -0.265625 0.515625 -0.0229195\nv -0.301304 0.523438 -0.0234375\nv -0.26623 0.523438 -0.0234375\nv -0.301884 0.53125 -0.0234375\nv -0.266774 0.53125 -0.0234375\nv -0.302402 0.539062 -0.0234375\nv -0.267554 0.539062 -0.0234375\nv -0.302793 0.546875 -0.0234375\nv -0.268362 0.546875 -0.0234375\nv -0.303165 0.554688 -0.0234375\nv -0.269141 0.554688 -0.0234375\nv -0.303445 0.5625 -0.0234375\nv -0.270013 0.5625 -0.0234375\nv -0.303709 0.570312 -0.0234375\nv -0.270944 0.570312 -0.0234375\nv -0.303893 0.578125 -0.0234375\nv -0.271772 0.578125 -0.0234375\nv -0.273438 0.584764 -0.0234375\nv -0.301923 0.585938 -0.0234375\nv -0.27379 0.585938 -0.0234375\nv -0.273438 0.585938 -0.0175153\nv -0.299986 0.59375 -0.0234375\nv -0.278796 0.59375 -0.0234375\nv -0.28125 0.597671 -0.0234375\nv -0.296956 0.601562 -0.0234375\nv -0.296875 0.601791 -0.0234375\nv -0.296875 0.601562 -0.0227806\nv -0.284446 0.601562 -0.0234375\nv -0.289062 0.608771 -0.0234375\nv -0.296875 0.671488 -0.0234375\nv -0.297215 0.671875 -0.0234375\nv -0.304688 0.677311 -0.0234375\nv -0.296755 0.671875 -0.0234375\nv -0.296875 0.671875 -0.021921\nv -0.305934 0.679688 -0.0234375\nv -0.293946 0.679688 -0.0234375\nv -0.309871 0.6875 -0.0234375\nv -0.3125 0.694131 -0.0234375\nv -0.291217 0.6875 -0.0234375\nv -0.289062 0.693401 -0.0234375\nv -0.31304 0.695312 -0.0234375\nv -0.3125 0.695312 -0.0217841\nv -0.288429 0.695312 -0.0234375\nv -0.289062 0.695312 -0.0183148\nv -0.315699 0.703125 -0.0234375\nv -0.287025 0.703125 -0.0234375\nv -0.317282 0.710938 -0.0234375\nv -0.284436 0.710938 -0.0234375\nv -0.318901 0.71875 -0.0234375\nv -0.320312 0.725293 -0.0234375\nv -0.283556 0.71875 -0.0234375\nv -0.320568 0.726562 -0.0234375\nv -0.320312 0.726562 -0.0163322\nv -0.283226 0.726562 -0.0234375\nv -0.322314 0.734375 -0.0234375\nv -0.28305 0.734375 -0.0234375\nv -0.324014 0.742188 -0.0234375\nv -0.283611 0.742188 -0.0234375\nv -0.325184 0.75 -0.0234375\nv -0.284171 0.75 -0.0234375\nv -0.326212 0.757812 -0.0234375\nv -0.284478 0.757812 -0.0234375\nv -0.327531 0.765625 -0.0234375\nv -0.328125 0.768278 -0.0234375\nv -0.285319 0.765625 -0.0234375\nv -0.329267 0.773438 -0.0234375\nv -0.286444 0.773438 -0.0234375\nv -0.33071 0.78125 -0.0234375\nv -0.288 0.78125 -0.0234375\nv -0.289062 0.785813 -0.0234375\nv -0.331814 0.789062 -0.0234375\nv -0.290299 0.789062 -0.0234375\nv -0.332596 0.796875 -0.0234375\nv -0.293035 0.796875 -0.0234375\nv -0.33315 0.804688 -0.0234375\nv -0.296697 0.804688 -0.0234375\nv -0.296875 0.805043 -0.0234375\nv -0.333239 0.8125 -0.0234375\nv -0.301453 0.8125 -0.0234375\nv -0.304688 0.817407 -0.0234375\nv -0.33233 0.820312 -0.0234375\nv -0.328125 0.828053 -0.0234375\nv -0.306554 0.820312 -0.0234375\nv -0.3125 0.827498 -0.0234375\nv -0.328022 0.828125 -0.0234375\nv -0.328125 0.828125 -0.0225427\nv -0.313485 0.828125 -0.0234375\nv -0.320312 0.830179 -0.0234375\nv -0.3125 0.828125 -0.0171356\nv 0.0703125 -0.539359 -0.015625\nv 0.078125 -0.539211 -0.015625\nv 0.0390625 -0.531852 -0.015625\nv 0.046875 -0.5345 -0.015625\nv 0.0546875 -0.536818 -0.015625\nv 0.0636078 -0.539062 -0.015625\nv 0.0625 -0.538994 -0.015625\nv 0.0625 -0.539062 -0.0147784\nv 0.0786644 -0.539062 -0.015625\nv 0.078125 -0.539062 -0.0129822\nv 0.0859375 -0.536932 -0.015625\nv 0.09375 -0.533435 -0.015625\nv 0.0234375 -0.525491 -0.015625\nv 0.0374632 -0.53125 -0.015625\nv 0.03125 -0.528543 -0.015625\nv 0.0973294 -0.53125 -0.015625\nv 0.101562 -0.528591 -0.015625\nv 0.109375 -0.523473 -0.015625\nv 0.0078125 -0.517098 -0.015625\nv 0.015723 -0.523438 -0.015625\nv 0.015625 -0.523365 -0.015625\nv 0.015625 -0.523438 -0.0152655\nv 0.109441 -0.523438 -0.015625\nv 0.109375 -0.523438 -0.0152123\nv 0.117188 -0.517487 -0.015625\nv 0.00588246 -0.515625 -0.015625\nv 0.119332 -0.515625 -0.015625\nv 0.125 -0.509058 -0.015625\nv 0.00582345 -0.507812 -0.015625\nv 0.0078125 -0.507133 -0.015625\nv 0.015625 -0.50287 -0.015625\nv 0.126082 -0.507812 -0.015625\nv 0.0204649 -0.5 -0.015625\nv 0.0234375 -0.498458 -0.015625\nv 0.03125 -0.493562 -0.015625\nv 0.128487 -0.5 -0.015625\nv 0.0333392 -0.492188 -0.015625\nv 0.0390625 -0.488689 -0.015625\nv 0.130354 -0.492188 -0.015625\nv 0.046482 -0.484375 -0.015625\nv 0.046875 -0.484229 -0.015625\nv 0.046875 -0.484375 -0.0134888\nv 0.0546875 -0.481266 -0.015625\nv 0.0625 -0.478496 -0.015625\nv 0.127426 -0.484375 -0.015625\nv 0.125 -0.4821 -0.015625\nv 0.0678932 -0.476562 -0.015625\nv 0.0703125 -0.475804 -0.015625\nv 0.078125 -0.473556 -0.015625\nv 0.0859375 -0.471411 -0.015625\nv 0.09375 -0.470053 -0.015625\nv 0.101562 -0.471085 -0.015625\nv 0.109375 -0.472483 -0.015625\nv 0.118505 -0.476562 -0.015625\nv 0.117188 -0.475649 -0.015625\nv -0.289062 -0.0660543 -0.015625\nv -0.28125 -0.0676009 -0.015625\nv -0.273438 -0.0658708 -0.015625\nv 0.453125 -0.0639571 -0.015625\nv 0.460938 -0.06727 -0.015625\nv 0.46875 -0.066475 -0.015625\nv 0.476562 -0.066966 -0.015625\nv 0.484375 -0.0652648 -0.015625\nv -0.292996 -0.0625 -0.015625\nv -0.270142 -0.0625 -0.015625\nv 0.451739 -0.0625 -0.015625\nv 0.490455 -0.0625 -0.015625\nv 0.492188 -0.0602792 -0.015625\nv -0.296044 -0.0546875 -0.015625\nv -0.296875 -0.0522062 -0.015625\nv -0.266283 -0.0546875 -0.015625\nv -0.265625 -0.0524127 -0.015625\nv 0.448742 -0.0546875 -0.015625\nv 0.494165 -0.0546875 -0.015625\nv -0.298213 -0.046875 -0.015625\nv -0.264156 -0.046875 -0.015625\nv 0.445823 -0.046875 -0.015625\nv 0.445312 -0.0421019 -0.015625\nv 0.496254 -0.046875 -0.015625\nv -0.299533 -0.0390625 -0.015625\nv -0.26294 -0.0390625 -0.015625\nv 0.445089 -0.0390625 -0.015625\nv 0.445312 -0.0390625 -0.0136891\nv 0.498797 -0.0390625 -0.015625\nv 0.5 -0.035556 -0.015625\nv 0.5 -0.0390625 -0.00906894\nv -0.300211 -0.03125 -0.015625\nv -0.261884 -0.03125 -0.015625\nv 0.444834 -0.03125 -0.015625\nv 0.445312 -0.03125 -0.0105709\nv 0.501242 -0.03125 -0.015625\nv -0.300713 -0.0234375 -0.015625\nv -0.261228 -0.0234375 -0.015625\nv 0.44402 -0.0234375 -0.015625\nv 0.503082 -0.0234375 -0.015625\nv -0.30209 -0.015625 -0.015625\nv -0.260038 -0.015625 -0.015625\nv 0.443209 -0.015625 -0.015625\nv 0.503103 -0.015625 -0.015625\nv -0.303648 -0.0078125 -0.015625\nv -0.259844 -0.0078125 -0.015625\nv 0.440548 -0.0078125 -0.015625\nv 0.50252 -0.0078125 -0.015625\nv -0.304039 0 -0.015625\nv -0.259757 0 -0.015625\nv 0.43851 0 -0.015625\nv 0.501746 0 -0.015625\nv -0.303906 0.0078125 -0.015625\nv -0.258829 0.0078125 -0.015625\nv -0.257812 0.00962816 -0.015625\nv 0.438046 0.0078125 -0.015625\nv 0.4375 0.0107523 -0.015625\nv 0.501129 0.0078125 -0.015625\nv -0.302596 0.015625 -0.015625\nv -0.2527 0.015625 -0.015625\nv -0.25 0.0173348 -0.015625\nv -0.242188 0.018329 -0.015625\nv -0.234375 0.0202552 -0.015625\nv -0.226562 0.0227444 -0.015625\nv 0.421875 0.0212533 -0.015625\nv 0.435978 0.015625 -0.015625\nv 0.429688 0.0204148 -0.015625\nv 0.500676 0.015625 -0.015625\nv -0.301372 0.0234375 -0.015625\nv -0.223968 0.0234375 -0.015625\nv -0.21875 0.0246655 -0.015625\nv -0.210938 0.025749 -0.015625\nv -0.203125 0.0260574 -0.015625\nv -0.195312 0.0261302 -0.015625\nv -0.1875 0.02632 -0.015625\nv -0.179688 0.026457 -0.015625\nv -0.171875 0.0269421 -0.015625\nv -0.164062 0.0271124 -0.015625\nv -0.15625 0.0271314 -0.015625\nv -0.148438 0.027107 -0.015625\nv -0.140625 0.0270101 -0.015625\nv -0.132812 0.026953 -0.015625\nv -0.125 0.0271724 -0.015625\nv -0.117188 0.0271876 -0.015625\nv -0.109375 0.0269733 -0.015625\nv -0.101562 0.0267921 -0.015625\nv -0.09375 0.0266094 -0.015625\nv -0.0859375 0.0264374 -0.015625\nv -0.078125 0.0262819 -0.015625\nv -0.0703125 0.026149 -0.015625\nv -0.0625 0.0260846 -0.015625\nv -0.0546875 0.0259864 -0.015625\nv -0.046875 0.0258368 -0.015625\nv -0.0390625 0.0256831 -0.015625\nv -0.03125 0.0254395 -0.015625\nv -0.0234375 0.0251516 -0.015625\nv -0.015625 0.0250329 -0.015625\nv -0.0078125 0.0250864 -0.015625\nv 0 0.0250102 -0.015625\nv 0.0078125 0.0248824 -0.015625\nv 0.015625 0.0248483 -0.015625\nv 0.0234375 0.0249064 -0.015625\nv 0.03125 0.025026 -0.015625\nv 0.0390625 0.0250624 -0.015625\nv 0.046875 0.0250573 -0.015625\nv 0.0546875 0.025072 -0.015625\nv 0.0625 0.0251212 -0.015625\nv 0.0703125 0.0251555 -0.015625\nv 0.078125 0.0251086 -0.015625\nv 0.0859375 0.0250858 -0.015625\nv 0.09375 0.0250664 -0.015625\nv 0.101562 0.024996 -0.015625\nv 0.109375 0.0249859 -0.015625\nv 0.117188 0.0250156 -0.015625\nv 0.125 0.0250554 -0.015625\nv 0.132812 0.0250723 -0.015625\nv 0.140625 0.0249589 -0.015625\nv 0.148438 0.0248152 -0.015625\nv 0.15625 0.0246625 -0.015625\nv 0.164062 0.0245085 -0.015625\nv 0.171875 0.0244147 -0.015625\nv 0.179688 0.0243899 -0.015625\nv 0.1875 0.0243987 -0.015625\nv 0.195312 0.0244084 -0.015625\nv 0.203125 0.0244048 -0.015625\nv 0.210938 0.0243918 -0.015625\nv 0.21875 0.0244029 -0.015625\nv 0.226562 0.0242959 -0.015625\nv 0.234375 0.0244674 -0.015625\nv 0.242188 0.0246124 -0.015625\nv 0.25 0.0247553 -0.015625\nv 0.257812 0.0249541 -0.015625\nv 0.265625 0.025155 -0.015625\nv 0.273438 0.0253458 -0.015625\nv 0.28125 0.0255319 -0.015625\nv 0.289062 0.0257265 -0.015625\nv 0.296875 0.0259143 -0.015625\nv 0.304688 0.0261544 -0.015625\nv 0.3125 0.026431 -0.015625\nv 0.320312 0.0267391 -0.015625\nv 0.328125 0.0268989 -0.015625\nv 0.335938 0.0269754 -0.015625\nv 0.34375 0.0270437 -0.015625\nv 0.351562 0.0270736 -0.015625\nv 0.359375 0.0270894 -0.015625\nv 0.367188 0.0270904 -0.015625\nv 0.375 0.027123 -0.015625\nv 0.382812 0.0269243 -0.015625\nv 0.390625 0.0264647 -0.015625\nv 0.398438 0.025849 -0.015625\nv 0.40625 0.0252336 -0.015625\nv 0.41516 0.0234375 -0.015625\nv 0.414062 0.0236961 -0.015625\nv 0.500467 0.0234375 -0.015625\nv 0.5 0.0254968 -0.015625\nv -0.300222 0.03125 -0.015625\nv 0.498444 0.03125 -0.015625\nv -0.298747 0.0390625 -0.015625\nv -0.296875 0.0454892 -0.015625\nv 0.496128 0.0390625 -0.015625\nv -0.296463 0.046875 -0.015625\nv 0.49438 0.046875 -0.015625\nv 0.492188 0.0533268 -0.015625\nv -0.29343 0.0546875 -0.015625\nv 0.491641 0.0546875 -0.015625\nv 0.484375 0.060202 -0.015625\nv -0.289972 0.0625 -0.015625\nv -0.289062 0.063925 -0.015625\nv 0.445312 0.0700295 -0.015625\nv 0.453125 0.0686692 -0.015625\nv 0.460938 0.0679197 -0.015625\nv 0.46875 0.0671403 -0.015625\nv 0.479709 0.0625 -0.015625\nv 0.476562 0.0639887 -0.015625\nv -0.28266 0.0703125 -0.015625\nv -0.28125 0.0711725 -0.015625\nv -0.273438 0.0748372 -0.015625\nv -0.234375 0.076962 -0.015625\nv -0.226562 0.0748662 -0.015625\nv -0.21875 0.0735776 -0.015625\nv -0.210938 0.0728574 -0.015625\nv -0.203125 0.0733652 -0.015625\nv -0.195312 0.0739529 -0.015625\nv -0.1875 0.074429 -0.015625\nv -0.179688 0.0747751 -0.015625\nv -0.171875 0.0750342 -0.015625\nv -0.164062 0.0752965 -0.015625\nv -0.15625 0.0752767 -0.015625\nv -0.148438 0.0752853 -0.015625\nv -0.140625 0.0751923 -0.015625\nv -0.132812 0.0752618 -0.015625\nv -0.125 0.0753296 -0.015625\nv -0.117188 0.0753785 -0.015625\nv -0.109375 0.0753175 -0.015625\nv -0.101562 0.0751985 -0.015625\nv -0.09375 0.0751415 -0.015625\nv -0.0859375 0.0751039 -0.015625\nv -0.078125 0.0750534 -0.015625\nv -0.0703125 0.0750021 -0.015625\nv -0.0625 0.0749097 -0.015625\nv -0.0546875 0.074724 -0.015625\nv -0.046875 0.0745239 -0.015625\nv -0.0390625 0.0743627 -0.015625\nv -0.03125 0.0742008 -0.015625\nv -0.0234375 0.0739885 -0.015625\nv -0.015625 0.0737879 -0.015625\nv -0.0078125 0.0736728 -0.015625\nv 0 0.0736043 -0.015625\nv 0.0078125 0.0735008 -0.015625\nv 0.015625 0.0733405 -0.015625\nv 0.0234375 0.0732067 -0.015625\nv 0.03125 0.0731999 -0.015625\nv 0.0390625 0.0731287 -0.015625\nv 0.046875 0.073134 -0.015625\nv 0.0546875 0.0731805 -0.015625\nv 0.0625 0.0732293 -0.015625\nv 0.0703125 0.0732357 -0.015625\nv 0.078125 0.0732706 -0.015625\nv 0.0859375 0.0733043 -0.015625\nv 0.09375 0.0732921 -0.015625\nv 0.101562 0.0731658 -0.015625\nv 0.109375 0.0730117 -0.015625\nv 0.117188 0.0729631 -0.015625\nv 0.125 0.0729148 -0.015625\nv 0.132812 0.0728663 -0.015625\nv 0.140625 0.072792 -0.015625\nv 0.148438 0.0727254 -0.015625\nv 0.15625 0.0726713 -0.015625\nv 0.164062 0.0726453 -0.015625\nv 0.171875 0.0726928 -0.015625\nv 0.179688 0.0727285 -0.015625\nv 0.1875 0.0727761 -0.015625\nv 0.195312 0.0727969 -0.015625\nv 0.203125 0.072851 -0.015625\nv 0.210938 0.0728732 -0.015625\nv 0.21875 0.0729035 -0.015625\nv 0.226562 0.0729316 -0.015625\nv 0.234375 0.072954 -0.015625\nv 0.242188 0.0729548 -0.015625\nv 0.25 0.0729702 -0.015625\nv 0.257812 0.0730546 -0.015625\nv 0.265625 0.0731477 -0.015625\nv 0.273438 0.0732284 -0.015625\nv 0.28125 0.0733329 -0.015625\nv 0.289062 0.0734124 -0.015625\nv 0.296875 0.0734204 -0.015625\nv 0.304688 0.0734263 -0.015625\nv 0.3125 0.0733902 -0.015625\nv 0.320312 0.0733768 -0.015625\nv 0.328125 0.0733956 -0.015625\nv 0.335938 0.0734166 -0.015625\nv 0.34375 0.0734163 -0.015625\nv 0.351562 0.0733915 -0.015625\nv 0.359375 0.0733151 -0.015625\nv 0.367188 0.0731539 -0.015625\nv 0.375 0.072788 -0.015625\nv 0.382812 0.0723102 -0.015625\nv 0.390625 0.0720746 -0.015625\nv 0.398438 0.0719208 -0.015625\nv 0.40625 0.0717955 -0.015625\nv 0.414062 0.0715993 -0.015625\nv 0.421875 0.071378 -0.015625\nv 0.429688 0.0712099 -0.015625\nv 0.442127 0.0703125 -0.015625\nv 0.4375 0.0707006 -0.015625\nv -0.268508 0.078125 -0.015625\nv -0.265625 0.0797741 -0.015625\nv -0.257812 0.0829008 -0.015625\nv -0.25 0.0819189 -0.015625\nv -0.238601 0.078125 -0.015625\nv -0.242188 0.0792189 -0.015625\nv -0.28125 0.17149 -0.015625\nv -0.273438 0.168471 -0.015625\nv -0.265625 0.167193 -0.015625\nv -0.265625 0.164062 -0.00795104\nv -0.282259 0.171875 -0.015625\nv -0.289062 0.175242 -0.015625\nv -0.258036 0.171875 -0.015625\nv -0.257812 0.172031 -0.015625\nv -0.257812 0.171875 -0.0152654\nv -0.294698 0.179688 -0.015625\nv -0.296875 0.185414 -0.015625\nv -0.253049 0.179688 -0.015625\nv -0.25 0.185476 -0.015625\nv -0.297357 0.1875 -0.015625\nv -0.249044 0.1875 -0.015625\nv -0.298024 0.195312 -0.015625\nv -0.245283 0.195312 -0.015625\nv -0.298261 0.203125 -0.015625\nv -0.243238 0.203125 -0.015625\nv -0.298568 0.210938 -0.015625\nv -0.242764 0.210938 -0.015625\nv -0.298949 0.21875 -0.015625\nv -0.242659 0.21875 -0.015625\nv -0.299194 0.226562 -0.015625\nv -0.242949 0.226562 -0.015625\nv -0.299354 0.234375 -0.015625\nv -0.242986 0.234375 -0.015625\nv -0.299562 0.242188 -0.015625\nv -0.243025 0.242188 -0.015625\nv -0.299686 0.25 -0.015625\nv -0.243177 0.25 -0.015625\nv -0.299671 0.257812 -0.015625\nv -0.243659 0.257812 -0.015625\nv -0.299188 0.265625 -0.015625\nv -0.244 0.265625 -0.015625\nv -0.298057 0.273438 -0.015625\nv -0.296875 0.279259 -0.015625\nv -0.244623 0.273438 -0.015625\nv -0.29642 0.28125 -0.015625\nv -0.246026 0.28125 -0.015625\nv -0.29487 0.289062 -0.015625\nv -0.248486 0.289062 -0.015625\nv -0.25 0.29342 -0.015625\nv -0.2931 0.296875 -0.015625\nv -0.25134 0.296875 -0.015625\nv -0.291375 0.304688 -0.015625\nv -0.254065 0.304688 -0.015625\nv -0.290256 0.3125 -0.015625\nv -0.256746 0.3125 -0.015625\nv -0.257812 0.316985 -0.015625\nv -0.28968 0.320312 -0.015625\nv -0.289062 0.324468 -0.015625\nv -0.258656 0.320312 -0.015625\nv -0.257812 0.320312 -0.0104937\nv -0.288486 0.328125 -0.015625\nv -0.260778 0.328125 -0.015625\nv -0.286549 0.335938 -0.015625\nv -0.264286 0.335938 -0.015625\nv -0.265625 0.337692 -0.015625\nv -0.284957 0.34375 -0.015625\nv -0.28125 0.34375 -0.0114868\nv -0.270296 0.34375 -0.015625\nv -0.273438 0.350101 -0.015625\nv -0.28368 0.351562 -0.015625\nv -0.275699 0.351562 -0.015625\nv -0.28125 0.351562 -0.0134484\nv -0.283774 0.359375 -0.015625\nv -0.276875 0.359375 -0.015625\nv -0.28125 0.359375 -0.0137378\nv -0.283787 0.367188 -0.015625\nv -0.277845 0.367188 -0.015625\nv -0.28125 0.367188 -0.0138804\nv -0.286845 0.375 -0.015625\nv -0.289062 0.380928 -0.015625\nv -0.27469 0.375 -0.015625\nv -0.28125 0.375 -0.0116132\nv -0.273438 0.377583 -0.015625\nv -0.289414 0.382812 -0.015625\nv -0.289062 0.382812 -0.014795\nv -0.28125 0.382812 -0.00814246\nv -0.272662 0.382812 -0.015625\nv -0.273438 0.382812 -0.0122677\nv -0.290715 0.390625 -0.015625\nv -0.289062 0.390625 -0.00892712\nv -0.271183 0.390625 -0.015625\nv -0.292011 0.398438 -0.015625\nv -0.269689 0.398438 -0.015625\nv -0.293232 0.40625 -0.015625\nv -0.267903 0.40625 -0.015625\nv -0.294186 0.414062 -0.015625\nv -0.266816 0.414062 -0.015625\nv -0.295098 0.421875 -0.015625\nv -0.266865 0.421875 -0.015625\nv -0.295873 0.429688 -0.015625\nv -0.266924 0.429688 -0.015625\nv -0.296605 0.4375 -0.015625\nv -0.296875 0.442641 -0.015625\nv -0.2671 0.4375 -0.015625\nv -0.296998 0.445312 -0.015625\nv -0.296875 0.445312 -0.0148517\nv -0.267149 0.445312 -0.015625\nv -0.297272 0.453125 -0.015625\nv -0.296875 0.453125 -0.0131818\nv -0.26706 0.453125 -0.015625\nv -0.29757 0.460938 -0.015625\nv -0.296875 0.460938 -0.0110375\nv -0.267083 0.460938 -0.015625\nv -0.297935 0.46875 -0.015625\nv -0.266925 0.46875 -0.015625\nv -0.298346 0.476562 -0.015625\nv -0.266367 0.476562 -0.015625\nv -0.298716 0.484375 -0.015625\nv -0.265858 0.484375 -0.015625\nv -0.265625 0.489092 -0.015625\nv -0.299002 0.492188 -0.015625\nv -0.265508 0.492188 -0.015625\nv -0.299523 0.5 -0.015625\nv -0.265465 0.5 -0.015625\nv -0.300168 0.507812 -0.015625\nv -0.265613 0.507812 -0.015625\nv -0.265625 0.508152 -0.015625\nv -0.300617 0.515625 -0.015625\nv -0.266001 0.515625 -0.015625\nv -0.301136 0.523438 -0.015625\nv -0.266512 0.523438 -0.015625\nv -0.30173 0.53125 -0.015625\nv -0.266981 0.53125 -0.015625\nv -0.302258 0.539062 -0.015625\nv -0.267608 0.539062 -0.015625\nv -0.302682 0.546875 -0.015625\nv -0.268279 0.546875 -0.015625\nv -0.303079 0.554688 -0.015625\nv -0.268941 0.554688 -0.015625\nv -0.303359 0.5625 -0.015625\nv -0.269689 0.5625 -0.015625\nv -0.303604 0.570312 -0.015625\nv -0.270528 0.570312 -0.015625\nv -0.30321 0.578125 -0.015625\nv -0.271259 0.578125 -0.015625\nv -0.301178 0.585938 -0.015625\nv -0.273331 0.585938 -0.015625\nv -0.273438 0.586153 -0.015625\nv -0.299261 0.59375 -0.015625\nv -0.296875 0.599562 -0.015625\nv -0.277732 0.59375 -0.015625\nv -0.28125 0.598255 -0.015625\nv -0.294428 0.601562 -0.015625\nv -0.285036 0.601562 -0.015625\nv -0.289062 0.606275 -0.015625\nv -0.28125 0.601562 -0.0098392\nv -0.304688 0.6795 -0.015625\nv -0.296875 0.673209 -0.015625\nv -0.304776 0.679688 -0.015625\nv -0.304688 0.679688 -0.0149241\nv -0.294724 0.679688 -0.015625\nv -0.308467 0.6875 -0.015625\nv -0.292275 0.6875 -0.015625\nv -0.310701 0.695312 -0.015625\nv -0.3125 0.698727 -0.015625\nv -0.289477 0.695312 -0.015625\nv -0.289062 0.697184 -0.015625\nv -0.314897 0.703125 -0.015625\nv -0.287831 0.703125 -0.015625\nv -0.316812 0.710938 -0.015625\nv -0.28523 0.710938 -0.015625\nv -0.318627 0.71875 -0.015625\nv -0.283802 0.71875 -0.015625\nv -0.320287 0.726562 -0.015625\nv -0.320312 0.72667 -0.015625\nv -0.283317 0.726562 -0.015625\nv -0.322023 0.734375 -0.015625\nv -0.283157 0.734375 -0.015625\nv -0.323841 0.742188 -0.015625\nv -0.283617 0.742188 -0.015625\nv -0.325135 0.75 -0.015625\nv -0.284208 0.75 -0.015625\nv -0.326139 0.757812 -0.015625\nv -0.284545 0.757812 -0.015625\nv -0.327495 0.765625 -0.015625\nv -0.328125 0.768424 -0.015625\nv -0.285295 0.765625 -0.015625\nv -0.329247 0.773438 -0.015625\nv -0.286465 0.773438 -0.015625\nv -0.330648 0.78125 -0.015625\nv -0.287933 0.78125 -0.015625\nv -0.289062 0.786041 -0.015625\nv -0.331816 0.789062 -0.015625\nv -0.290234 0.789062 -0.015625\nv -0.332735 0.796875 -0.015625\nv -0.292823 0.796875 -0.015625\nv -0.333459 0.804688 -0.015625\nv -0.296422 0.804688 -0.015625\nv -0.296875 0.805612 -0.015625\nv -0.33357 0.8125 -0.015625\nv -0.300916 0.8125 -0.015625\nv -0.304688 0.81821 -0.015625\nv -0.332922 0.820312 -0.015625\nv -0.306033 0.820312 -0.015625\nv -0.328487 0.828125 -0.015625\nv -0.328125 0.82834 -0.015625\nv -0.320312 0.830557 -0.015625\nv -0.312374 0.828125 -0.015625\nv -0.3125 0.828222 -0.015625\nv 0.0625 -0.539469 -0.0078125\nv 0.0703125 -0.539387 -0.0078125\nv 0.0390625 -0.53215 -0.0078125\nv 0.046875 -0.534845 -0.0078125\nv 0.0599774 -0.539062 -0.0078125\nv 0.0546875 -0.537805 -0.0078125\nv 0.0546875 -0.539062 -0.000295416\nv 0.0741704 -0.539062 -0.0078125\nv 0.0703125 -0.539062 -0.000244394\nv 0.078125 -0.538652 -0.0078125\nv 0.0859375 -0.53577 -0.0078125\nv 0.09375 -0.532082 -0.0078125\nv 0.015625 -0.52399 -0.0078125\nv 0.0234375 -0.526152 -0.0078125\nv 0.0364482 -0.53125 -0.0078125\nv 0.03125 -0.529049 -0.0078125\nv 0.0952434 -0.53125 -0.0078125\nv 0.101562 -0.52755 -0.0078125\nv 0.0130266 -0.523438 -0.0078125\nv 0.0078125 -0.519571 -0.0078125\nv 0.108513 -0.523438 -0.0078125\nv 0.109375 -0.52284 -0.0078125\nv 0.109375 -0.523438 -0.00315114\nv 0.117188 -0.518206 -0.0078125\nv 0.00182423 -0.515625 -0.0078125\nv 0.120619 -0.515625 -0.0078125\nv 0.125 -0.510682 -0.0078125\nv 0.00141589 -0.507812 -0.0078125\nv 0.0078125 -0.505417 -0.0078125\nv 0.015625 -0.502199 -0.0078125\nv 0.127318 -0.507812 -0.0078125\nv 0.0198218 -0.5 -0.0078125\nv 0.0234375 -0.498306 -0.0078125\nv 0.03125 -0.493565 -0.0078125\nv 0.128771 -0.5 -0.0078125\nv 0.033639 -0.492188 -0.0078125\nv 0.0390625 -0.489331 -0.0078125\nv 0.046875 -0.48494 -0.0078125\nv 0.130226 -0.492188 -0.0078125\nv 0.0477187 -0.484375 -0.0078125\nv 0.0546875 -0.481309 -0.0078125\nv 0.0625 -0.478131 -0.0078125\nv 0.128322 -0.484375 -0.0078125\nv 0.125 -0.481431 -0.0078125\nv 0.0669027 -0.476562 -0.0078125\nv 0.0703125 -0.475504 -0.0078125\nv 0.078125 -0.473623 -0.0078125\nv 0.0859375 -0.471683 -0.0078125\nv 0.09375 -0.470246 -0.0078125\nv 0.101562 -0.471362 -0.0078125\nv 0.109375 -0.473066 -0.0078125\nv 0.118252 -0.476562 -0.0078125\nv 0.117188 -0.475929 -0.0078125\nv -0.289062 -0.0662068 -0.0078125\nv -0.28125 -0.0677226 -0.0078125\nv -0.273438 -0.065903 -0.0078125\nv 0.453125 -0.0640214 -0.0078125\nv 0.460938 -0.0676381 -0.0078125\nv 0.46875 -0.0671657 -0.0078125\nv 0.476562 -0.0675622 -0.0078125\nv 0.484375 -0.0656554 -0.0078125\nv -0.293221 -0.0625 -0.0078125\nv -0.27015 -0.0625 -0.0078125\nv 0.451824 -0.0625 -0.0078125\nv 0.491346 -0.0625 -0.0078125\nv 0.492188 -0.0615065 -0.0078125\nv -0.296297 -0.0546875 -0.0078125\nv -0.296875 -0.0529507 -0.0078125\nv -0.266264 -0.0546875 -0.0078125\nv -0.265625 -0.0523947 -0.0078125\nv 0.449457 -0.0546875 -0.0078125\nv 0.494862 -0.0546875 -0.0078125\nv -0.298377 -0.046875 -0.0078125\nv -0.264218 -0.046875 -0.0078125\nv 0.446754 -0.046875 -0.0078125\nv 0.497225 -0.046875 -0.0078125\nv 0.5 -0.0395737 -0.0078125\nv -0.299642 -0.0390625 -0.0078125\nv -0.263023 -0.0390625 -0.0078125\nv 0.446112 -0.0390625 -0.0078125\nv 0.500178 -0.0390625 -0.0078125\nv -0.300317 -0.03125 -0.0078125\nv -0.261982 -0.03125 -0.0078125\nv 0.445576 -0.03125 -0.0078125\nv 0.445312 -0.0292916 -0.0078125\nv 0.502521 -0.03125 -0.0078125\nv -0.300835 -0.0234375 -0.0078125\nv -0.261345 -0.0234375 -0.0078125\nv 0.444629 -0.0234375 -0.0078125\nv 0.504278 -0.0234375 -0.0078125\nv -0.302221 -0.015625 -0.0078125\nv -0.260078 -0.015625 -0.0078125\nv 0.443613 -0.015625 -0.0078125\nv 0.503929 -0.015625 -0.0078125\nv -0.30388 -0.0078125 -0.0078125\nv -0.259748 -0.0078125 -0.0078125\nv 0.44104 -0.0078125 -0.0078125\nv 0.503085 -0.0078125 -0.0078125\nv -0.304157 0 -0.0078125\nv -0.259516 0 -0.0078125\nv 0.439019 0 -0.0078125\nv 0.50217 0 -0.0078125\nv -0.303943 0.0078125 -0.0078125\nv -0.25866 0.0078125 -0.0078125\nv -0.257812 0.00936362 -0.0078125\nv 0.438037 0.0078125 -0.0078125\nv 0.4375 0.0105126 -0.0078125\nv 0.501515 0.0078125 -0.0078125\nv -0.302693 0.015625 -0.0078125\nv -0.252466 0.015625 -0.0078125\nv -0.25 0.017164 -0.0078125\nv -0.242188 0.0182815 -0.0078125\nv -0.234375 0.0202046 -0.0078125\nv -0.226562 0.0227185 -0.0078125\nv 0.421875 0.02126 -0.0078125\nv 0.435852 0.015625 -0.0078125\nv 0.429688 0.0203595 -0.0078125\nv 0.500982 0.015625 -0.0078125\nv -0.301527 0.0234375 -0.0078125\nv -0.223694 0.0234375 -0.0078125\nv -0.21875 0.0245415 -0.0078125\nv -0.210938 0.0256686 -0.0078125\nv -0.203125 0.0260168 -0.0078125\nv -0.195312 0.0260893 -0.0078125\nv -0.1875 0.0262662 -0.0078125\nv -0.179688 0.0264054 -0.0078125\nv -0.171875 0.0268764 -0.0078125\nv -0.164062 0.0270377 -0.0078125\nv -0.15625 0.0270651 -0.0078125\nv -0.148438 0.0270518 -0.0078125\nv -0.140625 0.0269442 -0.0078125\nv -0.132812 0.0269277 -0.0078125\nv -0.125 0.0271607 -0.0078125\nv -0.117188 0.027215 -0.0078125\nv -0.109375 0.0269933 -0.0078125\nv -0.101562 0.0268278 -0.0078125\nv -0.09375 0.0266558 -0.0078125\nv -0.0859375 0.0264795 -0.0078125\nv -0.078125 0.0263308 -0.0078125\nv -0.0703125 0.0262093 -0.0078125\nv -0.0625 0.0261309 -0.0078125\nv -0.0546875 0.0260364 -0.0078125\nv -0.046875 0.0258583 -0.0078125\nv -0.0390625 0.0256776 -0.0078125\nv -0.03125 0.025463 -0.0078125\nv -0.0234375 0.0251872 -0.0078125\nv -0.015625 0.0249825 -0.0078125\nv -0.0078125 0.0249854 -0.0078125\nv 0 0.0248859 -0.0078125\nv 0.0078125 0.0247917 -0.0078125\nv 0.015625 0.0246724 -0.0078125\nv 0.0234375 0.0245713 -0.0078125\nv 0.03125 0.0247157 -0.0078125\nv 0.0390625 0.0248936 -0.0078125\nv 0.046875 0.0249022 -0.0078125\nv 0.0546875 0.0249367 -0.0078125\nv 0.0625 0.024953 -0.0078125\nv 0.0703125 0.0249623 -0.0078125\nv 0.078125 0.0249578 -0.0078125\nv 0.0859375 0.0249559 -0.0078125\nv 0.09375 0.0249132 -0.0078125\nv 0.101562 0.0248724 -0.0078125\nv 0.109375 0.0248142 -0.0078125\nv 0.117188 0.0248433 -0.0078125\nv 0.125 0.0249089 -0.0078125\nv 0.132812 0.0249192 -0.0078125\nv 0.140625 0.0248106 -0.0078125\nv 0.148438 0.0246836 -0.0078125\nv 0.15625 0.0245411 -0.0078125\nv 0.164062 0.0244036 -0.0078125\nv 0.171875 0.0243233 -0.0078125\nv 0.179688 0.0243125 -0.0078125\nv 0.1875 0.0243431 -0.0078125\nv 0.195312 0.0243605 -0.0078125\nv 0.203125 0.024379 -0.0078125\nv 0.210938 0.0243913 -0.0078125\nv 0.21875 0.0244141 -0.0078125\nv 0.226562 0.024403 -0.0078125\nv 0.234375 0.0244728 -0.0078125\nv 0.242188 0.0246728 -0.0078125\nv 0.25 0.0248073 -0.0078125\nv 0.257812 0.0249845 -0.0078125\nv 0.265625 0.0251766 -0.0078125\nv 0.273438 0.0253786 -0.0078125\nv 0.28125 0.0255743 -0.0078125\nv 0.289062 0.0257641 -0.0078125\nv 0.296875 0.0259547 -0.0078125\nv 0.304688 0.026205 -0.0078125\nv 0.3125 0.0264999 -0.0078125\nv 0.320312 0.0268102 -0.0078125\nv 0.328125 0.0269466 -0.0078125\nv 0.335938 0.027001 -0.0078125\nv 0.34375 0.0270592 -0.0078125\nv 0.351562 0.027085 -0.0078125\nv 0.359375 0.0271173 -0.0078125\nv 0.367188 0.0271558 -0.0078125\nv 0.375 0.0272228 -0.0078125\nv 0.382812 0.0270145 -0.0078125\nv 0.390625 0.0265565 -0.0078125\nv 0.398438 0.0259332 -0.0078125\nv 0.40625 0.0252624 -0.0078125\nv 0.415085 0.0234375 -0.0078125\nv 0.414062 0.0236718 -0.0078125\nv 0.500745 0.0234375 -0.0078125\nv 0.5 0.0266948 -0.0078125\nv -0.300354 0.03125 -0.0078125\nv 0.498771 0.03125 -0.0078125\nv -0.298732 0.0390625 -0.0078125\nv -0.296875 0.045929 -0.0078125\nv 0.496369 0.0390625 -0.0078125\nv -0.296618 0.046875 -0.0078125\nv 0.494559 0.046875 -0.0078125\nv 0.492188 0.0538929 -0.0078125\nv -0.29351 0.0546875 -0.0078125\nv 0.49187 0.0546875 -0.0078125\nv 0.484375 0.060301 -0.0078125\nv -0.289687 0.0625 -0.0078125\nv -0.289062 0.0633797 -0.0078125\nv 0.445312 0.0698228 -0.0078125\nv 0.453125 0.0684931 -0.0078125\nv 0.460938 0.0677968 -0.0078125\nv 0.46875 0.067149 -0.0078125\nv 0.479907 0.0625 -0.0078125\nv 0.476562 0.0640914 -0.0078125\nv -0.281643 0.0703125 -0.0078125\nv -0.28125 0.0705666 -0.0078125\nv -0.273438 0.0744177 -0.0078125\nv -0.234375 0.0771128 -0.0078125\nv -0.226562 0.0751124 -0.0078125\nv -0.21875 0.073888 -0.0078125\nv -0.210938 0.0730513 -0.0078125\nv -0.203125 0.0735757 -0.0078125\nv -0.195312 0.0741607 -0.0078125\nv -0.1875 0.0745803 -0.0078125\nv -0.179688 0.074807 -0.0078125\nv -0.171875 0.0749496 -0.0078125\nv -0.164062 0.0752116 -0.0078125\nv -0.15625 0.0751888 -0.0078125\nv -0.148438 0.0751997 -0.0078125\nv -0.140625 0.0751239 -0.0078125\nv -0.132812 0.075208 -0.0078125\nv -0.125 0.0752748 -0.0078125\nv -0.117188 0.0753396 -0.0078125\nv -0.109375 0.0752619 -0.0078125\nv -0.101562 0.0751465 -0.0078125\nv -0.09375 0.0750957 -0.0078125\nv -0.0859375 0.0750643 -0.0078125\nv -0.078125 0.0750204 -0.0078125\nv -0.0703125 0.0749579 -0.0078125\nv -0.0625 0.0748252 -0.0078125\nv -0.0546875 0.0746448 -0.0078125\nv -0.046875 0.074444 -0.0078125\nv -0.0390625 0.0743037 -0.0078125\nv -0.03125 0.0741474 -0.0078125\nv -0.0234375 0.0739597 -0.0078125\nv -0.015625 0.0737884 -0.0078125\nv -0.0078125 0.0736597 -0.0078125\nv 0 0.073554 -0.0078125\nv 0.0078125 0.0734738 -0.0078125\nv 0.015625 0.0733644 -0.0078125\nv 0.0234375 0.0731985 -0.0078125\nv 0.03125 0.0731093 -0.0078125\nv 0.0390625 0.0730221 -0.0078125\nv 0.046875 0.0730125 -0.0078125\nv 0.0546875 0.0730671 -0.0078125\nv 0.0625 0.0730832 -0.0078125\nv 0.0703125 0.0730515 -0.0078125\nv 0.078125 0.0730888 -0.0078125\nv 0.0859375 0.0731036 -0.0078125\nv 0.09375 0.0730681 -0.0078125\nv 0.101562 0.0729753 -0.0078125\nv 0.109375 0.0728781 -0.0078125\nv 0.117188 0.0727857 -0.0078125\nv 0.125 0.0727291 -0.0078125\nv 0.132812 0.0726856 -0.0078125\nv 0.140625 0.0726852 -0.0078125\nv 0.148438 0.0726414 -0.0078125\nv 0.15625 0.0726101 -0.0078125\nv 0.164062 0.07259 -0.0078125\nv 0.171875 0.0726143 -0.0078125\nv 0.179688 0.0726545 -0.0078125\nv 0.1875 0.0727154 -0.0078125\nv 0.195312 0.0727999 -0.0078125\nv 0.203125 0.0727886 -0.0078125\nv 0.210938 0.0728376 -0.0078125\nv 0.21875 0.0728725 -0.0078125\nv 0.226562 0.0728764 -0.0078125\nv 0.234375 0.0728772 -0.0078125\nv 0.242188 0.0728634 -0.0078125\nv 0.25 0.072884 -0.0078125\nv 0.257812 0.0729743 -0.0078125\nv 0.265625 0.0730655 -0.0078125\nv 0.273438 0.073148 -0.0078125\nv 0.28125 0.0732322 -0.0078125\nv 0.289062 0.0733128 -0.0078125\nv 0.296875 0.0733254 -0.0078125\nv 0.304688 0.0733182 -0.0078125\nv 0.3125 0.0733018 -0.0078125\nv 0.320312 0.0732841 -0.0078125\nv 0.328125 0.0733096 -0.0078125\nv 0.335938 0.073334 -0.0078125\nv 0.34375 0.0733421 -0.0078125\nv 0.351562 0.0733197 -0.0078125\nv 0.359375 0.0732267 -0.0078125\nv 0.367188 0.0730605 -0.0078125\nv 0.375 0.0727071 -0.0078125\nv 0.382812 0.0722159 -0.0078125\nv 0.390625 0.0719627 -0.0078125\nv 0.398438 0.0717856 -0.0078125\nv 0.40625 0.0716457 -0.0078125\nv 0.414062 0.0714306 -0.0078125\nv 0.421875 0.0711961 -0.0078125\nv 0.429688 0.0710004 -0.0078125\nv 0.439545 0.0703125 -0.0078125\nv 0.4375 0.0704764 -0.0078125\nv -0.267558 0.078125 -0.0078125\nv -0.265625 0.0793122 -0.0078125\nv -0.257812 0.0832274 -0.0078125\nv -0.25 0.0819318 -0.0078125\nv -0.237689 0.078125 -0.0078125\nv -0.242188 0.079617 -0.0078125\nv -0.265625 0.163992 -0.0078125\nv -0.28125 0.169684 -0.0078125\nv -0.265808 0.164062 -0.0078125\nv -0.273438 0.166246 -0.0078125\nv -0.273438 0.164062 -0.00140405\nv -0.265298 0.164062 -0.0078125\nv -0.257812 0.166496 -0.0078125\nv -0.257812 0.164062 -0.00420042\nv -0.286428 0.171875 -0.0078125\nv -0.289062 0.173393 -0.0078125\nv -0.289062 0.171875 -0.000494284\nv -0.255138 0.171875 -0.0078125\nv -0.295529 0.179688 -0.0078125\nv -0.296875 0.18486 -0.0078125\nv -0.251004 0.179688 -0.0078125\nv -0.25 0.181525 -0.0078125\nv -0.25 0.179688 -0.00357792\nv -0.29732 0.1875 -0.0078125\nv -0.247465 0.1875 -0.0078125\nv -0.297917 0.195312 -0.0078125\nv -0.24427 0.195312 -0.0078125\nv -0.298283 0.203125 -0.0078125\nv -0.242626 0.203125 -0.0078125\nv -0.298682 0.210938 -0.0078125\nv -0.242317 0.210938 -0.0078125\nv -0.242188 0.210938 -0.0052819\nv -0.298968 0.21875 -0.0078125\nv -0.242455 0.21875 -0.0078125\nv -0.242188 0.21875 -0.00251753\nv -0.299058 0.226562 -0.0078125\nv -0.242669 0.226562 -0.0078125\nv -0.299343 0.234375 -0.0078125\nv -0.242565 0.234375 -0.0078125\nv -0.242188 0.234375 -0.00272055\nv -0.299637 0.242188 -0.0078125\nv -0.242667 0.242188 -0.0078125\nv -0.242188 0.242188 -0.000671646\nv -0.299826 0.25 -0.0078125\nv -0.242998 0.25 -0.0078125\nv -0.299883 0.257812 -0.0078125\nv -0.243446 0.257812 -0.0078125\nv -0.299368 0.265625 -0.0078125\nv -0.243687 0.265625 -0.0078125\nv -0.298316 0.273438 -0.0078125\nv -0.296875 0.280419 -0.0078125\nv -0.244264 0.273438 -0.0078125\nv -0.29668 0.28125 -0.0078125\nv -0.245765 0.28125 -0.0078125\nv -0.294955 0.289062 -0.0078125\nv -0.248034 0.289062 -0.0078125\nv -0.25 0.294919 -0.0078125\nv -0.293012 0.296875 -0.0078125\nv -0.250719 0.296875 -0.0078125\nv -0.291152 0.304688 -0.0078125\nv -0.253541 0.304688 -0.0078125\nv -0.289856 0.3125 -0.0078125\nv -0.255891 0.3125 -0.0078125\nv -0.289221 0.320312 -0.0078125\nv -0.289062 0.320976 -0.0078125\nv -0.289062 0.320312 -0.00556895\nv -0.257412 0.320312 -0.0078125\nv -0.257812 0.321937 -0.0078125\nv -0.287263 0.328125 -0.0078125\nv -0.259512 0.328125 -0.0078125\nv -0.284034 0.335938 -0.0078125\nv -0.28125 0.339791 -0.0078125\nv -0.263098 0.335938 -0.0078125\nv -0.265625 0.339279 -0.0078125\nv -0.275389 0.34375 -0.0078125\nv -0.271484 0.34375 -0.0078125\nv -0.273438 0.346354 -0.0078125\nv -0.28125 0.383401 -0.0078125\nv -0.28125 0.382812 -0.0048269\nv -0.273438 0.388188 -0.0078125\nv -0.288304 0.390625 -0.0078125\nv -0.289062 0.391685 -0.0078125\nv -0.272819 0.390625 -0.0078125\nv -0.29074 0.398438 -0.0078125\nv -0.270175 0.398438 -0.0078125\nv -0.292216 0.40625 -0.0078125\nv -0.267339 0.40625 -0.0078125\nv -0.293063 0.414062 -0.0078125\nv -0.266598 0.414062 -0.0078125\nv -0.293829 0.421875 -0.0078125\nv -0.266757 0.421875 -0.0078125\nv -0.294421 0.429688 -0.0078125\nv -0.266921 0.429688 -0.0078125\nv -0.29502 0.4375 -0.0078125\nv -0.267228 0.4375 -0.0078125\nv -0.295595 0.445312 -0.0078125\nv -0.267451 0.445312 -0.0078125\nv -0.295895 0.453125 -0.0078125\nv -0.267511 0.453125 -0.0078125\nv -0.29631 0.460938 -0.0078125\nv -0.296875 0.467751 -0.0078125\nv -0.267603 0.460938 -0.0078125\nv -0.296948 0.46875 -0.0078125\nv -0.296875 0.46875 -0.00696115\nv -0.267365 0.46875 -0.0078125\nv -0.29755 0.476562 -0.0078125\nv -0.296875 0.476562 -0.000264238\nv -0.266726 0.476562 -0.0078125\nv -0.29814 0.484375 -0.0078125\nv -0.266128 0.484375 -0.0078125\nv -0.265625 0.491789 -0.0078125\nv -0.265625 0.484375 -0.00242976\nv -0.298612 0.492188 -0.0078125\nv -0.265605 0.492188 -0.0078125\nv -0.299236 0.5 -0.0078125\nv -0.265492 0.5 -0.0078125\nv -0.299904 0.507812 -0.0078125\nv -0.265478 0.507812 -0.0078125\nv -0.265625 0.51219 -0.0078125\nv -0.300518 0.515625 -0.0078125\nv -0.265789 0.515625 -0.0078125\nv -0.265625 0.515625 -0.00582489\nv -0.301195 0.523438 -0.0078125\nv -0.266383 0.523438 -0.0078125\nv -0.265625 0.523438 -0.00027548\nv -0.301777 0.53125 -0.0078125\nv -0.266873 0.53125 -0.0078125\nv -0.302269 0.539062 -0.0078125\nv -0.267441 0.539062 -0.0078125\nv -0.30268 0.546875 -0.0078125\nv -0.268007 0.546875 -0.0078125\nv -0.303028 0.554688 -0.0078125\nv -0.268549 0.554688 -0.0078125\nv -0.303287 0.5625 -0.0078125\nv -0.269087 0.5625 -0.0078125\nv -0.303502 0.570312 -0.0078125\nv -0.269648 0.570312 -0.0078125\nv -0.302332 0.578125 -0.0078125\nv -0.270282 0.578125 -0.0078125\nv -0.300585 0.585938 -0.0078125\nv -0.272075 0.585938 -0.0078125\nv -0.273438 0.58905 -0.0078125\nv -0.299169 0.59375 -0.0078125\nv -0.296875 0.599571 -0.0078125\nv -0.275744 0.59375 -0.0078125\nv -0.273438 0.59375 -0.00228706\nv -0.295172 0.601562 -0.0078125\nv -0.296875 0.601562 -0.00157637\nv -0.289062 0.608128 -0.0078125\nv -0.28016 0.601562 -0.0078125\nv -0.28125 0.602441 -0.0078125\nv -0.289062 0.609375 -0.00249653\nv -0.296875 0.674549 -0.0078125\nv -0.302145 0.679688 -0.0078125\nv -0.304688 0.68146 -0.0078125\nv -0.295237 0.679688 -0.0078125\nv -0.307422 0.6875 -0.0078125\nv -0.292933 0.6875 -0.0078125\nv -0.309505 0.695312 -0.0078125\nv -0.3125 0.701133 -0.0078125\nv -0.290037 0.695312 -0.0078125\nv -0.289062 0.699625 -0.0078125\nv -0.313742 0.703125 -0.0078125\nv -0.3125 0.703125 -0.000473671\nv -0.288334 0.703125 -0.0078125\nv -0.316357 0.710938 -0.0078125\nv -0.285937 0.710938 -0.0078125\nv -0.318457 0.71875 -0.0078125\nv -0.283867 0.71875 -0.0078125\nv -0.320159 0.726562 -0.0078125\nv -0.320312 0.727207 -0.0078125\nv -0.283021 0.726562 -0.0078125\nv -0.321929 0.734375 -0.0078125\nv -0.282895 0.734375 -0.0078125\nv -0.323688 0.742188 -0.0078125\nv -0.283321 0.742188 -0.0078125\nv -0.325084 0.75 -0.0078125\nv -0.284078 0.75 -0.0078125\nv -0.32616 0.757812 -0.0078125\nv -0.284501 0.757812 -0.0078125\nv -0.327482 0.765625 -0.0078125\nv -0.328125 0.768543 -0.0078125\nv -0.285319 0.765625 -0.0078125\nv -0.329204 0.773438 -0.0078125\nv -0.286484 0.773438 -0.0078125\nv -0.330646 0.78125 -0.0078125\nv -0.287918 0.78125 -0.0078125\nv -0.289062 0.786323 -0.0078125\nv -0.33193 0.789062 -0.0078125\nv -0.290074 0.789062 -0.0078125\nv -0.332955 0.796875 -0.0078125\nv -0.29257 0.796875 -0.0078125\nv -0.333884 0.804688 -0.0078125\nv -0.296085 0.804688 -0.0078125\nv -0.296875 0.806353 -0.0078125\nv -0.334036 0.8125 -0.0078125\nv -0.300423 0.8125 -0.0078125\nv -0.304688 0.818554 -0.0078125\nv -0.333504 0.820312 -0.0078125\nv -0.305863 0.820312 -0.0078125\nv -0.328853 0.828125 -0.0078125\nv -0.328125 0.828572 -0.0078125\nv -0.320312 0.830693 -0.0078125\nv -0.31228 0.828125 -0.0078125\nv -0.3125 0.828293 -0.0078125\nv 0.0546875 -0.539096 0\nv 0.0625 -0.539693 0\nv 0.0390625 -0.533001 0\nv 0.054566 -0.539062 0\nv 0.046875 -0.535953 0\nv 0.0701856 -0.539062 0\nv 0.0703125 -0.53905 0\nv 0.078125 -0.537877 0\nv 0.0859375 -0.535111 0\nv 0.09375 -0.531536 0\nv 0.015625 -0.524859 0\nv 0.0234375 -0.526531 0\nv 0.0343066 -0.53125 0\nv 0.03125 -0.52969 0\nv 0.03125 -0.53125 0.00545036\nv 0.094408 -0.53125 0\nv 0.101562 -0.527851 0\nv 0.109375 -0.523873 0\nv 0.00986348 -0.523438 0\nv 0.0078125 -0.521382 0\nv 0.0078125 -0.523438 0.00324382\nv 0.110295 -0.523438 0\nv 0.109375 -0.523438 0.00514682\nv 0.117188 -0.51906 0\nv 0.00195429 -0.515625 0\nv 0 -0.515625 0.00778873\nv 0.121121 -0.515625 0\nv 0.125 -0.510633 0\nv 0.00214152 -0.507812 0\nv 0.0078125 -0.505644 0\nv 0.015625 -0.502698 0\nv 0.127062 -0.507812 0\nv 0.125 -0.507812 0.00563731\nv 0.0214163 -0.5 0\nv 0.0234375 -0.49915 0\nv 0.03125 -0.494865 0\nv 0.127776 -0.5 0\nv 0.035566 -0.492188 0\nv 0.0390625 -0.490062 0\nv 0.046875 -0.484622 0\nv 0.129619 -0.492188 0\nv 0.0472294 -0.484375 0\nv 0.046875 -0.484375 0.001494\nv 0.0546875 -0.480846 0\nv 0.0625 -0.477757 0\nv 0.128358 -0.484375 0\nv 0.125 -0.481384 0\nv 0.0661013 -0.476562 0\nv 0.0703125 -0.475355 0\nv 0.078125 -0.473628 0\nv 0.0859375 -0.471893 0\nv 0.09375 -0.470194 0\nv 0.101562 -0.471438 0\nv 0.109375 -0.473239 0\nv 0.117747 -0.476562 0\nv 0.117188 -0.476264 0\nv -0.289062 -0.0662218 0\nv -0.28125 -0.067757 0\nv -0.273438 -0.0658576 0\nv 0.453125 -0.0644789 0\nv 0.460938 -0.0678836 0\nv 0.46875 -0.0673225 0\nv 0.476562 -0.0676434 0\nv 0.484375 -0.0657862 0\nv -0.293354 -0.0625 0\nv -0.270238 -0.0625 0\nv 0.451422 -0.0625 0\nv 0.491697 -0.0625 0\nv 0.492188 -0.0619467 0\nv -0.296492 -0.0546875 0\nv -0.296875 -0.0535026 0\nv -0.266292 -0.0546875 0\nv -0.265625 -0.0522877 0\nv 0.449392 -0.0546875 0\nv 0.49519 -0.0546875 0\nv -0.298473 -0.046875 0\nv -0.264258 -0.046875 0\nv 0.447299 -0.046875 0\nv 0.497765 -0.046875 0\nv 0.5 -0.0411646 0\nv -0.299694 -0.0390625 0\nv -0.263036 -0.0390625 0\nv 0.446793 -0.0390625 0\nv 0.500765 -0.0390625 0\nv -0.300293 -0.03125 0\nv -0.261987 -0.03125 0\nv 0.446184 -0.03125 0\nv 0.445312 -0.024311 0\nv 0.503246 -0.03125 0\nv -0.300775 -0.0234375 0\nv -0.261359 -0.0234375 0\nv 0.445219 -0.0234375 0\nv 0.504858 -0.0234375 0\nv -0.302161 -0.015625 0\nv -0.26005 -0.015625 0\nv 0.444166 -0.015625 0\nv 0.50452 -0.015625 0\nv -0.303895 -0.0078125 0\nv -0.259651 -0.0078125 0\nv 0.441688 -0.0078125 0\nv 0.503836 -0.0078125 0\nv -0.304153 0 0\nv -0.259347 0 0\nv 0.439694 0 0\nv 0.502893 0 0\nv -0.303923 0.0078125 0\nv -0.258455 0.0078125 0\nv -0.257812 0.00902391 0\nv 0.438564 0.0078125 0\nv 0.4375 0.012298 0\nv 0.501947 0.0078125 0\nv -0.302939 0.015625 0\nv -0.252201 0.015625 0\nv -0.25 0.0169721 0\nv -0.242188 0.0181567 0\nv -0.234375 0.0201356 0\nv -0.226562 0.0226636 0\nv 0.421875 0.0213216 0\nv 0.436177 0.015625 0\nv 0.429688 0.0204235 0\nv 0.501213 0.015625 0\nv -0.301825 0.0234375 0\nv -0.223487 0.0234375 0\nv -0.21875 0.0244989 0\nv -0.210938 0.0256383 0\nv -0.203125 0.0260052 0\nv -0.195312 0.026066 0\nv -0.1875 0.0262326 0\nv -0.179688 0.0263605 0\nv -0.171875 0.0268306 0\nv -0.164062 0.0270027 0\nv -0.15625 0.0270222 0\nv -0.148438 0.027009 0\nv -0.140625 0.0268999 0\nv -0.132812 0.0269148 0\nv -0.125 0.0271668 0\nv -0.117188 0.0272348 0\nv -0.109375 0.0270308 0\nv -0.101562 0.0268152 0\nv -0.09375 0.0266493 0\nv -0.0859375 0.0264871 0\nv -0.078125 0.0263525 0\nv -0.0703125 0.0262622 0\nv -0.0625 0.0261993 0\nv -0.0546875 0.0261112 0\nv -0.046875 0.0258881 0\nv -0.0390625 0.0256978 0\nv -0.03125 0.0254766 0\nv -0.0234375 0.0252796 0\nv -0.015625 0.0250277 0\nv -0.0078125 0.0248297 0\nv 0 0.0246481 0\nv 0.0078125 0.0245662 0\nv 0.015625 0.0245774 0\nv 0.0234375 0.0245044 0\nv 0.03125 0.0245359 0\nv 0.0390625 0.0247635 0\nv 0.046875 0.0248132 0\nv 0.0546875 0.024826 0\nv 0.0625 0.0248098 0\nv 0.0703125 0.0247831 0\nv 0.078125 0.0247639 0\nv 0.0859375 0.0248126 0\nv 0.09375 0.0247991 0\nv 0.101562 0.0247701 0\nv 0.109375 0.0247165 0\nv 0.117188 0.0247148 0\nv 0.125 0.0248375 0\nv 0.132812 0.0248513 0\nv 0.140625 0.0247152 0\nv 0.148438 0.0245551 0\nv 0.15625 0.0243822 0\nv 0.164062 0.0242194 0\nv 0.171875 0.0241281 0\nv 0.179688 0.0241354 0\nv 0.1875 0.0241767 0\nv 0.195312 0.0241996 0\nv 0.203125 0.0242244 0\nv 0.210938 0.0242344 0\nv 0.21875 0.024246 0\nv 0.226562 0.0242761 0\nv 0.234375 0.0243426 0\nv 0.242188 0.0245256 0\nv 0.25 0.0246776 0\nv 0.257812 0.0248725 0\nv 0.265625 0.0250718 0\nv 0.273438 0.0253017 0\nv 0.28125 0.0255091 0\nv 0.289062 0.0257046 0\nv 0.296875 0.0259123 0\nv 0.304688 0.026179 0\nv 0.3125 0.0264843 0\nv 0.320312 0.0268009 0\nv 0.328125 0.026934 0\nv 0.335938 0.0269833 0\nv 0.34375 0.0270468 0\nv 0.351562 0.0270843 0\nv 0.359375 0.027124 0\nv 0.367188 0.0271747 0\nv 0.375 0.0272548 0\nv 0.382812 0.0270637 0\nv 0.390625 0.0266036 0\nv 0.398438 0.0259865 0\nv 0.40625 0.0253095 0\nv 0.415353 0.0234375 0\nv 0.414062 0.0237352 0\nv 0.500903 0.0234375 0\nv 0.5 0.0272113 0\nv -0.300579 0.03125 0\nv 0.49887 0.03125 0\nv -0.298747 0.0390625 0\nv -0.296875 0.0457412 0\nv 0.496563 0.0390625 0\nv -0.296561 0.046875 0\nv 0.494713 0.046875 0\nv 0.492188 0.0541035 0\nv -0.293206 0.0546875 0\nv 0.491949 0.0546875 0\nv 0.484375 0.0603766 0\nv -0.289242 0.0625 0\nv -0.289062 0.0627757 0\nv -0.289062 0.0625 0.000676193\nv 0.445312 0.0696532 0\nv 0.453125 0.0684082 0\nv 0.460938 0.0677163 0\nv 0.46875 0.0670962 0\nv 0.480059 0.0625 0\nv 0.476562 0.064158 0\nv -0.281345 0.0703125 0\nv -0.28125 0.0703791 0\nv -0.28125 0.0703125 0.00021549\nv -0.273438 0.074554 0\nv -0.234375 0.0774849 0\nv -0.226562 0.0754145 0\nv -0.21875 0.0741835 0\nv -0.210938 0.0733272 0\nv -0.203125 0.0738065 0\nv -0.195312 0.0743242 0\nv -0.1875 0.0746254 0\nv -0.179688 0.0747779 0\nv -0.171875 0.0748705 0\nv -0.164062 0.0751296 0\nv -0.15625 0.0751336 0\nv -0.148438 0.0751321 0\nv -0.140625 0.0750948 0\nv -0.132812 0.0751985 0\nv -0.125 0.0752311 0\nv -0.117188 0.0752914 0\nv -0.109375 0.0752143 0\nv -0.101562 0.0750907 0\nv -0.09375 0.075046 0\nv -0.0859375 0.0750273 0\nv -0.078125 0.0750091 0\nv -0.0703125 0.0748968 0\nv -0.0625 0.0747625 0\nv -0.0546875 0.0745921 0\nv -0.046875 0.0743855 0\nv -0.0390625 0.0742551 0\nv -0.03125 0.0740988 0\nv -0.0234375 0.0739113 0\nv -0.015625 0.0737395 0\nv -0.0078125 0.0736417 0\nv 0 0.0735224 0\nv 0.0078125 0.0734301 0\nv 0.015625 0.0733327 0\nv 0.0234375 0.0732474 0\nv 0.03125 0.0730831 0\nv 0.0390625 0.0729732 0\nv 0.046875 0.0728957 0\nv 0.0546875 0.0729141 0\nv 0.0625 0.0728973 0\nv 0.0703125 0.072859 0\nv 0.078125 0.0728866 0\nv 0.0859375 0.0729061 0\nv 0.09375 0.0728648 0\nv 0.101562 0.0728048 0\nv 0.109375 0.0727817 0\nv 0.117188 0.0727463 0\nv 0.125 0.0726812 0\nv 0.132812 0.0726369 0\nv 0.140625 0.0725979 0\nv 0.148438 0.0725909 0\nv 0.15625 0.0725745 0\nv 0.164062 0.072545 0\nv 0.171875 0.0725571 0\nv 0.179688 0.0725848 0\nv 0.1875 0.072636 0\nv 0.195312 0.0727306 0\nv 0.203125 0.0727936 0\nv 0.210938 0.0727212 0\nv 0.21875 0.0727573 0\nv 0.226562 0.0727269 0\nv 0.234375 0.072721 0\nv 0.242188 0.0727091 0\nv 0.25 0.0727238 0\nv 0.257812 0.072809 0\nv 0.265625 0.0728799 0\nv 0.273438 0.0729554 0\nv 0.28125 0.0730302 0\nv 0.289062 0.0731113 0\nv 0.296875 0.0731264 0\nv 0.304688 0.0731258 0\nv 0.3125 0.0731142 0\nv 0.320312 0.0731085 0\nv 0.328125 0.0731559 0\nv 0.335938 0.0731981 0\nv 0.34375 0.0732221 0\nv 0.351562 0.0732074 0\nv 0.359375 0.073107 0\nv 0.367188 0.0729657 0\nv 0.375 0.0726136 0\nv 0.382812 0.0721124 0\nv 0.390625 0.071849 0\nv 0.398438 0.0716515 0\nv 0.40625 0.0714912 0\nv 0.414062 0.0712703 0\nv 0.421875 0.0710288 0\nv 0.429688 0.0708632 0\nv 0.437566 0.0703125 0\nv 0.4375 0.0703179 0\nv -0.268195 0.078125 0\nv -0.265625 0.0798867 0\nv -0.265625 0.078125 0.00452012\nv -0.257812 0.0841027 0\nv -0.25 0.0828074 0\nv -0.236283 0.078125 0\nv -0.242188 0.0802401 0\nv -0.242188 0.078125 0.00585454\nv -0.273438 0.163443 0\nv -0.265625 0.160519 0\nv -0.257812 0.162095 0\nv -0.289062 0.171786 0\nv -0.274512 0.164062 0\nv -0.28125 0.167545 0\nv -0.273438 0.164062 0.00676786\nv -0.256155 0.164062 0\nv -0.289189 0.171875 0\nv -0.289062 0.171875 0.00132796\nv -0.25253 0.171875 0\nv -0.25 0.177549 0\nv -0.2955 0.179688 0\nv -0.296875 0.184768 0\nv -0.249251 0.179688 0\nv -0.25 0.179688 0.00703459\nv -0.297345 0.1875 0\nv -0.245992 0.1875 0\nv -0.29798 0.195312 0\nv -0.243934 0.195312 0\nv -0.298439 0.203125 0\nv -0.242681 0.203125 0\nv -0.242188 0.208317 0\nv -0.298817 0.210938 0\nv -0.2419 0.210938 0\nv -0.299014 0.21875 0\nv -0.242054 0.21875 0\nv -0.242188 0.225611 0\nv -0.299073 0.226562 0\nv -0.242205 0.226562 0\nv -0.242188 0.227212 0\nv -0.242188 0.226562 0.000956928\nv -0.299307 0.234375 0\nv -0.241981 0.234375 0\nv -0.299678 0.242188 0\nv -0.242142 0.242188 0\nv -0.242188 0.242876 0\nv -0.299947 0.25 0\nv -0.242664 0.25 0\nv -0.299952 0.257812 0\nv -0.243101 0.257812 0\nv -0.29945 0.265625 0\nv -0.243416 0.265625 0\nv -0.298389 0.273438 0\nv -0.296875 0.28035 0\nv -0.244023 0.273438 0\nv -0.296658 0.28125 0\nv -0.245512 0.28125 0\nv -0.294768 0.289062 0\nv -0.247575 0.289062 0\nv -0.25 0.296714 0\nv -0.2927 0.296875 0\nv -0.250059 0.296875 0\nv -0.25 0.296875 0.00132959\nv -0.290938 0.304688 0\nv -0.252967 0.304688 0\nv -0.289585 0.3125 0\nv -0.289062 0.317027 0\nv -0.289062 0.3125 0.00623387\nv -0.255469 0.3125 0\nv -0.288655 0.320312 0\nv -0.257354 0.320312 0\nv -0.257812 0.32173 0\nv -0.28624 0.328125 0\nv -0.25992 0.328125 0\nv -0.282775 0.335938 0\nv -0.28125 0.339383 0\nv -0.263424 0.335938 0\nv -0.265625 0.339193 0\nv -0.275768 0.34375 0\nv -0.271097 0.34375 0\nv -0.273438 0.347618 0\nv -0.265625 0.34375 0.00768893\nv -0.28125 0.38161 0\nv -0.281724 0.382812 0\nv -0.278633 0.382812 0\nv -0.273438 0.385043 0\nv -0.273438 0.382812 0.00218033\nv -0.285743 0.390625 0\nv -0.289062 0.395761 0\nv -0.271769 0.390625 0\nv -0.290206 0.398438 0\nv -0.269063 0.398438 0\nv -0.291607 0.40625 0\nv -0.266233 0.40625 0\nv -0.265625 0.40625 0.00385963\nv -0.292474 0.414062 0\nv -0.265889 0.414062 0\nv -0.265625 0.414062 0.00273363\nv -0.293195 0.421875 0\nv -0.266259 0.421875 0\nv -0.2937 0.429688 0\nv -0.266565 0.429688 0\nv -0.294288 0.4375 0\nv -0.266768 0.4375 0\nv -0.29455 0.445312 0\nv -0.266869 0.445312 0\nv -0.294894 0.453125 0\nv -0.26698 0.453125 0\nv -0.295415 0.460938 0\nv -0.266999 0.460938 0\nv -0.296199 0.46875 0\nv -0.266659 0.46875 0\nv -0.296848 0.476562 0\nv -0.296875 0.476852 0\nv -0.296875 0.476562 0.00161394\nv -0.266043 0.476562 0\nv -0.265625 0.481653 0\nv -0.265625 0.476562 0.00430233\nv -0.297464 0.484375 0\nv -0.265455 0.484375 0\nv -0.298075 0.492188 0\nv -0.265155 0.492188 0\nv -0.298871 0.5 0\nv -0.265077 0.5 0\nv -0.299805 0.507812 0\nv -0.265084 0.507812 0\nv -0.300524 0.515625 0\nv -0.265305 0.515625 0\nv -0.301212 0.523438 0\nv -0.265606 0.523438 0\nv -0.265625 0.523855 0\nv -0.301801 0.53125 0\nv -0.266118 0.53125 0\nv -0.302335 0.539062 0\nv -0.266677 0.539062 0\nv -0.30274 0.546875 0\nv -0.267164 0.546875 0\nv -0.303154 0.554688 0\nv -0.26759 0.554688 0\nv -0.303516 0.5625 0\nv -0.267997 0.5625 0\nv -0.303771 0.570312 0\nv -0.26834 0.570312 0\nv -0.302568 0.578125 0\nv -0.268876 0.578125 0\nv -0.301029 0.585938 0\nv -0.269879 0.585938 0\nv -0.30019 0.59375 0\nv -0.272505 0.59375 0\nv -0.273438 0.596035 0\nv -0.297079 0.601562 0\nv -0.296875 0.60206 0\nv -0.276013 0.601562 0\nv -0.28125 0.605924 0\nv -0.289681 0.609375 0\nv -0.288239 0.609375 0\nv -0.289062 0.610117 0\nv -0.28125 0.609375 0.00750691\nv -0.296875 0.67381 0\nv -0.301379 0.679688 0\nv -0.304688 0.682774 0\nv -0.295119 0.679688 0\nv -0.306603 0.6875 0\nv -0.29326 0.6875 0\nv -0.308854 0.695312 0\nv -0.290417 0.695312 0\nv -0.289062 0.701351 0\nv -0.312426 0.703125 0\nv -0.3125 0.703284 0\nv -0.288697 0.703125 0\nv -0.315839 0.710938 0\nv -0.286523 0.710938 0\nv -0.318248 0.71875 0\nv -0.284008 0.71875 0\nv -0.32013 0.726562 0\nv -0.320312 0.727322 0\nv -0.282687 0.726562 0\nv -0.321887 0.734375 0\nv -0.28257 0.734375 0\nv -0.323605 0.742188 0\nv -0.282915 0.742188 0\nv -0.325084 0.75 0\nv -0.283906 0.75 0\nv -0.326161 0.757812 0\nv -0.284384 0.757812 0\nv -0.327486 0.765625 0\nv -0.328125 0.768553 0\nv -0.285294 0.765625 0\nv -0.329194 0.773438 0\nv -0.286451 0.773438 0\nv -0.330677 0.78125 0\nv -0.287889 0.78125 0\nv -0.289062 0.786618 0\nv -0.331974 0.789062 0\nv -0.289941 0.789062 0\nv -0.333068 0.796875 0\nv -0.292502 0.796875 0\nv -0.334176 0.804688 0\nv -0.295922 0.804688 0\nv -0.296875 0.806744 0\nv -0.334312 0.8125 0\nv -0.300146 0.8125 0\nv -0.304688 0.818753 0\nv -0.333818 0.820312 0\nv -0.305759 0.820312 0\nv -0.32883 0.828125 0\nv -0.328125 0.828539 0\nv -0.320312 0.830561 0\nv -0.312375 0.828125 0\nv -0.3125 0.828219 0\nv -0.3125 0.828125 0.00331103\nv 0.0546875 -0.539237 0.0078125\nv 0.0625 -0.539463 0.0078125\nv 0.03125 -0.531784 0.0078125\nv 0.0390625 -0.535289 0.0078125\nv 0.0528804 -0.539062 0.0078125\nv 0.046875 -0.538194 0.0078125\nv 0.046875 -0.539062 0.0153571\nv 0.0679192 -0.539062 0.0078125\nv 0.0703125 -0.538848 0.0078125\nv 0.078125 -0.537881 0.0078125\nv 0.0859375 -0.534997 0.0078125\nv 0.09375 -0.531542 0.0078125\nv 0.0078125 -0.524186 0.0078125\nv 0.015625 -0.525811 0.0078125\nv 0.0298792 -0.53125 0.0078125\nv 0.0234375 -0.528071 0.0078125\nv 0.0234375 -0.53125 0.0149066\nv 0.0943901 -0.53125 0.0078125\nv 0.09375 -0.53125 0.0110677\nv 0.101562 -0.52745 0.0078125\nv 0.00505669 -0.523438 0.0078125\nv 0 -0.515634 0.0078125\nv 0.108996 -0.523438 0.0078125\nv 0.109375 -0.52316 0.0078125\nv 0.117188 -0.517018 0.0078125\nv -3.25355e-06 -0.515625 0.0078125\nv 0 -0.515574 0.0078125\nv 0.118722 -0.515625 0.0078125\nv 0.117188 -0.515625 0.0117887\nv 0.000646553 -0.507812 0.0078125\nv 0 -0.507812 0.0104201\nv 0.0078125 -0.504859 0.0078125\nv 0.015625 -0.501291 0.0078125\nv 0.124276 -0.507812 0.0078125\nv 0.125 -0.503448 0.0078125\nv 0.0180757 -0.5 0.0078125\nv 0.015625 -0.5 0.0131743\nv 0.0234375 -0.497508 0.0078125\nv 0.03125 -0.493114 0.0078125\nv 0.125502 -0.5 0.0078125\nv 0.125 -0.5 0.0103565\nv 0.0326857 -0.492188 0.0078125\nv 0.03125 -0.492188 0.0104009\nv 0.0390625 -0.488271 0.0078125\nv 0.128733 -0.492188 0.0078125\nv 0.0451578 -0.484375 0.0078125\nv 0.046875 -0.483626 0.0078125\nv 0.0546875 -0.480434 0.0078125\nv 0.0625 -0.47759 0.0078125\nv 0.127317 -0.484375 0.0078125\nv 0.125 -0.482023 0.0078125\nv 0.0654502 -0.476562 0.0078125\nv 0.0703125 -0.47509 0.0078125\nv 0.078125 -0.473197 0.0078125\nv 0.0859375 -0.471545 0.0078125\nv 0.09375 -0.47009 0.0078125\nv 0.101562 -0.471118 0.0078125\nv 0.109375 -0.473085 0.0078125\nv 0.117737 -0.476562 0.0078125\nv 0.117188 -0.476261 0.0078125\nv -0.289062 -0.0662051 0.0078125\nv -0.28125 -0.0677085 0.0078125\nv -0.273438 -0.0657892 0.0078125\nv 0.453125 -0.064507 0.0078125\nv 0.460938 -0.0676852 0.0078125\nv 0.46875 -0.0669603 0.0078125\nv 0.476562 -0.0670982 0.0078125\nv 0.484375 -0.0650692 0.0078125\nv -0.293386 -0.0625 0.0078125\nv -0.270279 -0.0625 0.0078125\nv 0.451358 -0.0625 0.0078125\nv 0.489774 -0.0625 0.0078125\nv 0.492188 -0.059796 0.0078125\nv -0.296472 -0.0546875 0.0078125\nv -0.296875 -0.0534125 0.0078125\nv -0.266329 -0.0546875 0.0078125\nv -0.265625 -0.0521935 0.0078125\nv 0.449354 -0.0546875 0.0078125\nv 0.494484 -0.0546875 0.0078125\nv -0.298416 -0.046875 0.0078125\nv -0.264254 -0.046875 0.0078125\nv 0.447141 -0.046875 0.0078125\nv 0.497071 -0.046875 0.0078125\nv 0.5 -0.0394652 0.0078125\nv -0.299622 -0.0390625 0.0078125\nv -0.263023 -0.0390625 0.0078125\nv 0.446622 -0.0390625 0.0078125\nv 0.500147 -0.0390625 0.0078125\nv 0.5 -0.0390625 0.00911502\nv -0.300276 -0.03125 0.0078125\nv -0.26196 -0.03125 0.0078125\nv 0.446087 -0.03125 0.0078125\nv 0.445312 -0.0250834 0.0078125\nv 0.502464 -0.03125 0.0078125\nv -0.300753 -0.0234375 0.0078125\nv -0.261255 -0.0234375 0.0078125\nv 0.445134 -0.0234375 0.0078125\nv 0.504144 -0.0234375 0.0078125\nv -0.302127 -0.015625 0.0078125\nv -0.259965 -0.015625 0.0078125\nv 0.444183 -0.015625 0.0078125\nv 0.504029 -0.015625 0.0078125\nv -0.303812 -0.0078125 0.0078125\nv -0.259554 -0.0078125 0.0078125\nv 0.44177 -0.0078125 0.0078125\nv 0.503441 -0.0078125 0.0078125\nv -0.304142 0 0.0078125\nv -0.259436 0 0.0078125\nv 0.439755 0 0.0078125\nv 0.502398 0 0.0078125\nv -0.303977 0.0078125 0.0078125\nv -0.258523 0.0078125 0.0078125\nv -0.257812 0.00912987 0.0078125\nv 0.438504 0.0078125 0.0078125\nv 0.4375 0.0122207 0.0078125\nv 0.501717 0.0078125 0.0078125\nv -0.302932 0.015625 0.0078125\nv -0.252312 0.015625 0.0078125\nv -0.25 0.0170726 0.0078125\nv -0.242188 0.0181399 0.0078125\nv -0.234375 0.0200799 0.0078125\nv -0.226562 0.0226067 0.0078125\nv 0.421875 0.0211381 0.0078125\nv 0.436184 0.015625 0.0078125\nv 0.429688 0.0203012 0.0078125\nv 0.500999 0.015625 0.0078125\nv -0.301771 0.0234375 0.0078125\nv -0.223322 0.0234375 0.0078125\nv -0.21875 0.0244745 0.0078125\nv -0.210938 0.0256032 0.0078125\nv -0.203125 0.025977 0.0078125\nv -0.195312 0.0260562 0.0078125\nv -0.1875 0.0262086 0.0078125\nv -0.179688 0.0263187 0.0078125\nv -0.171875 0.0267985 0.0078125\nv -0.164062 0.026946 0.0078125\nv -0.15625 0.026953 0.0078125\nv -0.148438 0.0269333 0.0078125\nv -0.140625 0.0268464 0.0078125\nv -0.132812 0.0268702 0.0078125\nv -0.125 0.027131 0.0078125\nv -0.117188 0.0272226 0.0078125\nv -0.109375 0.0270223 0.0078125\nv -0.101562 0.0267991 0.0078125\nv -0.09375 0.0266369 0.0078125\nv -0.0859375 0.0264876 0.0078125\nv -0.078125 0.0263677 0.0078125\nv -0.0703125 0.0262628 0.0078125\nv -0.0625 0.0261989 0.0078125\nv -0.0546875 0.026084 0.0078125\nv -0.046875 0.0258573 0.0078125\nv -0.0390625 0.0256756 0.0078125\nv -0.03125 0.0254762 0.0078125\nv -0.0234375 0.0252956 0.0078125\nv -0.015625 0.0251194 0.0078125\nv -0.0078125 0.0248203 0.0078125\nv 0 0.0246269 0.0078125\nv 0.0078125 0.0245243 0.0078125\nv 0.015625 0.0244828 0.0078125\nv 0.0234375 0.0245395 0.0078125\nv 0.03125 0.024656 0.0078125\nv 0.0390625 0.0247408 0.0078125\nv 0.046875 0.0248137 0.0078125\nv 0.0546875 0.0248191 0.0078125\nv 0.0625 0.0248504 0.0078125\nv 0.0703125 0.0248274 0.0078125\nv 0.078125 0.0248122 0.0078125\nv 0.0859375 0.0248822 0.0078125\nv 0.09375 0.024948 0.0078125\nv 0.101562 0.0249599 0.0078125\nv 0.109375 0.0249072 0.0078125\nv 0.117188 0.0248769 0.0078125\nv 0.125 0.0249557 0.0078125\nv 0.132812 0.0249579 0.0078125\nv 0.140625 0.0248229 0.0078125\nv 0.148438 0.0246506 0.0078125\nv 0.15625 0.0244357 0.0078125\nv 0.164062 0.0242349 0.0078125\nv 0.171875 0.0241056 0.0078125\nv 0.179688 0.0240845 0.0078125\nv 0.1875 0.0241014 0.0078125\nv 0.195312 0.024113 0.0078125\nv 0.203125 0.0241204 0.0078125\nv 0.210938 0.0241419 0.0078125\nv 0.21875 0.0241587 0.0078125\nv 0.226562 0.0241433 0.0078125\nv 0.234375 0.024231 0.0078125\nv 0.242188 0.0242861 0.0078125\nv 0.25 0.0245027 0.0078125\nv 0.257812 0.0246952 0.0078125\nv 0.265625 0.0248988 0.0078125\nv 0.273438 0.0251184 0.0078125\nv 0.28125 0.0253221 0.0078125\nv 0.289062 0.0255371 0.0078125\nv 0.296875 0.0257584 0.0078125\nv 0.304688 0.0260234 0.0078125\nv 0.3125 0.0263244 0.0078125\nv 0.320312 0.0266366 0.0078125\nv 0.328125 0.0267883 0.0078125\nv 0.335938 0.0268288 0.0078125\nv 0.34375 0.0268791 0.0078125\nv 0.351562 0.0269323 0.0078125\nv 0.359375 0.0269933 0.0078125\nv 0.367188 0.0270585 0.0078125\nv 0.375 0.0271295 0.0078125\nv 0.382812 0.026927 0.0078125\nv 0.390625 0.0264625 0.0078125\nv 0.398438 0.0258575 0.0078125\nv 0.40625 0.025201 0.0078125\nv 0.414957 0.0234375 0.0078125\nv 0.414062 0.0236474 0.0078125\nv 0.500751 0.0234375 0.0078125\nv 0.5 0.0268695 0.0078125\nv -0.300408 0.03125 0.0078125\nv 0.498866 0.03125 0.0078125\nv -0.298504 0.0390625 0.0078125\nv -0.296875 0.043042 0.0078125\nv 0.496583 0.0390625 0.0078125\nv -0.295322 0.046875 0.0078125\nv 0.494691 0.046875 0.0078125\nv 0.492188 0.054197 0.0078125\nv -0.290997 0.0546875 0.0078125\nv -0.289062 0.0585016 0.0078125\nv 0.491989 0.0546875 0.0078125\nv 0.484375 0.0603526 0.0078125\nv -0.285829 0.0625 0.0078125\nv -0.28125 0.0668596 0.0078125\nv 0.445312 0.0697962 0.0078125\nv 0.453125 0.068516 0.0078125\nv 0.460938 0.0677693 0.0078125\nv 0.46875 0.0671117 0.0078125\nv 0.479971 0.0625 0.0078125\nv 0.476562 0.0641112 0.0078125\nv -0.276528 0.0703125 0.0078125\nv -0.273438 0.0719765 0.0078125\nv -0.273438 0.0703125 0.0143281\nv -0.265625 0.0762802 0.0078125\nv -0.242188 0.0774704 0.0078125\nv -0.234375 0.0762506 0.0078125\nv -0.226562 0.0746239 0.0078125\nv -0.21875 0.0735658 0.0078125\nv -0.210938 0.0728863 0.0078125\nv -0.203125 0.0733891 0.0078125\nv -0.195312 0.0739577 0.0078125\nv -0.1875 0.0742857 0.0078125\nv -0.179688 0.0745109 0.0078125\nv -0.171875 0.07467 0.0078125\nv -0.164062 0.0749787 0.0078125\nv -0.15625 0.0750097 0.0078125\nv -0.148438 0.07501 0.0078125\nv -0.140625 0.0749932 0.0078125\nv -0.132812 0.075142 0.0078125\nv -0.125 0.0752027 0.0078125\nv -0.117188 0.075265 0.0078125\nv -0.109375 0.0752092 0.0078125\nv -0.101562 0.0750904 0.0078125\nv -0.09375 0.0750622 0.0078125\nv -0.0859375 0.07506 0.0078125\nv -0.078125 0.0750166 0.0078125\nv -0.0703125 0.0748669 0.0078125\nv -0.0625 0.0747229 0.0078125\nv -0.0546875 0.0745496 0.0078125\nv -0.046875 0.0743543 0.0078125\nv -0.0390625 0.0742417 0.0078125\nv -0.03125 0.0741113 0.0078125\nv -0.0234375 0.0738948 0.0078125\nv -0.015625 0.0737026 0.0078125\nv -0.0078125 0.0735822 0.0078125\nv 0 0.0735608 0.0078125\nv 0.0078125 0.0733973 0.0078125\nv 0.015625 0.0732845 0.0078125\nv 0.0234375 0.0732054 0.0078125\nv 0.03125 0.0731489 0.0078125\nv 0.0390625 0.0730746 0.0078125\nv 0.046875 0.0729927 0.0078125\nv 0.0546875 0.0728642 0.0078125\nv 0.0625 0.0728388 0.0078125\nv 0.0703125 0.0728188 0.0078125\nv 0.078125 0.0728523 0.0078125\nv 0.0859375 0.0728998 0.0078125\nv 0.09375 0.072898 0.0078125\nv 0.101562 0.0728672 0.0078125\nv 0.109375 0.0728481 0.0078125\nv 0.117188 0.0728408 0.0078125\nv 0.125 0.0727977 0.0078125\nv 0.132812 0.0727468 0.0078125\nv 0.140625 0.0727158 0.0078125\nv 0.148438 0.0726735 0.0078125\nv 0.15625 0.0726493 0.0078125\nv 0.164062 0.0726338 0.0078125\nv 0.171875 0.0726251 0.0078125\nv 0.179688 0.072642 0.0078125\nv 0.1875 0.0726821 0.0078125\nv 0.195312 0.0727314 0.0078125\nv 0.203125 0.0727677 0.0078125\nv 0.210938 0.0727355 0.0078125\nv 0.21875 0.0726757 0.0078125\nv 0.226562 0.0726666 0.0078125\nv 0.234375 0.072651 0.0078125\nv 0.242188 0.072628 0.0078125\nv 0.25 0.0726254 0.0078125\nv 0.257812 0.0726879 0.0078125\nv 0.265625 0.0727502 0.0078125\nv 0.273438 0.0728331 0.0078125\nv 0.28125 0.0729149 0.0078125\nv 0.289062 0.0730067 0.0078125\nv 0.296875 0.0730334 0.0078125\nv 0.304688 0.0730374 0.0078125\nv 0.3125 0.0730352 0.0078125\nv 0.320312 0.0730378 0.0078125\nv 0.328125 0.0731009 0.0078125\nv 0.335938 0.07316 0.0078125\nv 0.34375 0.0731952 0.0078125\nv 0.351562 0.0731804 0.0078125\nv 0.359375 0.0730974 0.0078125\nv 0.367188 0.0729442 0.0078125\nv 0.375 0.072587 0.0078125\nv 0.382812 0.0720942 0.0078125\nv 0.390625 0.0718458 0.0078125\nv 0.398438 0.0716394 0.0078125\nv 0.40625 0.0715089 0.0078125\nv 0.414062 0.0713395 0.0078125\nv 0.421875 0.071092 0.0078125\nv 0.429688 0.0709344 0.0078125\nv 0.439182 0.0703125 0.0078125\nv 0.4375 0.0704467 0.0078125\nv -0.262397 0.078125 0.0078125\nv -0.257812 0.0803691 0.0078125\nv -0.257812 0.078125 0.0137841\nv -0.244814 0.078125 0.0078125\nv -0.25 0.0795556 0.0078125\nv -0.25 0.078125 0.0125514\nv -0.265625 0.160915 0.0078125\nv -0.257812 0.162682 0.0078125\nv -0.28125 0.167997 0.0078125\nv -0.27319 0.164062 0.0078125\nv -0.273438 0.16415 0.0078125\nv -0.256696 0.164062 0.0078125\nv -0.257812 0.164062 0.0118408\nv -0.288304 0.171875 0.0078125\nv -0.289062 0.172561 0.0078125\nv -0.25329 0.171875 0.0078125\nv -0.294413 0.179688 0.0078125\nv -0.296875 0.185605 0.0078125\nv -0.250087 0.179688 0.0078125\nv -0.25 0.179866 0.0078125\nv -0.297389 0.1875 0.0078125\nv -0.24668 0.1875 0.0078125\nv -0.298058 0.195312 0.0078125\nv -0.244793 0.195312 0.0078125\nv -0.298509 0.203125 0.0078125\nv -0.243162 0.203125 0.0078125\nv -0.242188 0.209751 0.0078125\nv -0.298882 0.210938 0.0078125\nv -0.241991 0.210938 0.0078125\nv -0.242188 0.210938 0.00939905\nv -0.299054 0.21875 0.0078125\nv -0.242082 0.21875 0.0078125\nv -0.242188 0.21875 0.00946199\nv -0.299024 0.226562 0.0078125\nv -0.242054 0.226562 0.0078125\nv -0.299304 0.234375 0.0078125\nv -0.241855 0.234375 0.0078125\nv -0.299738 0.242188 0.0078125\nv -0.241915 0.242188 0.0078125\nv -0.242188 0.246072 0.0078125\nv -0.300026 0.25 0.0078125\nv -0.242465 0.25 0.0078125\nv -0.299912 0.257812 0.0078125\nv -0.24295 0.257812 0.0078125\nv -0.299344 0.265625 0.0078125\nv -0.243439 0.265625 0.0078125\nv -0.298149 0.273438 0.0078125\nv -0.296875 0.279514 0.0078125\nv -0.244115 0.273438 0.0078125\nv -0.296473 0.28125 0.0078125\nv -0.245568 0.28125 0.0078125\nv -0.294565 0.289062 0.0078125\nv -0.247563 0.289062 0.0078125\nv -0.292442 0.296875 0.0078125\nv -0.249746 0.296875 0.0078125\nv -0.25 0.297732 0.0078125\nv -0.290431 0.304688 0.0078125\nv -0.289062 0.311801 0.0078125\nv -0.252313 0.304688 0.0078125\nv -0.288922 0.3125 0.0078125\nv -0.254389 0.3125 0.0078125\nv -0.287838 0.320312 0.0078125\nv -0.255979 0.320312 0.0078125\nv -0.257812 0.326637 0.0078125\nv -0.285714 0.328125 0.0078125\nv -0.258338 0.328125 0.0078125\nv -0.257812 0.328125 0.0105428\nv -0.282453 0.335938 0.0078125\nv -0.28125 0.339406 0.0078125\nv -0.261611 0.335938 0.0078125\nv -0.276745 0.34375 0.0078125\nv -0.28125 0.34375 0.0139277\nv -0.273438 0.349549 0.0078125\nv -0.265554 0.34375 0.0078125\nv -0.265625 0.343866 0.0078125\nv -0.28125 0.351562 0.0155801\nv -0.273438 0.351562 0.0085209\nv -0.265625 0.351562 0.0120273\nv -0.273438 0.359375 0.0105504\nv -0.265625 0.359375 0.0138665\nv -0.28125 0.367188 0.0127047\nv -0.273438 0.367188 0.0103181\nv -0.28125 0.375447 0.0078125\nv -0.28125 0.375 0.00811692\nv -0.273438 0.376116 0.0078125\nv -0.273438 0.375 0.00828667\nv -0.265625 0.375 0.0151097\nv -0.284 0.382812 0.0078125\nv -0.271437 0.382812 0.0078125\nv -0.265625 0.382812 0.0141823\nv -0.287726 0.390625 0.0078125\nv -0.289062 0.392739 0.0078125\nv -0.289062 0.390625 0.0120353\nv -0.269526 0.390625 0.0078125\nv -0.265625 0.390625 0.0127676\nv -0.291283 0.398438 0.0078125\nv -0.2674 0.398438 0.0078125\nv -0.265625 0.404221 0.0078125\nv -0.265625 0.398438 0.0109505\nv -0.292206 0.40625 0.0078125\nv -0.264877 0.40625 0.0078125\nv -0.292894 0.414062 0.0078125\nv -0.265091 0.414062 0.0078125\nv -0.265625 0.421066 0.0078125\nv -0.293563 0.421875 0.0078125\nv -0.265681 0.421875 0.0078125\nv -0.265625 0.421875 0.00799432\nv -0.294161 0.429688 0.0078125\nv -0.266033 0.429688 0.0078125\nv -0.265625 0.429688 0.00903688\nv -0.294585 0.4375 0.0078125\nv -0.266082 0.4375 0.0078125\nv -0.265625 0.4375 0.0091813\nv -0.29485 0.445312 0.0078125\nv -0.265933 0.445312 0.0078125\nv -0.265625 0.445312 0.00885149\nv -0.29507 0.453125 0.0078125\nv -0.266004 0.453125 0.0078125\nv -0.265625 0.453125 0.0092357\nv -0.295579 0.460938 0.0078125\nv -0.266012 0.460938 0.0078125\nv -0.265625 0.460938 0.009448\nv -0.296276 0.46875 0.0078125\nv -0.296875 0.475506 0.0078125\nv -0.296875 0.46875 0.0152468\nv -0.265744 0.46875 0.0078125\nv -0.265625 0.470794 0.0078125\nv -0.265625 0.46875 0.00849832\nv -0.296959 0.476562 0.0078125\nv -0.265346 0.476562 0.0078125\nv -0.297518 0.484375 0.0078125\nv -0.264915 0.484375 0.0078125\nv -0.298099 0.492188 0.0078125\nv -0.264813 0.492188 0.0078125\nv -0.298793 0.5 0.0078125\nv -0.264932 0.5 0.0078125\nv -0.299639 0.507812 0.0078125\nv -0.26512 0.507812 0.0078125\nv -0.300368 0.515625 0.0078125\nv -0.265331 0.515625 0.0078125\nv -0.301103 0.523438 0.0078125\nv -0.265561 0.523438 0.0078125\nv -0.265625 0.524972 0.0078125\nv -0.301732 0.53125 0.0078125\nv -0.266 0.53125 0.0078125\nv -0.302298 0.539062 0.0078125\nv -0.266519 0.539062 0.0078125\nv -0.302785 0.546875 0.0078125\nv -0.266897 0.546875 0.0078125\nv -0.303264 0.554688 0.0078125\nv -0.267203 0.554688 0.0078125\nv -0.303813 0.5625 0.0078125\nv -0.267529 0.5625 0.0078125\nv -0.30415 0.570312 0.0078125\nv -0.304688 0.570312 0.0143874\nv -0.267661 0.570312 0.0078125\nv -0.303076 0.578125 0.0078125\nv -0.268137 0.578125 0.0078125\nv -0.301915 0.585938 0.0078125\nv -0.2691 0.585938 0.0078125\nv -0.301295 0.59375 0.0078125\nv -0.270585 0.59375 0.0078125\nv -0.273438 0.600962 0.0078125\nv -0.298622 0.601562 0.0078125\nv -0.296875 0.605635 0.0078125\nv -0.273758 0.601562 0.0078125\nv -0.273438 0.601562 0.00880717\nv -0.293466 0.609375 0.0078125\nv -0.296875 0.609375 0.0134639\nv -0.289062 0.614374 0.0078125\nv -0.281093 0.609375 0.0078125\nv -0.28125 0.609538 0.0078125\nv -0.289062 0.617188 0.0120812\nv -0.296875 0.673147 0.0078125\nv -0.296875 0.671875 0.00921027\nv -0.301123 0.679688 0.0078125\nv -0.304688 0.683557 0.0078125\nv -0.295167 0.679688 0.0078125\nv -0.306143 0.6875 0.0078125\nv -0.293565 0.6875 0.0078125\nv -0.308747 0.695312 0.0078125\nv -0.290518 0.695312 0.0078125\nv -0.289062 0.701361 0.0078125\nv -0.289062 0.695312 0.0131985\nv -0.311279 0.703125 0.0078125\nv -0.3125 0.705316 0.0078125\nv -0.288639 0.703125 0.0078125\nv -0.315544 0.710938 0.0078125\nv -0.286522 0.710938 0.0078125\nv -0.31817 0.71875 0.0078125\nv -0.283647 0.71875 0.0078125\nv -0.320138 0.726562 0.0078125\nv -0.320312 0.72731 0.0078125\nv -0.320312 0.726562 0.0138212\nv -0.282516 0.726562 0.0078125\nv -0.32186 0.734375 0.0078125\nv -0.282336 0.734375 0.0078125\nv -0.323509 0.742188 0.0078125\nv -0.282661 0.742188 0.0078125\nv -0.325036 0.75 0.0078125\nv -0.283726 0.75 0.0078125\nv -0.326069 0.757812 0.0078125\nv -0.284379 0.757812 0.0078125\nv -0.327393 0.765625 0.0078125\nv -0.328125 0.768987 0.0078125\nv -0.285353 0.765625 0.0078125\nv -0.329103 0.773438 0.0078125\nv -0.286462 0.773438 0.0078125\nv -0.330607 0.78125 0.0078125\nv -0.287906 0.78125 0.0078125\nv -0.289062 0.786464 0.0078125\nv -0.331866 0.789062 0.0078125\nv -0.290008 0.789062 0.0078125\nv -0.332936 0.796875 0.0078125\nv -0.292717 0.796875 0.0078125\nv -0.334157 0.804688 0.0078125\nv -0.295965 0.804688 0.0078125\nv -0.296875 0.80662 0.0078125\nv -0.334208 0.8125 0.0078125\nv -0.300316 0.8125 0.0078125\nv -0.304688 0.818468 0.0078125\nv -0.333744 0.820312 0.0078125\nv -0.305943 0.820312 0.0078125\nv -0.3125 0.827934 0.0078125\nv -0.328601 0.828125 0.0078125\nv -0.328125 0.828397 0.0078125\nv -0.312825 0.828125 0.0078125\nv -0.320312 0.830419 0.0078125\nv 0.046875 -0.539082 0.015625\nv 0.0546875 -0.539277 0.015625\nv 0.0625 -0.539089 0.015625\nv 0.0234375 -0.53151 0.015625\nv 0.03125 -0.534998 0.015625\nv 0.0467223 -0.539062 0.015625\nv 0.0390625 -0.537466 0.015625\nv 0.0630623 -0.539062 0.015625\nv 0.0625 -0.539062 0.0164279\nv 0.0703125 -0.5386 0.015625\nv 0.078125 -0.536982 0.015625\nv 0.0859375 -0.534304 0.015625\nv 0.0078125 -0.525893 0.015625\nv 0.0226878 -0.53125 0.015625\nv 0.015625 -0.52818 0.015625\nv 0.015625 -0.53125 0.0219513\nv 0.0929259 -0.53125 0.015625\nv 0.09375 -0.530857 0.015625\nv 0.101562 -0.526345 0.015625\nv 0.000498424 -0.523438 0.015625\nv 0 -0.522277 0.015625\nv 0 -0.523438 0.0163126\nv 0.106524 -0.523438 0.015625\nv 0.109375 -0.521081 0.015625\nv -0.00207284 -0.515625 0.015625\nv 0.11559 -0.515625 0.015625\nv 0.117188 -0.513823 0.015625\nv -0.000945809 -0.507812 0.015625\nv 0 -0.507333 0.015625\nv 0.0078125 -0.503494 0.015625\nv 0.121564 -0.507812 0.015625\nv 0.0145641 -0.5 0.015625\nv 0.015625 -0.499514 0.015625\nv 0.0234375 -0.495257 0.015625\nv 0.1242 -0.5 0.015625\nv 0.125 -0.498202 0.015625\nv 0.0283572 -0.492188 0.015625\nv 0.03125 -0.490452 0.015625\nv 0.0390625 -0.486483 0.015625\nv 0.12771 -0.492188 0.015625\nv 0.0428015 -0.484375 0.015625\nv 0.046875 -0.48287 0.015625\nv 0.0546875 -0.479893 0.015625\nv 0.0625 -0.477187 0.015625\nv 0.126221 -0.484375 0.015625\nv 0.125 -0.48292 0.015625\nv 0.125 -0.484375 0.0222051\nv 0.0645063 -0.476562 0.015625\nv 0.0703125 -0.474899 0.015625\nv 0.078125 -0.473226 0.015625\nv 0.0859375 -0.471716 0.015625\nv 0.09375 -0.470056 0.015625\nv 0.101562 -0.471235 0.015625\nv 0.109375 -0.472804 0.015625\nv 0.117383 -0.476562 0.015625\nv 0.117188 -0.476439 0.015625\nv 0.117188 -0.476562 0.0171812\nv -0.289062 -0.0661319 0.015625\nv -0.28125 -0.0676252 0.015625\nv -0.273438 -0.0657244 0.015625\nv 0.453125 -0.0646231 0.015625\nv 0.460938 -0.0674837 0.015625\nv 0.46875 -0.06659 0.015625\nv 0.476562 -0.0665719 0.015625\nv 0.484375 -0.0644195 0.015625\nv -0.29318 -0.0625 0.015625\nv -0.270352 -0.0625 0.015625\nv 0.451082 -0.0625 0.015625\nv 0.488657 -0.0625 0.015625\nv 0.492188 -0.058269 0.015625\nv -0.296256 -0.0546875 0.015625\nv -0.296875 -0.0526509 0.015625\nv -0.266465 -0.0546875 0.015625\nv -0.265625 -0.0517956 0.015625\nv 0.448578 -0.0546875 0.015625\nv 0.493668 -0.0546875 0.015625\nv -0.298184 -0.046875 0.015625\nv -0.264305 -0.046875 0.015625\nv 0.445992 -0.046875 0.015625\nv 0.445312 -0.046875 0.0196782\nv 0.496287 -0.046875 0.015625\nv -0.29945 -0.0390625 0.015625\nv -0.263081 -0.0390625 0.015625\nv 0.44568 -0.0390625 0.015625\nv 0.445312 -0.0390625 0.0181078\nv 0.49906 -0.0390625 0.015625\nv 0.5 -0.0363842 0.015625\nv -0.300143 -0.03125 0.015625\nv -0.262016 -0.03125 0.015625\nv 0.445406 -0.03125 0.015625\nv 0.445312 -0.0305287 0.015625\nv 0.445312 -0.03125 0.0164469\nv 0.501548 -0.03125 0.015625\nv -0.300611 -0.0234375 0.015625\nv -0.261295 -0.0234375 0.015625\nv 0.444494 -0.0234375 0.015625\nv 0.503414 -0.0234375 0.015625\nv -0.301972 -0.015625 0.015625\nv -0.260019 -0.015625 0.015625\nv 0.44378 -0.015625 0.015625\nv 0.503362 -0.015625 0.015625\nv -0.303598 -0.0078125 0.015625\nv -0.259664 -0.0078125 0.015625\nv 0.441392 -0.0078125 0.015625\nv 0.502763 -0.0078125 0.015625\nv -0.304075 0 0.015625\nv -0.259704 0 0.015625\nv 0.439298 0 0.015625\nv 0.501995 0 0.015625\nv -0.304015 0.0078125 0.015625\nv -0.258656 0.0078125 0.015625\nv -0.257812 0.00934478 0.015625\nv 0.438356 0.0078125 0.015625\nv 0.4375 0.0120675 0.015625\nv 0.501331 0.0078125 0.015625\nv -0.302876 0.015625 0.015625\nv -0.252475 0.015625 0.015625\nv -0.25 0.0172251 0.015625\nv -0.242188 0.0181891 0.015625\nv -0.234375 0.0201079 0.015625\nv -0.226562 0.0226496 0.015625\nv 0.421875 0.0211556 0.015625\nv 0.436247 0.015625 0.015625\nv 0.429688 0.0203539 0.015625\nv 0.500562 0.015625 0.015625\nv -0.301576 0.0234375 0.015625\nv -0.223463 0.0234375 0.015625\nv -0.21875 0.0245015 0.015625\nv -0.210938 0.0256759 0.015625\nv -0.203125 0.0260314 0.015625\nv -0.195312 0.0261065 0.015625\nv -0.1875 0.0262444 0.015625\nv -0.179688 0.0263398 0.015625\nv -0.171875 0.026808 0.015625\nv -0.164062 0.0269477 0.015625\nv -0.15625 0.0269411 0.015625\nv -0.148438 0.0269296 0.015625\nv -0.140625 0.026857 0.015625\nv -0.132812 0.02688 0.015625\nv -0.125 0.027138 0.015625\nv -0.117188 0.0272145 0.015625\nv -0.109375 0.0269859 0.015625\nv -0.101562 0.0267692 0.015625\nv -0.09375 0.02659 0.015625\nv -0.0859375 0.0264395 0.015625\nv -0.078125 0.0263344 0.015625\nv -0.0703125 0.0262326 0.015625\nv -0.0625 0.0261865 0.015625\nv -0.0546875 0.0260352 0.015625\nv -0.046875 0.0258354 0.015625\nv -0.0390625 0.0256792 0.015625\nv -0.03125 0.0255119 0.015625\nv -0.0234375 0.025291 0.015625\nv -0.015625 0.0250631 0.015625\nv -0.0078125 0.024889 0.015625\nv 0 0.0246678 0.015625\nv 0.0078125 0.0244825 0.015625\nv 0.015625 0.0244078 0.015625\nv 0.0234375 0.0244911 0.015625\nv 0.03125 0.0247492 0.015625\nv 0.0390625 0.0248323 0.015625\nv 0.046875 0.0247377 0.015625\nv 0.0546875 0.0247594 0.015625\nv 0.0625 0.0248288 0.015625\nv 0.0703125 0.0248775 0.015625\nv 0.078125 0.0249113 0.015625\nv 0.0859375 0.0249901 0.015625\nv 0.09375 0.0250351 0.015625\nv 0.101562 0.0250953 0.015625\nv 0.109375 0.0250895 0.015625\nv 0.117188 0.0250694 0.015625\nv 0.125 0.0250636 0.015625\nv 0.132812 0.0250223 0.015625\nv 0.140625 0.024954 0.015625\nv 0.148438 0.0247722 0.015625\nv 0.15625 0.0245679 0.015625\nv 0.164062 0.0243205 0.015625\nv 0.171875 0.0241531 0.015625\nv 0.179688 0.0241176 0.015625\nv 0.1875 0.0241166 0.015625\nv 0.195312 0.0241155 0.015625\nv 0.203125 0.0241058 0.015625\nv 0.210938 0.0240814 0.015625\nv 0.21875 0.024041 0.015625\nv 0.226562 0.0239942 0.015625\nv 0.234375 0.0240573 0.015625\nv 0.242188 0.0242007 0.015625\nv 0.25 0.0242509 0.015625\nv 0.257812 0.0245388 0.015625\nv 0.265625 0.0247524 0.015625\nv 0.273438 0.0249699 0.015625\nv 0.28125 0.0251699 0.015625\nv 0.289062 0.0253951 0.015625\nv 0.296875 0.0256161 0.015625\nv 0.304688 0.0258872 0.015625\nv 0.3125 0.0261804 0.015625\nv 0.320312 0.02649 0.015625\nv 0.328125 0.0266723 0.015625\nv 0.335938 0.0267111 0.015625\nv 0.34375 0.0267661 0.015625\nv 0.351562 0.0268373 0.015625\nv 0.359375 0.0269081 0.015625\nv 0.367188 0.02697 0.015625\nv 0.375 0.0270203 0.015625\nv 0.382812 0.0268399 0.015625\nv 0.390625 0.0263956 0.015625\nv 0.398438 0.0257726 0.015625\nv 0.40625 0.0251683 0.015625\nv 0.414886 0.0234375 0.015625\nv 0.414062 0.0236294 0.015625\nv 0.50038 0.0234375 0.015625\nv 0.5 0.025368 0.015625\nv 0.5 0.0234375 0.0227155\nv -0.300219 0.03125 0.015625\nv 0.498625 0.03125 0.015625\nv -0.29785 0.0390625 0.015625\nv -0.296875 0.0411018 0.015625\nv 0.49641 0.0390625 0.015625\nv -0.294058 0.046875 0.015625\nv 0.494427 0.046875 0.015625\nv 0.492188 0.0534201 0.015625\nv -0.289655 0.0546875 0.015625\nv -0.289062 0.0558565 0.015625\nv -0.289062 0.0546875 0.0224923\nv 0.491679 0.0546875 0.015625\nv 0.484375 0.0601092 0.015625\nv -0.283572 0.0625 0.015625\nv -0.28125 0.0645998 0.015625\nv -0.273438 0.0698717 0.015625\nv 0.445312 0.0698282 0.015625\nv 0.453125 0.0685477 0.015625\nv 0.460938 0.0677419 0.015625\nv 0.46875 0.0669989 0.015625\nv 0.479427 0.0625 0.015625\nv 0.476562 0.063865 0.015625\nv -0.272387 0.0703125 0.015625\nv -0.265625 0.073329 0.015625\nv -0.257812 0.0772798 0.015625\nv -0.25 0.0771642 0.015625\nv -0.242188 0.0757102 0.015625\nv -0.234375 0.0746252 0.015625\nv -0.226562 0.0736975 0.015625\nv -0.21875 0.0729173 0.015625\nv -0.210938 0.0724549 0.015625\nv -0.203125 0.0730795 0.015625\nv -0.195312 0.0736304 0.015625\nv -0.1875 0.0740578 0.015625\nv -0.179688 0.0743735 0.015625\nv -0.171875 0.0746589 0.015625\nv -0.164062 0.0750039 0.015625\nv -0.15625 0.0750349 0.015625\nv -0.148438 0.0750546 0.015625\nv -0.140625 0.0750381 0.015625\nv -0.132812 0.0751973 0.015625\nv -0.125 0.0752773 0.015625\nv -0.117188 0.0753055 0.015625\nv -0.109375 0.0752667 0.015625\nv -0.101562 0.0751646 0.015625\nv -0.09375 0.0751405 0.015625\nv -0.0859375 0.0751542 0.015625\nv -0.078125 0.0750511 0.015625\nv -0.0703125 0.0748853 0.015625\nv -0.0625 0.0747293 0.015625\nv -0.0546875 0.0745413 0.015625\nv -0.046875 0.0743383 0.015625\nv -0.0390625 0.0742283 0.015625\nv -0.03125 0.0740796 0.015625\nv -0.0234375 0.073804 0.015625\nv -0.015625 0.0735551 0.015625\nv -0.0078125 0.073447 0.015625\nv 0 0.0734361 0.015625\nv 0.0078125 0.073376 0.015625\nv 0.015625 0.0732069 0.015625\nv 0.0234375 0.0731091 0.015625\nv 0.03125 0.0730846 0.015625\nv 0.0390625 0.0730794 0.015625\nv 0.046875 0.0730197 0.015625\nv 0.0546875 0.0729502 0.015625\nv 0.0625 0.0728686 0.015625\nv 0.0703125 0.0728572 0.015625\nv 0.078125 0.0729134 0.015625\nv 0.0859375 0.0729666 0.015625\nv 0.09375 0.0729715 0.015625\nv 0.101562 0.072947 0.015625\nv 0.109375 0.0729287 0.015625\nv 0.117188 0.0729334 0.015625\nv 0.125 0.0729089 0.015625\nv 0.132812 0.0728925 0.015625\nv 0.140625 0.0728635 0.015625\nv 0.148438 0.0728318 0.015625\nv 0.15625 0.0727616 0.015625\nv 0.164062 0.0727656 0.015625\nv 0.171875 0.0727608 0.015625\nv 0.179688 0.0727512 0.015625\nv 0.1875 0.0727439 0.015625\nv 0.195312 0.0727686 0.015625\nv 0.203125 0.0727694 0.015625\nv 0.210938 0.0727323 0.015625\nv 0.21875 0.0726358 0.015625\nv 0.226562 0.0726177 0.015625\nv 0.234375 0.0725943 0.015625\nv 0.242188 0.0725452 0.015625\nv 0.25 0.0724977 0.015625\nv 0.257812 0.0725504 0.015625\nv 0.265625 0.0726241 0.015625\nv 0.273438 0.0727224 0.015625\nv 0.28125 0.0728418 0.015625\nv 0.289062 0.0729406 0.015625\nv 0.296875 0.0729792 0.015625\nv 0.304688 0.072996 0.015625\nv 0.3125 0.0729966 0.015625\nv 0.320312 0.0730045 0.015625\nv 0.328125 0.0730775 0.015625\nv 0.335938 0.0731495 0.015625\nv 0.34375 0.0731835 0.015625\nv 0.351562 0.0731916 0.015625\nv 0.359375 0.0731161 0.015625\nv 0.367188 0.0729653 0.015625\nv 0.375 0.0726076 0.015625\nv 0.382812 0.0721018 0.015625\nv 0.390625 0.0718403 0.015625\nv 0.398438 0.0716516 0.015625\nv 0.40625 0.0714827 0.015625\nv 0.414062 0.0713293 0.015625\nv 0.421875 0.0711364 0.015625\nv 0.429688 0.0709782 0.015625\nv 0.439675 0.0703125 0.015625\nv 0.4375 0.0704899 0.015625\nv -0.265625 0.163109 0.015625\nv -0.28125 0.168767 0.015625\nv -0.268367 0.164062 0.015625\nv -0.273438 0.165407 0.015625\nv -0.262152 0.164062 0.015625\nv -0.265625 0.164062 0.0206215\nv -0.257812 0.165898 0.015625\nv -0.286436 0.171875 0.015625\nv -0.289062 0.174422 0.015625\nv -0.254876 0.171875 0.015625\nv -0.293467 0.179688 0.015625\nv -0.296875 0.185532 0.015625\nv -0.251181 0.179688 0.015625\nv -0.25 0.182267 0.015625\nv -0.29758 0.1875 0.015625\nv -0.247439 0.1875 0.015625\nv -0.298153 0.195312 0.015625\nv -0.245497 0.195312 0.015625\nv -0.298641 0.203125 0.015625\nv -0.243903 0.203125 0.015625\nv -0.299038 0.210938 0.015625\nv -0.242914 0.210938 0.015625\nv -0.299184 0.21875 0.015625\nv -0.242549 0.21875 0.015625\nv -0.242188 0.223597 0.015625\nv -0.299195 0.226562 0.015625\nv -0.241945 0.226562 0.015625\nv -0.242188 0.226562 0.0204001\nv -0.299497 0.234375 0.015625\nv -0.241861 0.234375 0.015625\nv -0.299979 0.242188 0.015625\nv -0.241901 0.242188 0.015625\nv -0.242188 0.249198 0.015625\nv -0.300226 0.25 0.015625\nv -0.24222 0.25 0.015625\nv -0.242188 0.25 0.0162891\nv -0.299986 0.257812 0.015625\nv -0.24278 0.257812 0.015625\nv -0.299345 0.265625 0.015625\nv -0.243416 0.265625 0.015625\nv -0.297996 0.273438 0.015625\nv -0.296875 0.278621 0.015625\nv -0.244157 0.273438 0.015625\nv -0.296252 0.28125 0.015625\nv -0.245575 0.28125 0.015625\nv -0.294237 0.289062 0.015625\nv -0.247362 0.289062 0.015625\nv -0.291985 0.296875 0.015625\nv -0.249203 0.296875 0.015625\nv -0.25 0.299881 0.015625\nv -0.289877 0.304688 0.015625\nv -0.289062 0.308821 0.015625\nv -0.251443 0.304688 0.015625\nv -0.288401 0.3125 0.015625\nv -0.289062 0.3125 0.0207293\nv -0.253287 0.3125 0.015625\nv -0.287347 0.320312 0.015625\nv -0.254799 0.320312 0.015625\nv -0.285812 0.328125 0.015625\nv -0.256979 0.328125 0.015625\nv -0.257812 0.331311 0.015625\nv -0.283615 0.335938 0.015625\nv -0.25913 0.335938 0.015625\nv -0.257812 0.335938 0.0207752\nv -0.281712 0.34375 0.015625\nv -0.260843 0.34375 0.015625\nv -0.281263 0.351562 0.015625\nv -0.28125 0.352487 0.015625\nv -0.262357 0.351562 0.015625\nv -0.281007 0.359375 0.015625\nv -0.28125 0.360088 0.015625\nv -0.28125 0.359375 0.0157788\nv -0.263633 0.359375 0.015625\nv -0.265625 0.366567 0.015625\nv -0.282432 0.367188 0.015625\nv -0.265907 0.367188 0.015625\nv -0.265625 0.36885 0.015625\nv -0.265625 0.367188 0.0158486\nv -0.284746 0.375 0.015625\nv -0.264981 0.375 0.015625\nv -0.287245 0.382812 0.015625\nv -0.289062 0.387866 0.015625\nv -0.289062 0.382812 0.0200445\nv -0.264162 0.382812 0.015625\nv -0.289778 0.390625 0.015625\nv -0.263207 0.390625 0.015625\nv -0.292224 0.398438 0.015625\nv -0.262688 0.398438 0.015625\nv -0.29307 0.40625 0.015625\nv -0.262403 0.40625 0.015625\nv -0.293638 0.414062 0.015625\nv -0.262701 0.414062 0.015625\nv -0.294249 0.421875 0.015625\nv -0.263024 0.421875 0.015625\nv -0.294815 0.429688 0.015625\nv -0.26318 0.429688 0.015625\nv -0.29519 0.4375 0.015625\nv -0.263303 0.4375 0.015625\nv -0.295448 0.445312 0.015625\nv -0.26355 0.445312 0.015625\nv -0.295769 0.453125 0.015625\nv -0.263931 0.453125 0.015625\nv -0.296292 0.460938 0.015625\nv -0.296875 0.468377 0.015625\nv -0.26427 0.460938 0.015625\nv -0.296901 0.46875 0.015625\nv -0.26455 0.46875 0.015625\nv -0.297452 0.476562 0.015625\nv -0.26456 0.476562 0.015625\nv -0.297837 0.484375 0.015625\nv -0.264446 0.484375 0.015625\nv -0.298294 0.492188 0.015625\nv -0.264553 0.492188 0.015625\nv -0.298961 0.5 0.015625\nv -0.264746 0.5 0.015625\nv -0.299809 0.507812 0.015625\nv -0.26502 0.507812 0.015625\nv -0.300508 0.515625 0.015625\nv -0.265266 0.515625 0.015625\nv -0.301247 0.523438 0.015625\nv -0.265569 0.523438 0.015625\nv -0.265625 0.52456 0.015625\nv -0.30191 0.53125 0.015625\nv -0.266112 0.53125 0.015625\nv -0.302511 0.539062 0.015625\nv -0.266693 0.539062 0.015625\nv -0.3031 0.546875 0.015625\nv -0.267039 0.546875 0.015625\nv -0.303712 0.554688 0.015625\nv -0.267234 0.554688 0.015625\nv -0.3043 0.5625 0.015625\nv -0.304688 0.568681 0.015625\nv -0.304688 0.5625 0.0227895\nv -0.267424 0.5625 0.015625\nv -0.304789 0.570312 0.015625\nv -0.304688 0.571515 0.015625\nv -0.267605 0.570312 0.015625\nv -0.304185 0.578125 0.015625\nv -0.304688 0.578125 0.0192922\nv -0.268057 0.578125 0.015625\nv -0.303374 0.585938 0.015625\nv -0.304688 0.585938 0.0228351\nv -0.269001 0.585938 0.015625\nv -0.302271 0.59375 0.015625\nv -0.270281 0.59375 0.015625\nv -0.300237 0.601562 0.015625\nv -0.271842 0.601562 0.015625\nv -0.273438 0.604268 0.015625\nv -0.29753 0.609375 0.015625\nv -0.296875 0.611256 0.015625\nv -0.277929 0.609375 0.015625\nv -0.28125 0.613587 0.015625\nv -0.273438 0.609375 0.0231547\nv -0.291668 0.617188 0.015625\nv -0.296875 0.617188 0.0230628\nv -0.285676 0.617188 0.015625\nv -0.289062 0.621116 0.015625\nv -0.28125 0.617188 0.020487\nv -0.289062 0.625 0.0194598\nv -0.289062 0.632812 0.0227169\nv -0.296875 0.640625 0.0204407\nv -0.289062 0.640625 0.021931\nv -0.296875 0.648438 0.0188335\nv -0.289062 0.648438 0.022595\nv -0.296875 0.65625 0.017553\nv -0.296875 0.664907 0.015625\nv -0.296875 0.664062 0.0160262\nv -0.299223 0.671875 0.015625\nv -0.2945 0.671875 0.015625\nv -0.301954 0.679688 0.015625\nv -0.304688 0.683901 0.015625\nv -0.304688 0.679688 0.0200448\nv -0.292824 0.679688 0.015625\nv -0.289062 0.679688 0.0232447\nv -0.306155 0.6875 0.015625\nv -0.291111 0.6875 0.015625\nv -0.289062 0.693055 0.015625\nv -0.289062 0.6875 0.0200141\nv -0.308884 0.695312 0.015625\nv -0.288385 0.695312 0.015625\nv -0.310752 0.703125 0.015625\nv -0.3125 0.706409 0.015625\nv -0.287528 0.703125 0.015625\nv -0.315059 0.710938 0.015625\nv -0.28502 0.710938 0.015625\nv -0.318277 0.71875 0.015625\nv -0.320312 0.726353 0.015625\nv -0.282757 0.71875 0.015625\nv -0.320365 0.726562 0.015625\nv -0.282245 0.726562 0.015625\nv -0.322089 0.734375 0.015625\nv -0.282057 0.734375 0.015625\nv -0.323624 0.742188 0.015625\nv -0.282463 0.742188 0.015625\nv -0.325103 0.75 0.015625\nv -0.283678 0.75 0.015625\nv -0.326143 0.757812 0.015625\nv -0.284336 0.757812 0.015625\nv -0.327453 0.765625 0.015625\nv -0.328125 0.768703 0.015625\nv -0.285356 0.765625 0.015625\nv -0.329151 0.773438 0.015625\nv -0.286474 0.773438 0.015625\nv -0.330623 0.78125 0.015625\nv -0.287957 0.78125 0.015625\nv -0.289062 0.786219 0.015625\nv -0.331846 0.789062 0.015625\nv -0.290104 0.789062 0.015625\nv -0.33299 0.796875 0.015625\nv -0.292886 0.796875 0.015625\nv -0.334189 0.804688 0.015625\nv -0.295997 0.804688 0.015625\nv -0.296875 0.806494 0.015625\nv -0.334207 0.8125 0.015625\nv -0.300541 0.8125 0.015625\nv -0.304688 0.818103 0.015625\nv -0.333628 0.820312 0.015625\nv -0.306207 0.820312 0.015625\nv -0.3125 0.827192 0.015625\nv -0.328252 0.828125 0.015625\nv -0.328125 0.828196 0.015625\nv -0.328125 0.828125 0.016803\nv -0.314125 0.828125 0.015625\nv -0.320312 0.830037 0.015625\nv 0.046875 -0.539397 0.0234375\nv 0.0546875 -0.539356 0.0234375\nv 0.015625 -0.531857 0.0234375\nv 0.0234375 -0.535018 0.0234375\nv 0.03125 -0.537188 0.0234375\nv 0.0416358 -0.539062 0.0234375\nv 0.0390625 -0.538813 0.0234375\nv 0.0390625 -0.539062 0.0251383\nv 0.0590481 -0.539062 0.0234375\nv 0.0625 -0.538761 0.0234375\nv 0.0625 -0.539062 0.0265934\nv 0.0703125 -0.537733 0.0234375\nv 0.078125 -0.535935 0.0234375\nv 0.0859375 -0.533417 0.0234375\nv 0 -0.525337 0.0234375\nv 0.013919 -0.53125 0.0234375\nv 0.0078125 -0.52843 0.0234375\nv 0.0908137 -0.53125 0.0234375\nv 0.09375 -0.529986 0.0234375\nv 0.101562 -0.524575 0.0234375\nv -0.00412668 -0.523438 0.0234375\nv -0.0078125 -0.523438 0.029974\nv 0.103594 -0.523438 0.0234375\nv 0.109375 -0.51926 0.0234375\nv -0.0057155 -0.515625 0.0234375\nv -0.0078125 -0.515625 0.0280788\nv 0.1132 -0.515625 0.0234375\nv 0.117188 -0.511006 0.0234375\nv -0.00314629 -0.507812 0.0234375\nv 0 -0.506202 0.0234375\nv 0.0078125 -0.501646 0.0234375\nv 0.119409 -0.507812 0.0234375\nv 0.010577 -0.5 0.0234375\nv 0.015625 -0.497231 0.0234375\nv 0.0234375 -0.493133 0.0234375\nv 0.122998 -0.5 0.0234375\nv 0.125 -0.495688 0.0234375\nv 0.0251511 -0.492188 0.0234375\nv 0.0234375 -0.492188 0.0293843\nv 0.03125 -0.488847 0.0234375\nv 0.0390625 -0.485122 0.0234375\nv 0.126653 -0.492188 0.0234375\nv 0.125 -0.485028 0.0234375\nv 0.040674 -0.484375 0.0234375\nv 0.046875 -0.482582 0.0234375\nv 0.0546875 -0.479875 0.0234375\nv 0.0625 -0.477373 0.0234375\nv 0.124729 -0.484375 0.0234375\nv 0.117188 -0.477186 0.0234375\nv 0.0653095 -0.476562 0.0234375\nv 0.0703125 -0.475174 0.0234375\nv 0.078125 -0.473553 0.0234375\nv 0.0859375 -0.472132 0.0234375\nv 0.09375 -0.470621 0.0234375\nv 0.101562 -0.471668 0.0234375\nv 0.116251 -0.476562 0.0234375\nv 0.109375 -0.473057 0.0234375\nv -0.289062 -0.0659522 0.0234375\nv -0.28125 -0.0674688 0.0234375\nv -0.273438 -0.065543 0.0234375\nv 0.453125 -0.064886 0.0234375\nv 0.460938 -0.0672642 0.0234375\nv 0.46875 -0.066272 0.0234375\nv 0.476562 -0.0662446 0.0234375\nv 0.484375 -0.0641032 0.0234375\nv -0.292856 -0.0625 0.0234375\nv -0.270523 -0.0625 0.0234375\nv 0.450524 -0.0625 0.0234375\nv 0.487997 -0.0625 0.0234375\nv 0.492188 -0.0569983 0.0234375\nv -0.295937 -0.0546875 0.0234375\nv -0.296875 -0.0516072 0.0234375\nv -0.266572 -0.0546875 0.0234375\nv -0.265625 -0.0516116 0.0234375\nv 0.447505 -0.0546875 0.0234375\nv 0.445312 -0.0486695 0.0234375\nv 0.493028 -0.0546875 0.0234375\nv -0.297942 -0.046875 0.0234375\nv -0.264271 -0.046875 0.0234375\nv 0.444739 -0.046875 0.0234375\nv 0.495461 -0.046875 0.0234375\nv -0.299273 -0.0390625 0.0234375\nv -0.263005 -0.0390625 0.0234375\nv 0.444632 -0.0390625 0.0234375\nv 0.497757 -0.0390625 0.0234375\nv 0.5 -0.0324771 0.0234375\nv -0.299931 -0.03125 0.0234375\nv -0.261905 -0.03125 0.0234375\nv 0.444509 -0.03125 0.0234375\nv 0.500367 -0.03125 0.0234375\nv 0.5 -0.03125 0.026355\nv -0.300367 -0.0234375 0.0234375\nv -0.261127 -0.0234375 0.0234375\nv 0.443948 -0.0234375 0.0234375\nv 0.502451 -0.0234375 0.0234375\nv -0.301745 -0.015625 0.0234375\nv -0.259803 -0.015625 0.0234375\nv 0.443337 -0.015625 0.0234375\nv 0.502584 -0.015625 0.0234375\nv -0.303355 -0.0078125 0.0234375\nv -0.259476 -0.0078125 0.0234375\nv 0.440941 -0.0078125 0.0234375\nv 0.501986 -0.0078125 0.0234375\nv -0.304017 0 0.0234375\nv -0.259642 0 0.0234375\nv 0.439137 0 0.0234375\nv 0.501362 0 0.0234375\nv -0.303963 0.0078125 0.0234375\nv -0.258378 0.0078125 0.0234375\nv -0.257812 0.00879768 0.0234375\nv 0.438448 0.0078125 0.0234375\nv 0.4375 0.0127178 0.0234375\nv 0.500767 0.0078125 0.0234375\nv -0.302708 0.015625 0.0234375\nv -0.252042 0.015625 0.0234375\nv -0.25 0.0170139 0.0234375\nv -0.242188 0.0179786 0.0234375\nv -0.234375 0.0198923 0.0234375\nv -0.226562 0.0224429 0.0234375\nv 0.421875 0.0212847 0.0234375\nv 0.436502 0.015625 0.0234375\nv 0.429688 0.0204697 0.0234375\nv 0.500056 0.015625 0.0234375\nv 0.5 0.0200923 0.0234375\nv 0.5 0.015625 0.0248664\nv -0.301396 0.0234375 0.0234375\nv -0.222762 0.0234375 0.0234375\nv -0.21875 0.0243836 0.0234375\nv -0.210938 0.0256317 0.0234375\nv -0.203125 0.0259466 0.0234375\nv -0.195312 0.0260398 0.0234375\nv -0.1875 0.0261926 0.0234375\nv -0.179688 0.0263124 0.0234375\nv -0.171875 0.0267822 0.0234375\nv -0.164062 0.0269392 0.0234375\nv -0.15625 0.0269451 0.0234375\nv -0.148438 0.0269561 0.0234375\nv -0.140625 0.0268881 0.0234375\nv -0.132812 0.0269318 0.0234375\nv -0.125 0.0271789 0.0234375\nv -0.117188 0.0272264 0.0234375\nv -0.109375 0.0269865 0.0234375\nv -0.101562 0.0267506 0.0234375\nv -0.09375 0.0265838 0.0234375\nv -0.0859375 0.0264218 0.0234375\nv -0.078125 0.0263316 0.0234375\nv -0.0703125 0.026232 0.0234375\nv -0.0625 0.0261575 0.0234375\nv -0.0546875 0.0260083 0.0234375\nv -0.046875 0.0258298 0.0234375\nv -0.0390625 0.0257075 0.0234375\nv -0.03125 0.0255317 0.0234375\nv -0.0234375 0.0253217 0.0234375\nv -0.015625 0.0251096 0.0234375\nv -0.0078125 0.0249979 0.0234375\nv 0 0.0248235 0.0234375\nv 0.0078125 0.0245099 0.0234375\nv 0.015625 0.0244366 0.0234375\nv 0.0234375 0.0246222 0.0234375\nv 0.03125 0.0248 0.0234375\nv 0.0390625 0.0249632 0.0234375\nv 0.046875 0.0249383 0.0234375\nv 0.0546875 0.0248596 0.0234375\nv 0.0625 0.0248473 0.0234375\nv 0.0703125 0.0249158 0.0234375\nv 0.078125 0.0249964 0.0234375\nv 0.0859375 0.0250839 0.0234375\nv 0.09375 0.0251528 0.0234375\nv 0.101562 0.0252039 0.0234375\nv 0.109375 0.0252358 0.0234375\nv 0.117188 0.0252902 0.0234375\nv 0.125 0.0252039 0.0234375\nv 0.132812 0.0251172 0.0234375\nv 0.140625 0.0250437 0.0234375\nv 0.148438 0.0248939 0.0234375\nv 0.15625 0.024697 0.0234375\nv 0.164062 0.0244397 0.0234375\nv 0.171875 0.0242403 0.0234375\nv 0.179688 0.0241455 0.0234375\nv 0.1875 0.0241351 0.0234375\nv 0.195312 0.0241093 0.0234375\nv 0.203125 0.0240743 0.0234375\nv 0.210938 0.0240281 0.0234375\nv 0.21875 0.0239769 0.0234375\nv 0.226562 0.0239122 0.0234375\nv 0.234375 0.0239309 0.0234375\nv 0.242188 0.0240623 0.0234375\nv 0.25 0.0241672 0.0234375\nv 0.257812 0.024376 0.0234375\nv 0.265625 0.024643 0.0234375\nv 0.273438 0.0248707 0.0234375\nv 0.28125 0.0250927 0.0234375\nv 0.289062 0.0252996 0.0234375\nv 0.296875 0.0255066 0.0234375\nv 0.304688 0.0257847 0.0234375\nv 0.3125 0.0260718 0.0234375\nv 0.320312 0.0263846 0.0234375\nv 0.328125 0.0265865 0.0234375\nv 0.335938 0.0266178 0.0234375\nv 0.34375 0.0266814 0.0234375\nv 0.351562 0.0267736 0.0234375\nv 0.359375 0.026827 0.0234375\nv 0.367188 0.0268644 0.0234375\nv 0.375 0.0269003 0.0234375\nv 0.382812 0.0267595 0.0234375\nv 0.390625 0.026346 0.0234375\nv 0.398438 0.0257285 0.0234375\nv 0.40625 0.0252364 0.0234375\nv 0.415217 0.0234375 0.0234375\nv 0.414062 0.0237104 0.0234375\nv 0.499956 0.0234375 0.0234375\nv -0.299954 0.03125 0.0234375\nv 0.49814 0.03125 0.0234375\nv -0.297138 0.0390625 0.0234375\nv -0.296875 0.0396144 0.0234375\nv 0.495883 0.0390625 0.0234375\nv -0.293303 0.046875 0.0234375\nv -0.289062 0.0545349 0.0234375\nv 0.49395 0.046875 0.0234375\nv 0.492188 0.052084 0.0234375\nv -0.288939 0.0546875 0.0234375\nv 0.491168 0.0546875 0.0234375\nv 0.484375 0.0597409 0.0234375\nv -0.28236 0.0625 0.0234375\nv -0.28125 0.063491 0.0234375\nv -0.273438 0.0681455 0.0234375\nv 0.445312 0.0698828 0.0234375\nv 0.453125 0.0685544 0.0234375\nv 0.460938 0.0676452 0.0234375\nv 0.46875 0.0668568 0.0234375\nv 0.478678 0.0625 0.0234375\nv 0.476562 0.0635377 0.0234375\nv -0.268154 0.0703125 0.0234375\nv -0.265625 0.0715126 0.0234375\nv -0.257812 0.0755455 0.0234375\nv -0.25 0.0756772 0.0234375\nv -0.242188 0.074361 0.0234375\nv -0.234375 0.0735731 0.0234375\nv -0.226562 0.07278 0.0234375\nv -0.21875 0.0725659 0.0234375\nv -0.210938 0.072261 0.0234375\nv -0.203125 0.0729101 0.0234375\nv -0.195312 0.0734956 0.0234375\nv -0.1875 0.0739665 0.0234375\nv -0.179688 0.0743847 0.0234375\nv -0.171875 0.0746791 0.0234375\nv -0.164062 0.0750422 0.0234375\nv -0.15625 0.0750722 0.0234375\nv -0.148438 0.0751006 0.0234375\nv -0.140625 0.0751128 0.0234375\nv -0.132812 0.075284 0.0234375\nv -0.125 0.0754001 0.0234375\nv -0.117188 0.0754464 0.0234375\nv -0.109375 0.0754044 0.0234375\nv -0.101562 0.0752965 0.0234375\nv -0.09375 0.0752781 0.0234375\nv -0.0859375 0.0752707 0.0234375\nv -0.078125 0.0751128 0.0234375\nv -0.0703125 0.0749304 0.0234375\nv -0.0625 0.0747877 0.0234375\nv -0.0546875 0.074614 0.0234375\nv -0.046875 0.0744229 0.0234375\nv -0.0390625 0.0742622 0.0234375\nv -0.03125 0.0740574 0.0234375\nv -0.0234375 0.0738027 0.0234375\nv -0.015625 0.0735753 0.0234375\nv -0.0078125 0.0734352 0.0234375\nv 0 0.0733785 0.0234375\nv 0.0078125 0.0732917 0.0234375\nv 0.015625 0.0731917 0.0234375\nv 0.0234375 0.0730768 0.0234375\nv 0.03125 0.0730374 0.0234375\nv 0.0390625 0.0730489 0.0234375\nv 0.046875 0.0730573 0.0234375\nv 0.0546875 0.0730229 0.0234375\nv 0.0625 0.0729715 0.0234375\nv 0.0703125 0.0729419 0.0234375\nv 0.078125 0.0729866 0.0234375\nv 0.0859375 0.0730349 0.0234375\nv 0.09375 0.0730512 0.0234375\nv 0.101562 0.0730321 0.0234375\nv 0.109375 0.0730188 0.0234375\nv 0.117188 0.0730144 0.0234375\nv 0.125 0.073007 0.0234375\nv 0.132812 0.0729881 0.0234375\nv 0.140625 0.0730127 0.0234375\nv 0.148438 0.072983 0.0234375\nv 0.15625 0.0729318 0.0234375\nv 0.164062 0.0728785 0.0234375\nv 0.171875 0.0728611 0.0234375\nv 0.179688 0.0728304 0.0234375\nv 0.1875 0.0728182 0.0234375\nv 0.195312 0.0728309 0.0234375\nv 0.203125 0.0728226 0.0234375\nv 0.210938 0.0727801 0.0234375\nv 0.21875 0.072711 0.0234375\nv 0.226562 0.0725656 0.0234375\nv 0.234375 0.0725678 0.0234375\nv 0.242188 0.0724693 0.0234375\nv 0.25 0.0723918 0.0234375\nv 0.257812 0.0724403 0.0234375\nv 0.265625 0.0725202 0.0234375\nv 0.273438 0.0726343 0.0234375\nv 0.28125 0.0727713 0.0234375\nv 0.289062 0.0728867 0.0234375\nv 0.296875 0.0729299 0.0234375\nv 0.304688 0.0729626 0.0234375\nv 0.3125 0.0729637 0.0234375\nv 0.320312 0.0729795 0.0234375\nv 0.328125 0.0730617 0.0234375\nv 0.335938 0.0731412 0.0234375\nv 0.34375 0.0731836 0.0234375\nv 0.351562 0.0732122 0.0234375\nv 0.359375 0.0731405 0.0234375\nv 0.367188 0.072995 0.0234375\nv 0.375 0.0726402 0.0234375\nv 0.382812 0.0721576 0.0234375\nv 0.390625 0.0718595 0.0234375\nv 0.398438 0.0716659 0.0234375\nv 0.40625 0.0715426 0.0234375\nv 0.414062 0.0713821 0.0234375\nv 0.421875 0.0711952 0.0234375\nv 0.429688 0.0710378 0.0234375\nv 0.440456 0.0703125 0.0234375\nv 0.4375 0.0705616 0.0234375\nv -0.28125 0.169509 0.0234375\nv -0.273438 0.166304 0.0234375\nv -0.265625 0.164529 0.0234375\nv -0.257812 0.167661 0.0234375\nv -0.285422 0.171875 0.0234375\nv -0.289062 0.175441 0.0234375\nv -0.255603 0.171875 0.0234375\nv -0.292889 0.179688 0.0234375\nv -0.296875 0.185406 0.0234375\nv -0.251355 0.179688 0.0234375\nv -0.25 0.182843 0.0234375\nv -0.297705 0.1875 0.0234375\nv -0.247864 0.1875 0.0234375\nv -0.297861 0.195312 0.0234375\nv -0.245896 0.195312 0.0234375\nv -0.298465 0.203125 0.0234375\nv -0.244281 0.203125 0.0234375\nv -0.299133 0.210938 0.0234375\nv -0.243748 0.210938 0.0234375\nv -0.29933 0.21875 0.0234375\nv -0.243229 0.21875 0.0234375\nv -0.299386 0.226562 0.0234375\nv -0.242337 0.226562 0.0234375\nv -0.242188 0.229715 0.0234375\nv -0.299826 0.234375 0.0234375\nv -0.24195 0.234375 0.0234375\nv -0.242188 0.234375 0.0278364\nv -0.30028 0.242188 0.0234375\nv -0.241656 0.242188 0.0234375\nv -0.300427 0.25 0.0234375\nv -0.241826 0.25 0.0234375\nv -0.242188 0.254418 0.0234375\nv -0.30007 0.257812 0.0234375\nv -0.242469 0.257812 0.0234375\nv -0.299305 0.265625 0.0234375\nv -0.243206 0.265625 0.0234375\nv -0.29798 0.273438 0.0234375\nv -0.296875 0.277873 0.0234375\nv -0.243883 0.273438 0.0234375\nv -0.296017 0.28125 0.0234375\nv -0.245122 0.28125 0.0234375\nv -0.29427 0.289062 0.0234375\nv -0.246699 0.289062 0.0234375\nv -0.292301 0.296875 0.0234375\nv -0.24853 0.296875 0.0234375\nv -0.25 0.303114 0.0234375\nv -0.290615 0.304688 0.0234375\nv -0.250409 0.304688 0.0234375\nv -0.25 0.304688 0.0263721\nv -0.289403 0.3125 0.0234375\nv -0.289062 0.317226 0.0234375\nv -0.252062 0.3125 0.0234375\nv -0.288847 0.320312 0.0234375\nv -0.289062 0.320312 0.0242315\nv -0.253482 0.320312 0.0234375\nv -0.288301 0.328125 0.0234375\nv -0.289062 0.328125 0.0261508\nv -0.25532 0.328125 0.0234375\nv -0.286964 0.335938 0.0234375\nv -0.289062 0.335938 0.0291675\nv -0.257207 0.335938 0.0234375\nv -0.257812 0.342142 0.0234375\nv -0.286199 0.34375 0.0234375\nv -0.289062 0.34375 0.0294567\nv -0.257983 0.34375 0.0234375\nv -0.257812 0.34375 0.0244527\nv -0.285906 0.351562 0.0234375\nv -0.289062 0.351562 0.029464\nv -0.258873 0.351562 0.0234375\nv -0.257812 0.351562 0.0295319\nv -0.285636 0.359375 0.0234375\nv -0.289062 0.359375 0.0293086\nv -0.259986 0.359375 0.0234375\nv -0.286888 0.367188 0.0234375\nv -0.289062 0.367188 0.027324\nv -0.260735 0.367188 0.0234375\nv -0.288266 0.375 0.0234375\nv -0.289062 0.378289 0.0234375\nv -0.289062 0.375 0.0249646\nv -0.260583 0.375 0.0234375\nv -0.289933 0.382812 0.0234375\nv -0.260976 0.382812 0.0234375\nv -0.29162 0.390625 0.0234375\nv -0.260933 0.390625 0.0234375\nv -0.29303 0.398438 0.0234375\nv -0.260883 0.398438 0.0234375\nv -0.293687 0.40625 0.0234375\nv -0.260696 0.40625 0.0234375\nv -0.29427 0.414062 0.0234375\nv -0.260646 0.414062 0.0234375\nv -0.294782 0.421875 0.0234375\nv -0.260658 0.421875 0.0234375\nv -0.295254 0.429688 0.0234375\nv -0.260934 0.429688 0.0234375\nv -0.295641 0.4375 0.0234375\nv -0.261499 0.4375 0.0234375\nv -0.295847 0.445312 0.0234375\nv -0.262139 0.445312 0.0234375\nv -0.296114 0.453125 0.0234375\nv -0.262711 0.453125 0.0234375\nv -0.296534 0.460938 0.0234375\nv -0.296875 0.465594 0.0234375\nv -0.296875 0.460938 0.0277652\nv -0.263209 0.460938 0.0234375\nv -0.297085 0.46875 0.0234375\nv -0.263568 0.46875 0.0234375\nv -0.297448 0.476562 0.0234375\nv -0.263739 0.476562 0.0234375\nv -0.297911 0.484375 0.0234375\nv -0.263849 0.484375 0.0234375\nv -0.298351 0.492188 0.0234375\nv -0.264139 0.492188 0.0234375\nv -0.29898 0.5 0.0234375\nv -0.264476 0.5 0.0234375\nv -0.299856 0.507812 0.0234375\nv -0.264865 0.507812 0.0234375\nv -0.300596 0.515625 0.0234375\nv -0.265186 0.515625 0.0234375\nv -0.301358 0.523438 0.0234375\nv -0.265548 0.523438 0.0234375\nv -0.265625 0.524911 0.0234375\nv -0.302021 0.53125 0.0234375\nv -0.2661 0.53125 0.0234375\nv -0.302668 0.539062 0.0234375\nv -0.266672 0.539062 0.0234375\nv -0.303306 0.546875 0.0234375\nv -0.266978 0.546875 0.0234375\nv -0.304017 0.554688 0.0234375\nv -0.304688 0.562101 0.0234375\nv -0.267212 0.554688 0.0234375\nv -0.304724 0.5625 0.0234375\nv -0.267431 0.5625 0.0234375\nv -0.305316 0.570312 0.0234375\nv -0.267658 0.570312 0.0234375\nv -0.305287 0.578125 0.0234375\nv -0.26806 0.578125 0.0234375\nv -0.304801 0.585938 0.0234375\nv -0.304688 0.58665 0.0234375\nv -0.26903 0.585938 0.0234375\nv -0.303586 0.59375 0.0234375\nv -0.304688 0.59375 0.0300274\nv -0.270236 0.59375 0.0234375\nv -0.301798 0.601562 0.0234375\nv -0.271563 0.601562 0.0234375\nv -0.29961 0.609375 0.0234375\nv -0.273325 0.609375 0.0234375\nv -0.273438 0.609558 0.0234375\nv -0.296985 0.617188 0.0234375\nv -0.296875 0.617826 0.0234375\nv -0.279711 0.617188 0.0234375\nv -0.28125 0.619937 0.0234375\nv -0.292779 0.625 0.0234375\nv -0.296875 0.625 0.0266159\nv -0.28584 0.625 0.0234375\nv -0.28125 0.625 0.0272912\nv -0.291976 0.632812 0.0234375\nv -0.296875 0.635191 0.0234375\nv -0.296875 0.632812 0.0246209\nv -0.288611 0.632812 0.0234375\nv -0.28125 0.632812 0.0306501\nv -0.298056 0.640625 0.0234375\nv -0.288319 0.640625 0.0234375\nv -0.299131 0.648438 0.0234375\nv -0.288668 0.648438 0.0234375\nv -0.289062 0.651866 0.0234375\nv -0.300207 0.65625 0.0234375\nv -0.290143 0.65625 0.0234375\nv -0.289062 0.65625 0.0243388\nv -0.301539 0.664062 0.0234375\nv -0.304688 0.664062 0.029328\nv -0.290201 0.664062 0.0234375\nv -0.289062 0.664062 0.0246826\nv -0.303882 0.671875 0.0234375\nv -0.304688 0.674277 0.0234375\nv -0.304688 0.671875 0.0248183\nv -0.289648 0.671875 0.0234375\nv -0.289062 0.678485 0.0234375\nv -0.289062 0.671875 0.0242987\nv -0.30565 0.679688 0.0234375\nv -0.288979 0.679688 0.0234375\nv -0.308114 0.6875 0.0234375\nv -0.287644 0.6875 0.0234375\nv -0.30936 0.695312 0.0234375\nv -0.286773 0.695312 0.0234375\nv -0.311197 0.703125 0.0234375\nv -0.3125 0.706235 0.0234375\nv -0.285383 0.703125 0.0234375\nv -0.314916 0.710938 0.0234375\nv -0.283573 0.710938 0.0234375\nv -0.318409 0.71875 0.0234375\nv -0.320312 0.725787 0.0234375\nv -0.282273 0.71875 0.0234375\nv -0.320507 0.726562 0.0234375\nv -0.282043 0.726562 0.0234375\nv -0.32229 0.734375 0.0234375\nv -0.281819 0.734375 0.0234375\nv -0.32377 0.742188 0.0234375\nv -0.282435 0.742188 0.0234375\nv -0.325197 0.75 0.0234375\nv -0.283584 0.75 0.0234375\nv -0.326236 0.757812 0.0234375\nv -0.284253 0.757812 0.0234375\nv -0.327564 0.765625 0.0234375\nv -0.328125 0.768195 0.0234375\nv -0.285312 0.765625 0.0234375\nv -0.329249 0.773438 0.0234375\nv -0.286437 0.773438 0.0234375\nv -0.330665 0.78125 0.0234375\nv -0.287968 0.78125 0.0234375\nv -0.289062 0.785985 0.0234375\nv -0.331891 0.789062 0.0234375\nv -0.290232 0.789062 0.0234375\nv -0.33305 0.796875 0.0234375\nv -0.293117 0.796875 0.0234375\nv -0.33419 0.804688 0.0234375\nv -0.296177 0.804688 0.0234375\nv -0.296875 0.80608 0.0234375\nv -0.334093 0.8125 0.0234375\nv -0.30089 0.8125 0.0234375\nv -0.304688 0.81738 0.0234375\nv -0.33334 0.820312 0.0234375\nv -0.328125 0.827349 0.0234375\nv -0.306808 0.820312 0.0234375\nv -0.3125 0.826256 0.0234375\nv -0.326453 0.828125 0.0234375\nv -0.31592 0.828125 0.0234375\nv -0.320312 0.829429 0.0234375\nv 0.0390625 -0.539705 0.03125\nv 0.046875 -0.540282 0.03125\nv 0.0546875 -0.540076 0.03125\nv 0.0625 -0.5394 0.03125\nv 0.015625 -0.53372 0.03125\nv 0.0234375 -0.536119 0.03125\nv 0.0348916 -0.539062 0.03125\nv 0.03125 -0.538208 0.03125\nv 0.03125 -0.539062 0.0373328\nv 0.0645091 -0.539062 0.03125\nv 0.0703125 -0.537835 0.03125\nv 0.078125 -0.535683 0.03125\nv 0.0859375 -0.533389 0.03125\nv -0.0078125 -0.523826 0.03125\nv 0 -0.527348 0.03125\nv 0.00885966 -0.53125 0.03125\nv 0.0078125 -0.530761 0.03125\nv 0.0078125 -0.53125 0.0345234\nv 0.0901692 -0.53125 0.03125\nv 0.09375 -0.529485 0.03125\nv 0.101562 -0.52408 0.03125\nv -0.00829776 -0.523438 0.03125\nv 0.102595 -0.523438 0.03125\nv 0.109375 -0.518273 0.03125\nv -0.00889275 -0.515625 0.03125\nv -0.0078125 -0.512828 0.03125\nv 0.111887 -0.515625 0.03125\nv 0.117188 -0.508982 0.03125\nv -0.00558894 -0.507812 0.03125\nv 0 -0.504762 0.03125\nv 0.0078125 -0.500326 0.03125\nv 0.118152 -0.507812 0.03125\nv 0.00834648 -0.5 0.03125\nv 0.0078125 -0.5 0.0368153\nv 0.015625 -0.495967 0.03125\nv 0.122384 -0.5 0.03125\nv 0.125 -0.49449 0.03125\nv 0.0228545 -0.492188 0.03125\nv 0.0234375 -0.491891 0.03125\nv 0.03125 -0.48777 0.03125\nv 0.0390625 -0.484481 0.03125\nv 0.126181 -0.492188 0.03125\nv 0.125 -0.488498 0.03125\nv 0.0393166 -0.484375 0.03125\nv 0.0390625 -0.484375 0.0363986\nv 0.046875 -0.482437 0.03125\nv 0.0546875 -0.480204 0.03125\nv 0.0625 -0.477873 0.03125\nv 0.122898 -0.484375 0.03125\nv 0.117188 -0.478505 0.03125\nv 0.0673405 -0.476562 0.03125\nv 0.0703125 -0.475784 0.03125\nv 0.078125 -0.474125 0.03125\nv 0.0859375 -0.472601 0.03125\nv 0.09375 -0.471004 0.03125\nv 0.101562 -0.47186 0.03125\nv 0.114578 -0.476562 0.03125\nv 0.109375 -0.473874 0.03125\nv -0.289062 -0.0657726 0.03125\nv -0.28125 -0.0672796 0.03125\nv -0.273438 -0.0652968 0.03125\nv 0.453125 -0.0656457 0.03125\nv 0.460938 -0.0673764 0.03125\nv 0.46875 -0.0661752 0.03125\nv 0.476562 -0.0660721 0.03125\nv 0.484375 -0.0641797 0.03125\nv -0.292455 -0.0625 0.03125\nv -0.270737 -0.0625 0.03125\nv 0.449386 -0.0625 0.03125\nv 0.487996 -0.0625 0.03125\nv 0.492188 -0.0561362 0.03125\nv -0.295565 -0.0546875 0.03125\nv -0.296875 -0.0504505 0.03125\nv -0.266689 -0.0546875 0.03125\nv -0.265625 -0.0513191 0.03125\nv 0.446297 -0.0546875 0.03125\nv 0.445312 -0.0520458 0.03125\nv 0.445312 -0.0546875 0.0376208\nv 0.492657 -0.0546875 0.03125\nv -0.297702 -0.046875 0.03125\nv -0.264324 -0.046875 0.03125\nv 0.44364 -0.046875 0.03125\nv 0.494759 -0.046875 0.03125\nv -0.299103 -0.0390625 0.03125\nv -0.262992 -0.0390625 0.03125\nv 0.443663 -0.0390625 0.03125\nv 0.496796 -0.0390625 0.03125\nv -0.299736 -0.03125 0.03125\nv -0.261845 -0.03125 0.03125\nv 0.443831 -0.03125 0.03125\nv 0.499275 -0.03125 0.03125\nv 0.5 -0.0291797 0.03125\nv -0.300118 -0.0234375 0.03125\nv -0.261006 -0.0234375 0.03125\nv 0.443559 -0.0234375 0.03125\nv 0.501579 -0.0234375 0.03125\nv -0.30143 -0.015625 0.03125\nv -0.259703 -0.015625 0.03125\nv 0.443011 -0.015625 0.03125\nv 0.502065 -0.015625 0.03125\nv -0.303011 -0.0078125 0.03125\nv -0.259286 -0.0078125 0.03125\nv 0.440921 -0.0078125 0.03125\nv 0.501589 -0.0078125 0.03125\nv -0.303821 0 0.03125\nv -0.259636 0 0.03125\nv 0.439248 0 0.03125\nv 0.50089 0 0.03125\nv -0.303821 0.0078125 0.03125\nv -0.257994 0.0078125 0.03125\nv -0.257812 0.00811287 0.03125\nv 0.438601 0.0078125 0.03125\nv 0.4375 0.0136798 0.03125\nv 0.500274 0.0078125 0.03125\nv 0.5 0.0119097 0.03125\nv -0.302501 0.015625 0.03125\nv -0.251493 0.015625 0.03125\nv -0.25 0.0166799 0.03125\nv -0.242188 0.0177816 0.03125\nv -0.234375 0.0196786 0.03125\nv -0.226562 0.022214 0.03125\nv 0.421875 0.0214277 0.03125\nv 0.436855 0.015625 0.03125\nv 0.429688 0.0205633 0.03125\nv 0.499751 0.015625 0.03125\nv -0.301183 0.0234375 0.03125\nv -0.222068 0.0234375 0.03125\nv -0.21875 0.0242523 0.03125\nv -0.210938 0.0255251 0.03125\nv -0.203125 0.0258357 0.03125\nv -0.195312 0.0259544 0.03125\nv -0.1875 0.0261221 0.03125\nv -0.179688 0.026239 0.03125\nv -0.171875 0.0266861 0.03125\nv -0.164062 0.0268316 0.03125\nv -0.15625 0.0268425 0.03125\nv -0.148438 0.0268907 0.03125\nv -0.140625 0.0268508 0.03125\nv -0.132812 0.0269234 0.03125\nv -0.125 0.027142 0.03125\nv -0.117188 0.0271762 0.03125\nv -0.109375 0.0269472 0.03125\nv -0.101562 0.0267084 0.03125\nv -0.09375 0.0265686 0.03125\nv -0.0859375 0.0264315 0.03125\nv -0.078125 0.0263566 0.03125\nv -0.0703125 0.0262422 0.03125\nv -0.0625 0.0261284 0.03125\nv -0.0546875 0.0259736 0.03125\nv -0.046875 0.0258361 0.03125\nv -0.0390625 0.0257183 0.03125\nv -0.03125 0.0255573 0.03125\nv -0.0234375 0.0253695 0.03125\nv -0.015625 0.0252247 0.03125\nv -0.0078125 0.0251427 0.03125\nv 0 0.0249797 0.03125\nv 0.0078125 0.0246507 0.03125\nv 0.015625 0.0246224 0.03125\nv 0.0234375 0.0247616 0.03125\nv 0.03125 0.0249421 0.03125\nv 0.0390625 0.0250732 0.03125\nv 0.046875 0.0250977 0.03125\nv 0.0546875 0.0251135 0.03125\nv 0.0625 0.0250243 0.03125\nv 0.0703125 0.0250206 0.03125\nv 0.078125 0.0250697 0.03125\nv 0.0859375 0.0251884 0.03125\nv 0.09375 0.0252561 0.03125\nv 0.101562 0.0253194 0.03125\nv 0.109375 0.0253525 0.03125\nv 0.117188 0.0253941 0.03125\nv 0.125 0.0253681 0.03125\nv 0.132812 0.025277 0.03125\nv 0.140625 0.025164 0.03125\nv 0.148438 0.0249947 0.03125\nv 0.15625 0.0248311 0.03125\nv 0.164062 0.0245861 0.03125\nv 0.171875 0.0243693 0.03125\nv 0.179688 0.0242157 0.03125\nv 0.1875 0.0241646 0.03125\nv 0.195312 0.0241174 0.03125\nv 0.203125 0.0240543 0.03125\nv 0.210938 0.0239999 0.03125\nv 0.21875 0.02395 0.03125\nv 0.226562 0.0238678 0.03125\nv 0.234375 0.0238789 0.03125\nv 0.242188 0.0239919 0.03125\nv 0.25 0.0241345 0.03125\nv 0.257812 0.0243047 0.03125\nv 0.265625 0.0245734 0.03125\nv 0.273438 0.0248141 0.03125\nv 0.28125 0.0250317 0.03125\nv 0.289062 0.025226 0.03125\nv 0.296875 0.0254044 0.03125\nv 0.304688 0.0256542 0.03125\nv 0.3125 0.0259564 0.03125\nv 0.320312 0.0262727 0.03125\nv 0.328125 0.026496 0.03125\nv 0.335938 0.0265258 0.03125\nv 0.34375 0.0266032 0.03125\nv 0.351562 0.0266921 0.03125\nv 0.359375 0.0267384 0.03125\nv 0.367188 0.026755 0.03125\nv 0.375 0.026769 0.03125\nv 0.382812 0.0266512 0.03125\nv 0.390625 0.0262569 0.03125\nv 0.398438 0.0256751 0.03125\nv 0.40625 0.02524 0.03125\nv 0.415582 0.0234375 0.03125\nv 0.414062 0.0237956 0.03125\nv 0.499622 0.0234375 0.03125\nv -0.299743 0.03125 0.03125\nv 0.497641 0.03125 0.03125\nv -0.296908 0.0390625 0.03125\nv -0.296875 0.0391302 0.03125\nv 0.495442 0.0390625 0.03125\nv -0.292875 0.046875 0.03125\nv -0.289062 0.0538115 0.03125\nv 0.493487 0.046875 0.03125\nv 0.492188 0.0507412 0.03125\nv -0.288394 0.0546875 0.03125\nv 0.490677 0.0546875 0.03125\nv 0.484375 0.0593748 0.03125\nv -0.281852 0.0625 0.03125\nv -0.28125 0.0630322 0.03125\nv -0.273438 0.067838 0.03125\nv 0.445312 0.0699448 0.03125\nv 0.453125 0.0684787 0.03125\nv 0.460938 0.0674987 0.03125\nv 0.46875 0.0667183 0.03125\nv 0.478236 0.0625 0.03125\nv 0.476562 0.0633835 0.03125\nv -0.267023 0.0703125 0.03125\nv -0.265625 0.070993 0.03125\nv -0.257812 0.0748132 0.03125\nv -0.25 0.0751477 0.03125\nv -0.242188 0.0737528 0.03125\nv -0.234375 0.0730168 0.03125\nv -0.226562 0.0723564 0.03125\nv -0.21875 0.0722805 0.03125\nv -0.210938 0.0721814 0.03125\nv -0.203125 0.072958 0.03125\nv -0.195312 0.0735624 0.03125\nv -0.1875 0.0740772 0.03125\nv -0.179688 0.0744361 0.03125\nv -0.171875 0.0747668 0.03125\nv -0.164062 0.0750932 0.03125\nv -0.15625 0.0750864 0.03125\nv -0.148438 0.0750978 0.03125\nv -0.140625 0.0751046 0.03125\nv -0.132812 0.0752841 0.03125\nv -0.125 0.0754248 0.03125\nv -0.117188 0.0754889 0.03125\nv -0.109375 0.0754831 0.03125\nv -0.101562 0.0753807 0.03125\nv -0.09375 0.0753675 0.03125\nv -0.0859375 0.0753301 0.03125\nv -0.078125 0.0751527 0.03125\nv -0.0703125 0.0749717 0.03125\nv -0.0625 0.0748253 0.03125\nv -0.0546875 0.0746561 0.03125\nv -0.046875 0.0744382 0.03125\nv -0.0390625 0.0742421 0.03125\nv -0.03125 0.0740435 0.03125\nv -0.0234375 0.0738098 0.03125\nv -0.015625 0.0735979 0.03125\nv -0.0078125 0.0734878 0.03125\nv 0 0.0733832 0.03125\nv 0.0078125 0.0732449 0.03125\nv 0.015625 0.0732118 0.03125\nv 0.0234375 0.0731246 0.03125\nv 0.03125 0.0730803 0.03125\nv 0.0390625 0.0730762 0.03125\nv 0.046875 0.0730905 0.03125\nv 0.0546875 0.0731162 0.03125\nv 0.0625 0.0730796 0.03125\nv 0.0703125 0.0730395 0.03125\nv 0.078125 0.0730953 0.03125\nv 0.0859375 0.0731375 0.03125\nv 0.09375 0.0731217 0.03125\nv 0.101562 0.0730984 0.03125\nv 0.109375 0.0730809 0.03125\nv 0.117188 0.0730726 0.03125\nv 0.125 0.07308 0.03125\nv 0.132812 0.0730654 0.03125\nv 0.140625 0.0730801 0.03125\nv 0.148438 0.0731077 0.03125\nv 0.15625 0.0730598 0.03125\nv 0.164062 0.0729909 0.03125\nv 0.171875 0.0729304 0.03125\nv 0.179688 0.0729339 0.03125\nv 0.1875 0.0729111 0.03125\nv 0.195312 0.0729032 0.03125\nv 0.203125 0.0728823 0.03125\nv 0.210938 0.0728382 0.03125\nv 0.21875 0.0727629 0.03125\nv 0.226562 0.0726596 0.03125\nv 0.234375 0.0724717 0.03125\nv 0.242188 0.0724191 0.03125\nv 0.25 0.0723188 0.03125\nv 0.257812 0.0723625 0.03125\nv 0.265625 0.0724484 0.03125\nv 0.273438 0.0725562 0.03125\nv 0.28125 0.0726914 0.03125\nv 0.289062 0.0728139 0.03125\nv 0.296875 0.0728733 0.03125\nv 0.304688 0.07292 0.03125\nv 0.3125 0.0729332 0.03125\nv 0.320312 0.0729697 0.03125\nv 0.328125 0.0730507 0.03125\nv 0.335938 0.0731319 0.03125\nv 0.34375 0.0732049 0.03125\nv 0.351562 0.0732294 0.03125\nv 0.359375 0.0731548 0.03125\nv 0.367188 0.0730337 0.03125\nv 0.375 0.0726876 0.03125\nv 0.382812 0.0721798 0.03125\nv 0.390625 0.0718906 0.03125\nv 0.398438 0.0717447 0.03125\nv 0.40625 0.0716182 0.03125\nv 0.414062 0.0714452 0.03125\nv 0.421875 0.071243 0.03125\nv 0.429688 0.0711031 0.03125\nv 0.441282 0.0703125 0.03125\nv 0.4375 0.070641 0.03125\nv -0.28125 0.170201 0.03125\nv -0.273438 0.166561 0.03125\nv -0.265625 0.164751 0.03125\nv -0.257812 0.167292 0.03125\nv -0.284311 0.171875 0.03125\nv -0.289062 0.176459 0.03125\nv -0.255332 0.171875 0.03125\nv -0.292024 0.179688 0.03125\nv -0.296875 0.187128 0.03125\nv -0.251391 0.179688 0.03125\nv -0.25 0.183271 0.03125\nv -0.297009 0.1875 0.03125\nv -0.296875 0.1875 0.0338917\nv -0.248239 0.1875 0.03125\nv -0.297494 0.195312 0.03125\nv -0.246234 0.195312 0.03125\nv -0.298221 0.203125 0.03125\nv -0.244783 0.203125 0.03125\nv -0.298927 0.210938 0.03125\nv -0.244343 0.210938 0.03125\nv -0.29942 0.21875 0.03125\nv -0.243609 0.21875 0.03125\nv -0.299633 0.226562 0.03125\nv -0.242815 0.226562 0.03125\nv -0.300092 0.234375 0.03125\nv -0.242366 0.234375 0.03125\nv -0.242188 0.236075 0.03125\nv -0.300431 0.242188 0.03125\nv -0.241553 0.242188 0.03125\nv -0.300488 0.25 0.03125\nv -0.241693 0.25 0.03125\nv -0.242188 0.256314 0.03125\nv -0.300103 0.257812 0.03125\nv -0.242306 0.257812 0.03125\nv -0.299382 0.265625 0.03125\nv -0.243006 0.265625 0.03125\nv -0.298253 0.273438 0.03125\nv -0.296875 0.280296 0.03125\nv -0.243628 0.273438 0.03125\nv -0.296681 0.28125 0.03125\nv -0.296875 0.28125 0.0325246\nv -0.244622 0.28125 0.03125\nv -0.295263 0.289062 0.03125\nv -0.245949 0.289062 0.03125\nv -0.293684 0.296875 0.03125\nv -0.247593 0.296875 0.03125\nv -0.292366 0.304688 0.03125\nv -0.24935 0.304688 0.03125\nv -0.25 0.307821 0.03125\nv -0.291427 0.3125 0.03125\nv -0.251022 0.3125 0.03125\nv -0.25 0.3125 0.0363448\nv -0.290963 0.320312 0.03125\nv -0.252343 0.320312 0.03125\nv -0.290386 0.328125 0.03125\nv -0.253957 0.328125 0.03125\nv -0.289787 0.335938 0.03125\nv -0.255756 0.335938 0.03125\nv -0.289837 0.34375 0.03125\nv -0.256769 0.34375 0.03125\nv -0.289851 0.351562 0.03125\nv -0.257557 0.351562 0.03125\nv -0.257812 0.354147 0.03125\nv -0.289937 0.359375 0.03125\nv -0.25835 0.359375 0.03125\nv -0.257812 0.359375 0.0335488\nv -0.290696 0.367188 0.03125\nv -0.258845 0.367188 0.03125\nv -0.257812 0.367188 0.0353863\nv -0.291485 0.375 0.03125\nv -0.258736 0.375 0.03125\nv -0.257812 0.375 0.0348238\nv -0.292738 0.382812 0.03125\nv -0.259052 0.382812 0.03125\nv -0.257812 0.382812 0.0355626\nv -0.293672 0.390625 0.03125\nv -0.259065 0.390625 0.03125\nv -0.257812 0.390625 0.0363322\nv -0.294227 0.398438 0.03125\nv -0.258988 0.398438 0.03125\nv -0.257812 0.398438 0.0376594\nv -0.294711 0.40625 0.03125\nv -0.258982 0.40625 0.03125\nv -0.257812 0.40625 0.0388159\nv -0.295239 0.414062 0.03125\nv -0.259196 0.414062 0.03125\nv -0.295724 0.421875 0.03125\nv -0.296875 0.421875 0.0389349\nv -0.259334 0.421875 0.03125\nv -0.29614 0.429688 0.03125\nv -0.296875 0.429688 0.0366736\nv -0.259654 0.429688 0.03125\nv -0.296502 0.4375 0.03125\nv -0.296875 0.4375 0.0345642\nv -0.260305 0.4375 0.03125\nv -0.29667 0.445312 0.03125\nv -0.296875 0.445312 0.0332495\nv -0.261051 0.445312 0.03125\nv -0.296849 0.453125 0.03125\nv -0.296875 0.453841 0.03125\nv -0.296875 0.453125 0.0315248\nv -0.261718 0.453125 0.03125\nv -0.297113 0.460938 0.03125\nv -0.262314 0.460938 0.03125\nv -0.297382 0.46875 0.03125\nv -0.262807 0.46875 0.03125\nv -0.297683 0.476562 0.03125\nv -0.263159 0.476562 0.03125\nv -0.298035 0.484375 0.03125\nv -0.263544 0.484375 0.03125\nv -0.298437 0.492188 0.03125\nv -0.264022 0.492188 0.03125\nv -0.299109 0.5 0.03125\nv -0.264477 0.5 0.03125\nv -0.299889 0.507812 0.03125\nv -0.264894 0.507812 0.03125\nv -0.300677 0.515625 0.03125\nv -0.265203 0.515625 0.03125\nv -0.3014 0.523438 0.03125\nv -0.265545 0.523438 0.03125\nv -0.265625 0.524949 0.03125\nv -0.265625 0.523438 0.0332664\nv -0.302091 0.53125 0.03125\nv -0.266117 0.53125 0.03125\nv -0.302818 0.539062 0.03125\nv -0.266714 0.539062 0.03125\nv -0.303529 0.546875 0.03125\nv -0.267019 0.546875 0.03125\nv -0.304368 0.554688 0.03125\nv -0.304688 0.557699 0.03125\nv -0.304688 0.554688 0.0388449\nv -0.267235 0.554688 0.03125\nv -0.305189 0.5625 0.03125\nv -0.267441 0.5625 0.03125\nv -0.305735 0.570312 0.03125\nv -0.267723 0.570312 0.03125\nv -0.305756 0.578125 0.03125\nv -0.268136 0.578125 0.03125\nv -0.305787 0.585938 0.03125\nv -0.269159 0.585938 0.03125\nv -0.304889 0.59375 0.03125\nv -0.304688 0.594973 0.03125\nv -0.270151 0.59375 0.03125\nv -0.303529 0.601562 0.03125\nv -0.304688 0.601562 0.0374096\nv -0.271242 0.601562 0.03125\nv -0.301855 0.609375 0.03125\nv -0.272388 0.609375 0.03125\nv -0.273438 0.614258 0.03125\nv -0.299916 0.617188 0.03125\nv -0.274278 0.617188 0.03125\nv -0.273438 0.617188 0.0347373\nv -0.298656 0.625 0.03125\nv -0.278 0.625 0.03125\nv -0.299501 0.632812 0.03125\nv -0.280759 0.632812 0.03125\nv -0.28125 0.635288 0.03125\nv -0.301466 0.640625 0.03125\nv -0.282563 0.640625 0.03125\nv -0.28125 0.640625 0.032802\nv -0.302744 0.648438 0.03125\nv -0.304688 0.648438 0.0363513\nv -0.284391 0.648438 0.03125\nv -0.28125 0.648438 0.036595\nv -0.304031 0.65625 0.03125\nv -0.304688 0.65936 0.03125\nv -0.304688 0.65625 0.0326034\nv -0.285358 0.65625 0.03125\nv -0.28125 0.65625 0.0385504\nv -0.305346 0.664062 0.03125\nv -0.285575 0.664062 0.03125\nv -0.306813 0.671875 0.03125\nv -0.28567 0.671875 0.03125\nv -0.308035 0.679688 0.03125\nv -0.285667 0.679688 0.03125\nv -0.309656 0.6875 0.03125\nv -0.285395 0.6875 0.03125\nv -0.31029 0.695312 0.03125\nv -0.284248 0.695312 0.03125\nv -0.312348 0.703125 0.03125\nv -0.3125 0.703493 0.03125\nv -0.3125 0.703125 0.0321586\nv -0.283267 0.703125 0.03125\nv -0.315927 0.710938 0.03125\nv -0.281953 0.710938 0.03125\nv -0.28125 0.710938 0.036389\nv -0.318611 0.71875 0.03125\nv -0.320312 0.725154 0.03125\nv -0.281532 0.71875 0.03125\nv -0.28125 0.71875 0.0340066\nv -0.32066 0.726562 0.03125\nv -0.281554 0.726562 0.03125\nv -0.28125 0.726562 0.035741\nv -0.322413 0.734375 0.03125\nv -0.281466 0.734375 0.03125\nv -0.28125 0.734375 0.0368108\nv -0.32386 0.742188 0.03125\nv -0.282306 0.742188 0.03125\nv -0.325329 0.75 0.03125\nv -0.283424 0.75 0.03125\nv -0.326338 0.757812 0.03125\nv -0.284132 0.757812 0.03125\nv -0.327706 0.765625 0.03125\nv -0.328125 0.767595 0.03125\nv -0.285245 0.765625 0.03125\nv -0.329328 0.773438 0.03125\nv -0.286403 0.773438 0.03125\nv -0.330702 0.78125 0.03125\nv -0.287968 0.78125 0.03125\nv -0.289062 0.785698 0.03125\nv -0.331898 0.789062 0.03125\nv -0.29043 0.789062 0.03125\nv -0.333107 0.796875 0.03125\nv -0.293307 0.796875 0.03125\nv -0.334141 0.804688 0.03125\nv -0.296415 0.804688 0.03125\nv -0.296875 0.80557 0.03125\nv -0.333899 0.8125 0.03125\nv -0.301416 0.8125 0.03125\nv -0.304688 0.816337 0.03125\nv -0.332854 0.820312 0.03125\nv -0.328125 0.826069 0.03125\nv -0.307806 0.820312 0.03125\nv -0.3125 0.825056 0.03125\nv -0.323259 0.828125 0.03125\nv -0.318271 0.828125 0.03125\nv -0.320312 0.828711 0.03125\nv -0.320312 0.828125 0.0365425\nv 0.03125 -0.539244 0.0390625\nv 0.0390625 -0.540376 0.0390625\nv 0.046875 -0.540913 0.0390625\nv 0.0546875 -0.540533 0.0390625\nv 0.0625 -0.539987 0.0390625\nv 0.0078125 -0.531817 0.0390625\nv 0.015625 -0.53452 0.0390625\nv 0.0302161 -0.539062 0.0390625\nv 0.0234375 -0.537307 0.0390625\nv 0.0685871 -0.539062 0.0390625\nv 0.0703125 -0.538728 0.0390625\nv 0.078125 -0.536183 0.0390625\nv 0.0859375 -0.533478 0.0390625\nv -0.0078125 -0.524855 0.0390625\nv 0.00594386 -0.53125 0.0390625\nv 0 -0.528783 0.0390625\nv 0.0904867 -0.53125 0.0390625\nv 0.09375 -0.529546 0.0390625\nv 0.101562 -0.52401 0.0390625\nv -0.0095833 -0.523438 0.0390625\nv 0.102393 -0.523438 0.0390625\nv 0.109375 -0.517509 0.0390625\nv -0.0102423 -0.515625 0.0390625\nv -0.0078125 -0.510128 0.0390625\nv 0.11156 -0.515625 0.0390625\nv 0.117188 -0.509867 0.0390625\nv -0.00663677 -0.507812 0.0390625\nv 0 -0.504391 0.0390625\nv 0.118959 -0.507812 0.0390625\nv 0.00758887 -0.5 0.0390625\nv 0.0078125 -0.499884 0.0390625\nv 0.0078125 -0.5 0.0417214\nv 0.015625 -0.495797 0.0390625\nv 0.122954 -0.5 0.0390625\nv 0.125 -0.495103 0.0390625\nv 0.0220043 -0.492188 0.0390625\nv 0.0234375 -0.491388 0.0390625\nv 0.03125 -0.487487 0.0390625\nv 0.126247 -0.492188 0.0390625\nv 0.125 -0.489233 0.0390625\nv 0.0389232 -0.484375 0.0390625\nv 0.0390625 -0.484342 0.0390625\nv 0.0390625 -0.484375 0.0402709\nv 0.046875 -0.482621 0.0390625\nv 0.0546875 -0.480835 0.0390625\nv 0.0625 -0.478657 0.0390625\nv 0.121765 -0.484375 0.0390625\nv 0.117188 -0.479694 0.0390625\nv 0.0700474 -0.476562 0.0390625\nv 0.0703125 -0.476492 0.0390625\nv 0.0703125 -0.476562 0.040843\nv 0.078125 -0.474557 0.0390625\nv 0.0859375 -0.472858 0.0390625\nv 0.09375 -0.471165 0.0390625\nv 0.101562 -0.472122 0.0390625\nv 0.11341 -0.476562 0.0390625\nv 0.109375 -0.47439 0.0390625\nv -0.289062 -0.0654855 0.0390625\nv -0.28125 -0.0670148 0.0390625\nv -0.273438 -0.0650616 0.0390625\nv 0.453125 -0.0662926 0.0390625\nv 0.460938 -0.0677162 0.0390625\nv 0.46875 -0.0662526 0.0390625\nv 0.476562 -0.066235 0.0390625\nv 0.484375 -0.0644921 0.0390625\nv -0.292088 -0.0625 0.0390625\nv -0.270933 -0.0625 0.0390625\nv 0.448326 -0.0625 0.0390625\nv 0.445312 -0.0552443 0.0390625\nv 0.488438 -0.0625 0.0390625\nv 0.492188 -0.0564638 0.0390625\nv -0.295255 -0.0546875 0.0390625\nv -0.296875 -0.0496298 0.0390625\nv -0.266754 -0.0546875 0.0390625\nv -0.265625 -0.0511577 0.0390625\nv 0.445105 -0.0546875 0.0390625\nv 0.492743 -0.0546875 0.0390625\nv -0.297533 -0.046875 0.0390625\nv -0.26437 -0.046875 0.0390625\nv 0.442612 -0.046875 0.0390625\nv 0.494604 -0.046875 0.0390625\nv -0.298962 -0.0390625 0.0390625\nv -0.262942 -0.0390625 0.0390625\nv 0.443155 -0.0390625 0.0390625\nv 0.49652 -0.0390625 0.0390625\nv -0.299562 -0.03125 0.0390625\nv -0.26178 -0.03125 0.0390625\nv 0.443585 -0.03125 0.0390625\nv 0.498912 -0.03125 0.0390625\nv 0.5 -0.0280579 0.0390625\nv -0.299913 -0.0234375 0.0390625\nv -0.26094 -0.0234375 0.0390625\nv 0.443565 -0.0234375 0.0390625\nv 0.501236 -0.0234375 0.0390625\nv -0.301153 -0.015625 0.0390625\nv -0.259681 -0.015625 0.0390625\nv 0.443142 -0.015625 0.0390625\nv 0.501772 -0.015625 0.0390625\nv -0.302755 -0.0078125 0.0390625\nv -0.259275 -0.0078125 0.0390625\nv 0.441059 -0.0078125 0.0390625\nv 0.501253 -0.0078125 0.0390625\nv -0.303708 0 0.0390625\nv -0.259678 0 0.0390625\nv 0.439405 0 0.0390625\nv 0.500577 0 0.0390625\nv -0.303695 0.0078125 0.0390625\nv -0.25783 0.0078125 0.0390625\nv -0.257812 0.00784052 0.0390625\nv -0.257812 0.0078125 0.0421483\nv 0.438856 0.0078125 0.0390625\nv 0.4375 0.0147533 0.0390625\nv 0.500018 0.0078125 0.0390625\nv 0.5 0.00812714 0.0390625\nv 0.5 0.0078125 0.039952\nv -0.30232 0.015625 0.0390625\nv -0.251042 0.015625 0.0390625\nv -0.25 0.0163864 0.0390625\nv -0.242188 0.0176679 0.0390625\nv -0.234375 0.0195102 0.0390625\nv -0.226562 0.0220591 0.0390625\nv 0.421875 0.0216241 0.0390625\nv 0.437202 0.015625 0.0390625\nv 0.429688 0.0207001 0.0390625\nv 0.4375 0.015625 0.0448069\nv 0.499571 0.015625 0.0390625\nv -0.301032 0.0234375 0.0390625\nv -0.221717 0.0234375 0.0390625\nv -0.21875 0.0241896 0.0390625\nv -0.210938 0.025433 0.0390625\nv -0.203125 0.0257646 0.0390625\nv -0.195312 0.0258957 0.0390625\nv -0.1875 0.0260768 0.0390625\nv -0.179688 0.0261902 0.0390625\nv -0.171875 0.0266116 0.0390625\nv -0.164062 0.0267315 0.0390625\nv -0.15625 0.0267587 0.0390625\nv -0.148438 0.0267996 0.0390625\nv -0.140625 0.0267844 0.0390625\nv -0.132812 0.0268848 0.0390625\nv -0.125 0.0271495 0.0390625\nv -0.117188 0.0271729 0.0390625\nv -0.109375 0.0269221 0.0390625\nv -0.101562 0.0266901 0.0390625\nv -0.09375 0.0265553 0.0390625\nv -0.0859375 0.0264662 0.0390625\nv -0.078125 0.026358 0.0390625\nv -0.0703125 0.0262337 0.0390625\nv -0.0625 0.0261046 0.0390625\nv -0.0546875 0.0259056 0.0390625\nv -0.046875 0.0258002 0.0390625\nv -0.0390625 0.0257204 0.0390625\nv -0.03125 0.0256134 0.0390625\nv -0.0234375 0.0254475 0.0390625\nv -0.015625 0.0253049 0.0390625\nv -0.0078125 0.0252255 0.0390625\nv 0 0.025068 0.0390625\nv 0.0078125 0.024876 0.0390625\nv 0.015625 0.0248525 0.0390625\nv 0.0234375 0.02495 0.0390625\nv 0.03125 0.0251315 0.0390625\nv 0.0390625 0.0252246 0.0390625\nv 0.046875 0.0252354 0.0390625\nv 0.0546875 0.0252776 0.0390625\nv 0.0625 0.0252864 0.0390625\nv 0.0703125 0.0251861 0.0390625\nv 0.078125 0.0251662 0.0390625\nv 0.0859375 0.0252481 0.0390625\nv 0.09375 0.0253487 0.0390625\nv 0.101562 0.025392 0.0390625\nv 0.109375 0.025416 0.0390625\nv 0.117188 0.0254224 0.0390625\nv 0.125 0.0254444 0.0390625\nv 0.132812 0.0254505 0.0390625\nv 0.140625 0.0253507 0.0390625\nv 0.148438 0.0251753 0.0390625\nv 0.15625 0.0249931 0.0390625\nv 0.164062 0.0247517 0.0390625\nv 0.171875 0.0244918 0.0390625\nv 0.179688 0.0243109 0.0390625\nv 0.1875 0.024262 0.0390625\nv 0.195312 0.0241977 0.0390625\nv 0.203125 0.0241008 0.0390625\nv 0.210938 0.0240124 0.0390625\nv 0.21875 0.0239518 0.0390625\nv 0.226562 0.0238479 0.0390625\nv 0.234375 0.0238538 0.0390625\nv 0.242188 0.0239576 0.0390625\nv 0.25 0.0241228 0.0390625\nv 0.257812 0.0243486 0.0390625\nv 0.265625 0.024476 0.0390625\nv 0.273438 0.0248192 0.0390625\nv 0.28125 0.0250414 0.0390625\nv 0.289062 0.0252192 0.0390625\nv 0.296875 0.025369 0.0390625\nv 0.304688 0.0255719 0.0390625\nv 0.3125 0.0258427 0.0390625\nv 0.320312 0.026155 0.0390625\nv 0.328125 0.0263911 0.0390625\nv 0.335938 0.0264398 0.0390625\nv 0.34375 0.0265253 0.0390625\nv 0.351562 0.0266047 0.0390625\nv 0.359375 0.0266285 0.0390625\nv 0.367188 0.0266347 0.0390625\nv 0.375 0.0266348 0.0390625\nv 0.382812 0.0265172 0.0390625\nv 0.390625 0.026175 0.0390625\nv 0.398438 0.0256083 0.0390625\nv 0.40625 0.0251953 0.0390625\nv 0.416121 0.0234375 0.0390625\nv 0.414062 0.0239175 0.0390625\nv 0.499352 0.0234375 0.0390625\nv -0.29955 0.03125 0.0390625\nv 0.497234 0.03125 0.0390625\nv -0.296928 0.0390625 0.0390625\nv -0.296875 0.0391721 0.0390625\nv 0.495042 0.0390625 0.0390625\nv -0.292802 0.046875 0.0390625\nv -0.289062 0.0542021 0.0390625\nv 0.493017 0.046875 0.0390625\nv 0.492188 0.0494297 0.0390625\nv -0.288728 0.0546875 0.0390625\nv -0.289062 0.0546875 0.0460008\nv 0.490294 0.0546875 0.0390625\nv 0.484375 0.0591188 0.0390625\nv -0.28229 0.0625 0.0390625\nv -0.28125 0.0634824 0.0390625\nv -0.273438 0.0683857 0.0390625\nv 0.445312 0.0700113 0.0390625\nv 0.453125 0.0684398 0.0390625\nv 0.460938 0.0673896 0.0390625\nv 0.46875 0.0666018 0.0390625\nv 0.477922 0.0625 0.0390625\nv 0.476562 0.063257 0.0390625\nv -0.268157 0.0703125 0.0390625\nv -0.265625 0.0714961 0.0390625\nv -0.257812 0.075136 0.0390625\nv -0.25 0.0754553 0.0390625\nv -0.242188 0.0738878 0.0390625\nv -0.234375 0.0730116 0.0390625\nv -0.226562 0.0723607 0.0390625\nv -0.21875 0.0722023 0.0390625\nv -0.210938 0.0721728 0.0390625\nv -0.203125 0.0730392 0.0390625\nv -0.195312 0.0736591 0.0390625\nv -0.1875 0.0742138 0.0390625\nv -0.179688 0.0745617 0.0390625\nv -0.171875 0.0748764 0.0390625\nv -0.164062 0.0751291 0.0390625\nv -0.15625 0.0750959 0.0390625\nv -0.148438 0.0750988 0.0390625\nv -0.140625 0.0750885 0.0390625\nv -0.132812 0.0752778 0.0390625\nv -0.125 0.0754494 0.0390625\nv -0.117188 0.0755262 0.0390625\nv -0.109375 0.0755535 0.0390625\nv -0.101562 0.0754497 0.0390625\nv -0.09375 0.075412 0.0390625\nv -0.0859375 0.075349 0.0390625\nv -0.078125 0.0751687 0.0390625\nv -0.0703125 0.0750107 0.0390625\nv -0.0625 0.0748352 0.0390625\nv -0.0546875 0.074656 0.0390625\nv -0.046875 0.0744349 0.0390625\nv -0.0390625 0.0742512 0.0390625\nv -0.03125 0.0740793 0.0390625\nv -0.0234375 0.0738481 0.0390625\nv -0.015625 0.0736231 0.0390625\nv -0.0078125 0.0735126 0.0390625\nv 0 0.0733622 0.0390625\nv 0.0078125 0.0732675 0.0390625\nv 0.015625 0.0731765 0.0390625\nv 0.0234375 0.0731947 0.0390625\nv 0.03125 0.0731604 0.0390625\nv 0.0390625 0.0731379 0.0390625\nv 0.046875 0.0731478 0.0390625\nv 0.0546875 0.0731644 0.0390625\nv 0.0625 0.073169 0.0390625\nv 0.0703125 0.0731488 0.0390625\nv 0.078125 0.0731116 0.0390625\nv 0.0859375 0.0731668 0.0390625\nv 0.09375 0.073203 0.0390625\nv 0.101562 0.0731488 0.0390625\nv 0.109375 0.0731262 0.0390625\nv 0.117188 0.0731244 0.0390625\nv 0.125 0.0731465 0.0390625\nv 0.132812 0.0731261 0.0390625\nv 0.140625 0.0730901 0.0390625\nv 0.148438 0.07309 0.0390625\nv 0.15625 0.0731232 0.0390625\nv 0.164062 0.0730908 0.0390625\nv 0.171875 0.0730283 0.0390625\nv 0.179688 0.0730074 0.0390625\nv 0.1875 0.072998 0.0390625\nv 0.195312 0.0729865 0.0390625\nv 0.203125 0.0729513 0.0390625\nv 0.210938 0.0728924 0.0390625\nv 0.21875 0.0728233 0.0390625\nv 0.226562 0.0727171 0.0390625\nv 0.234375 0.0725534 0.0390625\nv 0.242188 0.072384 0.0390625\nv 0.25 0.0722879 0.0390625\nv 0.257812 0.0723219 0.0390625\nv 0.265625 0.0724337 0.0390625\nv 0.273438 0.0725389 0.0390625\nv 0.28125 0.0726754 0.0390625\nv 0.289062 0.0728001 0.0390625\nv 0.296875 0.0728603 0.0390625\nv 0.304688 0.0729128 0.0390625\nv 0.3125 0.0729296 0.0390625\nv 0.320312 0.0729667 0.0390625\nv 0.328125 0.0730473 0.0390625\nv 0.335938 0.0731465 0.0390625\nv 0.34375 0.0732236 0.0390625\nv 0.351562 0.0732509 0.0390625\nv 0.359375 0.073201 0.0390625\nv 0.367188 0.0730598 0.0390625\nv 0.375 0.0727176 0.0390625\nv 0.382812 0.0722554 0.0390625\nv 0.390625 0.0719832 0.0390625\nv 0.398438 0.0718418 0.0390625\nv 0.40625 0.0717271 0.0390625\nv 0.414062 0.0715618 0.0390625\nv 0.421875 0.0713576 0.0390625\nv 0.429688 0.0712159 0.0390625\nv 0.442197 0.0703125 0.0390625\nv 0.4375 0.0707424 0.0390625\nv -0.28125 0.170223 0.0390625\nv -0.273438 0.16634 0.0390625\nv -0.265625 0.164101 0.0390625\nv -0.265625 0.164062 0.0395908\nv -0.257812 0.166626 0.0390625\nv -0.28427 0.171875 0.0390625\nv -0.289062 0.176702 0.0390625\nv -0.254959 0.171875 0.0390625\nv -0.291644 0.179688 0.0390625\nv -0.251455 0.179688 0.0390625\nv -0.25 0.183766 0.0390625\nv -0.296517 0.1875 0.0390625\nv -0.296875 0.18982 0.0390625\nv -0.248628 0.1875 0.0390625\nv -0.297491 0.195312 0.0390625\nv -0.246453 0.195312 0.0390625\nv -0.298349 0.203125 0.0390625\nv -0.244966 0.203125 0.0390625\nv -0.299025 0.210938 0.0390625\nv -0.244574 0.210938 0.0390625\nv -0.299431 0.21875 0.0390625\nv -0.243706 0.21875 0.0390625\nv -0.299801 0.226562 0.0390625\nv -0.242891 0.226562 0.0390625\nv -0.300215 0.234375 0.0390625\nv -0.242408 0.234375 0.0390625\nv -0.242188 0.236165 0.0390625\nv -0.300402 0.242188 0.0390625\nv -0.241445 0.242188 0.0390625\nv -0.300318 0.25 0.0390625\nv -0.241629 0.25 0.0390625\nv -0.242188 0.257423 0.0390625\nv -0.300092 0.257812 0.0390625\nv -0.242217 0.257812 0.0390625\nv -0.299724 0.265625 0.0390625\nv -0.242905 0.265625 0.0390625\nv -0.298941 0.273438 0.0390625\nv -0.243486 0.273438 0.0390625\nv -0.297851 0.28125 0.0390625\nv -0.296875 0.286565 0.0390625\nv -0.244227 0.28125 0.0390625\nv -0.296394 0.289062 0.0390625\nv -0.296875 0.289062 0.0431551\nv -0.245406 0.289062 0.0390625\nv -0.294914 0.296875 0.0390625\nv -0.246708 0.296875 0.0390625\nv -0.293532 0.304688 0.0390625\nv -0.248073 0.304688 0.0390625\nv -0.292558 0.3125 0.0390625\nv -0.249537 0.3125 0.0390625\nv -0.25 0.315624 0.0390625\nv -0.292092 0.320312 0.0390625\nv -0.250847 0.320312 0.0390625\nv -0.291785 0.328125 0.0390625\nv -0.252463 0.328125 0.0390625\nv -0.291408 0.335938 0.0390625\nv -0.254137 0.335938 0.0390625\nv -0.29138 0.34375 0.0390625\nv -0.255207 0.34375 0.0390625\nv -0.291558 0.351562 0.0390625\nv -0.255901 0.351562 0.0390625\nv -0.29211 0.359375 0.0390625\nv -0.256524 0.359375 0.0390625\nv -0.292806 0.367188 0.0390625\nv -0.256866 0.367188 0.0390625\nv -0.29344 0.375 0.0390625\nv -0.256713 0.375 0.0390625\nv -0.294253 0.382812 0.0390625\nv -0.256841 0.382812 0.0390625\nv -0.29494 0.390625 0.0390625\nv -0.257153 0.390625 0.0390625\nv -0.295389 0.398438 0.0390625\nv -0.257561 0.398438 0.0390625\nv -0.29583 0.40625 0.0390625\nv -0.296875 0.40625 0.0464941\nv -0.257777 0.40625 0.0390625\nv -0.257812 0.40715 0.0390625\nv -0.296455 0.414062 0.0390625\nv -0.296875 0.421547 0.0390625\nv -0.296875 0.414062 0.041941\nv -0.258096 0.414062 0.0390625\nv -0.257812 0.414062 0.0426153\nv -0.296893 0.421875 0.0390625\nv -0.258521 0.421875 0.0390625\nv -0.29717 0.429688 0.0390625\nv -0.259072 0.429688 0.0390625\nv -0.297328 0.4375 0.0390625\nv -0.259692 0.4375 0.0390625\nv -0.297414 0.445312 0.0390625\nv -0.260502 0.445312 0.0390625\nv -0.297534 0.453125 0.0390625\nv -0.261324 0.453125 0.0390625\nv -0.297825 0.460938 0.0390625\nv -0.262064 0.460938 0.0390625\nv -0.298024 0.46875 0.0390625\nv -0.262705 0.46875 0.0390625\nv -0.298217 0.476562 0.0390625\nv -0.263275 0.476562 0.0390625\nv -0.298504 0.484375 0.0390625\nv -0.263848 0.484375 0.0390625\nv -0.298807 0.492188 0.0390625\nv -0.264374 0.492188 0.0390625\nv -0.299361 0.5 0.0390625\nv -0.264843 0.5 0.0390625\nv -0.300153 0.507812 0.0390625\nv -0.265185 0.507812 0.0390625\nv -0.265625 0.507812 0.0457517\nv -0.300807 0.515625 0.0390625\nv -0.265497 0.515625 0.0390625\nv -0.265625 0.518411 0.0390625\nv -0.265625 0.515625 0.0408874\nv -0.301505 0.523438 0.0390625\nv -0.265957 0.523438 0.0390625\nv -0.302302 0.53125 0.0390625\nv -0.266484 0.53125 0.0390625\nv -0.303074 0.539062 0.0390625\nv -0.266998 0.539062 0.0390625\nv -0.303851 0.546875 0.0390625\nv -0.304688 0.5546 0.0390625\nv -0.267176 0.546875 0.0390625\nv -0.304697 0.554688 0.0390625\nv -0.267335 0.554688 0.0390625\nv -0.305492 0.5625 0.0390625\nv -0.267447 0.5625 0.0390625\nv -0.306006 0.570312 0.0390625\nv -0.267703 0.570312 0.0390625\nv -0.306077 0.578125 0.0390625\nv -0.26817 0.578125 0.0390625\nv -0.30608 0.585938 0.0390625\nv -0.268977 0.585938 0.0390625\nv -0.305814 0.59375 0.0390625\nv -0.269871 0.59375 0.0390625\nv -0.304989 0.601562 0.0390625\nv -0.304688 0.604291 0.0390625\nv -0.270807 0.601562 0.0390625\nv -0.304098 0.609375 0.0390625\nv -0.304688 0.609375 0.0416049\nv -0.271784 0.609375 0.0390625\nv -0.302731 0.617188 0.0390625\nv -0.304688 0.617188 0.0452841\nv -0.272686 0.617188 0.0390625\nv -0.273438 0.62497 0.0390625\nv -0.302078 0.625 0.0390625\nv -0.304688 0.625 0.0450407\nv -0.273441 0.625 0.0390625\nv -0.273438 0.625 0.0390958\nv -0.303281 0.632812 0.0390625\nv -0.304688 0.632812 0.0421024\nv -0.274304 0.632812 0.0390625\nv -0.273438 0.632812 0.0448703\nv -0.304542 0.640625 0.0390625\nv -0.304688 0.641764 0.0390625\nv -0.304688 0.640625 0.0393872\nv -0.276877 0.640625 0.0390625\nv -0.305391 0.648438 0.0390625\nv -0.279925 0.648438 0.0390625\nv -0.306643 0.65625 0.0390625\nv -0.280953 0.65625 0.0390625\nv -0.28125 0.662095 0.0390625\nv -0.307813 0.664062 0.0390625\nv -0.281358 0.664062 0.0390625\nv -0.28125 0.664062 0.0392712\nv -0.308724 0.671875 0.0390625\nv -0.281282 0.671875 0.0390625\nv -0.28125 0.671875 0.0391388\nv -0.309577 0.679688 0.0390625\nv -0.281504 0.679688 0.0390625\nv -0.28125 0.679688 0.0398699\nv -0.310606 0.6875 0.0390625\nv -0.281807 0.6875 0.0390625\nv -0.28125 0.6875 0.0413528\nv -0.311578 0.695312 0.0390625\nv -0.3125 0.698875 0.0390625\nv -0.3125 0.695312 0.04364\nv -0.281639 0.695312 0.0390625\nv -0.28125 0.695312 0.0409704\nv -0.31375 0.703125 0.0390625\nv -0.281411 0.703125 0.0390625\nv -0.28125 0.70543 0.0390625\nv -0.28125 0.703125 0.0400657\nv -0.316676 0.710938 0.0390625\nv -0.280915 0.710938 0.0390625\nv -0.318893 0.71875 0.0390625\nv -0.320312 0.723991 0.0390625\nv -0.280762 0.71875 0.0390625\nv -0.320952 0.726562 0.0390625\nv -0.281037 0.726562 0.0390625\nv -0.322521 0.734375 0.0390625\nv -0.281177 0.734375 0.0390625\nv -0.28125 0.735138 0.0390625\nv -0.324021 0.742188 0.0390625\nv -0.282052 0.742188 0.0390625\nv -0.325495 0.75 0.0390625\nv -0.283106 0.75 0.0390625\nv -0.326456 0.757812 0.0390625\nv -0.283875 0.757812 0.0390625\nv -0.327841 0.765625 0.0390625\nv -0.328125 0.766984 0.0390625\nv -0.285065 0.765625 0.0390625\nv -0.329419 0.773438 0.0390625\nv -0.286291 0.773438 0.0390625\nv -0.330761 0.78125 0.0390625\nv -0.287933 0.78125 0.0390625\nv -0.289062 0.7855 0.0390625\nv -0.331928 0.789062 0.0390625\nv -0.290617 0.789062 0.0390625\nv -0.33312 0.796875 0.0390625\nv -0.293484 0.796875 0.0390625\nv -0.334025 0.804688 0.0390625\nv -0.296573 0.804688 0.0390625\nv -0.296875 0.80522 0.0390625\nv -0.333669 0.8125 0.0390625\nv -0.302045 0.8125 0.0390625\nv -0.304688 0.81552 0.0390625\nv -0.332148 0.820312 0.0390625\nv -0.328125 0.824689 0.0390625\nv -0.320312 0.827653 0.0390625\nv -0.308607 0.820312 0.0390625\nv -0.3125 0.823942 0.0390625\nv 0.03125 -0.539853 0.046875\nv 0.0390625 -0.54074 0.046875\nv 0.046875 -0.541215 0.046875\nv 0.0546875 -0.540847 0.046875\nv 0.0625 -0.540186 0.046875\nv 0.0078125 -0.532278 0.046875\nv 0.015625 -0.53529 0.046875\nv 0.025978 -0.539062 0.046875\nv 0.0234375 -0.538451 0.046875\nv 0.0690936 -0.539062 0.046875\nv 0.0703125 -0.538793 0.046875\nv 0.078125 -0.536104 0.046875\nv 0.0859375 -0.532954 0.046875\nv -0.0078125 -0.525047 0.046875\nv 0.0046833 -0.53125 0.046875\nv 0 -0.52926 0.046875\nv 0.0893576 -0.53125 0.046875\nv 0.09375 -0.528899 0.046875\nv 0.101562 -0.523876 0.046875\nv -0.00973162 -0.523438 0.046875\nv 0.102326 -0.523438 0.046875\nv 0.109375 -0.51836 0.046875\nv -0.0101176 -0.515625 0.046875\nv -0.0078125 -0.510542 0.046875\nv 0.11256 -0.515625 0.046875\nv 0.117188 -0.510882 0.046875\nv -0.00640761 -0.507812 0.046875\nv 0 -0.504426 0.046875\nv 0.0078125 -0.500235 0.046875\nv 0.119822 -0.507812 0.046875\nv 0.00821592 -0.5 0.046875\nv 0.015625 -0.49621 0.046875\nv 0.123348 -0.5 0.046875\nv 0.125 -0.49351 0.046875\nv 0.0233263 -0.492188 0.046875\nv 0.0234375 -0.492124 0.046875\nv 0.0234375 -0.492188 0.0477624\nv 0.03125 -0.487772 0.046875\nv 0.0390625 -0.484661 0.046875\nv 0.125353 -0.492188 0.046875\nv 0.125 -0.491419 0.046875\nv 0.125 -0.492188 0.0500618\nv 0.0399094 -0.484375 0.046875\nv 0.046875 -0.482957 0.046875\nv 0.0546875 -0.48126 0.046875\nv 0.0625 -0.479305 0.046875\nv 0.0703125 -0.476825 0.046875\nv 0.120321 -0.484375 0.046875\nv 0.117188 -0.480937 0.046875\nv 0.0713233 -0.476562 0.046875\nv 0.078125 -0.474888 0.046875\nv 0.0859375 -0.473234 0.046875\nv 0.09375 -0.471564 0.046875\nv 0.101562 -0.472319 0.046875\nv 0.112486 -0.476562 0.046875\nv 0.109375 -0.474798 0.046875\nv -0.289062 -0.0651307 0.046875\nv -0.28125 -0.0667384 0.046875\nv -0.273438 -0.0647876 0.046875\nv 0.453125 -0.0669631 0.046875\nv 0.460938 -0.067982 0.046875\nv 0.46875 -0.0663516 0.046875\nv 0.476562 -0.0663381 0.046875\nv 0.484375 -0.0646872 0.046875\nv -0.291688 -0.0625 0.046875\nv -0.271183 -0.0625 0.046875\nv 0.447303 -0.0625 0.046875\nv 0.445312 -0.0575101 0.046875\nv 0.488852 -0.0625 0.046875\nv 0.492188 -0.0564437 0.046875\nv -0.294951 -0.0546875 0.046875\nv -0.296875 -0.0486485 0.046875\nv -0.266888 -0.0546875 0.046875\nv -0.265625 -0.05086 0.046875\nv 0.444339 -0.0546875 0.046875\nv 0.492686 -0.0546875 0.046875\nv -0.297298 -0.046875 0.046875\nv -0.264432 -0.046875 0.046875\nv 0.442503 -0.046875 0.046875\nv 0.494527 -0.046875 0.046875\nv -0.298798 -0.0390625 0.046875\nv -0.26293 -0.0390625 0.046875\nv 0.443371 -0.0390625 0.046875\nv 0.496476 -0.0390625 0.046875\nv -0.299376 -0.03125 0.046875\nv -0.261725 -0.03125 0.046875\nv 0.443793 -0.03125 0.046875\nv 0.498672 -0.03125 0.046875\nv 0.5 -0.0272913 0.046875\nv -0.299705 -0.0234375 0.046875\nv -0.260966 -0.0234375 0.046875\nv 0.443796 -0.0234375 0.046875\nv 0.501001 -0.0234375 0.046875\nv -0.30089 -0.015625 0.046875\nv -0.259723 -0.015625 0.046875\nv 0.443337 -0.015625 0.046875\nv 0.501551 -0.015625 0.046875\nv -0.302527 -0.0078125 0.046875\nv -0.259341 -0.0078125 0.046875\nv 0.441272 -0.0078125 0.046875\nv 0.501131 -0.0078125 0.046875\nv -0.303652 0 0.046875\nv -0.259694 0 0.046875\nv -0.257812 0.00771149 0.046875\nv 0.439735 0 0.046875\nv 0.500407 0 0.046875\nv 0.5 0.00578744 0.046875\nv -0.30359 0.0078125 0.046875\nv -0.257782 0.0078125 0.046875\nv 0.439299 0.0078125 0.046875\nv 0.499867 0.0078125 0.046875\nv 0.5 0.0078125 0.052334\nv -0.302175 0.015625 0.046875\nv -0.250739 0.015625 0.046875\nv -0.25 0.0161727 0.046875\nv -0.242188 0.0175798 0.046875\nv -0.234375 0.0193499 0.046875\nv -0.226562 0.0220243 0.046875\nv 0.421875 0.0219146 0.046875\nv 0.429688 0.0208782 0.046875\nv 0.437582 0.015625 0.046875\nv 0.4375 0.0157134 0.046875\nv 0.499659 0.015625 0.046875\nv -0.300925 0.0234375 0.046875\nv -0.221627 0.0234375 0.046875\nv -0.21875 0.0241491 0.046875\nv -0.210938 0.0253522 0.046875\nv -0.203125 0.0256976 0.046875\nv -0.195312 0.025854 0.046875\nv -0.1875 0.0260459 0.046875\nv -0.179688 0.0261513 0.046875\nv -0.171875 0.026569 0.046875\nv -0.164062 0.0266746 0.046875\nv -0.15625 0.0267314 0.046875\nv -0.148438 0.0268472 0.046875\nv -0.140625 0.0268164 0.046875\nv -0.132812 0.0268967 0.046875\nv -0.125 0.0272022 0.046875\nv -0.117188 0.0272107 0.046875\nv -0.109375 0.0269849 0.046875\nv -0.101562 0.0267495 0.046875\nv -0.09375 0.0265917 0.046875\nv -0.0859375 0.0265028 0.046875\nv -0.078125 0.0263749 0.046875\nv -0.0703125 0.0262204 0.046875\nv -0.0625 0.0260561 0.046875\nv -0.0546875 0.0258896 0.046875\nv -0.046875 0.0257828 0.046875\nv -0.0390625 0.0257233 0.046875\nv -0.03125 0.0256409 0.046875\nv -0.0234375 0.025509 0.046875\nv -0.015625 0.0253779 0.046875\nv -0.0078125 0.0252755 0.046875\nv 0 0.025196 0.046875\nv 0.0078125 0.0250701 0.046875\nv 0.015625 0.0251305 0.046875\nv 0.0234375 0.0251996 0.046875\nv 0.03125 0.0253154 0.046875\nv 0.0390625 0.0254006 0.046875\nv 0.046875 0.0253843 0.046875\nv 0.0546875 0.0254134 0.046875\nv 0.0625 0.0254687 0.046875\nv 0.0703125 0.025431 0.046875\nv 0.078125 0.0253281 0.046875\nv 0.0859375 0.0253571 0.046875\nv 0.09375 0.0254107 0.046875\nv 0.101562 0.0254506 0.046875\nv 0.109375 0.0253987 0.046875\nv 0.117188 0.025409 0.046875\nv 0.125 0.025463 0.046875\nv 0.132812 0.0254821 0.046875\nv 0.140625 0.025475 0.046875\nv 0.148438 0.0253318 0.046875\nv 0.15625 0.0251099 0.046875\nv 0.164062 0.0248825 0.046875\nv 0.171875 0.0246269 0.046875\nv 0.179688 0.0244267 0.046875\nv 0.1875 0.0243397 0.046875\nv 0.195312 0.0242865 0.046875\nv 0.203125 0.0242047 0.046875\nv 0.210938 0.0241113 0.046875\nv 0.21875 0.0240161 0.046875\nv 0.226562 0.0238819 0.046875\nv 0.234375 0.0238921 0.046875\nv 0.242188 0.0239916 0.046875\nv 0.25 0.024169 0.046875\nv 0.257812 0.024388 0.046875\nv 0.265625 0.0246171 0.046875\nv 0.273438 0.0247942 0.046875\nv 0.28125 0.0250603 0.046875\nv 0.289062 0.0252161 0.046875\nv 0.296875 0.0253484 0.046875\nv 0.304688 0.0255331 0.046875\nv 0.3125 0.0257863 0.046875\nv 0.320312 0.0260884 0.046875\nv 0.328125 0.0263229 0.046875\nv 0.335938 0.0263634 0.046875\nv 0.34375 0.0264411 0.046875\nv 0.351562 0.0264896 0.046875\nv 0.359375 0.0264934 0.046875\nv 0.367188 0.0264922 0.046875\nv 0.375 0.026501 0.046875\nv 0.382812 0.02642 0.046875\nv 0.390625 0.0261047 0.046875\nv 0.398438 0.0255629 0.046875\nv 0.40625 0.0251677 0.046875\nv 0.416903 0.0234375 0.046875\nv 0.414062 0.0240828 0.046875\nv 0.499363 0.0234375 0.046875\nv -0.299416 0.03125 0.046875\nv 0.497096 0.03125 0.046875\nv -0.297073 0.0390625 0.046875\nv -0.296875 0.0394844 0.046875\nv 0.494779 0.0390625 0.046875\nv -0.293112 0.046875 0.046875\nv 0.492644 0.046875 0.046875\nv 0.492188 0.0483402 0.046875\nv -0.289091 0.0546875 0.046875\nv -0.289062 0.0547387 0.046875\nv 0.490034 0.0546875 0.046875\nv 0.484375 0.0589222 0.046875\nv -0.282887 0.0625 0.046875\nv -0.28125 0.0641931 0.046875\nv -0.273438 0.0692244 0.046875\nv 0.445312 0.0700443 0.046875\nv 0.453125 0.0683664 0.046875\nv 0.460938 0.0672595 0.046875\nv 0.46875 0.0664439 0.046875\nv 0.477634 0.0625 0.046875\nv 0.476562 0.0631127 0.046875\nv -0.270431 0.0703125 0.046875\nv -0.273438 0.0703125 0.0529754\nv -0.265625 0.0725031 0.046875\nv -0.257812 0.0762667 0.046875\nv -0.25 0.0763438 0.046875\nv -0.242188 0.0746125 0.046875\nv -0.234375 0.0732698 0.046875\nv -0.226562 0.0724792 0.046875\nv -0.21875 0.0722063 0.046875\nv -0.210938 0.0721083 0.046875\nv -0.203125 0.073091 0.046875\nv -0.195312 0.0737315 0.046875\nv -0.1875 0.0743126 0.046875\nv -0.179688 0.0746758 0.046875\nv -0.171875 0.0749731 0.046875\nv -0.164062 0.0751775 0.046875\nv -0.15625 0.0750794 0.046875\nv -0.148438 0.0751012 0.046875\nv -0.140625 0.0750897 0.046875\nv -0.132812 0.0752834 0.046875\nv -0.125 0.0754817 0.046875\nv -0.117188 0.0755611 0.046875\nv -0.109375 0.0756046 0.046875\nv -0.101562 0.0755174 0.046875\nv -0.09375 0.0754313 0.046875\nv -0.0859375 0.0753381 0.046875\nv -0.078125 0.0751375 0.046875\nv -0.0703125 0.0749371 0.046875\nv -0.0625 0.0747559 0.046875\nv -0.0546875 0.0745958 0.046875\nv -0.046875 0.0744102 0.046875\nv -0.0390625 0.0742715 0.046875\nv -0.03125 0.0740918 0.046875\nv -0.0234375 0.073853 0.046875\nv -0.015625 0.0736532 0.046875\nv -0.0078125 0.0734918 0.046875\nv 0 0.073361 0.046875\nv 0.0078125 0.0732351 0.046875\nv 0.015625 0.0731677 0.046875\nv 0.0234375 0.0732136 0.046875\nv 0.03125 0.073254 0.046875\nv 0.0390625 0.0732028 0.046875\nv 0.046875 0.0732037 0.046875\nv 0.0546875 0.0732313 0.046875\nv 0.0625 0.0732525 0.046875\nv 0.0703125 0.0732212 0.046875\nv 0.078125 0.073212 0.046875\nv 0.0859375 0.0732164 0.046875\nv 0.09375 0.0732231 0.046875\nv 0.101562 0.0732266 0.046875\nv 0.109375 0.0731515 0.046875\nv 0.117188 0.0731505 0.046875\nv 0.125 0.0731739 0.046875\nv 0.132812 0.073147 0.046875\nv 0.140625 0.0731133 0.046875\nv 0.148438 0.0731102 0.046875\nv 0.15625 0.0731597 0.046875\nv 0.164062 0.0731965 0.046875\nv 0.171875 0.0731778 0.046875\nv 0.179688 0.0731466 0.046875\nv 0.1875 0.0731113 0.046875\nv 0.195312 0.073083 0.046875\nv 0.203125 0.0730346 0.046875\nv 0.210938 0.0729614 0.046875\nv 0.21875 0.0728751 0.046875\nv 0.226562 0.0727622 0.046875\nv 0.234375 0.0726421 0.046875\nv 0.242188 0.0724357 0.046875\nv 0.25 0.0723032 0.046875\nv 0.257812 0.0723105 0.046875\nv 0.265625 0.0724282 0.046875\nv 0.273438 0.0725295 0.046875\nv 0.28125 0.0726637 0.046875\nv 0.289062 0.0728015 0.046875\nv 0.296875 0.0728721 0.046875\nv 0.304688 0.0729386 0.046875\nv 0.3125 0.0729571 0.046875\nv 0.320312 0.0730036 0.046875\nv 0.328125 0.0730549 0.046875\nv 0.335938 0.0731519 0.046875\nv 0.34375 0.0732399 0.046875\nv 0.351562 0.0732467 0.046875\nv 0.359375 0.0732127 0.046875\nv 0.367188 0.0731399 0.046875\nv 0.375 0.0728194 0.046875\nv 0.382812 0.072405 0.046875\nv 0.390625 0.0721055 0.046875\nv 0.398438 0.0719575 0.046875\nv 0.40625 0.0718365 0.046875\nv 0.414062 0.0716401 0.046875\nv 0.421875 0.0714311 0.046875\nv 0.429688 0.0712653 0.046875\nv 0.442621 0.0703125 0.046875\nv 0.4375 0.0707963 0.046875\nv -0.257812 0.078125 0.0529645\nv -0.25 0.078125 0.0544887\nv -0.265625 0.163466 0.046875\nv -0.28125 0.170057 0.046875\nv -0.266989 0.164062 0.046875\nv -0.273438 0.166126 0.046875\nv -0.263807 0.164062 0.046875\nv -0.257812 0.166617 0.046875\nv -0.284557 0.171875 0.046875\nv -0.289062 0.176188 0.046875\nv -0.254828 0.171875 0.046875\nv -0.291939 0.179688 0.046875\nv -0.251855 0.179688 0.046875\nv -0.25 0.184473 0.046875\nv -0.296082 0.1875 0.046875\nv -0.296875 0.191209 0.046875\nv -0.248865 0.1875 0.046875\nv -0.297492 0.195312 0.046875\nv -0.246453 0.195312 0.046875\nv -0.298667 0.203125 0.046875\nv -0.244937 0.203125 0.046875\nv -0.29928 0.210938 0.046875\nv -0.244443 0.210938 0.046875\nv -0.299778 0.21875 0.046875\nv -0.243718 0.21875 0.046875\nv -0.300097 0.226562 0.046875\nv -0.242981 0.226562 0.046875\nv -0.300315 0.234375 0.046875\nv -0.242438 0.234375 0.046875\nv -0.242188 0.236408 0.046875\nv -0.300318 0.242188 0.046875\nv -0.241465 0.242188 0.046875\nv -0.300222 0.25 0.046875\nv -0.241797 0.25 0.046875\nv -0.242188 0.255859 0.046875\nv -0.300247 0.257812 0.046875\nv -0.242318 0.257812 0.046875\nv -0.300122 0.265625 0.046875\nv -0.242959 0.265625 0.046875\nv -0.299584 0.273438 0.046875\nv -0.24339 0.273438 0.046875\nv -0.298528 0.28125 0.046875\nv -0.243974 0.28125 0.046875\nv -0.2973 0.289062 0.046875\nv -0.296875 0.291322 0.046875\nv -0.245112 0.289062 0.046875\nv -0.295796 0.296875 0.046875\nv -0.246439 0.296875 0.046875\nv -0.29439 0.304688 0.046875\nv -0.247909 0.304688 0.046875\nv -0.293437 0.3125 0.046875\nv -0.249501 0.3125 0.046875\nv -0.25 0.315884 0.046875\nv -0.292907 0.320312 0.046875\nv -0.250722 0.320312 0.046875\nv -0.292636 0.328125 0.046875\nv -0.252119 0.328125 0.046875\nv -0.292326 0.335938 0.046875\nv -0.253345 0.335938 0.046875\nv -0.292351 0.34375 0.046875\nv -0.254217 0.34375 0.046875\nv -0.292661 0.351562 0.046875\nv -0.254714 0.351562 0.046875\nv -0.293442 0.359375 0.046875\nv -0.255195 0.359375 0.046875\nv -0.294084 0.367188 0.046875\nv -0.255373 0.367188 0.046875\nv -0.29458 0.375 0.046875\nv -0.255396 0.375 0.046875\nv -0.295287 0.382812 0.046875\nv -0.255687 0.382812 0.046875\nv -0.295926 0.390625 0.046875\nv -0.256112 0.390625 0.046875\nv -0.296346 0.398438 0.046875\nv -0.296875 0.405504 0.046875\nv -0.296875 0.398438 0.0518905\nv -0.256615 0.398438 0.046875\nv -0.296931 0.40625 0.046875\nv -0.257117 0.40625 0.046875\nv -0.297572 0.414062 0.046875\nv -0.257527 0.414062 0.046875\nv -0.257812 0.418534 0.046875\nv -0.257812 0.414062 0.0497416\nv -0.297875 0.421875 0.046875\nv -0.258064 0.421875 0.046875\nv -0.298013 0.429688 0.046875\nv -0.258776 0.429688 0.046875\nv -0.298083 0.4375 0.046875\nv -0.259517 0.4375 0.046875\nv -0.298159 0.445312 0.046875\nv -0.260394 0.445312 0.046875\nv -0.298295 0.453125 0.046875\nv -0.261327 0.453125 0.046875\nv -0.298534 0.460938 0.046875\nv -0.262224 0.460938 0.046875\nv -0.298703 0.46875 0.046875\nv -0.263012 0.46875 0.046875\nv -0.298813 0.476562 0.046875\nv -0.26379 0.476562 0.046875\nv -0.298945 0.484375 0.046875\nv -0.264396 0.484375 0.046875\nv -0.299105 0.492188 0.046875\nv -0.264894 0.492188 0.046875\nv -0.299629 0.5 0.046875\nv -0.265337 0.5 0.046875\nv -0.265625 0.506151 0.046875\nv -0.265625 0.5 0.0500043\nv -0.300322 0.507812 0.046875\nv -0.26573 0.507812 0.046875\nv -0.3009 0.515625 0.046875\nv -0.266229 0.515625 0.046875\nv -0.301559 0.523438 0.046875\nv -0.266737 0.523438 0.046875\nv -0.302379 0.53125 0.046875\nv -0.26727 0.53125 0.046875\nv -0.303286 0.539062 0.046875\nv -0.267675 0.539062 0.046875\nv -0.304065 0.546875 0.046875\nv -0.304688 0.552937 0.046875\nv -0.267696 0.546875 0.046875\nv -0.304862 0.554688 0.046875\nv -0.267678 0.554688 0.046875\nv -0.305612 0.5625 0.046875\nv -0.267652 0.5625 0.046875\nv -0.306159 0.570312 0.046875\nv -0.267731 0.570312 0.046875\nv -0.306332 0.578125 0.046875\nv -0.268069 0.578125 0.046875\nv -0.306382 0.585938 0.046875\nv -0.268598 0.585938 0.046875\nv -0.306281 0.59375 0.046875\nv -0.269264 0.59375 0.046875\nv -0.306012 0.601562 0.046875\nv -0.27022 0.601562 0.046875\nv -0.305832 0.609375 0.046875\nv -0.271203 0.609375 0.046875\nv -0.305167 0.617188 0.046875\nv -0.272127 0.617188 0.046875\nv -0.305445 0.625 0.046875\nv -0.272774 0.625 0.046875\nv -0.306643 0.632812 0.046875\nv -0.273234 0.632812 0.046875\nv -0.273438 0.633952 0.046875\nv -0.307272 0.640625 0.046875\nv -0.274732 0.640625 0.046875\nv -0.30785 0.648438 0.046875\nv -0.276707 0.648438 0.046875\nv -0.308671 0.65625 0.046875\nv -0.277265 0.65625 0.046875\nv -0.309521 0.664062 0.046875\nv -0.278218 0.664062 0.046875\nv -0.310258 0.671875 0.046875\nv -0.3125 0.671875 0.054143\nv -0.278909 0.671875 0.046875\nv -0.31088 0.679688 0.046875\nv -0.3125 0.679688 0.0517393\nv -0.279567 0.679688 0.046875\nv -0.311999 0.6875 0.046875\nv -0.3125 0.691032 0.046875\nv -0.3125 0.6875 0.0486642\nv -0.280077 0.6875 0.046875\nv -0.313207 0.695312 0.046875\nv -0.280158 0.695312 0.046875\nv -0.31555 0.703125 0.046875\nv -0.280226 0.703125 0.046875\nv -0.317346 0.710938 0.046875\nv -0.279916 0.710938 0.046875\nv -0.319181 0.71875 0.046875\nv -0.320312 0.72321 0.046875\nv -0.280062 0.71875 0.046875\nv -0.321119 0.726562 0.046875\nv -0.280671 0.726562 0.046875\nv -0.322595 0.734375 0.046875\nv -0.280864 0.734375 0.046875\nv -0.28125 0.73872 0.046875\nv -0.324137 0.742188 0.046875\nv -0.281612 0.742188 0.046875\nv -0.325565 0.75 0.046875\nv -0.282681 0.75 0.046875\nv -0.326508 0.757812 0.046875\nv -0.283572 0.757812 0.046875\nv -0.327863 0.765625 0.046875\nv -0.328125 0.766891 0.046875\nv -0.284832 0.765625 0.046875\nv -0.329418 0.773438 0.046875\nv -0.286187 0.773438 0.046875\nv -0.330713 0.78125 0.046875\nv -0.287997 0.78125 0.046875\nv -0.289062 0.785228 0.046875\nv -0.331865 0.789062 0.046875\nv -0.290763 0.789062 0.046875\nv -0.33297 0.796875 0.046875\nv -0.293676 0.796875 0.046875\nv -0.333755 0.804688 0.046875\nv -0.29681 0.804688 0.046875\nv -0.296875 0.804795 0.046875\nv -0.296875 0.804688 0.048527\nv -0.333199 0.8125 0.046875\nv -0.30269 0.8125 0.046875\nv -0.304688 0.814697 0.046875\nv -0.331295 0.820312 0.046875\nv -0.328125 0.823552 0.046875\nv -0.320312 0.8264 0.046875\nv -0.309453 0.820312 0.046875\nv -0.3125 0.822903 0.046875\nv 0.03125 -0.540162 0.0546875\nv 0.0390625 -0.541033 0.0546875\nv 0.046875 -0.541517 0.0546875\nv 0.0546875 -0.541145 0.0546875\nv 0.0625 -0.540229 0.0546875\nv 0.0078125 -0.533293 0.0546875\nv 0.015625 -0.536547 0.0546875\nv 0.0237271 -0.539062 0.0546875\nv 0.0234375 -0.538995 0.0546875\nv 0.0234375 -0.539062 0.0561015\nv 0.0681381 -0.539062 0.0546875\nv 0.0703125 -0.538486 0.0546875\nv 0.078125 -0.535621 0.0546875\nv 0.0859375 -0.532368 0.0546875\nv -0.0078125 -0.525213 0.0546875\nv 0.00222225 -0.53125 0.0546875\nv 0 -0.530154 0.0546875\nv 0.0886318 -0.53125 0.0546875\nv 0.09375 -0.529 0.0546875\nv 0.101562 -0.524593 0.0546875\nv -0.00957276 -0.523438 0.0546875\nv 0.103496 -0.523438 0.0546875\nv 0.109375 -0.51895 0.0546875\nv -0.009657 -0.515625 0.0546875\nv -0.0078125 -0.51143 0.0546875\nv 0.113198 -0.515625 0.0546875\nv 0.117188 -0.511288 0.0546875\nv -0.00595851 -0.507812 0.0546875\nv 0 -0.504521 0.0546875\nv 0.0078125 -0.50041 0.0546875\nv 0.120206 -0.507812 0.0546875\nv 0.00855672 -0.5 0.0546875\nv 0.015625 -0.496541 0.0546875\nv 0.0234375 -0.492636 0.0546875\nv 0.122896 -0.5 0.0546875\nv 0.0242285 -0.492188 0.0546875\nv 0.03125 -0.488323 0.0546875\nv 0.0390625 -0.485325 0.0546875\nv 0.124356 -0.492188 0.0546875\nv 0.04215 -0.484375 0.0546875\nv 0.046875 -0.483398 0.0546875\nv 0.0546875 -0.481506 0.0546875\nv 0.0625 -0.479334 0.0546875\nv 0.0703125 -0.476942 0.0546875\nv 0.119255 -0.484375 0.0546875\nv 0.117188 -0.481959 0.0546875\nv 0.0719058 -0.476562 0.0546875\nv 0.078125 -0.475153 0.0546875\nv 0.0859375 -0.473555 0.0546875\nv 0.09375 -0.472273 0.0546875\nv 0.101562 -0.472749 0.0546875\nv 0.110934 -0.476562 0.0546875\nv 0.109375 -0.47572 0.0546875\nv 0.109375 -0.476562 0.0615986\nv -0.289062 -0.0647427 0.0546875\nv -0.28125 -0.0664356 0.0546875\nv -0.273438 -0.0645137 0.0546875\nv 0.453125 -0.067543 0.0546875\nv 0.460938 -0.0682552 0.0546875\nv 0.46875 -0.0664215 0.0546875\nv 0.476562 -0.0663804 0.0546875\nv 0.484375 -0.0647753 0.0546875\nv -0.291305 -0.0625 0.0546875\nv -0.271434 -0.0625 0.0546875\nv 0.446671 -0.0625 0.0546875\nv 0.445312 -0.0576426 0.0546875\nv 0.488854 -0.0625 0.0546875\nv 0.492188 -0.0558444 0.0546875\nv -0.2947 -0.0546875 0.0546875\nv -0.296875 -0.0479807 0.0546875\nv -0.267053 -0.0546875 0.0546875\nv -0.265625 -0.0506757 0.0546875\nv 0.444617 -0.0546875 0.0546875\nv 0.492499 -0.0546875 0.0546875\nv -0.297145 -0.046875 0.0546875\nv -0.264427 -0.046875 0.0546875\nv 0.443046 -0.046875 0.0546875\nv 0.494351 -0.046875 0.0546875\nv -0.298661 -0.0390625 0.0546875\nv -0.262933 -0.0390625 0.0546875\nv 0.443893 -0.0390625 0.0546875\nv 0.496175 -0.0390625 0.0546875\nv -0.29921 -0.03125 0.0546875\nv -0.261676 -0.03125 0.0546875\nv 0.444199 -0.03125 0.0546875\nv 0.498348 -0.03125 0.0546875\nv 0.5 -0.0264695 0.0546875\nv -0.299461 -0.0234375 0.0546875\nv -0.261035 -0.0234375 0.0546875\nv 0.444176 -0.0234375 0.0546875\nv 0.500825 -0.0234375 0.0546875\nv -0.300736 -0.015625 0.0546875\nv -0.259788 -0.015625 0.0546875\nv 0.443645 -0.015625 0.0546875\nv 0.501393 -0.015625 0.0546875\nv -0.302332 -0.0078125 0.0546875\nv -0.25943 -0.0078125 0.0546875\nv 0.441571 -0.0078125 0.0546875\nv 0.501054 -0.0078125 0.0546875\nv -0.303639 0 0.0546875\nv -0.259712 0 0.0546875\nv -0.257812 0.00731257 0.0546875\nv 0.440115 0 0.0546875\nv 0.500408 0 0.0546875\nv -0.303526 0.0078125 0.0546875\nv -0.257652 0.0078125 0.0546875\nv 0.439733 0.0078125 0.0546875\nv 0.500059 0.0078125 0.0546875\nv 0.5 0.0106128 0.0546875\nv -0.302099 0.015625 0.0546875\nv -0.250567 0.015625 0.0546875\nv -0.25 0.0160399 0.0546875\nv -0.242188 0.0174882 0.0546875\nv -0.234375 0.0191863 0.0546875\nv -0.226562 0.0219841 0.0546875\nv 0.421875 0.0222162 0.0546875\nv 0.429688 0.0209929 0.0546875\nv 0.437958 0.015625 0.0546875\nv 0.4375 0.0160979 0.0546875\nv 0.499894 0.015625 0.0546875\nv 0.5 0.015625 0.0603144\nv -0.300852 0.0234375 0.0546875\nv -0.221586 0.0234375 0.0546875\nv -0.21875 0.0241399 0.0546875\nv -0.210938 0.0252796 0.0546875\nv -0.203125 0.0256295 0.0546875\nv -0.195312 0.0258343 0.0546875\nv -0.1875 0.0260416 0.0546875\nv -0.179688 0.026165 0.0546875\nv -0.171875 0.026585 0.0546875\nv -0.164062 0.0266553 0.0546875\nv -0.15625 0.0267413 0.0546875\nv -0.148438 0.0268921 0.0546875\nv -0.140625 0.0268597 0.0546875\nv -0.132812 0.0269331 0.0546875\nv -0.125 0.027244 0.0546875\nv -0.117188 0.0272684 0.0546875\nv -0.109375 0.0270551 0.0546875\nv -0.101562 0.0268331 0.0546875\nv -0.09375 0.0266701 0.0546875\nv -0.0859375 0.026539 0.0546875\nv -0.078125 0.026385 0.0546875\nv -0.0703125 0.0262046 0.0546875\nv -0.0625 0.0260559 0.0546875\nv -0.0546875 0.0259125 0.0546875\nv -0.046875 0.0258235 0.0546875\nv -0.0390625 0.0257529 0.0546875\nv -0.03125 0.0256496 0.0546875\nv -0.0234375 0.0255391 0.0546875\nv -0.015625 0.025436 0.0546875\nv -0.0078125 0.0254089 0.0546875\nv 0 0.0253491 0.0546875\nv 0.0078125 0.0252611 0.0546875\nv 0.015625 0.0253569 0.0546875\nv 0.0234375 0.0254775 0.0546875\nv 0.03125 0.0255108 0.0546875\nv 0.0390625 0.0255516 0.0546875\nv 0.046875 0.0255312 0.0546875\nv 0.0546875 0.025523 0.0546875\nv 0.0625 0.0255826 0.0546875\nv 0.0703125 0.0255802 0.0546875\nv 0.078125 0.0255265 0.0546875\nv 0.0859375 0.0254871 0.0546875\nv 0.09375 0.0255128 0.0546875\nv 0.101562 0.0254669 0.0546875\nv 0.109375 0.0254207 0.0546875\nv 0.117188 0.0254248 0.0546875\nv 0.125 0.0254568 0.0546875\nv 0.132812 0.0254547 0.0546875\nv 0.140625 0.0254311 0.0546875\nv 0.148438 0.0253553 0.0546875\nv 0.15625 0.0252089 0.0546875\nv 0.164062 0.024935 0.0546875\nv 0.171875 0.0247126 0.0546875\nv 0.179688 0.0244935 0.0546875\nv 0.1875 0.0243812 0.0546875\nv 0.195312 0.0243332 0.0546875\nv 0.203125 0.0242699 0.0546875\nv 0.210938 0.0241883 0.0546875\nv 0.21875 0.0240925 0.0546875\nv 0.226562 0.0239523 0.0546875\nv 0.234375 0.023963 0.0546875\nv 0.242188 0.0240522 0.0546875\nv 0.25 0.0242314 0.0546875\nv 0.257812 0.0244613 0.0546875\nv 0.265625 0.024724 0.0546875\nv 0.273438 0.0249098 0.0546875\nv 0.28125 0.0250876 0.0546875\nv 0.289062 0.0252553 0.0546875\nv 0.296875 0.0253687 0.0546875\nv 0.304688 0.025539 0.0546875\nv 0.3125 0.0257674 0.0546875\nv 0.320312 0.0260454 0.0546875\nv 0.328125 0.0262809 0.0546875\nv 0.335938 0.0263283 0.0546875\nv 0.34375 0.0263851 0.0546875\nv 0.351562 0.0264262 0.0546875\nv 0.359375 0.0264294 0.0546875\nv 0.367188 0.0264231 0.0546875\nv 0.375 0.0264347 0.0546875\nv 0.382812 0.0263568 0.0546875\nv 0.390625 0.026058 0.0546875\nv 0.398438 0.0255556 0.0546875\nv 0.40625 0.0251654 0.0546875\nv 0.41779 0.0234375 0.0546875\nv 0.414062 0.0242616 0.0546875\nv 0.499463 0.0234375 0.0546875\nv -0.299388 0.03125 0.0546875\nv 0.497099 0.03125 0.0546875\nv -0.297574 0.0390625 0.0546875\nv -0.296875 0.0406207 0.0546875\nv 0.494739 0.0390625 0.0546875\nv -0.293707 0.046875 0.0546875\nv 0.492513 0.046875 0.0546875\nv 0.492188 0.0478993 0.0546875\nv -0.289698 0.0546875 0.0546875\nv -0.289062 0.0558754 0.0546875\nv 0.489838 0.0546875 0.0546875\nv 0.484375 0.0586971 0.0546875\nv -0.284064 0.0625 0.0546875\nv -0.28125 0.0656461 0.0546875\nv 0.445312 0.0700938 0.0546875\nv 0.453125 0.0683075 0.0546875\nv 0.460938 0.0671072 0.0546875\nv 0.46875 0.066263 0.0546875\nv 0.47729 0.0625 0.0546875\nv 0.476562 0.0629272 0.0546875\nv -0.274009 0.0703125 0.0546875\nv -0.273438 0.0705708 0.0546875\nv -0.265625 0.0741791 0.0546875\nv -0.242188 0.0756837 0.0546875\nv -0.234375 0.0738867 0.0546875\nv -0.226562 0.0728716 0.0546875\nv -0.21875 0.0723376 0.0546875\nv -0.210938 0.0722246 0.0546875\nv -0.203125 0.0731718 0.0546875\nv -0.195312 0.0737964 0.0546875\nv -0.1875 0.0743903 0.0546875\nv -0.179688 0.0747748 0.0546875\nv -0.171875 0.0750941 0.0546875\nv -0.164062 0.0752327 0.0546875\nv -0.15625 0.0751288 0.0546875\nv -0.148438 0.0750996 0.0546875\nv -0.140625 0.0750769 0.0546875\nv -0.132812 0.0752565 0.0546875\nv -0.125 0.0754644 0.0546875\nv -0.117188 0.0755527 0.0546875\nv -0.109375 0.0756076 0.0546875\nv -0.101562 0.0755203 0.0546875\nv -0.09375 0.075421 0.0546875\nv -0.0859375 0.0752998 0.0546875\nv -0.078125 0.0750675 0.0546875\nv -0.0703125 0.0748273 0.0546875\nv -0.0625 0.0746941 0.0546875\nv -0.0546875 0.0745737 0.0546875\nv -0.046875 0.0744129 0.0546875\nv -0.0390625 0.0742624 0.0546875\nv -0.03125 0.0740799 0.0546875\nv -0.0234375 0.0738737 0.0546875\nv -0.015625 0.0736492 0.0546875\nv -0.0078125 0.0734961 0.0546875\nv 0 0.0733332 0.0546875\nv 0.0078125 0.0731869 0.0546875\nv 0.015625 0.0731835 0.0546875\nv 0.0234375 0.0732276 0.0546875\nv 0.03125 0.0732726 0.0546875\nv 0.0390625 0.0732915 0.0546875\nv 0.046875 0.0732755 0.0546875\nv 0.0546875 0.073276 0.0546875\nv 0.0625 0.0732834 0.0546875\nv 0.0703125 0.0732723 0.0546875\nv 0.078125 0.0732347 0.0546875\nv 0.0859375 0.0732956 0.0546875\nv 0.09375 0.0732649 0.0546875\nv 0.101562 0.0732527 0.0546875\nv 0.109375 0.0731872 0.0546875\nv 0.117188 0.0730952 0.0546875\nv 0.125 0.0731074 0.0546875\nv 0.132812 0.0731281 0.0546875\nv 0.140625 0.0731351 0.0546875\nv 0.148438 0.0731465 0.0546875\nv 0.15625 0.0732082 0.0546875\nv 0.164062 0.0732618 0.0546875\nv 0.171875 0.0732871 0.0546875\nv 0.179688 0.0733043 0.0546875\nv 0.1875 0.0732616 0.0546875\nv 0.195312 0.0732164 0.0546875\nv 0.203125 0.0731505 0.0546875\nv 0.210938 0.0730548 0.0546875\nv 0.21875 0.0729492 0.0546875\nv 0.226562 0.0728297 0.0546875\nv 0.234375 0.0727232 0.0546875\nv 0.242188 0.0725961 0.0546875\nv 0.25 0.072306 0.0546875\nv 0.257812 0.0723817 0.0546875\nv 0.265625 0.0724789 0.0546875\nv 0.273438 0.0725611 0.0546875\nv 0.28125 0.072684 0.0546875\nv 0.289062 0.0728246 0.0546875\nv 0.296875 0.0728979 0.0546875\nv 0.304688 0.0729562 0.0546875\nv 0.3125 0.072974 0.0546875\nv 0.320312 0.0730397 0.0546875\nv 0.328125 0.0731109 0.0546875\nv 0.335938 0.0731815 0.0546875\nv 0.34375 0.0732695 0.0546875\nv 0.351562 0.0733008 0.0546875\nv 0.359375 0.0732792 0.0546875\nv 0.367188 0.0732221 0.0546875\nv 0.375 0.0729335 0.0546875\nv 0.382812 0.0725364 0.0546875\nv 0.390625 0.0721683 0.0546875\nv 0.398438 0.071985 0.0546875\nv 0.40625 0.0718488 0.0546875\nv 0.414062 0.0716569 0.0546875\nv 0.421875 0.0714453 0.0546875\nv 0.429688 0.0713154 0.0546875\nv 0.443171 0.0703125 0.0546875\nv 0.4375 0.0708563 0.0546875\nv -0.258648 0.078125 0.0546875\nv -0.257812 0.0784729 0.0546875\nv -0.24986 0.078125 0.0546875\nv -0.25 0.0781762 0.0546875\nv -0.265625 0.163197 0.0546875\nv -0.28125 0.169884 0.0546875\nv -0.267488 0.164062 0.0546875\nv -0.273438 0.166359 0.0546875\nv -0.263541 0.164062 0.0546875\nv -0.257812 0.166803 0.0546875\nv -0.284658 0.171875 0.0546875\nv -0.289062 0.175707 0.0546875\nv -0.254824 0.171875 0.0546875\nv -0.2924 0.179688 0.0546875\nv -0.252071 0.179688 0.0546875\nv -0.25 0.184564 0.0546875\nv -0.295731 0.1875 0.0546875\nv -0.296875 0.191967 0.0546875\nv -0.248917 0.1875 0.0546875\nv -0.297475 0.195312 0.0546875\nv -0.246393 0.195312 0.0546875\nv -0.298905 0.203125 0.0546875\nv -0.244832 0.203125 0.0546875\nv -0.299618 0.210938 0.0546875\nv -0.244245 0.210938 0.0546875\nv -0.300171 0.21875 0.0546875\nv -0.243432 0.21875 0.0546875\nv -0.300329 0.226562 0.0546875\nv -0.243103 0.226562 0.0546875\nv -0.300569 0.234375 0.0546875\nv -0.242553 0.234375 0.0546875\nv -0.242188 0.237978 0.0546875\nv -0.300652 0.242188 0.0546875\nv -0.241751 0.242188 0.0546875\nv -0.300585 0.25 0.0546875\nv -0.242128 0.25 0.0546875\nv -0.242188 0.251021 0.0546875\nv -0.242188 0.25 0.0565242\nv -0.30067 0.257812 0.0546875\nv -0.24259 0.257812 0.0546875\nv -0.300513 0.265625 0.0546875\nv -0.243072 0.265625 0.0546875\nv -0.299991 0.273438 0.0546875\nv -0.243344 0.273438 0.0546875\nv -0.298974 0.28125 0.0546875\nv -0.243794 0.28125 0.0546875\nv -0.297734 0.289062 0.0546875\nv -0.296875 0.293903 0.0546875\nv -0.244857 0.289062 0.0546875\nv -0.296345 0.296875 0.0546875\nv -0.296875 0.296875 0.059876\nv -0.246185 0.296875 0.0546875\nv -0.295271 0.304688 0.0546875\nv -0.247861 0.304688 0.0546875\nv -0.294473 0.3125 0.0546875\nv -0.249554 0.3125 0.0546875\nv -0.25 0.31537 0.0546875\nv -0.293799 0.320312 0.0546875\nv -0.250835 0.320312 0.0546875\nv -0.293382 0.328125 0.0546875\nv -0.25207 0.328125 0.0546875\nv -0.293236 0.335938 0.0546875\nv -0.253405 0.335938 0.0546875\nv -0.293414 0.34375 0.0546875\nv -0.254193 0.34375 0.0546875\nv -0.293861 0.351562 0.0546875\nv -0.254635 0.351562 0.0546875\nv -0.294593 0.359375 0.0546875\nv -0.255093 0.359375 0.0546875\nv -0.295189 0.367188 0.0546875\nv -0.255146 0.367188 0.0546875\nv -0.295633 0.375 0.0546875\nv -0.255217 0.375 0.0546875\nv -0.296179 0.382812 0.0546875\nv -0.296875 0.382812 0.0618131\nv -0.255569 0.382812 0.0546875\nv -0.296678 0.390625 0.0546875\nv -0.296875 0.393755 0.0546875\nv -0.296875 0.390625 0.0570725\nv -0.256154 0.390625 0.0546875\nv -0.297188 0.398438 0.0546875\nv -0.256791 0.398438 0.0546875\nv -0.297786 0.40625 0.0546875\nv -0.257559 0.40625 0.0546875\nv -0.257812 0.408783 0.0546875\nv -0.257812 0.40625 0.0575171\nv -0.298258 0.414062 0.0546875\nv -0.258339 0.414062 0.0546875\nv -0.298521 0.421875 0.0546875\nv -0.25902 0.421875 0.0546875\nv -0.298704 0.429688 0.0546875\nv -0.259659 0.429688 0.0546875\nv -0.298768 0.4375 0.0546875\nv -0.260331 0.4375 0.0546875\nv -0.298808 0.445312 0.0546875\nv -0.261251 0.445312 0.0546875\nv -0.29886 0.453125 0.0546875\nv -0.26214 0.453125 0.0546875\nv -0.298917 0.460938 0.0546875\nv -0.263026 0.460938 0.0546875\nv -0.29895 0.46875 0.0546875\nv -0.263872 0.46875 0.0546875\nv -0.298964 0.476562 0.0546875\nv -0.264625 0.476562 0.0546875\nv -0.265625 0.476562 0.0599272\nv -0.29899 0.484375 0.0546875\nv -0.265105 0.484375 0.0546875\nv -0.265625 0.484375 0.0572746\nv -0.299073 0.492188 0.0546875\nv -0.265591 0.492188 0.0546875\nv -0.265625 0.492776 0.0546875\nv -0.265625 0.492188 0.0548559\nv -0.299669 0.5 0.0546875\nv -0.266194 0.5 0.0546875\nv -0.300418 0.507812 0.0546875\nv -0.266677 0.507812 0.0546875\nv -0.300908 0.515625 0.0546875\nv -0.267111 0.515625 0.0546875\nv -0.301537 0.523438 0.0546875\nv -0.267596 0.523438 0.0546875\nv -0.302428 0.53125 0.0546875\nv -0.268137 0.53125 0.0546875\nv -0.303325 0.539062 0.0546875\nv -0.268481 0.539062 0.0546875\nv -0.304277 0.546875 0.0546875\nv -0.304688 0.550803 0.0546875\nv -0.268464 0.546875 0.0546875\nv -0.305056 0.554688 0.0546875\nv -0.268321 0.554688 0.0546875\nv -0.30577 0.5625 0.0546875\nv -0.268051 0.5625 0.0546875\nv -0.306303 0.570312 0.0546875\nv -0.267946 0.570312 0.0546875\nv -0.306581 0.578125 0.0546875\nv -0.267999 0.578125 0.0546875\nv -0.306719 0.585938 0.0546875\nv -0.268226 0.585938 0.0546875\nv -0.306767 0.59375 0.0546875\nv -0.268633 0.59375 0.0546875\nv -0.306735 0.601562 0.0546875\nv -0.269624 0.601562 0.0546875\nv -0.306868 0.609375 0.0546875\nv -0.270702 0.609375 0.0546875\nv -0.306816 0.617188 0.0546875\nv -0.271626 0.617188 0.0546875\nv -0.307923 0.625 0.0546875\nv -0.272292 0.625 0.0546875\nv -0.308752 0.632812 0.0546875\nv -0.272758 0.632812 0.0546875\nv -0.273438 0.637181 0.0546875\nv -0.309138 0.640625 0.0546875\nv -0.274009 0.640625 0.0546875\nv -0.30976 0.648438 0.0546875\nv -0.275448 0.648438 0.0546875\nv -0.310412 0.65625 0.0546875\nv -0.3125 0.65625 0.0611968\nv -0.276079 0.65625 0.0546875\nv -0.311528 0.664062 0.0546875\nv -0.3125 0.67077 0.0546875\nv -0.3125 0.664062 0.0578381\nv -0.276971 0.664062 0.0546875\nv -0.312659 0.671875 0.0546875\nv -0.277471 0.671875 0.0546875\nv -0.313484 0.679688 0.0546875\nv -0.277969 0.679688 0.0546875\nv -0.314254 0.6875 0.0546875\nv -0.278494 0.6875 0.0546875\nv -0.315305 0.695312 0.0546875\nv -0.278803 0.695312 0.0546875\nv -0.316788 0.703125 0.0546875\nv -0.278925 0.703125 0.0546875\nv -0.318227 0.710938 0.0546875\nv -0.279004 0.710938 0.0546875\nv -0.319703 0.71875 0.0546875\nv -0.320312 0.721758 0.0546875\nv -0.279469 0.71875 0.0546875\nv -0.321233 0.726562 0.0546875\nv -0.280309 0.726562 0.0546875\nv -0.322714 0.734375 0.0546875\nv -0.280566 0.734375 0.0546875\nv -0.28125 0.742169 0.0546875\nv -0.324277 0.742188 0.0546875\nv -0.281252 0.742188 0.0546875\nv -0.28125 0.742188 0.0547837\nv -0.325655 0.75 0.0546875\nv -0.282363 0.75 0.0546875\nv -0.326516 0.757812 0.0546875\nv -0.283393 0.757812 0.0546875\nv -0.32786 0.765625 0.0546875\nv -0.328125 0.766943 0.0546875\nv -0.284718 0.765625 0.0546875\nv -0.329374 0.773438 0.0546875\nv -0.286209 0.773438 0.0546875\nv -0.33063 0.78125 0.0546875\nv -0.288126 0.78125 0.0546875\nv -0.289062 0.784887 0.0546875\nv -0.331787 0.789062 0.0546875\nv -0.290899 0.789062 0.0546875\nv -0.332883 0.796875 0.0546875\nv -0.293836 0.796875 0.0546875\nv -0.296875 0.804136 0.0546875\nv -0.333481 0.804688 0.0546875\nv -0.297167 0.804688 0.0546875\nv -0.332614 0.8125 0.0546875\nv -0.303552 0.8125 0.0546875\nv -0.304688 0.813725 0.0546875\nv -0.304688 0.8125 0.0615703\nv -0.33028 0.820312 0.0546875\nv -0.328125 0.822555 0.0546875\nv -0.320312 0.825421 0.0546875\nv -0.310311 0.820312 0.0546875\nv -0.3125 0.822078 0.0546875\nv 0.0234375 -0.539261 0.0625\nv 0.03125 -0.540297 0.0625\nv 0.0390625 -0.540958 0.0625\nv 0.046875 -0.541313 0.0625\nv 0.0546875 -0.54093 0.0625\nv 0.0625 -0.540196 0.0625\nv 0.0078125 -0.533947 0.0625\nv 0.0223033 -0.539062 0.0625\nv 0.015625 -0.53698 0.0625\nv 0.0671095 -0.539062 0.0625\nv 0.0703125 -0.538044 0.0625\nv 0.078125 -0.535341 0.0625\nv 0.0859375 -0.533208 0.0625\nv -0.0078125 -0.525079 0.0625\nv 0.000385541 -0.53125 0.0625\nv 0 -0.531033 0.0625\nv 0 -0.53125 0.0670538\nv 0.0904876 -0.53125 0.0625\nv 0.09375 -0.529644 0.0625\nv 0.101562 -0.525236 0.0625\nv -0.00946885 -0.523438 0.0625\nv 0.104352 -0.523438 0.0625\nv 0.109375 -0.519267 0.0625\nv -0.00975946 -0.515625 0.0625\nv -0.0078125 -0.511208 0.0625\nv 0.113625 -0.515625 0.0625\nv 0.117188 -0.511217 0.0625\nv -0.00604549 -0.507812 0.0625\nv 0 -0.504606 0.0625\nv 0.0078125 -0.500845 0.0625\nv 0.120002 -0.507812 0.0625\nv 0.00938498 -0.5 0.0625\nv 0.015625 -0.496979 0.0625\nv 0.0234375 -0.49313 0.0625\nv 0.122057 -0.5 0.0625\nv 0.0250927 -0.492188 0.0625\nv 0.03125 -0.489171 0.0625\nv 0.0390625 -0.486264 0.0625\nv 0.123792 -0.492188 0.0625\nv 0.044652 -0.484375 0.0625\nv 0.046875 -0.483812 0.0625\nv 0.0546875 -0.481694 0.0625\nv 0.0625 -0.479404 0.0625\nv 0.0703125 -0.476983 0.0625\nv 0.109375 -0.476687 0.0625\nv 0.118328 -0.484375 0.0625\nv 0.117188 -0.483177 0.0625\nv 0.0722338 -0.476562 0.0625\nv 0.078125 -0.475354 0.0625\nv 0.0859375 -0.473638 0.0625\nv 0.09375 -0.472479 0.0625\nv 0.109154 -0.476562 0.0625\nv 0.101562 -0.472935 0.0625\nv -0.289062 -0.0643715 0.0625\nv -0.28125 -0.0661227 0.0625\nv -0.273438 -0.0642086 0.0625\nv 0.453125 -0.067581 0.0625\nv 0.460938 -0.0685885 0.0625\nv 0.46875 -0.0664801 0.0625\nv 0.476562 -0.0664021 0.0625\nv 0.484375 -0.0647516 0.0625\nv -0.290965 -0.0625 0.0625\nv -0.271719 -0.0625 0.0625\nv 0.447346 -0.0625 0.0625\nv 0.445312 -0.0547225 0.0625\nv 0.488749 -0.0625 0.0625\nv 0.492188 -0.0550177 0.0625\nv -0.29452 -0.0546875 0.0625\nv -0.296875 -0.0476952 0.0625\nv -0.267278 -0.0546875 0.0625\nv -0.265625 -0.0502787 0.0625\nv 0.445304 -0.0546875 0.0625\nv 0.445312 -0.0546875 0.0626417\nv 0.492271 -0.0546875 0.0625\nv 0.492188 -0.0546875 0.0691296\nv -0.297082 -0.046875 0.0625\nv -0.264508 -0.046875 0.0625\nv 0.443722 -0.046875 0.0625\nv 0.493978 -0.046875 0.0625\nv -0.298567 -0.0390625 0.0625\nv -0.263 -0.0390625 0.0625\nv 0.444565 -0.0390625 0.0625\nv 0.495786 -0.0390625 0.0625\nv -0.299073 -0.03125 0.0625\nv -0.261782 -0.03125 0.0625\nv 0.444685 -0.03125 0.0625\nv 0.497927 -0.03125 0.0625\nv 0.5 -0.0253439 0.0625\nv -0.299287 -0.0234375 0.0625\nv -0.261128 -0.0234375 0.0625\nv 0.444559 -0.0234375 0.0625\nv 0.500541 -0.0234375 0.0625\nv -0.300656 -0.015625 0.0625\nv -0.259869 -0.015625 0.0625\nv 0.44409 -0.015625 0.0625\nv 0.501204 -0.015625 0.0625\nv -0.30218 -0.0078125 0.0625\nv -0.259488 -0.0078125 0.0625\nv 0.441978 -0.0078125 0.0625\nv 0.501009 -0.0078125 0.0625\nv -0.30357 0 0.0625\nv -0.259737 0 0.0625\nv -0.257812 0.00723609 0.0625\nv 0.440519 0 0.0625\nv 0.500578 0 0.0625\nv -0.303474 0.0078125 0.0625\nv -0.257619 0.0078125 0.0625\nv 0.440205 0.0078125 0.0625\nv 0.500229 0.0078125 0.0625\nv -0.302061 0.015625 0.0625\nv -0.250526 0.015625 0.0625\nv -0.25 0.016 0.0625\nv -0.242188 0.0173768 0.0625\nv -0.234375 0.0191414 0.0625\nv -0.226562 0.0219673 0.0625\nv 0.421875 0.0225559 0.0625\nv 0.429688 0.0210934 0.0625\nv 0.438465 0.015625 0.0625\nv 0.4375 0.0165856 0.0625\nv 0.500039 0.015625 0.0625\nv 0.5 0.0164305 0.0625\nv -0.300821 0.0234375 0.0625\nv -0.221579 0.0234375 0.0625\nv -0.21875 0.0241467 0.0625\nv -0.210938 0.0252782 0.0625\nv -0.203125 0.0255951 0.0625\nv -0.195312 0.0258279 0.0625\nv -0.1875 0.0260485 0.0625\nv -0.179688 0.0262133 0.0625\nv -0.171875 0.0266041 0.0625\nv -0.164062 0.0266654 0.0625\nv -0.15625 0.0267657 0.0625\nv -0.148438 0.0269025 0.0625\nv -0.140625 0.0268828 0.0625\nv -0.132812 0.0269511 0.0625\nv -0.125 0.0272666 0.0625\nv -0.117188 0.0273039 0.0625\nv -0.109375 0.0271045 0.0625\nv -0.101562 0.0268942 0.0625\nv -0.09375 0.026728 0.0625\nv -0.0859375 0.0265258 0.0625\nv -0.078125 0.0263797 0.0625\nv -0.0703125 0.0262259 0.0625\nv -0.0625 0.0261027 0.0625\nv -0.0546875 0.0259647 0.0625\nv -0.046875 0.0258721 0.0625\nv -0.0390625 0.0257644 0.0625\nv -0.03125 0.0256696 0.0625\nv -0.0234375 0.0255473 0.0625\nv -0.015625 0.0255151 0.0625\nv -0.0078125 0.0255144 0.0625\nv 0 0.0255246 0.0625\nv 0.0078125 0.0254362 0.0625\nv 0.015625 0.0255412 0.0625\nv 0.0234375 0.0256633 0.0625\nv 0.03125 0.0257324 0.0625\nv 0.0390625 0.0256981 0.0625\nv 0.046875 0.0256687 0.0625\nv 0.0546875 0.0256466 0.0625\nv 0.0625 0.025668 0.0625\nv 0.0703125 0.0256994 0.0625\nv 0.078125 0.025651 0.0625\nv 0.0859375 0.0256182 0.0625\nv 0.09375 0.0255524 0.0625\nv 0.101562 0.0254977 0.0625\nv 0.109375 0.0254661 0.0625\nv 0.117188 0.0254139 0.0625\nv 0.125 0.0253826 0.0625\nv 0.132812 0.0253682 0.0625\nv 0.140625 0.0253593 0.0625\nv 0.148438 0.0252986 0.0625\nv 0.15625 0.0251937 0.0625\nv 0.164062 0.024995 0.0625\nv 0.171875 0.0246997 0.0625\nv 0.179688 0.0245086 0.0625\nv 0.1875 0.0243634 0.0625\nv 0.195312 0.0243229 0.0625\nv 0.203125 0.0242616 0.0625\nv 0.210938 0.0241923 0.0625\nv 0.21875 0.0241057 0.0625\nv 0.226562 0.0239619 0.0625\nv 0.234375 0.0239906 0.0625\nv 0.242188 0.0240867 0.0625\nv 0.25 0.0242088 0.0625\nv 0.257812 0.0244669 0.0625\nv 0.265625 0.0247291 0.0625\nv 0.273438 0.0249727 0.0625\nv 0.28125 0.0250652 0.0625\nv 0.289062 0.0252586 0.0625\nv 0.296875 0.0253695 0.0625\nv 0.304688 0.0255282 0.0625\nv 0.3125 0.0257373 0.0625\nv 0.320312 0.0260227 0.0625\nv 0.328125 0.026269 0.0625\nv 0.335938 0.0263126 0.0625\nv 0.34375 0.0263685 0.0625\nv 0.351562 0.0264148 0.0625\nv 0.359375 0.0264334 0.0625\nv 0.367188 0.0264415 0.0625\nv 0.375 0.026463 0.0625\nv 0.382812 0.0264045 0.0625\nv 0.390625 0.0261265 0.0625\nv 0.398438 0.0256469 0.0625\nv 0.40625 0.025255 0.0625\nv 0.418831 0.0234375 0.0625\nv 0.414062 0.0244668 0.0625\nv 0.499617 0.0234375 0.0625\nv -0.29952 0.03125 0.0625\nv 0.497172 0.03125 0.0625\nv -0.298 0.0390625 0.0625\nv -0.296875 0.0419334 0.0625\nv 0.494736 0.0390625 0.0625\nv -0.294668 0.046875 0.0625\nv 0.492468 0.046875 0.0625\nv 0.492188 0.0477885 0.0625\nv -0.290687 0.0546875 0.0625\nv -0.289062 0.0578411 0.0625\nv 0.489824 0.0546875 0.0625\nv 0.484375 0.0585558 0.0625\nv -0.285706 0.0625 0.0625\nv -0.28125 0.0676288 0.0625\nv 0.445312 0.0701128 0.0625\nv 0.453125 0.0682522 0.0625\nv 0.460938 0.0669517 0.0625\nv 0.46875 0.0660868 0.0625\nv 0.476959 0.0625 0.0625\nv 0.476562 0.0627356 0.0625\nv -0.27725 0.0703125 0.0625\nv -0.28125 0.0703125 0.0698339\nv -0.273438 0.0719381 0.0625\nv -0.265625 0.0770159 0.0625\nv -0.242188 0.076837 0.0625\nv -0.234375 0.0748981 0.0625\nv -0.226562 0.0736742 0.0625\nv -0.21875 0.0728875 0.0625\nv -0.210938 0.0725896 0.0625\nv -0.203125 0.0732722 0.0625\nv -0.195312 0.0738631 0.0625\nv -0.1875 0.0744532 0.0625\nv -0.179688 0.0748409 0.0625\nv -0.171875 0.0751932 0.0625\nv -0.164062 0.0752936 0.0625\nv -0.15625 0.0751938 0.0625\nv -0.148438 0.0751654 0.0625\nv -0.140625 0.0750583 0.0625\nv -0.132812 0.0752069 0.0625\nv -0.125 0.0754098 0.0625\nv -0.117188 0.0755259 0.0625\nv -0.109375 0.0755534 0.0625\nv -0.101562 0.0754635 0.0625\nv -0.09375 0.0753519 0.0625\nv -0.0859375 0.0752172 0.0625\nv -0.078125 0.0749989 0.0625\nv -0.0703125 0.0747783 0.0625\nv -0.0625 0.074698 0.0625\nv -0.0546875 0.0745752 0.0625\nv -0.046875 0.0744173 0.0625\nv -0.0390625 0.0742431 0.0625\nv -0.03125 0.0740776 0.0625\nv -0.0234375 0.0738853 0.0625\nv -0.015625 0.0736722 0.0625\nv -0.0078125 0.0735011 0.0625\nv 0 0.0733104 0.0625\nv 0.0078125 0.0732101 0.0625\nv 0.015625 0.0732204 0.0625\nv 0.0234375 0.0732544 0.0625\nv 0.03125 0.0732872 0.0625\nv 0.0390625 0.0733303 0.0625\nv 0.046875 0.0733482 0.0625\nv 0.0546875 0.0733399 0.0625\nv 0.0625 0.0733299 0.0625\nv 0.0703125 0.0733376 0.0625\nv 0.078125 0.0732819 0.0625\nv 0.0859375 0.0733089 0.0625\nv 0.09375 0.073259 0.0625\nv 0.101562 0.073213 0.0625\nv 0.109375 0.0731932 0.0625\nv 0.117188 0.0731405 0.0625\nv 0.125 0.073089 0.0625\nv 0.132812 0.0730578 0.0625\nv 0.140625 0.0730739 0.0625\nv 0.148438 0.0731051 0.0625\nv 0.15625 0.0731471 0.0625\nv 0.164062 0.0732154 0.0625\nv 0.171875 0.0732937 0.0625\nv 0.179688 0.0733654 0.0625\nv 0.1875 0.0734016 0.0625\nv 0.195312 0.0733696 0.0625\nv 0.203125 0.0732559 0.0625\nv 0.210938 0.073149 0.0625\nv 0.21875 0.0730422 0.0625\nv 0.226562 0.0729209 0.0625\nv 0.234375 0.0728182 0.0625\nv 0.242188 0.0727005 0.0625\nv 0.25 0.072488 0.0625\nv 0.257812 0.0723995 0.0625\nv 0.265625 0.0725533 0.0625\nv 0.273438 0.0726432 0.0625\nv 0.28125 0.0727685 0.0625\nv 0.289062 0.0729124 0.0625\nv 0.296875 0.0729832 0.0625\nv 0.304688 0.0730498 0.0625\nv 0.3125 0.0731099 0.0625\nv 0.320312 0.0731427 0.0625\nv 0.328125 0.0731968 0.0625\nv 0.335938 0.0732759 0.0625\nv 0.34375 0.073345 0.0625\nv 0.351562 0.0733531 0.0625\nv 0.359375 0.0733099 0.0625\nv 0.367188 0.0732605 0.0625\nv 0.375 0.0729769 0.0625\nv 0.382812 0.0725707 0.0625\nv 0.390625 0.0721919 0.0625\nv 0.398438 0.0720035 0.0625\nv 0.40625 0.0718688 0.0625\nv 0.414062 0.0716903 0.0625\nv 0.421875 0.0714857 0.0625\nv 0.429688 0.0713572 0.0625\nv 0.443421 0.0703125 0.0625\nv 0.4375 0.0708989 0.0625\nv -0.263759 0.078125 0.0625\nv -0.265625 0.078125 0.0661891\nv -0.257812 0.0802919 0.0625\nv -0.245886 0.078125 0.0625\nv -0.25 0.0798599 0.0625\nv -0.265625 0.163453 0.0625\nv -0.28125 0.169727 0.0625\nv -0.26733 0.164062 0.0625\nv -0.273438 0.166025 0.0625\nv -0.264224 0.164062 0.0625\nv -0.265625 0.164062 0.0677198\nv -0.257812 0.166897 0.0625\nv -0.284658 0.171875 0.0625\nv -0.289062 0.175729 0.0625\nv -0.254987 0.171875 0.0625\nv -0.292527 0.179688 0.0625\nv -0.252354 0.179688 0.0625\nv -0.25 0.18565 0.0625\nv -0.295747 0.1875 0.0625\nv -0.296875 0.190997 0.0625\nv -0.2494 0.1875 0.0625\nv -0.25 0.1875 0.0671674\nv -0.297801 0.195312 0.0625\nv -0.24687 0.195312 0.0625\nv -0.2992 0.203125 0.0625\nv -0.245295 0.203125 0.0625\nv -0.299976 0.210938 0.0625\nv -0.244441 0.210938 0.0625\nv -0.300336 0.21875 0.0625\nv -0.243504 0.21875 0.0625\nv -0.300456 0.226562 0.0625\nv -0.243385 0.226562 0.0625\nv -0.300713 0.234375 0.0625\nv -0.242714 0.234375 0.0625\nv -0.242188 0.241352 0.0625\nv -0.300934 0.242188 0.0625\nv -0.242119 0.242188 0.0625\nv -0.242188 0.244232 0.0625\nv -0.242188 0.242188 0.0647902\nv -0.301074 0.25 0.0625\nv -0.242379 0.25 0.0625\nv -0.3011 0.257812 0.0625\nv -0.242804 0.257812 0.0625\nv -0.300999 0.265625 0.0625\nv -0.243175 0.265625 0.0625\nv -0.300457 0.273438 0.0625\nv -0.243336 0.273438 0.0625\nv -0.299515 0.28125 0.0625\nv -0.243728 0.28125 0.0625\nv -0.298398 0.289062 0.0625\nv -0.244825 0.289062 0.0625\nv -0.29714 0.296875 0.0625\nv -0.296875 0.298907 0.0625\nv -0.246035 0.296875 0.0625\nv -0.296104 0.304688 0.0625\nv -0.247846 0.304688 0.0625\nv -0.295372 0.3125 0.0625\nv -0.249683 0.3125 0.0625\nv -0.25 0.31454 0.0625\nv -0.294724 0.320312 0.0625\nv -0.250978 0.320312 0.0625\nv -0.294357 0.328125 0.0625\nv -0.252234 0.328125 0.0625\nv -0.294439 0.335938 0.0625\nv -0.253486 0.335938 0.0625\nv -0.294721 0.34375 0.0625\nv -0.254196 0.34375 0.0625\nv -0.295206 0.351562 0.0625\nv -0.254649 0.351562 0.0625\nv -0.295767 0.359375 0.0625\nv -0.255081 0.359375 0.0625\nv -0.296287 0.367188 0.0625\nv -0.296875 0.367188 0.0684252\nv -0.255144 0.367188 0.0625\nv -0.296614 0.375 0.0625\nv -0.296875 0.381235 0.0625\nv -0.296875 0.375 0.0652869\nv -0.255302 0.375 0.0625\nv -0.296948 0.382812 0.0625\nv -0.25583 0.382812 0.0625\nv -0.297359 0.390625 0.0625\nv -0.256626 0.390625 0.0625\nv -0.297759 0.398438 0.0625\nv -0.257392 0.398438 0.0625\nv -0.257812 0.402174 0.0625\nv -0.257812 0.398438 0.0687063\nv -0.298185 0.40625 0.0625\nv -0.258269 0.40625 0.0625\nv -0.298595 0.414062 0.0625\nv -0.259098 0.414062 0.0625\nv -0.298917 0.421875 0.0625\nv -0.260012 0.421875 0.0625\nv -0.299123 0.429688 0.0625\nv -0.260772 0.429688 0.0625\nv -0.29909 0.4375 0.0625\nv -0.261602 0.4375 0.0625\nv -0.299016 0.445312 0.0625\nv -0.262423 0.445312 0.0625\nv -0.298955 0.453125 0.0625\nv -0.263309 0.453125 0.0625\nv -0.298876 0.460938 0.0625\nv -0.26425 0.460938 0.0625\nv -0.265625 0.460938 0.0680425\nv -0.298739 0.46875 0.0625\nv -0.265233 0.46875 0.0625\nv -0.265625 0.472233 0.0625\nv -0.265625 0.46875 0.0640324\nv -0.298673 0.476562 0.0625\nv -0.266183 0.476562 0.0625\nv -0.298651 0.484375 0.0625\nv -0.266887 0.484375 0.0625\nv -0.298743 0.492188 0.0625\nv -0.267615 0.492188 0.0625\nv -0.299382 0.5 0.0625\nv -0.268096 0.5 0.0625\nv -0.300005 0.507812 0.0625\nv -0.268424 0.507812 0.0625\nv -0.30051 0.515625 0.0625\nv -0.268716 0.515625 0.0625\nv -0.301185 0.523438 0.0625\nv -0.269049 0.523438 0.0625\nv -0.30211 0.53125 0.0625\nv -0.269495 0.53125 0.0625\nv -0.303205 0.539062 0.0625\nv -0.269574 0.539062 0.0625\nv -0.304248 0.546875 0.0625\nv -0.304688 0.550316 0.0625\nv -0.269355 0.546875 0.0625\nv -0.305175 0.554688 0.0625\nv -0.268857 0.554688 0.0625\nv -0.305978 0.5625 0.0625\nv -0.268493 0.5625 0.0625\nv -0.306497 0.570312 0.0625\nv -0.268257 0.570312 0.0625\nv -0.30695 0.578125 0.0625\nv -0.268347 0.578125 0.0625\nv -0.307126 0.585938 0.0625\nv -0.268489 0.585938 0.0625\nv -0.307239 0.59375 0.0625\nv -0.268647 0.59375 0.0625\nv -0.307333 0.601562 0.0625\nv -0.269307 0.601562 0.0625\nv -0.307565 0.609375 0.0625\nv -0.270277 0.609375 0.0625\nv -0.307757 0.617188 0.0625\nv -0.271172 0.617188 0.0625\nv -0.309347 0.625 0.0625\nv -0.271799 0.625 0.0625\nv -0.31068 0.632812 0.0625\nv -0.272286 0.632812 0.0625\nv -0.273438 0.640376 0.0625\nv -0.311089 0.640625 0.0625\nv -0.273477 0.640625 0.0625\nv -0.273438 0.640625 0.06315\nv -0.312008 0.648438 0.0625\nv -0.3125 0.652533 0.0625\nv -0.3125 0.648438 0.0653796\nv -0.274626 0.648438 0.0625\nv -0.312937 0.65625 0.0625\nv -0.27518 0.65625 0.0625\nv -0.31408 0.664062 0.0625\nv -0.275647 0.664062 0.0625\nv -0.314657 0.671875 0.0625\nv -0.275958 0.671875 0.0625\nv -0.315224 0.679688 0.0625\nv -0.276549 0.679688 0.0625\nv -0.315927 0.6875 0.0625\nv -0.277319 0.6875 0.0625\nv -0.316713 0.695312 0.0625\nv -0.277834 0.695312 0.0625\nv -0.318013 0.703125 0.0625\nv -0.277981 0.703125 0.0625\nv -0.318935 0.710938 0.0625\nv -0.278245 0.710938 0.0625\nv -0.319969 0.71875 0.0625\nv -0.320312 0.72051 0.0625\nv -0.320312 0.71875 0.0687198\nv -0.278902 0.71875 0.0625\nv -0.321432 0.726562 0.0625\nv -0.279905 0.726562 0.0625\nv -0.322961 0.734375 0.0625\nv -0.280357 0.734375 0.0625\nv -0.324503 0.742188 0.0625\nv -0.281121 0.742188 0.0625\nv -0.28125 0.74319 0.0625\nv -0.32581 0.75 0.0625\nv -0.282216 0.75 0.0625\nv -0.326577 0.757812 0.0625\nv -0.283384 0.757812 0.0625\nv -0.327844 0.765625 0.0625\nv -0.328125 0.767111 0.0625\nv -0.284831 0.765625 0.0625\nv -0.329264 0.773438 0.0625\nv -0.286444 0.773438 0.0625\nv -0.330488 0.78125 0.0625\nv -0.288353 0.78125 0.0625\nv -0.289062 0.783986 0.0625\nv -0.331649 0.789062 0.0625\nv -0.291267 0.789062 0.0625\nv -0.332715 0.796875 0.0625\nv -0.294379 0.796875 0.0625\nv -0.296875 0.802531 0.0625\nv -0.333113 0.804688 0.0625\nv -0.298047 0.804688 0.0625\nv -0.304688 0.812334 0.0625\nv -0.331967 0.8125 0.0625\nv -0.304823 0.8125 0.0625\nv -0.329003 0.820312 0.0625\nv -0.328125 0.821092 0.0625\nv -0.328125 0.820312 0.0671469\nv -0.320312 0.823631 0.0625\nv -0.311779 0.820312 0.0625\nv -0.3125 0.820781 0.0625\nv -0.3125 0.820312 0.0656967\nv 0.0234375 -0.539557 0.0703125\nv 0.03125 -0.540498 0.0703125\nv 0.0390625 -0.541012 0.0703125\nv 0.046875 -0.541222 0.0703125\nv 0.0546875 -0.540799 0.0703125\nv 0.0625 -0.5398 0.0703125\nv 0 -0.531355 0.0703125\nv 0.0078125 -0.534533 0.0703125\nv 0.0206964 -0.539062 0.0703125\nv 0.015625 -0.537514 0.0703125\nv 0.0665607 -0.539062 0.0703125\nv 0.0703125 -0.538166 0.0703125\nv 0.078125 -0.536072 0.0703125\nv 0.0859375 -0.533573 0.0703125\nv -0.0002028 -0.53125 0.0703125\nv -0.0078125 -0.524903 0.0703125\nv 0.0914289 -0.53125 0.0703125\nv 0.09375 -0.530109 0.0703125\nv 0.101562 -0.525754 0.0703125\nv -0.00925387 -0.523438 0.0703125\nv 0.105244 -0.523438 0.0703125\nv 0.109375 -0.519696 0.0703125\nv -0.0101307 -0.515625 0.0703125\nv -0.0078125 -0.510683 0.0703125\nv 0.113758 -0.515625 0.0703125\nv 0.117188 -0.510429 0.0703125\nv -0.00615821 -0.507812 0.0703125\nv 0 -0.504809 0.0703125\nv 0.0078125 -0.501355 0.0703125\nv 0.119061 -0.507812 0.0703125\nv 0.010347 -0.5 0.0703125\nv 0.015625 -0.497265 0.0703125\nv 0.0234375 -0.493252 0.0703125\nv 0.122014 -0.5 0.0703125\nv 0.0252502 -0.492188 0.0703125\nv 0.03125 -0.489489 0.0703125\nv 0.0390625 -0.486625 0.0703125\nv 0.123894 -0.492188 0.0703125\nv 0.0461872 -0.484375 0.0703125\nv 0.046875 -0.484194 0.0703125\nv 0.046875 -0.484375 0.0743759\nv 0.0546875 -0.481942 0.0703125\nv 0.0625 -0.479672 0.0703125\nv 0.0703125 -0.477426 0.0703125\nv 0.109375 -0.477918 0.0703125\nv 0.117803 -0.484375 0.0703125\nv 0.117188 -0.483838 0.0703125\nv 0.117188 -0.484375 0.0748966\nv 0.0738902 -0.476562 0.0703125\nv 0.078125 -0.475633 0.0703125\nv 0.0859375 -0.473879 0.0703125\nv 0.09375 -0.472653 0.0703125\nv 0.107319 -0.476562 0.0703125\nv 0.101562 -0.473137 0.0703125\nv -0.289062 -0.0640175 0.0703125\nv -0.28125 -0.0658335 0.0703125\nv -0.273438 -0.0638907 0.0703125\nv 0.453125 -0.0672308 0.0703125\nv 0.460938 -0.0684953 0.0703125\nv 0.46875 -0.0665171 0.0703125\nv 0.476562 -0.0664181 0.0703125\nv 0.484375 -0.0646779 0.0703125\nv -0.290659 -0.0625 0.0703125\nv -0.272021 -0.0625 0.0703125\nv 0.447822 -0.0625 0.0703125\nv 0.488628 -0.0625 0.0703125\nv -0.294446 -0.0546875 0.0703125\nv -0.296875 -0.0475939 0.0703125\nv -0.267503 -0.0546875 0.0703125\nv -0.265625 -0.0499953 0.0703125\nv 0.445785 -0.0546875 0.0703125\nv 0.445312 -0.0527393 0.0703125\nv 0.492169 -0.0546875 0.0703125\nv 0.492188 -0.0546119 0.0703125\nv 0.492188 -0.0546875 0.0714014\nv -0.297058 -0.046875 0.0703125\nv -0.264559 -0.046875 0.0703125\nv 0.444159 -0.046875 0.0703125\nv 0.493777 -0.046875 0.0703125\nv -0.298484 -0.0390625 0.0703125\nv -0.263031 -0.0390625 0.0703125\nv 0.445007 -0.0390625 0.0703125\nv 0.495595 -0.0390625 0.0703125\nv -0.29891 -0.03125 0.0703125\nv -0.261852 -0.03125 0.0703125\nv 0.444962 -0.03125 0.0703125\nv 0.497799 -0.03125 0.0703125\nv 0.5 -0.0252291 0.0703125\nv -0.299126 -0.0234375 0.0703125\nv -0.261216 -0.0234375 0.0703125\nv 0.444743 -0.0234375 0.0703125\nv 0.500529 -0.0234375 0.0703125\nv -0.300571 -0.015625 0.0703125\nv -0.259935 -0.015625 0.0703125\nv 0.444285 -0.015625 0.0703125\nv 0.501208 -0.015625 0.0703125\nv -0.302069 -0.0078125 0.0703125\nv -0.25954 -0.0078125 0.0703125\nv 0.442174 -0.0078125 0.0703125\nv 0.501046 -0.0078125 0.0703125\nv -0.303442 0 0.0703125\nv -0.259798 0 0.0703125\nv -0.257812 0.00734952 0.0703125\nv 0.440739 0 0.0703125\nv 0.500686 0 0.0703125\nv -0.303452 0.0078125 0.0703125\nv -0.257654 0.0078125 0.0703125\nv -0.257812 0.0078125 0.0756045\nv 0.440511 0.0078125 0.0703125\nv 0.500338 0.0078125 0.0703125\nv -0.302124 0.015625 0.0703125\nv -0.250607 0.015625 0.0703125\nv -0.25 0.0160587 0.0703125\nv -0.242188 0.0174296 0.0703125\nv -0.234375 0.0191489 0.0703125\nv -0.226562 0.0220004 0.0703125\nv 0.421875 0.0228391 0.0703125\nv 0.429688 0.0211827 0.0703125\nv 0.43876 0.015625 0.0703125\nv 0.4375 0.0168161 0.0703125\nv 0.500163 0.015625 0.0703125\nv 0.5 0.0189405 0.0703125\nv -0.300924 0.0234375 0.0703125\nv -0.221573 0.0234375 0.0703125\nv -0.21875 0.0241342 0.0703125\nv -0.210938 0.0252612 0.0703125\nv -0.203125 0.0255815 0.0703125\nv -0.195312 0.0257798 0.0703125\nv -0.1875 0.0260625 0.0703125\nv -0.179688 0.0262582 0.0703125\nv -0.171875 0.026618 0.0703125\nv -0.164062 0.0266755 0.0703125\nv -0.15625 0.0267537 0.0703125\nv -0.148438 0.0268689 0.0703125\nv -0.140625 0.0269052 0.0703125\nv -0.132812 0.0269853 0.0703125\nv -0.125 0.0273075 0.0703125\nv -0.117188 0.0273207 0.0703125\nv -0.109375 0.0271332 0.0703125\nv -0.101562 0.0269518 0.0703125\nv -0.09375 0.0267313 0.0703125\nv -0.0859375 0.0265335 0.0703125\nv -0.078125 0.0263966 0.0703125\nv -0.0703125 0.0263025 0.0703125\nv -0.0625 0.0261961 0.0703125\nv -0.0546875 0.0260522 0.0703125\nv -0.046875 0.025929 0.0703125\nv -0.0390625 0.02579 0.0703125\nv -0.03125 0.0256725 0.0703125\nv -0.0234375 0.0255956 0.0703125\nv -0.015625 0.0255637 0.0703125\nv -0.0078125 0.0256277 0.0703125\nv 0 0.0256881 0.0703125\nv 0.0078125 0.0256107 0.0703125\nv 0.015625 0.0257189 0.0703125\nv 0.0234375 0.0258179 0.0703125\nv 0.03125 0.0258965 0.0703125\nv 0.0390625 0.0258578 0.0703125\nv 0.046875 0.0258012 0.0703125\nv 0.0546875 0.0257875 0.0703125\nv 0.0625 0.0257974 0.0703125\nv 0.0703125 0.025827 0.0703125\nv 0.078125 0.0257913 0.0703125\nv 0.0859375 0.0256855 0.0703125\nv 0.09375 0.0255935 0.0703125\nv 0.101562 0.0255159 0.0703125\nv 0.109375 0.0254626 0.0703125\nv 0.117188 0.0253951 0.0703125\nv 0.125 0.0253151 0.0703125\nv 0.132812 0.0252728 0.0703125\nv 0.140625 0.0252442 0.0703125\nv 0.148438 0.0252045 0.0703125\nv 0.15625 0.0251046 0.0703125\nv 0.164062 0.0249297 0.0703125\nv 0.171875 0.0247146 0.0703125\nv 0.179688 0.0244512 0.0703125\nv 0.1875 0.0243269 0.0703125\nv 0.195312 0.024291 0.0703125\nv 0.203125 0.0242435 0.0703125\nv 0.210938 0.0241991 0.0703125\nv 0.21875 0.024116 0.0703125\nv 0.226562 0.0239688 0.0703125\nv 0.234375 0.0240348 0.0703125\nv 0.242188 0.0241418 0.0703125\nv 0.25 0.0242654 0.0703125\nv 0.257812 0.0244954 0.0703125\nv 0.265625 0.0247244 0.0703125\nv 0.273438 0.0249528 0.0703125\nv 0.28125 0.0251357 0.0703125\nv 0.289062 0.0251799 0.0703125\nv 0.296875 0.0253639 0.0703125\nv 0.304688 0.0255055 0.0703125\nv 0.3125 0.0257095 0.0703125\nv 0.320312 0.025996 0.0703125\nv 0.328125 0.0262522 0.0703125\nv 0.335938 0.0263118 0.0703125\nv 0.34375 0.0263774 0.0703125\nv 0.351562 0.0264293 0.0703125\nv 0.359375 0.026469 0.0703125\nv 0.367188 0.0264765 0.0703125\nv 0.375 0.0265152 0.0703125\nv 0.382812 0.0264838 0.0703125\nv 0.390625 0.0262173 0.0703125\nv 0.398438 0.0257786 0.0703125\nv 0.40625 0.0253962 0.0703125\nv 0.419791 0.0234375 0.0703125\nv 0.414062 0.0246633 0.0703125\nv 0.499752 0.0234375 0.0703125\nv 0.5 0.0234375 0.0754168\nv -0.29967 0.03125 0.0703125\nv 0.497279 0.03125 0.0703125\nv -0.298333 0.0390625 0.0703125\nv -0.296875 0.0429866 0.0703125\nv 0.494855 0.0390625 0.0703125\nv -0.2953 0.046875 0.0703125\nv 0.492578 0.046875 0.0703125\nv 0.492188 0.0482083 0.0703125\nv -0.291845 0.0546875 0.0703125\nv -0.289062 0.0607809 0.0703125\nv 0.489981 0.0546875 0.0703125\nv 0.484375 0.0585261 0.0703125\nv -0.287949 0.0625 0.0703125\nv -0.289062 0.0625 0.0740937\nv 0.445312 0.0700904 0.0703125\nv 0.453125 0.0681456 0.0703125\nv 0.460938 0.0667904 0.0703125\nv 0.46875 0.0659405 0.0703125\nv 0.476927 0.0625 0.0703125\nv 0.476562 0.0627196 0.0703125\nv -0.281392 0.0703125 0.0703125\nv -0.28125 0.0704293 0.0703125\nv -0.273438 0.0733643 0.0703125\nv -0.242188 0.0777593 0.0703125\nv -0.234375 0.0755854 0.0703125\nv -0.226562 0.0744304 0.0703125\nv -0.21875 0.073554 0.0703125\nv -0.210938 0.0729719 0.0703125\nv -0.203125 0.0735047 0.0703125\nv -0.195312 0.0740602 0.0703125\nv -0.1875 0.0746472 0.0703125\nv -0.179688 0.074995 0.0703125\nv -0.171875 0.0753071 0.0703125\nv -0.164062 0.0753604 0.0703125\nv -0.15625 0.0752821 0.0703125\nv -0.148438 0.0752167 0.0703125\nv -0.140625 0.0750764 0.0703125\nv -0.132812 0.0751584 0.0703125\nv -0.125 0.0753499 0.0703125\nv -0.117188 0.0754872 0.0703125\nv -0.109375 0.0754748 0.0703125\nv -0.101562 0.075367 0.0703125\nv -0.09375 0.0752347 0.0703125\nv -0.0859375 0.0751169 0.0703125\nv -0.078125 0.0749599 0.0703125\nv -0.0703125 0.0748171 0.0703125\nv -0.0625 0.0747101 0.0703125\nv -0.0546875 0.07458 0.0703125\nv -0.046875 0.0744294 0.0703125\nv -0.0390625 0.0742328 0.0703125\nv -0.03125 0.0740731 0.0703125\nv -0.0234375 0.0739091 0.0703125\nv -0.015625 0.0736841 0.0703125\nv -0.0078125 0.0734675 0.0703125\nv 0 0.0732848 0.0703125\nv 0.0078125 0.07323 0.0703125\nv 0.015625 0.0732464 0.0703125\nv 0.0234375 0.0732751 0.0703125\nv 0.03125 0.0733055 0.0703125\nv 0.0390625 0.0733443 0.0703125\nv 0.046875 0.0733967 0.0703125\nv 0.0546875 0.0734152 0.0703125\nv 0.0625 0.0733906 0.0703125\nv 0.0703125 0.0733875 0.0703125\nv 0.078125 0.0733062 0.0703125\nv 0.0859375 0.0732813 0.0703125\nv 0.09375 0.0732095 0.0703125\nv 0.101562 0.0731805 0.0703125\nv 0.109375 0.0731622 0.0703125\nv 0.117188 0.0731586 0.0703125\nv 0.125 0.0731381 0.0703125\nv 0.132812 0.0730731 0.0703125\nv 0.140625 0.0730234 0.0703125\nv 0.148438 0.0730327 0.0703125\nv 0.15625 0.0730594 0.0703125\nv 0.164062 0.0731028 0.0703125\nv 0.171875 0.0731852 0.0703125\nv 0.179688 0.0732545 0.0703125\nv 0.1875 0.0733379 0.0703125\nv 0.195312 0.0733977 0.0703125\nv 0.203125 0.0733246 0.0703125\nv 0.210938 0.0732073 0.0703125\nv 0.21875 0.0731265 0.0703125\nv 0.226562 0.0730368 0.0703125\nv 0.234375 0.0729469 0.0703125\nv 0.242188 0.0728155 0.0703125\nv 0.25 0.0726321 0.0703125\nv 0.257812 0.0725355 0.0703125\nv 0.265625 0.0726137 0.0703125\nv 0.273438 0.0727428 0.0703125\nv 0.28125 0.0728737 0.0703125\nv 0.289062 0.0730243 0.0703125\nv 0.296875 0.0731092 0.0703125\nv 0.304688 0.0731381 0.0703125\nv 0.3125 0.0731776 0.0703125\nv 0.320312 0.0732439 0.0703125\nv 0.328125 0.0732839 0.0703125\nv 0.335938 0.073335 0.0703125\nv 0.34375 0.0733771 0.0703125\nv 0.351562 0.0733498 0.0703125\nv 0.359375 0.0733302 0.0703125\nv 0.367188 0.0733128 0.0703125\nv 0.375 0.0730413 0.0703125\nv 0.382812 0.0726301 0.0703125\nv 0.390625 0.0722629 0.0703125\nv 0.398438 0.0720826 0.0703125\nv 0.40625 0.0719398 0.0703125\nv 0.414062 0.0717646 0.0703125\nv 0.421875 0.0715595 0.0703125\nv 0.429688 0.0713981 0.0703125\nv 0.443294 0.0703125 0.0703125\nv 0.4375 0.0709137 0.0703125\nv -0.266561 0.078125 0.0703125\nv -0.265625 0.0787265 0.0703125\nv -0.257812 0.0811038 0.0703125\nv -0.243198 0.078125 0.0703125\nv -0.25 0.0806998 0.0703125\nv -0.242188 0.078125 0.0750289\nv -0.28125 0.169885 0.0703125\nv -0.273438 0.166343 0.0703125\nv -0.265625 0.164341 0.0703125\nv -0.257812 0.16809 0.0703125\nv -0.284278 0.171875 0.0703125\nv -0.289062 0.175968 0.0703125\nv -0.25564 0.171875 0.0703125\nv -0.292307 0.179688 0.0703125\nv -0.25298 0.179688 0.0703125\nv -0.295493 0.1875 0.0703125\nv -0.296875 0.190871 0.0703125\nv -0.250403 0.1875 0.0703125\nv -0.25 0.188596 0.0703125\nv -0.298131 0.195312 0.0703125\nv -0.247477 0.195312 0.0703125\nv -0.299472 0.203125 0.0703125\nv -0.245779 0.203125 0.0703125\nv -0.300239 0.210938 0.0703125\nv -0.24464 0.210938 0.0703125\nv -0.300542 0.21875 0.0703125\nv -0.243828 0.21875 0.0703125\nv -0.300637 0.226562 0.0703125\nv -0.243457 0.226562 0.0703125\nv -0.300856 0.234375 0.0703125\nv -0.242709 0.234375 0.0703125\nv -0.301149 0.242188 0.0703125\nv -0.242349 0.242188 0.0703125\nv -0.301371 0.25 0.0703125\nv -0.242572 0.25 0.0703125\nv -0.301598 0.257812 0.0703125\nv -0.242855 0.257812 0.0703125\nv -0.301556 0.265625 0.0703125\nv -0.243154 0.265625 0.0703125\nv -0.301058 0.273438 0.0703125\nv -0.243267 0.273438 0.0703125\nv -0.300252 0.28125 0.0703125\nv -0.243732 0.28125 0.0703125\nv -0.299035 0.289062 0.0703125\nv -0.244885 0.289062 0.0703125\nv -0.297668 0.296875 0.0703125\nv -0.296875 0.302783 0.0703125\nv -0.246042 0.296875 0.0703125\nv -0.296606 0.304688 0.0703125\nv -0.247966 0.304688 0.0703125\nv -0.295999 0.3125 0.0703125\nv -0.249759 0.3125 0.0703125\nv -0.25 0.313954 0.0703125\nv -0.295366 0.320312 0.0703125\nv -0.251128 0.320312 0.0703125\nv -0.295189 0.328125 0.0703125\nv -0.252235 0.328125 0.0703125\nv -0.295342 0.335938 0.0703125\nv -0.2534 0.335938 0.0703125\nv -0.295599 0.34375 0.0703125\nv -0.254147 0.34375 0.0703125\nv -0.296118 0.351562 0.0703125\nv -0.254658 0.351562 0.0703125\nv -0.296626 0.359375 0.0703125\nv -0.296875 0.36372 0.0703125\nv -0.296875 0.359375 0.0780925\nv -0.255225 0.359375 0.0703125\nv -0.297072 0.367188 0.0703125\nv -0.255499 0.367188 0.0703125\nv -0.297381 0.375 0.0703125\nv -0.255814 0.375 0.0703125\nv -0.297646 0.382812 0.0703125\nv -0.256433 0.382812 0.0703125\nv -0.297918 0.390625 0.0703125\nv -0.257201 0.390625 0.0703125\nv -0.257812 0.397289 0.0703125\nv -0.257812 0.390625 0.075261\nv -0.298046 0.398438 0.0703125\nv -0.257922 0.398438 0.0703125\nv -0.29831 0.40625 0.0703125\nv -0.259274 0.40625 0.0703125\nv -0.298744 0.414062 0.0703125\nv -0.260509 0.414062 0.0703125\nv -0.299063 0.421875 0.0703125\nv -0.261451 0.421875 0.0703125\nv -0.299265 0.429688 0.0703125\nv -0.262279 0.429688 0.0703125\nv -0.299186 0.4375 0.0703125\nv -0.263065 0.4375 0.0703125\nv -0.299044 0.445312 0.0703125\nv -0.263958 0.445312 0.0703125\nv -0.265625 0.445312 0.0758673\nv -0.298892 0.453125 0.0703125\nv -0.264878 0.453125 0.0703125\nv -0.265625 0.457592 0.0703125\nv -0.265625 0.453125 0.072681\nv -0.298647 0.460938 0.0703125\nv -0.26621 0.460938 0.0703125\nv -0.298441 0.46875 0.0703125\nv -0.267396 0.46875 0.0703125\nv -0.298366 0.476562 0.0703125\nv -0.268546 0.476562 0.0703125\nv -0.298361 0.484375 0.0703125\nv -0.270019 0.484375 0.0703125\nv -0.273438 0.484375 0.0752799\nv -0.298407 0.492188 0.0703125\nv -0.271125 0.492188 0.0703125\nv -0.273438 0.492188 0.0737629\nv -0.29899 0.5 0.0703125\nv -0.2714 0.5 0.0703125\nv -0.273438 0.5 0.0739734\nv -0.299489 0.507812 0.0703125\nv -0.271405 0.507812 0.0703125\nv -0.273438 0.507812 0.0740763\nv -0.299959 0.515625 0.0703125\nv -0.271331 0.515625 0.0703125\nv -0.273438 0.515625 0.0742515\nv -0.300599 0.523438 0.0703125\nv -0.271231 0.523438 0.0703125\nv -0.273438 0.523438 0.0751948\nv -0.301522 0.53125 0.0703125\nv -0.271267 0.53125 0.0703125\nv -0.273438 0.53125 0.0762665\nv -0.302814 0.539062 0.0703125\nv -0.270715 0.539062 0.0703125\nv -0.304032 0.546875 0.0703125\nv -0.304688 0.551165 0.0703125\nv -0.270064 0.546875 0.0703125\nv -0.305136 0.554688 0.0703125\nv -0.26934 0.554688 0.0703125\nv -0.306053 0.5625 0.0703125\nv -0.268871 0.5625 0.0703125\nv -0.306696 0.570312 0.0703125\nv -0.268561 0.570312 0.0703125\nv -0.307199 0.578125 0.0703125\nv -0.268603 0.578125 0.0703125\nv -0.307534 0.585938 0.0703125\nv -0.268697 0.585938 0.0703125\nv -0.307639 0.59375 0.0703125\nv -0.268894 0.59375 0.0703125\nv -0.307785 0.601562 0.0703125\nv -0.26924 0.601562 0.0703125\nv -0.308007 0.609375 0.0703125\nv -0.269831 0.609375 0.0703125\nv -0.308257 0.617188 0.0703125\nv -0.270602 0.617188 0.0703125\nv -0.309915 0.625 0.0703125\nv -0.271188 0.625 0.0703125\nv -0.311549 0.632812 0.0703125\nv -0.271784 0.632812 0.0703125\nv -0.312478 0.640625 0.0703125\nv -0.3125 0.640812 0.0703125\nv -0.3125 0.640625 0.0704986\nv -0.273025 0.640625 0.0703125\nv -0.273438 0.643443 0.0703125\nv -0.313429 0.648438 0.0703125\nv -0.274174 0.648438 0.0703125\nv -0.314337 0.65625 0.0703125\nv -0.274762 0.65625 0.0703125\nv -0.315434 0.664062 0.0703125\nv -0.275158 0.664062 0.0703125\nv -0.316044 0.671875 0.0703125\nv -0.275475 0.671875 0.0703125\nv -0.316684 0.679688 0.0703125\nv -0.276025 0.679688 0.0703125\nv -0.317323 0.6875 0.0703125\nv -0.276662 0.6875 0.0703125\nv -0.317936 0.695312 0.0703125\nv -0.276987 0.695312 0.0703125\nv -0.318752 0.703125 0.0703125\nv -0.277171 0.703125 0.0703125\nv -0.319487 0.710938 0.0703125\nv -0.320312 0.718003 0.0703125\nv -0.277595 0.710938 0.0703125\nv -0.320401 0.71875 0.0703125\nv -0.27837 0.71875 0.0703125\nv -0.321808 0.726562 0.0703125\nv -0.279511 0.726562 0.0703125\nv -0.323222 0.734375 0.0703125\nv -0.280127 0.734375 0.0703125\nv -0.32475 0.742188 0.0703125\nv -0.280971 0.742188 0.0703125\nv -0.28125 0.744085 0.0703125\nv -0.325924 0.75 0.0703125\nv -0.282209 0.75 0.0703125\nv -0.326619 0.757812 0.0703125\nv -0.283524 0.757812 0.0703125\nv -0.327761 0.765625 0.0703125\nv -0.328125 0.767613 0.0703125\nv -0.284998 0.765625 0.0703125\nv -0.329141 0.773438 0.0703125\nv -0.286716 0.773438 0.0703125\nv -0.330339 0.78125 0.0703125\nv -0.288614 0.78125 0.0703125\nv -0.289062 0.782886 0.0703125\nv -0.331458 0.789062 0.0703125\nv -0.291883 0.789062 0.0703125\nv -0.332408 0.796875 0.0703125\nv -0.295126 0.796875 0.0703125\nv -0.296875 0.800836 0.0703125\nv -0.332623 0.804688 0.0703125\nv -0.298997 0.804688 0.0703125\nv -0.304688 0.810747 0.0703125\nv -0.331283 0.8125 0.0703125\nv -0.328125 0.819354 0.0703125\nv -0.30621 0.8125 0.0703125\nv -0.3125 0.81926 0.0703125\nv -0.326825 0.820312 0.0703125\nv -0.314411 0.820312 0.0703125\nv -0.320312 0.822339 0.0703125\nv -0.320312 0.820312 0.0762511\nv 0.0234375 -0.539792 0.078125\nv 0.03125 -0.540709 0.078125\nv 0.0390625 -0.541137 0.078125\nv 0.046875 -0.541293 0.078125\nv 0.0546875 -0.540959 0.078125\nv 0.0625 -0.540186 0.078125\nv 0 -0.531634 0.078125\nv 0.0078125 -0.53507 0.078125\nv 0.0192728 -0.539062 0.078125\nv 0.015625 -0.538025 0.078125\nv 0.0686356 -0.539062 0.078125\nv 0.0703125 -0.538666 0.078125\nv 0.0703125 -0.539062 0.0813591\nv 0.078125 -0.536765 0.078125\nv 0.0859375 -0.533786 0.078125\nv -0.000738041 -0.53125 0.078125\nv -0.0078125 -0.525193 0.078125\nv 0.0922863 -0.53125 0.078125\nv 0.09375 -0.530615 0.078125\nv 0.101562 -0.52626 0.078125\nv -0.00942473 -0.523438 0.078125\nv 0.105965 -0.523438 0.078125\nv 0.109375 -0.520019 0.078125\nv -0.0104944 -0.515625 0.078125\nv -0.0078125 -0.50983 0.078125\nv 0.1135 -0.515625 0.078125\nv 0.117188 -0.510633 0.078125\nv -0.00660201 -0.507812 0.078125\nv 0 -0.504718 0.078125\nv 0.0078125 -0.501322 0.078125\nv 0.119075 -0.507812 0.078125\nv 0.0103841 -0.5 0.078125\nv 0.015625 -0.497261 0.078125\nv 0.0234375 -0.492713 0.078125\nv 0.122679 -0.5 0.078125\nv 0.0242707 -0.492188 0.078125\nv 0.0234375 -0.492188 0.0819475\nv 0.03125 -0.489188 0.078125\nv 0.0390625 -0.486795 0.078125\nv 0.046875 -0.484559 0.078125\nv 0.123799 -0.492188 0.078125\nv 0.117188 -0.484804 0.078125\nv 0.0475303 -0.484375 0.078125\nv 0.0546875 -0.482438 0.078125\nv 0.0625 -0.480125 0.078125\nv 0.0703125 -0.477828 0.078125\nv 0.116717 -0.484375 0.078125\nv 0.109375 -0.478661 0.078125\nv 0.0754996 -0.476562 0.078125\nv 0.078125 -0.47598 0.078125\nv 0.0859375 -0.4744 0.078125\nv 0.09375 -0.472925 0.078125\nv 0.106388 -0.476562 0.078125\nv 0.101562 -0.473594 0.078125\nv -0.289062 -0.063608 0.078125\nv -0.28125 -0.0654628 0.078125\nv -0.273438 -0.0634947 0.078125\nv 0.453125 -0.0670188 0.078125\nv 0.460938 -0.0682911 0.078125\nv 0.46875 -0.0663458 0.078125\nv 0.476562 -0.0662389 0.078125\nv 0.484375 -0.0645862 0.078125\nv -0.290293 -0.0625 0.078125\nv -0.272409 -0.0625 0.078125\nv 0.448108 -0.0625 0.078125\nv 0.488543 -0.0625 0.078125\nv 0.492188 -0.0550525 0.078125\nv -0.294408 -0.0546875 0.078125\nv -0.296875 -0.0475582 0.078125\nv -0.26771 -0.0546875 0.078125\nv -0.265625 -0.0497018 0.078125\nv 0.446026 -0.0546875 0.078125\nv 0.445312 -0.0517422 0.078125\nv 0.49228 -0.0546875 0.078125\nv 0.492188 -0.0546875 0.0808647\nv -0.297049 -0.046875 0.078125\nv -0.264655 -0.046875 0.078125\nv 0.444373 -0.046875 0.078125\nv 0.49391 -0.046875 0.078125\nv -0.29833 -0.0390625 0.078125\nv -0.263126 -0.0390625 0.078125\nv 0.445202 -0.0390625 0.078125\nv 0.445312 -0.0390625 0.0822563\nv 0.495814 -0.0390625 0.078125\nv -0.298728 -0.03125 0.078125\nv -0.261969 -0.03125 0.078125\nv 0.444999 -0.03125 0.078125\nv 0.498087 -0.03125 0.078125\nv 0.5 -0.0261312 0.078125\nv -0.299012 -0.0234375 0.078125\nv -0.261359 -0.0234375 0.078125\nv 0.444716 -0.0234375 0.078125\nv 0.50081 -0.0234375 0.078125\nv -0.300515 -0.015625 0.078125\nv -0.26 -0.015625 0.078125\nv 0.44422 -0.015625 0.078125\nv 0.501423 -0.015625 0.078125\nv -0.302023 -0.0078125 0.078125\nv -0.259697 -0.0078125 0.078125\nv 0.442204 -0.0078125 0.078125\nv 0.501347 -0.0078125 0.078125\nv -0.303505 0 0.078125\nv -0.259937 0 0.078125\nv 0.440838 0 0.078125\nv 0.500977 0 0.078125\nv -0.303535 0.0078125 0.078125\nv -0.257877 0.0078125 0.078125\nv -0.257812 0.00792138 0.078125\nv 0.440709 0.0078125 0.078125\nv 0.500675 0.0078125 0.078125\nv -0.302233 0.015625 0.078125\nv -0.251055 0.015625 0.078125\nv -0.25 0.0163807 0.078125\nv -0.242188 0.0176611 0.078125\nv -0.234375 0.0193768 0.078125\nv -0.226562 0.0221897 0.078125\nv 0.421875 0.0230668 0.078125\nv 0.429688 0.0213318 0.078125\nv 0.439035 0.015625 0.078125\nv 0.4375 0.0170405 0.078125\nv 0.500476 0.015625 0.078125\nv -0.301066 0.0234375 0.078125\nv -0.2222 0.0234375 0.078125\nv -0.21875 0.024272 0.078125\nv -0.210938 0.0253214 0.078125\nv -0.203125 0.0255938 0.078125\nv -0.195312 0.025777 0.078125\nv -0.1875 0.0260844 0.078125\nv -0.179688 0.0263158 0.078125\nv -0.171875 0.0266178 0.078125\nv -0.164062 0.0266494 0.078125\nv -0.15625 0.026719 0.078125\nv -0.148438 0.0268395 0.078125\nv -0.140625 0.0268941 0.078125\nv -0.132812 0.0270103 0.078125\nv -0.125 0.0273461 0.078125\nv -0.117188 0.027352 0.078125\nv -0.109375 0.0271581 0.078125\nv -0.101562 0.0269373 0.078125\nv -0.09375 0.0267366 0.078125\nv -0.0859375 0.0265795 0.078125\nv -0.078125 0.0264904 0.078125\nv -0.0703125 0.0264042 0.078125\nv -0.0625 0.026301 0.078125\nv -0.0546875 0.0261503 0.078125\nv -0.046875 0.0259916 0.078125\nv -0.0390625 0.0258392 0.078125\nv -0.03125 0.0257289 0.078125\nv -0.0234375 0.025651 0.078125\nv -0.015625 0.0256164 0.078125\nv -0.0078125 0.0257682 0.078125\nv 0 0.0258799 0.078125\nv 0.0078125 0.0258104 0.078125\nv 0.015625 0.0259002 0.078125\nv 0.0234375 0.0259774 0.078125\nv 0.03125 0.0260541 0.078125\nv 0.0390625 0.0259929 0.078125\nv 0.046875 0.0259332 0.078125\nv 0.0546875 0.0259094 0.078125\nv 0.0625 0.0259233 0.078125\nv 0.0703125 0.0259306 0.078125\nv 0.078125 0.0258522 0.078125\nv 0.0859375 0.0257038 0.078125\nv 0.09375 0.0255961 0.078125\nv 0.101562 0.0255242 0.078125\nv 0.109375 0.0254375 0.078125\nv 0.117188 0.0253468 0.078125\nv 0.125 0.0253072 0.078125\nv 0.132812 0.0252051 0.078125\nv 0.140625 0.0251359 0.078125\nv 0.148438 0.0250891 0.078125\nv 0.15625 0.0249803 0.078125\nv 0.164062 0.0248074 0.078125\nv 0.171875 0.0246415 0.078125\nv 0.179688 0.0244409 0.078125\nv 0.1875 0.0242414 0.078125\nv 0.195312 0.0242177 0.078125\nv 0.203125 0.0242065 0.078125\nv 0.210938 0.024179 0.078125\nv 0.21875 0.0240943 0.078125\nv 0.226562 0.023966 0.078125\nv 0.234375 0.0240874 0.078125\nv 0.242188 0.0242078 0.078125\nv 0.25 0.024358 0.078125\nv 0.257812 0.0245632 0.078125\nv 0.265625 0.0247749 0.078125\nv 0.273438 0.0249523 0.078125\nv 0.28125 0.0251264 0.078125\nv 0.289062 0.0252261 0.078125\nv 0.296875 0.0252905 0.078125\nv 0.304688 0.0254924 0.078125\nv 0.3125 0.0256992 0.078125\nv 0.320312 0.0259572 0.078125\nv 0.328125 0.0262283 0.078125\nv 0.335938 0.0263028 0.078125\nv 0.34375 0.0263718 0.078125\nv 0.351562 0.0264541 0.078125\nv 0.359375 0.0265012 0.078125\nv 0.367188 0.0265252 0.078125\nv 0.375 0.026583 0.078125\nv 0.382812 0.0265834 0.078125\nv 0.390625 0.0263503 0.078125\nv 0.398438 0.025922 0.078125\nv 0.40625 0.0255183 0.078125\nv 0.420594 0.0234375 0.078125\nv 0.414062 0.0248334 0.078125\nv 0.500111 0.0234375 0.078125\nv 0.5 0.0238428 0.078125\nv -0.299857 0.03125 0.078125\nv 0.497471 0.03125 0.078125\nv -0.29869 0.0390625 0.078125\nv -0.296875 0.0441655 0.078125\nv 0.494981 0.0390625 0.078125\nv -0.295815 0.046875 0.078125\nv 0.492632 0.046875 0.078125\nv 0.492188 0.0483574 0.078125\nv -0.292917 0.0546875 0.078125\nv 0.489954 0.0546875 0.078125\nv 0.484375 0.0584366 0.078125\nv -0.289847 0.0625 0.078125\nv -0.289062 0.0637027 0.078125\nv 0.445312 0.0699965 0.078125\nv 0.453125 0.0680271 0.078125\nv 0.460938 0.0666837 0.078125\nv 0.46875 0.065857 0.078125\nv 0.47676 0.0625 0.078125\nv 0.476562 0.0626187 0.078125\nv -0.283245 0.0703125 0.078125\nv -0.28125 0.0718624 0.078125\nv -0.273438 0.0740582 0.078125\nv -0.234375 0.0762819 0.078125\nv -0.226562 0.0751175 0.078125\nv -0.21875 0.0739673 0.078125\nv -0.210938 0.0732782 0.078125\nv -0.203125 0.0738032 0.078125\nv -0.195312 0.074311 0.078125\nv -0.1875 0.0748688 0.078125\nv -0.179688 0.0751458 0.078125\nv -0.171875 0.0754186 0.078125\nv -0.164062 0.075463 0.078125\nv -0.15625 0.0754093 0.078125\nv -0.148438 0.0753739 0.078125\nv -0.140625 0.0751853 0.078125\nv -0.132812 0.0752028 0.078125\nv -0.125 0.0753042 0.078125\nv -0.117188 0.0754083 0.078125\nv -0.109375 0.0753352 0.078125\nv -0.101562 0.0752023 0.078125\nv -0.09375 0.0750926 0.078125\nv -0.0859375 0.0750328 0.078125\nv -0.078125 0.0749565 0.078125\nv -0.0703125 0.07483 0.078125\nv -0.0625 0.0747136 0.078125\nv -0.0546875 0.0745858 0.078125\nv -0.046875 0.0744365 0.078125\nv -0.0390625 0.0742466 0.078125\nv -0.03125 0.0741137 0.078125\nv -0.0234375 0.0739155 0.078125\nv -0.015625 0.073679 0.078125\nv -0.0078125 0.0734385 0.078125\nv 0 0.0733062 0.078125\nv 0.0078125 0.07327 0.078125\nv 0.015625 0.0732938 0.078125\nv 0.0234375 0.0733227 0.078125\nv 0.03125 0.0733421 0.078125\nv 0.0390625 0.0733633 0.078125\nv 0.046875 0.0734146 0.078125\nv 0.0546875 0.0734477 0.078125\nv 0.0625 0.07342 0.078125\nv 0.0703125 0.0733576 0.078125\nv 0.078125 0.0732987 0.078125\nv 0.0859375 0.0732604 0.078125\nv 0.09375 0.0731741 0.078125\nv 0.101562 0.073099 0.078125\nv 0.109375 0.0730791 0.078125\nv 0.117188 0.073101 0.078125\nv 0.125 0.073154 0.078125\nv 0.132812 0.0731043 0.078125\nv 0.140625 0.0730535 0.078125\nv 0.148438 0.0730131 0.078125\nv 0.15625 0.0729854 0.078125\nv 0.164062 0.0730104 0.078125\nv 0.171875 0.0730915 0.078125\nv 0.179688 0.0731544 0.078125\nv 0.1875 0.073237 0.078125\nv 0.195312 0.0732957 0.078125\nv 0.203125 0.073317 0.078125\nv 0.210938 0.0732532 0.078125\nv 0.21875 0.0731512 0.078125\nv 0.226562 0.0730876 0.078125\nv 0.234375 0.0730007 0.078125\nv 0.242188 0.0728562 0.078125\nv 0.25 0.0726848 0.078125\nv 0.257812 0.0726363 0.078125\nv 0.265625 0.0725862 0.078125\nv 0.273438 0.072735 0.078125\nv 0.28125 0.0728924 0.078125\nv 0.289062 0.0730533 0.078125\nv 0.296875 0.0731312 0.078125\nv 0.304688 0.0731459 0.078125\nv 0.3125 0.0731933 0.078125\nv 0.320312 0.0732414 0.078125\nv 0.328125 0.0732807 0.078125\nv 0.335938 0.0733341 0.078125\nv 0.34375 0.0733829 0.078125\nv 0.351562 0.0733823 0.078125\nv 0.359375 0.0733743 0.078125\nv 0.367188 0.073367 0.078125\nv 0.375 0.0731152 0.078125\nv 0.382812 0.0727011 0.078125\nv 0.390625 0.0723373 0.078125\nv 0.398438 0.0721575 0.078125\nv 0.40625 0.0720167 0.078125\nv 0.414062 0.071846 0.078125\nv 0.421875 0.0716478 0.078125\nv 0.429688 0.0714489 0.078125\nv 0.442832 0.0703125 0.078125\nv 0.4375 0.0709594 0.078125\nv -0.266064 0.078125 0.078125\nv -0.265625 0.0783862 0.078125\nv -0.257812 0.0817101 0.078125\nv -0.25 0.0812768 0.078125\nv -0.241454 0.078125 0.078125\nv -0.242188 0.0783832 0.078125\nv -0.28125 0.170914 0.078125\nv -0.273438 0.167776 0.078125\nv -0.265625 0.16583 0.078125\nv -0.257812 0.169794 0.078125\nv -0.282745 0.171875 0.078125\nv -0.289062 0.176722 0.078125\nv -0.28125 0.171875 0.0815233\nv -0.25663 0.171875 0.078125\nv -0.257812 0.171875 0.0855648\nv -0.291623 0.179688 0.078125\nv -0.253768 0.179688 0.078125\nv -0.295576 0.1875 0.078125\nv -0.296875 0.190111 0.078125\nv -0.251399 0.1875 0.078125\nv -0.25 0.190703 0.078125\nv -0.298587 0.195312 0.078125\nv -0.247935 0.195312 0.078125\nv -0.29965 0.203125 0.078125\nv -0.246091 0.203125 0.078125\nv -0.300415 0.210938 0.078125\nv -0.244706 0.210938 0.078125\nv -0.300695 0.21875 0.078125\nv -0.244061 0.21875 0.078125\nv -0.300775 0.226562 0.078125\nv -0.243601 0.226562 0.078125\nv -0.300974 0.234375 0.078125\nv -0.242752 0.234375 0.078125\nv -0.301353 0.242188 0.078125\nv -0.242532 0.242188 0.078125\nv -0.301686 0.25 0.078125\nv -0.242653 0.25 0.078125\nv -0.302 0.257812 0.078125\nv -0.242936 0.257812 0.078125\nv -0.301948 0.265625 0.078125\nv -0.243102 0.265625 0.078125\nv -0.301525 0.273438 0.078125\nv -0.243106 0.273438 0.078125\nv -0.300696 0.28125 0.078125\nv -0.243732 0.28125 0.078125\nv -0.299307 0.289062 0.078125\nv -0.244873 0.289062 0.078125\nv -0.297888 0.296875 0.078125\nv -0.296875 0.30429 0.078125\nv -0.246005 0.296875 0.078125\nv -0.296818 0.304688 0.078125\nv -0.296875 0.304688 0.0825689\nv -0.248041 0.304688 0.078125\nv -0.296103 0.3125 0.078125\nv -0.249884 0.3125 0.078125\nv -0.25 0.313213 0.078125\nv -0.25 0.3125 0.0818086\nv -0.295524 0.320312 0.078125\nv -0.251209 0.320312 0.078125\nv -0.29544 0.328125 0.078125\nv -0.252267 0.328125 0.078125\nv -0.295609 0.335938 0.078125\nv -0.253451 0.335938 0.078125\nv -0.295844 0.34375 0.078125\nv -0.254259 0.34375 0.078125\nv -0.296317 0.351562 0.078125\nv -0.296875 0.35936 0.078125\nv -0.254992 0.351562 0.078125\nv -0.296876 0.359375 0.078125\nv -0.255686 0.359375 0.078125\nv -0.297313 0.367188 0.078125\nv -0.256088 0.367188 0.078125\nv -0.297501 0.375 0.078125\nv -0.256533 0.375 0.078125\nv -0.297693 0.382812 0.078125\nv -0.257288 0.382812 0.078125\nv -0.257812 0.387454 0.078125\nv -0.257812 0.382812 0.083135\nv -0.297801 0.390625 0.078125\nv -0.258166 0.390625 0.078125\nv -0.29782 0.398438 0.078125\nv -0.259338 0.398438 0.078125\nv -0.298038 0.40625 0.078125\nv -0.261138 0.40625 0.078125\nv -0.298396 0.414062 0.078125\nv -0.262507 0.414062 0.078125\nv -0.298611 0.421875 0.078125\nv -0.263632 0.421875 0.078125\nv -0.265625 0.421875 0.0826944\nv -0.298676 0.429688 0.078125\nv -0.264568 0.429688 0.078125\nv -0.265625 0.429688 0.0796651\nv -0.298553 0.4375 0.078125\nv -0.265392 0.4375 0.078125\nv -0.265625 0.439739 0.078125\nv -0.265625 0.4375 0.0784323\nv -0.298438 0.445312 0.078125\nv -0.266271 0.445312 0.078125\nv -0.298171 0.453125 0.078125\nv -0.296875 0.453125 0.0857953\nv -0.267307 0.453125 0.078125\nv -0.297828 0.460938 0.078125\nv -0.296875 0.460938 0.0831561\nv -0.268906 0.460938 0.078125\nv -0.273438 0.460938 0.0837978\nv -0.29754 0.46875 0.078125\nv -0.296875 0.46875 0.0813199\nv -0.271326 0.46875 0.078125\nv -0.273438 0.46875 0.081003\nv -0.297475 0.476562 0.078125\nv -0.296875 0.476562 0.0802777\nv -0.2733 0.476562 0.078125\nv -0.273438 0.477151 0.078125\nv -0.273438 0.476562 0.0783288\nv -0.297388 0.484375 0.078125\nv -0.296875 0.484375 0.0793506\nv -0.289062 0.484375 0.0837572\nv -0.275567 0.484375 0.078125\nv -0.28125 0.484375 0.085332\nv -0.297532 0.492188 0.078125\nv -0.296875 0.492188 0.0798007\nv -0.289062 0.492188 0.0835283\nv -0.276795 0.492188 0.078125\nv -0.28125 0.492188 0.0848685\nv -0.29823 0.5 0.078125\nv -0.296875 0.5 0.0820025\nv -0.289062 0.5 0.0851129\nv -0.276249 0.5 0.078125\nv -0.28125 0.5 0.0858637\nv -0.298711 0.507812 0.078125\nv -0.296875 0.507812 0.083228\nv -0.275957 0.507812 0.078125\nv -0.29921 0.515625 0.078125\nv -0.27574 0.515625 0.078125\nv -0.299894 0.523438 0.078125\nv -0.274939 0.523438 0.078125\nv -0.300904 0.53125 0.078125\nv -0.27415 0.53125 0.078125\nv -0.273438 0.533932 0.078125\nv -0.302175 0.539062 0.078125\nv -0.272306 0.539062 0.078125\nv -0.273438 0.539062 0.0808902\nv -0.303608 0.546875 0.078125\nv -0.304688 0.55283 0.078125\nv -0.271084 0.546875 0.078125\nv -0.304957 0.554688 0.078125\nv -0.304688 0.554688 0.0857854\nv -0.269991 0.554688 0.078125\nv -0.306078 0.5625 0.078125\nv -0.269229 0.5625 0.078125\nv -0.306814 0.570312 0.078125\nv -0.268892 0.570312 0.078125\nv -0.30746 0.578125 0.078125\nv -0.268869 0.578125 0.078125\nv -0.307881 0.585938 0.078125\nv -0.268862 0.585938 0.078125\nv -0.307936 0.59375 0.078125\nv -0.268982 0.59375 0.078125\nv -0.308085 0.601562 0.078125\nv -0.269249 0.601562 0.078125\nv -0.308306 0.609375 0.078125\nv -0.269523 0.609375 0.078125\nv -0.308527 0.617188 0.078125\nv -0.270001 0.617188 0.078125\nv -0.310407 0.625 0.078125\nv -0.270448 0.625 0.078125\nv -0.312101 0.632812 0.078125\nv -0.3125 0.635144 0.078125\nv -0.3125 0.632812 0.0840933\nv -0.27108 0.632812 0.078125\nv -0.313468 0.640625 0.078125\nv -0.272421 0.640625 0.078125\nv -0.273438 0.647312 0.078125\nv -0.314628 0.648438 0.078125\nv -0.273606 0.648438 0.078125\nv -0.273438 0.648438 0.0798597\nv -0.315678 0.65625 0.078125\nv -0.274188 0.65625 0.078125\nv -0.316722 0.664062 0.078125\nv -0.274664 0.664062 0.078125\nv -0.317289 0.671875 0.078125\nv -0.274972 0.671875 0.078125\nv -0.317814 0.679688 0.078125\nv -0.275529 0.679688 0.078125\nv -0.318314 0.6875 0.078125\nv -0.276125 0.6875 0.078125\nv -0.318876 0.695312 0.078125\nv -0.276495 0.695312 0.078125\nv -0.319505 0.703125 0.078125\nv -0.276747 0.703125 0.078125\nv -0.320059 0.710938 0.078125\nv -0.320312 0.713435 0.078125\nv -0.320312 0.710938 0.0814859\nv -0.277238 0.710938 0.078125\nv -0.320863 0.71875 0.078125\nv -0.27804 0.71875 0.078125\nv -0.322106 0.726562 0.078125\nv -0.279201 0.726562 0.078125\nv -0.323508 0.734375 0.078125\nv -0.279917 0.734375 0.078125\nv -0.32495 0.742188 0.078125\nv -0.280932 0.742188 0.078125\nv -0.28125 0.74419 0.078125\nv -0.326043 0.75 0.078125\nv -0.282251 0.75 0.078125\nv -0.326638 0.757812 0.078125\nv -0.283639 0.757812 0.078125\nv -0.327669 0.765625 0.078125\nv -0.328125 0.768125 0.078125\nv -0.28523 0.765625 0.078125\nv -0.329041 0.773438 0.078125\nv -0.287047 0.773438 0.078125\nv -0.330238 0.78125 0.078125\nv -0.288883 0.78125 0.078125\nv -0.289062 0.781879 0.078125\nv -0.289062 0.78125 0.0821945\nv -0.331289 0.789062 0.078125\nv -0.292428 0.789062 0.078125\nv -0.332137 0.796875 0.078125\nv -0.295784 0.796875 0.078125\nv -0.296875 0.799237 0.078125\nv -0.332072 0.804688 0.078125\nv -0.300139 0.804688 0.078125\nv -0.304688 0.80908 0.078125\nv -0.330604 0.8125 0.078125\nv -0.328125 0.816144 0.078125\nv -0.320312 0.819397 0.078125\nv -0.307947 0.8125 0.078125\nv -0.3125 0.816039 0.078125\nv 0.0234375 -0.539967 0.0859375\nv 0.03125 -0.540907 0.0859375\nv 0.0390625 -0.541442 0.0859375\nv 0.046875 -0.541665 0.0859375\nv 0.0546875 -0.541402 0.0859375\nv 0.0625 -0.540618 0.0859375\nv 0.0703125 -0.53949 0.0859375\nv 0 -0.531928 0.0859375\nv 0.0078125 -0.535587 0.0859375\nv 0.0179201 -0.539062 0.0859375\nv 0.015625 -0.538474 0.0859375\nv 0.0720181 -0.539062 0.0859375\nv 0.078125 -0.537254 0.0859375\nv 0.0859375 -0.534545 0.0859375\nv -0.00129459 -0.53125 0.0859375\nv -0.0078125 -0.52546 0.0859375\nv 0.0928813 -0.53125 0.0859375\nv 0.09375 -0.530835 0.0859375\nv 0.101562 -0.526534 0.0859375\nv -0.00965768 -0.523438 0.0859375\nv 0.106287 -0.523438 0.0859375\nv 0.109375 -0.520698 0.0859375\nv -0.0112289 -0.515625 0.0859375\nv -0.0078125 -0.508181 0.0859375\nv 0.113562 -0.515625 0.0859375\nv 0.117188 -0.511146 0.0859375\nv -0.00761596 -0.507812 0.0859375\nv -0.0078125 -0.507812 0.0866852\nv 0 -0.50435 0.0859375\nv 0.0078125 -0.500861 0.0859375\nv 0.119523 -0.507812 0.0859375\nv 0.00943645 -0.5 0.0859375\nv 0.0078125 -0.5 0.0914381\nv 0.015625 -0.496557 0.0859375\nv 0.122851 -0.5 0.0859375\nv 0.0224842 -0.492188 0.0859375\nv 0.0234375 -0.491781 0.0859375\nv 0.03125 -0.488954 0.0859375\nv 0.0390625 -0.486789 0.0859375\nv 0.046875 -0.484974 0.0859375\nv 0.123012 -0.492188 0.0859375\nv 0.117188 -0.486061 0.0859375\nv 0.049106 -0.484375 0.0859375\nv 0.0546875 -0.482838 0.0859375\nv 0.0625 -0.48041 0.0859375\nv 0.0703125 -0.478084 0.0859375\nv 0.115244 -0.484375 0.0859375\nv 0.109375 -0.479328 0.0859375\nv 0.0761544 -0.476562 0.0859375\nv 0.078125 -0.476092 0.0859375\nv 0.0859375 -0.474769 0.0859375\nv 0.09375 -0.473509 0.0859375\nv 0.105751 -0.476562 0.0859375\nv 0.101562 -0.47407 0.0859375\nv -0.289062 -0.0631934 0.0859375\nv -0.28125 -0.0650881 0.0859375\nv -0.273438 -0.0631244 0.0859375\nv 0.453125 -0.0667772 0.0859375\nv 0.460938 -0.0681008 0.0859375\nv 0.46875 -0.0661173 0.0859375\nv 0.476562 -0.0660464 0.0859375\nv 0.484375 -0.0643739 0.0859375\nv -0.289867 -0.0625 0.0859375\nv -0.272786 -0.0625 0.0859375\nv 0.4484 -0.0625 0.0859375\nv 0.488106 -0.0625 0.0859375\nv -0.294311 -0.0546875 0.0859375\nv -0.296875 -0.0468784 0.0859375\nv -0.267828 -0.0546875 0.0859375\nv -0.265625 -0.0492729 0.0859375\nv 0.446241 -0.0546875 0.0859375\nv 0.445312 -0.0506917 0.0859375\nv 0.49196 -0.0546875 0.0859375\nv 0.492188 -0.0538722 0.0859375\nv -0.296876 -0.046875 0.0859375\nv -0.296875 -0.046875 0.0859933\nv -0.264849 -0.046875 0.0859375\nv 0.444614 -0.046875 0.0859375\nv 0.445312 -0.0400783 0.0859375\nv 0.493688 -0.046875 0.0859375\nv -0.298133 -0.0390625 0.0859375\nv -0.263173 -0.0390625 0.0859375\nv 0.445418 -0.0390625 0.0859375\nv 0.445312 -0.0373835 0.0859375\nv 0.495669 -0.0390625 0.0859375\nv -0.298578 -0.03125 0.0859375\nv -0.261999 -0.03125 0.0859375\nv 0.445002 -0.03125 0.0859375\nv 0.497917 -0.03125 0.0859375\nv 0.5 -0.0255158 0.0859375\nv -0.298935 -0.0234375 0.0859375\nv -0.26153 -0.0234375 0.0859375\nv 0.444667 -0.0234375 0.0859375\nv 0.500626 -0.0234375 0.0859375\nv -0.300436 -0.015625 0.0859375\nv -0.260182 -0.015625 0.0859375\nv 0.44415 -0.015625 0.0859375\nv 0.501254 -0.015625 0.0859375\nv -0.30196 -0.0078125 0.0859375\nv -0.259993 -0.0078125 0.0859375\nv 0.44226 -0.0078125 0.0859375\nv 0.501175 -0.0078125 0.0859375\nv -0.303572 0 0.0859375\nv -0.260156 0 0.0859375\nv 0.440938 0 0.0859375\nv 0.50081 0 0.0859375\nv -0.303577 0.0078125 0.0859375\nv -0.258158 0.0078125 0.0859375\nv -0.257812 0.00840428 0.0859375\nv 0.440923 0.0078125 0.0859375\nv 0.500624 0.0078125 0.0859375\nv -0.302283 0.015625 0.0859375\nv -0.251587 0.015625 0.0859375\nv -0.25 0.0167509 0.0859375\nv -0.242188 0.0180028 0.0859375\nv -0.234375 0.019664 0.0859375\nv -0.226562 0.022459 0.0859375\nv 0.421875 0.0232448 0.0859375\nv 0.429688 0.0214327 0.0859375\nv 0.439291 0.015625 0.0859375\nv 0.4375 0.0172348 0.0859375\nv 0.500457 0.015625 0.0859375\nv -0.301142 0.0234375 0.0859375\nv -0.223293 0.0234375 0.0859375\nv -0.21875 0.0245788 0.0859375\nv -0.210938 0.0255069 0.0859375\nv -0.203125 0.0257423 0.0859375\nv -0.195312 0.0258925 0.0859375\nv -0.1875 0.0261798 0.0859375\nv -0.179688 0.0264289 0.0859375\nv -0.171875 0.0266347 0.0859375\nv -0.164062 0.0266256 0.0859375\nv -0.15625 0.0266916 0.0859375\nv -0.148438 0.0268208 0.0859375\nv -0.140625 0.0268804 0.0859375\nv -0.132812 0.0269831 0.0859375\nv -0.125 0.0273408 0.0859375\nv -0.117188 0.0273449 0.0859375\nv -0.109375 0.0271548 0.0859375\nv -0.101562 0.0269048 0.0859375\nv -0.09375 0.0267256 0.0859375\nv -0.0859375 0.0266065 0.0859375\nv -0.078125 0.026561 0.0859375\nv -0.0703125 0.0264921 0.0859375\nv -0.0625 0.0264009 0.0859375\nv -0.0546875 0.0262538 0.0859375\nv -0.046875 0.0260552 0.0859375\nv -0.0390625 0.0259033 0.0859375\nv -0.03125 0.0257908 0.0859375\nv -0.0234375 0.0257305 0.0859375\nv -0.015625 0.0257732 0.0859375\nv -0.0078125 0.0259431 0.0859375\nv 0 0.0260518 0.0859375\nv 0.0078125 0.0260051 0.0859375\nv 0.015625 0.026096 0.0859375\nv 0.0234375 0.0261623 0.0859375\nv 0.03125 0.0261995 0.0859375\nv 0.0390625 0.0261236 0.0859375\nv 0.046875 0.0260572 0.0859375\nv 0.0546875 0.0260283 0.0859375\nv 0.0625 0.0260269 0.0859375\nv 0.0703125 0.0259466 0.0859375\nv 0.078125 0.0258374 0.0859375\nv 0.0859375 0.0256877 0.0859375\nv 0.09375 0.0256005 0.0859375\nv 0.101562 0.0255109 0.0859375\nv 0.109375 0.0254203 0.0859375\nv 0.117188 0.0253454 0.0859375\nv 0.125 0.0252737 0.0859375\nv 0.132812 0.0252123 0.0859375\nv 0.140625 0.0250746 0.0859375\nv 0.148438 0.0249554 0.0859375\nv 0.15625 0.0248265 0.0859375\nv 0.164062 0.024678 0.0859375\nv 0.171875 0.0245228 0.0859375\nv 0.179688 0.0243537 0.0859375\nv 0.1875 0.0241782 0.0859375\nv 0.195312 0.0241269 0.0859375\nv 0.203125 0.0241367 0.0859375\nv 0.210938 0.0241135 0.0859375\nv 0.21875 0.0240411 0.0859375\nv 0.226562 0.0239949 0.0859375\nv 0.234375 0.0241046 0.0859375\nv 0.242188 0.0242364 0.0859375\nv 0.25 0.0244068 0.0859375\nv 0.257812 0.0246244 0.0859375\nv 0.265625 0.0248222 0.0859375\nv 0.273438 0.0249835 0.0859375\nv 0.28125 0.0251422 0.0859375\nv 0.289062 0.025263 0.0859375\nv 0.296875 0.0252634 0.0859375\nv 0.304688 0.0254477 0.0859375\nv 0.3125 0.0256805 0.0859375\nv 0.320312 0.0259224 0.0859375\nv 0.328125 0.0261997 0.0859375\nv 0.335938 0.0262827 0.0859375\nv 0.34375 0.0263671 0.0859375\nv 0.351562 0.0264773 0.0859375\nv 0.359375 0.0265485 0.0859375\nv 0.367188 0.0265791 0.0859375\nv 0.375 0.0266279 0.0859375\nv 0.382812 0.0266768 0.0859375\nv 0.390625 0.0264594 0.0859375\nv 0.398438 0.0260403 0.0859375\nv 0.40625 0.0256299 0.0859375\nv 0.421229 0.0234375 0.0859375\nv 0.414062 0.0250043 0.0859375\nv 0.500101 0.0234375 0.0859375\nv 0.5 0.0237815 0.0859375\nv -0.299943 0.03125 0.0859375\nv 0.497259 0.03125 0.0859375\nv -0.298851 0.0390625 0.0859375\nv -0.296875 0.0450355 0.0859375\nv 0.494712 0.0390625 0.0859375\nv -0.296193 0.046875 0.0859375\nv 0.49232 0.046875 0.0859375\nv 0.492188 0.0473179 0.0859375\nv 0.492188 0.046875 0.0899274\nv -0.293267 0.0546875 0.0859375\nv 0.489634 0.0546875 0.0859375\nv 0.484375 0.0582787 0.0859375\nv -0.290598 0.0625 0.0859375\nv -0.289062 0.0648596 0.0859375\nv 0.445312 0.0698994 0.0859375\nv 0.453125 0.0679252 0.0859375\nv 0.460938 0.0666089 0.0859375\nv 0.46875 0.065772 0.0859375\nv 0.476577 0.0625 0.0859375\nv 0.476562 0.0625086 0.0859375\nv 0.476562 0.0625 0.0874083\nv -0.283618 0.0703125 0.0859375\nv -0.28125 0.0719653 0.0859375\nv -0.273438 0.0746878 0.0859375\nv -0.234375 0.0770776 0.0859375\nv -0.226562 0.0755712 0.0859375\nv -0.21875 0.0743074 0.0859375\nv -0.210938 0.0735312 0.0859375\nv -0.203125 0.0739834 0.0859375\nv -0.195312 0.074438 0.0859375\nv -0.1875 0.074915 0.0859375\nv -0.179688 0.0751757 0.0859375\nv -0.171875 0.0754074 0.0859375\nv -0.164062 0.0754439 0.0859375\nv -0.15625 0.0754377 0.0859375\nv -0.148438 0.0754298 0.0859375\nv -0.140625 0.0752375 0.0859375\nv -0.132812 0.0752012 0.0859375\nv -0.125 0.0751826 0.0859375\nv -0.117188 0.075253 0.0859375\nv -0.109375 0.0751412 0.0859375\nv -0.101562 0.0750235 0.0859375\nv -0.09375 0.0749483 0.0859375\nv -0.0859375 0.0749091 0.0859375\nv -0.078125 0.0749021 0.0859375\nv -0.0703125 0.0747831 0.0859375\nv -0.0625 0.0746765 0.0859375\nv -0.0546875 0.0745604 0.0859375\nv -0.046875 0.0744421 0.0859375\nv -0.0390625 0.0742476 0.0859375\nv -0.03125 0.0740907 0.0859375\nv -0.0234375 0.0738794 0.0859375\nv -0.015625 0.0736188 0.0859375\nv -0.0078125 0.0734262 0.0859375\nv 0 0.0733565 0.0859375\nv 0.0078125 0.0733286 0.0859375\nv 0.015625 0.0733654 0.0859375\nv 0.0234375 0.0733722 0.0859375\nv 0.03125 0.0733721 0.0859375\nv 0.0390625 0.0733838 0.0859375\nv 0.046875 0.073395 0.0859375\nv 0.0546875 0.0733919 0.0859375\nv 0.0625 0.0733954 0.0859375\nv 0.0703125 0.0733312 0.0859375\nv 0.078125 0.0732705 0.0859375\nv 0.0859375 0.0732409 0.0859375\nv 0.09375 0.0731631 0.0859375\nv 0.101562 0.0730674 0.0859375\nv 0.109375 0.0729973 0.0859375\nv 0.117188 0.0729954 0.0859375\nv 0.125 0.0730773 0.0859375\nv 0.132812 0.073127 0.0859375\nv 0.140625 0.0730743 0.0859375\nv 0.148438 0.0730442 0.0859375\nv 0.15625 0.0730055 0.0859375\nv 0.164062 0.0729802 0.0859375\nv 0.171875 0.0730232 0.0859375\nv 0.179688 0.0730825 0.0859375\nv 0.1875 0.0731499 0.0859375\nv 0.195312 0.0731968 0.0859375\nv 0.203125 0.0732231 0.0859375\nv 0.210938 0.0732375 0.0859375\nv 0.21875 0.0731828 0.0859375\nv 0.226562 0.0730975 0.0859375\nv 0.234375 0.0730225 0.0859375\nv 0.242188 0.0728786 0.0859375\nv 0.25 0.0727402 0.0859375\nv 0.257812 0.0726779 0.0859375\nv 0.265625 0.0726833 0.0859375\nv 0.273438 0.0726758 0.0859375\nv 0.28125 0.0728844 0.0859375\nv 0.289062 0.0730462 0.0859375\nv 0.296875 0.0731621 0.0859375\nv 0.304688 0.0732048 0.0859375\nv 0.3125 0.0732607 0.0859375\nv 0.320312 0.0733039 0.0859375\nv 0.328125 0.0733239 0.0859375\nv 0.335938 0.0733729 0.0859375\nv 0.34375 0.073426 0.0859375\nv 0.351562 0.0734249 0.0859375\nv 0.359375 0.073428 0.0859375\nv 0.367188 0.0734027 0.0859375\nv 0.375 0.0731721 0.0859375\nv 0.382812 0.0727918 0.0859375\nv 0.390625 0.0724216 0.0859375\nv 0.398438 0.0722605 0.0859375\nv 0.40625 0.0721175 0.0859375\nv 0.414062 0.07195 0.0859375\nv 0.421875 0.0717467 0.0859375\nv 0.429688 0.0715122 0.0859375\nv 0.442416 0.0703125 0.0859375\nv 0.4375 0.0709884 0.0859375\nv -0.266317 0.078125 0.0859375\nv -0.265625 0.0785336 0.0859375\nv -0.257812 0.0821998 0.0859375\nv -0.25 0.0817792 0.0859375\nv -0.238314 0.078125 0.0859375\nv -0.242188 0.0792742 0.0859375\nv -0.273438 0.16984 0.0859375\nv -0.265625 0.167861 0.0859375\nv -0.289062 0.177835 0.0859375\nv -0.277851 0.171875 0.0859375\nv -0.28125 0.173018 0.0859375\nv -0.257987 0.171875 0.0859375\nv -0.257812 0.17202 0.0859375\nv -0.29073 0.179688 0.0859375\nv -0.289062 0.179688 0.093715\nv -0.254783 0.179688 0.0859375\nv -0.295768 0.1875 0.0859375\nv -0.296875 0.189187 0.0859375\nv -0.252267 0.1875 0.0859375\nv -0.25 0.19199 0.0859375\nv -0.299192 0.195312 0.0859375\nv -0.248412 0.195312 0.0859375\nv -0.299898 0.203125 0.0859375\nv -0.246241 0.203125 0.0859375\nv -0.300612 0.210938 0.0859375\nv -0.244682 0.210938 0.0859375\nv -0.300856 0.21875 0.0859375\nv -0.244284 0.21875 0.0859375\nv -0.300923 0.226562 0.0859375\nv -0.243686 0.226562 0.0859375\nv -0.301103 0.234375 0.0859375\nv -0.24268 0.234375 0.0859375\nv -0.301604 0.242188 0.0859375\nv -0.242617 0.242188 0.0859375\nv -0.302007 0.25 0.0859375\nv -0.242605 0.25 0.0859375\nv -0.302394 0.257812 0.0859375\nv -0.242754 0.257812 0.0859375\nv -0.302314 0.265625 0.0859375\nv -0.242862 0.265625 0.0859375\nv -0.301914 0.273438 0.0859375\nv -0.242968 0.273438 0.0859375\nv -0.301019 0.28125 0.0859375\nv -0.243787 0.28125 0.0859375\nv -0.299549 0.289062 0.0859375\nv -0.244869 0.289062 0.0859375\nv -0.298017 0.296875 0.0859375\nv -0.246031 0.296875 0.0859375\nv -0.296918 0.304688 0.0859375\nv -0.296875 0.305161 0.0859375\nv -0.24815 0.304688 0.0859375\nv -0.25 0.311983 0.0859375\nv -0.296223 0.3125 0.0859375\nv -0.250144 0.3125 0.0859375\nv -0.29567 0.320312 0.0859375\nv -0.251331 0.320312 0.0859375\nv -0.295616 0.328125 0.0859375\nv -0.252378 0.328125 0.0859375\nv -0.295781 0.335938 0.0859375\nv -0.25359 0.335938 0.0859375\nv -0.29598 0.34375 0.0859375\nv -0.254548 0.34375 0.0859375\nv -0.296447 0.351562 0.0859375\nv -0.296875 0.358533 0.0859375\nv -0.255514 0.351562 0.0859375\nv -0.296929 0.359375 0.0859375\nv -0.296875 0.359375 0.0877654\nv -0.256299 0.359375 0.0859375\nv -0.297176 0.367188 0.0859375\nv -0.296875 0.367188 0.0916331\nv -0.256735 0.367188 0.0859375\nv -0.297217 0.375 0.0859375\nv -0.296875 0.375 0.0922349\nv -0.257091 0.375 0.0859375\nv -0.257812 0.380606 0.0859375\nv -0.257812 0.375 0.0923253\nv -0.297368 0.382812 0.0859375\nv -0.258124 0.382812 0.0859375\nv -0.297302 0.390625 0.0859375\nv -0.296875 0.390625 0.0901528\nv -0.259259 0.390625 0.0859375\nv -0.2972 0.398438 0.0859375\nv -0.296875 0.398438 0.0883755\nv -0.260921 0.398438 0.0859375\nv -0.297215 0.40625 0.0859375\nv -0.296875 0.40625 0.0884173\nv -0.263121 0.40625 0.0859375\nv -0.265625 0.40625 0.0916531\nv -0.297547 0.414062 0.0859375\nv -0.296875 0.414062 0.0907375\nv -0.265067 0.414062 0.0859375\nv -0.265625 0.416287 0.0859375\nv -0.265625 0.414062 0.0866647\nv -0.297748 0.421875 0.0859375\nv -0.296875 0.421875 0.0917586\nv -0.266955 0.421875 0.0859375\nv -0.297764 0.429688 0.0859375\nv -0.296875 0.429688 0.0918772\nv -0.269064 0.429688 0.0859375\nv -0.273438 0.429688 0.0915464\nv -0.297601 0.4375 0.0859375\nv -0.296875 0.4375 0.0907047\nv -0.269961 0.4375 0.0859375\nv -0.273438 0.4375 0.0906055\nv -0.2974 0.445312 0.0859375\nv -0.296875 0.452776 0.0859375\nv -0.296875 0.445312 0.0889063\nv -0.270669 0.445312 0.0859375\nv -0.273438 0.445312 0.0899145\nv -0.296845 0.453125 0.0859375\nv -0.271978 0.453125 0.0859375\nv -0.273438 0.457396 0.0859375\nv -0.273438 0.453125 0.0880814\nv -0.296128 0.460938 0.0859375\nv -0.289062 0.460938 0.093478\nv -0.275316 0.460938 0.0859375\nv -0.28125 0.460938 0.0917832\nv -0.294762 0.46875 0.0859375\nv -0.289062 0.46875 0.0895125\nv -0.278319 0.46875 0.0859375\nv -0.28125 0.46875 0.0893754\nv -0.290877 0.476562 0.0859375\nv -0.289062 0.478387 0.0859375\nv -0.289062 0.476562 0.0866341\nv -0.280442 0.476562 0.0859375\nv -0.28125 0.481327 0.0859375\nv -0.28125 0.476562 0.0869588\nv -0.289062 0.503225 0.0859375\nv -0.28125 0.500627 0.0859375\nv -0.29276 0.507812 0.0859375\nv -0.296875 0.515597 0.0859375\nv -0.289062 0.507812 0.0872772\nv -0.280788 0.507812 0.0859375\nv -0.28125 0.507812 0.0866486\nv -0.29688 0.515625 0.0859375\nv -0.296875 0.515625 0.0859446\nv -0.289062 0.515625 0.0903691\nv -0.280008 0.515625 0.0859375\nv -0.28125 0.515625 0.0881032\nv -0.298388 0.523438 0.0859375\nv -0.296875 0.523438 0.0886605\nv -0.278891 0.523438 0.0859375\nv -0.28125 0.523438 0.0902877\nv -0.299902 0.53125 0.0859375\nv -0.277441 0.53125 0.0859375\nv -0.28125 0.53125 0.0931762\nv -0.301529 0.539062 0.0859375\nv -0.275637 0.539062 0.0859375\nv -0.273438 0.54546 0.0859375\nv -0.303215 0.546875 0.0859375\nv -0.273016 0.546875 0.0859375\nv -0.273438 0.546875 0.0870313\nv -0.304681 0.554688 0.0859375\nv -0.304688 0.554724 0.0859375\nv -0.271386 0.554688 0.0859375\nv -0.305815 0.5625 0.0859375\nv -0.270072 0.5625 0.0859375\nv -0.306744 0.570312 0.0859375\nv -0.269407 0.570312 0.0859375\nv -0.307525 0.578125 0.0859375\nv -0.269433 0.578125 0.0859375\nv -0.308 0.585938 0.0859375\nv -0.269441 0.585938 0.0859375\nv -0.308308 0.59375 0.0859375\nv -0.269492 0.59375 0.0859375\nv -0.308317 0.601562 0.0859375\nv -0.269622 0.601562 0.0859375\nv -0.308654 0.609375 0.0859375\nv -0.269904 0.609375 0.0859375\nv -0.308872 0.617188 0.0859375\nv -0.270134 0.617188 0.0859375\nv -0.310845 0.625 0.0859375\nv -0.3125 0.632247 0.0859375\nv -0.270287 0.625 0.0859375\nv -0.312631 0.632812 0.0859375\nv -0.270638 0.632812 0.0859375\nv -0.314211 0.640625 0.0859375\nv -0.271747 0.640625 0.0859375\nv -0.315561 0.648438 0.0859375\nv -0.272865 0.648438 0.0859375\nv -0.273438 0.654077 0.0859375\nv -0.316761 0.65625 0.0859375\nv -0.273659 0.65625 0.0859375\nv -0.273438 0.65625 0.0889357\nv -0.317712 0.664062 0.0859375\nv -0.274158 0.664062 0.0859375\nv -0.318222 0.671875 0.0859375\nv -0.274544 0.671875 0.0859375\nv -0.318734 0.679688 0.0859375\nv -0.275203 0.679688 0.0859375\nv -0.319257 0.6875 0.0859375\nv -0.275842 0.6875 0.0859375\nv -0.319794 0.695312 0.0859375\nv -0.320312 0.695312 0.0921782\nv -0.276177 0.695312 0.0859375\nv -0.32022 0.703125 0.0859375\nv -0.320312 0.704828 0.0859375\nv -0.320312 0.703125 0.0870645\nv -0.276422 0.703125 0.0859375\nv -0.320656 0.710938 0.0859375\nv -0.276949 0.710938 0.0859375\nv -0.321423 0.71875 0.0859375\nv -0.277779 0.71875 0.0859375\nv -0.322498 0.726562 0.0859375\nv -0.278889 0.726562 0.0859375\nv -0.323827 0.734375 0.0859375\nv -0.279662 0.734375 0.0859375\nv -0.325185 0.742188 0.0859375\nv -0.28081 0.742188 0.0859375\nv -0.28125 0.744752 0.0859375\nv -0.326118 0.75 0.0859375\nv -0.282232 0.75 0.0859375\nv -0.32663 0.757812 0.0859375\nv -0.283713 0.757812 0.0859375\nv -0.327671 0.765625 0.0859375\nv -0.328125 0.768139 0.0859375\nv -0.285474 0.765625 0.0859375\nv -0.32901 0.773438 0.0859375\nv -0.287372 0.773438 0.0859375\nv -0.289062 0.780551 0.0859375\nv -0.330198 0.78125 0.0859375\nv -0.289321 0.78125 0.0859375\nv -0.331103 0.789062 0.0859375\nv -0.293198 0.789062 0.0859375\nv -0.331916 0.796875 0.0859375\nv -0.296803 0.796875 0.0859375\nv -0.296875 0.797009 0.0859375\nv -0.296875 0.796875 0.0863617\nv -0.331444 0.804688 0.0859375\nv -0.301943 0.804688 0.0859375\nv -0.304688 0.807273 0.0859375\nv -0.304688 0.804688 0.0932131\nv -0.329365 0.8125 0.0859375\nv -0.328125 0.813962 0.0859375\nv -0.328125 0.8125 0.0894477\nv -0.320312 0.81659 0.0859375\nv -0.310204 0.8125 0.0859375\nv -0.3125 0.813949 0.0859375\nv -0.3125 0.8125 0.0897301\nv 0.0234375 -0.540213 0.09375\nv 0.03125 -0.5412 0.09375\nv 0.0390625 -0.541893 0.09375\nv 0.046875 -0.542139 0.09375\nv 0.0546875 -0.541787 0.09375\nv 0.0625 -0.541011 0.09375\nv 0.0703125 -0.540135 0.09375\nv 0 -0.532216 0.09375\nv 0.0078125 -0.535849 0.09375\nv 0.0165672 -0.539062 0.09375\nv 0.015625 -0.538809 0.09375\nv 0.015625 -0.539062 0.0997912\nv 0.0754645 -0.539062 0.09375\nv 0.078125 -0.538338 0.09375\nv 0.078125 -0.539062 0.0988586\nv 0.0859375 -0.535271 0.09375\nv -0.0018584 -0.53125 0.09375\nv -0.0078125 -0.525816 0.09375\nv 0.0935428 -0.53125 0.09375\nv 0.09375 -0.53114 0.09375\nv 0.09375 -0.53125 0.0947918\nv 0.101562 -0.527326 0.09375\nv -0.0100718 -0.523438 0.09375\nv 0.106494 -0.523438 0.09375\nv 0.109375 -0.520461 0.09375\nv -0.0121503 -0.515625 0.09375\nv 0.113583 -0.515625 0.09375\nv 0.117188 -0.511298 0.09375\nv -0.00933818 -0.507812 0.09375\nv -0.0078125 -0.506936 0.09375\nv 0 -0.503117 0.09375\nv 0.120021 -0.507812 0.09375\nv 0.00688551 -0.5 0.09375\nv 0.0078125 -0.499617 0.09375\nv 0.015625 -0.495229 0.09375\nv 0.122968 -0.5 0.09375\nv 0.0204625 -0.492188 0.09375\nv 0.0234375 -0.491084 0.09375\nv 0.03125 -0.48875 0.09375\nv 0.0390625 -0.487108 0.09375\nv 0.046875 -0.485412 0.09375\nv 0.122167 -0.492188 0.09375\nv 0.117188 -0.487407 0.09375\nv 0.0504883 -0.484375 0.09375\nv 0.0546875 -0.483116 0.09375\nv 0.0625 -0.480704 0.09375\nv 0.0703125 -0.478372 0.09375\nv 0.113753 -0.484375 0.09375\nv 0.109375 -0.480178 0.09375\nv 0.0763968 -0.476562 0.09375\nv 0.078125 -0.476086 0.09375\nv 0.0859375 -0.474936 0.09375\nv 0.09375 -0.473955 0.09375\nv 0.105436 -0.476562 0.09375\nv 0.101562 -0.474216 0.09375\nv -0.289062 -0.0628005 0.09375\nv -0.28125 -0.0646916 0.09375\nv -0.273438 -0.0627697 0.09375\nv 0.453125 -0.0665211 0.09375\nv 0.460938 -0.0679386 0.09375\nv 0.46875 -0.0659042 0.09375\nv 0.476562 -0.0658106 0.09375\nv 0.484375 -0.0641091 0.09375\nv -0.28943 -0.0625 0.09375\nv -0.289062 -0.0625 0.0983719\nv -0.27315 -0.0625 0.09375\nv -0.273438 -0.0625 0.0976282\nv 0.448751 -0.0625 0.09375\nv 0.487547 -0.0625 0.09375\nv -0.294166 -0.0546875 0.09375\nv -0.268077 -0.0546875 0.09375\nv -0.265625 -0.0484576 0.09375\nv 0.446518 -0.0546875 0.09375\nv 0.445312 -0.0490603 0.09375\nv 0.491493 -0.0546875 0.09375\nv 0.492188 -0.0523858 0.09375\nv -0.296731 -0.046875 0.09375\nv -0.296875 -0.0461698 0.09375\nv -0.265138 -0.046875 0.09375\nv 0.444941 -0.046875 0.09375\nv 0.445312 -0.0429324 0.09375\nv 0.493462 -0.046875 0.09375\nv -0.298018 -0.0390625 0.09375\nv -0.263332 -0.0390625 0.09375\nv 0.44568 -0.0390625 0.09375\nv 0.445312 -0.0344799 0.09375\nv 0.495495 -0.0390625 0.09375\nv -0.298503 -0.03125 0.09375\nv -0.262209 -0.03125 0.09375\nv 0.445102 -0.03125 0.09375\nv 0.497689 -0.03125 0.09375\nv 0.5 -0.0247064 0.09375\nv -0.298805 -0.0234375 0.09375\nv -0.261731 -0.0234375 0.09375\nv 0.44467 -0.0234375 0.09375\nv 0.500379 -0.0234375 0.09375\nv -0.300297 -0.015625 0.09375\nv -0.260451 -0.015625 0.09375\nv 0.444157 -0.015625 0.09375\nv 0.501057 -0.015625 0.09375\nv -0.301826 -0.0078125 0.09375\nv -0.260279 -0.0078125 0.09375\nv 0.442301 -0.0078125 0.09375\nv 0.501038 -0.0078125 0.09375\nv -0.303516 0 0.09375\nv -0.260273 0 0.09375\nv 0.44106 0 0.09375\nv 0.50064 0 0.09375\nv -0.303496 0.0078125 0.09375\nv -0.25831 0.0078125 0.09375\nv -0.257812 0.00866544 0.09375\nv 0.441182 0.0078125 0.09375\nv 0.500502 0.0078125 0.09375\nv -0.30223 0.015625 0.09375\nv -0.251908 0.015625 0.09375\nv -0.25 0.0170321 0.09375\nv -0.242188 0.0184119 0.09375\nv -0.234375 0.0199052 0.09375\nv -0.226562 0.0226462 0.09375\nv 0.421875 0.0234159 0.09375\nv 0.429688 0.0215937 0.09375\nv 0.439545 0.015625 0.09375\nv 0.4375 0.0174285 0.09375\nv 0.500465 0.015625 0.09375\nv -0.301163 0.0234375 0.09375\nv -0.224013 0.0234375 0.09375\nv -0.21875 0.0248031 0.09375\nv -0.210938 0.0257197 0.09375\nv -0.203125 0.025862 0.09375\nv -0.195312 0.0259695 0.09375\nv -0.1875 0.0262758 0.09375\nv -0.179688 0.026548 0.09375\nv -0.171875 0.0266544 0.09375\nv -0.164062 0.0266579 0.09375\nv -0.15625 0.0267319 0.09375\nv -0.148438 0.0268517 0.09375\nv -0.140625 0.0269069 0.09375\nv -0.132812 0.0269689 0.09375\nv -0.125 0.0272666 0.09375\nv -0.117188 0.0272886 0.09375\nv -0.109375 0.0271063 0.09375\nv -0.101562 0.0268605 0.09375\nv -0.09375 0.026672 0.09375\nv -0.0859375 0.0266058 0.09375\nv -0.078125 0.0265767 0.09375\nv -0.0703125 0.0265115 0.09375\nv -0.0625 0.0264026 0.09375\nv -0.0546875 0.0262726 0.09375\nv -0.046875 0.0260935 0.09375\nv -0.0390625 0.0259463 0.09375\nv -0.03125 0.0258392 0.09375\nv -0.0234375 0.0257934 0.09375\nv -0.015625 0.0259164 0.09375\nv -0.0078125 0.0260969 0.09375\nv 0 0.0262287 0.09375\nv 0.0078125 0.026208 0.09375\nv 0.015625 0.0262977 0.09375\nv 0.0234375 0.0263538 0.09375\nv 0.03125 0.0263343 0.09375\nv 0.0390625 0.026263 0.09375\nv 0.046875 0.0261941 0.09375\nv 0.0546875 0.0261361 0.09375\nv 0.0625 0.0260221 0.09375\nv 0.0703125 0.0259096 0.09375\nv 0.078125 0.0258235 0.09375\nv 0.0859375 0.0257071 0.09375\nv 0.09375 0.0256093 0.09375\nv 0.101562 0.0254996 0.09375\nv 0.109375 0.0253778 0.09375\nv 0.117188 0.0252966 0.09375\nv 0.125 0.0252518 0.09375\nv 0.132812 0.0251882 0.09375\nv 0.140625 0.0250443 0.09375\nv 0.148438 0.0248592 0.09375\nv 0.15625 0.0246702 0.09375\nv 0.164062 0.0245166 0.09375\nv 0.171875 0.0243919 0.09375\nv 0.179688 0.0242446 0.09375\nv 0.1875 0.0240797 0.09375\nv 0.195312 0.0240263 0.09375\nv 0.203125 0.024048 0.09375\nv 0.210938 0.0240349 0.09375\nv 0.21875 0.0239805 0.09375\nv 0.226562 0.02399 0.09375\nv 0.234375 0.024098 0.09375\nv 0.242188 0.0242695 0.09375\nv 0.25 0.0244422 0.09375\nv 0.257812 0.0246557 0.09375\nv 0.265625 0.0248373 0.09375\nv 0.273438 0.0249795 0.09375\nv 0.28125 0.0251332 0.09375\nv 0.289062 0.0252614 0.09375\nv 0.296875 0.0253487 0.09375\nv 0.304688 0.0253829 0.09375\nv 0.3125 0.0256466 0.09375\nv 0.320312 0.0258789 0.09375\nv 0.328125 0.0261724 0.09375\nv 0.335938 0.0262872 0.09375\nv 0.34375 0.0263854 0.09375\nv 0.351562 0.0265183 0.09375\nv 0.359375 0.0266213 0.09375\nv 0.367188 0.0266407 0.09375\nv 0.375 0.0267011 0.09375\nv 0.382812 0.0267495 0.09375\nv 0.390625 0.0265396 0.09375\nv 0.398438 0.0261183 0.09375\nv 0.40625 0.025711 0.09375\nv 0.421802 0.0234375 0.09375\nv 0.414062 0.0251289 0.09375\nv 0.421875 0.0234375 0.0947414\nv 0.500116 0.0234375 0.09375\nv 0.5 0.0238231 0.09375\nv -0.299977 0.03125 0.09375\nv 0.497156 0.03125 0.09375\nv -0.298971 0.0390625 0.09375\nv -0.296875 0.0456143 0.09375\nv 0.494523 0.0390625 0.09375\nv 0.492188 0.0464731 0.09375\nv -0.296419 0.046875 0.09375\nv 0.492059 0.046875 0.09375\nv -0.293429 0.0546875 0.09375\nv 0.476562 0.0624634 0.09375\nv 0.489376 0.0546875 0.09375\nv 0.484375 0.0581824 0.09375\nv -0.29067 0.0625 0.09375\nv -0.289062 0.0653974 0.09375\nv 0.445312 0.069831 0.09375\nv 0.453125 0.067871 0.09375\nv 0.460938 0.0665528 0.09375\nv 0.476472 0.0625 0.09375\nv 0.46875 0.0656927 0.09375\nv -0.28402 0.0703125 0.09375\nv -0.28125 0.0721848 0.09375\nv -0.273438 0.0750927 0.09375\nv -0.234375 0.0777959 0.09375\nv -0.226562 0.0758842 0.09375\nv -0.21875 0.074598 0.09375\nv -0.210938 0.0737432 0.09375\nv -0.203125 0.0741142 0.09375\nv -0.195312 0.0745287 0.09375\nv -0.1875 0.0749993 0.09375\nv -0.179688 0.0752147 0.09375\nv -0.171875 0.0754069 0.09375\nv -0.164062 0.0754137 0.09375\nv -0.15625 0.0754321 0.09375\nv -0.148438 0.0754281 0.09375\nv -0.140625 0.0752275 0.09375\nv -0.132812 0.0750926 0.09375\nv -0.125 0.0750357 0.09375\nv -0.117188 0.0750435 0.09375\nv -0.109375 0.0749751 0.09375\nv -0.101562 0.0749216 0.09375\nv -0.09375 0.0748398 0.09375\nv -0.0859375 0.0747994 0.09375\nv -0.078125 0.0748145 0.09375\nv -0.0703125 0.0747189 0.09375\nv -0.0625 0.0745972 0.09375\nv -0.0546875 0.0744847 0.09375\nv -0.046875 0.0743771 0.09375\nv -0.0390625 0.0741839 0.09375\nv -0.03125 0.0739756 0.09375\nv -0.0234375 0.0737568 0.09375\nv -0.015625 0.0735038 0.09375\nv -0.0078125 0.0733713 0.09375\nv 0 0.0733076 0.09375\nv 0.0078125 0.0733021 0.09375\nv 0.015625 0.0733355 0.09375\nv 0.0234375 0.0733305 0.09375\nv 0.03125 0.0732999 0.09375\nv 0.0390625 0.0732899 0.09375\nv 0.046875 0.073291 0.09375\nv 0.0546875 0.0732891 0.09375\nv 0.0625 0.0732789 0.09375\nv 0.0703125 0.0732361 0.09375\nv 0.078125 0.0731886 0.09375\nv 0.0859375 0.0731648 0.09375\nv 0.09375 0.0731031 0.09375\nv 0.101562 0.0730273 0.09375\nv 0.109375 0.0729527 0.09375\nv 0.117188 0.072902 0.09375\nv 0.125 0.0729371 0.09375\nv 0.132812 0.0730516 0.09375\nv 0.140625 0.0730945 0.09375\nv 0.148438 0.073048 0.09375\nv 0.15625 0.0730302 0.09375\nv 0.164062 0.0730021 0.09375\nv 0.171875 0.072967 0.09375\nv 0.179688 0.0729966 0.09375\nv 0.1875 0.0730486 0.09375\nv 0.195312 0.0730926 0.09375\nv 0.203125 0.073123 0.09375\nv 0.210938 0.0731754 0.09375\nv 0.21875 0.0731812 0.09375\nv 0.226562 0.0731383 0.09375\nv 0.234375 0.073027 0.09375\nv 0.242188 0.0728726 0.09375\nv 0.25 0.0727606 0.09375\nv 0.257812 0.0726955 0.09375\nv 0.265625 0.0726896 0.09375\nv 0.273438 0.0727604 0.09375\nv 0.28125 0.0728549 0.09375\nv 0.289062 0.0730589 0.09375\nv 0.296875 0.073172 0.09375\nv 0.304688 0.0732596 0.09375\nv 0.3125 0.0733221 0.09375\nv 0.320312 0.0733767 0.09375\nv 0.328125 0.0734116 0.09375\nv 0.335938 0.0734559 0.09375\nv 0.34375 0.0734996 0.09375\nv 0.351562 0.0734991 0.09375\nv 0.359375 0.073493 0.09375\nv 0.367188 0.0734507 0.09375\nv 0.375 0.0732272 0.09375\nv 0.382812 0.0728692 0.09375\nv 0.390625 0.0725045 0.09375\nv 0.398438 0.0723586 0.09375\nv 0.40625 0.0722194 0.09375\nv 0.414062 0.0720643 0.09375\nv 0.421875 0.0718438 0.09375\nv 0.429688 0.0716 0.09375\nv 0.442262 0.0703125 0.09375\nv 0.4375 0.0710436 0.09375\nv -0.266767 0.078125 0.09375\nv -0.265625 0.0788115 0.09375\nv -0.257812 0.0827384 0.09375\nv -0.25 0.0823253 0.09375\nv -0.235419 0.078125 0.09375\nv -0.242188 0.0801555 0.09375\nv -0.234375 0.078125 0.100483\nv -0.273438 0.171856 0.09375\nv -0.265625 0.169814 0.09375\nv -0.273469 0.171875 0.09375\nv -0.28125 0.174795 0.09375\nv -0.273438 0.171875 0.0938431\nv -0.260993 0.171875 0.09375\nv -0.257812 0.174264 0.09375\nv -0.289054 0.179688 0.09375\nv -0.289062 0.179697 0.09375\nv -0.255806 0.179688 0.09375\nv -0.29525 0.1875 0.09375\nv -0.296875 0.189714 0.09375\nv -0.253061 0.1875 0.09375\nv -0.25 0.192636 0.09375\nv -0.299199 0.195312 0.09375\nv -0.248653 0.195312 0.09375\nv -0.300042 0.203125 0.09375\nv -0.246293 0.203125 0.09375\nv -0.30075 0.210938 0.09375\nv -0.244726 0.210938 0.09375\nv -0.30098 0.21875 0.09375\nv -0.244288 0.21875 0.09375\nv -0.301099 0.226562 0.09375\nv -0.243469 0.226562 0.09375\nv -0.301196 0.234375 0.09375\nv -0.242739 0.234375 0.09375\nv -0.301763 0.242188 0.09375\nv -0.242612 0.242188 0.09375\nv -0.302239 0.25 0.09375\nv -0.242426 0.25 0.09375\nv -0.302633 0.257812 0.09375\nv -0.242509 0.257812 0.09375\nv -0.302587 0.265625 0.09375\nv -0.242638 0.265625 0.09375\nv -0.302168 0.273438 0.09375\nv -0.242805 0.273438 0.09375\nv -0.30115 0.28125 0.09375\nv -0.243741 0.28125 0.09375\nv -0.299575 0.289062 0.09375\nv -0.244852 0.289062 0.09375\nv -0.297928 0.296875 0.09375\nv -0.246242 0.296875 0.09375\nv -0.29691 0.304688 0.09375\nv -0.296875 0.305102 0.09375\nv -0.296875 0.304688 0.0960279\nv -0.248575 0.304688 0.09375\nv -0.25 0.309538 0.09375\nv -0.296249 0.3125 0.09375\nv -0.250909 0.3125 0.09375\nv -0.295751 0.320312 0.09375\nv -0.251837 0.320312 0.09375\nv -0.295725 0.328125 0.09375\nv -0.253046 0.328125 0.09375\nv -0.295799 0.335938 0.09375\nv -0.25425 0.335938 0.09375\nv -0.295946 0.34375 0.09375\nv -0.255246 0.34375 0.09375\nv -0.296295 0.351562 0.09375\nv -0.256319 0.351562 0.09375\nv -0.2967 0.359375 0.09375\nv -0.257075 0.359375 0.09375\nv -0.257812 0.359375 0.099519\nv -0.296766 0.367188 0.09375\nv -0.257333 0.367188 0.09375\nv -0.257812 0.373035 0.09375\nv -0.257812 0.367188 0.0967287\nv -0.296797 0.375 0.09375\nv -0.296875 0.382793 0.09375\nv -0.257986 0.375 0.09375\nv -0.296875 0.382812 0.09375\nv -0.296875 0.382817 0.09375\nv -0.296875 0.382812 0.0937517\nv -0.259235 0.382812 0.09375\nv -0.296526 0.390625 0.09375\nv -0.260493 0.390625 0.09375\nv -0.296176 0.398438 0.09375\nv -0.262855 0.398438 0.09375\nv -0.265625 0.4042 0.09375\nv -0.265625 0.398438 0.100503\nv -0.296123 0.40625 0.09375\nv -0.26646 0.40625 0.09375\nv -0.296377 0.414062 0.09375\nv -0.2705 0.414062 0.09375\nv -0.273438 0.414062 0.0979504\nv -0.296495 0.421875 0.09375\nv -0.273369 0.421875 0.09375\nv -0.273438 0.422142 0.09375\nv -0.273438 0.421875 0.0938552\nv -0.29651 0.429688 0.09375\nv -0.275467 0.429688 0.09375\nv -0.28125 0.429688 0.100486\nv -0.296273 0.4375 0.09375\nv -0.289062 0.4375 0.100742\nv -0.276551 0.4375 0.09375\nv -0.28125 0.4375 0.0992662\nv -0.295744 0.445312 0.09375\nv -0.289062 0.445312 0.0995012\nv -0.277702 0.445312 0.09375\nv -0.28125 0.445312 0.0978129\nv -0.293923 0.453125 0.09375\nv -0.289062 0.46045 0.09375\nv -0.289062 0.453125 0.0970556\nv -0.280634 0.453125 0.09375\nv -0.28125 0.454722 0.09375\nv -0.28125 0.453125 0.0944049\nv -0.289062 0.521784 0.09375\nv -0.290568 0.523438 0.09375\nv -0.296875 0.53046 0.09375\nv -0.287637 0.523438 0.09375\nv -0.289062 0.523438 0.0944688\nv -0.297263 0.53125 0.09375\nv -0.296875 0.53125 0.0942798\nv -0.282147 0.53125 0.09375\nv -0.289062 0.53125 0.0981758\nv -0.28125 0.532316 0.09375\nv -0.300438 0.539062 0.09375\nv -0.296875 0.539062 0.100841\nv -0.279403 0.539062 0.09375\nv -0.28125 0.539062 0.0976077\nv -0.30266 0.546875 0.09375\nv -0.276338 0.546875 0.09375\nv -0.273438 0.553812 0.09375\nv -0.304362 0.554688 0.09375\nv -0.304688 0.556348 0.09375\nv -0.273112 0.554688 0.09375\nv -0.273438 0.554688 0.0946437\nv -0.30557 0.5625 0.09375\nv -0.271405 0.5625 0.09375\nv -0.306587 0.570312 0.09375\nv -0.27024 0.570312 0.09375\nv -0.30752 0.578125 0.09375\nv -0.270156 0.578125 0.09375\nv -0.308117 0.585938 0.09375\nv -0.270129 0.585938 0.09375\nv -0.308633 0.59375 0.09375\nv -0.270207 0.59375 0.09375\nv -0.308874 0.601562 0.09375\nv -0.270235 0.601562 0.09375\nv -0.309037 0.609375 0.09375\nv -0.270322 0.609375 0.09375\nv -0.309389 0.617188 0.09375\nv -0.270474 0.617188 0.09375\nv -0.311499 0.625 0.09375\nv -0.3125 0.629505 0.09375\nv -0.270589 0.625 0.09375\nv -0.313236 0.632812 0.09375\nv -0.270646 0.632812 0.09375\nv -0.31499 0.640625 0.09375\nv -0.271336 0.640625 0.09375\nv -0.316312 0.648438 0.09375\nv -0.272238 0.648438 0.09375\nv -0.317463 0.65625 0.09375\nv -0.273101 0.65625 0.09375\nv -0.273438 0.661108 0.09375\nv -0.31838 0.664062 0.09375\nv -0.273648 0.664062 0.09375\nv -0.273438 0.664062 0.0974714\nv -0.318916 0.671875 0.09375\nv -0.274134 0.671875 0.09375\nv -0.319499 0.679688 0.09375\nv -0.274821 0.679688 0.09375\nv -0.31998 0.6875 0.09375\nv -0.320312 0.693142 0.09375\nv -0.320312 0.6875 0.0996033\nv -0.275543 0.6875 0.09375\nv -0.320446 0.695312 0.09375\nv -0.275927 0.695312 0.09375\nv -0.320877 0.703125 0.09375\nv -0.2762 0.703125 0.09375\nv -0.321251 0.710938 0.09375\nv -0.276771 0.710938 0.09375\nv -0.32185 0.71875 0.09375\nv -0.277611 0.71875 0.09375\nv -0.322805 0.726562 0.09375\nv -0.278669 0.726562 0.09375\nv -0.32409 0.734375 0.09375\nv -0.279516 0.734375 0.09375\nv -0.32529 0.742188 0.09375\nv -0.280779 0.742188 0.09375\nv -0.28125 0.744895 0.09375\nv -0.32604 0.75 0.09375\nv -0.282234 0.75 0.09375\nv -0.326538 0.757812 0.09375\nv -0.283877 0.757812 0.09375\nv -0.327645 0.765625 0.09375\nv -0.328125 0.768324 0.09375\nv -0.285749 0.765625 0.09375\nv -0.328944 0.773438 0.09375\nv -0.287617 0.773438 0.09375\nv -0.289062 0.779261 0.09375\nv -0.33009 0.78125 0.09375\nv -0.28984 0.78125 0.09375\nv -0.330826 0.789062 0.09375\nv -0.294046 0.789062 0.09375\nv -0.296875 0.794536 0.09375\nv -0.33154 0.796875 0.09375\nv -0.298327 0.796875 0.09375\nv -0.304688 0.80446 0.09375\nv -0.330535 0.804688 0.09375\nv -0.328125 0.809904 0.09375\nv -0.304876 0.804688 0.09375\nv -0.3125 0.810702 0.09375\nv -0.323842 0.8125 0.09375\nv -0.3171 0.8125 0.09375\nv -0.320312 0.813727 0.09375\nv -0.320312 0.8125 0.0965246\nv 0.015625 -0.53911 0.101562\nv 0.0234375 -0.540492 0.101562\nv 0.03125 -0.541515 0.101562\nv 0.0390625 -0.542196 0.101562\nv 0.046875 -0.542555 0.101562\nv 0.0546875 -0.542262 0.101562\nv 0.0625 -0.541688 0.101562\nv 0.0703125 -0.540803 0.101562\nv 0.078125 -0.539318 0.101562\nv 0 -0.532555 0.101562\nv 0.0154262 -0.539062 0.101562\nv 0.0078125 -0.535976 0.101562\nv 0.0787759 -0.539062 0.101562\nv 0.0859375 -0.535824 0.101562\nv 0.09375 -0.532106 0.101562\nv -0.00271313 -0.53125 0.101562\nv -0.0078125 -0.526428 0.101562\nv 0.0951199 -0.53125 0.101562\nv 0.101562 -0.527022 0.101562\nv -0.0106552 -0.523438 0.101562\nv 0.106177 -0.523438 0.101562\nv 0.109375 -0.520303 0.101562\nv -0.0135938 -0.515625 0.101562\nv 0.113944 -0.515625 0.101562\nv 0.117188 -0.511521 0.101562\nv -0.0111925 -0.507812 0.101562\nv -0.0078125 -0.505912 0.101562\nv 0 -0.502208 0.101562\nv 0.120149 -0.507812 0.101562\nv 0.00502711 -0.5 0.101562\nv 0.0078125 -0.498883 0.101562\nv 0.015625 -0.4949 0.101562\nv 0.122742 -0.5 0.101562\nv 0.0209218 -0.492188 0.101562\nv 0.0234375 -0.491408 0.101562\nv 0.03125 -0.489256 0.101562\nv 0.0390625 -0.487627 0.101562\nv 0.046875 -0.485862 0.101562\nv 0.120961 -0.492188 0.101562\nv 0.117188 -0.488522 0.101562\nv 0.0523964 -0.484375 0.101562\nv 0.0546875 -0.483729 0.101562\nv 0.0625 -0.48118 0.101562\nv 0.0703125 -0.478841 0.101562\nv 0.112949 -0.484375 0.101562\nv 0.109375 -0.480614 0.101562\nv 0.0778563 -0.476562 0.101562\nv 0.078125 -0.476486 0.101562\nv 0.078125 -0.476562 0.10272\nv 0.0859375 -0.475188 0.101562\nv 0.09375 -0.474207 0.101562\nv 0.103883 -0.476562 0.101562\nv 0.101562 -0.475458 0.101562\nv -0.28125 -0.0642002 0.101562\nv 0.453125 -0.0663028 0.101562\nv 0.460938 -0.0677965 0.101562\nv 0.46875 -0.0657116 0.101562\nv 0.476562 -0.0655517 0.101562\nv 0.484375 -0.0638287 0.101562\nv -0.288318 -0.0625 0.101562\nv -0.289062 -0.0622154 0.101562\nv -0.274509 -0.0625 0.101562\nv -0.273438 -0.0621462 0.101562\nv 0.449069 -0.0625 0.101562\nv 0.486979 -0.0625 0.101562\nv -0.293859 -0.0546875 0.101562\nv -0.26855 -0.0546875 0.101562\nv -0.265625 -0.0474191 0.101562\nv 0.446839 -0.0546875 0.101562\nv 0.445312 -0.0469175 0.101562\nv 0.491045 -0.0546875 0.101562\nv 0.492188 -0.0512357 0.101562\nv -0.296479 -0.046875 0.101562\nv -0.296875 -0.0448625 0.101562\nv -0.265455 -0.046875 0.101562\nv -0.265625 -0.046875 0.108218\nv 0.445306 -0.046875 0.101562\nv 0.445312 -0.0467842 0.101562\nv 0.445312 -0.046875 0.101733\nv 0.49333 -0.046875 0.101562\nv -0.297765 -0.0390625 0.101562\nv -0.263426 -0.0390625 0.101562\nv 0.445893 -0.0390625 0.101562\nv 0.445312 -0.0323389 0.101562\nv 0.495381 -0.0390625 0.101562\nv -0.298289 -0.03125 0.101562\nv -0.262282 -0.03125 0.101562\nv 0.445235 -0.03125 0.101562\nv 0.445312 -0.03125 0.105366\nv 0.497488 -0.03125 0.101562\nv 0.5 -0.0241075 0.101562\nv -0.298567 -0.0234375 0.101562\nv -0.261748 -0.0234375 0.101562\nv 0.444653 -0.0234375 0.101562\nv 0.500199 -0.0234375 0.101562\nv -0.300118 -0.015625 0.101562\nv -0.260576 -0.015625 0.101562\nv 0.444214 -0.015625 0.101562\nv 0.500965 -0.015625 0.101562\nv -0.301638 -0.0078125 0.101562\nv -0.260521 -0.0078125 0.101562\nv 0.442361 -0.0078125 0.101562\nv 0.500941 -0.0078125 0.101562\nv -0.303463 0 0.101562\nv -0.260382 0 0.101562\nv 0.441196 0 0.101562\nv 0.50058 0 0.101562\nv -0.303441 0.0078125 0.101562\nv -0.25842 0.0078125 0.101562\nv -0.257812 0.00885828 0.101562\nv 0.441437 0.0078125 0.101562\nv 0.500454 0.0078125 0.101562\nv -0.302213 0.015625 0.101562\nv -0.252325 0.015625 0.101562\nv -0.25 0.0174137 0.101562\nv -0.242188 0.018787 0.101562\nv -0.234375 0.0201369 0.101562\nv -0.226562 0.0228205 0.101562\nv 0.429688 0.0217567 0.101562\nv 0.439766 0.015625 0.101562\nv 0.4375 0.0176015 0.101562\nv 0.500522 0.015625 0.101562\nv -0.301172 0.0234375 0.101562\nv -0.224625 0.0234375 0.101562\nv -0.21875 0.0249954 0.101562\nv -0.210938 0.0259308 0.101562\nv -0.203125 0.0260544 0.101562\nv -0.195312 0.0260886 0.101562\nv -0.1875 0.0264107 0.101562\nv -0.179688 0.0266866 0.101562\nv -0.171875 0.0266933 0.101562\nv -0.164062 0.0267102 0.101562\nv -0.15625 0.0267922 0.101562\nv -0.148438 0.0269081 0.101562\nv -0.140625 0.0269326 0.101562\nv -0.132812 0.0269719 0.101562\nv -0.125 0.0272103 0.101562\nv -0.117188 0.0272462 0.101562\nv -0.109375 0.0270876 0.101562\nv -0.101562 0.0268689 0.101562\nv -0.09375 0.0266699 0.101562\nv -0.0859375 0.0265919 0.101562\nv -0.078125 0.0265326 0.101562\nv -0.0703125 0.0264643 0.101562\nv -0.0625 0.0263335 0.101562\nv -0.0546875 0.0261958 0.101562\nv -0.046875 0.0260221 0.101562\nv -0.0390625 0.0258973 0.101562\nv -0.03125 0.0258397 0.101562\nv -0.0234375 0.0258147 0.101562\nv -0.015625 0.0259685 0.101562\nv -0.0078125 0.026146 0.101562\nv 0 0.0262975 0.101562\nv 0.0078125 0.0263087 0.101562\nv 0.015625 0.0264015 0.101562\nv 0.0234375 0.0264672 0.101562\nv 0.03125 0.0263946 0.101562\nv 0.0390625 0.026307 0.101562\nv 0.046875 0.0262253 0.101562\nv 0.0546875 0.0260919 0.101562\nv 0.0625 0.0259662 0.101562\nv 0.0703125 0.0258363 0.101562\nv 0.078125 0.0257719 0.101562\nv 0.0859375 0.0256757 0.101562\nv 0.09375 0.0255432 0.101562\nv 0.101562 0.0254168 0.101562\nv 0.109375 0.0252911 0.101562\nv 0.117188 0.0251737 0.101562\nv 0.125 0.0251145 0.101562\nv 0.132812 0.0250483 0.101562\nv 0.140625 0.0249228 0.101562\nv 0.148438 0.0247691 0.101562\nv 0.15625 0.0245503 0.101562\nv 0.164062 0.0243462 0.101562\nv 0.171875 0.0242307 0.101562\nv 0.179688 0.024082 0.101562\nv 0.1875 0.0239432 0.101562\nv 0.195312 0.0238771 0.101562\nv 0.203125 0.0238854 0.101562\nv 0.210938 0.0239175 0.101562\nv 0.21875 0.0238653 0.101562\nv 0.226562 0.0239322 0.101562\nv 0.234375 0.0240668 0.101562\nv 0.242188 0.0242395 0.101562\nv 0.25 0.0244261 0.101562\nv 0.257812 0.0246599 0.101562\nv 0.265625 0.0248298 0.101562\nv 0.273438 0.0249581 0.101562\nv 0.28125 0.025099 0.101562\nv 0.289062 0.0252363 0.101562\nv 0.296875 0.0253485 0.101562\nv 0.304688 0.0254434 0.101562\nv 0.3125 0.0255207 0.101562\nv 0.320312 0.0258179 0.101562\nv 0.328125 0.0261316 0.101562\nv 0.335938 0.0262807 0.101562\nv 0.34375 0.0264043 0.101562\nv 0.351562 0.0265646 0.101562\nv 0.359375 0.0266866 0.101562\nv 0.367188 0.0267075 0.101562\nv 0.375 0.0267765 0.101562\nv 0.382812 0.0268249 0.101562\nv 0.390625 0.0266155 0.101562\nv 0.398438 0.0261789 0.101562\nv 0.40625 0.0257675 0.101562\nv 0.414062 0.0251893 0.101562\nv 0.422566 0.0234375 0.101562\nv 0.421875 0.0235619 0.101562\nv 0.500177 0.0234375 0.101562\nv 0.5 0.0240178 0.101562\nv -0.300015 0.03125 0.101562\nv 0.497167 0.03125 0.101562\nv -0.299088 0.0390625 0.101562\nv -0.296875 0.0460142 0.101562\nv 0.494459 0.0390625 0.101562\nv 0.492188 0.0460402 0.101562\nv -0.296562 0.046875 0.101562\nv 0.491911 0.046875 0.101562\nv -0.293554 0.0546875 0.101562\nv 0.476562 0.0624467 0.101562\nv 0.489197 0.0546875 0.101562\nv 0.484375 0.058091 0.101562\nv -0.290657 0.0625 0.101562\nv -0.289062 0.065831 0.101562\nv 0.445312 0.069788 0.101562\nv 0.453125 0.0678163 0.101562\nv 0.460938 0.0664954 0.101562\nv 0.476428 0.0625 0.101562\nv 0.46875 0.0655936 0.101562\nv -0.284307 0.0703125 0.101562\nv -0.28125 0.0723096 0.101562\nv -0.273438 0.0755082 0.101562\nv -0.226562 0.0761495 0.101562\nv -0.21875 0.0747926 0.101562\nv -0.210938 0.073892 0.101562\nv -0.203125 0.0742207 0.101562\nv -0.195312 0.0746208 0.101562\nv -0.1875 0.0750984 0.101562\nv -0.179688 0.0753217 0.101562\nv -0.171875 0.075479 0.101562\nv -0.164062 0.0754478 0.101562\nv -0.15625 0.0754427 0.101562\nv -0.148438 0.07543 0.101562\nv -0.140625 0.0751654 0.101562\nv -0.132812 0.0749727 0.101562\nv -0.125 0.0748801 0.101562\nv -0.117188 0.074951 0.101562\nv -0.109375 0.0748994 0.101562\nv -0.101562 0.0748563 0.101562\nv -0.09375 0.0747839 0.101562\nv -0.0859375 0.0747503 0.101562\nv -0.078125 0.0747924 0.101562\nv -0.0703125 0.0747504 0.101562\nv -0.0625 0.0745917 0.101562\nv -0.0546875 0.0744915 0.101562\nv -0.046875 0.0743288 0.101562\nv -0.0390625 0.074091 0.101562\nv -0.03125 0.0738736 0.101562\nv -0.0234375 0.0736616 0.101562\nv -0.015625 0.0734374 0.101562\nv -0.0078125 0.0733432 0.101562\nv 0 0.0732492 0.101562\nv 0.0078125 0.0732244 0.101562\nv 0.015625 0.0732324 0.101562\nv 0.0234375 0.0732089 0.101562\nv 0.03125 0.0731849 0.101562\nv 0.0390625 0.0731894 0.101562\nv 0.046875 0.0731769 0.101562\nv 0.0546875 0.0731733 0.101562\nv 0.0625 0.07315 0.101562\nv 0.0703125 0.0730964 0.101562\nv 0.078125 0.0730977 0.101562\nv 0.0859375 0.0730976 0.101562\nv 0.09375 0.0730209 0.101562\nv 0.101562 0.0729564 0.101562\nv 0.109375 0.0728865 0.101562\nv 0.117188 0.072811 0.101562\nv 0.125 0.0728 0.101562\nv 0.132812 0.0728803 0.101562\nv 0.140625 0.0729911 0.101562\nv 0.148438 0.0730195 0.101562\nv 0.15625 0.0729847 0.101562\nv 0.164062 0.0729502 0.101562\nv 0.171875 0.0729098 0.101562\nv 0.179688 0.0728907 0.101562\nv 0.1875 0.0728717 0.101562\nv 0.195312 0.0728865 0.101562\nv 0.203125 0.0729479 0.101562\nv 0.210938 0.0730015 0.101562\nv 0.21875 0.0730567 0.101562\nv 0.226562 0.0730369 0.101562\nv 0.234375 0.0729751 0.101562\nv 0.242188 0.0728124 0.101562\nv 0.25 0.0726927 0.101562\nv 0.257812 0.072638 0.101562\nv 0.265625 0.07266 0.101562\nv 0.273438 0.0727756 0.101562\nv 0.28125 0.0728202 0.101562\nv 0.289062 0.0729709 0.101562\nv 0.296875 0.0731333 0.101562\nv 0.304688 0.073264 0.101562\nv 0.3125 0.0733554 0.101562\nv 0.320312 0.0734244 0.101562\nv 0.328125 0.0734808 0.101562\nv 0.335938 0.0735461 0.101562\nv 0.34375 0.073587 0.101562\nv 0.351562 0.0735648 0.101562\nv 0.359375 0.0735342 0.101562\nv 0.367188 0.0734728 0.101562\nv 0.375 0.0732638 0.101562\nv 0.382812 0.0729299 0.101562\nv 0.390625 0.0725606 0.101562\nv 0.398438 0.0724137 0.101562\nv 0.40625 0.0722732 0.101562\nv 0.414062 0.0721216 0.101562\nv 0.421875 0.0719088 0.101562\nv 0.429688 0.0716442 0.101562\nv 0.442246 0.0703125 0.101562\nv 0.4375 0.0710933 0.101562\nv -0.266742 0.078125 0.101562\nv -0.265625 0.07874 0.101562\nv -0.257812 0.0835937 0.101562\nv -0.25 0.0829607 0.101562\nv -0.242188 0.0807775 0.101562\nv -0.234182 0.078125 0.101562\nv -0.234375 0.0781842 0.101562\nv -0.265625 0.171243 0.101562\nv -0.28125 0.175978 0.101562\nv -0.267705 0.171875 0.101562\nv -0.273438 0.173096 0.101562\nv -0.264392 0.171875 0.101562\nv -0.265625 0.171875 0.105915\nv -0.257812 0.177443 0.101562\nv -0.287784 0.179688 0.101562\nv -0.289062 0.180955 0.101562\nv -0.25697 0.179688 0.101562\nv -0.294969 0.1875 0.101562\nv -0.296875 0.190166 0.101562\nv -0.253525 0.1875 0.101562\nv -0.25 0.192736 0.101562\nv -0.29898 0.195312 0.101562\nv -0.248696 0.195312 0.101562\nv -0.300091 0.203125 0.101562\nv -0.246091 0.203125 0.101562\nv -0.30081 0.210938 0.101562\nv -0.244567 0.210938 0.101562\nv -0.301083 0.21875 0.101562\nv -0.243904 0.21875 0.101562\nv -0.301139 0.226562 0.101562\nv -0.243074 0.226562 0.101562\nv -0.301298 0.234375 0.101562\nv -0.242656 0.234375 0.101562\nv -0.301833 0.242188 0.101562\nv -0.242484 0.242188 0.101562\nv -0.242188 0.242188 0.107362\nv -0.302269 0.25 0.101562\nv -0.242304 0.25 0.101562\nv -0.242188 0.25 0.103439\nv -0.302596 0.257812 0.101562\nv -0.242305 0.257812 0.101562\nv -0.242188 0.257812 0.104562\nv -0.302564 0.265625 0.101562\nv -0.242419 0.265625 0.101562\nv -0.302152 0.273438 0.101562\nv -0.242543 0.273438 0.101562\nv -0.300959 0.28125 0.101562\nv -0.243627 0.28125 0.101562\nv -0.299337 0.289062 0.101562\nv -0.244772 0.289062 0.101562\nv -0.297652 0.296875 0.101562\nv -0.296875 0.303932 0.101562\nv -0.246467 0.296875 0.101562\nv -0.29679 0.304688 0.101562\nv -0.249151 0.304688 0.101562\nv -0.25 0.307463 0.101562\nv -0.296191 0.3125 0.101562\nv -0.251546 0.3125 0.101562\nv -0.295684 0.320312 0.101562\nv -0.252441 0.320312 0.101562\nv -0.295569 0.328125 0.101562\nv -0.253797 0.328125 0.101562\nv -0.295532 0.335938 0.101562\nv -0.255147 0.335938 0.101562\nv -0.2956 0.34375 0.101562\nv -0.256261 0.34375 0.101562\nv -0.295839 0.351562 0.101562\nv -0.257231 0.351562 0.101562\nv -0.257812 0.356992 0.101562\nv -0.257812 0.351562 0.105844\nv -0.296207 0.359375 0.101562\nv -0.25807 0.359375 0.101562\nv -0.296209 0.367188 0.101562\nv -0.258613 0.367188 0.101562\nv -0.296153 0.375 0.101562\nv -0.259239 0.375 0.101562\nv -0.295995 0.382812 0.101562\nv -0.260626 0.382812 0.101562\nv -0.295331 0.390625 0.101562\nv -0.262087 0.390625 0.101562\nv -0.265625 0.397496 0.101562\nv -0.294615 0.398438 0.101562\nv -0.266065 0.398438 0.101562\nv -0.294044 0.40625 0.101562\nv -0.289062 0.40625 0.10705\nv -0.271924 0.40625 0.101562\nv -0.273438 0.408665 0.101562\nv -0.273438 0.40625 0.104421\nv -0.29295 0.414062 0.101562\nv -0.289062 0.414062 0.104489\nv -0.277343 0.414062 0.101562\nv -0.28125 0.414062 0.106478\nv -0.291068 0.421875 0.101562\nv -0.289062 0.421875 0.102688\nv -0.280649 0.421875 0.101562\nv -0.28125 0.424389 0.101562\nv -0.28125 0.421875 0.102396\nv -0.289138 0.429688 0.101562\nv -0.288837 0.429688 0.101562\nv -0.289062 0.430036 0.101562\nv -0.289062 0.429688 0.1016\nv -0.289062 0.53579 0.101562\nv -0.295698 0.539062 0.101562\nv -0.296875 0.539735 0.101562\nv -0.285969 0.539062 0.101562\nv -0.289062 0.539062 0.103888\nv -0.28125 0.543432 0.101562\nv -0.301331 0.546875 0.101562\nv -0.279793 0.546875 0.101562\nv -0.28125 0.546875 0.104499\nv -0.303957 0.554688 0.101562\nv -0.304688 0.557951 0.101562\nv -0.276242 0.554688 0.101562\nv -0.273438 0.561162 0.101562\nv -0.305337 0.5625 0.101562\nv -0.272952 0.5625 0.101562\nv -0.273438 0.5625 0.102542\nv -0.306366 0.570312 0.101562\nv -0.271843 0.570312 0.101562\nv -0.273438 0.570312 0.10529\nv -0.307379 0.578125 0.101562\nv -0.271406 0.578125 0.101562\nv -0.273438 0.578125 0.107613\nv -0.308135 0.585938 0.101562\nv -0.27117 0.585938 0.101562\nv -0.273438 0.585938 0.109368\nv -0.308816 0.59375 0.101562\nv -0.271167 0.59375 0.101562\nv -0.309296 0.601562 0.101562\nv -0.27108 0.601562 0.101562\nv -0.309698 0.609375 0.101562\nv -0.270985 0.609375 0.101562\nv -0.310147 0.617188 0.101562\nv -0.271035 0.617188 0.101562\nv -0.312294 0.625 0.101562\nv -0.3125 0.625878 0.101562\nv -0.3125 0.625 0.10321\nv -0.270994 0.625 0.101562\nv -0.314114 0.632812 0.101562\nv -0.270926 0.632812 0.101562\nv -0.315806 0.640625 0.101562\nv -0.271434 0.640625 0.101562\nv -0.317008 0.648438 0.101562\nv -0.27199 0.648438 0.101562\nv -0.318129 0.65625 0.101562\nv -0.272646 0.65625 0.101562\nv -0.318988 0.664062 0.101562\nv -0.273221 0.664062 0.101562\nv -0.273438 0.667178 0.101562\nv -0.319446 0.671875 0.101562\nv -0.273779 0.671875 0.101562\nv -0.319923 0.679688 0.101562\nv -0.320312 0.685776 0.101562\nv -0.274476 0.679688 0.101562\nv -0.320427 0.6875 0.101562\nv -0.275204 0.6875 0.101562\nv -0.320894 0.695312 0.101562\nv -0.275673 0.695312 0.101562\nv -0.321299 0.703125 0.101562\nv -0.276068 0.703125 0.101562\nv -0.321603 0.710938 0.101562\nv -0.276651 0.710938 0.101562\nv -0.322113 0.71875 0.101562\nv -0.277467 0.71875 0.101562\nv -0.322972 0.726562 0.101562\nv -0.278537 0.726562 0.101562\nv -0.324193 0.734375 0.101562\nv -0.279498 0.734375 0.101562\nv -0.325255 0.742188 0.101562\nv -0.280778 0.742188 0.101562\nv -0.28125 0.745012 0.101562\nv -0.325918 0.75 0.101562\nv -0.282182 0.75 0.101562\nv -0.326405 0.757812 0.101562\nv -0.284033 0.757812 0.101562\nv -0.327507 0.765625 0.101562\nv -0.328125 0.769078 0.101562\nv -0.285939 0.765625 0.101562\nv -0.328803 0.773438 0.101562\nv -0.287755 0.773438 0.101562\nv -0.289062 0.778149 0.101562\nv -0.329847 0.78125 0.101562\nv -0.290426 0.78125 0.101562\nv -0.330461 0.789062 0.101562\nv -0.294957 0.789062 0.101562\nv -0.296875 0.792388 0.101562\nv -0.33096 0.796875 0.101562\nv -0.300121 0.796875 0.101562\nv -0.304688 0.800811 0.101562\nv -0.32943 0.804688 0.101562\nv -0.328125 0.806732 0.101562\nv -0.328125 0.804688 0.105423\nv -0.320312 0.810189 0.101562\nv -0.308617 0.804688 0.101562\nv -0.3125 0.807695 0.101562\nv -0.3125 0.804688 0.109353\nv 0.015625 -0.539491 0.109375\nv 0.0234375 -0.540819 0.109375\nv 0.03125 -0.54178 0.109375\nv 0.0390625 -0.542386 0.109375\nv 0.046875 -0.542719 0.109375\nv 0.0546875 -0.542716 0.109375\nv 0.0625 -0.542352 0.109375\nv 0.0703125 -0.541423 0.109375\nv 0.078125 -0.540025 0.109375\nv 0 -0.532789 0.109375\nv 0.0139339 -0.539062 0.109375\nv 0.0078125 -0.536394 0.109375\nv 0.0805254 -0.539062 0.109375\nv 0.0859375 -0.536319 0.109375\nv 0.09375 -0.53204 0.109375\nv -0.00312261 -0.53125 0.109375\nv -0.0078125 -0.526613 0.109375\nv 0.095047 -0.53125 0.109375\nv 0.101562 -0.526942 0.109375\nv -0.0110291 -0.523438 0.109375\nv 0.106304 -0.523438 0.109375\nv 0.109375 -0.52039 0.109375\nv -0.015161 -0.515625 0.109375\nv -0.015625 -0.515625 0.113979\nv 0.114311 -0.515625 0.109375\nv 0.117188 -0.511971 0.109375\nv -0.0122831 -0.507812 0.109375\nv -0.0078125 -0.5054 0.109375\nv 0 -0.501681 0.109375\nv 0.120495 -0.507812 0.109375\nv 0.00451299 -0.5 0.109375\nv 0.0078125 -0.49893 0.109375\nv 0.015625 -0.495546 0.109375\nv 0.122491 -0.5 0.109375\nv 0.0231399 -0.492188 0.109375\nv 0.0234375 -0.492104 0.109375\nv 0.0234375 -0.492188 0.110237\nv 0.03125 -0.489902 0.109375\nv 0.0390625 -0.488127 0.109375\nv 0.046875 -0.48635 0.109375\nv 0.119914 -0.492188 0.109375\nv 0.117188 -0.489069 0.109375\nv 0.0543786 -0.484375 0.109375\nv 0.0546875 -0.484294 0.109375\nv 0.0546875 -0.484375 0.110587\nv 0.0625 -0.481816 0.109375\nv 0.0703125 -0.479387 0.109375\nv 0.078125 -0.477066 0.109375\nv 0.112503 -0.484375 0.109375\nv 0.109375 -0.48134 0.109375\nv 0.0806491 -0.476562 0.109375\nv 0.0859375 -0.475557 0.109375\nv 0.09375 -0.475154 0.109375\nv 0.09375 -0.476562 0.11688\nv 0.101566 -0.476562 0.109375\nv 0.101562 -0.476561 0.109375\nv 0.101562 -0.476562 0.109383\nv -0.28125 -0.0636482 0.109375\nv 0.453125 -0.0660682 0.109375\nv 0.460938 -0.0676453 0.109375\nv 0.46875 -0.0655024 0.109375\nv 0.476562 -0.0652744 0.109375\nv 0.484375 -0.0634282 0.109375\nv -0.286203 -0.0625 0.109375\nv -0.289062 -0.0614533 0.109375\nv -0.276749 -0.0625 0.109375\nv -0.273438 -0.0613946 0.109375\nv 0.449345 -0.0625 0.109375\nv 0.486251 -0.0625 0.109375\nv -0.293514 -0.0546875 0.109375\nv -0.268965 -0.0546875 0.109375\nv 0.447081 -0.0546875 0.109375\nv 0.490901 -0.0546875 0.109375\nv 0.492188 -0.0509728 0.109375\nv -0.296184 -0.046875 0.109375\nv -0.296875 -0.0435644 0.109375\nv -0.265656 -0.046875 0.109375\nv -0.265625 -0.0467772 0.109375\nv 0.445662 -0.046875 0.109375\nv 0.493304 -0.046875 0.109375\nv -0.2976 -0.0390625 0.109375\nv -0.263396 -0.0390625 0.109375\nv 0.446145 -0.0390625 0.109375\nv 0.495324 -0.0390625 0.109375\nv -0.298144 -0.03125 0.109375\nv -0.262254 -0.03125 0.109375\nv 0.445403 -0.03125 0.109375\nv 0.445312 -0.0305186 0.109375\nv 0.497321 -0.03125 0.109375\nv 0.5 -0.0237503 0.109375\nv -0.298347 -0.0234375 0.109375\nv -0.261703 -0.0234375 0.109375\nv 0.444626 -0.0234375 0.109375\nv 0.500094 -0.0234375 0.109375\nv 0.5 -0.0234375 0.116323\nv -0.299926 -0.015625 0.109375\nv -0.260649 -0.015625 0.109375\nv 0.444254 -0.015625 0.109375\nv 0.500913 -0.015625 0.109375\nv -0.30157 -0.0078125 0.109375\nv -0.260638 -0.0078125 0.109375\nv 0.442453 -0.0078125 0.109375\nv 0.500882 -0.0078125 0.109375\nv -0.303432 0 0.109375\nv -0.260383 0 0.109375\nv 0.441315 0 0.109375\nv 0.500559 0 0.109375\nv -0.303459 0.0078125 0.109375\nv -0.258411 0.0078125 0.109375\nv -0.257812 0.00886208 0.109375\nv 0.441686 0.0078125 0.109375\nv 0.500445 0.0078125 0.109375\nv -0.302203 0.015625 0.109375\nv -0.25279 0.015625 0.109375\nv -0.25 0.0178749 0.109375\nv -0.242188 0.0191518 0.109375\nv -0.234375 0.0204162 0.109375\nv -0.226562 0.0230011 0.109375\nv 0.429688 0.0219378 0.109375\nv 0.440051 0.015625 0.109375\nv 0.4375 0.0178362 0.109375\nv 0.500528 0.015625 0.109375\nv -0.301175 0.0234375 0.109375\nv -0.225234 0.0234375 0.109375\nv -0.21875 0.0252059 0.109375\nv -0.210938 0.0261337 0.109375\nv -0.203125 0.0262565 0.109375\nv -0.195312 0.0263217 0.109375\nv -0.1875 0.0266209 0.109375\nv -0.179688 0.0268333 0.109375\nv -0.171875 0.0267741 0.109375\nv -0.164062 0.0267666 0.109375\nv -0.15625 0.0268811 0.109375\nv -0.148438 0.0269749 0.109375\nv -0.140625 0.0269737 0.109375\nv -0.132812 0.0270079 0.109375\nv -0.125 0.0271816 0.109375\nv -0.117188 0.0272398 0.109375\nv -0.109375 0.0270899 0.109375\nv -0.101562 0.0268852 0.109375\nv -0.09375 0.0267081 0.109375\nv -0.0859375 0.0266355 0.109375\nv -0.078125 0.0265578 0.109375\nv -0.0703125 0.026462 0.109375\nv -0.0625 0.0263005 0.109375\nv -0.0546875 0.0261285 0.109375\nv -0.046875 0.025981 0.109375\nv -0.0390625 0.0258925 0.109375\nv -0.03125 0.0258255 0.109375\nv -0.0234375 0.025873 0.109375\nv -0.015625 0.0260171 0.109375\nv -0.0078125 0.0261829 0.109375\nv 0 0.0263381 0.109375\nv 0.0078125 0.0263855 0.109375\nv 0.015625 0.0264703 0.109375\nv 0.0234375 0.0265197 0.109375\nv 0.03125 0.0264036 0.109375\nv 0.0390625 0.0262819 0.109375\nv 0.046875 0.0261463 0.109375\nv 0.0546875 0.0259939 0.109375\nv 0.0625 0.0258267 0.109375\nv 0.0703125 0.0257434 0.109375\nv 0.078125 0.0256397 0.109375\nv 0.0859375 0.0255434 0.109375\nv 0.09375 0.0253934 0.109375\nv 0.101562 0.0252455 0.109375\nv 0.109375 0.0251257 0.109375\nv 0.117188 0.0249935 0.109375\nv 0.125 0.0248889 0.109375\nv 0.132812 0.0248123 0.109375\nv 0.140625 0.0246896 0.109375\nv 0.148438 0.0245846 0.109375\nv 0.15625 0.0244069 0.109375\nv 0.164062 0.0241894 0.109375\nv 0.171875 0.0240403 0.109375\nv 0.179688 0.0238612 0.109375\nv 0.1875 0.0237341 0.109375\nv 0.195312 0.0236596 0.109375\nv 0.203125 0.023668 0.109375\nv 0.210938 0.0236805 0.109375\nv 0.21875 0.0237141 0.109375\nv 0.226562 0.0238344 0.109375\nv 0.234375 0.0239727 0.109375\nv 0.242188 0.0241371 0.109375\nv 0.25 0.0243291 0.109375\nv 0.257812 0.0245669 0.109375\nv 0.265625 0.0247376 0.109375\nv 0.273438 0.0248842 0.109375\nv 0.28125 0.0250372 0.109375\nv 0.289062 0.0251758 0.109375\nv 0.296875 0.025295 0.109375\nv 0.304688 0.0254144 0.109375\nv 0.3125 0.0254963 0.109375\nv 0.320312 0.0257182 0.109375\nv 0.328125 0.0260758 0.109375\nv 0.335938 0.0262329 0.109375\nv 0.34375 0.026383 0.109375\nv 0.351562 0.0265589 0.109375\nv 0.359375 0.026703 0.109375\nv 0.367188 0.0267333 0.109375\nv 0.375 0.0268139 0.109375\nv 0.382812 0.0268667 0.109375\nv 0.390625 0.0266649 0.109375\nv 0.398438 0.0262378 0.109375\nv 0.40625 0.0258251 0.109375\nv 0.414062 0.0252367 0.109375\nv 0.423373 0.0234375 0.109375\nv 0.421875 0.0237105 0.109375\nv 0.500301 0.0234375 0.109375\nv 0.5 0.0244209 0.109375\nv -0.300066 0.03125 0.109375\nv 0.497262 0.03125 0.109375\nv -0.29919 0.0390625 0.109375\nv -0.296875 0.0462237 0.109375\nv 0.494359 0.0390625 0.109375\nv 0.492188 0.0455644 0.109375\nv -0.296633 0.046875 0.109375\nv 0.491749 0.046875 0.109375\nv -0.293606 0.0546875 0.109375\nv 0.476562 0.0622159 0.109375\nv 0.488943 0.0546875 0.109375\nv 0.484375 0.0579459 0.109375\nv -0.290887 0.0625 0.109375\nv -0.289062 0.0666673 0.109375\nv 0.445312 0.0696001 0.109375\nv 0.453125 0.0676367 0.109375\nv 0.460938 0.0663799 0.109375\nv 0.475847 0.0625 0.109375\nv 0.46875 0.0653393 0.109375\nv -0.284778 0.0703125 0.109375\nv -0.28125 0.0723615 0.109375\nv -0.273438 0.076168 0.109375\nv -0.226562 0.0762983 0.109375\nv -0.21875 0.0749386 0.109375\nv -0.210938 0.0740303 0.109375\nv -0.203125 0.0743324 0.109375\nv -0.195312 0.07473 0.109375\nv -0.1875 0.0752277 0.109375\nv -0.179688 0.0754756 0.109375\nv -0.171875 0.0755885 0.109375\nv -0.164062 0.0755146 0.109375\nv -0.15625 0.0754645 0.109375\nv -0.148438 0.0753996 0.109375\nv -0.140625 0.0750837 0.109375\nv -0.132812 0.0748471 0.109375\nv -0.125 0.074873 0.109375\nv -0.117188 0.0749144 0.109375\nv -0.109375 0.0748974 0.109375\nv -0.101562 0.0748219 0.109375\nv -0.09375 0.074749 0.109375\nv -0.0859375 0.0747128 0.109375\nv -0.078125 0.0747713 0.109375\nv -0.0703125 0.0747447 0.109375\nv -0.0625 0.0746493 0.109375\nv -0.0546875 0.0745142 0.109375\nv -0.046875 0.0743062 0.109375\nv -0.0390625 0.0740874 0.109375\nv -0.03125 0.0738638 0.109375\nv -0.0234375 0.073619 0.109375\nv -0.015625 0.073425 0.109375\nv -0.0078125 0.0733122 0.109375\nv 0 0.0731489 0.109375\nv 0.0078125 0.0730672 0.109375\nv 0.015625 0.0730673 0.109375\nv 0.0234375 0.0730731 0.109375\nv 0.03125 0.0730806 0.109375\nv 0.0390625 0.0730876 0.109375\nv 0.046875 0.0730895 0.109375\nv 0.0546875 0.0730785 0.109375\nv 0.0625 0.0730614 0.109375\nv 0.0703125 0.0730196 0.109375\nv 0.078125 0.0730016 0.109375\nv 0.0859375 0.0730911 0.109375\nv 0.09375 0.0730175 0.109375\nv 0.101562 0.0729482 0.109375\nv 0.109375 0.0728818 0.109375\nv 0.117188 0.072813 0.109375\nv 0.125 0.0727655 0.109375\nv 0.132812 0.0728323 0.109375\nv 0.140625 0.0729166 0.109375\nv 0.148438 0.0729876 0.109375\nv 0.15625 0.0730148 0.109375\nv 0.164062 0.0729483 0.109375\nv 0.171875 0.0728928 0.109375\nv 0.179688 0.0728261 0.109375\nv 0.1875 0.072761 0.109375\nv 0.195312 0.0727402 0.109375\nv 0.203125 0.0728022 0.109375\nv 0.210938 0.0728495 0.109375\nv 0.21875 0.0729074 0.109375\nv 0.226562 0.0729222 0.109375\nv 0.234375 0.0728391 0.109375\nv 0.242188 0.072744 0.109375\nv 0.25 0.0726558 0.109375\nv 0.257812 0.0725967 0.109375\nv 0.265625 0.0726265 0.109375\nv 0.273438 0.0727255 0.109375\nv 0.28125 0.0728345 0.109375\nv 0.289062 0.0728639 0.109375\nv 0.296875 0.0730401 0.109375\nv 0.304688 0.0731927 0.109375\nv 0.3125 0.0733217 0.109375\nv 0.320312 0.0734078 0.109375\nv 0.328125 0.0735252 0.109375\nv 0.335938 0.0736085 0.109375\nv 0.34375 0.0736418 0.109375\nv 0.351562 0.0736045 0.109375\nv 0.359375 0.0735588 0.109375\nv 0.367188 0.0734464 0.109375\nv 0.375 0.0732319 0.109375\nv 0.382812 0.0729003 0.109375\nv 0.390625 0.0725233 0.109375\nv 0.398438 0.0723882 0.109375\nv 0.40625 0.0722532 0.109375\nv 0.414062 0.0721005 0.109375\nv 0.421875 0.0718811 0.109375\nv 0.429688 0.0716065 0.109375\nv 0.441581 0.0703125 0.109375\nv 0.4375 0.0710589 0.109375\nv -0.268132 0.078125 0.109375\nv -0.265625 0.0793912 0.109375\nv -0.257812 0.0847238 0.109375\nv -0.25 0.0838614 0.109375\nv -0.242188 0.081288 0.109375\nv -0.233171 0.078125 0.109375\nv -0.234375 0.0785143 0.109375\nv -0.28125 0.176953 0.109375\nv -0.273438 0.174293 0.109375\nv -0.265625 0.172501 0.109375\nv -0.257812 0.179225 0.109375\nv -0.286558 0.179688 0.109375\nv -0.289062 0.181855 0.109375\nv -0.257655 0.179688 0.109375\nv -0.294643 0.1875 0.109375\nv -0.296875 0.190866 0.109375\nv -0.253147 0.1875 0.109375\nv -0.25 0.191792 0.109375\nv -0.298629 0.195312 0.109375\nv -0.248123 0.195312 0.109375\nv -0.300061 0.203125 0.109375\nv -0.245527 0.203125 0.109375\nv -0.300758 0.210938 0.109375\nv -0.244176 0.210938 0.109375\nv -0.301084 0.21875 0.109375\nv -0.24343 0.21875 0.109375\nv -0.301199 0.226562 0.109375\nv -0.242455 0.226562 0.109375\nv -0.30145 0.234375 0.109375\nv -0.242282 0.234375 0.109375\nv -0.242188 0.238055 0.109375\nv -0.242188 0.234375 0.113899\nv -0.301932 0.242188 0.109375\nv -0.242083 0.242188 0.109375\nv -0.302356 0.25 0.109375\nv -0.241823 0.25 0.109375\nv -0.302628 0.257812 0.109375\nv -0.241996 0.257812 0.109375\nv -0.242188 0.26453 0.109375\nv -0.302606 0.265625 0.109375\nv -0.242218 0.265625 0.109375\nv -0.242188 0.265625 0.111249\nv -0.302173 0.273438 0.109375\nv -0.242481 0.273438 0.109375\nv -0.300823 0.28125 0.109375\nv -0.243484 0.28125 0.109375\nv -0.299074 0.289062 0.109375\nv -0.244636 0.289062 0.109375\nv -0.297358 0.296875 0.109375\nv -0.296875 0.302242 0.109375\nv -0.246762 0.296875 0.109375\nv -0.296653 0.304688 0.109375\nv -0.249573 0.304688 0.109375\nv -0.25 0.306006 0.109375\nv -0.25 0.304688 0.115383\nv -0.296065 0.3125 0.109375\nv -0.252103 0.3125 0.109375\nv -0.295503 0.320312 0.109375\nv -0.253222 0.320312 0.109375\nv -0.29523 0.328125 0.109375\nv -0.254646 0.328125 0.109375\nv -0.295108 0.335938 0.109375\nv -0.256134 0.335938 0.109375\nv -0.257812 0.335938 0.114802\nv -0.295099 0.34375 0.109375\nv -0.257107 0.34375 0.109375\nv -0.257812 0.348484 0.109375\nv -0.257812 0.34375 0.111112\nv -0.295407 0.351562 0.109375\nv -0.258308 0.351562 0.109375\nv -0.295706 0.359375 0.109375\nv -0.259288 0.359375 0.109375\nv -0.29553 0.367188 0.109375\nv -0.260191 0.367188 0.109375\nv -0.295351 0.375 0.109375\nv -0.260891 0.375 0.109375\nv -0.294874 0.382812 0.109375\nv -0.262338 0.382812 0.109375\nv -0.293532 0.390625 0.109375\nv -0.264998 0.390625 0.109375\nv -0.265625 0.391235 0.109375\nv -0.265625 0.390625 0.110279\nv -0.290806 0.398438 0.109375\nv -0.289062 0.401775 0.109375\nv -0.289062 0.398438 0.112122\nv -0.271191 0.398438 0.109375\nv -0.273438 0.402006 0.109375\nv -0.273438 0.398438 0.113776\nv -0.284398 0.40625 0.109375\nv -0.278448 0.40625 0.109375\nv -0.28125 0.409561 0.109375\nv -0.28125 0.40625 0.112676\nv -0.296875 0.546436 0.109375\nv -0.289062 0.544745 0.109375\nv -0.297351 0.546875 0.109375\nv -0.296875 0.546875 0.109876\nv -0.286664 0.546875 0.109375\nv -0.289062 0.546875 0.111138\nv -0.28125 0.551625 0.109375\nv -0.302716 0.554688 0.109375\nv -0.304688 0.561559 0.109375\nv -0.279883 0.554688 0.109375\nv -0.28125 0.554688 0.111454\nv -0.304829 0.5625 0.109375\nv -0.304688 0.5625 0.111138\nv -0.276836 0.5625 0.109375\nv -0.28125 0.5625 0.116051\nv -0.305848 0.570312 0.109375\nv -0.275205 0.570312 0.109375\nv -0.306818 0.578125 0.109375\nv -0.274063 0.578125 0.109375\nv -0.307699 0.585938 0.109375\nv -0.27344 0.585938 0.109375\nv -0.273438 0.585977 0.109375\nv -0.308464 0.59375 0.109375\nv -0.273048 0.59375 0.109375\nv -0.273438 0.59375 0.110833\nv -0.309089 0.601562 0.109375\nv -0.272499 0.601562 0.109375\nv -0.273438 0.601562 0.113494\nv -0.309706 0.609375 0.109375\nv -0.272101 0.609375 0.109375\nv -0.273438 0.609375 0.116042\nv -0.310735 0.617188 0.109375\nv -0.3125 0.622048 0.109375\nv -0.271827 0.617188 0.109375\nv -0.313272 0.625 0.109375\nv -0.271528 0.625 0.109375\nv -0.314989 0.632812 0.109375\nv -0.271316 0.632812 0.109375\nv -0.316558 0.640625 0.109375\nv -0.271741 0.640625 0.109375\nv -0.317625 0.648438 0.109375\nv -0.272184 0.648438 0.109375\nv -0.318679 0.65625 0.109375\nv -0.272618 0.65625 0.109375\nv -0.319496 0.664062 0.109375\nv -0.273052 0.664062 0.109375\nv -0.273438 0.670017 0.109375\nv -0.319836 0.671875 0.109375\nv -0.273563 0.671875 0.109375\nv -0.273438 0.671875 0.116883\nv -0.32031 0.679688 0.109375\nv -0.320312 0.679736 0.109375\nv -0.320312 0.679688 0.109449\nv -0.274218 0.679688 0.109375\nv -0.320789 0.6875 0.109375\nv -0.274993 0.6875 0.109375\nv -0.321224 0.695312 0.109375\nv -0.275453 0.695312 0.109375\nv -0.32159 0.703125 0.109375\nv -0.275873 0.703125 0.109375\nv -0.321905 0.710938 0.109375\nv -0.276551 0.710938 0.109375\nv -0.32237 0.71875 0.109375\nv -0.277449 0.71875 0.109375\nv -0.323177 0.726562 0.109375\nv -0.27855 0.726562 0.109375\nv -0.324121 0.734375 0.109375\nv -0.279522 0.734375 0.109375\nv -0.325082 0.742188 0.109375\nv -0.280778 0.742188 0.109375\nv -0.28125 0.745253 0.109375\nv -0.325657 0.75 0.109375\nv -0.282079 0.75 0.109375\nv -0.326177 0.757812 0.109375\nv -0.284181 0.757812 0.109375\nv -0.327248 0.765625 0.109375\nv -0.328125 0.770443 0.109375\nv -0.286019 0.765625 0.109375\nv -0.328582 0.773438 0.109375\nv -0.287794 0.773438 0.109375\nv -0.289062 0.777426 0.109375\nv -0.32945 0.78125 0.109375\nv -0.291064 0.78125 0.109375\nv -0.329798 0.789062 0.109375\nv -0.295999 0.789062 0.109375\nv -0.296875 0.79028 0.109375\nv -0.296875 0.789062 0.114557\nv -0.329795 0.796875 0.109375\nv -0.328125 0.801365 0.109375\nv -0.328125 0.796875 0.117016\nv -0.3125 0.804678 0.109375\nv -0.302518 0.796875 0.109375\nv -0.304688 0.798482 0.109375\nv -0.304688 0.796875 0.114012\nv -0.324546 0.804688 0.109375\nv -0.312536 0.804688 0.109375\nv -0.320312 0.80681 0.109375\nv -0.320312 0.804688 0.115209\nv 0.015625 -0.539715 0.117188\nv 0.0234375 -0.541117 0.117188\nv 0.03125 -0.541992 0.117188\nv 0.0390625 -0.542539 0.117188\nv 0.046875 -0.542829 0.117188\nv 0.0546875 -0.54293 0.117188\nv 0.0625 -0.54261 0.117188\nv 0.0703125 -0.541756 0.117188\nv 0.078125 -0.540042 0.117188\nv 0 -0.533124 0.117188\nv 0.0130221 -0.539062 0.117188\nv 0.0078125 -0.536751 0.117188\nv 0.08064 -0.539062 0.117188\nv 0.0859375 -0.536524 0.117188\nv 0.09375 -0.53205 0.117188\nv -0.00362722 -0.53125 0.117188\nv -0.0078125 -0.527537 0.117188\nv 0.0950925 -0.53125 0.117188\nv 0.101562 -0.526937 0.117188\nv -0.0122679 -0.523438 0.117188\nv -0.015625 -0.516277 0.117188\nv 0.106794 -0.523438 0.117188\nv 0.109375 -0.520899 0.117188\nv -0.0159878 -0.515625 0.117188\nv -0.015625 -0.514786 0.117188\nv 0.114789 -0.515625 0.117188\nv 0.117188 -0.512238 0.117188\nv -0.0129775 -0.507812 0.117188\nv -0.0078125 -0.504923 0.117188\nv 0 -0.501812 0.117188\nv 0.120257 -0.507812 0.117188\nv 0.0052335 -0.5 0.117188\nv 0.0078125 -0.499236 0.117188\nv 0.015625 -0.496376 0.117188\nv 0.0234375 -0.493104 0.117188\nv 0.121628 -0.5 0.117188\nv 0.0255622 -0.492188 0.117188\nv 0.03125 -0.490491 0.117188\nv 0.0390625 -0.488605 0.117188\nv 0.046875 -0.486857 0.117188\nv 0.0546875 -0.484796 0.117188\nv 0.118833 -0.492188 0.117188\nv 0.117188 -0.490011 0.117188\nv 0.0561061 -0.484375 0.117188\nv 0.0625 -0.482429 0.117188\nv 0.0703125 -0.479867 0.117188\nv 0.078125 -0.477807 0.117188\nv 0.09375 -0.47662 0.117188\nv 0.101562 -0.478135 0.117188\nv 0.111524 -0.484375 0.117188\nv 0.109375 -0.48261 0.117188\nv 0.0845448 -0.476562 0.117188\nv 0.0924402 -0.476562 0.117188\nv 0.0859375 -0.476302 0.117188\nv 0.0859375 -0.476562 0.119847\nv -0.28125 -0.0631254 0.117188\nv 0.453125 -0.0658737 0.117188\nv 0.460938 -0.0675394 0.117188\nv 0.46875 -0.065292 0.117188\nv 0.476562 -0.0649825 0.117188\nv 0.484375 -0.063254 0.117188\nv -0.284035 -0.0625 0.117188\nv -0.289062 -0.0607387 0.117188\nv -0.278812 -0.0625 0.117188\nv -0.273438 -0.0606778 0.117188\nv 0.449647 -0.0625 0.117188\nv 0.485919 -0.0625 0.117188\nv -0.293277 -0.0546875 0.117188\nv -0.269366 -0.0546875 0.117188\nv 0.447306 -0.0546875 0.117188\nv 0.490898 -0.0546875 0.117188\nv 0.492188 -0.0510409 0.117188\nv -0.296083 -0.046875 0.117188\nv -0.296875 -0.0432533 0.117188\nv -0.265799 -0.046875 0.117188\nv -0.265625 -0.0463947 0.117188\nv 0.445971 -0.046875 0.117188\nv 0.493318 -0.046875 0.117188\nv -0.297557 -0.0390625 0.117188\nv -0.263304 -0.0390625 0.117188\nv 0.446392 -0.0390625 0.117188\nv 0.495273 -0.0390625 0.117188\nv -0.297977 -0.03125 0.117188\nv -0.262121 -0.03125 0.117188\nv 0.445597 -0.03125 0.117188\nv 0.445312 -0.0294342 0.117188\nv 0.497227 -0.03125 0.117188\nv -0.298123 -0.0234375 0.117188\nv -0.261509 -0.0234375 0.117188\nv 0.444596 -0.0234375 0.117188\nv 0.499984 -0.0234375 0.117188\nv 0.5 -0.023336 0.117188\nv -0.299745 -0.015625 0.117188\nv -0.260527 -0.015625 0.117188\nv 0.444303 -0.015625 0.117188\nv 0.500817 -0.015625 0.117188\nv -0.301524 -0.0078125 0.117188\nv -0.260583 -0.0078125 0.117188\nv 0.442517 -0.0078125 0.117188\nv 0.500801 -0.0078125 0.117188\nv -0.303486 0 0.117188\nv -0.260332 0 0.117188\nv 0.441314 0 0.117188\nv 0.50051 0 0.117188\nv -0.30345 0.0078125 0.117188\nv -0.258296 0.0078125 0.117188\nv -0.257812 0.00874537 0.117188\nv 0.441788 0.0078125 0.117188\nv 0.500375 0.0078125 0.117188\nv -0.302221 0.015625 0.117188\nv -0.253317 0.015625 0.117188\nv -0.25 0.0183184 0.117188\nv -0.242188 0.0195646 0.117188\nv -0.234375 0.0207389 0.117188\nv -0.226562 0.023189 0.117188\nv 0.429688 0.0220193 0.117188\nv 0.440137 0.015625 0.117188\nv 0.4375 0.017908 0.117188\nv 0.500429 0.015625 0.117188\nv -0.301199 0.0234375 0.117188\nv -0.225828 0.0234375 0.117188\nv -0.21875 0.0254044 0.117188\nv -0.210938 0.0263438 0.117188\nv -0.203125 0.0265298 0.117188\nv -0.195312 0.0266111 0.117188\nv -0.1875 0.0268681 0.117188\nv -0.179688 0.0270192 0.117188\nv -0.171875 0.0268501 0.117188\nv -0.164062 0.026831 0.117188\nv -0.15625 0.0269617 0.117188\nv -0.148438 0.0270616 0.117188\nv -0.140625 0.0270433 0.117188\nv -0.132812 0.0270632 0.117188\nv -0.125 0.027156 0.117188\nv -0.117188 0.0272299 0.117188\nv -0.109375 0.0270966 0.117188\nv -0.101562 0.0269265 0.117188\nv -0.09375 0.0267594 0.117188\nv -0.0859375 0.0266246 0.117188\nv -0.078125 0.0265404 0.117188\nv -0.0703125 0.0264535 0.117188\nv -0.0625 0.0262815 0.117188\nv -0.0546875 0.0261434 0.117188\nv -0.046875 0.0260311 0.117188\nv -0.0390625 0.0259651 0.117188\nv -0.03125 0.0259227 0.117188\nv -0.0234375 0.0259601 0.117188\nv -0.015625 0.0260529 0.117188\nv -0.0078125 0.0261889 0.117188\nv 0 0.0263368 0.117188\nv 0.0078125 0.0263822 0.117188\nv 0.015625 0.0264451 0.117188\nv 0.0234375 0.0264167 0.117188\nv 0.03125 0.0263053 0.117188\nv 0.0390625 0.0261984 0.117188\nv 0.046875 0.0260393 0.117188\nv 0.0546875 0.0258558 0.117188\nv 0.0625 0.0257028 0.117188\nv 0.0703125 0.0255749 0.117188\nv 0.078125 0.0254848 0.117188\nv 0.0859375 0.0254056 0.117188\nv 0.09375 0.0252836 0.117188\nv 0.101562 0.0251378 0.117188\nv 0.109375 0.0250117 0.117188\nv 0.117188 0.0248714 0.117188\nv 0.125 0.0247855 0.117188\nv 0.132812 0.024678 0.117188\nv 0.140625 0.0245506 0.117188\nv 0.148438 0.0244301 0.117188\nv 0.15625 0.0243034 0.117188\nv 0.164062 0.0240918 0.117188\nv 0.171875 0.023929 0.117188\nv 0.179688 0.0237441 0.117188\nv 0.1875 0.0235475 0.117188\nv 0.195312 0.0234628 0.117188\nv 0.195312 0.0234375 0.122538\nv 0.203125 0.0234835 0.117188\nv 0.203125 0.0234375 0.122835\nv 0.210938 0.023498 0.117188\nv 0.21875 0.0235361 0.117188\nv 0.226562 0.0237108 0.117188\nv 0.234375 0.0238758 0.117188\nv 0.242188 0.0240374 0.117188\nv 0.25 0.0242263 0.117188\nv 0.257812 0.024456 0.117188\nv 0.265625 0.0246263 0.117188\nv 0.273438 0.0247852 0.117188\nv 0.28125 0.0249454 0.117188\nv 0.289062 0.0250898 0.117188\nv 0.296875 0.025234 0.117188\nv 0.304688 0.0253533 0.117188\nv 0.3125 0.0255123 0.117188\nv 0.320312 0.025677 0.117188\nv 0.328125 0.0260347 0.117188\nv 0.335938 0.0262098 0.117188\nv 0.34375 0.026331 0.117188\nv 0.351562 0.0264911 0.117188\nv 0.359375 0.0266378 0.117188\nv 0.367188 0.0266719 0.117188\nv 0.375 0.0267531 0.117188\nv 0.382812 0.0268134 0.117188\nv 0.390625 0.026629 0.117188\nv 0.398438 0.0262207 0.117188\nv 0.40625 0.0258109 0.117188\nv 0.414062 0.0251895 0.117188\nv 0.423674 0.0234375 0.117188\nv 0.421875 0.0237652 0.117188\nv 0.500275 0.0234375 0.117188\nv 0.5 0.0242993 0.117188\nv -0.300119 0.03125 0.117188\nv 0.497064 0.03125 0.117188\nv -0.299291 0.0390625 0.117188\nv -0.296875 0.0464687 0.117188\nv 0.493998 0.0390625 0.117188\nv 0.492188 0.0445678 0.117188\nv -0.29672 0.046875 0.117188\nv 0.491431 0.046875 0.117188\nv -0.293615 0.0546875 0.117188\nv 0.476562 0.0619957 0.117188\nv 0.488584 0.0546875 0.117188\nv 0.484375 0.0577482 0.117188\nv -0.290781 0.0625 0.117188\nv -0.289062 0.0673025 0.117188\nv 0.445312 0.069485 0.117188\nv 0.453125 0.0674606 0.117188\nv 0.460938 0.0662424 0.117188\nv 0.475274 0.0625 0.117188\nv 0.46875 0.0650786 0.117188\nv -0.286038 0.0703125 0.117188\nv -0.28125 0.0729075 0.117188\nv -0.273438 0.0767042 0.117188\nv -0.226562 0.0764693 0.117188\nv -0.21875 0.0750493 0.117188\nv -0.210938 0.074138 0.117188\nv -0.203125 0.0744585 0.117188\nv -0.195312 0.0748702 0.117188\nv -0.1875 0.0753766 0.117188\nv -0.179688 0.0756355 0.117188\nv -0.171875 0.075669 0.117188\nv -0.164062 0.0755367 0.117188\nv -0.15625 0.0754375 0.117188\nv -0.148438 0.0753334 0.117188\nv -0.140625 0.0750462 0.117188\nv -0.132812 0.0748571 0.117188\nv -0.125 0.0749394 0.117188\nv -0.117188 0.0749761 0.117188\nv -0.109375 0.0748904 0.117188\nv -0.101562 0.0747877 0.117188\nv -0.09375 0.0746964 0.117188\nv -0.0859375 0.0746837 0.117188\nv -0.078125 0.0747435 0.117188\nv -0.0703125 0.0747076 0.117188\nv -0.0625 0.0746669 0.117188\nv -0.0546875 0.0745119 0.117188\nv -0.046875 0.0743156 0.117188\nv -0.0390625 0.0741138 0.117188\nv -0.03125 0.0738871 0.117188\nv -0.0234375 0.0736264 0.117188\nv -0.015625 0.0734539 0.117188\nv -0.0078125 0.0733172 0.117188\nv 0 0.0731256 0.117188\nv 0.0078125 0.0730313 0.117188\nv 0.015625 0.0730241 0.117188\nv 0.0234375 0.0730238 0.117188\nv 0.03125 0.0730214 0.117188\nv 0.0390625 0.0730524 0.117188\nv 0.046875 0.0730777 0.117188\nv 0.0546875 0.0730715 0.117188\nv 0.0625 0.0730523 0.117188\nv 0.0703125 0.0730032 0.117188\nv 0.078125 0.0729699 0.117188\nv 0.0859375 0.0730406 0.117188\nv 0.09375 0.0730374 0.117188\nv 0.101562 0.0729686 0.117188\nv 0.109375 0.072886 0.117188\nv 0.117188 0.0728216 0.117188\nv 0.125 0.0727938 0.117188\nv 0.132812 0.0727933 0.117188\nv 0.140625 0.0728667 0.117188\nv 0.148438 0.0729194 0.117188\nv 0.15625 0.072992 0.117188\nv 0.164062 0.0729861 0.117188\nv 0.171875 0.0728782 0.117188\nv 0.179688 0.0727832 0.117188\nv 0.1875 0.0727051 0.117188\nv 0.195312 0.0726558 0.117188\nv 0.203125 0.072654 0.117188\nv 0.210938 0.0727218 0.117188\nv 0.21875 0.0727792 0.117188\nv 0.226562 0.0727983 0.117188\nv 0.234375 0.0727643 0.117188\nv 0.242188 0.0727261 0.117188\nv 0.25 0.0726616 0.117188\nv 0.257812 0.0726537 0.117188\nv 0.265625 0.072685 0.117188\nv 0.273438 0.0727591 0.117188\nv 0.28125 0.0728757 0.117188\nv 0.289062 0.0729728 0.117188\nv 0.296875 0.0729841 0.117188\nv 0.304688 0.0732078 0.117188\nv 0.3125 0.0733664 0.117188\nv 0.320312 0.0734816 0.117188\nv 0.328125 0.0735929 0.117188\nv 0.335938 0.0736842 0.117188\nv 0.34375 0.0736999 0.117188\nv 0.351562 0.073653 0.117188\nv 0.359375 0.0736071 0.117188\nv 0.367188 0.0734872 0.117188\nv 0.375 0.0732682 0.117188\nv 0.382812 0.0729239 0.117188\nv 0.390625 0.0725206 0.117188\nv 0.398438 0.0723876 0.117188\nv 0.40625 0.072258 0.117188\nv 0.414062 0.0721033 0.117188\nv 0.421875 0.0719096 0.117188\nv 0.429688 0.0716386 0.117188\nv 0.441278 0.0703125 0.117188\nv 0.4375 0.0710495 0.117188\nv -0.269729 0.078125 0.117188\nv -0.265625 0.0800255 0.117188\nv -0.257812 0.0855881 0.117188\nv -0.25 0.0848582 0.117188\nv -0.242188 0.0816558 0.117188\nv -0.232435 0.078125 0.117188\nv -0.234375 0.0787785 0.117188\nv -0.257812 0.0859375 0.121491\nv -0.25 0.0859375 0.123497\nv -0.28125 0.177684 0.117188\nv -0.273438 0.175382 0.117188\nv -0.265625 0.173275 0.117188\nv -0.257812 0.178796 0.117188\nv -0.285298 0.179688 0.117188\nv -0.289062 0.182766 0.117188\nv -0.257493 0.179688 0.117188\nv -0.294239 0.1875 0.117188\nv -0.296875 0.191722 0.117188\nv -0.252195 0.1875 0.117188\nv -0.25 0.190535 0.117188\nv -0.298225 0.195312 0.117188\nv -0.247508 0.195312 0.117188\nv -0.299989 0.203125 0.117188\nv -0.244835 0.203125 0.117188\nv -0.300653 0.210938 0.117188\nv -0.243679 0.210938 0.117188\nv -0.301082 0.21875 0.117188\nv -0.243053 0.21875 0.117188\nv -0.301301 0.226562 0.117188\nv -0.242292 0.226562 0.117188\nv -0.242188 0.231446 0.117188\nv -0.301666 0.234375 0.117188\nv -0.242121 0.234375 0.117188\nv -0.302142 0.242188 0.117188\nv -0.24193 0.242188 0.117188\nv -0.302601 0.25 0.117188\nv -0.24165 0.25 0.117188\nv -0.302733 0.257812 0.117188\nv -0.24181 0.257812 0.117188\nv -0.302703 0.265625 0.117188\nv -0.242091 0.265625 0.117188\nv -0.242188 0.267731 0.117188\nv -0.302086 0.273438 0.117188\nv -0.242464 0.273438 0.117188\nv -0.300584 0.28125 0.117188\nv -0.243376 0.28125 0.117188\nv -0.298658 0.289062 0.117188\nv -0.244629 0.289062 0.117188\nv -0.297058 0.296875 0.117188\nv -0.296875 0.298995 0.117188\nv -0.296875 0.296875 0.121566\nv -0.246946 0.296875 0.117188\nv -0.25 0.304378 0.117188\nv -0.296388 0.304688 0.117188\nv -0.250145 0.304688 0.117188\nv -0.295765 0.3125 0.117188\nv -0.252836 0.3125 0.117188\nv -0.295087 0.320312 0.117188\nv -0.25446 0.320312 0.117188\nv -0.294665 0.328125 0.117188\nv -0.256364 0.328125 0.117188\nv -0.257812 0.333324 0.117188\nv -0.257812 0.328125 0.122207\nv -0.294461 0.335938 0.117188\nv -0.258503 0.335938 0.117188\nv -0.294528 0.34375 0.117188\nv -0.260026 0.34375 0.117188\nv -0.294768 0.351562 0.117188\nv -0.26108 0.351562 0.117188\nv -0.294911 0.359375 0.117188\nv -0.261971 0.359375 0.117188\nv -0.265625 0.359375 0.124392\nv -0.294619 0.367188 0.117188\nv -0.262808 0.367188 0.117188\nv -0.265625 0.367188 0.122151\nv -0.294288 0.375 0.117188\nv -0.263938 0.375 0.117188\nv -0.265625 0.375 0.119782\nv -0.293291 0.382812 0.117188\nv -0.26533 0.382812 0.117188\nv -0.265625 0.383411 0.117188\nv -0.265625 0.382812 0.117566\nv -0.290515 0.390625 0.117188\nv -0.289062 0.393325 0.117188\nv -0.289062 0.390625 0.120163\nv -0.269348 0.390625 0.117188\nv -0.273438 0.396051 0.117188\nv -0.273438 0.390625 0.123894\nv -0.284041 0.398438 0.117188\nv -0.2774 0.398438 0.117188\nv -0.28125 0.401978 0.117188\nv -0.28125 0.398438 0.12119\nv -0.296875 0.552485 0.117188\nv -0.289062 0.553692 0.117188\nv -0.299779 0.554688 0.117188\nv -0.296875 0.554688 0.118899\nv -0.288195 0.554688 0.117188\nv -0.289062 0.554688 0.117942\nv -0.303721 0.5625 0.117188\nv -0.304688 0.566336 0.117188\nv -0.296875 0.5625 0.122518\nv -0.282624 0.5625 0.117188\nv -0.289062 0.5625 0.123102\nv -0.28125 0.565675 0.117188\nv -0.305191 0.570312 0.117188\nv -0.304688 0.570312 0.120068\nv -0.279953 0.570312 0.117188\nv -0.28125 0.570312 0.119092\nv -0.306032 0.578125 0.117188\nv -0.278093 0.578125 0.117188\nv -0.28125 0.578125 0.122475\nv -0.306916 0.585938 0.117188\nv -0.27691 0.585938 0.117188\nv -0.307709 0.59375 0.117188\nv -0.275449 0.59375 0.117188\nv -0.308402 0.601562 0.117188\nv -0.274427 0.601562 0.117188\nv -0.309098 0.609375 0.117188\nv -0.273697 0.609375 0.117188\nv -0.273438 0.611775 0.117188\nv -0.310353 0.617188 0.117188\nv -0.3125 0.62175 0.117188\nv -0.272925 0.617188 0.117188\nv -0.273438 0.617188 0.120407\nv -0.313603 0.625 0.117188\nv -0.272063 0.625 0.117188\nv -0.315703 0.632812 0.117188\nv -0.271589 0.632812 0.117188\nv -0.317087 0.640625 0.117188\nv -0.271984 0.640625 0.117188\nv -0.318065 0.648438 0.117188\nv -0.272331 0.648438 0.117188\nv -0.319151 0.65625 0.117188\nv -0.272654 0.65625 0.117188\nv -0.319761 0.664062 0.117188\nv -0.273012 0.664062 0.117188\nv -0.320186 0.671875 0.117188\nv -0.320312 0.674191 0.117188\nv -0.273433 0.671875 0.117188\nv -0.273438 0.671943 0.117188\nv -0.320617 0.679688 0.117188\nv -0.27401 0.679688 0.117188\nv -0.321116 0.6875 0.117188\nv -0.274787 0.6875 0.117188\nv -0.321477 0.695312 0.117188\nv -0.275269 0.695312 0.117188\nv -0.321789 0.703125 0.117188\nv -0.275729 0.703125 0.117188\nv -0.322065 0.710938 0.117188\nv -0.276425 0.710938 0.117188\nv -0.322519 0.71875 0.117188\nv -0.277354 0.71875 0.117188\nv -0.323199 0.726562 0.117188\nv -0.278529 0.726562 0.117188\nv -0.323987 0.734375 0.117188\nv -0.279532 0.734375 0.117188\nv -0.32485 0.742188 0.117188\nv -0.28077 0.742188 0.117188\nv -0.28125 0.745135 0.117188\nv -0.325288 0.75 0.117188\nv -0.282161 0.75 0.117188\nv -0.325808 0.757812 0.117188\nv -0.284408 0.757812 0.117188\nv -0.326896 0.765625 0.117188\nv -0.328125 0.77247 0.117188\nv -0.286104 0.765625 0.117188\nv -0.328269 0.773438 0.117188\nv -0.328125 0.773438 0.120273\nv -0.287965 0.773438 0.117188\nv -0.289062 0.776664 0.117188\nv -0.32891 0.78125 0.117188\nv -0.291705 0.78125 0.117188\nv -0.296875 0.788447 0.117188\nv -0.328967 0.789062 0.117188\nv -0.328125 0.796578 0.117188\nv -0.328125 0.789062 0.123932\nv -0.297393 0.789062 0.117188\nv -0.304688 0.795576 0.117188\nv -0.32805 0.796875 0.117188\nv -0.320312 0.8038 0.117188\nv -0.306091 0.796875 0.117188\nv -0.3125 0.802184 0.117188\nv 0.015625 -0.539992 0.125\nv 0.0234375 -0.541603 0.125\nv 0.03125 -0.542352 0.125\nv 0.0390625 -0.542804 0.125\nv 0.046875 -0.542979 0.125\nv 0.0546875 -0.543037 0.125\nv 0.0625 -0.542616 0.125\nv 0.0703125 -0.54164 0.125\nv 0.078125 -0.540047 0.125\nv 0 -0.533117 0.125\nv 0.0121467 -0.539062 0.125\nv 0.0078125 -0.536978 0.125\nv 0.0805725 -0.539062 0.125\nv 0.0859375 -0.536429 0.125\nv 0.09375 -0.531899 0.125\nv -0.00337058 -0.53125 0.125\nv -0.0078125 -0.527647 0.125\nv 0.0950172 -0.53125 0.125\nv 0.101562 -0.527128 0.125\nv -0.0134293 -0.523438 0.125\nv -0.015625 -0.518077 0.125\nv 0.107036 -0.523438 0.125\nv 0.109375 -0.521027 0.125\nv -0.0166938 -0.515625 0.125\nv -0.015625 -0.513238 0.125\nv 0.114566 -0.515625 0.125\nv 0.117188 -0.51162 0.125\nv -0.0132961 -0.507812 0.125\nv -0.0078125 -0.504944 0.125\nv 0 -0.502122 0.125\nv 0.119655 -0.507812 0.125\nv 0.00628462 -0.5 0.125\nv 0.0078125 -0.499565 0.125\nv 0.015625 -0.496871 0.125\nv 0.0234375 -0.493783 0.125\nv 0.120594 -0.5 0.125\nv 0.0275087 -0.492188 0.125\nv 0.03125 -0.491055 0.125\nv 0.0390625 -0.489019 0.125\nv 0.046875 -0.48723 0.125\nv 0.0546875 -0.485222 0.125\nv 0.117947 -0.492188 0.125\nv 0.117188 -0.491048 0.125\nv 0.117188 -0.492188 0.132659\nv 0.0573621 -0.484375 0.125\nv 0.0625 -0.482775 0.125\nv 0.0703125 -0.480403 0.125\nv 0.078125 -0.478593 0.125\nv 0.0859375 -0.477126 0.125\nv 0.09375 -0.478145 0.125\nv 0.101562 -0.480142 0.125\nv 0.11008 -0.484375 0.125\nv 0.109375 -0.483887 0.125\nv 0.109375 -0.484375 0.127045\nv -0.28125 -0.0626478 0.125\nv 0.453125 -0.0656188 0.125\nv 0.460938 -0.0674343 0.125\nv 0.46875 -0.065115 0.125\nv 0.476562 -0.0648911 0.125\nv 0.484375 -0.0631721 0.125\nv -0.281922 -0.0625 0.125\nv -0.289062 -0.0600307 0.125\nv -0.280645 -0.0625 0.125\nv -0.28125 -0.0625 0.127681\nv -0.273438 -0.0601272 0.125\nv 0.449958 -0.0625 0.125\nv 0.485745 -0.0625 0.125\nv -0.292956 -0.0546875 0.125\nv -0.269654 -0.0546875 0.125\nv 0.447537 -0.0546875 0.125\nv 0.490891 -0.0546875 0.125\nv 0.492188 -0.0509738 0.125\nv -0.296047 -0.046875 0.125\nv -0.296875 -0.0433565 0.125\nv -0.265822 -0.046875 0.125\nv -0.265625 -0.0463939 0.125\nv 0.446262 -0.046875 0.125\nv 0.493263 -0.046875 0.125\nv -0.297586 -0.0390625 0.125\nv -0.263109 -0.0390625 0.125\nv 0.446608 -0.0390625 0.125\nv 0.495086 -0.0390625 0.125\nv -0.297916 -0.03125 0.125\nv -0.261942 -0.03125 0.125\nv 0.445759 -0.03125 0.125\nv 0.445312 -0.0290656 0.125\nv 0.496938 -0.03125 0.125\nv -0.297947 -0.0234375 0.125\nv -0.261312 -0.0234375 0.125\nv 0.444435 -0.0234375 0.125\nv 0.49956 -0.0234375 0.125\nv 0.5 -0.0205776 0.125\nv -0.299533 -0.015625 0.125\nv -0.260323 -0.015625 0.125\nv 0.444128 -0.015625 0.125\nv 0.500513 -0.015625 0.125\nv -0.301438 -0.0078125 0.125\nv -0.260423 -0.0078125 0.125\nv 0.442365 -0.0078125 0.125\nv 0.500462 -0.0078125 0.125\nv -0.303539 0 0.125\nv -0.260181 0 0.125\nv 0.441132 0 0.125\nv 0.500224 0 0.125\nv -0.303418 0.0078125 0.125\nv -0.258324 0.0078125 0.125\nv -0.257812 0.00887438 0.125\nv 0.441708 0.0078125 0.125\nv 0.500199 0.0078125 0.125\nv -0.30223 0.015625 0.125\nv -0.253747 0.015625 0.125\nv -0.25 0.0186966 0.125\nv -0.242188 0.019969 0.125\nv -0.234375 0.021001 0.125\nv -0.226562 0.0233612 0.125\nv 0.195312 0.0234253 0.125\nv 0.203125 0.0234186 0.125\nv 0.429688 0.0221388 0.125\nv 0.440222 0.015625 0.125\nv 0.4375 0.0179918 0.125\nv 0.500241 0.015625 0.125\nv -0.301184 0.0234375 0.125\nv -0.22634 0.0234375 0.125\nv -0.226562 0.0234375 0.129391\nv -0.21875 0.0255809 0.125\nv -0.210938 0.0265714 0.125\nv -0.203125 0.026798 0.125\nv -0.195312 0.0269206 0.125\nv -0.1875 0.027166 0.125\nv -0.179688 0.0272106 0.125\nv -0.171875 0.0268934 0.125\nv -0.164062 0.026886 0.125\nv -0.15625 0.0270179 0.125\nv -0.148438 0.0271374 0.125\nv -0.140625 0.0270902 0.125\nv -0.132812 0.0270819 0.125\nv -0.125 0.0271248 0.125\nv -0.117188 0.027225 0.125\nv -0.109375 0.027136 0.125\nv -0.101562 0.0269953 0.125\nv -0.09375 0.0268031 0.125\nv -0.0859375 0.0266339 0.125\nv -0.078125 0.0265446 0.125\nv -0.0703125 0.0264457 0.125\nv -0.0625 0.0262759 0.125\nv -0.0546875 0.0261565 0.125\nv -0.046875 0.0260704 0.125\nv -0.0390625 0.0260247 0.125\nv -0.03125 0.0260617 0.125\nv -0.0234375 0.026088 0.125\nv -0.015625 0.0261545 0.125\nv -0.0078125 0.0262241 0.125\nv 0 0.0263258 0.125\nv 0.0078125 0.0263723 0.125\nv 0.015625 0.0264004 0.125\nv 0.0234375 0.0263382 0.125\nv 0.03125 0.026218 0.125\nv 0.0390625 0.0261074 0.125\nv 0.046875 0.0259748 0.125\nv 0.0546875 0.0258381 0.125\nv 0.0625 0.0256855 0.125\nv 0.0703125 0.0255342 0.125\nv 0.078125 0.0254108 0.125\nv 0.0859375 0.025331 0.125\nv 0.09375 0.0252362 0.125\nv 0.101562 0.0250938 0.125\nv 0.109375 0.0249661 0.125\nv 0.117188 0.024819 0.125\nv 0.125 0.0246988 0.125\nv 0.132812 0.0245819 0.125\nv 0.140625 0.0244492 0.125\nv 0.148438 0.0243387 0.125\nv 0.15625 0.0242056 0.125\nv 0.164062 0.0240553 0.125\nv 0.171875 0.023896 0.125\nv 0.179688 0.0237098 0.125\nv 0.194385 0.0234375 0.125\nv 0.1875 0.023524 0.125\nv 0.206009 0.0234375 0.125\nv 0.210938 0.0234662 0.125\nv 0.21875 0.023563 0.125\nv 0.226562 0.0236615 0.125\nv 0.234375 0.0238133 0.125\nv 0.242188 0.0240288 0.125\nv 0.25 0.0242231 0.125\nv 0.257812 0.0244284 0.125\nv 0.265625 0.0246056 0.125\nv 0.273438 0.0247669 0.125\nv 0.28125 0.0249291 0.125\nv 0.289062 0.0250769 0.125\nv 0.296875 0.0252151 0.125\nv 0.304688 0.0253394 0.125\nv 0.3125 0.0255322 0.125\nv 0.320312 0.0258007 0.125\nv 0.328125 0.0260073 0.125\nv 0.335938 0.0262305 0.125\nv 0.34375 0.0263651 0.125\nv 0.351562 0.0264917 0.125\nv 0.359375 0.0266016 0.125\nv 0.367188 0.0266343 0.125\nv 0.375 0.0267215 0.125\nv 0.382812 0.0267796 0.125\nv 0.390625 0.0266143 0.125\nv 0.398438 0.0262126 0.125\nv 0.40625 0.02583 0.125\nv 0.414062 0.0252045 0.125\nv 0.424206 0.0234375 0.125\nv 0.421875 0.0238645 0.125\nv 0.500162 0.0234375 0.125\nv 0.5 0.0239407 0.125\nv -0.300081 0.03125 0.125\nv 0.496914 0.03125 0.125\nv -0.299262 0.0390625 0.125\nv -0.296875 0.046346 0.125\nv 0.49381 0.0390625 0.125\nv 0.492188 0.0439738 0.125\nv -0.296669 0.046875 0.125\nv 0.491219 0.046875 0.125\nv -0.293548 0.0546875 0.125\nv 0.476562 0.0617617 0.125\nv 0.488261 0.0546875 0.125\nv 0.484375 0.0575042 0.125\nv -0.290484 0.0625 0.125\nv -0.289062 0.0665498 0.125\nv 0.445312 0.0693936 0.125\nv 0.453125 0.067312 0.125\nv 0.460938 0.0661305 0.125\nv 0.474715 0.0625 0.125\nv 0.46875 0.0649205 0.125\nv -0.285684 0.0703125 0.125\nv -0.28125 0.0727126 0.125\nv -0.273438 0.0767244 0.125\nv -0.226562 0.0766735 0.125\nv -0.21875 0.0752065 0.125\nv -0.210938 0.0743051 0.125\nv -0.203125 0.0746263 0.125\nv -0.195312 0.0749817 0.125\nv -0.1875 0.0754882 0.125\nv -0.179688 0.0757613 0.125\nv -0.171875 0.0757227 0.125\nv -0.164062 0.0755451 0.125\nv -0.15625 0.075399 0.125\nv -0.148438 0.0753746 0.125\nv -0.140625 0.0751243 0.125\nv -0.132812 0.0748495 0.125\nv -0.125 0.0749682 0.125\nv -0.117188 0.0749977 0.125\nv -0.109375 0.0749002 0.125\nv -0.101562 0.0747687 0.125\nv -0.09375 0.0746794 0.125\nv -0.0859375 0.074654 0.125\nv -0.078125 0.0747119 0.125\nv -0.0703125 0.0747022 0.125\nv -0.0625 0.0746787 0.125\nv -0.0546875 0.0745392 0.125\nv -0.046875 0.0743402 0.125\nv -0.0390625 0.0741544 0.125\nv -0.03125 0.0739135 0.125\nv -0.0234375 0.0736779 0.125\nv -0.015625 0.0735107 0.125\nv -0.0078125 0.0733448 0.125\nv 0 0.0731505 0.125\nv 0.0078125 0.073045 0.125\nv 0.015625 0.073034 0.125\nv 0.0234375 0.0730224 0.125\nv 0.03125 0.0730181 0.125\nv 0.0390625 0.0730347 0.125\nv 0.046875 0.0730563 0.125\nv 0.0546875 0.0730707 0.125\nv 0.0625 0.0730461 0.125\nv 0.0703125 0.072987 0.125\nv 0.078125 0.0729361 0.125\nv 0.0859375 0.0729778 0.125\nv 0.09375 0.0730174 0.125\nv 0.101562 0.0729798 0.125\nv 0.109375 0.0729102 0.125\nv 0.117188 0.0728421 0.125\nv 0.125 0.072782 0.125\nv 0.132812 0.0727716 0.125\nv 0.140625 0.0727854 0.125\nv 0.148438 0.0728186 0.125\nv 0.15625 0.07287 0.125\nv 0.164062 0.0729024 0.125\nv 0.171875 0.0728694 0.125\nv 0.179688 0.0727519 0.125\nv 0.1875 0.0726517 0.125\nv 0.195312 0.0725939 0.125\nv 0.203125 0.0725762 0.125\nv 0.210938 0.0725595 0.125\nv 0.21875 0.0726022 0.125\nv 0.226562 0.0726671 0.125\nv 0.234375 0.0726838 0.125\nv 0.242188 0.0726967 0.125\nv 0.25 0.0726517 0.125\nv 0.257812 0.072676 0.125\nv 0.265625 0.0727447 0.125\nv 0.273438 0.0727946 0.125\nv 0.28125 0.0729045 0.125\nv 0.289062 0.073043 0.125\nv 0.296875 0.0730801 0.125\nv 0.304688 0.0731784 0.125\nv 0.3125 0.0733906 0.125\nv 0.320312 0.0735241 0.125\nv 0.328125 0.0736315 0.125\nv 0.335938 0.0737145 0.125\nv 0.34375 0.073713 0.125\nv 0.351562 0.0736624 0.125\nv 0.359375 0.0736289 0.125\nv 0.367188 0.073508 0.125\nv 0.375 0.0733027 0.125\nv 0.382812 0.0729707 0.125\nv 0.390625 0.072553 0.125\nv 0.398438 0.0723822 0.125\nv 0.40625 0.0722403 0.125\nv 0.414062 0.0721064 0.125\nv 0.421875 0.0719475 0.125\nv 0.429688 0.0716558 0.125\nv 0.440982 0.0703125 0.125\nv 0.4375 0.0710036 0.125\nv -0.269721 0.078125 0.125\nv -0.265625 0.0799522 0.125\nv -0.242188 0.0822187 0.125\nv -0.231713 0.078125 0.125\nv -0.234375 0.0790452 0.125\nv -0.258167 0.0859375 0.125\nv -0.257812 0.0861553 0.125\nv -0.249475 0.0859375 0.125\nv -0.25 0.0861244 0.125\nv -0.28125 0.178005 0.125\nv -0.273438 0.176084 0.125\nv -0.265625 0.17331 0.125\nv -0.257812 0.177768 0.125\nv -0.284415 0.179688 0.125\nv -0.289062 0.183512 0.125\nv -0.256896 0.179688 0.125\nv -0.293509 0.1875 0.125\nv -0.296875 0.193181 0.125\nv -0.251412 0.1875 0.125\nv -0.25 0.189467 0.125\nv -0.29772 0.195312 0.125\nv -0.247052 0.195312 0.125\nv -0.299887 0.203125 0.125\nv -0.244383 0.203125 0.125\nv -0.300544 0.210938 0.125\nv -0.243385 0.210938 0.125\nv -0.301031 0.21875 0.125\nv -0.242857 0.21875 0.125\nv -0.301392 0.226562 0.125\nv -0.242281 0.226562 0.125\nv -0.242188 0.233576 0.125\nv -0.301836 0.234375 0.125\nv -0.242176 0.234375 0.125\nv -0.242188 0.234375 0.126629\nv -0.302343 0.242188 0.125\nv -0.241925 0.242188 0.125\nv -0.30278 0.25 0.125\nv -0.24158 0.25 0.125\nv -0.302792 0.257812 0.125\nv -0.241651 0.257812 0.125\nv -0.302672 0.265625 0.125\nv -0.241957 0.265625 0.125\nv -0.242188 0.269771 0.125\nv -0.301791 0.273438 0.125\nv -0.242405 0.273438 0.125\nv -0.300089 0.28125 0.125\nv -0.243439 0.28125 0.125\nv -0.298116 0.289062 0.125\nv -0.296875 0.29611 0.125\nv -0.244709 0.289062 0.125\nv -0.296733 0.296875 0.125\nv -0.247519 0.296875 0.125\nv -0.25 0.302442 0.125\nv -0.296033 0.304688 0.125\nv -0.251096 0.304688 0.125\nv -0.295357 0.3125 0.125\nv -0.253999 0.3125 0.125\nv -0.294508 0.320312 0.125\nv -0.256292 0.320312 0.125\nv -0.257812 0.325295 0.125\nv -0.257812 0.320312 0.132166\nv -0.293983 0.328125 0.125\nv -0.258623 0.328125 0.125\nv -0.293791 0.335938 0.125\nv -0.261435 0.335938 0.125\nv -0.293779 0.34375 0.125\nv -0.263338 0.34375 0.125\nv -0.265625 0.34375 0.130367\nv -0.293909 0.351562 0.125\nv -0.264731 0.351562 0.125\nv -0.265625 0.35742 0.125\nv -0.265625 0.351562 0.126565\nv -0.293844 0.359375 0.125\nv -0.265939 0.359375 0.125\nv -0.293485 0.367188 0.125\nv -0.267198 0.367188 0.125\nv -0.293101 0.375 0.125\nv -0.268508 0.375 0.125\nv -0.273438 0.375 0.132555\nv -0.291468 0.382812 0.125\nv -0.289062 0.386879 0.125\nv -0.289062 0.382812 0.130063\nv -0.269803 0.382812 0.125\nv -0.273438 0.389739 0.125\nv -0.273438 0.382812 0.13086\nv -0.284822 0.390625 0.125\nv -0.275224 0.390625 0.125\nv -0.28125 0.395137 0.125\nv -0.28125 0.390625 0.129527\nv -0.296875 0.567025 0.125\nv -0.289062 0.56624 0.125\nv -0.301363 0.570312 0.125\nv -0.304688 0.576794 0.125\nv -0.296875 0.570312 0.126886\nv -0.286988 0.570312 0.125\nv -0.289062 0.570312 0.127434\nv -0.304878 0.578125 0.125\nv -0.304688 0.578125 0.125462\nv -0.296875 0.578125 0.129768\nv -0.283561 0.578125 0.125\nv -0.289062 0.578125 0.132055\nv -0.28125 0.585185 0.125\nv -0.305761 0.585938 0.125\nv -0.304688 0.585938 0.128008\nv -0.281077 0.585938 0.125\nv -0.28125 0.585938 0.125355\nv -0.306579 0.59375 0.125\nv -0.304688 0.59375 0.131553\nv -0.278804 0.59375 0.125\nv -0.28125 0.59375 0.130356\nv -0.307299 0.601562 0.125\nv -0.277083 0.601562 0.125\nv -0.308107 0.609375 0.125\nv -0.275629 0.609375 0.125\nv -0.309734 0.617188 0.125\nv -0.3125 0.622604 0.125\nv -0.274312 0.617188 0.125\nv -0.273438 0.62162 0.125\nv -0.313384 0.625 0.125\nv -0.272894 0.625 0.125\nv -0.273438 0.625 0.128248\nv -0.315914 0.632812 0.125\nv -0.271914 0.632812 0.125\nv -0.31743 0.640625 0.125\nv -0.272189 0.640625 0.125\nv -0.318396 0.648438 0.125\nv -0.272529 0.648438 0.125\nv -0.319505 0.65625 0.125\nv -0.272645 0.65625 0.125\nv -0.320033 0.664062 0.125\nv -0.272998 0.664062 0.125\nv -0.320299 0.671875 0.125\nv -0.320312 0.672075 0.125\nv -0.320312 0.671875 0.125497\nv -0.273365 0.671875 0.125\nv -0.273438 0.673032 0.125\nv -0.320836 0.679688 0.125\nv -0.273875 0.679688 0.125\nv -0.321331 0.6875 0.125\nv -0.274684 0.6875 0.125\nv -0.321662 0.695312 0.125\nv -0.27518 0.695312 0.125\nv -0.321908 0.703125 0.125\nv -0.275667 0.703125 0.125\nv -0.322119 0.710938 0.125\nv -0.276348 0.710938 0.125\nv -0.322481 0.71875 0.125\nv -0.277259 0.71875 0.125\nv -0.323017 0.726562 0.125\nv -0.278481 0.726562 0.125\nv -0.323825 0.734375 0.125\nv -0.279506 0.734375 0.125\nv -0.324688 0.742188 0.125\nv -0.280803 0.742188 0.125\nv -0.28125 0.744625 0.125\nv -0.325062 0.75 0.125\nv -0.282405 0.75 0.125\nv -0.32552 0.757812 0.125\nv -0.284631 0.757812 0.125\nv -0.326622 0.765625 0.125\nv -0.286222 0.765625 0.125\nv -0.327801 0.773438 0.125\nv -0.328125 0.777885 0.125\nv -0.288314 0.773438 0.125\nv -0.289062 0.775562 0.125\nv -0.328302 0.78125 0.125\nv -0.328125 0.785929 0.125\nv -0.328125 0.78125 0.127253\nv -0.292486 0.78125 0.125\nv -0.296875 0.786563 0.125\nv -0.327911 0.789062 0.125\nv -0.299248 0.789062 0.125\nv -0.304688 0.793081 0.125\nv -0.324233 0.796875 0.125\nv -0.320312 0.800732 0.125\nv -0.309464 0.796875 0.125\nv -0.3125 0.799501 0.125\nv -0.3125 0.796875 0.13262\nv 0.015625 -0.540281 0.132812\nv 0.0234375 -0.542024 0.132812\nv 0.03125 -0.54274 0.132812\nv 0.0390625 -0.543145 0.132812\nv 0.046875 -0.543162 0.132812\nv 0.0546875 -0.543026 0.132812\nv 0.0625 -0.542583 0.132812\nv 0.0703125 -0.541591 0.132812\nv 0.078125 -0.539926 0.132812\nv 0 -0.533149 0.132812\nv 0.0112112 -0.539062 0.132812\nv 0.0078125 -0.537419 0.132812\nv 0.0802293 -0.539062 0.132812\nv 0.0859375 -0.53607 0.132812\nv 0.09375 -0.531735 0.132812\nv -0.00343346 -0.53125 0.132812\nv -0.0078125 -0.527705 0.132812\nv 0.0947328 -0.53125 0.132812\nv 0.101562 -0.526801 0.132812\nv -0.0141155 -0.523438 0.132812\nv -0.015625 -0.519823 0.132812\nv 0.106601 -0.523438 0.132812\nv 0.109375 -0.520536 0.132812\nv -0.0172611 -0.515625 0.132812\nv -0.015625 -0.511754 0.132812\nv 0.113928 -0.515625 0.132812\nv 0.117188 -0.510377 0.132812\nv -0.0136166 -0.507812 0.132812\nv -0.0078125 -0.505241 0.132812\nv 0 -0.502268 0.132812\nv 0.118825 -0.507812 0.132812\nv 0.00693599 -0.5 0.132812\nv 0.0078125 -0.499774 0.132812\nv 0.015625 -0.497011 0.132812\nv 0.0234375 -0.494166 0.132812\nv 0.119939 -0.5 0.132812\nv 0.117188 -0.492228 0.132812\nv 0.0289601 -0.492188 0.132812\nv 0.03125 -0.491498 0.132812\nv 0.0390625 -0.489293 0.132812\nv 0.046875 -0.487462 0.132812\nv 0.0546875 -0.485482 0.132812\nv 0.117164 -0.492188 0.132812\nv 0.109375 -0.485901 0.132812\nv 0.0583868 -0.484375 0.132812\nv 0.0625 -0.483157 0.132812\nv 0.0703125 -0.48098 0.132812\nv 0.078125 -0.479289 0.132812\nv 0.0859375 -0.478612 0.132812\nv 0.09375 -0.479619 0.132812\nv 0.10659 -0.484375 0.132812\nv 0.101562 -0.481862 0.132812\nv 0.453125 -0.0654314 0.132812\nv 0.460938 -0.0673728 0.132812\nv 0.46875 -0.0650543 0.132812\nv 0.476562 -0.0648577 0.132812\nv 0.484375 -0.0631144 0.132812\nv -0.289062 -0.0594307 0.132812\nv -0.28125 -0.0621026 0.132812\nv -0.273438 -0.0596182 0.132812\nv 0.450106 -0.0625 0.132812\nv 0.485623 -0.0625 0.132812\nv -0.292717 -0.0546875 0.132812\nv -0.269956 -0.0546875 0.132812\nv 0.447532 -0.0546875 0.132812\nv 0.490513 -0.0546875 0.132812\nv 0.492188 -0.0494875 0.132812\nv -0.296071 -0.046875 0.132812\nv -0.296875 -0.0434534 0.132812\nv -0.265885 -0.046875 0.132812\nv -0.265625 -0.0463008 0.132812\nv 0.44641 -0.046875 0.132812\nv 0.492836 -0.046875 0.132812\nv -0.29757 -0.0390625 0.132812\nv -0.262988 -0.0390625 0.132812\nv 0.446656 -0.0390625 0.132812\nv 0.494643 -0.0390625 0.132812\nv -0.297923 -0.03125 0.132812\nv -0.261834 -0.03125 0.132812\nv 0.445886 -0.03125 0.132812\nv 0.445312 -0.028665 0.132812\nv 0.496502 -0.03125 0.132812\nv -0.29786 -0.0234375 0.132812\nv -0.261125 -0.0234375 0.132812\nv 0.444399 -0.0234375 0.132812\nv 0.499038 -0.0234375 0.132812\nv 0.5 -0.0179206 0.132812\nv -0.299415 -0.015625 0.132812\nv -0.260121 -0.015625 0.132812\nv 0.444057 -0.015625 0.132812\nv 0.50027 -0.015625 0.132812\nv -0.301422 -0.0078125 0.132812\nv -0.260187 -0.0078125 0.132812\nv 0.442308 -0.0078125 0.132812\nv 0.50027 -0.0078125 0.132812\nv -0.3035 0 0.132812\nv -0.260023 0 0.132812\nv 0.441084 0 0.132812\nv 0.500131 0 0.132812\nv -0.303299 0.0078125 0.132812\nv -0.258349 0.0078125 0.132812\nv -0.257812 0.00895916 0.132812\nv 0.441731 0.0078125 0.132812\nv 0.500132 0.0078125 0.132812\nv 0.5 0.0078125 0.140041\nv -0.302105 0.015625 0.132812\nv -0.254059 0.015625 0.132812\nv -0.25 0.0190277 0.132812\nv -0.242188 0.0203566 0.132812\nv -0.234375 0.0212299 0.132812\nv 0.195312 0.0234179 0.132812\nv 0.203125 0.0234126 0.132812\nv 0.429688 0.0222701 0.132812\nv 0.440408 0.015625 0.132812\nv 0.4375 0.0181425 0.132812\nv 0.500096 0.015625 0.132812\nv 0.5 0.015625 0.136563\nv -0.301052 0.0234375 0.132812\nv -0.226811 0.0234375 0.132812\nv -0.226562 0.0234992 0.132812\nv -0.21875 0.0257208 0.132812\nv -0.210938 0.02679 0.132812\nv -0.203125 0.0270459 0.132812\nv -0.195312 0.0271891 0.132812\nv -0.1875 0.0274025 0.132812\nv -0.179688 0.0273928 0.132812\nv -0.171875 0.0268914 0.132812\nv -0.164062 0.0269103 0.132812\nv -0.15625 0.0270798 0.132812\nv -0.148438 0.027184 0.132812\nv -0.140625 0.0271195 0.132812\nv -0.132812 0.0270913 0.132812\nv -0.125 0.0271092 0.132812\nv -0.117188 0.0272271 0.132812\nv -0.109375 0.0272022 0.132812\nv -0.101562 0.0270504 0.132812\nv -0.09375 0.0268489 0.132812\nv -0.0859375 0.0266788 0.132812\nv -0.078125 0.0266016 0.132812\nv -0.0703125 0.0264612 0.132812\nv -0.0625 0.0262901 0.132812\nv -0.0546875 0.0261687 0.132812\nv -0.046875 0.0260861 0.132812\nv -0.0390625 0.0260821 0.132812\nv -0.03125 0.0261411 0.132812\nv -0.0234375 0.0261965 0.132812\nv -0.015625 0.0262304 0.132812\nv -0.0078125 0.0262739 0.132812\nv 0 0.0263647 0.132812\nv 0.0078125 0.0264037 0.132812\nv 0.015625 0.026358 0.132812\nv 0.0234375 0.0262649 0.132812\nv 0.03125 0.0261577 0.132812\nv 0.0390625 0.0260414 0.132812\nv 0.046875 0.0259004 0.132812\nv 0.0546875 0.025774 0.132812\nv 0.0625 0.0256438 0.132812\nv 0.0703125 0.0254943 0.132812\nv 0.078125 0.0253424 0.132812\nv 0.0859375 0.0252532 0.132812\nv 0.09375 0.0251899 0.132812\nv 0.101562 0.0250524 0.132812\nv 0.109375 0.0249216 0.132812\nv 0.117188 0.0247822 0.132812\nv 0.125 0.0246264 0.132812\nv 0.132812 0.0244952 0.132812\nv 0.140625 0.024357 0.132812\nv 0.148438 0.0242317 0.132812\nv 0.15625 0.024112 0.132812\nv 0.164062 0.0239571 0.132812\nv 0.171875 0.02384 0.132812\nv 0.179688 0.0236734 0.132812\nv 0.193608 0.0234375 0.132812\nv 0.1875 0.023504 0.132812\nv 0.2048 0.0234375 0.132812\nv 0.203125 0.0234375 0.134159\nv 0.210938 0.0235176 0.132812\nv 0.21875 0.0236238 0.132812\nv 0.226562 0.0237089 0.132812\nv 0.234375 0.0237738 0.132812\nv 0.242188 0.0239744 0.132812\nv 0.25 0.0242211 0.132812\nv 0.257812 0.024457 0.132812\nv 0.265625 0.0246457 0.132812\nv 0.273438 0.0248073 0.132812\nv 0.28125 0.0249777 0.132812\nv 0.289062 0.0251146 0.132812\nv 0.296875 0.0252546 0.132812\nv 0.304688 0.0253787 0.132812\nv 0.3125 0.025583 0.132812\nv 0.320312 0.0258936 0.132812\nv 0.328125 0.0261456 0.132812\nv 0.335938 0.0262173 0.132812\nv 0.34375 0.0264308 0.132812\nv 0.351562 0.0265736 0.132812\nv 0.359375 0.0266648 0.132812\nv 0.367188 0.0266584 0.132812\nv 0.375 0.0267448 0.132812\nv 0.382812 0.0267959 0.132812\nv 0.390625 0.0266225 0.132812\nv 0.398438 0.0262273 0.132812\nv 0.40625 0.0258738 0.132812\nv 0.414062 0.0252455 0.132812\nv 0.424827 0.0234375 0.132812\nv 0.421875 0.0239869 0.132812\nv 0.500003 0.0234375 0.132812\nv 0.5 0.0234456 0.132812\nv 0.5 0.0234375 0.132924\nv -0.299963 0.03125 0.132812\nv 0.496757 0.03125 0.132812\nv -0.299183 0.0390625 0.132812\nv -0.296875 0.046051 0.132812\nv 0.49369 0.0390625 0.132812\nv 0.492188 0.0436112 0.132812\nv -0.29655 0.046875 0.132812\nv 0.491091 0.046875 0.132812\nv -0.293393 0.0546875 0.132812\nv 0.476562 0.0615424 0.132812\nv 0.488008 0.0546875 0.132812\nv 0.484375 0.0573359 0.132812\nv -0.290417 0.0625 0.132812\nv -0.289062 0.0660572 0.132812\nv 0.445312 0.069297 0.132812\nv 0.453125 0.0672126 0.132812\nv 0.460938 0.0660454 0.132812\nv 0.474251 0.0625 0.132812\nv 0.46875 0.0648031 0.132812\nv -0.285304 0.0703125 0.132812\nv -0.28125 0.0726093 0.132812\nv -0.273438 0.0766343 0.132812\nv -0.226562 0.0768325 0.132812\nv -0.21875 0.0754147 0.132812\nv -0.210938 0.0744835 0.132812\nv -0.203125 0.0747745 0.132812\nv -0.195312 0.0751106 0.132812\nv -0.1875 0.0755687 0.132812\nv -0.179688 0.0758238 0.132812\nv -0.171875 0.0757665 0.132812\nv -0.164062 0.0755985 0.132812\nv -0.15625 0.0755377 0.132812\nv -0.148438 0.0754777 0.132812\nv -0.140625 0.0752396 0.132812\nv -0.132812 0.0749496 0.132812\nv -0.125 0.0750073 0.132812\nv -0.117188 0.075002 0.132812\nv -0.109375 0.0748939 0.132812\nv -0.101562 0.0747491 0.132812\nv -0.09375 0.0746972 0.132812\nv -0.0859375 0.0746511 0.132812\nv -0.078125 0.0747676 0.132812\nv -0.0703125 0.0747611 0.132812\nv -0.0625 0.0747156 0.132812\nv -0.0546875 0.0745803 0.132812\nv -0.046875 0.074389 0.132812\nv -0.0390625 0.0741664 0.132812\nv -0.03125 0.0739255 0.132812\nv -0.0234375 0.0737375 0.132812\nv -0.015625 0.0735779 0.132812\nv -0.0078125 0.0733931 0.132812\nv 0 0.0732102 0.132812\nv 0.0078125 0.0730877 0.132812\nv 0.015625 0.0730564 0.132812\nv 0.0234375 0.073027 0.132812\nv 0.03125 0.0730296 0.132812\nv 0.0390625 0.0730423 0.132812\nv 0.046875 0.0730523 0.132812\nv 0.0546875 0.0730541 0.132812\nv 0.0625 0.0730152 0.132812\nv 0.0703125 0.0729587 0.132812\nv 0.078125 0.0728949 0.132812\nv 0.0859375 0.0729068 0.132812\nv 0.09375 0.0729585 0.132812\nv 0.101562 0.0729772 0.132812\nv 0.109375 0.0729134 0.132812\nv 0.117188 0.0728304 0.132812\nv 0.125 0.0727556 0.132812\nv 0.132812 0.0727559 0.132812\nv 0.140625 0.0727557 0.132812\nv 0.148438 0.0727221 0.132812\nv 0.15625 0.0727281 0.132812\nv 0.164062 0.0727279 0.132812\nv 0.171875 0.0727161 0.132812\nv 0.179688 0.0727238 0.132812\nv 0.1875 0.072612 0.132812\nv 0.195312 0.0725101 0.132812\nv 0.203125 0.0724684 0.132812\nv 0.210938 0.0724648 0.132812\nv 0.21875 0.0724711 0.132812\nv 0.226562 0.0724853 0.132812\nv 0.234375 0.072608 0.132812\nv 0.242188 0.0725919 0.132812\nv 0.25 0.0725875 0.132812\nv 0.257812 0.0726687 0.132812\nv 0.265625 0.0727234 0.132812\nv 0.273438 0.0727905 0.132812\nv 0.28125 0.0729053 0.132812\nv 0.289062 0.0730376 0.132812\nv 0.296875 0.0731606 0.132812\nv 0.304688 0.0731692 0.132812\nv 0.3125 0.0733672 0.132812\nv 0.320312 0.0735258 0.132812\nv 0.328125 0.0736377 0.132812\nv 0.335938 0.0737064 0.132812\nv 0.34375 0.0737175 0.132812\nv 0.351562 0.0736738 0.132812\nv 0.359375 0.0736306 0.132812\nv 0.367188 0.0734886 0.132812\nv 0.375 0.0733018 0.132812\nv 0.382812 0.072995 0.132812\nv 0.390625 0.0725737 0.132812\nv 0.398438 0.0724093 0.132812\nv 0.40625 0.0722745 0.132812\nv 0.414062 0.0721085 0.132812\nv 0.421875 0.0719331 0.132812\nv 0.429688 0.0716257 0.132812\nv 0.440631 0.0703125 0.132812\nv 0.4375 0.0709432 0.132812\nv -0.269727 0.078125 0.132812\nv -0.265625 0.0801332 0.132812\nv -0.242188 0.0825381 0.132812\nv -0.231204 0.078125 0.132812\nv -0.234375 0.0792438 0.132812\nv -0.259402 0.0859375 0.132812\nv -0.257812 0.0870376 0.132812\nv -0.247694 0.0859375 0.132812\nv -0.25 0.0869008 0.132812\nv -0.28125 0.178013 0.132812\nv -0.273438 0.176372 0.132812\nv -0.265625 0.173793 0.132812\nv -0.257812 0.176622 0.132812\nv -0.284266 0.179688 0.132812\nv -0.289062 0.183881 0.132812\nv -0.255989 0.179688 0.132812\nv -0.292899 0.1875 0.132812\nv -0.296875 0.194902 0.132812\nv -0.250582 0.1875 0.132812\nv -0.25 0.188289 0.132812\nv -0.25 0.1875 0.136201\nv -0.297046 0.195312 0.132812\nv -0.296875 0.195312 0.136093\nv -0.246396 0.195312 0.132812\nv -0.299758 0.203125 0.132812\nv -0.244036 0.203125 0.132812\nv -0.300455 0.210938 0.132812\nv -0.242999 0.210938 0.132812\nv -0.301035 0.21875 0.132812\nv -0.242686 0.21875 0.132812\nv -0.301466 0.226562 0.132812\nv -0.242246 0.226562 0.132812\nv -0.30193 0.234375 0.132812\nv -0.242228 0.234375 0.132812\nv -0.242188 0.235252 0.132812\nv -0.302453 0.242188 0.132812\nv -0.241851 0.242188 0.132812\nv -0.302819 0.25 0.132812\nv -0.241596 0.25 0.132812\nv -0.302764 0.257812 0.132812\nv -0.241593 0.257812 0.132812\nv -0.302505 0.265625 0.132812\nv -0.241856 0.265625 0.132812\nv -0.242188 0.271165 0.132812\nv -0.301326 0.273438 0.132812\nv -0.242333 0.273438 0.132812\nv -0.2995 0.28125 0.132812\nv -0.243331 0.28125 0.132812\nv -0.297594 0.289062 0.132812\nv -0.296875 0.293465 0.132812\nv -0.24479 0.289062 0.132812\nv -0.296297 0.296875 0.132812\nv -0.248155 0.296875 0.132812\nv -0.25 0.300706 0.132812\nv -0.295562 0.304688 0.132812\nv -0.251999 0.304688 0.132812\nv -0.294869 0.3125 0.132812\nv -0.255457 0.3125 0.132812\nv -0.257812 0.319858 0.132812\nv -0.293931 0.320312 0.132812\nv -0.257946 0.320312 0.132812\nv -0.29331 0.328125 0.132812\nv -0.261017 0.328125 0.132812\nv -0.292989 0.335938 0.132812\nv -0.264112 0.335938 0.132812\nv -0.265625 0.340418 0.132812\nv -0.265625 0.335938 0.136269\nv -0.292787 0.34375 0.132812\nv -0.26686 0.34375 0.132812\nv -0.2927 0.351562 0.132812\nv -0.289062 0.351562 0.139182\nv -0.269333 0.351562 0.132812\nv -0.273438 0.351562 0.139542\nv -0.292385 0.359375 0.132812\nv -0.289062 0.359375 0.137876\nv -0.271072 0.359375 0.132812\nv -0.273438 0.359375 0.13731\nv -0.291775 0.367188 0.132812\nv -0.289062 0.367188 0.136579\nv -0.28125 0.367188 0.139779\nv -0.272524 0.367188 0.132812\nv -0.273438 0.373752 0.132812\nv -0.273438 0.367188 0.134887\nv -0.291212 0.375 0.132812\nv -0.289062 0.379743 0.132812\nv -0.289062 0.375 0.135788\nv -0.273782 0.375 0.132812\nv -0.28125 0.375 0.138879\nv -0.28571 0.382812 0.132812\nv -0.27698 0.382812 0.132812\nv -0.28125 0.387202 0.132812\nv -0.28125 0.382812 0.136225\nv -0.296875 0.583022 0.132812\nv -0.289062 0.579549 0.132812\nv -0.300078 0.585938 0.132812\nv -0.296875 0.585938 0.134827\nv -0.286415 0.585938 0.132812\nv -0.289062 0.585938 0.136859\nv -0.303962 0.59375 0.132812\nv -0.304688 0.596071 0.132812\nv -0.296875 0.59375 0.139473\nv -0.282901 0.59375 0.132812\nv -0.28125 0.598444 0.132812\nv -0.305703 0.601562 0.132812\nv -0.304688 0.601562 0.135781\nv -0.280462 0.601562 0.132812\nv -0.28125 0.601562 0.134725\nv -0.30699 0.609375 0.132812\nv -0.278457 0.609375 0.132812\nv -0.28125 0.609375 0.139241\nv -0.309119 0.617188 0.132812\nv -0.3125 0.623725 0.132812\nv -0.276396 0.617188 0.132812\nv -0.312975 0.625 0.132812\nv -0.274216 0.625 0.132812\nv -0.273438 0.62885 0.132812\nv -0.315683 0.632812 0.132812\nv -0.272697 0.632812 0.132812\nv -0.273438 0.632812 0.140447\nv -0.317476 0.640625 0.132812\nv -0.272472 0.640625 0.132812\nv -0.318732 0.648438 0.132812\nv -0.272713 0.648438 0.132812\nv -0.319828 0.65625 0.132812\nv -0.272764 0.65625 0.132812\nv -0.320247 0.664062 0.132812\nv -0.320312 0.665957 0.132812\nv -0.320312 0.664062 0.136426\nv -0.273039 0.664062 0.132812\nv -0.32052 0.671875 0.132812\nv -0.273346 0.671875 0.132812\nv -0.273438 0.673604 0.132812\nv -0.273438 0.671875 0.13875\nv -0.320925 0.679688 0.132812\nv -0.273788 0.679688 0.132812\nv -0.32135 0.6875 0.132812\nv -0.274511 0.6875 0.132812\nv -0.32172 0.695312 0.132812\nv -0.275102 0.695312 0.132812\nv -0.321867 0.703125 0.132812\nv -0.275607 0.703125 0.132812\nv -0.322026 0.710938 0.132812\nv -0.276319 0.710938 0.132812\nv -0.322269 0.71875 0.132812\nv -0.277237 0.71875 0.132812\nv -0.322787 0.726562 0.132812\nv -0.27854 0.726562 0.132812\nv -0.32363 0.734375 0.132812\nv -0.279558 0.734375 0.132812\nv -0.324475 0.742188 0.132812\nv -0.280972 0.742188 0.132812\nv -0.28125 0.743525 0.132812\nv -0.28125 0.742188 0.13852\nv -0.324811 0.75 0.132812\nv -0.282803 0.75 0.132812\nv -0.325311 0.757812 0.132812\nv -0.284887 0.757812 0.132812\nv -0.326492 0.765625 0.132812\nv -0.28632 0.765625 0.132812\nv -0.32725 0.773438 0.132812\nv -0.288703 0.773438 0.132812\nv -0.289062 0.774388 0.132812\nv -0.289062 0.773438 0.13964\nv -0.327437 0.78125 0.132812\nv -0.293383 0.78125 0.132812\nv -0.296875 0.785096 0.132812\nv -0.325953 0.789062 0.132812\nv -0.3125 0.796807 0.132812\nv -0.301218 0.789062 0.132812\nv -0.304688 0.79129 0.132812\nv -0.320887 0.796875 0.132812\nv -0.313553 0.796875 0.132812\nv -0.320312 0.797444 0.132812\nv -0.320312 0.796875 0.134259\nv 0.015625 -0.540454 0.140625\nv 0.0234375 -0.542151 0.140625\nv 0.03125 -0.543178 0.140625\nv 0.0390625 -0.543403 0.140625\nv 0.046875 -0.543346 0.140625\nv 0.0546875 -0.543121 0.140625\nv 0.0625 -0.542651 0.140625\nv 0.0703125 -0.541554 0.140625\nv 0.078125 -0.539489 0.140625\nv 0 -0.533285 0.140625\nv 0.0106445 -0.539062 0.140625\nv 0.0078125 -0.537714 0.140625\nv 0.0791868 -0.539062 0.140625\nv 0.078125 -0.539062 0.14442\nv 0.0859375 -0.535405 0.140625\nv 0.09375 -0.531268 0.140625\nv -0.00366609 -0.53125 0.140625\nv -0.0078125 -0.527957 0.140625\nv 0.0937864 -0.53125 0.140625\nv 0.09375 -0.53125 0.140785\nv 0.101562 -0.525852 0.140625\nv -0.0149333 -0.523438 0.140625\nv -0.015625 -0.520897 0.140625\nv 0.104979 -0.523438 0.140625\nv 0.109375 -0.518944 0.140625\nv -0.0170731 -0.515625 0.140625\nv -0.015625 -0.51254 0.140625\nv 0.112724 -0.515625 0.140625\nv 0.117188 -0.510002 0.140625\nv -0.0132585 -0.507812 0.140625\nv -0.0078125 -0.50543 0.140625\nv 0 -0.5024 0.140625\nv 0.118713 -0.507812 0.140625\nv 0.00640207 -0.5 0.140625\nv 0.0078125 -0.499607 0.140625\nv 0.015625 -0.497094 0.140625\nv 0.0234375 -0.494554 0.140625\nv 0.119998 -0.5 0.140625\nv 0.117188 -0.493399 0.140625\nv 0.0300926 -0.492188 0.140625\nv 0.03125 -0.491815 0.140625\nv 0.0390625 -0.489336 0.140625\nv 0.046875 -0.487534 0.140625\nv 0.0546875 -0.485713 0.140625\nv 0.116247 -0.492188 0.140625\nv 0.109375 -0.487363 0.140625\nv 0.0595691 -0.484375 0.140625\nv 0.0625 -0.483579 0.140625\nv 0.0703125 -0.481459 0.140625\nv 0.078125 -0.479894 0.140625\nv 0.0859375 -0.48003 0.140625\nv 0.09375 -0.480845 0.140625\nv 0.103438 -0.484375 0.140625\nv 0.101562 -0.483426 0.140625\nv 0.101562 -0.484375 0.145731\nv 0.453125 -0.0653385 0.140625\nv 0.460938 -0.0673176 0.140625\nv 0.46875 -0.0649265 0.140625\nv 0.476562 -0.0647646 0.140625\nv 0.484375 -0.0629774 0.140625\nv -0.289062 -0.0588711 0.140625\nv -0.28125 -0.061481 0.140625\nv -0.273438 -0.0590502 0.140625\nv 0.450132 -0.0625 0.140625\nv 0.485335 -0.0625 0.140625\nv -0.29247 -0.0546875 0.140625\nv -0.270277 -0.0546875 0.140625\nv 0.447457 -0.0546875 0.140625\nv 0.490333 -0.0546875 0.140625\nv 0.492188 -0.0491175 0.140625\nv -0.296033 -0.046875 0.140625\nv -0.296875 -0.0432495 0.140625\nv -0.265901 -0.046875 0.140625\nv -0.265625 -0.0463033 0.140625\nv 0.446513 -0.046875 0.140625\nv 0.492759 -0.046875 0.140625\nv -0.297505 -0.0390625 0.140625\nv -0.262909 -0.0390625 0.140625\nv 0.446757 -0.0390625 0.140625\nv 0.494523 -0.0390625 0.140625\nv -0.297895 -0.03125 0.140625\nv -0.26175 -0.03125 0.140625\nv 0.446106 -0.03125 0.140625\nv 0.445312 -0.0276941 0.140625\nv 0.496275 -0.03125 0.140625\nv -0.297716 -0.0234375 0.140625\nv -0.260968 -0.0234375 0.140625\nv 0.44454 -0.0234375 0.140625\nv 0.498709 -0.0234375 0.140625\nv 0.5 -0.0162661 0.140625\nv -0.299273 -0.015625 0.140625\nv -0.259932 -0.015625 0.140625\nv 0.444006 -0.015625 0.140625\nv 0.500078 -0.015625 0.140625\nv 0.5 -0.015625 0.143773\nv -0.301371 -0.0078125 0.140625\nv -0.260032 -0.0078125 0.140625\nv 0.442297 -0.0078125 0.140625\nv 0.500075 -0.0078125 0.140625\nv 0.5 -0.0078125 0.143189\nv -0.303399 0 0.140625\nv -0.259985 0 0.140625\nv 0.441101 0 0.140625\nv 0.500002 0 0.140625\nv 0.5 0.00114379 0.140625\nv 0.5 0 0.140695\nv -0.303174 0.0078125 0.140625\nv -0.258376 0.0078125 0.140625\nv -0.257812 0.00907441 0.140625\nv 0.441765 0.0078125 0.140625\nv 0.499989 0.0078125 0.140625\nv -0.301962 0.015625 0.140625\nv -0.25438 0.015625 0.140625\nv -0.25 0.0193652 0.140625\nv -0.242188 0.0207092 0.140625\nv -0.234375 0.021439 0.140625\nv 0.195312 0.023422 0.140625\nv 0.429688 0.0223835 0.140625\nv 0.440583 0.015625 0.140625\nv 0.4375 0.0183014 0.140625\nv 0.499889 0.015625 0.140625\nv -0.300939 0.0234375 0.140625\nv -0.22723 0.0234375 0.140625\nv -0.226562 0.0235973 0.140625\nv -0.21875 0.0259259 0.140625\nv -0.210938 0.0270261 0.140625\nv -0.203125 0.0272799 0.140625\nv -0.195312 0.0274059 0.140625\nv -0.1875 0.0276101 0.140625\nv -0.179688 0.0275537 0.140625\nv -0.171875 0.0269845 0.140625\nv -0.164062 0.0269691 0.140625\nv -0.15625 0.0271583 0.140625\nv -0.148438 0.027228 0.140625\nv -0.140625 0.0271544 0.140625\nv -0.132812 0.0271181 0.140625\nv -0.125 0.0271255 0.140625\nv -0.117188 0.0272329 0.140625\nv -0.109375 0.0272057 0.140625\nv -0.101562 0.0270841 0.140625\nv -0.09375 0.0268977 0.140625\nv -0.0859375 0.0267732 0.140625\nv -0.078125 0.0266717 0.140625\nv -0.0703125 0.0265255 0.140625\nv -0.0625 0.0263081 0.140625\nv -0.0546875 0.0261718 0.140625\nv -0.046875 0.0260977 0.140625\nv -0.0390625 0.0261141 0.140625\nv -0.03125 0.0261607 0.140625\nv -0.0234375 0.0262462 0.140625\nv -0.015625 0.0262949 0.140625\nv -0.0078125 0.026329 0.140625\nv 0 0.0263953 0.140625\nv 0.0078125 0.0263636 0.140625\nv 0.015625 0.0262744 0.140625\nv 0.0234375 0.0261566 0.140625\nv 0.03125 0.0260308 0.140625\nv 0.0390625 0.025917 0.140625\nv 0.046875 0.0257933 0.140625\nv 0.0546875 0.0256747 0.140625\nv 0.0625 0.0255556 0.140625\nv 0.0703125 0.0254303 0.140625\nv 0.078125 0.0252984 0.140625\nv 0.0859375 0.0251536 0.140625\nv 0.09375 0.0251438 0.140625\nv 0.101562 0.0250186 0.140625\nv 0.109375 0.0248878 0.140625\nv 0.117188 0.024747 0.140625\nv 0.125 0.0245781 0.140625\nv 0.132812 0.0244451 0.140625\nv 0.140625 0.0242905 0.140625\nv 0.148438 0.0241496 0.140625\nv 0.15625 0.0240108 0.140625\nv 0.164062 0.0238575 0.140625\nv 0.171875 0.0236938 0.140625\nv 0.179688 0.023624 0.140625\nv 0.193862 0.0234375 0.140625\nv 0.1875 0.0235026 0.140625\nv 0.196225 0.0234375 0.140625\nv 0.195312 0.0234375 0.141349\nv 0.203125 0.0235434 0.140625\nv 0.210938 0.0236485 0.140625\nv 0.21875 0.0237289 0.140625\nv 0.226562 0.0237822 0.140625\nv 0.234375 0.0238294 0.140625\nv 0.242188 0.0239791 0.140625\nv 0.25 0.0242354 0.140625\nv 0.257812 0.0244954 0.140625\nv 0.265625 0.0247214 0.140625\nv 0.273438 0.0248838 0.140625\nv 0.28125 0.0250446 0.140625\nv 0.289062 0.0251715 0.140625\nv 0.296875 0.0252934 0.140625\nv 0.304688 0.0254167 0.140625\nv 0.3125 0.0256572 0.140625\nv 0.320312 0.0259563 0.140625\nv 0.328125 0.0262515 0.140625\nv 0.335938 0.0262565 0.140625\nv 0.34375 0.0264408 0.140625\nv 0.351562 0.0266269 0.140625\nv 0.359375 0.0267137 0.140625\nv 0.367188 0.0266961 0.140625\nv 0.375 0.0268074 0.140625\nv 0.382812 0.026855 0.140625\nv 0.390625 0.0266687 0.140625\nv 0.398438 0.0262502 0.140625\nv 0.40625 0.0258778 0.140625\nv 0.414062 0.025253 0.140625\nv 0.4252 0.0234375 0.140625\nv 0.421875 0.0240464 0.140625\nv 0.499783 0.0234375 0.140625\nv -0.299849 0.03125 0.140625\nv 0.496568 0.03125 0.140625\nv -0.299106 0.0390625 0.140625\nv -0.296875 0.0459862 0.140625\nv 0.493632 0.0390625 0.140625\nv 0.492188 0.0433781 0.140625\nv -0.296531 0.046875 0.140625\nv 0.490989 0.046875 0.140625\nv -0.293412 0.0546875 0.140625\nv 0.476562 0.0614323 0.140625\nv 0.487702 0.0546875 0.140625\nv 0.484375 0.0571601 0.140625\nv -0.290578 0.0625 0.140625\nv -0.289062 0.0661307 0.140625\nv 0.445312 0.069198 0.140625\nv 0.453125 0.0671395 0.140625\nv 0.460938 0.0659433 0.140625\nv 0.474016 0.0625 0.140625\nv 0.46875 0.064684 0.140625\nv -0.28529 0.0703125 0.140625\nv -0.28125 0.0726478 0.140625\nv -0.273438 0.0770206 0.140625\nv -0.226562 0.0768887 0.140625\nv -0.21875 0.0755485 0.140625\nv -0.210938 0.074614 0.140625\nv -0.203125 0.074891 0.140625\nv -0.195312 0.075188 0.140625\nv -0.1875 0.0756065 0.140625\nv -0.179688 0.075887 0.140625\nv -0.171875 0.0758387 0.140625\nv -0.164062 0.0757393 0.140625\nv -0.15625 0.0756659 0.140625\nv -0.148438 0.0756707 0.140625\nv -0.140625 0.0753869 0.140625\nv -0.132812 0.0750805 0.140625\nv -0.125 0.0750887 0.140625\nv -0.117188 0.0750504 0.140625\nv -0.109375 0.0749017 0.140625\nv -0.101562 0.0747489 0.140625\nv -0.09375 0.0746766 0.140625\nv -0.0859375 0.0747378 0.140625\nv -0.078125 0.0747997 0.140625\nv -0.0703125 0.0748203 0.140625\nv -0.0625 0.0747065 0.140625\nv -0.0546875 0.0745739 0.140625\nv -0.046875 0.0744054 0.140625\nv -0.0390625 0.0741933 0.140625\nv -0.03125 0.0739667 0.140625\nv -0.0234375 0.073811 0.140625\nv -0.015625 0.0736435 0.140625\nv -0.0078125 0.0734436 0.140625\nv 0 0.0732717 0.140625\nv 0.0078125 0.0731432 0.140625\nv 0.015625 0.0730932 0.140625\nv 0.0234375 0.0730542 0.140625\nv 0.03125 0.0730601 0.140625\nv 0.0390625 0.0730679 0.140625\nv 0.046875 0.0730728 0.140625\nv 0.0546875 0.0730559 0.140625\nv 0.0625 0.0730109 0.140625\nv 0.0703125 0.0729499 0.140625\nv 0.078125 0.0728703 0.140625\nv 0.0859375 0.0728466 0.140625\nv 0.09375 0.0728914 0.140625\nv 0.101562 0.072893 0.140625\nv 0.109375 0.0729242 0.140625\nv 0.117188 0.07285 0.140625\nv 0.125 0.0727679 0.140625\nv 0.132812 0.0727555 0.140625\nv 0.140625 0.072735 0.140625\nv 0.148438 0.0726322 0.140625\nv 0.15625 0.0725312 0.140625\nv 0.164062 0.0725109 0.140625\nv 0.171875 0.0725237 0.140625\nv 0.179688 0.0725045 0.140625\nv 0.1875 0.0725213 0.140625\nv 0.195312 0.0724368 0.140625\nv 0.203125 0.072378 0.140625\nv 0.210938 0.0723729 0.140625\nv 0.21875 0.0723808 0.140625\nv 0.226562 0.0724456 0.140625\nv 0.234375 0.0725157 0.140625\nv 0.242188 0.0724832 0.140625\nv 0.25 0.0724994 0.140625\nv 0.257812 0.0725955 0.140625\nv 0.265625 0.0726712 0.140625\nv 0.273438 0.0727034 0.140625\nv 0.28125 0.0728608 0.140625\nv 0.289062 0.0729982 0.140625\nv 0.296875 0.0731474 0.140625\nv 0.304688 0.0732595 0.140625\nv 0.3125 0.0732836 0.140625\nv 0.320312 0.0734964 0.140625\nv 0.328125 0.0735964 0.140625\nv 0.335938 0.073674 0.140625\nv 0.34375 0.0736819 0.140625\nv 0.351562 0.0736387 0.140625\nv 0.359375 0.0735983 0.140625\nv 0.367188 0.0734375 0.140625\nv 0.375 0.0732628 0.140625\nv 0.382812 0.0729792 0.140625\nv 0.390625 0.0725549 0.140625\nv 0.398438 0.0724165 0.140625\nv 0.40625 0.0722777 0.140625\nv 0.414062 0.072068 0.140625\nv 0.421875 0.0718825 0.140625\nv 0.429688 0.0715969 0.140625\nv 0.44016 0.0703125 0.140625\nv 0.4375 0.0708507 0.140625\nv -0.270697 0.078125 0.140625\nv -0.265625 0.0805057 0.140625\nv -0.242188 0.0828833 0.140625\nv -0.23068 0.078125 0.140625\nv -0.234375 0.0795641 0.140625\nv -0.259599 0.0859375 0.140625\nv -0.257812 0.0871972 0.140625\nv -0.246919 0.0859375 0.140625\nv -0.25 0.0872901 0.140625\nv -0.28125 0.17819 0.140625\nv -0.273438 0.176302 0.140625\nv -0.265625 0.173985 0.140625\nv -0.257812 0.175795 0.140625\nv -0.284087 0.179688 0.140625\nv -0.289062 0.184624 0.140625\nv -0.254903 0.179688 0.140625\nv -0.25 0.186092 0.140625\nv -0.291822 0.1875 0.140625\nv -0.249416 0.1875 0.140625\nv -0.296574 0.195312 0.140625\nv -0.296875 0.195796 0.140625\nv -0.245846 0.195312 0.140625\nv -0.299567 0.203125 0.140625\nv -0.243945 0.203125 0.140625\nv -0.300348 0.210938 0.140625\nv -0.242789 0.210938 0.140625\nv -0.301035 0.21875 0.140625\nv -0.242573 0.21875 0.140625\nv -0.301569 0.226562 0.140625\nv -0.242349 0.226562 0.140625\nv -0.30206 0.234375 0.140625\nv -0.242237 0.234375 0.140625\nv -0.242188 0.235538 0.140625\nv -0.302543 0.242188 0.140625\nv -0.24189 0.242188 0.140625\nv -0.302776 0.25 0.140625\nv -0.241628 0.25 0.140625\nv -0.302652 0.257812 0.140625\nv -0.241562 0.257812 0.140625\nv -0.302277 0.265625 0.140625\nv -0.241867 0.265625 0.140625\nv -0.242188 0.270984 0.140625\nv -0.30091 0.273438 0.140625\nv -0.242343 0.273438 0.140625\nv -0.299095 0.28125 0.140625\nv -0.243284 0.28125 0.140625\nv -0.297183 0.289062 0.140625\nv -0.296875 0.291107 0.140625\nv -0.245116 0.289062 0.140625\nv -0.295998 0.296875 0.140625\nv -0.248699 0.296875 0.140625\nv -0.25 0.299381 0.140625\nv -0.295154 0.304688 0.140625\nv -0.25308 0.304688 0.140625\nv -0.294348 0.3125 0.140625\nv -0.257334 0.3125 0.140625\nv -0.257812 0.313741 0.140625\nv -0.257812 0.3125 0.142679\nv -0.292999 0.320312 0.140625\nv -0.259943 0.320312 0.140625\nv -0.29166 0.328125 0.140625\nv -0.289062 0.328125 0.147429\nv -0.264003 0.328125 0.140625\nv -0.265625 0.331602 0.140625\nv -0.265625 0.328125 0.1452\nv -0.290321 0.335938 0.140625\nv -0.289062 0.335938 0.1427\nv -0.267979 0.335938 0.140625\nv -0.273438 0.335938 0.148424\nv -0.289161 0.34375 0.140625\nv -0.289062 0.344453 0.140625\nv -0.289062 0.34375 0.140741\nv -0.28125 0.34375 0.145985\nv -0.272202 0.34375 0.140625\nv -0.273438 0.348456 0.140625\nv -0.273438 0.34375 0.143055\nv -0.286401 0.351562 0.140625\nv -0.27595 0.351562 0.140625\nv -0.28125 0.351562 0.14356\nv -0.282373 0.359375 0.140625\nv -0.280265 0.359375 0.140625\nv -0.28125 0.361703 0.140625\nv -0.28125 0.359375 0.141305\nv -0.289062 0.590722 0.140625\nv -0.294558 0.59375 0.140625\nv -0.296875 0.595178 0.140625\nv -0.287691 0.59375 0.140625\nv -0.289062 0.59375 0.142695\nv -0.302046 0.601562 0.140625\nv -0.304688 0.607098 0.140625\nv -0.296875 0.601562 0.144816\nv -0.284675 0.601562 0.140625\nv -0.305452 0.609375 0.140625\nv -0.304688 0.609375 0.142982\nv -0.281993 0.609375 0.140625\nv -0.28125 0.611083 0.140625\nv -0.308521 0.617188 0.140625\nv -0.3125 0.624483 0.140625\nv -0.278965 0.617188 0.140625\nv -0.28125 0.617188 0.146559\nv -0.312701 0.625 0.140625\nv -0.3125 0.625 0.146765\nv -0.275609 0.625 0.140625\nv -0.315431 0.632812 0.140625\nv -0.273456 0.632812 0.140625\nv -0.273438 0.633094 0.140625\nv -0.317378 0.640625 0.140625\nv -0.272952 0.640625 0.140625\nv -0.318809 0.648438 0.140625\nv -0.272961 0.648438 0.140625\nv -0.320013 0.65625 0.140625\nv -0.320312 0.662351 0.140625\nv -0.272946 0.65625 0.140625\nv -0.320389 0.664062 0.140625\nv -0.273215 0.664062 0.140625\nv -0.273438 0.670962 0.140625\nv -0.320646 0.671875 0.140625\nv -0.273468 0.671875 0.140625\nv -0.320955 0.679688 0.140625\nv -0.273865 0.679688 0.140625\nv -0.321325 0.6875 0.140625\nv -0.27439 0.6875 0.140625\nv -0.321507 0.695312 0.140625\nv -0.274965 0.695312 0.140625\nv -0.321734 0.703125 0.140625\nv -0.275524 0.703125 0.140625\nv -0.321791 0.710938 0.140625\nv -0.276251 0.710938 0.140625\nv -0.322018 0.71875 0.140625\nv -0.277161 0.71875 0.140625\nv -0.322574 0.726562 0.140625\nv -0.278581 0.726562 0.140625\nv -0.323431 0.734375 0.140625\nv -0.279765 0.734375 0.140625\nv -0.28125 0.741669 0.140625\nv -0.324195 0.742188 0.140625\nv -0.281363 0.742188 0.140625\nv -0.324557 0.75 0.140625\nv -0.283278 0.75 0.140625\nv -0.325146 0.757812 0.140625\nv -0.285149 0.757812 0.140625\nv -0.326303 0.765625 0.140625\nv -0.286535 0.765625 0.140625\nv -0.289062 0.773282 0.140625\nv -0.326772 0.773438 0.140625\nv -0.289146 0.773438 0.140625\nv -0.326514 0.78125 0.140625\nv -0.294541 0.78125 0.140625\nv -0.296875 0.783551 0.140625\nv -0.323658 0.789062 0.140625\nv -0.320312 0.794129 0.140625\nv -0.3125 0.794593 0.140625\nv -0.304065 0.789062 0.140625\nv -0.304688 0.789431 0.140625\nv -0.304688 0.789062 0.142479\nv 0.015625 -0.540517 0.148438\nv 0.0234375 -0.54224 0.148438\nv 0.03125 -0.543316 0.148438\nv 0.0390625 -0.543631 0.148438\nv 0.046875 -0.543568 0.148438\nv 0.0546875 -0.54329 0.148438\nv 0.0625 -0.542793 0.148438\nv 0.0703125 -0.541471 0.148438\nv 0 -0.533923 0.148438\nv 0.010032 -0.539062 0.148438\nv 0.0078125 -0.538054 0.148438\nv 0.0769201 -0.539062 0.148438\nv 0.078125 -0.538536 0.148438\nv 0.0859375 -0.53464 0.148438\nv -0.00448136 -0.53125 0.148438\nv -0.0078125 -0.528441 0.148438\nv 0.0922435 -0.53125 0.148438\nv 0.09375 -0.530194 0.148438\nv 0.101562 -0.524694 0.148438\nv -0.0149612 -0.523438 0.148438\nv -0.015625 -0.520312 0.148438\nv 0.103341 -0.523438 0.148438\nv 0.109375 -0.518515 0.148438\nv -0.0169534 -0.515625 0.148438\nv -0.015625 -0.513343 0.148438\nv 0.112434 -0.515625 0.148438\nv 0.117188 -0.509507 0.148438\nv -0.012945 -0.507812 0.148438\nv -0.0078125 -0.50526 0.148438\nv 0 -0.501552 0.148438\nv 0.118419 -0.507812 0.148438\nv 0.00358124 -0.5 0.148438\nv 0.0078125 -0.498883 0.148438\nv 0.015625 -0.497005 0.148438\nv 0.0234375 -0.494591 0.148438\nv 0.119904 -0.5 0.148438\nv 0.117188 -0.494194 0.148438\nv 0.0306119 -0.492188 0.148438\nv 0.03125 -0.491984 0.148438\nv 0.0390625 -0.489464 0.148438\nv 0.046875 -0.487597 0.148438\nv 0.0546875 -0.485897 0.148438\nv 0.101562 -0.484852 0.148438\nv 0.11518 -0.492188 0.148438\nv 0.109375 -0.488507 0.148438\nv 0.0609904 -0.484375 0.148438\nv 0.0625 -0.484017 0.148438\nv 0.0703125 -0.482068 0.148438\nv 0.078125 -0.48086 0.148438\nv 0.0859375 -0.481344 0.148438\nv 0.100277 -0.484375 0.148438\nv 0.09375 -0.482209 0.148438\nv 0.453125 -0.0652751 0.148438\nv 0.460938 -0.0672889 0.148438\nv 0.46875 -0.0648192 0.148438\nv 0.476562 -0.0645781 0.148438\nv 0.484375 -0.0628865 0.148438\nv -0.289062 -0.0582745 0.148438\nv -0.28125 -0.0608242 0.148438\nv -0.273438 -0.0585477 0.148438\nv 0.450137 -0.0625 0.148438\nv 0.48515 -0.0625 0.148438\nv -0.292155 -0.0546875 0.148438\nv -0.270548 -0.0546875 0.148438\nv 0.447473 -0.0546875 0.148438\nv 0.490192 -0.0546875 0.148438\nv 0.492188 -0.0484082 0.148438\nv -0.295885 -0.046875 0.148438\nv -0.296875 -0.0427547 0.148438\nv -0.265866 -0.046875 0.148438\nv -0.265625 -0.0463985 0.148438\nv 0.446591 -0.046875 0.148438\nv 0.492558 -0.046875 0.148438\nv -0.297437 -0.0390625 0.148438\nv -0.262845 -0.0390625 0.148438\nv 0.446743 -0.0390625 0.148438\nv 0.494276 -0.0390625 0.148438\nv -0.297865 -0.03125 0.148438\nv -0.261632 -0.03125 0.148438\nv 0.446248 -0.03125 0.148438\nv 0.445312 -0.0271391 0.148438\nv 0.495952 -0.03125 0.148438\nv -0.297678 -0.0234375 0.148438\nv -0.260818 -0.0234375 0.148438\nv 0.444602 -0.0234375 0.148438\nv 0.498308 -0.0234375 0.148438\nv -0.299144 -0.015625 0.148438\nv -0.259788 -0.015625 0.148438\nv 0.443812 -0.015625 0.148438\nv 0.499844 -0.015625 0.148438\nv -0.301314 -0.0078125 0.148438\nv -0.260038 -0.0078125 0.148438\nv 0.44218 -0.0078125 0.148438\nv 0.499817 -0.0078125 0.148438\nv -0.303255 0 0.148438\nv -0.259939 0 0.148438\nv 0.441002 0 0.148438\nv 0.499771 0 0.148438\nv -0.303031 0.0078125 0.148438\nv -0.258454 0.0078125 0.148438\nv -0.257812 0.00930462 0.148438\nv 0.44174 0.0078125 0.148438\nv 0.499704 0.0078125 0.148438\nv -0.301839 0.015625 0.148438\nv -0.254643 0.015625 0.148438\nv -0.25 0.0196318 0.148438\nv -0.242188 0.0210542 0.148438\nv -0.234375 0.0216257 0.148438\nv 0.429688 0.0225054 0.148438\nv 0.440724 0.015625 0.148438\nv 0.4375 0.01844 0.148438\nv 0.499572 0.015625 0.148438\nv -0.300839 0.0234375 0.148438\nv -0.228029 0.0234375 0.148438\nv -0.226562 0.0237949 0.148438\nv -0.21875 0.0261418 0.148438\nv -0.210938 0.0272437 0.148438\nv -0.203125 0.0274838 0.148438\nv -0.195312 0.0276107 0.148438\nv -0.1875 0.0277935 0.148438\nv -0.179688 0.0276863 0.148438\nv -0.171875 0.0271134 0.148438\nv -0.164062 0.0270319 0.148438\nv -0.15625 0.0271996 0.148438\nv -0.148438 0.0272551 0.148438\nv -0.140625 0.0271846 0.148438\nv -0.132812 0.0271571 0.148438\nv -0.125 0.027173 0.148438\nv -0.117188 0.0272112 0.148438\nv -0.109375 0.0271948 0.148438\nv -0.101562 0.0270737 0.148438\nv -0.09375 0.0269613 0.148438\nv -0.0859375 0.0268588 0.148438\nv -0.078125 0.0267846 0.148438\nv -0.0703125 0.0265906 0.148438\nv -0.0625 0.0263165 0.148438\nv -0.0546875 0.0261546 0.148438\nv -0.046875 0.0260985 0.148438\nv -0.0390625 0.0261295 0.148438\nv -0.03125 0.0261767 0.148438\nv -0.0234375 0.026248 0.148438\nv -0.015625 0.026328 0.148438\nv -0.0078125 0.0263177 0.148438\nv 0 0.0263506 0.148438\nv 0.0078125 0.0262135 0.148438\nv 0.015625 0.0261025 0.148438\nv 0.0234375 0.0259513 0.148438\nv 0.03125 0.0258416 0.148438\nv 0.0390625 0.0257512 0.148438\nv 0.046875 0.0256473 0.148438\nv 0.0546875 0.0255437 0.148438\nv 0.0625 0.0254408 0.148438\nv 0.0703125 0.0253295 0.148438\nv 0.078125 0.0252145 0.148438\nv 0.0859375 0.0250913 0.148438\nv 0.09375 0.0250391 0.148438\nv 0.101562 0.024998 0.148438\nv 0.109375 0.0248749 0.148438\nv 0.117188 0.0247246 0.148438\nv 0.125 0.0245543 0.148438\nv 0.132812 0.0244066 0.148438\nv 0.140625 0.0242432 0.148438\nv 0.148438 0.0240733 0.148438\nv 0.15625 0.023898 0.148438\nv 0.164062 0.0237559 0.148438\nv 0.171875 0.0235794 0.148438\nv 0.179688 0.0234937 0.148438\nv 0.1875 0.0234887 0.148438\nv 0.195312 0.0235751 0.148438\nv 0.203125 0.0236933 0.148438\nv 0.210938 0.0238078 0.148438\nv 0.21875 0.0239038 0.148438\nv 0.226562 0.023919 0.148438\nv 0.234375 0.0239633 0.148438\nv 0.242188 0.0240939 0.148438\nv 0.25 0.024271 0.148438\nv 0.257812 0.0245248 0.148438\nv 0.265625 0.0247587 0.148438\nv 0.273438 0.0249677 0.148438\nv 0.28125 0.0251201 0.148438\nv 0.289062 0.0252487 0.148438\nv 0.296875 0.0253706 0.148438\nv 0.304688 0.0254936 0.148438\nv 0.3125 0.0257417 0.148438\nv 0.320312 0.0260389 0.148438\nv 0.328125 0.0262808 0.148438\nv 0.335938 0.0263667 0.148438\nv 0.34375 0.0264149 0.148438\nv 0.351562 0.0266319 0.148438\nv 0.359375 0.0267114 0.148438\nv 0.367188 0.0266942 0.148438\nv 0.375 0.0268433 0.148438\nv 0.382812 0.0269276 0.148438\nv 0.390625 0.0267496 0.148438\nv 0.398438 0.0263024 0.148438\nv 0.40625 0.0259242 0.148438\nv 0.414062 0.0252394 0.148438\nv 0.425584 0.0234375 0.148438\nv 0.421875 0.0240967 0.148438\nv 0.499523 0.0234375 0.148438\nv -0.299729 0.03125 0.148438\nv 0.496378 0.03125 0.148438\nv -0.299054 0.0390625 0.148438\nv -0.296875 0.0459981 0.148438\nv 0.493578 0.0390625 0.148438\nv 0.492188 0.0430994 0.148438\nv -0.296542 0.046875 0.148438\nv 0.490847 0.046875 0.148438\nv -0.293438 0.0546875 0.148438\nv 0.476562 0.0612255 0.148438\nv 0.487451 0.0546875 0.148438\nv 0.484375 0.0570129 0.148438\nv -0.290745 0.0625 0.148438\nv -0.289062 0.0666515 0.148438\nv 0.445312 0.0691293 0.148438\nv 0.453125 0.0670155 0.148438\nv 0.460938 0.0658142 0.148438\nv 0.473534 0.0625 0.148438\nv 0.46875 0.064518 0.148438\nv -0.285684 0.0703125 0.148438\nv -0.28125 0.0728445 0.148438\nv -0.273438 0.0771951 0.148438\nv -0.226562 0.0769223 0.148438\nv -0.21875 0.0756318 0.148438\nv -0.210938 0.0747239 0.148438\nv -0.203125 0.0749219 0.148438\nv -0.195312 0.075274 0.148438\nv -0.1875 0.0756588 0.148438\nv -0.179688 0.0759985 0.148438\nv -0.171875 0.0759681 0.148438\nv -0.164062 0.0758561 0.148438\nv -0.15625 0.075757 0.148438\nv -0.148438 0.0758198 0.148438\nv -0.140625 0.0755708 0.148438\nv -0.132812 0.0752426 0.148438\nv -0.125 0.0751312 0.148438\nv -0.117188 0.0750804 0.148438\nv -0.109375 0.0749246 0.148438\nv -0.101562 0.0747513 0.148438\nv -0.09375 0.0747198 0.148438\nv -0.0859375 0.0746986 0.148438\nv -0.078125 0.0747988 0.148438\nv -0.0703125 0.0747868 0.148438\nv -0.0625 0.0747096 0.148438\nv -0.0546875 0.0745398 0.148438\nv -0.046875 0.0743902 0.148438\nv -0.0390625 0.0742299 0.148438\nv -0.03125 0.0740184 0.148438\nv -0.0234375 0.073863 0.148438\nv -0.015625 0.0737049 0.148438\nv -0.0078125 0.0734891 0.148438\nv 0 0.0733268 0.148438\nv 0.0078125 0.0731918 0.148438\nv 0.015625 0.0731117 0.148438\nv 0.0234375 0.0730672 0.148438\nv 0.03125 0.073085 0.148438\nv 0.0390625 0.0731003 0.148438\nv 0.046875 0.0731034 0.148438\nv 0.0546875 0.0730733 0.148438\nv 0.0625 0.0730175 0.148438\nv 0.0703125 0.0729426 0.148438\nv 0.078125 0.072843 0.148438\nv 0.0859375 0.0727985 0.148438\nv 0.09375 0.0728211 0.148438\nv 0.101562 0.0728498 0.148438\nv 0.109375 0.0728504 0.148438\nv 0.117188 0.0728539 0.148438\nv 0.125 0.0727687 0.148438\nv 0.132812 0.0727315 0.148438\nv 0.140625 0.0726388 0.148438\nv 0.148438 0.0725116 0.148438\nv 0.15625 0.0723435 0.148438\nv 0.164062 0.0722493 0.148438\nv 0.171875 0.0722582 0.148438\nv 0.179688 0.0722801 0.148438\nv 0.1875 0.0723313 0.148438\nv 0.195312 0.0723739 0.148438\nv 0.203125 0.0723392 0.148438\nv 0.210938 0.0723195 0.148438\nv 0.21875 0.0723594 0.148438\nv 0.226562 0.0724422 0.148438\nv 0.234375 0.0724899 0.148438\nv 0.242188 0.0724364 0.148438\nv 0.25 0.0724174 0.148438\nv 0.257812 0.0724844 0.148438\nv 0.265625 0.072533 0.148438\nv 0.273438 0.0726067 0.148438\nv 0.28125 0.0727099 0.148438\nv 0.289062 0.0729299 0.148438\nv 0.296875 0.0731457 0.148438\nv 0.304688 0.0732774 0.148438\nv 0.3125 0.0733651 0.148438\nv 0.320312 0.0733974 0.148438\nv 0.328125 0.073577 0.148438\nv 0.335938 0.0736487 0.148438\nv 0.34375 0.0736422 0.148438\nv 0.351562 0.0736027 0.148438\nv 0.359375 0.0735605 0.148438\nv 0.367188 0.0733563 0.148438\nv 0.375 0.0731849 0.148438\nv 0.382812 0.0729039 0.148438\nv 0.390625 0.0725256 0.148438\nv 0.398438 0.0723923 0.148438\nv 0.40625 0.0722154 0.148438\nv 0.414062 0.0720017 0.148438\nv 0.421875 0.0718256 0.148438\nv 0.429688 0.0715216 0.148438\nv 0.439953 0.0703125 0.148438\nv 0.4375 0.0708172 0.148438\nv -0.270742 0.078125 0.148438\nv -0.265625 0.080255 0.148438\nv -0.242188 0.0831641 0.148438\nv -0.230584 0.078125 0.148438\nv -0.234375 0.0796074 0.148438\nv -0.25938 0.0859375 0.148438\nv -0.257812 0.0870987 0.148438\nv -0.246442 0.0859375 0.148438\nv -0.25 0.0876061 0.148438\nv -0.28125 0.178402 0.148438\nv -0.273438 0.175706 0.148438\nv -0.265625 0.173497 0.148438\nv -0.257812 0.1755 0.148438\nv -0.283706 0.179688 0.148438\nv -0.289062 0.185557 0.148438\nv -0.254286 0.179688 0.148438\nv -0.25 0.184898 0.148438\nv -0.290694 0.1875 0.148438\nv -0.248801 0.1875 0.148438\nv -0.295907 0.195312 0.148438\nv -0.296875 0.196862 0.148438\nv -0.245518 0.195312 0.148438\nv -0.299207 0.203125 0.148438\nv -0.243676 0.203125 0.148438\nv -0.300213 0.210938 0.148438\nv -0.242749 0.210938 0.148438\nv -0.301017 0.21875 0.148438\nv -0.242541 0.21875 0.148438\nv -0.301589 0.226562 0.148438\nv -0.242399 0.226562 0.148438\nv -0.302116 0.234375 0.148438\nv -0.242248 0.234375 0.148438\nv -0.242188 0.236074 0.148438\nv -0.242188 0.234375 0.155083\nv -0.302585 0.242188 0.148438\nv -0.241955 0.242188 0.148438\nv -0.302737 0.25 0.148438\nv -0.241734 0.25 0.148438\nv -0.302548 0.257812 0.148438\nv -0.241658 0.257812 0.148438\nv -0.302122 0.265625 0.148438\nv -0.241966 0.265625 0.148438\nv -0.242188 0.269776 0.148438\nv -0.300677 0.273438 0.148438\nv -0.242391 0.273438 0.148438\nv -0.298878 0.28125 0.148438\nv -0.243296 0.28125 0.148438\nv -0.296963 0.289062 0.148438\nv -0.296875 0.289599 0.148438\nv -0.296875 0.289062 0.151797\nv -0.245484 0.289062 0.148438\nv -0.295663 0.296875 0.148438\nv -0.24957 0.296875 0.148438\nv -0.25 0.297601 0.148438\nv -0.25 0.296875 0.152968\nv -0.294565 0.304688 0.148438\nv -0.25477 0.304688 0.148438\nv -0.257812 0.309788 0.148438\nv -0.293367 0.3125 0.148438\nv -0.259234 0.3125 0.148438\nv -0.290928 0.320312 0.148438\nv -0.289062 0.326823 0.148438\nv -0.289062 0.320312 0.153538\nv -0.263025 0.320312 0.148438\nv -0.265625 0.325529 0.148438\nv -0.265625 0.320312 0.155876\nv -0.288451 0.328125 0.148438\nv -0.26723 0.328125 0.148438\nv -0.273438 0.335923 0.148438\nv -0.282313 0.335938 0.148438\nv -0.273565 0.335938 0.148438\nv -0.28125 0.337717 0.148438\nv -0.28125 0.335938 0.149629\nv -0.289062 0.600901 0.148438\nv -0.290126 0.601562 0.148438\nv -0.296875 0.606184 0.148438\nv -0.288719 0.601562 0.148438\nv -0.289062 0.601562 0.149036\nv -0.301179 0.609375 0.148438\nv -0.304688 0.612548 0.148438\nv -0.296875 0.609375 0.151201\nv -0.285411 0.609375 0.148438\nv -0.307454 0.617188 0.148438\nv -0.304688 0.617188 0.155747\nv -0.282104 0.617188 0.148438\nv -0.28125 0.618313 0.148438\nv -0.312439 0.625 0.148438\nv -0.3125 0.625156 0.148438\nv -0.277357 0.625 0.148438\nv -0.315216 0.632812 0.148438\nv -0.274168 0.632812 0.148438\nv -0.273438 0.63951 0.148438\nv -0.317249 0.640625 0.148438\nv -0.273326 0.640625 0.148438\nv -0.273438 0.640625 0.149141\nv -0.318736 0.648438 0.148438\nv -0.273205 0.648438 0.148438\nv -0.273438 0.648438 0.151879\nv -0.32002 0.65625 0.148438\nv -0.320312 0.663991 0.148438\nv -0.273191 0.65625 0.148438\nv -0.273438 0.65625 0.154213\nv -0.320315 0.664062 0.148438\nv -0.320312 0.664062 0.148537\nv -0.273419 0.664062 0.148438\nv -0.273438 0.665011 0.148438\nv -0.273438 0.664062 0.149058\nv -0.320563 0.671875 0.148438\nv -0.273576 0.671875 0.148438\nv -0.320853 0.679688 0.148438\nv -0.27393 0.679688 0.148438\nv -0.321158 0.6875 0.148438\nv -0.274378 0.6875 0.148438\nv -0.321281 0.695312 0.148438\nv -0.274907 0.695312 0.148438\nv -0.32137 0.703125 0.148438\nv -0.275479 0.703125 0.148438\nv -0.32148 0.710938 0.148438\nv -0.276222 0.710938 0.148438\nv -0.321772 0.71875 0.148438\nv -0.277183 0.71875 0.148438\nv -0.322321 0.726562 0.148438\nv -0.278751 0.726562 0.148438\nv -0.323198 0.734375 0.148438\nv -0.280129 0.734375 0.148438\nv -0.28125 0.739688 0.148438\nv -0.323858 0.742188 0.148438\nv -0.281796 0.742188 0.148438\nv -0.324271 0.75 0.148438\nv -0.28366 0.75 0.148438\nv -0.32506 0.757812 0.148438\nv -0.285313 0.757812 0.148438\nv -0.326071 0.765625 0.148438\nv -0.286821 0.765625 0.148438\nv -0.289062 0.772008 0.148438\nv -0.32647 0.773438 0.148438\nv -0.289862 0.773438 0.148438\nv -0.325659 0.78125 0.148438\nv -0.304688 0.787775 0.148438\nv -0.295821 0.78125 0.148438\nv -0.296875 0.782174 0.148438\nv -0.296875 0.78125 0.152737\nv -0.322343 0.789062 0.148438\nv -0.320312 0.792003 0.148438\nv -0.306705 0.789062 0.148438\nv -0.3125 0.792985 0.148438\nv 0.015625 -0.540665 0.15625\nv 0.0234375 -0.542264 0.15625\nv 0.03125 -0.543415 0.15625\nv 0.0390625 -0.543822 0.15625\nv 0.046875 -0.543779 0.15625\nv 0.0546875 -0.543389 0.15625\nv 0.0625 -0.542746 0.15625\nv 0.0703125 -0.541294 0.15625\nv 0 -0.534607 0.15625\nv 0.0092276 -0.539062 0.15625\nv 0.0078125 -0.538421 0.15625\nv 0.0755454 -0.539062 0.15625\nv 0.078125 -0.537733 0.15625\nv 0.0859375 -0.534044 0.15625\nv -0.00550149 -0.53125 0.15625\nv -0.0078125 -0.529104 0.15625\nv 0.0914872 -0.53125 0.15625\nv 0.09375 -0.529795 0.15625\nv 0.101562 -0.524721 0.15625\nv -0.0150242 -0.523438 0.15625\nv -0.015625 -0.520743 0.15625\nv 0.103312 -0.523438 0.15625\nv 0.109375 -0.518196 0.15625\nv -0.0169548 -0.515625 0.15625\nv -0.015625 -0.513437 0.15625\nv 0.11211 -0.515625 0.15625\nv 0.117188 -0.508929 0.15625\nv -0.0125321 -0.507812 0.15625\nv -0.0078125 -0.505032 0.15625\nv 0 -0.500677 0.15625\nv 0.118055 -0.507812 0.15625\nv 0.0015323 -0.5 0.15625\nv 0.0078125 -0.49856 0.15625\nv 0.015625 -0.496628 0.15625\nv 0.0234375 -0.494316 0.15625\nv 0.1195 -0.5 0.15625\nv 0.117188 -0.495291 0.15625\nv 0.030783 -0.492188 0.15625\nv 0.03125 -0.492056 0.15625\nv 0.0390625 -0.489579 0.15625\nv 0.046875 -0.487678 0.15625\nv 0.0546875 -0.486097 0.15625\nv 0.101562 -0.486259 0.15625\nv 0.113656 -0.492188 0.15625\nv 0.109375 -0.489719 0.15625\nv 0.0623636 -0.484375 0.15625\nv 0.0625 -0.484345 0.15625\nv 0.0625 -0.484375 0.156858\nv 0.0703125 -0.482599 0.15625\nv 0.078125 -0.482186 0.15625\nv 0.0859375 -0.482697 0.15625\nv 0.0960295 -0.484375 0.15625\nv 0.09375 -0.48368 0.15625\nv 0.09375 -0.484375 0.160282\nv 0.453125 -0.0652448 0.15625\nv 0.460938 -0.0672408 0.15625\nv 0.46875 -0.0646462 0.15625\nv 0.476562 -0.064444 0.15625\nv 0.484375 -0.0628013 0.15625\nv -0.289062 -0.0576029 0.15625\nv -0.28125 -0.0601652 0.15625\nv -0.273438 -0.0580709 0.15625\nv 0.450081 -0.0625 0.15625\nv 0.484983 -0.0625 0.15625\nv -0.291759 -0.0546875 0.15625\nv -0.270828 -0.0546875 0.15625\nv 0.447491 -0.0546875 0.15625\nv 0.490032 -0.0546875 0.15625\nv 0.492188 -0.0475182 0.15625\nv -0.295754 -0.046875 0.15625\nv -0.296875 -0.0427825 0.15625\nv -0.265858 -0.046875 0.15625\nv -0.265625 -0.0464349 0.15625\nv 0.446619 -0.046875 0.15625\nv 0.492335 -0.046875 0.15625\nv -0.297495 -0.0390625 0.15625\nv -0.262861 -0.0390625 0.15625\nv 0.44665 -0.0390625 0.15625\nv 0.493947 -0.0390625 0.15625\nv -0.298005 -0.03125 0.15625\nv -0.261573 -0.03125 0.15625\nv 0.446325 -0.03125 0.15625\nv 0.445312 -0.0270601 0.15625\nv 0.495555 -0.03125 0.15625\nv -0.297797 -0.0234375 0.15625\nv -0.260789 -0.0234375 0.15625\nv 0.444563 -0.0234375 0.15625\nv 0.497866 -0.0234375 0.15625\nv -0.2991 -0.015625 0.15625\nv -0.259742 -0.015625 0.15625\nv 0.443613 -0.015625 0.15625\nv 0.49951 -0.015625 0.15625\nv -0.301296 -0.0078125 0.15625\nv -0.260017 -0.0078125 0.15625\nv 0.441993 -0.0078125 0.15625\nv 0.49951 -0.0078125 0.15625\nv -0.303122 0 0.15625\nv -0.25994 0 0.15625\nv 0.440868 0 0.15625\nv 0.499484 0 0.15625\nv -0.302875 0.0078125 0.15625\nv -0.258535 0.0078125 0.15625\nv -0.257812 0.00959686 0.15625\nv 0.441638 0.0078125 0.15625\nv 0.499379 0.0078125 0.15625\nv -0.301734 0.015625 0.15625\nv -0.254895 0.015625 0.15625\nv -0.25 0.019893 0.15625\nv -0.242188 0.0213941 0.15625\nv -0.234375 0.0218611 0.15625\nv 0.429688 0.022699 0.15625\nv 0.440841 0.015625 0.15625\nv 0.4375 0.0186536 0.15625\nv 0.499292 0.015625 0.15625\nv -0.30073 0.0234375 0.15625\nv -0.228944 0.0234375 0.15625\nv -0.226562 0.024006 0.15625\nv -0.21875 0.0263223 0.15625\nv -0.210938 0.0274858 0.15625\nv -0.203125 0.0276946 0.15625\nv -0.195312 0.0278217 0.15625\nv -0.1875 0.0279734 0.15625\nv -0.179688 0.027869 0.15625\nv -0.171875 0.0272585 0.15625\nv -0.164062 0.0271031 0.15625\nv -0.15625 0.0272183 0.15625\nv -0.148438 0.0272798 0.15625\nv -0.140625 0.0271733 0.15625\nv -0.132812 0.0272091 0.15625\nv -0.125 0.0272362 0.15625\nv -0.117188 0.0271788 0.15625\nv -0.109375 0.0271675 0.15625\nv -0.101562 0.0271116 0.15625\nv -0.09375 0.0270174 0.15625\nv -0.0859375 0.0269503 0.15625\nv -0.078125 0.026898 0.15625\nv -0.0703125 0.026631 0.15625\nv -0.0625 0.0263215 0.15625\nv -0.0546875 0.0261316 0.15625\nv -0.046875 0.0260977 0.15625\nv -0.0390625 0.0261263 0.15625\nv -0.03125 0.0261887 0.15625\nv -0.0234375 0.0262402 0.15625\nv -0.015625 0.026294 0.15625\nv -0.0078125 0.0262808 0.15625\nv 0 0.0262019 0.15625\nv 0.0078125 0.0260399 0.15625\nv 0.015625 0.0259148 0.15625\nv 0.0234375 0.0257671 0.15625\nv 0.03125 0.0256774 0.15625\nv 0.0390625 0.0255857 0.15625\nv 0.046875 0.0254775 0.15625\nv 0.0546875 0.0253807 0.15625\nv 0.0625 0.0252861 0.15625\nv 0.0703125 0.02519 0.15625\nv 0.078125 0.0250851 0.15625\nv 0.0859375 0.0249713 0.15625\nv 0.09375 0.0249251 0.15625\nv 0.101562 0.0249138 0.15625\nv 0.109375 0.0248351 0.15625\nv 0.117188 0.0246923 0.15625\nv 0.125 0.0245178 0.15625\nv 0.132812 0.0243615 0.15625\nv 0.140625 0.0241985 0.15625\nv 0.148438 0.024016 0.15625\nv 0.15625 0.0238216 0.15625\nv 0.164062 0.0236692 0.15625\nv 0.171875 0.0235325 0.15625\nv 0.179688 0.0234802 0.15625\nv 0.1875 0.0235637 0.15625\nv 0.195312 0.0236813 0.15625\nv 0.203125 0.0238371 0.15625\nv 0.210938 0.0239626 0.15625\nv 0.21875 0.0240708 0.15625\nv 0.226562 0.0241257 0.15625\nv 0.234375 0.0241567 0.15625\nv 0.242188 0.0242423 0.15625\nv 0.25 0.0243916 0.15625\nv 0.257812 0.0245702 0.15625\nv 0.265625 0.0247903 0.15625\nv 0.273438 0.024988 0.15625\nv 0.28125 0.0251878 0.15625\nv 0.289062 0.0253502 0.15625\nv 0.296875 0.025436 0.15625\nv 0.304688 0.0255769 0.15625\nv 0.3125 0.0258504 0.15625\nv 0.320312 0.0261409 0.15625\nv 0.328125 0.0263151 0.15625\nv 0.335938 0.0264064 0.15625\nv 0.34375 0.0264711 0.15625\nv 0.351562 0.0265105 0.15625\nv 0.359375 0.0266574 0.15625\nv 0.367188 0.0266545 0.15625\nv 0.375 0.0268196 0.15625\nv 0.382812 0.0269587 0.15625\nv 0.390625 0.0267978 0.15625\nv 0.398438 0.0264001 0.15625\nv 0.40625 0.0260753 0.15625\nv 0.414062 0.0252966 0.15625\nv 0.42627 0.0234375 0.15625\nv 0.421875 0.0241771 0.15625\nv 0.499239 0.0234375 0.15625\nv -0.299633 0.03125 0.15625\nv 0.496187 0.03125 0.15625\nv -0.299003 0.0390625 0.15625\nv -0.296875 0.0460841 0.15625\nv 0.493471 0.0390625 0.15625\nv 0.492188 0.0427996 0.15625\nv -0.29658 0.046875 0.15625\nv 0.490728 0.046875 0.15625\nv -0.293515 0.0546875 0.15625\nv 0.476562 0.0610237 0.15625\nv 0.487228 0.0546875 0.15625\nv 0.484375 0.0568469 0.15625\nv -0.290875 0.0625 0.15625\nv -0.289062 0.067151 0.15625\nv 0.445312 0.0690376 0.15625\nv 0.453125 0.0668664 0.15625\nv 0.460938 0.0656571 0.15625\nv 0.473088 0.0625 0.15625\nv 0.46875 0.0643669 0.15625\nv -0.285943 0.0703125 0.15625\nv -0.28125 0.0728125 0.15625\nv -0.273438 0.0770962 0.15625\nv -0.226562 0.0770128 0.15625\nv -0.21875 0.0757162 0.15625\nv -0.210938 0.0747858 0.15625\nv -0.203125 0.0749559 0.15625\nv -0.195312 0.075341 0.15625\nv -0.1875 0.0757899 0.15625\nv -0.179688 0.0761335 0.15625\nv -0.171875 0.0760856 0.15625\nv -0.164062 0.0759612 0.15625\nv -0.15625 0.0758294 0.15625\nv -0.148438 0.0758873 0.15625\nv -0.140625 0.0757109 0.15625\nv -0.132812 0.0754423 0.15625\nv -0.125 0.075247 0.15625\nv -0.117188 0.0751677 0.15625\nv -0.109375 0.0749409 0.15625\nv -0.101562 0.0748221 0.15625\nv -0.09375 0.0747485 0.15625\nv -0.0859375 0.0746974 0.15625\nv -0.078125 0.0747247 0.15625\nv -0.0703125 0.0747281 0.15625\nv -0.0625 0.074643 0.15625\nv -0.0546875 0.0745001 0.15625\nv -0.046875 0.0743349 0.15625\nv -0.0390625 0.074213 0.15625\nv -0.03125 0.0740853 0.15625\nv -0.0234375 0.0739152 0.15625\nv -0.015625 0.0737495 0.15625\nv -0.0078125 0.0735411 0.15625\nv 0 0.0733743 0.15625\nv 0.0078125 0.0732255 0.15625\nv 0.015625 0.0731382 0.15625\nv 0.0234375 0.0731041 0.15625\nv 0.03125 0.0731147 0.15625\nv 0.0390625 0.0731417 0.15625\nv 0.046875 0.0731204 0.15625\nv 0.0546875 0.0730694 0.15625\nv 0.0625 0.0730069 0.15625\nv 0.0703125 0.0729231 0.15625\nv 0.078125 0.0728218 0.15625\nv 0.0859375 0.072768 0.15625\nv 0.09375 0.0727616 0.15625\nv 0.101562 0.0728181 0.15625\nv 0.109375 0.0727997 0.15625\nv 0.117188 0.0728001 0.15625\nv 0.125 0.0727224 0.15625\nv 0.132812 0.0726457 0.15625\nv 0.140625 0.0725649 0.15625\nv 0.148438 0.0723704 0.15625\nv 0.15625 0.072173 0.15625\nv 0.164062 0.0720482 0.15625\nv 0.171875 0.0720399 0.15625\nv 0.179688 0.0720732 0.15625\nv 0.1875 0.0721361 0.15625\nv 0.195312 0.0722033 0.15625\nv 0.203125 0.0722782 0.15625\nv 0.210938 0.0723261 0.15625\nv 0.21875 0.072357 0.15625\nv 0.226562 0.0724085 0.15625\nv 0.234375 0.072467 0.15625\nv 0.242188 0.0724586 0.15625\nv 0.25 0.0724464 0.15625\nv 0.257812 0.0724004 0.15625\nv 0.265625 0.0724125 0.15625\nv 0.273438 0.0724956 0.15625\nv 0.28125 0.0725941 0.15625\nv 0.289062 0.0727924 0.15625\nv 0.296875 0.0730666 0.15625\nv 0.304688 0.0732617 0.15625\nv 0.3125 0.073407 0.15625\nv 0.320312 0.0733957 0.15625\nv 0.328125 0.0735012 0.15625\nv 0.335938 0.0736041 0.15625\nv 0.34375 0.0735943 0.15625\nv 0.351562 0.0735551 0.15625\nv 0.359375 0.0735021 0.15625\nv 0.367188 0.0732774 0.15625\nv 0.375 0.0730973 0.15625\nv 0.382812 0.072835 0.15625\nv 0.390625 0.0724128 0.15625\nv 0.398438 0.0722906 0.15625\nv 0.40625 0.0721214 0.15625\nv 0.414062 0.0719323 0.15625\nv 0.421875 0.0717502 0.15625\nv 0.429688 0.071431 0.15625\nv 0.439591 0.0703125 0.15625\nv 0.4375 0.0707455 0.15625\nv -0.270052 0.078125 0.15625\nv -0.265625 0.0799244 0.15625\nv -0.242188 0.0829397 0.15625\nv -0.23051 0.078125 0.15625\nv -0.234375 0.0795479 0.15625\nv -0.259446 0.0859375 0.15625\nv -0.257812 0.0871789 0.15625\nv -0.24659 0.0859375 0.15625\nv -0.25 0.0876129 0.15625\nv -0.28125 0.178512 0.15625\nv -0.273438 0.175003 0.15625\nv -0.265625 0.173049 0.15625\nv -0.257812 0.175278 0.15625\nv -0.283272 0.179688 0.15625\nv -0.289062 0.186382 0.15625\nv -0.254176 0.179688 0.15625\nv -0.25 0.184678 0.15625\nv -0.2899 0.1875 0.15625\nv -0.248673 0.1875 0.15625\nv -0.295137 0.195312 0.15625\nv -0.296875 0.198305 0.15625\nv -0.24572 0.195312 0.15625\nv -0.29869 0.203125 0.15625\nv -0.243717 0.203125 0.15625\nv -0.300111 0.210938 0.15625\nv -0.242781 0.210938 0.15625\nv -0.301004 0.21875 0.15625\nv -0.242448 0.21875 0.15625\nv -0.301623 0.226562 0.15625\nv -0.242414 0.226562 0.15625\nv -0.242188 0.234027 0.15625\nv -0.302149 0.234375 0.15625\nv -0.242176 0.234375 0.15625\nv -0.302543 0.242188 0.15625\nv -0.241847 0.242188 0.15625\nv -0.30264 0.25 0.15625\nv -0.241659 0.25 0.15625\nv -0.302464 0.257812 0.15625\nv -0.241624 0.257812 0.15625\nv -0.301936 0.265625 0.15625\nv -0.241926 0.265625 0.15625\nv -0.242188 0.271047 0.15625\nv -0.300422 0.273438 0.15625\nv -0.242309 0.273438 0.15625\nv -0.298623 0.28125 0.15625\nv -0.296875 0.288599 0.15625\nv -0.243281 0.28125 0.15625\nv -0.296757 0.289062 0.15625\nv -0.245817 0.289062 0.15625\nv -0.25 0.296305 0.15625\nv -0.294963 0.296875 0.15625\nv -0.250376 0.296875 0.15625\nv -0.293406 0.304688 0.15625\nv -0.256149 0.304688 0.15625\nv -0.257812 0.307238 0.15625\nv -0.29118 0.3125 0.15625\nv -0.289062 0.317852 0.15625\nv -0.289062 0.3125 0.16116\nv -0.261282 0.3125 0.15625\nv -0.265625 0.320045 0.15625\nv -0.287574 0.320312 0.15625\nv -0.265811 0.320312 0.15625\nv -0.281755 0.328125 0.15625\nv -0.28125 0.328991 0.15625\nv -0.28125 0.328125 0.157149\nv -0.271998 0.328125 0.15625\nv -0.273438 0.32992 0.15625\nv -0.273438 0.328125 0.158838\nv -0.289062 0.608605 0.15625\nv -0.290167 0.609375 0.15625\nv -0.296875 0.61406 0.15625\nv -0.288576 0.609375 0.15625\nv -0.289062 0.609375 0.157292\nv -0.304195 0.617188 0.15625\nv -0.304688 0.617349 0.15625\nv -0.296875 0.617188 0.160278\nv -0.284981 0.617188 0.15625\nv -0.28125 0.621771 0.15625\nv -0.311772 0.625 0.15625\nv -0.3125 0.626568 0.15625\nv -0.279547 0.625 0.15625\nv -0.28125 0.625 0.161621\nv -0.314946 0.632812 0.15625\nv -0.276006 0.632812 0.15625\nv -0.316996 0.640625 0.15625\nv -0.274565 0.640625 0.15625\nv -0.318569 0.648438 0.15625\nv -0.273733 0.648438 0.15625\nv -0.319779 0.65625 0.15625\nv -0.273524 0.65625 0.15625\nv -0.320119 0.664062 0.15625\nv -0.320312 0.67028 0.15625\nv -0.273659 0.664062 0.15625\nv -0.320363 0.671875 0.15625\nv -0.320312 0.671875 0.159728\nv -0.273726 0.671875 0.15625\nv -0.32062 0.679688 0.15625\nv -0.274017 0.679688 0.15625\nv -0.320934 0.6875 0.15625\nv -0.274374 0.6875 0.15625\nv -0.321036 0.695312 0.15625\nv -0.274781 0.695312 0.15625\nv -0.321111 0.703125 0.15625\nv -0.275337 0.703125 0.15625\nv -0.321186 0.710938 0.15625\nv -0.276163 0.710938 0.15625\nv -0.321366 0.71875 0.15625\nv -0.27727 0.71875 0.15625\nv -0.322081 0.726562 0.15625\nv -0.279 0.726562 0.15625\nv -0.322869 0.734375 0.15625\nv -0.28053 0.734375 0.15625\nv -0.28125 0.737816 0.15625\nv -0.323492 0.742188 0.15625\nv -0.282183 0.742188 0.15625\nv -0.324 0.75 0.15625\nv -0.284004 0.75 0.15625\nv -0.324979 0.757812 0.15625\nv -0.285579 0.757812 0.15625\nv -0.325797 0.765625 0.15625\nv -0.287268 0.765625 0.15625\nv -0.289062 0.77049 0.15625\nv -0.326036 0.773438 0.15625\nv -0.29076 0.773438 0.15625\nv -0.296875 0.780356 0.15625\nv -0.324975 0.78125 0.15625\nv -0.297833 0.78125 0.15625\nv -0.304688 0.78583 0.15625\nv -0.32086 0.789062 0.15625\nv -0.320312 0.789897 0.15625\nv -0.320312 0.789062 0.159232\nv -0.309833 0.789062 0.15625\nv -0.3125 0.791259 0.15625\nv 0.015625 -0.540844 0.164062\nv 0.0234375 -0.542409 0.164062\nv 0.03125 -0.543663 0.164062\nv 0.0390625 -0.544089 0.164062\nv 0.046875 -0.543964 0.164062\nv 0.0546875 -0.543499 0.164062\nv 0.0625 -0.542742 0.164062\nv 0.0703125 -0.540974 0.164062\nv 0 -0.535155 0.164062\nv 0.00781956 -0.539062 0.164062\nv 0.0078125 -0.539059 0.164062\nv 0.0078125 -0.539062 0.164105\nv 0.0749103 -0.539062 0.164062\nv 0.078125 -0.537388 0.164062\nv 0.0859375 -0.533886 0.164062\nv -0.00621794 -0.53125 0.164062\nv -0.0078125 -0.529708 0.164062\nv 0.0914328 -0.53125 0.164062\nv 0.09375 -0.529828 0.164062\nv 0.101562 -0.524469 0.164062\nv -0.0147592 -0.523438 0.164062\nv -0.015625 -0.516441 0.164062\nv 0.103046 -0.523438 0.164062\nv 0.109375 -0.517952 0.164062\nv -0.0157511 -0.515625 0.164062\nv -0.015625 -0.515383 0.164062\nv -0.015625 -0.515625 0.164965\nv 0.11192 -0.515625 0.164062\nv 0.117188 -0.508753 0.164062\nv -0.0120367 -0.507812 0.164062\nv -0.0078125 -0.505267 0.164062\nv 0 -0.500374 0.164062\nv 0.117841 -0.507812 0.164062\nv 0.000810206 -0.5 0.164062\nv 0.0078125 -0.498359 0.164062\nv 0.015625 -0.496511 0.164062\nv 0.0234375 -0.494276 0.164062\nv 0.118991 -0.5 0.164062\nv 0.117188 -0.497126 0.164062\nv 0.0307146 -0.492188 0.164062\nv 0.03125 -0.492038 0.164062\nv 0.03125 -0.492188 0.169162\nv 0.0390625 -0.4898 0.164062\nv 0.046875 -0.487871 0.164062\nv 0.0546875 -0.486364 0.164062\nv 0.0625 -0.484749 0.164062\nv 0.09375 -0.485082 0.164062\nv 0.101562 -0.487682 0.164062\nv 0.111088 -0.492188 0.164062\nv 0.109375 -0.491121 0.164062\nv 0.109375 -0.492188 0.168804\nv 0.0647912 -0.484375 0.164062\nv 0.0703125 -0.483452 0.164062\nv 0.0703125 -0.484375 0.170224\nv 0.078125 -0.483694 0.164062\nv 0.078125 -0.484375 0.168219\nv 0.0867172 -0.484375 0.164062\nv 0.0859375 -0.484305 0.164062\nv 0.0859375 -0.484375 0.164458\nv 0.453125 -0.0653452 0.164062\nv 0.460938 -0.067169 0.164062\nv 0.46875 -0.0644706 0.164062\nv 0.476562 -0.0643204 0.164062\nv 0.484375 -0.0627185 0.164062\nv -0.289062 -0.0568822 0.164062\nv -0.28125 -0.0594988 0.164062\nv -0.273438 -0.0575115 0.164062\nv 0.449909 -0.0625 0.164062\nv 0.484831 -0.0625 0.164062\nv -0.291268 -0.0546875 0.164062\nv -0.271186 -0.0546875 0.164062\nv 0.447467 -0.0546875 0.164062\nv 0.489886 -0.0546875 0.164062\nv 0.492188 -0.0472179 0.164062\nv -0.295537 -0.046875 0.164062\nv -0.296875 -0.0427369 0.164062\nv -0.266005 -0.046875 0.164062\nv -0.265625 -0.046199 0.164062\nv 0.446581 -0.046875 0.164062\nv 0.492265 -0.046875 0.164062\nv 0.492188 -0.046875 0.170087\nv -0.297577 -0.0390625 0.164062\nv -0.262908 -0.0390625 0.164062\nv 0.446502 -0.0390625 0.164062\nv 0.493728 -0.0390625 0.164062\nv -0.298153 -0.03125 0.164062\nv -0.261576 -0.03125 0.164062\nv 0.446384 -0.03125 0.164062\nv 0.445312 -0.0271374 0.164062\nv 0.495254 -0.03125 0.164062\nv -0.297929 -0.0234375 0.164062\nv -0.260825 -0.0234375 0.164062\nv 0.444494 -0.0234375 0.164062\nv 0.497496 -0.0234375 0.164062\nv -0.299136 -0.015625 0.164062\nv -0.259729 -0.015625 0.164062\nv 0.443525 -0.015625 0.164062\nv 0.499252 -0.015625 0.164062\nv -0.301408 -0.0078125 0.164062\nv -0.260047 -0.0078125 0.164062\nv 0.441845 -0.0078125 0.164062\nv 0.499296 -0.0078125 0.164062\nv -0.303048 0 0.164062\nv -0.259967 0 0.164062\nv 0.440847 0 0.164062\nv 0.499318 0 0.164062\nv -0.302827 0.0078125 0.164062\nv -0.258567 0.0078125 0.164062\nv -0.257812 0.00984928 0.164062\nv 0.441629 0.0078125 0.164062\nv 0.499136 0.0078125 0.164062\nv -0.301698 0.015625 0.164062\nv -0.2552 0.015625 0.164062\nv -0.25 0.0201922 0.164062\nv -0.242188 0.0217608 0.164062\nv -0.234375 0.0221298 0.164062\nv 0.429688 0.0229838 0.164062\nv 0.441078 0.015625 0.164062\nv 0.4375 0.0189761 0.164062\nv 0.499009 0.015625 0.164062\nv -0.300691 0.0234375 0.164062\nv -0.229895 0.0234375 0.164062\nv -0.226562 0.0242062 0.164062\nv -0.21875 0.0265483 0.164062\nv -0.210938 0.0277477 0.164062\nv -0.203125 0.027968 0.164062\nv -0.195312 0.0280622 0.164062\nv -0.1875 0.0282262 0.164062\nv -0.179688 0.028076 0.164062\nv -0.171875 0.0273864 0.164062\nv -0.164062 0.0271308 0.164062\nv -0.15625 0.0272362 0.164062\nv -0.148438 0.0272778 0.164062\nv -0.140625 0.0272301 0.164062\nv -0.132812 0.027224 0.164062\nv -0.125 0.0272839 0.164062\nv -0.117188 0.0271907 0.164062\nv -0.109375 0.0271484 0.164062\nv -0.101562 0.0271329 0.164062\nv -0.09375 0.0270695 0.164062\nv -0.0859375 0.027048 0.164062\nv -0.078125 0.0269371 0.164062\nv -0.0703125 0.0266514 0.164062\nv -0.0625 0.0263506 0.164062\nv -0.0546875 0.0261633 0.164062\nv -0.046875 0.0261025 0.164062\nv -0.0390625 0.0261228 0.164062\nv -0.03125 0.0261797 0.164062\nv -0.0234375 0.026187 0.164062\nv -0.015625 0.0261979 0.164062\nv -0.0078125 0.0261636 0.164062\nv 0 0.0260441 0.164062\nv 0.0078125 0.025856 0.164062\nv 0.015625 0.0257273 0.164062\nv 0.0234375 0.0255898 0.164062\nv 0.03125 0.0255144 0.164062\nv 0.0390625 0.0254098 0.164062\nv 0.046875 0.0252951 0.164062\nv 0.0546875 0.0251954 0.164062\nv 0.0625 0.0251031 0.164062\nv 0.0703125 0.0250124 0.164062\nv 0.078125 0.0249173 0.164062\nv 0.0859375 0.0248188 0.164062\nv 0.09375 0.0247652 0.164062\nv 0.101562 0.0247654 0.164062\nv 0.109375 0.0246823 0.164062\nv 0.117188 0.0245773 0.164062\nv 0.125 0.024438 0.164062\nv 0.132812 0.0243058 0.164062\nv 0.140625 0.024158 0.164062\nv 0.148438 0.0240108 0.164062\nv 0.15625 0.0238437 0.164062\nv 0.164062 0.0236686 0.164062\nv 0.171875 0.0235632 0.164062\nv 0.179688 0.0236163 0.164062\nv 0.1875 0.0237137 0.164062\nv 0.195312 0.0237889 0.164062\nv 0.203125 0.0239557 0.164062\nv 0.210938 0.0241343 0.164062\nv 0.21875 0.0242506 0.164062\nv 0.226562 0.0243154 0.164062\nv 0.234375 0.024338 0.164062\nv 0.242188 0.0244004 0.164062\nv 0.25 0.0244838 0.164062\nv 0.257812 0.0246266 0.164062\nv 0.265625 0.0247873 0.164062\nv 0.273438 0.0250117 0.164062\nv 0.28125 0.0251925 0.164062\nv 0.289062 0.0253716 0.164062\nv 0.296875 0.0254976 0.164062\nv 0.304688 0.0256702 0.164062\nv 0.3125 0.0259459 0.164062\nv 0.320312 0.0262325 0.164062\nv 0.328125 0.0263365 0.164062\nv 0.335938 0.0264088 0.164062\nv 0.34375 0.0264972 0.164062\nv 0.351562 0.0265073 0.164062\nv 0.359375 0.0265446 0.164062\nv 0.367188 0.0265898 0.164062\nv 0.375 0.0267833 0.164062\nv 0.382812 0.0269551 0.164062\nv 0.390625 0.02683 0.164062\nv 0.398438 0.0265285 0.164062\nv 0.40625 0.0261977 0.164062\nv 0.414062 0.0253878 0.164062\nv 0.427331 0.0234375 0.164062\nv 0.421875 0.0242541 0.164062\nv 0.49892 0.0234375 0.164062\nv -0.299678 0.03125 0.164062\nv 0.49599 0.03125 0.164062\nv -0.299052 0.0390625 0.164062\nv -0.296875 0.0461034 0.164062\nv 0.493301 0.0390625 0.164062\nv 0.492188 0.0423004 0.164062\nv -0.296578 0.046875 0.164062\nv 0.490536 0.046875 0.164062\nv -0.29356 0.0546875 0.164062\nv 0.476562 0.0607332 0.164062\nv 0.486881 0.0546875 0.164062\nv 0.484375 0.0565823 0.164062\nv -0.29104 0.0625 0.164062\nv -0.289062 0.0679964 0.164062\nv 0.445312 0.0688863 0.164062\nv 0.453125 0.0667328 0.164062\nv 0.460938 0.065509 0.164062\nv 0.472509 0.0625 0.164062\nv 0.46875 0.0641819 0.164062\nv -0.286555 0.0703125 0.164062\nv -0.28125 0.0729343 0.164062\nv -0.273438 0.0769409 0.164062\nv -0.226562 0.0770857 0.164062\nv -0.21875 0.0758085 0.164062\nv -0.210938 0.0748744 0.164062\nv -0.203125 0.0750185 0.164062\nv -0.195312 0.0754691 0.164062\nv -0.1875 0.0759147 0.164062\nv -0.179688 0.0762012 0.164062\nv -0.171875 0.0761198 0.164062\nv -0.164062 0.0760445 0.164062\nv -0.15625 0.0759137 0.164062\nv -0.148438 0.0759073 0.164062\nv -0.140625 0.0758022 0.164062\nv -0.132812 0.0756025 0.164062\nv -0.125 0.0754215 0.164062\nv -0.117188 0.075254 0.164062\nv -0.109375 0.0750422 0.164062\nv -0.101562 0.0748632 0.164062\nv -0.09375 0.0747278 0.164062\nv -0.0859375 0.0746568 0.164062\nv -0.078125 0.0746589 0.164062\nv -0.0703125 0.0746582 0.164062\nv -0.0625 0.0745828 0.164062\nv -0.0546875 0.0744644 0.164062\nv -0.046875 0.0743496 0.164062\nv -0.0390625 0.0742416 0.164062\nv -0.03125 0.0741561 0.164062\nv -0.0234375 0.0740308 0.164062\nv -0.015625 0.0738528 0.164062\nv -0.0078125 0.0736709 0.164062\nv 0 0.0734853 0.164062\nv 0.0078125 0.0732845 0.164062\nv 0.015625 0.0731798 0.164062\nv 0.0234375 0.0731506 0.164062\nv 0.03125 0.0731499 0.164062\nv 0.0390625 0.0731629 0.164062\nv 0.046875 0.0731207 0.164062\nv 0.0546875 0.0730571 0.164062\nv 0.0625 0.0729924 0.164062\nv 0.0703125 0.0729001 0.164062\nv 0.078125 0.0727948 0.164062\nv 0.0859375 0.0727383 0.164062\nv 0.09375 0.0727257 0.164062\nv 0.101562 0.0727546 0.164062\nv 0.109375 0.0727358 0.164062\nv 0.117188 0.0726792 0.164062\nv 0.125 0.0726328 0.164062\nv 0.132812 0.0725805 0.164062\nv 0.140625 0.0724411 0.164062\nv 0.148438 0.0722873 0.164062\nv 0.15625 0.0721336 0.164062\nv 0.164062 0.0719673 0.164062\nv 0.171875 0.0719015 0.164062\nv 0.179688 0.0719119 0.164062\nv 0.1875 0.0719525 0.164062\nv 0.195312 0.072002 0.164062\nv 0.203125 0.0721344 0.164062\nv 0.210938 0.0722662 0.164062\nv 0.21875 0.0723249 0.164062\nv 0.226562 0.0723835 0.164062\nv 0.234375 0.0724627 0.164062\nv 0.242188 0.0724861 0.164062\nv 0.25 0.0724905 0.164062\nv 0.257812 0.0724389 0.164062\nv 0.265625 0.0723682 0.164062\nv 0.273438 0.0723915 0.164062\nv 0.28125 0.0724964 0.164062\nv 0.289062 0.0726845 0.164062\nv 0.296875 0.0728983 0.164062\nv 0.304688 0.0731294 0.164062\nv 0.3125 0.073324 0.164062\nv 0.320312 0.0734238 0.164062\nv 0.328125 0.0733787 0.164062\nv 0.335938 0.0734935 0.164062\nv 0.34375 0.0735094 0.164062\nv 0.351562 0.0734784 0.164062\nv 0.359375 0.0734104 0.164062\nv 0.367188 0.0731771 0.164062\nv 0.375 0.0730107 0.164062\nv 0.382812 0.072725 0.164062\nv 0.390625 0.0722959 0.164062\nv 0.398438 0.0721818 0.164062\nv 0.40625 0.0720048 0.164062\nv 0.414062 0.0718256 0.164062\nv 0.421875 0.0716469 0.164062\nv 0.429688 0.0713025 0.164062\nv 0.438904 0.0703125 0.164062\nv 0.4375 0.0706078 0.164062\nv -0.268442 0.078125 0.164062\nv -0.265625 0.0791107 0.164062\nv -0.265625 0.078125 0.1693\nv -0.242188 0.0827028 0.164062\nv -0.230495 0.078125 0.164062\nv -0.234375 0.0794598 0.164062\nv -0.258578 0.0859375 0.164062\nv -0.257812 0.0864867 0.164062\nv -0.257812 0.0859375 0.170613\nv -0.247151 0.0859375 0.164062\nv -0.25 0.0872318 0.164062\nv -0.28125 0.178316 0.164062\nv -0.273438 0.174463 0.164062\nv -0.265625 0.172939 0.164062\nv -0.257812 0.17532 0.164062\nv -0.283569 0.179688 0.164062\nv -0.289062 0.186623 0.164062\nv -0.254545 0.179688 0.164062\nv -0.25 0.18596 0.164062\nv -0.289644 0.1875 0.164062\nv -0.249332 0.1875 0.164062\nv -0.25 0.1875 0.170503\nv -0.294735 0.195312 0.164062\nv -0.296875 0.199642 0.164062\nv -0.24628 0.195312 0.164062\nv -0.298166 0.203125 0.164062\nv -0.243841 0.203125 0.164062\nv -0.299957 0.210938 0.164062\nv -0.242765 0.210938 0.164062\nv -0.300986 0.21875 0.164062\nv -0.242492 0.21875 0.164062\nv -0.301575 0.226562 0.164062\nv -0.242392 0.226562 0.164062\nv -0.242188 0.230946 0.164062\nv -0.302039 0.234375 0.164062\nv -0.242021 0.234375 0.164062\nv -0.302423 0.242188 0.164062\nv -0.241725 0.242188 0.164062\nv -0.302498 0.25 0.164062\nv -0.241564 0.25 0.164062\nv -0.302299 0.257812 0.164062\nv -0.241663 0.257812 0.164062\nv -0.301598 0.265625 0.164062\nv -0.241971 0.265625 0.164062\nv -0.242188 0.270879 0.164062\nv -0.29993 0.273438 0.164062\nv -0.242299 0.273438 0.164062\nv -0.298011 0.28125 0.164062\nv -0.296875 0.285277 0.164062\nv -0.24335 0.28125 0.164062\nv -0.295767 0.289062 0.164062\nv -0.245945 0.289062 0.164062\nv -0.25 0.296278 0.164062\nv -0.293322 0.296875 0.164062\nv -0.250419 0.296875 0.164062\nv -0.290784 0.304688 0.164062\nv -0.289062 0.309104 0.164062\nv -0.289062 0.304688 0.169166\nv -0.256456 0.304688 0.164062\nv -0.257812 0.30669 0.164062\nv -0.287225 0.3125 0.164062\nv -0.262734 0.3125 0.164062\nv -0.265625 0.316186 0.164062\nv -0.282821 0.320312 0.164062\nv -0.28125 0.322676 0.164062\nv -0.28125 0.320312 0.166665\nv -0.269207 0.320312 0.164062\nv -0.273438 0.32476 0.164062\nv -0.289062 0.615798 0.164062\nv -0.304688 0.619518 0.164062\nv -0.291169 0.617188 0.164062\nv -0.296875 0.618752 0.164062\nv -0.288292 0.617188 0.164062\nv -0.289062 0.617188 0.165738\nv -0.310677 0.625 0.164062\nv -0.3125 0.628536 0.164062\nv -0.282152 0.625 0.164062\nv -0.28125 0.626302 0.164062\nv -0.314404 0.632812 0.164062\nv -0.278192 0.632812 0.164062\nv -0.316762 0.640625 0.164062\nv -0.275928 0.640625 0.164062\nv -0.318323 0.648438 0.164062\nv -0.274308 0.648438 0.164062\nv -0.319538 0.65625 0.164062\nv -0.273893 0.65625 0.164062\nv -0.319911 0.664062 0.164062\nv -0.273861 0.664062 0.164062\nv -0.320251 0.671875 0.164062\nv -0.320312 0.673507 0.164062\nv -0.273798 0.671875 0.164062\nv -0.320546 0.679688 0.164062\nv -0.274123 0.679688 0.164062\nv -0.320814 0.6875 0.164062\nv -0.274353 0.6875 0.164062\nv -0.320927 0.695312 0.164062\nv -0.274686 0.695312 0.164062\nv -0.32098 0.703125 0.164062\nv -0.275201 0.703125 0.164062\nv -0.321011 0.710938 0.164062\nv -0.276137 0.710938 0.164062\nv -0.321145 0.71875 0.164062\nv -0.277402 0.71875 0.164062\nv -0.321708 0.726562 0.164062\nv -0.279381 0.726562 0.164062\nv -0.322512 0.734375 0.164062\nv -0.280981 0.734375 0.164062\nv -0.28125 0.735594 0.164062\nv -0.28125 0.734375 0.168321\nv -0.322989 0.742188 0.164062\nv -0.282705 0.742188 0.164062\nv -0.323702 0.75 0.164062\nv -0.284509 0.75 0.164062\nv -0.324826 0.757812 0.164062\nv -0.285998 0.757812 0.164062\nv -0.325445 0.765625 0.164062\nv -0.287953 0.765625 0.164062\nv -0.289062 0.768599 0.164062\nv -0.325588 0.773438 0.164062\nv -0.291886 0.773438 0.164062\nv -0.296875 0.778959 0.164062\nv -0.323886 0.78125 0.164062\nv -0.320312 0.787587 0.164062\nv -0.299474 0.78125 0.164062\nv -0.304688 0.784587 0.164062\nv -0.31507 0.789062 0.164062\nv -0.311896 0.789062 0.164062\nv -0.3125 0.789576 0.164062\nv -0.3125 0.789062 0.166623\nv 0.0078125 -0.539378 0.171875\nv 0.015625 -0.540987 0.171875\nv 0.0234375 -0.542507 0.171875\nv 0.03125 -0.543703 0.171875\nv 0.0390625 -0.544254 0.171875\nv 0.046875 -0.544105 0.171875\nv 0.0546875 -0.543674 0.171875\nv 0.0625 -0.542828 0.171875\nv 0.0703125 -0.540788 0.171875\nv 0.00647402 -0.539062 0.171875\nv 0 -0.536089 0.171875\nv 0.0746807 -0.539062 0.171875\nv 0.078125 -0.537283 0.171875\nv 0.0859375 -0.533727 0.171875\nv -0.00689895 -0.53125 0.171875\nv -0.0078125 -0.530126 0.171875\nv 0.0908865 -0.53125 0.171875\nv 0.09375 -0.529562 0.171875\nv 0.101562 -0.52407 0.171875\nv -0.0139062 -0.523438 0.171875\nv 0.102491 -0.523438 0.171875\nv 0.109375 -0.517616 0.171875\nv -0.0148133 -0.515625 0.171875\nv 0.111413 -0.515625 0.171875\nv 0.117188 -0.508433 0.171875\nv -0.0124171 -0.507812 0.171875\nv -0.0078125 -0.505208 0.171875\nv 0 -0.500519 0.171875\nv 0.117641 -0.507812 0.171875\nv 0.00124612 -0.5 0.171875\nv 0.0078125 -0.498435 0.171875\nv 0.015625 -0.496559 0.171875\nv 0.0234375 -0.494428 0.171875\nv 0.03125 -0.492264 0.171875\nv 0.109375 -0.492959 0.171875\nv 0.118318 -0.5 0.171875\nv 0.117188 -0.498559 0.171875\nv 0.117188 -0.5 0.178554\nv 0.0315185 -0.492188 0.171875\nv 0.0390625 -0.489997 0.171875\nv 0.046875 -0.487895 0.171875\nv 0.0546875 -0.486495 0.171875\nv 0.0625 -0.484926 0.171875\nv 0.0703125 -0.484631 0.171875\nv 0.078125 -0.48496 0.171875\nv 0.0859375 -0.485607 0.171875\nv 0.09375 -0.486692 0.171875\nv 0.107958 -0.492188 0.171875\nv 0.101562 -0.48922 0.171875\nv 0.453125 -0.0653882 0.171875\nv 0.460938 -0.0671142 0.171875\nv 0.46875 -0.0643153 0.171875\nv 0.476562 -0.064151 0.171875\nv 0.484375 -0.0626206 0.171875\nv -0.289062 -0.0562449 0.171875\nv -0.28125 -0.0587357 0.171875\nv -0.273438 -0.0569073 0.171875\nv 0.449801 -0.0625 0.171875\nv 0.484637 -0.0625 0.171875\nv -0.290736 -0.0546875 0.171875\nv -0.271612 -0.0546875 0.171875\nv 0.447557 -0.0546875 0.171875\nv 0.489818 -0.0546875 0.171875\nv -0.295404 -0.046875 0.171875\nv -0.296875 -0.0428812 0.171875\nv -0.266107 -0.046875 0.171875\nv -0.265625 -0.0460671 0.171875\nv 0.446617 -0.046875 0.171875\nv 0.49216 -0.046875 0.171875\nv 0.492188 -0.0467423 0.171875\nv -0.297679 -0.0390625 0.171875\nv -0.26293 -0.0390625 0.171875\nv 0.446407 -0.0390625 0.171875\nv 0.493491 -0.0390625 0.171875\nv -0.298329 -0.03125 0.171875\nv -0.261583 -0.03125 0.171875\nv 0.446404 -0.03125 0.171875\nv 0.445312 -0.0268432 0.171875\nv 0.49497 -0.03125 0.171875\nv -0.298062 -0.0234375 0.171875\nv -0.260794 -0.0234375 0.171875\nv 0.444571 -0.0234375 0.171875\nv 0.497198 -0.0234375 0.171875\nv -0.299265 -0.015625 0.171875\nv -0.259683 -0.015625 0.171875\nv 0.443616 -0.015625 0.171875\nv 0.498992 -0.015625 0.171875\nv -0.30163 -0.0078125 0.171875\nv -0.26006 -0.0078125 0.171875\nv 0.441798 -0.0078125 0.171875\nv 0.499117 -0.0078125 0.171875\nv -0.303064 0 0.171875\nv -0.260038 0 0.171875\nv 0.440872 0 0.171875\nv 0.49925 0 0.171875\nv -0.302855 0.0078125 0.171875\nv -0.258669 0.0078125 0.171875\nv -0.257812 0.0102499 0.171875\nv 0.441637 0.0078125 0.171875\nv 0.498948 0.0078125 0.171875\nv -0.301672 0.015625 0.171875\nv -0.255418 0.015625 0.171875\nv -0.25 0.0204428 0.171875\nv -0.242188 0.0220855 0.171875\nv -0.234375 0.022274 0.171875\nv 0.429688 0.0231634 0.171875\nv 0.44113 0.015625 0.171875\nv 0.4375 0.0191925 0.171875\nv 0.498888 0.015625 0.171875\nv -0.300711 0.0234375 0.171875\nv -0.230509 0.0234375 0.171875\nv -0.226562 0.024368 0.171875\nv -0.21875 0.0267789 0.171875\nv -0.210938 0.0280191 0.171875\nv -0.203125 0.0283181 0.171875\nv -0.195312 0.0283407 0.171875\nv -0.1875 0.0284874 0.171875\nv -0.179688 0.0282526 0.171875\nv -0.171875 0.027499 0.171875\nv -0.164062 0.0271293 0.171875\nv -0.15625 0.0272067 0.171875\nv -0.148438 0.0272769 0.171875\nv -0.140625 0.0272137 0.171875\nv -0.132812 0.027218 0.171875\nv -0.125 0.0272729 0.171875\nv -0.117188 0.0272691 0.171875\nv -0.109375 0.027163 0.171875\nv -0.101562 0.0271002 0.171875\nv -0.09375 0.027079 0.171875\nv -0.0859375 0.027077 0.171875\nv -0.078125 0.0269535 0.171875\nv -0.0703125 0.026671 0.171875\nv -0.0625 0.0263998 0.171875\nv -0.0546875 0.0262426 0.171875\nv -0.046875 0.0261365 0.171875\nv -0.0390625 0.0260975 0.171875\nv -0.03125 0.0261228 0.171875\nv -0.0234375 0.0260803 0.171875\nv -0.015625 0.0260204 0.171875\nv -0.0078125 0.0259523 0.171875\nv 0 0.0258787 0.171875\nv 0.0078125 0.0256425 0.171875\nv 0.015625 0.0255229 0.171875\nv 0.0234375 0.0253937 0.171875\nv 0.03125 0.0253178 0.171875\nv 0.0390625 0.0252215 0.171875\nv 0.046875 0.0251201 0.171875\nv 0.0546875 0.0250204 0.171875\nv 0.0625 0.0249205 0.171875\nv 0.0703125 0.0248306 0.171875\nv 0.078125 0.0247547 0.171875\nv 0.0859375 0.0246969 0.171875\nv 0.09375 0.0246483 0.171875\nv 0.101562 0.024652 0.171875\nv 0.109375 0.0245716 0.171875\nv 0.117188 0.024495 0.171875\nv 0.125 0.0243755 0.171875\nv 0.132812 0.0242245 0.171875\nv 0.140625 0.0240834 0.171875\nv 0.148438 0.0239517 0.171875\nv 0.15625 0.0238358 0.171875\nv 0.164062 0.0237796 0.171875\nv 0.171875 0.0237559 0.171875\nv 0.179688 0.0237828 0.171875\nv 0.1875 0.0238863 0.171875\nv 0.195312 0.0239755 0.171875\nv 0.203125 0.0240697 0.171875\nv 0.210938 0.0242483 0.171875\nv 0.21875 0.0243936 0.171875\nv 0.226562 0.0244665 0.171875\nv 0.234375 0.0245085 0.171875\nv 0.242188 0.0245515 0.171875\nv 0.25 0.0246355 0.171875\nv 0.257812 0.024731 0.171875\nv 0.265625 0.0248269 0.171875\nv 0.273438 0.0249924 0.171875\nv 0.28125 0.0251804 0.171875\nv 0.289062 0.0253695 0.171875\nv 0.296875 0.0255243 0.171875\nv 0.304688 0.0257341 0.171875\nv 0.3125 0.0260271 0.171875\nv 0.320312 0.0262816 0.171875\nv 0.328125 0.0263452 0.171875\nv 0.335938 0.0264083 0.171875\nv 0.34375 0.0264801 0.171875\nv 0.351562 0.0265544 0.171875\nv 0.359375 0.026479 0.171875\nv 0.367188 0.0264892 0.171875\nv 0.375 0.0267686 0.171875\nv 0.382812 0.0269999 0.171875\nv 0.390625 0.0268964 0.171875\nv 0.398438 0.0266905 0.171875\nv 0.40625 0.0263236 0.171875\nv 0.414062 0.0254589 0.171875\nv 0.428222 0.0234375 0.171875\nv 0.421875 0.0243533 0.171875\nv 0.498832 0.0234375 0.171875\nv -0.299803 0.03125 0.171875\nv 0.495837 0.03125 0.171875\nv -0.299146 0.0390625 0.171875\nv -0.296875 0.0461138 0.171875\nv 0.493015 0.0390625 0.171875\nv 0.492188 0.0414195 0.171875\nv -0.296567 0.046875 0.171875\nv 0.490202 0.046875 0.171875\nv -0.29358 0.0546875 0.171875\nv 0.476562 0.0604617 0.171875\nv 0.486401 0.0546875 0.171875\nv 0.484375 0.0562407 0.171875\nv -0.291139 0.0625 0.171875\nv -0.289062 0.0684388 0.171875\nv 0.445312 0.0687288 0.171875\nv 0.453125 0.0666071 0.171875\nv 0.460938 0.0654117 0.171875\nv 0.472055 0.0625 0.171875\nv 0.46875 0.0640425 0.171875\nv -0.286793 0.0703125 0.171875\nv -0.28125 0.0729867 0.171875\nv -0.273438 0.0767489 0.171875\nv -0.265625 0.0778269 0.171875\nv -0.226562 0.077143 0.171875\nv -0.21875 0.0759339 0.171875\nv -0.210938 0.0750215 0.171875\nv -0.203125 0.075174 0.171875\nv -0.195312 0.0755741 0.171875\nv -0.1875 0.0760025 0.171875\nv -0.179688 0.0762377 0.171875\nv -0.171875 0.0761059 0.171875\nv -0.164062 0.0760208 0.171875\nv -0.15625 0.0759385 0.171875\nv -0.148438 0.0758995 0.171875\nv -0.140625 0.0758448 0.171875\nv -0.132812 0.0756984 0.171875\nv -0.125 0.0754913 0.171875\nv -0.117188 0.0753084 0.171875\nv -0.109375 0.0750619 0.171875\nv -0.101562 0.0748862 0.171875\nv -0.09375 0.0747383 0.171875\nv -0.0859375 0.0746549 0.171875\nv -0.078125 0.0746377 0.171875\nv -0.0703125 0.0746087 0.171875\nv -0.0625 0.0745022 0.171875\nv -0.0546875 0.0743867 0.171875\nv -0.046875 0.0743439 0.171875\nv -0.0390625 0.0742991 0.171875\nv -0.03125 0.0742122 0.171875\nv -0.0234375 0.0741752 0.171875\nv -0.015625 0.0739831 0.171875\nv -0.0078125 0.0738188 0.171875\nv 0 0.0736058 0.171875\nv 0.0078125 0.0733888 0.171875\nv 0.015625 0.0732819 0.171875\nv 0.0234375 0.0732352 0.171875\nv 0.03125 0.073225 0.171875\nv 0.0390625 0.0731895 0.171875\nv 0.046875 0.0731255 0.171875\nv 0.0546875 0.0730569 0.171875\nv 0.0625 0.0729925 0.171875\nv 0.0703125 0.0728911 0.171875\nv 0.078125 0.0727775 0.171875\nv 0.0859375 0.0727126 0.171875\nv 0.09375 0.0726662 0.171875\nv 0.101562 0.0726716 0.171875\nv 0.109375 0.0726833 0.171875\nv 0.117188 0.0726315 0.171875\nv 0.125 0.0725536 0.171875\nv 0.132812 0.0725083 0.171875\nv 0.140625 0.0723974 0.171875\nv 0.148438 0.0722615 0.171875\nv 0.15625 0.0721299 0.171875\nv 0.164062 0.0719776 0.171875\nv 0.171875 0.0718214 0.171875\nv 0.179688 0.0717894 0.171875\nv 0.1875 0.0718029 0.171875\nv 0.195312 0.0718928 0.171875\nv 0.203125 0.0720309 0.171875\nv 0.210938 0.0721301 0.171875\nv 0.21875 0.0722678 0.171875\nv 0.226562 0.0724021 0.171875\nv 0.234375 0.0724704 0.171875\nv 0.242188 0.0725106 0.171875\nv 0.25 0.0725433 0.171875\nv 0.257812 0.0725089 0.171875\nv 0.265625 0.0724334 0.171875\nv 0.273438 0.0723963 0.171875\nv 0.28125 0.0724634 0.171875\nv 0.289062 0.0726374 0.171875\nv 0.296875 0.0727989 0.171875\nv 0.304688 0.0729393 0.171875\nv 0.3125 0.0731433 0.171875\nv 0.320312 0.0733399 0.171875\nv 0.328125 0.0734043 0.171875\nv 0.335938 0.0733146 0.171875\nv 0.34375 0.0734062 0.171875\nv 0.351562 0.0733953 0.171875\nv 0.359375 0.0733186 0.171875\nv 0.367188 0.073104 0.171875\nv 0.375 0.0729334 0.171875\nv 0.382812 0.0726519 0.171875\nv 0.390625 0.0722355 0.171875\nv 0.398438 0.0721113 0.171875\nv 0.40625 0.071941 0.171875\nv 0.414062 0.0717557 0.171875\nv 0.421875 0.0715541 0.171875\nv 0.429688 0.0711697 0.171875\nv 0.438136 0.0703125 0.171875\nv 0.4375 0.0704478 0.171875\nv 0.4375 0.0703125 0.178064\nv -0.265226 0.078125 0.171875\nv -0.257812 0.0858155 0.171875\nv -0.242188 0.0824206 0.171875\nv -0.230523 0.078125 0.171875\nv -0.234375 0.079356 0.171875\nv -0.257294 0.0859375 0.171875\nv -0.247607 0.0859375 0.171875\nv -0.25 0.0869762 0.171875\nv -0.28125 0.177729 0.171875\nv -0.273438 0.174229 0.171875\nv -0.265625 0.173027 0.171875\nv -0.257812 0.174917 0.171875\nv -0.284089 0.179688 0.171875\nv -0.289062 0.18666 0.171875\nv -0.254811 0.179688 0.171875\nv -0.289643 0.1875 0.171875\nv -0.250193 0.1875 0.171875\nv -0.25 0.187773 0.171875\nv -0.294279 0.195312 0.171875\nv -0.296875 0.200911 0.171875\nv -0.246673 0.195312 0.171875\nv -0.297662 0.203125 0.171875\nv -0.243917 0.203125 0.171875\nv -0.299756 0.210938 0.171875\nv -0.242733 0.210938 0.171875\nv -0.300791 0.21875 0.171875\nv -0.242541 0.21875 0.171875\nv -0.301403 0.226562 0.171875\nv -0.242428 0.226562 0.171875\nv -0.242188 0.230604 0.171875\nv -0.301942 0.234375 0.171875\nv -0.241961 0.234375 0.171875\nv -0.242188 0.234375 0.179335\nv -0.302335 0.242188 0.171875\nv -0.24167 0.242188 0.171875\nv -0.302382 0.25 0.171875\nv -0.241496 0.25 0.171875\nv -0.30222 0.257812 0.171875\nv -0.241739 0.257812 0.171875\nv -0.30124 0.265625 0.171875\nv -0.242078 0.265625 0.171875\nv -0.242188 0.268133 0.171875\nv -0.242188 0.265625 0.176342\nv -0.299379 0.273438 0.171875\nv -0.242428 0.273438 0.171875\nv -0.297091 0.28125 0.171875\nv -0.296875 0.281856 0.171875\nv -0.296875 0.28125 0.173812\nv -0.243562 0.28125 0.171875\nv -0.294376 0.289062 0.171875\nv -0.246107 0.289062 0.171875\nv -0.25 0.296558 0.171875\nv -0.291162 0.296875 0.171875\nv -0.289062 0.302457 0.171875\nv -0.25021 0.296875 0.171875\nv -0.287891 0.304688 0.171875\nv -0.256316 0.304688 0.171875\nv -0.257812 0.307059 0.171875\nv -0.28362 0.3125 0.171875\nv -0.28125 0.316119 0.171875\nv -0.262275 0.3125 0.171875\nv -0.265625 0.316275 0.171875\nv -0.274981 0.320312 0.171875\nv -0.27186 0.320312 0.171875\nv -0.273438 0.321432 0.171875\nv -0.273438 0.320312 0.175073\nv -0.304688 0.622148 0.171875\nv -0.296875 0.622076 0.171875\nv -0.289062 0.620108 0.171875\nv -0.309252 0.625 0.171875\nv -0.3125 0.629869 0.171875\nv -0.304688 0.625 0.178042\nv -0.296875 0.625 0.17799\nv -0.285058 0.625 0.171875\nv -0.28125 0.630473 0.171875\nv -0.313861 0.632812 0.171875\nv -0.280124 0.632812 0.171875\nv -0.28125 0.632812 0.178365\nv -0.316448 0.640625 0.171875\nv -0.277196 0.640625 0.171875\nv -0.318099 0.648438 0.171875\nv -0.274766 0.648438 0.171875\nv -0.319308 0.65625 0.171875\nv -0.274259 0.65625 0.171875\nv -0.319698 0.664062 0.171875\nv -0.274045 0.664062 0.171875\nv -0.320077 0.671875 0.171875\nv -0.320312 0.677495 0.171875\nv -0.27389 0.671875 0.171875\nv -0.320405 0.679688 0.171875\nv -0.320312 0.679688 0.176545\nv -0.274185 0.679688 0.171875\nv -0.320702 0.6875 0.171875\nv -0.27431 0.6875 0.171875\nv -0.320797 0.695312 0.171875\nv -0.274635 0.695312 0.171875\nv -0.320878 0.703125 0.171875\nv -0.275111 0.703125 0.171875\nv -0.320857 0.710938 0.171875\nv -0.276158 0.710938 0.171875\nv -0.320927 0.71875 0.171875\nv -0.277575 0.71875 0.171875\nv -0.321409 0.726562 0.171875\nv -0.279745 0.726562 0.171875\nv -0.28125 0.733357 0.171875\nv -0.322024 0.734375 0.171875\nv -0.281468 0.734375 0.171875\nv -0.322485 0.742188 0.171875\nv -0.283246 0.742188 0.171875\nv -0.323518 0.75 0.171875\nv -0.284969 0.75 0.171875\nv -0.324324 0.757812 0.171875\nv -0.28659 0.757812 0.171875\nv -0.325004 0.765625 0.171875\nv -0.288775 0.765625 0.171875\nv -0.289062 0.766387 0.171875\nv -0.289062 0.765625 0.174868\nv -0.324863 0.773438 0.171875\nv -0.293173 0.773438 0.171875\nv -0.296875 0.777617 0.171875\nv -0.322582 0.78125 0.171875\nv -0.320312 0.785233 0.171875\nv -0.3125 0.788145 0.171875\nv -0.300955 0.78125 0.171875\nv -0.304688 0.783537 0.171875\nv 0.0078125 -0.539662 0.179688\nv 0.015625 -0.541231 0.179688\nv 0.0234375 -0.54267 0.179688\nv 0.03125 -0.543729 0.179688\nv 0.0390625 -0.544297 0.179688\nv 0.046875 -0.544223 0.179688\nv 0.0546875 -0.543862 0.179688\nv 0.0625 -0.542593 0.179688\nv 0.0703125 -0.540583 0.179688\nv 0.00522936 -0.539062 0.179688\nv 0 -0.536534 0.179688\nv 0.0743784 -0.539062 0.179688\nv 0.078125 -0.537133 0.179688\nv 0.0859375 -0.533498 0.179688\nv -0.00693023 -0.53125 0.179688\nv -0.0078125 -0.530084 0.179688\nv 0.0901277 -0.53125 0.179688\nv 0.09375 -0.529202 0.179688\nv 0.101562 -0.523813 0.179688\nv -0.0133807 -0.523438 0.179688\nv 0.102107 -0.523438 0.179688\nv 0.109375 -0.517305 0.179688\nv -0.0145534 -0.515625 0.179688\nv -0.015625 -0.515625 0.185706\nv 0.111136 -0.515625 0.179688\nv 0.117188 -0.508367 0.179688\nv -0.0130254 -0.507812 0.179688\nv -0.0078125 -0.505044 0.179688\nv 0 -0.500569 0.179688\nv 0.117594 -0.507812 0.179688\nv 0.117188 -0.502701 0.179688\nv 0.00142212 -0.5 0.179688\nv 0.0078125 -0.498474 0.179688\nv 0.015625 -0.496661 0.179688\nv 0.0234375 -0.494558 0.179688\nv 0.03125 -0.492414 0.179688\nv 0.116819 -0.5 0.179688\nv 0.109375 -0.494998 0.179688\nv 0.0320565 -0.492188 0.179688\nv 0.0390625 -0.490218 0.179688\nv 0.046875 -0.488053 0.179688\nv 0.0546875 -0.48645 0.179688\nv 0.0625 -0.485756 0.179688\nv 0.0703125 -0.485749 0.179688\nv 0.078125 -0.486036 0.179688\nv 0.0859375 -0.486769 0.179688\nv 0.09375 -0.488098 0.179688\nv 0.10443 -0.492188 0.179688\nv 0.101562 -0.490802 0.179688\nv 0.453125 -0.0654317 0.179688\nv 0.460938 -0.0670602 0.179688\nv 0.46875 -0.0641198 0.179688\nv 0.476562 -0.064039 0.179688\nv 0.484375 -0.0625047 0.179688\nv -0.289062 -0.0556749 0.179688\nv -0.28125 -0.0579927 0.179688\nv -0.273438 -0.0562025 0.179688\nv 0.449742 -0.0625 0.179688\nv 0.484385 -0.0625 0.179688\nv 0.484375 -0.0625 0.179962\nv -0.290192 -0.0546875 0.179688\nv -0.272153 -0.0546875 0.179688\nv 0.447764 -0.0546875 0.179688\nv 0.489585 -0.0546875 0.179688\nv -0.295402 -0.046875 0.179688\nv -0.296875 -0.0430576 0.179688\nv -0.266268 -0.046875 0.179688\nv -0.265625 -0.0458327 0.179688\nv 0.446675 -0.046875 0.179688\nv 0.492005 -0.046875 0.179688\nv 0.492188 -0.0459697 0.179688\nv -0.297734 -0.0390625 0.179688\nv -0.263007 -0.0390625 0.179688\nv 0.446375 -0.0390625 0.179688\nv 0.49329 -0.0390625 0.179688\nv -0.298471 -0.03125 0.179688\nv -0.261664 -0.03125 0.179688\nv 0.446498 -0.03125 0.179688\nv 0.445312 -0.0262925 0.179688\nv 0.494759 -0.03125 0.179688\nv -0.298227 -0.0234375 0.179688\nv -0.260762 -0.0234375 0.179688\nv 0.444689 -0.0234375 0.179688\nv 0.496915 -0.0234375 0.179688\nv -0.299422 -0.015625 0.179688\nv -0.259622 -0.015625 0.179688\nv 0.443775 -0.015625 0.179688\nv 0.498747 -0.015625 0.179688\nv -0.301856 -0.0078125 0.179688\nv -0.259968 -0.0078125 0.179688\nv 0.4419 -0.0078125 0.179688\nv 0.499061 -0.0078125 0.179688\nv -0.303057 0 0.179688\nv -0.260037 0 0.179688\nv 0.440799 0 0.179688\nv 0.499222 0 0.179688\nv -0.302801 0.0078125 0.179688\nv -0.258719 0.0078125 0.179688\nv -0.257812 0.0104342 0.179688\nv 0.441457 0.0078125 0.179688\nv 0.498801 0.0078125 0.179688\nv -0.301606 0.015625 0.179688\nv -0.255423 0.015625 0.179688\nv -0.25 0.0206055 0.179688\nv -0.242188 0.0221823 0.179688\nv -0.234375 0.0224209 0.179688\nv 0.429688 0.0233418 0.179688\nv 0.441071 0.015625 0.179688\nv 0.4375 0.0192749 0.179688\nv 0.498909 0.015625 0.179688\nv -0.300678 0.0234375 0.179688\nv -0.231088 0.0234375 0.179688\nv -0.226562 0.0245277 0.179688\nv -0.21875 0.0269734 0.179688\nv -0.210938 0.0282723 0.179688\nv -0.203125 0.0286432 0.179688\nv -0.195312 0.0286513 0.179688\nv -0.1875 0.0287724 0.179688\nv -0.179688 0.0284292 0.179688\nv -0.171875 0.0276692 0.179688\nv -0.164062 0.0271744 0.179688\nv -0.15625 0.0271722 0.179688\nv -0.148438 0.0272943 0.179688\nv -0.140625 0.0272211 0.179688\nv -0.132812 0.0272148 0.179688\nv -0.125 0.0272964 0.179688\nv -0.117188 0.0273515 0.179688\nv -0.109375 0.0272317 0.179688\nv -0.101562 0.0270532 0.179688\nv -0.09375 0.0270388 0.179688\nv -0.0859375 0.0269995 0.179688\nv -0.078125 0.0268977 0.179688\nv -0.0703125 0.0266493 0.179688\nv -0.0625 0.0264642 0.179688\nv -0.0546875 0.0263054 0.179688\nv -0.046875 0.0261876 0.179688\nv -0.0390625 0.0261145 0.179688\nv -0.03125 0.0260457 0.179688\nv -0.0234375 0.0259252 0.179688\nv -0.015625 0.0258289 0.179688\nv -0.0078125 0.0257617 0.179688\nv 0 0.0256457 0.179688\nv 0.0078125 0.0254532 0.179688\nv 0.015625 0.0253241 0.179688\nv 0.0234375 0.0252153 0.179688\nv 0.03125 0.0251399 0.179688\nv 0.0390625 0.0250432 0.179688\nv 0.046875 0.0249446 0.179688\nv 0.0546875 0.0248579 0.179688\nv 0.0625 0.0247926 0.179688\nv 0.0703125 0.0247445 0.179688\nv 0.078125 0.0246867 0.179688\nv 0.0859375 0.0246309 0.179688\nv 0.09375 0.0245933 0.179688\nv 0.101562 0.024569 0.179688\nv 0.109375 0.0245283 0.179688\nv 0.117188 0.0244268 0.179688\nv 0.125 0.0243278 0.179688\nv 0.132812 0.0241757 0.179688\nv 0.140625 0.0240503 0.179688\nv 0.148438 0.0239792 0.179688\nv 0.15625 0.0239361 0.179688\nv 0.164062 0.0239191 0.179688\nv 0.171875 0.0239369 0.179688\nv 0.179688 0.0239451 0.179688\nv 0.1875 0.0240311 0.179688\nv 0.195312 0.0241228 0.179688\nv 0.203125 0.0241931 0.179688\nv 0.210938 0.0243035 0.179688\nv 0.21875 0.0244445 0.179688\nv 0.226562 0.0245999 0.179688\nv 0.234375 0.02464 0.179688\nv 0.242188 0.0247142 0.179688\nv 0.25 0.0247828 0.179688\nv 0.257812 0.024872 0.179688\nv 0.265625 0.02497 0.179688\nv 0.273438 0.0250551 0.179688\nv 0.28125 0.0251738 0.179688\nv 0.289062 0.0253276 0.179688\nv 0.296875 0.0255127 0.179688\nv 0.304688 0.0257532 0.179688\nv 0.3125 0.0260957 0.179688\nv 0.320312 0.0263016 0.179688\nv 0.328125 0.026353 0.179688\nv 0.335938 0.026391 0.179688\nv 0.34375 0.026452 0.179688\nv 0.351562 0.0265087 0.179688\nv 0.359375 0.0264881 0.179688\nv 0.367188 0.0264171 0.179688\nv 0.375 0.026761 0.179688\nv 0.382812 0.0270722 0.179688\nv 0.390625 0.027073 0.179688\nv 0.398438 0.0269491 0.179688\nv 0.40625 0.0264966 0.179688\nv 0.414062 0.0255269 0.179688\nv 0.429159 0.0234375 0.179688\nv 0.421875 0.0244505 0.179688\nv 0.429688 0.0234375 0.183255\nv 0.498887 0.0234375 0.179688\nv -0.299892 0.03125 0.179688\nv 0.495847 0.03125 0.179688\nv -0.299179 0.0390625 0.179688\nv -0.296875 0.0459177 0.179688\nv 0.492856 0.0390625 0.179688\nv 0.492188 0.0408769 0.179688\nv -0.296469 0.046875 0.179688\nv 0.489917 0.046875 0.179688\nv -0.293591 0.0546875 0.179688\nv 0.476562 0.060307 0.179688\nv 0.485917 0.0546875 0.179688\nv 0.484375 0.0558811 0.179688\nv -0.291174 0.0625 0.179688\nv -0.289062 0.0680717 0.179688\nv 0.4375 0.0702753 0.179688\nv 0.445312 0.0685797 0.179688\nv 0.453125 0.0665152 0.179688\nv 0.460938 0.0653388 0.179688\nv 0.471902 0.0625 0.179688\nv 0.46875 0.0640293 0.179688\nv -0.285937 0.0703125 0.179688\nv -0.28125 0.0722828 0.179688\nv -0.273438 0.0762834 0.179688\nv -0.265625 0.0769714 0.179688\nv -0.226562 0.0771977 0.179688\nv -0.21875 0.0761664 0.179688\nv -0.210938 0.0752662 0.179688\nv -0.203125 0.0753641 0.179688\nv -0.195312 0.0757175 0.179688\nv -0.1875 0.0760745 0.179688\nv -0.179688 0.0762702 0.179688\nv -0.171875 0.0760734 0.179688\nv -0.164062 0.0759837 0.179688\nv -0.15625 0.0758907 0.179688\nv -0.148438 0.0758903 0.179688\nv -0.140625 0.0758095 0.179688\nv -0.132812 0.0756297 0.179688\nv -0.125 0.0755412 0.179688\nv -0.117188 0.0753796 0.179688\nv -0.109375 0.0751067 0.179688\nv -0.101562 0.0749324 0.179688\nv -0.09375 0.0747323 0.179688\nv -0.0859375 0.0746649 0.179688\nv -0.078125 0.0746603 0.179688\nv -0.0703125 0.0746583 0.179688\nv -0.0625 0.0745327 0.179688\nv -0.0546875 0.0744275 0.179688\nv -0.046875 0.0743539 0.179688\nv -0.0390625 0.0743278 0.179688\nv -0.03125 0.0742857 0.179688\nv -0.0234375 0.0742623 0.179688\nv -0.015625 0.074157 0.179688\nv -0.0078125 0.0739646 0.179688\nv 0 0.0737602 0.179688\nv 0.0078125 0.0735673 0.179688\nv 0.015625 0.073447 0.179688\nv 0.0234375 0.0733735 0.179688\nv 0.03125 0.0733273 0.179688\nv 0.0390625 0.0732578 0.179688\nv 0.046875 0.0731843 0.179688\nv 0.0546875 0.0731075 0.179688\nv 0.0625 0.0730142 0.179688\nv 0.0703125 0.0729014 0.179688\nv 0.078125 0.0727697 0.179688\nv 0.0859375 0.0726836 0.179688\nv 0.09375 0.0726573 0.179688\nv 0.101562 0.0726576 0.179688\nv 0.109375 0.0726432 0.179688\nv 0.117188 0.0725999 0.179688\nv 0.125 0.0725135 0.179688\nv 0.132812 0.072393 0.179688\nv 0.140625 0.0723707 0.179688\nv 0.148438 0.0722571 0.179688\nv 0.15625 0.0721251 0.179688\nv 0.164062 0.0719685 0.179688\nv 0.171875 0.0718062 0.179688\nv 0.179688 0.0717067 0.179688\nv 0.1875 0.0717506 0.179688\nv 0.195312 0.0718169 0.179688\nv 0.203125 0.0719254 0.179688\nv 0.210938 0.0720988 0.179688\nv 0.21875 0.0722263 0.179688\nv 0.226562 0.0723949 0.179688\nv 0.234375 0.0725042 0.179688\nv 0.242188 0.0725278 0.179688\nv 0.25 0.0725595 0.179688\nv 0.257812 0.0725453 0.179688\nv 0.265625 0.0724878 0.179688\nv 0.273438 0.072469 0.179688\nv 0.28125 0.072535 0.179688\nv 0.289062 0.0725814 0.179688\nv 0.296875 0.0727234 0.179688\nv 0.304688 0.0728265 0.179688\nv 0.3125 0.072974 0.179688\nv 0.320312 0.0731667 0.179688\nv 0.328125 0.0733302 0.179688\nv 0.335938 0.0733025 0.179688\nv 0.34375 0.0732499 0.179688\nv 0.351562 0.0733361 0.179688\nv 0.359375 0.0732474 0.179688\nv 0.367188 0.0730568 0.179688\nv 0.375 0.0728984 0.179688\nv 0.382812 0.0726296 0.179688\nv 0.390625 0.0721964 0.179688\nv 0.398438 0.0720662 0.179688\nv 0.40625 0.0719126 0.179688\nv 0.414062 0.0717201 0.179688\nv 0.421875 0.0714341 0.179688\nv 0.437126 0.0703125 0.179688\nv 0.429688 0.0710059 0.179688\nv -0.264066 0.078125 0.179688\nv -0.257812 0.0846805 0.179688\nv -0.242188 0.0819409 0.179688\nv -0.230641 0.078125 0.179688\nv -0.234375 0.0792419 0.179688\nv -0.253286 0.0859375 0.179688\nv -0.248684 0.0859375 0.179688\nv -0.25 0.0864699 0.179688\nv -0.25 0.0859375 0.184913\nv -0.28125 0.17815 0.179688\nv -0.273438 0.174639 0.179688\nv -0.265625 0.173215 0.179688\nv -0.257812 0.174448 0.179688\nv -0.283555 0.179688 0.179688\nv -0.289062 0.186964 0.179688\nv -0.254692 0.179688 0.179688\nv -0.289437 0.1875 0.179688\nv -0.25076 0.1875 0.179688\nv -0.25 0.188484 0.179688\nv -0.293973 0.195312 0.179688\nv -0.296875 0.202105 0.179688\nv -0.246698 0.195312 0.179688\nv -0.297213 0.203125 0.179688\nv -0.243784 0.203125 0.179688\nv -0.2994 0.210938 0.179688\nv -0.242919 0.210938 0.179688\nv -0.300615 0.21875 0.179688\nv -0.242952 0.21875 0.179688\nv -0.301282 0.226562 0.179688\nv -0.242782 0.226562 0.179688\nv -0.301921 0.234375 0.179688\nv -0.242198 0.234375 0.179688\nv -0.242188 0.234612 0.179688\nv -0.302302 0.242188 0.179688\nv -0.241836 0.242188 0.179688\nv -0.302361 0.25 0.179688\nv -0.241563 0.25 0.179688\nv -0.30221 0.257812 0.179688\nv -0.241906 0.257812 0.179688\nv -0.242188 0.263876 0.179688\nv -0.300801 0.265625 0.179688\nv -0.242268 0.265625 0.179688\nv -0.298721 0.273438 0.179688\nv -0.296875 0.279307 0.179688\nv -0.242707 0.273438 0.179688\nv -0.296234 0.28125 0.179688\nv -0.243957 0.28125 0.179688\nv -0.29315 0.289062 0.179688\nv -0.246459 0.289062 0.179688\nv -0.25 0.295861 0.179688\nv -0.289711 0.296875 0.179688\nv -0.289062 0.298682 0.179688\nv -0.250671 0.296875 0.179688\nv -0.286379 0.304688 0.179688\nv -0.257037 0.304688 0.179688\nv -0.257812 0.30595 0.179688\nv -0.257812 0.304688 0.184689\nv -0.282215 0.3125 0.179688\nv -0.28125 0.314242 0.179688\nv -0.273438 0.319009 0.179688\nv -0.26286 0.3125 0.179688\nv -0.265625 0.315359 0.179688\nv -0.289062 0.623917 0.179688\nv -0.3125 0.632348 0.179688\nv -0.304688 0.625906 0.179688\nv -0.29363 0.625 0.179688\nv -0.296875 0.6257 0.179688\nv -0.288017 0.625 0.179688\nv -0.289062 0.625 0.183742\nv -0.3128 0.632812 0.179688\nv -0.3125 0.632812 0.181151\nv -0.281585 0.632812 0.179688\nv -0.28125 0.633267 0.179688\nv -0.315925 0.640625 0.179688\nv -0.27799 0.640625 0.179688\nv -0.317749 0.648438 0.179688\nv -0.275192 0.648438 0.179688\nv -0.318977 0.65625 0.179688\nv -0.274547 0.65625 0.179688\nv -0.319443 0.664062 0.179688\nv -0.274287 0.664062 0.179688\nv -0.319873 0.671875 0.179688\nv -0.274099 0.671875 0.179688\nv -0.32025 0.679688 0.179688\nv -0.320312 0.681373 0.179688\nv -0.274255 0.679688 0.179688\nv -0.320537 0.6875 0.179688\nv -0.274312 0.6875 0.179688\nv -0.320641 0.695312 0.179688\nv -0.274628 0.695312 0.179688\nv -0.3207 0.703125 0.179688\nv -0.275123 0.703125 0.179688\nv -0.320642 0.710938 0.179688\nv -0.320312 0.710938 0.187452\nv -0.27615 0.710938 0.179688\nv -0.32065 0.71875 0.179688\nv -0.320312 0.71875 0.186136\nv -0.277664 0.71875 0.179688\nv -0.321024 0.726562 0.179688\nv -0.280007 0.726562 0.179688\nv -0.28125 0.731727 0.179688\nv -0.321557 0.734375 0.179688\nv -0.281849 0.734375 0.179688\nv -0.32208 0.742188 0.179688\nv -0.283617 0.742188 0.179688\nv -0.323127 0.75 0.179688\nv -0.285418 0.75 0.179688\nv -0.323867 0.757812 0.179688\nv -0.28728 0.757812 0.179688\nv -0.289062 0.764024 0.179688\nv -0.324422 0.765625 0.179688\nv -0.289676 0.765625 0.179688\nv -0.323674 0.773438 0.179688\nv -0.294229 0.773438 0.179688\nv -0.296875 0.776286 0.179688\nv -0.321082 0.78125 0.179688\nv -0.320312 0.782744 0.179688\nv -0.320312 0.78125 0.183723\nv -0.3125 0.786674 0.179688\nv -0.30282 0.78125 0.179688\nv -0.304688 0.782371 0.179688\nv -0.304688 0.78125 0.18629\nv 0.0078125 -0.539875 0.1875\nv 0.015625 -0.541457 0.1875\nv 0.0234375 -0.542804 0.1875\nv 0.03125 -0.543793 0.1875\nv 0.0390625 -0.544315 0.1875\nv 0.046875 -0.544418 0.1875\nv 0.0546875 -0.543797 0.1875\nv 0.0625 -0.542266 0.1875\nv 0.0703125 -0.540287 0.1875\nv 0.00451465 -0.539062 0.1875\nv 0 -0.536704 0.1875\nv 0.0740129 -0.539062 0.1875\nv 0.078125 -0.537001 0.1875\nv 0.0859375 -0.533597 0.1875\nv -0.00701436 -0.53125 0.1875\nv -0.0078125 -0.530194 0.1875\nv 0.0899498 -0.53125 0.1875\nv 0.09375 -0.528844 0.1875\nv 0.101562 -0.523817 0.1875\nv -0.0133005 -0.523438 0.1875\nv -0.015625 -0.516523 0.1875\nv 0.102137 -0.523438 0.1875\nv 0.109375 -0.517259 0.1875\nv -0.0159814 -0.515625 0.1875\nv -0.015625 -0.514238 0.1875\nv 0.111068 -0.515625 0.1875\nv 0.117188 -0.507891 0.1875\nv -0.0140773 -0.507812 0.1875\nv -0.0078125 -0.504494 0.1875\nv 0 -0.500225 0.1875\nv 0.117241 -0.507812 0.1875\nv 0.117188 -0.507491 0.1875\nv 0.117188 -0.507812 0.187763\nv 0.000557807 -0.5 0.1875\nv 0 -0.5 0.189609\nv 0.0078125 -0.498193 0.1875\nv 0.015625 -0.496413 0.1875\nv 0.0234375 -0.494426 0.1875\nv 0.03125 -0.492392 0.1875\nv 0.114782 -0.5 0.1875\nv 0.109375 -0.496582 0.1875\nv 0.0320052 -0.492188 0.1875\nv 0.03125 -0.492188 0.19268\nv 0.0390625 -0.490264 0.1875\nv 0.046875 -0.488041 0.1875\nv 0.0546875 -0.486583 0.1875\nv 0.0625 -0.486532 0.1875\nv 0.0703125 -0.486553 0.1875\nv 0.078125 -0.486868 0.1875\nv 0.0859375 -0.487735 0.1875\nv 0.09375 -0.489239 0.1875\nv 0.101719 -0.492188 0.1875\nv 0.101562 -0.492107 0.1875\nv 0.101562 -0.492188 0.188201\nv 0.453125 -0.0654581 0.1875\nv 0.460938 -0.0670305 0.1875\nv 0.46875 -0.0639898 0.1875\nv 0.476562 -0.0639388 0.1875\nv -0.289062 -0.0551971 0.1875\nv -0.28125 -0.0573732 0.1875\nv -0.273438 -0.0556451 0.1875\nv 0.449751 -0.0625 0.1875\nv 0.483751 -0.0625 0.1875\nv 0.484375 -0.0622125 0.1875\nv -0.289678 -0.0546875 0.1875\nv -0.272607 -0.0546875 0.1875\nv 0.447958 -0.0546875 0.1875\nv 0.489329 -0.0546875 0.1875\nv -0.295446 -0.046875 0.1875\nv -0.296875 -0.0434028 0.1875\nv -0.266356 -0.046875 0.1875\nv -0.265625 -0.0457116 0.1875\nv 0.446758 -0.046875 0.1875\nv 0.491814 -0.046875 0.1875\nv 0.492188 -0.0448911 0.1875\nv -0.297844 -0.0390625 0.1875\nv -0.263054 -0.0390625 0.1875\nv 0.446288 -0.0390625 0.1875\nv 0.493067 -0.0390625 0.1875\nv -0.298724 -0.03125 0.1875\nv -0.261708 -0.03125 0.1875\nv 0.446393 -0.03125 0.1875\nv 0.445312 -0.0261899 0.1875\nv 0.494494 -0.03125 0.1875\nv -0.298443 -0.0234375 0.1875\nv -0.260639 -0.0234375 0.1875\nv 0.444762 -0.0234375 0.1875\nv 0.496703 -0.0234375 0.1875\nv -0.299594 -0.015625 0.1875\nv -0.259472 -0.015625 0.1875\nv 0.44383 -0.015625 0.1875\nv 0.498554 -0.015625 0.1875\nv -0.301992 -0.0078125 0.1875\nv -0.259812 -0.0078125 0.1875\nv 0.441937 -0.0078125 0.1875\nv 0.498987 -0.0078125 0.1875\nv -0.302964 0 0.1875\nv -0.259969 0 0.1875\nv 0.440619 0 0.1875\nv 0.499001 0 0.1875\nv -0.302668 0.0078125 0.1875\nv -0.258773 0.0078125 0.1875\nv -0.257812 0.0105497 0.1875\nv 0.441179 0.0078125 0.1875\nv 0.498626 0.0078125 0.1875\nv -0.301456 0.015625 0.1875\nv -0.25536 0.015625 0.1875\nv -0.25 0.0205488 0.1875\nv -0.242188 0.0221814 0.1875\nv -0.234375 0.0226251 0.1875\nv 0.440859 0.015625 0.1875\nv 0.4375 0.0192409 0.1875\nv 0.498937 0.015625 0.1875\nv -0.300544 0.0234375 0.1875\nv -0.231672 0.0234375 0.1875\nv -0.226562 0.0246121 0.1875\nv -0.21875 0.0271567 0.1875\nv -0.210938 0.0285205 0.1875\nv -0.203125 0.028942 0.1875\nv -0.195312 0.0289745 0.1875\nv -0.1875 0.0291159 0.1875\nv -0.179688 0.0286529 0.1875\nv -0.171875 0.0278257 0.1875\nv -0.164062 0.0272067 0.1875\nv -0.15625 0.0271313 0.1875\nv -0.148438 0.0272958 0.1875\nv -0.140625 0.0271878 0.1875\nv -0.132812 0.0272151 0.1875\nv -0.125 0.027271 0.1875\nv -0.117188 0.0273454 0.1875\nv -0.109375 0.0272776 0.1875\nv -0.101562 0.0271186 0.1875\nv -0.09375 0.0270127 0.1875\nv -0.0859375 0.0269129 0.1875\nv -0.078125 0.0268023 0.1875\nv -0.0703125 0.0266035 0.1875\nv -0.0625 0.026471 0.1875\nv -0.0546875 0.0263325 0.1875\nv -0.046875 0.0261842 0.1875\nv -0.0390625 0.0260496 0.1875\nv -0.03125 0.0259485 0.1875\nv -0.0234375 0.0258002 0.1875\nv -0.015625 0.0256946 0.1875\nv -0.0078125 0.025597 0.1875\nv 0 0.0254936 0.1875\nv 0.0078125 0.0253067 0.1875\nv 0.015625 0.0251526 0.1875\nv 0.0234375 0.0250753 0.1875\nv 0.03125 0.0250214 0.1875\nv 0.0390625 0.0249441 0.1875\nv 0.046875 0.0248663 0.1875\nv 0.0546875 0.0247831 0.1875\nv 0.0625 0.0247204 0.1875\nv 0.0703125 0.0246649 0.1875\nv 0.078125 0.0246187 0.1875\nv 0.0859375 0.0245896 0.1875\nv 0.09375 0.0245662 0.1875\nv 0.101562 0.0245082 0.1875\nv 0.109375 0.0244621 0.1875\nv 0.117188 0.0243887 0.1875\nv 0.125 0.0242903 0.1875\nv 0.132812 0.0242316 0.1875\nv 0.140625 0.0241527 0.1875\nv 0.148438 0.0241033 0.1875\nv 0.15625 0.0240892 0.1875\nv 0.164062 0.0241063 0.1875\nv 0.171875 0.0241394 0.1875\nv 0.179688 0.0241611 0.1875\nv 0.1875 0.0241818 0.1875\nv 0.195312 0.0242697 0.1875\nv 0.203125 0.0243432 0.1875\nv 0.210938 0.0244222 0.1875\nv 0.21875 0.0245068 0.1875\nv 0.226562 0.0246298 0.1875\nv 0.234375 0.0247788 0.1875\nv 0.242188 0.0248845 0.1875\nv 0.25 0.0249523 0.1875\nv 0.257812 0.0250351 0.1875\nv 0.265625 0.0251192 0.1875\nv 0.273438 0.0251966 0.1875\nv 0.28125 0.025235 0.1875\nv 0.289062 0.0253314 0.1875\nv 0.296875 0.0255223 0.1875\nv 0.304688 0.0257791 0.1875\nv 0.3125 0.0261018 0.1875\nv 0.320312 0.0262959 0.1875\nv 0.328125 0.0263496 0.1875\nv 0.335938 0.0263841 0.1875\nv 0.34375 0.0264258 0.1875\nv 0.351562 0.0264457 0.1875\nv 0.359375 0.026462 0.1875\nv 0.367188 0.0265245 0.1875\nv 0.375 0.0267612 0.1875\nv 0.382812 0.0271544 0.1875\nv 0.390625 0.0273046 0.1875\nv 0.398438 0.0272268 0.1875\nv 0.40625 0.0266884 0.1875\nv 0.414062 0.0256876 0.1875\nv 0.421875 0.0246277 0.1875\nv 0.429938 0.0234375 0.1875\nv 0.429688 0.0235317 0.1875\nv 0.498917 0.0234375 0.1875\nv -0.299829 0.03125 0.1875\nv 0.495935 0.03125 0.1875\nv -0.29909 0.0390625 0.1875\nv -0.296875 0.0453549 0.1875\nv 0.492875 0.0390625 0.1875\nv 0.492188 0.0408976 0.1875\nv -0.296209 0.046875 0.1875\nv 0.489796 0.046875 0.1875\nv -0.293486 0.0546875 0.1875\nv 0.476562 0.0602166 0.1875\nv 0.485515 0.0546875 0.1875\nv 0.484375 0.0555785 0.1875\nv -0.291117 0.0625 0.1875\nv -0.289062 0.0672798 0.1875\nv 0.4375 0.0701292 0.1875\nv 0.445312 0.0684642 0.1875\nv 0.453125 0.066443 0.1875\nv 0.460938 0.0652874 0.1875\nv 0.47188 0.0625 0.1875\nv 0.46875 0.0640472 0.1875\nv -0.284178 0.0703125 0.1875\nv -0.28125 0.071441 0.1875\nv -0.273438 0.0756457 0.1875\nv -0.265625 0.0760589 0.1875\nv -0.226562 0.0774352 0.1875\nv -0.21875 0.0764447 0.1875\nv -0.210938 0.0755009 0.1875\nv -0.203125 0.0755641 0.1875\nv -0.195312 0.0759204 0.1875\nv -0.1875 0.0761935 0.1875\nv -0.179688 0.0763139 0.1875\nv -0.171875 0.0760409 0.1875\nv -0.164062 0.0759404 0.1875\nv -0.15625 0.0758038 0.1875\nv -0.148438 0.0757565 0.1875\nv -0.140625 0.0757397 0.1875\nv -0.132812 0.0756173 0.1875\nv -0.125 0.0755547 0.1875\nv -0.117188 0.0754708 0.1875\nv -0.109375 0.0752225 0.1875\nv -0.101562 0.0749855 0.1875\nv -0.09375 0.0747745 0.1875\nv -0.0859375 0.0747059 0.1875\nv -0.078125 0.0747132 0.1875\nv -0.0703125 0.0747429 0.1875\nv -0.0625 0.0746314 0.1875\nv -0.0546875 0.0745326 0.1875\nv -0.046875 0.0744244 0.1875\nv -0.0390625 0.0743493 0.1875\nv -0.03125 0.0743441 0.1875\nv -0.0234375 0.0743308 0.1875\nv -0.015625 0.0742225 0.1875\nv -0.0078125 0.0740758 0.1875\nv 0 0.0739089 0.1875\nv 0.0078125 0.0736988 0.1875\nv 0.015625 0.0735496 0.1875\nv 0.0234375 0.073464 0.1875\nv 0.03125 0.0734109 0.1875\nv 0.0390625 0.0733133 0.1875\nv 0.046875 0.0732242 0.1875\nv 0.0546875 0.0731292 0.1875\nv 0.0625 0.0730332 0.1875\nv 0.0703125 0.0728974 0.1875\nv 0.078125 0.0727619 0.1875\nv 0.0859375 0.0727027 0.1875\nv 0.09375 0.0726284 0.1875\nv 0.101562 0.0726045 0.1875\nv 0.109375 0.072617 0.1875\nv 0.117188 0.0725838 0.1875\nv 0.125 0.0724666 0.1875\nv 0.132812 0.0723496 0.1875\nv 0.140625 0.0722834 0.1875\nv 0.148438 0.0722332 0.1875\nv 0.15625 0.072106 0.1875\nv 0.164062 0.0719768 0.1875\nv 0.171875 0.0718715 0.1875\nv 0.179688 0.0717738 0.1875\nv 0.1875 0.0716937 0.1875\nv 0.195312 0.071763 0.1875\nv 0.203125 0.0719045 0.1875\nv 0.210938 0.0720856 0.1875\nv 0.21875 0.0722796 0.1875\nv 0.226562 0.0724034 0.1875\nv 0.234375 0.0725255 0.1875\nv 0.242188 0.0725896 0.1875\nv 0.25 0.0725929 0.1875\nv 0.257812 0.0725857 0.1875\nv 0.265625 0.0725299 0.1875\nv 0.273438 0.0725514 0.1875\nv 0.28125 0.072618 0.1875\nv 0.289062 0.0726228 0.1875\nv 0.296875 0.0726881 0.1875\nv 0.304688 0.0727791 0.1875\nv 0.3125 0.0728856 0.1875\nv 0.320312 0.0730239 0.1875\nv 0.328125 0.0731496 0.1875\nv 0.335938 0.0732404 0.1875\nv 0.34375 0.0731692 0.1875\nv 0.351562 0.0732273 0.1875\nv 0.359375 0.0731869 0.1875\nv 0.367188 0.0730314 0.1875\nv 0.375 0.0728791 0.1875\nv 0.382812 0.0726063 0.1875\nv 0.390625 0.0721814 0.1875\nv 0.398438 0.0720459 0.1875\nv 0.40625 0.0718885 0.1875\nv 0.414062 0.0716693 0.1875\nv 0.421875 0.071294 0.1875\nv 0.435427 0.0703125 0.1875\nv 0.429688 0.0707923 0.1875\nv -0.262633 0.078125 0.1875\nv -0.257812 0.0831471 0.1875\nv -0.25 0.0855233 0.1875\nv -0.242188 0.081669 0.1875\nv -0.230198 0.078125 0.1875\nv -0.234375 0.0791677 0.1875\nv -0.28125 0.179254 0.1875\nv -0.273438 0.175869 0.1875\nv -0.265625 0.174649 0.1875\nv -0.257812 0.175228 0.1875\nv -0.281932 0.179688 0.1875\nv -0.289062 0.186979 0.1875\nv -0.28125 0.179688 0.194249\nv -0.255158 0.179688 0.1875\nv -0.289457 0.1875 0.1875\nv -0.251311 0.1875 0.1875\nv -0.25 0.189139 0.1875\nv -0.293792 0.195312 0.1875\nv -0.296875 0.202986 0.1875\nv -0.246714 0.195312 0.1875\nv -0.296917 0.203125 0.1875\nv -0.296875 0.203125 0.189314\nv -0.243974 0.203125 0.1875\nv -0.298955 0.210938 0.1875\nv -0.24322 0.210938 0.1875\nv -0.300482 0.21875 0.1875\nv -0.24331 0.21875 0.1875\nv -0.301188 0.226562 0.1875\nv -0.243057 0.226562 0.1875\nv -0.301874 0.234375 0.1875\nv -0.242488 0.234375 0.1875\nv -0.242188 0.239306 0.1875\nv -0.30226 0.242188 0.1875\nv -0.242002 0.242188 0.1875\nv -0.302346 0.25 0.1875\nv -0.241725 0.25 0.1875\nv -0.302111 0.257812 0.1875\nv -0.242158 0.257812 0.1875\nv -0.242188 0.258344 0.1875\nv -0.242188 0.257812 0.190389\nv -0.300333 0.265625 0.1875\nv -0.242579 0.265625 0.1875\nv -0.298301 0.273438 0.1875\nv -0.296875 0.278637 0.1875\nv -0.243086 0.273438 0.1875\nv -0.29611 0.28125 0.1875\nv -0.244332 0.28125 0.1875\nv -0.292868 0.289062 0.1875\nv -0.246998 0.289062 0.1875\nv -0.25 0.293806 0.1875\nv -0.289697 0.296875 0.1875\nv -0.289062 0.298889 0.1875\nv -0.252297 0.296875 0.1875\nv -0.257812 0.304021 0.1875\nv -0.286558 0.304688 0.1875\nv -0.258401 0.304688 0.1875\nv -0.281535 0.3125 0.1875\nv -0.28125 0.312987 0.1875\nv -0.28125 0.3125 0.18924\nv -0.273438 0.316863 0.1875\nv -0.264486 0.3125 0.1875\nv -0.265625 0.313584 0.1875\nv -0.265625 0.3125 0.191152\nv -0.304688 0.628513 0.1875\nv -0.296875 0.627949 0.1875\nv -0.289062 0.626153 0.1875\nv -0.310866 0.632812 0.1875\nv -0.3125 0.6351 0.1875\nv -0.283054 0.632812 0.1875\nv -0.28125 0.635356 0.1875\nv -0.315309 0.640625 0.1875\nv -0.279017 0.640625 0.1875\nv -0.317207 0.648438 0.1875\nv -0.275703 0.648438 0.1875\nv -0.318519 0.65625 0.1875\nv -0.274826 0.65625 0.1875\nv -0.319123 0.664062 0.1875\nv -0.274409 0.664062 0.1875\nv -0.319634 0.671875 0.1875\nv -0.274198 0.671875 0.1875\nv -0.320048 0.679688 0.1875\nv -0.320312 0.686426 0.1875\nv -0.274335 0.679688 0.1875\nv -0.320354 0.6875 0.1875\nv -0.320312 0.6875 0.189024\nv -0.274387 0.6875 0.1875\nv -0.320454 0.695312 0.1875\nv -0.320312 0.695312 0.192314\nv -0.274708 0.695312 0.1875\nv -0.32043 0.703125 0.1875\nv -0.320312 0.710805 0.1875\nv -0.320312 0.703125 0.190289\nv -0.275133 0.703125 0.1875\nv -0.32031 0.710938 0.1875\nv -0.276108 0.710938 0.1875\nv -0.320237 0.71875 0.1875\nv -0.320312 0.720648 0.1875\nv -0.277676 0.71875 0.1875\nv -0.320535 0.726562 0.1875\nv -0.320312 0.726562 0.190773\nv -0.280021 0.726562 0.1875\nv -0.28125 0.731672 0.1875\nv -0.321022 0.734375 0.1875\nv -0.281868 0.734375 0.1875\nv -0.321621 0.742188 0.1875\nv -0.28362 0.742188 0.1875\nv -0.322667 0.75 0.1875\nv -0.285682 0.75 0.1875\nv -0.323196 0.757812 0.1875\nv -0.28776 0.757812 0.1875\nv -0.289062 0.761692 0.1875\nv -0.323618 0.765625 0.1875\nv -0.290733 0.765625 0.1875\nv -0.322828 0.773438 0.1875\nv -0.320312 0.779698 0.1875\nv -0.304688 0.780999 0.1875\nv -0.294957 0.773438 0.1875\nv -0.296875 0.77537 0.1875\nv -0.318932 0.78125 0.1875\nv -0.305181 0.78125 0.1875\nv -0.3125 0.78528 0.1875\nv 0.0078125 -0.539879 0.195312\nv 0.015625 -0.541588 0.195312\nv 0.0234375 -0.543022 0.195312\nv 0.03125 -0.544022 0.195312\nv 0.0390625 -0.544574 0.195312\nv 0.046875 -0.544702 0.195312\nv 0.0546875 -0.543526 0.195312\nv 0.0625 -0.542026 0.195312\nv 0.0703125 -0.54017 0.195312\nv 0.0048719 -0.539062 0.195312\nv 0 -0.536436 0.195312\nv 0.0743647 -0.539062 0.195312\nv 0.078125 -0.537286 0.195312\nv 0.0859375 -0.533294 0.195312\nv -0.00650234 -0.53125 0.195312\nv -0.0078125 -0.529675 0.195312\nv 0.0894322 -0.53125 0.195312\nv 0.09375 -0.528624 0.195312\nv 0.101562 -0.523865 0.195312\nv -0.0130727 -0.523438 0.195312\nv -0.015625 -0.517427 0.195312\nv 0.102235 -0.523438 0.195312\nv 0.101562 -0.523438 0.200563\nv 0.109375 -0.516955 0.195312\nv -0.0165131 -0.515625 0.195312\nv -0.015625 -0.511202 0.195312\nv 0.110654 -0.515625 0.195312\nv 0.109375 -0.515625 0.201003\nv -0.014962 -0.507812 0.195312\nv -0.0078125 -0.503723 0.195312\nv 0.115788 -0.507812 0.195312\nv -0.00107423 -0.5 0.195312\nv 0 -0.499604 0.195312\nv 0.0078125 -0.497701 0.195312\nv 0.015625 -0.496023 0.195312\nv 0.0234375 -0.494098 0.195312\nv 0.101562 -0.493054 0.195312\nv 0.112968 -0.5 0.195312\nv 0.109375 -0.497452 0.195312\nv 0.0308283 -0.492188 0.195312\nv 0.03125 -0.492083 0.195312\nv 0.0390625 -0.489982 0.195312\nv 0.046875 -0.487769 0.195312\nv 0.0546875 -0.487208 0.195312\nv 0.0625 -0.487124 0.195312\nv 0.0703125 -0.486981 0.195312\nv 0.078125 -0.487313 0.195312\nv 0.0859375 -0.488319 0.195312\nv 0.0995277 -0.492188 0.195312\nv 0.09375 -0.489995 0.195312\nv 0.453125 -0.0653958 0.195312\nv 0.460938 -0.0670219 0.195312\nv 0.46875 -0.0639348 0.195312\nv 0.476562 -0.0637533 0.195312\nv -0.289062 -0.0548623 0.195312\nv -0.28125 -0.0570285 0.195312\nv -0.273438 -0.0554314 0.195312\nv 0.449783 -0.0625 0.195312\nv 0.482939 -0.0625 0.195312\nv 0.484375 -0.061848 0.195312\nv -0.289281 -0.0546875 0.195312\nv -0.272799 -0.0546875 0.195312\nv 0.44805 -0.0546875 0.195312\nv 0.48914 -0.0546875 0.195312\nv -0.295594 -0.046875 0.195312\nv -0.296875 -0.0439395 0.195312\nv -0.266467 -0.046875 0.195312\nv -0.265625 -0.0455554 0.195312\nv 0.446755 -0.046875 0.195312\nv 0.491625 -0.046875 0.195312\nv 0.492188 -0.0437023 0.195312\nv -0.298022 -0.0390625 0.195312\nv -0.263076 -0.0390625 0.195312\nv 0.446197 -0.0390625 0.195312\nv 0.492879 -0.0390625 0.195312\nv -0.299052 -0.03125 0.195312\nv -0.261708 -0.03125 0.195312\nv 0.446099 -0.03125 0.195312\nv 0.445312 -0.0268673 0.195312\nv 0.494183 -0.03125 0.195312\nv -0.298749 -0.0234375 0.195312\nv -0.260478 -0.0234375 0.195312\nv 0.444707 -0.0234375 0.195312\nv 0.496556 -0.0234375 0.195312\nv -0.299803 -0.015625 0.195312\nv -0.259336 -0.015625 0.195312\nv 0.443777 -0.015625 0.195312\nv 0.498408 -0.015625 0.195312\nv -0.30211 -0.0078125 0.195312\nv -0.259679 -0.0078125 0.195312\nv 0.441993 -0.0078125 0.195312\nv 0.499073 -0.0078125 0.195312\nv -0.30292 0 0.195312\nv -0.25992 0 0.195312\nv 0.440465 0 0.195312\nv 0.499 0 0.195312\nv -0.302508 0.0078125 0.195312\nv -0.258836 0.0078125 0.195312\nv -0.257812 0.0107024 0.195312\nv 0.440828 0.0078125 0.195312\nv 0.498612 0.0078125 0.195312\nv -0.301308 0.015625 0.195312\nv -0.255364 0.015625 0.195312\nv -0.25 0.0205783 0.195312\nv -0.242188 0.0221664 0.195312\nv -0.234375 0.0227943 0.195312\nv 0.440435 0.015625 0.195312\nv 0.4375 0.019023 0.195312\nv 0.49893 0.015625 0.195312\nv -0.300397 0.0234375 0.195312\nv -0.232188 0.0234375 0.195312\nv -0.226562 0.0246972 0.195312\nv -0.21875 0.0272552 0.195312\nv -0.210938 0.0287222 0.195312\nv -0.203125 0.0292626 0.195312\nv -0.195312 0.0293803 0.195312\nv -0.1875 0.0295003 0.195312\nv -0.179688 0.0289124 0.195312\nv -0.171875 0.0280121 0.195312\nv -0.164062 0.0273088 0.195312\nv -0.15625 0.0271507 0.195312\nv -0.148438 0.0272813 0.195312\nv -0.140625 0.0271685 0.195312\nv -0.132812 0.0271979 0.195312\nv -0.125 0.0272588 0.195312\nv -0.117188 0.027352 0.195312\nv -0.109375 0.0273211 0.195312\nv -0.101562 0.0272275 0.195312\nv -0.09375 0.0270279 0.195312\nv -0.0859375 0.0268346 0.195312\nv -0.078125 0.026724 0.195312\nv -0.0703125 0.0265931 0.195312\nv -0.0625 0.0264808 0.195312\nv -0.0546875 0.0263179 0.195312\nv -0.046875 0.0261357 0.195312\nv -0.0390625 0.0259748 0.195312\nv -0.03125 0.0257976 0.195312\nv -0.0234375 0.0256557 0.195312\nv -0.015625 0.0255616 0.195312\nv -0.0078125 0.0254798 0.195312\nv 0 0.0253907 0.195312\nv 0.0078125 0.0251951 0.195312\nv 0.015625 0.0250876 0.195312\nv 0.0234375 0.0249815 0.195312\nv 0.03125 0.0249323 0.195312\nv 0.0390625 0.0248557 0.195312\nv 0.046875 0.0247959 0.195312\nv 0.0546875 0.0247401 0.195312\nv 0.0625 0.0246719 0.195312\nv 0.0703125 0.0246149 0.195312\nv 0.078125 0.0245697 0.195312\nv 0.0859375 0.024527 0.195312\nv 0.09375 0.0244738 0.195312\nv 0.101562 0.0244667 0.195312\nv 0.109375 0.0244914 0.195312\nv 0.117188 0.0244583 0.195312\nv 0.125 0.024361 0.195312\nv 0.132812 0.0242935 0.195312\nv 0.140625 0.0242994 0.195312\nv 0.148438 0.0242811 0.195312\nv 0.15625 0.0242943 0.195312\nv 0.164062 0.0243284 0.195312\nv 0.171875 0.0243633 0.195312\nv 0.179688 0.0243777 0.195312\nv 0.1875 0.0243665 0.195312\nv 0.195312 0.0244083 0.195312\nv 0.203125 0.0244498 0.195312\nv 0.210938 0.0245159 0.195312\nv 0.21875 0.0246041 0.195312\nv 0.226562 0.0247067 0.195312\nv 0.234375 0.0248596 0.195312\nv 0.242188 0.0250543 0.195312\nv 0.25 0.0251514 0.195312\nv 0.257812 0.0252182 0.195312\nv 0.265625 0.0252837 0.195312\nv 0.273438 0.0253407 0.195312\nv 0.28125 0.0253911 0.195312\nv 0.289062 0.0254538 0.195312\nv 0.296875 0.0255857 0.195312\nv 0.304688 0.0258447 0.195312\nv 0.3125 0.0261198 0.195312\nv 0.320312 0.0262487 0.195312\nv 0.328125 0.026342 0.195312\nv 0.335938 0.0264047 0.195312\nv 0.34375 0.0264507 0.195312\nv 0.351562 0.026453 0.195312\nv 0.359375 0.0264584 0.195312\nv 0.367188 0.0267137 0.195312\nv 0.375 0.0269239 0.195312\nv 0.382812 0.0272935 0.195312\nv 0.390625 0.0275546 0.195312\nv 0.398438 0.0274542 0.195312\nv 0.40625 0.026871 0.195312\nv 0.414062 0.0259517 0.195312\nv 0.421875 0.024876 0.195312\nv 0.430423 0.0234375 0.195312\nv 0.429688 0.0237416 0.195312\nv 0.498826 0.0234375 0.195312\nv -0.299716 0.03125 0.195312\nv 0.495938 0.03125 0.195312\nv -0.298985 0.0390625 0.195312\nv -0.296875 0.0448009 0.195312\nv 0.492919 0.0390625 0.195312\nv 0.492188 0.0409943 0.195312\nv -0.295933 0.046875 0.195312\nv 0.489786 0.046875 0.195312\nv -0.293265 0.0546875 0.195312\nv 0.476562 0.0602252 0.195312\nv 0.485334 0.0546875 0.195312\nv 0.484375 0.0554535 0.195312\nv -0.291025 0.0625 0.195312\nv -0.289062 0.0666237 0.195312\nv 0.4375 0.0700218 0.195312\nv 0.445312 0.0683597 0.195312\nv 0.453125 0.0663623 0.195312\nv 0.460938 0.0652213 0.195312\nv 0.471939 0.0625 0.195312\nv 0.46875 0.0640572 0.195312\nv -0.282451 0.0703125 0.195312\nv -0.28125 0.0707467 0.195312\nv -0.28125 0.0703125 0.199266\nv -0.273438 0.0747041 0.195312\nv -0.265625 0.0748623 0.195312\nv -0.226562 0.0776954 0.195312\nv -0.21875 0.0767481 0.195312\nv -0.210938 0.075785 0.195312\nv -0.203125 0.0757884 0.195312\nv -0.195312 0.0761649 0.195312\nv -0.1875 0.0763802 0.195312\nv -0.179688 0.0764046 0.195312\nv -0.171875 0.0759888 0.195312\nv -0.164062 0.0758506 0.195312\nv -0.15625 0.0756996 0.195312\nv -0.148438 0.0756372 0.195312\nv -0.140625 0.0756818 0.195312\nv -0.132812 0.0756693 0.195312\nv -0.125 0.0756006 0.195312\nv -0.117188 0.0755733 0.195312\nv -0.109375 0.0753352 0.195312\nv -0.101562 0.0750427 0.195312\nv -0.09375 0.0748506 0.195312\nv -0.0859375 0.0747934 0.195312\nv -0.078125 0.0747813 0.195312\nv -0.0703125 0.0748376 0.195312\nv -0.0625 0.074786 0.195312\nv -0.0546875 0.0746701 0.195312\nv -0.046875 0.0744999 0.195312\nv -0.0390625 0.074384 0.195312\nv -0.03125 0.0743306 0.195312\nv -0.0234375 0.0743137 0.195312\nv -0.015625 0.0742176 0.195312\nv -0.0078125 0.0741423 0.195312\nv 0 0.0740037 0.195312\nv 0.0078125 0.073805 0.195312\nv 0.015625 0.0736395 0.195312\nv 0.0234375 0.0735216 0.195312\nv 0.03125 0.0734648 0.195312\nv 0.0390625 0.0733651 0.195312\nv 0.046875 0.0732757 0.195312\nv 0.0546875 0.0731501 0.195312\nv 0.0625 0.0730467 0.195312\nv 0.0703125 0.072912 0.195312\nv 0.078125 0.0727436 0.195312\nv 0.0859375 0.0726729 0.195312\nv 0.09375 0.0726304 0.195312\nv 0.101562 0.072595 0.195312\nv 0.109375 0.0725953 0.195312\nv 0.117188 0.0725516 0.195312\nv 0.125 0.0724191 0.195312\nv 0.132812 0.0722961 0.195312\nv 0.140625 0.0722051 0.195312\nv 0.148438 0.0721512 0.195312\nv 0.15625 0.0721212 0.195312\nv 0.164062 0.0720506 0.195312\nv 0.171875 0.0719412 0.195312\nv 0.179688 0.0718571 0.195312\nv 0.1875 0.0717845 0.195312\nv 0.195312 0.0718152 0.195312\nv 0.203125 0.071941 0.195312\nv 0.210938 0.0721056 0.195312\nv 0.21875 0.0722842 0.195312\nv 0.226562 0.0724799 0.195312\nv 0.234375 0.072554 0.195312\nv 0.242188 0.0725975 0.195312\nv 0.25 0.0726171 0.195312\nv 0.257812 0.0726149 0.195312\nv 0.265625 0.0725838 0.195312\nv 0.273438 0.0726328 0.195312\nv 0.28125 0.0726896 0.195312\nv 0.289062 0.072684 0.195312\nv 0.296875 0.0727195 0.195312\nv 0.304688 0.0727736 0.195312\nv 0.3125 0.0728583 0.195312\nv 0.320312 0.072932 0.195312\nv 0.328125 0.072997 0.195312\nv 0.335938 0.0730823 0.195312\nv 0.34375 0.0731587 0.195312\nv 0.351562 0.0731227 0.195312\nv 0.359375 0.073112 0.195312\nv 0.367188 0.0730132 0.195312\nv 0.375 0.0728581 0.195312\nv 0.382812 0.0725976 0.195312\nv 0.390625 0.0721744 0.195312\nv 0.398438 0.0720348 0.195312\nv 0.40625 0.0718232 0.195312\nv 0.414062 0.0715904 0.195312\nv 0.421875 0.0711188 0.195312\nv 0.433457 0.0703125 0.195312\nv 0.429688 0.07057 0.195312\nv -0.260599 0.078125 0.195312\nv -0.257812 0.0806412 0.195312\nv -0.25 0.0840182 0.195312\nv -0.242188 0.081598 0.195312\nv -0.229208 0.078125 0.195312\nv -0.234375 0.0792559 0.195312\nv -0.273438 0.17687 0.195312\nv -0.265625 0.175687 0.195312\nv -0.257812 0.176847 0.195312\nv -0.289062 0.187047 0.195312\nv -0.281012 0.179688 0.195312\nv -0.28125 0.179774 0.195312\nv -0.28125 0.179688 0.196701\nv -0.256236 0.179688 0.195312\nv -0.289428 0.1875 0.195312\nv -0.251921 0.1875 0.195312\nv -0.25 0.189789 0.195312\nv -0.293639 0.195312 0.195312\nv -0.246714 0.195312 0.195312\nv -0.296691 0.203125 0.195312\nv -0.296875 0.203627 0.195312\nv -0.244096 0.203125 0.195312\nv -0.298753 0.210938 0.195312\nv -0.243444 0.210938 0.195312\nv -0.300274 0.21875 0.195312\nv -0.243629 0.21875 0.195312\nv -0.301221 0.226562 0.195312\nv -0.243279 0.226562 0.195312\nv -0.30183 0.234375 0.195312\nv -0.242718 0.234375 0.195312\nv -0.242188 0.240393 0.195312\nv -0.302167 0.242188 0.195312\nv -0.242027 0.242188 0.195312\nv -0.242188 0.242188 0.198676\nv -0.302275 0.25 0.195312\nv -0.241686 0.25 0.195312\nv -0.242188 0.257136 0.195312\nv -0.301842 0.257812 0.195312\nv -0.242237 0.257812 0.195312\nv -0.30024 0.265625 0.195312\nv -0.242699 0.265625 0.195312\nv -0.298266 0.273438 0.195312\nv -0.296875 0.278289 0.195312\nv -0.243302 0.273438 0.195312\nv -0.296012 0.28125 0.195312\nv -0.244682 0.28125 0.195312\nv -0.292816 0.289062 0.195312\nv -0.247575 0.289062 0.195312\nv -0.25 0.29216 0.195312\nv -0.28954 0.296875 0.195312\nv -0.289062 0.29817 0.195312\nv -0.253743 0.296875 0.195312\nv -0.257812 0.302186 0.195312\nv -0.285911 0.304688 0.195312\nv -0.28125 0.311015 0.195312\nv -0.260191 0.304688 0.195312\nv -0.265625 0.310857 0.195312\nv -0.277892 0.3125 0.195312\nv -0.268643 0.3125 0.195312\nv -0.273438 0.314491 0.195312\nv -0.273438 0.3125 0.201076\nv -0.304688 0.63006 0.195312\nv -0.296875 0.629011 0.195312\nv -0.289062 0.628052 0.195312\nv -0.30879 0.632812 0.195312\nv -0.3125 0.636855 0.195312\nv -0.284341 0.632812 0.195312\nv -0.28125 0.637122 0.195312\nv -0.314746 0.640625 0.195312\nv -0.279681 0.640625 0.195312\nv -0.31671 0.648438 0.195312\nv -0.276396 0.648438 0.195312\nv -0.318102 0.65625 0.195312\nv -0.275213 0.65625 0.195312\nv -0.318799 0.664062 0.195312\nv -0.274387 0.664062 0.195312\nv -0.319443 0.671875 0.195312\nv -0.274236 0.671875 0.195312\nv -0.319867 0.679688 0.195312\nv -0.274508 0.679688 0.195312\nv -0.320132 0.6875 0.195312\nv -0.274488 0.6875 0.195312\nv -0.320221 0.695312 0.195312\nv -0.274761 0.695312 0.195312\nv -0.320098 0.703125 0.195312\nv -0.275148 0.703125 0.195312\nv -0.319917 0.710938 0.195312\nv -0.276154 0.710938 0.195312\nv -0.319721 0.71875 0.195312\nv -0.277732 0.71875 0.195312\nv -0.31998 0.726562 0.195312\nv -0.320312 0.73304 0.195312\nv -0.280103 0.726562 0.195312\nv -0.28125 0.731644 0.195312\nv -0.320375 0.734375 0.195312\nv -0.320312 0.734375 0.196071\nv -0.281834 0.734375 0.195312\nv -0.321097 0.742188 0.195312\nv -0.283675 0.742188 0.195312\nv -0.322074 0.75 0.195312\nv -0.285937 0.75 0.195312\nv -0.322582 0.757812 0.195312\nv -0.28801 0.757812 0.195312\nv -0.289062 0.760387 0.195312\nv -0.322875 0.765625 0.195312\nv -0.291793 0.765625 0.195312\nv -0.322144 0.773438 0.195312\nv -0.320312 0.777644 0.195312\nv -0.304688 0.779882 0.195312\nv -0.296142 0.773438 0.195312\nv -0.296875 0.774147 0.195312\nv -0.296875 0.773438 0.19792\nv -0.316968 0.78125 0.195312\nv -0.307526 0.78125 0.195312\nv -0.3125 0.784253 0.195312\nv 0.0078125 -0.539881 0.203125\nv 0.015625 -0.541805 0.203125\nv 0.0234375 -0.543307 0.203125\nv 0.03125 -0.544328 0.203125\nv 0.0390625 -0.544802 0.203125\nv 0.046875 -0.544203 0.203125\nv 0.0546875 -0.543014 0.203125\nv 0.0625 -0.541518 0.203125\nv 0.0703125 -0.53975 0.203125\nv 0.00538607 -0.539062 0.203125\nv 0 -0.535604 0.203125\nv 0.0727666 -0.539062 0.203125\nv 0.078125 -0.536524 0.203125\nv 0.0859375 -0.532848 0.203125\nv -0.00505981 -0.53125 0.203125\nv -0.0078125 -0.528549 0.203125\nv 0.0886823 -0.53125 0.203125\nv 0.09375 -0.528228 0.203125\nv -0.0131319 -0.523438 0.203125\nv -0.015625 -0.517199 0.203125\nv 0.101304 -0.523438 0.203125\nv 0.101562 -0.523205 0.203125\nv -0.0161601 -0.515625 0.203125\nv -0.015625 -0.511247 0.203125\nv 0.108996 -0.515625 0.203125\nv 0.109375 -0.515033 0.203125\nv -0.0151162 -0.507812 0.203125\nv -0.015625 -0.507812 0.205957\nv -0.0078125 -0.503129 0.203125\nv 0.113789 -0.507812 0.203125\nv -0.00275278 -0.5 0.203125\nv 0 -0.49891 0.203125\nv 0.0078125 -0.496959 0.203125\nv 0.015625 -0.495236 0.203125\nv 0.0234375 -0.493506 0.203125\nv 0.101562 -0.494048 0.203125\nv 0.110438 -0.5 0.203125\nv 0.109375 -0.499106 0.203125\nv 0.109375 -0.5 0.205924\nv 0.0285089 -0.492188 0.203125\nv 0.03125 -0.491523 0.203125\nv 0.0390625 -0.489516 0.203125\nv 0.046875 -0.488399 0.203125\nv 0.0546875 -0.487959 0.203125\nv 0.0625 -0.487434 0.203125\nv 0.0703125 -0.487225 0.203125\nv 0.078125 -0.487598 0.203125\nv 0.0859375 -0.488683 0.203125\nv 0.0971487 -0.492188 0.203125\nv 0.09375 -0.49079 0.203125\nv 0.453125 -0.0652641 0.203125\nv 0.460938 -0.0669333 0.203125\nv 0.46875 -0.063862 0.203125\nv 0.476562 -0.0634604 0.203125\nv -0.289062 -0.0549741 0.203125\nv -0.28125 -0.0569434 0.203125\nv -0.273438 -0.0552655 0.203125\nv 0.449694 -0.0625 0.203125\nv 0.480991 -0.0625 0.203125\nv 0.484375 -0.0607664 0.203125\nv -0.289429 -0.0546875 0.203125\nv -0.272942 -0.0546875 0.203125\nv 0.447891 -0.0546875 0.203125\nv 0.488697 -0.0546875 0.203125\nv -0.295943 -0.046875 0.203125\nv -0.296875 -0.0449034 0.203125\nv -0.266569 -0.046875 0.203125\nv -0.265625 -0.0453909 0.203125\nv 0.446366 -0.046875 0.203125\nv 0.491339 -0.046875 0.203125\nv 0.492188 -0.0421031 0.203125\nv -0.298338 -0.0390625 0.203125\nv -0.263165 -0.0390625 0.203125\nv 0.445729 -0.0390625 0.203125\nv 0.492657 -0.0390625 0.203125\nv -0.299407 -0.03125 0.203125\nv -0.261777 -0.03125 0.203125\nv 0.445529 -0.03125 0.203125\nv 0.445312 -0.0296643 0.203125\nv 0.445312 -0.03125 0.206885\nv 0.493846 -0.03125 0.203125\nv -0.299079 -0.0234375 0.203125\nv -0.260416 -0.0234375 0.203125\nv 0.444498 -0.0234375 0.203125\nv 0.496384 -0.0234375 0.203125\nv -0.30004 -0.015625 0.203125\nv -0.259393 -0.015625 0.203125\nv 0.443555 -0.015625 0.203125\nv 0.498285 -0.015625 0.203125\nv -0.302255 -0.0078125 0.203125\nv -0.259699 -0.0078125 0.203125\nv 0.441937 -0.0078125 0.203125\nv 0.499167 -0.0078125 0.203125\nv -0.302958 0 0.203125\nv -0.260018 0 0.203125\nv 0.440265 0 0.203125\nv 0.498978 0 0.203125\nv -0.302402 0.0078125 0.203125\nv -0.259044 0.0078125 0.203125\nv -0.257812 0.0112465 0.203125\nv 0.440443 0.0078125 0.203125\nv 0.498536 0.0078125 0.203125\nv -0.301199 0.015625 0.203125\nv -0.255331 0.015625 0.203125\nv -0.25 0.020414 0.203125\nv -0.242188 0.0222535 0.203125\nv -0.234375 0.0229804 0.203125\nv 0.439866 0.015625 0.203125\nv 0.4375 0.0186081 0.203125\nv 0.498773 0.015625 0.203125\nv -0.300279 0.0234375 0.203125\nv -0.232726 0.0234375 0.203125\nv -0.226562 0.0247139 0.203125\nv -0.21875 0.0272888 0.203125\nv -0.210938 0.0289178 0.203125\nv -0.203125 0.0295346 0.203125\nv -0.195312 0.0297753 0.203125\nv -0.1875 0.0298594 0.203125\nv -0.179688 0.0292151 0.203125\nv -0.171875 0.0282111 0.203125\nv -0.164062 0.0275135 0.203125\nv -0.15625 0.0272381 0.203125\nv -0.148438 0.0272596 0.203125\nv -0.140625 0.0271658 0.203125\nv -0.132812 0.0271949 0.203125\nv -0.125 0.0272968 0.203125\nv -0.117188 0.0273904 0.203125\nv -0.109375 0.0273972 0.203125\nv -0.101562 0.0273329 0.203125\nv -0.09375 0.0271192 0.203125\nv -0.0859375 0.026863 0.203125\nv -0.078125 0.0266894 0.203125\nv -0.0703125 0.0265621 0.203125\nv -0.0625 0.026437 0.203125\nv -0.0546875 0.0262476 0.203125\nv -0.046875 0.0260805 0.203125\nv -0.0390625 0.0258797 0.203125\nv -0.03125 0.0256538 0.203125\nv -0.0234375 0.0254797 0.203125\nv -0.015625 0.0253935 0.203125\nv -0.0078125 0.0253059 0.203125\nv 0 0.0252198 0.203125\nv 0.0078125 0.0250529 0.203125\nv 0.015625 0.0249782 0.203125\nv 0.0234375 0.0249149 0.203125\nv 0.03125 0.0248701 0.203125\nv 0.0390625 0.0247889 0.203125\nv 0.046875 0.0247331 0.203125\nv 0.0546875 0.0246794 0.203125\nv 0.0625 0.0246056 0.203125\nv 0.0703125 0.0245336 0.203125\nv 0.078125 0.0245428 0.203125\nv 0.0859375 0.02456 0.203125\nv 0.09375 0.0245535 0.203125\nv 0.101562 0.0245456 0.203125\nv 0.109375 0.0245557 0.203125\nv 0.117188 0.0245344 0.203125\nv 0.125 0.0245164 0.203125\nv 0.132812 0.0244396 0.203125\nv 0.140625 0.024456 0.203125\nv 0.148438 0.0244962 0.203125\nv 0.15625 0.0245119 0.203125\nv 0.164062 0.0245437 0.203125\nv 0.171875 0.0245748 0.203125\nv 0.179688 0.0245739 0.203125\nv 0.1875 0.0245502 0.203125\nv 0.195312 0.0245638 0.203125\nv 0.203125 0.0246028 0.203125\nv 0.210938 0.0246169 0.203125\nv 0.21875 0.0247253 0.203125\nv 0.226562 0.0248363 0.203125\nv 0.234375 0.0250287 0.203125\nv 0.242188 0.0252007 0.203125\nv 0.25 0.0253455 0.203125\nv 0.257812 0.0254336 0.203125\nv 0.265625 0.0254896 0.203125\nv 0.273438 0.0255374 0.203125\nv 0.28125 0.0256041 0.203125\nv 0.289062 0.0256916 0.203125\nv 0.296875 0.0257848 0.203125\nv 0.304688 0.0259384 0.203125\nv 0.3125 0.0261509 0.203125\nv 0.320312 0.0262353 0.203125\nv 0.328125 0.026321 0.203125\nv 0.335938 0.0264201 0.203125\nv 0.34375 0.0265028 0.203125\nv 0.351562 0.0265193 0.203125\nv 0.359375 0.0265788 0.203125\nv 0.367188 0.0268573 0.203125\nv 0.375 0.0271682 0.203125\nv 0.382812 0.0274967 0.203125\nv 0.390625 0.0278036 0.203125\nv 0.398438 0.0277157 0.203125\nv 0.40625 0.0271077 0.203125\nv 0.414062 0.0262497 0.203125\nv 0.421875 0.0251307 0.203125\nv 0.430831 0.0234375 0.203125\nv 0.429688 0.0239707 0.203125\nv 0.498693 0.0234375 0.203125\nv -0.299618 0.03125 0.203125\nv 0.495883 0.03125 0.203125\nv -0.298846 0.0390625 0.203125\nv -0.296875 0.0442651 0.203125\nv 0.492916 0.0390625 0.203125\nv 0.492188 0.0410578 0.203125\nv -0.295664 0.046875 0.203125\nv 0.489883 0.046875 0.203125\nv -0.293018 0.0546875 0.203125\nv 0.476562 0.0602241 0.203125\nv 0.485227 0.0546875 0.203125\nv 0.484375 0.0553731 0.203125\nv -0.290849 0.0625 0.203125\nv -0.289062 0.0659239 0.203125\nv -0.28125 0.069888 0.203125\nv 0.4375 0.0698914 0.203125\nv 0.445312 0.0682994 0.203125\nv 0.453125 0.0662542 0.203125\nv 0.460938 0.065056 0.203125\nv 0.471858 0.0625 0.203125\nv 0.46875 0.0639771 0.203125\nv -0.280151 0.0703125 0.203125\nv -0.273438 0.0731554 0.203125\nv -0.265625 0.073404 0.203125\nv -0.226562 0.0779504 0.203125\nv -0.21875 0.0769458 0.203125\nv -0.210938 0.076088 0.203125\nv -0.203125 0.0760482 0.203125\nv -0.195312 0.0763767 0.203125\nv -0.1875 0.0765487 0.203125\nv -0.179688 0.0765022 0.203125\nv -0.171875 0.075994 0.203125\nv -0.164062 0.0757899 0.203125\nv -0.15625 0.0756299 0.203125\nv -0.148438 0.0756296 0.203125\nv -0.140625 0.0756549 0.203125\nv -0.132812 0.0757184 0.203125\nv -0.125 0.0756923 0.203125\nv -0.117188 0.0756813 0.203125\nv -0.109375 0.0754253 0.203125\nv -0.101562 0.0751587 0.203125\nv -0.09375 0.0748967 0.203125\nv -0.0859375 0.0748883 0.203125\nv -0.078125 0.0749219 0.203125\nv -0.0703125 0.074934 0.203125\nv -0.0625 0.0748882 0.203125\nv -0.0546875 0.0747343 0.203125\nv -0.046875 0.0745508 0.203125\nv -0.0390625 0.0743891 0.203125\nv -0.03125 0.0742816 0.203125\nv -0.0234375 0.0742185 0.203125\nv -0.015625 0.0742016 0.203125\nv -0.0078125 0.0741596 0.203125\nv 0 0.0740623 0.203125\nv 0.0078125 0.0738683 0.203125\nv 0.015625 0.0736926 0.203125\nv 0.0234375 0.0735595 0.203125\nv 0.03125 0.0735088 0.203125\nv 0.0390625 0.0733912 0.203125\nv 0.046875 0.073296 0.203125\nv 0.0546875 0.0731999 0.203125\nv 0.0625 0.073061 0.203125\nv 0.0703125 0.07291 0.203125\nv 0.078125 0.0727707 0.203125\nv 0.0859375 0.0726734 0.203125\nv 0.09375 0.0726307 0.203125\nv 0.101562 0.072573 0.203125\nv 0.109375 0.0725398 0.203125\nv 0.117188 0.0724661 0.203125\nv 0.125 0.0723583 0.203125\nv 0.132812 0.0722596 0.203125\nv 0.140625 0.0722099 0.203125\nv 0.148438 0.0721561 0.203125\nv 0.15625 0.0721456 0.203125\nv 0.164062 0.0721185 0.203125\nv 0.171875 0.0720672 0.203125\nv 0.179688 0.0720242 0.203125\nv 0.1875 0.0719719 0.203125\nv 0.195312 0.0719457 0.203125\nv 0.203125 0.0720049 0.203125\nv 0.210938 0.0721465 0.203125\nv 0.21875 0.0723171 0.203125\nv 0.226562 0.0725054 0.203125\nv 0.234375 0.0726202 0.203125\nv 0.242188 0.0726011 0.203125\nv 0.25 0.0725983 0.203125\nv 0.257812 0.0726091 0.203125\nv 0.265625 0.0726385 0.203125\nv 0.273438 0.072673 0.203125\nv 0.28125 0.0727282 0.203125\nv 0.289062 0.0727429 0.203125\nv 0.296875 0.0727646 0.203125\nv 0.304688 0.0728056 0.203125\nv 0.3125 0.0728647 0.203125\nv 0.320312 0.0728827 0.203125\nv 0.328125 0.0728777 0.203125\nv 0.335938 0.0729695 0.203125\nv 0.34375 0.073077 0.203125\nv 0.351562 0.0731298 0.203125\nv 0.359375 0.072956 0.203125\nv 0.367188 0.0729621 0.203125\nv 0.375 0.0728189 0.203125\nv 0.382812 0.0725663 0.203125\nv 0.390625 0.0721474 0.203125\nv 0.398438 0.0719813 0.203125\nv 0.40625 0.0717876 0.203125\nv 0.414062 0.0714807 0.203125\nv 0.421875 0.0709613 0.203125\nv 0.430616 0.0703125 0.203125\nv 0.429688 0.070367 0.203125\nv 0.429688 0.0703125 0.205178\nv -0.258119 0.078125 0.203125\nv -0.257812 0.0783645 0.203125\nv -0.257812 0.078125 0.205957\nv -0.25 0.0829388 0.203125\nv -0.242188 0.0813906 0.203125\nv -0.227991 0.078125 0.203125\nv -0.234375 0.0792018 0.203125\nv -0.28125 0.179399 0.203125\nv -0.273438 0.176954 0.203125\nv -0.265625 0.177089 0.203125\nv -0.257812 0.179006 0.203125\nv -0.281715 0.179688 0.203125\nv -0.289062 0.18704 0.203125\nv -0.257413 0.179688 0.203125\nv -0.289449 0.1875 0.203125\nv -0.252378 0.1875 0.203125\nv -0.25 0.190186 0.203125\nv -0.293458 0.195312 0.203125\nv -0.246872 0.195312 0.203125\nv -0.296564 0.203125 0.203125\nv -0.296875 0.203993 0.203125\nv -0.296875 0.203125 0.205784\nv -0.24425 0.203125 0.203125\nv -0.298599 0.210938 0.203125\nv -0.243784 0.210938 0.203125\nv -0.30012 0.21875 0.203125\nv -0.243919 0.21875 0.203125\nv -0.301216 0.226562 0.203125\nv -0.243549 0.226562 0.203125\nv -0.301728 0.234375 0.203125\nv -0.243103 0.234375 0.203125\nv -0.301988 0.242188 0.203125\nv -0.242391 0.242188 0.203125\nv -0.242188 0.246413 0.203125\nv -0.242188 0.242188 0.207935\nv -0.302069 0.25 0.203125\nv -0.242006 0.25 0.203125\nv -0.242188 0.252684 0.203125\nv -0.301537 0.257812 0.203125\nv -0.242542 0.257812 0.203125\nv -0.300249 0.265625 0.203125\nv -0.24292 0.265625 0.203125\nv -0.298369 0.273438 0.203125\nv -0.296875 0.278154 0.203125\nv -0.243582 0.273438 0.203125\nv -0.295914 0.28125 0.203125\nv -0.245206 0.28125 0.203125\nv -0.292495 0.289062 0.203125\nv -0.248142 0.289062 0.203125\nv -0.25 0.291343 0.203125\nv -0.289094 0.296875 0.203125\nv -0.289062 0.296946 0.203125\nv -0.254641 0.296875 0.203125\nv -0.257812 0.30071 0.203125\nv -0.284907 0.304688 0.203125\nv -0.28125 0.309232 0.203125\nv -0.273438 0.311807 0.203125\nv -0.261572 0.304688 0.203125\nv -0.265625 0.308898 0.203125\nv -0.304688 0.631555 0.203125\nv -0.296875 0.629703 0.203125\nv -0.289062 0.629605 0.203125\nv -0.306659 0.632812 0.203125\nv -0.3125 0.638033 0.203125\nv -0.285709 0.632812 0.203125\nv -0.28125 0.638785 0.203125\nv -0.314121 0.640625 0.203125\nv -0.280385 0.640625 0.203125\nv -0.28125 0.640625 0.210121\nv -0.316249 0.648438 0.203125\nv -0.277256 0.648438 0.203125\nv -0.317711 0.65625 0.203125\nv -0.275746 0.65625 0.203125\nv -0.318426 0.664062 0.203125\nv -0.274687 0.664062 0.203125\nv -0.319163 0.671875 0.203125\nv -0.274542 0.671875 0.203125\nv -0.319644 0.679688 0.203125\nv -0.274675 0.679688 0.203125\nv -0.319873 0.6875 0.203125\nv -0.274777 0.6875 0.203125\nv -0.319938 0.695312 0.203125\nv -0.274934 0.695312 0.203125\nv -0.319771 0.703125 0.203125\nv -0.275269 0.703125 0.203125\nv -0.319521 0.710938 0.203125\nv -0.276317 0.710938 0.203125\nv -0.319183 0.71875 0.203125\nv -0.277878 0.71875 0.203125\nv -0.319425 0.726562 0.203125\nv -0.280131 0.726562 0.203125\nv -0.28125 0.731463 0.203125\nv -0.319705 0.734375 0.203125\nv -0.320312 0.739956 0.203125\nv -0.281871 0.734375 0.203125\nv -0.320545 0.742188 0.203125\nv -0.320312 0.742188 0.207867\nv -0.283896 0.742188 0.203125\nv -0.321485 0.75 0.203125\nv -0.286194 0.75 0.203125\nv -0.321891 0.757812 0.203125\nv -0.288536 0.757812 0.203125\nv -0.289062 0.758971 0.203125\nv -0.289062 0.757812 0.208518\nv -0.32222 0.765625 0.203125\nv -0.292769 0.765625 0.203125\nv -0.296875 0.771453 0.203125\nv -0.321204 0.773438 0.203125\nv -0.320312 0.775396 0.203125\nv -0.320312 0.773438 0.205967\nv -0.298823 0.773438 0.203125\nv -0.304688 0.778061 0.203125\nv -0.314368 0.78125 0.203125\nv -0.310621 0.78125 0.203125\nv -0.3125 0.782596 0.203125\nv -0.3125 0.78125 0.208132\nv 0.0078125 -0.539738 0.210938\nv 0.015625 -0.541865 0.210938\nv 0.0234375 -0.5435 0.210938\nv 0.03125 -0.544523 0.210938\nv 0.0390625 -0.544399 0.210938\nv 0.046875 -0.54358 0.210938\nv 0.0546875 -0.542433 0.210938\nv 0.0625 -0.540984 0.210938\nv 0.0703125 -0.539183 0.210938\nv 0.00589446 -0.539062 0.210938\nv 0 -0.535086 0.210938\nv 0.0707621 -0.539062 0.210938\nv 0.0703125 -0.539062 0.212102\nv 0.078125 -0.535857 0.210938\nv 0.0859375 -0.532286 0.210938\nv -0.00442863 -0.53125 0.210938\nv -0.0078125 -0.528485 0.210938\nv 0.0876276 -0.53125 0.210938\nv 0.09375 -0.527502 0.210938\nv -0.0138193 -0.523438 0.210938\nv -0.015625 -0.519303 0.210938\nv 0.0999903 -0.523438 0.210938\nv 0.101562 -0.521916 0.210938\nv -0.0168559 -0.515625 0.210938\nv 0.107202 -0.515625 0.210938\nv 0.109375 -0.512314 0.210938\nv -0.0163028 -0.507812 0.210938\nv -0.015625 -0.507242 0.210938\nv -0.0078125 -0.50212 0.210938\nv 0.112074 -0.507812 0.210938\nv 0.109375 -0.502019 0.210938\nv -0.00399264 -0.5 0.210938\nv 0 -0.498571 0.210938\nv 0.0078125 -0.496715 0.210938\nv 0.015625 -0.494931 0.210938\nv 0.0234375 -0.49314 0.210938\nv 0.10749 -0.5 0.210938\nv 0.101562 -0.49555 0.210938\nv 0.0271413 -0.492188 0.210938\nv 0.03125 -0.491216 0.210938\nv 0.0390625 -0.489884 0.210938\nv 0.046875 -0.489046 0.210938\nv 0.0546875 -0.488402 0.210938\nv 0.0625 -0.48784 0.210938\nv 0.0703125 -0.487591 0.210938\nv 0.078125 -0.488045 0.210938\nv 0.0859375 -0.489236 0.210938\nv 0.0948283 -0.492188 0.210938\nv 0.09375 -0.491672 0.210938\nv 0.09375 -0.492188 0.214418\nv 0.453125 -0.0651576 0.210938\nv 0.460938 -0.0668059 0.210938\nv 0.46875 -0.0637168 0.210938\nv 0.476562 -0.0629388 0.210938\nv -0.289062 -0.0553149 0.210938\nv -0.28125 -0.0571176 0.210938\nv -0.273438 -0.0554513 0.210938\nv 0.44911 -0.0625 0.210938\nv 0.478703 -0.0625 0.210938\nv 0.484375 -0.0597031 0.210938\nv -0.289871 -0.0546875 0.210938\nv -0.272711 -0.0546875 0.210938\nv 0.447322 -0.0546875 0.210938\nv 0.445312 -0.0546875 0.218526\nv 0.488147 -0.0546875 0.210938\nv -0.296414 -0.046875 0.210938\nv -0.296875 -0.0460691 0.210938\nv -0.265854 -0.046875 0.210938\nv -0.265625 -0.0465285 0.210938\nv -0.265625 -0.046875 0.212476\nv 0.445952 -0.046875 0.210938\nv 0.445312 -0.046875 0.214617\nv 0.491055 -0.046875 0.210938\nv 0.492188 -0.0410791 0.210938\nv -0.299011 -0.0390625 0.210938\nv -0.262665 -0.0390625 0.210938\nv 0.445343 -0.0390625 0.210938\nv 0.445312 -0.0382391 0.210938\nv 0.445312 -0.0390625 0.211177\nv 0.492531 -0.0390625 0.210938\nv -0.300026 -0.03125 0.210938\nv -0.261159 -0.03125 0.210938\nv 0.445069 -0.03125 0.210938\nv 0.493513 -0.03125 0.210938\nv -0.299733 -0.0234375 0.210938\nv -0.259301 -0.0234375 0.210938\nv 0.444293 -0.0234375 0.210938\nv 0.496262 -0.0234375 0.210938\nv -0.300676 -0.015625 0.210938\nv -0.258262 -0.015625 0.210938\nv -0.257812 -0.015625 0.21396\nv 0.443364 -0.015625 0.210938\nv 0.498237 -0.015625 0.210938\nv -0.302754 -0.0078125 0.210938\nv -0.258806 -0.0078125 0.210938\nv -0.257812 -0.0078125 0.218122\nv 0.44185 -0.0078125 0.210938\nv 0.499087 -0.0078125 0.210938\nv -0.303442 0 0.210938\nv -0.259285 0 0.210938\nv 0.440205 0 0.210938\nv 0.498816 0 0.210938\nv -0.302699 0.0078125 0.210938\nv -0.258286 0.0078125 0.210938\nv -0.257812 0.00909924 0.210938\nv -0.257812 0.0078125 0.214936\nv 0.440106 0.0078125 0.210938\nv 0.498323 0.0078125 0.210938\nv -0.301447 0.015625 0.210938\nv -0.253975 0.015625 0.210938\nv -0.25 0.0193742 0.210938\nv -0.242188 0.0218972 0.210938\nv -0.234375 0.0227507 0.210938\nv 0.439254 0.015625 0.210938\nv 0.4375 0.0180551 0.210938\nv 0.498458 0.015625 0.210938\nv -0.300403 0.0234375 0.210938\nv -0.23193 0.0234375 0.210938\nv -0.226562 0.0245381 0.210938\nv -0.21875 0.0270489 0.210938\nv -0.210938 0.0288648 0.210938\nv -0.203125 0.029568 0.210938\nv -0.195312 0.0298793 0.210938\nv -0.1875 0.0299939 0.210938\nv -0.179688 0.0293702 0.210938\nv -0.171875 0.028346 0.210938\nv -0.164062 0.0276088 0.210938\nv -0.15625 0.0272943 0.210938\nv -0.148438 0.0272434 0.210938\nv -0.140625 0.0271603 0.210938\nv -0.132812 0.0272082 0.210938\nv -0.125 0.0273155 0.210938\nv -0.117188 0.0274017 0.210938\nv -0.109375 0.0274285 0.210938\nv -0.101562 0.0273496 0.210938\nv -0.09375 0.0271939 0.210938\nv -0.0859375 0.027007 0.210938\nv -0.078125 0.0268069 0.210938\nv -0.0703125 0.0265539 0.210938\nv -0.0625 0.0263681 0.210938\nv -0.0546875 0.0261695 0.210938\nv -0.046875 0.0259616 0.210938\nv -0.0390625 0.0257414 0.210938\nv -0.03125 0.0255168 0.210938\nv -0.0234375 0.0253356 0.210938\nv -0.015625 0.0252372 0.210938\nv -0.0078125 0.0251551 0.210938\nv 0 0.0250743 0.210938\nv 0.0078125 0.0249165 0.210938\nv 0.015625 0.0248492 0.210938\nv 0.0234375 0.0248691 0.210938\nv 0.03125 0.0248015 0.210938\nv 0.0390625 0.0247333 0.210938\nv 0.046875 0.0247141 0.210938\nv 0.0546875 0.0247078 0.210938\nv 0.0625 0.0246836 0.210938\nv 0.0703125 0.0246705 0.210938\nv 0.078125 0.0246933 0.210938\nv 0.0859375 0.0247086 0.210938\nv 0.09375 0.0246859 0.210938\nv 0.101562 0.0246709 0.210938\nv 0.109375 0.0246811 0.210938\nv 0.117188 0.0246741 0.210938\nv 0.125 0.0246479 0.210938\nv 0.132812 0.024653 0.210938\nv 0.140625 0.0246689 0.210938\nv 0.148438 0.0246976 0.210938\nv 0.15625 0.0247247 0.210938\nv 0.164062 0.0247281 0.210938\nv 0.171875 0.0247206 0.210938\nv 0.179688 0.0247174 0.210938\nv 0.1875 0.0247215 0.210938\nv 0.195312 0.0247166 0.210938\nv 0.203125 0.0247434 0.210938\nv 0.210938 0.0247633 0.210938\nv 0.21875 0.0248367 0.210938\nv 0.226562 0.0249704 0.210938\nv 0.234375 0.0251397 0.210938\nv 0.242188 0.0253668 0.210938\nv 0.25 0.0255102 0.210938\nv 0.257812 0.0256293 0.210938\nv 0.265625 0.0257257 0.210938\nv 0.273438 0.0257772 0.210938\nv 0.28125 0.0258743 0.210938\nv 0.289062 0.0259515 0.210938\nv 0.296875 0.0260513 0.210938\nv 0.304688 0.0261324 0.210938\nv 0.3125 0.0261687 0.210938\nv 0.320312 0.026251 0.210938\nv 0.328125 0.0263477 0.210938\nv 0.335938 0.0264476 0.210938\nv 0.34375 0.0265417 0.210938\nv 0.351562 0.0265964 0.210938\nv 0.359375 0.0267448 0.210938\nv 0.367188 0.0270274 0.210938\nv 0.375 0.027395 0.210938\nv 0.382812 0.0278637 0.210938\nv 0.390625 0.0280417 0.210938\nv 0.398438 0.0280287 0.210938\nv 0.40625 0.027367 0.210938\nv 0.414062 0.0265444 0.210938\nv 0.421875 0.0253896 0.210938\nv 0.431103 0.0234375 0.210938\nv 0.429688 0.0241729 0.210938\nv 0.498479 0.0234375 0.210938\nv -0.299706 0.03125 0.210938\nv 0.495861 0.03125 0.210938\nv -0.298818 0.0390625 0.210938\nv -0.296875 0.0440732 0.210938\nv 0.492941 0.0390625 0.210938\nv 0.492188 0.0411992 0.210938\nv -0.295511 0.046875 0.210938\nv 0.489988 0.046875 0.210938\nv -0.292852 0.0546875 0.210938\nv 0.476562 0.0601741 0.210938\nv 0.485038 0.0546875 0.210938\nv 0.484375 0.0552175 0.210938\nv -0.290634 0.0625 0.210938\nv -0.289062 0.0652558 0.210938\nv -0.28125 0.0695474 0.210938\nv 0.429688 0.0701523 0.210938\nv 0.4375 0.0697146 0.210938\nv 0.445312 0.0682174 0.210938\nv 0.453125 0.0661689 0.210938\nv 0.460938 0.0648656 0.210938\nv 0.47166 0.0625 0.210938\nv 0.46875 0.0638516 0.210938\nv -0.279205 0.0703125 0.210938\nv -0.273438 0.0724721 0.210938\nv -0.265625 0.0729807 0.210938\nv -0.257812 0.0777477 0.210938\nv -0.226562 0.0780743 0.210938\nv -0.21875 0.0771523 0.210938\nv -0.210938 0.0764625 0.210938\nv -0.203125 0.0762784 0.210938\nv -0.195312 0.0765898 0.210938\nv -0.1875 0.076762 0.210938\nv -0.179688 0.0767058 0.210938\nv -0.171875 0.0761005 0.210938\nv -0.164062 0.075761 0.210938\nv -0.15625 0.0756703 0.210938\nv -0.148438 0.0756666 0.210938\nv -0.140625 0.0756388 0.210938\nv -0.132812 0.0758062 0.210938\nv -0.125 0.0758365 0.210938\nv -0.117188 0.0757664 0.210938\nv -0.109375 0.0755563 0.210938\nv -0.101562 0.0753199 0.210938\nv -0.09375 0.0750574 0.210938\nv -0.0859375 0.0749474 0.210938\nv -0.078125 0.0750244 0.210938\nv -0.0703125 0.0750483 0.210938\nv -0.0625 0.0749705 0.210938\nv -0.0546875 0.074797 0.210938\nv -0.046875 0.0745981 0.210938\nv -0.0390625 0.0743965 0.210938\nv -0.03125 0.074238 0.210938\nv -0.0234375 0.0741473 0.210938\nv -0.015625 0.0741405 0.210938\nv -0.0078125 0.0741808 0.210938\nv 0 0.0740951 0.210938\nv 0.0078125 0.0739056 0.210938\nv 0.015625 0.0737312 0.210938\nv 0.0234375 0.0735739 0.210938\nv 0.03125 0.0734969 0.210938\nv 0.0390625 0.0733813 0.210938\nv 0.046875 0.0732472 0.210938\nv 0.0546875 0.0731551 0.210938\nv 0.0625 0.0730157 0.210938\nv 0.0703125 0.0728898 0.210938\nv 0.078125 0.0727804 0.210938\nv 0.0859375 0.0726786 0.210938\nv 0.09375 0.0725929 0.210938\nv 0.101562 0.0725324 0.210938\nv 0.109375 0.0724834 0.210938\nv 0.117188 0.0724542 0.210938\nv 0.125 0.0724025 0.210938\nv 0.132812 0.0723166 0.210938\nv 0.140625 0.0722658 0.210938\nv 0.148438 0.0722073 0.210938\nv 0.15625 0.0721769 0.210938\nv 0.164062 0.0722402 0.210938\nv 0.171875 0.0722467 0.210938\nv 0.179688 0.0722022 0.210938\nv 0.1875 0.0721605 0.210938\nv 0.195312 0.0721278 0.210938\nv 0.203125 0.0721251 0.210938\nv 0.210938 0.0722026 0.210938\nv 0.21875 0.0723865 0.210938\nv 0.226562 0.0725505 0.210938\nv 0.234375 0.0726114 0.210938\nv 0.242188 0.0726342 0.210938\nv 0.25 0.0725854 0.210938\nv 0.257812 0.0725903 0.210938\nv 0.265625 0.0726502 0.210938\nv 0.273438 0.0727306 0.210938\nv 0.28125 0.0727562 0.210938\nv 0.289062 0.0727977 0.210938\nv 0.296875 0.0728221 0.210938\nv 0.304688 0.0728645 0.210938\nv 0.3125 0.0728903 0.210938\nv 0.320312 0.0728978 0.210938\nv 0.328125 0.0728673 0.210938\nv 0.335938 0.0728719 0.210938\nv 0.34375 0.0729682 0.210938\nv 0.351562 0.0730543 0.210938\nv 0.359375 0.0729117 0.210938\nv 0.367188 0.072805 0.210938\nv 0.375 0.0727455 0.210938\nv 0.382812 0.0724736 0.210938\nv 0.390625 0.0720814 0.210938\nv 0.398438 0.0719488 0.210938\nv 0.40625 0.0717531 0.210938\nv 0.414062 0.0713774 0.210938\nv 0.427911 0.0703125 0.210938\nv 0.421875 0.0708292 0.210938\nv -0.257277 0.078125 0.210938\nv -0.257812 0.078125 0.213001\nv -0.25 0.0827966 0.210938\nv -0.242188 0.081699 0.210938\nv -0.226987 0.078125 0.210938\nv -0.234375 0.0793812 0.210938\nv -0.226562 0.078125 0.21204\nv -0.28125 0.177374 0.210938\nv -0.273438 0.175059 0.210938\nv -0.273438 0.171875 0.218573\nv -0.265625 0.175624 0.210938\nv -0.257812 0.177854 0.210938\nv -0.284947 0.179688 0.210938\nv -0.289062 0.1847 0.210938\nv -0.25661 0.179688 0.210938\nv -0.291039 0.1875 0.210938\nv -0.250738 0.1875 0.210938\nv -0.25 0.188359 0.210938\nv -0.294355 0.195312 0.210938\nv -0.296875 0.20169 0.210938\nv -0.246383 0.195312 0.210938\nv -0.297318 0.203125 0.210938\nv -0.243871 0.203125 0.210938\nv -0.299056 0.210938 0.210938\nv -0.243285 0.210938 0.210938\nv -0.300377 0.21875 0.210938\nv -0.24344 0.21875 0.210938\nv -0.301322 0.226562 0.210938\nv -0.243112 0.226562 0.210938\nv -0.301685 0.234375 0.210938\nv -0.242728 0.234375 0.210938\nv -0.242188 0.240682 0.210938\nv -0.242188 0.234375 0.218016\nv -0.301881 0.242188 0.210938\nv -0.242058 0.242188 0.210938\nv -0.301954 0.25 0.210938\nv -0.241683 0.25 0.210938\nv -0.242188 0.257778 0.210938\nv -0.301406 0.257812 0.210938\nv -0.24219 0.257812 0.210938\nv -0.242188 0.257812 0.210967\nv -0.300206 0.265625 0.210938\nv -0.242541 0.265625 0.210938\nv -0.242188 0.265625 0.215178\nv -0.2986 0.273438 0.210938\nv -0.296875 0.278517 0.210938\nv -0.243119 0.273438 0.210938\nv -0.295972 0.28125 0.210938\nv -0.244698 0.28125 0.210938\nv -0.292478 0.289062 0.210938\nv -0.247227 0.289062 0.210938\nv -0.25 0.292434 0.210938\nv -0.289332 0.296875 0.210938\nv -0.289062 0.297432 0.210938\nv -0.253746 0.296875 0.210938\nv -0.257812 0.30217 0.210938\nv -0.284825 0.304688 0.210938\nv -0.28125 0.309154 0.210938\nv -0.273438 0.311503 0.210938\nv -0.260242 0.304688 0.210938\nv -0.265625 0.309317 0.210938\nv -0.257812 0.304688 0.216432\nv -0.273438 0.3125 0.215694\nv -0.304688 0.632499 0.210938\nv -0.296875 0.630383 0.210938\nv -0.289062 0.630623 0.210938\nv -0.305088 0.632812 0.210938\nv -0.3125 0.639755 0.210938\nv -0.28692 0.632812 0.210938\nv -0.313167 0.640625 0.210938\nv -0.3125 0.640625 0.217707\nv -0.281378 0.640625 0.210938\nv -0.28125 0.64087 0.210938\nv -0.315838 0.648438 0.210938\nv -0.27842 0.648438 0.210938\nv -0.3173 0.65625 0.210938\nv -0.276401 0.65625 0.210938\nv -0.318002 0.664062 0.210938\nv -0.275019 0.664062 0.210938\nv -0.318806 0.671875 0.210938\nv -0.274806 0.671875 0.210938\nv -0.319337 0.679688 0.210938\nv -0.274902 0.679688 0.210938\nv -0.319575 0.6875 0.210938\nv -0.274885 0.6875 0.210938\nv -0.319709 0.695312 0.210938\nv -0.275076 0.695312 0.210938\nv -0.319505 0.703125 0.210938\nv -0.275332 0.703125 0.210938\nv -0.3192 0.710938 0.210938\nv -0.276436 0.710938 0.210938\nv -0.318895 0.71875 0.210938\nv -0.278036 0.71875 0.210938\nv -0.319157 0.726562 0.210938\nv -0.280232 0.726562 0.210938\nv -0.28125 0.730725 0.210938\nv -0.319439 0.734375 0.210938\nv -0.28205 0.734375 0.210938\nv -0.320147 0.742188 0.210938\nv -0.320312 0.743499 0.210938\nv -0.284194 0.742188 0.210938\nv -0.321081 0.75 0.210938\nv -0.286558 0.75 0.210938\nv -0.289062 0.75718 0.210938\nv -0.321267 0.757812 0.210938\nv -0.289329 0.757812 0.210938\nv -0.321268 0.765625 0.210938\nv -0.320312 0.768541 0.210938\nv -0.320312 0.765625 0.216731\nv -0.29437 0.765625 0.210938\nv -0.296875 0.768886 0.210938\nv -0.317971 0.773438 0.210938\nv -0.3125 0.780358 0.210938\nv -0.302115 0.773438 0.210938\nv -0.304688 0.775708 0.210938\nv 0.0078125 -0.539584 0.21875\nv 0.015625 -0.541732 0.21875\nv 0.0234375 -0.543368 0.21875\nv 0.03125 -0.543905 0.21875\nv 0.0390625 -0.543364 0.21875\nv 0.046875 -0.542557 0.21875\nv 0.0546875 -0.541563 0.21875\nv 0.0625 -0.540101 0.21875\nv 0.00644764 -0.539062 0.21875\nv 0 -0.534685 0.21875\nv 0.0078125 -0.539062 0.22557\nv 0.0668353 -0.539062 0.21875\nv 0.0703125 -0.537869 0.21875\nv 0.078125 -0.534644 0.21875\nv 0.0859375 -0.531288 0.21875\nv -0.00401552 -0.53125 0.21875\nv -0.0078125 -0.528536 0.21875\nv 0.0859987 -0.53125 0.21875\nv 0.0859375 -0.53125 0.219185\nv 0.09375 -0.526308 0.21875\nv -0.0146316 -0.523438 0.21875\nv -0.015625 -0.521154 0.21875\nv 0.0976338 -0.523438 0.21875\nv 0.101562 -0.519304 0.21875\nv -0.0174966 -0.515625 0.21875\nv 0.104733 -0.515625 0.21875\nv 0.109375 -0.508957 0.21875\nv -0.0170164 -0.507812 0.21875\nv -0.015625 -0.506699 0.21875\nv -0.0078125 -0.50151 0.21875\nv 0.110148 -0.507812 0.21875\nv 0.109375 -0.506098 0.21875\nv -0.00490401 -0.5 0.21875\nv 0 -0.498372 0.21875\nv 0.0078125 -0.496694 0.21875\nv 0.015625 -0.495035 0.21875\nv 0.0234375 -0.493298 0.21875\nv 0.09375 -0.492888 0.21875\nv 0.104108 -0.5 0.21875\nv 0.101562 -0.497908 0.21875\nv 0.0289696 -0.492188 0.21875\nv 0.03125 -0.491764 0.21875\nv 0.03125 -0.492188 0.221571\nv 0.0390625 -0.490839 0.21875\nv 0.046875 -0.490011 0.21875\nv 0.0546875 -0.48941 0.21875\nv 0.0625 -0.488904 0.21875\nv 0.0703125 -0.488666 0.21875\nv 0.078125 -0.488822 0.21875\nv 0.0920897 -0.492188 0.21875\nv 0.0859375 -0.49002 0.21875\nv 0.453125 -0.0656717 0.21875\nv 0.460938 -0.0665468 0.21875\nv 0.46875 -0.0637667 0.21875\nv 0.476562 -0.0628502 0.21875\nv -0.289062 -0.0553868 0.21875\nv -0.28125 -0.0570482 0.21875\nv -0.273438 -0.0551704 0.21875\nv 0.447229 -0.0625 0.21875\nv 0.445312 -0.0551104 0.21875\nv 0.478296 -0.0625 0.21875\nv 0.484375 -0.0595945 0.21875\nv -0.290003 -0.0546875 0.21875\nv -0.272856 -0.0546875 0.21875\nv -0.265625 -0.0481564 0.21875\nv 0.445268 -0.0546875 0.21875\nv 0.488068 -0.0546875 0.21875\nv -0.296659 -0.046875 0.21875\nv -0.296875 -0.0465394 0.21875\nv -0.296875 -0.046875 0.22573\nv -0.265 -0.046875 0.21875\nv 0.444653 -0.046875 0.21875\nv 0.49083 -0.046875 0.21875\nv 0.492188 -0.0406055 0.21875\nv -0.299583 -0.0390625 0.21875\nv -0.262033 -0.0390625 0.21875\nv 0.444367 -0.0390625 0.21875\nv 0.49249 -0.0390625 0.21875\nv -0.300719 -0.03125 0.21875\nv -0.260205 -0.03125 0.21875\nv 0.444246 -0.03125 0.21875\nv 0.493496 -0.03125 0.21875\nv -0.300599 -0.0234375 0.21875\nv -0.257905 -0.0234375 0.21875\nv -0.257812 -0.0224414 0.21875\nv -0.257812 -0.0234375 0.219377\nv 0.443738 -0.0234375 0.21875\nv 0.496201 -0.0234375 0.21875\nv -0.301558 -0.015625 0.21875\nv -0.257373 -0.015625 0.21875\nv 0.442984 -0.015625 0.21875\nv 0.498363 -0.015625 0.21875\nv -0.303503 -0.0078125 0.21875\nv -0.257739 -0.0078125 0.21875\nv -0.257812 -0.00679031 0.21875\nv 0.44159 -0.0078125 0.21875\nv 0.499018 -0.0078125 0.21875\nv -0.304174 0 0.21875\nv -0.304688 0 0.224098\nv -0.258391 0 0.21875\nv -0.257812 0.004586 0.21875\nv 0.439986 0 0.21875\nv 0.498678 0 0.21875\nv -0.30327 0.0078125 0.21875\nv -0.257307 0.0078125 0.21875\nv 0.439507 0.0078125 0.21875\nv 0.498208 0.0078125 0.21875\nv -0.301896 0.015625 0.21875\nv -0.252006 0.015625 0.21875\nv -0.25 0.0175946 0.21875\nv -0.25 0.015625 0.226196\nv -0.242188 0.0211036 0.21875\nv -0.234375 0.0221838 0.21875\nv 0.438448 0.015625 0.21875\nv 0.4375 0.0170542 0.21875\nv 0.4375 0.015625 0.225146\nv 0.498312 0.015625 0.21875\nv -0.300824 0.0234375 0.21875\nv -0.229869 0.0234375 0.21875\nv -0.226562 0.0241025 0.21875\nv -0.21875 0.0264947 0.21875\nv -0.210938 0.0284912 0.21875\nv -0.203125 0.0293148 0.21875\nv -0.195312 0.0296856 0.21875\nv -0.1875 0.0298337 0.21875\nv -0.179688 0.0291939 0.21875\nv -0.171875 0.0281857 0.21875\nv -0.164062 0.0274663 0.21875\nv -0.15625 0.0271871 0.21875\nv -0.148438 0.027156 0.21875\nv -0.140625 0.0270695 0.21875\nv -0.132812 0.0271034 0.21875\nv -0.125 0.0271847 0.21875\nv -0.117188 0.027293 0.21875\nv -0.109375 0.0273978 0.21875\nv -0.101562 0.0273317 0.21875\nv -0.09375 0.0272158 0.21875\nv -0.0859375 0.0270985 0.21875\nv -0.078125 0.0269042 0.21875\nv -0.0703125 0.0266923 0.21875\nv -0.0625 0.0264661 0.21875\nv -0.0546875 0.0261616 0.21875\nv -0.046875 0.025891 0.21875\nv -0.0390625 0.0256176 0.21875\nv -0.03125 0.0253878 0.21875\nv -0.0234375 0.0252818 0.21875\nv -0.015625 0.0251418 0.21875\nv -0.0078125 0.0250519 0.21875\nv 0 0.0249851 0.21875\nv 0.0078125 0.0248465 0.21875\nv 0.015625 0.0248308 0.21875\nv 0.0234375 0.0248947 0.21875\nv 0.03125 0.0249115 0.21875\nv 0.0390625 0.0248755 0.21875\nv 0.046875 0.0248759 0.21875\nv 0.0546875 0.0248939 0.21875\nv 0.0625 0.0248985 0.21875\nv 0.0703125 0.0248952 0.21875\nv 0.078125 0.0248999 0.21875\nv 0.0859375 0.0248879 0.21875\nv 0.09375 0.0248589 0.21875\nv 0.101562 0.0248332 0.21875\nv 0.109375 0.0248276 0.21875\nv 0.117188 0.0248066 0.21875\nv 0.125 0.0247959 0.21875\nv 0.132812 0.0247952 0.21875\nv 0.140625 0.0248077 0.21875\nv 0.148438 0.0248328 0.21875\nv 0.15625 0.0248559 0.21875\nv 0.164062 0.0248705 0.21875\nv 0.171875 0.0248699 0.21875\nv 0.179688 0.0248571 0.21875\nv 0.1875 0.0248628 0.21875\nv 0.195312 0.024871 0.21875\nv 0.203125 0.0248794 0.21875\nv 0.210938 0.0249017 0.21875\nv 0.21875 0.0249747 0.21875\nv 0.226562 0.0251129 0.21875\nv 0.234375 0.0252573 0.21875\nv 0.242188 0.0254756 0.21875\nv 0.25 0.0256782 0.21875\nv 0.257812 0.0258095 0.21875\nv 0.265625 0.0259484 0.21875\nv 0.273438 0.0260946 0.21875\nv 0.28125 0.0261902 0.21875\nv 0.289062 0.0262563 0.21875\nv 0.296875 0.0262988 0.21875\nv 0.304688 0.0263004 0.21875\nv 0.3125 0.0262896 0.21875\nv 0.320312 0.0263094 0.21875\nv 0.328125 0.026401 0.21875\nv 0.335938 0.0265266 0.21875\nv 0.34375 0.0265881 0.21875\nv 0.351562 0.0266394 0.21875\nv 0.359375 0.0268829 0.21875\nv 0.367188 0.0271861 0.21875\nv 0.375 0.0276329 0.21875\nv 0.382812 0.0282959 0.21875\nv 0.390625 0.0283705 0.21875\nv 0.398438 0.0280948 0.21875\nv 0.40625 0.0275656 0.21875\nv 0.414062 0.0267468 0.21875\nv 0.421875 0.0255437 0.21875\nv 0.430747 0.0234375 0.21875\nv 0.429688 0.0240539 0.21875\nv 0.49842 0.0234375 0.21875\nv -0.300016 0.03125 0.21875\nv 0.495961 0.03125 0.21875\nv -0.299013 0.0390625 0.21875\nv -0.296875 0.0445917 0.21875\nv 0.493033 0.0390625 0.21875\nv 0.492188 0.0414793 0.21875\nv -0.295719 0.046875 0.21875\nv 0.490112 0.046875 0.21875\nv -0.293003 0.0546875 0.21875\nv 0.476562 0.0600982 0.21875\nv 0.484859 0.0546875 0.21875\nv 0.484375 0.0550694 0.21875\nv -0.29069 0.0625 0.21875\nv -0.289062 0.0653323 0.21875\nv -0.28125 0.0694349 0.21875\nv 0.429688 0.0699706 0.21875\nv 0.4375 0.0695639 0.21875\nv 0.445312 0.0681602 0.21875\nv 0.453125 0.066078 0.21875\nv 0.460938 0.0647308 0.21875\nv 0.471552 0.0625 0.21875\nv 0.46875 0.063799 0.21875\nv -0.279272 0.0703125 0.21875\nv -0.273438 0.0729297 0.21875\nv -0.265625 0.0743039 0.21875\nv -0.21875 0.0773653 0.21875\nv -0.210938 0.0767508 0.21875\nv -0.203125 0.0764359 0.21875\nv -0.195312 0.076798 0.21875\nv -0.1875 0.0769813 0.21875\nv -0.179688 0.0770074 0.21875\nv -0.171875 0.076369 0.21875\nv -0.164062 0.0759239 0.21875\nv -0.15625 0.0758239 0.21875\nv -0.148438 0.0757568 0.21875\nv -0.140625 0.0757225 0.21875\nv -0.132812 0.0759538 0.21875\nv -0.125 0.0759338 0.21875\nv -0.117188 0.075806 0.21875\nv -0.109375 0.0755953 0.21875\nv -0.101562 0.0753671 0.21875\nv -0.09375 0.0751571 0.21875\nv -0.0859375 0.0751085 0.21875\nv -0.078125 0.0751394 0.21875\nv -0.0703125 0.0751439 0.21875\nv -0.0625 0.0750559 0.21875\nv -0.0546875 0.0748698 0.21875\nv -0.046875 0.0746639 0.21875\nv -0.0390625 0.074451 0.21875\nv -0.03125 0.0742627 0.21875\nv -0.0234375 0.0741294 0.21875\nv -0.015625 0.0740486 0.21875\nv -0.0078125 0.0740881 0.21875\nv 0 0.074071 0.21875\nv 0.0078125 0.0738948 0.21875\nv 0.015625 0.0737143 0.21875\nv 0.0234375 0.0736063 0.21875\nv 0.03125 0.0734982 0.21875\nv 0.0390625 0.073337 0.21875\nv 0.046875 0.0732088 0.21875\nv 0.0546875 0.0731012 0.21875\nv 0.0625 0.072995 0.21875\nv 0.0703125 0.0728997 0.21875\nv 0.078125 0.072787 0.21875\nv 0.0859375 0.0726979 0.21875\nv 0.09375 0.0726656 0.21875\nv 0.101562 0.0726271 0.21875\nv 0.109375 0.0725558 0.21875\nv 0.117188 0.0725128 0.21875\nv 0.125 0.0724477 0.21875\nv 0.132812 0.0723879 0.21875\nv 0.140625 0.0723447 0.21875\nv 0.148438 0.072314 0.21875\nv 0.15625 0.0723097 0.21875\nv 0.164062 0.0723284 0.21875\nv 0.171875 0.0724149 0.21875\nv 0.179688 0.0723809 0.21875\nv 0.1875 0.0723401 0.21875\nv 0.195312 0.072314 0.21875\nv 0.203125 0.0722855 0.21875\nv 0.210938 0.0723185 0.21875\nv 0.21875 0.0724281 0.21875\nv 0.226562 0.0725679 0.21875\nv 0.234375 0.0726133 0.21875\nv 0.242188 0.0726312 0.21875\nv 0.25 0.0726398 0.21875\nv 0.257812 0.0725866 0.21875\nv 0.265625 0.0725993 0.21875\nv 0.273438 0.0727353 0.21875\nv 0.28125 0.0728408 0.21875\nv 0.289062 0.0728621 0.21875\nv 0.296875 0.0728931 0.21875\nv 0.304688 0.0729228 0.21875\nv 0.3125 0.0729507 0.21875\nv 0.320312 0.0729388 0.21875\nv 0.328125 0.0729425 0.21875\nv 0.335938 0.072922 0.21875\nv 0.34375 0.0728845 0.21875\nv 0.351562 0.0729093 0.21875\nv 0.359375 0.0728764 0.21875\nv 0.367188 0.0726555 0.21875\nv 0.375 0.072549 0.21875\nv 0.382812 0.0723822 0.21875\nv 0.390625 0.0720077 0.21875\nv 0.398438 0.0718966 0.21875\nv 0.40625 0.0716733 0.21875\nv 0.414062 0.0712275 0.21875\nv 0.425898 0.0703125 0.21875\nv 0.421875 0.0706614 0.21875\nv -0.259419 0.078125 0.21875\nv -0.257812 0.0793 0.21875\nv -0.25 0.0841712 0.21875\nv -0.242188 0.0827656 0.21875\nv -0.234375 0.0802385 0.21875\nv -0.224332 0.078125 0.21875\nv -0.226562 0.078521 0.21875\nv -0.273438 0.171791 0.21875\nv -0.273547 0.171875 0.21875\nv -0.28125 0.175322 0.21875\nv -0.272534 0.171875 0.21875\nv -0.265625 0.172463 0.21875\nv -0.265625 0.171875 0.220738\nv -0.257812 0.174705 0.21875\nv -0.28794 0.179688 0.21875\nv -0.289062 0.181367 0.21875\nv -0.289062 0.179688 0.222652\nv -0.254598 0.179688 0.21875\nv -0.292399 0.1875 0.21875\nv -0.250017 0.1875 0.21875\nv -0.25 0.187522 0.21875\nv -0.25 0.1875 0.21896\nv -0.295168 0.195312 0.21875\nv -0.296875 0.199808 0.21875\nv -0.245924 0.195312 0.21875\nv -0.297892 0.203125 0.21875\nv -0.243439 0.203125 0.21875\nv -0.299616 0.210938 0.21875\nv -0.242716 0.210938 0.21875\nv -0.300942 0.21875 0.21875\nv -0.242836 0.21875 0.21875\nv -0.301734 0.226562 0.21875\nv -0.2424 0.226562 0.21875\nv -0.242188 0.23273 0.21875\nv -0.242188 0.226562 0.221503\nv -0.302022 0.234375 0.21875\nv -0.24213 0.234375 0.21875\nv -0.302233 0.242188 0.21875\nv -0.241413 0.242188 0.21875\nv -0.302255 0.25 0.21875\nv -0.241163 0.25 0.21875\nv -0.301823 0.257812 0.21875\nv -0.241551 0.257812 0.21875\nv -0.300654 0.265625 0.21875\nv -0.24188 0.265625 0.21875\nv -0.242188 0.272855 0.21875\nv -0.299086 0.273438 0.21875\nv -0.296875 0.280259 0.21875\nv -0.242213 0.273438 0.21875\nv -0.242188 0.273438 0.219011\nv -0.296557 0.28125 0.21875\nv -0.296875 0.28125 0.225093\nv -0.243728 0.28125 0.21875\nv -0.293011 0.289062 0.21875\nv -0.245841 0.289062 0.21875\nv -0.25 0.294637 0.21875\nv -0.289984 0.296875 0.21875\nv -0.289062 0.298658 0.21875\nv -0.251734 0.296875 0.21875\nv -0.285638 0.304688 0.21875\nv -0.28125 0.310876 0.21875\nv -0.265625 0.311557 0.21875\nv -0.257105 0.304688 0.21875\nv -0.257812 0.305547 0.21875\nv -0.275661 0.3125 0.21875\nv -0.270059 0.3125 0.21875\nv -0.273438 0.313362 0.21875\nv -0.265625 0.3125 0.224802\nv -0.304688 0.632721 0.21875\nv -0.296875 0.62962 0.21875\nv -0.289062 0.629804 0.21875\nv -0.304782 0.632812 0.21875\nv -0.286508 0.632812 0.21875\nv -0.312378 0.640625 0.21875\nv -0.3125 0.640859 0.21875\nv -0.281622 0.640625 0.21875\nv -0.28125 0.641492 0.21875\nv -0.28125 0.640625 0.221438\nv -0.315605 0.648438 0.21875\nv -0.278931 0.648438 0.21875\nv -0.317042 0.65625 0.21875\nv -0.276386 0.65625 0.21875\nv -0.317718 0.664062 0.21875\nv -0.274677 0.664062 0.21875\nv -0.318587 0.671875 0.21875\nv -0.274343 0.671875 0.21875\nv -0.319126 0.679688 0.21875\nv -0.274383 0.679688 0.21875\nv -0.319401 0.6875 0.21875\nv -0.274418 0.6875 0.21875\nv -0.319471 0.695312 0.21875\nv -0.274555 0.695312 0.21875\nv -0.319289 0.703125 0.21875\nv -0.274769 0.703125 0.21875\nv -0.318912 0.710938 0.21875\nv -0.276042 0.710938 0.21875\nv -0.318674 0.71875 0.21875\nv -0.27757 0.71875 0.21875\nv -0.318933 0.726562 0.21875\nv -0.279934 0.726562 0.21875\nv -0.28125 0.731453 0.21875\nv -0.319277 0.734375 0.21875\nv -0.281905 0.734375 0.21875\nv -0.319899 0.742188 0.21875\nv -0.320312 0.745753 0.21875\nv -0.284248 0.742188 0.21875\nv -0.320766 0.75 0.21875\nv -0.286729 0.75 0.21875\nv -0.289062 0.755468 0.21875\nv -0.320689 0.757812 0.21875\nv -0.320312 0.762205 0.21875\nv -0.320312 0.757812 0.223812\nv -0.29019 0.757812 0.21875\nv -0.319869 0.765625 0.21875\nv -0.295798 0.765625 0.21875\nv -0.296875 0.767068 0.21875\nv -0.31545 0.773438 0.21875\nv -0.3125 0.777589 0.21875\nv -0.304169 0.773438 0.21875\nv -0.304688 0.77391 0.21875\nv -0.304688 0.773438 0.223431\nv 0.015625 -0.54141 0.226562\nv 0.0234375 -0.542876 0.226562\nv 0.03125 -0.542981 0.226562\nv 0.0390625 -0.542456 0.226562\nv 0.046875 -0.541688 0.226562\nv 0.0546875 -0.5408 0.226562\nv 0.0625 -0.53938 0.226562\nv 0 -0.534197 0.226562\nv 0.00806721 -0.539062 0.226562\nv 0.0078125 -0.538943 0.226562\nv 0.0078125 -0.539062 0.226909\nv 0.063744 -0.539062 0.226562\nv 0.0703125 -0.536797 0.226562\nv 0.078125 -0.533711 0.226562\nv -0.00365425 -0.53125 0.226562\nv -0.0078125 -0.528354 0.226562\nv 0.0837658 -0.53125 0.226562\nv 0.0859375 -0.530212 0.226562\nv 0.09375 -0.525176 0.226562\nv -0.0149599 -0.523438 0.226562\nv -0.015625 -0.521874 0.226562\nv -0.015625 -0.523438 0.227728\nv 0.0960075 -0.523438 0.226562\nv 0.101562 -0.517447 0.226562\nv -0.0181372 -0.515625 0.226562\nv 0.103251 -0.515625 0.226562\nv 0.109375 -0.507819 0.226562\nv -0.0176905 -0.507812 0.226562\nv -0.015625 -0.506459 0.226562\nv -0.0078125 -0.501058 0.226562\nv 0.10938 -0.507812 0.226562\nv 0.109375 -0.507801 0.226562\nv 0.109375 -0.507812 0.227572\nv -0.00573824 -0.5 0.226562\nv -0.0078125 -0.5 0.229982\nv 0 -0.498152 0.226562\nv 0.0078125 -0.496561 0.226562\nv 0.015625 -0.495032 0.226562\nv 0.0234375 -0.493772 0.226562\nv 0.03125 -0.492967 0.226562\nv 0.09375 -0.493827 0.226562\nv 0.102699 -0.5 0.226562\nv 0.101562 -0.499099 0.226562\nv 0.0370459 -0.492188 0.226562\nv 0.0390625 -0.491932 0.226562\nv 0.046875 -0.490949 0.226562\nv 0.0546875 -0.49035 0.226562\nv 0.0625 -0.490066 0.226562\nv 0.0703125 -0.489911 0.226562\nv 0.078125 -0.489849 0.226562\nv 0.0902509 -0.492188 0.226562\nv 0.0859375 -0.490723 0.226562\nv 0.453125 -0.0651985 0.226562\nv 0.460938 -0.06598 0.226562\nv 0.46875 -0.0638224 0.226562\nv 0.476562 -0.0629036 0.226562\nv -0.289062 -0.0554378 0.226562\nv -0.28125 -0.0570997 0.226562\nv -0.273438 -0.0551074 0.226562\nv 0.447061 -0.0625 0.226562\nv 0.445312 -0.0597934 0.226562\nv 0.47861 -0.0625 0.226562\nv 0.484375 -0.0596879 0.226562\nv -0.290118 -0.0546875 0.226562\nv -0.296875 -0.046923 0.226562\nv -0.27284 -0.0546875 0.226562\nv -0.265625 -0.0488705 0.226562\nv 0.444171 -0.0546875 0.226562\nv 0.488043 -0.0546875 0.226562\nv -0.296892 -0.046875 0.226562\nv -0.264627 -0.046875 0.226562\nv 0.443479 -0.046875 0.226562\nv 0.490812 -0.046875 0.226562\nv 0.492188 -0.0409011 0.226562\nv -0.300019 -0.0390625 0.226562\nv -0.261333 -0.0390625 0.226562\nv 0.443139 -0.0390625 0.226562\nv 0.492593 -0.0390625 0.226562\nv -0.301284 -0.03125 0.226562\nv -0.259138 -0.03125 0.226562\nv -0.257812 -0.0266139 0.226562\nv 0.443297 -0.03125 0.226562\nv 0.494034 -0.03125 0.226562\nv -0.3014 -0.0234375 0.226562\nv -0.257162 -0.0234375 0.226562\nv 0.442943 -0.0234375 0.226562\nv 0.496698 -0.0234375 0.226562\nv -0.302353 -0.015625 0.226562\nv -0.256841 -0.015625 0.226562\nv 0.442584 -0.015625 0.226562\nv 0.498583 -0.015625 0.226562\nv -0.304219 -0.0078125 0.226562\nv -0.304688 -0.00262434 0.226562\nv -0.304688 -0.0078125 0.231978\nv -0.257278 -0.0078125 0.226562\nv -0.257812 -0.00138523 0.226562\nv 0.441332 -0.0078125 0.226562\nv 0.499084 -0.0078125 0.226562\nv -0.304868 0 0.226562\nv -0.304688 0.00152516 0.226562\nv -0.257943 0 0.226562\nv -0.257812 0.000963632 0.226562\nv -0.257812 0 0.229111\nv 0.439585 0 0.226562\nv 0.498801 0 0.226562\nv -0.303848 0.0078125 0.226562\nv -0.256511 0.0078125 0.226562\nv -0.25 0.0155325 0.226562\nv 0.438804 0.0078125 0.226562\nv 0.4375 0.0145666 0.226562\nv 0.498356 0.0078125 0.226562\nv -0.302397 0.015625 0.226562\nv -0.249881 0.015625 0.226562\nv -0.242188 0.0200354 0.226562\nv -0.234375 0.0215341 0.226562\nv 0.437217 0.015625 0.226562\nv 0.49837 0.015625 0.226562\nv -0.301346 0.0234375 0.226562\nv -0.227565 0.0234375 0.226562\nv -0.226562 0.0236404 0.226562\nv -0.226562 0.0234375 0.230021\nv -0.21875 0.0259073 0.226562\nv -0.210938 0.0280243 0.226562\nv -0.203125 0.029117 0.226562\nv -0.195312 0.029507 0.226562\nv -0.1875 0.029716 0.226562\nv -0.179688 0.0290001 0.226562\nv -0.171875 0.0280637 0.226562\nv -0.164062 0.0274184 0.226562\nv -0.15625 0.0271363 0.226562\nv -0.148438 0.0270903 0.226562\nv -0.140625 0.0270266 0.226562\nv -0.132812 0.0270296 0.226562\nv -0.125 0.0271314 0.226562\nv -0.117188 0.0272463 0.226562\nv -0.109375 0.0273478 0.226562\nv -0.101562 0.0273417 0.226562\nv -0.09375 0.0272189 0.226562\nv -0.0859375 0.0270858 0.226562\nv -0.078125 0.0269043 0.226562\nv -0.0703125 0.0266971 0.226562\nv -0.0625 0.0264798 0.226562\nv -0.0546875 0.0261929 0.226562\nv -0.046875 0.025928 0.226562\nv -0.0390625 0.0256686 0.226562\nv -0.03125 0.0254737 0.226562\nv -0.0234375 0.0253267 0.226562\nv -0.015625 0.0251701 0.226562\nv -0.0078125 0.0250645 0.226562\nv 0 0.0250202 0.226562\nv 0.0078125 0.0249261 0.226562\nv 0.015625 0.0249293 0.226562\nv 0.0234375 0.0250051 0.226562\nv 0.03125 0.0250592 0.226562\nv 0.0390625 0.0250489 0.226562\nv 0.046875 0.0250334 0.226562\nv 0.0546875 0.0250397 0.226562\nv 0.0625 0.0250485 0.226562\nv 0.0703125 0.0250713 0.226562\nv 0.078125 0.0250936 0.226562\nv 0.0859375 0.0250765 0.226562\nv 0.09375 0.0250338 0.226562\nv 0.101562 0.0249971 0.226562\nv 0.109375 0.0249658 0.226562\nv 0.117188 0.024942 0.226562\nv 0.125 0.0249329 0.226562\nv 0.132812 0.0249231 0.226562\nv 0.140625 0.0249232 0.226562\nv 0.148438 0.0248937 0.226562\nv 0.15625 0.0248909 0.226562\nv 0.164062 0.0249282 0.226562\nv 0.171875 0.0249201 0.226562\nv 0.179688 0.024927 0.226562\nv 0.1875 0.024936 0.226562\nv 0.195312 0.0249349 0.226562\nv 0.203125 0.0249323 0.226562\nv 0.210938 0.0249388 0.226562\nv 0.21875 0.0250426 0.226562\nv 0.226562 0.025209 0.226562\nv 0.234375 0.0253576 0.226562\nv 0.242188 0.0255418 0.226562\nv 0.25 0.0257758 0.226562\nv 0.257812 0.0260026 0.226562\nv 0.265625 0.0261453 0.226562\nv 0.273438 0.02632 0.226562\nv 0.28125 0.0264765 0.226562\nv 0.289062 0.0265262 0.226562\nv 0.296875 0.0264666 0.226562\nv 0.304688 0.0264257 0.226562\nv 0.3125 0.0264281 0.226562\nv 0.320312 0.0264177 0.226562\nv 0.328125 0.0264705 0.226562\nv 0.335938 0.0265384 0.226562\nv 0.34375 0.0265866 0.226562\nv 0.351562 0.0266519 0.226562\nv 0.359375 0.0268893 0.226562\nv 0.367188 0.0272423 0.226562\nv 0.375 0.0278614 0.226562\nv 0.382812 0.0285836 0.226562\nv 0.390625 0.0286202 0.226562\nv 0.398438 0.0279518 0.226562\nv 0.40625 0.027325 0.226562\nv 0.414062 0.026576 0.226562\nv 0.421875 0.0252663 0.226562\nv 0.429828 0.0234375 0.226562\nv 0.429688 0.0235261 0.226562\nv 0.429688 0.0234375 0.228861\nv 0.498433 0.0234375 0.226562\nv -0.300341 0.03125 0.226562\nv 0.496121 0.03125 0.226562\nv -0.299235 0.0390625 0.226562\nv -0.296875 0.0453832 0.226562\nv 0.493166 0.0390625 0.226562\nv 0.492188 0.0416551 0.226562\nv -0.296099 0.046875 0.226562\nv 0.490056 0.046875 0.226562\nv -0.293322 0.0546875 0.226562\nv 0.476562 0.0599473 0.226562\nv 0.48438 0.0546875 0.226562\nv 0.484375 0.0546912 0.226562\nv 0.484375 0.0546875 0.226639\nv -0.291026 0.0625 0.226562\nv -0.289062 0.0656444 0.226562\nv -0.28125 0.0689329 0.226562\nv 0.429688 0.0698134 0.226562\nv 0.4375 0.0695009 0.226562\nv 0.445312 0.06818 0.226562\nv 0.453125 0.066105 0.226562\nv 0.460938 0.0646005 0.226562\nv 0.471575 0.0625 0.226562\nv 0.46875 0.0638307 0.226562\nv -0.278165 0.0703125 0.226562\nv -0.273438 0.0724835 0.226562\nv -0.265625 0.0740748 0.226562\nv -0.21875 0.0777372 0.226562\nv -0.210938 0.0770168 0.226562\nv -0.203125 0.0765389 0.226562\nv -0.195312 0.0769196 0.226562\nv -0.1875 0.0770966 0.226562\nv -0.179688 0.0771707 0.226562\nv -0.171875 0.0765374 0.226562\nv -0.164062 0.0760811 0.226562\nv -0.15625 0.0758442 0.226562\nv -0.148438 0.0757603 0.226562\nv -0.140625 0.075768 0.226562\nv -0.132812 0.0759799 0.226562\nv -0.125 0.0759102 0.226562\nv -0.117188 0.0757334 0.226562\nv -0.109375 0.0755492 0.226562\nv -0.101562 0.0753445 0.226562\nv -0.09375 0.0752066 0.226562\nv -0.0859375 0.0752253 0.226562\nv -0.078125 0.0752861 0.226562\nv -0.0703125 0.0752752 0.226562\nv -0.0625 0.0751513 0.226562\nv -0.0546875 0.0749556 0.226562\nv -0.046875 0.0747543 0.226562\nv -0.0390625 0.0745353 0.226562\nv -0.03125 0.0743341 0.226562\nv -0.0234375 0.0741199 0.226562\nv -0.015625 0.0740046 0.226562\nv -0.0078125 0.0740089 0.226562\nv 0 0.0740057 0.226562\nv 0.0078125 0.0739157 0.226562\nv 0.015625 0.0737835 0.226562\nv 0.0234375 0.073642 0.226562\nv 0.03125 0.0735317 0.226562\nv 0.0390625 0.0733848 0.226562\nv 0.046875 0.0732586 0.226562\nv 0.0546875 0.0731659 0.226562\nv 0.0625 0.0730776 0.226562\nv 0.0703125 0.0729892 0.226562\nv 0.078125 0.0729025 0.226562\nv 0.0859375 0.0728124 0.226562\nv 0.09375 0.0727491 0.226562\nv 0.101562 0.0727007 0.226562\nv 0.109375 0.0726241 0.226562\nv 0.117188 0.0725772 0.226562\nv 0.125 0.0725271 0.226562\nv 0.132812 0.0724909 0.226562\nv 0.140625 0.0724872 0.226562\nv 0.148438 0.0724635 0.226562\nv 0.15625 0.0724464 0.226562\nv 0.164062 0.0724486 0.226562\nv 0.171875 0.0724915 0.226562\nv 0.179688 0.0725566 0.226562\nv 0.1875 0.0725217 0.226562\nv 0.195312 0.0725142 0.226562\nv 0.203125 0.0724831 0.226562\nv 0.210938 0.0724561 0.226562\nv 0.21875 0.0724919 0.226562\nv 0.226562 0.0725698 0.226562\nv 0.234375 0.0726117 0.226562\nv 0.242188 0.072634 0.226562\nv 0.25 0.0726441 0.226562\nv 0.257812 0.0726511 0.226562\nv 0.265625 0.0726271 0.226562\nv 0.273438 0.0727437 0.226562\nv 0.28125 0.0728543 0.226562\nv 0.289062 0.0729838 0.226562\nv 0.296875 0.0730034 0.226562\nv 0.304688 0.0730004 0.226562\nv 0.3125 0.0730064 0.226562\nv 0.320312 0.0729997 0.226562\nv 0.328125 0.0729961 0.226562\nv 0.335938 0.0730024 0.226562\nv 0.34375 0.0729592 0.226562\nv 0.351562 0.0728095 0.226562\nv 0.359375 0.0727205 0.226562\nv 0.367188 0.0725909 0.226562\nv 0.375 0.0722591 0.226562\nv 0.382812 0.0721525 0.226562\nv 0.390625 0.071874 0.226562\nv 0.398438 0.0717571 0.226562\nv 0.40625 0.0715164 0.226562\nv 0.414062 0.071049 0.226562\nv 0.42382 0.0703125 0.226562\nv 0.421875 0.070472 0.226562\nv 0.421875 0.0703125 0.233076\nv -0.259589 0.078125 0.226562\nv -0.257812 0.0795807 0.226562\nv -0.25 0.0857449 0.226562\nv -0.242188 0.0838652 0.226562\nv -0.234375 0.081282 0.226562\nv -0.221251 0.078125 0.226562\nv -0.226562 0.0791904 0.226562\nv -0.21875 0.078125 0.233283\nv -0.273438 0.1698 0.226562\nv -0.265625 0.170262 0.226562\nv -0.289062 0.178837 0.226562\nv -0.277038 0.171875 0.226562\nv -0.28125 0.17348 0.226562\nv -0.28125 0.171875 0.232796\nv -0.260445 0.171875 0.226562\nv -0.257812 0.173127 0.226562\nv -0.289994 0.179688 0.226562\nv -0.254235 0.179688 0.226562\nv -0.25 0.186402 0.226562\nv -0.293328 0.1875 0.226562\nv -0.249441 0.1875 0.226562\nv -0.295928 0.195312 0.226562\nv -0.296875 0.197998 0.226562\nv -0.245215 0.195312 0.226562\nv -0.298358 0.203125 0.226562\nv -0.243002 0.203125 0.226562\nv -0.300071 0.210938 0.226562\nv -0.242337 0.210938 0.226562\nv -0.242188 0.210938 0.234106\nv -0.301411 0.21875 0.226562\nv -0.242257 0.21875 0.226562\nv -0.242188 0.219937 0.226562\nv -0.242188 0.21875 0.227694\nv -0.302179 0.226562 0.226562\nv -0.241792 0.226562 0.226562\nv -0.302453 0.234375 0.226562\nv -0.241468 0.234375 0.226562\nv -0.302702 0.242188 0.226562\nv -0.240695 0.242188 0.226562\nv -0.302709 0.25 0.226562\nv -0.240627 0.25 0.226562\nv -0.30229 0.257812 0.226562\nv -0.240942 0.257812 0.226562\nv -0.301113 0.265625 0.226562\nv -0.240981 0.265625 0.226562\nv -0.299521 0.273438 0.226562\nv -0.241496 0.273438 0.226562\nv -0.242188 0.277207 0.226562\nv -0.29695 0.28125 0.226562\nv -0.296875 0.281423 0.226562\nv -0.243003 0.28125 0.226562\nv -0.293656 0.289062 0.226562\nv -0.245025 0.289062 0.226562\nv -0.25 0.296599 0.226562\nv -0.290446 0.296875 0.226562\nv -0.289062 0.299395 0.226562\nv -0.250195 0.296875 0.226562\nv -0.25 0.296875 0.231297\nv -0.285807 0.304688 0.226562\nv -0.28125 0.311592 0.226562\nv -0.255068 0.304688 0.226562\nv -0.257812 0.307561 0.226562\nv -0.2788 0.3125 0.226562\nv -0.273438 0.314953 0.226562\nv -0.265234 0.3125 0.226562\nv -0.265625 0.312789 0.226562\nv -0.304688 0.632808 0.226562\nv -0.296875 0.627811 0.226562\nv -0.289062 0.62699 0.226562\nv -0.289062 0.625 0.232078\nv -0.304692 0.632812 0.226562\nv -0.284926 0.632812 0.226562\nv -0.28125 0.638998 0.226562\nv -0.311754 0.640625 0.226562\nv -0.3125 0.641813 0.226562\nv -0.280635 0.640625 0.226562\nv -0.315454 0.648438 0.226562\nv -0.278375 0.648438 0.226562\nv -0.316868 0.65625 0.226562\nv -0.275903 0.65625 0.226562\nv -0.31759 0.664062 0.226562\nv -0.274223 0.664062 0.226562\nv -0.318446 0.671875 0.226562\nv -0.273819 0.671875 0.226562\nv -0.273438 0.671875 0.234262\nv -0.319055 0.679688 0.226562\nv -0.273883 0.679688 0.226562\nv -0.319395 0.6875 0.226562\nv -0.274004 0.6875 0.226562\nv -0.319441 0.695312 0.226562\nv -0.274163 0.695312 0.226562\nv -0.319226 0.703125 0.226562\nv -0.27442 0.703125 0.226562\nv -0.318793 0.710938 0.226562\nv -0.275544 0.710938 0.226562\nv -0.318614 0.71875 0.226562\nv -0.27711 0.71875 0.226562\nv -0.319003 0.726562 0.226562\nv -0.279215 0.726562 0.226562\nv -0.28125 0.734009 0.226562\nv -0.319293 0.734375 0.226562\nv -0.281335 0.734375 0.226562\nv -0.28125 0.734375 0.22833\nv -0.319802 0.742188 0.226562\nv -0.320312 0.748346 0.226562\nv -0.283908 0.742188 0.226562\nv -0.32044 0.75 0.226562\nv -0.320312 0.753146 0.226562\nv -0.320312 0.75 0.228514\nv -0.28639 0.75 0.226562\nv -0.289062 0.754894 0.226562\nv -0.320049 0.757812 0.226562\nv -0.290848 0.757812 0.226562\nv -0.317782 0.765625 0.226562\nv -0.304688 0.773107 0.226562\nv -0.29666 0.765625 0.226562\nv -0.296875 0.765914 0.226562\nv -0.313952 0.773438 0.226562\nv -0.305999 0.773438 0.226562\nv -0.3125 0.776023 0.226562\nv 0.0078125 -0.541059 0.234375\nv 0.015625 -0.542996 0.234375\nv 0.0234375 -0.543798 0.234375\nv 0.03125 -0.54377 0.234375\nv 0.0390625 -0.54323 0.234375\nv 0.046875 -0.542359 0.234375\nv 0.0546875 -0.541408 0.234375\nv 0.0625 -0.539782 0.234375\nv 0.0035664 -0.539062 0.234375\nv 0 -0.53665 0.234375\nv 0.0650697 -0.539062 0.234375\nv 0.0703125 -0.537065 0.234375\nv 0.078125 -0.533843 0.234375\nv -0.015625 -0.526051 0.234375\nv -0.00711406 -0.53125 0.234375\nv -0.0078125 -0.530823 0.234375\nv -0.0078125 -0.53125 0.236396\nv 0.0838333 -0.53125 0.234375\nv 0.0859375 -0.530196 0.234375\nv 0.09375 -0.524905 0.234375\nv -0.0195329 -0.523438 0.234375\nv 0.095675 -0.523438 0.234375\nv 0.101562 -0.517072 0.234375\nv -0.0229075 -0.515625 0.234375\nv -0.0234375 -0.515625 0.235385\nv 0.102933 -0.515625 0.234375\nv -0.0227416 -0.507812 0.234375\nv -0.0234375 -0.507812 0.235487\nv -0.015625 -0.503216 0.234375\nv 0.10931 -0.507812 0.234375\nv -0.0102192 -0.5 0.234375\nv -0.0078125 -0.499084 0.234375\nv 0 -0.496846 0.234375\nv 0.0078125 -0.495327 0.234375\nv 0.015625 -0.494402 0.234375\nv 0.0234375 -0.49372 0.234375\nv 0.03125 -0.492881 0.234375\nv 0.09375 -0.493419 0.234375\nv 0.102906 -0.5 0.234375\nv 0.101562 -0.498898 0.234375\nv 0.101562 -0.5 0.238814\nv 0.0364695 -0.492188 0.234375\nv 0.0390625 -0.491855 0.234375\nv 0.0390625 -0.492188 0.237417\nv 0.046875 -0.490839 0.234375\nv 0.0546875 -0.490184 0.234375\nv 0.0625 -0.48985 0.234375\nv 0.0703125 -0.489819 0.234375\nv 0.078125 -0.489931 0.234375\nv 0.0910491 -0.492188 0.234375\nv 0.0859375 -0.490621 0.234375\nv 0.453125 -0.0645597 0.234375\nv 0.460938 -0.0654767 0.234375\nv 0.46875 -0.0640249 0.234375\nv 0.476562 -0.0630683 0.234375\nv -0.289062 -0.0552743 0.234375\nv -0.28125 -0.0570573 0.234375\nv -0.273438 -0.0549816 0.234375\nv 0.448298 -0.0625 0.234375\nv 0.445312 -0.0586888 0.234375\nv 0.479484 -0.0625 0.234375\nv 0.484375 -0.060058 0.234375\nv -0.289969 -0.0546875 0.234375\nv -0.296875 -0.0478923 0.234375\nv -0.273023 -0.0546875 0.234375\nv -0.265625 -0.049453 0.234375\nv 0.44411 -0.0546875 0.234375\nv 0.488196 -0.0546875 0.234375\nv -0.297252 -0.046875 0.234375\nv -0.264027 -0.046875 0.234375\nv 0.443223 -0.046875 0.234375\nv 0.491044 -0.046875 0.234375\nv 0.492188 -0.0420799 0.234375\nv -0.300597 -0.0390625 0.234375\nv -0.260179 -0.0390625 0.234375\nv 0.442628 -0.0390625 0.234375\nv 0.492896 -0.0390625 0.234375\nv -0.301843 -0.03125 0.234375\nv -0.257909 -0.03125 0.234375\nv -0.257812 -0.0308315 0.234375\nv -0.257812 -0.03125 0.235298\nv 0.44263 -0.03125 0.234375\nv 0.494686 -0.03125 0.234375\nv -0.302096 -0.0234375 0.234375\nv -0.256602 -0.0234375 0.234375\nv 0.442467 -0.0234375 0.234375\nv 0.497177 -0.0234375 0.234375\nv -0.303163 -0.015625 0.234375\nv -0.304688 -0.00869321 0.234375\nv -0.256161 -0.015625 0.234375\nv 0.442588 -0.015625 0.234375\nv 0.49888 -0.015625 0.234375\nv -0.304877 -0.0078125 0.234375\nv -0.256862 -0.0078125 0.234375\nv 0.441363 -0.0078125 0.234375\nv 0.499332 -0.0078125 0.234375\nv -0.305502 0 0.234375\nv -0.304688 0.00682245 0.234375\nv -0.257516 0 0.234375\nv 0.439415 0 0.234375\nv 0.499007 0 0.234375\nv -0.304553 0.0078125 0.234375\nv -0.304688 0.0078125 0.235842\nv -0.255495 0.0078125 0.234375\nv -0.25 0.0139711 0.234375\nv 0.438183 0.0078125 0.234375\nv 0.4375 0.0113551 0.234375\nv 0.4375 0.0078125 0.242101\nv 0.498555 0.0078125 0.234375\nv -0.303081 0.015625 0.234375\nv -0.247763 0.015625 0.234375\nv -0.242188 0.0187858 0.234375\nv -0.234375 0.0209126 0.234375\nv -0.226562 0.0231353 0.234375\nv 0.436292 0.015625 0.234375\nv 0.429688 0.0230887 0.234375\nv 0.498513 0.015625 0.234375\nv -0.301964 0.0234375 0.234375\nv -0.225787 0.0234375 0.234375\nv -0.21875 0.0254118 0.234375\nv -0.210938 0.0274977 0.234375\nv -0.203125 0.028836 0.234375\nv -0.195312 0.0293241 0.234375\nv -0.1875 0.029652 0.234375\nv -0.179688 0.0288849 0.234375\nv -0.171875 0.0281135 0.234375\nv -0.164062 0.0274409 0.234375\nv -0.15625 0.027111 0.234375\nv -0.148438 0.0270798 0.234375\nv -0.140625 0.0270613 0.234375\nv -0.132812 0.027039 0.234375\nv -0.125 0.0271355 0.234375\nv -0.117188 0.0272209 0.234375\nv -0.109375 0.0273045 0.234375\nv -0.101562 0.0273673 0.234375\nv -0.09375 0.0272628 0.234375\nv -0.0859375 0.0271319 0.234375\nv -0.078125 0.0268906 0.234375\nv -0.0703125 0.0266414 0.234375\nv -0.0625 0.026411 0.234375\nv -0.0546875 0.0261609 0.234375\nv -0.046875 0.0259159 0.234375\nv -0.0390625 0.0256964 0.234375\nv -0.03125 0.0255293 0.234375\nv -0.0234375 0.0253955 0.234375\nv -0.015625 0.0252788 0.234375\nv -0.0078125 0.0252075 0.234375\nv 0 0.025155 0.234375\nv 0.0078125 0.0250489 0.234375\nv 0.015625 0.0250572 0.234375\nv 0.0234375 0.0251218 0.234375\nv 0.03125 0.0251739 0.234375\nv 0.0390625 0.0252053 0.234375\nv 0.046875 0.025182 0.234375\nv 0.0546875 0.0251897 0.234375\nv 0.0625 0.0252209 0.234375\nv 0.0703125 0.0252465 0.234375\nv 0.078125 0.0252539 0.234375\nv 0.0859375 0.0252143 0.234375\nv 0.09375 0.0251458 0.234375\nv 0.101562 0.0250896 0.234375\nv 0.109375 0.025049 0.234375\nv 0.117188 0.0249977 0.234375\nv 0.125 0.0249774 0.234375\nv 0.132812 0.0249542 0.234375\nv 0.140625 0.0249682 0.234375\nv 0.148438 0.0249541 0.234375\nv 0.15625 0.0248911 0.234375\nv 0.164062 0.0249036 0.234375\nv 0.171875 0.024975 0.234375\nv 0.179688 0.0250012 0.234375\nv 0.1875 0.0250106 0.234375\nv 0.195312 0.0250125 0.234375\nv 0.203125 0.0250039 0.234375\nv 0.210938 0.0250236 0.234375\nv 0.21875 0.025118 0.234375\nv 0.226562 0.0252901 0.234375\nv 0.234375 0.0254687 0.234375\nv 0.242188 0.0256673 0.234375\nv 0.25 0.0259164 0.234375\nv 0.257812 0.0262071 0.234375\nv 0.265625 0.0264458 0.234375\nv 0.273438 0.0265769 0.234375\nv 0.28125 0.0266851 0.234375\nv 0.289062 0.0266754 0.234375\nv 0.296875 0.0266213 0.234375\nv 0.304688 0.0266016 0.234375\nv 0.3125 0.0265811 0.234375\nv 0.320312 0.0265622 0.234375\nv 0.328125 0.0265511 0.234375\nv 0.335938 0.0265747 0.234375\nv 0.34375 0.0265593 0.234375\nv 0.351562 0.0266725 0.234375\nv 0.359375 0.0269689 0.234375\nv 0.367188 0.027395 0.234375\nv 0.375 0.0281349 0.234375\nv 0.382812 0.0287726 0.234375\nv 0.390625 0.0285481 0.234375\nv 0.398438 0.0278833 0.234375\nv 0.40625 0.0270373 0.234375\nv 0.414062 0.0262907 0.234375\nv 0.428831 0.0234375 0.234375\nv 0.421875 0.0249438 0.234375\nv 0.498515 0.0234375 0.234375\nv -0.300831 0.03125 0.234375\nv 0.496318 0.03125 0.234375\nv -0.299455 0.0390625 0.234375\nv -0.296875 0.0464407 0.234375\nv 0.493343 0.0390625 0.234375\nv 0.492188 0.0418757 0.234375\nv -0.296652 0.046875 0.234375\nv 0.490023 0.046875 0.234375\nv 0.484375 0.0541686 0.234375\nv -0.293843 0.0546875 0.234375\nv 0.483849 0.0546875 0.234375\nv 0.476562 0.0598135 0.234375\nv -0.291303 0.0625 0.234375\nv -0.289062 0.0657493 0.234375\nv -0.28125 0.068739 0.234375\nv 0.421875 0.0702796 0.234375\nv 0.429688 0.0697069 0.234375\nv 0.4375 0.0694298 0.234375\nv 0.445312 0.0682974 0.234375\nv 0.453125 0.0661884 0.234375\nv 0.460938 0.0644835 0.234375\nv 0.471334 0.0625 0.234375\nv 0.46875 0.0637158 0.234375\nv -0.277577 0.0703125 0.234375\nv -0.273438 0.0720747 0.234375\nv -0.265625 0.0737986 0.234375\nv -0.210938 0.0771445 0.234375\nv -0.203125 0.0767056 0.234375\nv -0.195312 0.0770622 0.234375\nv -0.1875 0.0771613 0.234375\nv -0.179688 0.0772726 0.234375\nv -0.171875 0.0766848 0.234375\nv -0.164062 0.0762001 0.234375\nv -0.15625 0.0759391 0.234375\nv -0.148438 0.0757774 0.234375\nv -0.140625 0.0757962 0.234375\nv -0.132812 0.0758382 0.234375\nv -0.125 0.0757739 0.234375\nv -0.117188 0.0756022 0.234375\nv -0.109375 0.0754544 0.234375\nv -0.101562 0.075289 0.234375\nv -0.09375 0.0752552 0.234375\nv -0.0859375 0.0753375 0.234375\nv -0.078125 0.0753919 0.234375\nv -0.0703125 0.0753417 0.234375\nv -0.0625 0.0752374 0.234375\nv -0.0546875 0.0750482 0.234375\nv -0.046875 0.0748229 0.234375\nv -0.0390625 0.0745976 0.234375\nv -0.03125 0.0743952 0.234375\nv -0.0234375 0.0741912 0.234375\nv -0.015625 0.0739747 0.234375\nv -0.0078125 0.073958 0.234375\nv 0 0.0739794 0.234375\nv 0.0078125 0.073942 0.234375\nv 0.015625 0.0738807 0.234375\nv 0.0234375 0.0737765 0.234375\nv 0.03125 0.0737117 0.234375\nv 0.0390625 0.0735665 0.234375\nv 0.046875 0.0734002 0.234375\nv 0.0546875 0.0732633 0.234375\nv 0.0625 0.0731766 0.234375\nv 0.0703125 0.0730701 0.234375\nv 0.078125 0.0729596 0.234375\nv 0.0859375 0.0728759 0.234375\nv 0.09375 0.0728653 0.234375\nv 0.101562 0.0728023 0.234375\nv 0.109375 0.0727203 0.234375\nv 0.117188 0.0726803 0.234375\nv 0.125 0.0726431 0.234375\nv 0.132812 0.0726057 0.234375\nv 0.140625 0.0725873 0.234375\nv 0.148438 0.0725771 0.234375\nv 0.15625 0.0725519 0.234375\nv 0.164062 0.0725628 0.234375\nv 0.171875 0.072585 0.234375\nv 0.179688 0.0726576 0.234375\nv 0.1875 0.0726957 0.234375\nv 0.195312 0.0726867 0.234375\nv 0.203125 0.0726691 0.234375\nv 0.210938 0.0726406 0.234375\nv 0.21875 0.0726072 0.234375\nv 0.226562 0.0726113 0.234375\nv 0.234375 0.0726273 0.234375\nv 0.242188 0.0726362 0.234375\nv 0.25 0.0726628 0.234375\nv 0.257812 0.072691 0.234375\nv 0.265625 0.0727213 0.234375\nv 0.273438 0.0727837 0.234375\nv 0.28125 0.0728944 0.234375\nv 0.289062 0.0729861 0.234375\nv 0.296875 0.0731018 0.234375\nv 0.304688 0.0730969 0.234375\nv 0.3125 0.073073 0.234375\nv 0.320312 0.0730571 0.234375\nv 0.328125 0.0730417 0.234375\nv 0.335938 0.0730542 0.234375\nv 0.34375 0.0730549 0.234375\nv 0.351562 0.0728243 0.234375\nv 0.359375 0.0725913 0.234375\nv 0.367188 0.0724061 0.234375\nv 0.375 0.0721227 0.234375\nv 0.382812 0.0717762 0.234375\nv 0.390625 0.071621 0.234375\nv 0.398438 0.0715472 0.234375\nv 0.40625 0.0712616 0.234375\nv 0.421432 0.0703125 0.234375\nv 0.414062 0.0708313 0.234375\nv -0.25948 0.078125 0.234375\nv -0.257812 0.0794663 0.234375\nv -0.25 0.084725 0.234375\nv -0.242188 0.084706 0.234375\nv -0.234375 0.0825464 0.234375\nv -0.226562 0.080143 0.234375\nv -0.218231 0.078125 0.234375\nv -0.21875 0.0782039 0.234375\nv -0.28125 0.171266 0.234375\nv -0.273438 0.168876 0.234375\nv -0.265625 0.170108 0.234375\nv -0.281901 0.171875 0.234375\nv -0.289062 0.17745 0.234375\nv -0.261187 0.171875 0.234375\nv -0.257812 0.173831 0.234375\nv -0.29126 0.179688 0.234375\nv -0.253929 0.179688 0.234375\nv -0.25 0.184773 0.234375\nv -0.294138 0.1875 0.234375\nv -0.248593 0.1875 0.234375\nv -0.296747 0.195312 0.234375\nv -0.296875 0.19568 0.234375\nv -0.296875 0.195312 0.236264\nv -0.244654 0.195312 0.234375\nv -0.298965 0.203125 0.234375\nv -0.243122 0.203125 0.234375\nv -0.242188 0.210891 0.234375\nv -0.300596 0.210938 0.234375\nv -0.242182 0.210938 0.234375\nv -0.301959 0.21875 0.234375\nv -0.241746 0.21875 0.234375\nv -0.302657 0.226562 0.234375\nv -0.241208 0.226562 0.234375\nv -0.302904 0.234375 0.234375\nv -0.240791 0.234375 0.234375\nv -0.303199 0.242188 0.234375\nv -0.240102 0.242188 0.234375\nv -0.303227 0.25 0.234375\nv -0.240201 0.25 0.234375\nv -0.302696 0.257812 0.234375\nv -0.240381 0.257812 0.234375\nv -0.301513 0.265625 0.234375\nv -0.240381 0.265625 0.234375\nv -0.299744 0.273438 0.234375\nv -0.241094 0.273438 0.234375\nv -0.242188 0.279664 0.234375\nv -0.297134 0.28125 0.234375\nv -0.296875 0.281895 0.234375\nv -0.24251 0.28125 0.234375\nv -0.294036 0.289062 0.234375\nv -0.24489 0.289062 0.234375\nv -0.290678 0.296875 0.234375\nv -0.289062 0.29973 0.234375\nv -0.249856 0.296875 0.234375\nv -0.25 0.297108 0.234375\nv -0.28598 0.304688 0.234375\nv -0.28125 0.312316 0.234375\nv -0.254132 0.304688 0.234375\nv -0.257812 0.308321 0.234375\nv -0.280763 0.3125 0.234375\nv -0.28125 0.3125 0.235692\nv -0.273438 0.315685 0.234375\nv -0.264668 0.3125 0.234375\nv -0.265625 0.313251 0.234375\nv -0.289062 0.624207 0.234375\nv -0.304688 0.632751 0.234375\nv -0.293107 0.625 0.234375\nv -0.296875 0.625682 0.234375\nv -0.296875 0.625 0.236715\nv -0.288411 0.625 0.234375\nv -0.304738 0.632812 0.234375\nv -0.283053 0.632812 0.234375\nv -0.28125 0.636137 0.234375\nv -0.3105 0.640625 0.234375\nv -0.3125 0.643418 0.234375\nv -0.279629 0.640625 0.234375\nv -0.315332 0.648438 0.234375\nv -0.277822 0.648438 0.234375\nv -0.31672 0.65625 0.234375\nv -0.27541 0.65625 0.234375\nv -0.317468 0.664062 0.234375\nv -0.273789 0.664062 0.234375\nv -0.273438 0.671756 0.234375\nv -0.273438 0.664062 0.241541\nv -0.318318 0.671875 0.234375\nv -0.273431 0.671875 0.234375\nv -0.273438 0.673982 0.234375\nv -0.318897 0.679688 0.234375\nv -0.273453 0.679688 0.234375\nv -0.273438 0.679688 0.234632\nv -0.319396 0.6875 0.234375\nv -0.273644 0.6875 0.234375\nv -0.273438 0.6875 0.238648\nv -0.319413 0.695312 0.234375\nv -0.273845 0.695312 0.234375\nv -0.319133 0.703125 0.234375\nv -0.274118 0.703125 0.234375\nv -0.318789 0.710938 0.234375\nv -0.275244 0.710938 0.234375\nv -0.318734 0.71875 0.234375\nv -0.276636 0.71875 0.234375\nv -0.319095 0.726562 0.234375\nv -0.278673 0.726562 0.234375\nv -0.319214 0.734375 0.234375\nv -0.280889 0.734375 0.234375\nv -0.28125 0.735291 0.234375\nv -0.319579 0.742188 0.234375\nv -0.283576 0.742188 0.234375\nv -0.319865 0.75 0.234375\nv -0.286222 0.75 0.234375\nv -0.289062 0.755075 0.234375\nv -0.319027 0.757812 0.234375\nv -0.290821 0.757812 0.234375\nv -0.31629 0.765625 0.234375\nv -0.304688 0.772358 0.234375\nv -0.296862 0.765625 0.234375\nv -0.296875 0.765643 0.234375\nv -0.296875 0.765625 0.234713\nv -0.313091 0.773438 0.234375\nv -0.309497 0.773438 0.234375\nv -0.3125 0.774589 0.234375\nv 0.0078125 -0.54147 0.242188\nv 0.015625 -0.543111 0.242188\nv 0.0234375 -0.543729 0.242188\nv 0.03125 -0.543636 0.242188\nv 0.0390625 -0.542981 0.242188\nv 0.046875 -0.541992 0.242188\nv 0.0546875 -0.54087 0.242188\nv 0.0625 -0.539203 0.242188\nv -0.0078125 -0.532936 0.242188\nv 0.00115919 -0.539062 0.242188\nv 0 -0.53853 0.242188\nv 0.0629843 -0.539062 0.242188\nv 0.0625 -0.539062 0.243024\nv 0.0703125 -0.536439 0.242188\nv 0.078125 -0.53299 0.242188\nv -0.00994742 -0.53125 0.242188\nv -0.015625 -0.528141 0.242188\nv 0.0813728 -0.53125 0.242188\nv 0.0859375 -0.528677 0.242188\nv 0.09375 -0.523875 0.242188\nv -0.0231036 -0.523438 0.242188\nv -0.0234375 -0.522812 0.242188\nv -0.0234375 -0.523438 0.243879\nv 0.0943485 -0.523438 0.242188\nv 0.09375 -0.523438 0.245218\nv 0.101562 -0.515769 0.242188\nv -0.0281287 -0.515625 0.242188\nv 0.101696 -0.515625 0.242188\nv 0.101562 -0.515625 0.242803\nv -0.0293464 -0.507812 0.242188\nv -0.0234375 -0.504947 0.242188\nv -0.015625 -0.50021 0.242188\nv 0.106689 -0.507812 0.242188\nv 0.101562 -0.501145 0.242188\nv -0.0152489 -0.5 0.242188\nv -0.015625 -0.5 0.244875\nv -0.0078125 -0.497282 0.242188\nv 0 -0.495451 0.242188\nv 0.0078125 -0.495027 0.242188\nv 0.015625 -0.494775 0.242188\nv 0.0234375 -0.494491 0.242188\nv 0.03125 -0.493749 0.242188\nv 0.0390625 -0.49272 0.242188\nv 0.100484 -0.5 0.242188\nv 0.09375 -0.49507 0.242188\nv 0.0430761 -0.492188 0.242188\nv 0.046875 -0.491699 0.242188\nv 0.046875 -0.492188 0.246374\nv 0.0546875 -0.491092 0.242188\nv 0.0625 -0.490688 0.242188\nv 0.0703125 -0.490706 0.242188\nv 0.078125 -0.490984 0.242188\nv 0.078125 -0.492188 0.249101\nv 0.0875136 -0.492188 0.242188\nv 0.0859375 -0.491701 0.242188\nv 0.0859375 -0.492188 0.244744\nv 0.453125 -0.0637961 0.242188\nv 0.460938 -0.0648431 0.242188\nv 0.46875 -0.0643595 0.242188\nv 0.476562 -0.0634739 0.242188\nv -0.289062 -0.0551051 0.242188\nv -0.28125 -0.0570858 0.242188\nv -0.273438 -0.0551976 0.242188\nv 0.449892 -0.0625 0.242188\nv 0.445312 -0.0570812 0.242188\nv 0.481618 -0.0625 0.242188\nv 0.484375 -0.061122 0.242188\nv -0.289657 -0.0546875 0.242188\nv -0.296875 -0.0475168 0.242188\nv -0.272698 -0.0546875 0.242188\nv -0.265625 -0.0500437 0.242188\nv 0.444465 -0.0546875 0.242188\nv 0.445312 -0.0546875 0.24842\nv 0.489667 -0.0546875 0.242188\nv -0.297143 -0.046875 0.242188\nv -0.263252 -0.046875 0.242188\nv 0.443156 -0.046875 0.242188\nv 0.492041 -0.046875 0.242188\nv 0.492188 -0.046192 0.242188\nv 0.492188 -0.046875 0.242842\nv -0.300814 -0.0390625 0.242188\nv -0.259001 -0.0390625 0.242188\nv -0.257812 -0.034421 0.242188\nv 0.44253 -0.0390625 0.242188\nv 0.493705 -0.0390625 0.242188\nv -0.302181 -0.03125 0.242188\nv -0.257289 -0.03125 0.242188\nv 0.442311 -0.03125 0.242188\nv 0.495452 -0.03125 0.242188\nv -0.302448 -0.0234375 0.242188\nv -0.255971 -0.0234375 0.242188\nv 0.442189 -0.0234375 0.242188\nv 0.497557 -0.0234375 0.242188\nv -0.303514 -0.015625 0.242188\nv -0.304688 -0.010342 0.242188\nv -0.255414 -0.015625 0.242188\nv 0.44252 -0.015625 0.242188\nv 0.499186 -0.015625 0.242188\nv -0.305234 -0.0078125 0.242188\nv -0.256211 -0.0078125 0.242188\nv 0.441068 -0.0078125 0.242188\nv 0.499608 -0.0078125 0.242188\nv -0.306062 0 0.242188\nv -0.256698 0 0.242188\nv 0.438774 0 0.242188\nv 0.4375 0.00777068 0.242188\nv 0.499243 0 0.242188\nv -0.305164 0.0078125 0.242188\nv -0.304688 0.0104389 0.242188\nv -0.254095 0.0078125 0.242188\nv -0.25 0.0123398 0.242188\nv 0.437491 0.0078125 0.242188\nv 0.498772 0.0078125 0.242188\nv -0.303647 0.015625 0.242188\nv -0.245276 0.015625 0.242188\nv -0.242188 0.0173194 0.242188\nv -0.242188 0.015625 0.249976\nv -0.234375 0.0201352 0.242188\nv -0.226562 0.0224335 0.242188\nv 0.435255 0.015625 0.242188\nv 0.429688 0.0227513 0.242188\nv 0.498661 0.015625 0.242188\nv -0.302341 0.0234375 0.242188\nv -0.223969 0.0234375 0.242188\nv -0.21875 0.0249002 0.242188\nv -0.210938 0.0269239 0.242188\nv -0.203125 0.0283423 0.242188\nv -0.195312 0.0290863 0.242188\nv -0.1875 0.029552 0.242188\nv -0.179688 0.0288939 0.242188\nv -0.171875 0.0282586 0.242188\nv -0.164062 0.0276237 0.242188\nv -0.15625 0.0271938 0.242188\nv -0.148438 0.0271836 0.242188\nv -0.140625 0.027178 0.242188\nv -0.132812 0.0271345 0.242188\nv -0.125 0.0271621 0.242188\nv -0.117188 0.0272384 0.242188\nv -0.109375 0.0273028 0.242188\nv -0.101562 0.0273014 0.242188\nv -0.09375 0.0273082 0.242188\nv -0.0859375 0.027219 0.242188\nv -0.078125 0.0269706 0.242188\nv -0.0703125 0.026675 0.242188\nv -0.0625 0.0264286 0.242188\nv -0.0546875 0.0261653 0.242188\nv -0.046875 0.0259314 0.242188\nv -0.0390625 0.0257013 0.242188\nv -0.03125 0.0255243 0.242188\nv -0.0234375 0.0253914 0.242188\nv -0.015625 0.0252847 0.242188\nv -0.0078125 0.02522 0.242188\nv 0 0.0252174 0.242188\nv 0.0078125 0.025134 0.242188\nv 0.015625 0.0251395 0.242188\nv 0.0234375 0.0251695 0.242188\nv 0.03125 0.0252003 0.242188\nv 0.0390625 0.0252426 0.242188\nv 0.046875 0.0252396 0.242188\nv 0.0546875 0.0252387 0.242188\nv 0.0625 0.0252821 0.242188\nv 0.0703125 0.0253167 0.242188\nv 0.078125 0.0253236 0.242188\nv 0.0859375 0.0252609 0.242188\nv 0.09375 0.0251951 0.242188\nv 0.101562 0.0251611 0.242188\nv 0.109375 0.0251328 0.242188\nv 0.117188 0.0251007 0.242188\nv 0.125 0.0250784 0.242188\nv 0.132812 0.0250403 0.242188\nv 0.140625 0.025041 0.242188\nv 0.148438 0.0250364 0.242188\nv 0.15625 0.0249713 0.242188\nv 0.164062 0.0249307 0.242188\nv 0.171875 0.0249699 0.242188\nv 0.179688 0.025044 0.242188\nv 0.1875 0.0250873 0.242188\nv 0.195312 0.0251193 0.242188\nv 0.203125 0.0251383 0.242188\nv 0.210938 0.0251877 0.242188\nv 0.21875 0.0252683 0.242188\nv 0.226562 0.0254502 0.242188\nv 0.234375 0.0256383 0.242188\nv 0.242188 0.0258847 0.242188\nv 0.25 0.0261766 0.242188\nv 0.257812 0.0264595 0.242188\nv 0.265625 0.0266866 0.242188\nv 0.273438 0.0267958 0.242188\nv 0.28125 0.0267652 0.242188\nv 0.289062 0.0267555 0.242188\nv 0.296875 0.0267536 0.242188\nv 0.304688 0.0267615 0.242188\nv 0.3125 0.0267395 0.242188\nv 0.320312 0.0266953 0.242188\nv 0.328125 0.0266459 0.242188\nv 0.335938 0.0266198 0.242188\nv 0.34375 0.0266262 0.242188\nv 0.351562 0.0268503 0.242188\nv 0.359375 0.0272048 0.242188\nv 0.367188 0.0276481 0.242188\nv 0.375 0.0283517 0.242188\nv 0.382812 0.028776 0.242188\nv 0.390625 0.0282953 0.242188\nv 0.398438 0.0277256 0.242188\nv 0.40625 0.0269614 0.242188\nv 0.414062 0.0260502 0.242188\nv 0.428053 0.0234375 0.242188\nv 0.421875 0.0247521 0.242188\nv 0.498555 0.0234375 0.242188\nv -0.301132 0.03125 0.242188\nv 0.496495 0.03125 0.242188\nv -0.299657 0.0390625 0.242188\nv -0.296875 0.0468436 0.242188\nv 0.493549 0.0390625 0.242188\nv 0.492188 0.042096 0.242188\nv -0.29686 0.046875 0.242188\nv -0.296875 0.046875 0.242392\nv 0.489991 0.046875 0.242188\nv 0.484375 0.0538439 0.242188\nv -0.294209 0.0546875 0.242188\nv 0.483469 0.0546875 0.242188\nv 0.476562 0.0597267 0.242188\nv -0.29143 0.0625 0.242188\nv -0.289062 0.0655397 0.242188\nv -0.28125 0.068629 0.242188\nv 0.421875 0.0700269 0.242188\nv 0.429688 0.0696057 0.242188\nv 0.4375 0.0694 0.242188\nv 0.445312 0.0685061 0.242188\nv 0.453125 0.0662994 0.242188\nv 0.460938 0.0644295 0.242188\nv 0.471139 0.0625 0.242188\nv 0.46875 0.0636063 0.242188\nv -0.276804 0.0703125 0.242188\nv -0.273438 0.0715665 0.242188\nv -0.265625 0.0733378 0.242188\nv -0.210938 0.0773969 0.242188\nv -0.203125 0.0768963 0.242188\nv -0.195312 0.0772175 0.242188\nv -0.1875 0.0773042 0.242188\nv -0.179688 0.0774038 0.242188\nv -0.171875 0.0768472 0.242188\nv -0.164062 0.0763139 0.242188\nv -0.15625 0.0760558 0.242188\nv -0.148438 0.0758328 0.242188\nv -0.140625 0.0756955 0.242188\nv -0.132812 0.0756895 0.242188\nv -0.125 0.0756387 0.242188\nv -0.117188 0.0754885 0.242188\nv -0.109375 0.0753531 0.242188\nv -0.101562 0.0752502 0.242188\nv -0.09375 0.0752862 0.242188\nv -0.0859375 0.0754295 0.242188\nv -0.078125 0.0753884 0.242188\nv -0.0703125 0.0753295 0.242188\nv -0.0625 0.0752517 0.242188\nv -0.0546875 0.0750623 0.242188\nv -0.046875 0.0748677 0.242188\nv -0.0390625 0.0746692 0.242188\nv -0.03125 0.0744404 0.242188\nv -0.0234375 0.0742319 0.242188\nv -0.015625 0.0740506 0.242188\nv -0.0078125 0.0739707 0.242188\nv 0 0.073958 0.242188\nv 0.0078125 0.07394 0.242188\nv 0.015625 0.0739453 0.242188\nv 0.0234375 0.0738552 0.242188\nv 0.03125 0.0737576 0.242188\nv 0.0390625 0.0735966 0.242188\nv 0.046875 0.0734564 0.242188\nv 0.0546875 0.0733212 0.242188\nv 0.0625 0.0732362 0.242188\nv 0.0703125 0.0731347 0.242188\nv 0.078125 0.0730278 0.242188\nv 0.0859375 0.0729619 0.242188\nv 0.09375 0.0729561 0.242188\nv 0.101562 0.0729183 0.242188\nv 0.109375 0.0728431 0.242188\nv 0.117188 0.0727759 0.242188\nv 0.125 0.0727235 0.242188\nv 0.132812 0.0726783 0.242188\nv 0.140625 0.0726593 0.242188\nv 0.148438 0.072662 0.242188\nv 0.15625 0.0726381 0.242188\nv 0.164062 0.0726444 0.242188\nv 0.171875 0.0726977 0.242188\nv 0.179688 0.0727635 0.242188\nv 0.1875 0.072828 0.242188\nv 0.195312 0.0728729 0.242188\nv 0.203125 0.0728575 0.242188\nv 0.210938 0.0728206 0.242188\nv 0.21875 0.0727642 0.242188\nv 0.226562 0.0726991 0.242188\nv 0.234375 0.0726518 0.242188\nv 0.242188 0.0726789 0.242188\nv 0.25 0.0727072 0.242188\nv 0.257812 0.0727494 0.242188\nv 0.265625 0.0727977 0.242188\nv 0.273438 0.0728774 0.242188\nv 0.28125 0.0729203 0.242188\nv 0.289062 0.0730102 0.242188\nv 0.296875 0.0730933 0.242188\nv 0.304688 0.0731609 0.242188\nv 0.3125 0.0731539 0.242188\nv 0.320312 0.0731406 0.242188\nv 0.328125 0.0731195 0.242188\nv 0.335938 0.0731143 0.242188\nv 0.34375 0.0730549 0.242188\nv 0.351562 0.0728284 0.242188\nv 0.359375 0.0725558 0.242188\nv 0.367188 0.0722457 0.242188\nv 0.375 0.0719266 0.242188\nv 0.382812 0.0715769 0.242188\nv 0.390625 0.0712408 0.242188\nv 0.398438 0.071268 0.242188\nv 0.40625 0.0709837 0.242188\nv 0.417796 0.0703125 0.242188\nv 0.414062 0.0705664 0.242188\nv 0.414062 0.0703125 0.248816\nv -0.259389 0.078125 0.242188\nv -0.257812 0.0796076 0.242188\nv -0.25 0.0841256 0.242188\nv -0.242188 0.0854604 0.242188\nv -0.234375 0.0835477 0.242188\nv -0.226562 0.081073 0.242188\nv -0.215225 0.078125 0.242188\nv -0.21875 0.0788167 0.242188\nv -0.28125 0.170707 0.242188\nv -0.273438 0.168385 0.242188\nv -0.265625 0.168971 0.242188\nv -0.282588 0.171875 0.242188\nv -0.289062 0.176565 0.242188\nv -0.259363 0.171875 0.242188\nv -0.257812 0.17264 0.242188\nv -0.257812 0.171875 0.243394\nv -0.292126 0.179688 0.242188\nv -0.252253 0.179688 0.242188\nv -0.25 0.182603 0.242188\nv -0.25 0.179688 0.248108\nv -0.294834 0.1875 0.242188\nv -0.296875 0.194103 0.242188\nv -0.247417 0.1875 0.242188\nv -0.297255 0.195312 0.242188\nv -0.244147 0.195312 0.242188\nv -0.299277 0.203125 0.242188\nv -0.242929 0.203125 0.242188\nv -0.242188 0.207808 0.242188\nv -0.300865 0.210938 0.242188\nv -0.241725 0.210938 0.242188\nv -0.302232 0.21875 0.242188\nv -0.241104 0.21875 0.242188\nv -0.302885 0.226562 0.242188\nv -0.240555 0.226562 0.242188\nv -0.303146 0.234375 0.242188\nv -0.240011 0.234375 0.242188\nv -0.303466 0.242188 0.242188\nv -0.239459 0.242188 0.242188\nv -0.303406 0.25 0.242188\nv -0.239629 0.25 0.242188\nv -0.302778 0.257812 0.242188\nv -0.239877 0.257812 0.242188\nv -0.301611 0.265625 0.242188\nv -0.239957 0.265625 0.242188\nv -0.299662 0.273438 0.242188\nv -0.240857 0.273438 0.242188\nv -0.242188 0.281104 0.242188\nv -0.297055 0.28125 0.242188\nv -0.296875 0.281721 0.242188\nv -0.242219 0.28125 0.242188\nv -0.242188 0.28125 0.244266\nv -0.294202 0.289062 0.242188\nv -0.244933 0.289062 0.242188\nv -0.291113 0.296875 0.242188\nv -0.289062 0.300651 0.242188\nv -0.249463 0.296875 0.242188\nv -0.25 0.297836 0.242188\nv -0.286433 0.304688 0.242188\nv -0.253438 0.304688 0.242188\nv -0.257812 0.309435 0.242188\nv -0.281852 0.3125 0.242188\nv -0.28125 0.313846 0.242188\nv -0.273438 0.317032 0.242188\nv -0.262608 0.3125 0.242188\nv -0.265625 0.314876 0.242188\nv -0.273438 0.320312 0.248143\nv -0.296875 0.623395 0.242188\nv -0.289062 0.620519 0.242188\nv -0.289062 0.617188 0.248087\nv -0.298424 0.625 0.242188\nv -0.304688 0.632637 0.242188\nv -0.285859 0.625 0.242188\nv -0.304809 0.632812 0.242188\nv -0.282417 0.632812 0.242188\nv -0.28125 0.635079 0.242188\nv -0.28125 0.632812 0.247278\nv -0.309887 0.640625 0.242188\nv -0.3125 0.644157 0.242188\nv -0.278984 0.640625 0.242188\nv -0.315276 0.648438 0.242188\nv -0.277221 0.648438 0.242188\nv -0.316789 0.65625 0.242188\nv -0.274954 0.65625 0.242188\nv -0.273438 0.663906 0.242188\nv -0.317625 0.664062 0.242188\nv -0.273402 0.664062 0.242188\nv -0.3185 0.671875 0.242188\nv -0.272952 0.671875 0.242188\nv -0.319017 0.679688 0.242188\nv -0.272945 0.679688 0.242188\nv -0.319617 0.6875 0.242188\nv -0.273249 0.6875 0.242188\nv -0.273438 0.695044 0.242188\nv -0.319623 0.695312 0.242188\nv -0.273444 0.695312 0.242188\nv -0.273438 0.695312 0.242348\nv -0.319423 0.703125 0.242188\nv -0.273788 0.703125 0.242188\nv -0.319197 0.710938 0.242188\nv -0.27488 0.710938 0.242188\nv -0.319197 0.71875 0.242188\nv -0.276126 0.71875 0.242188\nv -0.319541 0.726562 0.242188\nv -0.320312 0.726562 0.248406\nv -0.27795 0.726562 0.242188\nv -0.319336 0.734375 0.242188\nv -0.280229 0.734375 0.242188\nv -0.28125 0.736829 0.242188\nv -0.31942 0.742188 0.242188\nv -0.283153 0.742188 0.242188\nv -0.319487 0.75 0.242188\nv -0.286003 0.75 0.242188\nv -0.289062 0.754886 0.242188\nv -0.318218 0.757812 0.242188\nv -0.291038 0.757812 0.242188\nv -0.296875 0.765274 0.242188\nv -0.315586 0.765625 0.242188\nv -0.297345 0.765625 0.242188\nv -0.304688 0.772173 0.242188\nv -0.312725 0.773438 0.242188\nv -0.311152 0.773438 0.242188\nv -0.3125 0.773978 0.242188\nv 0.0078125 -0.54016 0.25\nv 0.015625 -0.541824 0.25\nv 0.0234375 -0.542644 0.25\nv 0.03125 -0.542638 0.25\nv 0.0390625 -0.541939 0.25\nv 0.046875 -0.540893 0.25\nv 0.0546875 -0.539588 0.25\nv -0.0078125 -0.531583 0.25\nv 0.00492159 -0.539062 0.25\nv 0 -0.536727 0.25\nv 0.0078125 -0.539062 0.254603\nv 0.0569498 -0.539062 0.25\nv 0.0546875 -0.539062 0.252467\nv 0.0625 -0.537569 0.25\nv 0.0703125 -0.534819 0.25\nv 0.078125 -0.53172 0.25\nv -0.0234375 -0.524154 0.25\nv -0.00826054 -0.53125 0.25\nv -0.015625 -0.527737 0.25\nv -0.0078125 -0.53125 0.252651\nv 0.0789694 -0.53125 0.25\nv 0.078125 -0.53125 0.252498\nv 0.0859375 -0.527125 0.25\nv -0.0248993 -0.523438 0.25\nv -0.0234375 -0.523438 0.253484\nv 0.0921318 -0.523438 0.25\nv 0.09375 -0.521464 0.25\nv -0.0296698 -0.515625 0.25\nv 0.0987311 -0.515625 0.25\nv 0.101562 -0.510566 0.25\nv -0.0312318 -0.507812 0.25\nv -0.0234375 -0.50388 0.25\nv 0.102927 -0.507812 0.25\nv 0.101562 -0.505591 0.25\nv 0.101562 -0.507812 0.25309\nv -0.0163692 -0.5 0.25\nv -0.015625 -0.499684 0.25\nv -0.015625 -0.5 0.253567\nv -0.0078125 -0.496885 0.25\nv 0 -0.495411 0.25\nv 0.0078125 -0.494985 0.25\nv 0.015625 -0.494747 0.25\nv 0.0234375 -0.494473 0.25\nv 0.03125 -0.493995 0.25\nv 0.0390625 -0.493298 0.25\nv 0.046875 -0.492639 0.25\nv 0.078125 -0.49236 0.25\nv 0.0859375 -0.493485 0.25\nv 0.0972659 -0.5 0.25\nv 0.09375 -0.497166 0.25\nv 0.09375 -0.5 0.257127\nv 0.0529156 -0.492188 0.25\nv 0.0546875 -0.49205 0.25\nv 0.0546875 -0.492188 0.253503\nv 0.0625 -0.491788 0.25\nv 0.0625 -0.492188 0.254852\nv 0.0748448 -0.492188 0.25\nv 0.0703125 -0.491968 0.25\nv 0.0703125 -0.492188 0.251883\nv 0.453125 -0.0628355 0.25\nv 0.460938 -0.0645389 0.25\nv 0.46875 -0.0640798 0.25\nv 0.476562 -0.0633467 0.25\nv -0.289062 -0.0555548 0.25\nv -0.28125 -0.0573237 0.25\nv -0.273438 -0.0554051 0.25\nv 0.452284 -0.0625 0.25\nv 0.453125 -0.0625 0.253133\nv 0.480783 -0.0625 0.25\nv 0.484375 -0.060886 0.25\nv -0.290259 -0.0546875 0.25\nv -0.296875 -0.0479015 0.25\nv -0.272403 -0.0546875 0.25\nv -0.265625 -0.0505335 0.25\nv 0.445809 -0.0546875 0.25\nv 0.445312 -0.0541563 0.25\nv 0.49045 -0.0546875 0.25\nv 0.492188 -0.0510777 0.25\nv -0.297305 -0.046875 0.25\nv -0.262282 -0.046875 0.25\nv 0.442766 -0.046875 0.25\nv 0.493664 -0.046875 0.25\nv -0.300952 -0.0390625 0.25\nv -0.258041 -0.0390625 0.25\nv -0.257812 -0.0381428 0.25\nv -0.257812 -0.0390625 0.251771\nv 0.442307 -0.0390625 0.25\nv 0.495495 -0.0390625 0.25\nv -0.302239 -0.03125 0.25\nv -0.256646 -0.03125 0.25\nv 0.442134 -0.03125 0.25\nv 0.496474 -0.03125 0.25\nv -0.302517 -0.0234375 0.25\nv -0.255313 -0.0234375 0.25\nv 0.442039 -0.0234375 0.25\nv 0.498139 -0.0234375 0.25\nv -0.303525 -0.015625 0.25\nv -0.304688 -0.00987239 0.25\nv -0.254758 -0.015625 0.25\nv 0.442061 -0.015625 0.25\nv 0.499523 -0.015625 0.25\nv 0.5 -0.015625 0.257007\nv -0.305127 -0.0078125 0.25\nv -0.255408 -0.0078125 0.25\nv 0.440264 -0.0078125 0.25\nv 0.499873 -0.0078125 0.25\nv 0.5 -0.0078125 0.255007\nv -0.306002 0 0.25\nv -0.255422 0 0.25\nv 0.437581 0 0.25\nv 0.4375 0.000655764 0.25\nv 0.4375 0 0.250589\nv 0.499502 0 0.25\nv -0.305313 0.0078125 0.25\nv -0.304688 0.0112713 0.25\nv -0.2522 0.0078125 0.25\nv -0.25 0.010276 0.25\nv -0.25 0.0078125 0.257329\nv -0.242188 0.015619 0.25\nv 0.436346 0.0078125 0.25\nv 0.499013 0.0078125 0.25\nv -0.30387 0.015625 0.25\nv -0.242179 0.015625 0.25\nv -0.234375 0.0190808 0.25\nv -0.226562 0.0216431 0.25\nv 0.434163 0.015625 0.25\nv 0.429688 0.0218884 0.25\nv 0.498827 0.015625 0.25\nv -0.302645 0.0234375 0.25\nv -0.221843 0.0234375 0.25\nv -0.21875 0.0242926 0.25\nv -0.210938 0.0264422 0.25\nv -0.203125 0.0278011 0.25\nv -0.195312 0.0288892 0.25\nv -0.1875 0.0294682 0.25\nv -0.179688 0.0289616 0.25\nv -0.171875 0.0284637 0.25\nv -0.164062 0.0279083 0.25\nv -0.15625 0.0274319 0.25\nv -0.148438 0.0272987 0.25\nv -0.140625 0.0272257 0.25\nv -0.132812 0.0272002 0.25\nv -0.125 0.0272194 0.25\nv -0.117188 0.0272561 0.25\nv -0.109375 0.0272693 0.25\nv -0.101562 0.0272886 0.25\nv -0.09375 0.0273539 0.25\nv -0.0859375 0.0272786 0.25\nv -0.078125 0.027075 0.25\nv -0.0703125 0.0267159 0.25\nv -0.0625 0.0264397 0.25\nv -0.0546875 0.0262318 0.25\nv -0.046875 0.026 0.25\nv -0.0390625 0.0257934 0.25\nv -0.03125 0.0256232 0.25\nv -0.0234375 0.0254822 0.25\nv -0.015625 0.0253686 0.25\nv -0.0078125 0.0252975 0.25\nv 0 0.0252744 0.25\nv 0.0078125 0.0251816 0.25\nv 0.015625 0.0252011 0.25\nv 0.0234375 0.0252262 0.25\nv 0.03125 0.0252619 0.25\nv 0.0390625 0.0253015 0.25\nv 0.046875 0.0253459 0.25\nv 0.0546875 0.0253262 0.25\nv 0.0625 0.0253642 0.25\nv 0.0703125 0.0253749 0.25\nv 0.078125 0.0253466 0.25\nv 0.0859375 0.0252981 0.25\nv 0.09375 0.0252378 0.25\nv 0.101562 0.0252138 0.25\nv 0.109375 0.025216 0.25\nv 0.117188 0.0252021 0.25\nv 0.125 0.0251679 0.25\nv 0.132812 0.0251536 0.25\nv 0.140625 0.0251476 0.25\nv 0.148438 0.0251547 0.25\nv 0.15625 0.0251245 0.25\nv 0.164062 0.0250478 0.25\nv 0.171875 0.0250608 0.25\nv 0.179688 0.0251198 0.25\nv 0.1875 0.0251804 0.25\nv 0.195312 0.0252112 0.25\nv 0.203125 0.0252913 0.25\nv 0.210938 0.0253772 0.25\nv 0.21875 0.0254736 0.25\nv 0.226562 0.0256394 0.25\nv 0.234375 0.0258361 0.25\nv 0.242188 0.0260994 0.25\nv 0.25 0.026385 0.25\nv 0.257812 0.0266097 0.25\nv 0.265625 0.0267275 0.25\nv 0.273438 0.0268671 0.25\nv 0.28125 0.026897 0.25\nv 0.289062 0.0268605 0.25\nv 0.296875 0.0268689 0.25\nv 0.304688 0.0269141 0.25\nv 0.3125 0.0269175 0.25\nv 0.320312 0.0268661 0.25\nv 0.328125 0.0268247 0.25\nv 0.335938 0.0268108 0.25\nv 0.34375 0.0269543 0.25\nv 0.351562 0.0271799 0.25\nv 0.359375 0.0274883 0.25\nv 0.367188 0.027918 0.25\nv 0.375 0.0284455 0.25\nv 0.382812 0.0286675 0.25\nv 0.390625 0.0281028 0.25\nv 0.398438 0.0275607 0.25\nv 0.40625 0.0269777 0.25\nv 0.414062 0.0260569 0.25\nv 0.426424 0.0234375 0.25\nv 0.421875 0.0244774 0.25\nv 0.498567 0.0234375 0.25\nv -0.301541 0.03125 0.25\nv 0.49665 0.03125 0.25\nv -0.300066 0.0390625 0.25\nv 0.493716 0.0390625 0.25\nv 0.492188 0.0423218 0.25\nv -0.297375 0.046875 0.25\nv -0.296875 0.0486377 0.25\nv 0.49001 0.046875 0.25\nv 0.484375 0.0535553 0.25\nv -0.294782 0.0546875 0.25\nv 0.483127 0.0546875 0.25\nv 0.476562 0.0597416 0.25\nv -0.291829 0.0625 0.25\nv -0.289062 0.0654716 0.25\nv -0.28125 0.0683293 0.25\nv 0.414062 0.070266 0.25\nv 0.421875 0.0698172 0.25\nv 0.429688 0.0695684 0.25\nv 0.4375 0.0694297 0.25\nv 0.445312 0.0687205 0.25\nv 0.453125 0.0663998 0.25\nv 0.460938 0.0643895 0.25\nv 0.47119 0.0625 0.25\nv 0.46875 0.0636096 0.25\nv -0.274875 0.0703125 0.25\nv -0.273438 0.0707942 0.25\nv -0.265625 0.0731892 0.25\nv -0.210938 0.0778245 0.25\nv -0.203125 0.0771255 0.25\nv -0.195312 0.077318 0.25\nv -0.1875 0.0774787 0.25\nv -0.179688 0.0775147 0.25\nv -0.171875 0.0770022 0.25\nv -0.164062 0.0764447 0.25\nv -0.15625 0.0761273 0.25\nv -0.148438 0.0758135 0.25\nv -0.140625 0.0756443 0.25\nv -0.132812 0.0755687 0.25\nv -0.125 0.0755385 0.25\nv -0.117188 0.075452 0.25\nv -0.109375 0.0753574 0.25\nv -0.101562 0.0752637 0.25\nv -0.09375 0.0753241 0.25\nv -0.0859375 0.0754597 0.25\nv -0.078125 0.0754174 0.25\nv -0.0703125 0.0753696 0.25\nv -0.0625 0.0752617 0.25\nv -0.0546875 0.0751174 0.25\nv -0.046875 0.074935 0.25\nv -0.0390625 0.0747694 0.25\nv -0.03125 0.0745782 0.25\nv -0.0234375 0.0743755 0.25\nv -0.015625 0.0742151 0.25\nv -0.0078125 0.0741333 0.25\nv 0 0.0740681 0.25\nv 0.0078125 0.0740006 0.25\nv 0.015625 0.0739687 0.25\nv 0.0234375 0.073884 0.25\nv 0.03125 0.0737451 0.25\nv 0.0390625 0.0736025 0.25\nv 0.046875 0.073438 0.25\nv 0.0546875 0.0733251 0.25\nv 0.0625 0.0732153 0.25\nv 0.0703125 0.073155 0.25\nv 0.078125 0.0731064 0.25\nv 0.0859375 0.0730435 0.25\nv 0.09375 0.073035 0.25\nv 0.101562 0.0729984 0.25\nv 0.109375 0.0729264 0.25\nv 0.117188 0.0728529 0.25\nv 0.125 0.0727903 0.25\nv 0.132812 0.0727457 0.25\nv 0.140625 0.0727301 0.25\nv 0.148438 0.0727518 0.25\nv 0.15625 0.0727745 0.25\nv 0.164062 0.072787 0.25\nv 0.171875 0.0728424 0.25\nv 0.179688 0.0729107 0.25\nv 0.1875 0.0729312 0.25\nv 0.195312 0.0729952 0.25\nv 0.203125 0.073012 0.25\nv 0.210938 0.0729787 0.25\nv 0.21875 0.0729044 0.25\nv 0.226562 0.0727735 0.25\nv 0.234375 0.0727073 0.25\nv 0.242188 0.0726993 0.25\nv 0.25 0.0727297 0.25\nv 0.257812 0.0727603 0.25\nv 0.265625 0.0728051 0.25\nv 0.273438 0.0729067 0.25\nv 0.28125 0.0729853 0.25\nv 0.289062 0.0729968 0.25\nv 0.296875 0.0730627 0.25\nv 0.304688 0.073146 0.25\nv 0.3125 0.0732239 0.25\nv 0.320312 0.073245 0.25\nv 0.328125 0.0731912 0.25\nv 0.335938 0.0731483 0.25\nv 0.34375 0.0730185 0.25\nv 0.351562 0.0727715 0.25\nv 0.359375 0.0724887 0.25\nv 0.367188 0.0720945 0.25\nv 0.375 0.071733 0.25\nv 0.382812 0.071425 0.25\nv 0.390625 0.070955 0.25\nv 0.398438 0.070843 0.25\nv 0.413198 0.0703125 0.25\nv 0.40625 0.0706695 0.25\nv 0.40625 0.0703125 0.256684\nv -0.259752 0.078125 0.25\nv -0.257812 0.0803908 0.25\nv -0.25 0.0846246 0.25\nv -0.242188 0.0859034 0.25\nv -0.234375 0.0844375 0.25\nv -0.226562 0.0821048 0.25\nv -0.212337 0.078125 0.25\nv -0.21875 0.0797489 0.25\nv -0.210938 0.078125 0.254677\nv -0.242188 0.0859375 0.250461\nv -0.28125 0.168929 0.25\nv -0.273438 0.164214 0.25\nv -0.273438 0.164062 0.250241\nv -0.265625 0.164552 0.25\nv -0.265625 0.164062 0.250749\nv -0.257812 0.16767 0.25\nv -0.257812 0.164062 0.254306\nv -0.284088 0.171875 0.25\nv -0.289062 0.176368 0.25\nv -0.25447 0.171875 0.25\nv -0.25 0.178593 0.25\nv -0.25 0.171875 0.254558\nv -0.292643 0.179688 0.25\nv -0.248923 0.179688 0.25\nv -0.295454 0.1875 0.25\nv -0.296875 0.19221 0.25\nv -0.244508 0.1875 0.25\nv -0.29772 0.195312 0.25\nv -0.243175 0.195312 0.25\nv -0.242188 0.195312 0.257381\nv -0.299647 0.203125 0.25\nv -0.242338 0.203125 0.25\nv -0.242188 0.204161 0.25\nv -0.242188 0.203125 0.251876\nv -0.301103 0.210938 0.25\nv -0.2413 0.210938 0.25\nv -0.302436 0.21875 0.25\nv -0.240614 0.21875 0.25\nv -0.303075 0.226562 0.25\nv -0.240059 0.226562 0.25\nv -0.303377 0.234375 0.25\nv -0.239354 0.234375 0.25\nv -0.303552 0.242188 0.25\nv -0.238992 0.242188 0.25\nv -0.303394 0.25 0.25\nv -0.239209 0.25 0.25\nv -0.30272 0.257812 0.25\nv -0.239453 0.257812 0.25\nv -0.301639 0.265625 0.25\nv -0.23972 0.265625 0.25\nv -0.299765 0.273438 0.25\nv -0.240788 0.273438 0.25\nv -0.297225 0.28125 0.25\nv -0.296875 0.282272 0.25\nv -0.242116 0.28125 0.25\nv -0.242188 0.281523 0.25\nv -0.242188 0.28125 0.253651\nv -0.294593 0.289062 0.25\nv -0.245025 0.289062 0.25\nv -0.291549 0.296875 0.25\nv -0.289062 0.30142 0.25\nv -0.248988 0.296875 0.25\nv -0.25 0.298924 0.25\nv -0.286914 0.304688 0.25\nv -0.252486 0.304688 0.25\nv -0.257812 0.311525 0.25\nv -0.282735 0.3125 0.25\nv -0.28125 0.316796 0.25\nv -0.259081 0.3125 0.25\nv -0.265625 0.318151 0.25\nv -0.257812 0.3125 0.252519\nv -0.275657 0.320312 0.25\nv -0.28125 0.320312 0.254854\nv -0.271145 0.320312 0.25\nv -0.273438 0.321601 0.25\nv -0.265625 0.320312 0.253468\nv -0.273438 0.328125 0.257214\nv -0.289062 0.59375 0.256108\nv -0.289062 0.601562 0.253255\nv -0.289062 0.614052 0.25\nv -0.289062 0.609375 0.25211\nv -0.292239 0.617188 0.25\nv -0.296875 0.618771 0.25\nv -0.296875 0.617188 0.252258\nv -0.288034 0.617188 0.25\nv -0.301444 0.625 0.25\nv -0.304688 0.629657 0.25\nv -0.283381 0.625 0.25\nv -0.28125 0.630599 0.25\nv -0.28125 0.625 0.253862\nv -0.306526 0.632812 0.25\nv -0.280375 0.632812 0.25\nv -0.310787 0.640625 0.25\nv -0.3125 0.643402 0.25\nv -0.3125 0.640625 0.257409\nv -0.277567 0.640625 0.25\nv -0.315428 0.648438 0.25\nv -0.275629 0.648438 0.25\nv -0.316875 0.65625 0.25\nv -0.274212 0.65625 0.25\nv -0.273438 0.661746 0.25\nv -0.273438 0.65625 0.257226\nv -0.317798 0.664062 0.25\nv -0.273078 0.664062 0.25\nv -0.318705 0.671875 0.25\nv -0.272626 0.671875 0.25\nv -0.319296 0.679688 0.25\nv -0.272639 0.679688 0.25\nv -0.320007 0.6875 0.25\nv -0.320312 0.6875 0.25265\nv -0.272893 0.6875 0.25\nv -0.320152 0.695312 0.25\nv -0.320312 0.695312 0.251281\nv -0.273117 0.695312 0.25\nv -0.273438 0.700528 0.25\nv -0.320126 0.703125 0.25\nv -0.320312 0.703125 0.251342\nv -0.273587 0.703125 0.25\nv -0.273438 0.703125 0.254046\nv -0.320089 0.710938 0.25\nv -0.320312 0.710938 0.251389\nv -0.274575 0.710938 0.25\nv -0.320148 0.71875 0.25\nv -0.320312 0.722256 0.25\nv -0.320312 0.71875 0.250994\nv -0.275619 0.71875 0.25\nv -0.320501 0.726562 0.25\nv -0.320312 0.731164 0.25\nv -0.277194 0.726562 0.25\nv -0.320182 0.734375 0.25\nv -0.320312 0.734375 0.251032\nv -0.279441 0.734375 0.25\nv -0.28125 0.738689 0.25\nv -0.320125 0.742188 0.25\nv -0.320312 0.742188 0.251853\nv -0.282577 0.742188 0.25\nv -0.319686 0.75 0.25\nv -0.285601 0.75 0.25\nv -0.289062 0.754818 0.25\nv -0.31776 0.757812 0.25\nv -0.29126 0.757812 0.25\nv -0.296875 0.764715 0.25\nv -0.315278 0.765625 0.25\nv -0.297989 0.765625 0.25\nv -0.304688 0.772583 0.25\nv -0.313241 0.773438 0.25\nv -0.308177 0.773438 0.25\nv -0.3125 0.775432 0.25\nv 0.015625 -0.540218 0.257812\nv 0.0234375 -0.541181 0.257812\nv 0.03125 -0.541272 0.257812\nv 0.0390625 -0.540357 0.257812\nv 0.046875 -0.539212 0.257812\nv 0 -0.534665 0.257812\nv 0.0108573 -0.539062 0.257812\nv 0.0078125 -0.538126 0.257812\nv 0.015625 -0.539062 0.262869\nv 0.0390625 -0.539062 0.263029\nv 0.0477175 -0.539062 0.257812\nv 0.046875 -0.539062 0.258451\nv 0.0546875 -0.537757 0.257812\nv 0.0625 -0.535671 0.257812\nv 0.0703125 -0.533046 0.257812\nv -0.015625 -0.526428 0.257812\nv -0.00665477 -0.53125 0.257812\nv -0.0078125 -0.530815 0.257812\nv 0.074883 -0.53125 0.257812\nv 0.0703125 -0.53125 0.2639\nv 0.078125 -0.52987 0.257812\nv 0.0859375 -0.525288 0.257812\nv -0.0216022 -0.523438 0.257812\nv -0.0234375 -0.520755 0.257812\nv 0.0885198 -0.523438 0.257812\nv 0.0859375 -0.523438 0.262548\nv 0.09375 -0.516348 0.257812\nv -0.027104 -0.515625 0.257812\nv 0.0942675 -0.515625 0.257812\nv 0.09375 -0.515625 0.258927\nv -0.0291414 -0.507812 0.257812\nv -0.0234375 -0.504898 0.257812\nv -0.015625 -0.500508 0.257812\nv 0.0988765 -0.507812 0.257812\nv 0.09375 -0.500497 0.257812\nv -0.0148553 -0.5 0.257812\nv -0.0078125 -0.49687 0.257812\nv 0 -0.495341 0.257812\nv 0.0078125 -0.494852 0.257812\nv 0.015625 -0.49464 0.257812\nv 0.0234375 -0.494325 0.257812\nv 0.03125 -0.493796 0.257812\nv 0.0390625 -0.493231 0.257812\nv 0.046875 -0.492738 0.257812\nv 0.0546875 -0.492373 0.257812\nv 0.0625 -0.492457 0.257812\nv 0.0703125 -0.492942 0.257812\nv 0.078125 -0.493694 0.257812\nv 0.0933205 -0.5 0.257812\nv 0.0859375 -0.495885 0.257812\nv 0.460938 -0.064296 0.257812\nv 0.46875 -0.0637613 0.257812\nv 0.476562 -0.0633205 0.257812\nv -0.289062 -0.0563048 0.257812\nv -0.28125 -0.0577711 0.257812\nv -0.273438 -0.0557725 0.257812\nv 0.454628 -0.0625 0.257812\nv 0.453125 -0.0610084 0.257812\nv 0.480918 -0.0625 0.257812\nv 0.484375 -0.0609782 0.257812\nv -0.291261 -0.0546875 0.257812\nv -0.296875 -0.0488705 0.257812\nv -0.27185 -0.0546875 0.257812\nv -0.265625 -0.0509418 0.257812\nv 0.448165 -0.0546875 0.257812\nv 0.445312 -0.0516738 0.257812\nv 0.490999 -0.0546875 0.257812\nv 0.492188 -0.0527742 0.257812\nv -0.297694 -0.046875 0.257812\nv -0.26135 -0.046875 0.257812\nv -0.257812 -0.040932 0.257812\nv 0.443273 -0.046875 0.257812\nv 0.494734 -0.046875 0.257812\nv -0.3013 -0.0390625 0.257812\nv -0.257249 -0.0390625 0.257812\nv 0.441727 -0.0390625 0.257812\nv 0.496763 -0.0390625 0.257812\nv -0.302453 -0.03125 0.257812\nv -0.255839 -0.03125 0.257812\nv 0.441859 -0.03125 0.257812\nv 0.49775 -0.03125 0.257812\nv -0.302826 -0.0234375 0.257812\nv -0.254579 -0.0234375 0.257812\nv 0.441839 -0.0234375 0.257812\nv 0.499283 -0.0234375 0.257812\nv 0.5 -0.0161771 0.257812\nv 0.5 -0.0234375 0.261344\nv -0.303925 -0.015625 0.257812\nv -0.304688 -0.0115962 0.257812\nv -0.253965 -0.015625 0.257812\nv 0.441399 -0.015625 0.257812\nv 0.50004 -0.015625 0.257812\nv -0.305416 -0.0078125 0.257812\nv -0.254167 -0.0078125 0.257812\nv 0.43979 -0.0078125 0.257812\nv 0.4375 -0.00172733 0.257812\nv 0.500061 -0.0078125 0.257812\nv 0.5 -0.0065531 0.257812\nv -0.306227 0 0.257812\nv -0.253972 0 0.257812\nv -0.25 0.00759454 0.257812\nv 0.436782 0 0.257812\nv 0.499686 0 0.257812\nv -0.305435 0.0078125 0.257812\nv -0.304688 0.0125263 0.257812\nv -0.249803 0.0078125 0.257812\nv -0.242188 0.0131962 0.257812\nv 0.435167 0.0078125 0.257812\nv 0.499174 0.0078125 0.257812\nv -0.304155 0.015625 0.257812\nv -0.23856 0.015625 0.257812\nv -0.234375 0.0176002 0.257812\nv -0.234375 0.015625 0.265219\nv -0.226562 0.0206443 0.257812\nv 0.433116 0.015625 0.257812\nv 0.429688 0.0206237 0.257812\nv 0.498908 0.015625 0.257812\nv -0.303143 0.0234375 0.257812\nv -0.21952 0.0234375 0.257812\nv -0.21875 0.0236507 0.257812\nv -0.21875 0.0234375 0.259691\nv -0.210938 0.0258504 0.257812\nv -0.203125 0.0272973 0.257812\nv -0.195312 0.0286174 0.257812\nv -0.1875 0.0293669 0.257812\nv -0.179688 0.0290168 0.257812\nv -0.171875 0.0286886 0.257812\nv -0.164062 0.0282407 0.257812\nv -0.15625 0.0277402 0.257812\nv -0.148438 0.0275016 0.257812\nv -0.140625 0.0273286 0.257812\nv -0.132812 0.0272385 0.257812\nv -0.125 0.027235 0.257812\nv -0.117188 0.0272556 0.257812\nv -0.109375 0.027186 0.257812\nv -0.101562 0.0272362 0.257812\nv -0.09375 0.0273098 0.257812\nv -0.0859375 0.0272998 0.257812\nv -0.078125 0.0271637 0.257812\nv -0.0703125 0.0268499 0.257812\nv -0.0625 0.0265549 0.257812\nv -0.0546875 0.0263376 0.257812\nv -0.046875 0.0260983 0.257812\nv -0.0390625 0.0259254 0.257812\nv -0.03125 0.0257775 0.257812\nv -0.0234375 0.025662 0.257812\nv -0.015625 0.0255545 0.257812\nv -0.0078125 0.0254812 0.257812\nv 0 0.0254356 0.257812\nv 0.0078125 0.0253308 0.257812\nv 0.015625 0.0253442 0.257812\nv 0.0234375 0.0253687 0.257812\nv 0.03125 0.0253937 0.257812\nv 0.0390625 0.0254304 0.257812\nv 0.046875 0.0254667 0.257812\nv 0.0546875 0.0255011 0.257812\nv 0.0625 0.0254885 0.257812\nv 0.0703125 0.0254982 0.257812\nv 0.078125 0.0254815 0.257812\nv 0.0859375 0.0254268 0.257812\nv 0.09375 0.0253703 0.257812\nv 0.101562 0.0253678 0.257812\nv 0.109375 0.0253489 0.257812\nv 0.117188 0.0253332 0.257812\nv 0.125 0.0253128 0.257812\nv 0.132812 0.025332 0.257812\nv 0.140625 0.0253573 0.257812\nv 0.148438 0.0253804 0.257812\nv 0.15625 0.0253566 0.257812\nv 0.164062 0.0253126 0.257812\nv 0.171875 0.0252681 0.257812\nv 0.179688 0.0252883 0.257812\nv 0.1875 0.0253432 0.257812\nv 0.195312 0.0254505 0.257812\nv 0.203125 0.025569 0.257812\nv 0.210938 0.0256843 0.257812\nv 0.21875 0.025812 0.257812\nv 0.226562 0.0259684 0.257812\nv 0.234375 0.0261154 0.257812\nv 0.242188 0.026285 0.257812\nv 0.25 0.0264788 0.257812\nv 0.257812 0.0266698 0.257812\nv 0.265625 0.0268151 0.257812\nv 0.273438 0.0268934 0.257812\nv 0.28125 0.0270268 0.257812\nv 0.289062 0.0270457 0.257812\nv 0.296875 0.0270391 0.257812\nv 0.304688 0.0270886 0.257812\nv 0.3125 0.0271286 0.257812\nv 0.320312 0.0272251 0.257812\nv 0.328125 0.0272375 0.257812\nv 0.335938 0.0272443 0.257812\nv 0.34375 0.0273474 0.257812\nv 0.351562 0.0275507 0.257812\nv 0.359375 0.0278259 0.257812\nv 0.367188 0.0282729 0.257812\nv 0.375 0.028554 0.257812\nv 0.382812 0.0285158 0.257812\nv 0.390625 0.0279343 0.257812\nv 0.398438 0.0275085 0.257812\nv 0.40625 0.0269947 0.257812\nv 0.414062 0.0260151 0.257812\nv 0.424898 0.0234375 0.257812\nv 0.421875 0.0242877 0.257812\nv 0.498555 0.0234375 0.257812\nv -0.302145 0.03125 0.257812\nv 0.496772 0.03125 0.257812\nv -0.300579 0.0390625 0.257812\nv 0.493831 0.0390625 0.257812\nv 0.492188 0.0423813 0.257812\nv -0.298016 0.046875 0.257812\nv -0.296875 0.050708 0.257812\nv 0.489924 0.046875 0.257812\nv 0.484375 0.0533226 0.257812\nv -0.295396 0.0546875 0.257812\nv 0.482865 0.0546875 0.257812\nv 0.476562 0.0597894 0.257812\nv -0.2922 0.0625 0.257812\nv -0.289062 0.0654594 0.257812\nv -0.28125 0.0681136 0.257812\nv 0.40625 0.0702492 0.257812\nv 0.414062 0.0699545 0.257812\nv 0.421875 0.0697442 0.257812\nv 0.429688 0.069567 0.257812\nv 0.4375 0.0694151 0.257812\nv 0.445312 0.0688423 0.257812\nv 0.453125 0.0664642 0.257812\nv 0.460938 0.0643303 0.257812\nv 0.471252 0.0625 0.257812\nv 0.46875 0.0636058 0.257812\nv -0.274233 0.0703125 0.257812\nv -0.273438 0.0706229 0.257812\nv -0.265625 0.0736506 0.257812\nv -0.203125 0.0773525 0.257812\nv -0.195312 0.0774992 0.257812\nv -0.1875 0.0776484 0.257812\nv -0.179688 0.0776811 0.257812\nv -0.171875 0.0771235 0.257812\nv -0.164062 0.0766028 0.257812\nv -0.15625 0.0761871 0.257812\nv -0.148438 0.0758246 0.257812\nv -0.140625 0.0756546 0.257812\nv -0.132812 0.0755623 0.257812\nv -0.125 0.0754818 0.257812\nv -0.117188 0.0754542 0.257812\nv -0.109375 0.0753559 0.257812\nv -0.101562 0.0752824 0.257812\nv -0.09375 0.0753782 0.257812\nv -0.0859375 0.0754655 0.257812\nv -0.078125 0.075422 0.257812\nv -0.0703125 0.0753444 0.257812\nv -0.0625 0.0752372 0.257812\nv -0.0546875 0.0751306 0.257812\nv -0.046875 0.0749846 0.257812\nv -0.0390625 0.0748045 0.257812\nv -0.03125 0.0746307 0.257812\nv -0.0234375 0.0744785 0.257812\nv -0.015625 0.0743453 0.257812\nv -0.0078125 0.0742508 0.257812\nv 0 0.0741097 0.257812\nv 0.0078125 0.0739591 0.257812\nv 0.015625 0.0738496 0.257812\nv 0.0234375 0.0737961 0.257812\nv 0.03125 0.0737013 0.257812\nv 0.0390625 0.0735396 0.257812\nv 0.046875 0.0733895 0.257812\nv 0.0546875 0.0732776 0.257812\nv 0.0625 0.0731801 0.257812\nv 0.0703125 0.073144 0.257812\nv 0.078125 0.0731205 0.257812\nv 0.0859375 0.0730865 0.257812\nv 0.09375 0.0730893 0.257812\nv 0.101562 0.0730678 0.257812\nv 0.109375 0.0730159 0.257812\nv 0.117188 0.0729475 0.257812\nv 0.125 0.072874 0.257812\nv 0.132812 0.0728405 0.257812\nv 0.140625 0.072823 0.257812\nv 0.148438 0.0728612 0.257812\nv 0.15625 0.0728966 0.257812\nv 0.164062 0.0729286 0.257812\nv 0.171875 0.0729569 0.257812\nv 0.179688 0.0730202 0.257812\nv 0.1875 0.0730489 0.257812\nv 0.195312 0.0730506 0.257812\nv 0.203125 0.0731181 0.257812\nv 0.210938 0.0731059 0.257812\nv 0.21875 0.0730214 0.257812\nv 0.226562 0.0728706 0.257812\nv 0.234375 0.0727516 0.257812\nv 0.242188 0.0727097 0.257812\nv 0.25 0.0727012 0.257812\nv 0.257812 0.0727287 0.257812\nv 0.265625 0.0727728 0.257812\nv 0.273438 0.0728605 0.257812\nv 0.28125 0.07297 0.257812\nv 0.289062 0.0730218 0.257812\nv 0.296875 0.0730367 0.257812\nv 0.304688 0.0731006 0.257812\nv 0.3125 0.0731362 0.257812\nv 0.320312 0.0732072 0.257812\nv 0.328125 0.0732064 0.257812\nv 0.335938 0.0731438 0.257812\nv 0.34375 0.072921 0.257812\nv 0.351562 0.0726556 0.257812\nv 0.359375 0.0723243 0.257812\nv 0.367188 0.0719452 0.257812\nv 0.375 0.0715528 0.257812\nv 0.382812 0.0712232 0.257812\nv 0.390625 0.0709034 0.257812\nv 0.403239 0.0703125 0.257812\nv 0.398438 0.0704089 0.257812\nv 0.398438 0.0703125 0.262607\nv -0.260445 0.078125 0.257812\nv -0.257812 0.0817577 0.257812\nv -0.25 0.0851083 0.257812\nv -0.234375 0.0853761 0.257812\nv -0.226562 0.083327 0.257812\nv -0.21875 0.0807808 0.257812\nv -0.209324 0.078125 0.257812\nv -0.210938 0.0783358 0.257812\nv -0.244864 0.0859375 0.257812\nv -0.25 0.0859375 0.261987\nv -0.238787 0.0859375 0.257812\nv -0.242188 0.0869109 0.257812\nv -0.234375 0.0859375 0.262986\nv -0.273438 0.158972 0.257812\nv -0.273438 0.15625 0.261687\nv -0.265625 0.158872 0.257812\nv -0.265625 0.15625 0.260431\nv -0.257812 0.161397 0.257812\nv -0.257812 0.15625 0.261979\nv -0.280019 0.164062 0.257812\nv -0.28125 0.164955 0.257812\nv -0.28125 0.164062 0.259608\nv -0.25481 0.164062 0.257812\nv -0.25 0.168278 0.257812\nv -0.25 0.164062 0.263151\nv -0.28671 0.171875 0.257812\nv -0.289062 0.174739 0.257812\nv -0.289062 0.171875 0.264743\nv -0.246501 0.171875 0.257812\nv -0.29294 0.179688 0.257812\nv -0.243307 0.179688 0.257812\nv -0.242188 0.179688 0.262165\nv -0.295693 0.1875 0.257812\nv -0.296875 0.191276 0.257812\nv -0.24252 0.1875 0.257812\nv -0.242188 0.193874 0.257812\nv -0.242188 0.1875 0.259767\nv -0.297996 0.195312 0.257812\nv -0.242141 0.195312 0.257812\nv -0.299925 0.203125 0.257812\nv -0.241749 0.203125 0.257812\nv -0.301402 0.210938 0.257812\nv -0.240901 0.210938 0.257812\nv -0.302775 0.21875 0.257812\nv -0.240134 0.21875 0.257812\nv -0.303324 0.226562 0.257812\nv -0.239457 0.226562 0.257812\nv -0.303696 0.234375 0.257812\nv -0.238828 0.234375 0.257812\nv -0.303719 0.242188 0.257812\nv -0.23881 0.242188 0.257812\nv -0.303504 0.25 0.257812\nv -0.239042 0.25 0.257812\nv -0.302786 0.257812 0.257812\nv -0.239222 0.257812 0.257812\nv -0.301717 0.265625 0.257812\nv -0.239635 0.265625 0.257812\nv -0.29984 0.273438 0.257812\nv -0.240843 0.273438 0.257812\nv -0.242188 0.280792 0.257812\nv -0.297504 0.28125 0.257812\nv -0.296875 0.283159 0.257812\nv -0.242297 0.28125 0.257812\nv -0.242188 0.28125 0.260709\nv -0.29487 0.289062 0.257812\nv -0.245147 0.289062 0.257812\nv -0.291797 0.296875 0.257812\nv -0.289062 0.302931 0.257812\nv -0.248497 0.296875 0.257812\nv -0.25 0.300175 0.257812\nv -0.288148 0.304688 0.257812\nv -0.289062 0.304688 0.264499\nv -0.251737 0.304688 0.257812\nv -0.284412 0.3125 0.257812\nv -0.256113 0.3125 0.257812\nv -0.257812 0.314828 0.257812\nv -0.282071 0.320312 0.257812\nv -0.28125 0.322765 0.257812\nv -0.263024 0.320312 0.257812\nv -0.265625 0.324302 0.257812\nv -0.274306 0.328125 0.257812\nv -0.28125 0.328125 0.263192\nv -0.272447 0.328125 0.257812\nv -0.273438 0.328666 0.257812\nv -0.265625 0.328125 0.262277\nv -0.273438 0.335938 0.264497\nv -0.28125 0.570312 0.265112\nv -0.289062 0.578125 0.263155\nv -0.28125 0.578125 0.263574\nv -0.289062 0.589505 0.257812\nv -0.289062 0.585938 0.259136\nv -0.28125 0.585938 0.262052\nv -0.291429 0.59375 0.257812\nv -0.296875 0.59375 0.262255\nv -0.286234 0.59375 0.257812\nv -0.28125 0.59375 0.260779\nv -0.294309 0.601562 0.257812\nv -0.296875 0.601562 0.260044\nv -0.283886 0.601562 0.257812\nv -0.28125 0.601562 0.260099\nv -0.296091 0.609375 0.257812\nv -0.296875 0.610244 0.257812\nv -0.296875 0.609375 0.258469\nv -0.283661 0.609375 0.257812\nv -0.28125 0.609375 0.26053\nv -0.300111 0.617188 0.257812\nv -0.282341 0.617188 0.257812\nv -0.28125 0.619505 0.257812\nv -0.28125 0.617188 0.259242\nv -0.303755 0.625 0.257812\nv -0.304688 0.626432 0.257812\nv -0.304688 0.625 0.259994\nv -0.278066 0.625 0.257812\nv -0.30833 0.632812 0.257812\nv -0.3125 0.640444 0.257812\nv -0.276189 0.632812 0.257812\nv -0.273438 0.632812 0.264584\nv -0.312592 0.640625 0.257812\nv -0.27583 0.640625 0.257812\nv -0.273438 0.640625 0.264782\nv -0.31637 0.648438 0.257812\nv -0.274588 0.648438 0.257812\nv -0.273438 0.655815 0.257812\nv -0.273438 0.648438 0.262506\nv -0.31769 0.65625 0.257812\nv -0.273367 0.65625 0.257812\nv -0.318674 0.664062 0.257812\nv -0.272653 0.664062 0.257812\nv -0.319542 0.671875 0.257812\nv -0.320312 0.671875 0.262548\nv -0.272379 0.671875 0.257812\nv -0.320186 0.679688 0.257812\nv -0.320312 0.681065 0.257812\nv -0.320312 0.679688 0.258527\nv -0.27221 0.679688 0.257812\nv -0.320923 0.6875 0.257812\nv -0.272489 0.6875 0.257812\nv -0.321155 0.695312 0.257812\nv -0.272765 0.695312 0.257812\nv -0.321216 0.703125 0.257812\nv -0.273285 0.703125 0.257812\nv -0.273438 0.704407 0.257812\nv -0.321328 0.710938 0.257812\nv -0.274155 0.710938 0.257812\nv -0.273438 0.710938 0.261812\nv -0.321384 0.71875 0.257812\nv -0.274973 0.71875 0.257812\nv -0.321589 0.726562 0.257812\nv -0.276512 0.726562 0.257812\nv -0.321158 0.734375 0.257812\nv -0.278703 0.734375 0.257812\nv -0.28125 0.741087 0.257812\nv -0.320904 0.742188 0.257812\nv -0.320312 0.747883 0.257812\nv -0.281647 0.742188 0.257812\nv -0.28125 0.742188 0.259665\nv -0.320071 0.75 0.257812\nv -0.320312 0.75 0.263166\nv -0.284576 0.75 0.257812\nv -0.289062 0.756661 0.257812\nv -0.317518 0.757812 0.257812\nv -0.289958 0.757812 0.257812\nv -0.296875 0.764764 0.257812\nv -0.289062 0.757812 0.260692\nv -0.315306 0.765625 0.257812\nv -0.298062 0.765625 0.257812\nv -0.304688 0.772939 0.257812\nv -0.296875 0.765625 0.260491\nv -0.313972 0.773438 0.257812\nv -0.305993 0.773438 0.257812\nv -0.3125 0.778586 0.257812\nv -0.304688 0.773438 0.259001\nv -0.3125 0.78125 0.261007\nv 0.0234375 -0.539535 0.265625\nv 0.03125 -0.53955 0.265625\nv 0 -0.534393 0.265625\nv 0.0078125 -0.536958 0.265625\nv 0.0198416 -0.539062 0.265625\nv 0.015625 -0.538383 0.265625\nv 0.015625 -0.539062 0.272966\nv 0.0345265 -0.539062 0.265625\nv 0.0390625 -0.53835 0.265625\nv 0.046875 -0.537177 0.265625\nv 0.0546875 -0.535798 0.265625\nv 0.0625 -0.533634 0.265625\nv -0.015625 -0.524834 0.265625\nv -0.00507022 -0.53125 0.265625\nv -0.0078125 -0.529821 0.265625\nv 0.0689211 -0.53125 0.265625\nv 0.0703125 -0.530697 0.265625\nv 0.078125 -0.52682 0.265625\nv -0.0182425 -0.523438 0.265625\nv -0.0234375 -0.51617 0.265625\nv -0.015625 -0.523438 0.272586\nv 0.0834797 -0.523438 0.265625\nv 0.0859375 -0.520552 0.265625\nv -0.0238501 -0.515625 0.265625\nv -0.0234375 -0.515625 0.266776\nv 0.0896261 -0.515625 0.265625\nv 0.09375 -0.508393 0.265625\nv -0.0261637 -0.507812 0.265625\nv -0.0234375 -0.506364 0.265625\nv -0.0234375 -0.507812 0.272975\nv -0.015625 -0.502062 0.265625\nv 0.0941227 -0.507812 0.265625\nv 0.09375 -0.507209 0.265625\nv -0.012437 -0.5 0.265625\nv -0.0078125 -0.497667 0.265625\nv 0 -0.495369 0.265625\nv 0.0078125 -0.4948 0.265625\nv 0.015625 -0.494566 0.265625\nv 0.0234375 -0.494224 0.265625\nv 0.03125 -0.493711 0.265625\nv 0.0390625 -0.49318 0.265625\nv 0.046875 -0.492873 0.265625\nv 0.0546875 -0.492559 0.265625\nv 0.0625 -0.492477 0.265625\nv 0.0703125 -0.493156 0.265625\nv 0.078125 -0.495113 0.265625\nv 0.088787 -0.5 0.265625\nv 0.0859375 -0.498155 0.265625\nv 0.046875 -0.492188 0.271032\nv 0.0546875 -0.492188 0.268811\nv 0.0625 -0.492188 0.268007\nv 0.460938 -0.0640006 0.265625\nv 0.46875 -0.0635485 0.265625\nv 0.476562 -0.0631539 0.265625\nv -0.289062 -0.0579863 0.265625\nv -0.28125 -0.0584476 0.265625\nv -0.273438 -0.0562495 0.265625\nv 0.455296 -0.0625 0.265625\nv 0.453125 -0.0605041 0.265625\nv 0.48206 -0.0625 0.265625\nv 0.484375 -0.0618513 0.265625\nv 0.484375 -0.0625 0.27012\nv -0.292865 -0.0546875 0.265625\nv -0.296875 -0.0503527 0.265625\nv -0.270969 -0.0546875 0.265625\nv -0.265625 -0.0516536 0.265625\nv 0.44954 -0.0546875 0.265625\nv 0.445312 -0.0490547 0.265625\nv 0.491772 -0.0546875 0.265625\nv 0.492188 -0.0541586 0.265625\nv 0.492188 -0.0546875 0.271137\nv -0.298441 -0.046875 0.265625\nv -0.260072 -0.046875 0.265625\nv -0.257812 -0.0435538 0.265625\nv 0.44416 -0.046875 0.265625\nv 0.496042 -0.046875 0.265625\nv -0.301613 -0.0390625 0.265625\nv -0.256316 -0.0390625 0.265625\nv 0.441823 -0.0390625 0.265625\nv 0.498158 -0.0390625 0.265625\nv -0.302673 -0.03125 0.265625\nv -0.254952 -0.03125 0.265625\nv 0.441487 -0.03125 0.265625\nv 0.499353 -0.03125 0.265625\nv 0.5 -0.02792 0.265625\nv 0.5 -0.03125 0.268004\nv -0.30305 -0.0234375 0.265625\nv -0.253862 -0.0234375 0.265625\nv 0.441081 -0.0234375 0.265625\nv 0.500697 -0.0234375 0.265625\nv -0.304218 -0.015625 0.265625\nv -0.304688 -0.0132081 0.265625\nv -0.253005 -0.015625 0.265625\nv 0.440571 -0.015625 0.265625\nv 0.500913 -0.015625 0.265625\nv -0.305753 -0.0078125 0.265625\nv -0.252694 -0.0078125 0.265625\nv 0.439285 -0.0078125 0.265625\nv 0.4375 -0.00292229 0.265625\nv 0.500527 -0.0078125 0.265625\nv 0.5 -0.00176298 0.265625\nv -0.306459 0 0.265625\nv -0.252317 0 0.265625\nv -0.25 0.00401435 0.265625\nv -0.25 0 0.272717\nv 0.436314 0 0.265625\nv 0.499841 0 0.265625\nv 0.5 0 0.271903\nv -0.305658 0.0078125 0.265625\nv -0.304688 0.014338 0.265625\nv -0.246115 0.0078125 0.265625\nv -0.242188 0.0104656 0.265625\nv -0.242188 0.0078125 0.272278\nv -0.234375 0.0155011 0.265625\nv 0.434317 0.0078125 0.265625\nv 0.499224 0.0078125 0.265625\nv -0.304477 0.015625 0.265625\nv -0.304688 0.015625 0.271573\nv -0.234174 0.015625 0.265625\nv -0.226562 0.0192213 0.265625\nv -0.21875 0.0225001 0.265625\nv 0.432325 0.015625 0.265625\nv 0.429688 0.0197239 0.265625\nv 0.498928 0.015625 0.265625\nv -0.30349 0.0234375 0.265625\nv -0.216633 0.0234375 0.265625\nv -0.210938 0.0251885 0.265625\nv -0.203125 0.0267706 0.265625\nv -0.195312 0.0281633 0.265625\nv -0.1875 0.0293656 0.265625\nv -0.179688 0.0291324 0.265625\nv -0.171875 0.0288793 0.265625\nv -0.164062 0.0284464 0.265625\nv -0.15625 0.0280682 0.265625\nv -0.148438 0.0277993 0.265625\nv -0.140625 0.0275127 0.265625\nv -0.132812 0.0273365 0.265625\nv -0.125 0.027205 0.265625\nv -0.117188 0.0271421 0.265625\nv -0.109375 0.0270965 0.265625\nv -0.101562 0.0271808 0.265625\nv -0.09375 0.0272281 0.265625\nv -0.0859375 0.0272634 0.265625\nv -0.078125 0.0272237 0.265625\nv -0.0703125 0.0270049 0.265625\nv -0.0625 0.0267442 0.265625\nv -0.0546875 0.0264802 0.265625\nv -0.046875 0.0262658 0.265625\nv -0.0390625 0.0261007 0.265625\nv -0.03125 0.0259713 0.265625\nv -0.0234375 0.0258737 0.265625\nv -0.015625 0.0257907 0.265625\nv -0.0078125 0.0257181 0.265625\nv 0 0.0256723 0.265625\nv 0.0078125 0.0255565 0.265625\nv 0.015625 0.025571 0.265625\nv 0.0234375 0.0255875 0.265625\nv 0.03125 0.0255867 0.265625\nv 0.0390625 0.0256058 0.265625\nv 0.046875 0.0256464 0.265625\nv 0.0546875 0.0256877 0.265625\nv 0.0625 0.0256821 0.265625\nv 0.0703125 0.0256823 0.265625\nv 0.078125 0.0256577 0.265625\nv 0.0859375 0.0256121 0.265625\nv 0.09375 0.0255709 0.265625\nv 0.101562 0.0255666 0.265625\nv 0.109375 0.0255515 0.265625\nv 0.117188 0.0255494 0.265625\nv 0.125 0.0255383 0.265625\nv 0.132812 0.0255706 0.265625\nv 0.140625 0.0255976 0.265625\nv 0.148438 0.0256321 0.265625\nv 0.15625 0.0256113 0.265625\nv 0.164062 0.0256138 0.265625\nv 0.171875 0.0255896 0.265625\nv 0.179688 0.0255977 0.265625\nv 0.1875 0.0256519 0.265625\nv 0.195312 0.0257566 0.265625\nv 0.203125 0.0258539 0.265625\nv 0.210938 0.0259146 0.265625\nv 0.21875 0.0259942 0.265625\nv 0.226562 0.0261382 0.265625\nv 0.234375 0.026288 0.265625\nv 0.242188 0.0264333 0.265625\nv 0.25 0.0265779 0.265625\nv 0.257812 0.0267252 0.265625\nv 0.265625 0.0268676 0.265625\nv 0.273438 0.0269835 0.265625\nv 0.28125 0.0270704 0.265625\nv 0.289062 0.0272203 0.265625\nv 0.296875 0.0272761 0.265625\nv 0.304688 0.0274934 0.265625\nv 0.3125 0.0275669 0.265625\nv 0.320312 0.0275719 0.265625\nv 0.328125 0.0275865 0.265625\nv 0.335938 0.0276844 0.265625\nv 0.34375 0.0278281 0.265625\nv 0.351562 0.0280017 0.265625\nv 0.359375 0.0282924 0.265625\nv 0.367188 0.0284825 0.265625\nv 0.375 0.0285534 0.265625\nv 0.382812 0.0285464 0.265625\nv 0.390625 0.0279738 0.265625\nv 0.398438 0.0275221 0.265625\nv 0.40625 0.0268385 0.265625\nv 0.414062 0.0257563 0.265625\nv 0.423578 0.0234375 0.265625\nv 0.421875 0.0239521 0.265625\nv 0.421875 0.0234375 0.270141\nv 0.498486 0.0234375 0.265625\nv -0.302634 0.03125 0.265625\nv 0.496843 0.03125 0.265625\nv -0.301064 0.0390625 0.265625\nv 0.493947 0.0390625 0.265625\nv 0.492188 0.0425037 0.265625\nv -0.298596 0.046875 0.265625\nv -0.296875 0.0528199 0.265625\nv 0.489905 0.046875 0.265625\nv 0.484375 0.0530968 0.265625\nv -0.296188 0.0546875 0.265625\nv -0.296875 0.0546875 0.271797\nv 0.482591 0.0546875 0.265625\nv 0.476562 0.059646 0.265625\nv -0.292855 0.0625 0.265625\nv -0.289062 0.0660863 0.265625\nv -0.28125 0.068549 0.265625\nv 0.398438 0.0702511 0.265625\nv 0.40625 0.0698282 0.265625\nv 0.414062 0.0697469 0.265625\nv 0.421875 0.0696457 0.265625\nv 0.429688 0.0695679 0.265625\nv 0.4375 0.0693857 0.265625\nv 0.445312 0.0688691 0.265625\nv 0.453125 0.0665202 0.265625\nv 0.460938 0.0642503 0.265625\nv 0.471101 0.0625 0.265625\nv 0.46875 0.0635572 0.265625\nv -0.275321 0.0703125 0.265625\nv -0.273438 0.0711074 0.265625\nv -0.265625 0.0742086 0.265625\nv -0.203125 0.0778184 0.265625\nv -0.195312 0.0776145 0.265625\nv -0.1875 0.0778889 0.265625\nv -0.179688 0.0778487 0.265625\nv -0.171875 0.0772519 0.265625\nv -0.164062 0.076763 0.265625\nv -0.15625 0.0762916 0.265625\nv -0.148438 0.0759333 0.265625\nv -0.140625 0.0757192 0.265625\nv -0.132812 0.0756054 0.265625\nv -0.125 0.0755815 0.265625\nv -0.117188 0.0755436 0.265625\nv -0.109375 0.0754258 0.265625\nv -0.101562 0.0753852 0.265625\nv -0.09375 0.0754892 0.265625\nv -0.0859375 0.0755297 0.265625\nv -0.078125 0.0754654 0.265625\nv -0.0703125 0.0753441 0.265625\nv -0.0625 0.0752814 0.265625\nv -0.0546875 0.0751693 0.265625\nv -0.046875 0.0750403 0.265625\nv -0.0390625 0.0749031 0.265625\nv -0.03125 0.0747251 0.265625\nv -0.0234375 0.0745759 0.265625\nv -0.015625 0.0743805 0.265625\nv -0.0078125 0.0742235 0.265625\nv 0 0.0740483 0.265625\nv 0.0078125 0.0738343 0.265625\nv 0.015625 0.0737101 0.265625\nv 0.0234375 0.0736157 0.265625\nv 0.03125 0.0735689 0.265625\nv 0.0390625 0.0734505 0.265625\nv 0.046875 0.0733144 0.265625\nv 0.0546875 0.0732335 0.265625\nv 0.0625 0.0731603 0.265625\nv 0.0703125 0.0731271 0.265625\nv 0.078125 0.0731105 0.265625\nv 0.0859375 0.0730731 0.265625\nv 0.09375 0.0730753 0.265625\nv 0.101562 0.0730645 0.265625\nv 0.109375 0.0730322 0.265625\nv 0.117188 0.0729996 0.265625\nv 0.125 0.0729241 0.265625\nv 0.132812 0.0729065 0.265625\nv 0.140625 0.0729088 0.265625\nv 0.148438 0.0729366 0.265625\nv 0.15625 0.0729458 0.265625\nv 0.164062 0.0729663 0.265625\nv 0.171875 0.0729903 0.265625\nv 0.179688 0.0730379 0.265625\nv 0.1875 0.0730844 0.265625\nv 0.195312 0.073105 0.265625\nv 0.203125 0.073137 0.265625\nv 0.210938 0.073184 0.265625\nv 0.21875 0.0730718 0.265625\nv 0.226562 0.0729026 0.265625\nv 0.234375 0.0727615 0.265625\nv 0.242188 0.0726563 0.265625\nv 0.25 0.0725954 0.265625\nv 0.257812 0.0725938 0.265625\nv 0.265625 0.0726576 0.265625\nv 0.273438 0.0727339 0.265625\nv 0.28125 0.072847 0.265625\nv 0.289062 0.0729765 0.265625\nv 0.296875 0.0729797 0.265625\nv 0.304688 0.0729627 0.265625\nv 0.3125 0.0729621 0.265625\nv 0.320312 0.0729904 0.265625\nv 0.328125 0.0730253 0.265625\nv 0.335938 0.0730191 0.265625\nv 0.34375 0.0727545 0.265625\nv 0.351562 0.0724489 0.265625\nv 0.359375 0.0720914 0.265625\nv 0.367188 0.0717509 0.265625\nv 0.375 0.0714204 0.265625\nv 0.382812 0.0710591 0.265625\nv 0.397369 0.0703125 0.265625\nv 0.390625 0.0706949 0.265625\nv -0.261304 0.078125 0.265625\nv -0.257812 0.0837312 0.265625\nv -0.226562 0.084462 0.265625\nv -0.21875 0.081629 0.265625\nv -0.205544 0.078125 0.265625\nv -0.210938 0.0788513 0.265625\nv -0.203125 0.078125 0.270638\nv -0.252682 0.0859375 0.265625\nv -0.257812 0.0859375 0.272259\nv -0.25 0.0870444 0.265625\nv -0.242188 0.0896594 0.265625\nv -0.233176 0.0859375 0.265625\nv -0.234375 0.0864092 0.265625\nv -0.273438 0.153437 0.265625\nv -0.273438 0.148438 0.270198\nv -0.265625 0.15096 0.265625\nv -0.265625 0.148438 0.267565\nv -0.257812 0.151832 0.265625\nv -0.257812 0.148438 0.268824\nv -0.277385 0.15625 0.265625\nv -0.28125 0.159836 0.265625\nv -0.28125 0.15625 0.270654\nv -0.252683 0.15625 0.265625\nv -0.25 0.160497 0.265625\nv -0.25 0.15625 0.26978\nv -0.283439 0.164062 0.265625\nv -0.289062 0.171508 0.265625\nv -0.247871 0.164062 0.265625\nv -0.289347 0.171875 0.265625\nv -0.243468 0.171875 0.265625\nv -0.242188 0.176329 0.265625\nv -0.242188 0.171875 0.268248\nv -0.293196 0.179688 0.265625\nv -0.241673 0.179688 0.265625\nv -0.295694 0.1875 0.265625\nv -0.296875 0.191082 0.265625\nv -0.2415 0.1875 0.265625\nv -0.298104 0.195312 0.265625\nv -0.296875 0.195312 0.271647\nv -0.241404 0.195312 0.265625\nv -0.299989 0.203125 0.265625\nv -0.240912 0.203125 0.265625\nv -0.301574 0.210938 0.265625\nv -0.240087 0.210938 0.265625\nv -0.302862 0.21875 0.265625\nv -0.239149 0.21875 0.265625\nv -0.303385 0.226562 0.265625\nv -0.238466 0.226562 0.265625\nv -0.303763 0.234375 0.265625\nv -0.238134 0.234375 0.265625\nv -0.303684 0.242188 0.265625\nv -0.238261 0.242188 0.265625\nv -0.303329 0.25 0.265625\nv -0.23849 0.25 0.265625\nv -0.302545 0.257812 0.265625\nv -0.238611 0.257812 0.265625\nv -0.301416 0.265625 0.265625\nv -0.239206 0.265625 0.265625\nv -0.299557 0.273438 0.265625\nv -0.240506 0.273438 0.265625\nv -0.297273 0.28125 0.265625\nv -0.296875 0.28263 0.265625\nv -0.296875 0.28125 0.272989\nv -0.242042 0.28125 0.265625\nv -0.242188 0.281803 0.265625\nv -0.294985 0.289062 0.265625\nv -0.244707 0.289062 0.265625\nv -0.292123 0.296875 0.265625\nv -0.247462 0.296875 0.265625\nv -0.25 0.303381 0.265625\nv -0.289203 0.304688 0.265625\nv -0.289062 0.305141 0.265625\nv -0.250502 0.304688 0.265625\nv -0.25 0.304688 0.267744\nv -0.286255 0.3125 0.265625\nv -0.254592 0.3125 0.265625\nv -0.257812 0.317292 0.265625\nv -0.284199 0.320312 0.265625\nv -0.260078 0.320312 0.265625\nv -0.257812 0.320312 0.270042\nv -0.282177 0.328125 0.265625\nv -0.28125 0.33006 0.265625\nv -0.263641 0.328125 0.265625\nv -0.265625 0.332901 0.265625\nv -0.274775 0.335938 0.265625\nv -0.28125 0.335938 0.272451\nv -0.270246 0.335938 0.265625\nv -0.273438 0.337255 0.265625\nv -0.265625 0.335938 0.267667\nv -0.273438 0.34375 0.270817\nv -0.265625 0.34375 0.271357\nv -0.28125 0.546875 0.272579\nv -0.28125 0.554688 0.270827\nv -0.289062 0.5625 0.269728\nv -0.28125 0.568817 0.265625\nv -0.28125 0.5625 0.268318\nv -0.296875 0.570312 0.273415\nv -0.285004 0.570312 0.265625\nv -0.289062 0.571949 0.265625\nv -0.289062 0.570312 0.266339\nv -0.280617 0.570312 0.265625\nv -0.29274 0.578125 0.265625\nv -0.296875 0.578125 0.269329\nv -0.279158 0.578125 0.265625\nv -0.296634 0.585938 0.265625\nv -0.296875 0.586484 0.265625\nv -0.296875 0.585938 0.265867\nv -0.278193 0.585938 0.265625\nv -0.29883 0.59375 0.265625\nv -0.277864 0.59375 0.265625\nv -0.300196 0.601562 0.265625\nv -0.277983 0.601562 0.265625\nv -0.301465 0.609375 0.265625\nv -0.304688 0.609375 0.271386\nv -0.278195 0.609375 0.265625\nv -0.304246 0.617188 0.265625\nv -0.304688 0.618339 0.265625\nv -0.304688 0.617188 0.266563\nv -0.277372 0.617188 0.265625\nv -0.306427 0.625 0.265625\nv -0.274407 0.625 0.265625\nv -0.273438 0.630481 0.265625\nv -0.273438 0.625 0.268691\nv -0.310196 0.632812 0.265625\nv -0.3125 0.637362 0.265625\nv -0.273094 0.632812 0.265625\nv -0.314156 0.640625 0.265625\nv -0.273135 0.640625 0.265625\nv -0.317418 0.648438 0.265625\nv -0.272582 0.648438 0.265625\nv -0.318837 0.65625 0.265625\nv -0.271771 0.65625 0.265625\nv -0.319927 0.664062 0.265625\nv -0.320312 0.667421 0.265625\nv -0.320312 0.664062 0.268407\nv -0.271395 0.664062 0.265625\nv -0.320828 0.671875 0.265625\nv -0.271005 0.671875 0.265625\nv -0.321577 0.679688 0.265625\nv -0.270736 0.679688 0.265625\nv -0.322391 0.6875 0.265625\nv -0.271016 0.6875 0.265625\nv -0.322614 0.695312 0.265625\nv -0.271324 0.695312 0.265625\nv -0.322697 0.703125 0.265625\nv -0.271884 0.703125 0.265625\nv -0.322823 0.710938 0.265625\nv -0.272712 0.710938 0.265625\nv -0.273438 0.718535 0.265625\nv -0.322872 0.71875 0.265625\nv -0.273459 0.71875 0.265625\nv -0.273438 0.71875 0.2657\nv -0.322964 0.726562 0.265625\nv -0.274952 0.726562 0.265625\nv -0.273438 0.726562 0.270238\nv -0.32248 0.734375 0.265625\nv -0.277109 0.734375 0.265625\nv -0.32177 0.742188 0.265625\nv -0.279818 0.742188 0.265625\nv -0.28125 0.746249 0.265625\nv -0.320418 0.75 0.265625\nv -0.320312 0.750348 0.265625\nv -0.282645 0.75 0.265625\nv -0.28125 0.75 0.269125\nv -0.317584 0.757812 0.265625\nv -0.287419 0.757812 0.265625\nv -0.289062 0.759934 0.265625\nv -0.315718 0.765625 0.265625\nv -0.294646 0.765625 0.265625\nv -0.296875 0.768364 0.265625\nv -0.315045 0.773438 0.265625\nv -0.301767 0.773438 0.265625\nv -0.304688 0.777137 0.265625\nv -0.296875 0.773438 0.271416\nv -0.313846 0.78125 0.265625\nv -0.309565 0.78125 0.265625\nv -0.3125 0.785122 0.265625\nv -0.304688 0.78125 0.268403\nv -0.3125 0.789062 0.26745\nv -0.304688 0.789062 0.272318\nv -0.320312 0.796875 0.272629\nv -0.3125 0.796875 0.270975\nv 0.015625 -0.539104 0.273438\nv 0.0234375 -0.539981 0.273438\nv 0.03125 -0.539278 0.273438\nv 0 -0.533817 0.273438\nv 0.0154264 -0.539062 0.273438\nv 0.0078125 -0.537365 0.273438\nv 0.0078125 -0.539062 0.276202\nv 0.0324709 -0.539062 0.273438\nv 0.0390625 -0.537902 0.273438\nv 0.0390625 -0.539062 0.276476\nv 0.046875 -0.536809 0.273438\nv 0.0546875 -0.535296 0.273438\nv 0.0625 -0.533079 0.273438\nv -0.00393691 -0.53125 0.273438\nv -0.0078125 -0.528947 0.273438\nv -0.0078125 -0.53125 0.277487\nv 0.0666133 -0.53125 0.273438\nv 0.0703125 -0.529542 0.273438\nv 0.078125 -0.525437 0.273438\nv -0.015368 -0.523438 0.273438\nv -0.015625 -0.522997 0.273438\nv -0.015625 -0.523438 0.273884\nv 0.0812798 -0.523438 0.273438\nv 0.0859375 -0.518857 0.273438\nv -0.0211231 -0.515625 0.273438\nv -0.0234375 -0.515625 0.277247\nv 0.0890723 -0.515625 0.273438\nv 0.09375 -0.50947 0.273438\nv -0.023281 -0.507812 0.273438\nv -0.0234375 -0.507812 0.27372\nv -0.015625 -0.503303 0.273438\nv 0.0950761 -0.507812 0.273438\nv 0.09375 -0.505891 0.273438\nv -0.0106978 -0.5 0.273438\nv -0.0078125 -0.498431 0.273438\nv 0 -0.495317 0.273438\nv 0.0078125 -0.494291 0.273438\nv 0.015625 -0.493827 0.273438\nv 0.0234375 -0.493388 0.273438\nv 0.03125 -0.49275 0.273438\nv 0.0390625 -0.492241 0.273438\nv 0.0703125 -0.49265 0.273438\nv 0.078125 -0.494936 0.273438\nv 0.0889412 -0.5 0.273438\nv 0.0859375 -0.498106 0.273438\nv 0 -0.492188 0.280415\nv 0.0078125 -0.492188 0.277816\nv 0.015625 -0.492188 0.277199\nv 0.0234375 -0.492188 0.276376\nv 0.03125 -0.492188 0.274819\nv 0.0402169 -0.492188 0.273438\nv 0.0390625 -0.492188 0.273574\nv 0.046875 -0.491881 0.273438\nv 0.0546875 -0.49168 0.273438\nv 0.0673842 -0.492188 0.273438\nv 0.0625 -0.491594 0.273438\nv 0.0703125 -0.492188 0.275009\nv 0.460938 -0.063741 0.273438\nv 0.46875 -0.0634138 0.273438\nv 0.476562 -0.062839 0.273438\nv 0.484375 -0.0627573 0.273438\nv -0.289062 -0.0609863 0.273438\nv -0.289062 -0.0625 0.276331\nv -0.28125 -0.0606895 0.273438\nv -0.28125 -0.0625 0.276642\nv -0.273438 -0.0572586 0.273438\nv 0.45614 -0.0625 0.273438\nv 0.453125 -0.0601753 0.273438\nv 0.453125 -0.0625 0.277824\nv 0.484944 -0.0625 0.273438\nv 0.492188 -0.0548969 0.273438\nv -0.295113 -0.0546875 0.273438\nv -0.296875 -0.0525174 0.273438\nv -0.296875 -0.0546875 0.276886\nv -0.268817 -0.0546875 0.273438\nv -0.265625 -0.0531407 0.273438\nv -0.265625 -0.0546875 0.277339\nv 0.449703 -0.0546875 0.273438\nv 0.445312 -0.0480879 0.273438\nv 0.492313 -0.0546875 0.273438\nv -0.29899 -0.046875 0.273438\nv -0.258315 -0.046875 0.273438\nv -0.257812 -0.046187 0.273438\nv -0.257812 -0.046875 0.274309\nv 0.444546 -0.046875 0.273438\nv 0.497554 -0.046875 0.273438\nv -0.30167 -0.0390625 0.273438\nv -0.25538 -0.0390625 0.273438\nv 0.441646 -0.0390625 0.273438\nv 0.499983 -0.0390625 0.273438\nv 0.5 -0.0389803 0.273438\nv 0.5 -0.0390625 0.273505\nv -0.302561 -0.03125 0.273438\nv -0.254118 -0.03125 0.273438\nv 0.440617 -0.03125 0.273438\nv 0.501228 -0.03125 0.273438\nv -0.303052 -0.0234375 0.273438\nv -0.253 -0.0234375 0.273438\nv 0.44014 -0.0234375 0.273438\nv 0.502038 -0.0234375 0.273438\nv -0.304471 -0.015625 0.273438\nv -0.304688 -0.0144866 0.273438\nv -0.25193 -0.015625 0.273438\nv 0.439507 -0.015625 0.273438\nv 0.501559 -0.015625 0.273438\nv -0.305967 -0.0078125 0.273438\nv -0.25115 -0.0078125 0.273438\nv -0.25 -0.00124665 0.273438\nv -0.25 -0.0078125 0.278081\nv 0.43809 -0.0078125 0.273438\nv 0.4375 -0.00597911 0.273438\nv 0.4375 -0.0078125 0.276521\nv 0.500973 -0.0078125 0.273438\nv -0.306703 0 0.273438\nv -0.24963 0 0.273438\nv -0.242188 0.00722377 0.273438\nv 0.435573 0 0.273438\nv 0.500037 0 0.273438\nv 0.5 0.0003902 0.273438\nv -0.305823 0.0078125 0.273438\nv -0.241704 0.0078125 0.273438\nv -0.234375 0.0131637 0.273438\nv 0.433122 0.0078125 0.273438\nv 0.499298 0.0078125 0.273438\nv -0.304749 0.015625 0.273438\nv -0.304688 0.0161541 0.273438\nv -0.230437 0.015625 0.273438\nv -0.226562 0.0175068 0.273438\nv -0.21875 0.0211338 0.273438\nv 0.421875 0.0226861 0.273438\nv 0.431154 0.015625 0.273438\nv 0.429688 0.0179311 0.273438\nv 0.429688 0.015625 0.279695\nv 0.498961 0.015625 0.273438\nv -0.303801 0.0234375 0.273438\nv -0.213863 0.0234375 0.273438\nv -0.210938 0.0244005 0.273438\nv -0.203125 0.0261361 0.273438\nv -0.195312 0.0278583 0.273438\nv -0.1875 0.0291976 0.273438\nv -0.179688 0.0292663 0.273438\nv -0.171875 0.0290457 0.273438\nv -0.164062 0.0285709 0.273438\nv -0.15625 0.0281768 0.273438\nv -0.148438 0.0279107 0.273438\nv -0.140625 0.0277189 0.273438\nv -0.132812 0.0276362 0.273438\nv -0.125 0.0274844 0.273438\nv -0.117188 0.0272727 0.273438\nv -0.109375 0.0271918 0.273438\nv -0.101562 0.0272162 0.273438\nv -0.09375 0.0272538 0.273438\nv -0.0859375 0.0272804 0.273438\nv -0.078125 0.027293 0.273438\nv -0.0703125 0.0272156 0.273438\nv -0.0625 0.0269958 0.273438\nv -0.0546875 0.0267869 0.273438\nv -0.046875 0.0265432 0.273438\nv -0.0390625 0.0263599 0.273438\nv -0.03125 0.026241 0.273438\nv -0.0234375 0.02616 0.273438\nv -0.015625 0.026086 0.273438\nv -0.0078125 0.0260158 0.273438\nv 0 0.0259502 0.273438\nv 0.0078125 0.0258203 0.273438\nv 0.015625 0.0258015 0.273438\nv 0.0234375 0.025808 0.273438\nv 0.03125 0.0257907 0.273438\nv 0.0390625 0.0258041 0.273438\nv 0.046875 0.0258436 0.273438\nv 0.0546875 0.0258982 0.273438\nv 0.0625 0.0259335 0.273438\nv 0.0703125 0.0259077 0.273438\nv 0.078125 0.0258878 0.273438\nv 0.0859375 0.0258694 0.273438\nv 0.09375 0.0258266 0.273438\nv 0.101562 0.0258208 0.273438\nv 0.109375 0.025819 0.273438\nv 0.117188 0.0258148 0.273438\nv 0.125 0.0257835 0.273438\nv 0.132812 0.025768 0.273438\nv 0.140625 0.0257622 0.273438\nv 0.148438 0.0257655 0.273438\nv 0.15625 0.0257255 0.273438\nv 0.164062 0.0256919 0.273438\nv 0.171875 0.0256867 0.273438\nv 0.179688 0.0257024 0.273438\nv 0.1875 0.0257645 0.273438\nv 0.195312 0.0258436 0.273438\nv 0.203125 0.0259902 0.273438\nv 0.210938 0.0260745 0.273438\nv 0.21875 0.0261723 0.273438\nv 0.226562 0.0263229 0.273438\nv 0.234375 0.0264555 0.273438\nv 0.242188 0.0265695 0.273438\nv 0.25 0.0266743 0.273438\nv 0.257812 0.0267746 0.273438\nv 0.265625 0.0268983 0.273438\nv 0.273438 0.0270325 0.273438\nv 0.28125 0.0271457 0.273438\nv 0.289062 0.0272792 0.273438\nv 0.296875 0.0275971 0.273438\nv 0.304688 0.0277547 0.273438\nv 0.3125 0.0278091 0.273438\nv 0.320312 0.0279023 0.273438\nv 0.328125 0.0280244 0.273438\nv 0.335938 0.0281841 0.273438\nv 0.34375 0.0283507 0.273438\nv 0.351562 0.02857 0.273438\nv 0.359375 0.0286729 0.273438\nv 0.367188 0.0286363 0.273438\nv 0.375 0.0287855 0.273438\nv 0.382812 0.0287347 0.273438\nv 0.390625 0.0280128 0.273438\nv 0.398438 0.0275006 0.273438\nv 0.40625 0.0265786 0.273438\nv 0.420566 0.0234375 0.273438\nv 0.414062 0.0252388 0.273438\nv 0.498482 0.0234375 0.273438\nv -0.302888 0.03125 0.273438\nv 0.496891 0.03125 0.273438\nv -0.301378 0.0390625 0.273438\nv 0.493976 0.0390625 0.273438\nv 0.492188 0.0425523 0.273438\nv -0.29896 0.046875 0.273438\nv 0.48992 0.046875 0.273438\nv 0.484375 0.0530347 0.273438\nv -0.297011 0.0546875 0.273438\nv -0.296875 0.0551525 0.273438\nv 0.482436 0.0546875 0.273438\nv 0.476562 0.0594365 0.273438\nv -0.293849 0.0625 0.273438\nv -0.289062 0.0672775 0.273438\nv -0.28125 0.0691774 0.273438\nv 0.398438 0.0701624 0.273438\nv 0.40625 0.0698063 0.273438\nv 0.414062 0.0694957 0.273438\nv 0.421875 0.0695525 0.273438\nv 0.429688 0.0694983 0.273438\nv 0.4375 0.0693751 0.273438\nv 0.445312 0.068862 0.273438\nv 0.453125 0.0665943 0.273438\nv 0.460938 0.0643637 0.273438\nv 0.471049 0.0625 0.273438\nv 0.46875 0.0635548 0.273438\nv -0.277119 0.0703125 0.273438\nv -0.273438 0.072018 0.273438\nv -0.265625 0.0752759 0.273438\nv -0.195312 0.0779074 0.273438\nv -0.1875 0.0779384 0.273438\nv -0.179688 0.0779579 0.273438\nv -0.171875 0.0774176 0.273438\nv -0.164062 0.0767712 0.273438\nv -0.15625 0.0763957 0.273438\nv -0.148438 0.0760959 0.273438\nv -0.140625 0.0759302 0.273438\nv -0.132812 0.0757887 0.273438\nv -0.125 0.0756837 0.273438\nv -0.117188 0.0756252 0.273438\nv -0.109375 0.0755768 0.273438\nv -0.101562 0.0755518 0.273438\nv -0.09375 0.0755535 0.273438\nv -0.0859375 0.0754827 0.273438\nv -0.078125 0.0754457 0.273438\nv -0.0703125 0.0753847 0.273438\nv -0.0625 0.0753129 0.273438\nv -0.0546875 0.0752038 0.273438\nv -0.046875 0.0750891 0.273438\nv -0.0390625 0.0749514 0.273438\nv -0.03125 0.0747259 0.273438\nv -0.0234375 0.0744997 0.273438\nv -0.015625 0.0742661 0.273438\nv -0.0078125 0.0741512 0.273438\nv 0 0.073987 0.273438\nv 0.0078125 0.0737801 0.273438\nv 0.015625 0.0735802 0.273438\nv 0.0234375 0.073478 0.273438\nv 0.03125 0.0733963 0.273438\nv 0.0390625 0.073341 0.273438\nv 0.046875 0.0732534 0.273438\nv 0.0546875 0.0732018 0.273438\nv 0.0625 0.0731368 0.273438\nv 0.0703125 0.0731013 0.273438\nv 0.078125 0.0730954 0.273438\nv 0.0859375 0.0730471 0.273438\nv 0.09375 0.0730514 0.273438\nv 0.101562 0.0730373 0.273438\nv 0.109375 0.0730059 0.273438\nv 0.117188 0.0729973 0.273438\nv 0.125 0.0729642 0.273438\nv 0.132812 0.0729504 0.273438\nv 0.140625 0.0729515 0.273438\nv 0.148438 0.0729701 0.273438\nv 0.15625 0.0729546 0.273438\nv 0.164062 0.0729444 0.273438\nv 0.171875 0.0729476 0.273438\nv 0.179688 0.0729734 0.273438\nv 0.1875 0.0730175 0.273438\nv 0.195312 0.0730591 0.273438\nv 0.203125 0.0730481 0.273438\nv 0.210938 0.0730502 0.273438\nv 0.21875 0.0729815 0.273438\nv 0.226562 0.0728389 0.273438\nv 0.234375 0.0726872 0.273438\nv 0.242188 0.0725512 0.273438\nv 0.25 0.0724605 0.273438\nv 0.257812 0.0724418 0.273438\nv 0.265625 0.0724858 0.273438\nv 0.273438 0.0725538 0.273438\nv 0.28125 0.0726705 0.273438\nv 0.289062 0.0728148 0.273438\nv 0.296875 0.0729085 0.273438\nv 0.304688 0.0728178 0.273438\nv 0.3125 0.0727328 0.273438\nv 0.320312 0.072702 0.273438\nv 0.328125 0.0727151 0.273438\nv 0.335938 0.0726484 0.273438\nv 0.34375 0.0725102 0.273438\nv 0.351562 0.0721521 0.273438\nv 0.359375 0.0718276 0.273438\nv 0.367188 0.0715473 0.273438\nv 0.375 0.0712833 0.273438\nv 0.382812 0.0709425 0.273438\nv 0.394892 0.0703125 0.273438\nv 0.390625 0.0704894 0.273438\nv -0.262626 0.078125 0.273438\nv -0.226562 0.0854903 0.273438\nv -0.21875 0.0824638 0.273438\nv -0.210938 0.0792598 0.273438\nv -0.199754 0.078125 0.273438\nv -0.203125 0.0782882 0.273438\nv -0.195312 0.078125 0.280688\nv -0.258248 0.0859375 0.273438\nv -0.257812 0.0864964 0.273438\nv -0.25 0.0899418 0.273438\nv -0.242188 0.0923781 0.273438\nv -0.22932 0.0859375 0.273438\nv -0.234375 0.087644 0.273438\nv -0.226562 0.0859375 0.277183\nv -0.242188 0.09375 0.27639\nv -0.257812 0.125 0.281032\nv -0.25 0.125 0.280497\nv -0.242188 0.125 0.28099\nv -0.265625 0.132812 0.280409\nv -0.257812 0.132812 0.278997\nv -0.25 0.132812 0.279326\nv -0.242188 0.132812 0.280017\nv -0.273438 0.144877 0.273438\nv -0.273438 0.140625 0.277252\nv -0.265625 0.141443 0.273438\nv -0.265625 0.140625 0.274304\nv -0.257812 0.141876 0.273438\nv -0.257812 0.140625 0.274807\nv -0.25 0.140625 0.278133\nv -0.242188 0.140625 0.279455\nv -0.276789 0.148438 0.273438\nv -0.28125 0.154342 0.273438\nv -0.28125 0.148438 0.277862\nv -0.251769 0.148438 0.273438\nv -0.25 0.151666 0.273438\nv -0.25 0.148438 0.275102\nv -0.242188 0.148438 0.277169\nv -0.282119 0.15625 0.273438\nv -0.246152 0.15625 0.273438\nv -0.242188 0.15625 0.275999\nv -0.28581 0.164062 0.273438\nv -0.289062 0.171427 0.273438\nv -0.242333 0.164062 0.273438\nv -0.242188 0.164372 0.273438\nv -0.242188 0.164062 0.2736\nv -0.289287 0.171875 0.273438\nv -0.289062 0.171875 0.275377\nv -0.240595 0.171875 0.273438\nv -0.291799 0.179688 0.273438\nv -0.239798 0.179688 0.273438\nv -0.293874 0.1875 0.273438\nv -0.239291 0.1875 0.273438\nv -0.296464 0.195312 0.273438\nv -0.296875 0.196581 0.273438\nv -0.238888 0.195312 0.273438\nv -0.298761 0.203125 0.273438\nv -0.238214 0.203125 0.273438\nv -0.300839 0.210938 0.273438\nv -0.237311 0.210938 0.273438\nv -0.234375 0.210938 0.280614\nv -0.302245 0.21875 0.273438\nv -0.236599 0.21875 0.273438\nv -0.234375 0.21875 0.279634\nv -0.302913 0.226562 0.273438\nv -0.236133 0.226562 0.273438\nv -0.234375 0.226562 0.279633\nv -0.303174 0.234375 0.273438\nv -0.236064 0.234375 0.273438\nv -0.234375 0.234375 0.279567\nv -0.303091 0.242188 0.273438\nv -0.236208 0.242188 0.273438\nv -0.234375 0.242188 0.280282\nv -0.302668 0.25 0.273438\nv -0.236541 0.25 0.273438\nv -0.301855 0.257812 0.273438\nv -0.236822 0.257812 0.273438\nv -0.300729 0.265625 0.273438\nv -0.237698 0.265625 0.273438\nv -0.298971 0.273438 0.273438\nv -0.296875 0.281159 0.273438\nv -0.239439 0.273438 0.273438\nv -0.296849 0.28125 0.273438\nv -0.241246 0.28125 0.273438\nv -0.242188 0.284993 0.273438\nv -0.294799 0.289062 0.273438\nv -0.243416 0.289062 0.273438\nv -0.242188 0.289062 0.278067\nv -0.292317 0.296875 0.273438\nv -0.245603 0.296875 0.273438\nv -0.289351 0.304688 0.273438\nv -0.289062 0.305915 0.273438\nv -0.248469 0.304688 0.273438\nv -0.25 0.308258 0.273438\nv -0.286994 0.3125 0.273438\nv -0.251936 0.3125 0.273438\nv -0.25 0.3125 0.277394\nv -0.285774 0.320312 0.273438\nv -0.255902 0.320312 0.273438\nv -0.257812 0.327246 0.273438\nv -0.284368 0.328125 0.273438\nv -0.258104 0.328125 0.273438\nv -0.257812 0.328125 0.273752\nv -0.28177 0.335938 0.273438\nv -0.28125 0.336932 0.273438\nv -0.260084 0.335938 0.273438\nv -0.257812 0.335938 0.275263\nv -0.276107 0.34375 0.273438\nv -0.28125 0.34375 0.278252\nv -0.273438 0.34869 0.273438\nv -0.261639 0.34375 0.273438\nv -0.265625 0.351187 0.273438\nv -0.257812 0.34375 0.275734\nv -0.28125 0.351562 0.280648\nv -0.273438 0.351562 0.274328\nv -0.265625 0.351562 0.273533\nv -0.257812 0.351562 0.276393\nv -0.273438 0.359375 0.275824\nv -0.265625 0.359375 0.275409\nv -0.257812 0.359375 0.277852\nv -0.273438 0.367188 0.277874\nv -0.265625 0.367188 0.277761\nv -0.257812 0.367188 0.280407\nv -0.273438 0.375 0.27958\nv -0.265625 0.375 0.279528\nv -0.273438 0.429688 0.280923\nv -0.265625 0.429688 0.281143\nv -0.273438 0.4375 0.280074\nv -0.265625 0.4375 0.280313\nv -0.273438 0.445312 0.279024\nv -0.265625 0.445312 0.27974\nv -0.273438 0.453125 0.2774\nv -0.265625 0.453125 0.279428\nv -0.273438 0.460938 0.275509\nv -0.265625 0.460938 0.278769\nv -0.28125 0.46875 0.280908\nv -0.273438 0.46875 0.274933\nv -0.265625 0.46875 0.279269\nv -0.28125 0.476562 0.279758\nv -0.273438 0.476562 0.274089\nv -0.265625 0.476562 0.279971\nv -0.28125 0.484375 0.280385\nv -0.273438 0.484375 0.274745\nv -0.265625 0.484375 0.280607\nv -0.28125 0.492188 0.280895\nv -0.273438 0.492188 0.275527\nv -0.273438 0.5 0.276292\nv -0.28125 0.507812 0.280417\nv -0.273438 0.507812 0.276827\nv -0.28125 0.515625 0.279208\nv -0.273438 0.515625 0.277372\nv -0.28125 0.523438 0.278255\nv -0.273438 0.523438 0.277225\nv -0.28125 0.53125 0.276731\nv -0.273438 0.53125 0.2766\nv -0.289062 0.539062 0.28083\nv -0.28125 0.543123 0.273438\nv -0.28125 0.539062 0.274599\nv -0.273438 0.539062 0.275516\nv -0.282657 0.546875 0.273438\nv -0.289062 0.546875 0.27806\nv -0.277852 0.546875 0.273438\nv -0.273438 0.546875 0.27529\nv -0.288615 0.554688 0.273438\nv -0.289062 0.555034 0.273438\nv -0.289062 0.554688 0.273688\nv -0.27562 0.554688 0.273438\nv -0.273438 0.554688 0.27526\nv -0.293344 0.5625 0.273438\nv -0.296875 0.570268 0.273438\nv -0.296875 0.5625 0.278582\nv -0.274897 0.5625 0.273438\nv -0.273438 0.5625 0.275558\nv -0.296888 0.570312 0.273438\nv -0.275254 0.570312 0.273438\nv -0.273438 0.570312 0.276983\nv -0.299011 0.578125 0.273438\nv -0.275231 0.578125 0.273438\nv -0.273438 0.578125 0.278091\nv -0.30098 0.585938 0.273438\nv -0.304688 0.585938 0.280228\nv -0.275389 0.585938 0.273438\nv -0.273438 0.585938 0.27935\nv -0.302891 0.59375 0.273438\nv -0.304688 0.59375 0.276872\nv -0.275625 0.59375 0.273438\nv -0.273438 0.59375 0.280618\nv -0.304329 0.601562 0.273438\nv -0.304688 0.603565 0.273438\nv -0.304688 0.601562 0.274112\nv -0.275771 0.601562 0.273438\nv -0.305323 0.609375 0.273438\nv -0.27574 0.609375 0.273438\nv -0.306806 0.617188 0.273438\nv -0.275179 0.617188 0.273438\nv -0.273438 0.621543 0.273438\nv -0.273438 0.617188 0.279826\nv -0.308843 0.625 0.273438\nv -0.271897 0.625 0.273438\nv -0.3121 0.632812 0.273438\nv -0.3125 0.633545 0.273438\nv -0.3125 0.632812 0.274605\nv -0.270415 0.632812 0.273438\nv -0.316235 0.640625 0.273438\nv -0.270012 0.640625 0.273438\nv -0.318671 0.648438 0.273438\nv -0.320312 0.648438 0.280916\nv -0.269721 0.648438 0.273438\nv -0.320006 0.65625 0.273438\nv -0.320312 0.658566 0.273438\nv -0.320312 0.65625 0.274809\nv -0.269335 0.65625 0.273438\nv -0.321125 0.664062 0.273438\nv -0.268984 0.664062 0.273438\nv -0.321885 0.671875 0.273438\nv -0.268788 0.671875 0.273438\nv -0.322693 0.679688 0.273438\nv -0.268629 0.679688 0.273438\nv -0.323551 0.6875 0.273438\nv -0.268964 0.6875 0.273438\nv -0.323736 0.695312 0.273438\nv -0.269252 0.695312 0.273438\nv -0.323795 0.703125 0.273438\nv -0.269704 0.703125 0.273438\nv -0.323914 0.710938 0.273438\nv -0.270456 0.710938 0.273438\nv -0.323859 0.71875 0.273438\nv -0.271216 0.71875 0.273438\nv -0.323742 0.726562 0.273438\nv -0.272464 0.726562 0.273438\nv -0.273438 0.730887 0.273438\nv -0.323304 0.734375 0.273438\nv -0.274368 0.734375 0.273438\nv -0.273438 0.734375 0.276024\nv -0.322474 0.742188 0.273438\nv -0.276925 0.742188 0.273438\nv -0.320689 0.75 0.273438\nv -0.320312 0.751227 0.273438\nv -0.279533 0.75 0.273438\nv -0.28125 0.753805 0.273438\nv -0.318217 0.757812 0.273438\nv -0.28352 0.757812 0.273438\nv -0.289062 0.764995 0.273438\nv -0.28125 0.757812 0.27796\nv -0.31706 0.765625 0.273438\nv -0.289643 0.765625 0.273438\nv -0.289062 0.765625 0.27458\nv -0.317375 0.773438 0.273438\nv -0.295159 0.773438 0.273438\nv -0.296875 0.776814 0.273438\nv -0.317863 0.78125 0.273438\nv -0.320312 0.78125 0.278708\nv -0.299031 0.78125 0.273438\nv -0.296875 0.78125 0.276539\nv -0.319435 0.789062 0.273438\nv -0.320312 0.793394 0.273438\nv -0.320312 0.789062 0.274297\nv -0.303154 0.789062 0.273438\nv -0.304688 0.791534 0.273438\nv -0.320595 0.796875 0.273438\nv -0.320312 0.798788 0.273438\nv -0.308915 0.796875 0.273438\nv -0.3125 0.801019 0.273438\nv -0.304688 0.796875 0.277039\nv -0.320312 0.804688 0.275206\nv -0.3125 0.804688 0.275673\nv -0.304688 0.804688 0.281113\nv -0.320312 0.8125 0.28034\nv -0.3125 0.8125 0.281166\nv 0.0078125 -0.54222 0.28125\nv 0.0078125 -0.546875 0.287891\nv 0.015625 -0.543555 0.28125\nv 0.015625 -0.546875 0.286894\nv 0.0234375 -0.543516 0.28125\nv 0.0234375 -0.546875 0.288587\nv 0.03125 -0.542264 0.28125\nv 0.0390625 -0.540726 0.28125\nv -0.0078125 -0.533599 0.28125\nv -0.0078125 -0.539062 0.28581\nv 0.00068673 -0.539062 0.28125\nv 0 -0.538754 0.28125\nv 0 -0.539062 0.281522\nv 0.0465972 -0.539062 0.28125\nv 0.046875 -0.539004 0.28125\nv 0.046875 -0.539062 0.281394\nv 0.0546875 -0.537163 0.28125\nv 0.0546875 -0.539062 0.28811\nv 0.0625 -0.534395 0.28125\nv -0.0105745 -0.53125 0.28125\nv -0.015625 -0.526883 0.28125\nv -0.015625 -0.53125 0.285175\nv 0.0697362 -0.53125 0.28125\nv 0.0703125 -0.530968 0.28125\nv 0.0703125 -0.53125 0.281842\nv 0.078125 -0.526669 0.28125\nv -0.03125 -0.523438 0.28894\nv -0.019967 -0.523438 0.28125\nv -0.0234375 -0.518435 0.28125\nv -0.0234375 -0.523438 0.283818\nv 0.0833192 -0.523438 0.28125\nv 0.0859375 -0.521033 0.28125\nv 0.0859375 -0.523438 0.284367\nv -0.0258785 -0.515625 0.28125\nv -0.03125 -0.515625 0.28466\nv 0.0924093 -0.515625 0.28125\nv 0.09375 -0.514039 0.28125\nv 0.09375 -0.515625 0.282635\nv -0.0278356 -0.507812 0.28125\nv -0.03125 -0.507812 0.283526\nv -0.0234375 -0.505421 0.28125\nv -0.015625 -0.500222 0.28125\nv 0.0991508 -0.507812 0.28125\nv 0.09375 -0.500804 0.28125\nv 0.101562 -0.507812 0.283744\nv -0.0234375 -0.5 0.287447\nv -0.0153235 -0.5 0.28125\nv -0.015625 -0.5 0.281491\nv -0.0078125 -0.495235 0.28125\nv 0.078125 -0.492649 0.28125\nv 0.0930001 -0.5 0.28125\nv 0.0859375 -0.495808 0.28125\nv 0.09375 -0.5 0.281862\nv 0.101562 -0.5 0.288471\nv -0.000902382 -0.492188 0.28125\nv -0.0078125 -0.492188 0.285034\nv 0 -0.491879 0.28125\nv 0.0078125 -0.490758 0.28125\nv 0.015625 -0.490452 0.28125\nv 0.0234375 -0.49011 0.28125\nv 0.03125 -0.489566 0.28125\nv 0.0390625 -0.489229 0.28125\nv 0.046875 -0.489209 0.28125\nv 0.0546875 -0.489295 0.28125\nv 0.0625 -0.489469 0.28125\nv 0.076652 -0.492188 0.28125\nv 0.0703125 -0.490538 0.28125\nv 0.078125 -0.492188 0.281904\nv 0.0859375 -0.492188 0.286354\nv -0.289062 -0.0641172 0.28125\nv -0.28125 -0.064161 0.28125\nv 0.453125 -0.0631765 0.28125\nv 0.460938 -0.0649742 0.28125\nv 0.46875 -0.0647165 0.28125\nv 0.476562 -0.0644684 0.28125\nv 0.484375 -0.0652376 0.28125\nv -0.293851 -0.0625 0.28125\nv -0.296875 -0.0592842 0.28125\nv -0.296875 -0.0625 0.286609\nv -0.27721 -0.0625 0.28125\nv -0.273438 -0.060365 0.28125\nv -0.273438 -0.0625 0.284625\nv -0.265625 -0.0563387 0.28125\nv 0.451845 -0.0625 0.28125\nv 0.489656 -0.0625 0.28125\nv 0.492188 -0.059172 0.28125\nv 0.492188 -0.0625 0.283823\nv -0.297876 -0.0546875 0.28125\nv -0.262103 -0.0546875 0.28125\nv -0.257812 -0.0519135 0.28125\nv -0.257812 -0.0546875 0.286308\nv 0.447266 -0.0546875 0.28125\nv 0.445312 -0.0503714 0.28125\nv 0.445312 -0.0546875 0.284766\nv 0.49457 -0.0546875 0.28125\nv -0.299852 -0.046875 0.28125\nv -0.255771 -0.046875 0.28125\nv 0.443715 -0.046875 0.28125\nv 0.499689 -0.046875 0.28125\nv 0.5 -0.0459254 0.28125\nv 0.5 -0.046875 0.282039\nv -0.302242 -0.0390625 0.28125\nv -0.253735 -0.0390625 0.28125\nv 0.440095 -0.0390625 0.28125\nv 0.4375 -0.0390625 0.287172\nv 0.50142 -0.0390625 0.28125\nv -0.30297 -0.03125 0.28125\nv -0.253004 -0.03125 0.28125\nv 0.439065 -0.03125 0.28125\nv 0.4375 -0.03125 0.284473\nv 0.502577 -0.03125 0.28125\nv -0.303243 -0.0234375 0.28125\nv -0.251919 -0.0234375 0.28125\nv -0.25 -0.0234375 0.287387\nv 0.438631 -0.0234375 0.28125\nv 0.4375 -0.0234375 0.283867\nv 0.502983 -0.0234375 0.28125\nv -0.304671 -0.015625 0.28125\nv -0.304688 -0.0155373 0.28125\nv -0.304688 -0.015625 0.281364\nv -0.250578 -0.015625 0.28125\nv -0.25 -0.0118807 0.28125\nv -0.25 -0.015625 0.283309\nv 0.438059 -0.015625 0.28125\nv 0.4375 -0.0126892 0.28125\nv 0.4375 -0.015625 0.282996\nv 0.502005 -0.015625 0.28125\nv -0.306127 -0.0078125 0.28125\nv -0.248986 -0.0078125 0.28125\nv 0.436612 -0.0078125 0.28125\nv 0.501106 -0.0078125 0.28125\nv -0.306774 0 0.28125\nv -0.245411 0 0.28125\nv -0.242188 0.00325377 0.28125\nv -0.242188 0 0.287482\nv 0.43463 0 0.28125\nv 0.500175 0 0.28125\nv 0.5 0.00165421 0.28125\nv -0.306 0.0078125 0.28125\nv -0.238614 0.0078125 0.28125\nv -0.234375 0.0109615 0.28125\nv 0.431725 0.0078125 0.28125\nv 0.429688 0.0143333 0.28125\nv 0.499358 0.0078125 0.28125\nv -0.305106 0.015625 0.28125\nv -0.304688 0.0193821 0.28125\nv -0.227316 0.015625 0.28125\nv -0.226562 0.0160138 0.28125\nv -0.226562 0.015625 0.283534\nv -0.21875 0.0198743 0.28125\nv 0.428796 0.015625 0.28125\nv 0.421875 0.0200778 0.28125\nv 0.498937 0.015625 0.28125\nv -0.304202 0.0234375 0.28125\nv -0.304688 0.0234375 0.287388\nv -0.211961 0.0234375 0.28125\nv -0.210938 0.0238122 0.28125\nv -0.203125 0.0261932 0.28125\nv -0.195312 0.0276581 0.28125\nv -0.1875 0.0290015 0.28125\nv -0.179688 0.0291233 0.28125\nv -0.171875 0.0291993 0.28125\nv -0.164062 0.0289487 0.28125\nv -0.15625 0.0285699 0.28125\nv -0.148438 0.0283704 0.28125\nv -0.140625 0.0281779 0.28125\nv -0.132812 0.0281188 0.28125\nv -0.125 0.0278913 0.28125\nv -0.117188 0.0276775 0.28125\nv -0.109375 0.0275919 0.28125\nv -0.101562 0.0276467 0.28125\nv -0.09375 0.0276678 0.28125\nv -0.0859375 0.0275921 0.28125\nv -0.078125 0.0275294 0.28125\nv -0.0703125 0.0273999 0.28125\nv -0.0625 0.027263 0.28125\nv -0.0546875 0.0270833 0.28125\nv -0.046875 0.0268829 0.28125\nv -0.0390625 0.0267153 0.28125\nv -0.03125 0.0265932 0.28125\nv -0.0234375 0.0264643 0.28125\nv -0.015625 0.026366 0.28125\nv -0.0078125 0.0263025 0.28125\nv 0 0.0262366 0.28125\nv 0.0078125 0.026121 0.28125\nv 0.015625 0.0260837 0.28125\nv 0.0234375 0.0260751 0.28125\nv 0.03125 0.0260623 0.28125\nv 0.0390625 0.0260536 0.28125\nv 0.046875 0.026087 0.28125\nv 0.0546875 0.0261182 0.28125\nv 0.0625 0.026103 0.28125\nv 0.0703125 0.0260612 0.28125\nv 0.078125 0.0259832 0.28125\nv 0.0859375 0.0259217 0.28125\nv 0.09375 0.0258611 0.28125\nv 0.101562 0.0258218 0.28125\nv 0.109375 0.0257907 0.28125\nv 0.117188 0.0257834 0.28125\nv 0.125 0.0257715 0.28125\nv 0.132812 0.0257593 0.28125\nv 0.140625 0.0257629 0.28125\nv 0.148438 0.0257766 0.28125\nv 0.15625 0.0257505 0.28125\nv 0.164062 0.0257353 0.28125\nv 0.171875 0.0257561 0.28125\nv 0.179688 0.0257998 0.28125\nv 0.1875 0.0258536 0.28125\nv 0.195312 0.0259537 0.28125\nv 0.203125 0.0260673 0.28125\nv 0.210938 0.0262167 0.28125\nv 0.21875 0.02631 0.28125\nv 0.226562 0.0264428 0.28125\nv 0.234375 0.0265597 0.28125\nv 0.242188 0.0266772 0.28125\nv 0.25 0.0267566 0.28125\nv 0.257812 0.0268148 0.28125\nv 0.265625 0.0268728 0.28125\nv 0.273438 0.0269654 0.28125\nv 0.28125 0.0271136 0.28125\nv 0.289062 0.0273994 0.28125\nv 0.296875 0.0277017 0.28125\nv 0.304688 0.0279609 0.28125\nv 0.3125 0.0280841 0.28125\nv 0.320312 0.0282102 0.28125\nv 0.328125 0.0283969 0.28125\nv 0.335938 0.0285864 0.28125\nv 0.34375 0.0287711 0.28125\nv 0.351562 0.0289484 0.28125\nv 0.359375 0.0290014 0.28125\nv 0.367188 0.0289666 0.28125\nv 0.375 0.0289431 0.28125\nv 0.382812 0.0287855 0.28125\nv 0.390625 0.0280579 0.28125\nv 0.398438 0.0273667 0.28125\nv 0.40625 0.0260527 0.28125\nv 0.41627 0.0234375 0.28125\nv 0.414062 0.0241092 0.28125\nv 0.414062 0.0234375 0.285443\nv 0.498348 0.0234375 0.28125\nv -0.303183 0.03125 0.28125\nv 0.496841 0.03125 0.28125\nv -0.301692 0.0390625 0.28125\nv 0.494011 0.0390625 0.28125\nv 0.492188 0.0425267 0.28125\nv -0.299438 0.046875 0.28125\nv 0.489834 0.046875 0.28125\nv 0.484375 0.0530018 0.28125\nv -0.297792 0.0546875 0.28125\nv -0.296875 0.0578835 0.28125\nv 0.482312 0.0546875 0.28125\nv 0.476562 0.059167 0.28125\nv -0.295054 0.0625 0.28125\nv -0.289062 0.0693478 0.28125\nv -0.28125 0.0700844 0.28125\nv 0.398438 0.0699769 0.28125\nv 0.40625 0.0697772 0.28125\nv 0.414062 0.0694872 0.28125\nv 0.421875 0.069483 0.28125\nv 0.429688 0.0694763 0.28125\nv 0.4375 0.0693017 0.28125\nv 0.445312 0.0687956 0.28125\nv 0.453125 0.0666662 0.28125\nv 0.460938 0.0645482 0.28125\nv 0.470707 0.0625 0.28125\nv 0.46875 0.0633902 0.28125\nv -0.289062 0.0703125 0.283854\nv -0.280344 0.0703125 0.28125\nv -0.28125 0.0703125 0.282417\nv -0.273438 0.0734295 0.28125\nv -0.265625 0.0769128 0.28125\nv -0.1875 0.0779928 0.28125\nv -0.179688 0.0777564 0.28125\nv -0.171875 0.0772701 0.28125\nv -0.164062 0.0767527 0.28125\nv -0.15625 0.0764386 0.28125\nv -0.148438 0.0761581 0.28125\nv -0.140625 0.0760134 0.28125\nv -0.132812 0.075988 0.28125\nv -0.125 0.075821 0.28125\nv -0.117188 0.0755821 0.28125\nv -0.109375 0.0755452 0.28125\nv -0.101562 0.075609 0.28125\nv -0.09375 0.0756127 0.28125\nv -0.0859375 0.0755251 0.28125\nv -0.078125 0.0754368 0.28125\nv -0.0703125 0.0753216 0.28125\nv -0.0625 0.0752463 0.28125\nv -0.0546875 0.0751462 0.28125\nv -0.046875 0.075008 0.28125\nv -0.0390625 0.0748346 0.28125\nv -0.03125 0.0745897 0.28125\nv -0.0234375 0.0743628 0.28125\nv -0.015625 0.0741436 0.28125\nv -0.0078125 0.0739973 0.28125\nv 0 0.0738202 0.28125\nv 0.0078125 0.0736398 0.28125\nv 0.015625 0.0734422 0.28125\nv 0.0234375 0.0732459 0.28125\nv 0.03125 0.0731812 0.28125\nv 0.0390625 0.0731915 0.28125\nv 0.046875 0.0731606 0.28125\nv 0.0546875 0.0731055 0.28125\nv 0.0625 0.0730596 0.28125\nv 0.0703125 0.0730042 0.28125\nv 0.078125 0.0729787 0.28125\nv 0.0859375 0.0729131 0.28125\nv 0.09375 0.0729026 0.28125\nv 0.101562 0.0728874 0.28125\nv 0.109375 0.0728683 0.28125\nv 0.117188 0.0728572 0.28125\nv 0.125 0.0728288 0.28125\nv 0.132812 0.072782 0.28125\nv 0.140625 0.0727858 0.28125\nv 0.148438 0.0728253 0.28125\nv 0.15625 0.0728267 0.28125\nv 0.164062 0.0728185 0.28125\nv 0.171875 0.0728389 0.28125\nv 0.179688 0.0728542 0.28125\nv 0.1875 0.0729028 0.28125\nv 0.195312 0.0729374 0.28125\nv 0.203125 0.0729293 0.28125\nv 0.210938 0.0728682 0.28125\nv 0.21875 0.0727968 0.28125\nv 0.226562 0.0727311 0.28125\nv 0.234375 0.0725694 0.28125\nv 0.242188 0.0724503 0.28125\nv 0.25 0.0723371 0.28125\nv 0.257812 0.0723069 0.28125\nv 0.265625 0.0723091 0.28125\nv 0.273438 0.0723552 0.28125\nv 0.28125 0.0724598 0.28125\nv 0.289062 0.0725726 0.28125\nv 0.296875 0.0726691 0.28125\nv 0.304688 0.0726536 0.28125\nv 0.3125 0.0725181 0.28125\nv 0.320312 0.0724338 0.28125\nv 0.328125 0.0724007 0.28125\nv 0.335938 0.0722313 0.28125\nv 0.34375 0.0720291 0.28125\nv 0.351562 0.0719056 0.28125\nv 0.359375 0.0716667 0.28125\nv 0.367188 0.0714089 0.28125\nv 0.375 0.0711613 0.28125\nv 0.382812 0.0708323 0.28125\nv 0.391771 0.0703125 0.28125\nv 0.390625 0.070368 0.28125\nv 0.390625 0.0703125 0.283739\nv -0.264384 0.078125 0.28125\nv -0.265625 0.078125 0.285428\nv -0.21875 0.0834935 0.28125\nv -0.210938 0.0798711 0.28125\nv -0.203125 0.0787599 0.28125\nv -0.194513 0.078125 0.28125\nv -0.195312 0.0781409 0.28125\nv -0.195312 0.078125 0.282391\nv -0.260979 0.0859375 0.28125\nv -0.257812 0.0909394 0.28125\nv -0.25 0.0935155 0.28125\nv -0.234375 0.0918127 0.28125\nv -0.225269 0.0859375 0.28125\nv -0.226562 0.0867637 0.28125\nv -0.257812 0.09375 0.285046\nv -0.248871 0.09375 0.28125\nv -0.25 0.09375 0.281684\nv -0.237553 0.09375 0.28125\nv -0.242188 0.0958491 0.28125\nv -0.234375 0.09375 0.283007\nv -0.257812 0.101562 0.286889\nv -0.25 0.101562 0.285984\nv -0.257812 0.109375 0.283733\nv -0.25 0.109375 0.282995\nv -0.242188 0.109375 0.283149\nv -0.234375 0.109375 0.28834\nv -0.265625 0.117188 0.287098\nv -0.257812 0.123925 0.28125\nv -0.257812 0.117188 0.282664\nv -0.25 0.120642 0.28125\nv -0.25 0.117188 0.282002\nv -0.242188 0.122095 0.28125\nv -0.242188 0.117188 0.281885\nv -0.234375 0.117188 0.287316\nv -0.258487 0.125 0.28125\nv -0.265625 0.130613 0.28125\nv -0.265625 0.125 0.283794\nv -0.241826 0.125 0.28125\nv -0.234375 0.125 0.286649\nv -0.268469 0.132812 0.28125\nv -0.273438 0.135002 0.28125\nv -0.273438 0.132812 0.284205\nv -0.240247 0.132812 0.28125\nv -0.234375 0.132812 0.285009\nv -0.277726 0.140625 0.28125\nv -0.28125 0.144548 0.28125\nv -0.239552 0.140625 0.28125\nv -0.234375 0.140625 0.284369\nv -0.282884 0.148438 0.28125\nv -0.237199 0.148438 0.28125\nv -0.234375 0.148438 0.283269\nv -0.285517 0.15625 0.28125\nv -0.237605 0.15625 0.28125\nv -0.234375 0.15625 0.284223\nv -0.286992 0.164062 0.28125\nv -0.23799 0.164062 0.28125\nv -0.234375 0.164062 0.285522\nv -0.288436 0.171875 0.28125\nv -0.289062 0.175173 0.28125\nv -0.237061 0.171875 0.28125\nv -0.234375 0.171875 0.28525\nv -0.289979 0.179688 0.28125\nv -0.289062 0.179688 0.285922\nv -0.23637 0.179688 0.28125\nv -0.234375 0.179688 0.284753\nv -0.291861 0.1875 0.28125\nv -0.235697 0.1875 0.28125\nv -0.234375 0.1875 0.283866\nv -0.294468 0.195312 0.28125\nv -0.296875 0.202103 0.28125\nv -0.235419 0.195312 0.28125\nv -0.234375 0.195312 0.283629\nv -0.297257 0.203125 0.28125\nv -0.296875 0.203125 0.284073\nv -0.234806 0.203125 0.28125\nv -0.234375 0.208044 0.28125\nv -0.234375 0.203125 0.282288\nv -0.299982 0.210938 0.28125\nv -0.234122 0.210938 0.28125\nv -0.301826 0.21875 0.28125\nv -0.233817 0.21875 0.28125\nv -0.30269 0.226562 0.28125\nv -0.233934 0.226562 0.28125\nv -0.302978 0.234375 0.28125\nv -0.233934 0.234375 0.28125\nv -0.302848 0.242188 0.28125\nv -0.234135 0.242188 0.28125\nv -0.234375 0.24732 0.28125\nv -0.302294 0.25 0.28125\nv -0.234516 0.25 0.28125\nv -0.234375 0.25 0.281781\nv -0.301437 0.257812 0.28125\nv -0.234859 0.257812 0.28125\nv -0.234375 0.257812 0.283058\nv -0.300302 0.265625 0.28125\nv -0.235896 0.265625 0.28125\nv -0.234375 0.265625 0.286969\nv -0.298611 0.273438 0.28125\nv -0.296875 0.281217 0.28125\nv -0.237699 0.273438 0.28125\nv -0.296867 0.28125 0.28125\nv -0.239495 0.28125 0.28125\nv -0.295005 0.289062 0.28125\nv -0.241383 0.289062 0.28125\nv -0.242188 0.292709 0.28125\nv -0.292739 0.296875 0.28125\nv -0.24321 0.296875 0.28125\nv -0.242188 0.296875 0.284629\nv -0.29013 0.304688 0.28125\nv -0.289062 0.309378 0.28125\nv -0.245263 0.304688 0.28125\nv -0.288066 0.3125 0.28125\nv -0.289062 0.3125 0.284155\nv -0.248029 0.3125 0.28125\nv -0.25 0.319057 0.28125\nv -0.287557 0.320312 0.28125\nv -0.289062 0.320312 0.285475\nv -0.250431 0.320312 0.28125\nv -0.25 0.320312 0.281926\nv -0.286656 0.328125 0.28125\nv -0.289062 0.328125 0.288123\nv -0.251386 0.328125 0.28125\nv -0.25 0.328125 0.283119\nv -0.285299 0.335938 0.28125\nv -0.252796 0.335938 0.28125\nv -0.25 0.335938 0.284841\nv -0.283221 0.34375 0.28125\nv -0.253116 0.34375 0.28125\nv -0.25 0.34375 0.285708\nv -0.281733 0.351562 0.28125\nv -0.28125 0.354151 0.28125\nv -0.253534 0.351562 0.28125\nv -0.25 0.351562 0.286884\nv -0.280116 0.359375 0.28125\nv -0.28125 0.359375 0.282421\nv -0.254699 0.359375 0.28125\nv -0.25 0.359375 0.288545\nv -0.278264 0.367188 0.28125\nv -0.28125 0.367188 0.283817\nv -0.256974 0.367188 0.28125\nv -0.257812 0.369766 0.28125\nv -0.27597 0.375 0.28125\nv -0.28125 0.375 0.285424\nv -0.273438 0.380882 0.28125\nv -0.260742 0.375 0.28125\nv -0.265625 0.381855 0.28125\nv -0.257812 0.375 0.284573\nv -0.28125 0.382812 0.287477\nv -0.273438 0.382812 0.282017\nv -0.265625 0.382812 0.281822\nv -0.257812 0.382812 0.288116\nv -0.273438 0.390625 0.284307\nv -0.265625 0.390625 0.284532\nv -0.273438 0.398438 0.284872\nv -0.265625 0.398438 0.286194\nv -0.28125 0.40625 0.288572\nv -0.273438 0.40625 0.283729\nv -0.265625 0.40625 0.285291\nv -0.28125 0.414062 0.28821\nv -0.273438 0.414062 0.282345\nv -0.265625 0.414062 0.284136\nv -0.28125 0.421875 0.288087\nv -0.273438 0.423125 0.28125\nv -0.273438 0.421875 0.28135\nv -0.265625 0.428604 0.28125\nv -0.265625 0.421875 0.282782\nv -0.273942 0.429688 0.28125\nv -0.28125 0.429688 0.287653\nv -0.265375 0.429688 0.28125\nv -0.27507 0.4375 0.28125\nv -0.28125 0.4375 0.287274\nv -0.263901 0.4375 0.28125\nv -0.276256 0.445312 0.28125\nv -0.28125 0.445312 0.286639\nv -0.263456 0.445312 0.28125\nv -0.278212 0.453125 0.28125\nv -0.28125 0.453125 0.284739\nv -0.263636 0.453125 0.28125\nv -0.28025 0.460938 0.28125\nv -0.28125 0.466439 0.28125\nv -0.28125 0.460938 0.282609\nv -0.26378 0.460938 0.28125\nv -0.281484 0.46875 0.28125\nv -0.264354 0.46875 0.28125\nv -0.282262 0.476562 0.28125\nv -0.264946 0.476562 0.28125\nv -0.281843 0.484375 0.28125\nv -0.265302 0.484375 0.28125\nv -0.265625 0.488668 0.28125\nv -0.281518 0.492188 0.28125\nv -0.28125 0.497272 0.28125\nv -0.265964 0.492188 0.28125\nv -0.265625 0.492188 0.281772\nv -0.28096 0.5 0.28125\nv -0.28125 0.501372 0.28125\nv -0.28125 0.5 0.281551\nv -0.266509 0.5 0.28125\nv -0.265625 0.5 0.282589\nv -0.282026 0.507812 0.28125\nv -0.267725 0.507812 0.28125\nv -0.265625 0.507812 0.284546\nv -0.283298 0.515625 0.28125\nv -0.268737 0.515625 0.28125\nv -0.265625 0.515625 0.285906\nv -0.284632 0.523438 0.28125\nv -0.289062 0.523438 0.287249\nv -0.269471 0.523438 0.28125\nv -0.265625 0.523438 0.286859\nv -0.286349 0.53125 0.28125\nv -0.289062 0.537833 0.28125\nv -0.289062 0.53125 0.284824\nv -0.269527 0.53125 0.28125\nv -0.265625 0.53125 0.287475\nv -0.289498 0.539062 0.28125\nv -0.26946 0.539062 0.28125\nv -0.265625 0.539062 0.288153\nv -0.292414 0.546875 0.28125\nv -0.26973 0.546875 0.28125\nv -0.296349 0.554688 0.28125\nv -0.296875 0.556181 0.28125\nv -0.296875 0.554688 0.283666\nv -0.270184 0.554688 0.28125\nv -0.298372 0.5625 0.28125\nv -0.270838 0.5625 0.28125\nv -0.300512 0.570312 0.28125\nv -0.271649 0.570312 0.28125\nv -0.302826 0.578125 0.28125\nv -0.304688 0.583755 0.28125\nv -0.304688 0.578125 0.288104\nv -0.27234 0.578125 0.28125\nv -0.305093 0.585938 0.28125\nv -0.272832 0.585938 0.28125\nv -0.306273 0.59375 0.28125\nv -0.273248 0.59375 0.28125\nv -0.273438 0.598259 0.28125\nv -0.30719 0.601562 0.28125\nv -0.273575 0.601562 0.28125\nv -0.273438 0.601562 0.281686\nv -0.307835 0.609375 0.28125\nv -0.273733 0.609375 0.28125\nv -0.273438 0.612585 0.28125\nv -0.273438 0.609375 0.28227\nv -0.309422 0.617188 0.28125\nv -0.3125 0.617188 0.28905\nv -0.273006 0.617188 0.28125\nv -0.311421 0.625 0.28125\nv -0.3125 0.627618 0.28125\nv -0.3125 0.625 0.284012\nv -0.269119 0.625 0.28125\nv -0.265625 0.625 0.288256\nv -0.314708 0.632812 0.28125\nv -0.267993 0.632812 0.28125\nv -0.265625 0.632812 0.285889\nv -0.318234 0.640625 0.28125\nv -0.320312 0.648152 0.28125\nv -0.320312 0.640625 0.287629\nv -0.267188 0.640625 0.28125\nv -0.265625 0.640625 0.284258\nv -0.320396 0.648438 0.28125\nv -0.26711 0.648438 0.28125\nv -0.265625 0.648438 0.283911\nv -0.321997 0.65625 0.28125\nv -0.266917 0.65625 0.28125\nv -0.265625 0.65625 0.283726\nv -0.323225 0.664062 0.28125\nv -0.266584 0.664062 0.28125\nv -0.265625 0.664062 0.283298\nv -0.323971 0.671875 0.28125\nv -0.266505 0.671875 0.28125\nv -0.265625 0.671875 0.283392\nv -0.324688 0.679688 0.28125\nv -0.266361 0.679688 0.28125\nv -0.265625 0.679688 0.283192\nv -0.325331 0.6875 0.28125\nv -0.266763 0.6875 0.28125\nv -0.265625 0.6875 0.284475\nv -0.325385 0.695312 0.28125\nv -0.267144 0.695312 0.28125\nv -0.265625 0.695312 0.285875\nv -0.325374 0.703125 0.28125\nv -0.267557 0.703125 0.28125\nv -0.265625 0.703125 0.287124\nv -0.325491 0.710938 0.28125\nv -0.268251 0.710938 0.28125\nv -0.32534 0.71875 0.28125\nv -0.268974 0.71875 0.28125\nv -0.324907 0.726562 0.28125\nv -0.26997 0.726562 0.28125\nv -0.324228 0.734375 0.28125\nv -0.271618 0.734375 0.28125\nv -0.273438 0.740775 0.28125\nv -0.323384 0.742188 0.28125\nv -0.273872 0.742188 0.28125\nv -0.273438 0.742188 0.282472\nv -0.321773 0.75 0.28125\nv -0.320312 0.757513 0.28125\nv -0.276563 0.75 0.28125\nv -0.320243 0.757812 0.28125\nv -0.320312 0.757812 0.281547\nv -0.279865 0.757812 0.28125\nv -0.28125 0.760149 0.28125\nv -0.319169 0.765625 0.28125\nv -0.320312 0.765625 0.284734\nv -0.285757 0.765625 0.28125\nv -0.289062 0.772013 0.28125\nv -0.28125 0.765625 0.287859\nv -0.319877 0.773438 0.28125\nv -0.320312 0.775945 0.28125\nv -0.320312 0.773438 0.28264\nv -0.289839 0.773438 0.28125\nv -0.289062 0.773438 0.282446\nv -0.321093 0.78125 0.28125\nv -0.294014 0.78125 0.28125\nv -0.296875 0.78789 0.28125\nv -0.322786 0.789062 0.28125\nv -0.297424 0.789062 0.28125\nv -0.296875 0.789062 0.282161\nv -0.323734 0.796875 0.28125\nv -0.300786 0.796875 0.28125\nv -0.296875 0.796875 0.287257\nv -0.323463 0.804688 0.28125\nv -0.304547 0.804688 0.28125\nv -0.304688 0.804894 0.28125\nv -0.321261 0.8125 0.28125\nv -0.320312 0.81445 0.28125\nv -0.312341 0.8125 0.28125\nv -0.3125 0.81263 0.28125\nv -0.328125 0.820312 0.288433\nv -0.320312 0.820312 0.284545\nv -0.3125 0.820312 0.287703\nv -0.320312 0.828125 0.288907\nv 0.0078125 -0.547168 0.289062\nv 0.015625 -0.547382 0.289062\nv 0.0234375 -0.546966 0.289062\nv -0.0078125 -0.542527 0.289062\nv 0.00455262 -0.546875 0.289062\nv 0 -0.54594 0.289062\nv 0 -0.546875 0.291344\nv 0.0244216 -0.546875 0.289062\nv 0.03125 -0.545661 0.289062\nv 0.03125 -0.546875 0.294148\nv 0.0390625 -0.543945 0.289062\nv 0.046875 -0.54196 0.289062\nv 0.0546875 -0.539328 0.289062\nv -0.0234375 -0.539062 0.29649\nv -0.0125452 -0.539062 0.289062\nv -0.015625 -0.536145 0.289062\nv -0.015625 -0.539062 0.291487\nv 0.0554563 -0.539062 0.289062\nv 0.0625 -0.536797 0.289062\nv 0.0625 -0.539062 0.29622\nv 0.0703125 -0.533994 0.289062\nv -0.03125 -0.523576 0.289062\nv -0.03125 -0.53125 0.29497\nv -0.0212553 -0.53125 0.289062\nv -0.0234375 -0.529456 0.289062\nv -0.0234375 -0.53125 0.290566\nv 0.0762795 -0.53125 0.289062\nv 0.078125 -0.530255 0.289062\nv 0.078125 -0.53125 0.290517\nv 0.0859375 -0.525261 0.289062\nv -0.0314348 -0.523438 0.289062\nv -0.0390625 -0.523438 0.294067\nv 0.0887284 -0.523438 0.289062\nv 0.09375 -0.519093 0.289062\nv 0.09375 -0.523438 0.293653\nv 0.101562 -0.523438 0.296612\nv -0.046875 -0.515625 0.295618\nv -0.0374381 -0.515625 0.289062\nv -0.0390625 -0.515625 0.290247\nv 0.0977972 -0.515625 0.289062\nv 0.101562 -0.511438 0.289062\nv 0.101562 -0.515625 0.292178\nv 0.109375 -0.515625 0.294395\nv 0.117188 -0.515625 0.295785\nv -0.046875 -0.507812 0.294945\nv -0.0387184 -0.507812 0.289062\nv -0.0390625 -0.507812 0.289314\nv -0.03125 -0.503351 0.289062\nv 0.105428 -0.507812 0.289062\nv 0.109375 -0.507812 0.291053\nv 0.117188 -0.507812 0.293134\nv 0.125 -0.507812 0.29469\nv 0.132812 -0.507812 0.295878\nv 0.140625 -0.507812 0.296873\nv -0.0257347 -0.5 0.289062\nv -0.03125 -0.5 0.293095\nv -0.0234375 -0.498743 0.289062\nv -0.015625 -0.493783 0.289062\nv 0.09375 -0.494154 0.289062\nv 0.102328 -0.5 0.289062\nv 0.101562 -0.499519 0.289062\nv 0.109375 -0.5 0.291322\nv 0.117188 -0.5 0.293326\nv 0.125 -0.5 0.295108\nv 0.132812 -0.5 0.296595\nv -0.0131072 -0.492188 0.289062\nv -0.015625 -0.492188 0.291075\nv -0.0078125 -0.489488 0.289062\nv 0 -0.487155 0.289062\nv 0.0078125 -0.486485 0.289062\nv 0.015625 -0.48609 0.289062\nv 0.0234375 -0.485771 0.289062\nv 0.03125 -0.48549 0.289062\nv 0.0390625 -0.485245 0.289062\nv 0.046875 -0.485213 0.289062\nv 0.0546875 -0.485562 0.289062\nv 0.0625 -0.485733 0.289062\nv 0.0703125 -0.486211 0.289062\nv 0.078125 -0.487777 0.289062\nv 0.0900148 -0.492188 0.289062\nv 0.0859375 -0.490349 0.289062\nv 0.09375 -0.492188 0.290426\nv 0.101562 -0.492188 0.293235\nv 0.109375 -0.492188 0.295116\nv 0.117188 -0.492188 0.296828\nv 0 -0.484375 0.29411\nv 0.0078125 -0.484375 0.292941\nv 0.015625 -0.484375 0.292214\nv 0.0234375 -0.484375 0.291639\nv 0.03125 -0.484375 0.291208\nv 0.0390625 -0.484375 0.290725\nv 0.046875 -0.484375 0.290696\nv 0.0546875 -0.484375 0.291492\nv 0.0625 -0.484375 0.2918\nv 0.0703125 -0.484375 0.292437\nv 0.078125 -0.484375 0.294208\nv 0.0859375 -0.484375 0.295451\nv 0.09375 -0.484375 0.296456\nv -0.296875 -0.063213 0.289062\nv -0.289062 -0.0682524 0.289062\nv -0.289062 -0.0703125 0.29159\nv -0.28125 -0.0679946 0.289062\nv -0.28125 -0.0703125 0.291755\nv -0.273438 -0.0647301 0.289062\nv -0.273438 -0.0703125 0.296772\nv 0.453125 -0.065653 0.289062\nv 0.453125 -0.0703125 0.296151\nv 0.460938 -0.0676405 0.289062\nv 0.460938 -0.0703125 0.293047\nv 0.46875 -0.0675736 0.289062\nv 0.46875 -0.0703125 0.292532\nv 0.476562 -0.0682732 0.289062\nv 0.476562 -0.0703125 0.291491\nv 0.484375 -0.0695967 0.289062\nv 0.484375 -0.0703125 0.290054\nv 0.492188 -0.0660099 0.289062\nv 0.492188 -0.0703125 0.294825\nv -0.297175 -0.0625 0.289062\nv -0.268685 -0.0625 0.289062\nv -0.265625 -0.060863 0.289062\nv -0.265625 -0.0625 0.291287\nv -0.257812 -0.0558744 0.289062\nv 0.4375 -0.0625 0.295148\nv 0.445862 -0.0625 0.289062\nv 0.445312 -0.0615395 0.289062\nv 0.445312 -0.0625 0.289391\nv 0.495392 -0.0625 0.289062\nv 0.5 -0.0625 0.296047\nv -0.298549 -0.0546875 0.289062\nv -0.256916 -0.0546875 0.289062\nv 0.44273 -0.0546875 0.289062\nv 0.4375 -0.0546875 0.293761\nv 0.498712 -0.0546875 0.289062\nv 0.5 -0.0522634 0.289062\nv 0.5 -0.0546875 0.291109\nv -0.300336 -0.046875 0.289062\nv -0.25314 -0.046875 0.289062\nv 0.44007 -0.046875 0.289062\nv 0.4375 -0.0410662 0.289062\nv 0.4375 -0.046875 0.291779\nv 0.50181 -0.046875 0.289062\nv -0.302349 -0.0390625 0.289062\nv -0.251344 -0.0390625 0.289062\nv -0.25 -0.0390625 0.293587\nv 0.436861 -0.0390625 0.289062\nv 0.503114 -0.0390625 0.289062\nv -0.303226 -0.03125 0.289062\nv -0.250656 -0.03125 0.289062\nv -0.25 -0.0267957 0.289062\nv -0.25 -0.03125 0.290857\nv 0.435649 -0.03125 0.289062\nv 0.429688 -0.03125 0.296733\nv 0.503775 -0.03125 0.289062\nv -0.303719 -0.0234375 0.289062\nv -0.304688 -0.0194627 0.289062\nv -0.249379 -0.0234375 0.289062\nv 0.435543 -0.0234375 0.289062\nv 0.503507 -0.0234375 0.289062\nv -0.305721 -0.015625 0.289062\nv -0.24793 -0.015625 0.289062\nv 0.435651 -0.015625 0.289062\nv 0.502236 -0.015625 0.289062\nv -0.307256 -0.0078125 0.289062\nv -0.246339 -0.0078125 0.289062\nv -0.242188 -0.00103594 0.289062\nv -0.242188 -0.0078125 0.295477\nv 0.434998 -0.0078125 0.289062\nv 0.501109 -0.0078125 0.289062\nv -0.307326 0 0.289062\nv -0.241595 0 0.289062\nv 0.433201 0 0.289062\nv 0.500234 0 0.289062\nv 0.5 0.00200693 0.289062\nv 0.5 0 0.293444\nv -0.306622 0.0078125 0.289062\nv -0.235791 0.0078125 0.289062\nv -0.234375 0.00893294 0.289062\nv -0.234375 0.0078125 0.292833\nv -0.226562 0.0143409 0.289062\nv 0.430625 0.0078125 0.289062\nv 0.429688 0.0104074 0.289062\nv 0.429688 0.0078125 0.292869\nv 0.499322 0.0078125 0.289062\nv -0.305795 0.015625 0.289062\nv -0.224915 0.015625 0.289062\nv -0.21875 0.0190092 0.289062\nv 0.414062 0.0223605 0.289062\nv 0.425022 0.015625 0.289062\nv 0.421875 0.0174319 0.289062\nv 0.421875 0.015625 0.292988\nv 0.498918 0.015625 0.289062\nv -0.304829 0.0234375 0.289062\nv -0.304688 0.024419 0.289062\nv -0.211408 0.0234375 0.289062\nv -0.210938 0.0236353 0.289062\nv -0.210938 0.0234375 0.291077\nv -0.203125 0.0258674 0.289062\nv -0.195312 0.0275783 0.289062\nv -0.1875 0.0291834 0.289062\nv -0.179688 0.0295741 0.289062\nv -0.171875 0.0296881 0.289062\nv -0.164062 0.0295858 0.289062\nv -0.15625 0.0292764 0.289062\nv -0.148438 0.0289786 0.289062\nv -0.140625 0.0287686 0.289062\nv -0.132812 0.0285339 0.289062\nv -0.125 0.0282617 0.289062\nv -0.117188 0.0280765 0.289062\nv -0.109375 0.0279881 0.289062\nv -0.101562 0.0280139 0.289062\nv -0.09375 0.0280069 0.289062\nv -0.0859375 0.0279483 0.289062\nv -0.078125 0.0279014 0.289062\nv -0.0703125 0.0278041 0.289062\nv -0.0625 0.0275919 0.289062\nv -0.0546875 0.027404 0.289062\nv -0.046875 0.0271221 0.289062\nv -0.0390625 0.0268617 0.289062\nv -0.03125 0.0267182 0.289062\nv -0.0234375 0.0265947 0.289062\nv -0.015625 0.0264983 0.289062\nv -0.0078125 0.0264129 0.289062\nv 0 0.0263153 0.289062\nv 0.0078125 0.0262099 0.289062\nv 0.015625 0.0261802 0.289062\nv 0.0234375 0.0261647 0.289062\nv 0.03125 0.026154 0.289062\nv 0.0390625 0.0261479 0.289062\nv 0.046875 0.0261719 0.289062\nv 0.0546875 0.0261782 0.289062\nv 0.0625 0.0261695 0.289062\nv 0.0703125 0.0261441 0.289062\nv 0.078125 0.0260589 0.289062\nv 0.0859375 0.0259887 0.289062\nv 0.09375 0.0258989 0.289062\nv 0.101562 0.0258295 0.289062\nv 0.109375 0.0257711 0.289062\nv 0.117188 0.0257212 0.289062\nv 0.125 0.025676 0.289062\nv 0.132812 0.0256621 0.289062\nv 0.140625 0.0256938 0.289062\nv 0.148438 0.0257425 0.289062\nv 0.15625 0.0257691 0.289062\nv 0.164062 0.0258144 0.289062\nv 0.171875 0.025865 0.289062\nv 0.179688 0.0259161 0.289062\nv 0.1875 0.025972 0.289062\nv 0.195312 0.0260375 0.289062\nv 0.203125 0.0261547 0.289062\nv 0.210938 0.0263027 0.289062\nv 0.21875 0.0264295 0.289062\nv 0.226562 0.0265436 0.289062\nv 0.234375 0.0266428 0.289062\nv 0.242188 0.0267211 0.289062\nv 0.25 0.0267885 0.289062\nv 0.257812 0.026832 0.289062\nv 0.265625 0.0268664 0.289062\nv 0.273438 0.0269918 0.289062\nv 0.28125 0.0272395 0.289062\nv 0.289062 0.0275023 0.289062\nv 0.296875 0.0277589 0.289062\nv 0.304688 0.0280899 0.289062\nv 0.3125 0.0283334 0.289062\nv 0.320312 0.028476 0.289062\nv 0.328125 0.0285873 0.289062\nv 0.335938 0.0287228 0.289062\nv 0.34375 0.0289924 0.289062\nv 0.351562 0.0291415 0.289062\nv 0.359375 0.0291876 0.289062\nv 0.367188 0.0291463 0.289062\nv 0.375 0.0291134 0.289062\nv 0.382812 0.0288697 0.289062\nv 0.390625 0.028012 0.289062\nv 0.398438 0.0268121 0.289062\nv 0.41195 0.0234375 0.289062\nv 0.40625 0.0250059 0.289062\nv 0.498503 0.0234375 0.289062\nv -0.303763 0.03125 0.289062\nv -0.304688 0.03125 0.293211\nv 0.496843 0.03125 0.289062\nv -0.302286 0.0390625 0.289062\nv 0.494066 0.0390625 0.289062\nv 0.492188 0.0425167 0.289062\nv -0.300225 0.046875 0.289062\nv 0.489765 0.046875 0.289062\nv 0.484375 0.0531258 0.289062\nv -0.298411 0.0546875 0.289062\nv -0.296875 0.0602689 0.289062\nv 0.482375 0.0546875 0.289062\nv 0.476562 0.0588828 0.289062\nv -0.296155 0.0625 0.289062\nv -0.296875 0.0625 0.290887\nv 0.390625 0.0701902 0.289062\nv 0.398438 0.069813 0.289062\nv 0.40625 0.0696259 0.289062\nv 0.414062 0.0696051 0.289062\nv 0.421875 0.069413 0.289062\nv 0.429688 0.0693754 0.289062\nv 0.4375 0.069236 0.289062\nv 0.445312 0.0687465 0.289062\nv 0.453125 0.0667254 0.289062\nv 0.460938 0.0647213 0.289062\nv 0.470079 0.0625 0.289062\nv 0.46875 0.0631106 0.289062\nv -0.291939 0.0703125 0.289062\nv -0.296875 0.0703125 0.294766\nv -0.289062 0.0736044 0.289062\nv -0.28125 0.0734385 0.289062\nv -0.273438 0.0748233 0.289062\nv -0.195312 0.078029 0.289062\nv -0.1875 0.0776435 0.289062\nv -0.179688 0.0771546 0.289062\nv -0.171875 0.0767019 0.289062\nv -0.164062 0.0763462 0.289062\nv -0.15625 0.0761292 0.289062\nv -0.148438 0.0758682 0.289062\nv -0.140625 0.0757826 0.289062\nv -0.132812 0.0757847 0.289062\nv -0.125 0.0755952 0.289062\nv -0.117188 0.0753217 0.289062\nv -0.109375 0.0752722 0.289062\nv -0.101562 0.075459 0.289062\nv -0.09375 0.0755609 0.289062\nv -0.0859375 0.075519 0.289062\nv -0.078125 0.0754427 0.289062\nv -0.0703125 0.0753403 0.289062\nv -0.0625 0.0752748 0.289062\nv -0.0546875 0.0751597 0.289062\nv -0.046875 0.0749685 0.289062\nv -0.0390625 0.0747695 0.289062\nv -0.03125 0.0745179 0.289062\nv -0.0234375 0.0742649 0.289062\nv -0.015625 0.0740336 0.289062\nv -0.0078125 0.0738543 0.289062\nv 0 0.0736568 0.289062\nv 0.0078125 0.0734616 0.289062\nv 0.015625 0.0732521 0.289062\nv 0.0234375 0.0730524 0.289062\nv 0.03125 0.0729404 0.289062\nv 0.0390625 0.0728993 0.289062\nv 0.046875 0.0729143 0.289062\nv 0.0546875 0.0728682 0.289062\nv 0.0625 0.0728202 0.289062\nv 0.0703125 0.07276 0.289062\nv 0.078125 0.0726937 0.289062\nv 0.0859375 0.0726108 0.289062\nv 0.09375 0.0725993 0.289062\nv 0.101562 0.0725807 0.289062\nv 0.109375 0.0725635 0.289062\nv 0.117188 0.0725389 0.289062\nv 0.125 0.0724911 0.289062\nv 0.132812 0.0724255 0.289062\nv 0.140625 0.0724407 0.289062\nv 0.148438 0.072501 0.289062\nv 0.15625 0.0725399 0.289062\nv 0.164062 0.0725663 0.289062\nv 0.171875 0.0726052 0.289062\nv 0.179688 0.0726251 0.289062\nv 0.1875 0.0726623 0.289062\nv 0.195312 0.0727004 0.289062\nv 0.203125 0.0727189 0.289062\nv 0.210938 0.072648 0.289062\nv 0.21875 0.0725349 0.289062\nv 0.226562 0.0724951 0.289062\nv 0.234375 0.0723929 0.289062\nv 0.242188 0.0722686 0.289062\nv 0.25 0.0721458 0.289062\nv 0.257812 0.0720445 0.289062\nv 0.265625 0.0720295 0.289062\nv 0.273438 0.0720389 0.289062\nv 0.28125 0.0721156 0.289062\nv 0.289062 0.0722201 0.289062\nv 0.296875 0.0723188 0.289062\nv 0.304688 0.0723703 0.289062\nv 0.3125 0.072321 0.289062\nv 0.320312 0.0721996 0.289062\nv 0.328125 0.0720269 0.289062\nv 0.335938 0.0718447 0.289062\nv 0.34375 0.0717112 0.289062\nv 0.351562 0.0716121 0.289062\nv 0.359375 0.0715042 0.289062\nv 0.367188 0.0713002 0.289062\nv 0.375 0.0710437 0.289062\nv 0.388697 0.0703125 0.289062\nv 0.382812 0.070672 0.289062\nv -0.296875 0.078125 0.296579\nv -0.289062 0.078125 0.29177\nv -0.28125 0.078125 0.293609\nv -0.268447 0.078125 0.289062\nv -0.265625 0.0826273 0.289062\nv -0.21875 0.0849875 0.289062\nv -0.210938 0.0806734 0.289062\nv -0.196128 0.078125 0.289062\nv -0.203125 0.0789882 0.289062\nv -0.264382 0.0859375 0.289062\nv -0.265625 0.0859375 0.293339\nv -0.22134 0.0859375 0.289062\nv -0.226562 0.09004 0.289062\nv -0.259629 0.09375 0.289062\nv -0.242188 0.101059 0.289062\nv -0.229928 0.09375 0.289062\nv -0.234375 0.101234 0.289062\nv -0.226562 0.09375 0.295143\nv -0.259664 0.101562 0.289062\nv -0.243149 0.101562 0.289062\nv -0.242188 0.102238 0.289062\nv -0.242188 0.101562 0.289504\nv -0.234375 0.103082 0.289062\nv -0.234375 0.101562 0.289261\nv -0.264059 0.109375 0.289062\nv -0.265625 0.112483 0.289062\nv -0.265625 0.109375 0.291138\nv -0.233915 0.109375 0.289062\nv -0.268785 0.117188 0.289062\nv -0.273438 0.117188 0.295359\nv -0.233304 0.117188 0.289062\nv -0.272914 0.125 0.289062\nv -0.273438 0.125911 0.289062\nv -0.273438 0.125 0.290083\nv -0.232848 0.125 0.289062\nv -0.275994 0.132812 0.289062\nv -0.231933 0.132812 0.289062\nv -0.280404 0.140625 0.289062\nv -0.28125 0.142181 0.289062\nv -0.28125 0.140625 0.292161\nv -0.231472 0.140625 0.289062\nv -0.283293 0.148438 0.289062\nv -0.230696 0.148438 0.289062\nv -0.226562 0.148438 0.296775\nv -0.285579 0.15625 0.289062\nv -0.231123 0.15625 0.289062\nv -0.28635 0.164062 0.289062\nv -0.23217 0.164062 0.289062\nv -0.287079 0.171875 0.289062\nv -0.23228 0.171875 0.289062\nv -0.288456 0.179688 0.289062\nv -0.289062 0.182133 0.289062\nv -0.289062 0.179688 0.291864\nv -0.232359 0.179688 0.289062\nv -0.290657 0.1875 0.289062\nv -0.232199 0.1875 0.289062\nv -0.293439 0.195312 0.289062\nv -0.296875 0.195312 0.293693\nv -0.23205 0.195312 0.289062\nv -0.296241 0.203125 0.289062\nv -0.296875 0.20487 0.289062\nv -0.296875 0.203125 0.290087\nv -0.231632 0.203125 0.289062\nv -0.299315 0.210938 0.289062\nv -0.231446 0.210938 0.289062\nv -0.301198 0.21875 0.289062\nv -0.23142 0.21875 0.289062\nv -0.302325 0.226562 0.289062\nv -0.231756 0.226562 0.289062\nv -0.302849 0.234375 0.289062\nv -0.231939 0.234375 0.289062\nv -0.302496 0.242188 0.289062\nv -0.232271 0.242188 0.289062\nv -0.301836 0.25 0.289062\nv -0.232709 0.25 0.289062\nv -0.300907 0.257812 0.289062\nv -0.233056 0.257812 0.289062\nv -0.29983 0.265625 0.289062\nv -0.23392 0.265625 0.289062\nv -0.234375 0.268193 0.289062\nv -0.298404 0.273438 0.289062\nv -0.296875 0.280987 0.289062\nv -0.235621 0.273438 0.289062\nv -0.234375 0.273438 0.292331\nv -0.29682 0.28125 0.289062\nv -0.296875 0.28125 0.289892\nv -0.237476 0.28125 0.289062\nv -0.295298 0.289062 0.289062\nv -0.239248 0.289062 0.289062\nv -0.293479 0.296875 0.289062\nv -0.240869 0.296875 0.289062\nv -0.242188 0.304018 0.289062\nv -0.291365 0.304688 0.289062\nv -0.242322 0.304688 0.289062\nv -0.242188 0.304688 0.289392\nv -0.290292 0.3125 0.289062\nv -0.244287 0.3125 0.289062\nv -0.242188 0.3125 0.293349\nv -0.289928 0.320312 0.289062\nv -0.246225 0.320312 0.289062\nv -0.242188 0.320312 0.296113\nv -0.289263 0.328125 0.289062\nv -0.289062 0.332985 0.289062\nv -0.246585 0.328125 0.289062\nv -0.288905 0.335938 0.289062\nv -0.289062 0.335938 0.289344\nv -0.247125 0.335938 0.289062\nv -0.288533 0.34375 0.289062\nv -0.289062 0.34375 0.290052\nv -0.247682 0.34375 0.289062\nv -0.288178 0.351562 0.289062\nv -0.289062 0.351562 0.290974\nv -0.248575 0.351562 0.289062\nv -0.287129 0.359375 0.289062\nv -0.289062 0.359375 0.293328\nv -0.249621 0.359375 0.289062\nv -0.25 0.36061 0.289062\nv -0.285929 0.367188 0.289062\nv -0.289062 0.367188 0.295468\nv -0.25223 0.367188 0.289062\nv -0.25 0.367188 0.291832\nv -0.284454 0.375 0.289062\nv -0.254855 0.375 0.289062\nv -0.25 0.375 0.294608\nv -0.282665 0.382812 0.289062\nv -0.28125 0.389128 0.289062\nv -0.257101 0.382812 0.289062\nv -0.257812 0.386147 0.289062\nv -0.25 0.382812 0.296698\nv -0.280635 0.390625 0.289062\nv -0.28125 0.390625 0.289659\nv -0.25905 0.390625 0.289062\nv -0.257812 0.390625 0.290534\nv -0.280894 0.398438 0.289062\nv -0.28125 0.400628 0.289062\nv -0.28125 0.398438 0.289403\nv -0.260627 0.398438 0.289062\nv -0.257812 0.398438 0.291871\nv -0.281736 0.40625 0.289062\nv -0.260355 0.40625 0.289062\nv -0.257812 0.40625 0.291927\nv -0.282041 0.414062 0.289062\nv -0.26005 0.414062 0.289062\nv -0.257812 0.414062 0.292237\nv -0.282167 0.421875 0.289062\nv -0.259853 0.421875 0.289062\nv -0.257812 0.421875 0.292228\nv -0.282534 0.429688 0.289062\nv -0.259572 0.429688 0.289062\nv -0.257812 0.429688 0.292229\nv -0.282754 0.4375 0.289062\nv -0.259524 0.4375 0.289062\nv -0.257812 0.4375 0.292394\nv -0.282993 0.445312 0.289062\nv -0.259585 0.445312 0.289062\nv -0.257812 0.445312 0.292653\nv -0.283856 0.453125 0.289062\nv -0.259753 0.453125 0.289062\nv -0.257812 0.453125 0.293067\nv -0.284462 0.460938 0.289062\nv -0.2599 0.460938 0.289062\nv -0.257812 0.460938 0.293474\nv -0.285189 0.46875 0.289062\nv -0.260353 0.46875 0.289062\nv -0.257812 0.46875 0.294412\nv -0.285882 0.476562 0.289062\nv -0.289062 0.476562 0.296656\nv -0.260895 0.476562 0.289062\nv -0.257812 0.476562 0.295618\nv -0.28606 0.484375 0.289062\nv -0.289062 0.484375 0.295927\nv -0.261422 0.484375 0.289062\nv -0.257812 0.484375 0.296716\nv -0.286267 0.492188 0.289062\nv -0.289062 0.492188 0.29537\nv -0.261865 0.492188 0.289062\nv -0.257812 0.492188 0.296686\nv -0.286596 0.5 0.289062\nv -0.289062 0.5 0.294835\nv -0.262196 0.5 0.289062\nv -0.257812 0.5 0.296464\nv -0.287644 0.507812 0.289062\nv -0.289062 0.507812 0.292596\nv -0.263086 0.507812 0.289062\nv -0.288948 0.515625 0.289062\nv -0.289062 0.516117 0.289062\nv -0.289062 0.515625 0.289348\nv -0.26379 0.515625 0.289062\nv -0.290396 0.523438 0.289062\nv -0.264272 0.523438 0.289062\nv -0.292108 0.53125 0.289062\nv -0.264675 0.53125 0.289062\nv -0.293953 0.539062 0.289062\nv -0.296875 0.539062 0.295161\nv -0.265107 0.539062 0.289062\nv -0.265625 0.545827 0.289062\nv -0.296 0.546875 0.289062\nv -0.296875 0.550594 0.289062\nv -0.296875 0.546875 0.291362\nv -0.265707 0.546875 0.289062\nv -0.265625 0.546875 0.289218\nv -0.297967 0.554688 0.289062\nv -0.26635 0.554688 0.289062\nv -0.265625 0.554688 0.290355\nv -0.299901 0.5625 0.289062\nv -0.2671 0.5625 0.289062\nv -0.265625 0.5625 0.291502\nv -0.302391 0.570312 0.289062\nv -0.304688 0.577001 0.289062\nv -0.304688 0.570312 0.294212\nv -0.268015 0.570312 0.289062\nv -0.265625 0.570312 0.292724\nv -0.304902 0.578125 0.289062\nv -0.268812 0.578125 0.289062\nv -0.265625 0.578125 0.293454\nv -0.30651 0.585938 0.289062\nv -0.269459 0.585938 0.289062\nv -0.265625 0.585938 0.294008\nv -0.307855 0.59375 0.289062\nv -0.270038 0.59375 0.289062\nv -0.265625 0.59375 0.294425\nv -0.309111 0.601562 0.289062\nv -0.270524 0.601562 0.289062\nv -0.265625 0.601562 0.29473\nv -0.309992 0.609375 0.289062\nv -0.3125 0.617165 0.289062\nv -0.3125 0.609375 0.295721\nv -0.270792 0.609375 0.289062\nv -0.265625 0.609375 0.294882\nv -0.312505 0.617188 0.289062\nv -0.269975 0.617188 0.289062\nv -0.265625 0.624264 0.289062\nv -0.265625 0.617188 0.294083\nv -0.314512 0.625 0.289062\nv -0.265116 0.625 0.289062\nv -0.257812 0.625 0.296277\nv -0.317666 0.632812 0.289062\nv -0.320312 0.639424 0.289062\nv -0.320312 0.632812 0.294533\nv -0.263376 0.632812 0.289062\nv -0.257812 0.632812 0.295832\nv -0.32082 0.640625 0.289062\nv -0.262516 0.640625 0.289062\nv -0.257812 0.640625 0.295721\nv -0.32282 0.648438 0.289062\nv -0.262349 0.648438 0.289062\nv -0.324574 0.65625 0.289062\nv -0.262547 0.65625 0.289062\nv -0.325657 0.664062 0.289062\nv -0.328125 0.664062 0.295382\nv -0.262719 0.664062 0.289062\nv -0.32632 0.671875 0.289062\nv -0.328125 0.671875 0.293846\nv -0.263081 0.671875 0.289062\nv -0.326971 0.679688 0.289062\nv -0.328125 0.679688 0.292224\nv -0.26329 0.679688 0.289062\nv -0.327478 0.6875 0.289062\nv -0.328125 0.6875 0.290861\nv -0.263914 0.6875 0.289062\nv -0.327531 0.695312 0.289062\nv -0.328125 0.695312 0.290624\nv -0.26455 0.695312 0.289062\nv -0.327497 0.703125 0.289062\nv -0.328125 0.703125 0.29071\nv -0.264997 0.703125 0.289062\nv -0.265625 0.710123 0.289062\nv -0.327476 0.710938 0.289062\nv -0.328125 0.710938 0.290771\nv -0.265702 0.710938 0.289062\nv -0.265625 0.710938 0.28934\nv -0.327207 0.71875 0.289062\nv -0.328125 0.71875 0.291652\nv -0.266582 0.71875 0.289062\nv -0.265625 0.71875 0.292775\nv -0.326566 0.726562 0.289062\nv -0.328125 0.726562 0.29382\nv -0.267585 0.726562 0.289062\nv -0.265625 0.726562 0.296797\nv -0.325465 0.734375 0.289062\nv -0.269021 0.734375 0.289062\nv -0.324579 0.742188 0.289062\nv -0.27115 0.742188 0.289062\nv -0.273438 0.749709 0.289062\nv -0.323118 0.75 0.289062\nv -0.273533 0.75 0.289062\nv -0.273438 0.75 0.289368\nv -0.321812 0.757812 0.289062\nv -0.27673 0.757812 0.289062\nv -0.32159 0.765625 0.289062\nv -0.280622 0.765625 0.289062\nv -0.28125 0.767016 0.289062\nv -0.322138 0.773438 0.289062\nv -0.285014 0.773438 0.289062\nv -0.289062 0.780983 0.289062\nv -0.28125 0.773438 0.296072\nv -0.323442 0.78125 0.289062\nv -0.289216 0.78125 0.289062\nv -0.289062 0.78125 0.289283\nv -0.324912 0.789062 0.289062\nv -0.292884 0.789062 0.289062\nv -0.289062 0.789062 0.295422\nv -0.325986 0.796875 0.289062\nv -0.295885 0.796875 0.289062\nv -0.296875 0.79874 0.289062\nv -0.326559 0.804688 0.289062\nv -0.328125 0.804688 0.294483\nv -0.300311 0.804688 0.289062\nv -0.304688 0.811563 0.289062\nv -0.296875 0.804688 0.294535\nv -0.327275 0.8125 0.289062\nv -0.328125 0.817189 0.289062\nv -0.328125 0.8125 0.291082\nv -0.305276 0.8125 0.289062\nv -0.304688 0.8125 0.290036\nv -0.328472 0.820312 0.289062\nv -0.328125 0.822682 0.289062\nv -0.31116 0.820312 0.289062\nv -0.3125 0.822819 0.289062\nv -0.321028 0.828125 0.289062\nv -0.328125 0.828125 0.291476\nv -0.319843 0.828125 0.289062\nv -0.320312 0.828323 0.289062\nv -0.3125 0.828125 0.294062\nv -0.304688 -0.695312 0.304502\nv -0.296875 -0.695312 0.304558\nv -0.289062 -0.695312 0.304459\nv -0.28125 -0.695312 0.304534\nv -0.320312 -0.6875 0.30426\nv -0.3125 -0.6875 0.304335\nv -0.304688 -0.6875 0.304469\nv -0.296875 -0.6875 0.304433\nv -0.289062 -0.6875 0.304237\nv -0.28125 -0.6875 0.304125\nv -0.273438 -0.6875 0.304258\nv -0.320312 -0.679688 0.303692\nv -0.3125 -0.679688 0.303914\nv -0.304688 -0.679688 0.304546\nv -0.289062 -0.679688 0.304187\nv -0.28125 -0.679688 0.303889\nv -0.273438 -0.679688 0.304034\nv -0.328125 -0.671875 0.30466\nv -0.320312 -0.671875 0.303108\nv -0.3125 -0.671875 0.303462\nv -0.304688 -0.671875 0.304653\nv -0.289062 -0.671875 0.304294\nv -0.28125 -0.671875 0.303762\nv -0.273438 -0.671875 0.304078\nv -0.328125 -0.664062 0.304473\nv -0.320312 -0.664062 0.302594\nv -0.3125 -0.664062 0.302957\nv -0.304688 -0.664062 0.304638\nv -0.289062 -0.664062 0.304501\nv -0.28125 -0.664062 0.304038\nv -0.273438 -0.664062 0.304574\nv -0.320312 -0.65625 0.302279\nv -0.3125 -0.65625 0.302611\nv -0.304688 -0.65625 0.304536\nv -0.28125 -0.65625 0.304648\nv -0.320312 -0.648438 0.302124\nv -0.3125 -0.648438 0.3025\nv -0.304688 -0.648438 0.304287\nv -0.320312 -0.640625 0.302205\nv -0.3125 -0.640625 0.302253\nv -0.304688 -0.640625 0.30386\nv -0.296875 -0.640625 0.304678\nv -0.320312 -0.632812 0.302906\nv -0.3125 -0.632812 0.30248\nv -0.304688 -0.632812 0.303853\nv -0.320312 -0.625 0.303765\nv -0.3125 -0.625 0.303108\nv -0.304688 -0.625 0.303883\nv -0.3125 -0.617188 0.303899\nv -0.304688 -0.617188 0.304427\nv -0.3125 -0.609375 0.304507\nv 0 -0.547927 0.296875\nv 0.0078125 -0.548481 0.296875\nv 0.015625 -0.548382 0.296875\nv 0.0234375 -0.547869 0.296875\nv 0.03125 -0.547204 0.296875\nv -0.0234375 -0.539435 0.296875\nv -0.0234375 -0.546875 0.303815\nv -0.015625 -0.543421 0.296875\nv -0.015625 -0.546875 0.301369\nv -0.00765182 -0.546875 0.296875\nv -0.0078125 -0.546833 0.296875\nv -0.0078125 -0.546875 0.296951\nv 0.0337736 -0.546875 0.296875\nv 0.0390625 -0.545783 0.296875\nv 0.0390625 -0.546875 0.301989\nv 0.046875 -0.54389 0.296875\nv 0.0546875 -0.541573 0.296875\nv 0.0625 -0.539247 0.296875\nv -0.046875 -0.539062 0.304444\nv -0.0390625 -0.539062 0.301978\nv -0.0241419 -0.539062 0.296875\nv -0.03125 -0.533858 0.296875\nv -0.03125 -0.539062 0.299351\nv 0.0630558 -0.539062 0.296875\nv 0.0703125 -0.536699 0.296875\nv 0.0703125 -0.539062 0.30217\nv 0.078125 -0.534045 0.296875\nv -0.265625 -0.53125 0.304079\nv -0.257812 -0.53125 0.303294\nv -0.25 -0.53125 0.303326\nv -0.0546875 -0.53125 0.302833\nv -0.046875 -0.53125 0.300466\nv -0.0349471 -0.53125 0.296875\nv -0.0390625 -0.527637 0.296875\nv -0.0390625 -0.53125 0.298108\nv 0.0845646 -0.53125 0.296875\nv 0.0859375 -0.5305 0.296875\nv 0.0859375 -0.53125 0.298325\nv 0.09375 -0.526916 0.296875\nv 0.09375 -0.53125 0.302346\nv 0.101562 -0.523721 0.296875\nv 0.101562 -0.53125 0.304208\nv -0.273438 -0.523438 0.303897\nv -0.265625 -0.523438 0.301928\nv -0.257812 -0.523438 0.301182\nv -0.25 -0.523438 0.301148\nv -0.242188 -0.523438 0.30395\nv -0.0625 -0.523438 0.302855\nv -0.0546875 -0.523438 0.300431\nv -0.04361 -0.523438 0.296875\nv -0.046875 -0.518608 0.296875\nv -0.046875 -0.523438 0.297949\nv 0.10278 -0.523438 0.296875\nv 0.109375 -0.520823 0.296875\nv 0.109375 -0.523438 0.298369\nv 0.117188 -0.518043 0.296875\nv 0.117188 -0.523438 0.299911\nv 0.125 -0.523438 0.300917\nv 0.132812 -0.523438 0.301547\nv 0.140625 -0.523438 0.302227\nv 0.148438 -0.523438 0.302913\nv 0.15625 -0.523438 0.303851\nv -0.28125 -0.515625 0.303072\nv -0.273438 -0.515625 0.301266\nv -0.265625 -0.515625 0.300048\nv -0.257812 -0.515625 0.299316\nv -0.25 -0.515625 0.299238\nv -0.242188 -0.515625 0.301177\nv -0.0703125 -0.515625 0.303854\nv -0.0625 -0.515625 0.301299\nv -0.0489604 -0.515625 0.296875\nv -0.0546875 -0.515625 0.298761\nv 0.124547 -0.515625 0.296875\nv 0.125 -0.515385 0.296875\nv 0.125 -0.515625 0.296949\nv 0.132812 -0.511691 0.296875\nv 0.132812 -0.515625 0.297884\nv 0.140625 -0.507823 0.296875\nv 0.140625 -0.515625 0.298682\nv 0.148438 -0.515625 0.299539\nv 0.15625 -0.515625 0.300279\nv 0.164062 -0.515625 0.300805\nv 0.171875 -0.515625 0.301498\nv 0.179688 -0.515625 0.302511\nv 0.1875 -0.515625 0.303556\nv 0.195312 -0.515625 0.304092\nv -0.28125 -0.507812 0.302583\nv -0.273438 -0.507812 0.301164\nv -0.265625 -0.507812 0.300095\nv -0.257812 -0.507812 0.299645\nv -0.25 -0.507812 0.299775\nv -0.242188 -0.507812 0.301741\nv -0.0703125 -0.507812 0.303541\nv -0.0625 -0.507812 0.300971\nv -0.0498354 -0.507812 0.296875\nv -0.0546875 -0.507812 0.298487\nv -0.046875 -0.506262 0.296875\nv -0.0390625 -0.50154 0.296875\nv 0.140646 -0.507812 0.296875\nv 0.140625 -0.5078 0.296875\nv 0.148438 -0.507812 0.297579\nv 0.15625 -0.507812 0.298245\nv 0.164062 -0.507812 0.298687\nv 0.171875 -0.507812 0.298973\nv 0.179688 -0.507812 0.299636\nv 0.1875 -0.507812 0.30054\nv 0.195312 -0.507812 0.301489\nv 0.203125 -0.507812 0.302385\nv 0.210938 -0.507812 0.30386\nv -0.0546875 -0.5 0.303747\nv -0.046875 -0.5 0.300985\nv -0.036515 -0.5 0.296875\nv -0.0390625 -0.5 0.297898\nv -0.03125 -0.497127 0.296875\nv -0.0234375 -0.492582 0.296875\nv 0.125 -0.494889 0.296875\nv 0.134292 -0.5 0.296875\nv 0.132812 -0.499119 0.296875\nv 0.140625 -0.5 0.298154\nv 0.148438 -0.5 0.29899\nv 0.15625 -0.5 0.299433\nv 0.164062 -0.5 0.300205\nv 0.171875 -0.5 0.300904\nv 0.179688 -0.5 0.30176\nv 0.1875 -0.5 0.302654\nv 0.195312 -0.5 0.303394\nv 0.203125 -0.5 0.304171\nv -0.0390625 -0.492188 0.30342\nv -0.03125 -0.492188 0.300489\nv -0.0228339 -0.492188 0.296875\nv -0.0234375 -0.492188 0.297173\nv -0.015625 -0.488301 0.296875\nv -0.0078125 -0.484479 0.296875\nv 0.101562 -0.485679 0.296875\nv 0.109375 -0.488544 0.296875\nv 0.117484 -0.492188 0.296875\nv 0.117188 -0.49208 0.296875\nv 0.125 -0.492188 0.298136\nv 0.132812 -0.492188 0.29965\nv 0.140625 -0.492188 0.300987\nv 0.148438 -0.492188 0.302126\nv 0.15625 -0.492188 0.30302\nv 0.164062 -0.492188 0.303754\nv 0.171875 -0.492188 0.304408\nv -0.0234375 -0.484375 0.304022\nv -0.015625 -0.484375 0.301152\nv -0.00738011 -0.484375 0.296875\nv -0.0078125 -0.484375 0.297021\nv 0 -0.482973 0.296875\nv 0.0078125 -0.48241 0.296875\nv 0.015625 -0.482065 0.296875\nv 0.0234375 -0.481725 0.296875\nv 0.03125 -0.481532 0.296875\nv 0.0390625 -0.481308 0.296875\nv 0.046875 -0.481391 0.296875\nv 0.0546875 -0.481875 0.296875\nv 0.0625 -0.482055 0.296875\nv 0.0703125 -0.482314 0.296875\nv 0.078125 -0.482824 0.296875\nv 0.0859375 -0.483289 0.296875\nv 0.0962306 -0.484375 0.296875\nv 0.09375 -0.483974 0.296875\nv 0.101562 -0.484375 0.297785\nv 0.109375 -0.484375 0.299489\nv 0.117188 -0.484375 0.300973\nv 0.125 -0.484375 0.302484\nv 0.132812 -0.484375 0.303813\nv -0.265625 -0.234375 0.304462\nv -0.257812 -0.234375 0.304239\nv -0.265625 -0.226562 0.304314\nv -0.257812 -0.226562 0.304012\nv -0.25 -0.226562 0.304442\nv -0.265625 -0.21875 0.303997\nv -0.257812 -0.21875 0.30365\nv -0.25 -0.21875 0.303878\nv -0.265625 -0.210938 0.304179\nv -0.257812 -0.210938 0.303479\nv -0.25 -0.210938 0.303323\nv -0.242188 -0.210938 0.304489\nv -0.265625 -0.203125 0.304323\nv -0.257812 -0.203125 0.303576\nv -0.25 -0.203125 0.303599\nv -0.242188 -0.203125 0.304495\nv -0.257812 -0.195312 0.303794\nv -0.25 -0.195312 0.304381\nv -0.28125 -0.09375 0.304546\nv 0.460938 -0.09375 0.303681\nv 0.46875 -0.09375 0.303354\nv 0.476562 -0.09375 0.302558\nv 0.484375 -0.09375 0.302763\nv -0.289062 -0.0859375 0.302707\nv -0.28125 -0.0859375 0.302574\nv 0.453125 -0.0859375 0.303502\nv 0.460938 -0.0859375 0.301681\nv 0.46875 -0.0859375 0.301243\nv 0.476562 -0.0859375 0.300051\nv 0.484375 -0.0859375 0.300123\nv 0.492188 -0.0859375 0.303119\nv -0.296875 -0.078125 0.303233\nv -0.289062 -0.0747149 0.296875\nv -0.289062 -0.078125 0.29941\nv -0.28125 -0.0744059 0.296875\nv -0.28125 -0.078125 0.300019\nv -0.273438 -0.0703827 0.296875\nv -0.273438 -0.078125 0.303404\nv 0.445312 -0.078125 0.303396\nv 0.453125 -0.0710162 0.296875\nv 0.453125 -0.078125 0.301235\nv 0.460938 -0.0741461 0.296875\nv 0.460938 -0.078125 0.299267\nv 0.46875 -0.0747792 0.296875\nv 0.46875 -0.078125 0.298946\nv 0.476562 -0.0769248 0.296875\nv 0.476562 -0.078125 0.297531\nv 0.484375 -0.0775585 0.296875\nv 0.484375 -0.078125 0.297165\nv 0.492188 -0.0723374 0.296875\nv 0.492188 -0.078125 0.299967\nv -0.294786 -0.0703125 0.296875\nv -0.296875 -0.0676542 0.296875\nv -0.296875 -0.0703125 0.298588\nv -0.273323 -0.0703125 0.296875\nv -0.265625 -0.0657577 0.296875\nv -0.265625 -0.0703125 0.303624\nv 0.4375 -0.0645198 0.296875\nv 0.4375 -0.0703125 0.301265\nv 0.450984 -0.0703125 0.296875\nv 0.445312 -0.0688406 0.296875\nv 0.445312 -0.0703125 0.298411\nv 0.493729 -0.0703125 0.296875\nv 0.5 -0.0631856 0.296875\nv 0.5 -0.0703125 0.304138\nv -0.298474 -0.0625 0.296875\nv -0.258848 -0.0625 0.296875\nv -0.257812 -0.0617679 0.296875\nv -0.257812 -0.0625 0.297861\nv 0.435216 -0.0625 0.296875\nv 0.429688 -0.0625 0.301442\nv 0.500388 -0.0625 0.296875\nv -0.299438 -0.0546875 0.296875\nv -0.252847 -0.0546875 0.296875\nv -0.25 -0.0546875 0.300603\nv 0.433652 -0.0546875 0.296875\nv 0.429688 -0.0546875 0.300371\nv 0.50212 -0.0546875 0.296875\nv -0.300811 -0.046875 0.296875\nv -0.250152 -0.046875 0.296875\nv -0.25 -0.0459851 0.296875\nv -0.25 -0.046875 0.297208\nv 0.421875 -0.046875 0.304673\nv 0.432528 -0.046875 0.296875\nv 0.429688 -0.046875 0.299617\nv 0.50358 -0.046875 0.296875\nv -0.302581 -0.0390625 0.296875\nv -0.248849 -0.0390625 0.296875\nv 0.421875 -0.0390625 0.302683\nv 0.430567 -0.0390625 0.296875\nv 0.429688 -0.0326006 0.296875\nv 0.429688 -0.0390625 0.297856\nv 0.504301 -0.0390625 0.296875\nv -0.303346 -0.03125 0.296875\nv -0.247558 -0.03125 0.296875\nv 0.429479 -0.03125 0.296875\nv 0.421875 -0.03125 0.302418\nv 0.429688 -0.0303717 0.296875\nv 0.503937 -0.03125 0.296875\nv -0.304415 -0.0234375 0.296875\nv -0.304688 -0.0224127 0.296875\nv -0.304688 -0.0234375 0.298799\nv -0.246069 -0.0234375 0.296875\nv 0.421875 -0.0234375 0.302647\nv 0.430681 -0.0234375 0.296875\nv 0.429688 -0.0234375 0.298107\nv 0.503386 -0.0234375 0.296875\nv -0.306468 -0.015625 0.296875\nv -0.24382 -0.015625 0.296875\nv -0.242188 -0.0102036 0.296875\nv -0.242188 -0.015625 0.30025\nv 0.421875 -0.015625 0.303719\nv 0.43125 -0.015625 0.296875\nv 0.429688 -0.015625 0.29879\nv 0.502072 -0.015625 0.296875\nv -0.307615 -0.0078125 0.296875\nv -0.241303 -0.0078125 0.296875\nv 0.421875 -0.0078125 0.303546\nv 0.431095 -0.0078125 0.296875\nv 0.429688 -0.0078125 0.298634\nv 0.500714 -0.0078125 0.296875\nv 0.5 -0.00149785 0.296875\nv -0.308016 0 0.296875\nv -0.237813 0 0.296875\nv -0.234375 0.0055544 0.296875\nv -0.234375 0 0.302929\nv 0.421875 0 0.302207\nv 0.429836 0 0.296875\nv 0.429688 0.00132343 0.296875\nv 0.429688 0 0.297076\nv 0.499823 0 0.296875\nv -0.307844 0.0078125 0.296875\nv -0.232941 0.0078125 0.296875\nv -0.226562 0.0130438 0.296875\nv 0.427282 0.0078125 0.296875\nv 0.421875 0.0127967 0.296875\nv 0.421875 0.0078125 0.299966\nv 0.49939 0.0078125 0.296875\nv -0.307468 0.015625 0.296875\nv -0.223331 0.015625 0.296875\nv -0.21875 0.0182344 0.296875\nv -0.210938 0.0226141 0.296875\nv 0.419535 0.015625 0.296875\nv 0.414062 0.0197608 0.296875\nv 0.414062 0.015625 0.302751\nv 0.499205 0.015625 0.296875\nv -0.306722 0.0234375 0.296875\nv -0.209288 0.0234375 0.296875\nv -0.203125 0.0255591 0.296875\nv -0.195312 0.0277129 0.296875\nv -0.1875 0.0294067 0.296875\nv -0.179688 0.0298422 0.296875\nv -0.171875 0.0299697 0.296875\nv -0.164062 0.0300502 0.296875\nv -0.15625 0.0301306 0.296875\nv -0.148438 0.0298795 0.296875\nv -0.140625 0.0294922 0.296875\nv -0.132812 0.0291016 0.296875\nv -0.125 0.0287985 0.296875\nv -0.117188 0.0284996 0.296875\nv -0.109375 0.0283719 0.296875\nv -0.101562 0.0283508 0.296875\nv -0.09375 0.0283542 0.296875\nv -0.0859375 0.0283163 0.296875\nv -0.078125 0.0283119 0.296875\nv -0.0703125 0.0282205 0.296875\nv -0.0625 0.0279566 0.296875\nv -0.0546875 0.0277115 0.296875\nv -0.046875 0.0274787 0.296875\nv -0.0390625 0.0272359 0.296875\nv -0.03125 0.0270614 0.296875\nv -0.0234375 0.0268776 0.296875\nv -0.015625 0.0266998 0.296875\nv -0.0078125 0.0266259 0.296875\nv 0 0.0265378 0.296875\nv 0.0078125 0.0264532 0.296875\nv 0.015625 0.0264162 0.296875\nv 0.0234375 0.0264154 0.296875\nv 0.03125 0.0264034 0.296875\nv 0.0390625 0.0263976 0.296875\nv 0.046875 0.0264045 0.296875\nv 0.0546875 0.0264375 0.296875\nv 0.0625 0.0264605 0.296875\nv 0.0703125 0.0264241 0.296875\nv 0.078125 0.0263491 0.296875\nv 0.0859375 0.0262458 0.296875\nv 0.09375 0.0261574 0.296875\nv 0.101562 0.0260821 0.296875\nv 0.109375 0.0260264 0.296875\nv 0.117188 0.0259879 0.296875\nv 0.125 0.0259338 0.296875\nv 0.132812 0.0258933 0.296875\nv 0.140625 0.0258954 0.296875\nv 0.148438 0.025961 0.296875\nv 0.15625 0.0260122 0.296875\nv 0.164062 0.0260352 0.296875\nv 0.171875 0.0260861 0.296875\nv 0.179688 0.0261146 0.296875\nv 0.1875 0.0261073 0.296875\nv 0.195312 0.0260867 0.296875\nv 0.203125 0.0261393 0.296875\nv 0.210938 0.0262394 0.296875\nv 0.21875 0.0263693 0.296875\nv 0.226562 0.0265033 0.296875\nv 0.234375 0.0265779 0.296875\nv 0.242188 0.0266442 0.296875\nv 0.25 0.0266908 0.296875\nv 0.257812 0.0267051 0.296875\nv 0.265625 0.0268678 0.296875\nv 0.273438 0.0270341 0.296875\nv 0.28125 0.0272325 0.296875\nv 0.289062 0.0274796 0.296875\nv 0.296875 0.0277776 0.296875\nv 0.304688 0.0280846 0.296875\nv 0.3125 0.0282966 0.296875\nv 0.320312 0.0283404 0.296875\nv 0.328125 0.0284807 0.296875\nv 0.335938 0.0286377 0.296875\nv 0.34375 0.0288375 0.296875\nv 0.351562 0.0290498 0.296875\nv 0.359375 0.0292226 0.296875\nv 0.367188 0.0293246 0.296875\nv 0.375 0.029312 0.296875\nv 0.382812 0.0289268 0.296875\nv 0.390625 0.0276982 0.296875\nv 0.398438 0.026007 0.296875\nv 0.407555 0.0234375 0.296875\nv 0.40625 0.0238601 0.296875\nv 0.40625 0.0234375 0.299243\nv 0.498858 0.0234375 0.296875\nv -0.305574 0.03125 0.296875\nv -0.304688 0.0364734 0.296875\nv 0.497103 0.03125 0.296875\nv -0.304253 0.0390625 0.296875\nv -0.304688 0.0390625 0.298364\nv 0.49423 0.0390625 0.296875\nv 0.492188 0.0428677 0.296875\nv -0.302835 0.046875 0.296875\nv -0.304688 0.046875 0.302212\nv 0.489947 0.046875 0.296875\nv 0.484375 0.0531347 0.296875\nv -0.300996 0.0546875 0.296875\nv 0.482378 0.0546875 0.296875\nv 0.476562 0.0588751 0.296875\nv -0.298944 0.0625 0.296875\nv 0.390625 0.0700846 0.296875\nv 0.398438 0.0698199 0.296875\nv 0.40625 0.0697211 0.296875\nv 0.414062 0.0696717 0.296875\nv 0.421875 0.0695528 0.296875\nv 0.429688 0.0693241 0.296875\nv 0.4375 0.0692845 0.296875\nv 0.445312 0.0686882 0.296875\nv 0.453125 0.0668778 0.296875\nv 0.460938 0.0649919 0.296875\nv 0.46965 0.0625 0.296875\nv 0.46875 0.0628979 0.296875\nv -0.297635 0.0703125 0.296875\nv -0.273438 0.0779324 0.296875\nv -0.195312 0.0776202 0.296875\nv -0.1875 0.0771559 0.296875\nv -0.179688 0.0764508 0.296875\nv -0.171875 0.0759757 0.296875\nv -0.164062 0.0756636 0.296875\nv -0.15625 0.0754836 0.296875\nv -0.148438 0.0753897 0.296875\nv -0.140625 0.0754157 0.296875\nv -0.132812 0.0754086 0.296875\nv -0.125 0.0753293 0.296875\nv -0.117188 0.0751554 0.296875\nv -0.109375 0.0750327 0.296875\nv -0.101562 0.0751308 0.296875\nv -0.09375 0.0752308 0.296875\nv -0.0859375 0.0752655 0.296875\nv -0.078125 0.0752634 0.296875\nv -0.0703125 0.0752525 0.296875\nv -0.0625 0.0752029 0.296875\nv -0.0546875 0.0750897 0.296875\nv -0.046875 0.0748649 0.296875\nv -0.0390625 0.0746286 0.296875\nv -0.03125 0.0743512 0.296875\nv -0.0234375 0.0740706 0.296875\nv -0.015625 0.0738185 0.296875\nv -0.0078125 0.0736033 0.296875\nv 0 0.0734118 0.296875\nv 0.0078125 0.0732085 0.296875\nv 0.015625 0.0730401 0.296875\nv 0.0234375 0.0728285 0.296875\nv 0.03125 0.0726606 0.296875\nv 0.0390625 0.0725945 0.296875\nv 0.046875 0.0726313 0.296875\nv 0.0546875 0.0726223 0.296875\nv 0.0625 0.072553 0.296875\nv 0.0703125 0.0725104 0.296875\nv 0.078125 0.0724115 0.296875\nv 0.0859375 0.0723255 0.296875\nv 0.09375 0.0723122 0.296875\nv 0.101562 0.0723048 0.296875\nv 0.109375 0.0723142 0.296875\nv 0.117188 0.0723099 0.296875\nv 0.125 0.0722908 0.296875\nv 0.132812 0.0722598 0.296875\nv 0.140625 0.0722606 0.296875\nv 0.148438 0.0723237 0.296875\nv 0.15625 0.0723574 0.296875\nv 0.164062 0.0723778 0.296875\nv 0.171875 0.0724048 0.296875\nv 0.179688 0.0724295 0.296875\nv 0.1875 0.072466 0.296875\nv 0.195312 0.0724881 0.296875\nv 0.203125 0.0725023 0.296875\nv 0.210938 0.0724255 0.296875\nv 0.21875 0.0723103 0.296875\nv 0.226562 0.0722052 0.296875\nv 0.234375 0.0721523 0.296875\nv 0.242188 0.0720324 0.296875\nv 0.25 0.0718999 0.296875\nv 0.257812 0.0717979 0.296875\nv 0.265625 0.0717351 0.296875\nv 0.273438 0.0717284 0.296875\nv 0.28125 0.0717373 0.296875\nv 0.289062 0.0718241 0.296875\nv 0.296875 0.071923 0.296875\nv 0.304688 0.0719844 0.296875\nv 0.3125 0.0719682 0.296875\nv 0.320312 0.0719039 0.296875\nv 0.328125 0.0716755 0.296875\nv 0.335938 0.0714255 0.296875\nv 0.34375 0.0713108 0.296875\nv 0.351562 0.0712415 0.296875\nv 0.359375 0.0711659 0.296875\nv 0.367188 0.0710714 0.296875\nv 0.375 0.0708885 0.296875\nv 0.386967 0.0703125 0.296875\nv 0.382812 0.0705614 0.296875\nv -0.297081 0.078125 0.296875\nv -0.296875 0.0789786 0.296875\nv -0.289062 0.085881 0.296875\nv -0.27393 0.078125 0.296875\nv -0.28125 0.0825637 0.296875\nv -0.273115 0.078125 0.296875\nv -0.273438 0.078125 0.296948\nv -0.21875 0.0857429 0.296875\nv -0.210938 0.0804444 0.296875\nv -0.198798 0.078125 0.296875\nv -0.203125 0.0788221 0.296875\nv -0.296875 0.0859375 0.299625\nv -0.289062 0.0859375 0.296893\nv -0.28125 0.0859375 0.297535\nv -0.267866 0.0859375 0.296875\nv -0.273438 0.0859375 0.297981\nv -0.265625 0.0878715 0.296875\nv -0.219156 0.0859375 0.296875\nv -0.21875 0.0859375 0.304542\nv -0.296875 0.09375 0.301849\nv -0.289062 0.09375 0.299171\nv -0.28125 0.09375 0.29909\nv -0.273438 0.09375 0.299684\nv -0.262537 0.09375 0.296875\nv -0.265625 0.09375 0.299833\nv -0.225848 0.09375 0.296875\nv -0.226562 0.0950091 0.296875\nv -0.296875 0.101562 0.303038\nv -0.289062 0.101562 0.300393\nv -0.28125 0.101562 0.299651\nv -0.273438 0.101562 0.299898\nv -0.264106 0.101562 0.296875\nv -0.265625 0.103877 0.296875\nv -0.265625 0.101562 0.298419\nv -0.229688 0.101562 0.296875\nv -0.296875 0.109375 0.303376\nv -0.289062 0.109375 0.300623\nv -0.28125 0.109375 0.298912\nv -0.270042 0.109375 0.296875\nv -0.273438 0.115613 0.296875\nv -0.273438 0.109375 0.298107\nv -0.229388 0.109375 0.296875\nv -0.296875 0.117188 0.303684\nv -0.289062 0.117188 0.300834\nv -0.274425 0.117188 0.296875\nv -0.28125 0.117188 0.298542\nv -0.229073 0.117188 0.296875\nv -0.226562 0.117188 0.304152\nv -0.296875 0.125 0.303515\nv -0.289062 0.125 0.301064\nv -0.276264 0.125 0.296875\nv -0.28125 0.125 0.298645\nv -0.228548 0.125 0.296875\nv -0.226562 0.125 0.301898\nv -0.296875 0.132812 0.30275\nv -0.289062 0.132812 0.300439\nv -0.279158 0.132812 0.296875\nv -0.28125 0.137409 0.296875\nv -0.28125 0.132812 0.297642\nv -0.227863 0.132812 0.296875\nv -0.226562 0.132812 0.299954\nv -0.296875 0.140625 0.301947\nv -0.282496 0.140625 0.296875\nv -0.289062 0.140625 0.299649\nv -0.227412 0.140625 0.296875\nv -0.226562 0.14792 0.296875\nv -0.226562 0.140625 0.298834\nv -0.296875 0.148438 0.301325\nv -0.285537 0.148438 0.296875\nv -0.289062 0.148438 0.298421\nv -0.226514 0.148438 0.296875\nv -0.226562 0.14979 0.296875\nv -0.296875 0.15625 0.300922\nv -0.287568 0.15625 0.296875\nv -0.289062 0.15625 0.297578\nv -0.226823 0.15625 0.296875\nv -0.226562 0.15625 0.29746\nv -0.296875 0.164062 0.300685\nv -0.288141 0.164062 0.296875\nv -0.289062 0.164062 0.297327\nv -0.227725 0.164062 0.296875\nv -0.226562 0.164062 0.299341\nv -0.296875 0.171875 0.300138\nv -0.288834 0.171875 0.296875\nv -0.289062 0.172756 0.296875\nv -0.289062 0.171875 0.296984\nv -0.227815 0.171875 0.296875\nv -0.226562 0.171875 0.299757\nv -0.291906 0.179688 0.296875\nv -0.296875 0.179688 0.298772\nv -0.22862 0.179688 0.296875\nv -0.226562 0.179688 0.302364\nv -0.29667 0.1875 0.296875\nv -0.296875 0.18775 0.296875\nv -0.296875 0.1875 0.29695\nv -0.229021 0.1875 0.296875\nv -0.29968 0.195312 0.296875\nv -0.304688 0.195312 0.304118\nv -0.229063 0.195312 0.296875\nv -0.301769 0.203125 0.296875\nv -0.304688 0.203125 0.301581\nv -0.228753 0.203125 0.296875\nv -0.303347 0.210938 0.296875\nv -0.304688 0.210938 0.299276\nv -0.228607 0.210938 0.296875\nv -0.304117 0.21875 0.296875\nv -0.304688 0.21875 0.298034\nv -0.228492 0.21875 0.296875\nv -0.30465 0.226562 0.296875\nv -0.304688 0.226562 0.296957\nv -0.228715 0.226562 0.296875\nv -0.226562 0.226562 0.304437\nv -0.304624 0.234375 0.296875\nv -0.304688 0.234375 0.297017\nv -0.228856 0.234375 0.296875\nv -0.226562 0.234375 0.304252\nv -0.303645 0.242188 0.296875\nv -0.304688 0.242188 0.299334\nv -0.22916 0.242188 0.296875\nv -0.302529 0.25 0.296875\nv -0.304688 0.25 0.302105\nv -0.229798 0.25 0.296875\nv -0.301292 0.257812 0.296875\nv -0.230508 0.257812 0.296875\nv -0.299954 0.265625 0.296875\nv -0.231407 0.265625 0.296875\nv -0.298654 0.273438 0.296875\nv -0.232883 0.273438 0.296875\nv -0.234375 0.281014 0.296875\nv -0.297384 0.28125 0.296875\nv -0.296875 0.284524 0.296875\nv -0.234434 0.28125 0.296875\nv -0.234375 0.28125 0.297013\nv -0.296173 0.289062 0.296875\nv -0.296875 0.289062 0.298298\nv -0.236327 0.289062 0.296875\nv -0.234375 0.289062 0.30115\nv -0.294469 0.296875 0.296875\nv -0.296875 0.296875 0.301568\nv -0.23792 0.296875 0.296875\nv -0.234375 0.296875 0.304228\nv -0.292732 0.304688 0.296875\nv -0.296875 0.304688 0.303489\nv -0.239317 0.304688 0.296875\nv -0.292499 0.3125 0.296875\nv -0.296875 0.3125 0.303355\nv -0.240592 0.3125 0.296875\nv -0.292518 0.320312 0.296875\nv -0.296875 0.320312 0.302873\nv -0.241754 0.320312 0.296875\nv -0.242188 0.326175 0.296875\nv -0.292354 0.328125 0.296875\nv -0.296875 0.328125 0.302239\nv -0.242335 0.328125 0.296875\nv -0.242188 0.328125 0.297167\nv -0.292563 0.335938 0.296875\nv -0.296875 0.335938 0.301655\nv -0.242953 0.335938 0.296875\nv -0.242188 0.335938 0.298552\nv -0.292052 0.34375 0.296875\nv -0.296875 0.34375 0.302097\nv -0.243578 0.34375 0.296875\nv -0.242188 0.34375 0.300022\nv -0.291301 0.351562 0.296875\nv -0.296875 0.351562 0.302989\nv -0.244119 0.351562 0.296875\nv -0.242188 0.351562 0.301267\nv -0.290547 0.359375 0.296875\nv -0.296875 0.359375 0.303734\nv -0.244938 0.359375 0.296875\nv -0.242188 0.359375 0.302928\nv -0.289767 0.367188 0.296875\nv -0.296875 0.367188 0.30436\nv -0.289062 0.374657 0.296875\nv -0.246292 0.367188 0.296875\nv -0.242188 0.367188 0.304461\nv -0.28902 0.375 0.296875\nv -0.289062 0.375 0.296959\nv -0.248043 0.375 0.296875\nv -0.28812 0.382812 0.296875\nv -0.289062 0.382812 0.298684\nv -0.249817 0.382812 0.296875\nv -0.25 0.384034 0.296875\nv -0.296875 0.390625 0.304642\nv -0.286816 0.390625 0.296875\nv -0.289062 0.390625 0.300707\nv -0.251389 0.390625 0.296875\nv -0.25 0.390625 0.297899\nv -0.296875 0.398438 0.30423\nv -0.287124 0.398438 0.296875\nv -0.289062 0.398438 0.30033\nv -0.25228 0.398438 0.296875\nv -0.25 0.398438 0.298555\nv -0.296875 0.40625 0.303692\nv -0.287496 0.40625 0.296875\nv -0.289062 0.40625 0.299675\nv -0.252363 0.40625 0.296875\nv -0.25 0.40625 0.298673\nv -0.296875 0.414062 0.303233\nv -0.287665 0.414062 0.296875\nv -0.289062 0.414062 0.299385\nv -0.252609 0.414062 0.296875\nv -0.25 0.414062 0.298905\nv -0.296875 0.421875 0.302732\nv -0.28763 0.421875 0.296875\nv -0.289062 0.421875 0.299566\nv -0.253039 0.421875 0.296875\nv -0.25 0.421875 0.299492\nv -0.296875 0.429688 0.302622\nv -0.287573 0.429688 0.296875\nv -0.289062 0.429688 0.300092\nv -0.253725 0.429688 0.296875\nv -0.25 0.429688 0.300327\nv -0.296875 0.4375 0.302744\nv -0.287238 0.4375 0.296875\nv -0.289062 0.4375 0.30127\nv -0.254271 0.4375 0.296875\nv -0.25 0.4375 0.301131\nv -0.296875 0.445312 0.302924\nv -0.286964 0.445312 0.296875\nv -0.289062 0.445312 0.301401\nv -0.254839 0.445312 0.296875\nv -0.25 0.445312 0.302096\nv -0.296875 0.453125 0.303128\nv -0.287134 0.453125 0.296875\nv -0.289062 0.453125 0.300998\nv -0.255366 0.453125 0.296875\nv -0.25 0.453125 0.302838\nv -0.296875 0.460938 0.303471\nv -0.287712 0.460938 0.296875\nv -0.289062 0.460938 0.299826\nv -0.255775 0.460938 0.296875\nv -0.25 0.460938 0.303423\nv -0.296875 0.46875 0.303337\nv -0.288522 0.46875 0.296875\nv -0.289062 0.47526 0.296875\nv -0.289062 0.46875 0.297993\nv -0.25633 0.46875 0.296875\nv -0.25 0.46875 0.304045\nv -0.289189 0.476562 0.296875\nv -0.296875 0.476562 0.302829\nv -0.257047 0.476562 0.296875\nv -0.289645 0.484375 0.296875\nv -0.296875 0.484375 0.302417\nv -0.257709 0.484375 0.296875\nv -0.289985 0.492188 0.296875\nv -0.296875 0.492188 0.302303\nv -0.257686 0.492188 0.296875\nv -0.304688 0.5 0.304525\nv -0.29021 0.5 0.296875\nv -0.296875 0.5 0.302158\nv -0.257516 0.5 0.296875\nv -0.257812 0.505688 0.296875\nv -0.304688 0.507812 0.303922\nv -0.291071 0.507812 0.296875\nv -0.296875 0.507812 0.30161\nv -0.257925 0.507812 0.296875\nv -0.257812 0.507812 0.297039\nv -0.304688 0.515625 0.302957\nv -0.29224 0.515625 0.296875\nv -0.296875 0.515625 0.300537\nv -0.258639 0.515625 0.296875\nv -0.257812 0.515625 0.298088\nv -0.304688 0.523438 0.301966\nv -0.294204 0.523438 0.296875\nv -0.296875 0.523438 0.299124\nv -0.259173 0.523438 0.296875\nv -0.257812 0.523438 0.298902\nv -0.304688 0.53125 0.300875\nv -0.296158 0.53125 0.296875\nv -0.296875 0.534555 0.296875\nv -0.296875 0.53125 0.297528\nv -0.259728 0.53125 0.296875\nv -0.257812 0.53125 0.29963\nv -0.29812 0.539062 0.296875\nv -0.304688 0.539062 0.299812\nv -0.260287 0.539062 0.296875\nv -0.257812 0.539062 0.300299\nv -0.300133 0.546875 0.296875\nv -0.304688 0.546875 0.298831\nv -0.260611 0.546875 0.296875\nv -0.257812 0.546875 0.300594\nv -0.302026 0.554688 0.296875\nv -0.304688 0.554688 0.298036\nv -0.260923 0.554688 0.296875\nv -0.257812 0.554688 0.300866\nv -0.30398 0.5625 0.296875\nv -0.304688 0.564781 0.296875\nv -0.304688 0.5625 0.297184\nv -0.261403 0.5625 0.296875\nv -0.257812 0.5625 0.301328\nv -0.305535 0.570312 0.296875\nv -0.3125 0.570312 0.303929\nv -0.261998 0.570312 0.296875\nv -0.257812 0.570312 0.301849\nv -0.307003 0.578125 0.296875\nv -0.3125 0.578125 0.302811\nv -0.262335 0.578125 0.296875\nv -0.257812 0.578125 0.302332\nv -0.308665 0.585938 0.296875\nv -0.3125 0.585938 0.301299\nv -0.262655 0.585938 0.296875\nv -0.257812 0.585938 0.302906\nv -0.310297 0.59375 0.296875\nv -0.3125 0.59375 0.29943\nv -0.262943 0.59375 0.296875\nv -0.257812 0.59375 0.303378\nv -0.311765 0.601562 0.296875\nv -0.3125 0.606131 0.296875\nv -0.3125 0.601562 0.297739\nv -0.262767 0.601562 0.296875\nv -0.257812 0.601562 0.303343\nv -0.312888 0.609375 0.296875\nv -0.262393 0.609375 0.296875\nv -0.257812 0.609375 0.302795\nv -0.315399 0.617188 0.296875\nv -0.320312 0.617188 0.303856\nv -0.261108 0.617188 0.296875\nv -0.257812 0.623176 0.296875\nv -0.257812 0.617188 0.302072\nv -0.318047 0.625 0.296875\nv -0.320312 0.630069 0.296875\nv -0.320312 0.625 0.300026\nv -0.257351 0.625 0.296875\nv -0.321572 0.632812 0.296875\nv -0.257084 0.632812 0.296875\nv -0.324359 0.640625 0.296875\nv -0.328125 0.640625 0.304648\nv -0.257129 0.640625 0.296875\nv -0.257812 0.646145 0.296875\nv -0.325993 0.648438 0.296875\nv -0.328125 0.648438 0.301497\nv -0.258105 0.648438 0.296875\nv -0.257812 0.648438 0.297498\nv -0.327734 0.65625 0.296875\nv -0.328125 0.659299 0.296875\nv -0.328125 0.65625 0.297704\nv -0.258945 0.65625 0.296875\nv -0.257812 0.65625 0.299518\nv -0.328652 0.664062 0.296875\nv -0.259514 0.664062 0.296875\nv -0.257812 0.664062 0.301598\nv -0.329204 0.671875 0.296875\nv -0.260325 0.671875 0.296875\nv -0.329813 0.679688 0.296875\nv -0.260933 0.679688 0.296875\nv -0.330337 0.6875 0.296875\nv -0.261593 0.6875 0.296875\nv -0.330581 0.695312 0.296875\nv -0.262248 0.695312 0.296875\nv -0.330646 0.703125 0.296875\nv -0.262689 0.703125 0.296875\nv -0.330513 0.710938 0.296875\nv -0.263554 0.710938 0.296875\nv -0.329979 0.71875 0.296875\nv -0.264556 0.71875 0.296875\nv -0.329096 0.726562 0.296875\nv -0.328125 0.734119 0.296875\nv -0.265605 0.726562 0.296875\nv -0.265625 0.726679 0.296875\nv -0.328089 0.734375 0.296875\nv -0.328125 0.734375 0.296957\nv -0.266984 0.734375 0.296875\nv -0.265625 0.734375 0.302249\nv -0.32698 0.742188 0.296875\nv -0.328125 0.742188 0.299429\nv -0.268948 0.742188 0.296875\nv -0.325427 0.75 0.296875\nv -0.328125 0.75 0.302887\nv -0.271163 0.75 0.296875\nv -0.273438 0.756215 0.296875\nv -0.323909 0.757812 0.296875\nv -0.274071 0.757812 0.296875\nv -0.273438 0.757812 0.298854\nv -0.323668 0.765625 0.296875\nv -0.277663 0.765625 0.296875\nv -0.324302 0.773438 0.296875\nv -0.280912 0.773438 0.296875\nv -0.28125 0.774395 0.296875\nv -0.325202 0.78125 0.296875\nv -0.328125 0.78125 0.303191\nv -0.284257 0.78125 0.296875\nv -0.28125 0.78125 0.30456\nv -0.326567 0.789062 0.296875\nv -0.328125 0.789062 0.300672\nv -0.288196 0.789062 0.296875\nv -0.289062 0.790978 0.296875\nv -0.327881 0.796875 0.296875\nv -0.328125 0.79896 0.296875\nv -0.328125 0.796875 0.297655\nv -0.29166 0.796875 0.296875\nv -0.289062 0.796875 0.303281\nv -0.32873 0.804688 0.296875\nv -0.295538 0.804688 0.296875\nv -0.296875 0.807143 0.296875\nv -0.32969 0.8125 0.296875\nv -0.300262 0.8125 0.296875\nv -0.304688 0.818439 0.296875\nv -0.296875 0.8125 0.30262\nv -0.331163 0.820312 0.296875\nv -0.30605 0.820312 0.296875\nv -0.304688 0.820312 0.298648\nv -0.331399 0.828125 0.296875\nv -0.328125 0.831794 0.296875\nv -0.320312 0.8337 0.296875\nv -0.31097 0.828125 0.296875\nv -0.3125 0.830311 0.296875\nv -0.320312 0.835938 0.301783\nv -0.3125 0.835938 0.303494\nv -0.296875 -0.726562 0.31215\nv -0.289062 -0.726562 0.312011\nv -0.28125 -0.726562 0.312151\nv 0.429688 -0.726562 0.311952\nv 0.4375 -0.726562 0.312153\nv -0.3125 -0.71875 0.310675\nv -0.304688 -0.71875 0.309969\nv -0.296875 -0.71875 0.309697\nv -0.289062 -0.71875 0.309173\nv -0.28125 -0.71875 0.308805\nv -0.273438 -0.71875 0.308671\nv -0.265625 -0.71875 0.310145\nv 0.421875 -0.71875 0.310343\nv 0.429688 -0.71875 0.309446\nv 0.4375 -0.71875 0.309867\nv 0.445312 -0.71875 0.311078\nv -0.328125 -0.710938 0.311526\nv -0.320312 -0.710938 0.309346\nv -0.3125 -0.710938 0.309219\nv -0.304688 -0.710938 0.308954\nv -0.296875 -0.710938 0.308733\nv -0.289062 -0.710938 0.308079\nv -0.28125 -0.710938 0.307535\nv -0.273438 -0.710938 0.307183\nv -0.265625 -0.710938 0.307727\nv -0.257812 -0.710938 0.310273\nv 0.414062 -0.710938 0.310112\nv 0.421875 -0.710938 0.308581\nv 0.429688 -0.710938 0.307851\nv 0.4375 -0.710938 0.308209\nv 0.445312 -0.710938 0.309107\nv 0.453125 -0.710938 0.310643\nv -0.328125 -0.703125 0.307462\nv -0.320312 -0.703125 0.307203\nv -0.3125 -0.703125 0.306966\nv -0.304688 -0.696038 0.304688\nv -0.304688 -0.703125 0.306684\nv -0.296875 -0.695835 0.304688\nv -0.296875 -0.703125 0.306617\nv -0.289062 -0.696362 0.304688\nv -0.289062 -0.703125 0.306189\nv -0.28125 -0.696303 0.304688\nv -0.28125 -0.703125 0.30579\nv -0.273438 -0.703125 0.30598\nv -0.265625 -0.703125 0.306374\nv -0.257812 -0.703125 0.307444\nv -0.25 -0.703125 0.312243\nv 0.40625 -0.703125 0.31153\nv 0.414062 -0.703125 0.308616\nv 0.421875 -0.703125 0.307143\nv 0.429688 -0.703125 0.306613\nv 0.4375 -0.703125 0.307003\nv 0.445312 -0.703125 0.307843\nv 0.453125 -0.703125 0.308752\nv 0.460938 -0.703125 0.310069\nv 0.46875 -0.703125 0.31192\nv -0.335938 -0.695312 0.311725\nv -0.328125 -0.695312 0.306341\nv -0.320312 -0.691982 0.304688\nv -0.320312 -0.695312 0.304984\nv -0.310965 -0.695312 0.304688\nv -0.3125 -0.694358 0.304688\nv -0.3125 -0.695312 0.304738\nv -0.275876 -0.695312 0.304688\nv -0.273438 -0.694296 0.304688\nv -0.273438 -0.695312 0.304754\nv -0.265625 -0.695312 0.305344\nv -0.257812 -0.695312 0.3062\nv -0.25 -0.695312 0.309493\nv 0.40625 -0.695312 0.310786\nv 0.414062 -0.695312 0.308485\nv 0.421875 -0.695312 0.30694\nv 0.429688 -0.695312 0.306276\nv 0.4375 -0.695312 0.306741\nv 0.445312 -0.695312 0.307452\nv 0.453125 -0.695312 0.308131\nv 0.460938 -0.695312 0.309057\nv 0.46875 -0.695312 0.310358\nv 0.476562 -0.695312 0.312371\nv -0.335938 -0.6875 0.311943\nv -0.322885 -0.6875 0.304688\nv -0.328125 -0.6875 0.305677\nv -0.296875 -0.680455 0.304688\nv -0.270086 -0.6875 0.304688\nv -0.265625 -0.6875 0.305224\nv -0.257812 -0.6875 0.306452\nv -0.25 -0.6875 0.309566\nv 0.40625 -0.6875 0.310984\nv 0.414062 -0.6875 0.308846\nv 0.421875 -0.6875 0.307384\nv 0.429688 -0.6875 0.306638\nv 0.4375 -0.6875 0.307103\nv 0.445312 -0.6875 0.307853\nv 0.453125 -0.6875 0.308563\nv 0.460938 -0.6875 0.309364\nv 0.46875 -0.6875 0.310616\nv 0.476562 -0.6875 0.312203\nv -0.325835 -0.679688 0.304688\nv -0.328125 -0.672332 0.304688\nv -0.328125 -0.679688 0.305194\nv -0.298147 -0.679688 0.304688\nv -0.296464 -0.679688 0.304688\nv -0.296875 -0.679688 0.304714\nv -0.269781 -0.679688 0.304688\nv -0.265625 -0.679688 0.30539\nv -0.257812 -0.679688 0.306895\nv -0.25 -0.679688 0.309547\nv 0.40625 -0.679688 0.311321\nv 0.414062 -0.679688 0.309287\nv 0.421875 -0.679688 0.307973\nv 0.429688 -0.679688 0.307188\nv 0.4375 -0.679688 0.307414\nv 0.445312 -0.679688 0.308035\nv 0.453125 -0.679688 0.308699\nv 0.460938 -0.679688 0.30953\nv 0.46875 -0.679688 0.310644\nv 0.476562 -0.679688 0.312037\nv -0.328168 -0.671875 0.304688\nv -0.30393 -0.671875 0.304688\nv -0.293318 -0.671875 0.304688\nv -0.296875 -0.671875 0.305\nv -0.270673 -0.671875 0.304688\nv -0.265625 -0.671875 0.305764\nv -0.257812 -0.671875 0.307227\nv -0.25 -0.671875 0.309908\nv 0.40625 -0.671875 0.311695\nv 0.414062 -0.671875 0.309926\nv 0.421875 -0.671875 0.308571\nv 0.429688 -0.671875 0.307779\nv 0.4375 -0.671875 0.307697\nv 0.445312 -0.671875 0.308201\nv 0.453125 -0.671875 0.308769\nv 0.460938 -0.671875 0.309533\nv 0.46875 -0.671875 0.310495\nv 0.476562 -0.671875 0.31167\nv -0.3284 -0.664062 0.304688\nv -0.328125 -0.656699 0.304688\nv -0.303979 -0.664062 0.304688\nv -0.291248 -0.664062 0.304688\nv -0.296875 -0.664062 0.305152\nv -0.289062 -0.658369 0.304688\nv -0.272878 -0.664062 0.304688\nv -0.273438 -0.662897 0.304688\nv -0.265625 -0.664062 0.306094\nv -0.257812 -0.664062 0.307654\nv -0.25 -0.664062 0.310341\nv 0.40625 -0.664062 0.312182\nv 0.414062 -0.664062 0.310581\nv 0.421875 -0.664062 0.30919\nv 0.429688 -0.664062 0.308333\nv 0.4375 -0.664062 0.308105\nv 0.445312 -0.664062 0.308391\nv 0.453125 -0.664062 0.308893\nv 0.460938 -0.664062 0.309635\nv 0.46875 -0.664062 0.310355\nv 0.476562 -0.664062 0.311392\nv 0.484375 -0.664062 0.312261\nv -0.328087 -0.65625 0.304688\nv -0.328125 -0.65625 0.304709\nv -0.302889 -0.65625 0.304688\nv -0.296875 -0.65625 0.305145\nv -0.284231 -0.65625 0.304688\nv -0.289062 -0.65625 0.304756\nv -0.280838 -0.65625 0.304688\nv -0.28125 -0.655879 0.304688\nv -0.273438 -0.65625 0.305327\nv -0.265625 -0.65625 0.306494\nv -0.257812 -0.65625 0.308088\nv -0.25 -0.65625 0.310763\nv 0.414062 -0.65625 0.311254\nv 0.421875 -0.65625 0.309912\nv 0.429688 -0.65625 0.30895\nv 0.4375 -0.65625 0.308545\nv 0.445312 -0.65625 0.308609\nv 0.453125 -0.65625 0.309173\nv 0.460938 -0.65625 0.309775\nv 0.46875 -0.65625 0.310173\nv 0.476562 -0.65625 0.310909\nv 0.484375 -0.65625 0.311859\nv -0.327869 -0.648438 0.304688\nv -0.328125 -0.648438 0.304854\nv -0.300234 -0.648438 0.304688\nv -0.296875 -0.640892 0.304688\nv -0.296875 -0.648438 0.304961\nv -0.289062 -0.648438 0.30501\nv -0.28125 -0.648438 0.305415\nv -0.273438 -0.648438 0.306081\nv -0.265625 -0.648438 0.307074\nv -0.257812 -0.648438 0.308614\nv -0.25 -0.648438 0.31119\nv 0.414062 -0.648438 0.311883\nv 0.421875 -0.648438 0.31052\nv 0.429688 -0.648438 0.309546\nv 0.4375 -0.648438 0.309008\nv 0.445312 -0.648438 0.308897\nv 0.453125 -0.648438 0.309217\nv 0.460938 -0.648438 0.310006\nv 0.46875 -0.648438 0.310341\nv 0.476562 -0.648438 0.310518\nv 0.484375 -0.648438 0.311388\nv -0.326806 -0.640625 0.304688\nv -0.328125 -0.640625 0.305642\nv -0.296773 -0.640625 0.304688\nv -0.296875 -0.640063 0.304688\nv -0.289062 -0.640625 0.305349\nv -0.28125 -0.640625 0.306022\nv -0.273438 -0.640625 0.306772\nv -0.265625 -0.640625 0.307662\nv -0.257812 -0.640625 0.309161\nv -0.25 -0.640625 0.311646\nv 0.421875 -0.640625 0.311504\nv 0.429688 -0.640625 0.310464\nv 0.4375 -0.640625 0.309917\nv 0.445312 -0.640625 0.30976\nv 0.453125 -0.640625 0.309972\nv 0.460938 -0.640625 0.310758\nv 0.46875 -0.640625 0.311195\nv 0.476562 -0.640625 0.311278\nv 0.484375 -0.640625 0.311312\nv -0.324376 -0.632812 0.304688\nv -0.328125 -0.632812 0.307576\nv -0.297979 -0.632812 0.304688\nv -0.296875 -0.632812 0.304809\nv -0.289062 -0.632812 0.306278\nv -0.28125 -0.632812 0.307095\nv -0.273438 -0.632812 0.30797\nv -0.265625 -0.632812 0.308783\nv -0.257812 -0.632812 0.310215\nv 0.429688 -0.632812 0.311505\nv 0.4375 -0.632812 0.310967\nv 0.445312 -0.632812 0.310713\nv 0.453125 -0.632812 0.310812\nv 0.460938 -0.632812 0.311516\nv 0.46875 -0.632812 0.312057\nv 0.476562 -0.632812 0.31219\nv 0.484375 -0.632812 0.312243\nv -0.322048 -0.625 0.304688\nv -0.328125 -0.625 0.30996\nv -0.320312 -0.618692 0.304688\nv -0.301738 -0.625 0.304688\nv -0.296875 -0.625 0.305757\nv -0.289062 -0.625 0.307224\nv -0.28125 -0.625 0.307998\nv -0.273438 -0.625 0.308912\nv -0.265625 -0.625 0.309859\nv -0.257812 -0.625 0.311311\nv 0.4375 -0.625 0.312057\nv 0.445312 -0.625 0.311709\nv 0.453125 -0.625 0.311717\nv 0.460938 -0.625 0.312349\nv -0.328125 -0.617188 0.312406\nv -0.318756 -0.617188 0.304688\nv -0.320312 -0.617188 0.30494\nv -0.303873 -0.617188 0.304688\nv -0.304688 -0.615041 0.304688\nv -0.296875 -0.617188 0.306618\nv -0.289062 -0.617188 0.308038\nv -0.28125 -0.617188 0.308767\nv -0.273438 -0.617188 0.309708\nv -0.265625 -0.617188 0.310875\nv -0.257812 -0.617188 0.312344\nv -0.314026 -0.609375 0.304688\nv -0.320312 -0.609375 0.305649\nv -0.311226 -0.609375 0.304688\nv -0.3125 -0.608187 0.304688\nv -0.304688 -0.609375 0.305419\nv -0.296875 -0.609375 0.307465\nv -0.289062 -0.609375 0.308865\nv -0.28125 -0.609375 0.309524\nv -0.273438 -0.609375 0.310432\nv -0.265625 -0.609375 0.311674\nv -0.320312 -0.601562 0.306013\nv -0.3125 -0.601562 0.305667\nv -0.304688 -0.601562 0.30636\nv -0.296875 -0.601562 0.308021\nv -0.289062 -0.601562 0.309297\nv -0.28125 -0.601562 0.309942\nv -0.273438 -0.601562 0.310844\nv -0.265625 -0.601562 0.312158\nv -0.320312 -0.59375 0.306244\nv -0.3125 -0.59375 0.306468\nv -0.304688 -0.59375 0.307114\nv -0.296875 -0.59375 0.308273\nv -0.289062 -0.59375 0.309374\nv -0.28125 -0.59375 0.310047\nv -0.273438 -0.59375 0.310898\nv -0.265625 -0.59375 0.312241\nv -0.320312 -0.585938 0.306706\nv -0.3125 -0.585938 0.307153\nv -0.304688 -0.585938 0.307626\nv -0.296875 -0.585938 0.308673\nv -0.289062 -0.585938 0.309532\nv -0.28125 -0.585938 0.310123\nv -0.273438 -0.585938 0.310966\nv -0.265625 -0.585938 0.312265\nv -0.320312 -0.578125 0.307523\nv -0.3125 -0.578125 0.307891\nv -0.304688 -0.578125 0.308109\nv -0.296875 -0.578125 0.309159\nv -0.289062 -0.578125 0.309787\nv -0.28125 -0.578125 0.310209\nv -0.273438 -0.578125 0.311012\nv -0.265625 -0.578125 0.312295\nv -0.320312 -0.570312 0.308731\nv -0.3125 -0.570312 0.308903\nv -0.304688 -0.570312 0.308763\nv -0.296875 -0.570312 0.309576\nv -0.289062 -0.570312 0.310114\nv -0.28125 -0.570312 0.310466\nv -0.273438 -0.570312 0.311142\nv -0.265625 -0.570312 0.312438\nv -0.320312 -0.5625 0.310174\nv -0.3125 -0.5625 0.310005\nv -0.304688 -0.5625 0.309486\nv -0.296875 -0.5625 0.309956\nv -0.289062 -0.5625 0.310537\nv -0.28125 -0.5625 0.310693\nv -0.273438 -0.5625 0.311176\nv -0.265625 -0.5625 0.312443\nv -0.320312 -0.554688 0.311523\nv -0.3125 -0.554688 0.311145\nv -0.304688 -0.554688 0.31033\nv -0.296875 -0.554688 0.310279\nv -0.289062 -0.554688 0.310836\nv -0.28125 -0.554688 0.310721\nv -0.273438 -0.554688 0.310939\nv -0.265625 -0.554688 0.31156\nv -0.0234375 -0.547301 0.304688\nv -0.015625 -0.548146 0.304688\nv -0.0078125 -0.54919 0.304688\nv 0 -0.549863 0.304688\nv 0.0078125 -0.55013 0.304688\nv 0.015625 -0.549748 0.304688\nv 0.0234375 -0.549122 0.304688\nv 0.03125 -0.548169 0.304688\nv 0.0390625 -0.547226 0.304688\nv -0.320312 -0.546875 0.312466\nv -0.3125 -0.546875 0.311908\nv -0.304688 -0.546875 0.311106\nv -0.296875 -0.546875 0.310778\nv -0.289062 -0.546875 0.310907\nv -0.28125 -0.546875 0.310046\nv -0.273438 -0.546875 0.309477\nv -0.265625 -0.546875 0.308939\nv -0.257812 -0.546875 0.309018\nv -0.25 -0.546875 0.310405\nv -0.046875 -0.53941 0.304688\nv -0.0390625 -0.542632 0.304688\nv -0.0390625 -0.546875 0.310573\nv -0.0262986 -0.546875 0.304688\nv -0.03125 -0.545576 0.304688\nv -0.03125 -0.546875 0.307087\nv 0.0414227 -0.546875 0.304688\nv 0.046875 -0.545736 0.304688\nv 0.046875 -0.546875 0.309706\nv 0.0546875 -0.544069 0.304688\nv 0.0625 -0.541983 0.304688\nv 0.0703125 -0.539951 0.304688\nv -0.3125 -0.539062 0.312105\nv -0.304688 -0.539062 0.311238\nv -0.296875 -0.539062 0.31071\nv -0.289062 -0.539062 0.310001\nv -0.28125 -0.539062 0.308859\nv -0.273438 -0.539062 0.307877\nv -0.265625 -0.532793 0.304688\nv -0.265625 -0.539062 0.306709\nv -0.257812 -0.534917 0.304688\nv -0.257812 -0.539062 0.306084\nv -0.25 -0.53459 0.304688\nv -0.25 -0.539062 0.306424\nv -0.242188 -0.539062 0.309521\nv -0.078125 -0.539062 0.312497\nv -0.0703125 -0.539062 0.311001\nv -0.0625 -0.539062 0.30889\nv -0.0476879 -0.539062 0.304688\nv -0.0546875 -0.534995 0.304688\nv -0.0546875 -0.539062 0.306638\nv 0.072655 -0.539062 0.304688\nv 0.078125 -0.536948 0.304688\nv 0.078125 -0.539062 0.312157\nv 0.0859375 -0.534475 0.304688\nv 0.09375 -0.532444 0.304688\nv 0.101562 -0.531612 0.304688\nv -0.3125 -0.53125 0.31232\nv -0.304688 -0.53125 0.311002\nv -0.296875 -0.53125 0.309909\nv -0.289062 -0.53125 0.30869\nv -0.28125 -0.53125 0.307188\nv -0.267906 -0.53125 0.304688\nv -0.273438 -0.52562 0.304688\nv -0.273438 -0.53125 0.305872\nv -0.246364 -0.53125 0.304688\nv -0.242188 -0.525639 0.304688\nv -0.242188 -0.53125 0.306279\nv -0.234375 -0.53125 0.310673\nv -0.09375 -0.53125 0.311695\nv -0.0859375 -0.53125 0.310615\nv -0.078125 -0.53125 0.309059\nv -0.0703125 -0.53125 0.307252\nv -0.060571 -0.53125 0.304688\nv -0.0625 -0.529242 0.304688\nv -0.0625 -0.53125 0.305231\nv 0.104182 -0.53125 0.304688\nv 0.109375 -0.530229 0.304688\nv 0.109375 -0.53125 0.305895\nv 0.117188 -0.529047 0.304688\nv 0.117188 -0.53125 0.307181\nv 0.125 -0.528114 0.304688\nv 0.125 -0.53125 0.308001\nv 0.132812 -0.527584 0.304688\nv 0.132812 -0.53125 0.308423\nv 0.140625 -0.52689 0.304688\nv 0.140625 -0.53125 0.308947\nv 0.148438 -0.526044 0.304688\nv 0.148438 -0.53125 0.309744\nv 0.15625 -0.524743 0.304688\nv 0.15625 -0.53125 0.310753\nv 0.164062 -0.53125 0.312279\nv -0.3125 -0.523438 0.312213\nv -0.304688 -0.523438 0.310462\nv -0.296875 -0.523438 0.309329\nv -0.289062 -0.523438 0.307799\nv -0.276597 -0.523438 0.304688\nv -0.28125 -0.519859 0.304688\nv -0.28125 -0.523438 0.30553\nv -0.240572 -0.523438 0.304688\nv -0.234375 -0.523438 0.307374\nv -0.226562 -0.523438 0.310719\nv -0.21875 -0.523438 0.312499\nv -0.109375 -0.523438 0.312061\nv -0.101562 -0.523438 0.311049\nv -0.09375 -0.523438 0.310127\nv -0.0859375 -0.523438 0.308837\nv -0.078125 -0.523438 0.307172\nv -0.0682617 -0.523438 0.304688\nv -0.0703125 -0.519896 0.304688\nv -0.0703125 -0.523438 0.305244\nv 0.1621 -0.523438 0.304688\nv 0.164062 -0.522996 0.304688\nv 0.164062 -0.523438 0.304969\nv 0.171875 -0.521008 0.304688\nv 0.171875 -0.523438 0.306306\nv 0.179688 -0.519256 0.304688\nv 0.179688 -0.523438 0.307344\nv 0.1875 -0.517481 0.304688\nv 0.1875 -0.523438 0.30827\nv 0.195312 -0.516626 0.304688\nv 0.195312 -0.523438 0.309244\nv 0.203125 -0.523438 0.310281\nv 0.210938 -0.523438 0.311343\nv 0.21875 -0.523438 0.312097\nv 0.4375 -0.523438 0.312231\nv -0.3125 -0.515625 0.310967\nv -0.304688 -0.515625 0.30928\nv -0.296875 -0.515625 0.308428\nv -0.284036 -0.515625 0.304688\nv -0.289062 -0.515625 0.30657\nv -0.235169 -0.515625 0.304688\nv -0.234375 -0.515625 0.305052\nv -0.226562 -0.515625 0.308618\nv -0.21875 -0.515625 0.310888\nv -0.210938 -0.515625 0.31219\nv -0.109375 -0.515625 0.311581\nv -0.101562 -0.515625 0.310453\nv -0.09375 -0.515625 0.309411\nv -0.0859375 -0.515625 0.307906\nv -0.0728419 -0.515625 0.304688\nv -0.078125 -0.515625 0.306144\nv 0.199646 -0.515625 0.304688\nv 0.203125 -0.514008 0.304688\nv 0.203125 -0.515625 0.305349\nv 0.210938 -0.510049 0.304688\nv 0.210938 -0.515625 0.306955\nv 0.21875 -0.515625 0.308243\nv 0.226562 -0.515625 0.309638\nv 0.234375 -0.515625 0.311088\nv 0.242188 -0.515625 0.312202\nv 0.429688 -0.515625 0.311916\nv 0.4375 -0.515625 0.311589\nv 0.445312 -0.515625 0.312188\nv -0.320312 -0.507812 0.312427\nv -0.3125 -0.507812 0.309264\nv -0.304688 -0.507812 0.307917\nv -0.296875 -0.507812 0.307682\nv -0.284962 -0.507812 0.304688\nv -0.289062 -0.507812 0.306172\nv -0.28125 -0.505182 0.304688\nv -0.273438 -0.503506 0.304688\nv -0.265625 -0.500715 0.304688\nv -0.257812 -0.500579 0.304688\nv -0.25 -0.501085 0.304688\nv -0.235513 -0.507812 0.304688\nv -0.242188 -0.504183 0.304688\nv -0.234375 -0.507812 0.305154\nv -0.226562 -0.507812 0.309248\nv -0.21875 -0.507812 0.311563\nv -0.101562 -0.507812 0.311329\nv -0.09375 -0.507812 0.310034\nv -0.0859375 -0.507812 0.308248\nv -0.0737206 -0.507812 0.304688\nv -0.078125 -0.507812 0.306078\nv -0.0703125 -0.506174 0.304688\nv -0.0625 -0.502435 0.304688\nv 0.215087 -0.507812 0.304688\nv 0.210938 -0.504031 0.304688\nv 0.21875 -0.507812 0.305544\nv 0.226562 -0.507812 0.307323\nv 0.234375 -0.507812 0.309249\nv 0.242188 -0.507812 0.310722\nv 0.25 -0.507812 0.311774\nv 0.421875 -0.507812 0.312253\nv 0.429688 -0.507812 0.311328\nv 0.4375 -0.507812 0.311014\nv 0.445312 -0.507812 0.311656\nv 0.453125 -0.507812 0.312261\nv -0.320312 -0.5 0.310858\nv -0.3125 -0.5 0.309953\nv -0.304688 -0.5 0.309506\nv -0.296875 -0.5 0.309629\nv -0.289062 -0.5 0.309004\nv -0.28125 -0.5 0.306835\nv -0.273438 -0.5 0.306005\nv -0.265625 -0.5 0.305036\nv -0.257812 -0.5 0.305015\nv -0.25 -0.5 0.305353\nv -0.242188 -0.5 0.307435\nv -0.234375 -0.5 0.311013\nv -0.078125 -0.5 0.311278\nv -0.0703125 -0.5 0.308676\nv -0.0574909 -0.5 0.304688\nv -0.0625 -0.5 0.30627\nv -0.0546875 -0.498561 0.304688\nv -0.046875 -0.494502 0.304688\nv 0.179688 -0.493304 0.304688\nv 0.1875 -0.495268 0.304688\nv 0.195312 -0.496659 0.304688\nv 0.205887 -0.5 0.304688\nv 0.203125 -0.498517 0.304688\nv 0.210938 -0.5 0.305822\nv 0.21875 -0.5 0.308134\nv 0.226562 -0.5 0.310218\nv 0.234375 -0.5 0.311993\nv 0.429688 -0.5 0.312076\nv 0.4375 -0.5 0.311601\nv 0.445312 -0.5 0.312038\nv -0.320312 -0.492188 0.309383\nv -0.3125 -0.492188 0.309349\nv -0.304688 -0.492188 0.310043\nv -0.296875 -0.492188 0.311442\nv -0.289062 -0.492188 0.31106\nv -0.28125 -0.492188 0.308852\nv -0.273438 -0.492188 0.308091\nv -0.265625 -0.492188 0.307794\nv -0.257812 -0.492188 0.308338\nv -0.25 -0.492188 0.309299\nv -0.242188 -0.492188 0.31212\nv -0.0625 -0.492188 0.310858\nv -0.0546875 -0.492188 0.308534\nv -0.0425809 -0.492188 0.304688\nv -0.046875 -0.492188 0.306136\nv -0.0390625 -0.490604 0.304688\nv -0.03125 -0.487163 0.304688\nv 0.140625 -0.484958 0.304688\nv 0.148438 -0.487133 0.304688\nv 0.15625 -0.488884 0.304688\nv 0.164062 -0.490464 0.304688\nv 0.174645 -0.492188 0.304688\nv 0.171875 -0.491681 0.304688\nv 0.179688 -0.492188 0.305332\nv 0.1875 -0.492188 0.306288\nv 0.195312 -0.492188 0.306809\nv 0.203125 -0.492188 0.307535\nv 0.210938 -0.492188 0.308902\nv 0.21875 -0.492188 0.311202\nv 0.4375 -0.492188 0.312129\nv -0.320312 -0.484375 0.308197\nv -0.3125 -0.484375 0.308388\nv -0.304688 -0.484375 0.309866\nv -0.296875 -0.484375 0.311569\nv -0.289062 -0.484375 0.31231\nv -0.28125 -0.484375 0.31074\nv -0.273438 -0.484375 0.3094\nv -0.265625 -0.484375 0.309293\nv -0.257812 -0.484375 0.310255\nv -0.25 -0.484375 0.311881\nv -0.046875 -0.484375 0.312142\nv -0.0390625 -0.484375 0.31022\nv -0.0251476 -0.484375 0.304688\nv -0.03125 -0.484375 0.307579\nv -0.0234375 -0.483794 0.304688\nv -0.015625 -0.481908 0.304688\nv -0.0078125 -0.480199 0.304688\nv 0 -0.478881 0.304688\nv 0.0078125 -0.478528 0.304688\nv 0.015625 -0.47833 0.304688\nv 0.0234375 -0.478063 0.304688\nv 0.03125 -0.477708 0.304688\nv 0.0390625 -0.477513 0.304688\nv 0.046875 -0.477608 0.304688\nv 0.0546875 -0.477831 0.304688\nv 0.0625 -0.477733 0.304688\nv 0.0703125 -0.477615 0.304688\nv 0.078125 -0.477411 0.304688\nv 0.0859375 -0.477381 0.304688\nv 0.09375 -0.477722 0.304688\nv 0.101562 -0.478297 0.304688\nv 0.109375 -0.479114 0.304688\nv 0.117188 -0.480114 0.304688\nv 0.125 -0.481563 0.304688\nv 0.138406 -0.484375 0.304688\nv 0.132812 -0.483164 0.304688\nv 0.140625 -0.484375 0.305198\nv 0.148438 -0.484375 0.307081\nv 0.15625 -0.484375 0.308594\nv 0.164062 -0.484375 0.309912\nv 0.171875 -0.484375 0.310683\nv 0.179688 -0.484375 0.311096\nv 0.1875 -0.484375 0.311426\nv 0.195312 -0.484375 0.311679\nv 0.203125 -0.484375 0.312198\nv -0.320312 -0.476562 0.3077\nv -0.3125 -0.476562 0.307792\nv -0.304688 -0.476562 0.309655\nv -0.296875 -0.476562 0.3115\nv -0.289062 -0.476562 0.311847\nv -0.28125 -0.476562 0.311216\nv -0.273438 -0.476562 0.310822\nv -0.265625 -0.476562 0.310857\nv -0.257812 -0.476562 0.311723\nv -0.0078125 -0.476562 0.310754\nv 0 -0.476562 0.308584\nv 0.0078125 -0.476562 0.307972\nv 0.015625 -0.476562 0.307628\nv 0.0234375 -0.476562 0.307171\nv 0.03125 -0.476562 0.306655\nv 0.0390625 -0.476562 0.306442\nv 0.046875 -0.476562 0.306643\nv 0.0546875 -0.476562 0.306983\nv 0.0625 -0.476562 0.306685\nv 0.0703125 -0.476562 0.306451\nv 0.078125 -0.476562 0.306041\nv 0.0859375 -0.476562 0.306063\nv 0.09375 -0.476562 0.306645\nv 0.101562 -0.476562 0.307552\nv 0.109375 -0.476562 0.308393\nv 0.117188 -0.476562 0.309205\nv 0.125 -0.476562 0.310612\nv 0.132812 -0.476562 0.312399\nv -0.320312 -0.46875 0.307863\nv -0.3125 -0.46875 0.307361\nv -0.304688 -0.46875 0.309384\nv -0.296875 -0.46875 0.311186\nv -0.289062 -0.46875 0.31148\nv -0.28125 -0.46875 0.311065\nv -0.273438 -0.46875 0.311061\nv -0.265625 -0.46875 0.311632\nv -0.320312 -0.460938 0.308044\nv -0.3125 -0.460938 0.306925\nv -0.304688 -0.460938 0.309084\nv -0.296875 -0.460938 0.310855\nv -0.289062 -0.460938 0.311111\nv -0.28125 -0.460938 0.310826\nv -0.273438 -0.460938 0.310958\nv -0.265625 -0.460938 0.311533\nv -0.320312 -0.453125 0.308091\nv -0.3125 -0.453125 0.306695\nv -0.304688 -0.453125 0.308778\nv -0.296875 -0.453125 0.310526\nv -0.289062 -0.453125 0.310724\nv -0.28125 -0.453125 0.310606\nv -0.273438 -0.453125 0.310815\nv -0.265625 -0.453125 0.311439\nv -0.320312 -0.445312 0.308065\nv -0.3125 -0.445312 0.306678\nv -0.304688 -0.445312 0.308485\nv -0.296875 -0.445312 0.310131\nv -0.289062 -0.445312 0.310337\nv -0.28125 -0.445312 0.310289\nv -0.273438 -0.445312 0.310752\nv -0.265625 -0.445312 0.311386\nv 0.429688 -0.445312 0.312362\nv 0.4375 -0.445312 0.312466\nv -0.320312 -0.4375 0.308061\nv -0.3125 -0.4375 0.30709\nv -0.304688 -0.4375 0.308234\nv -0.296875 -0.4375 0.309763\nv -0.289062 -0.4375 0.309924\nv -0.28125 -0.4375 0.310107\nv -0.273438 -0.4375 0.310702\nv -0.265625 -0.4375 0.311269\nv 0.421875 -0.4375 0.312366\nv 0.429688 -0.4375 0.311799\nv 0.4375 -0.4375 0.311993\nv -0.320312 -0.429688 0.308212\nv -0.3125 -0.429688 0.307563\nv -0.304688 -0.429688 0.308149\nv -0.296875 -0.429688 0.30937\nv -0.289062 -0.429688 0.30959\nv -0.28125 -0.429688 0.309972\nv -0.273438 -0.429688 0.310614\nv -0.265625 -0.429688 0.311329\nv 0.421875 -0.429688 0.312453\nv 0.429688 -0.429688 0.311488\nv 0.4375 -0.429688 0.311539\nv 0.445312 -0.429688 0.312496\nv -0.320312 -0.421875 0.308782\nv -0.3125 -0.421875 0.308122\nv -0.304688 -0.421875 0.308064\nv -0.296875 -0.421875 0.30893\nv -0.289062 -0.421875 0.309244\nv -0.28125 -0.421875 0.309863\nv -0.273438 -0.421875 0.31065\nv -0.265625 -0.421875 0.311615\nv 0.429688 -0.421875 0.311737\nv 0.4375 -0.421875 0.311308\nv 0.445312 -0.421875 0.311756\nv -0.320312 -0.414062 0.309382\nv -0.3125 -0.414062 0.308626\nv -0.304688 -0.414062 0.308291\nv -0.296875 -0.414062 0.308639\nv -0.289062 -0.414062 0.309028\nv -0.28125 -0.414062 0.309809\nv -0.273438 -0.414062 0.310824\nv -0.265625 -0.414062 0.311786\nv 0.429688 -0.414062 0.312098\nv 0.4375 -0.414062 0.311617\nv 0.445312 -0.414062 0.311835\nv 0.453125 -0.414062 0.312371\nv -0.320312 -0.40625 0.309852\nv -0.3125 -0.40625 0.308822\nv -0.304688 -0.40625 0.308737\nv -0.296875 -0.40625 0.308772\nv -0.289062 -0.40625 0.308843\nv -0.28125 -0.40625 0.309699\nv -0.273438 -0.40625 0.31082\nv -0.265625 -0.40625 0.311716\nv 0.429688 -0.40625 0.312325\nv 0.4375 -0.40625 0.311822\nv 0.445312 -0.40625 0.311948\nv 0.453125 -0.40625 0.312387\nv -0.320312 -0.398438 0.310261\nv -0.3125 -0.398438 0.309053\nv -0.304688 -0.398438 0.308807\nv -0.296875 -0.398438 0.308704\nv -0.289062 -0.398438 0.308377\nv -0.28125 -0.398438 0.309043\nv -0.273438 -0.398438 0.310179\nv -0.265625 -0.398438 0.31108\nv -0.257812 -0.398438 0.312182\nv 0.429688 -0.398438 0.311833\nv 0.4375 -0.398438 0.31137\nv 0.445312 -0.398438 0.31152\nv 0.453125 -0.398438 0.311904\nv -0.320312 -0.390625 0.310716\nv -0.3125 -0.390625 0.309227\nv -0.304688 -0.390625 0.308765\nv -0.296875 -0.390625 0.308645\nv -0.289062 -0.390625 0.308042\nv -0.28125 -0.390625 0.30846\nv -0.273438 -0.390625 0.309373\nv -0.265625 -0.390625 0.31015\nv -0.257812 -0.390625 0.311099\nv 0.429688 -0.390625 0.311474\nv 0.4375 -0.390625 0.3109\nv 0.445312 -0.390625 0.311094\nv 0.453125 -0.390625 0.31152\nv 0.460938 -0.390625 0.312275\nv -0.320312 -0.382812 0.311122\nv -0.3125 -0.382812 0.309398\nv -0.304688 -0.382812 0.308814\nv -0.296875 -0.382812 0.308552\nv -0.289062 -0.382812 0.307859\nv -0.28125 -0.382812 0.30786\nv -0.273438 -0.382812 0.308716\nv -0.265625 -0.382812 0.309315\nv -0.257812 -0.382812 0.310027\nv -0.25 -0.382812 0.311796\nv 0.421875 -0.382812 0.31182\nv 0.429688 -0.382812 0.310836\nv 0.4375 -0.382812 0.310484\nv 0.445312 -0.382812 0.310629\nv 0.453125 -0.382812 0.311462\nv 0.460938 -0.382812 0.31236\nv -0.320312 -0.375 0.311896\nv -0.3125 -0.375 0.309687\nv -0.304688 -0.375 0.308954\nv -0.296875 -0.375 0.308503\nv -0.289062 -0.375 0.307738\nv -0.28125 -0.375 0.307672\nv -0.273438 -0.375 0.308163\nv -0.265625 -0.375 0.308704\nv -0.257812 -0.375 0.309241\nv -0.25 -0.375 0.310708\nv 0.421875 -0.375 0.311005\nv 0.429688 -0.375 0.31011\nv 0.4375 -0.375 0.3099\nv 0.445312 -0.375 0.310428\nv 0.453125 -0.375 0.311517\nv 0.460938 -0.375 0.312481\nv -0.3125 -0.367188 0.310017\nv -0.304688 -0.367188 0.309124\nv -0.296875 -0.367188 0.308529\nv -0.289062 -0.367188 0.307832\nv -0.28125 -0.367188 0.30753\nv -0.273438 -0.367188 0.30801\nv -0.265625 -0.367188 0.308214\nv -0.257812 -0.367188 0.308844\nv -0.25 -0.367188 0.310005\nv -0.242188 -0.367188 0.311804\nv 0.414062 -0.367188 0.312109\nv 0.421875 -0.367188 0.310327\nv 0.429688 -0.367188 0.309605\nv 0.4375 -0.367188 0.309653\nv 0.445312 -0.367188 0.310341\nv 0.453125 -0.367188 0.311553\nv -0.3125 -0.359375 0.310514\nv -0.304688 -0.359375 0.309411\nv -0.296875 -0.359375 0.308568\nv -0.289062 -0.359375 0.307964\nv -0.28125 -0.359375 0.307469\nv -0.273438 -0.359375 0.307936\nv -0.265625 -0.359375 0.30814\nv -0.257812 -0.359375 0.308465\nv -0.25 -0.359375 0.309524\nv -0.242188 -0.359375 0.311232\nv 0.414062 -0.359375 0.311107\nv 0.421875 -0.359375 0.309393\nv 0.429688 -0.359375 0.309133\nv 0.4375 -0.359375 0.309399\nv 0.445312 -0.359375 0.310222\nv 0.453125 -0.359375 0.31148\nv -0.3125 -0.351562 0.310993\nv -0.304688 -0.351562 0.309649\nv -0.296875 -0.351562 0.308624\nv -0.289062 -0.351562 0.308043\nv -0.28125 -0.351562 0.307386\nv -0.273438 -0.351562 0.307807\nv -0.265625 -0.351562 0.308071\nv -0.257812 -0.351562 0.30833\nv -0.25 -0.351562 0.309174\nv -0.242188 -0.351562 0.310906\nv 0.414062 -0.351562 0.309961\nv 0.421875 -0.351562 0.308654\nv 0.429688 -0.351562 0.308553\nv 0.4375 -0.351562 0.309014\nv 0.445312 -0.351562 0.310179\nv 0.453125 -0.351562 0.311391\nv 0.460938 -0.351562 0.312408\nv -0.3125 -0.34375 0.311451\nv -0.304688 -0.34375 0.309771\nv -0.296875 -0.34375 0.308719\nv -0.289062 -0.34375 0.308124\nv -0.28125 -0.34375 0.307262\nv -0.273438 -0.34375 0.307638\nv -0.265625 -0.34375 0.307922\nv -0.257812 -0.34375 0.308218\nv -0.25 -0.34375 0.309076\nv -0.242188 -0.34375 0.310579\nv 0.40625 -0.34375 0.311469\nv 0.414062 -0.34375 0.309094\nv 0.421875 -0.34375 0.307993\nv 0.429688 -0.34375 0.308097\nv 0.4375 -0.34375 0.308749\nv 0.445312 -0.34375 0.309961\nv 0.453125 -0.34375 0.31126\nv 0.460938 -0.34375 0.31224\nv -0.3125 -0.335938 0.311799\nv -0.304688 -0.335938 0.309833\nv -0.296875 -0.335938 0.308916\nv -0.289062 -0.335938 0.308248\nv -0.28125 -0.335938 0.307236\nv -0.273438 -0.335938 0.307531\nv -0.265625 -0.335938 0.307795\nv -0.257812 -0.335938 0.308129\nv -0.25 -0.335938 0.309037\nv -0.242188 -0.335938 0.310357\nv 0.40625 -0.335938 0.310809\nv 0.414062 -0.335938 0.308396\nv 0.421875 -0.335938 0.307655\nv 0.429688 -0.335938 0.307822\nv 0.4375 -0.335938 0.308583\nv 0.445312 -0.335938 0.309833\nv 0.453125 -0.335938 0.311175\nv 0.460938 -0.335938 0.312188\nv -0.3125 -0.328125 0.312144\nv -0.304688 -0.328125 0.310002\nv -0.296875 -0.328125 0.309142\nv -0.289062 -0.328125 0.308476\nv -0.28125 -0.328125 0.307323\nv -0.273438 -0.328125 0.307422\nv -0.265625 -0.328125 0.307668\nv -0.257812 -0.328125 0.308029\nv -0.25 -0.328125 0.308977\nv -0.242188 -0.328125 0.310245\nv 0.40625 -0.328125 0.310257\nv 0.414062 -0.328125 0.307952\nv 0.421875 -0.328125 0.307322\nv 0.429688 -0.328125 0.307677\nv 0.4375 -0.328125 0.308519\nv 0.445312 -0.328125 0.309753\nv 0.453125 -0.328125 0.3111\nv 0.460938 -0.328125 0.312114\nv -0.304688 -0.320312 0.310131\nv -0.296875 -0.320312 0.30925\nv -0.289062 -0.320312 0.308676\nv -0.28125 -0.320312 0.307458\nv -0.273438 -0.320312 0.307338\nv -0.265625 -0.320312 0.307415\nv -0.257812 -0.320312 0.307755\nv -0.25 -0.320312 0.308749\nv -0.242188 -0.320312 0.310065\nv -0.234375 -0.320312 0.312403\nv 0.40625 -0.320312 0.309908\nv 0.414062 -0.320312 0.307607\nv 0.421875 -0.320312 0.306886\nv 0.429688 -0.320312 0.307562\nv 0.4375 -0.320312 0.308451\nv 0.445312 -0.320312 0.309846\nv 0.453125 -0.320312 0.311073\nv 0.460938 -0.320312 0.312143\nv -0.304688 -0.3125 0.310241\nv -0.296875 -0.3125 0.309343\nv -0.289062 -0.3125 0.308869\nv -0.28125 -0.3125 0.307558\nv -0.273438 -0.3125 0.307269\nv -0.265625 -0.3125 0.307253\nv -0.257812 -0.3125 0.307506\nv -0.25 -0.3125 0.30844\nv -0.242188 -0.3125 0.309817\nv -0.234375 -0.3125 0.312111\nv 0.40625 -0.3125 0.309671\nv 0.414062 -0.3125 0.307387\nv 0.421875 -0.3125 0.306693\nv 0.429688 -0.3125 0.307575\nv 0.4375 -0.3125 0.308535\nv 0.445312 -0.3125 0.31006\nv 0.453125 -0.3125 0.31129\nv 0.460938 -0.3125 0.312306\nv -0.304688 -0.304688 0.310314\nv -0.296875 -0.304688 0.309436\nv -0.289062 -0.304688 0.30906\nv -0.28125 -0.304688 0.307664\nv -0.273438 -0.304688 0.307187\nv -0.265625 -0.304688 0.307109\nv -0.257812 -0.304688 0.307351\nv -0.25 -0.304688 0.308196\nv -0.242188 -0.304688 0.309537\nv -0.234375 -0.304688 0.311802\nv 0.40625 -0.304688 0.309716\nv 0.414062 -0.304688 0.30732\nv 0.421875 -0.304688 0.306849\nv 0.429688 -0.304688 0.307686\nv 0.4375 -0.304688 0.308889\nv 0.445312 -0.304688 0.310374\nv 0.453125 -0.304688 0.311541\nv -0.304688 -0.296875 0.310209\nv -0.296875 -0.296875 0.309535\nv -0.289062 -0.296875 0.309238\nv -0.28125 -0.296875 0.307795\nv -0.273438 -0.296875 0.30718\nv -0.265625 -0.296875 0.30694\nv -0.257812 -0.296875 0.307216\nv -0.25 -0.296875 0.308071\nv -0.242188 -0.296875 0.309392\nv -0.234375 -0.296875 0.311509\nv 0.40625 -0.296875 0.309805\nv 0.414062 -0.296875 0.307364\nv 0.421875 -0.296875 0.307057\nv 0.429688 -0.296875 0.307815\nv 0.4375 -0.296875 0.309087\nv 0.445312 -0.296875 0.310603\nv 0.453125 -0.296875 0.311762\nv -0.304688 -0.289062 0.310047\nv -0.296875 -0.289062 0.309533\nv -0.289062 -0.289062 0.309359\nv -0.28125 -0.289062 0.307917\nv -0.273438 -0.289062 0.307171\nv -0.265625 -0.289062 0.306767\nv -0.257812 -0.289062 0.307056\nv -0.25 -0.289062 0.307935\nv -0.242188 -0.289062 0.309335\nv -0.234375 -0.289062 0.311328\nv 0.40625 -0.289062 0.309927\nv 0.414062 -0.289062 0.30726\nv 0.421875 -0.289062 0.307053\nv 0.429688 -0.289062 0.307792\nv 0.4375 -0.289062 0.309096\nv 0.445312 -0.289062 0.3107\nv 0.453125 -0.289062 0.311804\nv -0.304688 -0.28125 0.309896\nv -0.296875 -0.28125 0.309474\nv -0.289062 -0.28125 0.309306\nv -0.28125 -0.28125 0.308011\nv -0.273438 -0.28125 0.307079\nv -0.265625 -0.28125 0.306553\nv -0.257812 -0.28125 0.306818\nv -0.25 -0.28125 0.307701\nv -0.242188 -0.28125 0.309164\nv -0.234375 -0.28125 0.311342\nv 0.40625 -0.28125 0.310365\nv 0.414062 -0.28125 0.307575\nv 0.421875 -0.28125 0.307186\nv 0.429688 -0.28125 0.307795\nv 0.4375 -0.28125 0.309074\nv 0.445312 -0.28125 0.310685\nv 0.453125 -0.28125 0.311905\nv -0.304688 -0.273438 0.309696\nv -0.296875 -0.273438 0.309327\nv -0.289062 -0.273438 0.309185\nv -0.28125 -0.273438 0.307958\nv -0.273438 -0.273438 0.306966\nv -0.265625 -0.273438 0.306483\nv -0.257812 -0.273438 0.306758\nv -0.25 -0.273438 0.307575\nv -0.242188 -0.273438 0.309049\nv -0.234375 -0.273438 0.311407\nv 0.40625 -0.273438 0.310176\nv 0.414062 -0.273438 0.307398\nv 0.421875 -0.273438 0.307148\nv 0.429688 -0.273438 0.307762\nv 0.4375 -0.273438 0.308966\nv 0.445312 -0.273438 0.310472\nv 0.453125 -0.273438 0.31192\nv -0.304688 -0.265625 0.309551\nv -0.296875 -0.265625 0.309225\nv -0.289062 -0.265625 0.309138\nv -0.28125 -0.265625 0.30787\nv -0.273438 -0.265625 0.306873\nv -0.265625 -0.265625 0.306325\nv -0.257812 -0.265625 0.306623\nv -0.25 -0.265625 0.30743\nv -0.242188 -0.265625 0.308859\nv -0.234375 -0.265625 0.311381\nv 0.40625 -0.265625 0.309728\nv 0.414062 -0.265625 0.306908\nv 0.421875 -0.265625 0.306586\nv 0.429688 -0.265625 0.307229\nv 0.4375 -0.265625 0.308647\nv 0.445312 -0.265625 0.31008\nv 0.453125 -0.265625 0.311186\nv 0.460938 -0.265625 0.312273\nv -0.304688 -0.257812 0.30929\nv -0.296875 -0.257812 0.308799\nv -0.289062 -0.257812 0.308713\nv -0.28125 -0.257812 0.30749\nv -0.273438 -0.257812 0.306477\nv -0.265625 -0.257812 0.305893\nv -0.257812 -0.257812 0.306083\nv -0.25 -0.257812 0.306865\nv -0.242188 -0.257812 0.3082\nv -0.234375 -0.257812 0.310904\nv 0.40625 -0.257812 0.310033\nv 0.414062 -0.257812 0.307304\nv 0.421875 -0.257812 0.306539\nv 0.429688 -0.257812 0.307237\nv 0.4375 -0.257812 0.308758\nv 0.445312 -0.257812 0.309904\nv 0.453125 -0.257812 0.311029\nv 0.460938 -0.257812 0.312005\nv 0.484375 -0.257812 0.312268\nv -0.304688 -0.25 0.308912\nv -0.296875 -0.25 0.308314\nv -0.289062 -0.25 0.308183\nv -0.28125 -0.25 0.307017\nv -0.273438 -0.25 0.305999\nv -0.265625 -0.25 0.305354\nv -0.257812 -0.25 0.305429\nv -0.25 -0.25 0.306152\nv -0.242188 -0.25 0.307406\nv -0.234375 -0.25 0.310159\nv 0.40625 -0.25 0.310341\nv 0.414062 -0.25 0.30758\nv 0.421875 -0.25 0.306389\nv 0.429688 -0.25 0.307096\nv 0.4375 -0.25 0.30824\nv 0.445312 -0.25 0.309435\nv 0.453125 -0.25 0.310634\nv 0.460938 -0.25 0.311543\nv 0.476562 -0.25 0.312391\nv 0.484375 -0.25 0.312066\nv -0.304688 -0.242188 0.308669\nv -0.296875 -0.242188 0.307894\nv -0.289062 -0.242188 0.307725\nv -0.28125 -0.242188 0.306568\nv -0.273438 -0.242188 0.305556\nv -0.265625 -0.238725 0.304688\nv -0.265625 -0.242188 0.304839\nv -0.257812 -0.241261 0.304688\nv -0.257812 -0.242188 0.30474\nv -0.25 -0.242188 0.30545\nv -0.242188 -0.242188 0.306522\nv -0.234375 -0.242188 0.30925\nv 0.40625 -0.242188 0.31061\nv 0.414062 -0.242188 0.307841\nv 0.421875 -0.242188 0.306509\nv 0.429688 -0.242188 0.306614\nv 0.4375 -0.242188 0.307676\nv 0.445312 -0.242188 0.308785\nv 0.453125 -0.242188 0.309887\nv 0.460938 -0.242188 0.310677\nv 0.46875 -0.242188 0.311792\nv 0.476562 -0.242188 0.311435\nv 0.484375 -0.242188 0.311709\nv -0.304688 -0.234375 0.308676\nv -0.296875 -0.234375 0.307623\nv -0.289062 -0.234375 0.307376\nv -0.28125 -0.234375 0.306242\nv -0.267544 -0.234375 0.304688\nv -0.273438 -0.234375 0.305289\nv -0.252174 -0.234375 0.304688\nv -0.25 -0.23107 0.304688\nv -0.25 -0.234375 0.304845\nv -0.242188 -0.234375 0.305702\nv -0.234375 -0.234375 0.308371\nv 0.40625 -0.234375 0.311209\nv 0.414062 -0.234375 0.308348\nv 0.421875 -0.234375 0.306602\nv 0.429688 -0.234375 0.306243\nv 0.4375 -0.234375 0.307239\nv 0.445312 -0.234375 0.308283\nv 0.453125 -0.234375 0.309282\nv 0.460938 -0.234375 0.309917\nv 0.46875 -0.234375 0.3109\nv 0.476562 -0.234375 0.310468\nv 0.484375 -0.234375 0.311037\nv -0.304688 -0.226562 0.308843\nv -0.296875 -0.226562 0.307717\nv -0.289062 -0.226562 0.307388\nv -0.28125 -0.226562 0.306111\nv -0.268313 -0.226562 0.304688\nv -0.273438 -0.226562 0.305302\nv -0.247607 -0.226562 0.304688\nv -0.242188 -0.226562 0.305285\nv -0.234375 -0.226562 0.308214\nv 0.40625 -0.226562 0.311973\nv 0.414062 -0.226562 0.309021\nv 0.421875 -0.226562 0.306887\nv 0.429688 -0.226562 0.306332\nv 0.4375 -0.226562 0.307131\nv 0.445312 -0.226562 0.308062\nv 0.453125 -0.226562 0.308871\nv 0.460938 -0.226562 0.309272\nv 0.46875 -0.226562 0.310146\nv 0.476562 -0.226562 0.309673\nv 0.484375 -0.226562 0.310399\nv -0.304688 -0.21875 0.309032\nv -0.296875 -0.21875 0.307921\nv -0.289062 -0.21875 0.30763\nv -0.28125 -0.21875 0.306025\nv -0.27016 -0.21875 0.304688\nv -0.273438 -0.21875 0.305134\nv -0.242891 -0.21875 0.304688\nv -0.242188 -0.216134 0.304688\nv -0.242188 -0.21875 0.304779\nv -0.234375 -0.21875 0.308105\nv 0.414062 -0.21875 0.309523\nv 0.421875 -0.21875 0.307095\nv 0.429688 -0.21875 0.306317\nv 0.4375 -0.21875 0.306951\nv 0.445312 -0.21875 0.307874\nv 0.453125 -0.21875 0.308476\nv 0.460938 -0.21875 0.308739\nv 0.46875 -0.21875 0.30939\nv 0.476562 -0.21875 0.308961\nv 0.484375 -0.21875 0.309791\nv 0.492188 -0.21875 0.311886\nv -0.304688 -0.210938 0.309143\nv -0.296875 -0.210938 0.307903\nv -0.289062 -0.210938 0.307604\nv -0.28125 -0.210938 0.30619\nv -0.269694 -0.210938 0.304688\nv -0.273438 -0.210938 0.305111\nv -0.241711 -0.210938 0.304688\nv -0.234375 -0.210938 0.307962\nv -0.226562 -0.210938 0.312468\nv 0.414062 -0.210938 0.310032\nv 0.421875 -0.210938 0.30738\nv 0.429688 -0.210938 0.306332\nv 0.4375 -0.210938 0.306849\nv 0.445312 -0.210938 0.307592\nv 0.453125 -0.210938 0.308026\nv 0.460938 -0.210938 0.308341\nv 0.46875 -0.210938 0.308752\nv 0.476562 -0.210938 0.308409\nv 0.484375 -0.210938 0.309349\nv 0.492188 -0.210938 0.311446\nv -0.304688 -0.203125 0.309362\nv -0.296875 -0.203125 0.307896\nv -0.289062 -0.203125 0.307405\nv -0.28125 -0.203125 0.306381\nv -0.26845 -0.203125 0.304688\nv -0.273438 -0.203125 0.305273\nv -0.265625 -0.19662 0.304688\nv -0.241712 -0.203125 0.304688\nv -0.242188 -0.201658 0.304688\nv -0.234375 -0.203125 0.308011\nv -0.226562 -0.203125 0.312261\nv 0.414062 -0.203125 0.31051\nv 0.421875 -0.203125 0.307834\nv 0.429688 -0.203125 0.306469\nv 0.4375 -0.203125 0.306874\nv 0.445312 -0.203125 0.307394\nv 0.453125 -0.203125 0.307747\nv 0.460938 -0.203125 0.308036\nv 0.46875 -0.203125 0.308087\nv 0.476562 -0.203125 0.307975\nv 0.484375 -0.203125 0.309071\nv 0.492188 -0.203125 0.311022\nv -0.304688 -0.195312 0.310034\nv -0.296875 -0.195312 0.308179\nv -0.289062 -0.195312 0.307572\nv -0.28125 -0.195312 0.306728\nv -0.273438 -0.195312 0.305616\nv -0.265103 -0.195312 0.304688\nv -0.265625 -0.195312 0.304755\nv -0.257812 -0.189394 0.304688\nv -0.247586 -0.195312 0.304688\nv -0.25 -0.193367 0.304688\nv -0.242188 -0.195312 0.305574\nv -0.234375 -0.195312 0.308703\nv -0.226562 -0.195312 0.312394\nv 0.414062 -0.195312 0.310794\nv 0.421875 -0.195312 0.308364\nv 0.429688 -0.195312 0.30695\nv 0.4375 -0.195312 0.307007\nv 0.445312 -0.195312 0.3073\nv 0.453125 -0.195312 0.307587\nv 0.460938 -0.195312 0.30766\nv 0.46875 -0.195312 0.30757\nv 0.476562 -0.195312 0.307627\nv 0.484375 -0.195312 0.308714\nv 0.492188 -0.195312 0.310722\nv -0.304688 -0.1875 0.310767\nv -0.296875 -0.1875 0.308645\nv -0.289062 -0.1875 0.307829\nv -0.28125 -0.1875 0.306613\nv -0.273438 -0.1875 0.305824\nv -0.265625 -0.1875 0.305469\nv -0.257812 -0.1875 0.304984\nv -0.25 -0.1875 0.305574\nv -0.242188 -0.1875 0.307068\nv -0.234375 -0.1875 0.309633\nv 0.414062 -0.1875 0.310838\nv 0.421875 -0.1875 0.308771\nv 0.429688 -0.1875 0.307842\nv 0.4375 -0.1875 0.307624\nv 0.445312 -0.1875 0.307473\nv 0.453125 -0.1875 0.307342\nv 0.460938 -0.1875 0.307212\nv 0.46875 -0.1875 0.306947\nv 0.476562 -0.1875 0.307253\nv 0.484375 -0.1875 0.308522\nv 0.492188 -0.1875 0.310613\nv -0.304688 -0.179688 0.311652\nv -0.296875 -0.179688 0.30934\nv -0.289062 -0.179688 0.30843\nv -0.28125 -0.179688 0.306996\nv -0.273438 -0.179688 0.306633\nv -0.265625 -0.179688 0.306565\nv -0.257812 -0.179688 0.306296\nv -0.25 -0.179688 0.306604\nv -0.242188 -0.179688 0.308101\nv -0.234375 -0.179688 0.310755\nv 0.414062 -0.179688 0.310701\nv 0.421875 -0.179688 0.308735\nv 0.429688 -0.179688 0.308226\nv 0.4375 -0.179688 0.308083\nv 0.445312 -0.179688 0.307802\nv 0.453125 -0.179688 0.30732\nv 0.460938 -0.179688 0.306789\nv 0.46875 -0.179688 0.306498\nv 0.476562 -0.179688 0.307223\nv 0.484375 -0.179688 0.308676\nv 0.492188 -0.179688 0.310618\nv -0.296875 -0.171875 0.310224\nv -0.289062 -0.171875 0.309083\nv -0.28125 -0.171875 0.30743\nv -0.273438 -0.171875 0.307401\nv -0.265625 -0.171875 0.307695\nv -0.257812 -0.171875 0.307369\nv -0.25 -0.171875 0.307721\nv -0.242188 -0.171875 0.309749\nv -0.234375 -0.171875 0.312047\nv 0.414062 -0.171875 0.311325\nv 0.421875 -0.171875 0.309193\nv 0.429688 -0.171875 0.308882\nv 0.4375 -0.171875 0.308838\nv 0.445312 -0.171875 0.308287\nv 0.453125 -0.171875 0.307778\nv 0.460938 -0.171875 0.307065\nv 0.46875 -0.171875 0.306623\nv 0.476562 -0.171875 0.30738\nv 0.484375 -0.171875 0.308579\nv 0.492188 -0.171875 0.310601\nv -0.296875 -0.164062 0.31094\nv -0.289062 -0.164062 0.309534\nv -0.28125 -0.164062 0.307657\nv -0.273438 -0.164062 0.308074\nv -0.265625 -0.164062 0.308635\nv -0.257812 -0.164062 0.308331\nv -0.25 -0.164062 0.308868\nv -0.242188 -0.164062 0.311038\nv 0.414062 -0.164062 0.31203\nv 0.421875 -0.164062 0.309719\nv 0.429688 -0.164062 0.309576\nv 0.4375 -0.164062 0.309731\nv 0.445312 -0.164062 0.309149\nv 0.453125 -0.164062 0.308515\nv 0.460938 -0.164062 0.307925\nv 0.46875 -0.164062 0.307377\nv 0.476562 -0.164062 0.307933\nv 0.484375 -0.164062 0.30888\nv 0.492188 -0.164062 0.311027\nv -0.296875 -0.15625 0.311443\nv -0.289062 -0.15625 0.309822\nv -0.28125 -0.15625 0.307926\nv -0.273438 -0.15625 0.308412\nv -0.265625 -0.15625 0.309054\nv -0.257812 -0.15625 0.308792\nv -0.25 -0.15625 0.30993\nv -0.242188 -0.15625 0.312004\nv 0.421875 -0.15625 0.310451\nv 0.429688 -0.15625 0.310423\nv 0.4375 -0.15625 0.310506\nv 0.445312 -0.15625 0.309809\nv 0.453125 -0.15625 0.309179\nv 0.460938 -0.15625 0.308564\nv 0.46875 -0.15625 0.308366\nv 0.476562 -0.15625 0.308694\nv 0.484375 -0.15625 0.309108\nv 0.492188 -0.15625 0.311035\nv -0.296875 -0.148438 0.311936\nv -0.289062 -0.148438 0.309865\nv -0.28125 -0.148438 0.307994\nv -0.273438 -0.148438 0.308376\nv -0.265625 -0.148438 0.309048\nv -0.257812 -0.148438 0.308849\nv -0.25 -0.148438 0.310658\nv 0.421875 -0.148438 0.311186\nv 0.429688 -0.148438 0.311017\nv 0.4375 -0.148438 0.311047\nv 0.445312 -0.148438 0.310338\nv 0.453125 -0.148438 0.309689\nv 0.460938 -0.148438 0.308968\nv 0.46875 -0.148438 0.309268\nv 0.476562 -0.148438 0.309662\nv 0.484375 -0.148438 0.30971\nv 0.492188 -0.148438 0.311698\nv -0.296875 -0.140625 0.312133\nv -0.289062 -0.140625 0.309625\nv -0.28125 -0.140625 0.307769\nv -0.273438 -0.140625 0.308437\nv -0.265625 -0.140625 0.30921\nv -0.257812 -0.140625 0.309431\nv -0.25 -0.140625 0.311648\nv 0.421875 -0.140625 0.312054\nv 0.429688 -0.140625 0.311587\nv 0.4375 -0.140625 0.311501\nv 0.445312 -0.140625 0.310795\nv 0.453125 -0.140625 0.310057\nv 0.460938 -0.140625 0.309329\nv 0.46875 -0.140625 0.310086\nv 0.476562 -0.140625 0.310414\nv 0.484375 -0.140625 0.310192\nv 0.492188 -0.140625 0.312317\nv -0.296875 -0.132812 0.31198\nv -0.289062 -0.132812 0.309332\nv -0.28125 -0.132812 0.30738\nv -0.273438 -0.132812 0.308511\nv -0.265625 -0.132812 0.309471\nv -0.257812 -0.132812 0.310399\nv 0.429688 -0.132812 0.312335\nv 0.4375 -0.132812 0.312036\nv 0.445312 -0.132812 0.311327\nv 0.453125 -0.132812 0.310445\nv 0.460938 -0.132812 0.309577\nv 0.46875 -0.132812 0.310637\nv 0.476562 -0.132812 0.310812\nv 0.484375 -0.132812 0.310664\nv -0.296875 -0.125 0.312013\nv -0.289062 -0.125 0.309148\nv -0.28125 -0.125 0.307254\nv -0.273438 -0.125 0.3087\nv -0.265625 -0.125 0.309676\nv -0.257812 -0.125 0.3111\nv 0.4375 -0.125 0.311978\nv 0.445312 -0.125 0.311138\nv 0.453125 -0.125 0.310236\nv 0.460938 -0.125 0.309322\nv 0.46875 -0.125 0.310269\nv 0.476562 -0.125 0.310287\nv 0.484375 -0.125 0.31054\nv -0.296875 -0.117188 0.311315\nv -0.289062 -0.117188 0.308199\nv -0.28125 -0.117188 0.306918\nv -0.273438 -0.117188 0.308429\nv -0.265625 -0.117188 0.309856\nv -0.257812 -0.117188 0.311593\nv 0.429688 -0.117188 0.312452\nv 0.4375 -0.117188 0.311682\nv 0.445312 -0.117188 0.310494\nv 0.453125 -0.117188 0.309351\nv 0.460938 -0.117188 0.308353\nv 0.46875 -0.117188 0.309127\nv 0.476562 -0.117188 0.309031\nv 0.484375 -0.117188 0.309676\nv -0.296875 -0.109375 0.310612\nv -0.289062 -0.109375 0.307036\nv -0.28125 -0.109375 0.306293\nv -0.273438 -0.109375 0.308052\nv -0.265625 -0.109375 0.31025\nv -0.257812 -0.109375 0.312402\nv 0.429688 -0.109375 0.312338\nv 0.4375 -0.109375 0.311194\nv 0.445312 -0.109375 0.309438\nv 0.453125 -0.109375 0.30848\nv 0.460938 -0.109375 0.307246\nv 0.46875 -0.109375 0.307898\nv 0.476562 -0.109375 0.307613\nv 0.484375 -0.109375 0.308236\nv -0.296875 -0.101562 0.310035\nv -0.289062 -0.101562 0.306185\nv -0.28125 -0.0947242 0.304688\nv -0.28125 -0.101562 0.305591\nv -0.273438 -0.101562 0.30724\nv -0.265625 -0.101562 0.310288\nv 0.429688 -0.101562 0.312033\nv 0.4375 -0.101562 0.310634\nv 0.445312 -0.101562 0.308409\nv 0.453125 -0.101562 0.306957\nv 0.460938 -0.0979727 0.304688\nv 0.460938 -0.101562 0.305522\nv 0.46875 -0.0981745 0.304688\nv 0.46875 -0.101562 0.305689\nv 0.476562 -0.100721 0.304688\nv 0.476562 -0.101562 0.304967\nv 0.484375 -0.0989043 0.304688\nv 0.484375 -0.101562 0.305792\nv 0.492188 -0.101562 0.310677\nv -0.296875 -0.09375 0.308727\nv -0.283428 -0.09375 0.304688\nv -0.289062 -0.0921989 0.304688\nv -0.289062 -0.09375 0.305107\nv -0.280693 -0.09375 0.304688\nv -0.273438 -0.09375 0.306458\nv -0.265625 -0.09375 0.310006\nv 0.429688 -0.09375 0.310991\nv 0.4375 -0.09375 0.309328\nv 0.445312 -0.09375 0.306774\nv 0.455376 -0.09375 0.304688\nv 0.453125 -0.0916509 0.304688\nv 0.453125 -0.09375 0.305104\nv 0.489105 -0.09375 0.304688\nv 0.492188 -0.0898349 0.304688\nv 0.492188 -0.09375 0.306775\nv -0.293622 -0.0859375 0.304688\nv -0.296875 -0.0812841 0.304688\nv -0.296875 -0.0859375 0.306193\nv -0.276024 -0.0859375 0.304688\nv -0.273438 -0.0818955 0.304688\nv -0.273438 -0.0859375 0.305568\nv -0.265625 -0.0859375 0.309507\nv 0.421875 -0.0859375 0.312282\nv 0.429688 -0.0859375 0.310277\nv 0.4375 -0.0859375 0.308463\nv 0.448418 -0.0859375 0.304688\nv 0.445312 -0.0826143 0.304688\nv 0.445312 -0.0859375 0.305556\nv 0.494047 -0.0859375 0.304688\nv -0.297858 -0.078125 0.304688\nv -0.27159 -0.078125 0.304688\nv -0.265625 -0.0713416 0.304688\nv -0.265625 -0.078125 0.307927\nv -0.257812 -0.078125 0.312\nv 0.421875 -0.078125 0.310805\nv 0.429688 -0.078125 0.308454\nv 0.441877 -0.078125 0.304688\nv 0.4375 -0.0752547 0.304688\nv 0.4375 -0.078125 0.306489\nv 0.497491 -0.078125 0.304688\nv 0.5 -0.0713255 0.304688\nv 0.5 -0.078125 0.310448\nv -0.300154 -0.0703125 0.304688\nv -0.304688 -0.0703125 0.311431\nv -0.26445 -0.0703125 0.304688\nv -0.257812 -0.0660898 0.304688\nv -0.257812 -0.0703125 0.308414\nv 0.421875 -0.0703125 0.308967\nv 0.431423 -0.0703125 0.304688\nv 0.429688 -0.0681972 0.304688\nv 0.429688 -0.0703125 0.305605\nv 0.500232 -0.0703125 0.304688\nv -0.301752 -0.0625 0.304688\nv -0.304688 -0.0625 0.30939\nv -0.252382 -0.0625 0.304688\nv -0.25 -0.059897 0.304688\nv -0.25 -0.0625 0.307254\nv 0.414062 -0.0625 0.311409\nv 0.423868 -0.0625 0.304688\nv 0.421875 -0.0625 0.305612\nv 0.502313 -0.0625 0.304688\nv -0.302519 -0.0546875 0.304688\nv -0.304688 -0.0546875 0.308217\nv -0.24834 -0.0546875 0.304688\nv 0.414062 -0.0546875 0.31157\nv 0.422698 -0.0546875 0.304688\nv 0.421875 -0.0470969 0.304688\nv 0.421875 -0.0546875 0.305143\nv 0.503078 -0.0546875 0.304688\nv -0.302893 -0.046875 0.304688\nv -0.304688 -0.046875 0.308112\nv -0.247341 -0.046875 0.304688\nv 0.421857 -0.046875 0.304688\nv 0.414062 -0.046875 0.311145\nv 0.503993 -0.046875 0.304688\nv -0.303726 -0.0390625 0.304688\nv -0.304688 -0.0390625 0.307145\nv -0.245988 -0.0390625 0.304688\nv 0.419397 -0.0390625 0.304688\nv 0.414062 -0.0390625 0.309087\nv 0.504531 -0.0390625 0.304688\nv -0.304298 -0.03125 0.304688\nv -0.304688 -0.0287258 0.304688\nv -0.304688 -0.03125 0.306224\nv -0.245021 -0.03125 0.304688\nv -0.242188 -0.03125 0.309808\nv 0.418673 -0.03125 0.304688\nv 0.414062 -0.03125 0.308918\nv 0.503851 -0.03125 0.304688\nv -0.305488 -0.0234375 0.304688\nv -0.243128 -0.0234375 0.304688\nv -0.242188 -0.0206667 0.304688\nv -0.242188 -0.0234375 0.306303\nv 0.419399 -0.0234375 0.304688\nv 0.414062 -0.0234375 0.309533\nv 0.503013 -0.0234375 0.304688\nv -0.30708 -0.015625 0.304688\nv -0.239983 -0.015625 0.304688\nv 0.420714 -0.015625 0.304688\nv 0.414062 -0.015625 0.310075\nv 0.501611 -0.015625 0.304688\nv -0.308097 -0.0078125 0.304688\nv -0.236868 -0.0078125 0.304688\nv -0.234375 -0.00202505 0.304688\nv -0.234375 -0.0078125 0.309105\nv 0.420505 -0.0078125 0.304688\nv 0.414062 -0.0078125 0.310129\nv 0.500161 -0.0078125 0.304688\nv 0.5 -0.00561883 0.304688\nv -0.308778 0 0.304688\nv -0.23331 0 0.304688\nv 0.418748 0 0.304688\nv 0.414062 0 0.308867\nv 0.499571 0 0.304688\nv 0.5 0 0.31196\nv -0.308873 0.0078125 0.304688\nv -0.228115 0.0078125 0.304688\nv -0.226562 0.00935845 0.304688\nv -0.226562 0.0078125 0.307045\nv 0.416532 0.0078125 0.304688\nv 0.414062 0.012636 0.304688\nv 0.414062 0.0078125 0.306631\nv 0.499777 0.0078125 0.304688\nv 0.5 0.0078125 0.308769\nv -0.308666 0.015625 0.304688\nv -0.220086 0.015625 0.304688\nv -0.21875 0.0165321 0.304688\nv -0.21875 0.015625 0.306814\nv -0.210938 0.0214922 0.304688\nv 0.412415 0.015625 0.304688\nv 0.40625 0.0214891 0.304688\nv 0.40625 0.015625 0.309732\nv 0.499932 0.015625 0.304688\nv 0.5 0.015625 0.306602\nv -0.308059 0.0234375 0.304688\nv -0.207406 0.0234375 0.304688\nv -0.203125 0.0249738 0.304688\nv -0.203125 0.0234375 0.312168\nv -0.195312 0.0273185 0.304688\nv -0.1875 0.029156 0.304688\nv -0.179688 0.0297272 0.304688\nv -0.171875 0.0300004 0.304688\nv -0.164062 0.0301896 0.304688\nv -0.15625 0.0303554 0.304688\nv -0.148438 0.030449 0.304688\nv -0.140625 0.0300587 0.304688\nv -0.132812 0.0296915 0.304688\nv -0.125 0.0294403 0.304688\nv -0.117188 0.0291428 0.304688\nv -0.109375 0.0289676 0.304688\nv -0.101562 0.028892 0.304688\nv -0.09375 0.0288344 0.304688\nv -0.0859375 0.0287812 0.304688\nv -0.078125 0.0287595 0.304688\nv -0.0703125 0.0287018 0.304688\nv -0.0625 0.0284878 0.304688\nv -0.0546875 0.028221 0.304688\nv -0.046875 0.0279141 0.304688\nv -0.0390625 0.0276295 0.304688\nv -0.03125 0.0273882 0.304688\nv -0.0234375 0.0272195 0.304688\nv -0.015625 0.0270847 0.304688\nv -0.0078125 0.0269838 0.304688\nv 0 0.0268137 0.304688\nv 0.0078125 0.0266401 0.304688\nv 0.015625 0.026659 0.304688\nv 0.0234375 0.0267036 0.304688\nv 0.03125 0.0267286 0.304688\nv 0.0390625 0.0267407 0.304688\nv 0.046875 0.0267457 0.304688\nv 0.0546875 0.0267752 0.304688\nv 0.0625 0.0267833 0.304688\nv 0.0703125 0.0267484 0.304688\nv 0.078125 0.0266837 0.304688\nv 0.0859375 0.026553 0.304688\nv 0.09375 0.0264474 0.304688\nv 0.101562 0.0263781 0.304688\nv 0.109375 0.0263325 0.304688\nv 0.117188 0.0263049 0.304688\nv 0.125 0.0262492 0.304688\nv 0.132812 0.0261751 0.304688\nv 0.140625 0.0261656 0.304688\nv 0.148438 0.0262072 0.304688\nv 0.15625 0.0262036 0.304688\nv 0.164062 0.0261736 0.304688\nv 0.171875 0.0261163 0.304688\nv 0.179688 0.0260394 0.304688\nv 0.1875 0.0259716 0.304688\nv 0.195312 0.0259211 0.304688\nv 0.203125 0.0259071 0.304688\nv 0.210938 0.0259916 0.304688\nv 0.21875 0.026081 0.304688\nv 0.226562 0.0262265 0.304688\nv 0.234375 0.0263137 0.304688\nv 0.242188 0.0263424 0.304688\nv 0.25 0.0263578 0.304688\nv 0.257812 0.0264699 0.304688\nv 0.265625 0.0265316 0.304688\nv 0.273438 0.0266173 0.304688\nv 0.28125 0.0267262 0.304688\nv 0.289062 0.0268965 0.304688\nv 0.296875 0.0271989 0.304688\nv 0.304688 0.0273486 0.304688\nv 0.3125 0.0275756 0.304688\nv 0.320312 0.0277155 0.304688\nv 0.328125 0.0277869 0.304688\nv 0.335938 0.0279092 0.304688\nv 0.34375 0.0281144 0.304688\nv 0.351562 0.0284683 0.304688\nv 0.359375 0.0287763 0.304688\nv 0.367188 0.0290629 0.304688\nv 0.375 0.0291816 0.304688\nv 0.382812 0.0287417 0.304688\nv 0.390625 0.0269658 0.304688\nv 0.403132 0.0234375 0.304688\nv 0.398438 0.024905 0.304688\nv 0.398438 0.0234375 0.308379\nv 0.499783 0.0234375 0.304688\nv 0.5 0.0234375 0.307783\nv -0.307289 0.03125 0.304688\nv 0.497888 0.03125 0.304688\nv -0.306387 0.0390625 0.304688\nv 0.494768 0.0390625 0.304688\nv 0.492188 0.043644 0.304688\nv -0.305415 0.046875 0.304688\nv -0.304688 0.0512372 0.304688\nv 0.49034 0.046875 0.304688\nv 0.484375 0.0535506 0.304688\nv -0.304027 0.0546875 0.304688\nv -0.304688 0.0546875 0.307605\nv 0.482787 0.0546875 0.304688\nv 0.476562 0.0588356 0.304688\nv -0.302239 0.0625 0.304688\nv 0.390625 0.0700562 0.304688\nv 0.398438 0.0697859 0.304688\nv 0.40625 0.069771 0.304688\nv 0.414062 0.069703 0.304688\nv 0.421875 0.069628 0.304688\nv 0.429688 0.0694789 0.304688\nv 0.4375 0.0691758 0.304688\nv 0.445312 0.0686759 0.304688\nv 0.453125 0.067135 0.304688\nv 0.460938 0.0653058 0.304688\nv 0.469578 0.0625 0.304688\nv 0.46875 0.0628692 0.304688\nv -0.301088 0.0703125 0.304688\nv -0.195312 0.0772175 0.304688\nv -0.1875 0.0765955 0.304688\nv -0.179688 0.0757547 0.304688\nv -0.171875 0.0752034 0.304688\nv -0.164062 0.074936 0.304688\nv -0.15625 0.0748263 0.304688\nv -0.148438 0.0747234 0.304688\nv -0.140625 0.0747348 0.304688\nv -0.132812 0.0747755 0.304688\nv -0.125 0.0747796 0.304688\nv -0.117188 0.0747816 0.304688\nv -0.109375 0.0747633 0.304688\nv -0.101562 0.0747981 0.304688\nv -0.09375 0.0748677 0.304688\nv -0.0859375 0.0749505 0.304688\nv -0.078125 0.0750078 0.304688\nv -0.0703125 0.0749231 0.304688\nv -0.0625 0.0747955 0.304688\nv -0.0546875 0.0746493 0.304688\nv -0.046875 0.0744345 0.304688\nv -0.0390625 0.0742025 0.304688\nv -0.03125 0.0739111 0.304688\nv -0.0234375 0.073662 0.304688\nv -0.015625 0.0734146 0.304688\nv -0.0078125 0.0732363 0.304688\nv 0 0.0730981 0.304688\nv 0.0078125 0.0729707 0.304688\nv 0.015625 0.0728051 0.304688\nv 0.0234375 0.0726095 0.304688\nv 0.03125 0.0724123 0.304688\nv 0.0390625 0.0722585 0.304688\nv 0.046875 0.0722588 0.304688\nv 0.0546875 0.0723026 0.304688\nv 0.0625 0.0722871 0.304688\nv 0.0703125 0.0722294 0.304688\nv 0.078125 0.0721428 0.304688\nv 0.0859375 0.0720727 0.304688\nv 0.09375 0.0720743 0.304688\nv 0.101562 0.0720815 0.304688\nv 0.109375 0.0720918 0.304688\nv 0.117188 0.0721047 0.304688\nv 0.125 0.0720893 0.304688\nv 0.132812 0.0720592 0.304688\nv 0.140625 0.0720537 0.304688\nv 0.148438 0.0721033 0.304688\nv 0.15625 0.0721448 0.304688\nv 0.164062 0.0721991 0.304688\nv 0.171875 0.0722428 0.304688\nv 0.179688 0.072283 0.304688\nv 0.1875 0.0723154 0.304688\nv 0.195312 0.072323 0.304688\nv 0.203125 0.0723298 0.304688\nv 0.210938 0.0722636 0.304688\nv 0.21875 0.0721376 0.304688\nv 0.226562 0.0720122 0.304688\nv 0.234375 0.0719217 0.304688\nv 0.242188 0.0718843 0.304688\nv 0.25 0.0717669 0.304688\nv 0.257812 0.071657 0.304688\nv 0.265625 0.0715557 0.304688\nv 0.273438 0.0715051 0.304688\nv 0.28125 0.0714942 0.304688\nv 0.289062 0.0715309 0.304688\nv 0.296875 0.0716248 0.304688\nv 0.304688 0.0717135 0.304688\nv 0.3125 0.0717795 0.304688\nv 0.320312 0.0716289 0.304688\nv 0.328125 0.0714013 0.304688\nv 0.335938 0.0712163 0.304688\nv 0.34375 0.0711054 0.304688\nv 0.351562 0.0710466 0.304688\nv 0.359375 0.0709681 0.304688\nv 0.367188 0.0708414 0.304688\nv 0.375 0.0707153 0.304688\nv 0.385814 0.0703125 0.304688\nv 0.382812 0.0704646 0.304688\nv 0.382812 0.0703125 0.311377\nv -0.300565 0.078125 0.304688\nv -0.210938 0.0800767 0.304688\nv -0.201716 0.078125 0.304688\nv -0.203125 0.0783588 0.304688\nv -0.203125 0.078125 0.307799\nv -0.29985 0.0859375 0.304688\nv -0.218746 0.0859375 0.304688\nv -0.21875 0.0859434 0.304688\nv -0.21875 0.0859375 0.304782\nv -0.299412 0.09375 0.304688\nv -0.224284 0.09375 0.304688\nv -0.226562 0.0993534 0.304688\nv -0.298882 0.101562 0.304688\nv -0.227506 0.101562 0.304688\nv -0.226562 0.101562 0.308754\nv -0.298855 0.109375 0.304688\nv -0.226764 0.109375 0.304688\nv -0.226562 0.112954 0.304688\nv -0.226562 0.109375 0.305449\nv -0.298563 0.117188 0.304688\nv -0.226373 0.117188 0.304688\nv -0.298852 0.125 0.304688\nv -0.225685 0.125 0.304688\nv -0.29991 0.132812 0.304688\nv -0.304688 0.132812 0.311673\nv -0.224997 0.132812 0.304688\nv -0.301064 0.140625 0.304688\nv -0.304688 0.140625 0.310907\nv -0.22458 0.140625 0.304688\nv -0.301272 0.148438 0.304688\nv -0.304688 0.148438 0.310586\nv -0.223905 0.148438 0.304688\nv -0.301332 0.15625 0.304688\nv -0.304688 0.15625 0.310874\nv -0.224018 0.15625 0.304688\nv -0.30129 0.164062 0.304688\nv -0.304688 0.164062 0.311074\nv -0.224663 0.164062 0.304688\nv -0.301652 0.171875 0.304688\nv -0.304688 0.171875 0.310272\nv -0.224821 0.171875 0.304688\nv -0.30244 0.179688 0.304688\nv -0.304688 0.179688 0.30877\nv -0.225744 0.179688 0.304688\nv -0.226562 0.186259 0.304688\nv -0.303598 0.1875 0.304688\nv -0.304688 0.193726 0.304688\nv -0.304688 0.1875 0.306673\nv -0.226708 0.1875 0.304688\nv -0.226562 0.1875 0.305288\nv -0.304979 0.195312 0.304688\nv -0.227048 0.195312 0.304688\nv -0.226562 0.195312 0.306715\nv -0.306283 0.203125 0.304688\nv -0.226856 0.203125 0.304688\nv -0.226562 0.203125 0.305937\nv -0.307368 0.210938 0.304688\nv -0.226777 0.210938 0.304688\nv -0.226562 0.210938 0.305515\nv -0.307912 0.21875 0.304688\nv -0.226602 0.21875 0.304688\nv -0.226562 0.221712 0.304688\nv -0.226562 0.21875 0.304831\nv -0.308571 0.226562 0.304688\nv -0.3125 0.226562 0.311472\nv -0.226502 0.226562 0.304688\nv -0.308513 0.234375 0.304688\nv -0.3125 0.234375 0.311866\nv -0.226448 0.234375 0.304688\nv -0.226562 0.239492 0.304688\nv -0.307391 0.242188 0.304688\nv -0.226636 0.242188 0.304688\nv -0.226562 0.242188 0.305018\nv -0.30596 0.25 0.304688\nv -0.304688 0.256694 0.304688\nv -0.227293 0.25 0.304688\nv -0.226562 0.25 0.307912\nv -0.304511 0.257812 0.304688\nv -0.304688 0.257812 0.304978\nv -0.227892 0.257812 0.304688\nv -0.226562 0.257812 0.310611\nv -0.303529 0.265625 0.304688\nv -0.304688 0.265625 0.306574\nv -0.228663 0.265625 0.304688\nv -0.302396 0.273438 0.304688\nv -0.304688 0.273438 0.308051\nv -0.229986 0.273438 0.304688\nv -0.301534 0.28125 0.304688\nv -0.304688 0.28125 0.308849\nv -0.231391 0.28125 0.304688\nv -0.300366 0.289062 0.304688\nv -0.304688 0.289062 0.310174\nv -0.232851 0.289062 0.304688\nv -0.29869 0.296875 0.304688\nv -0.304688 0.296875 0.31189\nv -0.234169 0.296875 0.304688\nv -0.234375 0.298318 0.304688\nv -0.297755 0.304688 0.304688\nv -0.304688 0.304688 0.311545\nv -0.235415 0.304688 0.304688\nv -0.234375 0.304688 0.30687\nv -0.297978 0.3125 0.304688\nv -0.304688 0.3125 0.311182\nv -0.236571 0.3125 0.304688\nv -0.234375 0.3125 0.309048\nv -0.298451 0.320312 0.304688\nv -0.304688 0.320312 0.310885\nv -0.237405 0.320312 0.304688\nv -0.234375 0.320312 0.310442\nv -0.299442 0.328125 0.304688\nv -0.304688 0.328125 0.310036\nv -0.238251 0.328125 0.304688\nv -0.234375 0.328125 0.312066\nv -0.300039 0.335938 0.304688\nv -0.304688 0.335938 0.309361\nv -0.23913 0.335938 0.304688\nv -0.299804 0.34375 0.304688\nv -0.304688 0.34375 0.309274\nv -0.240015 0.34375 0.304688\nv -0.298904 0.351562 0.304688\nv -0.304688 0.351562 0.309552\nv -0.240779 0.351562 0.304688\nv -0.298058 0.359375 0.304688\nv -0.304688 0.359375 0.309759\nv -0.241502 0.359375 0.304688\nv -0.297304 0.367188 0.304688\nv -0.304688 0.367188 0.309806\nv -0.296875 0.374508 0.304688\nv -0.242089 0.367188 0.304688\nv -0.242188 0.369066 0.304688\nv -0.304688 0.375 0.309719\nv -0.296821 0.375 0.304688\nv -0.296875 0.375 0.304703\nv -0.242634 0.375 0.304688\nv -0.242188 0.375 0.30522\nv -0.304688 0.382812 0.309522\nv -0.296321 0.382812 0.304688\nv -0.296875 0.388712 0.304688\nv -0.296875 0.382812 0.304823\nv -0.243094 0.382812 0.304688\nv -0.242188 0.382812 0.305675\nv -0.29697 0.390625 0.304688\nv -0.304688 0.390625 0.308981\nv -0.243555 0.390625 0.304688\nv -0.242188 0.390625 0.306055\nv -0.297807 0.398438 0.304688\nv -0.304688 0.398438 0.308425\nv -0.243836 0.398438 0.304688\nv -0.242188 0.398438 0.306228\nv -0.298851 0.40625 0.304688\nv -0.304688 0.40625 0.307759\nv -0.243955 0.40625 0.304688\nv -0.242188 0.40625 0.306366\nv -0.299794 0.414062 0.304688\nv -0.304688 0.414062 0.307119\nv -0.244208 0.414062 0.304688\nv -0.242188 0.414062 0.306592\nv -0.300902 0.421875 0.304688\nv -0.304688 0.421875 0.306451\nv -0.244859 0.421875 0.304688\nv -0.242188 0.421875 0.30717\nv -0.30147 0.429688 0.304688\nv -0.304688 0.429688 0.306002\nv -0.245612 0.429688 0.304688\nv -0.242188 0.429688 0.307764\nv -0.301907 0.4375 0.304688\nv -0.304688 0.4375 0.305626\nv -0.24651 0.4375 0.304688\nv -0.242188 0.4375 0.308526\nv -0.302205 0.445312 0.304688\nv -0.304688 0.445312 0.305346\nv -0.247459 0.445312 0.304688\nv -0.242188 0.445312 0.309734\nv -0.301764 0.453125 0.304688\nv -0.304688 0.453125 0.305374\nv -0.248195 0.453125 0.304688\nv -0.242188 0.453125 0.311124\nv -0.3125 0.460938 0.312461\nv -0.301078 0.460938 0.304688\nv -0.304688 0.460938 0.305428\nv -0.248784 0.460938 0.304688\nv -0.3125 0.46875 0.312432\nv -0.301401 0.46875 0.304688\nv -0.304688 0.46875 0.305354\nv -0.249405 0.46875 0.304688\nv -0.25 0.473791 0.304688\nv -0.3125 0.476562 0.312482\nv -0.302044 0.476562 0.304688\nv -0.304688 0.476562 0.305335\nv -0.250419 0.476562 0.304688\nv -0.25 0.476562 0.304922\nv -0.302888 0.484375 0.304688\nv -0.304688 0.484375 0.305151\nv -0.251288 0.484375 0.304688\nv -0.25 0.484375 0.305481\nv -0.303158 0.492188 0.304688\nv -0.304688 0.497687 0.304688\nv -0.304688 0.492188 0.305068\nv -0.251723 0.492188 0.304688\nv -0.25 0.492188 0.306027\nv -0.30486 0.5 0.304688\nv -0.3125 0.5 0.311938\nv -0.251599 0.5 0.304688\nv -0.25 0.5 0.306131\nv -0.305518 0.507812 0.304688\nv -0.3125 0.507812 0.311067\nv -0.251955 0.507812 0.304688\nv -0.25 0.507812 0.306486\nv -0.306565 0.515625 0.304688\nv -0.3125 0.515625 0.310174\nv -0.252767 0.515625 0.304688\nv -0.25 0.515625 0.307289\nv -0.307612 0.523438 0.304688\nv -0.3125 0.523438 0.309261\nv -0.253435 0.523438 0.304688\nv -0.25 0.523438 0.308011\nv -0.30865 0.53125 0.304688\nv -0.3125 0.53125 0.308366\nv -0.253992 0.53125 0.304688\nv -0.25 0.53125 0.308958\nv -0.309577 0.539062 0.304688\nv -0.3125 0.539062 0.307604\nv -0.254586 0.539062 0.304688\nv -0.25 0.539062 0.310193\nv -0.310505 0.546875 0.304688\nv -0.3125 0.546875 0.306699\nv -0.254907 0.546875 0.304688\nv -0.25 0.546875 0.311433\nv -0.311199 0.554688 0.304688\nv -0.3125 0.554688 0.305946\nv -0.255155 0.554688 0.304688\nv -0.312123 0.5625 0.304688\nv -0.3125 0.565345 0.304688\nv -0.3125 0.5625 0.305039\nv -0.255531 0.5625 0.304688\nv -0.313079 0.570312 0.304688\nv -0.320312 0.570312 0.312322\nv -0.255786 0.570312 0.304688\nv -0.313918 0.578125 0.304688\nv -0.320312 0.578125 0.311298\nv -0.255882 0.578125 0.304688\nv -0.315042 0.585938 0.304688\nv -0.320312 0.585938 0.310328\nv -0.256329 0.585938 0.304688\nv -0.316165 0.59375 0.304688\nv -0.320312 0.59375 0.309352\nv -0.256727 0.59375 0.304688\nv -0.317111 0.601562 0.304688\nv -0.320312 0.601562 0.308452\nv -0.256907 0.601562 0.304688\nv -0.318021 0.609375 0.304688\nv -0.320312 0.615437 0.304688\nv -0.320312 0.609375 0.307322\nv -0.256812 0.609375 0.304688\nv -0.320857 0.617188 0.304688\nv -0.256665 0.617188 0.304688\nv -0.323653 0.625 0.304688\nv -0.328125 0.625 0.311958\nv -0.253891 0.625 0.304688\nv -0.326485 0.632812 0.304688\nv -0.328125 0.640538 0.304688\nv -0.328125 0.632812 0.307832\nv -0.2538 0.632812 0.304688\nv -0.328141 0.640625 0.304688\nv -0.254057 0.640625 0.304688\nv -0.329401 0.648438 0.304688\nv -0.254822 0.648438 0.304688\nv -0.330912 0.65625 0.304688\nv -0.255856 0.65625 0.304688\nv -0.331911 0.664062 0.304688\nv -0.25682 0.664062 0.304688\nv -0.257812 0.670861 0.304688\nv -0.332544 0.671875 0.304688\nv -0.335938 0.671875 0.312217\nv -0.257977 0.671875 0.304688\nv -0.257812 0.671875 0.305545\nv -0.333234 0.679688 0.304688\nv -0.335938 0.679688 0.310984\nv -0.258939 0.679688 0.304688\nv -0.257812 0.679688 0.310845\nv -0.333761 0.6875 0.304688\nv -0.335938 0.6875 0.31008\nv -0.259825 0.6875 0.304688\nv -0.334023 0.695312 0.304688\nv -0.335938 0.695312 0.309767\nv -0.260678 0.695312 0.304688\nv -0.33405 0.703125 0.304688\nv -0.335938 0.703125 0.309799\nv -0.261294 0.703125 0.304688\nv -0.33374 0.710938 0.304688\nv -0.335938 0.710938 0.310635\nv -0.262151 0.710938 0.304688\nv -0.333116 0.71875 0.304688\nv -0.335938 0.71875 0.3124\nv -0.26297 0.71875 0.304688\nv -0.332178 0.726562 0.304688\nv -0.263637 0.726562 0.304688\nv -0.33119 0.734375 0.304688\nv -0.264984 0.734375 0.304688\nv -0.265625 0.736948 0.304688\nv -0.330102 0.742188 0.304688\nv -0.266946 0.742188 0.304688\nv -0.265625 0.742188 0.308369\nv -0.328808 0.75 0.304688\nv -0.328125 0.754188 0.304688\nv -0.268868 0.75 0.304688\nv -0.327439 0.757812 0.304688\nv -0.328125 0.757812 0.306063\nv -0.271643 0.757812 0.304688\nv -0.273438 0.762228 0.304688\nv -0.327594 0.765625 0.304688\nv -0.328125 0.765625 0.305633\nv -0.274865 0.765625 0.304688\nv -0.273438 0.765625 0.308001\nv -0.328055 0.773438 0.304688\nv -0.328125 0.774065 0.304688\nv -0.328125 0.773438 0.304812\nv -0.277721 0.773438 0.304688\nv -0.328862 0.78125 0.304688\nv -0.281209 0.78125 0.304688\nv -0.28125 0.781363 0.304688\nv -0.329901 0.789062 0.304688\nv -0.28479 0.789062 0.304688\nv -0.28125 0.789062 0.312457\nv -0.330507 0.796875 0.304688\nv -0.288476 0.796875 0.304688\nv -0.289062 0.798203 0.304688\nv -0.331079 0.804688 0.304688\nv -0.291887 0.804688 0.304688\nv -0.289062 0.804688 0.311731\nv -0.332295 0.8125 0.304688\nv -0.295833 0.8125 0.304688\nv -0.296875 0.814334 0.304688\nv -0.334305 0.820312 0.304688\nv -0.335938 0.820312 0.308744\nv -0.300433 0.820312 0.304688\nv -0.304688 0.827624 0.304688\nv -0.335623 0.828125 0.304688\nv -0.335938 0.828125 0.30529\nv -0.328125 0.834333 0.304688\nv -0.305046 0.828125 0.304688\nv -0.304688 0.828125 0.305368\nv -0.323661 0.835938 0.304688\nv -0.328125 0.835938 0.307675\nv -0.320312 0.837349 0.304688\nv -0.311603 0.835938 0.304688\nv -0.3125 0.836888 0.304688\nv -0.3125 0.84375 0.311156\nv -0.296875 -0.726827 0.3125\nv -0.289062 -0.726949 0.3125\nv -0.28125 -0.726879 0.3125\nv 0.429688 -0.727278 0.3125\nv 0.4375 -0.726952 0.3125\nv -0.3125 -0.721599 0.3125\nv -0.3125 -0.726562 0.317336\nv -0.29876 -0.726562 0.3125\nv -0.304688 -0.724616 0.3125\nv -0.304688 -0.726562 0.314033\nv -0.276023 -0.726562 0.3125\nv -0.273438 -0.726302 0.3125\nv -0.273438 -0.726562 0.312713\nv -0.265625 -0.723567 0.3125\nv -0.265625 -0.726562 0.31458\nv -0.257812 -0.726562 0.318235\nv 0.414062 -0.726562 0.317342\nv 0.425439 -0.726562 0.3125\nv 0.421875 -0.72526 0.3125\nv 0.421875 -0.726562 0.313253\nv 0.439333 -0.726562 0.3125\nv 0.445312 -0.723217 0.3125\nv 0.445312 -0.726562 0.314101\nv 0.453125 -0.726562 0.317343\nv 0.460938 -0.726562 0.320151\nv -0.328125 -0.712361 0.3125\nv -0.328125 -0.71875 0.317556\nv -0.318108 -0.71875 0.3125\nv -0.320312 -0.71747 0.3125\nv -0.320312 -0.71875 0.313422\nv -0.259373 -0.71875 0.3125\nv -0.257812 -0.716986 0.3125\nv -0.257812 -0.71875 0.313343\nv 0.40625 -0.71875 0.318662\nv 0.414708 -0.71875 0.3125\nv 0.414062 -0.718225 0.3125\nv 0.414062 -0.71875 0.312803\nv 0.450941 -0.71875 0.3125\nv 0.453125 -0.717005 0.3125\nv 0.453125 -0.71875 0.31313\nv 0.460938 -0.71875 0.31531\nv 0.46875 -0.71875 0.317399\nv 0.476562 -0.71875 0.319343\nv -0.329805 -0.710938 0.3125\nv -0.335938 -0.710938 0.317491\nv -0.25459 -0.710938 0.3125\nv -0.25 -0.703649 0.3125\nv -0.25 -0.710938 0.316787\nv 0.40803 -0.710938 0.3125\nv 0.40625 -0.707727 0.3125\nv 0.40625 -0.710938 0.313575\nv 0.459823 -0.710938 0.3125\nv 0.460938 -0.710108 0.3125\nv 0.460938 -0.710938 0.312789\nv 0.46875 -0.704981 0.3125\nv 0.46875 -0.710938 0.31446\nv 0.476562 -0.710938 0.316186\nv 0.484375 -0.710938 0.31746\nv 0.492188 -0.710938 0.319019\nv -0.335182 -0.703125 0.3125\nv -0.335938 -0.699116 0.3125\nv -0.335938 -0.703125 0.313657\nv -0.249703 -0.703125 0.3125\nv 0.40445 -0.703125 0.3125\nv 0.398438 -0.703125 0.317607\nv 0.471227 -0.703125 0.3125\nv 0.476562 -0.696079 0.3125\nv 0.476562 -0.703125 0.313726\nv 0.484375 -0.703125 0.315072\nv 0.492188 -0.703125 0.317564\nv -0.336406 -0.695312 0.3125\nv -0.246124 -0.695312 0.3125\nv -0.242188 -0.695312 0.31687\nv 0.402331 -0.695312 0.3125\nv 0.398438 -0.695312 0.31571\nv 0.477147 -0.695312 0.3125\nv 0.484375 -0.695312 0.314113\nv 0.492188 -0.695312 0.317385\nv -0.336226 -0.6875 0.3125\nv -0.335938 -0.683901 0.3125\nv -0.245485 -0.6875 0.3125\nv -0.242188 -0.6875 0.315839\nv 0.402189 -0.6875 0.3125\nv 0.398438 -0.6875 0.315186\nv 0.478001 -0.6875 0.3125\nv 0.484375 -0.6875 0.313809\nv 0.492188 -0.6875 0.316924\nv -0.335515 -0.679688 0.3125\nv -0.335938 -0.679688 0.313456\nv -0.245477 -0.679688 0.3125\nv -0.242188 -0.679688 0.315737\nv 0.402914 -0.679688 0.3125\nv 0.398438 -0.679688 0.315277\nv 0.479103 -0.679688 0.3125\nv 0.484375 -0.679688 0.313468\nv 0.492188 -0.679688 0.316287\nv -0.334651 -0.671875 0.3125\nv -0.335938 -0.671875 0.315514\nv -0.24593 -0.671875 0.3125\nv -0.242188 -0.671875 0.315684\nv 0.403914 -0.671875 0.3125\nv 0.398438 -0.671875 0.315515\nv 0.482335 -0.671875 0.3125\nv 0.484375 -0.667504 0.3125\nv 0.484375 -0.671875 0.312813\nv 0.492188 -0.671875 0.315494\nv -0.333896 -0.664062 0.3125\nv -0.335938 -0.664062 0.317383\nv -0.246502 -0.664062 0.3125\nv -0.242188 -0.664062 0.315663\nv 0.405281 -0.664062 0.3125\nv 0.398438 -0.664062 0.315822\nv 0.40625 -0.659806 0.3125\nv 0.485294 -0.664062 0.3125\nv 0.492188 -0.664062 0.314521\nv 0.5 -0.664062 0.320186\nv -0.333183 -0.65625 0.3125\nv -0.335938 -0.65625 0.319159\nv -0.247093 -0.65625 0.3125\nv -0.242188 -0.65625 0.315619\nv 0.398438 -0.65625 0.316115\nv 0.407809 -0.65625 0.3125\nv 0.40625 -0.65625 0.312826\nv 0.487186 -0.65625 0.3125\nv 0.492188 -0.65625 0.313813\nv 0.5 -0.65625 0.319773\nv -0.332386 -0.648438 0.3125\nv -0.247659 -0.648438 0.3125\nv -0.242188 -0.648438 0.315576\nv 0.398438 -0.648438 0.316955\nv 0.411086 -0.648438 0.3125\nv 0.40625 -0.648438 0.313526\nv 0.414062 -0.643967 0.3125\nv 0.489917 -0.648438 0.3125\nv 0.492188 -0.648438 0.313062\nv 0.5 -0.648438 0.319693\nv -0.331428 -0.640625 0.3125\nv -0.248336 -0.640625 0.3125\nv -0.25 -0.634253 0.3125\nv -0.242188 -0.640625 0.315746\nv 0.398438 -0.640625 0.318205\nv 0.40625 -0.640625 0.314559\nv 0.416501 -0.640625 0.3125\nv 0.414062 -0.640625 0.312923\nv 0.421875 -0.633914 0.3125\nv 0.49134 -0.640625 0.3125\nv 0.492188 -0.640625 0.312696\nv 0.5 -0.640625 0.319969\nv -0.330386 -0.632812 0.3125\nv -0.25053 -0.632812 0.3125\nv -0.25 -0.632812 0.312674\nv -0.242188 -0.632812 0.316874\nv 0.398438 -0.632812 0.319731\nv 0.40625 -0.632812 0.315816\nv 0.414062 -0.632812 0.314015\nv 0.422915 -0.632812 0.3125\nv 0.421875 -0.632812 0.312652\nv 0.429688 -0.625355 0.3125\nv 0.46875 -0.628244 0.3125\nv 0.476562 -0.630045 0.3125\nv 0.487662 -0.632812 0.3125\nv 0.484375 -0.630937 0.3125\nv 0.492188 -0.632812 0.312959\nv -0.3293 -0.625 0.3125\nv -0.254023 -0.625 0.3125\nv -0.25 -0.625 0.31383\nv -0.242188 -0.625 0.318127\nv 0.40625 -0.625 0.316933\nv 0.414062 -0.625 0.315038\nv 0.421875 -0.625 0.313675\nv 0.430425 -0.625 0.3125\nv 0.429688 -0.625 0.312546\nv 0.4375 -0.621527 0.3125\nv 0.445312 -0.61892 0.3125\nv 0.453125 -0.618743 0.3125\nv 0.463434 -0.625 0.3125\nv 0.460938 -0.623687 0.3125\nv 0.46875 -0.625 0.312793\nv 0.476562 -0.625 0.313106\nv 0.484375 -0.625 0.313346\nv 0.492188 -0.625 0.314007\nv -0.328169 -0.617188 0.3125\nv -0.328125 -0.616662 0.3125\nv -0.257307 -0.617188 0.3125\nv -0.257812 -0.615999 0.3125\nv -0.25 -0.617188 0.314895\nv -0.242188 -0.617188 0.319323\nv 0.40625 -0.617188 0.31803\nv 0.414062 -0.617188 0.316037\nv 0.421875 -0.617188 0.314662\nv 0.429688 -0.617188 0.31354\nv 0.4375 -0.617188 0.313036\nv 0.445312 -0.617188 0.31273\nv 0.453125 -0.617188 0.312704\nv 0.460938 -0.617188 0.313145\nv 0.46875 -0.617188 0.313511\nv 0.476562 -0.617188 0.313952\nv 0.484375 -0.617188 0.314373\nv 0.492188 -0.617188 0.315102\nv -0.327171 -0.609375 0.3125\nv -0.328125 -0.609375 0.314092\nv -0.261717 -0.609375 0.3125\nv -0.257812 -0.609375 0.3133\nv -0.25 -0.609375 0.315872\nv 0.40625 -0.609375 0.319055\nv 0.414062 -0.609375 0.316977\nv 0.421875 -0.609375 0.31557\nv 0.429688 -0.609375 0.314485\nv 0.4375 -0.609375 0.313937\nv 0.445312 -0.609375 0.313629\nv 0.453125 -0.609375 0.313616\nv 0.460938 -0.609375 0.313869\nv 0.46875 -0.609375 0.314175\nv 0.476562 -0.609375 0.314593\nv 0.484375 -0.609375 0.315212\nv 0.492188 -0.609375 0.316207\nv -0.32672 -0.601562 0.3125\nv -0.328125 -0.601562 0.314776\nv -0.264134 -0.601562 0.3125\nv -0.257812 -0.601562 0.31392\nv -0.25 -0.601562 0.316665\nv 0.40625 -0.601562 0.320088\nv 0.414062 -0.601562 0.317832\nv 0.421875 -0.601562 0.316351\nv 0.429688 -0.601562 0.315241\nv 0.4375 -0.601562 0.314539\nv 0.445312 -0.601562 0.314173\nv 0.453125 -0.601562 0.314087\nv 0.460938 -0.601562 0.314362\nv 0.46875 -0.601562 0.314635\nv 0.476562 -0.601562 0.315107\nv 0.484375 -0.601562 0.315608\nv 0.492188 -0.601562 0.316678\nv -0.32626 -0.59375 0.3125\nv -0.328125 -0.59375 0.315443\nv -0.264521 -0.59375 0.3125\nv -0.257812 -0.59375 0.314032\nv -0.25 -0.59375 0.316919\nv 0.414062 -0.59375 0.317981\nv 0.421875 -0.59375 0.316413\nv 0.429688 -0.59375 0.315223\nv 0.4375 -0.59375 0.314537\nv 0.445312 -0.59375 0.314158\nv 0.453125 -0.59375 0.3142\nv 0.460938 -0.59375 0.314458\nv 0.46875 -0.59375 0.314834\nv 0.476562 -0.59375 0.315367\nv 0.484375 -0.59375 0.315746\nv 0.492188 -0.59375 0.316979\nv -0.325826 -0.585938 0.3125\nv -0.328125 -0.585938 0.316063\nv -0.264647 -0.585938 0.3125\nv -0.257812 -0.585938 0.314095\nv -0.25 -0.585938 0.31699\nv 0.414062 -0.585938 0.318112\nv 0.421875 -0.585938 0.316463\nv 0.429688 -0.585938 0.315217\nv 0.4375 -0.585938 0.314524\nv 0.445312 -0.585938 0.314188\nv 0.453125 -0.585938 0.314322\nv 0.460938 -0.585938 0.314579\nv 0.46875 -0.585938 0.31512\nv 0.476562 -0.585938 0.315623\nv 0.484375 -0.585938 0.316138\nv 0.492188 -0.585938 0.317484\nv -0.325344 -0.578125 0.3125\nv -0.328125 -0.578125 0.316782\nv -0.264777 -0.578125 0.3125\nv -0.257812 -0.578125 0.314132\nv -0.25 -0.578125 0.317048\nv 0.414062 -0.578125 0.318022\nv 0.421875 -0.578125 0.316384\nv 0.429688 -0.578125 0.315082\nv 0.4375 -0.578125 0.314468\nv 0.445312 -0.578125 0.314252\nv 0.453125 -0.578125 0.314456\nv 0.460938 -0.578125 0.314822\nv 0.46875 -0.578125 0.315288\nv 0.476562 -0.578125 0.315983\nv 0.484375 -0.578125 0.316479\nv 0.492188 -0.578125 0.318514\nv -0.324707 -0.570312 0.3125\nv -0.328125 -0.570312 0.317578\nv -0.265362 -0.570312 0.3125\nv -0.257812 -0.570312 0.314239\nv -0.25 -0.570312 0.31722\nv 0.414062 -0.570312 0.318012\nv 0.421875 -0.570312 0.31638\nv 0.429688 -0.570312 0.315217\nv 0.4375 -0.570312 0.314597\nv 0.445312 -0.570312 0.314435\nv 0.453125 -0.570312 0.314687\nv 0.460938 -0.570312 0.314988\nv 0.46875 -0.570312 0.315708\nv 0.476562 -0.570312 0.316512\nv 0.484375 -0.570312 0.317064\nv 0.492188 -0.570312 0.319531\nv -0.323552 -0.5625 0.3125\nv -0.328125 -0.5625 0.318386\nv -0.265359 -0.5625 0.3125\nv -0.257812 -0.5625 0.313997\nv -0.25 -0.5625 0.316835\nv 0.414062 -0.5625 0.318077\nv 0.421875 -0.5625 0.316794\nv 0.429688 -0.5625 0.315721\nv 0.4375 -0.5625 0.315134\nv 0.445312 -0.5625 0.315001\nv 0.453125 -0.5625 0.315078\nv 0.460938 -0.5625 0.315341\nv 0.46875 -0.5625 0.316242\nv 0.476562 -0.5625 0.317144\nv 0.484375 -0.5625 0.317672\nv -0.322071 -0.554688 0.3125\nv -0.328125 -0.554688 0.318493\nv -0.260706 -0.554688 0.3125\nv -0.257812 -0.553293 0.3125\nv -0.257812 -0.554688 0.312998\nv -0.25 -0.549481 0.3125\nv -0.25 -0.554688 0.31529\nv -0.242188 -0.554688 0.319845\nv -0.0390625 -0.547613 0.3125\nv -0.03125 -0.54856 0.3125\nv -0.0234375 -0.549442 0.3125\nv -0.015625 -0.55025 0.3125\nv -0.0078125 -0.551204 0.3125\nv 0 -0.551767 0.3125\nv 0.0078125 -0.55171 0.3125\nv 0.015625 -0.551161 0.3125\nv 0.0234375 -0.550337 0.3125\nv 0.03125 -0.549326 0.3125\nv 0.0390625 -0.548305 0.3125\nv 0.046875 -0.547339 0.3125\nv 0.40625 -0.554688 0.319669\nv 0.414062 -0.554688 0.31772\nv 0.421875 -0.554688 0.316815\nv 0.429688 -0.554688 0.315998\nv 0.4375 -0.554688 0.315669\nv 0.445312 -0.554688 0.315427\nv 0.453125 -0.554688 0.315329\nv 0.460938 -0.554688 0.315586\nv 0.46875 -0.554688 0.316624\nv 0.476562 -0.554688 0.317583\nv 0.484375 -0.554688 0.317886\nv -0.320393 -0.546875 0.3125\nv -0.328125 -0.546875 0.318408\nv -0.320312 -0.545931 0.3125\nv -0.245448 -0.546875 0.3125\nv -0.242188 -0.544121 0.3125\nv -0.242188 -0.546875 0.313906\nv -0.234375 -0.546875 0.317939\nv -0.078125 -0.539067 0.3125\nv -0.0703125 -0.541148 0.3125\nv -0.0703125 -0.546875 0.319478\nv -0.0625 -0.54375 0.3125\nv -0.0625 -0.546875 0.317726\nv -0.0546875 -0.545742 0.3125\nv -0.0546875 -0.546875 0.315138\nv -0.0461044 -0.546875 0.3125\nv -0.046875 -0.546768 0.3125\nv -0.046875 -0.546875 0.312783\nv 0.0499771 -0.546875 0.3125\nv 0.0546875 -0.545959 0.3125\nv 0.0546875 -0.546875 0.315974\nv 0.0625 -0.544089 0.3125\nv 0.0703125 -0.541898 0.3125\nv 0.078125 -0.539174 0.3125\nv 0.40625 -0.546875 0.318771\nv 0.414062 -0.546875 0.31695\nv 0.421875 -0.546875 0.315947\nv 0.429688 -0.546875 0.315286\nv 0.4375 -0.546875 0.314941\nv 0.445312 -0.546875 0.314905\nv 0.453125 -0.546875 0.315023\nv 0.460938 -0.546875 0.315482\nv 0.46875 -0.546875 0.316594\nv 0.476562 -0.546875 0.31769\nv 0.484375 -0.546875 0.318129\nv -0.328125 -0.539062 0.318046\nv -0.317372 -0.539062 0.3125\nv -0.320312 -0.539062 0.312727\nv -0.237165 -0.539062 0.3125\nv -0.234375 -0.5352 0.3125\nv -0.234375 -0.539062 0.313893\nv -0.226562 -0.539062 0.316655\nv -0.21875 -0.539062 0.31784\nv -0.210938 -0.539062 0.318922\nv -0.203125 -0.539062 0.320159\nv -0.164062 -0.539062 0.319975\nv -0.15625 -0.539062 0.319581\nv -0.148438 -0.539062 0.319038\nv -0.140625 -0.539062 0.318893\nv -0.132812 -0.539062 0.319363\nv -0.117188 -0.539062 0.318933\nv -0.109375 -0.539062 0.317253\nv -0.101562 -0.539062 0.315933\nv -0.09375 -0.533328 0.3125\nv -0.09375 -0.539062 0.314904\nv -0.0781425 -0.539062 0.3125\nv -0.0859375 -0.536005 0.3125\nv -0.0859375 -0.539062 0.313812\nv 0.0787412 -0.539062 0.3125\nv 0.0859375 -0.537801 0.3125\nv 0.0859375 -0.539062 0.315522\nv 0.09375 -0.537019 0.3125\nv 0.09375 -0.539062 0.317289\nv 0.101562 -0.536156 0.3125\nv 0.101562 -0.539062 0.319088\nv 0.109375 -0.535368 0.3125\nv 0.109375 -0.539062 0.320202\nv 0.117188 -0.534687 0.3125\nv 0.125 -0.534313 0.3125\nv 0.132812 -0.534092 0.3125\nv 0.132812 -0.539062 0.31996\nv 0.140625 -0.533827 0.3125\nv 0.140625 -0.539062 0.319689\nv 0.148438 -0.533257 0.3125\nv 0.148438 -0.539062 0.319877\nv 0.15625 -0.532541 0.3125\nv 0.164062 -0.531433 0.3125\nv 0.179688 -0.539062 0.320233\nv 0.210938 -0.539062 0.319878\nv 0.21875 -0.539062 0.319563\nv 0.226562 -0.539062 0.319065\nv 0.234375 -0.539062 0.319276\nv 0.242188 -0.539062 0.319738\nv 0.40625 -0.539062 0.317743\nv 0.414062 -0.539062 0.316056\nv 0.421875 -0.539062 0.314935\nv 0.429688 -0.539062 0.313964\nv 0.4375 -0.539062 0.313607\nv 0.445312 -0.539062 0.313775\nv 0.453125 -0.539062 0.314201\nv 0.460938 -0.539062 0.315092\nv 0.46875 -0.539062 0.316461\nv 0.476562 -0.539062 0.317706\nv 0.484375 -0.539062 0.318241\nv -0.328125 -0.53125 0.317667\nv -0.314311 -0.53125 0.3125\nv -0.320312 -0.53125 0.313001\nv -0.229695 -0.53125 0.3125\nv -0.226562 -0.528124 0.3125\nv -0.226562 -0.53125 0.313435\nv -0.21875 -0.523441 0.3125\nv -0.21875 -0.53125 0.314574\nv -0.210938 -0.53125 0.315574\nv -0.203125 -0.53125 0.31699\nv -0.195312 -0.53125 0.317285\nv -0.1875 -0.53125 0.317743\nv -0.179688 -0.53125 0.318237\nv -0.171875 -0.53125 0.318611\nv -0.164062 -0.53125 0.318095\nv -0.15625 -0.53125 0.317471\nv -0.148438 -0.53125 0.31669\nv -0.140625 -0.53125 0.316311\nv -0.132812 -0.53125 0.316111\nv -0.125 -0.53125 0.316176\nv -0.117188 -0.53125 0.314778\nv -0.109375 -0.525838 0.3125\nv -0.109375 -0.53125 0.313578\nv -0.101034 -0.53125 0.3125\nv -0.101562 -0.530959 0.3125\nv -0.101562 -0.53125 0.312561\nv 0.165394 -0.53125 0.3125\nv 0.171875 -0.530452 0.3125\nv 0.171875 -0.53125 0.313209\nv 0.179688 -0.529623 0.3125\nv 0.179688 -0.53125 0.313884\nv 0.1875 -0.529184 0.3125\nv 0.1875 -0.53125 0.314203\nv 0.195312 -0.527659 0.3125\nv 0.195312 -0.53125 0.315067\nv 0.203125 -0.526259 0.3125\nv 0.203125 -0.53125 0.315853\nv 0.210938 -0.52512 0.3125\nv 0.210938 -0.53125 0.316142\nv 0.21875 -0.524188 0.3125\nv 0.21875 -0.53125 0.316023\nv 0.226562 -0.53125 0.31616\nv 0.234375 -0.53125 0.316137\nv 0.242188 -0.53125 0.316598\nv 0.25 -0.53125 0.317456\nv 0.257812 -0.53125 0.318369\nv 0.265625 -0.53125 0.319196\nv 0.273438 -0.53125 0.31992\nv 0.40625 -0.53125 0.317331\nv 0.414062 -0.53125 0.315552\nv 0.421875 -0.53125 0.31429\nv 0.429688 -0.53125 0.313182\nv 0.4375 -0.526884 0.3125\nv 0.4375 -0.53125 0.312855\nv 0.445312 -0.53125 0.313214\nv 0.453125 -0.53125 0.313698\nv 0.460938 -0.53125 0.31478\nv 0.46875 -0.53125 0.316522\nv 0.476562 -0.53125 0.317901\nv 0.484375 -0.53125 0.318615\nv -0.328125 -0.523438 0.317197\nv -0.31521 -0.523438 0.3125\nv -0.320312 -0.523438 0.312901\nv -0.218743 -0.523438 0.3125\nv -0.210938 -0.517774 0.3125\nv -0.210938 -0.523438 0.313525\nv -0.203125 -0.523438 0.314487\nv -0.195312 -0.523438 0.315435\nv -0.1875 -0.523438 0.316294\nv -0.179688 -0.523438 0.317243\nv -0.171875 -0.523438 0.317543\nv -0.164062 -0.523438 0.316961\nv -0.15625 -0.523438 0.31627\nv -0.148438 -0.523438 0.315451\nv -0.140625 -0.523438 0.31513\nv -0.132812 -0.523438 0.314762\nv -0.125 -0.523438 0.314384\nv -0.112776 -0.523438 0.3125\nv -0.117188 -0.523438 0.313114\nv 0.221878 -0.523438 0.3125\nv 0.226562 -0.521627 0.3125\nv 0.226562 -0.523438 0.313104\nv 0.234375 -0.51902 0.3125\nv 0.234375 -0.523438 0.313846\nv 0.242188 -0.516493 0.3125\nv 0.242188 -0.523438 0.314363\nv 0.25 -0.523438 0.314763\nv 0.257812 -0.523438 0.315695\nv 0.265625 -0.523438 0.316788\nv 0.273438 -0.523438 0.317984\nv 0.28125 -0.523438 0.319205\nv 0.390625 -0.523438 0.31964\nv 0.398438 -0.523438 0.318905\nv 0.40625 -0.523438 0.31682\nv 0.414062 -0.523438 0.31511\nv 0.421875 -0.523438 0.313727\nv 0.432116 -0.523438 0.3125\nv 0.429688 -0.521956 0.3125\nv 0.429688 -0.523438 0.312631\nv 0.441322 -0.523438 0.3125\nv 0.445312 -0.519733 0.3125\nv 0.445312 -0.523438 0.312768\nv 0.453125 -0.523438 0.313236\nv 0.460938 -0.523438 0.314368\nv 0.46875 -0.523438 0.316304\nv 0.476562 -0.523438 0.317784\nv 0.484375 -0.523438 0.318834\nv -0.328125 -0.515625 0.316984\nv -0.319013 -0.515625 0.3125\nv -0.320312 -0.509325 0.3125\nv -0.320312 -0.515625 0.312699\nv -0.209413 -0.515625 0.3125\nv -0.210938 -0.513402 0.3125\nv -0.203125 -0.515625 0.31376\nv -0.195312 -0.515625 0.31477\nv -0.1875 -0.515625 0.315781\nv -0.179688 -0.515625 0.316727\nv -0.171875 -0.515625 0.316944\nv -0.164062 -0.515625 0.316386\nv -0.15625 -0.515625 0.315672\nv -0.148438 -0.515625 0.314869\nv -0.140625 -0.515625 0.314613\nv -0.132812 -0.515625 0.314254\nv -0.125 -0.515625 0.313772\nv -0.116054 -0.515625 0.3125\nv -0.117188 -0.515625 0.312658\nv -0.109375 -0.508043 0.3125\nv 0.244975 -0.515625 0.3125\nv 0.25 -0.512284 0.3125\nv 0.25 -0.515625 0.312957\nv 0.257812 -0.515625 0.313582\nv 0.265625 -0.515625 0.314333\nv 0.273438 -0.515625 0.315518\nv 0.28125 -0.515625 0.316822\nv 0.289062 -0.515625 0.318311\nv 0.296875 -0.515625 0.319368\nv 0.304688 -0.515625 0.319823\nv 0.320312 -0.515625 0.319975\nv 0.328125 -0.515625 0.319727\nv 0.335938 -0.515625 0.319329\nv 0.34375 -0.515625 0.31885\nv 0.351562 -0.515625 0.318641\nv 0.359375 -0.515625 0.318904\nv 0.367188 -0.515625 0.318992\nv 0.375 -0.515625 0.318277\nv 0.382812 -0.515625 0.317636\nv 0.390625 -0.515625 0.316866\nv 0.398438 -0.515625 0.316086\nv 0.40625 -0.515625 0.315005\nv 0.414062 -0.515625 0.314294\nv 0.425885 -0.515625 0.3125\nv 0.421875 -0.509962 0.3125\nv 0.421875 -0.515625 0.313059\nv 0.449939 -0.515625 0.3125\nv 0.453125 -0.512016 0.3125\nv 0.453125 -0.515625 0.312704\nv 0.460938 -0.515625 0.31385\nv 0.46875 -0.515625 0.315944\nv 0.476562 -0.515625 0.317413\nv 0.484375 -0.515625 0.318562\nv -0.320476 -0.507812 0.3125\nv -0.328125 -0.507812 0.316813\nv -0.226562 -0.502458 0.3125\nv -0.2147 -0.507812 0.3125\nv -0.21875 -0.506062 0.3125\nv -0.210938 -0.507812 0.313273\nv -0.203125 -0.507812 0.314811\nv -0.195312 -0.507812 0.315874\nv -0.1875 -0.507812 0.316797\nv -0.179688 -0.507812 0.317737\nv -0.171875 -0.507812 0.318002\nv -0.164062 -0.507812 0.317537\nv -0.15625 -0.507812 0.316943\nv -0.148438 -0.507812 0.316213\nv -0.140625 -0.507812 0.315988\nv -0.132812 -0.507812 0.315679\nv -0.125 -0.507812 0.315185\nv -0.117188 -0.507812 0.313767\nv -0.109185 -0.507812 0.3125\nv -0.109375 -0.507812 0.312529\nv -0.101562 -0.50597 0.3125\nv -0.09375 -0.50404 0.3125\nv -0.0859375 -0.501584 0.3125\nv 0.242188 -0.503005 0.3125\nv 0.255073 -0.507812 0.3125\nv 0.25 -0.506005 0.3125\nv 0.257812 -0.507812 0.31288\nv 0.265625 -0.507812 0.31382\nv 0.273438 -0.507812 0.314762\nv 0.28125 -0.507812 0.315921\nv 0.289062 -0.507812 0.317352\nv 0.296875 -0.507812 0.318694\nv 0.304688 -0.507812 0.319458\nv 0.3125 -0.507812 0.319812\nv 0.320312 -0.507812 0.319363\nv 0.328125 -0.507812 0.319291\nv 0.335938 -0.507812 0.319006\nv 0.34375 -0.507812 0.318489\nv 0.351562 -0.507812 0.31829\nv 0.359375 -0.507812 0.318413\nv 0.367188 -0.507812 0.318164\nv 0.375 -0.507812 0.317374\nv 0.382812 -0.507812 0.316319\nv 0.390625 -0.507812 0.315271\nv 0.398438 -0.507812 0.314239\nv 0.40625 -0.507812 0.313494\nv 0.41993 -0.507812 0.3125\nv 0.414062 -0.507812 0.313146\nv 0.421875 -0.505055 0.3125\nv 0.454699 -0.507812 0.3125\nv 0.453125 -0.50087 0.3125\nv 0.460938 -0.507812 0.313464\nv 0.46875 -0.507812 0.315621\nv 0.476562 -0.507812 0.317193\nv 0.484375 -0.507812 0.318286\nv -0.323687 -0.5 0.3125\nv -0.328125 -0.5 0.316143\nv -0.230742 -0.5 0.3125\nv -0.234375 -0.497794 0.3125\nv -0.226562 -0.5 0.313786\nv -0.21875 -0.5 0.315472\nv -0.210938 -0.5 0.316927\nv -0.203125 -0.5 0.318981\nv -0.195312 -0.5 0.320177\nv -0.117188 -0.5 0.319445\nv -0.109375 -0.5 0.317493\nv -0.101562 -0.5 0.316225\nv -0.09375 -0.5 0.314911\nv -0.0821983 -0.5 0.3125\nv -0.0859375 -0.5 0.313426\nv -0.078125 -0.497989 0.3125\nv -0.0703125 -0.493475 0.3125\nv 0.226562 -0.494531 0.3125\nv 0.236641 -0.5 0.3125\nv 0.234375 -0.498756 0.3125\nv 0.242188 -0.5 0.313535\nv 0.25 -0.5 0.314883\nv 0.257812 -0.5 0.316091\nv 0.265625 -0.5 0.317247\nv 0.273438 -0.5 0.318181\nv 0.28125 -0.5 0.31917\nv 0.359375 -0.5 0.320305\nv 0.367188 -0.5 0.319617\nv 0.375 -0.5 0.318772\nv 0.382812 -0.5 0.317859\nv 0.390625 -0.5 0.316905\nv 0.398438 -0.5 0.315811\nv 0.40625 -0.5 0.314159\nv 0.414062 -0.5 0.313654\nv 0.425721 -0.5 0.3125\nv 0.421875 -0.5 0.312883\nv 0.429688 -0.494774 0.3125\nv 0.452647 -0.5 0.3125\nv 0.445312 -0.492701 0.3125\nv 0.453125 -0.5 0.31253\nv 0.460938 -0.5 0.313793\nv 0.46875 -0.5 0.31596\nv 0.476562 -0.5 0.317414\nv 0.484375 -0.5 0.318437\nv -0.325157 -0.492188 0.3125\nv -0.328125 -0.492188 0.315812\nv -0.241397 -0.492188 0.3125\nv -0.242188 -0.491446 0.3125\nv -0.234375 -0.492188 0.315597\nv -0.226562 -0.492188 0.317928\nv -0.21875 -0.492188 0.318883\nv -0.09375 -0.492188 0.319344\nv -0.0859375 -0.492188 0.317772\nv -0.078125 -0.492188 0.315843\nv -0.0679175 -0.492188 0.3125\nv -0.0703125 -0.492188 0.313373\nv -0.0625 -0.48979 0.3125\nv -0.0546875 -0.48636 0.3125\nv 0.210938 -0.485977 0.3125\nv 0.222852 -0.492188 0.3125\nv 0.21875 -0.48962 0.3125\nv 0.226562 -0.492188 0.313301\nv 0.234375 -0.492188 0.314819\nv 0.242188 -0.492188 0.316283\nv 0.25 -0.492188 0.317744\nv 0.257812 -0.492188 0.319116\nv 0.390625 -0.492188 0.319244\nv 0.398438 -0.492188 0.317176\nv 0.40625 -0.492188 0.315306\nv 0.414062 -0.492188 0.314341\nv 0.421875 -0.492188 0.313436\nv 0.432226 -0.492188 0.3125\nv 0.429688 -0.492188 0.312695\nv 0.444709 -0.492188 0.3125\nv 0.4375 -0.488183 0.3125\nv 0.445312 -0.492188 0.312532\nv 0.453125 -0.492188 0.31315\nv 0.460938 -0.492188 0.314488\nv 0.46875 -0.492188 0.316341\nv 0.476562 -0.492188 0.317439\nv 0.484375 -0.492188 0.318407\nv -0.32572 -0.484375 0.3125\nv -0.328125 -0.484375 0.315585\nv -0.248562 -0.484375 0.3125\nv -0.25 -0.481497 0.3125\nv -0.242188 -0.484375 0.315115\nv -0.234375 -0.484375 0.31922\nv -0.0625 -0.484375 0.318197\nv -0.0484161 -0.484375 0.3125\nv -0.0546875 -0.484375 0.314838\nv -0.046875 -0.484018 0.3125\nv -0.0390625 -0.482396 0.3125\nv -0.03125 -0.480745 0.3125\nv -0.0234375 -0.478993 0.3125\nv -0.015625 -0.477208 0.3125\nv 0.140625 -0.478081 0.3125\nv 0.148438 -0.479619 0.3125\nv 0.15625 -0.48091 0.3125\nv 0.164062 -0.481936 0.3125\nv 0.171875 -0.48254 0.3125\nv 0.179688 -0.482844 0.3125\nv 0.1875 -0.483123 0.3125\nv 0.195312 -0.483338 0.3125\nv 0.205036 -0.484375 0.3125\nv 0.203125 -0.48397 0.3125\nv 0.210938 -0.484375 0.313429\nv 0.21875 -0.484375 0.314786\nv 0.226562 -0.484375 0.316236\nv 0.234375 -0.484375 0.317515\nv 0.242188 -0.484375 0.319062\nv 0.398438 -0.484375 0.318243\nv 0.40625 -0.484375 0.315914\nv 0.414062 -0.484375 0.314786\nv 0.421875 -0.484375 0.313983\nv 0.429688 -0.484375 0.313468\nv 0.4375 -0.484375 0.312864\nv 0.445312 -0.484375 0.313146\nv 0.453125 -0.484375 0.313822\nv 0.460938 -0.484375 0.314886\nv 0.46875 -0.484375 0.316454\nv 0.476562 -0.484375 0.317371\nv 0.484375 -0.484375 0.318406\nv 0.492188 -0.484375 0.319843\nv -0.325756 -0.476562 0.3125\nv -0.328125 -0.476562 0.315436\nv -0.254038 -0.476562 0.3125\nv -0.257812 -0.472237 0.3125\nv -0.25 -0.476562 0.313425\nv -0.242188 -0.476562 0.316619\nv -0.03125 -0.476562 0.318961\nv -0.0234375 -0.476562 0.31617\nv -0.0126697 -0.476562 0.3125\nv -0.015625 -0.476562 0.313458\nv -0.0078125 -0.475544 0.3125\nv 0 -0.474353 0.3125\nv 0.0078125 -0.473999 0.3125\nv 0.015625 -0.473825 0.3125\nv 0.0234375 -0.473668 0.3125\nv 0.03125 -0.47361 0.3125\nv 0.0390625 -0.473736 0.3125\nv 0.046875 -0.473975 0.3125\nv 0.0546875 -0.474111 0.3125\nv 0.0625 -0.473809 0.3125\nv 0.0703125 -0.473667 0.3125\nv 0.078125 -0.473508 0.3125\nv 0.0859375 -0.473607 0.3125\nv 0.09375 -0.473807 0.3125\nv 0.101562 -0.474178 0.3125\nv 0.109375 -0.474517 0.3125\nv 0.117188 -0.474823 0.3125\nv 0.125 -0.475498 0.3125\nv 0.133201 -0.476562 0.3125\nv 0.132812 -0.476503 0.3125\nv 0.140625 -0.476562 0.314385\nv 0.148438 -0.476562 0.316283\nv 0.15625 -0.476562 0.31781\nv 0.164062 -0.476562 0.318983\nv 0.171875 -0.476562 0.31954\nv 0.179688 -0.476562 0.319863\nv 0.1875 -0.476562 0.320166\nv 0.195312 -0.476562 0.320295\nv 0.203125 -0.476562 0.320162\nv 0.210938 -0.476562 0.320127\nv 0.398438 -0.476562 0.31902\nv 0.40625 -0.476562 0.316117\nv 0.414062 -0.476562 0.31523\nv 0.421875 -0.476562 0.314416\nv 0.429688 -0.476562 0.313868\nv 0.4375 -0.476562 0.313519\nv 0.445312 -0.476562 0.313571\nv 0.453125 -0.476562 0.313986\nv 0.460938 -0.476562 0.314922\nv 0.46875 -0.476562 0.316539\nv 0.476562 -0.476562 0.31735\nv 0.484375 -0.476562 0.318366\nv 0.492188 -0.476562 0.319216\nv -0.325842 -0.46875 0.3125\nv -0.328125 -0.46875 0.31516\nv -0.260909 -0.46875 0.3125\nv -0.257812 -0.46875 0.313081\nv -0.25 -0.46875 0.314893\nv -0.242188 -0.46875 0.318045\nv 0.0078125 -0.46875 0.319927\nv 0.015625 -0.46875 0.319405\nv 0.0234375 -0.46875 0.319177\nv 0.03125 -0.46875 0.31944\nv 0.0390625 -0.46875 0.31982\nv 0.0625 -0.46875 0.320163\nv 0.0703125 -0.46875 0.320055\nv 0.398438 -0.46875 0.319524\nv 0.40625 -0.46875 0.316545\nv 0.414062 -0.46875 0.315362\nv 0.421875 -0.46875 0.31452\nv 0.429688 -0.46875 0.313848\nv 0.4375 -0.46875 0.313373\nv 0.445312 -0.46875 0.313584\nv 0.453125 -0.46875 0.313987\nv 0.460938 -0.46875 0.314899\nv 0.46875 -0.46875 0.316603\nv 0.476562 -0.46875 0.317545\nv 0.484375 -0.46875 0.318369\nv 0.492188 -0.46875 0.318827\nv -0.326065 -0.460938 0.3125\nv -0.328125 -0.460938 0.314702\nv -0.26087 -0.460938 0.3125\nv -0.257812 -0.460938 0.313169\nv -0.25 -0.460938 0.315435\nv -0.242188 -0.460938 0.318726\nv 0.398438 -0.460938 0.319954\nv 0.40625 -0.460938 0.316408\nv 0.414062 -0.460938 0.314985\nv 0.421875 -0.460938 0.313885\nv 0.429688 -0.460938 0.313325\nv 0.4375 -0.460938 0.313072\nv 0.445312 -0.460938 0.313555\nv 0.453125 -0.460938 0.314057\nv 0.460938 -0.460938 0.314933\nv 0.46875 -0.460938 0.31661\nv 0.476562 -0.460938 0.31782\nv 0.484375 -0.460938 0.318415\nv 0.492188 -0.460938 0.318827\nv -0.326249 -0.453125 0.3125\nv -0.328125 -0.453125 0.31446\nv -0.260031 -0.453125 0.3125\nv -0.257812 -0.453125 0.312952\nv -0.25 -0.453125 0.315243\nv -0.242188 -0.453125 0.318374\nv 0.398438 -0.453125 0.320219\nv 0.40625 -0.453125 0.315687\nv 0.414062 -0.453125 0.314325\nv 0.421875 -0.453125 0.31336\nv 0.429688 -0.447672 0.3125\nv 0.429688 -0.453125 0.312807\nv 0.4375 -0.446335 0.3125\nv 0.4375 -0.453125 0.312724\nv 0.445312 -0.453125 0.313409\nv 0.453125 -0.453125 0.314058\nv 0.460938 -0.453125 0.314879\nv 0.46875 -0.453125 0.316643\nv 0.476562 -0.453125 0.317805\nv 0.484375 -0.453125 0.318394\nv 0.492188 -0.453125 0.319387\nv -0.326453 -0.445312 0.3125\nv -0.328125 -0.445312 0.314283\nv -0.259745 -0.445312 0.3125\nv -0.257812 -0.445312 0.312891\nv -0.25 -0.445312 0.314923\nv -0.242188 -0.445312 0.317869\nv 0.40625 -0.445312 0.315952\nv 0.414062 -0.445312 0.313843\nv 0.426839 -0.445312 0.3125\nv 0.421875 -0.440154 0.3125\nv 0.421875 -0.445312 0.312747\nv 0.437819 -0.445312 0.3125\nv 0.445312 -0.445312 0.313231\nv 0.453125 -0.445312 0.313983\nv 0.460938 -0.445312 0.314752\nv 0.46875 -0.445312 0.316469\nv 0.476562 -0.445312 0.317642\nv 0.484375 -0.445312 0.31815\nv 0.492188 -0.445312 0.320042\nv -0.3265 -0.4375 0.3125\nv -0.328125 -0.4375 0.314305\nv -0.259375 -0.4375 0.3125\nv -0.257812 -0.4375 0.312828\nv -0.25 -0.4375 0.314685\nv -0.242188 -0.4375 0.317317\nv 0.40625 -0.4375 0.316378\nv 0.421306 -0.4375 0.3125\nv 0.414062 -0.4375 0.314105\nv 0.441338 -0.4375 0.3125\nv 0.445312 -0.429743 0.3125\nv 0.445312 -0.4375 0.312991\nv 0.453125 -0.4375 0.313796\nv 0.460938 -0.4375 0.314524\nv 0.46875 -0.4375 0.316055\nv 0.476562 -0.4375 0.317261\nv 0.484375 -0.4375 0.318169\nv 0.492188 -0.4375 0.320141\nv -0.326471 -0.429688 0.3125\nv -0.328125 -0.429688 0.314429\nv -0.258802 -0.429688 0.3125\nv -0.257812 -0.429688 0.312681\nv -0.25 -0.429688 0.314706\nv -0.242188 -0.429688 0.31717\nv 0.40625 -0.429688 0.31665\nv 0.421683 -0.429688 0.3125\nv 0.414062 -0.429688 0.314302\nv 0.421875 -0.429047 0.3125\nv 0.445347 -0.429688 0.3125\nv 0.453125 -0.429688 0.313287\nv 0.460938 -0.429688 0.314007\nv 0.46875 -0.429688 0.315521\nv 0.476562 -0.429688 0.316582\nv 0.484375 -0.429688 0.318177\nv 0.492188 -0.429688 0.320201\nv -0.326133 -0.421875 0.3125\nv -0.328125 -0.421875 0.315006\nv -0.260393 -0.421875 0.3125\nv -0.257812 -0.421875 0.312977\nv -0.25 -0.421875 0.314988\nv -0.242188 -0.421875 0.317223\nv 0.40625 -0.421875 0.317459\nv 0.414062 -0.421875 0.314984\nv 0.424704 -0.421875 0.3125\nv 0.421875 -0.421875 0.312978\nv 0.452929 -0.421875 0.3125\nv 0.453125 -0.420878 0.3125\nv 0.453125 -0.421875 0.31252\nv 0.460938 -0.421875 0.313436\nv 0.46875 -0.421875 0.314902\nv 0.476562 -0.421875 0.315951\nv 0.484375 -0.421875 0.318033\nv 0.492188 -0.421875 0.320114\nv -0.325445 -0.414062 0.3125\nv -0.328125 -0.414062 0.316243\nv -0.261428 -0.414062 0.3125\nv -0.257812 -0.414062 0.31316\nv -0.25 -0.414062 0.314987\nv -0.242188 -0.414062 0.317292\nv 0.40625 -0.414062 0.318804\nv 0.414062 -0.414062 0.315715\nv 0.427298 -0.414062 0.3125\nv 0.421875 -0.414062 0.313494\nv 0.454102 -0.414062 0.3125\nv 0.460938 -0.414062 0.3134\nv 0.46875 -0.414062 0.314596\nv 0.476562 -0.414062 0.315687\nv 0.484375 -0.414062 0.317723\nv 0.492188 -0.414062 0.319798\nv -0.324431 -0.40625 0.3125\nv -0.328125 -0.40625 0.318398\nv -0.260873 -0.40625 0.3125\nv -0.257812 -0.401378 0.3125\nv -0.257812 -0.40625 0.313027\nv -0.25 -0.40625 0.314802\nv -0.242188 -0.40625 0.317138\nv 0.40625 -0.40625 0.319409\nv 0.414062 -0.40625 0.316361\nv 0.428765 -0.40625 0.3125\nv 0.421875 -0.40625 0.31391\nv 0.454268 -0.40625 0.3125\nv 0.460938 -0.40625 0.313229\nv 0.46875 -0.40625 0.314598\nv 0.476562 -0.40625 0.315939\nv 0.484375 -0.40625 0.317485\nv 0.492188 -0.40625 0.319528\nv -0.323642 -0.398438 0.3125\nv -0.256389 -0.398438 0.3125\nv -0.25 -0.398438 0.314018\nv -0.242188 -0.398438 0.31631\nv -0.234375 -0.398438 0.319655\nv 0.40625 -0.398438 0.318874\nv 0.414062 -0.398438 0.315905\nv 0.426306 -0.398438 0.3125\nv 0.421875 -0.398438 0.313486\nv 0.460932 -0.398438 0.3125\nv 0.460938 -0.398422 0.3125\nv 0.460938 -0.398438 0.312501\nv 0.46875 -0.398438 0.314145\nv 0.476562 -0.398438 0.315848\nv 0.484375 -0.398438 0.317189\nv 0.492188 -0.398438 0.319244\nv -0.322815 -0.390625 0.3125\nv -0.251782 -0.390625 0.3125\nv -0.25 -0.387574 0.3125\nv -0.25 -0.390625 0.312942\nv -0.242188 -0.390625 0.315081\nv -0.234375 -0.390625 0.318309\nv 0.40625 -0.390625 0.318102\nv 0.414062 -0.390625 0.314963\nv 0.423497 -0.390625 0.3125\nv 0.421875 -0.388308 0.3125\nv 0.421875 -0.390625 0.312794\nv 0.462114 -0.390625 0.3125\nv 0.46875 -0.390625 0.313977\nv 0.476562 -0.390625 0.315708\nv 0.484375 -0.390625 0.316975\nv 0.492188 -0.390625 0.318897\nv -0.322095 -0.382812 0.3125\nv -0.247276 -0.382812 0.3125\nv -0.242188 -0.382812 0.313888\nv -0.234375 -0.382812 0.316821\nv 0.40625 -0.382812 0.317177\nv 0.419271 -0.382812 0.3125\nv 0.414062 -0.382812 0.313994\nv 0.461749 -0.382812 0.3125\nv 0.46875 -0.382812 0.313815\nv 0.476562 -0.382812 0.315521\nv 0.484375 -0.382812 0.316766\nv 0.492188 -0.382812 0.318427\nv -0.321042 -0.375 0.3125\nv -0.320312 -0.371115 0.3125\nv -0.243198 -0.375 0.3125\nv -0.242188 -0.372722 0.3125\nv -0.242188 -0.375 0.312813\nv -0.234375 -0.375 0.315467\nv 0.40625 -0.375 0.316017\nv 0.416222 -0.375 0.3125\nv 0.414062 -0.370265 0.3125\nv 0.414062 -0.375 0.313132\nv 0.461062 -0.375 0.3125\nv 0.460938 -0.37416 0.3125\nv 0.46875 -0.375 0.313749\nv 0.476562 -0.375 0.315322\nv 0.484375 -0.375 0.316508\nv 0.492188 -0.375 0.317986\nv -0.318935 -0.367188 0.3125\nv -0.320312 -0.367188 0.313501\nv -0.239979 -0.367188 0.3125\nv -0.234375 -0.367188 0.314668\nv 0.398438 -0.367188 0.319569\nv 0.412917 -0.367188 0.3125\nv 0.40625 -0.367188 0.315003\nv 0.459841 -0.367188 0.3125\nv 0.460938 -0.367188 0.312659\nv 0.46875 -0.367188 0.313898\nv 0.476562 -0.367188 0.315315\nv 0.484375 -0.367188 0.316163\nv 0.492188 -0.367188 0.3174\nv -0.316797 -0.359375 0.3125\nv -0.320312 -0.359375 0.315385\nv -0.237617 -0.359375 0.3125\nv -0.234375 -0.359375 0.313688\nv -0.226562 -0.359375 0.319932\nv 0.398438 -0.359375 0.318626\nv 0.40997 -0.359375 0.3125\nv 0.40625 -0.359375 0.31393\nv 0.460451 -0.359375 0.3125\nv 0.460938 -0.355981 0.3125\nv 0.460938 -0.359375 0.31257\nv 0.46875 -0.359375 0.313921\nv 0.476562 -0.359375 0.315151\nv 0.484375 -0.359375 0.315813\nv 0.492188 -0.359375 0.316811\nv -0.315279 -0.351562 0.3125\nv -0.320312 -0.351562 0.317161\nv -0.236373 -0.351562 0.3125\nv -0.234375 -0.351562 0.313195\nv -0.226562 -0.351562 0.319573\nv 0.398438 -0.351562 0.317541\nv 0.406839 -0.351562 0.3125\nv 0.40625 -0.350189 0.3125\nv 0.40625 -0.351562 0.312773\nv 0.461468 -0.351562 0.3125\nv 0.46875 -0.351562 0.313732\nv 0.476562 -0.351562 0.31469\nv 0.484375 -0.351562 0.315373\nv 0.492188 -0.351562 0.316274\nv -0.314227 -0.34375 0.3125\nv -0.320312 -0.34375 0.318729\nv -0.235722 -0.34375 0.3125\nv -0.234375 -0.34375 0.313004\nv -0.226562 -0.34375 0.319466\nv 0.403975 -0.34375 0.3125\nv 0.398438 -0.34375 0.316706\nv 0.462461 -0.34375 0.3125\nv 0.46875 -0.34375 0.313519\nv 0.476562 -0.34375 0.314283\nv 0.484375 -0.34375 0.314835\nv 0.492188 -0.34375 0.315704\nv -0.313543 -0.335938 0.3125\nv -0.320312 -0.335938 0.320141\nv -0.235113 -0.335938 0.3125\nv -0.234375 -0.335938 0.31279\nv -0.226562 -0.335938 0.319268\nv 0.402127 -0.335938 0.3125\nv 0.398438 -0.335938 0.315466\nv 0.462762 -0.335938 0.3125\nv 0.46875 -0.335938 0.313427\nv 0.476562 -0.335938 0.313983\nv 0.484375 -0.335938 0.31441\nv 0.492188 -0.335938 0.315472\nv -0.313009 -0.328125 0.3125\nv -0.3125 -0.321549 0.3125\nv -0.234745 -0.328125 0.3125\nv -0.234375 -0.323685 0.3125\nv -0.234375 -0.328125 0.312647\nv -0.226562 -0.328125 0.319197\nv 0.400893 -0.328125 0.3125\nv 0.398438 -0.328125 0.314597\nv 0.463192 -0.328125 0.3125\nv 0.46875 -0.328125 0.313359\nv 0.476562 -0.328125 0.313854\nv 0.484375 -0.328125 0.314148\nv 0.492188 -0.328125 0.315433\nv -0.31231 -0.320312 0.3125\nv -0.3125 -0.320312 0.312599\nv -0.234194 -0.320312 0.3125\nv -0.226562 -0.320312 0.318915\nv 0.400326 -0.320312 0.3125\nv 0.398438 -0.320312 0.3141\nv 0.463053 -0.320312 0.3125\nv 0.46875 -0.320312 0.313369\nv 0.476562 -0.320312 0.313849\nv 0.484375 -0.320312 0.313933\nv 0.492188 -0.320312 0.315467\nv -0.311482 -0.3125 0.3125\nv -0.3125 -0.3125 0.313057\nv -0.233666 -0.3125 0.3125\nv -0.226562 -0.3125 0.318519\nv 0.400375 -0.3125 0.3125\nv 0.398438 -0.3125 0.314195\nv 0.462215 -0.3125 0.3125\nv 0.460938 -0.305925 0.3125\nv 0.46875 -0.3125 0.313411\nv 0.476562 -0.3125 0.313852\nv 0.484375 -0.3125 0.313823\nv 0.492188 -0.3125 0.315492\nv -0.3111 -0.304688 0.3125\nv -0.3125 -0.304688 0.313283\nv -0.233134 -0.304688 0.3125\nv -0.226562 -0.304688 0.318233\nv 0.400734 -0.304688 0.3125\nv 0.398438 -0.304688 0.314595\nv 0.460668 -0.304688 0.3125\nv 0.460938 -0.304688 0.312535\nv 0.46875 -0.304688 0.31358\nv 0.476562 -0.304688 0.313973\nv 0.484375 -0.304688 0.313957\nv 0.492188 -0.304688 0.315331\nv -0.310919 -0.296875 0.3125\nv -0.3125 -0.296875 0.313472\nv -0.232655 -0.296875 0.3125\nv -0.226562 -0.296875 0.31798\nv 0.400955 -0.296875 0.3125\nv 0.398438 -0.296875 0.314838\nv 0.459194 -0.296875 0.3125\nv 0.460938 -0.296875 0.312716\nv 0.46875 -0.296875 0.313724\nv 0.476562 -0.296875 0.314115\nv 0.484375 -0.296875 0.313683\nv 0.492188 -0.296875 0.314987\nv -0.311085 -0.289062 0.3125\nv -0.3125 -0.289062 0.313471\nv -0.232316 -0.289062 0.3125\nv -0.226562 -0.289062 0.317675\nv 0.400702 -0.289062 0.3125\nv 0.398438 -0.289062 0.314606\nv 0.458518 -0.289062 0.3125\nv 0.460938 -0.289062 0.312812\nv 0.46875 -0.289062 0.313825\nv 0.476562 -0.289062 0.313962\nv 0.484375 -0.289062 0.313359\nv 0.492188 -0.289062 0.314861\nv -0.311279 -0.28125 0.3125\nv -0.3125 -0.28125 0.313427\nv -0.232374 -0.28125 0.3125\nv -0.226562 -0.28125 0.317627\nv 0.401749 -0.28125 0.3125\nv 0.398438 -0.28125 0.31543\nv 0.457925 -0.28125 0.3125\nv 0.460938 -0.28125 0.312857\nv 0.46875 -0.28125 0.313675\nv 0.476562 -0.28125 0.313671\nv 0.484375 -0.28125 0.313144\nv 0.492188 -0.28125 0.314798\nv -0.3113 -0.273438 0.3125\nv -0.3125 -0.273438 0.31354\nv -0.232557 -0.273438 0.3125\nv -0.226562 -0.273438 0.31814\nv 0.401765 -0.273438 0.3125\nv 0.398438 -0.273438 0.315393\nv 0.458667 -0.273438 0.3125\nv 0.460938 -0.269305 0.3125\nv 0.460938 -0.273438 0.312727\nv 0.46875 -0.273438 0.313562\nv 0.476562 -0.273438 0.313444\nv 0.484375 -0.273438 0.312974\nv 0.492188 -0.273438 0.314734\nv -0.311021 -0.265625 0.3125\nv -0.3125 -0.265625 0.313934\nv -0.232583 -0.265625 0.3125\nv -0.226562 -0.265625 0.318562\nv 0.401136 -0.265625 0.3125\nv 0.398438 -0.265625 0.31501\nv 0.46209 -0.265625 0.3125\nv 0.46875 -0.265625 0.31364\nv 0.476562 -0.265625 0.313147\nv 0.484375 -0.26394 0.3125\nv 0.484375 -0.265625 0.312574\nv 0.492188 -0.265625 0.314625\nv -0.310905 -0.257812 0.3125\nv -0.3125 -0.257812 0.314189\nv -0.23189 -0.257812 0.3125\nv -0.226562 -0.257812 0.318023\nv 0.401841 -0.257812 0.3125\nv 0.398438 -0.257812 0.31568\nv 0.463653 -0.257812 0.3125\nv 0.46875 -0.257812 0.313311\nv 0.480555 -0.257812 0.3125\nv 0.476562 -0.252256 0.3125\nv 0.476562 -0.257812 0.312732\nv 0.485415 -0.257812 0.3125\nv 0.492188 -0.257812 0.314434\nv -0.310804 -0.25 0.3125\nv -0.3125 -0.25 0.314488\nv -0.2307 -0.25 0.3125\nv -0.226562 -0.25 0.316758\nv 0.402461 -0.25 0.3125\nv 0.398438 -0.25 0.316268\nv 0.467084 -0.25 0.3125\nv 0.474301 -0.25 0.3125\nv 0.46875 -0.247778 0.3125\nv 0.46875 -0.25 0.312727\nv 0.486089 -0.25 0.3125\nv 0.492188 -0.25 0.31431\nv -0.310656 -0.242188 0.3125\nv -0.3125 -0.242188 0.314969\nv -0.22915 -0.242188 0.3125\nv -0.226562 -0.242188 0.315274\nv 0.402914 -0.242188 0.3125\nv 0.398438 -0.242188 0.316721\nv 0.487237 -0.242188 0.3125\nv 0.492188 -0.242188 0.314067\nv -0.310583 -0.234375 0.3125\nv -0.3125 -0.234375 0.31508\nv -0.227494 -0.234375 0.3125\nv -0.226562 -0.234375 0.313529\nv 0.403866 -0.234375 0.3125\nv 0.398438 -0.234375 0.317599\nv 0.489328 -0.234375 0.3125\nv 0.492188 -0.234375 0.313491\nv 0.5 -0.234375 0.320143\nv -0.310175 -0.226562 0.3125\nv -0.3125 -0.226562 0.315547\nv -0.226966 -0.226562 0.3125\nv -0.226562 -0.226562 0.312918\nv 0.40518 -0.226562 0.3125\nv 0.398438 -0.226562 0.318744\nv 0.40625 -0.220492 0.3125\nv 0.491696 -0.226562 0.3125\nv 0.492188 -0.225113 0.3125\nv 0.492188 -0.226562 0.31267\nv 0.5 -0.226562 0.319639\nv -0.309808 -0.21875 0.3125\nv -0.3125 -0.21875 0.315985\nv -0.226745 -0.21875 0.3125\nv -0.226562 -0.212699 0.3125\nv -0.226562 -0.21875 0.312679\nv 0.398438 -0.21875 0.31972\nv 0.40662 -0.21875 0.3125\nv 0.40625 -0.21875 0.312722\nv 0.493393 -0.21875 0.3125\nv 0.5 -0.21875 0.31911\nv -0.309341 -0.210938 0.3125\nv -0.3125 -0.210938 0.31649\nv -0.226537 -0.210938 0.3125\nv 0.407856 -0.210938 0.3125\nv 0.40625 -0.210938 0.313434\nv 0.494187 -0.210938 0.3125\nv 0.5 -0.210938 0.3188\nv -0.30883 -0.203125 0.3125\nv -0.3125 -0.203125 0.317461\nv -0.226364 -0.203125 0.3125\nv 0.408786 -0.203125 0.3125\nv 0.40625 -0.203125 0.313874\nv 0.494794 -0.203125 0.3125\nv 0.5 -0.203125 0.31873\nv -0.307769 -0.195312 0.3125\nv -0.3125 -0.195312 0.319436\nv -0.226461 -0.195312 0.3125\nv -0.226562 -0.19409 0.3125\nv 0.409735 -0.195312 0.3125\nv 0.40625 -0.195312 0.314449\nv 0.495108 -0.195312 0.3125\nv 0.5 -0.195312 0.319013\nv -0.306997 -0.1875 0.3125\nv -0.227906 -0.1875 0.3125\nv -0.226562 -0.1875 0.313478\nv 0.409378 -0.1875 0.3125\nv 0.40625 -0.1875 0.314233\nv 0.495183 -0.1875 0.3125\nv 0.5 -0.1875 0.319687\nv -0.305924 -0.179688 0.3125\nv -0.304688 -0.174527 0.3125\nv -0.230488 -0.179688 0.3125\nv -0.226562 -0.179688 0.315043\nv 0.409081 -0.179688 0.3125\nv 0.40625 -0.179688 0.314077\nv 0.495101 -0.179688 0.3125\nv -0.303495 -0.171875 0.3125\nv -0.304688 -0.171875 0.313111\nv -0.233241 -0.171875 0.3125\nv -0.234375 -0.168621 0.3125\nv -0.226562 -0.171875 0.316493\nv 0.410592 -0.171875 0.3125\nv 0.40625 -0.171875 0.314636\nv 0.495051 -0.171875 0.3125\nv -0.301042 -0.164062 0.3125\nv -0.304688 -0.164062 0.31445\nv -0.236829 -0.164062 0.3125\nv -0.234375 -0.164062 0.313262\nv -0.226562 -0.164062 0.317687\nv 0.412618 -0.164062 0.3125\nv 0.40625 -0.164062 0.315068\nv 0.414062 -0.15917 0.3125\nv 0.494476 -0.164062 0.3125\nv 0.5 -0.164062 0.320185\nv -0.299259 -0.15625 0.3125\nv -0.304688 -0.15625 0.315952\nv -0.240544 -0.15625 0.3125\nv -0.242188 -0.151624 0.3125\nv -0.234375 -0.15625 0.314648\nv -0.226562 -0.15625 0.319199\nv 0.40625 -0.15625 0.315739\nv 0.415028 -0.15625 0.3125\nv 0.414062 -0.15625 0.312822\nv 0.494245 -0.15625 0.3125\nv -0.297909 -0.148438 0.3125\nv -0.304688 -0.148438 0.317719\nv -0.243402 -0.148438 0.3125\nv -0.242188 -0.148438 0.312864\nv -0.234375 -0.148438 0.315878\nv 0.40625 -0.148438 0.316535\nv 0.417517 -0.148438 0.3125\nv 0.414062 -0.148438 0.313627\nv 0.493229 -0.148438 0.3125\nv -0.297412 -0.140625 0.3125\nv -0.304688 -0.140625 0.319014\nv -0.247324 -0.140625 0.3125\nv -0.25 -0.133716 0.3125\nv -0.242188 -0.140625 0.314047\nv -0.234375 -0.140625 0.316925\nv 0.40625 -0.140625 0.317109\nv 0.420239 -0.140625 0.3125\nv 0.414062 -0.140625 0.314285\nv 0.421875 -0.135456 0.3125\nv 0.492415 -0.140625 0.3125\nv 0.492188 -0.13817 0.3125\nv -0.297531 -0.132812 0.3125\nv -0.304688 -0.132812 0.319514\nv -0.250401 -0.132812 0.3125\nv -0.25 -0.132812 0.312599\nv -0.242188 -0.132812 0.315076\nv -0.234375 -0.132812 0.317895\nv 0.40625 -0.132812 0.317651\nv 0.414062 -0.132812 0.314968\nv 0.426371 -0.132812 0.3125\nv 0.421875 -0.132812 0.312737\nv 0.429688 -0.127276 0.3125\nv 0.490841 -0.132812 0.3125\nv 0.492188 -0.132812 0.313056\nv -0.297451 -0.125 0.3125\nv -0.304688 -0.125 0.319489\nv -0.253265 -0.125 0.3125\nv -0.25 -0.125 0.313353\nv -0.242188 -0.125 0.315989\nv -0.234375 -0.125 0.318988\nv 0.40625 -0.125 0.318088\nv 0.414062 -0.125 0.3154\nv 0.421875 -0.125 0.313265\nv 0.430582 -0.125 0.3125\nv 0.429688 -0.120335 0.3125\nv 0.429688 -0.125 0.312566\nv 0.490237 -0.125 0.3125\nv 0.492188 -0.125 0.31351\nv -0.298155 -0.117188 0.3125\nv -0.304688 -0.117188 0.319287\nv -0.255472 -0.117188 0.3125\nv -0.25 -0.117188 0.314297\nv -0.242188 -0.117188 0.317051\nv 0.40625 -0.117188 0.318411\nv 0.414062 -0.117188 0.315641\nv 0.429342 -0.117188 0.3125\nv 0.421875 -0.117188 0.313508\nv 0.490435 -0.117188 0.3125\nv 0.492188 -0.117188 0.313806\nv -0.298818 -0.109375 0.3125\nv -0.304688 -0.109375 0.319131\nv -0.257588 -0.109375 0.3125\nv -0.257812 -0.108058 0.3125\nv -0.25 -0.109375 0.315273\nv -0.242188 -0.109375 0.318306\nv 0.40625 -0.109375 0.318559\nv 0.414062 -0.109375 0.31572\nv 0.428727 -0.109375 0.3125\nv 0.421875 -0.109375 0.313585\nv 0.491811 -0.109375 0.3125\nv 0.492188 -0.108132 0.3125\nv 0.492188 -0.109375 0.312865\nv -0.299359 -0.101562 0.3125\nv -0.304688 -0.101562 0.319057\nv -0.259184 -0.101562 0.3125\nv -0.257812 -0.101562 0.31289\nv -0.25 -0.101562 0.316351\nv -0.242188 -0.101562 0.319649\nv 0.40625 -0.101562 0.318585\nv 0.414062 -0.101562 0.315737\nv 0.427296 -0.101562 0.3125\nv 0.421875 -0.101562 0.313439\nv 0.493532 -0.101562 0.3125\nv -0.300746 -0.09375 0.3125\nv -0.304688 -0.09375 0.317276\nv -0.26036 -0.09375 0.3125\nv -0.257812 -0.09375 0.313529\nv -0.25 -0.09375 0.317228\nv 0.40625 -0.09375 0.31825\nv 0.414062 -0.09375 0.315343\nv 0.423471 -0.09375 0.3125\nv 0.421875 -0.0887024 0.3125\nv 0.421875 -0.09375 0.31282\nv 0.496179 -0.09375 0.3125\nv -0.302836 -0.0859375 0.3125\nv -0.304688 -0.0859375 0.315008\nv -0.259299 -0.0859375 0.3125\nv -0.257812 -0.0810247 0.3125\nv -0.257812 -0.0859375 0.313061\nv -0.25 -0.0859375 0.317264\nv 0.40625 -0.0859375 0.318274\nv 0.42133 -0.0859375 0.3125\nv 0.414062 -0.0859375 0.315201\nv 0.498642 -0.0859375 0.3125\nv 0.5 -0.0809075 0.3125\nv 0.5 -0.0859375 0.319119\nv -0.304226 -0.078125 0.3125\nv -0.304688 -0.0748968 0.3125\nv -0.304688 -0.078125 0.313195\nv -0.257158 -0.078125 0.3125\nv -0.25 -0.078125 0.316561\nv 0.40625 -0.078125 0.317829\nv 0.418556 -0.078125 0.3125\nv 0.414062 -0.078125 0.31436\nv 0.500524 -0.078125 0.3125\nv -0.305247 -0.0703125 0.3125\nv -0.252813 -0.0703125 0.3125\nv -0.25 -0.0668181 0.3125\nv -0.25 -0.0703125 0.314438\nv -0.242188 -0.0703125 0.319454\nv 0.40625 -0.0703125 0.317009\nv 0.41605 -0.0703125 0.3125\nv 0.414062 -0.0656507 0.3125\nv 0.414062 -0.0703125 0.313419\nv 0.502073 -0.0703125 0.3125\nv -0.306196 -0.0625 0.3125\nv -0.247162 -0.0625 0.3125\nv -0.242188 -0.0625 0.316822\nv 0.398438 -0.0625 0.318659\nv 0.41259 -0.0625 0.3125\nv 0.40625 -0.0625 0.315127\nv 0.503204 -0.0625 0.3125\nv -0.306539 -0.0546875 0.3125\nv -0.245259 -0.0546875 0.3125\nv -0.242188 -0.0546875 0.315952\nv 0.398438 -0.0546875 0.319206\nv 0.412933 -0.0546875 0.3125\nv 0.40625 -0.0546875 0.315452\nv 0.503548 -0.0546875 0.3125\nv -0.306433 -0.046875 0.3125\nv -0.244067 -0.046875 0.3125\nv -0.242188 -0.046875 0.315238\nv 0.398438 -0.046875 0.31975\nv 0.412565 -0.046875 0.3125\nv 0.40625 -0.046875 0.315548\nv 0.504434 -0.046875 0.3125\nv -0.30634 -0.0390625 0.3125\nv -0.242502 -0.0390625 0.3125\nv -0.242188 -0.0375305 0.3125\nv -0.242188 -0.0390625 0.312964\nv -0.234375 -0.0390625 0.319851\nv 0.398438 -0.0390625 0.319663\nv 0.410459 -0.0390625 0.3125\nv 0.40625 -0.0390625 0.315002\nv 0.50461 -0.0390625 0.3125\nv -0.306028 -0.03125 0.3125\nv -0.240335 -0.03125 0.3125\nv -0.234375 -0.03125 0.317316\nv 0.398438 -0.03125 0.319418\nv 0.409384 -0.03125 0.3125\nv 0.40625 -0.03125 0.31456\nv 0.503928 -0.03125 0.3125\nv -0.306363 -0.0234375 0.3125\nv -0.238041 -0.0234375 0.3125\nv -0.234375 -0.0234375 0.315585\nv 0.398438 -0.0234375 0.319294\nv 0.410322 -0.0234375 0.3125\nv 0.40625 -0.0234375 0.315693\nv 0.502977 -0.0234375 0.3125\nv -0.307476 -0.015625 0.3125\nv -0.235392 -0.015625 0.3125\nv -0.234375 -0.0127992 0.3125\nv -0.234375 -0.015625 0.3135\nv -0.226562 -0.015625 0.319572\nv 0.398438 -0.015625 0.319527\nv 0.411109 -0.015625 0.3125\nv 0.40625 -0.015625 0.316466\nv 0.501609 -0.015625 0.3125\nv -0.308953 -0.0078125 0.3125\nv -0.23201 -0.0078125 0.3125\nv -0.226562 -0.0078125 0.317213\nv 0.398438 -0.0078125 0.319231\nv 0.410895 -0.0078125 0.3125\nv 0.40625 -0.0078125 0.31601\nv 0.50016 -0.0078125 0.3125\nv -0.309625 0 0.3125\nv -0.227783 0 0.3125\nv -0.226562 0.00189419 0.3125\nv -0.226562 0 0.313654\nv -0.21875 0 0.318917\nv 0.398438 0 0.318805\nv 0.408701 0 0.3125\nv 0.40625 0 0.314426\nv 0.500034 0 0.3125\nv -0.309594 0.0078125 0.3125\nv -0.222539 0.0078125 0.3125\nv -0.21875 0.0116697 0.3125\nv -0.21875 0.0078125 0.315416\nv 0.398438 0.0078125 0.317708\nv 0.406726 0.0078125 0.3125\nv 0.40625 0.00885547 0.3125\nv 0.40625 0.0078125 0.312891\nv 0.500198 0.0078125 0.3125\nv -0.309299 0.015625 0.3125\nv -0.215165 0.015625 0.3125\nv -0.210938 0.0186317 0.3125\nv -0.210938 0.015625 0.315822\nv -0.203125 0.0233247 0.3125\nv -0.203125 0.015625 0.320254\nv 0.382812 0.015625 0.320012\nv 0.390625 0.015625 0.318153\nv 0.402114 0.015625 0.3125\nv 0.398438 0.0192671 0.3125\nv 0.398438 0.015625 0.314914\nv 0.500185 0.015625 0.3125\nv -0.308702 0.0234375 0.3125\nv -0.202917 0.0234375 0.3125\nv -0.195312 0.0259776 0.3125\nv -0.195312 0.0234375 0.316772\nv -0.1875 0.0276901 0.3125\nv -0.1875 0.0234375 0.318933\nv -0.179688 0.028479 0.3125\nv -0.179688 0.0234375 0.320172\nv -0.171875 0.0291005 0.3125\nv -0.164062 0.0295328 0.3125\nv -0.15625 0.0298191 0.3125\nv -0.148438 0.0298835 0.3125\nv -0.140625 0.0298683 0.3125\nv -0.132812 0.0299022 0.3125\nv -0.125 0.0298299 0.3125\nv -0.117188 0.0296823 0.3125\nv -0.109375 0.0295864 0.3125\nv -0.101562 0.0294938 0.3125\nv -0.09375 0.0294001 0.3125\nv -0.0859375 0.0293466 0.3125\nv -0.078125 0.029309 0.3125\nv -0.0703125 0.0292211 0.3125\nv -0.0625 0.029014 0.3125\nv -0.0546875 0.028698 0.3125\nv -0.046875 0.0283688 0.3125\nv -0.0390625 0.0280591 0.3125\nv -0.03125 0.0277972 0.3125\nv -0.0234375 0.0275413 0.3125\nv -0.0234375 0.0234375 0.320156\nv -0.015625 0.027203 0.3125\nv -0.015625 0.0234375 0.319606\nv -0.0078125 0.0270642 0.3125\nv -0.0078125 0.0234375 0.319277\nv 0 0.0270449 0.3125\nv 0 0.0234375 0.319574\nv 0.0078125 0.0269855 0.3125\nv 0.0078125 0.0234375 0.320048\nv 0.015625 0.0269447 0.3125\nv 0.015625 0.0234375 0.320183\nv 0.0234375 0.0269393 0.3125\nv 0.0234375 0.0234375 0.320144\nv 0.03125 0.0269397 0.3125\nv 0.03125 0.0234375 0.31997\nv 0.0390625 0.0269289 0.3125\nv 0.0390625 0.0234375 0.31994\nv 0.046875 0.0269039 0.3125\nv 0.046875 0.0234375 0.319756\nv 0.0546875 0.0268705 0.3125\nv 0.0546875 0.0234375 0.319612\nv 0.0625 0.0268062 0.3125\nv 0.0625 0.0234375 0.319332\nv 0.0703125 0.0267032 0.3125\nv 0.0703125 0.0234375 0.318942\nv 0.078125 0.0265576 0.3125\nv 0.078125 0.0234375 0.318487\nv 0.0859375 0.0264201 0.3125\nv 0.0859375 0.0234375 0.318494\nv 0.09375 0.0262165 0.3125\nv 0.09375 0.0234375 0.318236\nv 0.101562 0.0261528 0.3125\nv 0.101562 0.0234375 0.318503\nv 0.109375 0.0260917 0.3125\nv 0.109375 0.0234375 0.318561\nv 0.117188 0.0260237 0.3125\nv 0.117188 0.0234375 0.318605\nv 0.125 0.0259014 0.3125\nv 0.125 0.0234375 0.31863\nv 0.132812 0.0258393 0.3125\nv 0.132812 0.0234375 0.318575\nv 0.140625 0.0257884 0.3125\nv 0.140625 0.0234375 0.318378\nv 0.148438 0.0257308 0.3125\nv 0.148438 0.0234375 0.318023\nv 0.15625 0.0256583 0.3125\nv 0.15625 0.0234375 0.317741\nv 0.164062 0.0255214 0.3125\nv 0.164062 0.0234375 0.317317\nv 0.171875 0.0253974 0.3125\nv 0.171875 0.0234375 0.316862\nv 0.179688 0.0252809 0.3125\nv 0.179688 0.0234375 0.316431\nv 0.1875 0.0251441 0.3125\nv 0.1875 0.0234375 0.316043\nv 0.195312 0.0249694 0.3125\nv 0.195312 0.0234375 0.315601\nv 0.203125 0.0248745 0.3125\nv 0.203125 0.0234375 0.315291\nv 0.210938 0.0249912 0.3125\nv 0.210938 0.0234375 0.315381\nv 0.21875 0.0250856 0.3125\nv 0.21875 0.0234375 0.315541\nv 0.226562 0.0251102 0.3125\nv 0.226562 0.0234375 0.315612\nv 0.234375 0.0252429 0.3125\nv 0.234375 0.0234375 0.315763\nv 0.242188 0.0252256 0.3125\nv 0.242188 0.0234375 0.315729\nv 0.25 0.0250703 0.3125\nv 0.25 0.0234375 0.3155\nv 0.257812 0.0249063 0.3125\nv 0.257812 0.0234375 0.315138\nv 0.265625 0.0249635 0.3125\nv 0.265625 0.0234375 0.315122\nv 0.273438 0.0250642 0.3125\nv 0.273438 0.0234375 0.315155\nv 0.28125 0.0250092 0.3125\nv 0.28125 0.0234375 0.314998\nv 0.289062 0.0248807 0.3125\nv 0.289062 0.0234375 0.314782\nv 0.296875 0.0249824 0.3125\nv 0.296875 0.0234375 0.314843\nv 0.304688 0.0253736 0.3125\nv 0.304688 0.0234375 0.315421\nv 0.3125 0.025619 0.3125\nv 0.3125 0.0234375 0.31578\nv 0.320312 0.0258004 0.3125\nv 0.320312 0.0234375 0.316039\nv 0.328125 0.0259372 0.3125\nv 0.328125 0.0234375 0.316265\nv 0.335938 0.0260316 0.3125\nv 0.335938 0.0234375 0.316487\nv 0.34375 0.0262256 0.3125\nv 0.34375 0.0234375 0.316592\nv 0.351562 0.026426 0.3125\nv 0.351562 0.0234375 0.316774\nv 0.359375 0.0267743 0.3125\nv 0.359375 0.0234375 0.317199\nv 0.367188 0.0271019 0.3125\nv 0.367188 0.0234375 0.317912\nv 0.375 0.0272938 0.3125\nv 0.375 0.0234375 0.317923\nv 0.382812 0.0262967 0.3125\nv 0.382812 0.0234375 0.316613\nv 0.392826 0.0234375 0.3125\nv 0.390625 0.02411 0.3125\nv 0.390625 0.0234375 0.313531\nv 0.50027 0.0234375 0.3125\nv 0.5 0.0252243 0.3125\nv -0.308217 0.03125 0.3125\nv 0.498918 0.03125 0.3125\nv -0.307557 0.0390625 0.3125\nv 0.495975 0.0390625 0.3125\nv 0.492188 0.0449842 0.3125\nv -0.306882 0.046875 0.3125\nv 0.491002 0.046875 0.3125\nv 0.484375 0.0539922 0.3125\nv 0.492188 0.046875 0.319672\nv -0.305631 0.0546875 0.3125\nv -0.304688 0.0599237 0.3125\nv 0.483371 0.0546875 0.3125\nv 0.476562 0.0590181 0.3125\nv 0.484375 0.0546875 0.319735\nv -0.304215 0.0625 0.3125\nv -0.304688 0.0625 0.314501\nv 0.382812 0.0702862 0.3125\nv 0.390625 0.0700014 0.3125\nv 0.398438 0.0696736 0.3125\nv 0.40625 0.0696788 0.3125\nv 0.414062 0.0696821 0.3125\nv 0.421875 0.069687 0.3125\nv 0.429688 0.0695947 0.3125\nv 0.4375 0.0691244 0.3125\nv 0.445312 0.0686174 0.3125\nv 0.453125 0.0676216 0.3125\nv 0.460938 0.0656486 0.3125\nv 0.469701 0.0625 0.3125\nv 0.46875 0.0629274 0.3125\nv -0.303461 0.0703125 0.3125\nv -0.304688 0.0703125 0.317916\nv -0.203125 0.0777992 0.3125\nv -0.195312 0.076768 0.3125\nv -0.1875 0.0757613 0.3125\nv -0.179688 0.0749749 0.3125\nv -0.171875 0.0744525 0.3125\nv -0.164062 0.0742253 0.3125\nv -0.15625 0.0741739 0.3125\nv -0.148438 0.0740776 0.3125\nv -0.140625 0.0740722 0.3125\nv -0.132812 0.0741301 0.3125\nv -0.125 0.0741903 0.3125\nv -0.117188 0.074245 0.3125\nv -0.109375 0.0742829 0.3125\nv -0.101562 0.0743504 0.3125\nv -0.09375 0.0744081 0.3125\nv -0.0859375 0.0745064 0.3125\nv -0.078125 0.0745135 0.3125\nv -0.0703125 0.0744159 0.3125\nv -0.0625 0.0742739 0.3125\nv -0.0546875 0.074101 0.3125\nv -0.046875 0.0738848 0.3125\nv -0.0390625 0.0736516 0.3125\nv -0.03125 0.0733927 0.3125\nv -0.0234375 0.0731399 0.3125\nv -0.015625 0.0728846 0.3125\nv -0.0078125 0.0727353 0.3125\nv 0 0.0726617 0.3125\nv 0.0078125 0.0725962 0.3125\nv 0.015625 0.0725034 0.3125\nv 0.0234375 0.0723627 0.3125\nv 0.03125 0.0721874 0.3125\nv 0.0390625 0.0720314 0.3125\nv 0.046875 0.0718945 0.3125\nv 0.0546875 0.0719189 0.3125\nv 0.0625 0.0719398 0.3125\nv 0.0703125 0.0718688 0.3125\nv 0.078125 0.0717957 0.3125\nv 0.0859375 0.0717455 0.3125\nv 0.09375 0.0717513 0.3125\nv 0.101562 0.0717703 0.3125\nv 0.109375 0.0717987 0.3125\nv 0.117188 0.0718289 0.3125\nv 0.125 0.0718532 0.3125\nv 0.132812 0.0718078 0.3125\nv 0.140625 0.0717469 0.3125\nv 0.148438 0.0717788 0.3125\nv 0.15625 0.0718116 0.3125\nv 0.164062 0.071838 0.3125\nv 0.171875 0.0718561 0.3125\nv 0.179688 0.0718713 0.3125\nv 0.1875 0.0718966 0.3125\nv 0.195312 0.0719136 0.3125\nv 0.203125 0.0719223 0.3125\nv 0.210938 0.0718874 0.3125\nv 0.21875 0.0718022 0.3125\nv 0.226562 0.0717325 0.3125\nv 0.234375 0.0716053 0.3125\nv 0.242188 0.0715346 0.3125\nv 0.25 0.0715047 0.3125\nv 0.257812 0.0714074 0.3125\nv 0.265625 0.0713099 0.3125\nv 0.273438 0.0712338 0.3125\nv 0.28125 0.0712109 0.3125\nv 0.289062 0.0712377 0.3125\nv 0.296875 0.0713473 0.3125\nv 0.304688 0.0714671 0.3125\nv 0.3125 0.0714671 0.3125\nv 0.320312 0.0713642 0.3125\nv 0.328125 0.0712077 0.3125\nv 0.335938 0.0710925 0.3125\nv 0.34375 0.0710025 0.3125\nv 0.351562 0.0708869 0.3125\nv 0.359375 0.0707621 0.3125\nv 0.367188 0.0706398 0.3125\nv 0.381948 0.0703125 0.3125\nv 0.375 0.0705177 0.3125\nv 0.375 0.0703125 0.318112\nv -0.303161 0.078125 0.3125\nv -0.304688 0.078125 0.318187\nv -0.21875 0.0855937 0.3125\nv -0.204778 0.078125 0.3125\nv -0.210938 0.0797064 0.3125\nv -0.302957 0.0859375 0.3125\nv -0.304688 0.0859375 0.318321\nv -0.219197 0.0859375 0.3125\nv -0.302936 0.09375 0.3125\nv -0.304688 0.09375 0.317014\nv -0.223525 0.09375 0.3125\nv -0.303417 0.101562 0.3125\nv -0.304688 0.101562 0.315601\nv -0.225934 0.101562 0.3125\nv -0.304083 0.109375 0.3125\nv -0.304688 0.109375 0.314107\nv -0.225126 0.109375 0.3125\nv -0.304167 0.117188 0.3125\nv -0.304688 0.117188 0.313803\nv -0.224669 0.117188 0.3125\nv -0.304527 0.125 0.3125\nv -0.304688 0.127148 0.3125\nv -0.304688 0.125 0.312898\nv -0.224166 0.125 0.3125\nv -0.305162 0.132812 0.3125\nv -0.223809 0.132812 0.3125\nv -0.305487 0.140625 0.3125\nv -0.223508 0.140625 0.3125\nv -0.305655 0.148438 0.3125\nv -0.222727 0.148438 0.3125\nv -0.305513 0.15625 0.3125\nv -0.222805 0.15625 0.3125\nv -0.305462 0.164062 0.3125\nv -0.223512 0.164062 0.3125\nv -0.305931 0.171875 0.3125\nv -0.223562 0.171875 0.3125\nv -0.306802 0.179688 0.3125\nv -0.224133 0.179688 0.3125\nv -0.308039 0.1875 0.3125\nv -0.224941 0.1875 0.3125\nv -0.309279 0.195312 0.3125\nv -0.3125 0.195312 0.318689\nv -0.22525 0.195312 0.3125\nv -0.310528 0.203125 0.3125\nv -0.3125 0.203125 0.316105\nv -0.225132 0.203125 0.3125\nv -0.31151 0.210938 0.3125\nv -0.3125 0.210938 0.314298\nv -0.224965 0.210938 0.3125\nv -0.31233 0.21875 0.3125\nv -0.3125 0.220471 0.3125\nv -0.3125 0.21875 0.312796\nv -0.224752 0.21875 0.3125\nv -0.313069 0.226562 0.3125\nv -0.22473 0.226562 0.3125\nv -0.312825 0.234375 0.3125\nv -0.3125 0.236911 0.3125\nv -0.224939 0.234375 0.3125\nv -0.311786 0.242188 0.3125\nv -0.3125 0.242188 0.31365\nv -0.22527 0.242188 0.3125\nv -0.310527 0.25 0.3125\nv -0.3125 0.25 0.315475\nv -0.225754 0.25 0.3125\nv -0.3097 0.257812 0.3125\nv -0.3125 0.257812 0.316659\nv -0.226237 0.257812 0.3125\nv -0.226562 0.261974 0.3125\nv -0.308801 0.265625 0.3125\nv -0.3125 0.265625 0.317837\nv -0.226945 0.265625 0.3125\nv -0.226562 0.265625 0.317406\nv -0.308094 0.273438 0.3125\nv -0.3125 0.273438 0.318808\nv -0.228135 0.273438 0.3125\nv -0.307555 0.28125 0.3125\nv -0.3125 0.28125 0.319743\nv -0.22935 0.28125 0.3125\nv -0.30653 0.289062 0.3125\nv -0.230445 0.289062 0.3125\nv -0.305194 0.296875 0.3125\nv -0.231528 0.296875 0.3125\nv -0.305614 0.304688 0.3125\nv -0.232254 0.304688 0.3125\nv -0.305943 0.3125 0.3125\nv -0.232999 0.3125 0.3125\nv -0.306253 0.320312 0.3125\nv -0.233494 0.320312 0.3125\nv -0.306865 0.328125 0.3125\nv -0.234189 0.328125 0.3125\nv -0.234375 0.329792 0.3125\nv -0.30737 0.335938 0.3125\nv -0.3125 0.335938 0.319657\nv -0.235202 0.335938 0.3125\nv -0.234375 0.335938 0.315493\nv -0.307427 0.34375 0.3125\nv -0.3125 0.34375 0.319822\nv -0.236157 0.34375 0.3125\nv -0.234375 0.34375 0.319069\nv -0.307223 0.351562 0.3125\nv -0.3125 0.351562 0.319818\nv -0.236887 0.351562 0.3125\nv -0.307078 0.359375 0.3125\nv -0.3125 0.359375 0.31989\nv -0.237629 0.359375 0.3125\nv -0.307101 0.367188 0.3125\nv -0.3125 0.367188 0.319699\nv -0.23784 0.367188 0.3125\nv -0.307261 0.375 0.3125\nv -0.3125 0.375 0.319245\nv -0.238023 0.375 0.3125\nv -0.307596 0.382812 0.3125\nv -0.3125 0.382812 0.318493\nv -0.238194 0.382812 0.3125\nv -0.308156 0.390625 0.3125\nv -0.3125 0.390625 0.317682\nv -0.238439 0.390625 0.3125\nv -0.308712 0.398438 0.3125\nv -0.3125 0.398438 0.31692\nv -0.238636 0.398438 0.3125\nv -0.309327 0.40625 0.3125\nv -0.3125 0.40625 0.316157\nv -0.238874 0.40625 0.3125\nv -0.310002 0.414062 0.3125\nv -0.3125 0.414062 0.315323\nv -0.239152 0.414062 0.3125\nv -0.310745 0.421875 0.3125\nv -0.3125 0.421875 0.314455\nv -0.239535 0.421875 0.3125\nv -0.311348 0.429688 0.3125\nv -0.3125 0.429688 0.313743\nv -0.239901 0.429688 0.3125\nv -0.311838 0.4375 0.3125\nv -0.3125 0.4375 0.313179\nv -0.240239 0.4375 0.3125\nv -0.312251 0.445312 0.3125\nv -0.3125 0.445312 0.312749\nv -0.240905 0.445312 0.3125\nv -0.312338 0.453125 0.3125\nv -0.3125 0.459406 0.3125\nv -0.3125 0.453125 0.312655\nv -0.241598 0.453125 0.3125\nv -0.242188 0.460256 0.3125\nv -0.312533 0.460938 0.3125\nv -0.242254 0.460938 0.3125\nv -0.242188 0.460938 0.312719\nv -0.312558 0.46875 0.3125\nv -0.243038 0.46875 0.3125\nv -0.242188 0.46875 0.315375\nv -0.312515 0.476562 0.3125\nv -0.3125 0.477637 0.3125\nv -0.243758 0.476562 0.3125\nv -0.242188 0.476562 0.317901\nv -0.312386 0.484375 0.3125\nv -0.3125 0.484375 0.312593\nv -0.24448 0.484375 0.3125\nv -0.242188 0.484375 0.320004\nv -0.312327 0.492188 0.3125\nv -0.3125 0.494022 0.3125\nv -0.3125 0.492188 0.312637\nv -0.245182 0.492188 0.3125\nv -0.313045 0.5 0.3125\nv -0.320312 0.5 0.320044\nv -0.245764 0.5 0.3125\nv -0.31395 0.507812 0.3125\nv -0.320312 0.507812 0.318665\nv -0.246273 0.507812 0.3125\nv -0.314928 0.515625 0.3125\nv -0.320312 0.515625 0.317323\nv -0.24688 0.515625 0.3125\nv -0.315973 0.523438 0.3125\nv -0.320312 0.523438 0.316113\nv -0.247487 0.523438 0.3125\nv -0.316911 0.53125 0.3125\nv -0.320312 0.53125 0.315259\nv -0.248178 0.53125 0.3125\nv -0.31755 0.539062 0.3125\nv -0.320312 0.539062 0.314648\nv -0.248888 0.539062 0.3125\nv -0.318139 0.546875 0.3125\nv -0.320312 0.546875 0.314164\nv -0.249529 0.546875 0.3125\nv -0.25 0.552728 0.3125\nv -0.318735 0.554688 0.3125\nv -0.320312 0.554688 0.313692\nv -0.250241 0.554688 0.3125\nv -0.25 0.554688 0.31298\nv -0.319525 0.5625 0.3125\nv -0.320312 0.568939 0.3125\nv -0.320312 0.5625 0.31309\nv -0.25113 0.5625 0.3125\nv -0.25 0.5625 0.314877\nv -0.320466 0.570312 0.3125\nv -0.328125 0.570312 0.319958\nv -0.251771 0.570312 0.3125\nv -0.25 0.570312 0.316624\nv -0.321353 0.578125 0.3125\nv -0.328125 0.578125 0.318992\nv -0.252177 0.578125 0.3125\nv -0.25 0.578125 0.318561\nv -0.322163 0.585938 0.3125\nv -0.328125 0.585938 0.318158\nv -0.252444 0.585938 0.3125\nv -0.322894 0.59375 0.3125\nv -0.328125 0.59375 0.317715\nv -0.252728 0.59375 0.3125\nv -0.323442 0.601562 0.3125\nv -0.328125 0.601562 0.317309\nv -0.253142 0.601562 0.3125\nv -0.32426 0.609375 0.3125\nv -0.328125 0.609375 0.316306\nv -0.253473 0.609375 0.3125\nv -0.326464 0.617188 0.3125\nv -0.328125 0.623679 0.3125\nv -0.328125 0.617188 0.314385\nv -0.253555 0.617188 0.3125\nv -0.328418 0.625 0.3125\nv -0.252377 0.625 0.3125\nv -0.330399 0.632812 0.3125\nv -0.252326 0.632812 0.3125\nv -0.331626 0.640625 0.3125\nv -0.252526 0.640625 0.3125\nv -0.332853 0.648438 0.3125\nv -0.335938 0.648438 0.317988\nv -0.253387 0.648438 0.3125\nv -0.334401 0.65625 0.3125\nv -0.335938 0.65625 0.315205\nv -0.254272 0.65625 0.3125\nv -0.335385 0.664062 0.3125\nv -0.335938 0.670442 0.3125\nv -0.335938 0.664062 0.313524\nv -0.25534 0.664062 0.3125\nv -0.336051 0.671875 0.3125\nv -0.256544 0.671875 0.3125\nv -0.33652 0.679688 0.3125\nv -0.257517 0.679688 0.3125\nv -0.257812 0.682375 0.3125\nv -0.336825 0.6875 0.3125\nv -0.258378 0.6875 0.3125\nv -0.257812 0.6875 0.31664\nv -0.336901 0.695312 0.3125\nv -0.259168 0.695312 0.3125\nv -0.336892 0.703125 0.3125\nv -0.259872 0.703125 0.3125\nv -0.33661 0.710938 0.3125\nv -0.260579 0.710938 0.3125\nv -0.335974 0.71875 0.3125\nv -0.335938 0.71904 0.3125\nv -0.261299 0.71875 0.3125\nv -0.335007 0.726562 0.3125\nv -0.335938 0.726562 0.314427\nv -0.261874 0.726562 0.3125\nv -0.334117 0.734375 0.3125\nv -0.335938 0.734375 0.316251\nv -0.262548 0.734375 0.3125\nv -0.332988 0.742188 0.3125\nv -0.335938 0.742188 0.318813\nv -0.264101 0.742188 0.3125\nv -0.265625 0.747521 0.3125\nv -0.33184 0.75 0.3125\nv -0.266374 0.75 0.3125\nv -0.265625 0.75 0.314792\nv -0.331062 0.757812 0.3125\nv -0.269142 0.757812 0.3125\nv -0.331555 0.765625 0.3125\nv -0.271697 0.765625 0.3125\nv -0.273438 0.771065 0.3125\nv -0.331857 0.773438 0.3125\nv -0.335938 0.773438 0.319743\nv -0.27436 0.773438 0.3125\nv -0.273438 0.773438 0.314475\nv -0.332645 0.78125 0.3125\nv -0.335938 0.78125 0.318418\nv -0.277976 0.78125 0.3125\nv -0.333519 0.789062 0.3125\nv -0.335938 0.789062 0.316938\nv -0.281236 0.789062 0.3125\nv -0.28125 0.7891 0.3125\nv -0.33388 0.796875 0.3125\nv -0.335938 0.796875 0.316443\nv -0.285186 0.796875 0.3125\nv -0.334244 0.804688 0.3125\nv -0.335938 0.804688 0.315758\nv -0.288763 0.804688 0.3125\nv -0.289062 0.805223 0.3125\nv -0.335326 0.8125 0.3125\nv -0.335938 0.815184 0.3125\nv -0.335938 0.8125 0.313793\nv -0.293037 0.8125 0.3125\nv -0.296875 0.819206 0.3125\nv -0.337065 0.820312 0.3125\nv -0.297533 0.820312 0.3125\nv -0.296875 0.820312 0.31435\nv -0.338021 0.828125 0.3125\nv -0.335938 0.83396 0.3125\nv -0.301437 0.828125 0.3125\nv -0.304688 0.834472 0.3125\nv -0.333676 0.835938 0.3125\nv -0.335938 0.835938 0.314343\nv -0.328125 0.838118 0.3125\nv -0.320312 0.842231 0.3125\nv -0.305514 0.835938 0.3125\nv -0.304688 0.835938 0.314022\nv -0.316073 0.84375 0.3125\nv -0.320312 0.84375 0.314097\nv -0.311071 0.84375 0.3125\nv -0.3125 0.845092 0.3125\nv -0.304688 0.84375 0.319027\nv -0.3125 0.851562 0.318963\nv -0.3125 -0.727998 0.320312\nv -0.304688 -0.729388 0.320312\nv -0.296875 -0.73024 0.320312\nv -0.289062 -0.730916 0.320312\nv -0.28125 -0.731161 0.320312\nv -0.273438 -0.730725 0.320312\nv -0.265625 -0.729806 0.320312\nv -0.257812 -0.727828 0.320312\nv 0.414062 -0.729589 0.320312\nv 0.421875 -0.731819 0.320312\nv 0.429688 -0.732447 0.320312\nv 0.429688 -0.734375 0.326881\nv 0.4375 -0.731944 0.320312\nv 0.445312 -0.7307 0.320312\nv 0.453125 -0.728905 0.320312\nv 0.460938 -0.726707 0.320312\nv -0.328125 -0.72159 0.320312\nv -0.317971 -0.726562 0.320312\nv -0.320312 -0.725506 0.320312\nv -0.320312 -0.726562 0.322432\nv -0.255133 -0.726562 0.320312\nv -0.25 -0.726562 0.325907\nv 0.409878 -0.726562 0.320312\nv 0.40625 -0.721994 0.320312\nv 0.40625 -0.726562 0.323859\nv 0.461434 -0.726562 0.320312\nv 0.46875 -0.723271 0.320312\nv 0.46875 -0.726562 0.322901\nv 0.476562 -0.720007 0.320312\nv 0.476562 -0.726562 0.326875\nv -0.332036 -0.71875 0.320312\nv -0.335938 -0.714516 0.320312\nv -0.335938 -0.71875 0.326063\nv -0.25033 -0.71875 0.320312\nv -0.25 -0.7181 0.320312\nv -0.25 -0.71875 0.320653\nv 0.4044 -0.71875 0.320312\nv 0.480567 -0.71875 0.320312\nv 0.484375 -0.716865 0.320312\nv 0.484375 -0.71875 0.321397\nv 0.492188 -0.713271 0.320312\nv 0.492188 -0.71875 0.324017\nv -0.337487 -0.710938 0.320312\nv -0.246815 -0.710938 0.320312\nv -0.242188 -0.710938 0.327282\nv 0.399338 -0.710938 0.320312\nv 0.398438 -0.709035 0.320312\nv 0.398438 -0.710938 0.3217\nv 0.494543 -0.710938 0.320312\nv 0.5 -0.710938 0.325127\nv -0.338815 -0.703125 0.320312\nv -0.242997 -0.703125 0.320312\nv -0.242188 -0.701518 0.320312\nv -0.242188 -0.703125 0.321484\nv 0.396312 -0.703125 0.320312\nv 0.497212 -0.703125 0.320312\nv 0.5 -0.703125 0.322807\nv -0.339284 -0.695312 0.320312\nv -0.239541 -0.695312 0.320312\nv 0.394466 -0.695312 0.320312\nv 0.390625 -0.695312 0.326618\nv 0.496956 -0.695312 0.320312\nv 0.5 -0.695312 0.323577\nv -0.338947 -0.6875 0.320312\nv -0.238453 -0.6875 0.320312\nv 0.393995 -0.6875 0.320312\nv 0.390625 -0.6875 0.32612\nv 0.497402 -0.6875 0.320312\nv 0.5 -0.6875 0.32332\nv -0.338269 -0.679688 0.320312\nv -0.237722 -0.679688 0.320312\nv -0.234375 -0.679688 0.326474\nv 0.393703 -0.679688 0.320312\nv 0.390625 -0.679688 0.325814\nv 0.498276 -0.679688 0.320312\nv 0.5 -0.679688 0.322425\nv -0.337515 -0.671875 0.320312\nv -0.236961 -0.671875 0.320312\nv -0.234375 -0.671875 0.324769\nv 0.393465 -0.671875 0.320312\nv 0.390625 -0.671875 0.325613\nv 0.499203 -0.671875 0.320312\nv 0.5 -0.665219 0.320312\nv 0.5 -0.671875 0.321505\nv -0.336845 -0.664062 0.320312\nv -0.236273 -0.664062 0.320312\nv -0.234375 -0.664062 0.32338\nv 0.393249 -0.664062 0.320312\nv 0.390625 -0.664062 0.325462\nv 0.500093 -0.664062 0.320312\nv -0.336271 -0.65625 0.320312\nv -0.335938 -0.653234 0.320312\nv -0.235577 -0.65625 0.320312\nv -0.234375 -0.65625 0.322135\nv 0.39328 -0.65625 0.320312\nv 0.390625 -0.65625 0.325626\nv 0.50035 -0.65625 0.320312\nv -0.335296 -0.648438 0.320312\nv -0.335938 -0.648438 0.323685\nv -0.235043 -0.648438 0.320312\nv -0.234375 -0.648438 0.321227\nv 0.393845 -0.648438 0.320312\nv 0.390625 -0.648438 0.326297\nv 0.500381 -0.648438 0.320312\nv -0.334203 -0.640625 0.320312\nv -0.235263 -0.640625 0.320312\nv -0.234375 -0.640625 0.321287\nv 0.395611 -0.640625 0.320312\nv 0.390625 -0.640625 0.327256\nv 0.500203 -0.640625 0.320312\nv 0.5 -0.635622 0.320312\nv -0.333168 -0.632812 0.320312\nv -0.237054 -0.632812 0.320312\nv -0.234375 -0.632812 0.322692\nv 0.397678 -0.632812 0.320312\nv 0.390625 -0.632812 0.327739\nv 0.398438 -0.629659 0.320312\nv 0.49988 -0.632812 0.320312\nv 0.5 -0.632812 0.320738\nv -0.332086 -0.625 0.320312\nv -0.2389 -0.625 0.320312\nv -0.234375 -0.625 0.323642\nv 0.390625 -0.625 0.328099\nv 0.399818 -0.625 0.320312\nv 0.398438 -0.625 0.321345\nv 0.499559 -0.625 0.320312\nv 0.5 -0.625 0.321832\nv -0.330989 -0.617188 0.320312\nv -0.240706 -0.617188 0.320312\nv -0.242188 -0.610367 0.320312\nv -0.234375 -0.617188 0.324839\nv 0.40199 -0.617188 0.320312\nv 0.398438 -0.617188 0.322955\nv 0.498872 -0.617188 0.320312\nv 0.5 -0.617188 0.323503\nv -0.330279 -0.609375 0.320312\nv -0.24241 -0.609375 0.320312\nv -0.242188 -0.609375 0.320455\nv -0.234375 -0.609375 0.325963\nv 0.403942 -0.609375 0.320312\nv 0.398438 -0.609375 0.324428\nv 0.497469 -0.609375 0.320312\nv 0.5 -0.609375 0.325328\nv -0.330051 -0.601562 0.320312\nv -0.243787 -0.601562 0.320312\nv -0.242188 -0.601562 0.321335\nv -0.234375 -0.601562 0.326926\nv 0.40584 -0.601562 0.320312\nv 0.398438 -0.601562 0.325827\nv 0.40625 -0.595072 0.320312\nv 0.496553 -0.601562 0.320312\nv 0.5 -0.601562 0.326633\nv -0.329826 -0.59375 0.320312\nv -0.244097 -0.59375 0.320312\nv -0.242188 -0.59375 0.321537\nv -0.234375 -0.59375 0.327144\nv 0.398438 -0.59375 0.326274\nv 0.406389 -0.59375 0.320312\nv 0.40625 -0.59375 0.320375\nv 0.495904 -0.59375 0.320312\nv 0.5 -0.59375 0.327929\nv -0.329616 -0.585938 0.320312\nv -0.244239 -0.585938 0.320312\nv -0.242188 -0.585938 0.321635\nv -0.234375 -0.585938 0.327175\nv 0.398438 -0.585938 0.326688\nv 0.407176 -0.585938 0.320312\nv 0.40625 -0.585938 0.32074\nv 0.495245 -0.585938 0.320312\nv -0.329372 -0.578125 0.320312\nv -0.244393 -0.578125 0.320312\nv -0.242188 -0.578125 0.321754\nv -0.234375 -0.578125 0.327285\nv 0.398438 -0.578125 0.326814\nv 0.407144 -0.578125 0.320312\nv 0.40625 -0.578125 0.320743\nv 0.494189 -0.578125 0.320312\nv -0.329077 -0.570312 0.320312\nv -0.244682 -0.570312 0.320312\nv -0.242188 -0.570312 0.321932\nv -0.234375 -0.570312 0.32739\nv 0.398438 -0.570312 0.326803\nv 0.40722 -0.570312 0.320312\nv 0.40625 -0.570312 0.320778\nv 0.493084 -0.570312 0.320312\nv 0.492188 -0.565214 0.320312\nv -0.328788 -0.5625 0.320312\nv -0.243951 -0.5625 0.320312\nv -0.242188 -0.556537 0.320312\nv -0.242188 -0.5625 0.321419\nv -0.234375 -0.5625 0.326767\nv 0.398438 -0.5625 0.32541\nv 0.406418 -0.5625 0.320312\nv 0.40625 -0.561878 0.320312\nv 0.40625 -0.5625 0.320381\nv 0.491405 -0.5625 0.320312\nv 0.492188 -0.5625 0.320882\nv -0.32877 -0.554688 0.320312\nv -0.241389 -0.554688 0.320312\nv -0.234375 -0.549672 0.320312\nv -0.234375 -0.554688 0.324349\nv -0.226562 -0.554688 0.326971\nv -0.0703125 -0.547225 0.320312\nv -0.0625 -0.547764 0.320312\nv -0.0546875 -0.54837 0.320312\nv -0.046875 -0.549037 0.320312\nv -0.0390625 -0.549888 0.320312\nv -0.03125 -0.550974 0.320312\nv -0.0234375 -0.551919 0.320312\nv -0.015625 -0.552752 0.320312\nv -0.0078125 -0.553574 0.320312\nv -0.0078125 -0.554688 0.325067\nv 0 -0.553904 0.320312\nv 0 -0.554688 0.323634\nv 0.0078125 -0.553643 0.320312\nv 0.0078125 -0.554688 0.325181\nv 0.015625 -0.552908 0.320312\nv 0.0234375 -0.552029 0.320312\nv 0.03125 -0.550968 0.320312\nv 0.0390625 -0.549881 0.320312\nv 0.046875 -0.548994 0.320312\nv 0.0546875 -0.547716 0.320312\nv 0.404753 -0.554688 0.320312\nv 0.398438 -0.554688 0.323823\nv 0.490713 -0.554688 0.320312\nv 0.492188 -0.554688 0.321414\nv -0.328799 -0.546875 0.320312\nv -0.227758 -0.546875 0.320312\nv -0.226562 -0.546094 0.320312\nv -0.226562 -0.546875 0.320713\nv -0.21875 -0.542991 0.320312\nv -0.21875 -0.546875 0.322717\nv -0.210938 -0.540964 0.320312\nv -0.210938 -0.546875 0.324554\nv -0.203125 -0.539269 0.320312\nv -0.203125 -0.546875 0.326094\nv -0.195312 -0.546875 0.327685\nv -0.171875 -0.546875 0.328109\nv -0.164062 -0.539565 0.320312\nv -0.164062 -0.546875 0.326788\nv -0.15625 -0.540296 0.320312\nv -0.15625 -0.546875 0.325405\nv -0.148438 -0.541351 0.320312\nv -0.148438 -0.546875 0.324162\nv -0.140625 -0.541749 0.320312\nv -0.140625 -0.546875 0.324712\nv -0.132812 -0.540374 0.320312\nv -0.117188 -0.540599 0.320312\nv -0.109375 -0.542527 0.320312\nv -0.101562 -0.543839 0.320312\nv -0.09375 -0.544931 0.320312\nv -0.0859375 -0.545888 0.320312\nv -0.0772289 -0.546875 0.320312\nv -0.078125 -0.546809 0.320312\nv -0.078125 -0.546875 0.322142\nv 0.0593057 -0.546875 0.320312\nv 0.0625 -0.546116 0.320312\nv 0.0625 -0.546875 0.323833\nv 0.0703125 -0.543717 0.320312\nv 0.078125 -0.541999 0.320312\nv 0.0859375 -0.541141 0.320312\nv 0.09375 -0.54035 0.320312\nv 0.101562 -0.539595 0.320312\nv 0.109375 -0.539112 0.320312\nv 0.132812 -0.539262 0.320312\nv 0.140625 -0.53943 0.320312\nv 0.148438 -0.539333 0.320312\nv 0.179688 -0.53913 0.320312\nv 0.210938 -0.539615 0.320312\nv 0.21875 -0.540074 0.320312\nv 0.226562 -0.540811 0.320312\nv 0.234375 -0.540703 0.320312\nv 0.234375 -0.546875 0.327881\nv 0.242188 -0.540046 0.320312\nv 0.242188 -0.546875 0.328042\nv 0.25 -0.546875 0.328008\nv 0.257812 -0.546875 0.327674\nv 0.265625 -0.546875 0.327598\nv 0.390625 -0.546875 0.326471\nv 0.402696 -0.546875 0.320312\nv 0.398438 -0.546875 0.32258\nv 0.490425 -0.546875 0.320312\nv 0.492188 -0.546875 0.321531\nv -0.328957 -0.539062 0.320312\nv -0.201806 -0.539062 0.320312\nv -0.195312 -0.537548 0.320312\nv -0.195312 -0.539062 0.321075\nv -0.1875 -0.537205 0.320312\nv -0.1875 -0.539062 0.321304\nv -0.179688 -0.536893 0.320312\nv -0.179688 -0.539062 0.321433\nv -0.167997 -0.539062 0.320312\nv -0.171875 -0.537803 0.320312\nv -0.171875 -0.539062 0.320747\nv -0.126649 -0.539062 0.320312\nv -0.123644 -0.539062 0.320312\nv -0.125 -0.538574 0.320312\nv -0.125 -0.539062 0.320788\nv 0.112278 -0.539062 0.320312\nv 0.117188 -0.538976 0.320312\nv 0.117188 -0.539062 0.32048\nv 0.127624 -0.539062 0.320312\nv 0.125 -0.538951 0.320312\nv 0.125 -0.539062 0.320518\nv 0.155463 -0.539062 0.320312\nv 0.15625 -0.53903 0.320312\nv 0.15625 -0.539062 0.320358\nv 0.164062 -0.538869 0.320312\nv 0.164062 -0.539062 0.320557\nv 0.177847 -0.539062 0.320312\nv 0.171875 -0.538794 0.320312\nv 0.171875 -0.539062 0.320637\nv 0.181581 -0.539062 0.320312\nv 0.1875 -0.538783 0.320312\nv 0.1875 -0.539062 0.320615\nv 0.195312 -0.53814 0.320312\nv 0.195312 -0.539062 0.321261\nv 0.206669 -0.539062 0.320312\nv 0.203125 -0.538439 0.320312\nv 0.203125 -0.539062 0.32092\nv 0.247631 -0.539062 0.320312\nv 0.25 -0.538282 0.320312\nv 0.25 -0.539062 0.320707\nv 0.257812 -0.536163 0.320312\nv 0.257812 -0.539062 0.321559\nv 0.265625 -0.534192 0.320312\nv 0.265625 -0.539062 0.322121\nv 0.273438 -0.532205 0.320312\nv 0.273438 -0.539062 0.322964\nv 0.28125 -0.539062 0.324156\nv 0.289062 -0.539062 0.324862\nv 0.296875 -0.539062 0.32545\nv 0.304688 -0.539062 0.326311\nv 0.3125 -0.539062 0.326845\nv 0.320312 -0.539062 0.326727\nv 0.328125 -0.539062 0.326344\nv 0.335938 -0.539062 0.326679\nv 0.34375 -0.539062 0.327512\nv 0.375 -0.539062 0.327711\nv 0.382812 -0.539062 0.326219\nv 0.390625 -0.539062 0.324581\nv 0.400461 -0.539062 0.320312\nv 0.398438 -0.539062 0.321397\nv 0.490261 -0.539062 0.320312\nv 0.492188 -0.539062 0.321568\nv -0.329116 -0.53125 0.320312\nv 0.276344 -0.53125 0.320312\nv 0.28125 -0.527893 0.320312\nv 0.28125 -0.53125 0.320942\nv 0.289062 -0.53125 0.321908\nv 0.296875 -0.53125 0.32248\nv 0.304688 -0.53125 0.322997\nv 0.3125 -0.53125 0.323742\nv 0.320312 -0.53125 0.323333\nv 0.328125 -0.53125 0.323113\nv 0.335938 -0.53125 0.322711\nv 0.34375 -0.53125 0.322999\nv 0.351562 -0.53125 0.323761\nv 0.359375 -0.53125 0.324824\nv 0.367188 -0.53125 0.324517\nv 0.375 -0.53125 0.323983\nv 0.382812 -0.53125 0.323207\nv 0.390625 -0.525912 0.320312\nv 0.390625 -0.53125 0.322003\nv 0.399398 -0.53125 0.320312\nv 0.398438 -0.529197 0.320312\nv 0.398438 -0.53125 0.320773\nv 0.490065 -0.53125 0.320312\nv 0.492188 -0.53125 0.321486\nv -0.329327 -0.523438 0.320312\nv 0.287391 -0.523438 0.320312\nv 0.289062 -0.522356 0.320312\nv 0.289062 -0.523438 0.320534\nv 0.296875 -0.519699 0.320312\nv 0.296875 -0.523438 0.320926\nv 0.304688 -0.517523 0.320312\nv 0.304688 -0.523438 0.321473\nv 0.3125 -0.523438 0.322127\nv 0.320312 -0.516943 0.320312\nv 0.320312 -0.523438 0.321654\nv 0.328125 -0.518401 0.320312\nv 0.328125 -0.523438 0.321172\nv 0.335938 -0.521435 0.320312\nv 0.335938 -0.523438 0.320604\nv 0.34375 -0.523083 0.320312\nv 0.34375 -0.523438 0.320373\nv 0.351562 -0.522428 0.320312\nv 0.351562 -0.523438 0.320564\nv 0.359375 -0.520722 0.320312\nv 0.359375 -0.523438 0.321195\nv 0.367188 -0.520395 0.320312\nv 0.367188 -0.523438 0.321296\nv 0.375 -0.52192 0.320312\nv 0.375 -0.523438 0.320957\nv 0.382998 -0.523438 0.320312\nv 0.382812 -0.523397 0.320312\nv 0.382812 -0.523438 0.32033\nv 0.48956 -0.523438 0.320312\nv 0.492188 -0.523438 0.321619\nv -0.329425 -0.515625 0.320312\nv 0.311207 -0.515625 0.320312\nv 0.314326 -0.515625 0.320312\nv 0.3125 -0.514222 0.320312\nv 0.3125 -0.515625 0.320398\nv 0.489957 -0.515625 0.320312\nv 0.492188 -0.515625 0.321602\nv -0.329529 -0.507812 0.320312\nv -0.1875 -0.501345 0.320312\nv -0.179688 -0.503177 0.320312\nv -0.171875 -0.50383 0.320312\nv -0.164062 -0.503134 0.320312\nv -0.15625 -0.502504 0.320312\nv -0.148438 -0.501799 0.320312\nv -0.140625 -0.501316 0.320312\nv -0.132812 -0.501242 0.320312\nv -0.125 -0.501516 0.320312\nv 0.289062 -0.500072 0.320312\nv 0.296875 -0.503444 0.320312\nv 0.304688 -0.505368 0.320312\nv 0.3125 -0.506526 0.320312\nv 0.320312 -0.505238 0.320312\nv 0.328125 -0.504767 0.320312\nv 0.335938 -0.503926 0.320312\nv 0.34375 -0.502049 0.320312\nv 0.351562 -0.50051 0.320312\nv 0.490677 -0.507812 0.320312\nv 0.492188 -0.507812 0.321188\nv -0.329805 -0.5 0.320312\nv -0.210938 -0.492673 0.320312\nv -0.203125 -0.497096 0.320312\nv -0.194108 -0.5 0.320312\nv -0.195312 -0.499729 0.320312\nv -0.1875 -0.5 0.321056\nv -0.179688 -0.5 0.322104\nv -0.171875 -0.5 0.322412\nv -0.164062 -0.5 0.322164\nv -0.15625 -0.5 0.321911\nv -0.148438 -0.5 0.321544\nv -0.140625 -0.5 0.321233\nv -0.132812 -0.5 0.321524\nv -0.120317 -0.5 0.320312\nv -0.125 -0.5 0.322038\nv -0.117188 -0.498954 0.320312\nv -0.109375 -0.496051 0.320312\nv -0.101562 -0.493341 0.320312\nv 0.265625 -0.492829 0.320312\nv 0.273438 -0.495419 0.320312\nv 0.288875 -0.5 0.320312\nv 0.28125 -0.497558 0.320312\nv 0.289062 -0.5 0.320334\nv 0.296875 -0.5 0.321291\nv 0.304688 -0.5 0.321956\nv 0.3125 -0.5 0.322599\nv 0.320312 -0.5 0.322153\nv 0.328125 -0.5 0.321807\nv 0.335938 -0.5 0.321504\nv 0.34375 -0.5 0.320889\nv 0.358898 -0.5 0.320312\nv 0.351562 -0.5 0.320433\nv 0.359375 -0.499975 0.320312\nv 0.367188 -0.497623 0.320312\nv 0.375 -0.495084 0.320312\nv 0.382812 -0.49252 0.320312\nv 0.490809 -0.5 0.320312\nv 0.492188 -0.5 0.321082\nv -0.329934 -0.492188 0.320312\nv -0.226562 -0.486624 0.320312\nv -0.212005 -0.492188 0.320312\nv -0.21875 -0.488647 0.320312\nv -0.210938 -0.492188 0.320579\nv -0.203125 -0.492188 0.322603\nv -0.195312 -0.492188 0.324057\nv -0.1875 -0.492188 0.324976\nv -0.179688 -0.492188 0.326183\nv -0.171875 -0.492188 0.326464\nv -0.164062 -0.492188 0.326552\nv -0.15625 -0.492188 0.326523\nv -0.148438 -0.492188 0.326459\nv -0.140625 -0.492188 0.327112\nv -0.109375 -0.492188 0.325946\nv -0.0981306 -0.492188 0.320312\nv -0.101562 -0.492188 0.321918\nv -0.09375 -0.490884 0.320312\nv -0.0859375 -0.488561 0.320312\nv -0.078125 -0.486461 0.320312\nv -0.0703125 -0.48468 0.320312\nv 0.25 -0.485284 0.320312\nv 0.264201 -0.492188 0.320312\nv 0.257812 -0.488952 0.320312\nv 0.265625 -0.492188 0.320549\nv 0.273438 -0.492188 0.321549\nv 0.28125 -0.492188 0.322397\nv 0.289062 -0.492188 0.323195\nv 0.296875 -0.492188 0.324106\nv 0.304688 -0.492188 0.325089\nv 0.3125 -0.492188 0.326349\nv 0.320312 -0.492188 0.325501\nv 0.328125 -0.492188 0.324927\nv 0.335938 -0.492188 0.324466\nv 0.34375 -0.492188 0.323771\nv 0.351562 -0.492188 0.323118\nv 0.359375 -0.492188 0.322877\nv 0.367188 -0.492188 0.321986\nv 0.375 -0.492188 0.321294\nv 0.383545 -0.492188 0.320312\nv 0.382812 -0.492188 0.320427\nv 0.390625 -0.485811 0.320312\nv 0.492125 -0.492188 0.320312\nv 0.492188 -0.491881 0.320312\nv 0.492188 -0.492188 0.320341\nv -0.330048 -0.484375 0.320312\nv -0.23043 -0.484375 0.320312\nv -0.234375 -0.480349 0.320312\nv -0.226562 -0.484375 0.321366\nv -0.21875 -0.484375 0.322621\nv -0.210938 -0.484375 0.3243\nv -0.203125 -0.484375 0.326151\nv -0.195312 -0.484375 0.327954\nv -0.078125 -0.484375 0.323925\nv -0.0691761 -0.484375 0.320312\nv -0.0703125 -0.484375 0.320728\nv -0.0625 -0.482891 0.320312\nv -0.0546875 -0.481015 0.320312\nv -0.046875 -0.479189 0.320312\nv -0.0390625 -0.477435 0.320312\nv 0.21875 -0.476674 0.320312\nv 0.226562 -0.477535 0.320312\nv 0.234375 -0.478537 0.320312\nv 0.24834 -0.484375 0.320312\nv 0.242188 -0.481173 0.320312\nv 0.25 -0.484375 0.320835\nv 0.257812 -0.484375 0.322626\nv 0.265625 -0.484375 0.323703\nv 0.273438 -0.484375 0.324457\nv 0.28125 -0.484375 0.325473\nv 0.289062 -0.484375 0.326462\nv 0.296875 -0.484375 0.327417\nv 0.34375 -0.484375 0.327649\nv 0.351562 -0.484375 0.326584\nv 0.359375 -0.484375 0.325749\nv 0.367188 -0.484375 0.324849\nv 0.375 -0.484375 0.324353\nv 0.382812 -0.484375 0.322935\nv 0.391498 -0.484375 0.320312\nv 0.390625 -0.484375 0.320579\nv 0.492965 -0.484375 0.320312\nv -0.330186 -0.476562 0.320312\nv -0.235798 -0.476562 0.320312\nv -0.234375 -0.476562 0.321194\nv -0.226562 -0.476562 0.324801\nv -0.21875 -0.476562 0.32669\nv -0.210938 -0.476562 0.328\nv -0.046875 -0.476562 0.324567\nv -0.0351389 -0.476562 0.320312\nv -0.0390625 -0.476562 0.321603\nv -0.03125 -0.47572 0.320312\nv -0.0234375 -0.473894 0.320312\nv -0.015625 -0.472009 0.320312\nv -0.0078125 -0.470336 0.320312\nv 0 -0.46904 0.320312\nv 0.046875 -0.468756 0.320312\nv 0.0546875 -0.468958 0.320312\nv 0.078125 -0.468858 0.320312\nv 0.0859375 -0.469209 0.320312\nv 0.09375 -0.469224 0.320312\nv 0.101562 -0.469633 0.320312\nv 0.109375 -0.470144 0.320312\nv 0.117188 -0.470559 0.320312\nv 0.125 -0.471058 0.320312\nv 0.132812 -0.471859 0.320312\nv 0.140625 -0.472913 0.320312\nv 0.148438 -0.474074 0.320312\nv 0.15625 -0.47501 0.320312\nv 0.164062 -0.475704 0.320312\nv 0.171875 -0.476043 0.320312\nv 0.179688 -0.476255 0.320312\nv 0.1875 -0.476462 0.320312\nv 0.195312 -0.476551 0.320312\nv 0.203125 -0.476451 0.320312\nv 0.215886 -0.476562 0.320312\nv 0.210938 -0.4764 0.320312\nv 0.21875 -0.476562 0.320465\nv 0.226562 -0.476562 0.321559\nv 0.234375 -0.476562 0.322872\nv 0.242188 -0.476562 0.324869\nv 0.25 -0.476562 0.326964\nv 0.375 -0.476562 0.326789\nv 0.382812 -0.476562 0.324328\nv 0.394568 -0.476562 0.320312\nv 0.390625 -0.476562 0.321684\nv 0.494437 -0.476562 0.320312\nv -0.330292 -0.46875 0.320312\nv -0.238239 -0.46875 0.320312\nv -0.234375 -0.46875 0.322675\nv -0.226562 -0.46875 0.326767\nv -0.015625 -0.46875 0.325244\nv -0.0078125 -0.46875 0.3228\nv 0.00395632 -0.46875 0.320312\nv 0 -0.46875 0.320779\nv 0.0078125 -0.46855 0.320312\nv 0.015625 -0.468251 0.320312\nv 0.0234375 -0.46811 0.320312\nv 0.03125 -0.468269 0.320312\nv 0.0467365 -0.46875 0.320312\nv 0.0390625 -0.468476 0.320312\nv 0.046875 -0.46875 0.320324\nv 0.0598001 -0.46875 0.320312\nv 0.0546875 -0.46875 0.320667\nv 0.0625 -0.468667 0.320312\nv 0.0752638 -0.46875 0.320312\nv 0.0703125 -0.468611 0.320312\nv 0.078125 -0.46875 0.320507\nv 0.0859375 -0.46875 0.321148\nv 0.09375 -0.46875 0.321174\nv 0.101562 -0.46875 0.321887\nv 0.109375 -0.46875 0.322819\nv 0.117188 -0.46875 0.323614\nv 0.125 -0.46875 0.32472\nv 0.132812 -0.46875 0.326574\nv 0.382812 -0.46875 0.325747\nv 0.396421 -0.46875 0.320312\nv 0.390625 -0.46875 0.322699\nv 0.495426 -0.46875 0.320312\nv 0.5 -0.46875 0.328121\nv -0.330433 -0.460938 0.320312\nv -0.239401 -0.460938 0.320312\nv -0.234375 -0.460938 0.323519\nv 0.397674 -0.460938 0.320312\nv 0.390625 -0.460938 0.324065\nv 0.495336 -0.460938 0.320312\nv -0.330485 -0.453125 0.320312\nv -0.239051 -0.453125 0.320312\nv -0.234375 -0.453125 0.323549\nv 0.398316 -0.453125 0.320312\nv 0.390625 -0.453125 0.326005\nv 0.398438 -0.452339 0.320312\nv 0.494264 -0.453125 0.320312\nv -0.330442 -0.445312 0.320312\nv -0.238048 -0.445312 0.320312\nv -0.234375 -0.445312 0.322828\nv 0.390625 -0.445312 0.327076\nv 0.399506 -0.445312 0.320312\nv 0.398438 -0.445312 0.32104\nv 0.492815 -0.445312 0.320312\nv 0.5 -0.445312 0.327922\nv -0.330334 -0.4375 0.320312\nv -0.236933 -0.4375 0.320312\nv -0.234375 -0.4375 0.322062\nv -0.226562 -0.4375 0.327523\nv 0.390625 -0.4375 0.327765\nv 0.400106 -0.4375 0.320312\nv 0.398438 -0.4375 0.32151\nv 0.492569 -0.4375 0.320312\nv 0.5 -0.4375 0.327355\nv -0.330183 -0.429688 0.320312\nv -0.23657 -0.429688 0.320312\nv -0.234375 -0.429688 0.321856\nv -0.226562 -0.429688 0.327629\nv 0.400587 -0.429688 0.320312\nv 0.398438 -0.429688 0.321978\nv 0.492441 -0.429688 0.320312\nv 0.5 -0.429688 0.326903\nv -0.32989 -0.421875 0.320312\nv -0.236497 -0.421875 0.320312\nv -0.234375 -0.421875 0.321792\nv -0.226562 -0.421875 0.327604\nv 0.402027 -0.421875 0.320312\nv 0.398438 -0.421875 0.323406\nv 0.492636 -0.421875 0.320312\nv 0.5 -0.421875 0.326421\nv -0.329388 -0.414062 0.320312\nv -0.236016 -0.414062 0.320312\nv -0.234375 -0.414062 0.321349\nv -0.226562 -0.414062 0.32725\nv 0.403848 -0.414062 0.320312\nv 0.398438 -0.414062 0.324648\nv 0.493324 -0.414062 0.320312\nv 0.5 -0.414062 0.326021\nv -0.328705 -0.40625 0.320312\nv -0.328125 -0.399648 0.320312\nv -0.234961 -0.40625 0.320312\nv -0.234375 -0.403978 0.320312\nv -0.234375 -0.40625 0.320652\nv -0.226562 -0.40625 0.326691\nv 0.404739 -0.40625 0.320312\nv 0.398438 -0.40625 0.325136\nv 0.493835 -0.40625 0.320312\nv 0.5 -0.40625 0.325891\nv -0.327984 -0.398438 0.320312\nv -0.328125 -0.398438 0.321099\nv -0.233256 -0.398438 0.320312\nv -0.226562 -0.398438 0.326262\nv 0.403809 -0.398438 0.320312\nv 0.398438 -0.398438 0.324505\nv 0.494413 -0.398438 0.320312\nv 0.5 -0.398438 0.32539\nv -0.327146 -0.390625 0.320312\nv -0.328125 -0.390625 0.325233\nv -0.231323 -0.390625 0.320312\nv -0.226562 -0.390625 0.325312\nv 0.402575 -0.390625 0.320312\nv 0.398438 -0.390625 0.323888\nv 0.495071 -0.390625 0.320312\nv 0.5 -0.390625 0.324869\nv -0.326347 -0.382812 0.320312\nv -0.229097 -0.382812 0.320312\nv -0.226562 -0.382812 0.323778\nv 0.401073 -0.382812 0.320312\nv 0.398438 -0.382812 0.322734\nv 0.49569 -0.382812 0.320312\nv 0.5 -0.382812 0.324508\nv -0.325438 -0.375 0.320312\nv -0.227137 -0.375 0.320312\nv -0.226562 -0.375 0.321351\nv 0.399283 -0.375 0.320312\nv 0.398438 -0.371423 0.320312\nv 0.398438 -0.375 0.321171\nv 0.496013 -0.375 0.320312\nv 0.5 -0.375 0.324523\nv -0.324462 -0.367188 0.320312\nv -0.226691 -0.367188 0.320312\nv -0.226562 -0.364899 0.320312\nv -0.226562 -0.367188 0.32054\nv 0.397615 -0.367188 0.320312\nv 0.496402 -0.367188 0.320312\nv 0.5 -0.367188 0.324684\nv -0.323478 -0.359375 0.320312\nv -0.22628 -0.359375 0.320312\nv 0.396675 -0.359375 0.320312\nv 0.496948 -0.359375 0.320312\nv 0.5 -0.359375 0.324499\nv -0.322366 -0.351562 0.320312\nv -0.226074 -0.351562 0.320312\nv 0.395769 -0.351562 0.320312\nv 0.497399 -0.351562 0.320312\nv 0.5 -0.351562 0.324252\nv -0.32137 -0.34375 0.320312\nv -0.225984 -0.34375 0.320312\nv 0.395153 -0.34375 0.320312\nv 0.497783 -0.34375 0.320312\nv 0.5 -0.34375 0.323905\nv -0.320428 -0.335938 0.320312\nv -0.320312 -0.334441 0.320312\nv -0.225848 -0.335938 0.320312\nv 0.394619 -0.335938 0.320312\nv 0.498134 -0.335938 0.320312\nv 0.5 -0.335938 0.323276\nv -0.319766 -0.328125 0.320312\nv -0.320312 -0.328125 0.322133\nv -0.225796 -0.328125 0.320312\nv 0.394367 -0.328125 0.320312\nv 0.390625 -0.328125 0.327711\nv 0.498422 -0.328125 0.320312\nv 0.5 -0.328125 0.32278\nv -0.319222 -0.320312 0.320312\nv -0.320312 -0.320312 0.323753\nv -0.225596 -0.320312 0.320312\nv 0.394213 -0.320312 0.320312\nv 0.390625 -0.320312 0.327243\nv 0.498248 -0.320312 0.320312\nv 0.5 -0.320312 0.323076\nv -0.318815 -0.3125 0.320312\nv -0.320312 -0.3125 0.324996\nv -0.225365 -0.3125 0.320312\nv 0.394227 -0.3125 0.320312\nv 0.498338 -0.3125 0.320312\nv 0.5 -0.3125 0.322956\nv -0.318433 -0.304688 0.320312\nv -0.320312 -0.304688 0.326454\nv -0.225246 -0.304688 0.320312\nv 0.394474 -0.304688 0.320312\nv 0.498535 -0.304688 0.320312\nv 0.5 -0.304688 0.322716\nv -0.318013 -0.296875 0.320312\nv -0.225143 -0.296875 0.320312\nv 0.394442 -0.296875 0.320312\nv 0.498742 -0.296875 0.320312\nv 0.5 -0.296875 0.322566\nv -0.317594 -0.289062 0.320312\nv -0.224997 -0.289062 0.320312\nv 0.394493 -0.289062 0.320312\nv 0.498745 -0.289062 0.320312\nv 0.5 -0.289062 0.32263\nv -0.317247 -0.28125 0.320312\nv -0.224995 -0.28125 0.320312\nv 0.395017 -0.28125 0.320312\nv 0.498687 -0.28125 0.320312\nv 0.5 -0.28125 0.322916\nv -0.316844 -0.273438 0.320312\nv -0.225329 -0.273438 0.320312\nv 0.394956 -0.273438 0.320312\nv 0.498582 -0.273438 0.320312\nv 0.5 -0.273438 0.323332\nv -0.316377 -0.265625 0.320312\nv -0.225598 -0.265625 0.320312\nv 0.394954 -0.265625 0.320312\nv 0.498577 -0.265625 0.320312\nv 0.5 -0.265625 0.323593\nv -0.315973 -0.257812 0.320312\nv -0.225345 -0.257812 0.320312\nv 0.395414 -0.257812 0.320312\nv 0.498972 -0.257812 0.320312\nv 0.5 -0.257812 0.322954\nv -0.315524 -0.25 0.320312\nv -0.22479 -0.25 0.320312\nv 0.395833 -0.25 0.320312\nv 0.499379 -0.25 0.320312\nv 0.5 -0.25 0.321973\nv -0.315 -0.242188 0.320312\nv -0.224305 -0.242188 0.320312\nv 0.396171 -0.242188 0.320312\nv 0.4998 -0.242188 0.320312\nv 0.5 -0.237577 0.320312\nv 0.5 -0.242188 0.320902\nv -0.314797 -0.234375 0.320312\nv -0.223662 -0.234375 0.320312\nv 0.396713 -0.234375 0.320312\nv 0.500108 -0.234375 0.320312\nv -0.314694 -0.226562 0.320312\nv -0.223361 -0.226562 0.320312\nv 0.397452 -0.226562 0.320312\nv 0.500394 -0.226562 0.320312\nv -0.314526 -0.21875 0.320312\nv -0.223176 -0.21875 0.320312\nv 0.398066 -0.21875 0.320312\nv 0.398438 -0.212587 0.320312\nv 0.500623 -0.21875 0.320312\nv -0.31435 -0.210938 0.320312\nv -0.22297 -0.210938 0.320312\nv 0.39857 -0.210938 0.320312\nv 0.398438 -0.210938 0.320655\nv 0.500722 -0.210938 0.320312\nv -0.313872 -0.203125 0.320312\nv -0.222885 -0.203125 0.320312\nv 0.399039 -0.203125 0.320312\nv 0.398438 -0.203125 0.321833\nv 0.500716 -0.203125 0.320312\nv -0.312929 -0.195312 0.320312\nv -0.3125 -0.189539 0.320312\nv -0.222936 -0.195312 0.320312\nv 0.399677 -0.195312 0.320312\nv 0.398438 -0.195312 0.32336\nv 0.50055 -0.195312 0.320312\nv -0.312325 -0.1875 0.320312\nv -0.3125 -0.1875 0.321027\nv -0.222946 -0.1875 0.320312\nv 0.399666 -0.1875 0.320312\nv 0.398438 -0.1875 0.323342\nv 0.500245 -0.1875 0.320312\nv 0.5 -0.182732 0.320312\nv -0.311728 -0.179688 0.320312\nv -0.3125 -0.179688 0.323213\nv -0.223268 -0.179688 0.320312\nv 0.399253 -0.179688 0.320312\nv 0.398438 -0.179688 0.322571\nv 0.499842 -0.179688 0.320312\nv 0.5 -0.179688 0.321209\nv -0.310849 -0.171875 0.320312\nv -0.3125 -0.171875 0.325937\nv -0.224007 -0.171875 0.320312\nv 0.398827 -0.171875 0.320312\nv 0.398438 -0.171875 0.321479\nv 0.499832 -0.171875 0.320312\nv 0.5 -0.166095 0.320312\nv 0.5 -0.171875 0.321461\nv -0.309654 -0.164062 0.320312\nv -0.3125 -0.164062 0.328081\nv -0.224684 -0.164062 0.320312\nv 0.398854 -0.164062 0.320312\nv 0.398438 -0.164062 0.321498\nv 0.500053 -0.164062 0.320312\nv 0.5 -0.162946 0.320312\nv -0.308185 -0.15625 0.320312\nv -0.225592 -0.15625 0.320312\nv -0.226562 -0.14986 0.320312\nv 0.399041 -0.15625 0.320312\nv 0.398438 -0.15625 0.321635\nv 0.499627 -0.15625 0.320312\nv 0.5 -0.15625 0.322608\nv -0.306748 -0.148438 0.320312\nv -0.2269 -0.148438 0.320312\nv -0.226562 -0.148438 0.320655\nv 0.399552 -0.148438 0.320312\nv 0.398438 -0.148438 0.322062\nv 0.498743 -0.148438 0.320312\nv 0.5 -0.148438 0.325855\nv -0.305767 -0.140625 0.320312\nv -0.228481 -0.140625 0.320312\nv -0.226562 -0.140625 0.32227\nv 0.399914 -0.140625 0.320312\nv 0.398438 -0.140625 0.321888\nv 0.49791 -0.140625 0.320312\nv -0.305358 -0.132812 0.320312\nv -0.230249 -0.132812 0.320312\nv -0.226562 -0.132812 0.323906\nv 0.400587 -0.132812 0.320312\nv 0.398438 -0.132812 0.322083\nv 0.497039 -0.132812 0.320312\nv -0.305352 -0.125 0.320312\nv -0.23214 -0.125 0.320312\nv -0.234375 -0.118409 0.320312\nv -0.226562 -0.125 0.325165\nv 0.401148 -0.125 0.320312\nv 0.398438 -0.125 0.322274\nv 0.496296 -0.125 0.320312\nv -0.305458 -0.117188 0.320312\nv -0.234897 -0.117188 0.320312\nv -0.234375 -0.117188 0.320601\nv -0.226562 -0.117188 0.32674\nv 0.401574 -0.117188 0.320312\nv 0.398438 -0.117188 0.322466\nv 0.495803 -0.117188 0.320312\nv -0.305502 -0.109375 0.320312\nv -0.238097 -0.109375 0.320312\nv -0.234375 -0.109375 0.322525\nv 0.401791 -0.109375 0.320312\nv 0.398438 -0.109375 0.322459\nv 0.496094 -0.109375 0.320312\nv -0.305496 -0.101562 0.320312\nv -0.2409 -0.101562 0.320312\nv -0.242188 -0.0967009 0.320312\nv -0.234375 -0.101562 0.324335\nv 0.401956 -0.101562 0.320312\nv 0.398438 -0.101562 0.322574\nv 0.497106 -0.101562 0.320312\nv -0.306395 -0.09375 0.320312\nv -0.243084 -0.09375 0.320312\nv -0.242188 -0.09375 0.320756\nv -0.234375 -0.09375 0.325213\nv 0.401343 -0.09375 0.320312\nv 0.398438 -0.09375 0.322113\nv 0.498688 -0.09375 0.320312\nv 0.5 -0.0869754 0.320312\nv -0.307379 -0.0859375 0.320312\nv -0.243934 -0.0859375 0.320312\nv -0.242188 -0.0859375 0.321189\nv -0.234375 -0.0859375 0.325542\nv 0.401275 -0.0859375 0.320312\nv 0.398438 -0.0859375 0.321968\nv 0.500151 -0.0859375 0.320312\nv -0.308161 -0.078125 0.320312\nv -0.243961 -0.078125 0.320312\nv -0.242188 -0.0729984 0.320312\nv -0.242188 -0.078125 0.321347\nv -0.234375 -0.078125 0.324957\nv 0.390625 -0.078125 0.327636\nv 0.400305 -0.078125 0.320312\nv 0.398438 -0.078125 0.321342\nv 0.50115 -0.078125 0.320312\nv -0.308938 -0.0703125 0.320312\nv -0.240827 -0.0703125 0.320312\nv -0.234375 -0.0703125 0.323479\nv -0.226562 -0.0703125 0.326742\nv 0.390625 -0.0703125 0.325807\nv 0.399161 -0.0703125 0.320312\nv 0.398438 -0.0688213 0.320312\nv 0.398438 -0.0703125 0.32074\nv 0.502735 -0.0703125 0.320312\nv -0.309241 -0.0625 0.320312\nv -0.237289 -0.0625 0.320312\nv -0.234375 -0.0625 0.321831\nv -0.226562 -0.0625 0.325192\nv 0.395289 -0.0625 0.320312\nv 0.390625 -0.0625 0.323089\nv 0.50408 -0.0625 0.320312\nv -0.3093 -0.0546875 0.320312\nv -0.236493 -0.0546875 0.320312\nv -0.234375 -0.0546875 0.321464\nv -0.226562 -0.0546875 0.325198\nv -0.21875 -0.0546875 0.327921\nv -0.015625 -0.0546875 0.3278\nv -0.0078125 -0.0546875 0.327245\nv 0 -0.0546875 0.327099\nv 0.0078125 -0.0546875 0.32743\nv 0.015625 -0.0546875 0.327907\nv 0.0234375 -0.0546875 0.32795\nv 0.03125 -0.0546875 0.3279\nv 0.0390625 -0.0546875 0.327908\nv 0.046875 -0.0546875 0.328018\nv 0.0546875 -0.0546875 0.328085\nv 0.0625 -0.0546875 0.328092\nv 0.0703125 -0.0546875 0.328078\nv 0.078125 -0.0546875 0.328065\nv 0.382812 -0.0546875 0.327917\nv 0.396375 -0.0546875 0.320312\nv 0.390625 -0.0546875 0.323627\nv 0.504302 -0.0546875 0.320312\nv -0.309088 -0.046875 0.320312\nv -0.236385 -0.046875 0.320312\nv -0.234375 -0.0407244 0.320312\nv -0.234375 -0.046875 0.321438\nv -0.226562 -0.046875 0.324583\nv -0.21875 -0.046875 0.327362\nv -0.210938 -0.046875 0.327765\nv -0.03125 -0.046875 0.327794\nv -0.0234375 -0.046875 0.327216\nv -0.015625 -0.046875 0.326745\nv -0.0078125 -0.046875 0.326224\nv 0 -0.046875 0.326144\nv 0.0078125 -0.046875 0.326468\nv 0.015625 -0.046875 0.326799\nv 0.0234375 -0.046875 0.326743\nv 0.03125 -0.046875 0.326614\nv 0.0390625 -0.046875 0.326593\nv 0.046875 -0.046875 0.326628\nv 0.0546875 -0.046875 0.326621\nv 0.0625 -0.046875 0.326622\nv 0.0703125 -0.046875 0.3266\nv 0.078125 -0.046875 0.326572\nv 0.0859375 -0.046875 0.326722\nv 0.09375 -0.046875 0.326746\nv 0.101562 -0.046875 0.326728\nv 0.109375 -0.046875 0.326837\nv 0.117188 -0.046875 0.326944\nv 0.125 -0.046875 0.32701\nv 0.132812 -0.046875 0.327213\nv 0.140625 -0.046875 0.327366\nv 0.148438 -0.046875 0.327592\nv 0.15625 -0.046875 0.327807\nv 0.164062 -0.046875 0.32802\nv 0.382812 -0.046875 0.327214\nv 0.39728 -0.046875 0.320312\nv 0.390625 -0.046875 0.323684\nv 0.504989 -0.046875 0.320312\nv -0.308815 -0.0390625 0.320312\nv -0.233264 -0.0390625 0.320312\nv -0.226562 -0.0390625 0.322685\nv -0.21875 -0.0390625 0.325744\nv -0.210938 -0.0390625 0.326383\nv -0.203125 -0.0390625 0.326962\nv -0.195312 -0.0390625 0.32774\nv -0.1875 -0.0390625 0.32764\nv -0.179688 -0.0390625 0.32764\nv -0.171875 -0.0390625 0.327682\nv -0.164062 -0.0390625 0.327703\nv -0.0546875 -0.0390625 0.32803\nv -0.046875 -0.0390625 0.327837\nv -0.0390625 -0.0390625 0.327587\nv -0.03125 -0.0390625 0.327194\nv -0.0234375 -0.0390625 0.326767\nv -0.015625 -0.0390625 0.326307\nv -0.0078125 -0.0390625 0.325809\nv 0 -0.0390625 0.325701\nv 0.0078125 -0.0390625 0.325975\nv 0.015625 -0.0390625 0.32629\nv 0.0234375 -0.0390625 0.326241\nv 0.03125 -0.0390625 0.326133\nv 0.0390625 -0.0390625 0.326105\nv 0.046875 -0.0390625 0.32609\nv 0.0546875 -0.0390625 0.326047\nv 0.0625 -0.0390625 0.326029\nv 0.0703125 -0.0390625 0.325978\nv 0.078125 -0.0390625 0.325925\nv 0.0859375 -0.0390625 0.326081\nv 0.09375 -0.0390625 0.326108\nv 0.101562 -0.0390625 0.326129\nv 0.109375 -0.0390625 0.326218\nv 0.117188 -0.0390625 0.326313\nv 0.125 -0.0390625 0.326408\nv 0.132812 -0.0390625 0.326543\nv 0.140625 -0.0390625 0.326665\nv 0.148438 -0.0390625 0.326863\nv 0.15625 -0.0390625 0.327053\nv 0.164062 -0.0390625 0.327234\nv 0.171875 -0.0390625 0.327299\nv 0.179688 -0.0390625 0.32732\nv 0.1875 -0.0390625 0.327366\nv 0.195312 -0.0390625 0.32744\nv 0.203125 -0.0390625 0.327566\nv 0.210938 -0.0390625 0.327717\nv 0.21875 -0.0390625 0.328006\nv 0.375 -0.0390625 0.328038\nv 0.382812 -0.0390625 0.325804\nv 0.39706 -0.0390625 0.320312\nv 0.390625 -0.0390625 0.323048\nv 0.504839 -0.0390625 0.320312\nv -0.30855 -0.03125 0.320312\nv -0.228795 -0.03125 0.320312\nv -0.226562 -0.03125 0.321374\nv -0.21875 -0.03125 0.324244\nv -0.210938 -0.03125 0.325673\nv -0.203125 -0.03125 0.326288\nv -0.195312 -0.03125 0.326932\nv -0.1875 -0.03125 0.326889\nv -0.179688 -0.03125 0.326987\nv -0.171875 -0.03125 0.327113\nv -0.164062 -0.03125 0.327301\nv -0.15625 -0.03125 0.327754\nv -0.0625 -0.03125 0.328\nv -0.0546875 -0.03125 0.327749\nv -0.046875 -0.03125 0.327425\nv -0.0390625 -0.03125 0.327079\nv -0.03125 -0.03125 0.326603\nv -0.0234375 -0.03125 0.326123\nv -0.015625 -0.03125 0.325574\nv -0.0078125 -0.03125 0.325026\nv 0 -0.03125 0.324898\nv 0.0078125 -0.03125 0.325146\nv 0.015625 -0.03125 0.325437\nv 0.0234375 -0.03125 0.325394\nv 0.03125 -0.03125 0.325359\nv 0.0390625 -0.03125 0.32541\nv 0.046875 -0.03125 0.32547\nv 0.0546875 -0.03125 0.325517\nv 0.0625 -0.03125 0.325546\nv 0.0703125 -0.03125 0.325543\nv 0.078125 -0.03125 0.325518\nv 0.0859375 -0.03125 0.325681\nv 0.09375 -0.03125 0.325708\nv 0.101562 -0.03125 0.32572\nv 0.109375 -0.03125 0.325823\nv 0.117188 -0.03125 0.325953\nv 0.125 -0.03125 0.326122\nv 0.132812 -0.03125 0.326256\nv 0.140625 -0.03125 0.326358\nv 0.148438 -0.03125 0.326539\nv 0.15625 -0.03125 0.32672\nv 0.164062 -0.03125 0.326839\nv 0.171875 -0.03125 0.326889\nv 0.179688 -0.03125 0.326901\nv 0.1875 -0.03125 0.326929\nv 0.195312 -0.03125 0.327006\nv 0.203125 -0.03125 0.327195\nv 0.210938 -0.03125 0.327419\nv 0.21875 -0.03125 0.327872\nv 0.375 -0.03125 0.327347\nv 0.382812 -0.03125 0.325532\nv 0.395797 -0.03125 0.320312\nv 0.390625 -0.03125 0.322314\nv 0.504086 -0.03125 0.320312\nv -0.308501 -0.0234375 0.320312\nv -0.227219 -0.0234375 0.320312\nv -0.226562 -0.0203629 0.320312\nv -0.226562 -0.0234375 0.320621\nv -0.21875 -0.0234375 0.323109\nv -0.210938 -0.0234375 0.324671\nv -0.203125 -0.0234375 0.325462\nv -0.195312 -0.0234375 0.326136\nv -0.1875 -0.0234375 0.326341\nv -0.179688 -0.0234375 0.326541\nv -0.171875 -0.0234375 0.326733\nv -0.164062 -0.0234375 0.326978\nv -0.15625 -0.0234375 0.327469\nv -0.148438 -0.0234375 0.327903\nv -0.140625 -0.0234375 0.328087\nv -0.132812 -0.0234375 0.32802\nv -0.125 -0.0234375 0.328112\nv -0.101562 -0.0234375 0.328039\nv -0.09375 -0.0234375 0.327753\nv -0.0859375 -0.0234375 0.327553\nv -0.078125 -0.0234375 0.327444\nv -0.0703125 -0.0234375 0.327257\nv -0.0625 -0.0234375 0.32706\nv -0.0546875 -0.0234375 0.32676\nv -0.046875 -0.0234375 0.326448\nv -0.0390625 -0.0234375 0.326135\nv -0.03125 -0.0234375 0.325735\nv -0.0234375 -0.0234375 0.325306\nv -0.015625 -0.0234375 0.324779\nv -0.0078125 -0.0234375 0.324241\nv 0 -0.0234375 0.324156\nv 0.0078125 -0.0234375 0.324448\nv 0.015625 -0.0234375 0.324782\nv 0.0234375 -0.0234375 0.324795\nv 0.03125 -0.0234375 0.324804\nv 0.0390625 -0.0234375 0.324866\nv 0.046875 -0.0234375 0.324898\nv 0.0546875 -0.0234375 0.324925\nv 0.0625 -0.0234375 0.324951\nv 0.0703125 -0.0234375 0.324949\nv 0.078125 -0.0234375 0.324908\nv 0.0859375 -0.0234375 0.325131\nv 0.09375 -0.0234375 0.325229\nv 0.101562 -0.0234375 0.325336\nv 0.109375 -0.0234375 0.325491\nv 0.117188 -0.0234375 0.325702\nv 0.125 -0.0234375 0.325881\nv 0.132812 -0.0234375 0.325992\nv 0.140625 -0.0234375 0.32611\nv 0.148438 -0.0234375 0.32626\nv 0.15625 -0.0234375 0.326399\nv 0.164062 -0.0234375 0.326519\nv 0.171875 -0.0234375 0.326557\nv 0.179688 -0.0234375 0.326564\nv 0.1875 -0.0234375 0.326576\nv 0.195312 -0.0234375 0.326683\nv 0.203125 -0.0234375 0.326865\nv 0.210938 -0.0234375 0.327094\nv 0.21875 -0.0234375 0.327574\nv 0.375 -0.0234375 0.32687\nv 0.382812 -0.0234375 0.325451\nv 0.395743 -0.0234375 0.320312\nv 0.390625 -0.0234375 0.322662\nv 0.503127 -0.0234375 0.320312\nv -0.308887 -0.015625 0.320312\nv -0.225305 -0.015625 0.320312\nv -0.21875 -0.015625 0.322302\nv -0.210938 -0.015625 0.324178\nv -0.203125 -0.015625 0.325084\nv -0.195312 -0.015625 0.325577\nv -0.1875 -0.015625 0.325785\nv -0.179688 -0.015625 0.326033\nv -0.171875 -0.015625 0.326315\nv -0.164062 -0.015625 0.326801\nv -0.15625 -0.015625 0.327274\nv -0.148438 -0.015625 0.327621\nv -0.140625 -0.015625 0.327707\nv -0.132812 -0.015625 0.327684\nv -0.125 -0.015625 0.327593\nv -0.117188 -0.015625 0.327576\nv -0.109375 -0.015625 0.327464\nv -0.101562 -0.015625 0.327271\nv -0.09375 -0.015625 0.326969\nv -0.0859375 -0.015625 0.32671\nv -0.078125 -0.015625 0.326418\nv -0.0703125 -0.015625 0.326221\nv -0.0625 -0.015625 0.326045\nv -0.0546875 -0.015625 0.325775\nv -0.046875 -0.015625 0.325509\nv -0.0390625 -0.015625 0.325276\nv -0.03125 -0.015625 0.324953\nv -0.0234375 -0.015625 0.324598\nv -0.015625 -0.015625 0.324115\nv -0.0078125 -0.015625 0.323624\nv 0 -0.015625 0.323678\nv 0.0078125 -0.015625 0.323994\nv 0.015625 -0.015625 0.324315\nv 0.0234375 -0.015625 0.324273\nv 0.03125 -0.015625 0.324184\nv 0.0390625 -0.015625 0.324209\nv 0.046875 -0.015625 0.324265\nv 0.0546875 -0.015625 0.324308\nv 0.0625 -0.015625 0.324335\nv 0.0703125 -0.015625 0.324317\nv 0.078125 -0.015625 0.324266\nv 0.0859375 -0.015625 0.324498\nv 0.09375 -0.015625 0.324587\nv 0.101562 -0.015625 0.324693\nv 0.109375 -0.015625 0.324829\nv 0.117188 -0.015625 0.325053\nv 0.125 -0.015625 0.325264\nv 0.132812 -0.015625 0.325447\nv 0.140625 -0.015625 0.325598\nv 0.148438 -0.015625 0.325741\nv 0.15625 -0.015625 0.325893\nv 0.164062 -0.015625 0.325988\nv 0.171875 -0.015625 0.326042\nv 0.179688 -0.015625 0.32607\nv 0.1875 -0.015625 0.326073\nv 0.195312 -0.015625 0.32611\nv 0.203125 -0.015625 0.326266\nv 0.210938 -0.015625 0.326491\nv 0.21875 -0.015625 0.326888\nv 0.226562 -0.015625 0.327465\nv 0.367188 -0.015625 0.327818\nv 0.375 -0.015625 0.326627\nv 0.382812 -0.015625 0.325128\nv 0.396514 -0.015625 0.320312\nv 0.390625 -0.015625 0.322982\nv 0.501773 -0.015625 0.320312\nv -0.309613 -0.0078125 0.320312\nv -0.221732 -0.0078125 0.320312\nv -0.21875 -0.00354314 0.320312\nv -0.21875 -0.0078125 0.321128\nv -0.210938 -0.0078125 0.323079\nv -0.203125 -0.0078125 0.324262\nv -0.195312 -0.0078125 0.32511\nv -0.1875 -0.0078125 0.325495\nv -0.179688 -0.0078125 0.325877\nv -0.171875 -0.0078125 0.325957\nv -0.164062 -0.0078125 0.326387\nv -0.15625 -0.0078125 0.326832\nv -0.148438 -0.0078125 0.327116\nv -0.140625 -0.0078125 0.327091\nv -0.132812 -0.0078125 0.326912\nv -0.125 -0.0078125 0.326754\nv -0.117188 -0.0078125 0.326621\nv -0.109375 -0.0078125 0.326513\nv -0.101562 -0.0078125 0.32637\nv -0.09375 -0.0078125 0.326106\nv -0.0859375 -0.0078125 0.325878\nv -0.078125 -0.0078125 0.325574\nv -0.0703125 -0.0078125 0.325271\nv -0.0625 -0.0078125 0.325091\nv -0.0546875 -0.0078125 0.32494\nv -0.046875 -0.0078125 0.324781\nv -0.0390625 -0.0078125 0.324588\nv -0.03125 -0.0078125 0.324387\nv -0.0234375 -0.0078125 0.324205\nv -0.015625 -0.0078125 0.324\nv -0.0078125 -0.0078125 0.323833\nv 0 -0.0078125 0.324112\nv 0.0078125 -0.0078125 0.324571\nv 0.015625 -0.0078125 0.324897\nv 0.0234375 -0.0078125 0.324876\nv 0.03125 -0.0078125 0.324704\nv 0.0390625 -0.0078125 0.324609\nv 0.046875 -0.0078125 0.324551\nv 0.0546875 -0.0078125 0.324483\nv 0.0625 -0.0078125 0.32441\nv 0.0703125 -0.0078125 0.324287\nv 0.078125 -0.0078125 0.324111\nv 0.0859375 -0.0078125 0.324264\nv 0.09375 -0.0078125 0.324263\nv 0.101562 -0.0078125 0.324317\nv 0.109375 -0.0078125 0.324486\nv 0.117188 -0.0078125 0.324761\nv 0.125 -0.0078125 0.324935\nv 0.132812 -0.0078125 0.325093\nv 0.140625 -0.0078125 0.325235\nv 0.148438 -0.0078125 0.325369\nv 0.15625 -0.0078125 0.325535\nv 0.164062 -0.0078125 0.32562\nv 0.171875 -0.0078125 0.325642\nv 0.179688 -0.0078125 0.325658\nv 0.1875 -0.0078125 0.32564\nv 0.195312 -0.0078125 0.325605\nv 0.203125 -0.0078125 0.325628\nv 0.210938 -0.0078125 0.325679\nv 0.21875 -0.0078125 0.32597\nv 0.226562 -0.0078125 0.326508\nv 0.234375 -0.0078125 0.32714\nv 0.242188 -0.0078125 0.327681\nv 0.25 -0.0078125 0.327999\nv 0.359375 -0.0078125 0.328014\nv 0.367188 -0.0078125 0.326624\nv 0.375 -0.0078125 0.325764\nv 0.382812 -0.0078125 0.32455\nv 0.396021 -0.0078125 0.320312\nv 0.390625 -0.0078125 0.322578\nv 0.500962 -0.0078125 0.320312\nv -0.310085 0 0.320312\nv -0.21607 0 0.320312\nv -0.210938 0 0.321641\nv -0.203125 0 0.323124\nv -0.195312 0 0.324376\nv -0.1875 0 0.324767\nv -0.179688 0 0.325309\nv -0.171875 0 0.325808\nv -0.164062 0 0.326116\nv -0.15625 0 0.326299\nv -0.148438 0 0.326506\nv -0.140625 0 0.3264\nv -0.132812 0 0.326203\nv -0.125 0 0.326029\nv -0.117188 0 0.32596\nv -0.109375 0 0.325781\nv -0.101562 0 0.325576\nv -0.09375 0 0.325316\nv -0.0859375 0 0.325065\nv -0.078125 0 0.324831\nv -0.0703125 0 0.324732\nv -0.0625 0 0.324672\nv -0.0546875 0 0.324551\nv -0.046875 0 0.324481\nv -0.0390625 0 0.3244\nv -0.03125 0 0.32431\nv -0.0234375 0 0.324307\nv -0.015625 0 0.324218\nv -0.0078125 0 0.324151\nv 0 0 0.324474\nv 0.0078125 0 0.324974\nv 0.015625 0 0.325334\nv 0.0234375 0 0.325416\nv 0.03125 0 0.325369\nv 0.0390625 0 0.325341\nv 0.046875 0 0.325307\nv 0.0546875 0 0.325246\nv 0.0625 0 0.325155\nv 0.0703125 0 0.325021\nv 0.078125 0 0.32484\nv 0.0859375 0 0.324966\nv 0.09375 0 0.324983\nv 0.101562 0 0.325047\nv 0.109375 0 0.325207\nv 0.117188 0 0.325437\nv 0.125 0 0.325571\nv 0.132812 0 0.325677\nv 0.140625 0 0.325738\nv 0.148438 0 0.325776\nv 0.15625 0 0.325803\nv 0.164062 0 0.325728\nv 0.171875 0 0.325651\nv 0.179688 0 0.325548\nv 0.1875 0 0.325432\nv 0.195312 0 0.325347\nv 0.203125 0 0.325314\nv 0.210938 0 0.325348\nv 0.21875 0 0.325583\nv 0.226562 0 0.325914\nv 0.234375 0 0.326172\nv 0.242188 0 0.326251\nv 0.25 0 0.326183\nv 0.257812 0 0.326154\nv 0.265625 0 0.326163\nv 0.273438 0 0.326332\nv 0.28125 0 0.326705\nv 0.289062 0 0.327317\nv 0.296875 0 0.327525\nv 0.304688 0 0.327485\nv 0.3125 0 0.327793\nv 0.320312 0 0.328094\nv 0.34375 0 0.327663\nv 0.351562 0 0.326674\nv 0.359375 0 0.325679\nv 0.367188 0 0.324886\nv 0.375 0 0.324374\nv 0.382812 0 0.323641\nv 0.394502 0 0.320312\nv 0.390625 0 0.321513\nv 0.501071 0 0.320312\nv -0.30991 0.0078125 0.320312\nv -0.211588 0.0078125 0.320312\nv -0.210938 0.00847942 0.320312\nv -0.210938 0.0078125 0.320524\nv -0.203125 0.0155034 0.320312\nv -0.203125 0.0078125 0.3222\nv -0.195312 0.0078125 0.32362\nv -0.1875 0.0078125 0.324061\nv -0.179688 0.0078125 0.324447\nv -0.171875 0.0078125 0.324944\nv -0.164062 0.0078125 0.325281\nv -0.15625 0.0078125 0.325556\nv -0.148438 0.0078125 0.32581\nv -0.140625 0.0078125 0.325661\nv -0.132812 0.0078125 0.325402\nv -0.125 0.0078125 0.325144\nv -0.117188 0.0078125 0.32505\nv -0.109375 0.0078125 0.324945\nv -0.101562 0.0078125 0.324798\nv -0.09375 0.0078125 0.324598\nv -0.0859375 0.0078125 0.324648\nv -0.078125 0.0078125 0.324615\nv -0.0703125 0.0078125 0.324562\nv -0.0625 0.0078125 0.324531\nv -0.0546875 0.0078125 0.324491\nv -0.046875 0.0078125 0.3244\nv -0.0390625 0.0078125 0.324277\nv -0.03125 0.0078125 0.324211\nv -0.0234375 0.0078125 0.324148\nv -0.015625 0.0078125 0.324037\nv -0.0078125 0.0078125 0.323935\nv 0 0.0078125 0.324238\nv 0.0078125 0.0078125 0.324689\nv 0.015625 0.0078125 0.325007\nv 0.0234375 0.0078125 0.325092\nv 0.03125 0.0078125 0.325074\nv 0.0390625 0.0078125 0.325102\nv 0.046875 0.0078125 0.325052\nv 0.0546875 0.0078125 0.32499\nv 0.0625 0.0078125 0.324839\nv 0.0703125 0.0078125 0.324648\nv 0.078125 0.0078125 0.32439\nv 0.0859375 0.0078125 0.324422\nv 0.09375 0.0078125 0.324384\nv 0.101562 0.0078125 0.324448\nv 0.109375 0.0078125 0.324696\nv 0.117188 0.0078125 0.324841\nv 0.125 0.0078125 0.324952\nv 0.132812 0.0078125 0.325003\nv 0.140625 0.0078125 0.325019\nv 0.148438 0.0078125 0.325011\nv 0.15625 0.0078125 0.325027\nv 0.164062 0.0078125 0.324936\nv 0.171875 0.0078125 0.324822\nv 0.179688 0.0078125 0.324644\nv 0.1875 0.0078125 0.324453\nv 0.195312 0.0078125 0.324271\nv 0.203125 0.0078125 0.324177\nv 0.210938 0.0078125 0.32421\nv 0.21875 0.0078125 0.324525\nv 0.226562 0.0078125 0.324841\nv 0.234375 0.0078125 0.325071\nv 0.242188 0.0078125 0.325122\nv 0.25 0.0078125 0.324953\nv 0.257812 0.0078125 0.324789\nv 0.265625 0.0078125 0.324543\nv 0.273438 0.0078125 0.324468\nv 0.28125 0.0078125 0.324448\nv 0.289062 0.0078125 0.32452\nv 0.296875 0.0078125 0.324507\nv 0.304688 0.0078125 0.324481\nv 0.3125 0.0078125 0.324585\nv 0.320312 0.0078125 0.324908\nv 0.328125 0.0078125 0.325274\nv 0.335938 0.0078125 0.325748\nv 0.34375 0.0078125 0.325198\nv 0.351562 0.0078125 0.324093\nv 0.359375 0.0078125 0.323354\nv 0.367188 0.0078125 0.323324\nv 0.375 0.0078125 0.3231\nv 0.382812 0.0147648 0.320312\nv 0.382812 0.0078125 0.322217\nv 0.391116 0.0078125 0.320312\nv 0.390625 0.00846618 0.320312\nv 0.390625 0.0078125 0.320426\nv 0.500943 0.0078125 0.320312\nv -0.309882 0.015625 0.320312\nv -0.203014 0.015625 0.320312\nv -0.195312 0.0198379 0.320312\nv -0.195312 0.015625 0.322386\nv -0.1875 0.0218572 0.320312\nv -0.1875 0.015625 0.323057\nv -0.179688 0.0232714 0.320312\nv -0.179688 0.015625 0.323435\nv -0.171875 0.015625 0.323846\nv -0.164062 0.015625 0.324176\nv -0.15625 0.015625 0.324406\nv -0.148438 0.015625 0.324591\nv -0.140625 0.015625 0.324408\nv -0.132812 0.015625 0.324192\nv -0.125 0.015625 0.323979\nv -0.117188 0.015625 0.323858\nv -0.109375 0.015625 0.323765\nv -0.101562 0.015625 0.323639\nv -0.09375 0.015625 0.323568\nv -0.0859375 0.015625 0.323644\nv -0.078125 0.015625 0.323627\nv -0.0703125 0.015625 0.323621\nv -0.0625 0.015625 0.323674\nv -0.0546875 0.015625 0.323703\nv -0.046875 0.015625 0.323681\nv -0.0390625 0.015625 0.323602\nv -0.03125 0.015625 0.323426\nv -0.0234375 0.0232358 0.320312\nv -0.0234375 0.015625 0.323295\nv -0.015625 0.0225402 0.320312\nv -0.015625 0.015625 0.323118\nv -0.0078125 0.0221079 0.320312\nv -0.0078125 0.015625 0.322979\nv 0 0.022569 0.320312\nv 0 0.015625 0.323251\nv 0.0078125 0.0231662 0.320312\nv 0.0078125 0.015625 0.323644\nv 0.015625 0.023315 0.320312\nv 0.015625 0.015625 0.323873\nv 0.0234375 0.0232801 0.320312\nv 0.0234375 0.015625 0.323896\nv 0.03125 0.0231103 0.320312\nv 0.03125 0.015625 0.323824\nv 0.0390625 0.023087 0.320312\nv 0.0390625 0.015625 0.323812\nv 0.046875 0.0229001 0.320312\nv 0.046875 0.015625 0.323719\nv 0.0546875 0.0227493 0.320312\nv 0.0546875 0.015625 0.323618\nv 0.0625 0.0224534 0.320312\nv 0.0625 0.015625 0.323479\nv 0.0703125 0.0220181 0.320312\nv 0.0703125 0.015625 0.3233\nv 0.078125 0.0215057 0.320312\nv 0.078125 0.015625 0.323082\nv 0.0859375 0.0216502 0.320312\nv 0.0859375 0.015625 0.32319\nv 0.09375 0.0214851 0.320312\nv 0.09375 0.015625 0.323183\nv 0.101562 0.0218739 0.320312\nv 0.101562 0.015625 0.323344\nv 0.109375 0.0219971 0.320312\nv 0.109375 0.015625 0.323511\nv 0.117188 0.0220762 0.320312\nv 0.117188 0.015625 0.323588\nv 0.125 0.0221713 0.320312\nv 0.125 0.015625 0.323645\nv 0.132812 0.0221444 0.320312\nv 0.132812 0.015625 0.323641\nv 0.140625 0.0219975 0.320312\nv 0.140625 0.015625 0.323639\nv 0.148438 0.0217382 0.320312\nv 0.148438 0.015625 0.323615\nv 0.15625 0.0215469 0.320312\nv 0.15625 0.015625 0.323606\nv 0.164062 0.0212331 0.320312\nv 0.164062 0.015625 0.323504\nv 0.171875 0.0208525 0.320312\nv 0.171875 0.015625 0.323358\nv 0.179688 0.0204564 0.320312\nv 0.179688 0.015625 0.323168\nv 0.1875 0.0201096 0.320312\nv 0.1875 0.015625 0.322962\nv 0.195312 0.0197219 0.320312\nv 0.195312 0.015625 0.322761\nv 0.203125 0.0194028 0.320312\nv 0.203125 0.015625 0.322637\nv 0.210938 0.0194234 0.320312\nv 0.210938 0.015625 0.322701\nv 0.21875 0.0195164 0.320312\nv 0.21875 0.015625 0.322884\nv 0.226562 0.0195522 0.320312\nv 0.226562 0.015625 0.32306\nv 0.234375 0.0195544 0.320312\nv 0.234375 0.015625 0.323119\nv 0.242188 0.0194871 0.320312\nv 0.242188 0.015625 0.323116\nv 0.25 0.0193366 0.320312\nv 0.25 0.015625 0.323065\nv 0.257812 0.0189685 0.320312\nv 0.257812 0.015625 0.32289\nv 0.265625 0.0184429 0.320312\nv 0.265625 0.015625 0.322533\nv 0.273438 0.0179298 0.320312\nv 0.273438 0.015625 0.32226\nv 0.28125 0.0175609 0.320312\nv 0.28125 0.015625 0.322017\nv 0.289062 0.0175141 0.320312\nv 0.289062 0.015625 0.321975\nv 0.296875 0.0172951 0.320312\nv 0.296875 0.015625 0.321757\nv 0.304688 0.0175369 0.320312\nv 0.304688 0.015625 0.321826\nv 0.3125 0.0177273 0.320312\nv 0.3125 0.015625 0.321942\nv 0.320312 0.0179489 0.320312\nv 0.320312 0.015625 0.322086\nv 0.328125 0.0180169 0.320312\nv 0.328125 0.015625 0.322095\nv 0.335938 0.0180644 0.320312\nv 0.335938 0.015625 0.32205\nv 0.34375 0.0177298 0.320312\nv 0.34375 0.015625 0.321685\nv 0.351562 0.0169656 0.320312\nv 0.351562 0.015625 0.321011\nv 0.359375 0.016115 0.320312\nv 0.359375 0.015625 0.3205\nv 0.367188 0.017106 0.320312\nv 0.367188 0.015625 0.320729\nv 0.376479 0.015625 0.320312\nv 0.375 0.0158836 0.320312\nv 0.375 0.015625 0.320377\nv 0.500962 0.015625 0.320312\nv -0.30961 0.0234375 0.320312\nv -0.178794 0.0234375 0.320312\nv -0.171875 0.0241677 0.320312\nv -0.171875 0.0234375 0.320888\nv -0.164062 0.0246732 0.320312\nv -0.164062 0.0234375 0.321273\nv -0.15625 0.0251101 0.320312\nv -0.15625 0.0234375 0.321611\nv -0.148438 0.025412 0.320312\nv -0.148438 0.0234375 0.321857\nv -0.140625 0.0252596 0.320312\nv -0.140625 0.0234375 0.321668\nv -0.132812 0.0249635 0.320312\nv -0.132812 0.0234375 0.321425\nv -0.125 0.0246452 0.320312\nv -0.125 0.0234375 0.321198\nv -0.117188 0.0246544 0.320312\nv -0.117188 0.0234375 0.321205\nv -0.109375 0.0248015 0.320312\nv -0.109375 0.0234375 0.321307\nv -0.101562 0.0247756 0.320312\nv -0.101562 0.0234375 0.321338\nv -0.09375 0.0246392 0.320312\nv -0.09375 0.0234375 0.321272\nv -0.0859375 0.0245712 0.320312\nv -0.0859375 0.0234375 0.321251\nv -0.078125 0.0244602 0.320312\nv -0.078125 0.0234375 0.321164\nv -0.0703125 0.0243203 0.320312\nv -0.0703125 0.0234375 0.321051\nv -0.0625 0.0242975 0.320312\nv -0.0625 0.0234375 0.321036\nv -0.0546875 0.0243262 0.320312\nv -0.0546875 0.0234375 0.321073\nv -0.046875 0.0242088 0.320312\nv -0.046875 0.0234375 0.320996\nv -0.0390625 0.0239431 0.320312\nv -0.0390625 0.0234375 0.320775\nv -0.0259024 0.0234375 0.320312\nv -0.03125 0.023648 0.320312\nv -0.03125 0.0234375 0.320509\nv 0.500848 0.0234375 0.320312\nv 0.5 0.0285888 0.320312\nv -0.309198 0.03125 0.320312\nv 0.499495 0.03125 0.320312\nv 0.5 0.03125 0.326247\nv -0.308733 0.0390625 0.320312\nv 0.497237 0.0390625 0.320312\nv -0.308185 0.046875 0.320312\nv 0.492304 0.046875 0.320312\nv 0.492188 0.0470179 0.320312\nv -0.307015 0.0546875 0.320312\nv 0.476562 0.059579 0.320312\nv 0.484445 0.0546875 0.320312\nv 0.484375 0.0547502 0.320312\nv -0.305932 0.0625 0.320312\nv 0.375 0.0702291 0.320312\nv 0.382812 0.070016 0.320312\nv 0.390625 0.0697637 0.320312\nv 0.398438 0.0695798 0.320312\nv 0.40625 0.0695781 0.320312\nv 0.414062 0.069676 0.320312\nv 0.421875 0.0697043 0.320312\nv 0.429688 0.0695312 0.320312\nv 0.4375 0.0693589 0.320312\nv 0.445312 0.0689935 0.320312\nv 0.453125 0.0684159 0.320312\nv 0.460938 0.0660552 0.320312\nv 0.470858 0.0625 0.320312\nv 0.46875 0.0634448 0.320312\nv -0.305196 0.0703125 0.320312\nv -0.203125 0.077468 0.320312\nv -0.195312 0.0762469 0.320312\nv -0.1875 0.0751003 0.320312\nv -0.179688 0.0741941 0.320312\nv -0.171875 0.0737816 0.320312\nv -0.164062 0.0735865 0.320312\nv -0.15625 0.0735233 0.320312\nv -0.148438 0.0733962 0.320312\nv -0.140625 0.0734119 0.320312\nv -0.132812 0.0734799 0.320312\nv -0.125 0.0735543 0.320312\nv -0.117188 0.0736593 0.320312\nv -0.109375 0.0737212 0.320312\nv -0.101562 0.0738313 0.320312\nv -0.09375 0.0738597 0.320312\nv -0.0859375 0.0738191 0.320312\nv -0.078125 0.0737765 0.320312\nv -0.0703125 0.0737508 0.320312\nv -0.0625 0.0737067 0.320312\nv -0.0546875 0.0735575 0.320312\nv -0.046875 0.0733002 0.320312\nv -0.0390625 0.0730396 0.320312\nv -0.03125 0.0727622 0.320312\nv -0.0234375 0.0725088 0.320312\nv -0.015625 0.0722826 0.320312\nv -0.0078125 0.0721474 0.320312\nv 0 0.0720633 0.320312\nv 0.0078125 0.0719674 0.320312\nv 0.015625 0.0718704 0.320312\nv 0.0234375 0.0717511 0.320312\nv 0.03125 0.0715786 0.320312\nv 0.0390625 0.0714127 0.320312\nv 0.046875 0.0712797 0.320312\nv 0.0546875 0.0712597 0.320312\nv 0.0625 0.0713625 0.320312\nv 0.0703125 0.0713811 0.320312\nv 0.078125 0.0712919 0.320312\nv 0.0859375 0.0711555 0.320312\nv 0.0859375 0.0703125 0.326813\nv 0.09375 0.0711489 0.320312\nv 0.09375 0.0703125 0.327032\nv 0.101562 0.0711959 0.320312\nv 0.101562 0.0703125 0.327337\nv 0.109375 0.0712205 0.320312\nv 0.109375 0.0703125 0.327459\nv 0.117188 0.0712327 0.320312\nv 0.117188 0.0703125 0.327719\nv 0.125 0.0712545 0.320312\nv 0.125 0.0703125 0.32793\nv 0.132812 0.0712251 0.320312\nv 0.132812 0.0703125 0.327596\nv 0.140625 0.0711663 0.320312\nv 0.140625 0.0703125 0.327185\nv 0.148438 0.0711398 0.320312\nv 0.148438 0.0703125 0.32675\nv 0.15625 0.0711412 0.320312\nv 0.15625 0.0703125 0.326819\nv 0.164062 0.0711448 0.320312\nv 0.164062 0.0703125 0.326866\nv 0.171875 0.0711223 0.320312\nv 0.171875 0.0703125 0.326913\nv 0.179688 0.0711123 0.320312\nv 0.179688 0.0703125 0.327093\nv 0.1875 0.0711091 0.320312\nv 0.1875 0.0703125 0.326911\nv 0.195312 0.0710608 0.320312\nv 0.195312 0.0703125 0.326665\nv 0.203125 0.0710204 0.320312\nv 0.203125 0.0703125 0.326414\nv 0.210938 0.0710086 0.320312\nv 0.210938 0.0703125 0.326115\nv 0.21875 0.0710244 0.320312\nv 0.21875 0.0703125 0.325885\nv 0.226562 0.0710093 0.320312\nv 0.226562 0.0703125 0.32573\nv 0.234375 0.0709851 0.320312\nv 0.234375 0.0703125 0.325409\nv 0.242188 0.0709225 0.320312\nv 0.242188 0.0703125 0.325387\nv 0.25 0.0709131 0.320312\nv 0.25 0.0703125 0.325632\nv 0.257812 0.0709037 0.320312\nv 0.257812 0.0703125 0.326815\nv 0.265625 0.0708278 0.320312\nv 0.265625 0.0703125 0.326823\nv 0.273438 0.0707872 0.320312\nv 0.273438 0.0703125 0.326251\nv 0.28125 0.0707915 0.320312\nv 0.28125 0.0703125 0.325882\nv 0.289062 0.0708566 0.320312\nv 0.289062 0.0703125 0.326111\nv 0.296875 0.0709713 0.320312\nv 0.296875 0.0703125 0.326824\nv 0.304688 0.0710866 0.320312\nv 0.304688 0.0703125 0.326686\nv 0.3125 0.0710656 0.320312\nv 0.3125 0.0703125 0.326321\nv 0.320312 0.071053 0.320312\nv 0.320312 0.0703125 0.326308\nv 0.328125 0.0709929 0.320312\nv 0.328125 0.0703125 0.326214\nv 0.335938 0.0709067 0.320312\nv 0.335938 0.0703125 0.325551\nv 0.34375 0.0707962 0.320312\nv 0.34375 0.0703125 0.324621\nv 0.351562 0.0706548 0.320312\nv 0.351562 0.0703125 0.323387\nv 0.359375 0.0704828 0.320312\nv 0.359375 0.0703125 0.321842\nv 0.370525 0.0703125 0.320312\nv 0.367188 0.0703719 0.320312\nv 0.367188 0.0703125 0.32082\nv -0.305258 0.078125 0.320312\nv -0.21875 0.0855305 0.320312\nv -0.20633 0.078125 0.320312\nv -0.210938 0.0794348 0.320312\nv -0.305301 0.0859375 0.320312\nv -0.219173 0.0859375 0.320312\nv -0.21875 0.0859375 0.323174\nv -0.306014 0.09375 0.320312\nv -0.22277 0.09375 0.320312\nv -0.306684 0.101562 0.320312\nv -0.224623 0.101562 0.320312\nv -0.30701 0.109375 0.320312\nv -0.223913 0.109375 0.320312\nv -0.307275 0.117188 0.320312\nv -0.223726 0.117188 0.320312\nv -0.307657 0.125 0.320312\nv -0.223565 0.125 0.320312\nv -0.30791 0.132812 0.320312\nv -0.223326 0.132812 0.320312\nv -0.308199 0.140625 0.320312\nv -0.222922 0.140625 0.320312\nv -0.308639 0.148438 0.320312\nv -0.222187 0.148438 0.320312\nv -0.308971 0.15625 0.320312\nv -0.222458 0.15625 0.320312\nv -0.309239 0.164062 0.320312\nv -0.223498 0.164062 0.320312\nv -0.309966 0.171875 0.320312\nv -0.3125 0.171875 0.327369\nv -0.223875 0.171875 0.320312\nv -0.310963 0.179688 0.320312\nv -0.3125 0.179688 0.324705\nv -0.224107 0.179688 0.320312\nv -0.312116 0.1875 0.320312\nv -0.3125 0.190328 0.320312\nv -0.3125 0.1875 0.321501\nv -0.224254 0.1875 0.320312\nv -0.313179 0.195312 0.320312\nv -0.224197 0.195312 0.320312\nv -0.314299 0.203125 0.320312\nv -0.224062 0.203125 0.320312\nv -0.315072 0.210938 0.320312\nv -0.223879 0.210938 0.320312\nv -0.315851 0.21875 0.320312\nv -0.223699 0.21875 0.320312\nv -0.31647 0.226562 0.320312\nv -0.223649 0.226562 0.320312\nv -0.316238 0.234375 0.320312\nv -0.223967 0.234375 0.320312\nv -0.315704 0.242188 0.320312\nv -0.224513 0.242188 0.320312\nv -0.315191 0.25 0.320312\nv -0.225185 0.25 0.320312\nv -0.314616 0.257812 0.320312\nv -0.225783 0.257812 0.320312\nv -0.314011 0.265625 0.320312\nv -0.226375 0.265625 0.320312\nv -0.226562 0.267217 0.320312\nv -0.313425 0.273438 0.320312\nv -0.22743 0.273438 0.320312\nv -0.226562 0.273438 0.326785\nv -0.312849 0.28125 0.320312\nv -0.3125 0.284138 0.320312\nv -0.228409 0.28125 0.320312\nv -0.311927 0.289062 0.320312\nv -0.3125 0.289062 0.321182\nv -0.229339 0.289062 0.320312\nv -0.311385 0.296875 0.320312\nv -0.3125 0.296875 0.321869\nv -0.23023 0.296875 0.320312\nv -0.311768 0.304688 0.320312\nv -0.3125 0.304688 0.321326\nv -0.230909 0.304688 0.320312\nv -0.311913 0.3125 0.320312\nv -0.3125 0.3125 0.321086\nv -0.231596 0.3125 0.320312\nv -0.312088 0.320312 0.320312\nv -0.3125 0.320312 0.320837\nv -0.232014 0.320312 0.320312\nv -0.312497 0.328125 0.320312\nv -0.3125 0.32817 0.320312\nv -0.3125 0.328125 0.320316\nv -0.232522 0.328125 0.320312\nv -0.312959 0.335938 0.320312\nv -0.233398 0.335938 0.320312\nv -0.312842 0.34375 0.320312\nv -0.23414 0.34375 0.320312\nv -0.234375 0.345976 0.320312\nv -0.312845 0.351562 0.320312\nv -0.235064 0.351562 0.320312\nv -0.234375 0.351562 0.328007\nv -0.312796 0.359375 0.320312\nv -0.235834 0.359375 0.320312\nv -0.312943 0.367188 0.320312\nv -0.236157 0.367188 0.320312\nv -0.313296 0.375 0.320312\nv -0.23639 0.375 0.320312\nv -0.313894 0.382812 0.320312\nv -0.236601 0.382812 0.320312\nv -0.314528 0.390625 0.320312\nv -0.236886 0.390625 0.320312\nv -0.315123 0.398438 0.320312\nv -0.320312 0.398438 0.327691\nv -0.237178 0.398438 0.320312\nv -0.315702 0.40625 0.320312\nv -0.320312 0.40625 0.326968\nv -0.237424 0.40625 0.320312\nv -0.3163 0.414062 0.320312\nv -0.320312 0.414062 0.326255\nv -0.23767 0.414062 0.320312\nv -0.316837 0.421875 0.320312\nv -0.320312 0.421875 0.325528\nv -0.238008 0.421875 0.320312\nv -0.317301 0.429688 0.320312\nv -0.320312 0.429688 0.324867\nv -0.238432 0.429688 0.320312\nv -0.317785 0.4375 0.320312\nv -0.320312 0.4375 0.324129\nv -0.238779 0.4375 0.320312\nv -0.318165 0.445312 0.320312\nv -0.320312 0.445312 0.32355\nv -0.239131 0.445312 0.320312\nv -0.318424 0.453125 0.320312\nv -0.320312 0.453125 0.323111\nv -0.239761 0.453125 0.320312\nv -0.318691 0.460938 0.320312\nv -0.320312 0.460938 0.322673\nv -0.240316 0.460938 0.320312\nv -0.318815 0.46875 0.320312\nv -0.320312 0.46875 0.322438\nv -0.240942 0.46875 0.320312\nv -0.318953 0.476562 0.320312\nv -0.320312 0.476562 0.322198\nv -0.241582 0.476562 0.320312\nv -0.319163 0.484375 0.320312\nv -0.320312 0.484375 0.321873\nv -0.242109 0.484375 0.320312\nv -0.242188 0.485541 0.320312\nv -0.319658 0.492188 0.320312\nv -0.320312 0.498194 0.320312\nv -0.320312 0.492188 0.321146\nv -0.242665 0.492188 0.320312\nv -0.242188 0.492188 0.321287\nv -0.320507 0.5 0.320312\nv -0.243233 0.5 0.320312\nv -0.242188 0.5 0.322442\nv -0.321545 0.507812 0.320312\nv -0.243857 0.507812 0.320312\nv -0.242188 0.507812 0.324026\nv -0.322623 0.515625 0.320312\nv -0.328125 0.515625 0.327816\nv -0.244524 0.515625 0.320312\nv -0.242188 0.515625 0.325806\nv -0.323687 0.523438 0.320312\nv -0.328125 0.523438 0.326382\nv -0.245228 0.523438 0.320312\nv -0.242188 0.523438 0.327712\nv -0.324523 0.53125 0.320312\nv -0.328125 0.53125 0.32506\nv -0.245925 0.53125 0.320312\nv -0.325368 0.539062 0.320312\nv -0.328125 0.539062 0.323761\nv -0.246584 0.539062 0.320312\nv -0.326209 0.546875 0.320312\nv -0.328125 0.546875 0.322621\nv -0.247235 0.546875 0.320312\nv -0.326845 0.554688 0.320312\nv -0.328125 0.554688 0.321804\nv -0.247796 0.554688 0.320312\nv -0.327576 0.5625 0.320312\nv -0.328125 0.567548 0.320312\nv -0.328125 0.5625 0.320942\nv -0.248429 0.5625 0.320312\nv -0.328398 0.570312 0.320312\nv -0.249061 0.570312 0.320312\nv -0.329149 0.578125 0.320312\nv -0.249648 0.578125 0.320312\nv -0.25 0.582965 0.320312\nv -0.329758 0.585938 0.320312\nv -0.250208 0.585938 0.320312\nv -0.25 0.585938 0.321038\nv -0.330071 0.59375 0.320312\nv -0.250744 0.59375 0.320312\nv -0.25 0.59375 0.323054\nv -0.330399 0.601562 0.320312\nv -0.251187 0.601562 0.320312\nv -0.25 0.601562 0.324875\nv -0.331129 0.609375 0.320312\nv -0.251534 0.609375 0.320312\nv -0.25 0.609375 0.326421\nv -0.332085 0.617188 0.320312\nv -0.335938 0.617188 0.327254\nv -0.251816 0.617188 0.320312\nv -0.25 0.617188 0.327703\nv -0.333423 0.625 0.320312\nv -0.335938 0.625 0.324665\nv -0.251631 0.625 0.320312\nv -0.25 0.625 0.327065\nv -0.334979 0.632812 0.320312\nv -0.335938 0.632812 0.321988\nv -0.251576 0.632812 0.320312\nv -0.33587 0.640625 0.320312\nv -0.335938 0.64106 0.320312\nv -0.335938 0.640625 0.320438\nv -0.251942 0.640625 0.320312\nv -0.337082 0.648438 0.320312\nv -0.252876 0.648438 0.320312\nv -0.338425 0.65625 0.320312\nv -0.253764 0.65625 0.320312\nv -0.33912 0.664062 0.320312\nv -0.254756 0.664062 0.320312\nv -0.339589 0.671875 0.320312\nv -0.255873 0.671875 0.320312\nv -0.339955 0.679688 0.320312\nv -0.256642 0.679688 0.320312\nv -0.340243 0.6875 0.320312\nv -0.34375 0.6875 0.328093\nv -0.257311 0.6875 0.320312\nv -0.257812 0.693722 0.320312\nv -0.340315 0.695312 0.320312\nv -0.34375 0.695312 0.327542\nv -0.257941 0.695312 0.320312\nv -0.257812 0.695312 0.322197\nv -0.340396 0.703125 0.320312\nv -0.34375 0.703125 0.327187\nv -0.258497 0.703125 0.320312\nv -0.340229 0.710938 0.320312\nv -0.34375 0.710938 0.327464\nv -0.259026 0.710938 0.320312\nv -0.339839 0.71875 0.320312\nv -0.34375 0.71875 0.328062\nv -0.259659 0.71875 0.320312\nv -0.338958 0.726562 0.320312\nv -0.260299 0.726562 0.320312\nv -0.338012 0.734375 0.320312\nv -0.26067 0.734375 0.320312\nv -0.336698 0.742188 0.320312\nv -0.335938 0.748089 0.320312\nv -0.261977 0.742188 0.320312\nv -0.335718 0.75 0.320312\nv -0.335938 0.75 0.320727\nv -0.263954 0.75 0.320312\nv -0.265625 0.756019 0.320312\nv -0.33539 0.757812 0.320312\nv -0.335938 0.757812 0.321258\nv -0.266118 0.757812 0.320312\nv -0.265625 0.757812 0.321875\nv -0.335859 0.765625 0.320312\nv -0.335938 0.767311 0.320312\nv -0.335938 0.765625 0.320443\nv -0.268425 0.765625 0.320312\nv -0.265625 0.765625 0.327562\nv -0.336227 0.773438 0.320312\nv -0.271244 0.773438 0.320312\nv -0.273438 0.778107 0.320312\nv -0.336932 0.78125 0.320312\nv -0.275216 0.78125 0.320312\nv -0.273438 0.78125 0.327337\nv -0.337693 0.789062 0.320312\nv -0.27909 0.789062 0.320312\nv -0.28125 0.793993 0.320312\nv -0.337934 0.796875 0.320312\nv -0.282665 0.796875 0.320312\nv -0.338168 0.804688 0.320312\nv -0.286676 0.804688 0.320312\nv -0.289062 0.809131 0.320312\nv -0.338947 0.8125 0.320312\nv -0.34375 0.8125 0.327278\nv -0.291105 0.8125 0.320312\nv -0.340267 0.820312 0.320312\nv -0.34375 0.820312 0.326077\nv -0.295143 0.820312 0.320312\nv -0.296875 0.825142 0.320312\nv -0.340759 0.828125 0.320312\nv -0.34375 0.828125 0.326217\nv -0.298207 0.828125 0.320312\nv -0.296875 0.828125 0.325088\nv -0.338651 0.835938 0.320312\nv -0.335938 0.839749 0.320312\nv -0.328125 0.843588 0.320312\nv -0.301826 0.835938 0.320312\nv -0.335938 0.84375 0.325012\nv -0.327846 0.84375 0.320312\nv -0.328125 0.84375 0.320556\nv -0.320312 0.849176 0.320312\nv -0.303821 0.84375 0.320312\nv -0.304688 0.845477 0.320312\nv -0.315091 0.851562 0.320312\nv -0.320312 0.851562 0.323202\nv -0.310583 0.851562 0.320312\nv -0.3125 0.85274 0.320312\nv -0.304688 0.851562 0.324456\nv 0.429688 -0.734625 0.328125\nv -0.320312 -0.728265 0.328125\nv -0.3125 -0.729994 0.328125\nv -0.304688 -0.731166 0.328125\nv -0.296875 -0.732152 0.328125\nv -0.289062 -0.733123 0.328125\nv -0.289062 -0.734375 0.335607\nv -0.28125 -0.733485 0.328125\nv -0.28125 -0.734375 0.332551\nv -0.273438 -0.733302 0.328125\nv -0.273438 -0.734375 0.333086\nv -0.265625 -0.732055 0.328125\nv -0.257812 -0.73054 0.328125\nv -0.25 -0.727499 0.328125\nv 0.40625 -0.729249 0.328125\nv 0.414062 -0.7326 0.328125\nv 0.424457 -0.734375 0.328125\nv 0.421875 -0.734202 0.328125\nv 0.435625 -0.734375 0.328125\nv 0.4375 -0.734282 0.328125\nv 0.4375 -0.734375 0.328662\nv 0.445312 -0.733815 0.328125\nv 0.445312 -0.734375 0.331144\nv 0.453125 -0.732566 0.328125\nv 0.453125 -0.734375 0.33586\nv 0.460938 -0.731386 0.328125\nv 0.46875 -0.729952 0.328125\nv 0.476562 -0.727417 0.328125\nv -0.335938 -0.719591 0.328125\nv -0.325939 -0.726562 0.328125\nv -0.328125 -0.725506 0.328125\nv -0.328125 -0.726562 0.331584\nv -0.248461 -0.726562 0.328125\nv 0.402955 -0.726562 0.328125\nv 0.479132 -0.726562 0.328125\nv 0.484375 -0.724566 0.328125\nv 0.484375 -0.726562 0.332532\nv 0.492188 -0.721999 0.328125\nv -0.336653 -0.71875 0.328125\nv -0.244576 -0.71875 0.328125\nv -0.242188 -0.712242 0.328125\nv -0.242188 -0.71875 0.333558\nv 0.399426 -0.71875 0.328125\nv 0.398438 -0.717322 0.328125\nv 0.398438 -0.71875 0.330903\nv 0.498351 -0.71875 0.328125\nv 0.5 -0.716206 0.328125\nv 0.5 -0.71875 0.331571\nv -0.340308 -0.710938 0.328125\nv -0.241781 -0.710938 0.328125\nv 0.394744 -0.710938 0.328125\nv 0.502581 -0.710938 0.328125\nv -0.34117 -0.703125 0.328125\nv -0.238741 -0.703125 0.328125\nv 0.391626 -0.703125 0.328125\nv 0.390625 -0.699369 0.328125\nv 0.390625 -0.703125 0.331538\nv 0.502981 -0.703125 0.328125\nv -0.340917 -0.695312 0.328125\nv -0.235764 -0.695312 0.328125\nv -0.234375 -0.695312 0.332116\nv 0.389825 -0.695312 0.328125\nv 0.502562 -0.695312 0.328125\nv -0.340306 -0.6875 0.328125\nv -0.234453 -0.6875 0.328125\nv -0.234375 -0.686785 0.328125\nv -0.234375 -0.6875 0.328335\nv 0.389584 -0.6875 0.328125\nv 0.502652 -0.6875 0.328125\nv -0.3395 -0.679688 0.328125\nv -0.233661 -0.679688 0.328125\nv 0.389451 -0.679688 0.328125\nv 0.502986 -0.679688 0.328125\nv -0.338777 -0.671875 0.328125\nv -0.232838 -0.671875 0.328125\nv 0.389422 -0.671875 0.328125\nv 0.503124 -0.671875 0.328125\nv -0.338131 -0.664062 0.328125\nv -0.232051 -0.664062 0.328125\nv 0.389495 -0.664062 0.328125\nv 0.503084 -0.664062 0.328125\nv -0.337425 -0.65625 0.328125\nv -0.231244 -0.65625 0.328125\nv 0.389622 -0.65625 0.328125\nv 0.502933 -0.65625 0.328125\nv -0.336581 -0.648438 0.328125\nv -0.335938 -0.643042 0.328125\nv -0.230383 -0.648438 0.328125\nv 0.389921 -0.648438 0.328125\nv 0.502752 -0.648438 0.328125\nv -0.335604 -0.640625 0.328125\nv -0.335938 -0.640625 0.332019\nv -0.229632 -0.640625 0.328125\nv -0.226562 -0.640625 0.335659\nv 0.390171 -0.640625 0.328125\nv 0.502368 -0.640625 0.328125\nv -0.334537 -0.632812 0.328125\nv -0.229518 -0.632812 0.328125\nv -0.226562 -0.632812 0.335089\nv 0.390344 -0.632812 0.328125\nv 0.501878 -0.632812 0.328125\nv -0.333482 -0.625 0.328125\nv -0.229526 -0.625 0.328125\nv -0.226562 -0.625 0.334759\nv 0.390602 -0.625 0.328125\nv 0.390625 -0.624871 0.328125\nv 0.501561 -0.625 0.328125\nv -0.332409 -0.617188 0.328125\nv -0.230258 -0.617188 0.328125\nv -0.226562 -0.617188 0.334537\nv 0.392432 -0.617188 0.328125\nv 0.390625 -0.617188 0.330657\nv 0.501302 -0.617188 0.328125\nv -0.331727 -0.609375 0.328125\nv -0.231641 -0.609375 0.328125\nv -0.226562 -0.609375 0.334642\nv 0.394213 -0.609375 0.328125\nv 0.390625 -0.609375 0.331842\nv 0.5011 -0.609375 0.328125\nv -0.331563 -0.601562 0.328125\nv -0.23286 -0.601562 0.328125\nv -0.226562 -0.601562 0.334712\nv 0.395811 -0.601562 0.328125\nv 0.390625 -0.601562 0.332371\nv 0.50066 -0.601562 0.328125\nv -0.331326 -0.59375 0.328125\nv -0.233116 -0.59375 0.328125\nv -0.226562 -0.59375 0.334264\nv 0.396367 -0.59375 0.328125\nv 0.390625 -0.59375 0.332328\nv 0.500091 -0.59375 0.328125\nv 0.5 -0.592387 0.328125\nv -0.331137 -0.585938 0.328125\nv -0.233148 -0.585938 0.328125\nv -0.226562 -0.585938 0.333915\nv 0.396831 -0.585938 0.328125\nv 0.390625 -0.585938 0.332515\nv 0.499554 -0.585938 0.328125\nv 0.5 -0.585938 0.329401\nv -0.330909 -0.578125 0.328125\nv -0.233274 -0.578125 0.328125\nv -0.226562 -0.578125 0.334048\nv 0.396959 -0.578125 0.328125\nv 0.390625 -0.578125 0.332591\nv 0.498867 -0.578125 0.328125\nv 0.5 -0.578125 0.330846\nv -0.330634 -0.570312 0.328125\nv -0.233346 -0.570312 0.328125\nv -0.226562 -0.570312 0.333985\nv 0.396706 -0.570312 0.328125\nv 0.390625 -0.570312 0.332165\nv 0.498209 -0.570312 0.328125\nv 0.5 -0.570312 0.331761\nv -0.330451 -0.5625 0.328125\nv -0.232324 -0.5625 0.328125\nv -0.226562 -0.556172 0.328125\nv -0.226562 -0.5625 0.33269\nv -0.21875 -0.5625 0.335603\nv -0.0078125 -0.555217 0.328125\nv 0 -0.555492 0.328125\nv 0.0078125 -0.555189 0.328125\nv 0.382812 -0.5625 0.334941\nv 0.394538 -0.5625 0.328125\nv 0.390625 -0.5625 0.330444\nv 0.49734 -0.5625 0.328125\nv 0.5 -0.5625 0.33275\nv -0.330494 -0.554688 0.328125\nv -0.221898 -0.554688 0.328125\nv -0.21875 -0.553706 0.328125\nv -0.21875 -0.554688 0.328956\nv -0.210938 -0.551053 0.328125\nv -0.210938 -0.554688 0.33122\nv -0.203125 -0.549034 0.328125\nv -0.203125 -0.554688 0.333413\nv -0.195312 -0.54737 0.328125\nv -0.195312 -0.554688 0.335512\nv -0.171875 -0.546891 0.328125\nv -0.164062 -0.548157 0.328125\nv -0.15625 -0.549463 0.328125\nv -0.148438 -0.550316 0.328125\nv -0.140625 -0.548629 0.328125\nv -0.078125 -0.547018 0.328125\nv -0.0703125 -0.547682 0.328125\nv -0.0625 -0.548501 0.328125\nv -0.0546875 -0.549353 0.328125\nv -0.046875 -0.550225 0.328125\nv -0.0390625 -0.551196 0.328125\nv -0.03125 -0.55237 0.328125\nv -0.0234375 -0.553458 0.328125\nv -0.0129274 -0.554688 0.328125\nv -0.015625 -0.554323 0.328125\nv 0.0131191 -0.554688 0.328125\nv 0.015625 -0.554405 0.328125\nv 0.015625 -0.554688 0.331053\nv 0.0234375 -0.553347 0.328125\nv 0.03125 -0.552262 0.328125\nv 0.0390625 -0.551285 0.328125\nv 0.046875 -0.550295 0.328125\nv 0.0546875 -0.54899 0.328125\nv 0.0625 -0.547569 0.328125\nv 0.234375 -0.547034 0.328125\nv 0.242188 -0.546929 0.328125\nv 0.25 -0.546963 0.328125\nv 0.257812 -0.547238 0.328125\nv 0.265625 -0.547358 0.328125\nv 0.375 -0.554688 0.335091\nv 0.382812 -0.554688 0.332496\nv 0.391348 -0.554688 0.328125\nv 0.390625 -0.553041 0.328125\nv 0.390625 -0.554688 0.328498\nv 0.49708 -0.554688 0.328125\nv 0.5 -0.554688 0.333245\nv -0.330553 -0.546875 0.328125\nv -0.190878 -0.546875 0.328125\nv -0.1875 -0.546493 0.328125\nv -0.1875 -0.546875 0.328493\nv -0.17202 -0.546875 0.328125\nv -0.179688 -0.545953 0.328125\nv -0.179688 -0.546875 0.32909\nv -0.135876 -0.546875 0.328125\nv -0.132812 -0.545316 0.328125\nv -0.125 -0.542973 0.328125\nv -0.117188 -0.543642 0.328125\nv -0.109375 -0.544304 0.328125\nv -0.101562 -0.544933 0.328125\nv -0.09375 -0.545582 0.328125\nv -0.0799108 -0.546875 0.328125\nv -0.0859375 -0.546287 0.328125\nv -0.078125 -0.546875 0.334727\nv 0.0663847 -0.546875 0.328125\nv 0.0703125 -0.546024 0.328125\nv 0.0703125 -0.546875 0.330667\nv 0.078125 -0.545328 0.328125\nv 0.078125 -0.546875 0.333223\nv 0.0859375 -0.544454 0.328125\nv 0.09375 -0.543561 0.328125\nv 0.101562 -0.542948 0.328125\nv 0.109375 -0.542692 0.328125\nv 0.117188 -0.542614 0.328125\nv 0.125 -0.542694 0.328125\nv 0.132812 -0.543263 0.328125\nv 0.140625 -0.543432 0.328125\nv 0.148438 -0.543446 0.328125\nv 0.148438 -0.546875 0.335723\nv 0.15625 -0.543537 0.328125\nv 0.15625 -0.546875 0.335164\nv 0.164062 -0.543723 0.328125\nv 0.164062 -0.546875 0.334997\nv 0.171875 -0.543856 0.328125\nv 0.171875 -0.546875 0.334669\nv 0.179688 -0.543931 0.328125\nv 0.179688 -0.546875 0.334434\nv 0.1875 -0.543929 0.328125\nv 0.1875 -0.546875 0.334226\nv 0.195312 -0.544289 0.328125\nv 0.195312 -0.546875 0.334339\nv 0.203125 -0.544916 0.328125\nv 0.203125 -0.546875 0.333066\nv 0.210938 -0.545558 0.328125\nv 0.210938 -0.546875 0.331315\nv 0.21875 -0.546392 0.328125\nv 0.21875 -0.546875 0.32932\nv 0.228593 -0.546875 0.328125\nv 0.226562 -0.546795 0.328125\nv 0.226562 -0.546875 0.328312\nv 0.270535 -0.546875 0.328125\nv 0.273438 -0.546472 0.328125\nv 0.273438 -0.546875 0.328891\nv 0.28125 -0.54537 0.328125\nv 0.28125 -0.546875 0.3306\nv 0.289062 -0.54429 0.328125\nv 0.289062 -0.546875 0.331941\nv 0.296875 -0.543314 0.328125\nv 0.296875 -0.546875 0.333426\nv 0.304688 -0.541951 0.328125\nv 0.304688 -0.546875 0.333904\nv 0.3125 -0.541196 0.328125\nv 0.3125 -0.546875 0.333665\nv 0.320312 -0.541356 0.328125\nv 0.320312 -0.546875 0.332789\nv 0.328125 -0.542076 0.328125\nv 0.328125 -0.546875 0.332274\nv 0.335938 -0.541191 0.328125\nv 0.335938 -0.546875 0.332376\nv 0.34375 -0.539905 0.328125\nv 0.34375 -0.546875 0.333358\nv 0.351562 -0.546875 0.334022\nv 0.359375 -0.546875 0.333606\nv 0.367188 -0.546875 0.332376\nv 0.375 -0.539858 0.328125\nv 0.375 -0.546875 0.331049\nv 0.385259 -0.546875 0.328125\nv 0.382812 -0.544954 0.328125\nv 0.382812 -0.546875 0.328756\nv 0.496913 -0.546875 0.328125\nv 0.5 -0.546875 0.333624\nv -0.330678 -0.539062 0.328125\nv 0.349062 -0.539062 0.328125\nv 0.351562 -0.53854 0.328125\nv 0.351562 -0.539062 0.328423\nv 0.359375 -0.536944 0.328125\nv 0.359375 -0.539062 0.329132\nv 0.370989 -0.539062 0.328125\nv 0.367188 -0.538303 0.328125\nv 0.367188 -0.539062 0.328447\nv 0.496869 -0.539062 0.328125\nv 0.5 -0.539062 0.333796\nv -0.330742 -0.53125 0.328125\nv 0.496956 -0.53125 0.328125\nv 0.5 -0.53125 0.333599\nv -0.330845 -0.523438 0.328125\nv 0.496955 -0.523438 0.328125\nv 0.5 -0.523438 0.333669\nv -0.331002 -0.515625 0.328125\nv 0.496897 -0.515625 0.328125\nv 0.5 -0.515625 0.33383\nv -0.33118 -0.507812 0.328125\nv 0.497047 -0.507812 0.328125\nv 0.5 -0.507812 0.333762\nv -0.331454 -0.5 0.328125\nv -0.132812 -0.494378 0.328125\nv -0.125 -0.495144 0.328125\nv -0.117188 -0.492975 0.328125\nv 0.497172 -0.5 0.328125\nv 0.5 -0.5 0.333678\nv -0.331581 -0.492188 0.328125\nv -0.1875 -0.486084 0.328125\nv -0.179688 -0.488562 0.328125\nv -0.171875 -0.489079 0.328125\nv -0.164062 -0.489491 0.328125\nv -0.15625 -0.489562 0.328125\nv -0.148438 -0.489594 0.328125\nv -0.138131 -0.492188 0.328125\nv -0.140625 -0.49099 0.328125\nv -0.132812 -0.492188 0.332192\nv -0.125 -0.492188 0.333215\nv -0.114267 -0.492188 0.328125\nv -0.117188 -0.492188 0.329458\nv -0.109375 -0.490961 0.328125\nv -0.101562 -0.488961 0.328125\nv -0.09375 -0.486827 0.328125\nv -0.0859375 -0.484668 0.328125\nv 0.304688 -0.485971 0.328125\nv 0.3125 -0.488902 0.328125\nv 0.320312 -0.487146 0.328125\nv 0.328125 -0.485686 0.328125\nv 0.335938 -0.484869 0.328125\nv 0.49811 -0.492188 0.328125\nv 0.5 -0.492188 0.332951\nv -0.331672 -0.484375 0.328125\nv -0.203125 -0.479568 0.328125\nv -0.194029 -0.484375 0.328125\nv -0.195312 -0.483945 0.328125\nv -0.1875 -0.484375 0.32901\nv -0.179688 -0.484375 0.330278\nv -0.171875 -0.484375 0.330541\nv -0.164062 -0.484375 0.331086\nv -0.15625 -0.484375 0.331674\nv -0.148438 -0.484375 0.332912\nv -0.09375 -0.484375 0.332773\nv -0.0849065 -0.484375 0.328125\nv -0.0859375 -0.484375 0.3287\nv -0.078125 -0.482747 0.328125\nv -0.0703125 -0.48076 0.328125\nv -0.0625 -0.478746 0.328125\nv -0.0546875 -0.476572 0.328125\nv 0.257812 -0.476657 0.328125\nv 0.265625 -0.477499 0.328125\nv 0.273438 -0.478173 0.328125\nv 0.28125 -0.479282 0.328125\nv 0.289062 -0.481035 0.328125\nv 0.300689 -0.484375 0.328125\nv 0.296875 -0.482967 0.328125\nv 0.304688 -0.484375 0.330191\nv 0.3125 -0.484375 0.333503\nv 0.320312 -0.484375 0.331267\nv 0.328125 -0.484375 0.328999\nv 0.338714 -0.484375 0.328125\nv 0.335938 -0.484375 0.328382\nv 0.34375 -0.483607 0.328125\nv 0.351562 -0.481674 0.328125\nv 0.359375 -0.479605 0.328125\nv 0.367188 -0.477186 0.328125\nv 0.499411 -0.484375 0.328125\nv 0.5 -0.484375 0.33085\nv -0.331781 -0.476562 0.328125\nv -0.21875 -0.473489 0.328125\nv -0.210289 -0.476562 0.328125\nv -0.210938 -0.476312 0.328125\nv -0.203125 -0.476562 0.329807\nv -0.195312 -0.476562 0.331763\nv -0.1875 -0.476562 0.332813\nv -0.179688 -0.476562 0.333991\nv -0.171875 -0.476562 0.334615\nv -0.0625 -0.476562 0.333712\nv -0.0546483 -0.476562 0.328125\nv -0.0546875 -0.476562 0.328152\nv -0.046875 -0.474723 0.328125\nv -0.0390625 -0.472844 0.328125\nv -0.03125 -0.471028 0.328125\nv -0.0234375 -0.469107 0.328125\nv 0.140625 -0.46892 0.328125\nv 0.148438 -0.470044 0.328125\nv 0.15625 -0.470753 0.328125\nv 0.164062 -0.471249 0.328125\nv 0.171875 -0.471455 0.328125\nv 0.179688 -0.471621 0.328125\nv 0.1875 -0.471769 0.328125\nv 0.195312 -0.472055 0.328125\nv 0.203125 -0.472156 0.328125\nv 0.210938 -0.472173 0.328125\nv 0.21875 -0.472265 0.328125\nv 0.226562 -0.472547 0.328125\nv 0.234375 -0.473648 0.328125\nv 0.242188 -0.474627 0.328125\nv 0.257232 -0.476562 0.328125\nv 0.25 -0.475665 0.328125\nv 0.257812 -0.476562 0.328436\nv 0.265625 -0.476562 0.331665\nv 0.273438 -0.476562 0.335267\nv 0.335938 -0.476562 0.334023\nv 0.34375 -0.476562 0.332871\nv 0.351562 -0.476562 0.331688\nv 0.359375 -0.476562 0.329834\nv 0.368641 -0.476562 0.328125\nv 0.367188 -0.476562 0.328485\nv 0.375 -0.472425 0.328125\nv 0.499824 -0.476562 0.328125\nv 0.5 -0.468801 0.328125\nv 0.5 -0.476562 0.32919\nv -0.331788 -0.46875 0.328125\nv -0.223428 -0.46875 0.328125\nv -0.226562 -0.460946 0.328125\nv -0.21875 -0.46875 0.330317\nv -0.210938 -0.46875 0.333067\nv -0.203125 -0.46875 0.334676\nv -0.0221165 -0.46875 0.328125\nv -0.0234375 -0.46875 0.33037\nv -0.015625 -0.467324 0.328125\nv -0.0078125 -0.466039 0.328125\nv 0 -0.464967 0.328125\nv 0.0078125 -0.464627 0.328125\nv 0.015625 -0.464512 0.328125\nv 0.0234375 -0.464554 0.328125\nv 0.03125 -0.464645 0.328125\nv 0.0390625 -0.464795 0.328125\nv 0.046875 -0.465023 0.328125\nv 0.0546875 -0.465165 0.328125\nv 0.0625 -0.465056 0.328125\nv 0.0703125 -0.465138 0.328125\nv 0.078125 -0.465367 0.328125\nv 0.0859375 -0.465792 0.328125\nv 0.09375 -0.466001 0.328125\nv 0.101562 -0.466253 0.328125\nv 0.109375 -0.466542 0.328125\nv 0.117188 -0.46684 0.328125\nv 0.125 -0.467376 0.328125\nv 0.139209 -0.46875 0.328125\nv 0.132812 -0.46819 0.328125\nv 0.140625 -0.46875 0.328763\nv 0.148438 -0.46875 0.332099\nv 0.15625 -0.46875 0.334116\nv 0.164062 -0.46875 0.335742\nv 0.367188 -0.46875 0.334389\nv 0.377811 -0.46875 0.328125\nv 0.375 -0.46875 0.329886\nv 0.382812 -0.463014 0.328125\nv 0.500001 -0.46875 0.328125\nv 0.5 -0.468527 0.328125\nv -0.331762 -0.460938 0.328125\nv -0.226565 -0.460938 0.328125\nv -0.226562 -0.460938 0.328126\nv -0.21875 -0.460938 0.332575\nv 0.375 -0.460938 0.335317\nv 0.3845 -0.460938 0.328125\nv 0.382812 -0.460938 0.329462\nv 0.499963 -0.460938 0.328125\nv 0.5 -0.460938 0.328364\nv -0.331715 -0.453125 0.328125\nv -0.226958 -0.453125 0.328125\nv -0.226562 -0.453125 0.328403\nv -0.21875 -0.453125 0.333508\nv 0.388072 -0.453125 0.328125\nv 0.382812 -0.453125 0.334092\nv 0.499937 -0.453125 0.328125\nv 0.5 -0.449731 0.328125\nv 0.5 -0.453125 0.328509\nv -0.331513 -0.445312 0.328125\nv -0.226727 -0.445312 0.328125\nv -0.226562 -0.44404 0.328125\nv -0.226562 -0.445312 0.328255\nv -0.21875 -0.445312 0.334606\nv 0.389516 -0.445312 0.328125\nv 0.500075 -0.445312 0.328125\nv -0.331269 -0.4375 0.328125\nv -0.225769 -0.4375 0.328125\nv -0.21875 -0.4375 0.335616\nv 0.390246 -0.4375 0.328125\nv 0.390625 -0.43565 0.328125\nv 0.500328 -0.4375 0.328125\nv -0.331019 -0.429688 0.328125\nv -0.225937 -0.429688 0.328125\nv 0.391795 -0.429688 0.328125\nv 0.390625 -0.429688 0.330043\nv 0.50057 -0.429688 0.328125\nv -0.330746 -0.421875 0.328125\nv -0.225939 -0.421875 0.328125\nv 0.393569 -0.421875 0.328125\nv 0.390625 -0.421875 0.33346\nv 0.500853 -0.421875 0.328125\nv -0.330369 -0.414062 0.328125\nv -0.225551 -0.414062 0.328125\nv 0.394769 -0.414062 0.328125\nv 0.50107 -0.414062 0.328125\nv -0.329677 -0.40625 0.328125\nv -0.225045 -0.40625 0.328125\nv 0.39546 -0.40625 0.328125\nv 0.501152 -0.40625 0.328125\nv -0.329063 -0.398438 0.328125\nv -0.224753 -0.398438 0.328125\nv 0.395198 -0.398438 0.328125\nv 0.501387 -0.398438 0.328125\nv -0.328557 -0.390625 0.328125\nv -0.328125 -0.384025 0.328125\nv -0.224152 -0.390625 0.328125\nv 0.394975 -0.390625 0.328125\nv 0.501623 -0.390625 0.328125\nv -0.328023 -0.382812 0.328125\nv -0.328125 -0.382812 0.3295\nv -0.22362 -0.382812 0.328125\nv 0.394383 -0.382812 0.328125\nv 0.390625 -0.382812 0.335789\nv 0.501829 -0.382812 0.328125\nv -0.327258 -0.375 0.328125\nv -0.223111 -0.375 0.328125\nv 0.393616 -0.375 0.328125\nv 0.390625 -0.375 0.333872\nv 0.501856 -0.375 0.328125\nv -0.326388 -0.367188 0.328125\nv -0.222761 -0.367188 0.328125\nv 0.392852 -0.367188 0.328125\nv 0.390625 -0.367188 0.332365\nv 0.501747 -0.367188 0.328125\nv -0.325509 -0.359375 0.328125\nv -0.222483 -0.359375 0.328125\nv 0.391972 -0.359375 0.328125\nv 0.390625 -0.359375 0.330724\nv 0.501792 -0.359375 0.328125\nv -0.324442 -0.351562 0.328125\nv -0.222297 -0.351562 0.328125\nv 0.391485 -0.351562 0.328125\nv 0.390625 -0.351562 0.33016\nv 0.501843 -0.351562 0.328125\nv -0.323386 -0.34375 0.328125\nv -0.222241 -0.34375 0.328125\nv 0.390947 -0.34375 0.328125\nv 0.390625 -0.34375 0.329158\nv 0.501947 -0.34375 0.328125\nv -0.322407 -0.335938 0.328125\nv -0.222423 -0.335938 0.328125\nv 0.390687 -0.335938 0.328125\nv 0.390625 -0.33402 0.328125\nv 0.390625 -0.335938 0.328363\nv 0.502223 -0.335938 0.328125\nv -0.321877 -0.328125 0.328125\nv -0.222603 -0.328125 0.328125\nv 0.390472 -0.328125 0.328125\nv 0.50237 -0.328125 0.328125\nv -0.321472 -0.320312 0.328125\nv -0.222638 -0.320312 0.328125\nv 0.390294 -0.320312 0.328125\nv 0.390625 -0.314009 0.328125\nv 0.502353 -0.320312 0.328125\nv -0.321111 -0.3125 0.328125\nv -0.222667 -0.3125 0.328125\nv 0.390727 -0.3125 0.328125\nv 0.390625 -0.3125 0.329101\nv 0.502454 -0.3125 0.328125\nv -0.320714 -0.304688 0.328125\nv -0.320312 -0.298032 0.328125\nv -0.2228 -0.304688 0.328125\nv 0.391442 -0.304688 0.328125\nv 0.390625 -0.304688 0.335778\nv 0.502566 -0.304688 0.328125\nv -0.320234 -0.296875 0.328125\nv -0.320312 -0.296875 0.328511\nv -0.222824 -0.296875 0.328125\nv 0.391906 -0.296875 0.328125\nv 0.50262 -0.296875 0.328125\nv -0.319695 -0.289062 0.328125\nv -0.320312 -0.289062 0.331044\nv -0.222884 -0.289062 0.328125\nv 0.392211 -0.289062 0.328125\nv 0.502651 -0.289062 0.328125\nv -0.319249 -0.28125 0.328125\nv -0.320312 -0.28125 0.333179\nv -0.223104 -0.28125 0.328125\nv 0.392675 -0.28125 0.328125\nv 0.502458 -0.28125 0.328125\nv -0.318775 -0.273438 0.328125\nv -0.320312 -0.273438 0.335388\nv -0.223385 -0.273438 0.328125\nv 0.392967 -0.273438 0.328125\nv 0.50219 -0.273438 0.328125\nv -0.318207 -0.265625 0.328125\nv -0.223625 -0.265625 0.328125\nv 0.392692 -0.265625 0.328125\nv 0.501964 -0.265625 0.328125\nv -0.317673 -0.257812 0.328125\nv -0.223428 -0.257812 0.328125\nv 0.393044 -0.257812 0.328125\nv 0.501877 -0.257812 0.328125\nv -0.316928 -0.25 0.328125\nv -0.222904 -0.25 0.328125\nv 0.393475 -0.25 0.328125\nv 0.501994 -0.25 0.328125\nv -0.316248 -0.242188 0.328125\nv -0.222406 -0.242188 0.328125\nv 0.393861 -0.242188 0.328125\nv 0.502034 -0.242188 0.328125\nv -0.315924 -0.234375 0.328125\nv -0.221857 -0.234375 0.328125\nv 0.394616 -0.234375 0.328125\nv 0.501979 -0.234375 0.328125\nv -0.315779 -0.226562 0.328125\nv -0.221612 -0.226562 0.328125\nv 0.395285 -0.226562 0.328125\nv 0.502088 -0.226562 0.328125\nv -0.315647 -0.21875 0.328125\nv -0.221356 -0.21875 0.328125\nv 0.395922 -0.21875 0.328125\nv 0.502152 -0.21875 0.328125\nv -0.315465 -0.210938 0.328125\nv -0.221195 -0.210938 0.328125\nv 0.396362 -0.210938 0.328125\nv 0.502075 -0.210938 0.328125\nv -0.315187 -0.203125 0.328125\nv -0.221092 -0.203125 0.328125\nv 0.396671 -0.203125 0.328125\nv 0.502008 -0.203125 0.328125\nv -0.314422 -0.195312 0.328125\nv -0.22099 -0.195312 0.328125\nv 0.396989 -0.195312 0.328125\nv 0.501881 -0.195312 0.328125\nv -0.313958 -0.1875 0.328125\nv -0.220907 -0.1875 0.328125\nv 0.396954 -0.1875 0.328125\nv 0.501525 -0.1875 0.328125\nv -0.313535 -0.179688 0.328125\nv -0.220904 -0.179688 0.328125\nv 0.396791 -0.179688 0.328125\nv 0.501111 -0.179688 0.328125\nv -0.312999 -0.171875 0.328125\nv -0.221302 -0.171875 0.328125\nv 0.396823 -0.171875 0.328125\nv 0.500855 -0.171875 0.328125\nv -0.312513 -0.164062 0.328125\nv -0.3125 -0.163806 0.328125\nv -0.221712 -0.164062 0.328125\nv 0.396821 -0.164062 0.328125\nv 0.500775 -0.164062 0.328125\nv -0.312076 -0.15625 0.328125\nv -0.3125 -0.15625 0.330334\nv -0.221883 -0.15625 0.328125\nv 0.396478 -0.15625 0.328125\nv 0.500684 -0.15625 0.328125\nv -0.311345 -0.148438 0.328125\nv -0.3125 -0.148438 0.333628\nv -0.222237 -0.148438 0.328125\nv 0.396106 -0.148438 0.328125\nv 0.500395 -0.148438 0.328125\nv 0.5 -0.143618 0.328125\nv -0.310575 -0.140625 0.328125\nv -0.3125 -0.140625 0.335855\nv -0.222886 -0.140625 0.328125\nv 0.395253 -0.140625 0.328125\nv 0.499728 -0.140625 0.328125\nv 0.5 -0.140625 0.332975\nv -0.309955 -0.132812 0.328125\nv -0.223451 -0.132812 0.328125\nv 0.394569 -0.132812 0.328125\nv 0.49905 -0.132812 0.328125\nv -0.309561 -0.125 0.328125\nv -0.22392 -0.125 0.328125\nv 0.393968 -0.125 0.328125\nv 0.498222 -0.125 0.328125\nv -0.309356 -0.117188 0.328125\nv -0.225144 -0.117188 0.328125\nv -0.226562 -0.110603 0.328125\nv 0.393677 -0.117188 0.328125\nv 0.497603 -0.117188 0.328125\nv -0.309338 -0.109375 0.328125\nv -0.226858 -0.109375 0.328125\nv -0.226562 -0.109375 0.328405\nv 0.39363 -0.109375 0.328125\nv 0.390625 -0.109375 0.333141\nv 0.497475 -0.109375 0.328125\nv -0.309188 -0.101562 0.328125\nv -0.228616 -0.101562 0.328125\nv -0.226562 -0.101562 0.329594\nv -0.21875 -0.101562 0.335202\nv 0.393447 -0.101562 0.328125\nv 0.390625 -0.101562 0.331144\nv 0.497894 -0.101562 0.328125\nv -0.30944 -0.09375 0.328125\nv -0.229402 -0.09375 0.328125\nv -0.226562 -0.09375 0.329739\nv -0.21875 -0.09375 0.334418\nv 0.392629 -0.09375 0.328125\nv 0.390625 -0.09375 0.330065\nv 0.499107 -0.09375 0.328125\nv 0.5 -0.0865585 0.328125\nv -0.309984 -0.0859375 0.328125\nv -0.22945 -0.0859375 0.328125\nv -0.226562 -0.0859375 0.329626\nv -0.21875 -0.0859375 0.333154\nv 0.382812 -0.0859375 0.334431\nv 0.391432 -0.0859375 0.328125\nv 0.390625 -0.0813438 0.328125\nv 0.390625 -0.0859375 0.328798\nv 0.50007 -0.0859375 0.328125\nv -0.310681 -0.078125 0.328125\nv -0.226935 -0.078125 0.328125\nv -0.226562 -0.0772936 0.328125\nv -0.226562 -0.078125 0.328276\nv -0.21875 -0.078125 0.331873\nv -0.210938 -0.078125 0.335143\nv 0.39005 -0.078125 0.328125\nv 0.382812 -0.078125 0.333045\nv 0.501102 -0.078125 0.328125\nv -0.311175 -0.0703125 0.328125\nv -0.223301 -0.0703125 0.328125\nv -0.21875 -0.0703125 0.329745\nv -0.210938 -0.0703125 0.331261\nv -0.203125 -0.0703125 0.332499\nv -0.195312 -0.0703125 0.334252\nv -0.1875 -0.0703125 0.33559\nv 0.375 -0.0703125 0.335258\nv 0.387227 -0.0703125 0.328125\nv 0.382812 -0.0703125 0.33096\nv 0.502488 -0.0703125 0.328125\nv -0.311181 -0.0625 0.328125\nv -0.219477 -0.0625 0.328125\nv -0.21875 -0.0576859 0.328125\nv -0.21875 -0.0625 0.328371\nv -0.210938 -0.0625 0.329006\nv -0.203125 -0.0625 0.329767\nv -0.195312 -0.0625 0.330614\nv -0.1875 -0.0625 0.331437\nv -0.179688 -0.0625 0.332217\nv -0.171875 -0.0625 0.332659\nv -0.164062 -0.0625 0.332887\nv -0.15625 -0.0625 0.333607\nv -0.148438 -0.0625 0.334543\nv -0.140625 -0.0625 0.335093\nv -0.132812 -0.0625 0.334929\nv -0.125 -0.0625 0.334961\nv -0.117188 -0.0625 0.334938\nv -0.109375 -0.0625 0.33483\nv -0.101562 -0.0625 0.334811\nv -0.09375 -0.0625 0.334797\nv -0.0859375 -0.0625 0.334653\nv -0.078125 -0.0625 0.33446\nv -0.0703125 -0.0625 0.334307\nv -0.0625 -0.0625 0.334166\nv -0.0546875 -0.0625 0.333983\nv -0.046875 -0.0625 0.333625\nv -0.0390625 -0.0625 0.333247\nv -0.03125 -0.0625 0.332637\nv -0.0234375 -0.0625 0.331722\nv -0.015625 -0.0563912 0.328125\nv -0.015625 -0.0625 0.330732\nv -0.0078125 -0.058956 0.328125\nv -0.0078125 -0.0625 0.329855\nv 0 -0.0593681 0.328125\nv 0 -0.0625 0.329636\nv 0.0078125 -0.0579451 0.328125\nv 0.0078125 -0.0625 0.330099\nv 0.015625 -0.0558082 0.328125\nv 0.015625 -0.0625 0.330589\nv 0.0234375 -0.0555971 0.328125\nv 0.0234375 -0.0625 0.330632\nv 0.03125 -0.0558282 0.328125\nv 0.03125 -0.0625 0.33059\nv 0.0390625 -0.0558362 0.328125\nv 0.0390625 -0.0625 0.330502\nv 0.046875 -0.0552618 0.328125\nv 0.046875 -0.0625 0.330579\nv 0.0546875 -0.054904 0.328125\nv 0.0546875 -0.0625 0.330637\nv 0.0625 -0.0548663 0.328125\nv 0.0625 -0.0625 0.330621\nv 0.0703125 -0.0549438 0.328125\nv 0.0703125 -0.0625 0.330585\nv 0.078125 -0.0550214 0.328125\nv 0.078125 -0.0625 0.330569\nv 0.0859375 -0.0625 0.330747\nv 0.09375 -0.0625 0.330916\nv 0.101562 -0.0625 0.331008\nv 0.109375 -0.0625 0.331204\nv 0.117188 -0.0625 0.331453\nv 0.125 -0.0625 0.331607\nv 0.132812 -0.0625 0.331672\nv 0.140625 -0.0625 0.331863\nv 0.148438 -0.0625 0.332167\nv 0.15625 -0.0625 0.332414\nv 0.164062 -0.0625 0.332592\nv 0.171875 -0.0625 0.332657\nv 0.179688 -0.0625 0.332692\nv 0.1875 -0.0625 0.332906\nv 0.195312 -0.0625 0.333222\nv 0.203125 -0.0625 0.333535\nv 0.210938 -0.0625 0.333913\nv 0.21875 -0.0625 0.33437\nv 0.226562 -0.0625 0.334973\nv 0.234375 -0.0625 0.33551\nv 0.242188 -0.0625 0.335912\nv 0.34375 -0.0625 0.335433\nv 0.351562 -0.0625 0.334649\nv 0.359375 -0.0625 0.333528\nv 0.367188 -0.0625 0.332345\nv 0.375 -0.0625 0.331391\nv 0.38288 -0.0625 0.328125\nv 0.382812 -0.0610749 0.328125\nv 0.382812 -0.0625 0.328163\nv 0.504045 -0.0625 0.328125\nv -0.311044 -0.0546875 0.328125\nv -0.216866 -0.0546875 0.328125\nv -0.210938 -0.0498635 0.328125\nv -0.210938 -0.0546875 0.328584\nv -0.203125 -0.0546875 0.329145\nv -0.195312 -0.0546875 0.329812\nv -0.1875 -0.0546875 0.330047\nv -0.179688 -0.0546875 0.330376\nv -0.171875 -0.0546875 0.330749\nv -0.164062 -0.0546875 0.331056\nv -0.15625 -0.0546875 0.33187\nv -0.148438 -0.0546875 0.332816\nv -0.140625 -0.0546875 0.333293\nv -0.132812 -0.0546875 0.333002\nv -0.125 -0.0546875 0.333131\nv -0.117188 -0.0546875 0.333169\nv -0.109375 -0.0546875 0.333037\nv -0.101562 -0.0546875 0.332857\nv -0.09375 -0.0546875 0.332619\nv -0.0859375 -0.0546875 0.332379\nv -0.078125 -0.0546875 0.332125\nv -0.0703125 -0.0546875 0.331919\nv -0.0625 -0.0546875 0.331679\nv -0.0546875 -0.0546875 0.331417\nv -0.046875 -0.0546875 0.331076\nv -0.0390625 -0.0546875 0.330598\nv -0.03125 -0.0489926 0.328125\nv -0.03125 -0.0546875 0.329813\nv -0.0194225 -0.0546875 0.328125\nv -0.0234375 -0.0527307 0.328125\nv -0.0234375 -0.0546875 0.328775\nv 0.0810828 -0.0546875 0.328125\nv 0.0859375 -0.0542537 0.328125\nv 0.0859375 -0.0546875 0.328278\nv 0.09375 -0.0538615 0.328125\nv 0.09375 -0.0546875 0.328422\nv 0.101562 -0.0537397 0.328125\nv 0.101562 -0.0546875 0.328478\nv 0.109375 -0.0533834 0.328125\nv 0.109375 -0.0546875 0.328592\nv 0.117188 -0.0529633 0.328125\nv 0.117188 -0.0546875 0.328714\nv 0.125 -0.0526055 0.328125\nv 0.125 -0.0546875 0.328825\nv 0.132812 -0.0521108 0.328125\nv 0.132812 -0.0546875 0.328903\nv 0.140625 -0.0511679 0.328125\nv 0.140625 -0.0546875 0.329169\nv 0.148438 -0.0499914 0.328125\nv 0.148438 -0.0546875 0.329447\nv 0.15625 -0.0488462 0.328125\nv 0.15625 -0.0546875 0.329649\nv 0.164062 -0.0475612 0.328125\nv 0.164062 -0.0546875 0.329828\nv 0.171875 -0.0546875 0.32988\nv 0.179688 -0.0546875 0.329955\nv 0.1875 -0.0546875 0.330084\nv 0.195312 -0.0546875 0.330264\nv 0.203125 -0.0546875 0.330501\nv 0.210938 -0.0546875 0.330787\nv 0.21875 -0.0546875 0.331236\nv 0.226562 -0.0546875 0.331773\nv 0.234375 -0.0546875 0.332224\nv 0.242188 -0.0546875 0.332593\nv 0.25 -0.0546875 0.332962\nv 0.257812 -0.0546875 0.333361\nv 0.265625 -0.0546875 0.33381\nv 0.273438 -0.0546875 0.334329\nv 0.28125 -0.0546875 0.334844\nv 0.289062 -0.0546875 0.335354\nv 0.296875 -0.0546875 0.335556\nv 0.304688 -0.0546875 0.335327\nv 0.3125 -0.0546875 0.33539\nv 0.320312 -0.0546875 0.335169\nv 0.328125 -0.0546875 0.334707\nv 0.335938 -0.0546875 0.334379\nv 0.34375 -0.0546875 0.33389\nv 0.351562 -0.0546875 0.333155\nv 0.359375 -0.0546875 0.332042\nv 0.367188 -0.0546875 0.330914\nv 0.382218 -0.0546875 0.328125\nv 0.375 -0.0546875 0.330081\nv 0.504726 -0.0546875 0.328125\nv -0.310755 -0.046875 0.328125\nv -0.20459 -0.046875 0.328125\nv -0.203125 -0.046412 0.328125\nv -0.203125 -0.046875 0.328189\nv -0.195312 -0.0415884 0.328125\nv -0.195312 -0.046875 0.32879\nv -0.1875 -0.0420287 0.328125\nv -0.1875 -0.046875 0.328822\nv -0.179688 -0.0423907 0.328125\nv -0.179688 -0.046875 0.328752\nv -0.171875 -0.0423076 0.328125\nv -0.171875 -0.046875 0.328787\nv -0.164062 -0.0413183 0.328125\nv -0.164062 -0.046875 0.329254\nv -0.15625 -0.046875 0.330165\nv -0.148438 -0.046875 0.331142\nv -0.140625 -0.046875 0.331483\nv -0.132812 -0.046875 0.33122\nv -0.125 -0.046875 0.331165\nv -0.117188 -0.046875 0.331227\nv -0.109375 -0.046875 0.331273\nv -0.101562 -0.046875 0.331073\nv -0.09375 -0.046875 0.33077\nv -0.0859375 -0.046875 0.330464\nv -0.078125 -0.046875 0.330163\nv -0.0703125 -0.046875 0.329897\nv -0.0625 -0.046875 0.329609\nv -0.0546875 -0.0400475 0.328125\nv -0.0546875 -0.046875 0.329244\nv -0.046875 -0.0421068 0.328125\nv -0.046875 -0.046875 0.328878\nv -0.0363335 -0.046875 0.328125\nv -0.0390625 -0.0449892 0.328125\nv -0.0390625 -0.046875 0.328409\nv 0.170571 -0.046875 0.328125\nv 0.171875 -0.0466949 0.328125\nv 0.171875 -0.046875 0.328152\nv 0.179688 -0.0462766 0.328125\nv 0.179688 -0.046875 0.328217\nv 0.1875 -0.0454703 0.328125\nv 0.1875 -0.046875 0.328354\nv 0.195312 -0.0447552 0.328125\nv 0.195312 -0.046875 0.328473\nv 0.203125 -0.0437488 0.328125\nv 0.203125 -0.046875 0.328631\nv 0.210938 -0.0425224 0.328125\nv 0.210938 -0.046875 0.32884\nv 0.21875 -0.0400944 0.328125\nv 0.21875 -0.046875 0.329241\nv 0.226562 -0.046875 0.329766\nv 0.234375 -0.046875 0.330203\nv 0.242188 -0.046875 0.330564\nv 0.25 -0.046875 0.330934\nv 0.257812 -0.046875 0.331401\nv 0.265625 -0.046875 0.331855\nv 0.273438 -0.046875 0.332301\nv 0.28125 -0.046875 0.332793\nv 0.289062 -0.046875 0.33333\nv 0.296875 -0.046875 0.333671\nv 0.304688 -0.046875 0.333915\nv 0.3125 -0.046875 0.334141\nv 0.320312 -0.046875 0.334103\nv 0.328125 -0.046875 0.333623\nv 0.335938 -0.046875 0.333276\nv 0.34375 -0.046875 0.332815\nv 0.351562 -0.046875 0.332133\nv 0.359375 -0.046875 0.331165\nv 0.367188 -0.046875 0.330157\nv 0.379754 -0.046875 0.328125\nv 0.375 -0.0396095 0.328125\nv 0.375 -0.046875 0.329149\nv 0.50534 -0.046875 0.328125\nv -0.310524 -0.0390625 0.328125\nv -0.159582 -0.0390625 0.328125\nv -0.15625 -0.0357283 0.328125\nv -0.15625 -0.0390625 0.328447\nv -0.148438 -0.0390625 0.329501\nv -0.140625 -0.0390625 0.329989\nv -0.132812 -0.0390625 0.329919\nv -0.125 -0.0390625 0.329936\nv -0.117188 -0.0390625 0.329907\nv -0.109375 -0.0390625 0.329808\nv -0.101562 -0.0390625 0.329719\nv -0.09375 -0.0390625 0.329458\nv -0.0859375 -0.0390625 0.329163\nv -0.078125 -0.0390625 0.328811\nv -0.0703125 -0.0390625 0.328492\nv -0.059089 -0.0390625 0.328125\nv -0.0625 -0.0360293 0.328125\nv -0.0625 -0.0390625 0.328239\nv 0.220939 -0.0390625 0.328125\nv 0.226562 -0.0390625 0.328524\nv 0.234375 -0.0390625 0.329123\nv 0.242188 -0.0390625 0.329736\nv 0.25 -0.0390625 0.330331\nv 0.257812 -0.0390625 0.330816\nv 0.265625 -0.0390625 0.331233\nv 0.273438 -0.0390625 0.331659\nv 0.28125 -0.0390625 0.332144\nv 0.289062 -0.0390625 0.332526\nv 0.296875 -0.0390625 0.332811\nv 0.304688 -0.0390625 0.333031\nv 0.3125 -0.0390625 0.333347\nv 0.320312 -0.0390625 0.333458\nv 0.328125 -0.0390625 0.333102\nv 0.335938 -0.0390625 0.332576\nv 0.34375 -0.0390625 0.331809\nv 0.351562 -0.0390625 0.330983\nv 0.359375 -0.0390625 0.329989\nv 0.374362 -0.0390625 0.328125\nv 0.367188 -0.0390625 0.328964\nv 0.50492 -0.0390625 0.328125\nv -0.310474 -0.03125 0.328125\nv -0.150805 -0.03125 0.328125\nv -0.148438 -0.0282619 0.328125\nv -0.148438 -0.03125 0.328306\nv -0.140625 -0.0242411 0.328125\nv -0.140625 -0.03125 0.3286\nv -0.132812 -0.0251255 0.328125\nv -0.132812 -0.03125 0.328674\nv -0.125 -0.0236303 0.328125\nv -0.125 -0.03125 0.328865\nv -0.117188 -0.03125 0.328973\nv -0.109375 -0.03125 0.328975\nv -0.101562 -0.0244167 0.328125\nv -0.101562 -0.03125 0.328906\nv -0.09375 -0.0265711 0.328125\nv -0.09375 -0.03125 0.328798\nv -0.0859375 -0.0279691 0.328125\nv -0.0859375 -0.03125 0.328612\nv -0.078125 -0.0293972 0.328125\nv -0.078125 -0.03125 0.328365\nv -0.0680198 -0.03125 0.328125\nv -0.0703125 -0.0307997 0.328125\nv -0.0703125 -0.03125 0.328184\nv 0.221642 -0.03125 0.328125\nv 0.226562 -0.03125 0.328644\nv 0.234375 -0.03125 0.329307\nv 0.242188 -0.03125 0.329853\nv 0.25 -0.03125 0.330421\nv 0.257812 -0.03125 0.330823\nv 0.265625 -0.03125 0.331214\nv 0.273438 -0.03125 0.331641\nv 0.28125 -0.03125 0.332072\nv 0.289062 -0.03125 0.332433\nv 0.296875 -0.03125 0.332631\nv 0.304688 -0.03125 0.332735\nv 0.3125 -0.03125 0.332994\nv 0.320312 -0.03125 0.333111\nv 0.328125 -0.03125 0.332698\nv 0.335938 -0.03125 0.33237\nv 0.34375 -0.03125 0.331995\nv 0.351562 -0.03125 0.331136\nv 0.359375 -0.03125 0.329588\nv 0.368172 -0.03125 0.328125\nv 0.367188 -0.03125 0.328238\nv 0.504158 -0.03125 0.328125\nv -0.31066 -0.0234375 0.328125\nv -0.3125 -0.0234375 0.335604\nv -0.124047 -0.0234375 0.328125\nv -0.117188 -0.0222647 0.328125\nv -0.117188 -0.0234375 0.328249\nv -0.107126 -0.0234375 0.328125\nv -0.109375 -0.0230678 0.328125\nv -0.109375 -0.0234375 0.328167\nv 0.2247 -0.0234375 0.328125\nv 0.226562 -0.0218129 0.328125\nv 0.226562 -0.0234375 0.328314\nv 0.234375 -0.0234375 0.328999\nv 0.242188 -0.0234375 0.329548\nv 0.25 -0.0234375 0.33005\nv 0.257812 -0.0234375 0.330414\nv 0.265625 -0.0234375 0.330748\nv 0.273438 -0.0234375 0.331211\nv 0.28125 -0.0234375 0.331694\nv 0.289062 -0.0234375 0.33206\nv 0.296875 -0.0234375 0.33227\nv 0.304688 -0.0234375 0.332468\nv 0.3125 -0.0234375 0.332752\nv 0.320312 -0.0234375 0.333128\nv 0.328125 -0.0234375 0.332985\nv 0.335938 -0.0234375 0.332592\nv 0.34375 -0.0234375 0.332002\nv 0.351562 -0.0234375 0.331274\nv 0.359375 -0.0234375 0.329962\nv 0.367791 -0.0234375 0.328125\nv 0.367188 -0.0214131 0.328125\nv 0.367188 -0.0234375 0.328244\nv 0.503337 -0.0234375 0.328125\nv -0.310892 -0.015625 0.328125\nv -0.3125 -0.015625 0.3346\nv 0.234031 -0.015625 0.328125\nv 0.234375 -0.0153685 0.328125\nv 0.234375 -0.015625 0.328158\nv 0.242188 -0.0109274 0.328125\nv 0.242188 -0.015625 0.32872\nv 0.25 -0.00858514 0.328125\nv 0.25 -0.015625 0.329091\nv 0.257812 -0.015625 0.329432\nv 0.265625 -0.015625 0.329722\nv 0.273438 -0.015625 0.330129\nv 0.28125 -0.015625 0.330541\nv 0.289062 -0.015625 0.330892\nv 0.296875 -0.015625 0.331052\nv 0.304688 -0.015625 0.331102\nv 0.3125 -0.015625 0.331433\nv 0.320312 -0.015625 0.331928\nv 0.328125 -0.015625 0.332165\nv 0.335938 -0.015625 0.332057\nv 0.34375 -0.015625 0.331591\nv 0.351562 -0.015625 0.330728\nv 0.365689 -0.015625 0.328125\nv 0.359375 -0.00836191 0.328125\nv 0.359375 -0.015625 0.329377\nv 0.502177 -0.015625 0.328125\nv -0.310859 -0.0078125 0.328125\nv -0.3125 -0.0078125 0.334758\nv 0.25293 -0.0078125 0.328125\nv 0.257812 -0.00696076 0.328125\nv 0.257812 -0.0078125 0.328319\nv 0.265625 -0.00624742 0.328125\nv 0.265625 -0.0078125 0.328505\nv 0.273438 -0.00514788 0.328125\nv 0.273438 -0.0078125 0.328777\nv 0.28125 -0.0036237 0.328125\nv 0.28125 -0.0078125 0.329102\nv 0.289062 -0.00193214 0.328125\nv 0.289062 -0.0078125 0.32944\nv 0.296875 -0.00133058 0.328125\nv 0.296875 -0.0078125 0.329644\nv 0.304688 -0.00146478 0.328125\nv 0.304688 -0.0078125 0.329678\nv 0.3125 -0.000720152 0.328125\nv 0.3125 -0.0078125 0.329958\nv 0.320312 -6.58762e-05 0.328125\nv 0.320312 -0.0078125 0.330323\nv 0.328125 -0.0078125 0.33058\nv 0.335938 -0.0078125 0.330478\nv 0.34375 -0.00113092 0.328125\nv 0.34375 -0.0078125 0.330181\nv 0.358773 -0.0078125 0.328125\nv 0.351562 -0.00390298 0.328125\nv 0.351562 -0.0078125 0.329278\nv 0.501553 -0.0078125 0.328125\nv -0.310372 0 0.328125\nv 0.321176 0 0.328125\nv 0.328125 0.000627572 0.328125\nv 0.328125 0 0.328287\nv 0.338217 0 0.328125\nv 0.335938 0.000659775 0.328125\nv 0.335938 0 0.328271\nv 0.501795 0 0.328125\nv -0.310236 0.0078125 0.328125\nv 0.501942 0.0078125 0.328125\nv -0.309991 0.015625 0.328125\nv 0.501969 0.015625 0.328125\nv -0.30975 0.0234375 0.328125\nv 0.501628 0.0234375 0.328125\nv -0.30951 0.03125 0.328125\nv 0.50015 0.03125 0.328125\nv 0.5 0.0321265 0.328125\nv -0.309206 0.0390625 0.328125\nv 0.49861 0.0390625 0.328125\nv 0.5 0.0390625 0.334881\nv -0.308844 0.046875 0.328125\nv 0.494212 0.046875 0.328125\nv 0.492188 0.0493324 0.328125\nv -0.307909 0.0546875 0.328125\nv 0.476562 0.0602789 0.328125\nv 0.486243 0.0546875 0.328125\nv 0.484375 0.0561127 0.328125\nv -0.306857 0.0625 0.328125\nv 0.0859375 0.0701415 0.328125\nv 0.09375 0.0701763 0.328125\nv 0.101562 0.0702127 0.328125\nv 0.109375 0.0702277 0.328125\nv 0.117188 0.0702617 0.328125\nv 0.125 0.070288 0.328125\nv 0.132812 0.0702451 0.328125\nv 0.140625 0.0701941 0.328125\nv 0.148438 0.0701369 0.328125\nv 0.15625 0.0701487 0.328125\nv 0.164062 0.0701547 0.328125\nv 0.171875 0.0701654 0.328125\nv 0.179688 0.0701919 0.328125\nv 0.1875 0.0701682 0.328125\nv 0.195312 0.0701453 0.328125\nv 0.203125 0.0701214 0.328125\nv 0.210938 0.0700823 0.328125\nv 0.21875 0.070042 0.328125\nv 0.226562 0.0700242 0.328125\nv 0.234375 0.0699757 0.328125\nv 0.242188 0.069999 0.328125\nv 0.25 0.0700403 0.328125\nv 0.257812 0.0701962 0.328125\nv 0.265625 0.0702105 0.328125\nv 0.273438 0.070163 0.328125\nv 0.28125 0.0701192 0.328125\nv 0.289062 0.0701196 0.328125\nv 0.296875 0.0701765 0.328125\nv 0.304688 0.0701309 0.328125\nv 0.3125 0.0700812 0.328125\nv 0.320312 0.0700846 0.328125\nv 0.328125 0.0700833 0.328125\nv 0.335938 0.0700067 0.328125\nv 0.34375 0.0699026 0.328125\nv 0.351562 0.0697612 0.328125\nv 0.359375 0.0695857 0.328125\nv 0.367188 0.0694228 0.328125\nv 0.375 0.0693442 0.328125\nv 0.382812 0.0694978 0.328125\nv 0.390625 0.0693318 0.328125\nv 0.398438 0.0691249 0.328125\nv 0.40625 0.0692439 0.328125\nv 0.414062 0.0692977 0.328125\nv 0.421875 0.069309 0.328125\nv 0.429688 0.0693933 0.328125\nv 0.4375 0.0693847 0.328125\nv 0.445312 0.0696681 0.328125\nv 0.453125 0.0688111 0.328125\nv 0.460938 0.0664905 0.328125\nv 0.471778 0.0625 0.328125\nv 0.46875 0.0638339 0.328125\nv -0.306779 0.0703125 0.328125\nv -0.203125 0.0776849 0.328125\nv -0.195312 0.0764821 0.328125\nv -0.1875 0.074884 0.328125\nv -0.179688 0.0738877 0.328125\nv -0.171875 0.0732244 0.328125\nv -0.164062 0.0729073 0.328125\nv -0.15625 0.0726874 0.328125\nv -0.148438 0.07257 0.328125\nv -0.140625 0.0726393 0.328125\nv -0.132812 0.0726957 0.328125\nv -0.125 0.0728475 0.328125\nv -0.117188 0.0729919 0.328125\nv -0.109375 0.0731259 0.328125\nv -0.101562 0.0732344 0.328125\nv -0.09375 0.0731813 0.328125\nv -0.0859375 0.0730714 0.328125\nv -0.078125 0.0729856 0.328125\nv -0.0703125 0.0728796 0.328125\nv -0.0625 0.0727922 0.328125\nv -0.0546875 0.0727323 0.328125\nv -0.046875 0.0725953 0.328125\nv -0.0390625 0.0723773 0.328125\nv -0.03125 0.0721299 0.328125\nv -0.0234375 0.0719347 0.328125\nv -0.015625 0.0717792 0.328125\nv -0.0078125 0.0716846 0.328125\nv 0 0.0715927 0.328125\nv 0.0078125 0.0714926 0.328125\nv 0.015625 0.0713783 0.328125\nv 0.0234375 0.0712221 0.328125\nv 0.03125 0.0709912 0.328125\nv 0.03125 0.0703125 0.33464\nv 0.0390625 0.0707788 0.328125\nv 0.0390625 0.0703125 0.332545\nv 0.046875 0.070603 0.328125\nv 0.046875 0.0703125 0.331025\nv 0.0546875 0.0705388 0.328125\nv 0.0546875 0.0703125 0.330393\nv 0.0625 0.0704405 0.328125\nv 0.0625 0.0703125 0.329561\nv 0.0703125 0.0704504 0.328125\nv 0.0703125 0.0703125 0.329742\nv 0.0788096 0.0703125 0.328125\nv 0.078125 0.0703287 0.328125\nv 0.078125 0.0703125 0.328391\nv -0.307345 0.078125 0.328125\nv -0.205671 0.078125 0.328125\nv -0.210938 0.0795407 0.328125\nv -0.203125 0.078125 0.331074\nv -0.3079 0.0859375 0.328125\nv -0.218158 0.0859375 0.328125\nv -0.21875 0.0871327 0.328125\nv -0.308783 0.09375 0.328125\nv -0.221106 0.09375 0.328125\nv -0.30926 0.101562 0.328125\nv -0.222473 0.101562 0.328125\nv -0.309444 0.109375 0.328125\nv -0.221887 0.109375 0.328125\nv -0.309582 0.117188 0.328125\nv -0.221453 0.117188 0.328125\nv -0.309803 0.125 0.328125\nv -0.22127 0.125 0.328125\nv -0.309944 0.132812 0.328125\nv -0.220972 0.132812 0.328125\nv -0.31021 0.140625 0.328125\nv -0.220769 0.140625 0.328125\nv -0.310801 0.148438 0.328125\nv -0.3125 0.148438 0.333898\nv -0.221165 0.148438 0.328125\nv -0.311354 0.15625 0.328125\nv -0.3125 0.15625 0.331702\nv -0.221862 0.15625 0.328125\nv -0.311999 0.164062 0.328125\nv -0.3125 0.169256 0.328125\nv -0.3125 0.164062 0.329653\nv -0.223006 0.164062 0.328125\nv -0.312777 0.171875 0.328125\nv -0.223334 0.171875 0.328125\nv -0.313698 0.179688 0.328125\nv -0.223196 0.179688 0.328125\nv -0.314592 0.1875 0.328125\nv -0.222929 0.1875 0.328125\nv -0.315567 0.195312 0.328125\nv -0.222785 0.195312 0.328125\nv -0.316431 0.203125 0.328125\nv -0.22268 0.203125 0.328125\nv -0.317148 0.210938 0.328125\nv -0.222526 0.210938 0.328125\nv -0.317916 0.21875 0.328125\nv -0.320312 0.21875 0.33549\nv -0.222324 0.21875 0.328125\nv -0.318541 0.226562 0.328125\nv -0.320312 0.226562 0.333591\nv -0.22231 0.226562 0.328125\nv -0.318669 0.234375 0.328125\nv -0.320312 0.234375 0.333411\nv -0.222572 0.234375 0.328125\nv -0.318373 0.242188 0.328125\nv -0.320312 0.242188 0.33446\nv -0.223128 0.242188 0.328125\nv -0.318128 0.25 0.328125\nv -0.320312 0.25 0.335349\nv -0.223833 0.25 0.328125\nv -0.317814 0.257812 0.328125\nv -0.224532 0.257812 0.328125\nv -0.317585 0.265625 0.328125\nv -0.225324 0.265625 0.328125\nv -0.317458 0.273438 0.328125\nv -0.226407 0.273438 0.328125\nv -0.226562 0.274875 0.328125\nv -0.317215 0.28125 0.328125\nv -0.227247 0.28125 0.328125\nv -0.226562 0.28125 0.330201\nv -0.316752 0.289062 0.328125\nv -0.227969 0.289062 0.328125\nv -0.226562 0.289062 0.332283\nv -0.316769 0.296875 0.328125\nv -0.320312 0.296875 0.335182\nv -0.228655 0.296875 0.328125\nv -0.226562 0.296875 0.334131\nv -0.31713 0.304688 0.328125\nv -0.320312 0.304688 0.334214\nv -0.229275 0.304688 0.328125\nv -0.317465 0.3125 0.328125\nv -0.320312 0.3125 0.333232\nv -0.229965 0.3125 0.328125\nv -0.317942 0.320312 0.328125\nv -0.320312 0.320312 0.332281\nv -0.230462 0.320312 0.328125\nv -0.318313 0.328125 0.328125\nv -0.320312 0.328125 0.331535\nv -0.231372 0.328125 0.328125\nv -0.318522 0.335938 0.328125\nv -0.320312 0.335938 0.331189\nv -0.23249 0.335938 0.328125\nv -0.318361 0.34375 0.328125\nv -0.320312 0.34375 0.331329\nv -0.233451 0.34375 0.328125\nv -0.318469 0.351562 0.328125\nv -0.320312 0.351562 0.331029\nv -0.234367 0.351562 0.328125\nv -0.234375 0.351712 0.328125\nv -0.318622 0.359375 0.328125\nv -0.320312 0.359375 0.330663\nv -0.234771 0.359375 0.328125\nv -0.234375 0.359375 0.329636\nv -0.318846 0.367188 0.328125\nv -0.320312 0.367188 0.330278\nv -0.235056 0.367188 0.328125\nv -0.234375 0.367188 0.330622\nv -0.319151 0.375 0.328125\nv -0.320312 0.375 0.329807\nv -0.235332 0.375 0.328125\nv -0.234375 0.375 0.331647\nv -0.319658 0.382812 0.328125\nv -0.320312 0.382812 0.329045\nv -0.235618 0.382812 0.328125\nv -0.234375 0.382812 0.332679\nv -0.320138 0.390625 0.328125\nv -0.320312 0.39373 0.328125\nv -0.320312 0.390625 0.328368\nv -0.235913 0.390625 0.328125\nv -0.234375 0.390625 0.333657\nv -0.320591 0.398438 0.328125\nv -0.236119 0.398438 0.328125\nv -0.234375 0.398438 0.334327\nv -0.321055 0.40625 0.328125\nv -0.236288 0.40625 0.328125\nv -0.234375 0.40625 0.335003\nv -0.321503 0.414062 0.328125\nv -0.236427 0.414062 0.328125\nv -0.234375 0.414062 0.335482\nv -0.321967 0.421875 0.328125\nv -0.236574 0.421875 0.328125\nv -0.234375 0.421875 0.335936\nv -0.322406 0.429688 0.328125\nv -0.236853 0.429688 0.328125\nv -0.322883 0.4375 0.328125\nv -0.237077 0.4375 0.328125\nv -0.323239 0.445312 0.328125\nv -0.237309 0.445312 0.328125\nv -0.323533 0.453125 0.328125\nv -0.328125 0.453125 0.335934\nv -0.23757 0.453125 0.328125\nv -0.323873 0.460938 0.328125\nv -0.328125 0.460938 0.335358\nv -0.237916 0.460938 0.328125\nv -0.324127 0.46875 0.328125\nv -0.328125 0.46875 0.334795\nv -0.238272 0.46875 0.328125\nv -0.324388 0.476562 0.328125\nv -0.328125 0.476562 0.334249\nv -0.238717 0.476562 0.328125\nv -0.324673 0.484375 0.328125\nv -0.328125 0.484375 0.333795\nv -0.23916 0.484375 0.328125\nv -0.325377 0.492188 0.328125\nv -0.328125 0.492188 0.332546\nv -0.239528 0.492188 0.328125\nv -0.326245 0.5 0.328125\nv -0.328125 0.5 0.331157\nv -0.24001 0.5 0.328125\nv -0.327261 0.507812 0.328125\nv -0.328125 0.514089 0.328125\nv -0.328125 0.507812 0.329571\nv -0.240674 0.507812 0.328125\nv -0.328336 0.515625 0.328125\nv -0.241383 0.515625 0.328125\nv -0.329283 0.523438 0.328125\nv -0.242054 0.523438 0.328125\nv -0.242188 0.525013 0.328125\nv -0.330117 0.53125 0.328125\nv -0.242839 0.53125 0.328125\nv -0.242188 0.53125 0.330265\nv -0.330905 0.539062 0.328125\nv -0.243599 0.539062 0.328125\nv -0.242188 0.539062 0.332843\nv -0.331591 0.546875 0.328125\nv -0.2443 0.546875 0.328125\nv -0.242188 0.546875 0.335072\nv -0.332229 0.554688 0.328125\nv -0.335938 0.554688 0.33538\nv -0.244986 0.554688 0.328125\nv -0.332808 0.5625 0.328125\nv -0.335938 0.5625 0.33432\nv -0.245701 0.5625 0.328125\nv -0.333256 0.570312 0.328125\nv -0.335938 0.570312 0.33349\nv -0.246467 0.570312 0.328125\nv -0.333691 0.578125 0.328125\nv -0.335938 0.578125 0.332662\nv -0.247169 0.578125 0.328125\nv -0.334019 0.585938 0.328125\nv -0.335938 0.585938 0.332177\nv -0.247837 0.585938 0.328125\nv -0.334289 0.59375 0.328125\nv -0.335938 0.59375 0.331806\nv -0.248471 0.59375 0.328125\nv -0.334645 0.601562 0.328125\nv -0.335938 0.601562 0.33111\nv -0.249048 0.601562 0.328125\nv -0.335246 0.609375 0.328125\nv -0.335938 0.614222 0.328125\nv -0.335938 0.609375 0.329669\nv -0.249527 0.609375 0.328125\nv -0.336394 0.617188 0.328125\nv -0.249887 0.617188 0.328125\nv -0.337763 0.625 0.328125\nv -0.249725 0.625 0.328125\nv -0.25 0.628755 0.328125\nv -0.339006 0.632812 0.328125\nv -0.250303 0.632812 0.328125\nv -0.25 0.632812 0.330566\nv -0.339744 0.640625 0.328125\nv -0.251352 0.640625 0.328125\nv -0.3407 0.648438 0.328125\nv -0.252246 0.648438 0.328125\nv -0.341735 0.65625 0.328125\nv -0.34375 0.65625 0.333768\nv -0.253145 0.65625 0.328125\nv -0.342365 0.664062 0.328125\nv -0.34375 0.664062 0.332102\nv -0.254122 0.664062 0.328125\nv -0.342857 0.671875 0.328125\nv -0.34375 0.671875 0.330734\nv -0.255108 0.671875 0.328125\nv -0.343332 0.679688 0.328125\nv -0.34375 0.687252 0.328125\nv -0.34375 0.679688 0.329278\nv -0.255826 0.679688 0.328125\nv -0.343763 0.6875 0.328125\nv -0.256569 0.6875 0.328125\nv -0.343998 0.695312 0.328125\nv -0.257349 0.695312 0.328125\nv -0.257812 0.700996 0.328125\nv -0.344139 0.703125 0.328125\nv -0.257954 0.703125 0.328125\nv -0.257812 0.703125 0.329417\nv -0.344025 0.710938 0.328125\nv -0.258466 0.710938 0.328125\nv -0.257812 0.710938 0.335239\nv -0.343777 0.71875 0.328125\nv -0.34375 0.71918 0.328125\nv -0.259127 0.71875 0.328125\nv -0.343208 0.726562 0.328125\nv -0.34375 0.726562 0.329207\nv -0.259782 0.726562 0.328125\nv -0.342364 0.734375 0.328125\nv -0.34375 0.734375 0.331032\nv -0.260017 0.734375 0.328125\nv -0.341119 0.742188 0.328125\nv -0.34375 0.742188 0.334489\nv -0.261158 0.742188 0.328125\nv -0.340094 0.75 0.328125\nv -0.262412 0.75 0.328125\nv -0.339851 0.757812 0.328125\nv -0.263964 0.757812 0.328125\nv -0.340363 0.765625 0.328125\nv -0.34375 0.765625 0.335405\nv -0.265446 0.765625 0.328125\nv -0.265625 0.766179 0.328125\nv -0.340908 0.773438 0.328125\nv -0.34375 0.773438 0.333701\nv -0.268706 0.773438 0.328125\nv -0.341808 0.78125 0.328125\nv -0.34375 0.78125 0.331706\nv -0.273257 0.78125 0.328125\nv -0.273438 0.781568 0.328125\nv -0.342543 0.789062 0.328125\nv -0.34375 0.789062 0.330107\nv -0.277729 0.789062 0.328125\nv -0.28125 0.796532 0.328125\nv -0.343139 0.796875 0.328125\nv -0.34375 0.796875 0.329075\nv -0.28141 0.796875 0.328125\nv -0.28125 0.796875 0.328903\nv -0.343276 0.804688 0.328125\nv -0.34375 0.808123 0.328125\nv -0.34375 0.804688 0.328806\nv -0.285279 0.804688 0.328125\nv -0.289062 0.811073 0.328125\nv -0.344306 0.8125 0.328125\nv -0.289918 0.8125 0.328125\nv -0.289062 0.8125 0.331784\nv -0.344846 0.820312 0.328125\nv -0.293894 0.820312 0.328125\nv -0.344577 0.828125 0.328125\nv -0.34375 0.832092 0.328125\nv -0.296303 0.828125 0.328125\nv -0.296875 0.82995 0.328125\nv -0.342779 0.835938 0.328125\nv -0.34375 0.835938 0.329991\nv -0.298816 0.835938 0.328125\nv -0.296875 0.835938 0.335118\nv -0.338279 0.84375 0.328125\nv -0.335938 0.845567 0.328125\nv -0.328125 0.848561 0.328125\nv -0.300021 0.84375 0.328125\nv -0.324301 0.851562 0.328125\nv -0.328125 0.851562 0.333128\nv -0.320312 0.855254 0.328125\nv -0.3125 0.859242 0.328125\nv -0.302045 0.851562 0.328125\nv -0.304688 0.855526 0.328125\nv -0.320312 0.859375 0.334099\nv -0.3125 0.859375 0.328334\nv -0.304688 0.859375 0.333591\nv -0.289062 -0.734432 0.335938\nv -0.28125 -0.735051 0.335938\nv -0.273438 -0.734945 0.335938\nv 0.429688 -0.735386 0.335938\nv 0.4375 -0.735401 0.335938\nv 0.445312 -0.735132 0.335938\nv 0.453125 -0.734392 0.335938\nv -0.328125 -0.727417 0.335938\nv -0.320312 -0.729586 0.335938\nv -0.3125 -0.73126 0.335938\nv -0.304688 -0.732542 0.335938\nv -0.289611 -0.734375 0.335938\nv -0.296875 -0.733641 0.335938\nv -0.296875 -0.734375 0.340478\nv -0.269627 -0.734375 0.335938\nv -0.265625 -0.733716 0.335938\nv -0.257812 -0.731685 0.335938\nv -0.25 -0.728636 0.335938\nv 0.40625 -0.730253 0.335938\nv 0.414062 -0.73287 0.335938\nv 0.42237 -0.734375 0.335938\nv 0.421875 -0.734293 0.335938\nv 0.453295 -0.734375 0.335938\nv 0.460938 -0.733614 0.335938\nv 0.460938 -0.734375 0.339238\nv 0.46875 -0.73284 0.335938\nv 0.476562 -0.730954 0.335938\nv 0.484375 -0.727918 0.335938\nv -0.330349 -0.726562 0.335938\nv -0.335938 -0.722635 0.335938\nv -0.246311 -0.726562 0.335938\nv -0.242188 -0.720549 0.335938\nv 0.400608 -0.726562 0.335938\nv 0.398438 -0.722495 0.335938\nv 0.487322 -0.726562 0.335938\nv 0.492188 -0.724304 0.335938\nv 0.5 -0.72003 0.335938\nv -0.338668 -0.71875 0.335938\nv -0.241337 -0.71875 0.335938\nv 0.396902 -0.71875 0.335938\nv 0.501496 -0.71875 0.335938\nv -0.341002 -0.710938 0.335938\nv -0.239322 -0.710938 0.335938\nv 0.392323 -0.710938 0.335938\nv 0.390625 -0.706415 0.335938\nv 0.505452 -0.710938 0.335938\nv -0.342024 -0.703125 0.335938\nv -0.23613 -0.703125 0.335938\nv -0.234375 -0.698609 0.335938\nv 0.389572 -0.703125 0.335938\nv 0.505832 -0.703125 0.335938\nv -0.34185 -0.695312 0.335938\nv -0.233094 -0.695312 0.335938\nv 0.388445 -0.695312 0.335938\nv 0.505501 -0.695312 0.335938\nv -0.341199 -0.6875 0.335938\nv -0.231637 -0.6875 0.335938\nv 0.388257 -0.6875 0.335938\nv 0.505483 -0.6875 0.335938\nv -0.340385 -0.679688 0.335938\nv -0.230583 -0.679688 0.335938\nv 0.388215 -0.679688 0.335938\nv 0.505502 -0.679688 0.335938\nv -0.339687 -0.671875 0.335938\nv -0.229724 -0.671875 0.335938\nv 0.388198 -0.671875 0.335938\nv 0.50519 -0.671875 0.335938\nv -0.338985 -0.664062 0.335938\nv -0.2289 -0.664062 0.335938\nv 0.388261 -0.664062 0.335938\nv 0.504748 -0.664062 0.335938\nv -0.338195 -0.65625 0.335938\nv -0.228087 -0.65625 0.335938\nv -0.226562 -0.65625 0.341302\nv 0.388461 -0.65625 0.335938\nv 0.504262 -0.65625 0.335938\nv -0.337184 -0.648438 0.335938\nv -0.227256 -0.648438 0.335938\nv -0.226562 -0.641749 0.335938\nv -0.226562 -0.648438 0.338092\nv 0.388479 -0.648438 0.335938\nv 0.503921 -0.648438 0.335938\nv -0.336206 -0.640625 0.335938\nv -0.335938 -0.638506 0.335938\nv -0.22644 -0.640625 0.335938\nv 0.388312 -0.640625 0.335938\nv 0.503678 -0.640625 0.335938\nv -0.335138 -0.632812 0.335938\nv -0.22618 -0.632812 0.335938\nv 0.388162 -0.632812 0.335938\nv 0.50344 -0.632812 0.335938\nv -0.333995 -0.625 0.335938\nv -0.225999 -0.625 0.335938\nv 0.387983 -0.625 0.335938\nv 0.503341 -0.625 0.335938\nv -0.332941 -0.617188 0.335938\nv -0.22579 -0.617188 0.335938\nv 0.387736 -0.617188 0.335938\nv 0.503303 -0.617188 0.335938\nv -0.332187 -0.609375 0.335938\nv -0.225595 -0.609375 0.335938\nv 0.38744 -0.609375 0.335938\nv 0.50316 -0.609375 0.335938\nv -0.331941 -0.601562 0.335938\nv -0.225432 -0.601562 0.335938\nv 0.387032 -0.601562 0.335938\nv 0.502797 -0.601562 0.335938\nv -0.331626 -0.59375 0.335938\nv -0.224835 -0.59375 0.335938\nv 0.386525 -0.59375 0.335938\nv 0.502521 -0.59375 0.335938\nv -0.331418 -0.585938 0.335938\nv -0.224284 -0.585938 0.335938\nv 0.386274 -0.585938 0.335938\nv 0.382812 -0.585938 0.343031\nv 0.502149 -0.585938 0.335938\nv -0.331219 -0.578125 0.335938\nv -0.224164 -0.578125 0.335938\nv 0.386183 -0.578125 0.335938\nv 0.382812 -0.578125 0.341454\nv 0.501918 -0.578125 0.335938\nv -0.331055 -0.570312 0.335938\nv -0.223869 -0.570312 0.335938\nv -0.21875 -0.563026 0.335938\nv 0.38468 -0.570312 0.335938\nv 0.382812 -0.566051 0.335938\nv 0.382812 -0.570312 0.338263\nv 0.501802 -0.570312 0.335938\nv -0.330947 -0.5625 0.335938\nv -0.217537 -0.5625 0.335938\nv -0.210938 -0.560417 0.335938\nv -0.210938 -0.5625 0.341775\nv -0.203125 -0.55764 0.335938\nv -0.195312 -0.555113 0.335938\nv -0.0078125 -0.55481 0.335938\nv 0 -0.555322 0.335938\nv 0.0078125 -0.555309 0.335938\nv 0.015625 -0.555048 0.335938\nv 0.381076 -0.5625 0.335938\nv 0.375 -0.556429 0.335938\nv 0.375 -0.5625 0.343086\nv 0.501553 -0.5625 0.335938\nv -0.331078 -0.554688 0.335938\nv -0.193628 -0.554688 0.335938\nv -0.1875 -0.55338 0.335938\nv -0.1875 -0.554688 0.343151\nv -0.179688 -0.552639 0.335938\nv -0.171875 -0.552435 0.335938\nv -0.164062 -0.552592 0.335938\nv -0.15625 -0.552499 0.335938\nv -0.148438 -0.551536 0.335938\nv -0.140625 -0.548953 0.335938\nv -0.0703125 -0.54753 0.335938\nv -0.0625 -0.548303 0.335938\nv -0.0546875 -0.549112 0.335938\nv -0.046875 -0.549966 0.335938\nv -0.0390625 -0.550948 0.335938\nv -0.03125 -0.552083 0.335938\nv -0.0234375 -0.553168 0.335938\nv -0.00921888 -0.554688 0.335938\nv -0.015625 -0.553993 0.335938\nv 0.0203344 -0.554688 0.335938\nv 0.0234375 -0.554384 0.335938\nv 0.0234375 -0.554688 0.339116\nv 0.03125 -0.553321 0.335938\nv 0.0390625 -0.552442 0.335938\nv 0.046875 -0.551294 0.335938\nv 0.0546875 -0.549889 0.335938\nv 0.0625 -0.549001 0.335938\nv 0.0703125 -0.548408 0.335938\nv 0.078125 -0.547626 0.335938\nv 0.148438 -0.546959 0.335938\nv 0.15625 -0.547196 0.335938\nv 0.164062 -0.547251 0.335938\nv 0.171875 -0.547376 0.335938\nv 0.179688 -0.547459 0.335938\nv 0.1875 -0.547611 0.335938\nv 0.195312 -0.547472 0.335938\nv 0.203125 -0.547813 0.335938\nv 0.210938 -0.548369 0.335938\nv 0.21875 -0.548835 0.335938\nv 0.226562 -0.549238 0.335938\nv 0.234375 -0.549281 0.335938\nv 0.242188 -0.549299 0.335938\nv 0.25 -0.549363 0.335938\nv 0.257812 -0.549518 0.335938\nv 0.265625 -0.549695 0.335938\nv 0.273438 -0.549566 0.335938\nv 0.28125 -0.549258 0.335938\nv 0.289062 -0.54889 0.335938\nv 0.296875 -0.548175 0.335938\nv 0.304688 -0.548113 0.335938\nv 0.3125 -0.548534 0.335938\nv 0.320312 -0.549589 0.335938\nv 0.328125 -0.549826 0.335938\nv 0.335938 -0.550055 0.335938\nv 0.34375 -0.549338 0.335938\nv 0.351562 -0.548848 0.335938\nv 0.359375 -0.549685 0.335938\nv 0.359375 -0.554688 0.343411\nv 0.372501 -0.554688 0.335938\nv 0.367188 -0.551932 0.335938\nv 0.367188 -0.554688 0.33897\nv 0.501259 -0.554688 0.335938\nv -0.331215 -0.546875 0.335938\nv -0.135045 -0.546875 0.335938\nv -0.132812 -0.545778 0.335938\nv -0.125 -0.5433 0.335938\nv -0.117188 -0.543685 0.335938\nv -0.109375 -0.544251 0.335938\nv -0.101562 -0.544835 0.335938\nv -0.09375 -0.545413 0.335938\nv -0.0859375 -0.546088 0.335938\nv -0.0778075 -0.546875 0.335938\nv -0.078125 -0.546843 0.335938\nv -0.078125 -0.546875 0.33872\nv 0.0857237 -0.546875 0.335938\nv 0.0859375 -0.54685 0.335938\nv 0.0859375 -0.546875 0.336024\nv 0.09375 -0.546306 0.335938\nv 0.09375 -0.546875 0.337767\nv 0.101562 -0.546098 0.335938\nv 0.101562 -0.546875 0.338526\nv 0.109375 -0.545906 0.335938\nv 0.109375 -0.546875 0.339076\nv 0.117188 -0.546049 0.335938\nv 0.117188 -0.546875 0.339145\nv 0.125 -0.546475 0.335938\nv 0.125 -0.546875 0.338221\nv 0.132812 -0.546521 0.335938\nv 0.132812 -0.546875 0.337958\nv 0.143991 -0.546875 0.335938\nv 0.140625 -0.546782 0.335938\nv 0.140625 -0.546875 0.33644\nv 0.501069 -0.546875 0.335938\nv -0.33146 -0.539062 0.335938\nv 0.501004 -0.539062 0.335938\nv -0.331538 -0.53125 0.335938\nv 0.501097 -0.53125 0.335938\nv -0.33164 -0.523438 0.335938\nv 0.501079 -0.523438 0.335938\nv -0.331764 -0.515625 0.335938\nv 0.500971 -0.515625 0.335938\nv -0.331852 -0.507812 0.335938\nv 0.500984 -0.507812 0.335938\nv -0.331875 -0.5 0.335938\nv 0.500964 -0.5 0.335938\nv -0.331769 -0.492188 0.335938\nv -0.140625 -0.486563 0.335938\nv -0.132812 -0.490188 0.335938\nv -0.125 -0.490671 0.335938\nv -0.117188 -0.488633 0.335938\nv -0.109375 -0.486647 0.335938\nv -0.101562 -0.484687 0.335938\nv 0.500929 -0.492188 0.335938\nv -0.331734 -0.484375 0.335938\nv -0.164062 -0.476578 0.335938\nv -0.15625 -0.478528 0.335938\nv -0.144237 -0.484375 0.335938\nv -0.148438 -0.481737 0.335938\nv -0.140625 -0.484375 0.341637\nv -0.109375 -0.484375 0.343682\nv -0.100335 -0.484375 0.335938\nv -0.101562 -0.484375 0.336991\nv -0.09375 -0.482908 0.335938\nv -0.0859375 -0.481168 0.335938\nv -0.078125 -0.479387 0.335938\nv -0.0703125 -0.477501 0.335938\nv 0.28125 -0.476962 0.335938\nv 0.289062 -0.478114 0.335938\nv 0.296875 -0.479494 0.335938\nv 0.304688 -0.481144 0.335938\nv 0.3125 -0.482932 0.335938\nv 0.320312 -0.481682 0.335938\nv 0.328125 -0.478158 0.335938\nv 0.500874 -0.484375 0.335938\nv -0.331796 -0.476562 0.335938\nv -0.195312 -0.469221 0.335938\nv -0.1875 -0.471233 0.335938\nv -0.179688 -0.47297 0.335938\nv -0.164115 -0.476562 0.335938\nv -0.171875 -0.474337 0.335938\nv -0.164062 -0.476562 0.335964\nv -0.15625 -0.476562 0.340583\nv -0.0662322 -0.476562 0.335938\nv -0.0703125 -0.476562 0.339404\nv -0.0625 -0.475793 0.335938\nv -0.0546875 -0.47421 0.335938\nv -0.046875 -0.472673 0.335938\nv -0.0390625 -0.47115 0.335938\nv -0.03125 -0.469612 0.335938\nv 0.171875 -0.469035 0.335938\nv 0.179688 -0.469512 0.335938\nv 0.1875 -0.470073 0.335938\nv 0.195312 -0.470667 0.335938\nv 0.203125 -0.470968 0.335938\nv 0.210938 -0.471303 0.335938\nv 0.21875 -0.471675 0.335938\nv 0.226562 -0.472451 0.335938\nv 0.234375 -0.473365 0.335938\nv 0.242188 -0.474276 0.335938\nv 0.25 -0.474896 0.335938\nv 0.257812 -0.475169 0.335938\nv 0.265625 -0.475764 0.335938\nv 0.27528 -0.476562 0.335938\nv 0.273438 -0.476444 0.335938\nv 0.331771 -0.476562 0.335938\nv 0.335938 -0.474669 0.335938\nv 0.34375 -0.473247 0.335938\nv 0.351562 -0.471778 0.335938\nv 0.359375 -0.46954 0.335938\nv 0.500994 -0.476562 0.335938\nv -0.331788 -0.46875 0.335938\nv -0.210938 -0.462727 0.335938\nv -0.196925 -0.46875 0.335938\nv -0.203125 -0.46693 0.335938\nv -0.0271302 -0.46875 0.335938\nv -0.03125 -0.46875 0.341638\nv -0.0234375 -0.467958 0.335938\nv -0.015625 -0.466122 0.335938\nv -0.0078125 -0.464386 0.335938\nv 0 -0.463014 0.335938\nv 0.0078125 -0.462448 0.335938\nv 0.015625 -0.462253 0.335938\nv 0.0234375 -0.462166 0.335938\nv 0.03125 -0.462429 0.335938\nv 0.0390625 -0.46267 0.335938\nv 0.046875 -0.462707 0.335938\nv 0.0546875 -0.462685 0.335938\nv 0.0625 -0.462565 0.335938\nv 0.0703125 -0.462416 0.335938\nv 0.078125 -0.462317 0.335938\nv 0.0859375 -0.462772 0.335938\nv 0.09375 -0.463419 0.335938\nv 0.101562 -0.463696 0.335938\nv 0.109375 -0.463814 0.335938\nv 0.117188 -0.463942 0.335938\nv 0.125 -0.465321 0.335938\nv 0.132812 -0.466389 0.335938\nv 0.140625 -0.46721 0.335938\nv 0.148438 -0.467719 0.335938\nv 0.148438 -0.46875 0.343402\nv 0.15625 -0.46824 0.335938\nv 0.15625 -0.46875 0.339353\nv 0.165435 -0.46875 0.335938\nv 0.164062 -0.468696 0.335938\nv 0.164062 -0.46875 0.336248\nv 0.362266 -0.46875 0.335938\nv 0.367188 -0.466796 0.335938\nv 0.501131 -0.46875 0.335938\nv -0.331768 -0.460938 0.335938\nv -0.212395 -0.460938 0.335938\nv -0.210938 -0.460938 0.340809\nv 0.374259 -0.460938 0.335938\nv 0.375 -0.460202 0.335938\nv 0.501159 -0.460938 0.335938\nv -0.331787 -0.453125 0.335938\nv -0.215184 -0.453125 0.335938\nv 0.380983 -0.453125 0.335938\nv 0.382812 -0.446954 0.335938\nv 0.501186 -0.453125 0.335938\nv -0.33169 -0.445312 0.335938\nv -0.217152 -0.445312 0.335938\nv 0.383166 -0.445312 0.335938\nv 0.382812 -0.445312 0.337605\nv 0.501361 -0.445312 0.335938\nv -0.331488 -0.4375 0.335938\nv -0.218461 -0.4375 0.335938\nv -0.21875 -0.435702 0.335938\nv 0.385205 -0.4375 0.335938\nv 0.501634 -0.4375 0.335938\nv -0.331256 -0.429688 0.335938\nv -0.219664 -0.429688 0.335938\nv -0.21875 -0.429688 0.339501\nv 0.387308 -0.429688 0.335938\nv 0.501944 -0.429688 0.335938\nv -0.331004 -0.421875 0.335938\nv -0.220775 -0.421875 0.335938\nv 0.389352 -0.421875 0.335938\nv 0.390625 -0.416052 0.335938\nv 0.502255 -0.421875 0.335938\nv -0.33072 -0.414062 0.335938\nv -0.221689 -0.414062 0.335938\nv 0.391048 -0.414062 0.335938\nv 0.390625 -0.414062 0.337042\nv 0.502536 -0.414062 0.335938\nv -0.330185 -0.40625 0.335938\nv -0.22233 -0.40625 0.335938\nv 0.392255 -0.40625 0.335938\nv 0.390625 -0.40625 0.339873\nv 0.502806 -0.40625 0.335938\nv -0.329583 -0.398438 0.335938\nv -0.222332 -0.398438 0.335938\nv 0.392157 -0.398438 0.335938\nv 0.390625 -0.398438 0.339244\nv 0.503016 -0.398438 0.335938\nv -0.329003 -0.390625 0.335938\nv -0.221842 -0.390625 0.335938\nv 0.391545 -0.390625 0.335938\nv 0.390625 -0.383387 0.335938\nv 0.390625 -0.390625 0.337652\nv 0.503201 -0.390625 0.335938\nv -0.328483 -0.382812 0.335938\nv -0.328125 -0.378231 0.335938\nv -0.221474 -0.382812 0.335938\nv 0.390554 -0.382812 0.335938\nv 0.503358 -0.382812 0.335938\nv -0.327814 -0.375 0.335938\nv -0.22103 -0.375 0.335938\nv 0.389656 -0.375 0.335938\nv 0.503363 -0.375 0.335938\nv -0.327026 -0.367188 0.335938\nv -0.220697 -0.367188 0.335938\nv 0.389015 -0.367188 0.335938\nv 0.503199 -0.367188 0.335938\nv -0.326232 -0.359375 0.335938\nv -0.220398 -0.359375 0.335938\nv 0.38858 -0.359375 0.335938\nv 0.503213 -0.359375 0.335938\nv -0.32528 -0.351562 0.335938\nv -0.220443 -0.351562 0.335938\nv 0.388716 -0.351562 0.335938\nv 0.503235 -0.351562 0.335938\nv -0.324448 -0.34375 0.335938\nv -0.220798 -0.34375 0.335938\nv 0.388983 -0.34375 0.335938\nv 0.503204 -0.34375 0.335938\nv -0.323758 -0.335938 0.335938\nv -0.22114 -0.335938 0.335938\nv 0.389087 -0.335938 0.335938\nv 0.503309 -0.335938 0.335938\nv -0.323302 -0.328125 0.335938\nv -0.221351 -0.328125 0.335938\nv 0.389188 -0.328125 0.335938\nv 0.503381 -0.328125 0.335938\nv -0.322864 -0.320312 0.335938\nv -0.221533 -0.320312 0.335938\nv 0.389553 -0.320312 0.335938\nv 0.503447 -0.320312 0.335938\nv -0.322482 -0.3125 0.335938\nv -0.221713 -0.3125 0.335938\nv 0.390015 -0.3125 0.335938\nv 0.503573 -0.3125 0.335938\nv -0.322091 -0.304688 0.335938\nv -0.221826 -0.304688 0.335938\nv 0.39061 -0.304688 0.335938\nv 0.390625 -0.304421 0.335938\nv 0.503721 -0.304688 0.335938\nv -0.321653 -0.296875 0.335938\nv -0.221926 -0.296875 0.335938\nv 0.391027 -0.296875 0.335938\nv 0.390625 -0.296875 0.342487\nv 0.503822 -0.296875 0.335938\nv -0.321239 -0.289062 0.335938\nv -0.22191 -0.289062 0.335938\nv 0.391306 -0.289062 0.335938\nv 0.50388 -0.289062 0.335938\nv -0.320819 -0.28125 0.335938\nv -0.222003 -0.28125 0.335938\nv 0.391893 -0.28125 0.335938\nv 0.503783 -0.28125 0.335938\nv -0.320408 -0.273438 0.335938\nv -0.320312 -0.271929 0.335938\nv -0.222143 -0.273438 0.335938\nv 0.392713 -0.273438 0.335938\nv 0.503598 -0.273438 0.335938\nv -0.319808 -0.265625 0.335938\nv -0.222246 -0.265625 0.335938\nv 0.39296 -0.265625 0.335938\nv 0.503385 -0.265625 0.335938\nv -0.319064 -0.257812 0.335938\nv -0.222027 -0.257812 0.335938\nv 0.393382 -0.257812 0.335938\nv 0.502906 -0.257812 0.335938\nv -0.318233 -0.25 0.335938\nv -0.221499 -0.25 0.335938\nv 0.393853 -0.25 0.335938\nv 0.50283 -0.25 0.335938\nv -0.317362 -0.242188 0.335938\nv -0.221043 -0.242188 0.335938\nv 0.394122 -0.242188 0.335938\nv 0.502567 -0.242188 0.335938\nv -0.316864 -0.234375 0.335938\nv -0.220629 -0.234375 0.335938\nv 0.39454 -0.234375 0.335938\nv 0.502339 -0.234375 0.335938\nv -0.316698 -0.226562 0.335938\nv -0.220505 -0.226562 0.335938\nv 0.394907 -0.226562 0.335938\nv 0.502264 -0.226562 0.335938\nv -0.316443 -0.21875 0.335938\nv -0.220285 -0.21875 0.335938\nv 0.395133 -0.21875 0.335938\nv 0.502107 -0.21875 0.335938\nv -0.316295 -0.210938 0.335938\nv -0.220063 -0.210938 0.335938\nv 0.395327 -0.210938 0.335938\nv 0.502014 -0.210938 0.335938\nv -0.316199 -0.203125 0.335938\nv -0.219994 -0.203125 0.335938\nv 0.395526 -0.203125 0.335938\nv 0.501913 -0.203125 0.335938\nv -0.315594 -0.195312 0.335938\nv -0.220025 -0.195312 0.335938\nv 0.395568 -0.195312 0.335938\nv 0.501833 -0.195312 0.335938\nv -0.315166 -0.1875 0.335938\nv -0.219984 -0.1875 0.335938\nv 0.395491 -0.1875 0.335938\nv 0.501607 -0.1875 0.335938\nv -0.31476 -0.179688 0.335938\nv -0.220007 -0.179688 0.335938\nv 0.395477 -0.179688 0.335938\nv 0.501166 -0.179688 0.335938\nv -0.314208 -0.171875 0.335938\nv -0.220069 -0.171875 0.335938\nv 0.395527 -0.171875 0.335938\nv 0.50086 -0.171875 0.335938\nv -0.313866 -0.164062 0.335938\nv -0.220413 -0.164062 0.335938\nv 0.39547 -0.164062 0.335938\nv 0.5008 -0.164062 0.335938\nv -0.3135 -0.15625 0.335938\nv -0.220371 -0.15625 0.335938\nv 0.394936 -0.15625 0.335938\nv 0.500814 -0.15625 0.335938\nv -0.312944 -0.148438 0.335938\nv -0.220232 -0.148438 0.335938\nv 0.39437 -0.148438 0.335938\nv 0.500623 -0.148438 0.335938\nv -0.312519 -0.140625 0.335938\nv -0.3125 -0.140077 0.335938\nv -0.220171 -0.140625 0.335938\nv 0.39373 -0.140625 0.335938\nv 0.500141 -0.140625 0.335938\nv 0.5 -0.138535 0.335938\nv -0.312257 -0.132812 0.335938\nv -0.3125 -0.132812 0.339651\nv -0.220058 -0.132812 0.335938\nv 0.39272 -0.132812 0.335938\nv 0.499578 -0.132812 0.335938\nv -0.311964 -0.125 0.335938\nv -0.3125 -0.125 0.342386\nv -0.219768 -0.125 0.335938\nv 0.391689 -0.125 0.335938\nv 0.498828 -0.125 0.335938\nv -0.311497 -0.117188 0.335938\nv -0.3125 -0.117188 0.343576\nv -0.219982 -0.117188 0.335938\nv -0.21875 -0.117188 0.341584\nv 0.390903 -0.117188 0.335938\nv 0.390625 -0.115795 0.335938\nv 0.390625 -0.117188 0.342242\nv 0.498221 -0.117188 0.335938\nv -0.311211 -0.109375 0.335938\nv -0.219341 -0.109375 0.335938\nv -0.21875 -0.106119 0.335938\nv -0.21875 -0.109375 0.337564\nv 0.389402 -0.109375 0.335938\nv 0.498153 -0.109375 0.335938\nv -0.31097 -0.101562 0.335938\nv -0.218045 -0.101562 0.335938\nv 0.387407 -0.101562 0.335938\nv 0.498409 -0.101562 0.335938\nv -0.310779 -0.09375 0.335938\nv -0.216756 -0.09375 0.335938\nv 0.384938 -0.09375 0.335938\nv 0.382812 -0.0892476 0.335938\nv 0.499356 -0.09375 0.335938\nv 0.5 -0.0896342 0.335938\nv -0.31117 -0.0859375 0.335938\nv -0.214244 -0.0859375 0.335938\nv -0.210938 -0.080314 0.335938\nv -0.210938 -0.0859375 0.339427\nv 0.381484 -0.0859375 0.335938\nv 0.500552 -0.0859375 0.335938\nv -0.311885 -0.078125 0.335938\nv -0.3125 -0.078125 0.340066\nv -0.209037 -0.078125 0.335938\nv -0.203125 -0.0748704 0.335938\nv -0.203125 -0.078125 0.340735\nv -0.195312 -0.0725198 0.335938\nv -0.1875 -0.0707516 0.335938\nv 0.379341 -0.078125 0.335938\nv 0.375 -0.0714641 0.335938\nv 0.501599 -0.078125 0.335938\nv -0.312417 -0.0703125 0.335938\nv -0.3125 -0.0703125 0.336501\nv -0.184188 -0.0703125 0.335938\nv -0.179688 -0.0695898 0.335938\nv -0.179688 -0.0703125 0.337212\nv -0.171875 -0.0688793 0.335938\nv -0.171875 -0.0703125 0.338503\nv -0.164062 -0.068342 0.335938\nv -0.164062 -0.0703125 0.339777\nv -0.15625 -0.0669595 0.335938\nv -0.148438 -0.0651298 0.335938\nv -0.140625 -0.0640885 0.335938\nv -0.132812 -0.0643578 0.335938\nv -0.125 -0.0642273 0.335938\nv -0.117188 -0.0642309 0.335938\nv -0.109375 -0.0643729 0.335938\nv -0.101562 -0.064308 0.335938\nv -0.09375 -0.0642304 0.335938\nv -0.0859375 -0.0643319 0.335938\nv -0.078125 -0.0644908 0.335938\nv -0.0703125 -0.0645804 0.335938\nv -0.0625 -0.0646775 0.335938\nv -0.0546875 -0.0647996 0.335938\nv -0.046875 -0.0651085 0.335938\nv -0.0390625 -0.0655134 0.335938\nv -0.03125 -0.0659655 0.335938\nv -0.0234375 -0.0666525 0.335938\nv -0.015625 -0.0673253 0.335938\nv -0.0078125 -0.0678312 0.335938\nv 0 -0.0681564 0.335938\nv 0.0078125 -0.0681756 0.335938\nv 0.015625 -0.0681228 0.335938\nv 0.0234375 -0.0680134 0.335938\nv 0.03125 -0.0679376 0.335938\nv 0.0390625 -0.067877 0.335938\nv 0.046875 -0.0677946 0.335938\nv 0.0546875 -0.0677446 0.335938\nv 0.0625 -0.0677145 0.335938\nv 0.0703125 -0.0676898 0.335938\nv 0.078125 -0.0676688 0.335938\nv 0.0859375 -0.0676867 0.335938\nv 0.09375 -0.0676815 0.335938\nv 0.101562 -0.0676495 0.335938\nv 0.109375 -0.0674718 0.335938\nv 0.117188 -0.0673109 0.335938\nv 0.125 -0.0672195 0.335938\nv 0.132812 -0.0671715 0.335938\nv 0.140625 -0.0670194 0.335938\nv 0.148438 -0.0667591 0.335938\nv 0.15625 -0.0664634 0.335938\nv 0.164062 -0.0662402 0.335938\nv 0.171875 -0.0661005 0.335938\nv 0.179688 -0.0659351 0.335938\nv 0.1875 -0.0655063 0.335938\nv 0.195312 -0.0650715 0.335938\nv 0.203125 -0.0647256 0.335938\nv 0.210938 -0.0643859 0.335938\nv 0.21875 -0.0640332 0.335938\nv 0.226562 -0.0634812 0.335938\nv 0.234375 -0.0629356 0.335938\nv 0.242188 -0.0625259 0.335938\nv 0.34375 -0.0632364 0.335938\nv 0.351562 -0.0643373 0.335938\nv 0.359375 -0.0657872 0.335938\nv 0.359375 -0.0703125 0.342562\nv 0.37318 -0.0703125 0.335938\nv 0.367188 -0.0675593 0.335938\nv 0.367188 -0.0703125 0.340092\nv 0.502613 -0.0703125 0.335938\nv -0.312484 -0.0625 0.335938\nv -0.3125 -0.0625 0.336043\nv 0.242667 -0.0625 0.335938\nv 0.25 -0.0617657 0.335938\nv 0.25 -0.0625 0.336564\nv 0.257812 -0.0609535 0.335938\nv 0.257812 -0.0625 0.337171\nv 0.265625 -0.0596453 0.335938\nv 0.265625 -0.0625 0.338008\nv 0.273438 -0.0583107 0.335938\nv 0.273438 -0.0625 0.338643\nv 0.28125 -0.0571398 0.335938\nv 0.28125 -0.0625 0.339072\nv 0.289062 -0.0559725 0.335938\nv 0.289062 -0.0625 0.339452\nv 0.296875 -0.0555882 0.335938\nv 0.296875 -0.0625 0.339384\nv 0.304688 -0.056198 0.335938\nv 0.304688 -0.0625 0.339137\nv 0.3125 -0.0562694 0.335938\nv 0.3125 -0.0625 0.338707\nv 0.320312 -0.0573607 0.335938\nv 0.320312 -0.0625 0.337992\nv 0.328125 -0.0595564 0.335938\nv 0.328125 -0.0625 0.337053\nv 0.337795 -0.0625 0.335938\nv 0.335938 -0.0618367 0.335938\nv 0.335938 -0.0625 0.336164\nv 0.504019 -0.0625 0.335938\nv -0.312312 -0.0546875 0.335938\nv -0.3125 -0.0546875 0.337096\nv 0.504964 -0.0546875 0.335938\nv -0.312105 -0.046875 0.335938\nv -0.3125 -0.046875 0.338723\nv 0.505531 -0.046875 0.335938\nv -0.311938 -0.0390625 0.335938\nv -0.3125 -0.0390625 0.340289\nv 0.505076 -0.0390625 0.335938\nv -0.312245 -0.03125 0.335938\nv -0.3125 -0.0253216 0.335938\nv -0.3125 -0.03125 0.338053\nv 0.504447 -0.03125 0.335938\nv -0.312573 -0.0234375 0.335938\nv 0.503702 -0.0234375 0.335938\nv -0.312772 -0.015625 0.335938\nv 0.502808 -0.015625 0.335938\nv -0.312752 -0.0078125 0.335938\nv -0.3125 -0.00405492 0.335938\nv 0.502093 -0.0078125 0.335938\nv -0.312206 0 0.335938\nv -0.3125 0 0.33866\nv 0.502293 0 0.335938\nv -0.311546 0.0078125 0.335938\nv 0.502549 0.0078125 0.335938\nv -0.311285 0.015625 0.335938\nv 0.502711 0.015625 0.335938\nv -0.310856 0.0234375 0.335938\nv 0.502461 0.0234375 0.335938\nv -0.310551 0.03125 0.335938\nv 0.501495 0.03125 0.335938\nv -0.310205 0.0390625 0.335938\nv 0.500184 0.0390625 0.335938\nv 0.5 0.0395926 0.335938\nv -0.309702 0.046875 0.335938\nv 0.496654 0.046875 0.335938\nv 0.492188 0.0520925 0.335938\nv -0.308719 0.0546875 0.335938\nv 0.476562 0.0614786 0.335938\nv 0.489119 0.0546875 0.335938\nv 0.484375 0.0582567 0.335938\nv -0.308157 0.0625 0.335938\nv 0.03125 0.0701633 0.335938\nv 0.0390625 0.0699243 0.335938\nv 0.046875 0.0697875 0.335938\nv 0.0546875 0.0697225 0.335938\nv 0.0625 0.0697162 0.335938\nv 0.0703125 0.0697508 0.335938\nv 0.078125 0.0698221 0.335938\nv 0.0859375 0.0697504 0.335938\nv 0.09375 0.0698171 0.335938\nv 0.101562 0.0698515 0.335938\nv 0.109375 0.0698447 0.335938\nv 0.117188 0.0698526 0.335938\nv 0.125 0.0698916 0.335938\nv 0.132812 0.0698682 0.335938\nv 0.140625 0.0698398 0.335938\nv 0.148438 0.0698021 0.335938\nv 0.15625 0.0697909 0.335938\nv 0.164062 0.0697365 0.335938\nv 0.171875 0.0697132 0.335938\nv 0.179688 0.0697071 0.335938\nv 0.1875 0.0697281 0.335938\nv 0.195312 0.0697171 0.335938\nv 0.203125 0.0696954 0.335938\nv 0.210938 0.0697206 0.335938\nv 0.21875 0.0696944 0.335938\nv 0.226562 0.0696809 0.335938\nv 0.234375 0.0696086 0.335938\nv 0.242188 0.0695545 0.335938\nv 0.25 0.0694786 0.335938\nv 0.257812 0.0694457 0.335938\nv 0.265625 0.069508 0.335938\nv 0.273438 0.069534 0.335938\nv 0.28125 0.0694791 0.335938\nv 0.289062 0.069406 0.335938\nv 0.296875 0.069353 0.335938\nv 0.304688 0.0692534 0.335938\nv 0.3125 0.0691056 0.335938\nv 0.320312 0.0690309 0.335938\nv 0.328125 0.0689633 0.335938\nv 0.335938 0.0688532 0.335938\nv 0.34375 0.0687139 0.335938\nv 0.351562 0.0685585 0.335938\nv 0.359375 0.0682526 0.335938\nv 0.367188 0.0680507 0.335938\nv 0.375 0.0679659 0.335938\nv 0.382812 0.0680986 0.335938\nv 0.390625 0.068405 0.335938\nv 0.398438 0.068212 0.335938\nv 0.40625 0.0681485 0.335938\nv 0.414062 0.0683176 0.335938\nv 0.421875 0.0684241 0.335938\nv 0.429688 0.0684708 0.335938\nv 0.4375 0.0687508 0.335938\nv 0.445312 0.0688549 0.335938\nv 0.453125 0.0680808 0.335938\nv 0.460938 0.0661583 0.335938\nv 0.473394 0.0625 0.335938\nv 0.46875 0.0638855 0.335938\nv 0.476562 0.0625 0.340834\nv -0.308716 0.0703125 0.335938\nv -0.195312 0.0767074 0.335938\nv -0.1875 0.0751579 0.335938\nv -0.179688 0.0737597 0.335938\nv -0.171875 0.0729616 0.335938\nv -0.164062 0.0722474 0.335938\nv -0.15625 0.0717838 0.335938\nv -0.148438 0.0715209 0.335938\nv -0.140625 0.0716111 0.335938\nv -0.132812 0.0718117 0.335938\nv -0.125 0.0719961 0.335938\nv -0.117188 0.0720727 0.335938\nv -0.109375 0.0722105 0.335938\nv -0.101562 0.0722209 0.335938\nv -0.09375 0.0721285 0.335938\nv -0.0859375 0.0720063 0.335938\nv -0.078125 0.071901 0.335938\nv -0.0703125 0.0717949 0.335938\nv -0.0625 0.0717664 0.335938\nv -0.0546875 0.071716 0.335938\nv -0.0546875 0.0703125 0.343243\nv -0.046875 0.071611 0.335938\nv -0.046875 0.0703125 0.342618\nv -0.0390625 0.0714426 0.335938\nv -0.0390625 0.0703125 0.34215\nv -0.03125 0.0712594 0.335938\nv -0.03125 0.0703125 0.341539\nv -0.0234375 0.0710564 0.335938\nv -0.0234375 0.0703125 0.340743\nv -0.015625 0.0708658 0.335938\nv -0.015625 0.0703125 0.339852\nv -0.0078125 0.070705 0.335938\nv -0.0078125 0.0703125 0.338848\nv 0 0.0706846 0.335938\nv 0 0.0703125 0.338751\nv 0.0078125 0.0706686 0.335938\nv 0.0078125 0.0703125 0.338648\nv 0.015625 0.0705857 0.335938\nv 0.015625 0.0703125 0.338059\nv 0.0267871 0.0703125 0.335938\nv 0.0234375 0.0704065 0.335938\nv 0.0234375 0.0703125 0.336711\nv -0.309507 0.078125 0.335938\nv -0.210938 0.0821505 0.335938\nv -0.200679 0.078125 0.335938\nv -0.203125 0.079056 0.335938\nv -0.310102 0.0859375 0.335938\nv -0.215287 0.0859375 0.335938\nv -0.21875 0.092823 0.335938\nv -0.311085 0.09375 0.335938\nv -0.3125 0.09375 0.342115\nv -0.219064 0.09375 0.335938\nv -0.21875 0.09375 0.338424\nv -0.311411 0.101562 0.335938\nv -0.3125 0.101562 0.340515\nv -0.220669 0.101562 0.335938\nv -0.311543 0.109375 0.335938\nv -0.3125 0.109375 0.339353\nv -0.220427 0.109375 0.335938\nv -0.311736 0.117188 0.335938\nv -0.3125 0.117188 0.338502\nv -0.220016 0.117188 0.335938\nv -0.311985 0.125 0.335938\nv -0.3125 0.125 0.337623\nv -0.220165 0.125 0.335938\nv -0.312184 0.132812 0.335938\nv -0.3125 0.132812 0.336913\nv -0.220119 0.132812 0.335938\nv -0.312481 0.140625 0.335938\nv -0.3125 0.140884 0.335938\nv -0.3125 0.140625 0.335993\nv -0.220313 0.140625 0.335938\nv -0.313101 0.148438 0.335938\nv -0.220667 0.148438 0.335938\nv -0.313876 0.15625 0.335938\nv -0.221354 0.15625 0.335938\nv -0.314655 0.164062 0.335938\nv -0.222303 0.164062 0.335938\nv -0.315382 0.171875 0.335938\nv -0.222263 0.171875 0.335938\nv -0.316358 0.179688 0.335938\nv -0.222035 0.179688 0.335938\nv -0.317152 0.1875 0.335938\nv -0.22194 0.1875 0.335938\nv -0.317885 0.195312 0.335938\nv -0.320312 0.195312 0.343636\nv -0.221745 0.195312 0.335938\nv -0.318698 0.203125 0.335938\nv -0.320312 0.203125 0.340763\nv -0.221647 0.203125 0.335938\nv -0.319471 0.210938 0.335938\nv -0.320312 0.21767 0.335938\nv -0.320312 0.210938 0.338438\nv -0.221502 0.210938 0.335938\nv -0.32044 0.21875 0.335938\nv -0.221375 0.21875 0.335938\nv -0.320992 0.226562 0.335938\nv -0.221331 0.226562 0.335938\nv -0.321015 0.234375 0.335938\nv -0.221615 0.234375 0.335938\nv -0.320728 0.242188 0.335938\nv -0.222058 0.242188 0.335938\nv -0.320477 0.25 0.335938\nv -0.320312 0.257528 0.335938\nv -0.22255 0.25 0.335938\nv -0.320306 0.257812 0.335938\nv -0.320312 0.257812 0.335955\nv -0.22302 0.257812 0.335938\nv -0.32021 0.265625 0.335938\nv -0.320312 0.265625 0.336194\nv -0.223485 0.265625 0.335938\nv -0.320133 0.273438 0.335938\nv -0.320312 0.273438 0.336351\nv -0.224234 0.273438 0.335938\nv -0.320152 0.28125 0.335938\nv -0.320312 0.28125 0.336291\nv -0.224985 0.28125 0.335938\nv -0.320154 0.289062 0.335938\nv -0.320312 0.291585 0.335938\nv -0.320312 0.289062 0.336262\nv -0.225577 0.289062 0.335938\nv -0.320628 0.296875 0.335938\nv -0.226087 0.296875 0.335938\nv -0.226562 0.303856 0.335938\nv -0.32107 0.304688 0.335938\nv -0.22663 0.304688 0.335938\nv -0.226562 0.304688 0.336892\nv -0.321613 0.3125 0.335938\nv -0.22742 0.3125 0.335938\nv -0.322139 0.320312 0.335938\nv -0.228051 0.320312 0.335938\nv -0.322576 0.328125 0.335938\nv -0.229016 0.328125 0.335938\nv -0.322747 0.335938 0.335938\nv -0.230249 0.335938 0.335938\nv -0.322737 0.34375 0.335938\nv -0.231407 0.34375 0.335938\nv -0.323012 0.351562 0.335938\nv -0.232298 0.351562 0.335938\nv -0.323331 0.359375 0.335938\nv -0.232781 0.359375 0.335938\nv -0.323655 0.367188 0.335938\nv -0.233059 0.367188 0.335938\nv -0.324061 0.375 0.335938\nv -0.328125 0.375 0.343698\nv -0.23336 0.375 0.335938\nv -0.324618 0.382812 0.335938\nv -0.328125 0.382812 0.342696\nv -0.233617 0.382812 0.335938\nv -0.325122 0.390625 0.335938\nv -0.328125 0.390625 0.3418\nv -0.233846 0.390625 0.335938\nv -0.325598 0.398438 0.335938\nv -0.328125 0.398438 0.340948\nv -0.234002 0.398438 0.335938\nv -0.326056 0.40625 0.335938\nv -0.328125 0.40625 0.34018\nv -0.234161 0.40625 0.335938\nv -0.326465 0.414062 0.335938\nv -0.328125 0.414062 0.339356\nv -0.234271 0.414062 0.335938\nv -0.326916 0.421875 0.335938\nv -0.328125 0.421875 0.338415\nv -0.234375 0.421875 0.335938\nv -0.234375 0.421889 0.335938\nv -0.327217 0.429688 0.335938\nv -0.328125 0.429688 0.33774\nv -0.234619 0.429688 0.335938\nv -0.234375 0.429688 0.336799\nv -0.327557 0.4375 0.335938\nv -0.328125 0.4375 0.33704\nv -0.234902 0.4375 0.335938\nv -0.234375 0.4375 0.337798\nv -0.327855 0.445312 0.335938\nv -0.328125 0.453069 0.335938\nv -0.328125 0.445312 0.336472\nv -0.23518 0.445312 0.335938\nv -0.234375 0.445312 0.338828\nv -0.328127 0.453125 0.335938\nv -0.235442 0.453125 0.335938\nv -0.234375 0.453125 0.339806\nv -0.328452 0.460938 0.335938\nv -0.235715 0.460938 0.335938\nv -0.234375 0.460938 0.340776\nv -0.328785 0.46875 0.335938\nv -0.236011 0.46875 0.335938\nv -0.234375 0.46875 0.341423\nv -0.329108 0.476562 0.335938\nv -0.236359 0.476562 0.335938\nv -0.234375 0.476562 0.342412\nv -0.329386 0.484375 0.335938\nv -0.2368 0.484375 0.335938\nv -0.234375 0.484375 0.343584\nv -0.330115 0.492188 0.335938\nv -0.23725 0.492188 0.335938\nv -0.330927 0.5 0.335938\nv -0.23779 0.5 0.335938\nv -0.331753 0.507812 0.335938\nv -0.238481 0.507812 0.335938\nv -0.332576 0.515625 0.335938\nv -0.335938 0.515625 0.342825\nv -0.239272 0.515625 0.335938\nv -0.333372 0.523438 0.335938\nv -0.335938 0.523438 0.341326\nv -0.23995 0.523438 0.335938\nv -0.334115 0.53125 0.335938\nv -0.335938 0.53125 0.339803\nv -0.240705 0.53125 0.335938\nv -0.334843 0.539062 0.335938\nv -0.335938 0.539062 0.338303\nv -0.241376 0.539062 0.335938\nv -0.335497 0.546875 0.335938\nv -0.335938 0.551733 0.335938\nv -0.335938 0.546875 0.336882\nv -0.241955 0.546875 0.335938\nv -0.242188 0.550257 0.335938\nv -0.336219 0.554688 0.335938\nv -0.24253 0.554688 0.335938\nv -0.242188 0.554688 0.336924\nv -0.336745 0.5625 0.335938\nv -0.243219 0.5625 0.335938\nv -0.242188 0.5625 0.338941\nv -0.337178 0.570312 0.335938\nv -0.24392 0.570312 0.335938\nv -0.242188 0.570312 0.341045\nv -0.337598 0.578125 0.335938\nv -0.244622 0.578125 0.335938\nv -0.242188 0.578125 0.343168\nv -0.337775 0.585938 0.335938\nv -0.245321 0.585938 0.335938\nv -0.337873 0.59375 0.335938\nv -0.245966 0.59375 0.335938\nv -0.338163 0.601562 0.335938\nv -0.246604 0.601562 0.335938\nv -0.338881 0.609375 0.335938\nv -0.24724 0.609375 0.335938\nv -0.339961 0.617188 0.335938\nv -0.247651 0.617188 0.335938\nv -0.341238 0.625 0.335938\nv -0.34375 0.625 0.341962\nv -0.24832 0.625 0.335938\nv -0.342079 0.632812 0.335938\nv -0.34375 0.632812 0.340344\nv -0.249309 0.632812 0.335938\nv -0.25 0.638502 0.335938\nv -0.342811 0.640625 0.335938\nv -0.34375 0.640625 0.338581\nv -0.25025 0.640625 0.335938\nv -0.25 0.640625 0.337225\nv -0.343652 0.648438 0.335938\nv -0.34375 0.64937 0.335938\nv -0.34375 0.648438 0.336219\nv -0.251128 0.648438 0.335938\nv -0.25 0.648438 0.342144\nv -0.344528 0.65625 0.335938\nv -0.252002 0.65625 0.335938\nv -0.345128 0.664062 0.335938\nv -0.252988 0.664062 0.335938\nv -0.345603 0.671875 0.335938\nv -0.253871 0.671875 0.335938\nv -0.346167 0.679688 0.335938\nv -0.25446 0.679688 0.335938\nv -0.346632 0.6875 0.335938\nv -0.255284 0.6875 0.335938\nv -0.346979 0.695312 0.335938\nv -0.256118 0.695312 0.335938\nv -0.347138 0.703125 0.335938\nv -0.256942 0.703125 0.335938\nv -0.347064 0.710938 0.335938\nv -0.257736 0.710938 0.335938\nv -0.257812 0.711576 0.335938\nv -0.346953 0.71875 0.335938\nv -0.258574 0.71875 0.335938\nv -0.257812 0.71875 0.342699\nv -0.346771 0.726562 0.335938\nv -0.259462 0.726562 0.335938\nv -0.345841 0.734375 0.335938\nv -0.259845 0.734375 0.335938\nv -0.344349 0.742188 0.335938\nv -0.34375 0.748219 0.335938\nv -0.260253 0.742188 0.335938\nv -0.343592 0.75 0.335938\nv -0.34375 0.75 0.336416\nv -0.261334 0.75 0.335938\nv -0.343383 0.757812 0.335938\nv -0.34375 0.762521 0.335938\nv -0.34375 0.757812 0.337174\nv -0.262851 0.757812 0.335938\nv -0.34401 0.765625 0.335938\nv -0.264455 0.765625 0.335938\nv -0.265625 0.768771 0.335938\nv -0.344845 0.773438 0.335938\nv -0.267761 0.773438 0.335938\nv -0.345761 0.78125 0.335938\nv -0.272388 0.78125 0.335938\nv -0.273438 0.783102 0.335938\nv -0.346629 0.789062 0.335938\nv -0.276532 0.789062 0.335938\nv -0.34716 0.796875 0.335938\nv -0.279981 0.796875 0.335938\nv -0.28125 0.799693 0.335938\nv -0.348062 0.804688 0.335938\nv -0.351562 0.804688 0.34346\nv -0.283634 0.804688 0.335938\nv -0.3488 0.8125 0.335938\nv -0.351562 0.8125 0.341833\nv -0.288145 0.8125 0.335938\nv -0.289062 0.814245 0.335938\nv -0.348996 0.820312 0.335938\nv -0.351562 0.820312 0.342648\nv -0.291965 0.820312 0.335938\nv -0.348322 0.828125 0.335938\nv -0.294649 0.828125 0.335938\nv -0.346261 0.835938 0.335938\nv -0.34375 0.842635 0.335938\nv -0.29668 0.835938 0.335938\nv -0.296875 0.837321 0.335938\nv -0.34309 0.84375 0.335938\nv -0.34375 0.84375 0.337425\nv -0.335938 0.849266 0.335938\nv -0.297791 0.84375 0.335938\nv -0.296875 0.84375 0.338625\nv -0.331102 0.851562 0.335938\nv -0.335938 0.851562 0.343282\nv -0.328125 0.853371 0.335938\nv -0.29908 0.851562 0.335938\nv -0.296875 0.851562 0.342337\nv -0.321571 0.859375 0.335938\nv -0.320312 0.860581 0.335938\nv -0.3125 0.863726 0.335938\nv -0.303514 0.859375 0.335938\nv -0.304688 0.860693 0.335938\nv -0.296875 -0.7349 0.34375\nv -0.289062 -0.735628 0.34375\nv -0.28125 -0.735884 0.34375\nv -0.273438 -0.735123 0.34375\nv 0.429688 -0.735848 0.34375\nv 0.4375 -0.736345 0.34375\nv 0.445312 -0.736163 0.34375\nv 0.453125 -0.735755 0.34375\nv 0.460938 -0.73534 0.34375\nv -0.328125 -0.728596 0.34375\nv -0.320312 -0.730408 0.34375\nv -0.3125 -0.732071 0.34375\nv -0.300565 -0.734375 0.34375\nv -0.304688 -0.733761 0.34375\nv -0.304688 -0.734375 0.349179\nv -0.267592 -0.734375 0.34375\nv -0.273438 -0.734375 0.349973\nv -0.265625 -0.734098 0.34375\nv -0.257812 -0.731928 0.34375\nv -0.25 -0.728663 0.34375\nv 0.40625 -0.72899 0.34375\nv 0.414062 -0.731873 0.34375\nv 0.422969 -0.734375 0.34375\nv 0.421875 -0.734124 0.34375\nv 0.468601 -0.734375 0.34375\nv 0.46875 -0.734356 0.34375\nv 0.46875 -0.734375 0.343919\nv 0.476562 -0.732485 0.34375\nv 0.484375 -0.729824 0.34375\nv -0.333335 -0.726562 0.34375\nv -0.335938 -0.724611 0.34375\nv -0.246214 -0.726562 0.34375\nv -0.242188 -0.721554 0.34375\nv 0.401183 -0.726562 0.34375\nv 0.398438 -0.724292 0.34375\nv 0.491111 -0.726562 0.34375\nv 0.492188 -0.726037 0.34375\nv 0.492188 -0.726562 0.345148\nv 0.5 -0.722072 0.34375\nv -0.339756 -0.71875 0.34375\nv -0.240518 -0.71875 0.34375\nv 0.394473 -0.71875 0.34375\nv 0.503313 -0.71875 0.34375\nv -0.341517 -0.710938 0.34375\nv -0.238057 -0.710938 0.34375\nv 0.390779 -0.710938 0.34375\nv 0.390625 -0.710432 0.34375\nv 0.505886 -0.710938 0.34375\nv -0.342058 -0.703125 0.34375\nv -0.234817 -0.703125 0.34375\nv -0.234375 -0.701956 0.34375\nv -0.234375 -0.703125 0.347204\nv 0.388664 -0.703125 0.34375\nv 0.507014 -0.703125 0.34375\nv 0.507812 -0.703125 0.349338\nv -0.342241 -0.695312 0.34375\nv -0.2318 -0.695312 0.34375\nv 0.387238 -0.695312 0.34375\nv 0.507586 -0.695312 0.34375\nv 0.507812 -0.695312 0.347194\nv -0.341512 -0.6875 0.34375\nv -0.230343 -0.6875 0.34375\nv 0.387082 -0.6875 0.34375\nv 0.50698 -0.6875 0.34375\nv -0.340769 -0.679688 0.34375\nv -0.22899 -0.679688 0.34375\nv 0.38684 -0.679688 0.34375\nv 0.506562 -0.679688 0.34375\nv -0.340036 -0.671875 0.34375\nv -0.227647 -0.671875 0.34375\nv 0.38667 -0.671875 0.34375\nv 0.505878 -0.671875 0.34375\nv -0.339286 -0.664062 0.34375\nv -0.226731 -0.664062 0.34375\nv -0.226562 -0.662538 0.34375\nv -0.226562 -0.664062 0.344902\nv 0.38653 -0.664062 0.34375\nv 0.505438 -0.664062 0.34375\nv -0.338411 -0.65625 0.34375\nv -0.225815 -0.65625 0.34375\nv 0.386391 -0.65625 0.34375\nv 0.504967 -0.65625 0.34375\nv -0.337436 -0.648438 0.34375\nv -0.22459 -0.648438 0.34375\nv 0.386121 -0.648438 0.34375\nv 0.504663 -0.648438 0.34375\nv -0.336457 -0.640625 0.34375\nv -0.335938 -0.636592 0.34375\nv -0.223793 -0.640625 0.34375\nv 0.385872 -0.640625 0.34375\nv 0.504626 -0.640625 0.34375\nv -0.335396 -0.632812 0.34375\nv -0.2235 -0.632812 0.34375\nv 0.38572 -0.632812 0.34375\nv 0.504631 -0.632812 0.34375\nv -0.334166 -0.625 0.34375\nv -0.223299 -0.625 0.34375\nv 0.385354 -0.625 0.34375\nv 0.382812 -0.625 0.350806\nv 0.504612 -0.625 0.34375\nv -0.33301 -0.617188 0.34375\nv -0.223051 -0.617188 0.34375\nv 0.384922 -0.617188 0.34375\nv 0.382812 -0.617188 0.349147\nv 0.504689 -0.617188 0.34375\nv -0.332261 -0.609375 0.34375\nv -0.222725 -0.609375 0.34375\nv 0.384383 -0.609375 0.34375\nv 0.382812 -0.609375 0.347605\nv 0.504617 -0.609375 0.34375\nv -0.332038 -0.601562 0.34375\nv -0.222399 -0.601562 0.34375\nv 0.383795 -0.601562 0.34375\nv 0.382812 -0.601562 0.345943\nv 0.504399 -0.601562 0.34375\nv -0.331735 -0.59375 0.34375\nv -0.221894 -0.59375 0.34375\nv -0.21875 -0.59375 0.351274\nv 0.383167 -0.59375 0.34375\nv 0.382812 -0.589641 0.34375\nv 0.382812 -0.59375 0.344467\nv 0.504065 -0.59375 0.34375\nv -0.331494 -0.585938 0.34375\nv -0.221342 -0.585938 0.34375\nv -0.21875 -0.585938 0.349647\nv 0.382497 -0.585938 0.34375\nv 0.503597 -0.585938 0.34375\nv -0.331327 -0.578125 0.34375\nv -0.220722 -0.578125 0.34375\nv -0.21875 -0.578125 0.348315\nv 0.381512 -0.578125 0.34375\nv 0.503406 -0.578125 0.34375\nv -0.331216 -0.570312 0.34375\nv -0.219576 -0.570312 0.34375\nv -0.21875 -0.568682 0.34375\nv -0.21875 -0.570312 0.346045\nv -0.210938 -0.563156 0.34375\nv 0.378937 -0.570312 0.34375\nv 0.375 -0.563293 0.34375\nv 0.503301 -0.570312 0.34375\nv -0.331178 -0.5625 0.34375\nv -0.209379 -0.5625 0.34375\nv -0.203125 -0.560134 0.34375\nv -0.195312 -0.557167 0.34375\nv -0.1875 -0.554793 0.34375\nv -0.0078125 -0.55524 0.34375\nv 0 -0.555684 0.34375\nv 0.0078125 -0.555797 0.34375\nv 0.015625 -0.555549 0.34375\nv 0.0234375 -0.555031 0.34375\nv 0.359375 -0.5549 0.34375\nv 0.374251 -0.5625 0.34375\nv 0.367188 -0.558776 0.34375\nv 0.5031 -0.5625 0.34375\nv -0.331328 -0.554688 0.34375\nv -0.186667 -0.554688 0.34375\nv -0.179688 -0.553905 0.34375\nv -0.171875 -0.553387 0.34375\nv -0.164062 -0.553261 0.34375\nv -0.15625 -0.552976 0.34375\nv -0.148438 -0.551447 0.34375\nv -0.140625 -0.548855 0.34375\nv -0.078125 -0.546927 0.34375\nv -0.0703125 -0.547546 0.34375\nv -0.0625 -0.548337 0.34375\nv -0.0546875 -0.549117 0.34375\nv -0.046875 -0.55007 0.34375\nv -0.0390625 -0.551145 0.34375\nv -0.03125 -0.552367 0.34375\nv -0.0234375 -0.553617 0.34375\nv -0.0146228 -0.554688 0.34375\nv -0.015625 -0.554588 0.34375\nv 0.0279409 -0.554688 0.34375\nv 0.03125 -0.554365 0.34375\nv 0.0390625 -0.553316 0.34375\nv 0.046875 -0.55211 0.34375\nv 0.0546875 -0.55128 0.34375\nv 0.0625 -0.550607 0.34375\nv 0.0703125 -0.549904 0.34375\nv 0.078125 -0.54932 0.34375\nv 0.0859375 -0.548901 0.34375\nv 0.09375 -0.548578 0.34375\nv 0.101562 -0.548276 0.34375\nv 0.109375 -0.548186 0.34375\nv 0.117188 -0.547959 0.34375\nv 0.125 -0.547701 0.34375\nv 0.132812 -0.547705 0.34375\nv 0.140625 -0.547903 0.34375\nv 0.148438 -0.548037 0.34375\nv 0.15625 -0.54796 0.34375\nv 0.164062 -0.547992 0.34375\nv 0.171875 -0.548069 0.34375\nv 0.179688 -0.548177 0.34375\nv 0.1875 -0.548172 0.34375\nv 0.195312 -0.548418 0.34375\nv 0.203125 -0.548918 0.34375\nv 0.210938 -0.549587 0.34375\nv 0.21875 -0.55023 0.34375\nv 0.226562 -0.550464 0.34375\nv 0.234375 -0.550694 0.34375\nv 0.242188 -0.550673 0.34375\nv 0.25 -0.550592 0.34375\nv 0.257812 -0.550643 0.34375\nv 0.265625 -0.550799 0.34375\nv 0.273438 -0.55092 0.34375\nv 0.28125 -0.550493 0.34375\nv 0.289062 -0.549851 0.34375\nv 0.296875 -0.549461 0.34375\nv 0.304688 -0.549302 0.34375\nv 0.3125 -0.549457 0.34375\nv 0.320312 -0.550654 0.34375\nv 0.328125 -0.551358 0.34375\nv 0.335938 -0.551515 0.34375\nv 0.34375 -0.552036 0.34375\nv 0.358761 -0.554688 0.34375\nv 0.351562 -0.552581 0.34375\nv 0.351562 -0.554688 0.350033\nv 0.502899 -0.554688 0.34375\nv -0.331453 -0.546875 0.34375\nv -0.135202 -0.546875 0.34375\nv -0.132812 -0.545733 0.34375\nv -0.125 -0.54314 0.34375\nv -0.117188 -0.543779 0.34375\nv -0.109375 -0.544329 0.34375\nv -0.101562 -0.544942 0.34375\nv -0.09375 -0.545646 0.34375\nv -0.0789018 -0.546875 0.34375\nv -0.0859375 -0.546328 0.34375\nv -0.0859375 -0.546875 0.348614\nv 0.50274 -0.546875 0.34375\nv -0.331675 -0.539062 0.34375\nv 0.502746 -0.539062 0.34375\nv -0.331743 -0.53125 0.34375\nv 0.502904 -0.53125 0.34375\nv -0.331796 -0.523438 0.34375\nv 0.502844 -0.523438 0.34375\nv -0.331872 -0.515625 0.34375\nv 0.502758 -0.515625 0.34375\nv -0.331911 -0.507812 0.34375\nv 0.502686 -0.507812 0.34375\nv -0.331817 -0.5 0.34375\nv 0.502646 -0.5 0.34375\nv -0.331627 -0.492188 0.34375\nv -0.132812 -0.487447 0.34375\nv -0.125 -0.488131 0.34375\nv -0.117188 -0.486229 0.34375\nv 0.502679 -0.492188 0.34375\nv -0.331574 -0.484375 0.34375\nv -0.148438 -0.479526 0.34375\nv -0.139033 -0.484375 0.34375\nv -0.140625 -0.483608 0.34375\nv -0.109457 -0.484375 0.34375\nv -0.117188 -0.484375 0.349142\nv -0.109375 -0.484357 0.34375\nv -0.101562 -0.482603 0.34375\nv -0.09375 -0.480794 0.34375\nv -0.0859375 -0.47899 0.34375\nv -0.078125 -0.477223 0.34375\nv 0.28125 -0.477094 0.34375\nv 0.289062 -0.478334 0.34375\nv 0.296875 -0.47942 0.34375\nv 0.304688 -0.480924 0.34375\nv 0.3125 -0.482793 0.34375\nv 0.320312 -0.48161 0.34375\nv 0.328125 -0.477964 0.34375\nv 0.502682 -0.484375 0.34375\nv -0.33162 -0.476562 0.34375\nv -0.195312 -0.468926 0.34375\nv -0.1875 -0.471393 0.34375\nv -0.179688 -0.472269 0.34375\nv -0.171875 -0.472273 0.34375\nv -0.164062 -0.472773 0.34375\nv -0.154205 -0.476562 0.34375\nv -0.15625 -0.475485 0.34375\nv -0.0752989 -0.476562 0.34375\nv -0.078125 -0.476562 0.346922\nv -0.0703125 -0.475513 0.34375\nv -0.0625 -0.473987 0.34375\nv -0.0546875 -0.47252 0.34375\nv -0.046875 -0.470983 0.34375\nv -0.0390625 -0.469674 0.34375\nv 0.148438 -0.468798 0.34375\nv 0.15625 -0.469404 0.34375\nv 0.164062 -0.470066 0.34375\nv 0.171875 -0.4706 0.34375\nv 0.179688 -0.471415 0.34375\nv 0.1875 -0.472221 0.34375\nv 0.195312 -0.472584 0.34375\nv 0.203125 -0.472752 0.34375\nv 0.210938 -0.472786 0.34375\nv 0.21875 -0.472824 0.34375\nv 0.226562 -0.472922 0.34375\nv 0.234375 -0.47317 0.34375\nv 0.242188 -0.473578 0.34375\nv 0.25 -0.474282 0.34375\nv 0.257812 -0.474844 0.34375\nv 0.265625 -0.475305 0.34375\nv 0.27716 -0.476562 0.34375\nv 0.273438 -0.476113 0.34375\nv 0.331223 -0.476562 0.34375\nv 0.335938 -0.474534 0.34375\nv 0.335938 -0.476562 0.349714\nv 0.34375 -0.47227 0.34375\nv 0.351562 -0.471708 0.34375\nv 0.359375 -0.470028 0.34375\nv 0.502794 -0.476562 0.34375\nv -0.331644 -0.46875 0.34375\nv -0.195784 -0.46875 0.34375\nv -0.203125 -0.465975 0.34375\nv -0.203125 -0.46875 0.349899\nv -0.0331859 -0.46875 0.34375\nv -0.03125 -0.468453 0.34375\nv -0.0234375 -0.467121 0.34375\nv -0.015625 -0.46578 0.34375\nv -0.0078125 -0.464776 0.34375\nv 0 -0.463861 0.34375\nv 0.0078125 -0.463421 0.34375\nv 0.015625 -0.463289 0.34375\nv 0.0234375 -0.463498 0.34375\nv 0.03125 -0.463969 0.34375\nv 0.0390625 -0.46411 0.34375\nv 0.046875 -0.463982 0.34375\nv 0.046875 -0.46875 0.351189\nv 0.0546875 -0.463622 0.34375\nv 0.0546875 -0.46875 0.351131\nv 0.0625 -0.46322 0.34375\nv 0.0625 -0.46875 0.351431\nv 0.0703125 -0.462847 0.34375\nv 0.0703125 -0.46875 0.351351\nv 0.078125 -0.462826 0.34375\nv 0.078125 -0.46875 0.35116\nv 0.0859375 -0.463123 0.34375\nv 0.0859375 -0.46875 0.350735\nv 0.09375 -0.463303 0.34375\nv 0.09375 -0.46875 0.350555\nv 0.101562 -0.463485 0.34375\nv 0.101562 -0.46875 0.350086\nv 0.109375 -0.463967 0.34375\nv 0.109375 -0.46875 0.349561\nv 0.117188 -0.465023 0.34375\nv 0.117188 -0.46875 0.348631\nv 0.125 -0.466048 0.34375\nv 0.125 -0.46875 0.347509\nv 0.132812 -0.467271 0.34375\nv 0.132812 -0.46875 0.346069\nv 0.147857 -0.46875 0.34375\nv 0.140625 -0.468144 0.34375\nv 0.140625 -0.46875 0.344777\nv 0.363879 -0.46875 0.34375\nv 0.367188 -0.467017 0.34375\nv 0.502957 -0.46875 0.34375\nv -0.331653 -0.460938 0.34375\nv -0.210061 -0.460938 0.34375\nv -0.210938 -0.459221 0.34375\nv -0.210938 -0.460938 0.346827\nv 0.373501 -0.460938 0.34375\nv 0.375 -0.459351 0.34375\nv 0.375 -0.460938 0.35066\nv 0.503089 -0.460938 0.34375\nv -0.331693 -0.453125 0.34375\nv -0.213005 -0.453125 0.34375\nv 0.379249 -0.453125 0.34375\nv 0.503198 -0.453125 0.34375\nv -0.331659 -0.445312 0.34375\nv -0.214873 -0.445312 0.34375\nv 0.381538 -0.445312 0.34375\nv 0.382812 -0.441006 0.34375\nv 0.503297 -0.445312 0.34375\nv -0.331495 -0.4375 0.34375\nv -0.216316 -0.4375 0.34375\nv 0.383785 -0.4375 0.34375\nv 0.503534 -0.4375 0.34375\nv -0.331269 -0.429688 0.34375\nv -0.217613 -0.429688 0.34375\nv -0.21875 -0.422625 0.34375\nv 0.385242 -0.429688 0.34375\nv 0.503912 -0.429688 0.34375\nv -0.331006 -0.421875 0.34375\nv -0.218862 -0.421875 0.34375\nv -0.21875 -0.421875 0.344295\nv 0.386842 -0.421875 0.34375\nv 0.504188 -0.421875 0.34375\nv -0.330715 -0.414062 0.34375\nv -0.219903 -0.414062 0.34375\nv -0.21875 -0.414062 0.348559\nv 0.388223 -0.414062 0.34375\nv 0.504372 -0.414062 0.34375\nv -0.330284 -0.40625 0.34375\nv -0.220782 -0.40625 0.34375\nv -0.21875 -0.40625 0.351386\nv 0.389142 -0.40625 0.34375\nv 0.504509 -0.40625 0.34375\nv -0.329716 -0.398438 0.34375\nv -0.220733 -0.398438 0.34375\nv -0.21875 -0.398438 0.351137\nv 0.388686 -0.398438 0.34375\nv 0.50468 -0.398438 0.34375\nv -0.329129 -0.390625 0.34375\nv -0.220104 -0.390625 0.34375\nv -0.21875 -0.390625 0.349026\nv 0.387926 -0.390625 0.34375\nv 0.504726 -0.390625 0.34375\nv -0.328579 -0.382812 0.34375\nv -0.328125 -0.377411 0.34375\nv -0.21969 -0.382812 0.34375\nv -0.21875 -0.382812 0.347315\nv 0.387553 -0.382812 0.34375\nv 0.50477 -0.382812 0.34375\nv -0.327877 -0.375 0.34375\nv -0.219342 -0.375 0.34375\nv -0.21875 -0.375 0.346499\nv 0.38759 -0.375 0.34375\nv 0.504677 -0.375 0.34375\nv -0.327081 -0.367188 0.34375\nv -0.219191 -0.367188 0.34375\nv -0.21875 -0.367188 0.347601\nv 0.387782 -0.367188 0.34375\nv 0.504405 -0.367188 0.34375\nv -0.326239 -0.359375 0.34375\nv -0.219595 -0.359375 0.34375\nv 0.387981 -0.359375 0.34375\nv 0.50436 -0.359375 0.34375\nv -0.325293 -0.351562 0.34375\nv -0.219959 -0.351562 0.34375\nv 0.388225 -0.351562 0.34375\nv 0.504313 -0.351562 0.34375\nv -0.324529 -0.34375 0.34375\nv -0.220461 -0.34375 0.34375\nv 0.388527 -0.34375 0.34375\nv 0.504243 -0.34375 0.34375\nv -0.323905 -0.335938 0.34375\nv -0.220968 -0.335938 0.34375\nv 0.388721 -0.335938 0.34375\nv 0.504233 -0.335938 0.34375\nv -0.323545 -0.328125 0.34375\nv -0.221278 -0.328125 0.34375\nv 0.388976 -0.328125 0.34375\nv 0.50432 -0.328125 0.34375\nv -0.323154 -0.320312 0.34375\nv -0.221628 -0.320312 0.34375\nv 0.389396 -0.320312 0.34375\nv 0.504356 -0.320312 0.34375\nv -0.322714 -0.3125 0.34375\nv -0.221903 -0.3125 0.34375\nv 0.38979 -0.3125 0.34375\nv 0.390625 -0.3125 0.350776\nv 0.504368 -0.3125 0.34375\nv -0.32229 -0.304688 0.34375\nv -0.222015 -0.304688 0.34375\nv 0.390202 -0.304688 0.34375\nv 0.390625 -0.304688 0.347958\nv 0.504347 -0.304688 0.34375\nv -0.321959 -0.296875 0.34375\nv -0.222108 -0.296875 0.34375\nv 0.390539 -0.296875 0.34375\nv 0.390625 -0.294314 0.34375\nv 0.390625 -0.296875 0.344836\nv 0.504275 -0.296875 0.34375\nv -0.321605 -0.289062 0.34375\nv -0.222184 -0.289062 0.34375\nv 0.390778 -0.289062 0.34375\nv 0.504132 -0.289062 0.34375\nv -0.32124 -0.28125 0.34375\nv -0.222243 -0.28125 0.34375\nv 0.391152 -0.28125 0.34375\nv 0.504007 -0.28125 0.34375\nv -0.320738 -0.273438 0.34375\nv -0.320312 -0.268253 0.34375\nv -0.222358 -0.273438 0.34375\nv 0.391849 -0.273438 0.34375\nv 0.503772 -0.273438 0.34375\nv -0.320052 -0.265625 0.34375\nv -0.222405 -0.265625 0.34375\nv 0.392585 -0.265625 0.34375\nv 0.503477 -0.265625 0.34375\nv -0.319343 -0.257812 0.34375\nv -0.222125 -0.257812 0.34375\nv 0.392872 -0.257812 0.34375\nv 0.502904 -0.257812 0.34375\nv -0.318526 -0.25 0.34375\nv -0.221631 -0.25 0.34375\nv 0.393164 -0.25 0.34375\nv 0.502535 -0.25 0.34375\nv -0.317716 -0.242188 0.34375\nv -0.221196 -0.242188 0.34375\nv 0.393416 -0.242188 0.34375\nv 0.50225 -0.242188 0.34375\nv -0.317277 -0.234375 0.34375\nv -0.220779 -0.234375 0.34375\nv 0.393791 -0.234375 0.34375\nv 0.502121 -0.234375 0.34375\nv -0.31706 -0.226562 0.34375\nv -0.220651 -0.226562 0.34375\nv 0.394005 -0.226562 0.34375\nv 0.502162 -0.226562 0.34375\nv -0.316865 -0.21875 0.34375\nv -0.220378 -0.21875 0.34375\nv 0.394154 -0.21875 0.34375\nv 0.502075 -0.21875 0.34375\nv -0.316772 -0.210938 0.34375\nv -0.219978 -0.210938 0.34375\nv 0.394274 -0.210938 0.34375\nv 0.501937 -0.210938 0.34375\nv -0.316746 -0.203125 0.34375\nv -0.219835 -0.203125 0.34375\nv 0.394489 -0.203125 0.34375\nv 0.501895 -0.203125 0.34375\nv -0.316414 -0.195312 0.34375\nv -0.219963 -0.195312 0.34375\nv 0.394666 -0.195312 0.34375\nv 0.501852 -0.195312 0.34375\nv -0.316078 -0.1875 0.34375\nv -0.220113 -0.1875 0.34375\nv 0.394856 -0.1875 0.34375\nv 0.501785 -0.1875 0.34375\nv -0.315759 -0.179688 0.34375\nv -0.220234 -0.179688 0.34375\nv 0.395044 -0.179688 0.34375\nv 0.501435 -0.179688 0.34375\nv -0.315299 -0.171875 0.34375\nv -0.22035 -0.171875 0.34375\nv 0.395122 -0.171875 0.34375\nv 0.501104 -0.171875 0.34375\nv -0.314946 -0.164062 0.34375\nv -0.220518 -0.164062 0.34375\nv 0.394852 -0.164062 0.34375\nv 0.500988 -0.164062 0.34375\nv -0.314469 -0.15625 0.34375\nv -0.220217 -0.15625 0.34375\nv 0.394366 -0.15625 0.34375\nv 0.500989 -0.15625 0.34375\nv -0.31365 -0.148438 0.34375\nv -0.220021 -0.148438 0.34375\nv 0.393931 -0.148438 0.34375\nv 0.500695 -0.148438 0.34375\nv -0.313112 -0.140625 0.34375\nv -0.219892 -0.140625 0.34375\nv -0.21875 -0.140625 0.35\nv 0.393371 -0.140625 0.34375\nv 0.500221 -0.140625 0.34375\nv 0.5 -0.135857 0.34375\nv -0.312789 -0.132812 0.34375\nv -0.219613 -0.132812 0.34375\nv -0.21875 -0.132812 0.348645\nv 0.392437 -0.132812 0.34375\nv 0.499851 -0.132812 0.34375\nv 0.5 -0.132812 0.34674\nv -0.312621 -0.125 0.34375\nv -0.219185 -0.125 0.34375\nv -0.21875 -0.120971 0.34375\nv -0.21875 -0.125 0.346135\nv 0.391511 -0.125 0.34375\nv 0.390625 -0.117725 0.34375\nv 0.499517 -0.125 0.34375\nv 0.5 -0.125 0.350769\nv -0.312524 -0.117188 0.34375\nv -0.3125 -0.116606 0.34375\nv -0.218334 -0.117188 0.34375\nv 0.390562 -0.117188 0.34375\nv 0.498938 -0.117188 0.34375\nv -0.312218 -0.109375 0.34375\nv -0.217019 -0.109375 0.34375\nv 0.389048 -0.109375 0.34375\nv 0.49876 -0.109375 0.34375\nv -0.312058 -0.101562 0.34375\nv -0.215391 -0.101562 0.34375\nv 0.387014 -0.101562 0.34375\nv 0.498648 -0.101562 0.34375\nv -0.311794 -0.09375 0.34375\nv -0.212308 -0.09375 0.34375\nv -0.210938 -0.0910831 0.34375\nv 0.384018 -0.09375 0.34375\nv 0.382812 -0.0906291 0.34375\nv 0.382812 -0.09375 0.34899\nv 0.499161 -0.09375 0.34375\nv 0.5 -0.0890866 0.34375\nv -0.312342 -0.0859375 0.34375\nv -0.3125 -0.0841746 0.34375\nv -0.3125 -0.0859375 0.34872\nv -0.207609 -0.0859375 0.34375\nv -0.203125 -0.0805716 0.34375\nv 0.380757 -0.0859375 0.34375\nv 0.500569 -0.0859375 0.34375\nv -0.313169 -0.078125 0.34375\nv -0.199545 -0.078125 0.34375\nv -0.195312 -0.0758262 0.34375\nv -0.1875 -0.0739467 0.34375\nv -0.179688 -0.072918 0.34375\nv -0.171875 -0.0722327 0.34375\nv -0.164062 -0.0716571 0.34375\nv 0.359375 -0.0710194 0.34375\nv 0.367188 -0.0724892 0.34375\nv 0.376002 -0.078125 0.34375\nv 0.375 -0.0768956 0.34375\nv 0.50188 -0.078125 0.34375\nv -0.313823 -0.0703125 0.34375\nv -0.156363 -0.0703125 0.34375\nv -0.15625 -0.0702888 0.34375\nv -0.148438 -0.0685214 0.34375\nv -0.140625 -0.0672482 0.34375\nv -0.132812 -0.0670383 0.34375\nv -0.125 -0.0667118 0.34375\nv -0.117188 -0.0664912 0.34375\nv -0.109375 -0.0662577 0.34375\nv -0.101562 -0.0660866 0.34375\nv -0.09375 -0.066007 0.34375\nv -0.0859375 -0.0660436 0.34375\nv -0.078125 -0.0661552 0.34375\nv -0.0703125 -0.0662345 0.34375\nv -0.0625 -0.0663264 0.34375\nv -0.0546875 -0.066089 0.34375\nv -0.046875 -0.0659304 0.34375\nv -0.0390625 -0.065929 0.34375\nv -0.03125 -0.0661606 0.34375\nv -0.0234375 -0.0665213 0.34375\nv -0.015625 -0.066794 0.34375\nv -0.0078125 -0.0670867 0.34375\nv 0 -0.0672461 0.34375\nv 0.0078125 -0.0674029 0.34375\nv 0.015625 -0.0674083 0.34375\nv 0.0234375 -0.0673497 0.34375\nv 0.03125 -0.0673126 0.34375\nv 0.0390625 -0.0672466 0.34375\nv 0.046875 -0.0671938 0.34375\nv 0.0546875 -0.0671375 0.34375\nv 0.0625 -0.0671034 0.34375\nv 0.0703125 -0.0670905 0.34375\nv 0.078125 -0.0671114 0.34375\nv 0.0859375 -0.0671555 0.34375\nv 0.09375 -0.0671414 0.34375\nv 0.101562 -0.0671726 0.34375\nv 0.109375 -0.0671307 0.34375\nv 0.117188 -0.0671046 0.34375\nv 0.125 -0.0671121 0.34375\nv 0.132812 -0.0671285 0.34375\nv 0.140625 -0.0670538 0.34375\nv 0.148438 -0.0669401 0.34375\nv 0.15625 -0.0668878 0.34375\nv 0.164062 -0.0668331 0.34375\nv 0.171875 -0.0668108 0.34375\nv 0.179688 -0.0667279 0.34375\nv 0.1875 -0.0665047 0.34375\nv 0.195312 -0.0663117 0.34375\nv 0.203125 -0.0662285 0.34375\nv 0.210938 -0.0662051 0.34375\nv 0.21875 -0.0662225 0.34375\nv 0.226562 -0.0661843 0.34375\nv 0.234375 -0.0661913 0.34375\nv 0.242188 -0.0663029 0.34375\nv 0.25 -0.0662871 0.34375\nv 0.257812 -0.0662157 0.34375\nv 0.265625 -0.0661486 0.34375\nv 0.273438 -0.0661464 0.34375\nv 0.28125 -0.066225 0.34375\nv 0.289062 -0.0663461 0.34375\nv 0.296875 -0.0664604 0.34375\nv 0.304688 -0.0666946 0.34375\nv 0.3125 -0.0672014 0.34375\nv 0.320312 -0.0676768 0.34375\nv 0.328125 -0.0682341 0.34375\nv 0.335938 -0.0688113 0.34375\nv 0.34375 -0.0695733 0.34375\nv 0.352654 -0.0703125 0.34375\nv 0.351562 -0.0702039 0.34375\nv 0.502974 -0.0703125 0.34375\nv -0.313924 -0.0625 0.34375\nv 0.504157 -0.0625 0.34375\nv -0.313791 -0.0546875 0.34375\nv 0.505008 -0.0546875 0.34375\nv -0.313298 -0.046875 0.34375\nv 0.505378 -0.046875 0.34375\nv -0.313014 -0.0390625 0.34375\nv 0.505202 -0.0390625 0.34375\nv -0.313166 -0.03125 0.34375\nv 0.504173 -0.03125 0.34375\nv -0.313318 -0.0234375 0.34375\nv 0.503629 -0.0234375 0.34375\nv -0.313651 -0.015625 0.34375\nv 0.502942 -0.015625 0.34375\nv -0.313621 -0.0078125 0.34375\nv 0.502321 -0.0078125 0.34375\nv -0.313056 0 0.34375\nv -0.3125 0.00551035 0.34375\nv 0.5025 0 0.34375\nv -0.312276 0.0078125 0.34375\nv -0.3125 0.0078125 0.346606\nv 0.502504 0.0078125 0.34375\nv -0.312396 0.015625 0.34375\nv -0.3125 0.015625 0.345011\nv 0.502553 0.015625 0.34375\nv -0.312278 0.0234375 0.34375\nv -0.3125 0.0234375 0.345277\nv 0.502679 0.0234375 0.34375\nv -0.312376 0.03125 0.34375\nv -0.3125 0.03125 0.344535\nv 0.501878 0.03125 0.34375\nv -0.312306 0.0390625 0.34375\nv -0.3125 0.0390625 0.344962\nv 0.500608 0.0390625 0.34375\nv 0.5 0.0406725 0.34375\nv -0.311843 0.046875 0.34375\nv -0.3125 0.046875 0.347359\nv 0.497081 0.046875 0.34375\nv 0.492188 0.0526073 0.34375\nv -0.310752 0.0546875 0.34375\nv 0.489698 0.0546875 0.34375\nv 0.484375 0.0590246 0.34375\nv -0.310119 0.0625 0.34375\nv -0.0546875 0.0701973 0.34375\nv -0.046875 0.0700436 0.34375\nv -0.0390625 0.0699457 0.34375\nv -0.03125 0.0698355 0.34375\nv -0.0234375 0.0697222 0.34375\nv -0.015625 0.0696184 0.34375\nv -0.0078125 0.069498 0.34375\nv 0 0.0695182 0.34375\nv 0.0078125 0.0695118 0.34375\nv 0.015625 0.0694468 0.34375\nv 0.0234375 0.0693175 0.34375\nv 0.03125 0.0691835 0.34375\nv 0.0390625 0.069078 0.34375\nv 0.046875 0.0690793 0.34375\nv 0.0546875 0.069122 0.34375\nv 0.0625 0.0692058 0.34375\nv 0.0703125 0.0691463 0.34375\nv 0.078125 0.069391 0.34375\nv 0.0859375 0.0694218 0.34375\nv 0.09375 0.0694771 0.34375\nv 0.101562 0.0695247 0.34375\nv 0.109375 0.0695299 0.34375\nv 0.117188 0.0694598 0.34375\nv 0.125 0.0695344 0.34375\nv 0.132812 0.0695753 0.34375\nv 0.140625 0.0696406 0.34375\nv 0.148438 0.0696078 0.34375\nv 0.15625 0.0696511 0.34375\nv 0.164062 0.0696306 0.34375\nv 0.171875 0.0696105 0.34375\nv 0.179688 0.0696809 0.34375\nv 0.1875 0.0697619 0.34375\nv 0.195312 0.0698615 0.34375\nv 0.203125 0.0699047 0.34375\nv 0.210938 0.069971 0.34375\nv 0.21875 0.0698991 0.34375\nv 0.226562 0.0699228 0.34375\nv 0.234375 0.0699307 0.34375\nv 0.242188 0.0698925 0.34375\nv 0.25 0.0697634 0.34375\nv 0.257812 0.0696933 0.34375\nv 0.265625 0.0697704 0.34375\nv 0.273438 0.0698472 0.34375\nv 0.28125 0.0698941 0.34375\nv 0.289062 0.0697518 0.34375\nv 0.296875 0.0696011 0.34375\nv 0.304688 0.0694251 0.34375\nv 0.3125 0.0691783 0.34375\nv 0.320312 0.0689012 0.34375\nv 0.328125 0.0686484 0.34375\nv 0.335938 0.0683366 0.34375\nv 0.34375 0.0680662 0.34375\nv 0.351562 0.0676447 0.34375\nv 0.359375 0.0674755 0.34375\nv 0.367188 0.0671974 0.34375\nv 0.375 0.0669114 0.34375\nv 0.382812 0.0668096 0.34375\nv 0.390625 0.0668407 0.34375\nv 0.398438 0.0669541 0.34375\nv 0.40625 0.066883 0.34375\nv 0.414062 0.0669878 0.34375\nv 0.421875 0.0671209 0.34375\nv 0.429688 0.0674202 0.34375\nv 0.4375 0.0676553 0.34375\nv 0.445312 0.0676677 0.34375\nv 0.453125 0.0669535 0.34375\nv 0.460938 0.0660989 0.34375\nv 0.46875 0.0642776 0.34375\nv 0.477903 0.0625 0.34375\nv 0.476562 0.0629712 0.34375\nv -0.310771 0.0703125 0.34375\nv -0.195312 0.0768464 0.34375\nv -0.1875 0.0749034 0.34375\nv -0.179688 0.0735414 0.34375\nv -0.171875 0.0725772 0.34375\nv -0.164062 0.0717618 0.34375\nv -0.15625 0.0713008 0.34375\nv -0.148438 0.0711405 0.34375\nv -0.140625 0.0712386 0.34375\nv -0.132812 0.0712966 0.34375\nv -0.125 0.0712935 0.34375\nv -0.117188 0.0712981 0.34375\nv -0.109375 0.0713713 0.34375\nv -0.101562 0.0711343 0.34375\nv -0.09375 0.0708923 0.34375\nv -0.0859375 0.0706468 0.34375\nv -0.078125 0.070526 0.34375\nv -0.078125 0.0703125 0.351015\nv -0.0703125 0.0704745 0.34375\nv -0.0703125 0.0703125 0.346652\nv -0.0602717 0.0703125 0.34375\nv -0.0625 0.0703516 0.34375\nv -0.0625 0.0703125 0.344368\nv 0.171875 0.0703125 0.351485\nv 0.179688 0.0703125 0.350786\nv 0.1875 0.0703125 0.350266\nv 0.195312 0.0703125 0.349903\nv 0.203125 0.0703125 0.349511\nv 0.210938 0.0703125 0.349296\nv 0.21875 0.0703125 0.350786\nv -0.311309 0.078125 0.34375\nv -0.3125 0.078125 0.350422\nv -0.210938 0.0834483 0.34375\nv -0.199761 0.078125 0.34375\nv -0.203125 0.0795454 0.34375\nv -0.311886 0.0859375 0.34375\nv -0.3125 0.0908557 0.34375\nv -0.3125 0.0859375 0.346808\nv -0.213398 0.0859375 0.34375\nv -0.31286 0.09375 0.34375\nv -0.218008 0.09375 0.34375\nv -0.21875 0.0958645 0.34375\nv -0.21875 0.09375 0.3496\nv -0.313245 0.101562 0.34375\nv -0.220268 0.101562 0.34375\nv -0.313688 0.109375 0.34375\nv -0.220268 0.109375 0.34375\nv -0.314024 0.117188 0.34375\nv -0.220212 0.117188 0.34375\nv -0.314317 0.125 0.34375\nv -0.220545 0.125 0.34375\nv -0.314641 0.132812 0.34375\nv -0.220886 0.132812 0.34375\nv -0.315166 0.140625 0.34375\nv -0.220847 0.140625 0.34375\nv -0.315869 0.148438 0.34375\nv -0.221038 0.148438 0.34375\nv -0.31674 0.15625 0.34375\nv -0.221465 0.15625 0.34375\nv -0.317373 0.164062 0.34375\nv -0.222046 0.164062 0.34375\nv -0.317994 0.171875 0.34375\nv -0.221753 0.171875 0.34375\nv -0.318829 0.179688 0.34375\nv -0.221544 0.179688 0.34375\nv -0.319553 0.1875 0.34375\nv -0.320312 0.194983 0.34375\nv -0.320312 0.1875 0.347555\nv -0.221368 0.1875 0.34375\nv -0.320345 0.195312 0.34375\nv -0.220937 0.195312 0.34375\nv -0.321188 0.203125 0.34375\nv -0.220644 0.203125 0.34375\nv -0.321928 0.210938 0.34375\nv -0.220512 0.210938 0.34375\nv -0.322657 0.21875 0.34375\nv -0.220549 0.21875 0.34375\nv -0.323026 0.226562 0.34375\nv -0.220631 0.226562 0.34375\nv -0.323043 0.234375 0.34375\nv -0.22101 0.234375 0.34375\nv -0.322912 0.242188 0.34375\nv -0.221529 0.242188 0.34375\nv -0.322802 0.25 0.34375\nv -0.222056 0.25 0.34375\nv -0.322851 0.257812 0.34375\nv -0.222546 0.257812 0.34375\nv -0.322983 0.265625 0.34375\nv -0.222979 0.265625 0.34375\nv -0.323152 0.273438 0.34375\nv -0.22366 0.273438 0.34375\nv -0.32331 0.28125 0.34375\nv -0.224328 0.28125 0.34375\nv -0.323646 0.289062 0.34375\nv -0.22506 0.289062 0.34375\nv -0.324207 0.296875 0.34375\nv -0.225687 0.296875 0.34375\nv -0.226562 0.296875 0.351514\nv -0.324772 0.304688 0.34375\nv -0.226203 0.304688 0.34375\nv -0.226562 0.309771 0.34375\nv -0.226562 0.304688 0.347244\nv -0.32536 0.3125 0.34375\nv -0.328125 0.3125 0.350968\nv -0.226794 0.3125 0.34375\nv -0.325963 0.320312 0.34375\nv -0.328125 0.320312 0.349252\nv -0.227175 0.320312 0.34375\nv -0.326399 0.328125 0.34375\nv -0.328125 0.328125 0.348303\nv -0.227968 0.328125 0.34375\nv -0.326456 0.335938 0.34375\nv -0.328125 0.335938 0.348072\nv -0.228979 0.335938 0.34375\nv -0.326489 0.34375 0.34375\nv -0.328125 0.34375 0.347882\nv -0.229887 0.34375 0.34375\nv -0.326798 0.351562 0.34375\nv -0.328125 0.351562 0.346982\nv -0.230648 0.351562 0.34375\nv -0.327208 0.359375 0.34375\nv -0.328125 0.359375 0.345948\nv -0.23118 0.359375 0.34375\nv -0.327629 0.367188 0.34375\nv -0.328125 0.374585 0.34375\nv -0.328125 0.367188 0.344942\nv -0.231576 0.367188 0.34375\nv -0.328151 0.375 0.34375\nv -0.231889 0.375 0.34375\nv -0.328652 0.382812 0.34375\nv -0.232063 0.382812 0.34375\nv -0.329106 0.390625 0.34375\nv -0.232212 0.390625 0.34375\nv -0.329537 0.398438 0.34375\nv -0.232301 0.398438 0.34375\nv -0.329897 0.40625 0.34375\nv -0.232393 0.40625 0.34375\nv -0.330277 0.414062 0.34375\nv -0.232474 0.414062 0.34375\nv -0.330723 0.421875 0.34375\nv -0.23261 0.421875 0.34375\nv -0.331176 0.429688 0.34375\nv -0.232807 0.429688 0.34375\nv -0.331606 0.4375 0.34375\nv -0.233034 0.4375 0.34375\nv -0.331925 0.445312 0.34375\nv -0.233284 0.445312 0.34375\nv -0.332261 0.453125 0.34375\nv -0.233487 0.453125 0.34375\nv -0.332539 0.460938 0.34375\nv -0.335938 0.460938 0.351395\nv -0.233682 0.460938 0.34375\nv -0.332797 0.46875 0.34375\nv -0.335938 0.46875 0.350597\nv -0.233795 0.46875 0.34375\nv -0.333076 0.476562 0.34375\nv -0.335938 0.476562 0.349949\nv -0.234037 0.476562 0.34375\nv -0.333436 0.484375 0.34375\nv -0.335938 0.484375 0.349191\nv -0.234332 0.484375 0.34375\nv -0.234375 0.485277 0.34375\nv -0.334178 0.492188 0.34375\nv -0.335938 0.492188 0.347629\nv -0.234782 0.492188 0.34375\nv -0.234375 0.492188 0.345686\nv -0.334935 0.5 0.34375\nv -0.335938 0.5 0.346001\nv -0.235312 0.5 0.34375\nv -0.234375 0.5 0.348334\nv -0.33566 0.507812 0.34375\nv -0.335938 0.510787 0.34375\nv -0.335938 0.507812 0.344387\nv -0.236016 0.507812 0.34375\nv -0.336417 0.515625 0.34375\nv -0.236775 0.515625 0.34375\nv -0.337182 0.523438 0.34375\nv -0.237489 0.523438 0.34375\nv -0.337944 0.53125 0.34375\nv -0.23823 0.53125 0.34375\nv -0.33865 0.539062 0.34375\nv -0.238867 0.539062 0.34375\nv -0.339316 0.546875 0.34375\nv -0.239481 0.546875 0.34375\nv -0.339919 0.554688 0.34375\nv -0.240094 0.554688 0.34375\nv -0.340426 0.5625 0.34375\nv -0.34375 0.5625 0.350684\nv -0.240723 0.5625 0.34375\nv -0.340882 0.570312 0.34375\nv -0.34375 0.570312 0.349784\nv -0.241367 0.570312 0.34375\nv -0.341177 0.578125 0.34375\nv -0.34375 0.578125 0.349095\nv -0.242012 0.578125 0.34375\nv -0.242188 0.580302 0.34375\nv -0.341278 0.585938 0.34375\nv -0.34375 0.585938 0.348726\nv -0.242616 0.585938 0.34375\nv -0.242188 0.585938 0.346237\nv -0.341438 0.59375 0.34375\nv -0.34375 0.59375 0.348227\nv -0.243161 0.59375 0.34375\nv -0.242188 0.59375 0.349655\nv -0.341929 0.601562 0.34375\nv -0.34375 0.601562 0.347253\nv -0.243872 0.601562 0.34375\nv -0.342581 0.609375 0.34375\nv -0.34375 0.609375 0.346089\nv -0.244653 0.609375 0.34375\nv -0.343414 0.617188 0.34375\nv -0.34375 0.619645 0.34375\nv -0.34375 0.617188 0.344439\nv -0.245547 0.617188 0.34375\nv -0.344538 0.625 0.34375\nv -0.246758 0.625 0.34375\nv -0.345185 0.632812 0.34375\nv -0.247748 0.632812 0.34375\nv -0.345764 0.640625 0.34375\nv -0.248673 0.640625 0.34375\nv -0.3465 0.648438 0.34375\nv -0.249696 0.648438 0.34375\nv -0.25 0.650712 0.34375\nv -0.347285 0.65625 0.34375\nv -0.250625 0.65625 0.34375\nv -0.25 0.65625 0.346037\nv -0.347906 0.664062 0.34375\nv -0.251553 0.664062 0.34375\nv -0.25 0.664062 0.349069\nv -0.348368 0.671875 0.34375\nv -0.252279 0.671875 0.34375\nv -0.348883 0.679688 0.34375\nv -0.252833 0.679688 0.34375\nv -0.349302 0.6875 0.34375\nv -0.253784 0.6875 0.34375\nv -0.349675 0.695312 0.34375\nv -0.351562 0.695312 0.351028\nv -0.254737 0.695312 0.34375\nv -0.349789 0.703125 0.34375\nv -0.351562 0.703125 0.351029\nv -0.255592 0.703125 0.34375\nv -0.349748 0.710938 0.34375\nv -0.351562 0.710938 0.351415\nv -0.256551 0.710938 0.34375\nv -0.349681 0.71875 0.34375\nv -0.351562 0.71875 0.351407\nv -0.257683 0.71875 0.34375\nv -0.257812 0.719653 0.34375\nv -0.349618 0.726562 0.34375\nv -0.351562 0.726562 0.351298\nv -0.258679 0.726562 0.34375\nv -0.348899 0.734375 0.34375\nv -0.259265 0.734375 0.34375\nv -0.347648 0.742188 0.34375\nv -0.259785 0.742188 0.34375\nv -0.346256 0.75 0.34375\nv -0.260535 0.75 0.34375\nv -0.345898 0.757812 0.34375\nv -0.261759 0.757812 0.34375\nv -0.346471 0.765625 0.34375\nv -0.26384 0.765625 0.34375\nv -0.265625 0.769628 0.34375\nv -0.347312 0.773438 0.34375\nv -0.267553 0.773438 0.34375\nv -0.348192 0.78125 0.34375\nv -0.271908 0.78125 0.34375\nv -0.273438 0.784311 0.34375\nv -0.349246 0.789062 0.34375\nv -0.351562 0.789062 0.351271\nv -0.275536 0.789062 0.34375\nv -0.350324 0.796875 0.34375\nv -0.351562 0.803952 0.34375\nv -0.351562 0.796875 0.34712\nv -0.278667 0.796875 0.34375\nv -0.28125 0.802714 0.34375\nv -0.351687 0.804688 0.34375\nv -0.282174 0.804688 0.34375\nv -0.352492 0.8125 0.34375\nv -0.28606 0.8125 0.34375\nv -0.289062 0.818962 0.34375\nv -0.352 0.820312 0.34375\nv -0.351562 0.823784 0.34375\nv -0.289671 0.820312 0.34375\nv -0.289062 0.820312 0.346922\nv -0.350962 0.828125 0.34375\nv -0.351562 0.828125 0.346334\nv -0.292065 0.828125 0.34375\nv -0.348495 0.835938 0.34375\nv -0.294179 0.835938 0.34375\nv -0.345461 0.84375 0.34375\nv -0.34375 0.846422 0.34375\nv -0.295325 0.84375 0.34375\nv -0.336202 0.851562 0.34375\nv -0.335938 0.851698 0.34375\nv -0.328125 0.856347 0.34375\nv -0.296488 0.851562 0.34375\nv -0.296875 0.852837 0.34375\nv -0.324728 0.859375 0.34375\nv -0.320312 0.863192 0.34375\nv -0.3125 0.866515 0.34375\nv -0.300217 0.859375 0.34375\nv -0.304688 0.86438 0.34375\nv -0.304688 -0.734659 0.351562\nv -0.296875 -0.735847 0.351562\nv -0.289062 -0.735912 0.351562\nv -0.28125 -0.735303 0.351562\nv 0.429688 -0.735731 0.351562\nv 0.4375 -0.736708 0.351562\nv 0.445312 -0.73704 0.351562\nv 0.453125 -0.737015 0.351562\nv 0.460938 -0.736431 0.351562\nv 0.46875 -0.73533 0.351562\nv -0.328125 -0.729664 0.351562\nv -0.320312 -0.73154 0.351562\nv -0.306257 -0.734375 0.351562\nv -0.3125 -0.733236 0.351562\nv -0.3125 -0.734375 0.357148\nv -0.274785 -0.734375 0.351562\nv -0.28125 -0.734375 0.356368\nv -0.273438 -0.73418 0.351562\nv -0.265625 -0.732432 0.351562\nv -0.257812 -0.730594 0.351562\nv -0.25 -0.726724 0.351562\nv 0.40625 -0.727707 0.351562\nv 0.414062 -0.730711 0.351562\nv 0.424876 -0.734375 0.351562\nv 0.421875 -0.733547 0.351562\nv 0.472443 -0.734375 0.351562\nv 0.476562 -0.733339 0.351562\nv 0.476562 -0.734375 0.356225\nv 0.484375 -0.731722 0.351562\nv 0.492188 -0.729224 0.351562\nv -0.335113 -0.726562 0.351562\nv -0.335938 -0.725815 0.351562\nv -0.335938 -0.726562 0.354426\nv -0.249722 -0.726562 0.351562\nv -0.25 -0.726562 0.351954\nv -0.242188 -0.720162 0.351562\nv 0.403454 -0.726562 0.351562\nv 0.398438 -0.723403 0.351562\nv 0.496314 -0.726562 0.351562\nv 0.5 -0.723721 0.351562\nv 0.5 -0.726562 0.359066\nv -0.34027 -0.71875 0.351562\nv -0.240942 -0.71875 0.351562\nv -0.242188 -0.71875 0.354068\nv 0.394089 -0.71875 0.351562\nv 0.504408 -0.71875 0.351562\nv -0.341626 -0.710938 0.351562\nv -0.23744 -0.710938 0.351562\nv -0.234375 -0.704405 0.351562\nv 0.390912 -0.710938 0.351562\nv 0.390625 -0.709918 0.351562\nv 0.506946 -0.710938 0.351562\nv 0.507812 -0.705528 0.351562\nv -0.341998 -0.703125 0.351562\nv -0.233809 -0.703125 0.351562\nv -0.234375 -0.703125 0.355896\nv 0.388775 -0.703125 0.351562\nv 0.50818 -0.703125 0.351562\nv -0.342125 -0.695312 0.351562\nv -0.230857 -0.695312 0.351562\nv 0.386467 -0.695312 0.351562\nv 0.508146 -0.695312 0.351562\nv 0.507812 -0.690705 0.351562\nv -0.341467 -0.6875 0.351562\nv -0.229293 -0.6875 0.351562\nv 0.386046 -0.6875 0.351562\nv 0.507604 -0.6875 0.351562\nv 0.507812 -0.6875 0.358969\nv -0.340761 -0.679688 0.351562\nv -0.228002 -0.679688 0.351562\nv 0.385653 -0.679688 0.351562\nv 0.506899 -0.679688 0.351562\nv -0.339967 -0.671875 0.351562\nv -0.226829 -0.671875 0.351562\nv -0.226562 -0.670165 0.351562\nv 0.385191 -0.671875 0.351562\nv 0.506165 -0.671875 0.351562\nv -0.339187 -0.664062 0.351562\nv -0.225463 -0.664062 0.351562\nv 0.384885 -0.664062 0.351562\nv 0.505619 -0.664062 0.351562\nv -0.338251 -0.65625 0.351562\nv -0.223792 -0.65625 0.351562\nv 0.384562 -0.65625 0.351562\nv 0.505237 -0.65625 0.351562\nv -0.337278 -0.648438 0.351562\nv -0.222218 -0.648438 0.351562\nv 0.384283 -0.648438 0.351562\nv 0.505237 -0.648438 0.351562\nv -0.336334 -0.640625 0.351562\nv -0.335938 -0.637469 0.351562\nv -0.2215 -0.640625 0.351562\nv 0.383874 -0.640625 0.351562\nv 0.382812 -0.640625 0.357035\nv 0.505314 -0.640625 0.351562\nv -0.335265 -0.632812 0.351562\nv -0.221053 -0.632812 0.351562\nv 0.383221 -0.632812 0.351562\nv 0.382812 -0.628101 0.351562\nv 0.382812 -0.632812 0.353437\nv 0.505633 -0.632812 0.351562\nv -0.334074 -0.625 0.351562\nv -0.220603 -0.625 0.351562\nv 0.382551 -0.625 0.351562\nv 0.506006 -0.625 0.351562\nv -0.332877 -0.617188 0.351562\nv -0.220038 -0.617188 0.351562\nv -0.21875 -0.617188 0.359091\nv 0.381905 -0.617188 0.351562\nv 0.506102 -0.617188 0.351562\nv -0.332033 -0.609375 0.351562\nv -0.219502 -0.609375 0.351562\nv -0.21875 -0.609375 0.356469\nv 0.381258 -0.609375 0.351562\nv 0.506041 -0.609375 0.351562\nv -0.331764 -0.601562 0.351562\nv -0.219136 -0.601562 0.351562\nv -0.21875 -0.595572 0.351562\nv -0.21875 -0.601562 0.354029\nv 0.380414 -0.601562 0.351562\nv 0.505881 -0.601562 0.351562\nv -0.331507 -0.59375 0.351562\nv -0.218627 -0.59375 0.351562\nv 0.379492 -0.59375 0.351562\nv 0.5056 -0.59375 0.351562\nv -0.33137 -0.585938 0.351562\nv -0.217884 -0.585938 0.351562\nv 0.37851 -0.585938 0.351562\nv 0.505048 -0.585938 0.351562\nv -0.331261 -0.578125 0.351562\nv -0.217219 -0.578125 0.351562\nv 0.377438 -0.578125 0.351562\nv 0.504904 -0.578125 0.351562\nv -0.33114 -0.570312 0.351562\nv -0.21613 -0.570312 0.351562\nv -0.210938 -0.564315 0.351562\nv 0.375523 -0.570312 0.351562\nv 0.375 -0.569252 0.351562\nv 0.50478 -0.570312 0.351562\nv -0.331157 -0.5625 0.351562\nv -0.207314 -0.5625 0.351562\nv -0.210938 -0.5625 0.35788\nv -0.203125 -0.560852 0.351562\nv -0.195312 -0.557732 0.351562\nv -0.1875 -0.555303 0.351562\nv -0.0078125 -0.555502 0.351562\nv 0 -0.555942 0.351562\nv 0.0078125 -0.555996 0.351562\nv 0.015625 -0.555885 0.351562\nv 0.0234375 -0.555247 0.351562\nv 0.351562 -0.555256 0.351562\nv 0.359375 -0.558108 0.351562\nv 0.36939 -0.5625 0.351562\nv 0.367188 -0.561224 0.351562\nv 0.504662 -0.5625 0.351562\nv -0.331318 -0.554688 0.351562\nv -0.182259 -0.554688 0.351562\nv -0.179688 -0.554424 0.351562\nv -0.171875 -0.553993 0.351562\nv -0.164062 -0.553427 0.351562\nv -0.15625 -0.553134 0.351562\nv -0.148438 -0.551598 0.351562\nv -0.140625 -0.549294 0.351562\nv -0.0859375 -0.547149 0.351562\nv -0.078125 -0.547784 0.351562\nv -0.0703125 -0.548395 0.351562\nv -0.0625 -0.549064 0.351562\nv -0.0546875 -0.549805 0.351562\nv -0.046875 -0.55061 0.351562\nv -0.0390625 -0.551485 0.351562\nv -0.03125 -0.55252 0.351562\nv -0.0234375 -0.553661 0.351562\nv -0.0154533 -0.554688 0.351562\nv -0.015625 -0.554666 0.351562\nv -0.0078125 -0.554688 0.35832\nv 0.0280484 -0.554688 0.351562\nv 0.0234375 -0.554688 0.355858\nv 0.03125 -0.554191 0.351562\nv 0.0390625 -0.553174 0.351562\nv 0.046875 -0.552094 0.351562\nv 0.0546875 -0.551307 0.351562\nv 0.0625 -0.550695 0.351562\nv 0.0703125 -0.550228 0.351562\nv 0.078125 -0.549943 0.351562\nv 0.0859375 -0.549739 0.351562\nv 0.09375 -0.549625 0.351562\nv 0.101562 -0.549509 0.351562\nv 0.109375 -0.549263 0.351562\nv 0.117188 -0.549017 0.351562\nv 0.125 -0.548913 0.351562\nv 0.132812 -0.548975 0.351562\nv 0.140625 -0.549219 0.351562\nv 0.148438 -0.54929 0.351562\nv 0.15625 -0.549442 0.351562\nv 0.164062 -0.549675 0.351562\nv 0.171875 -0.549935 0.351562\nv 0.179688 -0.549846 0.351562\nv 0.1875 -0.549852 0.351562\nv 0.195312 -0.550327 0.351562\nv 0.203125 -0.550808 0.351562\nv 0.210938 -0.55112 0.351562\nv 0.21875 -0.551562 0.351562\nv 0.226562 -0.552047 0.351562\nv 0.234375 -0.552176 0.351562\nv 0.242188 -0.552134 0.351562\nv 0.25 -0.552009 0.351562\nv 0.257812 -0.551954 0.351562\nv 0.265625 -0.552115 0.351562\nv 0.273438 -0.551782 0.351562\nv 0.28125 -0.551193 0.351562\nv 0.289062 -0.550546 0.351562\nv 0.296875 -0.550067 0.351562\nv 0.304688 -0.549689 0.351562\nv 0.3125 -0.549376 0.351562\nv 0.320312 -0.550302 0.351562\nv 0.328125 -0.551593 0.351562\nv 0.335938 -0.552191 0.351562\nv 0.34897 -0.554688 0.351562\nv 0.34375 -0.553653 0.351562\nv 0.504607 -0.554688 0.351562\nv -0.331407 -0.546875 0.351562\nv -0.133563 -0.546875 0.351562\nv -0.132812 -0.546538 0.351562\nv -0.125 -0.543795 0.351562\nv -0.117188 -0.544511 0.351562\nv -0.109375 -0.545135 0.351562\nv -0.101562 -0.545772 0.351562\nv -0.0894199 -0.546875 0.351562\nv -0.09375 -0.546449 0.351562\nv 0.504615 -0.546875 0.351562\nv -0.331534 -0.539062 0.351562\nv 0.504735 -0.539062 0.351562\nv -0.331587 -0.53125 0.351562\nv 0.504842 -0.53125 0.351562\nv -0.331655 -0.523438 0.351562\nv 0.504781 -0.523438 0.351562\nv -0.331731 -0.515625 0.351562\nv 0.504617 -0.515625 0.351562\nv -0.331756 -0.507812 0.351562\nv 0.504391 -0.507812 0.351562\nv -0.331627 -0.5 0.351562\nv 0.504219 -0.5 0.351562\nv -0.331374 -0.492188 0.351562\nv -0.132812 -0.484804 0.351562\nv -0.125 -0.485245 0.351562\nv 0.504156 -0.492188 0.351562\nv -0.331255 -0.484375 0.351562\nv -0.148438 -0.478988 0.351562\nv -0.133917 -0.484375 0.351562\nv -0.140625 -0.481959 0.351562\nv -0.121072 -0.484375 0.351562\nv -0.117188 -0.483611 0.351562\nv -0.109375 -0.481976 0.351562\nv -0.101562 -0.480353 0.351562\nv -0.09375 -0.47876 0.351562\nv -0.0859375 -0.477117 0.351562\nv 0.28125 -0.477818 0.351562\nv 0.289062 -0.479292 0.351562\nv 0.296875 -0.480686 0.351562\nv 0.304688 -0.482199 0.351562\nv 0.3125 -0.483611 0.351562\nv 0.3125 -0.484375 0.35615\nv 0.320312 -0.482804 0.351562\nv 0.320312 -0.484375 0.359035\nv 0.328125 -0.479862 0.351562\nv 0.335938 -0.477195 0.351562\nv 0.504201 -0.484375 0.351562\nv -0.331249 -0.476562 0.351562\nv -0.203125 -0.46947 0.351562\nv -0.195312 -0.472482 0.351562\nv -0.1875 -0.474397 0.351562\nv -0.1875 -0.476562 0.359052\nv -0.179688 -0.474622 0.351562\nv -0.179688 -0.476562 0.357461\nv -0.171875 -0.473964 0.351562\nv -0.164062 -0.474184 0.351562\nv -0.155229 -0.476562 0.351562\nv -0.15625 -0.476226 0.351562\nv -0.15625 -0.476562 0.357413\nv -0.08325 -0.476562 0.351562\nv -0.078125 -0.475733 0.351562\nv -0.0703125 -0.474393 0.351562\nv -0.0625 -0.473133 0.351562\nv -0.0546875 -0.471982 0.351562\nv -0.046875 -0.470872 0.351562\nv -0.0390625 -0.469749 0.351562\nv 0.046875 -0.46898 0.351562\nv 0.0546875 -0.469034 0.351562\nv 0.0625 -0.468838 0.351562\nv 0.0703125 -0.468906 0.351562\nv 0.078125 -0.469061 0.351562\nv 0.0859375 -0.469389 0.351562\nv 0.09375 -0.46951 0.351562\nv 0.101562 -0.469919 0.351562\nv 0.109375 -0.470558 0.351562\nv 0.117188 -0.471221 0.351562\nv 0.125 -0.471862 0.351562\nv 0.132812 -0.47238 0.351562\nv 0.140625 -0.47273 0.351562\nv 0.148438 -0.472831 0.351562\nv 0.15625 -0.472868 0.351562\nv 0.164062 -0.47295 0.351562\nv 0.171875 -0.473525 0.351562\nv 0.171875 -0.476562 0.359292\nv 0.179688 -0.473929 0.351562\nv 0.179688 -0.476562 0.359298\nv 0.1875 -0.474072 0.351562\nv 0.195312 -0.473962 0.351562\nv 0.203125 -0.47399 0.351562\nv 0.203125 -0.476562 0.358914\nv 0.210938 -0.474019 0.351562\nv 0.210938 -0.476562 0.358947\nv 0.21875 -0.473913 0.351562\nv 0.21875 -0.476562 0.358798\nv 0.226562 -0.473768 0.351562\nv 0.226562 -0.476562 0.358558\nv 0.234375 -0.473988 0.351562\nv 0.234375 -0.476562 0.358373\nv 0.242188 -0.47434 0.351562\nv 0.242188 -0.476562 0.357927\nv 0.25 -0.474712 0.351562\nv 0.25 -0.476562 0.357458\nv 0.257812 -0.474945 0.351562\nv 0.257812 -0.476562 0.356644\nv 0.265625 -0.475386 0.351562\nv 0.265625 -0.476562 0.355316\nv 0.274533 -0.476562 0.351562\nv 0.273438 -0.476365 0.351562\nv 0.273438 -0.476562 0.352367\nv 0.33815 -0.476562 0.351562\nv 0.34375 -0.474787 0.351562\nv 0.34375 -0.476562 0.355504\nv 0.351562 -0.473712 0.351562\nv 0.351562 -0.476562 0.356952\nv 0.359375 -0.472318 0.351562\nv 0.359375 -0.476562 0.358525\nv 0.504344 -0.476562 0.351562\nv -0.331253 -0.46875 0.351562\nv -0.204577 -0.46875 0.351562\nv -0.210938 -0.46273 0.351562\nv -0.0320846 -0.46875 0.351562\nv -0.03125 -0.468635 0.351562\nv -0.03125 -0.46875 0.357191\nv -0.0234375 -0.467467 0.351562\nv -0.015625 -0.466196 0.351562\nv -0.0078125 -0.46518 0.351562\nv 0 -0.464711 0.351562\nv 0.0078125 -0.465155 0.351562\nv 0.015625 -0.466157 0.351562\nv 0.015625 -0.46875 0.359267\nv 0.0234375 -0.467223 0.351562\nv 0.0234375 -0.46875 0.355956\nv 0.03125 -0.468147 0.351562\nv 0.03125 -0.46875 0.353248\nv 0.0418152 -0.46875 0.351562\nv 0.0390625 -0.46863 0.351562\nv 0.0390625 -0.46875 0.351906\nv 0.36709 -0.46875 0.351562\nv 0.367188 -0.468672 0.351562\nv 0.367188 -0.46875 0.351698\nv 0.375 -0.461116 0.351562\nv 0.504533 -0.46875 0.351562\nv -0.331323 -0.460938 0.351562\nv -0.211766 -0.460938 0.351562\nv 0.375152 -0.460938 0.351562\nv 0.504626 -0.460938 0.351562\nv -0.331377 -0.453125 0.351562\nv -0.213323 -0.453125 0.351562\nv 0.379676 -0.453125 0.351562\nv 0.50477 -0.453125 0.351562\nv -0.331388 -0.445312 0.351562\nv -0.214535 -0.445312 0.351562\nv 0.381989 -0.445312 0.351562\nv 0.382812 -0.441393 0.351562\nv 0.504978 -0.445312 0.351562\nv -0.331236 -0.4375 0.351562\nv -0.215325 -0.4375 0.351562\nv 0.383516 -0.4375 0.351562\nv 0.505376 -0.4375 0.351562\nv -0.330998 -0.429688 0.351562\nv -0.216264 -0.429688 0.351562\nv 0.384219 -0.429688 0.351562\nv 0.505728 -0.429688 0.351562\nv -0.330733 -0.421875 0.351562\nv -0.217244 -0.421875 0.351562\nv 0.384914 -0.421875 0.351562\nv 0.506049 -0.421875 0.351562\nv -0.330436 -0.414062 0.351562\nv -0.218038 -0.414062 0.351562\nv 0.385785 -0.414062 0.351562\nv 0.50624 -0.414062 0.351562\nv 0.507812 -0.414062 0.359243\nv -0.330035 -0.40625 0.351562\nv -0.218704 -0.40625 0.351562\nv 0.386444 -0.40625 0.351562\nv 0.506306 -0.40625 0.351562\nv -0.329499 -0.398438 0.351562\nv -0.218639 -0.398438 0.351562\nv 0.386212 -0.398438 0.351562\nv 0.506366 -0.398438 0.351562\nv -0.328922 -0.390625 0.351562\nv -0.21819 -0.390625 0.351562\nv 0.38614 -0.390625 0.351562\nv 0.506249 -0.390625 0.351562\nv -0.328338 -0.382812 0.351562\nv -0.328125 -0.380516 0.351562\nv -0.217853 -0.382812 0.351562\nv 0.386411 -0.382812 0.351562\nv 0.506079 -0.382812 0.351562\nv -0.327582 -0.375 0.351562\nv -0.328125 -0.375 0.359074\nv -0.217886 -0.375 0.351562\nv 0.386756 -0.375 0.351562\nv 0.505876 -0.375 0.351562\nv -0.326812 -0.367188 0.351562\nv -0.218376 -0.367188 0.351562\nv -0.21875 -0.359994 0.351562\nv 0.387186 -0.367188 0.351562\nv 0.505544 -0.367188 0.351562\nv -0.326031 -0.359375 0.351562\nv -0.218783 -0.359375 0.351562\nv -0.21875 -0.359375 0.351749\nv 0.387655 -0.359375 0.351562\nv 0.505399 -0.359375 0.351562\nv -0.325207 -0.351562 0.351562\nv -0.219245 -0.351562 0.351562\nv -0.21875 -0.351562 0.35432\nv 0.388206 -0.351562 0.351562\nv 0.505219 -0.351562 0.351562\nv -0.324604 -0.34375 0.351562\nv -0.21981 -0.34375 0.351562\nv -0.21875 -0.34375 0.357077\nv 0.388831 -0.34375 0.351562\nv 0.505001 -0.34375 0.351562\nv -0.324118 -0.335938 0.351562\nv -0.220361 -0.335938 0.351562\nv 0.389272 -0.335938 0.351562\nv 0.504935 -0.335938 0.351562\nv -0.323769 -0.328125 0.351562\nv -0.220657 -0.328125 0.351562\nv 0.389788 -0.328125 0.351562\nv 0.504903 -0.328125 0.351562\nv -0.323429 -0.320312 0.351562\nv -0.220996 -0.320312 0.351562\nv 0.390327 -0.320312 0.351562\nv 0.390625 -0.314394 0.351562\nv 0.390625 -0.320312 0.359121\nv 0.504861 -0.320312 0.351562\nv -0.32309 -0.3125 0.351562\nv -0.221192 -0.3125 0.351562\nv 0.390708 -0.3125 0.351562\nv 0.504875 -0.3125 0.351562\nv -0.32267 -0.304688 0.351562\nv -0.221351 -0.304688 0.351562\nv 0.390947 -0.304688 0.351562\nv 0.504868 -0.304688 0.351562\nv -0.322196 -0.296875 0.351562\nv -0.221465 -0.296875 0.351562\nv 0.391091 -0.296875 0.351562\nv 0.504772 -0.296875 0.351562\nv -0.32163 -0.289062 0.351562\nv -0.221538 -0.289062 0.351562\nv 0.391139 -0.289062 0.351562\nv 0.504628 -0.289062 0.351562\nv -0.321017 -0.28125 0.351562\nv -0.221636 -0.28125 0.351562\nv 0.391207 -0.28125 0.351562\nv 0.504436 -0.28125 0.351562\nv -0.320382 -0.273438 0.351562\nv -0.320312 -0.272663 0.351562\nv -0.22172 -0.273438 0.351562\nv 0.391815 -0.273438 0.351562\nv 0.50414 -0.273438 0.351562\nv -0.319694 -0.265625 0.351562\nv -0.320312 -0.265625 0.356805\nv -0.221695 -0.265625 0.351562\nv 0.3925 -0.265625 0.351562\nv 0.503878 -0.265625 0.351562\nv -0.319092 -0.257812 0.351562\nv -0.221428 -0.257812 0.351562\nv 0.392724 -0.257812 0.351562\nv 0.503309 -0.257812 0.351562\nv -0.318485 -0.25 0.351562\nv -0.220846 -0.25 0.351562\nv 0.392918 -0.25 0.351562\nv 0.502749 -0.25 0.351562\nv -0.317893 -0.242188 0.351562\nv -0.220366 -0.242188 0.351562\nv 0.39295 -0.242188 0.351562\nv 0.502424 -0.242188 0.351562\nv -0.317508 -0.234375 0.351562\nv -0.219907 -0.234375 0.351562\nv 0.393249 -0.234375 0.351562\nv 0.502264 -0.234375 0.351562\nv -0.317405 -0.226562 0.351562\nv -0.219772 -0.226562 0.351562\nv 0.393527 -0.226562 0.351562\nv 0.50229 -0.226562 0.351562\nv -0.317342 -0.21875 0.351562\nv -0.219554 -0.21875 0.351562\nv 0.393713 -0.21875 0.351562\nv 0.502303 -0.21875 0.351562\nv -0.317339 -0.210938 0.351562\nv -0.219128 -0.210938 0.351562\nv 0.393945 -0.210938 0.351562\nv 0.502324 -0.210938 0.351562\nv -0.317437 -0.203125 0.351562\nv -0.218772 -0.203125 0.351562\nv -0.21875 -0.203125 0.352448\nv 0.394087 -0.203125 0.351562\nv 0.502358 -0.203125 0.351562\nv -0.317406 -0.195312 0.351562\nv -0.21888 -0.195312 0.351562\nv -0.21875 -0.195312 0.354359\nv 0.394279 -0.195312 0.351562\nv 0.502488 -0.195312 0.351562\nv -0.317196 -0.1875 0.351562\nv -0.219162 -0.1875 0.351562\nv 0.394503 -0.1875 0.351562\nv 0.502399 -0.1875 0.351562\nv -0.316826 -0.179688 0.351562\nv -0.219517 -0.179688 0.351562\nv 0.394675 -0.179688 0.351562\nv 0.502107 -0.179688 0.351562\nv -0.316334 -0.171875 0.351562\nv -0.219669 -0.171875 0.351562\nv 0.394673 -0.171875 0.351562\nv 0.501908 -0.171875 0.351562\nv -0.315939 -0.164062 0.351562\nv -0.21956 -0.164062 0.351562\nv -0.21875 -0.164062 0.355756\nv 0.394452 -0.164062 0.351562\nv 0.501658 -0.164062 0.351562\nv -0.31541 -0.15625 0.351562\nv -0.219056 -0.15625 0.351562\nv -0.21875 -0.15625 0.353091\nv 0.394118 -0.15625 0.351562\nv 0.501358 -0.15625 0.351562\nv -0.314466 -0.148438 0.351562\nv -0.218752 -0.148438 0.351562\nv -0.21875 -0.148383 0.351562\nv -0.21875 -0.148438 0.351571\nv 0.393782 -0.148438 0.351562\nv 0.50097 -0.148438 0.351562\nv -0.313687 -0.140625 0.351562\nv -0.218475 -0.140625 0.351562\nv 0.393564 -0.140625 0.351562\nv 0.500556 -0.140625 0.351562\nv -0.313276 -0.132812 0.351562\nv -0.218249 -0.132812 0.351562\nv 0.392634 -0.132812 0.351562\nv 0.500226 -0.132812 0.351562\nv -0.31294 -0.125 0.351562\nv -0.217762 -0.125 0.351562\nv 0.391442 -0.125 0.351562\nv 0.390625 -0.119821 0.351562\nv 0.500051 -0.125 0.351562\nv 0.5 -0.121928 0.351562\nv -0.312606 -0.117188 0.351562\nv -0.3125 -0.113738 0.351562\nv -0.216948 -0.117188 0.351562\nv 0.390221 -0.117188 0.351562\nv 0.499917 -0.117188 0.351562\nv 0.5 -0.117188 0.358064\nv -0.312384 -0.109375 0.351562\nv -0.3125 -0.109375 0.352545\nv -0.215926 -0.109375 0.351562\nv 0.38869 -0.109375 0.351562\nv 0.499432 -0.109375 0.351562\nv -0.31218 -0.101562 0.351562\nv -0.3125 -0.101562 0.354621\nv -0.214274 -0.101562 0.351562\nv 0.385845 -0.101562 0.351562\nv 0.382812 -0.0950376 0.351562\nv 0.49918 -0.101562 0.351562\nv -0.312119 -0.09375 0.351562\nv -0.3125 -0.0874816 0.351562\nv -0.3125 -0.09375 0.355176\nv -0.211693 -0.09375 0.351562\nv -0.210938 -0.0921318 0.351562\nv -0.210938 -0.09375 0.356279\nv 0.382259 -0.09375 0.351562\nv 0.499267 -0.09375 0.351562\nv 0.5 -0.0876917 0.351562\nv -0.312613 -0.0859375 0.351562\nv -0.207492 -0.0859375 0.351562\nv -0.203125 -0.0797984 0.351562\nv 0.379988 -0.0859375 0.351562\nv 0.500235 -0.0859375 0.351562\nv -0.31367 -0.078125 0.351562\nv -0.201019 -0.078125 0.351562\nv -0.195312 -0.0748953 0.351562\nv -0.1875 -0.0728701 0.351562\nv -0.179688 -0.0717795 0.351562\nv -0.171875 -0.0709875 0.351562\nv -0.164062 -0.0708609 0.351562\nv 0.359375 -0.0710342 0.351562\nv 0.367188 -0.0723559 0.351562\nv 0.37569 -0.078125 0.351562\nv 0.375 -0.0772194 0.351562\nv 0.501763 -0.078125 0.351562\nv -0.314491 -0.0703125 0.351562\nv -0.179688 -0.0703125 0.358778\nv -0.171875 -0.0703125 0.354974\nv -0.159398 -0.0703125 0.351562\nv -0.164062 -0.0703125 0.353814\nv -0.15625 -0.0698434 0.351562\nv -0.148438 -0.0683689 0.351562\nv -0.140625 -0.0674696 0.351562\nv -0.132812 -0.0675914 0.351562\nv -0.125 -0.0676679 0.351562\nv -0.117188 -0.0677082 0.351562\nv -0.109375 -0.0677092 0.351562\nv -0.101562 -0.0677377 0.351562\nv -0.09375 -0.0677775 0.351562\nv -0.0859375 -0.06802 0.351562\nv -0.078125 -0.0679923 0.351562\nv -0.0703125 -0.0677723 0.351562\nv -0.0625 -0.067591 0.351562\nv -0.0546875 -0.0674038 0.351562\nv -0.046875 -0.067257 0.351562\nv -0.0390625 -0.0672088 0.351562\nv -0.03125 -0.0674317 0.351562\nv -0.0234375 -0.0677565 0.351562\nv -0.015625 -0.0681276 0.351562\nv -0.0078125 -0.0684727 0.351562\nv 0 -0.0686714 0.351562\nv 0.0078125 -0.0688547 0.351562\nv 0.015625 -0.0690427 0.351562\nv 0.0234375 -0.0690441 0.351562\nv 0.03125 -0.0690472 0.351562\nv 0.0390625 -0.0690339 0.351562\nv 0.046875 -0.0689342 0.351562\nv 0.0546875 -0.0688629 0.351562\nv 0.0625 -0.0688098 0.351562\nv 0.0703125 -0.0687839 0.351562\nv 0.078125 -0.0688342 0.351562\nv 0.0859375 -0.0688785 0.351562\nv 0.09375 -0.068927 0.351562\nv 0.101562 -0.0689556 0.351562\nv 0.109375 -0.0689346 0.351562\nv 0.117188 -0.0688835 0.351562\nv 0.125 -0.0688887 0.351562\nv 0.132812 -0.0688671 0.351562\nv 0.140625 -0.0687845 0.351562\nv 0.148438 -0.0686806 0.351562\nv 0.15625 -0.0685947 0.351562\nv 0.164062 -0.068569 0.351562\nv 0.171875 -0.0685128 0.351562\nv 0.179688 -0.0682868 0.351562\nv 0.1875 -0.0680066 0.351562\nv 0.195312 -0.0677232 0.351562\nv 0.203125 -0.0675125 0.351562\nv 0.210938 -0.0673918 0.351562\nv 0.21875 -0.0672798 0.351562\nv 0.226562 -0.0670795 0.351562\nv 0.234375 -0.0667919 0.351562\nv 0.242188 -0.0666261 0.351562\nv 0.25 -0.0666399 0.351562\nv 0.257812 -0.0667007 0.351562\nv 0.265625 -0.0667992 0.351562\nv 0.273438 -0.0669383 0.351562\nv 0.28125 -0.0671979 0.351562\nv 0.289062 -0.0674797 0.351562\nv 0.296875 -0.067759 0.351562\nv 0.304688 -0.0680057 0.351562\nv 0.3125 -0.0681639 0.351562\nv 0.320312 -0.0684078 0.351562\nv 0.328125 -0.0687705 0.351562\nv 0.335938 -0.0693065 0.351562\nv 0.34375 -0.0698019 0.351562\nv 0.351883 -0.0703125 0.351562\nv 0.351562 -0.070283 0.351562\nv 0.359375 -0.0703125 0.35427\nv 0.503105 -0.0703125 0.351562\nv -0.314523 -0.0625 0.351562\nv 0.504311 -0.0625 0.351562\nv -0.314159 -0.0546875 0.351562\nv 0.505134 -0.0546875 0.351562\nv -0.313556 -0.046875 0.351562\nv 0.505569 -0.046875 0.351562\nv -0.313342 -0.0390625 0.351562\nv 0.505095 -0.0390625 0.351562\nv -0.313371 -0.03125 0.351562\nv 0.504275 -0.03125 0.351562\nv -0.313397 -0.0234375 0.351562\nv 0.503427 -0.0234375 0.351562\nv -0.313896 -0.015625 0.351562\nv 0.50276 -0.015625 0.351562\nv -0.314005 -0.0078125 0.351562\nv 0.50263 -0.0078125 0.351562\nv -0.313546 0 0.351562\nv 0.502965 0 0.351562\nv -0.312928 0.0078125 0.351562\nv 0.503034 0.0078125 0.351562\nv -0.313095 0.015625 0.351562\nv 0.502768 0.015625 0.351562\nv -0.313478 0.0234375 0.351562\nv 0.502593 0.0234375 0.351562\nv -0.31365 0.03125 0.351562\nv 0.501654 0.03125 0.351562\nv -0.313519 0.0390625 0.351562\nv 0.500145 0.0390625 0.351562\nv 0.5 0.0394304 0.351562\nv 0.5 0.0390625 0.352397\nv -0.313258 0.046875 0.351562\nv -0.3125 0.0529358 0.351562\nv 0.496199 0.046875 0.351562\nv 0.492188 0.0514381 0.351562\nv -0.312305 0.0546875 0.351562\nv -0.3125 0.0546875 0.352413\nv 0.488405 0.0546875 0.351562\nv 0.484375 0.0576281 0.351562\nv -0.311667 0.0625 0.351562\nv -0.3125 0.0625 0.355194\nv -0.078125 0.0702938 0.351562\nv -0.0703125 0.0699921 0.351562\nv -0.0625 0.0697743 0.351562\nv -0.0546875 0.069574 0.351562\nv -0.046875 0.0694194 0.351562\nv -0.0390625 0.069296 0.351562\nv -0.03125 0.0692852 0.351562\nv -0.0234375 0.0692785 0.351562\nv -0.015625 0.0692491 0.351562\nv -0.0078125 0.0692977 0.351562\nv 0 0.0694032 0.351562\nv 0.0078125 0.0693843 0.351562\nv 0.015625 0.0693175 0.351562\nv 0.0234375 0.069255 0.351562\nv 0.03125 0.0691724 0.351562\nv 0.0390625 0.068874 0.351562\nv 0.046875 0.068714 0.351562\nv 0.0546875 0.068689 0.351562\nv 0.0625 0.0687443 0.351562\nv 0.0703125 0.0688018 0.351562\nv 0.078125 0.0688696 0.351562\nv 0.0859375 0.0690526 0.351562\nv 0.09375 0.069287 0.351562\nv 0.101562 0.0693852 0.351562\nv 0.109375 0.0694168 0.351562\nv 0.117188 0.069483 0.351562\nv 0.125 0.0695788 0.351562\nv 0.132812 0.0697247 0.351562\nv 0.140625 0.0699421 0.351562\nv 0.148438 0.0700114 0.351562\nv 0.15625 0.0701131 0.351562\nv 0.164062 0.0702273 0.351562\nv 0.226562 0.0702619 0.351562\nv 0.234375 0.0700464 0.351562\nv 0.242188 0.069866 0.351562\nv 0.25 0.0698393 0.351562\nv 0.257812 0.06983 0.351562\nv 0.265625 0.0698864 0.351562\nv 0.273438 0.0699508 0.351562\nv 0.28125 0.0697688 0.351562\nv 0.289062 0.0695786 0.351562\nv 0.296875 0.0694959 0.351562\nv 0.304688 0.0693144 0.351562\nv 0.3125 0.0691193 0.351562\nv 0.320312 0.068759 0.351562\nv 0.328125 0.0685175 0.351562\nv 0.335938 0.0681824 0.351562\nv 0.34375 0.0677963 0.351562\nv 0.351562 0.067275 0.351562\nv 0.359375 0.0667337 0.351562\nv 0.367188 0.0662883 0.351562\nv 0.375 0.0658276 0.351562\nv 0.382812 0.0654819 0.351562\nv 0.390625 0.0652705 0.351562\nv 0.398438 0.0653741 0.351562\nv 0.40625 0.0656935 0.351562\nv 0.414062 0.0659443 0.351562\nv 0.421875 0.0661637 0.351562\nv 0.429688 0.0663882 0.351562\nv 0.4375 0.0664716 0.351562\nv 0.445312 0.0666584 0.351562\nv 0.453125 0.0662121 0.351562\nv 0.460938 0.0658609 0.351562\nv 0.46875 0.0651253 0.351562\nv 0.476802 0.0625 0.351562\nv 0.476562 0.0626273 0.351562\nv 0.476562 0.0625 0.352439\nv -0.312094 0.0703125 0.351562\nv -0.3125 0.0756873 0.351562\nv -0.3125 0.0703125 0.353468\nv -0.195312 0.0763399 0.351562\nv -0.1875 0.0742479 0.351562\nv -0.179688 0.0727008 0.351562\nv -0.179688 0.0703125 0.359341\nv -0.171875 0.0720024 0.351562\nv -0.171875 0.0703125 0.356961\nv -0.164062 0.0714128 0.351562\nv -0.164062 0.0703125 0.354976\nv -0.15625 0.0710109 0.351562\nv -0.15625 0.0703125 0.35426\nv -0.148438 0.0708934 0.351562\nv -0.148438 0.0703125 0.354223\nv -0.140625 0.0710043 0.351562\nv -0.140625 0.0703125 0.354765\nv -0.132812 0.0709542 0.351562\nv -0.132812 0.0703125 0.354803\nv -0.125 0.071007 0.351562\nv -0.125 0.0703125 0.354872\nv -0.117188 0.0710615 0.351562\nv -0.117188 0.0703125 0.354731\nv -0.109375 0.0710691 0.351562\nv -0.109375 0.0703125 0.354564\nv -0.101562 0.0709265 0.351562\nv -0.101562 0.0703125 0.353961\nv -0.09375 0.0707246 0.351562\nv -0.09375 0.0703125 0.353147\nv -0.0786088 0.0703125 0.351562\nv -0.0859375 0.0705406 0.351562\nv -0.0859375 0.0703125 0.352431\nv 0.171057 0.0703125 0.351562\nv 0.171875 0.0703197 0.351562\nv 0.171875 0.0703125 0.351583\nv 0.179688 0.0703836 0.351562\nv 0.179688 0.0703125 0.35177\nv 0.1875 0.0704247 0.351562\nv 0.1875 0.0703125 0.351884\nv 0.195312 0.0704365 0.351562\nv 0.195312 0.0703125 0.351919\nv 0.203125 0.0704595 0.351562\nv 0.203125 0.0703125 0.351987\nv 0.210938 0.0704541 0.351562\nv 0.210938 0.0703125 0.351952\nv 0.222961 0.0703125 0.351562\nv 0.21875 0.0703601 0.351562\nv 0.21875 0.0703125 0.351691\nv -0.312716 0.078125 0.351562\nv -0.210938 0.0837968 0.351562\nv -0.200986 0.078125 0.351562\nv -0.203125 0.0790521 0.351562\nv -0.203125 0.078125 0.353223\nv -0.31353 0.0859375 0.351562\nv -0.213308 0.0859375 0.351562\nv -0.21875 0.0933189 0.351562\nv -0.314609 0.09375 0.351562\nv -0.218934 0.09375 0.351562\nv -0.315165 0.101562 0.351562\nv -0.221042 0.101562 0.351562\nv -0.315649 0.109375 0.351562\nv -0.221511 0.109375 0.351562\nv -0.316013 0.117188 0.351562\nv -0.221769 0.117188 0.351562\nv -0.316309 0.125 0.351562\nv -0.222223 0.125 0.351562\nv -0.316653 0.132812 0.351562\nv -0.22203 0.132812 0.351562\nv -0.317182 0.140625 0.351562\nv -0.221771 0.140625 0.351562\nv -0.317837 0.148438 0.351562\nv -0.221819 0.148438 0.351562\nv -0.318424 0.15625 0.351562\nv -0.22225 0.15625 0.351562\nv -0.318887 0.164062 0.351562\nv -0.222741 0.164062 0.351562\nv -0.319404 0.171875 0.351562\nv -0.222632 0.171875 0.351562\nv -0.320099 0.179688 0.351562\nv -0.320312 0.181334 0.351562\nv -0.320312 0.179688 0.353857\nv -0.222443 0.179688 0.351562\nv -0.321077 0.1875 0.351562\nv -0.222235 0.1875 0.351562\nv -0.322036 0.195312 0.351562\nv -0.221688 0.195312 0.351562\nv -0.322817 0.203125 0.351562\nv -0.221325 0.203125 0.351562\nv -0.323532 0.210938 0.351562\nv -0.221313 0.210938 0.351562\nv -0.324243 0.21875 0.351562\nv -0.221298 0.21875 0.351562\nv -0.324582 0.226562 0.351562\nv -0.221293 0.226562 0.351562\nv -0.324676 0.234375 0.351562\nv -0.221577 0.234375 0.351562\nv -0.324648 0.242188 0.351562\nv -0.222158 0.242188 0.351562\nv -0.324708 0.25 0.351562\nv -0.222782 0.25 0.351562\nv -0.324967 0.257812 0.351562\nv -0.223414 0.257812 0.351562\nv -0.325256 0.265625 0.351562\nv -0.22396 0.265625 0.351562\nv -0.325549 0.273438 0.351562\nv -0.224719 0.273438 0.351562\nv -0.226562 0.273438 0.359344\nv -0.325831 0.28125 0.351562\nv -0.225404 0.28125 0.351562\nv -0.226562 0.28125 0.356389\nv -0.326448 0.289062 0.351562\nv -0.226029 0.289062 0.351562\nv -0.226562 0.296789 0.351562\nv -0.226562 0.289062 0.353825\nv -0.32716 0.296875 0.351562\nv -0.328125 0.296875 0.358855\nv -0.226569 0.296875 0.351562\nv -0.327734 0.304688 0.351562\nv -0.328125 0.309516 0.351562\nv -0.328125 0.304688 0.35463\nv -0.227106 0.304688 0.351562\nv -0.328341 0.3125 0.351562\nv -0.227639 0.3125 0.351562\nv -0.328972 0.320312 0.351562\nv -0.227901 0.320312 0.351562\nv -0.329268 0.328125 0.351562\nv -0.228627 0.328125 0.351562\nv -0.32936 0.335938 0.351562\nv -0.229542 0.335938 0.351562\nv -0.329466 0.34375 0.351562\nv -0.230379 0.34375 0.351562\nv -0.329865 0.351562 0.351562\nv -0.231008 0.351562 0.351562\nv -0.33032 0.359375 0.351562\nv -0.231491 0.359375 0.351562\nv -0.330761 0.367188 0.351562\nv -0.231751 0.367188 0.351562\nv -0.331289 0.375 0.351562\nv -0.231917 0.375 0.351562\nv -0.331728 0.382812 0.351562\nv -0.231959 0.382812 0.351562\nv -0.33213 0.390625 0.351562\nv -0.232004 0.390625 0.351562\nv -0.332507 0.398438 0.351562\nv -0.232021 0.398438 0.351562\nv -0.33287 0.40625 0.351562\nv -0.23206 0.40625 0.351562\nv -0.333244 0.414062 0.351562\nv -0.232092 0.414062 0.351562\nv -0.333698 0.421875 0.351562\nv -0.232192 0.421875 0.351562\nv -0.334177 0.429688 0.351562\nv -0.232304 0.429688 0.351562\nv -0.234375 0.429688 0.359015\nv -0.334659 0.4375 0.351562\nv -0.232422 0.4375 0.351562\nv -0.234375 0.4375 0.358555\nv -0.335127 0.445312 0.351562\nv -0.23254 0.445312 0.351562\nv -0.234375 0.445312 0.358195\nv -0.335582 0.453125 0.351562\nv -0.335938 0.459602 0.351562\nv -0.335938 0.453125 0.356473\nv -0.232638 0.453125 0.351562\nv -0.234375 0.453125 0.357843\nv -0.336014 0.460938 0.351562\nv -0.232711 0.460938 0.351562\nv -0.234375 0.460938 0.357474\nv -0.336399 0.46875 0.351562\nv -0.232736 0.46875 0.351562\nv -0.234375 0.46875 0.357397\nv -0.336721 0.476562 0.351562\nv -0.232801 0.476562 0.351562\nv -0.234375 0.476562 0.357273\nv -0.337092 0.484375 0.351562\nv -0.233065 0.484375 0.351562\nv -0.234375 0.484375 0.35688\nv -0.337822 0.492188 0.351562\nv -0.233399 0.492188 0.351562\nv -0.234375 0.492188 0.35572\nv -0.338546 0.5 0.351562\nv -0.23387 0.5 0.351562\nv -0.234375 0.507015 0.351562\nv -0.234375 0.5 0.353724\nv -0.339256 0.507812 0.351562\nv -0.234448 0.507812 0.351562\nv -0.33993 0.515625 0.351562\nv -0.235174 0.515625 0.351562\nv -0.340666 0.523438 0.351562\nv -0.235826 0.523438 0.351562\nv -0.341383 0.53125 0.351562\nv -0.236569 0.53125 0.351562\nv -0.342078 0.539062 0.351562\nv -0.34375 0.539062 0.358247\nv -0.237265 0.539062 0.351562\nv -0.342798 0.546875 0.351562\nv -0.34375 0.546875 0.355161\nv -0.238007 0.546875 0.351562\nv -0.34352 0.554688 0.351562\nv -0.34375 0.557412 0.351562\nv -0.34375 0.554688 0.352368\nv -0.238718 0.554688 0.351562\nv -0.344188 0.5625 0.351562\nv -0.239413 0.5625 0.351562\nv -0.344631 0.570312 0.351562\nv -0.24009 0.570312 0.351562\nv -0.345007 0.578125 0.351562\nv -0.240714 0.578125 0.351562\nv -0.345256 0.585938 0.351562\nv -0.241306 0.585938 0.351562\nv -0.242188 0.585938 0.358499\nv -0.345573 0.59375 0.351562\nv -0.241886 0.59375 0.351562\nv -0.242188 0.598142 0.351562\nv -0.242188 0.59375 0.353922\nv -0.346137 0.601562 0.351562\nv -0.242443 0.601562 0.351562\nv -0.346674 0.609375 0.351562\nv -0.243035 0.609375 0.351562\nv -0.347417 0.617188 0.351562\nv -0.243837 0.617188 0.351562\nv -0.348275 0.625 0.351562\nv -0.244842 0.625 0.351562\nv -0.348626 0.632812 0.351562\nv -0.245779 0.632812 0.351562\nv -0.349019 0.640625 0.351562\nv -0.351562 0.640625 0.359373\nv -0.246756 0.640625 0.351562\nv -0.349526 0.648438 0.351562\nv -0.247601 0.648438 0.351562\nv -0.350021 0.65625 0.351562\nv -0.248374 0.65625 0.351562\nv -0.25 0.65625 0.358789\nv -0.350588 0.664062 0.351562\nv -0.351562 0.664062 0.358476\nv -0.249235 0.664062 0.351562\nv -0.25 0.670743 0.351562\nv -0.25 0.664062 0.354901\nv -0.350918 0.671875 0.351562\nv -0.351562 0.671875 0.356796\nv -0.250132 0.671875 0.351562\nv -0.351313 0.679688 0.351562\nv -0.351562 0.679688 0.353666\nv -0.251185 0.679688 0.351562\nv -0.351527 0.6875 0.351562\nv -0.351562 0.689095 0.351562\nv -0.351562 0.6875 0.351926\nv -0.252338 0.6875 0.351562\nv -0.351697 0.695312 0.351562\nv -0.253498 0.695312 0.351562\nv -0.351688 0.703125 0.351562\nv -0.254382 0.703125 0.351562\nv -0.351596 0.710938 0.351562\nv -0.255316 0.710938 0.351562\nv -0.351599 0.71875 0.351562\nv -0.25653 0.71875 0.351562\nv -0.257812 0.725945 0.351562\nv -0.351626 0.726562 0.351562\nv -0.351562 0.72759 0.351562\nv -0.257911 0.726562 0.351562\nv -0.351138 0.734375 0.351562\nv -0.351562 0.734375 0.35408\nv -0.258544 0.734375 0.351562\nv -0.350303 0.742188 0.351562\nv -0.351562 0.742188 0.357957\nv -0.259071 0.742188 0.351562\nv -0.349386 0.75 0.351562\nv -0.25965 0.75 0.351562\nv -0.348546 0.757812 0.351562\nv -0.261071 0.757812 0.351562\nv -0.348702 0.765625 0.351562\nv -0.263428 0.765625 0.351562\nv -0.265625 0.770233 0.351562\nv -0.349442 0.773438 0.351562\nv -0.267224 0.773438 0.351562\nv -0.350429 0.78125 0.351562\nv -0.351562 0.788496 0.351562\nv -0.351562 0.78125 0.357115\nv -0.271441 0.78125 0.351562\nv -0.273438 0.785267 0.351562\nv -0.351653 0.789062 0.351562\nv -0.275013 0.789062 0.351562\nv -0.353063 0.796875 0.351562\nv -0.277853 0.796875 0.351562\nv -0.28125 0.804308 0.351562\nv -0.3547 0.804688 0.351562\nv -0.281424 0.804688 0.351562\nv -0.28125 0.804688 0.352146\nv -0.355453 0.8125 0.351562\nv -0.28499 0.8125 0.351562\nv -0.354149 0.820312 0.351562\nv -0.288247 0.820312 0.351562\nv -0.289062 0.823071 0.351562\nv -0.352646 0.828125 0.351562\nv -0.351562 0.831642 0.351562\nv -0.290639 0.828125 0.351562\nv -0.350273 0.835938 0.351562\nv -0.292431 0.835938 0.351562\nv -0.346958 0.84375 0.351562\nv -0.34375 0.848754 0.351562\nv -0.293877 0.84375 0.351562\nv -0.339498 0.851562 0.351562\nv -0.335938 0.853384 0.351562\nv -0.328125 0.857828 0.351562\nv -0.295642 0.851562 0.351562\nv -0.296875 0.855084 0.351562\nv -0.32592 0.859375 0.351562\nv -0.320312 0.863364 0.351562\nv -0.3125 0.866421 0.351562\nv -0.299213 0.859375 0.351562\nv -0.304688 0.865421 0.351562\nv -0.3125 -0.734853 0.359375\nv -0.304688 -0.735812 0.359375\nv -0.296875 -0.735424 0.359375\nv -0.289062 -0.734946 0.359375\nv 0.429688 -0.736227 0.359375\nv 0.4375 -0.737337 0.359375\nv 0.445312 -0.737858 0.359375\nv 0.453125 -0.737637 0.359375\nv 0.460938 -0.737399 0.359375\nv 0.46875 -0.736472 0.359375\nv 0.476562 -0.735125 0.359375\nv -0.335938 -0.727277 0.359375\nv -0.328125 -0.730553 0.359375\nv -0.314868 -0.734375 0.359375\nv -0.320312 -0.733254 0.359375\nv -0.296875 -0.734375 0.364046\nv -0.285469 -0.734375 0.359375\nv -0.289062 -0.734375 0.36164\nv -0.28125 -0.733736 0.359375\nv -0.273438 -0.732251 0.359375\nv -0.265625 -0.730288 0.359375\nv -0.257812 -0.727508 0.359375\nv 0.40625 -0.726906 0.359375\nv 0.414062 -0.730456 0.359375\nv 0.42313 -0.734375 0.359375\nv 0.421875 -0.733986 0.359375\nv 0.421875 -0.734375 0.36279\nv 0.48023 -0.734375 0.359375\nv 0.484375 -0.733441 0.359375\nv 0.492188 -0.730432 0.359375\nv 0.5 -0.726664 0.359375\nv -0.337063 -0.726562 0.359375\nv -0.255769 -0.726562 0.359375\nv -0.257812 -0.726562 0.361492\nv -0.25 -0.722769 0.359375\nv 0.405561 -0.726562 0.359375\nv 0.398438 -0.720691 0.359375\nv 0.500102 -0.726562 0.359375\nv 0.5 -0.726562 0.360212\nv -0.340916 -0.71875 0.359375\nv -0.245207 -0.71875 0.359375\nv -0.25 -0.71875 0.364931\nv -0.242188 -0.715554 0.359375\nv 0.396637 -0.71875 0.359375\nv 0.398438 -0.71875 0.363964\nv 0.505695 -0.71875 0.359375\nv -0.341807 -0.710938 0.359375\nv -0.238772 -0.710938 0.359375\nv -0.242188 -0.710938 0.365237\nv 0.391657 -0.710938 0.359375\nv 0.390625 -0.708316 0.359375\nv 0.507283 -0.710938 0.359375\nv 0.507812 -0.705574 0.359375\nv -0.342023 -0.703125 0.359375\nv -0.23481 -0.703125 0.359375\nv -0.234375 -0.702057 0.359375\nv 0.388887 -0.703125 0.359375\nv 0.508048 -0.703125 0.359375\nv 0.507812 -0.703125 0.362026\nv -0.342145 -0.695312 0.359375\nv -0.231528 -0.695312 0.359375\nv 0.38701 -0.695312 0.359375\nv 0.508346 -0.695312 0.359375\nv 0.507812 -0.695312 0.365889\nv -0.341463 -0.6875 0.359375\nv -0.229811 -0.6875 0.359375\nv 0.386232 -0.6875 0.359375\nv 0.507824 -0.6875 0.359375\nv 0.507812 -0.687356 0.359375\nv 0.507812 -0.6875 0.359511\nv -0.340732 -0.679688 0.359375\nv -0.228564 -0.679688 0.359375\nv 0.385596 -0.679688 0.359375\nv 0.507181 -0.679688 0.359375\nv -0.339874 -0.671875 0.359375\nv -0.227246 -0.671875 0.359375\nv -0.226562 -0.668524 0.359375\nv 0.384953 -0.671875 0.359375\nv 0.506605 -0.671875 0.359375\nv -0.338985 -0.664062 0.359375\nv -0.225543 -0.664062 0.359375\nv 0.384159 -0.664062 0.359375\nv 0.506209 -0.664062 0.359375\nv -0.338028 -0.65625 0.359375\nv -0.223543 -0.65625 0.359375\nv 0.38346 -0.65625 0.359375\nv 0.505993 -0.65625 0.359375\nv -0.336993 -0.648438 0.359375\nv -0.221576 -0.648438 0.359375\nv 0.383039 -0.648438 0.359375\nv 0.382812 -0.64586 0.359375\nv 0.506039 -0.648438 0.359375\nv -0.336076 -0.640625 0.359375\nv -0.335938 -0.639527 0.359375\nv -0.335938 -0.640625 0.362705\nv -0.2205 -0.640625 0.359375\nv 0.382368 -0.640625 0.359375\nv 0.382812 -0.640625 0.364009\nv 0.50639 -0.640625 0.359375\nv -0.335018 -0.632812 0.359375\nv -0.219876 -0.632812 0.359375\nv 0.381531 -0.632812 0.359375\nv 0.506776 -0.632812 0.359375\nv -0.333968 -0.625 0.359375\nv -0.219356 -0.625 0.359375\nv -0.21875 -0.61787 0.359375\nv 0.380716 -0.625 0.359375\nv 0.507064 -0.625 0.359375\nv -0.332872 -0.617188 0.359375\nv -0.218695 -0.617188 0.359375\nv -0.21875 -0.617188 0.360413\nv 0.379937 -0.617188 0.359375\nv 0.507073 -0.617188 0.359375\nv -0.33216 -0.609375 0.359375\nv -0.218243 -0.609375 0.359375\nv -0.21875 -0.609375 0.366035\nv 0.379165 -0.609375 0.359375\nv 0.507023 -0.609375 0.359375\nv -0.332026 -0.601562 0.359375\nv -0.217773 -0.601562 0.359375\nv 0.378363 -0.601562 0.359375\nv 0.506707 -0.601562 0.359375\nv -0.331893 -0.59375 0.359375\nv -0.217226 -0.59375 0.359375\nv 0.377587 -0.59375 0.359375\nv 0.506218 -0.59375 0.359375\nv -0.331812 -0.585938 0.359375\nv -0.216592 -0.585938 0.359375\nv 0.376747 -0.585938 0.359375\nv 0.505732 -0.585938 0.359375\nv -0.331755 -0.578125 0.359375\nv -0.215977 -0.578125 0.359375\nv 0.375971 -0.578125 0.359375\nv 0.505616 -0.578125 0.359375\nv -0.331719 -0.570312 0.359375\nv -0.215361 -0.570312 0.359375\nv 0.375017 -0.570312 0.359375\nv 0.375 -0.570258 0.359375\nv 0.505498 -0.570312 0.359375\nv -0.331801 -0.5625 0.359375\nv -0.211502 -0.5625 0.359375\nv -0.210938 -0.562098 0.359375\nv -0.203125 -0.559 0.359375\nv -0.195312 -0.556809 0.359375\nv -0.1875 -0.554779 0.359375\nv 0 -0.555222 0.359375\nv 0.0078125 -0.555392 0.359375\nv 0.015625 -0.555004 0.359375\nv 0.351562 -0.555568 0.359375\nv 0.359375 -0.557482 0.359375\nv 0.370524 -0.5625 0.359375\nv 0.367188 -0.560444 0.359375\nv 0.50534 -0.5625 0.359375\nv -0.331897 -0.554688 0.359375\nv -0.203125 -0.554688 0.365543\nv -0.195312 -0.554688 0.363602\nv -0.186872 -0.554688 0.359375\nv -0.1875 -0.554688 0.359761\nv -0.179688 -0.553761 0.359375\nv -0.171875 -0.552819 0.359375\nv -0.164062 -0.55191 0.359375\nv -0.15625 -0.55161 0.359375\nv -0.148438 -0.55099 0.359375\nv -0.140625 -0.548603 0.359375\nv -0.0859375 -0.547049 0.359375\nv -0.078125 -0.547597 0.359375\nv -0.0703125 -0.548195 0.359375\nv -0.0625 -0.548836 0.359375\nv -0.0546875 -0.549527 0.359375\nv -0.046875 -0.550181 0.359375\nv -0.0390625 -0.550864 0.359375\nv -0.03125 -0.551758 0.359375\nv -0.0234375 -0.552684 0.359375\nv -0.015625 -0.553461 0.359375\nv -0.0062369 -0.554688 0.359375\nv -0.0078125 -0.554535 0.359375\nv 0 -0.554688 0.36117\nv 0.0078125 -0.554688 0.361461\nv 0.0184789 -0.554688 0.359375\nv 0.015625 -0.554688 0.360255\nv 0.0234375 -0.554038 0.359375\nv 0.03125 -0.553052 0.359375\nv 0.0390625 -0.552102 0.359375\nv 0.046875 -0.551094 0.359375\nv 0.0546875 -0.550445 0.359375\nv 0.0625 -0.550124 0.359375\nv 0.0703125 -0.549804 0.359375\nv 0.078125 -0.54955 0.359375\nv 0.0859375 -0.549299 0.359375\nv 0.09375 -0.549321 0.359375\nv 0.101562 -0.549006 0.359375\nv 0.109375 -0.548668 0.359375\nv 0.117188 -0.548502 0.359375\nv 0.125 -0.54847 0.359375\nv 0.132812 -0.54852 0.359375\nv 0.140625 -0.548711 0.359375\nv 0.148438 -0.549126 0.359375\nv 0.15625 -0.549538 0.359375\nv 0.164062 -0.549924 0.359375\nv 0.171875 -0.550112 0.359375\nv 0.179688 -0.550224 0.359375\nv 0.1875 -0.550452 0.359375\nv 0.195312 -0.550933 0.359375\nv 0.203125 -0.551014 0.359375\nv 0.210938 -0.551062 0.359375\nv 0.21875 -0.551269 0.359375\nv 0.226562 -0.551527 0.359375\nv 0.234375 -0.551575 0.359375\nv 0.242188 -0.551486 0.359375\nv 0.25 -0.55126 0.359375\nv 0.257812 -0.55121 0.359375\nv 0.265625 -0.55132 0.359375\nv 0.273438 -0.551235 0.359375\nv 0.28125 -0.550833 0.359375\nv 0.289062 -0.550513 0.359375\nv 0.296875 -0.549869 0.359375\nv 0.304688 -0.549099 0.359375\nv 0.3125 -0.548656 0.359375\nv 0.320312 -0.549454 0.359375\nv 0.328125 -0.550568 0.359375\nv 0.335938 -0.551911 0.359375\nv 0.348422 -0.554688 0.359375\nv 0.34375 -0.553468 0.359375\nv 0.351562 -0.554688 0.365412\nv 0.505234 -0.554688 0.359375\nv -0.331915 -0.546875 0.359375\nv -0.135039 -0.546875 0.359375\nv -0.140625 -0.546875 0.364687\nv -0.132812 -0.546034 0.359375\nv -0.125 -0.543821 0.359375\nv -0.117188 -0.544583 0.359375\nv -0.109375 -0.545328 0.359375\nv -0.101562 -0.545846 0.359375\nv -0.0884761 -0.546875 0.359375\nv -0.09375 -0.546428 0.359375\nv -0.0859375 -0.546875 0.359986\nv -0.078125 -0.546875 0.361933\nv -0.0703125 -0.546875 0.364022\nv -0.0625 -0.546875 0.366275\nv 0.0859375 -0.546875 0.366517\nv 0.09375 -0.546875 0.366668\nv 0.101562 -0.546875 0.365945\nv 0.109375 -0.546875 0.36483\nv 0.117188 -0.546875 0.364149\nv 0.125 -0.546875 0.363965\nv 0.132812 -0.546875 0.364143\nv 0.140625 -0.546875 0.364827\nv 0.148438 -0.546875 0.366286\nv 0.505152 -0.546875 0.359375\nv -0.331982 -0.539062 0.359375\nv 0.505022 -0.539062 0.359375\nv -0.332007 -0.53125 0.359375\nv 0.50499 -0.53125 0.359375\nv -0.33206 -0.523438 0.359375\nv 0.504926 -0.523438 0.359375\nv -0.332038 -0.515625 0.359375\nv 0.504985 -0.515625 0.359375\nv -0.331989 -0.507812 0.359375\nv 0.50499 -0.507812 0.359375\nv -0.331862 -0.5 0.359375\nv 0.504973 -0.5 0.359375\nv -0.331655 -0.492188 0.359375\nv -0.132812 -0.484905 0.359375\nv -0.125 -0.485335 0.359375\nv 0.3125 -0.485041 0.359375\nv 0.320312 -0.484462 0.359375\nv 0.505161 -0.492188 0.359375\nv -0.331574 -0.484375 0.359375\nv -0.1875 -0.476652 0.359375\nv -0.179688 -0.477218 0.359375\nv -0.15625 -0.476691 0.359375\nv -0.148438 -0.479222 0.359375\nv -0.134264 -0.484375 0.359375\nv -0.140625 -0.482197 0.359375\nv -0.120273 -0.484375 0.359375\nv -0.117188 -0.4838 0.359375\nv -0.117188 -0.484375 0.361119\nv -0.109375 -0.482287 0.359375\nv -0.109375 -0.484375 0.365574\nv -0.101562 -0.48069 0.359375\nv -0.09375 -0.47908 0.359375\nv -0.0859375 -0.477398 0.359375\nv 0.171875 -0.476603 0.359375\nv 0.179688 -0.476594 0.359375\nv 0.203125 -0.476756 0.359375\nv 0.210938 -0.476747 0.359375\nv 0.21875 -0.476827 0.359375\nv 0.226562 -0.476967 0.359375\nv 0.234375 -0.477025 0.359375\nv 0.242188 -0.47714 0.359375\nv 0.25 -0.477223 0.359375\nv 0.257812 -0.47753 0.359375\nv 0.265625 -0.477984 0.359375\nv 0.273438 -0.478468 0.359375\nv 0.28125 -0.479184 0.359375\nv 0.28125 -0.484375 0.366763\nv 0.289062 -0.480354 0.359375\nv 0.289062 -0.484375 0.364969\nv 0.296875 -0.481896 0.359375\nv 0.296875 -0.484375 0.363097\nv 0.309576 -0.484375 0.359375\nv 0.304688 -0.483392 0.359375\nv 0.304688 -0.484375 0.360989\nv 0.320541 -0.484375 0.359375\nv 0.328125 -0.48179 0.359375\nv 0.328125 -0.484375 0.364406\nv 0.335938 -0.479347 0.359375\nv 0.34375 -0.478533 0.359375\nv 0.351562 -0.477762 0.359375\nv 0.359375 -0.477045 0.359375\nv 0.505497 -0.484375 0.359375\nv -0.331556 -0.476562 0.359375\nv -0.210938 -0.476562 0.365999\nv -0.203125 -0.472791 0.359375\nv -0.203125 -0.476562 0.363268\nv -0.188014 -0.476562 0.359375\nv -0.195312 -0.475131 0.359375\nv -0.195312 -0.476562 0.361105\nv -0.174143 -0.476562 0.359375\nv -0.171875 -0.476309 0.359375\nv -0.171875 -0.476562 0.359876\nv -0.157946 -0.476562 0.359375\nv -0.164062 -0.476093 0.359375\nv -0.164062 -0.476562 0.360271\nv -0.0820342 -0.476562 0.359375\nv -0.078125 -0.475924 0.359375\nv -0.078125 -0.476562 0.361566\nv -0.0703125 -0.474626 0.359375\nv -0.0703125 -0.476562 0.365395\nv -0.0625 -0.473344 0.359375\nv -0.0546875 -0.472201 0.359375\nv -0.046875 -0.471056 0.359375\nv -0.0390625 -0.469901 0.359375\nv -0.03125 -0.468797 0.359375\nv 0.015625 -0.468788 0.359375\nv 0.0234375 -0.469919 0.359375\nv 0.03125 -0.470868 0.359375\nv 0.0390625 -0.471388 0.359375\nv 0.046875 -0.471717 0.359375\nv 0.0546875 -0.471887 0.359375\nv 0.0625 -0.472169 0.359375\nv 0.0703125 -0.472379 0.359375\nv 0.0703125 -0.476562 0.367104\nv 0.078125 -0.472551 0.359375\nv 0.078125 -0.476562 0.366836\nv 0.0859375 -0.472927 0.359375\nv 0.0859375 -0.476562 0.3656\nv 0.09375 -0.473507 0.359375\nv 0.09375 -0.476562 0.364684\nv 0.101562 -0.474053 0.359375\nv 0.101562 -0.476562 0.363958\nv 0.109375 -0.474501 0.359375\nv 0.109375 -0.476562 0.363396\nv 0.117188 -0.47496 0.359375\nv 0.117188 -0.476562 0.362429\nv 0.125 -0.475499 0.359375\nv 0.125 -0.476562 0.36135\nv 0.132812 -0.475927 0.359375\nv 0.132812 -0.476562 0.360592\nv 0.140625 -0.476066 0.359375\nv 0.140625 -0.476562 0.360335\nv 0.148438 -0.475959 0.359375\nv 0.148438 -0.476562 0.360482\nv 0.15625 -0.475956 0.359375\nv 0.15625 -0.476562 0.36041\nv 0.170895 -0.476562 0.359375\nv 0.164062 -0.476309 0.359375\nv 0.164062 -0.476562 0.359811\nv 0.182109 -0.476562 0.359375\nv 0.1875 -0.476504 0.359375\nv 0.1875 -0.476562 0.359495\nv 0.197505 -0.476562 0.359375\nv 0.195312 -0.4765 0.359375\nv 0.195312 -0.476562 0.359528\nv 0.361021 -0.476562 0.359375\nv 0.367188 -0.473193 0.359375\nv 0.367188 -0.476562 0.362044\nv 0.505773 -0.476562 0.359375\nv -0.331546 -0.46875 0.359375\nv -0.210497 -0.46875 0.359375\nv -0.210938 -0.46801 0.359375\nv -0.210938 -0.46875 0.359827\nv -0.0309084 -0.46875 0.359375\nv -0.0234375 -0.467778 0.359375\nv -0.0234375 -0.46875 0.362003\nv -0.015625 -0.466867 0.359375\nv -0.015625 -0.46875 0.36334\nv -0.0078125 -0.466591 0.359375\nv -0.0078125 -0.46875 0.363576\nv 0 -0.466727 0.359375\nv 0 -0.46875 0.363251\nv 0.0153679 -0.46875 0.359375\nv 0.0078125 -0.467676 0.359375\nv 0.0078125 -0.46875 0.361589\nv 0.372184 -0.46875 0.359375\nv 0.375 -0.465886 0.359375\nv 0.375 -0.46875 0.36162\nv 0.505995 -0.46875 0.359375\nv -0.331567 -0.460938 0.359375\nv -0.213134 -0.460938 0.359375\nv 0.378298 -0.460938 0.359375\nv 0.382812 -0.460938 0.366941\nv 0.506187 -0.460938 0.359375\nv -0.331568 -0.453125 0.359375\nv -0.214639 -0.453125 0.359375\nv 0.381192 -0.453125 0.359375\nv 0.382812 -0.453125 0.363232\nv 0.506457 -0.453125 0.359375\nv -0.331546 -0.445312 0.359375\nv -0.215668 -0.445312 0.359375\nv 0.382506 -0.445312 0.359375\nv 0.382812 -0.44337 0.359375\nv 0.382812 -0.445312 0.360244\nv 0.50679 -0.445312 0.359375\nv -0.331397 -0.4375 0.359375\nv -0.216495 -0.4375 0.359375\nv 0.38377 -0.4375 0.359375\nv 0.507223 -0.4375 0.359375\nv -0.331152 -0.429688 0.359375\nv -0.216518 -0.429688 0.359375\nv 0.384327 -0.429688 0.359375\nv 0.507475 -0.429688 0.359375\nv -0.33092 -0.421875 0.359375\nv -0.217068 -0.421875 0.359375\nv 0.38456 -0.421875 0.359375\nv 0.507684 -0.421875 0.359375\nv 0.507812 -0.415622 0.359375\nv -0.330653 -0.414062 0.359375\nv -0.217563 -0.414062 0.359375\nv -0.21875 -0.414062 0.365241\nv 0.385595 -0.414062 0.359375\nv 0.50784 -0.414062 0.359375\nv 0.507812 -0.410721 0.359375\nv -0.330316 -0.40625 0.359375\nv -0.217918 -0.40625 0.359375\nv -0.21875 -0.40625 0.362839\nv 0.386122 -0.40625 0.359375\nv 0.507772 -0.40625 0.359375\nv 0.507812 -0.40625 0.360485\nv -0.329891 -0.398438 0.359375\nv -0.217806 -0.398438 0.359375\nv -0.21875 -0.398438 0.363226\nv 0.385694 -0.398438 0.359375\nv 0.507747 -0.398438 0.359375\nv 0.507812 -0.398438 0.361077\nv -0.329378 -0.390625 0.359375\nv -0.217392 -0.390625 0.359375\nv -0.21875 -0.390625 0.364619\nv 0.385813 -0.390625 0.359375\nv 0.507684 -0.390625 0.359375\nv 0.507812 -0.390625 0.361659\nv -0.328832 -0.382812 0.359375\nv -0.21713 -0.382812 0.359375\nv -0.21875 -0.382812 0.365578\nv 0.385922 -0.382812 0.359375\nv 0.50741 -0.382812 0.359375\nv 0.507812 -0.382812 0.364783\nv -0.328145 -0.375 0.359375\nv -0.328125 -0.374784 0.359375\nv -0.216961 -0.375 0.359375\nv -0.21875 -0.375 0.366134\nv 0.386339 -0.375 0.359375\nv 0.507088 -0.375 0.359375\nv -0.327396 -0.367188 0.359375\nv -0.216968 -0.367188 0.359375\nv -0.21875 -0.367188 0.366105\nv 0.386954 -0.367188 0.359375\nv 0.506752 -0.367188 0.359375\nv -0.32661 -0.359375 0.359375\nv -0.217404 -0.359375 0.359375\nv -0.21875 -0.359375 0.366166\nv 0.387581 -0.359375 0.359375\nv 0.506591 -0.359375 0.359375\nv -0.325843 -0.351562 0.359375\nv -0.217832 -0.351562 0.359375\nv -0.21875 -0.351562 0.365717\nv 0.388302 -0.351562 0.359375\nv 0.506264 -0.351562 0.359375\nv -0.325369 -0.34375 0.359375\nv -0.218294 -0.34375 0.359375\nv -0.21875 -0.337184 0.359375\nv -0.21875 -0.34375 0.362241\nv 0.389108 -0.34375 0.359375\nv 0.505934 -0.34375 0.359375\nv -0.324925 -0.335938 0.359375\nv -0.218842 -0.335938 0.359375\nv 0.389669 -0.335938 0.359375\nv 0.390625 -0.335938 0.366488\nv 0.505749 -0.335938 0.359375\nv -0.324565 -0.328125 0.359375\nv -0.219222 -0.328125 0.359375\nv 0.390139 -0.328125 0.359375\nv 0.390625 -0.320465 0.359375\nv 0.390625 -0.328125 0.363895\nv 0.505556 -0.328125 0.359375\nv -0.324243 -0.320312 0.359375\nv -0.219578 -0.320312 0.359375\nv 0.390634 -0.320312 0.359375\nv 0.505458 -0.320312 0.359375\nv -0.32388 -0.3125 0.359375\nv -0.219792 -0.3125 0.359375\nv 0.391078 -0.3125 0.359375\nv 0.505497 -0.3125 0.359375\nv -0.323497 -0.304688 0.359375\nv -0.220027 -0.304688 0.359375\nv 0.391332 -0.304688 0.359375\nv 0.50556 -0.304688 0.359375\nv -0.323002 -0.296875 0.359375\nv -0.220298 -0.296875 0.359375\nv 0.391507 -0.296875 0.359375\nv 0.505543 -0.296875 0.359375\nv -0.322457 -0.289062 0.359375\nv -0.220533 -0.289062 0.359375\nv 0.391609 -0.289062 0.359375\nv 0.505388 -0.289062 0.359375\nv -0.321855 -0.28125 0.359375\nv -0.220786 -0.28125 0.359375\nv 0.391747 -0.28125 0.359375\nv 0.5052 -0.28125 0.359375\nv -0.321278 -0.273438 0.359375\nv -0.22097 -0.273438 0.359375\nv 0.392371 -0.273438 0.359375\nv 0.50488 -0.273438 0.359375\nv -0.320605 -0.265625 0.359375\nv -0.320312 -0.262024 0.359375\nv -0.221145 -0.265625 0.359375\nv 0.392937 -0.265625 0.359375\nv 0.504601 -0.265625 0.359375\nv -0.319979 -0.257812 0.359375\nv -0.320312 -0.257812 0.362021\nv -0.221032 -0.257812 0.359375\nv 0.39308 -0.257812 0.359375\nv 0.504093 -0.257812 0.359375\nv -0.319448 -0.25 0.359375\nv -0.320312 -0.25 0.365481\nv -0.220553 -0.25 0.359375\nv 0.393159 -0.25 0.359375\nv 0.503575 -0.25 0.359375\nv -0.318937 -0.242188 0.359375\nv -0.220092 -0.242188 0.359375\nv 0.393022 -0.242188 0.359375\nv 0.503357 -0.242188 0.359375\nv -0.318537 -0.234375 0.359375\nv -0.21967 -0.234375 0.359375\nv 0.393097 -0.234375 0.359375\nv 0.503258 -0.234375 0.359375\nv -0.318524 -0.226562 0.359375\nv -0.219539 -0.226562 0.359375\nv 0.393312 -0.226562 0.359375\nv 0.503211 -0.226562 0.359375\nv -0.3186 -0.21875 0.359375\nv -0.21936 -0.21875 0.359375\nv 0.393423 -0.21875 0.359375\nv 0.503203 -0.21875 0.359375\nv -0.318652 -0.210938 0.359375\nv -0.219052 -0.210938 0.359375\nv -0.21875 -0.206211 0.359375\nv 0.393491 -0.210938 0.359375\nv 0.503103 -0.210938 0.359375\nv -0.318971 -0.203125 0.359375\nv -0.320312 -0.203125 0.367032\nv -0.218571 -0.203125 0.359375\nv -0.21875 -0.203125 0.360259\nv 0.393551 -0.203125 0.359375\nv 0.503009 -0.203125 0.359375\nv -0.318954 -0.195312 0.359375\nv -0.320312 -0.195312 0.366922\nv -0.218515 -0.195312 0.359375\nv -0.21875 -0.188337 0.359375\nv -0.21875 -0.195312 0.360461\nv 0.39381 -0.195312 0.359375\nv 0.503019 -0.195312 0.359375\nv -0.318712 -0.1875 0.359375\nv -0.21878 -0.1875 0.359375\nv 0.394148 -0.1875 0.359375\nv 0.50309 -0.1875 0.359375\nv -0.318375 -0.179688 0.359375\nv -0.21911 -0.179688 0.359375\nv 0.394402 -0.179688 0.359375\nv 0.502996 -0.179688 0.359375\nv -0.317857 -0.171875 0.359375\nv -0.218876 -0.171875 0.359375\nv -0.21875 -0.170703 0.359375\nv 0.39446 -0.171875 0.359375\nv 0.502759 -0.171875 0.359375\nv -0.317541 -0.164062 0.359375\nv -0.218052 -0.164062 0.359375\nv 0.394315 -0.164062 0.359375\nv 0.502542 -0.164062 0.359375\nv -0.317101 -0.15625 0.359375\nv -0.217538 -0.15625 0.359375\nv 0.394077 -0.15625 0.359375\nv 0.50203 -0.15625 0.359375\nv -0.316104 -0.148438 0.359375\nv -0.217057 -0.148438 0.359375\nv 0.393912 -0.148438 0.359375\nv 0.501611 -0.148438 0.359375\nv -0.315243 -0.140625 0.359375\nv -0.216888 -0.140625 0.359375\nv 0.393529 -0.140625 0.359375\nv 0.501217 -0.140625 0.359375\nv -0.314674 -0.132812 0.359375\nv -0.216587 -0.132812 0.359375\nv 0.392426 -0.132812 0.359375\nv 0.500765 -0.132812 0.359375\nv -0.314199 -0.125 0.359375\nv -0.216037 -0.125 0.359375\nv 0.3912 -0.125 0.359375\nv 0.390625 -0.121508 0.359375\nv 0.500312 -0.125 0.359375\nv 0.5 -0.125 0.366539\nv -0.313807 -0.117188 0.359375\nv -0.215163 -0.117188 0.359375\nv 0.389893 -0.117188 0.359375\nv 0.390625 -0.117188 0.36303\nv 0.500016 -0.117188 0.359375\nv 0.5 -0.115277 0.359375\nv 0.5 -0.117188 0.35962\nv -0.31339 -0.109375 0.359375\nv -0.214233 -0.109375 0.359375\nv 0.387875 -0.109375 0.359375\nv 0.390625 -0.109375 0.366327\nv 0.49995 -0.109375 0.359375\nv -0.313059 -0.101562 0.359375\nv -0.212845 -0.101562 0.359375\nv -0.210938 -0.0952683 0.359375\nv 0.385205 -0.101562 0.359375\nv 0.382812 -0.0963037 0.359375\nv 0.499766 -0.101562 0.359375\nv -0.312994 -0.09375 0.359375\nv -0.210459 -0.09375 0.359375\nv -0.210938 -0.09375 0.361267\nv 0.381853 -0.09375 0.359375\nv 0.382812 -0.09375 0.361062\nv 0.499839 -0.09375 0.359375\nv 0.5 -0.0918728 0.359375\nv 0.5 -0.09375 0.361876\nv -0.313363 -0.0859375 0.359375\nv -0.207496 -0.0859375 0.359375\nv -0.203125 -0.0787704 0.359375\nv 0.380403 -0.0859375 0.359375\nv 0.382812 -0.0859375 0.363667\nv 0.500569 -0.0859375 0.359375\nv -0.31446 -0.078125 0.359375\nv -0.202401 -0.078125 0.359375\nv -0.203125 -0.078125 0.360389\nv -0.195312 -0.0735215 0.359375\nv -0.1875 -0.071181 0.359375\nv 0.367188 -0.0709197 0.359375\nv 0.377071 -0.078125 0.359375\nv 0.375 -0.0759689 0.359375\nv 0.50196 -0.078125 0.359375\nv -0.31533 -0.0703125 0.359375\nv -0.195312 -0.0703125 0.364924\nv -0.180726 -0.0703125 0.359375\nv -0.1875 -0.0703125 0.360943\nv -0.179688 -0.0701746 0.359375\nv -0.171875 -0.0693148 0.359375\nv -0.164062 -0.068693 0.359375\nv -0.15625 -0.0675733 0.359375\nv -0.148438 -0.0663864 0.359375\nv -0.140625 -0.0658177 0.359375\nv -0.132812 -0.0660986 0.359375\nv -0.125 -0.0662547 0.359375\nv -0.117188 -0.0662747 0.359375\nv -0.109375 -0.0662925 0.359375\nv -0.101562 -0.0663051 0.359375\nv -0.09375 -0.0661064 0.359375\nv -0.0859375 -0.0658806 0.359375\nv -0.078125 -0.0657 0.359375\nv -0.0703125 -0.0655204 0.359375\nv -0.0625 -0.0654117 0.359375\nv -0.0546875 -0.0653188 0.359375\nv -0.046875 -0.065253 0.359375\nv -0.0390625 -0.06529 0.359375\nv -0.03125 -0.065677 0.359375\nv -0.0234375 -0.0661582 0.359375\nv -0.015625 -0.0665665 0.359375\nv -0.0078125 -0.0670254 0.359375\nv 0 -0.0673646 0.359375\nv 0.0078125 -0.0676862 0.359375\nv 0.015625 -0.0679241 0.359375\nv 0.0234375 -0.0679467 0.359375\nv 0.03125 -0.0679145 0.359375\nv 0.0390625 -0.0679257 0.359375\nv 0.046875 -0.0679132 0.359375\nv 0.0546875 -0.0679071 0.359375\nv 0.0625 -0.0679325 0.359375\nv 0.0703125 -0.0678828 0.359375\nv 0.078125 -0.0679787 0.359375\nv 0.0859375 -0.0680075 0.359375\nv 0.09375 -0.0681517 0.359375\nv 0.101562 -0.0681969 0.359375\nv 0.109375 -0.0681361 0.359375\nv 0.117188 -0.0680946 0.359375\nv 0.125 -0.0680437 0.359375\nv 0.132812 -0.0680383 0.359375\nv 0.140625 -0.0680036 0.359375\nv 0.148438 -0.0679476 0.359375\nv 0.15625 -0.0678876 0.359375\nv 0.164062 -0.0678617 0.359375\nv 0.171875 -0.0677043 0.359375\nv 0.179688 -0.0673611 0.359375\nv 0.1875 -0.0670264 0.359375\nv 0.195312 -0.0667369 0.359375\nv 0.203125 -0.0665874 0.359375\nv 0.210938 -0.0663902 0.359375\nv 0.21875 -0.0661631 0.359375\nv 0.226562 -0.0659071 0.359375\nv 0.234375 -0.0656701 0.359375\nv 0.242188 -0.0654765 0.359375\nv 0.25 -0.0653818 0.359375\nv 0.257812 -0.065312 0.359375\nv 0.265625 -0.065322 0.359375\nv 0.273438 -0.0653681 0.359375\nv 0.28125 -0.0655438 0.359375\nv 0.289062 -0.0657404 0.359375\nv 0.296875 -0.0660801 0.359375\nv 0.304688 -0.0663764 0.359375\nv 0.3125 -0.0665015 0.359375\nv 0.320312 -0.066538 0.359375\nv 0.328125 -0.0665788 0.359375\nv 0.335938 -0.0667453 0.359375\nv 0.34375 -0.0670185 0.359375\nv 0.351562 -0.067447 0.359375\nv 0.365003 -0.0703125 0.359375\nv 0.359375 -0.068724 0.359375\nv 0.367188 -0.0703125 0.360214\nv 0.375 -0.0703125 0.366169\nv 0.5033 -0.0703125 0.359375\nv -0.315415 -0.0625 0.359375\nv -0.148438 -0.0625 0.366677\nv -0.140625 -0.0625 0.365848\nv -0.132812 -0.0625 0.366424\nv -0.125 -0.0625 0.366695\nv -0.117188 -0.0625 0.366825\nv -0.109375 -0.0625 0.366402\nv -0.101562 -0.0625 0.365482\nv -0.09375 -0.0625 0.364727\nv -0.0859375 -0.0625 0.364254\nv -0.078125 -0.0625 0.363998\nv -0.0703125 -0.0625 0.363738\nv -0.0625 -0.0625 0.363524\nv -0.0546875 -0.0625 0.36331\nv -0.046875 -0.0625 0.363268\nv -0.0390625 -0.0625 0.363451\nv -0.03125 -0.0625 0.364052\nv -0.0234375 -0.0625 0.36464\nv -0.015625 -0.0625 0.365096\nv -0.0078125 -0.0625 0.365412\nv 0 -0.0625 0.365936\nv 0.0078125 -0.0625 0.366347\nv 0.015625 -0.0625 0.366791\nv 0.0234375 -0.0625 0.366721\nv 0.03125 -0.0625 0.366624\nv 0.0390625 -0.0625 0.366524\nv 0.046875 -0.0625 0.36653\nv 0.0546875 -0.0625 0.366509\nv 0.0625 -0.0625 0.366466\nv 0.0703125 -0.0625 0.366706\nv 0.078125 -0.0625 0.367135\nv 0.226562 -0.0625 0.36687\nv 0.234375 -0.0625 0.366409\nv 0.242188 -0.0625 0.365887\nv 0.25 -0.0625 0.365651\nv 0.257812 -0.0625 0.365556\nv 0.265625 -0.0625 0.365464\nv 0.273438 -0.0625 0.365347\nv 0.28125 -0.0625 0.365312\nv 0.289062 -0.0625 0.365365\nv 0.296875 -0.0625 0.365511\nv 0.304688 -0.0625 0.365408\nv 0.3125 -0.0625 0.365398\nv 0.320312 -0.0625 0.365216\nv 0.328125 -0.0625 0.364944\nv 0.335938 -0.0625 0.364919\nv 0.34375 -0.0625 0.365107\nv 0.351562 -0.0625 0.365464\nv 0.359375 -0.0625 0.366278\nv 0.5045 -0.0625 0.359375\nv -0.315093 -0.0546875 0.359375\nv 0.505165 -0.0546875 0.359375\nv -0.314612 -0.046875 0.359375\nv 0.50551 -0.046875 0.359375\nv -0.314503 -0.0390625 0.359375\nv 0.505225 -0.0390625 0.359375\nv -0.314435 -0.03125 0.359375\nv 0.50432 -0.03125 0.359375\nv -0.314497 -0.0234375 0.359375\nv 0.503541 -0.0234375 0.359375\nv -0.314909 -0.015625 0.359375\nv 0.502652 -0.015625 0.359375\nv -0.314812 -0.0078125 0.359375\nv 0.502528 -0.0078125 0.359375\nv -0.314557 0 0.359375\nv 0.502982 0 0.359375\nv -0.314262 0.0078125 0.359375\nv 0.502886 0.0078125 0.359375\nv -0.314665 0.015625 0.359375\nv 0.502739 0.015625 0.359375\nv -0.315258 0.0234375 0.359375\nv 0.50242 0.0234375 0.359375\nv -0.315483 0.03125 0.359375\nv 0.50085 0.03125 0.359375\nv 0.5 0.0343967 0.359375\nv 0.5 0.03125 0.362221\nv -0.315157 0.0390625 0.359375\nv 0.498485 0.0390625 0.359375\nv -0.314893 0.046875 0.359375\nv 0.494501 0.046875 0.359375\nv 0.492188 0.0496941 0.359375\nv 0.492188 0.046875 0.363091\nv -0.314142 0.0546875 0.359375\nv 0.476562 0.0614279 0.359375\nv 0.487506 0.0546875 0.359375\nv 0.484375 0.057126 0.359375\nv 0.484375 0.0546875 0.364698\nv -0.313504 0.0625 0.359375\nv -0.179688 0.0702979 0.359375\nv -0.171875 0.0692712 0.359375\nv -0.164062 0.0684512 0.359375\nv -0.15625 0.0684332 0.359375\nv -0.148438 0.0686085 0.359375\nv -0.140625 0.0687956 0.359375\nv -0.132812 0.0689638 0.359375\nv -0.125 0.0689423 0.359375\nv -0.117188 0.0687273 0.359375\nv -0.109375 0.0685255 0.359375\nv -0.101562 0.0682829 0.359375\nv -0.101562 0.0625 0.366834\nv -0.09375 0.0679944 0.359375\nv -0.09375 0.0625 0.366412\nv -0.0859375 0.0677298 0.359375\nv -0.0859375 0.0625 0.366067\nv -0.078125 0.0676213 0.359375\nv -0.078125 0.0625 0.36564\nv -0.0703125 0.06732 0.359375\nv -0.0703125 0.0625 0.365149\nv -0.0625 0.0668545 0.359375\nv -0.0625 0.0625 0.364612\nv -0.0546875 0.0665094 0.359375\nv -0.0546875 0.0625 0.364255\nv -0.046875 0.0662579 0.359375\nv -0.046875 0.0625 0.363924\nv -0.0390625 0.066086 0.359375\nv -0.0390625 0.0625 0.363625\nv -0.03125 0.0659609 0.359375\nv -0.03125 0.0625 0.363512\nv -0.0234375 0.065778 0.359375\nv -0.0234375 0.0625 0.363461\nv -0.015625 0.0655488 0.359375\nv -0.015625 0.0625 0.363164\nv -0.0078125 0.0654053 0.359375\nv -0.0078125 0.0625 0.362883\nv 0 0.0655754 0.359375\nv 0 0.0625 0.363098\nv 0.0078125 0.0657712 0.359375\nv 0.0078125 0.0625 0.363453\nv 0.015625 0.0657722 0.359375\nv 0.015625 0.0625 0.363466\nv 0.0234375 0.0656312 0.359375\nv 0.0234375 0.0625 0.363323\nv 0.03125 0.0654092 0.359375\nv 0.03125 0.0625 0.362938\nv 0.0390625 0.0649736 0.359375\nv 0.0390625 0.0625 0.362411\nv 0.046875 0.0648195 0.359375\nv 0.046875 0.0625 0.362145\nv 0.0546875 0.0648703 0.359375\nv 0.0546875 0.0625 0.362209\nv 0.0625 0.0649467 0.359375\nv 0.0625 0.0625 0.362283\nv 0.0703125 0.0649916 0.359375\nv 0.0703125 0.0625 0.362238\nv 0.078125 0.0650429 0.359375\nv 0.078125 0.0625 0.362229\nv 0.0859375 0.0651155 0.359375\nv 0.0859375 0.0625 0.362288\nv 0.09375 0.065404 0.359375\nv 0.09375 0.0625 0.362572\nv 0.101562 0.0655656 0.359375\nv 0.101562 0.0625 0.36276\nv 0.109375 0.0655754 0.359375\nv 0.109375 0.0625 0.362733\nv 0.117188 0.0658963 0.359375\nv 0.117188 0.0625 0.363034\nv 0.125 0.0660488 0.359375\nv 0.125 0.0625 0.363221\nv 0.132812 0.0661157 0.359375\nv 0.132812 0.0625 0.36337\nv 0.140625 0.0661439 0.359375\nv 0.140625 0.0625 0.363392\nv 0.148438 0.0661048 0.359375\nv 0.148438 0.0625 0.363295\nv 0.15625 0.0661164 0.359375\nv 0.15625 0.0625 0.363233\nv 0.164062 0.0661023 0.359375\nv 0.164062 0.0625 0.363146\nv 0.171875 0.0661701 0.359375\nv 0.171875 0.0625 0.363171\nv 0.179688 0.0662672 0.359375\nv 0.179688 0.0625 0.363215\nv 0.1875 0.0662592 0.359375\nv 0.1875 0.0625 0.363231\nv 0.195312 0.0662957 0.359375\nv 0.195312 0.0625 0.363257\nv 0.203125 0.0663229 0.359375\nv 0.203125 0.0625 0.363177\nv 0.210938 0.0661645 0.359375\nv 0.210938 0.0625 0.363039\nv 0.21875 0.0660141 0.359375\nv 0.21875 0.0625 0.362918\nv 0.226562 0.065853 0.359375\nv 0.226562 0.0625 0.362731\nv 0.234375 0.0659097 0.359375\nv 0.234375 0.0625 0.362721\nv 0.242188 0.0660312 0.359375\nv 0.242188 0.0625 0.362785\nv 0.25 0.0661901 0.359375\nv 0.25 0.0625 0.36295\nv 0.257812 0.0665278 0.359375\nv 0.257812 0.0625 0.363189\nv 0.265625 0.066836 0.359375\nv 0.265625 0.0625 0.363511\nv 0.273438 0.0669982 0.359375\nv 0.273438 0.0625 0.363678\nv 0.28125 0.0670779 0.359375\nv 0.28125 0.0625 0.363804\nv 0.289062 0.0671165 0.359375\nv 0.289062 0.0625 0.363967\nv 0.296875 0.0669397 0.359375\nv 0.296875 0.0625 0.363875\nv 0.304688 0.066621 0.359375\nv 0.304688 0.0625 0.363822\nv 0.3125 0.0663918 0.359375\nv 0.3125 0.0625 0.363691\nv 0.320312 0.066218 0.359375\nv 0.320312 0.0625 0.363504\nv 0.328125 0.0661311 0.359375\nv 0.328125 0.0625 0.363433\nv 0.335938 0.0659722 0.359375\nv 0.335938 0.0625 0.363253\nv 0.34375 0.0655668 0.359375\nv 0.34375 0.0625 0.362727\nv 0.351562 0.0646965 0.359375\nv 0.351562 0.0625 0.361964\nv 0.359375 0.0640179 0.359375\nv 0.359375 0.0625 0.361263\nv 0.367188 0.063631 0.359375\nv 0.367188 0.0625 0.360902\nv 0.375 0.0631944 0.359375\nv 0.375 0.0625 0.360404\nv 0.382812 0.0631706 0.359375\nv 0.382812 0.0625 0.360411\nv 0.390625 0.0635152 0.359375\nv 0.390625 0.0625 0.360969\nv 0.398438 0.0638468 0.359375\nv 0.398438 0.0625 0.361605\nv 0.40625 0.0642101 0.359375\nv 0.40625 0.0625 0.362519\nv 0.414062 0.0652283 0.359375\nv 0.414062 0.0625 0.364861\nv 0.421875 0.065676 0.359375\nv 0.421875 0.0625 0.365927\nv 0.429688 0.0660392 0.359375\nv 0.429688 0.0625 0.366029\nv 0.4375 0.0662127 0.359375\nv 0.4375 0.0625 0.365778\nv 0.445312 0.0667078 0.359375\nv 0.445312 0.0625 0.365584\nv 0.453125 0.065767 0.359375\nv 0.453125 0.0625 0.364445\nv 0.460938 0.0648831 0.359375\nv 0.460938 0.0625 0.363004\nv 0.473776 0.0625 0.359375\nv 0.46875 0.0642276 0.359375\nv 0.46875 0.0625 0.36221\nv -0.313792 0.0703125 0.359375\nv -0.203125 0.0756501 0.359375\nv -0.195312 0.0736346 0.359375\nv -0.195312 0.0703125 0.364917\nv -0.17976 0.0703125 0.359375\nv -0.1875 0.071635 0.359375\nv -0.1875 0.0703125 0.362016\nv -0.31425 0.078125 0.359375\nv -0.20877 0.078125 0.359375\nv -0.210938 0.0798064 0.359375\nv -0.210938 0.078125 0.361595\nv -0.314737 0.0859375 0.359375\nv -0.215758 0.0859375 0.359375\nv -0.21875 0.0911496 0.359375\nv -0.21875 0.0859375 0.364848\nv -0.315664 0.09375 0.359375\nv -0.219933 0.09375 0.359375\nv -0.316351 0.101562 0.359375\nv -0.222143 0.101562 0.359375\nv -0.316822 0.109375 0.359375\nv -0.222512 0.109375 0.359375\nv -0.317185 0.117188 0.359375\nv -0.222743 0.117188 0.359375\nv -0.317553 0.125 0.359375\nv -0.222928 0.125 0.359375\nv -0.317818 0.132812 0.359375\nv -0.222874 0.132812 0.359375\nv -0.318229 0.140625 0.359375\nv -0.222729 0.140625 0.359375\nv -0.318639 0.148438 0.359375\nv -0.222645 0.148438 0.359375\nv -0.31904 0.15625 0.359375\nv -0.320312 0.15625 0.367048\nv -0.22293 0.15625 0.359375\nv -0.319394 0.164062 0.359375\nv -0.320312 0.164062 0.364339\nv -0.223539 0.164062 0.359375\nv -0.319909 0.171875 0.359375\nv -0.320312 0.175444 0.359375\nv -0.320312 0.171875 0.361488\nv -0.223623 0.171875 0.359375\nv -0.320803 0.179688 0.359375\nv -0.223608 0.179688 0.359375\nv -0.321695 0.1875 0.359375\nv -0.223449 0.1875 0.359375\nv -0.322563 0.195312 0.359375\nv -0.223116 0.195312 0.359375\nv -0.323322 0.203125 0.359375\nv -0.222724 0.203125 0.359375\nv -0.323995 0.210938 0.359375\nv -0.222658 0.210938 0.359375\nv -0.324574 0.21875 0.359375\nv -0.222523 0.21875 0.359375\nv -0.324911 0.226562 0.359375\nv -0.222421 0.226562 0.359375\nv -0.325029 0.234375 0.359375\nv -0.222706 0.234375 0.359375\nv -0.325023 0.242188 0.359375\nv -0.223319 0.242188 0.359375\nv -0.325136 0.25 0.359375\nv -0.224156 0.25 0.359375\nv -0.325457 0.257812 0.359375\nv -0.224939 0.257812 0.359375\nv -0.325916 0.265625 0.359375\nv -0.225699 0.265625 0.359375\nv -0.226562 0.273364 0.359375\nv -0.226562 0.265625 0.364709\nv -0.326313 0.273438 0.359375\nv -0.226571 0.273438 0.359375\nv -0.326733 0.28125 0.359375\nv -0.227362 0.28125 0.359375\nv -0.327553 0.289062 0.359375\nv -0.328125 0.296047 0.359375\nv -0.228027 0.289062 0.359375\nv -0.328187 0.296875 0.359375\nv -0.328125 0.296875 0.36072\nv -0.228614 0.296875 0.359375\nv -0.328673 0.304688 0.359375\nv -0.229068 0.304688 0.359375\nv -0.329222 0.3125 0.359375\nv -0.229565 0.3125 0.359375\nv -0.329789 0.320312 0.359375\nv -0.229868 0.320312 0.359375\nv -0.32999 0.328125 0.359375\nv -0.23059 0.328125 0.359375\nv -0.330112 0.335938 0.359375\nv -0.231477 0.335938 0.359375\nv -0.330217 0.34375 0.359375\nv -0.2323 0.34375 0.359375\nv -0.234375 0.34375 0.366512\nv -0.33064 0.351562 0.359375\nv -0.232989 0.351562 0.359375\nv -0.234375 0.351562 0.364171\nv -0.331109 0.359375 0.359375\nv -0.233467 0.359375 0.359375\nv -0.234375 0.359375 0.362537\nv -0.331591 0.367188 0.359375\nv -0.233679 0.367188 0.359375\nv -0.234375 0.367188 0.361817\nv -0.332027 0.375 0.359375\nv -0.233814 0.375 0.359375\nv -0.234375 0.375 0.361439\nv -0.332382 0.382812 0.359375\nv -0.233887 0.382812 0.359375\nv -0.234375 0.382812 0.361229\nv -0.33271 0.390625 0.359375\nv -0.233916 0.390625 0.359375\nv -0.234375 0.390625 0.361144\nv -0.333051 0.398438 0.359375\nv -0.233978 0.398438 0.359375\nv -0.234375 0.398438 0.360891\nv -0.333401 0.40625 0.359375\nv -0.234046 0.40625 0.359375\nv -0.234375 0.40625 0.360625\nv -0.333773 0.414062 0.359375\nv -0.234142 0.414062 0.359375\nv -0.234375 0.414062 0.36023\nv -0.334226 0.421875 0.359375\nv -0.234315 0.421875 0.359375\nv -0.234375 0.424767 0.359375\nv -0.234375 0.421875 0.359594\nv -0.334701 0.429688 0.359375\nv -0.234479 0.429688 0.359375\nv -0.335196 0.4375 0.359375\nv -0.234615 0.4375 0.359375\nv -0.335701 0.445312 0.359375\nv -0.335938 0.449482 0.359375\nv -0.234719 0.445312 0.359375\nv -0.336159 0.453125 0.359375\nv -0.335938 0.453125 0.365208\nv -0.234811 0.453125 0.359375\nv -0.33665 0.460938 0.359375\nv -0.234918 0.460938 0.359375\nv -0.337205 0.46875 0.359375\nv -0.234943 0.46875 0.359375\nv -0.337754 0.476562 0.359375\nv -0.234969 0.476562 0.359375\nv -0.338296 0.484375 0.359375\nv -0.235017 0.484375 0.359375\nv -0.339095 0.492188 0.359375\nv -0.235278 0.492188 0.359375\nv -0.33982 0.5 0.359375\nv -0.235778 0.5 0.359375\nv -0.340549 0.507812 0.359375\nv -0.23634 0.507812 0.359375\nv -0.341337 0.515625 0.359375\nv -0.236925 0.515625 0.359375\nv -0.342221 0.523438 0.359375\nv -0.237492 0.523438 0.359375\nv -0.343147 0.53125 0.359375\nv -0.34375 0.536415 0.359375\nv -0.238138 0.53125 0.359375\nv -0.344046 0.539062 0.359375\nv -0.238788 0.539062 0.359375\nv -0.344918 0.546875 0.359375\nv -0.239431 0.546875 0.359375\nv -0.345772 0.554688 0.359375\nv -0.240066 0.554688 0.359375\nv -0.346452 0.5625 0.359375\nv -0.240657 0.5625 0.359375\nv -0.242188 0.5625 0.365476\nv -0.347051 0.570312 0.359375\nv -0.241217 0.570312 0.359375\nv -0.242188 0.570312 0.363434\nv -0.347629 0.578125 0.359375\nv -0.241744 0.578125 0.359375\nv -0.242188 0.584519 0.359375\nv -0.242188 0.578125 0.361298\nv -0.348159 0.585938 0.359375\nv -0.242294 0.585938 0.359375\nv -0.348627 0.59375 0.359375\nv -0.242853 0.59375 0.359375\nv -0.349185 0.601562 0.359375\nv -0.243483 0.601562 0.359375\nv -0.349744 0.609375 0.359375\nv -0.244133 0.609375 0.359375\nv -0.350484 0.617188 0.359375\nv -0.244966 0.617188 0.359375\nv -0.351072 0.625 0.359375\nv -0.351562 0.625 0.36709\nv -0.245999 0.625 0.359375\nv -0.351298 0.632812 0.359375\nv -0.351562 0.640607 0.359375\nv -0.246973 0.632812 0.359375\nv -0.351563 0.640625 0.359375\nv -0.351562 0.640746 0.359375\nv -0.351562 0.640625 0.35939\nv -0.24795 0.640625 0.359375\nv -0.351522 0.648438 0.359375\nv -0.249025 0.648438 0.359375\nv -0.25 0.655332 0.359375\nv -0.25 0.648438 0.365228\nv -0.351416 0.65625 0.359375\nv -0.351562 0.660389 0.359375\nv -0.250114 0.65625 0.359375\nv -0.351691 0.664062 0.359375\nv -0.351562 0.664062 0.360235\nv -0.250939 0.664062 0.359375\nv -0.351886 0.671875 0.359375\nv -0.351562 0.671875 0.361449\nv -0.251589 0.671875 0.359375\nv -0.352254 0.679688 0.359375\nv -0.351562 0.679688 0.363591\nv -0.252353 0.679688 0.359375\nv -0.352324 0.6875 0.359375\nv -0.351562 0.6875 0.364279\nv -0.253099 0.6875 0.359375\nv -0.352419 0.695312 0.359375\nv -0.351562 0.695312 0.365205\nv -0.25401 0.695312 0.359375\nv -0.352547 0.703125 0.359375\nv -0.351562 0.703125 0.3664\nv -0.254898 0.703125 0.359375\nv -0.35254 0.710938 0.359375\nv -0.351562 0.710938 0.366739\nv -0.255893 0.710938 0.359375\nv -0.352592 0.71875 0.359375\nv -0.257122 0.71875 0.359375\nv -0.257812 0.723146 0.359375\nv -0.257812 0.71875 0.362293\nv -0.352739 0.726562 0.359375\nv -0.258261 0.726562 0.359375\nv -0.352485 0.734375 0.359375\nv -0.259129 0.734375 0.359375\nv -0.351843 0.742188 0.359375\nv -0.351562 0.745701 0.359375\nv -0.351562 0.742188 0.364836\nv -0.259483 0.742188 0.359375\nv -0.351199 0.75 0.359375\nv -0.26049 0.75 0.359375\nv -0.350725 0.757812 0.359375\nv -0.261986 0.757812 0.359375\nv -0.265625 0.757812 0.366842\nv -0.350262 0.765625 0.359375\nv -0.264029 0.765625 0.359375\nv -0.265625 0.769249 0.359375\nv -0.265625 0.765625 0.362936\nv -0.350988 0.773438 0.359375\nv -0.351562 0.777648 0.359375\nv -0.26731 0.773438 0.359375\nv -0.352062 0.78125 0.359375\nv -0.270807 0.78125 0.359375\nv -0.273438 0.787273 0.359375\nv -0.35329 0.789062 0.359375\nv -0.274159 0.789062 0.359375\nv -0.354785 0.796875 0.359375\nv -0.276724 0.796875 0.359375\nv -0.356288 0.804688 0.359375\nv -0.279201 0.804688 0.359375\nv -0.28125 0.809277 0.359375\nv -0.357066 0.8125 0.359375\nv -0.282927 0.8125 0.359375\nv -0.355729 0.820312 0.359375\nv -0.286641 0.820312 0.359375\nv -0.289062 0.827058 0.359375\nv -0.35385 0.828125 0.359375\nv -0.351562 0.83442 0.359375\nv -0.289466 0.828125 0.359375\nv -0.289062 0.828125 0.364803\nv -0.350964 0.835938 0.359375\nv -0.291418 0.835938 0.359375\nv -0.347113 0.84375 0.359375\nv -0.34375 0.848754 0.359375\nv -0.34375 0.84375 0.365754\nv -0.293156 0.84375 0.359375\nv -0.340057 0.851562 0.359375\nv -0.335938 0.853847 0.359375\nv -0.335938 0.851562 0.365799\nv -0.328125 0.857764 0.359375\nv -0.295679 0.851562 0.359375\nv -0.296875 0.854017 0.359375\nv -0.324996 0.859375 0.359375\nv -0.320312 0.861877 0.359375\nv -0.320312 0.859375 0.366241\nv -0.3125 0.864589 0.359375\nv -0.300968 0.859375 0.359375\nv -0.304688 0.863043 0.359375\nv -0.3125 -0.734573 0.367188\nv -0.304688 -0.734467 0.367188\nv 0.421875 -0.734847 0.367188\nv 0.429688 -0.73658 0.367188\nv 0.4375 -0.737507 0.367188\nv 0.445312 -0.737878 0.367188\nv 0.453125 -0.737988 0.367188\nv 0.460938 -0.738081 0.367188\nv 0.46875 -0.737683 0.367188\nv 0.476562 -0.736033 0.367188\nv -0.335938 -0.726703 0.367188\nv -0.328125 -0.731124 0.367188\nv -0.315642 -0.734375 0.367188\nv -0.320312 -0.734032 0.367188\nv -0.3125 -0.734375 0.36763\nv -0.303863 -0.734375 0.367188\nv -0.304688 -0.734375 0.367389\nv -0.296875 -0.733516 0.367188\nv -0.289062 -0.732713 0.367188\nv -0.28125 -0.731926 0.367188\nv -0.273438 -0.730372 0.367188\nv -0.265625 -0.727181 0.367188\nv 0.40625 -0.7267 0.367188\nv 0.420777 -0.734375 0.367188\nv 0.414062 -0.730921 0.367188\nv 0.46875 -0.734375 0.374943\nv 0.481818 -0.734375 0.367188\nv 0.476562 -0.734375 0.373235\nv 0.484375 -0.733522 0.367188\nv 0.492188 -0.730428 0.367188\nv -0.336129 -0.726562 0.367188\nv -0.335938 -0.726562 0.368154\nv -0.273438 -0.726562 0.372108\nv -0.2643 -0.726562 0.367188\nv -0.265625 -0.726562 0.367948\nv -0.257812 -0.72235 0.367188\nv 0.40604 -0.726562 0.367188\nv 0.498633 -0.726562 0.367188\nv 0.5 -0.725495 0.367188\nv -0.340574 -0.71875 0.367188\nv -0.265625 -0.71875 0.374124\nv -0.2527 -0.71875 0.367188\nv -0.257812 -0.71875 0.370607\nv -0.25 -0.716792 0.367188\nv 0.399742 -0.71875 0.367188\nv 0.398438 -0.717195 0.367188\nv 0.505482 -0.71875 0.367188\nv -0.341752 -0.710938 0.367188\nv -0.243747 -0.710938 0.367188\nv -0.25 -0.710938 0.372952\nv -0.242188 -0.709302 0.367188\nv 0.393883 -0.710938 0.367188\nv 0.390625 -0.704505 0.367188\nv 0.506975 -0.710938 0.367188\nv -0.341828 -0.703125 0.367188\nv -0.237285 -0.703125 0.367188\nv -0.242188 -0.703125 0.373533\nv -0.234375 -0.696607 0.367188\nv 0.390078 -0.703125 0.367188\nv 0.390625 -0.703125 0.368579\nv 0.507377 -0.703125 0.367188\nv -0.341614 -0.695312 0.367188\nv -0.233822 -0.695312 0.367188\nv -0.234375 -0.695312 0.368484\nv 0.38851 -0.695312 0.367188\nv 0.390625 -0.695312 0.373202\nv 0.507709 -0.695312 0.367188\nv -0.340901 -0.6875 0.367188\nv -0.23185 -0.6875 0.367188\nv -0.234375 -0.6875 0.372789\nv 0.387515 -0.6875 0.367188\nv 0.507152 -0.6875 0.367188\nv -0.340185 -0.679688 0.367188\nv -0.23001 -0.679688 0.367188\nv 0.386656 -0.679688 0.367188\nv 0.50671 -0.679688 0.367188\nv -0.339371 -0.671875 0.367188\nv -0.228083 -0.671875 0.367188\nv -0.226562 -0.666863 0.367188\nv 0.385845 -0.671875 0.367188\nv 0.506462 -0.671875 0.367188\nv -0.338565 -0.664062 0.367188\nv -0.225621 -0.664062 0.367188\nv -0.226562 -0.664062 0.368659\nv 0.384868 -0.664062 0.367188\nv 0.506409 -0.664062 0.367188\nv -0.337574 -0.65625 0.367188\nv -0.223333 -0.65625 0.367188\nv -0.226562 -0.65625 0.371269\nv 0.384303 -0.65625 0.367188\nv 0.506353 -0.65625 0.367188\nv -0.336573 -0.648438 0.367188\nv -0.335938 -0.642376 0.367188\nv -0.335938 -0.648438 0.371031\nv -0.221329 -0.648438 0.367188\nv -0.226562 -0.648438 0.373323\nv 0.383853 -0.648438 0.367188\nv 0.506461 -0.648438 0.367188\nv -0.33572 -0.640625 0.367188\nv -0.22048 -0.640625 0.367188\nv -0.226562 -0.640625 0.374371\nv 0.383122 -0.640625 0.367188\nv 0.382812 -0.638285 0.367188\nv 0.506846 -0.640625 0.367188\nv -0.334752 -0.632812 0.367188\nv -0.219861 -0.632812 0.367188\nv -0.226562 -0.632812 0.374662\nv 0.382017 -0.632812 0.367188\nv 0.382812 -0.632812 0.369257\nv 0.507019 -0.632812 0.367188\nv -0.333898 -0.625 0.367188\nv -0.219485 -0.625 0.367188\nv 0.380872 -0.625 0.367188\nv 0.382812 -0.625 0.371332\nv 0.507206 -0.625 0.367188\nv -0.333004 -0.617188 0.367188\nv -0.219193 -0.617188 0.367188\nv 0.379915 -0.617188 0.367188\nv 0.382812 -0.617188 0.372567\nv 0.50702 -0.617188 0.367188\nv -0.332425 -0.609375 0.367188\nv -0.218858 -0.609375 0.367188\nv -0.21875 -0.606095 0.367188\nv 0.379066 -0.609375 0.367188\nv 0.382812 -0.609375 0.373439\nv 0.506759 -0.609375 0.367188\nv -0.332288 -0.601562 0.367188\nv -0.2186 -0.601562 0.367188\nv -0.21875 -0.601562 0.367354\nv 0.378197 -0.601562 0.367188\nv 0.382812 -0.601562 0.374187\nv 0.506381 -0.601562 0.367188\nv -0.332181 -0.59375 0.367188\nv -0.218662 -0.59375 0.367188\nv -0.21875 -0.59375 0.367287\nv 0.377617 -0.59375 0.367188\nv 0.382812 -0.59375 0.3744\nv 0.505941 -0.59375 0.367188\nv -0.332193 -0.585938 0.367188\nv -0.226562 -0.585938 0.374997\nv -0.218691 -0.585938 0.367188\nv -0.21875 -0.585938 0.367253\nv 0.377136 -0.585938 0.367188\nv 0.382812 -0.585938 0.374653\nv 0.505554 -0.585938 0.367188\nv -0.332236 -0.578125 0.367188\nv -0.226562 -0.578125 0.374606\nv -0.218667 -0.578125 0.367188\nv -0.21875 -0.578125 0.367278\nv 0.376669 -0.578125 0.367188\nv 0.382812 -0.578125 0.374994\nv 0.505417 -0.578125 0.367188\nv -0.332138 -0.570312 0.367188\nv -0.226562 -0.570312 0.374262\nv -0.218582 -0.570312 0.367188\nv -0.21875 -0.570312 0.367357\nv 0.376356 -0.570312 0.367188\nv 0.375 -0.563605 0.367188\nv 0.505242 -0.570312 0.367188\nv -0.332073 -0.5625 0.367188\nv -0.226562 -0.5625 0.373976\nv -0.218241 -0.5625 0.367188\nv -0.21875 -0.5625 0.367537\nv -0.210938 -0.55531 0.367188\nv 0.359375 -0.555346 0.367188\nv 0.374665 -0.5625 0.367188\nv 0.367188 -0.556872 0.367188\nv 0.375 -0.5625 0.367457\nv 0.505075 -0.5625 0.367188\nv -0.332037 -0.554688 0.367188\nv -0.226562 -0.554688 0.374133\nv -0.21875 -0.554688 0.369546\nv -0.208862 -0.554688 0.367188\nv -0.210938 -0.554688 0.367522\nv -0.203125 -0.553462 0.367188\nv -0.195312 -0.552897 0.367188\nv -0.1875 -0.552806 0.367188\nv -0.179688 -0.552646 0.367188\nv -0.171875 -0.551364 0.367188\nv -0.164062 -0.549996 0.367188\nv -0.15625 -0.549202 0.367188\nv -0.148438 -0.54838 0.367188\nv -0.0546875 -0.547295 0.367188\nv -0.046875 -0.548028 0.367188\nv -0.0390625 -0.548783 0.367188\nv -0.03125 -0.54958 0.367188\nv -0.0234375 -0.550519 0.367188\nv -0.015625 -0.551051 0.367188\nv -0.0078125 -0.552064 0.367188\nv 0 -0.552412 0.367188\nv 0.0078125 -0.552185 0.367188\nv 0.015625 -0.551505 0.367188\nv 0.0234375 -0.550575 0.367188\nv 0.03125 -0.549804 0.367188\nv 0.0390625 -0.548874 0.367188\nv 0.046875 -0.547922 0.367188\nv 0.0546875 -0.547496 0.367188\nv 0.0625 -0.547376 0.367188\nv 0.0703125 -0.54718 0.367188\nv 0.078125 -0.546902 0.367188\nv 0.15625 -0.547079 0.367188\nv 0.164062 -0.547397 0.367188\nv 0.171875 -0.547665 0.367188\nv 0.179688 -0.547957 0.367188\nv 0.1875 -0.548446 0.367188\nv 0.195312 -0.548923 0.367188\nv 0.203125 -0.549152 0.367188\nv 0.210938 -0.549198 0.367188\nv 0.21875 -0.54938 0.367188\nv 0.226562 -0.549609 0.367188\nv 0.234375 -0.549825 0.367188\nv 0.242188 -0.549842 0.367188\nv 0.25 -0.549845 0.367188\nv 0.257812 -0.549872 0.367188\nv 0.265625 -0.549936 0.367188\nv 0.273438 -0.549851 0.367188\nv 0.28125 -0.549696 0.367188\nv 0.289062 -0.549421 0.367188\nv 0.296875 -0.548917 0.367188\nv 0.304688 -0.548275 0.367188\nv 0.3125 -0.547972 0.367188\nv 0.320312 -0.548313 0.367188\nv 0.328125 -0.54924 0.367188\nv 0.335938 -0.550656 0.367188\nv 0.34375 -0.552427 0.367188\nv 0.354032 -0.554688 0.367188\nv 0.351562 -0.554385 0.367188\nv 0.359375 -0.554688 0.368095\nv 0.367188 -0.554688 0.369381\nv 0.375 -0.554688 0.370977\nv 0.504787 -0.554688 0.367188\nv -0.331989 -0.546875 0.367188\nv -0.226562 -0.546875 0.374942\nv -0.21875 -0.546875 0.373214\nv -0.210938 -0.546875 0.372186\nv -0.203125 -0.546875 0.371502\nv -0.195312 -0.546875 0.371931\nv -0.1875 -0.546875 0.372325\nv -0.179688 -0.546875 0.372995\nv -0.171875 -0.546875 0.373172\nv -0.164062 -0.546875 0.372421\nv -0.15625 -0.546875 0.370936\nv -0.143619 -0.546875 0.367188\nv -0.148438 -0.546875 0.369599\nv -0.140625 -0.545955 0.367188\nv -0.132812 -0.542706 0.367188\nv -0.125 -0.540075 0.367188\nv -0.117188 -0.541003 0.367188\nv -0.109375 -0.541858 0.367188\nv -0.101562 -0.542755 0.367188\nv -0.09375 -0.543521 0.367188\nv -0.0859375 -0.544271 0.367188\nv -0.078125 -0.544987 0.367188\nv -0.0703125 -0.545735 0.367188\nv -0.0595229 -0.546875 0.367188\nv -0.0625 -0.546546 0.367188\nv -0.0546875 -0.546875 0.368197\nv -0.046875 -0.546875 0.369845\nv -0.0390625 -0.546875 0.371351\nv -0.03125 -0.546875 0.372507\nv -0.0234375 -0.546875 0.373363\nv -0.015625 -0.546875 0.37376\nv 0.015625 -0.546875 0.374762\nv 0.0234375 -0.546875 0.373721\nv 0.03125 -0.546875 0.372621\nv 0.0390625 -0.546875 0.371184\nv 0.046875 -0.546875 0.369475\nv 0.0546875 -0.546875 0.368514\nv 0.0625 -0.546875 0.368215\nv 0.0703125 -0.546875 0.367794\nv 0.0789359 -0.546875 0.367188\nv 0.078125 -0.546875 0.367239\nv 0.0859375 -0.546597 0.367188\nv 0.09375 -0.546667 0.367188\nv 0.101562 -0.546399 0.367188\nv 0.109375 -0.545945 0.367188\nv 0.117188 -0.545647 0.367188\nv 0.125 -0.545593 0.367188\nv 0.132812 -0.545685 0.367188\nv 0.140625 -0.545957 0.367188\nv 0.153019 -0.546875 0.367188\nv 0.148438 -0.546522 0.367188\nv 0.15625 -0.546875 0.367526\nv 0.164062 -0.546875 0.368035\nv 0.171875 -0.546875 0.368416\nv 0.179688 -0.546875 0.368813\nv 0.1875 -0.546875 0.36964\nv 0.195312 -0.546875 0.370474\nv 0.203125 -0.546875 0.370845\nv 0.210938 -0.546875 0.371074\nv 0.21875 -0.546875 0.371462\nv 0.226562 -0.546875 0.371855\nv 0.234375 -0.546875 0.372229\nv 0.242188 -0.546875 0.372394\nv 0.25 -0.546875 0.372529\nv 0.257812 -0.546875 0.372609\nv 0.265625 -0.546875 0.372819\nv 0.273438 -0.546875 0.373029\nv 0.28125 -0.546875 0.373034\nv 0.289062 -0.546875 0.372729\nv 0.296875 -0.546875 0.372152\nv 0.304688 -0.546875 0.370713\nv 0.3125 -0.546875 0.369866\nv 0.320312 -0.546875 0.370519\nv 0.328125 -0.546875 0.373356\nv 0.335938 -0.546875 0.37478\nv 0.50443 -0.546875 0.367188\nv -0.332157 -0.539062 0.367188\nv -0.132812 -0.539062 0.373763\nv -0.125 -0.539062 0.369103\nv -0.117188 -0.539062 0.370634\nv -0.109375 -0.539062 0.372173\nv -0.101562 -0.539062 0.373607\nv -0.09375 -0.539062 0.374876\nv 0.504197 -0.539062 0.367188\nv -0.332318 -0.53125 0.367188\nv 0.504039 -0.53125 0.367188\nv -0.332494 -0.523438 0.367188\nv 0.504155 -0.523438 0.367188\nv -0.332554 -0.515625 0.367188\nv 0.504372 -0.515625 0.367188\nv -0.332523 -0.507812 0.367188\nv 0.504357 -0.507812 0.367188\nv -0.332372 -0.5 0.367188\nv 0.504404 -0.5 0.367188\nv -0.332178 -0.492188 0.367188\nv -0.203125 -0.492188 0.374867\nv -0.132812 -0.48715 0.367188\nv -0.132812 -0.492188 0.373642\nv -0.125 -0.488167 0.367188\nv -0.125 -0.492188 0.372225\nv -0.117188 -0.486682 0.367188\nv -0.117188 -0.492188 0.374047\nv -0.109375 -0.484997 0.367188\nv 0.28125 -0.484727 0.367188\nv 0.28125 -0.492188 0.37428\nv 0.289062 -0.486232 0.367188\nv 0.289062 -0.492188 0.373161\nv 0.296875 -0.487455 0.367188\nv 0.296875 -0.492188 0.372166\nv 0.304688 -0.488853 0.367188\nv 0.304688 -0.492188 0.370895\nv 0.3125 -0.490115 0.367188\nv 0.3125 -0.492188 0.369579\nv 0.320312 -0.489098 0.367188\nv 0.320312 -0.492188 0.371312\nv 0.328125 -0.485953 0.367188\nv 0.328125 -0.492188 0.374858\nv 0.504679 -0.492188 0.367188\nv -0.332092 -0.484375 0.367188\nv -0.21875 -0.484375 0.373667\nv -0.210938 -0.477748 0.367188\nv -0.210938 -0.484375 0.371249\nv -0.203125 -0.480451 0.367188\nv -0.203125 -0.484375 0.37004\nv -0.195312 -0.481533 0.367188\nv -0.195312 -0.484375 0.369567\nv -0.1875 -0.480921 0.367188\nv -0.1875 -0.484375 0.370506\nv -0.179688 -0.480338 0.367188\nv -0.179688 -0.484375 0.371067\nv -0.171875 -0.480401 0.367188\nv -0.171875 -0.484375 0.371189\nv -0.164062 -0.480431 0.367188\nv -0.164062 -0.484375 0.371383\nv -0.15625 -0.480376 0.367188\nv -0.15625 -0.484375 0.371676\nv -0.148438 -0.481345 0.367188\nv -0.148438 -0.484375 0.371294\nv -0.139322 -0.484375 0.367188\nv -0.140625 -0.48386 0.367188\nv -0.140625 -0.484375 0.367884\nv -0.106204 -0.484375 0.367188\nv -0.101562 -0.483497 0.367188\nv -0.101562 -0.484375 0.368489\nv -0.09375 -0.481908 0.367188\nv -0.09375 -0.484375 0.370762\nv -0.0859375 -0.480334 0.367188\nv -0.0859375 -0.484375 0.373065\nv -0.078125 -0.478834 0.367188\nv -0.0703125 -0.477341 0.367188\nv 0.0390625 -0.484375 0.374838\nv 0.046875 -0.484375 0.374353\nv 0.0546875 -0.484375 0.374407\nv 0.0625 -0.484375 0.374304\nv 0.0703125 -0.476619 0.367188\nv 0.0703125 -0.484375 0.374192\nv 0.078125 -0.476795 0.367188\nv 0.078125 -0.484375 0.373822\nv 0.0859375 -0.477687 0.367188\nv 0.0859375 -0.484375 0.37326\nv 0.09375 -0.478289 0.367188\nv 0.09375 -0.484375 0.372995\nv 0.101562 -0.478722 0.367188\nv 0.101562 -0.484375 0.372902\nv 0.109375 -0.479039 0.367188\nv 0.109375 -0.484375 0.372314\nv 0.117188 -0.479632 0.367188\nv 0.117188 -0.484375 0.371741\nv 0.125 -0.480299 0.367188\nv 0.125 -0.484375 0.371301\nv 0.132812 -0.480632 0.367188\nv 0.132812 -0.484375 0.370969\nv 0.140625 -0.480723 0.367188\nv 0.140625 -0.484375 0.370761\nv 0.148438 -0.480941 0.367188\nv 0.148438 -0.484375 0.370438\nv 0.15625 -0.481303 0.367188\nv 0.15625 -0.484375 0.370065\nv 0.164062 -0.481535 0.367188\nv 0.164062 -0.484375 0.369903\nv 0.171875 -0.481718 0.367188\nv 0.171875 -0.484375 0.369734\nv 0.179688 -0.481602 0.367188\nv 0.179688 -0.484375 0.369859\nv 0.1875 -0.481329 0.367188\nv 0.1875 -0.484375 0.370179\nv 0.195312 -0.480833 0.367188\nv 0.195312 -0.484375 0.370461\nv 0.203125 -0.480467 0.367188\nv 0.203125 -0.484375 0.37078\nv 0.210938 -0.480401 0.367188\nv 0.210938 -0.484375 0.371183\nv 0.21875 -0.480566 0.367188\nv 0.21875 -0.484375 0.371297\nv 0.226562 -0.480568 0.367188\nv 0.226562 -0.484375 0.371606\nv 0.234375 -0.480687 0.367188\nv 0.234375 -0.484375 0.371751\nv 0.242188 -0.48083 0.367188\nv 0.242188 -0.484375 0.371553\nv 0.25 -0.481282 0.367188\nv 0.25 -0.484375 0.370903\nv 0.257812 -0.481855 0.367188\nv 0.257812 -0.484375 0.370111\nv 0.265625 -0.482573 0.367188\nv 0.265625 -0.484375 0.369204\nv 0.279381 -0.484375 0.367188\nv 0.273438 -0.483293 0.367188\nv 0.273438 -0.484375 0.368353\nv 0.334855 -0.484375 0.367188\nv 0.335938 -0.484137 0.367188\nv 0.335938 -0.484375 0.367515\nv 0.34375 -0.483362 0.367188\nv 0.34375 -0.484375 0.368508\nv 0.351562 -0.482717 0.367188\nv 0.351562 -0.484375 0.369406\nv 0.359375 -0.482283 0.367188\nv 0.359375 -0.484375 0.370032\nv 0.367188 -0.481588 0.367188\nv 0.367188 -0.484375 0.370109\nv 0.375 -0.484375 0.373796\nv 0.505071 -0.484375 0.367188\nv -0.332058 -0.476562 0.367188\nv -0.212115 -0.476562 0.367188\nv -0.21875 -0.476562 0.372398\nv -0.066225 -0.476562 0.367188\nv -0.0625 -0.476025 0.367188\nv -0.0625 -0.476562 0.368278\nv -0.0546875 -0.474893 0.367188\nv -0.0546875 -0.476562 0.370494\nv -0.046875 -0.473731 0.367188\nv -0.046875 -0.476562 0.372319\nv -0.0390625 -0.472548 0.367188\nv -0.0390625 -0.476562 0.373252\nv -0.03125 -0.471629 0.367188\nv -0.03125 -0.476562 0.373775\nv -0.0234375 -0.471062 0.367188\nv -0.0234375 -0.476562 0.374131\nv -0.015625 -0.47094 0.367188\nv -0.015625 -0.476562 0.374183\nv -0.0078125 -0.470843 0.367188\nv -0.0078125 -0.476562 0.374033\nv 0 -0.470969 0.367188\nv 0 -0.476562 0.373705\nv 0.0078125 -0.471642 0.367188\nv 0.0078125 -0.476562 0.372737\nv 0.015625 -0.472756 0.367188\nv 0.015625 -0.476562 0.371432\nv 0.0234375 -0.473899 0.367188\nv 0.0234375 -0.476562 0.370144\nv 0.03125 -0.474855 0.367188\nv 0.03125 -0.476562 0.369142\nv 0.0390625 -0.475418 0.367188\nv 0.0390625 -0.476562 0.3685\nv 0.046875 -0.475942 0.367188\nv 0.046875 -0.476562 0.367906\nv 0.0546875 -0.476277 0.367188\nv 0.0546875 -0.476562 0.367536\nv 0.0685825 -0.476562 0.367188\nv 0.0625 -0.476408 0.367188\nv 0.0625 -0.476562 0.367383\nv 0.373755 -0.476562 0.367188\nv 0.375 -0.475271 0.367188\nv 0.375 -0.476562 0.368296\nv 0.505389 -0.476562 0.367188\nv -0.331998 -0.46875 0.367188\nv -0.214691 -0.46875 0.367188\nv -0.21875 -0.46875 0.371268\nv 0.37977 -0.46875 0.367188\nv 0.382812 -0.461301 0.367188\nv 0.382812 -0.46875 0.371629\nv 0.505737 -0.46875 0.367188\nv -0.331982 -0.460938 0.367188\nv -0.215805 -0.460938 0.367188\nv -0.21875 -0.460938 0.370275\nv 0.382926 -0.460938 0.367188\nv 0.506174 -0.460938 0.367188\nv -0.331938 -0.453125 0.367188\nv -0.216701 -0.453125 0.367188\nv -0.21875 -0.453125 0.369416\nv 0.384484 -0.453125 0.367188\nv 0.506409 -0.453125 0.367188\nv -0.331872 -0.445312 0.367188\nv -0.217505 -0.445312 0.367188\nv -0.21875 -0.445312 0.368576\nv 0.385689 -0.445312 0.367188\nv 0.506866 -0.445312 0.367188\nv -0.33174 -0.4375 0.367188\nv -0.218066 -0.4375 0.367188\nv -0.21875 -0.4375 0.368009\nv 0.386756 -0.4375 0.367188\nv 0.390625 -0.4375 0.373922\nv 0.507168 -0.4375 0.367188\nv -0.331473 -0.429688 0.367188\nv -0.218115 -0.429688 0.367188\nv -0.21875 -0.429688 0.367949\nv 0.387424 -0.429688 0.367188\nv 0.390625 -0.429688 0.372589\nv 0.507433 -0.429688 0.367188\nv -0.3312 -0.421875 0.367188\nv -0.218332 -0.421875 0.367188\nv -0.21875 -0.418293 0.367188\nv -0.21875 -0.421875 0.367731\nv 0.388141 -0.421875 0.367188\nv 0.390625 -0.421875 0.371716\nv 0.507785 -0.421875 0.367188\nv 0.507812 -0.421203 0.367188\nv -0.330919 -0.414062 0.367188\nv -0.219264 -0.414062 0.367188\nv 0.38855 -0.414062 0.367188\nv 0.390625 -0.414062 0.371114\nv 0.50808 -0.414062 0.367188\nv -0.330501 -0.40625 0.367188\nv -0.220167 -0.40625 0.367188\nv -0.226562 -0.40625 0.374561\nv 0.389256 -0.40625 0.367188\nv 0.390625 -0.40625 0.370145\nv 0.508064 -0.40625 0.367188\nv -0.33004 -0.398438 0.367188\nv -0.220105 -0.398438 0.367188\nv -0.226562 -0.398438 0.374648\nv 0.38873 -0.398438 0.367188\nv 0.390625 -0.398438 0.370966\nv 0.508067 -0.398438 0.367188\nv -0.329505 -0.390625 0.367188\nv -0.219676 -0.390625 0.367188\nv 0.388172 -0.390625 0.367188\nv 0.390625 -0.390625 0.371454\nv 0.508147 -0.390625 0.367188\nv -0.328942 -0.382812 0.367188\nv -0.328125 -0.382812 0.37298\nv -0.219333 -0.382812 0.367188\nv 0.388127 -0.382812 0.367188\nv 0.390625 -0.382812 0.371654\nv 0.508015 -0.382812 0.367188\nv 0.507812 -0.375779 0.367188\nv -0.328238 -0.375 0.367188\nv -0.328125 -0.373747 0.367188\nv -0.328125 -0.375 0.368118\nv -0.219162 -0.375 0.367188\nv 0.388282 -0.375 0.367188\nv 0.390625 -0.375 0.371678\nv 0.50779 -0.375 0.367188\nv 0.507812 -0.375 0.367389\nv -0.327492 -0.367188 0.367188\nv -0.219223 -0.367188 0.367188\nv 0.38848 -0.367188 0.367188\nv 0.390625 -0.367188 0.371692\nv 0.507451 -0.367188 0.367188\nv 0.507812 -0.367188 0.369714\nv -0.326734 -0.359375 0.367188\nv -0.21909 -0.359375 0.367188\nv 0.389189 -0.359375 0.367188\nv 0.390625 -0.359375 0.370966\nv 0.50723 -0.359375 0.367188\nv 0.507812 -0.359375 0.370588\nv -0.32607 -0.351562 0.367188\nv -0.219103 -0.351562 0.367188\nv -0.226562 -0.351562 0.374841\nv 0.389881 -0.351562 0.367188\nv 0.390625 -0.351562 0.36977\nv 0.506964 -0.351562 0.367188\nv 0.507812 -0.351562 0.371336\nv -0.325596 -0.34375 0.367188\nv -0.219881 -0.34375 0.367188\nv -0.226562 -0.34375 0.374535\nv 0.390494 -0.34375 0.367188\nv 0.390625 -0.339302 0.367188\nv 0.390625 -0.34375 0.367651\nv 0.506874 -0.34375 0.367188\nv 0.507812 -0.34375 0.371699\nv -0.32517 -0.335938 0.367188\nv -0.220427 -0.335938 0.367188\nv -0.226562 -0.335938 0.37452\nv 0.39073 -0.335938 0.367188\nv 0.506787 -0.335938 0.367188\nv 0.507812 -0.335938 0.371876\nv -0.324919 -0.328125 0.367188\nv -0.220811 -0.328125 0.367188\nv -0.226562 -0.328125 0.374529\nv 0.391013 -0.328125 0.367188\nv 0.506747 -0.328125 0.367188\nv 0.507812 -0.328125 0.371933\nv -0.324669 -0.320312 0.367188\nv -0.221194 -0.320312 0.367188\nv -0.226562 -0.320312 0.374865\nv 0.391318 -0.320312 0.367188\nv 0.506754 -0.320312 0.367188\nv 0.507812 -0.320312 0.372397\nv -0.324409 -0.3125 0.367188\nv -0.221626 -0.3125 0.367188\nv 0.391568 -0.3125 0.367188\nv 0.506904 -0.3125 0.367188\nv 0.507812 -0.3125 0.374327\nv -0.324063 -0.304688 0.367188\nv -0.221973 -0.304688 0.367188\nv 0.391637 -0.304688 0.367188\nv 0.506904 -0.304688 0.367188\nv -0.323614 -0.296875 0.367188\nv -0.222305 -0.296875 0.367188\nv 0.391677 -0.296875 0.367188\nv 0.506708 -0.296875 0.367188\nv -0.323108 -0.289062 0.367188\nv -0.222467 -0.289062 0.367188\nv 0.391796 -0.289062 0.367188\nv 0.506363 -0.289062 0.367188\nv -0.322576 -0.28125 0.367188\nv -0.22255 -0.28125 0.367188\nv 0.391843 -0.28125 0.367188\nv 0.506037 -0.28125 0.367188\nv -0.32202 -0.273438 0.367188\nv -0.222634 -0.273438 0.367188\nv 0.39205 -0.273438 0.367188\nv 0.505345 -0.273438 0.367188\nv -0.321474 -0.265625 0.367188\nv -0.222612 -0.265625 0.367188\nv 0.392499 -0.265625 0.367188\nv 0.504645 -0.265625 0.367188\nv -0.321005 -0.257812 0.367188\nv -0.222417 -0.257812 0.367188\nv 0.392664 -0.257812 0.367188\nv 0.503989 -0.257812 0.367188\nv -0.320566 -0.25 0.367188\nv -0.320312 -0.245908 0.367188\nv -0.221976 -0.25 0.367188\nv 0.392676 -0.25 0.367188\nv 0.503397 -0.25 0.367188\nv -0.320072 -0.242188 0.367188\nv -0.320312 -0.242188 0.374646\nv -0.221677 -0.242188 0.367188\nv 0.392588 -0.242188 0.367188\nv 0.502968 -0.242188 0.367188\nv -0.319578 -0.234375 0.367188\nv -0.221444 -0.234375 0.367188\nv 0.392761 -0.234375 0.367188\nv 0.502756 -0.234375 0.367188\nv -0.319588 -0.226562 0.367188\nv -0.221282 -0.226562 0.367188\nv 0.393035 -0.226562 0.367188\nv 0.502623 -0.226562 0.367188\nv -0.319707 -0.21875 0.367188\nv -0.320312 -0.21875 0.373222\nv -0.220982 -0.21875 0.367188\nv 0.393302 -0.21875 0.367188\nv 0.502553 -0.21875 0.367188\nv -0.320034 -0.210938 0.367188\nv -0.320312 -0.203855 0.367188\nv -0.320312 -0.210938 0.370219\nv -0.220644 -0.210938 0.367188\nv 0.393428 -0.210938 0.367188\nv 0.502558 -0.210938 0.367188\nv -0.320341 -0.203125 0.367188\nv -0.220454 -0.203125 0.367188\nv 0.393695 -0.203125 0.367188\nv 0.502721 -0.203125 0.367188\nv -0.320363 -0.195312 0.367188\nv -0.320312 -0.193945 0.367188\nv -0.220513 -0.195312 0.367188\nv 0.394195 -0.195312 0.367188\nv 0.503117 -0.195312 0.367188\nv -0.320075 -0.1875 0.367188\nv -0.22064 -0.1875 0.367188\nv 0.394579 -0.1875 0.367188\nv 0.503488 -0.1875 0.367188\nv -0.319799 -0.179688 0.367188\nv -0.220287 -0.179688 0.367188\nv 0.394697 -0.179688 0.367188\nv 0.503753 -0.179688 0.367188\nv -0.319113 -0.171875 0.367188\nv -0.219251 -0.171875 0.367188\nv -0.21875 -0.166991 0.367188\nv 0.394696 -0.171875 0.367188\nv 0.503643 -0.171875 0.367188\nv -0.318707 -0.164062 0.367188\nv -0.218493 -0.164062 0.367188\nv -0.21875 -0.164062 0.367727\nv 0.394661 -0.164062 0.367188\nv 0.503389 -0.164062 0.367188\nv -0.318149 -0.15625 0.367188\nv -0.218106 -0.15625 0.367188\nv -0.21875 -0.15625 0.368434\nv 0.394491 -0.15625 0.367188\nv 0.502876 -0.15625 0.367188\nv -0.317204 -0.148438 0.367188\nv -0.217444 -0.148438 0.367188\nv -0.21875 -0.148438 0.369657\nv 0.394051 -0.148438 0.367188\nv 0.502182 -0.148438 0.367188\nv -0.31611 -0.140625 0.367188\nv -0.217133 -0.140625 0.367188\nv -0.21875 -0.140625 0.370229\nv 0.393925 -0.140625 0.367188\nv 0.501558 -0.140625 0.367188\nv -0.315483 -0.132812 0.367188\nv -0.216895 -0.132812 0.367188\nv -0.21875 -0.132812 0.370527\nv 0.393417 -0.132812 0.367188\nv 0.50068 -0.132812 0.367188\nv 0.5 -0.125352 0.367188\nv -0.315 -0.125 0.367188\nv -0.216601 -0.125 0.367188\nv -0.21875 -0.125 0.370875\nv 0.392451 -0.125 0.367188\nv 0.499967 -0.125 0.367188\nv 0.5 -0.125 0.367512\nv -0.314698 -0.117188 0.367188\nv -0.215997 -0.117188 0.367188\nv -0.21875 -0.117188 0.371738\nv 0.391609 -0.117188 0.367188\nv 0.499425 -0.117188 0.367188\nv 0.5 -0.117188 0.373979\nv -0.314468 -0.109375 0.367188\nv -0.215358 -0.109375 0.367188\nv -0.21875 -0.109375 0.37249\nv 0.391007 -0.109375 0.367188\nv 0.390625 -0.106775 0.367188\nv 0.499561 -0.109375 0.367188\nv 0.5 -0.109375 0.373715\nv -0.314167 -0.101562 0.367188\nv -0.214315 -0.101562 0.367188\nv -0.21875 -0.101562 0.373346\nv 0.38986 -0.101562 0.367188\nv 0.390625 -0.101562 0.368508\nv 0.499884 -0.101562 0.367188\nv 0.5 -0.0998123 0.367188\nv 0.5 -0.101562 0.370467\nv -0.314057 -0.09375 0.367188\nv -0.212538 -0.09375 0.367188\nv -0.21875 -0.09375 0.374184\nv -0.210938 -0.0892258 0.367188\nv 0.387075 -0.09375 0.367188\nv 0.390625 -0.09375 0.372946\nv 0.500383 -0.09375 0.367188\nv -0.314319 -0.0859375 0.367188\nv -0.209709 -0.0859375 0.367188\nv -0.210938 -0.0859375 0.368756\nv 0.385095 -0.0859375 0.367188\nv 0.382812 -0.0795407 0.367188\nv 0.501376 -0.0859375 0.367188\nv -0.315405 -0.078125 0.367188\nv -0.206238 -0.078125 0.367188\nv -0.210938 -0.078125 0.372185\nv -0.203125 -0.0736804 0.367188\nv 0.382231 -0.078125 0.367188\nv 0.382812 -0.078125 0.36793\nv 0.502905 -0.078125 0.367188\nv -0.316368 -0.0703125 0.367188\nv -0.198079 -0.0703125 0.367188\nv -0.203125 -0.0703125 0.369402\nv -0.195312 -0.0686627 0.367188\nv -0.1875 -0.0659282 0.367188\nv -0.179688 -0.064733 0.367188\nv -0.171875 -0.0643262 0.367188\nv -0.164062 -0.0640674 0.367188\nv -0.15625 -0.0633717 0.367188\nv 0.0859375 -0.0628235 0.367188\nv 0.09375 -0.0632621 0.367188\nv 0.101562 -0.0634831 0.367188\nv 0.109375 -0.0635409 0.367188\nv 0.117188 -0.0636228 0.367188\nv 0.125 -0.0637432 0.367188\nv 0.132812 -0.0639157 0.367188\nv 0.140625 -0.0640292 0.367188\nv 0.148438 -0.0641199 0.367188\nv 0.15625 -0.0641476 0.367188\nv 0.164062 -0.0642233 0.367188\nv 0.171875 -0.0640835 0.367188\nv 0.179688 -0.063866 0.367188\nv 0.1875 -0.0635681 0.367188\nv 0.195312 -0.0632724 0.367188\nv 0.203125 -0.0630799 0.367188\nv 0.210938 -0.0628565 0.367188\nv 0.21875 -0.0626109 0.367188\nv 0.367188 -0.0633129 0.367188\nv 0.375937 -0.0703125 0.367188\nv 0.375 -0.0692306 0.367188\nv 0.382812 -0.0703125 0.37411\nv 0.503787 -0.0703125 0.367188\nv -0.316461 -0.0625 0.367188\nv -0.203125 -0.0625 0.372473\nv -0.195312 -0.0625 0.370667\nv -0.1875 -0.0625 0.369412\nv -0.179688 -0.0625 0.36893\nv -0.171875 -0.0625 0.36862\nv -0.164062 -0.0625 0.368521\nv -0.150425 -0.0625 0.367188\nv -0.15625 -0.0625 0.36799\nv -0.148438 -0.0619976 0.367188\nv -0.140625 -0.0611744 0.367188\nv -0.132812 -0.0617153 0.367188\nv -0.125 -0.0619884 0.367188\nv -0.117188 -0.0621224 0.367188\nv -0.109375 -0.0616608 0.367188\nv -0.101562 -0.0605144 0.367188\nv -0.09375 -0.059517 0.367188\nv -0.0859375 -0.0587943 0.367188\nv -0.078125 -0.0583776 0.367188\nv -0.0703125 -0.0579401 0.367188\nv -0.0625 -0.0575419 0.367188\nv -0.0546875 -0.0570861 0.367188\nv -0.046875 -0.057079 0.367188\nv -0.0390625 -0.0574778 0.367188\nv -0.03125 -0.0582432 0.367188\nv -0.0234375 -0.0589606 0.367188\nv -0.015625 -0.0595229 0.367188\nv -0.0078125 -0.0598814 0.367188\nv 0 -0.0606616 0.367188\nv 0.0078125 -0.0612669 0.367188\nv 0.015625 -0.0619236 0.367188\nv 0.0234375 -0.0618039 0.367188\nv 0.03125 -0.0616505 0.367188\nv 0.0390625 -0.0614837 0.367188\nv 0.046875 -0.0614878 0.367188\nv 0.0546875 -0.0614667 0.367188\nv 0.0625 -0.0614062 0.367188\nv 0.0703125 -0.0617547 0.367188\nv 0.0790741 -0.0625 0.367188\nv 0.078125 -0.0624185 0.367188\nv 0.0859375 -0.0625 0.367538\nv 0.09375 -0.0625 0.368043\nv 0.101562 -0.0625 0.368328\nv 0.109375 -0.0625 0.368425\nv 0.117188 -0.0625 0.368532\nv 0.125 -0.0625 0.368685\nv 0.132812 -0.0625 0.36891\nv 0.140625 -0.0625 0.369087\nv 0.148438 -0.0625 0.369231\nv 0.15625 -0.0625 0.369275\nv 0.164062 -0.0625 0.369358\nv 0.171875 -0.0625 0.369154\nv 0.179688 -0.0625 0.368864\nv 0.1875 -0.0625 0.368495\nv 0.195312 -0.0625 0.368144\nv 0.203125 -0.0625 0.367911\nv 0.210938 -0.0625 0.367636\nv 0.221867 -0.0625 0.367188\nv 0.21875 -0.0625 0.367326\nv 0.226562 -0.0621799 0.367188\nv 0.234375 -0.061733 0.367188\nv 0.242188 -0.0612465 0.367188\nv 0.25 -0.0610587 0.367188\nv 0.257812 -0.0610138 0.367188\nv 0.265625 -0.0609048 0.367188\nv 0.273438 -0.060744 0.367188\nv 0.28125 -0.0606509 0.367188\nv 0.289062 -0.0606671 0.367188\nv 0.296875 -0.0607473 0.367188\nv 0.304688 -0.0604437 0.367188\nv 0.3125 -0.0602714 0.367188\nv 0.320312 -0.0598758 0.367188\nv 0.328125 -0.0593191 0.367188\nv 0.335938 -0.0591851 0.367188\nv 0.34375 -0.0593501 0.367188\nv 0.351562 -0.0598917 0.367188\nv 0.363902 -0.0625 0.367188\nv 0.359375 -0.0611157 0.367188\nv 0.367188 -0.0625 0.367774\nv 0.375 -0.0625 0.37171\nv 0.504392 -0.0625 0.367188\nv -0.316209 -0.0546875 0.367188\nv -0.203125 -0.0546875 0.374581\nv -0.195312 -0.0546875 0.373242\nv -0.1875 -0.0546875 0.372827\nv -0.179688 -0.0546875 0.372581\nv -0.171875 -0.0546875 0.372454\nv -0.164062 -0.0546875 0.372626\nv -0.15625 -0.0546875 0.37241\nv -0.148438 -0.0546875 0.371731\nv -0.140625 -0.0546875 0.371149\nv -0.132812 -0.0546875 0.371255\nv -0.125 -0.0546875 0.371352\nv -0.117188 -0.0546875 0.371068\nv -0.109375 -0.0546875 0.370832\nv -0.101562 -0.0546875 0.370458\nv -0.09375 -0.0546875 0.370038\nv -0.0859375 -0.0546875 0.369637\nv -0.078125 -0.0546875 0.36939\nv -0.0703125 -0.0546875 0.36915\nv -0.0625 -0.0546875 0.368924\nv -0.0546875 -0.0546875 0.368675\nv -0.046875 -0.0546875 0.36868\nv -0.0390625 -0.0546875 0.368941\nv -0.03125 -0.0546875 0.369349\nv -0.0234375 -0.0546875 0.369715\nv -0.015625 -0.0546875 0.37003\nv -0.0078125 -0.0546875 0.37018\nv 0 -0.0546875 0.370562\nv 0.0078125 -0.0546875 0.370937\nv 0.015625 -0.0546875 0.371364\nv 0.0234375 -0.0546875 0.371226\nv 0.03125 -0.0546875 0.371105\nv 0.0390625 -0.0546875 0.370958\nv 0.046875 -0.0546875 0.370947\nv 0.0546875 -0.0546875 0.370913\nv 0.0625 -0.0546875 0.370862\nv 0.0703125 -0.0546875 0.37089\nv 0.078125 -0.0546875 0.371167\nv 0.0859375 -0.0546875 0.371522\nv 0.09375 -0.0546875 0.371951\nv 0.101562 -0.0546875 0.372476\nv 0.109375 -0.0546875 0.372639\nv 0.117188 -0.0546875 0.372719\nv 0.125 -0.0546875 0.372793\nv 0.132812 -0.0546875 0.37296\nv 0.140625 -0.0546875 0.373114\nv 0.148438 -0.0546875 0.373224\nv 0.15625 -0.0546875 0.373296\nv 0.164062 -0.0546875 0.373343\nv 0.171875 -0.0546875 0.373366\nv 0.179688 -0.0546875 0.373058\nv 0.1875 -0.0546875 0.372717\nv 0.195312 -0.0546875 0.372477\nv 0.203125 -0.0546875 0.372301\nv 0.210938 -0.0546875 0.37214\nv 0.21875 -0.0546875 0.371951\nv 0.226562 -0.0546875 0.371693\nv 0.234375 -0.0546875 0.37147\nv 0.242188 -0.0546875 0.371285\nv 0.25 -0.0546875 0.37122\nv 0.257812 -0.0546875 0.371211\nv 0.265625 -0.0546875 0.371159\nv 0.273438 -0.0546875 0.371057\nv 0.28125 -0.0546875 0.371039\nv 0.289062 -0.0546875 0.371141\nv 0.296875 -0.0546875 0.37128\nv 0.304688 -0.0546875 0.371115\nv 0.3125 -0.0546875 0.370942\nv 0.320312 -0.0546875 0.370799\nv 0.328125 -0.0546875 0.370461\nv 0.335938 -0.0546875 0.370245\nv 0.34375 -0.0546875 0.370053\nv 0.351562 -0.0546875 0.370245\nv 0.359375 -0.0546875 0.370843\nv 0.367188 -0.0546875 0.371474\nv 0.375 -0.0546875 0.374344\nv 0.504774 -0.0546875 0.367188\nv -0.315783 -0.046875 0.367188\nv -0.101562 -0.046875 0.374635\nv -0.09375 -0.046875 0.374195\nv -0.0859375 -0.046875 0.373771\nv -0.078125 -0.046875 0.373477\nv -0.0703125 -0.046875 0.373214\nv -0.0625 -0.046875 0.372968\nv -0.0546875 -0.046875 0.372817\nv -0.046875 -0.046875 0.37276\nv -0.0390625 -0.046875 0.373014\nv -0.03125 -0.046875 0.373307\nv -0.0234375 -0.046875 0.373594\nv -0.015625 -0.046875 0.373763\nv -0.0078125 -0.046875 0.373769\nv 0 -0.046875 0.374035\nv 0.0078125 -0.046875 0.374411\nv 0.015625 -0.046875 0.37487\nv 0.0234375 -0.046875 0.374686\nv 0.03125 -0.046875 0.374581\nv 0.0390625 -0.046875 0.374425\nv 0.046875 -0.046875 0.374342\nv 0.0546875 -0.046875 0.374293\nv 0.0625 -0.046875 0.374266\nv 0.0703125 -0.046875 0.374155\nv 0.078125 -0.046875 0.374308\nv 0.0859375 -0.046875 0.374656\nv 0.25 -0.046875 0.374989\nv 0.257812 -0.046875 0.374986\nv 0.265625 -0.046875 0.374985\nv 0.273438 -0.046875 0.37488\nv 0.28125 -0.046875 0.374837\nv 0.289062 -0.046875 0.374968\nv 0.34375 -0.046875 0.374746\nv 0.351562 -0.046875 0.37468\nv 0.359375 -0.046875 0.374936\nv 0.504975 -0.046875 0.367188\nv -0.315534 -0.0390625 0.367188\nv 0.504404 -0.0390625 0.367188\nv -0.315532 -0.03125 0.367188\nv 0.503174 -0.03125 0.367188\nv -0.315457 -0.0234375 0.367188\nv 0.502029 -0.0234375 0.367188\nv 0.5 -0.0234375 0.374768\nv -0.315566 -0.015625 0.367188\nv 0.50092 -0.015625 0.367188\nv 0.5 -0.015625 0.370769\nv -0.315103 -0.0078125 0.367188\nv 0.500664 -0.0078125 0.367188\nv 0.5 -0.0078125 0.369618\nv -0.31475 0 0.367188\nv 0.501215 0 0.367188\nv 0.5 0 0.370681\nv -0.314727 0.0078125 0.367188\nv 0.501247 0.0078125 0.367188\nv 0.5 0.0078125 0.370605\nv -0.31516 0.015625 0.367188\nv 0.500934 0.015625 0.367188\nv 0.5 0.015625 0.369821\nv -0.315817 0.0234375 0.367188\nv 0.203125 0.0234375 0.374867\nv 0.210938 0.0234375 0.374743\nv 0.21875 0.0234375 0.374564\nv 0.226562 0.0234375 0.374363\nv 0.234375 0.0234375 0.374156\nv 0.242188 0.0234375 0.37397\nv 0.25 0.0234375 0.373954\nv 0.257812 0.0234375 0.373915\nv 0.265625 0.0234375 0.373825\nv 0.273438 0.0234375 0.373871\nv 0.28125 0.0234375 0.373985\nv 0.289062 0.0234375 0.374039\nv 0.296875 0.0234375 0.37413\nv 0.304688 0.0234375 0.374276\nv 0.3125 0.0234375 0.374544\nv 0.320312 0.0234375 0.37476\nv 0.328125 0.0234375 0.374883\nv 0.335938 0.0234375 0.374656\nv 0.34375 0.0234375 0.374477\nv 0.351562 0.0234375 0.374652\nv 0.359375 0.0234375 0.37499\nv 0.500502 0.0234375 0.367188\nv 0.5 0.0255127 0.367188\nv 0.5 0.0234375 0.368767\nv -0.316418 0.03125 0.367188\nv 0.148438 0.03125 0.374862\nv 0.15625 0.03125 0.374608\nv 0.164062 0.03125 0.374341\nv 0.171875 0.03125 0.373996\nv 0.179688 0.03125 0.373738\nv 0.1875 0.03125 0.373588\nv 0.195312 0.03125 0.373497\nv 0.203125 0.03125 0.373478\nv 0.210938 0.03125 0.373462\nv 0.21875 0.03125 0.373415\nv 0.226562 0.03125 0.373193\nv 0.234375 0.03125 0.372902\nv 0.242188 0.03125 0.372749\nv 0.25 0.03125 0.372803\nv 0.257812 0.03125 0.372828\nv 0.265625 0.03125 0.372827\nv 0.273438 0.03125 0.372993\nv 0.28125 0.03125 0.373222\nv 0.289062 0.03125 0.373447\nv 0.296875 0.03125 0.373639\nv 0.304688 0.03125 0.373831\nv 0.3125 0.03125 0.374045\nv 0.320312 0.03125 0.374138\nv 0.328125 0.03125 0.374157\nv 0.335938 0.03125 0.373971\nv 0.34375 0.03125 0.373816\nv 0.351562 0.03125 0.374032\nv 0.359375 0.03125 0.374375\nv 0.367188 0.03125 0.374788\nv 0.498442 0.03125 0.367188\nv -0.316349 0.0390625 0.367188\nv -0.125 0.0390625 0.374846\nv -0.117188 0.0390625 0.374802\nv -0.109375 0.0390625 0.374705\nv -0.101562 0.0390625 0.374491\nv -0.09375 0.0390625 0.374469\nv -0.0859375 0.0390625 0.374537\nv -0.078125 0.0390625 0.374535\nv -0.0703125 0.0390625 0.37465\nv -0.0625 0.0390625 0.374587\nv -0.0546875 0.0390625 0.374424\nv -0.046875 0.0390625 0.37428\nv -0.0390625 0.0390625 0.37414\nv -0.03125 0.0390625 0.374039\nv -0.0234375 0.0390625 0.373957\nv -0.015625 0.0390625 0.373889\nv -0.0078125 0.0390625 0.373945\nv 0 0.0390625 0.374426\nv 0.03125 0.0390625 0.37476\nv 0.0390625 0.0390625 0.374431\nv 0.046875 0.0390625 0.374178\nv 0.0546875 0.0390625 0.373932\nv 0.0625 0.0390625 0.373741\nv 0.0703125 0.0390625 0.373572\nv 0.078125 0.0390625 0.37338\nv 0.0859375 0.0390625 0.373266\nv 0.09375 0.0390625 0.373346\nv 0.101562 0.0390625 0.373419\nv 0.109375 0.0390625 0.373336\nv 0.117188 0.0390625 0.373204\nv 0.125 0.0390625 0.373184\nv 0.132812 0.0390625 0.373036\nv 0.140625 0.0390625 0.372852\nv 0.148438 0.0390625 0.37261\nv 0.15625 0.0390625 0.372409\nv 0.164062 0.0390625 0.372216\nv 0.171875 0.0390625 0.371982\nv 0.179688 0.0390625 0.371796\nv 0.1875 0.0390625 0.37174\nv 0.195312 0.0390625 0.371717\nv 0.203125 0.0390625 0.371706\nv 0.210938 0.0390625 0.371671\nv 0.21875 0.0390625 0.371582\nv 0.226562 0.0390625 0.371449\nv 0.234375 0.0390625 0.37126\nv 0.242188 0.0390625 0.371284\nv 0.25 0.0390625 0.371492\nv 0.257812 0.0390625 0.371652\nv 0.265625 0.0390625 0.371781\nv 0.273438 0.0390625 0.372103\nv 0.28125 0.0390625 0.37247\nv 0.289062 0.0390625 0.372871\nv 0.296875 0.0390625 0.373086\nv 0.304688 0.0390625 0.373211\nv 0.3125 0.0390625 0.373299\nv 0.320312 0.0390625 0.373329\nv 0.328125 0.0390625 0.373331\nv 0.335938 0.0390625 0.373255\nv 0.34375 0.0390625 0.373221\nv 0.351562 0.0390625 0.37345\nv 0.359375 0.0390625 0.373677\nv 0.367188 0.0390625 0.373924\nv 0.375 0.0390625 0.374375\nv 0.49589 0.0390625 0.367188\nv 0.492188 0.0438781 0.367188\nv 0.492188 0.0390625 0.37203\nv -0.316359 0.046875 0.367188\nv -0.15625 0.046875 0.374897\nv -0.148438 0.046875 0.374431\nv -0.140625 0.046875 0.373882\nv -0.132812 0.046875 0.373368\nv -0.125 0.046875 0.373001\nv -0.117188 0.046875 0.372771\nv -0.109375 0.046875 0.372433\nv -0.101562 0.046875 0.372207\nv -0.09375 0.046875 0.372145\nv -0.0859375 0.046875 0.372156\nv -0.078125 0.046875 0.372232\nv -0.0703125 0.046875 0.372365\nv -0.0625 0.046875 0.372378\nv -0.0546875 0.046875 0.372342\nv -0.046875 0.046875 0.372245\nv -0.0390625 0.046875 0.37209\nv -0.03125 0.046875 0.37202\nv -0.0234375 0.046875 0.371943\nv -0.015625 0.046875 0.371834\nv -0.0078125 0.046875 0.371887\nv 0 0.046875 0.372339\nv 0.0078125 0.046875 0.372932\nv 0.015625 0.046875 0.372982\nv 0.0234375 0.046875 0.372834\nv 0.03125 0.046875 0.372297\nv 0.0390625 0.046875 0.372157\nv 0.046875 0.046875 0.37196\nv 0.0546875 0.046875 0.371762\nv 0.0625 0.046875 0.371658\nv 0.0703125 0.046875 0.371534\nv 0.078125 0.046875 0.371383\nv 0.0859375 0.046875 0.371321\nv 0.09375 0.046875 0.371545\nv 0.101562 0.046875 0.371748\nv 0.109375 0.046875 0.371772\nv 0.117188 0.046875 0.371762\nv 0.125 0.046875 0.371713\nv 0.132812 0.046875 0.371552\nv 0.140625 0.046875 0.371436\nv 0.148438 0.046875 0.371268\nv 0.15625 0.046875 0.371142\nv 0.164062 0.046875 0.37105\nv 0.171875 0.046875 0.370865\nv 0.179688 0.046875 0.370616\nv 0.1875 0.046875 0.370502\nv 0.195312 0.046875 0.3705\nv 0.203125 0.046875 0.370553\nv 0.210938 0.046875 0.370507\nv 0.21875 0.046875 0.370408\nv 0.226562 0.046875 0.370193\nv 0.234375 0.046875 0.370013\nv 0.242188 0.046875 0.370042\nv 0.25 0.046875 0.370156\nv 0.257812 0.046875 0.37016\nv 0.265625 0.046875 0.370215\nv 0.273438 0.046875 0.370476\nv 0.28125 0.046875 0.370747\nv 0.289062 0.046875 0.371056\nv 0.296875 0.046875 0.371303\nv 0.304688 0.046875 0.371426\nv 0.3125 0.046875 0.371402\nv 0.320312 0.046875 0.371349\nv 0.328125 0.046875 0.371321\nv 0.335938 0.046875 0.371157\nv 0.34375 0.046875 0.371168\nv 0.351562 0.046875 0.371433\nv 0.359375 0.046875 0.371778\nv 0.367188 0.046875 0.372057\nv 0.375 0.046875 0.372299\nv 0.382812 0.046875 0.372803\nv 0.390625 0.046875 0.373307\nv 0.398438 0.046875 0.373969\nv 0.476562 0.046875 0.374434\nv 0.489408 0.046875 0.367188\nv 0.484375 0.05299 0.367188\nv 0.484375 0.046875 0.371399\nv -0.31607 0.0546875 0.367188\nv -0.179688 0.0546875 0.374345\nv -0.171875 0.0546875 0.373669\nv -0.164062 0.0546875 0.373232\nv -0.15625 0.0546875 0.372753\nv -0.148438 0.0546875 0.37239\nv -0.140625 0.0546875 0.371968\nv -0.132812 0.0546875 0.371514\nv -0.125 0.0546875 0.371104\nv -0.117188 0.0546875 0.370797\nv -0.109375 0.0546875 0.370479\nv -0.101562 0.0618943 0.367188\nv -0.101562 0.0546875 0.370232\nv -0.09375 0.0611667 0.367188\nv -0.09375 0.0546875 0.369956\nv -0.0859375 0.0606256 0.367188\nv -0.0859375 0.0546875 0.369822\nv -0.078125 0.0599875 0.367188\nv -0.078125 0.0546875 0.369747\nv -0.0703125 0.0593754 0.367188\nv -0.0703125 0.0546875 0.369611\nv -0.0625 0.0589506 0.367188\nv -0.0625 0.0546875 0.369669\nv -0.0546875 0.0587441 0.367188\nv -0.0546875 0.0546875 0.369741\nv -0.046875 0.0584042 0.367188\nv -0.046875 0.0546875 0.369608\nv -0.0390625 0.0580208 0.367188\nv -0.0390625 0.0546875 0.369413\nv -0.03125 0.0579499 0.367188\nv -0.03125 0.0546875 0.369323\nv -0.0234375 0.0579587 0.367188\nv -0.0234375 0.0546875 0.36925\nv -0.015625 0.0577253 0.367188\nv -0.015625 0.0546875 0.36916\nv -0.0078125 0.0575697 0.367188\nv -0.0078125 0.0546875 0.369118\nv 0 0.0578801 0.367188\nv 0 0.0546875 0.369342\nv 0.0078125 0.0583368 0.367188\nv 0.0078125 0.0546875 0.369634\nv 0.015625 0.058355 0.367188\nv 0.015625 0.0546875 0.369592\nv 0.0234375 0.0581083 0.367188\nv 0.0234375 0.0546875 0.369391\nv 0.03125 0.0575514 0.367188\nv 0.03125 0.0546875 0.369048\nv 0.0390625 0.0568213 0.367188\nv 0.0390625 0.0546875 0.368515\nv 0.046875 0.0565913 0.367188\nv 0.046875 0.0546875 0.368377\nv 0.0546875 0.0566439 0.367188\nv 0.0546875 0.0546875 0.368375\nv 0.0625 0.056904 0.367188\nv 0.0625 0.0546875 0.368545\nv 0.0703125 0.0568322 0.367188\nv 0.0703125 0.0546875 0.368507\nv 0.078125 0.0566718 0.367188\nv 0.078125 0.0546875 0.368403\nv 0.0859375 0.0565292 0.367188\nv 0.0859375 0.0546875 0.368303\nv 0.09375 0.0567234 0.367188\nv 0.09375 0.0546875 0.368407\nv 0.101562 0.0570912 0.367188\nv 0.101562 0.0546875 0.368626\nv 0.109375 0.0573148 0.367188\nv 0.109375 0.0546875 0.368783\nv 0.117188 0.0574864 0.367188\nv 0.117188 0.0546875 0.368995\nv 0.125 0.0575746 0.367188\nv 0.125 0.0546875 0.369067\nv 0.132812 0.0576209 0.367188\nv 0.132812 0.0546875 0.369022\nv 0.140625 0.0575078 0.367188\nv 0.140625 0.0546875 0.368906\nv 0.148438 0.0572441 0.367188\nv 0.148438 0.0546875 0.368639\nv 0.15625 0.0571039 0.367188\nv 0.15625 0.0546875 0.368518\nv 0.164062 0.0569326 0.367188\nv 0.164062 0.0546875 0.36844\nv 0.171875 0.0568055 0.367188\nv 0.171875 0.0546875 0.368344\nv 0.179688 0.0565126 0.367188\nv 0.179688 0.0546875 0.368134\nv 0.1875 0.0561506 0.367188\nv 0.1875 0.0546875 0.367902\nv 0.195312 0.0562053 0.367188\nv 0.195312 0.0546875 0.36791\nv 0.203125 0.0562178 0.367188\nv 0.203125 0.0546875 0.367934\nv 0.210938 0.0562292 0.367188\nv 0.210938 0.0546875 0.367953\nv 0.21875 0.0561419 0.367188\nv 0.21875 0.0546875 0.367908\nv 0.226562 0.0559021 0.367188\nv 0.226562 0.0546875 0.367789\nv 0.234375 0.0557014 0.367188\nv 0.234375 0.0546875 0.367679\nv 0.242188 0.0558307 0.367188\nv 0.242188 0.0546875 0.367733\nv 0.25 0.0557476 0.367188\nv 0.25 0.0546875 0.36767\nv 0.257812 0.0561241 0.367188\nv 0.257812 0.0546875 0.367839\nv 0.265625 0.0564899 0.367188\nv 0.265625 0.0546875 0.367966\nv 0.273438 0.0569957 0.367188\nv 0.273438 0.0546875 0.368211\nv 0.28125 0.0574816 0.367188\nv 0.28125 0.0546875 0.368488\nv 0.289062 0.0578779 0.367188\nv 0.289062 0.0546875 0.368658\nv 0.296875 0.0581364 0.367188\nv 0.296875 0.0546875 0.368839\nv 0.304688 0.0584505 0.367188\nv 0.304688 0.0546875 0.36901\nv 0.3125 0.0583707 0.367188\nv 0.3125 0.0546875 0.368988\nv 0.320312 0.0582613 0.367188\nv 0.320312 0.0546875 0.368967\nv 0.328125 0.058277 0.367188\nv 0.328125 0.0546875 0.369043\nv 0.335938 0.0579227 0.367188\nv 0.335938 0.0546875 0.368872\nv 0.34375 0.0575455 0.367188\nv 0.34375 0.0546875 0.368767\nv 0.351562 0.0572019 0.367188\nv 0.351562 0.0546875 0.368722\nv 0.359375 0.057121 0.367188\nv 0.359375 0.0546875 0.368857\nv 0.367188 0.0574576 0.367188\nv 0.367188 0.0546875 0.369241\nv 0.375 0.057689 0.367188\nv 0.375 0.0546875 0.369566\nv 0.382812 0.0579601 0.367188\nv 0.382812 0.0546875 0.369944\nv 0.390625 0.0581847 0.367188\nv 0.390625 0.0546875 0.37022\nv 0.398438 0.0586499 0.367188\nv 0.398438 0.0546875 0.370844\nv 0.40625 0.0595476 0.367188\nv 0.40625 0.0546875 0.372246\nv 0.414062 0.0611223 0.367188\nv 0.414062 0.0546875 0.373396\nv 0.421875 0.0616839 0.367188\nv 0.421875 0.0546875 0.373359\nv 0.429688 0.0616794 0.367188\nv 0.429688 0.0546875 0.373061\nv 0.4375 0.0613548 0.367188\nv 0.4375 0.0546875 0.372843\nv 0.445312 0.0610833 0.367188\nv 0.445312 0.0546875 0.372518\nv 0.453125 0.0602884 0.367188\nv 0.453125 0.0546875 0.371938\nv 0.460938 0.0594492 0.367188\nv 0.460938 0.0546875 0.371532\nv 0.46875 0.0587236 0.367188\nv 0.46875 0.0546875 0.37031\nv 0.481941 0.0546875 0.367188\nv 0.476562 0.0577081 0.367188\nv 0.476562 0.0546875 0.369407\nv -0.31573 0.0625 0.367188\nv -0.203125 0.0625 0.373864\nv -0.195312 0.0683573 0.367188\nv -0.195312 0.0625 0.372389\nv -0.1875 0.0667329 0.367188\nv -0.1875 0.0625 0.37123\nv -0.179688 0.0662239 0.367188\nv -0.179688 0.0625 0.370697\nv -0.171875 0.0654069 0.367188\nv -0.171875 0.0625 0.370018\nv -0.164062 0.0644873 0.367188\nv -0.164062 0.0625 0.369327\nv -0.15625 0.0637348 0.367188\nv -0.15625 0.0625 0.368621\nv -0.148438 0.0635236 0.367188\nv -0.148438 0.0625 0.368361\nv -0.140625 0.0633624 0.367188\nv -0.140625 0.0625 0.368153\nv -0.132812 0.0632294 0.367188\nv -0.132812 0.0625 0.367986\nv -0.125 0.0631492 0.367188\nv -0.125 0.0625 0.367889\nv -0.117188 0.0629077 0.367188\nv -0.117188 0.0625 0.367608\nv -0.107771 0.0625 0.367188\nv -0.109375 0.062576 0.367188\nv -0.109375 0.0625 0.367261\nv -0.315836 0.0703125 0.367188\nv -0.21875 0.0703125 0.374572\nv -0.210938 0.0743899 0.367188\nv -0.210938 0.0703125 0.371655\nv -0.201501 0.0703125 0.367188\nv -0.203125 0.0707633 0.367188\nv -0.203125 0.0703125 0.367805\nv -0.316398 0.078125 0.367188\nv -0.215328 0.078125 0.367188\nv -0.21875 0.0833589 0.367188\nv -0.21875 0.078125 0.370312\nv -0.316924 0.0859375 0.367188\nv -0.220036 0.0859375 0.367188\nv -0.226562 0.0859375 0.374092\nv -0.317845 0.09375 0.367188\nv -0.223389 0.09375 0.367188\nv -0.226562 0.09375 0.371267\nv -0.31851 0.101562 0.367188\nv -0.224729 0.101562 0.367188\nv -0.226562 0.101562 0.37008\nv -0.318944 0.109375 0.367188\nv -0.224773 0.109375 0.367188\nv -0.226562 0.109375 0.370162\nv -0.319213 0.117188 0.367188\nv -0.320312 0.117188 0.374443\nv -0.224593 0.117188 0.367188\nv -0.226562 0.117188 0.370521\nv -0.319606 0.125 0.367188\nv -0.320312 0.125 0.37266\nv -0.224506 0.125 0.367188\nv -0.226562 0.125 0.371021\nv -0.319646 0.132812 0.367188\nv -0.320312 0.132812 0.373043\nv -0.224223 0.132812 0.367188\nv -0.226562 0.132812 0.372102\nv -0.319874 0.140625 0.367188\nv -0.224112 0.140625 0.367188\nv -0.226562 0.140625 0.372714\nv -0.319937 0.148438 0.367188\nv -0.320312 0.155788 0.367188\nv -0.223982 0.148438 0.367188\nv -0.226562 0.148438 0.37274\nv -0.320334 0.15625 0.367188\nv -0.320312 0.15625 0.369213\nv -0.224101 0.15625 0.367188\nv -0.226562 0.15625 0.372154\nv -0.320795 0.164062 0.367188\nv -0.224505 0.164062 0.367188\nv -0.226562 0.164062 0.37133\nv -0.321329 0.171875 0.367188\nv -0.224518 0.171875 0.367188\nv -0.226562 0.171875 0.371096\nv -0.321971 0.179688 0.367188\nv -0.224348 0.179688 0.367188\nv -0.226562 0.179688 0.371249\nv -0.322631 0.1875 0.367188\nv -0.223969 0.1875 0.367188\nv -0.226562 0.1875 0.371785\nv -0.32325 0.195312 0.367188\nv -0.22346 0.195312 0.367188\nv -0.226562 0.195312 0.372591\nv -0.32373 0.203125 0.367188\nv -0.223082 0.203125 0.367188\nv -0.226562 0.203125 0.373039\nv -0.32414 0.210938 0.367188\nv -0.223129 0.210938 0.367188\nv -0.226562 0.210938 0.372909\nv -0.324474 0.21875 0.367188\nv -0.223138 0.21875 0.367188\nv -0.226562 0.21875 0.372824\nv -0.324678 0.226562 0.367188\nv -0.223291 0.226562 0.367188\nv -0.226562 0.226562 0.372515\nv -0.324763 0.234375 0.367188\nv -0.223737 0.234375 0.367188\nv -0.226562 0.234375 0.37183\nv -0.324754 0.242188 0.367188\nv -0.224464 0.242188 0.367188\nv -0.226562 0.242188 0.370314\nv -0.324932 0.25 0.367188\nv -0.225397 0.25 0.367188\nv -0.226562 0.25 0.368922\nv -0.325253 0.257812 0.367188\nv -0.226162 0.257812 0.367188\nv -0.226562 0.261945 0.367188\nv -0.226562 0.257812 0.367779\nv -0.325734 0.265625 0.367188\nv -0.227028 0.265625 0.367188\nv -0.234375 0.265625 0.374867\nv -0.326144 0.273438 0.367188\nv -0.22818 0.273438 0.367188\nv -0.234375 0.273438 0.373596\nv -0.326579 0.28125 0.367188\nv -0.229281 0.28125 0.367188\nv -0.234375 0.28125 0.372493\nv -0.327228 0.289062 0.367188\nv -0.230314 0.289062 0.367188\nv -0.234375 0.289062 0.371611\nv -0.327792 0.296875 0.367188\nv -0.328125 0.30201 0.367188\nv -0.231029 0.296875 0.367188\nv -0.234375 0.296875 0.370979\nv -0.328277 0.304688 0.367188\nv -0.328125 0.304688 0.367806\nv -0.231625 0.304688 0.367188\nv -0.234375 0.304688 0.370467\nv -0.328771 0.3125 0.367188\nv -0.328125 0.3125 0.3699\nv -0.232167 0.3125 0.367188\nv -0.234375 0.3125 0.370072\nv -0.329232 0.320312 0.367188\nv -0.328125 0.320312 0.371797\nv -0.232509 0.320312 0.367188\nv -0.234375 0.320312 0.369755\nv -0.329372 0.328125 0.367188\nv -0.328125 0.328125 0.372628\nv -0.233127 0.328125 0.367188\nv -0.234375 0.328125 0.369049\nv -0.329504 0.335938 0.367188\nv -0.328125 0.335938 0.373339\nv -0.233872 0.335938 0.367188\nv -0.234375 0.341598 0.367188\nv -0.234375 0.335938 0.368023\nv -0.329714 0.34375 0.367188\nv -0.328125 0.34375 0.374451\nv -0.234563 0.34375 0.367188\nv -0.33016 0.351562 0.367188\nv -0.235174 0.351562 0.367188\nv -0.330702 0.359375 0.367188\nv -0.235582 0.359375 0.367188\nv -0.331216 0.367188 0.367188\nv -0.235799 0.367188 0.367188\nv -0.33162 0.375 0.367188\nv -0.235903 0.375 0.367188\nv -0.331971 0.382812 0.367188\nv -0.235954 0.382812 0.367188\nv -0.332357 0.390625 0.367188\nv -0.235991 0.390625 0.367188\nv -0.332769 0.398438 0.367188\nv -0.236098 0.398438 0.367188\nv -0.333143 0.40625 0.367188\nv -0.236213 0.40625 0.367188\nv -0.333514 0.414062 0.367188\nv -0.236429 0.414062 0.367188\nv -0.333964 0.421875 0.367188\nv -0.236643 0.421875 0.367188\nv -0.33442 0.429688 0.367188\nv -0.236842 0.429688 0.367188\nv -0.334888 0.4375 0.367188\nv -0.237023 0.4375 0.367188\nv -0.335401 0.445312 0.367188\nv -0.237195 0.445312 0.367188\nv -0.335864 0.453125 0.367188\nv -0.335938 0.45448 0.367188\nv -0.237385 0.453125 0.367188\nv -0.33629 0.460938 0.367188\nv -0.335938 0.460938 0.368333\nv -0.237579 0.460938 0.367188\nv -0.336835 0.46875 0.367188\nv -0.335938 0.46875 0.37008\nv -0.237721 0.46875 0.367188\nv -0.337434 0.476562 0.367188\nv -0.335938 0.476562 0.371987\nv -0.237843 0.476562 0.367188\nv -0.3381 0.484375 0.367188\nv -0.335938 0.484375 0.373936\nv -0.238 0.484375 0.367188\nv -0.242188 0.484375 0.374563\nv -0.339038 0.492188 0.367188\nv -0.238278 0.492188 0.367188\nv -0.242188 0.492188 0.374156\nv -0.339871 0.5 0.367188\nv -0.238642 0.5 0.367188\nv -0.242188 0.5 0.373621\nv -0.340722 0.507812 0.367188\nv -0.239127 0.507812 0.367188\nv -0.242188 0.507812 0.37304\nv -0.341597 0.515625 0.367188\nv -0.239749 0.515625 0.367188\nv -0.242188 0.515625 0.372223\nv -0.342503 0.523438 0.367188\nv -0.24036 0.523438 0.367188\nv -0.242188 0.523438 0.371167\nv -0.34342 0.53125 0.367188\nv -0.34375 0.534056 0.367188\nv -0.240991 0.53125 0.367188\nv -0.242188 0.53125 0.369805\nv -0.344267 0.539062 0.367188\nv -0.34375 0.539062 0.36933\nv -0.241512 0.539062 0.367188\nv -0.242188 0.539062 0.368682\nv -0.345072 0.546875 0.367188\nv -0.34375 0.546875 0.372621\nv -0.241807 0.546875 0.367188\nv -0.242188 0.546875 0.367977\nv -0.345866 0.554688 0.367188\nv -0.242137 0.554688 0.367188\nv -0.242188 0.555598 0.367188\nv -0.242188 0.554688 0.36729\nv -0.346537 0.5625 0.367188\nv -0.242707 0.5625 0.367188\nv -0.347239 0.570312 0.367188\nv -0.243257 0.570312 0.367188\nv -0.348007 0.578125 0.367188\nv -0.24377 0.578125 0.367188\nv -0.348764 0.585938 0.367188\nv -0.244306 0.585938 0.367188\nv -0.349468 0.59375 0.367188\nv -0.244806 0.59375 0.367188\nv -0.350163 0.601562 0.367188\nv -0.245301 0.601562 0.367188\nv -0.25 0.601562 0.37469\nv -0.35071 0.609375 0.367188\nv -0.245797 0.609375 0.367188\nv -0.25 0.609375 0.373959\nv -0.351345 0.617188 0.367188\nv -0.351562 0.624771 0.367188\nv -0.246496 0.617188 0.367188\nv -0.25 0.617188 0.373\nv -0.351568 0.625 0.367188\nv -0.351562 0.625892 0.367188\nv -0.351562 0.625 0.367275\nv -0.247327 0.625 0.367188\nv -0.25 0.625 0.371807\nv -0.351513 0.632812 0.367188\nv -0.248184 0.632812 0.367188\nv -0.25 0.632812 0.370578\nv -0.351254 0.640625 0.367188\nv -0.249176 0.640625 0.367188\nv -0.25 0.646479 0.367188\nv -0.25 0.640625 0.368911\nv -0.350856 0.648438 0.367188\nv -0.250318 0.648438 0.367188\nv -0.350659 0.65625 0.367188\nv -0.251487 0.65625 0.367188\nv -0.350514 0.664062 0.367188\nv -0.252631 0.664062 0.367188\nv -0.350657 0.671875 0.367188\nv -0.253538 0.671875 0.367188\nv -0.350956 0.679688 0.367188\nv -0.254373 0.679688 0.367188\nv -0.257812 0.679688 0.373974\nv -0.351103 0.6875 0.367188\nv -0.255188 0.6875 0.367188\nv -0.257812 0.6875 0.372634\nv -0.351268 0.695312 0.367188\nv -0.255879 0.695312 0.367188\nv -0.257812 0.695312 0.371442\nv -0.351448 0.703125 0.367188\nv -0.256564 0.703125 0.367188\nv -0.257812 0.703125 0.370062\nv -0.351499 0.710938 0.367188\nv -0.351562 0.718587 0.367188\nv -0.257504 0.710938 0.367188\nv -0.257812 0.712685 0.367188\nv -0.257812 0.710938 0.368015\nv -0.351564 0.71875 0.367188\nv -0.351562 0.71875 0.367193\nv -0.25875 0.71875 0.367188\nv -0.351661 0.726562 0.367188\nv -0.351562 0.726562 0.367519\nv -0.259547 0.726562 0.367188\nv -0.351656 0.734375 0.367188\nv -0.351562 0.737544 0.367188\nv -0.351562 0.734375 0.367494\nv -0.260645 0.734375 0.367188\nv -0.351424 0.742188 0.367188\nv -0.262298 0.742188 0.367188\nv -0.265625 0.742188 0.372233\nv -0.350955 0.75 0.367188\nv -0.264069 0.75 0.367188\nv -0.265625 0.757005 0.367188\nv -0.265625 0.75 0.369832\nv -0.350455 0.757812 0.367188\nv -0.265787 0.757812 0.367188\nv -0.350325 0.765625 0.367188\nv -0.267651 0.765625 0.367188\nv -0.350936 0.773438 0.367188\nv -0.351562 0.777402 0.367188\nv -0.270098 0.773438 0.367188\nv -0.352113 0.78125 0.367188\nv -0.351562 0.78125 0.369113\nv -0.27254 0.78125 0.367188\nv -0.273438 0.784082 0.367188\nv -0.273438 0.78125 0.370777\nv -0.353156 0.789062 0.367188\nv -0.351562 0.789062 0.371866\nv -0.275061 0.789062 0.367188\nv -0.354422 0.796875 0.367188\nv -0.351562 0.796875 0.373939\nv -0.277421 0.796875 0.367188\nv -0.355625 0.804688 0.367188\nv -0.351562 0.804688 0.374367\nv -0.279213 0.804688 0.367188\nv -0.28125 0.809764 0.367188\nv -0.356572 0.8125 0.367188\nv -0.282507 0.8125 0.367188\nv -0.355487 0.820312 0.367188\nv -0.351562 0.820312 0.373646\nv -0.285929 0.820312 0.367188\nv -0.353246 0.828125 0.367188\nv -0.351562 0.831913 0.367188\nv -0.351562 0.828125 0.370417\nv -0.34375 0.828125 0.374304\nv -0.288877 0.828125 0.367188\nv -0.289062 0.829076 0.367188\nv -0.289062 0.828125 0.367711\nv -0.349031 0.835938 0.367188\nv -0.34375 0.842373 0.367188\nv -0.34375 0.835938 0.371644\nv -0.290573 0.835938 0.367188\nv -0.342666 0.84375 0.367188\nv -0.335938 0.850872 0.367188\nv -0.335938 0.84375 0.372586\nv -0.2922 0.84375 0.367188\nv -0.335082 0.851562 0.367188\nv -0.328125 0.856013 0.367188\nv -0.328125 0.851562 0.37251\nv -0.320312 0.859013 0.367188\nv -0.295211 0.851562 0.367188\nv -0.296875 0.854926 0.367188\nv -0.296875 0.851562 0.370154\nv -0.318877 0.859375 0.367188\nv -0.3125 0.860942 0.367188\nv -0.3125 0.859375 0.370475\nv -0.301914 0.859375 0.367188\nv -0.304688 0.860991 0.367188\nv -0.304688 0.859375 0.371335\nv 0.421875 -0.734674 0.375\nv 0.429688 -0.736257 0.375\nv 0.4375 -0.737169 0.375\nv 0.445312 -0.737442 0.375\nv 0.453125 -0.736407 0.375\nv 0.460938 -0.735346 0.375\nv -0.328125 -0.729388 0.375\nv -0.320312 -0.730006 0.375\nv -0.3125 -0.729893 0.375\nv -0.304688 -0.729889 0.375\nv -0.296875 -0.729526 0.375\nv -0.289062 -0.728769 0.375\nv -0.28125 -0.726815 0.375\nv 0.40625 -0.727096 0.375\nv 0.421056 -0.734375 0.375\nv 0.414062 -0.731769 0.375\nv 0.421875 -0.734375 0.375834\nv 0.429688 -0.734375 0.378963\nv 0.4375 -0.734375 0.379272\nv 0.445312 -0.734375 0.378918\nv 0.453125 -0.734375 0.377585\nv 0.468502 -0.734375 0.375\nv 0.460938 -0.734375 0.376103\nv 0.46875 -0.734346 0.375\nv 0.476562 -0.733779 0.375\nv 0.484375 -0.731486 0.375\nv 0.492188 -0.728195 0.375\nv -0.33387 -0.726562 0.375\nv -0.335938 -0.723106 0.375\nv -0.328125 -0.726562 0.377813\nv -0.320312 -0.726562 0.378518\nv -0.3125 -0.726562 0.378356\nv -0.304688 -0.726562 0.378238\nv -0.296875 -0.726562 0.378033\nv -0.289062 -0.726562 0.377194\nv -0.28061 -0.726562 0.375\nv -0.28125 -0.726562 0.375244\nv -0.273438 -0.722795 0.375\nv 0.405639 -0.726562 0.375\nv 0.40625 -0.726562 0.377319\nv 0.476562 -0.726562 0.381957\nv 0.484375 -0.726562 0.380341\nv 0.494575 -0.726562 0.375\nv 0.492188 -0.726562 0.377334\nv 0.5 -0.721703 0.375\nv -0.33751 -0.71875 0.375\nv -0.335938 -0.71875 0.376869\nv -0.328125 -0.71875 0.379818\nv -0.320312 -0.71875 0.380792\nv -0.3125 -0.71875 0.381552\nv -0.304688 -0.71875 0.382389\nv -0.296875 -0.71875 0.382477\nv -0.289062 -0.71875 0.381362\nv -0.28125 -0.71875 0.379835\nv -0.267487 -0.71875 0.375\nv -0.273438 -0.71875 0.377697\nv -0.265625 -0.717521 0.375\nv -0.257812 -0.713783 0.375\nv 0.401204 -0.71875 0.375\nv 0.398438 -0.713283 0.375\nv 0.502111 -0.71875 0.375\nv 0.5 -0.71875 0.378047\nv -0.339391 -0.710938 0.375\nv -0.335938 -0.710938 0.378244\nv -0.328125 -0.710938 0.380818\nv -0.320312 -0.710938 0.381847\nv -0.28125 -0.710938 0.382686\nv -0.273438 -0.710938 0.381426\nv -0.265625 -0.710938 0.37945\nv -0.25338 -0.710938 0.375\nv -0.257812 -0.710938 0.377469\nv -0.25 -0.708338 0.375\nv 0.397164 -0.710938 0.375\nv 0.398438 -0.710938 0.377742\nv 0.503915 -0.710938 0.375\nv 0.5 -0.710938 0.379292\nv -0.340046 -0.703125 0.375\nv -0.335938 -0.703125 0.378829\nv -0.328125 -0.703125 0.381478\nv -0.265625 -0.703125 0.382056\nv -0.257812 -0.703125 0.381236\nv -0.244016 -0.703125 0.375\nv -0.25 -0.703125 0.378602\nv -0.242188 -0.701088 0.375\nv 0.394066 -0.703125 0.375\nv 0.398438 -0.703125 0.382353\nv 0.505031 -0.703125 0.375\nv 0.5 -0.703125 0.380354\nv -0.340309 -0.695312 0.375\nv -0.335938 -0.695312 0.379374\nv -0.328125 -0.695312 0.38228\nv -0.257812 -0.695312 0.382602\nv -0.25 -0.695312 0.38089\nv -0.238084 -0.695312 0.375\nv -0.242188 -0.695312 0.377688\nv 0.391521 -0.695312 0.375\nv 0.390625 -0.689992 0.375\nv 0.505689 -0.695312 0.375\nv 0.5 -0.695312 0.381\nv -0.339918 -0.6875 0.375\nv -0.335938 -0.6875 0.379168\nv -0.328125 -0.6875 0.382352\nv -0.25 -0.6875 0.381205\nv -0.235831 -0.6875 0.375\nv -0.242188 -0.6875 0.378511\nv -0.234375 -0.68067 0.375\nv 0.390302 -0.6875 0.375\nv 0.390625 -0.6875 0.375579\nv 0.505408 -0.6875 0.375\nv 0.5 -0.6875 0.380967\nv -0.339256 -0.679688 0.375\nv -0.335938 -0.679688 0.378572\nv -0.328125 -0.679688 0.382201\nv -0.25 -0.679688 0.381664\nv -0.242188 -0.679688 0.379223\nv -0.234194 -0.679688 0.375\nv -0.234375 -0.679688 0.375146\nv 0.389358 -0.679688 0.375\nv 0.390625 -0.679688 0.377052\nv 0.505468 -0.679688 0.375\nv 0.5 -0.679688 0.381202\nv -0.338137 -0.671875 0.375\nv -0.335938 -0.671875 0.377609\nv -0.328125 -0.671875 0.381718\nv -0.25 -0.671875 0.382101\nv -0.242188 -0.671875 0.379919\nv -0.232669 -0.671875 0.375\nv -0.234375 -0.671875 0.376298\nv 0.38843 -0.671875 0.375\nv 0.390625 -0.671875 0.377979\nv 0.505633 -0.671875 0.375\nv 0.5 -0.671875 0.381441\nv -0.337024 -0.664062 0.375\nv -0.335938 -0.664062 0.376457\nv -0.328125 -0.664062 0.381363\nv -0.25 -0.664062 0.382493\nv -0.242188 -0.664062 0.380563\nv -0.231195 -0.664062 0.375\nv -0.234375 -0.664062 0.377354\nv 0.387685 -0.664062 0.375\nv 0.390625 -0.664062 0.378498\nv 0.505752 -0.664062 0.375\nv 0.5 -0.664062 0.381658\nv -0.33598 -0.65625 0.375\nv -0.335938 -0.655906 0.375\nv -0.335938 -0.65625 0.375066\nv -0.328125 -0.65625 0.381125\nv -0.242188 -0.65625 0.381184\nv -0.229737 -0.65625 0.375\nv -0.234375 -0.65625 0.378337\nv 0.386914 -0.65625 0.375\nv 0.390625 -0.65625 0.378876\nv 0.505868 -0.65625 0.375\nv 0.5 -0.65625 0.382014\nv -0.334826 -0.648438 0.375\nv -0.328125 -0.648438 0.380874\nv -0.242188 -0.648438 0.38168\nv -0.228113 -0.648438 0.375\nv -0.234375 -0.648438 0.379154\nv 0.386396 -0.648438 0.375\nv 0.390625 -0.648438 0.379189\nv 0.506086 -0.648438 0.375\nv 0.5 -0.648438 0.38281\nv -0.334306 -0.640625 0.375\nv -0.328125 -0.640625 0.380738\nv -0.242188 -0.640625 0.381994\nv -0.227143 -0.640625 0.375\nv -0.234375 -0.640625 0.379525\nv 0.385915 -0.640625 0.375\nv 0.390625 -0.640625 0.379547\nv 0.506411 -0.640625 0.375\nv -0.333737 -0.632812 0.375\nv -0.328125 -0.632812 0.380629\nv -0.242188 -0.632812 0.382154\nv -0.226884 -0.632812 0.375\nv -0.234375 -0.632812 0.379592\nv -0.226562 -0.625251 0.375\nv 0.385366 -0.632812 0.375\nv 0.390625 -0.632812 0.379966\nv 0.506724 -0.632812 0.375\nv -0.333059 -0.625 0.375\nv -0.328125 -0.625 0.380525\nv -0.242188 -0.625 0.382241\nv -0.234375 -0.625 0.379673\nv -0.226553 -0.625 0.375\nv -0.226562 -0.625 0.375007\nv 0.384848 -0.625 0.375\nv 0.390625 -0.625 0.380402\nv 0.506756 -0.625 0.375\nv -0.332515 -0.617188 0.375\nv -0.328125 -0.617188 0.380535\nv -0.320312 -0.617188 0.38281\nv -0.242188 -0.617188 0.382312\nv -0.234375 -0.617188 0.37978\nv -0.226204 -0.617188 0.375\nv -0.226562 -0.617188 0.375276\nv 0.384378 -0.617188 0.375\nv 0.390625 -0.617188 0.380858\nv 0.50663 -0.617188 0.375\nv -0.332224 -0.609375 0.375\nv -0.328125 -0.609375 0.380643\nv -0.242188 -0.609375 0.38229\nv -0.234375 -0.609375 0.379854\nv -0.225893 -0.609375 0.375\nv -0.226562 -0.609375 0.375505\nv 0.383916 -0.609375 0.375\nv 0.390625 -0.609375 0.381343\nv 0.50613 -0.609375 0.375\nv -0.332154 -0.601562 0.375\nv -0.328125 -0.601562 0.380563\nv -0.242188 -0.601562 0.382217\nv -0.234375 -0.601562 0.379808\nv -0.225762 -0.601562 0.375\nv -0.226562 -0.601562 0.375575\nv 0.383427 -0.601562 0.375\nv 0.390625 -0.601562 0.381965\nv 0.505479 -0.601562 0.375\nv 0.5 -0.601562 0.382543\nv -0.331869 -0.59375 0.375\nv -0.328125 -0.59375 0.380213\nv -0.320312 -0.59375 0.382798\nv -0.242188 -0.59375 0.381937\nv -0.234375 -0.59375 0.379524\nv -0.226078 -0.59375 0.375\nv -0.226562 -0.585996 0.375\nv -0.226562 -0.59375 0.375328\nv 0.383298 -0.59375 0.375\nv 0.390625 -0.59375 0.381994\nv 0.504898 -0.59375 0.375\nv 0.5 -0.59375 0.381832\nv -0.331747 -0.585938 0.375\nv -0.328125 -0.585938 0.380136\nv -0.320312 -0.585938 0.382754\nv -0.242188 -0.585938 0.381697\nv -0.226567 -0.585938 0.375\nv -0.234375 -0.585938 0.379153\nv 0.38311 -0.585938 0.375\nv 0.390625 -0.585938 0.381957\nv 0.504359 -0.585938 0.375\nv 0.5 -0.585938 0.381084\nv -0.331623 -0.578125 0.375\nv -0.328125 -0.578125 0.380167\nv -0.320312 -0.578125 0.382778\nv -0.242188 -0.578125 0.381347\nv -0.227121 -0.578125 0.375\nv -0.234375 -0.578125 0.378722\nv 0.382818 -0.578125 0.375\nv 0.382812 -0.577788 0.375\nv 0.390625 -0.578125 0.382033\nv 0.504041 -0.578125 0.375\nv 0.5 -0.578125 0.380584\nv -0.331466 -0.570312 0.375\nv -0.328125 -0.570312 0.380135\nv -0.320312 -0.570312 0.382783\nv -0.242188 -0.570312 0.381001\nv -0.227688 -0.570312 0.375\nv -0.234375 -0.570312 0.378294\nv 0.382697 -0.570312 0.375\nv 0.382812 -0.570312 0.375114\nv 0.390625 -0.570312 0.382145\nv 0.503684 -0.570312 0.375\nv 0.5 -0.570312 0.380067\nv -0.331447 -0.5625 0.375\nv -0.328125 -0.5625 0.380194\nv -0.242188 -0.5625 0.380701\nv -0.228188 -0.5625 0.375\nv -0.234375 -0.5625 0.377984\nv 0.382501 -0.5625 0.375\nv 0.382812 -0.5625 0.375303\nv 0.390625 -0.5625 0.382353\nv 0.503269 -0.5625 0.375\nv 0.5 -0.5625 0.379621\nv -0.331401 -0.554688 0.375\nv -0.328125 -0.554688 0.380153\nv -0.25 -0.554688 0.382642\nv -0.242188 -0.554688 0.380457\nv -0.228136 -0.554688 0.375\nv -0.234375 -0.554688 0.377748\nv -0.0078125 -0.546957 0.375\nv 0 -0.547433 0.375\nv 0.0078125 -0.547331 0.375\nv 0.34375 -0.547685 0.375\nv 0.351562 -0.548952 0.375\nv 0.359375 -0.549201 0.375\nv 0.367188 -0.549065 0.375\nv 0.381379 -0.554688 0.375\nv 0.375 -0.54882 0.375\nv 0.382812 -0.554688 0.37599\nv 0.390625 -0.554688 0.382468\nv 0.502956 -0.554688 0.375\nv 0.5 -0.554688 0.379366\nv -0.331387 -0.546875 0.375\nv -0.328125 -0.546875 0.380164\nv -0.25 -0.546875 0.38267\nv -0.242188 -0.546875 0.38044\nv -0.226691 -0.546875 0.375\nv -0.234375 -0.546875 0.378085\nv -0.226562 -0.546667 0.375\nv -0.21875 -0.542569 0.375\nv -0.210938 -0.540804 0.375\nv -0.203125 -0.540596 0.375\nv -0.195312 -0.541677 0.375\nv -0.1875 -0.542937 0.375\nv -0.179688 -0.544286 0.375\nv -0.171875 -0.545026 0.375\nv -0.164062 -0.544843 0.375\nv -0.15625 -0.543677 0.375\nv -0.148438 -0.542634 0.375\nv -0.140625 -0.541527 0.375\nv -0.0859375 -0.539758 0.375\nv -0.078125 -0.540683 0.375\nv -0.0703125 -0.541482 0.375\nv -0.0625 -0.542229 0.375\nv -0.0546875 -0.542998 0.375\nv -0.046875 -0.543624 0.375\nv -0.0390625 -0.544245 0.375\nv -0.03125 -0.54482 0.375\nv -0.0234375 -0.545318 0.375\nv -0.00849422 -0.546875 0.375\nv -0.015625 -0.545671 0.375\nv -0.0078125 -0.546875 0.375077\nv 0 -0.546875 0.375528\nv 0.0136793 -0.546875 0.375\nv 0.0078125 -0.546875 0.375431\nv 0.015625 -0.546674 0.375\nv 0.0234375 -0.545854 0.375\nv 0.03125 -0.544983 0.375\nv 0.0390625 -0.544024 0.375\nv 0.046875 -0.543126 0.375\nv 0.0546875 -0.542632 0.375\nv 0.0625 -0.542392 0.375\nv 0.0703125 -0.541797 0.375\nv 0.078125 -0.541186 0.375\nv 0.0859375 -0.540599 0.375\nv 0.09375 -0.54053 0.375\nv 0.101562 -0.540553 0.375\nv 0.109375 -0.540152 0.375\nv 0.117188 -0.539812 0.375\nv 0.125 -0.539781 0.375\nv 0.132812 -0.539823 0.375\nv 0.140625 -0.53986 0.375\nv 0.148438 -0.540054 0.375\nv 0.15625 -0.540378 0.375\nv 0.164062 -0.540727 0.375\nv 0.171875 -0.540912 0.375\nv 0.179688 -0.540666 0.375\nv 0.1875 -0.54131 0.375\nv 0.195312 -0.542136 0.375\nv 0.203125 -0.542778 0.375\nv 0.210938 -0.543343 0.375\nv 0.21875 -0.543829 0.375\nv 0.226562 -0.544207 0.375\nv 0.234375 -0.54444 0.375\nv 0.242188 -0.544553 0.375\nv 0.25 -0.544731 0.375\nv 0.257812 -0.544809 0.375\nv 0.265625 -0.544979 0.375\nv 0.273438 -0.545154 0.375\nv 0.28125 -0.545134 0.375\nv 0.289062 -0.544994 0.375\nv 0.296875 -0.544808 0.375\nv 0.304688 -0.544077 0.375\nv 0.3125 -0.543372 0.375\nv 0.320312 -0.543658 0.375\nv 0.328125 -0.545767 0.375\nv 0.3371 -0.546875 0.375\nv 0.335938 -0.5467 0.375\nv 0.34375 -0.546875 0.375616\nv 0.351562 -0.546875 0.376493\nv 0.359375 -0.546875 0.376669\nv 0.367188 -0.546875 0.376503\nv 0.375 -0.546875 0.376087\nv 0.382812 -0.546875 0.378027\nv 0.390625 -0.546875 0.382665\nv 0.502753 -0.546875 0.375\nv 0.5 -0.546875 0.379305\nv -0.331584 -0.539062 0.375\nv -0.328125 -0.539062 0.380375\nv -0.242188 -0.539062 0.381002\nv -0.234375 -0.539062 0.37878\nv -0.226562 -0.539062 0.37669\nv -0.21875 -0.539062 0.376115\nv -0.210938 -0.539062 0.375648\nv -0.203125 -0.539062 0.375709\nv -0.195312 -0.539062 0.376145\nv -0.1875 -0.539062 0.376737\nv -0.179688 -0.539062 0.377407\nv -0.171875 -0.539062 0.377799\nv -0.164062 -0.539062 0.377894\nv -0.15625 -0.539062 0.377773\nv -0.148438 -0.539062 0.377441\nv -0.13466 -0.539062 0.375\nv -0.140625 -0.539062 0.377044\nv -0.132812 -0.53763 0.375\nv -0.125 -0.53341 0.375\nv -0.117188 -0.534785 0.375\nv -0.109375 -0.536444 0.375\nv -0.101562 -0.537782 0.375\nv -0.0929558 -0.539062 0.375\nv -0.09375 -0.538948 0.375\nv -0.0859375 -0.539062 0.375733\nv -0.078125 -0.539062 0.376708\nv -0.0703125 -0.539062 0.377507\nv -0.0625 -0.539062 0.378012\nv -0.0546875 -0.539062 0.378404\nv -0.046875 -0.539062 0.378594\nv -0.0390625 -0.539062 0.378624\nv -0.03125 -0.539062 0.37878\nv -0.0234375 -0.539062 0.379095\nv -0.015625 -0.539062 0.379188\nv -0.0078125 -0.539062 0.379819\nv 0 -0.539062 0.380295\nv 0.0078125 -0.539062 0.380496\nv 0.015625 -0.539062 0.380221\nv 0.0234375 -0.539062 0.379708\nv 0.03125 -0.539062 0.379114\nv 0.0390625 -0.539062 0.378473\nv 0.046875 -0.539062 0.377967\nv 0.0546875 -0.539062 0.377764\nv 0.0625 -0.539062 0.377679\nv 0.0703125 -0.539062 0.377185\nv 0.078125 -0.539062 0.376659\nv 0.0859375 -0.539062 0.376182\nv 0.09375 -0.539062 0.37612\nv 0.101562 -0.539062 0.376188\nv 0.109375 -0.539062 0.375911\nv 0.117188 -0.539062 0.375633\nv 0.125 -0.539062 0.375591\nv 0.132812 -0.539062 0.375621\nv 0.140625 -0.539062 0.37565\nv 0.148438 -0.539062 0.375797\nv 0.15625 -0.539062 0.376019\nv 0.164062 -0.539062 0.376281\nv 0.171875 -0.539062 0.376342\nv 0.179688 -0.539062 0.376099\nv 0.1875 -0.539062 0.376428\nv 0.195312 -0.539062 0.376904\nv 0.203125 -0.539062 0.377493\nv 0.210938 -0.539062 0.377999\nv 0.21875 -0.539062 0.378426\nv 0.226562 -0.539062 0.378876\nv 0.234375 -0.539062 0.379028\nv 0.242188 -0.539062 0.379017\nv 0.25 -0.539062 0.379145\nv 0.257812 -0.539062 0.379254\nv 0.265625 -0.539062 0.379324\nv 0.273438 -0.539062 0.379266\nv 0.28125 -0.539062 0.379114\nv 0.289062 -0.539062 0.379177\nv 0.296875 -0.539062 0.379176\nv 0.304688 -0.539062 0.378815\nv 0.3125 -0.539062 0.378213\nv 0.320312 -0.539062 0.378007\nv 0.328125 -0.539062 0.378629\nv 0.335938 -0.539062 0.378928\nv 0.34375 -0.539062 0.379231\nv 0.351562 -0.539062 0.379494\nv 0.359375 -0.539062 0.379518\nv 0.367188 -0.539062 0.379249\nv 0.375 -0.539062 0.378786\nv 0.382812 -0.539062 0.380206\nv 0.502555 -0.539062 0.375\nv 0.5 -0.539062 0.379334\nv -0.331663 -0.53125 0.375\nv -0.328125 -0.53125 0.38045\nv -0.242188 -0.53125 0.381598\nv -0.234375 -0.53125 0.379472\nv -0.226562 -0.53125 0.378013\nv -0.21875 -0.53125 0.377977\nv -0.210938 -0.53125 0.377552\nv -0.203125 -0.53125 0.377847\nv -0.195312 -0.53125 0.37838\nv -0.1875 -0.53125 0.378973\nv -0.179688 -0.53125 0.379548\nv -0.171875 -0.53125 0.379915\nv -0.164062 -0.53125 0.380163\nv -0.15625 -0.53125 0.380401\nv -0.148438 -0.53125 0.380341\nv -0.140625 -0.53125 0.380214\nv -0.132812 -0.53125 0.378441\nv -0.125 -0.53125 0.376315\nv -0.117188 -0.53125 0.377196\nv -0.109375 -0.53125 0.378291\nv -0.101562 -0.53125 0.379381\nv -0.09375 -0.53125 0.38046\nv -0.0859375 -0.53125 0.381491\nv -0.078125 -0.53125 0.382312\nv -0.0703125 -0.53125 0.382525\nv -0.0625 -0.53125 0.382523\nv -0.0546875 -0.53125 0.382528\nv -0.046875 -0.53125 0.38251\nv -0.0390625 -0.53125 0.382561\nv -0.03125 -0.53125 0.382734\nv 0.0390625 -0.53125 0.382323\nv 0.046875 -0.53125 0.381766\nv 0.0546875 -0.53125 0.381639\nv 0.0625 -0.53125 0.381755\nv 0.0703125 -0.53125 0.381397\nv 0.078125 -0.53125 0.380888\nv 0.0859375 -0.53125 0.380467\nv 0.09375 -0.53125 0.380397\nv 0.101562 -0.53125 0.380532\nv 0.109375 -0.53125 0.38048\nv 0.117188 -0.53125 0.380434\nv 0.125 -0.53125 0.380156\nv 0.132812 -0.53125 0.379963\nv 0.140625 -0.53125 0.379709\nv 0.148438 -0.53125 0.37965\nv 0.15625 -0.53125 0.379876\nv 0.164062 -0.53125 0.379859\nv 0.171875 -0.53125 0.379544\nv 0.179688 -0.53125 0.379367\nv 0.1875 -0.53125 0.379631\nv 0.195312 -0.53125 0.379985\nv 0.203125 -0.53125 0.380486\nv 0.210938 -0.53125 0.380933\nv 0.21875 -0.53125 0.381297\nv 0.226562 -0.53125 0.38174\nv 0.234375 -0.53125 0.381995\nv 0.242188 -0.53125 0.382259\nv 0.25 -0.53125 0.382292\nv 0.257812 -0.53125 0.382401\nv 0.265625 -0.53125 0.382276\nv 0.273438 -0.53125 0.382069\nv 0.28125 -0.53125 0.381978\nv 0.289062 -0.53125 0.381981\nv 0.296875 -0.53125 0.38197\nv 0.304688 -0.53125 0.381747\nv 0.3125 -0.53125 0.381337\nv 0.320312 -0.53125 0.381238\nv 0.328125 -0.53125 0.381356\nv 0.335938 -0.53125 0.3814\nv 0.34375 -0.53125 0.381716\nv 0.351562 -0.53125 0.381768\nv 0.359375 -0.53125 0.381896\nv 0.367188 -0.53125 0.381528\nv 0.375 -0.53125 0.380955\nv 0.382812 -0.53125 0.382054\nv 0.502636 -0.53125 0.375\nv 0.5 -0.53125 0.379922\nv -0.331781 -0.523438 0.375\nv -0.328125 -0.523438 0.380722\nv -0.242188 -0.523438 0.382404\nv -0.234375 -0.523438 0.380544\nv -0.226562 -0.523438 0.379583\nv -0.21875 -0.523438 0.379636\nv -0.210938 -0.523438 0.379451\nv -0.203125 -0.523438 0.379884\nv -0.195312 -0.523438 0.380445\nv -0.1875 -0.523438 0.380979\nv -0.179688 -0.523438 0.38143\nv -0.171875 -0.523438 0.381814\nv -0.164062 -0.523438 0.382163\nv -0.15625 -0.523438 0.382646\nv -0.132812 -0.523438 0.381768\nv -0.125 -0.523438 0.380295\nv -0.117188 -0.523438 0.381194\nv -0.109375 -0.523438 0.382306\nv 0.132812 -0.523438 0.382658\nv 0.140625 -0.523438 0.382169\nv 0.148438 -0.523438 0.381846\nv 0.15625 -0.523438 0.381861\nv 0.164062 -0.523438 0.381933\nv 0.171875 -0.523438 0.381911\nv 0.179688 -0.523438 0.381736\nv 0.1875 -0.523438 0.381861\nv 0.195312 -0.523438 0.382166\nv 0.203125 -0.523438 0.382512\nv 0.375 -0.523438 0.382781\nv 0.502999 -0.523438 0.375\nv 0.5 -0.523438 0.380516\nv -0.331831 -0.515625 0.375\nv -0.328125 -0.515625 0.380866\nv -0.234375 -0.515625 0.381732\nv -0.226562 -0.515625 0.381004\nv -0.21875 -0.515625 0.381277\nv -0.210938 -0.515625 0.381394\nv -0.203125 -0.515625 0.381966\nv -0.195312 -0.515625 0.382445\nv 0.503227 -0.515625 0.375\nv 0.5 -0.515625 0.381084\nv -0.331856 -0.507812 0.375\nv -0.328125 -0.507812 0.38099\nv -0.234375 -0.507812 0.382429\nv -0.226562 -0.507812 0.381372\nv -0.21875 -0.507812 0.381501\nv -0.210938 -0.507812 0.381554\nv -0.203125 -0.507812 0.382039\nv -0.195312 -0.507812 0.382456\nv 0.503317 -0.507812 0.375\nv 0.5 -0.507812 0.380928\nv -0.331772 -0.5 0.375\nv -0.328125 -0.5 0.38112\nv -0.234375 -0.5 0.382095\nv -0.226562 -0.5 0.379625\nv -0.21875 -0.5 0.378989\nv -0.210938 -0.5 0.378694\nv -0.203125 -0.492394 0.375\nv -0.203125 -0.5 0.378695\nv -0.195312 -0.5 0.379207\nv -0.1875 -0.5 0.380097\nv -0.179688 -0.5 0.380356\nv -0.171875 -0.5 0.380754\nv -0.164062 -0.5 0.381179\nv -0.15625 -0.5 0.381931\nv -0.148438 -0.5 0.382262\nv -0.140625 -0.5 0.382349\nv -0.132812 -0.493315 0.375\nv -0.132812 -0.5 0.380249\nv -0.125 -0.494576 0.375\nv -0.125 -0.5 0.379402\nv -0.117188 -0.493018 0.375\nv -0.117188 -0.5 0.380918\nv -0.109375 -0.5 0.382811\nv 0.117188 -0.5 0.382593\nv 0.125 -0.5 0.38242\nv 0.132812 -0.5 0.38174\nv 0.140625 -0.5 0.381148\nv 0.148438 -0.5 0.380771\nv 0.15625 -0.5 0.380716\nv 0.164062 -0.5 0.380752\nv 0.171875 -0.5 0.380608\nv 0.179688 -0.5 0.380443\nv 0.1875 -0.5 0.38056\nv 0.195312 -0.5 0.380809\nv 0.203125 -0.5 0.38111\nv 0.210938 -0.5 0.381548\nv 0.21875 -0.5 0.381832\nv 0.226562 -0.5 0.382102\nv 0.234375 -0.5 0.38202\nv 0.242188 -0.5 0.381935\nv 0.25 -0.5 0.381842\nv 0.257812 -0.5 0.38176\nv 0.265625 -0.5 0.381451\nv 0.273438 -0.5 0.381069\nv 0.28125 -0.492903 0.375\nv 0.28125 -0.5 0.380659\nv 0.289062 -0.493911 0.375\nv 0.289062 -0.5 0.380311\nv 0.296875 -0.49472 0.375\nv 0.296875 -0.5 0.379751\nv 0.304688 -0.495565 0.375\nv 0.304688 -0.5 0.379027\nv 0.3125 -0.496586 0.375\nv 0.3125 -0.5 0.378286\nv 0.320312 -0.494883 0.375\nv 0.320312 -0.5 0.379412\nv 0.328125 -0.492321 0.375\nv 0.328125 -0.5 0.380227\nv 0.335938 -0.5 0.380866\nv 0.34375 -0.5 0.381642\nv 0.351562 -0.5 0.382086\nv 0.359375 -0.5 0.382401\nv 0.367188 -0.5 0.382076\nv 0.375 -0.5 0.381736\nv 0.503358 -0.5 0.375\nv 0.5 -0.5 0.380725\nv -0.331539 -0.492188 0.375\nv -0.328125 -0.492188 0.381076\nv -0.234375 -0.492188 0.381722\nv -0.226562 -0.492188 0.378582\nv -0.21875 -0.487881 0.375\nv -0.21875 -0.492188 0.37616\nv -0.204425 -0.492188 0.375\nv -0.210938 -0.490953 0.375\nv -0.210938 -0.492188 0.3755\nv -0.201725 -0.492188 0.375\nv -0.195312 -0.491291 0.375\nv -0.195312 -0.492188 0.375448\nv -0.1875 -0.48938 0.375\nv -0.1875 -0.492188 0.376422\nv -0.179688 -0.488822 0.375\nv -0.179688 -0.492188 0.376677\nv -0.171875 -0.488477 0.375\nv -0.171875 -0.492188 0.376916\nv -0.164062 -0.488143 0.375\nv -0.164062 -0.492188 0.37716\nv -0.15625 -0.487621 0.375\nv -0.15625 -0.492188 0.377652\nv -0.148438 -0.487655 0.375\nv -0.148438 -0.492188 0.377854\nv -0.135421 -0.492188 0.375\nv -0.140625 -0.490065 0.375\nv -0.140625 -0.492188 0.376722\nv -0.114066 -0.492188 0.375\nv -0.109375 -0.490986 0.375\nv -0.109375 -0.492188 0.376103\nv -0.101562 -0.489117 0.375\nv -0.101562 -0.492188 0.377844\nv -0.09375 -0.487514 0.375\nv -0.09375 -0.492188 0.379483\nv -0.0859375 -0.48582 0.375\nv -0.0859375 -0.492188 0.380992\nv -0.078125 -0.492188 0.382373\nv 0.015625 -0.492188 0.382051\nv 0.0234375 -0.492188 0.381257\nv 0.03125 -0.492188 0.38043\nv 0.0390625 -0.484573 0.375\nv 0.0390625 -0.492188 0.379959\nv 0.046875 -0.485216 0.375\nv 0.046875 -0.492188 0.379517\nv 0.0546875 -0.48515 0.375\nv 0.0546875 -0.492188 0.379576\nv 0.0625 -0.485259 0.375\nv 0.0625 -0.492188 0.379551\nv 0.0703125 -0.485381 0.375\nv 0.0703125 -0.492188 0.379436\nv 0.078125 -0.485921 0.375\nv 0.078125 -0.492188 0.379177\nv 0.0859375 -0.486603 0.375\nv 0.0859375 -0.492188 0.378836\nv 0.09375 -0.486953 0.375\nv 0.09375 -0.492188 0.378664\nv 0.101562 -0.487081 0.375\nv 0.101562 -0.492188 0.378254\nv 0.109375 -0.48787 0.375\nv 0.109375 -0.492188 0.377692\nv 0.117188 -0.488481 0.375\nv 0.117188 -0.492188 0.377348\nv 0.125 -0.488865 0.375\nv 0.125 -0.492188 0.377108\nv 0.132812 -0.489202 0.375\nv 0.132812 -0.492188 0.376865\nv 0.140625 -0.489793 0.375\nv 0.140625 -0.492188 0.376439\nv 0.148438 -0.490479 0.375\nv 0.148438 -0.492188 0.376003\nv 0.15625 -0.490747 0.375\nv 0.15625 -0.492188 0.375856\nv 0.164062 -0.4908 0.375\nv 0.164062 -0.492188 0.375831\nv 0.171875 -0.490897 0.375\nv 0.171875 -0.492188 0.375792\nv 0.179688 -0.491062 0.375\nv 0.179688 -0.492188 0.3757\nv 0.1875 -0.490674 0.375\nv 0.1875 -0.492188 0.375865\nv 0.195312 -0.490231 0.375\nv 0.195312 -0.492188 0.37612\nv 0.203125 -0.489655 0.375\nv 0.203125 -0.492188 0.376498\nv 0.210938 -0.489069 0.375\nv 0.210938 -0.492188 0.376819\nv 0.21875 -0.488461 0.375\nv 0.21875 -0.492188 0.377231\nv 0.226562 -0.488015 0.375\nv 0.226562 -0.492188 0.377495\nv 0.234375 -0.487667 0.375\nv 0.234375 -0.492188 0.377583\nv 0.242188 -0.487928 0.375\nv 0.242188 -0.492188 0.3774\nv 0.25 -0.488519 0.375\nv 0.25 -0.492188 0.377195\nv 0.257812 -0.489374 0.375\nv 0.257812 -0.492188 0.376793\nv 0.265625 -0.490241 0.375\nv 0.265625 -0.492188 0.37631\nv 0.277152 -0.492188 0.375\nv 0.273438 -0.491429 0.375\nv 0.273438 -0.492188 0.37553\nv 0.329268 -0.492188 0.375\nv 0.335938 -0.491375 0.375\nv 0.335938 -0.492188 0.375568\nv 0.34375 -0.490247 0.375\nv 0.34375 -0.492188 0.376364\nv 0.351562 -0.489041 0.375\nv 0.351562 -0.492188 0.377173\nv 0.359375 -0.488631 0.375\nv 0.359375 -0.492188 0.377416\nv 0.367188 -0.488822 0.375\nv 0.367188 -0.492188 0.377176\nv 0.375 -0.486228 0.375\nv 0.375 -0.492188 0.377678\nv 0.382812 -0.492188 0.380259\nv 0.503588 -0.492188 0.375\nv 0.5 -0.492188 0.380843\nv -0.33143 -0.484375 0.375\nv -0.328125 -0.484375 0.381136\nv -0.234375 -0.484375 0.381272\nv -0.220763 -0.484375 0.375\nv -0.226562 -0.484375 0.378094\nv -0.0792878 -0.484375 0.375\nv -0.078125 -0.484135 0.375\nv -0.078125 -0.484375 0.375238\nv -0.0703125 -0.48252 0.375\nv -0.0703125 -0.484375 0.376817\nv -0.0625 -0.481019 0.375\nv -0.0625 -0.484375 0.378023\nv -0.0546875 -0.47976 0.375\nv -0.0546875 -0.484375 0.378617\nv -0.046875 -0.47884 0.375\nv -0.046875 -0.484375 0.378847\nv -0.0390625 -0.478318 0.375\nv -0.0390625 -0.484375 0.379112\nv -0.03125 -0.4779 0.375\nv -0.03125 -0.484375 0.379414\nv -0.0234375 -0.477482 0.375\nv -0.0234375 -0.484375 0.379597\nv -0.015625 -0.477435 0.375\nv -0.015625 -0.484375 0.379568\nv -0.0078125 -0.477637 0.375\nv -0.0078125 -0.484375 0.379327\nv 0 -0.478036 0.375\nv 0 -0.484375 0.379023\nv 0.0078125 -0.479253 0.375\nv 0.0078125 -0.484375 0.378218\nv 0.015625 -0.480828 0.375\nv 0.015625 -0.484375 0.377205\nv 0.0234375 -0.48221 0.375\nv 0.0234375 -0.484375 0.376394\nv 0.0376663 -0.484375 0.375\nv 0.03125 -0.48343 0.375\nv 0.03125 -0.484375 0.375614\nv 0.376942 -0.484375 0.375\nv 0.382812 -0.484375 0.377745\nv 0.390625 -0.484375 0.381388\nv 0.503906 -0.484375 0.375\nv 0.5 -0.484375 0.38101\nv -0.331366 -0.476562 0.375\nv -0.328125 -0.476562 0.38112\nv -0.234375 -0.476562 0.380821\nv -0.221925 -0.476562 0.375\nv -0.226562 -0.476562 0.37754\nv 0.382369 -0.476562 0.375\nv 0.382812 -0.475551 0.375\nv 0.382812 -0.476562 0.375258\nv 0.390625 -0.476562 0.379692\nv 0.504172 -0.476562 0.375\nv 0.5 -0.476562 0.381379\nv -0.331277 -0.46875 0.375\nv -0.328125 -0.46875 0.381184\nv -0.242188 -0.46875 0.382591\nv -0.234375 -0.46875 0.380377\nv -0.223058 -0.46875 0.375\nv -0.226562 -0.46875 0.376983\nv 0.385679 -0.46875 0.375\nv 0.390625 -0.46875 0.378267\nv 0.504553 -0.46875 0.375\nv 0.5 -0.46875 0.38174\nv -0.331221 -0.460938 0.375\nv -0.328125 -0.460938 0.381271\nv -0.242188 -0.460938 0.382166\nv -0.234375 -0.460938 0.379901\nv -0.224054 -0.460938 0.375\nv -0.226562 -0.460938 0.376482\nv 0.387648 -0.460938 0.375\nv 0.390625 -0.460938 0.377285\nv 0.398438 -0.460938 0.382732\nv 0.505048 -0.460938 0.375\nv 0.5 -0.460938 0.382332\nv -0.331131 -0.453125 0.375\nv -0.328125 -0.453125 0.38104\nv -0.242188 -0.453125 0.382103\nv -0.234375 -0.453125 0.379562\nv -0.224966 -0.453125 0.375\nv -0.226562 -0.453125 0.375939\nv 0.389072 -0.453125 0.375\nv 0.390625 -0.453125 0.376288\nv 0.398438 -0.453125 0.381903\nv 0.505656 -0.453125 0.375\nv -0.331032 -0.445312 0.375\nv -0.328125 -0.445312 0.380748\nv -0.242188 -0.445312 0.382057\nv -0.234375 -0.445312 0.379499\nv -0.225654 -0.445312 0.375\nv -0.226562 -0.445312 0.375561\nv 0.390229 -0.445312 0.375\nv 0.390625 -0.442769 0.375\nv 0.390625 -0.445312 0.375337\nv 0.398438 -0.445312 0.381083\nv 0.506135 -0.445312 0.375\nv -0.330964 -0.4375 0.375\nv -0.328125 -0.4375 0.380522\nv -0.242188 -0.4375 0.381967\nv -0.234375 -0.4375 0.37942\nv -0.225772 -0.4375 0.375\nv -0.226562 -0.4375 0.3755\nv 0.391468 -0.4375 0.375\nv 0.398438 -0.4375 0.380292\nv 0.506539 -0.4375 0.375\nv -0.330647 -0.429688 0.375\nv -0.328125 -0.429688 0.379964\nv -0.242188 -0.429688 0.38185\nv -0.234375 -0.429688 0.379364\nv -0.225865 -0.429688 0.375\nv -0.226562 -0.429688 0.375442\nv 0.392426 -0.429688 0.375\nv 0.398438 -0.429688 0.379797\nv 0.507039 -0.429688 0.375\nv -0.330251 -0.421875 0.375\nv -0.328125 -0.421875 0.37921\nv -0.242188 -0.421875 0.381862\nv -0.234375 -0.421875 0.379412\nv -0.225835 -0.421875 0.375\nv -0.226562 -0.421875 0.375468\nv 0.392732 -0.421875 0.375\nv 0.398438 -0.421875 0.379617\nv 0.507562 -0.421875 0.375\nv 0.507812 -0.416973 0.375\nv -0.32985 -0.414062 0.375\nv -0.328125 -0.414062 0.378417\nv -0.242188 -0.414062 0.381888\nv -0.234375 -0.414062 0.379525\nv -0.226129 -0.414062 0.375\nv -0.226562 -0.410142 0.375\nv -0.226562 -0.414062 0.375315\nv 0.392995 -0.414062 0.375\nv 0.398438 -0.414062 0.379499\nv 0.507918 -0.414062 0.375\nv 0.507812 -0.414062 0.375243\nv -0.329356 -0.40625 0.375\nv -0.328125 -0.40625 0.37743\nv -0.242188 -0.40625 0.381934\nv -0.227031 -0.40625 0.375\nv -0.234375 -0.40625 0.379222\nv 0.393243 -0.40625 0.375\nv 0.398438 -0.40625 0.37923\nv 0.508055 -0.40625 0.375\nv 0.507812 -0.40625 0.375557\nv -0.328867 -0.398438 0.375\nv -0.328125 -0.398438 0.376445\nv -0.242188 -0.398438 0.382037\nv -0.22694 -0.398438 0.375\nv -0.234375 -0.398438 0.379281\nv -0.226562 -0.393905 0.375\nv 0.393123 -0.398438 0.375\nv 0.398438 -0.398438 0.379138\nv 0.508276 -0.398438 0.375\nv 0.507812 -0.398438 0.376047\nv -0.328373 -0.390625 0.375\nv -0.328125 -0.387285 0.375\nv -0.328125 -0.390625 0.375484\nv -0.242188 -0.390625 0.382286\nv -0.234375 -0.390625 0.379616\nv -0.226325 -0.390625 0.375\nv -0.226562 -0.390625 0.375188\nv 0.393147 -0.390625 0.375\nv 0.398438 -0.390625 0.379063\nv 0.50852 -0.390625 0.375\nv 0.507812 -0.390625 0.376543\nv -0.327758 -0.382812 0.375\nv -0.242188 -0.382812 0.382327\nv -0.234375 -0.382812 0.379896\nv -0.22583 -0.382812 0.375\nv -0.226562 -0.382812 0.375596\nv 0.393184 -0.382812 0.375\nv 0.398438 -0.382812 0.379015\nv 0.508725 -0.382812 0.375\nv 0.507812 -0.382812 0.376957\nv -0.32706 -0.375 0.375\nv -0.320312 -0.375 0.382496\nv -0.242188 -0.375 0.382332\nv -0.234375 -0.375 0.379945\nv -0.225768 -0.375 0.375\nv -0.226562 -0.375 0.37563\nv 0.393153 -0.375 0.375\nv 0.398438 -0.375 0.378973\nv 0.508612 -0.375 0.375\nv 0.507812 -0.375 0.376703\nv -0.326385 -0.367188 0.375\nv -0.320312 -0.367188 0.38202\nv -0.242188 -0.367188 0.382275\nv -0.234375 -0.367188 0.379957\nv -0.226083 -0.367188 0.375\nv -0.226562 -0.367188 0.375376\nv 0.393117 -0.367188 0.375\nv 0.398438 -0.367188 0.378969\nv 0.508506 -0.367188 0.375\nv 0.507812 -0.367188 0.376479\nv -0.325797 -0.359375 0.375\nv -0.320312 -0.359375 0.381588\nv -0.242188 -0.359375 0.382206\nv -0.234375 -0.359375 0.379923\nv -0.226392 -0.359375 0.375\nv -0.226562 -0.355445 0.375\nv -0.226562 -0.359375 0.375132\nv 0.393087 -0.359375 0.375\nv 0.398438 -0.359375 0.378947\nv 0.508481 -0.359375 0.375\nv 0.507812 -0.359375 0.376407\nv -0.32527 -0.351562 0.375\nv -0.320312 -0.351562 0.381302\nv -0.242188 -0.351562 0.382204\nv -0.226745 -0.351562 0.375\nv -0.234375 -0.351562 0.379802\nv 0.393075 -0.351562 0.375\nv 0.398438 -0.351562 0.378912\nv 0.508439 -0.351562 0.375\nv 0.507812 -0.351562 0.376301\nv -0.324929 -0.34375 0.375\nv -0.320312 -0.34375 0.381098\nv -0.242188 -0.34375 0.382205\nv -0.227109 -0.34375 0.375\nv -0.234375 -0.34375 0.379752\nv 0.393676 -0.34375 0.375\nv 0.398438 -0.34375 0.378877\nv 0.508363 -0.34375 0.375\nv 0.507812 -0.34375 0.376126\nv -0.324608 -0.335938 0.375\nv -0.320312 -0.335938 0.380816\nv -0.242188 -0.335938 0.382325\nv -0.227145 -0.335938 0.375\nv -0.234375 -0.335938 0.379751\nv 0.393931 -0.335938 0.375\nv 0.398438 -0.335938 0.378887\nv 0.508351 -0.335938 0.375\nv 0.507812 -0.335938 0.376094\nv -0.324425 -0.328125 0.375\nv -0.320312 -0.328125 0.380846\nv -0.242188 -0.328125 0.382579\nv -0.22711 -0.328125 0.375\nv -0.234375 -0.328125 0.379827\nv 0.394088 -0.328125 0.375\nv 0.398438 -0.328125 0.379029\nv 0.508357 -0.328125 0.375\nv 0.507812 -0.328125 0.376116\nv -0.324292 -0.320312 0.375\nv -0.320312 -0.320312 0.380982\nv -0.242188 -0.320312 0.382779\nv -0.226707 -0.320312 0.375\nv -0.234375 -0.320312 0.380022\nv -0.226562 -0.318219 0.375\nv 0.394177 -0.320312 0.375\nv 0.398438 -0.320312 0.379258\nv 0.508223 -0.320312 0.375\nv 0.507812 -0.320312 0.375843\nv -0.324164 -0.3125 0.375\nv -0.320312 -0.3125 0.380872\nv -0.234375 -0.3125 0.380304\nv -0.226235 -0.3125 0.375\nv -0.226562 -0.3125 0.375293\nv 0.394214 -0.3125 0.375\nv 0.398438 -0.3125 0.379443\nv 0.507878 -0.3125 0.375\nv 0.507812 -0.311283 0.375\nv 0.507812 -0.3125 0.375141\nv -0.323838 -0.304688 0.375\nv -0.320312 -0.304688 0.380344\nv -0.234375 -0.304688 0.380597\nv -0.225951 -0.304688 0.375\nv -0.226562 -0.304688 0.375578\nv 0.394436 -0.304688 0.375\nv 0.398438 -0.304688 0.379341\nv 0.507266 -0.304688 0.375\nv -0.323489 -0.296875 0.375\nv -0.320312 -0.296875 0.379776\nv -0.234375 -0.296875 0.381054\nv -0.225689 -0.296875 0.375\nv -0.226562 -0.296875 0.375906\nv 0.394695 -0.296875 0.375\nv 0.398438 -0.296875 0.379198\nv 0.506803 -0.296875 0.375\nv -0.323096 -0.289062 0.375\nv -0.320312 -0.289062 0.379118\nv -0.234375 -0.289062 0.381595\nv -0.225326 -0.289062 0.375\nv -0.226562 -0.289062 0.376374\nv 0.394746 -0.289062 0.375\nv 0.398438 -0.289062 0.379251\nv 0.506217 -0.289062 0.375\nv 0.5 -0.289062 0.382476\nv -0.322684 -0.28125 0.375\nv -0.320312 -0.28125 0.378458\nv -0.234375 -0.28125 0.382186\nv -0.224897 -0.28125 0.375\nv -0.226562 -0.28125 0.376924\nv 0.394531 -0.28125 0.375\nv 0.398438 -0.28125 0.379441\nv 0.505568 -0.28125 0.375\nv 0.5 -0.28125 0.382033\nv -0.322247 -0.273438 0.375\nv -0.320312 -0.273438 0.377839\nv -0.234375 -0.273438 0.38264\nv -0.224626 -0.273438 0.375\nv -0.226562 -0.273438 0.377392\nv 0.394281 -0.273438 0.375\nv 0.398438 -0.273438 0.379657\nv 0.504859 -0.273438 0.375\nv 0.5 -0.273438 0.381433\nv -0.321731 -0.265625 0.375\nv -0.320312 -0.265625 0.377154\nv -0.224365 -0.265625 0.375\nv -0.226562 -0.265625 0.377752\nv 0.394447 -0.265625 0.375\nv 0.398438 -0.265625 0.379534\nv 0.503934 -0.265625 0.375\nv 0.5 -0.265625 0.380387\nv -0.321216 -0.257812 0.375\nv -0.320312 -0.257812 0.376452\nv -0.224054 -0.257812 0.375\nv -0.226562 -0.257812 0.378164\nv 0.39439 -0.257812 0.375\nv 0.398438 -0.257812 0.37947\nv 0.503101 -0.257812 0.375\nv 0.5 -0.257812 0.379643\nv -0.320798 -0.25 0.375\nv -0.320312 -0.25 0.375811\nv -0.223637 -0.25 0.375\nv -0.226562 -0.25 0.378756\nv 0.394347 -0.25 0.375\nv 0.398438 -0.25 0.379367\nv 0.502348 -0.25 0.375\nv 0.5 -0.25 0.378705\nv -0.320324 -0.242188 0.375\nv -0.320312 -0.241984 0.375\nv -0.320312 -0.242188 0.375023\nv -0.223338 -0.242188 0.375\nv -0.226562 -0.242188 0.379086\nv 0.394251 -0.242188 0.375\nv 0.398438 -0.242188 0.379303\nv 0.501882 -0.242188 0.375\nv 0.5 -0.242188 0.37813\nv -0.319811 -0.234375 0.375\nv -0.223038 -0.234375 0.375\nv -0.226562 -0.234375 0.379272\nv 0.394381 -0.234375 0.375\nv 0.398438 -0.234375 0.379219\nv 0.501875 -0.234375 0.375\nv 0.5 -0.234375 0.378302\nv -0.320195 -0.226562 0.375\nv -0.320312 -0.223857 0.375\nv -0.234375 -0.226562 0.382763\nv -0.222863 -0.226562 0.375\nv -0.226562 -0.226562 0.379357\nv 0.394595 -0.226562 0.375\nv 0.398438 -0.226562 0.379184\nv 0.501959 -0.226562 0.375\nv 0.5 -0.226562 0.378822\nv -0.320492 -0.21875 0.375\nv -0.320312 -0.21875 0.375409\nv -0.234375 -0.21875 0.382455\nv -0.222743 -0.21875 0.375\nv -0.226562 -0.21875 0.379314\nv 0.394726 -0.21875 0.375\nv 0.398438 -0.21875 0.379467\nv 0.502208 -0.21875 0.375\nv 0.5 -0.21875 0.379905\nv -0.320739 -0.210938 0.375\nv -0.320312 -0.210938 0.375934\nv -0.234375 -0.210938 0.382376\nv -0.222719 -0.210938 0.375\nv -0.226562 -0.210938 0.379261\nv 0.39468 -0.210938 0.375\nv 0.398438 -0.210938 0.380008\nv 0.502711 -0.210938 0.375\nv 0.5 -0.210938 0.381771\nv -0.320857 -0.203125 0.375\nv -0.320312 -0.203125 0.376156\nv -0.234375 -0.203125 0.382201\nv -0.222748 -0.203125 0.375\nv -0.226562 -0.203125 0.379129\nv 0.39476 -0.203125 0.375\nv 0.398438 -0.203125 0.380563\nv 0.503209 -0.203125 0.375\nv -0.320524 -0.195312 0.375\nv -0.320312 -0.191969 0.375\nv -0.320312 -0.195312 0.375456\nv -0.234375 -0.195312 0.381961\nv -0.222902 -0.195312 0.375\nv -0.226562 -0.195312 0.378983\nv 0.395061 -0.195312 0.375\nv 0.398438 -0.195312 0.38094\nv 0.503763 -0.195312 0.375\nv -0.31998 -0.1875 0.375\nv -0.234375 -0.1875 0.381867\nv -0.223238 -0.1875 0.375\nv -0.226562 -0.1875 0.378662\nv 0.39514 -0.1875 0.375\nv 0.398438 -0.1875 0.381415\nv 0.504244 -0.1875 0.375\nv -0.319437 -0.179688 0.375\nv -0.234375 -0.179688 0.382058\nv -0.223385 -0.179688 0.375\nv -0.226562 -0.179688 0.378676\nv 0.395793 -0.179688 0.375\nv 0.398438 -0.179688 0.380388\nv 0.504444 -0.179688 0.375\nv -0.318795 -0.171875 0.375\nv -0.234375 -0.171875 0.382281\nv -0.223392 -0.171875 0.375\nv -0.226562 -0.171875 0.378685\nv 0.396333 -0.171875 0.375\nv 0.398438 -0.171875 0.379419\nv 0.504277 -0.171875 0.375\nv -0.318309 -0.164062 0.375\nv -0.234375 -0.164062 0.382455\nv -0.223071 -0.164062 0.375\nv -0.226562 -0.164062 0.378902\nv 0.396741 -0.164062 0.375\nv 0.398438 -0.164062 0.378486\nv 0.504252 -0.164062 0.375\nv -0.317677 -0.15625 0.375\nv -0.234375 -0.15625 0.382751\nv -0.222786 -0.15625 0.375\nv -0.226562 -0.15625 0.379179\nv 0.397126 -0.15625 0.375\nv 0.398438 -0.15625 0.377536\nv 0.503721 -0.15625 0.375\nv -0.3169 -0.148438 0.375\nv -0.3125 -0.148438 0.38254\nv -0.234375 -0.148438 0.382695\nv -0.222441 -0.148438 0.375\nv -0.226562 -0.148438 0.379103\nv 0.397544 -0.148438 0.375\nv 0.398438 -0.148438 0.376498\nv 0.503029 -0.148438 0.375\nv -0.315945 -0.140625 0.375\nv -0.3125 -0.140625 0.381992\nv -0.234375 -0.140625 0.382571\nv -0.222318 -0.140625 0.375\nv -0.226562 -0.140625 0.379036\nv 0.398287 -0.140625 0.375\nv 0.398438 -0.140625 0.375258\nv 0.502384 -0.140625 0.375\nv -0.315455 -0.132812 0.375\nv -0.3125 -0.132812 0.381066\nv -0.234375 -0.132812 0.38253\nv -0.222265 -0.132812 0.375\nv -0.226562 -0.132812 0.3791\nv 0.397764 -0.132812 0.375\nv 0.398438 -0.132812 0.376165\nv 0.501464 -0.132812 0.375\nv 0.5 -0.132812 0.382446\nv -0.315149 -0.125 0.375\nv -0.3125 -0.125 0.380326\nv -0.234375 -0.125 0.382508\nv -0.222321 -0.125 0.375\nv -0.226562 -0.125 0.3787\nv 0.396976 -0.125 0.375\nv 0.398438 -0.125 0.377315\nv 0.500751 -0.125 0.375\nv 0.5 -0.125 0.379088\nv -0.314913 -0.117188 0.375\nv -0.3125 -0.117188 0.380015\nv -0.234375 -0.117188 0.38238\nv -0.22194 -0.117188 0.375\nv -0.226562 -0.117188 0.378442\nv 0.396582 -0.117188 0.375\nv 0.398438 -0.117188 0.378051\nv 0.500086 -0.117188 0.375\nv 0.5 -0.117188 0.375539\nv -0.314619 -0.109375 0.375\nv -0.3125 -0.109375 0.379784\nv -0.234375 -0.109375 0.381991\nv -0.221566 -0.109375 0.375\nv -0.226562 -0.109375 0.378281\nv 0.396157 -0.109375 0.375\nv 0.398438 -0.109375 0.378625\nv 0.500088 -0.109375 0.375\nv 0.5 -0.109375 0.375507\nv -0.314254 -0.101562 0.375\nv -0.3125 -0.101562 0.378892\nv -0.234375 -0.101562 0.381967\nv -0.220857 -0.101562 0.375\nv -0.226562 -0.101562 0.378513\nv 0.395165 -0.101562 0.375\nv 0.398438 -0.101562 0.379604\nv 0.500163 -0.101562 0.375\nv 0.5 -0.101562 0.375812\nv -0.314119 -0.09375 0.375\nv -0.3125 -0.09375 0.378465\nv -0.234375 -0.09375 0.381943\nv -0.219962 -0.09375 0.375\nv -0.226562 -0.09375 0.378847\nv -0.21875 -0.0885634 0.375\nv 0.39213 -0.09375 0.375\nv 0.390625 -0.0881329 0.375\nv 0.398438 -0.09375 0.381185\nv 0.500869 -0.09375 0.375\nv 0.5 -0.09375 0.3786\nv -0.314596 -0.0859375 0.375\nv -0.3125 -0.0859375 0.379134\nv -0.234375 -0.0859375 0.38174\nv -0.226562 -0.0859375 0.379182\nv -0.218177 -0.0859375 0.375\nv -0.21875 -0.0859375 0.375352\nv 0.390085 -0.0859375 0.375\nv 0.390625 -0.0859375 0.375753\nv 0.398438 -0.0859375 0.381051\nv 0.501858 -0.0859375 0.375\nv 0.5 -0.0859375 0.381719\nv -0.315519 -0.078125 0.375\nv -0.3125 -0.078125 0.380388\nv -0.234375 -0.078125 0.382078\nv -0.226562 -0.078125 0.379983\nv -0.21481 -0.078125 0.375\nv -0.21875 -0.078125 0.376985\nv -0.210938 -0.0705456 0.375\nv 0.388431 -0.078125 0.375\nv 0.390625 -0.078125 0.377235\nv 0.398438 -0.078125 0.381171\nv 0.503163 -0.078125 0.375\nv -0.316278 -0.0703125 0.375\nv -0.3125 -0.0703125 0.381307\nv -0.226562 -0.0703125 0.381322\nv -0.21875 -0.0703125 0.378721\nv -0.210832 -0.0703125 0.375\nv -0.210938 -0.0703125 0.375065\nv 0.384198 -0.0703125 0.375\nv 0.382812 -0.0685574 0.375\nv 0.390625 -0.0703125 0.378457\nv 0.398438 -0.0703125 0.381283\nv 0.40625 -0.0703125 0.382727\nv 0.503468 -0.0703125 0.375\nv -0.316319 -0.0625 0.375\nv -0.3125 -0.0625 0.381546\nv -0.226562 -0.0625 0.381813\nv -0.21875 -0.0625 0.379127\nv -0.20861 -0.0625 0.375\nv -0.210938 -0.0625 0.376169\nv 0.379544 -0.0625 0.375\nv 0.382812 -0.0625 0.377293\nv 0.390625 -0.0625 0.380412\nv 0.398438 -0.0625 0.382119\nv 0.503449 -0.0625 0.375\nv -0.315874 -0.0546875 0.375\nv -0.3125 -0.0546875 0.380593\nv -0.226562 -0.0546875 0.381948\nv -0.21875 -0.0546875 0.379278\nv -0.204908 -0.0546875 0.375\nv -0.210938 -0.0546875 0.37658\nv -0.203125 -0.0530793 0.375\nv -0.195312 -0.050464 0.375\nv -0.1875 -0.0498251 0.375\nv -0.179688 -0.0494136 0.375\nv -0.171875 -0.0492222 0.375\nv -0.164062 -0.0497622 0.375\nv -0.15625 -0.0497792 0.375\nv -0.148438 -0.0483023 0.375\nv -0.140625 -0.0471499 0.375\nv -0.132812 -0.0475849 0.375\nv -0.125 -0.0480282 0.375\nv -0.117188 -0.0476615 0.375\nv -0.109375 -0.0469136 0.375\nv 0.09375 -0.0469725 0.375\nv 0.101562 -0.0484695 0.375\nv 0.109375 -0.0495479 0.375\nv 0.117188 -0.0498495 0.375\nv 0.125 -0.050058 0.375\nv 0.132812 -0.0503875 0.375\nv 0.140625 -0.050715 0.375\nv 0.148438 -0.0509041 0.375\nv 0.15625 -0.0510529 0.375\nv 0.164062 -0.0512526 0.375\nv 0.171875 -0.0512742 0.375\nv 0.179688 -0.0506714 0.375\nv 0.1875 -0.0501167 0.375\nv 0.195312 -0.0497178 0.375\nv 0.203125 -0.0493543 0.375\nv 0.210938 -0.0490458 0.375\nv 0.21875 -0.0485792 0.375\nv 0.226562 -0.0479923 0.375\nv 0.234375 -0.0474663 0.375\nv 0.242188 -0.0470563 0.375\nv 0.296875 -0.0473617 0.375\nv 0.304688 -0.0473023 0.375\nv 0.3125 -0.0472293 0.375\nv 0.320312 -0.0474674 0.375\nv 0.328125 -0.0477052 0.375\nv 0.335938 -0.0470565 0.375\nv 0.367188 -0.0475869 0.375\nv 0.376269 -0.0546875 0.375\nv 0.375 -0.0525204 0.375\nv 0.382812 -0.0546875 0.378118\nv 0.390625 -0.0546875 0.381112\nv 0.398438 -0.0546875 0.382556\nv 0.503491 -0.0546875 0.375\nv -0.315224 -0.046875 0.375\nv -0.3125 -0.046875 0.379362\nv -0.226562 -0.046875 0.382288\nv -0.21875 -0.046875 0.379804\nv -0.210938 -0.046875 0.377438\nv -0.203125 -0.046875 0.376478\nv -0.195312 -0.046875 0.376343\nv -0.1875 -0.046875 0.376185\nv -0.179688 -0.046875 0.376053\nv -0.171875 -0.046875 0.375947\nv -0.164062 -0.046875 0.376133\nv -0.15625 -0.046875 0.376159\nv -0.148438 -0.046875 0.37553\nv -0.140625 -0.046875 0.375103\nv -0.132812 -0.046875 0.375266\nv -0.125 -0.046875 0.375422\nv -0.117188 -0.046875 0.375309\nv -0.108983 -0.046875 0.375\nv -0.109375 -0.046875 0.375015\nv -0.101562 -0.0459287 0.375\nv -0.09375 -0.044655 0.375\nv -0.0859375 -0.0432293 0.375\nv -0.078125 -0.0419182 0.375\nv -0.0703125 -0.0408743 0.375\nv -0.0625 -0.0402187 0.375\nv -0.0546875 -0.0400101 0.375\nv -0.046875 -0.0397632 0.375\nv -0.0390625 -0.0403374 0.375\nv -0.03125 -0.0412647 0.375\nv -0.0234375 -0.0421599 0.375\nv -0.015625 -0.0426252 0.375\nv -0.0078125 -0.0427284 0.375\nv 0 -0.0436291 0.375\nv 0.0078125 -0.045007 0.375\nv 0.015625 -0.0464849 0.375\nv 0.0234375 -0.0459379 0.375\nv 0.03125 -0.0456291 0.375\nv 0.0390625 -0.045152 0.375\nv 0.046875 -0.0448161 0.375\nv 0.0546875 -0.0446762 0.375\nv 0.0625 -0.0445748 0.375\nv 0.0703125 -0.0442306 0.375\nv 0.078125 -0.0445149 0.375\nv 0.0930169 -0.046875 0.375\nv 0.0859375 -0.0456739 0.375\nv 0.09375 -0.046875 0.375031\nv 0.101562 -0.046875 0.375507\nv 0.109375 -0.046875 0.375949\nv 0.117188 -0.046875 0.376095\nv 0.125 -0.046875 0.37618\nv 0.132812 -0.046875 0.376288\nv 0.140625 -0.046875 0.376387\nv 0.148438 -0.046875 0.376427\nv 0.15625 -0.046875 0.376463\nv 0.164062 -0.046875 0.376589\nv 0.171875 -0.046875 0.376601\nv 0.179688 -0.046875 0.376408\nv 0.1875 -0.046875 0.376251\nv 0.195312 -0.046875 0.376125\nv 0.203125 -0.046875 0.375995\nv 0.210938 -0.046875 0.375886\nv 0.21875 -0.046875 0.3757\nv 0.226562 -0.046875 0.375462\nv 0.234375 -0.046875 0.375246\nv 0.249126 -0.046875 0.375\nv 0.242188 -0.046875 0.375076\nv 0.25 -0.0468468 0.375\nv 0.257812 -0.0468373 0.375\nv 0.265625 -0.0468358 0.375\nv 0.273438 -0.0465723 0.375\nv 0.28125 -0.0464723 0.375\nv 0.290054 -0.046875 0.375\nv 0.289062 -0.0467892 0.375\nv 0.296875 -0.046875 0.375189\nv 0.304688 -0.046875 0.37517\nv 0.3125 -0.046875 0.375144\nv 0.320312 -0.046875 0.375242\nv 0.328125 -0.046875 0.375374\nv 0.338123 -0.046875 0.375\nv 0.335938 -0.046875 0.375082\nv 0.34375 -0.0458418 0.375\nv 0.351562 -0.0456794 0.375\nv 0.360661 -0.046875 0.375\nv 0.359375 -0.0466621 0.375\nv 0.367188 -0.046875 0.375265\nv 0.375 -0.046875 0.376388\nv 0.382812 -0.046875 0.378769\nv 0.390625 -0.046875 0.381599\nv 0.5032 -0.046875 0.375\nv -0.315049 -0.0390625 0.375\nv -0.3125 -0.0390625 0.378527\nv -0.226562 -0.0390625 0.382486\nv -0.21875 -0.0390625 0.379931\nv -0.210938 -0.0390625 0.37823\nv -0.203125 -0.0390625 0.377841\nv -0.195312 -0.0390625 0.377972\nv -0.1875 -0.0390625 0.378146\nv -0.179688 -0.0390625 0.378369\nv -0.171875 -0.0390625 0.378465\nv -0.164062 -0.0390625 0.378748\nv -0.15625 -0.0390625 0.378524\nv -0.148438 -0.0390625 0.377845\nv -0.140625 -0.0390625 0.377484\nv -0.132812 -0.0390625 0.377821\nv -0.125 -0.0390625 0.377863\nv -0.117188 -0.0390625 0.377761\nv -0.109375 -0.0390625 0.377427\nv -0.101562 -0.0390625 0.377027\nv -0.09375 -0.0390625 0.376552\nv -0.0859375 -0.0390625 0.376074\nv -0.078125 -0.0390625 0.375675\nv -0.0703125 -0.0390625 0.37542\nv -0.0625 -0.0390625 0.375275\nv -0.0546875 -0.0390625 0.375227\nv -0.046875 -0.0390625 0.375166\nv -0.0390625 -0.0390625 0.375296\nv -0.03125 -0.0390625 0.375512\nv -0.0234375 -0.0390625 0.375713\nv -0.015625 -0.0390625 0.375804\nv -0.0078125 -0.0390625 0.375848\nv 0 -0.0390625 0.376033\nv 0.0078125 -0.0390625 0.376423\nv 0.015625 -0.0390625 0.376889\nv 0.0234375 -0.0390625 0.37678\nv 0.03125 -0.0390625 0.376727\nv 0.0390625 -0.0390625 0.37663\nv 0.046875 -0.0390625 0.376487\nv 0.0546875 -0.0390625 0.376458\nv 0.0625 -0.0390625 0.376416\nv 0.0703125 -0.0390625 0.376338\nv 0.078125 -0.0390625 0.376271\nv 0.0859375 -0.0390625 0.376498\nv 0.09375 -0.0390625 0.376779\nv 0.101562 -0.0390625 0.377105\nv 0.109375 -0.0390625 0.37749\nv 0.117188 -0.0390625 0.377722\nv 0.125 -0.0390625 0.377733\nv 0.132812 -0.0390625 0.377766\nv 0.140625 -0.0390625 0.377802\nv 0.148438 -0.0390625 0.377829\nv 0.15625 -0.0390625 0.377856\nv 0.164062 -0.0390625 0.377981\nv 0.171875 -0.0390625 0.377972\nv 0.179688 -0.0390625 0.377913\nv 0.1875 -0.0390625 0.377851\nv 0.195312 -0.0390625 0.377803\nv 0.203125 -0.0390625 0.37776\nv 0.210938 -0.0390625 0.377738\nv 0.21875 -0.0390625 0.377668\nv 0.226562 -0.0390625 0.377539\nv 0.234375 -0.0390625 0.377431\nv 0.242188 -0.0390625 0.377289\nv 0.25 -0.0390625 0.377218\nv 0.257812 -0.0390625 0.377216\nv 0.265625 -0.0390625 0.377242\nv 0.273438 -0.0390625 0.377302\nv 0.28125 -0.0390625 0.377362\nv 0.289062 -0.0390625 0.377303\nv 0.296875 -0.0390625 0.377137\nv 0.304688 -0.0390625 0.377003\nv 0.3125 -0.0390625 0.376948\nv 0.320312 -0.0390625 0.37699\nv 0.328125 -0.0390625 0.377091\nv 0.335938 -0.0390625 0.376805\nv 0.34375 -0.0390625 0.376355\nv 0.351562 -0.0390625 0.376362\nv 0.359375 -0.0390625 0.376677\nv 0.367188 -0.0390625 0.377108\nv 0.375 -0.0390625 0.377846\nv 0.382812 -0.0390625 0.379543\nv 0.390625 -0.0390625 0.381516\nv 0.502284 -0.0390625 0.375\nv 0.5 -0.0390625 0.382798\nv -0.31479 -0.03125 0.375\nv -0.3125 -0.03125 0.37804\nv -0.226562 -0.03125 0.382068\nv -0.21875 -0.03125 0.379494\nv -0.210938 -0.03125 0.378502\nv -0.203125 -0.03125 0.378459\nv -0.195312 -0.03125 0.378647\nv -0.1875 -0.03125 0.378861\nv -0.179688 -0.03125 0.379007\nv -0.171875 -0.03125 0.379268\nv -0.164062 -0.03125 0.379848\nv -0.15625 -0.03125 0.379695\nv -0.148438 -0.03125 0.379258\nv -0.140625 -0.03125 0.379041\nv -0.132812 -0.03125 0.379315\nv -0.125 -0.03125 0.379367\nv -0.117188 -0.03125 0.37932\nv -0.109375 -0.03125 0.378966\nv -0.101562 -0.03125 0.37859\nv -0.09375 -0.03125 0.378203\nv -0.0859375 -0.03125 0.377798\nv -0.078125 -0.03125 0.377496\nv -0.0703125 -0.03125 0.377365\nv -0.0625 -0.03125 0.37731\nv -0.0546875 -0.03125 0.377262\nv -0.046875 -0.03125 0.377242\nv -0.0390625 -0.03125 0.377288\nv -0.03125 -0.03125 0.377334\nv -0.0234375 -0.03125 0.377095\nv -0.015625 -0.03125 0.376892\nv -0.0078125 -0.03125 0.376713\nv 0 -0.03125 0.376809\nv 0.0078125 -0.03125 0.37713\nv 0.015625 -0.03125 0.377593\nv 0.0234375 -0.03125 0.377485\nv 0.03125 -0.03125 0.377382\nv 0.0390625 -0.03125 0.377259\nv 0.046875 -0.03125 0.377037\nv 0.0546875 -0.03125 0.37699\nv 0.0625 -0.03125 0.376952\nv 0.0703125 -0.03125 0.376896\nv 0.078125 -0.03125 0.376845\nv 0.0859375 -0.03125 0.376918\nv 0.09375 -0.03125 0.377193\nv 0.101562 -0.03125 0.377471\nv 0.109375 -0.03125 0.377823\nv 0.117188 -0.03125 0.37809\nv 0.125 -0.03125 0.378136\nv 0.132812 -0.03125 0.378151\nv 0.140625 -0.03125 0.378149\nv 0.148438 -0.03125 0.378141\nv 0.15625 -0.03125 0.378222\nv 0.164062 -0.03125 0.378289\nv 0.171875 -0.03125 0.378308\nv 0.179688 -0.03125 0.378311\nv 0.1875 -0.03125 0.37827\nv 0.195312 -0.03125 0.378251\nv 0.203125 -0.03125 0.378259\nv 0.210938 -0.03125 0.378261\nv 0.21875 -0.03125 0.378232\nv 0.226562 -0.03125 0.378124\nv 0.234375 -0.03125 0.378003\nv 0.242188 -0.03125 0.377883\nv 0.25 -0.03125 0.377822\nv 0.257812 -0.03125 0.377818\nv 0.265625 -0.03125 0.377777\nv 0.273438 -0.03125 0.377896\nv 0.28125 -0.03125 0.377949\nv 0.289062 -0.03125 0.377969\nv 0.296875 -0.03125 0.377897\nv 0.304688 -0.03125 0.377745\nv 0.3125 -0.03125 0.377564\nv 0.320312 -0.03125 0.377574\nv 0.328125 -0.03125 0.377622\nv 0.335938 -0.03125 0.377393\nv 0.34375 -0.03125 0.377054\nv 0.351562 -0.03125 0.377051\nv 0.359375 -0.03125 0.377346\nv 0.367188 -0.03125 0.377814\nv 0.375 -0.03125 0.378516\nv 0.382812 -0.03125 0.380053\nv 0.390625 -0.03125 0.381838\nv 0.398438 -0.03125 0.382573\nv 0.50125 -0.03125 0.375\nv 0.5 -0.0237807 0.375\nv 0.5 -0.03125 0.379357\nv -0.314691 -0.0234375 0.375\nv -0.3125 -0.0234375 0.377891\nv -0.226562 -0.0234375 0.381641\nv -0.21875 -0.0234375 0.379816\nv -0.210938 -0.0234375 0.378759\nv -0.203125 -0.0234375 0.378736\nv -0.195312 -0.0234375 0.37896\nv -0.1875 -0.0234375 0.379229\nv -0.179688 -0.0234375 0.379391\nv -0.171875 -0.0234375 0.37975\nv -0.164062 -0.0234375 0.380423\nv -0.15625 -0.0234375 0.380439\nv -0.148438 -0.0234375 0.380231\nv -0.140625 -0.0234375 0.380406\nv -0.132812 -0.0234375 0.380547\nv -0.125 -0.0234375 0.380527\nv -0.117188 -0.0234375 0.380355\nv -0.109375 -0.0234375 0.380023\nv -0.101562 -0.0234375 0.379636\nv -0.09375 -0.0234375 0.379274\nv -0.0859375 -0.0234375 0.378922\nv -0.078125 -0.0234375 0.378722\nv -0.0703125 -0.0234375 0.378676\nv -0.0625 -0.0234375 0.378617\nv -0.0546875 -0.0234375 0.378494\nv -0.046875 -0.0234375 0.378374\nv -0.0390625 -0.0234375 0.378231\nv -0.03125 -0.0234375 0.378049\nv -0.0234375 -0.0234375 0.377784\nv -0.015625 -0.0234375 0.377514\nv -0.0078125 -0.0234375 0.377302\nv 0 -0.0234375 0.377415\nv 0.0078125 -0.0234375 0.377668\nv 0.015625 -0.0234375 0.378095\nv 0.0234375 -0.0234375 0.378025\nv 0.03125 -0.0234375 0.377934\nv 0.0390625 -0.0234375 0.377816\nv 0.046875 -0.0234375 0.377627\nv 0.0546875 -0.0234375 0.37759\nv 0.0625 -0.0234375 0.377543\nv 0.0703125 -0.0234375 0.377476\nv 0.078125 -0.0234375 0.377414\nv 0.0859375 -0.0234375 0.377411\nv 0.09375 -0.0234375 0.377494\nv 0.101562 -0.0234375 0.377692\nv 0.109375 -0.0234375 0.37798\nv 0.117188 -0.0234375 0.378185\nv 0.125 -0.0234375 0.378304\nv 0.132812 -0.0234375 0.378346\nv 0.140625 -0.0234375 0.378396\nv 0.148438 -0.0234375 0.378432\nv 0.15625 -0.0234375 0.378619\nv 0.164062 -0.0234375 0.378707\nv 0.171875 -0.0234375 0.37877\nv 0.179688 -0.0234375 0.378845\nv 0.1875 -0.0234375 0.378886\nv 0.195312 -0.0234375 0.378897\nv 0.203125 -0.0234375 0.378934\nv 0.210938 -0.0234375 0.378972\nv 0.21875 -0.0234375 0.37897\nv 0.226562 -0.0234375 0.378862\nv 0.234375 -0.0234375 0.378718\nv 0.242188 -0.0234375 0.378602\nv 0.25 -0.0234375 0.378582\nv 0.257812 -0.0234375 0.378579\nv 0.265625 -0.0234375 0.378482\nv 0.273438 -0.0234375 0.378564\nv 0.28125 -0.0234375 0.378654\nv 0.289062 -0.0234375 0.37871\nv 0.296875 -0.0234375 0.378726\nv 0.304688 -0.0234375 0.378628\nv 0.3125 -0.0234375 0.378476\nv 0.320312 -0.0234375 0.378393\nv 0.328125 -0.0234375 0.378344\nv 0.335938 -0.0234375 0.378087\nv 0.34375 -0.0234375 0.3778\nv 0.351562 -0.0234375 0.377691\nv 0.359375 -0.0234375 0.377792\nv 0.367188 -0.0234375 0.378204\nv 0.375 -0.0234375 0.378844\nv 0.382812 -0.0234375 0.38039\nv 0.390625 -0.0234375 0.382108\nv 0.398438 -0.0234375 0.382567\nv 0.40625 -0.0234375 0.382727\nv 0.49993 -0.0234375 0.375\nv -0.314538 -0.015625 0.375\nv -0.3125 -0.015625 0.377516\nv -0.226562 -0.015625 0.381782\nv -0.21875 -0.015625 0.380196\nv -0.210938 -0.015625 0.379328\nv -0.203125 -0.015625 0.379119\nv -0.195312 -0.015625 0.379231\nv -0.1875 -0.015625 0.379405\nv -0.179688 -0.015625 0.379584\nv -0.171875 -0.015625 0.380058\nv -0.164062 -0.015625 0.380602\nv -0.15625 -0.015625 0.380682\nv -0.148438 -0.015625 0.380431\nv -0.140625 -0.015625 0.380438\nv -0.132812 -0.015625 0.380626\nv -0.125 -0.015625 0.380747\nv -0.117188 -0.015625 0.38066\nv -0.109375 -0.015625 0.380411\nv -0.101562 -0.015625 0.380128\nv -0.09375 -0.015625 0.379846\nv -0.0859375 -0.015625 0.379561\nv -0.078125 -0.015625 0.379366\nv -0.0703125 -0.015625 0.379376\nv -0.0625 -0.015625 0.3794\nv -0.0546875 -0.015625 0.379344\nv -0.046875 -0.015625 0.379183\nv -0.0390625 -0.015625 0.378936\nv -0.03125 -0.015625 0.378636\nv -0.0234375 -0.015625 0.378344\nv -0.015625 -0.015625 0.378031\nv -0.0078125 -0.015625 0.377838\nv 0 -0.015625 0.377992\nv 0.0078125 -0.015625 0.378198\nv 0.015625 -0.015625 0.378654\nv 0.0234375 -0.015625 0.378601\nv 0.03125 -0.015625 0.378486\nv 0.0390625 -0.015625 0.378381\nv 0.046875 -0.015625 0.378215\nv 0.0546875 -0.015625 0.378146\nv 0.0625 -0.015625 0.378095\nv 0.0703125 -0.015625 0.378019\nv 0.078125 -0.015625 0.377933\nv 0.0859375 -0.015625 0.377923\nv 0.09375 -0.015625 0.377947\nv 0.101562 -0.015625 0.378041\nv 0.109375 -0.015625 0.37832\nv 0.117188 -0.015625 0.378542\nv 0.125 -0.015625 0.378719\nv 0.132812 -0.015625 0.378749\nv 0.140625 -0.015625 0.37872\nv 0.148438 -0.015625 0.378773\nv 0.15625 -0.015625 0.378817\nv 0.164062 -0.015625 0.378789\nv 0.171875 -0.015625 0.37877\nv 0.179688 -0.015625 0.37881\nv 0.1875 -0.015625 0.378871\nv 0.195312 -0.015625 0.378848\nv 0.203125 -0.015625 0.378857\nv 0.210938 -0.015625 0.378896\nv 0.21875 -0.015625 0.378909\nv 0.226562 -0.015625 0.378818\nv 0.234375 -0.015625 0.378705\nv 0.242188 -0.015625 0.378612\nv 0.25 -0.015625 0.378656\nv 0.257812 -0.015625 0.378731\nv 0.265625 -0.015625 0.378684\nv 0.273438 -0.015625 0.37881\nv 0.28125 -0.015625 0.378928\nv 0.289062 -0.015625 0.378966\nv 0.296875 -0.015625 0.378955\nv 0.304688 -0.015625 0.378834\nv 0.3125 -0.015625 0.378647\nv 0.320312 -0.015625 0.378559\nv 0.328125 -0.015625 0.378452\nv 0.335938 -0.015625 0.378063\nv 0.34375 -0.015625 0.377678\nv 0.351562 -0.015625 0.377657\nv 0.359375 -0.015625 0.377789\nv 0.367188 -0.015625 0.378096\nv 0.375 -0.015625 0.378602\nv 0.382812 -0.015625 0.380047\nv 0.390625 -0.015625 0.38142\nv 0.398438 -0.015625 0.381685\nv 0.40625 -0.015625 0.38178\nv 0.414062 -0.015625 0.381689\nv 0.421875 -0.015625 0.381955\nv 0.429688 -0.015625 0.382239\nv 0.4375 -0.015625 0.382142\nv 0.445312 -0.015625 0.382474\nv 0.498794 -0.015625 0.375\nv 0.492188 -0.015625 0.382599\nv -0.313904 -0.0078125 0.375\nv -0.3125 -0.0078125 0.376793\nv -0.304688 -0.0078125 0.382177\nv -0.226562 -0.0078125 0.381834\nv -0.21875 -0.0078125 0.380107\nv -0.210938 -0.0078125 0.379439\nv -0.203125 -0.0078125 0.379086\nv -0.195312 -0.0078125 0.378951\nv -0.1875 -0.0078125 0.379187\nv -0.179688 -0.0078125 0.379458\nv -0.171875 -0.0078125 0.379782\nv -0.164062 -0.0078125 0.380281\nv -0.15625 -0.0078125 0.380283\nv -0.148438 -0.0078125 0.379918\nv -0.140625 -0.0078125 0.379745\nv -0.132812 -0.0078125 0.379905\nv -0.125 -0.0078125 0.380078\nv -0.117188 -0.0078125 0.380249\nv -0.109375 -0.0078125 0.380154\nv -0.101562 -0.0078125 0.379973\nv -0.09375 -0.0078125 0.37976\nv -0.0859375 -0.0078125 0.379518\nv -0.078125 -0.0078125 0.37934\nv -0.0703125 -0.0078125 0.379318\nv -0.0625 -0.0078125 0.37933\nv -0.0546875 -0.0078125 0.379287\nv -0.046875 -0.0078125 0.379148\nv -0.0390625 -0.0078125 0.378979\nv -0.03125 -0.0078125 0.378687\nv -0.0234375 -0.0078125 0.378359\nv -0.015625 -0.0078125 0.378088\nv -0.0078125 -0.0078125 0.377967\nv 0 -0.0078125 0.378165\nv 0.0078125 -0.0078125 0.378381\nv 0.015625 -0.0078125 0.378699\nv 0.0234375 -0.0078125 0.378643\nv 0.03125 -0.0078125 0.378475\nv 0.0390625 -0.0078125 0.378362\nv 0.046875 -0.0078125 0.378206\nv 0.0546875 -0.0078125 0.378055\nv 0.0625 -0.0078125 0.377929\nv 0.0703125 -0.0078125 0.377819\nv 0.078125 -0.0078125 0.377705\nv 0.0859375 -0.0078125 0.377711\nv 0.09375 -0.0078125 0.377759\nv 0.101562 -0.0078125 0.377807\nv 0.109375 -0.0078125 0.378024\nv 0.117188 -0.0078125 0.3782\nv 0.125 -0.0078125 0.378352\nv 0.132812 -0.0078125 0.378415\nv 0.140625 -0.0078125 0.378407\nv 0.148438 -0.0078125 0.378462\nv 0.15625 -0.0078125 0.378473\nv 0.164062 -0.0078125 0.378426\nv 0.171875 -0.0078125 0.378345\nv 0.179688 -0.0078125 0.378319\nv 0.1875 -0.0078125 0.378348\nv 0.195312 -0.0078125 0.37832\nv 0.203125 -0.0078125 0.378304\nv 0.210938 -0.0078125 0.378284\nv 0.21875 -0.0078125 0.378281\nv 0.226562 -0.0078125 0.3782\nv 0.234375 -0.0078125 0.378081\nv 0.242188 -0.0078125 0.377979\nv 0.25 -0.0078125 0.378059\nv 0.257812 -0.0078125 0.37817\nv 0.265625 -0.0078125 0.378139\nv 0.273438 -0.0078125 0.378255\nv 0.28125 -0.0078125 0.37843\nv 0.289062 -0.0078125 0.378436\nv 0.296875 -0.0078125 0.378454\nv 0.304688 -0.0078125 0.378436\nv 0.3125 -0.0078125 0.378364\nv 0.320312 -0.0078125 0.37834\nv 0.328125 -0.0078125 0.378257\nv 0.335938 -0.0078125 0.37785\nv 0.34375 -0.0078125 0.377446\nv 0.351562 -0.0078125 0.377475\nv 0.359375 -0.0078125 0.377626\nv 0.367188 -0.0078125 0.378\nv 0.375 -0.0078125 0.378458\nv 0.382812 -0.0078125 0.379476\nv 0.390625 -0.0078125 0.380572\nv 0.398438 -0.0078125 0.380841\nv 0.40625 -0.0078125 0.380738\nv 0.414062 -0.0078125 0.380406\nv 0.421875 -0.0078125 0.380363\nv 0.429688 -0.0078125 0.380999\nv 0.4375 -0.0078125 0.381156\nv 0.445312 -0.0078125 0.381525\nv 0.453125 -0.0078125 0.38194\nv 0.460938 -0.0078125 0.382255\nv 0.46875 -0.0078125 0.382635\nv 0.498243 -0.0078125 0.375\nv 0.492188 -0.0078125 0.381424\nv -0.31357 0 0.375\nv -0.3125 0 0.3765\nv -0.304688 0 0.381956\nv -0.226562 0 0.381737\nv -0.21875 0 0.380358\nv -0.210938 0 0.379475\nv -0.203125 0 0.378757\nv -0.195312 0 0.378183\nv -0.1875 0 0.37803\nv -0.179688 0 0.378111\nv -0.171875 0 0.378416\nv -0.164062 0 0.378796\nv -0.15625 0 0.378883\nv -0.148438 0 0.378571\nv -0.140625 0 0.37856\nv -0.132812 0 0.378617\nv -0.125 0 0.378894\nv -0.117188 0 0.379149\nv -0.109375 0 0.379153\nv -0.101562 0 0.379104\nv -0.09375 0 0.378972\nv -0.0859375 0 0.378829\nv -0.078125 0 0.378725\nv -0.0703125 0 0.378733\nv -0.0625 0 0.378749\nv -0.0546875 0 0.378676\nv -0.046875 0 0.378471\nv -0.0390625 0 0.37826\nv -0.03125 0 0.377962\nv -0.0234375 0 0.37767\nv -0.015625 0 0.37738\nv -0.0078125 0 0.37724\nv 0 0 0.37746\nv 0.0078125 0 0.377674\nv 0.015625 0 0.377914\nv 0.0234375 0 0.37785\nv 0.03125 0 0.377707\nv 0.0390625 0 0.37758\nv 0.046875 0 0.377419\nv 0.0546875 0 0.377287\nv 0.0625 0 0.377207\nv 0.0703125 0 0.377113\nv 0.078125 0 0.376985\nv 0.0859375 0 0.376971\nv 0.09375 0 0.377041\nv 0.101562 0 0.377083\nv 0.109375 0 0.377234\nv 0.117188 0 0.377497\nv 0.125 0 0.377561\nv 0.132812 0 0.377591\nv 0.140625 0 0.377637\nv 0.148438 0 0.377664\nv 0.15625 0 0.377623\nv 0.164062 0 0.377547\nv 0.171875 0 0.377413\nv 0.179688 0 0.377394\nv 0.1875 0 0.377421\nv 0.195312 0 0.377455\nv 0.203125 0 0.377383\nv 0.210938 0 0.377304\nv 0.21875 0 0.377215\nv 0.226562 0 0.377153\nv 0.234375 0 0.377082\nv 0.242188 0 0.37703\nv 0.25 0 0.377125\nv 0.257812 0 0.377224\nv 0.265625 0 0.3772\nv 0.273438 0 0.377297\nv 0.28125 0 0.377431\nv 0.289062 0 0.377455\nv 0.296875 0 0.377439\nv 0.304688 0 0.377432\nv 0.3125 0 0.377402\nv 0.320312 0 0.377476\nv 0.328125 0 0.377455\nv 0.335938 0 0.377187\nv 0.34375 0 0.376996\nv 0.351562 0 0.377138\nv 0.359375 0 0.377601\nv 0.367188 0 0.378126\nv 0.375 0 0.378498\nv 0.382812 0 0.378892\nv 0.390625 0 0.379614\nv 0.398438 0 0.379821\nv 0.40625 0 0.379721\nv 0.414062 0 0.379379\nv 0.421875 0 0.379115\nv 0.429688 0 0.379703\nv 0.4375 0 0.380091\nv 0.445312 0 0.380767\nv 0.453125 0 0.381097\nv 0.460938 0 0.381474\nv 0.46875 0 0.38194\nv 0.484375 0 0.382621\nv 0.497934 0 0.375\nv 0.492188 0 0.380314\nv -0.31346 0.0078125 0.375\nv -0.3125 0.0078125 0.376335\nv -0.304688 0.0078125 0.381968\nv -0.234375 0.0078125 0.382641\nv -0.226562 0.0078125 0.381214\nv -0.21875 0.0078125 0.379985\nv -0.210938 0.0078125 0.379121\nv -0.203125 0.0078125 0.378296\nv -0.195312 0.0078125 0.377677\nv -0.1875 0.0078125 0.377241\nv -0.179688 0.0078125 0.377021\nv -0.171875 0.0078125 0.377045\nv -0.164062 0.0078125 0.377342\nv -0.15625 0.0078125 0.37747\nv -0.148438 0.0078125 0.377369\nv -0.140625 0.0078125 0.377437\nv -0.132812 0.0078125 0.377559\nv -0.125 0.0078125 0.377845\nv -0.117188 0.0078125 0.378225\nv -0.109375 0.0078125 0.378437\nv -0.101562 0.0078125 0.37859\nv -0.09375 0.0078125 0.378642\nv -0.0859375 0.0078125 0.378637\nv -0.078125 0.0078125 0.378632\nv -0.0703125 0.0078125 0.378701\nv -0.0625 0.0078125 0.378756\nv -0.0546875 0.0078125 0.378738\nv -0.046875 0.0078125 0.37866\nv -0.0390625 0.0078125 0.378553\nv -0.03125 0.0078125 0.378363\nv -0.0234375 0.0078125 0.378192\nv -0.015625 0.0078125 0.377983\nv -0.0078125 0.0078125 0.377914\nv 0 0.0078125 0.378135\nv 0.0078125 0.0078125 0.378365\nv 0.015625 0.0078125 0.378505\nv 0.0234375 0.0078125 0.378394\nv 0.03125 0.0078125 0.37829\nv 0.0390625 0.0078125 0.378115\nv 0.046875 0.0078125 0.377921\nv 0.0546875 0.0078125 0.377699\nv 0.0625 0.0078125 0.377566\nv 0.0703125 0.0078125 0.377406\nv 0.078125 0.0078125 0.377163\nv 0.0859375 0.0078125 0.377083\nv 0.09375 0.0078125 0.377104\nv 0.101562 0.0078125 0.377087\nv 0.109375 0.0078125 0.377092\nv 0.117188 0.0078125 0.377071\nv 0.125 0.0078125 0.377089\nv 0.132812 0.0078125 0.377127\nv 0.140625 0.0078125 0.377213\nv 0.148438 0.0078125 0.377198\nv 0.15625 0.0078125 0.377136\nv 0.164062 0.0078125 0.377074\nv 0.171875 0.0078125 0.376932\nv 0.179688 0.0078125 0.376906\nv 0.1875 0.0078125 0.376929\nv 0.195312 0.0078125 0.376942\nv 0.203125 0.0078125 0.376896\nv 0.210938 0.0078125 0.376802\nv 0.21875 0.0078125 0.37672\nv 0.226562 0.0078125 0.376597\nv 0.234375 0.0078125 0.376434\nv 0.242188 0.0078125 0.376306\nv 0.25 0.0078125 0.376408\nv 0.257812 0.0078125 0.376518\nv 0.265625 0.0078125 0.376504\nv 0.273438 0.0078125 0.376565\nv 0.28125 0.0078125 0.376673\nv 0.289062 0.0078125 0.376603\nv 0.296875 0.0078125 0.376481\nv 0.304688 0.0078125 0.376345\nv 0.3125 0.0078125 0.376202\nv 0.320312 0.0078125 0.376097\nv 0.328125 0.0078125 0.375916\nv 0.335938 0.0078125 0.375644\nv 0.34375 0.0078125 0.375762\nv 0.351562 0.0078125 0.376321\nv 0.359375 0.0078125 0.376895\nv 0.367188 0.0078125 0.37742\nv 0.375 0.0078125 0.37792\nv 0.382812 0.0078125 0.37845\nv 0.390625 0.0078125 0.378958\nv 0.398438 0.0078125 0.379166\nv 0.40625 0.0078125 0.37911\nv 0.414062 0.0078125 0.378691\nv 0.421875 0.0078125 0.378048\nv 0.429688 0.0078125 0.378324\nv 0.4375 0.0078125 0.379061\nv 0.445312 0.0078125 0.380179\nv 0.453125 0.0078125 0.380766\nv 0.460938 0.0078125 0.381518\nv 0.46875 0.0078125 0.3821\nv 0.484375 0.0078125 0.38179\nv 0.497609 0.0078125 0.375\nv 0.492188 0.0078125 0.379647\nv -0.314097 0.015625 0.375\nv -0.3125 0.015625 0.377249\nv -0.304688 0.015625 0.382516\nv -0.226562 0.015625 0.381191\nv -0.21875 0.015625 0.379622\nv -0.210938 0.015625 0.378864\nv -0.203125 0.015625 0.378216\nv -0.195312 0.015625 0.377667\nv -0.1875 0.015625 0.377463\nv -0.179688 0.015625 0.377221\nv -0.171875 0.015625 0.376861\nv -0.164062 0.015625 0.376931\nv -0.15625 0.015625 0.376759\nv -0.148438 0.015625 0.376599\nv -0.140625 0.015625 0.376616\nv -0.132812 0.015625 0.376789\nv -0.125 0.015625 0.377044\nv -0.117188 0.015625 0.377468\nv -0.109375 0.015625 0.377794\nv -0.101562 0.015625 0.378027\nv -0.09375 0.015625 0.37818\nv -0.0859375 0.015625 0.378071\nv -0.078125 0.015625 0.378053\nv -0.0703125 0.015625 0.378196\nv -0.0625 0.015625 0.37829\nv -0.0546875 0.015625 0.378287\nv -0.046875 0.015625 0.37825\nv -0.0390625 0.015625 0.378201\nv -0.03125 0.015625 0.378147\nv -0.0234375 0.015625 0.378114\nv -0.015625 0.015625 0.378022\nv -0.0078125 0.015625 0.378023\nv 0 0.015625 0.378288\nv 0.0078125 0.015625 0.378557\nv 0.015625 0.015625 0.3786\nv 0.0234375 0.015625 0.378313\nv 0.03125 0.015625 0.378124\nv 0.0390625 0.015625 0.377918\nv 0.046875 0.015625 0.37774\nv 0.0546875 0.015625 0.377526\nv 0.0625 0.015625 0.377409\nv 0.0703125 0.015625 0.377278\nv 0.078125 0.015625 0.377039\nv 0.0859375 0.015625 0.376964\nv 0.09375 0.015625 0.377001\nv 0.101562 0.015625 0.377064\nv 0.109375 0.015625 0.377062\nv 0.117188 0.015625 0.376999\nv 0.125 0.015625 0.376925\nv 0.132812 0.015625 0.376931\nv 0.140625 0.015625 0.376992\nv 0.148438 0.015625 0.376922\nv 0.15625 0.015625 0.376831\nv 0.164062 0.015625 0.376704\nv 0.171875 0.015625 0.376515\nv 0.179688 0.015625 0.376428\nv 0.1875 0.015625 0.376349\nv 0.195312 0.015625 0.376253\nv 0.203125 0.0226401 0.375\nv 0.203125 0.015625 0.376165\nv 0.210938 0.0219343 0.375\nv 0.210938 0.015625 0.376078\nv 0.21875 0.0210075 0.375\nv 0.21875 0.015625 0.375974\nv 0.226562 0.0199442 0.375\nv 0.226562 0.015625 0.375799\nv 0.234375 0.0187518 0.375\nv 0.234375 0.015625 0.375572\nv 0.242188 0.0177334 0.375\nv 0.242188 0.015625 0.375397\nv 0.25 0.01779 0.375\nv 0.25 0.015625 0.375421\nv 0.257812 0.0176942 0.375\nv 0.257812 0.015625 0.375415\nv 0.265625 0.016932 0.375\nv 0.265625 0.015625 0.375261\nv 0.273438 0.0169227 0.375\nv 0.273438 0.015625 0.375248\nv 0.28125 0.01761 0.375\nv 0.28125 0.015625 0.375383\nv 0.289062 0.0172498 0.375\nv 0.289062 0.015625 0.37529\nv 0.296875 0.0166321 0.375\nv 0.296875 0.015625 0.375148\nv 0.304688 0.0162918 0.375\nv 0.304688 0.015625 0.375078\nv 0.3125 0.0172737 0.375\nv 0.3125 0.015625 0.375137\nv 0.320312 0.019662 0.375\nv 0.320312 0.015625 0.375285\nv 0.328125 0.0214149 0.375\nv 0.328125 0.015625 0.375367\nv 0.335938 0.0180096 0.375\nv 0.335938 0.015625 0.375171\nv 0.34375 0.0158602 0.375\nv 0.34375 0.015625 0.375019\nv 0.351562 0.0194143 0.375\nv 0.351562 0.015625 0.375374\nv 0.359375 0.023347 0.375\nv 0.359375 0.015625 0.375916\nv 0.367188 0.015625 0.37646\nv 0.375 0.015625 0.376911\nv 0.382812 0.015625 0.377504\nv 0.390625 0.015625 0.378103\nv 0.398438 0.015625 0.37866\nv 0.40625 0.015625 0.378569\nv 0.414062 0.015625 0.378265\nv 0.421875 0.015625 0.377564\nv 0.429688 0.015625 0.377518\nv 0.4375 0.015625 0.37885\nv 0.445312 0.015625 0.380251\nv 0.453125 0.015625 0.380926\nv 0.460938 0.015625 0.381815\nv 0.46875 0.015625 0.382266\nv 0.476562 0.015625 0.382799\nv 0.484375 0.015625 0.381277\nv 0.497455 0.015625 0.375\nv 0.492188 0.015625 0.379747\nv -0.315021 0.0234375 0.375\nv -0.3125 0.0234375 0.378597\nv -0.226562 0.0234375 0.381471\nv -0.21875 0.0234375 0.379546\nv -0.210938 0.0234375 0.378869\nv -0.203125 0.0234375 0.378262\nv -0.195312 0.0234375 0.378047\nv -0.1875 0.0234375 0.377968\nv -0.179688 0.0234375 0.377786\nv -0.171875 0.0234375 0.377422\nv -0.164062 0.0234375 0.377073\nv -0.15625 0.0234375 0.377112\nv -0.148438 0.0234375 0.376996\nv -0.140625 0.0234375 0.377049\nv -0.132812 0.0234375 0.377158\nv -0.125 0.0234375 0.377313\nv -0.117188 0.0234375 0.377525\nv -0.109375 0.0234375 0.377637\nv -0.101562 0.0234375 0.377817\nv -0.09375 0.0234375 0.377954\nv -0.0859375 0.0234375 0.377918\nv -0.078125 0.0234375 0.377966\nv -0.0703125 0.0234375 0.378092\nv -0.0625 0.0234375 0.378163\nv -0.0546875 0.0234375 0.378079\nv -0.046875 0.0234375 0.377967\nv -0.0390625 0.0234375 0.377883\nv -0.03125 0.0234375 0.377851\nv -0.0234375 0.0234375 0.377856\nv -0.015625 0.0234375 0.37781\nv -0.0078125 0.0234375 0.377885\nv 0 0.0234375 0.378279\nv 0.0078125 0.0234375 0.378723\nv 0.015625 0.0234375 0.378766\nv 0.0234375 0.0234375 0.378452\nv 0.03125 0.0234375 0.378147\nv 0.0390625 0.0234375 0.377916\nv 0.046875 0.0234375 0.377695\nv 0.0546875 0.0234375 0.377456\nv 0.0625 0.0234375 0.377318\nv 0.0703125 0.0234375 0.377181\nv 0.078125 0.0234375 0.376916\nv 0.0859375 0.0234375 0.376796\nv 0.09375 0.0234375 0.37684\nv 0.101562 0.0234375 0.376886\nv 0.109375 0.0234375 0.376838\nv 0.117188 0.0234375 0.376742\nv 0.125 0.0234375 0.376633\nv 0.132812 0.0234375 0.376607\nv 0.140625 0.0234375 0.376507\nv 0.148438 0.0305441 0.375\nv 0.148438 0.0234375 0.37634\nv 0.15625 0.0292728 0.375\nv 0.15625 0.0234375 0.376134\nv 0.164062 0.0279184 0.375\nv 0.164062 0.0234375 0.375892\nv 0.171875 0.026141 0.375\nv 0.171875 0.0234375 0.375547\nv 0.179688 0.0250461 0.375\nv 0.179688 0.0234375 0.375339\nv 0.1875 0.0242993 0.375\nv 0.1875 0.0234375 0.375182\nv 0.195946 0.0234375 0.375\nv 0.195312 0.0234968 0.375\nv 0.195312 0.0234375 0.375012\nv 0.359601 0.0234375 0.375\nv 0.367188 0.0282389 0.375\nv 0.367188 0.0234375 0.375395\nv 0.375 0.0234375 0.375946\nv 0.382812 0.0234375 0.376849\nv 0.390625 0.0234375 0.377707\nv 0.398438 0.0234375 0.378528\nv 0.40625 0.0234375 0.378738\nv 0.414062 0.0234375 0.378691\nv 0.421875 0.0234375 0.378235\nv 0.429688 0.0234375 0.377998\nv 0.4375 0.0234375 0.37872\nv 0.445312 0.0234375 0.38001\nv 0.453125 0.0234375 0.38081\nv 0.460938 0.0234375 0.381671\nv 0.46875 0.0234375 0.382434\nv 0.476562 0.0234375 0.382545\nv 0.484375 0.0234375 0.381216\nv 0.496956 0.0234375 0.375\nv 0.492188 0.0234375 0.379031\nv -0.315896 0.03125 0.375\nv -0.3125 0.03125 0.380234\nv -0.226562 0.03125 0.38216\nv -0.21875 0.03125 0.380573\nv -0.210938 0.03125 0.379354\nv -0.203125 0.03125 0.378665\nv -0.195312 0.03125 0.378429\nv -0.1875 0.03125 0.37839\nv -0.179688 0.03125 0.378309\nv -0.171875 0.03125 0.378042\nv -0.164062 0.03125 0.377679\nv -0.15625 0.03125 0.377421\nv -0.148438 0.03125 0.377113\nv -0.140625 0.03125 0.37701\nv -0.132812 0.03125 0.376918\nv -0.125 0.0384907 0.375\nv -0.125 0.03125 0.377013\nv -0.117188 0.0383894 0.375\nv -0.117188 0.03125 0.377106\nv -0.109375 0.0381108 0.375\nv -0.109375 0.03125 0.377126\nv -0.101562 0.0375506 0.375\nv -0.101562 0.03125 0.377127\nv -0.09375 0.0375533 0.375\nv -0.09375 0.03125 0.377103\nv -0.0859375 0.0377535 0.375\nv -0.0859375 0.03125 0.377056\nv -0.078125 0.0376959 0.375\nv -0.078125 0.03125 0.376977\nv -0.0703125 0.0380543 0.375\nv -0.0703125 0.03125 0.37708\nv -0.0625 0.0379072 0.375\nv -0.0625 0.03125 0.377103\nv -0.0546875 0.037436 0.375\nv -0.0546875 0.03125 0.376963\nv -0.046875 0.0369932 0.375\nv -0.046875 0.03125 0.376813\nv -0.0390625 0.0365733 0.375\nv -0.0390625 0.03125 0.376666\nv -0.03125 0.0362431 0.375\nv -0.03125 0.03125 0.376556\nv -0.0234375 0.0359677 0.375\nv -0.0234375 0.03125 0.376471\nv -0.015625 0.0357847 0.375\nv -0.015625 0.03125 0.376402\nv -0.0078125 0.0359942 0.375\nv -0.0078125 0.03125 0.376463\nv 0 0.0374238 0.375\nv 0 0.03125 0.376871\nv 0.0078125 0.03125 0.377374\nv 0.015625 0.03125 0.377373\nv 0.0234375 0.03125 0.377142\nv 0.03125 0.0382765 0.375\nv 0.03125 0.03125 0.376782\nv 0.0390625 0.0371403 0.375\nv 0.0390625 0.03125 0.376492\nv 0.046875 0.0363118 0.375\nv 0.046875 0.03125 0.37629\nv 0.0546875 0.0354093 0.375\nv 0.0546875 0.03125 0.376058\nv 0.0625 0.0346705 0.375\nv 0.0625 0.03125 0.375861\nv 0.0703125 0.0338561 0.375\nv 0.0703125 0.03125 0.375634\nv 0.078125 0.0327355 0.375\nv 0.078125 0.03125 0.37534\nv 0.0859375 0.0322624 0.375\nv 0.0859375 0.03125 0.37523\nv 0.09375 0.0326434 0.375\nv 0.09375 0.03125 0.375322\nv 0.101562 0.0330517 0.375\nv 0.101562 0.03125 0.375425\nv 0.109375 0.0329105 0.375\nv 0.109375 0.03125 0.375409\nv 0.117188 0.032637 0.375\nv 0.117188 0.03125 0.37536\nv 0.125 0.0324241 0.375\nv 0.125 0.03125 0.375302\nv 0.132812 0.0322612 0.375\nv 0.132812 0.03125 0.375277\nv 0.143865 0.03125 0.375\nv 0.140625 0.0315902 0.375\nv 0.140625 0.03125 0.375094\nv 0.370446 0.03125 0.375\nv 0.375 0.0338665 0.375\nv 0.375 0.03125 0.37535\nv 0.382812 0.03125 0.376159\nv 0.390625 0.03125 0.377079\nv 0.398438 0.03125 0.37824\nv 0.40625 0.03125 0.379207\nv 0.414062 0.03125 0.379296\nv 0.421875 0.03125 0.378887\nv 0.429688 0.03125 0.378451\nv 0.4375 0.03125 0.378874\nv 0.445312 0.03125 0.380101\nv 0.453125 0.03125 0.381014\nv 0.460938 0.03125 0.381764\nv 0.46875 0.03125 0.382051\nv 0.476562 0.03125 0.38212\nv 0.484375 0.03125 0.380062\nv 0.494369 0.03125 0.375\nv 0.492188 0.0347129 0.375\nv 0.492188 0.03125 0.376782\nv -0.316276 0.0390625 0.375\nv -0.3125 0.0390625 0.38142\nv -0.226562 0.0390625 0.382062\nv -0.21875 0.0390625 0.380642\nv -0.210938 0.0390625 0.379229\nv -0.203125 0.0390625 0.378518\nv -0.195312 0.0390625 0.378203\nv -0.1875 0.0390625 0.378124\nv -0.179688 0.0390625 0.377991\nv -0.171875 0.0390625 0.377656\nv -0.164062 0.0390625 0.377148\nv -0.15625 0.0463622 0.375\nv -0.15625 0.0390625 0.376553\nv -0.148438 0.0438667 0.375\nv -0.148438 0.0390625 0.375933\nv -0.140625 0.0414163 0.375\nv -0.140625 0.0390625 0.375497\nv -0.13015 0.0390625 0.375\nv -0.132812 0.0394518 0.375\nv -0.132812 0.0390625 0.375087\nv 0.00586712 0.0390625 0.375\nv 0.0078125 0.0397925 0.375\nv 0.0078125 0.0390625 0.375172\nv 0.015625 0.0400338 0.375\nv 0.015625 0.0390625 0.375229\nv 0.0262112 0.0390625 0.375\nv 0.0234375 0.039537 0.375\nv 0.0234375 0.0390625 0.375111\nv 0.381244 0.0390625 0.375\nv 0.382812 0.0396113 0.375\nv 0.382812 0.0390625 0.375192\nv 0.390625 0.0420462 0.375\nv 0.390625 0.0390625 0.376146\nv 0.398438 0.0442734 0.375\nv 0.398438 0.0390625 0.37721\nv 0.40625 0.0390625 0.378232\nv 0.414062 0.0390625 0.378465\nv 0.421875 0.0390625 0.378696\nv 0.429688 0.0390625 0.378557\nv 0.4375 0.0390625 0.378667\nv 0.445312 0.0390625 0.379727\nv 0.453125 0.0390625 0.380542\nv 0.460938 0.0390625 0.381069\nv 0.46875 0.0390625 0.38038\nv 0.476562 0.0457697 0.375\nv 0.476562 0.0390625 0.378891\nv 0.487617 0.0390625 0.375\nv 0.484375 0.0414921 0.375\nv 0.484375 0.0390625 0.376508\nv -0.316671 0.046875 0.375\nv -0.234375 0.046875 0.382722\nv -0.226562 0.046875 0.381144\nv -0.21875 0.046875 0.379766\nv -0.210938 0.046875 0.378545\nv -0.203125 0.046875 0.377719\nv -0.195312 0.046875 0.377379\nv -0.1875 0.046875 0.377052\nv -0.179688 0.0523442 0.375\nv -0.179688 0.046875 0.376464\nv -0.171875 0.0495087 0.375\nv -0.171875 0.046875 0.375702\nv -0.158301 0.046875 0.375\nv -0.164062 0.0480275 0.375\nv -0.164062 0.046875 0.375308\nv 0.404794 0.046875 0.375\nv 0.40625 0.047642 0.375\nv 0.40625 0.046875 0.375289\nv 0.414062 0.0496015 0.375\nv 0.414062 0.046875 0.375867\nv 0.421875 0.0500808 0.375\nv 0.421875 0.046875 0.376059\nv 0.429688 0.0500558 0.375\nv 0.429688 0.046875 0.376248\nv 0.4375 0.0500256 0.375\nv 0.4375 0.046875 0.376337\nv 0.445312 0.0504953 0.375\nv 0.445312 0.046875 0.377026\nv 0.453125 0.0501845 0.375\nv 0.453125 0.046875 0.377083\nv 0.460938 0.0500797 0.375\nv 0.460938 0.046875 0.377226\nv 0.47391 0.046875 0.375\nv 0.46875 0.0483302 0.375\nv 0.46875 0.046875 0.37609\nv -0.316537 0.0546875 0.375\nv -0.234375 0.0546875 0.381911\nv -0.226562 0.0546875 0.380426\nv -0.21875 0.0546875 0.379164\nv -0.210938 0.0546875 0.37772\nv -0.203125 0.0594023 0.375\nv -0.203125 0.0546875 0.376468\nv -0.195312 0.0562886 0.375\nv -0.195312 0.0546875 0.375507\nv -0.186245 0.0546875 0.375\nv -0.1875 0.0549871 0.375\nv -0.1875 0.0546875 0.37511\nv -0.316389 0.0625 0.375\nv -0.242188 0.0625 0.38176\nv -0.234375 0.0625 0.38003\nv -0.226562 0.0625 0.378218\nv -0.21875 0.0692079 0.375\nv -0.21875 0.0625 0.377229\nv -0.2075 0.0625 0.375\nv -0.210938 0.0646953 0.375\nv -0.210938 0.0625 0.375846\nv -0.316642 0.0703125 0.375\nv -0.25 0.0703125 0.38198\nv -0.242188 0.0703125 0.380796\nv -0.234375 0.0703125 0.379097\nv -0.220007 0.0703125 0.375\nv -0.226562 0.0703125 0.376927\nv -0.31747 0.078125 0.375\nv -0.257812 0.078125 0.382714\nv -0.25 0.078125 0.381604\nv -0.242188 0.078125 0.380283\nv -0.234375 0.078125 0.378388\nv -0.224848 0.078125 0.375\nv -0.226562 0.0825148 0.375\nv -0.226562 0.078125 0.375893\nv -0.318116 0.0859375 0.375\nv -0.257812 0.0859375 0.382809\nv -0.25 0.0859375 0.381643\nv -0.242188 0.0859375 0.38019\nv -0.227788 0.0859375 0.375\nv -0.234375 0.0859375 0.378062\nv -0.3189 0.09375 0.375\nv -0.25 0.09375 0.382425\nv -0.242188 0.09375 0.38056\nv -0.229947 0.09375 0.375\nv -0.234375 0.09375 0.377767\nv -0.319717 0.101562 0.375\nv -0.242188 0.101562 0.380895\nv -0.230497 0.101562 0.375\nv -0.234375 0.101562 0.377779\nv -0.320153 0.109375 0.375\nv -0.320312 0.113882 0.375\nv -0.242188 0.109375 0.381155\nv -0.230206 0.109375 0.375\nv -0.234375 0.109375 0.378246\nv -0.320393 0.117188 0.375\nv -0.320312 0.117188 0.375183\nv -0.242188 0.117188 0.381695\nv -0.229875 0.117188 0.375\nv -0.234375 0.117188 0.378835\nv -0.320591 0.125 0.375\nv -0.320312 0.125 0.375611\nv -0.242188 0.125 0.382567\nv -0.22944 0.125 0.375\nv -0.234375 0.125 0.379461\nv -0.320517 0.132812 0.375\nv -0.320312 0.136401 0.375\nv -0.320312 0.132812 0.37542\nv -0.228659 0.132812 0.375\nv -0.234375 0.132812 0.379873\nv -0.319946 0.140625 0.375\nv -0.228105 0.140625 0.375\nv -0.234375 0.140625 0.38019\nv -0.319593 0.148438 0.375\nv -0.228108 0.148438 0.375\nv -0.234375 0.148438 0.380245\nv -0.320227 0.15625 0.375\nv -0.320312 0.157589 0.375\nv -0.228598 0.15625 0.375\nv -0.234375 0.15625 0.380146\nv -0.320601 0.164062 0.375\nv -0.320312 0.164062 0.375607\nv -0.229271 0.164062 0.375\nv -0.234375 0.164062 0.379689\nv -0.320994 0.171875 0.375\nv -0.320312 0.171875 0.376397\nv -0.229524 0.171875 0.375\nv -0.234375 0.171875 0.379742\nv -0.321521 0.179688 0.375\nv -0.320312 0.179688 0.377338\nv -0.229408 0.179688 0.375\nv -0.234375 0.179688 0.37996\nv -0.322 0.1875 0.375\nv -0.320312 0.1875 0.378204\nv -0.229049 0.1875 0.375\nv -0.234375 0.1875 0.380106\nv -0.322524 0.195312 0.375\nv -0.320312 0.195312 0.379191\nv -0.228482 0.195312 0.375\nv -0.234375 0.195312 0.380481\nv -0.323027 0.203125 0.375\nv -0.320312 0.203125 0.380277\nv -0.228229 0.203125 0.375\nv -0.234375 0.203125 0.380457\nv -0.323433 0.210938 0.375\nv -0.320312 0.210938 0.381312\nv -0.228379 0.210938 0.375\nv -0.234375 0.210938 0.380257\nv -0.323705 0.21875 0.375\nv -0.320312 0.21875 0.381732\nv -0.228486 0.21875 0.375\nv -0.234375 0.21875 0.38013\nv -0.323852 0.226562 0.375\nv -0.320312 0.226562 0.381995\nv -0.228794 0.226562 0.375\nv -0.234375 0.226562 0.379701\nv -0.323913 0.234375 0.375\nv -0.320312 0.234375 0.382129\nv -0.229432 0.234375 0.375\nv -0.234375 0.234375 0.378742\nv -0.323915 0.242188 0.375\nv -0.320312 0.242188 0.382088\nv -0.230902 0.242188 0.375\nv -0.234375 0.242188 0.377831\nv -0.324027 0.25 0.375\nv -0.320312 0.25 0.382102\nv -0.242188 0.25 0.38228\nv -0.232312 0.25 0.375\nv -0.234375 0.25 0.376777\nv -0.324235 0.257812 0.375\nv -0.320312 0.257812 0.382264\nv -0.242188 0.257812 0.381589\nv -0.233417 0.257812 0.375\nv -0.234375 0.264648 0.375\nv -0.234375 0.257812 0.375852\nv -0.324562 0.265625 0.375\nv -0.320312 0.265625 0.382718\nv -0.234522 0.265625 0.375\nv -0.242188 0.265625 0.380878\nv -0.324804 0.273438 0.375\nv -0.23595 0.273438 0.375\nv -0.242188 0.273438 0.380021\nv -0.324991 0.28125 0.375\nv -0.237188 0.28125 0.375\nv -0.242188 0.28125 0.379042\nv -0.325372 0.289062 0.375\nv -0.238063 0.289062 0.375\nv -0.242188 0.289062 0.378417\nv -0.3257 0.296875 0.375\nv -0.238666 0.296875 0.375\nv -0.242188 0.296875 0.377888\nv -0.326162 0.304688 0.375\nv -0.238986 0.304688 0.375\nv -0.242188 0.304688 0.377634\nv -0.326752 0.3125 0.375\nv -0.239226 0.3125 0.375\nv -0.242188 0.3125 0.377388\nv -0.327255 0.320312 0.375\nv -0.239361 0.320312 0.375\nv -0.242188 0.320312 0.377217\nv -0.32751 0.328125 0.375\nv -0.239732 0.328125 0.375\nv -0.242188 0.328125 0.376856\nv -0.327699 0.335938 0.375\nv -0.240078 0.335938 0.375\nv -0.242188 0.335938 0.376546\nv -0.327985 0.34375 0.375\nv -0.328125 0.346256 0.375\nv -0.25 0.34375 0.382442\nv -0.240572 0.34375 0.375\nv -0.242188 0.34375 0.376203\nv -0.328383 0.351562 0.375\nv -0.328125 0.351562 0.375725\nv -0.25 0.351562 0.382068\nv -0.240989 0.351562 0.375\nv -0.242188 0.351562 0.375904\nv -0.328845 0.359375 0.375\nv -0.328125 0.359375 0.376899\nv -0.25 0.359375 0.382\nv -0.241074 0.359375 0.375\nv -0.242188 0.359375 0.375868\nv -0.329289 0.367188 0.375\nv -0.328125 0.367188 0.377841\nv -0.25 0.367188 0.381997\nv -0.240985 0.367188 0.375\nv -0.242188 0.367188 0.375969\nv -0.329666 0.375 0.375\nv -0.328125 0.375 0.37847\nv -0.25 0.375 0.382019\nv -0.24088 0.375 0.375\nv -0.242188 0.375 0.376079\nv -0.330018 0.382812 0.375\nv -0.328125 0.382812 0.378957\nv -0.25 0.382812 0.382071\nv -0.24076 0.382812 0.375\nv -0.242188 0.382812 0.376194\nv -0.330372 0.390625 0.375\nv -0.328125 0.390625 0.379401\nv -0.25 0.390625 0.382061\nv -0.240686 0.390625 0.375\nv -0.242188 0.390625 0.37627\nv -0.330739 0.398438 0.375\nv -0.328125 0.398438 0.379802\nv -0.25 0.398438 0.38197\nv -0.240689 0.398438 0.375\nv -0.242188 0.398438 0.376271\nv -0.331084 0.40625 0.375\nv -0.328125 0.40625 0.380094\nv -0.25 0.40625 0.381781\nv -0.240762 0.40625 0.375\nv -0.242188 0.40625 0.376214\nv -0.331369 0.414062 0.375\nv -0.328125 0.414062 0.380266\nv -0.25 0.414062 0.381565\nv -0.24084 0.414062 0.375\nv -0.242188 0.414062 0.376154\nv -0.331711 0.421875 0.375\nv -0.328125 0.421875 0.380448\nv -0.25 0.421875 0.381321\nv -0.240949 0.421875 0.375\nv -0.242188 0.421875 0.376068\nv -0.332068 0.429688 0.375\nv -0.328125 0.429688 0.380737\nv -0.25 0.429688 0.381093\nv -0.241082 0.429688 0.375\nv -0.242188 0.429688 0.375958\nv -0.332477 0.4375 0.375\nv -0.328125 0.4375 0.381175\nv -0.25 0.4375 0.38087\nv -0.241231 0.4375 0.375\nv -0.242188 0.4375 0.375831\nv -0.332892 0.445312 0.375\nv -0.328125 0.445312 0.381625\nv -0.25 0.445312 0.380644\nv -0.241375 0.445312 0.375\nv -0.242188 0.445312 0.375711\nv -0.333284 0.453125 0.375\nv -0.328125 0.453125 0.381982\nv -0.25 0.453125 0.380407\nv -0.24154 0.453125 0.375\nv -0.242188 0.453125 0.375569\nv -0.333718 0.460938 0.375\nv -0.328125 0.460938 0.382334\nv -0.25 0.460938 0.380211\nv -0.241724 0.460938 0.375\nv -0.242188 0.460938 0.375412\nv -0.334275 0.46875 0.375\nv -0.25 0.46875 0.38004\nv -0.241878 0.46875 0.375\nv -0.242188 0.46875 0.375277\nv -0.334897 0.476562 0.375\nv -0.25 0.476562 0.379859\nv -0.24214 0.476562 0.375\nv -0.242188 0.477785 0.375\nv -0.242188 0.476562 0.375042\nv -0.335555 0.484375 0.375\nv -0.335938 0.487322 0.375\nv -0.257812 0.484375 0.382734\nv -0.242529 0.484375 0.375\nv -0.25 0.484375 0.37971\nv -0.336567 0.492188 0.375\nv -0.335938 0.492188 0.376341\nv -0.257812 0.492188 0.382641\nv -0.242829 0.492188 0.375\nv -0.25 0.492188 0.3796\nv -0.337602 0.5 0.375\nv -0.335938 0.5 0.378432\nv -0.257812 0.5 0.382525\nv -0.243175 0.5 0.375\nv -0.25 0.5 0.3795\nv -0.338501 0.507812 0.375\nv -0.335938 0.507812 0.380293\nv -0.257812 0.507812 0.38232\nv -0.243489 0.507812 0.375\nv -0.25 0.507812 0.37944\nv -0.339389 0.515625 0.375\nv -0.335938 0.515625 0.382023\nv -0.257812 0.515625 0.3821\nv -0.243872 0.515625 0.375\nv -0.25 0.515625 0.379296\nv -0.340318 0.523438 0.375\nv -0.257812 0.523438 0.382034\nv -0.244349 0.523438 0.375\nv -0.25 0.523438 0.37917\nv -0.341209 0.53125 0.375\nv -0.257812 0.53125 0.381879\nv -0.245064 0.53125 0.375\nv -0.25 0.53125 0.378976\nv -0.342079 0.539062 0.375\nv -0.257812 0.539062 0.381761\nv -0.24568 0.539062 0.375\nv -0.25 0.539062 0.37873\nv -0.343038 0.546875 0.375\nv -0.34375 0.553517 0.375\nv -0.257812 0.546875 0.38166\nv -0.24636 0.546875 0.375\nv -0.25 0.546875 0.378383\nv -0.34386 0.554688 0.375\nv -0.34375 0.554688 0.375274\nv -0.257812 0.554688 0.381549\nv -0.246919 0.554688 0.375\nv -0.25 0.554688 0.378029\nv -0.344572 0.5625 0.375\nv -0.34375 0.5625 0.377039\nv -0.257812 0.5625 0.38139\nv -0.247578 0.5625 0.375\nv -0.25 0.5625 0.377514\nv -0.34539 0.570312 0.375\nv -0.34375 0.570312 0.378936\nv -0.257812 0.570312 0.381263\nv -0.248156 0.570312 0.375\nv -0.25 0.570312 0.377009\nv -0.346275 0.578125 0.375\nv -0.34375 0.578125 0.380744\nv -0.257812 0.578125 0.381147\nv -0.248672 0.578125 0.375\nv -0.25 0.578125 0.37651\nv -0.347123 0.585938 0.375\nv -0.34375 0.585938 0.382419\nv -0.257812 0.585938 0.380979\nv -0.249218 0.585938 0.375\nv -0.25 0.585938 0.37592\nv -0.347956 0.59375 0.375\nv -0.257812 0.59375 0.380601\nv -0.249746 0.59375 0.375\nv -0.25 0.598064 0.375\nv -0.25 0.59375 0.3753\nv -0.348752 0.601562 0.375\nv -0.250276 0.601562 0.375\nv -0.257812 0.601562 0.380272\nv -0.349682 0.609375 0.375\nv -0.265625 0.609375 0.382685\nv -0.250914 0.609375 0.375\nv -0.257812 0.609375 0.379987\nv -0.350539 0.617188 0.375\nv -0.265625 0.617188 0.382598\nv -0.251758 0.617188 0.375\nv -0.257812 0.617188 0.379626\nv -0.350955 0.625 0.375\nv -0.265625 0.625 0.382513\nv -0.252725 0.625 0.375\nv -0.257812 0.625 0.379146\nv -0.350847 0.632812 0.375\nv -0.265625 0.632812 0.382242\nv -0.253514 0.632812 0.375\nv -0.257812 0.632812 0.378595\nv -0.350411 0.640625 0.375\nv -0.265625 0.640625 0.381805\nv -0.254341 0.640625 0.375\nv -0.257812 0.640625 0.377861\nv -0.349923 0.648438 0.375\nv -0.265625 0.648438 0.381375\nv -0.255199 0.648438 0.375\nv -0.257812 0.648438 0.377121\nv -0.34949 0.65625 0.375\nv -0.265625 0.65625 0.380898\nv -0.256066 0.65625 0.375\nv -0.257812 0.65625 0.376403\nv -0.349258 0.664062 0.375\nv -0.265625 0.664062 0.380271\nv -0.256793 0.664062 0.375\nv -0.257812 0.664062 0.375829\nv -0.349076 0.671875 0.375\nv -0.273438 0.671875 0.382471\nv -0.265625 0.671875 0.379666\nv -0.257603 0.671875 0.375\nv -0.257812 0.673818 0.375\nv -0.257812 0.671875 0.375178\nv -0.349093 0.679688 0.375\nv -0.273438 0.679688 0.381962\nv -0.258739 0.679688 0.375\nv -0.265625 0.679688 0.379031\nv -0.349079 0.6875 0.375\nv -0.273438 0.6875 0.381631\nv -0.259736 0.6875 0.375\nv -0.265625 0.6875 0.37845\nv -0.349144 0.695312 0.375\nv -0.273438 0.695312 0.381349\nv -0.26039 0.695312 0.375\nv -0.265625 0.695312 0.378033\nv -0.349003 0.703125 0.375\nv -0.273438 0.703125 0.38111\nv -0.260954 0.703125 0.375\nv -0.265625 0.703125 0.37777\nv -0.349043 0.710938 0.375\nv -0.273438 0.710938 0.380829\nv -0.261524 0.710938 0.375\nv -0.265625 0.710938 0.377489\nv -0.349117 0.71875 0.375\nv -0.273438 0.71875 0.380542\nv -0.262367 0.71875 0.375\nv -0.265625 0.71875 0.377146\nv -0.348987 0.726562 0.375\nv -0.273438 0.726562 0.380128\nv -0.26343 0.726562 0.375\nv -0.265625 0.726562 0.37662\nv -0.348948 0.734375 0.375\nv -0.28125 0.734375 0.382635\nv -0.273438 0.734375 0.379446\nv -0.265162 0.734375 0.375\nv -0.265625 0.73614 0.375\nv -0.265625 0.734375 0.375389\nv -0.349044 0.742188 0.375\nv -0.28125 0.742188 0.382228\nv -0.268013 0.742188 0.375\nv -0.273438 0.742188 0.378301\nv -0.349163 0.75 0.375\nv -0.28125 0.75 0.382229\nv -0.269251 0.75 0.375\nv -0.273438 0.75 0.378105\nv -0.348883 0.757812 0.375\nv -0.269715 0.757812 0.375\nv -0.273438 0.757812 0.37903\nv -0.348538 0.765625 0.375\nv -0.34375 0.765625 0.382371\nv -0.271106 0.765625 0.375\nv -0.273438 0.765625 0.378076\nv -0.348694 0.773438 0.375\nv -0.34375 0.773438 0.381566\nv -0.272819 0.773438 0.375\nv -0.273438 0.776168 0.375\nv -0.273438 0.773438 0.375919\nv -0.349454 0.78125 0.375\nv -0.34375 0.78125 0.380907\nv -0.274836 0.78125 0.375\nv -0.28125 0.78125 0.381988\nv -0.350263 0.789062 0.375\nv -0.34375 0.789062 0.380533\nv -0.277508 0.789062 0.375\nv -0.28125 0.789062 0.379031\nv -0.350946 0.796875 0.375\nv -0.34375 0.796875 0.3799\nv -0.335938 0.796875 0.382213\nv -0.279995 0.796875 0.375\nv -0.28125 0.796875 0.376609\nv -0.350913 0.804688 0.375\nv -0.351562 0.808948 0.375\nv -0.34375 0.804688 0.378427\nv -0.335938 0.804688 0.380688\nv -0.328125 0.804688 0.382792\nv -0.289062 0.804688 0.381449\nv -0.281245 0.804688 0.375\nv -0.28125 0.804708 0.375\nv -0.28125 0.804688 0.375007\nv -0.351952 0.8125 0.375\nv -0.351562 0.814902 0.375\nv -0.351562 0.8125 0.37527\nv -0.34375 0.8125 0.377804\nv -0.335938 0.8125 0.379481\nv -0.328125 0.8125 0.381738\nv -0.284605 0.8125 0.375\nv -0.289062 0.8125 0.379003\nv -0.349145 0.820312 0.375\nv -0.34375 0.82572 0.375\nv -0.34375 0.820312 0.376502\nv -0.335938 0.820312 0.378262\nv -0.328125 0.820312 0.380846\nv -0.296875 0.820312 0.380626\nv -0.288588 0.820312 0.375\nv -0.289062 0.82132 0.375\nv -0.289062 0.820312 0.375536\nv -0.341281 0.828125 0.375\nv -0.335938 0.828125 0.376461\nv -0.328125 0.828125 0.379707\nv -0.320312 0.828125 0.382771\nv -0.304688 0.828125 0.381306\nv -0.292929 0.828125 0.375\nv -0.296875 0.828125 0.378046\nv -0.336712 0.835938 0.375\nv -0.335938 0.836894 0.375\nv -0.335938 0.835938 0.375295\nv -0.328125 0.835938 0.37878\nv -0.320312 0.835938 0.382673\nv -0.3125 0.835938 0.382465\nv -0.304688 0.835938 0.379756\nv -0.294912 0.835938 0.375\nv -0.296875 0.835938 0.376428\nv -0.33207 0.84375 0.375\nv -0.328125 0.848068 0.375\nv -0.328125 0.84375 0.377157\nv -0.320312 0.84375 0.381195\nv -0.3125 0.84375 0.38197\nv -0.304688 0.84375 0.378754\nv -0.296856 0.84375 0.375\nv -0.296875 0.843789 0.375\nv -0.296875 0.84375 0.375013\nv -0.322724 0.851562 0.375\nv -0.320312 0.852821 0.375\nv -0.320312 0.851562 0.376275\nv -0.3125 0.855892 0.375\nv -0.3125 0.851562 0.377892\nv -0.302423 0.851562 0.375\nv -0.304688 0.855538 0.375\nv -0.304688 0.851562 0.37619\nv 0.414062 -0.729228 0.382812\nv 0.421875 -0.731523 0.382812\nv 0.429688 -0.732033 0.382812\nv 0.4375 -0.731329 0.382812\nv 0.445312 -0.730303 0.382812\nv 0.453125 -0.729429 0.382812\nv 0.460938 -0.727972 0.382812\nv 0.46875 -0.726834 0.382812\nv 0.408688 -0.726562 0.382812\nv 0.40625 -0.723739 0.382812\nv 0.414062 -0.726562 0.386495\nv 0.421875 -0.726562 0.387553\nv 0.429688 -0.726562 0.386978\nv 0.4375 -0.726562 0.386026\nv 0.445312 -0.726562 0.385276\nv 0.453125 -0.726562 0.384681\nv 0.460938 -0.726562 0.383816\nv 0.470474 -0.726562 0.382812\nv 0.46875 -0.726562 0.383017\nv 0.476562 -0.724997 0.382812\nv 0.484375 -0.722097 0.382812\nv 0.492188 -0.719332 0.382812\nv -0.3125 -0.711417 0.382812\nv -0.304688 -0.717107 0.382812\nv -0.296875 -0.717423 0.382812\nv -0.289062 -0.713945 0.382812\nv 0.403803 -0.71875 0.382812\nv 0.40625 -0.71875 0.385555\nv 0.414062 -0.71875 0.389183\nv 0.421875 -0.71875 0.390058\nv 0.429688 -0.71875 0.389688\nv 0.4375 -0.71875 0.388704\nv 0.445312 -0.71875 0.387803\nv 0.453125 -0.71875 0.387265\nv 0.460938 -0.71875 0.386841\nv 0.46875 -0.71875 0.386308\nv 0.476562 -0.71875 0.385345\nv 0.484375 -0.71875 0.384149\nv 0.492816 -0.71875 0.382812\nv 0.492188 -0.71875 0.383041\nv -0.313095 -0.710938 0.382812\nv -0.320312 -0.703621 0.382812\nv -0.3125 -0.710938 0.382893\nv -0.304688 -0.710938 0.384093\nv -0.296875 -0.710938 0.384046\nv -0.282268 -0.710938 0.382812\nv -0.289062 -0.710938 0.383589\nv -0.28125 -0.710169 0.382812\nv -0.273438 -0.70506 0.382812\nv 0.400833 -0.710938 0.382812\nv 0.40625 -0.710938 0.387556\nv 0.414062 -0.710938 0.390084\nv 0.4375 -0.710938 0.389628\nv 0.445312 -0.710938 0.388543\nv 0.453125 -0.710938 0.387665\nv 0.460938 -0.710938 0.387116\nv 0.46875 -0.710938 0.386937\nv 0.476562 -0.710938 0.386408\nv 0.484375 -0.710938 0.385499\nv 0.495411 -0.710938 0.382812\nv 0.492188 -0.710938 0.384302\nv -0.320702 -0.703125 0.382812\nv -0.320312 -0.703125 0.382877\nv -0.3125 -0.703125 0.384079\nv -0.304688 -0.703125 0.384874\nv -0.296875 -0.703125 0.384624\nv -0.289062 -0.703125 0.384246\nv -0.28125 -0.703125 0.383887\nv -0.270633 -0.703125 0.382812\nv -0.273438 -0.703125 0.383225\nv -0.265625 -0.698392 0.382812\nv 0.398767 -0.703125 0.382812\nv 0.398438 -0.701601 0.382812\nv 0.40625 -0.703125 0.38826\nv 0.414062 -0.703125 0.390622\nv 0.4375 -0.703125 0.38986\nv 0.445312 -0.703125 0.388817\nv 0.453125 -0.703125 0.387994\nv 0.460938 -0.703125 0.387517\nv 0.46875 -0.703125 0.387543\nv 0.476562 -0.703125 0.38733\nv 0.484375 -0.703125 0.386399\nv 0.49681 -0.703125 0.382812\nv 0.492188 -0.703125 0.384923\nv -0.325966 -0.695312 0.382812\nv -0.320312 -0.695312 0.38398\nv -0.3125 -0.695312 0.385044\nv -0.304688 -0.695312 0.385465\nv -0.296875 -0.695312 0.385236\nv -0.289062 -0.695312 0.384877\nv -0.28125 -0.695312 0.384575\nv -0.273438 -0.695312 0.384192\nv -0.260198 -0.695312 0.382812\nv -0.265625 -0.695312 0.383298\nv -0.257812 -0.68875 0.382812\nv 0.397191 -0.695312 0.382812\nv 0.398438 -0.695312 0.383932\nv 0.40625 -0.695312 0.388635\nv 0.4375 -0.695312 0.390164\nv 0.445312 -0.695312 0.389147\nv 0.453125 -0.695312 0.388431\nv 0.460938 -0.695312 0.388072\nv 0.46875 -0.695312 0.388162\nv 0.476562 -0.695312 0.38813\nv 0.484375 -0.695312 0.387183\nv 0.497461 -0.695312 0.382812\nv 0.492188 -0.695312 0.385222\nv -0.326349 -0.6875 0.382812\nv -0.320312 -0.6875 0.384107\nv -0.3125 -0.6875 0.385172\nv -0.304688 -0.6875 0.385521\nv -0.296875 -0.6875 0.385312\nv -0.289062 -0.6875 0.385079\nv -0.28125 -0.6875 0.384786\nv -0.273438 -0.6875 0.384455\nv -0.265625 -0.6875 0.383557\nv -0.257609 -0.6875 0.382812\nv -0.257812 -0.6875 0.382855\nv 0.396727 -0.6875 0.382812\nv 0.398438 -0.6875 0.384277\nv 0.40625 -0.6875 0.388808\nv 0.4375 -0.6875 0.390191\nv 0.445312 -0.6875 0.389204\nv 0.453125 -0.6875 0.388531\nv 0.460938 -0.6875 0.38818\nv 0.46875 -0.6875 0.3883\nv 0.476562 -0.6875 0.388302\nv 0.484375 -0.6875 0.387468\nv 0.497638 -0.6875 0.382812\nv 0.492188 -0.6875 0.385419\nv -0.325838 -0.679688 0.382812\nv -0.320312 -0.679688 0.384061\nv -0.3125 -0.679688 0.385164\nv -0.304688 -0.679688 0.385463\nv -0.296875 -0.679688 0.385289\nv -0.289062 -0.679688 0.385162\nv -0.28125 -0.679688 0.384925\nv -0.273438 -0.679688 0.384687\nv -0.265625 -0.679688 0.383846\nv -0.255895 -0.679688 0.382812\nv -0.257812 -0.679688 0.383185\nv 0.395924 -0.679688 0.382812\nv 0.398438 -0.679688 0.384905\nv 0.40625 -0.679688 0.389094\nv 0.4375 -0.679688 0.3902\nv 0.445312 -0.679688 0.389323\nv 0.453125 -0.679688 0.388631\nv 0.460938 -0.679688 0.388247\nv 0.46875 -0.679688 0.388364\nv 0.476562 -0.679688 0.388433\nv 0.484375 -0.679688 0.387636\nv 0.497967 -0.679688 0.382812\nv 0.492188 -0.679688 0.385606\nv -0.324541 -0.671875 0.382812\nv -0.320312 -0.671875 0.383922\nv -0.3125 -0.671875 0.385142\nv -0.304688 -0.671875 0.385383\nv -0.296875 -0.671875 0.385285\nv -0.289062 -0.671875 0.385172\nv -0.28125 -0.671875 0.385012\nv -0.273438 -0.671875 0.384887\nv -0.265625 -0.671875 0.384093\nv -0.254267 -0.671875 0.382812\nv -0.257812 -0.671875 0.383422\nv 0.39554 -0.671875 0.382812\nv 0.398438 -0.671875 0.385213\nv 0.40625 -0.671875 0.389204\nv 0.4375 -0.671875 0.390327\nv 0.445312 -0.671875 0.389409\nv 0.453125 -0.671875 0.388792\nv 0.460938 -0.671875 0.3884\nv 0.46875 -0.671875 0.38844\nv 0.476562 -0.671875 0.388592\nv 0.484375 -0.671875 0.387905\nv 0.498207 -0.671875 0.382812\nv 0.492188 -0.671875 0.385729\nv -0.323101 -0.664062 0.382812\nv -0.320312 -0.664062 0.383512\nv -0.3125 -0.664062 0.38497\nv -0.304688 -0.664062 0.385286\nv -0.296875 -0.664062 0.385289\nv -0.289062 -0.664062 0.38519\nv -0.28125 -0.664062 0.38517\nv -0.273438 -0.664062 0.385045\nv -0.265625 -0.664062 0.384308\nv -0.252097 -0.664062 0.382812\nv -0.257812 -0.664062 0.383714\nv -0.25 -0.65793 0.382812\nv 0.395145 -0.664062 0.382812\nv 0.398438 -0.664062 0.385455\nv 0.40625 -0.664062 0.388961\nv 0.4375 -0.664062 0.390497\nv 0.445312 -0.664062 0.389577\nv 0.453125 -0.664062 0.388907\nv 0.460938 -0.664062 0.388546\nv 0.46875 -0.664062 0.388651\nv 0.476562 -0.664062 0.388842\nv 0.484375 -0.664062 0.388234\nv 0.498518 -0.664062 0.382812\nv 0.492188 -0.664062 0.385987\nv -0.32176 -0.65625 0.382812\nv -0.320312 -0.65625 0.383139\nv -0.3125 -0.65625 0.384634\nv -0.304688 -0.65625 0.38504\nv -0.296875 -0.65625 0.385212\nv -0.289062 -0.65625 0.385209\nv -0.28125 -0.65625 0.385383\nv -0.273438 -0.65625 0.385229\nv -0.265625 -0.65625 0.384588\nv -0.257812 -0.65625 0.384016\nv -0.249556 -0.65625 0.382812\nv -0.25 -0.65625 0.382909\nv 0.394932 -0.65625 0.382812\nv 0.398438 -0.65625 0.385494\nv 0.40625 -0.65625 0.388698\nv 0.414062 -0.65625 0.390381\nv 0.4375 -0.65625 0.390615\nv 0.445312 -0.65625 0.389766\nv 0.453125 -0.65625 0.389113\nv 0.460938 -0.65625 0.388759\nv 0.46875 -0.65625 0.38879\nv 0.476562 -0.65625 0.389174\nv 0.484375 -0.65625 0.388602\nv 0.498962 -0.65625 0.382812\nv 0.492188 -0.65625 0.386368\nv -0.320684 -0.648438 0.382812\nv -0.320312 -0.648438 0.382891\nv -0.3125 -0.648438 0.384276\nv -0.304688 -0.648438 0.384727\nv -0.296875 -0.648438 0.385052\nv -0.289062 -0.648438 0.38517\nv -0.28125 -0.648438 0.385493\nv -0.273438 -0.648438 0.385484\nv -0.265625 -0.648438 0.384964\nv -0.257812 -0.648438 0.384406\nv -0.247529 -0.648438 0.382812\nv -0.25 -0.648438 0.383322\nv 0.394751 -0.648438 0.382812\nv 0.398438 -0.648438 0.385554\nv 0.40625 -0.648438 0.388377\nv 0.414062 -0.648438 0.389921\nv 0.4375 -0.648438 0.390584\nv 0.445312 -0.648438 0.38988\nv 0.453125 -0.648438 0.389385\nv 0.460938 -0.648438 0.389179\nv 0.46875 -0.648438 0.389125\nv 0.476562 -0.648438 0.38945\nv 0.484375 -0.648438 0.389008\nv 0.499997 -0.648438 0.382812\nv 0.492188 -0.648438 0.38691\nv 0.5 -0.648417 0.382812\nv -0.320438 -0.640625 0.382812\nv -0.320312 -0.640625 0.382839\nv -0.3125 -0.640625 0.384092\nv -0.304688 -0.640625 0.384576\nv -0.296875 -0.640625 0.384919\nv -0.289062 -0.640625 0.385128\nv -0.28125 -0.640625 0.385563\nv -0.273438 -0.640625 0.385707\nv -0.265625 -0.640625 0.38531\nv -0.257812 -0.640625 0.384746\nv -0.245936 -0.640625 0.382812\nv -0.25 -0.640625 0.383696\nv 0.394369 -0.640625 0.382812\nv 0.398438 -0.640625 0.385694\nv 0.40625 -0.640625 0.388403\nv 0.414062 -0.640625 0.389809\nv 0.445312 -0.640625 0.390032\nv 0.453125 -0.640625 0.38963\nv 0.460938 -0.640625 0.38958\nv 0.46875 -0.640625 0.389597\nv 0.476562 -0.640625 0.389851\nv 0.484375 -0.640625 0.389293\nv 0.492188 -0.640625 0.387277\nv 0.500752 -0.640625 0.382812\nv 0.5 -0.640625 0.383358\nv -0.320378 -0.632812 0.382812\nv -0.320312 -0.632812 0.382827\nv -0.3125 -0.632812 0.384063\nv -0.304688 -0.632812 0.384549\nv -0.296875 -0.632812 0.384957\nv -0.289062 -0.632812 0.385331\nv -0.28125 -0.632812 0.385812\nv -0.273438 -0.632812 0.385936\nv -0.265625 -0.632812 0.38562\nv -0.257812 -0.632812 0.38503\nv -0.245009 -0.632812 0.382812\nv -0.25 -0.632812 0.383945\nv 0.39397 -0.632812 0.382812\nv 0.398438 -0.632812 0.385735\nv 0.40625 -0.632812 0.388411\nv 0.414062 -0.632812 0.389726\nv 0.445312 -0.632812 0.390104\nv 0.453125 -0.632812 0.389791\nv 0.460938 -0.632812 0.389688\nv 0.46875 -0.632812 0.389888\nv 0.476562 -0.632812 0.390257\nv 0.484375 -0.632812 0.389562\nv 0.492188 -0.632812 0.387502\nv 0.501049 -0.632812 0.382812\nv 0.5 -0.632812 0.383541\nv -0.320323 -0.625 0.382812\nv -0.320312 -0.621626 0.382812\nv -0.320312 -0.625 0.382815\nv -0.3125 -0.625 0.384002\nv -0.304688 -0.625 0.384469\nv -0.296875 -0.625 0.384925\nv -0.289062 -0.625 0.385418\nv -0.28125 -0.625 0.385998\nv -0.273438 -0.625 0.386113\nv -0.265625 -0.625 0.385794\nv -0.257812 -0.625 0.38519\nv -0.244528 -0.625 0.382812\nv -0.25 -0.625 0.384085\nv 0.393475 -0.625 0.382812\nv 0.398438 -0.625 0.385863\nv 0.40625 -0.625 0.38852\nv 0.414062 -0.625 0.3896\nv 0.445312 -0.625 0.390144\nv 0.453125 -0.625 0.389899\nv 0.460938 -0.625 0.389772\nv 0.46875 -0.625 0.390099\nv 0.476562 -0.625 0.390414\nv 0.484375 -0.625 0.389769\nv 0.492188 -0.625 0.387581\nv 0.501134 -0.625 0.382812\nv 0.5 -0.625 0.383595\nv -0.320294 -0.617188 0.382812\nv -0.320312 -0.61702 0.382812\nv -0.3125 -0.617188 0.383928\nv -0.304688 -0.617188 0.38442\nv -0.296875 -0.617188 0.384931\nv -0.289062 -0.617188 0.385443\nv -0.28125 -0.617188 0.386067\nv -0.273438 -0.617188 0.386211\nv -0.265625 -0.617188 0.385902\nv -0.257812 -0.617188 0.38527\nv -0.244139 -0.617188 0.382812\nv -0.25 -0.617188 0.384201\nv 0.392957 -0.617188 0.382812\nv 0.398438 -0.617188 0.386008\nv 0.40625 -0.617188 0.388728\nv 0.414062 -0.617188 0.389788\nv 0.445312 -0.617188 0.39013\nv 0.453125 -0.617188 0.389896\nv 0.460938 -0.617188 0.389894\nv 0.46875 -0.617188 0.39025\nv 0.476562 -0.617188 0.390444\nv 0.484375 -0.617188 0.389813\nv 0.492188 -0.617188 0.387455\nv 0.501003 -0.617188 0.382812\nv 0.5 -0.617188 0.383487\nv -0.320964 -0.609375 0.382812\nv -0.320312 -0.609375 0.382946\nv -0.3125 -0.609375 0.383919\nv -0.304688 -0.609375 0.384391\nv -0.296875 -0.609375 0.384932\nv -0.289062 -0.609375 0.385497\nv -0.28125 -0.609375 0.386128\nv -0.273438 -0.609375 0.386302\nv -0.265625 -0.609375 0.385993\nv -0.257812 -0.609375 0.385311\nv -0.244206 -0.609375 0.382812\nv -0.25 -0.609375 0.384209\nv 0.392391 -0.609375 0.382812\nv 0.398438 -0.609375 0.386153\nv 0.40625 -0.609375 0.388901\nv 0.414062 -0.609375 0.389991\nv 0.445312 -0.609375 0.390141\nv 0.453125 -0.609375 0.3899\nv 0.460938 -0.609375 0.389932\nv 0.46875 -0.609375 0.390275\nv 0.476562 -0.609375 0.390402\nv 0.484375 -0.609375 0.389763\nv 0.492188 -0.609375 0.387278\nv 0.500482 -0.609375 0.382812\nv 0.5 -0.60448 0.382812\nv 0.5 -0.609375 0.383126\nv -0.320962 -0.601562 0.382812\nv -0.320312 -0.594453 0.382812\nv -0.320312 -0.601562 0.382947\nv -0.3125 -0.601562 0.383917\nv -0.304688 -0.601562 0.384364\nv -0.296875 -0.601562 0.384957\nv -0.289062 -0.601562 0.38559\nv -0.28125 -0.601562 0.386241\nv -0.273438 -0.601562 0.386397\nv -0.265625 -0.601562 0.386071\nv -0.257812 -0.601562 0.385332\nv -0.244432 -0.601562 0.382812\nv -0.25 -0.601562 0.384205\nv 0.391654 -0.601562 0.382812\nv 0.398438 -0.601562 0.38648\nv 0.40625 -0.601562 0.389242\nv 0.414062 -0.601562 0.390151\nv 0.445312 -0.601562 0.390147\nv 0.453125 -0.601562 0.38976\nv 0.460938 -0.601562 0.3898\nv 0.46875 -0.601562 0.390052\nv 0.476562 -0.601562 0.390055\nv 0.484375 -0.601562 0.389473\nv 0.499666 -0.601562 0.382812\nv 0.492188 -0.601562 0.386795\nv -0.320222 -0.59375 0.382812\nv -0.3125 -0.59375 0.383828\nv -0.304688 -0.59375 0.384229\nv -0.296875 -0.59375 0.384724\nv -0.289062 -0.59375 0.385321\nv -0.28125 -0.59375 0.386002\nv -0.273438 -0.59375 0.386218\nv -0.265625 -0.59375 0.385896\nv -0.257812 -0.59375 0.38506\nv -0.245529 -0.59375 0.382812\nv -0.25 -0.59375 0.383921\nv 0.39163 -0.59375 0.382812\nv 0.398438 -0.59375 0.386577\nv 0.40625 -0.59375 0.389446\nv 0.414062 -0.59375 0.390342\nv 0.4375 -0.59375 0.390549\nv 0.445312 -0.59375 0.389829\nv 0.453125 -0.59375 0.389343\nv 0.460938 -0.59375 0.38931\nv 0.46875 -0.59375 0.389542\nv 0.476562 -0.59375 0.389454\nv 0.484375 -0.59375 0.388931\nv 0.498753 -0.59375 0.382812\nv 0.492188 -0.59375 0.386162\nv -0.319937 -0.585938 0.382812\nv -0.3125 -0.585938 0.383734\nv -0.304688 -0.585938 0.384144\nv -0.296875 -0.585938 0.384547\nv -0.289062 -0.585938 0.385076\nv -0.28125 -0.585938 0.385769\nv -0.273438 -0.585938 0.38603\nv -0.265625 -0.585938 0.385689\nv -0.257812 -0.585938 0.384771\nv -0.24664 -0.585938 0.382812\nv -0.25 -0.585938 0.383607\nv 0.391742 -0.585938 0.382812\nv 0.398438 -0.585938 0.386509\nv 0.40625 -0.585938 0.389725\nv 0.414062 -0.585938 0.390624\nv 0.4375 -0.585938 0.390228\nv 0.445312 -0.585938 0.389535\nv 0.453125 -0.585938 0.389009\nv 0.460938 -0.585938 0.388862\nv 0.46875 -0.585938 0.389031\nv 0.476562 -0.585938 0.388897\nv 0.484375 -0.585938 0.388371\nv 0.49774 -0.585938 0.382812\nv 0.492188 -0.585938 0.385508\nv -0.320085 -0.578125 0.382812\nv -0.3125 -0.578125 0.383703\nv -0.304688 -0.578125 0.384092\nv -0.296875 -0.578125 0.384444\nv -0.289062 -0.578125 0.384891\nv -0.28125 -0.578125 0.385541\nv -0.273438 -0.578125 0.385859\nv -0.265625 -0.578125 0.385459\nv -0.257812 -0.578125 0.384503\nv -0.247696 -0.578125 0.382812\nv -0.25 -0.578125 0.383378\nv 0.39172 -0.578125 0.382812\nv 0.398438 -0.578125 0.386413\nv 0.40625 -0.578125 0.389976\nv 0.4375 -0.578125 0.390099\nv 0.445312 -0.578125 0.389276\nv 0.453125 -0.578125 0.388706\nv 0.460938 -0.578125 0.388494\nv 0.46875 -0.578125 0.388509\nv 0.476562 -0.578125 0.388424\nv 0.484375 -0.578125 0.387956\nv 0.497097 -0.578125 0.382812\nv 0.492188 -0.578125 0.385178\nv -0.320115 -0.570312 0.382812\nv -0.320312 -0.568814 0.382812\nv -0.3125 -0.570312 0.38368\nv -0.304688 -0.570312 0.384097\nv -0.296875 -0.570312 0.384415\nv -0.289062 -0.570312 0.384823\nv -0.28125 -0.570312 0.385381\nv -0.273438 -0.570312 0.385683\nv -0.265625 -0.570312 0.385225\nv -0.257812 -0.570312 0.384232\nv -0.248749 -0.570312 0.382812\nv -0.25 -0.570312 0.383126\nv 0.391642 -0.570312 0.382812\nv 0.398438 -0.570312 0.386267\nv 0.40625 -0.570312 0.390034\nv 0.4375 -0.570312 0.39012\nv 0.445312 -0.570312 0.389192\nv 0.453125 -0.570312 0.388583\nv 0.460938 -0.570312 0.388312\nv 0.46875 -0.570312 0.388202\nv 0.476562 -0.570312 0.388097\nv 0.484375 -0.570312 0.387611\nv 0.496444 -0.570312 0.382812\nv 0.492188 -0.570312 0.384915\nv -0.320812 -0.5625 0.382812\nv -0.320312 -0.5625 0.382917\nv -0.3125 -0.5625 0.383751\nv -0.304688 -0.5625 0.384133\nv -0.296875 -0.5625 0.384402\nv -0.289062 -0.5625 0.384825\nv -0.28125 -0.5625 0.385323\nv -0.273438 -0.5625 0.385551\nv -0.265625 -0.5625 0.384949\nv -0.257812 -0.5625 0.383961\nv -0.249693 -0.5625 0.382812\nv -0.25 -0.559944 0.382812\nv -0.25 -0.5625 0.38289\nv 0.391355 -0.5625 0.382812\nv 0.398438 -0.5625 0.386267\nv 0.40625 -0.5625 0.390063\nv 0.4375 -0.5625 0.390303\nv 0.445312 -0.5625 0.389218\nv 0.453125 -0.5625 0.388555\nv 0.460938 -0.5625 0.388266\nv 0.46875 -0.5625 0.387959\nv 0.476562 -0.5625 0.387715\nv 0.484375 -0.5625 0.38726\nv 0.496041 -0.5625 0.382812\nv 0.492188 -0.5625 0.384771\nv -0.321469 -0.554688 0.382812\nv -0.320312 -0.554688 0.38308\nv -0.3125 -0.554688 0.383918\nv -0.304688 -0.554688 0.384323\nv -0.296875 -0.554688 0.384642\nv -0.289062 -0.554688 0.38504\nv -0.28125 -0.554688 0.385474\nv -0.273438 -0.554688 0.385615\nv -0.265625 -0.554688 0.384819\nv -0.251129 -0.554688 0.382812\nv -0.257812 -0.554688 0.383742\nv 0.391189 -0.554688 0.382812\nv 0.398438 -0.554688 0.386353\nv 0.40625 -0.554688 0.390177\nv 0.4375 -0.554688 0.390518\nv 0.445312 -0.554688 0.389314\nv 0.453125 -0.554688 0.388561\nv 0.460938 -0.554688 0.38829\nv 0.46875 -0.554688 0.38789\nv 0.476562 -0.554688 0.387477\nv 0.484375 -0.554688 0.386955\nv 0.495818 -0.554688 0.382812\nv 0.492188 -0.554688 0.384714\nv -0.321997 -0.546875 0.382812\nv -0.320312 -0.546875 0.383231\nv -0.3125 -0.546875 0.38405\nv -0.304688 -0.546875 0.384485\nv -0.296875 -0.546875 0.384827\nv -0.289062 -0.546875 0.385239\nv -0.28125 -0.546875 0.385679\nv -0.273438 -0.546875 0.385797\nv -0.265625 -0.546875 0.384913\nv -0.250878 -0.546875 0.382812\nv -0.257812 -0.546875 0.383839\nv -0.25 -0.542513 0.382812\nv 0.390906 -0.546875 0.382812\nv 0.390625 -0.54528 0.382812\nv 0.398438 -0.546875 0.386219\nv 0.40625 -0.546875 0.389912\nv 0.445312 -0.546875 0.389485\nv 0.453125 -0.546875 0.388616\nv 0.460938 -0.546875 0.388289\nv 0.46875 -0.546875 0.38791\nv 0.476562 -0.546875 0.387433\nv 0.484375 -0.546875 0.386909\nv 0.495632 -0.546875 0.382812\nv 0.492188 -0.546875 0.384615\nv -0.322839 -0.539062 0.382812\nv -0.320312 -0.539062 0.383478\nv -0.3125 -0.539062 0.384196\nv -0.304688 -0.539062 0.384661\nv -0.296875 -0.539062 0.38505\nv -0.289062 -0.539062 0.385462\nv -0.28125 -0.539062 0.38592\nv -0.273438 -0.539062 0.386037\nv -0.265625 -0.539062 0.38508\nv -0.257812 -0.539062 0.384045\nv -0.249543 -0.539062 0.382812\nv -0.25 -0.539062 0.382917\nv -0.0234375 -0.531401 0.382812\nv -0.015625 -0.531358 0.382812\nv -0.0078125 -0.532441 0.382812\nv 0 -0.533302 0.382812\nv 0.0078125 -0.533548 0.382812\nv 0.015625 -0.533232 0.382812\nv 0.0234375 -0.532693 0.382812\nv 0.03125 -0.531493 0.382812\nv 0.389169 -0.539062 0.382812\nv 0.390625 -0.539062 0.38325\nv 0.398438 -0.539062 0.386035\nv 0.40625 -0.539062 0.389382\nv 0.445312 -0.539062 0.38965\nv 0.453125 -0.539062 0.388789\nv 0.460938 -0.539062 0.38834\nv 0.46875 -0.539062 0.387952\nv 0.476562 -0.539062 0.387442\nv 0.484375 -0.539062 0.38702\nv 0.495896 -0.539062 0.382812\nv 0.492188 -0.539062 0.384738\nv -0.323048 -0.53125 0.382812\nv -0.320312 -0.53125 0.383546\nv -0.3125 -0.53125 0.384218\nv -0.304688 -0.53125 0.384758\nv -0.296875 -0.53125 0.385197\nv -0.289062 -0.53125 0.385665\nv -0.28125 -0.53125 0.38618\nv -0.273438 -0.53125 0.38623\nv -0.265625 -0.53125 0.385225\nv -0.257812 -0.53125 0.384406\nv -0.246853 -0.53125 0.382812\nv -0.25 -0.53125 0.38357\nv -0.148438 -0.523615 0.382812\nv -0.140625 -0.523782 0.382812\nv -0.101562 -0.524803 0.382812\nv -0.09375 -0.527044 0.382812\nv -0.0859375 -0.528961 0.382812\nv -0.078125 -0.530332 0.382812\nv -0.0703125 -0.530659 0.382812\nv -0.0625 -0.530593 0.382812\nv -0.0546875 -0.530548 0.382812\nv -0.046875 -0.530461 0.382812\nv -0.0390625 -0.530577 0.382812\nv -0.0271473 -0.53125 0.382812\nv -0.03125 -0.531045 0.382812\nv -0.0234375 -0.53125 0.382866\nv -0.015625 -0.53125 0.38285\nv -0.0078125 -0.53125 0.383212\nv 0 -0.53125 0.383499\nv 0.0078125 -0.53125 0.383543\nv 0.015625 -0.53125 0.38346\nv 0.0234375 -0.53125 0.383323\nv 0.0327205 -0.53125 0.382812\nv 0.03125 -0.53125 0.382901\nv 0.0390625 -0.529872 0.382812\nv 0.046875 -0.528376 0.382812\nv 0.0546875 -0.528063 0.382812\nv 0.0625 -0.528337 0.382812\nv 0.0703125 -0.527073 0.382812\nv 0.078125 -0.525611 0.382812\nv 0.0859375 -0.524563 0.382812\nv 0.09375 -0.524332 0.382812\nv 0.101562 -0.52493 0.382812\nv 0.109375 -0.524932 0.382812\nv 0.117188 -0.524784 0.382812\nv 0.125 -0.524096 0.382812\nv 0.210938 -0.524199 0.382812\nv 0.21875 -0.525793 0.382812\nv 0.226562 -0.527236 0.382812\nv 0.234375 -0.527885 0.382812\nv 0.242188 -0.528777 0.382812\nv 0.25 -0.529327 0.382812\nv 0.257812 -0.529895 0.382812\nv 0.265625 -0.529353 0.382812\nv 0.273438 -0.528138 0.382812\nv 0.28125 -0.527488 0.382812\nv 0.289062 -0.527644 0.382812\nv 0.296875 -0.527404 0.382812\nv 0.304688 -0.525889 0.382812\nv 0.3125 -0.523964 0.382812\nv 0.320312 -0.523993 0.382812\nv 0.328125 -0.525007 0.382812\nv 0.335938 -0.525929 0.382812\nv 0.34375 -0.527195 0.382812\nv 0.351562 -0.527229 0.382812\nv 0.359375 -0.527064 0.382812\nv 0.367188 -0.525535 0.382812\nv 0.384809 -0.53125 0.382812\nv 0.382812 -0.527671 0.382812\nv 0.390625 -0.53125 0.384286\nv 0.398438 -0.53125 0.386165\nv 0.40625 -0.53125 0.389121\nv 0.414062 -0.53125 0.390527\nv 0.445312 -0.53125 0.389895\nv 0.453125 -0.53125 0.389127\nv 0.460938 -0.53125 0.388541\nv 0.46875 -0.53125 0.388149\nv 0.476562 -0.53125 0.387649\nv 0.484375 -0.53125 0.387172\nv 0.496684 -0.53125 0.382812\nv 0.492188 -0.53125 0.38496\nv -0.323888 -0.523438 0.382812\nv -0.320312 -0.523438 0.383806\nv -0.3125 -0.523438 0.384334\nv -0.304688 -0.523438 0.384895\nv -0.296875 -0.523438 0.385476\nv -0.289062 -0.523438 0.38599\nv -0.28125 -0.523438 0.386519\nv -0.273438 -0.523438 0.386502\nv -0.265625 -0.523438 0.385711\nv -0.257812 -0.523438 0.385058\nv -0.243737 -0.523438 0.382812\nv -0.25 -0.523438 0.384305\nv -0.242188 -0.519449 0.382812\nv -0.1875 -0.516339 0.382812\nv -0.179688 -0.517803 0.382812\nv -0.171875 -0.519321 0.382812\nv -0.164062 -0.520859 0.382812\nv -0.150299 -0.523438 0.382812\nv -0.15625 -0.522823 0.382812\nv -0.148438 -0.523438 0.382859\nv -0.139669 -0.523438 0.382812\nv -0.140625 -0.523438 0.3829\nv -0.132812 -0.520435 0.382812\nv -0.125 -0.517252 0.382812\nv -0.117188 -0.519748 0.382812\nv -0.106082 -0.523438 0.382812\nv -0.109375 -0.522342 0.382812\nv -0.101562 -0.523438 0.383275\nv -0.09375 -0.523438 0.383965\nv -0.0859375 -0.523438 0.384512\nv -0.078125 -0.523438 0.38483\nv -0.0703125 -0.523438 0.384908\nv -0.0625 -0.523438 0.384922\nv -0.0546875 -0.523438 0.384802\nv -0.046875 -0.523438 0.384698\nv -0.0390625 -0.523438 0.384738\nv -0.03125 -0.523438 0.384941\nv -0.0234375 -0.523438 0.385082\nv -0.015625 -0.523438 0.385004\nv -0.0078125 -0.523438 0.385254\nv 0 -0.523438 0.38537\nv 0.0078125 -0.523438 0.385354\nv 0.015625 -0.523438 0.385222\nv 0.0234375 -0.523438 0.385037\nv 0.03125 -0.523438 0.384706\nv 0.0390625 -0.523438 0.38451\nv 0.046875 -0.523438 0.384216\nv 0.0546875 -0.523438 0.384068\nv 0.0625 -0.523438 0.38403\nv 0.0703125 -0.523438 0.383679\nv 0.078125 -0.523438 0.383348\nv 0.0859375 -0.523438 0.383103\nv 0.09375 -0.523438 0.38304\nv 0.101562 -0.523438 0.383192\nv 0.109375 -0.523438 0.383202\nv 0.117188 -0.523438 0.383161\nv 0.129569 -0.523438 0.382812\nv 0.125 -0.523438 0.382996\nv 0.132812 -0.522815 0.382812\nv 0.140625 -0.520839 0.382812\nv 0.148438 -0.519438 0.382812\nv 0.15625 -0.519061 0.382812\nv 0.164062 -0.519218 0.382812\nv 0.171875 -0.518725 0.382812\nv 0.179688 -0.518959 0.382812\nv 0.1875 -0.5196 0.382812\nv 0.195312 -0.520481 0.382812\nv 0.207804 -0.523438 0.382812\nv 0.203125 -0.521898 0.382812\nv 0.210938 -0.523438 0.382986\nv 0.21875 -0.523438 0.383364\nv 0.226562 -0.523438 0.383589\nv 0.234375 -0.523438 0.383616\nv 0.242188 -0.523438 0.383653\nv 0.25 -0.523438 0.383876\nv 0.257812 -0.523438 0.38406\nv 0.265625 -0.523438 0.383893\nv 0.273438 -0.523438 0.383564\nv 0.28125 -0.523438 0.383414\nv 0.289062 -0.523438 0.383438\nv 0.296875 -0.523438 0.383375\nv 0.304688 -0.523438 0.38313\nv 0.3125 -0.523438 0.382884\nv 0.320312 -0.523438 0.382896\nv 0.328125 -0.523438 0.383084\nv 0.335938 -0.523438 0.383353\nv 0.34375 -0.523438 0.383639\nv 0.351562 -0.523438 0.383674\nv 0.359375 -0.523438 0.383536\nv 0.37452 -0.523438 0.382812\nv 0.367188 -0.523438 0.383227\nv 0.375336 -0.523438 0.382812\nv 0.375 -0.523282 0.382812\nv 0.382812 -0.523438 0.383467\nv 0.390625 -0.523438 0.385259\nv 0.398438 -0.523438 0.386681\nv 0.40625 -0.523438 0.389125\nv 0.414062 -0.523438 0.390512\nv 0.445312 -0.523438 0.389957\nv 0.453125 -0.523438 0.389376\nv 0.460938 -0.523438 0.388769\nv 0.46875 -0.523438 0.388384\nv 0.476562 -0.523438 0.387807\nv 0.484375 -0.523438 0.387245\nv 0.497285 -0.523438 0.382812\nv 0.492188 -0.523438 0.38514\nv -0.32446 -0.515625 0.382812\nv -0.320312 -0.515625 0.384036\nv -0.3125 -0.515625 0.38446\nv -0.304688 -0.515625 0.385029\nv -0.296875 -0.515625 0.385641\nv -0.289062 -0.515625 0.386281\nv -0.28125 -0.515625 0.386897\nv -0.273438 -0.515625 0.386946\nv -0.265625 -0.515625 0.3862\nv -0.257812 -0.515625 0.385636\nv -0.25 -0.515625 0.384948\nv -0.240127 -0.515625 0.382812\nv -0.242188 -0.515625 0.383199\nv -0.190177 -0.515625 0.382812\nv -0.1875 -0.515625 0.383005\nv -0.179688 -0.515625 0.383378\nv -0.171875 -0.515625 0.383748\nv -0.164062 -0.515625 0.384114\nv -0.15625 -0.515625 0.384564\nv -0.148438 -0.515625 0.384696\nv -0.140625 -0.515625 0.384652\nv -0.132812 -0.515625 0.38394\nv -0.125 -0.515625 0.383233\nv -0.117188 -0.515625 0.383973\nv -0.109375 -0.515625 0.384844\nv -0.101562 -0.515625 0.385676\nv -0.09375 -0.515625 0.386232\nv -0.0859375 -0.515625 0.386648\nv -0.078125 -0.515625 0.386809\nv -0.0703125 -0.515625 0.386847\nv -0.0625 -0.515625 0.38687\nv -0.0546875 -0.515625 0.386801\nv -0.046875 -0.515625 0.386673\nv -0.0390625 -0.515625 0.386612\nv -0.03125 -0.515625 0.386713\nv -0.0234375 -0.515625 0.386857\nv -0.015625 -0.515625 0.386788\nv -0.0078125 -0.515625 0.387014\nv 0 -0.515625 0.386979\nv 0.0078125 -0.515625 0.386804\nv 0.015625 -0.515625 0.386547\nv 0.0234375 -0.515625 0.386256\nv 0.03125 -0.515625 0.385883\nv 0.0390625 -0.515625 0.385664\nv 0.046875 -0.515625 0.385497\nv 0.0546875 -0.515625 0.38567\nv 0.0625 -0.515625 0.385658\nv 0.0703125 -0.515625 0.385242\nv 0.078125 -0.515625 0.384974\nv 0.0859375 -0.515625 0.38478\nv 0.09375 -0.515625 0.384737\nv 0.101562 -0.515625 0.384781\nv 0.109375 -0.515625 0.38465\nv 0.117188 -0.515625 0.384616\nv 0.125 -0.515625 0.384562\nv 0.132812 -0.515625 0.384294\nv 0.140625 -0.515625 0.383982\nv 0.148438 -0.515625 0.383679\nv 0.15625 -0.515625 0.383514\nv 0.164062 -0.515625 0.383501\nv 0.171875 -0.515625 0.383351\nv 0.179688 -0.515625 0.383502\nv 0.1875 -0.515625 0.383652\nv 0.195312 -0.515625 0.383727\nv 0.203125 -0.515625 0.383884\nv 0.210938 -0.515625 0.384156\nv 0.21875 -0.515625 0.384496\nv 0.226562 -0.515625 0.384772\nv 0.234375 -0.515625 0.384728\nv 0.242188 -0.515625 0.384634\nv 0.25 -0.515625 0.384653\nv 0.257812 -0.515625 0.384781\nv 0.265625 -0.515625 0.384778\nv 0.273438 -0.515625 0.384539\nv 0.28125 -0.515625 0.38426\nv 0.289062 -0.515625 0.384104\nv 0.296875 -0.515625 0.383923\nv 0.304688 -0.515625 0.383787\nv 0.3125 -0.515625 0.383649\nv 0.320312 -0.515625 0.383722\nv 0.328125 -0.515625 0.383974\nv 0.335938 -0.515625 0.384297\nv 0.34375 -0.515625 0.384838\nv 0.351562 -0.515625 0.385154\nv 0.359375 -0.515625 0.385252\nv 0.367188 -0.515625 0.38459\nv 0.375 -0.515625 0.384177\nv 0.382812 -0.515625 0.384704\nv 0.390625 -0.515625 0.386185\nv 0.398438 -0.515625 0.38751\nv 0.40625 -0.515625 0.389137\nv 0.414062 -0.515625 0.3906\nv 0.4375 -0.515625 0.390617\nv 0.445312 -0.515625 0.389934\nv 0.453125 -0.515625 0.389374\nv 0.460938 -0.515625 0.388855\nv 0.46875 -0.515625 0.388506\nv 0.476562 -0.515625 0.387914\nv 0.484375 -0.515625 0.387347\nv 0.49795 -0.515625 0.382812\nv 0.492188 -0.515625 0.385261\nv -0.324909 -0.507812 0.382812\nv -0.320312 -0.507812 0.384248\nv -0.3125 -0.507812 0.384622\nv -0.304688 -0.507812 0.385171\nv -0.296875 -0.507812 0.385779\nv -0.289062 -0.507812 0.386559\nv -0.28125 -0.507812 0.38734\nv -0.273438 -0.507812 0.387282\nv -0.265625 -0.507812 0.386559\nv -0.257812 -0.507812 0.386025\nv -0.25 -0.507812 0.385347\nv -0.236572 -0.507812 0.382812\nv -0.242188 -0.507812 0.383748\nv -0.190653 -0.507812 0.382812\nv -0.1875 -0.507179 0.382812\nv -0.1875 -0.507812 0.383049\nv -0.179688 -0.506498 0.382812\nv -0.179688 -0.507812 0.383305\nv -0.171875 -0.505391 0.382812\nv -0.171875 -0.507812 0.383684\nv -0.164062 -0.504191 0.382812\nv -0.164062 -0.507812 0.384088\nv -0.15625 -0.502206 0.382812\nv -0.15625 -0.507812 0.384631\nv -0.148438 -0.501314 0.382812\nv -0.148438 -0.507812 0.38487\nv -0.140625 -0.500991 0.382812\nv -0.140625 -0.507812 0.38493\nv -0.132812 -0.504476 0.382812\nv -0.132812 -0.507812 0.384118\nv -0.125 -0.505577 0.382812\nv -0.125 -0.507812 0.383668\nv -0.117188 -0.50297 0.382812\nv -0.117188 -0.507812 0.384656\nv -0.109375 -0.500002 0.382812\nv -0.109375 -0.507812 0.38563\nv -0.101562 -0.507812 0.386574\nv -0.09375 -0.507812 0.387139\nv -0.0859375 -0.507812 0.387544\nv -0.078125 -0.507812 0.387714\nv -0.0703125 -0.507812 0.387796\nv -0.0625 -0.507812 0.387853\nv -0.0546875 -0.507812 0.387911\nv -0.046875 -0.507812 0.387928\nv -0.0390625 -0.507812 0.387956\nv -0.03125 -0.507812 0.387955\nv -0.0234375 -0.507812 0.387893\nv -0.015625 -0.507812 0.38775\nv -0.0078125 -0.507812 0.38785\nv 0 -0.507812 0.387699\nv 0.0078125 -0.507812 0.387394\nv 0.015625 -0.507812 0.386968\nv 0.0234375 -0.507812 0.386555\nv 0.03125 -0.507812 0.386116\nv 0.0390625 -0.507812 0.385853\nv 0.046875 -0.507812 0.385597\nv 0.0546875 -0.507812 0.385679\nv 0.0625 -0.507812 0.385826\nv 0.0703125 -0.507812 0.385668\nv 0.078125 -0.507812 0.385422\nv 0.0859375 -0.507812 0.385132\nv 0.09375 -0.507812 0.384979\nv 0.101562 -0.507812 0.384841\nv 0.109375 -0.507812 0.384745\nv 0.117188 -0.500644 0.382812\nv 0.117188 -0.507812 0.384681\nv 0.125 -0.50112 0.382812\nv 0.125 -0.507812 0.384587\nv 0.132812 -0.502945 0.382812\nv 0.132812 -0.507812 0.384277\nv 0.140625 -0.504485 0.382812\nv 0.140625 -0.507812 0.383904\nv 0.148438 -0.50537 0.382812\nv 0.148438 -0.507812 0.383673\nv 0.15625 -0.505221 0.382812\nv 0.15625 -0.507812 0.383772\nv 0.164062 -0.505216 0.382812\nv 0.164062 -0.507812 0.383753\nv 0.171875 -0.505555 0.382812\nv 0.171875 -0.507812 0.383636\nv 0.179688 -0.505656 0.382812\nv 0.179688 -0.507812 0.383636\nv 0.1875 -0.505399 0.382812\nv 0.1875 -0.507812 0.383718\nv 0.195312 -0.504722 0.382812\nv 0.195312 -0.507812 0.383961\nv 0.203125 -0.50412 0.382812\nv 0.203125 -0.507812 0.384168\nv 0.210938 -0.503181 0.382812\nv 0.210938 -0.507812 0.384359\nv 0.21875 -0.50231 0.382812\nv 0.21875 -0.507812 0.384658\nv 0.226562 -0.501683 0.382812\nv 0.226562 -0.507812 0.384755\nv 0.234375 -0.501897 0.382812\nv 0.234375 -0.507812 0.384701\nv 0.242188 -0.502058 0.382812\nv 0.242188 -0.507812 0.384675\nv 0.25 -0.502207 0.382812\nv 0.25 -0.507812 0.384651\nv 0.257812 -0.502275 0.382812\nv 0.257812 -0.507812 0.384623\nv 0.265625 -0.502858 0.382812\nv 0.265625 -0.507812 0.384479\nv 0.273438 -0.503442 0.382812\nv 0.273438 -0.507812 0.384305\nv 0.28125 -0.504056 0.382812\nv 0.28125 -0.507812 0.384126\nv 0.289062 -0.504449 0.382812\nv 0.289062 -0.507812 0.383956\nv 0.296875 -0.505333 0.382812\nv 0.296875 -0.507812 0.383669\nv 0.304688 -0.506161 0.382812\nv 0.304688 -0.507812 0.383426\nv 0.3125 -0.506625 0.382812\nv 0.3125 -0.507812 0.383283\nv 0.320312 -0.506203 0.382812\nv 0.320312 -0.507812 0.383392\nv 0.328125 -0.505313 0.382812\nv 0.328125 -0.507812 0.383696\nv 0.335938 -0.504152 0.382812\nv 0.335938 -0.507812 0.384086\nv 0.34375 -0.502569 0.382812\nv 0.34375 -0.507812 0.384613\nv 0.351562 -0.501736 0.382812\nv 0.351562 -0.507812 0.385006\nv 0.359375 -0.500976 0.382812\nv 0.359375 -0.507812 0.385396\nv 0.367188 -0.501989 0.382812\nv 0.367188 -0.507812 0.384755\nv 0.375 -0.503113 0.382812\nv 0.375 -0.507812 0.384262\nv 0.382812 -0.507812 0.384896\nv 0.390625 -0.507812 0.386369\nv 0.398438 -0.507812 0.387766\nv 0.40625 -0.507812 0.389203\nv 0.414062 -0.507812 0.390412\nv 0.4375 -0.507812 0.390453\nv 0.445312 -0.507812 0.389761\nv 0.453125 -0.507812 0.389203\nv 0.460938 -0.507812 0.388744\nv 0.46875 -0.507812 0.388393\nv 0.476562 -0.507812 0.387849\nv 0.484375 -0.507812 0.387316\nv 0.497846 -0.507812 0.382812\nv 0.492188 -0.507812 0.385288\nv -0.325281 -0.5 0.382812\nv -0.320312 -0.5 0.38442\nv -0.3125 -0.5 0.384755\nv -0.304688 -0.5 0.385281\nv -0.296875 -0.5 0.385893\nv -0.289062 -0.5 0.386693\nv -0.28125 -0.5 0.387202\nv -0.273438 -0.5 0.387237\nv -0.265625 -0.5 0.386565\nv -0.257812 -0.5 0.386084\nv -0.25 -0.5 0.385377\nv -0.237322 -0.5 0.382812\nv -0.242188 -0.5 0.383818\nv -0.10937 -0.5 0.382812\nv -0.101562 -0.497895 0.382812\nv -0.101562 -0.5 0.383909\nv -0.09375 -0.495833 0.382812\nv -0.09375 -0.5 0.384927\nv -0.0859375 -0.494216 0.382812\nv -0.0859375 -0.5 0.385597\nv -0.078125 -0.492717 0.382812\nv -0.078125 -0.5 0.386007\nv -0.0703125 -0.5 0.386154\nv -0.0625 -0.5 0.386268\nv -0.0546875 -0.5 0.386383\nv -0.046875 -0.5 0.386543\nv -0.0390625 -0.5 0.386705\nv -0.03125 -0.5 0.386847\nv -0.0234375 -0.5 0.386909\nv -0.015625 -0.5 0.386719\nv -0.0078125 -0.5 0.386563\nv 0 -0.5 0.386365\nv 0.0078125 -0.5 0.386031\nv 0.015625 -0.493524 0.382812\nv 0.015625 -0.5 0.38554\nv 0.0234375 -0.494833 0.382812\nv 0.0234375 -0.5 0.385016\nv 0.03125 -0.496269 0.382812\nv 0.03125 -0.5 0.38447\nv 0.0390625 -0.497025 0.382812\nv 0.0390625 -0.5 0.384151\nv 0.046875 -0.497905 0.382812\nv 0.046875 -0.5 0.383729\nv 0.0546875 -0.497486 0.382812\nv 0.0546875 -0.5 0.383897\nv 0.0625 -0.497298 0.382812\nv 0.0625 -0.5 0.384005\nv 0.0703125 -0.497467 0.382812\nv 0.0703125 -0.5 0.383961\nv 0.078125 -0.497646 0.382812\nv 0.078125 -0.5 0.383913\nv 0.0859375 -0.498197 0.382812\nv 0.0859375 -0.5 0.383687\nv 0.09375 -0.498553 0.382812\nv 0.09375 -0.5 0.383471\nv 0.101562 -0.499193 0.382812\nv 0.101562 -0.5 0.383194\nv 0.111927 -0.5 0.382812\nv 0.109375 -0.49985 0.382812\nv 0.109375 -0.5 0.382888\nv 0.380696 -0.5 0.382812\nv 0.382812 -0.498807 0.382812\nv 0.382812 -0.5 0.383206\nv 0.390625 -0.5 0.385445\nv 0.398438 -0.5 0.386938\nv 0.40625 -0.5 0.388679\nv 0.414062 -0.5 0.389978\nv 0.4375 -0.5 0.390245\nv 0.445312 -0.5 0.389592\nv 0.453125 -0.5 0.389051\nv 0.460938 -0.5 0.388679\nv 0.46875 -0.5 0.388369\nv 0.476562 -0.5 0.387791\nv 0.484375 -0.5 0.387336\nv 0.49765 -0.5 0.382812\nv 0.492188 -0.5 0.385279\nv -0.325301 -0.492188 0.382812\nv -0.320312 -0.492188 0.38445\nv -0.3125 -0.492188 0.384849\nv -0.304688 -0.492188 0.385299\nv -0.296875 -0.492188 0.385911\nv -0.289062 -0.492188 0.386819\nv -0.28125 -0.492188 0.38722\nv -0.273438 -0.492188 0.387082\nv -0.265625 -0.492188 0.386454\nv -0.257812 -0.492188 0.385988\nv -0.25 -0.492188 0.38524\nv -0.23834 -0.492188 0.382812\nv -0.242188 -0.492188 0.383674\nv -0.0743274 -0.492188 0.382812\nv -0.0703125 -0.491628 0.382812\nv -0.0703125 -0.492188 0.383057\nv -0.0625 -0.491325 0.382812\nv -0.0625 -0.492188 0.383156\nv -0.0546875 -0.491121 0.382812\nv -0.0546875 -0.492188 0.383239\nv -0.046875 -0.490795 0.382812\nv -0.046875 -0.492188 0.383377\nv -0.0390625 -0.490449 0.382812\nv -0.0390625 -0.492188 0.383522\nv -0.03125 -0.4899 0.382812\nv -0.03125 -0.492188 0.383737\nv -0.0234375 -0.489663 0.382812\nv -0.0234375 -0.492188 0.383839\nv -0.015625 -0.48986 0.382812\nv -0.015625 -0.492188 0.383745\nv -0.0078125 -0.490225 0.382812\nv -0.0078125 -0.492188 0.383617\nv 0 -0.490901 0.382812\nv 0 -0.492188 0.383333\nv 0.00805502 -0.492188 0.382812\nv 0.0078125 -0.492144 0.382812\nv 0.0078125 -0.492188 0.38283\nv 0.388182 -0.492188 0.382812\nv 0.390625 -0.488498 0.382812\nv 0.390625 -0.492188 0.383723\nv 0.398438 -0.492188 0.385703\nv 0.40625 -0.492188 0.387978\nv 0.414062 -0.492188 0.389603\nv 0.421875 -0.492188 0.390386\nv 0.429688 -0.492188 0.390572\nv 0.4375 -0.492188 0.390102\nv 0.445312 -0.492188 0.389427\nv 0.453125 -0.492188 0.388951\nv 0.460938 -0.492188 0.388625\nv 0.46875 -0.492188 0.388406\nv 0.476562 -0.492188 0.387882\nv 0.484375 -0.492188 0.387446\nv 0.497749 -0.492188 0.382812\nv 0.492188 -0.492188 0.385339\nv -0.32548 -0.484375 0.382812\nv -0.320312 -0.484375 0.384528\nv -0.3125 -0.484375 0.384987\nv -0.304688 -0.484375 0.38537\nv -0.296875 -0.484375 0.386015\nv -0.289062 -0.484375 0.387008\nv -0.28125 -0.484375 0.38733\nv -0.273438 -0.484375 0.387052\nv -0.265625 -0.484375 0.386226\nv -0.257812 -0.484375 0.385773\nv -0.25 -0.484375 0.385081\nv -0.23978 -0.484375 0.382812\nv -0.242188 -0.484375 0.38338\nv 0.393245 -0.484375 0.382812\nv 0.398438 -0.484375 0.384897\nv 0.40625 -0.484375 0.38765\nv 0.414062 -0.484375 0.389398\nv 0.421875 -0.484375 0.390184\nv 0.429688 -0.484375 0.390555\nv 0.4375 -0.484375 0.390137\nv 0.445312 -0.484375 0.389444\nv 0.453125 -0.484375 0.389\nv 0.460938 -0.484375 0.388674\nv 0.46875 -0.484375 0.388452\nv 0.476562 -0.484375 0.388026\nv 0.484375 -0.484375 0.387587\nv 0.497893 -0.484375 0.382812\nv 0.492188 -0.484375 0.385477\nv -0.325545 -0.476562 0.382812\nv -0.320312 -0.476562 0.384596\nv -0.3125 -0.476562 0.385143\nv -0.304688 -0.476562 0.385536\nv -0.296875 -0.476562 0.386203\nv -0.289062 -0.476562 0.387225\nv -0.28125 -0.476562 0.387477\nv -0.273438 -0.476562 0.38711\nv -0.265625 -0.476562 0.386204\nv -0.257812 -0.476562 0.385614\nv -0.25 -0.476562 0.384834\nv -0.24143 -0.476562 0.382812\nv -0.242188 -0.472916 0.382812\nv -0.242188 -0.476562 0.382992\nv 0.395696 -0.476562 0.382812\nv 0.398438 -0.476562 0.384023\nv 0.40625 -0.476562 0.387246\nv 0.414062 -0.476562 0.389151\nv 0.421875 -0.476562 0.390003\nv 0.429688 -0.476562 0.390422\nv 0.4375 -0.476562 0.390058\nv 0.445312 -0.476562 0.389511\nv 0.453125 -0.476562 0.389061\nv 0.460938 -0.476562 0.388752\nv 0.46875 -0.476562 0.388531\nv 0.476562 -0.476562 0.388162\nv 0.484375 -0.476562 0.387726\nv 0.498316 -0.476562 0.382812\nv 0.492188 -0.476562 0.385726\nv -0.325703 -0.46875 0.382812\nv -0.320312 -0.46875 0.384662\nv -0.3125 -0.46875 0.385274\nv -0.304688 -0.46875 0.385624\nv -0.296875 -0.46875 0.386354\nv -0.289062 -0.46875 0.387368\nv -0.28125 -0.46875 0.387582\nv -0.273438 -0.46875 0.387192\nv -0.265625 -0.46875 0.386226\nv -0.257812 -0.46875 0.385599\nv -0.243004 -0.46875 0.382812\nv -0.25 -0.46875 0.384435\nv 0.397342 -0.46875 0.382812\nv 0.398438 -0.461739 0.382812\nv 0.398438 -0.46875 0.383357\nv 0.40625 -0.46875 0.386811\nv 0.414062 -0.46875 0.389\nv 0.421875 -0.46875 0.389875\nv 0.429688 -0.46875 0.390262\nv 0.4375 -0.46875 0.389928\nv 0.445312 -0.46875 0.389474\nv 0.453125 -0.46875 0.38911\nv 0.460938 -0.46875 0.388863\nv 0.46875 -0.46875 0.388624\nv 0.476562 -0.46875 0.388306\nv 0.484375 -0.46875 0.38797\nv 0.49872 -0.46875 0.382812\nv 0.492188 -0.46875 0.386035\nv -0.325887 -0.460938 0.382812\nv -0.320312 -0.460938 0.384708\nv -0.3125 -0.460938 0.385372\nv -0.304688 -0.460938 0.385683\nv -0.296875 -0.460938 0.386453\nv -0.289062 -0.460938 0.387457\nv -0.28125 -0.460938 0.387682\nv -0.273438 -0.460938 0.387247\nv -0.265625 -0.460938 0.386213\nv -0.257812 -0.460938 0.385525\nv -0.244337 -0.460938 0.382812\nv -0.25 -0.460938 0.384285\nv 0.398569 -0.460938 0.382812\nv 0.40625 -0.460938 0.386375\nv 0.414062 -0.460938 0.388818\nv 0.421875 -0.460938 0.389762\nv 0.429688 -0.460938 0.390134\nv 0.4375 -0.460938 0.389822\nv 0.445312 -0.460938 0.389431\nv 0.453125 -0.460938 0.389102\nv 0.460938 -0.460938 0.388913\nv 0.46875 -0.460938 0.388683\nv 0.476562 -0.460938 0.388484\nv 0.484375 -0.460938 0.388214\nv 0.499402 -0.460938 0.382812\nv 0.492188 -0.460938 0.386403\nv 0.5 -0.454307 0.382812\nv -0.325698 -0.453125 0.382812\nv -0.320312 -0.453125 0.384735\nv -0.3125 -0.453125 0.385429\nv -0.304688 -0.453125 0.385738\nv -0.296875 -0.453125 0.386517\nv -0.289062 -0.453125 0.387484\nv -0.28125 -0.453125 0.387725\nv -0.273438 -0.453125 0.387182\nv -0.265625 -0.453125 0.386133\nv -0.257812 -0.453125 0.385398\nv -0.244607 -0.453125 0.382812\nv -0.25 -0.453125 0.384182\nv 0.399869 -0.453125 0.382812\nv 0.40625 -0.453125 0.385958\nv 0.414062 -0.453125 0.388617\nv 0.421875 -0.453125 0.389628\nv 0.429688 -0.453125 0.390025\nv 0.4375 -0.453125 0.389721\nv 0.445312 -0.453125 0.389408\nv 0.453125 -0.453125 0.389093\nv 0.460938 -0.453125 0.388892\nv 0.46875 -0.453125 0.38865\nv 0.476562 -0.453125 0.388576\nv 0.484375 -0.453125 0.38833\nv 0.492188 -0.453125 0.386683\nv 0.500074 -0.453125 0.382812\nv 0.5 -0.453125 0.382863\nv -0.32547 -0.445312 0.382812\nv -0.320312 -0.445312 0.38479\nv -0.3125 -0.445312 0.385472\nv -0.304688 -0.445312 0.385821\nv -0.296875 -0.445312 0.386571\nv -0.289062 -0.445312 0.387457\nv -0.28125 -0.445312 0.387513\nv -0.273438 -0.445312 0.386994\nv -0.265625 -0.445312 0.386022\nv -0.257812 -0.445312 0.385263\nv -0.244884 -0.445312 0.382812\nv -0.25 -0.445312 0.384075\nv 0.40114 -0.445312 0.382812\nv 0.40625 -0.445312 0.385414\nv 0.414062 -0.445312 0.388382\nv 0.421875 -0.445312 0.389446\nv 0.429688 -0.445312 0.389889\nv 0.4375 -0.445312 0.389593\nv 0.445312 -0.445312 0.389277\nv 0.453125 -0.445312 0.388988\nv 0.460938 -0.445312 0.38874\nv 0.46875 -0.445312 0.388471\nv 0.476562 -0.445312 0.38844\nv 0.484375 -0.445312 0.388257\nv 0.492188 -0.445312 0.386743\nv 0.500236 -0.445312 0.382812\nv 0.5 -0.445312 0.382967\nv -0.325274 -0.4375 0.382812\nv -0.320312 -0.4375 0.384795\nv -0.3125 -0.4375 0.385508\nv -0.304688 -0.4375 0.385862\nv -0.296875 -0.4375 0.386534\nv -0.289062 -0.4375 0.387251\nv -0.28125 -0.4375 0.387187\nv -0.273438 -0.4375 0.38682\nv -0.265625 -0.4375 0.385942\nv -0.257812 -0.4375 0.385113\nv -0.24537 -0.4375 0.382812\nv -0.25 -0.4375 0.383935\nv 0.402259 -0.4375 0.382812\nv 0.40625 -0.4375 0.384938\nv 0.414062 -0.4375 0.388074\nv 0.421875 -0.4375 0.389218\nv 0.429688 -0.4375 0.389611\nv 0.4375 -0.4375 0.389328\nv 0.445312 -0.4375 0.389052\nv 0.453125 -0.4375 0.388791\nv 0.460938 -0.4375 0.388526\nv 0.46875 -0.4375 0.388286\nv 0.476562 -0.4375 0.388301\nv 0.484375 -0.4375 0.388168\nv 0.492188 -0.4375 0.386843\nv 0.500574 -0.4375 0.382812\nv 0.5 -0.4375 0.383179\nv -0.324771 -0.429688 0.382812\nv -0.320312 -0.429688 0.384647\nv -0.3125 -0.429688 0.385503\nv -0.304688 -0.429688 0.385824\nv -0.296875 -0.429688 0.386378\nv -0.289062 -0.429688 0.387013\nv -0.28125 -0.429688 0.386931\nv -0.273438 -0.429688 0.386656\nv -0.265625 -0.429688 0.385809\nv -0.257812 -0.429688 0.385006\nv -0.245936 -0.429688 0.382812\nv -0.25 -0.429688 0.383806\nv 0.403145 -0.429688 0.382812\nv 0.40625 -0.429688 0.384467\nv 0.414062 -0.429688 0.387596\nv 0.421875 -0.429688 0.38896\nv 0.429688 -0.429688 0.389302\nv 0.4375 -0.429688 0.389046\nv 0.445312 -0.429688 0.3888\nv 0.453125 -0.429688 0.388525\nv 0.460938 -0.429688 0.388287\nv 0.46875 -0.429688 0.388091\nv 0.476562 -0.429688 0.38819\nv 0.484375 -0.429688 0.388122\nv 0.492188 -0.429688 0.386969\nv 0.501005 -0.429688 0.382812\nv 0.5 -0.429688 0.383424\nv -0.32416 -0.421875 0.382812\nv -0.320312 -0.421875 0.384495\nv -0.3125 -0.421875 0.385409\nv -0.304688 -0.421875 0.385787\nv -0.296875 -0.421875 0.386248\nv -0.289062 -0.421875 0.386762\nv -0.28125 -0.421875 0.386673\nv -0.273438 -0.421875 0.386391\nv -0.265625 -0.421875 0.385643\nv -0.257812 -0.421875 0.384924\nv -0.245992 -0.421875 0.382812\nv -0.25 -0.421875 0.383781\nv 0.403493 -0.421875 0.382812\nv 0.40625 -0.421875 0.384342\nv 0.414062 -0.421875 0.38731\nv 0.421875 -0.421875 0.388673\nv 0.429688 -0.421875 0.388904\nv 0.4375 -0.421875 0.388736\nv 0.445312 -0.421875 0.388598\nv 0.453125 -0.421875 0.388344\nv 0.460938 -0.421875 0.388106\nv 0.46875 -0.421875 0.387974\nv 0.476562 -0.421875 0.388105\nv 0.484375 -0.421875 0.388096\nv 0.492188 -0.421875 0.387146\nv 0.501454 -0.421875 0.382812\nv 0.5 -0.421875 0.383671\nv -0.323409 -0.414062 0.382812\nv -0.320312 -0.414062 0.384225\nv -0.3125 -0.414062 0.385343\nv -0.304688 -0.414062 0.385762\nv -0.296875 -0.414062 0.386112\nv -0.289062 -0.414062 0.38645\nv -0.28125 -0.414062 0.38633\nv -0.273438 -0.414062 0.386076\nv -0.265625 -0.414062 0.385417\nv -0.257812 -0.414062 0.384901\nv -0.245769 -0.414062 0.382812\nv -0.25 -0.414062 0.38386\nv 0.403678 -0.414062 0.382812\nv 0.40625 -0.414062 0.38423\nv 0.414062 -0.414062 0.38711\nv 0.421875 -0.414062 0.388469\nv 0.429688 -0.414062 0.388547\nv 0.4375 -0.414062 0.388411\nv 0.445312 -0.414062 0.388289\nv 0.453125 -0.414062 0.388162\nv 0.460938 -0.414062 0.388016\nv 0.46875 -0.414062 0.387907\nv 0.476562 -0.414062 0.388021\nv 0.484375 -0.414062 0.388089\nv 0.492188 -0.414062 0.387274\nv 0.501975 -0.414062 0.382812\nv 0.5 -0.414062 0.383964\nv -0.322547 -0.40625 0.382812\nv -0.320312 -0.40625 0.383887\nv -0.3125 -0.40625 0.385333\nv -0.304688 -0.40625 0.385759\nv -0.296875 -0.40625 0.385971\nv -0.289062 -0.40625 0.386159\nv -0.28125 -0.40625 0.385992\nv -0.273438 -0.40625 0.385706\nv -0.265625 -0.40625 0.38503\nv -0.257812 -0.40625 0.384799\nv -0.24549 -0.40625 0.382812\nv -0.25 -0.40625 0.383911\nv 0.404016 -0.40625 0.382812\nv 0.40625 -0.40625 0.384011\nv 0.414062 -0.40625 0.386781\nv 0.421875 -0.40625 0.388136\nv 0.429688 -0.40625 0.388084\nv 0.4375 -0.40625 0.387942\nv 0.445312 -0.40625 0.387843\nv 0.453125 -0.40625 0.387774\nv 0.460938 -0.40625 0.38779\nv 0.46875 -0.40625 0.387752\nv 0.476562 -0.40625 0.387905\nv 0.484375 -0.40625 0.38805\nv 0.492188 -0.40625 0.387269\nv 0.502279 -0.40625 0.382812\nv 0.5 -0.40625 0.384149\nv -0.32167 -0.398438 0.382812\nv -0.320312 -0.398438 0.383505\nv -0.3125 -0.398438 0.385349\nv -0.304688 -0.398438 0.385819\nv -0.296875 -0.398438 0.385947\nv -0.289062 -0.398438 0.385989\nv -0.28125 -0.398438 0.385782\nv -0.273438 -0.398438 0.385467\nv -0.265625 -0.398438 0.384821\nv -0.257812 -0.398438 0.384725\nv -0.245107 -0.398438 0.382812\nv -0.25 -0.398438 0.383998\nv 0.404176 -0.398438 0.382812\nv 0.40625 -0.398438 0.383888\nv 0.414062 -0.398438 0.386636\nv 0.421875 -0.398438 0.387944\nv 0.429688 -0.398438 0.387881\nv 0.4375 -0.398438 0.38771\nv 0.445312 -0.398438 0.387621\nv 0.453125 -0.398438 0.387572\nv 0.460938 -0.398438 0.387594\nv 0.46875 -0.398438 0.387565\nv 0.476562 -0.398438 0.387802\nv 0.484375 -0.398438 0.388089\nv 0.492188 -0.398438 0.387286\nv 0.502476 -0.398438 0.382812\nv 0.5 -0.398438 0.384259\nv -0.321008 -0.390625 0.382812\nv -0.320312 -0.390625 0.383183\nv -0.3125 -0.390625 0.38533\nv -0.304688 -0.390625 0.385793\nv -0.296875 -0.390625 0.385875\nv -0.289062 -0.390625 0.385833\nv -0.28125 -0.390625 0.385578\nv -0.273438 -0.390625 0.385282\nv -0.265625 -0.390625 0.38471\nv -0.257812 -0.390625 0.38468\nv -0.244446 -0.390625 0.382812\nv -0.25 -0.390625 0.384005\nv 0.40422 -0.390625 0.382812\nv 0.40625 -0.390625 0.383862\nv 0.414062 -0.390625 0.386455\nv 0.421875 -0.390625 0.38779\nv 0.429688 -0.390625 0.387691\nv 0.4375 -0.390625 0.387473\nv 0.445312 -0.390625 0.387396\nv 0.453125 -0.390625 0.38736\nv 0.460938 -0.390625 0.387391\nv 0.46875 -0.390625 0.387324\nv 0.476562 -0.390625 0.38764\nv 0.484375 -0.390625 0.388084\nv 0.492188 -0.390625 0.387402\nv 0.502682 -0.390625 0.382812\nv 0.5 -0.390625 0.384407\nv -0.320455 -0.382812 0.382812\nv -0.320312 -0.381022 0.382812\nv -0.320312 -0.382812 0.382891\nv -0.3125 -0.382812 0.385228\nv -0.304688 -0.382812 0.385796\nv -0.296875 -0.382812 0.385742\nv -0.289062 -0.382812 0.385673\nv -0.28125 -0.382812 0.385409\nv -0.273438 -0.382812 0.385121\nv -0.265625 -0.382812 0.384595\nv -0.257812 -0.382812 0.384621\nv -0.244347 -0.382812 0.382812\nv -0.25 -0.382812 0.383988\nv 0.404485 -0.382812 0.382812\nv 0.40625 -0.382812 0.383706\nv 0.414062 -0.382812 0.386268\nv 0.421875 -0.382812 0.387634\nv 0.429688 -0.382812 0.387501\nv 0.4375 -0.382812 0.387227\nv 0.445312 -0.382812 0.38715\nv 0.453125 -0.382812 0.387134\nv 0.460938 -0.382812 0.38716\nv 0.46875 -0.382812 0.387066\nv 0.476562 -0.382812 0.387377\nv 0.484375 -0.382812 0.387962\nv 0.492188 -0.382812 0.38731\nv 0.502822 -0.382812 0.382812\nv 0.5 -0.382812 0.384493\nv -0.319557 -0.375 0.382812\nv -0.3125 -0.375 0.384997\nv -0.304688 -0.375 0.385847\nv -0.296875 -0.375 0.385683\nv -0.289062 -0.375 0.385536\nv -0.28125 -0.375 0.385247\nv -0.273438 -0.375 0.384987\nv -0.265625 -0.375 0.384518\nv -0.257812 -0.375 0.384523\nv -0.244415 -0.375 0.382812\nv -0.25 -0.375 0.383928\nv 0.404722 -0.375 0.382812\nv 0.40625 -0.375 0.38358\nv 0.414062 -0.375 0.386108\nv 0.421875 -0.375 0.387476\nv 0.429688 -0.375 0.387373\nv 0.4375 -0.375 0.387069\nv 0.445312 -0.375 0.386924\nv 0.453125 -0.375 0.386945\nv 0.460938 -0.375 0.386992\nv 0.46875 -0.375 0.386879\nv 0.476562 -0.375 0.3871\nv 0.484375 -0.375 0.387634\nv 0.492188 -0.375 0.386913\nv 0.502421 -0.375 0.382812\nv 0.5 -0.375 0.384232\nv -0.318492 -0.367188 0.382812\nv -0.3125 -0.367188 0.384695\nv -0.304688 -0.367188 0.385747\nv -0.296875 -0.367188 0.385644\nv -0.289062 -0.367188 0.385412\nv -0.28125 -0.367188 0.385111\nv -0.273438 -0.367188 0.38479\nv -0.265625 -0.367188 0.384438\nv -0.257812 -0.367188 0.384415\nv -0.24479 -0.367188 0.382812\nv -0.25 -0.367188 0.383819\nv 0.404871 -0.367188 0.382812\nv 0.40625 -0.367188 0.38349\nv 0.414062 -0.367188 0.386002\nv 0.421875 -0.367188 0.38731\nv 0.429688 -0.367188 0.38721\nv 0.4375 -0.367188 0.386949\nv 0.445312 -0.367188 0.386761\nv 0.453125 -0.367188 0.386786\nv 0.460938 -0.367188 0.386854\nv 0.46875 -0.367188 0.386761\nv 0.476562 -0.367188 0.386924\nv 0.484375 -0.367188 0.387308\nv 0.492188 -0.367188 0.386361\nv 0.501713 -0.367188 0.382812\nv 0.5 -0.367188 0.383773\nv -0.317624 -0.359375 0.382812\nv -0.3125 -0.359375 0.384392\nv -0.304688 -0.359375 0.385587\nv -0.296875 -0.359375 0.385611\nv -0.289062 -0.359375 0.385331\nv -0.28125 -0.359375 0.38497\nv -0.273438 -0.359375 0.384549\nv -0.265625 -0.359375 0.384219\nv -0.257812 -0.359375 0.384297\nv -0.245169 -0.359375 0.382812\nv -0.25 -0.359375 0.383744\nv 0.405133 -0.359375 0.382812\nv 0.40625 -0.359375 0.383349\nv 0.414062 -0.359375 0.385856\nv 0.421875 -0.359375 0.387114\nv 0.429688 -0.359375 0.387007\nv 0.4375 -0.359375 0.386775\nv 0.445312 -0.359375 0.386614\nv 0.453125 -0.359375 0.386621\nv 0.460938 -0.359375 0.386726\nv 0.46875 -0.359375 0.386666\nv 0.476562 -0.359375 0.386815\nv 0.484375 -0.359375 0.387087\nv 0.492188 -0.359375 0.386073\nv 0.501252 -0.359375 0.382812\nv 0.5 -0.359375 0.383503\nv -0.317239 -0.351562 0.382812\nv -0.3125 -0.351562 0.384265\nv -0.304688 -0.351562 0.385516\nv -0.296875 -0.351562 0.385647\nv -0.289062 -0.351562 0.385259\nv -0.28125 -0.351562 0.384853\nv -0.273438 -0.351562 0.38431\nv -0.265625 -0.351562 0.383991\nv -0.257812 -0.351562 0.384193\nv -0.245168 -0.351562 0.382812\nv -0.25 -0.351562 0.383749\nv 0.405488 -0.351562 0.382812\nv 0.40625 -0.351562 0.383169\nv 0.414062 -0.351562 0.385715\nv 0.421875 -0.351562 0.38695\nv 0.429688 -0.351562 0.386857\nv 0.4375 -0.351562 0.386673\nv 0.445312 -0.351562 0.386509\nv 0.453125 -0.351562 0.386507\nv 0.460938 -0.351562 0.386655\nv 0.46875 -0.351562 0.386602\nv 0.476562 -0.351562 0.386675\nv 0.484375 -0.351562 0.386925\nv 0.492188 -0.351562 0.385844\nv 0.501186 -0.351562 0.382812\nv 0.5 -0.351562 0.383475\nv -0.317151 -0.34375 0.382812\nv -0.3125 -0.34375 0.384316\nv -0.304688 -0.34375 0.38559\nv -0.296875 -0.34375 0.385871\nv -0.289062 -0.34375 0.385356\nv -0.28125 -0.34375 0.384868\nv -0.273438 -0.34375 0.384241\nv -0.265625 -0.34375 0.383844\nv -0.257812 -0.34375 0.384157\nv -0.245303 -0.34375 0.382812\nv -0.25 -0.34375 0.383701\nv 0.405711 -0.34375 0.382812\nv 0.40625 -0.34375 0.383059\nv 0.414062 -0.34375 0.385625\nv 0.421875 -0.34375 0.386872\nv 0.429688 -0.34375 0.38676\nv 0.4375 -0.34375 0.386591\nv 0.445312 -0.34375 0.38641\nv 0.453125 -0.34375 0.386393\nv 0.460938 -0.34375 0.386592\nv 0.46875 -0.34375 0.386561\nv 0.476562 -0.34375 0.386592\nv 0.484375 -0.34375 0.386786\nv 0.492188 -0.34375 0.385658\nv 0.501102 -0.34375 0.382812\nv 0.5 -0.34375 0.383432\nv -0.31709 -0.335938 0.382812\nv -0.3125 -0.335938 0.384433\nv -0.304688 -0.335938 0.385738\nv -0.296875 -0.335938 0.386179\nv -0.289062 -0.335938 0.385576\nv -0.28125 -0.335938 0.384989\nv -0.273438 -0.335938 0.384296\nv -0.265625 -0.335938 0.383807\nv -0.257812 -0.335938 0.384172\nv -0.24464 -0.335938 0.382812\nv -0.25 -0.335938 0.383855\nv 0.405934 -0.335938 0.382812\nv 0.40625 -0.335938 0.382951\nv 0.414062 -0.335938 0.385564\nv 0.421875 -0.335938 0.386763\nv 0.429688 -0.335938 0.386741\nv 0.4375 -0.335938 0.38652\nv 0.445312 -0.335938 0.386368\nv 0.453125 -0.335938 0.386336\nv 0.460938 -0.335938 0.386647\nv 0.46875 -0.335938 0.386678\nv 0.476562 -0.335938 0.386728\nv 0.484375 -0.335938 0.386841\nv 0.492188 -0.335938 0.385624\nv 0.501217 -0.335938 0.382812\nv 0.5 -0.335938 0.383509\nv -0.317283 -0.328125 0.382812\nv -0.3125 -0.328125 0.384534\nv -0.304688 -0.328125 0.386041\nv -0.296875 -0.328125 0.38655\nv -0.289062 -0.328125 0.385901\nv -0.28125 -0.328125 0.385264\nv -0.273438 -0.328125 0.384571\nv -0.265625 -0.328125 0.383923\nv -0.257812 -0.328125 0.384306\nv -0.243326 -0.328125 0.382812\nv -0.25 -0.328125 0.384114\nv 0.405816 -0.328125 0.382812\nv 0.40625 -0.328125 0.382998\nv 0.414062 -0.328125 0.3856\nv 0.421875 -0.328125 0.386812\nv 0.429688 -0.328125 0.386798\nv 0.4375 -0.328125 0.386572\nv 0.445312 -0.328125 0.38637\nv 0.453125 -0.328125 0.386379\nv 0.460938 -0.328125 0.386732\nv 0.46875 -0.328125 0.386853\nv 0.476562 -0.328125 0.386874\nv 0.484375 -0.328125 0.386883\nv 0.492188 -0.328125 0.385623\nv 0.501303 -0.328125 0.382812\nv 0.5 -0.328125 0.383559\nv -0.317625 -0.320312 0.382812\nv -0.3125 -0.320312 0.384652\nv -0.304688 -0.320312 0.386296\nv -0.296875 -0.320312 0.386774\nv -0.289062 -0.320312 0.386101\nv -0.28125 -0.320312 0.385428\nv -0.273438 -0.320312 0.384663\nv -0.265625 -0.320312 0.383992\nv -0.257812 -0.320312 0.384374\nv -0.242354 -0.320312 0.382812\nv -0.25 -0.320312 0.384256\nv -0.242188 -0.318861 0.382812\nv 0.40547 -0.320312 0.382812\nv 0.40625 -0.320312 0.383133\nv 0.414062 -0.320312 0.385676\nv 0.421875 -0.320312 0.386946\nv 0.429688 -0.320312 0.386893\nv 0.4375 -0.320312 0.386655\nv 0.445312 -0.320312 0.386476\nv 0.453125 -0.320312 0.386458\nv 0.460938 -0.320312 0.386894\nv 0.46875 -0.320312 0.387083\nv 0.476562 -0.320312 0.387056\nv 0.484375 -0.320312 0.386991\nv 0.492188 -0.320312 0.385611\nv 0.50124 -0.320312 0.382812\nv 0.5 -0.320312 0.383543\nv -0.317402 -0.3125 0.382812\nv -0.3125 -0.3125 0.384546\nv -0.304688 -0.3125 0.386406\nv -0.296875 -0.3125 0.386887\nv -0.289062 -0.3125 0.386228\nv -0.28125 -0.3125 0.385521\nv -0.273438 -0.3125 0.384681\nv -0.265625 -0.3125 0.38405\nv -0.257812 -0.3125 0.384437\nv -0.25 -0.3125 0.384382\nv -0.241653 -0.3125 0.382812\nv -0.242188 -0.3125 0.382962\nv 0.40513 -0.3125 0.382812\nv 0.40625 -0.3125 0.383263\nv 0.414062 -0.3125 0.385681\nv 0.421875 -0.3125 0.38709\nv 0.429688 -0.3125 0.387069\nv 0.4375 -0.3125 0.386794\nv 0.445312 -0.3125 0.386615\nv 0.453125 -0.3125 0.386582\nv 0.460938 -0.3125 0.387067\nv 0.46875 -0.3125 0.387298\nv 0.476562 -0.3125 0.38723\nv 0.484375 -0.3125 0.387073\nv 0.492188 -0.3125 0.385464\nv 0.500976 -0.3125 0.382812\nv 0.5 -0.3125 0.383399\nv -0.316695 -0.304688 0.382812\nv -0.3125 -0.304688 0.384354\nv -0.304688 -0.304688 0.386345\nv -0.296875 -0.304688 0.386956\nv -0.289062 -0.304688 0.386284\nv -0.28125 -0.304688 0.385564\nv -0.273438 -0.304688 0.384694\nv -0.265625 -0.304688 0.384121\nv -0.257812 -0.304688 0.384456\nv -0.25 -0.304688 0.3845\nv -0.240722 -0.304688 0.382812\nv -0.242188 -0.304688 0.383215\nv 0.405215 -0.304688 0.382812\nv 0.40625 -0.304688 0.383231\nv 0.414062 -0.304688 0.385744\nv 0.421875 -0.304688 0.387176\nv 0.429688 -0.304688 0.387217\nv 0.4375 -0.304688 0.386931\nv 0.445312 -0.304688 0.386736\nv 0.453125 -0.304688 0.386723\nv 0.460938 -0.304688 0.387266\nv 0.46875 -0.304688 0.387454\nv 0.476562 -0.304688 0.387345\nv 0.484375 -0.304688 0.387024\nv 0.492188 -0.304688 0.385477\nv 0.500626 -0.304688 0.382812\nv 0.5 -0.304688 0.3832\nv -0.316026 -0.296875 0.382812\nv -0.3125 -0.296875 0.38416\nv -0.304688 -0.296875 0.386174\nv -0.296875 -0.296875 0.386918\nv -0.289062 -0.296875 0.386323\nv -0.28125 -0.296875 0.385596\nv -0.273438 -0.296875 0.384707\nv -0.265625 -0.296875 0.384146\nv -0.257812 -0.296875 0.384472\nv -0.25 -0.296875 0.384585\nv -0.239644 -0.296875 0.382812\nv -0.242188 -0.296875 0.383448\nv 0.40497 -0.296875 0.382812\nv 0.40625 -0.296875 0.383345\nv 0.414062 -0.296875 0.385884\nv 0.421875 -0.296875 0.387337\nv 0.429688 -0.296875 0.387392\nv 0.4375 -0.296875 0.387128\nv 0.445312 -0.296875 0.386868\nv 0.453125 -0.296875 0.386883\nv 0.460938 -0.296875 0.387416\nv 0.46875 -0.296875 0.387526\nv 0.476562 -0.296875 0.387413\nv 0.484375 -0.296875 0.386919\nv 0.492188 -0.296875 0.385417\nv 0.500125 -0.296875 0.382812\nv 0.5 -0.295019 0.382812\nv 0.5 -0.296875 0.382891\nv -0.315235 -0.289062 0.382812\nv -0.3125 -0.289062 0.383914\nv -0.304688 -0.289062 0.385927\nv -0.296875 -0.289062 0.386838\nv -0.289062 -0.289062 0.386276\nv -0.28125 -0.289062 0.385602\nv -0.273438 -0.289062 0.384671\nv -0.265625 -0.289062 0.384094\nv -0.257812 -0.289062 0.384452\nv -0.25 -0.289062 0.384622\nv -0.238513 -0.289062 0.382812\nv -0.242188 -0.289062 0.383584\nv 0.404553 -0.289062 0.382812\nv 0.40625 -0.289062 0.383545\nv 0.414062 -0.289062 0.386132\nv 0.421875 -0.289062 0.387567\nv 0.429688 -0.289062 0.387636\nv 0.4375 -0.289062 0.387265\nv 0.445312 -0.289062 0.386969\nv 0.453125 -0.289062 0.387013\nv 0.460938 -0.289062 0.387559\nv 0.46875 -0.289062 0.387617\nv 0.476562 -0.289062 0.387534\nv 0.484375 -0.289062 0.386882\nv 0.499305 -0.289062 0.382812\nv 0.492188 -0.289062 0.385301\nv -0.31435 -0.28125 0.382812\nv -0.3125 -0.28125 0.383592\nv -0.304688 -0.28125 0.385694\nv -0.296875 -0.28125 0.386786\nv -0.289062 -0.28125 0.386259\nv -0.28125 -0.28125 0.385609\nv -0.273438 -0.28125 0.384654\nv -0.265625 -0.28125 0.384067\nv -0.257812 -0.28125 0.384503\nv -0.25 -0.28125 0.384718\nv -0.236857 -0.28125 0.382812\nv -0.242188 -0.28125 0.383741\nv 0.403807 -0.28125 0.382812\nv 0.40625 -0.28125 0.38394\nv 0.414062 -0.28125 0.386431\nv 0.421875 -0.28125 0.387812\nv 0.429688 -0.28125 0.387846\nv 0.4375 -0.28125 0.387425\nv 0.445312 -0.28125 0.387106\nv 0.453125 -0.28125 0.387205\nv 0.460938 -0.28125 0.387778\nv 0.46875 -0.28125 0.387844\nv 0.476562 -0.28125 0.387658\nv 0.484375 -0.28125 0.386899\nv 0.498554 -0.28125 0.382812\nv 0.492188 -0.28125 0.385231\nv -0.313573 -0.273438 0.382812\nv -0.3125 -0.273438 0.383278\nv -0.304688 -0.273438 0.385499\nv -0.296875 -0.273438 0.3867\nv -0.289062 -0.273438 0.386298\nv -0.28125 -0.273438 0.385613\nv -0.273438 -0.273438 0.384576\nv -0.265625 -0.273438 0.384008\nv -0.257812 -0.273438 0.384465\nv -0.25 -0.273438 0.384775\nv -0.235124 -0.273438 0.382812\nv -0.242188 -0.273438 0.383901\nv -0.234375 -0.26885 0.382812\nv 0.403075 -0.273438 0.382812\nv 0.40625 -0.273438 0.384375\nv 0.414062 -0.273438 0.386797\nv 0.421875 -0.273438 0.388153\nv 0.429688 -0.273438 0.388092\nv 0.4375 -0.273438 0.387702\nv 0.445312 -0.273438 0.387335\nv 0.453125 -0.273438 0.387451\nv 0.460938 -0.273438 0.387948\nv 0.46875 -0.273438 0.388022\nv 0.476562 -0.273438 0.387569\nv 0.484375 -0.273438 0.386632\nv 0.4977 -0.273438 0.382812\nv 0.492188 -0.273438 0.384993\nv -0.313017 -0.265625 0.382812\nv -0.3125 -0.265625 0.383041\nv -0.304688 -0.265625 0.385264\nv -0.296875 -0.265625 0.386588\nv -0.289062 -0.265625 0.386324\nv -0.28125 -0.265625 0.385579\nv -0.273438 -0.265625 0.384508\nv -0.265625 -0.265625 0.383982\nv -0.257812 -0.265625 0.38445\nv -0.25 -0.265625 0.384846\nv -0.242188 -0.265625 0.383967\nv -0.23419 -0.265625 0.382812\nv -0.234375 -0.265625 0.382893\nv 0.402565 -0.265625 0.382812\nv 0.40625 -0.265625 0.384891\nv 0.414062 -0.265625 0.387236\nv 0.421875 -0.265625 0.388409\nv 0.429688 -0.265625 0.388227\nv 0.4375 -0.265625 0.387833\nv 0.445312 -0.265625 0.38736\nv 0.453125 -0.265625 0.387467\nv 0.460938 -0.265625 0.387885\nv 0.46875 -0.265625 0.387941\nv 0.476562 -0.265625 0.387282\nv 0.484375 -0.265625 0.386146\nv 0.496127 -0.265625 0.382812\nv 0.492188 -0.265625 0.384459\nv -0.312869 -0.257812 0.382812\nv -0.3125 -0.257812 0.382984\nv -0.304688 -0.257812 0.385182\nv -0.296875 -0.257812 0.386508\nv -0.289062 -0.257812 0.386426\nv -0.28125 -0.257812 0.385629\nv -0.273438 -0.257812 0.384463\nv -0.265625 -0.257812 0.383945\nv -0.257812 -0.257812 0.384318\nv -0.25 -0.257812 0.384726\nv -0.242188 -0.257812 0.383905\nv -0.233843 -0.257812 0.382812\nv -0.234375 -0.257812 0.383027\nv 0.402313 -0.257812 0.382812\nv 0.40625 -0.257812 0.38518\nv 0.414062 -0.257812 0.387417\nv 0.421875 -0.257812 0.388529\nv 0.429688 -0.257812 0.388274\nv 0.4375 -0.257812 0.387849\nv 0.445312 -0.257812 0.387349\nv 0.453125 -0.257812 0.387437\nv 0.460938 -0.257812 0.387888\nv 0.46875 -0.257812 0.387934\nv 0.476562 -0.257812 0.387127\nv 0.484375 -0.257812 0.385841\nv 0.495116 -0.257812 0.382812\nv 0.492188 -0.257812 0.384017\nv -0.312712 -0.25 0.382812\nv -0.3125 -0.25 0.382919\nv -0.304688 -0.25 0.385275\nv -0.296875 -0.25 0.386636\nv -0.289062 -0.25 0.386591\nv -0.28125 -0.25 0.385742\nv -0.273438 -0.25 0.384387\nv -0.265625 -0.25 0.383868\nv -0.257812 -0.25 0.384126\nv -0.25 -0.25 0.3845\nv -0.242188 -0.25 0.383903\nv -0.233696 -0.25 0.382812\nv -0.234375 -0.25 0.38305\nv 0.402236 -0.25 0.382812\nv 0.40625 -0.25 0.385337\nv 0.414062 -0.25 0.3875\nv 0.421875 -0.25 0.388598\nv 0.429688 -0.25 0.388393\nv 0.4375 -0.25 0.387987\nv 0.445312 -0.25 0.38745\nv 0.453125 -0.25 0.387529\nv 0.460938 -0.25 0.387927\nv 0.46875 -0.25 0.387906\nv 0.476562 -0.25 0.386843\nv 0.484375 -0.25 0.385588\nv 0.493924 -0.25 0.382812\nv 0.492188 -0.25 0.383525\nv -0.31295 -0.242188 0.382812\nv -0.3125 -0.242188 0.383032\nv -0.304688 -0.242188 0.38555\nv -0.296875 -0.242188 0.386948\nv -0.289062 -0.242188 0.386839\nv -0.28125 -0.242188 0.385939\nv -0.273438 -0.242188 0.384465\nv -0.265625 -0.242188 0.383863\nv -0.257812 -0.242188 0.38402\nv -0.25 -0.242188 0.384383\nv -0.242188 -0.242188 0.383838\nv -0.233801 -0.242188 0.382812\nv -0.234375 -0.242188 0.382993\nv 0.402177 -0.242188 0.382812\nv 0.40625 -0.242188 0.385437\nv 0.414062 -0.242188 0.387656\nv 0.421875 -0.242188 0.388709\nv 0.429688 -0.242188 0.388533\nv 0.4375 -0.242188 0.388172\nv 0.445312 -0.242188 0.387606\nv 0.453125 -0.242188 0.387679\nv 0.460938 -0.242188 0.388102\nv 0.46875 -0.242188 0.387927\nv 0.476562 -0.242188 0.386717\nv 0.484375 -0.242188 0.385386\nv 0.493089 -0.242188 0.382812\nv 0.492188 -0.242188 0.383171\nv -0.313751 -0.234375 0.382812\nv -0.3125 -0.234375 0.383475\nv -0.304688 -0.234375 0.385987\nv -0.296875 -0.234375 0.387357\nv -0.289062 -0.234375 0.387178\nv -0.28125 -0.234375 0.386218\nv -0.273438 -0.234375 0.384588\nv -0.265625 -0.234375 0.38387\nv -0.257812 -0.234375 0.383945\nv -0.25 -0.234375 0.384327\nv -0.242188 -0.234375 0.383753\nv -0.233866 -0.234375 0.382812\nv -0.234375 -0.228003 0.382812\nv -0.234375 -0.234375 0.382964\nv 0.402002 -0.234375 0.382812\nv 0.40625 -0.234375 0.385655\nv 0.414062 -0.234375 0.387844\nv 0.421875 -0.234375 0.388891\nv 0.429688 -0.234375 0.388646\nv 0.4375 -0.234375 0.388316\nv 0.445312 -0.234375 0.387731\nv 0.453125 -0.234375 0.38789\nv 0.460938 -0.234375 0.388301\nv 0.46875 -0.234375 0.387939\nv 0.476562 -0.234375 0.386809\nv 0.484375 -0.234375 0.385464\nv 0.493495 -0.234375 0.382812\nv 0.492188 -0.234375 0.383324\nv -0.314562 -0.226562 0.382812\nv -0.3125 -0.226562 0.383957\nv -0.304688 -0.226562 0.386458\nv -0.296875 -0.226562 0.387875\nv -0.289062 -0.226562 0.387651\nv -0.28125 -0.226562 0.386557\nv -0.273438 -0.226562 0.384784\nv -0.265625 -0.226562 0.383971\nv -0.257812 -0.226562 0.384025\nv -0.25 -0.226562 0.384298\nv -0.234678 -0.226562 0.382812\nv -0.242188 -0.226562 0.383702\nv 0.401829 -0.226562 0.382812\nv 0.40625 -0.226562 0.385872\nv 0.414062 -0.226562 0.387975\nv 0.421875 -0.226562 0.388967\nv 0.429688 -0.226562 0.388754\nv 0.4375 -0.226562 0.388387\nv 0.445312 -0.226562 0.387857\nv 0.453125 -0.226562 0.388141\nv 0.460938 -0.226562 0.388425\nv 0.46875 -0.226562 0.388106\nv 0.476562 -0.226562 0.387029\nv 0.484375 -0.226562 0.385759\nv 0.494297 -0.226562 0.382812\nv 0.492188 -0.226562 0.383605\nv -0.315069 -0.21875 0.382812\nv -0.3125 -0.21875 0.384276\nv -0.304688 -0.21875 0.386905\nv -0.296875 -0.21875 0.388376\nv -0.289062 -0.21875 0.388118\nv -0.28125 -0.21875 0.387009\nv -0.273438 -0.21875 0.385172\nv -0.265625 -0.21875 0.384228\nv -0.257812 -0.21875 0.384061\nv -0.25 -0.21875 0.384252\nv -0.236298 -0.21875 0.382812\nv -0.242188 -0.21875 0.383663\nv 0.401426 -0.21875 0.382812\nv 0.40625 -0.21875 0.386047\nv 0.414062 -0.21875 0.388031\nv 0.421875 -0.21875 0.389112\nv 0.429688 -0.21875 0.388907\nv 0.4375 -0.21875 0.388571\nv 0.445312 -0.21875 0.388131\nv 0.453125 -0.21875 0.388507\nv 0.460938 -0.21875 0.388629\nv 0.46875 -0.21875 0.388342\nv 0.476562 -0.21875 0.387293\nv 0.484375 -0.21875 0.386131\nv 0.496217 -0.21875 0.382812\nv 0.492188 -0.21875 0.384269\nv -0.315162 -0.210938 0.382812\nv -0.3125 -0.210938 0.38435\nv -0.304688 -0.210938 0.387236\nv -0.296875 -0.210938 0.388708\nv -0.289062 -0.210938 0.388652\nv -0.28125 -0.210938 0.387527\nv -0.273438 -0.210938 0.385664\nv -0.265625 -0.210938 0.38473\nv -0.257812 -0.210938 0.38448\nv -0.25 -0.210938 0.384458\nv -0.236165 -0.210938 0.382812\nv -0.242188 -0.210938 0.383959\nv 0.400826 -0.210938 0.382812\nv 0.40625 -0.210938 0.386276\nv 0.414062 -0.210938 0.388094\nv 0.421875 -0.210938 0.389236\nv 0.429688 -0.210938 0.389116\nv 0.4375 -0.210938 0.388868\nv 0.445312 -0.210938 0.388517\nv 0.453125 -0.210938 0.388855\nv 0.460938 -0.210938 0.388904\nv 0.46875 -0.210938 0.388696\nv 0.476562 -0.210938 0.387616\nv 0.484375 -0.210938 0.386673\nv 0.498729 -0.210938 0.382812\nv 0.492188 -0.210938 0.385046\nv 0.5 -0.207256 0.382812\nv -0.315103 -0.203125 0.382812\nv -0.3125 -0.203125 0.384319\nv -0.304688 -0.203125 0.387328\nv -0.296875 -0.203125 0.388974\nv -0.289062 -0.203125 0.389052\nv -0.28125 -0.203125 0.388057\nv -0.273438 -0.203125 0.386266\nv -0.265625 -0.203125 0.385296\nv -0.257812 -0.203125 0.384858\nv -0.25 -0.203125 0.384628\nv -0.236471 -0.203125 0.382812\nv -0.242188 -0.203125 0.38412\nv 0.400097 -0.203125 0.382812\nv 0.40625 -0.203125 0.386679\nv 0.414062 -0.203125 0.388403\nv 0.421875 -0.203125 0.389538\nv 0.429688 -0.203125 0.389491\nv 0.4375 -0.203125 0.389263\nv 0.445312 -0.203125 0.389044\nv 0.453125 -0.203125 0.389235\nv 0.460938 -0.203125 0.389362\nv 0.46875 -0.203125 0.389046\nv 0.476562 -0.203125 0.388028\nv 0.484375 -0.203125 0.387274\nv 0.492188 -0.203125 0.385853\nv 0.500563 -0.203125 0.382812\nv 0.5 -0.203125 0.383336\nv -0.314519 -0.195312 0.382812\nv -0.3125 -0.195312 0.383971\nv -0.304688 -0.195312 0.387117\nv -0.296875 -0.195312 0.388943\nv -0.289062 -0.195312 0.389151\nv -0.28125 -0.195312 0.388265\nv -0.273438 -0.195312 0.386576\nv -0.265625 -0.195312 0.385587\nv -0.257812 -0.195312 0.384987\nv -0.25 -0.195312 0.384625\nv -0.237529 -0.195312 0.382812\nv -0.242188 -0.195312 0.383896\nv 0.399692 -0.195312 0.382812\nv 0.40625 -0.195312 0.387085\nv 0.414062 -0.195312 0.38885\nv 0.421875 -0.195312 0.38995\nv 0.429688 -0.195312 0.389928\nv 0.4375 -0.195312 0.389756\nv 0.445312 -0.195312 0.38956\nv 0.453125 -0.195312 0.389724\nv 0.460938 -0.195312 0.389883\nv 0.46875 -0.195312 0.389497\nv 0.476562 -0.195312 0.38854\nv 0.484375 -0.195312 0.387938\nv 0.492188 -0.195312 0.386704\nv 0.501669 -0.195312 0.382812\nv 0.5 -0.195312 0.384349\nv -0.313924 -0.1875 0.382812\nv -0.3125 -0.1875 0.383651\nv -0.304688 -0.1875 0.386858\nv -0.296875 -0.1875 0.388729\nv -0.289062 -0.1875 0.38913\nv -0.28125 -0.1875 0.388358\nv -0.273438 -0.1875 0.386907\nv -0.265625 -0.1875 0.385874\nv -0.257812 -0.1875 0.385353\nv -0.25 -0.1875 0.384991\nv -0.237835 -0.1875 0.382812\nv -0.242188 -0.1875 0.383892\nv 0.399341 -0.1875 0.382812\nv 0.40625 -0.1875 0.387375\nv 0.414062 -0.1875 0.389165\nv 0.421875 -0.1875 0.390229\nv 0.429688 -0.1875 0.390165\nv 0.4375 -0.1875 0.390012\nv 0.445312 -0.1875 0.389902\nv 0.453125 -0.1875 0.39009\nv 0.460938 -0.1875 0.390222\nv 0.46875 -0.1875 0.38983\nv 0.476562 -0.1875 0.389061\nv 0.484375 -0.1875 0.388612\nv 0.492188 -0.1875 0.387502\nv 0.502591 -0.1875 0.382812\nv 0.5 -0.1875 0.385174\nv -0.313501 -0.179688 0.382812\nv -0.3125 -0.179688 0.383447\nv -0.304688 -0.179688 0.386932\nv -0.296875 -0.179688 0.388856\nv -0.289062 -0.179688 0.389453\nv -0.28125 -0.179688 0.388756\nv -0.273438 -0.179688 0.387563\nv -0.265625 -0.179688 0.386523\nv -0.257812 -0.179688 0.385939\nv -0.25 -0.179688 0.385466\nv -0.237148 -0.179688 0.382812\nv -0.242188 -0.179688 0.384095\nv 0.399843 -0.179688 0.382812\nv 0.40625 -0.179688 0.387251\nv 0.414062 -0.179688 0.388901\nv 0.421875 -0.179688 0.389895\nv 0.429688 -0.179688 0.389952\nv 0.4375 -0.179688 0.389874\nv 0.445312 -0.179688 0.389957\nv 0.453125 -0.179688 0.390102\nv 0.460938 -0.179688 0.390211\nv 0.46875 -0.179688 0.390005\nv 0.476562 -0.179688 0.389459\nv 0.484375 -0.179688 0.389271\nv 0.492188 -0.179688 0.388046\nv 0.503036 -0.179688 0.382812\nv 0.5 -0.179688 0.385603\nv -0.313181 -0.171875 0.382812\nv -0.3125 -0.171875 0.383278\nv -0.304688 -0.171875 0.38698\nv -0.296875 -0.171875 0.389246\nv -0.289062 -0.171875 0.390061\nv -0.28125 -0.171875 0.389349\nv -0.273438 -0.171875 0.388297\nv -0.265625 -0.171875 0.38716\nv -0.257812 -0.171875 0.386478\nv -0.25 -0.171875 0.385773\nv -0.23642 -0.171875 0.382812\nv -0.242188 -0.171875 0.384252\nv 0.40023 -0.171875 0.382812\nv 0.40625 -0.171875 0.387323\nv 0.414062 -0.171875 0.388866\nv 0.421875 -0.171875 0.389851\nv 0.429688 -0.171875 0.389884\nv 0.4375 -0.171875 0.389898\nv 0.445312 -0.171875 0.390045\nv 0.453125 -0.171875 0.390253\nv 0.460938 -0.171875 0.390365\nv 0.46875 -0.171875 0.390241\nv 0.476562 -0.171875 0.389737\nv 0.484375 -0.171875 0.389402\nv 0.492188 -0.171875 0.387949\nv 0.502799 -0.171875 0.382812\nv 0.5 -0.171875 0.385395\nv -0.312997 -0.164062 0.382812\nv -0.3125 -0.164062 0.383172\nv -0.304688 -0.164062 0.387048\nv -0.296875 -0.164062 0.389655\nv -0.289062 -0.164062 0.390493\nv -0.28125 -0.164062 0.389841\nv -0.273438 -0.164062 0.38896\nv -0.265625 -0.164062 0.387672\nv -0.257812 -0.164062 0.386782\nv -0.25 -0.164062 0.386036\nv -0.23573 -0.164062 0.382812\nv -0.242188 -0.164062 0.384452\nv 0.400821 -0.164062 0.382812\nv 0.40625 -0.164062 0.387041\nv 0.414062 -0.164062 0.389068\nv 0.421875 -0.164062 0.389906\nv 0.429688 -0.164062 0.390073\nv 0.4375 -0.164062 0.390029\nv 0.445312 -0.164062 0.390235\nv 0.453125 -0.164062 0.390571\nv 0.46875 -0.164062 0.390601\nv 0.476562 -0.164062 0.390093\nv 0.484375 -0.164062 0.389712\nv 0.492188 -0.164062 0.388136\nv 0.502825 -0.164062 0.382812\nv 0.5 -0.164062 0.385495\nv -0.312687 -0.15625 0.382812\nv -0.3125 -0.152766 0.382812\nv -0.3125 -0.15625 0.382959\nv -0.304688 -0.15625 0.387265\nv -0.296875 -0.15625 0.389888\nv -0.28125 -0.15625 0.390027\nv -0.273438 -0.15625 0.389179\nv -0.265625 -0.15625 0.38798\nv -0.257812 -0.15625 0.386973\nv -0.25 -0.15625 0.386188\nv -0.234609 -0.15625 0.382812\nv -0.242188 -0.15625 0.384739\nv 0.401593 -0.15625 0.382812\nv 0.40625 -0.15625 0.38645\nv 0.414062 -0.15625 0.389005\nv 0.421875 -0.15625 0.389854\nv 0.429688 -0.15625 0.390198\nv 0.4375 -0.15625 0.390089\nv 0.445312 -0.15625 0.390268\nv 0.453125 -0.15625 0.390605\nv 0.476562 -0.15625 0.390303\nv 0.484375 -0.15625 0.38987\nv 0.492188 -0.15625 0.388253\nv 0.502652 -0.15625 0.382812\nv 0.5 -0.15625 0.385485\nv -0.3122 -0.148438 0.382812\nv -0.304688 -0.148438 0.387498\nv -0.296875 -0.148438 0.390162\nv -0.28125 -0.148438 0.39021\nv -0.273438 -0.148438 0.389357\nv -0.265625 -0.148438 0.388332\nv -0.257812 -0.148438 0.387233\nv -0.25 -0.148438 0.386275\nv -0.234804 -0.148438 0.382812\nv -0.242188 -0.148438 0.384792\nv 0.402658 -0.148438 0.382812\nv 0.40625 -0.148438 0.385721\nv 0.414062 -0.148438 0.388357\nv 0.421875 -0.148438 0.389729\nv 0.429688 -0.148438 0.390065\nv 0.4375 -0.148438 0.389907\nv 0.445312 -0.148438 0.390073\nv 0.453125 -0.148438 0.390505\nv 0.476562 -0.148438 0.390063\nv 0.484375 -0.148438 0.389491\nv 0.492188 -0.148438 0.387811\nv 0.501965 -0.148438 0.382812\nv 0.5 -0.148438 0.384954\nv -0.311697 -0.140625 0.382812\nv -0.304688 -0.140625 0.387289\nv -0.296875 -0.140625 0.390174\nv -0.28125 -0.140625 0.390267\nv -0.273438 -0.140625 0.389311\nv -0.265625 -0.140625 0.388282\nv -0.257812 -0.140625 0.387365\nv -0.25 -0.140625 0.386359\nv -0.235205 -0.140625 0.382812\nv -0.242188 -0.140625 0.384786\nv 0.403507 -0.140625 0.382812\nv 0.40625 -0.140625 0.384972\nv 0.414062 -0.140625 0.387771\nv 0.421875 -0.140625 0.389368\nv 0.429688 -0.140625 0.389896\nv 0.4375 -0.140625 0.389796\nv 0.445312 -0.140625 0.389957\nv 0.453125 -0.140625 0.390394\nv 0.460938 -0.140625 0.390612\nv 0.46875 -0.140625 0.39044\nv 0.476562 -0.140625 0.389711\nv 0.484375 -0.140625 0.389079\nv 0.492188 -0.140625 0.38715\nv 0.50104 -0.140625 0.382812\nv 0.5 -0.133428 0.382812\nv 0.5 -0.140625 0.384033\nv -0.310867 -0.132812 0.382812\nv -0.304688 -0.132812 0.386763\nv -0.296875 -0.132812 0.389844\nv -0.28125 -0.132812 0.390203\nv -0.273438 -0.132812 0.389375\nv -0.265625 -0.132812 0.388383\nv -0.257812 -0.132812 0.38745\nv -0.25 -0.132812 0.38645\nv -0.235366 -0.132812 0.382812\nv -0.242188 -0.132812 0.384745\nv 0.40305 -0.132812 0.382812\nv 0.40625 -0.132812 0.385047\nv 0.414062 -0.132812 0.38718\nv 0.421875 -0.132812 0.388704\nv 0.429688 -0.132812 0.38949\nv 0.4375 -0.132812 0.389581\nv 0.445312 -0.132812 0.389848\nv 0.453125 -0.132812 0.390367\nv 0.460938 -0.132812 0.390436\nv 0.46875 -0.132812 0.390041\nv 0.476562 -0.132812 0.389246\nv 0.484375 -0.132812 0.388287\nv 0.499747 -0.132812 0.382812\nv 0.492188 -0.132812 0.386023\nv -0.310117 -0.125 0.382812\nv -0.304688 -0.125 0.386242\nv -0.296875 -0.125 0.389386\nv -0.289062 -0.125 0.390443\nv -0.28125 -0.125 0.390091\nv -0.273438 -0.125 0.389447\nv -0.265625 -0.125 0.388447\nv -0.257812 -0.125 0.387358\nv -0.25 -0.125 0.386281\nv -0.235503 -0.125 0.382812\nv -0.242188 -0.125 0.384637\nv 0.402496 -0.125 0.382812\nv 0.40625 -0.125 0.385189\nv 0.414062 -0.125 0.386711\nv 0.421875 -0.125 0.388172\nv 0.429688 -0.125 0.389026\nv 0.4375 -0.125 0.389427\nv 0.445312 -0.125 0.389526\nv 0.453125 -0.125 0.389912\nv 0.460938 -0.125 0.389956\nv 0.46875 -0.125 0.389502\nv 0.476562 -0.125 0.388643\nv 0.484375 -0.125 0.387357\nv 0.497448 -0.125 0.382812\nv 0.492188 -0.125 0.385012\nv -0.30972 -0.117188 0.382812\nv -0.304688 -0.117188 0.385795\nv -0.296875 -0.117188 0.388868\nv -0.289062 -0.117188 0.390182\nv -0.28125 -0.117188 0.390123\nv -0.273438 -0.117188 0.389343\nv -0.265625 -0.117188 0.388286\nv -0.257812 -0.117188 0.387104\nv -0.25 -0.117188 0.386069\nv -0.235878 -0.117188 0.382812\nv -0.242188 -0.117188 0.384603\nv 0.402635 -0.117188 0.382812\nv 0.40625 -0.117188 0.384657\nv 0.414062 -0.117188 0.386139\nv 0.421875 -0.117188 0.387457\nv 0.429688 -0.117188 0.388251\nv 0.4375 -0.117188 0.388757\nv 0.445312 -0.117188 0.388936\nv 0.453125 -0.117188 0.38922\nv 0.460938 -0.117188 0.389382\nv 0.46875 -0.117188 0.388789\nv 0.476562 -0.117188 0.387961\nv 0.484375 -0.117188 0.386649\nv 0.495774 -0.117188 0.382812\nv 0.492188 -0.117188 0.384367\nv -0.309505 -0.109375 0.382812\nv -0.304688 -0.109375 0.385404\nv -0.296875 -0.109375 0.388446\nv -0.289062 -0.109375 0.389858\nv -0.28125 -0.109375 0.389984\nv -0.273438 -0.109375 0.388978\nv -0.265625 -0.109375 0.387843\nv -0.257812 -0.109375 0.386775\nv -0.25 -0.109375 0.385958\nv -0.236841 -0.109375 0.382812\nv -0.242188 -0.109375 0.384535\nv 0.403365 -0.109375 0.382812\nv 0.40625 -0.109375 0.383902\nv 0.414062 -0.109375 0.385271\nv 0.421875 -0.109375 0.386463\nv 0.429688 -0.109375 0.387202\nv 0.4375 -0.109375 0.38766\nv 0.445312 -0.109375 0.388138\nv 0.453125 -0.109375 0.388335\nv 0.460938 -0.109375 0.388784\nv 0.46875 -0.109375 0.388373\nv 0.476562 -0.109375 0.387671\nv 0.484375 -0.109375 0.386417\nv 0.495195 -0.109375 0.382812\nv 0.492188 -0.109375 0.384035\nv -0.308636 -0.101562 0.382812\nv -0.304688 -0.101562 0.384905\nv -0.296875 -0.101562 0.38798\nv -0.289062 -0.101562 0.389275\nv -0.28125 -0.101562 0.389459\nv -0.273438 -0.101562 0.388298\nv -0.265625 -0.101562 0.38717\nv -0.257812 -0.101562 0.386217\nv -0.25 -0.101562 0.385617\nv -0.237109 -0.101562 0.382812\nv -0.242188 -0.101562 0.384295\nv 0.403647 -0.101562 0.382812\nv 0.40625 -0.101562 0.38353\nv 0.414062 -0.101562 0.384627\nv 0.421875 -0.101562 0.385681\nv 0.429688 -0.101562 0.386367\nv 0.4375 -0.101562 0.386739\nv 0.445312 -0.101562 0.387275\nv 0.453125 -0.101562 0.387727\nv 0.460938 -0.101562 0.388208\nv 0.46875 -0.101562 0.387942\nv 0.476562 -0.101562 0.387425\nv 0.484375 -0.101562 0.386492\nv 0.495173 -0.101562 0.382812\nv 0.492188 -0.101562 0.384073\nv -0.308113 -0.09375 0.382812\nv -0.304688 -0.09375 0.384557\nv -0.296875 -0.09375 0.387585\nv -0.289062 -0.09375 0.388637\nv -0.28125 -0.09375 0.389032\nv -0.273438 -0.09375 0.387798\nv -0.265625 -0.09375 0.386751\nv -0.257812 -0.09375 0.385957\nv -0.25 -0.09375 0.385328\nv -0.237909 -0.09375 0.382812\nv -0.242188 -0.09375 0.383842\nv 0.403163 -0.09375 0.382812\nv 0.40625 -0.09375 0.383501\nv 0.414062 -0.09375 0.384603\nv 0.421875 -0.09375 0.385395\nv 0.429688 -0.09375 0.385885\nv 0.4375 -0.09375 0.386191\nv 0.445312 -0.09375 0.386791\nv 0.453125 -0.09375 0.387399\nv 0.460938 -0.09375 0.388154\nv 0.46875 -0.09375 0.388053\nv 0.476562 -0.09375 0.387677\nv 0.484375 -0.09375 0.387185\nv 0.496982 -0.09375 0.382812\nv 0.492188 -0.09375 0.38497\nv -0.30849 -0.0859375 0.382812\nv -0.304688 -0.0859375 0.384706\nv -0.296875 -0.0859375 0.387403\nv -0.289062 -0.0859375 0.388264\nv -0.28125 -0.0859375 0.388525\nv -0.273438 -0.0859375 0.387611\nv -0.265625 -0.0859375 0.386747\nv -0.257812 -0.0859375 0.385966\nv -0.25 -0.0859375 0.385145\nv -0.2396 -0.0859375 0.382812\nv -0.242188 -0.0859375 0.383388\nv 0.404232 -0.0859375 0.382812\nv 0.40625 -0.0859375 0.383248\nv 0.414062 -0.0859375 0.384469\nv 0.421875 -0.0859375 0.385137\nv 0.429688 -0.0859375 0.385582\nv 0.4375 -0.0859375 0.385873\nv 0.445312 -0.0859375 0.386566\nv 0.453125 -0.0859375 0.387267\nv 0.460938 -0.0859375 0.388114\nv 0.46875 -0.0859375 0.388189\nv 0.476562 -0.0859375 0.388047\nv 0.484375 -0.0859375 0.387878\nv 0.499259 -0.0859375 0.382812\nv 0.492188 -0.0859375 0.386066\nv 0.5 -0.0828802 0.382812\nv -0.309583 -0.078125 0.382812\nv -0.304688 -0.078125 0.385305\nv -0.296875 -0.078125 0.387602\nv -0.289062 -0.078125 0.388063\nv -0.28125 -0.078125 0.388233\nv -0.273438 -0.078125 0.387608\nv -0.265625 -0.078125 0.387112\nv -0.257812 -0.078125 0.386415\nv -0.25 -0.078125 0.385259\nv -0.238868 -0.078125 0.382812\nv -0.242188 -0.078125 0.383442\nv -0.234375 -0.0717082 0.382812\nv 0.404585 -0.078125 0.382812\nv 0.40625 -0.0718527 0.382812\nv 0.40625 -0.078125 0.383117\nv 0.414062 -0.078125 0.384051\nv 0.421875 -0.078125 0.384538\nv 0.429688 -0.078125 0.385043\nv 0.4375 -0.078125 0.385282\nv 0.445312 -0.078125 0.38601\nv 0.453125 -0.078125 0.386958\nv 0.460938 -0.078125 0.387755\nv 0.46875 -0.078125 0.387933\nv 0.476562 -0.078125 0.388236\nv 0.484375 -0.078125 0.388134\nv 0.492188 -0.078125 0.38696\nv 0.500494 -0.078125 0.382812\nv 0.5 -0.078125 0.383372\nv -0.310758 -0.0703125 0.382812\nv -0.304688 -0.0703125 0.386183\nv -0.296875 -0.0703125 0.388334\nv -0.289062 -0.0703125 0.388525\nv -0.28125 -0.0703125 0.388616\nv -0.273438 -0.0703125 0.388121\nv -0.265625 -0.0703125 0.387882\nv -0.257812 -0.0703125 0.387381\nv -0.25 -0.0703125 0.386203\nv -0.242188 -0.0703125 0.384523\nv -0.233546 -0.0703125 0.382812\nv -0.234375 -0.0703125 0.382988\nv 0.406807 -0.0703125 0.382812\nv 0.40625 -0.0687439 0.382812\nv 0.414062 -0.0703125 0.383727\nv 0.421875 -0.0703125 0.383929\nv 0.429688 -0.0703125 0.384345\nv 0.4375 -0.0703125 0.384645\nv 0.445312 -0.0703125 0.385361\nv 0.453125 -0.0703125 0.386374\nv 0.460938 -0.0703125 0.386979\nv 0.46875 -0.0703125 0.38742\nv 0.476562 -0.0703125 0.388063\nv 0.484375 -0.0703125 0.387982\nv 0.492188 -0.0703125 0.386757\nv 0.500523 -0.0703125 0.382812\nv 0.5 -0.0703125 0.383384\nv -0.311009 -0.0625 0.382812\nv -0.304688 -0.0625 0.386291\nv -0.296875 -0.0625 0.388557\nv -0.289062 -0.0625 0.389041\nv -0.28125 -0.0625 0.389147\nv -0.273438 -0.0625 0.388598\nv -0.265625 -0.0625 0.388383\nv -0.257812 -0.0625 0.388066\nv -0.25 -0.0625 0.386796\nv -0.242188 -0.0625 0.385067\nv -0.23127 -0.0625 0.382812\nv -0.234375 -0.0625 0.383479\nv 0.403381 -0.0625 0.382812\nv 0.40625 -0.0625 0.383148\nv 0.414062 -0.0625 0.383814\nv 0.421875 -0.0625 0.383557\nv 0.429688 -0.0625 0.383922\nv 0.4375 -0.0625 0.384209\nv 0.445312 -0.0625 0.385026\nv 0.453125 -0.0625 0.385944\nv 0.460938 -0.0625 0.386623\nv 0.46875 -0.0625 0.387189\nv 0.476562 -0.0625 0.387904\nv 0.484375 -0.0625 0.387733\nv 0.492188 -0.0625 0.386588\nv 0.500609 -0.0625 0.382812\nv 0.5 -0.0625 0.383481\nv -0.309846 -0.0546875 0.382812\nv -0.304688 -0.0546875 0.38581\nv -0.296875 -0.0546875 0.388302\nv -0.289062 -0.0546875 0.389259\nv -0.28125 -0.0546875 0.389543\nv -0.273438 -0.0546875 0.388971\nv -0.265625 -0.0546875 0.388706\nv -0.257812 -0.0546875 0.388659\nv -0.25 -0.0546875 0.387602\nv -0.242188 -0.0546875 0.385658\nv -0.230152 -0.0546875 0.382812\nv -0.234375 -0.0546875 0.383864\nv 0.400813 -0.0546875 0.382812\nv 0.398438 -0.0503549 0.382812\nv 0.40625 -0.0546875 0.383315\nv 0.414062 -0.0546875 0.383767\nv 0.421875 -0.0546875 0.383474\nv 0.429688 -0.0546875 0.38367\nv 0.4375 -0.0546875 0.383929\nv 0.445312 -0.0546875 0.384735\nv 0.453125 -0.0546875 0.385688\nv 0.460938 -0.0546875 0.386488\nv 0.46875 -0.0546875 0.387153\nv 0.476562 -0.0546875 0.387952\nv 0.484375 -0.0546875 0.387754\nv 0.492188 -0.0546875 0.386618\nv 0.500853 -0.0546875 0.382812\nv 0.5 -0.0546875 0.383722\nv -0.308328 -0.046875 0.382812\nv -0.304688 -0.046875 0.384885\nv -0.296875 -0.046875 0.387739\nv -0.289062 -0.046875 0.388975\nv -0.28125 -0.046875 0.389575\nv -0.273438 -0.046875 0.389216\nv -0.265625 -0.046875 0.389145\nv -0.257812 -0.046875 0.389268\nv -0.25 -0.046875 0.388532\nv -0.242188 -0.046875 0.386455\nv -0.228463 -0.046875 0.382812\nv -0.234375 -0.046875 0.384518\nv 0.397335 -0.046875 0.382812\nv 0.398438 -0.046875 0.382988\nv 0.40625 -0.046875 0.38329\nv 0.414062 -0.046875 0.383727\nv 0.421875 -0.046875 0.383767\nv 0.429688 -0.046875 0.383805\nv 0.4375 -0.046875 0.383939\nv 0.445312 -0.046875 0.384698\nv 0.453125 -0.046875 0.385556\nv 0.460938 -0.046875 0.386328\nv 0.46875 -0.046875 0.387199\nv 0.476562 -0.046875 0.387878\nv 0.484375 -0.046875 0.387757\nv 0.492188 -0.046875 0.386604\nv 0.500741 -0.046875 0.382812\nv 0.5 -0.0391091 0.382812\nv 0.5 -0.046875 0.38362\nv -0.307121 -0.0390625 0.382812\nv -0.304688 -0.0390625 0.384238\nv -0.296875 -0.0390625 0.387004\nv -0.289062 -0.0390625 0.388583\nv -0.28125 -0.0390625 0.389213\nv -0.273438 -0.0390625 0.389292\nv -0.265625 -0.0390625 0.389253\nv -0.257812 -0.0390625 0.389469\nv -0.25 -0.0390625 0.389164\nv -0.242188 -0.0390625 0.387044\nv -0.227631 -0.0390625 0.382812\nv -0.234375 -0.0390625 0.384893\nv 0.398257 -0.0390625 0.382812\nv 0.398438 -0.038236 0.382812\nv 0.398438 -0.0390625 0.382843\nv 0.40625 -0.0390625 0.383291\nv 0.414062 -0.0390625 0.383753\nv 0.421875 -0.0390625 0.384074\nv 0.429688 -0.0390625 0.383997\nv 0.4375 -0.0390625 0.384046\nv 0.445312 -0.0390625 0.384647\nv 0.453125 -0.0390625 0.385375\nv 0.460938 -0.0390625 0.386169\nv 0.46875 -0.0390625 0.386792\nv 0.476562 -0.0390625 0.387587\nv 0.484375 -0.0390625 0.387423\nv 0.49999 -0.0390625 0.382812\nv 0.492188 -0.0390625 0.386195\nv -0.306121 -0.03125 0.382812\nv -0.304688 -0.03125 0.383619\nv -0.296875 -0.03125 0.38595\nv -0.289062 -0.03125 0.387606\nv -0.28125 -0.03125 0.388491\nv -0.273438 -0.03125 0.388771\nv -0.265625 -0.03125 0.388852\nv -0.257812 -0.03125 0.389142\nv -0.25 -0.03125 0.388973\nv -0.242188 -0.03125 0.386887\nv -0.228841 -0.03125 0.382812\nv -0.234375 -0.03125 0.384612\nv 0.401092 -0.03125 0.382812\nv 0.40625 -0.0247374 0.382812\nv 0.40625 -0.03125 0.383272\nv 0.414062 -0.03125 0.383643\nv 0.421875 -0.03125 0.384095\nv 0.429688 -0.03125 0.38419\nv 0.4375 -0.03125 0.384086\nv 0.445312 -0.03125 0.384508\nv 0.453125 -0.03125 0.384865\nv 0.460938 -0.03125 0.385559\nv 0.46875 -0.03125 0.386176\nv 0.476562 -0.03125 0.386888\nv 0.484375 -0.03125 0.386759\nv 0.49783 -0.03125 0.382812\nv 0.492188 -0.03125 0.385468\nv -0.305321 -0.0234375 0.382812\nv -0.304688 -0.0234375 0.383147\nv -0.296875 -0.0234375 0.385288\nv -0.289062 -0.0234375 0.386639\nv -0.28125 -0.0234375 0.38746\nv -0.273438 -0.0234375 0.387951\nv -0.265625 -0.0234375 0.388285\nv -0.257812 -0.0234375 0.388822\nv -0.25 -0.0234375 0.388814\nv -0.242188 -0.0234375 0.386656\nv -0.229967 -0.0234375 0.382812\nv -0.234375 -0.0234375 0.38433\nv 0.408342 -0.0234375 0.382812\nv 0.414062 -0.0221994 0.382812\nv 0.414062 -0.0234375 0.383044\nv 0.421875 -0.0206897 0.382812\nv 0.421875 -0.0234375 0.383347\nv 0.429688 -0.0193642 0.382812\nv 0.429688 -0.0234375 0.383552\nv 0.4375 -0.0201573 0.382812\nv 0.4375 -0.0234375 0.383415\nv 0.445312 -0.0183061 0.382812\nv 0.445312 -0.0234375 0.383589\nv 0.453125 -0.0234375 0.384011\nv 0.460938 -0.0234375 0.384387\nv 0.46875 -0.0234375 0.384888\nv 0.476562 -0.0234375 0.385305\nv 0.484375 -0.0234375 0.385412\nv 0.494805 -0.0234375 0.382812\nv 0.492188 -0.01653 0.382812\nv 0.492188 -0.0234375 0.384028\nv -0.304972 -0.015625 0.382812\nv -0.304688 -0.0141211 0.382812\nv -0.304688 -0.015625 0.382969\nv -0.296875 -0.015625 0.384889\nv -0.289062 -0.015625 0.386231\nv -0.28125 -0.015625 0.386854\nv -0.273438 -0.015625 0.387072\nv -0.265625 -0.015625 0.387596\nv -0.257812 -0.015625 0.388298\nv -0.25 -0.015625 0.388055\nv -0.242188 -0.015625 0.38619\nv -0.229863 -0.015625 0.382812\nv -0.234375 -0.015625 0.384198\nv 0.452783 -0.015625 0.382812\nv 0.453125 -0.0154771 0.382812\nv 0.453125 -0.015625 0.382832\nv 0.460938 -0.012389 0.382812\nv 0.460938 -0.015625 0.383209\nv 0.46875 -0.0092594 0.382812\nv 0.46875 -0.015625 0.383615\nv 0.476562 -0.015625 0.384039\nv 0.491335 -0.015625 0.382812\nv 0.484375 -0.015625 0.383964\nv -0.302512 -0.0078125 0.382812\nv -0.296875 -0.0078125 0.384239\nv -0.289062 -0.0078125 0.385513\nv -0.28125 -0.0078125 0.386156\nv -0.273438 -0.0078125 0.386158\nv -0.265625 -0.0078125 0.386603\nv -0.257812 -0.0078125 0.387122\nv -0.25 -0.0078125 0.386965\nv -0.242188 -0.0078125 0.385251\nv -0.230205 -0.0078125 0.382812\nv -0.234375 -0.0078125 0.383788\nv 0.472793 -0.0078125 0.382812\nv 0.476562 -0.0078125 0.383007\nv 0.486186 -0.0078125 0.382812\nv 0.484375 -0.00274863 0.382812\nv 0.484375 -0.0078125 0.383109\nv -0.302134 0 0.382812\nv -0.296875 0 0.384194\nv -0.289062 0 0.385365\nv -0.28125 0 0.385669\nv -0.273438 0 0.385672\nv -0.265625 0 0.385951\nv -0.257812 0 0.386118\nv -0.25 0 0.385973\nv -0.242188 0 0.384474\nv -0.233379 0 0.382812\nv -0.234375 0.00340317 0.382812\nv -0.234375 0 0.382953\nv 0.476276 0 0.382812\nv 0.478285 0 0.382812\nv 0.476562 0 0.382851\nv -0.302421 0.0078125 0.382812\nv -0.296875 0.0078125 0.384414\nv -0.289062 0.0078125 0.385898\nv -0.28125 0.0078125 0.386126\nv -0.273438 0.0078125 0.386105\nv -0.265625 0.0078125 0.38627\nv -0.257812 0.0078125 0.386268\nv -0.25 0.0078125 0.385983\nv -0.235141 0.0078125 0.382812\nv -0.242188 0.0078125 0.384571\nv -0.234375 0.0132902 0.382812\nv 0.47582 0.0078125 0.382812\nv 0.477291 0.0078125 0.382812\nv 0.476562 0.0146753 0.382812\nv 0.476562 0.0078125 0.382894\nv -0.30393 0.015625 0.382812\nv -0.304688 0.0171716 0.382812\nv -0.296875 0.015625 0.384856\nv -0.289062 0.015625 0.385916\nv -0.28125 0.015625 0.386158\nv -0.273438 0.015625 0.386152\nv -0.265625 0.015625 0.386255\nv -0.257812 0.015625 0.386211\nv -0.25 0.015625 0.385925\nv -0.242188 0.015625 0.384586\nv -0.233981 0.015625 0.382812\nv -0.234375 0.015625 0.38289\nv -0.3069 0.0234375 0.382812\nv -0.304688 0.0234375 0.383867\nv -0.296875 0.0234375 0.385809\nv -0.289062 0.0234375 0.386473\nv -0.28125 0.0234375 0.386371\nv -0.273438 0.0234375 0.386288\nv -0.265625 0.0234375 0.386428\nv -0.257812 0.0234375 0.386604\nv -0.25 0.0234375 0.38631\nv -0.242188 0.0234375 0.384926\nv -0.233475 0.0234375 0.382812\nv -0.234375 0.0234375 0.382978\nv -0.309346 0.03125 0.382812\nv -0.304688 0.03125 0.38507\nv -0.296875 0.03125 0.386688\nv -0.289062 0.03125 0.386933\nv -0.28125 0.03125 0.386791\nv -0.273438 0.03125 0.386678\nv -0.265625 0.03125 0.386696\nv -0.257812 0.03125 0.386727\nv -0.25 0.03125 0.386488\nv -0.242188 0.03125 0.385333\nv -0.230138 0.03125 0.382812\nv -0.234375 0.03125 0.38358\nv -0.310864 0.0390625 0.382812\nv -0.3125 0.0465328 0.382812\nv -0.304688 0.0390625 0.385713\nv -0.296875 0.0390625 0.387139\nv -0.289062 0.0390625 0.387162\nv -0.28125 0.0390625 0.387028\nv -0.273438 0.0390625 0.386882\nv -0.265625 0.0390625 0.386671\nv -0.257812 0.0390625 0.386391\nv -0.25 0.0390625 0.385891\nv -0.242188 0.0390625 0.384837\nv -0.231192 0.0390625 0.382812\nv -0.234375 0.0456969 0.382812\nv -0.234375 0.0390625 0.383321\nv -0.312541 0.046875 0.382812\nv -0.3125 0.046875 0.382852\nv -0.304688 0.046875 0.386269\nv -0.296875 0.046875 0.387449\nv -0.289062 0.046875 0.387442\nv -0.28125 0.046875 0.387118\nv -0.273438 0.046875 0.386881\nv -0.265625 0.046875 0.386462\nv -0.257812 0.046875 0.385697\nv -0.25 0.046875 0.385053\nv -0.23496 0.046875 0.382812\nv -0.242188 0.046875 0.383976\nv -0.313066 0.0546875 0.382812\nv -0.3125 0.0546875 0.383361\nv -0.304688 0.0546875 0.386609\nv -0.296875 0.0546875 0.387434\nv -0.289062 0.0546875 0.387335\nv -0.28125 0.0546875 0.386887\nv -0.273438 0.0546875 0.386607\nv -0.265625 0.0546875 0.385947\nv -0.257812 0.0546875 0.385099\nv -0.25 0.0546875 0.384243\nv -0.240546 0.0546875 0.382812\nv -0.242188 0.0560041 0.382812\nv -0.242188 0.0546875 0.383032\nv -0.313157 0.0625 0.382812\nv -0.3125 0.0625 0.383406\nv -0.304688 0.0625 0.386215\nv -0.296875 0.0625 0.387018\nv -0.289062 0.0625 0.38662\nv -0.28125 0.0625 0.386104\nv -0.273438 0.0625 0.385593\nv -0.265625 0.0625 0.384901\nv -0.257812 0.0625 0.384146\nv -0.24813 0.0625 0.382812\nv -0.25 0.064763 0.382812\nv -0.25 0.0625 0.383146\nv -0.313249 0.0703125 0.382812\nv -0.3125 0.0703125 0.383388\nv -0.304688 0.0703125 0.386067\nv -0.296875 0.0703125 0.386699\nv -0.289062 0.0703125 0.386077\nv -0.28125 0.0703125 0.385343\nv -0.273438 0.0703125 0.384621\nv -0.265625 0.0703125 0.383704\nv -0.256346 0.0703125 0.382812\nv -0.257812 0.0755042 0.382812\nv -0.257812 0.0703125 0.383003\nv -0.314706 0.078125 0.382812\nv -0.3125 0.078125 0.384541\nv -0.304688 0.078125 0.386769\nv -0.296875 0.078125 0.386942\nv -0.289062 0.078125 0.386007\nv -0.28125 0.078125 0.385093\nv -0.273438 0.078125 0.38407\nv -0.259326 0.078125 0.382812\nv -0.265625 0.078125 0.383249\nv -0.315255 0.0859375 0.382812\nv -0.3125 0.0859375 0.385017\nv -0.304688 0.0859375 0.386985\nv -0.296875 0.0859375 0.387446\nv -0.289062 0.0859375 0.386812\nv -0.28125 0.0859375 0.385944\nv -0.273438 0.0859375 0.384885\nv -0.257852 0.0859375 0.382812\nv -0.265625 0.0859375 0.38353\nv -0.257812 0.0859604 0.382812\nv -0.315888 0.09375 0.382812\nv -0.3125 0.09375 0.38537\nv -0.304688 0.09375 0.387095\nv -0.296875 0.09375 0.387587\nv -0.289062 0.09375 0.38697\nv -0.28125 0.09375 0.386303\nv -0.273438 0.09375 0.38558\nv -0.265625 0.09375 0.384829\nv -0.252099 0.09375 0.382812\nv -0.257812 0.09375 0.383855\nv -0.25 0.0998079 0.382812\nv -0.315851 0.101562 0.382812\nv -0.3125 0.101562 0.385228\nv -0.304688 0.101562 0.386955\nv -0.296875 0.101562 0.387607\nv -0.289062 0.101562 0.387072\nv -0.28125 0.101562 0.3864\nv -0.273438 0.101562 0.38578\nv -0.265625 0.101562 0.385252\nv -0.257812 0.101562 0.384267\nv -0.249573 0.101562 0.382812\nv -0.25 0.101562 0.382925\nv -0.315255 0.109375 0.382812\nv -0.3125 0.109375 0.384651\nv -0.304688 0.109375 0.38647\nv -0.296875 0.109375 0.387394\nv -0.289062 0.109375 0.387108\nv -0.28125 0.109375 0.386595\nv -0.273438 0.109375 0.386183\nv -0.265625 0.109375 0.385597\nv -0.257812 0.109375 0.38477\nv -0.248222 0.109375 0.382812\nv -0.25 0.109375 0.383299\nv -0.314718 0.117188 0.382812\nv -0.3125 0.117188 0.384154\nv -0.304688 0.117188 0.385925\nv -0.296875 0.117188 0.386936\nv -0.289062 0.117188 0.38696\nv -0.28125 0.117188 0.386676\nv -0.273438 0.117188 0.386468\nv -0.265625 0.117188 0.385968\nv -0.257812 0.117188 0.385307\nv -0.245867 0.117188 0.382812\nv -0.25 0.117188 0.384022\nv -0.314439 0.125 0.382812\nv -0.3125 0.125 0.383871\nv -0.304688 0.125 0.38542\nv -0.296875 0.125 0.386542\nv -0.289062 0.125 0.386765\nv -0.28125 0.125 0.386757\nv -0.273438 0.125 0.386714\nv -0.265625 0.125 0.386251\nv -0.257812 0.125 0.385684\nv -0.24298 0.125 0.382812\nv -0.25 0.125 0.384755\nv -0.242188 0.128946 0.382812\nv -0.31405 0.132812 0.382812\nv -0.3125 0.132812 0.383656\nv -0.304688 0.132812 0.385066\nv -0.296875 0.132812 0.386268\nv -0.289062 0.132812 0.386582\nv -0.28125 0.132812 0.386847\nv -0.273438 0.132812 0.386886\nv -0.265625 0.132812 0.386449\nv -0.257812 0.132812 0.385921\nv -0.25 0.132812 0.385096\nv -0.241441 0.132812 0.382812\nv -0.242188 0.132812 0.38305\nv -0.313709 0.140625 0.382812\nv -0.3125 0.140625 0.383499\nv -0.304688 0.140625 0.384862\nv -0.296875 0.140625 0.385985\nv -0.289062 0.140625 0.386349\nv -0.28125 0.140625 0.386693\nv -0.273438 0.140625 0.386984\nv -0.265625 0.140625 0.386523\nv -0.257812 0.140625 0.386085\nv -0.25 0.140625 0.385307\nv -0.240872 0.140625 0.382812\nv -0.242188 0.140625 0.383236\nv -0.313799 0.148438 0.382812\nv -0.3125 0.148438 0.383536\nv -0.304688 0.148438 0.384875\nv -0.296875 0.148438 0.385804\nv -0.289062 0.148438 0.386112\nv -0.28125 0.148438 0.386497\nv -0.273438 0.148438 0.386783\nv -0.265625 0.148438 0.386513\nv -0.257812 0.148438 0.386268\nv -0.25 0.148438 0.385604\nv -0.240129 0.148438 0.382812\nv -0.242188 0.148438 0.383562\nv -0.313881 0.15625 0.382812\nv -0.3125 0.15625 0.383526\nv -0.304688 0.15625 0.38493\nv -0.296875 0.15625 0.385864\nv -0.289062 0.15625 0.386133\nv -0.28125 0.15625 0.386368\nv -0.273438 0.15625 0.386482\nv -0.265625 0.15625 0.386354\nv -0.257812 0.15625 0.386295\nv -0.25 0.15625 0.385688\nv -0.239388 0.15625 0.382812\nv -0.242188 0.15625 0.383998\nv -0.313978 0.164062 0.382812\nv -0.3125 0.164062 0.383523\nv -0.304688 0.164062 0.384935\nv -0.296875 0.164062 0.385932\nv -0.289062 0.164062 0.386246\nv -0.28125 0.164062 0.386441\nv -0.273438 0.164062 0.386313\nv -0.265625 0.164062 0.386189\nv -0.257812 0.164062 0.386088\nv -0.25 0.164062 0.385588\nv -0.239763 0.164062 0.382812\nv -0.242188 0.164062 0.383911\nv -0.314228 0.171875 0.382812\nv -0.3125 0.171875 0.383591\nv -0.304688 0.171875 0.384998\nv -0.296875 0.171875 0.385994\nv -0.289062 0.171875 0.386322\nv -0.28125 0.171875 0.386483\nv -0.273438 0.171875 0.386316\nv -0.265625 0.171875 0.386226\nv -0.257812 0.171875 0.386114\nv -0.25 0.171875 0.385545\nv -0.239592 0.171875 0.382812\nv -0.242188 0.171875 0.38399\nv -0.314713 0.179688 0.382812\nv -0.3125 0.179688 0.383792\nv -0.304688 0.179688 0.385144\nv -0.296875 0.179688 0.385954\nv -0.289062 0.179688 0.3863\nv -0.28125 0.179688 0.386494\nv -0.273438 0.179688 0.386276\nv -0.265625 0.179688 0.386293\nv -0.257812 0.179688 0.386199\nv -0.25 0.179688 0.385569\nv -0.239247 0.179688 0.382812\nv -0.242188 0.179688 0.384139\nv -0.315218 0.1875 0.382812\nv -0.3125 0.1875 0.383942\nv -0.304688 0.1875 0.385294\nv -0.296875 0.1875 0.385937\nv -0.289062 0.1875 0.386105\nv -0.28125 0.1875 0.386149\nv -0.273438 0.1875 0.385993\nv -0.265625 0.1875 0.386174\nv -0.257812 0.1875 0.386219\nv -0.25 0.1875 0.3856\nv -0.2389 0.1875 0.382812\nv -0.242188 0.1875 0.384382\nv -0.316002 0.195312 0.382812\nv -0.3125 0.195312 0.384176\nv -0.304688 0.195312 0.385592\nv -0.296875 0.195312 0.386087\nv -0.289062 0.195312 0.386164\nv -0.28125 0.195312 0.386046\nv -0.273438 0.195312 0.385815\nv -0.265625 0.195312 0.385846\nv -0.257812 0.195312 0.385891\nv -0.25 0.195312 0.38542\nv -0.238472 0.195312 0.382812\nv -0.242188 0.195312 0.384454\nv -0.317194 0.203125 0.382812\nv -0.3125 0.203125 0.384547\nv -0.304688 0.203125 0.385987\nv -0.296875 0.203125 0.386416\nv -0.289062 0.203125 0.386396\nv -0.28125 0.203125 0.386161\nv -0.273438 0.203125 0.385909\nv -0.265625 0.203125 0.385859\nv -0.257812 0.203125 0.385838\nv -0.25 0.203125 0.385351\nv -0.238667 0.203125 0.382812\nv -0.242188 0.203125 0.38427\nv -0.318479 0.210938 0.382812\nv -0.3125 0.210938 0.384974\nv -0.304688 0.210938 0.386376\nv -0.296875 0.210938 0.386801\nv -0.289062 0.210938 0.386656\nv -0.28125 0.210938 0.38631\nv -0.273438 0.210938 0.386013\nv -0.265625 0.210938 0.386024\nv -0.257812 0.210938 0.385985\nv -0.25 0.210938 0.385415\nv -0.239002 0.210938 0.382812\nv -0.242188 0.210938 0.384099\nv -0.318997 0.21875 0.382812\nv -0.3125 0.21875 0.385278\nv -0.304688 0.21875 0.386688\nv -0.296875 0.21875 0.387138\nv -0.289062 0.21875 0.38691\nv -0.28125 0.21875 0.386436\nv -0.273438 0.21875 0.386115\nv -0.265625 0.21875 0.386114\nv -0.257812 0.21875 0.386072\nv -0.25 0.21875 0.385356\nv -0.23927 0.21875 0.382812\nv -0.242188 0.21875 0.383908\nv -0.319329 0.226562 0.382812\nv -0.3125 0.226562 0.38551\nv -0.304688 0.226562 0.386885\nv -0.296875 0.226562 0.38734\nv -0.289062 0.226562 0.38707\nv -0.28125 0.226562 0.386659\nv -0.273438 0.226562 0.386239\nv -0.265625 0.226562 0.386088\nv -0.257812 0.226562 0.386043\nv -0.25 0.226562 0.385347\nv -0.239716 0.226562 0.382812\nv -0.242188 0.226562 0.383753\nv -0.319495 0.234375 0.382812\nv -0.3125 0.234375 0.385621\nv -0.304688 0.234375 0.387004\nv -0.296875 0.234375 0.387461\nv -0.289062 0.234375 0.387152\nv -0.28125 0.234375 0.386764\nv -0.273438 0.234375 0.386195\nv -0.265625 0.234375 0.386033\nv -0.257812 0.234375 0.385976\nv -0.25 0.234375 0.385229\nv -0.240751 0.234375 0.382812\nv -0.242188 0.234375 0.383473\nv -0.319433 0.242188 0.382812\nv -0.3125 0.242188 0.385581\nv -0.304688 0.242188 0.387014\nv -0.296875 0.242188 0.387485\nv -0.289062 0.242188 0.387173\nv -0.28125 0.242188 0.386709\nv -0.273438 0.242188 0.386164\nv -0.265625 0.242188 0.385957\nv -0.257812 0.242188 0.385806\nv -0.25 0.242188 0.385021\nv -0.241817 0.242188 0.382812\nv -0.242188 0.244581 0.382812\nv -0.242188 0.242188 0.382998\nv -0.319388 0.25 0.382812\nv -0.3125 0.25 0.385475\nv -0.304688 0.25 0.387012\nv -0.296875 0.25 0.387499\nv -0.289062 0.25 0.387082\nv -0.28125 0.25 0.386686\nv -0.273438 0.25 0.38617\nv -0.265625 0.25 0.385873\nv -0.257812 0.25 0.385684\nv -0.243435 0.25 0.382812\nv -0.25 0.25 0.384843\nv -0.319541 0.257812 0.382812\nv -0.3125 0.257812 0.385429\nv -0.304688 0.257812 0.387009\nv -0.296875 0.257812 0.387422\nv -0.289062 0.257812 0.387019\nv -0.28125 0.257812 0.38669\nv -0.273438 0.257812 0.386175\nv -0.265625 0.257812 0.385855\nv -0.257812 0.257812 0.385575\nv -0.244686 0.257812 0.382812\nv -0.25 0.257812 0.384656\nv -0.320171 0.265625 0.382812\nv -0.320312 0.267324 0.382812\nv -0.3125 0.265625 0.385554\nv -0.304688 0.265625 0.387117\nv -0.296875 0.265625 0.387467\nv -0.289062 0.265625 0.387055\nv -0.28125 0.265625 0.386769\nv -0.273438 0.265625 0.386209\nv -0.265625 0.265625 0.385832\nv -0.257812 0.265625 0.385454\nv -0.245843 0.265625 0.382812\nv -0.25 0.265625 0.384339\nv -0.32056 0.273438 0.382812\nv -0.320312 0.273438 0.383022\nv -0.3125 0.273438 0.385715\nv -0.304688 0.273438 0.387385\nv -0.296875 0.273438 0.387695\nv -0.289062 0.273438 0.387231\nv -0.28125 0.273438 0.386993\nv -0.273438 0.273438 0.386413\nv -0.265625 0.273438 0.385958\nv -0.257812 0.273438 0.385401\nv -0.247036 0.273438 0.382812\nv -0.25 0.273438 0.384011\nv -0.320907 0.28125 0.382812\nv -0.320312 0.28125 0.383296\nv -0.3125 0.28125 0.385902\nv -0.304688 0.28125 0.387806\nv -0.296875 0.28125 0.387967\nv -0.289062 0.28125 0.387501\nv -0.28125 0.28125 0.387272\nv -0.273438 0.28125 0.386685\nv -0.265625 0.28125 0.386141\nv -0.257812 0.28125 0.38544\nv -0.248016 0.28125 0.382812\nv -0.25 0.28125 0.383756\nv -0.321341 0.289062 0.382812\nv -0.320312 0.289062 0.38361\nv -0.3125 0.289062 0.386176\nv -0.304688 0.289062 0.388123\nv -0.296875 0.289062 0.388218\nv -0.289062 0.289062 0.387737\nv -0.28125 0.289062 0.387561\nv -0.273438 0.289062 0.38692\nv -0.265625 0.289062 0.386316\nv -0.257812 0.289062 0.385572\nv -0.24844 0.289062 0.382812\nv -0.25 0.289062 0.383621\nv -0.321647 0.296875 0.382812\nv -0.320312 0.296875 0.383821\nv -0.3125 0.296875 0.386459\nv -0.304688 0.296875 0.388345\nv -0.296875 0.296875 0.388447\nv -0.289062 0.296875 0.387969\nv -0.28125 0.296875 0.387706\nv -0.273438 0.296875 0.387086\nv -0.265625 0.296875 0.386561\nv -0.257812 0.296875 0.385856\nv -0.248581 0.296875 0.382812\nv -0.25 0.296875 0.383623\nv -0.322124 0.304688 0.382812\nv -0.320312 0.304688 0.38413\nv -0.3125 0.304688 0.386722\nv -0.304688 0.304688 0.388548\nv -0.296875 0.304688 0.388611\nv -0.289062 0.304688 0.388092\nv -0.28125 0.304688 0.387838\nv -0.273438 0.304688 0.387177\nv -0.265625 0.304688 0.386713\nv -0.257812 0.304688 0.386003\nv -0.24855 0.304688 0.382812\nv -0.25 0.304688 0.383705\nv -0.322754 0.3125 0.382812\nv -0.320312 0.3125 0.384528\nv -0.3125 0.3125 0.387044\nv -0.304688 0.3125 0.388643\nv -0.296875 0.3125 0.388628\nv -0.289062 0.3125 0.388142\nv -0.28125 0.3125 0.387909\nv -0.273438 0.3125 0.387177\nv -0.265625 0.3125 0.386727\nv -0.257812 0.3125 0.385953\nv -0.248769 0.3125 0.382812\nv -0.25 0.3125 0.383609\nv -0.323184 0.320312 0.382812\nv -0.320312 0.320312 0.384756\nv -0.3125 0.320312 0.387222\nv -0.304688 0.320312 0.388666\nv -0.296875 0.320312 0.388623\nv -0.289062 0.320312 0.388183\nv -0.28125 0.320312 0.387929\nv -0.273438 0.320312 0.387169\nv -0.265625 0.320312 0.386682\nv -0.257812 0.320312 0.385894\nv -0.249031 0.320312 0.382812\nv -0.25 0.320312 0.383463\nv -0.323135 0.328125 0.382812\nv -0.320312 0.328125 0.384684\nv -0.3125 0.328125 0.387295\nv -0.304688 0.328125 0.388662\nv -0.296875 0.328125 0.388583\nv -0.289062 0.328125 0.388162\nv -0.28125 0.328125 0.387877\nv -0.273438 0.328125 0.387095\nv -0.265625 0.328125 0.386591\nv -0.257812 0.328125 0.385735\nv -0.249414 0.328125 0.382812\nv -0.25 0.328125 0.383222\nv -0.323007 0.335938 0.382812\nv -0.320312 0.335938 0.384548\nv -0.3125 0.335938 0.387341\nv -0.304688 0.335938 0.388662\nv -0.296875 0.335938 0.388566\nv -0.289062 0.335938 0.388171\nv -0.28125 0.335938 0.387733\nv -0.273438 0.335938 0.387016\nv -0.265625 0.335938 0.386446\nv -0.257812 0.335938 0.385431\nv -0.249966 0.335938 0.382812\nv -0.25 0.336526 0.382812\nv -0.25 0.335938 0.382836\nv -0.323178 0.34375 0.382812\nv -0.320312 0.34375 0.384615\nv -0.3125 0.34375 0.387425\nv -0.304688 0.34375 0.388677\nv -0.296875 0.34375 0.38853\nv -0.289062 0.34375 0.388167\nv -0.28125 0.34375 0.387578\nv -0.273438 0.34375 0.386898\nv -0.265625 0.34375 0.386262\nv -0.250894 0.34375 0.382812\nv -0.257812 0.34375 0.385119\nv -0.323562 0.351562 0.382812\nv -0.320312 0.351562 0.384822\nv -0.3125 0.351562 0.387598\nv -0.304688 0.351562 0.388797\nv -0.296875 0.351562 0.388561\nv -0.289062 0.351562 0.388175\nv -0.28125 0.351562 0.387373\nv -0.273438 0.351562 0.386668\nv -0.265625 0.351562 0.386027\nv -0.2519 0.351562 0.382812\nv -0.257812 0.351562 0.384742\nv -0.324023 0.359375 0.382812\nv -0.320312 0.359375 0.38509\nv -0.3125 0.359375 0.387878\nv -0.304688 0.359375 0.389045\nv -0.296875 0.359375 0.388747\nv -0.289062 0.359375 0.388328\nv -0.28125 0.359375 0.387398\nv -0.273438 0.359375 0.386656\nv -0.265625 0.359375 0.385953\nv -0.252129 0.359375 0.382812\nv -0.257812 0.359375 0.3846\nv -0.324362 0.367188 0.382812\nv -0.320312 0.367188 0.385296\nv -0.3125 0.367188 0.388142\nv -0.304688 0.367188 0.389312\nv -0.296875 0.367188 0.388929\nv -0.289062 0.367188 0.388415\nv -0.28125 0.367188 0.38745\nv -0.273438 0.367188 0.38664\nv -0.265625 0.367188 0.385891\nv -0.252125 0.367188 0.382812\nv -0.257812 0.367188 0.384587\nv -0.324591 0.375 0.382812\nv -0.320312 0.375 0.385494\nv -0.3125 0.375 0.388351\nv -0.304688 0.375 0.389453\nv -0.296875 0.375 0.38903\nv -0.289062 0.375 0.388433\nv -0.28125 0.375 0.387476\nv -0.273438 0.375 0.386622\nv -0.265625 0.375 0.385847\nv -0.252128 0.375 0.382812\nv -0.257812 0.375 0.384525\nv -0.324753 0.382812 0.382812\nv -0.320312 0.382812 0.385623\nv -0.3125 0.382812 0.388516\nv -0.304688 0.382812 0.389479\nv -0.296875 0.382812 0.389033\nv -0.289062 0.382812 0.388339\nv -0.28125 0.382812 0.38741\nv -0.273438 0.382812 0.386546\nv -0.265625 0.382812 0.385795\nv -0.252018 0.382812 0.382812\nv -0.257812 0.382812 0.3845\nv -0.324924 0.390625 0.382812\nv -0.320312 0.390625 0.385718\nv -0.3125 0.390625 0.388661\nv -0.304688 0.390625 0.389455\nv -0.296875 0.390625 0.388992\nv -0.289062 0.390625 0.388157\nv -0.28125 0.390625 0.387254\nv -0.273438 0.390625 0.386398\nv -0.265625 0.390625 0.385679\nv -0.252062 0.390625 0.382812\nv -0.257812 0.390625 0.384446\nv -0.32509 0.398438 0.382812\nv -0.320312 0.398438 0.385799\nv -0.3125 0.398438 0.388787\nv -0.304688 0.398438 0.389442\nv -0.296875 0.398438 0.388893\nv -0.289062 0.398438 0.387928\nv -0.28125 0.398438 0.387026\nv -0.273438 0.398438 0.386176\nv -0.265625 0.398438 0.385556\nv -0.25232 0.398438 0.382812\nv -0.257812 0.398438 0.384359\nv -0.325197 0.40625 0.382812\nv -0.320312 0.40625 0.385884\nv -0.3125 0.40625 0.388885\nv -0.304688 0.40625 0.389407\nv -0.296875 0.40625 0.38874\nv -0.289062 0.40625 0.387694\nv -0.28125 0.40625 0.386795\nv -0.273438 0.40625 0.385949\nv -0.265625 0.40625 0.385414\nv -0.252853 0.40625 0.382812\nv -0.257812 0.40625 0.38421\nv -0.325196 0.414062 0.382812\nv -0.320312 0.414062 0.385868\nv -0.3125 0.414062 0.388923\nv -0.304688 0.414062 0.389353\nv -0.296875 0.414062 0.388568\nv -0.289062 0.414062 0.387456\nv -0.28125 0.414062 0.386577\nv -0.273438 0.414062 0.385813\nv -0.265625 0.414062 0.385322\nv -0.253392 0.414062 0.382812\nv -0.257812 0.414062 0.384095\nv -0.325187 0.421875 0.382812\nv -0.320312 0.421875 0.385828\nv -0.3125 0.421875 0.388913\nv -0.304688 0.421875 0.389294\nv -0.296875 0.421875 0.388408\nv -0.289062 0.421875 0.387286\nv -0.28125 0.421875 0.386438\nv -0.273438 0.421875 0.38574\nv -0.265625 0.421875 0.385286\nv -0.253914 0.421875 0.382812\nv -0.257812 0.421875 0.384007\nv -0.325347 0.429688 0.382812\nv -0.320312 0.429688 0.385874\nv -0.3125 0.429688 0.388975\nv -0.304688 0.429688 0.389247\nv -0.296875 0.429688 0.388227\nv -0.289062 0.429688 0.387109\nv -0.28125 0.429688 0.386366\nv -0.273438 0.429688 0.385681\nv -0.265625 0.429688 0.385238\nv -0.254413 0.429688 0.382812\nv -0.257812 0.429688 0.383899\nv -0.325784 0.4375 0.382812\nv -0.320312 0.4375 0.386048\nv -0.3125 0.4375 0.389116\nv -0.304688 0.4375 0.389115\nv -0.296875 0.4375 0.388095\nv -0.289062 0.4375 0.387\nv -0.28125 0.4375 0.386256\nv -0.273438 0.4375 0.385597\nv -0.265625 0.4375 0.385153\nv -0.255017 0.4375 0.382812\nv -0.257812 0.4375 0.383726\nv -0.326341 0.445312 0.382812\nv -0.320312 0.445312 0.386302\nv -0.3125 0.445312 0.389278\nv -0.304688 0.445312 0.388987\nv -0.296875 0.445312 0.387987\nv -0.289062 0.445312 0.386961\nv -0.28125 0.445312 0.386208\nv -0.273438 0.445312 0.385523\nv -0.265625 0.445312 0.385058\nv -0.255697 0.445312 0.382812\nv -0.257812 0.445312 0.383514\nv -0.326836 0.453125 0.382812\nv -0.320312 0.453125 0.386559\nv -0.3125 0.453125 0.389402\nv -0.304688 0.453125 0.388928\nv -0.296875 0.453125 0.387901\nv -0.289062 0.453125 0.38693\nv -0.28125 0.453125 0.386172\nv -0.273438 0.453125 0.385477\nv -0.265625 0.453125 0.384995\nv -0.256343 0.453125 0.382812\nv -0.257812 0.453125 0.383313\nv -0.327369 0.460938 0.382812\nv -0.328125 0.467838 0.382812\nv -0.320312 0.460938 0.386821\nv -0.3125 0.460938 0.389432\nv -0.304688 0.460938 0.388853\nv -0.296875 0.460938 0.387808\nv -0.289062 0.460938 0.386943\nv -0.28125 0.460938 0.386148\nv -0.273438 0.460938 0.385439\nv -0.265625 0.460938 0.384926\nv -0.256796 0.460938 0.382812\nv -0.257812 0.460938 0.383168\nv -0.3282 0.46875 0.382812\nv -0.328125 0.46875 0.382871\nv -0.320312 0.46875 0.387125\nv -0.3125 0.46875 0.389349\nv -0.304688 0.46875 0.388789\nv -0.296875 0.46875 0.387747\nv -0.289062 0.46875 0.386943\nv -0.28125 0.46875 0.386125\nv -0.273438 0.46875 0.385388\nv -0.265625 0.46875 0.384825\nv -0.257203 0.46875 0.382812\nv -0.257812 0.46875 0.38303\nv -0.328963 0.476562 0.382812\nv -0.328125 0.476562 0.383436\nv -0.320312 0.476562 0.387538\nv -0.3125 0.476562 0.389389\nv -0.304688 0.476562 0.388803\nv -0.296875 0.476562 0.387765\nv -0.289062 0.476562 0.386951\nv -0.28125 0.476562 0.386131\nv -0.273438 0.476562 0.385345\nv -0.265625 0.476562 0.384715\nv -0.257613 0.476562 0.382812\nv -0.257812 0.480486 0.382812\nv -0.257812 0.476562 0.382885\nv -0.329803 0.484375 0.382812\nv -0.328125 0.484375 0.383993\nv -0.320312 0.484375 0.387938\nv -0.3125 0.484375 0.389409\nv -0.304688 0.484375 0.388816\nv -0.296875 0.484375 0.38778\nv -0.289062 0.484375 0.38698\nv -0.28125 0.484375 0.386166\nv -0.273438 0.484375 0.385354\nv -0.258125 0.484375 0.382812\nv -0.265625 0.484375 0.384647\nv -0.330926 0.492188 0.382812\nv -0.328125 0.492188 0.384632\nv -0.320312 0.492188 0.388311\nv -0.3125 0.492188 0.389471\nv -0.304688 0.492188 0.388851\nv -0.296875 0.492188 0.387804\nv -0.289062 0.492188 0.387003\nv -0.28125 0.492188 0.386157\nv -0.273438 0.492188 0.385329\nv -0.258485 0.492188 0.382812\nv -0.265625 0.492188 0.384603\nv -0.332227 0.5 0.382812\nv -0.328125 0.5 0.385287\nv -0.320312 0.5 0.388801\nv -0.3125 0.5 0.389662\nv -0.304688 0.5 0.388946\nv -0.296875 0.5 0.387817\nv -0.289062 0.5 0.386968\nv -0.28125 0.5 0.386126\nv -0.273438 0.5 0.3853\nv -0.258902 0.5 0.382812\nv -0.265625 0.5 0.384556\nv -0.333666 0.507812 0.382812\nv -0.328125 0.507812 0.385853\nv -0.320312 0.507812 0.389202\nv -0.3125 0.507812 0.389858\nv -0.304688 0.507812 0.389073\nv -0.296875 0.507812 0.387922\nv -0.289062 0.507812 0.386924\nv -0.28125 0.507812 0.386039\nv -0.273438 0.507812 0.385203\nv -0.259645 0.507812 0.382812\nv -0.265625 0.507812 0.3844\nv -0.335169 0.515625 0.382812\nv -0.335938 0.519609 0.382812\nv -0.328125 0.515625 0.386318\nv -0.320312 0.515625 0.389559\nv -0.3125 0.515625 0.390085\nv -0.304688 0.515625 0.389163\nv -0.296875 0.515625 0.388017\nv -0.289062 0.515625 0.386913\nv -0.28125 0.515625 0.386006\nv -0.273438 0.515625 0.385125\nv -0.260415 0.515625 0.382812\nv -0.265625 0.515625 0.384201\nv -0.336364 0.523438 0.382812\nv -0.335938 0.523438 0.383195\nv -0.328125 0.523438 0.386823\nv -0.320312 0.523438 0.389908\nv -0.3125 0.523438 0.390205\nv -0.304688 0.523438 0.389188\nv -0.296875 0.523438 0.388098\nv -0.289062 0.523438 0.386892\nv -0.28125 0.523438 0.385973\nv -0.273438 0.523438 0.385052\nv -0.26087 0.523438 0.382812\nv -0.265625 0.523438 0.383964\nv -0.33721 0.53125 0.382812\nv -0.335938 0.53125 0.383863\nv -0.328125 0.53125 0.387302\nv -0.320312 0.53125 0.390271\nv -0.3125 0.53125 0.390233\nv -0.304688 0.53125 0.389238\nv -0.296875 0.53125 0.388048\nv -0.289062 0.53125 0.386847\nv -0.28125 0.53125 0.385882\nv -0.273438 0.53125 0.384942\nv -0.261471 0.53125 0.382812\nv -0.265625 0.53125 0.383821\nv -0.337995 0.539062 0.382812\nv -0.335938 0.539062 0.384427\nv -0.328125 0.539062 0.387773\nv -0.320312 0.539062 0.390563\nv -0.3125 0.539062 0.390253\nv -0.304688 0.539062 0.389203\nv -0.296875 0.539062 0.387981\nv -0.289062 0.539062 0.386752\nv -0.28125 0.539062 0.385766\nv -0.273438 0.539062 0.384846\nv -0.261933 0.539062 0.382812\nv -0.265625 0.539062 0.38371\nv -0.338813 0.546875 0.382812\nv -0.335938 0.546875 0.384966\nv -0.328125 0.546875 0.38825\nv -0.3125 0.546875 0.39028\nv -0.304688 0.546875 0.389106\nv -0.296875 0.546875 0.387792\nv -0.289062 0.546875 0.386578\nv -0.28125 0.546875 0.385657\nv -0.273438 0.546875 0.384846\nv -0.262269 0.546875 0.382812\nv -0.265625 0.546875 0.383632\nv -0.339606 0.554688 0.382812\nv -0.335938 0.554688 0.385495\nv -0.328125 0.554688 0.388747\nv -0.3125 0.554688 0.390316\nv -0.304688 0.554688 0.388836\nv -0.296875 0.554688 0.387493\nv -0.289062 0.554688 0.386428\nv -0.28125 0.554688 0.385638\nv -0.273438 0.554688 0.384908\nv -0.262484 0.554688 0.382812\nv -0.265625 0.554688 0.383588\nv -0.340486 0.5625 0.382812\nv -0.335938 0.5625 0.386016\nv -0.328125 0.5625 0.389156\nv -0.3125 0.5625 0.390113\nv -0.304688 0.5625 0.388562\nv -0.296875 0.5625 0.387202\nv -0.289062 0.5625 0.386189\nv -0.28125 0.5625 0.385661\nv -0.273438 0.5625 0.384974\nv -0.262829 0.5625 0.382812\nv -0.265625 0.5625 0.383519\nv -0.341433 0.570312 0.382812\nv -0.335938 0.570312 0.386542\nv -0.328125 0.570312 0.389365\nv -0.3125 0.570312 0.389884\nv -0.304688 0.570312 0.38829\nv -0.296875 0.570312 0.386936\nv -0.289062 0.570312 0.386032\nv -0.28125 0.570312 0.385756\nv -0.273438 0.570312 0.385072\nv -0.263045 0.570312 0.382812\nv -0.265625 0.570312 0.383478\nv -0.342384 0.578125 0.382812\nv -0.335938 0.578125 0.387083\nv -0.328125 0.578125 0.389539\nv -0.320312 0.578125 0.390575\nv -0.3125 0.578125 0.389667\nv -0.304688 0.578125 0.388035\nv -0.296875 0.578125 0.386813\nv -0.289062 0.578125 0.385969\nv -0.28125 0.578125 0.385895\nv -0.273438 0.578125 0.385167\nv -0.263325 0.578125 0.382812\nv -0.265625 0.578125 0.383399\nv -0.343472 0.585938 0.382812\nv -0.34375 0.587985 0.382812\nv -0.335938 0.585938 0.387595\nv -0.328125 0.585938 0.389692\nv -0.320312 0.585938 0.390493\nv -0.3125 0.585938 0.38948\nv -0.304688 0.585938 0.387778\nv -0.296875 0.585938 0.386754\nv -0.289062 0.585938 0.386064\nv -0.28125 0.585938 0.385982\nv -0.273438 0.585938 0.385229\nv -0.264007 0.585938 0.382812\nv -0.265625 0.585938 0.383208\nv -0.344262 0.59375 0.382812\nv -0.34375 0.59375 0.383405\nv -0.335938 0.59375 0.387991\nv -0.328125 0.59375 0.389757\nv -0.320312 0.59375 0.390436\nv -0.3125 0.59375 0.389264\nv -0.304688 0.59375 0.387609\nv -0.296875 0.59375 0.386788\nv -0.289062 0.59375 0.386189\nv -0.28125 0.59375 0.386079\nv -0.273438 0.59375 0.385262\nv -0.264862 0.59375 0.382812\nv -0.265625 0.59375 0.383011\nv -0.344939 0.601562 0.382812\nv -0.34375 0.601562 0.384137\nv -0.335938 0.601562 0.388239\nv -0.328125 0.601562 0.389759\nv -0.320312 0.601562 0.390287\nv -0.3125 0.601562 0.389116\nv -0.304688 0.601562 0.387548\nv -0.296875 0.601562 0.38693\nv -0.289062 0.601562 0.386404\nv -0.28125 0.601562 0.386234\nv -0.273438 0.601562 0.385229\nv -0.26561 0.601562 0.382812\nv -0.265625 0.601851 0.382812\nv -0.265625 0.601562 0.382817\nv -0.345793 0.609375 0.382812\nv -0.34375 0.609375 0.384982\nv -0.335938 0.609375 0.388488\nv -0.328125 0.609375 0.389756\nv -0.320312 0.609375 0.390085\nv -0.3125 0.609375 0.388959\nv -0.304688 0.609375 0.387559\nv -0.296875 0.609375 0.387064\nv -0.289062 0.609375 0.386591\nv -0.28125 0.609375 0.386281\nv -0.265989 0.609375 0.382812\nv -0.273438 0.609375 0.385094\nv -0.346654 0.617188 0.382812\nv -0.34375 0.617188 0.385736\nv -0.335938 0.617188 0.388712\nv -0.328125 0.617188 0.389685\nv -0.320312 0.617188 0.389778\nv -0.3125 0.617188 0.388819\nv -0.304688 0.617188 0.387578\nv -0.296875 0.617188 0.387145\nv -0.289062 0.617188 0.386739\nv -0.28125 0.617188 0.386376\nv -0.266228 0.617188 0.382812\nv -0.273438 0.617188 0.384961\nv -0.347207 0.625 0.382812\nv -0.34375 0.625 0.386182\nv -0.335938 0.625 0.38884\nv -0.328125 0.625 0.389608\nv -0.320312 0.625 0.389471\nv -0.3125 0.625 0.388731\nv -0.304688 0.625 0.387516\nv -0.296875 0.625 0.387169\nv -0.289062 0.625 0.386789\nv -0.28125 0.625 0.386333\nv -0.266469 0.625 0.382812\nv -0.273438 0.625 0.384799\nv -0.347185 0.632812 0.382812\nv -0.34375 0.632812 0.386056\nv -0.335938 0.632812 0.388711\nv -0.328125 0.632812 0.38946\nv -0.320312 0.632812 0.389117\nv -0.3125 0.632812 0.388573\nv -0.304688 0.632812 0.387514\nv -0.296875 0.632812 0.387191\nv -0.289062 0.632812 0.386803\nv -0.28125 0.632812 0.386186\nv -0.267251 0.632812 0.382812\nv -0.273438 0.632812 0.384514\nv -0.346899 0.640625 0.382812\nv -0.34375 0.640625 0.385687\nv -0.335938 0.640625 0.388337\nv -0.328125 0.640625 0.389075\nv -0.320312 0.640625 0.389046\nv -0.3125 0.640625 0.388476\nv -0.304688 0.640625 0.3876\nv -0.296875 0.640625 0.387214\nv -0.289062 0.640625 0.386822\nv -0.28125 0.640625 0.386014\nv -0.268457 0.640625 0.382812\nv -0.273438 0.640625 0.384209\nv -0.346388 0.648438 0.382812\nv -0.34375 0.648438 0.385177\nv -0.335938 0.648438 0.387802\nv -0.328125 0.648438 0.388931\nv -0.320312 0.648438 0.388955\nv -0.3125 0.648438 0.388426\nv -0.304688 0.648438 0.387786\nv -0.296875 0.648438 0.387374\nv -0.289062 0.648438 0.386829\nv -0.28125 0.648438 0.385774\nv -0.269698 0.648438 0.382812\nv -0.273438 0.648438 0.383834\nv -0.345818 0.65625 0.382812\nv -0.34375 0.65625 0.384628\nv -0.335938 0.65625 0.387539\nv -0.328125 0.65625 0.388765\nv -0.320312 0.65625 0.388926\nv -0.3125 0.65625 0.388409\nv -0.304688 0.65625 0.387921\nv -0.296875 0.65625 0.38749\nv -0.289062 0.65625 0.386833\nv -0.28125 0.65625 0.385541\nv -0.270977 0.65625 0.382812\nv -0.273438 0.65625 0.383465\nv -0.34545 0.664062 0.382812\nv -0.34375 0.664062 0.384257\nv -0.335938 0.664062 0.387336\nv -0.328125 0.664062 0.388587\nv -0.320312 0.664062 0.388898\nv -0.3125 0.664062 0.388364\nv -0.304688 0.664062 0.388025\nv -0.296875 0.664062 0.38763\nv -0.289062 0.664062 0.38693\nv -0.28125 0.664062 0.385337\nv -0.272691 0.664062 0.382812\nv -0.273438 0.66733 0.382812\nv -0.273438 0.664062 0.383015\nv -0.345102 0.671875 0.382812\nv -0.34375 0.671875 0.383939\nv -0.335938 0.671875 0.386902\nv -0.328125 0.671875 0.388404\nv -0.320312 0.671875 0.388737\nv -0.3125 0.671875 0.38837\nv -0.304688 0.671875 0.388082\nv -0.296875 0.671875 0.387752\nv -0.289062 0.671875 0.386941\nv -0.27438 0.671875 0.382812\nv -0.28125 0.671875 0.385065\nv -0.344872 0.679688 0.382812\nv -0.34375 0.679688 0.383716\nv -0.335938 0.679688 0.386432\nv -0.328125 0.679688 0.388076\nv -0.320312 0.679688 0.388588\nv -0.3125 0.679688 0.388224\nv -0.304688 0.679688 0.38798\nv -0.296875 0.679688 0.38769\nv -0.289062 0.679688 0.386822\nv -0.2757 0.679688 0.382812\nv -0.28125 0.679688 0.38474\nv -0.344656 0.6875 0.382812\nv -0.34375 0.6875 0.38351\nv -0.335938 0.6875 0.386065\nv -0.328125 0.6875 0.387783\nv -0.320312 0.6875 0.388441\nv -0.3125 0.6875 0.388031\nv -0.304688 0.6875 0.38781\nv -0.296875 0.6875 0.387499\nv -0.289062 0.6875 0.386698\nv -0.276561 0.6875 0.382812\nv -0.28125 0.6875 0.384441\nv -0.344582 0.695312 0.382812\nv -0.34375 0.695312 0.383436\nv -0.335938 0.695312 0.385899\nv -0.328125 0.695312 0.387627\nv -0.320312 0.695312 0.388325\nv -0.3125 0.695312 0.387738\nv -0.304688 0.695312 0.387543\nv -0.296875 0.695312 0.387246\nv -0.289062 0.695312 0.386531\nv -0.277372 0.695312 0.382812\nv -0.28125 0.695312 0.384147\nv -0.344714 0.703125 0.382812\nv -0.34375 0.703125 0.383539\nv -0.335938 0.703125 0.386123\nv -0.328125 0.703125 0.387641\nv -0.320312 0.703125 0.388076\nv -0.3125 0.703125 0.387447\nv -0.304688 0.703125 0.387238\nv -0.296875 0.703125 0.387041\nv -0.289062 0.703125 0.386359\nv -0.278013 0.703125 0.382812\nv -0.28125 0.703125 0.383915\nv -0.344971 0.710938 0.382812\nv -0.34375 0.710938 0.383748\nv -0.335938 0.710938 0.386624\nv -0.328125 0.710938 0.38802\nv -0.320312 0.710938 0.388055\nv -0.3125 0.710938 0.387284\nv -0.304688 0.710938 0.38701\nv -0.296875 0.710938 0.386811\nv -0.289062 0.710938 0.38615\nv -0.278726 0.710938 0.382812\nv -0.28125 0.710938 0.383664\nv -0.345318 0.71875 0.382812\nv -0.34375 0.71875 0.384089\nv -0.335938 0.71875 0.387117\nv -0.328125 0.71875 0.388473\nv -0.320312 0.71875 0.388166\nv -0.3125 0.71875 0.387316\nv -0.304688 0.71875 0.386929\nv -0.296875 0.71875 0.38654\nv -0.289062 0.71875 0.385841\nv -0.279597 0.71875 0.382812\nv -0.28125 0.71875 0.383357\nv -0.345666 0.726562 0.382812\nv -0.34375 0.726562 0.384567\nv -0.335938 0.726562 0.387676\nv -0.328125 0.726562 0.388892\nv -0.320312 0.726562 0.388274\nv -0.3125 0.726562 0.387408\nv -0.304688 0.726562 0.386968\nv -0.296875 0.726562 0.386348\nv -0.289062 0.726562 0.385527\nv -0.280465 0.726562 0.382812\nv -0.28125 0.73151 0.382812\nv -0.28125 0.726562 0.383065\nv -0.345837 0.734375 0.382812\nv -0.34375 0.734375 0.384841\nv -0.335938 0.734375 0.387976\nv -0.328125 0.734375 0.389146\nv -0.320312 0.734375 0.388521\nv -0.3125 0.734375 0.387697\nv -0.304688 0.734375 0.387037\nv -0.296875 0.734375 0.386379\nv -0.281698 0.734375 0.382812\nv -0.289062 0.734375 0.3852\nv -0.345969 0.742188 0.382812\nv -0.34375 0.742188 0.385041\nv -0.335938 0.742188 0.388048\nv -0.328125 0.742188 0.389385\nv -0.320312 0.742188 0.388936\nv -0.3125 0.742188 0.3882\nv -0.304688 0.742188 0.387112\nv -0.296875 0.742188 0.386418\nv -0.282752 0.742188 0.382812\nv -0.289062 0.742188 0.384824\nv -0.346011 0.75 0.382812\nv -0.34375 0.75 0.384991\nv -0.335938 0.75 0.387943\nv -0.328125 0.75 0.389535\nv -0.320312 0.75 0.389239\nv -0.3125 0.75 0.388139\nv -0.304688 0.75 0.387\nv -0.296875 0.75 0.386253\nv -0.283019 0.75 0.382812\nv -0.289062 0.75 0.384349\nv -0.28125 0.757734 0.382812\nv -0.344935 0.757812 0.382812\nv -0.34375 0.763842 0.382812\nv -0.34375 0.757812 0.383797\nv -0.335938 0.757812 0.387149\nv -0.328125 0.757812 0.388951\nv -0.320312 0.757812 0.388764\nv -0.3125 0.757812 0.38757\nv -0.304688 0.757812 0.386651\nv -0.296875 0.757812 0.385627\nv -0.289062 0.757812 0.384155\nv -0.281232 0.757812 0.382812\nv -0.28125 0.757812 0.382817\nv -0.343135 0.765625 0.382812\nv -0.335938 0.765625 0.386124\nv -0.328125 0.765625 0.387987\nv -0.320312 0.765625 0.387725\nv -0.3125 0.765625 0.386763\nv -0.304688 0.765625 0.385956\nv -0.296875 0.765625 0.38475\nv -0.289062 0.765625 0.384076\nv -0.280355 0.765625 0.382812\nv -0.28125 0.765625 0.383098\nv -0.341618 0.773438 0.382812\nv -0.335938 0.773438 0.385241\nv -0.328125 0.773438 0.387034\nv -0.320312 0.773438 0.38665\nv -0.3125 0.773438 0.386054\nv -0.304688 0.773438 0.385658\nv -0.296875 0.773438 0.38488\nv -0.289062 0.773438 0.384387\nv -0.28082 0.773438 0.382812\nv -0.28125 0.775801 0.382812\nv -0.28125 0.773438 0.383005\nv -0.339248 0.78125 0.382812\nv -0.335938 0.78125 0.384079\nv -0.328125 0.78125 0.385905\nv -0.320312 0.78125 0.386153\nv -0.3125 0.78125 0.386059\nv -0.304688 0.78125 0.385578\nv -0.296875 0.78125 0.385061\nv -0.282837 0.78125 0.382812\nv -0.289062 0.78125 0.384477\nv -0.33732 0.789062 0.382812\nv -0.335938 0.792583 0.382812\nv -0.335938 0.789062 0.383329\nv -0.328125 0.789062 0.385241\nv -0.320312 0.789062 0.386054\nv -0.3125 0.789062 0.38596\nv -0.304688 0.789062 0.385154\nv -0.296875 0.789062 0.384845\nv -0.286355 0.789062 0.382812\nv -0.289062 0.789062 0.383975\nv -0.333965 0.796875 0.382812\nv -0.328125 0.804598 0.382812\nv -0.328125 0.796875 0.384368\nv -0.320312 0.796875 0.385218\nv -0.3125 0.796875 0.385241\nv -0.304688 0.796875 0.384958\nv -0.296875 0.796875 0.384517\nv -0.288881 0.796875 0.382812\nv -0.289062 0.797734 0.382812\nv -0.289062 0.796875 0.382917\nv -0.32801 0.804688 0.382812\nv -0.320312 0.804688 0.38393\nv -0.3125 0.804688 0.384045\nv -0.304688 0.804688 0.38442\nv -0.292435 0.804688 0.382812\nv -0.296875 0.804688 0.383885\nv -0.323215 0.8125 0.382812\nv -0.320312 0.8125 0.383335\nv -0.3125 0.8125 0.383787\nv -0.304688 0.8125 0.383671\nv -0.296841 0.8125 0.382812\nv -0.296875 0.812561 0.382812\nv -0.296875 0.8125 0.382823\nv -0.322065 0.820312 0.382812\nv -0.320312 0.827638 0.382812\nv -0.320312 0.820312 0.383222\nv -0.3125 0.820312 0.38386\nv -0.304214 0.820312 0.382812\nv -0.304688 0.820916 0.382812\nv -0.304688 0.820312 0.382901\nv -0.319788 0.828125 0.382812\nv -0.310342 0.828125 0.382812\nv -0.3125 0.83329 0.382812\nv -0.3125 0.828125 0.383215\nv 0.421875 -0.714233 0.390625\nv 0.429688 -0.711268 0.390625\nv 0.418215 -0.710938 0.390625\nv 0.421875 -0.710938 0.391005\nv 0.429954 -0.710938 0.390625\nv 0.429688 -0.710938 0.390661\nv 0.414083 -0.703125 0.390625\nv 0.414062 -0.70307 0.390625\nv 0.421875 -0.703125 0.391435\nv 0.432433 -0.703125 0.390625\nv 0.429688 -0.703125 0.391043\nv 0.412626 -0.695312 0.390625\nv 0.414062 -0.695312 0.390937\nv 0.421875 -0.695312 0.39167\nv 0.434118 -0.695312 0.390625\nv 0.429688 -0.695312 0.391247\nv 0.412842 -0.6875 0.390625\nv 0.414062 -0.6875 0.39085\nv 0.421875 -0.6875 0.391534\nv 0.433981 -0.6875 0.390625\nv 0.429688 -0.6875 0.391143\nv 0.413021 -0.679688 0.390625\nv 0.414062 -0.679688 0.390782\nv 0.421875 -0.679688 0.39143\nv 0.433785 -0.679688 0.390625\nv 0.429688 -0.679688 0.391079\nv 0.412787 -0.671875 0.390625\nv 0.414062 -0.671875 0.390812\nv 0.421875 -0.671875 0.391366\nv 0.434312 -0.671875 0.390625\nv 0.429688 -0.671875 0.391036\nv 0.41363 -0.664062 0.390625\nv 0.414062 -0.662078 0.390625\nv 0.414062 -0.664062 0.390695\nv 0.421875 -0.664062 0.391478\nv 0.436155 -0.664062 0.390625\nv 0.429688 -0.664062 0.391187\nv 0.415687 -0.65625 0.390625\nv 0.421875 -0.65625 0.391347\nv 0.437387 -0.65625 0.390625\nv 0.429688 -0.65625 0.391231\nv 0.418462 -0.648438 0.390625\nv 0.421875 -0.648438 0.391069\nv 0.436881 -0.648438 0.390625\nv 0.429688 -0.648438 0.391066\nv 0.4375 -0.64527 0.390625\nv 0.419487 -0.640625 0.390625\nv 0.421875 -0.640625 0.390926\nv 0.429688 -0.640625 0.391052\nv 0.438201 -0.640625 0.390625\nv 0.4375 -0.640625 0.390679\nv 0.420544 -0.632812 0.390625\nv 0.421875 -0.632812 0.390782\nv 0.429688 -0.632812 0.390965\nv 0.43814 -0.632812 0.390625\nv 0.4375 -0.632812 0.390668\nv 0.421263 -0.625 0.390625\nv 0.421875 -0.625 0.390701\nv 0.429688 -0.625 0.390888\nv 0.437808 -0.625 0.390625\nv 0.4375 -0.625 0.390643\nv 0.421013 -0.617188 0.390625\nv 0.421875 -0.617188 0.390716\nv 0.429688 -0.617188 0.390841\nv 0.438025 -0.617188 0.390625\nv 0.4375 -0.617188 0.390658\nv 0.42007 -0.609375 0.390625\nv 0.421875 -0.609375 0.390794\nv 0.429688 -0.609375 0.390919\nv 0.438174 -0.609375 0.390625\nv 0.4375 -0.609375 0.390667\nv 0.418514 -0.601562 0.390625\nv 0.421875 -0.601562 0.390942\nv 0.429688 -0.601562 0.390979\nv 0.439326 -0.601562 0.390625\nv 0.4375 -0.596326 0.390625\nv 0.4375 -0.601562 0.390757\nv 0.418548 -0.59375 0.390625\nv 0.421875 -0.59375 0.390812\nv 0.434445 -0.59375 0.390625\nv 0.429688 -0.59375 0.390733\nv 0.414078 -0.585938 0.390625\nv 0.414062 -0.58592 0.390625\nv 0.421875 -0.585938 0.390933\nv 0.429755 -0.585938 0.390625\nv 0.429688 -0.585938 0.390628\nv 0.411273 -0.578125 0.390625\nv 0.414062 -0.578125 0.390908\nv 0.421875 -0.578125 0.391082\nv 0.430267 -0.578125 0.390625\nv 0.429688 -0.578125 0.390665\nv 0.41042 -0.570312 0.390625\nv 0.414062 -0.570312 0.391009\nv 0.421875 -0.570312 0.391213\nv 0.430853 -0.570312 0.390625\nv 0.429688 -0.570312 0.390712\nv 0.409783 -0.5625 0.390625\nv 0.414062 -0.5625 0.391115\nv 0.421875 -0.5625 0.391442\nv 0.433936 -0.5625 0.390625\nv 0.429688 -0.5625 0.391009\nv 0.409187 -0.554688 0.390625\nv 0.414062 -0.554688 0.391158\nv 0.421875 -0.554688 0.391528\nv 0.436326 -0.554688 0.390625\nv 0.429688 -0.554688 0.39123\nv 0.4375 -0.550798 0.390625\nv 0.410718 -0.546875 0.390625\nv 0.414062 -0.546875 0.391004\nv 0.421875 -0.546875 0.391594\nv 0.429688 -0.546875 0.391417\nv 0.438106 -0.546875 0.390625\nv 0.4375 -0.546875 0.390723\nv 0.413247 -0.539062 0.390625\nv 0.414062 -0.534779 0.390625\nv 0.414062 -0.539062 0.390732\nv 0.421875 -0.539062 0.391386\nv 0.429688 -0.539062 0.391528\nv 0.438901 -0.539062 0.390625\nv 0.4375 -0.539062 0.390843\nv 0.415056 -0.53125 0.390625\nv 0.421875 -0.53125 0.391224\nv 0.429688 -0.53125 0.391413\nv 0.43953 -0.53125 0.390625\nv 0.4375 -0.53125 0.390882\nv 0.415504 -0.523438 0.390625\nv 0.421875 -0.523438 0.391078\nv 0.429688 -0.523438 0.391327\nv 0.438831 -0.523438 0.390625\nv 0.4375 -0.516006 0.390625\nv 0.4375 -0.523438 0.390764\nv 0.414393 -0.515625 0.390625\nv 0.421875 -0.515625 0.391123\nv 0.437412 -0.515625 0.390625\nv 0.429688 -0.515625 0.391272\nv 0.416428 -0.507812 0.390625\nv 0.421875 -0.507812 0.391058\nv 0.435904 -0.507812 0.390625\nv 0.429688 -0.507812 0.391266\nv 0.420904 -0.5 0.390625\nv 0.421875 -0.497804 0.390625\nv 0.421875 -0.5 0.390706\nv 0.433324 -0.5 0.390625\nv 0.429688 -0.493166 0.390625\nv 0.429688 -0.5 0.39094\nv 0.460938 -0.165432 0.390625\nv -0.289062 -0.157198 0.390625\nv 0.456954 -0.164062 0.390625\nv 0.466414 -0.164062 0.390625\nv 0.460938 -0.164062 0.39068\nv 0.46875 -0.162914 0.390625\nv -0.289274 -0.15625 0.390625\nv -0.288836 -0.15625 0.390625\nv -0.289062 -0.15625 0.390641\nv 0.453945 -0.15625 0.390625\nv 0.460938 -0.15625 0.390787\nv 0.47128 -0.15625 0.390625\nv 0.46875 -0.15625 0.390752\nv -0.291554 -0.148438 0.390625\nv -0.286621 -0.148438 0.390625\nv -0.289062 -0.148438 0.390801\nv 0.457075 -0.148438 0.390625\nv 0.460938 -0.141357 0.390625\nv 0.460938 -0.148438 0.390732\nv 0.470546 -0.148438 0.390625\nv 0.46875 -0.144766 0.390625\nv 0.46875 -0.148438 0.390764\nv -0.292857 -0.140625 0.390625\nv -0.285109 -0.140625 0.390625\nv -0.289062 -0.140625 0.390966\nv -0.29061 -0.132812 0.390625\nv -0.286882 -0.132812 0.390625\nv -0.289062 -0.128971 0.390625\nv -0.289062 -0.132812 0.39078\nv -0.320312 0.544953 0.390625\nv -0.320377 0.546875 0.390625\nv -0.319884 0.546875 0.390625\nv -0.320312 0.546875 0.390644\nv -0.320986 0.554688 0.390625\nv -0.317406 0.554688 0.390625\nv -0.320312 0.554688 0.390797\nv -0.321548 0.5625 0.390625\nv -0.317523 0.5625 0.390625\nv -0.320312 0.5625 0.390892\nv -0.320945 0.570312 0.390625\nv -0.319239 0.570312 0.390625\nv -0.320312 0.575775 0.390625\nv -0.320312 0.570312 0.390736\nf 1 2 1651\nf 1 3 4\nf 1 4 2\nf 1 1649 1672\nf 1 1651 1649\nf 1 1672 3\nf 2 4 5\nf 2 5 1675\nf 2 1674 1651\nf 2 1675 1674\nf 3 6 7\nf 3 7 4\nf 3 1672 1695\nf 3 1695 6\nf 4 7 8\nf 4 8 5\nf 5 8 1718\nf 5 1697 1675\nf 5 1718 1697\nf 6 9 10\nf 6 10 7\nf 6 1695 1716\nf 6 1716 9\nf 7 10 11\nf 7 11 8\nf 8 11 1738\nf 8 1738 1718\nf 9 12 13\nf 9 13 10\nf 9 1716 1736\nf 9 1736 12\nf 10 13 14\nf 10 14 11\nf 11 14 1758\nf 11 1758 1738\nf 12 15 16\nf 12 16 13\nf 12 1736 1756\nf 12 1756 15\nf 13 16 14\nf 14 16 1780\nf 14 1759 1758\nf 14 1780 1759\nf 15 1756 1777\nf 15 1777 1779\nf 15 1779 16\nf 16 1779 1781\nf 16 1781 1780\nf 17 18 2701\nf 17 2674 2686\nf 17 2686 18\nf 17 2688 2674\nf 17 2701 2688\nf 18 19 2714\nf 18 2686 2699\nf 18 2699 19\nf 18 2714 2701\nf 19 20 2727\nf 19 2699 2712\nf 19 2712 20\nf 19 2727 2714\nf 20 21 2739\nf 20 2712 2725\nf 20 2725 21\nf 20 2739 2727\nf 21 22 2751\nf 21 2725 2737\nf 21 2737 22\nf 21 2751 2739\nf 22 23 2763\nf 22 2737 2749\nf 22 2749 23\nf 22 2763 2751\nf 23 2749 2761\nf 23 2761 2764\nf 23 2764 2763\nf 24 25 3087\nf 24 30 31\nf 24 31 32\nf 24 32 25\nf 24 3085 3105\nf 24 3087 3085\nf 24 3105 30\nf 25 32 33\nf 25 33 3109\nf 25 3108 3087\nf 25 3109 3108\nf 26 27 3099\nf 26 37 38\nf 26 38 39\nf 26 39 27\nf 26 3097 3126\nf 26 3099 3097\nf 26 3126 37\nf 27 28 3101\nf 27 39 40\nf 27 40 28\nf 27 3101 3099\nf 28 29 3103\nf 28 40 41\nf 28 41 29\nf 28 3103 3101\nf 29 30 3106\nf 29 41 42\nf 29 42 30\nf 29 3106 3103\nf 30 42 43\nf 30 43 31\nf 30 3105 3106\nf 31 43 44\nf 31 44 32\nf 32 44 45\nf 32 45 33\nf 33 34 3111\nf 33 45 46\nf 33 46 34\nf 33 3111 3109\nf 34 35 3113\nf 34 46 47\nf 34 47 35\nf 34 3113 3111\nf 35 36 3115\nf 35 47 48\nf 35 48 36\nf 35 3115 3113\nf 36 48 3144\nf 36 3129 3115\nf 36 3144 3129\nf 37 49 50\nf 37 50 38\nf 37 3126 3127\nf 37 3127 3142\nf 37 3142 49\nf 38 50 51\nf 38 51 39\nf 39 51 52\nf 39 52 40\nf 40 52 53\nf 40 53 41\nf 41 53 54\nf 41 54 42\nf 42 54 55\nf 42 55 43\nf 43 55 56\nf 43 56 44\nf 44 56 57\nf 44 57 45\nf 45 57 58\nf 45 58 46\nf 46 58 59\nf 46 59 47\nf 47 59 60\nf 47 60 48\nf 48 60 3163\nf 48 3163 3144\nf 49 63 64\nf 49 64 50\nf 49 3142 3161\nf 49 3161 63\nf 50 64 65\nf 50 65 51\nf 51 65 66\nf 51 66 52\nf 52 66 67\nf 52 67 53\nf 53 67 68\nf 53 68 54\nf 54 68 69\nf 54 69 55\nf 55 69 70\nf 55 70 56\nf 56 70 71\nf 56 71 57\nf 57 71 72\nf 57 72 58\nf 58 72 73\nf 58 73 59\nf 59 73 74\nf 59 74 60\nf 60 74 3184\nf 60 3184 3163\nf 61 3150 3168\nf 61 3168 3171\nf 61 3170 3150\nf 61 3171 3170\nf 62 75 3192\nf 62 3153 3172\nf 62 3172 75\nf 62 3174 3153\nf 62 3192 3174\nf 63 76 77\nf 63 77 64\nf 63 3161 3182\nf 63 3182 76\nf 64 77 78\nf 64 78 65\nf 65 78 79\nf 65 79 66\nf 66 79 80\nf 66 80 67\nf 67 80 81\nf 67 81 68\nf 68 81 82\nf 68 82 69\nf 69 82 83\nf 69 83 70\nf 70 83 84\nf 70 84 71\nf 71 84 85\nf 71 85 72\nf 72 85 86\nf 72 86 73\nf 73 86 87\nf 73 87 74\nf 74 87 3202\nf 74 3202 3184\nf 75 88 3211\nf 75 3172 3190\nf 75 3190 88\nf 75 3211 3192\nf 76 89 90\nf 76 90 77\nf 76 3182 3200\nf 76 3200 89\nf 77 90 91\nf 77 91 78\nf 78 91 92\nf 78 92 79\nf 79 92 93\nf 79 93 80\nf 80 93 94\nf 80 94 81\nf 81 94 95\nf 81 95 82\nf 82 95 96\nf 82 96 83\nf 83 96 97\nf 83 97 84\nf 84 97 98\nf 84 98 85\nf 85 98 99\nf 85 99 86\nf 86 99 100\nf 86 100 87\nf 87 100 3221\nf 87 3221 3202\nf 88 101 102\nf 88 102 3228\nf 88 3190 3208\nf 88 3208 101\nf 88 3228 3211\nf 89 103 104\nf 89 104 90\nf 89 3200 3219\nf 89 3219 103\nf 90 104 105\nf 90 105 91\nf 91 105 106\nf 91 106 92\nf 92 106 107\nf 92 107 93\nf 93 107 108\nf 93 108 94\nf 94 108 109\nf 94 109 95\nf 95 109 110\nf 95 110 96\nf 96 110 111\nf 96 111 97\nf 97 111 112\nf 97 112 98\nf 98 112 113\nf 98 113 99\nf 99 113 114\nf 99 114 100\nf 100 114 3241\nf 100 3241 3221\nf 101 115 116\nf 101 116 102\nf 101 3208 3209\nf 101 3209 3226\nf 101 3226 115\nf 102 116 117\nf 102 117 3229\nf 102 3229 3228\nf 103 119 120\nf 103 120 121\nf 103 121 104\nf 103 3219 3238\nf 103 3238 119\nf 104 121 122\nf 104 122 105\nf 105 122 123\nf 105 123 106\nf 106 123 124\nf 106 124 107\nf 107 124 125\nf 107 125 108\nf 108 125 126\nf 108 126 109\nf 109 126 127\nf 109 127 110\nf 110 127 128\nf 110 128 111\nf 111 128 129\nf 111 129 112\nf 112 129 130\nf 112 130 113\nf 113 130 131\nf 113 131 114\nf 114 131 3258\nf 114 3258 3241\nf 115 132 116\nf 115 3226 3246\nf 115 3246 3248\nf 115 3248 132\nf 116 132 133\nf 116 133 117\nf 117 118 3231\nf 117 133 134\nf 117 134 118\nf 117 3231 3229\nf 118 134 135\nf 118 135 3250\nf 118 3249 3231\nf 118 3250 3249\nf 119 136 137\nf 119 137 120\nf 119 3238 3239\nf 119 3239 3256\nf 119 3256 136\nf 120 137 138\nf 120 138 121\nf 121 138 139\nf 121 139 122\nf 122 139 140\nf 122 140 123\nf 123 140 141\nf 123 141 124\nf 124 141 142\nf 124 142 125\nf 125 142 143\nf 125 143 126\nf 126 143 144\nf 126 144 127\nf 127 144 145\nf 127 145 128\nf 128 145 146\nf 128 146 129\nf 129 146 147\nf 129 147 130\nf 130 147 148\nf 130 148 131\nf 131 148 3275\nf 131 3275 3258\nf 132 149 150\nf 132 150 133\nf 132 3248 3264\nf 132 3264 149\nf 133 150 151\nf 133 151 134\nf 134 151 152\nf 134 152 135\nf 135 152 153\nf 135 153 3267\nf 135 3266 3250\nf 135 3267 3266\nf 136 154 137\nf 136 3256 3272\nf 136 3272 3274\nf 136 3274 154\nf 137 154 155\nf 137 155 138\nf 138 155 156\nf 138 156 139\nf 139 156 157\nf 139 157 140\nf 140 157 158\nf 140 158 141\nf 141 158 159\nf 141 159 142\nf 142 159 160\nf 142 160 143\nf 143 160 161\nf 143 161 144\nf 144 161 162\nf 144 162 145\nf 145 162 163\nf 145 163 146\nf 146 163 164\nf 146 164 147\nf 147 164 165\nf 147 165 148\nf 148 165 3291\nf 148 3291 3275\nf 149 166 167\nf 149 167 150\nf 149 3264 3281\nf 149 3281 166\nf 150 167 168\nf 150 168 151\nf 151 168 169\nf 151 169 152\nf 152 169 170\nf 152 170 153\nf 153 170 3300\nf 153 3283 3267\nf 153 3300 3283\nf 154 171 172\nf 154 172 173\nf 154 173 155\nf 154 3274 3288\nf 154 3288 171\nf 155 173 174\nf 155 174 156\nf 156 174 175\nf 156 175 157\nf 157 175 176\nf 157 176 158\nf 158 176 177\nf 158 177 159\nf 159 177 178\nf 159 178 160\nf 160 178 179\nf 160 179 161\nf 161 179 180\nf 161 180 162\nf 162 180 181\nf 162 181 163\nf 163 181 182\nf 163 182 164\nf 164 182 183\nf 164 183 165\nf 165 183 3307\nf 165 3307 3291\nf 166 184 185\nf 166 185 186\nf 166 186 167\nf 166 3281 3297\nf 166 3297 184\nf 167 186 187\nf 167 187 168\nf 168 187 188\nf 168 188 169\nf 169 188 189\nf 169 189 170\nf 170 189 190\nf 170 190 3301\nf 170 3301 3300\nf 171 191 192\nf 171 192 172\nf 171 3288 3289\nf 171 3289 3305\nf 171 3305 191\nf 172 192 193\nf 172 193 173\nf 173 193 194\nf 173 194 174\nf 174 194 195\nf 174 195 175\nf 175 195 196\nf 175 196 176\nf 176 196 197\nf 176 197 177\nf 177 197 198\nf 177 198 178\nf 178 198 199\nf 178 199 179\nf 179 199 200\nf 179 200 180\nf 180 200 201\nf 180 201 181\nf 181 201 202\nf 181 202 182\nf 182 202 203\nf 182 203 183\nf 183 203 204\nf 183 204 3308\nf 183 3308 3307\nf 184 205 206\nf 184 206 185\nf 184 3297 3298\nf 184 3298 3313\nf 184 3313 205\nf 185 206 207\nf 185 207 186\nf 186 207 208\nf 186 208 187\nf 187 208 209\nf 187 209 188\nf 188 209 210\nf 188 210 189\nf 189 210 211\nf 189 211 190\nf 190 211 3326\nf 190 3315 3301\nf 190 3326 3315\nf 191 212 213\nf 191 213 192\nf 191 3305 3318\nf 191 3318 212\nf 192 213 214\nf 192 214 193\nf 193 214 215\nf 193 215 194\nf 194 215 216\nf 194 216 195\nf 195 216 217\nf 195 217 196\nf 196 217 218\nf 196 218 197\nf 197 218 219\nf 197 219 198\nf 198 219 220\nf 198 220 199\nf 199 220 221\nf 199 221 200\nf 200 221 222\nf 200 222 201\nf 201 222 223\nf 201 223 202\nf 202 223 224\nf 202 224 203\nf 203 224 225\nf 203 225 204\nf 204 225 3331\nf 204 3320 3308\nf 204 3331 3320\nf 205 226 227\nf 205 227 206\nf 205 3313 3324\nf 205 3324 226\nf 206 227 228\nf 206 228 207\nf 207 228 229\nf 207 229 208\nf 208 229 230\nf 208 230 209\nf 209 230 231\nf 209 231 210\nf 210 231 232\nf 210 232 211\nf 211 232 3338\nf 211 3338 3326\nf 212 233 234\nf 212 234 213\nf 212 3318 3329\nf 212 3329 233\nf 213 234 235\nf 213 235 214\nf 214 235 236\nf 214 236 215\nf 215 236 237\nf 215 237 216\nf 216 237 238\nf 216 238 217\nf 217 238 239\nf 217 239 218\nf 218 239 240\nf 218 240 219\nf 219 240 241\nf 219 241 220\nf 220 241 242\nf 220 242 221\nf 221 242 243\nf 221 243 222\nf 222 243 244\nf 222 244 223\nf 223 244 245\nf 223 245 224\nf 224 245 246\nf 224 246 225\nf 225 246 3343\nf 225 3343 3331\nf 226 247 248\nf 226 248 249\nf 226 249 227\nf 226 3324 3335\nf 226 3335 247\nf 227 249 250\nf 227 250 228\nf 228 250 251\nf 228 251 229\nf 229 251 252\nf 229 252 230\nf 230 252 253\nf 230 253 231\nf 231 253 254\nf 231 254 232\nf 232 254 3348\nf 232 3348 3338\nf 233 255 256\nf 233 256 234\nf 233 3329 3341\nf 233 3341 255\nf 234 256 257\nf 234 257 235\nf 235 257 258\nf 235 258 236\nf 236 258 259\nf 236 259 237\nf 237 259 260\nf 237 260 238\nf 238 260 261\nf 238 261 239\nf 239 261 262\nf 239 262 240\nf 240 262 263\nf 240 263 241\nf 241 263 264\nf 241 264 242\nf 242 264 265\nf 242 265 243\nf 243 265 266\nf 243 266 244\nf 244 266 267\nf 244 267 245\nf 245 267 268\nf 245 268 246\nf 246 268 3354\nf 246 3354 3343\nf 247 269 270\nf 247 270 248\nf 247 3335 3336\nf 247 3336 3346\nf 247 3346 269\nf 248 270 271\nf 248 271 249\nf 249 271 272\nf 249 272 250\nf 250 272 273\nf 250 273 251\nf 251 273 274\nf 251 274 252\nf 252 274 275\nf 252 275 253\nf 253 275 276\nf 253 276 254\nf 254 276 3360\nf 254 3360 3348\nf 255 277 278\nf 255 278 256\nf 255 3341 3352\nf 255 3352 277\nf 256 278 279\nf 256 279 257\nf 257 279 280\nf 257 280 258\nf 258 280 281\nf 258 281 259\nf 259 281 282\nf 259 282 260\nf 260 282 283\nf 260 283 261\nf 261 283 284\nf 261 284 262\nf 262 284 285\nf 262 285 263\nf 263 285 286\nf 263 286 264\nf 264 286 287\nf 264 287 265\nf 265 287 288\nf 265 288 266\nf 266 288 289\nf 266 289 267\nf 267 289 290\nf 267 290 268\nf 268 290 3367\nf 268 3367 3354\nf 269 291 292\nf 269 292 293\nf 269 293 270\nf 269 3346 3357\nf 269 3357 291\nf 270 293 294\nf 270 294 271\nf 271 294 295\nf 271 295 272\nf 272 295 296\nf 272 296 273\nf 273 296 297\nf 273 297 274\nf 274 297 298\nf 274 298 275\nf 275 298 299\nf 275 299 276\nf 276 299 3372\nf 276 3372 3360\nf 277 300 278\nf 277 3352 3364\nf 277 3364 3366\nf 277 3366 300\nf 278 300 301\nf 278 301 279\nf 279 301 302\nf 279 302 280\nf 280 302 303\nf 280 303 281\nf 281 303 304\nf 281 304 282\nf 282 304 305\nf 282 305 283\nf 283 305 306\nf 283 306 284\nf 284 306 307\nf 284 307 285\nf 285 307 308\nf 285 308 286\nf 286 308 309\nf 286 309 287\nf 287 309 310\nf 287 310 288\nf 288 310 311\nf 288 311 289\nf 289 311 290\nf 290 311 3379\nf 290 3368 3367\nf 290 3379 3368\nf 291 312 313\nf 291 313 292\nf 291 3357 3358\nf 291 3358 3370\nf 291 3370 312\nf 292 313 314\nf 292 314 293\nf 293 314 315\nf 293 315 294\nf 294 315 316\nf 294 316 295\nf 295 316 317\nf 295 317 296\nf 296 317 318\nf 296 318 297\nf 297 318 319\nf 297 319 298\nf 298 319 320\nf 298 320 299\nf 299 320 3384\nf 299 3384 3372\nf 300 321 322\nf 300 322 301\nf 300 3366 3377\nf 300 3377 321\nf 301 322 323\nf 301 323 302\nf 302 323 324\nf 302 324 303\nf 303 324 325\nf 303 325 304\nf 304 325 326\nf 304 326 305\nf 305 326 327\nf 305 327 306\nf 306 327 328\nf 306 328 307\nf 307 328 329\nf 307 329 308\nf 308 329 330\nf 308 330 309\nf 309 330 331\nf 309 331 310\nf 310 331 332\nf 310 332 311\nf 311 332 3390\nf 311 3390 3379\nf 312 333 334\nf 312 334 313\nf 312 3370 3382\nf 312 3382 333\nf 313 334 335\nf 313 335 314\nf 314 335 336\nf 314 336 315\nf 315 336 337\nf 315 337 316\nf 316 337 338\nf 316 338 317\nf 317 338 339\nf 317 339 318\nf 318 339 340\nf 318 340 319\nf 319 340 341\nf 319 341 320\nf 320 341 3395\nf 320 3395 3384\nf 321 342 343\nf 321 343 322\nf 321 3377 3388\nf 321 3388 342\nf 322 343 344\nf 322 344 323\nf 323 344 345\nf 323 345 324\nf 324 345 346\nf 324 346 325\nf 325 346 347\nf 325 347 326\nf 326 347 348\nf 326 348 327\nf 327 348 349\nf 327 349 328\nf 328 349 350\nf 328 350 329\nf 329 350 351\nf 329 351 330\nf 330 351 352\nf 330 352 331\nf 331 352 353\nf 331 353 332\nf 332 353 3402\nf 332 3402 3390\nf 333 354 355\nf 333 355 334\nf 333 3382 3393\nf 333 3393 354\nf 334 355 356\nf 334 356 335\nf 335 356 357\nf 335 357 336\nf 336 357 358\nf 336 358 337\nf 337 358 359\nf 337 359 338\nf 338 359 360\nf 338 360 339\nf 339 360 361\nf 339 361 340\nf 340 361 341\nf 341 361 3408\nf 341 3396 3395\nf 341 3408 3396\nf 342 362 363\nf 342 363 343\nf 342 3388 3400\nf 342 3400 362\nf 343 363 364\nf 343 364 344\nf 344 364 365\nf 344 365 345\nf 345 365 366\nf 345 366 346\nf 346 366 367\nf 346 367 347\nf 347 367 368\nf 347 368 348\nf 348 368 369\nf 348 369 349\nf 349 369 370\nf 349 370 350\nf 350 370 371\nf 350 371 351\nf 351 371 372\nf 351 372 352\nf 352 372 373\nf 352 373 353\nf 353 373 3415\nf 353 3415 3402\nf 354 374 355\nf 354 3393 3405\nf 354 3405 3407\nf 354 3407 374\nf 355 374 375\nf 355 375 356\nf 356 375 376\nf 356 376 357\nf 357 376 377\nf 357 377 358\nf 358 377 378\nf 358 378 359\nf 359 378 379\nf 359 379 360\nf 360 379 380\nf 360 380 361\nf 361 380 3421\nf 361 3421 3408\nf 362 381 382\nf 362 382 363\nf 362 3400 3413\nf 362 3413 381\nf 363 382 383\nf 363 383 364\nf 364 383 384\nf 364 384 365\nf 365 384 385\nf 365 385 366\nf 366 385 386\nf 366 386 367\nf 367 386 387\nf 367 387 368\nf 368 387 388\nf 368 388 369\nf 369 388 389\nf 369 389 370\nf 370 389 390\nf 370 390 371\nf 371 390 391\nf 371 391 372\nf 372 391 392\nf 372 392 373\nf 373 392 3428\nf 373 3428 3415\nf 374 393 394\nf 374 394 375\nf 374 3407 3419\nf 374 3419 393\nf 375 394 395\nf 375 395 376\nf 376 395 396\nf 376 396 377\nf 377 396 397\nf 377 397 378\nf 378 397 398\nf 378 398 379\nf 379 398 399\nf 379 399 380\nf 380 399 3434\nf 380 3434 3421\nf 381 400 401\nf 381 401 382\nf 381 3413 3426\nf 381 3426 400\nf 382 401 402\nf 382 402 383\nf 383 402 403\nf 383 403 384\nf 384 403 404\nf 384 404 385\nf 385 404 405\nf 385 405 386\nf 386 405 406\nf 386 406 387\nf 387 406 407\nf 387 407 388\nf 388 407 408\nf 388 408 389\nf 389 408 409\nf 389 409 390\nf 390 409 410\nf 390 410 391\nf 391 410 411\nf 391 411 392\nf 392 411 3441\nf 392 3441 3428\nf 393 412 413\nf 393 413 394\nf 393 3419 3432\nf 393 3432 412\nf 394 413 414\nf 394 414 395\nf 395 414 415\nf 395 415 396\nf 396 415 416\nf 396 416 397\nf 397 416 417\nf 397 417 398\nf 398 417 418\nf 398 418 399\nf 399 418 3447\nf 399 3447 3434\nf 400 419 420\nf 400 420 401\nf 400 3426 3439\nf 400 3439 419\nf 401 420 421\nf 401 421 402\nf 402 421 422\nf 402 422 403\nf 403 422 423\nf 403 423 404\nf 404 423 424\nf 404 424 405\nf 405 424 425\nf 405 425 406\nf 406 425 426\nf 406 426 407\nf 407 426 427\nf 407 427 408\nf 408 427 428\nf 408 428 409\nf 409 428 429\nf 409 429 410\nf 410 429 430\nf 410 430 411\nf 411 430 3465\nf 411 3465 3441\nf 412 431 432\nf 412 432 413\nf 412 3432 3445\nf 412 3445 431\nf 413 432 433\nf 413 433 414\nf 414 433 434\nf 414 434 415\nf 415 434 435\nf 415 435 416\nf 416 435 436\nf 416 436 417\nf 417 436 437\nf 417 437 418\nf 418 437 438\nf 418 438 3448\nf 418 3448 3447\nf 419 439 440\nf 419 440 420\nf 419 3439 3463\nf 419 3463 439\nf 420 440 441\nf 420 441 421\nf 421 441 442\nf 421 442 422\nf 422 442 443\nf 422 443 423\nf 423 443 444\nf 423 444 424\nf 424 444 445\nf 424 445 425\nf 425 445 446\nf 425 446 426\nf 426 446 447\nf 426 447 427\nf 427 447 448\nf 427 448 428\nf 428 448 449\nf 428 449 429\nf 429 449 450\nf 429 450 430\nf 430 450 3540\nf 430 3540 3465\nf 431 451 452\nf 431 452 453\nf 431 453 432\nf 431 3445 3469\nf 431 3469 451\nf 432 453 454\nf 432 454 433\nf 433 454 455\nf 433 455 434\nf 434 455 456\nf 434 456 435\nf 435 456 457\nf 435 457 436\nf 436 457 458\nf 436 458 437\nf 437 458 459\nf 437 459 438\nf 438 459 3546\nf 438 3472 3448\nf 438 3546 3472\nf 439 460 461\nf 439 461 440\nf 439 3463 3538\nf 439 3538 460\nf 440 461 462\nf 440 462 441\nf 441 462 463\nf 441 463 442\nf 442 463 464\nf 442 464 443\nf 443 464 465\nf 443 465 444\nf 444 465 466\nf 444 466 445\nf 445 466 467\nf 445 467 446\nf 446 467 468\nf 446 468 447\nf 447 468 469\nf 447 469 448\nf 448 469 470\nf 448 470 449\nf 449 470 471\nf 449 471 450\nf 450 471 3672\nf 450 3672 3540\nf 451 472 473\nf 451 473 474\nf 451 474 452\nf 451 3469 3470\nf 451 3470 3543\nf 451 3543 472\nf 452 474 475\nf 452 475 453\nf 453 475 476\nf 453 476 454\nf 454 476 477\nf 454 477 455\nf 455 477 478\nf 455 478 456\nf 456 478 479\nf 456 479 457\nf 457 479 480\nf 457 480 458\nf 458 480 481\nf 458 481 459\nf 459 481 3676\nf 459 3676 3546\nf 460 522 523\nf 460 523 524\nf 460 524 461\nf 460 3538 3669\nf 460 3669 522\nf 461 524 525\nf 461 525 462\nf 462 525 526\nf 462 526 463\nf 463 526 527\nf 463 527 464\nf 464 527 528\nf 464 528 465\nf 465 528 529\nf 465 529 466\nf 466 529 530\nf 466 530 467\nf 467 530 531\nf 467 531 468\nf 468 531 532\nf 468 532 469\nf 469 532 533\nf 469 533 470\nf 470 533 534\nf 470 534 471\nf 471 534 3749\nf 471 3749 3672\nf 472 535 536\nf 472 536 473\nf 472 3543 3544\nf 472 3544 3674\nf 472 3674 535\nf 473 536 537\nf 473 537 474\nf 474 537 538\nf 474 538 475\nf 475 538 539\nf 475 539 476\nf 476 539 540\nf 476 540 477\nf 477 540 541\nf 477 541 478\nf 478 541 542\nf 478 542 479\nf 479 542 543\nf 479 543 480\nf 480 543 544\nf 480 544 481\nf 481 544 545\nf 481 545 3677\nf 481 3677 3676\nf 482 483 3566\nf 482 553 554\nf 482 554 555\nf 482 555 483\nf 482 3564 3701\nf 482 3566 3564\nf 482 3701 553\nf 483 484 3568\nf 483 555 556\nf 483 556 484\nf 483 3568 3566\nf 484 485 3570\nf 484 556 557\nf 484 557 485\nf 484 3570 3568\nf 485 486 3572\nf 485 557 558\nf 485 558 486\nf 485 3572 3570\nf 486 487 3574\nf 486 558 559\nf 486 559 487\nf 486 3574 3572\nf 487 488 3576\nf 487 559 560\nf 487 560 488\nf 487 3576 3574\nf 488 489 3578\nf 488 560 561\nf 488 561 489\nf 488 3578 3576\nf 489 490 3580\nf 489 561 562\nf 489 562 490\nf 489 3580 3578\nf 490 491 3582\nf 490 562 563\nf 490 563 491\nf 490 3582 3580\nf 491 492 3584\nf 491 563 564\nf 491 564 492\nf 491 3584 3582\nf 492 493 3586\nf 492 564 565\nf 492 565 493\nf 492 3586 3584\nf 493 494 3588\nf 493 565 566\nf 493 566 494\nf 493 3588 3586\nf 494 495 3590\nf 494 566 567\nf 494 567 495\nf 494 3590 3588\nf 495 496 3592\nf 495 567 568\nf 495 568 496\nf 495 3592 3590\nf 496 497 3594\nf 496 568 569\nf 496 569 497\nf 496 3594 3592\nf 497 498 3596\nf 497 569 570\nf 497 570 498\nf 497 3596 3594\nf 498 499 3598\nf 498 570 571\nf 498 571 499\nf 498 3598 3596\nf 499 500 3600\nf 499 571 572\nf 499 572 500\nf 499 3600 3598\nf 500 572 573\nf 500 573 3705\nf 500 3704 3600\nf 500 3705 3704\nf 501 502 3624\nf 501 585 586\nf 501 586 587\nf 501 587 502\nf 501 3622 3736\nf 501 3624 3622\nf 501 3736 585\nf 502 503 3626\nf 502 587 588\nf 502 588 503\nf 502 3626 3624\nf 503 504 3628\nf 503 588 589\nf 503 589 504\nf 503 3628 3626\nf 504 505 3630\nf 504 589 590\nf 504 590 505\nf 504 3630 3628\nf 505 506 3632\nf 505 590 591\nf 505 591 506\nf 505 3632 3630\nf 506 507 3634\nf 506 591 592\nf 506 592 507\nf 506 3634 3632\nf 507 508 3636\nf 507 592 593\nf 507 593 508\nf 507 3636 3634\nf 508 509 3638\nf 508 593 594\nf 508 594 509\nf 508 3638 3636\nf 509 510 3640\nf 509 594 595\nf 509 595 510\nf 509 3640 3638\nf 510 511 3642\nf 510 595 596\nf 510 596 511\nf 510 3642 3640\nf 511 512 3644\nf 511 596 597\nf 511 597 512\nf 511 3644 3642\nf 512 513 3646\nf 512 597 598\nf 512 598 513\nf 512 3646 3644\nf 513 514 3648\nf 513 598 599\nf 513 599 514\nf 513 3648 3646\nf 514 515 3650\nf 514 599 600\nf 514 600 515\nf 514 3650 3648\nf 515 516 3652\nf 515 600 601\nf 515 601 516\nf 515 3652 3650\nf 516 517 3654\nf 516 601 602\nf 516 602 517\nf 516 3654 3652\nf 517 518 3656\nf 517 602 603\nf 517 603 518\nf 517 3656 3654\nf 518 519 3658\nf 518 603 604\nf 518 604 519\nf 518 3658 3656\nf 519 520 3660\nf 519 604 605\nf 519 605 520\nf 519 3660 3658\nf 520 521 3662\nf 520 605 606\nf 520 606 521\nf 520 3662 3660\nf 521 606 607\nf 521 607 3740\nf 521 3739 3662\nf 521 3740 3739\nf 522 609 610\nf 522 610 611\nf 522 611 523\nf 522 3669 3670\nf 522 3670 3746\nf 522 3746 609\nf 523 611 612\nf 523 612 524\nf 524 612 613\nf 524 613 525\nf 525 613 614\nf 525 614 526\nf 526 614 615\nf 526 615 527\nf 527 615 616\nf 527 616 528\nf 528 616 617\nf 528 617 529\nf 529 617 618\nf 529 618 530\nf 530 618 619\nf 530 619 531\nf 531 619 620\nf 531 620 532\nf 532 620 621\nf 532 621 533\nf 533 621 622\nf 533 622 534\nf 534 622 3786\nf 534 3786 3749\nf 535 623 624\nf 535 624 536\nf 535 3674 3751\nf 535 3751 623\nf 536 624 625\nf 536 625 537\nf 537 625 626\nf 537 626 538\nf 538 626 627\nf 538 627 539\nf 539 627 628\nf 539 628 540\nf 540 628 629\nf 540 629 541\nf 541 629 630\nf 541 630 542\nf 542 630 631\nf 542 631 543\nf 543 631 632\nf 543 632 544\nf 544 632 633\nf 544 633 545\nf 545 633 3790\nf 545 3753 3677\nf 545 3790 3753\nf 546 547 3689\nf 546 634 635\nf 546 635 636\nf 546 636 547\nf 546 3687 3761\nf 546 3689 3687\nf 546 3761 634\nf 547 548 3691\nf 547 636 637\nf 547 637 548\nf 547 3691 3689\nf 548 549 3693\nf 548 637 638\nf 548 638 549\nf 548 3693 3691\nf 549 550 3695\nf 549 638 639\nf 549 639 550\nf 549 3695 3693\nf 550 551 3697\nf 550 639 640\nf 550 640 551\nf 550 3697 3695\nf 551 552 3699\nf 551 640 641\nf 551 641 552\nf 551 3699 3697\nf 552 553 3702\nf 552 641 642\nf 552 642 553\nf 552 3702 3699\nf 553 642 643\nf 553 643 554\nf 553 3701 3702\nf 554 643 644\nf 554 644 555\nf 555 644 645\nf 555 645 556\nf 556 645 646\nf 556 646 557\nf 557 646 647\nf 557 647 558\nf 558 647 648\nf 558 648 559\nf 559 648 649\nf 559 649 560\nf 560 649 650\nf 560 650 561\nf 561 650 651\nf 561 651 562\nf 562 651 652\nf 562 652 563\nf 563 652 653\nf 563 653 564\nf 564 653 654\nf 564 654 565\nf 565 654 655\nf 565 655 566\nf 566 655 656\nf 566 656 567\nf 567 656 657\nf 567 657 568\nf 568 657 658\nf 568 658 569\nf 569 658 659\nf 569 659 570\nf 570 659 660\nf 570 660 571\nf 571 660 661\nf 571 661 572\nf 572 661 662\nf 572 662 573\nf 573 574 3707\nf 573 662 663\nf 573 663 574\nf 573 3707 3705\nf 574 575 3709\nf 574 663 664\nf 574 664 575\nf 574 3709 3707\nf 575 576 3711\nf 575 664 665\nf 575 665 576\nf 575 3711 3709\nf 576 577 3713\nf 576 665 666\nf 576 666 577\nf 576 3713 3711\nf 577 578 3715\nf 577 666 667\nf 577 667 578\nf 577 3715 3713\nf 578 579 3717\nf 578 667 668\nf 578 668 579\nf 578 3717 3715\nf 579 580 3719\nf 579 668 669\nf 579 669 580\nf 579 3719 3717\nf 580 669 670\nf 580 670 3765\nf 580 3764 3719\nf 580 3765 3764\nf 581 582 3730\nf 581 676 677\nf 581 677 678\nf 581 678 582\nf 581 3728 3777\nf 581 3730 3728\nf 581 3777 676\nf 582 583 3732\nf 582 678 679\nf 582 679 583\nf 582 3732 3730\nf 583 584 3734\nf 583 679 680\nf 583 680 584\nf 583 3734 3732\nf 584 585 3737\nf 584 680 681\nf 584 681 585\nf 584 3737 3734\nf 585 681 682\nf 585 682 586\nf 585 3736 3737\nf 586 682 683\nf 586 683 587\nf 587 683 684\nf 587 684 588\nf 588 684 685\nf 588 685 589\nf 589 685 686\nf 589 686 590\nf 590 686 687\nf 590 687 591\nf 591 687 688\nf 591 688 592\nf 592 688 689\nf 592 689 593\nf 593 689 690\nf 593 690 594\nf 594 690 691\nf 594 691 595\nf 595 691 692\nf 595 692 596\nf 596 692 693\nf 596 693 597\nf 597 693 694\nf 597 694 598\nf 598 694 695\nf 598 695 599\nf 599 695 696\nf 599 696 600\nf 600 696 697\nf 600 697 601\nf 601 697 698\nf 601 698 602\nf 602 698 699\nf 602 699 603\nf 603 699 700\nf 603 700 604\nf 604 700 701\nf 604 701 605\nf 605 701 702\nf 605 702 606\nf 606 702 703\nf 606 703 607\nf 607 608 3742\nf 607 703 704\nf 607 704 608\nf 607 3742 3740\nf 608 704 705\nf 608 705 3781\nf 608 3780 3742\nf 608 3781 3780\nf 609 706 707\nf 609 707 708\nf 609 708 610\nf 609 3746 3747\nf 609 3747 3783\nf 609 3783 706\nf 610 708 709\nf 610 709 611\nf 611 709 710\nf 611 710 612\nf 612 710 711\nf 612 711 613\nf 613 711 712\nf 613 712 614\nf 614 712 713\nf 614 713 615\nf 615 713 714\nf 615 714 616\nf 616 714 715\nf 616 715 617\nf 617 715 716\nf 617 716 618\nf 618 716 717\nf 618 717 619\nf 619 717 718\nf 619 718 620\nf 620 718 719\nf 620 719 621\nf 621 719 720\nf 621 720 622\nf 622 720 3817\nf 622 3817 3786\nf 623 721 722\nf 623 722 624\nf 623 3751 3788\nf 623 3788 721\nf 624 722 723\nf 624 723 625\nf 625 723 724\nf 625 724 626\nf 626 724 725\nf 626 725 627\nf 627 725 726\nf 627 726 628\nf 628 726 727\nf 628 727 629\nf 629 727 728\nf 629 728 630\nf 630 728 729\nf 630 729 631\nf 631 729 730\nf 631 730 632\nf 632 730 731\nf 632 731 633\nf 633 731 3821\nf 633 3821 3790\nf 634 3761 3762\nf 634 3762 3797\nf 634 3797 3799\nf 634 3799 635\nf 635 3799 3800\nf 635 3800 636\nf 636 3800 3801\nf 636 3801 637\nf 637 3801 3802\nf 637 3802 638\nf 638 732 639\nf 638 3802 3803\nf 638 3803 732\nf 639 732 640\nf 640 732 3835\nf 640 3804 641\nf 640 3835 3804\nf 641 733 642\nf 641 3804 3805\nf 641 3805 733\nf 642 733 734\nf 642 734 643\nf 643 734 735\nf 643 735 644\nf 644 735 736\nf 644 736 645\nf 645 736 737\nf 645 737 646\nf 646 737 738\nf 646 738 647\nf 647 738 739\nf 647 739 648\nf 648 739 740\nf 648 740 649\nf 649 740 741\nf 649 741 650\nf 650 741 742\nf 650 742 651\nf 651 742 743\nf 651 743 652\nf 652 743 744\nf 652 744 653\nf 653 744 745\nf 653 745 654\nf 654 745 746\nf 654 746 655\nf 655 746 747\nf 655 747 656\nf 656 747 748\nf 656 748 657\nf 657 748 749\nf 657 749 658\nf 658 749 750\nf 658 750 659\nf 659 750 751\nf 659 751 660\nf 660 751 752\nf 660 752 661\nf 661 752 753\nf 661 753 662\nf 662 753 754\nf 662 754 663\nf 663 754 755\nf 663 755 664\nf 664 755 756\nf 664 756 665\nf 665 756 757\nf 665 757 666\nf 666 757 758\nf 666 758 667\nf 667 758 759\nf 667 759 668\nf 668 759 669\nf 669 759 3849\nf 669 3806 670\nf 669 3849 3806\nf 670 671 3767\nf 670 3767 3765\nf 670 3806 3807\nf 670 3807 671\nf 671 672 3769\nf 671 3769 3767\nf 671 3807 3808\nf 671 3808 672\nf 672 673 3771\nf 672 3771 3769\nf 672 3808 3809\nf 672 3809 673\nf 673 674 3773\nf 673 3773 3771\nf 673 3809 3810\nf 673 3810 674\nf 674 675 3775\nf 674 3775 3773\nf 674 3810 3811\nf 674 3811 675\nf 675 676 3778\nf 675 3778 3775\nf 675 3811 3812\nf 675 3812 676\nf 676 3777 3778\nf 676 3812 3813\nf 676 3813 677\nf 677 3813 3814\nf 677 3814 678\nf 678 760 679\nf 678 3814 3815\nf 678 3815 760\nf 679 760 761\nf 679 761 680\nf 680 761 762\nf 680 762 681\nf 681 762 763\nf 681 763 682\nf 682 763 764\nf 682 764 683\nf 683 764 765\nf 683 765 684\nf 684 765 766\nf 684 766 685\nf 685 766 767\nf 685 767 686\nf 686 767 768\nf 686 768 687\nf 687 768 769\nf 687 769 688\nf 688 769 770\nf 688 770 689\nf 689 770 771\nf 689 771 690\nf 690 771 772\nf 690 772 691\nf 691 772 773\nf 691 773 692\nf 692 773 774\nf 692 774 693\nf 693 774 775\nf 693 775 694\nf 694 775 776\nf 694 776 695\nf 695 776 777\nf 695 777 696\nf 696 777 778\nf 696 778 697\nf 697 778 779\nf 697 779 698\nf 698 779 780\nf 698 780 699\nf 699 780 781\nf 699 781 700\nf 700 781 782\nf 700 782 701\nf 701 782 783\nf 701 783 702\nf 702 783 784\nf 702 784 703\nf 703 784 785\nf 703 785 704\nf 704 785 705\nf 705 706 3784\nf 705 785 3884\nf 705 786 706\nf 705 3784 3781\nf 705 3816 786\nf 705 3884 3816\nf 706 786 787\nf 706 787 707\nf 706 3783 3784\nf 707 787 788\nf 707 788 708\nf 708 788 789\nf 708 789 709\nf 709 789 790\nf 709 790 710\nf 710 790 791\nf 710 791 711\nf 711 791 792\nf 711 792 712\nf 712 792 793\nf 712 793 713\nf 713 793 794\nf 713 794 714\nf 714 794 795\nf 714 795 715\nf 715 795 796\nf 715 796 716\nf 716 796 797\nf 716 797 717\nf 717 797 798\nf 717 798 718\nf 718 798 799\nf 718 799 719\nf 719 799 800\nf 719 800 720\nf 720 800 3889\nf 720 3889 3817\nf 721 801 802\nf 721 802 722\nf 721 3788 3819\nf 721 3819 801\nf 722 802 803\nf 722 803 723\nf 723 803 804\nf 723 804 724\nf 724 804 805\nf 724 805 725\nf 725 805 806\nf 725 806 726\nf 726 806 807\nf 726 807 727\nf 727 807 808\nf 727 808 728\nf 728 808 809\nf 728 809 729\nf 729 809 810\nf 729 810 730\nf 730 810 811\nf 730 811 731\nf 731 811 3893\nf 731 3893 3821\nf 732 3803 3833\nf 732 3833 3836\nf 732 3836 3835\nf 733 3805 3838\nf 733 3838 3840\nf 733 3840 734\nf 734 3840 3841\nf 734 3841 735\nf 735 3841 3842\nf 735 3842 736\nf 736 3842 3843\nf 736 3843 737\nf 737 812 738\nf 737 3843 3844\nf 737 3844 812\nf 738 812 813\nf 738 813 739\nf 739 813 814\nf 739 814 740\nf 740 814 815\nf 740 815 741\nf 741 815 816\nf 741 816 742\nf 742 816 817\nf 742 817 743\nf 743 817 818\nf 743 818 744\nf 744 818 819\nf 744 819 745\nf 745 819 820\nf 745 820 746\nf 746 820 821\nf 746 821 747\nf 747 821 822\nf 747 822 748\nf 748 822 823\nf 748 823 749\nf 749 823 824\nf 749 824 750\nf 750 824 825\nf 750 825 751\nf 751 825 826\nf 751 826 752\nf 752 826 827\nf 752 827 753\nf 753 827 828\nf 753 828 754\nf 754 828 755\nf 755 828 3930\nf 755 3845 756\nf 755 3930 3845\nf 756 3845 3846\nf 756 3846 757\nf 757 3846 3847\nf 757 3847 758\nf 758 3847 3848\nf 758 3848 759\nf 759 3848 3850\nf 759 3850 3849\nf 760 3815 3860\nf 760 3860 3862\nf 760 3862 761\nf 761 3862 3863\nf 761 3863 762\nf 762 3863 3864\nf 762 3864 763\nf 763 3864 3865\nf 763 3865 764\nf 764 3865 3866\nf 764 3866 765\nf 765 3866 3867\nf 765 3867 766\nf 766 3867 3868\nf 766 3868 767\nf 767 3868 3869\nf 767 3869 768\nf 768 3869 3870\nf 768 3870 769\nf 769 3870 3871\nf 769 3871 770\nf 770 3871 3872\nf 770 3872 771\nf 771 3872 3873\nf 771 3873 772\nf 772 3873 3874\nf 772 3874 773\nf 773 3874 3875\nf 773 3875 774\nf 774 3875 3876\nf 774 3876 775\nf 775 3876 3877\nf 775 3877 776\nf 776 3877 3878\nf 776 3878 777\nf 777 3878 3879\nf 777 3879 778\nf 778 3879 3880\nf 778 3880 779\nf 779 829 780\nf 779 3880 3881\nf 779 3881 829\nf 780 829 830\nf 780 830 781\nf 781 830 831\nf 781 831 782\nf 782 831 783\nf 783 831 3970\nf 783 3882 784\nf 783 3970 3882\nf 784 3882 3883\nf 784 3883 785\nf 785 3883 3885\nf 785 3885 3884\nf 786 832 787\nf 786 3816 3886\nf 786 3886 3888\nf 786 3888 832\nf 787 832 833\nf 787 833 788\nf 788 833 834\nf 788 834 789\nf 789 834 835\nf 789 835 790\nf 790 835 836\nf 790 836 791\nf 791 836 837\nf 791 837 792\nf 792 837 838\nf 792 838 793\nf 793 838 839\nf 793 839 794\nf 794 839 840\nf 794 840 795\nf 795 840 841\nf 795 841 796\nf 796 841 842\nf 796 842 797\nf 797 842 843\nf 797 843 798\nf 798 843 844\nf 798 844 799\nf 799 844 845\nf 799 845 800\nf 800 845 3978\nf 800 3978 3889\nf 801 846 847\nf 801 847 802\nf 801 3819 3891\nf 801 3891 846\nf 802 847 848\nf 802 848 803\nf 803 848 849\nf 803 849 804\nf 804 849 850\nf 804 850 805\nf 805 850 851\nf 805 851 806\nf 806 851 852\nf 806 852 807\nf 807 852 853\nf 807 853 808\nf 808 853 854\nf 808 854 809\nf 809 854 855\nf 809 855 810\nf 810 855 856\nf 810 856 811\nf 811 856 3982\nf 811 3982 3893\nf 812 3844 3912\nf 812 3912 3914\nf 812 3914 813\nf 813 3914 3915\nf 813 3915 814\nf 814 3915 3916\nf 814 3916 815\nf 815 3916 3917\nf 815 3917 816\nf 816 3917 3918\nf 816 3918 817\nf 817 3918 3919\nf 817 3919 818\nf 818 3919 3920\nf 818 3920 819\nf 819 3920 3921\nf 819 3921 820\nf 820 3921 3922\nf 820 3922 821\nf 821 3922 3923\nf 821 3923 822\nf 822 3923 3924\nf 822 3924 823\nf 823 3924 3925\nf 823 3925 824\nf 824 3925 3926\nf 824 3926 825\nf 825 3926 3927\nf 825 3927 826\nf 826 3927 3928\nf 826 3928 827\nf 827 3928 3929\nf 827 3929 828\nf 828 3929 3931\nf 828 3931 3930\nf 829 3881 3966\nf 829 3966 3968\nf 829 3968 830\nf 830 3968 3969\nf 830 3969 831\nf 831 3969 3971\nf 831 3971 3970\nf 832 857 858\nf 832 858 833\nf 832 3888 3976\nf 832 3976 857\nf 833 858 859\nf 833 859 834\nf 834 859 860\nf 834 860 835\nf 835 860 861\nf 835 861 836\nf 836 861 862\nf 836 862 837\nf 837 862 863\nf 837 863 838\nf 838 863 864\nf 838 864 839\nf 839 864 865\nf 839 865 840\nf 840 865 866\nf 840 866 841\nf 841 866 867\nf 841 867 842\nf 842 867 868\nf 842 868 843\nf 843 868 869\nf 843 869 844\nf 844 869 870\nf 844 870 845\nf 845 870 4052\nf 845 4052 3978\nf 846 871 872\nf 846 872 847\nf 846 3891 3980\nf 846 3980 871\nf 847 872 873\nf 847 873 848\nf 848 873 874\nf 848 874 849\nf 849 874 875\nf 849 875 850\nf 850 875 876\nf 850 876 851\nf 851 876 877\nf 851 877 852\nf 852 877 878\nf 852 878 853\nf 853 878 879\nf 853 879 854\nf 854 879 880\nf 854 880 855\nf 855 880 856\nf 856 880 4056\nf 856 3983 3982\nf 856 4056 3983\nf 857 881 882\nf 857 882 858\nf 857 3976 4050\nf 857 4050 881\nf 858 882 883\nf 858 883 859\nf 859 883 884\nf 859 884 860\nf 860 884 885\nf 860 885 861\nf 861 885 886\nf 861 886 862\nf 862 886 887\nf 862 887 863\nf 863 887 888\nf 863 888 864\nf 864 888 889\nf 864 889 865\nf 865 889 890\nf 865 890 866\nf 866 890 891\nf 866 891 867\nf 867 891 892\nf 867 892 868\nf 868 892 893\nf 868 893 869\nf 869 893 894\nf 869 894 870\nf 870 894 4084\nf 870 4084 4052\nf 871 895 896\nf 871 896 872\nf 871 3980 4054\nf 871 4054 895\nf 872 896 897\nf 872 897 873\nf 873 897 898\nf 873 898 874\nf 874 898 899\nf 874 899 875\nf 875 899 900\nf 875 900 876\nf 876 900 901\nf 876 901 877\nf 877 901 902\nf 877 902 878\nf 878 902 903\nf 878 903 879\nf 879 903 904\nf 879 904 880\nf 880 904 4088\nf 880 4088 4056\nf 881 905 906\nf 881 906 882\nf 881 4050 4082\nf 881 4082 905\nf 882 906 907\nf 882 907 883\nf 883 907 908\nf 883 908 884\nf 884 908 909\nf 884 909 885\nf 885 909 910\nf 885 910 886\nf 886 910 911\nf 886 911 887\nf 887 911 912\nf 887 912 888\nf 888 912 913\nf 888 913 889\nf 889 913 914\nf 889 914 890\nf 890 914 915\nf 890 915 891\nf 891 915 916\nf 891 916 892\nf 892 916 917\nf 892 917 893\nf 893 917 918\nf 893 918 894\nf 894 918 4095\nf 894 4095 4084\nf 895 919 920\nf 895 920 896\nf 895 4054 4086\nf 895 4086 919\nf 896 920 921\nf 896 921 897\nf 897 921 922\nf 897 922 898\nf 898 922 923\nf 898 923 899\nf 899 923 924\nf 899 924 900\nf 900 924 925\nf 900 925 901\nf 901 925 926\nf 901 926 902\nf 902 926 927\nf 902 927 903\nf 903 927 928\nf 903 928 904\nf 904 928 4099\nf 904 4099 4088\nf 905 929 906\nf 905 4082 4092\nf 905 4092 4094\nf 905 4094 929\nf 906 929 930\nf 906 930 907\nf 907 930 931\nf 907 931 908\nf 908 931 932\nf 908 932 909\nf 909 932 933\nf 909 933 910\nf 910 933 934\nf 910 934 911\nf 911 934 935\nf 911 935 912\nf 912 935 936\nf 912 936 913\nf 913 936 937\nf 913 937 914\nf 914 937 938\nf 914 938 915\nf 915 938 939\nf 915 939 916\nf 916 939 940\nf 916 940 917\nf 917 940 941\nf 917 941 918\nf 918 941 4106\nf 918 4106 4095\nf 919 942 943\nf 919 943 920\nf 919 4086 4097\nf 919 4097 942\nf 920 943 944\nf 920 944 921\nf 921 944 945\nf 921 945 922\nf 922 945 946\nf 922 946 923\nf 923 946 947\nf 923 947 924\nf 924 947 948\nf 924 948 925\nf 925 948 949\nf 925 949 926\nf 926 949 950\nf 926 950 927\nf 927 950 951\nf 927 951 928\nf 928 951 4110\nf 928 4110 4099\nf 929 952 953\nf 929 953 930\nf 929 4094 4104\nf 929 4104 952\nf 930 953 954\nf 930 954 931\nf 931 954 955\nf 931 955 932\nf 932 955 956\nf 932 956 933\nf 933 956 957\nf 933 957 934\nf 934 957 958\nf 934 958 935\nf 935 958 959\nf 935 959 936\nf 936 959 960\nf 936 960 937\nf 937 960 961\nf 937 961 938\nf 938 961 962\nf 938 962 939\nf 939 962 963\nf 939 963 940\nf 940 963 964\nf 940 964 941\nf 941 964 4116\nf 941 4116 4106\nf 942 965 966\nf 942 966 943\nf 942 4097 4108\nf 942 4108 965\nf 943 966 967\nf 943 967 944\nf 944 967 968\nf 944 968 945\nf 945 968 969\nf 945 969 946\nf 946 969 970\nf 946 970 947\nf 947 970 971\nf 947 971 948\nf 948 971 972\nf 948 972 949\nf 949 972 973\nf 949 973 950\nf 950 973 974\nf 950 974 951\nf 951 974 4120\nf 951 4120 4110\nf 952 975 976\nf 952 976 953\nf 952 4104 4114\nf 952 4114 975\nf 953 976 977\nf 953 977 954\nf 954 977 978\nf 954 978 955\nf 955 978 979\nf 955 979 956\nf 956 979 980\nf 956 980 957\nf 957 980 981\nf 957 981 958\nf 958 981 982\nf 958 982 959\nf 959 982 983\nf 959 983 960\nf 960 983 984\nf 960 984 961\nf 961 984 985\nf 961 985 962\nf 962 985 986\nf 962 986 963\nf 963 986 987\nf 963 987 964\nf 964 987 4126\nf 964 4126 4116\nf 965 988 989\nf 965 989 966\nf 965 4108 4118\nf 965 4118 988\nf 966 989 990\nf 966 990 967\nf 967 990 991\nf 967 991 968\nf 968 991 992\nf 968 992 969\nf 969 992 993\nf 969 993 970\nf 970 993 994\nf 970 994 971\nf 971 994 995\nf 971 995 972\nf 972 995 996\nf 972 996 973\nf 973 996 997\nf 973 997 974\nf 974 997 4130\nf 974 4130 4120\nf 975 998 999\nf 975 999 976\nf 975 4114 4124\nf 975 4124 998\nf 976 999 1000\nf 976 1000 977\nf 977 1000 1001\nf 977 1001 978\nf 978 1001 1002\nf 978 1002 979\nf 979 1002 1003\nf 979 1003 980\nf 980 1003 1004\nf 980 1004 981\nf 981 1004 1005\nf 981 1005 982\nf 982 1005 1006\nf 982 1006 983\nf 983 1006 1007\nf 983 1007 984\nf 984 1007 1008\nf 984 1008 985\nf 985 1008 1009\nf 985 1009 986\nf 986 1009 1010\nf 986 1010 987\nf 987 1010 4137\nf 987 4137 4126\nf 988 1011 1012\nf 988 1012 989\nf 988 4118 4128\nf 988 4128 1011\nf 989 1012 1013\nf 989 1013 990\nf 990 1013 1014\nf 990 1014 991\nf 991 1014 1015\nf 991 1015 992\nf 992 1015 1016\nf 992 1016 993\nf 993 1016 1017\nf 993 1017 994\nf 994 1017 1018\nf 994 1018 995\nf 995 1018 1019\nf 995 1019 996\nf 996 1019 1020\nf 996 1020 997\nf 997 1020 4141\nf 997 4141 4130\nf 998 1021 999\nf 998 4124 4134\nf 998 4134 4136\nf 998 4136 1021\nf 999 1021 1022\nf 999 1022 1000\nf 1000 1022 1023\nf 1000 1023 1001\nf 1001 1023 1024\nf 1001 1024 1002\nf 1002 1024 1025\nf 1002 1025 1003\nf 1003 1025 1026\nf 1003 1026 1004\nf 1004 1026 1027\nf 1004 1027 1005\nf 1005 1027 1028\nf 1005 1028 1006\nf 1006 1028 1029\nf 1006 1029 1007\nf 1007 1029 1030\nf 1007 1030 1008\nf 1008 1030 1031\nf 1008 1031 1009\nf 1009 1031 1032\nf 1009 1032 1010\nf 1010 1032 4148\nf 1010 4148 4137\nf 1011 1033 1034\nf 1011 1034 1012\nf 1011 4128 4139\nf 1011 4139 1033\nf 1012 1034 1035\nf 1012 1035 1013\nf 1013 1035 1036\nf 1013 1036 1014\nf 1014 1036 1037\nf 1014 1037 1015\nf 1015 1037 1038\nf 1015 1038 1016\nf 1016 1038 1039\nf 1016 1039 1017\nf 1017 1039 1040\nf 1017 1040 1018\nf 1018 1040 1041\nf 1018 1041 1019\nf 1019 1041 1042\nf 1019 1042 1020\nf 1020 1042 4152\nf 1020 4152 4141\nf 1021 1043 1044\nf 1021 1044 1022\nf 1021 4136 4146\nf 1021 4146 1043\nf 1022 1044 1045\nf 1022 1045 1023\nf 1023 1045 1046\nf 1023 1046 1024\nf 1024 1046 1047\nf 1024 1047 1025\nf 1025 1047 1048\nf 1025 1048 1026\nf 1026 1048 1049\nf 1026 1049 1027\nf 1027 1049 1050\nf 1027 1050 1028\nf 1028 1050 1051\nf 1028 1051 1029\nf 1029 1051 1052\nf 1029 1052 1030\nf 1030 1052 1053\nf 1030 1053 1031\nf 1031 1053 1054\nf 1031 1054 1032\nf 1032 1054 4159\nf 1032 4159 4148\nf 1033 1055 1056\nf 1033 1056 1034\nf 1033 4139 4150\nf 1033 4150 1055\nf 1034 1056 1057\nf 1034 1057 1035\nf 1035 1057 1058\nf 1035 1058 1036\nf 1036 1058 1059\nf 1036 1059 1037\nf 1037 1059 1060\nf 1037 1060 1038\nf 1038 1060 1061\nf 1038 1061 1039\nf 1039 1061 1062\nf 1039 1062 1040\nf 1040 1062 1063\nf 1040 1063 1041\nf 1041 1063 1064\nf 1041 1064 1042\nf 1042 1064 4164\nf 1042 4164 4152\nf 1043 1065 1066\nf 1043 1066 1044\nf 1043 4146 4157\nf 1043 4157 1065\nf 1044 1066 1067\nf 1044 1067 1045\nf 1045 1067 1068\nf 1045 1068 1046\nf 1046 1068 1069\nf 1046 1069 1047\nf 1047 1069 1070\nf 1047 1070 1048\nf 1048 1070 1071\nf 1048 1071 1049\nf 1049 1071 1072\nf 1049 1072 1050\nf 1050 1072 1073\nf 1050 1073 1051\nf 1051 1073 1074\nf 1051 1074 1052\nf 1052 1074 1075\nf 1052 1075 1053\nf 1053 1075 1076\nf 1053 1076 1054\nf 1054 1076 1077\nf 1054 1077 4160\nf 1054 4160 4159\nf 1055 1078 1079\nf 1055 1079 1056\nf 1055 4150 4162\nf 1055 4162 1078\nf 1056 1079 1080\nf 1056 1080 1057\nf 1057 1080 1081\nf 1057 1081 1058\nf 1058 1081 1082\nf 1058 1082 1059\nf 1059 1082 1083\nf 1059 1083 1060\nf 1060 1083 1084\nf 1060 1084 1061\nf 1061 1084 1085\nf 1061 1085 1062\nf 1062 1085 1086\nf 1062 1086 1063\nf 1063 1086 1087\nf 1063 1087 1064\nf 1064 1087 4174\nf 1064 4174 4164\nf 1065 1088 1089\nf 1065 1089 1066\nf 1065 4157 4169\nf 1065 4169 1088\nf 1066 1089 1090\nf 1066 1090 1067\nf 1067 1090 1091\nf 1067 1091 1068\nf 1068 1091 1092\nf 1068 1092 1069\nf 1069 1092 1093\nf 1069 1093 1070\nf 1070 1093 1094\nf 1070 1094 1071\nf 1071 1094 1095\nf 1071 1095 1072\nf 1072 1095 1096\nf 1072 1096 1073\nf 1073 1096 1097\nf 1073 1097 1074\nf 1074 1097 1098\nf 1074 1098 1075\nf 1075 1098 1099\nf 1075 1099 1076\nf 1076 1099 1100\nf 1076 1100 1077\nf 1077 1100 4181\nf 1077 4171 4160\nf 1077 4181 4171\nf 1078 1101 1102\nf 1078 1102 1079\nf 1078 4162 4172\nf 1078 4172 1101\nf 1079 1102 1103\nf 1079 1103 1080\nf 1080 1103 1104\nf 1080 1104 1081\nf 1081 1104 1105\nf 1081 1105 1082\nf 1082 1105 1106\nf 1082 1106 1083\nf 1083 1106 1107\nf 1083 1107 1084\nf 1084 1107 1108\nf 1084 1108 1085\nf 1085 1108 1109\nf 1085 1109 1086\nf 1086 1109 1110\nf 1086 1110 1087\nf 1087 1110 4184\nf 1087 4184 4174\nf 1088 1111 1112\nf 1088 1112 1089\nf 1088 4169 4179\nf 1088 4179 1111\nf 1089 1112 1113\nf 1089 1113 1090\nf 1090 1113 1114\nf 1090 1114 1091\nf 1091 1114 1115\nf 1091 1115 1092\nf 1092 1115 1116\nf 1092 1116 1093\nf 1093 1116 1117\nf 1093 1117 1094\nf 1094 1117 1118\nf 1094 1118 1095\nf 1095 1118 1119\nf 1095 1119 1096\nf 1096 1119 1120\nf 1096 1120 1097\nf 1097 1120 1121\nf 1097 1121 1098\nf 1098 1121 1122\nf 1098 1122 1099\nf 1099 1122 1123\nf 1099 1123 1100\nf 1100 1123 4191\nf 1100 4191 4181\nf 1101 1124 1102\nf 1101 4172 4182\nf 1101 4182 4183\nf 1101 4183 1124\nf 1102 1124 1125\nf 1102 1125 1103\nf 1103 1125 1126\nf 1103 1126 1104\nf 1104 1126 1127\nf 1104 1127 1105\nf 1105 1127 1128\nf 1105 1128 1106\nf 1106 1128 1129\nf 1106 1129 1107\nf 1107 1129 1130\nf 1107 1130 1108\nf 1108 1130 1131\nf 1108 1131 1109\nf 1109 1131 1132\nf 1109 1132 1110\nf 1110 1132 4196\nf 1110 4196 4184\nf 1111 1133 1134\nf 1111 1134 1112\nf 1111 4179 4189\nf 1111 4189 1133\nf 1112 1134 1135\nf 1112 1135 1113\nf 1113 1135 1136\nf 1113 1136 1114\nf 1114 1136 1137\nf 1114 1137 1115\nf 1115 1137 1138\nf 1115 1138 1116\nf 1116 1138 1139\nf 1116 1139 1117\nf 1117 1139 1140\nf 1117 1140 1118\nf 1118 1140 1141\nf 1118 1141 1119\nf 1119 1141 1142\nf 1119 1142 1120\nf 1120 1142 1143\nf 1120 1143 1121\nf 1121 1143 1144\nf 1121 1144 1122\nf 1122 1144 1145\nf 1122 1145 1123\nf 1123 1145 4202\nf 1123 4202 4191\nf 1124 1146 1147\nf 1124 1147 1125\nf 1124 4183 4192\nf 1124 4192 1146\nf 1125 1147 1148\nf 1125 1148 1126\nf 1126 1148 1149\nf 1126 1149 1127\nf 1127 1149 1150\nf 1127 1150 1128\nf 1128 1150 1129\nf 1129 1150 4206\nf 1129 4194 1130\nf 1129 4206 4194\nf 1130 1151 1131\nf 1130 4194 4195\nf 1130 4195 1151\nf 1131 1151 1152\nf 1131 1152 1132\nf 1132 1152 4211\nf 1132 4211 4196\nf 1133 1153 1154\nf 1133 1154 1134\nf 1133 4189 4200\nf 1133 4200 1153\nf 1134 1154 1155\nf 1134 1155 1135\nf 1135 1155 1156\nf 1135 1156 1136\nf 1136 1156 1157\nf 1136 1157 1137\nf 1137 1157 1158\nf 1137 1158 1138\nf 1138 1158 1159\nf 1138 1159 1139\nf 1139 1159 1160\nf 1139 1160 1140\nf 1140 1160 1161\nf 1140 1161 1141\nf 1141 1161 1162\nf 1141 1162 1142\nf 1142 1162 1163\nf 1142 1163 1143\nf 1143 1163 1164\nf 1143 1164 1144\nf 1144 1164 1145\nf 1145 1164 4218\nf 1145 4203 4202\nf 1145 4218 4203\nf 1146 1165 1166\nf 1146 1166 1147\nf 1146 4192 4204\nf 1146 4204 1165\nf 1147 1166 1167\nf 1147 1167 1148\nf 1148 1167 1168\nf 1148 1168 1149\nf 1149 1168 1169\nf 1149 1169 1150\nf 1150 1169 4222\nf 1150 4222 4206\nf 1151 1170 1152\nf 1151 4195 4208\nf 1151 4208 4210\nf 1151 4210 1170\nf 1152 1170 4227\nf 1152 4227 4211\nf 1153 1171 1154\nf 1153 4200 4215\nf 1153 4215 4217\nf 1153 4217 1171\nf 1154 1171 1172\nf 1154 1172 1155\nf 1155 1172 1173\nf 1155 1173 1156\nf 1156 1173 1174\nf 1156 1174 1157\nf 1157 1174 1175\nf 1157 1175 1158\nf 1158 1175 1176\nf 1158 1176 1159\nf 1159 1176 1177\nf 1159 1177 1160\nf 1160 1177 1178\nf 1160 1178 1161\nf 1161 1178 1179\nf 1161 1179 1162\nf 1162 1179 1180\nf 1162 1180 1163\nf 1163 1180 1181\nf 1163 1181 1164\nf 1164 1181 4234\nf 1164 4234 4218\nf 1165 1182 1183\nf 1165 1183 1166\nf 1165 4204 4220\nf 1165 4220 1182\nf 1166 1183 1184\nf 1166 1184 1167\nf 1167 1184 1185\nf 1167 1185 1168\nf 1168 1185 1186\nf 1168 1186 1169\nf 1169 1186 4238\nf 1169 4238 4222\nf 1170 1187 4243\nf 1170 4210 4225\nf 1170 4225 1187\nf 1170 4243 4227\nf 1171 1188 1189\nf 1171 1189 1172\nf 1171 4217 4232\nf 1171 4232 1188\nf 1172 1189 1190\nf 1172 1190 1173\nf 1173 1190 1191\nf 1173 1191 1174\nf 1174 1191 1192\nf 1174 1192 1175\nf 1175 1192 1193\nf 1175 1193 1176\nf 1176 1193 1194\nf 1176 1194 1177\nf 1177 1194 1195\nf 1177 1195 1178\nf 1178 1195 1196\nf 1178 1196 1179\nf 1179 1196 1197\nf 1179 1197 1180\nf 1180 1197 1198\nf 1180 1198 1181\nf 1181 1198 4250\nf 1181 4250 4234\nf 1182 1199 1200\nf 1182 1200 1183\nf 1182 4220 4236\nf 1182 4236 1199\nf 1183 1200 1201\nf 1183 1201 1184\nf 1184 1201 1202\nf 1184 1202 1185\nf 1185 1202 1203\nf 1185 1203 1186\nf 1186 1203 4254\nf 1186 4254 4238\nf 1187 1204 4259\nf 1187 4225 4241\nf 1187 4241 1204\nf 1187 4259 4243\nf 1188 1205 1206\nf 1188 1206 1189\nf 1188 4232 4248\nf 1188 4248 1205\nf 1189 1206 1207\nf 1189 1207 1190\nf 1190 1207 1208\nf 1190 1208 1191\nf 1191 1208 1209\nf 1191 1209 1192\nf 1192 1209 1210\nf 1192 1210 1193\nf 1193 1210 1211\nf 1193 1211 1194\nf 1194 1211 1212\nf 1194 1212 1195\nf 1195 1212 1213\nf 1195 1213 1196\nf 1196 1213 1214\nf 1196 1214 1197\nf 1197 1214 1215\nf 1197 1215 1198\nf 1198 1215 4268\nf 1198 4268 4250\nf 1199 1216 1217\nf 1199 1217 1200\nf 1199 4236 4252\nf 1199 4252 1216\nf 1200 1217 1218\nf 1200 1218 1201\nf 1201 1218 1219\nf 1201 1219 1202\nf 1202 1219 1220\nf 1202 1220 1203\nf 1203 1220 4272\nf 1203 4272 4254\nf 1204 4241 4257\nf 1204 4257 4260\nf 1204 4260 4259\nf 1205 1221 1206\nf 1205 4248 4265\nf 1205 4265 4267\nf 1205 4267 1221\nf 1206 1221 1222\nf 1206 1222 1207\nf 1207 1222 1223\nf 1207 1223 1208\nf 1208 1223 1224\nf 1208 1224 1209\nf 1209 1224 1225\nf 1209 1225 1210\nf 1210 1225 1226\nf 1210 1226 1211\nf 1211 1226 1227\nf 1211 1227 1212\nf 1212 1227 1228\nf 1212 1228 1213\nf 1213 1228 1229\nf 1213 1229 1214\nf 1214 1229 1230\nf 1214 1230 1215\nf 1215 1230 4284\nf 1215 4284 4268\nf 1216 1231 1232\nf 1216 1232 1217\nf 1216 4252 4270\nf 1216 4270 1231\nf 1217 1232 1233\nf 1217 1233 1218\nf 1218 1233 1234\nf 1218 1234 1219\nf 1219 1234 1235\nf 1219 1235 1220\nf 1220 1235 4288\nf 1220 4288 4272\nf 1221 1236 1237\nf 1221 1237 1222\nf 1221 4267 4282\nf 1221 4282 1236\nf 1222 1237 1238\nf 1222 1238 1223\nf 1223 1238 1239\nf 1223 1239 1224\nf 1224 1239 1240\nf 1224 1240 1225\nf 1225 1240 1241\nf 1225 1241 1226\nf 1226 1241 1242\nf 1226 1242 1227\nf 1227 1242 1243\nf 1227 1243 1228\nf 1228 1243 1244\nf 1228 1244 1229\nf 1229 1244 1245\nf 1229 1245 1230\nf 1230 1245 4300\nf 1230 4300 4284\nf 1231 1246 1247\nf 1231 1247 1232\nf 1231 4270 4286\nf 1231 4286 1246\nf 1232 1247 1248\nf 1232 1248 1233\nf 1233 1248 1249\nf 1233 1249 1234\nf 1234 1249 1250\nf 1234 1250 1235\nf 1235 1250 4304\nf 1235 4304 4288\nf 1236 1251 1252\nf 1236 1252 1237\nf 1236 4282 4298\nf 1236 4298 1251\nf 1237 1252 1253\nf 1237 1253 1238\nf 1238 1253 1254\nf 1238 1254 1239\nf 1239 1254 1255\nf 1239 1255 1240\nf 1240 1255 1256\nf 1240 1256 1241\nf 1241 1256 1257\nf 1241 1257 1242\nf 1242 1257 1258\nf 1242 1258 1243\nf 1243 1258 1259\nf 1243 1259 1244\nf 1244 1259 1260\nf 1244 1260 1245\nf 1245 1260 4317\nf 1245 4317 4300\nf 1246 1261 1262\nf 1246 1262 1247\nf 1246 4286 4302\nf 1246 4302 1261\nf 1247 1262 1263\nf 1247 1263 1248\nf 1248 1263 1264\nf 1248 1264 1249\nf 1249 1264 1265\nf 1249 1265 1250\nf 1250 1265 4321\nf 1250 4321 4304\nf 1251 1266 1267\nf 1251 1267 1268\nf 1251 1268 1252\nf 1251 4298 4314\nf 1251 4314 1266\nf 1252 1268 1269\nf 1252 1269 1253\nf 1253 1269 1270\nf 1253 1270 1254\nf 1254 1270 1271\nf 1254 1271 1255\nf 1255 1271 1272\nf 1255 1272 1256\nf 1256 1272 1273\nf 1256 1273 1257\nf 1257 1273 1274\nf 1257 1274 1258\nf 1258 1274 1275\nf 1258 1275 1259\nf 1259 1275 1276\nf 1259 1276 1260\nf 1260 1276 4332\nf 1260 4332 4317\nf 1261 1277 1278\nf 1261 1278 1262\nf 1261 4302 4319\nf 1261 4319 1277\nf 1262 1278 1279\nf 1262 1279 1263\nf 1263 1279 1280\nf 1263 1280 1264\nf 1264 1280 1281\nf 1264 1281 1265\nf 1265 1281 4336\nf 1265 4336 4321\nf 1266 1282 1283\nf 1266 1283 1267\nf 1266 4314 4315\nf 1266 4315 4330\nf 1266 4330 1282\nf 1267 1283 1284\nf 1267 1284 1268\nf 1268 1284 1285\nf 1268 1285 1269\nf 1269 1285 1286\nf 1269 1286 1270\nf 1270 1286 1287\nf 1270 1287 1271\nf 1271 1287 1288\nf 1271 1288 1272\nf 1272 1288 1289\nf 1272 1289 1273\nf 1273 1289 1290\nf 1273 1290 1274\nf 1274 1290 1291\nf 1274 1291 1275\nf 1275 1291 1292\nf 1275 1292 1276\nf 1276 1292 4350\nf 1276 4350 4332\nf 1277 1293 1294\nf 1277 1294 1278\nf 1277 4319 4334\nf 1277 4334 1293\nf 1278 1294 1295\nf 1278 1295 1279\nf 1279 1295 1296\nf 1279 1296 1280\nf 1280 1296 1297\nf 1280 1297 1281\nf 1281 1297 1298\nf 1281 1298 4337\nf 1281 4337 4336\nf 1282 1301 1302\nf 1282 1302 1283\nf 1282 4330 4348\nf 1282 4348 1301\nf 1283 1302 1303\nf 1283 1303 1284\nf 1284 1303 1304\nf 1284 1304 1285\nf 1285 1304 1305\nf 1285 1305 1286\nf 1286 1305 1306\nf 1286 1306 1287\nf 1287 1306 1307\nf 1287 1307 1288\nf 1288 1307 1308\nf 1288 1308 1289\nf 1289 1308 1309\nf 1289 1309 1290\nf 1290 1309 1310\nf 1290 1310 1291\nf 1291 1310 1311\nf 1291 1311 1292\nf 1292 1311 4367\nf 1292 4367 4350\nf 1293 1312 1313\nf 1293 1313 1294\nf 1293 4334 4352\nf 1293 4352 1312\nf 1294 1313 1314\nf 1294 1314 1295\nf 1295 1314 1315\nf 1295 1315 1296\nf 1296 1315 1316\nf 1296 1316 1297\nf 1297 1316 1317\nf 1297 1317 1298\nf 1298 1317 1318\nf 1298 1318 4355\nf 1298 4354 4337\nf 1298 4355 4354\nf 1299 1300 4343\nf 1299 1319 1320\nf 1299 1320 1321\nf 1299 1321 1300\nf 1299 4341 4357\nf 1299 4343 4341\nf 1299 4357 1319\nf 1300 1321 4371\nf 1300 4360 4343\nf 1300 4371 4360\nf 1301 1322 1302\nf 1301 4348 4364\nf 1301 4364 4366\nf 1301 4366 1322\nf 1302 1322 1323\nf 1302 1323 1303\nf 1303 1323 1324\nf 1303 1324 1304\nf 1304 1324 1325\nf 1304 1325 1305\nf 1305 1325 1326\nf 1305 1326 1306\nf 1306 1326 1327\nf 1306 1327 1307\nf 1307 1327 1328\nf 1307 1328 1308\nf 1308 1328 1329\nf 1308 1329 1309\nf 1309 1329 1330\nf 1309 1330 1310\nf 1310 1330 1331\nf 1310 1331 1311\nf 1311 1331 4378\nf 1311 4378 4367\nf 1312 1332 1333\nf 1312 1333 1313\nf 1312 4352 4369\nf 1312 4369 1332\nf 1313 1333 1334\nf 1313 1334 1314\nf 1314 1334 1335\nf 1314 1335 1315\nf 1315 1335 1336\nf 1315 1336 1316\nf 1316 1336 1337\nf 1316 1337 1317\nf 1317 1337 1338\nf 1317 1338 1318\nf 1318 1319 4358\nf 1318 1338 1339\nf 1318 1339 1319\nf 1318 4358 4355\nf 1319 1339 1340\nf 1319 1340 1320\nf 1319 4357 4358\nf 1320 1340 1341\nf 1320 1341 1321\nf 1321 1341 4382\nf 1321 4382 4371\nf 1322 1342 1343\nf 1322 1343 1323\nf 1322 4366 4376\nf 1322 4376 1342\nf 1323 1343 1344\nf 1323 1344 1324\nf 1324 1344 1345\nf 1324 1345 1325\nf 1325 1345 1346\nf 1325 1346 1326\nf 1326 1346 1347\nf 1326 1347 1327\nf 1327 1347 1348\nf 1327 1348 1328\nf 1328 1348 1349\nf 1328 1349 1329\nf 1329 1349 1350\nf 1329 1350 1330\nf 1330 1350 1351\nf 1330 1351 1331\nf 1331 1351 4390\nf 1331 4390 4378\nf 1332 1352 1353\nf 1332 1353 1333\nf 1332 4369 4380\nf 1332 4380 1352\nf 1333 1353 1354\nf 1333 1354 1334\nf 1334 1354 1355\nf 1334 1355 1335\nf 1335 1355 1356\nf 1335 1356 1336\nf 1336 1356 1357\nf 1336 1357 1337\nf 1337 1357 1358\nf 1337 1358 1338\nf 1338 1358 1359\nf 1338 1359 1339\nf 1339 1359 1360\nf 1339 1360 1340\nf 1340 1360 1361\nf 1340 1361 1341\nf 1341 1361 1362\nf 1341 1362 4383\nf 1341 4383 4382\nf 1342 1363 1364\nf 1342 1364 1343\nf 1342 4376 4388\nf 1342 4388 1363\nf 1343 1364 1365\nf 1343 1365 1344\nf 1344 1365 1366\nf 1344 1366 1345\nf 1345 1366 1367\nf 1345 1367 1346\nf 1346 1367 1368\nf 1346 1368 1347\nf 1347 1368 1369\nf 1347 1369 1348\nf 1348 1369 1370\nf 1348 1370 1349\nf 1349 1370 1371\nf 1349 1371 1350\nf 1350 1371 1372\nf 1350 1372 1351\nf 1351 1372 4400\nf 1351 4400 4390\nf 1352 1373 1374\nf 1352 1374 1353\nf 1352 4380 4392\nf 1352 4392 1373\nf 1353 1374 1375\nf 1353 1375 1354\nf 1354 1375 1376\nf 1354 1376 1355\nf 1355 1376 1377\nf 1355 1377 1356\nf 1356 1377 1378\nf 1356 1378 1357\nf 1357 1378 1379\nf 1357 1379 1358\nf 1358 1379 1380\nf 1358 1380 1359\nf 1359 1380 1381\nf 1359 1381 1360\nf 1360 1381 1382\nf 1360 1382 1361\nf 1361 1382 1383\nf 1361 1383 1362\nf 1362 1383 4403\nf 1362 4393 4383\nf 1362 4403 4393\nf 1363 1384 1385\nf 1363 1385 1386\nf 1363 1386 1364\nf 1363 4388 4397\nf 1363 4397 1384\nf 1364 1386 1387\nf 1364 1387 1365\nf 1365 1387 1388\nf 1365 1388 1366\nf 1366 1388 1389\nf 1366 1389 1367\nf 1367 1389 1390\nf 1367 1390 1368\nf 1368 1390 1391\nf 1368 1391 1369\nf 1369 1391 1392\nf 1369 1392 1370\nf 1370 1392 1393\nf 1370 1393 1371\nf 1371 1393 1394\nf 1371 1394 1372\nf 1372 1394 4408\nf 1372 4408 4400\nf 1373 1395 1396\nf 1373 1396 1374\nf 1373 4392 4402\nf 1373 4402 1395\nf 1374 1396 1397\nf 1374 1397 1375\nf 1375 1397 1398\nf 1375 1398 1376\nf 1376 1398 1399\nf 1376 1399 1377\nf 1377 1399 1400\nf 1377 1400 1378\nf 1378 1400 1401\nf 1378 1401 1379\nf 1379 1401 1402\nf 1379 1402 1380\nf 1380 1402 1403\nf 1380 1403 1381\nf 1381 1403 1404\nf 1381 1404 1382\nf 1382 1404 1405\nf 1382 1405 1383\nf 1383 1405 4412\nf 1383 4412 4403\nf 1384 1406 1407\nf 1384 1407 1385\nf 1384 4397 4398\nf 1384 4398 4406\nf 1384 4406 1406\nf 1385 1407 1408\nf 1385 1408 1386\nf 1386 1408 1409\nf 1386 1409 1387\nf 1387 1409 1410\nf 1387 1410 1388\nf 1388 1410 1411\nf 1388 1411 1389\nf 1389 1411 1412\nf 1389 1412 1390\nf 1390 1412 1413\nf 1390 1413 1391\nf 1391 1413 1414\nf 1391 1414 1392\nf 1392 1414 1415\nf 1392 1415 1393\nf 1393 1415 1416\nf 1393 1416 1394\nf 1394 1416 4417\nf 1394 4417 4408\nf 1395 1417 1396\nf 1395 4402 4410\nf 1395 4410 4411\nf 1395 4411 1417\nf 1396 1417 1418\nf 1396 1418 1397\nf 1397 1418 1419\nf 1397 1419 1398\nf 1398 1419 1420\nf 1398 1420 1399\nf 1399 1420 1421\nf 1399 1421 1400\nf 1400 1421 1422\nf 1400 1422 1401\nf 1401 1422 1423\nf 1401 1423 1402\nf 1402 1423 1424\nf 1402 1424 1403\nf 1403 1424 1425\nf 1403 1425 1404\nf 1404 1425 1426\nf 1404 1426 1405\nf 1405 1426 4421\nf 1405 4421 4412\nf 1406 1427 1428\nf 1406 1428 1407\nf 1406 4406 4415\nf 1406 4415 1427\nf 1407 1428 1429\nf 1407 1429 1408\nf 1408 1429 1430\nf 1408 1430 1409\nf 1409 1430 1431\nf 1409 1431 1410\nf 1410 1431 1432\nf 1410 1432 1411\nf 1411 1432 1433\nf 1411 1433 1412\nf 1412 1433 1434\nf 1412 1434 1413\nf 1413 1434 1435\nf 1413 1435 1414\nf 1414 1435 1436\nf 1414 1436 1415\nf 1415 1436 1437\nf 1415 1437 1416\nf 1416 1437 4426\nf 1416 4426 4417\nf 1417 1438 1439\nf 1417 1439 1418\nf 1417 4411 4419\nf 1417 4419 1438\nf 1418 1439 1440\nf 1418 1440 1419\nf 1419 1440 1441\nf 1419 1441 1420\nf 1420 1441 1442\nf 1420 1442 1421\nf 1421 1442 1443\nf 1421 1443 1422\nf 1422 1443 1444\nf 1422 1444 1423\nf 1423 1444 1445\nf 1423 1445 1424\nf 1424 1445 1446\nf 1424 1446 1425\nf 1425 1446 1447\nf 1425 1447 1426\nf 1426 1447 4430\nf 1426 4430 4421\nf 1427 1448 1449\nf 1427 1449 1428\nf 1427 4415 4424\nf 1427 4424 1448\nf 1428 1449 1450\nf 1428 1450 1429\nf 1429 1450 1451\nf 1429 1451 1430\nf 1430 1451 1452\nf 1430 1452 1431\nf 1431 1452 1453\nf 1431 1453 1432\nf 1432 1453 1454\nf 1432 1454 1433\nf 1433 1454 1455\nf 1433 1455 1434\nf 1434 1455 1456\nf 1434 1456 1435\nf 1435 1456 1457\nf 1435 1457 1436\nf 1436 1457 1458\nf 1436 1458 1437\nf 1437 1458 4435\nf 1437 4435 4426\nf 1438 1459 1460\nf 1438 1460 1439\nf 1438 4419 4428\nf 1438 4428 1459\nf 1439 1460 1461\nf 1439 1461 1440\nf 1440 1461 1462\nf 1440 1462 1441\nf 1441 1462 1463\nf 1441 1463 1442\nf 1442 1463 1464\nf 1442 1464 1443\nf 1443 1464 1465\nf 1443 1465 1444\nf 1444 1465 1466\nf 1444 1466 1445\nf 1445 1466 1467\nf 1445 1467 1446\nf 1446 1467 1468\nf 1446 1468 1447\nf 1447 1468 4439\nf 1447 4439 4430\nf 1448 1469 1470\nf 1448 1470 1449\nf 1448 4424 4433\nf 1448 4433 1469\nf 1449 1470 1471\nf 1449 1471 1450\nf 1450 1471 1472\nf 1450 1472 1451\nf 1451 1472 1473\nf 1451 1473 1452\nf 1452 1473 1474\nf 1452 1474 1453\nf 1453 1474 1475\nf 1453 1475 1454\nf 1454 1475 1476\nf 1454 1476 1455\nf 1455 1476 1477\nf 1455 1477 1456\nf 1456 1477 1478\nf 1456 1478 1457\nf 1457 1478 1479\nf 1457 1479 1458\nf 1458 1479 4445\nf 1458 4445 4435\nf 1459 1480 1481\nf 1459 1481 1460\nf 1459 4428 4437\nf 1459 4437 1480\nf 1460 1481 1482\nf 1460 1482 1461\nf 1461 1482 1483\nf 1461 1483 1462\nf 1462 1483 1484\nf 1462 1484 1463\nf 1463 1484 1485\nf 1463 1485 1464\nf 1464 1485 1486\nf 1464 1486 1465\nf 1465 1486 1487\nf 1465 1487 1466\nf 1466 1487 1488\nf 1466 1488 1467\nf 1467 1488 1489\nf 1467 1489 1468\nf 1468 1489 4449\nf 1468 4449 4439\nf 1469 1490 1491\nf 1469 1491 1492\nf 1469 1492 1470\nf 1469 4433 4442\nf 1469 4442 1490\nf 1470 1492 1493\nf 1470 1493 1471\nf 1471 1493 1494\nf 1471 1494 1472\nf 1472 1494 1495\nf 1472 1495 1473\nf 1473 1495 1496\nf 1473 1496 1474\nf 1474 1496 1497\nf 1474 1497 1475\nf 1475 1497 1498\nf 1475 1498 1476\nf 1476 1498 1499\nf 1476 1499 1477\nf 1477 1499 1500\nf 1477 1500 1478\nf 1478 1500 1501\nf 1478 1501 1479\nf 1479 1501 4454\nf 1479 4454 4445\nf 1480 1502 1503\nf 1480 1503 1481\nf 1480 4437 4447\nf 1480 4447 1502\nf 1481 1503 1504\nf 1481 1504 1482\nf 1482 1504 1505\nf 1482 1505 1483\nf 1483 1505 1506\nf 1483 1506 1484\nf 1484 1506 1507\nf 1484 1507 1485\nf 1485 1507 1508\nf 1485 1508 1486\nf 1486 1508 1509\nf 1486 1509 1487\nf 1487 1509 1510\nf 1487 1510 1488\nf 1488 1510 1511\nf 1488 1511 1489\nf 1489 1511 4460\nf 1489 4460 4449\nf 1490 1512 1513\nf 1490 1513 1491\nf 1490 4442 4443\nf 1490 4443 4452\nf 1490 4452 1512\nf 1491 1513 1514\nf 1491 1514 1492\nf 1492 1514 1515\nf 1492 1515 1493\nf 1493 1515 1516\nf 1493 1516 1494\nf 1494 1516 1517\nf 1494 1517 1495\nf 1495 1517 1518\nf 1495 1518 1496\nf 1496 1518 1519\nf 1496 1519 1497\nf 1497 1519 1520\nf 1497 1520 1498\nf 1498 1520 1521\nf 1498 1521 1499\nf 1499 1521 1522\nf 1499 1522 1500\nf 1500 1522 1523\nf 1500 1523 1501\nf 1501 1523 4466\nf 1501 4466 4454\nf 1502 1524 1525\nf 1502 1525 1503\nf 1502 4447 4456\nf 1502 4456 1524\nf 1503 1525 1526\nf 1503 1526 1504\nf 1504 1526 1527\nf 1504 1527 1505\nf 1505 1527 1506\nf 1506 1527 4470\nf 1506 4458 1507\nf 1506 4470 4458\nf 1507 1528 1508\nf 1507 4458 4459\nf 1507 4459 1528\nf 1508 1528 1529\nf 1508 1529 1509\nf 1509 1529 1530\nf 1509 1530 1510\nf 1510 1530 1531\nf 1510 1531 1511\nf 1511 1531 4474\nf 1511 4474 4460\nf 1512 1532 1533\nf 1512 1533 1534\nf 1512 1534 1513\nf 1512 4452 4463\nf 1512 4463 1532\nf 1513 1534 1535\nf 1513 1535 1514\nf 1514 1535 1536\nf 1514 1536 1515\nf 1515 1536 1537\nf 1515 1537 1516\nf 1516 1537 1538\nf 1516 1538 1517\nf 1517 1538 1539\nf 1517 1539 1518\nf 1518 1539 1540\nf 1518 1540 1519\nf 1519 1540 1541\nf 1519 1541 1520\nf 1520 1541 1542\nf 1520 1542 1521\nf 1521 1542 1543\nf 1521 1543 1522\nf 1522 1543 1544\nf 1522 1544 1523\nf 1523 1544 4478\nf 1523 4478 4466\nf 1524 1545 1546\nf 1524 1546 1525\nf 1524 4456 4468\nf 1524 4468 1545\nf 1525 1546 1547\nf 1525 1547 1526\nf 1526 1547 1548\nf 1526 1548 1527\nf 1527 1548 4482\nf 1527 4482 4470\nf 1528 1549 1550\nf 1528 1550 1529\nf 1528 4459 4472\nf 1528 4472 1549\nf 1529 1550 1551\nf 1529 1551 1530\nf 1530 1551 1552\nf 1530 1552 1531\nf 1531 1552 4487\nf 1531 4487 4474\nf 1532 1553 1554\nf 1532 1554 1533\nf 1532 4463 4464\nf 1532 4464 4476\nf 1532 4476 1553\nf 1533 1554 1555\nf 1533 1555 1534\nf 1534 1555 1556\nf 1534 1556 1535\nf 1535 1556 1557\nf 1535 1557 1536\nf 1536 1557 1558\nf 1536 1558 1537\nf 1537 1558 1559\nf 1537 1559 1538\nf 1538 1559 1560\nf 1538 1560 1539\nf 1539 1560 1561\nf 1539 1561 1540\nf 1540 1561 1562\nf 1540 1562 1541\nf 1541 1562 1563\nf 1541 1563 1542\nf 1542 1563 1564\nf 1542 1564 1543\nf 1543 1564 1565\nf 1543 1565 1544\nf 1544 1565 4492\nf 1544 4492 4478\nf 1545 1566 1567\nf 1545 1567 1546\nf 1545 4468 4480\nf 1545 4480 1566\nf 1546 1567 1568\nf 1546 1568 1547\nf 1547 1568 1569\nf 1547 1569 1548\nf 1548 1569 1570\nf 1548 1570 4483\nf 1548 4483 4482\nf 1549 1571 1572\nf 1549 1572 1550\nf 1549 4472 4485\nf 1549 4485 1571\nf 1550 1572 1573\nf 1550 1573 1551\nf 1551 1573 1552\nf 1552 1573 4501\nf 1552 4488 4487\nf 1552 4501 4488\nf 1553 1574 1575\nf 1553 1575 1554\nf 1553 4476 4490\nf 1553 4490 1574\nf 1554 1575 1576\nf 1554 1576 1555\nf 1555 1576 1577\nf 1555 1577 1556\nf 1556 1577 1578\nf 1556 1578 1557\nf 1557 1578 1579\nf 1557 1579 1558\nf 1558 1579 1580\nf 1558 1580 1559\nf 1559 1580 1581\nf 1559 1581 1560\nf 1560 1581 1582\nf 1560 1582 1561\nf 1561 1582 1583\nf 1561 1583 1562\nf 1562 1583 1584\nf 1562 1584 1563\nf 1563 1584 1585\nf 1563 1585 1564\nf 1564 1585 1586\nf 1564 1586 1565\nf 1565 1586 1587\nf 1565 1587 4493\nf 1565 4493 4492\nf 1566 1588 1589\nf 1566 1589 1567\nf 1566 4480 4495\nf 1566 4495 1588\nf 1567 1589 1590\nf 1567 1590 1568\nf 1568 1590 1591\nf 1568 1591 1569\nf 1569 1591 1592\nf 1569 1592 1570\nf 1570 1592 1593\nf 1570 1593 4499\nf 1570 4497 4483\nf 1570 4499 4497\nf 1571 1593 1594\nf 1571 1594 1595\nf 1571 1595 1572\nf 1571 4485 4498\nf 1571 4498 1593\nf 1572 1595 1596\nf 1572 1596 1573\nf 1573 1596 4510\nf 1573 4510 4501\nf 1574 1597 1575\nf 1574 4490 4504\nf 1574 4504 4506\nf 1574 4506 1597\nf 1575 1597 1598\nf 1575 1598 1576\nf 1576 1598 1599\nf 1576 1599 1577\nf 1577 1599 1600\nf 1577 1600 1578\nf 1578 1600 1601\nf 1578 1601 1579\nf 1579 1601 1602\nf 1579 1602 1580\nf 1580 1602 1603\nf 1580 1603 1581\nf 1581 1603 1604\nf 1581 1604 1582\nf 1582 1604 1605\nf 1582 1605 1583\nf 1583 1605 1606\nf 1583 1606 1584\nf 1584 1606 1607\nf 1584 1607 1585\nf 1585 1607 1608\nf 1585 1608 1586\nf 1586 1608 1609\nf 1586 1609 1587\nf 1587 1609 4515\nf 1587 4507 4493\nf 1587 4515 4507\nf 1588 1610 1611\nf 1588 1611 1589\nf 1588 4495 4508\nf 1588 4508 1610\nf 1589 1611 1612\nf 1589 1612 1590\nf 1590 1612 1613\nf 1590 1613 1591\nf 1591 1613 1614\nf 1591 1614 1592\nf 1592 1614 1615\nf 1592 1615 1593\nf 1593 1615 1616\nf 1593 1616 1594\nf 1593 4498 4499\nf 1594 1616 1617\nf 1594 1617 1595\nf 1595 1617 1618\nf 1595 1618 1596\nf 1596 1618 4518\nf 1596 4518 4510\nf 1597 1619 1620\nf 1597 1620 1598\nf 1597 4506 4513\nf 1597 4513 1619\nf 1598 1620 1621\nf 1598 1621 1599\nf 1599 1621 1622\nf 1599 1622 1600\nf 1600 1622 1623\nf 1600 1623 1601\nf 1601 1623 1624\nf 1601 1624 1602\nf 1602 1624 1625\nf 1602 1625 1603\nf 1603 1625 1626\nf 1603 1626 1604\nf 1604 1626 1627\nf 1604 1627 1605\nf 1605 1627 1628\nf 1605 1628 1606\nf 1606 1628 1629\nf 1606 1629 1607\nf 1607 1629 1630\nf 1607 1630 1608\nf 1608 1630 1631\nf 1608 1631 1609\nf 1609 1631 4523\nf 1609 4523 4515\nf 1610 1632 1633\nf 1610 1633 1611\nf 1610 4508 4516\nf 1610 4516 1632\nf 1611 1633 1634\nf 1611 1634 1612\nf 1612 1634 1635\nf 1612 1635 1613\nf 1613 1635 1636\nf 1613 1636 1614\nf 1614 1636 1637\nf 1614 1637 1615\nf 1615 1637 1638\nf 1615 1638 1616\nf 1616 1638 1639\nf 1616 1639 1617\nf 1617 1639 1640\nf 1617 1640 1618\nf 1618 1640 4526\nf 1618 4526 4518\nf 1619 1641 1642\nf 1619 1642 1620\nf 1619 4513 4521\nf 1619 4521 1641\nf 1620 1642 1643\nf 1620 1643 1621\nf 1621 1643 1644\nf 1621 1644 1622\nf 1622 1644 1645\nf 1622 1645 1623\nf 1623 1645 1646\nf 1623 1646 1624\nf 1624 1646 1647\nf 1624 1647 1625\nf 1625 1647 1648\nf 1625 1648 1626\nf 1626 1648 1650\nf 1626 1650 1627\nf 1627 1650 1652\nf 1627 1652 1628\nf 1628 1652 1653\nf 1628 1653 1629\nf 1629 1653 1654\nf 1629 1654 1630\nf 1630 1654 1655\nf 1630 1655 1631\nf 1631 1655 4531\nf 1631 4531 4523\nf 1632 1656 1657\nf 1632 1657 1633\nf 1632 4516 4524\nf 1632 4524 1656\nf 1633 1657 1658\nf 1633 1658 1634\nf 1634 1658 1659\nf 1634 1659 1635\nf 1635 1659 1660\nf 1635 1660 1636\nf 1636 1660 1661\nf 1636 1661 1637\nf 1637 1661 1662\nf 1637 1662 1638\nf 1638 1662 1663\nf 1638 1663 1639\nf 1639 1663 1664\nf 1639 1664 1640\nf 1640 1664 4534\nf 1640 4534 4526\nf 1641 1665 1666\nf 1641 1666 1642\nf 1641 4521 4529\nf 1641 4529 1665\nf 1642 1666 1667\nf 1642 1667 1643\nf 1643 1667 1668\nf 1643 1668 1644\nf 1644 1668 1669\nf 1644 1669 1645\nf 1645 1669 1670\nf 1645 1670 1646\nf 1646 1670 1671\nf 1646 1671 1647\nf 1647 1671 1673\nf 1647 1673 1648\nf 1648 1673 1650\nf 1649 1650 1673\nf 1649 1651 1650\nf 1649 1673 1672\nf 1650 1651 1652\nf 1651 1674 1652\nf 1652 1674 1676\nf 1652 1676 1653\nf 1653 1676 1677\nf 1653 1677 1654\nf 1654 1677 1678\nf 1654 1678 1655\nf 1655 1678 4539\nf 1655 4539 4531\nf 1656 1679 1680\nf 1656 1680 1657\nf 1656 4524 4532\nf 1656 4532 1679\nf 1657 1680 1681\nf 1657 1681 1658\nf 1658 1681 1682\nf 1658 1682 1659\nf 1659 1682 1683\nf 1659 1683 1660\nf 1660 1683 1684\nf 1660 1684 1661\nf 1661 1684 1685\nf 1661 1685 1662\nf 1662 1685 1686\nf 1662 1686 1663\nf 1663 1686 1687\nf 1663 1687 1664\nf 1664 1687 4542\nf 1664 4542 4534\nf 1665 1688 1689\nf 1665 1689 1666\nf 1665 4529 4537\nf 1665 4537 1688\nf 1666 1689 1690\nf 1666 1690 1667\nf 1667 1690 1691\nf 1667 1691 1668\nf 1668 1691 1692\nf 1668 1692 1669\nf 1669 1692 1693\nf 1669 1693 1670\nf 1670 1693 1694\nf 1670 1694 1671\nf 1671 1694 1696\nf 1671 1696 1673\nf 1672 1673 1696\nf 1672 1696 1695\nf 1674 1675 1676\nf 1675 1697 1676\nf 1676 1697 1698\nf 1676 1698 1677\nf 1677 1698 1699\nf 1677 1699 1678\nf 1678 1699 4547\nf 1678 4547 4539\nf 1679 1700 1701\nf 1679 1701 1680\nf 1679 4532 4540\nf 1679 4540 1700\nf 1680 1701 1702\nf 1680 1702 1681\nf 1681 1702 1703\nf 1681 1703 1682\nf 1682 1703 1704\nf 1682 1704 1683\nf 1683 1704 1705\nf 1683 1705 1684\nf 1684 1705 1706\nf 1684 1706 1685\nf 1685 1706 1707\nf 1685 1707 1686\nf 1686 1707 1708\nf 1686 1708 1687\nf 1687 1708 4550\nf 1687 4550 4542\nf 1688 1709 1710\nf 1688 1710 1689\nf 1688 4537 4545\nf 1688 4545 1709\nf 1689 1710 1711\nf 1689 1711 1690\nf 1690 1711 1712\nf 1690 1712 1691\nf 1691 1712 1713\nf 1691 1713 1692\nf 1692 1713 1714\nf 1692 1714 1693\nf 1693 1714 1715\nf 1693 1715 1694\nf 1694 1715 1717\nf 1694 1717 1696\nf 1695 1696 1717\nf 1695 1717 1716\nf 1697 1718 1698\nf 1698 1718 1719\nf 1698 1719 1720\nf 1698 1720 1699\nf 1699 1720 4556\nf 1699 4556 4547\nf 1700 1721 1722\nf 1700 1722 1701\nf 1700 4540 4548\nf 1700 4548 1721\nf 1701 1722 1723\nf 1701 1723 1702\nf 1702 1723 1724\nf 1702 1724 1703\nf 1703 1724 1725\nf 1703 1725 1704\nf 1704 1725 1726\nf 1704 1726 1705\nf 1705 1726 1727\nf 1705 1727 1706\nf 1706 1727 1728\nf 1706 1728 1707\nf 1707 1728 1729\nf 1707 1729 1708\nf 1708 1729 4559\nf 1708 4559 4550\nf 1709 1730 1710\nf 1709 4545 4553\nf 1709 4553 4555\nf 1709 4555 1730\nf 1710 1730 1731\nf 1710 1731 1711\nf 1711 1731 1732\nf 1711 1732 1712\nf 1712 1732 1733\nf 1712 1733 1713\nf 1713 1733 1734\nf 1713 1734 1714\nf 1714 1734 1735\nf 1714 1735 1715\nf 1715 1735 1737\nf 1715 1737 1717\nf 1716 1717 1737\nf 1716 1737 1736\nf 1718 1738 1719\nf 1719 1738 1739\nf 1719 1739 1740\nf 1719 1740 1720\nf 1720 1740 4565\nf 1720 4565 4556\nf 1721 1741 1742\nf 1721 1742 1722\nf 1721 4548 4557\nf 1721 4557 1741\nf 1722 1742 1743\nf 1722 1743 1723\nf 1723 1743 1744\nf 1723 1744 1724\nf 1724 1744 1745\nf 1724 1745 1725\nf 1725 1745 1746\nf 1725 1746 1726\nf 1726 1746 1747\nf 1726 1747 1727\nf 1727 1747 1748\nf 1727 1748 1728\nf 1728 1748 1749\nf 1728 1749 1729\nf 1729 1749 4568\nf 1729 4568 4559\nf 1730 1750 1751\nf 1730 1751 1731\nf 1730 4555 4563\nf 1730 4563 1750\nf 1731 1751 1752\nf 1731 1752 1732\nf 1732 1752 1753\nf 1732 1753 1733\nf 1733 1753 1754\nf 1733 1754 1734\nf 1734 1754 1755\nf 1734 1755 1735\nf 1735 1755 1757\nf 1735 1757 1737\nf 1736 1737 1757\nf 1736 1757 1756\nf 1738 1758 1739\nf 1739 1758 1760\nf 1739 1760 1761\nf 1739 1761 1740\nf 1740 1761 4574\nf 1740 4574 4565\nf 1741 1762 1763\nf 1741 1763 1742\nf 1741 4557 4566\nf 1741 4566 1762\nf 1742 1763 1764\nf 1742 1764 1743\nf 1743 1764 1765\nf 1743 1765 1744\nf 1744 1765 1766\nf 1744 1766 1745\nf 1745 1766 1767\nf 1745 1767 1746\nf 1746 1767 1768\nf 1746 1768 1747\nf 1747 1768 1769\nf 1747 1769 1748\nf 1748 1769 1770\nf 1748 1770 1749\nf 1749 1770 4576\nf 1749 4576 4568\nf 1750 1771 1772\nf 1750 1772 1751\nf 1750 4563 4572\nf 1750 4572 1771\nf 1751 1772 1773\nf 1751 1773 1752\nf 1752 1773 1774\nf 1752 1774 1753\nf 1753 1774 1775\nf 1753 1775 1754\nf 1754 1775 1776\nf 1754 1776 1755\nf 1755 1776 1778\nf 1755 1778 1757\nf 1756 1757 1778\nf 1756 1778 1777\nf 1758 1759 1760\nf 1759 1780 1782\nf 1759 1782 1760\nf 1760 1782 1783\nf 1760 1783 1784\nf 1760 1784 1761\nf 1761 1784 4583\nf 1761 4583 4574\nf 1762 1785 1786\nf 1762 1786 1763\nf 1762 4566 4575\nf 1762 4575 1785\nf 1763 1786 1787\nf 1763 1787 1764\nf 1764 1787 1788\nf 1764 1788 1765\nf 1765 1788 1789\nf 1765 1789 1766\nf 1766 1789 1790\nf 1766 1790 1767\nf 1767 1790 1791\nf 1767 1791 1768\nf 1768 1791 1792\nf 1768 1792 1769\nf 1769 1792 1793\nf 1769 1793 1770\nf 1770 1793 4585\nf 1770 4585 4576\nf 1771 1794 1772\nf 1771 4572 4580\nf 1771 4580 4582\nf 1771 4582 1794\nf 1772 1794 1795\nf 1772 1795 1773\nf 1773 1795 1796\nf 1773 1796 1774\nf 1774 1796 1797\nf 1774 1797 1775\nf 1775 1797 1798\nf 1775 1798 1776\nf 1776 1798 1799\nf 1776 1799 1778\nf 1777 1778 1800\nf 1777 1800 1779\nf 1778 1799 1800\nf 1779 1800 1801\nf 1779 1801 1781\nf 1780 1781 1782\nf 1781 1801 1782\nf 1782 1801 1802\nf 1782 1802 1803\nf 1782 1803 1783\nf 1783 1803 1804\nf 1783 1804 1784\nf 1784 1804 4592\nf 1784 4592 4583\nf 1785 1805 1806\nf 1785 1806 1786\nf 1785 4575 4584\nf 1785 4584 1805\nf 1786 1806 1807\nf 1786 1807 1787\nf 1787 1807 1808\nf 1787 1808 1788\nf 1788 1808 1809\nf 1788 1809 1789\nf 1789 1809 1810\nf 1789 1810 1790\nf 1790 1810 1811\nf 1790 1811 1791\nf 1791 1811 1812\nf 1791 1812 1792\nf 1792 1812 1813\nf 1792 1813 1793\nf 1793 1813 4595\nf 1793 4595 4585\nf 1794 1814 1815\nf 1794 1815 1795\nf 1794 4582 4590\nf 1794 4590 1814\nf 1795 1815 1816\nf 1795 1816 1796\nf 1796 1816 1817\nf 1796 1817 1797\nf 1797 1817 1818\nf 1797 1818 1798\nf 1798 1818 1819\nf 1798 1819 1799\nf 1799 1819 1820\nf 1799 1820 1800\nf 1800 1820 1821\nf 1800 1821 1801\nf 1801 1821 1822\nf 1801 1822 1802\nf 1802 1822 1823\nf 1802 1823 1803\nf 1803 1823 1804\nf 1804 1823 4602\nf 1804 4593 4592\nf 1804 4602 4593\nf 1805 1824 1825\nf 1805 1825 1806\nf 1805 4584 4594\nf 1805 4594 1824\nf 1806 1825 1826\nf 1806 1826 1807\nf 1807 1826 1827\nf 1807 1827 1808\nf 1808 1827 1828\nf 1808 1828 1809\nf 1809 1828 1829\nf 1809 1829 1810\nf 1810 1829 1830\nf 1810 1830 1811\nf 1811 1830 1831\nf 1811 1831 1812\nf 1812 1831 1832\nf 1812 1832 1813\nf 1813 1832 4606\nf 1813 4606 4595\nf 1814 1833 1834\nf 1814 1834 1815\nf 1814 4590 4600\nf 1814 4600 1833\nf 1815 1834 1835\nf 1815 1835 1816\nf 1816 1835 1836\nf 1816 1836 1817\nf 1817 1836 1837\nf 1817 1837 1818\nf 1818 1837 1838\nf 1818 1838 1819\nf 1819 1838 1839\nf 1819 1839 1820\nf 1820 1839 1840\nf 1820 1840 1821\nf 1821 1840 1841\nf 1821 1841 1822\nf 1822 1841 1842\nf 1822 1842 1823\nf 1823 1842 4614\nf 1823 4614 4602\nf 1824 1843 1825\nf 1824 4594 4604\nf 1824 4604 4605\nf 1824 4605 1843\nf 1825 1843 1844\nf 1825 1844 1826\nf 1826 1844 1845\nf 1826 1845 1827\nf 1827 1845 1846\nf 1827 1846 1828\nf 1828 1846 1847\nf 1828 1847 1829\nf 1829 1847 1848\nf 1829 1848 1830\nf 1830 1848 1849\nf 1830 1849 1831\nf 1831 1849 1832\nf 1832 1849 4619\nf 1832 4607 4606\nf 1832 4619 4607\nf 1833 1850 1851\nf 1833 1851 1834\nf 1833 4600 4612\nf 1833 4612 1850\nf 1834 1851 1852\nf 1834 1852 1835\nf 1835 1852 1853\nf 1835 1853 1836\nf 1836 1853 1854\nf 1836 1854 1837\nf 1837 1854 1855\nf 1837 1855 1838\nf 1838 1855 1856\nf 1838 1856 1839\nf 1839 1856 1857\nf 1839 1857 1840\nf 1840 1857 1858\nf 1840 1858 1841\nf 1841 1858 1859\nf 1841 1859 1842\nf 1842 1859 4629\nf 1842 4629 4614\nf 1843 1860 1861\nf 1843 1861 1844\nf 1843 4605 4616\nf 1843 4616 1860\nf 1844 1861 1862\nf 1844 1862 1845\nf 1845 1862 1863\nf 1845 1863 1846\nf 1846 1863 1864\nf 1846 1864 1847\nf 1847 1864 1848\nf 1848 1864 4633\nf 1848 4618 1849\nf 1848 4633 4618\nf 1849 4618 4620\nf 1849 4620 4619\nf 1850 1865 1851\nf 1850 4612 4626\nf 1850 4626 4628\nf 1850 4628 1865\nf 1851 1865 1866\nf 1851 1866 1852\nf 1852 1866 1867\nf 1852 1867 1853\nf 1853 1867 1868\nf 1853 1868 1854\nf 1854 1868 1869\nf 1854 1869 1855\nf 1855 1869 1870\nf 1855 1870 1856\nf 1856 1870 1871\nf 1856 1871 1857\nf 1857 1871 1872\nf 1857 1872 1858\nf 1858 1872 1873\nf 1858 1873 1859\nf 1859 1873 4645\nf 1859 4645 4629\nf 1860 1874 1875\nf 1860 1875 1861\nf 1860 4616 4631\nf 1860 4631 1874\nf 1861 1875 1876\nf 1861 1876 1862\nf 1862 1876 1877\nf 1862 1877 1863\nf 1863 1877 1878\nf 1863 1878 1864\nf 1864 1878 4650\nf 1864 4650 4633\nf 1865 1879 1880\nf 1865 1880 1881\nf 1865 1881 1866\nf 1865 4628 4642\nf 1865 4642 1879\nf 1866 1881 1882\nf 1866 1882 1867\nf 1867 1882 1883\nf 1867 1883 1868\nf 1868 1883 1884\nf 1868 1884 1869\nf 1869 1884 1885\nf 1869 1885 1870\nf 1870 1885 1886\nf 1870 1886 1871\nf 1871 1886 1887\nf 1871 1887 1872\nf 1872 1887 1888\nf 1872 1888 1873\nf 1873 1888 4664\nf 1873 4664 4645\nf 1874 1889 1890\nf 1874 1890 1891\nf 1874 1891 1875\nf 1874 4631 4647\nf 1874 4647 1889\nf 1875 1891 1892\nf 1875 1892 1876\nf 1876 1892 1893\nf 1876 1893 1877\nf 1877 1893 1894\nf 1877 1894 1878\nf 1878 1894 1895\nf 1878 1895 4651\nf 1878 4651 4650\nf 1879 1897 1898\nf 1879 1898 1899\nf 1879 1899 1880\nf 1879 4642 4643\nf 1879 4643 4661\nf 1879 4661 1897\nf 1880 1899 1900\nf 1880 1900 1881\nf 1881 1900 1901\nf 1881 1901 1882\nf 1882 1901 1902\nf 1882 1902 1883\nf 1883 1902 1903\nf 1883 1903 1884\nf 1884 1903 1904\nf 1884 1904 1885\nf 1885 1904 1905\nf 1885 1905 1886\nf 1886 1905 1906\nf 1886 1906 1887\nf 1887 1906 1907\nf 1887 1907 1888\nf 1888 1907 1908\nf 1888 1908 4665\nf 1888 4665 4664\nf 1889 1909 1910\nf 1889 1910 1890\nf 1889 4647 4648\nf 1889 4648 4667\nf 1889 4667 1909\nf 1890 1910 1911\nf 1890 1911 1891\nf 1891 1911 1912\nf 1891 1912 1892\nf 1892 1912 1913\nf 1892 1913 1893\nf 1893 1913 1914\nf 1893 1914 1894\nf 1894 1914 1915\nf 1894 1915 1895\nf 1895 1896 4653\nf 1895 1915 1916\nf 1895 1916 1896\nf 1895 4653 4651\nf 1896 1916 4679\nf 1896 4668 4653\nf 1896 4679 4668\nf 1897 1917 1918\nf 1897 1918 1898\nf 1897 4661 4662\nf 1897 4662 4674\nf 1897 4674 1917\nf 1898 1918 1919\nf 1898 1919 1899\nf 1899 1919 1920\nf 1899 1920 1900\nf 1900 1920 1921\nf 1900 1921 1901\nf 1901 1921 1922\nf 1901 1922 1902\nf 1902 1922 1923\nf 1902 1923 1903\nf 1903 1923 1924\nf 1903 1924 1904\nf 1904 1924 1925\nf 1904 1925 1905\nf 1905 1925 1926\nf 1905 1926 1906\nf 1906 1926 1927\nf 1906 1927 1907\nf 1907 1927 1928\nf 1907 1928 1908\nf 1908 1928 4689\nf 1908 4676 4665\nf 1908 4689 4676\nf 1909 1929 1930\nf 1909 1930 1910\nf 1909 4667 4677\nf 1909 4677 1929\nf 1910 1930 1931\nf 1910 1931 1911\nf 1911 1931 1932\nf 1911 1932 1912\nf 1912 1932 1933\nf 1912 1933 1913\nf 1913 1933 1934\nf 1913 1934 1914\nf 1914 1934 1935\nf 1914 1935 1915\nf 1915 1935 1936\nf 1915 1936 1916\nf 1916 1936 1937\nf 1916 1937 4680\nf 1916 4680 4679\nf 1917 1938 1939\nf 1917 1939 1918\nf 1917 4674 4687\nf 1917 4687 1938\nf 1918 1939 1940\nf 1918 1940 1919\nf 1919 1940 1941\nf 1919 1941 1920\nf 1920 1941 1942\nf 1920 1942 1921\nf 1921 1942 1943\nf 1921 1943 1922\nf 1922 1943 1944\nf 1922 1944 1923\nf 1923 1944 1945\nf 1923 1945 1924\nf 1924 1945 1946\nf 1924 1946 1925\nf 1925 1946 1947\nf 1925 1947 1926\nf 1926 1947 1948\nf 1926 1948 1927\nf 1927 1948 1949\nf 1927 1949 1928\nf 1928 1949 4701\nf 1928 4701 4689\nf 1929 1950 1951\nf 1929 1951 1930\nf 1929 4677 4690\nf 1929 4690 1950\nf 1930 1951 1952\nf 1930 1952 1931\nf 1931 1952 1953\nf 1931 1953 1932\nf 1932 1953 1954\nf 1932 1954 1933\nf 1933 1954 1955\nf 1933 1955 1934\nf 1934 1955 1956\nf 1934 1956 1935\nf 1935 1956 1957\nf 1935 1957 1936\nf 1936 1957 1958\nf 1936 1958 1937\nf 1937 1958 4704\nf 1937 4692 4680\nf 1937 4704 4692\nf 1938 1959 1960\nf 1938 1960 1961\nf 1938 1961 1939\nf 1938 4687 4698\nf 1938 4698 1959\nf 1939 1961 1962\nf 1939 1962 1940\nf 1940 1962 1963\nf 1940 1963 1941\nf 1941 1963 1964\nf 1941 1964 1942\nf 1942 1964 1965\nf 1942 1965 1943\nf 1943 1965 1966\nf 1943 1966 1944\nf 1944 1966 1967\nf 1944 1967 1945\nf 1945 1967 1968\nf 1945 1968 1946\nf 1946 1968 1969\nf 1946 1969 1947\nf 1947 1969 1970\nf 1947 1970 1948\nf 1948 1970 1971\nf 1948 1971 1949\nf 1949 1971 4713\nf 1949 4713 4701\nf 1950 1972 1973\nf 1950 1973 1951\nf 1950 4690 4702\nf 1950 4702 1972\nf 1951 1973 1974\nf 1951 1974 1952\nf 1952 1974 1975\nf 1952 1975 1953\nf 1953 1975 1976\nf 1953 1976 1954\nf 1954 1976 1977\nf 1954 1977 1955\nf 1955 1977 1978\nf 1955 1978 1956\nf 1956 1978 1979\nf 1956 1979 1957\nf 1957 1979 1980\nf 1957 1980 1958\nf 1958 1980 4716\nf 1958 4716 4704\nf 1959 1981 1982\nf 1959 1982 1960\nf 1959 4698 4699\nf 1959 4699 4711\nf 1959 4711 1981\nf 1960 1982 1983\nf 1960 1983 1961\nf 1961 1983 1984\nf 1961 1984 1962\nf 1962 1984 1985\nf 1962 1985 1963\nf 1963 1985 1986\nf 1963 1986 1964\nf 1964 1986 1987\nf 1964 1987 1965\nf 1965 1987 1988\nf 1965 1988 1966\nf 1966 1988 1989\nf 1966 1989 1967\nf 1967 1989 1990\nf 1967 1990 1968\nf 1968 1990 1991\nf 1968 1991 1969\nf 1969 1991 1992\nf 1969 1992 1970\nf 1970 1992 1993\nf 1970 1993 1971\nf 1971 1993 4755\nf 1971 4755 4713\nf 1972 1994 1995\nf 1972 1995 1973\nf 1972 4702 4714\nf 1972 4714 1994\nf 1973 1995 1996\nf 1973 1996 1974\nf 1974 1996 1997\nf 1974 1997 1975\nf 1975 1997 1998\nf 1975 1998 1976\nf 1976 1998 1999\nf 1976 1999 1977\nf 1977 1999 2000\nf 1977 2000 1978\nf 1978 2000 2001\nf 1978 2001 1979\nf 1979 2001 2002\nf 1979 2002 1980\nf 1980 2002 2003\nf 1980 2003 4717\nf 1980 4717 4716\nf 1981 2004 2005\nf 1981 2005 2006\nf 1981 2006 1982\nf 1981 4711 4752\nf 1981 4752 2004\nf 1982 2006 2007\nf 1982 2007 1983\nf 1983 2007 2008\nf 1983 2008 1984\nf 1984 2008 2009\nf 1984 2009 1985\nf 1985 2009 2010\nf 1985 2010 1986\nf 1986 2010 2011\nf 1986 2011 1987\nf 1987 2011 2012\nf 1987 2012 1988\nf 1988 2012 2013\nf 1988 2013 1989\nf 1989 2013 2014\nf 1989 2014 1990\nf 1990 2014 2015\nf 1990 2015 1991\nf 1991 2015 2016\nf 1991 2016 1992\nf 1992 2016 2017\nf 1992 2017 1993\nf 1993 2017 4808\nf 1993 4808 4755\nf 1994 2018 2019\nf 1994 2019 1995\nf 1994 4714 4756\nf 1994 4756 2018\nf 1995 2019 2020\nf 1995 2020 1996\nf 1996 2020 2021\nf 1996 2021 1997\nf 1997 2021 2022\nf 1997 2022 1998\nf 1998 2022 2023\nf 1998 2023 1999\nf 1999 2023 2024\nf 1999 2024 2000\nf 2000 2024 2025\nf 2000 2025 2001\nf 2001 2025 2026\nf 2001 2026 2002\nf 2002 2026 2027\nf 2002 2027 2003\nf 2003 2027 4813\nf 2003 4758 4717\nf 2003 4813 4758\nf 2004 2028 2029\nf 2004 2029 2005\nf 2004 4752 4753\nf 2004 4753 4806\nf 2004 4806 2028\nf 2005 2029 2030\nf 2005 2030 2006\nf 2006 2030 2031\nf 2006 2031 2007\nf 2007 2031 2032\nf 2007 2032 2008\nf 2008 2032 2033\nf 2008 2033 2009\nf 2009 2033 2034\nf 2009 2034 2010\nf 2010 2034 2035\nf 2010 2035 2011\nf 2011 2035 2036\nf 2011 2036 2012\nf 2012 2036 2037\nf 2012 2037 2013\nf 2013 2037 2038\nf 2013 2038 2014\nf 2014 2038 2039\nf 2014 2039 2015\nf 2015 2039 2040\nf 2015 2040 2016\nf 2016 2040 2017\nf 2017 2040 4894\nf 2017 4809 4808\nf 2017 4894 4809\nf 2018 2041 2019\nf 2018 4756 4810\nf 2018 4810 4812\nf 2018 4812 2041\nf 2019 2041 2042\nf 2019 2042 2020\nf 2020 2042 2043\nf 2020 2043 2021\nf 2021 2043 2044\nf 2021 2044 2022\nf 2022 2044 2045\nf 2022 2045 2023\nf 2023 2045 2046\nf 2023 2046 2024\nf 2024 2046 2047\nf 2024 2047 2025\nf 2025 2047 2048\nf 2025 2048 2026\nf 2026 2048 2049\nf 2026 2049 2027\nf 2027 2049 4899\nf 2027 4899 4813\nf 2028 2050 2051\nf 2028 2051 2029\nf 2028 4806 4892\nf 2028 4892 2050\nf 2029 2051 2052\nf 2029 2052 2030\nf 2030 2052 2053\nf 2030 2053 2031\nf 2031 2053 2054\nf 2031 2054 2032\nf 2032 2054 2055\nf 2032 2055 2033\nf 2033 2055 2056\nf 2033 2056 2034\nf 2034 2056 2057\nf 2034 2057 2035\nf 2035 2057 2058\nf 2035 2058 2036\nf 2036 2058 2059\nf 2036 2059 2037\nf 2037 2059 2060\nf 2037 2060 2038\nf 2038 2060 2061\nf 2038 2061 2039\nf 2039 2061 2062\nf 2039 2062 2040\nf 2040 2062 4982\nf 2040 4982 4894\nf 2041 2063 2064\nf 2041 2064 2042\nf 2041 4812 4897\nf 2041 4897 2063\nf 2042 2064 2065\nf 2042 2065 2043\nf 2043 2065 2066\nf 2043 2066 2044\nf 2044 2066 2067\nf 2044 2067 2045\nf 2045 2067 2068\nf 2045 2068 2046\nf 2046 2068 2069\nf 2046 2069 2047\nf 2047 2069 2070\nf 2047 2070 2048\nf 2048 2070 2071\nf 2048 2071 2049\nf 2049 2071 4987\nf 2049 4987 4899\nf 2050 2072 2073\nf 2050 2073 2074\nf 2050 2074 2051\nf 2050 4892 4979\nf 2050 4979 2072\nf 2051 2074 2075\nf 2051 2075 2052\nf 2052 2075 2076\nf 2052 2076 2053\nf 2053 2076 2077\nf 2053 2077 2054\nf 2054 2077 2078\nf 2054 2078 2055\nf 2055 2078 2079\nf 2055 2079 2056\nf 2056 2079 2080\nf 2056 2080 2057\nf 2057 2080 2081\nf 2057 2081 2058\nf 2058 2081 2082\nf 2058 2082 2059\nf 2059 2082 2083\nf 2059 2083 2060\nf 2060 2083 2084\nf 2060 2084 2061\nf 2061 2084 2085\nf 2061 2085 2062\nf 2062 2085 5069\nf 2062 5069 4982\nf 2063 2086 2087\nf 2063 2087 2064\nf 2063 4897 4985\nf 2063 4985 2086\nf 2064 2087 2088\nf 2064 2088 2065\nf 2065 2088 2089\nf 2065 2089 2066\nf 2066 2089 2090\nf 2066 2090 2067\nf 2067 2090 2091\nf 2067 2091 2068\nf 2068 2091 2092\nf 2068 2092 2069\nf 2069 2092 2093\nf 2069 2093 2070\nf 2070 2093 2094\nf 2070 2094 2071\nf 2071 2094 5075\nf 2071 5075 4987\nf 2072 2095 2073\nf 2072 4979 4980\nf 2072 4980 5066\nf 2072 5066 5068\nf 2072 5068 2095\nf 2073 2095 2096\nf 2073 2096 2074\nf 2074 2096 2097\nf 2074 2097 2075\nf 2075 2097 2098\nf 2075 2098 2076\nf 2076 2098 2099\nf 2076 2099 2077\nf 2077 2099 2100\nf 2077 2100 2078\nf 2078 2100 2101\nf 2078 2101 2079\nf 2079 2101 2102\nf 2079 2102 2080\nf 2080 2102 2103\nf 2080 2103 2081\nf 2081 2103 2104\nf 2081 2104 2082\nf 2082 2104 2105\nf 2082 2105 2083\nf 2083 2105 2106\nf 2083 2106 2084\nf 2084 2106 2085\nf 2085 2106 5157\nf 2085 5070 5069\nf 2085 5157 5070\nf 2086 2107 2108\nf 2086 2108 2087\nf 2086 4985 5073\nf 2086 5073 2107\nf 2087 2108 2109\nf 2087 2109 2088\nf 2088 2109 2110\nf 2088 2110 2089\nf 2089 2110 2111\nf 2089 2111 2090\nf 2090 2111 2112\nf 2090 2112 2091\nf 2091 2112 2113\nf 2091 2113 2092\nf 2092 2113 2114\nf 2092 2114 2093\nf 2093 2114 2115\nf 2093 2115 2094\nf 2094 2115 5163\nf 2094 5163 5075\nf 2095 2116 2117\nf 2095 2117 2096\nf 2095 5068 5155\nf 2095 5155 2116\nf 2096 2117 2118\nf 2096 2118 2097\nf 2097 2118 2119\nf 2097 2119 2098\nf 2098 2119 2120\nf 2098 2120 2099\nf 2099 2120 2121\nf 2099 2121 2100\nf 2100 2121 2122\nf 2100 2122 2101\nf 2101 2122 2123\nf 2101 2123 2102\nf 2102 2123 2124\nf 2102 2124 2103\nf 2103 2124 2125\nf 2103 2125 2104\nf 2104 2125 2126\nf 2104 2126 2105\nf 2105 2126 2127\nf 2105 2127 2106\nf 2106 2127 5255\nf 2106 5255 5157\nf 2107 2128 2129\nf 2107 2129 2108\nf 2107 5073 5161\nf 2107 5161 2128\nf 2108 2129 2130\nf 2108 2130 2109\nf 2109 2130 2131\nf 2109 2131 2110\nf 2110 2131 2132\nf 2110 2132 2111\nf 2111 2132 2133\nf 2111 2133 2112\nf 2112 2133 2134\nf 2112 2134 2113\nf 2113 2134 2135\nf 2113 2135 2114\nf 2114 2135 2136\nf 2114 2136 2115\nf 2115 2136 5260\nf 2115 5260 5163\nf 2116 5155 5243\nf 2116 5243 5245\nf 2116 5245 2117\nf 2117 5245 5246\nf 2117 5246 2118\nf 2118 5246 5247\nf 2118 5247 2119\nf 2119 5247 5248\nf 2119 5248 2120\nf 2120 5248 5249\nf 2120 5249 2121\nf 2121 5249 5250\nf 2121 5250 2122\nf 2122 5250 5251\nf 2122 5251 2123\nf 2123 5251 5252\nf 2123 5252 2124\nf 2124 5252 5253\nf 2124 5253 2125\nf 2125 2137 2126\nf 2125 5253 5254\nf 2125 5254 2137\nf 2126 2137 2138\nf 2126 2138 2127\nf 2127 2138 5354\nf 2127 5354 5255\nf 2128 2139 2140\nf 2128 2140 2129\nf 2128 5161 5258\nf 2128 5258 2139\nf 2129 2140 2141\nf 2129 2141 2130\nf 2130 2141 2142\nf 2130 2142 2131\nf 2131 2142 2143\nf 2131 2143 2132\nf 2132 2143 2144\nf 2132 2144 2133\nf 2133 2144 2145\nf 2133 2145 2134\nf 2134 2145 2146\nf 2134 2146 2135\nf 2135 2146 2136\nf 2136 2146 5359\nf 2136 5261 5260\nf 2136 5359 5261\nf 2137 2147 2148\nf 2137 2148 2149\nf 2137 2149 2138\nf 2137 5254 5351\nf 2137 5351 2147\nf 2138 2149 5452\nf 2138 5452 5354\nf 2139 2150 2151\nf 2139 2151 2140\nf 2139 5258 5357\nf 2139 5357 2150\nf 2140 2151 2152\nf 2140 2152 2141\nf 2141 2152 2153\nf 2141 2153 2142\nf 2142 2153 2154\nf 2142 2154 2143\nf 2143 2154 2155\nf 2143 2155 2144\nf 2144 2155 2156\nf 2144 2156 2145\nf 2145 2156 2157\nf 2145 2157 2146\nf 2146 2157 5457\nf 2146 5457 5359\nf 2147 2158 2148\nf 2147 5351 5352\nf 2147 5352 5449\nf 2147 5449 5451\nf 2147 5451 2158\nf 2148 2158 2159\nf 2148 2159 2149\nf 2149 2159 5550\nf 2149 5550 5452\nf 2150 2160 2161\nf 2150 2161 2162\nf 2150 2162 2151\nf 2150 5357 5454\nf 2150 5454 2160\nf 2151 2162 2163\nf 2151 2163 2152\nf 2152 2163 2164\nf 2152 2164 2153\nf 2153 2164 2165\nf 2153 2165 2154\nf 2154 2165 2166\nf 2154 2166 2155\nf 2155 2166 2167\nf 2155 2167 2156\nf 2156 2167 2168\nf 2156 2168 2157\nf 2157 2168 5554\nf 2157 5554 5457\nf 2158 2169 2170\nf 2158 2170 2159\nf 2158 5451 5548\nf 2158 5548 2169\nf 2159 2170 5645\nf 2159 5645 5550\nf 2160 2171 2172\nf 2160 2172 2161\nf 2160 5454 5455\nf 2160 5455 5552\nf 2160 5552 2171\nf 2161 2172 2173\nf 2161 2173 2162\nf 2162 2173 2174\nf 2162 2174 2163\nf 2163 2174 2175\nf 2163 2175 2164\nf 2164 2175 2176\nf 2164 2176 2165\nf 2165 2176 2177\nf 2165 2177 2166\nf 2166 2177 2178\nf 2166 2178 2167\nf 2167 2178 2179\nf 2167 2179 2168\nf 2168 2179 5650\nf 2168 5650 5554\nf 2169 5548 5642\nf 2169 5642 5644\nf 2169 5644 2170\nf 2170 5644 5646\nf 2170 5646 5645\nf 2171 2180 2181\nf 2171 2181 2172\nf 2171 5552 5648\nf 2171 5648 2180\nf 2172 2181 2182\nf 2172 2182 2173\nf 2173 2182 2183\nf 2173 2183 2174\nf 2174 2183 2184\nf 2174 2184 2175\nf 2175 2184 2185\nf 2175 2185 2176\nf 2176 2185 2186\nf 2176 2186 2177\nf 2177 2186 2187\nf 2177 2187 2178\nf 2178 2187 2188\nf 2178 2188 2179\nf 2179 2188 2189\nf 2179 2189 5651\nf 2179 5651 5650\nf 2180 2190 2191\nf 2180 2191 2181\nf 2180 5648 5729\nf 2180 5729 2190\nf 2181 2191 2192\nf 2181 2192 2182\nf 2182 2192 2193\nf 2182 2193 2183\nf 2183 2193 2194\nf 2183 2194 2184\nf 2184 2194 2195\nf 2184 2195 2185\nf 2185 2195 2196\nf 2185 2196 2186\nf 2186 2196 2197\nf 2186 2197 2187\nf 2187 2197 2198\nf 2187 2198 2188\nf 2188 2198 2199\nf 2188 2199 2189\nf 2189 2199 5783\nf 2189 5731 5651\nf 2189 5783 5731\nf 2190 2200 2201\nf 2190 2201 2191\nf 2190 5729 5781\nf 2190 5781 2200\nf 2191 2201 2202\nf 2191 2202 2192\nf 2192 2202 2203\nf 2192 2203 2193\nf 2193 2203 2204\nf 2193 2204 2194\nf 2194 2204 2205\nf 2194 2205 2195\nf 2195 2205 2206\nf 2195 2206 2196\nf 2196 2206 2207\nf 2196 2207 2197\nf 2197 2207 2208\nf 2197 2208 2198\nf 2198 2208 2209\nf 2198 2209 2199\nf 2199 2209 5811\nf 2199 5811 5783\nf 2200 2210 2201\nf 2200 5781 5809\nf 2200 5809 5810\nf 2200 5810 2210\nf 2201 2210 2211\nf 2201 2211 2202\nf 2202 2211 2212\nf 2202 2212 2203\nf 2203 2212 2213\nf 2203 2213 2204\nf 2204 2213 2214\nf 2204 2214 2205\nf 2205 2214 2215\nf 2205 2215 2206\nf 2206 2215 2216\nf 2206 2216 2207\nf 2207 2216 2217\nf 2207 2217 2208\nf 2208 2217 2218\nf 2208 2218 2209\nf 2209 2218 5823\nf 2209 5823 5811\nf 2210 2219 2220\nf 2210 2220 2211\nf 2210 5810 5821\nf 2210 5821 2219\nf 2211 2220 2221\nf 2211 2221 2212\nf 2212 2221 2222\nf 2212 2222 2213\nf 2213 2222 2223\nf 2213 2223 2214\nf 2214 2223 2224\nf 2214 2224 2215\nf 2215 2224 2225\nf 2215 2225 2216\nf 2216 2225 2226\nf 2216 2226 2217\nf 2217 2226 2227\nf 2217 2227 2218\nf 2218 2227 5831\nf 2218 5831 5823\nf 2219 2228 2229\nf 2219 2229 2220\nf 2219 5821 5829\nf 2219 5829 2228\nf 2220 2229 2230\nf 2220 2230 2221\nf 2221 2230 2231\nf 2221 2231 2222\nf 2222 2231 2232\nf 2222 2232 2223\nf 2223 2232 2233\nf 2223 2233 2224\nf 2224 2233 2234\nf 2224 2234 2225\nf 2225 2234 2235\nf 2225 2235 2226\nf 2226 2235 2227\nf 2227 2235 5838\nf 2227 5832 5831\nf 2227 5838 5832\nf 2228 2236 2237\nf 2228 2237 2229\nf 2228 5829 5836\nf 2228 5836 2236\nf 2229 2237 2238\nf 2229 2238 2230\nf 2230 2238 2239\nf 2230 2239 2231\nf 2231 2239 2240\nf 2231 2240 2232\nf 2232 2240 2241\nf 2232 2241 2233\nf 2233 2241 2242\nf 2233 2242 2234\nf 2234 2242 2243\nf 2234 2243 2235\nf 2235 2243 5844\nf 2235 5844 5838\nf 2236 2244 2245\nf 2236 2245 2237\nf 2236 5836 5842\nf 2236 5842 2244\nf 2237 2245 2246\nf 2237 2246 2238\nf 2238 2246 2247\nf 2238 2247 2239\nf 2239 2247 2248\nf 2239 2248 2240\nf 2240 2248 2249\nf 2240 2249 2241\nf 2241 2249 2250\nf 2241 2250 2242\nf 2242 2250 2243\nf 2243 2250 5850\nf 2243 5845 5844\nf 2243 5850 5845\nf 2244 2251 2252\nf 2244 2252 2245\nf 2244 5842 5848\nf 2244 5848 2251\nf 2245 2252 2253\nf 2245 2253 2246\nf 2246 2253 2254\nf 2246 2254 2247\nf 2247 2254 2255\nf 2247 2255 2248\nf 2248 2255 2256\nf 2248 2256 2249\nf 2249 2256 2257\nf 2249 2257 2250\nf 2250 2257 5856\nf 2250 5856 5850\nf 2251 2258 2259\nf 2251 2259 2252\nf 2251 5848 5854\nf 2251 5854 2258\nf 2252 2259 2260\nf 2252 2260 2253\nf 2253 2260 2261\nf 2253 2261 2254\nf 2254 2261 2262\nf 2254 2262 2255\nf 2255 2262 2263\nf 2255 2263 2256\nf 2256 2263 2264\nf 2256 2264 2257\nf 2257 2264 5861\nf 2257 5861 5856\nf 2258 2265 2266\nf 2258 2266 2259\nf 2258 5854 5859\nf 2258 5859 2265\nf 2259 2266 2267\nf 2259 2267 2260\nf 2260 2267 2268\nf 2260 2268 2261\nf 2261 2268 2269\nf 2261 2269 2262\nf 2262 2269 2270\nf 2262 2270 2263\nf 2263 2270 2271\nf 2263 2271 2264\nf 2264 2271 5866\nf 2264 5866 5861\nf 2265 2272 2273\nf 2265 2273 2266\nf 2265 5859 5864\nf 2265 5864 2272\nf 2266 2273 2274\nf 2266 2274 2267\nf 2267 2274 2275\nf 2267 2275 2268\nf 2268 2275 2276\nf 2268 2276 2269\nf 2269 2276 2277\nf 2269 2277 2270\nf 2270 2277 2278\nf 2270 2278 2271\nf 2271 2278 5872\nf 2271 5872 5866\nf 2272 2279 2273\nf 2272 5864 5869\nf 2272 5869 5871\nf 2272 5871 2279\nf 2273 2279 2280\nf 2273 2280 2274\nf 2274 2280 2281\nf 2274 2281 2275\nf 2275 2281 2282\nf 2275 2282 2276\nf 2276 2282 2283\nf 2276 2283 2277\nf 2277 2283 2284\nf 2277 2284 2278\nf 2278 2284 5878\nf 2278 5878 5872\nf 2279 2285 2286\nf 2279 2286 2280\nf 2279 5871 5876\nf 2279 5876 2285\nf 2280 2286 2287\nf 2280 2287 2281\nf 2281 2287 2288\nf 2281 2288 2282\nf 2282 2288 2289\nf 2282 2289 2283\nf 2283 2289 2290\nf 2283 2290 2284\nf 2284 2290 5884\nf 2284 5884 5878\nf 2285 2291 2292\nf 2285 2292 2286\nf 2285 5876 5882\nf 2285 5882 2291\nf 2286 2292 2293\nf 2286 2293 2287\nf 2287 2293 2294\nf 2287 2294 2288\nf 2288 2294 2295\nf 2288 2295 2289\nf 2289 2295 2296\nf 2289 2296 2290\nf 2290 2296 5891\nf 2290 5891 5884\nf 2291 2297 2298\nf 2291 2298 2299\nf 2291 2299 2292\nf 2291 5882 5888\nf 2291 5888 2297\nf 2292 2299 2300\nf 2292 2300 2293\nf 2293 2300 2301\nf 2293 2301 2294\nf 2294 2301 2302\nf 2294 2302 2295\nf 2295 2302 2303\nf 2295 2303 2296\nf 2296 2303 5896\nf 2296 5896 5891\nf 2297 2304 2305\nf 2297 2305 2298\nf 2297 5888 5889\nf 2297 5889 5894\nf 2297 5894 2304\nf 2298 2305 2306\nf 2298 2306 2299\nf 2299 2306 2307\nf 2299 2307 2300\nf 2300 2307 2308\nf 2300 2308 2301\nf 2301 2308 2309\nf 2301 2309 2302\nf 2302 2309 2310\nf 2302 2310 2303\nf 2303 2310 5901\nf 2303 5901 5896\nf 2304 2311 2312\nf 2304 2312 2305\nf 2304 5894 5899\nf 2304 5899 2311\nf 2305 2312 2313\nf 2305 2313 2306\nf 2306 2313 2314\nf 2306 2314 2307\nf 2307 2314 2315\nf 2307 2315 2308\nf 2308 2315 2316\nf 2308 2316 2309\nf 2309 2316 2317\nf 2309 2317 2310\nf 2310 2317 5907\nf 2310 5907 5901\nf 2311 2318 2319\nf 2311 2319 2312\nf 2311 5899 5905\nf 2311 5905 2318\nf 2312 2319 2320\nf 2312 2320 2313\nf 2313 2320 2321\nf 2313 2321 2314\nf 2314 2321 2322\nf 2314 2322 2315\nf 2315 2322 2323\nf 2315 2323 2316\nf 2316 2323 2324\nf 2316 2324 2317\nf 2317 2324 5913\nf 2317 5913 5907\nf 2318 2325 2326\nf 2318 2326 2319\nf 2318 5905 5911\nf 2318 5911 2325\nf 2319 2326 2327\nf 2319 2327 2320\nf 2320 2327 2328\nf 2320 2328 2321\nf 2321 2328 2329\nf 2321 2329 2322\nf 2322 2329 2330\nf 2322 2330 2323\nf 2323 2330 2331\nf 2323 2331 2324\nf 2324 2331 5919\nf 2324 5919 5913\nf 2325 2332 2333\nf 2325 2333 2326\nf 2325 5911 5917\nf 2325 5917 2332\nf 2326 2333 2334\nf 2326 2334 2327\nf 2327 2334 2335\nf 2327 2335 2328\nf 2328 2335 2336\nf 2328 2336 2329\nf 2329 2336 2337\nf 2329 2337 2330\nf 2330 2337 2338\nf 2330 2338 2331\nf 2331 2338 5925\nf 2331 5925 5919\nf 2332 2339 2340\nf 2332 2340 2333\nf 2332 5917 5923\nf 2332 5923 2339\nf 2333 2340 2341\nf 2333 2341 2334\nf 2334 2341 2342\nf 2334 2342 2335\nf 2335 2342 2343\nf 2335 2343 2336\nf 2336 2343 2344\nf 2336 2344 2337\nf 2337 2344 2345\nf 2337 2345 2338\nf 2338 2345 5931\nf 2338 5931 5925\nf 2339 2346 2347\nf 2339 2347 2340\nf 2339 5923 5929\nf 2339 5929 2346\nf 2340 2347 2348\nf 2340 2348 2341\nf 2341 2348 2349\nf 2341 2349 2342\nf 2342 2349 2350\nf 2342 2350 2343\nf 2343 2350 2351\nf 2343 2351 2344\nf 2344 2351 2352\nf 2344 2352 2345\nf 2345 2352 5937\nf 2345 5937 5931\nf 2346 2353 2354\nf 2346 2354 2347\nf 2346 5929 5935\nf 2346 5935 2353\nf 2347 2354 2355\nf 2347 2355 2348\nf 2348 2355 2356\nf 2348 2356 2349\nf 2349 2356 2357\nf 2349 2357 2350\nf 2350 2357 2358\nf 2350 2358 2351\nf 2351 2358 2359\nf 2351 2359 2352\nf 2352 2359 5944\nf 2352 5944 5937\nf 2353 2360 2361\nf 2353 2361 2362\nf 2353 2362 2354\nf 2353 5935 5941\nf 2353 5941 2360\nf 2354 2362 2363\nf 2354 2363 2355\nf 2355 2363 2364\nf 2355 2364 2356\nf 2356 2364 2365\nf 2356 2365 2357\nf 2357 2365 2366\nf 2357 2366 2358\nf 2358 2366 2367\nf 2358 2367 2359\nf 2359 2367 5949\nf 2359 5949 5944\nf 2360 2368 2369\nf 2360 2369 2361\nf 2360 5941 5942\nf 2360 5942 5947\nf 2360 5947 2368\nf 2361 2369 2370\nf 2361 2370 2362\nf 2362 2370 2371\nf 2362 2371 2363\nf 2363 2371 2372\nf 2363 2372 2364\nf 2364 2372 2373\nf 2364 2373 2365\nf 2365 2373 2374\nf 2365 2374 2366\nf 2366 2374 2375\nf 2366 2375 2367\nf 2367 2375 5954\nf 2367 5954 5949\nf 2368 2376 2377\nf 2368 2377 2369\nf 2368 5947 5952\nf 2368 5952 2376\nf 2369 2377 2378\nf 2369 2378 2370\nf 2370 2378 2379\nf 2370 2379 2371\nf 2371 2379 2380\nf 2371 2380 2372\nf 2372 2380 2381\nf 2372 2381 2373\nf 2373 2381 2382\nf 2373 2382 2374\nf 2374 2382 2383\nf 2374 2383 2375\nf 2375 2383 5960\nf 2375 5960 5954\nf 2376 2384 2385\nf 2376 2385 2377\nf 2376 5952 5958\nf 2376 5958 2384\nf 2377 2385 2386\nf 2377 2386 2378\nf 2378 2386 2387\nf 2378 2387 2379\nf 2379 2387 2388\nf 2379 2388 2380\nf 2380 2388 2389\nf 2380 2389 2381\nf 2381 2389 2390\nf 2381 2390 2382\nf 2382 2390 2391\nf 2382 2391 2383\nf 2383 2391 5966\nf 2383 5966 5960\nf 2384 2392 2393\nf 2384 2393 2385\nf 2384 5958 5964\nf 2384 5964 2392\nf 2385 2393 2394\nf 2385 2394 2386\nf 2386 2394 2395\nf 2386 2395 2387\nf 2387 2395 2396\nf 2387 2396 2388\nf 2388 2396 2397\nf 2388 2397 2389\nf 2389 2397 2398\nf 2389 2398 2390\nf 2390 2398 2391\nf 2391 2398 5972\nf 2391 5967 5966\nf 2391 5972 5967\nf 2392 2399 2400\nf 2392 2400 2393\nf 2392 5964 5970\nf 2392 5970 2399\nf 2393 2400 2401\nf 2393 2401 2394\nf 2394 2401 2402\nf 2394 2402 2395\nf 2395 2402 2403\nf 2395 2403 2396\nf 2396 2403 2404\nf 2396 2404 2397\nf 2397 2404 2405\nf 2397 2405 2398\nf 2398 2405 5978\nf 2398 5978 5972\nf 2399 2406 2407\nf 2399 2407 2400\nf 2399 5970 5976\nf 2399 5976 2406\nf 2400 2407 2408\nf 2400 2408 2401\nf 2401 2408 2409\nf 2401 2409 2402\nf 2402 2409 2410\nf 2402 2410 2403\nf 2403 2410 2411\nf 2403 2411 2404\nf 2404 2411 2412\nf 2404 2412 2405\nf 2405 2412 5984\nf 2405 5984 5978\nf 2406 2413 2414\nf 2406 2414 2407\nf 2406 5976 5982\nf 2406 5982 2413\nf 2407 2414 2415\nf 2407 2415 2408\nf 2408 2415 2416\nf 2408 2416 2409\nf 2409 2416 2417\nf 2409 2417 2410\nf 2410 2417 2418\nf 2410 2418 2411\nf 2411 2418 2419\nf 2411 2419 2412\nf 2412 2419 5990\nf 2412 5990 5984\nf 2413 2420 2421\nf 2413 2421 2414\nf 2413 5982 5988\nf 2413 5988 2420\nf 2414 2421 2422\nf 2414 2422 2415\nf 2415 2422 2423\nf 2415 2423 2416\nf 2416 2423 2424\nf 2416 2424 2417\nf 2417 2424 2425\nf 2417 2425 2418\nf 2418 2425 2426\nf 2418 2426 2419\nf 2419 2426 5997\nf 2419 5997 5990\nf 2420 2427 2428\nf 2420 2428 2429\nf 2420 2429 2421\nf 2420 5988 5994\nf 2420 5994 2427\nf 2421 2429 2430\nf 2421 2430 2422\nf 2422 2430 2431\nf 2422 2431 2423\nf 2423 2431 2432\nf 2423 2432 2424\nf 2424 2432 2433\nf 2424 2433 2425\nf 2425 2433 2434\nf 2425 2434 2426\nf 2426 2434 6002\nf 2426 6002 5997\nf 2427 2435 2436\nf 2427 2436 2428\nf 2427 5994 5995\nf 2427 5995 6000\nf 2427 6000 2435\nf 2428 2436 2437\nf 2428 2437 2429\nf 2429 2437 2438\nf 2429 2438 2430\nf 2430 2438 2439\nf 2430 2439 2431\nf 2431 2439 2440\nf 2431 2440 2432\nf 2432 2440 2441\nf 2432 2441 2433\nf 2433 2441 2442\nf 2433 2442 2434\nf 2434 2442 6007\nf 2434 6007 6002\nf 2435 2443 2444\nf 2435 2444 2436\nf 2435 6000 6005\nf 2435 6005 2443\nf 2436 2444 2445\nf 2436 2445 2437\nf 2437 2445 2446\nf 2437 2446 2438\nf 2438 2446 2447\nf 2438 2447 2439\nf 2439 2447 2448\nf 2439 2448 2440\nf 2440 2448 2449\nf 2440 2449 2441\nf 2441 2449 2450\nf 2441 2450 2442\nf 2442 2450 6012\nf 2442 6012 6007\nf 2443 2451 2452\nf 2443 2452 2444\nf 2443 6005 6010\nf 2443 6010 2451\nf 2444 2452 2453\nf 2444 2453 2445\nf 2445 2453 2454\nf 2445 2454 2446\nf 2446 2454 2455\nf 2446 2455 2447\nf 2447 2455 2456\nf 2447 2456 2448\nf 2448 2456 2457\nf 2448 2457 2449\nf 2449 2457 2458\nf 2449 2458 2450\nf 2450 2458 6017\nf 2450 6017 6012\nf 2451 2459 2460\nf 2451 2460 2452\nf 2451 6010 6015\nf 2451 6015 2459\nf 2452 2460 2461\nf 2452 2461 2453\nf 2453 2461 2462\nf 2453 2462 2454\nf 2454 2462 2463\nf 2454 2463 2455\nf 2455 2463 2464\nf 2455 2464 2456\nf 2456 2464 2465\nf 2456 2465 2457\nf 2457 2465 2466\nf 2457 2466 2458\nf 2458 2466 6022\nf 2458 6022 6017\nf 2459 2467 2468\nf 2459 2468 2460\nf 2459 6015 6020\nf 2459 6020 2467\nf 2460 2468 2469\nf 2460 2469 2461\nf 2461 2469 2470\nf 2461 2470 2462\nf 2462 2470 2471\nf 2462 2471 2463\nf 2463 2471 2472\nf 2463 2472 2464\nf 2464 2472 2473\nf 2464 2473 2465\nf 2465 2473 2474\nf 2465 2474 2466\nf 2466 2474 6027\nf 2466 6027 6022\nf 2467 2475 2476\nf 2467 2476 2468\nf 2467 6020 6025\nf 2467 6025 2475\nf 2468 2476 2477\nf 2468 2477 2469\nf 2469 2477 2478\nf 2469 2478 2470\nf 2470 2478 2479\nf 2470 2479 2471\nf 2471 2479 2480\nf 2471 2480 2472\nf 2472 2480 2481\nf 2472 2481 2473\nf 2473 2481 2482\nf 2473 2482 2474\nf 2474 2482 6032\nf 2474 6032 6027\nf 2475 2483 2484\nf 2475 2484 2476\nf 2475 6025 6030\nf 2475 6030 2483\nf 2476 2484 2485\nf 2476 2485 2477\nf 2477 2485 2486\nf 2477 2486 2478\nf 2478 2486 2487\nf 2478 2487 2479\nf 2479 2487 2488\nf 2479 2488 2480\nf 2480 2488 2489\nf 2480 2489 2481\nf 2481 2489 2490\nf 2481 2490 2482\nf 2482 2490 6037\nf 2482 6037 6032\nf 2483 2491 2492\nf 2483 2492 2484\nf 2483 6030 6035\nf 2483 6035 2491\nf 2484 2492 2493\nf 2484 2493 2485\nf 2485 2493 2494\nf 2485 2494 2486\nf 2486 2494 2495\nf 2486 2495 2487\nf 2487 2495 2496\nf 2487 2496 2488\nf 2488 2496 2497\nf 2488 2497 2489\nf 2489 2497 2498\nf 2489 2498 2490\nf 2490 2498 6042\nf 2490 6042 6037\nf 2491 2499 2500\nf 2491 2500 2492\nf 2491 6035 6040\nf 2491 6040 2499\nf 2492 2500 2501\nf 2492 2501 2493\nf 2493 2501 2502\nf 2493 2502 2494\nf 2494 2502 2503\nf 2494 2503 2495\nf 2495 2503 2504\nf 2495 2504 2496\nf 2496 2504 2505\nf 2496 2505 2497\nf 2497 2505 2506\nf 2497 2506 2498\nf 2498 2506 6047\nf 2498 6047 6042\nf 2499 2507 2508\nf 2499 2508 2500\nf 2499 6040 6045\nf 2499 6045 2507\nf 2500 2508 2509\nf 2500 2509 2501\nf 2501 2509 2510\nf 2501 2510 2502\nf 2502 2510 2511\nf 2502 2511 2503\nf 2503 2511 2512\nf 2503 2512 2504\nf 2504 2512 2513\nf 2504 2513 2505\nf 2505 2513 2514\nf 2505 2514 2506\nf 2506 2514 6052\nf 2506 6052 6047\nf 2507 2515 2516\nf 2507 2516 2508\nf 2507 6045 6050\nf 2507 6050 2515\nf 2508 2516 2517\nf 2508 2517 2509\nf 2509 2517 2518\nf 2509 2518 2510\nf 2510 2518 2519\nf 2510 2519 2511\nf 2511 2519 2520\nf 2511 2520 2512\nf 2512 2520 2521\nf 2512 2521 2513\nf 2513 2521 2522\nf 2513 2522 2514\nf 2514 2522 6057\nf 2514 6057 6052\nf 2515 2523 2524\nf 2515 2524 2516\nf 2515 6050 6055\nf 2515 6055 2523\nf 2516 2524 2525\nf 2516 2525 2517\nf 2517 2525 2526\nf 2517 2526 2518\nf 2518 2526 2527\nf 2518 2527 2519\nf 2519 2527 2528\nf 2519 2528 2520\nf 2520 2528 2529\nf 2520 2529 2521\nf 2521 2529 2530\nf 2521 2530 2522\nf 2522 2530 6063\nf 2522 6063 6057\nf 2523 2531 2532\nf 2523 2532 2524\nf 2523 6055 6061\nf 2523 6061 2531\nf 2524 2532 2533\nf 2524 2533 2525\nf 2525 2533 2534\nf 2525 2534 2526\nf 2526 2534 2535\nf 2526 2535 2527\nf 2527 2535 2536\nf 2527 2536 2528\nf 2528 2536 2537\nf 2528 2537 2529\nf 2529 2537 2538\nf 2529 2538 2530\nf 2530 2538 6069\nf 2530 6069 6063\nf 2531 2539 2540\nf 2531 2540 2532\nf 2531 6061 6067\nf 2531 6067 2539\nf 2532 2540 2541\nf 2532 2541 2533\nf 2533 2541 2542\nf 2533 2542 2534\nf 2534 2542 2543\nf 2534 2543 2535\nf 2535 2543 2544\nf 2535 2544 2536\nf 2536 2544 2545\nf 2536 2545 2537\nf 2537 2545 2546\nf 2537 2546 2538\nf 2538 2546 6076\nf 2538 6076 6069\nf 2539 2547 2548\nf 2539 2548 2549\nf 2539 2549 2540\nf 2539 6067 6073\nf 2539 6073 2547\nf 2540 2549 2550\nf 2540 2550 2541\nf 2541 2550 2551\nf 2541 2551 2542\nf 2542 2551 2552\nf 2542 2552 2543\nf 2543 2552 2553\nf 2543 2553 2544\nf 2544 2553 2554\nf 2544 2554 2545\nf 2545 2554 2555\nf 2545 2555 2546\nf 2546 2555 6081\nf 2546 6081 6076\nf 2547 2556 2557\nf 2547 2557 2548\nf 2547 6073 6074\nf 2547 6074 6079\nf 2547 6079 2556\nf 2548 2557 2558\nf 2548 2558 2549\nf 2549 2558 2559\nf 2549 2559 2550\nf 2550 2559 2560\nf 2550 2560 2551\nf 2551 2560 2561\nf 2551 2561 2552\nf 2552 2561 2562\nf 2552 2562 2553\nf 2553 2562 2563\nf 2553 2563 2554\nf 2554 2563 2564\nf 2554 2564 2555\nf 2555 2564 6086\nf 2555 6086 6081\nf 2556 2565 2566\nf 2556 2566 2557\nf 2556 6079 6084\nf 2556 6084 2565\nf 2557 2566 2567\nf 2557 2567 2558\nf 2558 2567 2568\nf 2558 2568 2559\nf 2559 2568 2569\nf 2559 2569 2560\nf 2560 2569 2570\nf 2560 2570 2561\nf 2561 2570 2571\nf 2561 2571 2562\nf 2562 2571 2572\nf 2562 2572 2563\nf 2563 2572 2573\nf 2563 2573 2564\nf 2564 2573 6091\nf 2564 6091 6086\nf 2565 2574 2575\nf 2565 2575 2566\nf 2565 6084 6089\nf 2565 6089 2574\nf 2566 2575 2576\nf 2566 2576 2567\nf 2567 2576 2577\nf 2567 2577 2568\nf 2568 2577 2578\nf 2568 2578 2569\nf 2569 2578 2579\nf 2569 2579 2570\nf 2570 2579 2580\nf 2570 2580 2571\nf 2571 2580 2581\nf 2571 2581 2572\nf 2572 2581 2582\nf 2572 2582 2573\nf 2573 2582 6096\nf 2573 6096 6091\nf 2574 2583 2584\nf 2574 2584 2575\nf 2574 6089 6094\nf 2574 6094 2583\nf 2575 2584 2585\nf 2575 2585 2576\nf 2576 2585 2586\nf 2576 2586 2577\nf 2577 2586 2587\nf 2577 2587 2578\nf 2578 2587 2588\nf 2578 2588 2579\nf 2579 2588 2589\nf 2579 2589 2580\nf 2580 2589 2590\nf 2580 2590 2581\nf 2581 2590 2591\nf 2581 2591 2582\nf 2582 2591 6101\nf 2582 6101 6096\nf 2583 2592 2593\nf 2583 2593 2584\nf 2583 6094 6099\nf 2583 6099 2592\nf 2584 2593 2594\nf 2584 2594 2585\nf 2585 2594 2595\nf 2585 2595 2586\nf 2586 2595 2596\nf 2586 2596 2587\nf 2587 2596 2597\nf 2587 2597 2588\nf 2588 2597 2598\nf 2588 2598 2589\nf 2589 2598 2599\nf 2589 2599 2590\nf 2590 2599 2600\nf 2590 2600 2591\nf 2591 2600 6106\nf 2591 6106 6101\nf 2592 2601 2602\nf 2592 2602 2593\nf 2592 6099 6104\nf 2592 6104 2601\nf 2593 2602 2603\nf 2593 2603 2594\nf 2594 2603 2604\nf 2594 2604 2595\nf 2595 2604 2605\nf 2595 2605 2596\nf 2596 2605 2606\nf 2596 2606 2597\nf 2597 2606 2607\nf 2597 2607 2598\nf 2598 2607 2608\nf 2598 2608 2599\nf 2599 2608 2609\nf 2599 2609 2600\nf 2600 2609 6112\nf 2600 6112 6106\nf 2601 2610 2611\nf 2601 2611 2612\nf 2601 2612 2602\nf 2601 6104 6109\nf 2601 6109 2610\nf 2602 2612 2613\nf 2602 2613 2603\nf 2603 2613 2614\nf 2603 2614 2604\nf 2604 2614 2615\nf 2604 2615 2605\nf 2605 2615 2616\nf 2605 2616 2606\nf 2606 2616 2617\nf 2606 2617 2607\nf 2607 2617 2618\nf 2607 2618 2608\nf 2608 2618 2619\nf 2608 2619 2609\nf 2609 2619 6116\nf 2609 6116 6112\nf 2610 2620 2621\nf 2610 2621 2611\nf 2610 6109 6110\nf 2610 6110 6115\nf 2610 6115 2620\nf 2611 2621 2622\nf 2611 2622 2612\nf 2612 2622 2623\nf 2612 2623 2613\nf 2613 2623 2624\nf 2613 2624 2614\nf 2614 2624 2625\nf 2614 2625 2615\nf 2615 2625 2626\nf 2615 2626 2616\nf 2616 2626 2627\nf 2616 2627 2617\nf 2617 2627 2628\nf 2617 2628 2618\nf 2618 2628 2629\nf 2618 2629 2619\nf 2619 2629 6120\nf 2619 6120 6116\nf 2620 2630 2631\nf 2620 2631 2621\nf 2620 6115 6119\nf 2620 6119 2630\nf 2621 2631 2632\nf 2621 2632 2622\nf 2622 2632 2633\nf 2622 2633 2623\nf 2623 2633 2634\nf 2623 2634 2624\nf 2624 2634 2635\nf 2624 2635 2625\nf 2625 2635 2636\nf 2625 2636 2626\nf 2626 2636 2637\nf 2626 2637 2627\nf 2627 2637 2638\nf 2627 2638 2628\nf 2628 2638 2639\nf 2628 2639 2629\nf 2629 2639 6124\nf 2629 6124 6120\nf 2630 2640 2641\nf 2630 2641 2631\nf 2630 6119 6123\nf 2630 6123 2640\nf 2631 2641 2642\nf 2631 2642 2632\nf 2632 2642 2643\nf 2632 2643 2633\nf 2633 2643 2644\nf 2633 2644 2634\nf 2634 2644 2645\nf 2634 2645 2635\nf 2635 2645 2646\nf 2635 2646 2636\nf 2636 2646 2647\nf 2636 2647 2637\nf 2637 2647 2648\nf 2637 2648 2638\nf 2638 2648 2649\nf 2638 2649 2639\nf 2639 2649 2650\nf 2639 2650 6125\nf 2639 6125 6124\nf 2640 2651 2652\nf 2640 2652 2641\nf 2640 6123 6128\nf 2640 6128 2651\nf 2641 2652 2653\nf 2641 2653 2642\nf 2642 2653 2654\nf 2642 2654 2643\nf 2643 2654 2655\nf 2643 2655 2644\nf 2644 2655 2656\nf 2644 2656 2645\nf 2645 2656 2657\nf 2645 2657 2646\nf 2646 2657 2658\nf 2646 2658 2647\nf 2647 2658 2659\nf 2647 2659 2648\nf 2648 2659 2660\nf 2648 2660 2649\nf 2649 2660 2661\nf 2649 2661 2650\nf 2650 2661 6134\nf 2650 6130 6125\nf 2650 6134 6130\nf 2651 2662 2663\nf 2651 2663 2652\nf 2651 6128 6132\nf 2651 6132 2662\nf 2652 2663 2664\nf 2652 2664 2653\nf 2653 2664 2665\nf 2653 2665 2654\nf 2654 2665 2666\nf 2654 2666 2655\nf 2655 2666 2667\nf 2655 2667 2656\nf 2656 2667 2668\nf 2656 2668 2657\nf 2657 2668 2669\nf 2657 2669 2658\nf 2658 2669 2670\nf 2658 2670 2659\nf 2659 2670 2671\nf 2659 2671 2660\nf 2660 2671 2672\nf 2660 2672 2661\nf 2661 2672 6137\nf 2661 6137 6134\nf 2662 2673 2675\nf 2662 2675 2663\nf 2662 6132 6135\nf 2662 6135 2673\nf 2663 2675 2676\nf 2663 2676 2664\nf 2664 2676 2677\nf 2664 2677 2665\nf 2665 2677 2678\nf 2665 2678 2666\nf 2666 2678 2679\nf 2666 2679 2667\nf 2667 2679 2680\nf 2667 2680 2668\nf 2668 2680 2681\nf 2668 2681 2669\nf 2669 2681 2682\nf 2669 2682 2670\nf 2670 2682 2683\nf 2670 2683 2671\nf 2671 2683 2684\nf 2671 2684 2672\nf 2672 2684 6141\nf 2672 6141 6137\nf 2673 2685 2687\nf 2673 2687 2675\nf 2673 6135 6138\nf 2673 6138 2685\nf 2674 2675 2687\nf 2674 2687 2686\nf 2674 2688 2675\nf 2675 2688 2689\nf 2675 2689 2676\nf 2676 2689 2690\nf 2676 2690 2677\nf 2677 2690 2691\nf 2677 2691 2678\nf 2678 2691 2692\nf 2678 2692 2679\nf 2679 2692 2693\nf 2679 2693 2680\nf 2680 2693 2694\nf 2680 2694 2681\nf 2681 2694 2695\nf 2681 2695 2682\nf 2682 2695 2696\nf 2682 2696 2683\nf 2683 2696 2697\nf 2683 2697 2684\nf 2684 2697 6143\nf 2684 6143 6141\nf 2685 2698 2700\nf 2685 2700 2687\nf 2685 6138 6139\nf 2685 6139 6142\nf 2685 6142 2698\nf 2686 2687 2700\nf 2686 2700 2699\nf 2688 2701 2689\nf 2689 2701 2702\nf 2689 2702 2703\nf 2689 2703 2690\nf 2690 2703 2704\nf 2690 2704 2691\nf 2691 2704 2705\nf 2691 2705 2692\nf 2692 2705 2706\nf 2692 2706 2693\nf 2693 2706 2707\nf 2693 2707 2694\nf 2694 2707 2708\nf 2694 2708 2695\nf 2695 2708 2709\nf 2695 2709 2696\nf 2696 2709 2710\nf 2696 2710 2697\nf 2697 2710 6145\nf 2697 6145 6143\nf 2698 2711 2713\nf 2698 2713 2700\nf 2698 6142 6144\nf 2698 6144 2711\nf 2699 2700 2713\nf 2699 2713 2712\nf 2701 2714 2702\nf 2702 2714 2715\nf 2702 2715 2716\nf 2702 2716 2703\nf 2703 2716 2717\nf 2703 2717 2704\nf 2704 2717 2718\nf 2704 2718 2705\nf 2705 2718 2719\nf 2705 2719 2706\nf 2706 2719 2720\nf 2706 2720 2707\nf 2707 2720 2721\nf 2707 2721 2708\nf 2708 2721 2722\nf 2708 2722 2709\nf 2709 2722 2723\nf 2709 2723 2710\nf 2710 2723 6147\nf 2710 6147 6145\nf 2711 2724 2726\nf 2711 2726 2713\nf 2711 6144 6146\nf 2711 6146 2724\nf 2712 2713 2726\nf 2712 2726 2725\nf 2714 2727 2715\nf 2715 2727 2728\nf 2715 2728 2729\nf 2715 2729 2716\nf 2716 2729 2730\nf 2716 2730 2717\nf 2717 2730 2731\nf 2717 2731 2718\nf 2718 2731 2732\nf 2718 2732 2719\nf 2719 2732 2733\nf 2719 2733 2720\nf 2720 2733 2734\nf 2720 2734 2721\nf 2721 2734 2735\nf 2721 2735 2722\nf 2722 2735 2723\nf 2723 2735 6150\nf 2723 6148 6147\nf 2723 6150 6148\nf 2724 2736 2738\nf 2724 2738 2726\nf 2724 6146 6149\nf 2724 6149 2736\nf 2725 2726 2738\nf 2725 2738 2737\nf 2727 2739 2728\nf 2728 2739 2740\nf 2728 2740 2741\nf 2728 2741 2729\nf 2729 2741 2742\nf 2729 2742 2730\nf 2730 2742 2743\nf 2730 2743 2731\nf 2731 2743 2744\nf 2731 2744 2732\nf 2732 2744 2745\nf 2732 2745 2733\nf 2733 2745 2746\nf 2733 2746 2734\nf 2734 2746 2747\nf 2734 2747 2735\nf 2735 2747 6153\nf 2735 6153 6150\nf 2736 2748 2750\nf 2736 2750 2738\nf 2736 6149 6152\nf 2736 6152 2748\nf 2737 2738 2750\nf 2737 2750 2749\nf 2739 2751 2740\nf 2740 2751 2752\nf 2740 2752 2753\nf 2740 2753 2741\nf 2741 2753 2754\nf 2741 2754 2742\nf 2742 2754 2755\nf 2742 2755 2743\nf 2743 2755 2756\nf 2743 2756 2744\nf 2744 2756 2757\nf 2744 2757 2745\nf 2745 2757 2758\nf 2745 2758 2746\nf 2746 2758 2759\nf 2746 2759 2747\nf 2747 2759 6156\nf 2747 6156 6153\nf 2748 2760 2762\nf 2748 2762 2750\nf 2748 6152 6155\nf 2748 6155 2760\nf 2749 2750 2762\nf 2749 2762 2761\nf 2751 2763 2752\nf 2752 2763 2765\nf 2752 2765 2766\nf 2752 2766 2753\nf 2753 2766 2767\nf 2753 2767 2754\nf 2754 2767 2768\nf 2754 2768 2755\nf 2755 2768 2769\nf 2755 2769 2756\nf 2756 2769 2770\nf 2756 2770 2757\nf 2757 2770 2771\nf 2757 2771 2758\nf 2758 2771 2772\nf 2758 2772 2759\nf 2759 2772 6160\nf 2759 6160 6156\nf 2760 2773 2774\nf 2760 2774 2762\nf 2760 6155 6158\nf 2760 6158 2773\nf 2761 2762 2775\nf 2761 2775 2764\nf 2762 2774 2775\nf 2763 2764 2765\nf 2764 2775 2765\nf 2765 2775 2776\nf 2765 2776 2777\nf 2765 2777 2766\nf 2766 2777 2778\nf 2766 2778 2767\nf 2767 2778 2779\nf 2767 2779 2768\nf 2768 2779 2780\nf 2768 2780 2769\nf 2769 2780 2781\nf 2769 2781 2770\nf 2770 2781 2782\nf 2770 2782 2771\nf 2771 2782 2783\nf 2771 2783 2772\nf 2772 2783 6165\nf 2772 6165 6160\nf 2773 2784 2785\nf 2773 2785 2786\nf 2773 2786 2774\nf 2773 6158 6162\nf 2773 6162 2784\nf 2774 2786 2787\nf 2774 2787 2775\nf 2775 2787 2788\nf 2775 2788 2776\nf 2776 2788 2789\nf 2776 2789 2777\nf 2777 2789 2790\nf 2777 2790 2778\nf 2778 2790 2791\nf 2778 2791 2779\nf 2779 2791 2792\nf 2779 2792 2780\nf 2780 2792 2793\nf 2780 2793 2781\nf 2781 2793 2794\nf 2781 2794 2782\nf 2782 2794 2795\nf 2782 2795 2783\nf 2783 2795 6168\nf 2783 6168 6165\nf 2784 2796 2797\nf 2784 2797 2785\nf 2784 6162 6163\nf 2784 6163 6167\nf 2784 6167 2796\nf 2785 2797 2798\nf 2785 2798 2786\nf 2786 2798 2799\nf 2786 2799 2787\nf 2787 2799 2800\nf 2787 2800 2788\nf 2788 2800 2801\nf 2788 2801 2789\nf 2789 2801 2802\nf 2789 2802 2790\nf 2790 2802 2803\nf 2790 2803 2791\nf 2791 2803 2804\nf 2791 2804 2792\nf 2792 2804 2805\nf 2792 2805 2793\nf 2793 2805 2806\nf 2793 2806 2794\nf 2794 2806 2807\nf 2794 2807 2795\nf 2795 2807 6171\nf 2795 6171 6168\nf 2796 2808 2809\nf 2796 2809 2797\nf 2796 6167 6170\nf 2796 6170 2808\nf 2797 2809 2810\nf 2797 2810 2798\nf 2798 2810 2811\nf 2798 2811 2799\nf 2799 2811 2812\nf 2799 2812 2800\nf 2800 2812 2813\nf 2800 2813 2801\nf 2801 2813 2814\nf 2801 2814 2802\nf 2802 2814 2815\nf 2802 2815 2803\nf 2803 2815 2816\nf 2803 2816 2804\nf 2804 2816 2817\nf 2804 2817 2805\nf 2805 2817 2818\nf 2805 2818 2806\nf 2806 2818 2819\nf 2806 2819 2807\nf 2807 2819 6174\nf 2807 6174 6171\nf 2808 2820 2821\nf 2808 2821 2809\nf 2808 6170 6173\nf 2808 6173 2820\nf 2809 2821 2822\nf 2809 2822 2810\nf 2810 2822 2823\nf 2810 2823 2811\nf 2811 2823 2824\nf 2811 2824 2812\nf 2812 2824 2825\nf 2812 2825 2813\nf 2813 2825 2826\nf 2813 2826 2814\nf 2814 2826 2827\nf 2814 2827 2815\nf 2815 2827 2828\nf 2815 2828 2816\nf 2816 2828 2829\nf 2816 2829 2817\nf 2817 2829 2830\nf 2817 2830 2818\nf 2818 2830 2831\nf 2818 2831 2819\nf 2819 2831 6176\nf 2819 6176 6174\nf 2820 2832 2833\nf 2820 2833 2821\nf 2820 6173 6175\nf 2820 6175 2832\nf 2821 2833 2834\nf 2821 2834 2822\nf 2822 2834 2835\nf 2822 2835 2823\nf 2823 2835 2836\nf 2823 2836 2824\nf 2824 2836 2837\nf 2824 2837 2825\nf 2825 2837 2838\nf 2825 2838 2826\nf 2826 2838 2839\nf 2826 2839 2827\nf 2827 2839 2840\nf 2827 2840 2828\nf 2828 2840 2841\nf 2828 2841 2829\nf 2829 2841 2842\nf 2829 2842 2830\nf 2830 2842 2831\nf 2831 2842 6179\nf 2831 6177 6176\nf 2831 6179 6177\nf 2832 2843 2844\nf 2832 2844 2833\nf 2832 6175 6178\nf 2832 6178 2843\nf 2833 2844 2845\nf 2833 2845 2834\nf 2834 2845 2846\nf 2834 2846 2835\nf 2835 2846 2847\nf 2835 2847 2836\nf 2836 2847 2848\nf 2836 2848 2837\nf 2837 2848 2849\nf 2837 2849 2838\nf 2838 2849 2850\nf 2838 2850 2839\nf 2839 2850 2851\nf 2839 2851 2840\nf 2840 2851 2852\nf 2840 2852 2841\nf 2841 2852 2853\nf 2841 2853 2842\nf 2842 2853 6182\nf 2842 6182 6179\nf 2843 2854 2855\nf 2843 2855 2844\nf 2843 6178 6181\nf 2843 6181 2854\nf 2844 2855 2856\nf 2844 2856 2845\nf 2845 2856 2857\nf 2845 2857 2846\nf 2846 2857 2858\nf 2846 2858 2847\nf 2847 2858 2859\nf 2847 2859 2848\nf 2848 2859 2860\nf 2848 2860 2849\nf 2849 2860 2861\nf 2849 2861 2850\nf 2850 2861 2862\nf 2850 2862 2851\nf 2851 2862 2863\nf 2851 2863 2852\nf 2852 2863 2864\nf 2852 2864 2853\nf 2853 2864 6185\nf 2853 6185 6182\nf 2854 2865 2866\nf 2854 2866 2855\nf 2854 6181 6184\nf 2854 6184 2865\nf 2855 2866 2867\nf 2855 2867 2856\nf 2856 2867 2868\nf 2856 2868 2857\nf 2857 2868 2869\nf 2857 2869 2858\nf 2858 2869 2870\nf 2858 2870 2859\nf 2859 2870 2871\nf 2859 2871 2860\nf 2860 2871 2872\nf 2860 2872 2861\nf 2861 2872 2873\nf 2861 2873 2862\nf 2862 2873 2874\nf 2862 2874 2863\nf 2863 2874 2875\nf 2863 2875 2864\nf 2864 2875 6188\nf 2864 6188 6185\nf 2865 2876 2877\nf 2865 2877 2866\nf 2865 6184 6187\nf 2865 6187 2876\nf 2866 2877 2878\nf 2866 2878 2867\nf 2867 2878 2879\nf 2867 2879 2868\nf 2868 2879 2880\nf 2868 2880 2869\nf 2869 2880 2881\nf 2869 2881 2870\nf 2870 2881 2882\nf 2870 2882 2871\nf 2871 2882 2883\nf 2871 2883 2872\nf 2872 2883 2884\nf 2872 2884 2873\nf 2873 2884 2885\nf 2873 2885 2874\nf 2874 2885 2886\nf 2874 2886 2875\nf 2875 2886 6191\nf 2875 6191 6188\nf 2876 2887 2888\nf 2876 2888 2877\nf 2876 6187 6190\nf 2876 6190 2887\nf 2877 2888 2889\nf 2877 2889 2878\nf 2878 2889 2890\nf 2878 2890 2879\nf 2879 2890 2891\nf 2879 2891 2880\nf 2880 2891 2892\nf 2880 2892 2881\nf 2881 2892 2893\nf 2881 2893 2882\nf 2882 2893 2894\nf 2882 2894 2883\nf 2883 2894 2895\nf 2883 2895 2884\nf 2884 2895 2896\nf 2884 2896 2885\nf 2885 2896 2897\nf 2885 2897 2886\nf 2886 2897 6195\nf 2886 6195 6191\nf 2887 2898 2888\nf 2887 6190 6193\nf 2887 6193 6194\nf 2887 6194 2898\nf 2888 2898 2899\nf 2888 2899 2889\nf 2889 2899 2900\nf 2889 2900 2890\nf 2890 2900 2901\nf 2890 2901 2891\nf 2891 2901 2902\nf 2891 2902 2892\nf 2892 2902 2903\nf 2892 2903 2893\nf 2893 2903 2904\nf 2893 2904 2894\nf 2894 2904 2905\nf 2894 2905 2895\nf 2895 2905 2906\nf 2895 2906 2896\nf 2896 2906 2907\nf 2896 2907 2897\nf 2897 2907 6199\nf 2897 6199 6195\nf 2898 2908 2909\nf 2898 2909 2899\nf 2898 6194 6197\nf 2898 6197 2908\nf 2899 2909 2910\nf 2899 2910 2900\nf 2900 2910 2911\nf 2900 2911 2901\nf 2901 2911 2912\nf 2901 2912 2902\nf 2902 2912 2913\nf 2902 2913 2903\nf 2903 2913 2914\nf 2903 2914 2904\nf 2904 2914 2915\nf 2904 2915 2905\nf 2905 2915 2916\nf 2905 2916 2906\nf 2906 2916 2907\nf 2907 2916 6204\nf 2907 6200 6199\nf 2907 6204 6200\nf 2908 2917 2918\nf 2908 2918 2909\nf 2908 6197 6202\nf 2908 6202 2917\nf 2909 2918 2919\nf 2909 2919 2910\nf 2910 2919 2920\nf 2910 2920 2911\nf 2911 2920 2921\nf 2911 2921 2912\nf 2912 2921 2922\nf 2912 2922 2913\nf 2913 2922 2923\nf 2913 2923 2914\nf 2914 2923 2924\nf 2914 2924 2915\nf 2915 2924 2925\nf 2915 2925 2916\nf 2916 2925 6209\nf 2916 6209 6204\nf 2917 2926 2927\nf 2917 2927 2918\nf 2917 6202 6207\nf 2917 6207 2926\nf 2918 2927 2928\nf 2918 2928 2919\nf 2919 2928 2929\nf 2919 2929 2920\nf 2920 2929 2930\nf 2920 2930 2921\nf 2921 2930 2931\nf 2921 2931 2922\nf 2922 2931 2932\nf 2922 2932 2923\nf 2923 2932 2933\nf 2923 2933 2924\nf 2924 2933 2934\nf 2924 2934 2925\nf 2925 2934 6214\nf 2925 6214 6209\nf 2926 2935 2936\nf 2926 2936 2927\nf 2926 6207 6212\nf 2926 6212 2935\nf 2927 2936 2937\nf 2927 2937 2928\nf 2928 2937 2938\nf 2928 2938 2929\nf 2929 2938 2939\nf 2929 2939 2930\nf 2930 2939 2940\nf 2930 2940 2931\nf 2931 2940 2941\nf 2931 2941 2932\nf 2932 2941 2942\nf 2932 2942 2933\nf 2933 2942 2943\nf 2933 2943 2934\nf 2934 2943 6219\nf 2934 6219 6214\nf 2935 2944 2945\nf 2935 2945 2936\nf 2935 6212 6217\nf 2935 6217 2944\nf 2936 2945 2946\nf 2936 2946 2937\nf 2937 2946 2947\nf 2937 2947 2938\nf 2938 2947 2948\nf 2938 2948 2939\nf 2939 2948 2949\nf 2939 2949 2940\nf 2940 2949 2950\nf 2940 2950 2941\nf 2941 2950 2951\nf 2941 2951 2942\nf 2942 2951 2952\nf 2942 2952 2943\nf 2943 2952 6224\nf 2943 6224 6219\nf 2944 2953 2954\nf 2944 2954 2945\nf 2944 6217 6222\nf 2944 6222 2953\nf 2945 2954 2955\nf 2945 2955 2946\nf 2946 2955 2956\nf 2946 2956 2947\nf 2947 2956 2957\nf 2947 2957 2948\nf 2948 2957 2958\nf 2948 2958 2949\nf 2949 2958 2959\nf 2949 2959 2950\nf 2950 2959 2960\nf 2950 2960 2951\nf 2951 2960 2961\nf 2951 2961 2952\nf 2952 2961 6229\nf 2952 6229 6224\nf 2953 2962 2963\nf 2953 2963 2954\nf 2953 6222 6227\nf 2953 6227 2962\nf 2954 2963 2964\nf 2954 2964 2955\nf 2955 2964 2965\nf 2955 2965 2956\nf 2956 2965 2966\nf 2956 2966 2957\nf 2957 2966 2967\nf 2957 2967 2958\nf 2958 2967 2968\nf 2958 2968 2959\nf 2959 2968 2969\nf 2959 2969 2960\nf 2960 2969 2970\nf 2960 2970 2961\nf 2961 2970 6233\nf 2961 6233 6229\nf 2962 2971 2972\nf 2962 2972 2963\nf 2962 6227 6231\nf 2962 6231 2971\nf 2963 2972 2973\nf 2963 2973 2964\nf 2964 2973 2974\nf 2964 2974 2965\nf 2965 2974 2975\nf 2965 2975 2966\nf 2966 2975 2976\nf 2966 2976 2967\nf 2967 2976 2977\nf 2967 2977 2968\nf 2968 2977 2978\nf 2968 2978 2969\nf 2969 2978 2979\nf 2969 2979 2970\nf 2970 2979 6237\nf 2970 6237 6233\nf 2971 2980 2981\nf 2971 2981 2972\nf 2971 6231 6235\nf 2971 6235 2980\nf 2972 2981 2982\nf 2972 2982 2973\nf 2973 2982 2983\nf 2973 2983 2974\nf 2974 2983 2984\nf 2974 2984 2975\nf 2975 2984 2985\nf 2975 2985 2976\nf 2976 2985 2986\nf 2976 2986 2977\nf 2977 2986 2987\nf 2977 2987 2978\nf 2978 2987 2988\nf 2978 2988 2979\nf 2979 2988 6241\nf 2979 6241 6237\nf 2980 2989 2990\nf 2980 2990 2981\nf 2980 6235 6239\nf 2980 6239 2989\nf 2981 2990 2991\nf 2981 2991 2982\nf 2982 2991 2992\nf 2982 2992 2983\nf 2983 2992 2993\nf 2983 2993 2984\nf 2984 2993 2994\nf 2984 2994 2985\nf 2985 2994 2995\nf 2985 2995 2986\nf 2986 2995 2996\nf 2986 2996 2987\nf 2987 2996 2997\nf 2987 2997 2988\nf 2988 2997 6245\nf 2988 6245 6241\nf 2989 2998 2999\nf 2989 2999 2990\nf 2989 6239 6243\nf 2989 6243 2998\nf 2990 2999 3000\nf 2990 3000 2991\nf 2991 3000 3001\nf 2991 3001 2992\nf 2992 3001 3002\nf 2992 3002 2993\nf 2993 3002 3003\nf 2993 3003 2994\nf 2994 3003 3004\nf 2994 3004 2995\nf 2995 3004 3005\nf 2995 3005 2996\nf 2996 3005 3006\nf 2996 3006 2997\nf 2997 3006 6249\nf 2997 6249 6245\nf 2998 3007 3008\nf 2998 3008 2999\nf 2998 6243 6247\nf 2998 6247 3007\nf 2999 3008 3009\nf 2999 3009 3000\nf 3000 3009 3010\nf 3000 3010 3001\nf 3001 3010 3011\nf 3001 3011 3002\nf 3002 3011 3012\nf 3002 3012 3003\nf 3003 3012 3013\nf 3003 3013 3004\nf 3004 3013 3014\nf 3004 3014 3005\nf 3005 3014 3006\nf 3006 3014 6253\nf 3006 6250 6249\nf 3006 6253 6250\nf 3007 3015 3016\nf 3007 3016 3008\nf 3007 6247 6251\nf 3007 6251 3015\nf 3008 3016 3017\nf 3008 3017 3009\nf 3009 3017 3018\nf 3009 3018 3010\nf 3010 3018 3019\nf 3010 3019 3011\nf 3011 3019 3020\nf 3011 3020 3012\nf 3012 3020 3021\nf 3012 3021 3013\nf 3013 3021 3022\nf 3013 3022 3014\nf 3014 3022 6257\nf 3014 6257 6253\nf 3015 3023 3024\nf 3015 3024 3016\nf 3015 6251 6255\nf 3015 6255 3023\nf 3016 3024 3025\nf 3016 3025 3017\nf 3017 3025 3026\nf 3017 3026 3018\nf 3018 3026 3027\nf 3018 3027 3019\nf 3019 3027 3028\nf 3019 3028 3020\nf 3020 3028 3029\nf 3020 3029 3021\nf 3021 3029 3030\nf 3021 3030 3022\nf 3022 3030 6261\nf 3022 6261 6257\nf 3023 3031 3032\nf 3023 3032 3024\nf 3023 6255 6259\nf 3023 6259 3031\nf 3024 3032 3033\nf 3024 3033 3025\nf 3025 3033 3034\nf 3025 3034 3026\nf 3026 3034 3035\nf 3026 3035 3027\nf 3027 3035 3036\nf 3027 3036 3028\nf 3028 3036 3037\nf 3028 3037 3029\nf 3029 3037 3038\nf 3029 3038 3030\nf 3030 3038 6264\nf 3030 6264 6261\nf 3031 3039 3040\nf 3031 3040 3032\nf 3031 6259 6262\nf 3031 6262 3039\nf 3032 3040 3041\nf 3032 3041 3033\nf 3033 3041 3042\nf 3033 3042 3034\nf 3034 3042 3043\nf 3034 3043 3035\nf 3035 3043 3044\nf 3035 3044 3036\nf 3036 3044 3045\nf 3036 3045 3037\nf 3037 3045 3038\nf 3038 3045 6268\nf 3038 6265 6264\nf 3038 6268 6265\nf 3039 3046 3047\nf 3039 3047 3040\nf 3039 6262 6266\nf 3039 6266 3046\nf 3040 3047 3048\nf 3040 3048 3041\nf 3041 3048 3049\nf 3041 3049 3042\nf 3042 3049 3050\nf 3042 3050 3043\nf 3043 3050 3051\nf 3043 3051 3044\nf 3044 3051 3052\nf 3044 3052 3045\nf 3045 3052 6273\nf 3045 6273 6268\nf 3046 3053 3047\nf 3046 6266 6270\nf 3046 6270 6272\nf 3046 6272 3053\nf 3047 3053 3054\nf 3047 3054 3048\nf 3048 3054 3055\nf 3048 3055 3049\nf 3049 3055 3056\nf 3049 3056 3050\nf 3050 3056 3057\nf 3050 3057 3051\nf 3051 3057 3058\nf 3051 3058 3052\nf 3052 3058 6278\nf 3052 6278 6273\nf 3053 3059 3060\nf 3053 3060 3054\nf 3053 6272 6276\nf 3053 6276 3059\nf 3054 3060 3061\nf 3054 3061 3055\nf 3055 3061 3062\nf 3055 3062 3056\nf 3056 3062 3063\nf 3056 3063 3057\nf 3057 3063 3058\nf 3058 3063 6283\nf 3058 6279 6278\nf 3058 6283 6279\nf 3059 3064 3065\nf 3059 3065 3060\nf 3059 6276 6281\nf 3059 6281 3064\nf 3060 3065 3066\nf 3060 3066 3061\nf 3061 3066 3067\nf 3061 3067 3062\nf 3062 3067 3068\nf 3062 3068 3063\nf 3063 3068 6288\nf 3063 6288 6283\nf 3064 3069 3070\nf 3064 3070 3065\nf 3064 6281 6286\nf 3064 6286 3069\nf 3065 3070 3071\nf 3065 3071 3066\nf 3066 3071 3072\nf 3066 3072 3067\nf 3067 3072 3073\nf 3067 3073 3068\nf 3068 3073 6292\nf 3068 6292 6288\nf 3069 3074 3075\nf 3069 3075 3070\nf 3069 6286 6290\nf 3069 6290 3074\nf 3070 3075 3076\nf 3070 3076 3071\nf 3071 3076 3077\nf 3071 3077 3072\nf 3072 3077 3078\nf 3072 3078 3073\nf 3073 3078 6297\nf 3073 6297 6292\nf 3074 3079 3075\nf 3074 6290 6294\nf 3074 6294 6296\nf 3074 6296 3079\nf 3075 3079 3080\nf 3075 3080 3076\nf 3076 3080 3081\nf 3076 3081 3077\nf 3077 3081 3082\nf 3077 3082 3078\nf 3078 3082 6305\nf 3078 6305 6297\nf 3079 6296 6300\nf 3079 6300 6302\nf 3079 6302 3080\nf 3080 6302 6303\nf 3080 6303 3081\nf 3081 6303 6304\nf 3081 6304 3082\nf 3082 6304 6306\nf 3082 6306 6305\nf 3083 3084 6315\nf 3083 3102 3104\nf 3083 3104 3107\nf 3083 3107 3084\nf 3083 6314 6331\nf 3083 6315 6314\nf 3083 6331 3102\nf 3084 3086 6316\nf 3084 3107 3086\nf 3084 6316 6315\nf 3085 3086 3107\nf 3085 3087 3086\nf 3085 3107 3105\nf 3086 3087 3088\nf 3086 3088 6317\nf 3086 6317 6316\nf 3087 3108 3088\nf 3088 3089 6318\nf 3088 3108 3110\nf 3088 3110 3089\nf 3088 6318 6317\nf 3089 3110 3112\nf 3089 3112 6335\nf 3089 6334 6318\nf 3089 6335 6334\nf 3090 3091 6320\nf 3090 3117 3118\nf 3090 3118 3119\nf 3090 3119 3091\nf 3090 6319 6339\nf 3090 6320 6319\nf 3090 6339 3117\nf 3091 3092 6321\nf 3091 3119 3120\nf 3091 3120 3092\nf 3091 6321 6320\nf 3092 3093 6323\nf 3092 3120 3121\nf 3092 3121 3093\nf 3092 6323 6321\nf 3093 3094 6325\nf 3093 3121 3122\nf 3093 3122 3094\nf 3093 6325 6323\nf 3094 3095 6327\nf 3094 3122 3123\nf 3094 3123 3095\nf 3094 6327 6325\nf 3095 3096 6328\nf 3095 3123 3124\nf 3095 3124 3096\nf 3095 6328 6327\nf 3096 3124 3125\nf 3096 3125 6343\nf 3096 6342 6328\nf 3096 6343 6342\nf 3097 3098 6345\nf 3097 3099 3098\nf 3097 6345 6346\nf 3097 6346 3126\nf 3098 3099 3100\nf 3098 3100 6330\nf 3098 6329 6345\nf 3098 6330 6329\nf 3099 3101 3100\nf 3100 3101 3102\nf 3100 3102 6332\nf 3100 6332 6330\nf 3101 3103 3102\nf 3102 3103 3104\nf 3102 6331 6332\nf 3103 3106 3104\nf 3104 3106 3107\nf 3105 3107 3106\nf 3108 3109 3110\nf 3109 3111 3110\nf 3110 3111 3112\nf 3111 3113 3112\nf 3112 3113 3114\nf 3112 3114 6337\nf 3112 6337 6335\nf 3113 3115 3114\nf 3114 3115 3116\nf 3114 3116 6338\nf 3114 6338 6337\nf 3115 3129 3130\nf 3115 3130 6348\nf 3115 6348 3116\nf 3116 6347 6338\nf 3116 6348 6347\nf 3117 3131 3132\nf 3117 3132 3118\nf 3117 6339 6340\nf 3117 6340 6349\nf 3117 6349 3131\nf 3118 3132 3133\nf 3118 3133 3119\nf 3119 3133 3134\nf 3119 3134 3120\nf 3120 3134 3135\nf 3120 3135 3121\nf 3121 3135 3136\nf 3121 3136 3122\nf 3122 3136 3137\nf 3122 3137 3123\nf 3123 3137 3138\nf 3123 3138 3124\nf 3124 3138 3139\nf 3124 3139 3125\nf 3125 3139 3140\nf 3125 3140 6351\nf 3125 6350 6343\nf 3125 6351 6350\nf 3126 3128 3127\nf 3126 6346 3128\nf 3127 3128 6355\nf 3127 6355 6356\nf 3127 6356 3142\nf 3128 6346 6355\nf 3129 3144 3130\nf 3130 3144 3145\nf 3130 3145 6366\nf 3130 6358 6348\nf 3130 6366 6358\nf 3131 3146 3147\nf 3131 3147 3132\nf 3131 6349 6359\nf 3131 6359 3146\nf 3132 3147 3148\nf 3132 3148 3133\nf 3133 3148 3149\nf 3133 3149 3134\nf 3134 3149 3151\nf 3134 3151 3135\nf 3135 3151 3152\nf 3135 3152 3136\nf 3136 3152 3154\nf 3136 3154 3137\nf 3137 3154 3155\nf 3137 3155 3138\nf 3138 3155 3156\nf 3138 3156 3139\nf 3139 3156 3157\nf 3139 3157 3140\nf 3140 3141 6353\nf 3140 3157 3158\nf 3140 3158 3141\nf 3140 6353 6351\nf 3141 3158 3159\nf 3141 3159 6361\nf 3141 6360 6353\nf 3141 6361 6360\nf 3142 3143 3162\nf 3142 3162 3161\nf 3142 6356 3143\nf 3143 3160 3162\nf 3143 6356 6363\nf 3143 6363 3160\nf 3144 3163 3145\nf 3145 3163 3164\nf 3145 3164 6372\nf 3145 6372 6366\nf 3146 3165 3166\nf 3146 3166 3147\nf 3146 6359 6367\nf 3146 6367 3165\nf 3147 3166 3167\nf 3147 3167 3148\nf 3148 3167 3169\nf 3148 3169 3149\nf 3149 3169 3151\nf 3150 3151 3169\nf 3150 3169 3168\nf 3150 3170 3151\nf 3151 3170 3173\nf 3151 3173 3152\nf 3152 3173 3154\nf 3153 3154 3173\nf 3153 3173 3172\nf 3153 3174 3154\nf 3154 3174 3175\nf 3154 3175 3155\nf 3155 3175 3176\nf 3155 3176 3156\nf 3156 3176 3177\nf 3156 3177 3157\nf 3157 3177 3178\nf 3157 3178 3158\nf 3158 3178 3179\nf 3158 3179 3159\nf 3159 3179 3180\nf 3159 3180 6369\nf 3159 6368 6361\nf 3159 6369 6368\nf 3160 3181 3183\nf 3160 3183 3162\nf 3160 6363 6364\nf 3160 6364 6371\nf 3160 6371 3181\nf 3161 3162 3183\nf 3161 3183 3182\nf 3163 3184 3164\nf 3164 3184 3185\nf 3164 3185 6377\nf 3164 6377 6372\nf 3165 3186 3166\nf 3165 6367 6373\nf 3165 6373 6374\nf 3165 6374 3186\nf 3166 3186 3187\nf 3166 3187 3167\nf 3167 3187 3188\nf 3167 3188 3169\nf 3168 3169 3189\nf 3168 3189 3171\nf 3169 3188 3189\nf 3170 3171 3173\nf 3171 3189 3173\nf 3172 3173 3191\nf 3172 3191 3190\nf 3173 3189 3191\nf 3174 3192 3175\nf 3175 3192 3193\nf 3175 3193 3194\nf 3175 3194 3176\nf 3176 3194 3195\nf 3176 3195 3177\nf 3177 3195 3196\nf 3177 3196 3178\nf 3178 3196 3197\nf 3178 3197 3179\nf 3179 3197 3198\nf 3179 3198 3180\nf 3180 3198 6380\nf 3180 6375 6369\nf 3180 6380 6375\nf 3181 3199 3201\nf 3181 3201 3183\nf 3181 6371 6376\nf 3181 6376 3199\nf 3182 3183 3201\nf 3182 3201 3200\nf 3184 3202 3185\nf 3185 3202 3203\nf 3185 3203 6383\nf 3185 6383 6377\nf 3186 3204 3205\nf 3186 3205 3187\nf 3186 6374 6378\nf 3186 6378 3204\nf 3187 3205 3206\nf 3187 3206 3188\nf 3188 3206 3207\nf 3188 3207 3189\nf 3189 3207 3210\nf 3189 3210 3191\nf 3190 3191 3210\nf 3190 3210 3208\nf 3192 3211 3193\nf 3193 3211 3212\nf 3193 3212 3213\nf 3193 3213 3194\nf 3194 3213 3214\nf 3194 3214 3195\nf 3195 3214 3215\nf 3195 3215 3196\nf 3196 3215 3216\nf 3196 3216 3197\nf 3197 3216 3217\nf 3197 3217 3198\nf 3198 3217 6386\nf 3198 6386 6380\nf 3199 3218 3220\nf 3199 3220 3201\nf 3199 6376 6382\nf 3199 6382 3218\nf 3200 3201 3220\nf 3200 3220 3219\nf 3202 3221 3203\nf 3203 3221 3222\nf 3203 3222 6389\nf 3203 6389 6383\nf 3204 3223 3224\nf 3204 3224 3205\nf 3204 6378 6384\nf 3204 6384 3223\nf 3205 3224 3225\nf 3205 3225 3206\nf 3206 3225 3227\nf 3206 3227 3207\nf 3207 3227 3210\nf 3208 3210 3209\nf 3209 3210 3227\nf 3209 3227 3226\nf 3211 3228 3212\nf 3212 3228 3230\nf 3212 3230 3232\nf 3212 3232 3213\nf 3213 3232 3233\nf 3213 3233 3214\nf 3214 3233 3234\nf 3214 3234 3215\nf 3215 3234 3235\nf 3215 3235 3216\nf 3216 3235 3236\nf 3216 3236 3217\nf 3217 3236 6392\nf 3217 6392 6386\nf 3218 3237 3240\nf 3218 3240 3220\nf 3218 6382 6388\nf 3218 6388 3237\nf 3219 3220 3240\nf 3219 3240 3238\nf 3221 3241 3222\nf 3222 3241 3242\nf 3222 3242 6396\nf 3222 6396 6389\nf 3223 3243 3244\nf 3223 3244 3224\nf 3223 6384 6390\nf 3223 6390 3243\nf 3224 3244 3245\nf 3224 3245 3225\nf 3225 3245 3247\nf 3225 3247 3227\nf 3226 3227 3247\nf 3226 3247 3246\nf 3228 3229 3230\nf 3229 3231 3230\nf 3230 3231 3232\nf 3231 3249 3232\nf 3232 3249 3251\nf 3232 3251 3233\nf 3233 3251 3252\nf 3233 3252 3234\nf 3234 3252 3253\nf 3234 3253 3235\nf 3235 3253 3254\nf 3235 3254 3236\nf 3236 3254 3255\nf 3236 3255 6393\nf 3236 6393 6392\nf 3237 3257 3240\nf 3237 6388 6395\nf 3237 6395 3257\nf 3238 3240 3239\nf 3239 3240 3257\nf 3239 3257 3256\nf 3241 3258 3242\nf 3242 3258 3259\nf 3242 3259 6402\nf 3242 6402 6396\nf 3243 3260 3261\nf 3243 3261 3244\nf 3243 6390 6397\nf 3243 6397 3260\nf 3244 3261 3262\nf 3244 3262 3245\nf 3245 3262 3263\nf 3245 3263 3247\nf 3246 3247 3265\nf 3246 3265 3248\nf 3247 3263 3265\nf 3248 3265 3264\nf 3249 3250 3251\nf 3250 3266 3251\nf 3251 3266 3268\nf 3251 3268 3252\nf 3252 3268 3269\nf 3252 3269 3253\nf 3253 3269 3270\nf 3253 3270 3254\nf 3254 3270 3271\nf 3254 3271 3255\nf 3255 3271 6404\nf 3255 6398 6393\nf 3255 6404 6398\nf 3256 3257 3273\nf 3256 3273 3272\nf 3257 6395 6400\nf 3257 6400 3273\nf 3258 3275 3259\nf 3259 3275 3276\nf 3259 3276 6408\nf 3259 6408 6402\nf 3260 3277 3278\nf 3260 3278 3261\nf 3260 6397 6403\nf 3260 6403 3277\nf 3261 3278 3279\nf 3261 3279 3262\nf 3262 3279 3280\nf 3262 3280 3263\nf 3263 3280 3282\nf 3263 3282 3265\nf 3264 3265 3282\nf 3264 3282 3281\nf 3266 3267 3268\nf 3267 3283 3268\nf 3268 3283 3284\nf 3268 3284 3269\nf 3269 3284 3285\nf 3269 3285 3270\nf 3270 3285 3286\nf 3270 3286 3271\nf 3271 3286 6410\nf 3271 6410 6404\nf 3272 3273 3290\nf 3272 3290 3274\nf 3273 3287 3290\nf 3273 6400 6406\nf 3273 6406 3287\nf 3274 3290 3288\nf 3275 3291 3276\nf 3276 3291 3292\nf 3276 3292 6414\nf 3276 6414 6408\nf 3277 3293 3294\nf 3277 3294 3278\nf 3277 6403 6409\nf 3277 6409 3293\nf 3278 3294 3295\nf 3278 3295 3279\nf 3279 3295 3296\nf 3279 3296 3280\nf 3280 3296 3299\nf 3280 3299 3282\nf 3281 3282 3299\nf 3281 3299 3297\nf 3283 3300 3284\nf 3284 3300 3302\nf 3284 3302 3303\nf 3284 3303 3285\nf 3285 3303 3304\nf 3285 3304 3286\nf 3286 3304 6417\nf 3286 6417 6410\nf 3287 3306 3290\nf 3287 6406 6412\nf 3287 6412 3306\nf 3288 3290 3289\nf 3289 3290 3306\nf 3289 3306 3305\nf 3291 3307 3292\nf 3292 3307 3309\nf 3292 3309 6421\nf 3292 6421 6414\nf 3293 3310 3311\nf 3293 3311 3294\nf 3293 6409 6416\nf 3293 6416 3310\nf 3294 3311 3312\nf 3294 3312 3295\nf 3295 3312 3314\nf 3295 3314 3296\nf 3296 3314 3299\nf 3297 3299 3298\nf 3298 3299 3314\nf 3298 3314 3313\nf 3300 3301 3302\nf 3301 3315 3302\nf 3302 3315 3316\nf 3302 3316 3303\nf 3303 3316 3317\nf 3303 3317 3304\nf 3304 3317 6424\nf 3304 6424 6417\nf 3305 3306 3319\nf 3305 3319 3318\nf 3306 6412 6419\nf 3306 6419 3319\nf 3307 3308 3309\nf 3308 3320 3309\nf 3309 3320 6421\nf 3310 3321 3322\nf 3310 3322 3311\nf 3310 6416 6423\nf 3310 6423 3321\nf 3311 3322 3323\nf 3311 3323 3312\nf 3312 3323 3325\nf 3312 3325 3314\nf 3313 3314 3325\nf 3313 3325 3324\nf 3315 3326 3316\nf 3316 3326 3327\nf 3316 3327 3328\nf 3316 3328 3317\nf 3317 3328 6431\nf 3317 6431 6424\nf 3318 3319 3330\nf 3318 3330 3329\nf 3319 6419 6426\nf 3319 6426 3330\nf 3320 3331 6436\nf 3320 6428 6421\nf 3320 6436 6428\nf 3321 3332 3333\nf 3321 3333 3322\nf 3321 6423 6430\nf 3321 6430 3332\nf 3322 3333 3334\nf 3322 3334 3323\nf 3323 3334 3337\nf 3323 3337 3325\nf 3324 3325 3337\nf 3324 3337 3335\nf 3326 3338 3327\nf 3327 3338 3339\nf 3327 3339 3340\nf 3327 3340 3328\nf 3328 3340 6438\nf 3328 6438 6431\nf 3329 3330 3342\nf 3329 3342 3341\nf 3330 6426 6434\nf 3330 6434 3342\nf 3331 3343 6444\nf 3331 6444 6436\nf 3332 3344 3345\nf 3332 3345 3333\nf 3332 6430 6437\nf 3332 6437 3344\nf 3333 3345 3347\nf 3333 3347 3334\nf 3334 3347 3337\nf 3335 3337 3336\nf 3336 3337 3347\nf 3336 3347 3346\nf 3338 3348 3339\nf 3339 3348 3349\nf 3339 3349 3350\nf 3339 3350 3340\nf 3340 3350 3351\nf 3340 3351 6439\nf 3340 6439 6438\nf 3341 3342 3353\nf 3341 3353 3352\nf 3342 6434 6442\nf 3342 6442 3353\nf 3343 3354 6450\nf 3343 6450 6444\nf 3344 3355 3356\nf 3344 3356 3345\nf 3344 6437 6445\nf 3344 6445 3355\nf 3345 3356 3359\nf 3345 3359 3347\nf 3346 3347 3359\nf 3346 3359 3357\nf 3348 3360 3349\nf 3349 3360 3361\nf 3349 3361 3362\nf 3349 3362 3350\nf 3350 3362 3363\nf 3350 3363 3351\nf 3351 3363 6452\nf 3351 6446 6439\nf 3351 6452 6446\nf 3352 3353 3365\nf 3352 3365 3364\nf 3353 6442 6448\nf 3353 6448 3365\nf 3354 3367 6456\nf 3354 6456 6450\nf 3355 3369 3371\nf 3355 3371 3356\nf 3355 6445 6451\nf 3355 6451 3369\nf 3356 3371 3359\nf 3357 3359 3358\nf 3358 3359 3371\nf 3358 3371 3370\nf 3360 3372 3361\nf 3361 3372 3373\nf 3361 3373 3374\nf 3361 3374 3362\nf 3362 3374 3375\nf 3362 3375 3363\nf 3363 3375 6458\nf 3363 6458 6452\nf 3364 3365 3378\nf 3364 3378 3366\nf 3365 3376 3378\nf 3365 6448 6454\nf 3365 6454 3376\nf 3366 3378 3377\nf 3367 3368 6463\nf 3367 6463 6456\nf 3368 3379 3380\nf 3368 3380 6463\nf 3369 3381 3383\nf 3369 3383 3371\nf 3369 6451 6457\nf 3369 6457 3381\nf 3370 3371 3383\nf 3370 3383 3382\nf 3372 3384 3373\nf 3373 3384 3385\nf 3373 3385 3386\nf 3373 3386 3374\nf 3374 3386 3375\nf 3375 3386 6465\nf 3375 6459 6458\nf 3375 6465 6459\nf 3376 3387 3389\nf 3376 3389 3378\nf 3376 6454 6461\nf 3376 6461 3387\nf 3377 3378 3389\nf 3377 3389 3388\nf 3379 3390 3380\nf 3380 3390 3391\nf 3380 3391 6470\nf 3380 6470 6463\nf 3381 3392 3394\nf 3381 3394 3383\nf 3381 6457 6464\nf 3381 6464 3392\nf 3382 3383 3394\nf 3382 3394 3393\nf 3384 3395 3385\nf 3385 3395 3397\nf 3385 3397 3398\nf 3385 3398 3386\nf 3386 3398 6472\nf 3386 6472 6465\nf 3387 3399 3401\nf 3387 3401 3389\nf 3387 6461 6468\nf 3387 6468 3399\nf 3388 3389 3401\nf 3388 3401 3400\nf 3390 3402 3391\nf 3391 3402 3403\nf 3391 3403 6477\nf 3391 6477 6470\nf 3392 3404 3406\nf 3392 3406 3394\nf 3392 6464 6471\nf 3392 6471 3404\nf 3393 3394 3406\nf 3393 3406 3405\nf 3395 3396 3397\nf 3396 3408 3409\nf 3396 3409 3397\nf 3397 3409 3410\nf 3397 3410 3411\nf 3397 3411 3398\nf 3398 3411 6479\nf 3398 6479 6472\nf 3399 3412 3414\nf 3399 3414 3401\nf 3399 6468 6475\nf 3399 6475 3412\nf 3400 3401 3414\nf 3400 3414 3413\nf 3402 3415 3403\nf 3403 3415 3416\nf 3403 3416 6484\nf 3403 6484 6477\nf 3404 3417 3418\nf 3404 3418 3406\nf 3404 6471 6478\nf 3404 6478 3417\nf 3405 3406 3420\nf 3405 3420 3407\nf 3406 3418 3420\nf 3407 3420 3419\nf 3408 3421 3409\nf 3409 3421 3422\nf 3409 3422 3423\nf 3409 3423 3410\nf 3410 3423 3424\nf 3410 3424 3411\nf 3411 3424 6486\nf 3411 6486 6479\nf 3412 3425 3427\nf 3412 3427 3414\nf 3412 6475 6482\nf 3412 6482 3425\nf 3413 3414 3427\nf 3413 3427 3426\nf 3415 3428 3416\nf 3416 3428 3429\nf 3416 3429 6491\nf 3416 6491 6484\nf 3417 3430 3431\nf 3417 3431 3418\nf 3417 6478 6485\nf 3417 6485 3430\nf 3418 3431 3433\nf 3418 3433 3420\nf 3419 3420 3433\nf 3419 3433 3432\nf 3421 3434 3422\nf 3422 3434 3435\nf 3422 3435 3436\nf 3422 3436 3423\nf 3423 3436 3437\nf 3423 3437 3424\nf 3424 3437 6493\nf 3424 6493 6486\nf 3425 3438 3440\nf 3425 3440 3427\nf 3425 6482 6489\nf 3425 6489 3438\nf 3426 3427 3440\nf 3426 3440 3439\nf 3428 3441 3429\nf 3429 3441 3442\nf 3429 3442 6512\nf 3429 6512 6491\nf 3430 3443 3444\nf 3430 3444 3431\nf 3430 6485 6492\nf 3430 6492 3443\nf 3431 3444 3446\nf 3431 3446 3433\nf 3432 3433 3446\nf 3432 3446 3445\nf 3434 3447 3435\nf 3435 3447 3449\nf 3435 3449 3450\nf 3435 3450 3436\nf 3436 3450 3451\nf 3436 3451 3437\nf 3437 3451 3452\nf 3437 3452 6494\nf 3437 6494 6493\nf 3438 3462 3464\nf 3438 3464 3440\nf 3438 6489 6510\nf 3438 6510 3462\nf 3439 3440 3464\nf 3439 3464 3463\nf 3441 3465 3442\nf 3442 3465 3466\nf 3442 3466 6640\nf 3442 6640 6512\nf 3443 3467 3468\nf 3443 3468 3444\nf 3443 6492 6513\nf 3443 6513 3467\nf 3444 3468 3471\nf 3444 3471 3446\nf 3445 3446 3471\nf 3445 3471 3469\nf 3447 3448 3449\nf 3448 3472 3449\nf 3449 3472 3473\nf 3449 3473 3450\nf 3450 3473 3474\nf 3450 3474 3451\nf 3451 3474 3475\nf 3451 3475 3452\nf 3452 3475 3476\nf 3452 3476 6515\nf 3452 6514 6494\nf 3452 6515 6514\nf 3453 3454 6499\nf 3453 3523 3524\nf 3453 3524 3525\nf 3453 3525 3454\nf 3453 6498 6623\nf 3453 6499 6498\nf 3453 6623 3523\nf 3454 3455 6500\nf 3454 3525 3526\nf 3454 3526 3455\nf 3454 6500 6499\nf 3455 3526 3527\nf 3455 3527 6628\nf 3455 6626 6500\nf 3455 6628 6626\nf 3456 3457 6502\nf 3456 3527 3528\nf 3456 3528 3529\nf 3456 3529 3457\nf 3456 6501 6627\nf 3456 6502 6501\nf 3456 6627 3527\nf 3457 3458 6503\nf 3457 3529 3530\nf 3457 3530 3458\nf 3457 6503 6502\nf 3458 3459 6504\nf 3458 3530 3531\nf 3458 3531 3459\nf 3458 6504 6503\nf 3459 3460 6505\nf 3459 3531 3532\nf 3459 3532 3460\nf 3459 6505 6504\nf 3460 3461 6506\nf 3460 3532 3533\nf 3460 3533 3461\nf 3460 6506 6505\nf 3461 3533 3534\nf 3461 3534 6631\nf 3461 6630 6506\nf 3461 6631 6630\nf 3462 3537 3539\nf 3462 3539 3464\nf 3462 6510 6638\nf 3462 6638 3537\nf 3463 3464 3539\nf 3463 3539 3538\nf 3465 3540 3466\nf 3466 3540 3541\nf 3466 3541 6682\nf 3466 6682 6640\nf 3467 3542 3545\nf 3467 3545 3468\nf 3467 6513 6641\nf 3467 6641 3542\nf 3468 3545 3471\nf 3469 3471 3470\nf 3470 3471 3545\nf 3470 3545 3543\nf 3472 3546 3473\nf 3473 3546 3547\nf 3473 3547 3548\nf 3473 3548 3474\nf 3474 3548 3549\nf 3474 3549 3475\nf 3475 3549 3550\nf 3475 3550 3476\nf 3476 3550 3551\nf 3476 3551 6643\nf 3476 6642 6515\nf 3476 6643 6642\nf 3477 3478 6523\nf 3477 3554 3555\nf 3477 3555 3556\nf 3477 3556 3478\nf 3477 6521 6649\nf 3477 6523 6521\nf 3477 6649 3554\nf 3478 3479 6525\nf 3478 3556 3557\nf 3478 3557 3479\nf 3478 6525 6523\nf 3479 3480 6527\nf 3479 3557 3558\nf 3479 3558 3480\nf 3479 6527 6525\nf 3480 3481 6529\nf 3480 3558 3559\nf 3480 3559 3481\nf 3480 6529 6527\nf 3481 3482 6531\nf 3481 3559 3560\nf 3481 3560 3482\nf 3481 6531 6529\nf 3482 3483 6533\nf 3482 3560 3561\nf 3482 3561 3483\nf 3482 6533 6531\nf 3483 3484 6535\nf 3483 3561 3562\nf 3483 3562 3484\nf 3483 6535 6533\nf 3484 3485 6536\nf 3484 3562 3563\nf 3484 3563 3485\nf 3484 6536 6535\nf 3485 3486 6538\nf 3485 3563 3565\nf 3485 3565 3486\nf 3485 6538 6536\nf 3486 3487 6540\nf 3486 3565 3567\nf 3486 3567 3487\nf 3486 6540 6538\nf 3487 3488 6542\nf 3487 3567 3569\nf 3487 3569 3488\nf 3487 6542 6540\nf 3488 3489 6544\nf 3488 3569 3571\nf 3488 3571 3489\nf 3488 6544 6542\nf 3489 3490 6546\nf 3489 3571 3573\nf 3489 3573 3490\nf 3489 6546 6544\nf 3490 3491 6548\nf 3490 3573 3575\nf 3490 3575 3491\nf 3490 6548 6546\nf 3491 3492 6550\nf 3491 3575 3577\nf 3491 3577 3492\nf 3491 6550 6548\nf 3492 3493 6552\nf 3492 3577 3579\nf 3492 3579 3493\nf 3492 6552 6550\nf 3493 3494 6554\nf 3493 3579 3581\nf 3493 3581 3494\nf 3493 6554 6552\nf 3494 3495 6556\nf 3494 3581 3583\nf 3494 3583 3495\nf 3494 6556 6554\nf 3495 3496 6558\nf 3495 3583 3585\nf 3495 3585 3496\nf 3495 6558 6556\nf 3496 3497 6560\nf 3496 3585 3587\nf 3496 3587 3497\nf 3496 6560 6558\nf 3497 3498 6562\nf 3497 3587 3589\nf 3497 3589 3498\nf 3497 6562 6560\nf 3498 3499 6564\nf 3498 3589 3591\nf 3498 3591 3499\nf 3498 6564 6562\nf 3499 3500 6566\nf 3499 3591 3593\nf 3499 3593 3500\nf 3499 6566 6564\nf 3500 3501 6568\nf 3500 3593 3595\nf 3500 3595 3501\nf 3500 6568 6566\nf 3501 3502 6570\nf 3501 3595 3597\nf 3501 3597 3502\nf 3501 6570 6568\nf 3502 3503 6572\nf 3502 3597 3599\nf 3502 3599 3503\nf 3502 6572 6570\nf 3503 3504 6574\nf 3503 3599 3601\nf 3503 3601 3504\nf 3503 6574 6572\nf 3504 3505 6576\nf 3504 3601 3602\nf 3504 3602 3505\nf 3504 6576 6574\nf 3505 3506 6578\nf 3505 3602 3603\nf 3505 3603 3506\nf 3505 6578 6576\nf 3506 3507 6580\nf 3506 3603 3604\nf 3506 3604 3507\nf 3506 6580 6578\nf 3507 3508 6582\nf 3507 3604 3605\nf 3507 3605 3508\nf 3507 6582 6580\nf 3508 3509 6584\nf 3508 3605 3606\nf 3508 3606 3509\nf 3508 6584 6582\nf 3509 3606 3607\nf 3509 3607 6653\nf 3509 6652 6584\nf 3509 6653 6652\nf 3510 3511 6599\nf 3510 3617 3618\nf 3510 3618 3619\nf 3510 3619 3511\nf 3510 6597 6673\nf 3510 6599 6597\nf 3510 6673 3617\nf 3511 3512 6601\nf 3511 3619 3620\nf 3511 3620 3512\nf 3511 6601 6599\nf 3512 3513 6603\nf 3512 3620 3621\nf 3512 3621 3513\nf 3512 6603 6601\nf 3513 3514 6605\nf 3513 3621 3623\nf 3513 3623 3514\nf 3513 6605 6603\nf 3514 3515 6607\nf 3514 3623 3625\nf 3514 3625 3515\nf 3514 6607 6605\nf 3515 3516 6609\nf 3515 3625 3627\nf 3515 3627 3516\nf 3515 6609 6607\nf 3516 3517 6611\nf 3516 3627 3629\nf 3516 3629 3517\nf 3516 6611 6609\nf 3517 3518 6613\nf 3517 3629 3631\nf 3517 3631 3518\nf 3517 6613 6611\nf 3518 3519 6615\nf 3518 3631 3633\nf 3518 3633 3519\nf 3518 6615 6613\nf 3519 3520 6617\nf 3519 3633 3635\nf 3519 3635 3520\nf 3519 6617 6615\nf 3520 3521 6619\nf 3520 3635 3637\nf 3520 3637 3521\nf 3520 6619 6617\nf 3521 3522 6621\nf 3521 3637 3639\nf 3521 3639 3522\nf 3521 6621 6619\nf 3522 3523 6624\nf 3522 3639 3641\nf 3522 3641 3523\nf 3522 6624 6621\nf 3523 3641 3643\nf 3523 3643 3524\nf 3523 6623 6624\nf 3524 3643 3645\nf 3524 3645 3525\nf 3525 3645 3647\nf 3525 3647 3526\nf 3526 3647 3649\nf 3526 3649 3527\nf 3527 3649 3651\nf 3527 3651 3528\nf 3527 6627 6628\nf 3528 3651 3653\nf 3528 3653 3529\nf 3529 3653 3655\nf 3529 3655 3530\nf 3530 3655 3657\nf 3530 3657 3531\nf 3531 3657 3659\nf 3531 3659 3532\nf 3532 3659 3661\nf 3532 3661 3533\nf 3533 3661 3663\nf 3533 3663 3534\nf 3534 3535 6633\nf 3534 3663 3664\nf 3534 3664 3535\nf 3534 6633 6631\nf 3535 3536 6635\nf 3535 3664 3665\nf 3535 3665 3536\nf 3535 6635 6633\nf 3536 3665 3666\nf 3536 3666 6677\nf 3536 6676 6635\nf 3536 6677 6676\nf 3537 3667 3668\nf 3537 3668 3671\nf 3537 3671 3539\nf 3537 6638 6679\nf 3537 6679 3667\nf 3538 3539 3671\nf 3538 3671 3669\nf 3540 3672 3541\nf 3541 3672 3673\nf 3541 3673 6684\nf 3541 6684 6682\nf 3542 3675 3545\nf 3542 6641 6683\nf 3542 6683 3675\nf 3543 3545 3544\nf 3544 3545 3675\nf 3544 3675 3674\nf 3546 3676 3547\nf 3547 3676 3678\nf 3547 3678 3679\nf 3547 3679 3548\nf 3548 3679 3680\nf 3548 3680 3549\nf 3549 3680 3681\nf 3549 3681 3550\nf 3550 3681 3682\nf 3550 3682 3551\nf 3551 3552 6645\nf 3551 3682 3683\nf 3551 3683 3552\nf 3551 6645 6643\nf 3552 3553 6647\nf 3552 3683 3684\nf 3552 3684 3553\nf 3552 6647 6645\nf 3553 3554 6650\nf 3553 3684 3685\nf 3553 3685 3554\nf 3553 6650 6647\nf 3554 3685 3686\nf 3554 3686 3555\nf 3554 6649 6650\nf 3555 3686 3688\nf 3555 3688 3556\nf 3556 3688 3690\nf 3556 3690 3557\nf 3557 3690 3692\nf 3557 3692 3558\nf 3558 3692 3694\nf 3558 3694 3559\nf 3559 3694 3696\nf 3559 3696 3560\nf 3560 3696 3698\nf 3560 3698 3561\nf 3561 3698 3700\nf 3561 3700 3562\nf 3562 3700 3703\nf 3562 3703 3563\nf 3563 3703 3565\nf 3564 3565 3703\nf 3564 3566 3565\nf 3564 3703 3701\nf 3565 3566 3567\nf 3566 3568 3567\nf 3567 3568 3569\nf 3568 3570 3569\nf 3569 3570 3571\nf 3570 3572 3571\nf 3571 3572 3573\nf 3572 3574 3573\nf 3573 3574 3575\nf 3574 3576 3575\nf 3575 3576 3577\nf 3576 3578 3577\nf 3577 3578 3579\nf 3578 3580 3579\nf 3579 3580 3581\nf 3580 3582 3581\nf 3581 3582 3583\nf 3582 3584 3583\nf 3583 3584 3585\nf 3584 3586 3585\nf 3585 3586 3587\nf 3586 3588 3587\nf 3587 3588 3589\nf 3588 3590 3589\nf 3589 3590 3591\nf 3590 3592 3591\nf 3591 3592 3593\nf 3592 3594 3593\nf 3593 3594 3595\nf 3594 3596 3595\nf 3595 3596 3597\nf 3596 3598 3597\nf 3597 3598 3599\nf 3598 3600 3599\nf 3599 3600 3601\nf 3600 3704 3601\nf 3601 3704 3706\nf 3601 3706 3602\nf 3602 3706 3708\nf 3602 3708 3603\nf 3603 3708 3710\nf 3603 3710 3604\nf 3604 3710 3712\nf 3604 3712 3605\nf 3605 3712 3714\nf 3605 3714 3606\nf 3606 3714 3716\nf 3606 3716 3607\nf 3607 3608 6655\nf 3607 3716 3718\nf 3607 3718 3608\nf 3607 6655 6653\nf 3608 3609 6657\nf 3608 3718 3720\nf 3608 3720 3609\nf 3608 6657 6655\nf 3609 3610 6659\nf 3609 3720 3721\nf 3609 3721 3610\nf 3609 6659 6657\nf 3610 3611 6661\nf 3610 3721 3722\nf 3610 3722 3611\nf 3610 6661 6659\nf 3611 3612 6663\nf 3611 3722 3723\nf 3611 3723 3612\nf 3611 6663 6661\nf 3612 3613 6665\nf 3612 3723 3724\nf 3612 3724 3613\nf 3612 6665 6663\nf 3613 3614 6667\nf 3613 3724 3725\nf 3613 3725 3614\nf 3613 6667 6665\nf 3614 3615 6669\nf 3614 3725 3726\nf 3614 3726 3615\nf 3614 6669 6667\nf 3615 3616 6671\nf 3615 3726 3727\nf 3615 3727 3616\nf 3615 6671 6669\nf 3616 3617 6674\nf 3616 3727 3729\nf 3616 3729 3617\nf 3616 6674 6671\nf 3617 3729 3731\nf 3617 3731 3618\nf 3617 6673 6674\nf 3618 3731 3733\nf 3618 3733 3619\nf 3619 3733 3735\nf 3619 3735 3620\nf 3620 3735 3738\nf 3620 3738 3621\nf 3621 3738 3623\nf 3622 3623 3738\nf 3622 3624 3623\nf 3622 3738 3736\nf 3623 3624 3625\nf 3624 3626 3625\nf 3625 3626 3627\nf 3626 3628 3627\nf 3627 3628 3629\nf 3628 3630 3629\nf 3629 3630 3631\nf 3630 3632 3631\nf 3631 3632 3633\nf 3632 3634 3633\nf 3633 3634 3635\nf 3634 3636 3635\nf 3635 3636 3637\nf 3636 3638 3637\nf 3637 3638 3639\nf 3638 3640 3639\nf 3639 3640 3641\nf 3640 3642 3641\nf 3641 3642 3643\nf 3642 3644 3643\nf 3643 3644 3645\nf 3644 3646 3645\nf 3645 3646 3647\nf 3646 3648 3647\nf 3647 3648 3649\nf 3648 3650 3649\nf 3649 3650 3651\nf 3650 3652 3651\nf 3651 3652 3653\nf 3652 3654 3653\nf 3653 3654 3655\nf 3654 3656 3655\nf 3655 3656 3657\nf 3656 3658 3657\nf 3657 3658 3659\nf 3658 3660 3659\nf 3659 3660 3661\nf 3660 3662 3661\nf 3661 3662 3663\nf 3662 3739 3663\nf 3663 3739 3741\nf 3663 3741 3664\nf 3664 3741 3743\nf 3664 3743 3665\nf 3665 3743 3744\nf 3665 3744 3666\nf 3666 3667 6680\nf 3666 3744 3745\nf 3666 3745 3667\nf 3666 6680 6677\nf 3667 3745 3748\nf 3667 3748 3668\nf 3667 6679 6680\nf 3668 3748 3671\nf 3669 3671 3670\nf 3670 3671 3748\nf 3670 3748 3746\nf 3672 3749 3673\nf 3673 3749 3750\nf 3673 3750 6686\nf 3673 6686 6684\nf 3674 3675 3752\nf 3674 3752 3751\nf 3675 6683 6685\nf 3675 6685 3752\nf 3676 3677 3678\nf 3677 3753 3678\nf 3678 3753 3754\nf 3678 3754 3679\nf 3679 3754 3755\nf 3679 3755 3680\nf 3680 3755 3756\nf 3680 3756 3681\nf 3681 3756 3757\nf 3681 3757 3682\nf 3682 3757 3758\nf 3682 3758 3683\nf 3683 3758 3759\nf 3683 3759 3684\nf 3684 3759 3760\nf 3684 3760 3685\nf 3685 3760 3763\nf 3685 3763 3686\nf 3686 3763 3688\nf 3687 3688 3763\nf 3687 3689 3688\nf 3687 3763 3761\nf 3688 3689 3690\nf 3689 3691 3690\nf 3690 3691 3692\nf 3691 3693 3692\nf 3692 3693 3694\nf 3693 3695 3694\nf 3694 3695 3696\nf 3695 3697 3696\nf 3696 3697 3698\nf 3697 3699 3698\nf 3698 3699 3700\nf 3699 3702 3700\nf 3700 3702 3703\nf 3701 3703 3702\nf 3704 3705 3706\nf 3705 3707 3706\nf 3706 3707 3708\nf 3707 3709 3708\nf 3708 3709 3710\nf 3709 3711 3710\nf 3710 3711 3712\nf 3711 3713 3712\nf 3712 3713 3714\nf 3713 3715 3714\nf 3714 3715 3716\nf 3715 3717 3716\nf 3716 3717 3718\nf 3717 3719 3718\nf 3718 3719 3720\nf 3719 3764 3720\nf 3720 3764 3766\nf 3720 3766 3721\nf 3721 3766 3768\nf 3721 3768 3722\nf 3722 3768 3770\nf 3722 3770 3723\nf 3723 3770 3772\nf 3723 3772 3724\nf 3724 3772 3774\nf 3724 3774 3725\nf 3725 3774 3776\nf 3725 3776 3726\nf 3726 3776 3779\nf 3726 3779 3727\nf 3727 3779 3729\nf 3728 3729 3779\nf 3728 3730 3729\nf 3728 3779 3777\nf 3729 3730 3731\nf 3730 3732 3731\nf 3731 3732 3733\nf 3732 3734 3733\nf 3733 3734 3735\nf 3734 3737 3735\nf 3735 3737 3738\nf 3736 3738 3737\nf 3739 3740 3741\nf 3740 3742 3741\nf 3741 3742 3743\nf 3742 3780 3743\nf 3743 3780 3782\nf 3743 3782 3744\nf 3744 3782 3785\nf 3744 3785 3745\nf 3745 3785 3748\nf 3746 3748 3747\nf 3747 3748 3785\nf 3747 3785 3783\nf 3749 3786 3750\nf 3750 3786 3787\nf 3750 3787 6688\nf 3750 6688 6686\nf 3751 3752 3789\nf 3751 3789 3788\nf 3752 6685 6687\nf 3752 6687 3789\nf 3753 3790 3754\nf 3754 3790 3791\nf 3754 3791 3792\nf 3754 3792 3755\nf 3755 3792 3793\nf 3755 3793 3756\nf 3756 3793 3794\nf 3756 3794 3757\nf 3757 3794 3795\nf 3757 3795 3758\nf 3758 3795 3796\nf 3758 3796 3759\nf 3759 3796 3798\nf 3759 3798 3760\nf 3760 3798 3763\nf 3761 3763 3762\nf 3762 3763 3798\nf 3762 3798 3797\nf 3764 3765 3766\nf 3765 3767 3766\nf 3766 3767 3768\nf 3767 3769 3768\nf 3768 3769 3770\nf 3769 3771 3770\nf 3770 3771 3772\nf 3771 3773 3772\nf 3772 3773 3774\nf 3773 3775 3774\nf 3774 3775 3776\nf 3775 3778 3776\nf 3776 3778 3779\nf 3777 3779 3778\nf 3780 3781 3782\nf 3781 3784 3782\nf 3782 3784 3785\nf 3783 3785 3784\nf 3786 3817 3787\nf 3787 3817 3818\nf 3787 3818 6690\nf 3787 6690 6688\nf 3788 3789 3820\nf 3788 3820 3819\nf 3789 6687 6689\nf 3789 6689 3820\nf 3790 3821 3791\nf 3791 3821 3822\nf 3791 3822 3823\nf 3791 3823 3792\nf 3792 3823 3824\nf 3792 3824 3793\nf 3793 3824 3825\nf 3793 3825 3794\nf 3794 3825 3826\nf 3794 3826 3795\nf 3795 3826 3827\nf 3795 3827 3796\nf 3796 3827 3828\nf 3796 3828 3798\nf 3797 3798 3829\nf 3797 3829 3799\nf 3798 3828 3829\nf 3799 3829 3830\nf 3799 3830 3800\nf 3800 3830 3831\nf 3800 3831 3801\nf 3801 3831 3832\nf 3801 3832 3802\nf 3802 3832 3834\nf 3802 3834 3803\nf 3803 3834 3833\nf 3804 3835 3837\nf 3804 3837 3839\nf 3804 3839 3805\nf 3805 3839 3838\nf 3806 3849 3851\nf 3806 3851 3852\nf 3806 3852 3807\nf 3807 3852 3853\nf 3807 3853 3808\nf 3808 3853 3854\nf 3808 3854 3809\nf 3809 3854 3855\nf 3809 3855 3810\nf 3810 3855 3856\nf 3810 3856 3811\nf 3811 3856 3857\nf 3811 3857 3812\nf 3812 3857 3858\nf 3812 3858 3813\nf 3813 3858 3859\nf 3813 3859 3814\nf 3814 3859 3861\nf 3814 3861 3815\nf 3815 3861 3860\nf 3816 3884 3887\nf 3816 3887 3886\nf 3817 3889 3818\nf 3818 3889 3890\nf 3818 3890 6693\nf 3818 6693 6690\nf 3819 3820 3892\nf 3819 3892 3891\nf 3820 6689 6691\nf 3820 6691 3892\nf 3821 3893 3822\nf 3822 3893 3894\nf 3822 3894 3895\nf 3822 3895 3823\nf 3823 3895 3896\nf 3823 3896 3824\nf 3824 3896 3897\nf 3824 3897 3825\nf 3825 3897 3826\nf 3826 3897 6696\nf 3826 3898 3827\nf 3826 6692 3898\nf 3826 6696 6692\nf 3827 3898 3899\nf 3827 3899 3828\nf 3828 3899 3900\nf 3828 3900 3829\nf 3829 3900 3901\nf 3829 3901 3830\nf 3830 3901 3902\nf 3830 3902 3831\nf 3831 3902 3903\nf 3831 3903 3832\nf 3832 3903 3904\nf 3832 3904 3834\nf 3833 3834 3905\nf 3833 3905 3836\nf 3834 3904 3905\nf 3835 3836 3837\nf 3836 3905 3837\nf 3837 3905 3906\nf 3837 3906 3907\nf 3837 3907 3839\nf 3838 3839 3908\nf 3838 3908 3840\nf 3839 3907 3908\nf 3840 3908 3909\nf 3840 3909 3841\nf 3841 3909 3910\nf 3841 3910 3842\nf 3842 3910 3911\nf 3842 3911 3843\nf 3843 3911 3913\nf 3843 3913 3844\nf 3844 3913 3912\nf 3845 3930 3932\nf 3845 3932 3933\nf 3845 3933 3846\nf 3846 3933 3934\nf 3846 3934 3847\nf 3847 3934 3935\nf 3847 3935 3848\nf 3848 3935 3936\nf 3848 3936 3850\nf 3849 3850 3851\nf 3850 3936 3851\nf 3851 3936 3937\nf 3851 3937 3938\nf 3851 3938 3852\nf 3852 3938 3939\nf 3852 3939 3853\nf 3853 3939 3940\nf 3853 3940 3854\nf 3854 3940 3941\nf 3854 3941 3855\nf 3855 3941 3942\nf 3855 3942 3856\nf 3856 3942 3943\nf 3856 3943 3857\nf 3857 3943 3944\nf 3857 3944 3858\nf 3858 3944 3945\nf 3858 3945 3859\nf 3859 3945 3946\nf 3859 3946 3861\nf 3860 3861 3947\nf 3860 3947 3862\nf 3861 3946 3947\nf 3862 3947 3948\nf 3862 3948 3863\nf 3863 3948 3949\nf 3863 3949 3864\nf 3864 3949 3950\nf 3864 3950 3865\nf 3865 3950 3951\nf 3865 3951 3866\nf 3866 3951 3952\nf 3866 3952 3867\nf 3867 3952 3953\nf 3867 3953 3868\nf 3868 3953 3954\nf 3868 3954 3869\nf 3869 3954 3955\nf 3869 3955 3870\nf 3870 3955 3956\nf 3870 3956 3871\nf 3871 3956 3957\nf 3871 3957 3872\nf 3872 3957 3958\nf 3872 3958 3873\nf 3873 3958 3959\nf 3873 3959 3874\nf 3874 3959 3960\nf 3874 3960 3875\nf 3875 3960 3961\nf 3875 3961 3876\nf 3876 3961 3962\nf 3876 3962 3877\nf 3877 3962 3963\nf 3877 3963 3878\nf 3878 3963 3964\nf 3878 3964 3879\nf 3879 3964 3965\nf 3879 3965 3880\nf 3880 3965 3967\nf 3880 3967 3881\nf 3881 3967 3966\nf 3882 3970 3972\nf 3882 3972 3973\nf 3882 3973 3883\nf 3883 3973 3974\nf 3883 3974 3885\nf 3884 3885 3887\nf 3885 3974 3887\nf 3886 3887 3977\nf 3886 3977 3888\nf 3887 3974 3975\nf 3887 3975 3977\nf 3888 3977 3976\nf 3889 3978 3890\nf 3890 3978 3979\nf 3890 3979 6710\nf 3890 6710 6693\nf 3891 3892 3981\nf 3891 3981 3980\nf 3892 6691 6694\nf 3892 6694 3981\nf 3893 3982 3894\nf 3894 3982 3984\nf 3894 3984 3985\nf 3894 3985 3895\nf 3895 3985 3896\nf 3896 3985 6712\nf 3896 6695 3897\nf 3896 6712 6695\nf 3897 6695 6697\nf 3897 6697 6696\nf 3898 6692 6698\nf 3898 6698 6700\nf 3898 6700 3899\nf 3899 6700 6701\nf 3899 6701 3900\nf 3900 6701 6702\nf 3900 6702 3901\nf 3901 6702 6703\nf 3901 6703 3902\nf 3902 3986 3903\nf 3902 6703 6704\nf 3902 6704 3986\nf 3903 3986 3987\nf 3903 3987 3904\nf 3904 3987 3905\nf 3905 3987 6723\nf 3905 6705 3906\nf 3905 6723 6705\nf 3906 6705 6706\nf 3906 6706 3907\nf 3907 6706 6707\nf 3907 6707 3908\nf 3908 6707 6708\nf 3908 6708 3909\nf 3909 3988 3910\nf 3909 6708 6709\nf 3909 6709 3988\nf 3910 3988 3989\nf 3910 3989 3911\nf 3911 3989 3990\nf 3911 3990 3913\nf 3912 3913 3991\nf 3912 3991 3914\nf 3913 3990 3991\nf 3914 3991 3992\nf 3914 3992 3915\nf 3915 3992 3993\nf 3915 3993 3916\nf 3916 3993 3994\nf 3916 3994 3917\nf 3917 3994 3995\nf 3917 3995 3918\nf 3918 3995 3996\nf 3918 3996 3919\nf 3919 3996 3997\nf 3919 3997 3920\nf 3920 3997 3998\nf 3920 3998 3921\nf 3921 3998 3999\nf 3921 3999 3922\nf 3922 3999 4000\nf 3922 4000 3923\nf 3923 4000 4001\nf 3923 4001 3924\nf 3924 4001 4002\nf 3924 4002 3925\nf 3925 4002 4003\nf 3925 4003 3926\nf 3926 4003 4004\nf 3926 4004 3927\nf 3927 4004 4005\nf 3927 4005 3928\nf 3928 4005 4006\nf 3928 4006 3929\nf 3929 4006 4007\nf 3929 4007 3931\nf 3930 3931 3932\nf 3931 4007 3932\nf 3932 4007 4008\nf 3932 4008 4009\nf 3932 4009 3933\nf 3933 4009 4010\nf 3933 4010 3934\nf 3934 4010 4011\nf 3934 4011 3935\nf 3935 4011 4012\nf 3935 4012 3936\nf 3936 4012 4013\nf 3936 4013 3937\nf 3937 4013 4014\nf 3937 4014 3938\nf 3938 4014 4015\nf 3938 4015 3939\nf 3939 4015 4016\nf 3939 4016 3940\nf 3940 4016 4017\nf 3940 4017 3941\nf 3941 4017 4018\nf 3941 4018 3942\nf 3942 4018 4019\nf 3942 4019 3943\nf 3943 4019 4020\nf 3943 4020 3944\nf 3944 4020 4021\nf 3944 4021 3945\nf 3945 4021 4022\nf 3945 4022 3946\nf 3946 4022 4023\nf 3946 4023 3947\nf 3947 4023 4024\nf 3947 4024 3948\nf 3948 4024 4025\nf 3948 4025 3949\nf 3949 4025 4026\nf 3949 4026 3950\nf 3950 4026 4027\nf 3950 4027 3951\nf 3951 4027 4028\nf 3951 4028 3952\nf 3952 4028 4029\nf 3952 4029 3953\nf 3953 4029 4030\nf 3953 4030 3954\nf 3954 4030 4031\nf 3954 4031 3955\nf 3955 4031 4032\nf 3955 4032 3956\nf 3956 4032 4033\nf 3956 4033 3957\nf 3957 4033 4034\nf 3957 4034 3958\nf 3958 4034 4035\nf 3958 4035 3959\nf 3959 4035 4036\nf 3959 4036 3960\nf 3960 4036 4037\nf 3960 4037 3961\nf 3961 4037 4038\nf 3961 4038 3962\nf 3962 4038 4039\nf 3962 4039 3963\nf 3963 4039 4040\nf 3963 4040 3964\nf 3964 4040 4041\nf 3964 4041 3965\nf 3965 4041 4042\nf 3965 4042 3967\nf 3966 3967 4043\nf 3966 4043 3968\nf 3967 4042 4043\nf 3968 4043 4044\nf 3968 4044 3969\nf 3969 4044 4045\nf 3969 4045 3971\nf 3970 3971 3972\nf 3971 4045 3972\nf 3972 4045 4046\nf 3972 4046 4047\nf 3972 4047 3973\nf 3973 4047 4048\nf 3973 4048 3974\nf 3974 4048 4049\nf 3974 4049 3975\nf 3975 4049 4051\nf 3975 4051 3977\nf 3976 3977 4051\nf 3976 4051 4050\nf 3978 4052 3979\nf 3979 4052 4053\nf 3979 4053 6771\nf 3979 6771 6710\nf 3980 3981 4055\nf 3980 4055 4054\nf 3981 6694 6711\nf 3981 6711 4055\nf 3982 3983 3984\nf 3983 4056 4057\nf 3983 4057 3984\nf 3984 4057 4058\nf 3984 4058 4059\nf 3984 4059 3985\nf 3985 4059 6773\nf 3985 6773 6712\nf 3986 6704 6720\nf 3986 6720 6722\nf 3986 6722 3987\nf 3987 6722 6724\nf 3987 6724 6723\nf 3988 6709 6729\nf 3988 6729 6731\nf 3988 6731 3989\nf 3989 6731 6732\nf 3989 6732 3990\nf 3990 6732 6733\nf 3990 6733 3991\nf 3991 4060 3992\nf 3991 6733 6734\nf 3991 6734 4060\nf 3992 4060 4061\nf 3992 4061 3993\nf 3993 4061 4062\nf 3993 4062 3994\nf 3994 4062 4063\nf 3994 4063 3995\nf 3995 4063 4064\nf 3995 4064 3996\nf 3996 4064 4065\nf 3996 4065 3997\nf 3997 4065 4066\nf 3997 4066 3998\nf 3998 4066 4067\nf 3998 4067 3999\nf 3999 4067 4068\nf 3999 4068 4000\nf 4000 4068 4069\nf 4000 4069 4001\nf 4001 4069 4070\nf 4001 4070 4002\nf 4002 4070 4071\nf 4002 4071 4003\nf 4003 4071 4072\nf 4003 4072 4004\nf 4004 4072 4073\nf 4004 4073 4005\nf 4005 4073 4074\nf 4005 4074 4006\nf 4006 4074 4075\nf 4006 4075 4007\nf 4007 4075 4076\nf 4007 4076 4008\nf 4008 4076 4009\nf 4009 4076 6801\nf 4009 6735 4010\nf 4009 6801 6735\nf 4010 6735 6736\nf 4010 6736 4011\nf 4011 6736 6737\nf 4011 6737 4012\nf 4012 6737 6738\nf 4012 6738 4013\nf 4013 6738 6739\nf 4013 6739 4014\nf 4014 6739 6740\nf 4014 6740 4015\nf 4015 6740 6741\nf 4015 6741 4016\nf 4016 6741 6742\nf 4016 6742 4017\nf 4017 6742 6743\nf 4017 6743 4018\nf 4018 6743 6744\nf 4018 6744 4019\nf 4019 6744 6745\nf 4019 6745 4020\nf 4020 6745 6746\nf 4020 6746 4021\nf 4021 6746 6747\nf 4021 6747 4022\nf 4022 6747 6748\nf 4022 6748 4023\nf 4023 6748 6749\nf 4023 6749 4024\nf 4024 6749 6750\nf 4024 6750 4025\nf 4025 6750 6751\nf 4025 6751 4026\nf 4026 6751 6752\nf 4026 6752 4027\nf 4027 6752 6753\nf 4027 6753 4028\nf 4028 6753 6754\nf 4028 6754 4029\nf 4029 6754 6755\nf 4029 6755 4030\nf 4030 6755 6756\nf 4030 6756 4031\nf 4031 6756 6757\nf 4031 6757 4032\nf 4032 6757 6758\nf 4032 6758 4033\nf 4033 6758 6759\nf 4033 6759 4034\nf 4034 4077 4035\nf 4034 6759 6760\nf 4034 6760 4077\nf 4035 4077 4078\nf 4035 4078 4036\nf 4036 4078 4079\nf 4036 4079 4037\nf 4037 4079 4080\nf 4037 4080 4038\nf 4038 4080 4039\nf 4039 4080 6833\nf 4039 6761 4040\nf 4039 6833 6761\nf 4040 6761 6762\nf 4040 6762 4041\nf 4041 6762 6763\nf 4041 6763 4042\nf 4042 6763 6764\nf 4042 6764 4043\nf 4043 6764 6765\nf 4043 6765 4044\nf 4044 6765 6766\nf 4044 6766 4045\nf 4045 6766 6767\nf 4045 6767 4046\nf 4046 6767 6768\nf 4046 6768 4047\nf 4047 6768 6769\nf 4047 6769 4048\nf 4048 4081 4049\nf 4048 6769 6770\nf 4048 6770 4081\nf 4049 4081 4083\nf 4049 4083 4051\nf 4050 4051 4083\nf 4050 4083 4082\nf 4052 4084 4053\nf 4053 4084 4085\nf 4053 4085 6847\nf 4053 6847 6771\nf 4054 4055 4087\nf 4054 4087 4086\nf 4055 6711 6772\nf 4055 6772 4087\nf 4056 4088 4057\nf 4057 4088 4089\nf 4057 4089 4090\nf 4057 4090 4058\nf 4058 4090 4091\nf 4058 4091 4059\nf 4059 4091 6849\nf 4059 6849 6773\nf 4060 6734 6783\nf 4060 6783 6785\nf 4060 6785 4061\nf 4061 6785 6786\nf 4061 6786 4062\nf 4062 6786 6787\nf 4062 6787 4063\nf 4063 6787 6788\nf 4063 6788 4064\nf 4064 6788 6789\nf 4064 6789 4065\nf 4065 6789 6790\nf 4065 6790 4066\nf 4066 6790 6791\nf 4066 6791 4067\nf 4067 6791 6792\nf 4067 6792 4068\nf 4068 6792 6793\nf 4068 6793 4069\nf 4069 6793 6794\nf 4069 6794 4070\nf 4070 6794 6795\nf 4070 6795 4071\nf 4071 6795 6796\nf 4071 6796 4072\nf 4072 6796 6797\nf 4072 6797 4073\nf 4073 6797 6798\nf 4073 6798 4074\nf 4074 6798 6799\nf 4074 6799 4075\nf 4075 6799 6800\nf 4075 6800 4076\nf 4076 6800 6802\nf 4076 6802 6801\nf 4077 6760 6828\nf 4077 6828 6830\nf 4077 6830 4078\nf 4078 6830 6831\nf 4078 6831 4079\nf 4079 6831 6832\nf 4079 6832 4080\nf 4080 6832 6834\nf 4080 6834 6833\nf 4081 4093 4083\nf 4081 6770 6844\nf 4081 6844 6846\nf 4081 6846 4093\nf 4082 4083 4093\nf 4082 4093 4092\nf 4084 4095 4085\nf 4085 4095 4096\nf 4085 4096 6865\nf 4085 6865 6847\nf 4086 4087 4098\nf 4086 4098 4097\nf 4087 6772 6848\nf 4087 6848 4098\nf 4088 4099 4089\nf 4089 4099 4100\nf 4089 4100 4101\nf 4089 4101 4090\nf 4090 4101 4102\nf 4090 4102 4091\nf 4091 4102 6867\nf 4091 6867 6849\nf 4092 4093 4105\nf 4092 4105 4094\nf 4093 4103 4105\nf 4093 6846 6863\nf 4093 6863 4103\nf 4094 4105 4104\nf 4095 4106 4096\nf 4096 4106 4107\nf 4096 4107 6871\nf 4096 6871 6865\nf 4097 4098 4109\nf 4097 4109 4108\nf 4098 6848 6866\nf 4098 6866 4109\nf 4099 4110 4100\nf 4100 4110 4111\nf 4100 4111 4112\nf 4100 4112 4101\nf 4101 4112 4113\nf 4101 4113 4102\nf 4102 4113 6873\nf 4102 6873 6867\nf 4103 4115 4105\nf 4103 6863 6869\nf 4103 6869 6870\nf 4103 6870 4115\nf 4104 4105 4115\nf 4104 4115 4114\nf 4106 4116 4107\nf 4107 4116 4117\nf 4107 4117 6877\nf 4107 6877 6871\nf 4108 4109 4119\nf 4108 4119 4118\nf 4109 6866 6872\nf 4109 6872 4119\nf 4110 4120 4111\nf 4111 4120 4121\nf 4111 4121 4122\nf 4111 4122 4112\nf 4112 4122 4123\nf 4112 4123 4113\nf 4113 4123 6879\nf 4113 6879 6873\nf 4114 4115 4125\nf 4114 4125 4124\nf 4115 6870 6875\nf 4115 6875 4125\nf 4116 4126 4117\nf 4117 4126 4127\nf 4117 4127 6883\nf 4117 6883 6877\nf 4118 4119 4129\nf 4118 4129 4128\nf 4119 6872 6878\nf 4119 6878 4129\nf 4120 4130 4121\nf 4121 4130 4131\nf 4121 4131 4132\nf 4121 4132 4122\nf 4122 4132 4133\nf 4122 4133 4123\nf 4123 4133 6885\nf 4123 6885 6879\nf 4124 4125 4135\nf 4124 4135 4134\nf 4125 6875 6881\nf 4125 6881 4135\nf 4126 4137 4127\nf 4127 4137 4138\nf 4127 4138 6889\nf 4127 6889 6883\nf 4128 4129 4140\nf 4128 4140 4139\nf 4129 6878 6884\nf 4129 6884 4140\nf 4130 4141 4131\nf 4131 4141 4142\nf 4131 4142 4143\nf 4131 4143 4132\nf 4132 4143 4144\nf 4132 4144 4133\nf 4133 4144 6891\nf 4133 6891 6885\nf 4134 4135 4147\nf 4134 4147 4136\nf 4135 4145 4147\nf 4135 6881 6887\nf 4135 6887 4145\nf 4136 4147 4146\nf 4137 4148 4138\nf 4138 4148 4149\nf 4138 4149 6894\nf 4138 6894 6889\nf 4139 4140 4151\nf 4139 4151 4150\nf 4140 6884 6890\nf 4140 6890 4151\nf 4141 4152 4142\nf 4142 4152 4153\nf 4142 4153 4154\nf 4142 4154 4143\nf 4143 4154 4155\nf 4143 4155 4144\nf 4144 4155 6896\nf 4144 6896 6891\nf 4145 4156 4158\nf 4145 4158 4147\nf 4145 6887 6893\nf 4145 6893 4156\nf 4146 4147 4158\nf 4146 4158 4157\nf 4148 4159 4149\nf 4149 4159 4161\nf 4149 4161 6899\nf 4149 6899 6894\nf 4150 4151 4163\nf 4150 4163 4162\nf 4151 6890 6895\nf 4151 6895 4163\nf 4152 4164 4153\nf 4153 4164 4165\nf 4153 4165 4166\nf 4153 4166 4154\nf 4154 4166 4167\nf 4154 4167 4155\nf 4155 4167 6901\nf 4155 6901 6896\nf 4156 4168 4170\nf 4156 4170 4158\nf 4156 6893 6898\nf 4156 6898 4168\nf 4157 4158 4170\nf 4157 4170 4169\nf 4159 4160 4161\nf 4160 4171 4161\nf 4161 4171 6899\nf 4162 4163 4173\nf 4162 4173 4172\nf 4163 6895 6900\nf 4163 6900 4173\nf 4164 4174 4165\nf 4165 4174 4175\nf 4165 4175 4176\nf 4165 4176 4166\nf 4166 4176 4177\nf 4166 4177 4167\nf 4167 4177 6907\nf 4167 6907 6901\nf 4168 4178 4180\nf 4168 4180 4170\nf 4168 6898 6903\nf 4168 6903 4178\nf 4169 4170 4180\nf 4169 4180 4179\nf 4171 4181 6910\nf 4171 6904 6899\nf 4171 6910 6904\nf 4172 4173 6906\nf 4172 6906 6911\nf 4172 6911 4182\nf 4173 6900 6905\nf 4173 6905 6906\nf 4174 4184 4175\nf 4175 4184 4185\nf 4175 4185 4186\nf 4175 4186 4176\nf 4176 4186 4187\nf 4176 4187 4177\nf 4177 4187 6913\nf 4177 6913 6907\nf 4178 4188 4190\nf 4178 4190 4180\nf 4178 6903 6909\nf 4178 6909 4188\nf 4179 4180 4190\nf 4179 4190 4189\nf 4181 4191 6917\nf 4181 6917 6910\nf 4182 4193 4183\nf 4182 6911 6918\nf 4182 6918 4193\nf 4183 4193 4192\nf 4184 4196 4185\nf 4185 4196 4197\nf 4185 4197 4198\nf 4185 4198 4186\nf 4186 4198 4199\nf 4186 4199 4187\nf 4187 4199 6919\nf 4187 6919 6913\nf 4188 4201 4190\nf 4188 6909 6915\nf 4188 6915 6916\nf 4188 6916 4201\nf 4189 4190 4201\nf 4189 4201 4200\nf 4191 4202 6923\nf 4191 6923 6917\nf 4192 4193 4205\nf 4192 4205 4204\nf 4193 6918 4205\nf 4194 4206 4207\nf 4194 4207 4209\nf 4194 4209 4195\nf 4195 4209 4208\nf 4196 4211 4197\nf 4197 4211 4212\nf 4197 4212 4213\nf 4197 4213 4198\nf 4198 4213 4214\nf 4198 4214 4199\nf 4199 4214 6925\nf 4199 6925 6919\nf 4200 4201 4216\nf 4200 4216 4215\nf 4201 6916 6921\nf 4201 6921 4216\nf 4202 4203 6929\nf 4202 6929 6923\nf 4203 4218 4219\nf 4203 4219 6929\nf 4204 4205 4221\nf 4204 4221 4220\nf 4205 6918 6924\nf 4205 6924 4221\nf 4206 4222 4207\nf 4207 4222 4223\nf 4207 4223 4224\nf 4207 4224 4209\nf 4208 4209 4226\nf 4208 4226 4210\nf 4209 4224 4226\nf 4210 4226 4225\nf 4211 4227 4212\nf 4212 4227 4228\nf 4212 4228 4229\nf 4212 4229 4213\nf 4213 4229 4230\nf 4213 4230 4214\nf 4214 4230 6931\nf 4214 6931 6925\nf 4215 4216 4233\nf 4215 4233 4217\nf 4216 4231 4233\nf 4216 6921 6927\nf 4216 6927 4231\nf 4217 4233 4232\nf 4218 4234 4219\nf 4219 4234 4235\nf 4219 4235 6935\nf 4219 6935 6929\nf 4220 4221 4237\nf 4220 4237 4236\nf 4221 6924 6930\nf 4221 6930 4237\nf 4222 4238 4223\nf 4223 4238 4239\nf 4223 4239 4240\nf 4223 4240 4224\nf 4224 4240 4242\nf 4224 4242 4226\nf 4225 4226 4242\nf 4225 4242 4241\nf 4227 4243 4228\nf 4228 4243 4244\nf 4228 4244 4245\nf 4228 4245 4229\nf 4229 4245 4246\nf 4229 4246 4230\nf 4230 4246 6937\nf 4230 6937 6931\nf 4231 4247 4249\nf 4231 4249 4233\nf 4231 6927 6933\nf 4231 6933 4247\nf 4232 4233 4249\nf 4232 4249 4248\nf 4234 4250 4235\nf 4235 4250 4251\nf 4235 4251 6941\nf 4235 6941 6935\nf 4236 4237 4253\nf 4236 4253 4252\nf 4237 6930 6936\nf 4237 6936 4253\nf 4238 4254 4239\nf 4239 4254 4255\nf 4239 4255 4256\nf 4239 4256 4240\nf 4240 4256 4258\nf 4240 4258 4242\nf 4241 4242 4258\nf 4241 4258 4257\nf 4243 4259 4244\nf 4244 4259 4261\nf 4244 4261 4262\nf 4244 4262 4245\nf 4245 4262 4263\nf 4245 4263 4246\nf 4246 4263 6943\nf 4246 6943 6937\nf 4247 4264 4266\nf 4247 4266 4249\nf 4247 6933 6939\nf 4247 6939 4264\nf 4248 4249 4266\nf 4248 4266 4265\nf 4250 4268 4251\nf 4251 4268 4269\nf 4251 4269 6947\nf 4251 6947 6941\nf 4252 4253 4271\nf 4252 4271 4270\nf 4253 6936 6942\nf 4253 6942 4271\nf 4254 4272 4255\nf 4255 4272 4273\nf 4255 4273 4274\nf 4255 4274 4256\nf 4256 4274 4275\nf 4256 4275 4258\nf 4257 4258 4276\nf 4257 4276 4260\nf 4258 4275 4276\nf 4259 4260 4261\nf 4260 4276 4261\nf 4261 4276 4277\nf 4261 4277 4278\nf 4261 4278 4262\nf 4262 4278 4279\nf 4262 4279 4263\nf 4263 4279 6949\nf 4263 6949 6943\nf 4264 4280 4281\nf 4264 4281 4266\nf 4264 6939 6945\nf 4264 6945 4280\nf 4265 4266 4283\nf 4265 4283 4267\nf 4266 4281 4283\nf 4267 4283 4282\nf 4268 4284 4269\nf 4269 4284 4285\nf 4269 4285 6953\nf 4269 6953 6947\nf 4270 4271 4287\nf 4270 4287 4286\nf 4271 6942 6948\nf 4271 6948 4287\nf 4272 4288 4273\nf 4273 4288 4289\nf 4273 4289 4290\nf 4273 4290 4274\nf 4274 4290 4291\nf 4274 4291 4275\nf 4275 4291 4292\nf 4275 4292 4276\nf 4276 4292 4293\nf 4276 4293 4277\nf 4277 4293 4294\nf 4277 4294 4278\nf 4278 4294 4295\nf 4278 4295 4279\nf 4279 4295 6955\nf 4279 6955 6949\nf 4280 4296 4297\nf 4280 4297 4281\nf 4280 6945 6951\nf 4280 6951 4296\nf 4281 4297 4299\nf 4281 4299 4283\nf 4282 4283 4299\nf 4282 4299 4298\nf 4284 4300 4285\nf 4285 4300 4301\nf 4285 4301 6959\nf 4285 6959 6953\nf 4286 4287 4303\nf 4286 4303 4302\nf 4287 6948 6954\nf 4287 6954 4303\nf 4288 4304 4289\nf 4289 4304 4305\nf 4289 4305 4306\nf 4289 4306 4290\nf 4290 4306 4307\nf 4290 4307 4291\nf 4291 4307 4308\nf 4291 4308 4292\nf 4292 4308 4309\nf 4292 4309 4293\nf 4293 4309 4310\nf 4293 4310 4294\nf 4294 4310 4311\nf 4294 4311 4295\nf 4295 4311 6961\nf 4295 6961 6955\nf 4296 4312 4313\nf 4296 4313 4297\nf 4296 6951 6957\nf 4296 6957 4312\nf 4297 4313 4316\nf 4297 4316 4299\nf 4298 4299 4316\nf 4298 4316 4314\nf 4300 4317 4301\nf 4301 4317 4318\nf 4301 4318 6965\nf 4301 6965 6959\nf 4302 4303 4320\nf 4302 4320 4319\nf 4303 6954 6960\nf 4303 6960 4320\nf 4304 4321 4305\nf 4305 4321 4322\nf 4305 4322 4323\nf 4305 4323 4306\nf 4306 4323 4324\nf 4306 4324 4307\nf 4307 4324 4325\nf 4307 4325 4308\nf 4308 4325 4326\nf 4308 4326 4309\nf 4309 4326 4327\nf 4309 4327 4310\nf 4310 4327 4328\nf 4310 4328 4311\nf 4311 4328 6967\nf 4311 6967 6961\nf 4312 4329 4331\nf 4312 4331 4313\nf 4312 6957 6963\nf 4312 6963 4329\nf 4313 4331 4316\nf 4314 4316 4315\nf 4315 4316 4331\nf 4315 4331 4330\nf 4317 4332 4318\nf 4318 4332 4333\nf 4318 4333 6971\nf 4318 6971 6965\nf 4319 4320 4335\nf 4319 4335 4334\nf 4320 6960 6966\nf 4320 6966 4335\nf 4321 4336 4322\nf 4322 4336 4338\nf 4322 4338 4339\nf 4322 4339 4323\nf 4323 4339 4340\nf 4323 4340 4324\nf 4324 4340 4342\nf 4324 4342 4325\nf 4325 4342 4344\nf 4325 4344 4326\nf 4326 4344 4345\nf 4326 4345 4327\nf 4327 4345 4346\nf 4327 4346 4328\nf 4328 4346 6973\nf 4328 6973 6967\nf 4329 4347 4349\nf 4329 4349 4331\nf 4329 6963 6969\nf 4329 6969 4347\nf 4330 4331 4349\nf 4330 4349 4348\nf 4332 4350 4333\nf 4333 4350 4351\nf 4333 4351 6976\nf 4333 6976 6971\nf 4334 4335 4353\nf 4334 4353 4352\nf 4335 6966 6972\nf 4335 6972 4353\nf 4336 4337 4338\nf 4337 4354 4338\nf 4338 4354 4356\nf 4338 4356 4339\nf 4339 4356 4359\nf 4339 4359 4340\nf 4340 4359 4342\nf 4341 4342 4359\nf 4341 4343 4342\nf 4341 4359 4357\nf 4342 4343 4344\nf 4343 4360 4344\nf 4344 4360 4361\nf 4344 4361 4345\nf 4345 4361 4362\nf 4345 4362 4346\nf 4346 4362 6978\nf 4346 6978 6973\nf 4347 4363 4365\nf 4347 4365 4349\nf 4347 6969 6974\nf 4347 6974 4363\nf 4348 4349 4365\nf 4348 4365 4364\nf 4350 4367 4351\nf 4351 4367 4368\nf 4351 4368 6981\nf 4351 6981 6976\nf 4352 4353 4370\nf 4352 4370 4369\nf 4353 6972 6977\nf 4353 6977 4370\nf 4354 4355 4356\nf 4355 4358 4356\nf 4356 4358 4359\nf 4357 4359 4358\nf 4360 4371 4361\nf 4361 4371 4372\nf 4361 4372 4373\nf 4361 4373 4362\nf 4362 4373 6983\nf 4362 6983 6978\nf 4363 4374 4375\nf 4363 4375 4365\nf 4363 6974 6979\nf 4363 6979 4374\nf 4364 4365 4377\nf 4364 4377 4366\nf 4365 4375 4377\nf 4366 4377 4376\nf 4367 4378 4368\nf 4368 4378 4379\nf 4368 4379 6986\nf 4368 6986 6981\nf 4369 4370 4381\nf 4369 4381 4380\nf 4370 6977 6982\nf 4370 6982 4381\nf 4371 4382 4372\nf 4372 4382 4384\nf 4372 4384 4385\nf 4372 4385 4373\nf 4373 4385 6990\nf 4373 6990 6983\nf 4374 4386 4387\nf 4374 4387 4375\nf 4374 6979 6984\nf 4374 6984 4386\nf 4375 4387 4389\nf 4375 4389 4377\nf 4376 4377 4389\nf 4376 4389 4388\nf 4378 4390 4379\nf 4379 4390 4391\nf 4379 4391 6993\nf 4379 6993 6986\nf 4380 4381 6988\nf 4380 6988 6994\nf 4380 6994 4392\nf 4381 6982 6987\nf 4381 6987 6988\nf 4382 4383 4384\nf 4383 4393 4384\nf 4384 4393 4394\nf 4384 4394 4385\nf 4385 4394 6995\nf 4385 6995 6990\nf 4386 4395 4396\nf 4386 4396 4387\nf 4386 6984 6991\nf 4386 6991 4395\nf 4387 4396 4399\nf 4387 4399 4389\nf 4388 4389 4399\nf 4388 4399 4397\nf 4390 4400 4391\nf 4391 4400 4401\nf 4391 4401 6998\nf 4391 6998 6993\nf 4392 6994 4402\nf 4393 4403 4394\nf 4394 4403 4404\nf 4394 4404 7000\nf 4394 7000 6995\nf 4395 4405 4407\nf 4395 4407 4396\nf 4395 6991 6996\nf 4395 6996 4405\nf 4396 4407 4399\nf 4397 4399 4398\nf 4398 4399 4407\nf 4398 4407 4406\nf 4400 4408 4401\nf 4401 4408 4409\nf 4401 4409 7003\nf 4401 7003 6998\nf 4402 6994 6999\nf 4402 6999 4410\nf 4403 4412 4404\nf 4404 4412 4413\nf 4404 4413 7005\nf 4404 7005 7000\nf 4405 4414 4416\nf 4405 4416 4407\nf 4405 6996 7001\nf 4405 7001 4414\nf 4406 4407 4416\nf 4406 4416 4415\nf 4408 4417 4409\nf 4409 4417 4418\nf 4409 4418 7008\nf 4409 7008 7003\nf 4410 4420 4411\nf 4410 6999 7004\nf 4410 7004 7009\nf 4410 7009 4420\nf 4411 4420 4419\nf 4412 4421 4413\nf 4413 4421 4422\nf 4413 4422 7010\nf 4413 7010 7005\nf 4414 4423 4425\nf 4414 4425 4416\nf 4414 7001 7006\nf 4414 7006 4423\nf 4415 4416 4425\nf 4415 4425 4424\nf 4417 4426 4418\nf 4418 4426 4427\nf 4418 4427 7013\nf 4418 7013 7008\nf 4419 4420 4429\nf 4419 4429 4428\nf 4420 7009 4429\nf 4421 4430 4422\nf 4422 4430 4431\nf 4422 4431 7015\nf 4422 7015 7010\nf 4423 4432 4434\nf 4423 4434 4425\nf 4423 7006 7011\nf 4423 7011 4432\nf 4424 4425 4434\nf 4424 4434 4433\nf 4426 4435 4427\nf 4427 4435 4436\nf 4427 4436 7018\nf 4427 7018 7013\nf 4428 4429 4438\nf 4428 4438 4437\nf 4429 7009 7014\nf 4429 7014 4438\nf 4430 4439 4431\nf 4431 4439 4440\nf 4431 4440 7020\nf 4431 7020 7015\nf 4432 4441 4444\nf 4432 4444 4434\nf 4432 7011 7016\nf 4432 7016 4441\nf 4433 4434 4444\nf 4433 4444 4442\nf 4435 4445 4436\nf 4436 4445 4446\nf 4436 4446 7024\nf 4436 7024 7018\nf 4437 4438 4448\nf 4437 4448 4447\nf 4438 7014 7019\nf 4438 7019 4448\nf 4439 4449 4440\nf 4440 4449 4450\nf 4440 4450 7026\nf 4440 7026 7020\nf 4441 4451 4453\nf 4441 4453 4444\nf 4441 7016 7021\nf 4441 7021 4451\nf 4442 4444 4443\nf 4443 4444 4453\nf 4443 4453 4452\nf 4445 4454 4446\nf 4446 4454 4455\nf 4446 4455 7028\nf 4446 7028 7024\nf 4447 4448 4457\nf 4447 4457 4456\nf 4448 7019 7025\nf 4448 7025 4457\nf 4449 4460 4450\nf 4450 4460 4461\nf 4450 4461 7030\nf 4450 7030 7026\nf 4451 4462 4465\nf 4451 4465 4453\nf 4451 7021 7022\nf 4451 7022 7027\nf 4451 7027 4462\nf 4452 4453 4465\nf 4452 4465 4463\nf 4454 4466 4455\nf 4455 4466 4467\nf 4455 4467 7032\nf 4455 7032 7028\nf 4456 4457 4469\nf 4456 4469 4468\nf 4457 7025 7029\nf 4457 7029 4469\nf 4458 4470 4471\nf 4458 4471 4473\nf 4458 4473 4459\nf 4459 4473 4472\nf 4460 4474 4461\nf 4461 4474 4475\nf 4461 4475 7034\nf 4461 7034 7030\nf 4462 4477 4465\nf 4462 7027 7031\nf 4462 7031 4477\nf 4463 4465 4464\nf 4464 4465 4477\nf 4464 4477 4476\nf 4466 4478 4467\nf 4467 4478 4479\nf 4467 4479 7036\nf 4467 7036 7032\nf 4468 4469 4481\nf 4468 4481 4480\nf 4469 7029 7033\nf 4469 7033 4481\nf 4470 4482 4471\nf 4471 4482 4484\nf 4471 4484 4486\nf 4471 4486 4473\nf 4472 4473 4486\nf 4472 4486 4485\nf 4474 4487 4475\nf 4475 4487 4489\nf 4475 4489 7038\nf 4475 7038 7034\nf 4476 4477 4491\nf 4476 4491 4490\nf 4477 7031 7035\nf 4477 7035 4491\nf 4478 4492 4479\nf 4479 4492 4494\nf 4479 4494 7040\nf 4479 7040 7036\nf 4480 4481 4496\nf 4480 4496 4495\nf 4481 7033 7037\nf 4481 7037 4496\nf 4482 4483 4484\nf 4483 4497 4484\nf 4484 4497 4500\nf 4484 4500 4486\nf 4485 4486 4500\nf 4485 4500 4498\nf 4487 4488 4489\nf 4488 4501 4502\nf 4488 4502 4489\nf 4489 4502 4503\nf 4489 4503 7042\nf 4489 7042 7038\nf 4490 4491 4505\nf 4490 4505 4504\nf 4491 7035 7039\nf 4491 7039 4505\nf 4492 4493 4494\nf 4493 4507 4494\nf 4494 4507 7040\nf 4495 4496 4509\nf 4495 4509 4508\nf 4496 7037 7041\nf 4496 7041 4509\nf 4497 4499 4500\nf 4498 4500 4499\nf 4501 4510 4502\nf 4502 4510 4511\nf 4502 4511 4512\nf 4502 4512 4503\nf 4503 4512 7047\nf 4503 7047 7042\nf 4504 4505 4506\nf 4505 7039 7043\nf 4505 7043 7044\nf 4505 7044 4506\nf 4506 4514 4513\nf 4506 7044 4514\nf 4507 4515 7050\nf 4507 7045 7040\nf 4507 7050 7045\nf 4508 4509 4517\nf 4508 4517 4516\nf 4509 7041 7046\nf 4509 7046 4517\nf 4510 4518 4511\nf 4511 4518 4519\nf 4511 4519 4520\nf 4511 4520 4512\nf 4512 4520 7052\nf 4512 7052 7047\nf 4513 4514 4522\nf 4513 4522 4521\nf 4514 7044 7048\nf 4514 7048 4522\nf 4515 4523 7054\nf 4515 7054 7050\nf 4516 4517 4525\nf 4516 4525 4524\nf 4517 7046 7051\nf 4517 7051 4525\nf 4518 4526 4519\nf 4519 4526 4527\nf 4519 4527 4528\nf 4519 4528 4520\nf 4520 4528 7056\nf 4520 7056 7052\nf 4521 4522 4530\nf 4521 4530 4529\nf 4522 7048 7053\nf 4522 7053 4530\nf 4523 4531 7058\nf 4523 7058 7054\nf 4524 4525 4533\nf 4524 4533 4532\nf 4525 7051 7055\nf 4525 7055 4533\nf 4526 4534 4527\nf 4527 4534 4535\nf 4527 4535 4536\nf 4527 4536 4528\nf 4528 4536 7060\nf 4528 7060 7056\nf 4529 4530 4538\nf 4529 4538 4537\nf 4530 7053 7057\nf 4530 7057 4538\nf 4531 4539 7062\nf 4531 7062 7058\nf 4532 4533 4541\nf 4532 4541 4540\nf 4533 7055 7059\nf 4533 7059 4541\nf 4534 4542 4535\nf 4535 4542 4543\nf 4535 4543 4544\nf 4535 4544 4536\nf 4536 4544 7064\nf 4536 7064 7060\nf 4537 4538 4546\nf 4537 4546 4545\nf 4538 7057 7061\nf 4538 7061 4546\nf 4539 4547 7066\nf 4539 7066 7062\nf 4540 4541 4549\nf 4540 4549 4548\nf 4541 7059 7063\nf 4541 7063 4549\nf 4542 4550 4543\nf 4543 4550 4551\nf 4543 4551 4552\nf 4543 4552 4544\nf 4544 4552 7068\nf 4544 7068 7064\nf 4545 4546 4554\nf 4545 4554 4553\nf 4546 7061 7065\nf 4546 7065 4554\nf 4547 4556 7070\nf 4547 7070 7066\nf 4548 4549 4558\nf 4548 4558 4557\nf 4549 7063 7067\nf 4549 7067 4558\nf 4550 4559 4551\nf 4551 4559 4560\nf 4551 4560 4561\nf 4551 4561 4552\nf 4552 4561 7072\nf 4552 7072 7068\nf 4553 4554 4564\nf 4553 4564 4555\nf 4554 4562 4564\nf 4554 7065 7069\nf 4554 7069 4562\nf 4555 4564 4563\nf 4556 4565 7074\nf 4556 7074 7070\nf 4557 4558 4567\nf 4557 4567 4566\nf 4558 7067 7071\nf 4558 7071 4567\nf 4559 4568 4560\nf 4560 4568 4569\nf 4560 4569 4570\nf 4560 4570 4561\nf 4561 4570 7077\nf 4561 7077 7072\nf 4562 4571 4573\nf 4562 4573 4564\nf 4562 7069 7073\nf 4562 7073 4571\nf 4563 4564 4573\nf 4563 4573 4572\nf 4565 4574 7080\nf 4565 7080 7074\nf 4566 4567 7076\nf 4566 7076 7081\nf 4566 7081 4575\nf 4567 7071 7075\nf 4567 7075 7076\nf 4568 4576 4569\nf 4569 4576 4577\nf 4569 4577 4578\nf 4569 4578 4570\nf 4570 4578 7083\nf 4570 7083 7077\nf 4571 4579 4581\nf 4571 4581 4573\nf 4571 7073 7079\nf 4571 7079 4579\nf 4572 4573 4581\nf 4572 4581 4580\nf 4574 4583 7086\nf 4574 7086 7080\nf 4575 7081 4584\nf 4576 4585 4577\nf 4577 4585 4586\nf 4577 4586 4587\nf 4577 4587 4578\nf 4578 4587 7089\nf 4578 7089 7083\nf 4579 4588 4589\nf 4579 4589 4581\nf 4579 7079 7085\nf 4579 7085 4588\nf 4580 4581 4591\nf 4580 4591 4582\nf 4581 4589 4591\nf 4582 4591 4590\nf 4583 4592 7093\nf 4583 7093 7086\nf 4584 7081 7087\nf 4584 7087 4594\nf 4585 4595 4586\nf 4586 4595 4596\nf 4586 4596 4597\nf 4586 4597 4587\nf 4587 4597 7096\nf 4587 7096 7089\nf 4588 4598 4599\nf 4588 4599 4589\nf 4588 7085 7091\nf 4588 7091 4598\nf 4589 4599 4601\nf 4589 4601 4591\nf 4590 4591 4601\nf 4590 4601 4600\nf 4592 4593 7100\nf 4592 7100 7093\nf 4593 4602 4603\nf 4593 4603 7100\nf 4594 7087 7094\nf 4594 7094 4604\nf 4595 4606 4596\nf 4596 4606 4608\nf 4596 4608 4609\nf 4596 4609 4597\nf 4597 4609 7102\nf 4597 7102 7096\nf 4598 4610 4611\nf 4598 4611 4599\nf 4598 7091 7098\nf 4598 7098 4610\nf 4599 4611 4613\nf 4599 4613 4601\nf 4600 4601 4613\nf 4600 4613 4612\nf 4602 4614 4603\nf 4603 4614 4615\nf 4603 4615 7106\nf 4603 7106 7100\nf 4604 4617 4605\nf 4604 7094 7101\nf 4604 7101 7107\nf 4604 7107 4617\nf 4605 4617 4616\nf 4606 4607 4608\nf 4607 4619 4621\nf 4607 4621 4608\nf 4608 4621 4622\nf 4608 4622 4623\nf 4608 4623 4609\nf 4609 4623 7108\nf 4609 7108 7102\nf 4610 4624 4625\nf 4610 4625 4611\nf 4610 7098 7104\nf 4610 7104 4624\nf 4611 4625 4627\nf 4611 4627 4613\nf 4612 4613 4627\nf 4612 4627 4626\nf 4614 4629 4615\nf 4615 4629 4630\nf 4615 4630 7112\nf 4615 7112 7106\nf 4616 4617 4632\nf 4616 4632 4631\nf 4617 7107 4632\nf 4618 4633 4634\nf 4618 4634 4635\nf 4618 4635 4620\nf 4619 4620 4621\nf 4620 4635 4621\nf 4621 4635 4636\nf 4621 4636 4637\nf 4621 4637 4622\nf 4622 4637 4638\nf 4622 4638 4623\nf 4623 4638 7114\nf 4623 7114 7108\nf 4624 4639 4640\nf 4624 4640 4625\nf 4624 7104 7110\nf 4624 7110 4639\nf 4625 4640 4641\nf 4625 4641 4627\nf 4626 4627 4644\nf 4626 4644 4628\nf 4627 4641 4644\nf 4628 4644 4642\nf 4629 4645 4630\nf 4630 4645 4646\nf 4630 4646 7119\nf 4630 7119 7112\nf 4631 4632 4649\nf 4631 4649 4647\nf 4632 7107 7113\nf 4632 7113 4649\nf 4633 4650 4634\nf 4634 4650 4652\nf 4634 4652 4654\nf 4634 4654 4635\nf 4635 4654 4655\nf 4635 4655 4636\nf 4636 4655 4656\nf 4636 4656 4637\nf 4637 4656 4657\nf 4637 4657 4638\nf 4638 4657 7122\nf 4638 7122 7114\nf 4639 4658 4659\nf 4639 4659 4660\nf 4639 4660 4640\nf 4639 7110 7116\nf 4639 7116 4658\nf 4640 4660 4663\nf 4640 4663 4641\nf 4641 4663 4644\nf 4642 4644 4643\nf 4643 4644 4663\nf 4643 4663 4661\nf 4645 4664 4646\nf 4646 4664 4666\nf 4646 4666 7126\nf 4646 7126 7119\nf 4647 4649 4648\nf 4648 4649 7120\nf 4648 7120 4667\nf 4649 7113 7120\nf 4650 4651 4652\nf 4651 4653 4652\nf 4652 4653 4654\nf 4653 4668 4654\nf 4654 4668 4669\nf 4654 4669 4655\nf 4655 4669 4670\nf 4655 4670 4656\nf 4656 4670 4671\nf 4656 4671 4657\nf 4657 4671 7130\nf 4657 7130 7122\nf 4658 4672 4673\nf 4658 4673 4659\nf 4658 7116 7117\nf 4658 7117 7124\nf 4658 7124 4672\nf 4659 4673 4675\nf 4659 4675 4660\nf 4660 4675 4663\nf 4661 4663 4662\nf 4662 4663 4675\nf 4662 4675 4674\nf 4664 4665 4666\nf 4665 4676 4666\nf 4666 4676 7126\nf 4667 7120 7127\nf 4667 7127 4677\nf 4668 4679 4669\nf 4669 4679 4681\nf 4669 4681 4682\nf 4669 4682 4670\nf 4670 4682 4683\nf 4670 4683 4671\nf 4671 4683 4684\nf 4671 4684 7131\nf 4671 7131 7130\nf 4672 4685 4686\nf 4672 4686 4673\nf 4672 7124 7134\nf 4672 7134 4685\nf 4673 4686 4688\nf 4673 4688 4675\nf 4674 4675 4688\nf 4674 4688 4687\nf 4676 4689 7142\nf 4676 7136 7126\nf 4676 7142 7136\nf 4677 4678 4691\nf 4677 4691 4690\nf 4677 7127 4678\nf 4678 7127 7128\nf 4678 7128 7137\nf 4678 7137 4691\nf 4679 4680 4681\nf 4680 4692 4681\nf 4681 4692 4693\nf 4681 4693 4682\nf 4682 4693 4694\nf 4682 4694 4683\nf 4683 4694 4695\nf 4683 4695 4684\nf 4684 4695 7144\nf 4684 7138 7131\nf 4684 7144 7138\nf 4685 4696 4697\nf 4685 4697 4686\nf 4685 7134 7140\nf 4685 7140 4696\nf 4686 4697 4700\nf 4686 4700 4688\nf 4687 4688 4700\nf 4687 4700 4698\nf 4689 4701 7153\nf 4689 7153 7142\nf 4690 4691 4703\nf 4690 4703 4702\nf 4691 7137 7143\nf 4691 7143 4703\nf 4692 4704 4693\nf 4693 4704 4705\nf 4693 4705 4706\nf 4693 4706 4694\nf 4694 4706 4707\nf 4694 4707 4695\nf 4695 4707 4708\nf 4695 4708 7145\nf 4695 7145 7144\nf 4696 4709 4710\nf 4696 4710 4712\nf 4696 4712 4697\nf 4696 7140 7150\nf 4696 7150 4709\nf 4697 4712 4700\nf 4698 4700 4699\nf 4699 4700 4712\nf 4699 4712 4711\nf 4701 4713 7232\nf 4701 7232 7153\nf 4702 4703 4715\nf 4702 4715 4714\nf 4703 7143 7154\nf 4703 7154 4715\nf 4704 4716 4705\nf 4705 4716 4718\nf 4705 4718 4719\nf 4705 4719 4706\nf 4706 4719 4720\nf 4706 4720 4707\nf 4707 4720 4721\nf 4707 4721 4708\nf 4708 4721 4722\nf 4708 4722 7156\nf 4708 7155 7145\nf 4708 7156 7155\nf 4709 4749 4750\nf 4709 4750 4751\nf 4709 4751 4710\nf 4709 7150 7151\nf 4709 7151 7229\nf 4709 7229 4749\nf 4710 4751 4754\nf 4710 4754 4712\nf 4711 4712 4754\nf 4711 4754 4752\nf 4713 4755 7303\nf 4713 7303 7232\nf 4714 4715 4757\nf 4714 4757 4756\nf 4715 7154 7234\nf 4715 7234 4757\nf 4716 4717 4718\nf 4717 4758 4718\nf 4718 4758 4759\nf 4718 4759 4719\nf 4719 4759 4760\nf 4719 4760 4720\nf 4720 4760 4761\nf 4720 4761 4721\nf 4721 4761 4762\nf 4721 4762 4722\nf 4722 4762 4763\nf 4722 4763 7237\nf 4722 7235 7156\nf 4722 7237 7235\nf 4723 4724 7161\nf 4723 4763 4764\nf 4723 4764 4765\nf 4723 4765 4724\nf 4723 7159 7236\nf 4723 7161 7159\nf 4723 7236 4763\nf 4724 4765 4766\nf 4724 4766 7240\nf 4724 7239 7161\nf 4724 7240 7239\nf 4725 4726 7176\nf 4725 4772 4773\nf 4725 4773 4774\nf 4725 4774 4726\nf 4725 7174 7284\nf 4725 7176 7174\nf 4725 7284 4772\nf 4726 4727 7178\nf 4726 4774 4775\nf 4726 4775 4727\nf 4726 7178 7176\nf 4727 4728 7180\nf 4727 4775 4776\nf 4727 4776 4728\nf 4727 7180 7178\nf 4728 4729 7182\nf 4728 4776 4777\nf 4728 4777 4729\nf 4728 7182 7180\nf 4729 4730 7184\nf 4729 4777 4778\nf 4729 4778 4730\nf 4729 7184 7182\nf 4730 4731 7186\nf 4730 4778 4779\nf 4730 4779 4731\nf 4730 7186 7184\nf 4731 4732 7188\nf 4731 4779 4780\nf 4731 4780 4732\nf 4731 7188 7186\nf 4732 4733 7190\nf 4732 4780 4781\nf 4732 4781 4733\nf 4732 7190 7188\nf 4733 4734 7192\nf 4733 4781 4782\nf 4733 4782 4734\nf 4733 7192 7190\nf 4734 4735 7194\nf 4734 4782 4783\nf 4734 4783 4735\nf 4734 7194 7192\nf 4735 4736 7196\nf 4735 4783 4784\nf 4735 4784 4736\nf 4735 7196 7194\nf 4736 4737 7198\nf 4736 4784 4785\nf 4736 4785 4737\nf 4736 7198 7196\nf 4737 4738 7200\nf 4737 4785 4786\nf 4737 4786 4738\nf 4737 7200 7198\nf 4738 4739 7202\nf 4738 4786 4787\nf 4738 4787 4739\nf 4738 7202 7200\nf 4739 4740 7204\nf 4739 4787 4788\nf 4739 4788 4740\nf 4739 7204 7202\nf 4740 4741 7206\nf 4740 4788 4789\nf 4740 4789 4741\nf 4740 7206 7204\nf 4741 4742 7208\nf 4741 4789 4790\nf 4741 4790 4742\nf 4741 7208 7206\nf 4742 4743 7210\nf 4742 4790 4791\nf 4742 4791 4743\nf 4742 7210 7208\nf 4743 4744 7212\nf 4743 4791 4792\nf 4743 4792 4744\nf 4743 7212 7210\nf 4744 4745 7214\nf 4744 4792 4793\nf 4744 4793 4745\nf 4744 7214 7212\nf 4745 4746 7216\nf 4745 4793 4794\nf 4745 4794 4746\nf 4745 7216 7214\nf 4746 4747 7218\nf 4746 4794 4795\nf 4746 4795 4747\nf 4746 7218 7216\nf 4747 4795 4796\nf 4747 4796 7288\nf 4747 7287 7218\nf 4747 7288 7287\nf 4748 4749 7230\nf 4748 4802 4803\nf 4748 4803 4804\nf 4748 4804 4749\nf 4748 7227 7300\nf 4748 7230 7227\nf 4748 7300 4802\nf 4749 4804 4805\nf 4749 4805 4750\nf 4749 7229 7230\nf 4750 4805 4807\nf 4750 4807 4751\nf 4751 4807 4754\nf 4752 4754 4753\nf 4753 4754 4807\nf 4753 4807 4806\nf 4755 4808 7371\nf 4755 7371 7303\nf 4756 4757 4811\nf 4756 4811 4810\nf 4757 7234 7305\nf 4757 7305 4811\nf 4758 4813 4759\nf 4759 4813 4814\nf 4759 4814 4815\nf 4759 4815 4760\nf 4760 4815 4816\nf 4760 4816 4761\nf 4761 4816 4817\nf 4761 4817 4762\nf 4762 4817 4818\nf 4762 4818 4763\nf 4763 4818 4819\nf 4763 4819 4764\nf 4763 7236 7237\nf 4764 4819 4820\nf 4764 4820 4765\nf 4765 4820 4821\nf 4765 4821 4766\nf 4766 4767 7242\nf 4766 4821 4822\nf 4766 4822 4767\nf 4766 7242 7240\nf 4767 4768 7244\nf 4767 4822 4823\nf 4767 4823 4768\nf 4767 7244 7242\nf 4768 4823 4824\nf 4768 4824 7307\nf 4768 7306 7244\nf 4768 7307 7306\nf 4769 4770 7280\nf 4769 4854 4855\nf 4769 4855 4856\nf 4769 4856 4770\nf 4769 7278 7368\nf 4769 7280 7278\nf 4769 7368 4854\nf 4770 4771 7282\nf 4770 4856 4857\nf 4770 4857 4771\nf 4770 7282 7280\nf 4771 4772 7285\nf 4771 4857 4858\nf 4771 4858 4772\nf 4771 7285 7282\nf 4772 4858 4859\nf 4772 4859 4773\nf 4772 7284 7285\nf 4773 4859 4860\nf 4773 4860 4774\nf 4774 4860 4861\nf 4774 4861 4775\nf 4775 4861 4862\nf 4775 4862 4776\nf 4776 4862 4863\nf 4776 4863 4777\nf 4777 4863 4864\nf 4777 4864 4778\nf 4778 4864 4865\nf 4778 4865 4779\nf 4779 4865 4866\nf 4779 4866 4780\nf 4780 4866 4867\nf 4780 4867 4781\nf 4781 4867 4868\nf 4781 4868 4782\nf 4782 4868 4869\nf 4782 4869 4783\nf 4783 4869 4870\nf 4783 4870 4784\nf 4784 4870 4871\nf 4784 4871 4785\nf 4785 4871 4872\nf 4785 4872 4786\nf 4786 4872 4873\nf 4786 4873 4787\nf 4787 4873 4874\nf 4787 4874 4788\nf 4788 4874 4875\nf 4788 4875 4789\nf 4789 4875 4876\nf 4789 4876 4790\nf 4790 4876 4877\nf 4790 4877 4791\nf 4791 4877 4878\nf 4791 4878 4792\nf 4792 4878 4879\nf 4792 4879 4793\nf 4793 4879 4880\nf 4793 4880 4794\nf 4794 4880 4881\nf 4794 4881 4795\nf 4795 4881 4882\nf 4795 4882 4796\nf 4796 4797 7290\nf 4796 4882 4883\nf 4796 4883 4797\nf 4796 7290 7288\nf 4797 4798 7292\nf 4797 4883 4884\nf 4797 4884 4798\nf 4797 7292 7290\nf 4798 4799 7294\nf 4798 4884 4885\nf 4798 4885 4799\nf 4798 7294 7292\nf 4799 4800 7296\nf 4799 4885 4886\nf 4799 4886 4800\nf 4799 7296 7294\nf 4800 4801 7298\nf 4800 4886 4887\nf 4800 4887 4801\nf 4800 7298 7296\nf 4801 4802 7301\nf 4801 4887 4888\nf 4801 4888 4802\nf 4801 7301 7298\nf 4802 4888 4889\nf 4802 4889 4803\nf 4802 7300 7301\nf 4803 4889 4890\nf 4803 4890 4804\nf 4804 4890 4891\nf 4804 4891 4805\nf 4805 4891 4893\nf 4805 4893 4807\nf 4806 4807 4893\nf 4806 4893 4892\nf 4808 4809 7377\nf 4808 7377 7371\nf 4809 4894 4895\nf 4809 4895 7377\nf 4810 4811 4898\nf 4810 4898 4812\nf 4811 4896 4898\nf 4811 7305 7372\nf 4811 7372 4896\nf 4812 4898 4897\nf 4813 4899 4814\nf 4814 4899 4900\nf 4814 4900 4901\nf 4814 4901 4815\nf 4815 4901 4902\nf 4815 4902 4816\nf 4816 4902 4903\nf 4816 4903 4817\nf 4817 4903 4904\nf 4817 4904 4818\nf 4818 4904 4905\nf 4818 4905 4819\nf 4819 4905 4906\nf 4819 4906 4820\nf 4820 4906 4907\nf 4820 4907 4821\nf 4821 4907 4908\nf 4821 4908 4822\nf 4822 4908 4909\nf 4822 4909 4823\nf 4823 4909 4910\nf 4823 4910 4824\nf 4824 4825 7309\nf 4824 4910 4911\nf 4824 4911 4825\nf 4824 7309 7307\nf 4825 4826 7311\nf 4825 4911 4912\nf 4825 4912 4826\nf 4825 7311 7309\nf 4826 4827 7313\nf 4826 4912 4913\nf 4826 4913 4827\nf 4826 7313 7311\nf 4827 4828 7315\nf 4827 4913 4914\nf 4827 4914 4828\nf 4827 7315 7313\nf 4828 4829 7317\nf 4828 4914 4915\nf 4828 4915 4829\nf 4828 7317 7315\nf 4829 4830 7319\nf 4829 4915 4916\nf 4829 4916 4830\nf 4829 7319 7317\nf 4830 4831 7321\nf 4830 4916 4917\nf 4830 4917 4831\nf 4830 7321 7319\nf 4831 4832 7323\nf 4831 4917 4918\nf 4831 4918 4832\nf 4831 7323 7321\nf 4832 4833 7325\nf 4832 4918 4919\nf 4832 4919 4833\nf 4832 7325 7323\nf 4833 4834 7327\nf 4833 4919 4920\nf 4833 4920 4834\nf 4833 7327 7325\nf 4834 4835 7329\nf 4834 4920 4921\nf 4834 4921 4835\nf 4834 7329 7327\nf 4835 4836 7331\nf 4835 4921 4922\nf 4835 4922 4836\nf 4835 7331 7329\nf 4836 4837 7333\nf 4836 4922 4923\nf 4836 4923 4837\nf 4836 7333 7331\nf 4837 4838 7335\nf 4837 4923 4924\nf 4837 4924 4838\nf 4837 7335 7333\nf 4838 4839 7337\nf 4838 4924 4925\nf 4838 4925 4839\nf 4838 7337 7335\nf 4839 4840 7339\nf 4839 4925 4926\nf 4839 4926 4840\nf 4839 7339 7337\nf 4840 4841 7341\nf 4840 4926 4927\nf 4840 4927 4841\nf 4840 7341 7339\nf 4841 4842 7343\nf 4841 4927 4928\nf 4841 4928 4842\nf 4841 7343 7341\nf 4842 4928 4929\nf 4842 4929 7375\nf 4842 7373 7343\nf 4842 7375 7373\nf 4843 4844 7348\nf 4843 4929 4930\nf 4843 4930 4931\nf 4843 4931 4844\nf 4843 7346 7374\nf 4843 7348 7346\nf 4843 7374 4929\nf 4844 4845 7350\nf 4844 4931 4932\nf 4844 4932 4845\nf 4844 7350 7348\nf 4845 4846 7352\nf 4845 4932 4933\nf 4845 4933 4846\nf 4845 7352 7350\nf 4846 4847 7354\nf 4846 4933 4934\nf 4846 4934 4847\nf 4846 7354 7352\nf 4847 4848 7356\nf 4847 4934 4935\nf 4847 4935 4848\nf 4847 7356 7354\nf 4848 4849 7358\nf 4848 4935 4936\nf 4848 4936 4849\nf 4848 7358 7356\nf 4849 4850 7360\nf 4849 4936 4937\nf 4849 4937 4850\nf 4849 7360 7358\nf 4850 4851 7362\nf 4850 4937 4938\nf 4850 4938 4851\nf 4850 7362 7360\nf 4851 4852 7364\nf 4851 4938 4939\nf 4851 4939 4852\nf 4851 7364 7362\nf 4852 4853 7366\nf 4852 4939 4940\nf 4852 4940 4853\nf 4852 7366 7364\nf 4853 4854 7369\nf 4853 4940 4941\nf 4853 4941 4854\nf 4853 7369 7366\nf 4854 4941 4942\nf 4854 4942 4855\nf 4854 7368 7369\nf 4855 4942 4943\nf 4855 4943 4856\nf 4856 4943 4944\nf 4856 4944 4857\nf 4857 4944 4945\nf 4857 4945 4858\nf 4858 4945 4946\nf 4858 4946 4859\nf 4859 4946 4947\nf 4859 4947 4860\nf 4860 4947 4948\nf 4860 4948 4861\nf 4861 4948 4949\nf 4861 4949 4862\nf 4862 4949 4950\nf 4862 4950 4863\nf 4863 4950 4951\nf 4863 4951 4864\nf 4864 4951 4952\nf 4864 4952 4865\nf 4865 4952 4953\nf 4865 4953 4866\nf 4866 4953 4954\nf 4866 4954 4867\nf 4867 4954 4955\nf 4867 4955 4868\nf 4868 4955 4956\nf 4868 4956 4869\nf 4869 4956 4957\nf 4869 4957 4870\nf 4870 4957 4958\nf 4870 4958 4871\nf 4871 4958 4959\nf 4871 4959 4872\nf 4872 4959 4960\nf 4872 4960 4873\nf 4873 4960 4961\nf 4873 4961 4874\nf 4874 4961 4962\nf 4874 4962 4875\nf 4875 4962 4963\nf 4875 4963 4876\nf 4876 4963 4964\nf 4876 4964 4877\nf 4877 4964 4965\nf 4877 4965 4878\nf 4878 4965 4966\nf 4878 4966 4879\nf 4879 4966 4967\nf 4879 4967 4880\nf 4880 4967 4968\nf 4880 4968 4881\nf 4881 4968 4969\nf 4881 4969 4882\nf 4882 4969 4970\nf 4882 4970 4883\nf 4883 4970 4971\nf 4883 4971 4884\nf 4884 4971 4972\nf 4884 4972 4885\nf 4885 4972 4973\nf 4885 4973 4886\nf 4886 4973 4974\nf 4886 4974 4887\nf 4887 4974 4975\nf 4887 4975 4888\nf 4888 4975 4976\nf 4888 4976 4889\nf 4889 4976 4977\nf 4889 4977 4890\nf 4890 4977 4978\nf 4890 4978 4891\nf 4891 4978 4981\nf 4891 4981 4893\nf 4892 4893 4981\nf 4892 4981 4979\nf 4894 4982 4895\nf 4895 4982 4983\nf 4895 4983 7379\nf 4895 7379 7377\nf 4896 4984 4986\nf 4896 4986 4898\nf 4896 7372 7378\nf 4896 7378 4984\nf 4897 4898 4986\nf 4897 4986 4985\nf 4899 4987 4900\nf 4900 4987 4988\nf 4900 4988 4989\nf 4900 4989 4901\nf 4901 4989 4990\nf 4901 4990 4902\nf 4902 4990 4991\nf 4902 4991 4903\nf 4903 4991 4992\nf 4903 4992 4904\nf 4904 4992 4993\nf 4904 4993 4905\nf 4905 4993 4994\nf 4905 4994 4906\nf 4906 4994 4995\nf 4906 4995 4907\nf 4907 4995 4996\nf 4907 4996 4908\nf 4908 4996 4997\nf 4908 4997 4909\nf 4909 4997 4998\nf 4909 4998 4910\nf 4910 4998 4999\nf 4910 4999 4911\nf 4911 4999 5000\nf 4911 5000 4912\nf 4912 5000 5001\nf 4912 5001 4913\nf 4913 5001 5002\nf 4913 5002 4914\nf 4914 5002 5003\nf 4914 5003 4915\nf 4915 5003 5004\nf 4915 5004 4916\nf 4916 5004 5005\nf 4916 5005 4917\nf 4917 5005 5006\nf 4917 5006 4918\nf 4918 5006 5007\nf 4918 5007 4919\nf 4919 5007 5008\nf 4919 5008 4920\nf 4920 5008 5009\nf 4920 5009 4921\nf 4921 5009 5010\nf 4921 5010 4922\nf 4922 5010 5011\nf 4922 5011 4923\nf 4923 5011 5012\nf 4923 5012 4924\nf 4924 5012 5013\nf 4924 5013 4925\nf 4925 5013 5014\nf 4925 5014 4926\nf 4926 5014 5015\nf 4926 5015 4927\nf 4927 5015 5016\nf 4927 5016 4928\nf 4928 5016 5017\nf 4928 5017 4929\nf 4929 5017 5018\nf 4929 5018 4930\nf 4929 7374 7375\nf 4930 5018 5019\nf 4930 5019 4931\nf 4931 5019 5020\nf 4931 5020 4932\nf 4932 5020 5021\nf 4932 5021 4933\nf 4933 5021 5022\nf 4933 5022 4934\nf 4934 5022 5023\nf 4934 5023 4935\nf 4935 5023 5024\nf 4935 5024 4936\nf 4936 5024 5025\nf 4936 5025 4937\nf 4937 5025 5026\nf 4937 5026 4938\nf 4938 5026 5027\nf 4938 5027 4939\nf 4939 5027 5028\nf 4939 5028 4940\nf 4940 5028 5029\nf 4940 5029 4941\nf 4941 5029 5030\nf 4941 5030 4942\nf 4942 5030 5031\nf 4942 5031 4943\nf 4943 5031 5032\nf 4943 5032 4944\nf 4944 5032 5033\nf 4944 5033 4945\nf 4945 5033 5034\nf 4945 5034 4946\nf 4946 5034 5035\nf 4946 5035 4947\nf 4947 5035 5036\nf 4947 5036 4948\nf 4948 5036 5037\nf 4948 5037 4949\nf 4949 5037 5038\nf 4949 5038 4950\nf 4950 5038 5039\nf 4950 5039 4951\nf 4951 5039 5040\nf 4951 5040 4952\nf 4952 5040 5041\nf 4952 5041 4953\nf 4953 5041 5042\nf 4953 5042 4954\nf 4954 5042 5043\nf 4954 5043 4955\nf 4955 5043 5044\nf 4955 5044 4956\nf 4956 5044 5045\nf 4956 5045 4957\nf 4957 5045 5046\nf 4957 5046 4958\nf 4958 5046 5047\nf 4958 5047 4959\nf 4959 5047 5048\nf 4959 5048 4960\nf 4960 5048 5049\nf 4960 5049 4961\nf 4961 5049 5050\nf 4961 5050 4962\nf 4962 5050 5051\nf 4962 5051 4963\nf 4963 5051 5052\nf 4963 5052 4964\nf 4964 5052 5053\nf 4964 5053 4965\nf 4965 5053 5054\nf 4965 5054 4966\nf 4966 5054 5055\nf 4966 5055 4967\nf 4967 5055 5056\nf 4967 5056 4968\nf 4968 5056 5057\nf 4968 5057 4969\nf 4969 5057 5058\nf 4969 5058 4970\nf 4970 5058 5059\nf 4970 5059 4971\nf 4971 5059 5060\nf 4971 5060 4972\nf 4972 5060 5061\nf 4972 5061 4973\nf 4973 5061 5062\nf 4973 5062 4974\nf 4974 5062 5063\nf 4974 5063 4975\nf 4975 5063 5064\nf 4975 5064 4976\nf 4976 5064 5065\nf 4976 5065 4977\nf 4977 5065 5067\nf 4977 5067 4978\nf 4978 5067 4981\nf 4979 4981 4980\nf 4980 4981 5067\nf 4980 5067 5066\nf 4982 5069 4983\nf 4983 5069 5071\nf 4983 5071 7381\nf 4983 7381 7379\nf 4984 5072 5074\nf 4984 5074 4986\nf 4984 7378 7380\nf 4984 7380 5072\nf 4985 4986 5074\nf 4985 5074 5073\nf 4987 5075 4988\nf 4988 5075 5076\nf 4988 5076 5077\nf 4988 5077 4989\nf 4989 5077 5078\nf 4989 5078 4990\nf 4990 5078 5079\nf 4990 5079 4991\nf 4991 5079 5080\nf 4991 5080 4992\nf 4992 5080 5081\nf 4992 5081 4993\nf 4993 5081 5082\nf 4993 5082 4994\nf 4994 5082 5083\nf 4994 5083 4995\nf 4995 5083 5084\nf 4995 5084 4996\nf 4996 5084 5085\nf 4996 5085 4997\nf 4997 5085 5086\nf 4997 5086 4998\nf 4998 5086 5087\nf 4998 5087 4999\nf 4999 5087 5088\nf 4999 5088 5000\nf 5000 5088 5089\nf 5000 5089 5001\nf 5001 5089 5090\nf 5001 5090 5002\nf 5002 5090 5091\nf 5002 5091 5003\nf 5003 5091 5092\nf 5003 5092 5004\nf 5004 5092 5093\nf 5004 5093 5005\nf 5005 5093 5094\nf 5005 5094 5006\nf 5006 5094 5095\nf 5006 5095 5007\nf 5007 5095 5096\nf 5007 5096 5008\nf 5008 5096 5097\nf 5008 5097 5009\nf 5009 5097 5098\nf 5009 5098 5010\nf 5010 5098 5099\nf 5010 5099 5011\nf 5011 5099 5100\nf 5011 5100 5012\nf 5012 5100 5101\nf 5012 5101 5013\nf 5013 5101 5102\nf 5013 5102 5014\nf 5014 5102 5103\nf 5014 5103 5015\nf 5015 5103 5104\nf 5015 5104 5016\nf 5016 5104 5105\nf 5016 5105 5017\nf 5017 5105 5106\nf 5017 5106 5018\nf 5018 5106 5107\nf 5018 5107 5019\nf 5019 5107 5108\nf 5019 5108 5020\nf 5020 5108 5109\nf 5020 5109 5021\nf 5021 5109 5110\nf 5021 5110 5022\nf 5022 5110 5111\nf 5022 5111 5023\nf 5023 5111 5112\nf 5023 5112 5024\nf 5024 5112 5113\nf 5024 5113 5025\nf 5025 5113 5114\nf 5025 5114 5026\nf 5026 5114 5115\nf 5026 5115 5027\nf 5027 5115 5116\nf 5027 5116 5028\nf 5028 5116 5117\nf 5028 5117 5029\nf 5029 5117 5118\nf 5029 5118 5030\nf 5030 5118 5119\nf 5030 5119 5031\nf 5031 5119 5120\nf 5031 5120 5032\nf 5032 5120 5121\nf 5032 5121 5033\nf 5033 5121 5122\nf 5033 5122 5034\nf 5034 5122 5123\nf 5034 5123 5035\nf 5035 5123 5124\nf 5035 5124 5036\nf 5036 5124 5125\nf 5036 5125 5037\nf 5037 5125 5126\nf 5037 5126 5038\nf 5038 5126 5127\nf 5038 5127 5039\nf 5039 5127 5128\nf 5039 5128 5040\nf 5040 5128 5129\nf 5040 5129 5041\nf 5041 5129 5130\nf 5041 5130 5042\nf 5042 5130 5131\nf 5042 5131 5043\nf 5043 5131 5132\nf 5043 5132 5044\nf 5044 5132 5133\nf 5044 5133 5045\nf 5045 5133 5134\nf 5045 5134 5046\nf 5046 5134 5135\nf 5046 5135 5047\nf 5047 5135 5136\nf 5047 5136 5048\nf 5048 5136 5137\nf 5048 5137 5049\nf 5049 5137 5138\nf 5049 5138 5050\nf 5050 5138 5139\nf 5050 5139 5051\nf 5051 5139 5140\nf 5051 5140 5052\nf 5052 5140 5141\nf 5052 5141 5053\nf 5053 5141 5142\nf 5053 5142 5054\nf 5054 5142 5143\nf 5054 5143 5055\nf 5055 5143 5144\nf 5055 5144 5056\nf 5056 5144 5145\nf 5056 5145 5057\nf 5057 5145 5146\nf 5057 5146 5058\nf 5058 5146 5147\nf 5058 5147 5059\nf 5059 5147 5148\nf 5059 5148 5060\nf 5060 5148 5149\nf 5060 5149 5061\nf 5061 5149 5150\nf 5061 5150 5062\nf 5062 5150 5151\nf 5062 5151 5063\nf 5063 5151 5152\nf 5063 5152 5064\nf 5064 5152 5153\nf 5064 5153 5065\nf 5065 5153 5154\nf 5065 5154 5067\nf 5066 5067 5156\nf 5066 5156 5068\nf 5067 5154 5156\nf 5068 5156 5155\nf 5069 5070 5071\nf 5070 5157 5158\nf 5070 5158 5071\nf 5071 5158 5159\nf 5071 5159 7383\nf 5071 7383 7381\nf 5072 5160 5162\nf 5072 5162 5074\nf 5072 7380 7382\nf 5072 7382 5160\nf 5073 5074 5162\nf 5073 5162 5161\nf 5075 5163 5076\nf 5076 5163 5164\nf 5076 5164 5165\nf 5076 5165 5077\nf 5077 5165 5166\nf 5077 5166 5078\nf 5078 5166 5167\nf 5078 5167 5079\nf 5079 5167 5168\nf 5079 5168 5080\nf 5080 5168 5169\nf 5080 5169 5081\nf 5081 5169 5170\nf 5081 5170 5082\nf 5082 5170 5171\nf 5082 5171 5083\nf 5083 5171 5172\nf 5083 5172 5084\nf 5084 5172 5173\nf 5084 5173 5085\nf 5085 5173 5174\nf 5085 5174 5086\nf 5086 5174 5175\nf 5086 5175 5087\nf 5087 5175 5176\nf 5087 5176 5088\nf 5088 5176 5177\nf 5088 5177 5089\nf 5089 5177 5178\nf 5089 5178 5090\nf 5090 5178 5179\nf 5090 5179 5091\nf 5091 5179 5180\nf 5091 5180 5092\nf 5092 5180 5181\nf 5092 5181 5093\nf 5093 5181 5182\nf 5093 5182 5094\nf 5094 5182 5183\nf 5094 5183 5095\nf 5095 5183 5184\nf 5095 5184 5096\nf 5096 5184 5185\nf 5096 5185 5097\nf 5097 5185 5186\nf 5097 5186 5098\nf 5098 5186 5187\nf 5098 5187 5099\nf 5099 5187 5188\nf 5099 5188 5100\nf 5100 5188 5189\nf 5100 5189 5101\nf 5101 5189 5190\nf 5101 5190 5102\nf 5102 5190 5191\nf 5102 5191 5103\nf 5103 5191 5192\nf 5103 5192 5104\nf 5104 5192 5193\nf 5104 5193 5105\nf 5105 5193 5194\nf 5105 5194 5106\nf 5106 5194 5195\nf 5106 5195 5107\nf 5107 5195 5196\nf 5107 5196 5108\nf 5108 5196 5197\nf 5108 5197 5109\nf 5109 5197 5198\nf 5109 5198 5110\nf 5110 5198 5199\nf 5110 5199 5111\nf 5111 5199 5200\nf 5111 5200 5112\nf 5112 5200 5201\nf 5112 5201 5113\nf 5113 5201 5202\nf 5113 5202 5114\nf 5114 5202 5203\nf 5114 5203 5115\nf 5115 5203 5204\nf 5115 5204 5116\nf 5116 5204 5205\nf 5116 5205 5117\nf 5117 5205 5206\nf 5117 5206 5118\nf 5118 5206 5207\nf 5118 5207 5119\nf 5119 5207 5208\nf 5119 5208 5120\nf 5120 5208 5209\nf 5120 5209 5121\nf 5121 5209 5210\nf 5121 5210 5122\nf 5122 5210 5211\nf 5122 5211 5123\nf 5123 5211 5212\nf 5123 5212 5124\nf 5124 5212 5213\nf 5124 5213 5125\nf 5125 5213 5214\nf 5125 5214 5126\nf 5126 5214 5215\nf 5126 5215 5127\nf 5127 5215 5216\nf 5127 5216 5128\nf 5128 5216 5217\nf 5128 5217 5129\nf 5129 5217 5218\nf 5129 5218 5130\nf 5130 5218 5219\nf 5130 5219 5131\nf 5131 5219 5220\nf 5131 5220 5132\nf 5132 5220 5221\nf 5132 5221 5133\nf 5133 5221 5222\nf 5133 5222 5134\nf 5134 5222 5223\nf 5134 5223 5135\nf 5135 5223 5224\nf 5135 5224 5136\nf 5136 5224 5225\nf 5136 5225 5137\nf 5137 5225 5226\nf 5137 5226 5138\nf 5138 5226 5227\nf 5138 5227 5139\nf 5139 5227 5228\nf 5139 5228 5140\nf 5140 5228 5229\nf 5140 5229 5141\nf 5141 5229 5230\nf 5141 5230 5142\nf 5142 5230 5231\nf 5142 5231 5143\nf 5143 5231 5232\nf 5143 5232 5144\nf 5144 5232 5233\nf 5144 5233 5145\nf 5145 5233 5234\nf 5145 5234 5146\nf 5146 5234 5235\nf 5146 5235 5147\nf 5147 5235 5236\nf 5147 5236 5148\nf 5148 5236 5237\nf 5148 5237 5149\nf 5149 5237 5238\nf 5149 5238 5150\nf 5150 5238 5239\nf 5150 5239 5151\nf 5151 5239 5240\nf 5151 5240 5152\nf 5152 5240 5241\nf 5152 5241 5153\nf 5153 5241 5242\nf 5153 5242 5154\nf 5154 5242 5244\nf 5154 5244 5156\nf 5155 5156 5244\nf 5155 5244 5243\nf 5157 5255 5158\nf 5158 5255 5256\nf 5158 5256 5159\nf 5159 5256 7386\nf 5159 7384 7383\nf 5159 7386 7384\nf 5160 5257 5259\nf 5160 5259 5162\nf 5160 7382 7385\nf 5160 7385 5257\nf 5161 5162 5259\nf 5161 5259 5258\nf 5163 5260 5164\nf 5164 5260 5262\nf 5164 5262 5263\nf 5164 5263 5165\nf 5165 5263 5264\nf 5165 5264 5166\nf 5166 5264 5265\nf 5166 5265 5167\nf 5167 5265 5266\nf 5167 5266 5168\nf 5168 5266 5267\nf 5168 5267 5169\nf 5169 5267 5268\nf 5169 5268 5170\nf 5170 5268 5269\nf 5170 5269 5171\nf 5171 5269 5270\nf 5171 5270 5172\nf 5172 5270 5271\nf 5172 5271 5173\nf 5173 5271 5272\nf 5173 5272 5174\nf 5174 5272 5273\nf 5174 5273 5175\nf 5175 5273 5274\nf 5175 5274 5176\nf 5176 5274 5275\nf 5176 5275 5177\nf 5177 5275 5276\nf 5177 5276 5178\nf 5178 5276 5277\nf 5178 5277 5179\nf 5179 5277 5278\nf 5179 5278 5180\nf 5180 5278 5279\nf 5180 5279 5181\nf 5181 5279 5280\nf 5181 5280 5182\nf 5182 5280 5281\nf 5182 5281 5183\nf 5183 5281 5282\nf 5183 5282 5184\nf 5184 5282 5283\nf 5184 5283 5185\nf 5185 5283 5284\nf 5185 5284 5186\nf 5186 5284 5285\nf 5186 5285 5187\nf 5187 5285 5286\nf 5187 5286 5188\nf 5188 5286 5287\nf 5188 5287 5189\nf 5189 5287 5288\nf 5189 5288 5190\nf 5190 5288 5289\nf 5190 5289 5191\nf 5191 5289 5290\nf 5191 5290 5192\nf 5192 5290 5291\nf 5192 5291 5193\nf 5193 5291 5292\nf 5193 5292 5194\nf 5194 5292 5293\nf 5194 5293 5195\nf 5195 5293 5294\nf 5195 5294 5196\nf 5196 5294 5295\nf 5196 5295 5197\nf 5197 5295 5296\nf 5197 5296 5198\nf 5198 5296 5297\nf 5198 5297 5199\nf 5199 5297 5298\nf 5199 5298 5200\nf 5200 5298 5299\nf 5200 5299 5201\nf 5201 5299 5300\nf 5201 5300 5202\nf 5202 5300 5301\nf 5202 5301 5203\nf 5203 5301 5302\nf 5203 5302 5204\nf 5204 5302 5303\nf 5204 5303 5205\nf 5205 5303 5304\nf 5205 5304 5206\nf 5206 5304 5305\nf 5206 5305 5207\nf 5207 5305 5306\nf 5207 5306 5208\nf 5208 5306 5307\nf 5208 5307 5209\nf 5209 5307 5308\nf 5209 5308 5210\nf 5210 5308 5309\nf 5210 5309 5211\nf 5211 5309 5310\nf 5211 5310 5212\nf 5212 5310 5311\nf 5212 5311 5213\nf 5213 5311 5312\nf 5213 5312 5214\nf 5214 5312 5313\nf 5214 5313 5215\nf 5215 5313 5314\nf 5215 5314 5216\nf 5216 5314 5315\nf 5216 5315 5217\nf 5217 5315 5316\nf 5217 5316 5218\nf 5218 5316 5317\nf 5218 5317 5219\nf 5219 5317 5318\nf 5219 5318 5220\nf 5220 5318 5319\nf 5220 5319 5221\nf 5221 5319 5320\nf 5221 5320 5222\nf 5222 5320 5321\nf 5222 5321 5223\nf 5223 5321 5322\nf 5223 5322 5224\nf 5224 5322 5323\nf 5224 5323 5225\nf 5225 5323 5324\nf 5225 5324 5226\nf 5226 5324 5325\nf 5226 5325 5227\nf 5227 5325 5326\nf 5227 5326 5228\nf 5228 5326 5327\nf 5228 5327 5229\nf 5229 5327 5328\nf 5229 5328 5230\nf 5230 5328 5329\nf 5230 5329 5231\nf 5231 5329 5330\nf 5231 5330 5232\nf 5232 5330 5331\nf 5232 5331 5233\nf 5233 5331 5332\nf 5233 5332 5234\nf 5234 5332 5333\nf 5234 5333 5235\nf 5235 5333 5334\nf 5235 5334 5236\nf 5236 5334 5335\nf 5236 5335 5237\nf 5237 5335 5336\nf 5237 5336 5238\nf 5238 5336 5337\nf 5238 5337 5239\nf 5239 5337 5338\nf 5239 5338 5240\nf 5240 5338 5339\nf 5240 5339 5241\nf 5241 5339 5340\nf 5241 5340 5242\nf 5242 5340 5341\nf 5242 5341 5244\nf 5243 5244 5342\nf 5243 5342 5245\nf 5244 5341 5342\nf 5245 5342 5343\nf 5245 5343 5246\nf 5246 5343 5344\nf 5246 5344 5247\nf 5247 5344 5345\nf 5247 5345 5248\nf 5248 5345 5346\nf 5248 5346 5249\nf 5249 5346 5347\nf 5249 5347 5250\nf 5250 5347 5348\nf 5250 5348 5251\nf 5251 5348 5349\nf 5251 5349 5252\nf 5252 5349 5350\nf 5252 5350 5253\nf 5253 5350 5353\nf 5253 5353 5254\nf 5254 5353 5351\nf 5255 5354 5256\nf 5256 5354 5355\nf 5256 5355 5356\nf 5256 5356 7387\nf 5256 7387 7386\nf 5257 5358 5259\nf 5257 7385 7389\nf 5257 7389 7390\nf 5257 7390 5358\nf 5258 5259 5358\nf 5258 5358 5357\nf 5260 5261 5262\nf 5261 5359 5360\nf 5261 5360 5262\nf 5262 5360 5361\nf 5262 5361 5362\nf 5262 5362 5263\nf 5263 5362 5363\nf 5263 5363 5264\nf 5264 5363 5364\nf 5264 5364 5265\nf 5265 5364 5365\nf 5265 5365 5266\nf 5266 5365 5366\nf 5266 5366 5267\nf 5267 5366 5367\nf 5267 5367 5268\nf 5268 5367 5368\nf 5268 5368 5269\nf 5269 5368 5369\nf 5269 5369 5270\nf 5270 5369 5370\nf 5270 5370 5271\nf 5271 5370 5371\nf 5271 5371 5272\nf 5272 5371 5372\nf 5272 5372 5273\nf 5273 5372 5373\nf 5273 5373 5274\nf 5274 5373 5374\nf 5274 5374 5275\nf 5275 5374 5375\nf 5275 5375 5276\nf 5276 5375 5376\nf 5276 5376 5277\nf 5277 5376 5377\nf 5277 5377 5278\nf 5278 5377 5378\nf 5278 5378 5279\nf 5279 5378 5379\nf 5279 5379 5280\nf 5280 5379 5380\nf 5280 5380 5281\nf 5281 5380 5381\nf 5281 5381 5282\nf 5282 5381 5382\nf 5282 5382 5283\nf 5283 5382 5383\nf 5283 5383 5284\nf 5284 5383 5384\nf 5284 5384 5285\nf 5285 5384 5385\nf 5285 5385 5286\nf 5286 5385 5386\nf 5286 5386 5287\nf 5287 5386 5387\nf 5287 5387 5288\nf 5288 5387 5388\nf 5288 5388 5289\nf 5289 5388 5389\nf 5289 5389 5290\nf 5290 5389 5390\nf 5290 5390 5291\nf 5291 5390 5391\nf 5291 5391 5292\nf 5292 5391 5392\nf 5292 5392 5293\nf 5293 5392 5393\nf 5293 5393 5294\nf 5294 5393 5394\nf 5294 5394 5295\nf 5295 5394 5395\nf 5295 5395 5296\nf 5296 5395 5396\nf 5296 5396 5297\nf 5297 5396 5397\nf 5297 5397 5298\nf 5298 5397 5398\nf 5298 5398 5299\nf 5299 5398 5399\nf 5299 5399 5300\nf 5300 5399 5400\nf 5300 5400 5301\nf 5301 5400 5401\nf 5301 5401 5302\nf 5302 5401 5402\nf 5302 5402 5303\nf 5303 5402 5403\nf 5303 5403 5304\nf 5304 5403 5404\nf 5304 5404 5305\nf 5305 5404 5405\nf 5305 5405 5306\nf 5306 5405 5406\nf 5306 5406 5307\nf 5307 5406 5407\nf 5307 5407 5308\nf 5308 5407 5408\nf 5308 5408 5309\nf 5309 5408 5409\nf 5309 5409 5310\nf 5310 5409 5410\nf 5310 5410 5311\nf 5311 5410 5411\nf 5311 5411 5312\nf 5312 5411 5412\nf 5312 5412 5313\nf 5313 5412 5413\nf 5313 5413 5314\nf 5314 5413 5414\nf 5314 5414 5315\nf 5315 5414 5415\nf 5315 5415 5316\nf 5316 5415 5416\nf 5316 5416 5317\nf 5317 5416 5417\nf 5317 5417 5318\nf 5318 5417 5418\nf 5318 5418 5319\nf 5319 5418 5419\nf 5319 5419 5320\nf 5320 5419 5420\nf 5320 5420 5321\nf 5321 5420 5421\nf 5321 5421 5322\nf 5322 5421 5422\nf 5322 5422 5323\nf 5323 5422 5423\nf 5323 5423 5324\nf 5324 5423 5424\nf 5324 5424 5325\nf 5325 5424 5425\nf 5325 5425 5326\nf 5326 5425 5426\nf 5326 5426 5327\nf 5327 5426 5427\nf 5327 5427 5328\nf 5328 5427 5428\nf 5328 5428 5329\nf 5329 5428 5429\nf 5329 5429 5330\nf 5330 5429 5430\nf 5330 5430 5331\nf 5331 5430 5431\nf 5331 5431 5332\nf 5332 5431 5432\nf 5332 5432 5333\nf 5333 5432 5433\nf 5333 5433 5334\nf 5334 5433 5434\nf 5334 5434 5335\nf 5335 5434 5435\nf 5335 5435 5336\nf 5336 5435 5436\nf 5336 5436 5337\nf 5337 5436 5437\nf 5337 5437 5338\nf 5338 5437 5438\nf 5338 5438 5339\nf 5339 5438 5439\nf 5339 5439 5340\nf 5340 5439 5440\nf 5340 5440 5341\nf 5341 5440 5441\nf 5341 5441 5342\nf 5342 5441 5442\nf 5342 5442 5343\nf 5343 5442 5443\nf 5343 5443 5344\nf 5344 5443 5444\nf 5344 5444 5345\nf 5345 5444 5445\nf 5345 5445 5346\nf 5346 5445 5446\nf 5346 5446 5347\nf 5347 5446 5447\nf 5347 5447 5348\nf 5348 5447 5448\nf 5348 5448 5349\nf 5349 5448 5450\nf 5349 5450 5350\nf 5350 5450 5353\nf 5351 5353 5352\nf 5352 5353 5450\nf 5352 5450 5449\nf 5354 5452 5355\nf 5355 5452 5453\nf 5355 5453 5356\nf 5356 5453 7395\nf 5356 7391 7387\nf 5356 7392 7391\nf 5356 7395 7392\nf 5357 5358 5456\nf 5357 5456 5454\nf 5358 7390 7393\nf 5358 7393 5456\nf 5359 5457 5360\nf 5360 5457 5458\nf 5360 5458 5459\nf 5360 5459 5361\nf 5361 5459 5460\nf 5361 5460 5362\nf 5362 5460 5461\nf 5362 5461 5363\nf 5363 5461 5462\nf 5363 5462 5364\nf 5364 5462 5463\nf 5364 5463 5365\nf 5365 5463 5464\nf 5365 5464 5366\nf 5366 5464 5465\nf 5366 5465 5367\nf 5367 5465 5466\nf 5367 5466 5368\nf 5368 5466 5467\nf 5368 5467 5369\nf 5369 5467 5468\nf 5369 5468 5370\nf 5370 5468 5469\nf 5370 5469 5371\nf 5371 5469 5470\nf 5371 5470 5372\nf 5372 5470 5471\nf 5372 5471 5373\nf 5373 5471 5472\nf 5373 5472 5374\nf 5374 5472 5473\nf 5374 5473 5375\nf 5375 5473 5474\nf 5375 5474 5376\nf 5376 5474 5475\nf 5376 5475 5377\nf 5377 5475 5476\nf 5377 5476 5378\nf 5378 5476 5477\nf 5378 5477 5379\nf 5379 5477 5478\nf 5379 5478 5380\nf 5380 5478 5479\nf 5380 5479 5381\nf 5381 5479 5480\nf 5381 5480 5382\nf 5382 5480 5481\nf 5382 5481 5383\nf 5383 5481 5482\nf 5383 5482 5384\nf 5384 5482 5483\nf 5384 5483 5385\nf 5385 5483 5484\nf 5385 5484 5386\nf 5386 5484 5485\nf 5386 5485 5387\nf 5387 5485 5486\nf 5387 5486 5388\nf 5388 5486 5487\nf 5388 5487 5389\nf 5389 5487 5488\nf 5389 5488 5390\nf 5390 5488 5489\nf 5390 5489 5391\nf 5391 5489 5490\nf 5391 5490 5392\nf 5392 5490 5491\nf 5392 5491 5393\nf 5393 5491 5492\nf 5393 5492 5394\nf 5394 5492 5493\nf 5394 5493 5395\nf 5395 5493 5494\nf 5395 5494 5396\nf 5396 5494 5495\nf 5396 5495 5397\nf 5397 5495 5496\nf 5397 5496 5398\nf 5398 5496 5497\nf 5398 5497 5399\nf 5399 5497 5498\nf 5399 5498 5400\nf 5400 5498 5499\nf 5400 5499 5401\nf 5401 5499 5500\nf 5401 5500 5402\nf 5402 5500 5501\nf 5402 5501 5403\nf 5403 5501 5502\nf 5403 5502 5404\nf 5404 5502 5503\nf 5404 5503 5405\nf 5405 5503 5504\nf 5405 5504 5406\nf 5406 5504 5505\nf 5406 5505 5407\nf 5407 5505 5506\nf 5407 5506 5408\nf 5408 5506 5507\nf 5408 5507 5409\nf 5409 5507 5508\nf 5409 5508 5410\nf 5410 5508 5509\nf 5410 5509 5411\nf 5411 5509 5510\nf 5411 5510 5412\nf 5412 5510 5511\nf 5412 5511 5413\nf 5413 5511 5512\nf 5413 5512 5414\nf 5414 5512 5513\nf 5414 5513 5415\nf 5415 5513 5514\nf 5415 5514 5416\nf 5416 5514 5515\nf 5416 5515 5417\nf 5417 5515 5516\nf 5417 5516 5418\nf 5418 5516 5517\nf 5418 5517 5419\nf 5419 5517 5518\nf 5419 5518 5420\nf 5420 5518 5519\nf 5420 5519 5421\nf 5421 5519 5520\nf 5421 5520 5422\nf 5422 5520 5521\nf 5422 5521 5423\nf 5423 5521 5522\nf 5423 5522 5424\nf 5424 5522 5523\nf 5424 5523 5425\nf 5425 5523 5524\nf 5425 5524 5426\nf 5426 5524 5525\nf 5426 5525 5427\nf 5427 5525 5526\nf 5427 5526 5428\nf 5428 5526 5527\nf 5428 5527 5429\nf 5429 5527 5528\nf 5429 5528 5430\nf 5430 5528 5529\nf 5430 5529 5431\nf 5431 5529 5530\nf 5431 5530 5432\nf 5432 5530 5531\nf 5432 5531 5433\nf 5433 5531 5532\nf 5433 5532 5434\nf 5434 5532 5533\nf 5434 5533 5435\nf 5435 5533 5534\nf 5435 5534 5436\nf 5436 5534 5535\nf 5436 5535 5437\nf 5437 5535 5536\nf 5437 5536 5438\nf 5438 5536 5537\nf 5438 5537 5439\nf 5439 5537 5538\nf 5439 5538 5440\nf 5440 5538 5539\nf 5440 5539 5441\nf 5441 5539 5540\nf 5441 5540 5442\nf 5442 5540 5541\nf 5442 5541 5443\nf 5443 5541 5542\nf 5443 5542 5444\nf 5444 5542 5543\nf 5444 5543 5445\nf 5445 5543 5544\nf 5445 5544 5446\nf 5446 5544 5545\nf 5446 5545 5447\nf 5447 5545 5546\nf 5447 5546 5448\nf 5448 5546 5547\nf 5448 5547 5450\nf 5449 5450 5549\nf 5449 5549 5451\nf 5450 5547 5549\nf 5451 5549 5548\nf 5452 5550 5453\nf 5453 5550 5551\nf 5453 5551 7403\nf 5453 7403 7395\nf 5454 5456 5455\nf 5455 5456 7397\nf 5455 7397 7398\nf 5455 7398 5552\nf 5456 7393 7397\nf 5457 5554 5458\nf 5458 5554 5555\nf 5458 5555 5556\nf 5458 5556 5459\nf 5459 5556 5557\nf 5459 5557 5460\nf 5460 5557 5558\nf 5460 5558 5461\nf 5461 5558 5559\nf 5461 5559 5462\nf 5462 5559 5560\nf 5462 5560 5463\nf 5463 5560 5561\nf 5463 5561 5464\nf 5464 5561 5562\nf 5464 5562 5465\nf 5465 5562 5563\nf 5465 5563 5466\nf 5466 5563 5564\nf 5466 5564 5467\nf 5467 5564 5565\nf 5467 5565 5468\nf 5468 5565 5566\nf 5468 5566 5469\nf 5469 5566 5567\nf 5469 5567 5470\nf 5470 5567 5568\nf 5470 5568 5471\nf 5471 5568 5569\nf 5471 5569 5472\nf 5472 5569 5570\nf 5472 5570 5473\nf 5473 5570 5571\nf 5473 5571 5474\nf 5474 5571 5572\nf 5474 5572 5475\nf 5475 5572 5573\nf 5475 5573 5476\nf 5476 5573 5574\nf 5476 5574 5477\nf 5477 5574 5575\nf 5477 5575 5478\nf 5478 5575 5576\nf 5478 5576 5479\nf 5479 5576 5577\nf 5479 5577 5480\nf 5480 5577 5578\nf 5480 5578 5481\nf 5481 5578 5579\nf 5481 5579 5482\nf 5482 5579 5580\nf 5482 5580 5483\nf 5483 5580 5581\nf 5483 5581 5484\nf 5484 5581 5582\nf 5484 5582 5485\nf 5485 5582 5583\nf 5485 5583 5486\nf 5486 5583 5584\nf 5486 5584 5487\nf 5487 5584 5585\nf 5487 5585 5488\nf 5488 5585 5586\nf 5488 5586 5489\nf 5489 5586 5587\nf 5489 5587 5490\nf 5490 5587 5588\nf 5490 5588 5491\nf 5491 5588 5589\nf 5491 5589 5492\nf 5492 5589 5590\nf 5492 5590 5493\nf 5493 5590 5591\nf 5493 5591 5494\nf 5494 5591 5592\nf 5494 5592 5495\nf 5495 5592 5593\nf 5495 5593 5496\nf 5496 5593 5594\nf 5496 5594 5497\nf 5497 5594 5595\nf 5497 5595 5498\nf 5498 5595 5596\nf 5498 5596 5499\nf 5499 5596 5597\nf 5499 5597 5500\nf 5500 5597 5598\nf 5500 5598 5501\nf 5501 5598 5599\nf 5501 5599 5502\nf 5502 5599 5600\nf 5502 5600 5503\nf 5503 5600 5601\nf 5503 5601 5504\nf 5504 5601 5602\nf 5504 5602 5505\nf 5505 5602 5603\nf 5505 5603 5506\nf 5506 5603 5604\nf 5506 5604 5507\nf 5507 5604 5605\nf 5507 5605 5508\nf 5508 5605 5606\nf 5508 5606 5509\nf 5509 5606 5607\nf 5509 5607 5510\nf 5510 5607 5608\nf 5510 5608 5511\nf 5511 5608 5609\nf 5511 5609 5512\nf 5512 5609 5610\nf 5512 5610 5513\nf 5513 5610 5611\nf 5513 5611 5514\nf 5514 5611 5612\nf 5514 5612 5515\nf 5515 5612 5613\nf 5515 5613 5516\nf 5516 5613 5614\nf 5516 5614 5517\nf 5517 5614 5615\nf 5517 5615 5518\nf 5518 5615 5616\nf 5518 5616 5519\nf 5519 5616 5617\nf 5519 5617 5520\nf 5520 5617 5618\nf 5520 5618 5521\nf 5521 5618 5619\nf 5521 5619 5522\nf 5522 5619 5620\nf 5522 5620 5523\nf 5523 5620 5621\nf 5523 5621 5524\nf 5524 5621 5525\nf 5525 5621 7420\nf 5525 7400 5526\nf 5525 7420 7400\nf 5526 7400 7401\nf 5526 7401 5527\nf 5527 5622 5528\nf 5527 7401 7402\nf 5527 7402 5622\nf 5528 5622 5623\nf 5528 5623 5529\nf 5529 5623 5624\nf 5529 5624 5530\nf 5530 5624 5625\nf 5530 5625 5531\nf 5531 5625 5626\nf 5531 5626 5532\nf 5532 5626 5627\nf 5532 5627 5533\nf 5533 5627 5628\nf 5533 5628 5534\nf 5534 5628 5629\nf 5534 5629 5535\nf 5535 5629 5630\nf 5535 5630 5536\nf 5536 5630 5631\nf 5536 5631 5537\nf 5537 5631 5632\nf 5537 5632 5538\nf 5538 5632 5633\nf 5538 5633 5539\nf 5539 5633 5634\nf 5539 5634 5540\nf 5540 5634 5635\nf 5540 5635 5541\nf 5541 5635 5636\nf 5541 5636 5542\nf 5542 5636 5637\nf 5542 5637 5543\nf 5543 5637 5638\nf 5543 5638 5544\nf 5544 5638 5639\nf 5544 5639 5545\nf 5545 5639 5640\nf 5545 5640 5546\nf 5546 5640 5641\nf 5546 5641 5547\nf 5547 5641 5643\nf 5547 5643 5549\nf 5548 5549 5643\nf 5548 5643 5642\nf 5550 5645 5551\nf 5551 5645 5647\nf 5551 5647 7427\nf 5551 7427 7403\nf 5552 5553 5649\nf 5552 5649 5648\nf 5552 7398 5553\nf 5553 7398 7405\nf 5553 7405 5649\nf 5554 5650 5555\nf 5555 5650 5652\nf 5555 5652 5653\nf 5555 5653 5556\nf 5556 5653 5654\nf 5556 5654 5557\nf 5557 5654 5655\nf 5557 5655 5558\nf 5558 5655 5656\nf 5558 5656 5559\nf 5559 5656 5657\nf 5559 5657 5560\nf 5560 5657 5658\nf 5560 5658 5561\nf 5561 5658 5659\nf 5561 5659 5562\nf 5562 5659 5660\nf 5562 5660 5563\nf 5563 5660 5661\nf 5563 5661 5564\nf 5564 5661 5662\nf 5564 5662 5565\nf 5565 5662 5663\nf 5565 5663 5566\nf 5566 5663 5664\nf 5566 5664 5567\nf 5567 5664 5665\nf 5567 5665 5568\nf 5568 5665 5666\nf 5568 5666 5569\nf 5569 5666 5667\nf 5569 5667 5570\nf 5570 5667 5668\nf 5570 5668 5571\nf 5571 5668 5669\nf 5571 5669 5572\nf 5572 5669 5670\nf 5572 5670 5573\nf 5573 5670 5671\nf 5573 5671 5574\nf 5574 5671 5672\nf 5574 5672 5575\nf 5575 5672 5673\nf 5575 5673 5576\nf 5576 5673 5674\nf 5576 5674 5577\nf 5577 5674 5675\nf 5577 5675 5578\nf 5578 5675 5676\nf 5578 5676 5579\nf 5579 5676 5677\nf 5579 5677 5580\nf 5580 5677 5678\nf 5580 5678 5581\nf 5581 5678 5679\nf 5581 5679 5582\nf 5582 5679 5680\nf 5582 5680 5583\nf 5583 5680 5681\nf 5583 5681 5584\nf 5584 5681 5682\nf 5584 5682 5585\nf 5585 5682 5683\nf 5585 5683 5586\nf 5586 5683 5684\nf 5586 5684 5587\nf 5587 5684 5685\nf 5587 5685 5588\nf 5588 5685 5686\nf 5588 5686 5589\nf 5589 5686 5687\nf 5589 5687 5590\nf 5590 5687 5688\nf 5590 5688 5591\nf 5591 5688 5689\nf 5591 5689 5592\nf 5592 5689 5690\nf 5592 5690 5593\nf 5593 5690 5691\nf 5593 5691 5594\nf 5594 5691 5692\nf 5594 5692 5595\nf 5595 5692 5693\nf 5595 5693 5596\nf 5596 5693 5694\nf 5596 5694 5597\nf 5597 5694 5695\nf 5597 5695 5598\nf 5598 5695 5696\nf 5598 5696 5599\nf 5599 5696 5697\nf 5599 5697 5600\nf 5600 5697 5698\nf 5600 5698 5601\nf 5601 5698 5699\nf 5601 5699 5602\nf 5602 5699 5700\nf 5602 5700 5603\nf 5603 5700 5701\nf 5603 5701 5604\nf 5604 5701 5702\nf 5604 5702 5605\nf 5605 5702 5703\nf 5605 5703 5606\nf 5606 5703 5607\nf 5607 5703 7453\nf 5607 7406 5608\nf 5607 7453 7406\nf 5608 7406 7407\nf 5608 7407 5609\nf 5609 7407 7408\nf 5609 7408 5610\nf 5610 7408 7409\nf 5610 7409 5611\nf 5611 7409 7410\nf 5611 7410 5612\nf 5612 7410 7411\nf 5612 7411 5613\nf 5613 7411 7412\nf 5613 7412 5614\nf 5614 7412 7413\nf 5614 7413 5615\nf 5615 7413 7414\nf 5615 7414 5616\nf 5616 7414 7415\nf 5616 7415 5617\nf 5617 7415 7416\nf 5617 7416 5618\nf 5618 7416 7417\nf 5618 7417 5619\nf 5619 7417 7418\nf 5619 7418 5620\nf 5620 7418 7419\nf 5620 7419 5621\nf 5621 7419 7421\nf 5621 7421 7420\nf 5622 5704 5705\nf 5622 5705 5706\nf 5622 5706 5623\nf 5622 7402 7424\nf 5622 7424 5704\nf 5623 5706 5707\nf 5623 5707 5624\nf 5624 5707 5708\nf 5624 5708 5625\nf 5625 5708 5709\nf 5625 5709 5626\nf 5626 5709 5710\nf 5626 5710 5627\nf 5627 5710 5711\nf 5627 5711 5628\nf 5628 5711 5712\nf 5628 5712 5629\nf 5629 5712 5713\nf 5629 5713 5630\nf 5630 5713 5714\nf 5630 5714 5631\nf 5631 5714 5715\nf 5631 5715 5632\nf 5632 5715 5716\nf 5632 5716 5633\nf 5633 5716 5717\nf 5633 5717 5634\nf 5634 5717 5718\nf 5634 5718 5635\nf 5635 5718 5719\nf 5635 5719 5636\nf 5636 5719 5720\nf 5636 5720 5637\nf 5637 5720 5721\nf 5637 5721 5638\nf 5638 5721 5722\nf 5638 5722 5639\nf 5639 5722 5723\nf 5639 5723 5640\nf 5640 5723 5724\nf 5640 5724 5641\nf 5641 5724 5725\nf 5641 5725 5643\nf 5642 5643 5726\nf 5642 5726 5644\nf 5643 5725 5726\nf 5644 5726 5727\nf 5644 5727 5646\nf 5645 5646 5647\nf 5646 5727 5647\nf 5647 5727 5728\nf 5647 5728 7475\nf 5647 7475 7427\nf 5648 5649 5730\nf 5648 5730 5729\nf 5649 7405 7429\nf 5649 7429 5730\nf 5650 5651 5652\nf 5651 5731 5652\nf 5652 5731 5732\nf 5652 5732 5653\nf 5653 5732 5733\nf 5653 5733 5654\nf 5654 5733 5734\nf 5654 5734 5655\nf 5655 5734 5735\nf 5655 5735 5656\nf 5656 5735 5736\nf 5656 5736 5657\nf 5657 5736 5737\nf 5657 5737 5658\nf 5658 5737 5738\nf 5658 5738 5659\nf 5659 5738 5739\nf 5659 5739 5660\nf 5660 5739 5740\nf 5660 5740 5661\nf 5661 5740 5741\nf 5661 5741 5662\nf 5662 5741 5742\nf 5662 5742 5663\nf 5663 5742 5743\nf 5663 5743 5664\nf 5664 5743 5744\nf 5664 5744 5665\nf 5665 5744 5745\nf 5665 5745 5666\nf 5666 5745 5746\nf 5666 5746 5667\nf 5667 5746 5747\nf 5667 5747 5668\nf 5668 5747 5748\nf 5668 5748 5669\nf 5669 5748 5749\nf 5669 5749 5670\nf 5670 5749 5750\nf 5670 5750 5671\nf 5671 5750 5751\nf 5671 5751 5672\nf 5672 5751 5752\nf 5672 5752 5673\nf 5673 5752 5753\nf 5673 5753 5674\nf 5674 5753 5754\nf 5674 5754 5675\nf 5675 5754 5755\nf 5675 5755 5676\nf 5676 5755 5756\nf 5676 5756 5677\nf 5677 5756 5757\nf 5677 5757 5678\nf 5678 5757 5758\nf 5678 5758 5679\nf 5679 5758 5680\nf 5680 5758 7488\nf 5680 7430 5681\nf 5680 7488 7430\nf 5681 7430 7431\nf 5681 7431 5682\nf 5682 7431 7432\nf 5682 7432 5683\nf 5683 7432 7433\nf 5683 7433 5684\nf 5684 7433 7434\nf 5684 7434 5685\nf 5685 7434 7435\nf 5685 7435 5686\nf 5686 7435 7436\nf 5686 7436 5687\nf 5687 7436 7437\nf 5687 7437 5688\nf 5688 7437 7438\nf 5688 7438 5689\nf 5689 7438 7439\nf 5689 7439 5690\nf 5690 7439 7440\nf 5690 7440 5691\nf 5691 7440 7441\nf 5691 7441 5692\nf 5692 7441 7442\nf 5692 7442 5693\nf 5693 7442 7443\nf 5693 7443 5694\nf 5694 7443 7444\nf 5694 7444 5695\nf 5695 7444 7445\nf 5695 7445 5696\nf 5696 7445 7446\nf 5696 7446 5697\nf 5697 7446 7447\nf 5697 7447 5698\nf 5698 7447 7448\nf 5698 7448 5699\nf 5699 7448 7449\nf 5699 7449 5700\nf 5700 7449 7450\nf 5700 7450 5701\nf 5701 7450 7451\nf 5701 7451 5702\nf 5702 7451 7452\nf 5702 7452 5703\nf 5703 7452 7454\nf 5703 7454 7453\nf 5704 7424 7425\nf 5704 7425 7471\nf 5704 7471 7473\nf 5704 7473 5705\nf 5705 5759 5706\nf 5705 7473 7474\nf 5705 7474 5759\nf 5706 5759 5760\nf 5706 5760 5707\nf 5707 5760 5761\nf 5707 5761 5708\nf 5708 5761 5762\nf 5708 5762 5709\nf 5709 5762 5763\nf 5709 5763 5710\nf 5710 5763 5764\nf 5710 5764 5711\nf 5711 5764 5765\nf 5711 5765 5712\nf 5712 5765 5766\nf 5712 5766 5713\nf 5713 5766 5767\nf 5713 5767 5714\nf 5714 5767 5768\nf 5714 5768 5715\nf 5715 5768 5769\nf 5715 5769 5716\nf 5716 5769 5770\nf 5716 5770 5717\nf 5717 5770 5771\nf 5717 5771 5718\nf 5718 5771 5772\nf 5718 5772 5719\nf 5719 5772 5773\nf 5719 5773 5720\nf 5720 5773 5774\nf 5720 5774 5721\nf 5721 5774 5775\nf 5721 5775 5722\nf 5722 5775 5776\nf 5722 5776 5723\nf 5723 5776 5777\nf 5723 5777 5724\nf 5724 5777 5778\nf 5724 5778 5725\nf 5725 5778 5779\nf 5725 5779 5726\nf 5726 5779 5780\nf 5726 5780 5727\nf 5727 5780 5728\nf 5728 5780 7546\nf 5728 7476 7475\nf 5728 7546 7476\nf 5729 5730 5782\nf 5729 5782 5781\nf 5730 7429 7477\nf 5730 7477 5782\nf 5731 5783 5732\nf 5732 5783 5784\nf 5732 5784 5785\nf 5732 5785 5733\nf 5733 5785 5786\nf 5733 5786 5734\nf 5734 5786 5787\nf 5734 5787 5735\nf 5735 5787 5788\nf 5735 5788 5736\nf 5736 5788 5789\nf 5736 5789 5737\nf 5737 5789 5790\nf 5737 5790 5738\nf 5738 5790 5791\nf 5738 5791 5739\nf 5739 5791 5792\nf 5739 5792 5740\nf 5740 5792 5793\nf 5740 5793 5741\nf 5741 5793 5794\nf 5741 5794 5742\nf 5742 5794 5795\nf 5742 5795 5743\nf 5743 5795 5796\nf 5743 5796 5744\nf 5744 5796 5797\nf 5744 5797 5745\nf 5745 5797 5798\nf 5745 5798 5746\nf 5746 5798 5799\nf 5746 5799 5747\nf 5747 5799 5748\nf 5748 5799 7557\nf 5748 7478 5749\nf 5748 7557 7478\nf 5749 7478 7479\nf 5749 7479 5750\nf 5750 7479 7480\nf 5750 7480 5751\nf 5751 7480 7481\nf 5751 7481 5752\nf 5752 7481 7482\nf 5752 7482 5753\nf 5753 7482 7483\nf 5753 7483 5754\nf 5754 7483 7484\nf 5754 7484 5755\nf 5755 7484 7485\nf 5755 7485 5756\nf 5756 7485 7486\nf 5756 7486 5757\nf 5757 7486 7487\nf 5757 7487 5758\nf 5758 7487 7489\nf 5758 7489 7488\nf 5759 7474 7532\nf 5759 7532 7534\nf 5759 7534 5760\nf 5760 7534 7535\nf 5760 7535 5761\nf 5761 7535 7536\nf 5761 7536 5762\nf 5762 7536 7537\nf 5762 7537 5763\nf 5763 7537 7538\nf 5763 7538 5764\nf 5764 7538 7539\nf 5764 7539 5765\nf 5765 7539 7540\nf 5765 7540 5766\nf 5766 7540 7541\nf 5766 7541 5767\nf 5767 7541 7542\nf 5767 7542 5768\nf 5768 7542 7543\nf 5768 7543 5769\nf 5769 7543 7544\nf 5769 7544 5770\nf 5770 5800 5771\nf 5770 7544 7545\nf 5770 7545 5800\nf 5771 5800 5801\nf 5771 5801 5772\nf 5772 5801 5802\nf 5772 5802 5773\nf 5773 5802 5803\nf 5773 5803 5774\nf 5774 5803 5804\nf 5774 5804 5775\nf 5775 5804 5805\nf 5775 5805 5776\nf 5776 5805 5806\nf 5776 5806 5777\nf 5777 5806 5807\nf 5777 5807 5778\nf 5778 5807 5808\nf 5778 5808 5779\nf 5779 5808 5780\nf 5780 5808 7634\nf 5780 7547 7546\nf 5780 7634 7547\nf 5781 5782 7550\nf 5781 7550 7637\nf 5781 7637 5809\nf 5782 7477 7549\nf 5782 7549 7550\nf 5783 5811 5784\nf 5784 5811 5812\nf 5784 5812 5813\nf 5784 5813 5785\nf 5785 5813 5814\nf 5785 5814 5786\nf 5786 5814 5815\nf 5786 5815 5787\nf 5787 5815 5816\nf 5787 5816 5788\nf 5788 5816 5817\nf 5788 5817 5789\nf 5789 5817 5818\nf 5789 5818 5790\nf 5790 5818 5819\nf 5790 5819 5791\nf 5791 5819 5820\nf 5791 5820 5792\nf 5792 5820 5793\nf 5793 5820 7642\nf 5793 7551 5794\nf 5793 7642 7551\nf 5794 7551 7552\nf 5794 7552 5795\nf 5795 7552 7553\nf 5795 7553 5796\nf 5796 7553 7554\nf 5796 7554 5797\nf 5797 7554 7555\nf 5797 7555 5798\nf 5798 7555 7556\nf 5798 7556 5799\nf 5799 7556 7558\nf 5799 7558 7557\nf 5800 7545 7624\nf 5800 7624 7626\nf 5800 7626 5801\nf 5801 7626 7627\nf 5801 7627 5802\nf 5802 7627 7628\nf 5802 7628 5803\nf 5803 7628 7629\nf 5803 7629 5804\nf 5804 7629 7630\nf 5804 7630 5805\nf 5805 7630 7631\nf 5805 7631 5806\nf 5806 7631 7632\nf 5806 7632 5807\nf 5807 7632 7633\nf 5807 7633 5808\nf 5808 7633 7635\nf 5808 7635 7634\nf 5809 5822 5810\nf 5809 7637 7727\nf 5809 7727 5822\nf 5810 5822 5821\nf 5811 5823 5812\nf 5812 5823 5824\nf 5812 5824 5825\nf 5812 5825 5813\nf 5813 5825 5826\nf 5813 5826 5814\nf 5814 5826 5827\nf 5814 5827 5815\nf 5815 5827 5828\nf 5815 5828 5816\nf 5816 5828 5817\nf 5817 5828 7729\nf 5817 7639 5818\nf 5817 7729 7639\nf 5818 7639 7640\nf 5818 7640 5819\nf 5819 7640 7641\nf 5819 7641 5820\nf 5820 7641 7643\nf 5820 7643 7642\nf 5821 5822 5830\nf 5821 5830 5829\nf 5822 7727 5830\nf 5823 5831 5824\nf 5824 5831 5833\nf 5824 5833 5834\nf 5824 5834 5825\nf 5825 5834 5835\nf 5825 5835 5826\nf 5826 5835 5827\nf 5827 5835 7744\nf 5827 7728 5828\nf 5827 7744 7728\nf 5828 7728 7730\nf 5828 7730 7729\nf 5829 5830 5837\nf 5829 5837 5836\nf 5830 7727 7743\nf 5830 7743 5837\nf 5831 5832 5833\nf 5832 5838 5839\nf 5832 5839 5833\nf 5833 5839 5840\nf 5833 5840 5841\nf 5833 5841 5834\nf 5834 5841 5835\nf 5835 5841 7749\nf 5835 7745 7744\nf 5835 7749 7745\nf 5836 5837 5843\nf 5836 5843 5842\nf 5837 7743 7748\nf 5837 7748 5843\nf 5838 5844 5839\nf 5839 5844 5846\nf 5839 5846 5847\nf 5839 5847 5840\nf 5840 5847 5841\nf 5841 5847 7753\nf 5841 7750 7749\nf 5841 7753 7750\nf 5842 5843 5849\nf 5842 5849 5848\nf 5843 7748 7752\nf 5843 7752 5849\nf 5844 5845 5846\nf 5845 5850 5851\nf 5845 5851 5846\nf 5846 5851 5852\nf 5846 5852 5853\nf 5846 5853 5847\nf 5847 5853 7756\nf 5847 7756 7753\nf 5848 5849 5855\nf 5848 5855 5854\nf 5849 7752 7755\nf 5849 7755 5855\nf 5850 5856 5851\nf 5851 5856 5857\nf 5851 5857 5858\nf 5851 5858 5852\nf 5852 5858 5853\nf 5853 5858 7759\nf 5853 7757 7756\nf 5853 7759 7757\nf 5854 5855 5860\nf 5854 5860 5859\nf 5855 7755 7758\nf 5855 7758 5860\nf 5856 5861 5857\nf 5857 5861 5862\nf 5857 5862 5863\nf 5857 5863 5858\nf 5858 5863 7762\nf 5858 7762 7759\nf 5859 5860 5865\nf 5859 5865 5864\nf 5860 7758 7761\nf 5860 7761 5865\nf 5861 5866 5862\nf 5862 5866 5867\nf 5862 5867 5868\nf 5862 5868 5863\nf 5863 5868 7766\nf 5863 7766 7762\nf 5864 5865 5870\nf 5864 5870 5869\nf 5865 7761 7764\nf 5865 7764 5870\nf 5866 5872 5867\nf 5867 5872 5873\nf 5867 5873 5874\nf 5867 5874 5868\nf 5868 5874 7770\nf 5868 7770 7766\nf 5869 5870 5877\nf 5869 5877 5871\nf 5870 5875 5877\nf 5870 7764 7768\nf 5870 7768 5875\nf 5871 5877 5876\nf 5872 5878 5873\nf 5873 5878 5879\nf 5873 5879 5880\nf 5873 5880 5874\nf 5874 5880 7774\nf 5874 7774 7770\nf 5875 5881 5883\nf 5875 5883 5877\nf 5875 7768 7772\nf 5875 7772 5881\nf 5876 5877 5883\nf 5876 5883 5882\nf 5878 5884 5879\nf 5879 5884 5885\nf 5879 5885 5886\nf 5879 5886 5880\nf 5880 5886 7778\nf 5880 7778 7774\nf 5881 5887 5890\nf 5881 5890 5883\nf 5881 7772 7776\nf 5881 7776 5887\nf 5882 5883 5890\nf 5882 5890 5888\nf 5884 5891 5885\nf 5885 5891 5892\nf 5885 5892 5893\nf 5885 5893 5886\nf 5886 5893 7782\nf 5886 7782 7778\nf 5887 5895 5890\nf 5887 7776 7780\nf 5887 7780 5895\nf 5888 5890 5889\nf 5889 5890 5895\nf 5889 5895 5894\nf 5891 5896 5892\nf 5892 5896 5897\nf 5892 5897 5898\nf 5892 5898 5893\nf 5893 5898 7786\nf 5893 7786 7782\nf 5894 5895 5900\nf 5894 5900 5899\nf 5895 7780 7784\nf 5895 7784 5900\nf 5896 5901 5897\nf 5897 5901 5902\nf 5897 5902 5903\nf 5897 5903 5898\nf 5898 5903 7791\nf 5898 7791 7786\nf 5899 5900 5906\nf 5899 5906 5905\nf 5900 5904 5906\nf 5900 7784 7788\nf 5900 7788 5904\nf 5901 5907 5902\nf 5902 5907 5908\nf 5902 5908 5909\nf 5902 5909 5903\nf 5903 5909 7794\nf 5903 7794 7791\nf 5904 5910 5912\nf 5904 5912 5906\nf 5904 7788 7789\nf 5904 7789 7793\nf 5904 7793 5910\nf 5905 5906 5912\nf 5905 5912 5911\nf 5907 5913 5908\nf 5908 5913 5914\nf 5908 5914 5915\nf 5908 5915 5909\nf 5909 5915 7797\nf 5909 7797 7794\nf 5910 5916 5918\nf 5910 5918 5912\nf 5910 7793 7796\nf 5910 7796 5916\nf 5911 5912 5918\nf 5911 5918 5917\nf 5913 5919 5914\nf 5914 5919 5920\nf 5914 5920 5921\nf 5914 5921 5915\nf 5915 5921 7800\nf 5915 7800 7797\nf 5916 5922 5924\nf 5916 5924 5918\nf 5916 7796 7799\nf 5916 7799 5922\nf 5917 5918 5924\nf 5917 5924 5923\nf 5919 5925 5920\nf 5920 5925 5926\nf 5920 5926 5927\nf 5920 5927 5921\nf 5921 5927 7803\nf 5921 7803 7800\nf 5922 5928 5930\nf 5922 5930 5924\nf 5922 7799 7802\nf 5922 7802 5928\nf 5923 5924 5930\nf 5923 5930 5929\nf 5925 5931 5926\nf 5926 5931 5932\nf 5926 5932 5933\nf 5926 5933 5927\nf 5927 5933 7806\nf 5927 7806 7803\nf 5928 5934 5936\nf 5928 5936 5930\nf 5928 7802 7805\nf 5928 7805 5934\nf 5929 5930 5936\nf 5929 5936 5935\nf 5931 5937 5932\nf 5932 5937 5938\nf 5932 5938 5939\nf 5932 5939 5933\nf 5933 5939 7809\nf 5933 7809 7806\nf 5934 5940 5943\nf 5934 5943 5936\nf 5934 7805 7808\nf 5934 7808 5940\nf 5935 5936 5943\nf 5935 5943 5941\nf 5937 5944 5938\nf 5938 5944 5945\nf 5938 5945 5946\nf 5938 5946 5939\nf 5939 5946 7813\nf 5939 7813 7809\nf 5940 5948 5943\nf 5940 7808 7811\nf 5940 7811 5948\nf 5941 5943 5942\nf 5942 5943 5948\nf 5942 5948 5947\nf 5944 5949 5945\nf 5945 5949 5950\nf 5945 5950 5951\nf 5945 5951 5946\nf 5946 5951 7817\nf 5946 7817 7813\nf 5947 5948 5953\nf 5947 5953 5952\nf 5948 7811 7815\nf 5948 7815 5953\nf 5949 5954 5950\nf 5950 5954 5955\nf 5950 5955 5956\nf 5950 5956 5951\nf 5951 5956 7822\nf 5951 7822 7817\nf 5952 5953 5959\nf 5952 5959 5958\nf 5953 5957 5959\nf 5953 7815 7819\nf 5953 7819 5957\nf 5954 5960 5955\nf 5955 5960 5961\nf 5955 5961 5962\nf 5955 5962 5956\nf 5956 5962 7825\nf 5956 7825 7822\nf 5957 5963 5965\nf 5957 5965 5959\nf 5957 7819 7820\nf 5957 7820 7824\nf 5957 7824 5963\nf 5958 5959 5965\nf 5958 5965 5964\nf 5960 5966 5961\nf 5961 5966 5968\nf 5961 5968 5962\nf 5962 5968 7829\nf 5962 7826 7825\nf 5962 7829 7826\nf 5963 5969 5971\nf 5963 5971 5965\nf 5963 7824 7828\nf 5963 7828 5969\nf 5964 5965 5971\nf 5964 5971 5970\nf 5966 5967 5968\nf 5967 5972 5973\nf 5967 5973 5968\nf 5968 5973 5974\nf 5968 5974 7833\nf 5968 7833 7829\nf 5969 5975 5977\nf 5969 5977 5971\nf 5969 7828 7832\nf 5969 7832 5975\nf 5970 5971 5977\nf 5970 5977 5976\nf 5972 5978 5973\nf 5973 5978 5979\nf 5973 5979 5980\nf 5973 5980 5974\nf 5974 5980 7836\nf 5974 7836 7833\nf 5975 5981 5983\nf 5975 5983 5977\nf 5975 7832 7835\nf 5975 7835 5981\nf 5976 5977 5983\nf 5976 5983 5982\nf 5978 5984 5979\nf 5979 5984 5985\nf 5979 5985 5986\nf 5979 5986 5980\nf 5980 5986 7839\nf 5980 7839 7836\nf 5981 5987 5989\nf 5981 5989 5983\nf 5981 7835 7838\nf 5981 7838 5987\nf 5982 5983 5989\nf 5982 5989 5988\nf 5984 5990 5985\nf 5985 5990 5991\nf 5985 5991 5992\nf 5985 5992 5986\nf 5986 5992 7842\nf 5986 7842 7839\nf 5987 5993 5996\nf 5987 5996 5989\nf 5987 7838 7841\nf 5987 7841 5993\nf 5988 5989 5996\nf 5988 5996 5994\nf 5990 5997 5991\nf 5991 5997 5998\nf 5991 5998 5999\nf 5991 5999 5992\nf 5992 5999 7845\nf 5992 7845 7842\nf 5993 6001 5996\nf 5993 7841 7844\nf 5993 7844 6001\nf 5994 5996 5995\nf 5995 5996 6001\nf 5995 6001 6000\nf 5997 6002 5998\nf 5998 6002 6003\nf 5998 6003 6004\nf 5998 6004 5999\nf 5999 6004 7848\nf 5999 7848 7845\nf 6000 6001 6006\nf 6000 6006 6005\nf 6001 7844 7847\nf 6001 7847 6006\nf 6002 6007 6003\nf 6003 6007 6008\nf 6003 6008 6009\nf 6003 6009 6004\nf 6004 6009 7851\nf 6004 7851 7848\nf 6005 6006 6011\nf 6005 6011 6010\nf 6006 7847 7850\nf 6006 7850 6011\nf 6007 6012 6008\nf 6008 6012 6013\nf 6008 6013 6014\nf 6008 6014 6009\nf 6009 6014 7854\nf 6009 7854 7851\nf 6010 6011 6016\nf 6010 6016 6015\nf 6011 7850 7853\nf 6011 7853 6016\nf 6012 6017 6013\nf 6013 6017 6018\nf 6013 6018 6019\nf 6013 6019 6014\nf 6014 6019 7857\nf 6014 7857 7854\nf 6015 6016 6021\nf 6015 6021 6020\nf 6016 7853 7856\nf 6016 7856 6021\nf 6017 6022 6018\nf 6018 6022 6023\nf 6018 6023 6024\nf 6018 6024 6019\nf 6019 6024 7860\nf 6019 7860 7857\nf 6020 6021 6026\nf 6020 6026 6025\nf 6021 7856 7859\nf 6021 7859 6026\nf 6022 6027 6023\nf 6023 6027 6028\nf 6023 6028 6029\nf 6023 6029 6024\nf 6024 6029 7863\nf 6024 7863 7860\nf 6025 6026 6031\nf 6025 6031 6030\nf 6026 7859 7862\nf 6026 7862 6031\nf 6027 6032 6028\nf 6028 6032 6033\nf 6028 6033 6034\nf 6028 6034 6029\nf 6029 6034 7865\nf 6029 7865 7863\nf 6030 6031 6036\nf 6030 6036 6035\nf 6031 7862 7864\nf 6031 7864 6036\nf 6032 6037 6033\nf 6033 6037 6038\nf 6033 6038 6039\nf 6033 6039 6034\nf 6034 6039 7868\nf 6034 7868 7865\nf 6035 6036 6041\nf 6035 6041 6040\nf 6036 7864 7866\nf 6036 7866 6041\nf 6037 6042 6038\nf 6038 6042 6043\nf 6038 6043 6044\nf 6038 6044 6039\nf 6039 6044 7871\nf 6039 7871 7868\nf 6040 6041 6046\nf 6040 6046 6045\nf 6041 7866 7869\nf 6041 7869 6046\nf 6042 6047 6043\nf 6043 6047 6048\nf 6043 6048 6049\nf 6043 6049 6044\nf 6044 6049 7874\nf 6044 7874 7871\nf 6045 6046 6051\nf 6045 6051 6050\nf 6046 7869 7872\nf 6046 7872 6051\nf 6047 6052 6048\nf 6048 6052 6053\nf 6048 6053 6054\nf 6048 6054 6049\nf 6049 6054 7877\nf 6049 7877 7874\nf 6050 6051 6056\nf 6050 6056 6055\nf 6051 7872 7875\nf 6051 7875 6056\nf 6052 6057 6053\nf 6053 6057 6058\nf 6053 6058 6059\nf 6053 6059 6054\nf 6054 6059 7881\nf 6054 7881 7877\nf 6055 6056 6062\nf 6055 6062 6061\nf 6056 6060 6062\nf 6056 7875 7878\nf 6056 7878 6060\nf 6057 6063 6058\nf 6058 6063 6064\nf 6058 6064 6065\nf 6058 6065 6059\nf 6059 6065 7883\nf 6059 7883 7881\nf 6060 6066 6068\nf 6060 6068 6062\nf 6060 7878 7879\nf 6060 7879 7882\nf 6060 7882 6066\nf 6061 6062 6068\nf 6061 6068 6067\nf 6063 6069 6064\nf 6064 6069 6070\nf 6064 6070 6071\nf 6064 6071 6065\nf 6065 6071 7885\nf 6065 7885 7883\nf 6066 6072 6075\nf 6066 6075 6068\nf 6066 7882 7884\nf 6066 7884 6072\nf 6067 6068 6075\nf 6067 6075 6073\nf 6069 6076 6070\nf 6070 6076 6077\nf 6070 6077 6078\nf 6070 6078 6071\nf 6071 6078 7887\nf 6071 7887 7885\nf 6072 6080 6075\nf 6072 7884 7886\nf 6072 7886 6080\nf 6073 6075 6074\nf 6074 6075 6080\nf 6074 6080 6079\nf 6076 6081 6077\nf 6077 6081 6082\nf 6077 6082 6083\nf 6077 6083 6078\nf 6078 6083 7889\nf 6078 7889 7887\nf 6079 6080 6085\nf 6079 6085 6084\nf 6080 7886 7888\nf 6080 7888 6085\nf 6081 6086 6082\nf 6082 6086 6087\nf 6082 6087 6088\nf 6082 6088 6083\nf 6083 6088 7891\nf 6083 7891 7889\nf 6084 6085 6090\nf 6084 6090 6089\nf 6085 7888 7890\nf 6085 7890 6090\nf 6086 6091 6087\nf 6087 6091 6092\nf 6087 6092 6093\nf 6087 6093 6088\nf 6088 6093 7893\nf 6088 7893 7891\nf 6089 6090 6095\nf 6089 6095 6094\nf 6090 7890 7892\nf 6090 7892 6095\nf 6091 6096 6092\nf 6092 6096 6097\nf 6092 6097 6098\nf 6092 6098 6093\nf 6093 6098 7895\nf 6093 7895 7893\nf 6094 6095 6100\nf 6094 6100 6099\nf 6095 7892 7894\nf 6095 7894 6100\nf 6096 6101 6097\nf 6097 6101 6102\nf 6097 6102 6103\nf 6097 6103 6098\nf 6098 6103 7897\nf 6098 7897 7895\nf 6099 6100 6105\nf 6099 6105 6104\nf 6100 7894 7896\nf 6100 7896 6105\nf 6101 6106 6102\nf 6102 6106 6107\nf 6102 6107 6108\nf 6102 6108 6103\nf 6103 6108 7899\nf 6103 7899 7897\nf 6104 6105 6111\nf 6104 6111 6109\nf 6105 7896 7898\nf 6105 7898 6111\nf 6106 6112 6107\nf 6107 6112 6113\nf 6107 6113 6114\nf 6107 6114 6108\nf 6108 6114 7901\nf 6108 7901 7899\nf 6109 6111 6110\nf 6110 6111 7900\nf 6110 7900 6115\nf 6111 7898 7900\nf 6112 6116 6113\nf 6113 6116 6117\nf 6113 6117 6118\nf 6113 6118 6114\nf 6114 6118 7903\nf 6114 7903 7901\nf 6115 7900 7902\nf 6115 7902 6119\nf 6116 6120 6117\nf 6117 6120 6121\nf 6117 6121 6122\nf 6117 6122 6118\nf 6118 6122 7905\nf 6118 7905 7903\nf 6119 7902 7904\nf 6119 7904 6123\nf 6120 6124 6121\nf 6121 6124 6126\nf 6121 6126 6127\nf 6121 6127 6122\nf 6122 6127 7909\nf 6122 7909 7905\nf 6123 7904 7906\nf 6123 7906 6128\nf 6124 6125 6126\nf 6125 6130 6126\nf 6126 6130 6131\nf 6126 6131 6127\nf 6127 6131 7911\nf 6127 7911 7909\nf 6128 6129 6133\nf 6128 6133 6132\nf 6128 7906 6129\nf 6129 7906 7907\nf 6129 7907 7910\nf 6129 7910 6133\nf 6130 6134 7914\nf 6130 7914 6131\nf 6131 7912 7911\nf 6131 7914 7912\nf 6132 6133 6136\nf 6132 6136 6135\nf 6133 7910 7913\nf 6133 7913 6136\nf 6134 6137 7917\nf 6134 7917 7914\nf 6135 6136 6140\nf 6135 6140 6138\nf 6136 7913 7916\nf 6136 7916 6140\nf 6137 6141 7920\nf 6137 7920 7917\nf 6138 6140 6139\nf 6139 6140 7919\nf 6139 7919 6142\nf 6140 7916 7919\nf 6141 6143 7923\nf 6141 7923 7920\nf 6142 7919 7922\nf 6142 7922 6144\nf 6143 6145 7925\nf 6143 7925 7923\nf 6144 7922 7924\nf 6144 7924 6146\nf 6145 6147 7927\nf 6145 7927 7925\nf 6146 7924 7926\nf 6146 7926 6149\nf 6147 6148 7929\nf 6147 7929 7927\nf 6148 6150 6151\nf 6148 6151 7929\nf 6149 7926 7928\nf 6149 7928 6152\nf 6150 6153 6151\nf 6151 6153 6154\nf 6151 6154 7931\nf 6151 7931 7929\nf 6152 7928 7930\nf 6152 7930 6155\nf 6153 6156 6154\nf 6154 6156 6157\nf 6154 6157 7934\nf 6154 7934 7931\nf 6155 7930 7932\nf 6155 7932 6158\nf 6156 6160 6157\nf 6157 6160 6161\nf 6157 6161 7936\nf 6157 7936 7934\nf 6158 6159 6164\nf 6158 6164 6162\nf 6158 7932 6159\nf 6159 7932 7933\nf 6159 7933 7935\nf 6159 7935 6164\nf 6160 6165 6161\nf 6161 6165 6166\nf 6161 6166 7938\nf 6161 7938 7936\nf 6162 6164 6163\nf 6163 6164 7937\nf 6163 7937 6167\nf 6164 7935 7937\nf 6165 6168 6166\nf 6166 6168 6169\nf 6166 6169 7940\nf 6166 7940 7938\nf 6167 7937 7939\nf 6167 7939 6170\nf 6168 6171 6169\nf 6169 6171 6172\nf 6169 6172 7942\nf 6169 7942 7940\nf 6170 7939 7941\nf 6170 7941 6173\nf 6171 6174 7945\nf 6171 7945 6172\nf 6172 7943 7942\nf 6172 7945 7943\nf 6173 7941 7944\nf 6173 7944 6175\nf 6174 6176 7948\nf 6174 7948 7945\nf 6175 7944 7947\nf 6175 7947 6178\nf 6176 6177 7951\nf 6176 7951 7948\nf 6177 6179 6180\nf 6177 6180 7951\nf 6178 7947 7950\nf 6178 7950 6181\nf 6179 6182 6180\nf 6180 6182 6183\nf 6180 6183 7954\nf 6180 7954 7951\nf 6181 7950 7953\nf 6181 7953 6184\nf 6182 6185 6183\nf 6183 6185 6186\nf 6183 6186 7957\nf 6183 7957 7954\nf 6184 7953 7956\nf 6184 7956 6187\nf 6185 6188 6186\nf 6186 6188 6189\nf 6186 6189 7959\nf 6186 7959 7957\nf 6187 7956 7958\nf 6187 7958 6190\nf 6188 6191 6189\nf 6189 6191 6192\nf 6189 6192 7961\nf 6189 7961 7959\nf 6190 7958 7960\nf 6190 7960 6193\nf 6191 6195 6192\nf 6192 6195 6196\nf 6192 6196 7963\nf 6192 7963 7961\nf 6193 6198 6194\nf 6193 7960 7962\nf 6193 7962 7964\nf 6193 7964 6198\nf 6194 6198 6197\nf 6195 6199 6196\nf 6196 6199 6201\nf 6196 6201 7965\nf 6196 7965 7963\nf 6197 6198 6203\nf 6197 6203 6202\nf 6198 7964 6203\nf 6199 6200 6201\nf 6200 6204 6205\nf 6200 6205 6201\nf 6201 6205 6206\nf 6201 6206 7967\nf 6201 7967 7965\nf 6202 6203 6208\nf 6202 6208 6207\nf 6203 7964 7966\nf 6203 7966 6208\nf 6204 6209 6205\nf 6205 6209 6210\nf 6205 6210 6211\nf 6205 6211 6206\nf 6206 6211 7969\nf 6206 7969 7967\nf 6207 6208 6213\nf 6207 6213 6212\nf 6208 7966 7968\nf 6208 7968 6213\nf 6209 6214 6210\nf 6210 6214 6215\nf 6210 6215 6216\nf 6210 6216 6211\nf 6211 6216 7971\nf 6211 7971 7969\nf 6212 6213 6218\nf 6212 6218 6217\nf 6213 7968 7970\nf 6213 7970 6218\nf 6214 6219 6215\nf 6215 6219 6220\nf 6215 6220 6221\nf 6215 6221 6216\nf 6216 6221 7973\nf 6216 7973 7971\nf 6217 6218 6223\nf 6217 6223 6222\nf 6218 7970 7972\nf 6218 7972 6223\nf 6219 6224 6220\nf 6220 6224 6225\nf 6220 6225 6226\nf 6220 6226 6221\nf 6221 6226 7975\nf 6221 7975 7973\nf 6222 6223 6228\nf 6222 6228 6227\nf 6223 7972 7974\nf 6223 7974 6228\nf 6224 6229 6225\nf 6225 6229 6230\nf 6225 6230 6226\nf 6226 6230 7978\nf 6226 7976 7975\nf 6226 7978 7976\nf 6227 6228 6232\nf 6227 6232 6231\nf 6228 7974 7977\nf 6228 7977 6232\nf 6229 6233 6230\nf 6230 6233 6234\nf 6230 6234 7981\nf 6230 7981 7978\nf 6231 6232 6236\nf 6231 6236 6235\nf 6232 7977 7980\nf 6232 7980 6236\nf 6233 6237 6234\nf 6234 6237 6238\nf 6234 6238 7984\nf 6234 7984 7981\nf 6235 6236 6240\nf 6235 6240 6239\nf 6236 7980 7983\nf 6236 7983 6240\nf 6237 6241 6238\nf 6238 6241 6242\nf 6238 6242 7986\nf 6238 7986 7984\nf 6239 6240 6244\nf 6239 6244 6243\nf 6240 7983 7985\nf 6240 7985 6244\nf 6241 6245 6242\nf 6242 6245 6246\nf 6242 6246 7988\nf 6242 7988 7986\nf 6243 6244 6248\nf 6243 6248 6247\nf 6244 7985 7987\nf 6244 7987 6248\nf 6245 6249 7991\nf 6245 7991 6246\nf 6246 7989 7988\nf 6246 7991 7989\nf 6247 6248 6252\nf 6247 6252 6251\nf 6248 7987 7990\nf 6248 7990 6252\nf 6249 6250 7994\nf 6249 7994 7991\nf 6250 6253 6254\nf 6250 6254 7994\nf 6251 6252 6256\nf 6251 6256 6255\nf 6252 7990 7993\nf 6252 7993 6256\nf 6253 6257 6254\nf 6254 6257 6258\nf 6254 6258 7996\nf 6254 7996 7994\nf 6255 6256 6260\nf 6255 6260 6259\nf 6256 7993 7995\nf 6256 7995 6260\nf 6257 6261 7999\nf 6257 7999 6258\nf 6258 7997 7996\nf 6258 7999 7997\nf 6259 6260 6263\nf 6259 6263 6262\nf 6260 7995 7998\nf 6260 7998 6263\nf 6261 6264 8002\nf 6261 8002 7999\nf 6262 6263 6267\nf 6262 6267 6266\nf 6263 7998 8001\nf 6263 8001 6267\nf 6264 6265 8004\nf 6264 8004 8002\nf 6265 6268 6269\nf 6265 6269 8004\nf 6266 6267 6271\nf 6266 6271 6270\nf 6267 8001 8003\nf 6267 8003 6271\nf 6268 6273 6269\nf 6269 6273 6274\nf 6269 6274 8007\nf 6269 8007 8004\nf 6270 6271 6277\nf 6270 6277 6272\nf 6271 6275 6277\nf 6271 8003 8005\nf 6271 8005 6275\nf 6272 6277 6276\nf 6273 6278 8010\nf 6273 8010 6274\nf 6274 8008 8007\nf 6274 8010 8008\nf 6275 6280 6282\nf 6275 6282 6277\nf 6275 8005 8009\nf 6275 8009 6280\nf 6276 6277 6282\nf 6276 6282 6281\nf 6278 6279 8013\nf 6278 8013 8010\nf 6279 6283 6284\nf 6279 6284 8013\nf 6280 6285 6287\nf 6280 6287 6282\nf 6280 8009 8012\nf 6280 8012 6285\nf 6281 6282 6287\nf 6281 6287 6286\nf 6283 6288 6284\nf 6284 6288 6289\nf 6284 6289 8016\nf 6284 8016 8013\nf 6285 6291 6287\nf 6285 8012 8014\nf 6285 8014 8015\nf 6285 8015 6291\nf 6286 6287 6291\nf 6286 6291 6290\nf 6288 6292 6289\nf 6289 6292 6293\nf 6289 6293 8019\nf 6289 8019 8016\nf 6290 6291 6295\nf 6290 6295 6294\nf 6291 8015 8017\nf 6291 8017 6295\nf 6292 6297 6293\nf 6293 6297 6298\nf 6293 6298 8022\nf 6293 8022 8019\nf 6294 6295 6301\nf 6294 6301 6296\nf 6295 6299 6301\nf 6295 8017 8020\nf 6295 8020 6299\nf 6296 6301 6300\nf 6297 6305 6298\nf 6298 6305 6307\nf 6298 6307 8027\nf 6298 8027 8022\nf 6299 8020 8023\nf 6299 8023 8025\nf 6299 8025 6301\nf 6300 6301 6302\nf 6301 8025 8026\nf 6301 8026 6302\nf 6302 6308 6309\nf 6302 6309 6303\nf 6302 8026 6308\nf 6303 6309 6310\nf 6303 6310 6304\nf 6304 6310 6311\nf 6304 6311 6306\nf 6305 6306 6307\nf 6306 6311 6307\nf 6307 6311 6312\nf 6307 6312 8033\nf 6307 8033 8027\nf 6308 8026 8028\nf 6308 8028 8030\nf 6308 8030 6309\nf 6309 6313 6310\nf 6309 8030 8031\nf 6309 8031 6313\nf 6310 6313 6311\nf 6311 6313 8039\nf 6311 8032 6312\nf 6311 8039 8032\nf 6312 8032 8034\nf 6312 8034 8033\nf 6313 8031 8037\nf 6313 8037 8040\nf 6313 8040 8039\nf 6314 6315 8046\nf 6314 6333 6331\nf 6314 8045 6333\nf 6314 8046 8045\nf 6315 6316 8047\nf 6315 8047 8046\nf 6316 6317 8048\nf 6316 8048 8047\nf 6317 6318 8049\nf 6317 8049 8048\nf 6318 6334 8051\nf 6318 8050 8049\nf 6318 8051 8050\nf 6319 6320 8053\nf 6319 6341 6339\nf 6319 8052 6341\nf 6319 8053 8052\nf 6320 6321 8055\nf 6320 8055 8053\nf 6321 6322 8054\nf 6321 6323 6322\nf 6321 8054 8055\nf 6322 6323 6324\nf 6322 6324 8043\nf 6322 8042 8054\nf 6322 8043 8042\nf 6323 6325 6324\nf 6324 6325 6326\nf 6324 6326 8044\nf 6324 8044 8043\nf 6325 6327 8057\nf 6325 8057 6326\nf 6326 8056 8044\nf 6326 8057 8056\nf 6327 6328 8057\nf 6328 6342 8060\nf 6328 8059 8057\nf 6328 8060 8059\nf 6329 6330 8061\nf 6329 8061 8074\nf 6329 8074 6345\nf 6330 6332 8063\nf 6330 8063 8061\nf 6331 6333 6332\nf 6332 6333 8062\nf 6332 8062 8063\nf 6333 8045 8062\nf 6334 6335 6336\nf 6334 6336 8051\nf 6335 6337 8066\nf 6335 8066 6336\nf 6336 8065 8051\nf 6336 8066 8065\nf 6337 6338 8066\nf 6338 6347 8067\nf 6338 8067 8066\nf 6339 6341 6340\nf 6340 6341 8068\nf 6340 8068 6349\nf 6341 8052 8068\nf 6342 6343 6344\nf 6342 6344 8060\nf 6343 6350 6352\nf 6343 6352 8070\nf 6343 8070 6344\nf 6344 8069 8060\nf 6344 8070 8069\nf 6345 8074 6346\nf 6346 6357 6355\nf 6346 8073 6357\nf 6346 8074 8075\nf 6346 8075 8073\nf 6347 6348 8078\nf 6347 8077 8067\nf 6347 8078 8077\nf 6348 6358 8078\nf 6349 8068 8080\nf 6349 8080 6359\nf 6350 6351 6352\nf 6351 6353 6352\nf 6352 6353 6354\nf 6352 6354 8072\nf 6352 8072 8070\nf 6353 6360 6362\nf 6353 6362 8082\nf 6353 8082 6354\nf 6354 8081 8072\nf 6354 8082 8081\nf 6355 6357 6356\nf 6356 6357 8083\nf 6356 8083 8084\nf 6356 8084 6363\nf 6357 8073 8083\nf 6358 6366 8090\nf 6358 8085 8078\nf 6358 8090 8085\nf 6359 8080 8086\nf 6359 8086 6367\nf 6360 6361 6362\nf 6361 6368 6370\nf 6361 6370 8088\nf 6361 8088 6362\nf 6362 8087 8082\nf 6362 8088 8087\nf 6363 6365 6364\nf 6363 8084 6365\nf 6364 6365 8089\nf 6364 8089 6371\nf 6365 8084 8089\nf 6366 6372 8094\nf 6366 8094 8090\nf 6367 8086 8091\nf 6367 8091 6373\nf 6368 6369 6370\nf 6369 6375 6370\nf 6370 6375 8092\nf 6370 8092 8088\nf 6371 8089 8093\nf 6371 8093 6376\nf 6372 6377 8100\nf 6372 8100 8094\nf 6373 6379 6374\nf 6373 8091 8095\nf 6373 8095 8101\nf 6373 8101 6379\nf 6374 6379 6378\nf 6375 6380 8096\nf 6375 8096 8092\nf 6376 8093 8099\nf 6376 8099 6382\nf 6377 6383 8104\nf 6377 8104 8100\nf 6378 6379 6385\nf 6378 6385 6384\nf 6379 8101 6385\nf 6380 6381 8097\nf 6380 6386 6381\nf 6380 8097 8096\nf 6381 6386 6387\nf 6381 6387 8106\nf 6381 8102 8097\nf 6381 8106 8102\nf 6382 8099 8103\nf 6382 8103 6388\nf 6383 6389 8109\nf 6383 8109 8104\nf 6384 6385 6391\nf 6384 6391 6390\nf 6385 8101 8105\nf 6385 8105 6391\nf 6386 6392 6387\nf 6387 6392 6394\nf 6387 6394 8113\nf 6387 8113 8106\nf 6388 8103 8107\nf 6388 8107 6395\nf 6389 6396 8119\nf 6389 8119 8109\nf 6390 6391 8112\nf 6390 8112 8121\nf 6390 8121 6397\nf 6391 8105 8111\nf 6391 8111 8112\nf 6392 6393 6394\nf 6393 6398 6399\nf 6393 6399 8114\nf 6393 8114 6394\nf 6394 8114 8113\nf 6395 8107 8116\nf 6395 8116 6400\nf 6396 6402 8125\nf 6396 8125 8119\nf 6397 8121 6403\nf 6398 6404 6399\nf 6399 6404 6405\nf 6399 6405 8128\nf 6399 8123 8114\nf 6399 8128 8123\nf 6400 6401 6407\nf 6400 6407 6406\nf 6400 8116 6401\nf 6401 8116 8117\nf 6401 8117 8124\nf 6401 8124 6407\nf 6402 6408 8130\nf 6402 8130 8125\nf 6403 8121 8127\nf 6403 8127 6409\nf 6404 6410 6405\nf 6405 6410 6411\nf 6405 6411 8134\nf 6405 8134 8128\nf 6406 6407 6413\nf 6406 6413 6412\nf 6407 8124 8129\nf 6407 8129 6413\nf 6408 6414 8130\nf 6409 8127 8133\nf 6409 8133 6416\nf 6410 6417 6411\nf 6411 6417 6418\nf 6411 6418 8138\nf 6411 8138 8134\nf 6412 6413 6420\nf 6412 6420 6419\nf 6413 8129 8135\nf 6413 8135 6420\nf 6414 6415 8131\nf 6414 6421 6415\nf 6414 8131 8130\nf 6415 6421 6422\nf 6415 6422 8141\nf 6415 8136 8131\nf 6415 8141 8136\nf 6416 8133 8137\nf 6416 8137 6423\nf 6417 6424 6418\nf 6418 6424 6425\nf 6418 6425 8143\nf 6418 8143 8138\nf 6419 6420 6427\nf 6419 6427 6426\nf 6420 8135 8140\nf 6420 8140 6427\nf 6421 6428 6422\nf 6422 6428 6429\nf 6422 6429 8147\nf 6422 8147 8141\nf 6423 8137 8142\nf 6423 8142 6430\nf 6424 6431 6425\nf 6425 6431 6432\nf 6425 6432 6433\nf 6425 6433 8144\nf 6425 8144 8143\nf 6426 6427 6435\nf 6426 6435 6434\nf 6427 8140 8146\nf 6427 8146 6435\nf 6428 6436 8152\nf 6428 8152 6429\nf 6429 8148 8147\nf 6429 8152 8148\nf 6430 8142 8149\nf 6430 8149 6437\nf 6431 6438 6432\nf 6432 6438 6440\nf 6432 6440 6441\nf 6432 6441 6433\nf 6433 6441 8154\nf 6433 8150 8144\nf 6433 8154 8150\nf 6434 6435 6443\nf 6434 6443 6442\nf 6435 8146 8151\nf 6435 8151 6443\nf 6436 6444 8156\nf 6436 8156 8152\nf 6437 8149 8153\nf 6437 8153 6445\nf 6438 6439 6440\nf 6439 6446 6440\nf 6440 6446 6447\nf 6440 6447 6441\nf 6441 6447 8158\nf 6441 8158 8154\nf 6442 6443 6449\nf 6442 6449 6448\nf 6443 8151 8155\nf 6443 8155 6449\nf 6444 6450 8160\nf 6444 8160 8156\nf 6445 8153 8157\nf 6445 8157 6451\nf 6446 6452 6447\nf 6447 6452 6453\nf 6447 6453 8162\nf 6447 8162 8158\nf 6448 6449 6455\nf 6448 6455 6454\nf 6449 8155 8159\nf 6449 8159 6455\nf 6450 6456 8164\nf 6450 8164 8160\nf 6451 8157 8161\nf 6451 8161 6457\nf 6452 6458 6453\nf 6453 6458 6460\nf 6453 6460 8166\nf 6453 8166 8162\nf 6454 6455 6462\nf 6454 6462 6461\nf 6455 8159 8163\nf 6455 8163 6462\nf 6456 6463 8168\nf 6456 8168 8164\nf 6457 8161 8165\nf 6457 8165 6464\nf 6458 6459 6460\nf 6459 6465 6466\nf 6459 6466 6460\nf 6460 6466 6467\nf 6460 6467 8170\nf 6460 8170 8166\nf 6461 6462 6469\nf 6461 6469 6468\nf 6462 8163 8167\nf 6462 8167 6469\nf 6463 6470 8173\nf 6463 8173 8168\nf 6464 8165 8169\nf 6464 8169 6471\nf 6465 6472 6466\nf 6466 6472 6473\nf 6466 6473 6474\nf 6466 6474 6467\nf 6467 6474 8175\nf 6467 8175 8170\nf 6468 6469 6476\nf 6468 6476 6475\nf 6469 8167 8171\nf 6469 8171 6476\nf 6470 6477 8178\nf 6470 8178 8173\nf 6471 8169 8174\nf 6471 8174 6478\nf 6472 6479 6473\nf 6473 6479 6480\nf 6473 6480 6481\nf 6473 6481 6474\nf 6474 6481 8180\nf 6474 8180 8175\nf 6475 6476 6483\nf 6475 6483 6482\nf 6476 8171 8176\nf 6476 8176 6483\nf 6477 6484 8183\nf 6477 8183 8178\nf 6478 8174 8179\nf 6478 8179 6485\nf 6479 6486 6480\nf 6480 6486 6487\nf 6480 6487 6488\nf 6480 6488 6481\nf 6481 6488 8185\nf 6481 8185 8180\nf 6482 6483 6490\nf 6482 6490 6489\nf 6483 8176 8181\nf 6483 8181 6490\nf 6484 6491 8194\nf 6484 8194 8183\nf 6485 8179 8184\nf 6485 8184 6492\nf 6486 6493 6487\nf 6487 6493 6495\nf 6487 6495 6496\nf 6487 6496 6488\nf 6488 6496 6497\nf 6488 6497 8186\nf 6488 8186 8185\nf 6489 6490 6511\nf 6489 6511 6510\nf 6490 6509 6511\nf 6490 8181 8191\nf 6490 8191 6509\nf 6491 6512 8289\nf 6491 8289 8194\nf 6492 8184 8195\nf 6492 8195 6513\nf 6493 6494 6495\nf 6494 6514 6495\nf 6495 6514 6516\nf 6495 6516 6496\nf 6496 6516 6517\nf 6496 6517 6497\nf 6497 6517 6518\nf 6497 6518 8197\nf 6497 8196 8186\nf 6497 8197 8196\nf 6498 6499 8264\nf 6498 6625 6623\nf 6498 8262 6625\nf 6498 8264 8262\nf 6499 6500 8266\nf 6499 8266 8264\nf 6500 6626 8270\nf 6500 8268 8266\nf 6500 8270 8268\nf 6501 6502 8272\nf 6501 6629 6627\nf 6501 8270 6629\nf 6501 8272 8270\nf 6502 6503 8274\nf 6502 8274 8272\nf 6503 6504 8276\nf 6503 8276 8274\nf 6504 6505 8278\nf 6504 8278 8276\nf 6505 6506 8281\nf 6505 8281 8278\nf 6506 6507 8280\nf 6506 6630 6507\nf 6506 8280 8281\nf 6507 6508 8189\nf 6507 6630 6632\nf 6507 6632 6508\nf 6507 8188 8280\nf 6507 8189 8188\nf 6508 6632 6634\nf 6508 6634 8284\nf 6508 8283 8189\nf 6508 8284 8283\nf 6509 6636 6637\nf 6509 6637 6639\nf 6509 6639 6511\nf 6509 8191 8192\nf 6509 8192 8286\nf 6509 8286 6636\nf 6510 6511 6639\nf 6510 6639 6638\nf 6512 6640 8295\nf 6512 8295 8289\nf 6513 8195 8290\nf 6513 8290 6641\nf 6514 6515 6516\nf 6515 6642 6516\nf 6516 6642 6644\nf 6516 6644 6517\nf 6517 6644 6646\nf 6517 6646 6518\nf 6518 6519 8199\nf 6518 6646 6648\nf 6518 6648 6519\nf 6518 8199 8197\nf 6519 6520 8201\nf 6519 6648 6651\nf 6519 6651 6520\nf 6519 8201 8199\nf 6520 6522 8203\nf 6520 6651 6522\nf 6520 8203 8201\nf 6521 6522 6651\nf 6521 6523 6522\nf 6521 6651 6649\nf 6522 6523 6524\nf 6522 6524 8205\nf 6522 8205 8203\nf 6523 6525 6524\nf 6524 6525 6526\nf 6524 6526 8207\nf 6524 8207 8205\nf 6525 6527 6526\nf 6526 6527 6528\nf 6526 6528 8208\nf 6526 8208 8207\nf 6527 6529 6528\nf 6528 6529 6530\nf 6528 6530 8209\nf 6528 8209 8208\nf 6529 6531 6530\nf 6530 6531 6532\nf 6530 6532 8210\nf 6530 8210 8209\nf 6531 6533 6532\nf 6532 6533 6534\nf 6532 6534 8211\nf 6532 8211 8210\nf 6533 6535 8293\nf 6533 8293 6534\nf 6534 8291 8211\nf 6534 8293 8291\nf 6535 6536 8293\nf 6536 6537 8292\nf 6536 6538 6537\nf 6536 8292 8293\nf 6537 6538 6539\nf 6537 6539 8213\nf 6537 8212 8292\nf 6537 8213 8212\nf 6538 6540 6539\nf 6539 6540 6541\nf 6539 6541 8214\nf 6539 8214 8213\nf 6540 6542 6541\nf 6541 6542 6543\nf 6541 6543 8215\nf 6541 8215 8214\nf 6542 6544 6543\nf 6543 6544 6545\nf 6543 6545 8216\nf 6543 8216 8215\nf 6544 6546 6545\nf 6545 6546 6547\nf 6545 6547 8217\nf 6545 8217 8216\nf 6546 6548 6547\nf 6547 6548 6549\nf 6547 6549 8218\nf 6547 8218 8217\nf 6548 6550 6549\nf 6549 6550 6551\nf 6549 6551 8219\nf 6549 8219 8218\nf 6550 6552 6551\nf 6551 6552 6553\nf 6551 6553 8220\nf 6551 8220 8219\nf 6552 6554 6553\nf 6553 6554 6555\nf 6553 6555 8221\nf 6553 8221 8220\nf 6554 6556 6555\nf 6555 6556 6557\nf 6555 6557 8222\nf 6555 8222 8221\nf 6556 6558 6557\nf 6557 6558 6559\nf 6557 6559 8223\nf 6557 8223 8222\nf 6558 6560 6559\nf 6559 6560 6561\nf 6559 6561 8224\nf 6559 8224 8223\nf 6560 6562 6561\nf 6561 6562 6563\nf 6561 6563 8225\nf 6561 8225 8224\nf 6562 6564 6563\nf 6563 6564 6565\nf 6563 6565 8226\nf 6563 8226 8225\nf 6564 6566 6565\nf 6565 6566 6567\nf 6565 6567 8227\nf 6565 8227 8226\nf 6566 6568 6567\nf 6567 6568 6569\nf 6567 6569 8228\nf 6567 8228 8227\nf 6568 6570 6569\nf 6569 6570 6571\nf 6569 6571 8229\nf 6569 8229 8228\nf 6570 6572 6571\nf 6571 6572 6573\nf 6571 6573 8230\nf 6571 8230 8229\nf 6572 6574 6573\nf 6573 6574 6575\nf 6573 6575 8231\nf 6573 8231 8230\nf 6574 6576 6575\nf 6575 6576 6577\nf 6575 6577 8232\nf 6575 8232 8231\nf 6576 6578 6577\nf 6577 6578 6579\nf 6577 6579 8233\nf 6577 8233 8232\nf 6578 6580 6579\nf 6579 6580 6581\nf 6579 6581 8234\nf 6579 8234 8233\nf 6580 6582 6581\nf 6581 6582 6583\nf 6581 6583 8235\nf 6581 8235 8234\nf 6582 6584 6583\nf 6583 6584 6585\nf 6583 6585 8236\nf 6583 8236 8235\nf 6584 6652 6585\nf 6585 6586 8237\nf 6585 6652 6654\nf 6585 6654 6586\nf 6585 8237 8236\nf 6586 6587 8238\nf 6586 6654 6656\nf 6586 6656 6587\nf 6586 8238 8237\nf 6587 6588 8239\nf 6587 6656 6658\nf 6587 6658 6588\nf 6587 8239 8238\nf 6588 6589 8240\nf 6588 6658 6660\nf 6588 6660 6589\nf 6588 8240 8239\nf 6589 6590 8241\nf 6589 6660 6662\nf 6589 6662 6590\nf 6589 8241 8240\nf 6590 6591 8242\nf 6590 6662 6664\nf 6590 6664 6591\nf 6590 8242 8241\nf 6591 6592 8243\nf 6591 6664 6666\nf 6591 6666 6592\nf 6591 8243 8242\nf 6592 6593 8244\nf 6592 6666 6668\nf 6592 6668 6593\nf 6592 8244 8243\nf 6593 6594 8245\nf 6593 6668 6670\nf 6593 6670 6594\nf 6593 8245 8244\nf 6594 6595 8246\nf 6594 6670 6672\nf 6594 6672 6595\nf 6594 8246 8245\nf 6595 6596 8247\nf 6595 6672 6675\nf 6595 6675 6596\nf 6595 8247 8246\nf 6596 6598 8248\nf 6596 6675 6598\nf 6596 8248 8247\nf 6597 6598 6675\nf 6597 6599 6598\nf 6597 6675 6673\nf 6598 6599 6600\nf 6598 6600 8249\nf 6598 8249 8248\nf 6599 6601 6600\nf 6600 6601 6602\nf 6600 6602 8250\nf 6600 8250 8249\nf 6601 6603 6602\nf 6602 6603 6604\nf 6602 6604 8251\nf 6602 8251 8250\nf 6603 6605 6604\nf 6604 6605 6606\nf 6604 6606 8252\nf 6604 8252 8251\nf 6605 6607 6606\nf 6606 6607 6608\nf 6606 6608 8253\nf 6606 8253 8252\nf 6607 6609 6608\nf 6608 6609 6610\nf 6608 6610 8254\nf 6608 8254 8253\nf 6609 6611 6610\nf 6610 6611 6612\nf 6610 6612 8255\nf 6610 8255 8254\nf 6611 6613 6612\nf 6612 6613 6614\nf 6612 6614 8256\nf 6612 8256 8255\nf 6613 6615 6614\nf 6614 6615 6616\nf 6614 6616 8257\nf 6614 8257 8256\nf 6615 6617 6616\nf 6616 6617 6618\nf 6616 6618 8258\nf 6616 8258 8257\nf 6617 6619 6618\nf 6618 6619 6620\nf 6618 6620 8259\nf 6618 8259 8258\nf 6619 6621 6620\nf 6620 6621 6622\nf 6620 6622 8260\nf 6620 8260 8259\nf 6621 6624 6622\nf 6622 6624 6625\nf 6622 6625 8262\nf 6622 8262 8260\nf 6623 6625 6624\nf 6626 6628 6629\nf 6626 6629 8270\nf 6627 6629 6628\nf 6630 6631 6632\nf 6631 6633 6632\nf 6632 6633 6634\nf 6633 6635 6634\nf 6634 6635 6636\nf 6634 6636 8287\nf 6634 8287 8284\nf 6635 6676 6636\nf 6636 6676 6678\nf 6636 6678 6637\nf 6636 8286 8287\nf 6637 6678 6681\nf 6637 6681 6639\nf 6638 6639 6681\nf 6638 6681 6679\nf 6640 6682 8297\nf 6640 8297 8295\nf 6641 8290 8296\nf 6641 8296 6683\nf 6642 6643 6644\nf 6643 6645 6644\nf 6644 6645 6646\nf 6645 6647 6646\nf 6646 6647 6648\nf 6647 6650 6648\nf 6648 6650 6651\nf 6649 6651 6650\nf 6652 6653 6654\nf 6653 6655 6654\nf 6654 6655 6656\nf 6655 6657 6656\nf 6656 6657 6658\nf 6657 6659 6658\nf 6658 6659 6660\nf 6659 6661 6660\nf 6660 6661 6662\nf 6661 6663 6662\nf 6662 6663 6664\nf 6663 6665 6664\nf 6664 6665 6666\nf 6665 6667 6666\nf 6666 6667 6668\nf 6667 6669 6668\nf 6668 6669 6670\nf 6669 6671 6670\nf 6670 6671 6672\nf 6671 6674 6672\nf 6672 6674 6675\nf 6673 6675 6674\nf 6676 6677 6678\nf 6677 6680 6678\nf 6678 6680 6681\nf 6679 6681 6680\nf 6682 6684 8299\nf 6682 8299 8297\nf 6683 8296 8298\nf 6683 8298 6685\nf 6684 6686 8301\nf 6684 8301 8299\nf 6685 8298 8300\nf 6685 8300 6687\nf 6686 6688 8303\nf 6686 8303 8301\nf 6687 8300 8302\nf 6687 8302 6689\nf 6688 6690 8305\nf 6688 8305 8303\nf 6689 8302 8304\nf 6689 8304 6691\nf 6690 6693 8307\nf 6690 8307 8305\nf 6691 8304 8306\nf 6691 8306 6694\nf 6692 6696 6699\nf 6692 6699 6698\nf 6693 6710 8309\nf 6693 8309 8307\nf 6694 8306 8308\nf 6694 8308 6711\nf 6695 6712 6713\nf 6695 6713 6714\nf 6695 6714 6697\nf 6696 6697 6699\nf 6697 6714 6699\nf 6698 6699 6716\nf 6698 6716 6700\nf 6699 6714 6715\nf 6699 6715 6716\nf 6700 6716 6717\nf 6700 6717 6701\nf 6701 6717 6718\nf 6701 6718 6702\nf 6702 6718 6719\nf 6702 6719 6703\nf 6703 6719 6721\nf 6703 6721 6704\nf 6704 6721 6720\nf 6705 6723 6725\nf 6705 6725 6726\nf 6705 6726 6706\nf 6706 6726 6727\nf 6706 6727 6707\nf 6707 6727 6728\nf 6707 6728 6708\nf 6708 6728 6730\nf 6708 6730 6709\nf 6709 6730 6729\nf 6710 6771 8320\nf 6710 8320 8309\nf 6711 8308 8310\nf 6711 8310 6772\nf 6712 6773 6713\nf 6713 6773 6774\nf 6713 6774 6775\nf 6713 6775 6714\nf 6714 6775 6715\nf 6715 6775 8322\nf 6715 8311 6716\nf 6715 8322 8311\nf 6716 8311 8312\nf 6716 8312 6717\nf 6717 8312 8313\nf 6717 8313 6718\nf 6718 6776 6719\nf 6718 8313 8314\nf 6718 8314 6776\nf 6719 6776 6777\nf 6719 6777 6721\nf 6720 6721 6778\nf 6720 6778 6722\nf 6721 6777 6778\nf 6722 6778 6779\nf 6722 6779 6724\nf 6723 6724 6725\nf 6724 6779 6725\nf 6725 6779 8315\nf 6725 8315 6726\nf 6726 8315 8316\nf 6726 8316 6727\nf 6727 8316 8317\nf 6727 8317 6728\nf 6728 8317 8318\nf 6728 8318 6730\nf 6729 6730 6731\nf 6730 8318 8319\nf 6730 8319 6731\nf 6731 6780 6781\nf 6731 6781 6732\nf 6731 8319 6780\nf 6732 6781 6782\nf 6732 6782 6733\nf 6733 6782 6784\nf 6733 6784 6734\nf 6734 6784 6783\nf 6735 6801 6803\nf 6735 6803 6804\nf 6735 6804 6736\nf 6736 6804 6805\nf 6736 6805 6737\nf 6737 6805 6806\nf 6737 6806 6738\nf 6738 6806 6807\nf 6738 6807 6739\nf 6739 6807 6808\nf 6739 6808 6740\nf 6740 6808 6809\nf 6740 6809 6741\nf 6741 6809 6810\nf 6741 6810 6742\nf 6742 6810 6811\nf 6742 6811 6743\nf 6743 6811 6812\nf 6743 6812 6744\nf 6744 6812 6813\nf 6744 6813 6745\nf 6745 6813 6814\nf 6745 6814 6746\nf 6746 6814 6815\nf 6746 6815 6747\nf 6747 6815 6816\nf 6747 6816 6748\nf 6748 6816 6817\nf 6748 6817 6749\nf 6749 6817 6818\nf 6749 6818 6750\nf 6750 6818 6819\nf 6750 6819 6751\nf 6751 6819 6820\nf 6751 6820 6752\nf 6752 6820 6821\nf 6752 6821 6753\nf 6753 6821 6822\nf 6753 6822 6754\nf 6754 6822 6823\nf 6754 6823 6755\nf 6755 6823 6824\nf 6755 6824 6756\nf 6756 6824 6825\nf 6756 6825 6757\nf 6757 6825 6826\nf 6757 6826 6758\nf 6758 6826 6827\nf 6758 6827 6759\nf 6759 6827 6829\nf 6759 6829 6760\nf 6760 6829 6828\nf 6761 6833 6835\nf 6761 6835 6836\nf 6761 6836 6762\nf 6762 6836 6837\nf 6762 6837 6763\nf 6763 6837 6838\nf 6763 6838 6764\nf 6764 6838 6839\nf 6764 6839 6765\nf 6765 6839 6840\nf 6765 6840 6766\nf 6766 6840 6841\nf 6766 6841 6767\nf 6767 6841 6842\nf 6767 6842 6768\nf 6768 6842 6843\nf 6768 6843 6769\nf 6769 6843 6845\nf 6769 6845 6770\nf 6770 6845 6844\nf 6771 6847 8387\nf 6771 8387 8320\nf 6772 8310 8321\nf 6772 8321 6848\nf 6773 6849 6774\nf 6774 6849 6850\nf 6774 6850 6775\nf 6775 6850 8389\nf 6775 8323 8322\nf 6775 8389 8323\nf 6776 8314 8327\nf 6776 8327 8329\nf 6776 8329 6777\nf 6777 8329 8330\nf 6777 8330 6778\nf 6778 8330 8331\nf 6778 8331 6779\nf 6779 8331 8333\nf 6779 8332 8315\nf 6779 8333 8332\nf 6780 8319 8334\nf 6780 8334 8336\nf 6780 8336 6781\nf 6781 8336 8337\nf 6781 8337 6782\nf 6782 8337 8338\nf 6782 8338 6784\nf 6783 6784 8339\nf 6783 8339 6785\nf 6784 8338 8339\nf 6785 8339 8340\nf 6785 8340 6786\nf 6786 6851 6852\nf 6786 6852 6787\nf 6786 8340 6851\nf 6787 6852 6853\nf 6787 6853 6788\nf 6788 6853 6854\nf 6788 6854 6789\nf 6789 6854 6855\nf 6789 6855 6790\nf 6790 6855 6856\nf 6790 6856 6791\nf 6791 6856 6857\nf 6791 6857 6792\nf 6792 6857 6858\nf 6792 6858 6793\nf 6793 6858 6859\nf 6793 6859 6794\nf 6794 6859 6860\nf 6794 6860 6795\nf 6795 6860 6861\nf 6795 6861 6796\nf 6796 6861 6862\nf 6796 6862 6797\nf 6797 6862 8404\nf 6797 8341 6798\nf 6797 8404 8341\nf 6798 8341 8342\nf 6798 8342 6799\nf 6799 8342 8343\nf 6799 8343 6800\nf 6800 8343 8344\nf 6800 8344 6802\nf 6801 6802 6803\nf 6802 8344 8345\nf 6802 8345 6803\nf 6803 8345 6804\nf 6804 8345 8346\nf 6804 8346 6805\nf 6805 8346 8347\nf 6805 8347 6806\nf 6806 8347 8348\nf 6806 8348 6807\nf 6807 8348 8349\nf 6807 8349 6808\nf 6808 8349 8350\nf 6808 8350 6809\nf 6809 8350 8351\nf 6809 8351 6810\nf 6810 8351 8352\nf 6810 8352 6811\nf 6811 8352 8353\nf 6811 8353 6812\nf 6812 8353 8354\nf 6812 8354 6813\nf 6813 8354 8355\nf 6813 8355 6814\nf 6814 8355 8356\nf 6814 8356 6815\nf 6815 8356 8357\nf 6815 8357 6816\nf 6816 8357 8358\nf 6816 8358 6817\nf 6817 8358 8359\nf 6817 8359 6818\nf 6818 8359 8360\nf 6818 8360 6819\nf 6819 8360 8361\nf 6819 8361 6820\nf 6820 8361 8362\nf 6820 8362 6821\nf 6821 8362 8363\nf 6821 8363 6822\nf 6822 8363 8364\nf 6822 8364 6823\nf 6823 8364 8365\nf 6823 8365 6824\nf 6824 8365 8366\nf 6824 8366 6825\nf 6825 8366 8367\nf 6825 8367 6826\nf 6826 8367 8368\nf 6826 8368 6827\nf 6827 8368 8369\nf 6827 8369 6829\nf 6828 6829 8370\nf 6828 8370 6830\nf 6829 8369 8370\nf 6830 8370 8371\nf 6830 8371 8372\nf 6830 8372 6831\nf 6831 8372 8373\nf 6831 8373 6832\nf 6832 8373 8374\nf 6832 8374 6834\nf 6833 6834 6835\nf 6834 8374 8375\nf 6834 8375 6835\nf 6835 8375 6836\nf 6836 8375 8376\nf 6836 8376 6837\nf 6837 8376 8377\nf 6837 8377 6838\nf 6838 8377 8379\nf 6838 8379 6839\nf 6839 8379 8381\nf 6839 8381 6840\nf 6840 8381 8382\nf 6840 8382 6841\nf 6841 8382 8383\nf 6841 8383 6842\nf 6842 8383 8384\nf 6842 8384 6843\nf 6843 8384 8385\nf 6843 8385 6845\nf 6844 6845 6846\nf 6845 8385 8386\nf 6845 8386 6846\nf 6846 6864 6863\nf 6846 8386 6864\nf 6847 6865 8421\nf 6847 8421 8387\nf 6848 8321 8388\nf 6848 8388 6866\nf 6849 6867 6850\nf 6850 6867 6868\nf 6850 6868 8423\nf 6850 8423 8389\nf 6851 8340 8391\nf 6851 8391 8393\nf 6851 8393 6852\nf 6852 8393 8394\nf 6852 8394 6853\nf 6853 8394 8395\nf 6853 8395 6854\nf 6854 8395 8396\nf 6854 8396 6855\nf 6855 8396 8397\nf 6855 8397 6856\nf 6856 8397 8398\nf 6856 8398 6857\nf 6857 8398 8399\nf 6857 8399 6858\nf 6858 8399 8400\nf 6858 8400 6859\nf 6859 8400 8401\nf 6859 8401 6860\nf 6860 8401 8402\nf 6860 8402 6861\nf 6861 8402 8403\nf 6861 8403 6862\nf 6862 8403 8405\nf 6862 8405 8404\nf 6863 6864 8420\nf 6863 8420 8424\nf 6863 8424 6869\nf 6864 8386 8419\nf 6864 8419 8420\nf 6865 6871 8425\nf 6865 8425 8421\nf 6866 8388 8422\nf 6866 8422 6872\nf 6867 6873 6868\nf 6868 6873 6874\nf 6868 6874 8427\nf 6868 8427 8423\nf 6869 6876 6870\nf 6869 8424 8428\nf 6869 8428 6876\nf 6870 6876 6875\nf 6871 6877 8429\nf 6871 8429 8425\nf 6872 8422 8426\nf 6872 8426 6878\nf 6873 6879 6874\nf 6874 6879 6880\nf 6874 6880 8431\nf 6874 8431 8427\nf 6875 6876 6882\nf 6875 6882 6881\nf 6876 8428 6882\nf 6877 6883 8433\nf 6877 8433 8429\nf 6878 8426 8430\nf 6878 8430 6884\nf 6879 6885 6880\nf 6880 6885 6886\nf 6880 6886 8435\nf 6880 8435 8431\nf 6881 6882 6888\nf 6881 6888 6887\nf 6882 8428 8432\nf 6882 8432 6888\nf 6883 6889 8438\nf 6883 8438 8433\nf 6884 8430 8434\nf 6884 8434 6890\nf 6885 6891 6886\nf 6886 6891 6892\nf 6886 6892 8440\nf 6886 8440 8435\nf 6887 6888 8437\nf 6887 8437 8441\nf 6887 8441 6893\nf 6888 8432 8436\nf 6888 8436 8437\nf 6889 6894 8443\nf 6889 8443 8438\nf 6890 8434 8439\nf 6890 8439 6895\nf 6891 6896 6892\nf 6892 6896 6897\nf 6892 6897 8445\nf 6892 8445 8440\nf 6893 8441 6898\nf 6894 6899 8448\nf 6894 8448 8443\nf 6895 8439 8444\nf 6895 8444 6900\nf 6896 6901 6897\nf 6897 6901 6902\nf 6897 6902 8450\nf 6897 8450 8445\nf 6898 8441 8446\nf 6898 8446 6903\nf 6899 6904 8452\nf 6899 8452 8448\nf 6900 8444 8449\nf 6900 8449 6905\nf 6901 6907 6902\nf 6902 6907 6908\nf 6902 6908 8454\nf 6902 8454 8450\nf 6903 8446 8451\nf 6903 8451 6909\nf 6904 6910 8456\nf 6904 8456 8452\nf 6905 6912 6906\nf 6905 8449 8453\nf 6905 8453 8457\nf 6905 8457 6912\nf 6906 6912 6911\nf 6907 6913 6908\nf 6908 6913 6914\nf 6908 6914 8459\nf 6908 8459 8454\nf 6909 8451 8455\nf 6909 8455 6915\nf 6910 6917 8461\nf 6910 8461 8456\nf 6911 6912 8458\nf 6911 8458 8462\nf 6911 8462 6918\nf 6912 8457 8458\nf 6913 6919 6914\nf 6914 6919 6920\nf 6914 6920 8463\nf 6914 8463 8459\nf 6915 6922 6916\nf 6915 8455 8460\nf 6915 8460 8464\nf 6915 8464 6922\nf 6916 6922 6921\nf 6917 6923 8465\nf 6917 8465 8461\nf 6918 8462 6924\nf 6919 6925 6920\nf 6920 6925 6926\nf 6920 6926 8467\nf 6920 8467 8463\nf 6921 6922 6928\nf 6921 6928 6927\nf 6922 8464 6928\nf 6923 6929 8469\nf 6923 8469 8465\nf 6924 8462 8466\nf 6924 8466 6930\nf 6925 6931 6926\nf 6926 6931 6932\nf 6926 6932 8471\nf 6926 8471 8467\nf 6927 6928 6934\nf 6927 6934 6933\nf 6928 8464 8468\nf 6928 8468 6934\nf 6929 6935 8473\nf 6929 8473 8469\nf 6930 8466 8470\nf 6930 8470 6936\nf 6931 6937 6932\nf 6932 6937 6938\nf 6932 6938 8475\nf 6932 8475 8471\nf 6933 6934 6940\nf 6933 6940 6939\nf 6934 8468 8472\nf 6934 8472 6940\nf 6935 6941 8477\nf 6935 8477 8473\nf 6936 8470 8474\nf 6936 8474 6942\nf 6937 6943 6938\nf 6938 6943 6944\nf 6938 6944 8479\nf 6938 8479 8475\nf 6939 6940 6946\nf 6939 6946 6945\nf 6940 8472 8476\nf 6940 8476 6946\nf 6941 6947 8481\nf 6941 8481 8477\nf 6942 8474 8478\nf 6942 8478 6948\nf 6943 6949 6944\nf 6944 6949 6950\nf 6944 6950 8483\nf 6944 8483 8479\nf 6945 6946 6952\nf 6945 6952 6951\nf 6946 8476 8480\nf 6946 8480 6952\nf 6947 6953 8485\nf 6947 8485 8481\nf 6948 8478 8482\nf 6948 8482 6954\nf 6949 6955 6950\nf 6950 6955 6956\nf 6950 6956 8487\nf 6950 8487 8483\nf 6951 6952 6958\nf 6951 6958 6957\nf 6952 8480 8484\nf 6952 8484 6958\nf 6953 6959 8489\nf 6953 8489 8485\nf 6954 8482 8486\nf 6954 8486 6960\nf 6955 6961 6956\nf 6956 6961 6962\nf 6956 6962 8491\nf 6956 8491 8487\nf 6957 6958 6964\nf 6957 6964 6963\nf 6958 8484 8488\nf 6958 8488 6964\nf 6959 6965 8493\nf 6959 8493 8489\nf 6960 8486 8490\nf 6960 8490 6966\nf 6961 6967 6962\nf 6962 6967 6968\nf 6962 6968 8495\nf 6962 8495 8491\nf 6963 6964 6970\nf 6963 6970 6969\nf 6964 8488 8492\nf 6964 8492 6970\nf 6965 6971 8498\nf 6965 8498 8493\nf 6966 8490 8494\nf 6966 8494 6972\nf 6967 6973 8500\nf 6967 8500 6968\nf 6968 8496 8495\nf 6968 8500 8496\nf 6969 6970 6975\nf 6969 6975 6974\nf 6970 8492 8497\nf 6970 8497 6975\nf 6971 6976 8503\nf 6971 8503 8498\nf 6972 8494 8499\nf 6972 8499 6977\nf 6973 6978 8505\nf 6973 8505 8500\nf 6974 6975 6980\nf 6974 6980 6979\nf 6975 8497 8502\nf 6975 8502 6980\nf 6976 6981 8508\nf 6976 8508 8503\nf 6977 8499 8504\nf 6977 8504 6982\nf 6978 6983 8512\nf 6978 8512 8505\nf 6979 6980 6985\nf 6979 6985 6984\nf 6980 8502 8507\nf 6980 8507 6985\nf 6981 6986 8515\nf 6981 8515 8508\nf 6982 8504 8509\nf 6982 8509 6987\nf 6983 6990 8517\nf 6983 8517 8512\nf 6984 6985 6992\nf 6984 6992 6991\nf 6985 8507 8514\nf 6985 8514 6992\nf 6986 6993 8520\nf 6986 8520 8515\nf 6987 6989 6988\nf 6987 8509 8510\nf 6987 8510 6989\nf 6988 6989 6994\nf 6989 8510 8516\nf 6989 8516 6994\nf 6990 6995 8522\nf 6990 8522 8517\nf 6991 6992 6997\nf 6991 6997 6996\nf 6992 8514 8519\nf 6992 8519 6997\nf 6993 6998 8525\nf 6993 8525 8520\nf 6994 8516 8521\nf 6994 8521 6999\nf 6995 7000 8527\nf 6995 8527 8522\nf 6996 6997 7002\nf 6996 7002 7001\nf 6997 8519 8524\nf 6997 8524 7002\nf 6998 7003 8530\nf 6998 8530 8525\nf 6999 8521 8526\nf 6999 8526 7004\nf 7000 7005 8532\nf 7000 8532 8527\nf 7001 7002 7007\nf 7001 7007 7006\nf 7002 8524 8529\nf 7002 8529 7007\nf 7003 7008 8534\nf 7003 8534 8530\nf 7004 8526 8531\nf 7004 8531 7009\nf 7005 7010 8536\nf 7005 8536 8532\nf 7006 7007 7012\nf 7006 7012 7011\nf 7007 8529 8533\nf 7007 8533 7012\nf 7008 7013 8538\nf 7008 8538 8534\nf 7009 8531 8535\nf 7009 8535 7014\nf 7010 7015 8540\nf 7010 8540 8536\nf 7011 7012 7017\nf 7011 7017 7016\nf 7012 8533 8537\nf 7012 8537 7017\nf 7013 7018 8542\nf 7013 8542 8538\nf 7014 8535 8539\nf 7014 8539 7019\nf 7015 7020 8544\nf 7015 8544 8540\nf 7016 7017 7023\nf 7016 7023 7021\nf 7017 8537 8541\nf 7017 8541 7023\nf 7018 7024 8546\nf 7018 8546 8542\nf 7019 8539 8543\nf 7019 8543 7025\nf 7020 7026 8548\nf 7020 8548 8544\nf 7021 7023 7022\nf 7022 7023 8545\nf 7022 8545 7027\nf 7023 8541 8545\nf 7024 7028 8550\nf 7024 8550 8546\nf 7025 8543 8547\nf 7025 8547 7029\nf 7026 7030 8552\nf 7026 8552 8548\nf 7027 8545 8549\nf 7027 8549 7031\nf 7028 7032 8555\nf 7028 8555 8550\nf 7029 8547 8551\nf 7029 8551 7033\nf 7030 7034 8557\nf 7030 8557 8552\nf 7031 8549 8554\nf 7031 8554 7035\nf 7032 7036 8560\nf 7032 8560 8555\nf 7033 8551 8556\nf 7033 8556 7037\nf 7034 7038 8562\nf 7034 8562 8557\nf 7035 8554 8559\nf 7035 8559 7039\nf 7036 7040 8565\nf 7036 8565 8560\nf 7037 8556 8561\nf 7037 8561 7041\nf 7038 7042 8567\nf 7038 8567 8562\nf 7039 8559 8564\nf 7039 8564 7043\nf 7040 7045 8570\nf 7040 8570 8565\nf 7041 8561 8566\nf 7041 8566 7046\nf 7042 7047 8572\nf 7042 8572 8567\nf 7043 7049 7044\nf 7043 8564 8569\nf 7043 8569 8574\nf 7043 8574 7049\nf 7044 7049 7048\nf 7045 7050 8576\nf 7045 8576 8570\nf 7046 8566 8571\nf 7046 8571 7051\nf 7047 7052 8578\nf 7047 8578 8572\nf 7048 7049 8575\nf 7048 8575 8580\nf 7048 8580 7053\nf 7049 8574 8575\nf 7050 7054 8582\nf 7050 8582 8576\nf 7051 8571 8577\nf 7051 8577 7055\nf 7052 7056 8584\nf 7052 8584 8578\nf 7053 8580 7057\nf 7054 7058 8588\nf 7054 8588 8582\nf 7055 8577 8583\nf 7055 8583 7059\nf 7056 7060 8590\nf 7056 8590 8584\nf 7057 8580 8586\nf 7057 8586 7061\nf 7058 7062 8593\nf 7058 8593 8588\nf 7059 8583 8589\nf 7059 8589 7063\nf 7060 7064 8595\nf 7060 8595 8590\nf 7061 8586 8592\nf 7061 8592 7065\nf 7062 7066 8598\nf 7062 8598 8593\nf 7063 8589 8594\nf 7063 8594 7067\nf 7064 7068 8600\nf 7064 8600 8595\nf 7065 8592 8597\nf 7065 8597 7069\nf 7066 7070 8603\nf 7066 8603 8598\nf 7067 8594 8599\nf 7067 8599 7071\nf 7068 7072 8605\nf 7068 8605 8600\nf 7069 8597 8602\nf 7069 8602 7073\nf 7070 7074 8609\nf 7070 8609 8603\nf 7071 8599 8604\nf 7071 8604 7075\nf 7072 7077 8605\nf 7073 8602 8608\nf 7073 8608 7079\nf 7074 7080 8614\nf 7074 8614 8609\nf 7075 7082 7076\nf 7075 8604 8610\nf 7075 8610 8615\nf 7075 8615 7082\nf 7076 7082 7081\nf 7077 7078 8606\nf 7077 7083 7078\nf 7077 8606 8605\nf 7078 7083 7084\nf 7078 7084 8616\nf 7078 8611 8606\nf 7078 8616 8611\nf 7079 8608 8612\nf 7079 8612 7085\nf 7080 7086 8620\nf 7080 8620 8614\nf 7081 7082 7088\nf 7081 7088 7087\nf 7082 8615 7088\nf 7083 7089 7084\nf 7084 7089 7090\nf 7084 7090 8622\nf 7084 8622 8616\nf 7085 8612 8617\nf 7085 8617 7091\nf 7086 7093 8624\nf 7086 8624 8620\nf 7087 7088 7095\nf 7087 7095 7094\nf 7088 8615 8621\nf 7088 8621 7095\nf 7089 7096 7090\nf 7090 7096 7097\nf 7090 7097 8627\nf 7090 8627 8622\nf 7091 7092 7099\nf 7091 7099 7098\nf 7091 8617 7092\nf 7092 8617 8618\nf 7092 8618 8623\nf 7092 8623 7099\nf 7093 7100 8629\nf 7093 8629 8624\nf 7094 7095 8626\nf 7094 8626 8630\nf 7094 8630 7101\nf 7095 8621 8625\nf 7095 8625 8626\nf 7096 7102 7097\nf 7097 7102 7103\nf 7097 7103 8631\nf 7097 8631 8627\nf 7098 7099 7105\nf 7098 7105 7104\nf 7099 8623 8628\nf 7099 8628 7105\nf 7100 7106 8633\nf 7100 8633 8629\nf 7101 8630 7107\nf 7102 7108 7103\nf 7103 7108 7109\nf 7103 7109 8635\nf 7103 8635 8631\nf 7104 7105 7111\nf 7104 7111 7110\nf 7105 8628 8632\nf 7105 8632 7111\nf 7106 7112 8637\nf 7106 8637 8633\nf 7107 8630 8634\nf 7107 8634 7113\nf 7108 7114 7109\nf 7109 7114 7115\nf 7109 7115 8640\nf 7109 8640 8635\nf 7110 7111 7118\nf 7110 7118 7116\nf 7111 8632 8636\nf 7111 8636 7118\nf 7112 7119 8644\nf 7112 8644 8637\nf 7113 8634 8638\nf 7113 8638 7120\nf 7114 7122 7115\nf 7115 7122 7123\nf 7115 7123 8647\nf 7115 8647 8640\nf 7116 7118 7117\nf 7117 7118 8641\nf 7117 8641 8642\nf 7117 8642 7124\nf 7118 8636 8641\nf 7119 7126 8651\nf 7119 8651 8644\nf 7120 7121 7129\nf 7120 7129 7127\nf 7120 8638 7121\nf 7121 8638 8639\nf 7121 8639 8645\nf 7121 8645 7129\nf 7122 7130 7123\nf 7123 7130 7132\nf 7123 7132 7133\nf 7123 7133 8648\nf 7123 8648 8647\nf 7124 7125 7135\nf 7124 7135 7134\nf 7124 8642 7125\nf 7125 8642 8650\nf 7125 8650 7135\nf 7126 7136 8655\nf 7126 8655 8651\nf 7127 7129 7128\nf 7128 7129 8652\nf 7128 8652 7137\nf 7129 8645 8652\nf 7130 7131 7132\nf 7131 7138 7132\nf 7132 7138 7139\nf 7132 7139 7133\nf 7133 7139 8657\nf 7133 8653 8648\nf 7133 8657 8653\nf 7134 7135 7141\nf 7134 7141 7140\nf 7135 8650 8654\nf 7135 8654 7141\nf 7136 7142 8664\nf 7136 8664 8655\nf 7137 8652 8656\nf 7137 8656 7143\nf 7138 7144 7139\nf 7139 7144 7146\nf 7139 7146 7147\nf 7139 7147 8658\nf 7139 8658 8657\nf 7140 7141 7152\nf 7140 7152 7150\nf 7141 7149 7152\nf 7141 8654 8661\nf 7141 8661 7149\nf 7142 7153 8741\nf 7142 8741 8664\nf 7143 8656 8665\nf 7143 8665 7154\nf 7144 7145 7146\nf 7145 7155 7146\nf 7146 7155 7157\nf 7146 7157 7147\nf 7147 7148 8660\nf 7147 7157 7158\nf 7147 7158 7148\nf 7147 8660 8658\nf 7148 7158 7160\nf 7148 7160 8667\nf 7148 8666 8660\nf 7148 8667 8666\nf 7149 7228 7231\nf 7149 7231 7152\nf 7149 8661 8662\nf 7149 8662 8738\nf 7149 8738 7228\nf 7150 7152 7151\nf 7151 7152 7231\nf 7151 7231 7229\nf 7153 7232 8741\nf 7154 8665 8743\nf 7154 8743 7234\nf 7155 7156 7157\nf 7156 7235 7157\nf 7157 7235 7238\nf 7157 7238 7158\nf 7158 7238 7160\nf 7159 7160 7238\nf 7159 7161 7160\nf 7159 7238 7236\nf 7160 7161 7162\nf 7160 7162 8669\nf 7160 8669 8667\nf 7161 7239 7162\nf 7162 7163 8671\nf 7162 7239 7241\nf 7162 7241 7163\nf 7162 8671 8669\nf 7163 7164 8673\nf 7163 7241 7243\nf 7163 7243 7164\nf 7163 8673 8671\nf 7164 7165 8675\nf 7164 7243 7245\nf 7164 7245 7165\nf 7164 8675 8673\nf 7165 7166 8677\nf 7165 7245 7246\nf 7165 7246 7166\nf 7165 8677 8675\nf 7166 7246 7247\nf 7166 7247 8745\nf 7166 8744 8677\nf 7166 8745 8744\nf 7167 7168 8685\nf 7167 7274 7275\nf 7167 7275 7276\nf 7167 7276 7168\nf 7167 8683 8799\nf 7167 8685 8683\nf 7167 8799 7274\nf 7168 7169 8687\nf 7168 7276 7277\nf 7168 7277 7169\nf 7168 8687 8685\nf 7169 7170 8689\nf 7169 7277 7279\nf 7169 7279 7170\nf 7169 8689 8687\nf 7170 7171 8691\nf 7170 7279 7281\nf 7170 7281 7171\nf 7170 8691 8689\nf 7171 7172 8693\nf 7171 7281 7283\nf 7171 7283 7172\nf 7171 8693 8691\nf 7172 7173 8695\nf 7172 7283 7286\nf 7172 7286 7173\nf 7172 8695 8693\nf 7173 7175 8697\nf 7173 7286 7175\nf 7173 8697 8695\nf 7174 7175 7286\nf 7174 7176 7175\nf 7174 7286 7284\nf 7175 7176 7177\nf 7175 7177 8699\nf 7175 8699 8697\nf 7176 7178 7177\nf 7177 7178 7179\nf 7177 7179 8701\nf 7177 8701 8699\nf 7178 7180 7179\nf 7179 7180 7181\nf 7179 7181 8703\nf 7179 8703 8701\nf 7180 7182 7181\nf 7181 7182 7183\nf 7181 7183 8705\nf 7181 8705 8703\nf 7182 7184 7183\nf 7183 7184 7185\nf 7183 7185 8707\nf 7183 8707 8705\nf 7184 7186 7185\nf 7185 7186 7187\nf 7185 7187 8709\nf 7185 8709 8707\nf 7186 7188 7187\nf 7187 7188 7189\nf 7187 7189 8711\nf 7187 8711 8709\nf 7188 7190 7189\nf 7189 7190 7191\nf 7189 7191 8713\nf 7189 8713 8711\nf 7190 7192 7191\nf 7191 7192 7193\nf 7191 7193 8714\nf 7191 8714 8713\nf 7192 7194 7193\nf 7193 7194 7195\nf 7193 7195 8715\nf 7193 8715 8714\nf 7194 7196 7195\nf 7195 7196 7197\nf 7195 7197 8716\nf 7195 8716 8715\nf 7196 7198 7197\nf 7197 7198 7199\nf 7197 7199 8717\nf 7197 8717 8716\nf 7198 7200 7199\nf 7199 7200 7201\nf 7199 7201 8718\nf 7199 8718 8717\nf 7200 7202 7201\nf 7201 7202 7203\nf 7201 7203 8719\nf 7201 8719 8718\nf 7202 7204 7203\nf 7203 7204 7205\nf 7203 7205 8720\nf 7203 8720 8719\nf 7204 7206 7205\nf 7205 7206 7207\nf 7205 7207 8721\nf 7205 8721 8720\nf 7206 7208 7207\nf 7207 7208 7209\nf 7207 7209 8722\nf 7207 8722 8721\nf 7208 7210 7209\nf 7209 7210 7211\nf 7209 7211 8723\nf 7209 8723 8722\nf 7210 7212 7211\nf 7211 7212 7213\nf 7211 7213 8724\nf 7211 8724 8723\nf 7212 7214 7213\nf 7213 7214 7215\nf 7213 7215 8725\nf 7213 8725 8724\nf 7214 7216 7215\nf 7215 7216 7217\nf 7215 7217 8726\nf 7215 8726 8725\nf 7216 7218 7217\nf 7217 7218 7219\nf 7217 7219 8727\nf 7217 8727 8726\nf 7218 7287 7219\nf 7219 7220 8728\nf 7219 7287 7289\nf 7219 7289 7220\nf 7219 8728 8727\nf 7220 7221 8729\nf 7220 7289 7291\nf 7220 7291 7221\nf 7220 8729 8728\nf 7221 7222 8730\nf 7221 7291 7293\nf 7221 7293 7222\nf 7221 8730 8729\nf 7222 7223 8731\nf 7222 7293 7295\nf 7222 7295 7223\nf 7222 8731 8730\nf 7223 7224 8732\nf 7223 7295 7297\nf 7223 7297 7224\nf 7223 8732 8731\nf 7224 7225 8734\nf 7224 7297 7299\nf 7224 7299 7225\nf 7224 8734 8732\nf 7225 7226 8736\nf 7225 7299 7302\nf 7225 7302 7226\nf 7225 8736 8734\nf 7226 7228 8739\nf 7226 7302 7228\nf 7226 8739 8736\nf 7227 7228 7302\nf 7227 7230 7228\nf 7227 7302 7300\nf 7228 7230 7231\nf 7228 8738 8739\nf 7229 7231 7230\nf 7232 7233 8742\nf 7232 7303 7233\nf 7232 8742 8741\nf 7233 7303 7304\nf 7233 7304 8805\nf 7233 8802 8742\nf 7233 8805 8802\nf 7234 8743 8804\nf 7234 8804 7305\nf 7235 7237 7238\nf 7236 7238 7237\nf 7239 7240 7241\nf 7240 7242 7241\nf 7241 7242 7243\nf 7242 7244 7243\nf 7243 7244 7245\nf 7244 7306 7245\nf 7245 7306 7308\nf 7245 7308 7246\nf 7246 7308 7310\nf 7246 7310 7247\nf 7247 7248 8747\nf 7247 7310 7312\nf 7247 7312 7248\nf 7247 8747 8745\nf 7248 7249 8749\nf 7248 7312 7314\nf 7248 7314 7249\nf 7248 8749 8747\nf 7249 7250 8751\nf 7249 7314 7316\nf 7249 7316 7250\nf 7249 8751 8749\nf 7250 7251 8753\nf 7250 7316 7318\nf 7250 7318 7251\nf 7250 8753 8751\nf 7251 7252 8755\nf 7251 7318 7320\nf 7251 7320 7252\nf 7251 8755 8753\nf 7252 7253 8757\nf 7252 7320 7322\nf 7252 7322 7253\nf 7252 8757 8755\nf 7253 7254 8759\nf 7253 7322 7324\nf 7253 7324 7254\nf 7253 8759 8757\nf 7254 7255 8761\nf 7254 7324 7326\nf 7254 7326 7255\nf 7254 8761 8759\nf 7255 7256 8763\nf 7255 7326 7328\nf 7255 7328 7256\nf 7255 8763 8761\nf 7256 7257 8765\nf 7256 7328 7330\nf 7256 7330 7257\nf 7256 8765 8763\nf 7257 7258 8767\nf 7257 7330 7332\nf 7257 7332 7258\nf 7257 8767 8765\nf 7258 7259 8769\nf 7258 7332 7334\nf 7258 7334 7259\nf 7258 8769 8767\nf 7259 7260 8771\nf 7259 7334 7336\nf 7259 7336 7260\nf 7259 8771 8769\nf 7260 7261 8773\nf 7260 7336 7338\nf 7260 7338 7261\nf 7260 8773 8771\nf 7261 7262 8775\nf 7261 7338 7340\nf 7261 7340 7262\nf 7261 8775 8773\nf 7262 7263 8777\nf 7262 7340 7342\nf 7262 7342 7263\nf 7262 8777 8775\nf 7263 7264 8779\nf 7263 7342 7344\nf 7263 7344 7264\nf 7263 8779 8777\nf 7264 7265 8781\nf 7264 7344 7345\nf 7264 7345 7265\nf 7264 8781 8779\nf 7265 7266 8783\nf 7265 7345 7347\nf 7265 7347 7266\nf 7265 8783 8781\nf 7266 7267 8785\nf 7266 7347 7349\nf 7266 7349 7267\nf 7266 8785 8783\nf 7267 7268 8787\nf 7267 7349 7351\nf 7267 7351 7268\nf 7267 8787 8785\nf 7268 7269 8789\nf 7268 7351 7353\nf 7268 7353 7269\nf 7268 8789 8787\nf 7269 7270 8791\nf 7269 7353 7355\nf 7269 7355 7270\nf 7269 8791 8789\nf 7270 7271 8793\nf 7270 7355 7357\nf 7270 7357 7271\nf 7270 8793 8791\nf 7271 7272 8795\nf 7271 7357 7359\nf 7271 7359 7272\nf 7271 8795 8793\nf 7272 7273 8797\nf 7272 7359 7361\nf 7272 7361 7273\nf 7272 8797 8795\nf 7273 7274 8800\nf 7273 7361 7363\nf 7273 7363 7274\nf 7273 8800 8797\nf 7274 7363 7365\nf 7274 7365 7275\nf 7274 8799 8800\nf 7275 7365 7367\nf 7275 7367 7276\nf 7276 7367 7370\nf 7276 7370 7277\nf 7277 7370 7279\nf 7278 7279 7370\nf 7278 7280 7279\nf 7278 7370 7368\nf 7279 7280 7281\nf 7280 7282 7281\nf 7281 7282 7283\nf 7282 7285 7283\nf 7283 7285 7286\nf 7284 7286 7285\nf 7287 7288 7289\nf 7288 7290 7289\nf 7289 7290 7291\nf 7290 7292 7291\nf 7291 7292 7293\nf 7292 7294 7293\nf 7293 7294 7295\nf 7294 7296 7295\nf 7295 7296 7297\nf 7296 7298 7297\nf 7297 7298 7299\nf 7298 7301 7299\nf 7299 7301 7302\nf 7300 7302 7301\nf 7303 7371 8808\nf 7303 8808 7304\nf 7304 8806 8805\nf 7304 8808 8806\nf 7305 8804 8807\nf 7305 8807 7372\nf 7306 7307 7308\nf 7307 7309 7308\nf 7308 7309 7310\nf 7309 7311 7310\nf 7310 7311 7312\nf 7311 7313 7312\nf 7312 7313 7314\nf 7313 7315 7314\nf 7314 7315 7316\nf 7315 7317 7316\nf 7316 7317 7318\nf 7317 7319 7318\nf 7318 7319 7320\nf 7319 7321 7320\nf 7320 7321 7322\nf 7321 7323 7322\nf 7322 7323 7324\nf 7323 7325 7324\nf 7324 7325 7326\nf 7325 7327 7326\nf 7326 7327 7328\nf 7327 7329 7328\nf 7328 7329 7330\nf 7329 7331 7330\nf 7330 7331 7332\nf 7331 7333 7332\nf 7332 7333 7334\nf 7333 7335 7334\nf 7334 7335 7336\nf 7335 7337 7336\nf 7336 7337 7338\nf 7337 7339 7338\nf 7338 7339 7340\nf 7339 7341 7340\nf 7340 7341 7342\nf 7341 7343 7342\nf 7342 7343 7344\nf 7343 7373 7344\nf 7344 7373 7376\nf 7344 7376 7345\nf 7345 7376 7347\nf 7346 7347 7376\nf 7346 7348 7347\nf 7346 7376 7374\nf 7347 7348 7349\nf 7348 7350 7349\nf 7349 7350 7351\nf 7350 7352 7351\nf 7351 7352 7353\nf 7352 7354 7353\nf 7353 7354 7355\nf 7354 7356 7355\nf 7355 7356 7357\nf 7356 7358 7357\nf 7357 7358 7359\nf 7358 7360 7359\nf 7359 7360 7361\nf 7360 7362 7361\nf 7361 7362 7363\nf 7362 7364 7363\nf 7363 7364 7365\nf 7364 7366 7365\nf 7365 7366 7367\nf 7366 7369 7367\nf 7367 7369 7370\nf 7368 7370 7369\nf 7371 7377 8810\nf 7371 8810 8808\nf 7372 8807 8809\nf 7372 8809 7378\nf 7373 7375 7376\nf 7374 7376 7375\nf 7377 7379 8812\nf 7377 8812 8810\nf 7378 8809 8811\nf 7378 8811 7380\nf 7379 7381 8814\nf 7379 8814 8812\nf 7380 8811 8813\nf 7380 8813 7382\nf 7381 7383 8816\nf 7381 8816 8814\nf 7382 8813 8815\nf 7382 8815 7385\nf 7383 7384 8818\nf 7383 8818 8816\nf 7384 7386 7388\nf 7384 7388 8818\nf 7385 8815 8817\nf 7385 8817 7389\nf 7386 7387 7388\nf 7387 7391 7388\nf 7388 7391 8818\nf 7389 7394 7390\nf 7389 8817 8819\nf 7389 8819 8821\nf 7389 8821 7394\nf 7390 7394 7393\nf 7391 7392 8822\nf 7391 8820 8818\nf 7391 8822 8820\nf 7392 7395 7396\nf 7392 7396 8822\nf 7393 7394 7399\nf 7393 7399 7397\nf 7394 8821 7399\nf 7395 7403 7396\nf 7396 7403 7404\nf 7396 7404 8824\nf 7396 8824 8822\nf 7397 7399 7398\nf 7398 7399 8823\nf 7398 8823 7405\nf 7399 8821 8823\nf 7400 7420 7422\nf 7400 7422 7423\nf 7400 7423 7401\nf 7401 7423 7426\nf 7401 7426 7402\nf 7402 7426 7424\nf 7403 7427 7404\nf 7404 7427 7428\nf 7404 7428 8826\nf 7404 8826 8824\nf 7405 8823 8825\nf 7405 8825 7429\nf 7406 7453 7455\nf 7406 7455 7456\nf 7406 7456 7407\nf 7407 7456 7457\nf 7407 7457 7408\nf 7408 7457 7458\nf 7408 7458 7409\nf 7409 7458 7459\nf 7409 7459 7410\nf 7410 7459 7460\nf 7410 7460 7411\nf 7411 7460 7461\nf 7411 7461 7412\nf 7412 7461 7462\nf 7412 7462 7413\nf 7413 7462 7463\nf 7413 7463 7414\nf 7414 7463 7464\nf 7414 7464 7415\nf 7415 7464 7465\nf 7415 7465 7416\nf 7416 7465 7466\nf 7416 7466 7417\nf 7417 7466 7467\nf 7417 7467 7418\nf 7418 7467 7468\nf 7418 7468 7419\nf 7419 7468 7469\nf 7419 7469 7421\nf 7420 7421 7422\nf 7421 7469 7422\nf 7422 7469 7470\nf 7422 7470 7472\nf 7422 7472 7423\nf 7423 7472 7426\nf 7424 7426 7425\nf 7425 7426 7472\nf 7425 7472 7471\nf 7427 7475 8829\nf 7427 8829 7428\nf 7428 8827 8826\nf 7428 8829 8827\nf 7429 8825 8828\nf 7429 8828 7477\nf 7430 7488 7490\nf 7430 7490 7491\nf 7430 7491 7431\nf 7431 7491 7492\nf 7431 7492 7432\nf 7432 7492 7493\nf 7432 7493 7433\nf 7433 7493 7494\nf 7433 7494 7434\nf 7434 7494 7495\nf 7434 7495 7435\nf 7435 7495 7496\nf 7435 7496 7436\nf 7436 7496 7497\nf 7436 7497 7437\nf 7437 7497 7498\nf 7437 7498 7438\nf 7438 7498 7499\nf 7438 7499 7439\nf 7439 7499 7500\nf 7439 7500 7440\nf 7440 7500 7501\nf 7440 7501 7441\nf 7441 7501 7502\nf 7441 7502 7442\nf 7442 7502 7503\nf 7442 7503 7443\nf 7443 7503 7504\nf 7443 7504 7444\nf 7444 7504 7505\nf 7444 7505 7445\nf 7445 7505 7506\nf 7445 7506 7446\nf 7446 7506 7507\nf 7446 7507 7447\nf 7447 7507 7508\nf 7447 7508 7448\nf 7448 7508 7509\nf 7448 7509 7449\nf 7449 7509 7510\nf 7449 7510 7450\nf 7450 7510 7511\nf 7450 7511 7451\nf 7451 7511 7512\nf 7451 7512 7452\nf 7452 7512 7513\nf 7452 7513 7454\nf 7453 7454 7455\nf 7454 7513 7455\nf 7455 7513 7514\nf 7455 7514 7515\nf 7455 7515 7456\nf 7456 7515 7516\nf 7456 7516 7457\nf 7457 7516 7517\nf 7457 7517 7458\nf 7458 7517 7518\nf 7458 7518 7459\nf 7459 7518 7519\nf 7459 7519 7460\nf 7460 7519 7520\nf 7460 7520 7461\nf 7461 7520 7521\nf 7461 7521 7462\nf 7462 7521 7522\nf 7462 7522 7463\nf 7463 7522 7523\nf 7463 7523 7464\nf 7464 7523 7524\nf 7464 7524 7465\nf 7465 7524 7525\nf 7465 7525 7466\nf 7466 7525 7526\nf 7466 7526 7467\nf 7467 7526 7527\nf 7467 7527 7468\nf 7468 7527 7528\nf 7468 7528 7469\nf 7469 7528 7529\nf 7469 7529 7470\nf 7470 7529 7530\nf 7470 7530 7472\nf 7471 7472 7531\nf 7471 7531 7473\nf 7472 7530 7531\nf 7473 7531 7533\nf 7473 7533 7474\nf 7474 7533 7532\nf 7475 7476 8832\nf 7475 8832 8829\nf 7476 7546 7548\nf 7476 7548 8832\nf 7477 8828 8831\nf 7477 8831 7549\nf 7478 7557 7559\nf 7478 7559 7560\nf 7478 7560 7479\nf 7479 7560 7561\nf 7479 7561 7480\nf 7480 7561 7562\nf 7480 7562 7481\nf 7481 7562 7563\nf 7481 7563 7482\nf 7482 7563 7564\nf 7482 7564 7483\nf 7483 7564 7565\nf 7483 7565 7484\nf 7484 7565 7566\nf 7484 7566 7485\nf 7485 7566 7567\nf 7485 7567 7486\nf 7486 7567 7568\nf 7486 7568 7487\nf 7487 7568 7569\nf 7487 7569 7489\nf 7488 7489 7490\nf 7489 7569 7490\nf 7490 7569 7570\nf 7490 7570 7571\nf 7490 7571 7491\nf 7491 7571 7572\nf 7491 7572 7492\nf 7492 7572 7573\nf 7492 7573 7493\nf 7493 7573 7574\nf 7493 7574 7494\nf 7494 7574 7575\nf 7494 7575 7495\nf 7495 7575 7576\nf 7495 7576 7496\nf 7496 7576 7577\nf 7496 7577 7497\nf 7497 7577 7578\nf 7497 7578 7498\nf 7498 7578 7579\nf 7498 7579 7499\nf 7499 7579 7580\nf 7499 7580 7500\nf 7500 7580 7581\nf 7500 7581 7501\nf 7501 7581 7582\nf 7501 7582 7502\nf 7502 7582 7583\nf 7502 7583 7503\nf 7503 7583 7584\nf 7503 7584 7504\nf 7504 7584 7585\nf 7504 7585 7505\nf 7505 7585 7586\nf 7505 7586 7506\nf 7506 7586 7587\nf 7506 7587 7507\nf 7507 7587 7588\nf 7507 7588 7508\nf 7508 7588 7589\nf 7508 7589 7509\nf 7509 7589 7590\nf 7509 7590 7510\nf 7510 7590 7591\nf 7510 7591 7511\nf 7511 7591 7592\nf 7511 7592 7512\nf 7512 7592 7593\nf 7512 7593 7513\nf 7513 7593 7594\nf 7513 7594 7514\nf 7514 7594 7595\nf 7514 7595 7515\nf 7515 7595 7596\nf 7515 7596 7516\nf 7516 7596 7597\nf 7516 7597 7517\nf 7517 7597 7598\nf 7517 7598 7518\nf 7518 7598 7599\nf 7518 7599 7519\nf 7519 7599 7600\nf 7519 7600 7520\nf 7520 7600 7601\nf 7520 7601 7521\nf 7521 7601 7602\nf 7521 7602 7522\nf 7522 7602 7603\nf 7522 7603 7523\nf 7523 7603 7604\nf 7523 7604 7524\nf 7524 7604 7605\nf 7524 7605 7525\nf 7525 7605 7606\nf 7525 7606 7526\nf 7526 7606 7607\nf 7526 7607 7527\nf 7527 7607 7608\nf 7527 7608 7528\nf 7528 7608 7609\nf 7528 7609 7529\nf 7529 7609 7610\nf 7529 7610 7530\nf 7530 7610 7611\nf 7530 7611 7531\nf 7531 7611 7612\nf 7531 7612 7533\nf 7532 7533 7613\nf 7532 7613 7534\nf 7533 7612 7613\nf 7534 7613 7614\nf 7534 7614 7535\nf 7535 7614 7615\nf 7535 7615 7536\nf 7536 7615 7616\nf 7536 7616 7537\nf 7537 7616 7617\nf 7537 7617 7538\nf 7538 7617 7618\nf 7538 7618 7539\nf 7539 7618 7619\nf 7539 7619 7540\nf 7540 7619 7620\nf 7540 7620 7541\nf 7541 7620 7621\nf 7541 7621 7542\nf 7542 7621 7622\nf 7542 7622 7543\nf 7543 7622 7623\nf 7543 7623 7544\nf 7544 7623 7625\nf 7544 7625 7545\nf 7545 7625 7624\nf 7546 7547 7548\nf 7547 7634 7636\nf 7547 7636 7548\nf 7548 7636 8833\nf 7548 8833 8832\nf 7549 7638 7550\nf 7549 8831 8834\nf 7549 8834 8837\nf 7549 8837 7638\nf 7550 7638 7637\nf 7551 7642 7644\nf 7551 7644 7645\nf 7551 7645 7552\nf 7552 7645 7646\nf 7552 7646 7553\nf 7553 7646 7647\nf 7553 7647 7554\nf 7554 7647 7648\nf 7554 7648 7555\nf 7555 7648 7649\nf 7555 7649 7556\nf 7556 7649 7650\nf 7556 7650 7558\nf 7557 7558 7559\nf 7558 7650 7559\nf 7559 7650 7651\nf 7559 7651 7652\nf 7559 7652 7560\nf 7560 7652 7653\nf 7560 7653 7561\nf 7561 7653 7654\nf 7561 7654 7562\nf 7562 7654 7655\nf 7562 7655 7563\nf 7563 7655 7656\nf 7563 7656 7564\nf 7564 7656 7657\nf 7564 7657 7565\nf 7565 7657 7658\nf 7565 7658 7566\nf 7566 7658 7659\nf 7566 7659 7567\nf 7567 7659 7660\nf 7567 7660 7568\nf 7568 7660 7661\nf 7568 7661 7569\nf 7569 7661 7662\nf 7569 7662 7570\nf 7570 7662 7663\nf 7570 7663 7571\nf 7571 7663 7664\nf 7571 7664 7572\nf 7572 7664 7665\nf 7572 7665 7573\nf 7573 7665 7666\nf 7573 7666 7574\nf 7574 7666 7667\nf 7574 7667 7575\nf 7575 7667 7668\nf 7575 7668 7576\nf 7576 7668 7669\nf 7576 7669 7577\nf 7577 7669 7670\nf 7577 7670 7578\nf 7578 7670 7671\nf 7578 7671 7579\nf 7579 7671 7672\nf 7579 7672 7580\nf 7580 7672 7673\nf 7580 7673 7581\nf 7581 7673 7674\nf 7581 7674 7582\nf 7582 7674 7675\nf 7582 7675 7583\nf 7583 7675 7676\nf 7583 7676 7584\nf 7584 7676 7677\nf 7584 7677 7585\nf 7585 7677 7678\nf 7585 7678 7586\nf 7586 7678 7679\nf 7586 7679 7587\nf 7587 7679 7680\nf 7587 7680 7588\nf 7588 7680 7681\nf 7588 7681 7589\nf 7589 7681 7682\nf 7589 7682 7590\nf 7590 7682 7683\nf 7590 7683 7591\nf 7591 7683 7684\nf 7591 7684 7592\nf 7592 7684 7685\nf 7592 7685 7593\nf 7593 7685 7686\nf 7593 7686 7594\nf 7594 7686 7687\nf 7594 7687 7595\nf 7595 7687 7688\nf 7595 7688 7596\nf 7596 7688 7689\nf 7596 7689 7597\nf 7597 7689 7690\nf 7597 7690 7598\nf 7598 7690 7691\nf 7598 7691 7599\nf 7599 7691 7692\nf 7599 7692 7600\nf 7600 7692 7693\nf 7600 7693 7601\nf 7601 7693 7694\nf 7601 7694 7602\nf 7602 7694 7695\nf 7602 7695 7603\nf 7603 7695 7696\nf 7603 7696 7604\nf 7604 7696 7697\nf 7604 7697 7605\nf 7605 7697 7698\nf 7605 7698 7606\nf 7606 7698 7699\nf 7606 7699 7607\nf 7607 7699 7700\nf 7607 7700 7608\nf 7608 7700 7701\nf 7608 7701 7609\nf 7609 7701 7702\nf 7609 7702 7610\nf 7610 7702 7703\nf 7610 7703 7611\nf 7611 7703 7704\nf 7611 7704 7612\nf 7612 7704 7705\nf 7612 7705 7613\nf 7613 7705 7706\nf 7613 7706 7614\nf 7614 7706 7707\nf 7614 7707 7615\nf 7615 7707 7708\nf 7615 7708 7616\nf 7616 7708 7709\nf 7616 7709 7617\nf 7617 7709 7710\nf 7617 7710 7618\nf 7618 7710 7711\nf 7618 7711 7619\nf 7619 7711 7712\nf 7619 7712 7620\nf 7620 7712 7713\nf 7620 7713 7621\nf 7621 7713 7714\nf 7621 7714 7622\nf 7622 7714 7715\nf 7622 7715 7623\nf 7623 7715 7716\nf 7623 7716 7625\nf 7624 7625 7717\nf 7624 7717 7626\nf 7625 7716 7717\nf 7626 7717 7718\nf 7626 7718 7627\nf 7627 7718 7719\nf 7627 7719 7628\nf 7628 7719 7720\nf 7628 7720 7629\nf 7629 7720 7721\nf 7629 7721 7630\nf 7630 7721 7722\nf 7630 7722 7631\nf 7631 7722 7723\nf 7631 7723 7632\nf 7632 7723 7724\nf 7632 7724 7633\nf 7633 7724 7725\nf 7633 7725 7635\nf 7634 7635 7636\nf 7635 7725 7636\nf 7636 7725 7726\nf 7636 7726 8913\nf 7636 8835 8833\nf 7636 8913 8835\nf 7637 7638 8838\nf 7637 8838 8915\nf 7637 8915 7727\nf 7638 8837 8838\nf 7639 7729 7731\nf 7639 7731 7732\nf 7639 7732 7640\nf 7640 7732 7733\nf 7640 7733 7641\nf 7641 7733 7734\nf 7641 7734 7643\nf 7642 7643 7644\nf 7643 7734 7644\nf 7644 7734 7735\nf 7644 7735 7736\nf 7644 7736 7645\nf 7645 7736 7737\nf 7645 7737 7646\nf 7646 7737 7738\nf 7646 7738 7647\nf 7647 7738 7739\nf 7647 7739 7648\nf 7648 7739 7740\nf 7648 7740 7649\nf 7649 7740 7741\nf 7649 7741 7650\nf 7650 7741 7742\nf 7650 7742 7651\nf 7651 7742 7652\nf 7652 7742 8927\nf 7652 8839 7653\nf 7652 8927 8839\nf 7653 8839 8840\nf 7653 8840 7654\nf 7654 8840 8841\nf 7654 8841 7655\nf 7655 8841 8842\nf 7655 8842 7656\nf 7656 8842 8843\nf 7656 8843 7657\nf 7657 8843 8844\nf 7657 8844 7658\nf 7658 8844 8845\nf 7658 8845 7659\nf 7659 8845 8846\nf 7659 8846 7660\nf 7660 8846 8847\nf 7660 8847 7661\nf 7661 8847 8848\nf 7661 8848 7662\nf 7662 8848 8849\nf 7662 8849 7663\nf 7663 8849 8850\nf 7663 8850 7664\nf 7664 8850 8851\nf 7664 8851 7665\nf 7665 8851 8852\nf 7665 8852 7666\nf 7666 8852 8853\nf 7666 8853 7667\nf 7667 8853 8854\nf 7667 8854 7668\nf 7668 8854 8855\nf 7668 8855 7669\nf 7669 8855 8856\nf 7669 8856 7670\nf 7670 8856 8857\nf 7670 8857 7671\nf 7671 8857 8858\nf 7671 8858 7672\nf 7672 8858 8859\nf 7672 8859 7673\nf 7673 8859 8860\nf 7673 8860 7674\nf 7674 8860 8861\nf 7674 8861 7675\nf 7675 8861 8862\nf 7675 8862 7676\nf 7676 8862 8863\nf 7676 8863 7677\nf 7677 8863 8864\nf 7677 8864 7678\nf 7678 8864 8865\nf 7678 8865 7679\nf 7679 8865 8866\nf 7679 8866 7680\nf 7680 8866 8867\nf 7680 8867 7681\nf 7681 8867 8868\nf 7681 8868 7682\nf 7682 8868 8869\nf 7682 8869 7683\nf 7683 8869 8870\nf 7683 8870 7684\nf 7684 8870 8871\nf 7684 8871 7685\nf 7685 8871 8872\nf 7685 8872 7686\nf 7686 8872 8873\nf 7686 8873 7687\nf 7687 8873 8874\nf 7687 8874 7688\nf 7688 8874 8875\nf 7688 8875 7689\nf 7689 8875 8876\nf 7689 8876 7690\nf 7690 8876 8877\nf 7690 8877 7691\nf 7691 8877 8878\nf 7691 8878 7692\nf 7692 8878 8879\nf 7692 8879 7693\nf 7693 8879 8880\nf 7693 8880 7694\nf 7694 8880 8881\nf 7694 8881 7695\nf 7695 8881 8882\nf 7695 8882 7696\nf 7696 8882 8883\nf 7696 8883 7697\nf 7697 8883 8884\nf 7697 8884 7698\nf 7698 8884 8885\nf 7698 8885 7699\nf 7699 8885 8886\nf 7699 8886 7700\nf 7700 8886 8887\nf 7700 8887 7701\nf 7701 8887 8888\nf 7701 8888 7702\nf 7702 8888 8889\nf 7702 8889 7703\nf 7703 8889 8890\nf 7703 8890 7704\nf 7704 8890 8891\nf 7704 8891 7705\nf 7705 8891 8892\nf 7705 8892 7706\nf 7706 8892 8893\nf 7706 8893 7707\nf 7707 8893 8894\nf 7707 8894 7708\nf 7708 8894 8895\nf 7708 8895 7709\nf 7709 8895 8896\nf 7709 8896 7710\nf 7710 8896 8897\nf 7710 8897 7711\nf 7711 8897 8898\nf 7711 8898 7712\nf 7712 8898 8899\nf 7712 8899 7713\nf 7713 8899 8900\nf 7713 8900 7714\nf 7714 8900 8901\nf 7714 8901 7715\nf 7715 8901 8902\nf 7715 8902 7716\nf 7716 8902 8903\nf 7716 8903 7717\nf 7717 8903 8904\nf 7717 8904 7718\nf 7718 8904 8905\nf 7718 8905 7719\nf 7719 8905 8906\nf 7719 8906 7720\nf 7720 8906 8907\nf 7720 8907 7721\nf 7721 8907 8908\nf 7721 8908 7722\nf 7722 8908 8909\nf 7722 8909 7723\nf 7723 8909 8910\nf 7723 8910 7724\nf 7724 8910 8911\nf 7724 8911 7725\nf 7725 8911 8912\nf 7725 8912 7726\nf 7726 8912 8914\nf 7726 8914 8913\nf 7727 8915 7743\nf 7728 7744 7746\nf 7728 7746 7747\nf 7728 7747 7730\nf 7729 7730 7731\nf 7730 7747 7731\nf 7731 7747 8916\nf 7731 8916 7732\nf 7732 8916 8917\nf 7732 8917 7733\nf 7733 8917 8918\nf 7733 8918 7734\nf 7734 8918 8919\nf 7734 8919 7735\nf 7735 8919 8920\nf 7735 8920 7736\nf 7736 8920 8921\nf 7736 8921 7737\nf 7737 8921 8922\nf 7737 8922 7738\nf 7738 8922 8923\nf 7738 8923 7739\nf 7739 8923 8924\nf 7739 8924 7740\nf 7740 8924 8925\nf 7740 8925 7741\nf 7741 8925 8926\nf 7741 8926 7742\nf 7742 8926 8928\nf 7742 8928 8927\nf 7743 8915 9003\nf 7743 9003 7748\nf 7744 7745 7746\nf 7745 7749 7751\nf 7745 7751 7746\nf 7746 7751 9004\nf 7746 9004 7747\nf 7747 9004 9006\nf 7747 9005 8916\nf 7747 9006 9005\nf 7748 9003 9010\nf 7748 9010 7752\nf 7749 7750 7751\nf 7750 7753 7754\nf 7750 7754 7751\nf 7751 7754 9012\nf 7751 9011 9004\nf 7751 9012 9011\nf 7752 9010 9014\nf 7752 9014 7755\nf 7753 7756 9018\nf 7753 9018 7754\nf 7754 9015 9012\nf 7754 9016 9015\nf 7754 9018 9016\nf 7755 9014 9017\nf 7755 9017 7758\nf 7756 7757 9021\nf 7756 9021 9018\nf 7757 7759 7760\nf 7757 7760 9021\nf 7758 9017 9020\nf 7758 9020 7761\nf 7759 7762 7760\nf 7760 7762 7763\nf 7760 7763 9024\nf 7760 9024 9021\nf 7761 9020 9022\nf 7761 9022 7764\nf 7762 7766 7763\nf 7763 7766 7767\nf 7763 7767 9026\nf 7763 9026 9024\nf 7764 7765 7769\nf 7764 7769 7768\nf 7764 9022 7765\nf 7765 9022 9023\nf 7765 9023 9025\nf 7765 9025 7769\nf 7766 7770 7767\nf 7767 7770 7771\nf 7767 7771 9028\nf 7767 9028 9026\nf 7768 7769 7773\nf 7768 7773 7772\nf 7769 9025 9027\nf 7769 9027 7773\nf 7770 7774 7771\nf 7771 7774 7775\nf 7771 7775 9030\nf 7771 9030 9028\nf 7772 7773 7777\nf 7772 7777 7776\nf 7773 9027 9029\nf 7773 9029 7777\nf 7774 7778 7775\nf 7775 7778 7779\nf 7775 7779 9032\nf 7775 9032 9030\nf 7776 7777 7781\nf 7776 7781 7780\nf 7777 9029 9031\nf 7777 9031 7781\nf 7778 7782 7779\nf 7779 7782 7783\nf 7779 7783 9034\nf 7779 9034 9032\nf 7780 7781 7785\nf 7780 7785 7784\nf 7781 9031 9033\nf 7781 9033 7785\nf 7782 7786 7783\nf 7783 7786 7787\nf 7783 7787 9036\nf 7783 9036 9034\nf 7784 7785 7790\nf 7784 7790 7788\nf 7785 9033 9035\nf 7785 9035 7790\nf 7786 7791 7787\nf 7787 7791 7792\nf 7787 7792 9038\nf 7787 9038 9036\nf 7788 7790 7789\nf 7789 7790 9037\nf 7789 9037 7793\nf 7790 9035 9037\nf 7791 7794 7792\nf 7792 7794 7795\nf 7792 7795 9040\nf 7792 9040 9038\nf 7793 9037 9039\nf 7793 9039 7796\nf 7794 7797 7795\nf 7795 7797 7798\nf 7795 7798 9042\nf 7795 9042 9040\nf 7796 9039 9041\nf 7796 9041 7799\nf 7797 7800 7798\nf 7798 7800 7801\nf 7798 7801 9044\nf 7798 9044 9042\nf 7799 9041 9043\nf 7799 9043 7802\nf 7800 7803 7801\nf 7801 7803 7804\nf 7801 7804 9046\nf 7801 9046 9044\nf 7802 9043 9045\nf 7802 9045 7805\nf 7803 7806 7804\nf 7804 7806 7807\nf 7804 7807 9048\nf 7804 9048 9046\nf 7805 9045 9047\nf 7805 9047 7808\nf 7806 7809 7807\nf 7807 7809 7810\nf 7807 7810 9051\nf 7807 9051 9048\nf 7808 9047 9049\nf 7808 9049 7811\nf 7809 7813 7810\nf 7810 7813 7814\nf 7810 7814 9053\nf 7810 9053 9051\nf 7811 7812 7816\nf 7811 7816 7815\nf 7811 9049 7812\nf 7812 9049 9050\nf 7812 9050 9052\nf 7812 9052 7816\nf 7813 7817 7814\nf 7814 7817 7818\nf 7814 7818 9055\nf 7814 9055 9053\nf 7815 7816 7821\nf 7815 7821 7819\nf 7816 9052 9054\nf 7816 9054 7821\nf 7817 7822 7818\nf 7818 7822 7823\nf 7818 7823 9057\nf 7818 9057 9055\nf 7819 7821 7820\nf 7820 7821 9056\nf 7820 9056 7824\nf 7821 9054 9056\nf 7822 7825 7823\nf 7823 7825 7827\nf 7823 7827 9059\nf 7823 9059 9057\nf 7824 9056 9058\nf 7824 9058 7828\nf 7825 7826 7827\nf 7826 7829 7830\nf 7826 7830 7827\nf 7827 7830 7831\nf 7827 7831 9061\nf 7827 9061 9059\nf 7828 9058 9060\nf 7828 9060 7832\nf 7829 7833 7830\nf 7830 7833 7834\nf 7830 7834 7831\nf 7831 7834 9064\nf 7831 9062 9061\nf 7831 9064 9062\nf 7832 9060 9063\nf 7832 9063 7835\nf 7833 7836 7834\nf 7834 7836 7837\nf 7834 7837 9067\nf 7834 9067 9064\nf 7835 9063 9066\nf 7835 9066 7838\nf 7836 7839 7837\nf 7837 7839 7840\nf 7837 7840 9070\nf 7837 9070 9067\nf 7838 9066 9069\nf 7838 9069 7841\nf 7839 7842 7840\nf 7840 7842 7843\nf 7840 7843 9073\nf 7840 9073 9070\nf 7841 9069 9072\nf 7841 9072 7844\nf 7842 7845 7843\nf 7843 7845 7846\nf 7843 7846 9076\nf 7843 9076 9073\nf 7844 9072 9075\nf 7844 9075 7847\nf 7845 7848 7846\nf 7846 7848 7849\nf 7846 7849 9079\nf 7846 9079 9076\nf 7847 9075 9077\nf 7847 9077 7850\nf 7848 7851 7849\nf 7849 7851 7852\nf 7849 7852 9082\nf 7849 9082 9079\nf 7850 9077 9080\nf 7850 9080 7853\nf 7851 7854 7852\nf 7852 7854 7855\nf 7852 7855 9085\nf 7852 9085 9082\nf 7853 9080 9083\nf 7853 9083 7856\nf 7854 7857 7855\nf 7855 7857 7858\nf 7855 7858 9088\nf 7855 9088 9085\nf 7856 9083 9086\nf 7856 9086 7859\nf 7857 7860 7858\nf 7858 7860 7861\nf 7858 7861 9091\nf 7858 9091 9088\nf 7859 9086 9089\nf 7859 9089 7862\nf 7860 7863 9095\nf 7860 9095 7861\nf 7861 9092 9091\nf 7861 9095 9092\nf 7862 9089 9093\nf 7862 9093 7864\nf 7863 7865 9100\nf 7863 9100 9095\nf 7864 9093 9097\nf 7864 9097 7866\nf 7865 7868 9103\nf 7865 9103 9100\nf 7866 7867 7870\nf 7866 7870 7869\nf 7866 9097 7867\nf 7867 9097 9098\nf 7867 9098 9102\nf 7867 9102 7870\nf 7868 7871 9106\nf 7868 9106 9103\nf 7869 7870 7873\nf 7869 7873 7872\nf 7870 9102 9105\nf 7870 9105 7873\nf 7871 7874 9108\nf 7871 9108 9106\nf 7872 7873 7876\nf 7872 7876 7875\nf 7873 9105 9107\nf 7873 9107 7876\nf 7874 7877 9110\nf 7874 9110 9108\nf 7875 7876 7880\nf 7875 7880 7878\nf 7876 9107 9109\nf 7876 9109 7880\nf 7877 7881 9112\nf 7877 9112 9110\nf 7878 7880 7879\nf 7879 7880 9111\nf 7879 9111 7882\nf 7880 9109 9111\nf 7881 7883 9114\nf 7881 9114 9112\nf 7882 9111 9113\nf 7882 9113 7884\nf 7883 7885 9116\nf 7883 9116 9114\nf 7884 9113 9115\nf 7884 9115 7886\nf 7885 7887 9118\nf 7885 9118 9116\nf 7886 9115 9117\nf 7886 9117 7888\nf 7887 7889 9120\nf 7887 9120 9118\nf 7888 9117 9119\nf 7888 9119 7890\nf 7889 7891 9122\nf 7889 9122 9120\nf 7890 9119 9121\nf 7890 9121 7892\nf 7891 7893 9124\nf 7891 9124 9122\nf 7892 9121 9123\nf 7892 9123 7894\nf 7893 7895 9126\nf 7893 9126 9124\nf 7894 9123 9125\nf 7894 9125 7896\nf 7895 7897 9128\nf 7895 9128 9126\nf 7896 9125 9127\nf 7896 9127 7898\nf 7897 7899 9130\nf 7897 9130 9128\nf 7898 9127 9129\nf 7898 9129 7900\nf 7899 7901 9132\nf 7899 9132 9130\nf 7900 9129 9131\nf 7900 9131 7902\nf 7901 7903 9134\nf 7901 9134 9132\nf 7902 9131 9133\nf 7902 9133 7904\nf 7903 7905 9138\nf 7903 9138 9134\nf 7904 9133 9135\nf 7904 9135 7906\nf 7905 7909 9140\nf 7905 9140 9138\nf 7906 7908 7907\nf 7906 9135 7908\nf 7907 7908 9139\nf 7907 9139 7910\nf 7908 9135 9136\nf 7908 9136 9139\nf 7909 7911 9142\nf 7909 9142 9140\nf 7910 9139 9141\nf 7910 9141 7913\nf 7911 7912 9144\nf 7911 9144 9142\nf 7912 7914 7915\nf 7912 7915 9144\nf 7913 9141 9143\nf 7913 9143 7916\nf 7914 7917 7915\nf 7915 7917 7918\nf 7915 7918 9146\nf 7915 9146 9144\nf 7916 9143 9145\nf 7916 9145 7919\nf 7917 7920 7918\nf 7918 7920 7921\nf 7918 7921 9148\nf 7918 9148 9146\nf 7919 9145 9147\nf 7919 9147 7922\nf 7920 7923 9151\nf 7920 9151 7921\nf 7921 9149 9148\nf 7921 9151 9149\nf 7922 9147 9150\nf 7922 9150 7924\nf 7923 7925 9154\nf 7923 9154 9151\nf 7924 9150 9153\nf 7924 9153 7926\nf 7925 7927 9157\nf 7925 9157 9154\nf 7926 9153 9156\nf 7926 9156 7928\nf 7927 7929 9160\nf 7927 9160 9157\nf 7928 9156 9159\nf 7928 9159 7930\nf 7929 7931 9162\nf 7929 9162 9160\nf 7930 9159 9161\nf 7930 9161 7932\nf 7931 7934 9165\nf 7931 9165 9162\nf 7932 9161 9163\nf 7932 9163 7933\nf 7933 9163 9164\nf 7933 9164 9166\nf 7933 9166 7935\nf 7934 7936 9167\nf 7934 9167 9165\nf 7935 9166 7937\nf 7936 7938 9169\nf 7936 9169 9167\nf 7937 9166 9168\nf 7937 9168 7939\nf 7938 7940 9171\nf 7938 9171 9169\nf 7939 9168 9170\nf 7939 9170 7941\nf 7940 7942 9173\nf 7940 9173 9171\nf 7941 9170 9172\nf 7941 9172 7944\nf 7942 7943 9175\nf 7942 9175 9173\nf 7943 7945 7946\nf 7943 7946 9175\nf 7944 9172 9174\nf 7944 9174 7947\nf 7945 7948 7946\nf 7946 7948 7949\nf 7946 7949 9177\nf 7946 9177 9175\nf 7947 9174 9176\nf 7947 9176 7950\nf 7948 7951 7949\nf 7949 7951 7952\nf 7949 7952 9179\nf 7949 9179 9177\nf 7950 9176 9178\nf 7950 9178 7953\nf 7951 7954 7952\nf 7952 7954 7955\nf 7952 7955 9181\nf 7952 9181 9179\nf 7953 9178 9180\nf 7953 9180 7956\nf 7954 7957 9184\nf 7954 9184 7955\nf 7955 9182 9181\nf 7955 9184 9182\nf 7956 9180 9183\nf 7956 9183 7958\nf 7957 7959 9187\nf 7957 9187 9184\nf 7958 9183 9186\nf 7958 9186 7960\nf 7959 7961 9189\nf 7959 9189 9187\nf 7960 9186 9188\nf 7960 9188 7962\nf 7961 7963 9191\nf 7961 9191 9189\nf 7962 9188 9190\nf 7962 9190 7964\nf 7963 7965 9193\nf 7963 9193 9191\nf 7964 9190 9192\nf 7964 9192 7966\nf 7965 7967 9195\nf 7965 9195 9193\nf 7966 9192 9194\nf 7966 9194 7968\nf 7967 7969 9197\nf 7967 9197 9195\nf 7968 9194 9196\nf 7968 9196 7970\nf 7969 7971 9199\nf 7969 9199 9197\nf 7970 9196 9198\nf 7970 9198 7972\nf 7971 7973 9201\nf 7971 9201 9199\nf 7972 9198 9200\nf 7972 9200 7974\nf 7973 7975 9203\nf 7973 9203 9201\nf 7974 9200 9202\nf 7974 9202 7977\nf 7975 7976 9205\nf 7975 9205 9203\nf 7976 7978 7979\nf 7976 7979 9205\nf 7977 9202 9204\nf 7977 9204 7980\nf 7978 7981 7979\nf 7979 7981 7982\nf 7979 7982 9208\nf 7979 9208 9205\nf 7980 9204 9206\nf 7980 9206 7983\nf 7981 7984 9212\nf 7981 9212 7982\nf 7982 9209 9208\nf 7982 9212 9209\nf 7983 9206 9210\nf 7983 9210 7985\nf 7984 7986 9215\nf 7984 9215 9212\nf 7985 9210 9213\nf 7985 9213 7987\nf 7986 7988 9218\nf 7986 9218 9215\nf 7987 9213 9216\nf 7987 9216 7990\nf 7988 7989 9220\nf 7988 9220 9218\nf 7989 7991 7992\nf 7989 7992 9220\nf 7990 9216 9219\nf 7990 9219 7993\nf 7991 7994 9223\nf 7991 9223 7992\nf 7992 9221 9220\nf 7992 9223 9221\nf 7993 9219 9222\nf 7993 9222 7995\nf 7994 7996 9225\nf 7994 9225 9223\nf 7995 9222 9224\nf 7995 9224 7998\nf 7996 7997 9227\nf 7996 9227 9225\nf 7997 7999 8000\nf 7997 8000 9227\nf 7998 9224 9226\nf 7998 9226 8001\nf 7999 8002 9231\nf 7999 9231 8000\nf 8000 9228 9227\nf 8000 9231 9228\nf 8001 9226 9230\nf 8001 9230 8003\nf 8002 8004 9235\nf 8002 9235 9231\nf 8003 9230 9232\nf 8003 9232 8005\nf 8004 8007 9238\nf 8004 9238 9235\nf 8005 8006 9237\nf 8005 9232 8006\nf 8005 9237 9240\nf 8005 9240 8009\nf 8006 9232 9233\nf 8006 9233 9236\nf 8006 9236 9237\nf 8007 8008 9242\nf 8007 9242 9238\nf 8008 8010 8011\nf 8008 8011 9242\nf 8009 9240 8012\nf 8010 8013 9247\nf 8010 9247 8011\nf 8011 9243 9242\nf 8011 9247 9243\nf 8012 9240 9245\nf 8012 9245 8014\nf 8013 8016 9250\nf 8013 9250 9247\nf 8014 8018 8015\nf 8014 9245 9248\nf 8014 9248 9251\nf 8014 9251 8018\nf 8015 8018 8017\nf 8016 8019 9253\nf 8016 9253 9250\nf 8017 8018 8021\nf 8017 8021 8020\nf 8018 9251 8021\nf 8019 8022 9257\nf 8019 9257 9253\nf 8020 8021 8024\nf 8020 8024 8023\nf 8021 9251 9255\nf 8021 9255 8024\nf 8022 8027 9262\nf 8022 9262 9257\nf 8023 8024 9260\nf 8023 9260 8025\nf 8024 9255 9259\nf 8024 9259 9260\nf 8025 9260 9261\nf 8025 9261 8026\nf 8026 8029 8028\nf 8026 9261 8029\nf 8027 8033 9262\nf 8028 8029 8030\nf 8029 9261 9265\nf 8029 9265 9267\nf 8029 9267 8030\nf 8030 8036 8038\nf 8030 8038 8031\nf 8030 9267 8036\nf 8031 8038 8037\nf 8032 8039 8041\nf 8032 8041 9268\nf 8032 9268 8034\nf 8033 8034 8035\nf 8033 8035 9262\nf 8034 9268 8035\nf 8035 9263 9262\nf 8035 9268 9263\nf 8036 9267 9269\nf 8036 9269 9270\nf 8036 9270 8038\nf 8037 8038 9271\nf 8037 9271 8040\nf 8038 9270 9271\nf 8039 8040 8041\nf 8040 9271 9272\nf 8040 9272 9274\nf 8040 9274 8041\nf 8041 9273 9268\nf 8041 9274 9273\nf 8042 8043 9276\nf 8042 9276 9290\nf 8042 9290 8054\nf 8043 8044 9277\nf 8043 9277 9276\nf 8044 8056 9279\nf 8044 9278 9277\nf 8044 9279 9278\nf 8045 8046 9281\nf 8045 8064 8062\nf 8045 9280 8064\nf 8045 9281 9280\nf 8046 8047 9282\nf 8046 9282 9281\nf 8047 8048 9283\nf 8047 9283 9282\nf 8048 8049 9284\nf 8048 9284 9283\nf 8049 8050 9285\nf 8049 9285 9284\nf 8050 8051 9286\nf 8050 9286 9285\nf 8051 8065 9287\nf 8051 9287 9286\nf 8052 8053 9288\nf 8052 9288 9304\nf 8052 9304 8068\nf 8053 8055 9289\nf 8053 9289 9288\nf 8054 9290 8055\nf 8055 9290 9291\nf 8055 9291 9289\nf 8056 8057 8058\nf 8056 8058 9279\nf 8057 8059 9293\nf 8057 9293 8058\nf 8058 9292 9279\nf 8058 9293 9292\nf 8059 8060 9293\nf 8060 8069 9296\nf 8060 9295 9293\nf 8060 9296 9295\nf 8061 8063 9299\nf 8061 8076 8074\nf 8061 9297 8076\nf 8061 9299 9297\nf 8062 8064 8063\nf 8063 8064 9298\nf 8063 9298 9299\nf 8064 9280 9298\nf 8065 8066 9301\nf 8065 9300 9287\nf 8065 9301 9300\nf 8066 8067 9301\nf 8067 8077 9303\nf 8067 9302 9301\nf 8067 9303 9302\nf 8068 9304 8080\nf 8069 8070 8071\nf 8069 8071 9296\nf 8070 8072 9306\nf 8070 9306 8071\nf 8071 9305 9296\nf 8071 9306 9305\nf 8072 8081 9306\nf 8073 8075 9309\nf 8073 9309 9316\nf 8073 9316 8083\nf 8074 8076 8075\nf 8075 8076 9308\nf 8075 9308 9309\nf 8076 9297 9308\nf 8077 8078 8079\nf 8077 8079 9303\nf 8078 8085 8079\nf 8079 8085 9311\nf 8079 9311 9303\nf 8080 9304 9312\nf 8080 9312 8086\nf 8081 8082 9314\nf 8081 9313 9306\nf 8081 9314 9313\nf 8082 8087 9314\nf 8083 9316 8084\nf 8084 9316 9317\nf 8084 9317 9324\nf 8084 9324 8089\nf 8085 8090 9325\nf 8085 9319 9311\nf 8085 9325 9319\nf 8086 9312 9320\nf 8086 9320 8091\nf 8087 8088 9322\nf 8087 9321 9314\nf 8087 9322 9321\nf 8088 8092 9322\nf 8089 9324 8093\nf 8090 8094 9330\nf 8090 9330 9325\nf 8091 9320 9326\nf 8091 9326 8095\nf 8092 8096 9327\nf 8092 9327 9322\nf 8093 9324 9329\nf 8093 9329 8099\nf 8094 8100 9335\nf 8094 9335 9330\nf 8095 9326 9331\nf 8095 9331 8101\nf 8096 8097 8098\nf 8096 8098 9328\nf 8096 9328 9327\nf 8097 8102 8098\nf 8098 8102 9332\nf 8098 9332 9328\nf 8099 9329 9333\nf 8099 9333 8103\nf 8100 8104 9341\nf 8100 9341 9335\nf 8101 9331 9336\nf 8101 9336 8105\nf 8102 8106 9344\nf 8102 9337 9332\nf 8102 9344 9337\nf 8103 9333 9338\nf 8103 9338 8107\nf 8104 8109 9341\nf 8105 9336 9343\nf 8105 9343 8111\nf 8106 8113 9344\nf 8107 8108 8118\nf 8107 8118 8116\nf 8107 9338 8108\nf 8108 9338 9339\nf 8108 9339 9347\nf 8108 9347 8118\nf 8109 8110 9342\nf 8109 8119 8110\nf 8109 9342 9341\nf 8110 8119 8120\nf 8110 8120 9353\nf 8110 9348 9342\nf 8110 9353 9348\nf 8111 8122 8112\nf 8111 9343 9350\nf 8111 9350 9354\nf 8111 9354 8122\nf 8112 8122 8121\nf 8113 8114 8115\nf 8113 8115 9345\nf 8113 9345 9344\nf 8114 8123 8115\nf 8115 8123 9351\nf 8115 9351 9345\nf 8116 8118 8117\nf 8117 8118 9352\nf 8117 9352 8124\nf 8118 9347 9352\nf 8119 8125 8120\nf 8120 8125 8126\nf 8120 8126 9358\nf 8120 9358 9353\nf 8121 8122 9355\nf 8121 9355 9360\nf 8121 9360 8127\nf 8122 9354 9355\nf 8123 8128 9362\nf 8123 9356 9351\nf 8123 9362 9356\nf 8124 9352 9357\nf 8124 9357 8129\nf 8125 8130 8126\nf 8126 8130 8132\nf 8126 8132 9364\nf 8126 9364 9358\nf 8127 9360 8133\nf 8128 8134 9367\nf 8128 9367 9362\nf 8129 9357 9363\nf 8129 9363 8135\nf 8130 8131 8132\nf 8131 8136 8132\nf 8132 8136 9364\nf 8133 9360 9366\nf 8133 9366 8137\nf 8134 8138 9367\nf 8135 9363 9369\nf 8135 9369 8140\nf 8136 8141 9374\nf 8136 9370 9364\nf 8136 9374 9370\nf 8137 9366 9371\nf 8137 9371 8142\nf 8138 8139 9368\nf 8138 8143 8139\nf 8138 9368 9367\nf 8139 8143 8145\nf 8139 8145 9377\nf 8139 9372 9368\nf 8139 9377 9372\nf 8140 9369 9373\nf 8140 9373 8146\nf 8141 8147 9379\nf 8141 9379 9374\nf 8142 9371 9376\nf 8142 9376 8149\nf 8143 8144 8145\nf 8144 8150 8145\nf 8145 8150 9377\nf 8146 9373 9378\nf 8146 9378 8151\nf 8147 8148 9379\nf 8148 8152 9385\nf 8148 9380 9379\nf 8148 9385 9380\nf 8149 9376 9382\nf 8149 9382 8153\nf 8150 8154 9387\nf 8150 9383 9377\nf 8150 9387 9383\nf 8151 9378 9384\nf 8151 9384 8155\nf 8152 8156 9389\nf 8152 9389 9385\nf 8153 9382 9386\nf 8153 9386 8157\nf 8154 8158 9391\nf 8154 9391 9387\nf 8155 9384 9388\nf 8155 9388 8159\nf 8156 8160 9393\nf 8156 9393 9389\nf 8157 9386 9390\nf 8157 9390 8161\nf 8158 8162 9395\nf 8158 9395 9391\nf 8159 9388 9392\nf 8159 9392 8163\nf 8160 8164 9397\nf 8160 9397 9393\nf 8161 9390 9394\nf 8161 9394 8165\nf 8162 8166 9399\nf 8162 9399 9395\nf 8163 9392 9396\nf 8163 9396 8167\nf 8164 8168 9402\nf 8164 9402 9397\nf 8165 9394 9398\nf 8165 9398 8169\nf 8166 8170 9404\nf 8166 9404 9399\nf 8167 9396 9400\nf 8167 9400 8171\nf 8168 8173 9406\nf 8168 9406 9402\nf 8169 9398 9403\nf 8169 9403 8174\nf 8170 8175 9408\nf 8170 9408 9404\nf 8171 8172 8177\nf 8171 8177 8176\nf 8171 9400 8172\nf 8172 9400 9401\nf 8172 9401 9405\nf 8172 9405 8177\nf 8173 8178 9410\nf 8173 9410 9406\nf 8174 9403 9407\nf 8174 9407 8179\nf 8175 8180 9412\nf 8175 9412 9408\nf 8176 8177 8182\nf 8176 8182 8181\nf 8177 9405 9409\nf 8177 9409 8182\nf 8178 8183 9416\nf 8178 9416 9410\nf 8179 9407 9411\nf 8179 9411 8184\nf 8180 8185 9412\nf 8181 8182 8193\nf 8181 8193 8191\nf 8182 8190 8193\nf 8182 9409 9414\nf 8182 9414 8190\nf 8183 8194 9441\nf 8183 9441 9416\nf 8184 9411 9417\nf 8184 9417 8195\nf 8185 8186 8187\nf 8185 8187 9413\nf 8185 9413 9412\nf 8186 8196 8198\nf 8186 8198 9419\nf 8186 9419 8187\nf 8187 9418 9413\nf 8187 9419 9418\nf 8188 8189 9436\nf 8188 8282 8280\nf 8188 9435 8282\nf 8188 9436 9435\nf 8189 8283 9439\nf 8189 9437 9436\nf 8189 9439 9437\nf 8190 8285 8288\nf 8190 8288 8193\nf 8190 9414 9415\nf 8190 9415 9438\nf 8190 9438 8285\nf 8191 8193 8192\nf 8192 8193 8288\nf 8192 8288 8286\nf 8194 8289 9520\nf 8194 9520 9441\nf 8195 9417 9442\nf 8195 9442 8290\nf 8196 8197 8198\nf 8197 8199 8198\nf 8198 8199 8200\nf 8198 8200 9421\nf 8198 9421 9419\nf 8199 8201 8200\nf 8200 8201 8202\nf 8200 8202 9422\nf 8200 9422 9421\nf 8201 8203 8202\nf 8202 8203 8204\nf 8202 8204 9423\nf 8202 9423 9422\nf 8203 8205 8204\nf 8204 8205 8206\nf 8204 8206 9424\nf 8204 9424 9423\nf 8205 8207 9444\nf 8205 9444 8206\nf 8206 9443 9424\nf 8206 9444 9443\nf 8207 8208 9444\nf 8208 8209 9446\nf 8208 9446 9444\nf 8209 8210 9447\nf 8209 9447 9446\nf 8210 8211 9448\nf 8210 9448 9447\nf 8211 8291 9450\nf 8211 9449 9448\nf 8211 9450 9449\nf 8212 8213 9451\nf 8212 8294 8292\nf 8212 9450 8294\nf 8212 9451 9450\nf 8213 8214 9452\nf 8213 9452 9451\nf 8214 8215 9453\nf 8214 9453 9452\nf 8215 8216 9454\nf 8215 9454 9453\nf 8216 8217 9455\nf 8216 9455 9454\nf 8217 8218 9456\nf 8217 9456 9455\nf 8218 8219 9457\nf 8218 9457 9456\nf 8219 8220 9458\nf 8219 9458 9457\nf 8220 8221 9459\nf 8220 9459 9458\nf 8221 8222 9460\nf 8221 9460 9459\nf 8222 8223 9461\nf 8222 9461 9460\nf 8223 8224 9462\nf 8223 9462 9461\nf 8224 8225 9463\nf 8224 9463 9462\nf 8225 8226 9464\nf 8225 9464 9463\nf 8226 8227 9466\nf 8226 9466 9464\nf 8227 8228 9468\nf 8227 9468 9466\nf 8228 8229 9470\nf 8228 9470 9468\nf 8229 8230 9472\nf 8229 9472 9470\nf 8230 8231 9474\nf 8230 9474 9472\nf 8231 8232 9476\nf 8231 9476 9474\nf 8232 8233 9478\nf 8232 9478 9476\nf 8233 8234 9480\nf 8233 9480 9478\nf 8234 8235 9482\nf 8234 9482 9480\nf 8235 8236 9483\nf 8235 9483 9482\nf 8236 8237 9484\nf 8236 9484 9483\nf 8237 8238 9485\nf 8237 9485 9484\nf 8238 8239 9486\nf 8238 9486 9485\nf 8239 8240 9487\nf 8239 9487 9486\nf 8240 8241 9488\nf 8240 9488 9487\nf 8241 8242 9489\nf 8241 9489 9488\nf 8242 8243 9490\nf 8242 9490 9489\nf 8243 8244 9491\nf 8243 9491 9490\nf 8244 8245 9492\nf 8244 9492 9491\nf 8245 8246 9493\nf 8245 9493 9492\nf 8246 8247 9494\nf 8246 9494 9493\nf 8247 8248 9495\nf 8247 9495 9494\nf 8248 8249 9497\nf 8248 9497 9495\nf 8249 8250 9499\nf 8249 9499 9497\nf 8250 8251 9501\nf 8250 9501 9499\nf 8251 8252 9503\nf 8251 9503 9501\nf 8252 8253 9505\nf 8252 9505 9503\nf 8253 8254 9507\nf 8253 9507 9505\nf 8254 8255 9509\nf 8254 9509 9507\nf 8255 8256 9511\nf 8255 9511 9509\nf 8256 8257 9512\nf 8256 9512 9511\nf 8257 8258 9513\nf 8257 9513 9512\nf 8258 8259 9515\nf 8258 9515 9513\nf 8259 8260 9518\nf 8259 9518 9515\nf 8260 8261 9517\nf 8260 8262 8261\nf 8260 9517 9518\nf 8261 8262 8263\nf 8261 8263 9426\nf 8261 9425 9517\nf 8261 9426 9425\nf 8262 8264 8263\nf 8263 8264 8265\nf 8263 8265 9427\nf 8263 9427 9426\nf 8264 8266 8265\nf 8265 8266 8267\nf 8265 8267 9428\nf 8265 9428 9427\nf 8266 8268 8267\nf 8267 8268 8269\nf 8267 8269 9429\nf 8267 9429 9428\nf 8268 8270 8269\nf 8269 8270 8271\nf 8269 8271 9430\nf 8269 9430 9429\nf 8270 8272 8271\nf 8271 8272 8273\nf 8271 8273 9431\nf 8271 9431 9430\nf 8272 8274 8273\nf 8273 8274 8275\nf 8273 8275 9432\nf 8273 9432 9431\nf 8274 8276 8275\nf 8275 8276 8277\nf 8275 8277 9433\nf 8275 9433 9432\nf 8276 8278 8277\nf 8277 8278 8279\nf 8277 8279 9434\nf 8277 9434 9433\nf 8278 8281 8279\nf 8279 8281 8282\nf 8279 8282 9435\nf 8279 9435 9434\nf 8280 8282 8281\nf 8283 8284 8285\nf 8283 8285 9439\nf 8284 8287 8285\nf 8285 8287 8288\nf 8285 9438 9439\nf 8286 8288 8287\nf 8289 8295 9522\nf 8289 9522 9520\nf 8290 9442 9521\nf 8290 9521 8296\nf 8291 8293 8294\nf 8291 8294 9450\nf 8292 8294 8293\nf 8295 8297 9524\nf 8295 9524 9522\nf 8296 9521 9523\nf 8296 9523 8298\nf 8297 8299 9526\nf 8297 9526 9524\nf 8298 9523 9525\nf 8298 9525 8300\nf 8299 8301 9528\nf 8299 9528 9526\nf 8300 9525 9527\nf 8300 9527 8302\nf 8301 8303 9530\nf 8301 9530 9528\nf 8302 9527 9529\nf 8302 9529 8304\nf 8303 8305 9532\nf 8303 9532 9530\nf 8304 9529 9531\nf 8304 9531 8306\nf 8305 8307 9534\nf 8305 9534 9532\nf 8306 9531 9533\nf 8306 9533 8308\nf 8307 8309 9536\nf 8307 9536 9534\nf 8308 9533 9535\nf 8308 9535 8310\nf 8309 8320 9544\nf 8309 9544 9536\nf 8310 9535 9537\nf 8310 9537 8321\nf 8311 8322 8324\nf 8311 8324 8325\nf 8311 8325 8312\nf 8312 8325 8326\nf 8312 8326 8313\nf 8313 8326 8328\nf 8313 8328 8314\nf 8314 8328 8327\nf 8315 8332 9553\nf 8315 9538 9539\nf 8315 9539 8316\nf 8315 9553 9538\nf 8316 9539 9540\nf 8316 9540 8317\nf 8317 9540 9541\nf 8317 9541 8318\nf 8318 9541 8319\nf 8319 8335 8334\nf 8319 9541 8335\nf 8320 8387 9594\nf 8320 9594 9544\nf 8321 9537 9545\nf 8321 9545 8388\nf 8322 8323 8324\nf 8323 8389 8390\nf 8323 8390 8324\nf 8324 8390 9546\nf 8324 9546 8325\nf 8325 9546 9547\nf 8325 9547 8326\nf 8326 9547 9548\nf 8326 9548 8328\nf 8327 8328 9549\nf 8327 9549 8329\nf 8328 9548 9549\nf 8329 9549 9550\nf 8329 9550 9551\nf 8329 9551 8330\nf 8330 9551 9552\nf 8330 9552 8331\nf 8331 9552 9554\nf 8331 9554 8333\nf 8332 8333 9553\nf 8333 9554 9553\nf 8334 8335 9556\nf 8334 9556 8336\nf 8335 9541 9555\nf 8335 9555 9556\nf 8336 9556 9557\nf 8336 9557 9558\nf 8336 9558 8337\nf 8337 9558 9559\nf 8337 9559 8338\nf 8338 9559 9560\nf 8338 9560 8339\nf 8339 9560 8340\nf 8340 8392 8391\nf 8340 9560 8392\nf 8341 8404 8406\nf 8341 8406 8407\nf 8341 8407 8342\nf 8342 8407 8408\nf 8342 8408 8343\nf 8343 8408 8409\nf 8343 8409 8344\nf 8344 8409 8410\nf 8344 8410 8345\nf 8345 8410 8411\nf 8345 8411 8346\nf 8346 8411 8412\nf 8346 8412 8347\nf 8347 8412 8413\nf 8347 8413 8348\nf 8348 8413 8414\nf 8348 8414 8349\nf 8349 8414 8415\nf 8349 8415 8350\nf 8350 8415 8416\nf 8350 8416 8351\nf 8351 8416 8417\nf 8351 8417 8352\nf 8352 8417 8418\nf 8352 8418 8353\nf 8353 8418 9625\nf 8353 9561 8354\nf 8353 9625 9561\nf 8354 9561 9562\nf 8354 9562 8355\nf 8355 9562 9563\nf 8355 9563 8356\nf 8356 9563 9564\nf 8356 9564 8357\nf 8357 9564 9565\nf 8357 9565 8358\nf 8358 9565 9566\nf 8358 9566 8359\nf 8359 9566 9567\nf 8359 9567 8360\nf 8360 9567 9568\nf 8360 9568 8361\nf 8361 9568 9569\nf 8361 9569 8362\nf 8362 9569 9570\nf 8362 9570 8363\nf 8363 9570 9571\nf 8363 9571 8364\nf 8364 9571 9572\nf 8364 9572 8365\nf 8365 9572 9573\nf 8365 9573 8366\nf 8366 9573 9574\nf 8366 9574 8367\nf 8367 9574 9575\nf 8367 9575 8368\nf 8368 9575 9576\nf 8368 9576 8369\nf 8369 9576 9577\nf 8369 9577 8370\nf 8370 9577 9578\nf 8370 9578 8371\nf 8371 9578 9579\nf 8371 9579 8372\nf 8372 9579 9580\nf 8372 9580 8373\nf 8373 9580 9581\nf 8373 9581 8374\nf 8374 9581 9582\nf 8374 9582 8375\nf 8375 9582 9584\nf 8375 9584 8376\nf 8376 9584 8377\nf 8377 8378 8379\nf 8377 9583 8378\nf 8377 9584 9583\nf 8378 8380 8379\nf 8378 9542 9543\nf 8378 9543 8380\nf 8378 9583 9542\nf 8379 8380 9587\nf 8379 9587 8381\nf 8380 9543 9586\nf 8380 9586 9587\nf 8381 9587 9589\nf 8381 9589 8382\nf 8382 9589 9590\nf 8382 9590 8383\nf 8383 9590 9591\nf 8383 9591 8384\nf 8384 9591 9592\nf 8384 9592 8385\nf 8385 9592 9593\nf 8385 9593 8386\nf 8386 9593 8419\nf 8387 8421 9634\nf 8387 9634 9594\nf 8388 9545 9595\nf 8388 9595 8422\nf 8389 8423 9636\nf 8389 9636 8390\nf 8390 9596 9546\nf 8390 9597 9596\nf 8390 9636 9597\nf 8391 8392 9599\nf 8391 9599 8393\nf 8392 9560 9598\nf 8392 9598 9599\nf 8393 9599 9601\nf 8393 9601 9602\nf 8393 9602 8394\nf 8394 9602 9603\nf 8394 9603 8395\nf 8395 9603 9604\nf 8395 9604 8396\nf 8396 9604 9605\nf 8396 9605 8397\nf 8397 9605 9606\nf 8397 9606 8398\nf 8398 9606 9607\nf 8398 9607 8399\nf 8399 9607 9608\nf 8399 9608 8400\nf 8400 9608 9609\nf 8400 9609 8401\nf 8401 9609 9610\nf 8401 9610 8402\nf 8402 9610 9611\nf 8402 9611 8403\nf 8403 9611 9612\nf 8403 9612 8405\nf 8404 8405 8406\nf 8405 9612 9613\nf 8405 9613 8406\nf 8406 9613 8407\nf 8407 9613 9614\nf 8407 9614 8408\nf 8408 9614 9615\nf 8408 9615 8409\nf 8409 9615 9616\nf 8409 9616 8410\nf 8410 9616 9617\nf 8410 9617 8411\nf 8411 9617 9618\nf 8411 9618 8412\nf 8412 9618 9619\nf 8412 9619 8413\nf 8413 9619 9620\nf 8413 9620 8414\nf 8414 9620 9621\nf 8414 9621 8415\nf 8415 9621 9622\nf 8415 9622 8416\nf 8416 9622 9623\nf 8416 9623 8417\nf 8417 9623 9624\nf 8417 9624 8418\nf 8418 9624 9626\nf 8418 9626 9625\nf 8419 9593 9631\nf 8419 9631 9633\nf 8419 9633 8420\nf 8420 9633 8424\nf 8421 8425 9639\nf 8421 9639 9634\nf 8422 9595 9635\nf 8422 9635 8426\nf 8423 8427 9641\nf 8423 9641 9636\nf 8424 9633 9637\nf 8424 9637 8428\nf 8425 8429 9644\nf 8425 9644 9639\nf 8426 9635 9640\nf 8426 9640 8430\nf 8427 8431 9646\nf 8427 9646 9641\nf 8428 9637 9642\nf 8428 9642 8432\nf 8429 8433 9649\nf 8429 9649 9644\nf 8430 9640 9645\nf 8430 9645 8434\nf 8431 8435 9651\nf 8431 9651 9646\nf 8432 9642 9647\nf 8432 9647 8436\nf 8433 8438 9653\nf 8433 9653 9649\nf 8434 9645 9650\nf 8434 9650 8439\nf 8435 8440 9655\nf 8435 9655 9651\nf 8436 8442 8437\nf 8436 9647 9652\nf 8436 9652 9656\nf 8436 9656 8442\nf 8437 8442 8441\nf 8438 8443 9657\nf 8438 9657 9653\nf 8439 9650 9654\nf 8439 9654 8444\nf 8440 8445 9659\nf 8440 9659 9655\nf 8441 8442 8447\nf 8441 8447 8446\nf 8442 9656 8447\nf 8443 8448 9662\nf 8443 9662 9657\nf 8444 9654 9658\nf 8444 9658 8449\nf 8445 8450 9664\nf 8445 9664 9659\nf 8446 8447 9661\nf 8446 9661 9665\nf 8446 9665 8451\nf 8447 9656 9660\nf 8447 9660 9661\nf 8448 8452 9667\nf 8448 9667 9662\nf 8449 9658 9663\nf 8449 9663 8453\nf 8450 8454 9669\nf 8450 9669 9664\nf 8451 9665 8455\nf 8452 8456 9672\nf 8452 9672 9667\nf 8453 9663 9668\nf 8453 9668 8457\nf 8454 8459 9675\nf 8454 9675 9669\nf 8455 9665 9670\nf 8455 9670 8460\nf 8456 8461 9678\nf 8456 9678 9672\nf 8457 9668 9673\nf 8457 9673 9674\nf 8457 9674 8458\nf 8458 9674 8462\nf 8459 8463 9681\nf 8459 9681 9675\nf 8460 9670 9676\nf 8460 9676 8464\nf 8461 8465 9684\nf 8461 9684 9678\nf 8462 9674 9679\nf 8462 9679 8466\nf 8463 8467 9686\nf 8463 9686 9681\nf 8464 9676 9682\nf 8464 9682 8468\nf 8465 8469 9688\nf 8465 9688 9684\nf 8466 9679 9685\nf 8466 9685 8470\nf 8467 8471 9690\nf 8467 9690 9686\nf 8468 9682 9687\nf 8468 9687 8472\nf 8469 8473 9692\nf 8469 9692 9688\nf 8470 9685 9689\nf 8470 9689 8474\nf 8471 8475 9694\nf 8471 9694 9690\nf 8472 9687 9691\nf 8472 9691 8476\nf 8473 8477 9696\nf 8473 9696 9692\nf 8474 9689 9693\nf 8474 9693 8478\nf 8475 8479 9698\nf 8475 9698 9694\nf 8476 9691 9695\nf 8476 9695 8480\nf 8477 8481 9700\nf 8477 9700 9696\nf 8478 9693 9697\nf 8478 9697 8482\nf 8479 8483 9702\nf 8479 9702 9698\nf 8480 9695 9699\nf 8480 9699 8484\nf 8481 8485 9704\nf 8481 9704 9700\nf 8482 9697 9701\nf 8482 9701 8486\nf 8483 8487 9706\nf 8483 9706 9702\nf 8484 9699 9703\nf 8484 9703 8488\nf 8485 8489 9708\nf 8485 9708 9704\nf 8486 9701 9705\nf 8486 9705 8490\nf 8487 8491 9710\nf 8487 9710 9706\nf 8488 9703 9707\nf 8488 9707 8492\nf 8489 8493 9712\nf 8489 9712 9708\nf 8490 9705 9709\nf 8490 9709 8494\nf 8491 8495 9714\nf 8491 9714 9710\nf 8492 9707 9711\nf 8492 9711 8497\nf 8493 8498 9716\nf 8493 9716 9712\nf 8494 9709 9713\nf 8494 9713 8499\nf 8495 8496 9718\nf 8495 9718 9714\nf 8496 8500 8501\nf 8496 8501 9718\nf 8497 9711 9715\nf 8497 9715 8502\nf 8498 8503 9720\nf 8498 9720 9716\nf 8499 9713 9717\nf 8499 9717 8504\nf 8500 8505 8501\nf 8501 8505 8506\nf 8501 8506 9723\nf 8501 9723 9718\nf 8502 9715 9719\nf 8502 9719 8507\nf 8503 8508 9725\nf 8503 9725 9720\nf 8504 9717 9721\nf 8504 9721 8509\nf 8505 8512 8506\nf 8506 8512 8513\nf 8506 8513 9728\nf 8506 9728 9723\nf 8507 9719 9724\nf 8507 9724 8514\nf 8508 8515 9730\nf 8508 9730 9725\nf 8509 8511 8510\nf 8509 9721 9722\nf 8509 9722 8511\nf 8510 8511 8516\nf 8511 9722 9726\nf 8511 9726 8516\nf 8512 8517 8513\nf 8513 8517 8518\nf 8513 8518 9733\nf 8513 9733 9728\nf 8514 9724 9729\nf 8514 9729 8519\nf 8515 8520 9735\nf 8515 9735 9730\nf 8516 9726 9731\nf 8516 9731 8521\nf 8517 8522 8518\nf 8518 8522 8523\nf 8518 8523 9737\nf 8518 9737 9733\nf 8519 9729 9734\nf 8519 9734 8524\nf 8520 8525 9739\nf 8520 9739 9735\nf 8521 9731 9736\nf 8521 9736 8526\nf 8522 8527 8523\nf 8523 8527 8528\nf 8523 8528 9741\nf 8523 9741 9737\nf 8524 9734 9738\nf 8524 9738 8529\nf 8525 8530 9744\nf 8525 9744 9739\nf 8526 9736 9740\nf 8526 9740 8531\nf 8527 8532 9746\nf 8527 9746 8528\nf 8528 9742 9741\nf 8528 9746 9742\nf 8529 9738 9743\nf 8529 9743 8533\nf 8530 8534 9748\nf 8530 9748 9744\nf 8531 9740 9745\nf 8531 9745 8535\nf 8532 8536 9750\nf 8532 9750 9746\nf 8533 9743 9747\nf 8533 9747 8537\nf 8534 8538 9752\nf 8534 9752 9748\nf 8535 9745 9749\nf 8535 9749 8539\nf 8536 8540 9754\nf 8536 9754 9750\nf 8537 9747 9751\nf 8537 9751 8541\nf 8538 8542 9757\nf 8538 9757 9752\nf 8539 9749 9753\nf 8539 9753 8543\nf 8540 8544 9759\nf 8540 9759 9754\nf 8541 9751 9756\nf 8541 9756 8545\nf 8542 8546 9762\nf 8542 9762 9757\nf 8543 9753 9758\nf 8543 9758 8547\nf 8544 8548 9764\nf 8544 9764 9759\nf 8545 9756 9761\nf 8545 9761 8549\nf 8546 8550 9768\nf 8546 9768 9762\nf 8547 9758 9763\nf 8547 9763 8551\nf 8548 8552 9764\nf 8549 9761 9767\nf 8549 9767 8554\nf 8550 8555 9772\nf 8550 9772 9768\nf 8551 9763 9769\nf 8551 9769 8556\nf 8552 8553 9765\nf 8552 8557 8553\nf 8552 9765 9764\nf 8553 8557 8558\nf 8553 8558 9774\nf 8553 9770 9765\nf 8553 9774 9770\nf 8554 9767 9771\nf 8554 9771 8559\nf 8555 8560 9776\nf 8555 9776 9772\nf 8556 9769 9773\nf 8556 9773 8561\nf 8557 8562 8558\nf 8558 8562 8563\nf 8558 8563 9778\nf 8558 9778 9774\nf 8559 9771 9775\nf 8559 9775 8564\nf 8560 8565 9780\nf 8560 9780 9776\nf 8561 9773 9777\nf 8561 9777 8566\nf 8562 8567 8563\nf 8563 8567 8568\nf 8563 8568 9782\nf 8563 9782 9778\nf 8564 9775 9779\nf 8564 9779 8569\nf 8565 8570 9784\nf 8565 9784 9780\nf 8566 9777 9781\nf 8566 9781 8571\nf 8567 8572 8568\nf 8568 8572 8573\nf 8568 8573 9786\nf 8568 9786 9782\nf 8569 9779 9783\nf 8569 9783 8574\nf 8570 8576 9788\nf 8570 9788 9784\nf 8571 9781 9785\nf 8571 9785 8577\nf 8572 8578 8573\nf 8573 8578 8579\nf 8573 8579 9790\nf 8573 9790 9786\nf 8574 8581 8575\nf 8574 9783 9787\nf 8574 9787 9791\nf 8574 9791 8581\nf 8575 8581 8580\nf 8576 8582 9792\nf 8576 9792 9788\nf 8577 9785 9789\nf 8577 9789 8583\nf 8578 8584 8579\nf 8579 8584 8585\nf 8579 8585 9794\nf 8579 9794 9790\nf 8580 8581 8587\nf 8580 8587 8586\nf 8581 9791 8587\nf 8582 8588 9798\nf 8582 9798 9792\nf 8583 9789 9793\nf 8583 9793 8589\nf 8584 8590 8585\nf 8585 8590 8591\nf 8585 8591 9800\nf 8585 9800 9794\nf 8586 8587 9796\nf 8586 9796 9801\nf 8586 9801 8592\nf 8587 9791 9795\nf 8587 9795 9796\nf 8588 8593 9802\nf 8588 9802 9798\nf 8589 9793 9799\nf 8589 9799 8594\nf 8590 8595 8591\nf 8591 8595 8596\nf 8591 8596 9804\nf 8591 9804 9800\nf 8592 9801 8597\nf 8593 8598 9806\nf 8593 9806 9802\nf 8594 9799 9803\nf 8594 9803 8599\nf 8595 8600 8596\nf 8596 8600 8601\nf 8596 8601 9808\nf 8596 9808 9804\nf 8597 9801 9805\nf 8597 9805 8602\nf 8598 8603 9810\nf 8598 9810 9806\nf 8599 9803 9807\nf 8599 9807 8604\nf 8600 8605 8601\nf 8601 8605 8607\nf 8601 8607 9812\nf 8601 9812 9808\nf 8602 9805 9809\nf 8602 9809 8608\nf 8603 8609 9815\nf 8603 9815 9810\nf 8604 9807 9811\nf 8604 9811 8610\nf 8605 8606 8607\nf 8606 8611 8607\nf 8607 8611 9812\nf 8608 9809 9813\nf 8608 9813 8612\nf 8609 8614 9820\nf 8609 9820 9815\nf 8610 9811 9816\nf 8610 9816 8615\nf 8611 8616 9822\nf 8611 9817 9812\nf 8611 9822 9817\nf 8612 8613 8619\nf 8612 8619 8617\nf 8612 9813 8613\nf 8613 9813 9814\nf 8613 9814 9818\nf 8613 9818 8619\nf 8614 8620 9824\nf 8614 9824 9820\nf 8615 9816 9821\nf 8615 9821 8621\nf 8616 8622 9826\nf 8616 9826 9822\nf 8617 8619 8618\nf 8618 8619 9823\nf 8618 9823 8623\nf 8619 9818 9823\nf 8620 8624 9828\nf 8620 9828 9824\nf 8621 9821 9825\nf 8621 9825 8625\nf 8622 8627 9831\nf 8622 9831 9826\nf 8623 9823 9827\nf 8623 9827 8628\nf 8624 8629 9833\nf 8624 9833 9828\nf 8625 9825 9829\nf 8625 9829 9830\nf 8625 9830 8626\nf 8626 9830 8630\nf 8627 8631 9835\nf 8627 9835 9831\nf 8628 9827 9832\nf 8628 9832 8632\nf 8629 8633 9837\nf 8629 9837 9833\nf 8630 9830 9834\nf 8630 9834 8634\nf 8631 8635 9839\nf 8631 9839 9835\nf 8632 9832 9836\nf 8632 9836 8636\nf 8633 8637 9842\nf 8633 9842 9837\nf 8634 9834 9838\nf 8634 9838 8638\nf 8635 8640 9844\nf 8635 9844 9839\nf 8636 9836 9840\nf 8636 9840 8641\nf 8637 8644 9847\nf 8637 9847 9842\nf 8638 9838 9843\nf 8638 9843 9848\nf 8638 9848 8639\nf 8639 8646 8645\nf 8639 9848 8646\nf 8640 8647 9844\nf 8641 8643 8642\nf 8641 9840 8643\nf 8642 8643 9846\nf 8642 9846 8650\nf 8643 9840 9841\nf 8643 9841 9846\nf 8644 8651 9852\nf 8644 9852 9847\nf 8645 8646 9853\nf 8645 9853 8652\nf 8646 9848 9849\nf 8646 9849 9853\nf 8647 8648 8649\nf 8647 8649 9845\nf 8647 9845 9844\nf 8648 8653 8649\nf 8649 8653 9850\nf 8649 9850 9845\nf 8650 9846 9851\nf 8650 9851 8654\nf 8651 8655 9858\nf 8651 9858 9852\nf 8652 9853 8656\nf 8653 8657 9854\nf 8653 9854 9850\nf 8654 9851 9856\nf 8654 9856 8661\nf 8655 8664 9892\nf 8655 9892 9858\nf 8656 9853 9859\nf 8656 9859 8665\nf 8657 8658 8659\nf 8657 8659 9855\nf 8657 9855 9854\nf 8658 8660 9861\nf 8658 9861 8659\nf 8659 9860 9855\nf 8659 9861 9860\nf 8660 8666 9862\nf 8660 9862 9861\nf 8661 8663 8662\nf 8661 9856 8663\nf 8662 8663 9890\nf 8662 9890 9891\nf 8662 9891 8738\nf 8663 9856 9857\nf 8663 9857 9890\nf 8664 8741 9954\nf 8664 9954 9892\nf 8665 9859 9893\nf 8665 9893 8743\nf 8666 8667 8668\nf 8666 8668 9862\nf 8667 8669 8668\nf 8668 8669 8670\nf 8668 8670 9863\nf 8668 9863 9862\nf 8669 8671 8670\nf 8670 8671 8672\nf 8670 8672 9864\nf 8670 9864 9863\nf 8671 8673 8672\nf 8672 8673 8674\nf 8672 8674 9865\nf 8672 9865 9864\nf 8673 8675 8674\nf 8674 8675 8676\nf 8674 8676 9866\nf 8674 9866 9865\nf 8675 8677 9895\nf 8675 9895 8676\nf 8676 9894 9866\nf 8676 9895 9894\nf 8677 8744 9896\nf 8677 9896 9895\nf 8678 8679 9868\nf 8678 8790 8792\nf 8678 8792 8794\nf 8678 8794 8679\nf 8678 9867 9922\nf 8678 9868 9867\nf 8678 9922 8790\nf 8679 8680 9869\nf 8679 8794 8796\nf 8679 8796 8680\nf 8679 9869 9868\nf 8680 8681 9870\nf 8680 8796 8798\nf 8680 8798 8681\nf 8680 9870 9869\nf 8681 8682 9871\nf 8681 8798 8801\nf 8681 8801 8682\nf 8681 9871 9870\nf 8682 8684 9872\nf 8682 8801 8684\nf 8682 9872 9871\nf 8683 8684 8801\nf 8683 8685 8684\nf 8683 8801 8799\nf 8684 8685 8686\nf 8684 8686 9873\nf 8684 9873 9872\nf 8685 8687 8686\nf 8686 8687 8688\nf 8686 8688 9874\nf 8686 9874 9873\nf 8687 8689 8688\nf 8688 8689 8690\nf 8688 8690 9875\nf 8688 9875 9874\nf 8689 8691 8690\nf 8690 8691 8692\nf 8690 8692 9876\nf 8690 9876 9875\nf 8691 8693 8692\nf 8692 8693 8694\nf 8692 8694 9877\nf 8692 9877 9876\nf 8693 8695 8694\nf 8694 8695 8696\nf 8694 8696 9878\nf 8694 9878 9877\nf 8695 8697 8696\nf 8696 8697 8698\nf 8696 8698 9879\nf 8696 9879 9878\nf 8697 8699 8698\nf 8698 8699 8700\nf 8698 8700 9880\nf 8698 9880 9879\nf 8699 8701 8700\nf 8700 8701 8702\nf 8700 8702 9881\nf 8700 9881 9880\nf 8701 8703 8702\nf 8702 8703 8704\nf 8702 8704 9882\nf 8702 9882 9881\nf 8703 8705 8704\nf 8704 8705 8706\nf 8704 8706 9883\nf 8704 9883 9882\nf 8705 8707 8706\nf 8706 8707 8708\nf 8706 8708 9884\nf 8706 9884 9883\nf 8707 8709 8708\nf 8708 8709 8710\nf 8708 8710 9885\nf 8708 9885 9884\nf 8709 8711 8710\nf 8710 8711 8712\nf 8710 8712 9886\nf 8710 9886 9885\nf 8711 8713 9926\nf 8711 9926 8712\nf 8712 9925 9886\nf 8712 9926 9925\nf 8713 8714 9926\nf 8714 8715 9927\nf 8714 9927 9926\nf 8715 8716 9928\nf 8715 9928 9927\nf 8716 8717 9929\nf 8716 9929 9928\nf 8717 8718 9930\nf 8717 9930 9929\nf 8718 8719 9931\nf 8718 9931 9930\nf 8719 8720 9932\nf 8719 9932 9931\nf 8720 8721 9933\nf 8720 9933 9932\nf 8721 8722 9934\nf 8721 9934 9933\nf 8722 8723 9935\nf 8722 9935 9934\nf 8723 8724 9936\nf 8723 9936 9935\nf 8724 8725 9937\nf 8724 9937 9936\nf 8725 8726 9939\nf 8725 9939 9937\nf 8726 8727 9941\nf 8726 9941 9939\nf 8727 8728 9943\nf 8727 9943 9941\nf 8728 8729 9945\nf 8728 9945 9943\nf 8729 8730 9947\nf 8729 9947 9945\nf 8730 8731 9949\nf 8730 9949 9947\nf 8731 8732 9952\nf 8731 9952 9949\nf 8732 8733 9951\nf 8732 8734 8733\nf 8732 9951 9952\nf 8733 8734 8735\nf 8733 8735 9888\nf 8733 9887 9951\nf 8733 9888 9887\nf 8734 8736 8735\nf 8735 8736 8737\nf 8735 8737 9889\nf 8735 9889 9888\nf 8736 8739 8737\nf 8737 8739 8740\nf 8737 8740 9891\nf 8737 9891 9889\nf 8738 8740 8739\nf 8738 9891 8740\nf 8741 8742 8803\nf 8741 8803 9956\nf 8741 9956 9954\nf 8742 8802 8803\nf 8743 9893 9955\nf 8743 9955 8804\nf 8744 8745 8746\nf 8744 8746 9896\nf 8745 8747 8746\nf 8746 8747 8748\nf 8746 8748 9897\nf 8746 9897 9896\nf 8747 8749 8748\nf 8748 8749 8750\nf 8748 8750 9898\nf 8748 9898 9897\nf 8749 8751 8750\nf 8750 8751 8752\nf 8750 8752 9899\nf 8750 9899 9898\nf 8751 8753 8752\nf 8752 8753 8754\nf 8752 8754 9900\nf 8752 9900 9899\nf 8753 8755 8754\nf 8754 8755 8756\nf 8754 8756 9901\nf 8754 9901 9900\nf 8755 8757 8756\nf 8756 8757 8758\nf 8756 8758 9902\nf 8756 9902 9901\nf 8757 8759 8758\nf 8758 8759 8760\nf 8758 8760 9903\nf 8758 9903 9902\nf 8759 8761 8760\nf 8760 8761 8762\nf 8760 8762 9904\nf 8760 9904 9903\nf 8761 8763 8762\nf 8762 8763 8764\nf 8762 8764 9905\nf 8762 9905 9904\nf 8763 8765 8764\nf 8764 8765 8766\nf 8764 8766 9906\nf 8764 9906 9905\nf 8765 8767 8766\nf 8766 8767 8768\nf 8766 8768 9907\nf 8766 9907 9906\nf 8767 8769 8768\nf 8768 8769 8770\nf 8768 8770 9908\nf 8768 9908 9907\nf 8769 8771 8770\nf 8770 8771 8772\nf 8770 8772 9909\nf 8770 9909 9908\nf 8771 8773 8772\nf 8772 8773 8774\nf 8772 8774 9910\nf 8772 9910 9909\nf 8773 8775 8774\nf 8774 8775 8776\nf 8774 8776 9911\nf 8774 9911 9910\nf 8775 8777 8776\nf 8776 8777 8778\nf 8776 8778 9912\nf 8776 9912 9911\nf 8777 8779 8778\nf 8778 8779 8780\nf 8778 8780 9913\nf 8778 9913 9912\nf 8779 8781 8780\nf 8780 8781 8782\nf 8780 8782 9914\nf 8780 9914 9913\nf 8781 8783 8782\nf 8782 8783 8784\nf 8782 8784 9916\nf 8782 9916 9914\nf 8783 8785 8784\nf 8784 8785 8786\nf 8784 8786 9918\nf 8784 9918 9916\nf 8785 8787 8786\nf 8786 8787 8788\nf 8786 8788 9920\nf 8786 9920 9918\nf 8787 8789 8788\nf 8788 8789 8790\nf 8788 8790 9923\nf 8788 9923 9920\nf 8789 8791 8790\nf 8790 8791 8792\nf 8790 9922 9923\nf 8791 8793 8792\nf 8792 8793 8794\nf 8793 8795 8794\nf 8794 8795 8796\nf 8795 8797 8796\nf 8796 8797 8798\nf 8797 8800 8798\nf 8798 8800 8801\nf 8799 8801 8800\nf 8802 8805 9959\nf 8802 9957 8803\nf 8802 9959 9957\nf 8803 9957 9956\nf 8804 9955 9958\nf 8804 9958 8807\nf 8805 8806 9959\nf 8806 8808 9963\nf 8806 9960 9959\nf 8806 9963 9960\nf 8807 9958 9962\nf 8807 9962 8809\nf 8808 8810 9965\nf 8808 9965 9963\nf 8809 9962 9964\nf 8809 9964 8811\nf 8810 8812 9967\nf 8810 9967 9965\nf 8811 9964 9966\nf 8811 9966 8813\nf 8812 8814 9969\nf 8812 9969 9967\nf 8813 9966 9968\nf 8813 9968 8815\nf 8814 8816 9971\nf 8814 9971 9969\nf 8815 9968 9970\nf 8815 9970 8817\nf 8816 8818 9973\nf 8816 9973 9971\nf 8817 9970 9972\nf 8817 9972 8819\nf 8818 8820 9975\nf 8818 9975 9973\nf 8819 9972 9974\nf 8819 9974 8821\nf 8820 8822 9977\nf 8820 9977 9975\nf 8821 9974 9976\nf 8821 9976 8823\nf 8822 8824 9979\nf 8822 9979 9977\nf 8823 9976 9978\nf 8823 9978 8825\nf 8824 8826 9981\nf 8824 9981 9979\nf 8825 9978 9980\nf 8825 9980 8828\nf 8826 8827 9983\nf 8826 9983 9981\nf 8827 8829 8830\nf 8827 8830 9983\nf 8828 9980 9982\nf 8828 9982 8831\nf 8829 8832 9986\nf 8829 9986 8830\nf 8830 9984 9983\nf 8830 9986 9984\nf 8831 9982 9985\nf 8831 9985 8834\nf 8832 8833 9988\nf 8832 9988 9986\nf 8833 8835 8836\nf 8833 8836 9988\nf 8834 9985 9987\nf 8834 9987 8837\nf 8835 8913 9992\nf 8835 9992 8836\nf 8836 9989 9988\nf 8836 9992 9989\nf 8837 9987 9990\nf 8837 9990 9991\nf 8837 9991 8838\nf 8838 9991 8915\nf 8839 8927 8929\nf 8839 8929 8930\nf 8839 8930 8840\nf 8840 8930 8931\nf 8840 8931 8841\nf 8841 8931 8932\nf 8841 8932 8842\nf 8842 8932 8933\nf 8842 8933 8843\nf 8843 8933 8934\nf 8843 8934 8844\nf 8844 8934 8935\nf 8844 8935 8845\nf 8845 8935 8936\nf 8845 8936 8846\nf 8846 8936 8937\nf 8846 8937 8847\nf 8847 8937 8938\nf 8847 8938 8848\nf 8848 8938 8939\nf 8848 8939 8849\nf 8849 8939 8940\nf 8849 8940 8850\nf 8850 8940 8941\nf 8850 8941 8851\nf 8851 8941 8942\nf 8851 8942 8852\nf 8852 8942 8943\nf 8852 8943 8853\nf 8853 8943 8944\nf 8853 8944 8854\nf 8854 8944 8945\nf 8854 8945 8855\nf 8855 8945 8946\nf 8855 8946 8856\nf 8856 8946 8947\nf 8856 8947 8857\nf 8857 8947 8948\nf 8857 8948 8858\nf 8858 8948 8949\nf 8858 8949 8859\nf 8859 8949 8950\nf 8859 8950 8860\nf 8860 8950 8951\nf 8860 8951 8861\nf 8861 8951 8952\nf 8861 8952 8862\nf 8862 8952 8953\nf 8862 8953 8863\nf 8863 8953 8954\nf 8863 8954 8864\nf 8864 8954 8955\nf 8864 8955 8865\nf 8865 8955 8956\nf 8865 8956 8866\nf 8866 8956 8957\nf 8866 8957 8867\nf 8867 8957 8958\nf 8867 8958 8868\nf 8868 8958 8959\nf 8868 8959 8869\nf 8869 8959 8960\nf 8869 8960 8870\nf 8870 8960 8961\nf 8870 8961 8871\nf 8871 8961 8962\nf 8871 8962 8872\nf 8872 8962 8963\nf 8872 8963 8873\nf 8873 8963 8964\nf 8873 8964 8874\nf 8874 8964 8965\nf 8874 8965 8875\nf 8875 8965 8966\nf 8875 8966 8876\nf 8876 8966 8967\nf 8876 8967 8877\nf 8877 8967 8968\nf 8877 8968 8878\nf 8878 8968 8969\nf 8878 8969 8879\nf 8879 8969 8970\nf 8879 8970 8880\nf 8880 8970 8971\nf 8880 8971 8881\nf 8881 8971 8972\nf 8881 8972 8882\nf 8882 8972 8973\nf 8882 8973 8883\nf 8883 8973 8974\nf 8883 8974 8884\nf 8884 8974 8975\nf 8884 8975 8885\nf 8885 8975 8976\nf 8885 8976 8886\nf 8886 8976 8977\nf 8886 8977 8887\nf 8887 8977 8978\nf 8887 8978 8888\nf 8888 8978 8979\nf 8888 8979 8889\nf 8889 8979 8980\nf 8889 8980 8890\nf 8890 8980 8981\nf 8890 8981 8891\nf 8891 8981 8982\nf 8891 8982 8892\nf 8892 8982 8983\nf 8892 8983 8893\nf 8893 8983 8984\nf 8893 8984 8894\nf 8894 8984 8985\nf 8894 8985 8895\nf 8895 8985 8986\nf 8895 8986 8896\nf 8896 8986 8987\nf 8896 8987 8897\nf 8897 8987 8988\nf 8897 8988 8898\nf 8898 8988 8989\nf 8898 8989 8899\nf 8899 8989 8990\nf 8899 8990 8900\nf 8900 8990 8991\nf 8900 8991 8901\nf 8901 8991 8992\nf 8901 8992 8902\nf 8902 8992 8993\nf 8902 8993 8903\nf 8903 8993 8994\nf 8903 8994 8904\nf 8904 8994 8995\nf 8904 8995 8905\nf 8905 8995 8996\nf 8905 8996 8906\nf 8906 8996 8997\nf 8906 8997 8907\nf 8907 8997 8998\nf 8907 8998 8908\nf 8908 8998 8999\nf 8908 8999 8909\nf 8909 8999 9000\nf 8909 9000 8910\nf 8910 9000 9001\nf 8910 9001 8911\nf 8911 9001 9002\nf 8911 9002 8912\nf 8912 9002 10077\nf 8912 9993 8914\nf 8912 10077 9993\nf 8913 8914 9992\nf 8914 9993 9992\nf 8915 9991 9994\nf 8915 9994 9003\nf 8916 9005 9007\nf 8916 9007 9008\nf 8916 9008 8917\nf 8917 9008 9009\nf 8917 9009 8918\nf 8918 9009 10083\nf 8918 9995 8919\nf 8918 10083 9995\nf 8919 9995 9996\nf 8919 9996 8920\nf 8920 9996 9997\nf 8920 9997 8921\nf 8921 9997 9998\nf 8921 9998 8922\nf 8922 9998 9999\nf 8922 9999 8923\nf 8923 9999 10000\nf 8923 10000 8924\nf 8924 10000 10001\nf 8924 10001 8925\nf 8925 10001 10002\nf 8925 10002 8926\nf 8926 10002 10003\nf 8926 10003 8928\nf 8927 8928 8929\nf 8928 10003 10004\nf 8928 10004 8929\nf 8929 10004 8930\nf 8930 10004 10005\nf 8930 10005 8931\nf 8931 10005 10006\nf 8931 10006 8932\nf 8932 10006 10007\nf 8932 10007 8933\nf 8933 10007 10008\nf 8933 10008 8934\nf 8934 10008 10009\nf 8934 10009 8935\nf 8935 10009 10010\nf 8935 10010 8936\nf 8936 10010 10011\nf 8936 10011 8937\nf 8937 10011 10012\nf 8937 10012 8938\nf 8938 10012 10013\nf 8938 10013 8939\nf 8939 10013 10014\nf 8939 10014 8940\nf 8940 10014 10015\nf 8940 10015 8941\nf 8941 10015 10016\nf 8941 10016 8942\nf 8942 10016 10017\nf 8942 10017 8943\nf 8943 10017 10018\nf 8943 10018 8944\nf 8944 10018 10019\nf 8944 10019 8945\nf 8945 10019 10020\nf 8945 10020 8946\nf 8946 10020 10021\nf 8946 10021 8947\nf 8947 10021 10022\nf 8947 10022 8948\nf 8948 10022 10023\nf 8948 10023 8949\nf 8949 10023 10024\nf 8949 10024 8950\nf 8950 10024 10025\nf 8950 10025 8951\nf 8951 10025 10026\nf 8951 10026 8952\nf 8952 10026 10027\nf 8952 10027 8953\nf 8953 10027 10028\nf 8953 10028 8954\nf 8954 10028 10029\nf 8954 10029 8955\nf 8955 10029 10030\nf 8955 10030 8956\nf 8956 10030 10031\nf 8956 10031 8957\nf 8957 10031 10032\nf 8957 10032 8958\nf 8958 10032 10033\nf 8958 10033 8959\nf 8959 10033 10034\nf 8959 10034 8960\nf 8960 10034 10035\nf 8960 10035 8961\nf 8961 10035 10036\nf 8961 10036 8962\nf 8962 10036 10037\nf 8962 10037 8963\nf 8963 10037 10038\nf 8963 10038 8964\nf 8964 10038 10039\nf 8964 10039 8965\nf 8965 10039 10040\nf 8965 10040 8966\nf 8966 10040 10041\nf 8966 10041 8967\nf 8967 10041 10042\nf 8967 10042 8968\nf 8968 10042 10043\nf 8968 10043 8969\nf 8969 10043 10044\nf 8969 10044 8970\nf 8970 10044 10045\nf 8970 10045 8971\nf 8971 10045 10046\nf 8971 10046 8972\nf 8972 10046 10047\nf 8972 10047 8973\nf 8973 10047 10048\nf 8973 10048 8974\nf 8974 10048 10049\nf 8974 10049 8975\nf 8975 10049 10050\nf 8975 10050 8976\nf 8976 10050 10051\nf 8976 10051 8977\nf 8977 10051 10052\nf 8977 10052 8978\nf 8978 10052 10053\nf 8978 10053 8979\nf 8979 10053 10054\nf 8979 10054 8980\nf 8980 10054 10055\nf 8980 10055 8981\nf 8981 10055 10056\nf 8981 10056 8982\nf 8982 10056 10057\nf 8982 10057 8983\nf 8983 10057 10058\nf 8983 10058 8984\nf 8984 10058 10059\nf 8984 10059 8985\nf 8985 10059 10060\nf 8985 10060 8986\nf 8986 10060 10061\nf 8986 10061 8987\nf 8987 10061 10062\nf 8987 10062 8988\nf 8988 10062 10063\nf 8988 10063 8989\nf 8989 10063 10064\nf 8989 10064 8990\nf 8990 10064 10065\nf 8990 10065 8991\nf 8991 10065 10066\nf 8991 10066 8992\nf 8992 10066 10067\nf 8992 10067 8993\nf 8993 10067 10068\nf 8993 10068 8994\nf 8994 10068 10069\nf 8994 10069 8995\nf 8995 10069 10070\nf 8995 10070 8996\nf 8996 10070 10071\nf 8996 10071 8997\nf 8997 10071 10072\nf 8997 10072 8998\nf 8998 10072 10073\nf 8998 10073 8999\nf 8999 10073 10074\nf 8999 10074 9000\nf 9000 10074 10075\nf 9000 10075 9001\nf 9001 10075 10076\nf 9001 10076 9002\nf 9002 10076 10078\nf 9002 10078 10077\nf 9003 9994 10079\nf 9003 10079 9010\nf 9004 9011 9013\nf 9004 9013 10131\nf 9004 10080 9006\nf 9004 10131 10080\nf 9005 9006 9007\nf 9006 10080 10081\nf 9006 10081 9007\nf 9007 10081 9008\nf 9008 10081 10082\nf 9008 10082 9009\nf 9009 10082 10084\nf 9009 10084 10083\nf 9010 10079 10129\nf 9010 10129 9014\nf 9011 9012 9013\nf 9012 9015 10134\nf 9012 10130 10132\nf 9012 10132 9013\nf 9012 10134 10130\nf 9013 10132 10131\nf 9014 10129 10133\nf 9014 10133 9017\nf 9015 9016 10137\nf 9015 10137 10134\nf 9016 9018 9019\nf 9016 9019 10137\nf 9017 10133 10136\nf 9017 10136 9020\nf 9018 9021 10140\nf 9018 10140 9019\nf 9019 10138 10137\nf 9019 10140 10138\nf 9020 10136 10139\nf 9020 10139 9022\nf 9021 9024 10144\nf 9021 10144 10140\nf 9022 10139 10142\nf 9022 10142 9023\nf 9023 10142 10143\nf 9023 10143 10145\nf 9023 10145 9025\nf 9024 9026 10146\nf 9024 10146 10144\nf 9025 10145 9027\nf 9026 9028 10148\nf 9026 10148 10146\nf 9027 10145 10147\nf 9027 10147 9029\nf 9028 9030 10150\nf 9028 10150 10148\nf 9029 10147 10149\nf 9029 10149 9031\nf 9030 9032 10152\nf 9030 10152 10150\nf 9031 10149 10151\nf 9031 10151 9033\nf 9032 9034 10154\nf 9032 10154 10152\nf 9033 10151 10153\nf 9033 10153 9035\nf 9034 9036 10156\nf 9034 10156 10154\nf 9035 10153 10155\nf 9035 10155 9037\nf 9036 9038 10158\nf 9036 10158 10156\nf 9037 10155 10157\nf 9037 10157 9039\nf 9038 9040 10160\nf 9038 10160 10158\nf 9039 10157 10159\nf 9039 10159 9041\nf 9040 9042 10162\nf 9040 10162 10160\nf 9041 10159 10161\nf 9041 10161 9043\nf 9042 9044 10164\nf 9042 10164 10162\nf 9043 10161 10163\nf 9043 10163 9045\nf 9044 9046 10166\nf 9044 10166 10164\nf 9045 10163 10165\nf 9045 10165 9047\nf 9046 9048 10168\nf 9046 10168 10166\nf 9047 10165 10167\nf 9047 10167 9049\nf 9048 9051 10171\nf 9048 10171 10168\nf 9049 10167 10169\nf 9049 10169 9050\nf 9050 10169 10170\nf 9050 10170 10172\nf 9050 10172 9052\nf 9051 9053 10173\nf 9051 10173 10171\nf 9052 10172 9054\nf 9053 9055 10175\nf 9053 10175 10173\nf 9054 10172 10174\nf 9054 10174 9056\nf 9055 9057 10177\nf 9055 10177 10175\nf 9056 10174 10176\nf 9056 10176 9058\nf 9057 9059 10179\nf 9057 10179 10177\nf 9058 10176 10178\nf 9058 10178 9060\nf 9059 9061 10181\nf 9059 10181 10179\nf 9060 10178 10180\nf 9060 10180 9063\nf 9061 9062 10183\nf 9061 10183 10181\nf 9062 9064 9065\nf 9062 9065 10183\nf 9063 10180 10182\nf 9063 10182 9066\nf 9064 9067 9065\nf 9065 9067 9068\nf 9065 9068 10185\nf 9065 10185 10183\nf 9066 10182 10184\nf 9066 10184 9069\nf 9067 9070 9068\nf 9068 9070 9071\nf 9068 9071 10187\nf 9068 10187 10185\nf 9069 10184 10186\nf 9069 10186 9072\nf 9070 9073 9071\nf 9071 9073 9074\nf 9071 9074 10189\nf 9071 10189 10187\nf 9072 10186 10188\nf 9072 10188 9075\nf 9073 9076 10193\nf 9073 10193 9074\nf 9074 10190 10189\nf 9074 10193 10190\nf 9075 10188 10191\nf 9075 10191 9077\nf 9076 9079 10197\nf 9076 10197 10193\nf 9077 9078 9081\nf 9077 9081 9080\nf 9077 10191 9078\nf 9078 10191 10192\nf 9078 10192 10195\nf 9078 10195 9081\nf 9079 9082 10201\nf 9079 10201 10197\nf 9080 9081 9084\nf 9080 9084 9083\nf 9081 10195 10199\nf 9081 10199 9084\nf 9082 9085 10203\nf 9082 10203 10201\nf 9083 9084 9087\nf 9083 9087 9086\nf 9084 10199 10202\nf 9084 10202 9087\nf 9085 9088 10205\nf 9085 10205 10203\nf 9086 9087 9090\nf 9086 9090 9089\nf 9087 10202 10204\nf 9087 10204 9090\nf 9088 9091 10207\nf 9088 10207 10205\nf 9089 9090 9094\nf 9089 9094 9093\nf 9090 10204 10206\nf 9090 10206 9094\nf 9091 9092 10209\nf 9091 10209 10207\nf 9092 9095 9096\nf 9092 9096 10209\nf 9093 9094 9099\nf 9093 9099 9097\nf 9094 10206 10208\nf 9094 10208 9099\nf 9095 9100 9096\nf 9096 9100 9101\nf 9096 9101 10211\nf 9096 10211 10209\nf 9097 9099 9098\nf 9098 9099 10210\nf 9098 10210 9102\nf 9099 10208 10210\nf 9100 9103 9101\nf 9101 9103 9104\nf 9101 9104 10213\nf 9101 10213 10211\nf 9102 10210 10212\nf 9102 10212 9105\nf 9103 9106 10216\nf 9103 10216 9104\nf 9104 10214 10213\nf 9104 10216 10214\nf 9105 10212 10215\nf 9105 10215 9107\nf 9106 9108 10219\nf 9106 10219 10216\nf 9107 10215 10218\nf 9107 10218 9109\nf 9108 9110 10222\nf 9108 10222 10219\nf 9109 10218 10221\nf 9109 10221 9111\nf 9110 9112 10225\nf 9110 10225 10222\nf 9111 10221 10224\nf 9111 10224 9113\nf 9112 9114 10227\nf 9112 10227 10225\nf 9113 10224 10226\nf 9113 10226 9115\nf 9114 9116 10229\nf 9114 10229 10227\nf 9115 10226 10228\nf 9115 10228 9117\nf 9116 9118 10231\nf 9116 10231 10229\nf 9117 10228 10230\nf 9117 10230 9119\nf 9118 9120 10233\nf 9118 10233 10231\nf 9119 10230 10232\nf 9119 10232 9121\nf 9120 9122 10235\nf 9120 10235 10233\nf 9121 10232 10234\nf 9121 10234 9123\nf 9122 9124 10237\nf 9122 10237 10235\nf 9123 10234 10236\nf 9123 10236 9125\nf 9124 9126 10239\nf 9124 10239 10237\nf 9125 10236 10238\nf 9125 10238 9127\nf 9126 9128 10241\nf 9126 10241 10239\nf 9127 10238 10240\nf 9127 10240 9129\nf 9128 9130 10243\nf 9128 10243 10241\nf 9129 10240 10242\nf 9129 10242 9131\nf 9130 9132 10245\nf 9130 10245 10243\nf 9131 10242 10244\nf 9131 10244 9133\nf 9132 9134 10248\nf 9132 10248 10245\nf 9133 10244 10246\nf 9133 10246 9135\nf 9134 9138 10251\nf 9134 10251 10248\nf 9135 9137 9136\nf 9135 10246 9137\nf 9136 9137 10249\nf 9136 10249 9139\nf 9137 10246 10247\nf 9137 10247 10249\nf 9138 9140 10254\nf 9138 10254 10251\nf 9139 10249 10252\nf 9139 10252 9141\nf 9140 9142 10256\nf 9140 10256 10254\nf 9141 10252 10255\nf 9141 10255 9143\nf 9142 9144 10258\nf 9142 10258 10256\nf 9143 10255 10257\nf 9143 10257 9145\nf 9144 9146 10260\nf 9144 10260 10258\nf 9145 10257 10259\nf 9145 10259 9147\nf 9146 9148 10262\nf 9146 10262 10260\nf 9147 10259 10261\nf 9147 10261 9150\nf 9148 9149 10264\nf 9148 10264 10262\nf 9149 9151 9152\nf 9149 9152 10264\nf 9150 10261 10263\nf 9150 10263 9153\nf 9151 9154 9152\nf 9152 9154 9155\nf 9152 9155 10266\nf 9152 10266 10264\nf 9153 10263 10265\nf 9153 10265 9156\nf 9154 9157 9155\nf 9155 9157 9158\nf 9155 9158 10268\nf 9155 10268 10266\nf 9156 10265 10267\nf 9156 10267 9159\nf 9157 9160 10271\nf 9157 10271 9158\nf 9158 10269 10268\nf 9158 10271 10269\nf 9159 10267 10270\nf 9159 10270 9161\nf 9160 9162 10274\nf 9160 10274 10271\nf 9161 10270 10273\nf 9161 10273 9163\nf 9162 9165 10277\nf 9162 10277 10274\nf 9163 10273 10275\nf 9163 10275 9164\nf 9164 10275 10276\nf 9164 10276 10278\nf 9164 10278 9166\nf 9165 9167 10280\nf 9165 10280 10277\nf 9166 10278 9168\nf 9167 9169 10283\nf 9167 10283 10280\nf 9168 10278 10281\nf 9168 10281 9170\nf 9169 9171 10286\nf 9169 10286 10283\nf 9170 10281 10284\nf 9170 10284 9172\nf 9171 9173 10288\nf 9171 10288 10286\nf 9172 10284 10287\nf 9172 10287 9174\nf 9173 9175 10290\nf 9173 10290 10288\nf 9174 10287 10289\nf 9174 10289 9176\nf 9175 9177 10292\nf 9175 10292 10290\nf 9176 10289 10291\nf 9176 10291 9178\nf 9177 9179 10294\nf 9177 10294 10292\nf 9178 10291 10293\nf 9178 10293 9180\nf 9179 9181 10296\nf 9179 10296 10294\nf 9180 10293 10295\nf 9180 10295 9183\nf 9181 9182 10298\nf 9181 10298 10296\nf 9182 9184 9185\nf 9182 9185 10298\nf 9183 10295 10297\nf 9183 10297 9186\nf 9184 9187 10301\nf 9184 10301 9185\nf 9185 10299 10298\nf 9185 10301 10299\nf 9186 10297 10300\nf 9186 10300 9188\nf 9187 9189 10303\nf 9187 10303 10301\nf 9188 10300 10302\nf 9188 10302 9190\nf 9189 9191 10305\nf 9189 10305 10303\nf 9190 10302 10304\nf 9190 10304 9192\nf 9191 9193 10307\nf 9191 10307 10305\nf 9192 10304 10306\nf 9192 10306 9194\nf 9193 9195 10309\nf 9193 10309 10307\nf 9194 10306 10308\nf 9194 10308 9196\nf 9195 9197 10311\nf 9195 10311 10309\nf 9196 10308 10310\nf 9196 10310 9198\nf 9197 9199 10313\nf 9197 10313 10311\nf 9198 10310 10312\nf 9198 10312 9200\nf 9199 9201 10315\nf 9199 10315 10313\nf 9200 10312 10314\nf 9200 10314 9202\nf 9201 9203 10317\nf 9201 10317 10315\nf 9202 10314 10316\nf 9202 10316 9204\nf 9203 9205 10320\nf 9203 10320 10317\nf 9204 10316 10318\nf 9204 10318 9206\nf 9205 9208 10322\nf 9205 10322 10320\nf 9206 9207 9211\nf 9206 9211 9210\nf 9206 10318 9207\nf 9207 10318 10319\nf 9207 10319 10321\nf 9207 10321 9211\nf 9208 9209 10322\nf 9209 9212 10325\nf 9209 10323 10322\nf 9209 10325 10323\nf 9210 9211 9214\nf 9210 9214 9213\nf 9211 10321 10324\nf 9211 10324 9214\nf 9212 9215 10327\nf 9212 10327 10325\nf 9213 9214 9217\nf 9213 9217 9216\nf 9214 10324 10326\nf 9214 10326 9217\nf 9215 9218 10331\nf 9215 10331 10327\nf 9216 9217 10329\nf 9216 10329 10332\nf 9216 10332 9219\nf 9217 10326 10328\nf 9217 10328 10329\nf 9218 9220 10333\nf 9218 10333 10331\nf 9219 10332 9222\nf 9220 9221 10333\nf 9221 9223 10336\nf 9221 10334 10333\nf 9221 10336 10334\nf 9222 10332 10335\nf 9222 10335 9224\nf 9223 9225 10338\nf 9223 10338 10336\nf 9224 10335 10337\nf 9224 10337 9226\nf 9225 9227 10338\nf 9226 10337 10340\nf 9226 10340 9230\nf 9227 9228 9229\nf 9227 9229 10338\nf 9228 9231 10341\nf 9228 10341 9229\nf 9229 10339 10338\nf 9229 10341 10339\nf 9230 10340 10342\nf 9230 10342 9232\nf 9231 9235 10347\nf 9231 10344 10341\nf 9231 10347 10344\nf 9232 9234 9233\nf 9232 10342 9234\nf 9233 9234 10345\nf 9233 10345 9236\nf 9234 10342 10343\nf 9234 10343 10345\nf 9235 9238 10347\nf 9236 9241 9237\nf 9236 10345 10350\nf 9236 10350 10352\nf 9236 10352 9241\nf 9237 9241 9240\nf 9238 9239 10347\nf 9238 9242 9244\nf 9238 9244 9239\nf 9239 9244 10351\nf 9239 10348 10347\nf 9239 10351 10348\nf 9240 9241 9246\nf 9240 9246 9245\nf 9241 10352 9246\nf 9242 9243 9244\nf 9243 9247 10354\nf 9243 10354 9244\nf 9244 10354 10351\nf 9245 9246 9249\nf 9245 9249 9248\nf 9246 10352 10355\nf 9246 10355 9249\nf 9247 9250 10359\nf 9247 10356 10354\nf 9247 10359 10356\nf 9248 9249 9252\nf 9248 9252 9251\nf 9249 10355 10358\nf 9249 10358 9252\nf 9250 9253 10359\nf 9251 9252 9256\nf 9251 9256 9255\nf 9252 10358 10362\nf 9252 10362 9256\nf 9253 9254 10359\nf 9253 9257 9258\nf 9253 9258 9254\nf 9254 9258 10363\nf 9254 10360 10359\nf 9254 10363 10360\nf 9255 9256 10365\nf 9255 10365 10367\nf 9255 10367 9259\nf 9256 10362 10364\nf 9256 10364 10365\nf 9257 9262 9264\nf 9257 9264 9258\nf 9258 9264 10366\nf 9258 10366 10363\nf 9259 10367 10369\nf 9259 10369 9260\nf 9260 10369 9261\nf 9261 9266 9265\nf 9261 10369 9266\nf 9262 9263 9264\nf 9263 9268 10370\nf 9263 10370 9264\nf 9264 10370 10366\nf 9265 9266 10373\nf 9265 10373 9267\nf 9266 10369 10371\nf 9266 10371 10373\nf 9267 10373 10374\nf 9267 10374 9269\nf 9268 9273 10375\nf 9268 10375 10370\nf 9269 10374 10378\nf 9269 10378 10379\nf 9269 10379 9270\nf 9270 10379 10380\nf 9270 10380 9271\nf 9271 10380 10382\nf 9271 10382 9272\nf 9272 10382 9274\nf 9273 9274 9275\nf 9273 9275 10375\nf 9274 10381 9275\nf 9274 10382 10381\nf 9275 10376 10375\nf 9275 10381 10376\nf 9276 9277 10383\nf 9276 10383 10398\nf 9276 10398 9290\nf 9277 9278 10384\nf 9277 10384 10383\nf 9278 9279 10385\nf 9278 10385 10384\nf 9279 9292 10387\nf 9279 10386 10385\nf 9279 10387 10386\nf 9280 9281 10388\nf 9280 10388 10409\nf 9280 10409 9298\nf 9281 9282 10389\nf 9281 10389 10388\nf 9282 9283 10390\nf 9282 10390 10389\nf 9283 9284 10391\nf 9283 10391 10390\nf 9284 9285 10392\nf 9284 10392 10391\nf 9285 9286 10393\nf 9285 10393 10392\nf 9286 9287 10394\nf 9286 10394 10393\nf 9287 9300 10395\nf 9287 10395 10394\nf 9288 9289 10396\nf 9288 10396 10416\nf 9288 10416 9304\nf 9289 9291 10397\nf 9289 10397 10396\nf 9290 10398 9291\nf 9291 10398 10399\nf 9291 10399 10397\nf 9292 9293 9294\nf 9292 9294 10387\nf 9293 9295 10402\nf 9293 10402 9294\nf 9294 10401 10387\nf 9294 10402 10401\nf 9295 9296 10402\nf 9296 9305 10405\nf 9296 10404 10402\nf 9296 10405 10404\nf 9297 9299 10407\nf 9297 9310 9308\nf 9297 10406 9310\nf 9297 10407 10406\nf 9298 10409 9299\nf 9299 10409 10410\nf 9299 10410 10407\nf 9300 9301 10413\nf 9300 10412 10395\nf 9300 10413 10412\nf 9301 9302 10413\nf 9302 9303 10414\nf 9302 10414 10413\nf 9303 9311 10415\nf 9303 10415 10414\nf 9304 10416 9312\nf 9305 9306 9307\nf 9305 9307 10405\nf 9306 9313 9315\nf 9306 9315 10418\nf 9306 10418 9307\nf 9307 10417 10405\nf 9307 10418 10417\nf 9308 9310 9309\nf 9309 9310 10419\nf 9309 10419 10420\nf 9309 10420 9316\nf 9310 10406 10419\nf 9311 9319 10426\nf 9311 10421 10415\nf 9311 10426 10421\nf 9312 10416 10422\nf 9312 10422 9320\nf 9313 9314 9315\nf 9314 9321 9323\nf 9314 9323 10424\nf 9314 10424 9315\nf 9315 10423 10418\nf 9315 10424 10423\nf 9316 9318 9317\nf 9316 10420 9318\nf 9317 9318 10425\nf 9317 10425 9324\nf 9318 10420 10425\nf 9319 9325 10430\nf 9319 10430 10426\nf 9320 10422 10427\nf 9320 10427 9326\nf 9321 9322 9323\nf 9322 9327 9323\nf 9323 9327 10428\nf 9323 10428 10424\nf 9324 10425 10429\nf 9324 10429 9329\nf 9325 9330 10438\nf 9325 10438 10430\nf 9326 10427 10431\nf 9326 10431 9331\nf 9327 9328 10433\nf 9327 10432 10428\nf 9327 10433 10432\nf 9328 9332 10433\nf 9329 10429 10435\nf 9329 10435 9333\nf 9330 9335 10442\nf 9330 10442 10438\nf 9331 10431 10439\nf 9331 10439 9336\nf 9332 9337 10444\nf 9332 10440 10433\nf 9332 10444 10440\nf 9333 9334 9340\nf 9333 9340 9338\nf 9333 10435 9334\nf 9334 10435 10436\nf 9334 10436 10441\nf 9334 10441 9340\nf 9335 9341 10447\nf 9335 10447 10442\nf 9336 10439 10443\nf 9336 10443 9343\nf 9337 9344 10444\nf 9338 9340 9339\nf 9339 9340 10446\nf 9339 10446 9347\nf 9340 10441 10446\nf 9341 9342 9349\nf 9341 9349 10451\nf 9341 10451 10447\nf 9342 9348 9349\nf 9343 10443 10448\nf 9343 10448 9350\nf 9344 9345 9346\nf 9344 9346 10445\nf 9344 10445 10444\nf 9345 9351 9346\nf 9346 9351 10449\nf 9346 10449 10445\nf 9347 10446 10450\nf 9347 10450 9352\nf 9348 9353 10456\nf 9348 10452 9349\nf 9348 10456 10452\nf 9349 10452 10451\nf 9350 10448 10453\nf 9350 10453 9354\nf 9351 9356 10460\nf 9351 10454 10449\nf 9351 10460 10454\nf 9352 10450 10455\nf 9352 10455 9357\nf 9353 9358 10456\nf 9354 9361 9355\nf 9354 10453 10459\nf 9354 10459 10463\nf 9354 10463 9361\nf 9355 9361 9360\nf 9356 9362 10465\nf 9356 10465 10460\nf 9357 10455 10461\nf 9357 10461 9363\nf 9358 9359 10456\nf 9358 9364 9365\nf 9358 9365 9359\nf 9359 9365 10462\nf 9359 10457 10456\nf 9359 10462 10457\nf 9360 9361 10464\nf 9360 10464 10469\nf 9360 10469 9366\nf 9361 10463 10464\nf 9362 9367 10471\nf 9362 10471 10465\nf 9363 10461 10466\nf 9363 10466 9369\nf 9364 9370 10474\nf 9364 10468 9365\nf 9364 10474 10468\nf 9365 10467 10462\nf 9365 10468 10467\nf 9366 10469 9371\nf 9367 9368 10472\nf 9367 10472 10471\nf 9368 9372 10472\nf 9369 10466 10473\nf 9369 10473 9373\nf 9370 9374 10474\nf 9371 10469 10477\nf 9371 10477 9376\nf 9372 9377 10482\nf 9372 10478 10472\nf 9372 10482 10478\nf 9373 10473 10479\nf 9373 10479 9378\nf 9374 9375 10474\nf 9374 9379 9381\nf 9374 9381 9375\nf 9375 9381 10480\nf 9375 10475 10474\nf 9375 10480 10475\nf 9376 10477 10481\nf 9376 10481 9382\nf 9377 9383 10486\nf 9377 10486 10482\nf 9378 10479 10483\nf 9378 10483 9384\nf 9379 9380 9381\nf 9380 9385 10484\nf 9380 10484 9381\nf 9381 10484 10480\nf 9382 10481 10485\nf 9382 10485 9386\nf 9383 9387 10490\nf 9383 10490 10486\nf 9384 10483 10487\nf 9384 10487 9388\nf 9385 9389 10492\nf 9385 10488 10484\nf 9385 10492 10488\nf 9386 10485 10489\nf 9386 10489 9390\nf 9387 9391 10494\nf 9387 10494 10490\nf 9388 10487 10491\nf 9388 10491 9392\nf 9389 9393 10496\nf 9389 10496 10492\nf 9390 10489 10493\nf 9390 10493 9394\nf 9391 9395 10498\nf 9391 10498 10494\nf 9392 10491 10495\nf 9392 10495 9396\nf 9393 9397 10500\nf 9393 10500 10496\nf 9394 10493 10497\nf 9394 10497 9398\nf 9395 9399 10502\nf 9395 10502 10498\nf 9396 10495 10499\nf 9396 10499 9400\nf 9397 9402 10505\nf 9397 10505 10500\nf 9398 10497 10501\nf 9398 10501 9403\nf 9399 9404 10507\nf 9399 10507 10502\nf 9400 10499 10503\nf 9400 10503 9401\nf 9401 10503 10504\nf 9401 10504 10508\nf 9401 10508 9405\nf 9402 9406 10510\nf 9402 10510 10505\nf 9403 10501 10506\nf 9403 10506 9407\nf 9404 9408 10512\nf 9404 10512 10507\nf 9405 10508 9409\nf 9406 9410 10514\nf 9406 10514 10510\nf 9407 10506 10511\nf 9407 10511 9411\nf 9408 9412 10516\nf 9408 10516 10512\nf 9409 10508 10513\nf 9409 10513 9414\nf 9410 9416 10522\nf 9410 10522 10514\nf 9411 10511 10515\nf 9411 10515 9417\nf 9412 9413 10517\nf 9412 10517 10516\nf 9413 9418 10518\nf 9413 10518 10517\nf 9414 10513 10520\nf 9414 10520 9415\nf 9415 9440 9438\nf 9415 10519 9440\nf 9415 10520 10521\nf 9415 10521 10519\nf 9416 9441 10564\nf 9416 10564 10522\nf 9417 10515 10523\nf 9417 10523 9442\nf 9418 9419 9420\nf 9418 9420 10518\nf 9419 9421 10525\nf 9419 10525 9420\nf 9420 10524 10518\nf 9420 10525 10524\nf 9421 9422 10525\nf 9422 9423 10526\nf 9422 10526 10525\nf 9423 9424 10527\nf 9423 10527 10526\nf 9424 9443 10529\nf 9424 10528 10527\nf 9424 10529 10528\nf 9425 9426 10550\nf 9425 9519 9517\nf 9425 10549 9519\nf 9425 10550 10549\nf 9426 9427 10551\nf 9426 10551 10550\nf 9427 9428 10552\nf 9427 10552 10551\nf 9428 9429 10553\nf 9428 10553 10552\nf 9429 9430 10554\nf 9429 10554 10553\nf 9430 9431 10555\nf 9430 10555 10554\nf 9431 9432 10556\nf 9431 10556 10555\nf 9432 9433 10557\nf 9432 10557 10556\nf 9433 9434 10558\nf 9433 10558 10557\nf 9434 9435 10559\nf 9434 10559 10558\nf 9435 9436 10560\nf 9435 10560 10559\nf 9436 9437 10561\nf 9436 10561 10560\nf 9437 9439 10563\nf 9437 10563 10561\nf 9438 9440 9439\nf 9439 9440 10562\nf 9439 10562 10563\nf 9440 10519 10562\nf 9441 9520 10620\nf 9441 10620 10564\nf 9442 10523 10565\nf 9442 10565 9521\nf 9443 9444 9445\nf 9443 9445 10529\nf 9444 9446 10567\nf 9444 10567 9445\nf 9445 10566 10529\nf 9445 10567 10566\nf 9446 9447 10567\nf 9447 9448 10569\nf 9447 10569 10567\nf 9448 9449 10570\nf 9448 10570 10569\nf 9449 9450 10571\nf 9449 10571 10570\nf 9450 9451 10572\nf 9450 10572 10571\nf 9451 9452 10573\nf 9451 10573 10572\nf 9452 9453 10574\nf 9452 10574 10573\nf 9453 9454 10575\nf 9453 10575 10574\nf 9454 9455 10576\nf 9454 10576 10575\nf 9455 9456 10577\nf 9455 10577 10576\nf 9456 9457 10578\nf 9456 10578 10577\nf 9457 9458 10579\nf 9457 10579 10578\nf 9458 9459 10580\nf 9458 10580 10579\nf 9459 9460 10581\nf 9459 10581 10580\nf 9460 9461 10582\nf 9460 10582 10581\nf 9461 9462 10583\nf 9461 10583 10582\nf 9462 9463 10584\nf 9462 10584 10583\nf 9463 9464 10586\nf 9463 10586 10584\nf 9464 9465 10585\nf 9464 9466 9465\nf 9464 10585 10586\nf 9465 9466 9467\nf 9465 9467 10531\nf 9465 10530 10585\nf 9465 10531 10530\nf 9466 9468 9467\nf 9467 9468 9469\nf 9467 9469 10532\nf 9467 10532 10531\nf 9468 9470 9469\nf 9469 9470 9471\nf 9469 9471 10533\nf 9469 10533 10532\nf 9470 9472 9471\nf 9471 9472 9473\nf 9471 9473 10534\nf 9471 10534 10533\nf 9472 9474 9473\nf 9473 9474 9475\nf 9473 9475 10535\nf 9473 10535 10534\nf 9474 9476 9475\nf 9475 9476 9477\nf 9475 9477 10536\nf 9475 10536 10535\nf 9476 9478 9477\nf 9477 9478 9479\nf 9477 9479 10537\nf 9477 10537 10536\nf 9478 9480 9479\nf 9479 9480 9481\nf 9479 9481 10538\nf 9479 10538 10537\nf 9480 9482 10589\nf 9480 10589 9481\nf 9481 10588 10538\nf 9481 10589 10588\nf 9482 9483 10589\nf 9483 9484 10591\nf 9483 10591 10589\nf 9484 9485 10593\nf 9484 10593 10591\nf 9485 9486 10595\nf 9485 10595 10593\nf 9486 9487 10597\nf 9486 10597 10595\nf 9487 9488 10599\nf 9487 10599 10597\nf 9488 9489 10601\nf 9488 10601 10599\nf 9489 9490 10603\nf 9489 10603 10601\nf 9490 9491 10605\nf 9490 10605 10603\nf 9491 9492 10607\nf 9491 10607 10605\nf 9492 9493 10609\nf 9492 10609 10607\nf 9493 9494 10611\nf 9493 10611 10609\nf 9494 9495 10614\nf 9494 10614 10611\nf 9495 9496 10613\nf 9495 9497 9496\nf 9495 10613 10614\nf 9496 9497 9498\nf 9496 9498 10540\nf 9496 10539 10613\nf 9496 10540 10539\nf 9497 9499 9498\nf 9498 9499 9500\nf 9498 9500 10541\nf 9498 10541 10540\nf 9499 9501 9500\nf 9500 9501 9502\nf 9500 9502 10542\nf 9500 10542 10541\nf 9501 9503 9502\nf 9502 9503 9504\nf 9502 9504 10543\nf 9502 10543 10542\nf 9503 9505 9504\nf 9504 9505 9506\nf 9504 9506 10544\nf 9504 10544 10543\nf 9505 9507 9506\nf 9506 9507 9508\nf 9506 9508 10545\nf 9506 10545 10544\nf 9507 9509 9508\nf 9508 9509 9510\nf 9508 9510 10546\nf 9508 10546 10545\nf 9509 9511 10617\nf 9509 10617 9510\nf 9510 10616 10546\nf 9510 10617 10616\nf 9511 9512 10617\nf 9512 9513 10619\nf 9512 10619 10617\nf 9513 9514 10618\nf 9513 9515 9514\nf 9513 10618 10619\nf 9514 9515 9516\nf 9514 9516 10548\nf 9514 10547 10618\nf 9514 10548 10547\nf 9515 9518 9516\nf 9516 9518 9519\nf 9516 9519 10549\nf 9516 10549 10548\nf 9517 9519 9518\nf 9520 9522 10622\nf 9520 10622 10620\nf 9521 10565 10621\nf 9521 10621 9523\nf 9522 9524 10624\nf 9522 10624 10622\nf 9523 10621 10623\nf 9523 10623 9525\nf 9524 9526 10626\nf 9524 10626 10624\nf 9525 10623 10625\nf 9525 10625 9527\nf 9526 9528 10628\nf 9526 10628 10626\nf 9527 10625 10627\nf 9527 10627 9529\nf 9528 9530 10630\nf 9528 10630 10628\nf 9529 10627 10629\nf 9529 10629 9531\nf 9530 9532 10632\nf 9530 10632 10630\nf 9531 10629 10631\nf 9531 10631 9533\nf 9532 9534 10634\nf 9532 10634 10632\nf 9533 10631 10633\nf 9533 10633 9535\nf 9534 9536 10636\nf 9534 10636 10634\nf 9535 10633 10635\nf 9535 10635 9537\nf 9536 9544 10646\nf 9536 10646 10636\nf 9537 10635 10637\nf 9537 10637 9545\nf 9538 9553 10655\nf 9538 10638 10639\nf 9538 10639 9539\nf 9538 10655 10638\nf 9539 10639 10640\nf 9539 10640 9540\nf 9540 10640 10641\nf 9540 10641 9541\nf 9541 10641 9555\nf 9542 9583 9585\nf 9542 9585 10642\nf 9542 10642 10643\nf 9542 10643 10644\nf 9542 10644 9543\nf 9543 10644 10645\nf 9543 10645 9586\nf 9544 9594 10689\nf 9544 10689 10646\nf 9545 10637 10647\nf 9545 10647 9595\nf 9546 9596 10691\nf 9546 10648 10649\nf 9546 10649 9547\nf 9546 10691 10648\nf 9547 10649 10650\nf 9547 10650 9548\nf 9548 10650 10651\nf 9548 10651 9549\nf 9549 10651 10652\nf 9549 10652 9550\nf 9550 10652 10653\nf 9550 10653 9551\nf 9551 10653 10654\nf 9551 10654 9552\nf 9552 10654 10656\nf 9552 10656 9554\nf 9553 9554 10655\nf 9554 10656 10655\nf 9555 10641 10657\nf 9555 10657 10658\nf 9555 10658 9556\nf 9556 10658 10660\nf 9556 10660 9557\nf 9557 10660 10661\nf 9557 10661 9558\nf 9558 10661 10662\nf 9558 10662 9559\nf 9559 10662 10663\nf 9559 10663 9560\nf 9560 10663 10664\nf 9560 10664 9598\nf 9561 9625 9627\nf 9561 9627 9628\nf 9561 9628 9562\nf 9562 9628 9629\nf 9562 9629 9563\nf 9563 9629 9630\nf 9563 9630 9564\nf 9564 9630 10725\nf 9564 10665 9565\nf 9564 10725 10665\nf 9565 10665 10666\nf 9565 10666 9566\nf 9566 10666 10667\nf 9566 10667 9567\nf 9567 10667 10668\nf 9567 10668 9568\nf 9568 10668 10669\nf 9568 10669 9569\nf 9569 10669 10670\nf 9569 10670 9570\nf 9570 10670 10671\nf 9570 10671 9571\nf 9571 10671 10672\nf 9571 10672 9572\nf 9572 10672 10673\nf 9572 10673 9573\nf 9573 10673 10674\nf 9573 10674 9574\nf 9574 10674 10675\nf 9574 10675 9575\nf 9575 10675 10676\nf 9575 10676 9576\nf 9576 10676 10677\nf 9576 10677 9577\nf 9577 10677 10678\nf 9577 10678 9578\nf 9578 10678 10679\nf 9578 10679 9579\nf 9579 10679 10680\nf 9579 10680 9580\nf 9580 10680 10681\nf 9580 10681 9581\nf 9581 10681 10683\nf 9581 10683 9582\nf 9582 10683 9584\nf 9583 9584 9585\nf 9584 10682 9585\nf 9584 10683 10682\nf 9585 10682 10642\nf 9586 9588 9587\nf 9586 10645 9588\nf 9587 9588 10685\nf 9587 10685 9589\nf 9588 10645 10684\nf 9588 10684 10685\nf 9589 10685 10686\nf 9589 10686 9590\nf 9590 10686 10687\nf 9590 10687 9591\nf 9591 10687 10688\nf 9591 10688 9592\nf 9592 10688 9593\nf 9593 9632 9631\nf 9593 10688 9632\nf 9594 9634 10734\nf 9594 10734 10689\nf 9595 10647 10690\nf 9595 10690 9635\nf 9596 9597 10691\nf 9597 9636 10736\nf 9597 10692 10691\nf 9597 10736 10692\nf 9598 9600 9599\nf 9598 10664 9600\nf 9599 9600 10696\nf 9599 10696 9601\nf 9600 10664 10695\nf 9600 10695 10696\nf 9601 10696 10698\nf 9601 10698 9602\nf 9602 10698 10699\nf 9602 10699 9603\nf 9603 10699 10700\nf 9603 10700 9604\nf 9604 10700 10701\nf 9604 10701 9605\nf 9605 10701 10702\nf 9605 10702 9606\nf 9606 10702 10703\nf 9606 10703 9607\nf 9607 10703 10704\nf 9607 10704 9608\nf 9608 10704 10705\nf 9608 10705 9609\nf 9609 10705 10706\nf 9609 10706 9610\nf 9610 10706 10707\nf 9610 10707 9611\nf 9611 10707 10708\nf 9611 10708 9612\nf 9612 10708 10709\nf 9612 10709 9613\nf 9613 10709 10710\nf 9613 10710 9614\nf 9614 10710 10711\nf 9614 10711 9615\nf 9615 10711 10712\nf 9615 10712 9616\nf 9616 10712 10713\nf 9616 10713 9617\nf 9617 10713 10714\nf 9617 10714 9618\nf 9618 10714 10715\nf 9618 10715 9619\nf 9619 10715 10716\nf 9619 10716 9620\nf 9620 10716 10717\nf 9620 10717 9621\nf 9621 10717 10718\nf 9621 10718 9622\nf 9622 10718 10719\nf 9622 10719 9623\nf 9623 10719 10720\nf 9623 10720 9624\nf 9624 10720 10721\nf 9624 10721 9626\nf 9625 9626 9627\nf 9626 10721 10722\nf 9626 10722 9627\nf 9627 10722 9628\nf 9628 10722 10723\nf 9628 10723 9629\nf 9629 10723 10724\nf 9629 10724 9630\nf 9630 10724 10726\nf 9630 10726 10725\nf 9631 9632 9633\nf 9632 10688 10731\nf 9632 10731 10733\nf 9632 10733 9633\nf 9633 9638 9637\nf 9633 10733 9638\nf 9634 9639 10740\nf 9634 10740 10734\nf 9635 10690 10735\nf 9635 10735 9640\nf 9636 9641 10742\nf 9636 10742 10736\nf 9637 9638 9643\nf 9637 9643 9642\nf 9638 10733 10738\nf 9638 10738 9643\nf 9639 9644 10744\nf 9639 10744 10740\nf 9640 10735 10741\nf 9640 10741 9645\nf 9641 9646 10746\nf 9641 10746 10742\nf 9642 9643 9648\nf 9642 9648 9647\nf 9643 10738 10743\nf 9643 10743 9648\nf 9644 9649 10749\nf 9644 10749 10744\nf 9645 10741 10745\nf 9645 10745 9650\nf 9646 9651 10751\nf 9646 10751 10746\nf 9647 9648 10748\nf 9647 10748 10752\nf 9647 10752 9652\nf 9648 10743 10747\nf 9648 10747 10748\nf 9649 9653 10754\nf 9649 10754 10749\nf 9650 10745 10750\nf 9650 10750 9654\nf 9651 9655 10756\nf 9651 10756 10751\nf 9652 10752 9656\nf 9653 9657 10758\nf 9653 10758 10754\nf 9654 10750 10755\nf 9654 10755 9658\nf 9655 9659 10760\nf 9655 10760 10756\nf 9656 10752 10757\nf 9656 10757 9660\nf 9657 9662 10762\nf 9657 10762 10758\nf 9658 10755 10759\nf 9658 10759 9663\nf 9659 9664 10764\nf 9659 10764 10760\nf 9660 9666 9661\nf 9660 10757 10761\nf 9660 10761 10765\nf 9660 10765 9666\nf 9661 9666 9665\nf 9662 9667 10766\nf 9662 10766 10762\nf 9663 10759 10763\nf 9663 10763 9668\nf 9664 9669 10768\nf 9664 10768 10764\nf 9665 9666 9671\nf 9665 9671 9670\nf 9666 10765 9671\nf 9667 9672 10770\nf 9667 10770 10766\nf 9668 10763 10767\nf 9668 10767 9673\nf 9669 9675 10772\nf 9669 10772 10768\nf 9670 9671 9677\nf 9670 9677 9676\nf 9671 10765 10769\nf 9671 10769 9677\nf 9672 9678 10774\nf 9672 10774 10770\nf 9673 9680 9674\nf 9673 10767 10771\nf 9673 10771 10775\nf 9673 10775 9680\nf 9674 9680 9679\nf 9675 9681 10777\nf 9675 10777 10772\nf 9676 9677 9683\nf 9676 9683 9682\nf 9677 10769 10773\nf 9677 10773 9683\nf 9678 9684 10780\nf 9678 10780 10774\nf 9679 9680 10776\nf 9679 10776 10781\nf 9679 10781 9685\nf 9680 10775 10776\nf 9681 9686 10783\nf 9681 10783 10777\nf 9682 9683 10779\nf 9682 10779 10784\nf 9682 10784 9687\nf 9683 10773 10778\nf 9683 10778 10779\nf 9684 9688 10786\nf 9684 10786 10780\nf 9685 10781 9689\nf 9686 9690 10789\nf 9686 10789 10783\nf 9687 10784 9691\nf 9688 9692 10791\nf 9688 10791 10786\nf 9689 10781 10787\nf 9689 10787 9693\nf 9690 9694 10793\nf 9690 10793 10789\nf 9691 10784 10790\nf 9691 10790 9695\nf 9692 9696 10795\nf 9692 10795 10791\nf 9693 10787 10792\nf 9693 10792 9697\nf 9694 9698 10797\nf 9694 10797 10793\nf 9695 10790 10794\nf 9695 10794 9699\nf 9696 9700 10799\nf 9696 10799 10795\nf 9697 10792 10796\nf 9697 10796 9701\nf 9698 9702 10801\nf 9698 10801 10797\nf 9699 10794 10798\nf 9699 10798 9703\nf 9700 9704 10803\nf 9700 10803 10799\nf 9701 10796 10800\nf 9701 10800 9705\nf 9702 9706 10805\nf 9702 10805 10801\nf 9703 10798 10802\nf 9703 10802 9707\nf 9704 9708 10807\nf 9704 10807 10803\nf 9705 10800 10804\nf 9705 10804 9709\nf 9706 9710 10809\nf 9706 10809 10805\nf 9707 10802 10806\nf 9707 10806 9711\nf 9708 9712 10811\nf 9708 10811 10807\nf 9709 10804 10808\nf 9709 10808 9713\nf 9710 9714 10813\nf 9710 10813 10809\nf 9711 10806 10810\nf 9711 10810 9715\nf 9712 9716 10815\nf 9712 10815 10811\nf 9713 10808 10812\nf 9713 10812 9717\nf 9714 9718 10817\nf 9714 10817 10813\nf 9715 10810 10814\nf 9715 10814 9719\nf 9716 9720 10819\nf 9716 10819 10815\nf 9717 10812 10816\nf 9717 10816 9721\nf 9718 9723 10821\nf 9718 10821 10817\nf 9719 10814 10818\nf 9719 10818 9724\nf 9720 9725 10823\nf 9720 10823 10819\nf 9721 9727 9722\nf 9721 10816 10820\nf 9721 10820 10824\nf 9721 10824 9727\nf 9722 9727 9726\nf 9723 9728 10825\nf 9723 10825 10821\nf 9724 10818 10822\nf 9724 10822 9729\nf 9725 9730 10827\nf 9725 10827 10823\nf 9726 9727 9732\nf 9726 9732 9731\nf 9727 10824 9732\nf 9728 9733 10830\nf 9728 10830 10825\nf 9729 10822 10826\nf 9729 10826 9734\nf 9730 9735 10832\nf 9730 10832 10827\nf 9731 9732 10829\nf 9731 10829 10833\nf 9731 10833 9736\nf 9732 10824 10828\nf 9732 10828 10829\nf 9733 9737 10835\nf 9733 10835 10830\nf 9734 10826 10831\nf 9734 10831 9738\nf 9735 9739 10837\nf 9735 10837 10832\nf 9736 10833 9740\nf 9737 9741 10840\nf 9737 10840 10835\nf 9738 10831 10836\nf 9738 10836 9743\nf 9739 9744 10843\nf 9739 10843 10837\nf 9740 10833 10838\nf 9740 10838 9745\nf 9741 9742 10840\nf 9742 9746 10846\nf 9742 10841 10840\nf 9742 10846 10841\nf 9743 10836 10842\nf 9743 10842 9747\nf 9744 9748 10849\nf 9744 10849 10843\nf 9745 10838 10844\nf 9745 10844 9749\nf 9746 9750 10851\nf 9746 10851 10846\nf 9747 10842 10848\nf 9747 10848 9751\nf 9748 9752 10855\nf 9748 10855 10849\nf 9749 10844 10850\nf 9749 10850 9753\nf 9750 9754 10851\nf 9751 10848 10854\nf 9751 10854 9756\nf 9752 9757 10859\nf 9752 10859 10855\nf 9753 10850 10856\nf 9753 10856 9758\nf 9754 9755 10852\nf 9754 9759 9755\nf 9754 10852 10851\nf 9755 9759 9760\nf 9755 9760 10861\nf 9755 10857 10852\nf 9755 10861 10857\nf 9756 10854 10858\nf 9756 10858 9761\nf 9757 9762 10863\nf 9757 10863 10859\nf 9758 10856 10860\nf 9758 10860 9763\nf 9759 9764 9760\nf 9760 9764 9766\nf 9760 9766 10865\nf 9760 10865 10861\nf 9761 10858 10862\nf 9761 10862 9767\nf 9762 9768 10867\nf 9762 10867 10863\nf 9763 10860 10864\nf 9763 10864 9769\nf 9764 9765 9766\nf 9765 9770 9766\nf 9766 9770 10865\nf 9767 10862 10866\nf 9767 10866 9771\nf 9768 9772 10871\nf 9768 10871 10867\nf 9769 10864 10868\nf 9769 10868 9773\nf 9770 9774 10873\nf 9770 10869 10865\nf 9770 10873 10869\nf 9771 10866 10870\nf 9771 10870 9775\nf 9772 9776 10875\nf 9772 10875 10871\nf 9773 10868 10872\nf 9773 10872 9777\nf 9774 9778 10877\nf 9774 10877 10873\nf 9775 10870 10874\nf 9775 10874 9779\nf 9776 9780 10879\nf 9776 10879 10875\nf 9777 10872 10876\nf 9777 10876 9781\nf 9778 9782 10881\nf 9778 10881 10877\nf 9779 10874 10878\nf 9779 10878 9783\nf 9780 9784 10883\nf 9780 10883 10879\nf 9781 10876 10880\nf 9781 10880 9785\nf 9782 9786 10885\nf 9782 10885 10881\nf 9783 10878 10882\nf 9783 10882 9787\nf 9784 9788 10887\nf 9784 10887 10883\nf 9785 10880 10884\nf 9785 10884 9789\nf 9786 9790 10889\nf 9786 10889 10885\nf 9787 10882 10886\nf 9787 10886 9791\nf 9788 9792 10892\nf 9788 10892 10887\nf 9789 10884 10888\nf 9789 10888 9793\nf 9790 9794 10894\nf 9790 10894 10889\nf 9791 10886 10890\nf 9791 10890 9795\nf 9792 9798 10896\nf 9792 10896 10892\nf 9793 10888 10893\nf 9793 10893 9799\nf 9794 9800 10898\nf 9794 10898 10894\nf 9795 9797 9796\nf 9795 10890 10891\nf 9795 10891 9797\nf 9796 9797 9801\nf 9797 10891 10895\nf 9797 10895 9801\nf 9798 9802 10900\nf 9798 10900 10896\nf 9799 10893 10897\nf 9799 10897 9803\nf 9800 9804 10902\nf 9800 10902 10898\nf 9801 10895 10899\nf 9801 10899 9805\nf 9802 9806 10904\nf 9802 10904 10900\nf 9803 10897 10901\nf 9803 10901 9807\nf 9804 9808 10906\nf 9804 10906 10902\nf 9805 10899 10903\nf 9805 10903 9809\nf 9806 9810 10908\nf 9806 10908 10904\nf 9807 10901 10905\nf 9807 10905 9811\nf 9808 9812 10910\nf 9808 10910 10906\nf 9809 10903 10907\nf 9809 10907 9813\nf 9810 9815 10912\nf 9810 10912 10908\nf 9811 10905 10909\nf 9811 10909 9816\nf 9812 9817 10914\nf 9812 10914 10910\nf 9813 10907 10911\nf 9813 10911 10915\nf 9813 10915 9814\nf 9814 9819 9818\nf 9814 10915 9819\nf 9815 9820 10917\nf 9815 10917 10912\nf 9816 10909 10913\nf 9816 10913 9821\nf 9817 9822 10919\nf 9817 10919 10914\nf 9818 9819 10920\nf 9818 10920 9823\nf 9819 10915 10916\nf 9819 10916 10920\nf 9820 9824 10921\nf 9820 10921 10917\nf 9821 10913 10918\nf 9821 10918 9825\nf 9822 9826 10923\nf 9822 10923 10919\nf 9823 10920 9827\nf 9824 9828 10925\nf 9824 10925 10921\nf 9825 10918 10922\nf 9825 10922 9829\nf 9826 9831 10928\nf 9826 10928 10923\nf 9827 10920 10924\nf 9827 10924 9832\nf 9828 9833 10930\nf 9828 10930 10925\nf 9829 10922 10926\nf 9829 10926 10927\nf 9829 10927 9830\nf 9830 10927 9834\nf 9831 9835 10933\nf 9831 10933 10928\nf 9832 10924 10929\nf 9832 10929 9836\nf 9833 9837 10935\nf 9833 10935 10930\nf 9834 10927 10931\nf 9834 10931 9838\nf 9835 9839 10937\nf 9835 10937 10933\nf 9836 10929 10934\nf 9836 10934 9840\nf 9837 9842 10940\nf 9837 10940 10935\nf 9838 10931 10936\nf 9838 10936 9843\nf 9839 9844 10942\nf 9839 10942 10937\nf 9840 10934 10938\nf 9840 10938 9841\nf 9841 10938 10939\nf 9841 10939 10944\nf 9841 10944 9846\nf 9842 9847 10946\nf 9842 10946 10940\nf 9843 10936 10941\nf 9843 10941 9848\nf 9844 9845 10943\nf 9844 10943 10942\nf 9845 9850 10943\nf 9846 10944 9851\nf 9847 9852 10952\nf 9847 10952 10946\nf 9848 10941 10947\nf 9848 10947 9849\nf 9849 10947 10948\nf 9849 10948 10953\nf 9849 10953 9853\nf 9850 9854 10954\nf 9850 10949 10943\nf 9850 10954 10949\nf 9851 10944 10951\nf 9851 10951 9856\nf 9852 9858 10958\nf 9852 10958 10952\nf 9853 10953 9859\nf 9854 9855 10955\nf 9854 10955 10954\nf 9855 9860 10955\nf 9856 10951 10956\nf 9856 10956 9857\nf 9857 10956 10957\nf 9857 10957 11003\nf 9857 11003 9890\nf 9858 9892 11005\nf 9858 11005 10958\nf 9859 10953 10959\nf 9859 10959 9893\nf 9860 9861 10961\nf 9860 10960 10955\nf 9860 10961 10960\nf 9861 9862 10961\nf 9862 9863 10962\nf 9862 10962 10961\nf 9863 9864 10963\nf 9863 10963 10962\nf 9864 9865 10964\nf 9864 10964 10963\nf 9865 9866 10965\nf 9865 10965 10964\nf 9866 9894 10966\nf 9866 10966 10965\nf 9867 9868 10972\nf 9867 9924 9922\nf 9867 10971 9924\nf 9867 10972 10971\nf 9868 9869 10973\nf 9868 10973 10972\nf 9869 9870 10974\nf 9869 10974 10973\nf 9870 9871 10975\nf 9870 10975 10974\nf 9871 9872 10976\nf 9871 10976 10975\nf 9872 9873 10977\nf 9872 10977 10976\nf 9873 9874 10978\nf 9873 10978 10977\nf 9874 9875 10979\nf 9874 10979 10978\nf 9875 9876 10980\nf 9875 10980 10979\nf 9876 9877 10981\nf 9876 10981 10980\nf 9877 9878 10982\nf 9877 10982 10981\nf 9878 9879 10983\nf 9878 10983 10982\nf 9879 9880 10984\nf 9879 10984 10983\nf 9880 9881 10985\nf 9880 10985 10984\nf 9881 9882 10986\nf 9881 10986 10985\nf 9882 9883 10987\nf 9882 10987 10986\nf 9883 9884 10988\nf 9883 10988 10987\nf 9884 9885 10989\nf 9884 10989 10988\nf 9885 9886 10990\nf 9885 10990 10989\nf 9886 9925 10991\nf 9886 10991 10990\nf 9887 9888 11000\nf 9887 9953 9951\nf 9887 10999 9953\nf 9887 11000 10999\nf 9888 9889 11001\nf 9888 11001 11000\nf 9889 9891 11002\nf 9889 11002 11001\nf 9890 11003 9891\nf 9891 11003 11004\nf 9891 11004 11002\nf 9892 9954 11068\nf 9892 11068 11005\nf 9893 10959 11006\nf 9893 11006 9955\nf 9894 9895 11008\nf 9894 11007 10966\nf 9894 11008 11007\nf 9895 9896 11008\nf 9896 9897 11009\nf 9896 11009 11008\nf 9897 9898 11010\nf 9897 11010 11009\nf 9898 9899 11011\nf 9898 11011 11010\nf 9899 9900 11012\nf 9899 11012 11011\nf 9900 9901 11013\nf 9900 11013 11012\nf 9901 9902 11014\nf 9901 11014 11013\nf 9902 9903 11015\nf 9902 11015 11014\nf 9903 9904 11016\nf 9903 11016 11015\nf 9904 9905 11017\nf 9904 11017 11016\nf 9905 9906 11018\nf 9905 11018 11017\nf 9906 9907 11019\nf 9906 11019 11018\nf 9907 9908 11020\nf 9907 11020 11019\nf 9908 9909 11021\nf 9908 11021 11020\nf 9909 9910 11022\nf 9909 11022 11021\nf 9910 9911 11023\nf 9910 11023 11022\nf 9911 9912 11024\nf 9911 11024 11023\nf 9912 9913 11025\nf 9912 11025 11024\nf 9913 9914 11027\nf 9913 11027 11025\nf 9914 9915 11026\nf 9914 9916 9915\nf 9914 11026 11027\nf 9915 9916 9917\nf 9915 9917 10968\nf 9915 10967 11026\nf 9915 10968 10967\nf 9916 9918 9917\nf 9917 9918 9919\nf 9917 9919 10969\nf 9917 10969 10968\nf 9918 9920 9919\nf 9919 9920 9921\nf 9919 9921 10970\nf 9919 10970 10969\nf 9920 9923 9921\nf 9921 9923 9924\nf 9921 9924 10971\nf 9921 10971 10970\nf 9922 9924 9923\nf 9925 9926 11047\nf 9925 11045 10991\nf 9925 11047 11045\nf 9926 9927 11047\nf 9927 9928 11048\nf 9927 11048 11047\nf 9928 9929 11049\nf 9928 11049 11048\nf 9929 9930 11050\nf 9929 11050 11049\nf 9930 9931 11051\nf 9930 11051 11050\nf 9931 9932 11052\nf 9931 11052 11051\nf 9932 9933 11053\nf 9932 11053 11052\nf 9933 9934 11054\nf 9933 11054 11053\nf 9934 9935 11055\nf 9934 11055 11054\nf 9935 9936 11056\nf 9935 11056 11055\nf 9936 9937 11058\nf 9936 11058 11056\nf 9937 9938 11057\nf 9937 9939 9938\nf 9937 11057 11058\nf 9938 9939 9940\nf 9938 9940 10993\nf 9938 10992 11057\nf 9938 10993 10992\nf 9939 9941 9940\nf 9940 9941 9942\nf 9940 9942 10994\nf 9940 10994 10993\nf 9941 9943 9942\nf 9942 9943 9944\nf 9942 9944 10995\nf 9942 10995 10994\nf 9943 9945 9944\nf 9944 9945 9946\nf 9944 9946 10996\nf 9944 10996 10995\nf 9945 9947 9946\nf 9946 9947 9948\nf 9946 9948 10997\nf 9946 10997 10996\nf 9947 9949 9948\nf 9948 9949 9950\nf 9948 9950 10998\nf 9948 10998 10997\nf 9949 9952 9950\nf 9950 9952 9953\nf 9950 9953 10999\nf 9950 10999 10998\nf 9951 9953 9952\nf 9954 9956 11070\nf 9954 11070 11068\nf 9955 11006 11069\nf 9955 11069 9958\nf 9956 9957 9961\nf 9956 9961 11072\nf 9956 11072 11070\nf 9957 9959 9961\nf 9958 11069 11071\nf 9958 11071 9962\nf 9959 9960 9961\nf 9960 9963 11072\nf 9960 11072 9961\nf 9962 11071 11073\nf 9962 11073 9964\nf 9963 9965 11076\nf 9963 11074 11072\nf 9963 11076 11074\nf 9964 11073 11075\nf 9964 11075 9966\nf 9965 9967 11078\nf 9965 11078 11076\nf 9966 11075 11077\nf 9966 11077 9968\nf 9967 9969 11080\nf 9967 11080 11078\nf 9968 11077 11079\nf 9968 11079 9970\nf 9969 9971 11082\nf 9969 11082 11080\nf 9970 11079 11081\nf 9970 11081 9972\nf 9971 9973 11084\nf 9971 11084 11082\nf 9972 11081 11083\nf 9972 11083 9974\nf 9973 9975 11086\nf 9973 11086 11084\nf 9974 11083 11085\nf 9974 11085 9976\nf 9975 9977 11088\nf 9975 11088 11086\nf 9976 11085 11087\nf 9976 11087 9978\nf 9977 9979 11090\nf 9977 11090 11088\nf 9978 11087 11089\nf 9978 11089 9980\nf 9979 9981 11092\nf 9979 11092 11090\nf 9980 11089 11091\nf 9980 11091 9982\nf 9981 9983 11094\nf 9981 11094 11092\nf 9982 11091 11093\nf 9982 11093 9985\nf 9983 9984 11094\nf 9984 9986 11097\nf 9984 11095 11094\nf 9984 11097 11095\nf 9985 11093 11096\nf 9985 11096 9987\nf 9986 9988 11100\nf 9986 11100 11097\nf 9987 11096 11099\nf 9987 11099 9990\nf 9988 9989 11100\nf 9989 9992 11105\nf 9989 11101 11100\nf 9989 11105 11101\nf 9990 11099 11102\nf 9990 11102 11103\nf 9990 11103 9991\nf 9991 11103 9994\nf 9992 9993 11105\nf 9993 10077 11146\nf 9993 11106 11105\nf 9993 11146 11106\nf 9994 11103 11107\nf 9994 11107 10079\nf 9995 10083 10085\nf 9995 10085 10086\nf 9995 10086 9996\nf 9996 10086 10087\nf 9996 10087 9997\nf 9997 10087 10088\nf 9997 10088 9998\nf 9998 10088 10089\nf 9998 10089 9999\nf 9999 10089 10090\nf 9999 10090 10000\nf 10000 10090 10091\nf 10000 10091 10001\nf 10001 10091 10092\nf 10001 10092 10002\nf 10002 10092 10093\nf 10002 10093 10003\nf 10003 10093 10094\nf 10003 10094 10004\nf 10004 10094 10095\nf 10004 10095 10005\nf 10005 10095 10096\nf 10005 10096 10006\nf 10006 10096 10097\nf 10006 10097 10007\nf 10007 10097 10098\nf 10007 10098 10008\nf 10008 10098 10099\nf 10008 10099 10009\nf 10009 10099 10100\nf 10009 10100 10010\nf 10010 10100 10101\nf 10010 10101 10011\nf 10011 10101 11170\nf 10011 11108 10012\nf 10011 11170 11108\nf 10012 11108 11109\nf 10012 11109 10013\nf 10013 11109 11110\nf 10013 11110 10014\nf 10014 11110 11111\nf 10014 11111 10015\nf 10015 11111 11112\nf 10015 11112 10016\nf 10016 11112 11113\nf 10016 11113 10017\nf 10017 11113 11114\nf 10017 11114 10018\nf 10018 11114 11115\nf 10018 11115 10019\nf 10019 11115 11116\nf 10019 11116 10020\nf 10020 11116 10021\nf 10021 10102 10103\nf 10021 10103 10022\nf 10021 11116 10102\nf 10022 10103 10104\nf 10022 10104 10023\nf 10023 10104 11184\nf 10023 11117 10024\nf 10023 11184 11117\nf 10024 11117 11118\nf 10024 11118 10025\nf 10025 11118 11119\nf 10025 11119 10026\nf 10026 11119 11120\nf 10026 11120 10027\nf 10027 11120 11121\nf 10027 11121 10028\nf 10028 11121 11122\nf 10028 11122 10029\nf 10029 11122 11123\nf 10029 11123 10030\nf 10030 11123 11124\nf 10030 11124 10031\nf 10031 11124 10032\nf 10032 10105 10106\nf 10032 10106 10033\nf 10032 11124 10105\nf 10033 10106 10107\nf 10033 10107 10034\nf 10034 10107 10108\nf 10034 10108 10035\nf 10035 10108 10109\nf 10035 10109 10036\nf 10036 10109 10110\nf 10036 10110 10037\nf 10037 10110 10111\nf 10037 10111 10038\nf 10038 10111 10112\nf 10038 10112 10039\nf 10039 10112 10113\nf 10039 10113 10040\nf 10040 10113 10114\nf 10040 10114 10041\nf 10041 10114 10115\nf 10041 10115 10042\nf 10042 10115 10116\nf 10042 10116 10043\nf 10043 10116 10117\nf 10043 10117 10044\nf 10044 10117 10118\nf 10044 10118 10045\nf 10045 10118 10119\nf 10045 10119 10046\nf 10046 10119 10120\nf 10046 10120 10047\nf 10047 10120 10121\nf 10047 10121 10048\nf 10048 10121 10122\nf 10048 10122 10049\nf 10049 10122 10123\nf 10049 10123 10050\nf 10050 10123 10124\nf 10050 10124 10051\nf 10051 10124 10125\nf 10051 10125 10052\nf 10052 10125 10126\nf 10052 10126 10053\nf 10053 10126 10127\nf 10053 10127 10054\nf 10054 10127 10128\nf 10054 10128 10055\nf 10055 10128 11221\nf 10055 11125 10056\nf 10055 11221 11125\nf 10056 11125 11126\nf 10056 11126 10057\nf 10057 11126 11127\nf 10057 11127 10058\nf 10058 11127 11128\nf 10058 11128 10059\nf 10059 11128 11129\nf 10059 11129 10060\nf 10060 11129 11130\nf 10060 11130 10061\nf 10061 11130 11131\nf 10061 11131 10062\nf 10062 11131 11132\nf 10062 11132 10063\nf 10063 11132 11133\nf 10063 11133 10064\nf 10064 11133 11134\nf 10064 11134 10065\nf 10065 11134 11135\nf 10065 11135 10066\nf 10066 11135 11136\nf 10066 11136 10067\nf 10067 11136 11137\nf 10067 11137 10068\nf 10068 11137 11138\nf 10068 11138 10069\nf 10069 11138 11139\nf 10069 11139 10070\nf 10070 11139 11140\nf 10070 11140 10071\nf 10071 11140 11141\nf 10071 11141 10072\nf 10072 11141 11142\nf 10072 11142 10073\nf 10073 11142 11143\nf 10073 11143 10074\nf 10074 11143 11144\nf 10074 11144 10075\nf 10075 11144 11145\nf 10075 11145 10076\nf 10076 11145 11147\nf 10076 11147 10078\nf 10077 10078 11146\nf 10078 11147 11146\nf 10079 11107 11149\nf 10079 11149 10129\nf 10080 10131 11225\nf 10080 11150 11151\nf 10080 11151 10081\nf 10080 11225 11150\nf 10081 11151 11152\nf 10081 11152 10082\nf 10082 11152 11153\nf 10082 11153 10084\nf 10083 10084 10085\nf 10084 11153 11154\nf 10084 11154 10085\nf 10085 11154 10086\nf 10086 11154 11155\nf 10086 11155 10087\nf 10087 11155 11156\nf 10087 11156 10088\nf 10088 11156 11157\nf 10088 11157 10089\nf 10089 11157 11158\nf 10089 11158 10090\nf 10090 11158 11159\nf 10090 11159 10091\nf 10091 11159 11160\nf 10091 11160 10092\nf 10092 11160 11161\nf 10092 11161 10093\nf 10093 11161 11162\nf 10093 11162 10094\nf 10094 11162 11163\nf 10094 11163 10095\nf 10095 11163 11164\nf 10095 11164 10096\nf 10096 11164 11165\nf 10096 11165 10097\nf 10097 11165 11166\nf 10097 11166 10098\nf 10098 11166 11167\nf 10098 11167 10099\nf 10099 11167 11168\nf 10099 11168 10100\nf 10100 11168 11169\nf 10100 11169 10101\nf 10101 11169 11171\nf 10101 11171 11170\nf 10102 11116 11180\nf 10102 11180 11182\nf 10102 11182 10103\nf 10103 11182 11183\nf 10103 11183 10104\nf 10104 11183 11185\nf 10104 11185 11184\nf 10105 11124 11193\nf 10105 11193 11195\nf 10105 11195 10106\nf 10106 11195 11196\nf 10106 11196 10107\nf 10107 11196 11197\nf 10107 11197 10108\nf 10108 11197 11198\nf 10108 11198 10109\nf 10109 11198 11199\nf 10109 11199 10110\nf 10110 11199 11200\nf 10110 11200 10111\nf 10111 11200 11201\nf 10111 11201 10112\nf 10112 11201 11202\nf 10112 11202 10113\nf 10113 11202 11203\nf 10113 11203 10114\nf 10114 11203 11204\nf 10114 11204 10115\nf 10115 11204 11205\nf 10115 11205 10116\nf 10116 11205 11206\nf 10116 11206 10117\nf 10117 11206 11207\nf 10117 11207 10118\nf 10118 11207 11209\nf 10118 11209 10119\nf 10119 11209 11211\nf 10119 11211 10120\nf 10120 11211 11212\nf 10120 11212 10121\nf 10121 11212 11213\nf 10121 11213 10122\nf 10122 11213 11214\nf 10122 11214 10123\nf 10123 11214 11215\nf 10123 11215 10124\nf 10124 11215 11216\nf 10124 11216 10125\nf 10125 11216 11217\nf 10125 11217 10126\nf 10126 11217 11218\nf 10126 11218 10127\nf 10127 11218 11219\nf 10127 11219 10128\nf 10128 11219 11222\nf 10128 11222 11221\nf 10129 11149 11224\nf 10129 11224 10133\nf 10130 10134 10135\nf 10130 10135 11229\nf 10130 11226 10132\nf 10130 11229 11226\nf 10131 10132 11225\nf 10132 11226 11225\nf 10133 11224 11228\nf 10133 11228 10136\nf 10134 10137 11232\nf 10134 11232 10135\nf 10135 11230 11229\nf 10135 11232 11230\nf 10136 11228 11231\nf 10136 11231 10139\nf 10137 10138 11234\nf 10137 11234 11232\nf 10138 10140 10141\nf 10138 10141 11234\nf 10139 11231 11233\nf 10139 11233 10142\nf 10140 10144 11239\nf 10140 11239 10141\nf 10141 11235 11234\nf 10141 11239 11235\nf 10142 11233 11236\nf 10142 11236 10143\nf 10143 11236 11237\nf 10143 11237 11240\nf 10143 11240 10145\nf 10144 10146 11241\nf 10144 11241 11239\nf 10145 11240 10147\nf 10146 10148 11243\nf 10146 11243 11241\nf 10147 11240 11242\nf 10147 11242 10149\nf 10148 10150 11245\nf 10148 11245 11243\nf 10149 11242 11244\nf 10149 11244 10151\nf 10150 10152 11247\nf 10150 11247 11245\nf 10151 11244 11246\nf 10151 11246 10153\nf 10152 10154 11249\nf 10152 11249 11247\nf 10153 11246 11248\nf 10153 11248 10155\nf 10154 10156 11251\nf 10154 11251 11249\nf 10155 11248 11250\nf 10155 11250 10157\nf 10156 10158 11253\nf 10156 11253 11251\nf 10157 11250 11252\nf 10157 11252 10159\nf 10158 10160 11255\nf 10158 11255 11253\nf 10159 11252 11254\nf 10159 11254 10161\nf 10160 10162 11257\nf 10160 11257 11255\nf 10161 11254 11256\nf 10161 11256 10163\nf 10162 10164 11259\nf 10162 11259 11257\nf 10163 11256 11258\nf 10163 11258 10165\nf 10164 10166 11261\nf 10164 11261 11259\nf 10165 11258 11260\nf 10165 11260 10167\nf 10166 10168 11263\nf 10166 11263 11261\nf 10167 11260 11262\nf 10167 11262 10169\nf 10168 10171 11266\nf 10168 11266 11263\nf 10169 11262 11264\nf 10169 11264 10170\nf 10170 11264 11265\nf 10170 11265 11267\nf 10170 11267 10172\nf 10171 10173 11269\nf 10171 11269 11266\nf 10172 11267 10174\nf 10173 10175 11271\nf 10173 11271 11269\nf 10174 11267 11270\nf 10174 11270 10176\nf 10175 10177 11273\nf 10175 11273 11271\nf 10176 11270 11272\nf 10176 11272 10178\nf 10177 10179 11275\nf 10177 11275 11273\nf 10178 11272 11274\nf 10178 11274 10180\nf 10179 10181 11277\nf 10179 11277 11275\nf 10180 11274 11276\nf 10180 11276 10182\nf 10181 10183 11279\nf 10181 11279 11277\nf 10182 11276 11278\nf 10182 11278 10184\nf 10183 10185 11281\nf 10183 11281 11279\nf 10184 11278 11280\nf 10184 11280 10186\nf 10185 10187 11283\nf 10185 11283 11281\nf 10186 11280 11282\nf 10186 11282 10188\nf 10187 10189 11285\nf 10187 11285 11283\nf 10188 11282 11284\nf 10188 11284 10191\nf 10189 10190 11287\nf 10189 11287 11285\nf 10190 10193 10194\nf 10190 10194 11287\nf 10191 11284 11286\nf 10191 11286 11288\nf 10191 11288 10192\nf 10192 10196 10195\nf 10192 11288 10196\nf 10193 10197 10194\nf 10194 10197 10198\nf 10194 10198 11289\nf 10194 11289 11287\nf 10195 10196 10199\nf 10196 10200 10199\nf 10196 11288 11291\nf 10196 11291 10200\nf 10197 10201 11293\nf 10197 11293 10198\nf 10198 11290 11289\nf 10198 11293 11290\nf 10199 10200 11295\nf 10199 11295 10202\nf 10200 11291 11292\nf 10200 11292 11295\nf 10201 10203 11297\nf 10201 11297 11293\nf 10202 11295 10204\nf 10203 10205 11300\nf 10203 11300 11297\nf 10204 11295 11298\nf 10204 11298 10206\nf 10205 10207 11303\nf 10205 11303 11300\nf 10206 11298 11301\nf 10206 11301 10208\nf 10207 10209 11306\nf 10207 11306 11303\nf 10208 11301 11304\nf 10208 11304 10210\nf 10209 10211 11309\nf 10209 11309 11306\nf 10210 11304 11307\nf 10210 11307 10212\nf 10211 10213 11312\nf 10211 11312 11309\nf 10212 11307 11310\nf 10212 11310 10215\nf 10213 10214 11315\nf 10213 11315 11312\nf 10214 10216 10217\nf 10214 10217 11315\nf 10215 11310 11313\nf 10215 11313 10218\nf 10216 10219 10217\nf 10217 10219 10220\nf 10217 10220 11317\nf 10217 11317 11315\nf 10218 11313 11316\nf 10218 11316 10221\nf 10219 10222 10220\nf 10220 10222 10223\nf 10220 10223 11319\nf 10220 11319 11317\nf 10221 11316 11318\nf 10221 11318 10224\nf 10222 10225 11322\nf 10222 11322 10223\nf 10223 11320 11319\nf 10223 11322 11320\nf 10224 11318 11321\nf 10224 11321 10226\nf 10225 10227 11325\nf 10225 11325 11322\nf 10226 11321 11324\nf 10226 11324 10228\nf 10227 10229 11328\nf 10227 11328 11325\nf 10228 11324 11327\nf 10228 11327 10230\nf 10229 10231 11330\nf 10229 11330 11328\nf 10230 11327 11329\nf 10230 11329 10232\nf 10231 10233 11332\nf 10231 11332 11330\nf 10232 11329 11331\nf 10232 11331 10234\nf 10233 10235 11334\nf 10233 11334 11332\nf 10234 11331 11333\nf 10234 11333 10236\nf 10235 10237 11336\nf 10235 11336 11334\nf 10236 11333 11335\nf 10236 11335 10238\nf 10237 10239 11338\nf 10237 11338 11336\nf 10238 11335 11337\nf 10238 11337 10240\nf 10239 10241 11340\nf 10239 11340 11338\nf 10240 11337 11339\nf 10240 11339 10242\nf 10241 10243 11342\nf 10241 11342 11340\nf 10242 11339 11341\nf 10242 11341 10244\nf 10243 10245 11344\nf 10243 11344 11342\nf 10244 11341 11343\nf 10244 11343 10246\nf 10245 10248 11346\nf 10245 11346 11344\nf 10246 11343 11345\nf 10246 11345 11347\nf 10246 11347 10247\nf 10247 10250 10249\nf 10247 11347 10250\nf 10248 10251 11348\nf 10248 11348 11346\nf 10249 10250 10252\nf 10250 10253 10252\nf 10250 11347 11349\nf 10250 11349 10253\nf 10251 10254 11351\nf 10251 11351 11348\nf 10252 10253 11352\nf 10252 11352 10255\nf 10253 11349 11350\nf 10253 11350 11352\nf 10254 10256 11354\nf 10254 11354 11351\nf 10255 11352 10257\nf 10256 10258 11357\nf 10256 11357 11354\nf 10257 11352 11355\nf 10257 11355 10259\nf 10258 10260 11360\nf 10258 11360 11357\nf 10259 11355 11358\nf 10259 11358 10261\nf 10260 10262 11363\nf 10260 11363 11360\nf 10261 11358 11361\nf 10261 11361 10263\nf 10262 10264 11365\nf 10262 11365 11363\nf 10263 11361 11364\nf 10263 11364 10265\nf 10264 10266 11367\nf 10264 11367 11365\nf 10265 11364 11366\nf 10265 11366 10267\nf 10266 10268 11369\nf 10266 11369 11367\nf 10267 11366 11368\nf 10267 11368 10270\nf 10268 10269 11371\nf 10268 11371 11369\nf 10269 10271 10272\nf 10269 10272 11371\nf 10270 11368 11370\nf 10270 11370 10273\nf 10271 10274 11374\nf 10271 11374 10272\nf 10272 11372 11371\nf 10272 11374 11372\nf 10273 11370 11373\nf 10273 11373 10275\nf 10274 10277 11377\nf 10274 11377 11374\nf 10275 11373 11376\nf 10275 11376 11378\nf 10275 11378 10276\nf 10276 10279 10278\nf 10276 11378 10279\nf 10277 10280 11379\nf 10277 11379 11377\nf 10278 10279 10281\nf 10279 10282 10281\nf 10279 11378 11380\nf 10279 11380 10282\nf 10280 10283 11381\nf 10280 11381 11379\nf 10281 10282 10284\nf 10282 10285 10284\nf 10282 11380 11382\nf 10282 11382 10285\nf 10283 10286 11384\nf 10283 11384 11381\nf 10284 10285 11385\nf 10284 11385 10287\nf 10285 11382 11383\nf 10285 11383 11385\nf 10286 10288 11387\nf 10286 11387 11384\nf 10287 11385 10289\nf 10288 10290 11390\nf 10288 11390 11387\nf 10289 11385 11388\nf 10289 11388 10291\nf 10290 10292 11393\nf 10290 11393 11390\nf 10291 11388 11391\nf 10291 11391 10293\nf 10292 10294 11395\nf 10292 11395 11393\nf 10293 11391 11394\nf 10293 11394 10295\nf 10294 10296 11397\nf 10294 11397 11395\nf 10295 11394 11396\nf 10295 11396 10297\nf 10296 10298 11399\nf 10296 11399 11397\nf 10297 11396 11398\nf 10297 11398 10300\nf 10298 10299 11399\nf 10299 10301 11402\nf 10299 11400 11399\nf 10299 11402 11400\nf 10300 11398 11401\nf 10300 11401 10302\nf 10301 10303 11404\nf 10301 11404 11402\nf 10302 11401 11403\nf 10302 11403 10304\nf 10303 10305 11406\nf 10303 11406 11404\nf 10304 11403 11405\nf 10304 11405 10306\nf 10305 10307 11408\nf 10305 11408 11406\nf 10306 11405 11407\nf 10306 11407 10308\nf 10307 10309 11410\nf 10307 11410 11408\nf 10308 11407 11409\nf 10308 11409 10310\nf 10309 10311 11412\nf 10309 11412 11410\nf 10310 11409 11411\nf 10310 11411 10312\nf 10311 10313 11414\nf 10311 11414 11412\nf 10312 11411 11413\nf 10312 11413 10314\nf 10313 10315 11416\nf 10313 11416 11414\nf 10314 11413 11415\nf 10314 11415 10316\nf 10315 10317 11418\nf 10315 11418 11416\nf 10316 11415 11417\nf 10316 11417 10318\nf 10317 10320 11421\nf 10317 11421 11418\nf 10318 11417 11419\nf 10318 11419 10319\nf 10319 11419 11420\nf 10319 11420 11422\nf 10319 11422 10321\nf 10320 10322 11424\nf 10320 11424 11421\nf 10321 11422 10324\nf 10322 10323 11424\nf 10323 10325 11428\nf 10323 11425 11424\nf 10323 11428 11425\nf 10324 11422 11426\nf 10324 11426 10326\nf 10325 10327 11432\nf 10325 11432 11428\nf 10326 11426 11429\nf 10326 11429 10328\nf 10327 10331 11434\nf 10327 11434 11432\nf 10328 10330 10329\nf 10328 11429 11430\nf 10328 11430 10330\nf 10329 10330 10332\nf 10330 11430 11433\nf 10330 11433 10332\nf 10331 10333 11436\nf 10331 11436 11434\nf 10332 11433 11435\nf 10332 11435 10335\nf 10333 10334 11436\nf 10334 10336 11439\nf 10334 11437 11436\nf 10334 11439 11437\nf 10335 11435 11438\nf 10335 11438 10337\nf 10336 10338 11441\nf 10336 11441 11439\nf 10337 11438 11440\nf 10337 11440 10340\nf 10338 10339 11441\nf 10339 10341 11444\nf 10339 11442 11441\nf 10339 11444 11442\nf 10340 11440 11443\nf 10340 11443 10342\nf 10341 10344 11446\nf 10341 11446 11444\nf 10342 11443 11445\nf 10342 11445 11449\nf 10342 11449 10343\nf 10343 10346 10345\nf 10343 11449 10346\nf 10344 10347 11446\nf 10345 10346 11452\nf 10345 11452 10350\nf 10346 11449 11450\nf 10346 11450 11452\nf 10347 10348 10349\nf 10347 10349 11446\nf 10348 10351 11451\nf 10348 11451 10349\nf 10349 11447 11446\nf 10349 11451 11447\nf 10350 11452 10352\nf 10351 10354 11458\nf 10351 11455 11451\nf 10351 11458 11455\nf 10352 10353 11461\nf 10352 11452 11453\nf 10352 11453 10353\nf 10352 11461 10355\nf 10353 11453 11456\nf 10353 11456 11457\nf 10353 11457 11461\nf 10354 10356 11458\nf 10355 11461 10358\nf 10356 10357 11458\nf 10356 10359 10361\nf 10356 10361 10357\nf 10357 10361 11463\nf 10357 11459 11458\nf 10357 11463 11459\nf 10358 11461 11464\nf 10358 11464 10362\nf 10359 10360 10361\nf 10360 10363 11466\nf 10360 11466 10361\nf 10361 11466 11463\nf 10362 11464 11468\nf 10362 11468 10364\nf 10363 10366 11472\nf 10363 11469 11466\nf 10363 11472 11469\nf 10364 10368 10365\nf 10364 11468 11471\nf 10364 11471 11474\nf 10364 11474 10368\nf 10365 10368 10367\nf 10366 10370 11477\nf 10366 11477 11472\nf 10367 10368 10369\nf 10368 11474 11475\nf 10368 11475 10369\nf 10369 10372 10371\nf 10369 11475 10372\nf 10370 10375 11477\nf 10371 10372 11481\nf 10371 11481 10373\nf 10372 11475 11480\nf 10372 11480 11481\nf 10373 11481 11482\nf 10373 11482 11483\nf 10373 11483 10374\nf 10374 11483 10378\nf 10375 10376 10377\nf 10375 10377 11477\nf 10376 10381 11484\nf 10376 11484 10377\nf 10377 11478 11477\nf 10377 11484 11478\nf 10378 11483 11485\nf 10378 11485 11486\nf 10378 11486 10379\nf 10379 11486 11487\nf 10379 11487 10380\nf 10380 11487 11489\nf 10380 11489 10382\nf 10381 10382 11488\nf 10381 11488 11484\nf 10382 11489 11488\nf 10383 10384 11491\nf 10383 10400 10398\nf 10383 11491 11509\nf 10383 11509 10400\nf 10384 10385 11491\nf 10385 10386 11492\nf 10385 11492 11491\nf 10386 10387 11493\nf 10386 11493 11492\nf 10387 10401 11495\nf 10387 11494 11493\nf 10387 11495 11494\nf 10388 10389 11498\nf 10388 10411 10409\nf 10388 11497 10411\nf 10388 11498 11497\nf 10389 10390 11499\nf 10389 11499 11498\nf 10390 10391 11500\nf 10390 11500 11499\nf 10391 10392 11501\nf 10391 11501 11500\nf 10392 10393 11502\nf 10392 11502 11501\nf 10393 10394 11503\nf 10393 11503 11502\nf 10394 10395 11504\nf 10394 11504 11503\nf 10395 10412 11505\nf 10395 11505 11504\nf 10396 10397 11506\nf 10396 11506 11525\nf 10396 11525 10416\nf 10397 10399 11507\nf 10397 11507 11506\nf 10398 10400 10399\nf 10399 10400 11510\nf 10399 11508 11507\nf 10399 11510 11508\nf 10400 11509 11510\nf 10401 10402 10403\nf 10401 10403 11495\nf 10402 10404 11516\nf 10402 11516 10403\nf 10403 11515 11495\nf 10403 11516 11515\nf 10404 10405 11516\nf 10405 10417 11517\nf 10405 11517 11516\nf 10406 10407 11519\nf 10406 11519 11530\nf 10406 11530 10419\nf 10407 10408 11518\nf 10407 10410 10408\nf 10407 11518 11519\nf 10408 10410 10411\nf 10408 10411 11497\nf 10408 11496 11518\nf 10408 11497 11496\nf 10409 10411 10410\nf 10412 10413 11522\nf 10412 11520 11505\nf 10412 11522 11520\nf 10413 10414 11522\nf 10414 10415 11523\nf 10414 11523 11522\nf 10415 10421 11524\nf 10415 11524 11523\nf 10416 11525 10422\nf 10417 10418 11528\nf 10417 11527 11517\nf 10417 11528 11527\nf 10418 10423 11528\nf 10419 11530 10420\nf 10420 11530 11531\nf 10420 11531 11538\nf 10420 11538 10425\nf 10421 10426 11539\nf 10421 11532 11524\nf 10421 11539 11532\nf 10422 11525 11534\nf 10422 11534 10427\nf 10423 10424 11536\nf 10423 11535 11528\nf 10423 11536 11535\nf 10424 10428 11536\nf 10425 11538 10429\nf 10426 10430 11545\nf 10426 11545 11539\nf 10427 11534 11540\nf 10427 11540 10431\nf 10428 10432 11541\nf 10428 11541 11536\nf 10429 11538 11543\nf 10429 11543 10435\nf 10430 10438 11550\nf 10430 11550 11545\nf 10431 11540 11546\nf 10431 11546 10439\nf 10432 10433 10434\nf 10432 10434 11542\nf 10432 11542 11541\nf 10433 10440 10434\nf 10434 10440 11547\nf 10434 11547 11542\nf 10435 10437 10436\nf 10435 11543 10437\nf 10436 10437 11549\nf 10436 11549 10441\nf 10437 11543 11544\nf 10437 11544 11549\nf 10438 10442 11554\nf 10438 11554 11550\nf 10439 11546 11551\nf 10439 11551 10443\nf 10440 10444 11556\nf 10440 11552 11547\nf 10440 11556 11552\nf 10441 11549 11553\nf 10441 11553 10446\nf 10442 10447 11559\nf 10442 11559 11554\nf 10443 11551 11555\nf 10443 11555 10448\nf 10444 10445 11557\nf 10444 11557 11556\nf 10445 10449 11557\nf 10446 11553 11558\nf 10446 11558 10450\nf 10447 10451 11563\nf 10447 11563 11559\nf 10448 11555 11560\nf 10448 11560 10453\nf 10449 10454 11565\nf 10449 11561 11557\nf 10449 11565 11561\nf 10450 11558 11562\nf 10450 11562 10455\nf 10451 10452 10458\nf 10451 10458 11567\nf 10451 11567 11563\nf 10452 10456 10458\nf 10453 11560 11564\nf 10453 11564 10459\nf 10454 10460 11569\nf 10454 11569 11565\nf 10455 11562 11566\nf 10455 11566 10461\nf 10456 10457 10458\nf 10457 10462 11567\nf 10457 11567 10458\nf 10459 11564 11568\nf 10459 11568 10463\nf 10460 10465 11573\nf 10460 11573 11569\nf 10461 11566 11570\nf 10461 11570 10466\nf 10462 10467 11575\nf 10462 11571 11567\nf 10462 11575 11571\nf 10463 10470 10464\nf 10463 11568 11572\nf 10463 11572 11576\nf 10463 11576 10470\nf 10464 10470 10469\nf 10465 10471 11578\nf 10465 11578 11573\nf 10466 11570 11574\nf 10466 11574 10473\nf 10467 10468 10476\nf 10467 10476 11581\nf 10467 11581 11575\nf 10468 10474 10476\nf 10469 10470 11577\nf 10469 11577 11582\nf 10469 11582 10477\nf 10470 11576 11577\nf 10471 10472 11579\nf 10471 11579 11578\nf 10472 10478 11579\nf 10473 11574 11580\nf 10473 11580 10479\nf 10474 10475 10476\nf 10475 10480 11581\nf 10475 11581 10476\nf 10477 11582 10481\nf 10478 10482 11589\nf 10478 11584 11579\nf 10478 11589 11584\nf 10479 11580 11586\nf 10479 11586 10483\nf 10480 10484 11592\nf 10480 11587 11581\nf 10480 11592 11587\nf 10481 11582 11588\nf 10481 11588 10485\nf 10482 10486 11594\nf 10482 11594 11589\nf 10483 11586 11591\nf 10483 11591 10487\nf 10484 10488 11597\nf 10484 11597 11592\nf 10485 11588 11593\nf 10485 11593 10489\nf 10486 10490 11599\nf 10486 11599 11594\nf 10487 11591 11596\nf 10487 11596 10491\nf 10488 10492 11602\nf 10488 11602 11597\nf 10489 11593 11598\nf 10489 11598 10493\nf 10490 10494 11604\nf 10490 11604 11599\nf 10491 11596 11601\nf 10491 11601 10495\nf 10492 10496 11607\nf 10492 11607 11602\nf 10493 11598 11603\nf 10493 11603 10497\nf 10494 10498 11609\nf 10494 11609 11604\nf 10495 11601 11606\nf 10495 11606 10499\nf 10496 10500 11612\nf 10496 11612 11607\nf 10497 11603 11608\nf 10497 11608 10501\nf 10498 10502 11614\nf 10498 11614 11609\nf 10499 11606 11611\nf 10499 11611 10503\nf 10500 10505 11616\nf 10500 11616 11612\nf 10501 11608 11613\nf 10501 11613 10506\nf 10502 10507 11618\nf 10502 11618 11614\nf 10503 11611 11615\nf 10503 11615 11619\nf 10503 11619 10504\nf 10504 10509 10508\nf 10504 11619 10509\nf 10505 10510 11621\nf 10505 11621 11616\nf 10506 11613 11617\nf 10506 11617 10511\nf 10507 10512 11623\nf 10507 11623 11618\nf 10508 10509 11624\nf 10508 11624 10513\nf 10509 11619 11620\nf 10509 11620 11624\nf 10510 10514 11626\nf 10510 11626 11621\nf 10511 11617 11622\nf 10511 11622 10515\nf 10512 10516 11628\nf 10512 11628 11623\nf 10513 11624 10520\nf 10514 10522 11635\nf 10514 11635 11626\nf 10515 11622 11627\nf 10515 11627 10523\nf 10516 10517 11629\nf 10516 11629 11628\nf 10517 10518 11629\nf 10518 10524 11630\nf 10518 11630 11629\nf 10519 10521 11631\nf 10519 11631 11690\nf 10519 11690 10562\nf 10520 11624 11632\nf 10520 11632 10521\nf 10521 11632 11633\nf 10521 11633 11631\nf 10522 10564 11694\nf 10522 11694 11635\nf 10523 11627 11636\nf 10523 11636 10565\nf 10524 10525 11638\nf 10524 11637 11630\nf 10524 11638 11637\nf 10525 10526 11638\nf 10526 10527 11639\nf 10526 11639 11638\nf 10527 10528 11640\nf 10527 11640 11639\nf 10528 10529 11641\nf 10528 11641 11640\nf 10529 10566 11643\nf 10529 11642 11641\nf 10529 11643 11642\nf 10530 10531 11645\nf 10530 10587 10585\nf 10530 11644 10587\nf 10530 11645 11644\nf 10531 10532 11646\nf 10531 11646 11645\nf 10532 10533 11647\nf 10532 11647 11646\nf 10533 10534 11648\nf 10533 11648 11647\nf 10534 10535 11649\nf 10534 11649 11648\nf 10535 10536 11650\nf 10535 11650 11649\nf 10536 10537 11651\nf 10536 11651 11650\nf 10537 10538 11652\nf 10537 11652 11651\nf 10538 10588 11654\nf 10538 11653 11652\nf 10538 11654 11653\nf 10539 10540 11667\nf 10539 10615 10613\nf 10539 11666 10615\nf 10539 11667 11666\nf 10540 10541 11668\nf 10540 11668 11667\nf 10541 10542 11669\nf 10541 11669 11668\nf 10542 10543 11670\nf 10542 11670 11669\nf 10543 10544 11671\nf 10543 11671 11670\nf 10544 10545 11672\nf 10544 11672 11671\nf 10545 10546 11673\nf 10545 11673 11672\nf 10546 10616 11674\nf 10546 11674 11673\nf 10547 10548 11675\nf 10547 11675 11721\nf 10547 11721 10618\nf 10548 10549 11676\nf 10548 11676 11675\nf 10549 10550 11677\nf 10549 11677 11676\nf 10550 10551 11678\nf 10550 11678 11677\nf 10551 10552 11679\nf 10551 11679 11678\nf 10552 10553 11680\nf 10552 11680 11679\nf 10553 10554 11681\nf 10553 11681 11680\nf 10554 10555 11682\nf 10554 11682 11681\nf 10555 10556 11683\nf 10555 11683 11682\nf 10556 10557 11684\nf 10556 11684 11683\nf 10557 10558 11685\nf 10557 11685 11684\nf 10558 10559 11686\nf 10558 11686 11685\nf 10559 10560 11687\nf 10559 11687 11686\nf 10560 10561 11688\nf 10560 11688 11687\nf 10561 10563 11689\nf 10561 11689 11688\nf 10562 11690 10563\nf 10563 11690 11691\nf 10563 11691 11689\nf 10564 10620 11725\nf 10564 11725 11694\nf 10565 11636 11695\nf 10565 11695 10621\nf 10566 10567 10568\nf 10566 10568 11643\nf 10567 10569 11697\nf 10567 11697 10568\nf 10568 11696 11643\nf 10568 11697 11696\nf 10569 10570 11697\nf 10570 10571 11698\nf 10570 11698 11697\nf 10571 10572 11699\nf 10571 11699 11698\nf 10572 10573 11700\nf 10572 11700 11699\nf 10573 10574 11701\nf 10573 11701 11700\nf 10574 10575 11702\nf 10574 11702 11701\nf 10575 10576 11703\nf 10575 11703 11702\nf 10576 10577 11704\nf 10576 11704 11703\nf 10577 10578 11705\nf 10577 11705 11704\nf 10578 10579 11706\nf 10578 11706 11705\nf 10579 10580 11707\nf 10579 11707 11706\nf 10580 10581 11708\nf 10580 11708 11707\nf 10581 10582 11709\nf 10581 11709 11708\nf 10582 10583 11710\nf 10582 11710 11709\nf 10583 10584 11711\nf 10583 11711 11710\nf 10584 10586 11713\nf 10584 11713 11711\nf 10585 10587 10586\nf 10586 10587 11712\nf 10586 11712 11713\nf 10587 11644 11712\nf 10588 10589 10590\nf 10588 10590 11654\nf 10589 10591 10590\nf 10590 10591 10592\nf 10590 10592 11655\nf 10590 11655 11654\nf 10591 10593 10592\nf 10592 10593 10594\nf 10592 10594 11656\nf 10592 11656 11655\nf 10593 10595 10594\nf 10594 10595 10596\nf 10594 10596 11657\nf 10594 11657 11656\nf 10595 10597 10596\nf 10596 10597 10598\nf 10596 10598 11658\nf 10596 11658 11657\nf 10597 10599 10598\nf 10598 10599 10600\nf 10598 10600 11659\nf 10598 11659 11658\nf 10599 10601 10600\nf 10600 10601 10602\nf 10600 10602 11660\nf 10600 11660 11659\nf 10601 10603 10602\nf 10602 10603 10604\nf 10602 10604 11661\nf 10602 11661 11660\nf 10603 10605 10604\nf 10604 10605 10606\nf 10604 10606 11662\nf 10604 11662 11661\nf 10605 10607 10606\nf 10606 10607 10608\nf 10606 10608 11663\nf 10606 11663 11662\nf 10607 10609 10608\nf 10608 10609 10610\nf 10608 10610 11664\nf 10608 11664 11663\nf 10609 10611 10610\nf 10610 10611 10612\nf 10610 10612 11665\nf 10610 11665 11664\nf 10611 10614 10612\nf 10612 10614 10615\nf 10612 10615 11666\nf 10612 11666 11665\nf 10613 10615 10614\nf 10616 10617 11720\nf 10616 11718 11674\nf 10616 11720 11718\nf 10617 10619 11720\nf 10618 11721 10619\nf 10619 11721 11722\nf 10619 11722 11720\nf 10620 10622 11729\nf 10620 11729 11725\nf 10621 11695 11726\nf 10621 11726 10623\nf 10622 10624 11731\nf 10622 11731 11729\nf 10623 11726 11730\nf 10623 11730 10625\nf 10624 10626 11733\nf 10624 11733 11731\nf 10625 11730 11732\nf 10625 11732 10627\nf 10626 10628 11735\nf 10626 11735 11733\nf 10627 11732 11734\nf 10627 11734 10629\nf 10628 10630 11737\nf 10628 11737 11735\nf 10629 11734 11736\nf 10629 11736 10631\nf 10630 10632 11739\nf 10630 11739 11737\nf 10631 11736 11738\nf 10631 11738 10633\nf 10632 10634 11741\nf 10632 11741 11739\nf 10633 11738 11740\nf 10633 11740 10635\nf 10634 10636 11743\nf 10634 11743 11741\nf 10635 11740 11742\nf 10635 11742 10637\nf 10636 10646 11759\nf 10636 11759 11743\nf 10637 11742 11744\nf 10637 11744 10647\nf 10638 10655 11767\nf 10638 11745 11746\nf 10638 11746 10639\nf 10638 11767 11745\nf 10639 11746 11748\nf 10639 11748 10640\nf 10640 11748 11750\nf 10640 11750 10641\nf 10641 11750 11752\nf 10641 11752 10657\nf 10642 10682 11803\nf 10642 11753 11754\nf 10642 11754 10643\nf 10642 11803 11753\nf 10643 11754 11756\nf 10643 11756 10644\nf 10644 11756 11758\nf 10644 11758 10645\nf 10645 11758 10684\nf 10646 10689 11813\nf 10646 11813 11759\nf 10647 11744 11760\nf 10647 11760 10690\nf 10648 10691 10693\nf 10648 10693 10694\nf 10648 10694 10649\nf 10649 10694 11816\nf 10649 11761 10650\nf 10649 11816 11761\nf 10650 11761 11762\nf 10650 11762 10651\nf 10651 11762 11763\nf 10651 11763 10652\nf 10652 11763 11764\nf 10652 11764 10653\nf 10653 11764 11765\nf 10653 11765 10654\nf 10654 11765 11768\nf 10654 11768 10656\nf 10655 10656 11767\nf 10656 11768 11767\nf 10657 10659 10658\nf 10657 11752 10659\nf 10658 10659 11771\nf 10658 11771 10660\nf 10659 11752 11770\nf 10659 11770 11771\nf 10660 11771 11773\nf 10660 11773 10661\nf 10661 11773 11775\nf 10661 11775 10662\nf 10662 11775 11777\nf 10662 11777 10663\nf 10663 11777 11778\nf 10663 11778 10664\nf 10664 11778 11779\nf 10664 11779 10695\nf 10665 10725 10727\nf 10665 10727 10728\nf 10665 10728 10666\nf 10666 10728 10729\nf 10666 10729 10667\nf 10667 10729 10730\nf 10667 10730 10668\nf 10668 10730 11855\nf 10668 11780 10669\nf 10668 11855 11780\nf 10669 11780 11781\nf 10669 11781 10670\nf 10670 11781 11782\nf 10670 11782 10671\nf 10671 11782 11783\nf 10671 11783 10672\nf 10672 11783 11785\nf 10672 11785 10673\nf 10673 11785 11787\nf 10673 11787 10674\nf 10674 11787 11789\nf 10674 11789 10675\nf 10675 11789 11791\nf 10675 11791 10676\nf 10676 11791 11793\nf 10676 11793 10677\nf 10677 11793 11795\nf 10677 11795 10678\nf 10678 11795 11797\nf 10678 11797 10679\nf 10679 11797 11799\nf 10679 11799 10680\nf 10680 11799 11801\nf 10680 11801 10681\nf 10681 11801 11804\nf 10681 11804 10683\nf 10682 10683 11803\nf 10683 11804 11803\nf 10684 11758 11806\nf 10684 11806 11807\nf 10684 11807 10685\nf 10685 11807 11809\nf 10685 11809 10686\nf 10686 11809 11811\nf 10686 11811 10687\nf 10687 11811 10688\nf 10688 10732 10731\nf 10688 11811 10732\nf 10689 10734 11862\nf 10689 11862 11813\nf 10690 11760 11814\nf 10690 11814 10735\nf 10691 10692 10693\nf 10692 10736 10737\nf 10692 10737 10693\nf 10693 10737 11815\nf 10693 11815 10694\nf 10694 11815 11817\nf 10694 11817 11816\nf 10695 10697 10696\nf 10695 11779 10697\nf 10696 10697 11820\nf 10696 11820 10698\nf 10697 11779 11819\nf 10697 11819 11820\nf 10698 11820 11822\nf 10698 11822 10699\nf 10699 11822 11824\nf 10699 11824 10700\nf 10700 11824 11826\nf 10700 11826 10701\nf 10701 11826 11828\nf 10701 11828 10702\nf 10702 11828 11829\nf 10702 11829 10703\nf 10703 11829 11830\nf 10703 11830 10704\nf 10704 11830 11831\nf 10704 11831 10705\nf 10705 11831 11832\nf 10705 11832 10706\nf 10706 11832 11833\nf 10706 11833 10707\nf 10707 11833 11834\nf 10707 11834 10708\nf 10708 11834 11835\nf 10708 11835 10709\nf 10709 11835 11836\nf 10709 11836 10710\nf 10710 11836 11837\nf 10710 11837 10711\nf 10711 11837 11838\nf 10711 11838 10712\nf 10712 11838 11839\nf 10712 11839 10713\nf 10713 11839 11840\nf 10713 11840 10714\nf 10714 11840 11841\nf 10714 11841 10715\nf 10715 11841 11842\nf 10715 11842 10716\nf 10716 11842 11843\nf 10716 11843 10717\nf 10717 11843 11844\nf 10717 11844 10718\nf 10718 11844 11845\nf 10718 11845 10719\nf 10719 11845 11846\nf 10719 11846 10720\nf 10720 11846 11847\nf 10720 11847 10721\nf 10721 11847 11848\nf 10721 11848 10722\nf 10722 11848 11849\nf 10722 11849 10723\nf 10723 11849 11850\nf 10723 11850 10724\nf 10724 11850 11851\nf 10724 11851 10726\nf 10725 10726 10727\nf 10726 11851 11852\nf 10726 11852 10727\nf 10727 11852 10728\nf 10728 11852 11853\nf 10728 11853 10729\nf 10729 11853 11854\nf 10729 11854 10730\nf 10730 11854 11856\nf 10730 11856 11855\nf 10731 10732 10733\nf 10732 11811 11858\nf 10732 11858 11859\nf 10732 11859 10733\nf 10733 10739 10738\nf 10733 11859 10739\nf 10734 10740 11880\nf 10734 11880 11862\nf 10735 11814 11863\nf 10735 11863 10741\nf 10736 10742 11882\nf 10736 11882 10737\nf 10737 11864 11815\nf 10737 11865 11864\nf 10737 11882 11865\nf 10738 10739 11878\nf 10738 11878 11883\nf 10738 11883 10743\nf 10739 11859 11877\nf 10739 11877 11878\nf 10740 10744 11884\nf 10740 11884 11880\nf 10741 11863 11881\nf 10741 11881 10745\nf 10742 10746 11886\nf 10742 11886 11882\nf 10743 11883 10747\nf 10744 10749 11889\nf 10744 11889 11884\nf 10745 11881 11885\nf 10745 11885 10750\nf 10746 10751 11891\nf 10746 11891 11886\nf 10747 10753 10748\nf 10747 11883 11887\nf 10747 11887 11892\nf 10747 11892 10753\nf 10748 10753 10752\nf 10749 10754 11895\nf 10749 11895 11889\nf 10750 11885 11890\nf 10750 11890 10755\nf 10751 10756 11897\nf 10751 11897 11891\nf 10752 10753 11893\nf 10752 11893 11898\nf 10752 11898 10757\nf 10753 11892 11893\nf 10754 10758 11899\nf 10754 11899 11895\nf 10755 11890 11896\nf 10755 11896 10759\nf 10756 10760 11901\nf 10756 11901 11897\nf 10757 11898 10761\nf 10758 10762 11903\nf 10758 11903 11899\nf 10759 11896 11900\nf 10759 11900 10763\nf 10760 10764 11905\nf 10760 11905 11901\nf 10761 11898 11902\nf 10761 11902 10765\nf 10762 10766 11907\nf 10762 11907 11903\nf 10763 11900 11904\nf 10763 11904 10767\nf 10764 10768 11909\nf 10764 11909 11905\nf 10765 11902 11906\nf 10765 11906 10769\nf 10766 10770 11911\nf 10766 11911 11907\nf 10767 11904 11908\nf 10767 11908 10771\nf 10768 10772 11913\nf 10768 11913 11909\nf 10769 11906 11910\nf 10769 11910 10773\nf 10770 10774 11915\nf 10770 11915 11911\nf 10771 11908 11912\nf 10771 11912 10775\nf 10772 10777 11917\nf 10772 11917 11913\nf 10773 11910 11914\nf 10773 11914 10778\nf 10774 10780 11919\nf 10774 11919 11915\nf 10775 10782 10776\nf 10775 11912 11916\nf 10775 11916 11920\nf 10775 11920 10782\nf 10776 10782 10781\nf 10777 10783 11921\nf 10777 11921 11917\nf 10778 10785 10779\nf 10778 11914 11918\nf 10778 11918 11922\nf 10778 11922 10785\nf 10779 10785 10784\nf 10780 10786 11924\nf 10780 11924 11919\nf 10781 10782 10788\nf 10781 10788 10787\nf 10782 11920 10788\nf 10783 10789 11927\nf 10783 11927 11921\nf 10784 10785 11923\nf 10784 11923 11928\nf 10784 11928 10790\nf 10785 11922 11923\nf 10786 10791 11929\nf 10786 11929 11924\nf 10787 10788 11926\nf 10787 11926 11930\nf 10787 11930 10792\nf 10788 11920 11925\nf 10788 11925 11926\nf 10789 10793 11931\nf 10789 11931 11927\nf 10790 11928 10794\nf 10791 10795 11933\nf 10791 11933 11929\nf 10792 11930 10796\nf 10793 10797 11935\nf 10793 11935 11931\nf 10794 11928 11932\nf 10794 11932 10798\nf 10795 10799 11937\nf 10795 11937 11933\nf 10796 11930 11934\nf 10796 11934 10800\nf 10797 10801 11939\nf 10797 11939 11935\nf 10798 11932 11936\nf 10798 11936 10802\nf 10799 10803 11941\nf 10799 11941 11937\nf 10800 11934 11938\nf 10800 11938 10804\nf 10801 10805 11943\nf 10801 11943 11939\nf 10802 11936 11940\nf 10802 11940 10806\nf 10803 10807 11945\nf 10803 11945 11941\nf 10804 11938 11942\nf 10804 11942 10808\nf 10805 10809 11947\nf 10805 11947 11943\nf 10806 11940 11944\nf 10806 11944 10810\nf 10807 10811 11949\nf 10807 11949 11945\nf 10808 11942 11946\nf 10808 11946 10812\nf 10809 10813 11951\nf 10809 11951 11947\nf 10810 11944 11948\nf 10810 11948 10814\nf 10811 10815 11953\nf 10811 11953 11949\nf 10812 11946 11950\nf 10812 11950 10816\nf 10813 10817 11955\nf 10813 11955 11951\nf 10814 11948 11952\nf 10814 11952 10818\nf 10815 10819 11957\nf 10815 11957 11953\nf 10816 11950 11954\nf 10816 11954 10820\nf 10817 10821 11959\nf 10817 11959 11955\nf 10818 11952 11956\nf 10818 11956 10822\nf 10819 10823 11961\nf 10819 11961 11957\nf 10820 11954 11958\nf 10820 11958 10824\nf 10821 10825 11963\nf 10821 11963 11959\nf 10822 11956 11960\nf 10822 11960 10826\nf 10823 10827 11965\nf 10823 11965 11961\nf 10824 11958 11962\nf 10824 11962 10828\nf 10825 10830 11967\nf 10825 11967 11963\nf 10826 11960 11964\nf 10826 11964 10831\nf 10827 10832 11969\nf 10827 11969 11965\nf 10828 10834 10829\nf 10828 11962 11966\nf 10828 11966 11970\nf 10828 11970 10834\nf 10829 10834 10833\nf 10830 10835 11972\nf 10830 11972 11967\nf 10831 11964 11968\nf 10831 11968 10836\nf 10832 10837 11974\nf 10832 11974 11969\nf 10833 10834 10839\nf 10833 10839 10838\nf 10834 11970 10839\nf 10835 10840 11977\nf 10835 11977 11972\nf 10836 11968 11973\nf 10836 11973 10842\nf 10837 10843 11979\nf 10837 11979 11974\nf 10838 10839 10845\nf 10838 10845 10844\nf 10839 11970 11975\nf 10839 11975 10845\nf 10840 10841 11983\nf 10840 11983 11977\nf 10841 10846 10847\nf 10841 10847 11983\nf 10842 11973 11978\nf 10842 11978 10848\nf 10843 10849 11985\nf 10843 11985 11979\nf 10844 10845 11981\nf 10844 11981 11986\nf 10844 11986 10850\nf 10845 11975 11980\nf 10845 11980 11981\nf 10846 10851 10847\nf 10847 10851 10853\nf 10847 10853 11987\nf 10847 11987 11983\nf 10848 11978 11984\nf 10848 11984 10854\nf 10849 10855 11989\nf 10849 11989 11985\nf 10850 11986 10856\nf 10851 10852 10853\nf 10852 10857 10853\nf 10853 10857 11987\nf 10854 11984 11988\nf 10854 11988 10858\nf 10855 10859 11993\nf 10855 11993 11989\nf 10856 11986 11990\nf 10856 11990 10860\nf 10857 10861 11995\nf 10857 11991 11987\nf 10857 11995 11991\nf 10858 11988 11992\nf 10858 11992 10862\nf 10859 10863 11997\nf 10859 11997 11993\nf 10860 11990 11994\nf 10860 11994 10864\nf 10861 10865 11999\nf 10861 11999 11995\nf 10862 11992 11996\nf 10862 11996 10866\nf 10863 10867 12001\nf 10863 12001 11997\nf 10864 11994 11998\nf 10864 11998 10868\nf 10865 10869 12003\nf 10865 12003 11999\nf 10866 11996 12000\nf 10866 12000 10870\nf 10867 10871 12005\nf 10867 12005 12001\nf 10868 11998 12002\nf 10868 12002 10872\nf 10869 10873 12007\nf 10869 12007 12003\nf 10870 12000 12004\nf 10870 12004 10874\nf 10871 10875 12009\nf 10871 12009 12005\nf 10872 12002 12006\nf 10872 12006 10876\nf 10873 10877 12011\nf 10873 12011 12007\nf 10874 12004 12008\nf 10874 12008 10878\nf 10875 10879 12013\nf 10875 12013 12009\nf 10876 12006 12010\nf 10876 12010 10880\nf 10877 10881 12015\nf 10877 12015 12011\nf 10878 12008 12012\nf 10878 12012 10882\nf 10879 10883 12017\nf 10879 12017 12013\nf 10880 12010 12014\nf 10880 12014 10884\nf 10881 10885 12019\nf 10881 12019 12015\nf 10882 12012 12016\nf 10882 12016 10886\nf 10883 10887 12021\nf 10883 12021 12017\nf 10884 12014 12018\nf 10884 12018 10888\nf 10885 10889 12023\nf 10885 12023 12019\nf 10886 12016 12020\nf 10886 12020 10890\nf 10887 10892 12027\nf 10887 12027 12021\nf 10888 12018 12022\nf 10888 12022 10893\nf 10889 10894 12029\nf 10889 12029 12023\nf 10890 12020 12024\nf 10890 12024 12025\nf 10890 12025 10891\nf 10891 12025 10895\nf 10892 10896 12031\nf 10892 12031 12027\nf 10893 12022 12028\nf 10893 12028 10897\nf 10894 10898 12033\nf 10894 12033 12029\nf 10895 12025 12030\nf 10895 12030 10899\nf 10896 10900 12035\nf 10896 12035 12031\nf 10897 12028 12032\nf 10897 12032 10901\nf 10898 10902 12037\nf 10898 12037 12033\nf 10899 12030 12034\nf 10899 12034 10903\nf 10900 10904 12039\nf 10900 12039 12035\nf 10901 12032 12036\nf 10901 12036 10905\nf 10902 10906 12041\nf 10902 12041 12037\nf 10903 12034 12038\nf 10903 12038 10907\nf 10904 10908 12043\nf 10904 12043 12039\nf 10905 12036 12040\nf 10905 12040 10909\nf 10906 10910 12045\nf 10906 12045 12041\nf 10907 12038 12042\nf 10907 12042 10911\nf 10908 10912 12047\nf 10908 12047 12043\nf 10909 12040 12044\nf 10909 12044 10913\nf 10910 10914 12050\nf 10910 12050 12045\nf 10911 12042 12046\nf 10911 12046 10915\nf 10912 10917 12053\nf 10912 12053 12047\nf 10913 12044 12048\nf 10913 12048 10918\nf 10914 10919 12056\nf 10914 12056 12050\nf 10915 12046 12051\nf 10915 12051 10916\nf 10916 12051 12052\nf 10916 12052 12057\nf 10916 12057 10920\nf 10917 10921 12059\nf 10917 12059 12053\nf 10918 12048 12054\nf 10918 12054 10922\nf 10919 10923 12062\nf 10919 12062 12056\nf 10920 12057 10924\nf 10921 10925 12064\nf 10921 12064 12059\nf 10922 12054 12060\nf 10922 12060 10926\nf 10923 10928 12067\nf 10923 12067 12062\nf 10924 12057 12063\nf 10924 12063 10929\nf 10925 10930 12069\nf 10925 12069 12064\nf 10926 10932 10927\nf 10926 12060 12065\nf 10926 12065 12071\nf 10926 12071 10932\nf 10927 10932 10931\nf 10928 10933 12074\nf 10928 12074 12067\nf 10929 12063 12068\nf 10929 12068 10934\nf 10930 10935 12076\nf 10930 12076 12069\nf 10931 10932 12072\nf 10931 12072 12078\nf 10931 12078 10936\nf 10932 12071 12072\nf 10933 10937 12079\nf 10933 12079 12074\nf 10934 12068 12075\nf 10934 12075 10938\nf 10935 10940 12081\nf 10935 12081 12076\nf 10936 12078 10941\nf 10937 10942 12084\nf 10937 12084 12079\nf 10938 12075 12080\nf 10938 12080 12085\nf 10938 12085 10939\nf 10939 10945 10944\nf 10939 12085 10945\nf 10940 10946 12087\nf 10940 12087 12081\nf 10941 12078 12083\nf 10941 12083 10947\nf 10942 10943 10950\nf 10942 10950 12091\nf 10942 12091 12084\nf 10943 10949 10950\nf 10944 10945 12093\nf 10944 12093 10951\nf 10945 12085 12086\nf 10945 12086 12093\nf 10946 10952 12094\nf 10946 12094 12087\nf 10947 12083 12089\nf 10947 12089 10948\nf 10948 12089 12090\nf 10948 12090 12095\nf 10948 12095 10953\nf 10949 10954 12097\nf 10949 12092 10950\nf 10949 12097 12092\nf 10950 12092 12091\nf 10951 12093 10956\nf 10952 10958 12102\nf 10952 12102 12094\nf 10953 12095 10959\nf 10954 10955 12099\nf 10954 12099 12097\nf 10955 10960 12099\nf 10956 12093 12100\nf 10956 12100 10957\nf 10957 12100 12101\nf 10957 12101 12122\nf 10957 12122 11003\nf 10958 11005 12125\nf 10958 12125 12102\nf 10959 12095 12103\nf 10959 12103 11006\nf 10960 10961 12107\nf 10960 12105 12099\nf 10960 12107 12105\nf 10961 10962 12107\nf 10962 10963 12108\nf 10962 12108 12107\nf 10963 10964 12109\nf 10963 12109 12108\nf 10964 10965 12110\nf 10964 12110 12109\nf 10965 10966 12111\nf 10965 12111 12110\nf 10966 11007 12112\nf 10966 12112 12111\nf 10967 10968 11029\nf 10967 11028 11026\nf 10967 11029 11028\nf 10968 10969 11030\nf 10968 11030 11029\nf 10969 10970 11031\nf 10969 11031 11030\nf 10970 10971 11032\nf 10970 11032 11031\nf 10971 10972 11033\nf 10971 11033 11032\nf 10972 10973 12113\nf 10972 12113 12157\nf 10972 12157 11033\nf 10973 10974 12113\nf 10974 10975 12114\nf 10974 12114 12113\nf 10975 10976 12115\nf 10975 12115 12114\nf 10976 10977 12116\nf 10976 12116 12115\nf 10977 10978 12117\nf 10977 12117 12116\nf 10978 10979 12118\nf 10978 12118 12117\nf 10979 10980 12119\nf 10979 12119 12118\nf 10980 10981 11035\nf 10980 11034 12119\nf 10980 11035 11034\nf 10981 10982 11036\nf 10981 11036 11035\nf 10982 10983 11037\nf 10982 11037 11036\nf 10983 10984 11038\nf 10983 11038 11037\nf 10984 10985 11039\nf 10984 11039 11038\nf 10985 10986 11040\nf 10985 11040 11039\nf 10986 10987 11041\nf 10986 11041 11040\nf 10987 10988 11042\nf 10987 11042 11041\nf 10988 10989 11043\nf 10988 11043 11042\nf 10989 10990 11044\nf 10989 11044 11043\nf 10990 10991 11046\nf 10990 11046 11044\nf 10991 11045 11046\nf 10992 10993 11060\nf 10992 11059 11057\nf 10992 11060 11059\nf 10993 10994 11061\nf 10993 11061 11060\nf 10994 10995 11062\nf 10994 11062 11061\nf 10995 10996 11063\nf 10995 11063 11062\nf 10996 10997 11064\nf 10996 11064 11063\nf 10997 10998 11065\nf 10997 11065 11064\nf 10998 10999 11066\nf 10998 11066 11065\nf 10999 11000 11067\nf 10999 11067 11066\nf 11000 11001 12120\nf 11000 12120 12198\nf 11000 12198 11067\nf 11001 11002 12120\nf 11002 11004 12121\nf 11002 12121 12120\nf 11003 12122 11004\nf 11004 12122 12123\nf 11004 12123 12121\nf 11005 11068 12202\nf 11005 12202 12125\nf 11006 12103 12126\nf 11006 12126 11069\nf 11007 11008 12133\nf 11007 12131 12112\nf 11007 12133 12131\nf 11008 11009 12133\nf 11009 11010 12134\nf 11009 12134 12133\nf 11010 11011 12135\nf 11010 12135 12134\nf 11011 11012 12136\nf 11011 12136 12135\nf 11012 11013 12137\nf 11012 12137 12136\nf 11013 11014 12138\nf 11013 12138 12137\nf 11014 11015 12139\nf 11014 12139 12138\nf 11015 11016 12140\nf 11015 12140 12139\nf 11016 11017 12141\nf 11016 12141 12140\nf 11017 11018 12142\nf 11017 12142 12141\nf 11018 11019 12143\nf 11018 12143 12142\nf 11019 11020 12144\nf 11019 12144 12143\nf 11020 11021 12145\nf 11020 12145 12144\nf 11021 11022 12146\nf 11021 12146 12145\nf 11022 11023 12147\nf 11022 12147 12146\nf 11023 11024 12148\nf 11023 12148 12147\nf 11024 11025 12149\nf 11024 12149 12148\nf 11025 11027 12150\nf 11025 12150 12149\nf 11026 11028 11027\nf 11027 11028 12152\nf 11027 12151 12150\nf 11027 12152 12151\nf 11028 11029 12152\nf 11029 11030 12153\nf 11029 12153 12152\nf 11030 11031 12154\nf 11030 12154 12153\nf 11031 11032 12155\nf 11031 12155 12154\nf 11032 11033 12156\nf 11032 12156 12155\nf 11033 12157 12158\nf 11033 12158 12156\nf 11034 11035 12167\nf 11034 12165 12119\nf 11034 12167 12165\nf 11035 11036 12168\nf 11035 12168 12167\nf 11036 11037 12169\nf 11036 12169 12168\nf 11037 11038 12170\nf 11037 12170 12169\nf 11038 11039 12171\nf 11038 12171 12170\nf 11039 11040 12172\nf 11039 12172 12171\nf 11040 11041 12173\nf 11040 12173 12172\nf 11041 11042 12174\nf 11041 12174 12173\nf 11042 11043 12175\nf 11042 12175 12174\nf 11043 11044 12176\nf 11043 12176 12175\nf 11044 11046 12177\nf 11044 12177 12176\nf 11045 11047 12178\nf 11045 12178 11046\nf 11046 12178 12177\nf 11047 11048 12179\nf 11047 12179 12178\nf 11048 11049 12180\nf 11048 12180 12179\nf 11049 11050 12181\nf 11049 12181 12180\nf 11050 11051 12182\nf 11050 12182 12181\nf 11051 11052 12183\nf 11051 12183 12182\nf 11052 11053 12184\nf 11052 12184 12183\nf 11053 11054 12185\nf 11053 12185 12184\nf 11054 11055 12186\nf 11054 12186 12185\nf 11055 11056 12187\nf 11055 12187 12186\nf 11056 11058 12188\nf 11056 12188 12187\nf 11057 11059 11058\nf 11058 11059 12190\nf 11058 12189 12188\nf 11058 12190 12189\nf 11059 11060 12190\nf 11060 11061 12191\nf 11060 12191 12190\nf 11061 11062 12192\nf 11061 12192 12191\nf 11062 11063 12193\nf 11062 12193 12192\nf 11063 11064 12194\nf 11063 12194 12193\nf 11064 11065 12195\nf 11064 12195 12194\nf 11065 11066 12196\nf 11065 12196 12195\nf 11066 11067 12197\nf 11066 12197 12196\nf 11067 12198 12199\nf 11067 12199 12197\nf 11068 11070 12219\nf 11068 12219 12202\nf 11069 12126 12203\nf 11069 12203 11071\nf 11070 11072 12221\nf 11070 12221 12219\nf 11071 12203 12220\nf 11071 12220 11073\nf 11072 11074 12223\nf 11072 12223 12221\nf 11073 12220 12222\nf 11073 12222 11075\nf 11074 11076 12225\nf 11074 12225 12223\nf 11075 12222 12224\nf 11075 12224 11077\nf 11076 11078 12227\nf 11076 12227 12225\nf 11077 12224 12226\nf 11077 12226 11079\nf 11078 11080 12229\nf 11078 12229 12227\nf 11079 12226 12228\nf 11079 12228 11081\nf 11080 11082 12231\nf 11080 12231 12229\nf 11081 12228 12230\nf 11081 12230 11083\nf 11082 11084 12233\nf 11082 12233 12231\nf 11083 12230 12232\nf 11083 12232 11085\nf 11084 11086 12235\nf 11084 12235 12233\nf 11085 12232 12234\nf 11085 12234 11087\nf 11086 11088 12238\nf 11086 12238 12235\nf 11087 12234 12236\nf 11087 12236 11089\nf 11088 11090 12241\nf 11088 12241 12238\nf 11089 12236 12239\nf 11089 12239 11091\nf 11090 11092 12244\nf 11090 12244 12241\nf 11091 12239 12242\nf 11091 12242 11093\nf 11092 11094 12247\nf 11092 12247 12244\nf 11093 12242 12245\nf 11093 12245 11096\nf 11094 11095 12250\nf 11094 12250 12247\nf 11095 11097 11098\nf 11095 11098 12250\nf 11096 12245 12248\nf 11096 12248 11099\nf 11097 11100 12255\nf 11097 12255 11098\nf 11098 12251 12250\nf 11098 12255 12251\nf 11099 12248 12252\nf 11099 12252 11102\nf 11100 11101 12255\nf 11101 11105 12259\nf 11101 12256 12255\nf 11101 12259 12256\nf 11102 11104 11103\nf 11102 12252 12253\nf 11102 12253 11104\nf 11103 11104 11107\nf 11104 12253 12257\nf 11104 12257 11107\nf 11105 11106 12259\nf 11106 11146 11148\nf 11106 11148 12258\nf 11106 12258 12260\nf 11106 12260 12259\nf 11107 12257 12261\nf 11107 12261 11149\nf 11108 11170 11172\nf 11108 11172 11173\nf 11108 11173 11109\nf 11109 11173 11174\nf 11109 11174 11110\nf 11110 11174 11175\nf 11110 11175 11111\nf 11111 11175 11176\nf 11111 11176 11112\nf 11112 11176 11177\nf 11112 11177 11113\nf 11113 11177 11178\nf 11113 11178 11114\nf 11114 11178 11179\nf 11114 11179 11115\nf 11115 11179 11181\nf 11115 11181 11116\nf 11116 11181 11180\nf 11117 11184 11186\nf 11117 11186 11187\nf 11117 11187 11118\nf 11118 11187 11188\nf 11118 11188 11119\nf 11119 11188 11189\nf 11119 11189 11120\nf 11120 11189 11190\nf 11120 11190 11121\nf 11121 11190 11191\nf 11121 11191 11122\nf 11122 11191 11192\nf 11122 11192 11123\nf 11123 11192 11194\nf 11123 11194 11124\nf 11124 11194 11193\nf 11125 11221 11223\nf 11125 11223 12265\nf 11125 12265 12266\nf 11125 12266 12267\nf 11125 12267 11126\nf 11126 12267 12268\nf 11126 12268 11127\nf 11127 12268 12269\nf 11127 12269 11128\nf 11128 12269 12270\nf 11128 12270 11129\nf 11129 12270 12271\nf 11129 12271 11130\nf 11130 12271 12272\nf 11130 12272 11131\nf 11131 12272 12273\nf 11131 12273 11132\nf 11132 12273 12274\nf 11132 12274 11133\nf 11133 12274 12275\nf 11133 12275 11134\nf 11134 12275 12276\nf 11134 12276 11135\nf 11135 12276 12277\nf 11135 12277 11136\nf 11136 12277 12278\nf 11136 12278 11137\nf 11137 12278 12279\nf 11137 12279 11138\nf 11138 12279 12280\nf 11138 12280 11139\nf 11139 12280 12281\nf 11139 12281 11140\nf 11140 12281 12282\nf 11140 12282 11141\nf 11141 12282 12283\nf 11141 12283 11142\nf 11142 12283 12284\nf 11142 12284 11143\nf 11143 12284 12285\nf 11143 12285 11144\nf 11144 12285 12287\nf 11144 12287 11145\nf 11145 12287 11147\nf 11146 11147 11148\nf 11147 12286 11148\nf 11147 12287 12286\nf 11148 12286 12258\nf 11149 12261 12288\nf 11149 12288 11224\nf 11150 11225 11227\nf 11150 11227 12376\nf 11150 12289 11151\nf 11150 12376 12289\nf 11151 12289 12290\nf 11151 12290 11152\nf 11152 12290 12291\nf 11152 12291 11153\nf 11153 12291 12292\nf 11153 12292 11154\nf 11154 12292 12293\nf 11154 12293 11155\nf 11155 12293 12294\nf 11155 12294 11156\nf 11156 12294 12295\nf 11156 12295 11157\nf 11157 12295 12296\nf 11157 12296 11158\nf 11158 12296 12297\nf 11158 12297 11159\nf 11159 12297 12298\nf 11159 12298 11160\nf 11160 12298 12299\nf 11160 12299 11161\nf 11161 12299 12300\nf 11161 12300 11162\nf 11162 12300 12301\nf 11162 12301 11163\nf 11163 12301 12302\nf 11163 12302 11164\nf 11164 12302 12303\nf 11164 12303 11165\nf 11165 12303 12304\nf 11165 12304 11166\nf 11166 12304 12305\nf 11166 12305 11167\nf 11167 12305 12306\nf 11167 12306 11168\nf 11168 12306 12307\nf 11168 12307 11169\nf 11169 12307 12308\nf 11169 12308 11171\nf 11170 11171 11172\nf 11171 12308 12309\nf 11171 12309 11172\nf 11172 12309 11173\nf 11173 12309 12310\nf 11173 12310 11174\nf 11174 12310 12311\nf 11174 12311 11175\nf 11175 12311 12312\nf 11175 12312 11176\nf 11176 12312 12313\nf 11176 12313 11177\nf 11177 12313 12314\nf 11177 12314 11178\nf 11178 12314 12315\nf 11178 12315 11179\nf 11179 12315 12316\nf 11179 12316 11181\nf 11180 11181 12317\nf 11180 12317 11182\nf 11181 12316 12317\nf 11182 12317 12318\nf 11182 12318 12319\nf 11182 12319 11183\nf 11183 12319 12320\nf 11183 12320 11185\nf 11184 11185 11186\nf 11185 12320 12321\nf 11185 12321 11186\nf 11186 12321 11187\nf 11187 12321 12322\nf 11187 12322 11188\nf 11188 12322 12323\nf 11188 12323 11189\nf 11189 12323 12324\nf 11189 12324 11190\nf 11190 12324 12325\nf 11190 12325 11191\nf 11191 12325 12326\nf 11191 12326 11192\nf 11192 12326 12328\nf 11192 12328 11194\nf 11193 11194 12330\nf 11193 12330 11195\nf 11194 12328 12330\nf 11195 12330 12332\nf 11195 12332 12334\nf 11195 12334 11196\nf 11196 12334 12336\nf 11196 12336 11197\nf 11197 12336 12338\nf 11197 12338 11198\nf 11198 12338 12340\nf 11198 12340 11199\nf 11199 12340 12342\nf 11199 12342 11200\nf 11200 12342 12344\nf 11200 12344 11201\nf 11201 12344 12346\nf 11201 12346 11202\nf 11202 12346 12348\nf 11202 12348 11203\nf 11203 12348 12350\nf 11203 12350 11204\nf 11204 12350 12352\nf 11204 12352 11205\nf 11205 12352 12354\nf 11205 12354 11206\nf 11206 12354 11207\nf 11207 11208 11209\nf 11207 12353 11208\nf 11207 12354 12353\nf 11208 11210 11209\nf 11208 12262 12263\nf 11208 12263 11210\nf 11208 12353 12262\nf 11209 11210 12357\nf 11209 12357 11211\nf 11210 12263 12356\nf 11210 12356 12357\nf 11211 12357 12359\nf 11211 12359 11212\nf 11212 12359 12361\nf 11212 12361 11213\nf 11213 12361 12363\nf 11213 12363 11214\nf 11214 12363 12365\nf 11214 12365 11215\nf 11215 12365 12367\nf 11215 12367 11216\nf 11216 12367 12369\nf 11216 12369 11217\nf 11217 12369 12372\nf 11217 12372 11218\nf 11218 12372 11219\nf 11219 11220 11222\nf 11219 12371 11220\nf 11219 12372 12371\nf 11220 11223 11222\nf 11220 12264 12265\nf 11220 12265 11223\nf 11220 12371 12264\nf 11221 11222 11223\nf 11224 12288 12374\nf 11224 12374 11228\nf 11225 11226 11227\nf 11226 11229 12379\nf 11226 12375 12377\nf 11226 12377 11227\nf 11226 12379 12375\nf 11227 12377 12376\nf 11228 12374 12378\nf 11228 12378 11231\nf 11229 11230 12379\nf 11230 11232 12382\nf 11230 12380 12379\nf 11230 12382 12380\nf 11231 12378 12381\nf 11231 12381 11233\nf 11232 11234 12386\nf 11232 12386 12382\nf 11233 12381 12383\nf 11233 12383 11236\nf 11234 11235 12386\nf 11235 11239 12390\nf 11235 12387 12386\nf 11235 12390 12387\nf 11236 11238 11237\nf 11236 12383 11238\nf 11237 11238 12389\nf 11237 12389 11240\nf 11238 12383 12384\nf 11238 12384 12389\nf 11239 11241 12392\nf 11239 12392 12390\nf 11240 12389 12391\nf 11240 12391 11242\nf 11241 11243 12394\nf 11241 12394 12392\nf 11242 12391 12393\nf 11242 12393 11244\nf 11243 11245 12396\nf 11243 12396 12394\nf 11244 12393 12395\nf 11244 12395 11246\nf 11245 11247 12398\nf 11245 12398 12396\nf 11246 12395 12397\nf 11246 12397 11248\nf 11247 11249 12400\nf 11247 12400 12398\nf 11248 12397 12399\nf 11248 12399 11250\nf 11249 11251 12402\nf 11249 12402 12400\nf 11250 12399 12401\nf 11250 12401 11252\nf 11251 11253 12404\nf 11251 12404 12402\nf 11252 12401 12403\nf 11252 12403 11254\nf 11253 11255 12406\nf 11253 12406 12404\nf 11254 12403 12405\nf 11254 12405 11256\nf 11255 11257 12408\nf 11255 12408 12406\nf 11256 12405 12407\nf 11256 12407 11258\nf 11257 11259 12410\nf 11257 12410 12408\nf 11258 12407 12409\nf 11258 12409 11260\nf 11259 11261 12412\nf 11259 12412 12410\nf 11260 12409 12411\nf 11260 12411 11262\nf 11261 11263 12414\nf 11261 12414 12412\nf 11262 12411 12413\nf 11262 12413 11264\nf 11263 11266 12416\nf 11263 12416 12414\nf 11264 12413 12415\nf 11264 12415 12417\nf 11264 12417 11265\nf 11265 11268 11267\nf 11265 12417 11268\nf 11266 11269 12419\nf 11266 12419 12416\nf 11267 11268 12420\nf 11267 12420 11270\nf 11268 12417 12418\nf 11268 12418 12420\nf 11269 11271 12422\nf 11269 12422 12419\nf 11270 12420 11272\nf 11271 11273 12425\nf 11271 12425 12422\nf 11272 12420 12423\nf 11272 12423 11274\nf 11273 11275 12427\nf 11273 12427 12425\nf 11274 12423 12426\nf 11274 12426 11276\nf 11275 11277 12429\nf 11275 12429 12427\nf 11276 12426 12428\nf 11276 12428 11278\nf 11277 11279 12431\nf 11277 12431 12429\nf 11278 12428 12430\nf 11278 12430 11280\nf 11279 11281 12433\nf 11279 12433 12431\nf 11280 12430 12432\nf 11280 12432 11282\nf 11281 11283 12435\nf 11281 12435 12433\nf 11282 12432 12434\nf 11282 12434 11284\nf 11283 11285 12437\nf 11283 12437 12435\nf 11284 12434 12436\nf 11284 12436 11286\nf 11285 11287 12439\nf 11285 12439 12437\nf 11286 12436 12438\nf 11286 12438 11288\nf 11287 11289 12441\nf 11287 12441 12439\nf 11288 12438 12440\nf 11288 12440 11291\nf 11289 11290 12443\nf 11289 12443 12441\nf 11290 11293 11294\nf 11290 11294 12443\nf 11291 12440 12442\nf 11291 12442 12445\nf 11291 12445 11292\nf 11292 11296 11295\nf 11292 12445 11296\nf 11293 11297 12446\nf 11293 12446 11294\nf 11294 12444 12443\nf 11294 12446 12444\nf 11295 11296 11298\nf 11296 11299 11298\nf 11296 12445 12447\nf 11296 12447 11299\nf 11297 11300 12448\nf 11297 12448 12446\nf 11298 11299 11301\nf 11299 11302 11301\nf 11299 12447 12449\nf 11299 12449 11302\nf 11300 11303 12450\nf 11300 12450 12448\nf 11301 11302 11304\nf 11302 11305 11304\nf 11302 12449 12451\nf 11302 12451 11305\nf 11303 11306 12452\nf 11303 12452 12450\nf 11304 11305 11307\nf 11305 11308 11307\nf 11305 12451 12453\nf 11305 12453 11308\nf 11306 11309 12454\nf 11306 12454 12452\nf 11307 11308 11310\nf 11308 11311 11310\nf 11308 12453 12455\nf 11308 12455 11311\nf 11309 11312 12456\nf 11309 12456 12454\nf 11310 11311 11313\nf 11311 11314 11313\nf 11311 12455 12457\nf 11311 12457 11314\nf 11312 11315 12459\nf 11312 12459 12456\nf 11313 11314 12460\nf 11313 12460 11316\nf 11314 12457 12458\nf 11314 12458 12460\nf 11315 11317 12462\nf 11315 12462 12459\nf 11316 12460 11318\nf 11317 11319 12466\nf 11317 12466 12462\nf 11318 12460 12464\nf 11318 12464 11321\nf 11319 11320 12470\nf 11319 12470 12466\nf 11320 11322 11323\nf 11320 11323 12470\nf 11321 12464 12468\nf 11321 12468 11324\nf 11322 11325 11323\nf 11323 11325 11326\nf 11323 11326 12474\nf 11323 12474 12470\nf 11324 12468 12472\nf 11324 12472 11327\nf 11325 11328 12479\nf 11325 12479 11326\nf 11326 12475 12474\nf 11326 12479 12475\nf 11327 12472 12477\nf 11327 12477 11329\nf 11328 11330 12482\nf 11328 12482 12479\nf 11329 12477 12480\nf 11329 12480 11331\nf 11330 11332 12485\nf 11330 12485 12482\nf 11331 12480 12483\nf 11331 12483 11333\nf 11332 11334 12488\nf 11332 12488 12485\nf 11333 12483 12486\nf 11333 12486 11335\nf 11334 11336 12491\nf 11334 12491 12488\nf 11335 12486 12489\nf 11335 12489 11337\nf 11336 11338 12494\nf 11336 12494 12491\nf 11337 12489 12492\nf 11337 12492 11339\nf 11338 11340 12497\nf 11338 12497 12494\nf 11339 12492 12495\nf 11339 12495 11341\nf 11340 11342 12500\nf 11340 12500 12497\nf 11341 12495 12498\nf 11341 12498 11343\nf 11342 11344 12502\nf 11342 12502 12500\nf 11343 12498 12501\nf 11343 12501 11345\nf 11344 11346 12504\nf 11344 12504 12502\nf 11345 12501 12503\nf 11345 12503 11347\nf 11346 11348 12506\nf 11346 12506 12504\nf 11347 12503 12505\nf 11347 12505 11349\nf 11348 11351 12508\nf 11348 12508 12506\nf 11349 12505 12507\nf 11349 12507 12509\nf 11349 12509 11350\nf 11350 11353 11352\nf 11350 12509 11353\nf 11351 11354 12510\nf 11351 12510 12508\nf 11352 11353 11355\nf 11353 11356 11355\nf 11353 12509 12511\nf 11353 12511 11356\nf 11354 11357 12512\nf 11354 12512 12510\nf 11355 11356 11358\nf 11356 11359 11358\nf 11356 12511 12513\nf 11356 12513 11359\nf 11357 11360 12514\nf 11357 12514 12512\nf 11358 11359 11361\nf 11359 11362 11361\nf 11359 12513 12515\nf 11359 12515 11362\nf 11360 11363 12517\nf 11360 12517 12514\nf 11361 11362 12519\nf 11361 12519 11364\nf 11362 12515 12516\nf 11362 12516 12519\nf 11363 11365 12521\nf 11363 12521 12517\nf 11364 12519 11366\nf 11365 11367 12525\nf 11365 12525 12521\nf 11366 12519 12523\nf 11366 12523 11368\nf 11367 11369 12529\nf 11367 12529 12525\nf 11368 12523 12527\nf 11368 12527 11370\nf 11369 11371 12533\nf 11369 12533 12529\nf 11370 12527 12531\nf 11370 12531 11373\nf 11371 11372 12537\nf 11371 12537 12533\nf 11372 11374 11375\nf 11372 11375 12537\nf 11373 12531 12535\nf 11373 12535 11376\nf 11374 11377 12542\nf 11374 12542 11375\nf 11375 12538 12537\nf 11375 12542 12538\nf 11376 12535 12540\nf 11376 12540 11378\nf 11377 11379 12544\nf 11377 12544 12542\nf 11378 12540 12543\nf 11378 12543 11380\nf 11379 11381 12546\nf 11379 12546 12544\nf 11380 12543 12545\nf 11380 12545 11382\nf 11381 11384 12548\nf 11381 12548 12546\nf 11382 12545 12547\nf 11382 12547 12549\nf 11382 12549 11383\nf 11383 11386 11385\nf 11383 12549 11386\nf 11384 11387 12550\nf 11384 12550 12548\nf 11385 11386 11388\nf 11386 11389 11388\nf 11386 12549 12551\nf 11386 12551 11389\nf 11387 11390 12552\nf 11387 12552 12550\nf 11388 11389 11391\nf 11389 11392 11391\nf 11389 12551 12553\nf 11389 12553 11392\nf 11390 11393 12555\nf 11390 12555 12552\nf 11391 11392 12557\nf 11391 12557 11394\nf 11392 12553 12554\nf 11392 12554 12557\nf 11393 11395 12559\nf 11393 12559 12555\nf 11394 12557 11396\nf 11395 11397 12563\nf 11395 12563 12559\nf 11396 12557 12561\nf 11396 12561 11398\nf 11397 11399 12567\nf 11397 12567 12563\nf 11398 12561 12565\nf 11398 12565 11401\nf 11399 11400 12567\nf 11400 11402 12572\nf 11400 12568 12567\nf 11400 12572 12568\nf 11401 12565 12570\nf 11401 12570 11403\nf 11402 11404 12575\nf 11402 12575 12572\nf 11403 12570 12573\nf 11403 12573 11405\nf 11404 11406 12578\nf 11404 12578 12575\nf 11405 12573 12576\nf 11405 12576 11407\nf 11406 11408 12581\nf 11406 12581 12578\nf 11407 12576 12579\nf 11407 12579 11409\nf 11408 11410 12583\nf 11408 12583 12581\nf 11409 12579 12582\nf 11409 12582 11411\nf 11410 11412 12585\nf 11410 12585 12583\nf 11411 12582 12584\nf 11411 12584 11413\nf 11412 11414 12587\nf 11412 12587 12585\nf 11413 12584 12586\nf 11413 12586 11415\nf 11414 11416 12589\nf 11414 12589 12587\nf 11415 12586 12588\nf 11415 12588 11417\nf 11416 11418 12591\nf 11416 12591 12589\nf 11417 12588 12590\nf 11417 12590 11419\nf 11418 11421 12593\nf 11418 12593 12591\nf 11419 12590 12592\nf 11419 12592 12595\nf 11419 12595 11420\nf 11420 11423 11422\nf 11420 12595 11423\nf 11421 11424 12596\nf 11421 12596 12593\nf 11422 11423 11426\nf 11423 11427 11426\nf 11423 12595 12599\nf 11423 12599 11427\nf 11424 11425 12596\nf 11425 11428 12600\nf 11425 12597 12596\nf 11425 12600 12597\nf 11426 11427 11429\nf 11427 11431 11429\nf 11427 12599 12601\nf 11427 12601 11431\nf 11428 11432 12602\nf 11428 12602 12600\nf 11429 11431 11430\nf 11430 11431 11433\nf 11431 12601 11433\nf 11432 11434 12605\nf 11432 12605 12602\nf 11433 12601 12603\nf 11433 12603 11435\nf 11434 11436 12609\nf 11434 12609 12605\nf 11435 12603 12607\nf 11435 12607 11438\nf 11436 11437 12609\nf 11437 11439 12614\nf 11437 12610 12609\nf 11437 12614 12610\nf 11438 12607 12612\nf 11438 12612 11440\nf 11439 11441 12617\nf 11439 12617 12614\nf 11440 12612 12615\nf 11440 12615 11443\nf 11441 11442 12617\nf 11442 11444 12622\nf 11442 12618 12617\nf 11442 12622 12618\nf 11443 12615 12620\nf 11443 12620 11445\nf 11444 11446 12622\nf 11445 12620 12624\nf 11445 12624 11449\nf 11446 11447 11448\nf 11446 11448 12622\nf 11447 11451 12626\nf 11447 12626 11448\nf 11448 12623 12622\nf 11448 12626 12623\nf 11449 12624 12627\nf 11449 12627 12631\nf 11449 12631 11450\nf 11450 11454 11452\nf 11450 12631 11454\nf 11451 11455 12633\nf 11451 12629 12626\nf 11451 12633 12629\nf 11452 11454 11453\nf 11453 11454 11456\nf 11454 12631 11456\nf 11455 11458 12633\nf 11456 12631 12636\nf 11456 12636 12640\nf 11456 12640 11457\nf 11457 11462 11461\nf 11457 12640 11462\nf 11458 11459 11460\nf 11458 11460 12633\nf 11459 11463 12638\nf 11459 12638 11460\nf 11460 12634 12633\nf 11460 12638 12634\nf 11461 11462 11464\nf 11462 11465 11464\nf 11462 12640 12644\nf 11462 12644 11465\nf 11463 11466 12641\nf 11463 12641 12638\nf 11464 11465 12647\nf 11464 12647 11468\nf 11465 12644 12645\nf 11465 12645 12647\nf 11466 11467 12641\nf 11466 11469 11470\nf 11466 11470 11467\nf 11467 11470 12646\nf 11467 12642 12641\nf 11467 12646 12642\nf 11468 12647 11471\nf 11469 11472 11473\nf 11469 11473 11470\nf 11470 11473 12649\nf 11470 12649 12646\nf 11471 12647 12651\nf 11471 12651 11474\nf 11472 11477 11479\nf 11472 11479 11473\nf 11473 11479 12654\nf 11473 12654 12649\nf 11474 11476 11475\nf 11474 12651 12652\nf 11474 12652 11476\nf 11475 11476 11480\nf 11476 12652 12655\nf 11476 12655 11480\nf 11477 11478 11479\nf 11478 11484 12656\nf 11478 12656 11479\nf 11479 12656 12654\nf 11480 12655 12657\nf 11480 12657 12658\nf 11480 12658 11481\nf 11481 12658 12660\nf 11481 12660 11482\nf 11482 12660 12662\nf 11482 12662 11483\nf 11483 12662 11485\nf 11484 11488 12663\nf 11484 12663 12656\nf 11485 12662 12666\nf 11485 12666 12667\nf 11485 12667 11486\nf 11486 12667 12670\nf 11486 12670 11487\nf 11487 12670 11489\nf 11488 11489 11490\nf 11488 11490 12663\nf 11489 12669 11490\nf 11489 12670 12669\nf 11490 12664 12663\nf 11490 12669 12664\nf 11491 11492 11512\nf 11491 11511 11509\nf 11491 11512 11511\nf 11492 11493 11513\nf 11492 11513 11512\nf 11493 11494 11514\nf 11493 11514 11513\nf 11494 11495 12671\nf 11494 12671 12687\nf 11494 12687 11514\nf 11495 11515 12671\nf 11496 11497 12672\nf 11496 12672 12694\nf 11496 12694 11518\nf 11497 11498 12673\nf 11497 12673 12672\nf 11498 11499 12674\nf 11498 12674 12673\nf 11499 11500 12675\nf 11499 12675 12674\nf 11500 11501 12676\nf 11500 12676 12675\nf 11501 11502 12677\nf 11501 12677 12676\nf 11502 11503 12678\nf 11502 12678 12677\nf 11503 11504 12679\nf 11503 12679 12678\nf 11504 11505 12680\nf 11504 12680 12679\nf 11505 11520 11521\nf 11505 11521 12680\nf 11506 11507 12681\nf 11506 11526 11525\nf 11506 12681 12702\nf 11506 12702 11526\nf 11507 11508 12681\nf 11508 11510 12682\nf 11508 12682 12681\nf 11509 11511 11510\nf 11510 11511 12684\nf 11510 12683 12682\nf 11510 12684 12683\nf 11511 11512 12684\nf 11512 11513 12685\nf 11512 12685 12684\nf 11513 11514 12686\nf 11513 12686 12685\nf 11514 12687 12688\nf 11514 12688 12686\nf 11515 11516 12691\nf 11515 12689 12671\nf 11515 12691 12689\nf 11516 11517 12691\nf 11517 11527 12693\nf 11517 12692 12691\nf 11517 12693 12692\nf 11518 12694 11519\nf 11519 12694 12695\nf 11519 12695 12707\nf 11519 12707 11530\nf 11520 11522 12699\nf 11520 12699 11521\nf 11521 12697 12680\nf 11521 12699 12697\nf 11522 11523 12700\nf 11522 12700 12699\nf 11523 11524 12701\nf 11523 12701 12700\nf 11524 11532 11533\nf 11524 11533 12701\nf 11525 11526 12713\nf 11525 12713 11534\nf 11526 12702 12703\nf 11526 12703 12713\nf 11527 11528 11529\nf 11527 11529 12693\nf 11528 11535 11537\nf 11528 11537 12706\nf 11528 12706 11529\nf 11529 12704 12693\nf 11529 12706 12704\nf 11530 12707 11531\nf 11531 12707 12708\nf 11531 12708 12716\nf 11531 12716 11538\nf 11532 11539 12717\nf 11532 12712 11533\nf 11532 12717 12712\nf 11533 12710 12701\nf 11533 12712 12710\nf 11534 12713 11540\nf 11535 11536 11537\nf 11536 11541 11537\nf 11537 11541 12714\nf 11537 12714 12706\nf 11538 12716 11543\nf 11539 11545 12722\nf 11539 12722 12717\nf 11540 12713 12718\nf 11540 12718 11546\nf 11541 11542 11548\nf 11541 11548 12724\nf 11541 12719 12714\nf 11541 12724 12719\nf 11542 11547 11548\nf 11543 12716 12720\nf 11543 12720 11544\nf 11544 12720 12721\nf 11544 12721 12726\nf 11544 12726 11549\nf 11545 11550 12728\nf 11545 12728 12722\nf 11546 12718 12723\nf 11546 12723 11551\nf 11547 11552 12730\nf 11547 12725 11548\nf 11547 12730 12725\nf 11548 12725 12724\nf 11549 12726 11553\nf 11550 11554 12732\nf 11550 12732 12728\nf 11551 12723 12729\nf 11551 12729 11555\nf 11552 11556 12734\nf 11552 12734 12730\nf 11553 12726 12731\nf 11553 12731 11558\nf 11554 11559 12737\nf 11554 12737 12732\nf 11555 12729 12733\nf 11555 12733 11560\nf 11556 11557 12735\nf 11556 12735 12734\nf 11557 11561 12735\nf 11558 12731 12736\nf 11558 12736 11562\nf 11559 11563 12742\nf 11559 12742 12737\nf 11560 12733 12738\nf 11560 12738 11564\nf 11561 11565 12744\nf 11561 12739 12735\nf 11561 12744 12739\nf 11562 12736 12741\nf 11562 12741 11566\nf 11563 11567 12747\nf 11563 12747 12742\nf 11564 12738 12743\nf 11564 12743 11568\nf 11565 11569 12749\nf 11565 12749 12744\nf 11566 12741 12746\nf 11566 12746 11570\nf 11567 11571 12753\nf 11567 12753 12747\nf 11568 12743 12748\nf 11568 12748 11572\nf 11569 11573 12755\nf 11569 12755 12749\nf 11570 12746 12751\nf 11570 12751 11574\nf 11571 11575 12758\nf 11571 12758 12753\nf 11572 12748 12754\nf 11572 12754 11576\nf 11573 11578 12760\nf 11573 12760 12755\nf 11574 12751 12756\nf 11574 12756 11580\nf 11575 11581 12763\nf 11575 12763 12758\nf 11576 11583 11577\nf 11576 12754 12759\nf 11576 12759 12764\nf 11576 12764 11583\nf 11577 11583 11582\nf 11578 11579 11585\nf 11578 11585 12767\nf 11578 12767 12760\nf 11579 11584 11585\nf 11580 12756 12761\nf 11580 12761 11586\nf 11581 11587 12770\nf 11581 12770 12763\nf 11582 11583 12765\nf 11582 12765 12771\nf 11582 12771 11588\nf 11583 12764 12765\nf 11584 11589 11590\nf 11584 11590 11585\nf 11585 11590 12767\nf 11586 12761 12768\nf 11586 12768 11591\nf 11587 11592 12775\nf 11587 12775 12770\nf 11588 12771 11593\nf 11589 11594 11595\nf 11589 11595 11590\nf 11590 11595 12772\nf 11590 12772 12767\nf 11591 12768 12773\nf 11591 12773 11596\nf 11592 11597 12780\nf 11592 12780 12775\nf 11593 12771 12776\nf 11593 12776 11598\nf 11594 11599 11600\nf 11594 11600 11595\nf 11595 11600 12777\nf 11595 12777 12772\nf 11596 12773 12778\nf 11596 12778 11601\nf 11597 11602 12785\nf 11597 12785 12780\nf 11598 12776 12781\nf 11598 12781 11603\nf 11599 11604 11605\nf 11599 11605 11600\nf 11600 11605 12782\nf 11600 12782 12777\nf 11601 12778 12783\nf 11601 12783 11606\nf 11602 11607 12790\nf 11602 12790 12785\nf 11603 12781 12786\nf 11603 12786 11608\nf 11604 11609 11610\nf 11604 11610 11605\nf 11605 11610 12787\nf 11605 12787 12782\nf 11606 12783 12788\nf 11606 12788 11611\nf 11607 11612 12796\nf 11607 12796 12790\nf 11608 12786 12791\nf 11608 12791 11613\nf 11609 11614 12798\nf 11609 12793 11610\nf 11609 12798 12793\nf 11610 12792 12787\nf 11610 12793 12792\nf 11611 12788 12794\nf 11611 12794 11615\nf 11612 11616 12802\nf 11612 12802 12796\nf 11613 12791 12797\nf 11613 12797 11617\nf 11614 11618 12804\nf 11614 12804 12798\nf 11615 12794 12800\nf 11615 12800 11619\nf 11616 11621 12808\nf 11616 12808 12802\nf 11617 12797 12803\nf 11617 12803 11622\nf 11618 11623 12810\nf 11618 12810 12804\nf 11619 12800 12806\nf 11619 12806 12812\nf 11619 12812 11620\nf 11620 11625 11624\nf 11620 12812 11625\nf 11621 11626 12814\nf 11621 12814 12808\nf 11622 12803 12809\nf 11622 12809 11627\nf 11623 11628 12816\nf 11623 12816 12810\nf 11624 11625 11632\nf 11625 11634 11632\nf 11625 12812 12820\nf 11625 12820 11634\nf 11626 11635 12823\nf 11626 12823 12814\nf 11627 12809 12815\nf 11627 12815 11636\nf 11628 11629 12818\nf 11628 12818 12816\nf 11629 11630 12818\nf 11630 11637 12819\nf 11630 12819 12818\nf 11631 11633 11693\nf 11631 11692 11690\nf 11631 11693 11692\nf 11632 11634 11633\nf 11633 11634 12821\nf 11633 12821 11693\nf 11634 12820 12821\nf 11635 11694 12879\nf 11635 12879 12823\nf 11636 12815 12824\nf 11636 12824 11695\nf 11637 11638 12829\nf 11637 12827 12819\nf 11637 12829 12827\nf 11638 11639 12829\nf 11639 11640 12830\nf 11639 12830 12829\nf 11640 11641 12831\nf 11640 12831 12830\nf 11641 11642 12832\nf 11641 12832 12831\nf 11642 11643 12833\nf 11642 12833 12832\nf 11643 11696 12834\nf 11643 12834 12833\nf 11644 11645 12835\nf 11644 12835 12899\nf 11644 12899 11712\nf 11645 11646 12836\nf 11645 12836 12835\nf 11646 11647 12837\nf 11646 12837 12836\nf 11647 11648 12838\nf 11647 12838 12837\nf 11648 11649 12839\nf 11648 12839 12838\nf 11649 11650 12840\nf 11649 12840 12839\nf 11650 11651 12841\nf 11650 12841 12840\nf 11651 11652 12842\nf 11651 12842 12841\nf 11652 11653 12843\nf 11652 12843 12842\nf 11653 11654 12844\nf 11653 12844 12843\nf 11654 11655 12845\nf 11654 12845 12844\nf 11655 11656 12846\nf 11655 12846 12845\nf 11656 11657 12847\nf 11656 12847 12846\nf 11657 11658 12848\nf 11657 12848 12847\nf 11658 11659 12849\nf 11658 12849 12848\nf 11659 11660 12850\nf 11659 12850 12849\nf 11660 11661 12851\nf 11660 12851 12850\nf 11661 11662 12852\nf 11661 12852 12851\nf 11662 11663 12853\nf 11662 12853 12852\nf 11663 11664 12854\nf 11663 12854 12853\nf 11664 11665 12855\nf 11664 12855 12854\nf 11665 11666 12856\nf 11665 12856 12855\nf 11666 11667 12857\nf 11666 12857 12856\nf 11667 11668 12858\nf 11667 12858 12857\nf 11668 11669 12859\nf 11668 12859 12858\nf 11669 11670 12860\nf 11669 12860 12859\nf 11670 11671 11715\nf 11670 11714 12860\nf 11670 11715 11714\nf 11671 11672 11716\nf 11671 11716 11715\nf 11672 11673 11717\nf 11672 11717 11716\nf 11673 11674 11719\nf 11673 11719 11717\nf 11674 11718 11719\nf 11675 11676 11724\nf 11675 11723 11721\nf 11675 11724 11723\nf 11676 11677 12861\nf 11676 12861 12921\nf 11676 12921 11724\nf 11677 11678 12861\nf 11678 11679 12862\nf 11678 12862 12861\nf 11679 11680 12863\nf 11679 12863 12862\nf 11680 11681 12864\nf 11680 12864 12863\nf 11681 11682 12865\nf 11681 12865 12864\nf 11682 11683 12866\nf 11682 12866 12865\nf 11683 11684 12867\nf 11683 12867 12866\nf 11684 11685 12868\nf 11684 12868 12867\nf 11685 11686 12869\nf 11685 12869 12868\nf 11686 11687 12870\nf 11686 12870 12869\nf 11687 11688 12871\nf 11687 12871 12870\nf 11688 11689 12872\nf 11688 12872 12871\nf 11689 11691 12873\nf 11689 12873 12872\nf 11690 11692 11691\nf 11691 11692 12875\nf 11691 12874 12873\nf 11691 12875 12874\nf 11692 11693 12875\nf 11693 12821 12876\nf 11693 12876 12877\nf 11693 12877 12875\nf 11694 11725 12939\nf 11694 12939 12879\nf 11695 12824 12880\nf 11695 12880 11726\nf 11696 11697 12886\nf 11696 12885 12834\nf 11696 12886 12885\nf 11697 11698 12886\nf 11698 11699 12887\nf 11698 12887 12886\nf 11699 11700 12888\nf 11699 12888 12887\nf 11700 11701 11728\nf 11700 11727 12888\nf 11700 11728 11727\nf 11701 11702 12889\nf 11701 12889 12943\nf 11701 12943 11728\nf 11702 11703 12889\nf 11703 11704 12890\nf 11703 12890 12889\nf 11704 11705 12891\nf 11704 12891 12890\nf 11705 11706 12892\nf 11705 12892 12891\nf 11706 11707 12893\nf 11706 12893 12892\nf 11707 11708 12894\nf 11707 12894 12893\nf 11708 11709 12895\nf 11708 12895 12894\nf 11709 11710 12896\nf 11709 12896 12895\nf 11710 11711 12897\nf 11710 12897 12896\nf 11711 11713 12898\nf 11711 12898 12897\nf 11712 12899 11713\nf 11713 12899 12900\nf 11713 12900 12898\nf 11714 11715 12913\nf 11714 12911 12860\nf 11714 12913 12911\nf 11715 11716 12914\nf 11715 12914 12913\nf 11716 11717 12915\nf 11716 12915 12914\nf 11717 11719 12916\nf 11717 12916 12915\nf 11718 11720 12917\nf 11718 12917 11719\nf 11719 12917 12916\nf 11720 11722 12918\nf 11720 12918 12917\nf 11721 11723 11722\nf 11722 11723 12920\nf 11722 12919 12918\nf 11722 12920 12919\nf 11723 11724 12920\nf 11724 12921 12922\nf 11724 12922 12920\nf 11725 11729 12946\nf 11725 12946 12939\nf 11726 12880 12940\nf 11726 12940 11730\nf 11727 11728 12942\nf 11727 12941 12888\nf 11727 12942 12941\nf 11728 12943 12944\nf 11728 12944 12942\nf 11729 11731 12948\nf 11729 12948 12946\nf 11730 12940 12947\nf 11730 12947 11732\nf 11731 11733 12950\nf 11731 12950 12948\nf 11732 12947 12949\nf 11732 12949 11734\nf 11733 11735 12952\nf 11733 12952 12950\nf 11734 12949 12951\nf 11734 12951 11736\nf 11735 11737 12954\nf 11735 12954 12952\nf 11736 12951 12953\nf 11736 12953 11738\nf 11737 11739 12956\nf 11737 12956 12954\nf 11738 12953 12955\nf 11738 12955 11740\nf 11739 11741 12958\nf 11739 12958 12956\nf 11740 12955 12957\nf 11740 12957 11742\nf 11741 11743 12970\nf 11741 12970 12958\nf 11742 12957 12959\nf 11742 12959 11744\nf 11743 11759 13020\nf 11743 13020 12970\nf 11744 12959 12971\nf 11744 12971 11760\nf 11745 11767 11769\nf 11745 11769 12974\nf 11745 12974 12977\nf 11745 12977 11746\nf 11746 11747 11748\nf 11746 12976 11747\nf 11746 12977 12976\nf 11747 11749 11748\nf 11747 12960 12961\nf 11747 12961 11749\nf 11747 12976 12960\nf 11748 11749 11750\nf 11749 11751 11750\nf 11749 12961 12962\nf 11749 12962 11751\nf 11750 11751 12980\nf 11750 12980 11752\nf 11751 12962 12979\nf 11751 12979 12980\nf 11752 12980 12982\nf 11752 12982 11770\nf 11753 11803 11805\nf 11753 11805 13005\nf 11753 13005 13008\nf 11753 13008 11754\nf 11754 11755 11756\nf 11754 13007 11755\nf 11754 13008 13007\nf 11755 11757 11756\nf 11755 12964 12966\nf 11755 12966 11757\nf 11755 13007 12964\nf 11756 11757 13011\nf 11756 13011 11758\nf 11757 12966 13010\nf 11757 13010 13011\nf 11758 13011 13013\nf 11758 13013 11806\nf 11759 11813 13062\nf 11759 13062 13020\nf 11760 12971 13021\nf 11760 13021 11814\nf 11761 11816 11818\nf 11761 11818 13024\nf 11761 13024 13026\nf 11761 13026 13028\nf 11761 13028 11762\nf 11762 13028 13030\nf 11762 13030 11763\nf 11763 13030 13033\nf 11763 13033 11764\nf 11764 13033 11765\nf 11765 11766 11768\nf 11765 13032 11766\nf 11765 13033 13032\nf 11766 11769 11768\nf 11766 12972 12974\nf 11766 12974 11769\nf 11766 13032 12972\nf 11767 11768 11769\nf 11770 11772 11771\nf 11770 12982 11772\nf 11771 11772 11773\nf 11772 11774 11773\nf 11772 12982 12984\nf 11772 12984 11774\nf 11773 11774 11775\nf 11774 11776 11775\nf 11774 12984 12986\nf 11774 12986 11776\nf 11775 11776 13036\nf 11775 13036 11777\nf 11776 12986 13035\nf 11776 13035 13036\nf 11777 13036 13038\nf 11777 13038 11778\nf 11778 13038 13040\nf 11778 13040 11779\nf 11779 13040 13042\nf 11779 13042 11819\nf 11780 11855 11857\nf 11780 11857 13049\nf 11780 13049 13050\nf 11780 13050 13051\nf 11780 13051 11781\nf 11781 13051 13054\nf 11781 13054 11782\nf 11782 13054 11783\nf 11783 11784 11785\nf 11783 13053 11784\nf 11783 13054 13053\nf 11784 11786 11785\nf 11784 12988 12989\nf 11784 12989 11786\nf 11784 13053 12988\nf 11785 11786 11787\nf 11786 11788 11787\nf 11786 12989 12990\nf 11786 12990 11788\nf 11787 11788 11789\nf 11788 11790 11789\nf 11788 12990 12991\nf 11788 12991 11790\nf 11789 11790 11791\nf 11790 11792 11791\nf 11790 12991 12993\nf 11790 12993 11792\nf 11791 11792 11793\nf 11792 11794 11793\nf 11792 12993 12995\nf 11792 12995 11794\nf 11793 11794 11795\nf 11794 11796 11795\nf 11794 12995 12997\nf 11794 12997 11796\nf 11795 11796 11797\nf 11796 11798 11797\nf 11796 12997 12999\nf 11796 12999 11798\nf 11797 11798 11799\nf 11798 11800 11799\nf 11798 12999 13001\nf 11798 13001 11800\nf 11799 11800 11801\nf 11800 11802 11801\nf 11800 13001 13003\nf 11800 13003 11802\nf 11801 11802 11804\nf 11802 11805 11804\nf 11802 13003 13005\nf 11802 13005 11805\nf 11803 11804 11805\nf 11806 11808 11807\nf 11806 13013 11808\nf 11807 11808 11809\nf 11808 11810 11809\nf 11808 13013 13015\nf 11808 13015 11810\nf 11809 11810 11811\nf 11810 11812 11811\nf 11810 13015 13017\nf 11810 13017 11812\nf 11811 11812 11860\nf 11811 11860 11858\nf 11812 13017 13056\nf 11812 13056 13057\nf 11812 13057 11860\nf 11813 11862 13098\nf 11813 13098 13062\nf 11814 13021 13063\nf 11814 13063 11863\nf 11815 11864 13101\nf 11815 13067 11817\nf 11815 13101 13067\nf 11816 11817 11818\nf 11817 13066 11818\nf 11817 13067 13066\nf 11818 13066 13024\nf 11819 11821 11820\nf 11819 13042 11821\nf 11820 11821 11822\nf 11821 11823 11822\nf 11821 13042 13044\nf 11821 13044 11823\nf 11822 11823 11824\nf 11823 11825 11824\nf 11823 13044 13046\nf 11823 13046 11825\nf 11824 11825 11826\nf 11825 11827 11826\nf 11825 13046 13048\nf 11825 13048 11827\nf 11826 11827 13070\nf 11826 13070 11828\nf 11827 13048 13069\nf 11827 13069 13070\nf 11828 13070 13072\nf 11828 13072 11829\nf 11829 13072 13074\nf 11829 13074 11830\nf 11830 13074 13076\nf 11830 13076 11831\nf 11831 13076 13078\nf 11831 13078 11832\nf 11832 13078 13080\nf 11832 13080 11833\nf 11833 13080 13082\nf 11833 13082 11834\nf 11834 13082 13084\nf 11834 13084 11835\nf 11835 13084 13086\nf 11835 13086 11836\nf 11836 13086 13087\nf 11836 13087 11837\nf 11837 13087 13088\nf 11837 13088 11838\nf 11838 13088 11839\nf 11839 11866 11867\nf 11839 11867 11840\nf 11839 13088 11866\nf 11840 11867 11868\nf 11840 11868 11841\nf 11841 11868 11869\nf 11841 11869 11842\nf 11842 11869 11870\nf 11842 11870 11843\nf 11843 11870 11871\nf 11843 11871 11844\nf 11844 11871 11872\nf 11844 11872 11845\nf 11845 11872 11873\nf 11845 11873 11846\nf 11846 11873 11874\nf 11846 11874 11847\nf 11847 11874 11875\nf 11847 11875 11848\nf 11848 11875 11876\nf 11848 11876 11849\nf 11849 11876 13118\nf 11849 13089 11850\nf 11849 13118 13089\nf 11850 13089 13090\nf 11850 13090 11851\nf 11851 13090 13091\nf 11851 13091 11852\nf 11852 13091 13092\nf 11852 13092 11853\nf 11853 13092 13094\nf 11853 13094 11854\nf 11854 13094 11856\nf 11855 11856 11857\nf 11856 13093 11857\nf 11856 13094 13093\nf 11857 13093 13049\nf 11858 11860 11859\nf 11859 11860 11877\nf 11860 11861 11879\nf 11860 11879 11877\nf 11860 13057 13059\nf 11860 13059 11861\nf 11861 13059 13096\nf 11861 13096 13121\nf 11861 13121 11879\nf 11862 11880 13124\nf 11862 13124 13098\nf 11863 13063 13099\nf 11863 13099 11881\nf 11864 11865 13101\nf 11865 11882 13126\nf 11865 13102 13101\nf 11865 13126 13102\nf 11866 13088 13104\nf 11866 13104 13105\nf 11866 13105 11867\nf 11867 13105 13107\nf 11867 13107 11868\nf 11868 13107 13109\nf 11868 13109 11869\nf 11869 13109 13111\nf 11869 13111 11870\nf 11870 13111 13112\nf 11870 13112 11871\nf 11871 13112 13113\nf 11871 13113 11872\nf 11872 13113 13114\nf 11872 13114 11873\nf 11873 13114 13115\nf 11873 13115 11874\nf 11874 13115 13116\nf 11874 13116 11875\nf 11875 13116 13117\nf 11875 13117 11876\nf 11876 13117 13119\nf 11876 13119 13118\nf 11877 11879 11878\nf 11878 11879 11883\nf 11879 13121 11883\nf 11880 11884 13132\nf 11880 13132 13124\nf 11881 13099 13125\nf 11881 13125 11885\nf 11882 11886 13134\nf 11882 13134 13126\nf 11883 13121 13128\nf 11883 13128 11887\nf 11884 11889 13138\nf 11884 13138 13132\nf 11885 13125 13133\nf 11885 13133 11890\nf 11886 11891 13140\nf 11886 13140 13134\nf 11887 11888 11892\nf 11887 13128 13129\nf 11887 13129 11888\nf 11888 11894 11892\nf 11888 13129 13136\nf 11888 13136 13142\nf 11888 13142 11894\nf 11889 11895 13144\nf 11889 13144 13138\nf 11890 13133 13139\nf 11890 13139 11896\nf 11891 11897 13146\nf 11891 13146 13140\nf 11892 11894 11893\nf 11893 11894 11898\nf 11894 13142 11898\nf 11895 11899 13150\nf 11895 13150 13144\nf 11896 13139 13145\nf 11896 13145 11900\nf 11897 11901 13152\nf 11897 13152 13146\nf 11898 13142 13148\nf 11898 13148 11902\nf 11899 11903 13156\nf 11899 13156 13150\nf 11900 13145 13151\nf 11900 13151 11904\nf 11901 11905 13158\nf 11901 13158 13152\nf 11902 13148 13154\nf 11902 13154 11906\nf 11903 11907 13162\nf 11903 13162 13156\nf 11904 13151 13157\nf 11904 13157 11908\nf 11905 11909 13164\nf 11905 13164 13158\nf 11906 13154 13160\nf 11906 13160 11910\nf 11907 11911 13168\nf 11907 13168 13162\nf 11908 13157 13163\nf 11908 13163 11912\nf 11909 11913 13170\nf 11909 13170 13164\nf 11910 13160 13166\nf 11910 13166 11914\nf 11911 11915 13174\nf 11911 13174 13168\nf 11912 13163 13169\nf 11912 13169 11916\nf 11913 11917 13176\nf 11913 13176 13170\nf 11914 13166 13172\nf 11914 13172 11918\nf 11915 11919 13179\nf 11915 13179 13174\nf 11916 13169 13175\nf 11916 13175 11920\nf 11917 11921 13181\nf 11917 13181 13176\nf 11918 13172 13177\nf 11918 13177 11922\nf 11919 11924 13185\nf 11919 13185 13179\nf 11920 13175 13180\nf 11920 13180 11925\nf 11921 11927 13189\nf 11921 13189 13181\nf 11922 13177 13182\nf 11922 13182 13183\nf 11922 13183 11923\nf 11923 13183 11928\nf 11924 11929 13191\nf 11924 13191 13185\nf 11925 13180 13186\nf 11925 13186 13187\nf 11925 13187 11926\nf 11926 13187 11930\nf 11927 11931 13193\nf 11927 13193 13189\nf 11928 13183 13190\nf 11928 13190 11932\nf 11929 11933 13195\nf 11929 13195 13191\nf 11930 13187 13192\nf 11930 13192 11934\nf 11931 11935 13197\nf 11931 13197 13193\nf 11932 13190 13194\nf 11932 13194 11936\nf 11933 11937 13199\nf 11933 13199 13195\nf 11934 13192 13196\nf 11934 13196 11938\nf 11935 11939 13201\nf 11935 13201 13197\nf 11936 13194 13198\nf 11936 13198 11940\nf 11937 11941 13203\nf 11937 13203 13199\nf 11938 13196 13200\nf 11938 13200 11942\nf 11939 11943 13205\nf 11939 13205 13201\nf 11940 13198 13202\nf 11940 13202 11944\nf 11941 11945 13207\nf 11941 13207 13203\nf 11942 13200 13204\nf 11942 13204 11946\nf 11943 11947 13209\nf 11943 13209 13205\nf 11944 13202 13206\nf 11944 13206 11948\nf 11945 11949 13211\nf 11945 13211 13207\nf 11946 13204 13208\nf 11946 13208 11950\nf 11947 11951 13213\nf 11947 13213 13209\nf 11948 13206 13210\nf 11948 13210 11952\nf 11949 11953 13216\nf 11949 13216 13211\nf 11950 13208 13212\nf 11950 13212 11954\nf 11951 11955 13219\nf 11951 13219 13213\nf 11952 13210 13215\nf 11952 13215 11956\nf 11953 11957 13222\nf 11953 13222 13216\nf 11954 13212 13217\nf 11954 13217 11958\nf 11955 11959 13225\nf 11955 13225 13219\nf 11956 13215 13221\nf 11956 13221 11960\nf 11957 11961 13228\nf 11957 13228 13222\nf 11958 13217 13223\nf 11958 13223 11962\nf 11959 11963 13231\nf 11959 13231 13225\nf 11960 13221 13227\nf 11960 13227 11964\nf 11961 11965 13234\nf 11961 13234 13228\nf 11962 13223 13229\nf 11962 13229 11966\nf 11963 11967 13238\nf 11963 13238 13231\nf 11964 13227 13233\nf 11964 13233 11968\nf 11965 11969 13241\nf 11965 13241 13234\nf 11966 13229 13235\nf 11966 13235 11970\nf 11967 11972 13243\nf 11967 13243 13238\nf 11968 13233 13240\nf 11968 13240 11973\nf 11969 11974 13246\nf 11969 13246 13241\nf 11970 11971 11975\nf 11970 13235 13236\nf 11970 13236 11971\nf 11971 11976 11975\nf 11971 13236 13242\nf 11971 13242 13247\nf 11971 13247 11976\nf 11972 11977 13248\nf 11972 13248 13243\nf 11973 13240 13245\nf 11973 13245 11978\nf 11974 11979 13251\nf 11974 13251 13246\nf 11975 11976 11980\nf 11976 11982 11980\nf 11976 13247 13252\nf 11976 13252 11982\nf 11977 11983 13253\nf 11977 13253 13248\nf 11978 13245 13250\nf 11978 13250 11984\nf 11979 11985 13256\nf 11979 13256 13251\nf 11980 11982 11981\nf 11981 11982 11986\nf 11982 13252 11986\nf 11983 11987 13258\nf 11983 13258 13253\nf 11984 13250 13255\nf 11984 13255 11988\nf 11985 11989 13261\nf 11985 13261 13256\nf 11986 13252 13257\nf 11986 13257 11990\nf 11987 11991 13263\nf 11987 13263 13258\nf 11988 13255 13260\nf 11988 13260 11992\nf 11989 11993 13266\nf 11989 13266 13261\nf 11990 13257 13262\nf 11990 13262 11994\nf 11991 11995 13268\nf 11991 13268 13263\nf 11992 13260 13265\nf 11992 13265 11996\nf 11993 11997 13271\nf 11993 13271 13266\nf 11994 13262 13267\nf 11994 13267 11998\nf 11995 11999 13273\nf 11995 13273 13268\nf 11996 13265 13270\nf 11996 13270 12000\nf 11997 12001 13276\nf 11997 13276 13271\nf 11998 13267 13272\nf 11998 13272 12002\nf 11999 12003 13278\nf 11999 13278 13273\nf 12000 13270 13275\nf 12000 13275 12004\nf 12001 12005 13281\nf 12001 13281 13276\nf 12002 13272 13277\nf 12002 13277 12006\nf 12003 12007 13283\nf 12003 13283 13278\nf 12004 13275 13280\nf 12004 13280 12008\nf 12005 12009 13286\nf 12005 13286 13281\nf 12006 13277 13282\nf 12006 13282 12010\nf 12007 12011 13288\nf 12007 13288 13283\nf 12008 13280 13285\nf 12008 13285 12012\nf 12009 12013 13292\nf 12009 13292 13286\nf 12010 13282 13287\nf 12010 13287 12014\nf 12011 12015 13294\nf 12011 13294 13288\nf 12012 13285 13290\nf 12012 13290 12016\nf 12013 12017 13298\nf 12013 13298 13292\nf 12014 13287 13293\nf 12014 13293 12018\nf 12015 12019 13300\nf 12015 13300 13294\nf 12016 13290 13296\nf 12016 13296 12020\nf 12017 12021 13305\nf 12017 13305 13298\nf 12018 13293 13299\nf 12018 13299 12022\nf 12019 12023 13307\nf 12019 13307 13300\nf 12020 13296 13302\nf 12020 13302 12024\nf 12021 12027 13310\nf 12021 13310 13305\nf 12022 13299 13306\nf 12022 13306 12028\nf 12023 12029 13312\nf 12023 13312 13307\nf 12024 12026 12025\nf 12024 13302 13303\nf 12024 13303 12026\nf 12025 12026 12030\nf 12026 13303 13309\nf 12026 13309 12030\nf 12027 12031 13315\nf 12027 13315 13310\nf 12028 13306 13311\nf 12028 13311 12032\nf 12029 12033 13318\nf 12029 13318 13312\nf 12030 13309 13314\nf 12030 13314 12034\nf 12031 12035 13321\nf 12031 13321 13315\nf 12032 13311 13316\nf 12032 13316 12036\nf 12033 12037 13324\nf 12033 13324 13318\nf 12034 13314 13320\nf 12034 13320 12038\nf 12035 12039 13327\nf 12035 13327 13321\nf 12036 13316 13322\nf 12036 13322 12040\nf 12037 12041 13330\nf 12037 13330 13324\nf 12038 13320 13326\nf 12038 13326 12042\nf 12039 12043 13333\nf 12039 13333 13327\nf 12040 13322 13328\nf 12040 13328 12044\nf 12041 12045 13337\nf 12041 13337 13330\nf 12042 13326 13332\nf 12042 13332 12046\nf 12043 12047 13340\nf 12043 13340 13333\nf 12044 13328 13334\nf 12044 13334 12048\nf 12045 12050 13342\nf 12045 13342 13337\nf 12046 13332 13339\nf 12046 13339 12051\nf 12047 12053 13345\nf 12047 13345 13340\nf 12048 12049 12054\nf 12048 13334 13335\nf 12048 13335 12049\nf 12049 12055 12054\nf 12049 13335 13341\nf 12049 13341 13346\nf 12049 13346 12055\nf 12050 12056 13347\nf 12050 13347 13342\nf 12051 13339 13344\nf 12051 13344 13349\nf 12051 13349 12052\nf 12052 12058 12057\nf 12052 13349 12058\nf 12053 12059 13351\nf 12053 13351 13345\nf 12054 12055 12060\nf 12055 12061 12060\nf 12055 13346 13353\nf 12055 13353 12061\nf 12056 12062 13354\nf 12056 13354 13347\nf 12057 12058 13356\nf 12057 13356 12063\nf 12058 13349 13350\nf 12058 13350 13356\nf 12059 12064 13358\nf 12059 13358 13351\nf 12060 12061 12065\nf 12061 12066 12065\nf 12061 13353 13361\nf 12061 13361 12066\nf 12062 12067 13362\nf 12062 13362 13354\nf 12063 13356 12068\nf 12064 12069 13358\nf 12065 12066 12071\nf 12066 12073 12071\nf 12066 13361 13367\nf 12066 13367 12073\nf 12067 12074 13368\nf 12067 13368 13362\nf 12068 13356 13364\nf 12068 13364 12075\nf 12069 12070 13358\nf 12069 12076 12077\nf 12069 12077 12070\nf 12070 12077 13366\nf 12070 13359 13358\nf 12070 13366 13359\nf 12071 12073 12072\nf 12072 12073 12078\nf 12073 13367 12078\nf 12074 12079 13374\nf 12074 13374 13368\nf 12075 13364 13370\nf 12075 13370 12080\nf 12076 12081 12082\nf 12076 12082 12077\nf 12077 12082 13372\nf 12077 13372 13366\nf 12078 13367 13373\nf 12078 13373 12083\nf 12079 12084 13379\nf 12079 13379 13374\nf 12080 13370 13376\nf 12080 13376 12085\nf 12081 12087 12088\nf 12081 12088 12082\nf 12082 12088 13377\nf 12082 13377 13372\nf 12083 13373 13378\nf 12083 13378 12089\nf 12084 12091 13386\nf 12084 13386 13379\nf 12085 13376 13381\nf 12085 13381 12086\nf 12086 13381 13382\nf 12086 13382 13388\nf 12086 13388 12093\nf 12087 12094 13390\nf 12087 13384 12088\nf 12087 13390 13384\nf 12088 13383 13377\nf 12088 13384 13383\nf 12089 13378 13385\nf 12089 13385 13392\nf 12089 13392 12090\nf 12090 12096 12095\nf 12090 13392 12096\nf 12091 12092 12098\nf 12091 12098 13393\nf 12091 13393 13386\nf 12092 12097 12098\nf 12093 13388 12100\nf 12094 12102 13398\nf 12094 13398 13390\nf 12095 12096 12103\nf 12096 12104 12103\nf 12096 13392 13399\nf 12096 13399 12104\nf 12097 12099 13395\nf 12097 13395 12098\nf 12098 13395 13393\nf 12099 12105 12106\nf 12099 12106 13402\nf 12099 13402 13395\nf 12100 13388 13396\nf 12100 13396 13407\nf 12100 13407 12101\nf 12101 12124 12122\nf 12101 13407 12124\nf 12102 12125 13410\nf 12102 13410 13398\nf 12103 12104 13411\nf 12103 13411 12126\nf 12104 13399 13400\nf 12104 13400 13411\nf 12105 12107 13404\nf 12105 13404 12106\nf 12106 13404 13402\nf 12107 12108 13405\nf 12107 13405 13404\nf 12108 12109 12128\nf 12108 12127 13405\nf 12108 12128 12127\nf 12109 12110 12129\nf 12109 12129 12128\nf 12110 12111 12130\nf 12110 12130 12129\nf 12111 12112 12132\nf 12111 12132 12130\nf 12112 12131 12132\nf 12113 12114 12160\nf 12113 12159 12157\nf 12113 12160 12159\nf 12114 12115 12161\nf 12114 12161 12160\nf 12115 12116 12162\nf 12115 12162 12161\nf 12116 12117 12163\nf 12116 12163 12162\nf 12117 12118 12164\nf 12117 12164 12163\nf 12118 12119 12166\nf 12118 12166 12164\nf 12119 12165 12166\nf 12120 12121 12201\nf 12120 12200 12198\nf 12120 12201 12200\nf 12121 12123 13406\nf 12121 13406 13471\nf 12121 13471 12201\nf 12122 12124 12123\nf 12123 12124 13408\nf 12123 13408 13406\nf 12124 13407 13408\nf 12125 12202 13475\nf 12125 13475 13410\nf 12126 13411 12203\nf 12127 12128 13416\nf 12127 13414 13405\nf 12127 13416 13414\nf 12128 12129 13417\nf 12128 13417 13416\nf 12129 12130 13418\nf 12129 13418 13417\nf 12130 12132 13419\nf 12130 13419 13418\nf 12131 12133 13420\nf 12131 13420 12132\nf 12132 13420 13419\nf 12133 12134 12205\nf 12133 12204 13483\nf 12133 12205 12204\nf 12133 13483 13420\nf 12134 12135 12206\nf 12134 12206 12205\nf 12135 12136 12207\nf 12135 12207 12206\nf 12136 12137 12208\nf 12136 12208 12207\nf 12137 12138 12209\nf 12137 12209 12208\nf 12138 12139 12210\nf 12138 12210 12209\nf 12139 12140 12211\nf 12139 12211 12210\nf 12140 12141 12212\nf 12140 12212 12211\nf 12141 12142 12213\nf 12141 12213 12212\nf 12142 12143 12214\nf 12142 12214 12213\nf 12143 12144 13421\nf 12143 13421 13495\nf 12143 13495 12214\nf 12144 12145 13421\nf 12145 12146 13422\nf 12145 13422 13421\nf 12146 12147 13423\nf 12146 13423 13422\nf 12147 12148 13424\nf 12147 13424 13423\nf 12148 12149 13425\nf 12148 13425 13424\nf 12149 12150 13426\nf 12149 13426 13425\nf 12150 12151 13427\nf 12150 13427 13426\nf 12151 12152 13428\nf 12151 13428 13427\nf 12152 12153 13429\nf 12152 13429 13428\nf 12153 12154 13430\nf 12153 13430 13429\nf 12154 12155 13431\nf 12154 13431 13430\nf 12155 12156 13432\nf 12155 13432 13431\nf 12156 12158 13433\nf 12156 13433 13432\nf 12157 12159 12158\nf 12158 12159 13435\nf 12158 13434 13433\nf 12158 13435 13434\nf 12159 12160 13435\nf 12160 12161 13436\nf 12160 13436 13435\nf 12161 12162 13437\nf 12161 13437 13436\nf 12162 12163 13438\nf 12162 13438 13437\nf 12163 12164 13439\nf 12163 13439 13438\nf 12164 12166 13440\nf 12164 13440 13439\nf 12165 12167 13441\nf 12165 13441 12166\nf 12166 13441 13440\nf 12167 12168 13442\nf 12167 13442 13441\nf 12168 12169 13443\nf 12168 13443 13442\nf 12169 12170 13444\nf 12169 13444 13443\nf 12170 12171 13445\nf 12170 13445 13444\nf 12171 12172 13446\nf 12171 13446 13445\nf 12172 12173 13447\nf 12172 13447 13446\nf 12173 12174 13448\nf 12173 13448 13447\nf 12174 12175 13449\nf 12174 13449 13448\nf 12175 12176 13450\nf 12175 13450 13449\nf 12176 12177 13451\nf 12176 13451 13450\nf 12177 12178 13452\nf 12177 13452 13451\nf 12178 12179 13453\nf 12178 13453 13452\nf 12179 12180 13454\nf 12179 13454 13453\nf 12180 12181 13455\nf 12180 13455 13454\nf 12181 12182 13456\nf 12181 13456 13455\nf 12182 12183 13457\nf 12182 13457 13456\nf 12183 12184 13458\nf 12183 13458 13457\nf 12184 12185 13459\nf 12184 13459 13458\nf 12185 12186 13460\nf 12185 13460 13459\nf 12186 12187 12216\nf 12186 12215 13460\nf 12186 12216 12215\nf 12187 12188 13461\nf 12187 13461 13539\nf 12187 13539 12216\nf 12188 12189 13461\nf 12189 12190 13462\nf 12189 13462 13461\nf 12190 12191 13463\nf 12190 13463 13462\nf 12191 12192 13464\nf 12191 13464 13463\nf 12192 12193 12218\nf 12192 12217 13464\nf 12192 12218 12217\nf 12193 12194 13465\nf 12193 13465 13547\nf 12193 13547 12218\nf 12194 12195 13465\nf 12195 12196 13466\nf 12195 13466 13465\nf 12196 12197 13467\nf 12196 13467 13466\nf 12197 12199 13468\nf 12197 13468 13467\nf 12198 12200 12199\nf 12199 12200 13470\nf 12199 13469 13468\nf 12199 13470 13469\nf 12200 12201 13470\nf 12201 13471 13472\nf 12201 13472 13470\nf 12202 12219 13557\nf 12202 13557 13475\nf 12203 13411 13476\nf 12203 13476 12220\nf 12204 12205 13485\nf 12204 13485 13483\nf 12205 12206 13486\nf 12205 13486 13485\nf 12206 12207 13487\nf 12206 13487 13486\nf 12207 12208 13488\nf 12207 13488 13487\nf 12208 12209 13489\nf 12208 13489 13488\nf 12209 12210 13490\nf 12209 13490 13489\nf 12210 12211 13491\nf 12210 13491 13490\nf 12211 12212 13492\nf 12211 13492 13491\nf 12212 12213 13493\nf 12212 13493 13492\nf 12213 12214 13494\nf 12213 13494 13493\nf 12214 13495 13496\nf 12214 13496 13494\nf 12215 12216 13538\nf 12215 13536 13460\nf 12215 13538 13536\nf 12216 13539 13540\nf 12216 13540 13538\nf 12217 12218 13546\nf 12217 13544 13464\nf 12217 13546 13544\nf 12218 13547 13548\nf 12218 13548 13546\nf 12219 12221 13619\nf 12219 13619 13557\nf 12220 13476 13558\nf 12220 13558 12222\nf 12221 12223 13666\nf 12221 13666 13619\nf 12222 13558 13620\nf 12222 13620 12224\nf 12223 12225 13703\nf 12223 13703 13666\nf 12224 13620 13667\nf 12224 13667 12226\nf 12225 12227 13724\nf 12225 13724 13703\nf 12226 13667 13704\nf 12226 13704 12228\nf 12227 12229 13727\nf 12227 13727 13724\nf 12228 13704 13725\nf 12228 13725 12230\nf 12229 12231 13730\nf 12229 13730 13727\nf 12230 13725 13728\nf 12230 13728 12232\nf 12231 12233 13733\nf 12231 13733 13730\nf 12232 13728 13731\nf 12232 13731 12234\nf 12233 12235 13737\nf 12233 13737 13733\nf 12234 13731 13734\nf 12234 13734 12236\nf 12235 12238 13739\nf 12235 13739 13737\nf 12236 12237 12239\nf 12236 13734 13735\nf 12236 13735 12237\nf 12237 12240 12239\nf 12237 13735 13738\nf 12237 13738 13740\nf 12237 13740 12240\nf 12238 12241 13741\nf 12238 13741 13739\nf 12239 12240 12242\nf 12240 12243 12242\nf 12240 13740 13742\nf 12240 13742 12243\nf 12241 12244 13743\nf 12241 13743 13741\nf 12242 12243 12245\nf 12243 12246 12245\nf 12243 13742 13744\nf 12243 13744 12246\nf 12244 12247 13745\nf 12244 13745 13743\nf 12245 12246 12248\nf 12246 12249 12248\nf 12246 13744 13746\nf 12246 13746 12249\nf 12247 12250 13747\nf 12247 13747 13745\nf 12248 12249 12252\nf 12249 12254 12252\nf 12249 13746 13750\nf 12249 13750 12254\nf 12250 12251 13747\nf 12251 12255 13751\nf 12251 13748 13747\nf 12251 13751 13748\nf 12252 12254 12253\nf 12253 12254 12257\nf 12254 13750 12257\nf 12255 12256 13751\nf 12256 12259 13755\nf 12256 13752 13751\nf 12256 13755 13752\nf 12257 13750 13753\nf 12257 13753 12261\nf 12258 12286 13804\nf 12258 13754 13756\nf 12258 13756 12260\nf 12258 13804 13754\nf 12259 12260 13755\nf 12260 13756 13755\nf 12261 13753 13757\nf 12261 13757 12288\nf 12262 12353 12355\nf 12262 12355 13771\nf 12262 13771 13772\nf 12262 13772 13773\nf 12262 13773 12263\nf 12263 13773 13774\nf 12263 13774 12356\nf 12264 12371 12373\nf 12264 12373 13781\nf 12264 13781 13782\nf 12264 13782 13783\nf 12264 13783 12265\nf 12265 13783 13784\nf 12265 13784 12266\nf 12266 13784 13785\nf 12266 13785 12267\nf 12267 13785 13786\nf 12267 13786 12268\nf 12268 13786 13787\nf 12268 13787 12269\nf 12269 13787 13788\nf 12269 13788 12270\nf 12270 13788 13789\nf 12270 13789 12271\nf 12271 13789 13790\nf 12271 13790 12272\nf 12272 13790 13791\nf 12272 13791 12273\nf 12273 13791 13792\nf 12273 13792 12274\nf 12274 13792 13793\nf 12274 13793 12275\nf 12275 13793 13794\nf 12275 13794 12276\nf 12276 13794 13795\nf 12276 13795 12277\nf 12277 13795 13796\nf 12277 13796 12278\nf 12278 13796 13797\nf 12278 13797 12279\nf 12279 13797 13798\nf 12279 13798 12280\nf 12280 13798 13799\nf 12280 13799 12281\nf 12281 13799 13800\nf 12281 13800 12282\nf 12282 13800 13801\nf 12282 13801 12283\nf 12283 13801 13802\nf 12283 13802 12284\nf 12284 13802 13803\nf 12284 13803 12285\nf 12285 13803 13805\nf 12285 13805 12287\nf 12286 12287 13804\nf 12287 13805 13804\nf 12288 13757 13806\nf 12288 13806 12374\nf 12289 12376 13876\nf 12289 13807 13808\nf 12289 13808 12290\nf 12289 13876 13807\nf 12290 13808 13809\nf 12290 13809 12291\nf 12291 13809 13810\nf 12291 13810 12292\nf 12292 13810 13811\nf 12292 13811 12293\nf 12293 13811 13812\nf 12293 13812 12294\nf 12294 13812 13813\nf 12294 13813 12295\nf 12295 13813 13814\nf 12295 13814 12296\nf 12296 13814 13815\nf 12296 13815 12297\nf 12297 13815 13816\nf 12297 13816 12298\nf 12298 13816 13817\nf 12298 13817 12299\nf 12299 13817 13818\nf 12299 13818 12300\nf 12300 13818 13819\nf 12300 13819 12301\nf 12301 13819 13820\nf 12301 13820 12302\nf 12302 13820 13821\nf 12302 13821 12303\nf 12303 13821 13822\nf 12303 13822 12304\nf 12304 13822 13823\nf 12304 13823 12305\nf 12305 13823 13824\nf 12305 13824 12306\nf 12306 13824 13825\nf 12306 13825 12307\nf 12307 13825 13826\nf 12307 13826 12308\nf 12308 13826 13827\nf 12308 13827 12309\nf 12309 13827 13828\nf 12309 13828 12310\nf 12310 13828 13829\nf 12310 13829 12311\nf 12311 13829 13830\nf 12311 13830 12312\nf 12312 13830 13831\nf 12312 13831 12313\nf 12313 13831 13832\nf 12313 13832 12314\nf 12314 13832 13833\nf 12314 13833 12315\nf 12315 13833 13834\nf 12315 13834 12316\nf 12316 13834 13835\nf 12316 13835 12317\nf 12317 13835 13836\nf 12317 13836 12318\nf 12318 13836 13837\nf 12318 13837 12319\nf 12319 13837 13838\nf 12319 13838 12320\nf 12320 13838 13839\nf 12320 13839 12321\nf 12321 13839 13840\nf 12321 13840 12322\nf 12322 13840 13841\nf 12322 13841 12323\nf 12323 13841 13842\nf 12323 13842 12324\nf 12324 13842 13844\nf 12324 13844 12325\nf 12325 13844 12326\nf 12326 12327 12328\nf 12326 13843 12327\nf 12326 13844 13843\nf 12327 12329 12328\nf 12327 13758 13759\nf 12327 13759 12329\nf 12327 13843 13758\nf 12328 12329 12330\nf 12329 12331 12330\nf 12329 13759 13760\nf 12329 13760 12331\nf 12330 12331 12332\nf 12331 12333 12332\nf 12331 13760 13761\nf 12331 13761 12333\nf 12332 12333 12334\nf 12333 12335 12334\nf 12333 13761 13762\nf 12333 13762 12335\nf 12334 12335 12336\nf 12335 12337 12336\nf 12335 13762 13763\nf 12335 13763 12337\nf 12336 12337 12338\nf 12337 12339 12338\nf 12337 13763 13764\nf 12337 13764 12339\nf 12338 12339 12340\nf 12339 12341 12340\nf 12339 13764 13765\nf 12339 13765 12341\nf 12340 12341 12342\nf 12341 12343 12342\nf 12341 13765 13766\nf 12341 13766 12343\nf 12342 12343 12344\nf 12343 12345 12344\nf 12343 13766 13767\nf 12343 13767 12345\nf 12344 12345 12346\nf 12345 12347 12346\nf 12345 13767 13768\nf 12345 13768 12347\nf 12346 12347 12348\nf 12347 12349 12348\nf 12347 13768 13769\nf 12347 13769 12349\nf 12348 12349 12350\nf 12349 12351 12350\nf 12349 13769 13770\nf 12349 13770 12351\nf 12350 12351 13860\nf 12350 13860 12352\nf 12351 13770 13857\nf 12351 13857 13860\nf 12352 13860 12354\nf 12353 12354 12355\nf 12354 13859 12355\nf 12354 13860 13859\nf 12355 13859 13771\nf 12356 12358 12357\nf 12356 13774 12358\nf 12357 12358 12359\nf 12358 12360 12359\nf 12358 13774 13775\nf 12358 13775 12360\nf 12359 12360 12361\nf 12360 12362 12361\nf 12360 13775 13776\nf 12360 13776 12362\nf 12361 12362 12363\nf 12362 12364 12363\nf 12362 13776 13777\nf 12362 13777 12364\nf 12363 12364 12365\nf 12364 12366 12365\nf 12364 13777 13778\nf 12364 13778 12366\nf 12365 12366 12367\nf 12366 12368 12367\nf 12366 13778 13779\nf 12366 13779 12368\nf 12367 12368 12369\nf 12368 12370 12369\nf 12368 13779 13780\nf 12368 13780 12370\nf 12369 12370 12372\nf 12370 12373 12372\nf 12370 13780 13781\nf 12370 13781 12373\nf 12371 12372 12373\nf 12374 13806 13874\nf 12374 13874 12378\nf 12375 12379 13880\nf 12375 13875 13877\nf 12375 13877 12377\nf 12375 13880 13875\nf 12376 12377 13876\nf 12377 13877 13876\nf 12378 13874 13879\nf 12378 13879 12381\nf 12379 12380 13880\nf 12380 12382 13885\nf 12380 13881 13880\nf 12380 13885 13881\nf 12381 13879 13883\nf 12381 13883 12383\nf 12382 12386 13885\nf 12383 12385 12384\nf 12383 13883 12385\nf 12384 12385 13888\nf 12384 13888 12389\nf 12385 13883 13884\nf 12385 13884 13888\nf 12386 12387 12388\nf 12386 12388 13885\nf 12387 12390 13890\nf 12387 13890 12388\nf 12388 13886 13885\nf 12388 13890 13886\nf 12389 13888 13891\nf 12389 13891 12391\nf 12390 12392 13897\nf 12390 13893 13890\nf 12390 13897 13893\nf 12391 13891 13895\nf 12391 13895 12393\nf 12392 12394 13901\nf 12392 13901 13897\nf 12393 13895 13899\nf 12393 13899 12395\nf 12394 12396 13905\nf 12394 13905 13901\nf 12395 13899 13903\nf 12395 13903 12397\nf 12396 12398 13909\nf 12396 13909 13905\nf 12397 13903 13907\nf 12397 13907 12399\nf 12398 12400 13913\nf 12398 13913 13909\nf 12399 13907 13911\nf 12399 13911 12401\nf 12400 12402 13916\nf 12400 13916 13913\nf 12401 13911 13915\nf 12401 13915 12403\nf 12402 12404 13919\nf 12402 13919 13916\nf 12403 13915 13918\nf 12403 13918 12405\nf 12404 12406 13922\nf 12404 13922 13919\nf 12405 13918 13921\nf 12405 13921 12407\nf 12406 12408 13925\nf 12406 13925 13922\nf 12407 13921 13924\nf 12407 13924 12409\nf 12408 12410 13928\nf 12408 13928 13925\nf 12409 13924 13927\nf 12409 13927 12411\nf 12410 12412 13931\nf 12410 13931 13928\nf 12411 13927 13930\nf 12411 13930 12413\nf 12412 12414 13933\nf 12412 13933 13931\nf 12413 13930 13932\nf 12413 13932 12415\nf 12414 12416 13935\nf 12414 13935 13933\nf 12415 13932 13934\nf 12415 13934 12417\nf 12416 12419 13937\nf 12416 13937 13935\nf 12417 13934 13936\nf 12417 13936 13938\nf 12417 13938 12418\nf 12418 12421 12420\nf 12418 13938 12421\nf 12419 12422 13939\nf 12419 13939 13937\nf 12420 12421 12423\nf 12421 12424 12423\nf 12421 13938 13940\nf 12421 13940 12424\nf 12422 12425 13942\nf 12422 13942 13939\nf 12423 12424 13943\nf 12423 13943 12426\nf 12424 13940 13941\nf 12424 13941 13943\nf 12425 12427 13945\nf 12425 13945 13942\nf 12426 13943 12428\nf 12427 12429 13948\nf 12427 13948 13945\nf 12428 13943 13946\nf 12428 13946 12430\nf 12429 12431 13951\nf 12429 13951 13948\nf 12430 13946 13949\nf 12430 13949 12432\nf 12431 12433 13954\nf 12431 13954 13951\nf 12432 13949 13952\nf 12432 13952 12434\nf 12433 12435 13957\nf 12433 13957 13954\nf 12434 13952 13955\nf 12434 13955 12436\nf 12435 12437 13960\nf 12435 13960 13957\nf 12436 13955 13958\nf 12436 13958 12438\nf 12437 12439 13963\nf 12437 13963 13960\nf 12438 13958 13961\nf 12438 13961 12440\nf 12439 12441 13966\nf 12439 13966 13963\nf 12440 13961 13964\nf 12440 13964 12442\nf 12441 12443 13970\nf 12441 13970 13966\nf 12442 13964 13968\nf 12442 13968 12445\nf 12443 12444 13970\nf 12444 12446 13975\nf 12444 13971 13970\nf 12444 13975 13971\nf 12445 13968 13973\nf 12445 13973 12447\nf 12446 12448 13978\nf 12446 13978 13975\nf 12447 13973 13976\nf 12447 13976 12449\nf 12448 12450 13981\nf 12448 13981 13978\nf 12449 13976 13979\nf 12449 13979 12451\nf 12450 12452 13984\nf 12450 13984 13981\nf 12451 13979 13982\nf 12451 13982 12453\nf 12452 12454 13988\nf 12452 13988 13984\nf 12453 13982 13986\nf 12453 13986 12455\nf 12454 12456 13992\nf 12454 13992 13988\nf 12455 13986 13990\nf 12455 13990 12457\nf 12456 12459 13996\nf 12456 13996 13992\nf 12457 13990 13994\nf 12457 13994 13999\nf 12457 13999 12458\nf 12458 12461 12460\nf 12458 13999 12461\nf 12459 12462 13996\nf 12460 12461 12464\nf 12461 12465 12464\nf 12461 13999 14002\nf 12461 14002 12465\nf 12462 12463 13996\nf 12462 12466 12467\nf 12462 12467 12463\nf 12463 12467 14001\nf 12463 13997 13996\nf 12463 14001 13997\nf 12464 12465 12468\nf 12465 12469 12468\nf 12465 14002 14005\nf 12465 14005 12469\nf 12466 12470 12471\nf 12466 12471 12467\nf 12467 12471 14004\nf 12467 14004 14001\nf 12468 12469 12472\nf 12469 12473 12472\nf 12469 14005 14008\nf 12469 14008 12473\nf 12470 12474 12476\nf 12470 12476 12471\nf 12471 12476 14007\nf 12471 14007 14004\nf 12472 12473 12477\nf 12473 12478 12477\nf 12473 14008 14010\nf 12473 14010 12478\nf 12474 12475 12476\nf 12475 12479 14009\nf 12475 14009 12476\nf 12476 14009 14007\nf 12477 12478 12480\nf 12478 12481 12480\nf 12478 14010 14012\nf 12478 14012 12481\nf 12479 12482 14013\nf 12479 14011 14009\nf 12479 14013 14011\nf 12480 12481 12483\nf 12481 12484 12483\nf 12481 14012 14014\nf 12481 14014 12484\nf 12482 12485 14015\nf 12482 14015 14013\nf 12483 12484 12486\nf 12484 12487 12486\nf 12484 14014 14016\nf 12484 14016 12487\nf 12485 12488 14017\nf 12485 14017 14015\nf 12486 12487 12489\nf 12487 12490 12489\nf 12487 14016 14018\nf 12487 14018 12490\nf 12488 12491 14019\nf 12488 14019 14017\nf 12489 12490 12492\nf 12490 12493 12492\nf 12490 14018 14020\nf 12490 14020 12493\nf 12491 12494 14021\nf 12491 14021 14019\nf 12492 12493 12495\nf 12493 12496 12495\nf 12493 14020 14022\nf 12493 14022 12496\nf 12494 12497 14023\nf 12494 14023 14021\nf 12495 12496 12498\nf 12496 12499 12498\nf 12496 14022 14025\nf 12496 14025 12499\nf 12497 12500 14027\nf 12497 14027 14023\nf 12498 12499 14029\nf 12498 14029 12501\nf 12499 14025 14026\nf 12499 14026 14029\nf 12500 12502 14031\nf 12500 14031 14027\nf 12501 14029 12503\nf 12502 12504 14035\nf 12502 14035 14031\nf 12503 14029 14033\nf 12503 14033 12505\nf 12504 12506 14039\nf 12504 14039 14035\nf 12505 14033 14037\nf 12505 14037 12507\nf 12506 12508 14043\nf 12506 14043 14039\nf 12507 14037 14041\nf 12507 14041 12509\nf 12508 12510 14047\nf 12508 14047 14043\nf 12509 14041 14045\nf 12509 14045 12511\nf 12510 12512 14051\nf 12510 14051 14047\nf 12511 14045 14049\nf 12511 14049 12513\nf 12512 12514 14055\nf 12512 14055 14051\nf 12513 14049 14053\nf 12513 14053 12515\nf 12514 12517 14055\nf 12515 14053 14058\nf 12515 14058 14061\nf 12515 14061 12516\nf 12516 12520 12519\nf 12516 14061 12520\nf 12517 12518 14055\nf 12517 12521 12522\nf 12517 12522 12518\nf 12518 12522 14060\nf 12518 14056 14055\nf 12518 14060 14056\nf 12519 12520 12523\nf 12520 12524 12523\nf 12520 14061 14064\nf 12520 14064 12524\nf 12521 12525 12526\nf 12521 12526 12522\nf 12522 12526 14063\nf 12522 14063 14060\nf 12523 12524 12527\nf 12524 12528 12527\nf 12524 14064 14066\nf 12524 14066 12528\nf 12525 12529 12530\nf 12525 12530 12526\nf 12526 12530 14065\nf 12526 14065 14063\nf 12527 12528 12531\nf 12528 12532 12531\nf 12528 14066 14068\nf 12528 14068 12532\nf 12529 12533 12534\nf 12529 12534 12530\nf 12530 12534 14067\nf 12530 14067 14065\nf 12531 12532 12535\nf 12532 12536 12535\nf 12532 14068 14071\nf 12532 14071 12536\nf 12533 12537 12539\nf 12533 12539 12534\nf 12534 12539 14069\nf 12534 14069 14067\nf 12535 12536 12540\nf 12536 12541 12540\nf 12536 14071 14074\nf 12536 14074 12541\nf 12537 12538 12539\nf 12538 12542 14072\nf 12538 14072 12539\nf 12539 14072 14069\nf 12540 12541 14078\nf 12540 14078 12543\nf 12541 14074 14075\nf 12541 14075 14078\nf 12542 12544 14080\nf 12542 14076 14072\nf 12542 14080 14076\nf 12543 14078 12545\nf 12544 12546 14084\nf 12544 14084 14080\nf 12545 14078 14082\nf 12545 14082 12547\nf 12546 12548 14088\nf 12546 14088 14084\nf 12547 14082 14086\nf 12547 14086 12549\nf 12548 12550 14092\nf 12548 14092 14088\nf 12549 14086 14090\nf 12549 14090 12551\nf 12550 12552 14096\nf 12550 14096 14092\nf 12551 14090 14094\nf 12551 14094 12553\nf 12552 12555 14096\nf 12553 14094 14099\nf 12553 14099 14102\nf 12553 14102 12554\nf 12554 12558 12557\nf 12554 14102 12558\nf 12555 12556 14096\nf 12555 12559 12560\nf 12555 12560 12556\nf 12556 12560 14101\nf 12556 14097 14096\nf 12556 14101 14097\nf 12557 12558 12561\nf 12558 12562 12561\nf 12558 14102 14105\nf 12558 14105 12562\nf 12559 12563 12564\nf 12559 12564 12560\nf 12560 12564 14103\nf 12560 14103 14101\nf 12561 12562 12565\nf 12562 12566 12565\nf 12562 14105 14107\nf 12562 14107 12566\nf 12563 12567 12569\nf 12563 12569 12564\nf 12564 12569 14106\nf 12564 14106 14103\nf 12565 12566 12570\nf 12566 12571 12570\nf 12566 14107 14109\nf 12566 14109 12571\nf 12567 12568 12569\nf 12568 12572 14108\nf 12568 14108 12569\nf 12569 14108 14106\nf 12570 12571 12573\nf 12571 12574 12573\nf 12571 14109 14111\nf 12571 14111 12574\nf 12572 12575 14112\nf 12572 14110 14108\nf 12572 14112 14110\nf 12573 12574 12576\nf 12574 12577 12576\nf 12574 14111 14113\nf 12574 14113 12577\nf 12575 12578 14114\nf 12575 14114 14112\nf 12576 12577 12579\nf 12577 12580 12579\nf 12577 14113 14115\nf 12577 14115 12580\nf 12578 12581 14117\nf 12578 14117 14114\nf 12579 12580 14119\nf 12579 14119 12582\nf 12580 14115 14116\nf 12580 14116 14119\nf 12581 12583 14121\nf 12581 14121 14117\nf 12582 14119 12584\nf 12583 12585 14125\nf 12583 14125 14121\nf 12584 14119 14123\nf 12584 14123 12586\nf 12585 12587 14129\nf 12585 14129 14125\nf 12586 14123 14127\nf 12586 14127 12588\nf 12587 12589 14132\nf 12587 14132 14129\nf 12588 14127 14130\nf 12588 14130 12590\nf 12589 12591 14136\nf 12589 14136 14132\nf 12590 14130 14134\nf 12590 14134 12592\nf 12591 12593 14136\nf 12592 14134 14139\nf 12592 14139 12595\nf 12593 12594 14136\nf 12593 12596 12598\nf 12593 12598 12594\nf 12594 12598 14141\nf 12594 14137 14136\nf 12594 14141 14137\nf 12595 14139 14142\nf 12595 14142 12599\nf 12596 12597 12598\nf 12597 12600 14144\nf 12597 14144 12598\nf 12598 14144 14141\nf 12599 14142 14145\nf 12599 14145 12601\nf 12600 12602 14151\nf 12600 14147 14144\nf 12600 14151 14147\nf 12601 14145 14148\nf 12601 14148 12603\nf 12602 12605 14151\nf 12603 12604 12607\nf 12603 14148 14149\nf 12603 14149 12604\nf 12604 12608 12607\nf 12604 14149 14153\nf 12604 14153 14155\nf 12604 14155 12608\nf 12605 12606 14151\nf 12605 12609 12611\nf 12605 12611 12606\nf 12606 12611 14154\nf 12606 14152 14151\nf 12606 14154 14152\nf 12607 12608 12612\nf 12608 12613 12612\nf 12608 14155 14157\nf 12608 14157 12613\nf 12609 12610 12611\nf 12610 12614 14156\nf 12610 14156 12611\nf 12611 14156 14154\nf 12612 12613 12615\nf 12613 12616 12615\nf 12613 14157 14161\nf 12613 14161 12616\nf 12614 12617 14158\nf 12614 14158 14156\nf 12615 12616 12620\nf 12616 12621 12620\nf 12616 14161 14163\nf 12616 14163 12621\nf 12617 12618 12619\nf 12617 12619 14158\nf 12618 12622 14162\nf 12618 14162 12619\nf 12619 14159 14158\nf 12619 14162 14159\nf 12620 12621 12624\nf 12621 12625 12624\nf 12621 14163 14167\nf 12621 14167 12625\nf 12622 12623 14164\nf 12622 14164 14162\nf 12623 12626 14168\nf 12623 14165 14164\nf 12623 14168 14165\nf 12624 12625 12627\nf 12625 12628 12627\nf 12625 14167 14171\nf 12625 14171 12628\nf 12626 12629 14168\nf 12627 12628 12631\nf 12628 12632 12631\nf 12628 14171 14173\nf 12628 14173 12632\nf 12629 12630 14168\nf 12629 12633 12635\nf 12629 12635 12630\nf 12630 12635 14172\nf 12630 14169 14168\nf 12630 14172 14169\nf 12631 12632 12636\nf 12632 12637 12636\nf 12632 14173 14177\nf 12632 14177 12637\nf 12633 12634 12635\nf 12634 12638 12639\nf 12634 12639 14175\nf 12634 14175 12635\nf 12635 14174 14172\nf 12635 14175 14174\nf 12636 12637 14181\nf 12636 14181 12640\nf 12637 14177 14178\nf 12637 14178 14181\nf 12638 12641 12643\nf 12638 12643 12639\nf 12639 12643 14179\nf 12639 14179 14175\nf 12640 14181 12644\nf 12641 12642 12643\nf 12642 12646 14183\nf 12642 14183 12643\nf 12643 14183 14179\nf 12644 14181 14185\nf 12644 14185 14190\nf 12644 14190 12645\nf 12645 12648 12647\nf 12645 14190 12648\nf 12646 12649 14187\nf 12646 14187 14183\nf 12647 12648 12651\nf 12648 12653 12651\nf 12648 14190 14194\nf 12648 14194 12653\nf 12649 12650 14187\nf 12649 12654 14195\nf 12649 14193 12650\nf 12649 14195 14193\nf 12650 14188 14187\nf 12650 14191 14188\nf 12650 14193 14191\nf 12651 12653 12652\nf 12652 12653 12655\nf 12653 14194 12655\nf 12654 12656 14200\nf 12654 14200 14195\nf 12655 14194 14197\nf 12655 14197 12657\nf 12656 12663 14200\nf 12657 12659 12658\nf 12657 14197 14198\nf 12657 14198 12659\nf 12658 12659 12660\nf 12659 12661 12660\nf 12659 14198 14199\nf 12659 14199 12661\nf 12660 12661 14204\nf 12660 14204 12662\nf 12661 14199 14203\nf 12661 14203 14204\nf 12662 14204 14206\nf 12662 14206 12666\nf 12663 12664 12665\nf 12663 12665 14200\nf 12664 12669 14207\nf 12664 14207 12665\nf 12665 14201 14200\nf 12665 14207 14201\nf 12666 12668 12667\nf 12666 14206 12668\nf 12667 12668 14210\nf 12667 14210 12670\nf 12668 14206 14208\nf 12668 14208 14210\nf 12669 12670 14209\nf 12669 14209 14207\nf 12670 14210 14209\nf 12671 12689 12690\nf 12671 12690 12687\nf 12672 12673 14213\nf 12672 12696 12694\nf 12672 14212 12696\nf 12672 14213 14212\nf 12673 12674 14214\nf 12673 14214 14213\nf 12674 12675 14215\nf 12674 14215 14214\nf 12675 12676 14216\nf 12675 14216 14215\nf 12676 12677 14217\nf 12676 14217 14216\nf 12677 12678 14218\nf 12677 14218 14217\nf 12678 12679 14219\nf 12678 14219 14218\nf 12679 12680 14220\nf 12679 14220 14219\nf 12680 12697 12698\nf 12680 12698 14220\nf 12681 12682 14221\nf 12681 14221 14238\nf 12681 14238 12702\nf 12682 12683 14222\nf 12682 14222 14221\nf 12683 12684 14223\nf 12683 14223 14222\nf 12684 12685 14224\nf 12684 14224 14223\nf 12685 12686 14225\nf 12685 14225 14224\nf 12686 12688 14226\nf 12686 14226 14225\nf 12687 12690 12688\nf 12688 12690 14228\nf 12688 14227 14226\nf 12688 14228 14227\nf 12689 12691 14228\nf 12689 14228 12690\nf 12691 12692 14229\nf 12691 14229 14228\nf 12692 12693 14230\nf 12692 14230 14229\nf 12693 12704 12705\nf 12693 12705 14230\nf 12694 12696 12695\nf 12695 12696 14231\nf 12695 14231 12707\nf 12696 14212 14231\nf 12697 12699 14236\nf 12697 14236 12698\nf 12698 14234 14220\nf 12698 14236 14234\nf 12699 12700 14237\nf 12699 14237 14236\nf 12700 12701 12711\nf 12700 12709 14237\nf 12700 12711 12709\nf 12701 12710 12711\nf 12702 14238 12703\nf 12703 14238 14239\nf 12703 14239 14250\nf 12703 14250 12713\nf 12704 12706 14242\nf 12704 14242 12705\nf 12705 14241 14230\nf 12705 14242 14241\nf 12706 12714 12715\nf 12706 12715 14252\nf 12706 14252 14242\nf 12707 14231 14243\nf 12707 14243 12708\nf 12708 14243 14244\nf 12708 14244 14255\nf 12708 14255 12716\nf 12709 12711 14247\nf 12709 14245 14237\nf 12709 14247 14245\nf 12710 12712 14248\nf 12710 14248 12711\nf 12711 14248 14247\nf 12712 12717 14249\nf 12712 14249 14248\nf 12713 14250 12718\nf 12714 12719 14261\nf 12714 14254 12715\nf 12714 14261 14254\nf 12715 14254 14252\nf 12716 14255 12720\nf 12717 12722 14264\nf 12717 14258 14249\nf 12717 14264 14258\nf 12718 14250 14260\nf 12718 14260 12723\nf 12719 12724 14267\nf 12719 14267 14261\nf 12720 14255 14263\nf 12720 14263 14270\nf 12720 14270 12721\nf 12721 12727 12726\nf 12721 14270 12727\nf 12722 12728 14272\nf 12722 14272 14264\nf 12723 14260 14266\nf 12723 14266 12729\nf 12724 12725 14269\nf 12724 14269 14267\nf 12725 12730 14269\nf 12726 12727 14276\nf 12726 14276 12731\nf 12727 14270 14271\nf 12727 14271 14276\nf 12728 12732 14278\nf 12728 14278 14272\nf 12729 14266 14273\nf 12729 14273 12733\nf 12730 12734 14280\nf 12730 14274 14269\nf 12730 14280 14274\nf 12731 14276 12736\nf 12732 12737 14284\nf 12732 14284 14278\nf 12733 14273 14279\nf 12733 14279 12738\nf 12734 12735 12740\nf 12734 12740 14286\nf 12734 14286 14280\nf 12735 12739 12740\nf 12736 14276 14282\nf 12736 14282 12741\nf 12737 12742 14290\nf 12737 14290 14284\nf 12738 14279 14285\nf 12738 14285 12743\nf 12739 12744 12745\nf 12739 12745 12740\nf 12740 12745 14286\nf 12741 14282 14288\nf 12741 14288 12746\nf 12742 12747 14296\nf 12742 14296 14290\nf 12743 14285 14291\nf 12743 14291 12748\nf 12744 12749 12750\nf 12744 12750 12745\nf 12745 12750 14292\nf 12745 14292 14286\nf 12746 14288 14293\nf 12746 14293 12751\nf 12747 12753 14301\nf 12747 14301 14296\nf 12748 14291 14297\nf 12748 14297 12754\nf 12749 12755 14304\nf 12749 14299 12750\nf 12749 14304 14299\nf 12750 14298 14292\nf 12750 14299 14298\nf 12751 12752 12756\nf 12751 14293 14294\nf 12751 14294 12752\nf 12752 12757 12756\nf 12752 14294 14300\nf 12752 14300 14306\nf 12752 14306 12757\nf 12753 12758 14307\nf 12753 14307 14301\nf 12754 14297 14302\nf 12754 14302 12759\nf 12755 12760 14311\nf 12755 14311 14304\nf 12756 12757 12761\nf 12757 12762 12761\nf 12757 14306 14313\nf 12757 14313 12762\nf 12758 12763 14314\nf 12758 14314 14307\nf 12759 14302 14308\nf 12759 14308 12764\nf 12760 12767 14316\nf 12760 14316 14311\nf 12761 12762 12768\nf 12762 12769 12768\nf 12762 14313 14318\nf 12762 14318 12769\nf 12763 12770 14319\nf 12763 14319 14314\nf 12764 12766 12765\nf 12764 14308 14309\nf 12764 14309 12766\nf 12765 12766 12771\nf 12766 14309 14315\nf 12766 14315 12771\nf 12767 12772 14321\nf 12767 14321 14316\nf 12768 12769 12773\nf 12769 12774 12773\nf 12769 14318 14323\nf 12769 14323 12774\nf 12770 12775 14324\nf 12770 14324 14319\nf 12771 14315 14320\nf 12771 14320 12776\nf 12772 12777 14326\nf 12772 14326 14321\nf 12773 12774 12778\nf 12774 12779 12778\nf 12774 14323 14328\nf 12774 14328 12779\nf 12775 12780 14330\nf 12775 14330 14324\nf 12776 14320 14325\nf 12776 14325 12781\nf 12777 12782 14334\nf 12777 14334 14326\nf 12778 12779 12783\nf 12779 12784 12783\nf 12779 14328 14336\nf 12779 14336 12784\nf 12780 12785 14338\nf 12780 14338 14330\nf 12781 14325 14332\nf 12781 14332 12786\nf 12782 12787 14342\nf 12782 14342 14334\nf 12783 12784 12788\nf 12784 12789 12788\nf 12784 14336 14344\nf 12784 14344 12789\nf 12785 12790 14346\nf 12785 14346 14338\nf 12786 14332 14340\nf 12786 14340 12791\nf 12787 12792 14350\nf 12787 14350 14342\nf 12788 12789 12794\nf 12789 12795 12794\nf 12789 14344 14352\nf 12789 14352 12795\nf 12790 12796 14354\nf 12790 14354 14346\nf 12791 14340 14348\nf 12791 14348 12797\nf 12792 12793 12799\nf 12792 12799 14358\nf 12792 14358 14350\nf 12793 12798 12799\nf 12794 12795 12800\nf 12795 12801 12800\nf 12795 14352 14360\nf 12795 14360 12801\nf 12796 12802 14362\nf 12796 14362 14354\nf 12797 14348 14356\nf 12797 14356 12803\nf 12798 12804 12805\nf 12798 12805 12799\nf 12799 12805 14358\nf 12800 12801 12806\nf 12801 12807 12806\nf 12801 14360 14368\nf 12801 14368 12807\nf 12802 12808 14370\nf 12802 14370 14362\nf 12803 14356 14364\nf 12803 14364 12809\nf 12804 12810 12811\nf 12804 12811 12805\nf 12805 12811 14366\nf 12805 14366 14358\nf 12806 12807 12812\nf 12807 12813 12812\nf 12807 14368 14376\nf 12807 14376 12813\nf 12808 12814 14378\nf 12808 14378 14370\nf 12809 14364 14372\nf 12809 14372 12815\nf 12810 12816 12817\nf 12810 12817 12811\nf 12811 12817 14374\nf 12811 14374 14366\nf 12812 12813 12820\nf 12813 12822 12820\nf 12813 14376 14384\nf 12813 14384 12822\nf 12814 12823 14387\nf 12814 14387 14378\nf 12815 14372 14380\nf 12815 14380 12824\nf 12816 12818 12826\nf 12816 12826 12817\nf 12817 12825 14382\nf 12817 12826 12825\nf 12817 14382 14374\nf 12818 12819 12828\nf 12818 12828 12826\nf 12819 12827 12828\nf 12820 12822 12821\nf 12821 12822 14385\nf 12821 12878 12876\nf 12821 14385 12878\nf 12822 14384 14385\nf 12823 12879 14417\nf 12823 14417 14387\nf 12824 14380 14389\nf 12824 14389 12880\nf 12825 12826 14393\nf 12825 14391 14382\nf 12825 14393 14391\nf 12826 12828 14394\nf 12826 14394 14393\nf 12827 12829 14395\nf 12827 14395 12828\nf 12828 14395 14394\nf 12829 12830 14396\nf 12829 14396 14395\nf 12830 12831 12882\nf 12830 12881 14396\nf 12830 12882 12881\nf 12831 12832 12883\nf 12831 12883 12882\nf 12832 12833 12884\nf 12832 12884 12883\nf 12833 12834 14397\nf 12833 14397 14429\nf 12833 14429 12884\nf 12834 12885 14397\nf 12835 12836 14398\nf 12835 12901 12899\nf 12835 14398 14446\nf 12835 14446 12901\nf 12836 12837 14398\nf 12837 12838 14399\nf 12837 14399 14398\nf 12838 12839 14400\nf 12838 14400 14399\nf 12839 12840 14401\nf 12839 14401 14400\nf 12840 12841 14402\nf 12840 14402 14401\nf 12841 12842 14403\nf 12841 14403 14402\nf 12842 12843 14404\nf 12842 14404 14403\nf 12843 12844 14405\nf 12843 14405 14404\nf 12844 12845 14406\nf 12844 14406 14405\nf 12845 12846 14407\nf 12845 14407 14406\nf 12846 12847 14408\nf 12846 14408 14407\nf 12847 12848 14409\nf 12847 14409 14408\nf 12848 12849 14410\nf 12848 14410 14409\nf 12849 12850 14411\nf 12849 14411 14410\nf 12850 12851 14412\nf 12850 14412 14411\nf 12851 12852 12903\nf 12851 12902 14412\nf 12851 12903 12902\nf 12852 12853 12904\nf 12852 12904 12903\nf 12853 12854 12905\nf 12853 12905 12904\nf 12854 12855 12906\nf 12854 12906 12905\nf 12855 12856 12907\nf 12855 12907 12906\nf 12856 12857 12908\nf 12856 12908 12907\nf 12857 12858 12909\nf 12857 12909 12908\nf 12858 12859 12910\nf 12858 12910 12909\nf 12859 12860 12912\nf 12859 12912 12910\nf 12860 12911 12912\nf 12861 12862 12924\nf 12861 12923 12921\nf 12861 12924 12923\nf 12862 12863 12925\nf 12862 12925 12924\nf 12863 12864 12926\nf 12863 12926 12925\nf 12864 12865 12927\nf 12864 12927 12926\nf 12865 12866 12928\nf 12865 12928 12927\nf 12866 12867 12929\nf 12866 12929 12928\nf 12867 12868 12930\nf 12867 12930 12929\nf 12868 12869 12931\nf 12868 12931 12930\nf 12869 12870 12932\nf 12869 12932 12931\nf 12870 12871 12933\nf 12870 12933 12932\nf 12871 12872 12934\nf 12871 12934 12933\nf 12872 12873 12935\nf 12872 12935 12934\nf 12873 12874 12936\nf 12873 12936 12935\nf 12874 12875 12937\nf 12874 12937 12936\nf 12875 12877 12938\nf 12875 12938 12937\nf 12876 12878 12877\nf 12877 12878 14414\nf 12877 14414 12938\nf 12878 14385 14413\nf 12878 14413 14414\nf 12879 12939 14502\nf 12879 14502 14417\nf 12880 14389 14419\nf 12880 14419 12940\nf 12881 12882 14426\nf 12881 14424 14396\nf 12881 14426 14424\nf 12882 12883 14427\nf 12882 14427 14426\nf 12883 12884 14428\nf 12883 14428 14427\nf 12884 14429 14430\nf 12884 14430 14428\nf 12885 12886 14433\nf 12885 14431 14397\nf 12885 14433 14431\nf 12886 12887 14433\nf 12887 12888 14434\nf 12887 14434 14433\nf 12888 12941 14435\nf 12888 14435 14434\nf 12889 12890 14436\nf 12889 12945 12943\nf 12889 14436 14513\nf 12889 14513 12945\nf 12890 12891 14436\nf 12891 12892 14437\nf 12891 14437 14436\nf 12892 12893 14438\nf 12892 14438 14437\nf 12893 12894 14439\nf 12893 14439 14438\nf 12894 12895 14440\nf 12894 14440 14439\nf 12895 12896 14441\nf 12895 14441 14440\nf 12896 12897 14442\nf 12896 14442 14441\nf 12897 12898 14443\nf 12897 14443 14442\nf 12898 12900 14444\nf 12898 14444 14443\nf 12899 12901 12900\nf 12900 12901 14447\nf 12900 14445 14444\nf 12900 14447 14445\nf 12901 14446 14447\nf 12902 12903 14464\nf 12902 14462 14412\nf 12902 14464 14462\nf 12903 12904 14465\nf 12903 14465 14464\nf 12904 12905 14466\nf 12904 14466 14465\nf 12905 12906 14467\nf 12905 14467 14466\nf 12906 12907 14468\nf 12906 14468 14467\nf 12907 12908 14469\nf 12907 14469 14468\nf 12908 12909 14470\nf 12908 14470 14469\nf 12909 12910 14471\nf 12909 14471 14470\nf 12910 12912 14472\nf 12910 14472 14471\nf 12911 12913 14473\nf 12911 14473 12912\nf 12912 14473 14472\nf 12913 12914 14474\nf 12913 14474 14473\nf 12914 12915 14475\nf 12914 14475 14474\nf 12915 12916 14476\nf 12915 14476 14475\nf 12916 12917 14477\nf 12916 14477 14476\nf 12917 12918 14478\nf 12917 14478 14477\nf 12918 12919 14479\nf 12918 14479 14478\nf 12919 12920 14480\nf 12919 14480 14479\nf 12920 12922 14481\nf 12920 14481 14480\nf 12921 12923 12922\nf 12922 12923 14483\nf 12922 14482 14481\nf 12922 14483 14482\nf 12923 12924 14483\nf 12924 12925 14484\nf 12924 14484 14483\nf 12925 12926 14485\nf 12925 14485 14484\nf 12926 12927 14486\nf 12926 14486 14485\nf 12927 12928 14487\nf 12927 14487 14486\nf 12928 12929 14488\nf 12928 14488 14487\nf 12929 12930 14489\nf 12929 14489 14488\nf 12930 12931 14490\nf 12930 14490 14489\nf 12931 12932 14491\nf 12931 14491 14490\nf 12932 12933 14492\nf 12932 14492 14491\nf 12933 12934 14493\nf 12933 14493 14492\nf 12934 12935 14494\nf 12934 14494 14493\nf 12935 12936 14495\nf 12935 14495 14494\nf 12936 12937 14496\nf 12936 14496 14495\nf 12937 12938 14497\nf 12937 14497 14496\nf 12938 14414 14498\nf 12938 14498 14499\nf 12938 14499 14497\nf 12939 12946 14528\nf 12939 14528 14502\nf 12940 14419 14504\nf 12940 14504 12947\nf 12941 12942 14511\nf 12941 14509 14435\nf 12941 14511 14509\nf 12942 12944 14511\nf 12943 12945 12944\nf 12944 12945 14514\nf 12944 14512 14511\nf 12944 14514 14512\nf 12945 14513 14514\nf 12946 12948 14532\nf 12946 14532 14528\nf 12947 14504 14530\nf 12947 14530 12949\nf 12948 12950 14536\nf 12948 14536 14532\nf 12949 14530 14534\nf 12949 14534 12951\nf 12950 12952 14540\nf 12950 14540 14536\nf 12951 14534 14538\nf 12951 14538 12953\nf 12952 12954 14544\nf 12952 14544 14540\nf 12953 14538 14542\nf 12953 14542 12955\nf 12954 12956 14548\nf 12954 14548 14544\nf 12955 14542 14546\nf 12955 14546 12957\nf 12956 12958 14565\nf 12956 14565 14548\nf 12957 14546 14550\nf 12957 14550 12959\nf 12958 12970 14620\nf 12958 14620 14565\nf 12959 14550 14567\nf 12959 14567 12971\nf 12960 12976 12978\nf 12960 12978 14578\nf 12960 14578 14580\nf 12960 14580 14582\nf 12960 14582 12961\nf 12961 14582 14584\nf 12961 14584 12962\nf 12962 14584 14586\nf 12962 14586 12979\nf 12963 12965 13009\nf 12963 13006 14609\nf 12963 13009 13006\nf 12963 14553 14555\nf 12963 14555 12965\nf 12963 14609 14553\nf 12964 12965 12966\nf 12964 13007 13009\nf 12964 13009 12965\nf 12965 12967 12966\nf 12965 14555 14557\nf 12965 14557 12967\nf 12966 12967 13010\nf 12967 12968 13012\nf 12967 13012 13010\nf 12967 14557 14559\nf 12967 14559 12968\nf 12968 12969 13012\nf 12968 14559 14561\nf 12968 14561 12969\nf 12969 13014 13012\nf 12969 13016 13014\nf 12969 14561 14612\nf 12969 14612 14613\nf 12969 14613 13016\nf 12970 13020 14671\nf 12970 14671 14620\nf 12971 14567 14622\nf 12971 14622 13021\nf 12972 12973 12974\nf 12972 13032 13034\nf 12972 13034 14640\nf 12972 14640 12973\nf 12973 12975 12974\nf 12973 14574 14576\nf 12973 14576 12975\nf 12973 14639 14574\nf 12973 14640 14639\nf 12974 12975 12977\nf 12975 12978 12977\nf 12975 14576 14578\nf 12975 14578 12978\nf 12976 12977 12978\nf 12979 12981 12980\nf 12979 14586 12981\nf 12980 12981 12982\nf 12981 12983 12982\nf 12981 14586 14588\nf 12981 14588 12983\nf 12982 12983 12984\nf 12983 12985 12984\nf 12983 14588 14590\nf 12983 14590 12985\nf 12984 12985 12986\nf 12985 12987 12986\nf 12985 14590 14592\nf 12985 14592 12987\nf 12986 12987 13037\nf 12986 13037 13035\nf 12987 14592 14642\nf 12987 14642 14643\nf 12987 14643 13037\nf 12988 13053 13055\nf 12988 13055 14656\nf 12988 14656 14658\nf 12988 14658 14660\nf 12988 14660 12989\nf 12989 14660 14663\nf 12989 14663 12990\nf 12990 14663 12991\nf 12991 12992 12993\nf 12991 14662 12992\nf 12991 14663 14662\nf 12992 12994 12993\nf 12992 14595 14597\nf 12992 14597 12994\nf 12992 14662 14595\nf 12993 12994 12995\nf 12994 12996 12995\nf 12994 14597 14599\nf 12994 14599 12996\nf 12995 12996 12997\nf 12996 12998 12997\nf 12996 14599 14601\nf 12996 14601 12998\nf 12997 12998 12999\nf 12998 13000 12999\nf 12998 14601 14603\nf 12998 14603 13000\nf 12999 13000 13001\nf 13000 13002 13001\nf 13000 14603 14605\nf 13000 14605 13002\nf 13001 13002 13003\nf 13002 13004 13003\nf 13002 14605 14607\nf 13002 14607 13004\nf 13003 13004 13005\nf 13004 13006 13005\nf 13004 14607 14610\nf 13004 14610 13006\nf 13005 13006 13008\nf 13006 13009 13008\nf 13006 14610 14609\nf 13007 13008 13009\nf 13010 13012 13011\nf 13011 13012 13013\nf 13012 13014 13013\nf 13013 13014 13015\nf 13014 13016 13015\nf 13015 13016 13017\nf 13016 13018 13017\nf 13016 14613 14615\nf 13016 14615 13018\nf 13017 13018 13056\nf 13018 13019 13058\nf 13018 13058 13056\nf 13018 14615 14617\nf 13018 14617 13019\nf 13019 13060 13058\nf 13019 14617 14665\nf 13019 14665 14666\nf 13019 14666 13060\nf 13020 13062 14707\nf 13020 14707 14671\nf 13021 14622 14673\nf 13021 14673 13063\nf 13022 13023 13065\nf 13022 13064 14676\nf 13022 13065 13064\nf 13022 14627 14629\nf 13022 14629 13023\nf 13022 14676 14627\nf 13023 13025 13068\nf 13023 13068 13065\nf 13023 14629 14631\nf 13023 14631 13025\nf 13024 13025 13026\nf 13024 13066 13068\nf 13024 13068 13025\nf 13025 13027 13026\nf 13025 14631 14633\nf 13025 14633 13027\nf 13026 13027 13028\nf 13027 13029 13028\nf 13027 14633 14635\nf 13027 14635 13029\nf 13028 13029 13030\nf 13029 13031 13030\nf 13029 14635 14637\nf 13029 14637 13031\nf 13030 13031 13033\nf 13031 13034 13033\nf 13031 14637 14640\nf 13031 14640 13034\nf 13032 13033 13034\nf 13035 13037 13036\nf 13036 13037 13038\nf 13037 13039 13038\nf 13037 14643 14645\nf 13037 14645 13039\nf 13038 13039 13040\nf 13039 13041 13040\nf 13039 14645 14647\nf 13039 14647 13041\nf 13040 13041 13042\nf 13041 13043 13042\nf 13041 14647 14649\nf 13041 14649 13043\nf 13042 13043 13044\nf 13043 13045 13044\nf 13043 14649 14651\nf 13043 14651 13045\nf 13044 13045 13046\nf 13045 13047 13046\nf 13045 14651 14652\nf 13045 14652 13047\nf 13046 13047 14680\nf 13046 14680 13048\nf 13047 14652 14679\nf 13047 14679 14680\nf 13048 14680 14682\nf 13048 14682 13069\nf 13049 13093 13095\nf 13049 13095 14697\nf 13049 14697 14699\nf 13049 14699 14702\nf 13049 14702 13050\nf 13050 14702 13051\nf 13051 13052 13054\nf 13051 14701 13052\nf 13051 14702 14701\nf 13052 13055 13054\nf 13052 14654 14656\nf 13052 14656 13055\nf 13052 14701 14654\nf 13053 13054 13055\nf 13056 13058 13057\nf 13057 13058 13059\nf 13058 13060 13059\nf 13059 13060 13096\nf 13060 13061 13097\nf 13060 13097 13096\nf 13060 14666 14668\nf 13060 14668 13061\nf 13061 14668 14704\nf 13061 14704 14734\nf 13061 14734 13097\nf 13062 13098 14738\nf 13062 14738 14707\nf 13063 14673 14709\nf 13063 14709 13099\nf 13064 13065 13100\nf 13064 13100 14711\nf 13064 14677 14676\nf 13064 14711 14677\nf 13065 13068 13103\nf 13065 13103 13100\nf 13066 13067 13068\nf 13067 13101 13103\nf 13067 13103 13068\nf 13069 13071 13070\nf 13069 14682 13071\nf 13070 13071 13072\nf 13071 13073 13072\nf 13071 14682 14684\nf 13071 14684 13073\nf 13072 13073 13074\nf 13073 13075 13074\nf 13073 14684 14686\nf 13073 14686 13075\nf 13074 13075 13076\nf 13075 13077 13076\nf 13075 14686 14688\nf 13075 14688 13077\nf 13076 13077 13078\nf 13077 13079 13078\nf 13077 14688 14690\nf 13077 14690 13079\nf 13078 13079 13080\nf 13079 13081 13080\nf 13079 14690 14692\nf 13079 14692 13081\nf 13080 13081 13082\nf 13081 13083 13082\nf 13081 14692 14694\nf 13081 14694 13083\nf 13082 13083 13084\nf 13083 13085 13084\nf 13083 14694 14696\nf 13083 14696 13085\nf 13084 13085 14714\nf 13084 14714 13086\nf 13085 14696 14713\nf 13085 14713 14714\nf 13086 14714 14716\nf 13086 14716 13087\nf 13087 14716 14718\nf 13087 14718 13088\nf 13088 14718 14720\nf 13088 14720 13104\nf 13089 13118 13120\nf 13089 13120 14724\nf 13089 14724 14725\nf 13089 14725 14727\nf 13089 14727 13090\nf 13090 14727 14729\nf 13090 14729 13091\nf 13091 14729 14732\nf 13091 14732 13092\nf 13092 14732 13094\nf 13093 13094 13095\nf 13094 14731 13095\nf 13094 14732 14731\nf 13095 14731 14697\nf 13096 13097 13121\nf 13097 13122 13121\nf 13097 13123 13122\nf 13097 14734 14735\nf 13097 14735 13123\nf 13098 13124 14762\nf 13098 14762 14738\nf 13099 14709 14740\nf 13099 14740 13125\nf 13100 13103 13127\nf 13100 13127 14742\nf 13100 14742 14711\nf 13101 13102 13103\nf 13102 13126 13127\nf 13102 13127 13103\nf 13104 13106 13105\nf 13104 14720 13106\nf 13105 13106 13107\nf 13106 13108 13107\nf 13106 14720 14722\nf 13106 14722 13108\nf 13107 13108 13109\nf 13108 13110 13109\nf 13108 14722 14723\nf 13108 14723 13110\nf 13109 13110 14745\nf 13109 14745 13111\nf 13110 14723 14744\nf 13110 14744 14745\nf 13111 14745 14747\nf 13111 14747 13112\nf 13112 14747 14749\nf 13112 14749 13113\nf 13113 14749 14751\nf 13113 14751 13114\nf 13114 14751 14753\nf 13114 14753 13115\nf 13115 14753 14755\nf 13115 14755 13116\nf 13116 14755 14758\nf 13116 14758 13117\nf 13117 14758 13119\nf 13118 13119 13120\nf 13119 14757 13120\nf 13119 14758 14757\nf 13120 14757 14724\nf 13121 13122 13128\nf 13122 13123 13130\nf 13122 13130 13128\nf 13123 13131 13130\nf 13123 14735 14760\nf 13123 14760 14768\nf 13123 14768 13131\nf 13124 13132 14770\nf 13124 14770 14762\nf 13125 14740 14764\nf 13125 14764 13133\nf 13126 13134 13135\nf 13126 13135 13127\nf 13127 13135 14766\nf 13127 14766 14742\nf 13128 13130 13129\nf 13129 13130 13136\nf 13130 13131 13137\nf 13130 13137 13136\nf 13131 14768 14776\nf 13131 14776 13137\nf 13132 13138 14778\nf 13132 14778 14770\nf 13133 14764 14772\nf 13133 14772 13139\nf 13134 13140 13141\nf 13134 13141 13135\nf 13135 13141 14774\nf 13135 14774 14766\nf 13136 13137 13142\nf 13137 13143 13142\nf 13137 14776 14784\nf 13137 14784 13143\nf 13138 13144 14786\nf 13138 14786 14778\nf 13139 14772 14780\nf 13139 14780 13145\nf 13140 13146 13147\nf 13140 13147 13141\nf 13141 13147 14782\nf 13141 14782 14774\nf 13142 13143 13148\nf 13143 13149 13148\nf 13143 14784 14791\nf 13143 14791 13149\nf 13144 13150 14793\nf 13144 14793 14786\nf 13145 14780 14788\nf 13145 14788 13151\nf 13146 13152 13153\nf 13146 13153 13147\nf 13147 13153 14789\nf 13147 14789 14782\nf 13148 13149 13154\nf 13149 13155 13154\nf 13149 14791 14798\nf 13149 14798 13155\nf 13150 13156 14800\nf 13150 14800 14793\nf 13151 14788 14795\nf 13151 14795 13157\nf 13152 13158 13159\nf 13152 13159 13153\nf 13153 13159 14796\nf 13153 14796 14789\nf 13154 13155 13160\nf 13155 13161 13160\nf 13155 14798 14805\nf 13155 14805 13161\nf 13156 13162 14807\nf 13156 14807 14800\nf 13157 14795 14802\nf 13157 14802 13163\nf 13158 13164 13165\nf 13158 13165 13159\nf 13159 13165 14803\nf 13159 14803 14796\nf 13160 13161 13166\nf 13161 13167 13166\nf 13161 14805 14813\nf 13161 14813 13167\nf 13162 13168 14815\nf 13162 14815 14807\nf 13163 14802 14809\nf 13163 14809 13169\nf 13164 13170 13171\nf 13164 13171 13165\nf 13165 13171 14811\nf 13165 14811 14803\nf 13166 13167 13172\nf 13167 13173 13172\nf 13167 14813 14822\nf 13167 14822 13173\nf 13168 13174 14824\nf 13168 14824 14815\nf 13169 14809 14817\nf 13169 14817 13175\nf 13170 13176 14828\nf 13170 14821 13171\nf 13170 14828 14821\nf 13171 14819 14811\nf 13171 14821 14819\nf 13172 13173 13177\nf 13173 13178 13177\nf 13173 14822 14830\nf 13173 14830 13178\nf 13174 13179 14832\nf 13174 14832 14824\nf 13175 14817 14826\nf 13175 14826 13180\nf 13176 13181 14837\nf 13176 14837 14828\nf 13177 13178 13182\nf 13178 13184 13182\nf 13178 14830 14839\nf 13178 14839 13184\nf 13179 13185 14840\nf 13179 14840 14832\nf 13180 14826 14834\nf 13180 14834 13186\nf 13181 13189 14843\nf 13181 14843 14837\nf 13182 13184 13183\nf 13183 13184 13190\nf 13184 14839 13190\nf 13185 13191 14846\nf 13185 14846 14840\nf 13186 13188 13187\nf 13186 14834 14835\nf 13186 14835 13188\nf 13187 13188 13192\nf 13188 14835 14842\nf 13188 14842 13192\nf 13189 13193 14849\nf 13189 14849 14843\nf 13190 14839 14845\nf 13190 14845 13194\nf 13191 13195 14852\nf 13191 14852 14846\nf 13192 14842 14848\nf 13192 14848 13196\nf 13193 13197 14855\nf 13193 14855 14849\nf 13194 14845 14851\nf 13194 14851 13198\nf 13195 13199 14858\nf 13195 14858 14852\nf 13196 14848 14854\nf 13196 14854 13200\nf 13197 13201 14861\nf 13197 14861 14855\nf 13198 14851 14857\nf 13198 14857 13202\nf 13199 13203 14864\nf 13199 14864 14858\nf 13200 14854 14860\nf 13200 14860 13204\nf 13201 13205 14868\nf 13201 14868 14861\nf 13202 14857 14863\nf 13202 14863 13206\nf 13203 13207 14871\nf 13203 14871 14864\nf 13204 14860 14866\nf 13204 14866 13208\nf 13205 13209 14875\nf 13205 14875 14868\nf 13206 14863 14870\nf 13206 14870 13210\nf 13207 13211 14879\nf 13207 14879 14871\nf 13208 14866 14873\nf 13208 14873 13212\nf 13209 13213 14875\nf 13210 14870 14878\nf 13210 14878 13215\nf 13211 13216 14886\nf 13211 14886 14879\nf 13212 14873 14881\nf 13212 14881 13217\nf 13213 13214 14875\nf 13213 13219 13220\nf 13213 13220 13214\nf 13214 13220 14884\nf 13214 14876 14875\nf 13214 14884 14876\nf 13215 14878 14885\nf 13215 14885 13221\nf 13216 13222 14891\nf 13216 14891 14886\nf 13217 13218 13223\nf 13217 14881 14882\nf 13217 14882 13218\nf 13218 13224 13223\nf 13218 14882 14888\nf 13218 14888 14892\nf 13218 14892 13224\nf 13219 13225 13226\nf 13219 13226 13220\nf 13220 13226 14889\nf 13220 14889 14884\nf 13221 14885 14890\nf 13221 14890 13227\nf 13222 13228 14895\nf 13222 14895 14891\nf 13223 13224 13229\nf 13224 13230 13229\nf 13224 14892 14896\nf 13224 14896 13230\nf 13225 13231 13232\nf 13225 13232 13226\nf 13226 13232 14893\nf 13226 14893 14889\nf 13227 14890 14894\nf 13227 14894 13233\nf 13228 13234 14899\nf 13228 14899 14895\nf 13229 13230 13235\nf 13230 13237 13235\nf 13230 14896 14900\nf 13230 14900 13237\nf 13231 13238 13239\nf 13231 13239 13232\nf 13232 13239 14897\nf 13232 14897 14893\nf 13233 14894 14898\nf 13233 14898 13240\nf 13234 13241 14903\nf 13234 14903 14899\nf 13235 13237 13236\nf 13236 13237 13242\nf 13237 14900 13242\nf 13238 13243 13244\nf 13238 13244 13239\nf 13239 13244 14901\nf 13239 14901 14897\nf 13240 14898 14902\nf 13240 14902 13245\nf 13241 13246 14907\nf 13241 14907 14903\nf 13242 14900 14904\nf 13242 14904 13247\nf 13243 13248 13249\nf 13243 13249 13244\nf 13244 13249 14905\nf 13244 14905 14901\nf 13245 14902 14906\nf 13245 14906 13250\nf 13246 13251 14912\nf 13246 14912 14907\nf 13247 14904 14908\nf 13247 14908 13252\nf 13248 13253 13254\nf 13248 13254 13249\nf 13249 13254 14909\nf 13249 14909 14905\nf 13250 14906 14910\nf 13250 14910 13255\nf 13251 13256 14917\nf 13251 14917 14912\nf 13252 14908 14913\nf 13252 14913 13257\nf 13253 13258 13259\nf 13253 13259 13254\nf 13254 13259 14914\nf 13254 14914 14909\nf 13255 14910 14915\nf 13255 14915 13260\nf 13256 13261 14922\nf 13256 14922 14917\nf 13257 14913 14918\nf 13257 14918 13262\nf 13258 13263 13264\nf 13258 13264 13259\nf 13259 13264 14919\nf 13259 14919 14914\nf 13260 14915 14920\nf 13260 14920 13265\nf 13261 13266 14927\nf 13261 14927 14922\nf 13262 14918 14923\nf 13262 14923 13267\nf 13263 13268 13269\nf 13263 13269 13264\nf 13264 13269 14924\nf 13264 14924 14919\nf 13265 14920 14925\nf 13265 14925 13270\nf 13266 13271 14933\nf 13266 14933 14927\nf 13267 14923 14928\nf 13267 14928 13272\nf 13268 13273 13274\nf 13268 13274 13269\nf 13269 13274 14930\nf 13269 14930 14924\nf 13270 14925 14931\nf 13270 14931 13275\nf 13271 13276 14939\nf 13271 14939 14933\nf 13272 14928 14934\nf 13272 14934 13277\nf 13273 13278 13279\nf 13273 13279 13274\nf 13274 13279 14936\nf 13274 14936 14930\nf 13275 14931 14937\nf 13275 14937 13280\nf 13276 13281 14945\nf 13276 14945 14939\nf 13277 14934 14940\nf 13277 14940 13282\nf 13278 13283 13284\nf 13278 13284 13279\nf 13279 13284 14942\nf 13279 14942 14936\nf 13280 14937 14943\nf 13280 14943 13285\nf 13281 13286 14952\nf 13281 14952 14945\nf 13282 14940 14946\nf 13282 14946 13287\nf 13283 13288 13289\nf 13283 13289 13284\nf 13284 13289 14948\nf 13284 14948 14942\nf 13285 14943 14949\nf 13285 14949 13290\nf 13286 13292 14957\nf 13286 14957 14952\nf 13287 14946 14953\nf 13287 14953 13293\nf 13288 13294 13295\nf 13288 13295 13289\nf 13289 13295 14955\nf 13289 14955 14948\nf 13290 13291 13296\nf 13290 14949 14950\nf 13290 14950 13291\nf 13291 13297 13296\nf 13291 14950 14956\nf 13291 14956 14961\nf 13291 14961 13297\nf 13292 13298 14962\nf 13292 14962 14957\nf 13293 14953 14958\nf 13293 14958 13299\nf 13294 13300 13301\nf 13294 13301 13295\nf 13295 13301 14960\nf 13295 14960 14955\nf 13296 13297 13302\nf 13297 13304 13302\nf 13297 14961 14966\nf 13297 14966 13304\nf 13298 13305 14967\nf 13298 14967 14962\nf 13299 14958 14963\nf 13299 14963 13306\nf 13300 13307 13308\nf 13300 13308 13301\nf 13301 13308 14965\nf 13301 14965 14960\nf 13302 13304 13303\nf 13303 13304 13309\nf 13304 14966 13309\nf 13305 13310 14972\nf 13305 14972 14967\nf 13306 14963 14968\nf 13306 14968 13311\nf 13307 13312 13313\nf 13307 13313 13308\nf 13308 13313 14970\nf 13308 14970 14965\nf 13309 14966 14971\nf 13309 14971 13314\nf 13310 13315 14978\nf 13310 14978 14972\nf 13311 14968 14973\nf 13311 14973 13316\nf 13312 13318 13319\nf 13312 13319 13313\nf 13313 13319 14976\nf 13313 14976 14970\nf 13314 14971 14977\nf 13314 14977 13320\nf 13315 13321 14982\nf 13315 14982 14978\nf 13316 13317 13322\nf 13316 14973 14974\nf 13316 14974 13317\nf 13317 13323 13322\nf 13317 14974 14979\nf 13317 14979 14983\nf 13317 14983 13323\nf 13318 13324 13325\nf 13318 13325 13319\nf 13319 13325 14980\nf 13319 14980 14976\nf 13320 14977 14981\nf 13320 14981 13326\nf 13321 13327 14986\nf 13321 14986 14982\nf 13322 13323 13328\nf 13323 13329 13328\nf 13323 14983 14988\nf 13323 14988 13329\nf 13324 13330 13331\nf 13324 13331 13325\nf 13325 13331 14984\nf 13325 14984 14980\nf 13326 14981 14985\nf 13326 14985 13332\nf 13327 13333 14991\nf 13327 14991 14986\nf 13328 13329 13334\nf 13329 13336 13334\nf 13329 14988 14993\nf 13329 14993 13336\nf 13330 13337 13338\nf 13330 13338 13331\nf 13331 13338 14989\nf 13331 14989 14984\nf 13332 14985 14990\nf 13332 14990 13339\nf 13333 13340 14996\nf 13333 14996 14991\nf 13334 13336 13335\nf 13335 13336 13341\nf 13336 14993 13341\nf 13337 13342 13343\nf 13337 13343 13338\nf 13338 13343 14994\nf 13338 14994 14989\nf 13339 14990 14995\nf 13339 14995 13344\nf 13340 13345 15002\nf 13340 15002 14996\nf 13341 14993 14998\nf 13341 14998 13346\nf 13342 13347 13348\nf 13342 13348 13343\nf 13343 13348 14999\nf 13343 14999 14994\nf 13344 14995 15000\nf 13344 15000 13349\nf 13345 13351 15002\nf 13346 14998 15005\nf 13346 15005 13353\nf 13347 13354 13355\nf 13347 13355 13348\nf 13348 13355 15007\nf 13348 15007 14999\nf 13349 15000 15008\nf 13349 15008 15014\nf 13349 15014 13350\nf 13350 13357 13356\nf 13350 15014 13357\nf 13351 13352 15002\nf 13351 13358 13360\nf 13351 13360 13352\nf 13352 13360 15010\nf 13352 15003 15002\nf 13352 15010 15003\nf 13353 15005 15011\nf 13353 15011 13361\nf 13354 13362 13363\nf 13354 13363 13355\nf 13355 13363 15013\nf 13355 15013 15007\nf 13356 13357 13364\nf 13357 13365 13364\nf 13357 15014 15021\nf 13357 15021 13365\nf 13358 13359 13360\nf 13359 13366 15016\nf 13359 15016 13360\nf 13360 15016 15010\nf 13361 15011 15017\nf 13361 15017 13367\nf 13362 13368 13369\nf 13362 13369 13363\nf 13363 13369 15019\nf 13363 15019 15013\nf 13364 13365 13370\nf 13365 13371 13370\nf 13365 15021 15028\nf 13365 15028 13371\nf 13366 13372 15031\nf 13366 15023 15016\nf 13366 15031 15023\nf 13367 15017 15024\nf 13367 15024 13373\nf 13368 13374 13375\nf 13368 13375 13369\nf 13369 13375 15026\nf 13369 15026 15019\nf 13370 13371 15036\nf 13370 15036 13376\nf 13371 15028 15029\nf 13371 15029 15036\nf 13372 13377 15038\nf 13372 15038 15031\nf 13373 15024 15032\nf 13373 15032 13378\nf 13374 13379 13380\nf 13374 13380 13375\nf 13375 13380 15034\nf 13375 15034 15026\nf 13376 15036 13381\nf 13377 13383 15045\nf 13377 15045 15038\nf 13378 15032 15039\nf 13378 15039 13385\nf 13379 13386 13387\nf 13379 13387 13380\nf 13380 13387 15041\nf 13380 15041 15034\nf 13381 15036 15043\nf 13381 15043 15049\nf 13381 15049 13382\nf 13382 13389 13388\nf 13382 15049 13389\nf 13383 13384 13391\nf 13383 13391 15051\nf 13383 15051 15045\nf 13384 13390 13391\nf 13385 15039 15046\nf 13385 15046 13392\nf 13386 13393 13394\nf 13386 13394 13387\nf 13387 13394 15047\nf 13387 15047 15041\nf 13388 13389 13396\nf 13389 13397 13396\nf 13389 15049 15057\nf 13389 15057 13397\nf 13390 13398 15059\nf 13390 15052 13391\nf 13390 15059 15052\nf 13391 15052 15051\nf 13392 15046 15053\nf 13392 15053 13399\nf 13393 13395 13403\nf 13393 13403 13394\nf 13394 13401 15055\nf 13394 13403 13401\nf 13394 15055 15047\nf 13395 13402 13403\nf 13396 13397 13407\nf 13397 13409 13407\nf 13397 15057 15066\nf 13397 15066 13409\nf 13398 13410 15069\nf 13398 15069 15059\nf 13399 15053 15061\nf 13399 15061 15070\nf 13399 15070 13400\nf 13400 13412 13411\nf 13400 15070 13412\nf 13401 13403 15064\nf 13401 15062 15055\nf 13401 15064 15062\nf 13402 13404 15065\nf 13402 15065 13403\nf 13403 15065 15064\nf 13404 13405 13415\nf 13404 13413 15073\nf 13404 13415 13413\nf 13404 15073 15065\nf 13405 13414 13415\nf 13406 13408 13474\nf 13406 13473 13471\nf 13406 13474 13473\nf 13407 13409 13408\nf 13408 13409 15067\nf 13408 15067 13474\nf 13409 15066 15067\nf 13410 13475 15080\nf 13410 15080 15069\nf 13411 13412 13476\nf 13412 13477 13476\nf 13412 15070 15081\nf 13412 15081 13477\nf 13413 13415 13478\nf 13413 13478 15075\nf 13413 15075 15073\nf 13414 13416 13479\nf 13414 13479 13415\nf 13415 13479 13478\nf 13416 13417 13480\nf 13416 13480 13479\nf 13417 13418 13481\nf 13417 13481 13480\nf 13418 13419 13482\nf 13418 13482 13481\nf 13419 13420 13484\nf 13419 13484 13482\nf 13420 13483 13484\nf 13421 13422 13498\nf 13421 13497 13495\nf 13421 13498 13497\nf 13422 13423 13499\nf 13422 13499 13498\nf 13423 13424 13500\nf 13423 13500 13499\nf 13424 13425 13501\nf 13424 13501 13500\nf 13425 13426 13502\nf 13425 13502 13501\nf 13426 13427 13503\nf 13426 13503 13502\nf 13427 13428 13504\nf 13427 13504 13503\nf 13428 13429 13505\nf 13428 13505 13504\nf 13429 13430 13506\nf 13429 13506 13505\nf 13430 13431 13507\nf 13430 13507 13506\nf 13431 13432 13508\nf 13431 13508 13507\nf 13432 13433 13509\nf 13432 13509 13508\nf 13433 13434 13510\nf 13433 13510 13509\nf 13434 13435 13511\nf 13434 13511 13510\nf 13435 13436 13512\nf 13435 13512 13511\nf 13436 13437 13513\nf 13436 13513 13512\nf 13437 13438 13514\nf 13437 13514 13513\nf 13438 13439 13515\nf 13438 13515 13514\nf 13439 13440 13516\nf 13439 13516 13515\nf 13440 13441 13517\nf 13440 13517 13516\nf 13441 13442 13518\nf 13441 13518 13517\nf 13442 13443 13519\nf 13442 13519 13518\nf 13443 13444 13520\nf 13443 13520 13519\nf 13444 13445 13521\nf 13444 13521 13520\nf 13445 13446 13522\nf 13445 13522 13521\nf 13446 13447 13523\nf 13446 13523 13522\nf 13447 13448 13524\nf 13447 13524 13523\nf 13448 13449 13525\nf 13448 13525 13524\nf 13449 13450 13526\nf 13449 13526 13525\nf 13450 13451 13527\nf 13450 13527 13526\nf 13451 13452 13528\nf 13451 13528 13527\nf 13452 13453 13529\nf 13452 13529 13528\nf 13453 13454 13530\nf 13453 13530 13529\nf 13454 13455 13531\nf 13454 13531 13530\nf 13455 13456 13532\nf 13455 13532 13531\nf 13456 13457 13533\nf 13456 13533 13532\nf 13457 13458 13534\nf 13457 13534 13533\nf 13458 13459 13535\nf 13458 13535 13534\nf 13459 13460 13537\nf 13459 13537 13535\nf 13460 13536 13537\nf 13461 13462 13542\nf 13461 13541 13539\nf 13461 13542 13541\nf 13462 13463 13543\nf 13462 13543 13542\nf 13463 13464 13545\nf 13463 13545 13543\nf 13464 13544 13545\nf 13465 13466 13550\nf 13465 13549 13547\nf 13465 13550 13549\nf 13466 13467 13551\nf 13466 13551 13550\nf 13467 13468 13552\nf 13467 13552 13551\nf 13468 13469 13553\nf 13468 13553 13552\nf 13469 13470 13554\nf 13469 13554 13553\nf 13470 13472 13555\nf 13470 13555 13554\nf 13471 13473 13472\nf 13472 13473 13555\nf 13473 13474 13556\nf 13473 13556 13555\nf 13474 15067 15076\nf 13474 15076 15077\nf 13474 15077 15099\nf 13474 15099 13556\nf 13475 13557 15103\nf 13475 15103 15080\nf 13476 13477 13558\nf 13477 13559 13558\nf 13477 15081 15104\nf 13477 15104 13559\nf 13478 13479 13560\nf 13478 13560 15086\nf 13478 15084 15075\nf 13478 15086 15084\nf 13479 13480 13560\nf 13480 13481 13561\nf 13480 13561 13560\nf 13481 13482 13562\nf 13481 13562 13561\nf 13482 13484 13563\nf 13482 13563 13562\nf 13483 13485 13565\nf 13483 13565 13484\nf 13484 13564 13563\nf 13484 13565 13564\nf 13485 13486 13566\nf 13485 13566 13565\nf 13486 13487 13567\nf 13486 13567 13566\nf 13487 13488 13568\nf 13487 13568 13567\nf 13488 13489 13569\nf 13488 13569 13568\nf 13489 13490 13570\nf 13489 13570 13569\nf 13490 13491 13571\nf 13490 13571 13570\nf 13491 13492 13572\nf 13491 13572 13571\nf 13492 13493 13573\nf 13492 13573 13572\nf 13493 13494 13574\nf 13493 13574 13573\nf 13494 13496 13575\nf 13494 13575 13574\nf 13495 13497 13496\nf 13496 13497 13575\nf 13497 13498 13576\nf 13497 13576 13575\nf 13498 13499 13577\nf 13498 13577 13576\nf 13499 13500 13578\nf 13499 13578 13577\nf 13500 13501 13579\nf 13500 13579 13578\nf 13501 13502 13580\nf 13501 13580 13579\nf 13502 13503 13581\nf 13502 13581 13580\nf 13503 13504 13582\nf 13503 13582 13581\nf 13504 13505 13583\nf 13504 13583 13582\nf 13505 13506 13584\nf 13505 13584 13583\nf 13506 13507 13585\nf 13506 13585 13584\nf 13507 13508 13586\nf 13507 13586 13585\nf 13508 13509 13587\nf 13508 13587 13586\nf 13509 13510 13588\nf 13509 13588 13587\nf 13510 13511 13589\nf 13510 13589 13588\nf 13511 13512 13590\nf 13511 13590 13589\nf 13512 13513 15087\nf 13512 15087 15118\nf 13512 15118 13590\nf 13513 13514 15088\nf 13513 15088 15087\nf 13514 13515 15089\nf 13514 15089 15088\nf 13515 13516 15090\nf 13515 15090 15089\nf 13516 13517 15091\nf 13516 15091 15090\nf 13517 13518 15092\nf 13517 15092 15091\nf 13518 13519 15093\nf 13518 15093 15092\nf 13519 13520 15094\nf 13519 15094 15093\nf 13520 13521 15095\nf 13520 15095 15094\nf 13521 13522 15096\nf 13521 15096 15095\nf 13522 13523 15097\nf 13522 15097 15096\nf 13523 13524 13591\nf 13523 13591 15098\nf 13523 15098 15097\nf 13524 13525 13591\nf 13525 13526 13592\nf 13525 13592 13591\nf 13526 13527 13593\nf 13526 13593 13592\nf 13527 13528 13594\nf 13527 13594 13593\nf 13528 13529 13595\nf 13528 13595 13594\nf 13529 13530 13596\nf 13529 13596 13595\nf 13530 13531 13597\nf 13530 13597 13596\nf 13531 13532 13598\nf 13531 13598 13597\nf 13532 13533 13599\nf 13532 13599 13598\nf 13533 13534 13600\nf 13533 13600 13599\nf 13534 13535 13601\nf 13534 13601 13600\nf 13535 13537 13602\nf 13535 13602 13601\nf 13536 13538 13604\nf 13536 13604 13537\nf 13537 13603 13602\nf 13537 13604 13603\nf 13538 13540 13605\nf 13538 13605 13604\nf 13539 13541 13540\nf 13540 13541 13605\nf 13541 13542 13606\nf 13541 13606 13605\nf 13542 13543 13607\nf 13542 13607 13606\nf 13543 13545 13608\nf 13543 13608 13607\nf 13544 13546 13610\nf 13544 13610 13545\nf 13545 13609 13608\nf 13545 13610 13609\nf 13546 13548 13611\nf 13546 13611 13610\nf 13547 13549 13548\nf 13548 13549 13611\nf 13549 13550 13612\nf 13549 13612 13611\nf 13550 13551 13613\nf 13550 13613 13612\nf 13551 13552 13614\nf 13551 13614 13613\nf 13552 13553 13615\nf 13552 13615 13614\nf 13553 13554 13616\nf 13553 13616 13615\nf 13554 13555 13617\nf 13554 13617 13616\nf 13555 13556 13618\nf 13555 13618 13617\nf 13556 15099 15100\nf 13556 15100 15138\nf 13556 15138 13618\nf 13557 13619 15143\nf 13557 15143 15103\nf 13558 13559 13620\nf 13559 13621 13620\nf 13559 15104 15144\nf 13559 15144 13621\nf 13560 13561 13622\nf 13560 13622 15110\nf 13560 15108 15086\nf 13560 15110 15108\nf 13561 13562 13622\nf 13562 13563 13623\nf 13562 13623 13622\nf 13563 13564 13624\nf 13563 13624 13623\nf 13564 13565 13625\nf 13564 13625 13624\nf 13565 13566 13626\nf 13565 13626 13625\nf 13566 13567 13627\nf 13566 13627 13626\nf 13567 13568 13628\nf 13567 13628 13627\nf 13568 13569 13629\nf 13568 13629 13628\nf 13569 13570 13630\nf 13569 13630 13629\nf 13570 13571 13631\nf 13570 13631 13630\nf 13571 13572 13632\nf 13571 13632 13631\nf 13572 13573 13633\nf 13572 13633 13632\nf 13573 13574 13634\nf 13573 13634 13633\nf 13574 13575 13635\nf 13574 13635 13634\nf 13575 13576 13636\nf 13575 13636 13635\nf 13576 13577 13637\nf 13576 13637 13636\nf 13577 13578 13638\nf 13577 13638 13637\nf 13578 13579 13639\nf 13578 13639 13638\nf 13579 13580 13640\nf 13579 13640 13639\nf 13580 13581 13641\nf 13580 13641 13640\nf 13581 13582 13642\nf 13581 13642 13641\nf 13582 13583 13643\nf 13582 13643 13642\nf 13583 13584 15111\nf 13583 15111 15157\nf 13583 15157 13643\nf 13584 13585 15112\nf 13584 15112 15111\nf 13585 13586 15113\nf 13585 15113 15112\nf 13586 13587 15114\nf 13586 15114 15113\nf 13587 13588 15115\nf 13587 15115 15114\nf 13588 13589 15116\nf 13588 15116 15115\nf 13589 13590 15117\nf 13589 15117 15116\nf 13590 15118 15119\nf 13590 15119 15117\nf 13591 13592 15133\nf 13591 15131 15098\nf 13591 15133 15131\nf 13592 13593 15134\nf 13592 15134 15133\nf 13593 13594 15135\nf 13593 15135 15134\nf 13594 13595 15136\nf 13594 15136 15135\nf 13595 13596 13644\nf 13595 13644 15137\nf 13595 15137 15136\nf 13596 13597 13644\nf 13597 13598 13645\nf 13597 13645 13644\nf 13598 13599 13646\nf 13598 13646 13645\nf 13599 13600 13647\nf 13599 13647 13646\nf 13600 13601 13648\nf 13600 13648 13647\nf 13601 13602 13649\nf 13601 13649 13648\nf 13602 13603 13650\nf 13602 13650 13649\nf 13603 13604 13651\nf 13603 13651 13650\nf 13604 13605 13652\nf 13604 13652 13651\nf 13605 13606 13653\nf 13605 13653 13652\nf 13606 13607 13654\nf 13606 13654 13653\nf 13607 13608 13655\nf 13607 13655 13654\nf 13608 13609 13656\nf 13608 13656 13655\nf 13609 13610 13657\nf 13609 13657 13656\nf 13610 13611 13658\nf 13610 13658 13657\nf 13611 13612 13659\nf 13611 13659 13658\nf 13612 13613 13660\nf 13612 13660 13659\nf 13613 13614 13661\nf 13613 13661 13660\nf 13614 13615 13662\nf 13614 13662 13661\nf 13615 13616 13663\nf 13615 13663 13662\nf 13616 13617 13664\nf 13616 13664 13663\nf 13617 13618 13665\nf 13617 13665 13664\nf 13618 15138 15139\nf 13618 15139 15187\nf 13618 15187 13665\nf 13619 13666 15193\nf 13619 15193 15143\nf 13620 13621 13667\nf 13621 13668 13667\nf 13621 15144 15194\nf 13621 15194 13668\nf 13622 13623 15151\nf 13622 15149 15110\nf 13622 15151 15149\nf 13623 13624 15152\nf 13623 15152 15151\nf 13624 13625 13669\nf 13624 13669 15153\nf 13624 15153 15152\nf 13625 13626 13669\nf 13626 13627 13670\nf 13626 13670 13669\nf 13627 13628 13671\nf 13627 13671 13670\nf 13628 13629 13672\nf 13628 13672 13671\nf 13629 13630 13673\nf 13629 13673 13672\nf 13630 13631 13674\nf 13630 13674 13673\nf 13631 13632 13675\nf 13631 13675 13674\nf 13632 13633 13676\nf 13632 13676 13675\nf 13633 13634 13677\nf 13633 13677 13676\nf 13634 13635 13678\nf 13634 13678 13677\nf 13635 13636 13679\nf 13635 13679 13678\nf 13636 13637 13680\nf 13636 13680 13679\nf 13637 13638 13681\nf 13637 13681 13680\nf 13638 13639 13682\nf 13638 13682 13681\nf 13639 13640 13683\nf 13639 13683 13682\nf 13640 13641 15154\nf 13640 15154 15209\nf 13640 15209 13683\nf 13641 13642 15155\nf 13641 15155 15154\nf 13642 13643 15156\nf 13642 15156 15155\nf 13643 15157 15158\nf 13643 15158 15156\nf 13644 13645 15185\nf 13644 15183 15137\nf 13644 15185 15183\nf 13645 13646 13684\nf 13645 13684 15186\nf 13645 15186 15185\nf 13646 13647 13684\nf 13647 13648 13685\nf 13647 13685 13684\nf 13648 13649 13686\nf 13648 13686 13685\nf 13649 13650 13687\nf 13649 13687 13686\nf 13650 13651 13688\nf 13650 13688 13687\nf 13651 13652 13689\nf 13651 13689 13688\nf 13652 13653 13690\nf 13652 13690 13689\nf 13653 13654 13691\nf 13653 13691 13690\nf 13654 13655 13692\nf 13654 13692 13691\nf 13655 13656 13693\nf 13655 13693 13692\nf 13656 13657 13694\nf 13656 13694 13693\nf 13657 13658 13695\nf 13657 13695 13694\nf 13658 13659 13696\nf 13658 13696 13695\nf 13659 13660 13697\nf 13659 13697 13696\nf 13660 13661 13698\nf 13660 13698 13697\nf 13661 13662 13699\nf 13661 13699 13698\nf 13662 13663 13700\nf 13662 13700 13699\nf 13663 13664 13701\nf 13663 13701 13700\nf 13664 13665 13702\nf 13664 13702 13701\nf 13665 15187 15188\nf 13665 15188 15251\nf 13665 15251 13702\nf 13666 13703 15258\nf 13666 15258 15193\nf 13667 13668 13704\nf 13668 13705 13704\nf 13668 15194 15259\nf 13668 15259 13705\nf 13669 13670 15203\nf 13669 15201 15153\nf 13669 15203 15201\nf 13670 13671 13706\nf 13670 13706 15204\nf 13670 15204 15203\nf 13671 13672 13706\nf 13672 13673 13707\nf 13672 13707 13706\nf 13673 13674 13708\nf 13673 13708 13707\nf 13674 13675 13709\nf 13674 13709 13708\nf 13675 13676 13710\nf 13675 13710 13709\nf 13676 13677 13711\nf 13676 13711 13710\nf 13677 13678 13712\nf 13677 13712 13711\nf 13678 13679 13713\nf 13678 13713 13712\nf 13679 13680 15205\nf 13679 15205 15277\nf 13679 15277 13713\nf 13680 13681 15206\nf 13680 15206 15205\nf 13681 13682 15207\nf 13681 15207 15206\nf 13682 13683 15208\nf 13682 15208 15207\nf 13683 15209 15210\nf 13683 15210 15208\nf 13684 13685 15243\nf 13684 15241 15186\nf 13684 15243 15241\nf 13685 13686 13714\nf 13685 13714 15244\nf 13685 15244 15243\nf 13686 13687 13714\nf 13687 13688 13715\nf 13687 13715 13714\nf 13688 13689 13716\nf 13688 13716 13715\nf 13689 13690 13717\nf 13689 13717 13716\nf 13690 13691 13718\nf 13690 13718 13717\nf 13691 13692 13719\nf 13691 13719 13718\nf 13692 13693 13720\nf 13692 13720 13719\nf 13693 13694 13721\nf 13693 13721 13720\nf 13694 13695 15245\nf 13694 15245 15325\nf 13694 15325 13721\nf 13695 13696 15246\nf 13695 15246 15245\nf 13696 13697 13722\nf 13696 13722 15247\nf 13696 15247 15246\nf 13697 13698 13722\nf 13698 13699 13723\nf 13698 13723 13722\nf 13699 13700 15248\nf 13699 15248 15332\nf 13699 15332 13723\nf 13700 13701 15249\nf 13700 15249 15248\nf 13701 13702 15250\nf 13701 15250 15249\nf 13702 15251 15252\nf 13702 15252 15250\nf 13703 13724 15343\nf 13703 15343 15258\nf 13704 13705 13725\nf 13705 13726 13725\nf 13705 15259 15344\nf 13705 15344 13726\nf 13706 13707 15270\nf 13706 15268 15204\nf 13706 15270 15268\nf 13707 13708 15271\nf 13707 15271 15270\nf 13708 13709 15272\nf 13708 15272 15271\nf 13709 13710 15273\nf 13709 15273 15272\nf 13710 13711 15274\nf 13710 15274 15273\nf 13711 13712 15275\nf 13711 15275 15274\nf 13712 13713 15276\nf 13712 15276 15275\nf 13713 15277 15278\nf 13713 15278 15276\nf 13714 13715 15318\nf 13714 15316 15244\nf 13714 15318 15316\nf 13715 13716 15319\nf 13715 15319 15318\nf 13716 13717 15320\nf 13716 15320 15319\nf 13717 13718 15321\nf 13717 15321 15320\nf 13718 13719 15322\nf 13718 15322 15321\nf 13719 13720 15323\nf 13719 15323 15322\nf 13720 13721 15324\nf 13720 15324 15323\nf 13721 15325 15326\nf 13721 15326 15324\nf 13722 13723 15331\nf 13722 15329 15247\nf 13722 15331 15329\nf 13723 15332 15333\nf 13723 15333 15331\nf 13724 13727 15421\nf 13724 15421 15343\nf 13725 13726 13728\nf 13726 13729 13728\nf 13726 15344 15422\nf 13726 15422 13729\nf 13727 13730 15500\nf 13727 15500 15421\nf 13728 13729 13731\nf 13729 13732 13731\nf 13729 15422 15501\nf 13729 15501 13732\nf 13730 13733 15579\nf 13730 15579 15500\nf 13731 13732 13734\nf 13732 13736 13734\nf 13732 15501 15580\nf 13732 15580 13736\nf 13733 13737 15653\nf 13733 15653 15579\nf 13734 13736 13735\nf 13735 13736 13738\nf 13736 15580 13738\nf 13737 13739 15725\nf 13737 15725 15653\nf 13738 15580 15654\nf 13738 15654 13740\nf 13739 13741 15789\nf 13739 15789 15725\nf 13740 15654 15726\nf 13740 15726 13742\nf 13741 13743 15797\nf 13741 15797 15789\nf 13742 15726 15790\nf 13742 15790 13744\nf 13743 13745 15799\nf 13743 15799 15797\nf 13744 15790 15798\nf 13744 15798 13746\nf 13745 13747 15799\nf 13746 15798 15801\nf 13746 15801 13750\nf 13747 13748 13749\nf 13747 13749 15799\nf 13748 13751 15802\nf 13748 15802 13749\nf 13749 15800 15799\nf 13749 15802 15800\nf 13750 15801 15803\nf 13750 15803 13753\nf 13751 13752 15804\nf 13751 15804 15802\nf 13752 13755 15808\nf 13752 15805 15804\nf 13752 15808 15805\nf 13753 15803 15806\nf 13753 15806 13757\nf 13754 13804 15831\nf 13754 15807 15809\nf 13754 15809 13756\nf 13754 15831 15807\nf 13755 13756 15808\nf 13756 15809 15808\nf 13757 15806 15810\nf 13757 15810 13806\nf 13758 13843 13845\nf 13758 13845 13846\nf 13758 13846 13759\nf 13759 13846 13847\nf 13759 13847 13760\nf 13760 13847 13848\nf 13760 13848 13761\nf 13761 13848 13849\nf 13761 13849 13762\nf 13762 13849 13850\nf 13762 13850 13763\nf 13763 13850 13851\nf 13763 13851 13764\nf 13764 13851 13852\nf 13764 13852 13765\nf 13765 13852 13853\nf 13765 13853 13766\nf 13766 13853 13854\nf 13766 13854 13767\nf 13767 13854 13855\nf 13767 13855 13768\nf 13768 13855 13856\nf 13768 13856 13769\nf 13769 13856 13858\nf 13769 13858 13770\nf 13770 13858 13857\nf 13771 13859 13861\nf 13771 13861 13862\nf 13771 13862 13772\nf 13772 13862 13863\nf 13772 13863 13773\nf 13773 13863 13864\nf 13773 13864 13774\nf 13774 13864 13865\nf 13774 13865 13775\nf 13775 13865 13866\nf 13775 13866 13776\nf 13776 13866 13867\nf 13776 13867 13777\nf 13777 13867 13868\nf 13777 13868 13778\nf 13778 13868 13869\nf 13778 13869 13779\nf 13779 13869 13870\nf 13779 13870 13780\nf 13780 13870 13871\nf 13780 13871 13781\nf 13781 13871 13872\nf 13781 13872 13782\nf 13782 13872 13873\nf 13782 13873 13783\nf 13783 13873 15898\nf 13783 15811 13784\nf 13783 15898 15811\nf 13784 15811 15812\nf 13784 15812 13785\nf 13785 15812 15813\nf 13785 15813 13786\nf 13786 15813 15814\nf 13786 15814 13787\nf 13787 15814 15815\nf 13787 15815 13788\nf 13788 15815 15816\nf 13788 15816 13789\nf 13789 15816 15817\nf 13789 15817 13790\nf 13790 15817 15818\nf 13790 15818 13791\nf 13791 15818 15819\nf 13791 15819 13792\nf 13792 15819 15820\nf 13792 15820 13793\nf 13793 15820 15821\nf 13793 15821 13794\nf 13794 15821 15822\nf 13794 15822 13795\nf 13795 15822 15823\nf 13795 15823 13796\nf 13796 15823 15824\nf 13796 15824 13797\nf 13797 15824 15825\nf 13797 15825 13798\nf 13798 15825 15826\nf 13798 15826 13799\nf 13799 15826 15827\nf 13799 15827 13800\nf 13800 15827 15828\nf 13800 15828 13801\nf 13801 15828 15829\nf 13801 15829 13802\nf 13802 15829 15830\nf 13802 15830 13803\nf 13803 15830 15832\nf 13803 15832 13805\nf 13804 13805 15831\nf 13805 15832 15831\nf 13806 15810 15833\nf 13806 15833 13874\nf 13807 13876 13878\nf 13807 13878 15834\nf 13807 15834 15835\nf 13807 15835 15836\nf 13807 15836 13808\nf 13808 15836 15837\nf 13808 15837 13809\nf 13809 15837 15838\nf 13809 15838 13810\nf 13810 15838 15839\nf 13810 15839 13811\nf 13811 15839 15840\nf 13811 15840 13812\nf 13812 15840 15841\nf 13812 15841 13813\nf 13813 15841 15842\nf 13813 15842 13814\nf 13814 15842 15843\nf 13814 15843 13815\nf 13815 15843 15844\nf 13815 15844 13816\nf 13816 15844 15845\nf 13816 15845 13817\nf 13817 15845 15846\nf 13817 15846 13818\nf 13818 15846 15847\nf 13818 15847 13819\nf 13819 15847 15848\nf 13819 15848 13820\nf 13820 15848 15849\nf 13820 15849 13821\nf 13821 15849 15850\nf 13821 15850 13822\nf 13822 15850 15851\nf 13822 15851 13823\nf 13823 15851 15852\nf 13823 15852 13824\nf 13824 15852 15853\nf 13824 15853 13825\nf 13825 15853 15854\nf 13825 15854 13826\nf 13826 15854 15855\nf 13826 15855 13827\nf 13827 15855 15856\nf 13827 15856 13828\nf 13828 15856 15857\nf 13828 15857 13829\nf 13829 15857 15858\nf 13829 15858 13830\nf 13830 15858 15859\nf 13830 15859 13831\nf 13831 15859 15860\nf 13831 15860 13832\nf 13832 15860 15861\nf 13832 15861 13833\nf 13833 15861 15862\nf 13833 15862 13834\nf 13834 15862 15863\nf 13834 15863 13835\nf 13835 15863 15864\nf 13835 15864 13836\nf 13836 15864 15865\nf 13836 15865 13837\nf 13837 15865 15866\nf 13837 15866 13838\nf 13838 15866 15867\nf 13838 15867 13839\nf 13839 15867 15868\nf 13839 15868 13840\nf 13840 15868 15869\nf 13840 15869 13841\nf 13841 15869 15870\nf 13841 15870 13842\nf 13842 15870 15871\nf 13842 15871 13844\nf 13843 13844 13845\nf 13844 15871 15872\nf 13844 15872 13845\nf 13845 15872 13846\nf 13846 15872 15873\nf 13846 15873 13847\nf 13847 15873 15874\nf 13847 15874 13848\nf 13848 15874 15875\nf 13848 15875 13849\nf 13849 15875 15876\nf 13849 15876 13850\nf 13850 15876 15877\nf 13850 15877 13851\nf 13851 15877 15878\nf 13851 15878 13852\nf 13852 15878 15879\nf 13852 15879 13853\nf 13853 15879 15880\nf 13853 15880 13854\nf 13854 15880 15881\nf 13854 15881 13855\nf 13855 15881 15882\nf 13855 15882 13856\nf 13856 15882 15883\nf 13856 15883 13858\nf 13857 13858 15884\nf 13857 15884 13860\nf 13858 15883 15884\nf 13859 13860 13861\nf 13860 15884 15885\nf 13860 15885 15886\nf 13860 15886 13861\nf 13861 15886 13862\nf 13862 15886 15887\nf 13862 15887 13863\nf 13863 15887 15888\nf 13863 15888 13864\nf 13864 15888 15889\nf 13864 15889 13865\nf 13865 15889 15890\nf 13865 15890 13866\nf 13866 15890 15891\nf 13866 15891 13867\nf 13867 15891 15892\nf 13867 15892 13868\nf 13868 15892 15893\nf 13868 15893 13869\nf 13869 15893 15894\nf 13869 15894 13870\nf 13870 15894 15895\nf 13870 15895 13871\nf 13871 15895 15896\nf 13871 15896 13872\nf 13872 15896 15897\nf 13872 15897 13873\nf 13873 15897 15899\nf 13873 15899 15898\nf 13874 15833 15904\nf 13874 15904 13879\nf 13875 13880 13882\nf 13875 13882 15905\nf 13875 15905 15907\nf 13875 15907 13877\nf 13876 13877 13878\nf 13877 15906 13878\nf 13877 15907 15906\nf 13878 15906 15834\nf 13879 15904 15909\nf 13879 15909 13883\nf 13880 13881 13882\nf 13881 13885 13887\nf 13881 13887 15911\nf 13881 15911 13882\nf 13882 15910 15905\nf 13882 15911 15910\nf 13883 15909 15913\nf 13883 15913 15916\nf 13883 15916 13884\nf 13884 13889 13888\nf 13884 15916 13889\nf 13885 13886 13887\nf 13886 13890 15914\nf 13886 15914 13887\nf 13887 15914 15911\nf 13888 13889 13891\nf 13889 13892 13891\nf 13889 15916 15920\nf 13889 15920 13892\nf 13890 13893 15917\nf 13890 15917 15914\nf 13891 13892 13895\nf 13892 13896 13895\nf 13892 15920 15923\nf 13892 15923 13896\nf 13893 13894 15917\nf 13893 13897 13898\nf 13893 13898 13894\nf 13894 13898 15921\nf 13894 15918 15917\nf 13894 15921 15918\nf 13895 13896 13899\nf 13896 13900 13899\nf 13896 15923 15926\nf 13896 15926 13900\nf 13897 13901 13902\nf 13897 13902 13898\nf 13898 13902 15924\nf 13898 15924 15921\nf 13899 13900 13903\nf 13900 13904 13903\nf 13900 15926 15929\nf 13900 15929 13904\nf 13901 13905 13906\nf 13901 13906 13902\nf 13902 13906 15927\nf 13902 15927 15924\nf 13903 13904 13907\nf 13904 13908 13907\nf 13904 15929 15932\nf 13904 15932 13908\nf 13905 13909 13910\nf 13905 13910 13906\nf 13906 13910 15930\nf 13906 15930 15927\nf 13907 13908 13911\nf 13908 13912 13911\nf 13908 15932 15935\nf 13908 15935 13912\nf 13909 13913 13914\nf 13909 13914 13910\nf 13910 13914 15933\nf 13910 15933 15930\nf 13911 13912 15939\nf 13911 15939 13915\nf 13912 15935 15936\nf 13912 15936 15939\nf 13913 13916 13917\nf 13913 13917 13914\nf 13914 13917 15937\nf 13914 15937 15933\nf 13915 15939 13918\nf 13916 13919 13920\nf 13916 13920 13917\nf 13917 13920 15941\nf 13917 15941 15937\nf 13918 15939 15943\nf 13918 15943 13921\nf 13919 13922 13923\nf 13919 13923 13920\nf 13920 13923 15945\nf 13920 15945 15941\nf 13921 15943 15946\nf 13921 15946 13924\nf 13922 13925 13926\nf 13922 13926 13923\nf 13923 13926 15948\nf 13923 15948 15945\nf 13924 15946 15949\nf 13924 15949 13927\nf 13925 13928 13929\nf 13925 13929 13926\nf 13926 13929 15951\nf 13926 15951 15948\nf 13927 15949 15952\nf 13927 15952 13930\nf 13928 13931 15958\nf 13928 15955 13929\nf 13928 15958 15955\nf 13929 15954 15951\nf 13929 15955 15954\nf 13930 15952 15956\nf 13930 15956 13932\nf 13931 13933 15962\nf 13931 15962 15958\nf 13932 15956 15960\nf 13932 15960 13934\nf 13933 13935 15966\nf 13933 15966 15962\nf 13934 15960 15964\nf 13934 15964 13936\nf 13935 13937 15968\nf 13935 15968 15966\nf 13936 15964 15967\nf 13936 15967 13938\nf 13937 13939 15970\nf 13937 15970 15968\nf 13938 15967 15969\nf 13938 15969 13940\nf 13939 13942 15972\nf 13939 15972 15970\nf 13940 15969 15971\nf 13940 15971 15973\nf 13940 15973 13941\nf 13941 13944 13943\nf 13941 15973 13944\nf 13942 13945 15974\nf 13942 15974 15972\nf 13943 13944 13946\nf 13944 13947 13946\nf 13944 15973 15975\nf 13944 15975 13947\nf 13945 13948 15976\nf 13945 15976 15974\nf 13946 13947 13949\nf 13947 13950 13949\nf 13947 15975 15977\nf 13947 15977 13950\nf 13948 13951 15978\nf 13948 15978 15976\nf 13949 13950 13952\nf 13950 13953 13952\nf 13950 15977 15979\nf 13950 15979 13953\nf 13951 13954 15980\nf 13951 15980 15978\nf 13952 13953 13955\nf 13953 13956 13955\nf 13953 15979 15981\nf 13953 15981 13956\nf 13954 13957 15982\nf 13954 15982 15980\nf 13955 13956 13958\nf 13956 13959 13958\nf 13956 15981 15983\nf 13956 15983 13959\nf 13957 13960 15985\nf 13957 15985 15982\nf 13958 13959 13961\nf 13959 13962 13961\nf 13959 15983 15986\nf 13959 15986 13962\nf 13960 13963 15988\nf 13960 15988 15985\nf 13961 13962 13964\nf 13962 13965 13964\nf 13962 15986 15991\nf 13962 15991 13965\nf 13963 13966 15988\nf 13964 13965 13968\nf 13965 13969 13968\nf 13965 15991 15994\nf 13965 15994 13969\nf 13966 13967 15988\nf 13966 13970 13972\nf 13966 13972 13967\nf 13967 13972 15993\nf 13967 15989 15988\nf 13967 15993 15989\nf 13968 13969 13973\nf 13969 13974 13973\nf 13969 15994 15997\nf 13969 15997 13974\nf 13970 13971 13972\nf 13971 13975 15996\nf 13971 15996 13972\nf 13972 15996 15993\nf 13973 13974 13976\nf 13974 13977 13976\nf 13974 15997 16000\nf 13974 16000 13977\nf 13975 13978 16002\nf 13975 15999 15996\nf 13975 16002 15999\nf 13976 13977 13979\nf 13977 13980 13979\nf 13977 16000 16004\nf 13977 16004 13980\nf 13978 13981 16006\nf 13978 16006 16002\nf 13979 13980 13982\nf 13980 13983 13982\nf 13980 16004 16009\nf 13980 16009 13983\nf 13981 13984 16006\nf 13982 13983 13986\nf 13983 13987 13986\nf 13983 16009 16012\nf 13983 16012 13987\nf 13984 13985 16006\nf 13984 13988 13989\nf 13984 13989 13985\nf 13985 13989 16011\nf 13985 16007 16006\nf 13985 16011 16007\nf 13986 13987 13990\nf 13987 13991 13990\nf 13987 16012 16015\nf 13987 16015 13991\nf 13988 13992 13993\nf 13988 13993 13989\nf 13989 13993 16014\nf 13989 16014 16011\nf 13990 13991 13994\nf 13991 13995 13994\nf 13991 16015 16018\nf 13991 16018 13995\nf 13992 13996 13998\nf 13992 13998 13993\nf 13993 13998 16017\nf 13993 16017 16014\nf 13994 13995 13999\nf 13995 14000 13999\nf 13995 16018 16020\nf 13995 16020 14000\nf 13996 13997 13998\nf 13997 14001 16019\nf 13997 16019 13998\nf 13998 16019 16017\nf 13999 14000 14002\nf 14000 14003 14002\nf 14000 16020 16022\nf 14000 16022 14003\nf 14001 14004 16023\nf 14001 16021 16019\nf 14001 16023 16021\nf 14002 14003 14005\nf 14003 14006 14005\nf 14003 16022 16024\nf 14003 16024 14006\nf 14004 14007 16026\nf 14004 16026 16023\nf 14005 14006 16027\nf 14005 16027 14008\nf 14006 16024 16025\nf 14006 16025 16027\nf 14007 14009 16029\nf 14007 16029 16026\nf 14008 16027 14010\nf 14009 14011 16032\nf 14009 16032 16029\nf 14010 16027 16030\nf 14010 16030 14012\nf 14011 14013 16035\nf 14011 16035 16032\nf 14012 16030 16033\nf 14012 16033 14014\nf 14013 14015 16038\nf 14013 16038 16035\nf 14014 16033 16036\nf 14014 16036 14016\nf 14015 14017 16041\nf 14015 16041 16038\nf 14016 16036 16039\nf 14016 16039 14018\nf 14017 14019 16044\nf 14017 16044 16041\nf 14018 16039 16042\nf 14018 16042 14020\nf 14019 14021 16048\nf 14019 16048 16044\nf 14020 16042 16046\nf 14020 16046 14022\nf 14021 14023 16048\nf 14022 16046 16051\nf 14022 16051 14025\nf 14023 14024 16048\nf 14023 14027 14028\nf 14023 14028 14024\nf 14024 14028 16053\nf 14024 16049 16048\nf 14024 16053 16049\nf 14025 16051 16054\nf 14025 16054 16058\nf 14025 16058 14026\nf 14026 14030 14029\nf 14026 16058 14030\nf 14027 14031 14032\nf 14027 14032 14028\nf 14028 14032 16056\nf 14028 16056 16053\nf 14029 14030 14033\nf 14030 14034 14033\nf 14030 16058 16062\nf 14030 16062 14034\nf 14031 14035 14036\nf 14031 14036 14032\nf 14032 14036 16060\nf 14032 16060 16056\nf 14033 14034 14037\nf 14034 14038 14037\nf 14034 16062 16066\nf 14034 16066 14038\nf 14035 14039 14040\nf 14035 14040 14036\nf 14036 14040 16064\nf 14036 16064 16060\nf 14037 14038 14041\nf 14038 14042 14041\nf 14038 16066 16070\nf 14038 16070 14042\nf 14039 14043 14044\nf 14039 14044 14040\nf 14040 14044 16068\nf 14040 16068 16064\nf 14041 14042 14045\nf 14042 14046 14045\nf 14042 16070 16074\nf 14042 16074 14046\nf 14043 14047 14048\nf 14043 14048 14044\nf 14044 14048 16072\nf 14044 16072 16068\nf 14045 14046 14049\nf 14046 14050 14049\nf 14046 16074 16078\nf 14046 16078 14050\nf 14047 14051 14052\nf 14047 14052 14048\nf 14048 14052 16076\nf 14048 16076 16072\nf 14049 14050 14053\nf 14050 14054 14053\nf 14050 16078 16082\nf 14050 16082 14054\nf 14051 14055 14057\nf 14051 14057 14052\nf 14052 14057 16080\nf 14052 16080 16076\nf 14053 14054 14058\nf 14054 14059 14058\nf 14054 16082 16086\nf 14054 16086 14059\nf 14055 14056 14057\nf 14056 14060 16084\nf 14056 16084 14057\nf 14057 16084 16080\nf 14058 14059 14061\nf 14059 14062 14061\nf 14059 16086 16089\nf 14059 16089 14062\nf 14060 14063 16091\nf 14060 16087 16084\nf 14060 16091 16087\nf 14061 14062 16093\nf 14061 16093 14064\nf 14062 16089 16090\nf 14062 16090 16093\nf 14063 14065 16095\nf 14063 16095 16091\nf 14064 16093 14066\nf 14065 14067 16099\nf 14065 16099 16095\nf 14066 16093 16097\nf 14066 16097 14068\nf 14067 14069 16099\nf 14068 16097 16102\nf 14068 16102 14071\nf 14069 14070 16099\nf 14069 14072 14073\nf 14069 14073 14070\nf 14070 14073 16104\nf 14070 16100 16099\nf 14070 16104 16100\nf 14071 16102 16105\nf 14071 16105 14074\nf 14072 14076 14077\nf 14072 14077 14073\nf 14073 14077 16107\nf 14073 16107 16104\nf 14074 16105 16109\nf 14074 16109 16113\nf 14074 16113 14075\nf 14075 14079 14078\nf 14075 16113 14079\nf 14076 14080 14081\nf 14076 14081 14077\nf 14077 14081 16111\nf 14077 16111 16107\nf 14078 14079 14082\nf 14079 14083 14082\nf 14079 16113 16117\nf 14079 16117 14083\nf 14080 14084 14085\nf 14080 14085 14081\nf 14081 14085 16115\nf 14081 16115 16111\nf 14082 14083 14086\nf 14083 14087 14086\nf 14083 16117 16121\nf 14083 16121 14087\nf 14084 14088 14089\nf 14084 14089 14085\nf 14085 14089 16119\nf 14085 16119 16115\nf 14086 14087 14090\nf 14087 14091 14090\nf 14087 16121 16124\nf 14087 16124 14091\nf 14088 14092 14093\nf 14088 14093 14089\nf 14089 14093 16122\nf 14089 16122 16119\nf 14090 14091 14094\nf 14091 14095 14094\nf 14091 16124 16127\nf 14091 16127 14095\nf 14092 14096 14098\nf 14092 14098 14093\nf 14093 14098 16125\nf 14093 16125 16122\nf 14094 14095 14099\nf 14095 14100 14099\nf 14095 16127 16130\nf 14095 16130 14100\nf 14096 14097 14098\nf 14097 14101 16128\nf 14097 16128 14098\nf 14098 16128 16125\nf 14099 14100 16135\nf 14099 16135 14102\nf 14100 16130 16131\nf 14100 16131 16135\nf 14101 14103 16132\nf 14101 16132 16128\nf 14102 16135 14105\nf 14103 14104 16132\nf 14103 14106 16141\nf 14103 16138 14104\nf 14103 16141 16138\nf 14104 16133 16132\nf 14104 16137 16133\nf 14104 16138 16137\nf 14105 16135 16139\nf 14105 16139 14107\nf 14106 14108 16145\nf 14106 16145 16141\nf 14107 16139 16143\nf 14107 16143 14109\nf 14108 14110 16149\nf 14108 16149 16145\nf 14109 16143 16147\nf 14109 16147 14111\nf 14110 14112 16153\nf 14110 16153 16149\nf 14111 16147 16151\nf 14111 16151 14113\nf 14112 14114 16157\nf 14112 16157 16153\nf 14113 16151 16155\nf 14113 16155 14115\nf 14114 14117 16157\nf 14115 16155 16160\nf 14115 16160 16162\nf 14115 16162 14116\nf 14116 14120 14119\nf 14116 16162 14120\nf 14117 14118 16157\nf 14117 14121 14122\nf 14117 14122 14118\nf 14118 14122 16161\nf 14118 16158 16157\nf 14118 16161 16158\nf 14119 14120 14123\nf 14120 14124 14123\nf 14120 16162 16164\nf 14120 16164 14124\nf 14121 14125 14126\nf 14121 14126 14122\nf 14122 14126 16163\nf 14122 16163 16161\nf 14123 14124 14127\nf 14124 14128 14127\nf 14124 16164 16167\nf 14124 16167 14128\nf 14125 14129 16168\nf 14125 16166 14126\nf 14125 16168 16166\nf 14126 16165 16163\nf 14126 16166 16165\nf 14127 14128 14130\nf 14128 14131 14130\nf 14128 16167 16171\nf 14128 16171 14131\nf 14129 14132 16168\nf 14130 14131 14134\nf 14131 14135 14134\nf 14131 16171 16173\nf 14131 16173 14135\nf 14132 14133 16168\nf 14132 14136 14138\nf 14132 14138 14133\nf 14133 14138 16172\nf 14133 16169 16168\nf 14133 16172 16169\nf 14134 14135 14139\nf 14135 14140 14139\nf 14135 16173 16175\nf 14135 16175 14140\nf 14136 14137 14138\nf 14137 14141 16174\nf 14137 16174 14138\nf 14138 16174 16172\nf 14139 14140 14142\nf 14140 14143 14142\nf 14140 16175 16177\nf 14140 16177 14143\nf 14141 14144 16178\nf 14141 16176 16174\nf 14141 16178 16176\nf 14142 14143 14145\nf 14143 14146 14145\nf 14143 16177 16179\nf 14143 16179 14146\nf 14144 14147 16181\nf 14144 16181 16178\nf 14145 14146 14148\nf 14146 14150 14148\nf 14146 16179 16182\nf 14146 16182 14150\nf 14147 14151 16184\nf 14147 16184 16181\nf 14148 14150 14149\nf 14149 14150 14153\nf 14150 16182 14153\nf 14151 14152 16184\nf 14152 14154 16189\nf 14152 16185 16184\nf 14152 16189 16185\nf 14153 16182 16187\nf 14153 16187 14155\nf 14154 14156 16192\nf 14154 16192 16189\nf 14155 16187 16190\nf 14155 16190 14157\nf 14156 14158 16192\nf 14157 16190 16195\nf 14157 16195 14161\nf 14158 14159 14160\nf 14158 14160 16192\nf 14159 14162 16197\nf 14159 16197 14160\nf 14160 16193 16192\nf 14160 16197 16193\nf 14161 16195 16198\nf 14161 16198 14163\nf 14162 14164 16200\nf 14162 16200 16197\nf 14163 16198 16203\nf 14163 16203 14167\nf 14164 14165 14166\nf 14164 14166 16200\nf 14165 14168 14170\nf 14165 14170 16206\nf 14165 16206 14166\nf 14166 16201 16200\nf 14166 16205 16201\nf 14166 16206 16205\nf 14167 16203 16208\nf 14167 16208 14171\nf 14168 14169 14170\nf 14169 14172 16210\nf 14169 16210 14170\nf 14170 16210 16206\nf 14171 16208 16212\nf 14171 16212 14173\nf 14172 14174 16214\nf 14172 16214 16210\nf 14173 16212 16217\nf 14173 16217 14177\nf 14174 14175 14176\nf 14174 14176 16214\nf 14175 14179 14180\nf 14175 14180 16220\nf 14175 16220 14176\nf 14176 16215 16214\nf 14176 16219 16215\nf 14176 16220 16219\nf 14177 16217 16222\nf 14177 16222 16226\nf 14177 16226 14178\nf 14178 14182 14181\nf 14178 16226 14182\nf 14179 14183 14184\nf 14179 14184 14180\nf 14180 14184 16224\nf 14180 16224 16220\nf 14181 14182 14185\nf 14182 14186 14185\nf 14182 16226 16230\nf 14182 16230 14186\nf 14183 14187 14189\nf 14183 14189 14184\nf 14184 14189 16228\nf 14184 16228 16224\nf 14185 14186 16237\nf 14185 16237 14190\nf 14186 16230 16231\nf 14186 16231 16237\nf 14187 14188 14189\nf 14188 14191 14192\nf 14188 14192 16235\nf 14188 16235 14189\nf 14189 16234 16228\nf 14189 16235 16234\nf 14190 16237 14194\nf 14191 14193 16241\nf 14191 16241 14192\nf 14192 16239 16235\nf 14192 16241 16239\nf 14193 14195 14196\nf 14193 14196 16245\nf 14193 16245 16241\nf 14194 16237 16242\nf 14194 16242 14197\nf 14195 14200 14202\nf 14195 14202 14196\nf 14196 14202 16245\nf 14197 16242 16247\nf 14197 16247 16248\nf 14197 16248 14198\nf 14198 16248 16250\nf 14198 16250 14199\nf 14199 16250 16252\nf 14199 16252 14203\nf 14200 14201 14202\nf 14201 14207 16255\nf 14201 16255 14202\nf 14202 16255 16245\nf 14203 14205 14204\nf 14203 16252 14205\nf 14204 14205 16258\nf 14204 16258 14206\nf 14205 16252 16257\nf 14205 16257 16258\nf 14206 16258 16261\nf 14206 16261 14208\nf 14207 14209 16260\nf 14207 16260 16255\nf 14208 14211 14210\nf 14208 16261 14211\nf 14209 14210 14211\nf 14209 14211 16260\nf 14211 16261 16260\nf 14212 14213 16263\nf 14212 14232 14231\nf 14212 16263 16278\nf 14212 16278 14232\nf 14213 14214 16263\nf 14214 14215 16264\nf 14214 16264 16263\nf 14215 14216 16265\nf 14215 16265 16264\nf 14216 14217 16266\nf 14216 16266 16265\nf 14217 14218 16267\nf 14217 16267 16266\nf 14218 14219 16268\nf 14218 16268 16267\nf 14219 14220 14235\nf 14219 14233 16268\nf 14219 14235 14233\nf 14220 14234 14235\nf 14221 14222 16269\nf 14221 14240 14238\nf 14221 16269 16286\nf 14221 16286 14240\nf 14222 14223 16269\nf 14223 14224 16270\nf 14223 16270 16269\nf 14224 14225 16271\nf 14224 16271 16270\nf 14225 14226 16272\nf 14225 16272 16271\nf 14226 14227 16273\nf 14226 16273 16272\nf 14227 14228 16274\nf 14227 16274 16273\nf 14228 14229 16275\nf 14228 16275 16274\nf 14229 14230 16276\nf 14229 16276 16275\nf 14230 14241 16277\nf 14230 16277 16276\nf 14231 14232 16294\nf 14231 16294 14243\nf 14232 16278 16279\nf 14232 16279 16294\nf 14233 14235 16283\nf 14233 16281 16268\nf 14233 16283 16281\nf 14234 14236 16284\nf 14234 16284 14235\nf 14235 16284 16283\nf 14236 14237 16285\nf 14236 16285 16284\nf 14237 14245 14246\nf 14237 14246 16285\nf 14238 14240 14239\nf 14239 14240 16287\nf 14239 14251 14250\nf 14239 16287 14251\nf 14240 16286 16287\nf 14241 14242 14253\nf 14241 14253 16305\nf 14241 16292 16277\nf 14241 16305 16292\nf 14242 14252 14253\nf 14243 16294 16308\nf 14243 16308 14244\nf 14244 14256 14255\nf 14244 16308 14256\nf 14245 14247 16299\nf 14245 16299 14246\nf 14246 16297 16285\nf 14246 16299 16297\nf 14247 14248 16300\nf 14247 16300 16299\nf 14248 14249 14259\nf 14248 14257 16300\nf 14248 14259 14257\nf 14249 14258 14259\nf 14250 14251 16316\nf 14250 16316 14260\nf 14251 16287 16301\nf 14251 16301 16302\nf 14251 16302 16316\nf 14252 14254 16307\nf 14252 16307 14253\nf 14253 16307 16305\nf 14254 14261 14262\nf 14254 14262 16318\nf 14254 16318 16307\nf 14255 14256 16320\nf 14255 16320 14263\nf 14256 16308 16309\nf 14256 16309 16320\nf 14257 14259 14265\nf 14257 14265 16315\nf 14257 16313 16300\nf 14257 16315 16313\nf 14258 14264 14265\nf 14258 14265 14259\nf 14260 16316 14266\nf 14261 14267 14268\nf 14261 14268 14262\nf 14262 14268 16318\nf 14263 16320 14270\nf 14264 14272 16334\nf 14264 16326 14265\nf 14264 16334 16326\nf 14265 16324 16315\nf 14265 16326 16324\nf 14266 16316 16327\nf 14266 16327 14273\nf 14267 14269 16330\nf 14267 16330 14268\nf 14268 16329 16318\nf 14268 16330 16329\nf 14269 14274 14275\nf 14269 14275 16337\nf 14269 16337 16330\nf 14270 16320 16331\nf 14270 16331 16339\nf 14270 16339 14271\nf 14271 14277 14276\nf 14271 16339 14277\nf 14272 14278 16341\nf 14272 16341 16334\nf 14273 16327 16336\nf 14273 16336 14279\nf 14274 14280 14281\nf 14274 14281 14275\nf 14275 14281 16337\nf 14276 14277 14282\nf 14277 14283 14282\nf 14277 16339 16347\nf 14277 16347 14283\nf 14278 14284 16350\nf 14278 16350 16341\nf 14279 16336 16343\nf 14279 16343 14285\nf 14280 14286 14287\nf 14280 14287 14281\nf 14281 14287 16345\nf 14281 16345 16337\nf 14282 14283 14288\nf 14283 14289 14288\nf 14283 16347 16357\nf 14283 16357 14289\nf 14284 14290 16360\nf 14284 16360 16350\nf 14285 16343 16352\nf 14285 16352 14291\nf 14286 14292 16365\nf 14286 16356 14287\nf 14286 16365 16356\nf 14287 16354 16345\nf 14287 16356 16354\nf 14288 14289 14293\nf 14289 14295 14293\nf 14289 16357 16367\nf 14289 16367 14295\nf 14290 14296 16370\nf 14290 16370 16360\nf 14291 16352 16362\nf 14291 16362 14297\nf 14292 14298 16375\nf 14292 16375 16365\nf 14293 14295 14294\nf 14294 14295 14300\nf 14295 16367 14300\nf 14296 14301 16379\nf 14296 16379 16370\nf 14297 16362 16372\nf 14297 16372 14302\nf 14298 14299 14305\nf 14298 14305 16382\nf 14298 16382 16375\nf 14299 14304 14305\nf 14300 16367 16377\nf 14300 16377 14306\nf 14301 14307 16386\nf 14301 16386 16379\nf 14302 14303 14308\nf 14302 16372 16373\nf 14302 16373 14303\nf 14303 14310 14308\nf 14303 16373 16381\nf 14303 16381 16388\nf 14303 16388 14310\nf 14304 14311 14312\nf 14304 14312 14305\nf 14305 14312 16382\nf 14306 16377 16384\nf 14306 16384 14313\nf 14307 14314 16394\nf 14307 16394 16386\nf 14308 14310 14309\nf 14309 14310 14315\nf 14310 16388 14315\nf 14311 14316 14317\nf 14311 14317 14312\nf 14312 14317 16389\nf 14312 16389 16382\nf 14313 16384 16391\nf 14313 16391 14318\nf 14314 14319 16403\nf 14314 16403 16394\nf 14315 16388 16396\nf 14315 16396 14320\nf 14316 14321 14322\nf 14316 14322 14317\nf 14317 14322 16397\nf 14317 16397 16389\nf 14318 16391 16399\nf 14318 16399 14323\nf 14319 14324 16415\nf 14319 16415 16403\nf 14320 16396 16405\nf 14320 16405 14325\nf 14321 14326 14327\nf 14321 14327 14322\nf 14322 14327 16407\nf 14322 16407 16397\nf 14323 16399 16409\nf 14323 16409 14328\nf 14324 14330 16415\nf 14325 16405 16418\nf 14325 16418 14332\nf 14326 14334 14335\nf 14326 14335 14327\nf 14327 14333 16420\nf 14327 14335 14333\nf 14327 16420 16407\nf 14328 14329 14336\nf 14328 16409 16410\nf 14328 16410 14329\nf 14329 14337 14336\nf 14329 16410 16423\nf 14329 16423 16432\nf 14329 16432 14337\nf 14330 14331 16415\nf 14330 14338 14339\nf 14330 14339 14331\nf 14331 14339 16427\nf 14331 16416 16415\nf 14331 16427 16416\nf 14332 16418 16429\nf 14332 16429 14340\nf 14333 14335 14341\nf 14333 14341 16430\nf 14333 16421 16420\nf 14333 16430 16421\nf 14334 14342 14343\nf 14334 14343 14335\nf 14335 14343 14341\nf 14336 14337 14344\nf 14337 14345 14344\nf 14337 16432 16441\nf 14337 16441 14345\nf 14338 14346 14347\nf 14338 14347 14339\nf 14339 14347 16436\nf 14339 16436 16427\nf 14340 16429 16438\nf 14340 16438 14348\nf 14341 14343 14349\nf 14341 14349 16439\nf 14341 16439 16430\nf 14342 14350 14351\nf 14342 14351 14343\nf 14343 14351 14349\nf 14344 14345 14352\nf 14345 14353 14352\nf 14345 16441 16451\nf 14345 16451 14353\nf 14346 14354 14355\nf 14346 14355 14347\nf 14347 14355 16446\nf 14347 16446 16436\nf 14348 16438 16448\nf 14348 16448 14356\nf 14349 14351 14357\nf 14349 14357 16449\nf 14349 16449 16439\nf 14350 14358 14359\nf 14350 14359 14351\nf 14351 14359 14357\nf 14352 14353 14360\nf 14353 14361 14360\nf 14353 16451 16462\nf 14353 16462 14361\nf 14354 14362 14363\nf 14354 14363 14355\nf 14355 14363 16457\nf 14355 16457 16446\nf 14356 16448 16459\nf 14356 16459 14364\nf 14357 14359 14365\nf 14357 14365 16460\nf 14357 16460 16449\nf 14358 14366 14367\nf 14358 14367 14359\nf 14359 14367 14365\nf 14360 14361 14368\nf 14361 14369 14368\nf 14361 16462 16474\nf 14361 16474 14369\nf 14362 14370 14371\nf 14362 14371 14363\nf 14363 14371 16468\nf 14363 16468 16457\nf 14364 16459 16470\nf 14364 16470 14372\nf 14365 14367 14373\nf 14365 14373 16472\nf 14365 16472 16460\nf 14366 14374 14375\nf 14366 14375 14367\nf 14367 14375 14373\nf 14368 14369 14376\nf 14369 14377 14376\nf 14369 16474 16486\nf 14369 16486 14377\nf 14370 14378 14379\nf 14370 14379 14371\nf 14371 14379 16480\nf 14371 16480 16468\nf 14372 16470 16482\nf 14372 16482 14380\nf 14373 14375 14381\nf 14373 14381 16484\nf 14373 16484 16472\nf 14374 14382 14383\nf 14374 14383 14375\nf 14375 14383 14381\nf 14376 14377 14384\nf 14377 14386 14384\nf 14377 16486 16497\nf 14377 16497 14386\nf 14378 14387 14388\nf 14378 14388 14379\nf 14379 14388 16491\nf 14379 16491 16480\nf 14380 16482 16493\nf 14380 16493 14389\nf 14381 14383 14390\nf 14381 14390 16495\nf 14381 16495 16484\nf 14382 14391 14392\nf 14382 14392 14383\nf 14383 14392 14390\nf 14384 14386 14385\nf 14385 14386 14415\nf 14385 14415 14413\nf 14386 14416 14415\nf 14386 16497 16509\nf 14386 16509 14416\nf 14387 14417 14418\nf 14387 14418 14388\nf 14388 14418 16502\nf 14388 16502 16491\nf 14389 16493 16504\nf 14389 16504 14419\nf 14390 14392 14420\nf 14390 14420 16508\nf 14390 16506 16495\nf 14390 16508 16506\nf 14391 14393 14421\nf 14391 14421 14392\nf 14392 14421 14420\nf 14393 14394 14422\nf 14393 14422 14421\nf 14394 14395 14423\nf 14394 14423 14422\nf 14395 14396 14425\nf 14395 14425 14423\nf 14396 14424 14425\nf 14397 14431 14432\nf 14397 14432 14429\nf 14398 14399 14449\nf 14398 14448 14446\nf 14398 14449 14448\nf 14399 14400 14450\nf 14399 14450 14449\nf 14400 14401 14451\nf 14400 14451 14450\nf 14401 14402 14452\nf 14401 14452 14451\nf 14402 14403 14453\nf 14402 14453 14452\nf 14403 14404 14454\nf 14403 14454 14453\nf 14404 14405 14455\nf 14404 14455 14454\nf 14405 14406 14456\nf 14405 14456 14455\nf 14406 14407 14457\nf 14406 14457 14456\nf 14407 14408 14458\nf 14407 14458 14457\nf 14408 14409 14459\nf 14408 14459 14458\nf 14409 14410 14460\nf 14409 14460 14459\nf 14410 14411 14461\nf 14410 14461 14460\nf 14411 14412 14463\nf 14411 14463 14461\nf 14412 14462 14463\nf 14413 14415 14414\nf 14414 14415 14500\nf 14414 14500 14498\nf 14415 14416 14501\nf 14415 14501 14500\nf 14416 16509 16510\nf 14416 16510 16579\nf 14416 16579 14501\nf 14417 14502 14503\nf 14417 14503 14418\nf 14418 14503 16514\nf 14418 16514 16502\nf 14419 16504 16516\nf 14419 16516 14504\nf 14420 14421 16521\nf 14420 16519 16508\nf 14420 16521 16519\nf 14421 14422 16522\nf 14421 16522 16521\nf 14422 14423 16523\nf 14422 16523 16522\nf 14423 14425 16524\nf 14423 16524 16523\nf 14424 14426 16525\nf 14424 16525 14425\nf 14425 16525 16524\nf 14426 14427 14507\nf 14426 14506 16590\nf 14426 14507 14506\nf 14426 16590 16525\nf 14427 14428 14508\nf 14427 14508 14507\nf 14428 14430 16526\nf 14428 16526 16594\nf 14428 16594 14508\nf 14429 14432 14430\nf 14430 14432 16527\nf 14430 16527 16526\nf 14431 14433 16527\nf 14431 16527 14432\nf 14433 14434 16528\nf 14433 16528 16527\nf 14434 14435 16529\nf 14434 16529 16528\nf 14435 14509 14510\nf 14435 14510 16529\nf 14436 14437 14516\nf 14436 14515 14513\nf 14436 14516 14515\nf 14437 14438 16530\nf 14437 16530 16606\nf 14437 16606 14516\nf 14438 14439 16530\nf 14439 14440 16531\nf 14439 16531 16530\nf 14440 14441 16532\nf 14440 16532 16531\nf 14441 14442 16533\nf 14441 16533 16532\nf 14442 14443 16534\nf 14442 16534 16533\nf 14443 14444 16535\nf 14443 16535 16534\nf 14444 14445 16536\nf 14444 16536 16535\nf 14445 14447 16537\nf 14445 16537 16536\nf 14446 14448 14447\nf 14447 14448 16539\nf 14447 16538 16537\nf 14447 16539 16538\nf 14448 14449 16539\nf 14449 14450 16540\nf 14449 16540 16539\nf 14450 14451 16541\nf 14450 16541 16540\nf 14451 14452 16542\nf 14451 16542 16541\nf 14452 14453 16543\nf 14452 16543 16542\nf 14453 14454 16544\nf 14453 16544 16543\nf 14454 14455 16545\nf 14454 16545 16544\nf 14455 14456 16546\nf 14455 16546 16545\nf 14456 14457 16547\nf 14456 16547 16546\nf 14457 14458 16548\nf 14457 16548 16547\nf 14458 14459 16549\nf 14458 16549 16548\nf 14459 14460 16550\nf 14459 16550 16549\nf 14460 14461 16551\nf 14460 16551 16550\nf 14461 14463 16552\nf 14461 16552 16551\nf 14462 14464 16553\nf 14462 16553 14463\nf 14463 16553 16552\nf 14464 14465 16554\nf 14464 16554 16553\nf 14465 14466 16555\nf 14465 16555 16554\nf 14466 14467 16556\nf 14466 16556 16555\nf 14467 14468 16557\nf 14467 16557 16556\nf 14468 14469 16558\nf 14468 16558 16557\nf 14469 14470 16559\nf 14469 16559 16558\nf 14470 14471 16560\nf 14470 16560 16559\nf 14471 14472 16561\nf 14471 16561 16560\nf 14472 14473 16562\nf 14472 16562 16561\nf 14473 14474 16563\nf 14473 16563 16562\nf 14474 14475 16564\nf 14474 16564 16563\nf 14475 14476 16565\nf 14475 16565 16564\nf 14476 14477 16566\nf 14476 16566 16565\nf 14477 14478 16567\nf 14477 16567 16566\nf 14478 14479 16568\nf 14478 16568 16567\nf 14479 14480 16569\nf 14479 16569 16568\nf 14480 14481 16570\nf 14480 16570 16569\nf 14481 14482 16571\nf 14481 16571 16570\nf 14482 14483 16572\nf 14482 16572 16571\nf 14483 14484 16573\nf 14483 16573 16572\nf 14484 14485 16574\nf 14484 16574 16573\nf 14485 14486 16575\nf 14485 16575 16574\nf 14486 14487 16576\nf 14486 16576 16575\nf 14487 14488 14518\nf 14487 14517 16576\nf 14487 14518 14517\nf 14488 14489 14519\nf 14488 14519 14518\nf 14489 14490 14520\nf 14489 14520 14519\nf 14490 14491 14521\nf 14490 14521 14520\nf 14491 14492 14522\nf 14491 14522 14521\nf 14492 14493 14523\nf 14492 14523 14522\nf 14493 14494 14524\nf 14493 14524 14523\nf 14494 14495 14525\nf 14494 14525 14524\nf 14495 14496 14526\nf 14495 14526 14525\nf 14496 14497 14527\nf 14496 14527 14526\nf 14497 14499 16577\nf 14497 16577 16643\nf 14497 16643 14527\nf 14498 14500 14499\nf 14499 14500 16578\nf 14499 16578 16577\nf 14500 14501 16578\nf 14501 16579 16580\nf 14501 16580 16578\nf 14502 14528 14529\nf 14502 14529 14503\nf 14503 14529 16583\nf 14503 16583 16514\nf 14504 14505 14530\nf 14504 16516 16517\nf 14504 16517 14505\nf 14505 14531 14530\nf 14505 16517 16585\nf 14505 16585 16651\nf 14505 16651 14531\nf 14506 14507 16592\nf 14506 16592 16590\nf 14507 14508 16593\nf 14507 16593 16592\nf 14508 16594 16595\nf 14508 16595 16593\nf 14509 14511 16601\nf 14509 16601 14510\nf 14510 16599 16529\nf 14510 16601 16599\nf 14511 14512 16602\nf 14511 16602 16601\nf 14512 14514 16603\nf 14512 16603 16602\nf 14513 14515 14514\nf 14514 14515 16605\nf 14514 16604 16603\nf 14514 16605 16604\nf 14515 14516 16605\nf 14516 16606 16607\nf 14516 16607 16605\nf 14517 14518 16633\nf 14517 16631 16576\nf 14517 16633 16631\nf 14518 14519 16634\nf 14518 16634 16633\nf 14519 14520 16635\nf 14519 16635 16634\nf 14520 14521 16636\nf 14520 16636 16635\nf 14521 14522 16637\nf 14521 16637 16636\nf 14522 14523 16638\nf 14522 16638 16637\nf 14523 14524 16639\nf 14523 16639 16638\nf 14524 14525 16640\nf 14524 16640 16639\nf 14525 14526 16641\nf 14525 16641 16640\nf 14526 14527 16642\nf 14526 16642 16641\nf 14527 16643 16644\nf 14527 16644 16642\nf 14528 14532 14533\nf 14528 14533 14529\nf 14529 14533 16649\nf 14529 16649 16583\nf 14530 14531 14534\nf 14531 14535 14534\nf 14531 16651 16687\nf 14531 16687 14535\nf 14532 14536 14537\nf 14532 14537 14533\nf 14533 14537 16685\nf 14533 16685 16649\nf 14534 14535 14538\nf 14535 14539 14538\nf 14535 16687 16714\nf 14535 16714 14539\nf 14536 14540 14541\nf 14536 14541 14537\nf 14537 14541 16712\nf 14537 16712 16685\nf 14538 14539 14542\nf 14539 14543 14542\nf 14539 16714 16733\nf 14539 16733 14543\nf 14540 14544 14545\nf 14540 14545 14541\nf 14541 14545 16731\nf 14541 16731 16712\nf 14542 14543 14546\nf 14543 14547 14546\nf 14543 16733 16752\nf 14543 16752 14547\nf 14544 14548 14549\nf 14544 14549 14545\nf 14545 14549 16750\nf 14545 16750 16731\nf 14546 14547 14550\nf 14547 14551 14550\nf 14547 16752 16790\nf 14547 16790 14551\nf 14548 14565 14566\nf 14548 14566 14549\nf 14549 14566 16788\nf 14549 16788 16750\nf 14550 14551 14567\nf 14551 14568 14567\nf 14551 16790 16855\nf 14551 16855 14568\nf 14552 14554 14611\nf 14552 14608 16843\nf 14552 14611 14608\nf 14552 16770 16772\nf 14552 16772 14554\nf 14552 16843 16770\nf 14553 14554 14555\nf 14553 14609 14611\nf 14553 14611 14554\nf 14554 14556 14555\nf 14554 16772 16774\nf 14554 16774 14556\nf 14555 14556 14557\nf 14556 14558 14557\nf 14556 16774 16776\nf 14556 16776 14558\nf 14557 14558 14559\nf 14558 14560 14559\nf 14558 16776 16778\nf 14558 16778 14560\nf 14559 14560 14561\nf 14560 14562 14561\nf 14560 16778 16780\nf 14560 16780 14562\nf 14561 14562 14612\nf 14562 14563 14614\nf 14562 14614 14612\nf 14562 16780 16782\nf 14562 16782 14563\nf 14563 14564 14614\nf 14563 16782 16784\nf 14563 16784 14564\nf 14564 14616 14614\nf 14564 14618 14616\nf 14564 16784 16846\nf 14564 16846 16847\nf 14564 16847 14618\nf 14565 14620 14621\nf 14565 14621 14566\nf 14566 14621 16853\nf 14566 16853 16788\nf 14567 14568 14622\nf 14568 14623 14622\nf 14568 16855 16897\nf 14568 16897 14623\nf 14569 14570 14632\nf 14569 14630 16865\nf 14569 14632 14630\nf 14569 16796 16798\nf 14569 16798 14570\nf 14569 16865 16796\nf 14570 14571 14634\nf 14570 14634 14632\nf 14570 16798 16800\nf 14570 16800 14571\nf 14571 14572 14636\nf 14571 14636 14634\nf 14571 16800 16802\nf 14571 16802 14572\nf 14572 14573 14638\nf 14572 14638 14636\nf 14572 16802 16804\nf 14572 16804 14573\nf 14573 14575 14641\nf 14573 14641 14638\nf 14573 16804 16806\nf 14573 16806 14575\nf 14574 14575 14576\nf 14574 14639 14641\nf 14574 14641 14575\nf 14575 14577 14576\nf 14575 16806 16808\nf 14575 16808 14577\nf 14576 14577 14578\nf 14577 14579 14578\nf 14577 16808 16810\nf 14577 16810 14579\nf 14578 14579 14580\nf 14579 14581 14580\nf 14579 16810 16812\nf 14579 16812 14581\nf 14580 14581 14582\nf 14581 14583 14582\nf 14581 16812 16814\nf 14581 16814 14583\nf 14582 14583 14584\nf 14583 14585 14584\nf 14583 16814 16816\nf 14583 16816 14585\nf 14584 14585 14586\nf 14585 14587 14586\nf 14585 16816 16818\nf 14585 16818 14587\nf 14586 14587 14588\nf 14587 14589 14588\nf 14587 16818 16820\nf 14587 16820 14589\nf 14588 14589 14590\nf 14589 14591 14590\nf 14589 16820 16822\nf 14589 16822 14591\nf 14590 14591 16869\nf 14590 16869 14592\nf 14591 16822 16868\nf 14591 16868 16869\nf 14592 16869 16871\nf 14592 16871 14642\nf 14593 14594 14661\nf 14593 14659 16885\nf 14593 14661 14659\nf 14593 16827 16829\nf 14593 16829 14594\nf 14593 16885 16827\nf 14594 14596 14664\nf 14594 14664 14661\nf 14594 16829 16831\nf 14594 16831 14596\nf 14595 14596 14597\nf 14595 14662 14664\nf 14595 14664 14596\nf 14596 14598 14597\nf 14596 16831 16833\nf 14596 16833 14598\nf 14597 14598 14599\nf 14598 14600 14599\nf 14598 16833 16835\nf 14598 16835 14600\nf 14599 14600 14601\nf 14600 14602 14601\nf 14600 16835 16837\nf 14600 16837 14602\nf 14601 14602 14603\nf 14602 14604 14603\nf 14602 16837 16839\nf 14602 16839 14604\nf 14603 14604 14605\nf 14604 14606 14605\nf 14604 16839 16841\nf 14604 16841 14606\nf 14605 14606 14607\nf 14606 14608 14607\nf 14606 16841 16844\nf 14606 16844 14608\nf 14607 14608 14610\nf 14608 14611 14610\nf 14608 16844 16843\nf 14609 14610 14611\nf 14612 14614 14613\nf 14613 14614 14615\nf 14614 14616 14615\nf 14615 14616 14617\nf 14616 14618 14617\nf 14617 14618 14665\nf 14618 14619 14667\nf 14618 14667 14665\nf 14618 16847 16849\nf 14618 16849 14619\nf 14619 14669 14667\nf 14619 16849 16888\nf 14619 16888 16889\nf 14619 16889 14669\nf 14620 14671 14672\nf 14620 14672 14621\nf 14621 14672 16895\nf 14621 16895 16853\nf 14622 14623 16932\nf 14622 16932 14673\nf 14623 16897 16898\nf 14623 16898 16932\nf 14624 14625 14674\nf 14624 14674 16900\nf 14624 16857 16859\nf 14624 16859 14625\nf 14624 16900 16857\nf 14625 14626 14675\nf 14625 14675 14674\nf 14625 16859 16861\nf 14625 16861 14626\nf 14626 14628 14678\nf 14626 14678 14675\nf 14626 16861 16863\nf 14626 16863 14628\nf 14627 14628 14629\nf 14627 14676 14678\nf 14627 14678 14628\nf 14628 14630 14629\nf 14628 16863 16866\nf 14628 16866 14630\nf 14629 14630 14631\nf 14630 14632 14631\nf 14630 16866 16865\nf 14631 14632 14633\nf 14632 14634 14633\nf 14633 14634 14635\nf 14634 14636 14635\nf 14635 14636 14637\nf 14636 14638 14637\nf 14637 14638 14640\nf 14638 14641 14640\nf 14639 14640 14641\nf 14642 14644 14643\nf 14642 16871 14644\nf 14643 14644 14645\nf 14644 14646 14645\nf 14644 16871 16873\nf 14644 16873 14646\nf 14645 14646 14647\nf 14646 14648 14647\nf 14646 16873 16875\nf 14646 16875 14648\nf 14647 14648 14649\nf 14648 14650 14649\nf 14648 16875 16877\nf 14648 16877 14650\nf 14649 14650 16903\nf 14649 16903 14651\nf 14650 16877 16902\nf 14650 16902 16903\nf 14651 16903 16905\nf 14651 16905 14652\nf 14652 16905 16907\nf 14652 16907 14679\nf 14653 14655 14703\nf 14653 14700 16922\nf 14653 14703 14700\nf 14653 16879 16881\nf 14653 16881 14655\nf 14653 16922 16879\nf 14654 14655 14656\nf 14654 14701 14703\nf 14654 14703 14655\nf 14655 14657 14656\nf 14655 16881 16883\nf 14655 16883 14657\nf 14656 14657 14658\nf 14657 14659 14658\nf 14657 16883 16886\nf 14657 16886 14659\nf 14658 14659 14660\nf 14659 14661 14660\nf 14659 16886 16885\nf 14660 14661 14663\nf 14661 14664 14663\nf 14662 14663 14664\nf 14665 14667 14666\nf 14666 14667 14668\nf 14667 14669 14668\nf 14668 14669 14704\nf 14669 14670 14705\nf 14669 14705 14704\nf 14669 16889 16891\nf 14669 16891 14670\nf 14670 14706 14705\nf 14670 16891 16925\nf 14670 16925 16926\nf 14670 16926 14706\nf 14671 14707 14708\nf 14671 14708 14672\nf 14672 14708 16930\nf 14672 16930 16895\nf 14673 16932 14709\nf 14674 14675 14710\nf 14674 14710 16935\nf 14674 16935 16900\nf 14675 14678 14712\nf 14675 14712 14710\nf 14676 14677 14678\nf 14677 14711 14712\nf 14677 14712 14678\nf 14679 14681 14680\nf 14679 16907 14681\nf 14680 14681 14682\nf 14681 14683 14682\nf 14681 16907 16909\nf 14681 16909 14683\nf 14682 14683 14684\nf 14683 14685 14684\nf 14683 16909 16911\nf 14683 16911 14685\nf 14684 14685 14686\nf 14685 14687 14686\nf 14685 16911 16913\nf 14685 16913 14687\nf 14686 14687 14688\nf 14687 14689 14688\nf 14687 16913 16915\nf 14687 16915 14689\nf 14688 14689 14690\nf 14689 14691 14690\nf 14689 16915 16916\nf 14689 16916 14691\nf 14690 14691 14692\nf 14691 14693 14692\nf 14691 16916 16917\nf 14691 16917 14693\nf 14692 14693 14694\nf 14693 14695 14694\nf 14693 16917 16918\nf 14693 16918 14695\nf 14694 14695 16938\nf 14694 16938 14696\nf 14695 16918 16937\nf 14695 16937 16938\nf 14696 16938 16940\nf 14696 16940 14713\nf 14697 14698 14699\nf 14697 14731 14733\nf 14697 14733 16951\nf 14697 16951 14698\nf 14698 14700 14699\nf 14698 16920 16923\nf 14698 16923 14700\nf 14698 16950 16920\nf 14698 16951 16950\nf 14699 14700 14702\nf 14700 14703 14702\nf 14700 16923 16922\nf 14701 14702 14703\nf 14704 14705 14734\nf 14705 14706 14736\nf 14705 14736 14734\nf 14706 14737 14736\nf 14706 16926 16953\nf 14706 16953 16981\nf 14706 16981 14737\nf 14707 14738 14739\nf 14707 14739 14708\nf 14708 14739 16957\nf 14708 16957 16930\nf 14709 16932 16959\nf 14709 16959 14740\nf 14710 14712 14741\nf 14710 14741 16963\nf 14710 16963 16935\nf 14711 14742 14743\nf 14711 14743 14712\nf 14712 14743 14741\nf 14713 14715 14714\nf 14713 16940 14715\nf 14714 14715 14716\nf 14715 14717 14716\nf 14715 16940 16942\nf 14715 16942 14717\nf 14716 14717 14718\nf 14717 14719 14718\nf 14717 16942 16944\nf 14717 16944 14719\nf 14718 14719 14720\nf 14719 14721 14720\nf 14719 16944 16945\nf 14719 16945 14721\nf 14720 14721 16966\nf 14720 16966 14722\nf 14721 16945 16965\nf 14721 16965 16966\nf 14722 16966 16968\nf 14722 16968 14723\nf 14723 16968 16970\nf 14723 16970 14744\nf 14724 14757 14759\nf 14724 14759 16977\nf 14724 16977 16979\nf 14724 16979 14725\nf 14725 14726 14727\nf 14725 16978 14726\nf 14725 16979 16978\nf 14726 14728 14727\nf 14726 16946 16947\nf 14726 16947 14728\nf 14726 16978 16946\nf 14727 14728 14729\nf 14728 14730 14729\nf 14728 16947 16948\nf 14728 16948 14730\nf 14729 14730 14732\nf 14730 14733 14732\nf 14730 16948 16951\nf 14730 16951 14733\nf 14731 14732 14733\nf 14734 14736 14735\nf 14735 14736 14760\nf 14736 14737 14761\nf 14736 14761 14760\nf 14737 16981 16994\nf 14737 16994 14761\nf 14738 14762 14763\nf 14738 14763 14739\nf 14739 14763 16986\nf 14739 16986 16957\nf 14740 16959 16988\nf 14740 16988 14764\nf 14741 14743 14765\nf 14741 14765 16992\nf 14741 16992 16963\nf 14742 14766 14767\nf 14742 14767 14743\nf 14743 14767 14765\nf 14744 14746 14745\nf 14744 16970 14746\nf 14745 14746 14747\nf 14746 14748 14747\nf 14746 16970 16972\nf 14746 16972 14748\nf 14747 14748 14749\nf 14748 14750 14749\nf 14748 16972 16973\nf 14748 16973 14750\nf 14749 14750 14751\nf 14750 14752 14751\nf 14750 16973 16974\nf 14750 16974 14752\nf 14751 14752 14753\nf 14752 14754 14753\nf 14752 16974 16975\nf 14752 16975 14754\nf 14753 14754 14755\nf 14754 14756 14755\nf 14754 16975 16976\nf 14754 16976 14756\nf 14755 14756 14758\nf 14756 14759 14758\nf 14756 16976 16977\nf 14756 16977 14759\nf 14757 14758 14759\nf 14760 14761 14768\nf 14761 14769 14768\nf 14761 16994 17006\nf 14761 17006 14769\nf 14762 14770 14771\nf 14762 14771 14763\nf 14763 14771 16999\nf 14763 16999 16986\nf 14764 16988 17001\nf 14764 17001 14772\nf 14765 14767 14773\nf 14765 14773 17004\nf 14765 17004 16992\nf 14766 14774 14775\nf 14766 14775 14767\nf 14767 14775 14773\nf 14768 14769 14776\nf 14769 14777 14776\nf 14769 17006 17017\nf 14769 17017 14777\nf 14770 14778 14779\nf 14770 14779 14771\nf 14771 14779 17010\nf 14771 17010 16999\nf 14772 17001 17012\nf 14772 17012 14780\nf 14773 14775 14781\nf 14773 14781 17015\nf 14773 17015 17004\nf 14774 14782 14783\nf 14774 14783 14775\nf 14775 14783 14781\nf 14776 14777 14784\nf 14777 14785 14784\nf 14777 17017 17028\nf 14777 17028 14785\nf 14778 14786 14787\nf 14778 14787 14779\nf 14779 14787 17020\nf 14779 17020 17010\nf 14780 17012 17022\nf 14780 17022 14788\nf 14781 14783 14790\nf 14781 14790 17027\nf 14781 17025 17015\nf 14781 17027 17025\nf 14782 14789 14790\nf 14782 14790 14783\nf 14784 14785 14791\nf 14785 14792 14791\nf 14785 17028 17039\nf 14785 17039 14792\nf 14786 14793 14794\nf 14786 14794 14787\nf 14787 14794 17031\nf 14787 17031 17020\nf 14788 17022 17033\nf 14788 17033 14795\nf 14789 14796 14797\nf 14789 14797 14790\nf 14790 14797 17037\nf 14790 17037 17027\nf 14791 14792 14798\nf 14792 14799 14798\nf 14792 17039 17051\nf 14792 17051 14799\nf 14793 14800 14801\nf 14793 14801 14794\nf 14794 14801 17043\nf 14794 17043 17031\nf 14795 17033 17045\nf 14795 17045 14802\nf 14796 14803 14804\nf 14796 14804 14797\nf 14797 14804 17049\nf 14797 17049 17037\nf 14798 14799 14805\nf 14799 14806 14805\nf 14799 17051 17064\nf 14799 17064 14806\nf 14800 14807 14808\nf 14800 14808 14801\nf 14801 14808 17055\nf 14801 17055 17043\nf 14802 17045 17057\nf 14802 17057 14809\nf 14803 14811 14812\nf 14803 14812 14804\nf 14804 14812 17062\nf 14804 17062 17049\nf 14805 14806 14813\nf 14806 14814 14813\nf 14806 17064 17074\nf 14806 17074 14814\nf 14807 14815 14816\nf 14807 14816 14808\nf 14808 14816 17068\nf 14808 17068 17055\nf 14809 14810 14817\nf 14809 17057 17058\nf 14809 17058 14810\nf 14810 14818 14817\nf 14810 17058 17070\nf 14810 17070 17079\nf 14810 17079 14818\nf 14811 14819 14820\nf 14811 14820 14812\nf 14812 14820 17072\nf 14812 17072 17062\nf 14813 14814 14822\nf 14814 14823 14822\nf 14814 17074 17085\nf 14814 17085 14823\nf 14815 14824 14825\nf 14815 14825 14816\nf 14816 14825 17077\nf 14816 17077 17068\nf 14817 14818 14826\nf 14818 14827 14826\nf 14818 17079 17090\nf 14818 17090 14827\nf 14819 14821 17084\nf 14819 17084 14820\nf 14820 17082 17072\nf 14820 17084 17082\nf 14821 14828 14829\nf 14821 14829 17094\nf 14821 17094 17084\nf 14822 14823 14830\nf 14823 14831 14830\nf 14823 17085 17096\nf 14823 17096 14831\nf 14824 14832 14833\nf 14824 14833 14825\nf 14825 14833 17088\nf 14825 17088 17077\nf 14826 14827 14834\nf 14827 14836 14834\nf 14827 17090 17101\nf 14827 17101 14836\nf 14828 14837 14838\nf 14828 14838 14829\nf 14829 14838 17094\nf 14830 14831 17106\nf 14830 17106 14839\nf 14831 17096 17097\nf 14831 17097 17106\nf 14832 14840 14841\nf 14832 14841 14833\nf 14833 14841 17099\nf 14833 17099 17088\nf 14834 14836 14835\nf 14835 14836 14842\nf 14836 17101 14842\nf 14837 14843 14844\nf 14837 14844 14838\nf 14838 14844 17104\nf 14838 17104 17094\nf 14839 17106 14845\nf 14840 14846 14847\nf 14840 14847 14841\nf 14841 14847 17109\nf 14841 17109 17099\nf 14842 17101 17111\nf 14842 17111 14848\nf 14843 14849 14850\nf 14843 14850 14844\nf 14844 14850 17114\nf 14844 17114 17104\nf 14845 17106 17116\nf 14845 17116 14851\nf 14846 14852 14853\nf 14846 14853 14847\nf 14847 14853 17118\nf 14847 17118 17109\nf 14848 17111 17120\nf 14848 17120 14854\nf 14849 14855 14856\nf 14849 14856 14850\nf 14850 14856 17122\nf 14850 17122 17114\nf 14851 17116 17124\nf 14851 17124 14857\nf 14852 14858 14859\nf 14852 14859 14853\nf 14853 14859 17126\nf 14853 17126 17118\nf 14854 17120 17128\nf 14854 17128 14860\nf 14855 14861 14862\nf 14855 14862 14856\nf 14856 14862 17130\nf 14856 17130 17122\nf 14857 17124 17132\nf 14857 17132 14863\nf 14858 14864 14865\nf 14858 14865 14859\nf 14859 14865 17134\nf 14859 17134 17126\nf 14860 17128 17136\nf 14860 17136 14866\nf 14861 14868 14869\nf 14861 14869 14862\nf 14862 14869 17139\nf 14862 17139 17130\nf 14863 17132 17141\nf 14863 17141 14870\nf 14864 14871 14872\nf 14864 14872 14865\nf 14865 14872 17143\nf 14865 17143 17134\nf 14866 14867 14873\nf 14866 17136 17137\nf 14866 17137 14867\nf 14867 14874 14873\nf 14867 17137 17144\nf 14867 17144 17150\nf 14867 17150 14874\nf 14868 14875 14877\nf 14868 14877 14869\nf 14869 14877 17145\nf 14869 17145 17139\nf 14870 17141 17147\nf 14870 17147 14878\nf 14871 14879 14880\nf 14871 14880 14872\nf 14872 14880 17149\nf 14872 17149 17143\nf 14873 14874 14881\nf 14874 14883 14881\nf 14874 17150 17157\nf 14874 17157 14883\nf 14875 14876 14877\nf 14876 14884 17152\nf 14876 17152 14877\nf 14877 17152 17145\nf 14878 17147 17154\nf 14878 17154 14885\nf 14879 14886 14887\nf 14879 14887 14880\nf 14880 14887 17156\nf 14880 17156 17149\nf 14881 14883 14882\nf 14882 14883 14888\nf 14883 17157 14888\nf 14884 14889 17167\nf 14884 17159 17152\nf 14884 17167 17159\nf 14885 17154 17161\nf 14885 17161 14890\nf 14886 14891 17171\nf 14886 17164 14887\nf 14886 17171 17164\nf 14887 17163 17156\nf 14887 17164 17163\nf 14888 17157 17165\nf 14888 17165 14892\nf 14889 14893 17175\nf 14889 17175 17167\nf 14890 17161 17169\nf 14890 17169 14894\nf 14891 14895 17179\nf 14891 17179 17171\nf 14892 17165 17173\nf 14892 17173 14896\nf 14893 14897 17183\nf 14893 17183 17175\nf 14894 17169 17177\nf 14894 17177 14898\nf 14895 14899 17187\nf 14895 17187 17179\nf 14896 17173 17181\nf 14896 17181 14900\nf 14897 14901 17191\nf 14897 17191 17183\nf 14898 17177 17185\nf 14898 17185 14902\nf 14899 14903 17195\nf 14899 17195 17187\nf 14900 17181 17189\nf 14900 17189 14904\nf 14901 14905 17199\nf 14901 17199 17191\nf 14902 17185 17193\nf 14902 17193 14906\nf 14903 14907 17204\nf 14903 17204 17195\nf 14904 17189 17197\nf 14904 17197 14908\nf 14905 14909 17208\nf 14905 17208 17199\nf 14906 17193 17201\nf 14906 17201 14910\nf 14907 14912 17211\nf 14907 17211 17204\nf 14908 17197 17206\nf 14908 17206 14913\nf 14909 14914 17215\nf 14909 17215 17208\nf 14910 14911 14915\nf 14910 17201 17202\nf 14910 17202 14911\nf 14911 14916 14915\nf 14911 17202 17210\nf 14911 17210 17217\nf 14911 17217 14916\nf 14912 14917 17218\nf 14912 17218 17211\nf 14913 17206 17213\nf 14913 17213 14918\nf 14914 14919 17222\nf 14914 17222 17215\nf 14915 14916 14920\nf 14916 14921 14920\nf 14916 17217 17224\nf 14916 17224 14921\nf 14917 14922 17225\nf 14917 17225 17218\nf 14918 17213 17220\nf 14918 17220 14923\nf 14919 14924 17230\nf 14919 17230 17222\nf 14920 14921 14925\nf 14921 14926 14925\nf 14921 17224 17232\nf 14921 17232 14926\nf 14922 14927 17233\nf 14922 17233 17225\nf 14923 17220 17227\nf 14923 17227 14928\nf 14924 14930 17236\nf 14924 17236 17230\nf 14925 14926 14931\nf 14926 14932 14931\nf 14926 17232 17238\nf 14926 17238 14932\nf 14927 14933 17239\nf 14927 17239 17233\nf 14928 14929 14934\nf 14928 17227 17228\nf 14928 17228 14929\nf 14929 14935 14934\nf 14929 17228 17235\nf 14929 17235 17241\nf 14929 17241 14935\nf 14930 14936 17242\nf 14930 17242 17236\nf 14931 14932 14937\nf 14932 14938 14937\nf 14932 17238 17244\nf 14932 17244 14938\nf 14933 14939 17245\nf 14933 17245 17239\nf 14934 14935 14940\nf 14935 14941 14940\nf 14935 17241 17247\nf 14935 17247 14941\nf 14936 14942 17248\nf 14936 17248 17242\nf 14937 14938 14943\nf 14938 14944 14943\nf 14938 17244 17250\nf 14938 17250 14944\nf 14939 14945 17251\nf 14939 17251 17245\nf 14940 14941 14946\nf 14941 14947 14946\nf 14941 17247 17253\nf 14941 17253 14947\nf 14942 14948 17254\nf 14942 17254 17248\nf 14943 14944 14949\nf 14944 14951 14949\nf 14944 17250 17256\nf 14944 17256 14951\nf 14945 14952 17258\nf 14945 17258 17251\nf 14946 14947 14953\nf 14947 14954 14953\nf 14947 17253 17260\nf 14947 17260 14954\nf 14948 14955 17261\nf 14948 17261 17254\nf 14949 14951 14950\nf 14950 14951 14956\nf 14951 17256 14956\nf 14952 14957 17265\nf 14952 17265 17258\nf 14953 14954 14958\nf 14954 14959 14958\nf 14954 17260 17267\nf 14954 17267 14959\nf 14955 14960 17268\nf 14955 17268 17261\nf 14956 17256 17263\nf 14956 17263 14961\nf 14957 14962 17272\nf 14957 17272 17265\nf 14958 14959 14963\nf 14959 14964 14963\nf 14959 17267 17274\nf 14959 17274 14964\nf 14960 14965 17275\nf 14960 17275 17268\nf 14961 17263 17270\nf 14961 17270 14966\nf 14962 14967 17279\nf 14962 17279 17272\nf 14963 14964 14968\nf 14964 14969 14968\nf 14964 17274 17281\nf 14964 17281 14969\nf 14965 14970 17283\nf 14965 17283 17275\nf 14966 17270 17277\nf 14966 17277 14971\nf 14967 14972 17286\nf 14967 17286 17279\nf 14968 14969 14973\nf 14969 14975 14973\nf 14969 17281 17288\nf 14969 17288 14975\nf 14970 14976 17290\nf 14970 17290 17283\nf 14971 17277 17284\nf 14971 17284 14977\nf 14972 14978 17293\nf 14972 17293 17286\nf 14973 14975 14974\nf 14974 14975 14979\nf 14975 17288 14979\nf 14976 14980 17297\nf 14976 17297 17290\nf 14977 17284 17291\nf 14977 17291 14981\nf 14978 14982 17301\nf 14978 17301 17293\nf 14979 17288 17295\nf 14979 17295 14983\nf 14980 14984 17306\nf 14980 17306 17297\nf 14981 17291 17298\nf 14981 17298 14985\nf 14982 14986 17301\nf 14983 17295 17304\nf 14983 17304 14988\nf 14984 14989 17314\nf 14984 17314 17306\nf 14985 17298 17308\nf 14985 17308 14990\nf 14986 14987 17301\nf 14986 14991 14992\nf 14986 14992 14987\nf 14987 14992 17311\nf 14987 17302 17301\nf 14987 17311 17302\nf 14988 17304 17312\nf 14988 17312 14993\nf 14989 14994 17322\nf 14989 17322 17314\nf 14990 17308 17316\nf 14990 17316 14995\nf 14991 14996 14997\nf 14991 14997 14992\nf 14992 14997 17319\nf 14992 17319 17311\nf 14993 17312 17320\nf 14993 17320 14998\nf 14994 14999 17334\nf 14994 17334 17322\nf 14995 17316 17324\nf 14995 17324 15000\nf 14996 15002 15004\nf 14996 15004 14997\nf 14997 15004 17328\nf 14997 17328 17319\nf 14998 17320 17329\nf 14998 17329 15005\nf 14999 15007 17342\nf 14999 17342 17334\nf 15000 15001 15008\nf 15000 17324 17325\nf 15000 17325 15001\nf 15001 15009 15008\nf 15001 17325 17336\nf 15001 17336 17344\nf 15001 17344 15009\nf 15002 15003 15004\nf 15003 15010 17338\nf 15003 17338 15004\nf 15004 17338 17328\nf 15005 15006 15011\nf 15005 17329 17330\nf 15005 17330 15006\nf 15006 15012 15011\nf 15006 17330 17339\nf 15006 17339 17348\nf 15006 17348 15012\nf 15007 15013 17351\nf 15007 17351 17342\nf 15008 15009 15014\nf 15009 15015 15014\nf 15009 17344 17354\nf 15009 17354 15015\nf 15010 15016 17357\nf 15010 17346 17338\nf 15010 17357 17346\nf 15011 15012 15017\nf 15012 15018 15017\nf 15012 17348 17359\nf 15012 17359 15018\nf 15013 15019 17351\nf 15014 15015 15021\nf 15015 15022 15021\nf 15015 17354 17364\nf 15015 17364 15022\nf 15016 15023 17367\nf 15016 17367 17357\nf 15017 15018 15024\nf 15018 15025 15024\nf 15018 17359 17369\nf 15018 17369 15025\nf 15019 15020 17351\nf 15019 15026 15027\nf 15019 15027 15020\nf 15020 15027 17362\nf 15020 17352 17351\nf 15020 17362 17352\nf 15021 15022 15028\nf 15022 15030 15028\nf 15022 17364 17373\nf 15022 17373 15030\nf 15023 15031 17377\nf 15023 17377 17367\nf 15024 15025 15032\nf 15025 15033 15032\nf 15025 17369 17379\nf 15025 17379 15033\nf 15026 15034 15035\nf 15026 15035 15027\nf 15027 15035 17371\nf 15027 17371 17362\nf 15028 15030 15029\nf 15029 15030 17374\nf 15029 15037 15036\nf 15029 17374 15037\nf 15030 17373 17374\nf 15031 15038 17387\nf 15031 17387 17377\nf 15032 15033 15039\nf 15033 15040 15039\nf 15033 17379 17389\nf 15033 17389 15040\nf 15034 15041 15042\nf 15034 15042 15035\nf 15035 15042 17381\nf 15035 17381 17371\nf 15036 15037 15043\nf 15037 15044 15043\nf 15037 17374 17383\nf 15037 17383 17394\nf 15037 17394 15044\nf 15038 15045 17398\nf 15038 17398 17387\nf 15039 15040 17400\nf 15039 17400 15046\nf 15040 17389 17390\nf 15040 17390 17400\nf 15041 15047 15048\nf 15041 15048 15042\nf 15042 15048 17392\nf 15042 17392 17381\nf 15043 15044 15049\nf 15044 15050 15049\nf 15044 17394 17406\nf 15044 17406 15050\nf 15045 15051 17410\nf 15045 17410 17398\nf 15046 17400 15053\nf 15047 15055 15056\nf 15047 15056 15048\nf 15048 15054 17403\nf 15048 15056 15054\nf 15048 17403 17392\nf 15049 15050 15057\nf 15050 15058 15057\nf 15050 17406 17416\nf 15050 17416 15058\nf 15051 15052 15060\nf 15051 15060 17420\nf 15051 17420 17410\nf 15052 15059 15060\nf 15053 17400 17411\nf 15053 17411 15061\nf 15054 15056 15063\nf 15054 15063 17415\nf 15054 17404 17403\nf 15054 17413 17404\nf 15054 17415 17413\nf 15055 15062 15063\nf 15055 15063 15056\nf 15057 15058 15066\nf 15058 15068 15066\nf 15058 17416 17426\nf 15058 17426 15068\nf 15059 15069 17429\nf 15059 17421 15060\nf 15059 17429 17421\nf 15060 17421 17420\nf 15061 17411 17422\nf 15061 17422 15070\nf 15062 15064 15072\nf 15062 15072 15063\nf 15063 15071 17424\nf 15063 15072 15071\nf 15063 17424 17415\nf 15064 15065 15074\nf 15064 15074 15072\nf 15065 15073 15074\nf 15066 15068 15067\nf 15067 15068 15078\nf 15067 15078 15076\nf 15068 15079 15078\nf 15068 17426 17436\nf 15068 17436 15079\nf 15069 15080 17440\nf 15069 17440 17429\nf 15070 17422 17431\nf 15070 17431 15081\nf 15071 15072 15082\nf 15071 15082 17435\nf 15071 17433 17424\nf 15071 17435 17433\nf 15072 15074 15082\nf 15073 15075 15085\nf 15073 15085 15074\nf 15074 15083 15082\nf 15074 15085 15083\nf 15075 15084 15085\nf 15076 15078 15077\nf 15077 15078 15101\nf 15077 15101 15099\nf 15078 15079 15102\nf 15078 15102 15101\nf 15079 17436 17437\nf 15079 17437 17445\nf 15079 17445 15102\nf 15080 15103 17448\nf 15080 17448 17440\nf 15081 17431 17441\nf 15081 17441 15104\nf 15082 15083 15105\nf 15082 15105 17443\nf 15082 17443 17435\nf 15083 15085 15106\nf 15083 15106 15105\nf 15084 15086 15109\nf 15084 15109 15085\nf 15085 15107 15106\nf 15085 15109 15107\nf 15086 15108 15109\nf 15087 15088 15121\nf 15087 15120 15118\nf 15087 15121 15120\nf 15088 15089 15122\nf 15088 15122 15121\nf 15089 15090 15123\nf 15089 15123 15122\nf 15090 15091 15124\nf 15090 15124 15123\nf 15091 15092 15125\nf 15091 15125 15124\nf 15092 15093 15126\nf 15092 15126 15125\nf 15093 15094 15127\nf 15093 15127 15126\nf 15094 15095 15128\nf 15094 15128 15127\nf 15095 15096 15129\nf 15095 15129 15128\nf 15096 15097 15130\nf 15096 15130 15129\nf 15097 15098 15132\nf 15097 15132 15130\nf 15098 15131 15132\nf 15099 15101 15100\nf 15100 15101 15140\nf 15100 15140 15138\nf 15101 15102 15141\nf 15101 15141 15140\nf 15102 15142 15141\nf 15102 17445 17452\nf 15102 17452 15142\nf 15103 15143 17455\nf 15103 17455 17448\nf 15104 17441 17449\nf 15104 17449 15144\nf 15105 15106 15145\nf 15105 15145 17450\nf 15105 17450 17443\nf 15106 15107 15146\nf 15106 15146 15145\nf 15107 15109 15147\nf 15107 15147 15146\nf 15108 15110 15150\nf 15108 15150 15109\nf 15109 15148 15147\nf 15109 15150 15148\nf 15110 15149 15150\nf 15111 15112 15160\nf 15111 15159 15157\nf 15111 15160 15159\nf 15112 15113 15161\nf 15112 15161 15160\nf 15113 15114 15162\nf 15113 15162 15161\nf 15114 15115 15163\nf 15114 15163 15162\nf 15115 15116 15164\nf 15115 15164 15163\nf 15116 15117 15165\nf 15116 15165 15164\nf 15117 15119 15166\nf 15117 15166 15165\nf 15118 15120 15119\nf 15119 15120 15166\nf 15120 15121 15167\nf 15120 15167 15166\nf 15121 15122 15168\nf 15121 15168 15167\nf 15122 15123 15169\nf 15122 15169 15168\nf 15123 15124 15170\nf 15123 15170 15169\nf 15124 15125 15171\nf 15124 15171 15170\nf 15125 15126 15172\nf 15125 15172 15171\nf 15126 15127 15173\nf 15126 15173 15172\nf 15127 15128 15174\nf 15127 15174 15173\nf 15128 15129 15175\nf 15128 15175 15174\nf 15129 15130 15176\nf 15129 15176 15175\nf 15130 15132 15177\nf 15130 15177 15176\nf 15131 15133 15179\nf 15131 15179 15132\nf 15132 15178 15177\nf 15132 15179 15178\nf 15133 15134 15180\nf 15133 15180 15179\nf 15134 15135 15181\nf 15134 15181 15180\nf 15135 15136 15182\nf 15135 15182 15181\nf 15136 15137 15184\nf 15136 15184 15182\nf 15137 15183 15184\nf 15138 15140 15139\nf 15139 15140 15189\nf 15139 15189 15187\nf 15140 15141 15190\nf 15140 15190 15189\nf 15141 15142 15191\nf 15141 15191 15190\nf 15142 15192 15191\nf 15142 17452 17460\nf 15142 17460 15192\nf 15143 15193 17463\nf 15143 17463 17455\nf 15144 17449 17456\nf 15144 17456 15194\nf 15145 15146 15195\nf 15145 15195 17459\nf 15145 17457 17450\nf 15145 17459 17457\nf 15146 15147 15195\nf 15147 15148 15196\nf 15147 15196 15195\nf 15148 15150 15197\nf 15148 15197 15196\nf 15149 15151 15199\nf 15149 15199 15150\nf 15150 15198 15197\nf 15150 15199 15198\nf 15151 15152 15200\nf 15151 15200 15199\nf 15152 15153 15202\nf 15152 15202 15200\nf 15153 15201 15202\nf 15154 15155 15212\nf 15154 15211 15209\nf 15154 15212 15211\nf 15155 15156 15213\nf 15155 15213 15212\nf 15156 15158 15214\nf 15156 15214 15213\nf 15157 15159 15158\nf 15158 15159 15214\nf 15159 15160 15215\nf 15159 15215 15214\nf 15160 15161 15216\nf 15160 15216 15215\nf 15161 15162 15217\nf 15161 15217 15216\nf 15162 15163 15218\nf 15162 15218 15217\nf 15163 15164 15219\nf 15163 15219 15218\nf 15164 15165 15220\nf 15164 15220 15219\nf 15165 15166 15221\nf 15165 15221 15220\nf 15166 15167 15222\nf 15166 15222 15221\nf 15167 15168 15223\nf 15167 15223 15222\nf 15168 15169 15224\nf 15168 15224 15223\nf 15169 15170 15225\nf 15169 15225 15224\nf 15170 15171 15226\nf 15170 15226 15225\nf 15171 15172 15227\nf 15171 15227 15226\nf 15172 15173 15228\nf 15172 15228 15227\nf 15173 15174 15229\nf 15173 15229 15228\nf 15174 15175 15230\nf 15174 15230 15229\nf 15175 15176 15231\nf 15175 15231 15230\nf 15176 15177 15232\nf 15176 15232 15231\nf 15177 15178 15233\nf 15177 15233 15232\nf 15178 15179 15234\nf 15178 15234 15233\nf 15179 15180 15235\nf 15179 15235 15234\nf 15180 15181 15236\nf 15180 15236 15235\nf 15181 15182 15237\nf 15181 15237 15236\nf 15182 15184 15238\nf 15182 15238 15237\nf 15183 15185 15240\nf 15183 15240 15184\nf 15184 15239 15238\nf 15184 15240 15239\nf 15185 15186 15242\nf 15185 15242 15240\nf 15186 15241 15242\nf 15187 15189 15188\nf 15188 15189 15253\nf 15188 15253 15251\nf 15189 15190 15254\nf 15189 15254 15253\nf 15190 15191 15255\nf 15190 15255 15254\nf 15191 15192 15256\nf 15191 15256 15255\nf 15192 15257 15256\nf 15192 17460 17467\nf 15192 17467 15257\nf 15193 15258 17470\nf 15193 17470 17463\nf 15194 17456 17464\nf 15194 17464 15259\nf 15195 15196 15260\nf 15195 15260 17465\nf 15195 17465 17459\nf 15196 15197 15261\nf 15196 15261 15260\nf 15197 15198 15262\nf 15197 15262 15261\nf 15198 15199 15263\nf 15198 15263 15262\nf 15199 15200 15264\nf 15199 15264 15263\nf 15200 15202 15265\nf 15200 15265 15264\nf 15201 15203 15267\nf 15201 15267 15202\nf 15202 15266 15265\nf 15202 15267 15266\nf 15203 15204 15269\nf 15203 15269 15267\nf 15204 15268 15269\nf 15205 15206 15280\nf 15205 15279 15277\nf 15205 15280 15279\nf 15206 15207 15281\nf 15206 15281 15280\nf 15207 15208 15282\nf 15207 15282 15281\nf 15208 15210 15283\nf 15208 15283 15282\nf 15209 15211 15210\nf 15210 15211 15283\nf 15211 15212 15284\nf 15211 15284 15283\nf 15212 15213 15285\nf 15212 15285 15284\nf 15213 15214 15286\nf 15213 15286 15285\nf 15214 15215 15287\nf 15214 15287 15286\nf 15215 15216 15288\nf 15215 15288 15287\nf 15216 15217 15289\nf 15216 15289 15288\nf 15217 15218 15290\nf 15217 15290 15289\nf 15218 15219 15291\nf 15218 15291 15290\nf 15219 15220 15292\nf 15219 15292 15291\nf 15220 15221 15293\nf 15220 15293 15292\nf 15221 15222 15294\nf 15221 15294 15293\nf 15222 15223 15295\nf 15222 15295 15294\nf 15223 15224 15296\nf 15223 15296 15295\nf 15224 15225 15297\nf 15224 15297 15296\nf 15225 15226 15298\nf 15225 15298 15297\nf 15226 15227 15299\nf 15226 15299 15298\nf 15227 15228 15300\nf 15227 15300 15299\nf 15228 15229 15301\nf 15228 15301 15300\nf 15229 15230 15302\nf 15229 15302 15301\nf 15230 15231 15303\nf 15230 15303 15302\nf 15231 15232 15304\nf 15231 15304 15303\nf 15232 15233 15305\nf 15232 15305 15304\nf 15233 15234 15306\nf 15233 15306 15305\nf 15234 15235 15307\nf 15234 15307 15306\nf 15235 15236 15308\nf 15235 15308 15307\nf 15236 15237 15309\nf 15236 15309 15308\nf 15237 15238 15310\nf 15237 15310 15309\nf 15238 15239 15311\nf 15238 15311 15310\nf 15239 15240 15312\nf 15239 15312 15311\nf 15240 15242 15313\nf 15240 15313 15312\nf 15241 15243 15315\nf 15241 15315 15242\nf 15242 15314 15313\nf 15242 15315 15314\nf 15243 15244 15317\nf 15243 15317 15315\nf 15244 15316 15317\nf 15245 15246 15328\nf 15245 15327 15325\nf 15245 15328 15327\nf 15246 15247 15330\nf 15246 15330 15328\nf 15247 15329 15330\nf 15248 15249 15335\nf 15248 15334 15332\nf 15248 15335 15334\nf 15249 15250 15336\nf 15249 15336 15335\nf 15250 15252 15337\nf 15250 15337 15336\nf 15251 15253 15252\nf 15252 15253 15337\nf 15253 15254 15338\nf 15253 15338 15337\nf 15254 15255 15339\nf 15254 15339 15338\nf 15255 15256 15340\nf 15255 15340 15339\nf 15256 15257 15341\nf 15256 15341 15340\nf 15257 15342 15341\nf 15257 17467 17475\nf 15257 17475 15342\nf 15258 15343 17479\nf 15258 17479 17470\nf 15259 17464 17471\nf 15259 17471 15344\nf 15260 15261 15345\nf 15260 15345 17474\nf 15260 17472 17465\nf 15260 17474 17472\nf 15261 15262 15345\nf 15262 15263 15346\nf 15262 15346 15345\nf 15263 15264 15347\nf 15263 15347 15346\nf 15264 15265 15348\nf 15264 15348 15347\nf 15265 15266 15349\nf 15265 15349 15348\nf 15266 15267 15350\nf 15266 15350 15349\nf 15267 15269 15351\nf 15267 15351 15350\nf 15268 15270 15353\nf 15268 15353 15269\nf 15269 15352 15351\nf 15269 15353 15352\nf 15270 15271 15354\nf 15270 15354 15353\nf 15271 15272 15355\nf 15271 15355 15354\nf 15272 15273 15356\nf 15272 15356 15355\nf 15273 15274 15357\nf 15273 15357 15356\nf 15274 15275 15358\nf 15274 15358 15357\nf 15275 15276 15359\nf 15275 15359 15358\nf 15276 15278 15360\nf 15276 15360 15359\nf 15277 15279 15278\nf 15278 15279 15360\nf 15279 15280 15361\nf 15279 15361 15360\nf 15280 15281 15362\nf 15280 15362 15361\nf 15281 15282 15363\nf 15281 15363 15362\nf 15282 15283 15364\nf 15282 15364 15363\nf 15283 15284 15365\nf 15283 15365 15364\nf 15284 15285 15366\nf 15284 15366 15365\nf 15285 15286 15367\nf 15285 15367 15366\nf 15286 15287 15368\nf 15286 15368 15367\nf 15287 15288 15369\nf 15287 15369 15368\nf 15288 15289 15370\nf 15288 15370 15369\nf 15289 15290 15371\nf 15289 15371 15370\nf 15290 15291 15372\nf 15290 15372 15371\nf 15291 15292 15373\nf 15291 15373 15372\nf 15292 15293 15374\nf 15292 15374 15373\nf 15293 15294 15375\nf 15293 15375 15374\nf 15294 15295 15376\nf 15294 15376 15375\nf 15295 15296 15377\nf 15295 15377 15376\nf 15296 15297 15378\nf 15296 15378 15377\nf 15297 15298 15379\nf 15297 15379 15378\nf 15298 15299 15380\nf 15298 15380 15379\nf 15299 15300 15381\nf 15299 15381 15380\nf 15300 15301 15382\nf 15300 15382 15381\nf 15301 15302 15383\nf 15301 15383 15382\nf 15302 15303 15384\nf 15302 15384 15383\nf 15303 15304 15385\nf 15303 15385 15384\nf 15304 15305 15386\nf 15304 15386 15385\nf 15305 15306 15387\nf 15305 15387 15386\nf 15306 15307 15388\nf 15306 15388 15387\nf 15307 15308 15389\nf 15307 15389 15388\nf 15308 15309 15390\nf 15308 15390 15389\nf 15309 15310 15391\nf 15309 15391 15390\nf 15310 15311 15392\nf 15310 15392 15391\nf 15311 15312 15393\nf 15311 15393 15392\nf 15312 15313 15394\nf 15312 15394 15393\nf 15313 15314 15395\nf 15313 15395 15394\nf 15314 15315 15396\nf 15314 15396 15395\nf 15315 15317 15397\nf 15315 15397 15396\nf 15316 15318 15399\nf 15316 15399 15317\nf 15317 15398 15397\nf 15317 15399 15398\nf 15318 15319 15400\nf 15318 15400 15399\nf 15319 15320 15401\nf 15319 15401 15400\nf 15320 15321 15402\nf 15320 15402 15401\nf 15321 15322 15403\nf 15321 15403 15402\nf 15322 15323 15404\nf 15322 15404 15403\nf 15323 15324 15405\nf 15323 15405 15404\nf 15324 15326 15406\nf 15324 15406 15405\nf 15325 15327 15326\nf 15326 15327 15406\nf 15327 15328 15407\nf 15327 15407 15406\nf 15328 15330 15408\nf 15328 15408 15407\nf 15329 15331 15410\nf 15329 15410 15330\nf 15330 15409 15408\nf 15330 15410 15409\nf 15331 15333 15411\nf 15331 15411 15410\nf 15332 15334 15333\nf 15333 15334 15411\nf 15334 15335 15412\nf 15334 15412 15411\nf 15335 15336 15413\nf 15335 15413 15412\nf 15336 15337 15414\nf 15336 15414 15413\nf 15337 15338 15415\nf 15337 15415 15414\nf 15338 15339 15416\nf 15338 15416 15415\nf 15339 15340 15417\nf 15339 15417 15416\nf 15340 15341 15418\nf 15340 15418 15417\nf 15341 15342 15419\nf 15341 15419 15418\nf 15342 15420 15419\nf 15342 17475 17484\nf 15342 17484 15420\nf 15343 15421 17489\nf 15343 17489 17479\nf 15344 17471 17480\nf 15344 17480 15422\nf 15345 15346 15423\nf 15345 15423 17482\nf 15345 17482 17474\nf 15346 15347 15424\nf 15346 15424 15423\nf 15347 15348 15425\nf 15347 15425 15424\nf 15348 15349 15426\nf 15348 15426 15425\nf 15349 15350 15427\nf 15349 15427 15426\nf 15350 15351 15428\nf 15350 15428 15427\nf 15351 15352 15429\nf 15351 15429 15428\nf 15352 15353 15430\nf 15352 15430 15429\nf 15353 15354 15431\nf 15353 15431 15430\nf 15354 15355 15432\nf 15354 15432 15431\nf 15355 15356 15433\nf 15355 15433 15432\nf 15356 15357 15434\nf 15356 15434 15433\nf 15357 15358 15435\nf 15357 15435 15434\nf 15358 15359 15436\nf 15358 15436 15435\nf 15359 15360 15437\nf 15359 15437 15436\nf 15360 15361 15438\nf 15360 15438 15437\nf 15361 15362 15439\nf 15361 15439 15438\nf 15362 15363 15440\nf 15362 15440 15439\nf 15363 15364 15441\nf 15363 15441 15440\nf 15364 15365 15442\nf 15364 15442 15441\nf 15365 15366 15443\nf 15365 15443 15442\nf 15366 15367 15444\nf 15366 15444 15443\nf 15367 15368 15445\nf 15367 15445 15444\nf 15368 15369 15446\nf 15368 15446 15445\nf 15369 15370 15447\nf 15369 15447 15446\nf 15370 15371 15448\nf 15370 15448 15447\nf 15371 15372 15449\nf 15371 15449 15448\nf 15372 15373 15450\nf 15372 15450 15449\nf 15373 15374 15451\nf 15373 15451 15450\nf 15374 15375 15452\nf 15374 15452 15451\nf 15375 15376 15453\nf 15375 15453 15452\nf 15376 15377 15454\nf 15376 15454 15453\nf 15377 15378 15455\nf 15377 15455 15454\nf 15378 15379 15456\nf 15378 15456 15455\nf 15379 15380 15457\nf 15379 15457 15456\nf 15380 15381 15458\nf 15380 15458 15457\nf 15381 15382 15459\nf 15381 15459 15458\nf 15382 15383 15460\nf 15382 15460 15459\nf 15383 15384 15461\nf 15383 15461 15460\nf 15384 15385 15462\nf 15384 15462 15461\nf 15385 15386 15463\nf 15385 15463 15462\nf 15386 15387 15464\nf 15386 15464 15463\nf 15387 15388 15465\nf 15387 15465 15464\nf 15388 15389 15466\nf 15388 15466 15465\nf 15389 15390 15467\nf 15389 15467 15466\nf 15390 15391 15468\nf 15390 15468 15467\nf 15391 15392 15469\nf 15391 15469 15468\nf 15392 15393 15470\nf 15392 15470 15469\nf 15393 15394 15471\nf 15393 15471 15470\nf 15394 15395 15472\nf 15394 15472 15471\nf 15395 15396 15473\nf 15395 15473 15472\nf 15396 15397 15474\nf 15396 15474 15473\nf 15397 15398 15475\nf 15397 15475 15474\nf 15398 15399 15476\nf 15398 15476 15475\nf 15399 15400 15477\nf 15399 15477 15476\nf 15400 15401 15478\nf 15400 15478 15477\nf 15401 15402 15479\nf 15401 15479 15478\nf 15402 15403 15480\nf 15402 15480 15479\nf 15403 15404 15481\nf 15403 15481 15480\nf 15404 15405 15482\nf 15404 15482 15481\nf 15405 15406 15483\nf 15405 15483 15482\nf 15406 15407 15484\nf 15406 15484 15483\nf 15407 15408 15485\nf 15407 15485 15484\nf 15408 15409 15486\nf 15408 15486 15485\nf 15409 15410 15487\nf 15409 15487 15486\nf 15410 15411 15488\nf 15410 15488 15487\nf 15411 15412 15489\nf 15411 15489 15488\nf 15412 15413 15490\nf 15412 15490 15489\nf 15413 15414 15491\nf 15413 15491 15490\nf 15414 15415 15492\nf 15414 15492 15491\nf 15415 15416 15493\nf 15415 15493 15492\nf 15416 15417 15494\nf 15416 15494 15493\nf 15417 15418 15495\nf 15417 15495 15494\nf 15418 15419 15496\nf 15418 15496 15495\nf 15419 15420 15497\nf 15419 15497 15496\nf 15420 15498 15497\nf 15420 15499 15498\nf 15420 17484 17485\nf 15420 17485 15499\nf 15421 15500 17496\nf 15421 17496 17489\nf 15422 17480 17490\nf 15422 17490 15501\nf 15423 15424 15502\nf 15423 15502 17491\nf 15423 17491 17482\nf 15424 15425 15503\nf 15424 15503 15502\nf 15425 15426 15504\nf 15425 15504 15503\nf 15426 15427 15505\nf 15426 15505 15504\nf 15427 15428 15506\nf 15427 15506 15505\nf 15428 15429 15507\nf 15428 15507 15506\nf 15429 15430 15508\nf 15429 15508 15507\nf 15430 15431 15509\nf 15430 15509 15508\nf 15431 15432 15510\nf 15431 15510 15509\nf 15432 15433 15511\nf 15432 15511 15510\nf 15433 15434 15512\nf 15433 15512 15511\nf 15434 15435 15513\nf 15434 15513 15512\nf 15435 15436 15514\nf 15435 15514 15513\nf 15436 15437 15515\nf 15436 15515 15514\nf 15437 15438 15516\nf 15437 15516 15515\nf 15438 15439 15517\nf 15438 15517 15516\nf 15439 15440 15518\nf 15439 15518 15517\nf 15440 15441 15519\nf 15440 15519 15518\nf 15441 15442 15520\nf 15441 15520 15519\nf 15442 15443 15521\nf 15442 15521 15520\nf 15443 15444 15522\nf 15443 15522 15521\nf 15444 15445 15523\nf 15444 15523 15522\nf 15445 15446 15524\nf 15445 15524 15523\nf 15446 15447 15525\nf 15446 15525 15524\nf 15447 15448 15526\nf 15447 15526 15525\nf 15448 15449 15527\nf 15448 15527 15526\nf 15449 15450 15528\nf 15449 15528 15527\nf 15450 15451 15529\nf 15450 15529 15528\nf 15451 15452 15530\nf 15451 15530 15529\nf 15452 15453 15531\nf 15452 15531 15530\nf 15453 15454 15532\nf 15453 15532 15531\nf 15454 15455 15533\nf 15454 15533 15532\nf 15455 15456 15534\nf 15455 15534 15533\nf 15456 15457 15535\nf 15456 15535 15534\nf 15457 15458 15536\nf 15457 15536 15535\nf 15458 15459 15537\nf 15458 15537 15536\nf 15459 15460 15538\nf 15459 15538 15537\nf 15460 15461 15539\nf 15460 15539 15538\nf 15461 15462 15540\nf 15461 15540 15539\nf 15462 15463 15541\nf 15462 15541 15540\nf 15463 15464 15542\nf 15463 15542 15541\nf 15464 15465 15543\nf 15464 15543 15542\nf 15465 15466 15544\nf 15465 15544 15543\nf 15466 15467 15545\nf 15466 15545 15544\nf 15467 15468 15546\nf 15467 15546 15545\nf 15468 15469 15547\nf 15468 15547 15546\nf 15469 15470 15548\nf 15469 15548 15547\nf 15470 15471 15549\nf 15470 15549 15548\nf 15471 15472 15550\nf 15471 15550 15549\nf 15472 15473 15551\nf 15472 15551 15550\nf 15473 15474 15552\nf 15473 15552 15551\nf 15474 15475 15553\nf 15474 15553 15552\nf 15475 15476 15554\nf 15475 15554 15553\nf 15476 15477 15555\nf 15476 15555 15554\nf 15477 15478 15556\nf 15477 15556 15555\nf 15478 15479 15557\nf 15478 15557 15556\nf 15479 15480 15558\nf 15479 15558 15557\nf 15480 15481 15559\nf 15480 15559 15558\nf 15481 15482 15560\nf 15481 15560 15559\nf 15482 15483 15561\nf 15482 15561 15560\nf 15483 15484 15562\nf 15483 15562 15561\nf 15484 15485 15563\nf 15484 15563 15562\nf 15485 15486 15564\nf 15485 15564 15563\nf 15486 15487 15565\nf 15486 15565 15564\nf 15487 15488 15566\nf 15487 15566 15565\nf 15488 15489 15567\nf 15488 15567 15566\nf 15489 15490 15568\nf 15489 15568 15567\nf 15490 15491 15569\nf 15490 15569 15568\nf 15491 15492 15570\nf 15491 15570 15569\nf 15492 15493 15571\nf 15492 15571 15570\nf 15493 15494 15572\nf 15493 15572 15571\nf 15494 15495 15573\nf 15494 15573 15572\nf 15495 15496 15574\nf 15495 15574 15573\nf 15496 15497 15575\nf 15496 15575 15574\nf 15497 15498 15576\nf 15497 15576 15575\nf 15498 15499 15577\nf 15498 15577 15576\nf 15499 15578 15577\nf 15499 17485 17493\nf 15499 17493 17505\nf 15499 17505 15578\nf 15500 15579 17508\nf 15500 17508 17496\nf 15501 17490 17497\nf 15501 17497 15580\nf 15502 15503 15581\nf 15502 15581 17500\nf 15502 17498 17491\nf 15502 17500 17498\nf 15503 15504 15581\nf 15504 15505 15582\nf 15504 15582 15581\nf 15505 15506 15583\nf 15505 15583 15582\nf 15506 15507 15584\nf 15506 15584 15583\nf 15507 15508 15585\nf 15507 15585 15584\nf 15508 15509 15586\nf 15508 15586 15585\nf 15509 15510 15587\nf 15509 15587 15586\nf 15510 15511 15588\nf 15510 15588 15587\nf 15511 15512 15589\nf 15511 15589 15588\nf 15512 15513 15590\nf 15512 15590 15589\nf 15513 15514 15591\nf 15513 15591 15590\nf 15514 15515 15592\nf 15514 15592 15591\nf 15515 15516 15593\nf 15515 15593 15592\nf 15516 15517 15594\nf 15516 15594 15593\nf 15517 15518 15595\nf 15517 15595 15594\nf 15518 15519 15596\nf 15518 15596 15595\nf 15519 15520 15597\nf 15519 15597 15596\nf 15520 15521 15598\nf 15520 15598 15597\nf 15521 15522 15599\nf 15521 15599 15598\nf 15522 15523 15600\nf 15522 15600 15599\nf 15523 15524 15601\nf 15523 15601 15600\nf 15524 15525 15602\nf 15524 15602 15601\nf 15525 15526 15603\nf 15525 15603 15602\nf 15526 15527 15604\nf 15526 15604 15603\nf 15527 15528 15605\nf 15527 15605 15604\nf 15528 15529 15606\nf 15528 15606 15605\nf 15529 15530 15607\nf 15529 15607 15606\nf 15530 15531 15608\nf 15530 15608 15607\nf 15531 15532 15609\nf 15531 15609 15608\nf 15532 15533 15610\nf 15532 15610 15609\nf 15533 15534 15611\nf 15533 15611 15610\nf 15534 15535 15612\nf 15534 15612 15611\nf 15535 15536 15613\nf 15535 15613 15612\nf 15536 15537 15614\nf 15536 15614 15613\nf 15537 15538 15615\nf 15537 15615 15614\nf 15538 15539 15616\nf 15538 15616 15615\nf 15539 15540 15617\nf 15539 15617 15616\nf 15540 15541 15618\nf 15540 15618 15617\nf 15541 15542 15619\nf 15541 15619 15618\nf 15542 15543 15620\nf 15542 15620 15619\nf 15543 15544 15621\nf 15543 15621 15620\nf 15544 15545 15622\nf 15544 15622 15621\nf 15545 15546 15623\nf 15545 15623 15622\nf 15546 15547 15624\nf 15546 15624 15623\nf 15547 15548 15625\nf 15547 15625 15624\nf 15548 15549 15626\nf 15548 15626 15625\nf 15549 15550 15627\nf 15549 15627 15626\nf 15550 15551 15628\nf 15550 15628 15627\nf 15551 15552 15629\nf 15551 15629 15628\nf 15552 15553 15630\nf 15552 15630 15629\nf 15553 15554 15631\nf 15553 15631 15630\nf 15554 15555 15632\nf 15554 15632 15631\nf 15555 15556 15633\nf 15555 15633 15632\nf 15556 15557 15634\nf 15556 15634 15633\nf 15557 15558 15635\nf 15557 15635 15634\nf 15558 15559 15636\nf 15558 15636 15635\nf 15559 15560 15637\nf 15559 15637 15636\nf 15560 15561 15638\nf 15560 15638 15637\nf 15561 15562 15639\nf 15561 15639 15638\nf 15562 15563 15640\nf 15562 15640 15639\nf 15563 15564 15641\nf 15563 15641 15640\nf 15564 15565 15642\nf 15564 15642 15641\nf 15565 15566 15643\nf 15565 15643 15642\nf 15566 15567 17501\nf 15566 17501 17513\nf 15566 17513 15643\nf 15567 15568 17502\nf 15567 17502 17501\nf 15568 15569 17503\nf 15568 17503 17502\nf 15569 15570 15644\nf 15569 15644 17504\nf 15569 17504 17503\nf 15570 15571 15644\nf 15571 15572 15645\nf 15571 15645 15644\nf 15572 15573 15646\nf 15572 15646 15645\nf 15573 15574 15647\nf 15573 15647 15646\nf 15574 15575 15648\nf 15574 15648 15647\nf 15575 15576 15649\nf 15575 15649 15648\nf 15576 15577 15650\nf 15576 15650 15649\nf 15577 15578 15651\nf 15577 15651 15650\nf 15578 15652 15651\nf 15578 17505 17521\nf 15578 17521 15652\nf 15579 15653 17524\nf 15579 17524 17508\nf 15580 17497 17509\nf 15580 17509 15654\nf 15581 15582 15655\nf 15581 15655 17511\nf 15581 17511 17500\nf 15582 15583 15656\nf 15582 15656 15655\nf 15583 15584 15657\nf 15583 15657 15656\nf 15584 15585 15658\nf 15584 15658 15657\nf 15585 15586 15659\nf 15585 15659 15658\nf 15586 15587 15660\nf 15586 15660 15659\nf 15587 15588 15661\nf 15587 15661 15660\nf 15588 15589 15662\nf 15588 15662 15661\nf 15589 15590 15663\nf 15589 15663 15662\nf 15590 15591 15664\nf 15590 15664 15663\nf 15591 15592 15665\nf 15591 15665 15664\nf 15592 15593 15666\nf 15592 15666 15665\nf 15593 15594 15667\nf 15593 15667 15666\nf 15594 15595 15668\nf 15594 15668 15667\nf 15595 15596 15669\nf 15595 15669 15668\nf 15596 15597 15670\nf 15596 15670 15669\nf 15597 15598 15671\nf 15597 15671 15670\nf 15598 15599 15672\nf 15598 15672 15671\nf 15599 15600 15673\nf 15599 15673 15672\nf 15600 15601 15674\nf 15600 15674 15673\nf 15601 15602 15675\nf 15601 15675 15674\nf 15602 15603 15676\nf 15602 15676 15675\nf 15603 15604 15677\nf 15603 15677 15676\nf 15604 15605 15678\nf 15604 15678 15677\nf 15605 15606 15679\nf 15605 15679 15678\nf 15606 15607 15680\nf 15606 15680 15679\nf 15607 15608 15681\nf 15607 15681 15680\nf 15608 15609 15682\nf 15608 15682 15681\nf 15609 15610 15683\nf 15609 15683 15682\nf 15610 15611 15684\nf 15610 15684 15683\nf 15611 15612 15685\nf 15611 15685 15684\nf 15612 15613 15686\nf 15612 15686 15685\nf 15613 15614 15687\nf 15613 15687 15686\nf 15614 15615 15688\nf 15614 15688 15687\nf 15615 15616 15689\nf 15615 15689 15688\nf 15616 15617 15690\nf 15616 15690 15689\nf 15617 15618 15691\nf 15617 15691 15690\nf 15618 15619 15692\nf 15618 15692 15691\nf 15619 15620 15693\nf 15619 15693 15692\nf 15620 15621 15694\nf 15620 15694 15693\nf 15621 15622 15695\nf 15621 15695 15694\nf 15622 15623 15696\nf 15622 15696 15695\nf 15623 15624 15697\nf 15623 15697 15696\nf 15624 15625 15698\nf 15624 15698 15697\nf 15625 15626 15699\nf 15625 15699 15698\nf 15626 15627 15700\nf 15626 15700 15699\nf 15627 15628 15701\nf 15627 15701 15700\nf 15628 15629 15702\nf 15628 15702 15701\nf 15629 15630 15703\nf 15629 15703 15702\nf 15630 15631 15704\nf 15630 15704 15703\nf 15631 15632 15705\nf 15631 15705 15704\nf 15632 15633 15706\nf 15632 15706 15705\nf 15633 15634 15707\nf 15633 15707 15706\nf 15634 15635 15708\nf 15634 15708 15707\nf 15635 15636 15709\nf 15635 15709 15708\nf 15636 15637 15710\nf 15636 15710 15709\nf 15637 15638 15711\nf 15637 15711 15710\nf 15638 15639 15712\nf 15638 15712 15711\nf 15639 15640 15713\nf 15639 15713 15712\nf 15640 15641 15714\nf 15640 15714 15713\nf 15641 15642 15715\nf 15641 15715 15714\nf 15642 15643 15716\nf 15642 15716 15715\nf 15643 17513 17514\nf 15643 17514 17530\nf 15643 17530 15716\nf 15644 15645 15717\nf 15644 15717 17520\nf 15644 17518 17504\nf 15644 17520 17518\nf 15645 15646 15717\nf 15646 15647 15718\nf 15646 15718 15717\nf 15647 15648 15719\nf 15647 15719 15718\nf 15648 15649 15720\nf 15648 15720 15719\nf 15649 15650 15721\nf 15649 15721 15720\nf 15650 15651 15722\nf 15650 15722 15721\nf 15651 15652 15723\nf 15651 15723 15722\nf 15652 15724 15723\nf 15652 17521 17543\nf 15652 17543 15724\nf 15653 15725 17547\nf 15653 17547 17524\nf 15654 17509 17525\nf 15654 17525 15726\nf 15655 15656 17528\nf 15655 17526 17511\nf 15655 17528 17526\nf 15656 15657 15727\nf 15656 15727 17529\nf 15656 17529 17528\nf 15657 15658 15727\nf 15658 15659 15728\nf 15658 15728 15727\nf 15659 15660 15729\nf 15659 15729 15728\nf 15660 15661 15730\nf 15660 15730 15729\nf 15661 15662 15731\nf 15661 15731 15730\nf 15662 15663 15732\nf 15662 15732 15731\nf 15663 15664 15733\nf 15663 15733 15732\nf 15664 15665 15734\nf 15664 15734 15733\nf 15665 15666 15735\nf 15665 15735 15734\nf 15666 15667 15736\nf 15666 15736 15735\nf 15667 15668 15737\nf 15667 15737 15736\nf 15668 15669 15738\nf 15668 15738 15737\nf 15669 15670 15739\nf 15669 15739 15738\nf 15670 15671 15740\nf 15670 15740 15739\nf 15671 15672 15741\nf 15671 15741 15740\nf 15672 15673 15742\nf 15672 15742 15741\nf 15673 15674 15743\nf 15673 15743 15742\nf 15674 15675 15744\nf 15674 15744 15743\nf 15675 15676 15745\nf 15675 15745 15744\nf 15676 15677 15746\nf 15676 15746 15745\nf 15677 15678 15747\nf 15677 15747 15746\nf 15678 15679 15748\nf 15678 15748 15747\nf 15679 15680 15749\nf 15679 15749 15748\nf 15680 15681 15750\nf 15680 15750 15749\nf 15681 15682 15751\nf 15681 15751 15750\nf 15682 15683 15752\nf 15682 15752 15751\nf 15683 15684 15753\nf 15683 15753 15752\nf 15684 15685 15754\nf 15684 15754 15753\nf 15685 15686 15755\nf 15685 15755 15754\nf 15686 15687 15756\nf 15686 15756 15755\nf 15687 15688 15757\nf 15687 15757 15756\nf 15688 15689 15758\nf 15688 15758 15757\nf 15689 15690 15759\nf 15689 15759 15758\nf 15690 15691 15760\nf 15690 15760 15759\nf 15691 15692 15761\nf 15691 15761 15760\nf 15692 15693 15762\nf 15692 15762 15761\nf 15693 15694 15763\nf 15693 15763 15762\nf 15694 15695 15764\nf 15694 15764 15763\nf 15695 15696 15765\nf 15695 15765 15764\nf 15696 15697 15766\nf 15696 15766 15765\nf 15697 15698 15767\nf 15697 15767 15766\nf 15698 15699 15768\nf 15698 15768 15767\nf 15699 15700 15769\nf 15699 15769 15768\nf 15700 15701 15770\nf 15700 15770 15769\nf 15701 15702 15771\nf 15701 15771 15770\nf 15702 15703 15772\nf 15702 15772 15771\nf 15703 15704 15773\nf 15703 15773 15772\nf 15704 15705 15774\nf 15704 15774 15773\nf 15705 15706 15775\nf 15705 15775 15774\nf 15706 15707 15776\nf 15706 15776 15775\nf 15707 15708 15777\nf 15707 15777 15776\nf 15708 15709 15778\nf 15708 15778 15777\nf 15709 15710 15779\nf 15709 15779 15778\nf 15710 15711 15780\nf 15710 15780 15779\nf 15711 15712 15781\nf 15711 15781 15780\nf 15712 15713 15782\nf 15712 15782 15781\nf 15713 15714 15783\nf 15713 15783 15782\nf 15714 15715 15784\nf 15714 15784 15783\nf 15715 15716 15785\nf 15715 15785 15784\nf 15716 15786 15785\nf 15716 17530 17605\nf 15716 17605 15786\nf 15717 15718 17538\nf 15717 17536 17520\nf 15717 17538 17536\nf 15718 15719 17539\nf 15718 17539 17538\nf 15719 15720 17540\nf 15719 17540 17539\nf 15720 15721 17541\nf 15720 17541 17540\nf 15721 15722 15787\nf 15721 15787 17542\nf 15721 17542 17541\nf 15722 15723 15787\nf 15723 15724 15788\nf 15723 15788 15787\nf 15724 17543 17544\nf 15724 17544 17620\nf 15724 17620 15788\nf 15725 15789 17624\nf 15725 17624 17547\nf 15726 17525 17548\nf 15726 17548 15790\nf 15727 15728 17552\nf 15727 17550 17529\nf 15727 17552 17550\nf 15728 15729 17553\nf 15728 17553 17552\nf 15729 15730 17554\nf 15729 17554 17553\nf 15730 15731 17555\nf 15730 17555 17554\nf 15731 15732 17556\nf 15731 17556 17555\nf 15732 15733 17557\nf 15732 17557 17556\nf 15733 15734 17558\nf 15733 17558 17557\nf 15734 15735 17559\nf 15734 17559 17558\nf 15735 15736 15791\nf 15735 15791 17560\nf 15735 17560 17559\nf 15736 15737 15791\nf 15737 15738 15792\nf 15737 15792 15791\nf 15738 15739 15793\nf 15738 15793 15792\nf 15739 15740 15794\nf 15739 15794 15793\nf 15740 15741 15795\nf 15740 15795 15794\nf 15741 15742 15796\nf 15741 15796 15795\nf 15742 15743 17561\nf 15742 17561 17641\nf 15742 17641 15796\nf 15743 15744 17562\nf 15743 17562 17561\nf 15744 15745 17563\nf 15744 17563 17562\nf 15745 15746 17564\nf 15745 17564 17563\nf 15746 15747 17565\nf 15746 17565 17564\nf 15747 15748 17566\nf 15747 17566 17565\nf 15748 15749 17567\nf 15748 17567 17566\nf 15749 15750 17568\nf 15749 17568 17567\nf 15750 15751 17569\nf 15750 17569 17568\nf 15751 15752 17570\nf 15751 17570 17569\nf 15752 15753 17571\nf 15752 17571 17570\nf 15753 15754 17572\nf 15753 17572 17571\nf 15754 15755 17573\nf 15754 17573 17572\nf 15755 15756 17574\nf 15755 17574 17573\nf 15756 15757 17575\nf 15756 17575 17574\nf 15757 15758 17576\nf 15757 17576 17575\nf 15758 15759 17577\nf 15758 17577 17576\nf 15759 15760 17578\nf 15759 17578 17577\nf 15760 15761 17579\nf 15760 17579 17578\nf 15761 15762 17580\nf 15761 17580 17579\nf 15762 15763 17581\nf 15762 17581 17580\nf 15763 15764 17582\nf 15763 17582 17581\nf 15764 15765 17583\nf 15764 17583 17582\nf 15765 15766 17584\nf 15765 17584 17583\nf 15766 15767 17585\nf 15766 17585 17584\nf 15767 15768 17586\nf 15767 17586 17585\nf 15768 15769 17587\nf 15768 17587 17586\nf 15769 15770 17588\nf 15769 17588 17587\nf 15770 15771 17589\nf 15770 17589 17588\nf 15771 15772 17590\nf 15771 17590 17589\nf 15772 15773 17591\nf 15772 17591 17590\nf 15773 15774 17592\nf 15773 17592 17591\nf 15774 15775 17593\nf 15774 17593 17592\nf 15775 15776 17594\nf 15775 17594 17593\nf 15776 15777 17595\nf 15776 17595 17594\nf 15777 15778 17596\nf 15777 17596 17595\nf 15778 15779 17597\nf 15778 17597 17596\nf 15779 15780 17598\nf 15779 17598 17597\nf 15780 15781 17599\nf 15780 17599 17598\nf 15781 15782 17600\nf 15781 17600 17599\nf 15782 15783 17601\nf 15782 17601 17600\nf 15783 15784 17602\nf 15783 17602 17601\nf 15784 15785 17603\nf 15784 17603 17602\nf 15785 15786 17604\nf 15785 17604 17603\nf 15786 17605 17606\nf 15786 17606 17604\nf 15787 15788 17619\nf 15787 17617 17542\nf 15787 17619 17617\nf 15788 17620 17621\nf 15788 17621 17619\nf 15789 15797 17702\nf 15789 17702 17624\nf 15790 17548 17625\nf 15790 17625 15798\nf 15791 15792 17636\nf 15791 17634 17560\nf 15791 17636 17634\nf 15792 15793 17637\nf 15792 17637 17636\nf 15793 15794 17638\nf 15793 17638 17637\nf 15794 15795 17639\nf 15794 17639 17638\nf 15795 15796 17640\nf 15795 17640 17639\nf 15796 17641 17642\nf 15796 17642 17640\nf 15797 15799 17704\nf 15797 17704 17702\nf 15798 17625 17703\nf 15798 17703 15801\nf 15799 15800 17704\nf 15800 15802 17708\nf 15800 17705 17704\nf 15800 17708 17705\nf 15801 17703 17707\nf 15801 17707 15803\nf 15802 15804 17710\nf 15802 17710 17708\nf 15803 17707 17709\nf 15803 17709 15806\nf 15804 15805 17710\nf 15805 15808 17715\nf 15805 17711 17710\nf 15805 17715 17711\nf 15806 17709 17713\nf 15806 17713 15810\nf 15807 15831 17735\nf 15807 17714 17716\nf 15807 17716 15809\nf 15807 17735 17714\nf 15808 15809 17715\nf 15809 17716 17715\nf 15810 17713 17718\nf 15810 17718 15833\nf 15811 15898 15900\nf 15811 15900 15901\nf 15811 15901 15812\nf 15812 15901 15902\nf 15812 15902 15813\nf 15813 15902 15903\nf 15813 15903 15814\nf 15814 15903 17807\nf 15814 17719 15815\nf 15814 17807 17719\nf 15815 17719 17720\nf 15815 17720 15816\nf 15816 17720 17721\nf 15816 17721 15817\nf 15817 17721 17722\nf 15817 17722 15818\nf 15818 17722 17723\nf 15818 17723 15819\nf 15819 17723 17724\nf 15819 17724 15820\nf 15820 17724 17725\nf 15820 17725 15821\nf 15821 17725 17726\nf 15821 17726 15822\nf 15822 17726 17727\nf 15822 17727 15823\nf 15823 17727 17728\nf 15823 17728 15824\nf 15824 17728 17729\nf 15824 17729 15825\nf 15825 17729 17730\nf 15825 17730 15826\nf 15826 17730 17731\nf 15826 17731 15827\nf 15827 17731 17732\nf 15827 17732 15828\nf 15828 17732 17733\nf 15828 17733 15829\nf 15829 17733 17734\nf 15829 17734 15830\nf 15830 17734 17736\nf 15830 17736 15832\nf 15831 15832 17735\nf 15832 17736 17735\nf 15833 17718 17737\nf 15833 17737 15904\nf 15834 15906 15908\nf 15834 15908 17738\nf 15834 17738 17739\nf 15834 17739 17740\nf 15834 17740 15835\nf 15835 17740 17741\nf 15835 17741 15836\nf 15836 17741 17742\nf 15836 17742 15837\nf 15837 17742 17743\nf 15837 17743 15838\nf 15838 17743 17744\nf 15838 17744 15839\nf 15839 17744 17745\nf 15839 17745 15840\nf 15840 17745 17746\nf 15840 17746 15841\nf 15841 17746 17747\nf 15841 17747 15842\nf 15842 17747 17748\nf 15842 17748 15843\nf 15843 17748 17749\nf 15843 17749 15844\nf 15844 17749 17750\nf 15844 17750 15845\nf 15845 17750 17751\nf 15845 17751 15846\nf 15846 17751 17752\nf 15846 17752 15847\nf 15847 17752 17753\nf 15847 17753 15848\nf 15848 17753 17754\nf 15848 17754 15849\nf 15849 17754 17755\nf 15849 17755 15850\nf 15850 17755 17756\nf 15850 17756 15851\nf 15851 17756 17757\nf 15851 17757 15852\nf 15852 17757 17758\nf 15852 17758 15853\nf 15853 17758 17759\nf 15853 17759 15854\nf 15854 17759 17760\nf 15854 17760 15855\nf 15855 17760 17761\nf 15855 17761 15856\nf 15856 17761 17762\nf 15856 17762 15857\nf 15857 17762 17763\nf 15857 17763 15858\nf 15858 17763 17764\nf 15858 17764 15859\nf 15859 17764 17765\nf 15859 17765 15860\nf 15860 17765 17766\nf 15860 17766 15861\nf 15861 17766 17767\nf 15861 17767 15862\nf 15862 17767 17768\nf 15862 17768 15863\nf 15863 17768 17769\nf 15863 17769 15864\nf 15864 17769 17770\nf 15864 17770 15865\nf 15865 17770 17771\nf 15865 17771 15866\nf 15866 17771 17772\nf 15866 17772 15867\nf 15867 17772 17773\nf 15867 17773 15868\nf 15868 17773 17774\nf 15868 17774 15869\nf 15869 17774 17775\nf 15869 17775 15870\nf 15870 17775 17776\nf 15870 17776 15871\nf 15871 17776 17777\nf 15871 17777 15872\nf 15872 17777 17778\nf 15872 17778 15873\nf 15873 17778 17779\nf 15873 17779 15874\nf 15874 17779 17780\nf 15874 17780 15875\nf 15875 17780 17781\nf 15875 17781 15876\nf 15876 17781 17782\nf 15876 17782 15877\nf 15877 17782 17783\nf 15877 17783 15878\nf 15878 17783 17784\nf 15878 17784 15879\nf 15879 17784 17785\nf 15879 17785 15880\nf 15880 17785 17786\nf 15880 17786 15881\nf 15881 17786 17787\nf 15881 17787 15882\nf 15882 17787 17788\nf 15882 17788 15883\nf 15883 17788 17789\nf 15883 17789 15884\nf 15884 17789 17790\nf 15884 17790 15885\nf 15885 17790 17791\nf 15885 17791 15886\nf 15886 17791 17792\nf 15886 17792 15887\nf 15887 17792 17793\nf 15887 17793 15888\nf 15888 17793 17794\nf 15888 17794 15889\nf 15889 17794 17795\nf 15889 17795 15890\nf 15890 17795 17796\nf 15890 17796 15891\nf 15891 17796 17797\nf 15891 17797 15892\nf 15892 17797 17798\nf 15892 17798 15893\nf 15893 17798 17799\nf 15893 17799 15894\nf 15894 17799 17800\nf 15894 17800 15895\nf 15895 17800 17801\nf 15895 17801 15896\nf 15896 17801 17802\nf 15896 17802 15897\nf 15897 17802 17803\nf 15897 17803 15899\nf 15898 15899 15900\nf 15899 17803 17804\nf 15899 17804 15900\nf 15900 17804 15901\nf 15901 17804 17805\nf 15901 17805 15902\nf 15902 17805 17806\nf 15902 17806 15903\nf 15903 17806 17808\nf 15903 17808 17807\nf 15904 17737 17811\nf 15904 17811 15909\nf 15905 15910 15912\nf 15905 15912 17812\nf 15905 17812 17814\nf 15905 17814 15907\nf 15906 15907 15908\nf 15907 17813 15908\nf 15907 17814 17813\nf 15908 17813 17738\nf 15909 17811 17815\nf 15909 17815 15913\nf 15910 15911 15912\nf 15911 15914 15915\nf 15911 15915 17817\nf 15911 17817 15912\nf 15912 17816 17812\nf 15912 17817 17816\nf 15913 17815 17818\nf 15913 17818 15916\nf 15914 15917 15919\nf 15914 15919 15915\nf 15915 15919 17820\nf 15915 17820 17817\nf 15916 17818 17821\nf 15916 17821 15920\nf 15917 15918 15919\nf 15918 15921 15922\nf 15918 15922 17826\nf 15918 17826 15919\nf 15919 17825 17820\nf 15919 17826 17825\nf 15920 17821 17828\nf 15920 17828 15923\nf 15921 15924 15925\nf 15921 15925 15922\nf 15922 15925 17830\nf 15922 17830 17826\nf 15923 17828 17832\nf 15923 17832 15926\nf 15924 15927 15928\nf 15924 15928 15925\nf 15925 15928 17834\nf 15925 17834 17830\nf 15926 17832 17836\nf 15926 17836 15929\nf 15927 15930 15931\nf 15927 15931 15928\nf 15928 15931 17837\nf 15928 17837 17834\nf 15929 17836 17839\nf 15929 17839 15932\nf 15930 15933 15934\nf 15930 15934 15931\nf 15931 15934 17840\nf 15931 17840 17837\nf 15932 17839 17842\nf 15932 17842 15935\nf 15933 15937 15938\nf 15933 15938 15934\nf 15934 15938 17843\nf 15934 17843 17840\nf 15935 17842 17845\nf 15935 17845 17848\nf 15935 17848 15936\nf 15936 15940 15939\nf 15936 17848 15940\nf 15937 15941 15942\nf 15937 15942 15938\nf 15938 15942 17846\nf 15938 17846 17843\nf 15939 15940 15943\nf 15940 15944 15943\nf 15940 17848 17851\nf 15940 17851 15944\nf 15941 15945 17852\nf 15941 17850 15942\nf 15941 17852 17850\nf 15942 17849 17846\nf 15942 17850 17849\nf 15943 15944 15946\nf 15944 15947 15946\nf 15944 17851 17854\nf 15944 17854 15947\nf 15945 15948 17855\nf 15945 17855 17852\nf 15946 15947 15949\nf 15947 15950 15949\nf 15947 17854 17857\nf 15947 17857 15950\nf 15948 15951 17858\nf 15948 17858 17855\nf 15949 15950 15952\nf 15950 15953 15952\nf 15950 17857 17860\nf 15950 17860 15953\nf 15951 15954 17861\nf 15951 17861 17858\nf 15952 15953 15956\nf 15953 15957 15956\nf 15953 17860 17862\nf 15953 17862 15957\nf 15954 15955 15959\nf 15954 15959 17863\nf 15954 17863 17861\nf 15955 15958 15959\nf 15956 15957 15960\nf 15957 15961 15960\nf 15957 17862 17864\nf 15957 17864 15961\nf 15958 15962 15963\nf 15958 15963 15959\nf 15959 15963 17863\nf 15960 15961 15964\nf 15961 15965 15964\nf 15961 17864 17867\nf 15961 17867 15965\nf 15962 15966 17869\nf 15962 17866 15963\nf 15962 17869 17866\nf 15963 17865 17863\nf 15963 17866 17865\nf 15964 15965 17871\nf 15964 17871 15967\nf 15965 17867 17868\nf 15965 17868 17871\nf 15966 15968 17873\nf 15966 17873 17869\nf 15967 17871 15969\nf 15968 15970 17877\nf 15968 17877 17873\nf 15969 17871 17875\nf 15969 17875 15971\nf 15970 15972 17880\nf 15970 17880 17877\nf 15971 17875 17878\nf 15971 17878 15973\nf 15972 15974 17883\nf 15972 17883 17880\nf 15973 17878 17881\nf 15973 17881 15975\nf 15974 15976 17886\nf 15974 17886 17883\nf 15975 17881 17884\nf 15975 17884 15977\nf 15976 15978 17889\nf 15976 17889 17886\nf 15977 17884 17887\nf 15977 17887 15979\nf 15978 15980 17892\nf 15978 17892 17889\nf 15979 17887 17890\nf 15979 17890 15981\nf 15980 15982 17896\nf 15980 17896 17892\nf 15981 17890 17893\nf 15981 17893 15983\nf 15982 15985 17898\nf 15982 17898 17896\nf 15983 15984 15986\nf 15983 17893 17894\nf 15983 17894 15984\nf 15984 15987 15986\nf 15984 17894 17897\nf 15984 17897 17901\nf 15984 17901 15987\nf 15985 15988 17898\nf 15986 15987 15991\nf 15987 15992 15991\nf 15987 17901 17903\nf 15987 17903 15992\nf 15988 15989 15990\nf 15988 15990 17898\nf 15989 15993 17902\nf 15989 17902 15990\nf 15990 17899 17898\nf 15990 17902 17899\nf 15991 15992 15994\nf 15992 15995 15994\nf 15992 17903 17906\nf 15992 17906 15995\nf 15993 15996 17908\nf 15993 17905 17902\nf 15993 17908 17905\nf 15994 15995 15997\nf 15995 15998 15997\nf 15995 17906 17909\nf 15995 17909 15998\nf 15996 15999 17911\nf 15996 17911 17908\nf 15997 15998 16000\nf 15998 16001 16000\nf 15998 17909 17914\nf 15998 17914 16001\nf 15999 16002 17911\nf 16000 16001 16004\nf 16001 16005 16004\nf 16001 17914 17917\nf 16001 17917 16005\nf 16002 16003 17911\nf 16002 16006 16008\nf 16002 16008 16003\nf 16003 16008 17916\nf 16003 17912 17911\nf 16003 17916 17912\nf 16004 16005 16009\nf 16005 16010 16009\nf 16005 17917 17921\nf 16005 17921 16010\nf 16006 16007 16008\nf 16007 16011 17919\nf 16007 17919 16008\nf 16008 17919 17916\nf 16009 16010 16012\nf 16010 16013 16012\nf 16010 17921 17924\nf 16010 17924 16013\nf 16011 16014 17925\nf 16011 17922 17919\nf 16011 17925 17922\nf 16012 16013 16015\nf 16013 16016 16015\nf 16013 17924 17927\nf 16013 17927 16016\nf 16014 16017 17929\nf 16014 17929 17925\nf 16015 16016 17931\nf 16015 17931 16018\nf 16016 17927 17928\nf 16016 17928 17931\nf 16017 16019 17933\nf 16017 17933 17929\nf 16018 17931 16020\nf 16019 16021 17937\nf 16019 17937 17933\nf 16020 17931 17935\nf 16020 17935 16022\nf 16021 16023 17941\nf 16021 17941 17937\nf 16022 17935 17939\nf 16022 17939 16024\nf 16023 16026 17945\nf 16023 17945 17941\nf 16024 17939 17943\nf 16024 17943 17947\nf 16024 17947 16025\nf 16025 16028 16027\nf 16025 17947 16028\nf 16026 16029 17949\nf 16026 17949 17945\nf 16027 16028 16030\nf 16028 16031 16030\nf 16028 17947 17951\nf 16028 17951 16031\nf 16029 16032 17953\nf 16029 17953 17949\nf 16030 16031 16033\nf 16031 16034 16033\nf 16031 17951 17955\nf 16031 17955 16034\nf 16032 16035 17957\nf 16032 17957 17953\nf 16033 16034 16036\nf 16034 16037 16036\nf 16034 17955 17959\nf 16034 17959 16037\nf 16035 16038 17961\nf 16035 17961 17957\nf 16036 16037 16039\nf 16037 16040 16039\nf 16037 17959 17963\nf 16037 17963 16040\nf 16038 16041 17965\nf 16038 17965 17961\nf 16039 16040 16042\nf 16040 16043 16042\nf 16040 17963 17968\nf 16040 17968 16043\nf 16041 16044 17965\nf 16042 16043 16046\nf 16043 16047 16046\nf 16043 17968 17971\nf 16043 17971 16047\nf 16044 16045 17965\nf 16044 16048 16050\nf 16044 16050 16045\nf 16045 16050 17970\nf 16045 17966 17965\nf 16045 17970 17966\nf 16046 16047 16051\nf 16047 16052 16051\nf 16047 17971 17975\nf 16047 17975 16052\nf 16048 16049 16050\nf 16049 16053 17973\nf 16049 17973 16050\nf 16050 17973 17970\nf 16051 16052 16054\nf 16052 16055 16054\nf 16052 17975 17980\nf 16052 17980 16055\nf 16053 16056 17977\nf 16053 17977 17973\nf 16054 16055 16058\nf 16055 16059 16058\nf 16055 17980 17983\nf 16055 17983 16059\nf 16056 16057 17977\nf 16056 16060 16061\nf 16056 16061 16057\nf 16057 16061 17982\nf 16057 17978 17977\nf 16057 17982 17978\nf 16058 16059 16062\nf 16059 16063 16062\nf 16059 17983 17987\nf 16059 17987 16063\nf 16060 16064 16065\nf 16060 16065 16061\nf 16061 16065 17985\nf 16061 17985 17982\nf 16062 16063 16066\nf 16063 16067 16066\nf 16063 17987 17991\nf 16063 17991 16067\nf 16064 16068 16069\nf 16064 16069 16065\nf 16065 16069 17989\nf 16065 17989 17985\nf 16066 16067 16070\nf 16067 16071 16070\nf 16067 17991 17995\nf 16067 17995 16071\nf 16068 16072 16073\nf 16068 16073 16069\nf 16069 16073 17993\nf 16069 17993 17989\nf 16070 16071 16074\nf 16071 16075 16074\nf 16071 17995 17999\nf 16071 17999 16075\nf 16072 16076 16077\nf 16072 16077 16073\nf 16073 16077 17997\nf 16073 17997 17993\nf 16074 16075 16078\nf 16075 16079 16078\nf 16075 17999 18003\nf 16075 18003 16079\nf 16076 16080 16081\nf 16076 16081 16077\nf 16077 16081 18001\nf 16077 18001 17997\nf 16078 16079 16082\nf 16079 16083 16082\nf 16079 18003 18007\nf 16079 18007 16083\nf 16080 16084 16085\nf 16080 16085 16081\nf 16081 16085 18005\nf 16081 18005 18001\nf 16082 16083 18012\nf 16082 18012 16086\nf 16083 18007 18008\nf 16083 18008 18012\nf 16084 16087 16088\nf 16084 16088 16085\nf 16085 16088 18010\nf 16085 18010 18005\nf 16086 18012 16089\nf 16087 16091 16092\nf 16087 16092 16088\nf 16088 16092 18014\nf 16088 18014 18010\nf 16089 18012 18016\nf 16089 18016 18020\nf 16089 18020 16090\nf 16090 16094 16093\nf 16090 18020 16094\nf 16091 16095 16096\nf 16091 16096 16092\nf 16092 16096 18018\nf 16092 18018 18014\nf 16093 16094 16097\nf 16094 16098 16097\nf 16094 18020 18025\nf 16094 18025 16098\nf 16095 16099 16101\nf 16095 16101 16096\nf 16096 16101 18023\nf 16096 18023 18018\nf 16097 16098 16102\nf 16098 16103 16102\nf 16098 18025 18030\nf 16098 18030 16103\nf 16099 16100 16101\nf 16100 16104 18028\nf 16100 18028 16101\nf 16101 18028 18023\nf 16102 16103 16105\nf 16103 16106 16105\nf 16103 18030 18036\nf 16103 18036 16106\nf 16104 16107 18033\nf 16104 18033 18028\nf 16105 16106 16109\nf 16106 16110 16109\nf 16106 18036 18040\nf 16106 18040 16110\nf 16107 16108 18033\nf 16107 16111 16112\nf 16107 16112 16108\nf 16108 16112 18038\nf 16108 18034 18033\nf 16108 18038 18034\nf 16109 16110 16113\nf 16110 16114 16113\nf 16110 18040 18044\nf 16110 18044 16114\nf 16111 16115 16116\nf 16111 16116 16112\nf 16112 16116 18042\nf 16112 18042 18038\nf 16113 16114 16117\nf 16114 16118 16117\nf 16114 18044 18048\nf 16114 18048 16118\nf 16115 16119 16120\nf 16115 16120 16116\nf 16116 16120 18046\nf 16116 18046 18042\nf 16117 16118 18053\nf 16117 18053 16121\nf 16118 18048 18049\nf 16118 18049 18053\nf 16119 16122 16123\nf 16119 16123 16120\nf 16120 16123 18051\nf 16120 18051 18046\nf 16121 18053 16124\nf 16122 16125 16126\nf 16122 16126 16123\nf 16123 16126 18055\nf 16123 18055 18051\nf 16124 18053 18057\nf 16124 18057 16127\nf 16125 16128 16129\nf 16125 16129 16126\nf 16126 16129 18059\nf 16126 18059 18055\nf 16127 18057 18061\nf 16127 18061 16130\nf 16128 16132 16134\nf 16128 16134 16129\nf 16129 16134 18063\nf 16129 18063 18059\nf 16130 18061 18065\nf 16130 18065 18070\nf 16130 18070 16131\nf 16131 16136 16135\nf 16131 18070 16136\nf 16132 16133 16134\nf 16133 16137 18068\nf 16133 18068 16134\nf 16134 18068 18063\nf 16135 16136 16139\nf 16136 16140 16139\nf 16136 18070 18074\nf 16136 18074 16140\nf 16137 16138 16142\nf 16137 16142 18076\nf 16137 18072 18068\nf 16137 18076 18072\nf 16138 16141 16142\nf 16139 16140 16143\nf 16140 16144 16143\nf 16140 18074 18078\nf 16140 18078 16144\nf 16141 16145 16146\nf 16141 16146 16142\nf 16142 16146 18076\nf 16143 16144 16147\nf 16144 16148 16147\nf 16144 18078 18080\nf 16144 18080 16148\nf 16145 16149 16150\nf 16145 16150 16146\nf 16146 16150 18079\nf 16146 18079 18076\nf 16147 16148 16151\nf 16148 16152 16151\nf 16148 18080 18082\nf 16148 18082 16152\nf 16149 16153 16154\nf 16149 16154 16150\nf 16150 16154 18081\nf 16150 18081 18079\nf 16151 16152 16155\nf 16152 16156 16155\nf 16152 18082 18084\nf 16152 18084 16156\nf 16153 16157 16159\nf 16153 16159 16154\nf 16154 16159 18083\nf 16154 18083 18081\nf 16155 16156 18087\nf 16155 18087 16160\nf 16156 18084 18085\nf 16156 18085 18087\nf 16157 16158 16159\nf 16158 16161 18086\nf 16158 18086 16159\nf 16159 18086 18083\nf 16160 18087 16162\nf 16161 16163 18092\nf 16161 18089 18086\nf 16161 18092 18089\nf 16162 18087 18090\nf 16162 18090 16164\nf 16163 16165 18095\nf 16163 18095 18092\nf 16164 18090 18093\nf 16164 18093 16167\nf 16165 16166 16170\nf 16165 16170 18098\nf 16165 18098 18095\nf 16166 16168 16170\nf 16167 18093 18096\nf 16167 18096 16171\nf 16168 16169 16170\nf 16169 16172 18098\nf 16169 18098 16170\nf 16171 18096 18099\nf 16171 18099 16173\nf 16172 16174 18104\nf 16172 18101 18098\nf 16172 18104 18101\nf 16173 18099 18102\nf 16173 18102 16175\nf 16174 16176 18107\nf 16174 18107 18104\nf 16175 18102 18105\nf 16175 18105 16177\nf 16176 16178 18111\nf 16176 18111 18107\nf 16177 18105 18108\nf 16177 18108 16179\nf 16178 16181 18113\nf 16178 18113 18111\nf 16179 16180 16182\nf 16179 18108 18109\nf 16179 18109 16180\nf 16180 16183 16182\nf 16180 18109 18112\nf 16180 18112 18116\nf 16180 18116 16183\nf 16181 16184 18113\nf 16182 16183 16187\nf 16183 16188 16187\nf 16183 18116 18118\nf 16183 18118 16188\nf 16184 16185 16186\nf 16184 16186 18113\nf 16185 16189 18117\nf 16185 18117 16186\nf 16186 18114 18113\nf 16186 18117 18114\nf 16187 16188 16190\nf 16188 16191 16190\nf 16188 18118 18121\nf 16188 18121 16191\nf 16189 16192 18119\nf 16189 18119 18117\nf 16190 16191 16195\nf 16191 16196 16195\nf 16191 18121 18123\nf 16191 18123 16196\nf 16192 16193 16194\nf 16192 16194 18119\nf 16193 16197 18122\nf 16193 18122 16194\nf 16194 18120 18119\nf 16194 18122 18120\nf 16195 16196 16198\nf 16196 16199 16198\nf 16196 18123 18127\nf 16196 18127 16199\nf 16197 16200 18124\nf 16197 18124 18122\nf 16198 16199 16203\nf 16199 16204 16203\nf 16199 18127 18132\nf 16199 18132 16204\nf 16200 16201 16202\nf 16200 16202 18124\nf 16201 16205 16207\nf 16201 16207 18130\nf 16201 18130 16202\nf 16202 18125 18124\nf 16202 18129 18125\nf 16202 18130 18129\nf 16203 16204 16208\nf 16204 16209 16208\nf 16204 18132 18137\nf 16204 18137 16209\nf 16205 16206 16207\nf 16206 16210 16211\nf 16206 16211 18135\nf 16206 18135 16207\nf 16207 18134 18130\nf 16207 18135 18134\nf 16208 16209 16212\nf 16209 16213 16212\nf 16209 18137 18140\nf 16209 18140 16213\nf 16210 16214 16216\nf 16210 16216 16211\nf 16211 16216 18139\nf 16211 18139 18135\nf 16212 16213 16217\nf 16213 16218 16217\nf 16213 18140 18146\nf 16213 18146 16218\nf 16214 16215 16216\nf 16215 16219 16221\nf 16215 16221 18144\nf 16215 18144 16216\nf 16216 18143 18139\nf 16216 18144 18143\nf 16217 16218 16222\nf 16218 16223 16222\nf 16218 18146 18152\nf 16218 18152 16223\nf 16219 16220 16221\nf 16220 16224 16225\nf 16220 16225 18150\nf 16220 18150 16221\nf 16221 18149 18144\nf 16221 18150 18149\nf 16222 16223 16226\nf 16223 16227 16226\nf 16223 18152 18156\nf 16223 18156 16227\nf 16224 16228 16229\nf 16224 16229 16225\nf 16225 16229 18154\nf 16225 18154 18150\nf 16226 16227 16230\nf 16227 16232 16230\nf 16227 18156 18161\nf 16227 18161 16232\nf 16228 16234 16236\nf 16228 16236 16229\nf 16229 16233 18158\nf 16229 16236 16233\nf 16229 18158 18154\nf 16230 16232 16231\nf 16231 16232 18162\nf 16231 16238 16237\nf 16231 18162 16238\nf 16232 18161 18162\nf 16233 16236 16240\nf 16233 16240 18163\nf 16233 18159 18158\nf 16233 18163 18159\nf 16234 16235 16236\nf 16235 16239 16240\nf 16235 16240 16236\nf 16237 16238 16242\nf 16238 16243 16242\nf 16238 18162 18165\nf 16238 18165 18169\nf 16238 18169 16243\nf 16239 16241 16246\nf 16239 16246 16240\nf 16240 16244 18167\nf 16240 16246 16244\nf 16240 18167 18163\nf 16241 16245 16246\nf 16242 16243 16247\nf 16243 16249 16247\nf 16243 16251 16249\nf 16243 18169 18170\nf 16243 18170 16251\nf 16244 16246 16254\nf 16244 16253 18172\nf 16244 16254 16253\nf 16244 18172 18167\nf 16245 16255 16256\nf 16245 16256 16246\nf 16246 16256 16254\nf 16247 16249 16248\nf 16248 16249 16250\nf 16249 16251 16250\nf 16250 16251 16252\nf 16251 16253 16252\nf 16251 18170 18173\nf 16251 18173 16253\nf 16252 16253 16257\nf 16253 16254 16259\nf 16253 16259 16257\nf 16253 18173 18172\nf 16254 16256 16259\nf 16255 16260 16262\nf 16255 16262 16256\nf 16256 16262 16259\nf 16257 16259 16258\nf 16258 16259 16261\nf 16259 16262 16261\nf 16260 16261 16262\nf 16263 16264 18175\nf 16263 16280 16278\nf 16263 18175 18183\nf 16263 18183 16280\nf 16264 16265 18175\nf 16265 16266 18176\nf 16265 18176 18175\nf 16266 16267 18177\nf 16266 18177 18176\nf 16267 16268 18178\nf 16267 18178 18177\nf 16268 16281 16282\nf 16268 16282 18178\nf 16269 16270 16289\nf 16269 16288 16286\nf 16269 16289 16288\nf 16270 16271 16290\nf 16270 16290 16289\nf 16271 16272 18179\nf 16271 18179 18193\nf 16271 18193 16290\nf 16272 16273 18179\nf 16273 16274 18180\nf 16273 18180 18179\nf 16274 16275 18181\nf 16274 18181 18180\nf 16275 16276 18182\nf 16275 18182 18181\nf 16276 16277 16293\nf 16276 16291 18182\nf 16276 16293 16291\nf 16277 16292 16293\nf 16278 16280 16279\nf 16279 16280 18184\nf 16279 16295 16294\nf 16279 18184 16295\nf 16280 18183 18184\nf 16281 16283 18190\nf 16281 18190 16282\nf 16282 18188 18178\nf 16282 18190 18188\nf 16283 16284 18191\nf 16283 18191 18190\nf 16284 16285 16298\nf 16284 16296 18191\nf 16284 16298 16296\nf 16285 16297 16298\nf 16286 16288 16287\nf 16287 16288 16303\nf 16287 16303 16301\nf 16288 16289 16304\nf 16288 16304 16303\nf 16289 16290 18192\nf 16289 18192 18212\nf 16289 18212 16304\nf 16290 18193 18194\nf 16290 18194 18192\nf 16291 16293 16306\nf 16291 16306 18200\nf 16291 18198 18182\nf 16291 18200 18198\nf 16292 16305 16306\nf 16292 16306 16293\nf 16294 16295 16308\nf 16295 16310 16308\nf 16295 18184 18201\nf 16295 18201 18223\nf 16295 18223 16310\nf 16296 16298 16311\nf 16296 16311 18210\nf 16296 18208 18191\nf 16296 18210 18208\nf 16297 16299 16312\nf 16297 16312 16298\nf 16298 16312 16311\nf 16299 16300 16314\nf 16299 16314 16312\nf 16300 16313 16314\nf 16301 16303 16302\nf 16302 16303 18211\nf 16302 16317 16316\nf 16302 18211 16317\nf 16303 16304 18211\nf 16304 18212 18213\nf 16304 18213 18211\nf 16305 16307 18222\nf 16305 18222 16306\nf 16306 18220 18200\nf 16306 18222 18220\nf 16307 16318 16319\nf 16307 16319 18245\nf 16307 18245 18222\nf 16308 16310 16309\nf 16309 16310 18224\nf 16309 16321 16320\nf 16309 18224 16321\nf 16310 18223 18224\nf 16311 16312 16322\nf 16311 16322 18234\nf 16311 18232 18210\nf 16311 18234 18232\nf 16312 16314 16322\nf 16313 16315 16325\nf 16313 16325 16314\nf 16314 16323 16322\nf 16314 16325 16323\nf 16315 16324 16325\nf 16316 16317 16327\nf 16317 16328 16327\nf 16317 18211 18235\nf 16317 18235 18262\nf 16317 18262 16328\nf 16318 16329 18268\nf 16318 18247 16319\nf 16318 18268 18247\nf 16319 18247 18245\nf 16320 16321 16331\nf 16321 16332 16331\nf 16321 18224 18248\nf 16321 18248 18270\nf 16321 18270 16332\nf 16322 16323 18260\nf 16322 18258 18234\nf 16322 18260 18258\nf 16323 16325 16333\nf 16323 16333 18261\nf 16323 18261 18260\nf 16324 16326 16335\nf 16324 16335 16325\nf 16325 16335 16333\nf 16326 16334 16335\nf 16327 16328 18285\nf 16327 18285 16336\nf 16328 18262 18263\nf 16328 18263 18285\nf 16329 16330 16338\nf 16329 16338 18289\nf 16329 18289 18268\nf 16330 16337 16338\nf 16331 16332 18291\nf 16331 18291 16339\nf 16332 18270 18271\nf 16332 18271 18291\nf 16333 16335 16340\nf 16333 16340 18283\nf 16333 18283 18261\nf 16334 16341 16342\nf 16334 16342 16335\nf 16335 16342 16340\nf 16336 18285 16343\nf 16337 16345 16346\nf 16337 16346 16338\nf 16338 16346 18289\nf 16339 18291 16347\nf 16340 16342 16349\nf 16340 16349 18304\nf 16340 18304 18283\nf 16341 16350 16351\nf 16341 16351 16342\nf 16342 16351 16349\nf 16343 16344 16352\nf 16343 18285 18286\nf 16343 18286 16344\nf 16344 16353 16352\nf 16344 18286 18306\nf 16344 18306 18324\nf 16344 18324 16353\nf 16345 16354 16355\nf 16345 16355 16346\nf 16346 16355 18308\nf 16346 18308 18289\nf 16347 16348 16357\nf 16347 18291 18292\nf 16347 18292 16348\nf 16348 16358 16357\nf 16348 18292 18310\nf 16348 18310 18327\nf 16348 18327 16358\nf 16349 16351 16359\nf 16349 16359 18322\nf 16349 18322 18304\nf 16350 16360 16361\nf 16350 16361 16351\nf 16351 16361 16359\nf 16352 16353 16362\nf 16353 16363 16362\nf 16353 18324 18341\nf 16353 18341 16363\nf 16354 16356 16366\nf 16354 16366 16355\nf 16355 16364 18325\nf 16355 16366 16364\nf 16355 18325 18308\nf 16356 16365 16366\nf 16357 16358 16367\nf 16358 16368 16367\nf 16358 18327 18345\nf 16358 18345 16368\nf 16359 16361 16369\nf 16359 16369 18339\nf 16359 18339 18322\nf 16360 16370 16371\nf 16360 16371 16361\nf 16361 16371 16369\nf 16362 16363 16372\nf 16363 16374 16372\nf 16363 18341 18360\nf 16363 18360 16374\nf 16364 16366 16376\nf 16364 16376 18344\nf 16364 18342 18325\nf 16364 18344 18342\nf 16365 16375 16376\nf 16365 16376 16366\nf 16367 16368 16377\nf 16368 16378 16377\nf 16368 18345 18364\nf 16368 18364 16378\nf 16369 16371 16380\nf 16369 16380 18359\nf 16369 18357 18339\nf 16369 18359 18357\nf 16370 16379 16380\nf 16370 16380 16371\nf 16372 16374 16373\nf 16373 16374 16381\nf 16374 18360 16381\nf 16375 16382 16383\nf 16375 16383 16376\nf 16376 16383 18362\nf 16376 18362 18344\nf 16377 16378 16384\nf 16378 16385 16384\nf 16378 18364 18383\nf 16378 18383 16385\nf 16379 16386 16387\nf 16379 16387 16380\nf 16380 16387 18377\nf 16380 18377 18359\nf 16381 18360 18379\nf 16381 18379 16388\nf 16382 16389 16390\nf 16382 16390 16383\nf 16383 16390 18381\nf 16383 18381 18362\nf 16384 16385 16391\nf 16385 16392 16391\nf 16385 16393 16392\nf 16385 18383 18384\nf 16385 18384 16393\nf 16386 16394 16395\nf 16386 16395 16387\nf 16387 16395 18397\nf 16387 18397 18377\nf 16388 18379 18399\nf 16388 18399 16396\nf 16389 16397 16398\nf 16389 16398 16390\nf 16390 16398 18402\nf 16390 18402 18381\nf 16391 16392 16399\nf 16392 16393 16400\nf 16392 16400 16399\nf 16393 16401 16400\nf 16393 16402 16401\nf 16393 18384 18404\nf 16393 18404 18405\nf 16393 18405 16402\nf 16394 16403 16404\nf 16394 16404 16395\nf 16395 16404 18417\nf 16395 18417 18397\nf 16396 18399 18419\nf 16396 18419 16405\nf 16397 16407 16408\nf 16397 16408 16398\nf 16398 16406 18422\nf 16398 16408 16406\nf 16398 18422 18402\nf 16399 16400 16409\nf 16400 16401 16411\nf 16400 16411 16409\nf 16401 16402 16412\nf 16401 16412 16411\nf 16402 16413 16412\nf 16402 18405 18425\nf 16402 18425 18444\nf 16402 18444 16413\nf 16403 16415 16417\nf 16403 16417 16404\nf 16404 16414 18436\nf 16404 16417 16414\nf 16404 18436 18417\nf 16405 18419 18439\nf 16405 18439 16418\nf 16406 16408 16419\nf 16406 16419 18442\nf 16406 18423 18422\nf 16406 18442 18423\nf 16407 16420 16422\nf 16407 16422 16408\nf 16408 16422 16419\nf 16409 16411 16410\nf 16410 16411 16423\nf 16411 16412 16424\nf 16411 16424 16423\nf 16412 16413 16424\nf 16413 16425 16424\nf 16413 16426 16425\nf 16413 18444 18445\nf 16413 18445 16426\nf 16414 16417 16428\nf 16414 16428 18455\nf 16414 18437 18436\nf 16414 18455 18437\nf 16415 16416 16417\nf 16416 16427 16428\nf 16416 16428 16417\nf 16418 18439 18457\nf 16418 18457 16429\nf 16419 16422 16431\nf 16419 16431 18461\nf 16419 18461 18442\nf 16420 16421 16422\nf 16421 16430 16431\nf 16421 16431 16422\nf 16423 16424 16432\nf 16424 16425 16433\nf 16424 16433 16432\nf 16425 16426 16434\nf 16425 16434 16433\nf 16426 16435 16434\nf 16426 18445 18463\nf 16426 18463 18480\nf 16426 18480 16435\nf 16427 16436 16437\nf 16427 16437 16428\nf 16428 16437 18472\nf 16428 18472 18455\nf 16429 18457 18474\nf 16429 18474 16438\nf 16430 16439 16440\nf 16430 16440 16431\nf 16431 16440 18478\nf 16431 18478 18461\nf 16432 16433 16441\nf 16433 16434 16442\nf 16433 16442 16441\nf 16434 16435 16443\nf 16434 16443 16442\nf 16435 16444 16443\nf 16435 16445 16444\nf 16435 18480 18481\nf 16435 18481 16445\nf 16436 16446 16447\nf 16436 16447 16437\nf 16437 16447 18490\nf 16437 18490 18472\nf 16438 18474 18492\nf 16438 18492 16448\nf 16439 16449 16450\nf 16439 16450 16440\nf 16440 16450 18497\nf 16440 18497 18478\nf 16441 16442 16451\nf 16442 16443 16452\nf 16442 16452 16451\nf 16443 16444 16453\nf 16443 16453 16452\nf 16444 16445 16454\nf 16444 16454 16453\nf 16445 16455 16454\nf 16445 18481 18499\nf 16445 18499 18518\nf 16445 18518 16455\nf 16446 16457 16458\nf 16446 16458 16447\nf 16447 16456 18507\nf 16447 16458 16456\nf 16447 18507 18490\nf 16448 18492 18510\nf 16448 18510 16459\nf 16449 16460 16461\nf 16449 16461 16450\nf 16450 16461 18516\nf 16450 18516 18497\nf 16451 16452 16462\nf 16452 16453 16463\nf 16452 16463 16462\nf 16453 16454 16464\nf 16453 16464 16463\nf 16454 16455 16465\nf 16454 16465 16464\nf 16455 16466 16465\nf 16455 18518 18536\nf 16455 18536 16466\nf 16456 16458 16467\nf 16456 16467 18525\nf 16456 18508 18507\nf 16456 18525 18508\nf 16457 16468 16469\nf 16457 16469 16458\nf 16458 16469 16467\nf 16459 18510 18527\nf 16459 18527 16470\nf 16460 16472 16473\nf 16460 16473 16461\nf 16461 16473 18534\nf 16461 18534 18516\nf 16462 16463 16474\nf 16463 16464 16475\nf 16463 16475 16474\nf 16464 16465 16476\nf 16464 16476 16475\nf 16465 16466 16477\nf 16465 16477 16476\nf 16466 16478 16477\nf 16466 18536 18552\nf 16466 18552 16478\nf 16467 16469 16479\nf 16467 16479 18543\nf 16467 18543 18525\nf 16468 16480 16481\nf 16468 16481 16469\nf 16469 16481 16479\nf 16470 16471 16482\nf 16470 18527 18528\nf 16470 18528 16471\nf 16471 16483 16482\nf 16471 18528 18545\nf 16471 18545 18562\nf 16471 18562 16483\nf 16472 16484 16485\nf 16472 16485 16473\nf 16473 16485 18550\nf 16473 18550 18534\nf 16474 16475 16486\nf 16475 16476 16487\nf 16475 16487 16486\nf 16476 16477 16488\nf 16476 16488 16487\nf 16477 16478 16489\nf 16477 16489 16488\nf 16478 16490 16489\nf 16478 18552 18570\nf 16478 18570 16490\nf 16479 16481 16492\nf 16479 16492 18561\nf 16479 18559 18543\nf 16479 18561 18559\nf 16480 16491 16492\nf 16480 16492 16481\nf 16482 16483 16493\nf 16483 16494 16493\nf 16483 18562 18580\nf 16483 18580 16494\nf 16484 16495 16496\nf 16484 16496 16485\nf 16485 16496 18568\nf 16485 18568 18550\nf 16486 16487 16497\nf 16487 16488 16498\nf 16487 16498 16497\nf 16488 16489 16499\nf 16488 16499 16498\nf 16489 16490 16500\nf 16489 16500 16499\nf 16490 16501 16500\nf 16490 18570 18589\nf 16490 18589 16501\nf 16491 16502 16503\nf 16491 16503 16492\nf 16492 16503 18578\nf 16492 18578 18561\nf 16493 16494 16504\nf 16494 16505 16504\nf 16494 18580 18600\nf 16494 18600 16505\nf 16495 16506 16507\nf 16495 16507 16496\nf 16496 16507 18587\nf 16496 18587 18568\nf 16497 16498 16509\nf 16498 16499 16511\nf 16498 16511 16509\nf 16499 16500 16512\nf 16499 16512 16511\nf 16500 16501 16513\nf 16500 16513 16512\nf 16501 18589 18590\nf 16501 18590 18612\nf 16501 18612 16513\nf 16502 16514 16515\nf 16502 16515 16503\nf 16503 16515 18598\nf 16503 18598 18578\nf 16504 16505 16516\nf 16505 16518 16516\nf 16505 18600 18624\nf 16505 18624 16518\nf 16506 16508 18610\nf 16506 18610 16507\nf 16507 18608 18587\nf 16507 18610 18608\nf 16508 16519 16520\nf 16508 16520 18635\nf 16508 18635 18610\nf 16509 16511 16510\nf 16510 16511 16581\nf 16510 16581 16579\nf 16511 16512 16582\nf 16511 16582 16581\nf 16512 16513 18611\nf 16512 18611 18661\nf 16512 18661 16582\nf 16513 18612 18613\nf 16513 18613 18611\nf 16514 16583 16584\nf 16514 16584 16515\nf 16515 16584 18622\nf 16515 18622 18598\nf 16516 16518 16517\nf 16517 16518 16585\nf 16518 18624 16585\nf 16519 16521 18637\nf 16519 18637 16520\nf 16520 18637 18635\nf 16521 16522 16587\nf 16521 16586 18681\nf 16521 16587 16586\nf 16521 18681 18637\nf 16522 16523 16588\nf 16522 16588 16587\nf 16523 16524 16589\nf 16523 16589 16588\nf 16524 16525 16591\nf 16524 16591 16589\nf 16525 16590 16591\nf 16526 16527 16597\nf 16526 16596 16594\nf 16526 16597 16596\nf 16527 16528 16598\nf 16527 16598 16597\nf 16528 16529 16600\nf 16528 16600 16598\nf 16529 16599 16600\nf 16530 16531 16609\nf 16530 16608 16606\nf 16530 16609 16608\nf 16531 16532 18638\nf 16531 18638 18688\nf 16531 18688 16609\nf 16532 16533 18638\nf 16533 16534 18639\nf 16533 18639 18638\nf 16534 16535 18640\nf 16534 18640 18639\nf 16535 16536 18641\nf 16535 18641 18640\nf 16536 16537 18642\nf 16536 18642 18641\nf 16537 16538 18643\nf 16537 18643 18642\nf 16538 16539 18644\nf 16538 18644 18643\nf 16539 16540 18645\nf 16539 18645 18644\nf 16540 16541 18646\nf 16540 18646 18645\nf 16541 16542 18647\nf 16541 18647 18646\nf 16542 16543 18648\nf 16542 18648 18647\nf 16543 16544 18649\nf 16543 18649 18648\nf 16544 16545 18650\nf 16544 18650 18649\nf 16545 16546 18651\nf 16545 18651 18650\nf 16546 16547 18652\nf 16546 18652 18651\nf 16547 16548 18653\nf 16547 18653 18652\nf 16548 16549 18654\nf 16548 18654 18653\nf 16549 16550 18655\nf 16549 18655 18654\nf 16550 16551 18656\nf 16550 18656 18655\nf 16551 16552 18657\nf 16551 18657 18656\nf 16552 16553 18658\nf 16552 18658 18657\nf 16553 16554 18659\nf 16553 18659 18658\nf 16554 16555 18660\nf 16554 18660 18659\nf 16555 16556 16611\nf 16555 16610 18660\nf 16555 16611 16610\nf 16556 16557 16612\nf 16556 16612 16611\nf 16557 16558 16613\nf 16557 16613 16612\nf 16558 16559 16614\nf 16558 16614 16613\nf 16559 16560 16615\nf 16559 16615 16614\nf 16560 16561 16616\nf 16560 16616 16615\nf 16561 16562 16617\nf 16561 16617 16616\nf 16562 16563 16618\nf 16562 16618 16617\nf 16563 16564 16619\nf 16563 16619 16618\nf 16564 16565 16620\nf 16564 16620 16619\nf 16565 16566 16621\nf 16565 16621 16620\nf 16566 16567 16622\nf 16566 16622 16621\nf 16567 16568 16623\nf 16567 16623 16622\nf 16568 16569 16624\nf 16568 16624 16623\nf 16569 16570 16625\nf 16569 16625 16624\nf 16570 16571 16626\nf 16570 16626 16625\nf 16571 16572 16627\nf 16571 16627 16626\nf 16572 16573 16628\nf 16572 16628 16627\nf 16573 16574 16629\nf 16573 16629 16628\nf 16574 16575 16630\nf 16574 16630 16629\nf 16575 16576 16632\nf 16575 16632 16630\nf 16576 16631 16632\nf 16577 16578 16646\nf 16577 16645 16643\nf 16577 16646 16645\nf 16578 16580 16647\nf 16578 16647 16646\nf 16579 16581 16580\nf 16580 16581 16647\nf 16581 16582 16648\nf 16581 16648 16647\nf 16582 18661 18662\nf 16582 18662 18716\nf 16582 18716 16648\nf 16583 16649 16650\nf 16583 16650 16584\nf 16584 16650 18673\nf 16584 18673 18622\nf 16585 18624 18675\nf 16585 18675 16651\nf 16586 16587 18683\nf 16586 18683 18681\nf 16587 16588 16652\nf 16587 16652 18684\nf 16587 18684 18683\nf 16588 16589 16652\nf 16589 16591 16653\nf 16589 16653 16652\nf 16590 16592 16655\nf 16590 16655 16591\nf 16591 16654 16653\nf 16591 16655 16654\nf 16592 16593 16656\nf 16592 16656 16655\nf 16593 16595 16657\nf 16593 16657 16656\nf 16594 16596 16595\nf 16595 16596 16657\nf 16596 16597 16658\nf 16596 16658 16657\nf 16597 16598 16659\nf 16597 16659 16658\nf 16598 16600 16660\nf 16598 16660 16659\nf 16599 16601 16662\nf 16599 16662 16600\nf 16600 16661 16660\nf 16600 16662 16661\nf 16601 16602 16663\nf 16601 16663 16662\nf 16602 16603 16664\nf 16602 16664 16663\nf 16603 16604 16665\nf 16603 16665 16664\nf 16604 16605 18685\nf 16604 18685 18744\nf 16604 18744 16665\nf 16605 16607 18685\nf 16606 16608 16607\nf 16607 16608 18687\nf 16607 18686 18685\nf 16607 18687 18686\nf 16608 16609 18687\nf 16609 18688 18689\nf 16609 18689 18687\nf 16610 16611 18699\nf 16610 18697 18660\nf 16610 18699 18697\nf 16611 16612 18700\nf 16611 18700 18699\nf 16612 16613 18701\nf 16612 18701 18700\nf 16613 16614 18702\nf 16613 18702 18701\nf 16614 16615 18703\nf 16614 18703 18702\nf 16615 16616 18704\nf 16615 18704 18703\nf 16616 16617 18705\nf 16616 18705 18704\nf 16617 16618 18706\nf 16617 18706 18705\nf 16618 16619 18707\nf 16618 18707 18706\nf 16619 16620 18708\nf 16619 18708 18707\nf 16620 16621 18709\nf 16620 18709 18708\nf 16621 16622 18710\nf 16621 18710 18709\nf 16622 16623 18711\nf 16622 18711 18710\nf 16623 16624 18712\nf 16623 18712 18711\nf 16624 16625 18713\nf 16624 18713 18712\nf 16625 16626 16666\nf 16625 16666 18714\nf 16625 18714 18713\nf 16626 16627 16666\nf 16627 16628 16667\nf 16627 16667 16666\nf 16628 16629 16668\nf 16628 16668 16667\nf 16629 16630 16669\nf 16629 16669 16668\nf 16630 16632 16670\nf 16630 16670 16669\nf 16631 16633 16672\nf 16631 16672 16632\nf 16632 16671 16670\nf 16632 16672 16671\nf 16633 16634 16673\nf 16633 16673 16672\nf 16634 16635 16674\nf 16634 16674 16673\nf 16635 16636 16675\nf 16635 16675 16674\nf 16636 16637 16676\nf 16636 16676 16675\nf 16637 16638 16677\nf 16637 16677 16676\nf 16638 16639 16678\nf 16638 16678 16677\nf 16639 16640 16679\nf 16639 16679 16678\nf 16640 16641 16680\nf 16640 16680 16679\nf 16641 16642 16681\nf 16641 16681 16680\nf 16642 16644 16682\nf 16642 16682 16681\nf 16643 16645 16644\nf 16644 16645 16682\nf 16645 16646 16683\nf 16645 16683 16682\nf 16646 16647 16684\nf 16646 16684 16683\nf 16647 16648 18715\nf 16647 18715 18767\nf 16647 18767 16684\nf 16648 18716 18717\nf 16648 18717 18715\nf 16649 16685 16686\nf 16649 16686 16650\nf 16650 16686 18729\nf 16650 18729 18673\nf 16651 18675 18731\nf 16651 18731 16687\nf 16652 16653 16689\nf 16652 16689 18741\nf 16652 18739 18684\nf 16652 18741 18739\nf 16653 16654 16689\nf 16654 16655 16690\nf 16654 16690 16689\nf 16655 16656 16691\nf 16655 16691 16690\nf 16656 16657 16692\nf 16656 16692 16691\nf 16657 16658 16693\nf 16657 16693 16692\nf 16658 16659 16694\nf 16658 16694 16693\nf 16659 16660 16695\nf 16659 16695 16694\nf 16660 16661 16696\nf 16660 16696 16695\nf 16661 16662 16697\nf 16661 16697 18742\nf 16661 18742 18795\nf 16661 18795 16696\nf 16662 16663 16697\nf 16663 16664 16698\nf 16663 16698 16697\nf 16664 16665 18743\nf 16664 18743 18800\nf 16664 18800 16698\nf 16665 18744 18745\nf 16665 18745 18743\nf 16666 16667 18762\nf 16666 18760 18714\nf 16666 18762 18760\nf 16667 16668 18763\nf 16667 18763 18762\nf 16668 16669 18764\nf 16668 18764 18763\nf 16669 16670 16699\nf 16669 16699 18765\nf 16669 18765 18764\nf 16670 16671 16699\nf 16671 16672 16700\nf 16671 16700 16699\nf 16672 16673 16701\nf 16672 16701 16700\nf 16673 16674 16702\nf 16673 16702 16701\nf 16674 16675 16703\nf 16674 16703 16702\nf 16675 16676 16704\nf 16675 16704 16703\nf 16676 16677 16705\nf 16676 16705 16704\nf 16677 16678 16706\nf 16677 16706 16705\nf 16678 16679 16707\nf 16678 16707 16706\nf 16679 16680 16708\nf 16679 16708 16707\nf 16680 16681 16709\nf 16680 16709 16708\nf 16681 16682 16710\nf 16681 16710 16709\nf 16682 16683 16711\nf 16682 16711 16710\nf 16683 16684 18766\nf 16683 18766 18822\nf 16683 18822 16711\nf 16684 18767 18768\nf 16684 18768 18766\nf 16685 16712 16713\nf 16685 16713 16686\nf 16686 16713 18782\nf 16686 18782 18729\nf 16687 16688 16714\nf 16687 18731 18732\nf 16687 18732 16688\nf 16688 16715 16714\nf 16688 18732 18784\nf 16688 18784 18841\nf 16688 18841 16715\nf 16689 16690 18792\nf 16689 18790 18741\nf 16689 18792 18790\nf 16690 16691 16716\nf 16690 16716 18793\nf 16690 18793 18792\nf 16691 16692 16716\nf 16692 16693 16717\nf 16692 16717 16716\nf 16693 16694 16718\nf 16693 16718 16717\nf 16694 16695 16719\nf 16694 16719 16718\nf 16695 16696 18794\nf 16695 18794 18850\nf 16695 18850 16719\nf 16696 18795 18796\nf 16696 18796 18794\nf 16697 16698 18799\nf 16697 18797 18742\nf 16697 18799 18797\nf 16698 18800 18801\nf 16698 18801 18799\nf 16699 16700 16720\nf 16699 16720 18821\nf 16699 18819 18765\nf 16699 18821 18819\nf 16700 16701 16720\nf 16701 16702 16721\nf 16701 16721 16720\nf 16702 16703 16722\nf 16702 16722 16721\nf 16703 16704 16723\nf 16703 16723 16722\nf 16704 16705 16724\nf 16704 16724 16723\nf 16705 16706 16725\nf 16705 16725 16724\nf 16706 16707 16726\nf 16706 16726 16725\nf 16707 16708 16727\nf 16707 16727 16726\nf 16708 16709 16728\nf 16708 16728 16727\nf 16709 16710 16729\nf 16709 16729 16728\nf 16710 16711 16730\nf 16710 16730 16729\nf 16711 18822 18823\nf 16711 18823 18875\nf 16711 18875 16730\nf 16712 16731 16732\nf 16712 16732 16713\nf 16713 16732 18839\nf 16713 18839 18782\nf 16714 16715 16733\nf 16715 16734 16733\nf 16715 18841 18894\nf 16715 18894 16734\nf 16716 16717 16735\nf 16716 16735 18848\nf 16716 18848 18793\nf 16717 16718 16736\nf 16717 16736 16735\nf 16718 16719 16737\nf 16718 16737 16736\nf 16719 16738 16737\nf 16719 18850 18906\nf 16719 18906 16738\nf 16720 16721 16739\nf 16720 16739 18873\nf 16720 18873 18821\nf 16721 16722 16740\nf 16721 16740 16739\nf 16722 16723 16741\nf 16722 16741 16740\nf 16723 16724 16742\nf 16723 16742 16741\nf 16724 16725 16743\nf 16724 16743 16742\nf 16725 16726 16744\nf 16725 16744 16743\nf 16726 16727 16745\nf 16726 16745 16744\nf 16727 16728 16746\nf 16727 16746 16745\nf 16728 16729 16747\nf 16728 16747 16746\nf 16729 16730 16748\nf 16729 16748 16747\nf 16730 16749 16748\nf 16730 18875 18939\nf 16730 18939 16749\nf 16731 16750 16751\nf 16731 16751 16732\nf 16732 16751 18892\nf 16732 18892 18839\nf 16733 16734 18960\nf 16733 18960 16752\nf 16734 18894 18895\nf 16734 18895 18960\nf 16735 16736 16754\nf 16735 16753 18903\nf 16735 16754 16753\nf 16735 18903 18848\nf 16736 16737 16755\nf 16736 16755 16754\nf 16737 16738 16756\nf 16737 16756 16755\nf 16738 16757 16756\nf 16738 16758 16757\nf 16738 18906 18907\nf 16738 18907 16758\nf 16739 16740 16767\nf 16739 16766 18936\nf 16739 16767 16766\nf 16739 18936 18873\nf 16740 16741 16768\nf 16740 16768 16767\nf 16741 16742 16769\nf 16741 16769 16768\nf 16742 16743 16771\nf 16742 16771 16769\nf 16743 16744 16773\nf 16743 16773 16771\nf 16744 16745 16775\nf 16744 16775 16773\nf 16745 16746 16777\nf 16745 16777 16775\nf 16746 16747 16779\nf 16746 16779 16777\nf 16747 16748 16781\nf 16747 16781 16779\nf 16748 16749 16783\nf 16748 16783 16781\nf 16749 16785 16783\nf 16749 16786 16785\nf 16749 18939 18940\nf 16749 18940 16786\nf 16750 16788 16789\nf 16750 16789 16751\nf 16751 16789 18958\nf 16751 18958 18892\nf 16752 18960 16790\nf 16753 16754 16797\nf 16753 16795 18971\nf 16753 16797 16795\nf 16753 18904 18903\nf 16753 18971 18904\nf 16754 16755 16799\nf 16754 16799 16797\nf 16755 16756 16801\nf 16755 16801 16799\nf 16756 16757 16803\nf 16756 16803 16801\nf 16757 16758 16805\nf 16757 16805 16803\nf 16758 16759 16807\nf 16758 16807 16805\nf 16758 18907 18909\nf 16758 18909 16759\nf 16759 16760 16809\nf 16759 16809 16807\nf 16759 18909 18911\nf 16759 18911 16760\nf 16760 16761 16811\nf 16760 16811 16809\nf 16760 18911 18913\nf 16760 18913 16761\nf 16761 16762 16813\nf 16761 16813 16811\nf 16761 18913 18915\nf 16761 18915 16762\nf 16762 16763 16815\nf 16762 16815 16813\nf 16762 18915 18917\nf 16762 18917 16763\nf 16763 16817 16815\nf 16763 16819 16817\nf 16763 18917 18974\nf 16763 18974 18975\nf 16763 18975 16819\nf 16764 16765 16834\nf 16764 16832 18995\nf 16764 16834 16832\nf 16764 18932 18934\nf 16764 18934 16765\nf 16764 18995 18932\nf 16765 16766 16836\nf 16765 16836 16834\nf 16765 18934 18937\nf 16765 18937 16766\nf 16766 16767 16838\nf 16766 16838 16836\nf 16766 18937 18936\nf 16767 16768 16840\nf 16767 16840 16838\nf 16768 16769 16842\nf 16768 16842 16840\nf 16769 16771 16845\nf 16769 16845 16842\nf 16770 16771 16772\nf 16770 16843 16845\nf 16770 16845 16771\nf 16771 16773 16772\nf 16772 16773 16774\nf 16773 16775 16774\nf 16774 16775 16776\nf 16775 16777 16776\nf 16776 16777 16778\nf 16777 16779 16778\nf 16778 16779 16780\nf 16779 16781 16780\nf 16780 16781 16782\nf 16781 16783 16782\nf 16782 16783 16784\nf 16783 16785 16784\nf 16784 16785 16846\nf 16785 16786 16848\nf 16785 16848 16846\nf 16786 16787 16848\nf 16786 18940 18942\nf 16786 18942 16787\nf 16787 16850 16848\nf 16787 16851 16850\nf 16787 18942 18998\nf 16787 18998 18999\nf 16787 18999 16851\nf 16788 16853 16854\nf 16788 16854 16789\nf 16789 16854 19015\nf 16789 19015 18958\nf 16790 18960 19017\nf 16790 19017 16855\nf 16791 16792 16858\nf 16791 16856 19026\nf 16791 16858 16856\nf 16791 18963 18965\nf 16791 18965 16792\nf 16791 19026 18963\nf 16792 16793 16860\nf 16792 16860 16858\nf 16792 18965 18967\nf 16792 18967 16793\nf 16793 16794 16862\nf 16793 16862 16860\nf 16793 18967 18969\nf 16793 18969 16794\nf 16794 16795 16864\nf 16794 16864 16862\nf 16794 18969 18972\nf 16794 18972 16795\nf 16795 16797 16867\nf 16795 16867 16864\nf 16795 18972 18971\nf 16796 16797 16798\nf 16796 16865 16867\nf 16796 16867 16797\nf 16797 16799 16798\nf 16798 16799 16800\nf 16799 16801 16800\nf 16800 16801 16802\nf 16801 16803 16802\nf 16802 16803 16804\nf 16803 16805 16804\nf 16804 16805 16806\nf 16805 16807 16806\nf 16806 16807 16808\nf 16807 16809 16808\nf 16808 16809 16810\nf 16809 16811 16810\nf 16810 16811 16812\nf 16811 16813 16812\nf 16812 16813 16814\nf 16813 16815 16814\nf 16814 16815 16816\nf 16815 16817 16816\nf 16816 16817 16818\nf 16817 16819 16818\nf 16818 16819 16820\nf 16819 16821 16820\nf 16819 18975 18977\nf 16819 18977 16821\nf 16820 16821 16822\nf 16821 16823 16822\nf 16821 18977 18979\nf 16821 18979 16823\nf 16822 16823 16868\nf 16823 16824 16870\nf 16823 16870 16868\nf 16823 18979 18981\nf 16823 18981 16824\nf 16824 16872 16870\nf 16824 18981 19029\nf 16824 19029 19030\nf 16824 19030 16872\nf 16825 16826 16884\nf 16825 16882 19044\nf 16825 16884 16882\nf 16825 18987 18989\nf 16825 18989 16826\nf 16825 19044 18987\nf 16826 16828 16887\nf 16826 16887 16884\nf 16826 18989 18991\nf 16826 18991 16828\nf 16827 16828 16829\nf 16827 16885 16887\nf 16827 16887 16828\nf 16828 16830 16829\nf 16828 18991 18993\nf 16828 18993 16830\nf 16829 16830 16831\nf 16830 16832 16831\nf 16830 18993 18996\nf 16830 18996 16832\nf 16831 16832 16833\nf 16832 16834 16833\nf 16832 18996 18995\nf 16833 16834 16835\nf 16834 16836 16835\nf 16835 16836 16837\nf 16836 16838 16837\nf 16837 16838 16839\nf 16838 16840 16839\nf 16839 16840 16841\nf 16840 16842 16841\nf 16841 16842 16844\nf 16842 16845 16844\nf 16843 16844 16845\nf 16846 16848 16847\nf 16847 16848 16849\nf 16848 16850 16849\nf 16849 16850 16888\nf 16850 16851 16890\nf 16850 16890 16888\nf 16851 16852 16890\nf 16851 18999 19001\nf 16851 19001 16852\nf 16852 16892 16890\nf 16852 16893 16892\nf 16852 19001 19047\nf 16852 19047 19048\nf 16852 19048 16893\nf 16853 16895 16896\nf 16853 16896 16854\nf 16854 16896 19062\nf 16854 19062 19015\nf 16855 19017 19064\nf 16855 19064 16897\nf 16856 16858 16901\nf 16856 16899 19074\nf 16856 16901 16899\nf 16856 19027 19026\nf 16856 19074 19027\nf 16857 16858 16859\nf 16857 16900 16901\nf 16857 16901 16858\nf 16858 16860 16859\nf 16859 16860 16861\nf 16860 16862 16861\nf 16861 16862 16863\nf 16862 16864 16863\nf 16863 16864 16866\nf 16864 16867 16866\nf 16865 16866 16867\nf 16868 16870 16869\nf 16869 16870 16871\nf 16870 16872 16871\nf 16871 16872 16873\nf 16872 16874 16873\nf 16872 19030 19032\nf 16872 19032 16874\nf 16873 16874 16875\nf 16874 16876 16875\nf 16874 19032 19034\nf 16874 19034 16876\nf 16875 16876 19078\nf 16875 19078 16877\nf 16876 19034 19077\nf 16876 19077 19078\nf 16877 19078 19080\nf 16877 19080 16902\nf 16878 16880 16924\nf 16878 16921 19094\nf 16878 16924 16921\nf 16878 19040 19042\nf 16878 19042 16880\nf 16878 19094 19040\nf 16879 16880 16881\nf 16879 16922 16924\nf 16879 16924 16880\nf 16880 16882 16881\nf 16880 19042 19045\nf 16880 19045 16882\nf 16881 16882 16883\nf 16882 16884 16883\nf 16882 19045 19044\nf 16883 16884 16886\nf 16884 16887 16886\nf 16885 16886 16887\nf 16888 16890 16889\nf 16889 16890 16891\nf 16890 16892 16891\nf 16891 16892 16925\nf 16892 16893 16927\nf 16892 16927 16925\nf 16893 16894 16927\nf 16893 19048 19050\nf 16893 19050 16894\nf 16894 16928 16927\nf 16894 16929 16928\nf 16894 19050 19097\nf 16894 19097 19098\nf 16894 19098 16929\nf 16895 16930 16931\nf 16895 16931 16896\nf 16896 16931 19109\nf 16896 19109 19062\nf 16897 19064 19111\nf 16897 19111 19152\nf 16897 19152 16898\nf 16898 16933 16932\nf 16898 19152 16933\nf 16899 16901 16934\nf 16899 16934 19120\nf 16899 19075 19074\nf 16899 19120 19075\nf 16900 16935 16936\nf 16900 16936 16901\nf 16901 16936 16934\nf 16902 16904 16903\nf 16902 19080 16904\nf 16903 16904 16905\nf 16904 16906 16905\nf 16904 19080 19082\nf 16904 19082 16906\nf 16905 16906 16907\nf 16906 16908 16907\nf 16906 19082 19084\nf 16906 19084 16908\nf 16907 16908 16909\nf 16908 16910 16909\nf 16908 19084 19086\nf 16908 19086 16910\nf 16909 16910 16911\nf 16910 16912 16911\nf 16910 19086 19088\nf 16910 19088 16912\nf 16911 16912 16913\nf 16912 16914 16913\nf 16912 19088 19090\nf 16912 19090 16914\nf 16913 16914 19123\nf 16913 19123 16915\nf 16914 19090 19122\nf 16914 19122 19123\nf 16915 19123 19125\nf 16915 19125 16916\nf 16916 19125 19127\nf 16916 19127 16917\nf 16917 19127 19129\nf 16917 19129 16918\nf 16918 19129 19131\nf 16918 19131 16937\nf 16919 16921 16952\nf 16919 16949 19136\nf 16919 16952 16949\nf 16919 19092 19095\nf 16919 19095 16921\nf 16919 19136 19092\nf 16920 16921 16923\nf 16920 16950 16952\nf 16920 16952 16921\nf 16921 16924 16923\nf 16921 19095 19094\nf 16922 16923 16924\nf 16925 16927 16926\nf 16926 16927 16953\nf 16927 16928 16954\nf 16927 16954 16953\nf 16928 16929 16954\nf 16929 16955 16954\nf 16929 16956 16955\nf 16929 19098 19139\nf 16929 19139 19140\nf 16929 19140 16956\nf 16930 16957 16958\nf 16930 16958 16931\nf 16931 16958 19150\nf 16931 19150 19109\nf 16932 16933 16959\nf 16933 16960 16959\nf 16933 19152 19192\nf 16933 19192 16960\nf 16934 16936 16962\nf 16934 16961 19160\nf 16934 16962 16961\nf 16934 19160 19120\nf 16935 16963 16964\nf 16935 16964 16936\nf 16936 16964 16962\nf 16937 16939 16938\nf 16937 19131 16939\nf 16938 16939 16940\nf 16939 16941 16940\nf 16939 19131 19133\nf 16939 19133 16941\nf 16940 16941 16942\nf 16941 16943 16942\nf 16941 19133 19134\nf 16941 19134 16943\nf 16942 16943 19164\nf 16942 19164 16944\nf 16943 19134 19163\nf 16943 19163 19164\nf 16944 19164 19166\nf 16944 19166 16945\nf 16945 19166 19168\nf 16945 19168 16965\nf 16946 16978 16980\nf 16946 16980 19173\nf 16946 19173 19175\nf 16946 19175 19178\nf 16946 19178 16947\nf 16947 19178 16948\nf 16948 16949 16951\nf 16948 19177 16949\nf 16948 19178 19177\nf 16949 16952 16951\nf 16949 19137 19136\nf 16949 19177 19137\nf 16950 16951 16952\nf 16953 16954 16981\nf 16954 16955 16982\nf 16954 16982 16981\nf 16955 16956 16983\nf 16955 16983 16982\nf 16956 16984 16983\nf 16956 16985 16984\nf 16956 19140 19180\nf 16956 19180 19181\nf 16956 19181 16985\nf 16957 16986 16987\nf 16957 16987 16958\nf 16958 16987 19190\nf 16958 19190 19150\nf 16959 16960 16988\nf 16960 16989 16988\nf 16960 19192 19225\nf 16960 19225 16989\nf 16961 16962 16990\nf 16961 16990 19199\nf 16961 19161 19160\nf 16961 19199 19161\nf 16962 16964 16991\nf 16962 16991 16990\nf 16963 16992 16993\nf 16963 16993 16964\nf 16964 16993 16991\nf 16965 16967 16966\nf 16965 19168 16967\nf 16966 16967 16968\nf 16967 16969 16968\nf 16967 19168 19170\nf 16967 19170 16969\nf 16968 16969 16970\nf 16969 16971 16970\nf 16969 19170 19171\nf 16969 19171 16971\nf 16970 16971 19202\nf 16970 19202 16972\nf 16971 19171 19201\nf 16971 19201 19202\nf 16972 19202 19204\nf 16972 19204 16973\nf 16973 19204 19206\nf 16973 19206 16974\nf 16974 19206 19208\nf 16974 19208 16975\nf 16975 19208 19210\nf 16975 19210 16976\nf 16976 19210 19213\nf 16976 19213 16977\nf 16977 19213 16979\nf 16978 16979 16980\nf 16979 19212 16980\nf 16979 19213 19212\nf 16980 19212 19173\nf 16981 16982 16994\nf 16982 16983 16995\nf 16982 16995 16994\nf 16983 16984 16996\nf 16983 16996 16995\nf 16984 16985 16997\nf 16984 16997 16996\nf 16985 16998 16997\nf 16985 19181 19215\nf 16985 19215 19235\nf 16985 19235 16998\nf 16986 16999 17000\nf 16986 17000 16987\nf 16987 17000 19223\nf 16987 19223 19190\nf 16988 16989 17001\nf 16989 17002 17001\nf 16989 19225 19246\nf 16989 19246 17002\nf 16990 16991 17003\nf 16990 17003 19234\nf 16990 19232 19199\nf 16990 19234 19232\nf 16991 16993 17003\nf 16992 17004 17005\nf 16992 17005 16993\nf 16993 17005 17003\nf 16994 16995 17006\nf 16995 16996 17007\nf 16995 17007 17006\nf 16996 16997 17008\nf 16996 17008 17007\nf 16997 16998 17009\nf 16997 17009 17008\nf 16998 19235 19236\nf 16998 19236 19256\nf 16998 19256 17009\nf 16999 17010 17011\nf 16999 17011 17000\nf 17000 17011 19244\nf 17000 19244 19223\nf 17001 17002 17012\nf 17002 17013 17012\nf 17002 19246 19268\nf 17002 19268 17013\nf 17003 17005 17014\nf 17003 17014 19254\nf 17003 19254 19234\nf 17004 17015 17016\nf 17004 17016 17005\nf 17005 17016 17014\nf 17006 17007 17017\nf 17007 17008 17018\nf 17007 17018 17017\nf 17008 17009 17019\nf 17008 17019 17018\nf 17009 19256 19257\nf 17009 19257 19279\nf 17009 19279 17019\nf 17010 17020 17021\nf 17010 17021 17011\nf 17011 17021 19266\nf 17011 19266 19244\nf 17012 17013 17022\nf 17013 17023 17022\nf 17013 19268 19291\nf 17013 19291 17023\nf 17014 17016 17024\nf 17014 17024 19277\nf 17014 19277 19254\nf 17015 17025 17026\nf 17015 17026 17016\nf 17016 17026 17024\nf 17017 17018 17028\nf 17018 17019 17029\nf 17018 17029 17028\nf 17019 17030 17029\nf 17019 19279 19302\nf 17019 19302 17030\nf 17020 17031 17032\nf 17020 17032 17021\nf 17021 17032 19289\nf 17021 19289 19266\nf 17022 17023 17033\nf 17023 17034 17033\nf 17023 19291 19315\nf 17023 19315 17034\nf 17024 17026 17035\nf 17024 17035 19300\nf 17024 19300 19277\nf 17025 17027 17038\nf 17025 17038 17026\nf 17026 17036 17035\nf 17026 17038 17036\nf 17027 17037 17038\nf 17028 17029 17039\nf 17029 17030 17040\nf 17029 17040 17039\nf 17030 17041 17040\nf 17030 19302 19326\nf 17030 19326 17041\nf 17031 17043 17044\nf 17031 17044 17032\nf 17032 17042 19312\nf 17032 17044 17042\nf 17032 19312 19289\nf 17033 17034 17045\nf 17034 17046 17045\nf 17034 19315 19337\nf 17034 19337 17046\nf 17035 17036 17047\nf 17035 17047 19324\nf 17035 19324 19300\nf 17036 17038 17048\nf 17036 17048 17047\nf 17037 17049 17050\nf 17037 17050 17038\nf 17038 17050 17048\nf 17039 17040 17051\nf 17040 17041 17052\nf 17040 17052 17051\nf 17041 17053 17052\nf 17041 19326 19348\nf 17041 19348 17053\nf 17042 17044 17054\nf 17042 17054 19335\nf 17042 19313 19312\nf 17042 19335 19313\nf 17043 17055 17056\nf 17043 17056 17044\nf 17044 17056 17054\nf 17045 17046 17057\nf 17046 17059 17057\nf 17046 19337 19359\nf 17046 19359 17059\nf 17047 17048 17060\nf 17047 17060 19346\nf 17047 19346 19324\nf 17048 17050 17061\nf 17048 17061 17060\nf 17049 17062 17063\nf 17049 17063 17050\nf 17050 17063 17061\nf 17051 17052 17064\nf 17052 17053 17065\nf 17052 17065 17064\nf 17053 17066 17065\nf 17053 19348 19371\nf 17053 19371 17066\nf 17054 17056 17067\nf 17054 17067 19357\nf 17054 19357 19335\nf 17055 17068 17069\nf 17055 17069 17056\nf 17056 17069 17067\nf 17057 17059 17058\nf 17058 17059 17070\nf 17059 19359 17070\nf 17060 17061 17071\nf 17060 17071 19370\nf 17060 19368 19346\nf 17060 19370 19368\nf 17061 17063 17071\nf 17062 17072 17073\nf 17062 17073 17063\nf 17063 17073 17071\nf 17064 17065 17074\nf 17065 17066 17075\nf 17065 17075 17074\nf 17066 19371 19372\nf 17066 19372 19396\nf 17066 19396 17075\nf 17067 17069 17076\nf 17067 17076 19381\nf 17067 19381 19357\nf 17068 17077 17078\nf 17068 17078 17069\nf 17069 17078 17076\nf 17070 19359 19383\nf 17070 19383 17079\nf 17071 17073 17081\nf 17071 17081 19394\nf 17071 19394 19370\nf 17072 17082 17083\nf 17072 17083 17073\nf 17073 17083 17081\nf 17074 17075 17085\nf 17075 17086 17085\nf 17075 19396 19419\nf 17075 19419 17086\nf 17076 17078 17087\nf 17076 17087 19406\nf 17076 19406 19381\nf 17077 17088 17089\nf 17077 17089 17078\nf 17078 17089 17087\nf 17079 17080 17090\nf 17079 19383 19384\nf 17079 19384 17080\nf 17080 17091 17090\nf 17080 19384 19408\nf 17080 19408 19432\nf 17080 19432 17091\nf 17081 17083 17092\nf 17081 17092 19417\nf 17081 19417 19394\nf 17082 17084 17095\nf 17082 17095 17083\nf 17083 17093 17092\nf 17083 17095 17093\nf 17084 17094 17095\nf 17085 17086 17096\nf 17086 17098 17096\nf 17086 19419 19444\nf 17086 19444 17098\nf 17087 17089 17100\nf 17087 17100 19431\nf 17087 19429 19406\nf 17087 19431 19429\nf 17088 17099 17100\nf 17088 17100 17089\nf 17090 17091 17101\nf 17091 17102 17101\nf 17091 19432 19457\nf 17091 19457 17102\nf 17092 17093 17103\nf 17092 17103 19443\nf 17092 19441 19417\nf 17092 19443 19441\nf 17093 17095 17103\nf 17094 17104 17105\nf 17094 17105 17095\nf 17095 17105 17103\nf 17096 17098 17097\nf 17097 17098 17107\nf 17097 17107 17106\nf 17098 17108 17107\nf 17098 19444 19469\nf 17098 19469 17108\nf 17099 17109 17110\nf 17099 17110 17100\nf 17100 17110 19455\nf 17100 19455 19431\nf 17101 17102 17111\nf 17102 17112 17111\nf 17102 19457 19483\nf 17102 19483 17112\nf 17103 17105 17113\nf 17103 17113 19467\nf 17103 19467 19443\nf 17104 17114 17115\nf 17104 17115 17105\nf 17105 17115 17113\nf 17106 17107 17116\nf 17107 17108 17117\nf 17107 17117 17116\nf 17108 19469 19470\nf 17108 19470 19496\nf 17108 19496 17117\nf 17109 17118 17119\nf 17109 17119 17110\nf 17110 17119 19481\nf 17110 19481 19455\nf 17111 17112 17120\nf 17112 17121 17120\nf 17112 19483 19510\nf 17112 19510 17121\nf 17113 17115 17123\nf 17113 17123 19495\nf 17113 19493 19467\nf 17113 19495 19493\nf 17114 17122 17123\nf 17114 17123 17115\nf 17116 17117 17124\nf 17117 17125 17124\nf 17117 19496 19522\nf 17117 19522 17125\nf 17118 17126 17127\nf 17118 17127 17119\nf 17119 17127 19508\nf 17119 19508 19481\nf 17120 17121 17128\nf 17121 17129 17128\nf 17121 19510 19536\nf 17121 19536 17129\nf 17122 17130 17131\nf 17122 17131 17123\nf 17123 17131 19520\nf 17123 19520 19495\nf 17124 17125 17132\nf 17125 17133 17132\nf 17125 19522 19548\nf 17125 19548 17133\nf 17126 17134 17135\nf 17126 17135 17127\nf 17127 17135 19534\nf 17127 19534 19508\nf 17128 17129 17136\nf 17129 17138 17136\nf 17129 19536 19563\nf 17129 19563 17138\nf 17130 17139 17140\nf 17130 17140 17131\nf 17131 17140 19546\nf 17131 19546 19520\nf 17132 17133 17141\nf 17133 17142 17141\nf 17133 19548 19574\nf 17133 19574 17142\nf 17134 17143 19584\nf 17134 19562 17135\nf 17134 19584 19562\nf 17135 19560 19534\nf 17135 19562 19560\nf 17136 17138 17137\nf 17137 17138 17144\nf 17138 19563 17144\nf 17139 17145 17146\nf 17139 17146 17140\nf 17140 17146 19572\nf 17140 19572 19546\nf 17141 17142 17147\nf 17142 17148 17147\nf 17142 19574 19598\nf 17142 19598 17148\nf 17143 17149 19608\nf 17143 19608 19584\nf 17144 19563 19586\nf 17144 19586 17150\nf 17145 17152 17153\nf 17145 17153 17146\nf 17146 17153 19596\nf 17146 19596 19572\nf 17147 17148 17154\nf 17148 17155 17154\nf 17148 19598 19620\nf 17148 19620 17155\nf 17149 17156 19630\nf 17149 19630 19608\nf 17150 17151 17157\nf 17150 19586 19587\nf 17150 19587 17151\nf 17151 17158 17157\nf 17151 19587 19610\nf 17151 19610 19632\nf 17151 19632 17158\nf 17152 17159 17160\nf 17152 17160 17153\nf 17153 17160 19618\nf 17153 19618 19596\nf 17154 17155 17161\nf 17155 17162 17161\nf 17155 19620 19642\nf 17155 19642 17162\nf 17156 17163 19652\nf 17156 19652 19630\nf 17157 17158 17165\nf 17158 17166 17165\nf 17158 19632 19654\nf 17158 19654 17166\nf 17159 17167 17168\nf 17159 17168 17160\nf 17160 17168 19640\nf 17160 19640 19618\nf 17161 17162 17169\nf 17162 17170 17169\nf 17162 19642 19665\nf 17162 19665 17170\nf 17163 17164 17172\nf 17163 17172 19674\nf 17163 19674 19652\nf 17164 17171 17172\nf 17165 17166 17173\nf 17166 17174 17173\nf 17166 19654 19676\nf 17166 19676 17174\nf 17167 17175 17176\nf 17167 17176 17168\nf 17168 17176 19663\nf 17168 19663 19640\nf 17169 17170 17177\nf 17170 17178 17177\nf 17170 19665 19687\nf 17170 19687 17178\nf 17171 17179 17180\nf 17171 17180 17172\nf 17172 17180 19674\nf 17173 17174 17181\nf 17174 17182 17181\nf 17174 19676 19699\nf 17174 19699 17182\nf 17175 17183 17184\nf 17175 17184 17176\nf 17176 17184 19685\nf 17176 19685 19663\nf 17177 17178 17185\nf 17178 17186 17185\nf 17178 19687 19710\nf 17178 19710 17186\nf 17179 17187 17188\nf 17179 17188 17180\nf 17180 17188 19697\nf 17180 19697 19674\nf 17181 17182 17189\nf 17182 17190 17189\nf 17182 19699 19723\nf 17182 19723 17190\nf 17183 17191 17192\nf 17183 17192 17184\nf 17184 17192 19708\nf 17184 19708 19685\nf 17185 17186 17193\nf 17186 17194 17193\nf 17186 19710 19734\nf 17186 19734 17194\nf 17187 17195 17196\nf 17187 17196 17188\nf 17188 17196 19721\nf 17188 19721 19697\nf 17189 17190 17197\nf 17190 17198 17197\nf 17190 19723 19749\nf 17190 19749 17198\nf 17191 17199 17200\nf 17191 17200 17192\nf 17192 17200 19732\nf 17192 19732 19708\nf 17193 17194 17201\nf 17194 17203 17201\nf 17194 19734 19761\nf 17194 19761 17203\nf 17195 17204 17205\nf 17195 17205 17196\nf 17196 17205 19747\nf 17196 19747 19721\nf 17197 17198 17206\nf 17198 17207 17206\nf 17198 19749 19776\nf 17198 19776 17207\nf 17199 17208 17209\nf 17199 17209 17200\nf 17200 17209 19759\nf 17200 19759 19732\nf 17201 17203 17202\nf 17202 17203 17210\nf 17203 19761 17210\nf 17204 17211 17212\nf 17204 17212 17205\nf 17205 17212 19774\nf 17205 19774 19747\nf 17206 17207 17213\nf 17207 17214 17213\nf 17207 19776 19803\nf 17207 19803 17214\nf 17208 17215 17216\nf 17208 17216 17209\nf 17209 17216 19786\nf 17209 19786 19759\nf 17210 19761 19788\nf 17210 19788 17217\nf 17211 17218 17219\nf 17211 17219 17212\nf 17212 17219 19801\nf 17212 19801 19774\nf 17213 17214 17220\nf 17214 17221 17220\nf 17214 19803 19830\nf 17214 19830 17221\nf 17215 17222 17223\nf 17215 17223 17216\nf 17216 17223 19813\nf 17216 19813 19786\nf 17217 19788 19815\nf 17217 19815 17224\nf 17218 17225 17226\nf 17218 17226 17219\nf 17219 17226 19828\nf 17219 19828 19801\nf 17220 17221 17227\nf 17221 17229 17227\nf 17221 19830 19857\nf 17221 19857 17229\nf 17222 17230 17231\nf 17222 17231 17223\nf 17223 17231 19840\nf 17223 19840 19813\nf 17224 19815 19842\nf 17224 19842 17232\nf 17225 17233 17234\nf 17225 17234 17226\nf 17226 17234 19855\nf 17226 19855 19828\nf 17227 17229 17228\nf 17228 17229 17235\nf 17229 19857 17235\nf 17230 17236 17237\nf 17230 17237 17231\nf 17231 17237 19867\nf 17231 19867 19840\nf 17232 19842 19869\nf 17232 19869 17238\nf 17233 17239 17240\nf 17233 17240 17234\nf 17234 17240 19882\nf 17234 19882 19855\nf 17235 19857 19884\nf 17235 19884 17241\nf 17236 17242 17243\nf 17236 17243 17237\nf 17237 17243 19893\nf 17237 19893 19867\nf 17238 19869 19895\nf 17238 19895 17244\nf 17239 17245 17246\nf 17239 17246 17240\nf 17240 17246 19908\nf 17240 19908 19882\nf 17241 19884 19910\nf 17241 19910 17247\nf 17242 17248 17249\nf 17242 17249 17243\nf 17243 17249 19916\nf 17243 19916 19893\nf 17244 19895 19918\nf 17244 19918 17250\nf 17245 17251 17252\nf 17245 17252 17246\nf 17246 17252 19931\nf 17246 19931 19908\nf 17247 19910 19933\nf 17247 19933 17253\nf 17248 17254 17255\nf 17248 17255 17249\nf 17249 17255 19938\nf 17249 19938 19916\nf 17250 19918 19940\nf 17250 19940 17256\nf 17251 17258 17259\nf 17251 17259 17252\nf 17252 17259 19954\nf 17252 19954 19931\nf 17253 19933 19956\nf 17253 19956 17260\nf 17254 17261 17262\nf 17254 17262 17255\nf 17255 17262 19961\nf 17255 19961 19938\nf 17256 17257 17263\nf 17256 19940 19941\nf 17256 19941 17257\nf 17257 17264 17263\nf 17257 19941 19962\nf 17257 19962 19981\nf 17257 19981 17264\nf 17258 17265 17266\nf 17258 17266 17259\nf 17259 17266 19974\nf 17259 19974 19954\nf 17260 19956 19976\nf 17260 19976 17267\nf 17261 17268 17269\nf 17261 17269 17262\nf 17262 17269 19980\nf 17262 19980 19961\nf 17263 17264 17270\nf 17264 17271 17270\nf 17264 19981 20000\nf 17264 20000 17271\nf 17265 17272 17273\nf 17265 17273 17266\nf 17266 17273 19993\nf 17266 19993 19974\nf 17267 19976 19995\nf 17267 19995 17274\nf 17268 17275 17276\nf 17268 17276 17269\nf 17269 17276 19999\nf 17269 19999 19980\nf 17270 17271 17277\nf 17271 17278 17277\nf 17271 20000 20021\nf 17271 20021 17278\nf 17272 17279 17280\nf 17272 17280 17273\nf 17273 17280 20012\nf 17273 20012 19993\nf 17274 19995 20014\nf 17274 20014 17281\nf 17275 17283 20039\nf 17275 20020 17276\nf 17275 20039 20020\nf 17276 20019 19999\nf 17276 20020 20019\nf 17277 17278 17284\nf 17278 17285 17284\nf 17278 20021 20041\nf 17278 20041 17285\nf 17279 17286 17287\nf 17279 17287 17280\nf 17280 17287 20033\nf 17280 20033 20012\nf 17281 17282 17288\nf 17281 20014 20015\nf 17281 20015 17282\nf 17282 17289 17288\nf 17282 20015 20035\nf 17282 20035 20055\nf 17282 20055 17289\nf 17283 17290 20060\nf 17283 20060 20039\nf 17284 17285 17291\nf 17285 17292 17291\nf 17285 20041 20062\nf 17285 20062 17292\nf 17286 17293 17294\nf 17286 17294 17287\nf 17287 17294 20053\nf 17287 20053 20033\nf 17288 17289 17295\nf 17289 17296 17295\nf 17289 20055 20077\nf 17289 20077 17296\nf 17290 17297 20084\nf 17290 20084 20060\nf 17291 17292 17298\nf 17292 17299 17298\nf 17292 17300 17299\nf 17292 20062 20063\nf 17292 20063 17300\nf 17293 17301 17303\nf 17293 17303 17294\nf 17294 17303 20075\nf 17294 20075 20053\nf 17295 17296 17304\nf 17296 17305 17304\nf 17296 20077 20100\nf 17296 20100 17305\nf 17297 17306 20084\nf 17298 17299 17308\nf 17299 17300 17309\nf 17299 17309 17308\nf 17300 17310 17309\nf 17300 20063 20087\nf 17300 20087 20108\nf 17300 20108 17310\nf 17301 17302 17303\nf 17302 17311 20098\nf 17302 20098 17303\nf 17303 20098 20075\nf 17304 17305 17312\nf 17305 17313 17312\nf 17305 20100 20121\nf 17305 20121 17313\nf 17306 17307 20084\nf 17306 17314 17315\nf 17306 17315 17307\nf 17307 17315 20106\nf 17307 20085 20084\nf 17307 20106 20085\nf 17308 17309 17316\nf 17309 17310 17317\nf 17309 17317 17316\nf 17310 17318 17317\nf 17310 20108 20131\nf 17310 20131 17318\nf 17311 17319 20142\nf 17311 20119 20098\nf 17311 20142 20119\nf 17312 17313 17320\nf 17313 17321 17320\nf 17313 20121 20144\nf 17313 20144 17321\nf 17314 17322 17323\nf 17314 17323 17315\nf 17315 17323 20129\nf 17315 20129 20106\nf 17316 17317 17324\nf 17317 17318 17326\nf 17317 17326 17324\nf 17318 17327 17326\nf 17318 20131 20157\nf 17318 20157 17327\nf 17319 17328 20168\nf 17319 20168 20142\nf 17320 17321 17329\nf 17321 17331 17329\nf 17321 17332 17331\nf 17321 20144 20145\nf 17321 20145 17332\nf 17322 17334 17335\nf 17322 17335 17323\nf 17323 17333 20154\nf 17323 17335 17333\nf 17323 20154 20129\nf 17324 17326 17325\nf 17325 17326 17336\nf 17326 17327 17337\nf 17326 17337 17336\nf 17327 20157 20179\nf 17327 20179 17337\nf 17328 17338 20190\nf 17328 20190 20168\nf 17329 17331 17330\nf 17330 17331 17339\nf 17331 17332 17340\nf 17331 17340 17339\nf 17332 20145 20170\nf 17332 20170 20193\nf 17332 20193 17340\nf 17333 17335 17341\nf 17333 17341 20177\nf 17333 20155 20154\nf 17333 20177 20155\nf 17334 17342 17343\nf 17334 17343 17335\nf 17335 17343 17341\nf 17336 17337 17344\nf 17337 17345 17344\nf 17337 20179 20202\nf 17337 20202 17345\nf 17338 17346 20190\nf 17339 17340 17348\nf 17340 17349 17348\nf 17340 20193 20215\nf 17340 20215 17349\nf 17341 17343 17350\nf 17341 17350 20200\nf 17341 20200 20177\nf 17342 17351 17353\nf 17342 17353 17343\nf 17343 17353 17350\nf 17344 17345 17354\nf 17345 17355 17354\nf 17345 17356 17355\nf 17345 20202 20203\nf 17345 20203 17356\nf 17346 17347 20190\nf 17346 17357 17358\nf 17346 17358 17347\nf 17347 17358 20213\nf 17347 20191 20190\nf 17347 20213 20191\nf 17348 17349 17359\nf 17349 17360 17359\nf 17349 20215 20236\nf 17349 20236 17360\nf 17350 17353 17363\nf 17350 17361 20222\nf 17350 17363 17361\nf 17350 20222 20200\nf 17351 17352 17353\nf 17352 17362 17363\nf 17352 17363 17353\nf 17354 17355 17364\nf 17355 17356 17365\nf 17355 17365 17364\nf 17356 17366 17365\nf 17356 20203 20225\nf 17356 20225 20244\nf 17356 20244 17366\nf 17357 17367 17368\nf 17357 17368 17358\nf 17358 17368 20234\nf 17358 20234 20213\nf 17359 17360 20255\nf 17359 20255 17369\nf 17360 20236 20237\nf 17360 20237 20255\nf 17361 17363 17370\nf 17361 17370 20242\nf 17361 20223 20222\nf 17361 20242 20223\nf 17362 17371 17372\nf 17362 17372 17363\nf 17363 17372 17370\nf 17364 17365 17373\nf 17365 17366 17375\nf 17365 17375 17373\nf 17366 17376 17375\nf 17366 20244 20263\nf 17366 20263 17376\nf 17367 17377 17378\nf 17367 17378 17368\nf 17368 17378 20253\nf 17368 20253 20234\nf 17369 20255 17379\nf 17370 17372 17380\nf 17370 17380 20261\nf 17370 20261 20242\nf 17371 17381 17382\nf 17371 17382 17372\nf 17372 17382 17380\nf 17373 17375 17374\nf 17374 17375 17384\nf 17374 17384 17383\nf 17375 17376 17385\nf 17375 17385 17384\nf 17376 17386 17385\nf 17376 20263 20279\nf 17376 20279 17386\nf 17377 17387 17388\nf 17377 17388 17378\nf 17378 17388 20272\nf 17378 20272 20253\nf 17379 20255 20274\nf 17379 20274 17389\nf 17380 17382 17391\nf 17380 17391 20277\nf 17380 20277 20261\nf 17381 17392 17393\nf 17381 17393 17382\nf 17382 17393 17391\nf 17383 17384 17394\nf 17384 17385 17395\nf 17384 17395 17394\nf 17385 17386 17396\nf 17385 17396 17395\nf 17386 17397 17396\nf 17386 20279 20292\nf 17386 20292 17397\nf 17387 17398 17399\nf 17387 17399 17388\nf 17388 17399 20285\nf 17388 20285 20272\nf 17389 20274 20287\nf 17389 20287 20300\nf 17389 20300 17390\nf 17390 17401 17400\nf 17390 20300 17401\nf 17391 17393 17402\nf 17391 17402 20290\nf 17391 20290 20277\nf 17392 17403 17405\nf 17392 17405 17393\nf 17393 17405 17402\nf 17394 17395 17406\nf 17395 17396 17407\nf 17395 17407 17406\nf 17396 17397 17408\nf 17396 17408 17407\nf 17397 17409 17408\nf 17397 20292 20305\nf 17397 20305 17409\nf 17398 17410 20309\nf 17398 20299 17399\nf 17398 20309 20299\nf 17399 20297 20285\nf 17399 20299 20297\nf 17400 17401 17411\nf 17401 17412 17411\nf 17401 20300 20311\nf 17401 20311 17412\nf 17402 17405 17414\nf 17402 17414 20303\nf 17402 20303 20290\nf 17403 17404 17405\nf 17404 17413 17414\nf 17404 17414 17405\nf 17406 17407 17416\nf 17407 17408 17417\nf 17407 17417 17416\nf 17408 17409 17418\nf 17408 17418 17417\nf 17409 17419 17418\nf 17409 20305 20316\nf 17409 20316 17419\nf 17410 17420 20320\nf 17410 20320 20309\nf 17411 17412 20322\nf 17411 20322 17422\nf 17412 20311 20312\nf 17412 20312 20322\nf 17413 17415 17425\nf 17413 17425 17414\nf 17414 17423 20314\nf 17414 17425 17423\nf 17414 20314 20303\nf 17415 17424 17425\nf 17416 17417 17426\nf 17417 17418 17427\nf 17417 17427 17426\nf 17418 17419 17428\nf 17418 17428 17427\nf 17419 20316 20317\nf 17419 20317 20326\nf 17419 20326 17428\nf 17420 17421 17430\nf 17420 17430 20329\nf 17420 20329 20320\nf 17421 17429 17430\nf 17422 20322 17431\nf 17423 17425 17432\nf 17423 17432 20324\nf 17423 20324 20314\nf 17424 17433 17434\nf 17424 17434 17425\nf 17425 17434 17432\nf 17426 17427 17436\nf 17427 17428 17438\nf 17427 17438 17436\nf 17428 17439 17438\nf 17428 20326 20335\nf 17428 20335 17439\nf 17429 17440 20338\nf 17429 20330 17430\nf 17429 20338 20330\nf 17430 20330 20329\nf 17431 20322 20331\nf 17431 20331 17441\nf 17432 17434 17442\nf 17432 17442 20334\nf 17432 20333 20324\nf 17432 20334 20333\nf 17433 17435 17444\nf 17433 17444 17434\nf 17434 17444 17442\nf 17435 17443 17444\nf 17436 17438 17437\nf 17437 17438 17446\nf 17437 17446 17445\nf 17438 17439 17447\nf 17438 17447 17446\nf 17439 20335 20336\nf 17439 20336 20343\nf 17439 20343 17447\nf 17440 17448 20345\nf 17440 20345 20338\nf 17441 20331 20340\nf 17441 20340 17449\nf 17442 17444 17451\nf 17442 17451 20342\nf 17442 20341 20334\nf 17442 20342 20341\nf 17443 17450 17451\nf 17443 17451 17444\nf 17445 17446 17452\nf 17446 17447 17453\nf 17446 17453 17452\nf 17447 17454 17453\nf 17447 20343 20349\nf 17447 20349 17454\nf 17448 17455 20351\nf 17448 20351 20345\nf 17449 20340 20346\nf 17449 20346 17456\nf 17450 17457 17458\nf 17450 17458 17451\nf 17451 17458 20347\nf 17451 20347 20342\nf 17452 17453 17460\nf 17453 17454 17461\nf 17453 17461 17460\nf 17454 17462 17461\nf 17454 20349 20355\nf 17454 20355 17462\nf 17455 17463 20358\nf 17455 20358 20351\nf 17456 20346 20352\nf 17456 20352 17464\nf 17457 17459 20354\nf 17457 20354 17458\nf 17458 20353 20347\nf 17458 20354 20353\nf 17459 17465 17466\nf 17459 17466 20360\nf 17459 20360 20354\nf 17460 17461 17467\nf 17461 17462 17468\nf 17461 17468 17467\nf 17462 17469 17468\nf 17462 20355 20362\nf 17462 20362 17469\nf 17463 17470 20366\nf 17463 20366 20358\nf 17464 20352 20359\nf 17464 20359 17471\nf 17465 17472 17473\nf 17465 17473 17466\nf 17466 17473 20360\nf 17467 17468 17475\nf 17468 17469 17476\nf 17468 17476 17475\nf 17469 17477 17476\nf 17469 17478 17477\nf 17469 20362 20363\nf 17469 20363 17478\nf 17470 17479 20372\nf 17470 20372 20366\nf 17471 20359 20367\nf 17471 20367 17480\nf 17472 17474 17483\nf 17472 17483 17473\nf 17473 17481 20368\nf 17473 17483 17481\nf 17473 20368 20360\nf 17474 17482 17483\nf 17475 17476 17484\nf 17476 17477 17486\nf 17476 17486 17484\nf 17477 17478 17487\nf 17477 17487 17486\nf 17478 17488 17487\nf 17478 20363 20370\nf 17478 20370 20376\nf 17478 20376 17488\nf 17479 17489 20378\nf 17479 20378 20372\nf 17480 20367 20373\nf 17480 20373 17490\nf 17481 17483 17492\nf 17481 17492 20375\nf 17481 20374 20368\nf 17481 20375 20374\nf 17482 17491 17492\nf 17482 17492 17483\nf 17484 17486 17485\nf 17485 17486 17493\nf 17486 17487 17494\nf 17486 17494 17493\nf 17487 17488 17494\nf 17488 17495 17494\nf 17488 20376 20382\nf 17488 20382 17495\nf 17489 17496 20384\nf 17489 20384 20378\nf 17490 20373 20379\nf 17490 20379 17497\nf 17491 17498 17499\nf 17491 17499 17492\nf 17492 17499 20380\nf 17492 20380 20375\nf 17493 17494 17505\nf 17494 17495 17506\nf 17494 17506 17505\nf 17495 17507 17506\nf 17495 20382 20387\nf 17495 20387 17507\nf 17496 17508 20389\nf 17496 20389 20384\nf 17497 20379 20385\nf 17497 20385 17509\nf 17498 17500 17512\nf 17498 17512 17499\nf 17499 17510 20386\nf 17499 17512 17510\nf 17499 20386 20380\nf 17500 17511 17512\nf 17501 17502 17516\nf 17501 17515 17513\nf 17501 17516 17515\nf 17502 17503 17517\nf 17502 17517 17516\nf 17503 17504 17519\nf 17503 17519 17517\nf 17504 17518 17519\nf 17505 17506 17521\nf 17506 17507 17522\nf 17506 17522 17521\nf 17507 17523 17522\nf 17507 20387 20393\nf 17507 20393 17523\nf 17508 17524 20395\nf 17508 20395 20389\nf 17509 20385 20390\nf 17509 20390 17525\nf 17510 17512 17527\nf 17510 17527 20392\nf 17510 20391 20386\nf 17510 20392 20391\nf 17511 17526 17527\nf 17511 17527 17512\nf 17513 17515 17514\nf 17514 17515 17531\nf 17514 17531 17530\nf 17515 17516 17532\nf 17515 17532 17531\nf 17516 17517 17533\nf 17516 17533 17532\nf 17517 17519 17534\nf 17517 17534 17533\nf 17518 17520 17537\nf 17518 17537 17519\nf 17519 17535 17534\nf 17519 17537 17535\nf 17520 17536 17537\nf 17521 17522 17543\nf 17522 17523 17545\nf 17522 17545 17543\nf 17523 17546 17545\nf 17523 20393 20399\nf 17523 20399 17546\nf 17524 17547 20402\nf 17524 20402 20395\nf 17525 20390 20396\nf 17525 20396 17548\nf 17526 17528 20398\nf 17526 20398 17527\nf 17527 20397 20392\nf 17527 20398 20397\nf 17528 17529 17551\nf 17528 17549 20404\nf 17528 17551 17549\nf 17528 20404 20398\nf 17529 17550 17551\nf 17530 17531 17605\nf 17531 17532 17607\nf 17531 17607 17605\nf 17532 17533 17608\nf 17532 17608 17607\nf 17533 17534 17609\nf 17533 17609 17608\nf 17534 17535 17610\nf 17534 17610 17609\nf 17535 17537 17611\nf 17535 17611 17610\nf 17536 17538 17613\nf 17536 17613 17537\nf 17537 17612 17611\nf 17537 17613 17612\nf 17538 17539 17614\nf 17538 17614 17613\nf 17539 17540 17615\nf 17539 17615 17614\nf 17540 17541 17616\nf 17540 17616 17615\nf 17541 17542 17618\nf 17541 17618 17616\nf 17542 17617 17618\nf 17543 17545 17544\nf 17544 17545 17622\nf 17544 17622 17620\nf 17545 17546 17623\nf 17545 17623 17622\nf 17546 20399 20400\nf 17546 20400 20408\nf 17546 20408 17623\nf 17547 17624 20411\nf 17547 20411 20402\nf 17548 20396 20403\nf 17548 20403 17625\nf 17549 17551 20406\nf 17549 20406 20404\nf 17550 17552 20407\nf 17550 20407 17551\nf 17551 20407 20406\nf 17552 17553 17627\nf 17552 17626 20413\nf 17552 17627 17626\nf 17552 20413 20407\nf 17553 17554 17628\nf 17553 17628 17627\nf 17554 17555 17629\nf 17554 17629 17628\nf 17555 17556 17630\nf 17555 17630 17629\nf 17556 17557 17631\nf 17556 17631 17630\nf 17557 17558 17632\nf 17557 17632 17631\nf 17558 17559 17633\nf 17558 17633 17632\nf 17559 17560 17635\nf 17559 17635 17633\nf 17560 17634 17635\nf 17561 17562 17644\nf 17561 17643 17641\nf 17561 17644 17643\nf 17562 17563 17645\nf 17562 17645 17644\nf 17563 17564 17646\nf 17563 17646 17645\nf 17564 17565 17647\nf 17564 17647 17646\nf 17565 17566 17648\nf 17565 17648 17647\nf 17566 17567 17649\nf 17566 17649 17648\nf 17567 17568 17650\nf 17567 17650 17649\nf 17568 17569 17651\nf 17568 17651 17650\nf 17569 17570 17652\nf 17569 17652 17651\nf 17570 17571 17653\nf 17570 17653 17652\nf 17571 17572 17654\nf 17571 17654 17653\nf 17572 17573 17655\nf 17572 17655 17654\nf 17573 17574 17656\nf 17573 17656 17655\nf 17574 17575 17657\nf 17574 17657 17656\nf 17575 17576 17658\nf 17575 17658 17657\nf 17576 17577 17659\nf 17576 17659 17658\nf 17577 17578 17660\nf 17577 17660 17659\nf 17578 17579 17661\nf 17578 17661 17660\nf 17579 17580 17662\nf 17579 17662 17661\nf 17580 17581 17663\nf 17580 17663 17662\nf 17581 17582 17664\nf 17581 17664 17663\nf 17582 17583 17665\nf 17582 17665 17664\nf 17583 17584 17666\nf 17583 17666 17665\nf 17584 17585 17667\nf 17584 17667 17666\nf 17585 17586 17668\nf 17585 17668 17667\nf 17586 17587 17669\nf 17586 17669 17668\nf 17587 17588 17670\nf 17587 17670 17669\nf 17588 17589 17671\nf 17588 17671 17670\nf 17589 17590 17672\nf 17589 17672 17671\nf 17590 17591 17673\nf 17590 17673 17672\nf 17591 17592 17674\nf 17591 17674 17673\nf 17592 17593 17675\nf 17592 17675 17674\nf 17593 17594 17676\nf 17593 17676 17675\nf 17594 17595 17677\nf 17594 17677 17676\nf 17595 17596 17678\nf 17595 17678 17677\nf 17596 17597 17679\nf 17596 17679 17678\nf 17597 17598 17680\nf 17597 17680 17679\nf 17598 17599 17681\nf 17598 17681 17680\nf 17599 17600 17682\nf 17599 17682 17681\nf 17600 17601 17683\nf 17600 17683 17682\nf 17601 17602 17684\nf 17601 17684 17683\nf 17602 17603 17685\nf 17602 17685 17684\nf 17603 17604 17686\nf 17603 17686 17685\nf 17604 17606 17687\nf 17604 17687 17686\nf 17605 17607 17606\nf 17606 17607 17687\nf 17607 17608 17688\nf 17607 17688 17687\nf 17608 17609 17689\nf 17608 17689 17688\nf 17609 17610 17690\nf 17609 17690 17689\nf 17610 17611 17691\nf 17610 17691 17690\nf 17611 17612 17692\nf 17611 17692 17691\nf 17612 17613 17693\nf 17612 17693 17692\nf 17613 17614 17694\nf 17613 17694 17693\nf 17614 17615 17695\nf 17614 17695 17694\nf 17615 17616 17696\nf 17615 17696 17695\nf 17616 17618 17697\nf 17616 17697 17696\nf 17617 17619 17699\nf 17617 17699 17618\nf 17618 17698 17697\nf 17618 17699 17698\nf 17619 17621 17700\nf 17619 17700 17699\nf 17620 17622 17621\nf 17621 17622 17700\nf 17622 17623 17701\nf 17622 17701 17700\nf 17623 20408 20409\nf 17623 20409 20488\nf 17623 20488 17701\nf 17624 17702 20491\nf 17624 20491 20411\nf 17625 20403 20412\nf 17625 20412 17703\nf 17626 17627 20415\nf 17626 20415 20413\nf 17627 17628 20416\nf 17627 20416 20415\nf 17628 17629 20417\nf 17628 20417 20416\nf 17629 17630 20418\nf 17629 20418 20417\nf 17630 17631 20419\nf 17630 20419 20418\nf 17631 17632 20420\nf 17631 20420 20419\nf 17632 17633 20421\nf 17632 20421 20420\nf 17633 17635 20422\nf 17633 20422 20421\nf 17634 17636 20423\nf 17634 20423 17635\nf 17635 20423 20422\nf 17636 17637 20424\nf 17636 20424 20423\nf 17637 17638 20425\nf 17637 20425 20424\nf 17638 17639 20426\nf 17638 20426 20425\nf 17639 17640 20427\nf 17639 20427 20426\nf 17640 17642 20428\nf 17640 20428 20427\nf 17641 17643 17642\nf 17642 17643 20430\nf 17642 20429 20428\nf 17642 20430 20429\nf 17643 17644 20430\nf 17644 17645 20431\nf 17644 20431 20430\nf 17645 17646 20432\nf 17645 20432 20431\nf 17646 17647 20433\nf 17646 20433 20432\nf 17647 17648 20434\nf 17647 20434 20433\nf 17648 17649 20435\nf 17648 20435 20434\nf 17649 17650 20436\nf 17649 20436 20435\nf 17650 17651 20437\nf 17650 20437 20436\nf 17651 17652 20438\nf 17651 20438 20437\nf 17652 17653 20439\nf 17652 20439 20438\nf 17653 17654 20440\nf 17653 20440 20439\nf 17654 17655 20441\nf 17654 20441 20440\nf 17655 17656 20442\nf 17655 20442 20441\nf 17656 17657 20443\nf 17656 20443 20442\nf 17657 17658 20444\nf 17657 20444 20443\nf 17658 17659 20445\nf 17658 20445 20444\nf 17659 17660 20446\nf 17659 20446 20445\nf 17660 17661 20447\nf 17660 20447 20446\nf 17661 17662 20448\nf 17661 20448 20447\nf 17662 17663 20449\nf 17662 20449 20448\nf 17663 17664 20450\nf 17663 20450 20449\nf 17664 17665 20451\nf 17664 20451 20450\nf 17665 17666 20452\nf 17665 20452 20451\nf 17666 17667 20453\nf 17666 20453 20452\nf 17667 17668 20454\nf 17667 20454 20453\nf 17668 17669 20455\nf 17668 20455 20454\nf 17669 17670 20456\nf 17669 20456 20455\nf 17670 17671 20457\nf 17670 20457 20456\nf 17671 17672 20458\nf 17671 20458 20457\nf 17672 17673 20459\nf 17672 20459 20458\nf 17673 17674 20460\nf 17673 20460 20459\nf 17674 17675 20461\nf 17674 20461 20460\nf 17675 17676 20462\nf 17675 20462 20461\nf 17676 17677 20463\nf 17676 20463 20462\nf 17677 17678 20464\nf 17677 20464 20463\nf 17678 17679 20465\nf 17678 20465 20464\nf 17679 17680 20466\nf 17679 20466 20465\nf 17680 17681 20467\nf 17680 20467 20466\nf 17681 17682 20468\nf 17681 20468 20467\nf 17682 17683 20469\nf 17682 20469 20468\nf 17683 17684 20470\nf 17683 20470 20469\nf 17684 17685 20471\nf 17684 20471 20470\nf 17685 17686 20472\nf 17685 20472 20471\nf 17686 17687 20473\nf 17686 20473 20472\nf 17687 17688 20474\nf 17687 20474 20473\nf 17688 17689 20475\nf 17688 20475 20474\nf 17689 17690 20476\nf 17689 20476 20475\nf 17690 17691 20477\nf 17690 20477 20476\nf 17691 17692 20478\nf 17691 20478 20477\nf 17692 17693 20479\nf 17692 20479 20478\nf 17693 17694 20480\nf 17693 20480 20479\nf 17694 17695 20481\nf 17694 20481 20480\nf 17695 17696 20482\nf 17695 20482 20481\nf 17696 17697 20483\nf 17696 20483 20482\nf 17697 17698 20484\nf 17697 20484 20483\nf 17698 17699 20485\nf 17698 20485 20484\nf 17699 17700 20486\nf 17699 20486 20485\nf 17700 17701 20487\nf 17700 20487 20486\nf 17701 20488 20489\nf 17701 20489 20487\nf 17702 17704 20491\nf 17703 20412 20493\nf 17703 20493 17707\nf 17704 17705 17706\nf 17704 17706 20491\nf 17705 17708 20494\nf 17705 20494 17706\nf 17706 20492 20491\nf 17706 20494 20492\nf 17707 20493 20495\nf 17707 20495 17709\nf 17708 17710 20496\nf 17708 20496 20494\nf 17709 20495 20498\nf 17709 20498 17713\nf 17710 17711 17712\nf 17710 17712 20496\nf 17711 17715 17717\nf 17711 17717 20500\nf 17711 20500 17712\nf 17712 20497 20496\nf 17712 20499 20497\nf 17712 20500 20499\nf 17713 20498 20501\nf 17713 20501 17718\nf 17714 17735 20520\nf 17714 20503 17716\nf 17714 20520 20503\nf 17715 17716 17717\nf 17716 20502 17717\nf 17716 20503 20502\nf 17717 20502 20500\nf 17718 20501 20504\nf 17718 20504 17737\nf 17719 17807 17809\nf 17719 17809 17810\nf 17719 17810 17720\nf 17720 17810 20595\nf 17720 20506 17721\nf 17720 20595 20506\nf 17721 20506 20507\nf 17721 20507 17722\nf 17722 20507 20508\nf 17722 20508 17723\nf 17723 20508 20509\nf 17723 20509 17724\nf 17724 20509 20510\nf 17724 20510 17725\nf 17725 20510 20511\nf 17725 20511 17726\nf 17726 20511 20512\nf 17726 20512 17727\nf 17727 20512 20513\nf 17727 20513 17728\nf 17728 20513 20514\nf 17728 20514 17729\nf 17729 20514 20515\nf 17729 20515 17730\nf 17730 20515 20516\nf 17730 20516 17731\nf 17731 20516 20517\nf 17731 20517 17732\nf 17732 20517 20518\nf 17732 20518 17733\nf 17733 20518 20519\nf 17733 20519 17734\nf 17734 20519 20521\nf 17734 20521 17736\nf 17735 17736 20520\nf 17736 20521 20520\nf 17737 20504 20522\nf 17737 20522 17811\nf 17738 17813 20603\nf 17738 20524 20525\nf 17738 20525 17739\nf 17738 20603 20524\nf 17739 20525 20526\nf 17739 20526 17740\nf 17740 20526 20527\nf 17740 20527 17741\nf 17741 20527 20528\nf 17741 20528 17742\nf 17742 20528 20529\nf 17742 20529 17743\nf 17743 20529 20530\nf 17743 20530 17744\nf 17744 20530 20531\nf 17744 20531 17745\nf 17745 20531 20532\nf 17745 20532 17746\nf 17746 20532 20533\nf 17746 20533 17747\nf 17747 20533 20534\nf 17747 20534 17748\nf 17748 20534 20535\nf 17748 20535 17749\nf 17749 20535 20536\nf 17749 20536 17750\nf 17750 20536 20537\nf 17750 20537 17751\nf 17751 20537 20538\nf 17751 20538 17752\nf 17752 20538 20539\nf 17752 20539 17753\nf 17753 20539 20540\nf 17753 20540 17754\nf 17754 20540 20541\nf 17754 20541 17755\nf 17755 20541 20542\nf 17755 20542 17756\nf 17756 20542 20543\nf 17756 20543 17757\nf 17757 20543 20544\nf 17757 20544 17758\nf 17758 20544 20545\nf 17758 20545 17759\nf 17759 20545 20546\nf 17759 20546 17760\nf 17760 20546 20547\nf 17760 20547 17761\nf 17761 20547 20548\nf 17761 20548 17762\nf 17762 20548 20549\nf 17762 20549 17763\nf 17763 20549 20550\nf 17763 20550 17764\nf 17764 20550 20551\nf 17764 20551 17765\nf 17765 20551 20552\nf 17765 20552 17766\nf 17766 20552 20553\nf 17766 20553 17767\nf 17767 20553 20554\nf 17767 20554 17768\nf 17768 20554 20555\nf 17768 20555 17769\nf 17769 20555 20556\nf 17769 20556 17770\nf 17770 20556 20557\nf 17770 20557 17771\nf 17771 20557 20558\nf 17771 20558 17772\nf 17772 20558 20559\nf 17772 20559 17773\nf 17773 20559 20560\nf 17773 20560 17774\nf 17774 20560 20561\nf 17774 20561 17775\nf 17775 20561 20562\nf 17775 20562 17776\nf 17776 20562 20563\nf 17776 20563 17777\nf 17777 20563 20564\nf 17777 20564 17778\nf 17778 20564 20565\nf 17778 20565 17779\nf 17779 20565 20566\nf 17779 20566 17780\nf 17780 20566 20567\nf 17780 20567 17781\nf 17781 20567 20568\nf 17781 20568 17782\nf 17782 20568 20569\nf 17782 20569 17783\nf 17783 20569 20570\nf 17783 20570 17784\nf 17784 20570 20571\nf 17784 20571 17785\nf 17785 20571 20572\nf 17785 20572 17786\nf 17786 20572 20573\nf 17786 20573 17787\nf 17787 20573 20574\nf 17787 20574 17788\nf 17788 20574 20575\nf 17788 20575 17789\nf 17789 20575 20576\nf 17789 20576 17790\nf 17790 20576 20577\nf 17790 20577 17791\nf 17791 20577 20578\nf 17791 20578 17792\nf 17792 20578 20579\nf 17792 20579 17793\nf 17793 20579 20580\nf 17793 20580 17794\nf 17794 20580 20581\nf 17794 20581 17795\nf 17795 20581 20582\nf 17795 20582 17796\nf 17796 20582 20583\nf 17796 20583 17797\nf 17797 20583 20584\nf 17797 20584 17798\nf 17798 20584 20585\nf 17798 20585 17799\nf 17799 20585 20586\nf 17799 20586 17800\nf 17800 20586 20587\nf 17800 20587 17801\nf 17801 20587 20588\nf 17801 20588 17802\nf 17802 20588 20589\nf 17802 20589 17803\nf 17803 20589 20590\nf 17803 20590 17804\nf 17804 20590 20591\nf 17804 20591 17805\nf 17805 20591 20592\nf 17805 20592 17806\nf 17806 20592 20593\nf 17806 20593 17808\nf 17807 17808 17809\nf 17808 20593 20594\nf 17808 20594 17809\nf 17809 20594 17810\nf 17810 20594 20596\nf 17810 20596 20595\nf 17811 20522 20598\nf 17811 20598 17815\nf 17812 17816 20612\nf 17812 20602 20604\nf 17812 20604 17814\nf 17812 20612 20602\nf 17813 17814 20603\nf 17814 20604 20603\nf 17815 20598 20605\nf 17815 20605 17818\nf 17816 17817 20612\nf 17817 17820 20628\nf 17817 20613 20612\nf 17817 20628 20613\nf 17818 20605 20615\nf 17818 20615 17821\nf 17819 17823 20621\nf 17819 20610 20623\nf 17819 20621 20610\nf 17819 20623 20637\nf 17819 20637 17823\nf 17820 17825 20628\nf 17821 17822 17828\nf 17821 20615 20616\nf 17821 20616 17822\nf 17822 17829 17828\nf 17822 20616 20631\nf 17822 20631 20642\nf 17822 20642 17829\nf 17823 20635 20621\nf 17823 20637 20638\nf 17823 20638 20635\nf 17824 17827 17831\nf 17824 17831 20640\nf 17824 20626 20629\nf 17824 20629 17827\nf 17824 20640 20626\nf 17825 17826 17827\nf 17825 17827 20628\nf 17826 17830 17831\nf 17826 17831 17827\nf 17827 20629 20628\nf 17828 17829 17832\nf 17829 17833 17832\nf 17829 20642 20651\nf 17829 20651 17833\nf 17830 17834 17835\nf 17830 17835 17831\nf 17831 17835 20649\nf 17831 20649 20640\nf 17832 17833 20661\nf 17832 20661 17836\nf 17833 20651 20652\nf 17833 20652 20661\nf 17834 17837 17838\nf 17834 17838 17835\nf 17835 17838 20659\nf 17835 20659 20649\nf 17836 20661 17839\nf 17837 17840 17841\nf 17837 17841 17838\nf 17838 17841 20669\nf 17838 20669 20659\nf 17839 20661 20671\nf 17839 20671 17842\nf 17840 17843 17844\nf 17840 17844 17841\nf 17841 17844 20679\nf 17841 20679 20669\nf 17842 20671 20681\nf 17842 20681 17845\nf 17843 17846 17847\nf 17843 17847 17844\nf 17844 17847 20686\nf 17844 20686 20679\nf 17845 20681 20688\nf 17845 20688 17848\nf 17846 17849 20699\nf 17846 20694 17847\nf 17846 20699 20694\nf 17847 20692 20686\nf 17847 20694 20692\nf 17848 20688 20695\nf 17848 20695 17851\nf 17849 17850 17853\nf 17849 17853 20704\nf 17849 20704 20699\nf 17850 17852 17853\nf 17851 20695 20701\nf 17851 20701 17854\nf 17852 17855 17856\nf 17852 17856 17853\nf 17853 17856 20704\nf 17854 20701 20706\nf 17854 20706 17857\nf 17855 17858 17859\nf 17855 17859 17856\nf 17856 17859 20708\nf 17856 20708 20704\nf 17857 20706 20709\nf 17857 20709 17860\nf 17858 17861 20715\nf 17858 20712 17859\nf 17858 20715 20712\nf 17859 20711 20708\nf 17859 20712 20711\nf 17860 20709 20713\nf 17860 20713 17862\nf 17861 17863 20719\nf 17861 20719 20715\nf 17862 20713 20717\nf 17862 20717 17864\nf 17863 17865 20722\nf 17863 20722 20719\nf 17864 20717 20720\nf 17864 20720 17867\nf 17865 17866 17870\nf 17865 17870 20725\nf 17865 20725 20722\nf 17866 17869 17870\nf 17867 20720 20723\nf 17867 20723 20726\nf 17867 20726 17868\nf 17868 17872 17871\nf 17868 20726 17872\nf 17869 17873 17874\nf 17869 17874 17870\nf 17870 17874 20725\nf 17871 17872 17875\nf 17872 17876 17875\nf 17872 20726 20730\nf 17872 20730 17876\nf 17873 17877 20732\nf 17873 20729 17874\nf 17873 20732 20729\nf 17874 20728 20725\nf 17874 20729 20728\nf 17875 17876 17878\nf 17876 17879 17878\nf 17876 20730 20734\nf 17876 20734 17879\nf 17877 17880 20736\nf 17877 20736 20732\nf 17878 17879 17881\nf 17879 17882 17881\nf 17879 20734 20738\nf 17879 20738 17882\nf 17880 17883 20740\nf 17880 20740 20736\nf 17881 17882 17884\nf 17882 17885 17884\nf 17882 20738 20742\nf 17882 20742 17885\nf 17883 17886 20744\nf 17883 20744 20740\nf 17884 17885 17887\nf 17885 17888 17887\nf 17885 20742 20746\nf 17885 20746 17888\nf 17886 17889 20748\nf 17886 20748 20744\nf 17887 17888 17890\nf 17888 17891 17890\nf 17888 20746 20750\nf 17888 20750 17891\nf 17889 17892 20752\nf 17889 20752 20748\nf 17890 17891 17893\nf 17891 17895 17893\nf 17891 20750 20754\nf 17891 20754 17895\nf 17892 17896 20756\nf 17892 20756 20752\nf 17893 17895 17894\nf 17894 17895 17897\nf 17895 20754 17897\nf 17896 17898 20756\nf 17897 20754 20759\nf 17897 20759 17901\nf 17898 17899 17900\nf 17898 17900 20756\nf 17899 17902 20761\nf 17899 20761 17900\nf 17900 20757 20756\nf 17900 20761 20757\nf 17901 20759 20762\nf 17901 20762 17903\nf 17902 17905 20767\nf 17902 20765 20761\nf 17902 20767 20765\nf 17903 17904 17906\nf 17903 20762 20763\nf 17903 20763 17904\nf 17904 17907 17906\nf 17904 20763 20766\nf 17904 20766 20768\nf 17904 20768 17907\nf 17905 17908 20769\nf 17905 20769 20767\nf 17906 17907 17909\nf 17907 17910 17909\nf 17907 20768 20771\nf 17907 20771 17910\nf 17908 17911 20769\nf 17909 17910 17914\nf 17910 17915 17914\nf 17910 20771 20773\nf 17910 20773 17915\nf 17911 17912 17913\nf 17911 17913 20769\nf 17912 17916 20772\nf 17912 20772 17913\nf 17913 20770 20769\nf 17913 20772 20770\nf 17914 17915 17917\nf 17915 17918 17917\nf 17915 20773 20776\nf 17915 20776 17918\nf 17916 17919 20774\nf 17916 20774 20772\nf 17917 17918 20779\nf 17917 20779 17921\nf 17918 20776 20777\nf 17918 20777 20779\nf 17919 17920 20774\nf 17919 17922 17923\nf 17919 17923 17920\nf 17920 17923 20778\nf 17920 20775 20774\nf 17920 20778 20775\nf 17921 20779 17924\nf 17922 17925 17926\nf 17922 17926 17923\nf 17923 17926 20781\nf 17923 20781 20778\nf 17924 20779 20783\nf 17924 20783 17927\nf 17925 17929 17930\nf 17925 17930 17926\nf 17926 17930 20785\nf 17926 20785 20781\nf 17927 20783 20787\nf 17927 20787 20791\nf 17927 20791 17928\nf 17928 17932 17931\nf 17928 20791 17932\nf 17929 17933 17934\nf 17929 17934 17930\nf 17930 17934 20789\nf 17930 20789 20785\nf 17931 17932 17935\nf 17932 17936 17935\nf 17932 20791 20795\nf 17932 20795 17936\nf 17933 17937 17938\nf 17933 17938 17934\nf 17934 17938 20793\nf 17934 20793 20789\nf 17935 17936 17939\nf 17936 17940 17939\nf 17936 20795 20799\nf 17936 20799 17940\nf 17937 17941 17942\nf 17937 17942 17938\nf 17938 17942 20797\nf 17938 20797 20793\nf 17939 17940 17943\nf 17940 17944 17943\nf 17940 20799 20803\nf 17940 20803 17944\nf 17941 17945 17946\nf 17941 17946 17942\nf 17942 17946 20801\nf 17942 20801 20797\nf 17943 17944 17947\nf 17944 17948 17947\nf 17944 20803 20807\nf 17944 20807 17948\nf 17945 17949 17950\nf 17945 17950 17946\nf 17946 17950 20805\nf 17946 20805 20801\nf 17947 17948 17951\nf 17948 17952 17951\nf 17948 20807 20810\nf 17948 20810 17952\nf 17949 17953 17954\nf 17949 17954 17950\nf 17950 17954 20809\nf 17950 20809 20805\nf 17951 17952 17955\nf 17952 17956 17955\nf 17952 20810 20813\nf 17952 20813 17956\nf 17953 17957 17958\nf 17953 17958 17954\nf 17954 17958 20812\nf 17954 20812 20809\nf 17955 17956 17959\nf 17956 17960 17959\nf 17956 20813 20816\nf 17956 20816 17960\nf 17957 17961 17962\nf 17957 17962 17958\nf 17958 17962 20815\nf 17958 20815 20812\nf 17959 17960 17963\nf 17960 17964 17963\nf 17960 20816 20819\nf 17960 20819 17964\nf 17961 17965 17967\nf 17961 17967 17962\nf 17962 17967 20818\nf 17962 20818 20815\nf 17963 17964 17968\nf 17964 17969 17968\nf 17964 20819 20823\nf 17964 20823 17969\nf 17965 17966 17967\nf 17966 17970 20821\nf 17966 20821 17967\nf 17967 20821 20818\nf 17968 17969 17971\nf 17969 17972 17971\nf 17969 20823 20829\nf 17969 20829 17972\nf 17970 17973 20826\nf 17970 20826 20821\nf 17971 17972 17975\nf 17972 17976 17975\nf 17972 20829 20834\nf 17972 20834 17976\nf 17973 17974 20826\nf 17973 17977 17979\nf 17973 17979 17974\nf 17974 17979 20833\nf 17974 20827 20826\nf 17974 20833 20827\nf 17975 17976 17980\nf 17976 17981 17980\nf 17976 20834 20840\nf 17976 20840 17981\nf 17977 17978 17979\nf 17978 17982 20838\nf 17978 20838 17979\nf 17979 20838 20833\nf 17980 17981 17983\nf 17981 17984 17983\nf 17981 20840 20847\nf 17981 20847 17984\nf 17982 17985 20844\nf 17982 20844 20838\nf 17983 17984 17987\nf 17984 17988 17987\nf 17984 20847 20852\nf 17984 20852 17988\nf 17985 17986 20844\nf 17985 17989 17990\nf 17985 17990 17986\nf 17986 17990 20851\nf 17986 20845 20844\nf 17986 20851 20845\nf 17987 17988 17991\nf 17988 17992 17991\nf 17988 20852 20858\nf 17988 20858 17992\nf 17989 17993 17994\nf 17989 17994 17990\nf 17990 17994 20856\nf 17990 20856 20851\nf 17991 17992 17995\nf 17992 17996 17995\nf 17992 20858 20864\nf 17992 20864 17996\nf 17993 17997 17998\nf 17993 17998 17994\nf 17994 17998 20862\nf 17994 20862 20856\nf 17995 17996 17999\nf 17996 18000 17999\nf 17996 20864 20870\nf 17996 20870 18000\nf 17997 18001 18002\nf 17997 18002 17998\nf 17998 18002 20868\nf 17998 20868 20862\nf 17999 18000 18003\nf 18000 18004 18003\nf 18000 20870 20877\nf 18000 20877 18004\nf 18001 18005 18006\nf 18001 18006 18002\nf 18002 18006 20875\nf 18002 20875 20868\nf 18003 18004 18007\nf 18004 18009 18007\nf 18004 20877 20885\nf 18004 20885 18009\nf 18005 18010 18011\nf 18005 18011 18006\nf 18006 18011 20883\nf 18006 20883 20875\nf 18007 18009 18008\nf 18008 18009 20886\nf 18008 18013 18012\nf 18008 20886 18013\nf 18009 20885 20886\nf 18010 18014 18015\nf 18010 18015 18011\nf 18011 18015 20892\nf 18011 20892 20883\nf 18012 18013 18016\nf 18013 18017 18016\nf 18013 20886 20894\nf 18013 20894 20902\nf 18013 20902 18017\nf 18014 18018 18019\nf 18014 18019 18015\nf 18015 18019 20900\nf 18015 20900 20892\nf 18016 18017 18020\nf 18017 18021 18020\nf 18017 20902 20911\nf 18017 20911 18021\nf 18018 18023 18024\nf 18018 18024 18019\nf 18019 18022 20908\nf 18019 18024 18022\nf 18019 20908 20900\nf 18020 18021 18025\nf 18021 18026 18025\nf 18021 20911 20917\nf 18021 20917 18026\nf 18022 18024 18027\nf 18022 18027 20916\nf 18022 20909 20908\nf 18022 20916 20909\nf 18023 18028 18029\nf 18023 18029 18024\nf 18024 18029 18027\nf 18025 18026 18030\nf 18026 18031 18030\nf 18026 20917 20923\nf 18026 20923 18031\nf 18027 18029 18032\nf 18027 18032 20922\nf 18027 20922 20916\nf 18028 18033 18035\nf 18028 18035 18029\nf 18029 18035 18032\nf 18030 18031 18036\nf 18031 18037 18036\nf 18031 20923 20928\nf 18031 20928 18037\nf 18032 18035 18039\nf 18032 18039 20927\nf 18032 20927 20922\nf 18033 18034 18035\nf 18034 18038 18039\nf 18034 18039 18035\nf 18036 18037 18040\nf 18037 18041 18040\nf 18037 20928 20934\nf 18037 20934 18041\nf 18038 18042 18043\nf 18038 18043 18039\nf 18039 18043 20932\nf 18039 20932 20927\nf 18040 18041 18044\nf 18041 18045 18044\nf 18041 20934 20939\nf 18041 20939 18045\nf 18042 18046 18047\nf 18042 18047 18043\nf 18043 18047 20937\nf 18043 20937 20932\nf 18044 18045 18048\nf 18045 18050 18048\nf 18045 20939 20944\nf 18045 20944 18050\nf 18046 18051 18052\nf 18046 18052 18047\nf 18047 18052 20942\nf 18047 20942 20937\nf 18048 18050 18049\nf 18049 18050 20945\nf 18049 18054 18053\nf 18049 20945 18054\nf 18050 20944 20945\nf 18051 18055 18056\nf 18051 18056 18052\nf 18052 18056 20948\nf 18052 20948 20942\nf 18053 18054 18057\nf 18054 18058 18057\nf 18054 20945 20950\nf 18054 20950 20955\nf 18054 20955 18058\nf 18055 18059 18060\nf 18055 18060 18056\nf 18056 18060 20953\nf 18056 20953 20948\nf 18057 18058 18061\nf 18058 18062 18061\nf 18058 20955 20960\nf 18058 20960 18062\nf 18059 18063 18064\nf 18059 18064 18060\nf 18060 18064 20958\nf 18060 20958 20953\nf 18061 18062 18065\nf 18062 18066 18065\nf 18062 20960 20966\nf 18062 20966 18066\nf 18063 18068 18069\nf 18063 18069 18064\nf 18064 18067 20963\nf 18064 18069 18067\nf 18064 20963 20958\nf 18065 18066 18070\nf 18066 18071 18070\nf 18066 20966 20970\nf 18066 20970 18071\nf 18067 18069 18073\nf 18067 18073 20969\nf 18067 20964 20963\nf 18067 20968 20964\nf 18067 20969 20968\nf 18068 18072 18073\nf 18068 18073 18069\nf 18070 18071 18074\nf 18071 18075 18074\nf 18071 20970 20974\nf 18071 20974 18075\nf 18072 18076 18077\nf 18072 18077 18073\nf 18073 18077 20972\nf 18073 20972 20969\nf 18074 18075 20978\nf 18074 20978 18078\nf 18075 20974 20975\nf 18075 20975 20978\nf 18076 18079 20980\nf 18076 20977 18077\nf 18076 20980 20977\nf 18077 20976 20972\nf 18077 20977 20976\nf 18078 20978 18080\nf 18079 18081 20984\nf 18079 20984 20980\nf 18080 20978 20982\nf 18080 20982 18082\nf 18081 18083 20987\nf 18081 20987 20984\nf 18082 20982 20985\nf 18082 20985 18084\nf 18083 18086 20990\nf 18083 20990 20987\nf 18084 20985 20988\nf 18084 20988 20991\nf 18084 20991 18085\nf 18085 18088 18087\nf 18085 20991 18088\nf 18086 18089 20992\nf 18086 20992 20990\nf 18087 18088 18090\nf 18088 18091 18090\nf 18088 20991 20993\nf 18088 20993 18091\nf 18089 18092 20994\nf 18089 20994 20992\nf 18090 18091 18093\nf 18091 18094 18093\nf 18091 20993 20995\nf 18091 20995 18094\nf 18092 18095 20996\nf 18092 20996 20994\nf 18093 18094 18096\nf 18094 18097 18096\nf 18094 20995 20997\nf 18094 20997 18097\nf 18095 18098 20998\nf 18095 20998 20996\nf 18096 18097 18099\nf 18097 18100 18099\nf 18097 20997 20999\nf 18097 20999 18100\nf 18098 18101 21000\nf 18098 21000 20998\nf 18099 18100 18102\nf 18100 18103 18102\nf 18100 20999 21001\nf 18100 21001 18103\nf 18101 18104 21002\nf 18101 21002 21000\nf 18102 18103 18105\nf 18103 18106 18105\nf 18103 21001 21003\nf 18103 21003 18106\nf 18104 18107 21004\nf 18104 21004 21002\nf 18105 18106 18108\nf 18106 18110 18108\nf 18106 21003 21005\nf 18106 21005 18110\nf 18107 18111 21006\nf 18107 21006 21004\nf 18108 18110 18109\nf 18109 18110 18112\nf 18110 21005 18112\nf 18111 18113 21006\nf 18112 21005 21009\nf 18112 21009 18116\nf 18113 18114 18115\nf 18113 18115 21006\nf 18114 18117 21010\nf 18114 21010 18115\nf 18115 21007 21006\nf 18115 21010 21007\nf 18116 21009 21011\nf 18116 21011 18118\nf 18117 18119 21016\nf 18117 21013 21010\nf 18117 21016 21013\nf 18118 21011 21014\nf 18118 21014 18121\nf 18119 18120 21016\nf 18120 18122 21021\nf 18120 21017 21016\nf 18120 21021 21017\nf 18121 21014 21019\nf 18121 21019 18123\nf 18122 18124 21021\nf 18123 21019 21023\nf 18123 21023 18127\nf 18124 18125 18126\nf 18124 18126 21021\nf 18125 18129 18131\nf 18125 18131 21027\nf 18125 21027 18126\nf 18126 21022 21021\nf 18126 21026 21022\nf 18126 21027 21026\nf 18127 18128 18132\nf 18127 21023 21024\nf 18127 21024 18128\nf 18128 18133 18132\nf 18128 21024 21028\nf 18128 21028 21032\nf 18128 21032 18133\nf 18129 18130 18131\nf 18130 18134 18136\nf 18130 18136 21031\nf 18130 21031 18131\nf 18131 21030 21027\nf 18131 21031 21030\nf 18132 18133 18137\nf 18133 18138 18137\nf 18133 21032 21035\nf 18133 21035 18138\nf 18134 18135 18136\nf 18135 18139 21034\nf 18135 21034 18136\nf 18136 21034 21031\nf 18137 18138 18140\nf 18138 18141 18140\nf 18138 18142 18141\nf 18138 21035 21036\nf 18138 21036 18142\nf 18139 18143 21039\nf 18139 21039 21034\nf 18140 18141 18146\nf 18141 18142 18147\nf 18141 18147 18146\nf 18142 18148 18147\nf 18142 18151 18148\nf 18142 21036 21042\nf 18142 21042 21044\nf 18142 21044 18151\nf 18143 18144 18145\nf 18143 18145 21039\nf 18144 18149 18151\nf 18144 18151 21044\nf 18144 21044 18145\nf 18145 21040 21039\nf 18145 21043 21040\nf 18145 21044 21043\nf 18146 18147 18152\nf 18147 18148 18153\nf 18147 18153 18152\nf 18148 18151 18155\nf 18148 18155 18153\nf 18149 18150 18151\nf 18150 18154 18155\nf 18150 18155 18151\nf 18152 18153 18156\nf 18153 18155 18157\nf 18153 18157 18156\nf 18154 18158 18160\nf 18154 18160 18155\nf 18155 18160 18157\nf 18156 18157 18161\nf 18157 18160 18164\nf 18157 18164 18161\nf 18158 18159 18160\nf 18159 18163 18164\nf 18159 18164 18160\nf 18161 18164 18162\nf 18162 18164 18166\nf 18162 18166 18165\nf 18163 18167 18168\nf 18163 18168 18164\nf 18164 18168 18166\nf 18165 18166 18169\nf 18166 18168 18171\nf 18166 18171 18169\nf 18167 18172 18174\nf 18167 18174 18168\nf 18168 18174 18171\nf 18169 18171 18170\nf 18170 18171 18173\nf 18171 18174 18173\nf 18172 18173 18174\nf 18175 18176 18186\nf 18175 18185 18183\nf 18175 18186 18185\nf 18176 18177 18187\nf 18176 18187 18186\nf 18177 18178 18189\nf 18177 18189 18187\nf 18178 18188 18189\nf 18179 18180 18196\nf 18179 18195 18193\nf 18179 18196 18195\nf 18180 18181 18197\nf 18180 18197 18196\nf 18181 18182 18199\nf 18181 18199 18197\nf 18182 18198 18199\nf 18183 18185 18184\nf 18184 18185 18202\nf 18184 18202 18201\nf 18185 18186 18203\nf 18185 18203 18202\nf 18186 18187 18204\nf 18186 18204 18203\nf 18187 18189 18205\nf 18187 18205 18204\nf 18188 18190 18207\nf 18188 18207 18189\nf 18189 18206 18205\nf 18189 18207 18206\nf 18190 18191 18209\nf 18190 18209 18207\nf 18191 18208 18209\nf 18192 18194 18215\nf 18192 18214 18212\nf 18192 18215 18214\nf 18193 18195 18194\nf 18194 18195 18215\nf 18195 18196 18216\nf 18195 18216 18215\nf 18196 18197 18217\nf 18196 18217 18216\nf 18197 18199 18218\nf 18197 18218 18217\nf 18198 18200 18221\nf 18198 18221 18199\nf 18199 18219 18218\nf 18199 18221 18219\nf 18200 18220 18221\nf 18201 18202 18223\nf 18202 18203 18225\nf 18202 18225 18223\nf 18203 18204 18226\nf 18203 18226 18225\nf 18204 18205 18227\nf 18204 18227 18226\nf 18205 18206 18228\nf 18205 18228 18227\nf 18206 18207 18229\nf 18206 18229 18228\nf 18207 18209 18230\nf 18207 18230 18229\nf 18208 18210 18233\nf 18208 18233 18209\nf 18209 18231 18230\nf 18209 18233 18231\nf 18210 18232 18233\nf 18211 18213 18237\nf 18211 18236 18235\nf 18211 18237 18236\nf 18212 18214 18213\nf 18213 18214 18237\nf 18214 18215 18238\nf 18214 18238 18237\nf 18215 18216 18239\nf 18215 18239 18238\nf 18216 18217 18240\nf 18216 18240 18239\nf 18217 18218 18241\nf 18217 18241 18240\nf 18218 18219 18242\nf 18218 18242 18241\nf 18219 18221 18243\nf 18219 18243 18242\nf 18220 18222 18246\nf 18220 18246 18221\nf 18221 18244 18243\nf 18221 18246 18244\nf 18222 18245 18246\nf 18223 18225 18224\nf 18224 18225 18249\nf 18224 18249 18248\nf 18225 18226 18250\nf 18225 18250 18249\nf 18226 18227 18251\nf 18226 18251 18250\nf 18227 18228 18252\nf 18227 18252 18251\nf 18228 18229 18253\nf 18228 18253 18252\nf 18229 18230 18254\nf 18229 18254 18253\nf 18230 18231 18255\nf 18230 18255 18254\nf 18231 18233 18256\nf 18231 18256 18255\nf 18232 18234 18259\nf 18232 18259 18233\nf 18233 18257 18256\nf 18233 18259 18257\nf 18234 18258 18259\nf 18235 18236 18262\nf 18236 18237 18264\nf 18236 18264 18262\nf 18237 18238 18265\nf 18237 18265 18264\nf 18238 18239 21046\nf 18238 21046 21053\nf 18238 21053 18265\nf 18239 18240 21047\nf 18239 21047 21046\nf 18240 18241 21048\nf 18240 21048 21047\nf 18241 18242 21049\nf 18241 21049 21048\nf 18242 18243 21050\nf 18242 21050 21049\nf 18243 18244 18266\nf 18243 18266 21051\nf 18243 21051 21050\nf 18244 18246 18266\nf 18245 18247 18269\nf 18245 18269 18246\nf 18246 18267 18266\nf 18246 18269 18267\nf 18247 18268 18269\nf 18248 18249 18270\nf 18249 18250 18272\nf 18249 18272 18270\nf 18250 18251 18273\nf 18250 18273 18272\nf 18251 18252 18274\nf 18251 18274 18273\nf 18252 18253 18275\nf 18252 18275 18274\nf 18253 18254 18276\nf 18253 18276 18275\nf 18254 18255 18277\nf 18254 18277 18276\nf 18255 18256 18278\nf 18255 18278 18277\nf 18256 18257 18279\nf 18256 18279 18278\nf 18257 18259 18280\nf 18257 18280 18279\nf 18258 18260 18282\nf 18258 18282 18259\nf 18259 18281 18280\nf 18259 18282 18281\nf 18260 18261 18284\nf 18260 18284 18282\nf 18261 18283 18284\nf 18262 18264 18263\nf 18263 18264 21052\nf 18263 18287 18285\nf 18263 21052 18287\nf 18264 18265 21052\nf 18265 21053 21054\nf 18265 21054 21052\nf 18266 18267 18288\nf 18266 18288 21062\nf 18266 21060 21051\nf 18266 21062 21060\nf 18267 18269 18288\nf 18268 18289 18290\nf 18268 18290 18269\nf 18269 18290 18288\nf 18270 18272 18271\nf 18271 18272 18293\nf 18271 18293 18291\nf 18272 18273 18294\nf 18272 18294 18293\nf 18273 18274 18295\nf 18273 18295 18294\nf 18274 18275 18296\nf 18274 18296 18295\nf 18275 18276 18297\nf 18275 18297 18296\nf 18276 18277 18298\nf 18276 18298 21063\nf 18276 21063 21075\nf 18276 21075 18297\nf 18277 18278 18298\nf 18278 18279 18299\nf 18278 18299 18298\nf 18279 18280 18300\nf 18279 18300 18299\nf 18280 18281 18301\nf 18280 18301 18300\nf 18281 18282 18302\nf 18281 18302 18301\nf 18282 18284 18303\nf 18282 18303 18302\nf 18283 18304 18305\nf 18283 18305 18284\nf 18284 18305 18303\nf 18285 18287 18286\nf 18286 18287 18306\nf 18287 21052 21064\nf 18287 21064 18306\nf 18288 18290 18307\nf 18288 18307 21073\nf 18288 21073 21062\nf 18289 18308 18309\nf 18289 18309 18290\nf 18290 18309 18307\nf 18291 18293 18292\nf 18292 18293 18310\nf 18293 18294 18311\nf 18293 18311 18310\nf 18294 18295 18311\nf 18295 18296 18312\nf 18295 18312 18311\nf 18296 18297 18313\nf 18296 18313 18312\nf 18297 18314 18313\nf 18297 18315 18314\nf 18297 21075 21077\nf 18297 21077 18315\nf 18298 18299 18316\nf 18298 18315 21076\nf 18298 18316 18315\nf 18298 21076 21063\nf 18299 18300 18317\nf 18299 18317 18316\nf 18300 18301 18318\nf 18300 18318 18317\nf 18301 18302 18319\nf 18301 18319 18318\nf 18302 18303 18320\nf 18302 18320 18319\nf 18303 18305 18321\nf 18303 18321 18320\nf 18304 18322 18323\nf 18304 18323 18305\nf 18305 18323 18321\nf 18306 21064 21079\nf 18306 21079 18324\nf 18307 18309 18326\nf 18307 18326 21090\nf 18307 21088 21073\nf 18307 21090 21088\nf 18308 18325 18326\nf 18308 18326 18309\nf 18310 18311 18327\nf 18311 18312 18328\nf 18311 18328 18327\nf 18312 18313 18329\nf 18312 18329 18328\nf 18313 18314 18330\nf 18313 18330 18329\nf 18314 18315 18331\nf 18314 18331 18330\nf 18315 18316 18332\nf 18315 18332 18331\nf 18315 21077 21076\nf 18316 18317 18333\nf 18316 18333 18332\nf 18317 18318 18334\nf 18317 18334 18333\nf 18318 18319 18335\nf 18318 18335 18334\nf 18319 18320 18336\nf 18319 18336 18335\nf 18320 18321 18337\nf 18320 18337 18336\nf 18321 18323 18338\nf 18321 18338 18337\nf 18322 18339 18340\nf 18322 18340 18323\nf 18323 18340 18338\nf 18324 21079 21091\nf 18324 21091 18341\nf 18325 18342 18343\nf 18325 18343 18326\nf 18326 18343 21101\nf 18326 21101 21090\nf 18327 18328 18345\nf 18328 18329 18346\nf 18328 18346 18345\nf 18329 18330 18347\nf 18329 18347 18346\nf 18330 18331 18348\nf 18330 18348 18347\nf 18331 18332 18349\nf 18331 18349 18348\nf 18332 18333 18350\nf 18332 18350 18349\nf 18333 18334 18351\nf 18333 18351 18350\nf 18334 18335 18352\nf 18334 18352 18351\nf 18335 18336 18353\nf 18335 18353 18352\nf 18336 18337 18354\nf 18336 18354 18353\nf 18337 18338 18355\nf 18337 18355 18354\nf 18338 18340 18356\nf 18338 18356 18355\nf 18339 18357 18358\nf 18339 18358 18340\nf 18340 18358 18356\nf 18341 21091 21103\nf 18341 21103 18360\nf 18342 18344 18363\nf 18342 18363 18343\nf 18343 18361 21113\nf 18343 18363 18361\nf 18343 21113 21101\nf 18344 18362 18363\nf 18345 18346 18364\nf 18346 18347 18365\nf 18346 18365 18364\nf 18347 18348 18366\nf 18347 18366 18365\nf 18348 18349 18367\nf 18348 18367 18366\nf 18349 18350 18368\nf 18349 18368 18367\nf 18350 18351 18369\nf 18350 18369 18368\nf 18351 18352 18370\nf 18351 18370 18369\nf 18352 18353 18371\nf 18352 18371 18370\nf 18353 18354 18372\nf 18353 18372 18371\nf 18354 18355 18373\nf 18354 18373 18372\nf 18355 18356 18374\nf 18355 18374 18373\nf 18356 18358 18375\nf 18356 18375 18374\nf 18357 18359 18378\nf 18357 18378 18358\nf 18358 18376 18375\nf 18358 18378 18376\nf 18359 18377 18378\nf 18360 21103 21115\nf 18360 21115 18379\nf 18361 18363 18380\nf 18361 18380 21125\nf 18361 21125 21113\nf 18362 18381 18382\nf 18362 18382 18363\nf 18363 18382 18380\nf 18364 18365 18383\nf 18365 18366 18385\nf 18365 18385 18383\nf 18366 18367 18386\nf 18366 18386 18385\nf 18367 18368 18387\nf 18367 18387 18386\nf 18368 18369 18388\nf 18368 18388 18387\nf 18369 18370 18389\nf 18369 18389 18388\nf 18370 18371 18390\nf 18370 18390 18389\nf 18371 18372 18391\nf 18371 18391 18390\nf 18372 18373 18392\nf 18372 18392 18391\nf 18373 18374 18393\nf 18373 18393 18392\nf 18374 18375 18394\nf 18374 18394 18393\nf 18375 18376 18395\nf 18375 18395 18394\nf 18376 18378 18396\nf 18376 18396 18395\nf 18377 18397 18398\nf 18377 18398 18378\nf 18378 18398 18396\nf 18379 21115 21127\nf 18379 21127 18399\nf 18380 18382 18401\nf 18380 18401 21138\nf 18380 21138 21125\nf 18381 18402 18403\nf 18381 18403 18382\nf 18382 18403 18401\nf 18383 18385 18384\nf 18384 18385 18404\nf 18385 18386 18406\nf 18385 18406 18404\nf 18386 18387 18406\nf 18387 18388 18407\nf 18387 18407 18406\nf 18388 18389 18408\nf 18388 18408 18407\nf 18389 18390 18409\nf 18389 18409 18408\nf 18390 18391 18410\nf 18390 18410 18409\nf 18391 18392 18411\nf 18391 18411 18410\nf 18392 18393 18412\nf 18392 18412 18411\nf 18393 18394 18413\nf 18393 18413 18412\nf 18394 18395 18414\nf 18394 18414 18413\nf 18395 18396 18415\nf 18395 18415 18414\nf 18396 18398 18416\nf 18396 18416 18415\nf 18397 18417 18418\nf 18397 18418 18398\nf 18398 18418 18416\nf 18399 18400 18419\nf 18399 21127 21128\nf 18399 21128 18400\nf 18400 18420 18419\nf 18400 21128 21140\nf 18400 21140 21151\nf 18400 21151 18420\nf 18401 18403 18421\nf 18401 18421 21149\nf 18401 21149 21138\nf 18402 18422 18424\nf 18402 18424 18403\nf 18403 18424 18421\nf 18404 18406 18405\nf 18405 18406 18425\nf 18406 18407 18426\nf 18406 18426 18425\nf 18407 18408 18426\nf 18408 18409 18427\nf 18408 18427 18426\nf 18409 18410 18428\nf 18409 18428 18427\nf 18410 18411 18429\nf 18410 18429 18428\nf 18411 18412 18430\nf 18411 18430 18429\nf 18412 18413 18431\nf 18412 18431 18430\nf 18413 18414 18432\nf 18413 18432 18431\nf 18414 18415 18433\nf 18414 18433 18432\nf 18415 18416 18434\nf 18415 18434 18433\nf 18416 18418 18435\nf 18416 18435 18434\nf 18417 18436 18438\nf 18417 18438 18418\nf 18418 18438 18435\nf 18419 18420 18439\nf 18420 18440 18439\nf 18420 21151 21163\nf 18420 21163 18440\nf 18421 18424 18443\nf 18421 18441 21160\nf 18421 18443 18441\nf 18421 21160 21149\nf 18422 18423 18424\nf 18423 18442 18443\nf 18423 18443 18424\nf 18425 18426 18444\nf 18426 18427 18446\nf 18426 18446 18444\nf 18427 18428 18447\nf 18427 18447 18446\nf 18428 18429 18448\nf 18428 18448 18447\nf 18429 18430 18449\nf 18429 18449 18448\nf 18430 18431 18450\nf 18430 18450 18449\nf 18431 18432 18451\nf 18431 18451 18450\nf 18432 18433 18452\nf 18432 18452 18451\nf 18433 18434 18453\nf 18433 18453 18452\nf 18434 18435 18454\nf 18434 18454 18453\nf 18435 18438 18456\nf 18435 18456 18454\nf 18436 18437 18438\nf 18437 18455 18456\nf 18437 18456 18438\nf 18439 18440 18457\nf 18440 18458 18457\nf 18440 21163 21174\nf 18440 21174 18458\nf 18441 18443 18460\nf 18441 18459 21171\nf 18441 18460 18459\nf 18441 21161 21160\nf 18441 21171 21161\nf 18442 18461 18462\nf 18442 18462 18443\nf 18443 18462 18460\nf 18444 18446 18445\nf 18445 18446 18463\nf 18446 18447 18464\nf 18446 18464 18463\nf 18447 18448 18464\nf 18448 18449 18465\nf 18448 18465 18464\nf 18449 18450 18466\nf 18449 18466 18465\nf 18450 18451 18467\nf 18450 18467 18466\nf 18451 18452 18468\nf 18451 18468 18467\nf 18452 18453 18469\nf 18452 18469 18468\nf 18453 18454 18470\nf 18453 18470 18469\nf 18454 18456 18471\nf 18454 18471 18470\nf 18455 18472 18473\nf 18455 18473 18456\nf 18456 18473 18471\nf 18457 18458 18474\nf 18458 18475 18474\nf 18458 21174 21183\nf 18458 21183 18475\nf 18459 18460 18476\nf 18459 18476 21181\nf 18459 21172 21171\nf 18459 21181 21172\nf 18460 18462 18477\nf 18460 18477 18476\nf 18461 18478 18479\nf 18461 18479 18462\nf 18462 18479 18477\nf 18463 18464 18480\nf 18464 18465 18482\nf 18464 18482 18480\nf 18465 18466 18483\nf 18465 18483 18482\nf 18466 18467 18484\nf 18466 18484 18483\nf 18467 18468 18485\nf 18467 18485 18484\nf 18468 18469 18486\nf 18468 18486 18485\nf 18469 18470 18487\nf 18469 18487 18486\nf 18470 18471 18488\nf 18470 18488 18487\nf 18471 18473 18489\nf 18471 18489 18488\nf 18472 18490 18491\nf 18472 18491 18473\nf 18473 18491 18489\nf 18474 18475 18492\nf 18475 18493 18492\nf 18475 21183 21193\nf 18475 21193 18493\nf 18476 18477 18495\nf 18476 18494 21190\nf 18476 18495 18494\nf 18476 21190 21181\nf 18477 18479 18496\nf 18477 18496 18495\nf 18478 18497 18498\nf 18478 18498 18479\nf 18479 18498 18496\nf 18480 18482 18481\nf 18481 18482 18499\nf 18482 18483 18500\nf 18482 18500 18499\nf 18483 18484 18500\nf 18484 18485 18501\nf 18484 18501 18500\nf 18485 18486 18502\nf 18485 18502 18501\nf 18486 18487 18503\nf 18486 18503 18502\nf 18487 18488 18504\nf 18487 18504 18503\nf 18488 18489 18505\nf 18488 18505 18504\nf 18489 18491 18506\nf 18489 18506 18505\nf 18490 18507 18509\nf 18490 18509 18491\nf 18491 18509 18506\nf 18492 18493 18510\nf 18493 18511 18510\nf 18493 21193 21202\nf 18493 21202 18511\nf 18494 18495 18513\nf 18494 18512 21199\nf 18494 18513 18512\nf 18494 21191 21190\nf 18494 21199 21191\nf 18495 18496 18514\nf 18495 18514 18513\nf 18496 18498 18515\nf 18496 18515 18514\nf 18497 18516 18517\nf 18497 18517 18498\nf 18498 18517 18515\nf 18499 18500 18518\nf 18500 18501 18519\nf 18500 18519 18518\nf 18501 18502 18520\nf 18501 18520 18519\nf 18502 18503 18521\nf 18502 18521 18520\nf 18503 18504 18522\nf 18503 18522 18521\nf 18504 18505 18523\nf 18504 18523 18522\nf 18505 18506 18524\nf 18505 18524 18523\nf 18506 18509 18526\nf 18506 18526 18524\nf 18507 18508 18509\nf 18508 18525 18526\nf 18508 18526 18509\nf 18510 18511 18527\nf 18511 18529 18527\nf 18511 21202 21209\nf 18511 21209 18529\nf 18512 18513 18530\nf 18512 18530 21207\nf 18512 21200 21199\nf 18512 21207 21200\nf 18513 18514 18531\nf 18513 18531 18530\nf 18514 18515 18532\nf 18514 18532 18531\nf 18515 18517 18533\nf 18515 18533 18532\nf 18516 18534 18535\nf 18516 18535 18517\nf 18517 18535 18533\nf 18518 18519 18536\nf 18519 18520 18537\nf 18519 18537 18536\nf 18520 18521 18538\nf 18520 18538 18537\nf 18521 18522 18539\nf 18521 18539 18538\nf 18522 18523 18540\nf 18522 18540 18539\nf 18523 18524 18541\nf 18523 18541 18540\nf 18524 18526 18542\nf 18524 18542 18541\nf 18525 18543 18544\nf 18525 18544 18526\nf 18526 18544 18542\nf 18527 18529 18528\nf 18528 18529 18545\nf 18529 21209 18545\nf 18530 18531 18546\nf 18530 18546 21214\nf 18530 21214 21207\nf 18531 18532 18547\nf 18531 18547 18546\nf 18532 18533 18548\nf 18532 18548 18547\nf 18533 18535 18549\nf 18533 18549 18548\nf 18534 18550 18551\nf 18534 18551 18535\nf 18535 18551 18549\nf 18536 18537 18552\nf 18537 18538 18553\nf 18537 18553 18552\nf 18538 18539 18554\nf 18538 18554 18553\nf 18539 18540 18555\nf 18539 18555 18554\nf 18540 18541 18556\nf 18540 18556 18555\nf 18541 18542 18557\nf 18541 18557 18556\nf 18542 18544 18558\nf 18542 18558 18557\nf 18543 18559 18560\nf 18543 18560 18544\nf 18544 18560 18558\nf 18545 21209 21216\nf 18545 21216 18562\nf 18546 18547 18564\nf 18546 18564 21222\nf 18546 21222 21214\nf 18547 18548 18565\nf 18547 18565 18564\nf 18548 18549 18566\nf 18548 18566 18565\nf 18549 18551 18567\nf 18549 18567 18566\nf 18550 18568 18569\nf 18550 18569 18551\nf 18551 18569 18567\nf 18552 18553 18570\nf 18553 18554 18571\nf 18553 18571 18570\nf 18554 18555 18572\nf 18554 18572 18571\nf 18555 18556 18573\nf 18555 18573 18572\nf 18556 18557 18574\nf 18556 18574 18573\nf 18557 18558 18575\nf 18557 18575 18574\nf 18558 18560 18576\nf 18558 18576 18575\nf 18559 18561 18579\nf 18559 18579 18560\nf 18560 18577 18576\nf 18560 18579 18577\nf 18561 18578 18579\nf 18562 18563 18580\nf 18562 21216 21217\nf 18562 21217 18563\nf 18563 18581 18580\nf 18563 21217 21224\nf 18563 21224 21231\nf 18563 21231 18581\nf 18564 18565 18583\nf 18564 18582 21228\nf 18564 18583 18582\nf 18564 21228 21222\nf 18565 18566 18584\nf 18565 18584 18583\nf 18566 18567 18585\nf 18566 18585 18584\nf 18567 18569 18586\nf 18567 18586 18585\nf 18568 18587 18588\nf 18568 18588 18569\nf 18569 18588 18586\nf 18570 18571 18589\nf 18571 18572 18591\nf 18571 18591 18589\nf 18572 18573 18592\nf 18572 18592 18591\nf 18573 18574 18593\nf 18573 18593 18592\nf 18574 18575 18594\nf 18574 18594 18593\nf 18575 18576 18595\nf 18575 18595 18594\nf 18576 18577 18596\nf 18576 18596 18595\nf 18577 18579 18597\nf 18577 18597 18596\nf 18578 18598 18599\nf 18578 18599 18579\nf 18579 18599 18597\nf 18580 18581 18600\nf 18581 18601 18600\nf 18581 18602 18601\nf 18581 21231 21232\nf 18581 21232 18602\nf 18582 18583 18603\nf 18582 18603 21235\nf 18582 21229 21228\nf 18582 21235 21229\nf 18583 18584 18604\nf 18583 18604 18603\nf 18584 18585 18605\nf 18584 18605 18604\nf 18585 18586 18606\nf 18585 18606 18605\nf 18586 18588 18607\nf 18586 18607 18606\nf 18587 18608 18609\nf 18587 18609 18588\nf 18588 18609 18607\nf 18589 18591 18590\nf 18590 18591 18614\nf 18590 18614 18612\nf 18591 18592 18615\nf 18591 18615 18614\nf 18592 18593 18616\nf 18592 18616 18615\nf 18593 18594 18617\nf 18593 18617 18616\nf 18594 18595 18618\nf 18594 18618 18617\nf 18595 18596 18619\nf 18595 18619 18618\nf 18596 18597 18620\nf 18596 18620 18619\nf 18597 18599 18621\nf 18597 18621 18620\nf 18598 18622 18623\nf 18598 18623 18599\nf 18599 18623 18621\nf 18600 18601 18624\nf 18601 18602 18625\nf 18601 18625 18624\nf 18602 18626 18625\nf 18602 18627 18626\nf 18602 21232 21237\nf 18602 21237 21238\nf 18602 21238 18627\nf 18603 18604 18629\nf 18603 18628 21240\nf 18603 18629 18628\nf 18603 21240 21235\nf 18604 18605 18630\nf 18604 18630 18629\nf 18605 18606 18631\nf 18605 18631 18630\nf 18606 18607 18632\nf 18606 18632 18631\nf 18607 18609 18633\nf 18607 18633 18632\nf 18608 18610 18636\nf 18608 18636 18609\nf 18609 18634 18633\nf 18609 18636 18634\nf 18610 18635 18636\nf 18611 18613 18664\nf 18611 18663 18661\nf 18611 18664 18663\nf 18612 18614 18613\nf 18613 18614 18664\nf 18614 18615 18665\nf 18614 18665 18664\nf 18615 18616 18666\nf 18615 18666 18665\nf 18616 18617 18667\nf 18616 18667 18666\nf 18617 18618 18668\nf 18617 18668 18667\nf 18618 18619 18669\nf 18618 18669 18668\nf 18619 18620 18670\nf 18619 18670 18669\nf 18620 18621 18671\nf 18620 18671 18670\nf 18621 18623 18672\nf 18621 18672 18671\nf 18622 18673 18674\nf 18622 18674 18623\nf 18623 18674 18672\nf 18624 18625 18675\nf 18625 18626 18676\nf 18625 18676 18675\nf 18626 18627 18677\nf 18626 18677 18676\nf 18627 18628 18678\nf 18627 18678 18677\nf 18627 21238 21241\nf 18627 21241 18628\nf 18628 18629 18679\nf 18628 18679 18678\nf 18628 21241 21240\nf 18629 18630 21243\nf 18629 21243 21264\nf 18629 21264 18679\nf 18630 18631 21244\nf 18630 21244 21243\nf 18631 18632 21245\nf 18631 21245 21244\nf 18632 18633 21246\nf 18632 21246 21245\nf 18633 18634 21247\nf 18633 21247 21246\nf 18634 18636 18680\nf 18634 18680 21248\nf 18634 21248 21247\nf 18635 18637 18682\nf 18635 18682 18636\nf 18636 18682 18680\nf 18637 18681 18682\nf 18638 18639 18691\nf 18638 18690 18688\nf 18638 18691 18690\nf 18639 18640 18692\nf 18639 18692 18691\nf 18640 18641 18693\nf 18640 18693 18692\nf 18641 18642 21249\nf 18641 21249 21275\nf 18641 21275 18693\nf 18642 18643 21249\nf 18643 18644 21250\nf 18643 21250 21249\nf 18644 18645 21251\nf 18644 21251 21250\nf 18645 18646 21252\nf 18645 21252 21251\nf 18646 18647 21253\nf 18646 21253 21252\nf 18647 18648 21254\nf 18647 21254 21253\nf 18648 18649 21255\nf 18648 21255 21254\nf 18649 18650 21256\nf 18649 21256 21255\nf 18650 18651 21257\nf 18650 21257 21256\nf 18651 18652 21258\nf 18651 21258 21257\nf 18652 18653 21259\nf 18652 21259 21258\nf 18653 18654 21260\nf 18653 21260 21259\nf 18654 18655 21261\nf 18654 21261 21260\nf 18655 18656 21262\nf 18655 21262 21261\nf 18656 18657 21263\nf 18656 21263 21262\nf 18657 18658 18695\nf 18657 18694 21263\nf 18657 18695 18694\nf 18658 18659 18696\nf 18658 18696 18695\nf 18659 18660 18698\nf 18659 18698 18696\nf 18660 18697 18698\nf 18661 18663 18662\nf 18662 18663 18718\nf 18662 18718 18716\nf 18663 18664 18719\nf 18663 18719 18718\nf 18664 18665 18720\nf 18664 18720 18719\nf 18665 18666 18721\nf 18665 18721 18720\nf 18666 18667 18722\nf 18666 18722 18721\nf 18667 18668 18723\nf 18667 18723 18722\nf 18668 18669 18724\nf 18668 18724 18723\nf 18669 18670 18725\nf 18669 18725 18724\nf 18670 18671 18726\nf 18670 18726 18725\nf 18671 18672 18727\nf 18671 18727 18726\nf 18672 18674 18728\nf 18672 18728 18727\nf 18673 18729 18730\nf 18673 18730 18674\nf 18674 18730 18728\nf 18675 18676 18731\nf 18676 18677 18733\nf 18676 18733 18731\nf 18677 18678 18734\nf 18677 18734 18733\nf 18678 18679 18735\nf 18678 18735 18734\nf 18679 18736 18735\nf 18679 21264 21295\nf 18679 21295 18736\nf 18680 18682 18737\nf 18680 18737 21272\nf 18680 21270 21248\nf 18680 21272 21270\nf 18681 18683 18738\nf 18681 18738 18682\nf 18682 18738 18737\nf 18683 18684 18740\nf 18683 18740 18738\nf 18684 18739 18740\nf 18685 18686 18747\nf 18685 18746 18744\nf 18685 18747 18746\nf 18686 18687 18748\nf 18686 18748 18747\nf 18687 18689 18749\nf 18687 18749 18748\nf 18688 18690 18689\nf 18689 18690 18749\nf 18690 18691 18750\nf 18690 18750 18749\nf 18691 18692 21273\nf 18691 21273 21305\nf 18691 21305 18750\nf 18692 18693 21274\nf 18692 21274 21273\nf 18693 21275 21276\nf 18693 21276 21274\nf 18694 18695 21285\nf 18694 21283 21263\nf 18694 21285 21283\nf 18695 18696 21286\nf 18695 21286 21285\nf 18696 18698 21287\nf 18696 21287 21286\nf 18697 18699 21288\nf 18697 21288 18698\nf 18698 21288 21287\nf 18699 18700 21289\nf 18699 21289 21288\nf 18700 18701 21290\nf 18700 21290 21289\nf 18701 18702 21291\nf 18701 21291 21290\nf 18702 18703 21292\nf 18702 21292 21291\nf 18703 18704 21293\nf 18703 21293 21292\nf 18704 18705 21294\nf 18704 21294 21293\nf 18705 18706 18752\nf 18705 18751 21294\nf 18705 18752 18751\nf 18706 18707 18753\nf 18706 18753 18752\nf 18707 18708 18754\nf 18707 18754 18753\nf 18708 18709 18755\nf 18708 18755 18754\nf 18709 18710 18756\nf 18709 18756 18755\nf 18710 18711 18757\nf 18710 18757 18756\nf 18711 18712 18758\nf 18711 18758 18757\nf 18712 18713 18759\nf 18712 18759 18758\nf 18713 18714 18761\nf 18713 18761 18759\nf 18714 18760 18761\nf 18715 18717 18770\nf 18715 18769 18767\nf 18715 18770 18769\nf 18716 18718 18717\nf 18717 18718 18770\nf 18718 18719 18771\nf 18718 18771 18770\nf 18719 18720 18772\nf 18719 18772 18771\nf 18720 18721 18773\nf 18720 18773 18772\nf 18721 18722 18774\nf 18721 18774 18773\nf 18722 18723 18775\nf 18722 18775 18774\nf 18723 18724 18776\nf 18723 18776 18775\nf 18724 18725 18777\nf 18724 18777 18776\nf 18725 18726 18778\nf 18725 18778 18777\nf 18726 18727 18779\nf 18726 18779 18778\nf 18727 18728 18780\nf 18727 18780 18779\nf 18728 18730 18781\nf 18728 18781 18780\nf 18729 18782 18783\nf 18729 18783 18730\nf 18730 18783 18781\nf 18731 18733 18732\nf 18732 18733 18784\nf 18733 18734 18785\nf 18733 18785 18784\nf 18734 18735 18785\nf 18735 18736 18786\nf 18735 18786 18785\nf 18736 21295 21296\nf 18736 21296 21318\nf 18736 21318 18786\nf 18737 18738 18787\nf 18737 18787 21303\nf 18737 21303 21272\nf 18738 18740 18788\nf 18738 18788 18787\nf 18739 18741 18791\nf 18739 18791 18740\nf 18740 18789 18788\nf 18740 18791 18789\nf 18741 18790 18791\nf 18742 18797 18798\nf 18742 18798 18795\nf 18743 18745 18803\nf 18743 18802 18800\nf 18743 18803 18802\nf 18744 18746 18745\nf 18745 18746 18803\nf 18746 18747 18804\nf 18746 18804 18803\nf 18747 18748 18805\nf 18747 18805 18804\nf 18748 18749 18806\nf 18748 18806 18805\nf 18749 18750 18807\nf 18749 18807 18806\nf 18750 21305 21306\nf 18750 21306 21329\nf 18750 21329 18807\nf 18751 18752 21316\nf 18751 21314 21294\nf 18751 21316 21314\nf 18752 18753 18808\nf 18752 18808 21317\nf 18752 21317 21316\nf 18753 18754 18808\nf 18754 18755 18809\nf 18754 18809 18808\nf 18755 18756 18810\nf 18755 18810 18809\nf 18756 18757 18811\nf 18756 18811 18810\nf 18757 18758 18812\nf 18757 18812 18811\nf 18758 18759 18813\nf 18758 18813 18812\nf 18759 18761 18814\nf 18759 18814 18813\nf 18760 18762 18816\nf 18760 18816 18761\nf 18761 18815 18814\nf 18761 18816 18815\nf 18762 18763 18817\nf 18762 18817 18816\nf 18763 18764 18818\nf 18763 18818 18817\nf 18764 18765 18820\nf 18764 18820 18818\nf 18765 18819 18820\nf 18766 18768 18825\nf 18766 18824 18822\nf 18766 18825 18824\nf 18767 18769 18768\nf 18768 18769 18825\nf 18769 18770 18826\nf 18769 18826 18825\nf 18770 18771 18827\nf 18770 18827 18826\nf 18771 18772 18828\nf 18771 18828 18827\nf 18772 18773 18829\nf 18772 18829 18828\nf 18773 18774 18830\nf 18773 18830 18829\nf 18774 18775 18831\nf 18774 18831 18830\nf 18775 18776 18832\nf 18775 18832 18831\nf 18776 18777 18833\nf 18776 18833 18832\nf 18777 18778 18834\nf 18777 18834 18833\nf 18778 18779 18835\nf 18778 18835 18834\nf 18779 18780 18836\nf 18779 18836 18835\nf 18780 18781 18837\nf 18780 18837 18836\nf 18781 18783 18838\nf 18781 18838 18837\nf 18782 18839 18840\nf 18782 18840 18783\nf 18783 18840 18838\nf 18784 18785 18841\nf 18785 18786 18842\nf 18785 18842 18841\nf 18786 18843 18842\nf 18786 21318 21340\nf 18786 21340 18843\nf 18787 18788 18844\nf 18787 18844 21328\nf 18787 21326 21303\nf 18787 21328 21326\nf 18788 18789 18844\nf 18789 18791 18845\nf 18789 18845 18844\nf 18790 18792 18847\nf 18790 18847 18791\nf 18791 18846 18845\nf 18791 18847 18846\nf 18792 18793 18849\nf 18792 18849 18847\nf 18793 18848 18849\nf 18794 18796 18852\nf 18794 18851 18850\nf 18794 18852 18851\nf 18795 18798 18796\nf 18796 18798 18852\nf 18797 18799 18854\nf 18797 18854 18798\nf 18798 18853 18852\nf 18798 18854 18853\nf 18799 18801 18855\nf 18799 18855 18854\nf 18800 18802 18801\nf 18801 18802 18855\nf 18802 18803 18856\nf 18802 18856 18855\nf 18803 18804 18857\nf 18803 18857 18856\nf 18804 18805 18858\nf 18804 18858 18857\nf 18805 18806 18859\nf 18805 18859 18858\nf 18806 18807 18860\nf 18806 18860 18859\nf 18807 18861 18860\nf 18807 21329 21352\nf 18807 21352 18861\nf 18808 18809 18862\nf 18808 18862 21339\nf 18808 21337 21317\nf 18808 21339 21337\nf 18809 18810 18862\nf 18810 18811 18863\nf 18810 18863 18862\nf 18811 18812 18864\nf 18811 18864 18863\nf 18812 18813 18865\nf 18812 18865 18864\nf 18813 18814 18866\nf 18813 18866 18865\nf 18814 18815 18867\nf 18814 18867 18866\nf 18815 18816 18868\nf 18815 18868 18867\nf 18816 18817 18869\nf 18816 18869 18868\nf 18817 18818 18870\nf 18817 18870 18869\nf 18818 18820 18871\nf 18818 18871 18870\nf 18819 18821 18874\nf 18819 18874 18820\nf 18820 18872 18871\nf 18820 18874 18872\nf 18821 18873 18874\nf 18822 18824 18823\nf 18823 18824 18876\nf 18823 18876 18875\nf 18824 18825 18877\nf 18824 18877 18876\nf 18825 18826 18878\nf 18825 18878 18877\nf 18826 18827 18879\nf 18826 18879 18878\nf 18827 18828 18880\nf 18827 18880 18879\nf 18828 18829 18881\nf 18828 18881 18880\nf 18829 18830 18882\nf 18829 18882 18881\nf 18830 18831 18883\nf 18830 18883 18882\nf 18831 18832 18884\nf 18831 18884 18883\nf 18832 18833 18885\nf 18832 18885 18884\nf 18833 18834 18886\nf 18833 18886 18885\nf 18834 18835 18887\nf 18834 18887 18886\nf 18835 18836 18888\nf 18835 18888 18887\nf 18836 18837 18889\nf 18836 18889 18888\nf 18837 18838 18890\nf 18837 18890 18889\nf 18838 18840 18891\nf 18838 18891 18890\nf 18839 18892 18893\nf 18839 18893 18840\nf 18840 18893 18891\nf 18841 18842 18894\nf 18842 18843 18896\nf 18842 18896 18894\nf 18843 18897 18896\nf 18843 21340 21363\nf 18843 21363 18897\nf 18844 18845 18899\nf 18844 18898 21349\nf 18844 18899 18898\nf 18844 21349 21328\nf 18845 18846 18900\nf 18845 18900 18899\nf 18846 18847 18901\nf 18846 18901 18900\nf 18847 18849 18902\nf 18847 18902 18901\nf 18848 18903 18905\nf 18848 18905 18849\nf 18849 18905 18902\nf 18850 18851 18906\nf 18851 18852 18908\nf 18851 18908 18906\nf 18852 18853 18910\nf 18852 18910 18908\nf 18853 18854 18912\nf 18853 18912 18910\nf 18854 18855 18914\nf 18854 18914 18912\nf 18855 18856 18916\nf 18855 18916 18914\nf 18856 18857 18918\nf 18856 18918 18916\nf 18857 18858 18919\nf 18857 18919 18918\nf 18858 18859 18920\nf 18858 18920 18919\nf 18859 18860 18921\nf 18859 18921 18920\nf 18860 18861 18922\nf 18860 18922 18921\nf 18861 18923 18922\nf 18861 21352 21374\nf 18861 21374 18923\nf 18862 18863 18924\nf 18862 18924 21362\nf 18862 21360 21339\nf 18862 21362 21360\nf 18863 18864 18924\nf 18864 18865 18925\nf 18864 18925 18924\nf 18865 18866 18926\nf 18865 18926 18925\nf 18866 18867 18927\nf 18866 18927 18926\nf 18867 18868 18928\nf 18867 18928 18927\nf 18868 18869 18929\nf 18868 18929 18928\nf 18869 18870 18930\nf 18869 18930 18929\nf 18870 18871 18931\nf 18870 18931 18930\nf 18871 18872 18933\nf 18871 18933 18931\nf 18872 18874 18935\nf 18872 18935 18933\nf 18873 18936 18938\nf 18873 18938 18874\nf 18874 18938 18935\nf 18875 18876 18939\nf 18876 18877 18941\nf 18876 18941 18939\nf 18877 18878 18943\nf 18877 18943 18941\nf 18878 18879 18944\nf 18878 18944 18943\nf 18879 18880 18945\nf 18879 18945 18944\nf 18880 18881 18946\nf 18880 18946 18945\nf 18881 18882 18947\nf 18881 18947 18946\nf 18882 18883 18948\nf 18882 18948 18947\nf 18883 18884 18949\nf 18883 18949 18948\nf 18884 18885 18950\nf 18884 18950 18949\nf 18885 18886 18951\nf 18885 18951 18950\nf 18886 18887 18952\nf 18886 18952 18951\nf 18887 18888 18953\nf 18887 18953 18952\nf 18888 18889 18954\nf 18888 18954 18953\nf 18889 18890 18955\nf 18889 18955 18954\nf 18890 18891 18956\nf 18890 18956 18955\nf 18891 18893 18957\nf 18891 18957 18956\nf 18892 18958 18959\nf 18892 18959 18893\nf 18893 18959 18957\nf 18894 18896 18895\nf 18895 18896 18961\nf 18895 18961 18960\nf 18896 18897 18962\nf 18896 18962 18961\nf 18897 21363 21364\nf 18897 21364 21387\nf 18897 21387 18962\nf 18898 18899 18964\nf 18898 18964 21372\nf 18898 21350 21349\nf 18898 21372 21350\nf 18899 18900 18966\nf 18899 18966 18964\nf 18900 18901 18968\nf 18900 18968 18966\nf 18901 18902 18970\nf 18901 18970 18968\nf 18902 18905 18973\nf 18902 18973 18970\nf 18903 18904 18905\nf 18904 18971 18973\nf 18904 18973 18905\nf 18906 18908 18907\nf 18907 18908 18909\nf 18908 18910 18909\nf 18909 18910 18911\nf 18910 18912 18911\nf 18911 18912 18913\nf 18912 18914 18913\nf 18913 18914 18915\nf 18914 18916 18915\nf 18915 18916 18917\nf 18916 18918 18917\nf 18917 18918 18974\nf 18918 18919 18976\nf 18918 18976 18974\nf 18919 18920 18976\nf 18920 18921 18978\nf 18920 18978 18976\nf 18921 18922 18980\nf 18921 18980 18978\nf 18922 18923 18982\nf 18922 18982 18980\nf 18923 18983 18982\nf 18923 18984 18983\nf 18923 21374 21375\nf 18923 21375 18984\nf 18924 18925 18985\nf 18924 18985 21386\nf 18924 21384 21362\nf 18924 21386 21384\nf 18925 18926 18985\nf 18926 18927 18986\nf 18926 18986 18985\nf 18927 18928 18988\nf 18927 18988 18986\nf 18928 18929 18990\nf 18928 18990 18988\nf 18929 18930 18992\nf 18929 18992 18990\nf 18930 18931 18994\nf 18930 18994 18992\nf 18931 18933 18997\nf 18931 18997 18994\nf 18932 18933 18934\nf 18932 18995 18997\nf 18932 18997 18933\nf 18933 18935 18934\nf 18934 18935 18937\nf 18935 18938 18937\nf 18936 18937 18938\nf 18939 18941 18940\nf 18940 18941 18942\nf 18941 18943 18942\nf 18942 18943 18998\nf 18943 18944 19000\nf 18943 19000 18998\nf 18944 18945 19000\nf 18945 18946 19002\nf 18945 19002 19000\nf 18946 18947 19003\nf 18946 19003 19002\nf 18947 18948 19004\nf 18947 19004 19003\nf 18948 18949 19005\nf 18948 19005 19004\nf 18949 18950 19006\nf 18949 19006 19005\nf 18950 18951 19007\nf 18950 19007 19006\nf 18951 18952 19008\nf 18951 19008 19007\nf 18952 18953 19009\nf 18952 19009 19008\nf 18953 18954 19010\nf 18953 19010 19009\nf 18954 18955 19011\nf 18954 19011 19010\nf 18955 18956 19012\nf 18955 19012 19011\nf 18956 18957 19013\nf 18956 19013 19012\nf 18957 18959 19014\nf 18957 19014 19013\nf 18958 19015 19016\nf 18958 19016 18959\nf 18959 19016 19014\nf 18960 18961 19017\nf 18961 18962 19018\nf 18961 19018 19017\nf 18962 19019 19018\nf 18962 19020 19019\nf 18962 21387 21388\nf 18962 21388 19020\nf 18963 18964 18965\nf 18963 19026 19028\nf 18963 19028 21403\nf 18963 21403 18964\nf 18964 18966 18965\nf 18964 21402 21372\nf 18964 21403 21402\nf 18965 18966 18967\nf 18966 18968 18967\nf 18967 18968 18969\nf 18968 18970 18969\nf 18969 18970 18972\nf 18970 18973 18972\nf 18971 18972 18973\nf 18974 18976 18975\nf 18975 18976 18977\nf 18976 18978 18977\nf 18977 18978 18979\nf 18978 18980 18979\nf 18979 18980 18981\nf 18980 18982 18981\nf 18981 18982 19029\nf 18982 18983 19031\nf 18982 19031 19029\nf 18983 18984 19031\nf 18984 19033 19031\nf 18984 19035 19033\nf 18984 21375 21405\nf 18984 21405 21406\nf 18984 21406 19035\nf 18985 18986 19043\nf 18985 19041 21418\nf 18985 19043 19041\nf 18985 21418 21386\nf 18986 18988 19046\nf 18986 19046 19043\nf 18987 18988 18989\nf 18987 19044 19046\nf 18987 19046 18988\nf 18988 18990 18989\nf 18989 18990 18991\nf 18990 18992 18991\nf 18991 18992 18993\nf 18992 18994 18993\nf 18993 18994 18996\nf 18994 18997 18996\nf 18995 18996 18997\nf 18998 19000 18999\nf 18999 19000 19001\nf 19000 19002 19001\nf 19001 19002 19047\nf 19002 19003 19049\nf 19002 19049 19047\nf 19003 19004 19049\nf 19004 19005 19051\nf 19004 19051 19049\nf 19005 19006 19052\nf 19005 19052 19051\nf 19006 19007 19053\nf 19006 19053 19052\nf 19007 19008 19054\nf 19007 19054 19053\nf 19008 19009 19055\nf 19008 19055 19054\nf 19009 19010 19056\nf 19009 19056 19055\nf 19010 19011 19057\nf 19010 19057 19056\nf 19011 19012 19058\nf 19011 19058 19057\nf 19012 19013 19059\nf 19012 19059 19058\nf 19013 19014 19060\nf 19013 19060 19059\nf 19014 19016 19061\nf 19014 19061 19060\nf 19015 19062 19063\nf 19015 19063 19016\nf 19016 19063 19061\nf 19017 19018 19064\nf 19018 19019 19065\nf 19018 19065 19064\nf 19019 19020 19066\nf 19019 19066 19065\nf 19020 19021 19067\nf 19020 19067 19066\nf 19020 21388 21390\nf 19020 21390 19021\nf 19021 19022 19068\nf 19021 19068 19067\nf 19021 21390 21392\nf 19021 21392 19022\nf 19022 19069 19068\nf 19022 19070 19069\nf 19022 21392 21421\nf 19022 21421 21422\nf 19022 21422 19070\nf 19023 19024 19072\nf 19023 19071 21424\nf 19023 19072 19071\nf 19023 21396 21398\nf 19023 21398 19024\nf 19023 21424 21396\nf 19024 19025 19073\nf 19024 19073 19072\nf 19024 21398 21400\nf 19024 21400 19025\nf 19025 19028 19076\nf 19025 19076 19073\nf 19025 21400 21403\nf 19025 21403 19028\nf 19026 19027 19028\nf 19027 19074 19076\nf 19027 19076 19028\nf 19029 19031 19030\nf 19030 19031 19032\nf 19031 19033 19032\nf 19032 19033 19034\nf 19033 19035 19034\nf 19034 19035 19077\nf 19035 19036 19079\nf 19035 19079 19077\nf 19035 21406 21408\nf 19035 21408 19036\nf 19036 19037 19079\nf 19036 21408 21410\nf 19036 21410 19037\nf 19037 19081 19079\nf 19037 19083 19081\nf 19037 21410 21427\nf 19037 21427 21428\nf 19037 21428 19083\nf 19038 19039 19093\nf 19038 19091 21437\nf 19038 19093 19091\nf 19038 21414 21416\nf 19038 21416 19039\nf 19038 21437 21414\nf 19039 19041 19096\nf 19039 19096 19093\nf 19039 21416 21419\nf 19039 21419 19041\nf 19040 19041 19042\nf 19040 19094 19096\nf 19040 19096 19041\nf 19041 19043 19042\nf 19041 21419 21418\nf 19042 19043 19045\nf 19043 19046 19045\nf 19044 19045 19046\nf 19047 19049 19048\nf 19048 19049 19050\nf 19049 19051 19050\nf 19050 19051 19097\nf 19051 19052 19099\nf 19051 19099 19097\nf 19052 19053 19099\nf 19053 19054 19100\nf 19053 19100 19099\nf 19054 19055 19101\nf 19054 19101 19100\nf 19055 19056 19102\nf 19055 19102 19101\nf 19056 19057 19103\nf 19056 19103 19102\nf 19057 19058 19104\nf 19057 19104 19103\nf 19058 19059 19105\nf 19058 19105 19104\nf 19059 19060 19106\nf 19059 19106 19105\nf 19060 19061 19107\nf 19060 19107 19106\nf 19061 19063 19108\nf 19061 19108 19107\nf 19062 19109 19110\nf 19062 19110 19063\nf 19063 19110 19108\nf 19064 19065 19111\nf 19065 19066 19112\nf 19065 19112 19111\nf 19066 19067 19113\nf 19066 19113 19112\nf 19067 19068 19114\nf 19067 19114 19113\nf 19068 19069 19115\nf 19068 19115 19114\nf 19069 19070 19116\nf 19069 19116 19115\nf 19070 19071 19117\nf 19070 19117 19116\nf 19070 21422 21425\nf 19070 21425 19071\nf 19071 19072 19118\nf 19071 19118 19117\nf 19071 21425 21424\nf 19072 19073 19119\nf 19072 19119 19118\nf 19073 19076 19121\nf 19073 19121 19119\nf 19074 19075 19076\nf 19075 19120 19121\nf 19075 19121 19076\nf 19077 19079 19078\nf 19078 19079 19080\nf 19079 19081 19080\nf 19080 19081 19082\nf 19081 19083 19082\nf 19082 19083 19084\nf 19083 19085 19084\nf 19083 21428 21430\nf 19083 21430 19085\nf 19084 19085 19086\nf 19085 19087 19086\nf 19085 21430 21432\nf 19085 21432 19087\nf 19086 19087 19088\nf 19087 19089 19088\nf 19087 21432 21434\nf 19087 21434 19089\nf 19088 19089 21441\nf 19088 21441 19090\nf 19089 21434 21440\nf 19089 21440 21441\nf 19090 21441 21443\nf 19090 21443 19122\nf 19091 19093 19138\nf 19091 19135 21453\nf 19091 19138 19135\nf 19091 21438 21437\nf 19091 21453 21438\nf 19092 19093 19095\nf 19092 19136 19138\nf 19092 19138 19093\nf 19093 19096 19095\nf 19094 19095 19096\nf 19097 19099 19098\nf 19098 19099 19139\nf 19099 19100 19141\nf 19099 19141 19139\nf 19100 19101 19141\nf 19101 19102 19142\nf 19101 19142 19141\nf 19102 19103 19143\nf 19102 19143 19142\nf 19103 19104 19144\nf 19103 19144 19143\nf 19104 19105 19145\nf 19104 19145 19144\nf 19105 19106 19146\nf 19105 19146 19145\nf 19106 19107 19147\nf 19106 19147 19146\nf 19107 19108 19148\nf 19107 19148 19147\nf 19108 19110 19149\nf 19108 19149 19148\nf 19109 19150 19151\nf 19109 19151 19110\nf 19110 19151 19149\nf 19111 19112 19152\nf 19112 19113 19153\nf 19112 19153 19152\nf 19113 19114 19154\nf 19113 19154 21456\nf 19113 21456 21472\nf 19113 21472 19153\nf 19114 19115 19154\nf 19115 19116 19155\nf 19115 19155 19154\nf 19116 19117 19156\nf 19116 19156 19155\nf 19117 19118 19157\nf 19117 19157 19156\nf 19118 19119 19158\nf 19118 19158 19157\nf 19119 19121 19159\nf 19119 19159 19158\nf 19120 19160 19162\nf 19120 19162 19121\nf 19121 19162 19159\nf 19122 19124 19123\nf 19122 21443 19124\nf 19123 19124 19125\nf 19124 19126 19125\nf 19124 21443 21445\nf 19124 21445 19126\nf 19125 19126 19127\nf 19126 19128 19127\nf 19126 21445 21447\nf 19126 21447 19128\nf 19127 19128 19129\nf 19128 19130 19129\nf 19128 21447 21449\nf 19128 21449 19130\nf 19129 19130 19131\nf 19130 19132 19131\nf 19130 21449 21451\nf 19130 21451 19132\nf 19131 19132 21458\nf 19131 21458 19133\nf 19132 21451 21457\nf 19132 21457 21458\nf 19133 21458 21460\nf 19133 21460 19134\nf 19134 21460 21462\nf 19134 21462 19163\nf 19135 19138 19179\nf 19135 19176 21469\nf 19135 19179 19176\nf 19135 21454 21453\nf 19135 21469 21454\nf 19136 19137 19138\nf 19137 19177 19179\nf 19137 19179 19138\nf 19139 19141 19140\nf 19140 19141 19180\nf 19141 19142 19182\nf 19141 19182 19180\nf 19142 19143 19182\nf 19143 19144 19183\nf 19143 19183 19182\nf 19144 19145 19184\nf 19144 19184 19183\nf 19145 19146 19185\nf 19145 19185 19184\nf 19146 19147 19186\nf 19146 19186 19185\nf 19147 19148 19187\nf 19147 19187 19186\nf 19148 19149 19188\nf 19148 19188 19187\nf 19149 19151 19189\nf 19149 19189 19188\nf 19150 19190 19191\nf 19150 19191 19151\nf 19151 19191 19189\nf 19152 19153 19192\nf 19153 19193 19192\nf 19153 21472 21491\nf 19153 21491 19193\nf 19154 19155 19194\nf 19154 19194 21473\nf 19154 21473 21456\nf 19155 19156 19195\nf 19155 19195 19194\nf 19156 19157 19196\nf 19156 19196 19195\nf 19157 19158 19197\nf 19157 19197 19196\nf 19158 19159 19198\nf 19158 19198 19197\nf 19159 19162 19200\nf 19159 19200 19198\nf 19160 19161 19162\nf 19161 19199 19200\nf 19161 19200 19162\nf 19163 19165 19164\nf 19163 21462 19165\nf 19164 19165 19166\nf 19165 19167 19166\nf 19165 21462 21463\nf 19165 21463 19167\nf 19166 19167 19168\nf 19167 19169 19168\nf 19167 21463 21464\nf 19167 21464 19169\nf 19168 19169 21476\nf 19168 21476 19170\nf 19169 21464 21475\nf 19169 21475 21476\nf 19170 21476 21478\nf 19170 21478 19171\nf 19171 21478 21480\nf 19171 21480 19201\nf 19172 19174 19214\nf 19172 19211 21488\nf 19172 19214 19211\nf 19172 21465 21467\nf 19172 21467 19174\nf 19172 21488 21465\nf 19173 19174 19175\nf 19173 19212 19214\nf 19173 19214 19174\nf 19174 19176 19175\nf 19174 21467 21470\nf 19174 21470 19176\nf 19175 19176 19178\nf 19176 19179 19178\nf 19176 21470 21469\nf 19177 19178 19179\nf 19180 19182 19181\nf 19181 19182 19215\nf 19182 19183 19216\nf 19182 19216 19215\nf 19183 19184 19216\nf 19184 19185 19217\nf 19184 19217 19216\nf 19185 19186 19218\nf 19185 19218 19217\nf 19186 19187 19219\nf 19186 19219 19218\nf 19187 19188 19220\nf 19187 19220 19219\nf 19188 19189 19221\nf 19188 19221 19220\nf 19189 19191 19222\nf 19189 19222 19221\nf 19190 19223 19224\nf 19190 19224 19191\nf 19191 19224 19222\nf 19192 19193 19225\nf 19193 19226 19225\nf 19193 21491 21494\nf 19193 21494 19226\nf 19194 19195 19227\nf 19194 19227 21492\nf 19194 21492 21473\nf 19195 19196 19228\nf 19195 19228 19227\nf 19196 19197 19229\nf 19196 19229 19228\nf 19197 19198 19230\nf 19197 19230 19229\nf 19198 19200 19231\nf 19198 19231 19230\nf 19199 19232 19233\nf 19199 19233 19200\nf 19200 19233 19231\nf 19201 19203 19202\nf 19201 21480 19203\nf 19202 19203 19204\nf 19203 19205 19204\nf 19203 21480 21482\nf 19203 21482 19205\nf 19204 19205 19206\nf 19205 19207 19206\nf 19205 21482 21484\nf 19205 21484 19207\nf 19206 19207 19208\nf 19207 19209 19208\nf 19207 21484 21486\nf 19207 21486 19209\nf 19208 19209 19210\nf 19209 19211 19210\nf 19209 21486 21489\nf 19209 21489 19211\nf 19210 19211 19213\nf 19211 19214 19213\nf 19211 21489 21488\nf 19212 19213 19214\nf 19215 19216 19235\nf 19216 19217 19237\nf 19216 19237 19235\nf 19217 19218 19238\nf 19217 19238 19237\nf 19218 19219 19239\nf 19218 19239 19238\nf 19219 19220 19240\nf 19219 19240 19239\nf 19220 19221 19241\nf 19220 19241 19240\nf 19221 19222 19242\nf 19221 19242 19241\nf 19222 19224 19243\nf 19222 19243 19242\nf 19223 19244 19245\nf 19223 19245 19224\nf 19224 19245 19243\nf 19225 19226 19246\nf 19226 19247 19246\nf 19226 21494 21497\nf 19226 21497 19247\nf 19227 19228 19248\nf 19227 19248 21495\nf 19227 21495 21492\nf 19228 19229 19249\nf 19228 19249 19248\nf 19229 19230 19250\nf 19229 19250 19249\nf 19230 19231 19251\nf 19230 19251 19250\nf 19231 19233 19252\nf 19231 19252 19251\nf 19232 19234 19255\nf 19232 19255 19233\nf 19233 19253 19252\nf 19233 19255 19253\nf 19234 19254 19255\nf 19235 19237 19236\nf 19236 19237 19258\nf 19236 19258 19256\nf 19237 19238 19259\nf 19237 19259 19258\nf 19238 19239 19260\nf 19238 19260 19259\nf 19239 19240 19261\nf 19239 19261 19260\nf 19240 19241 19262\nf 19240 19262 19261\nf 19241 19242 19263\nf 19241 19263 19262\nf 19242 19243 19264\nf 19242 19264 19263\nf 19243 19245 19265\nf 19243 19265 19264\nf 19244 19266 19267\nf 19244 19267 19245\nf 19245 19267 19265\nf 19246 19247 19268\nf 19247 19269 19268\nf 19247 19270 19269\nf 19247 21497 21499\nf 19247 21499 19270\nf 19248 19249 19271\nf 19248 19270 21498\nf 19248 19271 19270\nf 19248 21498 21495\nf 19249 19250 19272\nf 19249 19272 19271\nf 19250 19251 19273\nf 19250 19273 19272\nf 19251 19252 19274\nf 19251 19274 19273\nf 19252 19253 19275\nf 19252 19275 19274\nf 19253 19255 19276\nf 19253 19276 19275\nf 19254 19277 19278\nf 19254 19278 19255\nf 19255 19278 19276\nf 19256 19258 19257\nf 19257 19258 19280\nf 19257 19280 19279\nf 19258 19259 19281\nf 19258 19281 19280\nf 19259 19260 19282\nf 19259 19282 19281\nf 19260 19261 19283\nf 19260 19283 19282\nf 19261 19262 19284\nf 19261 19284 19283\nf 19262 19263 19285\nf 19262 19285 19284\nf 19263 19264 19286\nf 19263 19286 19285\nf 19264 19265 19287\nf 19264 19287 19286\nf 19265 19267 19288\nf 19265 19288 19287\nf 19266 19289 19290\nf 19266 19290 19267\nf 19267 19290 19288\nf 19268 19269 19291\nf 19269 19270 19292\nf 19269 19292 19291\nf 19270 19271 19293\nf 19270 19293 19292\nf 19270 21499 21498\nf 19271 19272 19294\nf 19271 19294 19293\nf 19272 19273 19295\nf 19272 19295 19294\nf 19273 19274 19296\nf 19273 19296 19295\nf 19274 19275 19297\nf 19274 19297 19296\nf 19275 19276 19298\nf 19275 19298 19297\nf 19276 19278 19299\nf 19276 19299 19298\nf 19277 19300 19301\nf 19277 19301 19278\nf 19278 19301 19299\nf 19279 19280 19302\nf 19280 19281 19303\nf 19280 19303 19302\nf 19281 19282 19304\nf 19281 19304 19303\nf 19282 19283 19305\nf 19282 19305 19304\nf 19283 19284 19306\nf 19283 19306 19305\nf 19284 19285 19307\nf 19284 19307 19306\nf 19285 19286 19308\nf 19285 19308 19307\nf 19286 19287 19309\nf 19286 19309 19308\nf 19287 19288 19310\nf 19287 19310 19309\nf 19288 19290 19311\nf 19288 19311 19310\nf 19289 19312 19314\nf 19289 19314 19290\nf 19290 19314 19311\nf 19291 19292 19315\nf 19292 19293 19316\nf 19292 19316 19315\nf 19293 19294 19317\nf 19293 19317 19316\nf 19294 19295 19318\nf 19294 19318 19317\nf 19295 19296 19319\nf 19295 19319 19318\nf 19296 19297 19320\nf 19296 19320 19319\nf 19297 19298 19321\nf 19297 19321 19320\nf 19298 19299 19322\nf 19298 19322 19321\nf 19299 19301 19323\nf 19299 19323 19322\nf 19300 19324 19325\nf 19300 19325 19301\nf 19301 19325 19323\nf 19302 19303 19326\nf 19303 19304 19327\nf 19303 19327 19326\nf 19304 19305 19328\nf 19304 19328 19327\nf 19305 19306 19329\nf 19305 19329 19328\nf 19306 19307 19330\nf 19306 19330 19329\nf 19307 19308 19331\nf 19307 19331 19330\nf 19308 19309 19332\nf 19308 19332 19331\nf 19309 19310 19333\nf 19309 19333 19332\nf 19310 19311 19334\nf 19310 19334 19333\nf 19311 19314 19336\nf 19311 19336 19334\nf 19312 19313 19314\nf 19313 19335 19336\nf 19313 19336 19314\nf 19315 19316 19337\nf 19316 19317 19338\nf 19316 19338 19337\nf 19317 19318 19339\nf 19317 19339 19338\nf 19318 19319 19340\nf 19318 19340 19339\nf 19319 19320 19341\nf 19319 19341 19340\nf 19320 19321 19342\nf 19320 19342 19341\nf 19321 19322 19343\nf 19321 19343 19342\nf 19322 19323 19344\nf 19322 19344 19343\nf 19323 19325 19345\nf 19323 19345 19344\nf 19324 19346 19347\nf 19324 19347 19325\nf 19325 19347 19345\nf 19326 19327 19348\nf 19327 19328 19349\nf 19327 19349 19348\nf 19328 19329 19350\nf 19328 19350 19349\nf 19329 19330 19351\nf 19329 19351 19350\nf 19330 19331 19352\nf 19330 19352 19351\nf 19331 19332 19353\nf 19331 19353 19352\nf 19332 19333 19354\nf 19332 19354 19353\nf 19333 19334 19355\nf 19333 19355 19354\nf 19334 19336 19356\nf 19334 19356 19355\nf 19335 19357 19358\nf 19335 19358 19336\nf 19336 19358 19356\nf 19337 19338 19359\nf 19338 19339 19360\nf 19338 19360 19359\nf 19339 19340 19361\nf 19339 19361 19360\nf 19340 19341 19362\nf 19340 19362 19361\nf 19341 19342 19363\nf 19341 19363 19362\nf 19342 19343 19364\nf 19342 19364 19363\nf 19343 19344 19365\nf 19343 19365 19364\nf 19344 19345 19366\nf 19344 19366 19365\nf 19345 19347 19367\nf 19345 19367 19366\nf 19346 19368 19369\nf 19346 19369 19347\nf 19347 19369 19367\nf 19348 19349 19371\nf 19349 19350 19373\nf 19349 19373 19371\nf 19350 19351 19374\nf 19350 19374 19373\nf 19351 19352 19375\nf 19351 19375 19374\nf 19352 19353 19376\nf 19352 19376 19375\nf 19353 19354 19377\nf 19353 19377 19376\nf 19354 19355 19378\nf 19354 19378 19377\nf 19355 19356 19379\nf 19355 19379 19378\nf 19356 19358 19380\nf 19356 19380 19379\nf 19357 19381 19382\nf 19357 19382 19358\nf 19358 19382 19380\nf 19359 19360 19383\nf 19360 19361 19385\nf 19360 19385 19383\nf 19361 19362 19386\nf 19361 19386 19385\nf 19362 19363 19387\nf 19362 19387 19386\nf 19363 19364 19388\nf 19363 19388 19387\nf 19364 19365 19389\nf 19364 19389 19388\nf 19365 19366 19390\nf 19365 19390 19389\nf 19366 19367 19391\nf 19366 19391 19390\nf 19367 19369 19392\nf 19367 19392 19391\nf 19368 19370 19395\nf 19368 19395 19369\nf 19369 19393 19392\nf 19369 19395 19393\nf 19370 19394 19395\nf 19371 19373 19372\nf 19372 19373 19397\nf 19372 19397 19396\nf 19373 19374 19398\nf 19373 19398 19397\nf 19374 19375 19399\nf 19374 19399 19398\nf 19375 19376 19400\nf 19375 19400 19399\nf 19376 19377 19401\nf 19376 19401 19400\nf 19377 19378 19402\nf 19377 19402 19401\nf 19378 19379 19403\nf 19378 19403 19402\nf 19379 19380 19404\nf 19379 19404 19403\nf 19380 19382 19405\nf 19380 19405 19404\nf 19381 19406 19407\nf 19381 19407 19382\nf 19382 19407 19405\nf 19383 19385 19384\nf 19384 19385 19408\nf 19385 19386 19409\nf 19385 19409 19408\nf 19386 19387 19409\nf 19387 19388 19410\nf 19387 19410 19409\nf 19388 19389 19411\nf 19388 19411 19410\nf 19389 19390 19412\nf 19389 19412 19411\nf 19390 19391 19413\nf 19390 19413 19412\nf 19391 19392 19414\nf 19391 19414 19413\nf 19392 19393 19415\nf 19392 19415 19414\nf 19393 19395 19416\nf 19393 19416 19415\nf 19394 19417 19418\nf 19394 19418 19395\nf 19395 19418 19416\nf 19396 19397 19419\nf 19397 19398 19420\nf 19397 19420 19419\nf 19398 19399 19421\nf 19398 19421 19420\nf 19399 19400 19422\nf 19399 19422 19421\nf 19400 19401 19423\nf 19400 19423 19422\nf 19401 19402 19424\nf 19401 19424 19423\nf 19402 19403 19425\nf 19402 19425 19424\nf 19403 19404 19426\nf 19403 19426 19425\nf 19404 19405 19427\nf 19404 19427 19426\nf 19405 19407 19428\nf 19405 19428 19427\nf 19406 19429 19430\nf 19406 19430 19407\nf 19407 19430 19428\nf 19408 19409 19432\nf 19409 19410 19433\nf 19409 19433 19432\nf 19410 19411 19434\nf 19410 19434 19433\nf 19411 19412 19435\nf 19411 19435 19434\nf 19412 19413 19436\nf 19412 19436 19435\nf 19413 19414 19437\nf 19413 19437 19436\nf 19414 19415 19438\nf 19414 19438 19437\nf 19415 19416 19439\nf 19415 19439 19438\nf 19416 19418 19440\nf 19416 19440 19439\nf 19417 19441 19442\nf 19417 19442 19418\nf 19418 19442 19440\nf 19419 19420 19444\nf 19420 19421 19445\nf 19420 19445 19444\nf 19421 19422 19446\nf 19421 19446 19445\nf 19422 19423 19447\nf 19422 19447 19446\nf 19423 19424 19448\nf 19423 19448 19447\nf 19424 19425 19449\nf 19424 19449 19448\nf 19425 19426 19450\nf 19425 19450 19449\nf 19426 19427 19451\nf 19426 19451 19450\nf 19427 19428 19452\nf 19427 19452 19451\nf 19428 19430 19453\nf 19428 19453 19452\nf 19429 19431 19456\nf 19429 19456 19430\nf 19430 19454 19453\nf 19430 19456 19454\nf 19431 19455 19456\nf 19432 19433 19457\nf 19433 19434 19458\nf 19433 19458 19457\nf 19434 19435 19459\nf 19434 19459 19458\nf 19435 19436 19460\nf 19435 19460 19459\nf 19436 19437 19461\nf 19436 19461 19460\nf 19437 19438 19462\nf 19437 19462 19461\nf 19438 19439 19463\nf 19438 19463 19462\nf 19439 19440 19464\nf 19439 19464 19463\nf 19440 19442 19465\nf 19440 19465 19464\nf 19441 19443 19468\nf 19441 19468 19442\nf 19442 19466 19465\nf 19442 19468 19466\nf 19443 19467 19468\nf 19444 19445 19469\nf 19445 19446 19471\nf 19445 19471 19469\nf 19446 19447 19472\nf 19446 19472 19471\nf 19447 19448 19473\nf 19447 19473 19472\nf 19448 19449 19474\nf 19448 19474 19473\nf 19449 19450 19475\nf 19449 19475 19474\nf 19450 19451 19476\nf 19450 19476 19475\nf 19451 19452 19477\nf 19451 19477 19476\nf 19452 19453 19478\nf 19452 19478 19477\nf 19453 19454 19479\nf 19453 19479 19478\nf 19454 19456 19480\nf 19454 19480 19479\nf 19455 19481 19482\nf 19455 19482 19456\nf 19456 19482 19480\nf 19457 19458 19483\nf 19458 19459 19484\nf 19458 19484 19483\nf 19459 19460 19485\nf 19459 19485 19484\nf 19460 19461 19486\nf 19460 19486 19485\nf 19461 19462 19487\nf 19461 19487 19486\nf 19462 19463 19488\nf 19462 19488 19487\nf 19463 19464 19489\nf 19463 19489 19488\nf 19464 19465 19490\nf 19464 19490 19489\nf 19465 19466 19491\nf 19465 19491 19490\nf 19466 19468 19492\nf 19466 19492 19491\nf 19467 19493 19494\nf 19467 19494 19468\nf 19468 19494 19492\nf 19469 19471 19470\nf 19470 19471 19497\nf 19470 19497 19496\nf 19471 19472 19498\nf 19471 19498 19497\nf 19472 19473 19499\nf 19472 19499 19498\nf 19473 19474 19500\nf 19473 19500 19499\nf 19474 19475 19501\nf 19474 19501 19500\nf 19475 19476 19502\nf 19475 19502 19501\nf 19476 19477 19503\nf 19476 19503 19502\nf 19477 19478 19504\nf 19477 19504 19503\nf 19478 19479 19505\nf 19478 19505 19504\nf 19479 19480 19506\nf 19479 19506 19505\nf 19480 19482 19507\nf 19480 19507 19506\nf 19481 19508 19509\nf 19481 19509 19482\nf 19482 19509 19507\nf 19483 19484 19510\nf 19484 19485 19511\nf 19484 19511 19510\nf 19485 19486 19512\nf 19485 19512 19511\nf 19486 19487 19513\nf 19486 19513 19512\nf 19487 19488 19514\nf 19487 19514 19513\nf 19488 19489 19515\nf 19488 19515 21501\nf 19488 21501 21502\nf 19488 21502 19514\nf 19489 19490 19515\nf 19490 19491 19516\nf 19490 19516 19515\nf 19491 19492 19517\nf 19491 19517 19516\nf 19492 19494 19518\nf 19492 19518 19517\nf 19493 19495 19521\nf 19493 19521 19494\nf 19494 19519 19518\nf 19494 19521 19519\nf 19495 19520 19521\nf 19496 19497 19522\nf 19497 19498 19523\nf 19497 19523 19522\nf 19498 19499 19524\nf 19498 19524 19523\nf 19499 19500 19525\nf 19499 19525 19524\nf 19500 19501 19526\nf 19500 19526 19525\nf 19501 19502 19527\nf 19501 19527 19526\nf 19502 19503 19528\nf 19502 19528 19527\nf 19503 19504 19529\nf 19503 19529 19528\nf 19504 19505 19530\nf 19504 19530 19529\nf 19505 19506 19531\nf 19505 19531 19530\nf 19506 19507 19532\nf 19506 19532 19531\nf 19507 19509 19533\nf 19507 19533 19532\nf 19508 19534 19535\nf 19508 19535 19509\nf 19509 19535 19533\nf 19510 19511 19536\nf 19511 19512 19537\nf 19511 19537 19536\nf 19512 19513 19538\nf 19512 19538 19537\nf 19513 19514 19539\nf 19513 19539 19538\nf 19514 19540 19539\nf 19514 21502 21505\nf 19514 21505 19540\nf 19515 19516 19541\nf 19515 19541 21503\nf 19515 21503 21501\nf 19516 19517 19542\nf 19516 19542 19541\nf 19517 19518 19543\nf 19517 19543 19542\nf 19518 19519 19544\nf 19518 19544 19543\nf 19519 19521 19545\nf 19519 19545 19544\nf 19520 19546 19547\nf 19520 19547 19521\nf 19521 19547 19545\nf 19522 19523 19548\nf 19523 19524 19549\nf 19523 19549 19548\nf 19524 19525 19550\nf 19524 19550 19549\nf 19525 19526 19551\nf 19525 19551 19550\nf 19526 19527 19552\nf 19526 19552 19551\nf 19527 19528 19553\nf 19527 19553 19552\nf 19528 19529 19554\nf 19528 19554 19553\nf 19529 19530 19555\nf 19529 19555 19554\nf 19530 19531 19556\nf 19530 19556 19555\nf 19531 19532 19557\nf 19531 19557 19556\nf 19532 19533 19558\nf 19532 19558 19557\nf 19533 19535 19559\nf 19533 19559 19558\nf 19534 19560 19561\nf 19534 19561 19535\nf 19535 19561 19559\nf 19536 19537 19563\nf 19537 19538 19564\nf 19537 19564 19563\nf 19538 19539 19565\nf 19538 19565 19564\nf 19539 19540 19566\nf 19539 19566 19565\nf 19540 19567 19566\nf 19540 21505 21512\nf 19540 21512 19567\nf 19541 19542 19568\nf 19541 19568 21508\nf 19541 21506 21503\nf 19541 21508 21506\nf 19542 19543 19568\nf 19543 19544 19569\nf 19543 19569 19568\nf 19544 19545 19570\nf 19544 19570 19569\nf 19545 19547 19571\nf 19545 19571 19570\nf 19546 19572 19573\nf 19546 19573 19547\nf 19547 19573 19571\nf 19548 19549 19574\nf 19549 19550 19575\nf 19549 19575 19574\nf 19550 19551 19576\nf 19550 19576 19575\nf 19551 19552 19577\nf 19551 19577 19576\nf 19552 19553 21509\nf 19552 21509 21516\nf 19552 21516 19577\nf 19553 19554 21510\nf 19553 21510 21509\nf 19554 19555 19578\nf 19554 19578 21511\nf 19554 21511 21510\nf 19555 19556 19578\nf 19556 19557 19579\nf 19556 19579 19578\nf 19557 19558 19580\nf 19557 19580 19579\nf 19558 19559 19581\nf 19558 19581 19580\nf 19559 19561 19582\nf 19559 19582 19581\nf 19560 19562 19585\nf 19560 19585 19561\nf 19561 19583 19582\nf 19561 19585 19583\nf 19562 19584 19585\nf 19563 19564 19586\nf 19564 19565 19588\nf 19564 19588 19586\nf 19565 19566 19589\nf 19565 19589 19588\nf 19566 19567 19590\nf 19566 19590 19589\nf 19567 19591 19590\nf 19567 21512 21521\nf 19567 21521 19591\nf 19568 19569 19592\nf 19568 19592 21514\nf 19568 21514 21508\nf 19569 19570 19593\nf 19569 19593 19592\nf 19570 19571 19594\nf 19570 19594 19593\nf 19571 19573 19595\nf 19571 19595 19594\nf 19572 19596 19597\nf 19572 19597 19573\nf 19573 19597 19595\nf 19574 19575 19598\nf 19575 19576 19599\nf 19575 19599 19598\nf 19576 19577 19600\nf 19576 19600 19599\nf 19577 19601 19600\nf 19577 21516 21525\nf 19577 21525 19601\nf 19578 19579 19602\nf 19578 19602 21519\nf 19578 21519 21511\nf 19579 19580 19603\nf 19579 19603 19602\nf 19580 19581 19604\nf 19580 19604 19603\nf 19581 19582 19605\nf 19581 19605 19604\nf 19582 19583 19606\nf 19582 19606 19605\nf 19583 19585 19607\nf 19583 19607 19606\nf 19584 19608 19609\nf 19584 19609 19585\nf 19585 19609 19607\nf 19586 19588 19587\nf 19587 19588 19610\nf 19588 19589 19611\nf 19588 19611 19610\nf 19589 19590 19611\nf 19590 19591 19612\nf 19590 19612 19611\nf 19591 19613 19612\nf 19591 21521 21530\nf 19591 21530 19613\nf 19592 19593 19614\nf 19592 19614 21523\nf 19592 21523 21514\nf 19593 19594 19615\nf 19593 19615 19614\nf 19594 19595 19616\nf 19594 19616 19615\nf 19595 19597 19617\nf 19595 19617 19616\nf 19596 19618 19619\nf 19596 19619 19597\nf 19597 19619 19617\nf 19598 19599 19620\nf 19599 19600 19621\nf 19599 19621 19620\nf 19600 19601 19622\nf 19600 19622 19621\nf 19601 19623 19622\nf 19601 21525 21534\nf 19601 21534 19623\nf 19602 19603 19624\nf 19602 19624 21528\nf 19602 21528 21519\nf 19603 19604 19625\nf 19603 19625 19624\nf 19604 19605 19626\nf 19604 19626 19625\nf 19605 19606 19627\nf 19605 19627 19626\nf 19606 19607 19628\nf 19606 19628 19627\nf 19607 19609 19629\nf 19607 19629 19628\nf 19608 19630 19631\nf 19608 19631 19609\nf 19609 19631 19629\nf 19610 19611 19632\nf 19611 19612 19633\nf 19611 19633 19632\nf 19612 19613 19634\nf 19612 19634 19633\nf 19613 19635 19634\nf 19613 21530 21539\nf 19613 21539 19635\nf 19614 19615 19636\nf 19614 19636 21532\nf 19614 21532 21523\nf 19615 19616 19637\nf 19615 19637 19636\nf 19616 19617 19638\nf 19616 19638 19637\nf 19617 19619 19639\nf 19617 19639 19638\nf 19618 19640 19641\nf 19618 19641 19619\nf 19619 19641 19639\nf 19620 19621 19642\nf 19621 19622 19643\nf 19621 19643 19642\nf 19622 19623 19644\nf 19622 19644 19643\nf 19623 19645 19644\nf 19623 21534 21544\nf 19623 21544 19645\nf 19624 19625 19646\nf 19624 19646 21537\nf 19624 21537 21528\nf 19625 19626 19647\nf 19625 19647 19646\nf 19626 19627 19648\nf 19626 19648 19647\nf 19627 19628 19649\nf 19627 19649 19648\nf 19628 19629 19650\nf 19628 19650 19649\nf 19629 19631 19651\nf 19629 19651 19650\nf 19630 19652 19653\nf 19630 19653 19631\nf 19631 19653 19651\nf 19632 19633 19654\nf 19633 19634 19655\nf 19633 19655 19654\nf 19634 19635 19656\nf 19634 19656 19655\nf 19635 19657 19656\nf 19635 19658 19657\nf 19635 21539 21540\nf 19635 21540 19658\nf 19636 19637 19659\nf 19636 19659 21542\nf 19636 21542 21532\nf 19637 19638 19660\nf 19637 19660 19659\nf 19638 19639 19661\nf 19638 19661 19660\nf 19639 19641 19662\nf 19639 19662 19661\nf 19640 19663 19664\nf 19640 19664 19641\nf 19641 19664 19662\nf 19642 19643 19665\nf 19643 19644 19666\nf 19643 19666 19665\nf 19644 19645 19667\nf 19644 19667 19666\nf 19645 21544 21545\nf 19645 21545 21555\nf 19645 21555 19667\nf 19646 19647 19668\nf 19646 19668 21548\nf 19646 21548 21537\nf 19647 19648 19669\nf 19647 19669 19668\nf 19648 19649 19670\nf 19648 19670 19669\nf 19649 19650 19671\nf 19649 19671 19670\nf 19650 19651 19672\nf 19650 19672 19671\nf 19651 19653 19673\nf 19651 19673 19672\nf 19652 19674 19675\nf 19652 19675 19653\nf 19653 19675 19673\nf 19654 19655 19676\nf 19655 19656 19677\nf 19655 19677 19676\nf 19656 19657 19678\nf 19656 19678 19677\nf 19657 19658 19679\nf 19657 19679 19678\nf 19658 19680 19679\nf 19658 19681 19680\nf 19658 21540 21550\nf 19658 21550 21552\nf 19658 21552 19681\nf 19659 19660 19682\nf 19659 19682 21554\nf 19659 21551 21542\nf 19659 21554 21551\nf 19660 19661 19682\nf 19661 19662 19683\nf 19661 19683 19682\nf 19662 19664 19684\nf 19662 19684 19683\nf 19663 19685 19686\nf 19663 19686 19664\nf 19664 19686 19684\nf 19665 19666 19687\nf 19666 19667 19688\nf 19666 19688 19687\nf 19667 19689 19688\nf 19667 21555 21565\nf 19667 21565 19689\nf 19668 19669 19691\nf 19668 19690 21559\nf 19668 19691 19690\nf 19668 21559 21548\nf 19669 19670 19692\nf 19669 19692 19691\nf 19670 19671 19693\nf 19670 19693 19692\nf 19671 19672 19694\nf 19671 19694 19693\nf 19672 19673 19695\nf 19672 19695 19694\nf 19673 19675 19696\nf 19673 19696 19695\nf 19674 19697 19698\nf 19674 19698 19675\nf 19675 19698 19696\nf 19676 19677 19699\nf 19677 19678 19700\nf 19677 19700 19699\nf 19678 19679 19701\nf 19678 19701 19700\nf 19679 19680 19702\nf 19679 19702 19701\nf 19680 19681 19703\nf 19680 19703 19702\nf 19681 19704 19703\nf 19681 21552 21562\nf 19681 21562 21571\nf 19681 21571 19704\nf 19682 19683 19705\nf 19682 19705 21563\nf 19682 21563 21554\nf 19683 19684 19706\nf 19683 19706 19705\nf 19684 19686 19707\nf 19684 19707 19706\nf 19685 19708 19709\nf 19685 19709 19686\nf 19686 19709 19707\nf 19687 19688 19710\nf 19688 19689 19711\nf 19688 19711 19710\nf 19689 19712 19711\nf 19689 21565 21574\nf 19689 21574 19712\nf 19690 19691 19714\nf 19690 19713 21568\nf 19690 19714 19713\nf 19690 21560 21559\nf 19690 21568 21560\nf 19691 19692 19715\nf 19691 19715 19714\nf 19692 19693 19716\nf 19692 19716 19715\nf 19693 19694 19717\nf 19693 19717 19716\nf 19694 19695 19718\nf 19694 19718 19717\nf 19695 19696 19719\nf 19695 19719 19718\nf 19696 19698 19720\nf 19696 19720 19719\nf 19697 19721 19722\nf 19697 19722 19698\nf 19698 19722 19720\nf 19699 19700 19723\nf 19700 19701 19724\nf 19700 19724 19723\nf 19701 19702 19725\nf 19701 19725 19724\nf 19702 19703 19726\nf 19702 19726 19725\nf 19703 19704 19727\nf 19703 19727 19726\nf 19704 19728 19727\nf 19704 21571 21580\nf 19704 21580 19728\nf 19705 19706 19729\nf 19705 19729 21572\nf 19705 21572 21563\nf 19706 19707 19730\nf 19706 19730 19729\nf 19707 19709 19731\nf 19707 19731 19730\nf 19708 19732 19733\nf 19708 19733 19709\nf 19709 19733 19731\nf 19710 19711 19734\nf 19711 19712 19735\nf 19711 19735 19734\nf 19712 19736 19735\nf 19712 19737 19736\nf 19712 21574 21575\nf 19712 21575 19737\nf 19713 19714 19739\nf 19713 19738 21577\nf 19713 19739 19738\nf 19713 21569 21568\nf 19713 21577 21569\nf 19714 19715 19740\nf 19714 19740 19739\nf 19715 19716 19741\nf 19715 19741 19740\nf 19716 19717 19742\nf 19716 19742 19741\nf 19717 19718 19743\nf 19717 19743 19742\nf 19718 19719 19744\nf 19718 19744 19743\nf 19719 19720 19745\nf 19719 19745 19744\nf 19720 19722 19746\nf 19720 19746 19745\nf 19721 19747 19748\nf 19721 19748 19722\nf 19722 19748 19746\nf 19723 19724 19749\nf 19724 19725 19750\nf 19724 19750 19749\nf 19725 19726 19751\nf 19725 19751 19750\nf 19726 19727 19752\nf 19726 19752 19751\nf 19727 19728 19753\nf 19727 19753 19752\nf 19728 19754 19753\nf 19728 19755 19754\nf 19728 21580 21582\nf 19728 21582 19755\nf 19729 19730 19756\nf 19729 19755 21581\nf 19729 19756 19755\nf 19729 21581 21572\nf 19730 19731 19757\nf 19730 19757 19756\nf 19731 19733 19758\nf 19731 19758 19757\nf 19732 19759 19760\nf 19732 19760 19733\nf 19733 19760 19758\nf 19734 19735 19761\nf 19735 19736 19762\nf 19735 19762 19761\nf 19736 19737 19763\nf 19736 19763 19762\nf 19737 19738 19764\nf 19737 19764 19763\nf 19737 21575 21578\nf 19737 21578 19738\nf 19738 19739 19765\nf 19738 19765 19764\nf 19738 21578 21577\nf 19739 19740 19766\nf 19739 19766 19765\nf 19740 19741 19767\nf 19740 19767 19766\nf 19741 19742 19768\nf 19741 19768 19767\nf 19742 19743 19769\nf 19742 19769 19768\nf 19743 19744 19770\nf 19743 19770 19769\nf 19744 19745 19771\nf 19744 19771 19770\nf 19745 19746 19772\nf 19745 19772 19771\nf 19746 19748 19773\nf 19746 19773 19772\nf 19747 19774 19775\nf 19747 19775 19748\nf 19748 19775 19773\nf 19749 19750 19776\nf 19750 19751 19777\nf 19750 19777 19776\nf 19751 19752 19778\nf 19751 19778 19777\nf 19752 19753 19779\nf 19752 19779 19778\nf 19753 19754 19780\nf 19753 19780 19779\nf 19754 19755 19781\nf 19754 19781 19780\nf 19755 19756 19782\nf 19755 19782 19781\nf 19755 21582 21581\nf 19756 19757 19783\nf 19756 19783 19782\nf 19757 19758 19784\nf 19757 19784 19783\nf 19758 19760 19785\nf 19758 19785 19784\nf 19759 19786 19787\nf 19759 19787 19760\nf 19760 19787 19785\nf 19761 19762 19788\nf 19762 19763 19789\nf 19762 19789 19788\nf 19763 19764 19790\nf 19763 19790 19789\nf 19764 19765 19791\nf 19764 19791 19790\nf 19765 19766 19792\nf 19765 19792 19791\nf 19766 19767 19793\nf 19766 19793 19792\nf 19767 19768 19794\nf 19767 19794 19793\nf 19768 19769 19795\nf 19768 19795 19794\nf 19769 19770 19796\nf 19769 19796 19795\nf 19770 19771 19797\nf 19770 19797 19796\nf 19771 19772 19798\nf 19771 19798 19797\nf 19772 19773 19799\nf 19772 19799 19798\nf 19773 19775 19800\nf 19773 19800 19799\nf 19774 19801 19802\nf 19774 19802 19775\nf 19775 19802 19800\nf 19776 19777 19803\nf 19777 19778 19804\nf 19777 19804 19803\nf 19778 19779 19805\nf 19778 19805 19804\nf 19779 19780 19806\nf 19779 19806 19805\nf 19780 19781 19807\nf 19780 19807 19806\nf 19781 19782 19808\nf 19781 19808 19807\nf 19782 19783 19809\nf 19782 19809 19808\nf 19783 19784 19810\nf 19783 19810 19809\nf 19784 19785 19811\nf 19784 19811 19810\nf 19785 19787 19812\nf 19785 19812 19811\nf 19786 19813 19814\nf 19786 19814 19787\nf 19787 19814 19812\nf 19788 19789 19815\nf 19789 19790 19816\nf 19789 19816 19815\nf 19790 19791 19817\nf 19790 19817 19816\nf 19791 19792 19818\nf 19791 19818 19817\nf 19792 19793 19819\nf 19792 19819 19818\nf 19793 19794 19820\nf 19793 19820 19819\nf 19794 19795 19821\nf 19794 19821 19820\nf 19795 19796 19822\nf 19795 19822 19821\nf 19796 19797 19823\nf 19796 19823 19822\nf 19797 19798 19824\nf 19797 19824 19823\nf 19798 19799 19825\nf 19798 19825 19824\nf 19799 19800 19826\nf 19799 19826 19825\nf 19800 19802 19827\nf 19800 19827 19826\nf 19801 19828 19829\nf 19801 19829 19802\nf 19802 19829 19827\nf 19803 19804 19830\nf 19804 19805 19831\nf 19804 19831 19830\nf 19805 19806 19832\nf 19805 19832 19831\nf 19806 19807 19833\nf 19806 19833 19832\nf 19807 19808 19834\nf 19807 19834 19833\nf 19808 19809 19835\nf 19808 19835 19834\nf 19809 19810 19836\nf 19809 19836 19835\nf 19810 19811 19837\nf 19810 19837 19836\nf 19811 19812 19838\nf 19811 19838 19837\nf 19812 19814 19839\nf 19812 19839 19838\nf 19813 19840 19841\nf 19813 19841 19814\nf 19814 19841 19839\nf 19815 19816 19842\nf 19816 19817 19843\nf 19816 19843 19842\nf 19817 19818 19844\nf 19817 19844 19843\nf 19818 19819 19845\nf 19818 19845 19844\nf 19819 19820 19846\nf 19819 19846 19845\nf 19820 19821 19847\nf 19820 19847 19846\nf 19821 19822 19848\nf 19821 19848 19847\nf 19822 19823 19849\nf 19822 19849 19848\nf 19823 19824 19850\nf 19823 19850 19849\nf 19824 19825 19851\nf 19824 19851 19850\nf 19825 19826 19852\nf 19825 19852 19851\nf 19826 19827 19853\nf 19826 19853 19852\nf 19827 19829 19854\nf 19827 19854 19853\nf 19828 19855 19856\nf 19828 19856 19829\nf 19829 19856 19854\nf 19830 19831 19857\nf 19831 19832 19858\nf 19831 19858 19857\nf 19832 19833 19859\nf 19832 19859 19858\nf 19833 19834 19860\nf 19833 19860 19859\nf 19834 19835 19861\nf 19834 19861 19860\nf 19835 19836 19862\nf 19835 19862 19861\nf 19836 19837 19863\nf 19836 19863 19862\nf 19837 19838 19864\nf 19837 19864 19863\nf 19838 19839 19865\nf 19838 19865 19864\nf 19839 19841 19866\nf 19839 19866 19865\nf 19840 19867 19868\nf 19840 19868 19841\nf 19841 19868 19866\nf 19842 19843 19869\nf 19843 19844 19870\nf 19843 19870 19869\nf 19844 19845 19871\nf 19844 19871 19870\nf 19845 19846 19872\nf 19845 19872 19871\nf 19846 19847 19873\nf 19846 19873 19872\nf 19847 19848 19874\nf 19847 19874 19873\nf 19848 19849 19875\nf 19848 19875 19874\nf 19849 19850 19876\nf 19849 19876 19875\nf 19850 19851 19877\nf 19850 19877 19876\nf 19851 19852 19878\nf 19851 19878 19877\nf 19852 19853 19879\nf 19852 19879 19878\nf 19853 19854 19880\nf 19853 19880 19879\nf 19854 19856 19881\nf 19854 19881 19880\nf 19855 19882 19883\nf 19855 19883 19856\nf 19856 19883 19881\nf 19857 19858 19884\nf 19858 19859 19885\nf 19858 19885 19884\nf 19859 19860 19886\nf 19859 19886 19885\nf 19860 19861 19887\nf 19860 19887 19886\nf 19861 19862 19888\nf 19861 19888 19887\nf 19862 19863 19889\nf 19862 19889 19888\nf 19863 19864 19890\nf 19863 19890 19889\nf 19864 19865 19891\nf 19864 19891 21584\nf 19864 21584 21585\nf 19864 21585 19890\nf 19865 19866 19891\nf 19866 19868 19892\nf 19866 19892 19891\nf 19867 19893 19894\nf 19867 19894 19868\nf 19868 19894 19892\nf 19869 19870 19895\nf 19870 19871 19896\nf 19870 19896 19895\nf 19871 19872 19897\nf 19871 19897 19896\nf 19872 19873 19898\nf 19872 19898 19897\nf 19873 19874 19899\nf 19873 19899 19898\nf 19874 19875 19900\nf 19874 19900 19899\nf 19875 19876 19901\nf 19875 19901 19900\nf 19876 19877 19902\nf 19876 19902 19901\nf 19877 19878 19903\nf 19877 19903 19902\nf 19878 19879 19904\nf 19878 19904 19903\nf 19879 19880 19905\nf 19879 19905 19904\nf 19880 19881 19906\nf 19880 19906 19905\nf 19881 19883 19907\nf 19881 19907 19906\nf 19882 19908 19909\nf 19882 19909 19883\nf 19883 19909 19907\nf 19884 19885 19910\nf 19885 19886 19911\nf 19885 19911 19910\nf 19886 19887 19912\nf 19886 19912 19911\nf 19887 19888 19913\nf 19887 19913 19912\nf 19888 19889 19914\nf 19888 19914 19913\nf 19889 19890 19915\nf 19889 19915 19914\nf 19890 21585 21586\nf 19890 21586 21591\nf 19890 21591 19915\nf 19891 19892 21589\nf 19891 21587 21584\nf 19891 21589 21587\nf 19892 19894 19917\nf 19892 19917 21590\nf 19892 21590 21589\nf 19893 19916 19917\nf 19893 19917 19894\nf 19895 19896 19918\nf 19896 19897 19919\nf 19896 19919 19918\nf 19897 19898 19920\nf 19897 19920 19919\nf 19898 19899 19921\nf 19898 19921 19920\nf 19899 19900 19922\nf 19899 19922 19921\nf 19900 19901 19923\nf 19900 19923 19922\nf 19901 19902 19924\nf 19901 19924 19923\nf 19902 19903 19925\nf 19902 19925 19924\nf 19903 19904 19926\nf 19903 19926 19925\nf 19904 19905 19927\nf 19904 19927 19926\nf 19905 19906 19928\nf 19905 19928 19927\nf 19906 19907 19929\nf 19906 19929 19928\nf 19907 19909 19930\nf 19907 19930 19929\nf 19908 19931 19932\nf 19908 19932 19909\nf 19909 19932 19930\nf 19910 19911 19933\nf 19911 19912 19934\nf 19911 19934 19933\nf 19912 19913 19935\nf 19912 19935 19934\nf 19913 19914 19936\nf 19913 19936 19935\nf 19914 19915 19937\nf 19914 19937 19936\nf 19915 21591 21592\nf 19915 21592 21598\nf 19915 21598 19937\nf 19916 19938 19939\nf 19916 19939 19917\nf 19917 19939 21596\nf 19917 21596 21590\nf 19918 19919 19940\nf 19919 19920 19942\nf 19919 19942 19940\nf 19920 19921 19943\nf 19920 19943 19942\nf 19921 19922 19944\nf 19921 19944 19943\nf 19922 19923 19945\nf 19922 19945 19944\nf 19923 19924 19946\nf 19923 19946 19945\nf 19924 19925 19947\nf 19924 19947 19946\nf 19925 19926 19948\nf 19925 19948 19947\nf 19926 19927 19949\nf 19926 19949 19948\nf 19927 19928 19950\nf 19927 19950 19949\nf 19928 19929 19951\nf 19928 19951 19950\nf 19929 19930 19952\nf 19929 19952 19951\nf 19930 19932 19953\nf 19930 19953 19952\nf 19931 19954 19955\nf 19931 19955 19932\nf 19932 19955 19953\nf 19933 19934 19956\nf 19934 19935 19957\nf 19934 19957 19956\nf 19935 19936 19958\nf 19935 19958 19957\nf 19936 19937 19959\nf 19936 19959 19958\nf 19937 19960 19959\nf 19937 21598 21606\nf 19937 21606 19960\nf 19938 19961 21613\nf 19938 21605 19939\nf 19938 21613 21605\nf 19939 21603 21596\nf 19939 21605 21603\nf 19940 19942 19941\nf 19941 19942 19962\nf 19942 19943 19963\nf 19942 19963 19962\nf 19943 19944 19963\nf 19944 19945 19964\nf 19944 19964 19963\nf 19945 19946 19965\nf 19945 19965 19964\nf 19946 19947 19966\nf 19946 19966 19965\nf 19947 19948 19967\nf 19947 19967 19966\nf 19948 19949 19968\nf 19948 19968 19967\nf 19949 19950 19969\nf 19949 19969 19968\nf 19950 19951 19970\nf 19950 19970 19969\nf 19951 19952 19971\nf 19951 19971 19970\nf 19952 19953 19972\nf 19952 19972 19971\nf 19953 19955 19973\nf 19953 19973 19972\nf 19954 19974 19975\nf 19954 19975 19955\nf 19955 19975 19973\nf 19956 19957 19976\nf 19957 19958 19977\nf 19957 19977 19976\nf 19958 19959 19978\nf 19958 19978 19977\nf 19959 19960 19979\nf 19959 19979 19978\nf 19960 21606 21607\nf 19960 21607 21615\nf 19960 21615 19979\nf 19961 19980 21622\nf 19961 21622 21613\nf 19962 19963 19981\nf 19963 19964 19982\nf 19963 19982 19981\nf 19964 19965 19983\nf 19964 19983 19982\nf 19965 19966 19984\nf 19965 19984 19983\nf 19966 19967 19985\nf 19966 19985 19984\nf 19967 19968 19986\nf 19967 19986 19985\nf 19968 19969 19987\nf 19968 19987 19986\nf 19969 19970 19988\nf 19969 19988 19987\nf 19970 19971 19989\nf 19970 19989 19988\nf 19971 19972 19990\nf 19971 19990 19989\nf 19972 19973 19991\nf 19972 19991 19990\nf 19973 19975 19992\nf 19973 19992 19991\nf 19974 19993 19994\nf 19974 19994 19975\nf 19975 19994 19992\nf 19976 19977 19995\nf 19977 19978 19996\nf 19977 19996 19995\nf 19978 19979 19997\nf 19978 19997 19996\nf 19979 19998 19997\nf 19979 21615 21624\nf 19979 21624 19998\nf 19980 19999 21631\nf 19980 21631 21622\nf 19981 19982 20000\nf 19982 19983 20001\nf 19982 20001 20000\nf 19983 19984 20002\nf 19983 20002 20001\nf 19984 19985 20003\nf 19984 20003 20002\nf 19985 19986 20004\nf 19985 20004 20003\nf 19986 19987 20005\nf 19986 20005 20004\nf 19987 19988 20006\nf 19987 20006 20005\nf 19988 19989 20007\nf 19988 20007 20006\nf 19989 19990 20008\nf 19989 20008 20007\nf 19990 19991 20009\nf 19990 20009 20008\nf 19991 19992 20010\nf 19991 20010 20009\nf 19992 19994 20011\nf 19992 20011 20010\nf 19993 20012 20013\nf 19993 20013 19994\nf 19994 20013 20011\nf 19995 19996 20014\nf 19996 19997 20016\nf 19996 20016 20014\nf 19997 19998 20017\nf 19997 20017 20016\nf 19998 20018 20017\nf 19998 21624 21633\nf 19998 21633 20018\nf 19999 20019 21641\nf 19999 21641 21631\nf 20000 20001 20021\nf 20001 20002 20022\nf 20001 20022 20021\nf 20002 20003 20023\nf 20002 20023 20022\nf 20003 20004 20024\nf 20003 20024 20023\nf 20004 20005 20025\nf 20004 20025 20024\nf 20005 20006 20026\nf 20005 20026 20025\nf 20006 20007 20027\nf 20006 20027 20026\nf 20007 20008 20028\nf 20007 20028 20027\nf 20008 20009 20029\nf 20008 20029 20028\nf 20009 20010 20030\nf 20009 20030 20029\nf 20010 20011 20031\nf 20010 20031 20030\nf 20011 20013 20032\nf 20011 20032 20031\nf 20012 20033 20034\nf 20012 20034 20013\nf 20013 20034 20032\nf 20014 20016 20015\nf 20015 20016 20035\nf 20016 20017 20036\nf 20016 20036 20035\nf 20017 20018 20036\nf 20018 20037 20036\nf 20018 20038 20037\nf 20018 21633 21634\nf 20018 21634 20038\nf 20019 20020 20040\nf 20019 20040 21650\nf 20019 21650 21641\nf 20020 20039 20040\nf 20021 20022 20041\nf 20022 20023 20042\nf 20022 20042 20041\nf 20023 20024 20043\nf 20023 20043 20042\nf 20024 20025 20044\nf 20024 20044 20043\nf 20025 20026 20045\nf 20025 20045 20044\nf 20026 20027 20046\nf 20026 20046 20045\nf 20027 20028 20047\nf 20027 20047 20046\nf 20028 20029 20048\nf 20028 20048 20047\nf 20029 20030 20049\nf 20029 20049 20048\nf 20030 20031 20050\nf 20030 20050 20049\nf 20031 20032 20051\nf 20031 20051 20050\nf 20032 20034 20052\nf 20032 20052 20051\nf 20033 20053 20054\nf 20033 20054 20034\nf 20034 20054 20052\nf 20035 20036 20055\nf 20036 20037 20056\nf 20036 20056 20055\nf 20037 20038 20057\nf 20037 20057 20056\nf 20038 20058 20057\nf 20038 20059 20058\nf 20038 21634 21643\nf 20038 21643 21644\nf 20038 21644 20059\nf 20039 20060 20061\nf 20039 20061 20040\nf 20040 20061 21650\nf 20041 20042 20062\nf 20042 20043 20064\nf 20042 20064 20062\nf 20043 20044 20065\nf 20043 20065 20064\nf 20044 20045 20066\nf 20044 20066 20065\nf 20045 20046 20067\nf 20045 20067 20066\nf 20046 20047 20068\nf 20046 20068 20067\nf 20047 20048 20069\nf 20047 20069 20068\nf 20048 20049 20070\nf 20048 20070 20069\nf 20049 20050 20071\nf 20049 20071 20070\nf 20050 20051 20072\nf 20050 20072 20071\nf 20051 20052 20073\nf 20051 20073 20072\nf 20052 20054 20074\nf 20052 20074 20073\nf 20053 20075 20076\nf 20053 20076 20054\nf 20054 20076 20074\nf 20055 20056 20077\nf 20056 20057 20078\nf 20056 20078 20077\nf 20057 20058 20079\nf 20057 20079 20078\nf 20058 20059 20080\nf 20058 20080 20079\nf 20059 20081 20080\nf 20059 20082 20081\nf 20059 21644 21652\nf 20059 21652 21653\nf 20059 21653 20082\nf 20060 20084 20086\nf 20060 20086 20061\nf 20061 20083 21658\nf 20061 20086 20083\nf 20061 21658 21650\nf 20062 20064 20063\nf 20063 20064 20087\nf 20064 20065 20088\nf 20064 20088 20087\nf 20065 20066 20088\nf 20066 20067 20089\nf 20066 20089 20088\nf 20067 20068 20090\nf 20067 20090 20089\nf 20068 20069 20091\nf 20068 20091 20090\nf 20069 20070 20092\nf 20069 20092 20091\nf 20070 20071 20093\nf 20070 20093 20092\nf 20071 20072 20094\nf 20071 20094 20093\nf 20072 20073 20095\nf 20072 20095 20094\nf 20073 20074 20096\nf 20073 20096 20095\nf 20074 20076 20097\nf 20074 20097 20096\nf 20075 20098 20099\nf 20075 20099 20076\nf 20076 20099 20097\nf 20077 20078 20100\nf 20078 20079 20101\nf 20078 20101 20100\nf 20079 20080 20102\nf 20079 20102 20101\nf 20080 20081 20103\nf 20080 20103 20102\nf 20081 20082 20104\nf 20081 20104 20103\nf 20082 20105 20104\nf 20082 21653 21661\nf 20082 21661 21666\nf 20082 21666 20105\nf 20083 20086 20107\nf 20083 20107 21664\nf 20083 21659 21658\nf 20083 21664 21659\nf 20084 20085 20086\nf 20085 20106 20107\nf 20085 20107 20086\nf 20087 20088 20108\nf 20088 20089 20109\nf 20088 20109 20108\nf 20089 20090 20110\nf 20089 20110 20109\nf 20090 20091 20111\nf 20090 20111 20110\nf 20091 20092 20112\nf 20091 20112 20111\nf 20092 20093 20113\nf 20092 20113 20112\nf 20093 20094 20114\nf 20093 20114 20113\nf 20094 20095 20115\nf 20094 20115 20114\nf 20095 20096 20116\nf 20095 20116 20115\nf 20096 20097 20117\nf 20096 20117 20116\nf 20097 20099 20118\nf 20097 20118 20117\nf 20098 20119 20120\nf 20098 20120 20099\nf 20099 20120 20118\nf 20100 20101 20121\nf 20101 20102 20122\nf 20101 20122 20121\nf 20102 20103 20123\nf 20102 20123 20122\nf 20103 20104 20124\nf 20103 20124 20123\nf 20104 20105 20125\nf 20104 20125 20124\nf 20105 20126 20125\nf 20105 20127 20126\nf 20105 21666 21667\nf 20105 21667 20127\nf 20106 20129 20130\nf 20106 20130 20107\nf 20107 20128 21670\nf 20107 20130 20128\nf 20107 21670 21664\nf 20108 20109 20131\nf 20109 20110 20132\nf 20109 20132 20131\nf 20110 20111 20133\nf 20110 20133 20132\nf 20111 20112 20134\nf 20111 20134 20133\nf 20112 20113 20135\nf 20112 20135 20134\nf 20113 20114 20136\nf 20113 20136 20135\nf 20114 20115 20137\nf 20114 20137 20136\nf 20115 20116 20138\nf 20115 20138 20137\nf 20116 20117 20139\nf 20116 20139 20138\nf 20117 20118 20140\nf 20117 20140 20139\nf 20118 20120 20141\nf 20118 20141 20140\nf 20119 20142 20143\nf 20119 20143 20120\nf 20120 20143 20141\nf 20121 20122 20144\nf 20122 20123 20146\nf 20122 20146 20144\nf 20123 20124 20147\nf 20123 20147 20146\nf 20124 20125 20148\nf 20124 20148 20147\nf 20125 20126 20149\nf 20125 20149 20148\nf 20126 20127 20150\nf 20126 20150 20149\nf 20127 20151 20150\nf 20127 20152 20151\nf 20127 21667 21673\nf 20127 21673 21675\nf 20127 21675 20152\nf 20128 20130 20153\nf 20128 20152 21674\nf 20128 20153 20152\nf 20128 21671 21670\nf 20128 21674 21671\nf 20129 20154 20156\nf 20129 20156 20130\nf 20130 20156 20153\nf 20131 20132 20157\nf 20132 20133 20158\nf 20132 20158 20157\nf 20133 20134 20159\nf 20133 20159 20158\nf 20134 20135 20160\nf 20134 20160 20159\nf 20135 20136 20161\nf 20135 20161 20160\nf 20136 20137 20162\nf 20136 20162 20161\nf 20137 20138 20163\nf 20137 20163 20162\nf 20138 20139 20164\nf 20138 20164 20163\nf 20139 20140 20165\nf 20139 20165 20164\nf 20140 20141 20166\nf 20140 20166 20165\nf 20141 20143 20167\nf 20141 20167 20166\nf 20142 20168 20169\nf 20142 20169 20143\nf 20143 20169 20167\nf 20144 20146 20145\nf 20145 20146 20170\nf 20146 20147 20171\nf 20146 20171 20170\nf 20147 20148 20171\nf 20148 20149 20172\nf 20148 20172 20171\nf 20149 20150 20173\nf 20149 20173 20172\nf 20150 20151 20174\nf 20150 20174 20173\nf 20151 20152 20175\nf 20151 20175 20174\nf 20152 20153 20176\nf 20152 20176 20175\nf 20152 21675 21674\nf 20153 20156 20178\nf 20153 20178 20176\nf 20154 20155 20156\nf 20155 20177 20178\nf 20155 20178 20156\nf 20157 20158 20179\nf 20158 20159 20180\nf 20158 20180 20179\nf 20159 20160 20181\nf 20159 20181 20180\nf 20160 20161 20182\nf 20160 20182 20181\nf 20161 20162 20183\nf 20161 20183 20182\nf 20162 20163 20184\nf 20162 20184 20183\nf 20163 20164 20185\nf 20163 20185 20184\nf 20164 20165 20186\nf 20164 20186 20185\nf 20165 20166 20187\nf 20165 20187 20186\nf 20166 20167 20188\nf 20166 20188 20187\nf 20167 20169 20189\nf 20167 20189 20188\nf 20168 20190 20192\nf 20168 20192 20169\nf 20169 20192 20189\nf 20170 20171 20193\nf 20171 20172 20194\nf 20171 20194 20193\nf 20172 20173 20195\nf 20172 20195 20194\nf 20173 20174 20196\nf 20173 20196 20195\nf 20174 20175 20197\nf 20174 20197 20196\nf 20175 20176 20198\nf 20175 20198 20197\nf 20176 20178 20199\nf 20176 20199 20198\nf 20177 20200 20201\nf 20177 20201 20178\nf 20178 20201 20199\nf 20179 20180 20202\nf 20180 20181 20204\nf 20180 20204 20202\nf 20181 20182 20205\nf 20181 20205 20204\nf 20182 20183 20206\nf 20182 20206 20205\nf 20183 20184 20207\nf 20183 20207 20206\nf 20184 20185 20208\nf 20184 20208 20207\nf 20185 20186 20209\nf 20185 20209 20208\nf 20186 20187 20210\nf 20186 20210 20209\nf 20187 20188 20211\nf 20187 20211 20210\nf 20188 20189 20212\nf 20188 20212 20211\nf 20189 20192 20214\nf 20189 20214 20212\nf 20190 20191 20192\nf 20191 20213 20214\nf 20191 20214 20192\nf 20193 20194 20215\nf 20194 20195 20216\nf 20194 20216 20215\nf 20195 20196 20217\nf 20195 20217 20216\nf 20196 20197 20218\nf 20196 20218 20217\nf 20197 20198 20219\nf 20197 20219 20218\nf 20198 20199 20220\nf 20198 20220 20219\nf 20199 20201 20221\nf 20199 20221 20220\nf 20200 20222 20224\nf 20200 20224 20201\nf 20201 20224 20221\nf 20202 20204 20203\nf 20203 20204 20225\nf 20204 20205 20226\nf 20204 20226 20225\nf 20205 20206 20226\nf 20206 20207 20227\nf 20206 20227 20226\nf 20207 20208 20228\nf 20207 20228 20227\nf 20208 20209 20229\nf 20208 20229 20228\nf 20209 20210 20230\nf 20209 20230 20229\nf 20210 20211 20231\nf 20210 20231 20230\nf 20211 20212 20232\nf 20211 20232 20231\nf 20212 20214 20233\nf 20212 20233 20232\nf 20213 20234 20235\nf 20213 20235 20214\nf 20214 20235 20233\nf 20215 20216 20236\nf 20216 20217 20238\nf 20216 20238 20236\nf 20217 20218 20239\nf 20217 20239 21677\nf 20217 21677 21678\nf 20217 21678 20238\nf 20218 20219 20239\nf 20219 20220 20240\nf 20219 20240 20239\nf 20220 20221 20241\nf 20220 20241 20240\nf 20221 20224 20243\nf 20221 20243 20241\nf 20222 20223 20224\nf 20223 20242 20243\nf 20223 20243 20224\nf 20225 20226 20244\nf 20226 20227 20245\nf 20226 20245 20244\nf 20227 20228 20246\nf 20227 20246 20245\nf 20228 20229 20247\nf 20228 20247 20246\nf 20229 20230 20248\nf 20229 20248 20247\nf 20230 20231 20249\nf 20230 20249 20248\nf 20231 20232 20250\nf 20231 20250 20249\nf 20232 20233 20251\nf 20232 20251 20250\nf 20233 20235 20252\nf 20233 20252 20251\nf 20234 20253 20254\nf 20234 20254 20235\nf 20235 20254 20252\nf 20236 20238 20237\nf 20237 20238 20256\nf 20237 20256 20255\nf 20238 20257 20256\nf 20238 21678 21681\nf 20238 21681 20257\nf 20239 20240 20258\nf 20239 20258 21679\nf 20239 21679 21677\nf 20240 20241 20259\nf 20240 20259 20258\nf 20241 20243 20260\nf 20241 20260 20259\nf 20242 20261 20262\nf 20242 20262 20243\nf 20243 20262 20260\nf 20244 20245 20263\nf 20245 20246 20264\nf 20245 20264 20263\nf 20246 20247 20265\nf 20246 20265 20264\nf 20247 20248 20266\nf 20247 20266 20265\nf 20248 20249 20267\nf 20248 20267 20266\nf 20249 20250 20268\nf 20249 20268 20267\nf 20250 20251 20269\nf 20250 20269 20268\nf 20251 20252 20270\nf 20251 20270 20269\nf 20252 20254 20271\nf 20252 20271 20270\nf 20253 20272 20273\nf 20253 20273 20254\nf 20254 20273 20271\nf 20255 20256 20274\nf 20256 20257 20275\nf 20256 20275 20274\nf 20257 21681 21682\nf 20257 21682 21690\nf 20257 21690 20275\nf 20258 20259 21685\nf 20258 21683 21679\nf 20258 21685 21683\nf 20259 20260 20276\nf 20259 20276 21686\nf 20259 21686 21685\nf 20260 20262 20276\nf 20261 20277 20278\nf 20261 20278 20262\nf 20262 20278 20276\nf 20263 20264 20279\nf 20264 20265 20280\nf 20264 20280 20279\nf 20265 20266 20281\nf 20265 20281 20280\nf 20266 20267 20282\nf 20266 20282 20281\nf 20267 20268 20283\nf 20267 20283 20282\nf 20268 20269 20284\nf 20268 20284 20283\nf 20269 20270 21687\nf 20269 21687 21696\nf 20269 21696 20284\nf 20270 20271 21688\nf 20270 21688 21687\nf 20271 20273 20286\nf 20271 20286 21689\nf 20271 21689 21688\nf 20272 20285 20286\nf 20272 20286 20273\nf 20274 20275 20287\nf 20275 20288 20287\nf 20275 21690 21702\nf 20275 21702 20288\nf 20276 20278 20289\nf 20276 20289 21694\nf 20276 21694 21686\nf 20277 20290 20291\nf 20277 20291 20278\nf 20278 20291 20289\nf 20279 20280 20292\nf 20280 20281 20293\nf 20280 20293 20292\nf 20281 20282 20294\nf 20281 20294 20293\nf 20282 20283 20295\nf 20282 20295 20294\nf 20283 20284 20296\nf 20283 20296 20295\nf 20284 21696 21697\nf 20284 21697 21708\nf 20284 21708 20296\nf 20285 20297 20298\nf 20285 20298 20286\nf 20286 20298 21700\nf 20286 21700 21689\nf 20287 20288 20300\nf 20288 20301 20300\nf 20288 21702 21716\nf 20288 21716 20301\nf 20289 20291 20302\nf 20289 20302 21706\nf 20289 21706 21694\nf 20290 20303 20304\nf 20290 20304 20291\nf 20291 20304 20302\nf 20292 20293 20305\nf 20293 20294 20306\nf 20293 20306 20305\nf 20294 20295 20307\nf 20294 20307 20306\nf 20295 20296 20308\nf 20295 20308 20307\nf 20296 21708 21709\nf 20296 21709 21723\nf 20296 21723 20308\nf 20297 20299 21715\nf 20297 21715 20298\nf 20298 21713 21700\nf 20298 21715 21713\nf 20299 20309 20310\nf 20299 20310 21730\nf 20299 21730 21715\nf 20300 20301 21732\nf 20300 21732 20311\nf 20301 21716 21717\nf 20301 21717 21732\nf 20302 20304 20313\nf 20302 20313 21721\nf 20302 21721 21706\nf 20303 20314 20315\nf 20303 20315 20304\nf 20304 20315 20313\nf 20305 20306 20316\nf 20306 20307 20318\nf 20306 20318 20316\nf 20307 20308 20319\nf 20307 20319 20318\nf 20308 21723 21724\nf 20308 21724 21739\nf 20308 21739 20319\nf 20309 20320 20321\nf 20309 20321 20310\nf 20310 20321 21730\nf 20311 21732 21749\nf 20311 21749 20312\nf 20312 20323 20322\nf 20312 21749 20323\nf 20313 20315 20325\nf 20313 20325 21738\nf 20313 21736 21721\nf 20313 21738 21736\nf 20314 20324 20325\nf 20314 20325 20315\nf 20316 20318 20317\nf 20317 20318 20327\nf 20317 20327 20326\nf 20318 20319 20328\nf 20318 20328 20327\nf 20319 21739 21740\nf 20319 21740 21755\nf 20319 21755 20328\nf 20320 20329 21760\nf 20320 21748 20321\nf 20320 21760 21748\nf 20321 21746 21730\nf 20321 21748 21746\nf 20322 20323 20331\nf 20323 20332 20331\nf 20323 21749 21762\nf 20323 21762 20332\nf 20324 20333 21764\nf 20324 21754 20325\nf 20324 21764 21754\nf 20325 21752 21738\nf 20325 21754 21752\nf 20326 20327 20335\nf 20327 20328 20337\nf 20327 20337 20335\nf 20328 21755 21756\nf 20328 21756 21767\nf 20328 21767 20337\nf 20329 20330 20339\nf 20329 20339 21771\nf 20329 21771 21760\nf 20330 20338 20339\nf 20331 20332 21773\nf 20331 21773 20340\nf 20332 21762 21763\nf 20332 21763 21773\nf 20333 20334 21766\nf 20333 21766 21764\nf 20334 20341 21766\nf 20335 20337 20336\nf 20336 20337 21768\nf 20336 20344 20343\nf 20336 21768 20344\nf 20337 21767 21768\nf 20338 20345 21779\nf 20338 21772 20339\nf 20338 21779 21772\nf 20339 21772 21771\nf 20340 21773 20346\nf 20341 20342 20348\nf 20341 20348 21782\nf 20341 21775 21766\nf 20341 21782 21775\nf 20342 20347 20348\nf 20343 20344 20349\nf 20344 20350 20349\nf 20344 21768 21777\nf 20344 21777 21784\nf 20344 21784 20350\nf 20345 20351 21787\nf 20345 21787 21779\nf 20346 21773 21781\nf 20346 21781 20352\nf 20347 20353 21789\nf 20347 21783 20348\nf 20347 21789 21783\nf 20348 21783 21782\nf 20349 20350 20355\nf 20350 20356 20355\nf 20350 20357 20356\nf 20350 21784 21785\nf 20350 21785 20357\nf 20351 20358 21792\nf 20351 21792 21787\nf 20352 21781 21788\nf 20352 21788 20359\nf 20353 20354 20361\nf 20353 20361 21794\nf 20353 21794 21789\nf 20354 20360 20361\nf 20355 20356 20362\nf 20356 20357 20364\nf 20356 20364 20362\nf 20357 20365 20364\nf 20357 21785 21791\nf 20357 21791 21796\nf 20357 21796 20365\nf 20358 20366 21797\nf 20358 21797 21792\nf 20359 21788 21793\nf 20359 21793 20367\nf 20360 20368 20369\nf 20360 20369 20361\nf 20361 20369 21794\nf 20362 20364 20363\nf 20363 20364 20370\nf 20364 20365 20371\nf 20364 20371 20370\nf 20365 21796 21801\nf 20365 21801 20371\nf 20366 20372 21803\nf 20366 21803 21797\nf 20367 21793 21798\nf 20367 21798 20373\nf 20368 20374 21805\nf 20368 21800 20369\nf 20368 21805 21800\nf 20369 21799 21794\nf 20369 21800 21799\nf 20370 20371 20376\nf 20371 20377 20376\nf 20371 21801 21807\nf 20371 21807 20377\nf 20372 20378 21809\nf 20372 21809 21803\nf 20373 21798 21804\nf 20373 21804 20379\nf 20374 20375 20381\nf 20374 20381 21811\nf 20374 21811 21805\nf 20375 20380 20381\nf 20376 20377 20382\nf 20377 20383 20382\nf 20377 21807 21813\nf 20377 21813 20383\nf 20378 20384 21815\nf 20378 21815 21809\nf 20379 21804 21810\nf 20379 21810 20385\nf 20380 20386 21817\nf 20380 21812 20381\nf 20380 21817 21812\nf 20381 21812 21811\nf 20382 20383 20387\nf 20383 20388 20387\nf 20383 21813 21819\nf 20383 21819 20388\nf 20384 20389 21821\nf 20384 21821 21815\nf 20385 21810 21816\nf 20385 21816 20390\nf 20386 20391 21823\nf 20386 21823 21817\nf 20387 20388 20393\nf 20388 20394 20393\nf 20388 21819 21825\nf 20388 21825 20394\nf 20389 20395 21827\nf 20389 21827 21821\nf 20390 21816 21822\nf 20390 21822 20396\nf 20391 20392 21824\nf 20391 21824 21823\nf 20392 20397 21824\nf 20393 20394 20399\nf 20394 20401 20399\nf 20394 21825 21831\nf 20394 21831 20401\nf 20395 20402 21834\nf 20395 21834 21827\nf 20396 21822 21828\nf 20396 21828 20403\nf 20397 20398 20405\nf 20397 20405 21836\nf 20397 21829 21824\nf 20397 21836 21829\nf 20398 20404 20405\nf 20399 20401 20400\nf 20400 20401 21832\nf 20400 20410 20408\nf 20400 21832 20410\nf 20401 21831 21832\nf 20402 20411 21842\nf 20402 21842 21834\nf 20403 21828 21835\nf 20403 21835 20412\nf 20404 20406 21837\nf 20404 21837 20405\nf 20405 21837 21836\nf 20406 20407 21838\nf 20406 21838 21837\nf 20407 20413 20414\nf 20407 20414 21838\nf 20408 20410 20409\nf 20409 20410 21840\nf 20409 20490 20488\nf 20409 21840 20490\nf 20410 21832 21839\nf 20410 21839 21840\nf 20411 20491 21923\nf 20411 21923 21842\nf 20412 21835 21843\nf 20412 21843 20493\nf 20413 20415 21845\nf 20413 21845 20414\nf 20414 21844 21838\nf 20414 21845 21844\nf 20415 20416 21846\nf 20415 21846 21845\nf 20416 20417 21847\nf 20416 21847 21846\nf 20417 20418 21848\nf 20417 21848 21847\nf 20418 20419 21849\nf 20418 21849 21848\nf 20419 20420 21850\nf 20419 21850 21849\nf 20420 20421 21851\nf 20420 21851 21850\nf 20421 20422 21852\nf 20421 21852 21851\nf 20422 20423 21853\nf 20422 21853 21852\nf 20423 20424 21854\nf 20423 21854 21853\nf 20424 20425 21855\nf 20424 21855 21854\nf 20425 20426 21856\nf 20425 21856 21855\nf 20426 20427 21857\nf 20426 21857 21856\nf 20427 20428 21858\nf 20427 21858 21857\nf 20428 20429 21859\nf 20428 21859 21858\nf 20429 20430 21860\nf 20429 21860 21859\nf 20430 20431 21861\nf 20430 21861 21860\nf 20431 20432 21862\nf 20431 21862 21861\nf 20432 20433 21863\nf 20432 21863 21862\nf 20433 20434 21864\nf 20433 21864 21863\nf 20434 20435 21865\nf 20434 21865 21864\nf 20435 20436 21866\nf 20435 21866 21865\nf 20436 20437 21867\nf 20436 21867 21866\nf 20437 20438 21868\nf 20437 21868 21867\nf 20438 20439 21869\nf 20438 21869 21868\nf 20439 20440 21870\nf 20439 21870 21869\nf 20440 20441 21871\nf 20440 21871 21870\nf 20441 20442 21872\nf 20441 21872 21871\nf 20442 20443 21873\nf 20442 21873 21872\nf 20443 20444 21874\nf 20443 21874 21873\nf 20444 20445 21875\nf 20444 21875 21874\nf 20445 20446 21876\nf 20445 21876 21875\nf 20446 20447 21877\nf 20446 21877 21876\nf 20447 20448 21878\nf 20447 21878 21877\nf 20448 20449 21879\nf 20448 21879 21878\nf 20449 20450 21880\nf 20449 21880 21879\nf 20450 20451 21881\nf 20450 21881 21880\nf 20451 20452 21882\nf 20451 21882 21881\nf 20452 20453 21883\nf 20452 21883 21882\nf 20453 20454 21884\nf 20453 21884 21883\nf 20454 20455 21885\nf 20454 21885 21884\nf 20455 20456 21886\nf 20455 21886 21885\nf 20456 20457 21887\nf 20456 21887 21886\nf 20457 20458 21888\nf 20457 21888 21887\nf 20458 20459 21889\nf 20458 21889 21888\nf 20459 20460 21890\nf 20459 21890 21889\nf 20460 20461 21891\nf 20460 21891 21890\nf 20461 20462 21892\nf 20461 21892 21891\nf 20462 20463 21893\nf 20462 21893 21892\nf 20463 20464 21894\nf 20463 21894 21893\nf 20464 20465 21895\nf 20464 21895 21894\nf 20465 20466 21896\nf 20465 21896 21895\nf 20466 20467 21897\nf 20466 21897 21896\nf 20467 20468 21898\nf 20467 21898 21897\nf 20468 20469 21899\nf 20468 21899 21898\nf 20469 20470 21900\nf 20469 21900 21899\nf 20470 20471 21901\nf 20470 21901 21900\nf 20471 20472 21902\nf 20471 21902 21901\nf 20472 20473 21903\nf 20472 21903 21902\nf 20473 20474 21904\nf 20473 21904 21903\nf 20474 20475 21905\nf 20474 21905 21904\nf 20475 20476 21906\nf 20475 21906 21905\nf 20476 20477 21907\nf 20476 21907 21906\nf 20477 20478 21908\nf 20477 21908 21907\nf 20478 20479 21909\nf 20478 21909 21908\nf 20479 20480 21910\nf 20479 21910 21909\nf 20480 20481 21911\nf 20480 21911 21910\nf 20481 20482 21912\nf 20481 21912 21911\nf 20482 20483 21913\nf 20482 21913 21912\nf 20483 20484 21914\nf 20483 21914 21913\nf 20484 20485 21915\nf 20484 21915 21914\nf 20485 20486 21916\nf 20485 21916 21915\nf 20486 20487 21917\nf 20486 21917 21916\nf 20487 20489 21918\nf 20487 21918 21917\nf 20488 20490 20489\nf 20489 20490 21921\nf 20489 21919 21918\nf 20489 21921 21919\nf 20490 21840 21920\nf 20490 21920 21921\nf 20491 20492 21923\nf 20492 20494 21926\nf 20492 21924 21923\nf 20492 21926 21924\nf 20493 21843 21925\nf 20493 21925 20495\nf 20494 20496 21929\nf 20494 21929 21926\nf 20495 21925 21927\nf 20495 21927 20498\nf 20496 20497 21929\nf 20497 20499 21933\nf 20497 21930 21929\nf 20497 21933 21930\nf 20498 21927 21931\nf 20498 21931 20501\nf 20499 20500 21933\nf 20500 20502 21938\nf 20500 21934 21933\nf 20500 21938 21934\nf 20501 21931 21935\nf 20501 21935 20504\nf 20502 20503 21938\nf 20503 20520 21954\nf 20503 21939 21938\nf 20503 21954 21939\nf 20504 20505 20522\nf 20504 21935 21936\nf 20504 21936 20505\nf 20505 20523 20522\nf 20505 21936 21940\nf 20505 21940 21956\nf 20505 21956 20523\nf 20506 20595 20597\nf 20506 20597 22032\nf 20506 21941 20507\nf 20506 22032 21941\nf 20507 21941 21942\nf 20507 21942 20508\nf 20508 21942 21943\nf 20508 21943 20509\nf 20509 21943 21944\nf 20509 21944 20510\nf 20510 21944 21945\nf 20510 21945 20511\nf 20511 21945 21946\nf 20511 21946 20512\nf 20512 21946 21947\nf 20512 21947 20513\nf 20513 21947 21948\nf 20513 21948 20514\nf 20514 21948 21949\nf 20514 21949 20515\nf 20515 21949 21950\nf 20515 21950 20516\nf 20516 21950 21951\nf 20516 21951 20517\nf 20517 21951 21952\nf 20517 21952 20518\nf 20518 21952 21953\nf 20518 21953 20519\nf 20519 21953 21955\nf 20519 21955 20521\nf 20520 20521 21954\nf 20521 21955 21954\nf 20522 20523 20598\nf 20523 20599 20598\nf 20523 21956 22036\nf 20523 22036 20599\nf 20524 20603 22046\nf 20524 21960 21961\nf 20524 21961 20525\nf 20524 22046 21960\nf 20525 21961 21962\nf 20525 21962 20526\nf 20526 21962 21963\nf 20526 21963 20527\nf 20527 21963 21964\nf 20527 21964 20528\nf 20528 21964 21965\nf 20528 21965 20529\nf 20529 21965 21966\nf 20529 21966 20530\nf 20530 21966 21967\nf 20530 21967 20531\nf 20531 21967 21968\nf 20531 21968 20532\nf 20532 21968 21969\nf 20532 21969 20533\nf 20533 21969 21970\nf 20533 21970 20534\nf 20534 21970 21971\nf 20534 21971 20535\nf 20535 21971 21972\nf 20535 21972 20536\nf 20536 21972 21973\nf 20536 21973 20537\nf 20537 21973 21974\nf 20537 21974 20538\nf 20538 21974 21975\nf 20538 21975 20539\nf 20539 21975 21976\nf 20539 21976 20540\nf 20540 21976 21977\nf 20540 21977 20541\nf 20541 21977 21978\nf 20541 21978 20542\nf 20542 21978 21979\nf 20542 21979 20543\nf 20543 21979 21980\nf 20543 21980 20544\nf 20544 21980 21981\nf 20544 21981 20545\nf 20545 21981 21982\nf 20545 21982 20546\nf 20546 21982 21983\nf 20546 21983 20547\nf 20547 21983 21984\nf 20547 21984 20548\nf 20548 21984 21985\nf 20548 21985 20549\nf 20549 21985 21986\nf 20549 21986 20550\nf 20550 21986 21987\nf 20550 21987 20551\nf 20551 21987 21988\nf 20551 21988 20552\nf 20552 21988 21989\nf 20552 21989 20553\nf 20553 21989 21990\nf 20553 21990 20554\nf 20554 21990 21991\nf 20554 21991 20555\nf 20555 21991 21992\nf 20555 21992 20556\nf 20556 21992 21993\nf 20556 21993 20557\nf 20557 21993 21994\nf 20557 21994 20558\nf 20558 21994 21995\nf 20558 21995 20559\nf 20559 21995 21996\nf 20559 21996 20560\nf 20560 21996 21997\nf 20560 21997 20561\nf 20561 21997 21998\nf 20561 21998 20562\nf 20562 21998 21999\nf 20562 21999 20563\nf 20563 21999 22000\nf 20563 22000 20564\nf 20564 22000 22001\nf 20564 22001 20565\nf 20565 22001 22002\nf 20565 22002 20566\nf 20566 22002 22003\nf 20566 22003 20567\nf 20567 22003 22004\nf 20567 22004 20568\nf 20568 22004 22005\nf 20568 22005 20569\nf 20569 22005 22006\nf 20569 22006 20570\nf 20570 22006 22007\nf 20570 22007 20571\nf 20571 22007 22008\nf 20571 22008 20572\nf 20572 22008 22009\nf 20572 22009 20573\nf 20573 22009 22010\nf 20573 22010 20574\nf 20574 22010 22011\nf 20574 22011 20575\nf 20575 22011 22012\nf 20575 22012 20576\nf 20576 22012 22013\nf 20576 22013 20577\nf 20577 22013 22014\nf 20577 22014 20578\nf 20578 22014 22015\nf 20578 22015 20579\nf 20579 22015 22016\nf 20579 22016 20580\nf 20580 22016 22017\nf 20580 22017 20581\nf 20581 22017 22018\nf 20581 22018 20582\nf 20582 22018 22019\nf 20582 22019 20583\nf 20583 22019 22020\nf 20583 22020 20584\nf 20584 22020 22021\nf 20584 22021 20585\nf 20585 22021 22022\nf 20585 22022 20586\nf 20586 22022 22023\nf 20586 22023 20587\nf 20587 22023 22024\nf 20587 22024 20588\nf 20588 22024 22025\nf 20588 22025 20589\nf 20589 22025 22026\nf 20589 22026 20590\nf 20590 22026 22027\nf 20590 22027 20591\nf 20591 22027 22028\nf 20591 22028 20592\nf 20592 22028 22029\nf 20592 22029 20593\nf 20593 22029 22030\nf 20593 22030 20594\nf 20594 22030 22031\nf 20594 22031 20596\nf 20595 20596 20597\nf 20596 22031 22033\nf 20596 22033 20597\nf 20597 22033 22032\nf 20598 20599 20605\nf 20599 20606 20605\nf 20599 22036 22048\nf 20599 22048 20606\nf 20600 20601 20609\nf 20600 20608 22040\nf 20600 20609 20608\nf 20600 21958 21959\nf 20600 21959 20601\nf 20600 22040 21958\nf 20601 20611 20609\nf 20601 21959 22043\nf 20601 22043 22052\nf 20601 22052 20611\nf 20602 20612 20614\nf 20602 20614 22044\nf 20602 22044 22045\nf 20602 22045 22047\nf 20602 22047 20604\nf 20603 20604 22046\nf 20604 22047 22046\nf 20605 20606 20615\nf 20606 20617 20615\nf 20606 20618 20617\nf 20606 22048 22050\nf 20606 22050 20618\nf 20607 20608 20619\nf 20607 20618 22049\nf 20607 20619 20618\nf 20607 22038 22041\nf 20607 22041 20608\nf 20607 22049 22038\nf 20608 20609 20620\nf 20608 20620 20619\nf 20608 22041 22040\nf 20609 20611 20622\nf 20609 20622 20620\nf 20610 20611 20624\nf 20610 20621 20622\nf 20610 20622 20611\nf 20610 20624 20623\nf 20611 22052 22053\nf 20611 22053 20624\nf 20612 20613 20614\nf 20613 20628 20630\nf 20613 20630 22058\nf 20613 22058 20614\nf 20614 22057 22044\nf 20614 22058 22057\nf 20615 20617 20616\nf 20616 20617 20631\nf 20617 20618 20632\nf 20617 20632 20631\nf 20618 20619 20632\nf 20618 22050 22049\nf 20619 20620 20633\nf 20619 20633 20632\nf 20620 20622 20634\nf 20620 20634 20633\nf 20621 20635 20636\nf 20621 20636 20622\nf 20622 20636 20634\nf 20623 20624 20637\nf 20624 20625 20639\nf 20624 20639 20637\nf 20624 22053 22055\nf 20624 22055 20625\nf 20625 20627 20641\nf 20625 20641 20639\nf 20625 22055 22056\nf 20625 22056 20627\nf 20626 20627 20629\nf 20626 20640 20641\nf 20626 20641 20627\nf 20627 20630 20629\nf 20627 22056 22058\nf 20627 22058 20630\nf 20628 20629 20630\nf 20631 20632 20642\nf 20632 20633 20643\nf 20632 20643 20642\nf 20633 20634 20644\nf 20633 20644 20643\nf 20634 20636 20645\nf 20634 20645 20644\nf 20635 20638 20647\nf 20635 20647 20636\nf 20636 20646 20645\nf 20636 20647 20646\nf 20637 20639 20638\nf 20638 20639 20647\nf 20639 20641 20648\nf 20639 20648 20647\nf 20640 20649 20650\nf 20640 20650 20641\nf 20641 20650 20648\nf 20642 20643 20651\nf 20643 20644 20653\nf 20643 20653 20651\nf 20644 20645 20654\nf 20644 20654 20653\nf 20645 20646 20655\nf 20645 20655 20654\nf 20646 20647 20656\nf 20646 20656 20655\nf 20647 20648 20657\nf 20647 20657 20656\nf 20648 20650 20658\nf 20648 20658 20657\nf 20649 20659 20660\nf 20649 20660 20650\nf 20650 20660 20658\nf 20651 20653 20652\nf 20652 20653 20662\nf 20652 20662 20661\nf 20653 20654 20663\nf 20653 20663 20662\nf 20654 20655 20664\nf 20654 20664 20663\nf 20655 20656 20665\nf 20655 20665 20664\nf 20656 20657 20666\nf 20656 20666 20665\nf 20657 20658 20667\nf 20657 20667 20666\nf 20658 20660 20668\nf 20658 20668 20667\nf 20659 20669 20670\nf 20659 20670 20660\nf 20660 20670 20668\nf 20661 20662 20671\nf 20662 20663 20672\nf 20662 20672 20671\nf 20663 20664 20673\nf 20663 20673 20672\nf 20664 20665 20674\nf 20664 20674 20673\nf 20665 20666 20675\nf 20665 20675 20674\nf 20666 20667 20676\nf 20666 20676 20675\nf 20667 20668 20677\nf 20667 20677 20676\nf 20668 20670 20678\nf 20668 20678 20677\nf 20669 20679 20680\nf 20669 20680 20670\nf 20670 20680 20678\nf 20671 20672 20681\nf 20672 20673 20682\nf 20672 20682 20681\nf 20673 20674 20683\nf 20673 20683 20682\nf 20674 20675 20684\nf 20674 20684 20683\nf 20675 20676 22060\nf 20675 22060 22063\nf 20675 22063 20684\nf 20676 20677 22061\nf 20676 22061 22060\nf 20677 20678 20685\nf 20677 20685 22062\nf 20677 22062 22061\nf 20678 20680 20685\nf 20679 20686 20687\nf 20679 20687 20680\nf 20680 20687 20685\nf 20681 20682 20688\nf 20682 20683 20689\nf 20682 20689 20688\nf 20683 20684 20690\nf 20683 20690 20689\nf 20684 20691 20690\nf 20684 22063 22069\nf 20684 22069 20691\nf 20685 20687 20693\nf 20685 20693 22068\nf 20685 22066 22062\nf 20685 22068 22066\nf 20686 20692 20693\nf 20686 20693 20687\nf 20688 20689 20695\nf 20689 20690 20696\nf 20689 20696 20695\nf 20690 20691 20697\nf 20690 20697 20696\nf 20691 22069 22070\nf 20691 22070 22074\nf 20691 22074 20697\nf 20692 20694 20700\nf 20692 20700 20693\nf 20693 20698 22072\nf 20693 20700 20698\nf 20693 22072 22068\nf 20694 20699 20700\nf 20695 20696 20701\nf 20696 20697 20702\nf 20696 20702 20701\nf 20697 20703 20702\nf 20697 22074 22079\nf 20697 22079 20703\nf 20698 20700 20705\nf 20698 20705 22078\nf 20698 22076 22072\nf 20698 22078 22076\nf 20699 20704 20705\nf 20699 20705 20700\nf 20701 20702 20706\nf 20702 20703 20707\nf 20702 20707 20706\nf 20703 22079 22080\nf 20703 22080 22084\nf 20703 22084 20707\nf 20704 20708 22086\nf 20704 22083 20705\nf 20704 22086 22083\nf 20705 22081 22078\nf 20705 22083 22081\nf 20706 20707 20709\nf 20707 20710 20709\nf 20707 22084 22088\nf 20707 22088 20710\nf 20708 20711 22090\nf 20708 22090 22086\nf 20709 20710 20713\nf 20710 20714 20713\nf 20710 22088 22091\nf 20710 22091 20714\nf 20711 20712 20716\nf 20711 20716 22093\nf 20711 22093 22090\nf 20712 20715 20716\nf 20713 20714 20717\nf 20714 20718 20717\nf 20714 22091 22095\nf 20714 22095 20718\nf 20715 20719 22096\nf 20715 22094 20716\nf 20715 22096 22094\nf 20716 22094 22093\nf 20717 20718 20720\nf 20718 20721 20720\nf 20718 22095 22098\nf 20718 22098 20721\nf 20719 20722 22099\nf 20719 22099 22096\nf 20720 20721 20723\nf 20721 20724 20723\nf 20721 22098 22100\nf 20721 22100 20724\nf 20722 20725 22101\nf 20722 22101 22099\nf 20723 20724 20726\nf 20724 20727 20726\nf 20724 22100 22102\nf 20724 22102 20727\nf 20725 20728 22103\nf 20725 22103 22101\nf 20726 20727 20730\nf 20727 20731 20730\nf 20727 22102 22104\nf 20727 22104 20731\nf 20728 20729 20733\nf 20728 20733 22105\nf 20728 22105 22103\nf 20729 20732 20733\nf 20730 20731 20734\nf 20731 20735 20734\nf 20731 22104 22106\nf 20731 22106 20735\nf 20732 20736 20737\nf 20732 20737 20733\nf 20733 20737 22105\nf 20734 20735 20738\nf 20735 20739 20738\nf 20735 22106 22108\nf 20735 22108 20739\nf 20736 20740 20741\nf 20736 20741 20737\nf 20737 20741 22107\nf 20737 22107 22105\nf 20738 20739 20742\nf 20739 20743 20742\nf 20739 22108 22110\nf 20739 22110 20743\nf 20740 20744 20745\nf 20740 20745 20741\nf 20741 20745 22109\nf 20741 22109 22107\nf 20742 20743 20746\nf 20743 20747 20746\nf 20743 22110 22112\nf 20743 22112 20747\nf 20744 20748 20749\nf 20744 20749 20745\nf 20745 20749 22111\nf 20745 22111 22109\nf 20746 20747 20750\nf 20747 20751 20750\nf 20747 22112 22114\nf 20747 22114 20751\nf 20748 20752 20753\nf 20748 20753 20749\nf 20749 20753 22113\nf 20749 22113 22111\nf 20750 20751 20754\nf 20751 20755 20754\nf 20751 22114 22116\nf 20751 22116 20755\nf 20752 20756 20758\nf 20752 20758 20753\nf 20753 20758 22115\nf 20753 22115 22113\nf 20754 20755 20759\nf 20755 20760 20759\nf 20755 22116 22118\nf 20755 22118 20760\nf 20756 20757 20758\nf 20757 20761 22117\nf 20757 22117 20758\nf 20758 22117 22115\nf 20759 20760 20762\nf 20760 20764 20762\nf 20760 22118 22120\nf 20760 22120 20764\nf 20761 20765 22121\nf 20761 22119 22117\nf 20761 22121 22119\nf 20762 20764 20763\nf 20763 20764 20766\nf 20764 22120 20766\nf 20765 20767 22124\nf 20765 22124 22121\nf 20766 22120 22122\nf 20766 22122 20768\nf 20767 20769 22127\nf 20767 22127 22124\nf 20768 22122 22125\nf 20768 22125 20771\nf 20769 20770 22127\nf 20770 20772 22132\nf 20770 22128 22127\nf 20770 22132 22128\nf 20771 22125 22130\nf 20771 22130 20773\nf 20772 20774 22135\nf 20772 22135 22132\nf 20773 22130 22133\nf 20773 22133 20776\nf 20774 20775 22135\nf 20775 20778 22140\nf 20775 22136 22135\nf 20775 22140 22136\nf 20776 22133 22138\nf 20776 22138 22143\nf 20776 22143 20777\nf 20777 20780 20779\nf 20777 22143 20780\nf 20778 20781 22140\nf 20779 20780 20783\nf 20780 20784 20783\nf 20780 22143 22146\nf 20780 22146 20784\nf 20781 20782 22140\nf 20781 20785 20786\nf 20781 20786 20782\nf 20782 20786 22145\nf 20782 22141 22140\nf 20782 22145 22141\nf 20783 20784 20787\nf 20784 20788 20787\nf 20784 22146 22149\nf 20784 22149 20788\nf 20785 20789 20790\nf 20785 20790 20786\nf 20786 20790 22148\nf 20786 22148 22145\nf 20787 20788 20791\nf 20788 20792 20791\nf 20788 22149 22152\nf 20788 22152 20792\nf 20789 20793 20794\nf 20789 20794 20790\nf 20790 20794 22151\nf 20790 22151 22148\nf 20791 20792 20795\nf 20792 20796 20795\nf 20792 22152 22155\nf 20792 22155 20796\nf 20793 20797 20798\nf 20793 20798 20794\nf 20794 20798 22154\nf 20794 22154 22151\nf 20795 20796 20799\nf 20796 20800 20799\nf 20796 22155 22158\nf 20796 22158 20800\nf 20797 20801 20802\nf 20797 20802 20798\nf 20798 20802 22157\nf 20798 22157 22154\nf 20799 20800 20803\nf 20800 20804 20803\nf 20800 22158 22160\nf 20800 22160 20804\nf 20801 20805 20806\nf 20801 20806 20802\nf 20802 20806 22159\nf 20802 22159 22157\nf 20803 20804 20807\nf 20804 20808 20807\nf 20804 22160 22163\nf 20804 22163 20808\nf 20805 20809 22164\nf 20805 22162 20806\nf 20805 22164 22162\nf 20806 22161 22159\nf 20806 22162 22161\nf 20807 20808 20810\nf 20808 20811 20810\nf 20808 22163 22166\nf 20808 22166 20811\nf 20809 20812 22167\nf 20809 22167 22164\nf 20810 20811 20813\nf 20811 20814 20813\nf 20811 22166 22169\nf 20811 22169 20814\nf 20812 20815 22171\nf 20812 22171 22167\nf 20813 20814 20816\nf 20814 20817 20816\nf 20814 22169 22173\nf 20814 22173 20817\nf 20815 20818 22175\nf 20815 22175 22171\nf 20816 20817 20819\nf 20817 20820 20819\nf 20817 22173 22178\nf 20817 22178 20820\nf 20818 20821 22175\nf 20819 20820 20823\nf 20820 20824 20823\nf 20820 20825 20824\nf 20820 22178 22179\nf 20820 22179 20825\nf 20821 20822 22175\nf 20821 20826 20828\nf 20821 20828 20822\nf 20822 20828 22182\nf 20822 22176 22175\nf 20822 22182 22176\nf 20823 20824 20829\nf 20824 20825 20830\nf 20824 20830 20829\nf 20825 20831 20830\nf 20825 20832 20831\nf 20825 22179 22183\nf 20825 22183 22184\nf 20825 22184 20832\nf 20826 20827 20828\nf 20827 20833 22186\nf 20827 22186 20828\nf 20828 22186 22182\nf 20829 20830 20834\nf 20830 20831 20835\nf 20830 20835 20834\nf 20831 20832 20836\nf 20831 20836 20835\nf 20832 20837 20836\nf 20832 22184 22188\nf 20832 22188 22192\nf 20832 22192 20837\nf 20833 20838 22189\nf 20833 22189 22186\nf 20834 20835 20840\nf 20835 20836 20841\nf 20835 20841 20840\nf 20836 20837 20842\nf 20836 20842 20841\nf 20837 20843 20842\nf 20837 22192 22196\nf 20837 22196 20843\nf 20838 20839 22189\nf 20838 20844 20846\nf 20838 20846 20839\nf 20839 20846 22194\nf 20839 22190 22189\nf 20839 22194 22190\nf 20840 20841 20847\nf 20841 20842 20848\nf 20841 20848 20847\nf 20842 20843 20849\nf 20842 20849 20848\nf 20843 20850 20849\nf 20843 22196 22200\nf 20843 22200 20850\nf 20844 20845 20846\nf 20845 20851 22198\nf 20845 22198 20846\nf 20846 22198 22194\nf 20847 20848 20852\nf 20848 20849 20853\nf 20848 20853 20852\nf 20849 20850 20854\nf 20849 20854 20853\nf 20850 20855 20854\nf 20850 22200 22206\nf 20850 22206 20855\nf 20851 20856 22203\nf 20851 22203 22198\nf 20852 20853 20858\nf 20853 20854 20859\nf 20853 20859 20858\nf 20854 20855 20860\nf 20854 20860 20859\nf 20855 20861 20860\nf 20855 22206 22210\nf 20855 22210 20861\nf 20856 20857 22203\nf 20856 20862 20863\nf 20856 20863 20857\nf 20857 20863 22208\nf 20857 22204 22203\nf 20857 22208 22204\nf 20858 20859 20864\nf 20859 20860 20865\nf 20859 20865 20864\nf 20860 20861 20866\nf 20860 20866 20865\nf 20861 20867 20866\nf 20861 22210 22214\nf 20861 22214 20867\nf 20862 20868 20869\nf 20862 20869 20863\nf 20863 20869 22212\nf 20863 22212 22208\nf 20864 20865 20870\nf 20865 20866 20871\nf 20865 20871 20870\nf 20866 20867 20872\nf 20866 20872 20871\nf 20867 20873 20872\nf 20867 20874 20873\nf 20867 22214 22215\nf 20867 22215 20874\nf 20868 20875 20876\nf 20868 20876 20869\nf 20869 20876 22217\nf 20869 22217 22212\nf 20870 20871 20877\nf 20871 20872 20878\nf 20871 20878 20877\nf 20872 20873 20879\nf 20872 20879 20878\nf 20873 20874 20880\nf 20873 20880 20879\nf 20874 20881 20880\nf 20874 20882 20881\nf 20874 22215 22219\nf 20874 22219 22221\nf 20874 22221 20882\nf 20875 20883 20884\nf 20875 20884 20876\nf 20876 20882 22220\nf 20876 20884 20882\nf 20876 22220 22217\nf 20877 20878 20885\nf 20878 20879 20887\nf 20878 20887 20885\nf 20879 20880 20888\nf 20879 20888 20887\nf 20880 20881 20889\nf 20880 20889 20888\nf 20881 20882 20890\nf 20881 20890 20889\nf 20882 20884 20891\nf 20882 20891 20890\nf 20882 22221 22220\nf 20883 20892 20893\nf 20883 20893 20884\nf 20884 20893 20891\nf 20885 20887 20886\nf 20886 20887 20895\nf 20886 20895 20894\nf 20887 20888 20896\nf 20887 20896 20895\nf 20888 20889 20897\nf 20888 20897 20896\nf 20889 20890 20898\nf 20889 20898 20897\nf 20890 20891 20899\nf 20890 20899 22223\nf 20890 22223 22224\nf 20890 22224 20898\nf 20891 20893 20899\nf 20892 20900 20901\nf 20892 20901 20893\nf 20893 20901 20899\nf 20894 20895 20902\nf 20895 20896 20903\nf 20895 20903 20902\nf 20896 20897 20904\nf 20896 20904 20903\nf 20897 20898 20905\nf 20897 20905 20904\nf 20898 20906 20905\nf 20898 22224 22227\nf 20898 22227 20906\nf 20899 20901 20907\nf 20899 20907 22225\nf 20899 22225 22223\nf 20900 20908 20910\nf 20900 20910 20901\nf 20901 20910 20907\nf 20902 20903 20911\nf 20903 20904 20912\nf 20903 20912 20911\nf 20904 20905 20913\nf 20904 20913 20912\nf 20905 20906 20914\nf 20905 20914 20913\nf 20906 20915 20914\nf 20906 22227 22231\nf 20906 22231 20915\nf 20907 20910 22230\nf 20907 22228 22225\nf 20907 22230 22228\nf 20908 20909 20910\nf 20909 20916 20910\nf 20910 20916 22230\nf 20911 20912 20917\nf 20912 20913 20918\nf 20912 20918 20917\nf 20913 20914 20919\nf 20913 20919 20918\nf 20914 20915 20920\nf 20914 20920 20919\nf 20915 20921 20920\nf 20915 22231 22235\nf 20915 22235 20921\nf 20916 20922 22238\nf 20916 22233 22230\nf 20916 22238 22233\nf 20917 20918 20923\nf 20918 20919 20924\nf 20918 20924 20923\nf 20919 20920 20925\nf 20919 20925 20924\nf 20920 20921 20926\nf 20920 20926 20925\nf 20921 22235 22236\nf 20921 22236 22240\nf 20921 22240 20926\nf 20922 20927 22243\nf 20922 22243 22238\nf 20923 20924 20928\nf 20924 20925 20929\nf 20924 20929 20928\nf 20925 20926 20930\nf 20925 20930 20929\nf 20926 20931 20930\nf 20926 22240 22246\nf 20926 22246 20931\nf 20927 20932 22243\nf 20928 20929 20934\nf 20929 20930 20935\nf 20929 20935 20934\nf 20930 20931 20936\nf 20930 20936 20935\nf 20931 22246 22247\nf 20931 22247 22251\nf 20931 22251 20936\nf 20932 20933 22243\nf 20932 20937 20938\nf 20932 20938 20933\nf 20933 20938 22249\nf 20933 22244 22243\nf 20933 22249 22244\nf 20934 20935 20939\nf 20935 20936 20940\nf 20935 20940 20939\nf 20936 20941 20940\nf 20936 22251 22256\nf 20936 22256 20941\nf 20937 20942 20943\nf 20937 20943 20938\nf 20938 20943 22254\nf 20938 22254 22249\nf 20939 20940 20944\nf 20940 20941 20946\nf 20940 20946 20944\nf 20941 20947 20946\nf 20941 22256 22261\nf 20941 22261 20947\nf 20942 20948 20949\nf 20942 20949 20943\nf 20943 20949 22259\nf 20943 22259 22254\nf 20944 20946 20945\nf 20945 20946 20951\nf 20945 20951 20950\nf 20946 20947 20952\nf 20946 20952 20951\nf 20947 22261 22262\nf 20947 22262 22266\nf 20947 22266 20952\nf 20948 20953 20954\nf 20948 20954 20949\nf 20949 20954 22264\nf 20949 22264 22259\nf 20950 20951 20955\nf 20951 20952 20956\nf 20951 20956 20955\nf 20952 20957 20956\nf 20952 22266 22271\nf 20952 22271 20957\nf 20953 20958 20959\nf 20953 20959 20954\nf 20954 20959 22269\nf 20954 22269 22264\nf 20955 20956 20960\nf 20956 20957 20961\nf 20956 20961 20960\nf 20957 20962 20961\nf 20957 22271 22276\nf 20957 22276 20962\nf 20958 20963 20965\nf 20958 20965 20959\nf 20959 20965 22274\nf 20959 22274 22269\nf 20960 20961 20966\nf 20961 20962 20967\nf 20961 20967 20966\nf 20962 22276 22277\nf 20962 22277 22282\nf 20962 22282 20967\nf 20963 20964 20965\nf 20964 20968 22280\nf 20964 22280 20965\nf 20965 22280 22274\nf 20966 20967 20970\nf 20967 20971 20970\nf 20967 22282 22286\nf 20967 22286 20971\nf 20968 20969 20973\nf 20968 20973 22289\nf 20968 22285 22280\nf 20968 22289 22285\nf 20969 20972 20973\nf 20970 20971 22291\nf 20970 22291 20974\nf 20971 22286 22287\nf 20971 22287 22291\nf 20972 20976 22293\nf 20972 22290 20973\nf 20972 22293 22290\nf 20973 22290 22289\nf 20974 22291 22294\nf 20974 22294 20975\nf 20975 20979 20978\nf 20975 22294 20979\nf 20976 20977 20981\nf 20976 20981 22295\nf 20976 22295 22293\nf 20977 20980 20981\nf 20978 20979 20982\nf 20979 20983 20982\nf 20979 22294 22297\nf 20979 22297 20983\nf 20980 20984 22298\nf 20980 22296 20981\nf 20980 22298 22296\nf 20981 22296 22295\nf 20982 20983 20985\nf 20983 20986 20985\nf 20983 22297 22300\nf 20983 22300 20986\nf 20984 20987 22301\nf 20984 22301 22298\nf 20985 20986 20988\nf 20986 20989 20988\nf 20986 22300 22302\nf 20986 22302 20989\nf 20987 20990 22304\nf 20987 22304 22301\nf 20988 20989 22305\nf 20988 22305 20991\nf 20989 22302 22303\nf 20989 22303 22305\nf 20990 20992 22307\nf 20990 22307 22304\nf 20991 22305 20993\nf 20992 20994 22310\nf 20992 22310 22307\nf 20993 22305 22308\nf 20993 22308 20995\nf 20994 20996 22313\nf 20994 22313 22310\nf 20995 22308 22311\nf 20995 22311 20997\nf 20996 20998 22316\nf 20996 22316 22313\nf 20997 22311 22314\nf 20997 22314 20999\nf 20998 21000 22319\nf 20998 22319 22316\nf 20999 22314 22317\nf 20999 22317 21001\nf 21000 21002 22322\nf 21000 22322 22319\nf 21001 22317 22320\nf 21001 22320 21003\nf 21002 21004 22325\nf 21002 22325 22322\nf 21003 22320 22323\nf 21003 22323 21005\nf 21004 21006 22325\nf 21005 22323 22328\nf 21005 22328 21009\nf 21006 21007 21008\nf 21006 21008 22325\nf 21007 21010 22330\nf 21007 22330 21008\nf 21008 22326 22325\nf 21008 22330 22326\nf 21009 22328 22331\nf 21009 22331 21011\nf 21010 21013 22336\nf 21010 22334 22330\nf 21010 22336 22334\nf 21011 21012 21014\nf 21011 22331 22332\nf 21011 22332 21012\nf 21012 21015 21014\nf 21012 22332 22335\nf 21012 22335 22339\nf 21012 22339 21015\nf 21013 21016 22336\nf 21014 21015 21019\nf 21015 21020 21019\nf 21015 22339 22341\nf 21015 22341 21020\nf 21016 21017 21018\nf 21016 21018 22336\nf 21017 21021 22340\nf 21017 22340 21018\nf 21018 22337 22336\nf 21018 22340 22337\nf 21019 21020 21023\nf 21020 21025 21023\nf 21020 22341 22344\nf 21020 22344 21025\nf 21021 21022 22342\nf 21021 22342 22340\nf 21022 21026 22347\nf 21022 22343 22342\nf 21022 22347 22343\nf 21023 21025 21024\nf 21024 21025 21029\nf 21024 21029 21028\nf 21025 22344 22345\nf 21025 22345 21029\nf 21026 21027 22347\nf 21027 21030 22350\nf 21027 22348 22347\nf 21027 22350 22348\nf 21028 21029 21032\nf 21029 21033 21032\nf 21029 22345 22349\nf 21029 22349 22352\nf 21029 22352 21033\nf 21030 21031 22350\nf 21031 21034 22355\nf 21031 22351 22350\nf 21031 22355 22351\nf 21032 21033 21035\nf 21033 21037 21035\nf 21033 21038 21037\nf 21033 22352 22353\nf 21033 22353 21038\nf 21034 21039 22355\nf 21035 21037 21036\nf 21036 21037 21042\nf 21037 21038 21045\nf 21037 21045 21042\nf 21038 21041 21045\nf 21038 22353 22356\nf 21038 22356 21041\nf 21039 21040 21041\nf 21039 21041 22355\nf 21040 21043 21045\nf 21040 21045 21041\nf 21041 22356 22355\nf 21042 21045 21044\nf 21043 21044 21045\nf 21046 21047 21056\nf 21046 21055 21053\nf 21046 21056 21055\nf 21047 21048 21057\nf 21047 21057 21056\nf 21048 21049 21058\nf 21048 21058 21057\nf 21049 21050 21059\nf 21049 21059 21058\nf 21050 21051 21061\nf 21050 21061 21059\nf 21051 21060 21061\nf 21052 21054 21066\nf 21052 21065 21064\nf 21052 21066 21065\nf 21053 21055 21054\nf 21054 21055 21066\nf 21055 21056 21067\nf 21055 21067 21066\nf 21056 21057 21068\nf 21056 21068 21067\nf 21057 21058 21069\nf 21057 21069 21068\nf 21058 21059 21070\nf 21058 21070 21069\nf 21059 21061 21071\nf 21059 21071 21070\nf 21060 21062 21074\nf 21060 21074 21061\nf 21061 21072 21071\nf 21061 21074 21072\nf 21062 21073 21074\nf 21063 21076 21078\nf 21063 21078 21075\nf 21064 21065 21079\nf 21065 21066 21080\nf 21065 21080 21079\nf 21066 21067 21081\nf 21066 21081 21080\nf 21067 21068 21082\nf 21067 21082 21081\nf 21068 21069 21083\nf 21068 21083 21082\nf 21069 21070 21084\nf 21069 21084 21083\nf 21070 21071 21085\nf 21070 21085 21084\nf 21071 21072 21086\nf 21071 21086 21085\nf 21072 21074 21087\nf 21072 21087 21086\nf 21073 21088 21089\nf 21073 21089 21074\nf 21074 21089 21087\nf 21075 21078 21077\nf 21076 21077 21078\nf 21079 21080 21091\nf 21080 21081 21092\nf 21080 21092 21091\nf 21081 21082 21093\nf 21081 21093 21092\nf 21082 21083 21094\nf 21082 21094 21093\nf 21083 21084 21095\nf 21083 21095 21094\nf 21084 21085 21096\nf 21084 21096 21095\nf 21085 21086 21097\nf 21085 21097 21096\nf 21086 21087 21098\nf 21086 21098 21097\nf 21087 21089 21099\nf 21087 21099 21098\nf 21088 21090 21102\nf 21088 21102 21089\nf 21089 21100 21099\nf 21089 21102 21100\nf 21090 21101 21102\nf 21091 21092 21103\nf 21092 21093 21104\nf 21092 21104 21103\nf 21093 21094 21105\nf 21093 21105 21104\nf 21094 21095 21106\nf 21094 21106 21105\nf 21095 21096 21107\nf 21095 21107 21106\nf 21096 21097 21108\nf 21096 21108 21107\nf 21097 21098 21109\nf 21097 21109 21108\nf 21098 21099 21110\nf 21098 21110 21109\nf 21099 21100 21111\nf 21099 21111 21110\nf 21100 21102 21112\nf 21100 21112 21111\nf 21101 21113 21114\nf 21101 21114 21102\nf 21102 21114 21112\nf 21103 21104 21115\nf 21104 21105 21116\nf 21104 21116 21115\nf 21105 21106 21117\nf 21105 21117 21116\nf 21106 21107 21118\nf 21106 21118 21117\nf 21107 21108 21119\nf 21107 21119 21118\nf 21108 21109 21120\nf 21108 21120 21119\nf 21109 21110 21121\nf 21109 21121 21120\nf 21110 21111 21122\nf 21110 21122 21121\nf 21111 21112 21123\nf 21111 21123 21122\nf 21112 21114 21124\nf 21112 21124 21123\nf 21113 21125 21126\nf 21113 21126 21114\nf 21114 21126 21124\nf 21115 21116 21127\nf 21116 21117 21129\nf 21116 21129 21127\nf 21117 21118 21130\nf 21117 21130 21129\nf 21118 21119 21131\nf 21118 21131 21130\nf 21119 21120 21132\nf 21119 21132 21131\nf 21120 21121 21133\nf 21120 21133 21132\nf 21121 21122 21134\nf 21121 21134 21133\nf 21122 21123 21135\nf 21122 21135 21134\nf 21123 21124 21136\nf 21123 21136 21135\nf 21124 21126 21137\nf 21124 21137 21136\nf 21125 21138 21139\nf 21125 21139 21126\nf 21126 21139 21137\nf 21127 21129 21128\nf 21128 21129 21140\nf 21129 21130 21141\nf 21129 21141 21140\nf 21130 21131 21141\nf 21131 21132 21142\nf 21131 21142 21141\nf 21132 21133 21143\nf 21132 21143 21142\nf 21133 21134 21144\nf 21133 21144 21143\nf 21134 21135 21145\nf 21134 21145 21144\nf 21135 21136 21146\nf 21135 21146 21145\nf 21136 21137 21147\nf 21136 21147 21146\nf 21137 21139 21148\nf 21137 21148 21147\nf 21138 21149 21150\nf 21138 21150 21139\nf 21139 21150 21148\nf 21140 21141 21151\nf 21141 21142 21152\nf 21141 21152 21151\nf 21142 21143 21153\nf 21142 21153 21152\nf 21143 21144 21154\nf 21143 21154 21153\nf 21144 21145 21155\nf 21144 21155 21154\nf 21145 21146 21156\nf 21145 21156 21155\nf 21146 21147 21157\nf 21146 21157 21156\nf 21147 21148 21158\nf 21147 21158 21157\nf 21148 21150 21159\nf 21148 21159 21158\nf 21149 21160 21162\nf 21149 21162 21150\nf 21150 21162 21159\nf 21151 21152 21163\nf 21152 21153 21164\nf 21152 21164 21163\nf 21153 21154 21165\nf 21153 21165 21164\nf 21154 21155 21166\nf 21154 21166 21165\nf 21155 21156 21167\nf 21155 21167 21166\nf 21156 21157 21168\nf 21156 21168 21167\nf 21157 21158 21169\nf 21157 21169 21168\nf 21158 21159 21170\nf 21158 21170 21169\nf 21159 21162 21173\nf 21159 21173 21170\nf 21160 21161 21162\nf 21161 21171 21173\nf 21161 21173 21162\nf 21163 21164 21174\nf 21164 21165 21175\nf 21164 21175 21174\nf 21165 21166 21176\nf 21165 21176 21175\nf 21166 21167 21177\nf 21166 21177 21176\nf 21167 21168 21178\nf 21167 21178 21177\nf 21168 21169 21179\nf 21168 21179 21178\nf 21169 21170 21180\nf 21169 21180 21179\nf 21170 21173 21182\nf 21170 21182 21180\nf 21171 21172 21173\nf 21172 21181 21182\nf 21172 21182 21173\nf 21174 21175 21183\nf 21175 21176 21184\nf 21175 21184 21183\nf 21176 21177 21185\nf 21176 21185 21184\nf 21177 21178 21186\nf 21177 21186 21185\nf 21178 21179 21187\nf 21178 21187 21186\nf 21179 21180 21188\nf 21179 21188 21187\nf 21180 21182 21189\nf 21180 21189 21188\nf 21181 21190 21192\nf 21181 21192 21182\nf 21182 21192 21189\nf 21183 21184 21193\nf 21184 21185 21194\nf 21184 21194 21193\nf 21185 21186 21195\nf 21185 21195 21194\nf 21186 21187 21196\nf 21186 21196 21195\nf 21187 21188 21197\nf 21187 21197 21196\nf 21188 21189 21198\nf 21188 21198 21197\nf 21189 21192 21201\nf 21189 21201 21198\nf 21190 21191 21192\nf 21191 21199 21201\nf 21191 21201 21192\nf 21193 21194 21202\nf 21194 21195 21203\nf 21194 21203 21202\nf 21195 21196 21204\nf 21195 21204 21203\nf 21196 21197 21205\nf 21196 21205 21204\nf 21197 21198 21206\nf 21197 21206 21205\nf 21198 21201 21208\nf 21198 21208 21206\nf 21199 21200 21201\nf 21200 21207 21208\nf 21200 21208 21201\nf 21202 21203 21209\nf 21203 21204 21210\nf 21203 21210 21209\nf 21204 21205 21211\nf 21204 21211 21210\nf 21205 21206 21212\nf 21205 21212 21211\nf 21206 21208 21213\nf 21206 21213 21212\nf 21207 21214 21215\nf 21207 21215 21208\nf 21208 21215 21213\nf 21209 21210 21216\nf 21210 21211 21218\nf 21210 21218 21216\nf 21211 21212 21219\nf 21211 21219 21218\nf 21212 21213 21220\nf 21212 21220 21219\nf 21213 21215 21221\nf 21213 21221 21220\nf 21214 21222 21223\nf 21214 21223 21215\nf 21215 21223 21221\nf 21216 21218 21217\nf 21217 21218 21224\nf 21218 21219 21225\nf 21218 21225 21224\nf 21219 21220 21225\nf 21220 21221 21226\nf 21220 21226 21225\nf 21221 21223 21227\nf 21221 21227 21226\nf 21222 21228 21230\nf 21222 21230 21223\nf 21223 21230 21227\nf 21224 21225 21231\nf 21225 21226 21233\nf 21225 21233 21231\nf 21226 21227 21234\nf 21226 21234 21233\nf 21227 21230 21236\nf 21227 21236 21234\nf 21228 21229 21230\nf 21229 21235 21236\nf 21229 21236 21230\nf 21231 21233 21232\nf 21232 21233 21237\nf 21233 21234 21239\nf 21233 21239 21237\nf 21234 21236 21239\nf 21235 21240 21242\nf 21235 21242 21236\nf 21236 21242 21239\nf 21237 21239 21238\nf 21238 21239 21241\nf 21239 21242 21241\nf 21240 21241 21242\nf 21243 21244 21266\nf 21243 21265 21264\nf 21243 21266 21265\nf 21244 21245 21267\nf 21244 21267 21266\nf 21245 21246 21268\nf 21245 21268 21267\nf 21246 21247 21269\nf 21246 21269 21268\nf 21247 21248 21271\nf 21247 21271 21269\nf 21248 21270 21271\nf 21249 21250 21278\nf 21249 21277 21275\nf 21249 21278 21277\nf 21250 21251 21279\nf 21250 21279 21278\nf 21251 21252 21280\nf 21251 21280 21279\nf 21252 21253 22358\nf 21252 22358 22369\nf 21252 22369 21280\nf 21253 21254 22358\nf 21254 21255 22359\nf 21254 22359 22358\nf 21255 21256 22360\nf 21255 22360 22359\nf 21256 21257 22361\nf 21256 22361 22360\nf 21257 21258 22362\nf 21257 22362 22361\nf 21258 21259 22363\nf 21258 22363 22362\nf 21259 21260 22364\nf 21259 22364 22363\nf 21260 21261 22365\nf 21260 22365 22364\nf 21261 21262 21282\nf 21261 21281 22365\nf 21261 21282 21281\nf 21262 21263 21284\nf 21262 21284 21282\nf 21263 21283 21284\nf 21264 21265 21295\nf 21265 21266 21297\nf 21265 21297 21295\nf 21266 21267 21298\nf 21266 21298 21297\nf 21267 21268 21299\nf 21267 21299 21298\nf 21268 21269 21300\nf 21268 21300 21299\nf 21269 21271 21301\nf 21269 21301 21300\nf 21270 21272 21304\nf 21270 21304 21271\nf 21271 21302 21301\nf 21271 21304 21302\nf 21272 21303 21304\nf 21273 21274 21308\nf 21273 21307 21305\nf 21273 21308 21307\nf 21274 21276 21309\nf 21274 21309 21308\nf 21275 21277 21276\nf 21276 21277 22366\nf 21276 22366 21309\nf 21277 21278 22366\nf 21278 21279 22367\nf 21278 22367 22366\nf 21279 21280 22368\nf 21279 22368 22367\nf 21280 22369 22370\nf 21280 22370 22368\nf 21281 21282 22375\nf 21281 22373 22365\nf 21281 22375 22373\nf 21282 21284 22376\nf 21282 22376 22375\nf 21283 21285 22377\nf 21283 22377 21284\nf 21284 22377 22376\nf 21285 21286 22378\nf 21285 22378 22377\nf 21286 21287 22379\nf 21286 22379 22378\nf 21287 21288 22380\nf 21287 22380 22379\nf 21288 21289 22381\nf 21288 22381 22380\nf 21289 21290 22382\nf 21289 22382 22381\nf 21290 21291 21311\nf 21290 21310 22382\nf 21290 21311 21310\nf 21291 21292 21312\nf 21291 21312 21311\nf 21292 21293 21313\nf 21292 21313 21312\nf 21293 21294 21315\nf 21293 21315 21313\nf 21294 21314 21315\nf 21295 21297 21296\nf 21296 21297 21319\nf 21296 21319 21318\nf 21297 21298 21320\nf 21297 21320 21319\nf 21298 21299 21321\nf 21298 21321 21320\nf 21299 21300 21322\nf 21299 21322 21321\nf 21300 21301 21323\nf 21300 21323 21322\nf 21301 21302 21324\nf 21301 21324 21323\nf 21302 21304 21325\nf 21302 21325 21324\nf 21303 21326 21327\nf 21303 21327 21304\nf 21304 21327 21325\nf 21305 21307 21306\nf 21306 21307 21330\nf 21306 21330 21329\nf 21307 21308 21331\nf 21307 21331 21330\nf 21308 21309 21332\nf 21308 21332 21331\nf 21309 21333 21332\nf 21309 22366 22383\nf 21309 22383 22393\nf 21309 22393 21333\nf 21310 21311 22390\nf 21310 22388 22382\nf 21310 22390 22388\nf 21311 21312 22391\nf 21311 22391 22390\nf 21312 21313 21334\nf 21312 21334 22392\nf 21312 22392 22391\nf 21313 21315 21334\nf 21314 21316 21336\nf 21314 21336 21315\nf 21315 21335 21334\nf 21315 21336 21335\nf 21316 21317 21338\nf 21316 21338 21336\nf 21317 21337 21338\nf 21318 21319 21340\nf 21319 21320 21341\nf 21319 21341 21340\nf 21320 21321 21342\nf 21320 21342 21341\nf 21321 21322 21343\nf 21321 21343 21342\nf 21322 21323 21344\nf 21322 21344 21343\nf 21323 21324 21345\nf 21323 21345 21344\nf 21324 21325 21346\nf 21324 21346 21345\nf 21325 21327 21347\nf 21325 21347 21346\nf 21326 21328 21351\nf 21326 21351 21327\nf 21327 21348 21347\nf 21327 21351 21348\nf 21328 21349 21351\nf 21329 21330 21352\nf 21330 21331 21353\nf 21330 21353 21352\nf 21331 21332 21354\nf 21331 21354 21353\nf 21332 21333 21355\nf 21332 21355 21354\nf 21333 22393 22394\nf 21333 22394 22402\nf 21333 22402 21355\nf 21334 21335 21356\nf 21334 21356 22400\nf 21334 22400 22392\nf 21335 21336 21357\nf 21335 21357 21356\nf 21336 21338 21358\nf 21336 21358 21357\nf 21337 21339 21361\nf 21337 21361 21338\nf 21338 21359 21358\nf 21338 21361 21359\nf 21339 21360 21361\nf 21340 21341 21363\nf 21341 21342 21365\nf 21341 21365 21363\nf 21342 21343 21366\nf 21342 21366 21365\nf 21343 21344 21367\nf 21343 21367 21366\nf 21344 21345 21368\nf 21344 21368 21367\nf 21345 21346 21369\nf 21345 21369 21368\nf 21346 21347 21370\nf 21346 21370 21369\nf 21347 21348 21371\nf 21347 21371 21370\nf 21348 21351 21373\nf 21348 21373 21371\nf 21349 21350 21351\nf 21350 21372 21373\nf 21350 21373 21351\nf 21352 21353 21374\nf 21353 21354 21376\nf 21353 21376 21374\nf 21354 21355 21377\nf 21354 21377 21376\nf 21355 21378 21377\nf 21355 21379 21378\nf 21355 22402 22403\nf 21355 22403 21379\nf 21356 21357 21380\nf 21356 21380 22411\nf 21356 22409 22400\nf 21356 22411 22409\nf 21357 21358 21380\nf 21358 21359 21381\nf 21358 21381 21380\nf 21359 21361 21382\nf 21359 21382 21381\nf 21360 21362 21385\nf 21360 21385 21361\nf 21361 21383 21382\nf 21361 21385 21383\nf 21362 21384 21385\nf 21363 21365 21364\nf 21364 21365 21389\nf 21364 21389 21387\nf 21365 21366 21391\nf 21365 21391 21389\nf 21366 21367 21393\nf 21366 21393 21391\nf 21367 21368 21394\nf 21367 21394 21393\nf 21368 21369 21395\nf 21368 21395 21394\nf 21369 21370 21397\nf 21369 21397 21395\nf 21370 21371 21399\nf 21370 21399 21397\nf 21371 21373 21401\nf 21371 21401 21399\nf 21372 21402 21404\nf 21372 21404 21373\nf 21373 21404 21401\nf 21374 21376 21375\nf 21375 21376 21405\nf 21376 21377 21407\nf 21376 21407 21405\nf 21377 21378 21407\nf 21378 21379 21409\nf 21378 21409 21407\nf 21379 21411 21409\nf 21379 22403 22412\nf 21379 22412 22419\nf 21379 22419 21411\nf 21380 21381 21412\nf 21380 21412 22418\nf 21380 22416 22411\nf 21380 22418 22416\nf 21381 21382 21412\nf 21382 21383 21413\nf 21382 21413 21412\nf 21383 21385 21415\nf 21383 21415 21413\nf 21384 21386 21420\nf 21384 21420 21385\nf 21385 21417 21415\nf 21385 21420 21417\nf 21386 21418 21420\nf 21387 21389 21388\nf 21388 21389 21390\nf 21389 21391 21390\nf 21390 21391 21392\nf 21391 21393 21392\nf 21392 21393 21421\nf 21393 21394 21423\nf 21393 21423 21421\nf 21394 21395 21423\nf 21395 21397 21426\nf 21395 21426 21423\nf 21396 21397 21398\nf 21396 21424 21426\nf 21396 21426 21397\nf 21397 21399 21398\nf 21398 21399 21400\nf 21399 21401 21400\nf 21400 21401 21403\nf 21401 21404 21403\nf 21402 21403 21404\nf 21405 21407 21406\nf 21406 21407 21408\nf 21407 21409 21408\nf 21408 21409 21410\nf 21409 21411 21410\nf 21410 21411 21429\nf 21410 21429 21427\nf 21411 22419 22420\nf 21411 22420 21429\nf 21412 21413 21436\nf 21412 21435 22427\nf 21412 21436 21435\nf 21412 22427 22418\nf 21413 21415 21439\nf 21413 21439 21436\nf 21414 21415 21416\nf 21414 21437 21439\nf 21414 21439 21415\nf 21415 21417 21416\nf 21416 21417 21419\nf 21417 21420 21419\nf 21418 21419 21420\nf 21421 21423 21422\nf 21422 21423 21425\nf 21423 21426 21425\nf 21424 21425 21426\nf 21427 21429 21428\nf 21428 21429 21430\nf 21429 21431 21430\nf 21429 22420 22422\nf 21429 22422 21431\nf 21430 21431 21432\nf 21431 21433 21432\nf 21431 22422 22424\nf 21431 22424 21433\nf 21432 21433 22431\nf 21432 22431 21434\nf 21433 22424 22430\nf 21433 22430 22431\nf 21434 22431 22433\nf 21434 22433 21440\nf 21435 21436 21452\nf 21435 21452 22441\nf 21435 22428 22427\nf 21435 22441 22428\nf 21436 21439 21455\nf 21436 21455 21452\nf 21437 21438 21439\nf 21438 21453 21455\nf 21438 21455 21439\nf 21440 21442 21441\nf 21440 22433 21442\nf 21441 21442 21443\nf 21442 21444 21443\nf 21442 22433 22435\nf 21442 22435 21444\nf 21443 21444 21445\nf 21444 21446 21445\nf 21444 22435 22437\nf 21444 22437 21446\nf 21445 21446 21447\nf 21446 21448 21447\nf 21446 22437 22439\nf 21446 22439 21448\nf 21447 21448 21449\nf 21448 21450 21449\nf 21448 22439 22440\nf 21448 22440 21450\nf 21449 21450 22444\nf 21449 22444 21451\nf 21450 22440 22443\nf 21450 22443 22444\nf 21451 22444 22446\nf 21451 22446 21457\nf 21452 21455 21471\nf 21452 21468 22450\nf 21452 21471 21468\nf 21452 22450 22441\nf 21453 21454 21455\nf 21454 21469 21471\nf 21454 21471 21455\nf 21456 21473 21474\nf 21456 21474 21472\nf 21457 21459 21458\nf 21457 22446 21459\nf 21458 21459 21460\nf 21459 21461 21460\nf 21459 22446 22447\nf 21459 22447 21461\nf 21460 21461 22454\nf 21460 22454 21462\nf 21461 22447 22453\nf 21461 22453 22454\nf 21462 22454 22456\nf 21462 22456 21463\nf 21463 22456 22458\nf 21463 22458 21464\nf 21464 22458 22459\nf 21464 22459 21475\nf 21465 21466 21467\nf 21465 21488 21490\nf 21465 21490 22466\nf 21465 22466 21466\nf 21466 21468 21467\nf 21466 22448 22451\nf 21466 22451 21468\nf 21466 22465 22448\nf 21466 22466 22465\nf 21467 21468 21470\nf 21468 21471 21470\nf 21468 22451 22450\nf 21469 21470 21471\nf 21472 21474 21491\nf 21473 21492 21493\nf 21473 21493 21474\nf 21474 21493 21491\nf 21475 21477 21476\nf 21475 22459 21477\nf 21476 21477 21478\nf 21477 21479 21478\nf 21477 22459 22460\nf 21477 22460 21479\nf 21478 21479 21480\nf 21479 21481 21480\nf 21479 22460 22461\nf 21479 22461 21481\nf 21480 21481 21482\nf 21481 21483 21482\nf 21481 22461 22462\nf 21481 22462 21483\nf 21482 21483 21484\nf 21483 21485 21484\nf 21483 22462 22463\nf 21483 22463 21485\nf 21484 21485 21486\nf 21485 21487 21486\nf 21485 22463 22464\nf 21485 22464 21487\nf 21486 21487 21489\nf 21487 21490 21489\nf 21487 22464 22466\nf 21487 22466 21490\nf 21488 21489 21490\nf 21491 21493 21494\nf 21492 21495 21496\nf 21492 21496 21493\nf 21493 21496 21494\nf 21494 21496 21497\nf 21495 21498 21500\nf 21495 21500 21496\nf 21496 21500 21497\nf 21497 21500 21499\nf 21498 21499 21500\nf 21501 21503 21504\nf 21501 21504 21502\nf 21502 21504 21505\nf 21503 21506 21507\nf 21503 21507 21504\nf 21504 21507 21505\nf 21505 21507 21512\nf 21506 21508 21515\nf 21506 21515 21507\nf 21507 21513 21512\nf 21507 21515 21513\nf 21508 21514 21515\nf 21509 21510 21518\nf 21509 21517 21516\nf 21509 21518 21517\nf 21510 21511 21520\nf 21510 21520 21518\nf 21511 21519 21520\nf 21512 21513 21521\nf 21513 21515 21522\nf 21513 21522 21521\nf 21514 21523 21524\nf 21514 21524 21515\nf 21515 21524 21522\nf 21516 21517 21525\nf 21517 21518 21526\nf 21517 21526 21525\nf 21518 21520 21527\nf 21518 21527 21526\nf 21519 21528 21529\nf 21519 21529 21520\nf 21520 21529 21527\nf 21521 21522 21530\nf 21522 21524 21531\nf 21522 21531 21530\nf 21523 21532 21533\nf 21523 21533 21524\nf 21524 21533 21531\nf 21525 21526 21534\nf 21526 21527 21535\nf 21526 21535 21534\nf 21527 21529 21536\nf 21527 21536 21535\nf 21528 21537 21538\nf 21528 21538 21529\nf 21529 21538 21536\nf 21530 21531 21539\nf 21531 21533 21541\nf 21531 21541 21539\nf 21532 21542 21543\nf 21532 21543 21533\nf 21533 21543 21541\nf 21534 21535 21544\nf 21535 21536 21546\nf 21535 21546 21544\nf 21536 21538 21547\nf 21536 21547 21546\nf 21537 21548 21549\nf 21537 21549 21538\nf 21538 21549 21547\nf 21539 21541 21540\nf 21540 21541 21550\nf 21541 21543 21553\nf 21541 21553 21550\nf 21542 21551 21553\nf 21542 21553 21543\nf 21544 21546 21545\nf 21545 21546 21556\nf 21545 21556 21555\nf 21546 21547 21557\nf 21546 21557 21556\nf 21547 21549 21558\nf 21547 21558 21557\nf 21548 21559 21561\nf 21548 21561 21549\nf 21549 21561 21558\nf 21550 21553 21552\nf 21551 21554 21564\nf 21551 21564 21553\nf 21552 21553 21564\nf 21552 21564 21562\nf 21554 21563 21564\nf 21555 21556 21565\nf 21556 21557 21566\nf 21556 21566 21565\nf 21557 21558 21567\nf 21557 21567 21566\nf 21558 21561 21570\nf 21558 21570 21567\nf 21559 21560 21561\nf 21560 21568 21570\nf 21560 21570 21561\nf 21562 21564 21571\nf 21563 21572 21573\nf 21563 21573 21564\nf 21564 21573 21571\nf 21565 21566 21574\nf 21566 21567 21576\nf 21566 21576 21574\nf 21567 21570 21579\nf 21567 21579 21576\nf 21568 21569 21570\nf 21569 21577 21579\nf 21569 21579 21570\nf 21571 21573 21580\nf 21572 21581 21583\nf 21572 21583 21573\nf 21573 21583 21580\nf 21574 21576 21575\nf 21575 21576 21578\nf 21576 21579 21578\nf 21577 21578 21579\nf 21580 21583 21582\nf 21581 21582 21583\nf 21584 21587 21588\nf 21584 21588 21585\nf 21585 21588 21586\nf 21586 21588 21593\nf 21586 21593 21591\nf 21587 21589 21595\nf 21587 21595 21588\nf 21588 21594 21593\nf 21588 21595 21594\nf 21589 21590 21597\nf 21589 21597 21595\nf 21590 21596 21597\nf 21591 21593 21592\nf 21592 21593 21599\nf 21592 21599 21598\nf 21593 21594 21600\nf 21593 21600 21599\nf 21594 21595 21601\nf 21594 21601 21600\nf 21595 21597 21602\nf 21595 21602 21601\nf 21596 21603 21604\nf 21596 21604 21597\nf 21597 21604 21602\nf 21598 21599 21606\nf 21599 21600 21608\nf 21599 21608 21606\nf 21600 21601 21609\nf 21600 21609 21608\nf 21601 21602 21610\nf 21601 21610 21609\nf 21602 21604 21611\nf 21602 21611 21610\nf 21603 21605 21614\nf 21603 21614 21604\nf 21604 21612 21611\nf 21604 21614 21612\nf 21605 21613 21614\nf 21606 21608 21607\nf 21607 21608 21616\nf 21607 21616 21615\nf 21608 21609 21617\nf 21608 21617 21616\nf 21609 21610 21618\nf 21609 21618 21617\nf 21610 21611 21619\nf 21610 21619 21618\nf 21611 21612 21620\nf 21611 21620 21619\nf 21612 21614 21621\nf 21612 21621 21620\nf 21613 21622 21623\nf 21613 21623 21614\nf 21614 21623 21621\nf 21615 21616 21624\nf 21616 21617 21625\nf 21616 21625 21624\nf 21617 21618 21626\nf 21617 21626 21625\nf 21618 21619 21627\nf 21618 21627 21626\nf 21619 21620 21628\nf 21619 21628 21627\nf 21620 21621 21629\nf 21620 21629 21628\nf 21621 21623 21630\nf 21621 21630 21629\nf 21622 21631 21632\nf 21622 21632 21623\nf 21623 21632 21630\nf 21624 21625 21633\nf 21625 21626 21635\nf 21625 21635 21633\nf 21626 21627 21636\nf 21626 21636 21635\nf 21627 21628 21637\nf 21627 21637 21636\nf 21628 21629 21638\nf 21628 21638 21637\nf 21629 21630 21639\nf 21629 21639 21638\nf 21630 21632 21640\nf 21630 21640 21639\nf 21631 21641 21642\nf 21631 21642 21632\nf 21632 21642 21640\nf 21633 21635 21634\nf 21634 21635 21643\nf 21635 21636 21645\nf 21635 21645 21643\nf 21636 21637 21645\nf 21637 21638 21646\nf 21637 21646 21645\nf 21638 21639 21647\nf 21638 21647 21646\nf 21639 21640 21648\nf 21639 21648 21647\nf 21640 21642 21649\nf 21640 21649 21648\nf 21641 21650 21651\nf 21641 21651 21642\nf 21642 21651 21649\nf 21643 21645 21644\nf 21644 21645 21652\nf 21645 21646 21654\nf 21645 21654 21652\nf 21646 21647 21654\nf 21647 21648 21655\nf 21647 21655 21654\nf 21648 21649 21656\nf 21648 21656 21655\nf 21649 21651 21657\nf 21649 21657 21656\nf 21650 21658 21660\nf 21650 21660 21651\nf 21651 21660 21657\nf 21652 21654 21653\nf 21653 21654 21661\nf 21654 21655 21662\nf 21654 21662 21661\nf 21655 21656 21662\nf 21656 21657 21663\nf 21656 21663 21662\nf 21657 21660 21665\nf 21657 21665 21663\nf 21658 21659 21660\nf 21659 21664 21665\nf 21659 21665 21660\nf 21661 21662 21666\nf 21662 21663 21668\nf 21662 21668 21666\nf 21663 21665 21669\nf 21663 21669 21668\nf 21664 21670 21672\nf 21664 21672 21665\nf 21665 21672 21669\nf 21666 21668 21667\nf 21667 21668 21673\nf 21668 21669 21676\nf 21668 21676 21673\nf 21669 21672 21676\nf 21670 21671 21672\nf 21671 21674 21676\nf 21671 21676 21672\nf 21673 21676 21675\nf 21674 21675 21676\nf 21677 21679 21680\nf 21677 21680 21678\nf 21678 21680 21681\nf 21679 21683 21684\nf 21679 21684 21680\nf 21680 21684 21681\nf 21681 21684 21682\nf 21682 21684 21691\nf 21682 21691 21690\nf 21683 21685 21693\nf 21683 21693 21684\nf 21684 21692 21691\nf 21684 21693 21692\nf 21685 21686 21695\nf 21685 21695 21693\nf 21686 21694 21695\nf 21687 21688 21699\nf 21687 21698 21696\nf 21687 21699 21698\nf 21688 21689 21701\nf 21688 21701 21699\nf 21689 21700 21701\nf 21690 21691 21702\nf 21691 21692 21703\nf 21691 21703 21702\nf 21692 21693 21704\nf 21692 21704 21703\nf 21693 21695 21705\nf 21693 21705 21704\nf 21694 21706 21707\nf 21694 21707 21695\nf 21695 21707 21705\nf 21696 21698 21697\nf 21697 21698 21710\nf 21697 21710 21708\nf 21698 21699 21711\nf 21698 21711 21710\nf 21699 21701 21712\nf 21699 21712 21711\nf 21700 21713 21714\nf 21700 21714 21701\nf 21701 21714 21712\nf 21702 21703 21716\nf 21703 21704 21718\nf 21703 21718 21716\nf 21704 21705 21719\nf 21704 21719 21718\nf 21705 21707 21720\nf 21705 21720 21719\nf 21706 21721 21722\nf 21706 21722 21707\nf 21707 21722 21720\nf 21708 21710 21709\nf 21709 21710 21725\nf 21709 21725 21723\nf 21710 21711 21726\nf 21710 21726 21725\nf 21711 21712 21727\nf 21711 21727 21726\nf 21712 21714 21728\nf 21712 21728 21727\nf 21713 21715 21731\nf 21713 21731 21714\nf 21714 21729 21728\nf 21714 21731 21729\nf 21715 21730 21731\nf 21716 21718 21717\nf 21717 21718 21733\nf 21717 21733 21732\nf 21718 21719 21734\nf 21718 21734 21733\nf 21719 21720 21735\nf 21719 21735 22468\nf 21719 22468 22470\nf 21719 22470 21734\nf 21720 21722 21735\nf 21721 21736 21737\nf 21721 21737 21722\nf 21722 21737 21735\nf 21723 21725 21724\nf 21724 21725 21741\nf 21724 21741 21739\nf 21725 21726 21742\nf 21725 21742 21741\nf 21726 21727 21743\nf 21726 21743 21742\nf 21727 21728 21744\nf 21727 21744 21743\nf 21728 21729 21745\nf 21728 21745 21744\nf 21729 21731 21747\nf 21729 21747 22469\nf 21729 22469 22477\nf 21729 22477 21745\nf 21730 21746 21747\nf 21730 21747 21731\nf 21732 21733 21749\nf 21733 21734 21750\nf 21733 21750 21749\nf 21734 22470 22471\nf 21734 22471 22482\nf 21734 22482 21750\nf 21735 21737 21751\nf 21735 21751 22474\nf 21735 22472 22468\nf 21735 22474 22472\nf 21736 21738 21753\nf 21736 21753 21737\nf 21737 21753 21751\nf 21738 21752 21753\nf 21739 21741 21740\nf 21740 21741 21757\nf 21740 21757 21755\nf 21741 21742 21758\nf 21741 21758 21757\nf 21742 21743 21759\nf 21742 21759 21758\nf 21743 21744 22475\nf 21743 22475 22490\nf 21743 22490 21759\nf 21744 21745 22476\nf 21744 22476 22475\nf 21745 22477 22478\nf 21745 22478 22476\nf 21746 21748 22481\nf 21746 22481 21747\nf 21747 22479 22469\nf 21747 22481 22479\nf 21748 21760 21761\nf 21748 21761 22494\nf 21748 22494 22481\nf 21749 21750 22497\nf 21749 22497 21762\nf 21750 22482 22483\nf 21750 22483 22497\nf 21751 21753 22487\nf 21751 22485 22474\nf 21751 22487 22485\nf 21752 21754 22488\nf 21752 22488 21753\nf 21753 22488 22487\nf 21754 21764 21765\nf 21754 21765 22498\nf 21754 22498 22488\nf 21755 21757 21756\nf 21756 21757 21769\nf 21756 21769 21767\nf 21757 21758 21770\nf 21757 21770 21769\nf 21758 21759 22489\nf 21758 22489 22502\nf 21758 22502 21770\nf 21759 22490 22491\nf 21759 22491 22489\nf 21760 21771 22505\nf 21760 22496 21761\nf 21760 22505 22496\nf 21761 22496 22494\nf 21762 22497 22507\nf 21762 22507 21763\nf 21763 21774 21773\nf 21763 22507 21774\nf 21764 21766 22500\nf 21764 22500 21765\nf 21765 22500 22498\nf 21766 21775 21776\nf 21766 21776 22509\nf 21766 22509 22500\nf 21767 21769 21768\nf 21768 21769 22501\nf 21768 21778 21777\nf 21768 22501 21778\nf 21769 21770 22501\nf 21770 22502 22503\nf 21770 22503 22501\nf 21771 21772 21780\nf 21771 21780 22515\nf 21771 22515 22505\nf 21772 21779 21780\nf 21773 21774 22517\nf 21773 22517 21781\nf 21774 22507 22508\nf 21774 22508 22517\nf 21775 21782 22519\nf 21775 22511 21776\nf 21775 22519 22511\nf 21776 22511 22509\nf 21777 21778 21784\nf 21778 21786 21784\nf 21778 22501 22512\nf 21778 22512 22521\nf 21778 22521 21786\nf 21779 21787 22523\nf 21779 22516 21780\nf 21779 22523 22516\nf 21780 22516 22515\nf 21781 22517 21788\nf 21782 21783 21790\nf 21782 21790 22526\nf 21782 22526 22519\nf 21783 21789 21790\nf 21784 21786 21785\nf 21785 21786 21791\nf 21786 22521 21791\nf 21787 21792 22530\nf 21787 22530 22523\nf 21788 22517 22525\nf 21788 22525 21793\nf 21789 21794 21795\nf 21789 21795 21790\nf 21790 21795 22526\nf 21791 22521 22528\nf 21791 22528 21796\nf 21792 21797 22537\nf 21792 22537 22530\nf 21793 22525 22531\nf 21793 22531 21798\nf 21794 21799 22539\nf 21794 22533 21795\nf 21794 22539 22533\nf 21795 22532 22526\nf 21795 22533 22532\nf 21796 22528 22534\nf 21796 22534 21801\nf 21797 21803 22542\nf 21797 22542 22537\nf 21798 22531 22538\nf 21798 22538 21804\nf 21799 21800 21806\nf 21799 21806 22544\nf 21799 22544 22539\nf 21800 21805 21806\nf 21801 21802 21807\nf 21801 22534 22535\nf 21801 22535 21802\nf 21802 21808 21807\nf 21802 22535 22541\nf 21802 22541 22547\nf 21802 22547 21808\nf 21803 21809 22549\nf 21803 22549 22542\nf 21804 22538 22543\nf 21804 22543 21810\nf 21805 21811 22551\nf 21805 22546 21806\nf 21805 22551 22546\nf 21806 22546 22544\nf 21807 21808 21813\nf 21808 21814 21813\nf 21808 22547 22553\nf 21808 22553 21814\nf 21809 21815 22555\nf 21809 22555 22549\nf 21810 22543 22550\nf 21810 22550 21816\nf 21811 21812 21818\nf 21811 21818 22557\nf 21811 22557 22551\nf 21812 21817 21818\nf 21813 21814 21819\nf 21814 21820 21819\nf 21814 22553 22560\nf 21814 22560 21820\nf 21815 21821 22562\nf 21815 22562 22555\nf 21816 22550 22556\nf 21816 22556 21822\nf 21817 21823 22564\nf 21817 22559 21818\nf 21817 22564 22559\nf 21818 22559 22557\nf 21819 21820 21825\nf 21820 21826 21825\nf 21820 22560 22566\nf 21820 22566 21826\nf 21821 21827 22568\nf 21821 22568 22562\nf 21822 22556 22563\nf 21822 22563 21828\nf 21823 21824 21830\nf 21823 21830 22570\nf 21823 22570 22564\nf 21824 21829 21830\nf 21825 21826 21831\nf 21826 21833 21831\nf 21826 22566 22572\nf 21826 22572 21833\nf 21827 21834 22574\nf 21827 22574 22568\nf 21828 22563 22569\nf 21828 22569 21835\nf 21829 21836 22576\nf 21829 22571 21830\nf 21829 22576 22571\nf 21830 22571 22570\nf 21831 21833 21832\nf 21832 21833 22573\nf 21832 21841 21839\nf 21832 22573 21841\nf 21833 22572 22573\nf 21834 21842 22582\nf 21834 22582 22574\nf 21835 22569 22575\nf 21835 22575 21843\nf 21836 21837 22577\nf 21836 22577 22576\nf 21837 21838 22577\nf 21838 21844 22578\nf 21838 22578 22577\nf 21839 21841 21840\nf 21840 21841 22580\nf 21840 21922 21920\nf 21840 22580 21922\nf 21841 22573 22579\nf 21841 22579 22580\nf 21842 21923 22665\nf 21842 22665 22582\nf 21843 22575 22584\nf 21843 22584 21925\nf 21844 21845 22587\nf 21844 22585 22578\nf 21844 22587 22585\nf 21845 21846 22587\nf 21846 21847 22588\nf 21846 22588 22587\nf 21847 21848 22589\nf 21847 22589 22588\nf 21848 21849 22590\nf 21848 22590 22589\nf 21849 21850 22591\nf 21849 22591 22590\nf 21850 21851 22592\nf 21850 22592 22591\nf 21851 21852 22593\nf 21851 22593 22592\nf 21852 21853 22594\nf 21852 22594 22593\nf 21853 21854 22595\nf 21853 22595 22594\nf 21854 21855 22596\nf 21854 22596 22595\nf 21855 21856 22597\nf 21855 22597 22596\nf 21856 21857 22598\nf 21856 22598 22597\nf 21857 21858 22599\nf 21857 22599 22598\nf 21858 21859 22600\nf 21858 22600 22599\nf 21859 21860 22601\nf 21859 22601 22600\nf 21860 21861 22602\nf 21860 22602 22601\nf 21861 21862 22603\nf 21861 22603 22602\nf 21862 21863 22604\nf 21862 22604 22603\nf 21863 21864 22605\nf 21863 22605 22604\nf 21864 21865 22606\nf 21864 22606 22605\nf 21865 21866 22607\nf 21865 22607 22606\nf 21866 21867 22608\nf 21866 22608 22607\nf 21867 21868 22609\nf 21867 22609 22608\nf 21868 21869 22610\nf 21868 22610 22609\nf 21869 21870 22611\nf 21869 22611 22610\nf 21870 21871 22612\nf 21870 22612 22611\nf 21871 21872 22613\nf 21871 22613 22612\nf 21872 21873 22614\nf 21872 22614 22613\nf 21873 21874 22615\nf 21873 22615 22614\nf 21874 21875 22616\nf 21874 22616 22615\nf 21875 21876 22617\nf 21875 22617 22616\nf 21876 21877 22618\nf 21876 22618 22617\nf 21877 21878 22619\nf 21877 22619 22618\nf 21878 21879 22620\nf 21878 22620 22619\nf 21879 21880 22621\nf 21879 22621 22620\nf 21880 21881 22622\nf 21880 22622 22621\nf 21881 21882 22623\nf 21881 22623 22622\nf 21882 21883 22624\nf 21882 22624 22623\nf 21883 21884 22625\nf 21883 22625 22624\nf 21884 21885 22626\nf 21884 22626 22625\nf 21885 21886 22627\nf 21885 22627 22626\nf 21886 21887 22628\nf 21886 22628 22627\nf 21887 21888 22629\nf 21887 22629 22628\nf 21888 21889 22630\nf 21888 22630 22629\nf 21889 21890 22631\nf 21889 22631 22630\nf 21890 21891 22632\nf 21890 22632 22631\nf 21891 21892 22633\nf 21891 22633 22632\nf 21892 21893 22634\nf 21892 22634 22633\nf 21893 21894 22635\nf 21893 22635 22634\nf 21894 21895 22636\nf 21894 22636 22635\nf 21895 21896 22637\nf 21895 22637 22636\nf 21896 21897 22638\nf 21896 22638 22637\nf 21897 21898 22639\nf 21897 22639 22638\nf 21898 21899 22640\nf 21898 22640 22639\nf 21899 21900 22641\nf 21899 22641 22640\nf 21900 21901 22642\nf 21900 22642 22641\nf 21901 21902 22643\nf 21901 22643 22642\nf 21902 21903 22644\nf 21902 22644 22643\nf 21903 21904 22645\nf 21903 22645 22644\nf 21904 21905 22646\nf 21904 22646 22645\nf 21905 21906 22647\nf 21905 22647 22646\nf 21906 21907 22648\nf 21906 22648 22647\nf 21907 21908 22649\nf 21907 22649 22648\nf 21908 21909 22650\nf 21908 22650 22649\nf 21909 21910 22651\nf 21909 22651 22650\nf 21910 21911 22652\nf 21910 22652 22651\nf 21911 21912 22653\nf 21911 22653 22652\nf 21912 21913 22654\nf 21912 22654 22653\nf 21913 21914 22655\nf 21913 22655 22654\nf 21914 21915 22656\nf 21914 22656 22655\nf 21915 21916 22657\nf 21915 22657 22656\nf 21916 21917 22658\nf 21916 22658 22657\nf 21917 21918 22659\nf 21917 22659 22658\nf 21918 21919 22660\nf 21918 22660 22659\nf 21919 21921 22661\nf 21919 22661 22660\nf 21920 21922 21921\nf 21921 21922 22664\nf 21921 22662 22661\nf 21921 22664 22662\nf 21922 22580 22663\nf 21922 22663 22664\nf 21923 21924 22665\nf 21924 21926 22671\nf 21924 22666 22665\nf 21924 22671 22666\nf 21925 22584 22668\nf 21925 22668 21927\nf 21926 21929 22673\nf 21926 22673 22671\nf 21927 21928 21931\nf 21927 22668 22669\nf 21927 22669 21928\nf 21928 21932 21931\nf 21928 22669 22672\nf 21928 22672 22675\nf 21928 22675 21932\nf 21929 21930 22673\nf 21930 21933 22676\nf 21930 22674 22673\nf 21930 22676 22674\nf 21931 21932 21935\nf 21932 21937 21935\nf 21932 22675 22678\nf 21932 22678 21937\nf 21933 21934 22676\nf 21934 21938 22679\nf 21934 22677 22676\nf 21934 22679 22677\nf 21935 21937 21936\nf 21936 21937 21940\nf 21937 22678 21940\nf 21938 21939 22679\nf 21939 21954 22695\nf 21939 22680 22679\nf 21939 22695 22680\nf 21940 22678 22681\nf 21940 22681 21956\nf 21941 22032 22034\nf 21941 22034 22035\nf 21941 22035 21942\nf 21942 22035 22779\nf 21942 22684 21943\nf 21942 22779 22684\nf 21943 22684 22685\nf 21943 22685 21944\nf 21944 22685 22686\nf 21944 22686 21945\nf 21945 22686 22687\nf 21945 22687 21946\nf 21946 22687 22688\nf 21946 22688 21947\nf 21947 22688 22689\nf 21947 22689 21948\nf 21948 22689 22690\nf 21948 22690 21949\nf 21949 22690 22691\nf 21949 22691 21950\nf 21950 22691 22692\nf 21950 22692 21951\nf 21951 22692 22693\nf 21951 22693 21952\nf 21952 22693 22694\nf 21952 22694 21953\nf 21953 22694 22696\nf 21953 22696 21955\nf 21954 21955 22695\nf 21955 22696 22695\nf 21956 21957 22036\nf 21956 22681 22682\nf 21956 22682 21957\nf 21957 22037 22036\nf 21957 22039 22037\nf 21957 22682 22697\nf 21957 22697 22698\nf 21957 22698 22039\nf 21958 22040 22042\nf 21958 22042 22700\nf 21958 22700 22702\nf 21958 22702 22704\nf 21958 22704 21959\nf 21959 22704 22043\nf 21960 22046 22787\nf 21960 22705 22706\nf 21960 22706 21961\nf 21960 22787 22705\nf 21961 22706 22707\nf 21961 22707 21962\nf 21962 22707 22708\nf 21962 22708 21963\nf 21963 22708 22709\nf 21963 22709 21964\nf 21964 22709 22710\nf 21964 22710 21965\nf 21965 22710 22711\nf 21965 22711 21966\nf 21966 22711 22712\nf 21966 22712 21967\nf 21967 22712 22713\nf 21967 22713 21968\nf 21968 22713 22714\nf 21968 22714 21969\nf 21969 22714 22715\nf 21969 22715 21970\nf 21970 22715 22716\nf 21970 22716 21971\nf 21971 22716 22717\nf 21971 22717 21972\nf 21972 22717 22718\nf 21972 22718 21973\nf 21973 22718 22719\nf 21973 22719 21974\nf 21974 22719 22720\nf 21974 22720 21975\nf 21975 22720 22721\nf 21975 22721 21976\nf 21976 22721 22722\nf 21976 22722 21977\nf 21977 22722 22723\nf 21977 22723 21978\nf 21978 22723 22724\nf 21978 22724 21979\nf 21979 22724 22725\nf 21979 22725 21980\nf 21980 22725 22726\nf 21980 22726 21981\nf 21981 22726 22727\nf 21981 22727 21982\nf 21982 22727 22728\nf 21982 22728 21983\nf 21983 22728 22729\nf 21983 22729 21984\nf 21984 22729 22730\nf 21984 22730 21985\nf 21985 22730 22731\nf 21985 22731 21986\nf 21986 22731 22732\nf 21986 22732 21987\nf 21987 22732 22733\nf 21987 22733 21988\nf 21988 22733 22734\nf 21988 22734 21989\nf 21989 22734 22735\nf 21989 22735 21990\nf 21990 22735 22736\nf 21990 22736 21991\nf 21991 22736 22737\nf 21991 22737 21992\nf 21992 22737 22738\nf 21992 22738 21993\nf 21993 22738 22739\nf 21993 22739 21994\nf 21994 22739 22740\nf 21994 22740 21995\nf 21995 22740 22741\nf 21995 22741 21996\nf 21996 22741 22742\nf 21996 22742 21997\nf 21997 22742 22743\nf 21997 22743 21998\nf 21998 22743 22744\nf 21998 22744 21999\nf 21999 22744 22745\nf 21999 22745 22000\nf 22000 22745 22746\nf 22000 22746 22001\nf 22001 22746 22747\nf 22001 22747 22002\nf 22002 22747 22748\nf 22002 22748 22003\nf 22003 22748 22749\nf 22003 22749 22004\nf 22004 22749 22750\nf 22004 22750 22005\nf 22005 22750 22751\nf 22005 22751 22006\nf 22006 22751 22752\nf 22006 22752 22007\nf 22007 22752 22753\nf 22007 22753 22008\nf 22008 22753 22754\nf 22008 22754 22009\nf 22009 22754 22755\nf 22009 22755 22010\nf 22010 22755 22756\nf 22010 22756 22011\nf 22011 22756 22757\nf 22011 22757 22012\nf 22012 22757 22758\nf 22012 22758 22013\nf 22013 22758 22759\nf 22013 22759 22014\nf 22014 22759 22760\nf 22014 22760 22015\nf 22015 22760 22761\nf 22015 22761 22016\nf 22016 22761 22762\nf 22016 22762 22017\nf 22017 22762 22763\nf 22017 22763 22018\nf 22018 22763 22764\nf 22018 22764 22019\nf 22019 22764 22765\nf 22019 22765 22020\nf 22020 22765 22766\nf 22020 22766 22021\nf 22021 22766 22767\nf 22021 22767 22022\nf 22022 22767 22768\nf 22022 22768 22023\nf 22023 22768 22769\nf 22023 22769 22024\nf 22024 22769 22770\nf 22024 22770 22025\nf 22025 22770 22771\nf 22025 22771 22026\nf 22026 22771 22772\nf 22026 22772 22027\nf 22027 22772 22773\nf 22027 22773 22028\nf 22028 22773 22774\nf 22028 22774 22029\nf 22029 22774 22775\nf 22029 22775 22030\nf 22030 22775 22776\nf 22030 22776 22031\nf 22031 22776 22777\nf 22031 22777 22033\nf 22032 22033 22034\nf 22033 22777 22778\nf 22033 22778 22034\nf 22034 22778 22035\nf 22035 22778 22780\nf 22035 22780 22779\nf 22036 22037 22048\nf 22037 22039 22051\nf 22037 22051 22048\nf 22038 22039 22041\nf 22038 22049 22051\nf 22038 22051 22039\nf 22039 22042 22041\nf 22039 22698 22700\nf 22039 22700 22042\nf 22040 22041 22042\nf 22043 22704 22782\nf 22043 22782 22052\nf 22044 22057 22059\nf 22044 22059 22784\nf 22044 22784 22785\nf 22044 22785 22786\nf 22044 22786 22045\nf 22045 22786 22788\nf 22045 22788 22047\nf 22046 22047 22787\nf 22047 22788 22787\nf 22048 22051 22050\nf 22049 22050 22051\nf 22052 22054 22053\nf 22052 22782 22783\nf 22052 22783 22054\nf 22053 22054 22791\nf 22053 22791 22055\nf 22054 22783 22790\nf 22054 22790 22791\nf 22055 22791 22794\nf 22055 22794 22056\nf 22056 22794 22058\nf 22057 22058 22059\nf 22058 22793 22059\nf 22058 22794 22793\nf 22059 22793 22784\nf 22060 22061 22065\nf 22060 22064 22063\nf 22060 22065 22064\nf 22061 22062 22067\nf 22061 22067 22065\nf 22062 22066 22067\nf 22063 22064 22798\nf 22063 22798 22069\nf 22064 22065 22796\nf 22064 22796 22798\nf 22065 22067 22071\nf 22065 22071 22797\nf 22065 22797 22796\nf 22066 22068 22073\nf 22066 22073 22067\nf 22067 22073 22071\nf 22068 22072 22073\nf 22069 22798 22803\nf 22069 22803 22070\nf 22070 22075 22074\nf 22070 22803 22075\nf 22071 22073 22077\nf 22071 22077 22802\nf 22071 22800 22797\nf 22071 22802 22800\nf 22072 22076 22077\nf 22072 22077 22073\nf 22074 22075 22808\nf 22074 22808 22079\nf 22075 22803 22804\nf 22075 22804 22808\nf 22076 22078 22807\nf 22076 22807 22077\nf 22077 22805 22802\nf 22077 22807 22805\nf 22078 22081 22082\nf 22078 22082 22809\nf 22078 22809 22807\nf 22079 22808 22811\nf 22079 22811 22080\nf 22080 22085 22084\nf 22080 22811 22085\nf 22081 22083 22810\nf 22081 22810 22082\nf 22082 22810 22809\nf 22083 22086 22087\nf 22083 22087 22812\nf 22083 22812 22810\nf 22084 22085 22088\nf 22085 22089 22088\nf 22085 22811 22815\nf 22085 22815 22089\nf 22086 22090 22816\nf 22086 22814 22087\nf 22086 22816 22814\nf 22087 22814 22812\nf 22088 22089 22091\nf 22089 22092 22091\nf 22089 22815 22818\nf 22089 22818 22092\nf 22090 22093 22821\nf 22090 22821 22816\nf 22091 22092 22822\nf 22091 22822 22095\nf 22092 22818 22819\nf 22092 22819 22822\nf 22093 22094 22097\nf 22093 22097 22823\nf 22093 22823 22821\nf 22094 22096 22097\nf 22095 22822 22098\nf 22096 22099 22826\nf 22096 22824 22097\nf 22096 22826 22824\nf 22097 22824 22823\nf 22098 22822 22825\nf 22098 22825 22100\nf 22099 22101 22829\nf 22099 22829 22826\nf 22100 22825 22828\nf 22100 22828 22102\nf 22101 22103 22831\nf 22101 22831 22829\nf 22102 22828 22830\nf 22102 22830 22104\nf 22103 22105 22833\nf 22103 22833 22831\nf 22104 22830 22832\nf 22104 22832 22106\nf 22105 22107 22835\nf 22105 22835 22833\nf 22106 22832 22834\nf 22106 22834 22108\nf 22107 22109 22837\nf 22107 22837 22835\nf 22108 22834 22836\nf 22108 22836 22110\nf 22109 22111 22839\nf 22109 22839 22837\nf 22110 22836 22838\nf 22110 22838 22112\nf 22111 22113 22841\nf 22111 22841 22839\nf 22112 22838 22840\nf 22112 22840 22114\nf 22113 22115 22843\nf 22113 22843 22841\nf 22114 22840 22842\nf 22114 22842 22116\nf 22115 22117 22845\nf 22115 22845 22843\nf 22116 22842 22844\nf 22116 22844 22118\nf 22117 22119 22847\nf 22117 22847 22845\nf 22118 22844 22846\nf 22118 22846 22120\nf 22119 22121 22851\nf 22119 22851 22847\nf 22120 22846 22848\nf 22120 22848 22122\nf 22121 22124 22854\nf 22121 22854 22851\nf 22122 22123 22125\nf 22122 22848 22849\nf 22122 22849 22123\nf 22123 22126 22125\nf 22123 22849 22853\nf 22123 22853 22857\nf 22123 22857 22126\nf 22124 22127 22854\nf 22125 22126 22130\nf 22126 22131 22130\nf 22126 22857 22859\nf 22126 22859 22131\nf 22127 22128 22129\nf 22127 22129 22854\nf 22128 22132 22858\nf 22128 22858 22129\nf 22129 22855 22854\nf 22129 22858 22855\nf 22130 22131 22133\nf 22131 22134 22133\nf 22131 22859 22863\nf 22131 22863 22134\nf 22132 22135 22860\nf 22132 22860 22858\nf 22133 22134 22138\nf 22134 22139 22138\nf 22134 22863 22868\nf 22134 22868 22139\nf 22135 22136 22137\nf 22135 22137 22860\nf 22136 22140 22142\nf 22136 22142 22866\nf 22136 22866 22137\nf 22137 22861 22860\nf 22137 22865 22861\nf 22137 22866 22865\nf 22138 22139 22143\nf 22139 22144 22143\nf 22139 22868 22872\nf 22139 22872 22144\nf 22140 22141 22142\nf 22141 22145 22870\nf 22141 22870 22142\nf 22142 22870 22866\nf 22143 22144 22146\nf 22144 22147 22146\nf 22144 22872 22876\nf 22144 22876 22147\nf 22145 22148 22878\nf 22145 22874 22870\nf 22145 22878 22874\nf 22146 22147 22149\nf 22147 22150 22149\nf 22147 22876 22880\nf 22147 22880 22150\nf 22148 22151 22882\nf 22148 22882 22878\nf 22149 22150 22152\nf 22150 22153 22152\nf 22150 22880 22884\nf 22150 22884 22153\nf 22151 22154 22886\nf 22151 22886 22882\nf 22152 22153 22155\nf 22153 22156 22155\nf 22153 22884 22888\nf 22153 22888 22156\nf 22154 22157 22890\nf 22154 22890 22886\nf 22155 22156 22892\nf 22155 22892 22158\nf 22156 22888 22889\nf 22156 22889 22892\nf 22157 22159 22894\nf 22157 22894 22890\nf 22158 22892 22160\nf 22159 22161 22898\nf 22159 22898 22894\nf 22160 22892 22896\nf 22160 22896 22163\nf 22161 22162 22165\nf 22161 22165 22902\nf 22161 22902 22898\nf 22162 22164 22165\nf 22163 22896 22900\nf 22163 22900 22166\nf 22164 22167 22168\nf 22164 22168 22165\nf 22165 22168 22902\nf 22166 22900 22903\nf 22166 22903 22169\nf 22167 22171 22172\nf 22167 22172 22168\nf 22168 22172 22906\nf 22168 22906 22902\nf 22169 22170 22173\nf 22169 22903 22904\nf 22169 22904 22170\nf 22170 22174 22173\nf 22170 22904 22907\nf 22170 22907 22909\nf 22170 22909 22174\nf 22171 22175 22177\nf 22171 22177 22172\nf 22172 22177 22908\nf 22172 22908 22906\nf 22173 22174 22178\nf 22174 22180 22178\nf 22174 22181 22180\nf 22174 22909 22910\nf 22174 22910 22181\nf 22175 22176 22177\nf 22176 22182 22912\nf 22176 22912 22177\nf 22177 22912 22908\nf 22178 22180 22179\nf 22179 22180 22183\nf 22180 22181 22185\nf 22180 22185 22183\nf 22181 22910 22914\nf 22181 22914 22918\nf 22181 22918 22185\nf 22182 22186 22915\nf 22182 22915 22912\nf 22183 22185 22184\nf 22184 22185 22188\nf 22185 22918 22188\nf 22186 22187 22915\nf 22186 22189 22191\nf 22186 22191 22187\nf 22187 22191 22920\nf 22187 22916 22915\nf 22187 22920 22916\nf 22188 22918 22922\nf 22188 22922 22192\nf 22189 22190 22191\nf 22190 22194 22195\nf 22190 22195 22927\nf 22190 22927 22191\nf 22191 22926 22920\nf 22191 22927 22926\nf 22192 22193 22196\nf 22192 22922 22923\nf 22192 22923 22193\nf 22193 22197 22196\nf 22193 22923 22929\nf 22193 22929 22932\nf 22193 22932 22197\nf 22194 22198 22199\nf 22194 22199 22195\nf 22195 22199 22930\nf 22195 22930 22927\nf 22196 22197 22200\nf 22197 22201 22200\nf 22197 22202 22201\nf 22197 22932 22934\nf 22197 22934 22202\nf 22198 22203 22205\nf 22198 22205 22199\nf 22199 22202 22933\nf 22199 22205 22202\nf 22199 22933 22930\nf 22200 22201 22206\nf 22201 22202 22207\nf 22201 22207 22206\nf 22202 22205 22209\nf 22202 22209 22207\nf 22202 22934 22933\nf 22203 22204 22205\nf 22204 22208 22209\nf 22204 22209 22205\nf 22206 22207 22210\nf 22207 22209 22211\nf 22207 22211 22210\nf 22208 22212 22213\nf 22208 22213 22209\nf 22209 22213 22211\nf 22210 22211 22214\nf 22211 22213 22216\nf 22211 22216 22214\nf 22212 22217 22218\nf 22212 22218 22213\nf 22213 22218 22216\nf 22214 22216 22215\nf 22215 22216 22219\nf 22216 22218 22222\nf 22216 22222 22219\nf 22217 22220 22222\nf 22217 22222 22218\nf 22219 22222 22221\nf 22220 22221 22222\nf 22223 22225 22226\nf 22223 22226 22224\nf 22224 22226 22227\nf 22225 22228 22229\nf 22225 22229 22226\nf 22226 22229 22227\nf 22227 22229 22231\nf 22228 22230 22234\nf 22228 22234 22229\nf 22229 22232 22231\nf 22229 22234 22232\nf 22230 22233 22234\nf 22231 22232 22235\nf 22232 22234 22237\nf 22232 22237 22235\nf 22233 22238 22239\nf 22233 22239 22234\nf 22234 22239 22237\nf 22235 22237 22236\nf 22236 22237 22241\nf 22236 22241 22240\nf 22237 22239 22242\nf 22237 22242 22241\nf 22238 22243 22245\nf 22238 22245 22239\nf 22239 22245 22242\nf 22240 22241 22246\nf 22241 22242 22248\nf 22241 22248 22246\nf 22242 22245 22250\nf 22242 22250 22248\nf 22243 22244 22245\nf 22244 22249 22250\nf 22244 22250 22245\nf 22246 22248 22247\nf 22247 22248 22252\nf 22247 22252 22251\nf 22248 22250 22253\nf 22248 22253 22252\nf 22249 22254 22255\nf 22249 22255 22250\nf 22250 22255 22253\nf 22251 22252 22256\nf 22252 22253 22257\nf 22252 22257 22256\nf 22253 22255 22258\nf 22253 22258 22257\nf 22254 22259 22260\nf 22254 22260 22255\nf 22255 22260 22258\nf 22256 22257 22261\nf 22257 22258 22263\nf 22257 22263 22261\nf 22258 22260 22265\nf 22258 22265 22936\nf 22258 22936 22937\nf 22258 22937 22263\nf 22259 22264 22265\nf 22259 22265 22260\nf 22261 22263 22262\nf 22262 22263 22267\nf 22262 22267 22266\nf 22263 22268 22267\nf 22263 22937 22940\nf 22263 22940 22268\nf 22264 22269 22270\nf 22264 22270 22265\nf 22265 22270 22938\nf 22265 22938 22936\nf 22266 22267 22271\nf 22267 22268 22272\nf 22267 22272 22271\nf 22268 22273 22272\nf 22268 22940 22943\nf 22268 22943 22273\nf 22269 22274 22275\nf 22269 22275 22270\nf 22270 22275 22941\nf 22270 22941 22938\nf 22271 22272 22276\nf 22272 22273 22278\nf 22272 22278 22276\nf 22273 22279 22278\nf 22273 22943 22946\nf 22273 22946 22279\nf 22274 22280 22281\nf 22274 22281 22275\nf 22275 22281 22944\nf 22275 22944 22941\nf 22276 22278 22277\nf 22277 22278 22283\nf 22277 22283 22282\nf 22278 22279 22284\nf 22278 22284 22283\nf 22279 22946 22947\nf 22279 22947 22951\nf 22279 22951 22284\nf 22280 22285 22953\nf 22280 22950 22281\nf 22280 22953 22950\nf 22281 22948 22944\nf 22281 22950 22948\nf 22282 22283 22286\nf 22283 22284 22288\nf 22283 22288 22286\nf 22284 22951 22952\nf 22284 22952 22955\nf 22284 22955 22288\nf 22285 22289 22957\nf 22285 22957 22953\nf 22286 22288 22287\nf 22287 22288 22956\nf 22287 22292 22291\nf 22287 22956 22292\nf 22288 22955 22956\nf 22289 22290 22958\nf 22289 22958 22957\nf 22290 22293 22958\nf 22291 22292 22964\nf 22291 22964 22294\nf 22292 22956 22959\nf 22292 22959 22960\nf 22292 22960 22964\nf 22293 22295 22966\nf 22293 22962 22958\nf 22293 22966 22962\nf 22294 22964 22297\nf 22295 22296 22299\nf 22295 22299 22969\nf 22295 22969 22966\nf 22296 22298 22299\nf 22297 22964 22967\nf 22297 22967 22300\nf 22298 22301 22972\nf 22298 22970 22299\nf 22298 22972 22970\nf 22299 22970 22969\nf 22300 22967 22971\nf 22300 22971 22302\nf 22301 22304 22975\nf 22301 22975 22972\nf 22302 22971 22974\nf 22302 22974 22977\nf 22302 22977 22303\nf 22303 22306 22305\nf 22303 22977 22306\nf 22304 22307 22978\nf 22304 22978 22975\nf 22305 22306 22308\nf 22306 22309 22308\nf 22306 22977 22980\nf 22306 22980 22309\nf 22307 22310 22981\nf 22307 22981 22978\nf 22308 22309 22311\nf 22309 22312 22311\nf 22309 22980 22983\nf 22309 22983 22312\nf 22310 22313 22984\nf 22310 22984 22981\nf 22311 22312 22314\nf 22312 22315 22314\nf 22312 22983 22985\nf 22312 22985 22315\nf 22313 22316 22986\nf 22313 22986 22984\nf 22314 22315 22317\nf 22315 22318 22317\nf 22315 22985 22988\nf 22315 22988 22318\nf 22316 22319 22989\nf 22316 22989 22986\nf 22317 22318 22320\nf 22318 22321 22320\nf 22318 22988 22991\nf 22318 22991 22321\nf 22319 22322 22992\nf 22319 22992 22989\nf 22320 22321 22323\nf 22321 22324 22323\nf 22321 22991 22995\nf 22321 22995 22324\nf 22322 22325 22992\nf 22323 22324 22328\nf 22324 22329 22328\nf 22324 22995 22997\nf 22324 22997 22329\nf 22325 22326 22327\nf 22325 22327 22992\nf 22326 22330 22996\nf 22326 22996 22327\nf 22327 22993 22992\nf 22327 22996 22993\nf 22328 22329 22331\nf 22329 22333 22331\nf 22329 22997 22999\nf 22329 22999 22333\nf 22330 22334 23000\nf 22330 22998 22996\nf 22330 23000 22998\nf 22331 22333 22332\nf 22332 22333 22335\nf 22333 22999 22335\nf 22334 22336 23000\nf 22335 22999 23002\nf 22335 23002 22339\nf 22336 22337 22338\nf 22336 22338 23000\nf 22337 22340 23003\nf 22337 23003 22338\nf 22338 23001 23000\nf 22338 23003 23001\nf 22339 23002 23004\nf 22339 23004 22341\nf 22340 22342 23009\nf 22340 23005 23003\nf 22340 23009 23005\nf 22341 23004 23006\nf 22341 23006 22344\nf 22342 22343 23009\nf 22343 22347 23013\nf 22343 23010 23009\nf 22343 23013 23010\nf 22344 22346 22345\nf 22344 23006 23007\nf 22344 23007 22346\nf 22345 22346 22349\nf 22346 23007 23012\nf 22346 23012 22349\nf 22347 22348 23013\nf 22348 22350 23019\nf 22348 23014 23013\nf 22348 23019 23014\nf 22349 23012 23016\nf 22349 23016 22352\nf 22350 22351 23019\nf 22351 22355 22357\nf 22351 22357 23018\nf 22351 23018 23020\nf 22351 23020 23019\nf 22352 22354 22353\nf 22352 23016 23017\nf 22352 23017 22354\nf 22353 22354 22356\nf 22354 22357 22356\nf 22354 23017 23018\nf 22354 23018 22357\nf 22355 22356 22357\nf 22358 22359 22372\nf 22358 22371 22369\nf 22358 22372 22371\nf 22359 22360 23022\nf 22359 23022 23029\nf 22359 23029 22372\nf 22360 22361 23022\nf 22361 22362 23023\nf 22361 23023 23022\nf 22362 22363 23024\nf 22362 23024 23023\nf 22363 22364 23025\nf 22363 23025 23024\nf 22364 22365 23026\nf 22364 23026 23025\nf 22365 22373 22374\nf 22365 22374 23026\nf 22366 22367 22385\nf 22366 22384 22383\nf 22366 22385 22384\nf 22367 22368 22386\nf 22367 22386 22385\nf 22368 22370 23027\nf 22368 23027 23041\nf 22368 23041 22386\nf 22369 22371 22370\nf 22370 22371 23028\nf 22370 23028 23027\nf 22371 22372 23028\nf 22372 23029 23030\nf 22372 23030 23028\nf 22373 22375 23034\nf 22373 23034 22374\nf 22374 23032 23026\nf 22374 23034 23032\nf 22375 22376 23035\nf 22375 23035 23034\nf 22376 22377 23036\nf 22376 23036 23035\nf 22377 22378 23037\nf 22377 23037 23036\nf 22378 22379 23038\nf 22378 23038 23037\nf 22379 22380 23039\nf 22379 23039 23038\nf 22380 22381 23040\nf 22380 23040 23039\nf 22381 22382 22389\nf 22381 22387 23040\nf 22381 22389 22387\nf 22382 22388 22389\nf 22383 22384 22393\nf 22384 22385 22395\nf 22384 22395 22393\nf 22385 22386 22396\nf 22385 22396 22395\nf 22386 22397 22396\nf 22386 23041 23048\nf 22386 23048 22397\nf 22387 22389 23046\nf 22387 23044 23040\nf 22387 23046 23044\nf 22388 22390 23047\nf 22388 23047 22389\nf 22389 23047 23046\nf 22390 22391 22399\nf 22390 22398 23050\nf 22390 22399 22398\nf 22390 23050 23047\nf 22391 22392 22401\nf 22391 22401 22399\nf 22392 22400 22401\nf 22393 22395 22394\nf 22394 22395 22404\nf 22394 22404 22402\nf 22395 22396 22405\nf 22395 22405 22404\nf 22396 22397 22406\nf 22396 22406 22405\nf 22397 22407 22406\nf 22397 23048 23053\nf 22397 23053 22407\nf 22398 22399 22408\nf 22398 22408 23052\nf 22398 23052 23050\nf 22399 22401 22408\nf 22400 22409 22410\nf 22400 22410 22401\nf 22401 22410 22408\nf 22402 22404 22403\nf 22403 22404 22412\nf 22404 22405 22413\nf 22404 22413 22412\nf 22405 22406 22413\nf 22406 22407 22414\nf 22406 22414 22413\nf 22407 23053 23054\nf 22407 23054 23058\nf 22407 23058 22414\nf 22408 22410 22415\nf 22408 22415 23057\nf 22408 23056 23052\nf 22408 23057 23056\nf 22409 22411 22417\nf 22409 22417 22410\nf 22410 22417 22415\nf 22411 22416 22417\nf 22412 22413 22419\nf 22413 22414 22421\nf 22413 22421 22419\nf 22414 22423 22421\nf 22414 22425 22423\nf 22414 23058 23059\nf 22414 23059 22425\nf 22415 22417 22426\nf 22415 22426 23064\nf 22415 23062 23057\nf 22415 23064 23062\nf 22416 22418 22429\nf 22416 22429 22417\nf 22417 22429 22426\nf 22418 22427 22429\nf 22419 22421 22420\nf 22420 22421 22422\nf 22421 22423 22422\nf 22422 22423 22424\nf 22423 22425 22424\nf 22424 22425 22432\nf 22424 22432 22430\nf 22425 23059 23065\nf 22425 23065 23066\nf 22425 23066 22432\nf 22426 22429 22442\nf 22426 22442 23072\nf 22426 23072 23064\nf 22427 22428 22429\nf 22428 22441 22442\nf 22428 22442 22429\nf 22430 22432 22431\nf 22431 22432 22433\nf 22432 22434 22433\nf 22432 23066 23068\nf 22432 23068 22434\nf 22433 22434 22435\nf 22434 22436 22435\nf 22434 23068 23070\nf 22434 23070 22436\nf 22435 22436 22437\nf 22436 22438 22437\nf 22436 23070 23071\nf 22436 23071 22438\nf 22437 22438 23075\nf 22437 23075 22439\nf 22438 23071 23074\nf 22438 23074 23075\nf 22439 23075 23077\nf 22439 23077 22440\nf 22440 23077 23079\nf 22440 23079 22443\nf 22441 22450 22452\nf 22441 22452 22442\nf 22442 22449 23080\nf 22442 22452 22449\nf 22442 23080 23072\nf 22443 22445 22444\nf 22443 23079 22445\nf 22444 22445 23084\nf 22444 23084 22446\nf 22445 23079 23083\nf 22445 23083 23084\nf 22446 23084 23086\nf 22446 23086 22447\nf 22447 23086 23087\nf 22447 23087 22453\nf 22448 22449 22451\nf 22448 22465 22467\nf 22448 22467 23090\nf 22448 23090 22449\nf 22449 22452 22451\nf 22449 23081 23080\nf 22449 23089 23081\nf 22449 23090 23089\nf 22450 22451 22452\nf 22453 22455 22454\nf 22453 23087 22455\nf 22454 22455 22456\nf 22455 22457 22456\nf 22455 23087 23088\nf 22455 23088 22457\nf 22456 22457 23092\nf 22456 23092 22458\nf 22457 23088 23091\nf 22457 23091 23092\nf 22458 23092 23093\nf 22458 23093 22459\nf 22459 23093 23094\nf 22459 23094 22460\nf 22460 23094 23095\nf 22460 23095 22461\nf 22461 23095 23096\nf 22461 23096 22462\nf 22462 23096 23097\nf 22462 23097 22463\nf 22463 23097 23099\nf 22463 23099 22464\nf 22464 23099 22466\nf 22465 22466 22467\nf 22466 23098 22467\nf 22466 23099 23098\nf 22467 23098 23090\nf 22468 22472 22473\nf 22468 22473 22470\nf 22469 22479 22480\nf 22469 22480 22477\nf 22470 22473 22471\nf 22471 22473 23100\nf 22471 22484 22482\nf 22471 23100 22484\nf 22472 22474 23100\nf 22472 23100 22473\nf 22474 22485 22486\nf 22474 22486 23106\nf 22474 23106 23100\nf 22475 22476 22493\nf 22475 22492 22490\nf 22475 22493 22492\nf 22476 22478 23101\nf 22476 23101 23112\nf 22476 23112 22493\nf 22477 22480 22478\nf 22478 22480 23102\nf 22478 23102 23101\nf 22479 22481 23102\nf 22479 23102 22480\nf 22481 22494 22495\nf 22481 22495 23115\nf 22481 23115 23102\nf 22482 22484 22483\nf 22483 22484 23105\nf 22483 23103 23118\nf 22483 23105 23103\nf 22483 23118 22497\nf 22484 23100 23104\nf 22484 23104 23105\nf 22485 22487 23108\nf 22485 23108 22486\nf 22486 23108 23106\nf 22487 22488 23109\nf 22487 23109 23108\nf 22488 22498 22499\nf 22488 22499 23109\nf 22489 22491 23110\nf 22489 22504 22502\nf 22489 23110 23122\nf 22489 23122 22504\nf 22490 22492 22491\nf 22491 22492 23111\nf 22491 23111 23110\nf 22492 22493 23111\nf 22493 23112 23113\nf 22493 23113 23111\nf 22494 22496 23117\nf 22494 23117 22495\nf 22495 23117 23115\nf 22496 22505 22506\nf 22496 22506 23125\nf 22496 23125 23117\nf 22497 23118 22507\nf 22498 22500 23121\nf 22498 23121 22499\nf 22499 23119 23109\nf 22499 23121 23119\nf 22500 22509 22510\nf 22500 22510 23128\nf 22500 23128 23121\nf 22501 22503 22514\nf 22501 22513 22512\nf 22501 22514 22513\nf 22502 22504 22503\nf 22503 22504 23123\nf 22503 23123 22514\nf 22504 23122 23123\nf 22505 22515 23132\nf 22505 23126 22506\nf 22505 23132 23126\nf 22506 23126 23125\nf 22507 23118 23127\nf 22507 23127 23133\nf 22507 23133 22508\nf 22508 22518 22517\nf 22508 23133 22518\nf 22509 22511 23129\nf 22509 23129 22510\nf 22510 23129 23128\nf 22511 22519 22520\nf 22511 22520 23135\nf 22511 23135 23129\nf 22512 22513 22521\nf 22513 22514 22522\nf 22513 22522 22521\nf 22514 23123 23130\nf 22514 23130 23131\nf 22514 23131 23136\nf 22514 23136 22522\nf 22515 22516 22524\nf 22515 22524 23138\nf 22515 23138 23132\nf 22516 22523 22524\nf 22517 22518 23140\nf 22517 23140 22525\nf 22518 23133 23134\nf 22518 23134 23140\nf 22519 22526 22527\nf 22519 22527 22520\nf 22520 22527 23135\nf 22521 22522 22528\nf 22522 22529 22528\nf 22522 23136 23143\nf 22522 23143 22529\nf 22523 22530 23145\nf 22523 23139 22524\nf 22523 23145 23139\nf 22524 23139 23138\nf 22525 23140 22531\nf 22526 22532 23148\nf 22526 23142 22527\nf 22526 23148 23142\nf 22527 23141 23135\nf 22527 23142 23141\nf 22528 22529 22534\nf 22529 22536 22534\nf 22529 23143 23150\nf 22529 23150 22536\nf 22530 22537 23152\nf 22530 23152 23145\nf 22531 23140 23147\nf 22531 23147 22538\nf 22532 22533 22540\nf 22532 22540 23154\nf 22532 23154 23148\nf 22533 22539 22540\nf 22534 22536 22535\nf 22535 22536 22541\nf 22536 23150 22541\nf 22537 22542 23159\nf 22537 23159 23152\nf 22538 23147 23153\nf 22538 23153 22543\nf 22539 22544 22545\nf 22539 22545 22540\nf 22540 22545 23154\nf 22541 23150 23156\nf 22541 23156 22547\nf 22542 22549 23165\nf 22542 23165 23159\nf 22543 23153 23160\nf 22543 23160 22550\nf 22544 22546 23163\nf 22544 23163 22545\nf 22545 23161 23154\nf 22545 23163 23161\nf 22546 22551 22552\nf 22546 22552 23167\nf 22546 23167 23163\nf 22547 22548 22553\nf 22547 23156 23157\nf 22547 23157 22548\nf 22548 22554 22553\nf 22548 23157 23164\nf 22548 23164 23169\nf 22548 23169 22554\nf 22549 22555 23170\nf 22549 23170 23165\nf 22550 23160 23166\nf 22550 23166 22556\nf 22551 22557 22558\nf 22551 22558 22552\nf 22552 22558 23167\nf 22553 22554 22560\nf 22554 22561 22560\nf 22554 23169 23175\nf 22554 23175 22561\nf 22555 22562 23176\nf 22555 23176 23170\nf 22556 23166 23171\nf 22556 23171 22563\nf 22557 22559 23174\nf 22557 23174 22558\nf 22558 23172 23167\nf 22558 23174 23172\nf 22559 22564 22565\nf 22559 22565 23178\nf 22559 23178 23174\nf 22560 22561 22566\nf 22561 22567 22566\nf 22561 23175 23181\nf 22561 23181 22567\nf 22562 22568 23183\nf 22562 23183 23176\nf 22563 23171 23177\nf 22563 23177 22569\nf 22564 22570 23185\nf 22564 23180 22565\nf 22564 23185 23180\nf 22565 23180 23178\nf 22566 22567 23188\nf 22566 23188 22572\nf 22567 23181 23182\nf 22567 23182 23188\nf 22568 22574 23190\nf 22568 23190 23183\nf 22569 23177 23184\nf 22569 23184 22575\nf 22570 22571 23187\nf 22570 23187 23185\nf 22571 22576 23187\nf 22572 23188 23197\nf 22572 23197 22573\nf 22573 22581 22579\nf 22573 23197 22581\nf 22574 22582 23190\nf 22575 23184 23192\nf 22575 23192 22584\nf 22576 22577 23195\nf 22576 23193 23187\nf 22576 23195 23193\nf 22577 22578 23195\nf 22578 22585 22586\nf 22578 22586 23195\nf 22579 22581 22580\nf 22580 22581 23198\nf 22580 23196 23280\nf 22580 23198 23196\nf 22580 23280 22663\nf 22581 23197 23198\nf 22582 22583 23190\nf 22582 22665 22667\nf 22582 22667 22583\nf 22583 22667 23199\nf 22583 23191 23190\nf 22583 23199 23191\nf 22584 23192 23200\nf 22584 23200 22668\nf 22585 22587 23203\nf 22585 23203 22586\nf 22586 23202 23195\nf 22586 23203 23202\nf 22587 22588 23204\nf 22587 23204 23203\nf 22588 22589 23205\nf 22588 23205 23204\nf 22589 22590 23206\nf 22589 23206 23205\nf 22590 22591 23207\nf 22590 23207 23206\nf 22591 22592 23208\nf 22591 23208 23207\nf 22592 22593 23209\nf 22592 23209 23208\nf 22593 22594 23210\nf 22593 23210 23209\nf 22594 22595 23211\nf 22594 23211 23210\nf 22595 22596 23212\nf 22595 23212 23211\nf 22596 22597 23213\nf 22596 23213 23212\nf 22597 22598 23214\nf 22597 23214 23213\nf 22598 22599 23215\nf 22598 23215 23214\nf 22599 22600 23216\nf 22599 23216 23215\nf 22600 22601 23217\nf 22600 23217 23216\nf 22601 22602 23218\nf 22601 23218 23217\nf 22602 22603 23219\nf 22602 23219 23218\nf 22603 22604 23220\nf 22603 23220 23219\nf 22604 22605 23221\nf 22604 23221 23220\nf 22605 22606 23222\nf 22605 23222 23221\nf 22606 22607 23223\nf 22606 23223 23222\nf 22607 22608 23224\nf 22607 23224 23223\nf 22608 22609 23225\nf 22608 23225 23224\nf 22609 22610 23226\nf 22609 23226 23225\nf 22610 22611 23227\nf 22610 23227 23226\nf 22611 22612 23228\nf 22611 23228 23227\nf 22612 22613 23229\nf 22612 23229 23228\nf 22613 22614 23230\nf 22613 23230 23229\nf 22614 22615 23231\nf 22614 23231 23230\nf 22615 22616 23232\nf 22615 23232 23231\nf 22616 22617 23233\nf 22616 23233 23232\nf 22617 22618 23234\nf 22617 23234 23233\nf 22618 22619 23235\nf 22618 23235 23234\nf 22619 22620 23236\nf 22619 23236 23235\nf 22620 22621 23237\nf 22620 23237 23236\nf 22621 22622 23238\nf 22621 23238 23237\nf 22622 22623 23239\nf 22622 23239 23238\nf 22623 22624 23240\nf 22623 23240 23239\nf 22624 22625 23241\nf 22624 23241 23240\nf 22625 22626 23242\nf 22625 23242 23241\nf 22626 22627 23243\nf 22626 23243 23242\nf 22627 22628 23244\nf 22627 23244 23243\nf 22628 22629 23245\nf 22628 23245 23244\nf 22629 22630 23246\nf 22629 23246 23245\nf 22630 22631 23247\nf 22630 23247 23246\nf 22631 22632 23248\nf 22631 23248 23247\nf 22632 22633 23249\nf 22632 23249 23248\nf 22633 22634 23250\nf 22633 23250 23249\nf 22634 22635 23251\nf 22634 23251 23250\nf 22635 22636 23252\nf 22635 23252 23251\nf 22636 22637 23253\nf 22636 23253 23252\nf 22637 22638 23254\nf 22637 23254 23253\nf 22638 22639 23255\nf 22638 23255 23254\nf 22639 22640 23256\nf 22639 23256 23255\nf 22640 22641 23257\nf 22640 23257 23256\nf 22641 22642 23258\nf 22641 23258 23257\nf 22642 22643 23259\nf 22642 23259 23258\nf 22643 22644 23260\nf 22643 23260 23259\nf 22644 22645 23261\nf 22644 23261 23260\nf 22645 22646 23262\nf 22645 23262 23261\nf 22646 22647 23263\nf 22646 23263 23262\nf 22647 22648 23264\nf 22647 23264 23263\nf 22648 22649 23265\nf 22648 23265 23264\nf 22649 22650 23266\nf 22649 23266 23265\nf 22650 22651 23267\nf 22650 23267 23266\nf 22651 22652 23268\nf 22651 23268 23267\nf 22652 22653 23269\nf 22652 23269 23268\nf 22653 22654 23270\nf 22653 23270 23269\nf 22654 22655 23271\nf 22654 23271 23270\nf 22655 22656 23272\nf 22655 23272 23271\nf 22656 22657 23273\nf 22656 23273 23272\nf 22657 22658 23274\nf 22657 23274 23273\nf 22658 22659 23275\nf 22658 23275 23274\nf 22659 22660 23276\nf 22659 23276 23275\nf 22660 22661 23277\nf 22660 23277 23276\nf 22661 22662 23278\nf 22661 23278 23277\nf 22662 22664 23279\nf 22662 23279 23278\nf 22663 23280 22664\nf 22664 23280 23281\nf 22664 23281 23279\nf 22665 22666 22667\nf 22666 22671 23283\nf 22666 23283 22667\nf 22667 23283 23199\nf 22668 22670 22669\nf 22668 23200 23201\nf 22668 23201 22670\nf 22669 22670 22672\nf 22670 23201 23284\nf 22670 23284 22672\nf 22671 22673 23287\nf 22671 23285 23283\nf 22671 23287 23285\nf 22672 23284 23286\nf 22672 23286 22675\nf 22673 22674 23287\nf 22674 22676 23290\nf 22674 23288 23287\nf 22674 23290 23288\nf 22675 23286 23289\nf 22675 23289 22678\nf 22676 22677 23290\nf 22677 22679 23294\nf 22677 23291 23290\nf 22677 23294 23291\nf 22678 23289 23292\nf 22678 23292 22681\nf 22679 22680 23294\nf 22680 22695 23310\nf 22680 23295 23294\nf 22680 23310 23295\nf 22681 22683 22682\nf 22681 23292 23293\nf 22681 23293 22683\nf 22682 22683 22699\nf 22682 22699 22697\nf 22683 23293 23296\nf 22683 23296 23297\nf 22683 23297 22699\nf 22684 22779 22781\nf 22684 22781 23390\nf 22684 23300 22685\nf 22684 23390 23300\nf 22685 23300 23301\nf 22685 23301 22686\nf 22686 23301 23302\nf 22686 23302 22687\nf 22687 23302 23303\nf 22687 23303 22688\nf 22688 23303 23304\nf 22688 23304 22689\nf 22689 23304 23305\nf 22689 23305 22690\nf 22690 23305 23306\nf 22690 23306 22691\nf 22691 23306 23307\nf 22691 23307 22692\nf 22692 23307 23308\nf 22692 23308 22693\nf 22693 23308 23309\nf 22693 23309 22694\nf 22694 23309 23311\nf 22694 23311 22696\nf 22695 22696 23310\nf 22696 23311 23310\nf 22697 22699 22698\nf 22698 22699 22700\nf 22699 22701 22700\nf 22699 23297 23298\nf 22699 23298 22701\nf 22700 22701 22702\nf 22701 22703 22702\nf 22701 23298 23299\nf 22701 23299 22703\nf 22702 22703 23313\nf 22702 23313 22704\nf 22703 23299 23312\nf 22703 23312 23313\nf 22704 23313 22782\nf 22705 22787 22789\nf 22705 22789 23314\nf 22705 23314 23315\nf 22705 23315 23316\nf 22705 23316 22706\nf 22706 23316 23317\nf 22706 23317 22707\nf 22707 23317 23318\nf 22707 23318 22708\nf 22708 23318 23319\nf 22708 23319 22709\nf 22709 23319 23320\nf 22709 23320 22710\nf 22710 23320 23321\nf 22710 23321 22711\nf 22711 23321 23322\nf 22711 23322 22712\nf 22712 23322 23323\nf 22712 23323 22713\nf 22713 23323 23324\nf 22713 23324 22714\nf 22714 23324 23325\nf 22714 23325 22715\nf 22715 23325 23326\nf 22715 23326 22716\nf 22716 23326 23327\nf 22716 23327 22717\nf 22717 23327 23328\nf 22717 23328 22718\nf 22718 23328 23329\nf 22718 23329 22719\nf 22719 23329 23330\nf 22719 23330 22720\nf 22720 23330 23331\nf 22720 23331 22721\nf 22721 23331 23332\nf 22721 23332 22722\nf 22722 23332 23333\nf 22722 23333 22723\nf 22723 23333 23334\nf 22723 23334 22724\nf 22724 23334 23335\nf 22724 23335 22725\nf 22725 23335 23336\nf 22725 23336 22726\nf 22726 23336 23337\nf 22726 23337 22727\nf 22727 23337 23338\nf 22727 23338 22728\nf 22728 23338 23339\nf 22728 23339 22729\nf 22729 23339 23340\nf 22729 23340 22730\nf 22730 23340 23341\nf 22730 23341 22731\nf 22731 23341 23342\nf 22731 23342 22732\nf 22732 23342 23343\nf 22732 23343 22733\nf 22733 23343 23344\nf 22733 23344 22734\nf 22734 23344 23345\nf 22734 23345 22735\nf 22735 23345 23346\nf 22735 23346 22736\nf 22736 23346 23347\nf 22736 23347 22737\nf 22737 23347 23348\nf 22737 23348 22738\nf 22738 23348 23349\nf 22738 23349 22739\nf 22739 23349 23350\nf 22739 23350 22740\nf 22740 23350 23351\nf 22740 23351 22741\nf 22741 23351 23352\nf 22741 23352 22742\nf 22742 23352 23353\nf 22742 23353 22743\nf 22743 23353 23354\nf 22743 23354 22744\nf 22744 23354 23355\nf 22744 23355 22745\nf 22745 23355 23356\nf 22745 23356 22746\nf 22746 23356 23357\nf 22746 23357 22747\nf 22747 23357 23358\nf 22747 23358 22748\nf 22748 23358 23359\nf 22748 23359 22749\nf 22749 23359 23360\nf 22749 23360 22750\nf 22750 23360 23361\nf 22750 23361 22751\nf 22751 23361 23362\nf 22751 23362 22752\nf 22752 23362 23363\nf 22752 23363 22753\nf 22753 23363 23364\nf 22753 23364 22754\nf 22754 23364 23365\nf 22754 23365 22755\nf 22755 23365 23366\nf 22755 23366 22756\nf 22756 23366 23367\nf 22756 23367 22757\nf 22757 23367 23368\nf 22757 23368 22758\nf 22758 23368 23369\nf 22758 23369 22759\nf 22759 23369 23370\nf 22759 23370 22760\nf 22760 23370 23371\nf 22760 23371 22761\nf 22761 23371 23372\nf 22761 23372 22762\nf 22762 23372 23373\nf 22762 23373 22763\nf 22763 23373 23374\nf 22763 23374 22764\nf 22764 23374 23375\nf 22764 23375 22765\nf 22765 23375 23376\nf 22765 23376 22766\nf 22766 23376 23377\nf 22766 23377 22767\nf 22767 23377 23378\nf 22767 23378 22768\nf 22768 23378 23379\nf 22768 23379 22769\nf 22769 23379 23380\nf 22769 23380 22770\nf 22770 23380 23381\nf 22770 23381 22771\nf 22771 23381 23382\nf 22771 23382 22772\nf 22772 23382 23383\nf 22772 23383 22773\nf 22773 23383 23384\nf 22773 23384 22774\nf 22774 23384 23385\nf 22774 23385 22775\nf 22775 23385 23386\nf 22775 23386 22776\nf 22776 23386 23387\nf 22776 23387 22777\nf 22777 23387 23388\nf 22777 23388 22778\nf 22778 23388 23389\nf 22778 23389 22780\nf 22779 22780 22781\nf 22780 23389 23391\nf 22780 23391 22781\nf 22781 23391 23390\nf 22782 23313 23394\nf 22782 23394 23395\nf 22782 23395 22783\nf 22783 23395 23397\nf 22783 23397 22790\nf 22784 22793 22795\nf 22784 22795 23398\nf 22784 23398 23399\nf 22784 23399 23400\nf 22784 23400 22785\nf 22785 23400 23402\nf 22785 23402 22786\nf 22786 23402 22788\nf 22787 22788 22789\nf 22788 23401 22789\nf 22788 23402 23401\nf 22789 23401 23314\nf 22790 22792 22791\nf 22790 23397 22792\nf 22791 22792 22794\nf 22792 22795 22794\nf 22792 23397 23398\nf 22792 23398 22795\nf 22793 22794 22795\nf 22796 22797 22801\nf 22796 22799 22798\nf 22796 22801 22799\nf 22797 22800 22801\nf 22798 22799 23405\nf 22798 23405 22803\nf 22799 22801 23403\nf 22799 23403 23405\nf 22800 22802 23404\nf 22800 23404 22801\nf 22801 23404 23403\nf 22802 22805 22806\nf 22802 22806 23407\nf 22802 23407 23404\nf 22803 23405 22804\nf 22804 23405 23406\nf 22804 23406 23410\nf 22804 23410 22808\nf 22805 22807 23408\nf 22805 23408 22806\nf 22806 23408 23407\nf 22807 22809 23409\nf 22807 23409 23408\nf 22808 23410 22811\nf 22809 22810 22813\nf 22809 22813 23414\nf 22809 23411 23409\nf 22809 23414 23411\nf 22810 22812 22813\nf 22811 23410 23413\nf 22811 23413 22815\nf 22812 22814 23415\nf 22812 23415 22813\nf 22813 23415 23414\nf 22814 22816 22817\nf 22814 22817 23419\nf 22814 23419 23415\nf 22815 23413 23416\nf 22815 23416 22818\nf 22816 22821 23422\nf 22816 23420 22817\nf 22816 23422 23420\nf 22817 23420 23419\nf 22818 22820 22819\nf 22818 23416 22820\nf 22819 22820 23421\nf 22819 23421 22822\nf 22820 23416 23417\nf 22820 23417 23421\nf 22821 22823 23424\nf 22821 23424 23422\nf 22822 23421 23423\nf 22822 23423 22825\nf 22823 22824 22827\nf 22823 22827 23426\nf 22823 23426 23424\nf 22824 22826 22827\nf 22825 23423 23425\nf 22825 23425 22828\nf 22826 22829 23429\nf 22826 23427 22827\nf 22826 23429 23427\nf 22827 23427 23426\nf 22828 23425 23428\nf 22828 23428 22830\nf 22829 22831 23432\nf 22829 23432 23429\nf 22830 23428 23431\nf 22830 23431 22832\nf 22831 22833 23434\nf 22831 23434 23432\nf 22832 23431 23433\nf 22832 23433 22834\nf 22833 22835 23436\nf 22833 23436 23434\nf 22834 23433 23435\nf 22834 23435 22836\nf 22835 22837 23438\nf 22835 23438 23436\nf 22836 23435 23437\nf 22836 23437 22838\nf 22837 22839 23440\nf 22837 23440 23438\nf 22838 23437 23439\nf 22838 23439 22840\nf 22839 22841 23442\nf 22839 23442 23440\nf 22840 23439 23441\nf 22840 23441 22842\nf 22841 22843 23444\nf 22841 23444 23442\nf 22842 23441 23443\nf 22842 23443 22844\nf 22843 22845 23447\nf 22843 23447 23444\nf 22844 23443 23446\nf 22844 23446 22846\nf 22845 22847 23451\nf 22845 23451 23447\nf 22846 23446 23449\nf 22846 23449 22848\nf 22847 22851 23451\nf 22848 22850 22849\nf 22848 23449 23450\nf 22848 23450 22850\nf 22849 22850 22853\nf 22850 23450 23454\nf 22850 23454 22853\nf 22851 22852 23451\nf 22851 22854 22856\nf 22851 22856 22852\nf 22852 22856 23455\nf 22852 23452 23451\nf 22852 23455 23452\nf 22853 23454 23456\nf 22853 23456 22857\nf 22854 22855 22856\nf 22855 22858 23457\nf 22855 23457 22856\nf 22856 23457 23455\nf 22857 23456 23458\nf 22857 23458 22859\nf 22858 22860 23459\nf 22858 23459 23457\nf 22859 23458 23462\nf 22859 23462 22863\nf 22860 22861 22862\nf 22860 22862 23459\nf 22861 22865 22867\nf 22861 22867 23466\nf 22861 23466 22862\nf 22862 23460 23459\nf 22862 23465 23460\nf 22862 23466 23465\nf 22863 22864 22868\nf 22863 23462 23463\nf 22863 23463 22864\nf 22864 22869 22868\nf 22864 23463 23467\nf 22864 23467 23470\nf 22864 23470 22869\nf 22865 22866 22867\nf 22866 22870 22871\nf 22866 22871 23469\nf 22866 23469 22867\nf 22867 23468 23466\nf 22867 23469 23468\nf 22868 22869 22872\nf 22869 22873 22872\nf 22869 23470 23472\nf 22869 23472 22873\nf 22870 22874 22875\nf 22870 22875 22871\nf 22871 22875 23471\nf 22871 23471 23469\nf 22872 22873 22876\nf 22873 22877 22876\nf 22873 23472 23476\nf 22873 23476 22877\nf 22874 22878 22879\nf 22874 22879 22875\nf 22875 22879 23474\nf 22875 23474 23471\nf 22876 22877 22880\nf 22877 22881 22880\nf 22877 23476 23480\nf 22877 23480 22881\nf 22878 22882 22883\nf 22878 22883 22879\nf 22879 22883 23478\nf 22879 23478 23474\nf 22880 22881 22884\nf 22881 22885 22884\nf 22881 23480 23484\nf 22881 23484 22885\nf 22882 22886 22887\nf 22882 22887 22883\nf 22883 22887 23482\nf 22883 23482 23478\nf 22884 22885 23489\nf 22884 23489 22888\nf 22885 23484 23485\nf 22885 23485 23489\nf 22886 22890 22891\nf 22886 22891 22887\nf 22887 22891 23487\nf 22887 23487 23482\nf 22888 23489 23493\nf 22888 23493 22889\nf 22889 22893 22892\nf 22889 23493 22893\nf 22890 22894 22895\nf 22890 22895 22891\nf 22891 22895 23491\nf 22891 23491 23487\nf 22892 22893 22896\nf 22893 22897 22896\nf 22893 23493 23497\nf 22893 23497 22897\nf 22894 22898 22899\nf 22894 22899 22895\nf 22895 22899 23495\nf 22895 23495 23491\nf 22896 22897 22900\nf 22897 22901 22900\nf 22897 23497 23502\nf 22897 23502 22901\nf 22898 22902 23505\nf 22898 23501 22899\nf 22898 23505 23501\nf 22899 23499 23495\nf 22899 23501 23499\nf 22900 22901 22903\nf 22901 22905 22903\nf 22901 23502 23507\nf 22901 23507 22905\nf 22902 22906 23509\nf 22902 23509 23505\nf 22903 22905 22904\nf 22904 22905 22907\nf 22905 23507 22907\nf 22906 22908 23515\nf 22906 23515 23509\nf 22907 23507 23511\nf 22907 23511 22909\nf 22908 22912 23515\nf 22909 22911 22910\nf 22909 23511 23512\nf 22909 23512 22911\nf 22910 22911 22914\nf 22911 23512 23518\nf 22911 23518 22914\nf 22912 22913 23515\nf 22912 22915 22917\nf 22912 22917 22913\nf 22913 22917 23520\nf 22913 23516 23515\nf 22913 23520 23516\nf 22914 23518 23522\nf 22914 23522 22918\nf 22915 22916 22917\nf 22916 22920 22921\nf 22916 22921 23527\nf 22916 23527 22917\nf 22917 23526 23520\nf 22917 23527 23526\nf 22918 22919 22922\nf 22918 23522 23523\nf 22918 23523 22919\nf 22919 22924 22922\nf 22919 22925 22924\nf 22919 23523 23529\nf 22919 23529 23531\nf 22919 23531 22925\nf 22920 22926 22928\nf 22920 22928 22921\nf 22921 22925 23530\nf 22921 22928 22925\nf 22921 23530 23527\nf 22922 22924 22923\nf 22923 22924 22929\nf 22924 22925 22931\nf 22924 22931 22929\nf 22925 22928 22931\nf 22925 23531 23530\nf 22926 22927 22928\nf 22927 22930 22931\nf 22927 22931 22928\nf 22929 22931 22932\nf 22930 22933 22935\nf 22930 22935 22931\nf 22931 22935 22932\nf 22932 22935 22934\nf 22933 22934 22935\nf 22936 22938 22939\nf 22936 22939 22937\nf 22937 22939 22940\nf 22938 22941 22942\nf 22938 22942 22939\nf 22939 22942 22940\nf 22940 22942 22943\nf 22941 22944 22945\nf 22941 22945 22942\nf 22942 22945 22943\nf 22943 22945 22946\nf 22944 22948 22949\nf 22944 22949 22945\nf 22945 22949 22946\nf 22946 22949 22947\nf 22947 22949 23534\nf 22947 23533 23535\nf 22947 23534 23533\nf 22947 23535 22951\nf 22948 22950 23534\nf 22948 23534 22949\nf 22950 22953 22954\nf 22950 22954 23537\nf 22950 23537 23534\nf 22951 23535 22952\nf 22952 23535 23536\nf 22952 23536 23539\nf 22952 23539 22955\nf 22953 22957 23540\nf 22953 23538 22954\nf 22953 23540 23538\nf 22954 23538 23537\nf 22955 23539 23541\nf 22955 23541 22956\nf 22956 22961 22959\nf 22956 23541 22961\nf 22957 22958 22963\nf 22957 22963 23543\nf 22957 23543 23540\nf 22958 22962 22963\nf 22959 22961 22960\nf 22960 22961 23542\nf 22960 22965 22964\nf 22960 23542 22965\nf 22961 23541 23542\nf 22962 22966 23546\nf 22962 23544 22963\nf 22962 23546 23544\nf 22963 23544 23543\nf 22964 22965 22967\nf 22965 22968 22967\nf 22965 23542 23545\nf 22965 23545 23548\nf 22965 23548 22968\nf 22966 22969 23550\nf 22966 23550 23546\nf 22967 22968 23551\nf 22967 23551 22971\nf 22968 23548 23549\nf 22968 23549 23551\nf 22969 22970 22973\nf 22969 22973 23553\nf 22969 23553 23550\nf 22970 22972 22973\nf 22971 23551 22974\nf 22972 22975 22976\nf 22972 22976 22973\nf 22973 22976 23553\nf 22974 23551 23554\nf 22974 23554 22977\nf 22975 22978 22979\nf 22975 22979 22976\nf 22976 22979 23555\nf 22976 23555 23553\nf 22977 23554 23556\nf 22977 23556 22980\nf 22978 22981 22982\nf 22978 22982 22979\nf 22979 22982 23557\nf 22979 23557 23555\nf 22980 23556 23558\nf 22980 23558 22983\nf 22981 22984 23562\nf 22981 23560 22982\nf 22981 23562 23560\nf 22982 23559 23557\nf 22982 23560 23559\nf 22983 23558 23561\nf 22983 23561 22985\nf 22984 22986 23562\nf 22985 23561 23565\nf 22985 23565 22988\nf 22986 22987 23562\nf 22986 22989 22990\nf 22986 22990 22987\nf 22987 22990 23566\nf 22987 23563 23562\nf 22987 23566 23563\nf 22988 23565 23567\nf 22988 23567 22991\nf 22989 22992 22994\nf 22989 22994 22990\nf 22990 22994 23568\nf 22990 23568 23566\nf 22991 23567 23569\nf 22991 23569 22995\nf 22992 22993 22994\nf 22993 22996 23570\nf 22993 23570 22994\nf 22994 23570 23568\nf 22995 23569 23571\nf 22995 23571 22997\nf 22996 22998 23574\nf 22996 23572 23570\nf 22996 23574 23572\nf 22997 23571 23573\nf 22997 23573 22999\nf 22998 23000 23576\nf 22998 23576 23574\nf 22999 23573 23575\nf 22999 23575 23002\nf 23000 23001 23576\nf 23001 23003 23580\nf 23001 23577 23576\nf 23001 23580 23577\nf 23002 23575 23579\nf 23002 23579 23004\nf 23003 23005 23584\nf 23003 23584 23580\nf 23004 23579 23581\nf 23004 23581 23006\nf 23005 23009 23584\nf 23006 23008 23007\nf 23006 23581 23582\nf 23006 23582 23008\nf 23007 23008 23012\nf 23008 23582 23586\nf 23008 23586 23012\nf 23009 23010 23011\nf 23009 23011 23584\nf 23010 23013 23015\nf 23010 23015 23588\nf 23010 23588 23011\nf 23011 23585 23584\nf 23011 23587 23585\nf 23011 23588 23587\nf 23012 23586 23589\nf 23012 23589 23016\nf 23013 23014 23015\nf 23014 23019 23021\nf 23014 23021 23591\nf 23014 23591 23015\nf 23015 23590 23588\nf 23015 23591 23590\nf 23016 23589 23592\nf 23016 23592 23593\nf 23016 23593 23017\nf 23017 23593 23596\nf 23017 23596 23018\nf 23018 23596 23020\nf 23019 23020 23021\nf 23020 23595 23021\nf 23020 23596 23595\nf 23021 23595 23591\nf 23022 23023 23597\nf 23022 23031 23029\nf 23022 23597 23601\nf 23022 23601 23031\nf 23023 23024 23597\nf 23024 23025 23598\nf 23024 23598 23597\nf 23025 23026 23599\nf 23025 23599 23598\nf 23026 23032 23033\nf 23026 23033 23599\nf 23027 23028 23043\nf 23027 23042 23041\nf 23027 23043 23042\nf 23028 23030 23600\nf 23028 23600 23612\nf 23028 23612 23043\nf 23029 23031 23030\nf 23030 23031 23602\nf 23030 23602 23600\nf 23031 23601 23602\nf 23032 23034 23604\nf 23032 23604 23033\nf 23033 23603 23599\nf 23033 23604 23603\nf 23034 23035 23606\nf 23034 23606 23604\nf 23035 23036 23607\nf 23035 23607 23606\nf 23036 23037 23608\nf 23036 23608 23607\nf 23037 23038 23609\nf 23037 23609 23608\nf 23038 23039 23610\nf 23038 23610 23609\nf 23039 23040 23611\nf 23039 23611 23610\nf 23040 23044 23045\nf 23040 23045 23611\nf 23041 23042 23048\nf 23042 23043 23049\nf 23042 23049 23048\nf 23043 23612 23613\nf 23043 23613 23618\nf 23043 23618 23049\nf 23044 23046 23616\nf 23044 23616 23045\nf 23045 23614 23611\nf 23045 23616 23614\nf 23046 23047 23617\nf 23046 23617 23616\nf 23047 23050 23051\nf 23047 23051 23617\nf 23048 23049 23053\nf 23049 23055 23053\nf 23049 23618 23623\nf 23049 23623 23055\nf 23050 23052 23621\nf 23050 23621 23051\nf 23051 23620 23617\nf 23051 23621 23620\nf 23052 23056 23622\nf 23052 23622 23621\nf 23053 23055 23054\nf 23054 23055 23060\nf 23054 23060 23058\nf 23055 23061 23060\nf 23055 23623 23627\nf 23055 23627 23061\nf 23056 23057 23063\nf 23056 23063 23631\nf 23056 23625 23622\nf 23056 23631 23625\nf 23057 23062 23063\nf 23058 23060 23059\nf 23059 23060 23065\nf 23060 23061 23067\nf 23060 23067 23065\nf 23061 23069 23067\nf 23061 23627 23628\nf 23061 23628 23069\nf 23062 23064 23632\nf 23062 23632 23063\nf 23063 23632 23631\nf 23064 23072 23073\nf 23064 23073 23639\nf 23064 23639 23632\nf 23065 23067 23066\nf 23066 23067 23068\nf 23067 23069 23068\nf 23068 23069 23634\nf 23068 23634 23070\nf 23069 23628 23633\nf 23069 23633 23634\nf 23070 23634 23636\nf 23070 23636 23071\nf 23071 23636 23637\nf 23071 23637 23074\nf 23072 23080 23082\nf 23072 23082 23073\nf 23073 23082 23639\nf 23074 23076 23075\nf 23074 23637 23076\nf 23075 23076 23077\nf 23076 23078 23077\nf 23076 23637 23638\nf 23076 23638 23078\nf 23077 23078 23641\nf 23077 23641 23079\nf 23078 23638 23640\nf 23078 23640 23641\nf 23079 23641 23642\nf 23079 23642 23083\nf 23080 23081 23082\nf 23081 23089 23643\nf 23081 23643 23082\nf 23082 23643 23639\nf 23083 23085 23084\nf 23083 23642 23085\nf 23084 23085 23645\nf 23084 23645 23086\nf 23085 23642 23644\nf 23085 23644 23645\nf 23086 23645 23646\nf 23086 23646 23087\nf 23087 23646 23647\nf 23087 23647 23088\nf 23088 23647 23091\nf 23089 23090 23648\nf 23089 23648 23643\nf 23090 23098 23659\nf 23090 23649 23648\nf 23090 23659 23649\nf 23091 23647 23651\nf 23091 23651 23652\nf 23091 23652 23092\nf 23092 23652 23654\nf 23092 23654 23093\nf 23093 23654 23655\nf 23093 23655 23094\nf 23094 23655 23656\nf 23094 23656 23095\nf 23095 23656 23657\nf 23095 23657 23096\nf 23096 23657 23658\nf 23096 23658 23097\nf 23097 23658 23660\nf 23097 23660 23099\nf 23098 23099 23659\nf 23099 23660 23659\nf 23100 23106 23107\nf 23100 23107 23104\nf 23101 23102 23116\nf 23101 23114 23112\nf 23101 23116 23114\nf 23102 23115 23116\nf 23103 23105 23662\nf 23103 23662 23671\nf 23103 23671 23118\nf 23104 23107 23105\nf 23105 23107 23664\nf 23105 23663 23662\nf 23105 23664 23663\nf 23106 23108 23664\nf 23106 23664 23107\nf 23108 23109 23665\nf 23108 23665 23664\nf 23109 23119 23120\nf 23109 23120 23665\nf 23110 23111 23666\nf 23110 23124 23122\nf 23110 23666 23679\nf 23110 23679 23124\nf 23111 23113 23666\nf 23112 23114 23113\nf 23113 23114 23668\nf 23113 23667 23666\nf 23113 23668 23667\nf 23114 23116 23668\nf 23115 23117 23669\nf 23115 23669 23116\nf 23116 23669 23668\nf 23117 23125 23670\nf 23117 23670 23669\nf 23118 23671 23127\nf 23119 23121 23676\nf 23119 23676 23120\nf 23120 23674 23665\nf 23120 23676 23674\nf 23121 23128 23677\nf 23121 23677 23676\nf 23122 23124 23123\nf 23123 23124 23680\nf 23123 23678 23687\nf 23123 23680 23678\nf 23123 23687 23130\nf 23124 23679 23680\nf 23125 23126 23682\nf 23125 23681 23670\nf 23125 23682 23681\nf 23126 23132 23682\nf 23127 23671 23683\nf 23127 23683 23133\nf 23128 23129 23686\nf 23128 23684 23677\nf 23128 23686 23684\nf 23129 23135 23686\nf 23130 23687 23693\nf 23130 23693 23131\nf 23131 23137 23136\nf 23131 23693 23137\nf 23132 23138 23694\nf 23132 23688 23682\nf 23132 23694 23688\nf 23133 23683 23689\nf 23133 23689 23134\nf 23134 23689 23690\nf 23134 23690 23695\nf 23134 23695 23140\nf 23135 23141 23696\nf 23135 23691 23686\nf 23135 23696 23691\nf 23136 23137 23143\nf 23137 23144 23143\nf 23137 23693 23697\nf 23137 23697 23144\nf 23138 23139 23146\nf 23138 23146 23698\nf 23138 23698 23694\nf 23139 23145 23146\nf 23140 23695 23147\nf 23141 23142 23149\nf 23141 23149 23701\nf 23141 23701 23696\nf 23142 23148 23149\nf 23143 23144 23150\nf 23144 23151 23150\nf 23144 23697 23702\nf 23144 23702 23151\nf 23145 23152 23703\nf 23145 23699 23146\nf 23145 23703 23699\nf 23146 23699 23698\nf 23147 23695 23700\nf 23147 23700 23153\nf 23148 23154 23155\nf 23148 23155 23149\nf 23149 23155 23701\nf 23150 23151 23156\nf 23151 23158 23156\nf 23151 23702 23707\nf 23151 23707 23158\nf 23152 23159 23708\nf 23152 23708 23703\nf 23153 23700 23705\nf 23153 23705 23160\nf 23154 23161 23162\nf 23154 23162 23155\nf 23155 23162 23706\nf 23155 23706 23701\nf 23156 23158 23157\nf 23157 23158 23164\nf 23158 23707 23164\nf 23159 23165 23713\nf 23159 23713 23708\nf 23160 23705 23709\nf 23160 23709 23166\nf 23161 23163 23711\nf 23161 23711 23162\nf 23162 23710 23706\nf 23162 23711 23710\nf 23163 23167 23168\nf 23163 23168 23715\nf 23163 23715 23711\nf 23164 23707 23712\nf 23164 23712 23169\nf 23165 23170 23718\nf 23165 23718 23713\nf 23166 23709 23714\nf 23166 23714 23171\nf 23167 23172 23173\nf 23167 23173 23168\nf 23168 23173 23715\nf 23169 23712 23717\nf 23169 23717 23175\nf 23170 23176 23724\nf 23170 23724 23718\nf 23171 23714 23719\nf 23171 23719 23177\nf 23172 23174 23722\nf 23172 23722 23173\nf 23173 23720 23715\nf 23173 23722 23720\nf 23174 23178 23179\nf 23174 23179 23726\nf 23174 23726 23722\nf 23175 23717 23723\nf 23175 23723 23181\nf 23176 23183 23730\nf 23176 23730 23724\nf 23177 23719 23725\nf 23177 23725 23184\nf 23178 23180 23728\nf 23178 23728 23179\nf 23179 23728 23726\nf 23180 23185 23186\nf 23180 23186 23732\nf 23180 23732 23728\nf 23181 23723 23729\nf 23181 23729 23735\nf 23181 23735 23182\nf 23182 23189 23188\nf 23182 23735 23189\nf 23183 23190 23737\nf 23183 23737 23730\nf 23184 23725 23731\nf 23184 23731 23192\nf 23185 23187 23734\nf 23185 23734 23186\nf 23186 23734 23732\nf 23187 23193 23194\nf 23187 23194 23741\nf 23187 23741 23734\nf 23188 23189 23745\nf 23188 23745 23197\nf 23189 23735 23736\nf 23189 23736 23745\nf 23190 23191 23737\nf 23191 23199 23748\nf 23191 23738 23737\nf 23191 23748 23738\nf 23192 23731 23740\nf 23192 23740 23200\nf 23193 23195 23743\nf 23193 23743 23194\nf 23194 23743 23741\nf 23195 23202 23744\nf 23195 23744 23743\nf 23196 23198 23746\nf 23196 23282 23280\nf 23196 23746 23831\nf 23196 23831 23282\nf 23197 23745 23198\nf 23198 23745 23746\nf 23199 23283 23833\nf 23199 23833 23748\nf 23200 23740 23749\nf 23200 23749 23750\nf 23200 23750 23201\nf 23201 23750 23284\nf 23202 23203 23753\nf 23202 23751 23744\nf 23202 23753 23751\nf 23203 23204 23753\nf 23204 23205 23754\nf 23204 23754 23753\nf 23205 23206 23755\nf 23205 23755 23754\nf 23206 23207 23756\nf 23206 23756 23755\nf 23207 23208 23757\nf 23207 23757 23756\nf 23208 23209 23758\nf 23208 23758 23757\nf 23209 23210 23759\nf 23209 23759 23758\nf 23210 23211 23760\nf 23210 23760 23759\nf 23211 23212 23761\nf 23211 23761 23760\nf 23212 23213 23762\nf 23212 23762 23761\nf 23213 23214 23763\nf 23213 23763 23762\nf 23214 23215 23764\nf 23214 23764 23763\nf 23215 23216 23765\nf 23215 23765 23764\nf 23216 23217 23766\nf 23216 23766 23765\nf 23217 23218 23767\nf 23217 23767 23766\nf 23218 23219 23768\nf 23218 23768 23767\nf 23219 23220 23769\nf 23219 23769 23768\nf 23220 23221 23770\nf 23220 23770 23769\nf 23221 23222 23771\nf 23221 23771 23770\nf 23222 23223 23772\nf 23222 23772 23771\nf 23223 23224 23773\nf 23223 23773 23772\nf 23224 23225 23774\nf 23224 23774 23773\nf 23225 23226 23775\nf 23225 23775 23774\nf 23226 23227 23776\nf 23226 23776 23775\nf 23227 23228 23777\nf 23227 23777 23776\nf 23228 23229 23778\nf 23228 23778 23777\nf 23229 23230 23779\nf 23229 23779 23778\nf 23230 23231 23780\nf 23230 23780 23779\nf 23231 23232 23781\nf 23231 23781 23780\nf 23232 23233 23782\nf 23232 23782 23781\nf 23233 23234 23783\nf 23233 23783 23782\nf 23234 23235 23784\nf 23234 23784 23783\nf 23235 23236 23785\nf 23235 23785 23784\nf 23236 23237 23786\nf 23236 23786 23785\nf 23237 23238 23787\nf 23237 23787 23786\nf 23238 23239 23788\nf 23238 23788 23787\nf 23239 23240 23789\nf 23239 23789 23788\nf 23240 23241 23790\nf 23240 23790 23789\nf 23241 23242 23791\nf 23241 23791 23790\nf 23242 23243 23792\nf 23242 23792 23791\nf 23243 23244 23793\nf 23243 23793 23792\nf 23244 23245 23794\nf 23244 23794 23793\nf 23245 23246 23795\nf 23245 23795 23794\nf 23246 23247 23796\nf 23246 23796 23795\nf 23247 23248 23797\nf 23247 23797 23796\nf 23248 23249 23798\nf 23248 23798 23797\nf 23249 23250 23799\nf 23249 23799 23798\nf 23250 23251 23800\nf 23250 23800 23799\nf 23251 23252 23801\nf 23251 23801 23800\nf 23252 23253 23802\nf 23252 23802 23801\nf 23253 23254 23803\nf 23253 23803 23802\nf 23254 23255 23804\nf 23254 23804 23803\nf 23255 23256 23805\nf 23255 23805 23804\nf 23256 23257 23806\nf 23256 23806 23805\nf 23257 23258 23807\nf 23257 23807 23806\nf 23258 23259 23808\nf 23258 23808 23807\nf 23259 23260 23809\nf 23259 23809 23808\nf 23260 23261 23810\nf 23260 23810 23809\nf 23261 23262 23811\nf 23261 23811 23810\nf 23262 23263 23812\nf 23262 23812 23811\nf 23263 23264 23813\nf 23263 23813 23812\nf 23264 23265 23814\nf 23264 23814 23813\nf 23265 23266 23815\nf 23265 23815 23814\nf 23266 23267 23816\nf 23266 23816 23815\nf 23267 23268 23817\nf 23267 23817 23816\nf 23268 23269 23818\nf 23268 23818 23817\nf 23269 23270 23819\nf 23269 23819 23818\nf 23270 23271 23820\nf 23270 23820 23819\nf 23271 23272 23821\nf 23271 23821 23820\nf 23272 23273 23822\nf 23272 23822 23821\nf 23273 23274 23823\nf 23273 23823 23822\nf 23274 23275 23824\nf 23274 23824 23823\nf 23275 23276 23825\nf 23275 23825 23824\nf 23276 23277 23826\nf 23276 23826 23825\nf 23277 23278 23827\nf 23277 23827 23826\nf 23278 23279 23828\nf 23278 23828 23827\nf 23279 23281 23829\nf 23279 23829 23828\nf 23280 23282 23281\nf 23281 23282 23832\nf 23281 23830 23829\nf 23281 23832 23830\nf 23282 23831 23832\nf 23283 23285 23835\nf 23283 23835 23833\nf 23284 23750 23834\nf 23284 23834 23286\nf 23285 23287 23837\nf 23285 23837 23835\nf 23286 23834 23836\nf 23286 23836 23289\nf 23287 23288 23837\nf 23288 23290 23840\nf 23288 23838 23837\nf 23288 23840 23838\nf 23289 23836 23839\nf 23289 23839 23292\nf 23290 23291 23840\nf 23291 23294 23844\nf 23291 23841 23840\nf 23291 23844 23841\nf 23292 23839 23842\nf 23292 23842 23843\nf 23292 23843 23293\nf 23293 23843 23296\nf 23294 23295 23844\nf 23295 23310 23859\nf 23295 23845 23844\nf 23295 23859 23845\nf 23296 23843 23847\nf 23296 23847 23848\nf 23296 23848 23297\nf 23297 23848 23849\nf 23297 23849 23298\nf 23298 23849 23850\nf 23298 23850 23299\nf 23299 23850 23312\nf 23300 23390 23392\nf 23300 23392 23393\nf 23300 23393 23301\nf 23301 23393 23942\nf 23301 23851 23302\nf 23301 23942 23851\nf 23302 23851 23852\nf 23302 23852 23303\nf 23303 23852 23853\nf 23303 23853 23304\nf 23304 23853 23854\nf 23304 23854 23305\nf 23305 23854 23855\nf 23305 23855 23306\nf 23306 23855 23856\nf 23306 23856 23307\nf 23307 23856 23857\nf 23307 23857 23308\nf 23308 23857 23858\nf 23308 23858 23309\nf 23309 23858 23860\nf 23309 23860 23311\nf 23310 23311 23859\nf 23311 23860 23859\nf 23312 23850 23861\nf 23312 23861 23862\nf 23312 23862 23313\nf 23313 23862 23863\nf 23313 23863 23394\nf 23314 23401 23949\nf 23314 23864 23865\nf 23314 23865 23315\nf 23314 23949 23864\nf 23315 23865 23866\nf 23315 23866 23316\nf 23316 23866 23867\nf 23316 23867 23317\nf 23317 23867 23868\nf 23317 23868 23318\nf 23318 23868 23869\nf 23318 23869 23319\nf 23319 23869 23870\nf 23319 23870 23320\nf 23320 23870 23871\nf 23320 23871 23321\nf 23321 23871 23872\nf 23321 23872 23322\nf 23322 23872 23873\nf 23322 23873 23323\nf 23323 23873 23874\nf 23323 23874 23324\nf 23324 23874 23875\nf 23324 23875 23325\nf 23325 23875 23876\nf 23325 23876 23326\nf 23326 23876 23877\nf 23326 23877 23327\nf 23327 23877 23878\nf 23327 23878 23328\nf 23328 23878 23879\nf 23328 23879 23329\nf 23329 23879 23880\nf 23329 23880 23330\nf 23330 23880 23881\nf 23330 23881 23331\nf 23331 23881 23882\nf 23331 23882 23332\nf 23332 23882 23883\nf 23332 23883 23333\nf 23333 23883 23884\nf 23333 23884 23334\nf 23334 23884 23885\nf 23334 23885 23335\nf 23335 23885 23886\nf 23335 23886 23336\nf 23336 23886 23887\nf 23336 23887 23337\nf 23337 23887 23888\nf 23337 23888 23338\nf 23338 23888 23889\nf 23338 23889 23339\nf 23339 23889 23890\nf 23339 23890 23340\nf 23340 23890 23891\nf 23340 23891 23341\nf 23341 23891 23892\nf 23341 23892 23342\nf 23342 23892 23893\nf 23342 23893 23343\nf 23343 23893 23894\nf 23343 23894 23344\nf 23344 23894 23895\nf 23344 23895 23345\nf 23345 23895 23896\nf 23345 23896 23346\nf 23346 23896 23897\nf 23346 23897 23347\nf 23347 23897 23898\nf 23347 23898 23348\nf 23348 23898 23899\nf 23348 23899 23349\nf 23349 23899 23900\nf 23349 23900 23350\nf 23350 23900 23901\nf 23350 23901 23351\nf 23351 23901 23902\nf 23351 23902 23352\nf 23352 23902 23903\nf 23352 23903 23353\nf 23353 23903 23904\nf 23353 23904 23354\nf 23354 23904 23905\nf 23354 23905 23355\nf 23355 23905 23906\nf 23355 23906 23356\nf 23356 23906 23907\nf 23356 23907 23357\nf 23357 23907 23908\nf 23357 23908 23358\nf 23358 23908 23909\nf 23358 23909 23359\nf 23359 23909 23910\nf 23359 23910 23360\nf 23360 23910 23911\nf 23360 23911 23361\nf 23361 23911 23912\nf 23361 23912 23362\nf 23362 23912 23913\nf 23362 23913 23363\nf 23363 23913 23914\nf 23363 23914 23364\nf 23364 23914 23915\nf 23364 23915 23365\nf 23365 23915 23916\nf 23365 23916 23366\nf 23366 23916 23917\nf 23366 23917 23367\nf 23367 23917 23918\nf 23367 23918 23368\nf 23368 23918 23919\nf 23368 23919 23369\nf 23369 23919 23920\nf 23369 23920 23370\nf 23370 23920 23921\nf 23370 23921 23371\nf 23371 23921 23922\nf 23371 23922 23372\nf 23372 23922 23923\nf 23372 23923 23373\nf 23373 23923 23924\nf 23373 23924 23374\nf 23374 23924 23925\nf 23374 23925 23375\nf 23375 23925 23926\nf 23375 23926 23376\nf 23376 23926 23927\nf 23376 23927 23377\nf 23377 23927 23928\nf 23377 23928 23378\nf 23378 23928 23929\nf 23378 23929 23379\nf 23379 23929 23930\nf 23379 23930 23380\nf 23380 23930 23931\nf 23380 23931 23381\nf 23381 23931 23932\nf 23381 23932 23382\nf 23382 23932 23933\nf 23382 23933 23383\nf 23383 23933 23934\nf 23383 23934 23384\nf 23384 23934 23935\nf 23384 23935 23385\nf 23385 23935 23936\nf 23385 23936 23386\nf 23386 23936 23937\nf 23386 23937 23387\nf 23387 23937 23938\nf 23387 23938 23388\nf 23388 23938 23939\nf 23388 23939 23389\nf 23389 23939 23940\nf 23389 23940 23391\nf 23390 23391 23392\nf 23391 23940 23941\nf 23391 23941 23392\nf 23392 23941 23393\nf 23393 23941 23943\nf 23393 23943 23942\nf 23394 23396 23395\nf 23394 23863 23396\nf 23395 23396 23945\nf 23395 23945 23397\nf 23396 23863 23944\nf 23396 23944 23945\nf 23397 23945 23946\nf 23397 23946 23398\nf 23398 23946 23947\nf 23398 23947 23399\nf 23399 23947 23948\nf 23399 23948 23400\nf 23400 23948 23950\nf 23400 23950 23402\nf 23401 23402 23949\nf 23402 23950 23949\nf 23403 23404 23951\nf 23403 23951 23953\nf 23403 23953 23405\nf 23404 23407 23952\nf 23404 23952 23951\nf 23405 23953 23406\nf 23406 23953 23954\nf 23406 23954 23959\nf 23406 23959 23410\nf 23407 23408 23958\nf 23407 23956 23952\nf 23407 23958 23956\nf 23408 23409 23958\nf 23409 23411 23412\nf 23409 23412 23958\nf 23410 23959 23413\nf 23411 23414 23964\nf 23411 23961 23412\nf 23411 23964 23961\nf 23412 23960 23958\nf 23412 23961 23960\nf 23413 23959 23962\nf 23413 23962 23416\nf 23414 23415 23965\nf 23414 23965 23964\nf 23415 23419 23965\nf 23416 23418 23417\nf 23416 23962 23418\nf 23417 23418 23966\nf 23417 23966 23421\nf 23418 23962 23963\nf 23418 23963 23966\nf 23419 23420 23968\nf 23419 23967 23965\nf 23419 23968 23967\nf 23420 23422 23968\nf 23421 23966 23969\nf 23421 23969 23423\nf 23422 23424 23972\nf 23422 23970 23968\nf 23422 23972 23970\nf 23423 23969 23971\nf 23423 23971 23425\nf 23424 23426 23974\nf 23424 23974 23972\nf 23425 23971 23973\nf 23425 23973 23428\nf 23426 23427 23430\nf 23426 23430 23976\nf 23426 23976 23974\nf 23427 23429 23430\nf 23428 23973 23975\nf 23428 23975 23431\nf 23429 23432 23979\nf 23429 23977 23430\nf 23429 23979 23977\nf 23430 23977 23976\nf 23431 23975 23978\nf 23431 23978 23433\nf 23432 23434 23982\nf 23432 23982 23979\nf 23433 23978 23981\nf 23433 23981 23435\nf 23434 23436 23985\nf 23434 23985 23982\nf 23435 23981 23984\nf 23435 23984 23437\nf 23436 23438 23988\nf 23436 23988 23985\nf 23437 23984 23987\nf 23437 23987 23439\nf 23438 23440 23991\nf 23438 23991 23988\nf 23439 23987 23990\nf 23439 23990 23441\nf 23440 23442 23994\nf 23440 23994 23991\nf 23441 23990 23993\nf 23441 23993 23443\nf 23442 23444 23994\nf 23443 23993 23997\nf 23443 23997 23446\nf 23444 23445 23994\nf 23444 23447 23448\nf 23444 23448 23445\nf 23445 23448 23998\nf 23445 23995 23994\nf 23445 23998 23995\nf 23446 23997 23999\nf 23446 23999 23449\nf 23447 23451 23453\nf 23447 23453 23448\nf 23448 23453 24000\nf 23448 24000 23998\nf 23449 23999 24001\nf 23449 24001 24002\nf 23449 24002 23450\nf 23450 24002 23454\nf 23451 23452 23453\nf 23452 23455 24003\nf 23452 24003 23453\nf 23453 24003 24000\nf 23454 24002 24004\nf 23454 24004 23456\nf 23455 23457 24007\nf 23455 24005 24003\nf 23455 24007 24005\nf 23456 24004 24006\nf 23456 24006 23458\nf 23457 23459 24007\nf 23458 24006 24010\nf 23458 24010 23462\nf 23459 23460 23461\nf 23459 23461 24007\nf 23460 23465 24012\nf 23460 24012 23461\nf 23461 24008 24007\nf 23461 24012 24008\nf 23462 23464 23463\nf 23462 24010 24011\nf 23462 24011 23464\nf 23463 23464 23467\nf 23464 24011 24013\nf 23464 24013 23467\nf 23465 23466 24014\nf 23465 24014 24012\nf 23466 23468 24018\nf 23466 24015 24014\nf 23466 24018 24015\nf 23467 24013 24017\nf 23467 24017 23470\nf 23468 23469 24018\nf 23469 23471 24024\nf 23469 24019 24018\nf 23469 24024 24019\nf 23470 24017 24021\nf 23470 24021 23472\nf 23471 23474 24024\nf 23472 23473 23476\nf 23472 24021 24022\nf 23472 24022 23473\nf 23473 23477 23476\nf 23473 24022 24027\nf 23473 24027 24030\nf 23473 24030 23477\nf 23474 23475 24024\nf 23474 23478 23479\nf 23474 23479 23475\nf 23475 23479 24028\nf 23475 24025 24024\nf 23475 24028 24025\nf 23476 23477 23480\nf 23477 23481 23480\nf 23477 24030 24033\nf 23477 24033 23481\nf 23478 23482 23483\nf 23478 23483 23479\nf 23479 23483 24031\nf 23479 24031 24028\nf 23480 23481 23484\nf 23481 23486 23484\nf 23481 24033 24036\nf 23481 24036 23486\nf 23482 23487 23488\nf 23482 23488 23483\nf 23483 23488 24034\nf 23483 24034 24031\nf 23484 23486 23485\nf 23485 23486 24037\nf 23485 23490 23489\nf 23485 24037 23490\nf 23486 24036 24037\nf 23487 23491 23492\nf 23487 23492 23488\nf 23488 23492 24038\nf 23488 24038 24034\nf 23489 23490 23493\nf 23490 23494 23493\nf 23490 24037 24040\nf 23490 24040 24044\nf 23490 24044 23494\nf 23491 23495 23496\nf 23491 23496 23492\nf 23492 23496 24042\nf 23492 24042 24038\nf 23493 23494 23497\nf 23494 23498 23497\nf 23494 24044 24048\nf 23494 24048 23498\nf 23495 23499 23500\nf 23495 23500 23496\nf 23496 23500 24046\nf 23496 24046 24042\nf 23497 23498 23502\nf 23498 23503 23502\nf 23498 24048 24052\nf 23498 24052 23503\nf 23499 23501 23506\nf 23499 23506 23500\nf 23500 23504 24050\nf 23500 23506 23504\nf 23500 24050 24046\nf 23501 23505 23506\nf 23502 23503 23507\nf 23503 23508 23507\nf 23503 24052 24057\nf 23503 24057 23508\nf 23504 23506 23510\nf 23504 23510 24056\nf 23504 24054 24050\nf 23504 24056 24054\nf 23505 23509 23510\nf 23505 23510 23506\nf 23507 23508 23511\nf 23508 23513 23511\nf 23508 24057 24063\nf 23508 24063 23513\nf 23509 23515 23517\nf 23509 23517 23510\nf 23510 23514 24060\nf 23510 23517 23514\nf 23510 24060 24056\nf 23511 23513 23512\nf 23512 23513 23519\nf 23512 23519 23518\nf 23513 24063 24064\nf 23513 24064 23519\nf 23514 23517 23521\nf 23514 23521 24066\nf 23514 24061 24060\nf 23514 24066 24061\nf 23515 23516 23517\nf 23516 23520 23521\nf 23516 23521 23517\nf 23518 23519 23522\nf 23519 23524 23522\nf 23519 23525 23524\nf 23519 24064 24068\nf 23519 24068 24070\nf 23519 24070 23525\nf 23520 23526 23528\nf 23520 23528 23521\nf 23521 23525 24069\nf 23521 23528 23525\nf 23521 24069 24066\nf 23522 23524 23523\nf 23523 23524 23529\nf 23524 23525 23532\nf 23524 23532 23529\nf 23525 23528 23532\nf 23525 24070 24069\nf 23526 23527 23528\nf 23527 23530 23532\nf 23527 23532 23528\nf 23529 23532 23531\nf 23530 23531 23532\nf 23533 23534 24072\nf 23533 24072 24074\nf 23533 24074 23535\nf 23534 23537 24073\nf 23534 24073 24072\nf 23535 24074 23536\nf 23536 24074 24075\nf 23536 24075 24080\nf 23536 24080 23539\nf 23537 23538 24079\nf 23537 24077 24073\nf 23537 24079 24077\nf 23538 23540 24079\nf 23539 24080 23541\nf 23540 23543 24085\nf 23540 24081 24079\nf 23540 24085 24081\nf 23541 24080 24083\nf 23541 24083 23542\nf 23542 24083 24084\nf 23542 24084 24086\nf 23542 24086 23545\nf 23543 23544 23547\nf 23543 23547 24087\nf 23543 24087 24085\nf 23544 23546 23547\nf 23545 24086 23548\nf 23546 23550 24090\nf 23546 24088 23547\nf 23546 24090 24088\nf 23547 24088 24087\nf 23548 24086 24089\nf 23548 24089 24092\nf 23548 24092 23549\nf 23549 23552 23551\nf 23549 24092 23552\nf 23550 23553 24094\nf 23550 24094 24090\nf 23551 23552 24096\nf 23551 24096 23554\nf 23552 24092 24093\nf 23552 24093 24096\nf 23553 23555 24097\nf 23553 24097 24094\nf 23554 24096 23556\nf 23555 23557 24099\nf 23555 24099 24097\nf 23556 24096 24098\nf 23556 24098 23558\nf 23557 23559 24101\nf 23557 24101 24099\nf 23558 24098 24100\nf 23558 24100 23561\nf 23559 23560 23564\nf 23559 23564 24103\nf 23559 24103 24101\nf 23560 23562 23564\nf 23561 24100 24102\nf 23561 24102 23565\nf 23562 23563 23564\nf 23563 23566 24103\nf 23563 24103 23564\nf 23565 24102 24104\nf 23565 24104 23567\nf 23566 23568 24107\nf 23566 24105 24103\nf 23566 24107 24105\nf 23567 24104 24106\nf 23567 24106 23569\nf 23568 23570 24109\nf 23568 24109 24107\nf 23569 24106 24108\nf 23569 24108 23571\nf 23570 23572 24111\nf 23570 24111 24109\nf 23571 24108 24110\nf 23571 24110 23573\nf 23572 23574 24113\nf 23572 24113 24111\nf 23573 24110 24112\nf 23573 24112 23575\nf 23574 23576 24113\nf 23575 24112 24116\nf 23575 24116 23579\nf 23576 23577 23578\nf 23576 23578 24113\nf 23577 23580 24117\nf 23577 24117 23578\nf 23578 24114 24113\nf 23578 24117 24114\nf 23579 24116 24118\nf 23579 24118 23581\nf 23580 23584 24123\nf 23580 24121 24117\nf 23580 24123 24121\nf 23581 23583 23582\nf 23581 24118 24119\nf 23581 24119 23583\nf 23582 23583 23586\nf 23583 24119 24122\nf 23583 24122 23586\nf 23584 23585 24123\nf 23585 23587 24127\nf 23585 24124 24123\nf 23585 24127 24124\nf 23586 24122 24126\nf 23586 24126 23589\nf 23587 23588 24127\nf 23588 23590 24131\nf 23588 24128 24127\nf 23588 24131 24128\nf 23589 24126 24129\nf 23589 24129 23592\nf 23590 23591 24131\nf 23591 23595 24134\nf 23591 24132 24131\nf 23591 24134 24132\nf 23592 23594 23593\nf 23592 24129 24130\nf 23592 24130 23594\nf 23593 23594 24135\nf 23593 24135 23596\nf 23594 24130 24133\nf 23594 24133 24135\nf 23595 23596 24134\nf 23596 24135 24134\nf 23597 23598 24136\nf 23597 24136 24141\nf 23597 24141 23601\nf 23598 23599 24137\nf 23598 24137 24136\nf 23599 23603 24139\nf 23599 24138 24137\nf 23599 24139 24138\nf 23600 23602 24140\nf 23600 24140 24151\nf 23600 24151 23612\nf 23601 24141 23602\nf 23602 24141 24142\nf 23602 24142 24140\nf 23603 23604 23605\nf 23603 23605 24139\nf 23604 23606 24145\nf 23604 24145 23605\nf 23605 24144 24139\nf 23605 24145 24144\nf 23606 23607 24145\nf 23607 23608 24147\nf 23607 24147 24145\nf 23608 23609 24148\nf 23608 24148 24147\nf 23609 23610 24149\nf 23609 24149 24148\nf 23610 23611 24150\nf 23610 24150 24149\nf 23611 23614 23615\nf 23611 23615 24150\nf 23612 24151 24156\nf 23612 24156 23613\nf 23613 23619 23618\nf 23613 24156 23619\nf 23614 23616 24153\nf 23614 24153 23615\nf 23615 24152 24150\nf 23615 24153 24152\nf 23616 23617 24154\nf 23616 24154 24153\nf 23617 23620 24155\nf 23617 24155 24154\nf 23618 23619 23623\nf 23619 23624 23623\nf 23619 24156 24160\nf 23619 24160 23624\nf 23620 23621 24159\nf 23620 24157 24155\nf 23620 24159 24157\nf 23621 23622 24159\nf 23622 23625 23626\nf 23622 23626 24159\nf 23623 23624 23627\nf 23624 23629 23627\nf 23624 23630 23629\nf 23624 24160 24161\nf 23624 24161 23630\nf 23625 23631 24165\nf 23625 24163 23626\nf 23625 24165 24163\nf 23626 24162 24159\nf 23626 24163 24162\nf 23627 23629 23628\nf 23628 23629 23633\nf 23629 23630 23635\nf 23629 23635 23633\nf 23630 24161 24164\nf 23630 24164 24167\nf 23630 24167 23635\nf 23631 23632 24166\nf 23631 24166 24165\nf 23632 23639 24166\nf 23633 23635 23634\nf 23634 23635 24168\nf 23634 24168 23636\nf 23635 24167 24168\nf 23636 24168 24170\nf 23636 24170 23637\nf 23637 24170 24171\nf 23637 24171 23638\nf 23638 24171 23640\nf 23639 23643 24176\nf 23639 24172 24166\nf 23639 24176 24172\nf 23640 24171 24173\nf 23640 24173 24174\nf 23640 24174 23641\nf 23641 24174 24175\nf 23641 24175 23642\nf 23642 24175 23644\nf 23643 23648 24176\nf 23644 24175 24178\nf 23644 24178 24179\nf 23644 24179 23645\nf 23645 24179 24180\nf 23645 24180 23646\nf 23646 24180 24181\nf 23646 24181 23647\nf 23647 24181 24182\nf 23647 24182 23651\nf 23648 23649 23650\nf 23648 23650 24176\nf 23649 23659 23661\nf 23649 23661 24184\nf 23649 24184 23650\nf 23650 24177 24176\nf 23650 24183 24177\nf 23650 24184 24183\nf 23651 23653 23652\nf 23651 24182 23653\nf 23652 23653 24186\nf 23652 24186 23654\nf 23653 24182 24185\nf 23653 24185 24186\nf 23654 24186 24188\nf 23654 24188 23655\nf 23655 24188 24189\nf 23655 24189 23656\nf 23656 24189 24190\nf 23656 24190 23657\nf 23657 24190 24192\nf 23657 24192 23658\nf 23658 24192 23660\nf 23659 23660 23661\nf 23660 24191 23661\nf 23660 24192 24191\nf 23661 24191 24184\nf 23662 23663 23673\nf 23662 23672 23671\nf 23662 23673 23672\nf 23663 23664 24194\nf 23663 24194 24201\nf 23663 24201 23673\nf 23664 23665 24194\nf 23665 23674 23675\nf 23665 23675 24194\nf 23666 23667 24195\nf 23666 24195 24208\nf 23666 24208 23679\nf 23667 23668 24196\nf 23667 24196 24195\nf 23668 23669 24197\nf 23668 24197 24196\nf 23669 23670 24198\nf 23669 24198 24197\nf 23670 23681 24199\nf 23670 24199 24198\nf 23671 23672 24213\nf 23671 24213 23683\nf 23672 23673 24200\nf 23672 24200 24213\nf 23673 24201 24202\nf 23673 24202 24200\nf 23674 23676 24205\nf 23674 24205 23675\nf 23675 24203 24194\nf 23675 24205 24203\nf 23676 23677 24206\nf 23676 24206 24205\nf 23677 23684 23685\nf 23677 23685 24206\nf 23678 23680 24207\nf 23678 24207 24216\nf 23678 24216 23687\nf 23679 24208 23680\nf 23680 24208 24209\nf 23680 24209 24207\nf 23681 23682 24212\nf 23681 24210 24199\nf 23681 24212 24210\nf 23682 23688 24212\nf 23683 24213 23689\nf 23684 23686 24215\nf 23684 24215 23685\nf 23685 24214 24206\nf 23685 24215 24214\nf 23686 23691 23692\nf 23686 23692 24221\nf 23686 24221 24215\nf 23687 24216 23693\nf 23688 23694 24224\nf 23688 24217 24212\nf 23688 24224 24217\nf 23689 24213 24219\nf 23689 24219 23690\nf 23690 24219 24220\nf 23690 24220 24225\nf 23690 24225 23695\nf 23691 23696 24227\nf 23691 24222 23692\nf 23691 24227 24222\nf 23692 24222 24221\nf 23693 24216 24223\nf 23693 24223 23697\nf 23694 23698 24230\nf 23694 24230 24224\nf 23695 24225 23700\nf 23696 23701 24232\nf 23696 24232 24227\nf 23697 24223 24229\nf 23697 24229 23702\nf 23698 23699 23704\nf 23698 23704 24235\nf 23698 24235 24230\nf 23699 23703 23704\nf 23700 24225 24231\nf 23700 24231 23705\nf 23701 23706 24238\nf 23701 24238 24232\nf 23702 24229 24234\nf 23702 24234 23707\nf 23703 23708 24240\nf 23703 24236 23704\nf 23703 24240 24236\nf 23704 24236 24235\nf 23705 24231 24237\nf 23705 24237 23709\nf 23706 23710 24243\nf 23706 24243 24238\nf 23707 24234 24239\nf 23707 24239 23712\nf 23708 23713 24246\nf 23708 24246 24240\nf 23709 24237 24242\nf 23709 24242 23714\nf 23710 23711 23716\nf 23710 23716 24248\nf 23710 24248 24243\nf 23711 23715 23716\nf 23712 24239 24244\nf 23712 24244 23717\nf 23713 23718 24251\nf 23713 24251 24246\nf 23714 24242 24247\nf 23714 24247 23719\nf 23715 23720 23721\nf 23715 23721 23716\nf 23716 23721 24248\nf 23717 24244 24249\nf 23717 24249 23723\nf 23718 23724 24257\nf 23718 24257 24251\nf 23719 24247 24252\nf 23719 24252 23725\nf 23720 23722 24254\nf 23720 24254 23721\nf 23721 24253 24248\nf 23721 24254 24253\nf 23722 23726 23727\nf 23722 23727 24259\nf 23722 24259 24254\nf 23723 24249 24255\nf 23723 24255 23729\nf 23724 23730 24263\nf 23724 24263 24257\nf 23725 24252 24258\nf 23725 24258 23731\nf 23726 23728 24261\nf 23726 24261 23727\nf 23727 24261 24259\nf 23728 23732 23733\nf 23728 23733 24268\nf 23728 24268 24261\nf 23729 24255 24262\nf 23729 24262 23735\nf 23730 23737 24263\nf 23731 24258 24266\nf 23731 24266 23740\nf 23732 23734 24270\nf 23732 24270 23733\nf 23733 24270 24268\nf 23734 23741 23742\nf 23734 23742 24274\nf 23734 24274 24270\nf 23735 24262 24271\nf 23735 24271 24279\nf 23735 24279 23736\nf 23736 23747 23745\nf 23736 24279 23747\nf 23737 23738 23739\nf 23737 23739 24263\nf 23738 23748 24272\nf 23738 24272 23739\nf 23739 24264 24263\nf 23739 24272 24264\nf 23740 24266 24273\nf 23740 24273 23749\nf 23741 23743 24276\nf 23741 24276 23742\nf 23742 24276 24274\nf 23743 23744 24277\nf 23743 24277 24276\nf 23744 23751 23752\nf 23744 23752 24277\nf 23745 23747 23746\nf 23746 23747 24280\nf 23746 24278 24366\nf 23746 24280 24278\nf 23746 24366 23831\nf 23747 24279 24280\nf 23748 23833 24369\nf 23748 24281 24272\nf 23748 24369 24281\nf 23749 24273 24282\nf 23749 24282 24283\nf 23749 24283 23750\nf 23750 24283 23834\nf 23751 23753 24287\nf 23751 24287 23752\nf 23752 24285 24277\nf 23752 24287 24285\nf 23753 23754 24288\nf 23753 24288 24287\nf 23754 23755 24289\nf 23754 24289 24288\nf 23755 23756 24290\nf 23755 24290 24289\nf 23756 23757 24291\nf 23756 24291 24290\nf 23757 23758 24292\nf 23757 24292 24291\nf 23758 23759 24293\nf 23758 24293 24292\nf 23759 23760 24294\nf 23759 24294 24293\nf 23760 23761 24295\nf 23760 24295 24294\nf 23761 23762 24296\nf 23761 24296 24295\nf 23762 23763 24297\nf 23762 24297 24296\nf 23763 23764 24298\nf 23763 24298 24297\nf 23764 23765 24299\nf 23764 24299 24298\nf 23765 23766 24300\nf 23765 24300 24299\nf 23766 23767 24301\nf 23766 24301 24300\nf 23767 23768 24302\nf 23767 24302 24301\nf 23768 23769 24303\nf 23768 24303 24302\nf 23769 23770 24304\nf 23769 24304 24303\nf 23770 23771 24305\nf 23770 24305 24304\nf 23771 23772 24306\nf 23771 24306 24305\nf 23772 23773 24307\nf 23772 24307 24306\nf 23773 23774 24308\nf 23773 24308 24307\nf 23774 23775 24309\nf 23774 24309 24308\nf 23775 23776 24310\nf 23775 24310 24309\nf 23776 23777 24311\nf 23776 24311 24310\nf 23777 23778 24312\nf 23777 24312 24311\nf 23778 23779 24313\nf 23778 24313 24312\nf 23779 23780 24314\nf 23779 24314 24313\nf 23780 23781 24315\nf 23780 24315 24314\nf 23781 23782 24316\nf 23781 24316 24315\nf 23782 23783 24317\nf 23782 24317 24316\nf 23783 23784 24318\nf 23783 24318 24317\nf 23784 23785 24319\nf 23784 24319 24318\nf 23785 23786 24320\nf 23785 24320 24319\nf 23786 23787 24321\nf 23786 24321 24320\nf 23787 23788 24322\nf 23787 24322 24321\nf 23788 23789 24323\nf 23788 24323 24322\nf 23789 23790 24324\nf 23789 24324 24323\nf 23790 23791 24325\nf 23790 24325 24324\nf 23791 23792 24326\nf 23791 24326 24325\nf 23792 23793 24327\nf 23792 24327 24326\nf 23793 23794 24328\nf 23793 24328 24327\nf 23794 23795 24329\nf 23794 24329 24328\nf 23795 23796 24330\nf 23795 24330 24329\nf 23796 23797 24331\nf 23796 24331 24330\nf 23797 23798 24332\nf 23797 24332 24331\nf 23798 23799 24333\nf 23798 24333 24332\nf 23799 23800 24334\nf 23799 24334 24333\nf 23800 23801 24335\nf 23800 24335 24334\nf 23801 23802 24336\nf 23801 24336 24335\nf 23802 23803 24337\nf 23802 24337 24336\nf 23803 23804 24338\nf 23803 24338 24337\nf 23804 23805 24339\nf 23804 24339 24338\nf 23805 23806 24340\nf 23805 24340 24339\nf 23806 23807 24341\nf 23806 24341 24340\nf 23807 23808 24342\nf 23807 24342 24341\nf 23808 23809 24343\nf 23808 24343 24342\nf 23809 23810 24344\nf 23809 24344 24343\nf 23810 23811 24345\nf 23810 24345 24344\nf 23811 23812 24346\nf 23811 24346 24345\nf 23812 23813 24347\nf 23812 24347 24346\nf 23813 23814 24348\nf 23813 24348 24347\nf 23814 23815 24349\nf 23814 24349 24348\nf 23815 23816 24350\nf 23815 24350 24349\nf 23816 23817 24351\nf 23816 24351 24350\nf 23817 23818 24352\nf 23817 24352 24351\nf 23818 23819 24353\nf 23818 24353 24352\nf 23819 23820 24354\nf 23819 24354 24353\nf 23820 23821 24355\nf 23820 24355 24354\nf 23821 23822 24356\nf 23821 24356 24355\nf 23822 23823 24357\nf 23822 24357 24356\nf 23823 23824 24358\nf 23823 24358 24357\nf 23824 23825 24359\nf 23824 24359 24358\nf 23825 23826 24360\nf 23825 24360 24359\nf 23826 23827 24361\nf 23826 24361 24360\nf 23827 23828 24362\nf 23827 24362 24361\nf 23828 23829 24363\nf 23828 24363 24362\nf 23829 23830 24364\nf 23829 24364 24363\nf 23830 23832 24365\nf 23830 24365 24364\nf 23831 24366 23832\nf 23832 24366 24367\nf 23832 24367 24365\nf 23833 23835 24371\nf 23833 24371 24369\nf 23834 24283 24370\nf 23834 24370 23836\nf 23835 23837 24373\nf 23835 24373 24371\nf 23836 24370 24372\nf 23836 24372 23839\nf 23837 23838 24373\nf 23838 23840 24376\nf 23838 24374 24373\nf 23838 24376 24374\nf 23839 24372 24375\nf 23839 24375 23842\nf 23840 23841 24381\nf 23840 24381 24376\nf 23841 23844 23846\nf 23841 23846 24381\nf 23842 24375 24377\nf 23842 24377 24378\nf 23842 24378 23843\nf 23843 24378 23847\nf 23844 23845 23846\nf 23845 23859 24395\nf 23845 24380 24382\nf 23845 24382 23846\nf 23845 24395 24380\nf 23846 24382 24381\nf 23847 24378 24383\nf 23847 24383 24384\nf 23847 24384 23848\nf 23848 24384 24385\nf 23848 24385 23849\nf 23849 24385 24386\nf 23849 24386 23850\nf 23850 24386 23861\nf 23851 23942 24478\nf 23851 24387 24388\nf 23851 24388 23852\nf 23851 24478 24387\nf 23852 24388 24389\nf 23852 24389 23853\nf 23853 24389 24390\nf 23853 24390 23854\nf 23854 24390 24391\nf 23854 24391 23855\nf 23855 24391 24392\nf 23855 24392 23856\nf 23856 24392 24393\nf 23856 24393 23857\nf 23857 24393 24394\nf 23857 24394 23858\nf 23858 24394 24396\nf 23858 24396 23860\nf 23859 23860 24395\nf 23860 24396 24395\nf 23861 24386 24397\nf 23861 24397 24398\nf 23861 24398 23862\nf 23862 24398 24399\nf 23862 24399 23863\nf 23863 24399 23944\nf 23864 23949 24486\nf 23864 24400 24401\nf 23864 24401 23865\nf 23864 24486 24400\nf 23865 24401 24402\nf 23865 24402 23866\nf 23866 24402 24403\nf 23866 24403 23867\nf 23867 24403 24404\nf 23867 24404 23868\nf 23868 24404 24405\nf 23868 24405 23869\nf 23869 24405 24406\nf 23869 24406 23870\nf 23870 24406 24407\nf 23870 24407 23871\nf 23871 24407 24408\nf 23871 24408 23872\nf 23872 24408 24409\nf 23872 24409 23873\nf 23873 24409 24410\nf 23873 24410 23874\nf 23874 24410 24411\nf 23874 24411 23875\nf 23875 24411 24412\nf 23875 24412 23876\nf 23876 24412 24413\nf 23876 24413 23877\nf 23877 24413 24414\nf 23877 24414 23878\nf 23878 24414 24415\nf 23878 24415 23879\nf 23879 24415 24416\nf 23879 24416 23880\nf 23880 24416 24417\nf 23880 24417 23881\nf 23881 24417 24418\nf 23881 24418 23882\nf 23882 24418 24419\nf 23882 24419 23883\nf 23883 24419 24420\nf 23883 24420 23884\nf 23884 24420 24421\nf 23884 24421 23885\nf 23885 24421 24422\nf 23885 24422 23886\nf 23886 24422 24423\nf 23886 24423 23887\nf 23887 24423 24424\nf 23887 24424 23888\nf 23888 24424 24425\nf 23888 24425 23889\nf 23889 24425 24426\nf 23889 24426 23890\nf 23890 24426 24427\nf 23890 24427 23891\nf 23891 24427 24428\nf 23891 24428 23892\nf 23892 24428 24429\nf 23892 24429 23893\nf 23893 24429 24430\nf 23893 24430 23894\nf 23894 24430 24431\nf 23894 24431 23895\nf 23895 24431 24432\nf 23895 24432 23896\nf 23896 24432 24433\nf 23896 24433 23897\nf 23897 24433 24434\nf 23897 24434 23898\nf 23898 24434 24435\nf 23898 24435 23899\nf 23899 24435 24436\nf 23899 24436 23900\nf 23900 24436 24437\nf 23900 24437 23901\nf 23901 24437 24438\nf 23901 24438 23902\nf 23902 24438 24439\nf 23902 24439 23903\nf 23903 24439 24440\nf 23903 24440 23904\nf 23904 24440 24441\nf 23904 24441 23905\nf 23905 24441 24442\nf 23905 24442 23906\nf 23906 24442 24443\nf 23906 24443 23907\nf 23907 24443 24444\nf 23907 24444 23908\nf 23908 24444 24445\nf 23908 24445 23909\nf 23909 24445 24446\nf 23909 24446 23910\nf 23910 24446 24447\nf 23910 24447 23911\nf 23911 24447 24448\nf 23911 24448 23912\nf 23912 24448 24449\nf 23912 24449 23913\nf 23913 24449 24450\nf 23913 24450 23914\nf 23914 24450 24451\nf 23914 24451 23915\nf 23915 24451 24452\nf 23915 24452 23916\nf 23916 24452 24453\nf 23916 24453 23917\nf 23917 24453 24454\nf 23917 24454 23918\nf 23918 24454 24455\nf 23918 24455 23919\nf 23919 24455 24456\nf 23919 24456 23920\nf 23920 24456 24457\nf 23920 24457 23921\nf 23921 24457 24458\nf 23921 24458 23922\nf 23922 24458 24459\nf 23922 24459 23923\nf 23923 24459 24460\nf 23923 24460 23924\nf 23924 24460 24461\nf 23924 24461 23925\nf 23925 24461 24462\nf 23925 24462 23926\nf 23926 24462 24463\nf 23926 24463 23927\nf 23927 24463 24464\nf 23927 24464 23928\nf 23928 24464 24465\nf 23928 24465 23929\nf 23929 24465 24466\nf 23929 24466 23930\nf 23930 24466 24467\nf 23930 24467 23931\nf 23931 24467 24468\nf 23931 24468 23932\nf 23932 24468 24469\nf 23932 24469 23933\nf 23933 24469 24470\nf 23933 24470 23934\nf 23934 24470 24471\nf 23934 24471 23935\nf 23935 24471 24472\nf 23935 24472 23936\nf 23936 24472 24473\nf 23936 24473 23937\nf 23937 24473 24474\nf 23937 24474 23938\nf 23938 24474 24475\nf 23938 24475 23939\nf 23939 24475 24476\nf 23939 24476 23940\nf 23940 24476 24477\nf 23940 24477 23941\nf 23941 24477 24479\nf 23941 24479 23943\nf 23942 23943 24478\nf 23943 24479 24478\nf 23944 24399 24481\nf 23944 24481 24482\nf 23944 24482 23945\nf 23945 24482 24483\nf 23945 24483 23946\nf 23946 24483 24484\nf 23946 24484 23947\nf 23947 24484 24485\nf 23947 24485 23948\nf 23948 24485 24487\nf 23948 24487 23950\nf 23949 23950 24486\nf 23950 24487 24486\nf 23951 23952 23957\nf 23951 23955 23953\nf 23951 23957 23955\nf 23952 23956 23957\nf 23953 23955 23954\nf 23954 23955 24489\nf 23954 24488 24492\nf 23954 24489 24488\nf 23954 24492 23959\nf 23955 23957 24489\nf 23956 23958 24490\nf 23956 24490 23957\nf 23957 24490 24489\nf 23958 23960 24491\nf 23958 24491 24490\nf 23959 24492 23962\nf 23960 23961 24494\nf 23960 24493 24491\nf 23960 24494 24493\nf 23961 23964 24494\nf 23962 24492 24495\nf 23962 24495 23963\nf 23963 24495 24496\nf 23963 24496 24499\nf 23963 24499 23966\nf 23964 23965 24498\nf 23964 24497 24494\nf 23964 24498 24497\nf 23965 23967 24498\nf 23966 24499 23969\nf 23967 23968 24501\nf 23967 24500 24498\nf 23967 24501 24500\nf 23968 23970 24501\nf 23969 24499 24502\nf 23969 24502 23971\nf 23970 23972 24505\nf 23970 24503 24501\nf 23970 24505 24503\nf 23971 24502 24504\nf 23971 24504 23973\nf 23972 23974 24507\nf 23972 24507 24505\nf 23973 24504 24506\nf 23973 24506 23975\nf 23974 23976 24509\nf 23974 24509 24507\nf 23975 24506 24508\nf 23975 24508 23978\nf 23976 23977 23980\nf 23976 23980 24511\nf 23976 24511 24509\nf 23977 23979 23980\nf 23978 24508 24510\nf 23978 24510 23981\nf 23979 23982 23983\nf 23979 23983 23980\nf 23980 23983 24511\nf 23981 24510 24512\nf 23981 24512 23984\nf 23982 23985 23986\nf 23982 23986 23983\nf 23983 23986 24513\nf 23983 24513 24511\nf 23984 24512 24514\nf 23984 24514 23987\nf 23985 23988 23989\nf 23985 23989 23986\nf 23986 23989 24515\nf 23986 24515 24513\nf 23987 24514 24516\nf 23987 24516 23990\nf 23988 23991 23992\nf 23988 23992 23989\nf 23989 23992 24517\nf 23989 24517 24515\nf 23990 24516 24518\nf 23990 24518 23993\nf 23991 23994 23996\nf 23991 23996 23992\nf 23992 23996 24519\nf 23992 24519 24517\nf 23993 24518 24520\nf 23993 24520 23997\nf 23994 23995 23996\nf 23995 23998 24521\nf 23995 24521 23996\nf 23996 24521 24519\nf 23997 24520 24522\nf 23997 24522 23999\nf 23998 24000 24525\nf 23998 24523 24521\nf 23998 24525 24523\nf 23999 24522 24524\nf 23999 24524 24001\nf 24000 24003 24529\nf 24000 24529 24525\nf 24001 24524 24526\nf 24001 24526 24527\nf 24001 24527 24002\nf 24002 24527 24004\nf 24003 24005 24531\nf 24003 24531 24529\nf 24004 24527 24530\nf 24004 24530 24006\nf 24005 24007 24531\nf 24006 24530 24533\nf 24006 24533 24010\nf 24007 24008 24009\nf 24007 24009 24531\nf 24008 24012 24534\nf 24008 24534 24009\nf 24009 24532 24531\nf 24009 24534 24532\nf 24010 24533 24535\nf 24010 24535 24536\nf 24010 24536 24011\nf 24011 24536 24013\nf 24012 24014 24538\nf 24012 24538 24534\nf 24013 24536 24541\nf 24013 24541 24017\nf 24014 24015 24016\nf 24014 24016 24538\nf 24015 24018 24020\nf 24015 24020 24543\nf 24015 24543 24016\nf 24016 24539 24538\nf 24016 24542 24539\nf 24016 24543 24542\nf 24017 24541 24544\nf 24017 24544 24021\nf 24018 24019 24020\nf 24019 24024 24026\nf 24019 24026 24547\nf 24019 24547 24020\nf 24020 24546 24543\nf 24020 24547 24546\nf 24021 24023 24022\nf 24021 24544 24545\nf 24021 24545 24023\nf 24022 24023 24029\nf 24022 24029 24027\nf 24023 24545 24548\nf 24023 24548 24550\nf 24023 24550 24029\nf 24024 24025 24026\nf 24025 24028 24029\nf 24025 24029 24550\nf 24025 24550 24026\nf 24026 24549 24547\nf 24026 24550 24549\nf 24027 24029 24030\nf 24028 24031 24032\nf 24028 24032 24029\nf 24029 24032 24030\nf 24030 24032 24033\nf 24031 24034 24035\nf 24031 24035 24032\nf 24032 24035 24033\nf 24033 24035 24036\nf 24034 24038 24039\nf 24034 24039 24035\nf 24035 24039 24036\nf 24036 24039 24037\nf 24037 24039 24041\nf 24037 24041 24040\nf 24038 24042 24043\nf 24038 24043 24039\nf 24039 24043 24041\nf 24040 24041 24044\nf 24041 24043 24045\nf 24041 24045 24044\nf 24042 24046 24047\nf 24042 24047 24043\nf 24043 24047 24045\nf 24044 24045 24048\nf 24045 24047 24049\nf 24045 24049 24048\nf 24046 24050 24051\nf 24046 24051 24047\nf 24047 24051 24049\nf 24048 24049 24052\nf 24049 24051 24053\nf 24049 24053 24052\nf 24050 24054 24055\nf 24050 24055 24051\nf 24051 24055 24053\nf 24052 24053 24057\nf 24053 24055 24058\nf 24053 24058 24057\nf 24054 24056 24062\nf 24054 24062 24055\nf 24055 24059 24058\nf 24055 24062 24059\nf 24056 24060 24062\nf 24057 24058 24063\nf 24058 24059 24065\nf 24058 24065 24063\nf 24059 24062 24067\nf 24059 24067 24065\nf 24060 24061 24062\nf 24061 24066 24067\nf 24061 24067 24062\nf 24063 24065 24064\nf 24064 24065 24068\nf 24065 24067 24071\nf 24065 24071 24068\nf 24066 24069 24071\nf 24066 24071 24067\nf 24068 24071 24070\nf 24069 24070 24071\nf 24072 24073 24078\nf 24072 24076 24074\nf 24072 24078 24076\nf 24073 24077 24078\nf 24074 24076 24075\nf 24075 24076 24553\nf 24075 24552 24555\nf 24075 24553 24552\nf 24075 24555 24080\nf 24076 24078 24553\nf 24077 24079 24554\nf 24077 24554 24078\nf 24078 24554 24553\nf 24079 24081 24082\nf 24079 24082 24557\nf 24079 24557 24554\nf 24080 24555 24083\nf 24081 24085 24561\nf 24081 24558 24082\nf 24081 24561 24558\nf 24082 24558 24557\nf 24083 24555 24559\nf 24083 24559 24084\nf 24084 24559 24560\nf 24084 24560 24563\nf 24084 24563 24086\nf 24085 24087 24565\nf 24085 24565 24561\nf 24086 24563 24089\nf 24087 24088 24091\nf 24087 24091 24567\nf 24087 24567 24565\nf 24088 24090 24091\nf 24089 24563 24566\nf 24089 24566 24092\nf 24090 24094 24095\nf 24090 24095 24091\nf 24091 24095 24567\nf 24092 24566 24568\nf 24092 24568 24093\nf 24093 24568 24569\nf 24093 24569 24572\nf 24093 24572 24096\nf 24094 24097 24574\nf 24094 24571 24095\nf 24094 24574 24571\nf 24095 24570 24567\nf 24095 24571 24570\nf 24096 24572 24098\nf 24097 24099 24577\nf 24097 24577 24574\nf 24098 24572 24576\nf 24098 24576 24100\nf 24099 24101 24579\nf 24099 24579 24577\nf 24100 24576 24578\nf 24100 24578 24102\nf 24101 24103 24581\nf 24101 24581 24579\nf 24102 24578 24580\nf 24102 24580 24104\nf 24103 24105 24583\nf 24103 24583 24581\nf 24104 24580 24582\nf 24104 24582 24106\nf 24105 24107 24585\nf 24105 24585 24583\nf 24106 24582 24584\nf 24106 24584 24108\nf 24107 24109 24588\nf 24107 24588 24585\nf 24108 24584 24586\nf 24108 24586 24110\nf 24109 24111 24591\nf 24109 24591 24588\nf 24110 24586 24589\nf 24110 24589 24112\nf 24111 24113 24591\nf 24112 24589 24594\nf 24112 24594 24116\nf 24113 24114 24115\nf 24113 24115 24591\nf 24114 24117 24596\nf 24114 24596 24115\nf 24115 24592 24591\nf 24115 24596 24592\nf 24116 24594 24597\nf 24116 24597 24118\nf 24117 24121 24602\nf 24117 24600 24596\nf 24117 24602 24600\nf 24118 24120 24119\nf 24118 24597 24598\nf 24118 24598 24120\nf 24119 24120 24122\nf 24120 24598 24601\nf 24120 24601 24122\nf 24121 24123 24602\nf 24122 24601 24604\nf 24122 24604 24126\nf 24123 24124 24125\nf 24123 24125 24602\nf 24124 24127 24605\nf 24124 24605 24125\nf 24125 24603 24602\nf 24125 24605 24603\nf 24126 24604 24606\nf 24126 24606 24129\nf 24127 24128 24607\nf 24127 24607 24605\nf 24128 24131 24612\nf 24128 24608 24607\nf 24128 24612 24608\nf 24129 24606 24609\nf 24129 24609 24610\nf 24129 24610 24130\nf 24130 24610 24133\nf 24131 24132 24612\nf 24132 24134 24615\nf 24132 24613 24612\nf 24132 24615 24613\nf 24133 24610 24614\nf 24133 24614 24616\nf 24133 24616 24135\nf 24134 24135 24615\nf 24135 24616 24615\nf 24136 24137 24619\nf 24136 24143 24141\nf 24136 24618 24143\nf 24136 24619 24618\nf 24137 24138 24620\nf 24137 24620 24619\nf 24138 24139 24621\nf 24138 24621 24620\nf 24139 24144 24623\nf 24139 24622 24621\nf 24139 24623 24622\nf 24140 24142 24625\nf 24140 24625 24633\nf 24140 24633 24151\nf 24141 24143 24142\nf 24142 24143 24624\nf 24142 24624 24625\nf 24143 24618 24624\nf 24144 24145 24146\nf 24144 24146 24623\nf 24145 24147 24628\nf 24145 24628 24146\nf 24146 24627 24623\nf 24146 24628 24627\nf 24147 24148 24628\nf 24148 24149 24630\nf 24148 24630 24628\nf 24149 24150 24631\nf 24149 24631 24630\nf 24150 24152 24632\nf 24150 24632 24631\nf 24151 24633 24156\nf 24152 24153 24636\nf 24152 24635 24632\nf 24152 24636 24635\nf 24153 24154 24636\nf 24154 24155 24638\nf 24154 24638 24636\nf 24155 24157 24158\nf 24155 24158 24638\nf 24156 24633 24639\nf 24156 24639 24160\nf 24157 24159 24641\nf 24157 24641 24158\nf 24158 24640 24638\nf 24158 24641 24640\nf 24159 24162 24642\nf 24159 24642 24641\nf 24160 24639 24643\nf 24160 24643 24644\nf 24160 24644 24161\nf 24161 24644 24164\nf 24162 24163 24646\nf 24162 24645 24642\nf 24162 24646 24645\nf 24163 24165 24646\nf 24164 24644 24647\nf 24164 24647 24167\nf 24165 24166 24650\nf 24165 24649 24646\nf 24165 24650 24649\nf 24166 24172 24650\nf 24167 24169 24168\nf 24167 24647 24648\nf 24167 24648 24169\nf 24168 24169 24653\nf 24168 24653 24170\nf 24169 24648 24651\nf 24169 24651 24653\nf 24170 24653 24654\nf 24170 24654 24171\nf 24171 24654 24173\nf 24172 24176 24659\nf 24172 24655 24650\nf 24172 24659 24655\nf 24173 24654 24656\nf 24173 24656 24657\nf 24173 24657 24174\nf 24174 24657 24658\nf 24174 24658 24175\nf 24175 24658 24178\nf 24176 24177 24659\nf 24177 24183 24668\nf 24177 24660 24659\nf 24177 24668 24660\nf 24178 24658 24661\nf 24178 24661 24662\nf 24178 24662 24179\nf 24179 24662 24663\nf 24179 24663 24180\nf 24180 24663 24664\nf 24180 24664 24181\nf 24181 24664 24665\nf 24181 24665 24182\nf 24182 24665 24666\nf 24182 24666 24185\nf 24183 24184 24668\nf 24184 24191 24193\nf 24184 24193 24667\nf 24184 24667 24669\nf 24184 24669 24668\nf 24185 24187 24186\nf 24185 24666 24187\nf 24186 24187 24673\nf 24186 24673 24188\nf 24187 24666 24671\nf 24187 24671 24673\nf 24188 24673 24674\nf 24188 24674 24189\nf 24189 24674 24676\nf 24189 24676 24190\nf 24190 24676 24192\nf 24191 24192 24193\nf 24192 24675 24193\nf 24192 24676 24675\nf 24193 24675 24667\nf 24194 24203 24204\nf 24194 24204 24201\nf 24195 24196 24678\nf 24195 24678 24688\nf 24195 24688 24208\nf 24196 24197 24679\nf 24196 24679 24678\nf 24197 24198 24680\nf 24197 24680 24679\nf 24198 24199 24681\nf 24198 24681 24680\nf 24199 24210 24211\nf 24199 24211 24681\nf 24200 24202 24682\nf 24200 24682 24695\nf 24200 24695 24213\nf 24201 24204 24202\nf 24202 24204 24684\nf 24202 24683 24682\nf 24202 24684 24683\nf 24203 24205 24684\nf 24203 24684 24204\nf 24205 24206 24685\nf 24205 24685 24684\nf 24206 24214 24686\nf 24206 24686 24685\nf 24207 24209 24687\nf 24207 24687 24700\nf 24207 24700 24216\nf 24208 24688 24209\nf 24209 24688 24689\nf 24209 24689 24687\nf 24210 24212 24694\nf 24210 24694 24211\nf 24211 24692 24681\nf 24211 24694 24692\nf 24212 24217 24218\nf 24212 24218 24701\nf 24212 24701 24694\nf 24213 24695 24219\nf 24214 24215 24699\nf 24214 24697 24686\nf 24214 24699 24697\nf 24215 24221 24699\nf 24216 24700 24223\nf 24217 24224 24707\nf 24217 24702 24218\nf 24217 24707 24702\nf 24218 24702 24701\nf 24219 24695 24703\nf 24219 24703 24708\nf 24219 24708 24220\nf 24220 24226 24225\nf 24220 24708 24226\nf 24221 24222 24228\nf 24221 24228 24710\nf 24221 24704 24699\nf 24221 24710 24704\nf 24222 24227 24228\nf 24223 24700 24706\nf 24223 24706 24229\nf 24224 24230 24712\nf 24224 24712 24707\nf 24225 24226 24713\nf 24225 24713 24231\nf 24226 24708 24709\nf 24226 24709 24713\nf 24227 24232 24233\nf 24227 24233 24228\nf 24228 24233 24710\nf 24229 24706 24711\nf 24229 24711 24234\nf 24230 24235 24717\nf 24230 24717 24712\nf 24231 24713 24237\nf 24232 24238 24719\nf 24232 24715 24233\nf 24232 24719 24715\nf 24233 24714 24710\nf 24233 24715 24714\nf 24234 24711 24716\nf 24234 24716 24239\nf 24235 24236 24241\nf 24235 24241 24724\nf 24235 24724 24717\nf 24236 24240 24241\nf 24237 24713 24718\nf 24237 24718 24242\nf 24238 24243 24727\nf 24238 24727 24719\nf 24239 24716 24721\nf 24239 24721 24244\nf 24240 24246 24730\nf 24240 24725 24241\nf 24240 24730 24725\nf 24241 24725 24724\nf 24242 24718 24726\nf 24242 24726 24247\nf 24243 24248 24733\nf 24243 24733 24727\nf 24244 24245 24249\nf 24244 24721 24722\nf 24244 24722 24245\nf 24245 24250 24249\nf 24245 24722 24729\nf 24245 24729 24735\nf 24245 24735 24250\nf 24246 24251 24736\nf 24246 24736 24730\nf 24247 24726 24732\nf 24247 24732 24252\nf 24248 24253 24739\nf 24248 24739 24733\nf 24249 24250 24255\nf 24250 24256 24255\nf 24250 24735 24741\nf 24250 24741 24256\nf 24251 24257 24743\nf 24251 24743 24736\nf 24252 24732 24738\nf 24252 24738 24258\nf 24253 24254 24260\nf 24253 24260 24747\nf 24253 24747 24739\nf 24254 24259 24260\nf 24255 24256 24749\nf 24255 24749 24262\nf 24256 24741 24742\nf 24256 24742 24749\nf 24257 24263 24743\nf 24258 24738 24746\nf 24258 24746 24266\nf 24259 24261 24269\nf 24259 24269 24260\nf 24260 24267 24747\nf 24260 24269 24267\nf 24261 24268 24269\nf 24262 24749 24271\nf 24263 24264 24265\nf 24263 24265 24743\nf 24264 24272 24751\nf 24264 24751 24265\nf 24265 24744 24743\nf 24265 24751 24744\nf 24266 24746 24752\nf 24266 24752 24273\nf 24267 24269 24755\nf 24267 24753 24747\nf 24267 24755 24753\nf 24268 24270 24756\nf 24268 24756 24269\nf 24269 24756 24755\nf 24270 24274 24275\nf 24270 24275 24763\nf 24270 24763 24756\nf 24271 24749 24757\nf 24271 24757 24279\nf 24272 24281 24769\nf 24272 24759 24751\nf 24272 24769 24759\nf 24273 24752 24760\nf 24273 24760 24282\nf 24274 24276 24765\nf 24274 24765 24275\nf 24275 24765 24763\nf 24276 24277 24766\nf 24276 24766 24765\nf 24277 24285 24286\nf 24277 24286 24766\nf 24278 24280 24768\nf 24278 24368 24366\nf 24278 24768 24854\nf 24278 24854 24368\nf 24279 24757 24767\nf 24279 24767 24280\nf 24280 24767 24768\nf 24281 24369 24856\nf 24281 24856 24769\nf 24282 24284 24283\nf 24282 24760 24761\nf 24282 24761 24284\nf 24283 24284 24370\nf 24284 24761 24770\nf 24284 24770 24370\nf 24285 24287 24773\nf 24285 24773 24286\nf 24286 24771 24766\nf 24286 24773 24771\nf 24287 24288 24774\nf 24287 24774 24773\nf 24288 24289 24775\nf 24288 24775 24774\nf 24289 24290 24776\nf 24289 24776 24775\nf 24290 24291 24777\nf 24290 24777 24776\nf 24291 24292 24778\nf 24291 24778 24777\nf 24292 24293 24779\nf 24292 24779 24778\nf 24293 24294 24780\nf 24293 24780 24779\nf 24294 24295 24781\nf 24294 24781 24780\nf 24295 24296 24782\nf 24295 24782 24781\nf 24296 24297 24783\nf 24296 24783 24782\nf 24297 24298 24784\nf 24297 24784 24783\nf 24298 24299 24785\nf 24298 24785 24784\nf 24299 24300 24786\nf 24299 24786 24785\nf 24300 24301 24787\nf 24300 24787 24786\nf 24301 24302 24788\nf 24301 24788 24787\nf 24302 24303 24789\nf 24302 24789 24788\nf 24303 24304 24790\nf 24303 24790 24789\nf 24304 24305 24791\nf 24304 24791 24790\nf 24305 24306 24792\nf 24305 24792 24791\nf 24306 24307 24793\nf 24306 24793 24792\nf 24307 24308 24794\nf 24307 24794 24793\nf 24308 24309 24795\nf 24308 24795 24794\nf 24309 24310 24796\nf 24309 24796 24795\nf 24310 24311 24797\nf 24310 24797 24796\nf 24311 24312 24798\nf 24311 24798 24797\nf 24312 24313 24799\nf 24312 24799 24798\nf 24313 24314 24800\nf 24313 24800 24799\nf 24314 24315 24801\nf 24314 24801 24800\nf 24315 24316 24802\nf 24315 24802 24801\nf 24316 24317 24803\nf 24316 24803 24802\nf 24317 24318 24804\nf 24317 24804 24803\nf 24318 24319 24805\nf 24318 24805 24804\nf 24319 24320 24806\nf 24319 24806 24805\nf 24320 24321 24807\nf 24320 24807 24806\nf 24321 24322 24808\nf 24321 24808 24807\nf 24322 24323 24809\nf 24322 24809 24808\nf 24323 24324 24810\nf 24323 24810 24809\nf 24324 24325 24811\nf 24324 24811 24810\nf 24325 24326 24812\nf 24325 24812 24811\nf 24326 24327 24813\nf 24326 24813 24812\nf 24327 24328 24814\nf 24327 24814 24813\nf 24328 24329 24815\nf 24328 24815 24814\nf 24329 24330 24816\nf 24329 24816 24815\nf 24330 24331 24817\nf 24330 24817 24816\nf 24331 24332 24818\nf 24331 24818 24817\nf 24332 24333 24819\nf 24332 24819 24818\nf 24333 24334 24820\nf 24333 24820 24819\nf 24334 24335 24821\nf 24334 24821 24820\nf 24335 24336 24822\nf 24335 24822 24821\nf 24336 24337 24823\nf 24336 24823 24822\nf 24337 24338 24824\nf 24337 24824 24823\nf 24338 24339 24825\nf 24338 24825 24824\nf 24339 24340 24826\nf 24339 24826 24825\nf 24340 24341 24827\nf 24340 24827 24826\nf 24341 24342 24828\nf 24341 24828 24827\nf 24342 24343 24829\nf 24342 24829 24828\nf 24343 24344 24830\nf 24343 24830 24829\nf 24344 24345 24831\nf 24344 24831 24830\nf 24345 24346 24832\nf 24345 24832 24831\nf 24346 24347 24833\nf 24346 24833 24832\nf 24347 24348 24834\nf 24347 24834 24833\nf 24348 24349 24835\nf 24348 24835 24834\nf 24349 24350 24836\nf 24349 24836 24835\nf 24350 24351 24837\nf 24350 24837 24836\nf 24351 24352 24838\nf 24351 24838 24837\nf 24352 24353 24839\nf 24352 24839 24838\nf 24353 24354 24840\nf 24353 24840 24839\nf 24354 24355 24841\nf 24354 24841 24840\nf 24355 24356 24842\nf 24355 24842 24841\nf 24356 24357 24843\nf 24356 24843 24842\nf 24357 24358 24844\nf 24357 24844 24843\nf 24358 24359 24845\nf 24358 24845 24844\nf 24359 24360 24846\nf 24359 24846 24845\nf 24360 24361 24847\nf 24360 24847 24846\nf 24361 24362 24848\nf 24361 24848 24847\nf 24362 24363 24849\nf 24362 24849 24848\nf 24363 24364 24850\nf 24363 24850 24849\nf 24364 24365 24851\nf 24364 24851 24850\nf 24365 24367 24852\nf 24365 24852 24851\nf 24366 24368 24367\nf 24367 24368 24855\nf 24367 24853 24852\nf 24367 24855 24853\nf 24368 24854 24855\nf 24369 24371 24858\nf 24369 24858 24856\nf 24370 24770 24857\nf 24370 24857 24372\nf 24371 24373 24860\nf 24371 24860 24858\nf 24372 24857 24859\nf 24372 24859 24375\nf 24373 24374 24860\nf 24374 24376 24865\nf 24374 24861 24860\nf 24374 24865 24861\nf 24375 24859 24862\nf 24375 24862 24377\nf 24376 24381 24868\nf 24376 24868 24865\nf 24377 24379 24378\nf 24377 24862 24863\nf 24377 24863 24379\nf 24378 24379 24383\nf 24379 24863 24866\nf 24379 24866 24383\nf 24380 24395 24881\nf 24380 24867 24869\nf 24380 24869 24382\nf 24380 24881 24867\nf 24381 24382 24868\nf 24382 24869 24868\nf 24383 24866 24870\nf 24383 24870 24871\nf 24383 24871 24384\nf 24384 24871 24872\nf 24384 24872 24385\nf 24385 24872 24873\nf 24385 24873 24386\nf 24386 24873 24397\nf 24387 24478 24480\nf 24387 24480 24965\nf 24387 24874 24388\nf 24387 24965 24874\nf 24388 24874 24875\nf 24388 24875 24389\nf 24389 24875 24876\nf 24389 24876 24390\nf 24390 24876 24877\nf 24390 24877 24391\nf 24391 24877 24878\nf 24391 24878 24392\nf 24392 24878 24879\nf 24392 24879 24393\nf 24393 24879 24880\nf 24393 24880 24394\nf 24394 24880 24882\nf 24394 24882 24396\nf 24395 24396 24881\nf 24396 24882 24881\nf 24397 24873 24883\nf 24397 24883 24884\nf 24397 24884 24398\nf 24398 24884 24885\nf 24398 24885 24399\nf 24399 24885 24481\nf 24400 24486 24972\nf 24400 24886 24887\nf 24400 24887 24401\nf 24400 24972 24886\nf 24401 24887 24888\nf 24401 24888 24402\nf 24402 24888 24889\nf 24402 24889 24403\nf 24403 24889 24890\nf 24403 24890 24404\nf 24404 24890 24891\nf 24404 24891 24405\nf 24405 24891 24892\nf 24405 24892 24406\nf 24406 24892 24893\nf 24406 24893 24407\nf 24407 24893 24894\nf 24407 24894 24408\nf 24408 24894 24895\nf 24408 24895 24409\nf 24409 24895 24896\nf 24409 24896 24410\nf 24410 24896 24897\nf 24410 24897 24411\nf 24411 24897 24898\nf 24411 24898 24412\nf 24412 24898 24899\nf 24412 24899 24413\nf 24413 24899 24900\nf 24413 24900 24414\nf 24414 24900 24901\nf 24414 24901 24415\nf 24415 24901 24902\nf 24415 24902 24416\nf 24416 24902 24903\nf 24416 24903 24417\nf 24417 24903 24904\nf 24417 24904 24418\nf 24418 24904 24905\nf 24418 24905 24419\nf 24419 24905 24906\nf 24419 24906 24420\nf 24420 24906 24907\nf 24420 24907 24421\nf 24421 24907 24908\nf 24421 24908 24422\nf 24422 24908 24909\nf 24422 24909 24423\nf 24423 24909 24910\nf 24423 24910 24424\nf 24424 24910 24911\nf 24424 24911 24425\nf 24425 24911 24912\nf 24425 24912 24426\nf 24426 24912 24913\nf 24426 24913 24427\nf 24427 24913 24914\nf 24427 24914 24428\nf 24428 24914 24915\nf 24428 24915 24429\nf 24429 24915 24916\nf 24429 24916 24430\nf 24430 24916 24917\nf 24430 24917 24431\nf 24431 24917 24918\nf 24431 24918 24432\nf 24432 24918 24919\nf 24432 24919 24433\nf 24433 24919 24920\nf 24433 24920 24434\nf 24434 24920 24921\nf 24434 24921 24435\nf 24435 24921 24922\nf 24435 24922 24436\nf 24436 24922 24923\nf 24436 24923 24437\nf 24437 24923 24924\nf 24437 24924 24438\nf 24438 24924 24925\nf 24438 24925 24439\nf 24439 24925 24926\nf 24439 24926 24440\nf 24440 24926 24927\nf 24440 24927 24441\nf 24441 24927 24928\nf 24441 24928 24442\nf 24442 24928 24929\nf 24442 24929 24443\nf 24443 24929 24930\nf 24443 24930 24444\nf 24444 24930 24931\nf 24444 24931 24445\nf 24445 24931 24932\nf 24445 24932 24446\nf 24446 24932 24933\nf 24446 24933 24447\nf 24447 24933 24934\nf 24447 24934 24448\nf 24448 24934 24935\nf 24448 24935 24449\nf 24449 24935 24936\nf 24449 24936 24450\nf 24450 24936 24937\nf 24450 24937 24451\nf 24451 24937 24938\nf 24451 24938 24452\nf 24452 24938 24939\nf 24452 24939 24453\nf 24453 24939 24940\nf 24453 24940 24454\nf 24454 24940 24941\nf 24454 24941 24455\nf 24455 24941 24942\nf 24455 24942 24456\nf 24456 24942 24943\nf 24456 24943 24457\nf 24457 24943 24944\nf 24457 24944 24458\nf 24458 24944 24945\nf 24458 24945 24459\nf 24459 24945 24946\nf 24459 24946 24460\nf 24460 24946 24947\nf 24460 24947 24461\nf 24461 24947 24948\nf 24461 24948 24462\nf 24462 24948 24949\nf 24462 24949 24463\nf 24463 24949 24950\nf 24463 24950 24464\nf 24464 24950 24951\nf 24464 24951 24465\nf 24465 24951 24952\nf 24465 24952 24466\nf 24466 24952 24953\nf 24466 24953 24467\nf 24467 24953 24954\nf 24467 24954 24468\nf 24468 24954 24955\nf 24468 24955 24469\nf 24469 24955 24956\nf 24469 24956 24470\nf 24470 24956 24957\nf 24470 24957 24471\nf 24471 24957 24958\nf 24471 24958 24472\nf 24472 24958 24959\nf 24472 24959 24473\nf 24473 24959 24960\nf 24473 24960 24474\nf 24474 24960 24961\nf 24474 24961 24475\nf 24475 24961 24962\nf 24475 24962 24476\nf 24476 24962 24963\nf 24476 24963 24477\nf 24477 24963 24964\nf 24477 24964 24479\nf 24478 24479 24480\nf 24479 24964 24966\nf 24479 24966 24480\nf 24480 24966 24965\nf 24481 24885 24967\nf 24481 24967 24968\nf 24481 24968 24482\nf 24482 24968 24969\nf 24482 24969 24483\nf 24483 24969 24970\nf 24483 24970 24484\nf 24484 24970 24971\nf 24484 24971 24485\nf 24485 24971 24973\nf 24485 24973 24487\nf 24486 24487 24972\nf 24487 24973 24972\nf 24488 24489 24974\nf 24488 24974 24978\nf 24488 24978 24492\nf 24489 24490 24975\nf 24489 24975 24974\nf 24490 24491 24976\nf 24490 24976 24975\nf 24491 24493 24977\nf 24491 24977 24976\nf 24492 24978 24495\nf 24493 24494 24980\nf 24493 24979 24977\nf 24493 24980 24979\nf 24494 24497 24980\nf 24495 24978 24981\nf 24495 24981 24496\nf 24496 24981 24982\nf 24496 24982 24985\nf 24496 24985 24499\nf 24497 24498 24984\nf 24497 24983 24980\nf 24497 24984 24983\nf 24498 24500 24984\nf 24499 24985 24502\nf 24500 24501 24988\nf 24500 24987 24984\nf 24500 24988 24987\nf 24501 24503 24988\nf 24502 24985 24989\nf 24502 24989 24504\nf 24503 24505 24992\nf 24503 24990 24988\nf 24503 24992 24990\nf 24504 24989 24991\nf 24504 24991 24506\nf 24505 24507 24994\nf 24505 24994 24992\nf 24506 24991 24993\nf 24506 24993 24508\nf 24507 24509 24996\nf 24507 24996 24994\nf 24508 24993 24995\nf 24508 24995 24510\nf 24509 24511 24998\nf 24509 24998 24996\nf 24510 24995 24997\nf 24510 24997 24512\nf 24511 24513 25000\nf 24511 25000 24998\nf 24512 24997 24999\nf 24512 24999 24514\nf 24513 24515 25002\nf 24513 25002 25000\nf 24514 24999 25001\nf 24514 25001 24516\nf 24515 24517 25004\nf 24515 25004 25002\nf 24516 25001 25003\nf 24516 25003 24518\nf 24517 24519 25006\nf 24517 25006 25004\nf 24518 25003 25005\nf 24518 25005 24520\nf 24519 24521 25008\nf 24519 25008 25006\nf 24520 25005 25007\nf 24520 25007 24522\nf 24521 24523 25010\nf 24521 25010 25008\nf 24522 25007 25009\nf 24522 25009 24524\nf 24523 24525 25013\nf 24523 25013 25010\nf 24524 25009 25011\nf 24524 25011 24526\nf 24525 24529 25015\nf 24525 25015 25013\nf 24526 24528 24527\nf 24526 25011 25012\nf 24526 25012 24528\nf 24527 24528 24530\nf 24528 25012 25014\nf 24528 25014 24530\nf 24529 24531 25017\nf 24529 25017 25015\nf 24530 25014 25016\nf 24530 25016 24533\nf 24531 24532 25017\nf 24532 24534 25021\nf 24532 25018 25017\nf 24532 25021 25018\nf 24533 25016 25019\nf 24533 25019 24535\nf 24534 24538 25021\nf 24535 24537 24536\nf 24535 25019 25020\nf 24535 25020 24537\nf 24536 24537 24541\nf 24537 25020 25023\nf 24537 25023 24541\nf 24538 24539 24540\nf 24538 24540 25021\nf 24539 24542 25025\nf 24539 25025 24540\nf 24540 25022 25021\nf 24540 25025 25022\nf 24541 25023 25026\nf 24541 25026 24544\nf 24542 24543 25027\nf 24542 25027 25025\nf 24543 24546 25033\nf 24543 25028 25027\nf 24543 25033 25028\nf 24544 25026 25029\nf 24544 25029 25030\nf 24544 25030 24545\nf 24545 25030 25032\nf 24545 25032 24548\nf 24546 24547 25033\nf 24547 24549 24551\nf 24547 24551 25032\nf 24547 25032 25034\nf 24547 25034 25033\nf 24548 24551 24550\nf 24548 25032 24551\nf 24549 24550 24551\nf 24552 24553 25036\nf 24552 24556 24555\nf 24552 25036 25038\nf 24552 25038 24556\nf 24553 24554 25036\nf 24554 24557 25037\nf 24554 25037 25036\nf 24555 24556 25043\nf 24555 25043 24559\nf 24556 25038 25039\nf 24556 25039 25043\nf 24557 24558 24562\nf 24557 24562 25045\nf 24557 25041 25037\nf 24557 25045 25041\nf 24558 24561 24562\nf 24559 25043 25047\nf 24559 25047 24560\nf 24560 24564 24563\nf 24560 25047 24564\nf 24561 24565 25049\nf 24561 25046 24562\nf 24561 25049 25046\nf 24562 25046 25045\nf 24563 24564 25050\nf 24563 25050 24566\nf 24564 25047 25048\nf 24564 25048 25050\nf 24565 24567 25052\nf 24565 25052 25049\nf 24566 25050 24568\nf 24567 24570 25054\nf 24567 25054 25052\nf 24568 25050 25053\nf 24568 25053 25055\nf 24568 25055 24569\nf 24569 24573 24572\nf 24569 25055 24573\nf 24570 24571 24575\nf 24570 24575 25057\nf 24570 25057 25054\nf 24571 24574 24575\nf 24572 24573 25059\nf 24572 25059 24576\nf 24573 25055 25056\nf 24573 25056 25059\nf 24574 24577 25061\nf 24574 25058 24575\nf 24574 25061 25058\nf 24575 25058 25057\nf 24576 25059 24578\nf 24577 24579 25063\nf 24577 25063 25061\nf 24578 25059 25062\nf 24578 25062 24580\nf 24579 24581 25065\nf 24579 25065 25063\nf 24580 25062 25064\nf 24580 25064 24582\nf 24581 24583 25068\nf 24581 25068 25065\nf 24582 25064 25066\nf 24582 25066 24584\nf 24583 24585 25072\nf 24583 25072 25068\nf 24584 25066 25069\nf 24584 25069 24586\nf 24585 24588 25074\nf 24585 25074 25072\nf 24586 24587 24589\nf 24586 25069 25070\nf 24586 25070 24587\nf 24587 24590 24589\nf 24587 25070 25073\nf 24587 25073 25076\nf 24587 25076 24590\nf 24588 24591 25074\nf 24589 24590 24594\nf 24590 24595 24594\nf 24590 25076 25078\nf 24590 25078 24595\nf 24591 24592 24593\nf 24591 24593 25074\nf 24592 24596 25077\nf 24592 25077 24593\nf 24593 25075 25074\nf 24593 25077 25075\nf 24594 24595 24597\nf 24595 24599 24597\nf 24595 25078 25080\nf 24595 25080 24599\nf 24596 24600 25081\nf 24596 25079 25077\nf 24596 25081 25079\nf 24597 24599 24598\nf 24598 24599 24601\nf 24599 25080 24601\nf 24600 24602 25083\nf 24600 25083 25081\nf 24601 25080 25082\nf 24601 25082 24604\nf 24602 24603 25083\nf 24603 24605 25087\nf 24603 25084 25083\nf 24603 25087 25084\nf 24604 25082 25086\nf 24604 25086 24606\nf 24605 24607 25090\nf 24605 25090 25087\nf 24606 25086 25088\nf 24606 25088 24609\nf 24607 24608 25090\nf 24608 24612 25095\nf 24608 25091 25090\nf 24608 25095 25091\nf 24609 24611 24610\nf 24609 25088 25089\nf 24609 25089 24611\nf 24610 24611 24617\nf 24610 24617 24614\nf 24611 25089 25093\nf 24611 25093 25094\nf 24611 25094 24617\nf 24612 24613 25095\nf 24613 24615 24617\nf 24613 24617 25094\nf 24613 25094 25096\nf 24613 25096 25095\nf 24614 24617 24616\nf 24615 24616 24617\nf 24618 24619 25099\nf 24618 24626 24624\nf 24618 25098 24626\nf 24618 25099 25098\nf 24619 24620 25100\nf 24619 25100 25099\nf 24620 24621 25101\nf 24620 25101 25100\nf 24621 24622 25102\nf 24621 25102 25101\nf 24622 24623 25103\nf 24622 25103 25102\nf 24623 24627 25105\nf 24623 25104 25103\nf 24623 25105 25104\nf 24624 24626 24625\nf 24625 24626 25106\nf 24625 25106 25107\nf 24625 25107 24633\nf 24626 25098 25106\nf 24627 24628 24629\nf 24627 24629 25105\nf 24628 24630 25109\nf 24628 25109 24629\nf 24629 25108 25105\nf 24629 25109 25108\nf 24630 24631 25109\nf 24631 24632 25111\nf 24631 25111 25109\nf 24632 24635 25113\nf 24632 25112 25111\nf 24632 25113 25112\nf 24633 24634 25115\nf 24633 25107 24634\nf 24633 25115 25118\nf 24633 25118 24639\nf 24634 25107 25114\nf 24634 25114 25115\nf 24635 24636 24637\nf 24635 24637 25113\nf 24636 24638 25117\nf 24636 25117 24637\nf 24637 25116 25113\nf 24637 25117 25116\nf 24638 24640 25117\nf 24639 25118 24643\nf 24640 24641 25120\nf 24640 25119 25117\nf 24640 25120 25119\nf 24641 24642 25120\nf 24642 24645 25121\nf 24642 25121 25120\nf 24643 25118 25122\nf 24643 25122 25123\nf 24643 25123 24644\nf 24644 25123 24647\nf 24645 24646 25125\nf 24645 25124 25121\nf 24645 25125 25124\nf 24646 24649 25125\nf 24647 24652 24648\nf 24647 25123 25126\nf 24647 25126 25130\nf 24647 25130 24652\nf 24648 24652 24651\nf 24649 24650 25129\nf 24649 25128 25125\nf 24649 25129 25128\nf 24650 24655 25129\nf 24651 24652 25131\nf 24651 25131 24653\nf 24652 25130 25131\nf 24653 25131 25132\nf 24653 25132 25133\nf 24653 25133 24654\nf 24654 25133 24656\nf 24655 24659 25139\nf 24655 25134 25129\nf 24655 25139 25134\nf 24656 25133 25135\nf 24656 25135 25137\nf 24656 25137 24657\nf 24657 25137 25138\nf 24657 25138 24658\nf 24658 25138 24661\nf 24659 24660 25147\nf 24659 25147 25139\nf 24660 24668 24670\nf 24660 24670 25147\nf 24661 25138 25140\nf 24661 25140 25142\nf 24661 25142 24662\nf 24662 25142 25143\nf 24662 25143 24663\nf 24663 25143 25144\nf 24663 25144 24664\nf 24664 25144 25145\nf 24664 25145 24665\nf 24665 25145 24666\nf 24666 24672 24671\nf 24666 25145 24672\nf 24667 24675 24677\nf 24667 24677 25155\nf 24667 25146 24669\nf 24667 25155 25146\nf 24668 24669 24670\nf 24669 25146 25148\nf 24669 25148 24670\nf 24670 25148 25147\nf 24671 24672 25151\nf 24671 25151 24673\nf 24672 25145 25149\nf 24672 25149 25151\nf 24673 25151 25152\nf 24673 25152 25153\nf 24673 25153 24674\nf 24674 25153 25154\nf 24674 25154 24676\nf 24675 24676 24677\nf 24676 25154 25156\nf 24676 25156 24677\nf 24677 25156 25155\nf 24678 24679 25157\nf 24678 24690 24688\nf 24678 25157 25163\nf 24678 25163 24690\nf 24679 24680 25157\nf 24680 24681 24693\nf 24680 24691 25157\nf 24680 24693 24691\nf 24681 24692 24693\nf 24682 24683 25158\nf 24682 24696 24695\nf 24682 25158 25170\nf 24682 25170 24696\nf 24683 24684 25158\nf 24684 24685 25159\nf 24684 25159 25158\nf 24685 24686 25160\nf 24685 25160 25159\nf 24686 24697 24698\nf 24686 24698 25160\nf 24687 24689 25161\nf 24687 25161 25174\nf 24687 25174 24700\nf 24688 24690 24689\nf 24689 24690 25164\nf 24689 25162 25161\nf 24689 25164 25162\nf 24690 25163 25164\nf 24691 24693 25167\nf 24691 25165 25157\nf 24691 25167 25165\nf 24692 24694 25168\nf 24692 25168 24693\nf 24693 25168 25167\nf 24694 24701 25169\nf 24694 25169 25168\nf 24695 24696 25177\nf 24695 25177 24703\nf 24696 25170 25171\nf 24696 25171 25177\nf 24697 24699 25173\nf 24697 25173 24698\nf 24698 25172 25160\nf 24698 25173 25172\nf 24699 24704 24705\nf 24699 24705 25178\nf 24699 25178 25173\nf 24700 25174 24706\nf 24701 24702 25176\nf 24701 25175 25169\nf 24701 25176 25175\nf 24702 24707 25176\nf 24703 25177 24708\nf 24704 24710 25185\nf 24704 25179 24705\nf 24704 25185 25179\nf 24705 25179 25178\nf 24706 25174 25180\nf 24706 25180 24711\nf 24707 24712 25187\nf 24707 25181 25176\nf 24707 25187 25181\nf 24708 25177 25183\nf 24708 25183 24709\nf 24709 25183 25184\nf 24709 25184 25188\nf 24709 25188 24713\nf 24710 24714 25190\nf 24710 25190 25185\nf 24711 25180 25186\nf 24711 25186 24716\nf 24712 24717 25194\nf 24712 25194 25187\nf 24713 25188 24718\nf 24714 24715 24720\nf 24714 24720 25197\nf 24714 25197 25190\nf 24715 24719 24720\nf 24716 25186 25191\nf 24716 25191 24721\nf 24717 24724 25199\nf 24717 25199 25194\nf 24718 25188 25195\nf 24718 25195 24726\nf 24719 24727 24728\nf 24719 24728 24720\nf 24720 24728 25197\nf 24721 24723 24722\nf 24721 25191 25192\nf 24721 25192 24723\nf 24722 24723 24729\nf 24723 25192 25198\nf 24723 25198 24729\nf 24724 24725 24731\nf 24724 24731 25204\nf 24724 25204 25199\nf 24725 24730 24731\nf 24726 25195 25200\nf 24726 25200 24732\nf 24727 24733 24734\nf 24727 24734 24728\nf 24728 24734 25202\nf 24728 25202 25197\nf 24729 25198 25203\nf 24729 25203 24735\nf 24730 24736 24737\nf 24730 24737 24731\nf 24731 24737 25204\nf 24732 25200 25205\nf 24732 25205 24738\nf 24733 24739 24740\nf 24733 24740 24734\nf 24734 24740 25207\nf 24734 25207 25202\nf 24735 25203 25208\nf 24735 25208 24741\nf 24736 24743 24745\nf 24736 24745 24737\nf 24737 24745 25209\nf 24737 25209 25204\nf 24738 25205 25210\nf 24738 25210 24746\nf 24739 24747 24748\nf 24739 24748 24740\nf 24740 24748 25211\nf 24740 25211 25207\nf 24741 25208 25212\nf 24741 25212 25216\nf 24741 25216 24742\nf 24742 24750 24749\nf 24742 25216 24750\nf 24743 24744 24745\nf 24744 24751 25213\nf 24744 25213 24745\nf 24745 25213 25209\nf 24746 25210 25214\nf 24746 25214 24752\nf 24747 24753 24754\nf 24747 24754 24748\nf 24748 24754 25215\nf 24748 25215 25211\nf 24749 24750 24757\nf 24750 24758 24757\nf 24750 25216 25223\nf 24750 25223 24758\nf 24751 24759 25225\nf 24751 25217 25213\nf 24751 25225 25217\nf 24752 25214 25218\nf 24752 25218 24760\nf 24753 24755 25221\nf 24753 25221 24754\nf 24754 25220 25215\nf 24754 25221 25220\nf 24755 24756 25222\nf 24755 25222 25221\nf 24756 24763 24764\nf 24756 24764 25222\nf 24757 24758 25231\nf 24757 25231 24767\nf 24758 25223 25224\nf 24758 25224 25231\nf 24759 24769 25233\nf 24759 25233 25225\nf 24760 24762 24761\nf 24760 25218 25219\nf 24760 25219 24762\nf 24761 24762 24770\nf 24762 25219 25226\nf 24762 25226 24770\nf 24763 24765 25229\nf 24763 25229 24764\nf 24764 25227 25222\nf 24764 25229 25227\nf 24765 24766 25230\nf 24765 25230 25229\nf 24766 24771 24772\nf 24766 24772 25230\nf 24767 25231 24768\nf 24768 25231 25232\nf 24768 25232 25318\nf 24768 25318 24854\nf 24769 24856 25320\nf 24769 25320 25233\nf 24770 25226 25234\nf 24770 25234 24857\nf 24771 24773 25236\nf 24771 25236 24772\nf 24772 25235 25230\nf 24772 25236 25235\nf 24773 24774 25237\nf 24773 25237 25236\nf 24774 24775 25238\nf 24774 25238 25237\nf 24775 24776 25239\nf 24775 25239 25238\nf 24776 24777 25240\nf 24776 25240 25239\nf 24777 24778 25241\nf 24777 25241 25240\nf 24778 24779 25242\nf 24778 25242 25241\nf 24779 24780 25243\nf 24779 25243 25242\nf 24780 24781 25244\nf 24780 25244 25243\nf 24781 24782 25245\nf 24781 25245 25244\nf 24782 24783 25246\nf 24782 25246 25245\nf 24783 24784 25247\nf 24783 25247 25246\nf 24784 24785 25248\nf 24784 25248 25247\nf 24785 24786 25249\nf 24785 25249 25248\nf 24786 24787 25250\nf 24786 25250 25249\nf 24787 24788 25251\nf 24787 25251 25250\nf 24788 24789 25252\nf 24788 25252 25251\nf 24789 24790 25253\nf 24789 25253 25252\nf 24790 24791 25254\nf 24790 25254 25253\nf 24791 24792 25255\nf 24791 25255 25254\nf 24792 24793 25256\nf 24792 25256 25255\nf 24793 24794 25257\nf 24793 25257 25256\nf 24794 24795 25258\nf 24794 25258 25257\nf 24795 24796 25259\nf 24795 25259 25258\nf 24796 24797 25260\nf 24796 25260 25259\nf 24797 24798 25261\nf 24797 25261 25260\nf 24798 24799 25262\nf 24798 25262 25261\nf 24799 24800 25263\nf 24799 25263 25262\nf 24800 24801 25264\nf 24800 25264 25263\nf 24801 24802 25265\nf 24801 25265 25264\nf 24802 24803 25266\nf 24802 25266 25265\nf 24803 24804 25267\nf 24803 25267 25266\nf 24804 24805 25268\nf 24804 25268 25267\nf 24805 24806 25269\nf 24805 25269 25268\nf 24806 24807 25270\nf 24806 25270 25269\nf 24807 24808 25271\nf 24807 25271 25270\nf 24808 24809 25272\nf 24808 25272 25271\nf 24809 24810 25273\nf 24809 25273 25272\nf 24810 24811 25274\nf 24810 25274 25273\nf 24811 24812 25275\nf 24811 25275 25274\nf 24812 24813 25276\nf 24812 25276 25275\nf 24813 24814 25277\nf 24813 25277 25276\nf 24814 24815 25278\nf 24814 25278 25277\nf 24815 24816 25279\nf 24815 25279 25278\nf 24816 24817 25280\nf 24816 25280 25279\nf 24817 24818 25281\nf 24817 25281 25280\nf 24818 24819 25282\nf 24818 25282 25281\nf 24819 24820 25283\nf 24819 25283 25282\nf 24820 24821 25284\nf 24820 25284 25283\nf 24821 24822 25285\nf 24821 25285 25284\nf 24822 24823 25286\nf 24822 25286 25285\nf 24823 24824 25287\nf 24823 25287 25286\nf 24824 24825 25288\nf 24824 25288 25287\nf 24825 24826 25289\nf 24825 25289 25288\nf 24826 24827 25290\nf 24826 25290 25289\nf 24827 24828 25291\nf 24827 25291 25290\nf 24828 24829 25292\nf 24828 25292 25291\nf 24829 24830 25293\nf 24829 25293 25292\nf 24830 24831 25294\nf 24830 25294 25293\nf 24831 24832 25295\nf 24831 25295 25294\nf 24832 24833 25296\nf 24832 25296 25295\nf 24833 24834 25297\nf 24833 25297 25296\nf 24834 24835 25298\nf 24834 25298 25297\nf 24835 24836 25299\nf 24835 25299 25298\nf 24836 24837 25300\nf 24836 25300 25299\nf 24837 24838 25301\nf 24837 25301 25300\nf 24838 24839 25302\nf 24838 25302 25301\nf 24839 24840 25303\nf 24839 25303 25302\nf 24840 24841 25304\nf 24840 25304 25303\nf 24841 24842 25305\nf 24841 25305 25304\nf 24842 24843 25306\nf 24842 25306 25305\nf 24843 24844 25307\nf 24843 25307 25306\nf 24844 24845 25308\nf 24844 25308 25307\nf 24845 24846 25309\nf 24845 25309 25308\nf 24846 24847 25310\nf 24846 25310 25309\nf 24847 24848 25311\nf 24847 25311 25310\nf 24848 24849 25312\nf 24848 25312 25311\nf 24849 24850 25313\nf 24849 25313 25312\nf 24850 24851 25314\nf 24850 25314 25313\nf 24851 24852 25315\nf 24851 25315 25314\nf 24852 24853 25316\nf 24852 25316 25315\nf 24853 24855 25317\nf 24853 25317 25316\nf 24854 25318 24855\nf 24855 25318 25319\nf 24855 25319 25317\nf 24856 24858 25322\nf 24856 25322 25320\nf 24857 25234 25321\nf 24857 25321 24859\nf 24858 24860 25325\nf 24858 25325 25322\nf 24859 25321 25323\nf 24859 25323 24862\nf 24860 24861 25325\nf 24861 24865 25328\nf 24861 25326 25325\nf 24861 25328 25326\nf 24862 24864 24863\nf 24862 25323 25324\nf 24862 25324 24864\nf 24863 24864 24866\nf 24864 25324 25327\nf 24864 25327 24866\nf 24865 24868 25331\nf 24865 25331 25328\nf 24866 25327 25329\nf 24866 25329 24870\nf 24867 24881 25344\nf 24867 25330 25332\nf 24867 25332 24869\nf 24867 25344 25330\nf 24868 24869 25331\nf 24869 25332 25331\nf 24870 25329 25333\nf 24870 25333 25334\nf 24870 25334 24871\nf 24871 25334 25335\nf 24871 25335 24872\nf 24872 25335 25336\nf 24872 25336 24873\nf 24873 25336 24883\nf 24874 24965 25428\nf 24874 25337 25338\nf 24874 25338 24875\nf 24874 25428 25337\nf 24875 25338 25339\nf 24875 25339 24876\nf 24876 25339 25340\nf 24876 25340 24877\nf 24877 25340 25341\nf 24877 25341 24878\nf 24878 25341 25342\nf 24878 25342 24879\nf 24879 25342 25343\nf 24879 25343 24880\nf 24880 25343 25345\nf 24880 25345 24882\nf 24881 24882 25344\nf 24882 25345 25344\nf 24883 25336 25346\nf 24883 25346 25347\nf 24883 25347 24884\nf 24884 25347 25348\nf 24884 25348 24885\nf 24885 25348 24967\nf 24886 24972 25435\nf 24886 25349 25350\nf 24886 25350 24887\nf 24886 25435 25349\nf 24887 25350 25351\nf 24887 25351 24888\nf 24888 25351 25352\nf 24888 25352 24889\nf 24889 25352 25353\nf 24889 25353 24890\nf 24890 25353 25354\nf 24890 25354 24891\nf 24891 25354 25355\nf 24891 25355 24892\nf 24892 25355 25356\nf 24892 25356 24893\nf 24893 25356 25357\nf 24893 25357 24894\nf 24894 25357 25358\nf 24894 25358 24895\nf 24895 25358 25359\nf 24895 25359 24896\nf 24896 25359 25360\nf 24896 25360 24897\nf 24897 25360 25361\nf 24897 25361 24898\nf 24898 25361 25362\nf 24898 25362 24899\nf 24899 25362 25363\nf 24899 25363 24900\nf 24900 25363 25364\nf 24900 25364 24901\nf 24901 25364 25365\nf 24901 25365 24902\nf 24902 25365 25366\nf 24902 25366 24903\nf 24903 25366 25367\nf 24903 25367 24904\nf 24904 25367 25368\nf 24904 25368 24905\nf 24905 25368 25369\nf 24905 25369 24906\nf 24906 25369 25370\nf 24906 25370 24907\nf 24907 25370 25371\nf 24907 25371 24908\nf 24908 25371 25372\nf 24908 25372 24909\nf 24909 25372 25373\nf 24909 25373 24910\nf 24910 25373 25374\nf 24910 25374 24911\nf 24911 25374 25375\nf 24911 25375 24912\nf 24912 25375 25376\nf 24912 25376 24913\nf 24913 25376 25377\nf 24913 25377 24914\nf 24914 25377 25378\nf 24914 25378 24915\nf 24915 25378 25379\nf 24915 25379 24916\nf 24916 25379 25380\nf 24916 25380 24917\nf 24917 25380 25381\nf 24917 25381 24918\nf 24918 25381 25382\nf 24918 25382 24919\nf 24919 25382 25383\nf 24919 25383 24920\nf 24920 25383 25384\nf 24920 25384 24921\nf 24921 25384 25385\nf 24921 25385 24922\nf 24922 25385 25386\nf 24922 25386 24923\nf 24923 25386 25387\nf 24923 25387 24924\nf 24924 25387 25388\nf 24924 25388 24925\nf 24925 25388 25389\nf 24925 25389 24926\nf 24926 25389 25390\nf 24926 25390 24927\nf 24927 25390 25391\nf 24927 25391 24928\nf 24928 25391 25392\nf 24928 25392 24929\nf 24929 25392 25393\nf 24929 25393 24930\nf 24930 25393 25394\nf 24930 25394 24931\nf 24931 25394 25395\nf 24931 25395 24932\nf 24932 25395 25396\nf 24932 25396 24933\nf 24933 25396 25397\nf 24933 25397 24934\nf 24934 25397 25398\nf 24934 25398 24935\nf 24935 25398 25399\nf 24935 25399 24936\nf 24936 25399 25400\nf 24936 25400 24937\nf 24937 25400 25401\nf 24937 25401 24938\nf 24938 25401 25402\nf 24938 25402 24939\nf 24939 25402 25403\nf 24939 25403 24940\nf 24940 25403 25404\nf 24940 25404 24941\nf 24941 25404 25405\nf 24941 25405 24942\nf 24942 25405 25406\nf 24942 25406 24943\nf 24943 25406 25407\nf 24943 25407 24944\nf 24944 25407 25408\nf 24944 25408 24945\nf 24945 25408 25409\nf 24945 25409 24946\nf 24946 25409 25410\nf 24946 25410 24947\nf 24947 25410 25411\nf 24947 25411 24948\nf 24948 25411 25412\nf 24948 25412 24949\nf 24949 25412 25413\nf 24949 25413 24950\nf 24950 25413 25414\nf 24950 25414 24951\nf 24951 25414 25415\nf 24951 25415 24952\nf 24952 25415 25416\nf 24952 25416 24953\nf 24953 25416 25417\nf 24953 25417 24954\nf 24954 25417 25418\nf 24954 25418 24955\nf 24955 25418 25419\nf 24955 25419 24956\nf 24956 25419 25420\nf 24956 25420 24957\nf 24957 25420 25421\nf 24957 25421 24958\nf 24958 25421 25422\nf 24958 25422 24959\nf 24959 25422 25423\nf 24959 25423 24960\nf 24960 25423 25424\nf 24960 25424 24961\nf 24961 25424 25425\nf 24961 25425 24962\nf 24962 25425 25426\nf 24962 25426 24963\nf 24963 25426 25427\nf 24963 25427 24964\nf 24964 25427 25429\nf 24964 25429 24966\nf 24965 24966 25428\nf 24966 25429 25428\nf 24967 25348 25430\nf 24967 25430 25431\nf 24967 25431 24968\nf 24968 25431 25432\nf 24968 25432 24969\nf 24969 25432 25433\nf 24969 25433 24970\nf 24970 25433 25434\nf 24970 25434 24971\nf 24971 25434 25436\nf 24971 25436 24973\nf 24972 24973 25435\nf 24973 25436 25435\nf 24974 24975 25437\nf 24974 25437 25441\nf 24974 25441 24978\nf 24975 24976 25438\nf 24975 25438 25437\nf 24976 24977 25439\nf 24976 25439 25438\nf 24977 24979 25440\nf 24977 25440 25439\nf 24978 25441 24981\nf 24979 24980 25443\nf 24979 25442 25440\nf 24979 25443 25442\nf 24980 24983 25443\nf 24981 25441 25444\nf 24981 25444 25447\nf 24981 25447 24982\nf 24982 24986 24985\nf 24982 25447 24986\nf 24983 24984 25446\nf 24983 25445 25443\nf 24983 25446 25445\nf 24984 24987 25446\nf 24985 24986 25451\nf 24985 25451 24989\nf 24986 25447 25448\nf 24986 25448 25451\nf 24987 24988 25450\nf 24987 25449 25446\nf 24987 25450 25449\nf 24988 24990 25450\nf 24989 25451 24991\nf 24990 24992 25454\nf 24990 25452 25450\nf 24990 25454 25452\nf 24991 25451 25453\nf 24991 25453 24993\nf 24992 24994 25456\nf 24992 25456 25454\nf 24993 25453 25455\nf 24993 25455 24995\nf 24994 24996 25458\nf 24994 25458 25456\nf 24995 25455 25457\nf 24995 25457 24997\nf 24996 24998 25460\nf 24996 25460 25458\nf 24997 25457 25459\nf 24997 25459 24999\nf 24998 25000 25462\nf 24998 25462 25460\nf 24999 25459 25461\nf 24999 25461 25001\nf 25000 25002 25464\nf 25000 25464 25462\nf 25001 25461 25463\nf 25001 25463 25003\nf 25002 25004 25466\nf 25002 25466 25464\nf 25003 25463 25465\nf 25003 25465 25005\nf 25004 25006 25468\nf 25004 25468 25466\nf 25005 25465 25467\nf 25005 25467 25007\nf 25006 25008 25470\nf 25006 25470 25468\nf 25007 25467 25469\nf 25007 25469 25009\nf 25008 25010 25472\nf 25008 25472 25470\nf 25009 25469 25471\nf 25009 25471 25011\nf 25010 25013 25475\nf 25010 25475 25472\nf 25011 25471 25473\nf 25011 25473 25474\nf 25011 25474 25012\nf 25012 25474 25014\nf 25013 25015 25477\nf 25013 25477 25475\nf 25014 25474 25476\nf 25014 25476 25016\nf 25015 25017 25479\nf 25015 25479 25477\nf 25016 25476 25478\nf 25016 25478 25019\nf 25017 25018 25479\nf 25018 25021 25483\nf 25018 25480 25479\nf 25018 25483 25480\nf 25019 25024 25020\nf 25019 25478 25482\nf 25019 25482 25485\nf 25019 25485 25024\nf 25020 25024 25023\nf 25021 25022 25483\nf 25022 25025 25487\nf 25022 25484 25483\nf 25022 25487 25484\nf 25023 25024 25486\nf 25023 25486 25488\nf 25023 25488 25026\nf 25024 25485 25486\nf 25025 25027 25491\nf 25025 25491 25487\nf 25026 25488 25029\nf 25027 25028 25491\nf 25028 25033 25035\nf 25028 25035 25490\nf 25028 25490 25492\nf 25028 25492 25491\nf 25029 25031 25030\nf 25029 25488 25489\nf 25029 25489 25031\nf 25030 25031 25496\nf 25030 25496 25032\nf 25031 25489 25493\nf 25031 25493 25496\nf 25032 25496 25034\nf 25033 25034 25035\nf 25034 25495 25035\nf 25034 25496 25495\nf 25035 25495 25490\nf 25036 25037 25042\nf 25036 25040 25038\nf 25036 25042 25040\nf 25037 25041 25042\nf 25038 25040 25039\nf 25039 25040 25497\nf 25039 25044 25043\nf 25039 25497 25044\nf 25040 25042 25497\nf 25041 25045 25501\nf 25041 25498 25042\nf 25041 25501 25498\nf 25042 25498 25497\nf 25043 25044 25504\nf 25043 25504 25047\nf 25044 25497 25499\nf 25044 25499 25500\nf 25044 25500 25504\nf 25045 25046 25503\nf 25045 25503 25501\nf 25046 25049 25503\nf 25047 25504 25507\nf 25047 25507 25048\nf 25048 25051 25050\nf 25048 25507 25051\nf 25049 25052 25509\nf 25049 25505 25503\nf 25049 25509 25505\nf 25050 25051 25510\nf 25050 25510 25053\nf 25051 25507 25508\nf 25051 25508 25510\nf 25052 25054 25511\nf 25052 25511 25509\nf 25053 25510 25055\nf 25054 25057 25513\nf 25054 25513 25511\nf 25055 25510 25512\nf 25055 25512 25515\nf 25055 25515 25056\nf 25056 25060 25059\nf 25056 25515 25060\nf 25057 25058 25514\nf 25057 25514 25513\nf 25058 25061 25514\nf 25059 25060 25519\nf 25059 25519 25062\nf 25060 25515 25516\nf 25060 25516 25519\nf 25061 25063 25521\nf 25061 25517 25514\nf 25061 25521 25517\nf 25062 25519 25064\nf 25063 25065 25524\nf 25063 25524 25521\nf 25064 25519 25522\nf 25064 25522 25066\nf 25065 25068 25526\nf 25065 25526 25524\nf 25066 25067 25069\nf 25066 25522 25523\nf 25066 25523 25067\nf 25067 25071 25069\nf 25067 25523 25525\nf 25067 25525 25527\nf 25067 25527 25071\nf 25068 25072 25528\nf 25068 25528 25526\nf 25069 25071 25070\nf 25070 25071 25073\nf 25071 25527 25073\nf 25072 25074 25530\nf 25072 25530 25528\nf 25073 25527 25529\nf 25073 25529 25076\nf 25074 25075 25530\nf 25075 25077 25533\nf 25075 25531 25530\nf 25075 25533 25531\nf 25076 25529 25532\nf 25076 25532 25078\nf 25077 25079 25535\nf 25077 25535 25533\nf 25078 25532 25534\nf 25078 25534 25080\nf 25079 25081 25537\nf 25079 25537 25535\nf 25080 25534 25536\nf 25080 25536 25082\nf 25081 25083 25537\nf 25082 25536 25539\nf 25082 25539 25086\nf 25083 25084 25085\nf 25083 25085 25537\nf 25084 25087 25540\nf 25084 25540 25085\nf 25085 25538 25537\nf 25085 25540 25538\nf 25086 25539 25541\nf 25086 25541 25088\nf 25087 25090 25542\nf 25087 25542 25540\nf 25088 25541 25544\nf 25088 25544 25545\nf 25088 25545 25089\nf 25089 25545 25093\nf 25090 25091 25092\nf 25090 25092 25542\nf 25091 25095 25097\nf 25091 25097 25548\nf 25091 25548 25092\nf 25092 25543 25542\nf 25092 25547 25543\nf 25092 25548 25547\nf 25093 25545 25549\nf 25093 25549 25551\nf 25093 25551 25094\nf 25094 25551 25096\nf 25095 25096 25097\nf 25096 25550 25097\nf 25096 25551 25550\nf 25097 25550 25548\nf 25098 25099 25553\nf 25098 25553 25562\nf 25098 25562 25106\nf 25099 25100 25554\nf 25099 25554 25553\nf 25100 25101 25555\nf 25100 25555 25554\nf 25101 25102 25556\nf 25101 25556 25555\nf 25102 25103 25557\nf 25102 25557 25556\nf 25103 25104 25558\nf 25103 25558 25557\nf 25104 25105 25559\nf 25104 25559 25558\nf 25105 25108 25561\nf 25105 25560 25559\nf 25105 25561 25560\nf 25106 25562 25107\nf 25107 25562 25563\nf 25107 25563 25569\nf 25107 25569 25114\nf 25108 25109 25110\nf 25108 25110 25561\nf 25109 25111 25566\nf 25109 25566 25110\nf 25110 25565 25561\nf 25110 25566 25565\nf 25111 25112 25566\nf 25112 25113 25567\nf 25112 25567 25566\nf 25113 25116 25568\nf 25113 25568 25567\nf 25114 25569 25570\nf 25114 25570 25115\nf 25115 25570 25118\nf 25116 25117 25572\nf 25116 25571 25568\nf 25116 25572 25571\nf 25117 25119 25572\nf 25118 25570 25573\nf 25118 25573 25122\nf 25119 25120 25576\nf 25119 25575 25572\nf 25119 25576 25575\nf 25120 25121 25576\nf 25121 25124 25578\nf 25121 25578 25576\nf 25122 25127 25123\nf 25122 25573 25579\nf 25122 25579 25582\nf 25122 25582 25127\nf 25123 25127 25126\nf 25124 25125 25581\nf 25124 25580 25578\nf 25124 25581 25580\nf 25125 25128 25581\nf 25126 25127 25583\nf 25126 25583 25586\nf 25126 25586 25130\nf 25127 25582 25583\nf 25128 25129 25585\nf 25128 25584 25581\nf 25128 25585 25584\nf 25129 25134 25585\nf 25130 25586 25587\nf 25130 25587 25131\nf 25131 25587 25588\nf 25131 25588 25132\nf 25132 25588 25133\nf 25133 25136 25135\nf 25133 25588 25136\nf 25134 25139 25593\nf 25134 25589 25585\nf 25134 25593 25589\nf 25135 25136 25591\nf 25135 25591 25137\nf 25136 25588 25590\nf 25136 25590 25591\nf 25137 25591 25592\nf 25137 25592 25138\nf 25138 25141 25140\nf 25138 25592 25141\nf 25139 25147 25601\nf 25139 25601 25593\nf 25140 25141 25596\nf 25140 25596 25142\nf 25141 25592 25595\nf 25141 25595 25596\nf 25142 25596 25597\nf 25142 25597 25598\nf 25142 25598 25143\nf 25143 25598 25599\nf 25143 25599 25144\nf 25144 25599 25145\nf 25145 25150 25149\nf 25145 25599 25150\nf 25146 25155 25610\nf 25146 25600 25602\nf 25146 25602 25148\nf 25146 25610 25600\nf 25147 25148 25601\nf 25148 25602 25601\nf 25149 25150 25605\nf 25149 25605 25151\nf 25150 25599 25603\nf 25150 25603 25605\nf 25151 25605 25606\nf 25151 25606 25607\nf 25151 25607 25152\nf 25152 25607 25608\nf 25152 25608 25153\nf 25153 25608 25609\nf 25153 25609 25154\nf 25154 25609 25611\nf 25154 25611 25156\nf 25155 25156 25610\nf 25156 25611 25610\nf 25157 25165 25166\nf 25157 25166 25163\nf 25158 25159 25612\nf 25158 25612 25622\nf 25158 25622 25170\nf 25159 25160 25613\nf 25159 25613 25612\nf 25160 25172 25614\nf 25160 25614 25613\nf 25161 25162 25615\nf 25161 25615 25628\nf 25161 25628 25174\nf 25162 25164 25616\nf 25162 25616 25615\nf 25163 25166 25164\nf 25164 25166 25618\nf 25164 25617 25616\nf 25164 25618 25617\nf 25165 25167 25618\nf 25165 25618 25166\nf 25167 25168 25619\nf 25167 25619 25618\nf 25168 25169 25620\nf 25168 25620 25619\nf 25169 25175 25621\nf 25169 25621 25620\nf 25170 25622 25171\nf 25171 25622 25623\nf 25171 25623 25631\nf 25171 25631 25177\nf 25172 25173 25627\nf 25172 25625 25614\nf 25172 25627 25625\nf 25173 25178 25627\nf 25174 25628 25180\nf 25175 25176 25182\nf 25175 25182 25637\nf 25175 25630 25621\nf 25175 25637 25630\nf 25176 25181 25182\nf 25177 25631 25183\nf 25178 25179 25634\nf 25178 25633 25627\nf 25178 25634 25633\nf 25179 25185 25634\nf 25180 25628 25635\nf 25180 25635 25186\nf 25181 25187 25645\nf 25181 25638 25182\nf 25181 25645 25638\nf 25182 25638 25637\nf 25183 25631 25639\nf 25183 25639 25647\nf 25183 25647 25184\nf 25184 25189 25188\nf 25184 25647 25189\nf 25185 25190 25648\nf 25185 25640 25634\nf 25185 25648 25640\nf 25186 25635 25642\nf 25186 25642 25191\nf 25187 25194 25650\nf 25187 25650 25645\nf 25188 25189 25195\nf 25189 25196 25195\nf 25189 25647 25651\nf 25189 25651 25196\nf 25190 25197 25652\nf 25190 25652 25648\nf 25191 25193 25192\nf 25191 25642 25643\nf 25191 25643 25193\nf 25192 25193 25198\nf 25193 25643 25649\nf 25193 25649 25198\nf 25194 25199 25654\nf 25194 25654 25650\nf 25195 25196 25200\nf 25196 25201 25200\nf 25196 25651 25655\nf 25196 25655 25201\nf 25197 25202 25656\nf 25197 25656 25652\nf 25198 25649 25653\nf 25198 25653 25203\nf 25199 25204 25658\nf 25199 25658 25654\nf 25200 25201 25205\nf 25201 25206 25205\nf 25201 25655 25659\nf 25201 25659 25206\nf 25202 25207 25661\nf 25202 25661 25656\nf 25203 25653 25657\nf 25203 25657 25208\nf 25204 25209 25663\nf 25204 25663 25658\nf 25205 25206 25664\nf 25205 25664 25210\nf 25206 25659 25660\nf 25206 25660 25664\nf 25207 25211 25665\nf 25207 25665 25661\nf 25208 25657 25662\nf 25208 25662 25212\nf 25209 25213 25667\nf 25209 25667 25663\nf 25210 25664 25214\nf 25211 25215 25669\nf 25211 25669 25665\nf 25212 25662 25666\nf 25212 25666 25216\nf 25213 25217 25671\nf 25213 25671 25667\nf 25214 25664 25668\nf 25214 25668 25218\nf 25215 25220 25675\nf 25215 25675 25669\nf 25216 25666 25670\nf 25216 25670 25223\nf 25217 25225 25679\nf 25217 25679 25671\nf 25218 25668 25672\nf 25218 25672 25673\nf 25218 25673 25219\nf 25219 25673 25226\nf 25220 25221 25676\nf 25220 25676 25675\nf 25221 25222 25676\nf 25222 25227 25228\nf 25222 25228 25676\nf 25223 25670 25677\nf 25223 25677 25224\nf 25224 25677 25678\nf 25224 25678 25686\nf 25224 25686 25231\nf 25225 25233 25688\nf 25225 25688 25679\nf 25226 25673 25680\nf 25226 25680 25234\nf 25227 25229 25683\nf 25227 25683 25228\nf 25228 25681 25676\nf 25228 25683 25681\nf 25229 25230 25684\nf 25229 25684 25683\nf 25230 25235 25685\nf 25230 25685 25684\nf 25231 25686 25232\nf 25232 25686 25687\nf 25232 25687 25774\nf 25232 25774 25318\nf 25233 25320 25776\nf 25233 25776 25688\nf 25234 25680 25689\nf 25234 25689 25321\nf 25235 25236 25692\nf 25235 25690 25685\nf 25235 25692 25690\nf 25236 25237 25692\nf 25237 25238 25693\nf 25237 25693 25692\nf 25238 25239 25694\nf 25238 25694 25693\nf 25239 25240 25695\nf 25239 25695 25694\nf 25240 25241 25696\nf 25240 25696 25695\nf 25241 25242 25697\nf 25241 25697 25696\nf 25242 25243 25698\nf 25242 25698 25697\nf 25243 25244 25699\nf 25243 25699 25698\nf 25244 25245 25700\nf 25244 25700 25699\nf 25245 25246 25701\nf 25245 25701 25700\nf 25246 25247 25702\nf 25246 25702 25701\nf 25247 25248 25703\nf 25247 25703 25702\nf 25248 25249 25704\nf 25248 25704 25703\nf 25249 25250 25705\nf 25249 25705 25704\nf 25250 25251 25706\nf 25250 25706 25705\nf 25251 25252 25707\nf 25251 25707 25706\nf 25252 25253 25708\nf 25252 25708 25707\nf 25253 25254 25709\nf 25253 25709 25708\nf 25254 25255 25710\nf 25254 25710 25709\nf 25255 25256 25711\nf 25255 25711 25710\nf 25256 25257 25712\nf 25256 25712 25711\nf 25257 25258 25713\nf 25257 25713 25712\nf 25258 25259 25714\nf 25258 25714 25713\nf 25259 25260 25715\nf 25259 25715 25714\nf 25260 25261 25716\nf 25260 25716 25715\nf 25261 25262 25717\nf 25261 25717 25716\nf 25262 25263 25718\nf 25262 25718 25717\nf 25263 25264 25719\nf 25263 25719 25718\nf 25264 25265 25720\nf 25264 25720 25719\nf 25265 25266 25721\nf 25265 25721 25720\nf 25266 25267 25722\nf 25266 25722 25721\nf 25267 25268 25723\nf 25267 25723 25722\nf 25268 25269 25724\nf 25268 25724 25723\nf 25269 25270 25725\nf 25269 25725 25724\nf 25270 25271 25726\nf 25270 25726 25725\nf 25271 25272 25727\nf 25271 25727 25726\nf 25272 25273 25728\nf 25272 25728 25727\nf 25273 25274 25729\nf 25273 25729 25728\nf 25274 25275 25730\nf 25274 25730 25729\nf 25275 25276 25731\nf 25275 25731 25730\nf 25276 25277 25732\nf 25276 25732 25731\nf 25277 25278 25733\nf 25277 25733 25732\nf 25278 25279 25734\nf 25278 25734 25733\nf 25279 25280 25735\nf 25279 25735 25734\nf 25280 25281 25736\nf 25280 25736 25735\nf 25281 25282 25737\nf 25281 25737 25736\nf 25282 25283 25738\nf 25282 25738 25737\nf 25283 25284 25739\nf 25283 25739 25738\nf 25284 25285 25740\nf 25284 25740 25739\nf 25285 25286 25741\nf 25285 25741 25740\nf 25286 25287 25742\nf 25286 25742 25741\nf 25287 25288 25743\nf 25287 25743 25742\nf 25288 25289 25744\nf 25288 25744 25743\nf 25289 25290 25745\nf 25289 25745 25744\nf 25290 25291 25746\nf 25290 25746 25745\nf 25291 25292 25747\nf 25291 25747 25746\nf 25292 25293 25748\nf 25292 25748 25747\nf 25293 25294 25749\nf 25293 25749 25748\nf 25294 25295 25750\nf 25294 25750 25749\nf 25295 25296 25751\nf 25295 25751 25750\nf 25296 25297 25752\nf 25296 25752 25751\nf 25297 25298 25753\nf 25297 25753 25752\nf 25298 25299 25754\nf 25298 25754 25753\nf 25299 25300 25755\nf 25299 25755 25754\nf 25300 25301 25756\nf 25300 25756 25755\nf 25301 25302 25757\nf 25301 25757 25756\nf 25302 25303 25758\nf 25302 25758 25757\nf 25303 25304 25759\nf 25303 25759 25758\nf 25304 25305 25760\nf 25304 25760 25759\nf 25305 25306 25761\nf 25305 25761 25760\nf 25306 25307 25762\nf 25306 25762 25761\nf 25307 25308 25763\nf 25307 25763 25762\nf 25308 25309 25764\nf 25308 25764 25763\nf 25309 25310 25765\nf 25309 25765 25764\nf 25310 25311 25766\nf 25310 25766 25765\nf 25311 25312 25767\nf 25311 25767 25766\nf 25312 25313 25768\nf 25312 25768 25767\nf 25313 25314 25769\nf 25313 25769 25768\nf 25314 25315 25770\nf 25314 25770 25769\nf 25315 25316 25771\nf 25315 25771 25770\nf 25316 25317 25772\nf 25316 25772 25771\nf 25317 25319 25773\nf 25317 25773 25772\nf 25318 25774 25319\nf 25319 25774 25775\nf 25319 25775 25773\nf 25320 25322 25778\nf 25320 25778 25776\nf 25321 25689 25777\nf 25321 25777 25323\nf 25322 25325 25781\nf 25322 25781 25778\nf 25323 25777 25779\nf 25323 25779 25780\nf 25323 25780 25324\nf 25324 25780 25327\nf 25325 25326 25781\nf 25326 25328 25784\nf 25326 25782 25781\nf 25326 25784 25782\nf 25327 25780 25783\nf 25327 25783 25329\nf 25328 25331 25787\nf 25328 25787 25784\nf 25329 25783 25785\nf 25329 25785 25333\nf 25330 25344 25800\nf 25330 25786 25788\nf 25330 25788 25332\nf 25330 25800 25786\nf 25331 25332 25787\nf 25332 25788 25787\nf 25333 25785 25789\nf 25333 25789 25790\nf 25333 25790 25334\nf 25334 25790 25791\nf 25334 25791 25335\nf 25335 25791 25792\nf 25335 25792 25336\nf 25336 25792 25346\nf 25337 25428 25884\nf 25337 25793 25794\nf 25337 25794 25338\nf 25337 25884 25793\nf 25338 25794 25795\nf 25338 25795 25339\nf 25339 25795 25796\nf 25339 25796 25340\nf 25340 25796 25797\nf 25340 25797 25341\nf 25341 25797 25798\nf 25341 25798 25342\nf 25342 25798 25799\nf 25342 25799 25343\nf 25343 25799 25801\nf 25343 25801 25345\nf 25344 25345 25800\nf 25345 25801 25800\nf 25346 25792 25802\nf 25346 25802 25803\nf 25346 25803 25347\nf 25347 25803 25804\nf 25347 25804 25348\nf 25348 25804 25430\nf 25349 25435 25892\nf 25349 25805 25806\nf 25349 25806 25350\nf 25349 25892 25805\nf 25350 25806 25807\nf 25350 25807 25351\nf 25351 25807 25808\nf 25351 25808 25352\nf 25352 25808 25809\nf 25352 25809 25353\nf 25353 25809 25810\nf 25353 25810 25354\nf 25354 25810 25811\nf 25354 25811 25355\nf 25355 25811 25812\nf 25355 25812 25356\nf 25356 25812 25813\nf 25356 25813 25357\nf 25357 25813 25814\nf 25357 25814 25358\nf 25358 25814 25815\nf 25358 25815 25359\nf 25359 25815 25816\nf 25359 25816 25360\nf 25360 25816 25817\nf 25360 25817 25361\nf 25361 25817 25818\nf 25361 25818 25362\nf 25362 25818 25819\nf 25362 25819 25363\nf 25363 25819 25820\nf 25363 25820 25364\nf 25364 25820 25821\nf 25364 25821 25365\nf 25365 25821 25822\nf 25365 25822 25366\nf 25366 25822 25823\nf 25366 25823 25367\nf 25367 25823 25824\nf 25367 25824 25368\nf 25368 25824 25825\nf 25368 25825 25369\nf 25369 25825 25826\nf 25369 25826 25370\nf 25370 25826 25827\nf 25370 25827 25371\nf 25371 25827 25828\nf 25371 25828 25372\nf 25372 25828 25829\nf 25372 25829 25373\nf 25373 25829 25830\nf 25373 25830 25374\nf 25374 25830 25831\nf 25374 25831 25375\nf 25375 25831 25832\nf 25375 25832 25376\nf 25376 25832 25833\nf 25376 25833 25377\nf 25377 25833 25834\nf 25377 25834 25378\nf 25378 25834 25835\nf 25378 25835 25379\nf 25379 25835 25836\nf 25379 25836 25380\nf 25380 25836 25837\nf 25380 25837 25381\nf 25381 25837 25838\nf 25381 25838 25382\nf 25382 25838 25839\nf 25382 25839 25383\nf 25383 25839 25840\nf 25383 25840 25384\nf 25384 25840 25841\nf 25384 25841 25385\nf 25385 25841 25842\nf 25385 25842 25386\nf 25386 25842 25843\nf 25386 25843 25387\nf 25387 25843 25844\nf 25387 25844 25388\nf 25388 25844 25845\nf 25388 25845 25389\nf 25389 25845 25846\nf 25389 25846 25390\nf 25390 25846 25847\nf 25390 25847 25391\nf 25391 25847 25848\nf 25391 25848 25392\nf 25392 25848 25849\nf 25392 25849 25393\nf 25393 25849 25850\nf 25393 25850 25394\nf 25394 25850 25851\nf 25394 25851 25395\nf 25395 25851 25852\nf 25395 25852 25396\nf 25396 25852 25853\nf 25396 25853 25397\nf 25397 25853 25854\nf 25397 25854 25398\nf 25398 25854 25855\nf 25398 25855 25399\nf 25399 25855 25856\nf 25399 25856 25400\nf 25400 25856 25857\nf 25400 25857 25401\nf 25401 25857 25858\nf 25401 25858 25402\nf 25402 25858 25859\nf 25402 25859 25403\nf 25403 25859 25860\nf 25403 25860 25404\nf 25404 25860 25861\nf 25404 25861 25405\nf 25405 25861 25862\nf 25405 25862 25406\nf 25406 25862 25863\nf 25406 25863 25407\nf 25407 25863 25864\nf 25407 25864 25408\nf 25408 25864 25865\nf 25408 25865 25409\nf 25409 25865 25866\nf 25409 25866 25410\nf 25410 25866 25867\nf 25410 25867 25411\nf 25411 25867 25868\nf 25411 25868 25412\nf 25412 25868 25869\nf 25412 25869 25413\nf 25413 25869 25870\nf 25413 25870 25414\nf 25414 25870 25871\nf 25414 25871 25415\nf 25415 25871 25872\nf 25415 25872 25416\nf 25416 25872 25873\nf 25416 25873 25417\nf 25417 25873 25874\nf 25417 25874 25418\nf 25418 25874 25875\nf 25418 25875 25419\nf 25419 25875 25876\nf 25419 25876 25420\nf 25420 25876 25877\nf 25420 25877 25421\nf 25421 25877 25878\nf 25421 25878 25422\nf 25422 25878 25879\nf 25422 25879 25423\nf 25423 25879 25880\nf 25423 25880 25424\nf 25424 25880 25881\nf 25424 25881 25425\nf 25425 25881 25882\nf 25425 25882 25426\nf 25426 25882 25883\nf 25426 25883 25427\nf 25427 25883 25885\nf 25427 25885 25429\nf 25428 25429 25884\nf 25429 25885 25884\nf 25430 25804 25887\nf 25430 25887 25888\nf 25430 25888 25431\nf 25431 25888 25889\nf 25431 25889 25432\nf 25432 25889 25890\nf 25432 25890 25433\nf 25433 25890 25891\nf 25433 25891 25434\nf 25434 25891 25893\nf 25434 25893 25436\nf 25435 25436 25892\nf 25436 25893 25892\nf 25437 25438 25894\nf 25437 25894 25898\nf 25437 25898 25441\nf 25438 25439 25895\nf 25438 25895 25894\nf 25439 25440 25896\nf 25439 25896 25895\nf 25440 25442 25897\nf 25440 25897 25896\nf 25441 25898 25444\nf 25442 25443 25900\nf 25442 25899 25897\nf 25442 25900 25899\nf 25443 25445 25900\nf 25444 25898 25901\nf 25444 25901 25447\nf 25445 25446 25903\nf 25445 25902 25900\nf 25445 25903 25902\nf 25446 25449 25903\nf 25447 25901 25904\nf 25447 25904 25448\nf 25448 25904 25905\nf 25448 25905 25908\nf 25448 25908 25451\nf 25449 25450 25907\nf 25449 25906 25903\nf 25449 25907 25906\nf 25450 25452 25907\nf 25451 25908 25453\nf 25452 25454 25912\nf 25452 25909 25907\nf 25452 25912 25909\nf 25453 25908 25911\nf 25453 25911 25455\nf 25454 25456 25914\nf 25454 25914 25912\nf 25455 25911 25913\nf 25455 25913 25457\nf 25456 25458 25916\nf 25456 25916 25914\nf 25457 25913 25915\nf 25457 25915 25459\nf 25458 25460 25918\nf 25458 25918 25916\nf 25459 25915 25917\nf 25459 25917 25461\nf 25460 25462 25920\nf 25460 25920 25918\nf 25461 25917 25919\nf 25461 25919 25463\nf 25462 25464 25922\nf 25462 25922 25920\nf 25463 25919 25921\nf 25463 25921 25465\nf 25464 25466 25924\nf 25464 25924 25922\nf 25465 25921 25923\nf 25465 25923 25467\nf 25466 25468 25926\nf 25466 25926 25924\nf 25467 25923 25925\nf 25467 25925 25469\nf 25468 25470 25928\nf 25468 25928 25926\nf 25469 25925 25927\nf 25469 25927 25471\nf 25470 25472 25930\nf 25470 25930 25928\nf 25471 25927 25929\nf 25471 25929 25473\nf 25472 25475 25933\nf 25472 25933 25930\nf 25473 25929 25931\nf 25473 25931 25932\nf 25473 25932 25474\nf 25474 25932 25476\nf 25475 25477 25935\nf 25475 25935 25933\nf 25476 25932 25934\nf 25476 25934 25478\nf 25477 25479 25935\nf 25478 25934 25937\nf 25478 25937 25482\nf 25479 25480 25481\nf 25479 25481 25935\nf 25480 25483 25938\nf 25480 25938 25481\nf 25481 25936 25935\nf 25481 25938 25936\nf 25482 25937 25939\nf 25482 25939 25485\nf 25483 25484 25940\nf 25483 25940 25938\nf 25484 25487 25945\nf 25484 25941 25940\nf 25484 25945 25941\nf 25485 25939 25942\nf 25485 25942 25943\nf 25485 25943 25486\nf 25486 25943 25488\nf 25487 25491 25948\nf 25487 25948 25945\nf 25488 25494 25489\nf 25488 25943 25946\nf 25488 25946 25951\nf 25488 25951 25494\nf 25489 25494 25493\nf 25490 25495 25953\nf 25490 25947 25949\nf 25490 25949 25492\nf 25490 25953 25947\nf 25491 25492 25948\nf 25492 25949 25948\nf 25493 25494 25952\nf 25493 25952 25496\nf 25494 25951 25952\nf 25495 25496 25953\nf 25496 25952 25954\nf 25496 25954 25953\nf 25497 25498 25955\nf 25497 25955 25956\nf 25497 25956 25499\nf 25498 25501 25502\nf 25498 25502 25955\nf 25499 25956 25500\nf 25500 25956 25957\nf 25500 25957 25961\nf 25500 25961 25504\nf 25501 25503 25960\nf 25501 25960 25502\nf 25502 25958 25955\nf 25502 25960 25958\nf 25503 25505 25506\nf 25503 25506 25963\nf 25503 25963 25960\nf 25504 25961 25507\nf 25505 25509 25967\nf 25505 25964 25506\nf 25505 25967 25964\nf 25506 25964 25963\nf 25507 25961 25965\nf 25507 25965 25508\nf 25508 25965 25966\nf 25508 25966 25968\nf 25508 25968 25510\nf 25509 25511 25969\nf 25509 25969 25967\nf 25510 25968 25512\nf 25511 25513 25971\nf 25511 25971 25969\nf 25512 25968 25970\nf 25512 25970 25515\nf 25513 25514 25518\nf 25513 25518 25973\nf 25513 25973 25971\nf 25514 25517 25518\nf 25515 25970 25972\nf 25515 25972 25975\nf 25515 25975 25516\nf 25516 25520 25519\nf 25516 25975 25520\nf 25517 25521 25977\nf 25517 25974 25518\nf 25517 25977 25974\nf 25518 25974 25973\nf 25519 25520 25979\nf 25519 25979 25522\nf 25520 25975 25976\nf 25520 25976 25979\nf 25521 25524 25981\nf 25521 25981 25977\nf 25522 25979 25980\nf 25522 25980 25523\nf 25523 25980 25525\nf 25524 25526 25983\nf 25524 25983 25981\nf 25525 25980 25982\nf 25525 25982 25527\nf 25526 25528 25985\nf 25526 25985 25983\nf 25527 25982 25984\nf 25527 25984 25529\nf 25528 25530 25987\nf 25528 25987 25985\nf 25529 25984 25986\nf 25529 25986 25532\nf 25530 25531 25987\nf 25531 25533 25990\nf 25531 25988 25987\nf 25531 25990 25988\nf 25532 25986 25989\nf 25532 25989 25534\nf 25533 25535 25992\nf 25533 25992 25990\nf 25534 25989 25991\nf 25534 25991 25536\nf 25535 25537 25994\nf 25535 25994 25992\nf 25536 25991 25993\nf 25536 25993 25539\nf 25537 25538 25994\nf 25538 25540 25997\nf 25538 25995 25994\nf 25538 25997 25995\nf 25539 25993 25996\nf 25539 25996 25541\nf 25540 25542 26000\nf 25540 26000 25997\nf 25541 25996 25998\nf 25541 25998 25544\nf 25542 25543 26000\nf 25543 25547 26003\nf 25543 26001 26000\nf 25543 26003 26001\nf 25544 25546 25545\nf 25544 25998 25999\nf 25544 25999 25546\nf 25545 25546 25549\nf 25546 25999 26002\nf 25546 26002 25549\nf 25547 25548 26007\nf 25547 26007 26003\nf 25548 25550 25552\nf 25548 25552 26007\nf 25549 26002 26005\nf 25549 26005 26006\nf 25549 26006 25551\nf 25550 25551 25552\nf 25551 26006 26008\nf 25551 26008 25552\nf 25552 26008 26007\nf 25553 25554 26010\nf 25553 25564 25562\nf 25553 26009 25564\nf 25553 26010 26009\nf 25554 25555 26011\nf 25554 26011 26010\nf 25555 25556 26012\nf 25555 26012 26011\nf 25556 25557 26013\nf 25556 26013 26012\nf 25557 25558 26014\nf 25557 26014 26013\nf 25558 25559 26015\nf 25558 26015 26014\nf 25559 25560 26016\nf 25559 26016 26015\nf 25560 25561 26017\nf 25560 26017 26016\nf 25561 25565 26018\nf 25561 26018 26017\nf 25562 25564 25563\nf 25563 25564 26019\nf 25563 26019 25569\nf 25564 26009 26019\nf 25565 25566 26021\nf 25565 26020 26018\nf 25565 26021 26020\nf 25566 25567 26021\nf 25567 25568 26022\nf 25567 26022 26021\nf 25568 25571 26023\nf 25568 26023 26022\nf 25569 25574 25570\nf 25569 26019 26024\nf 25569 26024 26028\nf 25569 26028 25574\nf 25570 25574 25573\nf 25571 25572 26026\nf 25571 26025 26023\nf 25571 26026 26025\nf 25572 25575 26027\nf 25572 26027 26026\nf 25573 25574 26029\nf 25573 26029 26032\nf 25573 26032 25579\nf 25574 26028 26029\nf 25575 25576 25577\nf 25575 25577 26027\nf 25576 25578 26031\nf 25576 26031 25577\nf 25577 26030 26027\nf 25577 26031 26030\nf 25578 25580 26031\nf 25579 26032 25582\nf 25580 25581 26034\nf 25580 26033 26031\nf 25580 26034 26033\nf 25581 25584 26034\nf 25582 26032 26035\nf 25582 26035 26036\nf 25582 26036 25583\nf 25583 26036 25586\nf 25584 25585 26038\nf 25584 26037 26034\nf 25584 26038 26037\nf 25585 25589 26038\nf 25586 26036 26040\nf 25586 26040 26041\nf 25586 26041 25587\nf 25587 26041 26042\nf 25587 26042 25588\nf 25588 26042 25590\nf 25589 25593 26043\nf 25589 26043 26038\nf 25590 26042 26046\nf 25590 26046 26047\nf 25590 26047 25591\nf 25591 26047 26048\nf 25591 26048 25592\nf 25592 26048 25595\nf 25593 25594 26044\nf 25593 25601 26056\nf 25593 26044 26043\nf 25593 26056 25594\nf 25594 26049 26044\nf 25594 26050 26049\nf 25594 26056 26050\nf 25595 26048 26051\nf 25595 26051 26052\nf 25595 26052 25596\nf 25596 26052 26053\nf 25596 26053 25597\nf 25597 26053 26054\nf 25597 26054 25598\nf 25598 26054 25599\nf 25599 25604 25603\nf 25599 26054 25604\nf 25600 25610 26065\nf 25600 26055 26057\nf 25600 26057 25602\nf 25600 26065 26055\nf 25601 25602 26056\nf 25602 26057 26056\nf 25603 25604 26059\nf 25603 26059 25605\nf 25604 26054 26058\nf 25604 26058 26059\nf 25605 26059 26060\nf 25605 26060 26061\nf 25605 26061 25606\nf 25606 26061 26062\nf 25606 26062 25607\nf 25607 26062 26063\nf 25607 26063 25608\nf 25608 26063 26064\nf 25608 26064 25609\nf 25609 26064 26066\nf 25609 26066 25611\nf 25610 25611 26065\nf 25611 26066 26065\nf 25612 25613 26067\nf 25612 25624 25622\nf 25612 26067 26074\nf 25612 26074 25624\nf 25613 25614 26067\nf 25614 25625 25626\nf 25614 25626 26067\nf 25615 25616 26068\nf 25615 25629 25628\nf 25615 26068 26080\nf 25615 26080 25629\nf 25616 25617 26068\nf 25617 25618 26069\nf 25617 26069 26068\nf 25618 25619 26070\nf 25618 26070 26069\nf 25619 25620 26071\nf 25619 26071 26070\nf 25620 25621 26072\nf 25620 26072 26071\nf 25621 25630 26073\nf 25621 26073 26072\nf 25622 25624 25623\nf 25623 25624 26075\nf 25623 25632 25631\nf 25623 26075 25632\nf 25624 26074 26075\nf 25625 25627 26078\nf 25625 26078 25626\nf 25626 26076 26067\nf 25626 26078 26076\nf 25627 25633 26079\nf 25627 26079 26078\nf 25628 25629 25635\nf 25629 25636 25635\nf 25629 26080 26087\nf 25629 26087 25636\nf 25630 25637 26088\nf 25630 26081 26073\nf 25630 26088 26081\nf 25631 25632 26089\nf 25631 26089 25639\nf 25632 26075 26083\nf 25632 26083 26084\nf 25632 26084 26089\nf 25633 25634 25641\nf 25633 25641 26090\nf 25633 26085 26079\nf 25633 26090 26085\nf 25634 25640 25641\nf 25635 25636 25642\nf 25636 25644 25642\nf 25636 26087 26092\nf 25636 26092 25644\nf 25637 25638 25646\nf 25637 25646 26093\nf 25637 26093 26088\nf 25638 25645 25646\nf 25639 26089 25647\nf 25640 25648 26096\nf 25640 26091 25641\nf 25640 26096 26091\nf 25641 26091 26090\nf 25642 25644 25643\nf 25643 25644 25649\nf 25644 26092 25649\nf 25645 25650 26099\nf 25645 26094 25646\nf 25645 26099 26094\nf 25646 26094 26093\nf 25647 26089 26095\nf 25647 26095 25651\nf 25648 25652 26102\nf 25648 26102 26096\nf 25649 26092 26098\nf 25649 26098 25653\nf 25650 25654 26104\nf 25650 26104 26099\nf 25651 26095 26101\nf 25651 26101 25655\nf 25652 25656 26106\nf 25652 26106 26102\nf 25653 26098 26103\nf 25653 26103 25657\nf 25654 25658 26108\nf 25654 26108 26104\nf 25655 26101 26105\nf 25655 26105 25659\nf 25656 25661 26111\nf 25656 26111 26106\nf 25657 26103 26107\nf 25657 26107 25662\nf 25658 25663 26113\nf 25658 26113 26108\nf 25659 26105 26109\nf 25659 26109 25660\nf 25660 26109 26110\nf 25660 26110 26114\nf 25660 26114 25664\nf 25661 25665 26116\nf 25661 26116 26111\nf 25662 26107 26112\nf 25662 26112 25666\nf 25663 25667 26118\nf 25663 26118 26113\nf 25664 26114 25668\nf 25665 25669 26122\nf 25665 26122 26116\nf 25666 26112 26117\nf 25666 26117 25670\nf 25667 25671 26125\nf 25667 26125 26118\nf 25668 26114 26119\nf 25668 26119 25672\nf 25669 25675 26127\nf 25669 26127 26122\nf 25670 26117 26124\nf 25670 26124 25677\nf 25671 25679 26130\nf 25671 26130 26125\nf 25672 25674 25673\nf 25672 26119 26120\nf 25672 26120 25674\nf 25673 25674 25680\nf 25674 26120 26126\nf 25674 26126 25680\nf 25675 25676 25682\nf 25675 25682 26132\nf 25675 26132 26127\nf 25676 25681 25682\nf 25677 26124 26128\nf 25677 26128 25678\nf 25678 26128 26129\nf 25678 26129 26136\nf 25678 26136 25686\nf 25679 25688 26139\nf 25679 26139 26130\nf 25680 26126 26131\nf 25680 26131 25689\nf 25681 25683 26133\nf 25681 26133 25682\nf 25682 26133 26132\nf 25683 25684 26134\nf 25683 26134 26133\nf 25684 25685 26135\nf 25684 26135 26134\nf 25685 25690 25691\nf 25685 25691 26135\nf 25686 26136 25687\nf 25687 26136 26137\nf 25687 26137 26225\nf 25687 26225 25774\nf 25688 25776 26227\nf 25688 26227 26139\nf 25689 26131 26140\nf 25689 26140 25777\nf 25690 25692 26142\nf 25690 26142 25691\nf 25691 26141 26135\nf 25691 26142 26141\nf 25692 25693 26143\nf 25692 26143 26142\nf 25693 25694 26144\nf 25693 26144 26143\nf 25694 25695 26145\nf 25694 26145 26144\nf 25695 25696 26146\nf 25695 26146 26145\nf 25696 25697 26147\nf 25696 26147 26146\nf 25697 25698 26148\nf 25697 26148 26147\nf 25698 25699 26149\nf 25698 26149 26148\nf 25699 25700 26150\nf 25699 26150 26149\nf 25700 25701 26151\nf 25700 26151 26150\nf 25701 25702 26152\nf 25701 26152 26151\nf 25702 25703 26153\nf 25702 26153 26152\nf 25703 25704 26154\nf 25703 26154 26153\nf 25704 25705 26155\nf 25704 26155 26154\nf 25705 25706 26156\nf 25705 26156 26155\nf 25706 25707 26157\nf 25706 26157 26156\nf 25707 25708 26158\nf 25707 26158 26157\nf 25708 25709 26159\nf 25708 26159 26158\nf 25709 25710 26160\nf 25709 26160 26159\nf 25710 25711 26161\nf 25710 26161 26160\nf 25711 25712 26162\nf 25711 26162 26161\nf 25712 25713 26163\nf 25712 26163 26162\nf 25713 25714 26164\nf 25713 26164 26163\nf 25714 25715 26165\nf 25714 26165 26164\nf 25715 25716 26166\nf 25715 26166 26165\nf 25716 25717 26167\nf 25716 26167 26166\nf 25717 25718 26168\nf 25717 26168 26167\nf 25718 25719 26169\nf 25718 26169 26168\nf 25719 25720 26170\nf 25719 26170 26169\nf 25720 25721 26171\nf 25720 26171 26170\nf 25721 25722 26172\nf 25721 26172 26171\nf 25722 25723 26173\nf 25722 26173 26172\nf 25723 25724 26174\nf 25723 26174 26173\nf 25724 25725 26175\nf 25724 26175 26174\nf 25725 25726 26176\nf 25725 26176 26175\nf 25726 25727 26177\nf 25726 26177 26176\nf 25727 25728 26178\nf 25727 26178 26177\nf 25728 25729 26179\nf 25728 26179 26178\nf 25729 25730 26180\nf 25729 26180 26179\nf 25730 25731 26181\nf 25730 26181 26180\nf 25731 25732 26182\nf 25731 26182 26181\nf 25732 25733 26183\nf 25732 26183 26182\nf 25733 25734 26184\nf 25733 26184 26183\nf 25734 25735 26185\nf 25734 26185 26184\nf 25735 25736 26186\nf 25735 26186 26185\nf 25736 25737 26187\nf 25736 26187 26186\nf 25737 25738 26188\nf 25737 26188 26187\nf 25738 25739 26189\nf 25738 26189 26188\nf 25739 25740 26190\nf 25739 26190 26189\nf 25740 25741 26191\nf 25740 26191 26190\nf 25741 25742 26192\nf 25741 26192 26191\nf 25742 25743 26193\nf 25742 26193 26192\nf 25743 25744 26194\nf 25743 26194 26193\nf 25744 25745 26195\nf 25744 26195 26194\nf 25745 25746 26196\nf 25745 26196 26195\nf 25746 25747 26197\nf 25746 26197 26196\nf 25747 25748 26198\nf 25747 26198 26197\nf 25748 25749 26199\nf 25748 26199 26198\nf 25749 25750 26200\nf 25749 26200 26199\nf 25750 25751 26201\nf 25750 26201 26200\nf 25751 25752 26202\nf 25751 26202 26201\nf 25752 25753 26203\nf 25752 26203 26202\nf 25753 25754 26204\nf 25753 26204 26203\nf 25754 25755 26205\nf 25754 26205 26204\nf 25755 25756 26206\nf 25755 26206 26205\nf 25756 25757 26207\nf 25756 26207 26206\nf 25757 25758 26208\nf 25757 26208 26207\nf 25758 25759 26209\nf 25758 26209 26208\nf 25759 25760 26210\nf 25759 26210 26209\nf 25760 25761 26211\nf 25760 26211 26210\nf 25761 25762 26212\nf 25761 26212 26211\nf 25762 25763 26213\nf 25762 26213 26212\nf 25763 25764 26214\nf 25763 26214 26213\nf 25764 25765 26215\nf 25764 26215 26214\nf 25765 25766 26216\nf 25765 26216 26215\nf 25766 25767 26217\nf 25766 26217 26216\nf 25767 25768 26218\nf 25767 26218 26217\nf 25768 25769 26219\nf 25768 26219 26218\nf 25769 25770 26220\nf 25769 26220 26219\nf 25770 25771 26221\nf 25770 26221 26220\nf 25771 25772 26222\nf 25771 26222 26221\nf 25772 25773 26223\nf 25772 26223 26222\nf 25773 25775 26224\nf 25773 26224 26223\nf 25774 26225 25775\nf 25775 26225 26226\nf 25775 26226 26224\nf 25776 25778 26229\nf 25776 26229 26227\nf 25777 26140 26228\nf 25777 26228 25779\nf 25778 25781 26232\nf 25778 26232 26229\nf 25779 26228 26230\nf 25779 26230 26231\nf 25779 26231 25780\nf 25780 26231 25783\nf 25781 25782 26232\nf 25782 25784 26235\nf 25782 26233 26232\nf 25782 26235 26233\nf 25783 26231 26234\nf 25783 26234 25785\nf 25784 25787 26238\nf 25784 26238 26235\nf 25785 26234 26236\nf 25785 26236 25789\nf 25786 25800 26250\nf 25786 26237 26239\nf 25786 26239 25788\nf 25786 26250 26237\nf 25787 25788 26238\nf 25788 26239 26238\nf 25789 26236 26240\nf 25789 26240 26241\nf 25789 26241 25790\nf 25790 26241 26242\nf 25790 26242 25791\nf 25791 26242 26243\nf 25791 26243 25792\nf 25792 26243 25802\nf 25793 25884 25886\nf 25793 25886 26336\nf 25793 26244 25794\nf 25793 26336 26244\nf 25794 26244 26245\nf 25794 26245 25795\nf 25795 26245 26246\nf 25795 26246 25796\nf 25796 26246 26247\nf 25796 26247 25797\nf 25797 26247 26248\nf 25797 26248 25798\nf 25798 26248 26249\nf 25798 26249 25799\nf 25799 26249 26251\nf 25799 26251 25801\nf 25800 25801 26250\nf 25801 26251 26250\nf 25802 26243 26252\nf 25802 26252 26254\nf 25802 26254 25803\nf 25803 26254 26255\nf 25803 26255 25804\nf 25804 26255 25887\nf 25805 25892 26344\nf 25805 26256 26257\nf 25805 26257 25806\nf 25805 26344 26256\nf 25806 26257 26258\nf 25806 26258 25807\nf 25807 26258 26259\nf 25807 26259 25808\nf 25808 26259 26260\nf 25808 26260 25809\nf 25809 26260 26261\nf 25809 26261 25810\nf 25810 26261 26262\nf 25810 26262 25811\nf 25811 26262 26263\nf 25811 26263 25812\nf 25812 26263 26264\nf 25812 26264 25813\nf 25813 26264 26265\nf 25813 26265 25814\nf 25814 26265 26266\nf 25814 26266 25815\nf 25815 26266 26267\nf 25815 26267 25816\nf 25816 26267 26268\nf 25816 26268 25817\nf 25817 26268 26269\nf 25817 26269 25818\nf 25818 26269 26270\nf 25818 26270 25819\nf 25819 26270 26271\nf 25819 26271 25820\nf 25820 26271 26272\nf 25820 26272 25821\nf 25821 26272 26273\nf 25821 26273 25822\nf 25822 26273 26274\nf 25822 26274 25823\nf 25823 26274 26275\nf 25823 26275 25824\nf 25824 26275 26276\nf 25824 26276 25825\nf 25825 26276 26277\nf 25825 26277 25826\nf 25826 26277 26278\nf 25826 26278 25827\nf 25827 26278 26279\nf 25827 26279 25828\nf 25828 26279 26280\nf 25828 26280 25829\nf 25829 26280 26281\nf 25829 26281 25830\nf 25830 26281 26282\nf 25830 26282 25831\nf 25831 26282 26283\nf 25831 26283 25832\nf 25832 26283 26284\nf 25832 26284 25833\nf 25833 26284 26285\nf 25833 26285 25834\nf 25834 26285 26286\nf 25834 26286 25835\nf 25835 26286 26287\nf 25835 26287 25836\nf 25836 26287 26288\nf 25836 26288 25837\nf 25837 26288 26289\nf 25837 26289 25838\nf 25838 26289 26290\nf 25838 26290 25839\nf 25839 26290 26291\nf 25839 26291 25840\nf 25840 26291 26292\nf 25840 26292 25841\nf 25841 26292 26293\nf 25841 26293 25842\nf 25842 26293 26294\nf 25842 26294 25843\nf 25843 26294 26295\nf 25843 26295 25844\nf 25844 26295 26296\nf 25844 26296 25845\nf 25845 26296 26297\nf 25845 26297 25846\nf 25846 26297 26298\nf 25846 26298 25847\nf 25847 26298 26299\nf 25847 26299 25848\nf 25848 26299 26300\nf 25848 26300 25849\nf 25849 26300 26301\nf 25849 26301 25850\nf 25850 26301 26302\nf 25850 26302 25851\nf 25851 26302 26303\nf 25851 26303 25852\nf 25852 26303 26304\nf 25852 26304 25853\nf 25853 26304 26305\nf 25853 26305 25854\nf 25854 26305 26306\nf 25854 26306 25855\nf 25855 26306 26307\nf 25855 26307 25856\nf 25856 26307 26308\nf 25856 26308 25857\nf 25857 26308 26309\nf 25857 26309 25858\nf 25858 26309 26310\nf 25858 26310 25859\nf 25859 26310 26311\nf 25859 26311 25860\nf 25860 26311 26312\nf 25860 26312 25861\nf 25861 26312 26313\nf 25861 26313 25862\nf 25862 26313 26314\nf 25862 26314 25863\nf 25863 26314 26315\nf 25863 26315 25864\nf 25864 26315 26316\nf 25864 26316 25865\nf 25865 26316 26317\nf 25865 26317 25866\nf 25866 26317 26318\nf 25866 26318 25867\nf 25867 26318 26319\nf 25867 26319 25868\nf 25868 26319 26320\nf 25868 26320 25869\nf 25869 26320 26321\nf 25869 26321 25870\nf 25870 26321 26322\nf 25870 26322 25871\nf 25871 26322 26323\nf 25871 26323 25872\nf 25872 26323 26324\nf 25872 26324 25873\nf 25873 26324 26325\nf 25873 26325 25874\nf 25874 26325 26326\nf 25874 26326 25875\nf 25875 26326 26327\nf 25875 26327 25876\nf 25876 26327 26328\nf 25876 26328 25877\nf 25877 26328 26329\nf 25877 26329 25878\nf 25878 26329 26330\nf 25878 26330 25879\nf 25879 26330 26331\nf 25879 26331 25880\nf 25880 26331 26332\nf 25880 26332 25881\nf 25881 26332 26333\nf 25881 26333 25882\nf 25882 26333 26334\nf 25882 26334 25883\nf 25883 26334 26335\nf 25883 26335 25885\nf 25884 25885 25886\nf 25885 26335 26337\nf 25885 26337 25886\nf 25886 26337 26336\nf 25887 26255 26338\nf 25887 26338 26340\nf 25887 26340 25888\nf 25888 26340 26341\nf 25888 26341 25889\nf 25889 26341 26342\nf 25889 26342 25890\nf 25890 26342 26343\nf 25890 26343 25891\nf 25891 26343 26345\nf 25891 26345 25893\nf 25892 25893 26344\nf 25893 26345 26344\nf 25894 25895 26346\nf 25894 26346 26350\nf 25894 26350 25898\nf 25895 25896 26347\nf 25895 26347 26346\nf 25896 25897 26348\nf 25896 26348 26347\nf 25897 25899 26349\nf 25897 26349 26348\nf 25898 26350 25901\nf 25899 25900 26352\nf 25899 26351 26349\nf 25899 26352 26351\nf 25900 25902 26352\nf 25901 26350 26353\nf 25901 26353 25904\nf 25902 25903 26355\nf 25902 26354 26352\nf 25902 26355 26354\nf 25903 25906 26355\nf 25904 26353 26356\nf 25904 26356 25905\nf 25905 26356 26357\nf 25905 26357 26359\nf 25905 26359 25908\nf 25906 25907 25910\nf 25906 25910 26360\nf 25906 26358 26355\nf 25906 26360 26358\nf 25907 25909 25910\nf 25908 26359 25911\nf 25909 25912 26363\nf 25909 26361 25910\nf 25909 26363 26361\nf 25910 26361 26360\nf 25911 26359 26362\nf 25911 26362 25913\nf 25912 25914 26365\nf 25912 26365 26363\nf 25913 26362 26364\nf 25913 26364 25915\nf 25914 25916 26367\nf 25914 26367 26365\nf 25915 26364 26366\nf 25915 26366 25917\nf 25916 25918 26369\nf 25916 26369 26367\nf 25917 26366 26368\nf 25917 26368 25919\nf 25918 25920 26371\nf 25918 26371 26369\nf 25919 26368 26370\nf 25919 26370 25921\nf 25920 25922 26373\nf 25920 26373 26371\nf 25921 26370 26372\nf 25921 26372 25923\nf 25922 25924 26375\nf 25922 26375 26373\nf 25923 26372 26374\nf 25923 26374 25925\nf 25924 25926 26377\nf 25924 26377 26375\nf 25925 26374 26376\nf 25925 26376 25927\nf 25926 25928 26379\nf 25926 26379 26377\nf 25927 26376 26378\nf 25927 26378 25929\nf 25928 25930 26381\nf 25928 26381 26379\nf 25929 26378 26380\nf 25929 26380 25931\nf 25930 25933 26384\nf 25930 26384 26381\nf 25931 26380 26382\nf 25931 26382 26383\nf 25931 26383 25932\nf 25932 26383 25934\nf 25933 25935 26386\nf 25933 26386 26384\nf 25934 26383 26385\nf 25934 26385 25937\nf 25935 25936 26386\nf 25936 25938 26390\nf 25936 26387 26386\nf 25936 26390 26387\nf 25937 26385 26389\nf 25937 26389 25939\nf 25938 25940 26393\nf 25938 26393 26390\nf 25939 26389 26391\nf 25939 26391 25942\nf 25940 25941 26393\nf 25941 25945 26396\nf 25941 26394 26393\nf 25941 26396 26394\nf 25942 25944 25943\nf 25942 26391 26392\nf 25942 26392 25944\nf 25943 25944 25946\nf 25944 26392 26395\nf 25944 26395 25946\nf 25945 25948 26396\nf 25946 26395 26398\nf 25946 26398 25951\nf 25947 25953 26403\nf 25947 26400 25949\nf 25947 26403 26400\nf 25948 25949 25950\nf 25948 25950 26396\nf 25949 26399 25950\nf 25949 26400 26399\nf 25950 26397 26396\nf 25950 26399 26397\nf 25951 26398 26401\nf 25951 26401 26402\nf 25951 26402 25952\nf 25952 26402 26404\nf 25952 26404 25954\nf 25953 25954 26403\nf 25954 26404 26403\nf 25955 25958 25959\nf 25955 25959 25956\nf 25956 25959 25957\nf 25957 25959 26406\nf 25957 25962 25961\nf 25957 26406 25962\nf 25958 25960 26406\nf 25958 26406 25959\nf 25960 25963 26407\nf 25960 26407 26406\nf 25961 25962 26412\nf 25961 26412 25965\nf 25962 26406 26408\nf 25962 26408 26409\nf 25962 26409 26412\nf 25963 25964 26411\nf 25963 26410 26407\nf 25963 26411 26410\nf 25964 25967 26411\nf 25965 26412 25966\nf 25966 26412 26413\nf 25966 26413 26416\nf 25966 26416 25968\nf 25967 25969 26417\nf 25967 26414 26411\nf 25967 26417 26414\nf 25968 26416 25970\nf 25969 25971 26419\nf 25969 26419 26417\nf 25970 26416 26418\nf 25970 26418 25972\nf 25971 25973 26421\nf 25971 26421 26419\nf 25972 26418 26420\nf 25972 26420 25975\nf 25973 25974 25978\nf 25973 25978 26424\nf 25973 26424 26421\nf 25974 25977 25978\nf 25975 26420 26422\nf 25975 26422 25976\nf 25976 26422 26423\nf 25976 26423 26426\nf 25976 26426 25979\nf 25977 25981 26428\nf 25977 26425 25978\nf 25977 26428 26425\nf 25978 26425 26424\nf 25979 26426 26427\nf 25979 26427 25980\nf 25980 26427 25982\nf 25981 25983 26430\nf 25981 26430 26428\nf 25982 26427 26429\nf 25982 26429 25984\nf 25983 25985 26432\nf 25983 26432 26430\nf 25984 26429 26431\nf 25984 26431 25986\nf 25985 25987 26434\nf 25985 26434 26432\nf 25986 26431 26433\nf 25986 26433 25989\nf 25987 25988 26434\nf 25988 25990 26438\nf 25988 26435 26434\nf 25988 26438 26435\nf 25989 26433 26437\nf 25989 26437 25991\nf 25990 25992 26440\nf 25990 26440 26438\nf 25991 26437 26439\nf 25991 26439 25993\nf 25992 25994 26442\nf 25992 26442 26440\nf 25993 26439 26441\nf 25993 26441 25996\nf 25994 25995 26442\nf 25995 25997 26445\nf 25995 26443 26442\nf 25995 26445 26443\nf 25996 26441 26444\nf 25996 26444 25998\nf 25997 26000 26448\nf 25997 26448 26445\nf 25998 26444 26446\nf 25998 26446 26447\nf 25998 26447 25999\nf 25999 26447 26002\nf 26000 26001 26451\nf 26000 26451 26448\nf 26001 26003 26004\nf 26001 26004 26451\nf 26002 26447 26449\nf 26002 26449 26005\nf 26003 26007 26455\nf 26003 26455 26004\nf 26004 26452 26451\nf 26004 26455 26452\nf 26005 26449 26453\nf 26005 26453 26454\nf 26005 26454 26006\nf 26006 26454 26456\nf 26006 26456 26008\nf 26007 26008 26455\nf 26008 26456 26455\nf 26009 26010 26458\nf 26009 26458 26468\nf 26009 26468 26019\nf 26010 26011 26459\nf 26010 26459 26458\nf 26011 26012 26460\nf 26011 26460 26459\nf 26012 26013 26461\nf 26012 26461 26460\nf 26013 26014 26462\nf 26013 26462 26461\nf 26014 26015 26463\nf 26014 26463 26462\nf 26015 26016 26464\nf 26015 26464 26463\nf 26016 26017 26465\nf 26016 26465 26464\nf 26017 26018 26466\nf 26017 26466 26465\nf 26018 26020 26467\nf 26018 26467 26466\nf 26019 26468 26024\nf 26020 26021 26470\nf 26020 26469 26467\nf 26020 26470 26469\nf 26021 26022 26470\nf 26022 26023 26472\nf 26022 26472 26470\nf 26023 26025 26473\nf 26023 26473 26472\nf 26024 26468 26474\nf 26024 26474 26028\nf 26025 26026 26476\nf 26025 26475 26473\nf 26025 26476 26475\nf 26026 26027 26476\nf 26027 26030 26477\nf 26027 26477 26476\nf 26028 26474 26478\nf 26028 26478 26479\nf 26028 26479 26029\nf 26029 26479 26032\nf 26030 26031 26481\nf 26030 26480 26477\nf 26030 26481 26480\nf 26031 26033 26481\nf 26032 26479 26482\nf 26032 26482 26035\nf 26033 26034 26484\nf 26033 26483 26481\nf 26033 26484 26483\nf 26034 26037 26486\nf 26034 26486 26484\nf 26035 26482 26487\nf 26035 26487 26488\nf 26035 26488 26036\nf 26036 26488 26040\nf 26037 26038 26039\nf 26037 26039 26486\nf 26038 26043 26045\nf 26038 26045 26490\nf 26038 26490 26039\nf 26039 26489 26486\nf 26039 26490 26489\nf 26040 26488 26492\nf 26040 26492 26493\nf 26040 26493 26041\nf 26041 26493 26494\nf 26041 26494 26042\nf 26042 26494 26046\nf 26043 26044 26045\nf 26044 26049 26045\nf 26045 26049 26495\nf 26045 26495 26490\nf 26046 26494 26497\nf 26046 26497 26498\nf 26046 26498 26047\nf 26047 26498 26499\nf 26047 26499 26048\nf 26048 26499 26051\nf 26049 26050 26500\nf 26049 26500 26495\nf 26050 26056 26507\nf 26050 26501 26500\nf 26050 26507 26501\nf 26051 26499 26502\nf 26051 26502 26503\nf 26051 26503 26052\nf 26052 26503 26504\nf 26052 26504 26053\nf 26053 26504 26505\nf 26053 26505 26054\nf 26054 26505 26058\nf 26055 26065 26517\nf 26055 26506 26508\nf 26055 26508 26057\nf 26055 26517 26506\nf 26056 26057 26507\nf 26057 26508 26507\nf 26058 26505 26509\nf 26058 26509 26511\nf 26058 26511 26059\nf 26059 26511 26512\nf 26059 26512 26060\nf 26060 26512 26513\nf 26060 26513 26061\nf 26061 26513 26514\nf 26061 26514 26062\nf 26062 26514 26515\nf 26062 26515 26063\nf 26063 26515 26516\nf 26063 26516 26064\nf 26064 26516 26518\nf 26064 26518 26066\nf 26065 26066 26517\nf 26066 26518 26517\nf 26067 26076 26077\nf 26067 26077 26074\nf 26068 26069 26520\nf 26068 26520 26528\nf 26068 26528 26080\nf 26069 26070 26521\nf 26069 26521 26520\nf 26070 26071 26522\nf 26070 26522 26521\nf 26071 26072 26523\nf 26071 26523 26522\nf 26072 26073 26524\nf 26072 26524 26523\nf 26073 26081 26082\nf 26073 26082 26524\nf 26074 26077 26075\nf 26075 26077 26526\nf 26075 26525 26532\nf 26075 26526 26525\nf 26075 26532 26083\nf 26076 26078 26526\nf 26076 26526 26077\nf 26078 26079 26527\nf 26078 26527 26526\nf 26079 26085 26086\nf 26079 26086 26527\nf 26080 26528 26087\nf 26081 26088 26537\nf 26081 26531 26082\nf 26081 26537 26531\nf 26082 26529 26524\nf 26082 26531 26529\nf 26083 26532 26084\nf 26084 26532 26533\nf 26084 26533 26538\nf 26084 26538 26089\nf 26085 26090 26539\nf 26085 26535 26086\nf 26085 26539 26535\nf 26086 26534 26527\nf 26086 26535 26534\nf 26087 26528 26536\nf 26087 26536 26092\nf 26088 26093 26541\nf 26088 26541 26537\nf 26089 26538 26095\nf 26090 26091 26097\nf 26090 26097 26543\nf 26090 26543 26539\nf 26091 26096 26097\nf 26092 26536 26540\nf 26092 26540 26098\nf 26093 26094 26100\nf 26093 26100 26546\nf 26093 26546 26541\nf 26094 26099 26100\nf 26095 26538 26542\nf 26095 26542 26101\nf 26096 26102 26549\nf 26096 26544 26097\nf 26096 26549 26544\nf 26097 26544 26543\nf 26098 26540 26545\nf 26098 26545 26103\nf 26099 26104 26552\nf 26099 26547 26100\nf 26099 26552 26547\nf 26100 26547 26546\nf 26101 26542 26548\nf 26101 26548 26105\nf 26102 26106 26554\nf 26102 26554 26549\nf 26103 26545 26551\nf 26103 26551 26107\nf 26104 26108 26556\nf 26104 26556 26552\nf 26105 26548 26553\nf 26105 26553 26109\nf 26106 26111 26558\nf 26106 26558 26554\nf 26107 26551 26555\nf 26107 26555 26112\nf 26108 26113 26560\nf 26108 26560 26556\nf 26109 26553 26557\nf 26109 26557 26561\nf 26109 26561 26110\nf 26110 26115 26114\nf 26110 26561 26115\nf 26111 26116 26562\nf 26111 26562 26558\nf 26112 26555 26559\nf 26112 26559 26117\nf 26113 26118 26565\nf 26113 26565 26560\nf 26114 26115 26119\nf 26115 26121 26119\nf 26115 26561 26566\nf 26115 26566 26121\nf 26116 26122 26562\nf 26117 26559 26564\nf 26117 26564 26124\nf 26118 26125 26570\nf 26118 26570 26565\nf 26119 26121 26120\nf 26120 26121 26126\nf 26121 26566 26126\nf 26122 26123 26562\nf 26122 26127 26572\nf 26122 26568 26123\nf 26122 26572 26568\nf 26123 26563 26562\nf 26123 26567 26563\nf 26123 26568 26567\nf 26124 26564 26569\nf 26124 26569 26128\nf 26125 26130 26574\nf 26125 26574 26570\nf 26126 26566 26571\nf 26126 26571 26131\nf 26127 26132 26576\nf 26127 26576 26572\nf 26128 26569 26573\nf 26128 26573 26581\nf 26128 26581 26129\nf 26129 26138 26136\nf 26129 26581 26138\nf 26130 26139 26583\nf 26130 26583 26574\nf 26131 26571 26575\nf 26131 26575 26140\nf 26132 26133 26577\nf 26132 26577 26576\nf 26133 26134 26577\nf 26134 26135 26578\nf 26134 26578 26577\nf 26135 26141 26579\nf 26135 26579 26578\nf 26136 26138 26137\nf 26137 26138 26582\nf 26137 26580 26669\nf 26137 26582 26580\nf 26137 26669 26225\nf 26138 26581 26582\nf 26139 26227 26671\nf 26139 26671 26583\nf 26140 26575 26584\nf 26140 26584 26228\nf 26141 26142 26586\nf 26141 26585 26579\nf 26141 26586 26585\nf 26142 26143 26586\nf 26143 26144 26587\nf 26143 26587 26586\nf 26144 26145 26588\nf 26144 26588 26587\nf 26145 26146 26589\nf 26145 26589 26588\nf 26146 26147 26590\nf 26146 26590 26589\nf 26147 26148 26591\nf 26147 26591 26590\nf 26148 26149 26592\nf 26148 26592 26591\nf 26149 26150 26593\nf 26149 26593 26592\nf 26150 26151 26594\nf 26150 26594 26593\nf 26151 26152 26595\nf 26151 26595 26594\nf 26152 26153 26596\nf 26152 26596 26595\nf 26153 26154 26597\nf 26153 26597 26596\nf 26154 26155 26598\nf 26154 26598 26597\nf 26155 26156 26599\nf 26155 26599 26598\nf 26156 26157 26600\nf 26156 26600 26599\nf 26157 26158 26601\nf 26157 26601 26600\nf 26158 26159 26602\nf 26158 26602 26601\nf 26159 26160 26603\nf 26159 26603 26602\nf 26160 26161 26604\nf 26160 26604 26603\nf 26161 26162 26605\nf 26161 26605 26604\nf 26162 26163 26606\nf 26162 26606 26605\nf 26163 26164 26607\nf 26163 26607 26606\nf 26164 26165 26608\nf 26164 26608 26607\nf 26165 26166 26609\nf 26165 26609 26608\nf 26166 26167 26610\nf 26166 26610 26609\nf 26167 26168 26611\nf 26167 26611 26610\nf 26168 26169 26612\nf 26168 26612 26611\nf 26169 26170 26613\nf 26169 26613 26612\nf 26170 26171 26614\nf 26170 26614 26613\nf 26171 26172 26615\nf 26171 26615 26614\nf 26172 26173 26616\nf 26172 26616 26615\nf 26173 26174 26617\nf 26173 26617 26616\nf 26174 26175 26618\nf 26174 26618 26617\nf 26175 26176 26619\nf 26175 26619 26618\nf 26176 26177 26620\nf 26176 26620 26619\nf 26177 26178 26621\nf 26177 26621 26620\nf 26178 26179 26622\nf 26178 26622 26621\nf 26179 26180 26623\nf 26179 26623 26622\nf 26180 26181 26624\nf 26180 26624 26623\nf 26181 26182 26625\nf 26181 26625 26624\nf 26182 26183 26626\nf 26182 26626 26625\nf 26183 26184 26627\nf 26183 26627 26626\nf 26184 26185 26628\nf 26184 26628 26627\nf 26185 26186 26629\nf 26185 26629 26628\nf 26186 26187 26630\nf 26186 26630 26629\nf 26187 26188 26631\nf 26187 26631 26630\nf 26188 26189 26632\nf 26188 26632 26631\nf 26189 26190 26633\nf 26189 26633 26632\nf 26190 26191 26634\nf 26190 26634 26633\nf 26191 26192 26635\nf 26191 26635 26634\nf 26192 26193 26636\nf 26192 26636 26635\nf 26193 26194 26637\nf 26193 26637 26636\nf 26194 26195 26638\nf 26194 26638 26637\nf 26195 26196 26639\nf 26195 26639 26638\nf 26196 26197 26640\nf 26196 26640 26639\nf 26197 26198 26641\nf 26197 26641 26640\nf 26198 26199 26642\nf 26198 26642 26641\nf 26199 26200 26643\nf 26199 26643 26642\nf 26200 26201 26644\nf 26200 26644 26643\nf 26201 26202 26645\nf 26201 26645 26644\nf 26202 26203 26646\nf 26202 26646 26645\nf 26203 26204 26647\nf 26203 26647 26646\nf 26204 26205 26648\nf 26204 26648 26647\nf 26205 26206 26649\nf 26205 26649 26648\nf 26206 26207 26650\nf 26206 26650 26649\nf 26207 26208 26651\nf 26207 26651 26650\nf 26208 26209 26652\nf 26208 26652 26651\nf 26209 26210 26653\nf 26209 26653 26652\nf 26210 26211 26654\nf 26210 26654 26653\nf 26211 26212 26655\nf 26211 26655 26654\nf 26212 26213 26656\nf 26212 26656 26655\nf 26213 26214 26657\nf 26213 26657 26656\nf 26214 26215 26658\nf 26214 26658 26657\nf 26215 26216 26659\nf 26215 26659 26658\nf 26216 26217 26660\nf 26216 26660 26659\nf 26217 26218 26661\nf 26217 26661 26660\nf 26218 26219 26662\nf 26218 26662 26661\nf 26219 26220 26663\nf 26219 26663 26662\nf 26220 26221 26664\nf 26220 26664 26663\nf 26221 26222 26665\nf 26221 26665 26664\nf 26222 26223 26666\nf 26222 26666 26665\nf 26223 26224 26667\nf 26223 26667 26666\nf 26224 26226 26668\nf 26224 26668 26667\nf 26225 26669 26226\nf 26226 26669 26670\nf 26226 26670 26668\nf 26227 26229 26673\nf 26227 26673 26671\nf 26228 26584 26672\nf 26228 26672 26230\nf 26229 26232 26676\nf 26229 26676 26673\nf 26230 26672 26674\nf 26230 26674 26675\nf 26230 26675 26231\nf 26231 26675 26234\nf 26232 26233 26676\nf 26233 26235 26679\nf 26233 26677 26676\nf 26233 26679 26677\nf 26234 26675 26678\nf 26234 26678 26236\nf 26235 26238 26683\nf 26235 26683 26679\nf 26236 26678 26681\nf 26236 26681 26240\nf 26237 26250 26694\nf 26237 26682 26684\nf 26237 26684 26239\nf 26237 26694 26682\nf 26238 26239 26683\nf 26239 26684 26683\nf 26240 26681 26685\nf 26240 26685 26686\nf 26240 26686 26241\nf 26241 26686 26687\nf 26241 26687 26242\nf 26242 26687 26243\nf 26243 26253 26252\nf 26243 26687 26253\nf 26244 26336 26779\nf 26244 26688 26689\nf 26244 26689 26245\nf 26244 26779 26688\nf 26245 26689 26690\nf 26245 26690 26246\nf 26246 26690 26691\nf 26246 26691 26247\nf 26247 26691 26692\nf 26247 26692 26248\nf 26248 26692 26693\nf 26248 26693 26249\nf 26249 26693 26695\nf 26249 26695 26251\nf 26250 26251 26694\nf 26251 26695 26694\nf 26252 26253 26697\nf 26252 26697 26254\nf 26253 26687 26696\nf 26253 26696 26697\nf 26254 26697 26698\nf 26254 26698 26255\nf 26255 26339 26338\nf 26255 26698 26339\nf 26256 26344 26788\nf 26256 26699 26700\nf 26256 26700 26257\nf 26256 26788 26699\nf 26257 26700 26701\nf 26257 26701 26258\nf 26258 26701 26702\nf 26258 26702 26259\nf 26259 26702 26703\nf 26259 26703 26260\nf 26260 26703 26704\nf 26260 26704 26261\nf 26261 26704 26705\nf 26261 26705 26262\nf 26262 26705 26706\nf 26262 26706 26263\nf 26263 26706 26707\nf 26263 26707 26264\nf 26264 26707 26708\nf 26264 26708 26265\nf 26265 26708 26709\nf 26265 26709 26266\nf 26266 26709 26710\nf 26266 26710 26267\nf 26267 26710 26711\nf 26267 26711 26268\nf 26268 26711 26712\nf 26268 26712 26269\nf 26269 26712 26713\nf 26269 26713 26270\nf 26270 26713 26714\nf 26270 26714 26271\nf 26271 26714 26715\nf 26271 26715 26272\nf 26272 26715 26716\nf 26272 26716 26273\nf 26273 26716 26717\nf 26273 26717 26274\nf 26274 26717 26718\nf 26274 26718 26275\nf 26275 26718 26719\nf 26275 26719 26276\nf 26276 26719 26720\nf 26276 26720 26277\nf 26277 26720 26721\nf 26277 26721 26278\nf 26278 26721 26722\nf 26278 26722 26279\nf 26279 26722 26723\nf 26279 26723 26280\nf 26280 26723 26724\nf 26280 26724 26281\nf 26281 26724 26725\nf 26281 26725 26282\nf 26282 26725 26726\nf 26282 26726 26283\nf 26283 26726 26727\nf 26283 26727 26284\nf 26284 26727 26728\nf 26284 26728 26285\nf 26285 26728 26729\nf 26285 26729 26286\nf 26286 26729 26730\nf 26286 26730 26287\nf 26287 26730 26731\nf 26287 26731 26288\nf 26288 26731 26732\nf 26288 26732 26289\nf 26289 26732 26733\nf 26289 26733 26290\nf 26290 26733 26734\nf 26290 26734 26291\nf 26291 26734 26735\nf 26291 26735 26292\nf 26292 26735 26736\nf 26292 26736 26293\nf 26293 26736 26737\nf 26293 26737 26294\nf 26294 26737 26738\nf 26294 26738 26295\nf 26295 26738 26739\nf 26295 26739 26296\nf 26296 26739 26740\nf 26296 26740 26297\nf 26297 26740 26741\nf 26297 26741 26298\nf 26298 26741 26742\nf 26298 26742 26299\nf 26299 26742 26743\nf 26299 26743 26300\nf 26300 26743 26744\nf 26300 26744 26301\nf 26301 26744 26745\nf 26301 26745 26302\nf 26302 26745 26746\nf 26302 26746 26303\nf 26303 26746 26747\nf 26303 26747 26304\nf 26304 26747 26748\nf 26304 26748 26305\nf 26305 26748 26749\nf 26305 26749 26306\nf 26306 26749 26750\nf 26306 26750 26307\nf 26307 26750 26751\nf 26307 26751 26308\nf 26308 26751 26752\nf 26308 26752 26309\nf 26309 26752 26753\nf 26309 26753 26310\nf 26310 26753 26754\nf 26310 26754 26311\nf 26311 26754 26755\nf 26311 26755 26312\nf 26312 26755 26756\nf 26312 26756 26313\nf 26313 26756 26757\nf 26313 26757 26314\nf 26314 26757 26758\nf 26314 26758 26315\nf 26315 26758 26759\nf 26315 26759 26316\nf 26316 26759 26760\nf 26316 26760 26317\nf 26317 26760 26761\nf 26317 26761 26318\nf 26318 26761 26762\nf 26318 26762 26319\nf 26319 26762 26763\nf 26319 26763 26320\nf 26320 26763 26764\nf 26320 26764 26321\nf 26321 26764 26765\nf 26321 26765 26322\nf 26322 26765 26766\nf 26322 26766 26323\nf 26323 26766 26767\nf 26323 26767 26324\nf 26324 26767 26768\nf 26324 26768 26325\nf 26325 26768 26769\nf 26325 26769 26326\nf 26326 26769 26770\nf 26326 26770 26327\nf 26327 26770 26771\nf 26327 26771 26328\nf 26328 26771 26772\nf 26328 26772 26329\nf 26329 26772 26773\nf 26329 26773 26330\nf 26330 26773 26774\nf 26330 26774 26331\nf 26331 26774 26775\nf 26331 26775 26332\nf 26332 26775 26776\nf 26332 26776 26333\nf 26333 26776 26777\nf 26333 26777 26334\nf 26334 26777 26778\nf 26334 26778 26335\nf 26335 26778 26780\nf 26335 26780 26337\nf 26336 26337 26779\nf 26337 26780 26779\nf 26338 26339 26783\nf 26338 26783 26340\nf 26339 26698 26782\nf 26339 26782 26783\nf 26340 26783 26784\nf 26340 26784 26785\nf 26340 26785 26341\nf 26341 26785 26786\nf 26341 26786 26342\nf 26342 26786 26787\nf 26342 26787 26343\nf 26343 26787 26789\nf 26343 26789 26345\nf 26344 26345 26788\nf 26345 26789 26788\nf 26346 26347 26791\nf 26346 26791 26795\nf 26346 26795 26350\nf 26347 26348 26792\nf 26347 26792 26791\nf 26348 26349 26793\nf 26348 26793 26792\nf 26349 26351 26794\nf 26349 26794 26793\nf 26350 26795 26353\nf 26351 26352 26799\nf 26351 26797 26794\nf 26351 26799 26797\nf 26352 26354 26799\nf 26353 26795 26800\nf 26353 26800 26356\nf 26354 26355 26802\nf 26354 26801 26799\nf 26354 26802 26801\nf 26355 26358 26802\nf 26356 26800 26803\nf 26356 26803 26357\nf 26357 26803 26804\nf 26357 26804 26807\nf 26357 26807 26359\nf 26358 26360 26808\nf 26358 26805 26802\nf 26358 26808 26805\nf 26359 26807 26362\nf 26360 26361 26809\nf 26360 26809 26808\nf 26361 26363 26809\nf 26362 26807 26810\nf 26362 26810 26364\nf 26363 26365 26813\nf 26363 26811 26809\nf 26363 26813 26811\nf 26364 26810 26812\nf 26364 26812 26366\nf 26365 26367 26815\nf 26365 26815 26813\nf 26366 26812 26814\nf 26366 26814 26368\nf 26367 26369 26817\nf 26367 26817 26815\nf 26368 26814 26816\nf 26368 26816 26370\nf 26369 26371 26819\nf 26369 26819 26817\nf 26370 26816 26818\nf 26370 26818 26372\nf 26371 26373 26821\nf 26371 26821 26819\nf 26372 26818 26820\nf 26372 26820 26374\nf 26373 26375 26823\nf 26373 26823 26821\nf 26374 26820 26822\nf 26374 26822 26376\nf 26375 26377 26825\nf 26375 26825 26823\nf 26376 26822 26824\nf 26376 26824 26378\nf 26377 26379 26827\nf 26377 26827 26825\nf 26378 26824 26826\nf 26378 26826 26380\nf 26379 26381 26829\nf 26379 26829 26827\nf 26380 26826 26828\nf 26380 26828 26382\nf 26381 26384 26832\nf 26381 26832 26829\nf 26382 26828 26830\nf 26382 26830 26831\nf 26382 26831 26383\nf 26383 26831 26385\nf 26384 26386 26832\nf 26385 26831 26834\nf 26385 26834 26389\nf 26386 26387 26388\nf 26386 26388 26832\nf 26387 26390 26835\nf 26387 26835 26388\nf 26388 26833 26832\nf 26388 26835 26833\nf 26389 26834 26836\nf 26389 26836 26391\nf 26390 26393 26840\nf 26390 26837 26835\nf 26390 26840 26837\nf 26391 26836 26838\nf 26391 26838 26839\nf 26391 26839 26392\nf 26392 26839 26395\nf 26393 26394 26840\nf 26394 26396 26844\nf 26394 26841 26840\nf 26394 26844 26841\nf 26395 26839 26843\nf 26395 26843 26398\nf 26396 26397 26844\nf 26397 26399 26847\nf 26397 26845 26844\nf 26397 26847 26845\nf 26398 26843 26846\nf 26398 26846 26401\nf 26399 26400 26852\nf 26399 26852 26847\nf 26400 26403 26405\nf 26400 26405 26852\nf 26401 26846 26848\nf 26401 26848 26849\nf 26401 26849 26402\nf 26402 26849 26851\nf 26402 26851 26404\nf 26403 26404 26405\nf 26404 26851 26853\nf 26404 26853 26405\nf 26405 26853 26852\nf 26406 26407 26855\nf 26406 26855 26857\nf 26406 26857 26408\nf 26407 26410 26856\nf 26407 26856 26855\nf 26408 26857 26409\nf 26409 26857 26858\nf 26409 26858 26862\nf 26409 26862 26412\nf 26410 26411 26415\nf 26410 26415 26864\nf 26410 26860 26856\nf 26410 26864 26860\nf 26411 26414 26415\nf 26412 26862 26413\nf 26413 26862 26863\nf 26413 26863 26866\nf 26413 26866 26416\nf 26414 26417 26867\nf 26414 26865 26415\nf 26414 26867 26865\nf 26415 26865 26864\nf 26416 26866 26418\nf 26417 26419 26869\nf 26417 26869 26867\nf 26418 26866 26868\nf 26418 26868 26420\nf 26419 26421 26871\nf 26419 26871 26869\nf 26420 26868 26870\nf 26420 26870 26422\nf 26421 26424 26874\nf 26421 26874 26871\nf 26422 26870 26872\nf 26422 26872 26423\nf 26423 26872 26873\nf 26423 26873 26876\nf 26423 26876 26426\nf 26424 26425 26875\nf 26424 26875 26874\nf 26425 26428 26875\nf 26426 26876 26877\nf 26426 26877 26427\nf 26427 26877 26429\nf 26428 26430 26880\nf 26428 26878 26875\nf 26428 26880 26878\nf 26429 26877 26879\nf 26429 26879 26431\nf 26430 26432 26882\nf 26430 26882 26880\nf 26431 26879 26881\nf 26431 26881 26433\nf 26432 26434 26882\nf 26433 26881 26884\nf 26433 26884 26437\nf 26434 26435 26436\nf 26434 26436 26882\nf 26435 26438 26885\nf 26435 26885 26436\nf 26436 26883 26882\nf 26436 26885 26883\nf 26437 26884 26886\nf 26437 26886 26439\nf 26438 26440 26889\nf 26438 26887 26885\nf 26438 26889 26887\nf 26439 26886 26888\nf 26439 26888 26441\nf 26440 26442 26891\nf 26440 26891 26889\nf 26441 26888 26890\nf 26441 26890 26444\nf 26442 26443 26891\nf 26443 26445 26894\nf 26443 26892 26891\nf 26443 26894 26892\nf 26444 26890 26893\nf 26444 26893 26446\nf 26445 26448 26896\nf 26445 26896 26894\nf 26446 26450 26447\nf 26446 26893 26895\nf 26446 26895 26897\nf 26446 26897 26450\nf 26447 26450 26449\nf 26448 26451 26899\nf 26448 26899 26896\nf 26449 26450 26898\nf 26449 26898 26901\nf 26449 26901 26453\nf 26450 26897 26898\nf 26451 26452 26899\nf 26452 26455 26903\nf 26452 26900 26899\nf 26452 26903 26900\nf 26453 26457 26454\nf 26453 26901 26905\nf 26453 26905 26457\nf 26454 26457 26906\nf 26454 26904 26456\nf 26454 26906 26904\nf 26455 26456 26903\nf 26456 26904 26903\nf 26457 26905 26907\nf 26457 26907 26906\nf 26458 26459 26909\nf 26458 26909 26920\nf 26458 26920 26468\nf 26459 26460 26910\nf 26459 26910 26909\nf 26460 26461 26911\nf 26460 26911 26910\nf 26461 26462 26912\nf 26461 26912 26911\nf 26462 26463 26913\nf 26462 26913 26912\nf 26463 26464 26914\nf 26463 26914 26913\nf 26464 26465 26915\nf 26464 26915 26914\nf 26465 26466 26916\nf 26465 26916 26915\nf 26466 26467 26917\nf 26466 26917 26916\nf 26467 26469 26919\nf 26467 26918 26917\nf 26467 26919 26918\nf 26468 26920 26474\nf 26469 26470 26471\nf 26469 26471 26919\nf 26470 26472 26924\nf 26470 26924 26471\nf 26471 26922 26919\nf 26471 26924 26922\nf 26472 26473 26924\nf 26473 26475 26925\nf 26473 26925 26924\nf 26474 26920 26926\nf 26474 26926 26478\nf 26475 26476 26928\nf 26475 26927 26925\nf 26475 26928 26927\nf 26476 26477 26928\nf 26477 26480 26929\nf 26477 26929 26928\nf 26478 26926 26930\nf 26478 26930 26931\nf 26478 26931 26479\nf 26479 26931 26482\nf 26480 26481 26933\nf 26480 26932 26929\nf 26480 26933 26932\nf 26481 26483 26935\nf 26481 26935 26933\nf 26482 26931 26936\nf 26482 26936 26487\nf 26483 26484 26485\nf 26483 26485 26935\nf 26484 26486 26938\nf 26484 26938 26485\nf 26485 26937 26935\nf 26485 26938 26937\nf 26486 26489 26940\nf 26486 26940 26938\nf 26487 26936 26941\nf 26487 26941 26942\nf 26487 26942 26488\nf 26488 26942 26492\nf 26489 26490 26491\nf 26489 26491 26940\nf 26490 26495 26496\nf 26490 26496 26944\nf 26490 26944 26491\nf 26491 26943 26940\nf 26491 26944 26943\nf 26492 26942 26946\nf 26492 26946 26947\nf 26492 26947 26493\nf 26493 26947 26948\nf 26493 26948 26494\nf 26494 26948 26497\nf 26495 26500 26954\nf 26495 26954 26496\nf 26496 26949 26944\nf 26496 26950 26949\nf 26496 26954 26950\nf 26497 26948 26951\nf 26497 26951 26952\nf 26497 26952 26498\nf 26498 26952 26953\nf 26498 26953 26499\nf 26499 26953 26502\nf 26500 26501 26954\nf 26501 26507 26961\nf 26501 26955 26954\nf 26501 26961 26955\nf 26502 26953 26956\nf 26502 26956 26957\nf 26502 26957 26503\nf 26503 26957 26958\nf 26503 26958 26504\nf 26504 26958 26505\nf 26505 26510 26509\nf 26505 26958 26510\nf 26506 26517 26519\nf 26506 26519 26959\nf 26506 26959 26960\nf 26506 26960 26962\nf 26506 26962 26508\nf 26507 26508 26961\nf 26508 26962 26961\nf 26509 26510 26965\nf 26509 26965 26511\nf 26510 26958 26964\nf 26510 26964 26965\nf 26511 26965 26966\nf 26511 26966 26967\nf 26511 26967 26512\nf 26512 26967 26968\nf 26512 26968 26513\nf 26513 26968 26969\nf 26513 26969 26514\nf 26514 26969 26970\nf 26514 26970 26515\nf 26515 26970 26972\nf 26515 26972 26516\nf 26516 26972 26518\nf 26517 26518 26519\nf 26518 26971 26519\nf 26518 26972 26971\nf 26519 26971 26959\nf 26520 26521 26974\nf 26520 26974 26981\nf 26520 26981 26528\nf 26521 26522 26975\nf 26521 26975 26974\nf 26522 26523 26976\nf 26522 26976 26975\nf 26523 26524 26977\nf 26523 26977 26976\nf 26524 26529 26530\nf 26524 26530 26977\nf 26525 26526 26978\nf 26525 26978 26986\nf 26525 26986 26532\nf 26526 26527 26979\nf 26526 26979 26978\nf 26527 26534 26980\nf 26527 26980 26979\nf 26528 26981 26536\nf 26529 26531 26984\nf 26529 26984 26530\nf 26530 26983 26977\nf 26530 26984 26983\nf 26531 26537 26985\nf 26531 26985 26984\nf 26532 26986 26533\nf 26533 26986 26987\nf 26533 26987 26992\nf 26533 26992 26538\nf 26534 26535 26989\nf 26534 26988 26980\nf 26534 26989 26988\nf 26535 26539 26989\nf 26536 26981 26990\nf 26536 26990 26540\nf 26537 26541 26995\nf 26537 26991 26985\nf 26537 26995 26991\nf 26538 26992 26542\nf 26539 26543 26997\nf 26539 26993 26989\nf 26539 26997 26993\nf 26540 26990 26994\nf 26540 26994 26545\nf 26541 26546 26999\nf 26541 26999 26995\nf 26542 26992 26996\nf 26542 26996 26548\nf 26543 26544 26550\nf 26543 26550 27002\nf 26543 27002 26997\nf 26544 26549 26550\nf 26545 26994 26998\nf 26545 26998 26551\nf 26546 26547 27000\nf 26546 27000 26999\nf 26547 26552 27000\nf 26548 26996 27001\nf 26548 27001 26553\nf 26549 26554 27007\nf 26549 27003 26550\nf 26549 27007 27003\nf 26550 27003 27002\nf 26551 26998 27004\nf 26551 27004 26555\nf 26552 26556 27009\nf 26552 27005 27000\nf 26552 27009 27005\nf 26553 27001 27006\nf 26553 27006 26557\nf 26554 26558 27011\nf 26554 27011 27007\nf 26555 27004 27008\nf 26555 27008 26559\nf 26556 26560 27014\nf 26556 27014 27009\nf 26557 27006 27010\nf 26557 27010 26561\nf 26558 26562 27016\nf 26558 27016 27011\nf 26559 27008 27013\nf 26559 27013 26564\nf 26560 26565 27020\nf 26560 27020 27014\nf 26561 27010 27015\nf 26561 27015 26566\nf 26562 26563 27016\nf 26563 26567 27022\nf 26563 27017 27016\nf 26563 27022 27017\nf 26564 27013 27019\nf 26564 27019 26569\nf 26565 26570 27025\nf 26565 27025 27020\nf 26566 27015 27021\nf 26566 27021 26571\nf 26567 26568 27023\nf 26567 27023 27022\nf 26568 26572 27023\nf 26569 27019 27024\nf 26569 27024 26573\nf 26570 26574 27030\nf 26570 27030 27025\nf 26571 27021 27026\nf 26571 27026 26575\nf 26572 26576 27032\nf 26572 27027 27023\nf 26572 27032 27027\nf 26573 27024 27029\nf 26573 27029 26581\nf 26574 26583 27039\nf 26574 27039 27030\nf 26575 27026 27031\nf 26575 27031 26584\nf 26576 26577 27033\nf 26576 27033 27032\nf 26577 26578 27033\nf 26578 26579 27034\nf 26578 27034 27033\nf 26579 26585 27035\nf 26579 27035 27034\nf 26580 26582 27036\nf 26580 27036 27125\nf 26580 27125 26669\nf 26581 27029 27037\nf 26581 27037 26582\nf 26582 27037 27038\nf 26582 27038 27036\nf 26583 26671 27127\nf 26583 27127 27039\nf 26584 27031 27040\nf 26584 27040 26672\nf 26585 26586 27042\nf 26585 27041 27035\nf 26585 27042 27041\nf 26586 26587 27042\nf 26587 26588 27043\nf 26587 27043 27042\nf 26588 26589 27044\nf 26588 27044 27043\nf 26589 26590 27045\nf 26589 27045 27044\nf 26590 26591 27046\nf 26590 27046 27045\nf 26591 26592 27047\nf 26591 27047 27046\nf 26592 26593 27048\nf 26592 27048 27047\nf 26593 26594 27049\nf 26593 27049 27048\nf 26594 26595 27050\nf 26594 27050 27049\nf 26595 26596 27051\nf 26595 27051 27050\nf 26596 26597 27052\nf 26596 27052 27051\nf 26597 26598 27053\nf 26597 27053 27052\nf 26598 26599 27054\nf 26598 27054 27053\nf 26599 26600 27055\nf 26599 27055 27054\nf 26600 26601 27056\nf 26600 27056 27055\nf 26601 26602 27057\nf 26601 27057 27056\nf 26602 26603 27058\nf 26602 27058 27057\nf 26603 26604 27059\nf 26603 27059 27058\nf 26604 26605 27060\nf 26604 27060 27059\nf 26605 26606 27061\nf 26605 27061 27060\nf 26606 26607 27062\nf 26606 27062 27061\nf 26607 26608 27063\nf 26607 27063 27062\nf 26608 26609 27064\nf 26608 27064 27063\nf 26609 26610 27065\nf 26609 27065 27064\nf 26610 26611 27066\nf 26610 27066 27065\nf 26611 26612 27067\nf 26611 27067 27066\nf 26612 26613 27068\nf 26612 27068 27067\nf 26613 26614 27069\nf 26613 27069 27068\nf 26614 26615 27070\nf 26614 27070 27069\nf 26615 26616 27071\nf 26615 27071 27070\nf 26616 26617 27072\nf 26616 27072 27071\nf 26617 26618 27073\nf 26617 27073 27072\nf 26618 26619 27074\nf 26618 27074 27073\nf 26619 26620 27075\nf 26619 27075 27074\nf 26620 26621 27076\nf 26620 27076 27075\nf 26621 26622 27077\nf 26621 27077 27076\nf 26622 26623 27078\nf 26622 27078 27077\nf 26623 26624 27079\nf 26623 27079 27078\nf 26624 26625 27080\nf 26624 27080 27079\nf 26625 26626 27081\nf 26625 27081 27080\nf 26626 26627 27082\nf 26626 27082 27081\nf 26627 26628 27083\nf 26627 27083 27082\nf 26628 26629 27084\nf 26628 27084 27083\nf 26629 26630 27085\nf 26629 27085 27084\nf 26630 26631 27086\nf 26630 27086 27085\nf 26631 26632 27087\nf 26631 27087 27086\nf 26632 26633 27088\nf 26632 27088 27087\nf 26633 26634 27089\nf 26633 27089 27088\nf 26634 26635 27090\nf 26634 27090 27089\nf 26635 26636 27091\nf 26635 27091 27090\nf 26636 26637 27092\nf 26636 27092 27091\nf 26637 26638 27093\nf 26637 27093 27092\nf 26638 26639 27094\nf 26638 27094 27093\nf 26639 26640 27095\nf 26639 27095 27094\nf 26640 26641 27096\nf 26640 27096 27095\nf 26641 26642 27097\nf 26641 27097 27096\nf 26642 26643 27098\nf 26642 27098 27097\nf 26643 26644 27099\nf 26643 27099 27098\nf 26644 26645 27100\nf 26644 27100 27099\nf 26645 26646 27101\nf 26645 27101 27100\nf 26646 26647 27102\nf 26646 27102 27101\nf 26647 26648 27103\nf 26647 27103 27102\nf 26648 26649 27104\nf 26648 27104 27103\nf 26649 26650 27105\nf 26649 27105 27104\nf 26650 26651 27106\nf 26650 27106 27105\nf 26651 26652 27107\nf 26651 27107 27106\nf 26652 26653 27108\nf 26652 27108 27107\nf 26653 26654 27109\nf 26653 27109 27108\nf 26654 26655 27110\nf 26654 27110 27109\nf 26655 26656 27111\nf 26655 27111 27110\nf 26656 26657 27112\nf 26656 27112 27111\nf 26657 26658 27113\nf 26657 27113 27112\nf 26658 26659 27114\nf 26658 27114 27113\nf 26659 26660 27115\nf 26659 27115 27114\nf 26660 26661 27116\nf 26660 27116 27115\nf 26661 26662 27117\nf 26661 27117 27116\nf 26662 26663 27118\nf 26662 27118 27117\nf 26663 26664 27119\nf 26663 27119 27118\nf 26664 26665 27120\nf 26664 27120 27119\nf 26665 26666 27121\nf 26665 27121 27120\nf 26666 26667 27122\nf 26666 27122 27121\nf 26667 26668 27123\nf 26667 27123 27122\nf 26668 26670 27124\nf 26668 27124 27123\nf 26669 27125 26670\nf 26670 27125 27126\nf 26670 27126 27124\nf 26671 26673 27129\nf 26671 27129 27127\nf 26672 27040 27128\nf 26672 27128 26674\nf 26673 26676 27132\nf 26673 27132 27129\nf 26674 27128 27130\nf 26674 27130 27131\nf 26674 27131 26675\nf 26675 27131 26678\nf 26676 26677 27134\nf 26676 27134 27132\nf 26677 26679 26680\nf 26677 26680 27134\nf 26678 27131 27133\nf 26678 27133 26681\nf 26679 26683 27138\nf 26679 27138 26680\nf 26680 27135 27134\nf 26680 27138 27135\nf 26681 27133 27136\nf 26681 27136 26685\nf 26682 26694 27148\nf 26682 27137 27139\nf 26682 27139 26684\nf 26682 27148 27137\nf 26683 26684 27138\nf 26684 27139 27138\nf 26685 27136 27140\nf 26685 27140 27141\nf 26685 27141 26686\nf 26686 27141 27142\nf 26686 27142 26687\nf 26687 27142 26696\nf 26688 26779 26781\nf 26688 26781 27235\nf 26688 27143 26689\nf 26688 27235 27143\nf 26689 27143 27144\nf 26689 27144 26690\nf 26690 27144 27145\nf 26690 27145 26691\nf 26691 27145 27146\nf 26691 27146 26692\nf 26692 27146 27147\nf 26692 27147 26693\nf 26693 27147 27149\nf 26693 27149 26695\nf 26694 26695 27148\nf 26695 27149 27148\nf 26696 27142 27150\nf 26696 27150 27151\nf 26696 27151 26697\nf 26697 27151 27152\nf 26697 27152 26698\nf 26698 27152 26782\nf 26699 26788 26790\nf 26699 26790 27153\nf 26699 27153 27154\nf 26699 27154 27155\nf 26699 27155 26700\nf 26700 27155 27156\nf 26700 27156 26701\nf 26701 27156 27157\nf 26701 27157 26702\nf 26702 27157 27158\nf 26702 27158 26703\nf 26703 27158 27159\nf 26703 27159 26704\nf 26704 27159 27160\nf 26704 27160 26705\nf 26705 27160 27161\nf 26705 27161 26706\nf 26706 27161 27162\nf 26706 27162 26707\nf 26707 27162 27163\nf 26707 27163 26708\nf 26708 27163 27164\nf 26708 27164 26709\nf 26709 27164 27165\nf 26709 27165 26710\nf 26710 27165 27166\nf 26710 27166 26711\nf 26711 27166 27167\nf 26711 27167 26712\nf 26712 27167 27168\nf 26712 27168 26713\nf 26713 27168 27169\nf 26713 27169 26714\nf 26714 27169 27170\nf 26714 27170 26715\nf 26715 27170 27171\nf 26715 27171 26716\nf 26716 27171 27172\nf 26716 27172 26717\nf 26717 27172 27173\nf 26717 27173 26718\nf 26718 27173 27174\nf 26718 27174 26719\nf 26719 27174 27175\nf 26719 27175 26720\nf 26720 27175 27176\nf 26720 27176 26721\nf 26721 27176 27177\nf 26721 27177 26722\nf 26722 27177 27178\nf 26722 27178 26723\nf 26723 27178 27179\nf 26723 27179 26724\nf 26724 27179 27180\nf 26724 27180 26725\nf 26725 27180 27181\nf 26725 27181 26726\nf 26726 27181 27182\nf 26726 27182 26727\nf 26727 27182 27183\nf 26727 27183 26728\nf 26728 27183 27184\nf 26728 27184 26729\nf 26729 27184 27185\nf 26729 27185 26730\nf 26730 27185 27186\nf 26730 27186 26731\nf 26731 27186 27187\nf 26731 27187 26732\nf 26732 27187 27188\nf 26732 27188 26733\nf 26733 27188 27189\nf 26733 27189 26734\nf 26734 27189 27190\nf 26734 27190 26735\nf 26735 27190 27191\nf 26735 27191 26736\nf 26736 27191 27192\nf 26736 27192 26737\nf 26737 27192 27193\nf 26737 27193 26738\nf 26738 27193 27194\nf 26738 27194 26739\nf 26739 27194 27195\nf 26739 27195 26740\nf 26740 27195 27196\nf 26740 27196 26741\nf 26741 27196 27197\nf 26741 27197 26742\nf 26742 27197 27198\nf 26742 27198 26743\nf 26743 27198 27199\nf 26743 27199 26744\nf 26744 27199 27200\nf 26744 27200 26745\nf 26745 27200 27201\nf 26745 27201 26746\nf 26746 27201 27202\nf 26746 27202 26747\nf 26747 27202 27203\nf 26747 27203 26748\nf 26748 27203 27204\nf 26748 27204 26749\nf 26749 27204 27205\nf 26749 27205 26750\nf 26750 27205 27206\nf 26750 27206 26751\nf 26751 27206 27207\nf 26751 27207 26752\nf 26752 27207 27208\nf 26752 27208 26753\nf 26753 27208 27209\nf 26753 27209 26754\nf 26754 27209 27210\nf 26754 27210 26755\nf 26755 27210 27211\nf 26755 27211 26756\nf 26756 27211 27212\nf 26756 27212 26757\nf 26757 27212 27213\nf 26757 27213 26758\nf 26758 27213 27214\nf 26758 27214 26759\nf 26759 27214 27215\nf 26759 27215 26760\nf 26760 27215 27216\nf 26760 27216 26761\nf 26761 27216 27217\nf 26761 27217 26762\nf 26762 27217 27218\nf 26762 27218 26763\nf 26763 27218 27219\nf 26763 27219 26764\nf 26764 27219 27220\nf 26764 27220 26765\nf 26765 27220 27221\nf 26765 27221 26766\nf 26766 27221 27222\nf 26766 27222 26767\nf 26767 27222 27223\nf 26767 27223 26768\nf 26768 27223 27224\nf 26768 27224 26769\nf 26769 27224 27225\nf 26769 27225 26770\nf 26770 27225 27226\nf 26770 27226 26771\nf 26771 27226 27227\nf 26771 27227 26772\nf 26772 27227 27228\nf 26772 27228 26773\nf 26773 27228 27229\nf 26773 27229 26774\nf 26774 27229 27230\nf 26774 27230 26775\nf 26775 27230 27231\nf 26775 27231 26776\nf 26776 27231 27232\nf 26776 27232 26777\nf 26777 27232 27233\nf 26777 27233 26778\nf 26778 27233 27234\nf 26778 27234 26780\nf 26779 26780 26781\nf 26780 27234 27236\nf 26780 27236 26781\nf 26781 27236 27235\nf 26782 27152 27237\nf 26782 27237 27238\nf 26782 27238 26783\nf 26783 27238 27239\nf 26783 27239 26784\nf 26784 27239 27240\nf 26784 27240 26785\nf 26785 27240 27241\nf 26785 27241 26786\nf 26786 27241 27243\nf 26786 27243 26787\nf 26787 27243 26789\nf 26788 26789 26790\nf 26789 27242 26790\nf 26789 27243 27242\nf 26790 27242 27153\nf 26791 26792 27244\nf 26791 26796 26795\nf 26791 27244 27246\nf 26791 27246 26796\nf 26792 26793 27244\nf 26793 26794 27245\nf 26793 27245 27244\nf 26794 26797 26798\nf 26794 26798 27245\nf 26795 26796 27253\nf 26795 27253 26800\nf 26796 27246 27247\nf 26796 27247 27253\nf 26797 26799 27251\nf 26797 27251 26798\nf 26798 27249 27245\nf 26798 27251 27249\nf 26799 26801 27252\nf 26799 27252 27251\nf 26800 27253 26803\nf 26801 26802 26806\nf 26801 26806 27258\nf 26801 27254 27252\nf 26801 27258 27254\nf 26802 26805 26806\nf 26803 27253 27256\nf 26803 27256 26804\nf 26804 27256 27257\nf 26804 27257 27260\nf 26804 27260 26807\nf 26805 26808 27262\nf 26805 27259 26806\nf 26805 27262 27259\nf 26806 27259 27258\nf 26807 27260 26810\nf 26808 26809 27263\nf 26808 27263 27262\nf 26809 26811 27263\nf 26810 27260 27264\nf 26810 27264 26812\nf 26811 26813 27267\nf 26811 27265 27263\nf 26811 27267 27265\nf 26812 27264 27266\nf 26812 27266 26814\nf 26813 26815 27269\nf 26813 27269 27267\nf 26814 27266 27268\nf 26814 27268 26816\nf 26815 26817 27271\nf 26815 27271 27269\nf 26816 27268 27270\nf 26816 27270 26818\nf 26817 26819 27273\nf 26817 27273 27271\nf 26818 27270 27272\nf 26818 27272 26820\nf 26819 26821 27275\nf 26819 27275 27273\nf 26820 27272 27274\nf 26820 27274 26822\nf 26821 26823 27277\nf 26821 27277 27275\nf 26822 27274 27276\nf 26822 27276 26824\nf 26823 26825 27279\nf 26823 27279 27277\nf 26824 27276 27278\nf 26824 27278 26826\nf 26825 26827 27281\nf 26825 27281 27279\nf 26826 27278 27280\nf 26826 27280 26828\nf 26827 26829 27283\nf 26827 27283 27281\nf 26828 27280 27282\nf 26828 27282 26830\nf 26829 26832 27286\nf 26829 27286 27283\nf 26830 27282 27284\nf 26830 27284 27285\nf 26830 27285 26831\nf 26831 27285 26834\nf 26832 26833 27286\nf 26833 26835 27290\nf 26833 27287 27286\nf 26833 27290 27287\nf 26834 27285 27289\nf 26834 27289 26836\nf 26835 26837 27292\nf 26835 27292 27290\nf 26836 27289 27291\nf 26836 27291 26838\nf 26837 26840 27292\nf 26838 27291 27294\nf 26838 27294 27295\nf 26838 27295 26839\nf 26839 27295 26843\nf 26840 26841 26842\nf 26840 26842 27292\nf 26841 26844 27296\nf 26841 27296 26842\nf 26842 27293 27292\nf 26842 27296 27293\nf 26843 27295 27297\nf 26843 27297 26846\nf 26844 26845 27298\nf 26844 27298 27296\nf 26845 26847 27302\nf 26845 27299 27298\nf 26845 27302 27299\nf 26846 27297 27300\nf 26846 27300 26848\nf 26847 26852 27302\nf 26848 26850 26849\nf 26848 27300 27301\nf 26848 27301 26850\nf 26849 26850 27306\nf 26849 27306 26851\nf 26850 27301 27304\nf 26850 27304 27306\nf 26851 27306 26853\nf 26852 26853 26854\nf 26852 26854 27302\nf 26853 27305 26854\nf 26853 27306 27305\nf 26854 27303 27302\nf 26854 27305 27303\nf 26855 26856 26861\nf 26855 26859 26857\nf 26855 26861 26859\nf 26856 26860 26861\nf 26857 26859 26858\nf 26858 26859 27308\nf 26858 27307 27310\nf 26858 27308 27307\nf 26858 27310 26862\nf 26859 26861 27308\nf 26860 26864 27312\nf 26860 27309 26861\nf 26860 27312 27309\nf 26861 27309 27308\nf 26862 27310 26863\nf 26863 27310 27311\nf 26863 27311 27314\nf 26863 27314 26866\nf 26864 26865 27313\nf 26864 27313 27312\nf 26865 26867 27313\nf 26866 27314 26868\nf 26867 26869 27317\nf 26867 27315 27313\nf 26867 27317 27315\nf 26868 27314 27316\nf 26868 27316 26870\nf 26869 26871 27319\nf 26869 27319 27317\nf 26870 27316 27318\nf 26870 27318 26872\nf 26871 26874 27322\nf 26871 27322 27319\nf 26872 27318 27320\nf 26872 27320 26873\nf 26873 27320 27321\nf 26873 27321 27324\nf 26873 27324 26876\nf 26874 26875 27323\nf 26874 27323 27322\nf 26875 26878 27323\nf 26876 27324 27325\nf 26876 27325 26877\nf 26877 27325 26879\nf 26878 26880 27328\nf 26878 27326 27323\nf 26878 27328 27326\nf 26879 27325 27327\nf 26879 27327 26881\nf 26880 26882 27330\nf 26880 27330 27328\nf 26881 27327 27329\nf 26881 27329 26884\nf 26882 26883 27330\nf 26883 26885 27334\nf 26883 27331 27330\nf 26883 27334 27331\nf 26884 27329 27333\nf 26884 27333 26886\nf 26885 26887 27336\nf 26885 27336 27334\nf 26886 27333 27335\nf 26886 27335 26888\nf 26887 26889 27338\nf 26887 27338 27336\nf 26888 27335 27337\nf 26888 27337 26890\nf 26889 26891 27340\nf 26889 27340 27338\nf 26890 27337 27339\nf 26890 27339 26893\nf 26891 26892 27340\nf 26892 26894 27343\nf 26892 27341 27340\nf 26892 27343 27341\nf 26893 27339 27342\nf 26893 27342 26895\nf 26894 26896 27346\nf 26894 27346 27343\nf 26895 27342 27345\nf 26895 27345 26897\nf 26896 26899 27348\nf 26896 27348 27346\nf 26897 26902 26898\nf 26897 27345 27347\nf 26897 27347 27350\nf 26897 27350 26902\nf 26898 26902 26901\nf 26899 26900 27348\nf 26900 26903 27352\nf 26900 27349 27348\nf 26900 27352 27349\nf 26901 26902 27351\nf 26901 27351 27354\nf 26901 27354 26905\nf 26902 27350 27351\nf 26903 26904 27357\nf 26903 27357 27352\nf 26904 26906 26908\nf 26904 26908 27357\nf 26905 27354 27356\nf 26905 27356 26907\nf 26906 26907 26908\nf 26907 27356 27358\nf 26907 27358 26908\nf 26908 27358 27357\nf 26909 26910 27359\nf 26909 26921 26920\nf 26909 27359 27368\nf 26909 27368 26921\nf 26910 26911 27359\nf 26911 26912 27360\nf 26911 27360 27359\nf 26912 26913 27361\nf 26912 27361 27360\nf 26913 26914 27362\nf 26913 27362 27361\nf 26914 26915 27363\nf 26914 27363 27362\nf 26915 26916 27364\nf 26915 27364 27363\nf 26916 26917 27365\nf 26916 27365 27364\nf 26917 26918 27366\nf 26917 27366 27365\nf 26918 26919 27367\nf 26918 27367 27366\nf 26919 26922 26923\nf 26919 26923 27367\nf 26920 26921 27375\nf 26920 27375 26926\nf 26921 27368 27369\nf 26921 27369 27375\nf 26922 26924 27372\nf 26922 27372 26923\nf 26923 27371 27367\nf 26923 27372 27371\nf 26924 26925 27373\nf 26924 27373 27372\nf 26925 26927 27374\nf 26925 27374 27373\nf 26926 27375 26930\nf 26927 26928 27377\nf 26927 27376 27374\nf 26927 27377 27376\nf 26928 26929 27377\nf 26929 26932 27379\nf 26929 27378 27377\nf 26929 27379 27378\nf 26930 27375 27380\nf 26930 27380 27381\nf 26930 27381 26931\nf 26931 27381 26936\nf 26932 26933 26934\nf 26932 26934 27379\nf 26933 26935 27383\nf 26933 27383 26934\nf 26934 27382 27379\nf 26934 27383 27382\nf 26935 26937 27384\nf 26935 27384 27383\nf 26936 27381 27385\nf 26936 27385 26941\nf 26937 26938 26939\nf 26937 26939 27384\nf 26938 26940 27387\nf 26938 27387 26939\nf 26939 27386 27384\nf 26939 27387 27386\nf 26940 26943 27389\nf 26940 27389 27387\nf 26941 27385 27390\nf 26941 27390 27391\nf 26941 27391 26942\nf 26942 27391 26946\nf 26943 26944 26945\nf 26943 26945 27389\nf 26944 26949 26945\nf 26945 26949 27393\nf 26945 27393 27389\nf 26946 27391 27394\nf 26946 27394 27395\nf 26946 27395 26947\nf 26947 27395 27396\nf 26947 27396 26948\nf 26948 27396 26951\nf 26949 26950 27397\nf 26949 27397 27393\nf 26950 26954 27403\nf 26950 27398 27397\nf 26950 27403 27398\nf 26951 27396 27399\nf 26951 27399 27400\nf 26951 27400 26952\nf 26952 27400 27401\nf 26952 27401 26953\nf 26953 27401 26956\nf 26954 26955 27403\nf 26955 26961 26963\nf 26955 26963 27402\nf 26955 27402 27404\nf 26955 27404 27403\nf 26956 27401 27405\nf 26956 27405 27406\nf 26956 27406 26957\nf 26957 27406 27407\nf 26957 27407 26958\nf 26958 27407 26964\nf 26959 26971 26973\nf 26959 26973 27408\nf 26959 27408 27409\nf 26959 27409 27411\nf 26959 27411 26960\nf 26960 27411 26962\nf 26961 26962 26963\nf 26962 27410 26963\nf 26962 27411 27410\nf 26963 27410 27402\nf 26964 27407 27412\nf 26964 27412 27413\nf 26964 27413 26965\nf 26965 27413 27415\nf 26965 27415 26966\nf 26966 27415 27417\nf 26966 27417 26967\nf 26967 27417 27418\nf 26967 27418 26968\nf 26968 27418 27419\nf 26968 27419 26969\nf 26969 27419 27422\nf 26969 27422 26970\nf 26970 27422 26972\nf 26971 26972 26973\nf 26972 27421 26973\nf 26972 27422 27421\nf 26973 27421 27408\nf 26974 26975 27424\nf 26974 26982 26981\nf 26974 27424 27430\nf 26974 27430 26982\nf 26975 26976 27424\nf 26976 26977 27425\nf 26976 27425 27424\nf 26977 26983 27426\nf 26977 27426 27425\nf 26978 26979 27427\nf 26978 27427 27435\nf 26978 27435 26986\nf 26979 26980 27428\nf 26979 27428 27427\nf 26980 26988 27429\nf 26980 27429 27428\nf 26981 26982 27439\nf 26981 27439 26990\nf 26982 27430 27431\nf 26982 27431 27439\nf 26983 26984 27433\nf 26983 27432 27426\nf 26983 27433 27432\nf 26984 26985 27433\nf 26985 26991 27434\nf 26985 27434 27433\nf 26986 27435 26987\nf 26987 27435 27436\nf 26987 27436 27441\nf 26987 27441 26992\nf 26988 26989 27438\nf 26988 27437 27429\nf 26988 27438 27437\nf 26989 26993 27438\nf 26990 27439 26994\nf 26991 26995 27444\nf 26991 27440 27434\nf 26991 27444 27440\nf 26992 27441 26996\nf 26993 26997 27446\nf 26993 27442 27438\nf 26993 27446 27442\nf 26994 27439 27443\nf 26994 27443 26998\nf 26995 26999 27448\nf 26995 27448 27444\nf 26996 27441 27445\nf 26996 27445 27001\nf 26997 27002 27451\nf 26997 27451 27446\nf 26998 27443 27447\nf 26998 27447 27004\nf 26999 27000 27449\nf 26999 27449 27448\nf 27000 27005 27449\nf 27001 27445 27450\nf 27001 27450 27006\nf 27002 27003 27452\nf 27002 27452 27451\nf 27003 27007 27452\nf 27004 27447 27453\nf 27004 27453 27008\nf 27005 27009 27460\nf 27005 27454 27449\nf 27005 27460 27454\nf 27006 27450 27455\nf 27006 27455 27010\nf 27007 27011 27456\nf 27007 27456 27452\nf 27008 27453 27459\nf 27008 27459 27013\nf 27009 27014 27464\nf 27009 27464 27460\nf 27010 27455 27461\nf 27010 27461 27015\nf 27011 27012 27456\nf 27011 27016 27018\nf 27011 27018 27012\nf 27012 27018 27462\nf 27012 27457 27456\nf 27012 27462 27457\nf 27013 27459 27463\nf 27013 27463 27019\nf 27014 27020 27468\nf 27014 27468 27464\nf 27015 27461 27465\nf 27015 27465 27021\nf 27016 27017 27018\nf 27017 27022 27466\nf 27017 27466 27018\nf 27018 27466 27462\nf 27019 27463 27467\nf 27019 27467 27024\nf 27020 27025 27472\nf 27020 27472 27468\nf 27021 27465 27469\nf 27021 27469 27026\nf 27022 27023 27028\nf 27022 27028 27474\nf 27022 27470 27466\nf 27022 27474 27470\nf 27023 27027 27028\nf 27024 27467 27471\nf 27024 27471 27029\nf 27025 27030 27477\nf 27025 27477 27472\nf 27026 27469 27473\nf 27026 27473 27031\nf 27027 27032 27479\nf 27027 27475 27028\nf 27027 27479 27475\nf 27028 27475 27474\nf 27029 27471 27476\nf 27029 27476 27037\nf 27030 27039 27486\nf 27030 27486 27477\nf 27031 27473 27478\nf 27031 27478 27040\nf 27032 27033 27480\nf 27032 27480 27479\nf 27033 27034 27480\nf 27034 27035 27481\nf 27034 27481 27480\nf 27035 27041 27482\nf 27035 27482 27481\nf 27036 27038 27483\nf 27036 27483 27572\nf 27036 27572 27125\nf 27037 27476 27484\nf 27037 27484 27038\nf 27038 27484 27485\nf 27038 27485 27483\nf 27039 27127 27574\nf 27039 27574 27486\nf 27040 27478 27487\nf 27040 27487 27128\nf 27041 27042 27489\nf 27041 27488 27482\nf 27041 27489 27488\nf 27042 27043 27489\nf 27043 27044 27490\nf 27043 27490 27489\nf 27044 27045 27491\nf 27044 27491 27490\nf 27045 27046 27492\nf 27045 27492 27491\nf 27046 27047 27493\nf 27046 27493 27492\nf 27047 27048 27494\nf 27047 27494 27493\nf 27048 27049 27495\nf 27048 27495 27494\nf 27049 27050 27496\nf 27049 27496 27495\nf 27050 27051 27497\nf 27050 27497 27496\nf 27051 27052 27498\nf 27051 27498 27497\nf 27052 27053 27499\nf 27052 27499 27498\nf 27053 27054 27500\nf 27053 27500 27499\nf 27054 27055 27501\nf 27054 27501 27500\nf 27055 27056 27502\nf 27055 27502 27501\nf 27056 27057 27503\nf 27056 27503 27502\nf 27057 27058 27504\nf 27057 27504 27503\nf 27058 27059 27505\nf 27058 27505 27504\nf 27059 27060 27506\nf 27059 27506 27505\nf 27060 27061 27507\nf 27060 27507 27506\nf 27061 27062 27508\nf 27061 27508 27507\nf 27062 27063 27509\nf 27062 27509 27508\nf 27063 27064 27510\nf 27063 27510 27509\nf 27064 27065 27511\nf 27064 27511 27510\nf 27065 27066 27512\nf 27065 27512 27511\nf 27066 27067 27513\nf 27066 27513 27512\nf 27067 27068 27514\nf 27067 27514 27513\nf 27068 27069 27515\nf 27068 27515 27514\nf 27069 27070 27516\nf 27069 27516 27515\nf 27070 27071 27517\nf 27070 27517 27516\nf 27071 27072 27518\nf 27071 27518 27517\nf 27072 27073 27519\nf 27072 27519 27518\nf 27073 27074 27520\nf 27073 27520 27519\nf 27074 27075 27521\nf 27074 27521 27520\nf 27075 27076 27522\nf 27075 27522 27521\nf 27076 27077 27523\nf 27076 27523 27522\nf 27077 27078 27524\nf 27077 27524 27523\nf 27078 27079 27525\nf 27078 27525 27524\nf 27079 27080 27526\nf 27079 27526 27525\nf 27080 27081 27527\nf 27080 27527 27526\nf 27081 27082 27528\nf 27081 27528 27527\nf 27082 27083 27529\nf 27082 27529 27528\nf 27083 27084 27530\nf 27083 27530 27529\nf 27084 27085 27531\nf 27084 27531 27530\nf 27085 27086 27532\nf 27085 27532 27531\nf 27086 27087 27533\nf 27086 27533 27532\nf 27087 27088 27534\nf 27087 27534 27533\nf 27088 27089 27535\nf 27088 27535 27534\nf 27089 27090 27536\nf 27089 27536 27535\nf 27090 27091 27537\nf 27090 27537 27536\nf 27091 27092 27538\nf 27091 27538 27537\nf 27092 27093 27539\nf 27092 27539 27538\nf 27093 27094 27540\nf 27093 27540 27539\nf 27094 27095 27541\nf 27094 27541 27540\nf 27095 27096 27542\nf 27095 27542 27541\nf 27096 27097 27543\nf 27096 27543 27542\nf 27097 27098 27544\nf 27097 27544 27543\nf 27098 27099 27545\nf 27098 27545 27544\nf 27099 27100 27546\nf 27099 27546 27545\nf 27100 27101 27547\nf 27100 27547 27546\nf 27101 27102 27548\nf 27101 27548 27547\nf 27102 27103 27549\nf 27102 27549 27548\nf 27103 27104 27550\nf 27103 27550 27549\nf 27104 27105 27551\nf 27104 27551 27550\nf 27105 27106 27552\nf 27105 27552 27551\nf 27106 27107 27553\nf 27106 27553 27552\nf 27107 27108 27554\nf 27107 27554 27553\nf 27108 27109 27555\nf 27108 27555 27554\nf 27109 27110 27556\nf 27109 27556 27555\nf 27110 27111 27557\nf 27110 27557 27556\nf 27111 27112 27558\nf 27111 27558 27557\nf 27112 27113 27559\nf 27112 27559 27558\nf 27113 27114 27560\nf 27113 27560 27559\nf 27114 27115 27561\nf 27114 27561 27560\nf 27115 27116 27562\nf 27115 27562 27561\nf 27116 27117 27563\nf 27116 27563 27562\nf 27117 27118 27564\nf 27117 27564 27563\nf 27118 27119 27565\nf 27118 27565 27564\nf 27119 27120 27566\nf 27119 27566 27565\nf 27120 27121 27567\nf 27120 27567 27566\nf 27121 27122 27568\nf 27121 27568 27567\nf 27122 27123 27569\nf 27122 27569 27568\nf 27123 27124 27570\nf 27123 27570 27569\nf 27124 27126 27571\nf 27124 27571 27570\nf 27125 27572 27126\nf 27126 27572 27573\nf 27126 27573 27571\nf 27127 27129 27577\nf 27127 27577 27574\nf 27128 27487 27576\nf 27128 27576 27130\nf 27129 27132 27580\nf 27129 27580 27577\nf 27130 27576 27578\nf 27130 27578 27579\nf 27130 27579 27131\nf 27131 27579 27133\nf 27132 27134 27582\nf 27132 27582 27580\nf 27133 27579 27581\nf 27133 27581 27136\nf 27134 27135 27582\nf 27135 27138 27586\nf 27135 27583 27582\nf 27135 27586 27583\nf 27136 27581 27584\nf 27136 27584 27140\nf 27137 27148 27596\nf 27137 27585 27587\nf 27137 27587 27139\nf 27137 27596 27585\nf 27138 27139 27586\nf 27139 27587 27586\nf 27140 27584 27588\nf 27140 27588 27589\nf 27140 27589 27141\nf 27141 27589 27590\nf 27141 27590 27142\nf 27142 27590 27150\nf 27143 27235 27683\nf 27143 27591 27592\nf 27143 27592 27144\nf 27143 27683 27591\nf 27144 27592 27593\nf 27144 27593 27145\nf 27145 27593 27594\nf 27145 27594 27146\nf 27146 27594 27595\nf 27146 27595 27147\nf 27147 27595 27597\nf 27147 27597 27149\nf 27148 27149 27596\nf 27149 27597 27596\nf 27150 27590 27598\nf 27150 27598 27599\nf 27150 27599 27151\nf 27151 27599 27600\nf 27151 27600 27152\nf 27152 27600 27237\nf 27153 27242 27691\nf 27153 27601 27602\nf 27153 27602 27154\nf 27153 27691 27601\nf 27154 27602 27603\nf 27154 27603 27155\nf 27155 27603 27604\nf 27155 27604 27156\nf 27156 27604 27605\nf 27156 27605 27157\nf 27157 27605 27606\nf 27157 27606 27158\nf 27158 27606 27607\nf 27158 27607 27159\nf 27159 27607 27608\nf 27159 27608 27160\nf 27160 27608 27609\nf 27160 27609 27161\nf 27161 27609 27610\nf 27161 27610 27162\nf 27162 27610 27611\nf 27162 27611 27163\nf 27163 27611 27612\nf 27163 27612 27164\nf 27164 27612 27613\nf 27164 27613 27165\nf 27165 27613 27614\nf 27165 27614 27166\nf 27166 27614 27615\nf 27166 27615 27167\nf 27167 27615 27616\nf 27167 27616 27168\nf 27168 27616 27617\nf 27168 27617 27169\nf 27169 27617 27618\nf 27169 27618 27170\nf 27170 27618 27619\nf 27170 27619 27171\nf 27171 27619 27620\nf 27171 27620 27172\nf 27172 27620 27621\nf 27172 27621 27173\nf 27173 27621 27622\nf 27173 27622 27174\nf 27174 27622 27623\nf 27174 27623 27175\nf 27175 27623 27624\nf 27175 27624 27176\nf 27176 27624 27625\nf 27176 27625 27177\nf 27177 27625 27626\nf 27177 27626 27178\nf 27178 27626 27627\nf 27178 27627 27179\nf 27179 27627 27628\nf 27179 27628 27180\nf 27180 27628 27629\nf 27180 27629 27181\nf 27181 27629 27630\nf 27181 27630 27182\nf 27182 27630 27631\nf 27182 27631 27183\nf 27183 27631 27632\nf 27183 27632 27184\nf 27184 27632 27633\nf 27184 27633 27185\nf 27185 27633 27634\nf 27185 27634 27186\nf 27186 27634 27635\nf 27186 27635 27187\nf 27187 27635 27636\nf 27187 27636 27188\nf 27188 27636 27637\nf 27188 27637 27189\nf 27189 27637 27638\nf 27189 27638 27190\nf 27190 27638 27639\nf 27190 27639 27191\nf 27191 27639 27640\nf 27191 27640 27192\nf 27192 27640 27641\nf 27192 27641 27193\nf 27193 27641 27642\nf 27193 27642 27194\nf 27194 27642 27643\nf 27194 27643 27195\nf 27195 27643 27644\nf 27195 27644 27196\nf 27196 27644 27645\nf 27196 27645 27197\nf 27197 27645 27646\nf 27197 27646 27198\nf 27198 27646 27647\nf 27198 27647 27199\nf 27199 27647 27648\nf 27199 27648 27200\nf 27200 27648 27649\nf 27200 27649 27201\nf 27201 27649 27650\nf 27201 27650 27202\nf 27202 27650 27651\nf 27202 27651 27203\nf 27203 27651 27652\nf 27203 27652 27204\nf 27204 27652 27653\nf 27204 27653 27205\nf 27205 27653 27654\nf 27205 27654 27206\nf 27206 27654 27655\nf 27206 27655 27207\nf 27207 27655 27656\nf 27207 27656 27208\nf 27208 27656 27657\nf 27208 27657 27209\nf 27209 27657 27658\nf 27209 27658 27210\nf 27210 27658 27659\nf 27210 27659 27211\nf 27211 27659 27660\nf 27211 27660 27212\nf 27212 27660 27661\nf 27212 27661 27213\nf 27213 27661 27662\nf 27213 27662 27214\nf 27214 27662 27663\nf 27214 27663 27215\nf 27215 27663 27664\nf 27215 27664 27216\nf 27216 27664 27665\nf 27216 27665 27217\nf 27217 27665 27666\nf 27217 27666 27218\nf 27218 27666 27667\nf 27218 27667 27219\nf 27219 27667 27668\nf 27219 27668 27220\nf 27220 27668 27669\nf 27220 27669 27221\nf 27221 27669 27670\nf 27221 27670 27222\nf 27222 27670 27671\nf 27222 27671 27223\nf 27223 27671 27672\nf 27223 27672 27224\nf 27224 27672 27673\nf 27224 27673 27225\nf 27225 27673 27674\nf 27225 27674 27226\nf 27226 27674 27675\nf 27226 27675 27227\nf 27227 27675 27676\nf 27227 27676 27228\nf 27228 27676 27677\nf 27228 27677 27229\nf 27229 27677 27678\nf 27229 27678 27230\nf 27230 27678 27679\nf 27230 27679 27231\nf 27231 27679 27680\nf 27231 27680 27232\nf 27232 27680 27681\nf 27232 27681 27233\nf 27233 27681 27682\nf 27233 27682 27234\nf 27234 27682 27684\nf 27234 27684 27236\nf 27235 27236 27683\nf 27236 27684 27683\nf 27237 27600 27686\nf 27237 27686 27687\nf 27237 27687 27238\nf 27238 27687 27688\nf 27238 27688 27239\nf 27239 27688 27689\nf 27239 27689 27240\nf 27240 27689 27690\nf 27240 27690 27241\nf 27241 27690 27692\nf 27241 27692 27243\nf 27242 27243 27691\nf 27243 27692 27691\nf 27244 27245 27250\nf 27244 27248 27246\nf 27244 27250 27248\nf 27245 27249 27250\nf 27246 27248 27247\nf 27247 27248 27694\nf 27247 27693 27697\nf 27247 27694 27693\nf 27247 27697 27253\nf 27248 27250 27694\nf 27249 27251 27695\nf 27249 27695 27250\nf 27250 27695 27694\nf 27251 27252 27696\nf 27251 27696 27695\nf 27252 27254 27255\nf 27252 27255 27696\nf 27253 27697 27256\nf 27254 27258 27701\nf 27254 27699 27255\nf 27254 27701 27699\nf 27255 27698 27696\nf 27255 27699 27698\nf 27256 27697 27700\nf 27256 27700 27703\nf 27256 27703 27257\nf 27257 27261 27260\nf 27257 27703 27261\nf 27258 27259 27702\nf 27258 27702 27701\nf 27259 27262 27702\nf 27260 27261 27707\nf 27260 27707 27264\nf 27261 27703 27704\nf 27261 27704 27707\nf 27262 27263 27706\nf 27262 27705 27702\nf 27262 27706 27705\nf 27263 27265 27706\nf 27264 27707 27266\nf 27265 27267 27711\nf 27265 27708 27706\nf 27265 27711 27708\nf 27266 27707 27710\nf 27266 27710 27268\nf 27267 27269 27713\nf 27267 27713 27711\nf 27268 27710 27712\nf 27268 27712 27270\nf 27269 27271 27715\nf 27269 27715 27713\nf 27270 27712 27714\nf 27270 27714 27272\nf 27271 27273 27717\nf 27271 27717 27715\nf 27272 27714 27716\nf 27272 27716 27274\nf 27273 27275 27719\nf 27273 27719 27717\nf 27274 27716 27718\nf 27274 27718 27276\nf 27275 27277 27721\nf 27275 27721 27719\nf 27276 27718 27720\nf 27276 27720 27278\nf 27277 27279 27723\nf 27277 27723 27721\nf 27278 27720 27722\nf 27278 27722 27280\nf 27279 27281 27725\nf 27279 27725 27723\nf 27280 27722 27724\nf 27280 27724 27282\nf 27281 27283 27727\nf 27281 27727 27725\nf 27282 27724 27726\nf 27282 27726 27284\nf 27283 27286 27727\nf 27284 27726 27730\nf 27284 27730 27731\nf 27284 27731 27285\nf 27285 27731 27289\nf 27286 27287 27288\nf 27286 27288 27727\nf 27287 27290 27732\nf 27287 27732 27288\nf 27288 27728 27727\nf 27288 27732 27728\nf 27289 27731 27733\nf 27289 27733 27291\nf 27290 27292 27736\nf 27290 27734 27732\nf 27290 27736 27734\nf 27291 27733 27735\nf 27291 27735 27294\nf 27292 27293 27736\nf 27293 27296 27740\nf 27293 27737 27736\nf 27293 27740 27737\nf 27294 27735 27738\nf 27294 27738 27739\nf 27294 27739 27295\nf 27295 27739 27297\nf 27296 27298 27742\nf 27296 27742 27740\nf 27297 27739 27741\nf 27297 27741 27300\nf 27298 27299 27742\nf 27299 27302 27746\nf 27299 27743 27742\nf 27299 27746 27743\nf 27300 27741 27744\nf 27300 27744 27745\nf 27300 27745 27301\nf 27301 27745 27304\nf 27302 27303 27746\nf 27303 27305 27749\nf 27303 27747 27746\nf 27303 27749 27747\nf 27304 27745 27748\nf 27304 27748 27750\nf 27304 27750 27306\nf 27305 27306 27749\nf 27306 27750 27749\nf 27307 27308 27751\nf 27307 27751 27754\nf 27307 27754 27310\nf 27308 27309 27752\nf 27308 27752 27751\nf 27309 27312 27753\nf 27309 27753 27752\nf 27310 27754 27311\nf 27311 27754 27755\nf 27311 27755 27758\nf 27311 27758 27314\nf 27312 27313 27757\nf 27312 27756 27753\nf 27312 27757 27756\nf 27313 27315 27757\nf 27314 27758 27316\nf 27315 27317 27761\nf 27315 27759 27757\nf 27315 27761 27759\nf 27316 27758 27760\nf 27316 27760 27318\nf 27317 27319 27763\nf 27317 27763 27761\nf 27318 27760 27762\nf 27318 27762 27320\nf 27319 27322 27766\nf 27319 27766 27763\nf 27320 27762 27764\nf 27320 27764 27321\nf 27321 27764 27765\nf 27321 27765 27768\nf 27321 27768 27324\nf 27322 27323 27767\nf 27322 27767 27766\nf 27323 27326 27767\nf 27324 27768 27769\nf 27324 27769 27325\nf 27325 27769 27327\nf 27326 27328 27774\nf 27326 27771 27767\nf 27326 27774 27771\nf 27327 27769 27773\nf 27327 27773 27329\nf 27328 27330 27774\nf 27329 27773 27777\nf 27329 27777 27333\nf 27330 27331 27332\nf 27330 27332 27774\nf 27331 27334 27778\nf 27331 27778 27332\nf 27332 27775 27774\nf 27332 27778 27775\nf 27333 27777 27779\nf 27333 27779 27335\nf 27334 27336 27782\nf 27334 27780 27778\nf 27334 27782 27780\nf 27335 27779 27781\nf 27335 27781 27337\nf 27336 27338 27784\nf 27336 27784 27782\nf 27337 27781 27783\nf 27337 27783 27339\nf 27338 27340 27786\nf 27338 27786 27784\nf 27339 27783 27785\nf 27339 27785 27342\nf 27340 27341 27788\nf 27340 27788 27786\nf 27341 27343 27344\nf 27341 27344 27788\nf 27342 27785 27787\nf 27342 27787 27345\nf 27343 27346 27791\nf 27343 27791 27344\nf 27344 27789 27788\nf 27344 27791 27789\nf 27345 27787 27790\nf 27345 27790 27347\nf 27346 27348 27793\nf 27346 27793 27791\nf 27347 27790 27792\nf 27347 27792 27350\nf 27348 27349 27795\nf 27348 27795 27793\nf 27349 27352 27353\nf 27349 27353 27795\nf 27350 27355 27351\nf 27350 27792 27794\nf 27350 27794 27797\nf 27350 27797 27355\nf 27351 27355 27354\nf 27352 27357 27800\nf 27352 27800 27353\nf 27353 27796 27795\nf 27353 27800 27796\nf 27354 27355 27798\nf 27354 27798 27356\nf 27355 27797 27798\nf 27356 27798 27799\nf 27356 27799 27801\nf 27356 27801 27358\nf 27357 27358 27800\nf 27358 27801 27800\nf 27359 27360 27805\nf 27359 27370 27368\nf 27359 27805 27814\nf 27359 27814 27370\nf 27360 27361 27805\nf 27361 27362 27806\nf 27361 27806 27805\nf 27362 27363 27807\nf 27362 27807 27806\nf 27363 27364 27808\nf 27363 27808 27807\nf 27364 27365 27809\nf 27364 27809 27808\nf 27365 27366 27810\nf 27365 27810 27809\nf 27366 27367 27811\nf 27366 27811 27810\nf 27367 27371 27812\nf 27367 27812 27811\nf 27368 27370 27369\nf 27369 27370 27815\nf 27369 27813 27822\nf 27369 27815 27813\nf 27369 27822 27375\nf 27370 27814 27815\nf 27371 27372 27819\nf 27371 27817 27812\nf 27371 27819 27817\nf 27372 27373 27819\nf 27373 27374 27820\nf 27373 27820 27819\nf 27374 27376 27821\nf 27374 27821 27820\nf 27375 27822 27380\nf 27376 27377 27825\nf 27376 27824 27821\nf 27376 27825 27824\nf 27377 27378 27825\nf 27378 27379 27826\nf 27378 27826 27825\nf 27379 27382 27827\nf 27379 27827 27826\nf 27380 27822 27828\nf 27380 27828 27829\nf 27380 27829 27381\nf 27381 27829 27385\nf 27382 27383 27832\nf 27382 27831 27827\nf 27382 27832 27831\nf 27383 27384 27832\nf 27384 27386 27834\nf 27384 27833 27832\nf 27384 27834 27833\nf 27385 27829 27835\nf 27385 27835 27390\nf 27386 27387 27388\nf 27386 27388 27834\nf 27387 27389 27838\nf 27387 27838 27388\nf 27388 27837 27834\nf 27388 27838 27837\nf 27389 27393 27838\nf 27390 27392 27391\nf 27390 27835 27836\nf 27390 27836 27392\nf 27391 27392 27394\nf 27392 27836 27839\nf 27392 27839 27394\nf 27393 27397 27845\nf 27393 27840 27838\nf 27393 27845 27840\nf 27394 27839 27841\nf 27394 27841 27842\nf 27394 27842 27395\nf 27395 27842 27844\nf 27395 27844 27396\nf 27396 27844 27399\nf 27397 27398 27845\nf 27398 27403 27851\nf 27398 27846 27845\nf 27398 27851 27846\nf 27399 27844 27847\nf 27399 27847 27848\nf 27399 27848 27400\nf 27400 27848 27849\nf 27400 27849 27401\nf 27401 27849 27405\nf 27402 27410 27863\nf 27402 27850 27852\nf 27402 27852 27404\nf 27402 27863 27850\nf 27403 27404 27851\nf 27404 27852 27851\nf 27405 27849 27853\nf 27405 27853 27854\nf 27405 27854 27406\nf 27406 27854 27855\nf 27406 27855 27407\nf 27407 27855 27856\nf 27407 27856 27412\nf 27408 27421 27423\nf 27408 27423 27859\nf 27408 27859 27860\nf 27408 27860 27861\nf 27408 27861 27409\nf 27409 27861 27864\nf 27409 27864 27411\nf 27410 27411 27863\nf 27411 27864 27863\nf 27412 27414 27413\nf 27412 27856 27414\nf 27413 27414 27415\nf 27414 27416 27415\nf 27414 27856 27857\nf 27414 27857 27416\nf 27415 27416 27867\nf 27415 27867 27417\nf 27416 27857 27866\nf 27416 27866 27867\nf 27417 27867 27870\nf 27417 27870 27418\nf 27418 27870 27419\nf 27419 27420 27422\nf 27419 27869 27420\nf 27419 27870 27869\nf 27420 27423 27422\nf 27420 27858 27859\nf 27420 27859 27423\nf 27420 27869 27858\nf 27421 27422 27423\nf 27424 27425 27872\nf 27424 27872 27878\nf 27424 27878 27430\nf 27425 27426 27873\nf 27425 27873 27872\nf 27426 27432 27874\nf 27426 27874 27873\nf 27427 27428 27875\nf 27427 27875 27884\nf 27427 27884 27435\nf 27428 27429 27876\nf 27428 27876 27875\nf 27429 27437 27877\nf 27429 27877 27876\nf 27430 27878 27431\nf 27431 27878 27879\nf 27431 27879 27888\nf 27431 27888 27439\nf 27432 27433 27881\nf 27432 27880 27874\nf 27432 27881 27880\nf 27433 27434 27881\nf 27434 27440 27883\nf 27434 27883 27881\nf 27435 27884 27436\nf 27436 27884 27885\nf 27436 27885 27891\nf 27436 27891 27441\nf 27437 27438 27887\nf 27437 27886 27877\nf 27437 27887 27886\nf 27438 27442 27887\nf 27439 27888 27443\nf 27440 27444 27894\nf 27440 27890 27883\nf 27440 27894 27890\nf 27441 27891 27445\nf 27442 27446 27896\nf 27442 27892 27887\nf 27442 27896 27892\nf 27443 27888 27893\nf 27443 27893 27447\nf 27444 27448 27898\nf 27444 27898 27894\nf 27445 27891 27895\nf 27445 27895 27450\nf 27446 27451 27901\nf 27446 27901 27896\nf 27447 27893 27897\nf 27447 27897 27453\nf 27448 27449 27899\nf 27448 27899 27898\nf 27449 27454 27899\nf 27450 27895 27900\nf 27450 27900 27455\nf 27451 27452 27458\nf 27451 27458 27905\nf 27451 27905 27901\nf 27452 27456 27458\nf 27453 27897 27902\nf 27453 27902 27459\nf 27454 27460 27907\nf 27454 27903 27899\nf 27454 27907 27903\nf 27455 27900 27904\nf 27455 27904 27461\nf 27456 27457 27458\nf 27457 27462 27905\nf 27457 27905 27458\nf 27459 27902 27906\nf 27459 27906 27463\nf 27460 27464 27911\nf 27460 27911 27907\nf 27461 27904 27908\nf 27461 27908 27465\nf 27462 27466 27913\nf 27462 27909 27905\nf 27462 27913 27909\nf 27463 27906 27910\nf 27463 27910 27467\nf 27464 27468 27915\nf 27464 27915 27911\nf 27465 27908 27912\nf 27465 27912 27469\nf 27466 27470 27917\nf 27466 27917 27913\nf 27467 27910 27914\nf 27467 27914 27471\nf 27468 27472 27919\nf 27468 27919 27915\nf 27469 27912 27916\nf 27469 27916 27473\nf 27470 27474 27921\nf 27470 27921 27917\nf 27471 27914 27918\nf 27471 27918 27476\nf 27472 27477 27924\nf 27472 27924 27919\nf 27473 27916 27920\nf 27473 27920 27478\nf 27474 27475 27922\nf 27474 27922 27921\nf 27475 27479 27922\nf 27476 27918 27923\nf 27476 27923 27484\nf 27477 27486 27933\nf 27477 27933 27924\nf 27478 27920 27925\nf 27478 27925 27487\nf 27479 27480 27927\nf 27479 27926 27922\nf 27479 27927 27926\nf 27480 27481 27927\nf 27481 27482 27928\nf 27481 27928 27927\nf 27482 27488 27929\nf 27482 27929 27928\nf 27483 27485 27930\nf 27483 27930 28020\nf 27483 28020 27572\nf 27484 27923 27931\nf 27484 27931 27485\nf 27485 27931 27932\nf 27485 27932 27930\nf 27486 27574 27933\nf 27487 27925 27935\nf 27487 27935 27576\nf 27488 27489 27937\nf 27488 27936 27929\nf 27488 27937 27936\nf 27489 27490 27937\nf 27490 27491 27938\nf 27490 27938 27937\nf 27491 27492 27939\nf 27491 27939 27938\nf 27492 27493 27940\nf 27492 27940 27939\nf 27493 27494 27941\nf 27493 27941 27940\nf 27494 27495 27942\nf 27494 27942 27941\nf 27495 27496 27943\nf 27495 27943 27942\nf 27496 27497 27944\nf 27496 27944 27943\nf 27497 27498 27945\nf 27497 27945 27944\nf 27498 27499 27946\nf 27498 27946 27945\nf 27499 27500 27947\nf 27499 27947 27946\nf 27500 27501 27948\nf 27500 27948 27947\nf 27501 27502 27949\nf 27501 27949 27948\nf 27502 27503 27950\nf 27502 27950 27949\nf 27503 27504 27951\nf 27503 27951 27950\nf 27504 27505 27952\nf 27504 27952 27951\nf 27505 27506 27953\nf 27505 27953 27952\nf 27506 27507 27954\nf 27506 27954 27953\nf 27507 27508 27955\nf 27507 27955 27954\nf 27508 27509 27956\nf 27508 27956 27955\nf 27509 27510 27957\nf 27509 27957 27956\nf 27510 27511 27958\nf 27510 27958 27957\nf 27511 27512 27959\nf 27511 27959 27958\nf 27512 27513 27960\nf 27512 27960 27959\nf 27513 27514 27961\nf 27513 27961 27960\nf 27514 27515 27962\nf 27514 27962 27961\nf 27515 27516 27963\nf 27515 27963 27962\nf 27516 27517 27964\nf 27516 27964 27963\nf 27517 27518 27965\nf 27517 27965 27964\nf 27518 27519 27966\nf 27518 27966 27965\nf 27519 27520 27967\nf 27519 27967 27966\nf 27520 27521 27968\nf 27520 27968 27967\nf 27521 27522 27969\nf 27521 27969 27968\nf 27522 27523 27970\nf 27522 27970 27969\nf 27523 27524 27971\nf 27523 27971 27970\nf 27524 27525 27972\nf 27524 27972 27971\nf 27525 27526 27973\nf 27525 27973 27972\nf 27526 27527 27974\nf 27526 27974 27973\nf 27527 27528 27975\nf 27527 27975 27974\nf 27528 27529 27976\nf 27528 27976 27975\nf 27529 27530 27977\nf 27529 27977 27976\nf 27530 27531 27978\nf 27530 27978 27977\nf 27531 27532 27979\nf 27531 27979 27978\nf 27532 27533 27980\nf 27532 27980 27979\nf 27533 27534 27981\nf 27533 27981 27980\nf 27534 27535 27982\nf 27534 27982 27981\nf 27535 27536 27983\nf 27535 27983 27982\nf 27536 27537 27984\nf 27536 27984 27983\nf 27537 27538 27985\nf 27537 27985 27984\nf 27538 27539 27986\nf 27538 27986 27985\nf 27539 27540 27987\nf 27539 27987 27986\nf 27540 27541 27988\nf 27540 27988 27987\nf 27541 27542 27989\nf 27541 27989 27988\nf 27542 27543 27990\nf 27542 27990 27989\nf 27543 27544 27991\nf 27543 27991 27990\nf 27544 27545 27992\nf 27544 27992 27991\nf 27545 27546 27993\nf 27545 27993 27992\nf 27546 27547 27994\nf 27546 27994 27993\nf 27547 27548 27995\nf 27547 27995 27994\nf 27548 27549 27996\nf 27548 27996 27995\nf 27549 27550 27997\nf 27549 27997 27996\nf 27550 27551 27998\nf 27550 27998 27997\nf 27551 27552 27999\nf 27551 27999 27998\nf 27552 27553 28000\nf 27552 28000 27999\nf 27553 27554 28001\nf 27553 28001 28000\nf 27554 27555 28002\nf 27554 28002 28001\nf 27555 27556 28003\nf 27555 28003 28002\nf 27556 27557 28004\nf 27556 28004 28003\nf 27557 27558 28005\nf 27557 28005 28004\nf 27558 27559 28006\nf 27558 28006 28005\nf 27559 27560 28007\nf 27559 28007 28006\nf 27560 27561 28008\nf 27560 28008 28007\nf 27561 27562 28009\nf 27561 28009 28008\nf 27562 27563 28010\nf 27562 28010 28009\nf 27563 27564 28011\nf 27563 28011 28010\nf 27564 27565 28012\nf 27564 28012 28011\nf 27565 27566 28013\nf 27565 28013 28012\nf 27566 27567 28014\nf 27566 28014 28013\nf 27567 27568 28015\nf 27567 28015 28014\nf 27568 27569 28016\nf 27568 28016 28015\nf 27569 27570 28017\nf 27569 28017 28016\nf 27570 27571 28018\nf 27570 28018 28017\nf 27571 27573 28019\nf 27571 28019 28018\nf 27572 28020 27573\nf 27573 28020 28021\nf 27573 28021 28019\nf 27574 27575 27934\nf 27574 27577 28025\nf 27574 27934 27933\nf 27574 28025 27575\nf 27575 28022 27934\nf 27575 28023 28022\nf 27575 28025 28023\nf 27576 27935 28024\nf 27576 28024 27578\nf 27577 27580 28028\nf 27577 28028 28025\nf 27578 28024 28026\nf 27578 28026 28027\nf 27578 28027 27579\nf 27579 28027 27581\nf 27580 27582 28030\nf 27580 28030 28028\nf 27581 28027 28029\nf 27581 28029 27584\nf 27582 27583 28030\nf 27583 27586 28034\nf 27583 28031 28030\nf 27583 28034 28031\nf 27584 28029 28032\nf 27584 28032 27588\nf 27585 27596 28043\nf 27585 28033 28035\nf 27585 28035 27587\nf 27585 28043 28033\nf 27586 27587 28034\nf 27587 28035 28034\nf 27588 28032 28036\nf 27588 28036 28037\nf 27588 28037 27589\nf 27589 28037 28038\nf 27589 28038 27590\nf 27590 28038 27598\nf 27591 27683 27685\nf 27591 27685 28131\nf 27591 28039 27592\nf 27591 28131 28039\nf 27592 28039 28040\nf 27592 28040 27593\nf 27593 28040 28041\nf 27593 28041 27594\nf 27594 28041 28042\nf 27594 28042 27595\nf 27595 28042 28044\nf 27595 28044 27597\nf 27596 27597 28043\nf 27597 28044 28043\nf 27598 28038 28045\nf 27598 28045 28046\nf 27598 28046 27599\nf 27599 28046 28047\nf 27599 28047 27600\nf 27600 28047 27686\nf 27601 27691 28138\nf 27601 28048 28049\nf 27601 28049 27602\nf 27601 28138 28048\nf 27602 28049 28050\nf 27602 28050 27603\nf 27603 28050 28051\nf 27603 28051 27604\nf 27604 28051 28052\nf 27604 28052 27605\nf 27605 28052 28053\nf 27605 28053 27606\nf 27606 28053 28054\nf 27606 28054 27607\nf 27607 28054 28055\nf 27607 28055 27608\nf 27608 28055 28056\nf 27608 28056 27609\nf 27609 28056 28057\nf 27609 28057 27610\nf 27610 28057 28058\nf 27610 28058 27611\nf 27611 28058 28059\nf 27611 28059 27612\nf 27612 28059 28060\nf 27612 28060 27613\nf 27613 28060 28061\nf 27613 28061 27614\nf 27614 28061 28062\nf 27614 28062 27615\nf 27615 28062 28063\nf 27615 28063 27616\nf 27616 28063 28064\nf 27616 28064 27617\nf 27617 28064 28065\nf 27617 28065 27618\nf 27618 28065 28066\nf 27618 28066 27619\nf 27619 28066 28067\nf 27619 28067 27620\nf 27620 28067 28068\nf 27620 28068 27621\nf 27621 28068 28069\nf 27621 28069 27622\nf 27622 28069 28070\nf 27622 28070 27623\nf 27623 28070 28071\nf 27623 28071 27624\nf 27624 28071 28072\nf 27624 28072 27625\nf 27625 28072 28073\nf 27625 28073 27626\nf 27626 28073 28074\nf 27626 28074 27627\nf 27627 28074 28075\nf 27627 28075 27628\nf 27628 28075 28076\nf 27628 28076 27629\nf 27629 28076 28077\nf 27629 28077 27630\nf 27630 28077 28078\nf 27630 28078 27631\nf 27631 28078 28079\nf 27631 28079 27632\nf 27632 28079 28080\nf 27632 28080 27633\nf 27633 28080 28081\nf 27633 28081 27634\nf 27634 28081 28082\nf 27634 28082 27635\nf 27635 28082 28083\nf 27635 28083 27636\nf 27636 28083 28084\nf 27636 28084 27637\nf 27637 28084 28085\nf 27637 28085 27638\nf 27638 28085 28086\nf 27638 28086 27639\nf 27639 28086 28087\nf 27639 28087 27640\nf 27640 28087 28088\nf 27640 28088 27641\nf 27641 28088 28089\nf 27641 28089 27642\nf 27642 28089 28090\nf 27642 28090 27643\nf 27643 28090 28091\nf 27643 28091 27644\nf 27644 28091 28092\nf 27644 28092 27645\nf 27645 28092 28093\nf 27645 28093 27646\nf 27646 28093 28094\nf 27646 28094 27647\nf 27647 28094 28095\nf 27647 28095 27648\nf 27648 28095 28096\nf 27648 28096 27649\nf 27649 28096 28097\nf 27649 28097 27650\nf 27650 28097 28098\nf 27650 28098 27651\nf 27651 28098 28099\nf 27651 28099 27652\nf 27652 28099 28100\nf 27652 28100 27653\nf 27653 28100 28101\nf 27653 28101 27654\nf 27654 28101 28102\nf 27654 28102 27655\nf 27655 28102 28103\nf 27655 28103 27656\nf 27656 28103 28104\nf 27656 28104 27657\nf 27657 28104 28105\nf 27657 28105 27658\nf 27658 28105 28106\nf 27658 28106 27659\nf 27659 28106 28107\nf 27659 28107 27660\nf 27660 28107 28108\nf 27660 28108 27661\nf 27661 28108 28109\nf 27661 28109 27662\nf 27662 28109 28110\nf 27662 28110 27663\nf 27663 28110 28111\nf 27663 28111 27664\nf 27664 28111 28112\nf 27664 28112 27665\nf 27665 28112 28113\nf 27665 28113 27666\nf 27666 28113 28114\nf 27666 28114 27667\nf 27667 28114 28115\nf 27667 28115 27668\nf 27668 28115 28116\nf 27668 28116 27669\nf 27669 28116 28117\nf 27669 28117 27670\nf 27670 28117 28118\nf 27670 28118 27671\nf 27671 28118 28119\nf 27671 28119 27672\nf 27672 28119 28120\nf 27672 28120 27673\nf 27673 28120 28121\nf 27673 28121 27674\nf 27674 28121 28122\nf 27674 28122 27675\nf 27675 28122 28123\nf 27675 28123 27676\nf 27676 28123 28124\nf 27676 28124 27677\nf 27677 28124 28125\nf 27677 28125 27678\nf 27678 28125 28126\nf 27678 28126 27679\nf 27679 28126 28127\nf 27679 28127 27680\nf 27680 28127 28128\nf 27680 28128 27681\nf 27681 28128 28129\nf 27681 28129 27682\nf 27682 28129 28130\nf 27682 28130 27684\nf 27683 27684 27685\nf 27684 28130 28132\nf 27684 28132 27685\nf 27685 28132 28131\nf 27686 28047 28133\nf 27686 28133 28134\nf 27686 28134 27687\nf 27687 28134 28135\nf 27687 28135 27688\nf 27688 28135 28136\nf 27688 28136 27689\nf 27689 28136 28137\nf 27689 28137 27690\nf 27690 28137 28139\nf 27690 28139 27692\nf 27691 27692 28138\nf 27692 28139 28138\nf 27693 27694 28140\nf 27693 28140 28144\nf 27693 28144 27697\nf 27694 27695 28141\nf 27694 28141 28140\nf 27695 27696 28142\nf 27695 28142 28141\nf 27696 27698 28143\nf 27696 28143 28142\nf 27697 28144 27700\nf 27698 27699 28146\nf 27698 28145 28143\nf 27698 28146 28145\nf 27699 27701 28146\nf 27700 28144 28147\nf 27700 28147 27703\nf 27701 27702 28149\nf 27701 28148 28146\nf 27701 28149 28148\nf 27702 27705 28149\nf 27703 28147 28150\nf 27703 28150 27704\nf 27704 28150 28151\nf 27704 28151 28153\nf 27704 28153 27707\nf 27705 27706 27709\nf 27705 27709 28154\nf 27705 28152 28149\nf 27705 28154 28152\nf 27706 27708 27709\nf 27707 28153 27710\nf 27708 27711 28158\nf 27708 28155 27709\nf 27708 28158 28155\nf 27709 28155 28154\nf 27710 28153 28157\nf 27710 28157 27712\nf 27711 27713 28160\nf 27711 28160 28158\nf 27712 28157 28159\nf 27712 28159 27714\nf 27713 27715 28162\nf 27713 28162 28160\nf 27714 28159 28161\nf 27714 28161 27716\nf 27715 27717 28164\nf 27715 28164 28162\nf 27716 28161 28163\nf 27716 28163 27718\nf 27717 27719 28166\nf 27717 28166 28164\nf 27718 28163 28165\nf 27718 28165 27720\nf 27719 27721 28168\nf 27719 28168 28166\nf 27720 28165 28167\nf 27720 28167 27722\nf 27721 27723 28170\nf 27721 28170 28168\nf 27722 28167 28169\nf 27722 28169 27724\nf 27723 27725 28172\nf 27723 28172 28170\nf 27724 28169 28171\nf 27724 28171 27726\nf 27725 27727 28172\nf 27726 28171 28174\nf 27726 28174 27730\nf 27727 27728 27729\nf 27727 27729 28172\nf 27728 27732 28175\nf 27728 28175 27729\nf 27729 28173 28172\nf 27729 28175 28173\nf 27730 28174 28176\nf 27730 28176 28177\nf 27730 28177 27731\nf 27731 28177 27733\nf 27732 27734 28180\nf 27732 28178 28175\nf 27732 28180 28178\nf 27733 28177 28179\nf 27733 28179 27735\nf 27734 27736 28182\nf 27734 28182 28180\nf 27735 28179 28181\nf 27735 28181 27738\nf 27736 27737 28182\nf 27737 27740 28186\nf 27737 28183 28182\nf 27737 28186 28183\nf 27738 28181 28184\nf 27738 28184 28185\nf 27738 28185 27739\nf 27739 28185 27741\nf 27740 27742 28189\nf 27740 28189 28186\nf 27741 28185 28187\nf 27741 28187 27744\nf 27742 27743 28189\nf 27743 27746 28193\nf 27743 28190 28189\nf 27743 28193 28190\nf 27744 28187 28191\nf 27744 28191 28192\nf 27744 28192 27745\nf 27745 28192 27748\nf 27746 27747 28193\nf 27747 27749 28197\nf 27747 28194 28193\nf 27747 28197 28194\nf 27748 28192 28195\nf 27748 28195 28198\nf 27748 28198 27750\nf 27749 27750 28197\nf 27750 28198 28197\nf 27751 27752 28199\nf 27751 28199 28203\nf 27751 28203 27754\nf 27752 27753 28200\nf 27752 28200 28199\nf 27753 27756 28201\nf 27753 28201 28200\nf 27754 28203 27755\nf 27755 28203 28204\nf 27755 28204 28208\nf 27755 28208 27758\nf 27756 27757 28206\nf 27756 28205 28201\nf 27756 28206 28205\nf 27757 27759 28206\nf 27758 28208 27760\nf 27759 27761 28211\nf 27759 28209 28206\nf 27759 28211 28209\nf 27760 28208 28210\nf 27760 28210 27762\nf 27761 27763 28213\nf 27761 28213 28211\nf 27762 28210 28212\nf 27762 28212 27764\nf 27763 27766 28215\nf 27763 28215 28213\nf 27764 28212 28214\nf 27764 28214 28216\nf 27764 28216 27765\nf 27765 27770 27768\nf 27765 28216 27770\nf 27766 27767 27772\nf 27766 27772 28217\nf 27766 28217 28215\nf 27767 27771 27772\nf 27768 27770 27769\nf 27769 27770 27773\nf 27770 28216 27773\nf 27771 27774 27776\nf 27771 27776 27772\nf 27772 27776 28217\nf 27773 28216 28218\nf 27773 28218 27777\nf 27774 27775 27776\nf 27775 27778 28219\nf 27775 28219 27776\nf 27776 28219 28217\nf 27777 28218 28220\nf 27777 28220 27779\nf 27778 27780 28223\nf 27778 28221 28219\nf 27778 28223 28221\nf 27779 28220 28222\nf 27779 28222 27781\nf 27780 27782 28225\nf 27780 28225 28223\nf 27781 28222 28224\nf 27781 28224 27783\nf 27782 27784 28227\nf 27782 28227 28225\nf 27783 28224 28226\nf 27783 28226 27785\nf 27784 27786 28229\nf 27784 28229 28227\nf 27785 28226 28228\nf 27785 28228 27787\nf 27786 27788 28231\nf 27786 28231 28229\nf 27787 28228 28230\nf 27787 28230 27790\nf 27788 27789 28231\nf 27789 27791 28235\nf 27789 28232 28231\nf 27789 28235 28232\nf 27790 28230 28233\nf 27790 28233 27792\nf 27791 27793 28238\nf 27791 28238 28235\nf 27792 28233 28236\nf 27792 28236 27794\nf 27793 27795 28241\nf 27793 28241 28238\nf 27794 28236 28239\nf 27794 28239 27797\nf 27795 27796 28241\nf 27796 27800 28244\nf 27796 28242 28241\nf 27796 28244 28242\nf 27797 27802 27798\nf 27797 28239 28243\nf 27797 28243 28246\nf 27797 28246 27802\nf 27798 27802 27803\nf 27798 27803 27799\nf 27799 27803 27804\nf 27799 27804 27801\nf 27800 27801 28249\nf 27800 28249 28244\nf 27801 27804 28249\nf 27802 28246 28247\nf 27802 28247 27803\nf 27803 28247 28248\nf 27803 28248 27804\nf 27804 28248 28250\nf 27804 28250 28249\nf 27805 27806 28251\nf 27805 27816 27814\nf 27805 28251 28258\nf 27805 28258 27816\nf 27806 27807 28251\nf 27807 27808 28252\nf 27807 28252 28251\nf 27808 27809 28253\nf 27808 28253 28252\nf 27809 27810 28254\nf 27809 28254 28253\nf 27810 27811 28255\nf 27810 28255 28254\nf 27811 27812 28256\nf 27811 28256 28255\nf 27812 27817 27818\nf 27812 27818 28256\nf 27813 27815 28257\nf 27813 27823 27822\nf 27813 28257 28270\nf 27813 28270 27823\nf 27814 27816 27815\nf 27815 27816 28259\nf 27815 28259 28257\nf 27816 28258 28259\nf 27817 27819 28266\nf 27817 28266 27818\nf 27818 28264 28256\nf 27818 28266 28264\nf 27819 27820 28267\nf 27819 28267 28266\nf 27820 27821 28268\nf 27820 28268 28267\nf 27821 27824 28269\nf 27821 28269 28268\nf 27822 27823 27828\nf 27823 27830 27828\nf 27823 28270 28276\nf 27823 28276 27830\nf 27824 27825 28273\nf 27824 28271 28269\nf 27824 28273 28271\nf 27825 27826 28273\nf 27826 27827 28274\nf 27826 28274 28273\nf 27827 27831 28275\nf 27827 28275 28274\nf 27828 27830 27829\nf 27829 27830 27835\nf 27830 28276 27835\nf 27831 27832 28278\nf 27831 28277 28275\nf 27831 28278 28277\nf 27832 27833 28278\nf 27833 27834 28279\nf 27833 28279 28278\nf 27834 27837 28280\nf 27834 28280 28279\nf 27835 28276 28281\nf 27835 28281 28282\nf 27835 28282 27836\nf 27836 28282 27839\nf 27837 27838 28284\nf 27837 28283 28280\nf 27837 28284 28283\nf 27838 27840 28284\nf 27839 28282 28285\nf 27839 28285 27841\nf 27840 27845 28291\nf 27840 28287 28284\nf 27840 28291 28287\nf 27841 27843 27842\nf 27841 28285 28286\nf 27841 28286 27843\nf 27842 27843 28290\nf 27842 28290 27844\nf 27843 28286 28289\nf 27843 28289 28290\nf 27844 28290 27847\nf 27845 27846 28291\nf 27846 27851 28301\nf 27846 28292 28291\nf 27846 28301 28292\nf 27847 28290 28294\nf 27847 28294 28295\nf 27847 28295 27848\nf 27848 28295 28297\nf 27848 28297 27849\nf 27849 28297 27853\nf 27850 27863 27865\nf 27850 27865 28299\nf 27850 28299 28300\nf 27850 28300 28302\nf 27850 28302 27852\nf 27851 27852 28301\nf 27852 28302 28301\nf 27853 28297 28303\nf 27853 28303 28304\nf 27853 28304 27854\nf 27854 28304 28306\nf 27854 28306 27855\nf 27855 28306 28307\nf 27855 28307 27856\nf 27856 28307 28308\nf 27856 28308 27857\nf 27857 28308 28309\nf 27857 28309 27866\nf 27858 27869 27871\nf 27858 27871 28310\nf 27858 28310 28311\nf 27858 28311 28312\nf 27858 28312 27859\nf 27859 28312 28314\nf 27859 28314 27860\nf 27860 28314 27861\nf 27861 27862 27864\nf 27861 28313 27862\nf 27861 28314 28313\nf 27862 27865 27864\nf 27862 28298 28299\nf 27862 28299 27865\nf 27862 28313 28298\nf 27863 27864 27865\nf 27866 27868 27867\nf 27866 28309 27868\nf 27867 27868 27870\nf 27868 27871 27870\nf 27868 28309 28310\nf 27868 28310 27871\nf 27869 27870 27871\nf 27872 27873 28316\nf 27872 28316 28323\nf 27872 28323 27878\nf 27873 27874 28317\nf 27873 28317 28316\nf 27874 27880 28319\nf 27874 28318 28317\nf 27874 28319 28318\nf 27875 27876 28320\nf 27875 28320 28326\nf 27875 28326 27884\nf 27876 27877 28321\nf 27876 28321 28320\nf 27877 27886 28322\nf 27877 28322 28321\nf 27878 28323 28330\nf 27878 28330 27879\nf 27879 27889 27888\nf 27879 28330 27889\nf 27880 27881 27882\nf 27880 27882 28319\nf 27881 27883 28325\nf 27881 28325 27882\nf 27882 28324 28319\nf 27882 28325 28324\nf 27883 27890 28325\nf 27884 28326 27885\nf 27885 28326 28327\nf 27885 28327 28333\nf 27885 28333 27891\nf 27886 27887 28329\nf 27886 28328 28322\nf 27886 28329 28328\nf 27887 27892 28329\nf 27888 27889 28335\nf 27888 28335 27893\nf 27889 28330 28331\nf 27889 28331 28335\nf 27890 27894 28336\nf 27890 28332 28325\nf 27890 28336 28332\nf 27891 28333 27895\nf 27892 27896 28338\nf 27892 28334 28329\nf 27892 28338 28334\nf 27893 28335 27897\nf 27894 27898 28340\nf 27894 28340 28336\nf 27895 28333 28337\nf 27895 28337 27900\nf 27896 27901 28343\nf 27896 28343 28338\nf 27897 28335 28339\nf 27897 28339 27902\nf 27898 27899 28341\nf 27898 28341 28340\nf 27899 27903 28341\nf 27900 28337 28342\nf 27900 28342 27904\nf 27901 27905 28347\nf 27901 28347 28343\nf 27902 28339 28344\nf 27902 28344 27906\nf 27903 27907 28349\nf 27903 28345 28341\nf 27903 28349 28345\nf 27904 28342 28346\nf 27904 28346 27908\nf 27905 27909 28351\nf 27905 28351 28347\nf 27906 28344 28348\nf 27906 28348 27910\nf 27907 27911 28353\nf 27907 28353 28349\nf 27908 28346 28350\nf 27908 28350 27912\nf 27909 27913 28355\nf 27909 28355 28351\nf 27910 28348 28352\nf 27910 28352 27914\nf 27911 27915 28357\nf 27911 28357 28353\nf 27912 28350 28354\nf 27912 28354 27916\nf 27913 27917 28359\nf 27913 28359 28355\nf 27914 28352 28356\nf 27914 28356 27918\nf 27915 27919 28361\nf 27915 28361 28357\nf 27916 28354 28358\nf 27916 28358 27920\nf 27917 27921 28364\nf 27917 28364 28359\nf 27918 28356 28360\nf 27918 28360 27923\nf 27919 27924 28367\nf 27919 28367 28361\nf 27920 28358 28363\nf 27920 28363 27925\nf 27921 27922 28365\nf 27921 28365 28364\nf 27922 27926 28365\nf 27923 28360 28366\nf 27923 28366 27931\nf 27924 27933 28376\nf 27924 28376 28367\nf 27925 28363 28368\nf 27925 28368 27935\nf 27926 27927 28370\nf 27926 28369 28365\nf 27926 28370 28369\nf 27927 27928 28370\nf 27928 27929 28371\nf 27928 28371 28370\nf 27929 27936 28372\nf 27929 28372 28371\nf 27930 27932 28373\nf 27930 28373 28463\nf 27930 28463 28020\nf 27931 28366 28374\nf 27931 28374 27932\nf 27932 28374 28375\nf 27932 28375 28373\nf 27933 27934 28377\nf 27933 28377 28376\nf 27934 28022 28377\nf 27935 28368 28378\nf 27935 28378 28024\nf 27936 27937 28380\nf 27936 28379 28372\nf 27936 28380 28379\nf 27937 27938 28380\nf 27938 27939 28381\nf 27938 28381 28380\nf 27939 27940 28382\nf 27939 28382 28381\nf 27940 27941 28383\nf 27940 28383 28382\nf 27941 27942 28384\nf 27941 28384 28383\nf 27942 27943 28385\nf 27942 28385 28384\nf 27943 27944 28386\nf 27943 28386 28385\nf 27944 27945 28387\nf 27944 28387 28386\nf 27945 27946 28388\nf 27945 28388 28387\nf 27946 27947 28389\nf 27946 28389 28388\nf 27947 27948 28390\nf 27947 28390 28389\nf 27948 27949 28391\nf 27948 28391 28390\nf 27949 27950 28392\nf 27949 28392 28391\nf 27950 27951 28393\nf 27950 28393 28392\nf 27951 27952 28394\nf 27951 28394 28393\nf 27952 27953 28395\nf 27952 28395 28394\nf 27953 27954 28396\nf 27953 28396 28395\nf 27954 27955 28397\nf 27954 28397 28396\nf 27955 27956 28398\nf 27955 28398 28397\nf 27956 27957 28399\nf 27956 28399 28398\nf 27957 27958 28400\nf 27957 28400 28399\nf 27958 27959 28401\nf 27958 28401 28400\nf 27959 27960 28402\nf 27959 28402 28401\nf 27960 27961 28403\nf 27960 28403 28402\nf 27961 27962 28404\nf 27961 28404 28403\nf 27962 27963 28405\nf 27962 28405 28404\nf 27963 27964 28406\nf 27963 28406 28405\nf 27964 27965 28407\nf 27964 28407 28406\nf 27965 27966 28408\nf 27965 28408 28407\nf 27966 27967 28409\nf 27966 28409 28408\nf 27967 27968 28410\nf 27967 28410 28409\nf 27968 27969 28411\nf 27968 28411 28410\nf 27969 27970 28412\nf 27969 28412 28411\nf 27970 27971 28413\nf 27970 28413 28412\nf 27971 27972 28414\nf 27971 28414 28413\nf 27972 27973 28415\nf 27972 28415 28414\nf 27973 27974 28416\nf 27973 28416 28415\nf 27974 27975 28417\nf 27974 28417 28416\nf 27975 27976 28418\nf 27975 28418 28417\nf 27976 27977 28419\nf 27976 28419 28418\nf 27977 27978 28420\nf 27977 28420 28419\nf 27978 27979 28421\nf 27978 28421 28420\nf 27979 27980 28422\nf 27979 28422 28421\nf 27980 27981 28423\nf 27980 28423 28422\nf 27981 27982 28424\nf 27981 28424 28423\nf 27982 27983 28425\nf 27982 28425 28424\nf 27983 27984 28426\nf 27983 28426 28425\nf 27984 27985 28427\nf 27984 28427 28426\nf 27985 27986 28428\nf 27985 28428 28427\nf 27986 27987 28429\nf 27986 28429 28428\nf 27987 27988 28430\nf 27987 28430 28429\nf 27988 27989 28431\nf 27988 28431 28430\nf 27989 27990 28432\nf 27989 28432 28431\nf 27990 27991 28433\nf 27990 28433 28432\nf 27991 27992 28434\nf 27991 28434 28433\nf 27992 27993 28435\nf 27992 28435 28434\nf 27993 27994 28436\nf 27993 28436 28435\nf 27994 27995 28437\nf 27994 28437 28436\nf 27995 27996 28438\nf 27995 28438 28437\nf 27996 27997 28439\nf 27996 28439 28438\nf 27997 27998 28440\nf 27997 28440 28439\nf 27998 27999 28441\nf 27998 28441 28440\nf 27999 28000 28442\nf 27999 28442 28441\nf 28000 28001 28443\nf 28000 28443 28442\nf 28001 28002 28444\nf 28001 28444 28443\nf 28002 28003 28445\nf 28002 28445 28444\nf 28003 28004 28446\nf 28003 28446 28445\nf 28004 28005 28447\nf 28004 28447 28446\nf 28005 28006 28448\nf 28005 28448 28447\nf 28006 28007 28449\nf 28006 28449 28448\nf 28007 28008 28450\nf 28007 28450 28449\nf 28008 28009 28451\nf 28008 28451 28450\nf 28009 28010 28452\nf 28009 28452 28451\nf 28010 28011 28453\nf 28010 28453 28452\nf 28011 28012 28454\nf 28011 28454 28453\nf 28012 28013 28455\nf 28012 28455 28454\nf 28013 28014 28456\nf 28013 28456 28455\nf 28014 28015 28457\nf 28014 28457 28456\nf 28015 28016 28458\nf 28015 28458 28457\nf 28016 28017 28459\nf 28016 28459 28458\nf 28017 28018 28460\nf 28017 28460 28459\nf 28018 28019 28461\nf 28018 28461 28460\nf 28019 28021 28462\nf 28019 28462 28461\nf 28020 28463 28021\nf 28021 28463 28464\nf 28021 28464 28462\nf 28022 28023 28465\nf 28022 28465 28377\nf 28023 28025 28468\nf 28023 28466 28465\nf 28023 28468 28466\nf 28024 28378 28467\nf 28024 28467 28026\nf 28025 28028 28471\nf 28025 28471 28468\nf 28026 28467 28469\nf 28026 28469 28470\nf 28026 28470 28027\nf 28027 28470 28029\nf 28028 28030 28473\nf 28028 28473 28471\nf 28029 28470 28472\nf 28029 28472 28032\nf 28030 28031 28473\nf 28031 28034 28477\nf 28031 28474 28473\nf 28031 28477 28474\nf 28032 28472 28475\nf 28032 28475 28036\nf 28033 28043 28486\nf 28033 28476 28478\nf 28033 28478 28035\nf 28033 28486 28476\nf 28034 28035 28477\nf 28035 28478 28477\nf 28036 28475 28479\nf 28036 28479 28480\nf 28036 28480 28037\nf 28037 28480 28481\nf 28037 28481 28038\nf 28038 28481 28045\nf 28039 28131 28574\nf 28039 28482 28483\nf 28039 28483 28040\nf 28039 28574 28482\nf 28040 28483 28484\nf 28040 28484 28041\nf 28041 28484 28485\nf 28041 28485 28042\nf 28042 28485 28487\nf 28042 28487 28044\nf 28043 28044 28486\nf 28044 28487 28486\nf 28045 28481 28488\nf 28045 28488 28489\nf 28045 28489 28046\nf 28046 28489 28490\nf 28046 28490 28047\nf 28047 28490 28133\nf 28048 28138 28582\nf 28048 28491 28492\nf 28048 28492 28049\nf 28048 28582 28491\nf 28049 28492 28493\nf 28049 28493 28050\nf 28050 28493 28494\nf 28050 28494 28051\nf 28051 28494 28495\nf 28051 28495 28052\nf 28052 28495 28496\nf 28052 28496 28053\nf 28053 28496 28497\nf 28053 28497 28054\nf 28054 28497 28498\nf 28054 28498 28055\nf 28055 28498 28499\nf 28055 28499 28056\nf 28056 28499 28500\nf 28056 28500 28057\nf 28057 28500 28501\nf 28057 28501 28058\nf 28058 28501 28502\nf 28058 28502 28059\nf 28059 28502 28503\nf 28059 28503 28060\nf 28060 28503 28504\nf 28060 28504 28061\nf 28061 28504 28505\nf 28061 28505 28062\nf 28062 28505 28506\nf 28062 28506 28063\nf 28063 28506 28507\nf 28063 28507 28064\nf 28064 28507 28508\nf 28064 28508 28065\nf 28065 28508 28509\nf 28065 28509 28066\nf 28066 28509 28510\nf 28066 28510 28067\nf 28067 28510 28511\nf 28067 28511 28068\nf 28068 28511 28512\nf 28068 28512 28069\nf 28069 28512 28513\nf 28069 28513 28070\nf 28070 28513 28514\nf 28070 28514 28071\nf 28071 28514 28515\nf 28071 28515 28072\nf 28072 28515 28516\nf 28072 28516 28073\nf 28073 28516 28517\nf 28073 28517 28074\nf 28074 28517 28518\nf 28074 28518 28075\nf 28075 28518 28519\nf 28075 28519 28076\nf 28076 28519 28520\nf 28076 28520 28077\nf 28077 28520 28521\nf 28077 28521 28078\nf 28078 28521 28522\nf 28078 28522 28079\nf 28079 28522 28523\nf 28079 28523 28080\nf 28080 28523 28524\nf 28080 28524 28081\nf 28081 28524 28525\nf 28081 28525 28082\nf 28082 28525 28526\nf 28082 28526 28083\nf 28083 28526 28527\nf 28083 28527 28084\nf 28084 28527 28528\nf 28084 28528 28085\nf 28085 28528 28529\nf 28085 28529 28086\nf 28086 28529 28530\nf 28086 28530 28087\nf 28087 28530 28531\nf 28087 28531 28088\nf 28088 28531 28532\nf 28088 28532 28089\nf 28089 28532 28533\nf 28089 28533 28090\nf 28090 28533 28534\nf 28090 28534 28091\nf 28091 28534 28535\nf 28091 28535 28092\nf 28092 28535 28536\nf 28092 28536 28093\nf 28093 28536 28537\nf 28093 28537 28094\nf 28094 28537 28538\nf 28094 28538 28095\nf 28095 28538 28539\nf 28095 28539 28096\nf 28096 28539 28540\nf 28096 28540 28097\nf 28097 28540 28541\nf 28097 28541 28098\nf 28098 28541 28542\nf 28098 28542 28099\nf 28099 28542 28543\nf 28099 28543 28100\nf 28100 28543 28544\nf 28100 28544 28101\nf 28101 28544 28545\nf 28101 28545 28102\nf 28102 28545 28546\nf 28102 28546 28103\nf 28103 28546 28547\nf 28103 28547 28104\nf 28104 28547 28548\nf 28104 28548 28105\nf 28105 28548 28549\nf 28105 28549 28106\nf 28106 28549 28550\nf 28106 28550 28107\nf 28107 28550 28551\nf 28107 28551 28108\nf 28108 28551 28552\nf 28108 28552 28109\nf 28109 28552 28553\nf 28109 28553 28110\nf 28110 28553 28554\nf 28110 28554 28111\nf 28111 28554 28555\nf 28111 28555 28112\nf 28112 28555 28556\nf 28112 28556 28113\nf 28113 28556 28557\nf 28113 28557 28114\nf 28114 28557 28558\nf 28114 28558 28115\nf 28115 28558 28559\nf 28115 28559 28116\nf 28116 28559 28560\nf 28116 28560 28117\nf 28117 28560 28561\nf 28117 28561 28118\nf 28118 28561 28562\nf 28118 28562 28119\nf 28119 28562 28563\nf 28119 28563 28120\nf 28120 28563 28564\nf 28120 28564 28121\nf 28121 28564 28565\nf 28121 28565 28122\nf 28122 28565 28566\nf 28122 28566 28123\nf 28123 28566 28567\nf 28123 28567 28124\nf 28124 28567 28568\nf 28124 28568 28125\nf 28125 28568 28569\nf 28125 28569 28126\nf 28126 28569 28570\nf 28126 28570 28127\nf 28127 28570 28571\nf 28127 28571 28128\nf 28128 28571 28572\nf 28128 28572 28129\nf 28129 28572 28573\nf 28129 28573 28130\nf 28130 28573 28575\nf 28130 28575 28132\nf 28131 28132 28574\nf 28132 28575 28574\nf 28133 28490 28577\nf 28133 28577 28578\nf 28133 28578 28134\nf 28134 28578 28579\nf 28134 28579 28135\nf 28135 28579 28580\nf 28135 28580 28136\nf 28136 28580 28581\nf 28136 28581 28137\nf 28137 28581 28583\nf 28137 28583 28139\nf 28138 28139 28582\nf 28139 28583 28582\nf 28140 28141 28585\nf 28140 28585 28589\nf 28140 28589 28144\nf 28141 28142 28586\nf 28141 28586 28585\nf 28142 28143 28587\nf 28142 28587 28586\nf 28143 28145 28588\nf 28143 28588 28587\nf 28144 28589 28147\nf 28145 28146 28591\nf 28145 28590 28588\nf 28145 28591 28590\nf 28146 28148 28591\nf 28147 28589 28593\nf 28147 28593 28150\nf 28148 28149 28595\nf 28148 28594 28591\nf 28148 28595 28594\nf 28149 28152 28595\nf 28150 28593 28596\nf 28150 28596 28151\nf 28151 28596 28597\nf 28151 28597 28600\nf 28151 28600 28153\nf 28152 28154 28598\nf 28152 28598 28595\nf 28153 28600 28157\nf 28154 28155 28156\nf 28154 28156 28599\nf 28154 28599 28598\nf 28155 28158 28156\nf 28156 28158 28601\nf 28156 28601 28599\nf 28157 28600 28602\nf 28157 28602 28159\nf 28158 28160 28605\nf 28158 28603 28601\nf 28158 28605 28603\nf 28159 28602 28604\nf 28159 28604 28161\nf 28160 28162 28607\nf 28160 28607 28605\nf 28161 28604 28606\nf 28161 28606 28163\nf 28162 28164 28609\nf 28162 28609 28607\nf 28163 28606 28608\nf 28163 28608 28165\nf 28164 28166 28611\nf 28164 28611 28609\nf 28165 28608 28610\nf 28165 28610 28167\nf 28166 28168 28613\nf 28166 28613 28611\nf 28167 28610 28612\nf 28167 28612 28169\nf 28168 28170 28615\nf 28168 28615 28613\nf 28169 28612 28614\nf 28169 28614 28171\nf 28170 28172 28617\nf 28170 28617 28615\nf 28171 28614 28616\nf 28171 28616 28174\nf 28172 28173 28617\nf 28173 28175 28621\nf 28173 28618 28617\nf 28173 28621 28618\nf 28174 28616 28620\nf 28174 28620 28176\nf 28175 28178 28624\nf 28175 28624 28621\nf 28176 28620 28622\nf 28176 28622 28623\nf 28176 28623 28177\nf 28177 28623 28179\nf 28178 28180 28626\nf 28178 28626 28624\nf 28179 28623 28625\nf 28179 28625 28181\nf 28180 28182 28628\nf 28180 28628 28626\nf 28181 28625 28627\nf 28181 28627 28184\nf 28182 28183 28628\nf 28183 28186 28631\nf 28183 28629 28628\nf 28183 28631 28629\nf 28184 28188 28185\nf 28184 28627 28630\nf 28184 28630 28632\nf 28184 28632 28188\nf 28185 28188 28187\nf 28186 28189 28635\nf 28186 28635 28631\nf 28187 28188 28633\nf 28187 28633 28637\nf 28187 28637 28191\nf 28188 28632 28633\nf 28189 28190 28635\nf 28190 28193 28638\nf 28190 28636 28635\nf 28190 28638 28636\nf 28191 28196 28192\nf 28191 28637 28640\nf 28191 28640 28196\nf 28192 28196 28195\nf 28193 28194 28638\nf 28194 28197 28642\nf 28194 28639 28638\nf 28194 28642 28639\nf 28195 28196 28641\nf 28195 28641 28198\nf 28196 28640 28641\nf 28197 28198 28642\nf 28198 28641 28643\nf 28198 28643 28642\nf 28199 28200 28645\nf 28199 28645 28652\nf 28199 28652 28203\nf 28200 28201 28647\nf 28200 28647 28645\nf 28201 28202 28646\nf 28201 28205 28207\nf 28201 28207 28650\nf 28201 28646 28647\nf 28201 28650 28202\nf 28202 28644 28646\nf 28202 28649 28644\nf 28202 28650 28649\nf 28203 28652 28204\nf 28204 28652 28653\nf 28204 28653 28655\nf 28204 28655 28208\nf 28205 28206 28207\nf 28206 28209 28207\nf 28207 28209 28654\nf 28207 28654 28650\nf 28208 28655 28210\nf 28209 28211 28658\nf 28209 28656 28654\nf 28209 28658 28656\nf 28210 28655 28657\nf 28210 28657 28212\nf 28211 28213 28660\nf 28211 28660 28658\nf 28212 28657 28659\nf 28212 28659 28214\nf 28213 28215 28662\nf 28213 28662 28660\nf 28214 28659 28661\nf 28214 28661 28216\nf 28215 28217 28664\nf 28215 28664 28662\nf 28216 28661 28663\nf 28216 28663 28218\nf 28217 28219 28666\nf 28217 28666 28664\nf 28218 28663 28665\nf 28218 28665 28220\nf 28219 28221 28668\nf 28219 28668 28666\nf 28220 28665 28667\nf 28220 28667 28222\nf 28221 28223 28670\nf 28221 28670 28668\nf 28222 28667 28669\nf 28222 28669 28224\nf 28223 28225 28672\nf 28223 28672 28670\nf 28224 28669 28671\nf 28224 28671 28226\nf 28225 28227 28674\nf 28225 28674 28672\nf 28226 28671 28673\nf 28226 28673 28228\nf 28227 28229 28676\nf 28227 28676 28674\nf 28228 28673 28675\nf 28228 28675 28230\nf 28229 28231 28680\nf 28229 28680 28676\nf 28230 28675 28677\nf 28230 28677 28233\nf 28231 28232 28680\nf 28232 28235 28683\nf 28232 28681 28680\nf 28232 28683 28681\nf 28233 28234 28237\nf 28233 28237 28236\nf 28233 28677 28234\nf 28234 28677 28678\nf 28234 28678 28682\nf 28234 28682 28237\nf 28235 28238 28685\nf 28235 28685 28683\nf 28236 28237 28240\nf 28236 28240 28239\nf 28237 28682 28684\nf 28237 28684 28240\nf 28238 28241 28688\nf 28238 28688 28685\nf 28239 28240 28687\nf 28239 28687 28689\nf 28239 28689 28243\nf 28240 28684 28686\nf 28240 28686 28687\nf 28241 28242 28691\nf 28241 28691 28688\nf 28242 28244 28245\nf 28242 28245 28691\nf 28243 28689 28246\nf 28244 28249 28696\nf 28244 28696 28245\nf 28245 28692 28691\nf 28245 28696 28692\nf 28246 28689 28693\nf 28246 28693 28694\nf 28246 28694 28247\nf 28247 28694 28695\nf 28247 28695 28248\nf 28248 28695 28697\nf 28248 28697 28250\nf 28249 28250 28696\nf 28250 28697 28696\nf 28251 28252 28261\nf 28251 28260 28258\nf 28251 28261 28260\nf 28252 28253 28262\nf 28252 28262 28261\nf 28253 28254 28700\nf 28253 28700 28705\nf 28253 28705 28262\nf 28254 28255 28700\nf 28255 28256 28265\nf 28255 28263 28700\nf 28255 28265 28263\nf 28256 28264 28265\nf 28257 28259 28701\nf 28257 28701 28714\nf 28257 28714 28270\nf 28258 28260 28259\nf 28259 28260 28703\nf 28259 28702 28701\nf 28259 28703 28702\nf 28260 28261 28703\nf 28261 28262 28704\nf 28261 28704 28703\nf 28262 28705 28706\nf 28262 28706 28704\nf 28263 28265 28709\nf 28263 28707 28700\nf 28263 28709 28707\nf 28264 28266 28710\nf 28264 28710 28265\nf 28265 28710 28709\nf 28266 28267 28711\nf 28266 28711 28710\nf 28267 28268 28712\nf 28267 28712 28711\nf 28268 28269 28713\nf 28268 28713 28712\nf 28269 28271 28272\nf 28269 28272 28713\nf 28270 28714 28276\nf 28271 28273 28718\nf 28271 28718 28272\nf 28272 28716 28713\nf 28272 28718 28716\nf 28273 28274 28719\nf 28273 28719 28718\nf 28274 28275 28720\nf 28274 28720 28719\nf 28275 28277 28721\nf 28275 28721 28720\nf 28276 28714 28722\nf 28276 28722 28281\nf 28277 28278 28724\nf 28277 28723 28721\nf 28277 28724 28723\nf 28278 28279 28724\nf 28279 28280 28725\nf 28279 28725 28724\nf 28280 28283 28726\nf 28280 28726 28725\nf 28281 28722 28727\nf 28281 28727 28728\nf 28281 28728 28282\nf 28282 28728 28285\nf 28283 28284 28730\nf 28283 28729 28726\nf 28283 28730 28729\nf 28284 28287 28732\nf 28284 28732 28730\nf 28285 28728 28733\nf 28285 28733 28734\nf 28285 28734 28286\nf 28286 28734 28289\nf 28287 28288 28732\nf 28287 28291 28288\nf 28288 28291 28293\nf 28288 28293 28741\nf 28288 28735 28732\nf 28288 28741 28735\nf 28289 28734 28737\nf 28289 28737 28738\nf 28289 28738 28290\nf 28290 28738 28739\nf 28290 28739 28294\nf 28291 28292 28293\nf 28292 28301 28751\nf 28292 28740 28742\nf 28292 28742 28293\nf 28292 28751 28740\nf 28293 28742 28741\nf 28294 28296 28295\nf 28294 28739 28296\nf 28295 28296 28745\nf 28295 28745 28297\nf 28296 28739 28744\nf 28296 28744 28745\nf 28297 28745 28746\nf 28297 28746 28303\nf 28298 28313 28315\nf 28298 28315 28747\nf 28298 28747 28748\nf 28298 28748 28749\nf 28298 28749 28299\nf 28299 28749 28750\nf 28299 28750 28300\nf 28300 28750 28752\nf 28300 28752 28302\nf 28301 28302 28751\nf 28302 28752 28751\nf 28303 28305 28304\nf 28303 28746 28305\nf 28304 28305 28754\nf 28304 28754 28306\nf 28305 28746 28753\nf 28305 28753 28754\nf 28306 28754 28755\nf 28306 28755 28307\nf 28307 28755 28756\nf 28307 28756 28308\nf 28308 28756 28757\nf 28308 28757 28309\nf 28309 28757 28758\nf 28309 28758 28310\nf 28310 28758 28759\nf 28310 28759 28311\nf 28311 28759 28761\nf 28311 28761 28312\nf 28312 28761 28314\nf 28313 28314 28315\nf 28314 28760 28315\nf 28314 28761 28760\nf 28315 28760 28747\nf 28316 28317 28762\nf 28316 28762 28769\nf 28316 28769 28323\nf 28317 28318 28763\nf 28317 28763 28762\nf 28318 28319 28764\nf 28318 28764 28763\nf 28319 28324 28765\nf 28319 28765 28764\nf 28320 28321 28766\nf 28320 28766 28772\nf 28320 28772 28326\nf 28321 28322 28767\nf 28321 28767 28766\nf 28322 28328 28768\nf 28322 28768 28767\nf 28323 28769 28330\nf 28324 28325 28771\nf 28324 28770 28765\nf 28324 28771 28770\nf 28325 28332 28771\nf 28326 28772 28327\nf 28327 28772 28773\nf 28327 28773 28779\nf 28327 28779 28333\nf 28328 28329 28775\nf 28328 28774 28768\nf 28328 28775 28774\nf 28329 28334 28775\nf 28330 28769 28776\nf 28330 28776 28331\nf 28331 28776 28777\nf 28331 28777 28781\nf 28331 28781 28335\nf 28332 28336 28782\nf 28332 28778 28771\nf 28332 28782 28778\nf 28333 28779 28337\nf 28334 28338 28784\nf 28334 28780 28775\nf 28334 28784 28780\nf 28335 28781 28339\nf 28336 28340 28786\nf 28336 28786 28782\nf 28337 28779 28783\nf 28337 28783 28342\nf 28338 28343 28790\nf 28338 28790 28784\nf 28339 28781 28785\nf 28339 28785 28344\nf 28340 28341 28787\nf 28340 28787 28786\nf 28341 28345 28787\nf 28342 28783 28789\nf 28342 28789 28346\nf 28343 28347 28794\nf 28343 28794 28790\nf 28344 28785 28791\nf 28344 28791 28348\nf 28345 28349 28796\nf 28345 28792 28787\nf 28345 28796 28792\nf 28346 28789 28793\nf 28346 28793 28350\nf 28347 28351 28798\nf 28347 28798 28794\nf 28348 28791 28795\nf 28348 28795 28352\nf 28349 28353 28800\nf 28349 28800 28796\nf 28350 28793 28797\nf 28350 28797 28354\nf 28351 28355 28802\nf 28351 28802 28798\nf 28352 28795 28799\nf 28352 28799 28356\nf 28353 28357 28804\nf 28353 28804 28800\nf 28354 28797 28801\nf 28354 28801 28358\nf 28355 28359 28807\nf 28355 28807 28802\nf 28356 28799 28803\nf 28356 28803 28360\nf 28357 28361 28804\nf 28358 28801 28806\nf 28358 28806 28363\nf 28359 28364 28812\nf 28359 28812 28807\nf 28360 28803 28808\nf 28360 28808 28366\nf 28361 28362 28805\nf 28361 28367 28815\nf 28361 28805 28804\nf 28361 28815 28362\nf 28362 28809 28805\nf 28362 28810 28809\nf 28362 28815 28810\nf 28363 28806 28811\nf 28363 28811 28368\nf 28364 28365 28813\nf 28364 28813 28812\nf 28365 28369 28813\nf 28366 28808 28814\nf 28366 28814 28374\nf 28367 28376 28824\nf 28367 28824 28815\nf 28368 28811 28816\nf 28368 28816 28378\nf 28369 28370 28818\nf 28369 28817 28813\nf 28369 28818 28817\nf 28370 28371 28818\nf 28371 28372 28819\nf 28371 28819 28818\nf 28372 28379 28820\nf 28372 28820 28819\nf 28373 28375 28821\nf 28373 28821 28911\nf 28373 28911 28463\nf 28374 28814 28822\nf 28374 28822 28375\nf 28375 28822 28823\nf 28375 28823 28821\nf 28376 28377 28825\nf 28376 28825 28824\nf 28377 28465 28825\nf 28378 28816 28826\nf 28378 28826 28467\nf 28379 28380 28828\nf 28379 28827 28820\nf 28379 28828 28827\nf 28380 28381 28828\nf 28381 28382 28829\nf 28381 28829 28828\nf 28382 28383 28830\nf 28382 28830 28829\nf 28383 28384 28831\nf 28383 28831 28830\nf 28384 28385 28832\nf 28384 28832 28831\nf 28385 28386 28833\nf 28385 28833 28832\nf 28386 28387 28834\nf 28386 28834 28833\nf 28387 28388 28835\nf 28387 28835 28834\nf 28388 28389 28836\nf 28388 28836 28835\nf 28389 28390 28837\nf 28389 28837 28836\nf 28390 28391 28838\nf 28390 28838 28837\nf 28391 28392 28839\nf 28391 28839 28838\nf 28392 28393 28840\nf 28392 28840 28839\nf 28393 28394 28841\nf 28393 28841 28840\nf 28394 28395 28842\nf 28394 28842 28841\nf 28395 28396 28843\nf 28395 28843 28842\nf 28396 28397 28844\nf 28396 28844 28843\nf 28397 28398 28845\nf 28397 28845 28844\nf 28398 28399 28846\nf 28398 28846 28845\nf 28399 28400 28847\nf 28399 28847 28846\nf 28400 28401 28848\nf 28400 28848 28847\nf 28401 28402 28849\nf 28401 28849 28848\nf 28402 28403 28850\nf 28402 28850 28849\nf 28403 28404 28851\nf 28403 28851 28850\nf 28404 28405 28852\nf 28404 28852 28851\nf 28405 28406 28853\nf 28405 28853 28852\nf 28406 28407 28854\nf 28406 28854 28853\nf 28407 28408 28855\nf 28407 28855 28854\nf 28408 28409 28856\nf 28408 28856 28855\nf 28409 28410 28857\nf 28409 28857 28856\nf 28410 28411 28858\nf 28410 28858 28857\nf 28411 28412 28859\nf 28411 28859 28858\nf 28412 28413 28860\nf 28412 28860 28859\nf 28413 28414 28861\nf 28413 28861 28860\nf 28414 28415 28862\nf 28414 28862 28861\nf 28415 28416 28863\nf 28415 28863 28862\nf 28416 28417 28864\nf 28416 28864 28863\nf 28417 28418 28865\nf 28417 28865 28864\nf 28418 28419 28866\nf 28418 28866 28865\nf 28419 28420 28867\nf 28419 28867 28866\nf 28420 28421 28868\nf 28420 28868 28867\nf 28421 28422 28869\nf 28421 28869 28868\nf 28422 28423 28870\nf 28422 28870 28869\nf 28423 28424 28871\nf 28423 28871 28870\nf 28424 28425 28872\nf 28424 28872 28871\nf 28425 28426 28873\nf 28425 28873 28872\nf 28426 28427 28874\nf 28426 28874 28873\nf 28427 28428 28875\nf 28427 28875 28874\nf 28428 28429 28876\nf 28428 28876 28875\nf 28429 28430 28877\nf 28429 28877 28876\nf 28430 28431 28878\nf 28430 28878 28877\nf 28431 28432 28879\nf 28431 28879 28878\nf 28432 28433 28880\nf 28432 28880 28879\nf 28433 28434 28881\nf 28433 28881 28880\nf 28434 28435 28882\nf 28434 28882 28881\nf 28435 28436 28883\nf 28435 28883 28882\nf 28436 28437 28884\nf 28436 28884 28883\nf 28437 28438 28885\nf 28437 28885 28884\nf 28438 28439 28886\nf 28438 28886 28885\nf 28439 28440 28887\nf 28439 28887 28886\nf 28440 28441 28888\nf 28440 28888 28887\nf 28441 28442 28889\nf 28441 28889 28888\nf 28442 28443 28890\nf 28442 28890 28889\nf 28443 28444 28891\nf 28443 28891 28890\nf 28444 28445 28892\nf 28444 28892 28891\nf 28445 28446 28893\nf 28445 28893 28892\nf 28446 28447 28894\nf 28446 28894 28893\nf 28447 28448 28895\nf 28447 28895 28894\nf 28448 28449 28896\nf 28448 28896 28895\nf 28449 28450 28897\nf 28449 28897 28896\nf 28450 28451 28898\nf 28450 28898 28897\nf 28451 28452 28899\nf 28451 28899 28898\nf 28452 28453 28900\nf 28452 28900 28899\nf 28453 28454 28901\nf 28453 28901 28900\nf 28454 28455 28902\nf 28454 28902 28901\nf 28455 28456 28903\nf 28455 28903 28902\nf 28456 28457 28904\nf 28456 28904 28903\nf 28457 28458 28905\nf 28457 28905 28904\nf 28458 28459 28906\nf 28458 28906 28905\nf 28459 28460 28907\nf 28459 28907 28906\nf 28460 28461 28908\nf 28460 28908 28907\nf 28461 28462 28909\nf 28461 28909 28908\nf 28462 28464 28910\nf 28462 28910 28909\nf 28463 28911 28464\nf 28464 28911 28912\nf 28464 28912 28910\nf 28465 28466 28913\nf 28465 28913 28825\nf 28466 28468 28916\nf 28466 28914 28913\nf 28466 28916 28914\nf 28467 28826 28915\nf 28467 28915 28469\nf 28468 28471 28919\nf 28468 28919 28916\nf 28469 28915 28917\nf 28469 28917 28918\nf 28469 28918 28470\nf 28470 28918 28472\nf 28471 28473 28921\nf 28471 28921 28919\nf 28472 28918 28920\nf 28472 28920 28475\nf 28473 28474 28921\nf 28474 28477 28925\nf 28474 28922 28921\nf 28474 28925 28922\nf 28475 28920 28923\nf 28475 28923 28479\nf 28476 28486 28933\nf 28476 28924 28926\nf 28476 28926 28478\nf 28476 28933 28924\nf 28477 28478 28925\nf 28478 28926 28925\nf 28479 28923 28927\nf 28479 28927 28928\nf 28479 28928 28480\nf 28480 28928 28929\nf 28480 28929 28481\nf 28481 28929 28488\nf 28482 28574 28576\nf 28482 28576 29022\nf 28482 28930 28483\nf 28482 29022 28930\nf 28483 28930 28931\nf 28483 28931 28484\nf 28484 28931 28932\nf 28484 28932 28485\nf 28485 28932 28934\nf 28485 28934 28487\nf 28486 28487 28933\nf 28487 28934 28933\nf 28488 28929 28935\nf 28488 28935 28936\nf 28488 28936 28489\nf 28489 28936 28937\nf 28489 28937 28490\nf 28490 28937 28577\nf 28491 28582 29028\nf 28491 28938 28939\nf 28491 28939 28492\nf 28491 29028 28938\nf 28492 28939 28940\nf 28492 28940 28493\nf 28493 28940 28941\nf 28493 28941 28494\nf 28494 28941 28942\nf 28494 28942 28495\nf 28495 28942 28943\nf 28495 28943 28496\nf 28496 28943 28944\nf 28496 28944 28497\nf 28497 28944 28945\nf 28497 28945 28498\nf 28498 28945 28946\nf 28498 28946 28499\nf 28499 28946 28947\nf 28499 28947 28500\nf 28500 28947 28948\nf 28500 28948 28501\nf 28501 28948 28949\nf 28501 28949 28502\nf 28502 28949 28950\nf 28502 28950 28503\nf 28503 28950 28951\nf 28503 28951 28504\nf 28504 28951 28952\nf 28504 28952 28505\nf 28505 28952 28953\nf 28505 28953 28506\nf 28506 28953 28954\nf 28506 28954 28507\nf 28507 28954 28955\nf 28507 28955 28508\nf 28508 28955 28956\nf 28508 28956 28509\nf 28509 28956 28957\nf 28509 28957 28510\nf 28510 28957 28958\nf 28510 28958 28511\nf 28511 28958 28959\nf 28511 28959 28512\nf 28512 28959 28960\nf 28512 28960 28513\nf 28513 28960 28961\nf 28513 28961 28514\nf 28514 28961 28962\nf 28514 28962 28515\nf 28515 28962 28963\nf 28515 28963 28516\nf 28516 28963 28964\nf 28516 28964 28517\nf 28517 28964 28965\nf 28517 28965 28518\nf 28518 28965 28966\nf 28518 28966 28519\nf 28519 28966 28967\nf 28519 28967 28520\nf 28520 28967 28968\nf 28520 28968 28521\nf 28521 28968 28969\nf 28521 28969 28522\nf 28522 28969 28970\nf 28522 28970 28523\nf 28523 28970 28971\nf 28523 28971 28524\nf 28524 28971 28972\nf 28524 28972 28525\nf 28525 28972 28973\nf 28525 28973 28526\nf 28526 28973 28974\nf 28526 28974 28527\nf 28527 28974 28975\nf 28527 28975 28528\nf 28528 28975 28976\nf 28528 28976 28529\nf 28529 28976 28977\nf 28529 28977 28530\nf 28530 28977 28978\nf 28530 28978 28531\nf 28531 28978 28979\nf 28531 28979 28532\nf 28532 28979 28980\nf 28532 28980 28533\nf 28533 28980 28981\nf 28533 28981 28534\nf 28534 28981 28982\nf 28534 28982 28535\nf 28535 28982 28983\nf 28535 28983 28536\nf 28536 28983 28984\nf 28536 28984 28537\nf 28537 28984 28985\nf 28537 28985 28538\nf 28538 28985 28986\nf 28538 28986 28539\nf 28539 28986 28987\nf 28539 28987 28540\nf 28540 28987 28988\nf 28540 28988 28541\nf 28541 28988 28989\nf 28541 28989 28542\nf 28542 28989 28990\nf 28542 28990 28543\nf 28543 28990 28991\nf 28543 28991 28544\nf 28544 28991 28992\nf 28544 28992 28545\nf 28545 28992 28993\nf 28545 28993 28546\nf 28546 28993 28994\nf 28546 28994 28547\nf 28547 28994 28995\nf 28547 28995 28548\nf 28548 28995 28996\nf 28548 28996 28549\nf 28549 28996 28997\nf 28549 28997 28550\nf 28550 28997 28998\nf 28550 28998 28551\nf 28551 28998 28999\nf 28551 28999 28552\nf 28552 28999 29000\nf 28552 29000 28553\nf 28553 29000 29001\nf 28553 29001 28554\nf 28554 29001 29002\nf 28554 29002 28555\nf 28555 29002 29003\nf 28555 29003 28556\nf 28556 29003 29004\nf 28556 29004 28557\nf 28557 29004 29005\nf 28557 29005 28558\nf 28558 29005 29006\nf 28558 29006 28559\nf 28559 29006 29007\nf 28559 29007 28560\nf 28560 29007 29008\nf 28560 29008 28561\nf 28561 29008 29009\nf 28561 29009 28562\nf 28562 29009 29010\nf 28562 29010 28563\nf 28563 29010 29011\nf 28563 29011 28564\nf 28564 29011 29012\nf 28564 29012 28565\nf 28565 29012 29013\nf 28565 29013 28566\nf 28566 29013 29014\nf 28566 29014 28567\nf 28567 29014 29015\nf 28567 29015 28568\nf 28568 29015 29016\nf 28568 29016 28569\nf 28569 29016 29017\nf 28569 29017 28570\nf 28570 29017 29018\nf 28570 29018 28571\nf 28571 29018 29019\nf 28571 29019 28572\nf 28572 29019 29020\nf 28572 29020 28573\nf 28573 29020 29021\nf 28573 29021 28575\nf 28574 28575 28576\nf 28575 29021 29023\nf 28575 29023 28576\nf 28576 29023 29022\nf 28577 28937 29024\nf 28577 29024 29025\nf 28577 29025 28578\nf 28578 29025 29026\nf 28578 29026 28579\nf 28579 29026 28580\nf 28580 28584 29032\nf 28580 29026 28584\nf 28580 29027 28581\nf 28580 29032 29027\nf 28581 29027 29029\nf 28581 29029 28583\nf 28582 28583 29028\nf 28583 29029 29028\nf 28584 29026 29030\nf 28584 29030 29033\nf 28584 29033 29032\nf 28585 28586 29034\nf 28585 29034 29039\nf 28585 29039 28589\nf 28586 28587 29035\nf 28586 29035 29034\nf 28587 28588 29036\nf 28587 29036 29035\nf 28588 28590 29038\nf 28588 29037 29036\nf 28588 29038 29037\nf 28589 29039 28593\nf 28590 28591 28592\nf 28590 28592 29038\nf 28591 28594 28592\nf 28592 28594 29040\nf 28592 29040 29038\nf 28593 29039 29041\nf 28593 29041 28596\nf 28594 28595 29043\nf 28594 29042 29040\nf 28594 29043 29042\nf 28595 28598 29043\nf 28596 29041 29045\nf 28596 29045 28597\nf 28597 29045 29046\nf 28597 29046 29049\nf 28597 29049 28600\nf 28598 28599 29048\nf 28598 29047 29043\nf 28598 29048 29047\nf 28599 28601 29048\nf 28600 29049 28602\nf 28601 28603 29053\nf 28601 29050 29048\nf 28601 29053 29050\nf 28602 29049 29052\nf 28602 29052 28604\nf 28603 28605 29055\nf 28603 29055 29053\nf 28604 29052 29054\nf 28604 29054 28606\nf 28605 28607 29057\nf 28605 29057 29055\nf 28606 29054 29056\nf 28606 29056 28608\nf 28607 28609 29059\nf 28607 29059 29057\nf 28608 29056 29058\nf 28608 29058 28610\nf 28609 28611 29061\nf 28609 29061 29059\nf 28610 29058 29060\nf 28610 29060 28612\nf 28611 28613 29063\nf 28611 29063 29061\nf 28612 29060 29062\nf 28612 29062 28614\nf 28613 28615 29065\nf 28613 29065 29063\nf 28614 29062 29064\nf 28614 29064 28616\nf 28615 28617 29065\nf 28616 29064 29067\nf 28616 29067 28620\nf 28617 28618 28619\nf 28617 28619 29065\nf 28618 28621 29068\nf 28618 29068 28619\nf 28619 29066 29065\nf 28619 29068 29066\nf 28620 29067 29069\nf 28620 29069 28622\nf 28621 28624 29073\nf 28621 29070 29068\nf 28621 29073 29070\nf 28622 29069 29071\nf 28622 29071 29072\nf 28622 29072 28623\nf 28623 29072 28625\nf 28624 28626 29075\nf 28624 29075 29073\nf 28625 29072 29074\nf 28625 29074 28627\nf 28626 28628 29077\nf 28626 29077 29075\nf 28627 29074 29076\nf 28627 29076 28630\nf 28628 28629 29077\nf 28629 28631 29081\nf 28629 29078 29077\nf 28629 29081 29078\nf 28630 29076 29079\nf 28630 29079 28632\nf 28631 28635 29083\nf 28631 29083 29081\nf 28632 28634 28633\nf 28632 29079 29080\nf 28632 29080 28634\nf 28633 28634 28637\nf 28634 29080 29082\nf 28634 29082 28637\nf 28635 28636 29083\nf 28636 28638 29086\nf 28636 29084 29083\nf 28636 29086 29084\nf 28637 29082 29085\nf 28637 29085 28640\nf 28638 28639 29086\nf 28639 28642 29091\nf 28639 29087 29086\nf 28639 29091 29087\nf 28640 29085 29089\nf 28640 29089 29090\nf 28640 29090 28641\nf 28641 29090 29092\nf 28641 29092 28643\nf 28642 28643 29091\nf 28643 29092 29091\nf 28644 28648 28646\nf 28644 28649 29096\nf 28644 29093 28648\nf 28644 29094 29093\nf 28644 29096 29094\nf 28645 28647 29098\nf 28645 29098 29101\nf 28645 29101 28652\nf 28646 28648 28647\nf 28647 28648 29097\nf 28647 29097 29098\nf 28648 29093 29097\nf 28649 28650 28651\nf 28649 28651 29096\nf 28650 28654 28651\nf 28651 28654 29100\nf 28651 29100 29096\nf 28652 29101 28653\nf 28653 29101 29102\nf 28653 29102 29104\nf 28653 29104 28655\nf 28654 28656 29105\nf 28654 29103 29100\nf 28654 29105 29103\nf 28655 29104 28657\nf 28656 28658 29107\nf 28656 29107 29105\nf 28657 29104 29106\nf 28657 29106 28659\nf 28658 28660 29109\nf 28658 29109 29107\nf 28659 29106 29108\nf 28659 29108 28661\nf 28660 28662 29111\nf 28660 29111 29109\nf 28661 29108 29110\nf 28661 29110 28663\nf 28662 28664 29113\nf 28662 29113 29111\nf 28663 29110 29112\nf 28663 29112 28665\nf 28664 28666 29115\nf 28664 29115 29113\nf 28665 29112 29114\nf 28665 29114 28667\nf 28666 28668 29117\nf 28666 29117 29115\nf 28667 29114 29116\nf 28667 29116 28669\nf 28668 28670 29119\nf 28668 29119 29117\nf 28669 29116 29118\nf 28669 29118 28671\nf 28670 28672 29121\nf 28670 29121 29119\nf 28671 29118 29120\nf 28671 29120 28673\nf 28672 28674 29123\nf 28672 29123 29121\nf 28673 29120 29122\nf 28673 29122 28675\nf 28674 28676 29127\nf 28674 29127 29123\nf 28675 29122 29124\nf 28675 29124 28677\nf 28676 28680 29129\nf 28676 29129 29127\nf 28677 28679 28678\nf 28677 29124 28679\nf 28678 28679 29128\nf 28678 29128 28682\nf 28679 29124 29125\nf 28679 29125 29128\nf 28680 28681 29129\nf 28681 28683 29132\nf 28681 29130 29129\nf 28681 29132 29130\nf 28682 29128 29131\nf 28682 29131 28684\nf 28683 28685 29134\nf 28683 29134 29132\nf 28684 29131 29133\nf 28684 29133 28686\nf 28685 28688 29136\nf 28685 29136 29134\nf 28686 28690 28687\nf 28686 29133 29135\nf 28686 29135 29137\nf 28686 29137 28690\nf 28687 28690 28689\nf 28688 28691 29139\nf 28688 29139 29136\nf 28689 28690 29138\nf 28689 29138 29141\nf 28689 29141 28693\nf 28690 29137 29138\nf 28691 28692 29139\nf 28692 28696 29143\nf 28692 29140 29139\nf 28692 29143 29140\nf 28693 28698 28694\nf 28693 29141 29145\nf 28693 29145 28698\nf 28694 28698 28699\nf 28694 28699 28695\nf 28695 28699 29147\nf 28695 29144 28697\nf 28695 29147 29144\nf 28696 28697 29143\nf 28697 29144 29143\nf 28698 29145 29146\nf 28698 29146 28699\nf 28699 29146 29148\nf 28699 29148 29147\nf 28700 28707 28708\nf 28700 28708 28705\nf 28701 28702 29149\nf 28701 28715 28714\nf 28701 29149 29158\nf 28701 29158 28715\nf 28702 28703 29149\nf 28703 28704 29150\nf 28703 29150 29149\nf 28704 28706 29151\nf 28704 29151 29150\nf 28705 28708 28706\nf 28706 28708 29153\nf 28706 29152 29151\nf 28706 29153 29152\nf 28707 28709 29153\nf 28707 29153 28708\nf 28709 28710 29154\nf 28709 29154 29153\nf 28710 28711 29155\nf 28710 29155 29154\nf 28711 28712 29156\nf 28711 29156 29155\nf 28712 28713 29157\nf 28712 29157 29156\nf 28713 28716 28717\nf 28713 28717 29157\nf 28714 28715 29168\nf 28714 29168 28722\nf 28715 29158 29159\nf 28715 29159 29168\nf 28716 28718 29162\nf 28716 29162 28717\nf 28717 29161 29157\nf 28717 29162 29161\nf 28718 28719 29164\nf 28718 29164 29162\nf 28719 28720 29165\nf 28719 29165 29164\nf 28720 28721 29166\nf 28720 29166 29165\nf 28721 28723 29167\nf 28721 29167 29166\nf 28722 29168 28727\nf 28723 28724 29170\nf 28723 29169 29167\nf 28723 29170 29169\nf 28724 28725 29170\nf 28725 28726 29172\nf 28725 29172 29170\nf 28726 28729 29175\nf 28726 29174 29172\nf 28726 29175 29174\nf 28727 29168 29176\nf 28727 29176 29177\nf 28727 29177 28728\nf 28728 29177 28733\nf 28729 28730 28731\nf 28729 28731 29175\nf 28730 28732 29180\nf 28730 29180 28731\nf 28731 29179 29175\nf 28731 29180 29179\nf 28732 28735 29182\nf 28732 29182 29180\nf 28733 29177 29184\nf 28733 29184 29185\nf 28733 29185 28734\nf 28734 29185 28737\nf 28735 28736 29182\nf 28735 28741 28736\nf 28736 28741 28743\nf 28736 28743 29193\nf 28736 29186 29182\nf 28736 29193 29186\nf 28737 29185 29188\nf 28737 29188 29189\nf 28737 29189 28738\nf 28738 29189 29190\nf 28738 29190 28739\nf 28739 29190 28744\nf 28740 28751 29203\nf 28740 29191 29192\nf 28740 29192 28742\nf 28740 29203 29191\nf 28741 28742 28743\nf 28742 29192 29194\nf 28742 29194 28743\nf 28743 29194 29193\nf 28744 29190 29196\nf 28744 29196 29197\nf 28744 29197 28745\nf 28745 29197 29198\nf 28745 29198 28746\nf 28746 29198 28753\nf 28747 28760 29215\nf 28747 29199 29200\nf 28747 29200 28748\nf 28747 29215 29199\nf 28748 29200 29201\nf 28748 29201 28749\nf 28749 29201 29202\nf 28749 29202 28750\nf 28750 29202 29204\nf 28750 29204 28752\nf 28751 28752 29203\nf 28752 29204 29203\nf 28753 29198 29207\nf 28753 29207 29208\nf 28753 29208 28754\nf 28754 29208 29210\nf 28754 29210 28755\nf 28755 29210 29211\nf 28755 29211 28756\nf 28756 29211 29212\nf 28756 29212 28757\nf 28757 29212 29213\nf 28757 29213 28758\nf 28758 29213 29214\nf 28758 29214 28759\nf 28759 29214 29216\nf 28759 29216 28761\nf 28760 28761 29215\nf 28761 29216 29215\nf 28762 28763 29218\nf 28762 29218 29225\nf 28762 29225 28769\nf 28763 28764 29219\nf 28763 29219 29218\nf 28764 28765 29220\nf 28764 29220 29219\nf 28765 28770 29221\nf 28765 29221 29220\nf 28766 28767 29222\nf 28766 29222 29228\nf 28766 29228 28772\nf 28767 28768 29223\nf 28767 29223 29222\nf 28768 28774 29224\nf 28768 29224 29223\nf 28769 29225 28776\nf 28770 28771 29227\nf 28770 29226 29221\nf 28770 29227 29226\nf 28771 28778 29227\nf 28772 29228 28773\nf 28773 29228 29229\nf 28773 29229 29235\nf 28773 29235 28779\nf 28774 28775 29231\nf 28774 29230 29224\nf 28774 29231 29230\nf 28775 28780 29231\nf 28776 29225 29232\nf 28776 29232 28777\nf 28777 29232 29233\nf 28777 29233 29237\nf 28777 29237 28781\nf 28778 28782 29238\nf 28778 29234 29227\nf 28778 29238 29234\nf 28779 29235 28783\nf 28780 28784 29241\nf 28780 29236 29231\nf 28780 29241 29236\nf 28781 29237 28785\nf 28782 28786 29238\nf 28783 29235 29240\nf 28783 29240 28789\nf 28784 28790 29245\nf 28784 29245 29241\nf 28785 29237 29242\nf 28785 29242 28791\nf 28786 28787 28788\nf 28786 28788 29239\nf 28786 29239 29238\nf 28787 28792 28788\nf 28788 28792 29243\nf 28788 29243 29239\nf 28789 29240 29244\nf 28789 29244 28793\nf 28790 28794 29249\nf 28790 29249 29245\nf 28791 29242 29246\nf 28791 29246 28795\nf 28792 28796 29251\nf 28792 29247 29243\nf 28792 29251 29247\nf 28793 29244 29248\nf 28793 29248 28797\nf 28794 28798 29253\nf 28794 29253 29249\nf 28795 29246 29250\nf 28795 29250 28799\nf 28796 28800 29255\nf 28796 29255 29251\nf 28797 29248 29252\nf 28797 29252 28801\nf 28798 28802 29257\nf 28798 29257 29253\nf 28799 29250 29254\nf 28799 29254 28803\nf 28800 28804 29259\nf 28800 29259 29255\nf 28801 29252 29256\nf 28801 29256 28806\nf 28802 28807 29262\nf 28802 29262 29257\nf 28803 29254 29258\nf 28803 29258 28808\nf 28804 28805 29260\nf 28804 29260 29259\nf 28805 28809 29260\nf 28806 29256 29261\nf 28806 29261 28811\nf 28807 28812 29267\nf 28807 29267 29262\nf 28808 29258 29263\nf 28808 29263 28814\nf 28809 28810 29264\nf 28809 29264 29260\nf 28810 28815 29270\nf 28810 29265 29264\nf 28810 29270 29265\nf 28811 29261 29266\nf 28811 29266 28816\nf 28812 28813 29268\nf 28812 29268 29267\nf 28813 28817 29268\nf 28814 29263 29269\nf 28814 29269 28822\nf 28815 28824 29279\nf 28815 29279 29270\nf 28816 29266 29271\nf 28816 29271 28826\nf 28817 28818 29273\nf 28817 29272 29268\nf 28817 29273 29272\nf 28818 28819 29273\nf 28819 28820 29274\nf 28819 29274 29273\nf 28820 28827 29275\nf 28820 29275 29274\nf 28821 28823 29276\nf 28821 29276 29366\nf 28821 29366 28911\nf 28822 29269 29277\nf 28822 29277 28823\nf 28823 29277 29278\nf 28823 29278 29276\nf 28824 28825 29280\nf 28824 29280 29279\nf 28825 28913 29280\nf 28826 29271 29281\nf 28826 29281 28915\nf 28827 28828 29283\nf 28827 29282 29275\nf 28827 29283 29282\nf 28828 28829 29283\nf 28829 28830 29284\nf 28829 29284 29283\nf 28830 28831 29285\nf 28830 29285 29284\nf 28831 28832 29286\nf 28831 29286 29285\nf 28832 28833 29287\nf 28832 29287 29286\nf 28833 28834 29288\nf 28833 29288 29287\nf 28834 28835 29289\nf 28834 29289 29288\nf 28835 28836 29290\nf 28835 29290 29289\nf 28836 28837 29291\nf 28836 29291 29290\nf 28837 28838 29292\nf 28837 29292 29291\nf 28838 28839 29293\nf 28838 29293 29292\nf 28839 28840 29294\nf 28839 29294 29293\nf 28840 28841 29295\nf 28840 29295 29294\nf 28841 28842 29296\nf 28841 29296 29295\nf 28842 28843 29297\nf 28842 29297 29296\nf 28843 28844 29298\nf 28843 29298 29297\nf 28844 28845 29299\nf 28844 29299 29298\nf 28845 28846 29300\nf 28845 29300 29299\nf 28846 28847 29301\nf 28846 29301 29300\nf 28847 28848 29302\nf 28847 29302 29301\nf 28848 28849 29303\nf 28848 29303 29302\nf 28849 28850 29304\nf 28849 29304 29303\nf 28850 28851 29305\nf 28850 29305 29304\nf 28851 28852 29306\nf 28851 29306 29305\nf 28852 28853 29307\nf 28852 29307 29306\nf 28853 28854 29308\nf 28853 29308 29307\nf 28854 28855 29309\nf 28854 29309 29308\nf 28855 28856 29310\nf 28855 29310 29309\nf 28856 28857 29311\nf 28856 29311 29310\nf 28857 28858 29312\nf 28857 29312 29311\nf 28858 28859 29313\nf 28858 29313 29312\nf 28859 28860 29314\nf 28859 29314 29313\nf 28860 28861 29315\nf 28860 29315 29314\nf 28861 28862 29316\nf 28861 29316 29315\nf 28862 28863 29317\nf 28862 29317 29316\nf 28863 28864 29318\nf 28863 29318 29317\nf 28864 28865 29319\nf 28864 29319 29318\nf 28865 28866 29320\nf 28865 29320 29319\nf 28866 28867 29321\nf 28866 29321 29320\nf 28867 28868 29322\nf 28867 29322 29321\nf 28868 28869 29323\nf 28868 29323 29322\nf 28869 28870 29324\nf 28869 29324 29323\nf 28870 28871 29325\nf 28870 29325 29324\nf 28871 28872 29326\nf 28871 29326 29325\nf 28872 28873 29327\nf 28872 29327 29326\nf 28873 28874 29328\nf 28873 29328 29327\nf 28874 28875 29329\nf 28874 29329 29328\nf 28875 28876 29330\nf 28875 29330 29329\nf 28876 28877 29331\nf 28876 29331 29330\nf 28877 28878 29332\nf 28877 29332 29331\nf 28878 28879 29333\nf 28878 29333 29332\nf 28879 28880 29334\nf 28879 29334 29333\nf 28880 28881 29335\nf 28880 29335 29334\nf 28881 28882 29336\nf 28881 29336 29335\nf 28882 28883 29337\nf 28882 29337 29336\nf 28883 28884 29338\nf 28883 29338 29337\nf 28884 28885 29339\nf 28884 29339 29338\nf 28885 28886 29340\nf 28885 29340 29339\nf 28886 28887 29341\nf 28886 29341 29340\nf 28887 28888 29342\nf 28887 29342 29341\nf 28888 28889 29343\nf 28888 29343 29342\nf 28889 28890 29344\nf 28889 29344 29343\nf 28890 28891 29345\nf 28890 29345 29344\nf 28891 28892 29346\nf 28891 29346 29345\nf 28892 28893 29347\nf 28892 29347 29346\nf 28893 28894 29348\nf 28893 29348 29347\nf 28894 28895 29349\nf 28894 29349 29348\nf 28895 28896 29350\nf 28895 29350 29349\nf 28896 28897 29351\nf 28896 29351 29350\nf 28897 28898 29352\nf 28897 29352 29351\nf 28898 28899 29353\nf 28898 29353 29352\nf 28899 28900 29354\nf 28899 29354 29353\nf 28900 28901 29355\nf 28900 29355 29354\nf 28901 28902 29356\nf 28901 29356 29355\nf 28902 28903 29357\nf 28902 29357 29356\nf 28903 28904 29358\nf 28903 29358 29357\nf 28904 28905 29359\nf 28904 29359 29358\nf 28905 28906 29360\nf 28905 29360 29359\nf 28906 28907 29361\nf 28906 29361 29360\nf 28907 28908 29362\nf 28907 29362 29361\nf 28908 28909 29363\nf 28908 29363 29362\nf 28909 28910 29364\nf 28909 29364 29363\nf 28910 28912 29365\nf 28910 29365 29364\nf 28911 29366 28912\nf 28912 29366 29367\nf 28912 29367 29365\nf 28913 28914 29368\nf 28913 29368 29280\nf 28914 28916 29371\nf 28914 29369 29368\nf 28914 29371 29369\nf 28915 29281 29370\nf 28915 29370 28917\nf 28916 28919 29374\nf 28916 29374 29371\nf 28917 29370 29372\nf 28917 29372 29373\nf 28917 29373 28918\nf 28918 29373 28920\nf 28919 28921 29376\nf 28919 29376 29374\nf 28920 29373 29375\nf 28920 29375 28923\nf 28921 28922 29376\nf 28922 28925 29380\nf 28922 29377 29376\nf 28922 29380 29377\nf 28923 29375 29378\nf 28923 29378 28927\nf 28924 28933 29388\nf 28924 29379 29381\nf 28924 29381 28926\nf 28924 29388 29379\nf 28925 28926 29380\nf 28926 29381 29380\nf 28927 29378 29382\nf 28927 29382 29383\nf 28927 29383 28928\nf 28928 29383 29384\nf 28928 29384 28929\nf 28929 29384 28935\nf 28930 29022 29477\nf 28930 29385 29386\nf 28930 29386 28931\nf 28930 29477 29385\nf 28931 29386 29387\nf 28931 29387 28932\nf 28932 29387 29389\nf 28932 29389 28934\nf 28933 28934 29388\nf 28934 29389 29388\nf 28935 29384 29390\nf 28935 29390 29391\nf 28935 29391 28936\nf 28936 29391 29392\nf 28936 29392 28937\nf 28937 29392 29024\nf 28938 29028 29482\nf 28938 29393 29394\nf 28938 29394 28939\nf 28938 29482 29393\nf 28939 29394 29395\nf 28939 29395 28940\nf 28940 29395 29396\nf 28940 29396 28941\nf 28941 29396 29397\nf 28941 29397 28942\nf 28942 29397 29398\nf 28942 29398 28943\nf 28943 29398 29399\nf 28943 29399 28944\nf 28944 29399 29400\nf 28944 29400 28945\nf 28945 29400 29401\nf 28945 29401 28946\nf 28946 29401 29402\nf 28946 29402 28947\nf 28947 29402 29403\nf 28947 29403 28948\nf 28948 29403 29404\nf 28948 29404 28949\nf 28949 29404 29405\nf 28949 29405 28950\nf 28950 29405 29406\nf 28950 29406 28951\nf 28951 29406 29407\nf 28951 29407 28952\nf 28952 29407 29408\nf 28952 29408 28953\nf 28953 29408 29409\nf 28953 29409 28954\nf 28954 29409 29410\nf 28954 29410 28955\nf 28955 29410 29411\nf 28955 29411 28956\nf 28956 29411 29412\nf 28956 29412 28957\nf 28957 29412 29413\nf 28957 29413 28958\nf 28958 29413 29414\nf 28958 29414 28959\nf 28959 29414 29415\nf 28959 29415 28960\nf 28960 29415 29416\nf 28960 29416 28961\nf 28961 29416 29417\nf 28961 29417 28962\nf 28962 29417 29418\nf 28962 29418 28963\nf 28963 29418 29419\nf 28963 29419 28964\nf 28964 29419 29420\nf 28964 29420 28965\nf 28965 29420 29421\nf 28965 29421 28966\nf 28966 29421 29422\nf 28966 29422 28967\nf 28967 29422 29423\nf 28967 29423 28968\nf 28968 29423 29424\nf 28968 29424 28969\nf 28969 29424 29425\nf 28969 29425 28970\nf 28970 29425 29426\nf 28970 29426 28971\nf 28971 29426 29427\nf 28971 29427 28972\nf 28972 29427 29428\nf 28972 29428 28973\nf 28973 29428 29429\nf 28973 29429 28974\nf 28974 29429 29430\nf 28974 29430 28975\nf 28975 29430 29431\nf 28975 29431 28976\nf 28976 29431 29432\nf 28976 29432 28977\nf 28977 29432 29433\nf 28977 29433 28978\nf 28978 29433 29434\nf 28978 29434 28979\nf 28979 29434 29435\nf 28979 29435 28980\nf 28980 29435 29436\nf 28980 29436 28981\nf 28981 29436 29437\nf 28981 29437 28982\nf 28982 29437 29438\nf 28982 29438 28983\nf 28983 29438 29439\nf 28983 29439 28984\nf 28984 29439 29440\nf 28984 29440 28985\nf 28985 29440 29441\nf 28985 29441 28986\nf 28986 29441 29442\nf 28986 29442 28987\nf 28987 29442 29443\nf 28987 29443 28988\nf 28988 29443 29444\nf 28988 29444 28989\nf 28989 29444 29445\nf 28989 29445 28990\nf 28990 29445 29446\nf 28990 29446 28991\nf 28991 29446 29447\nf 28991 29447 28992\nf 28992 29447 29448\nf 28992 29448 28993\nf 28993 29448 29449\nf 28993 29449 28994\nf 28994 29449 29450\nf 28994 29450 28995\nf 28995 29450 29451\nf 28995 29451 28996\nf 28996 29451 29452\nf 28996 29452 28997\nf 28997 29452 29453\nf 28997 29453 28998\nf 28998 29453 29454\nf 28998 29454 28999\nf 28999 29454 29455\nf 28999 29455 29000\nf 29000 29455 29456\nf 29000 29456 29001\nf 29001 29456 29457\nf 29001 29457 29002\nf 29002 29457 29458\nf 29002 29458 29003\nf 29003 29458 29459\nf 29003 29459 29004\nf 29004 29459 29460\nf 29004 29460 29005\nf 29005 29460 29461\nf 29005 29461 29006\nf 29006 29461 29462\nf 29006 29462 29007\nf 29007 29462 29463\nf 29007 29463 29008\nf 29008 29463 29464\nf 29008 29464 29009\nf 29009 29464 29465\nf 29009 29465 29010\nf 29010 29465 29466\nf 29010 29466 29011\nf 29011 29466 29467\nf 29011 29467 29012\nf 29012 29467 29468\nf 29012 29468 29013\nf 29013 29468 29469\nf 29013 29469 29014\nf 29014 29469 29470\nf 29014 29470 29015\nf 29015 29470 29471\nf 29015 29471 29016\nf 29016 29471 29472\nf 29016 29472 29017\nf 29017 29472 29473\nf 29017 29473 29018\nf 29018 29473 29474\nf 29018 29474 29019\nf 29019 29474 29475\nf 29019 29475 29020\nf 29020 29475 29476\nf 29020 29476 29021\nf 29021 29476 29478\nf 29021 29478 29023\nf 29022 29023 29477\nf 29023 29478 29477\nf 29024 29392 29479\nf 29024 29479 29480\nf 29024 29480 29025\nf 29025 29480 29026\nf 29026 29031 29030\nf 29026 29480 29031\nf 29027 29032 29487\nf 29027 29481 29483\nf 29027 29483 29029\nf 29027 29487 29481\nf 29028 29029 29482\nf 29029 29483 29482\nf 29030 29031 29486\nf 29030 29486 29033\nf 29031 29480 29484\nf 29031 29484 29486\nf 29032 29033 29487\nf 29033 29486 29488\nf 29033 29488 29487\nf 29034 29035 29489\nf 29034 29489 29494\nf 29034 29494 29039\nf 29035 29036 29490\nf 29035 29490 29489\nf 29036 29037 29491\nf 29036 29491 29490\nf 29037 29038 29492\nf 29037 29492 29491\nf 29038 29040 29493\nf 29038 29493 29492\nf 29039 29494 29041\nf 29040 29042 29496\nf 29040 29496 29493\nf 29041 29494 29498\nf 29041 29498 29045\nf 29042 29043 29044\nf 29042 29044 29497\nf 29042 29497 29496\nf 29043 29047 29044\nf 29044 29047 29499\nf 29044 29499 29497\nf 29045 29498 29500\nf 29045 29500 29046\nf 29046 29500 29501\nf 29046 29501 29503\nf 29046 29503 29049\nf 29047 29048 29051\nf 29047 29051 29504\nf 29047 29502 29499\nf 29047 29504 29502\nf 29048 29050 29051\nf 29049 29503 29052\nf 29050 29053 29507\nf 29050 29505 29051\nf 29050 29507 29505\nf 29051 29505 29504\nf 29052 29503 29506\nf 29052 29506 29054\nf 29053 29055 29509\nf 29053 29509 29507\nf 29054 29506 29508\nf 29054 29508 29056\nf 29055 29057 29511\nf 29055 29511 29509\nf 29056 29508 29510\nf 29056 29510 29058\nf 29057 29059 29513\nf 29057 29513 29511\nf 29058 29510 29512\nf 29058 29512 29060\nf 29059 29061 29515\nf 29059 29515 29513\nf 29060 29512 29514\nf 29060 29514 29062\nf 29061 29063 29517\nf 29061 29517 29515\nf 29062 29514 29516\nf 29062 29516 29064\nf 29063 29065 29519\nf 29063 29519 29517\nf 29064 29516 29518\nf 29064 29518 29067\nf 29065 29066 29519\nf 29066 29068 29522\nf 29066 29520 29519\nf 29066 29522 29520\nf 29067 29518 29521\nf 29067 29521 29069\nf 29068 29070 29524\nf 29068 29524 29522\nf 29069 29521 29523\nf 29069 29523 29071\nf 29070 29073 29527\nf 29070 29527 29524\nf 29071 29523 29525\nf 29071 29525 29526\nf 29071 29526 29072\nf 29072 29526 29074\nf 29073 29075 29530\nf 29073 29530 29527\nf 29074 29526 29528\nf 29074 29528 29076\nf 29075 29077 29532\nf 29075 29532 29530\nf 29076 29528 29531\nf 29076 29531 29079\nf 29077 29078 29532\nf 29078 29081 29536\nf 29078 29533 29532\nf 29078 29536 29533\nf 29079 29531 29534\nf 29079 29534 29535\nf 29079 29535 29080\nf 29080 29535 29082\nf 29081 29083 29540\nf 29081 29540 29536\nf 29082 29535 29538\nf 29082 29538 29085\nf 29083 29084 29543\nf 29083 29543 29540\nf 29084 29086 29088\nf 29084 29088 29543\nf 29085 29538 29541\nf 29085 29541 29089\nf 29086 29087 29088\nf 29087 29091 29547\nf 29087 29542 29544\nf 29087 29544 29088\nf 29087 29547 29542\nf 29088 29544 29543\nf 29089 29541 29545\nf 29089 29545 29546\nf 29089 29546 29090\nf 29090 29546 29548\nf 29090 29548 29092\nf 29091 29092 29547\nf 29092 29548 29547\nf 29093 29094 29552\nf 29093 29099 29097\nf 29093 29550 29099\nf 29093 29552 29550\nf 29094 29095 29551\nf 29094 29096 29555\nf 29094 29551 29552\nf 29094 29555 29095\nf 29095 29549 29551\nf 29095 29554 29549\nf 29095 29555 29554\nf 29096 29100 29555\nf 29097 29099 29098\nf 29098 29099 29557\nf 29098 29557 29101\nf 29099 29550 29557\nf 29100 29103 29562\nf 29100 29558 29555\nf 29100 29562 29558\nf 29101 29557 29559\nf 29101 29559 29102\nf 29102 29559 29560\nf 29102 29560 29564\nf 29102 29564 29104\nf 29103 29105 29565\nf 29103 29565 29562\nf 29104 29564 29106\nf 29105 29107 29568\nf 29105 29568 29565\nf 29106 29564 29567\nf 29106 29567 29108\nf 29107 29109 29570\nf 29107 29570 29568\nf 29108 29567 29569\nf 29108 29569 29110\nf 29109 29111 29573\nf 29109 29573 29570\nf 29110 29569 29572\nf 29110 29572 29112\nf 29111 29113 29576\nf 29111 29576 29573\nf 29112 29572 29575\nf 29112 29575 29114\nf 29113 29115 29579\nf 29113 29579 29576\nf 29114 29575 29577\nf 29114 29577 29116\nf 29115 29117 29582\nf 29115 29582 29579\nf 29116 29577 29580\nf 29116 29580 29118\nf 29117 29119 29585\nf 29117 29585 29582\nf 29118 29580 29583\nf 29118 29583 29120\nf 29119 29121 29588\nf 29119 29588 29585\nf 29120 29583 29586\nf 29120 29586 29122\nf 29121 29123 29592\nf 29121 29592 29588\nf 29122 29586 29589\nf 29122 29589 29124\nf 29123 29127 29594\nf 29123 29594 29592\nf 29124 29126 29125\nf 29124 29589 29126\nf 29125 29126 29593\nf 29125 29593 29128\nf 29126 29589 29590\nf 29126 29590 29593\nf 29127 29129 29596\nf 29127 29596 29594\nf 29128 29593 29595\nf 29128 29595 29131\nf 29129 29130 29596\nf 29130 29132 29599\nf 29130 29597 29596\nf 29130 29599 29597\nf 29131 29595 29598\nf 29131 29598 29133\nf 29132 29134 29601\nf 29132 29601 29599\nf 29133 29598 29600\nf 29133 29600 29135\nf 29134 29136 29603\nf 29134 29603 29601\nf 29135 29600 29602\nf 29135 29602 29137\nf 29136 29139 29605\nf 29136 29605 29603\nf 29137 29142 29138\nf 29137 29602 29604\nf 29137 29604 29607\nf 29137 29607 29142\nf 29138 29142 29141\nf 29139 29140 29605\nf 29140 29143 29609\nf 29140 29606 29605\nf 29140 29609 29606\nf 29141 29142 29608\nf 29141 29608 29611\nf 29141 29611 29145\nf 29142 29607 29608\nf 29143 29144 29609\nf 29144 29147 29613\nf 29144 29610 29609\nf 29144 29613 29610\nf 29145 29611 29612\nf 29145 29612 29146\nf 29146 29612 29614\nf 29146 29614 29148\nf 29147 29148 29613\nf 29148 29614 29613\nf 29149 29150 29615\nf 29149 29160 29158\nf 29149 29615 29625\nf 29149 29625 29160\nf 29150 29151 29615\nf 29151 29152 29616\nf 29151 29616 29615\nf 29152 29153 29617\nf 29152 29617 29616\nf 29153 29154 29618\nf 29153 29618 29617\nf 29154 29155 29619\nf 29154 29619 29618\nf 29155 29156 29620\nf 29155 29620 29619\nf 29156 29157 29621\nf 29156 29621 29620\nf 29157 29161 29623\nf 29157 29622 29621\nf 29157 29623 29622\nf 29158 29160 29159\nf 29159 29160 29626\nf 29159 29624 29637\nf 29159 29626 29624\nf 29159 29637 29168\nf 29160 29625 29626\nf 29161 29162 29163\nf 29161 29163 29623\nf 29162 29164 29629\nf 29162 29629 29163\nf 29163 29628 29623\nf 29163 29629 29628\nf 29164 29165 29629\nf 29165 29166 29631\nf 29165 29631 29629\nf 29166 29167 29633\nf 29166 29633 29631\nf 29167 29169 29635\nf 29167 29634 29633\nf 29167 29635 29634\nf 29168 29637 29176\nf 29169 29170 29171\nf 29169 29171 29635\nf 29170 29172 29171\nf 29171 29172 29173\nf 29171 29173 29636\nf 29171 29636 29635\nf 29172 29174 29641\nf 29172 29641 29173\nf 29173 29640 29636\nf 29173 29641 29640\nf 29174 29175 29641\nf 29175 29179 29645\nf 29175 29643 29641\nf 29175 29645 29643\nf 29176 29178 29177\nf 29176 29637 29638\nf 29176 29638 29178\nf 29177 29178 29184\nf 29178 29638 29647\nf 29178 29647 29184\nf 29179 29180 29181\nf 29179 29181 29645\nf 29180 29182 29181\nf 29181 29182 29183\nf 29181 29183 29646\nf 29181 29646 29645\nf 29182 29186 29187\nf 29182 29187 29649\nf 29182 29649 29183\nf 29183 29648 29646\nf 29183 29649 29648\nf 29184 29647 29651\nf 29184 29651 29652\nf 29184 29652 29185\nf 29185 29652 29188\nf 29186 29193 29187\nf 29187 29193 29195\nf 29187 29195 29659\nf 29187 29654 29649\nf 29187 29659 29654\nf 29188 29652 29655\nf 29188 29655 29656\nf 29188 29656 29189\nf 29189 29656 29657\nf 29189 29657 29190\nf 29190 29657 29196\nf 29191 29203 29205\nf 29191 29205 29206\nf 29191 29206 29192\nf 29192 29206 29670\nf 29192 29658 29194\nf 29192 29670 29658\nf 29193 29194 29195\nf 29194 29658 29660\nf 29194 29660 29195\nf 29195 29660 29659\nf 29196 29657 29661\nf 29196 29661 29662\nf 29196 29662 29197\nf 29197 29662 29663\nf 29197 29663 29198\nf 29198 29663 29664\nf 29198 29664 29207\nf 29199 29215 29217\nf 29199 29217 29679\nf 29199 29665 29200\nf 29199 29679 29665\nf 29200 29665 29666\nf 29200 29666 29201\nf 29201 29666 29667\nf 29201 29667 29202\nf 29202 29667 29668\nf 29202 29668 29204\nf 29203 29204 29205\nf 29204 29668 29669\nf 29204 29669 29205\nf 29205 29669 29206\nf 29206 29669 29671\nf 29206 29671 29670\nf 29207 29209 29208\nf 29207 29664 29209\nf 29208 29209 29673\nf 29208 29673 29210\nf 29209 29664 29672\nf 29209 29672 29673\nf 29210 29673 29674\nf 29210 29674 29211\nf 29211 29674 29675\nf 29211 29675 29212\nf 29212 29675 29676\nf 29212 29676 29213\nf 29213 29676 29677\nf 29213 29677 29214\nf 29214 29677 29678\nf 29214 29678 29216\nf 29215 29216 29217\nf 29216 29678 29680\nf 29216 29680 29217\nf 29217 29680 29679\nf 29218 29219 29683\nf 29218 29683 29690\nf 29218 29690 29225\nf 29219 29220 29684\nf 29219 29684 29683\nf 29220 29221 29685\nf 29220 29685 29684\nf 29221 29226 29686\nf 29221 29686 29685\nf 29222 29223 29687\nf 29222 29687 29693\nf 29222 29693 29228\nf 29223 29224 29688\nf 29223 29688 29687\nf 29224 29230 29689\nf 29224 29689 29688\nf 29225 29690 29232\nf 29226 29227 29692\nf 29226 29691 29686\nf 29226 29692 29691\nf 29227 29234 29692\nf 29228 29693 29229\nf 29229 29693 29694\nf 29229 29694 29700\nf 29229 29700 29235\nf 29230 29231 29696\nf 29230 29695 29689\nf 29230 29696 29695\nf 29231 29236 29696\nf 29232 29690 29697\nf 29232 29697 29233\nf 29233 29697 29698\nf 29233 29698 29702\nf 29233 29702 29237\nf 29234 29238 29703\nf 29234 29699 29692\nf 29234 29703 29699\nf 29235 29700 29240\nf 29236 29241 29706\nf 29236 29701 29696\nf 29236 29706 29701\nf 29237 29702 29242\nf 29238 29239 29704\nf 29238 29704 29703\nf 29239 29243 29704\nf 29240 29700 29705\nf 29240 29705 29244\nf 29241 29245 29710\nf 29241 29710 29706\nf 29242 29702 29707\nf 29242 29707 29246\nf 29243 29247 29712\nf 29243 29708 29704\nf 29243 29712 29708\nf 29244 29705 29709\nf 29244 29709 29248\nf 29245 29249 29714\nf 29245 29714 29710\nf 29246 29707 29711\nf 29246 29711 29250\nf 29247 29251 29716\nf 29247 29716 29712\nf 29248 29709 29713\nf 29248 29713 29252\nf 29249 29253 29718\nf 29249 29718 29714\nf 29250 29711 29715\nf 29250 29715 29254\nf 29251 29255 29720\nf 29251 29720 29716\nf 29252 29713 29717\nf 29252 29717 29256\nf 29253 29257 29722\nf 29253 29722 29718\nf 29254 29715 29719\nf 29254 29719 29258\nf 29255 29259 29724\nf 29255 29724 29720\nf 29256 29717 29721\nf 29256 29721 29261\nf 29257 29262 29727\nf 29257 29727 29722\nf 29258 29719 29723\nf 29258 29723 29263\nf 29259 29260 29725\nf 29259 29725 29724\nf 29260 29264 29725\nf 29261 29721 29726\nf 29261 29726 29266\nf 29262 29267 29732\nf 29262 29732 29727\nf 29263 29723 29728\nf 29263 29728 29269\nf 29264 29265 29729\nf 29264 29729 29725\nf 29265 29270 29735\nf 29265 29730 29729\nf 29265 29735 29730\nf 29266 29726 29731\nf 29266 29731 29271\nf 29267 29268 29733\nf 29267 29733 29732\nf 29268 29272 29733\nf 29269 29728 29734\nf 29269 29734 29277\nf 29270 29279 29745\nf 29270 29745 29735\nf 29271 29731 29737\nf 29271 29737 29281\nf 29272 29273 29739\nf 29272 29738 29733\nf 29272 29739 29738\nf 29273 29274 29739\nf 29274 29275 29740\nf 29274 29740 29739\nf 29275 29282 29741\nf 29275 29741 29740\nf 29276 29278 29742\nf 29276 29742 29832\nf 29276 29832 29366\nf 29277 29734 29743\nf 29277 29743 29278\nf 29278 29743 29744\nf 29278 29744 29742\nf 29279 29280 29746\nf 29279 29746 29745\nf 29280 29368 29746\nf 29281 29737 29747\nf 29281 29747 29370\nf 29282 29283 29749\nf 29282 29748 29741\nf 29282 29749 29748\nf 29283 29284 29749\nf 29284 29285 29750\nf 29284 29750 29749\nf 29285 29286 29751\nf 29285 29751 29750\nf 29286 29287 29752\nf 29286 29752 29751\nf 29287 29288 29753\nf 29287 29753 29752\nf 29288 29289 29754\nf 29288 29754 29753\nf 29289 29290 29755\nf 29289 29755 29754\nf 29290 29291 29756\nf 29290 29756 29755\nf 29291 29292 29757\nf 29291 29757 29756\nf 29292 29293 29758\nf 29292 29758 29757\nf 29293 29294 29759\nf 29293 29759 29758\nf 29294 29295 29760\nf 29294 29760 29759\nf 29295 29296 29761\nf 29295 29761 29760\nf 29296 29297 29762\nf 29296 29762 29761\nf 29297 29298 29763\nf 29297 29763 29762\nf 29298 29299 29764\nf 29298 29764 29763\nf 29299 29300 29765\nf 29299 29765 29764\nf 29300 29301 29766\nf 29300 29766 29765\nf 29301 29302 29767\nf 29301 29767 29766\nf 29302 29303 29768\nf 29302 29768 29767\nf 29303 29304 29769\nf 29303 29769 29768\nf 29304 29305 29770\nf 29304 29770 29769\nf 29305 29306 29771\nf 29305 29771 29770\nf 29306 29307 29772\nf 29306 29772 29771\nf 29307 29308 29773\nf 29307 29773 29772\nf 29308 29309 29774\nf 29308 29774 29773\nf 29309 29310 29775\nf 29309 29775 29774\nf 29310 29311 29776\nf 29310 29776 29775\nf 29311 29312 29777\nf 29311 29777 29776\nf 29312 29313 29778\nf 29312 29778 29777\nf 29313 29314 29779\nf 29313 29779 29778\nf 29314 29315 29780\nf 29314 29780 29779\nf 29315 29316 29781\nf 29315 29781 29780\nf 29316 29317 29782\nf 29316 29782 29781\nf 29317 29318 29783\nf 29317 29783 29782\nf 29318 29319 29784\nf 29318 29784 29783\nf 29319 29320 29785\nf 29319 29785 29784\nf 29320 29321 29786\nf 29320 29786 29785\nf 29321 29322 29787\nf 29321 29787 29786\nf 29322 29323 29788\nf 29322 29788 29787\nf 29323 29324 29789\nf 29323 29789 29788\nf 29324 29325 29790\nf 29324 29790 29789\nf 29325 29326 29791\nf 29325 29791 29790\nf 29326 29327 29792\nf 29326 29792 29791\nf 29327 29328 29793\nf 29327 29793 29792\nf 29328 29329 29794\nf 29328 29794 29793\nf 29329 29330 29795\nf 29329 29795 29794\nf 29330 29331 29796\nf 29330 29796 29795\nf 29331 29332 29797\nf 29331 29797 29796\nf 29332 29333 29798\nf 29332 29798 29797\nf 29333 29334 29799\nf 29333 29799 29798\nf 29334 29335 29800\nf 29334 29800 29799\nf 29335 29336 29801\nf 29335 29801 29800\nf 29336 29337 29802\nf 29336 29802 29801\nf 29337 29338 29803\nf 29337 29803 29802\nf 29338 29339 29804\nf 29338 29804 29803\nf 29339 29340 29805\nf 29339 29805 29804\nf 29340 29341 29806\nf 29340 29806 29805\nf 29341 29342 29807\nf 29341 29807 29806\nf 29342 29343 29808\nf 29342 29808 29807\nf 29343 29344 29809\nf 29343 29809 29808\nf 29344 29345 29810\nf 29344 29810 29809\nf 29345 29346 29811\nf 29345 29811 29810\nf 29346 29347 29812\nf 29346 29812 29811\nf 29347 29348 29813\nf 29347 29813 29812\nf 29348 29349 29814\nf 29348 29814 29813\nf 29349 29350 29815\nf 29349 29815 29814\nf 29350 29351 29816\nf 29350 29816 29815\nf 29351 29352 29817\nf 29351 29817 29816\nf 29352 29353 29818\nf 29352 29818 29817\nf 29353 29354 29819\nf 29353 29819 29818\nf 29354 29355 29820\nf 29354 29820 29819\nf 29355 29356 29821\nf 29355 29821 29820\nf 29356 29357 29822\nf 29356 29822 29821\nf 29357 29358 29823\nf 29357 29823 29822\nf 29358 29359 29824\nf 29358 29824 29823\nf 29359 29360 29825\nf 29359 29825 29824\nf 29360 29361 29826\nf 29360 29826 29825\nf 29361 29362 29827\nf 29361 29827 29826\nf 29362 29363 29828\nf 29362 29828 29827\nf 29363 29364 29829\nf 29363 29829 29828\nf 29364 29365 29830\nf 29364 29830 29829\nf 29365 29367 29831\nf 29365 29831 29830\nf 29366 29832 29367\nf 29367 29832 29833\nf 29367 29833 29831\nf 29368 29369 29834\nf 29368 29834 29746\nf 29369 29371 29837\nf 29369 29835 29834\nf 29369 29837 29835\nf 29370 29747 29836\nf 29370 29836 29372\nf 29371 29374 29840\nf 29371 29840 29837\nf 29372 29836 29838\nf 29372 29838 29839\nf 29372 29839 29373\nf 29373 29839 29375\nf 29374 29376 29842\nf 29374 29842 29840\nf 29375 29839 29841\nf 29375 29841 29378\nf 29376 29377 29842\nf 29377 29380 29846\nf 29377 29843 29842\nf 29377 29846 29843\nf 29378 29841 29844\nf 29378 29844 29382\nf 29379 29388 29854\nf 29379 29845 29847\nf 29379 29847 29381\nf 29379 29854 29845\nf 29380 29381 29846\nf 29381 29847 29846\nf 29382 29844 29848\nf 29382 29848 29849\nf 29382 29849 29383\nf 29383 29849 29850\nf 29383 29850 29384\nf 29384 29850 29390\nf 29385 29477 29944\nf 29385 29851 29852\nf 29385 29852 29386\nf 29385 29944 29851\nf 29386 29852 29853\nf 29386 29853 29387\nf 29387 29853 29855\nf 29387 29855 29389\nf 29388 29389 29854\nf 29389 29855 29854\nf 29390 29850 29856\nf 29390 29856 29858\nf 29390 29858 29391\nf 29391 29858 29859\nf 29391 29859 29392\nf 29392 29859 29479\nf 29393 29482 29949\nf 29393 29860 29861\nf 29393 29861 29394\nf 29393 29949 29860\nf 29394 29861 29862\nf 29394 29862 29395\nf 29395 29862 29863\nf 29395 29863 29396\nf 29396 29863 29864\nf 29396 29864 29397\nf 29397 29864 29865\nf 29397 29865 29398\nf 29398 29865 29866\nf 29398 29866 29399\nf 29399 29866 29867\nf 29399 29867 29400\nf 29400 29867 29868\nf 29400 29868 29401\nf 29401 29868 29869\nf 29401 29869 29402\nf 29402 29869 29870\nf 29402 29870 29403\nf 29403 29870 29871\nf 29403 29871 29404\nf 29404 29871 29872\nf 29404 29872 29405\nf 29405 29872 29873\nf 29405 29873 29406\nf 29406 29873 29874\nf 29406 29874 29407\nf 29407 29874 29875\nf 29407 29875 29408\nf 29408 29875 29876\nf 29408 29876 29409\nf 29409 29876 29877\nf 29409 29877 29410\nf 29410 29877 29878\nf 29410 29878 29411\nf 29411 29878 29879\nf 29411 29879 29412\nf 29412 29879 29880\nf 29412 29880 29413\nf 29413 29880 29881\nf 29413 29881 29414\nf 29414 29881 29882\nf 29414 29882 29415\nf 29415 29882 29883\nf 29415 29883 29416\nf 29416 29883 29884\nf 29416 29884 29417\nf 29417 29884 29885\nf 29417 29885 29418\nf 29418 29885 29886\nf 29418 29886 29419\nf 29419 29886 29887\nf 29419 29887 29420\nf 29420 29887 29888\nf 29420 29888 29421\nf 29421 29888 29889\nf 29421 29889 29422\nf 29422 29889 29890\nf 29422 29890 29423\nf 29423 29890 29891\nf 29423 29891 29424\nf 29424 29891 29892\nf 29424 29892 29425\nf 29425 29892 29893\nf 29425 29893 29426\nf 29426 29893 29894\nf 29426 29894 29427\nf 29427 29894 29895\nf 29427 29895 29428\nf 29428 29895 29896\nf 29428 29896 29429\nf 29429 29896 29897\nf 29429 29897 29430\nf 29430 29897 29898\nf 29430 29898 29431\nf 29431 29898 29899\nf 29431 29899 29432\nf 29432 29899 29900\nf 29432 29900 29433\nf 29433 29900 29901\nf 29433 29901 29434\nf 29434 29901 29902\nf 29434 29902 29435\nf 29435 29902 29903\nf 29435 29903 29436\nf 29436 29903 29904\nf 29436 29904 29437\nf 29437 29904 29905\nf 29437 29905 29438\nf 29438 29905 29906\nf 29438 29906 29439\nf 29439 29906 29907\nf 29439 29907 29440\nf 29440 29907 29908\nf 29440 29908 29441\nf 29441 29908 29909\nf 29441 29909 29442\nf 29442 29909 29910\nf 29442 29910 29443\nf 29443 29910 29911\nf 29443 29911 29444\nf 29444 29911 29912\nf 29444 29912 29445\nf 29445 29912 29913\nf 29445 29913 29446\nf 29446 29913 29914\nf 29446 29914 29447\nf 29447 29914 29915\nf 29447 29915 29448\nf 29448 29915 29916\nf 29448 29916 29449\nf 29449 29916 29917\nf 29449 29917 29450\nf 29450 29917 29918\nf 29450 29918 29451\nf 29451 29918 29919\nf 29451 29919 29452\nf 29452 29919 29920\nf 29452 29920 29453\nf 29453 29920 29921\nf 29453 29921 29454\nf 29454 29921 29922\nf 29454 29922 29455\nf 29455 29922 29923\nf 29455 29923 29456\nf 29456 29923 29924\nf 29456 29924 29457\nf 29457 29924 29925\nf 29457 29925 29458\nf 29458 29925 29926\nf 29458 29926 29459\nf 29459 29926 29927\nf 29459 29927 29460\nf 29460 29927 29928\nf 29460 29928 29461\nf 29461 29928 29929\nf 29461 29929 29462\nf 29462 29929 29930\nf 29462 29930 29463\nf 29463 29930 29931\nf 29463 29931 29464\nf 29464 29931 29932\nf 29464 29932 29465\nf 29465 29932 29933\nf 29465 29933 29466\nf 29466 29933 29934\nf 29466 29934 29467\nf 29467 29934 29935\nf 29467 29935 29468\nf 29468 29935 29936\nf 29468 29936 29469\nf 29469 29936 29937\nf 29469 29937 29470\nf 29470 29937 29938\nf 29470 29938 29471\nf 29471 29938 29939\nf 29471 29939 29472\nf 29472 29939 29940\nf 29472 29940 29473\nf 29473 29940 29941\nf 29473 29941 29474\nf 29474 29941 29942\nf 29474 29942 29475\nf 29475 29942 29943\nf 29475 29943 29476\nf 29476 29943 29945\nf 29476 29945 29478\nf 29477 29478 29944\nf 29478 29945 29944\nf 29479 29485 29480\nf 29479 29859 29946\nf 29479 29946 29951\nf 29479 29951 29485\nf 29480 29485 29484\nf 29481 29487 29954\nf 29481 29948 29950\nf 29481 29950 29483\nf 29481 29954 29948\nf 29482 29483 29949\nf 29483 29950 29949\nf 29484 29485 29952\nf 29484 29952 29486\nf 29485 29951 29952\nf 29486 29952 29953\nf 29486 29953 29955\nf 29486 29955 29488\nf 29487 29488 29954\nf 29488 29955 29954\nf 29489 29490 29956\nf 29489 29495 29494\nf 29489 29956 29960\nf 29489 29960 29495\nf 29490 29491 29956\nf 29491 29492 29957\nf 29491 29957 29956\nf 29492 29493 29958\nf 29492 29958 29957\nf 29493 29496 29959\nf 29493 29959 29958\nf 29494 29495 29964\nf 29494 29964 29498\nf 29495 29960 29961\nf 29495 29961 29964\nf 29496 29497 29963\nf 29496 29962 29959\nf 29496 29963 29962\nf 29497 29499 29963\nf 29498 29964 29500\nf 29499 29502 29968\nf 29499 29965 29963\nf 29499 29968 29965\nf 29500 29964 29966\nf 29500 29966 29501\nf 29501 29966 29967\nf 29501 29967 29969\nf 29501 29969 29503\nf 29502 29504 29970\nf 29502 29970 29968\nf 29503 29969 29506\nf 29504 29505 29971\nf 29504 29971 29970\nf 29505 29507 29971\nf 29506 29969 29972\nf 29506 29972 29508\nf 29507 29509 29975\nf 29507 29973 29971\nf 29507 29975 29973\nf 29508 29972 29974\nf 29508 29974 29510\nf 29509 29511 29977\nf 29509 29977 29975\nf 29510 29974 29976\nf 29510 29976 29512\nf 29511 29513 29979\nf 29511 29979 29977\nf 29512 29976 29978\nf 29512 29978 29514\nf 29513 29515 29981\nf 29513 29981 29979\nf 29514 29978 29980\nf 29514 29980 29516\nf 29515 29517 29983\nf 29515 29983 29981\nf 29516 29980 29982\nf 29516 29982 29518\nf 29517 29519 29985\nf 29517 29985 29983\nf 29518 29982 29984\nf 29518 29984 29521\nf 29519 29520 29985\nf 29520 29522 29988\nf 29520 29986 29985\nf 29520 29988 29986\nf 29521 29984 29987\nf 29521 29987 29523\nf 29522 29524 29990\nf 29522 29990 29988\nf 29523 29987 29989\nf 29523 29989 29525\nf 29524 29527 29992\nf 29524 29992 29990\nf 29525 29529 29526\nf 29525 29989 29991\nf 29525 29991 29993\nf 29525 29993 29529\nf 29526 29529 29528\nf 29527 29530 29995\nf 29527 29995 29992\nf 29528 29529 29994\nf 29528 29994 29996\nf 29528 29996 29531\nf 29529 29993 29994\nf 29530 29532 29997\nf 29530 29997 29995\nf 29531 29996 29534\nf 29532 29533 29999\nf 29532 29999 29997\nf 29533 29536 29537\nf 29533 29537 29999\nf 29534 29539 29535\nf 29534 29996 29998\nf 29534 29998 30001\nf 29534 30001 29539\nf 29535 29539 29538\nf 29536 29540 30003\nf 29536 30003 29537\nf 29537 30000 29999\nf 29537 30003 30000\nf 29538 29539 30002\nf 29538 30002 30004\nf 29538 30004 29541\nf 29539 30001 30002\nf 29540 29543 30006\nf 29540 30006 30003\nf 29541 30004 29545\nf 29542 29547 30010\nf 29542 30005 30007\nf 29542 30007 29544\nf 29542 30010 30005\nf 29543 29544 30006\nf 29544 30007 30006\nf 29545 30004 30008\nf 29545 30008 30009\nf 29545 30009 29546\nf 29546 30009 30011\nf 29546 30011 29548\nf 29547 29548 30010\nf 29548 30011 30010\nf 29549 29553 29551\nf 29549 29554 30017\nf 29549 30014 29553\nf 29549 30015 30014\nf 29549 30017 30015\nf 29550 29552 30020\nf 29550 30020 30024\nf 29550 30024 29557\nf 29551 29553 29552\nf 29552 29553 30019\nf 29552 30019 30020\nf 29553 30014 30019\nf 29554 29555 29556\nf 29554 29556 30017\nf 29555 29558 29556\nf 29556 29558 30022\nf 29556 30022 30017\nf 29557 30024 29559\nf 29558 29562 30026\nf 29558 30026 30022\nf 29559 29561 29560\nf 29559 30024 29561\nf 29560 29561 30029\nf 29560 30029 29564\nf 29561 30024 30025\nf 29561 30025 30029\nf 29562 29563 30027\nf 29562 29565 29563\nf 29562 30027 30026\nf 29563 29565 29566\nf 29563 29566 30032\nf 29563 30030 30027\nf 29563 30032 30030\nf 29564 30029 30031\nf 29564 30031 29567\nf 29565 29568 30035\nf 29565 30035 29566\nf 29566 30033 30032\nf 29566 30035 30033\nf 29567 30031 30034\nf 29567 30034 29569\nf 29568 29570 30035\nf 29569 30034 30038\nf 29569 30038 29572\nf 29570 29571 30036\nf 29570 29573 29571\nf 29570 30036 30035\nf 29571 29573 29574\nf 29571 29574 30041\nf 29571 30039 30036\nf 29571 30041 30039\nf 29572 30038 30040\nf 29572 30040 29575\nf 29573 29576 30045\nf 29573 30045 29574\nf 29574 30042 30041\nf 29574 30045 30042\nf 29575 30040 30043\nf 29575 30043 29577\nf 29576 29579 30048\nf 29576 30048 30045\nf 29577 29578 29581\nf 29577 29581 29580\nf 29577 30043 29578\nf 29578 30043 30044\nf 29578 30044 30047\nf 29578 30047 29581\nf 29579 29582 30050\nf 29579 30050 30048\nf 29580 29581 29584\nf 29580 29584 29583\nf 29581 30047 30049\nf 29581 30049 29584\nf 29582 29585 30052\nf 29582 30052 30050\nf 29583 29584 29587\nf 29583 29587 29586\nf 29584 30049 30051\nf 29584 30051 29587\nf 29585 29588 30054\nf 29585 30054 30052\nf 29586 29587 29591\nf 29586 29591 29589\nf 29587 30051 30053\nf 29587 30053 29591\nf 29588 29592 30056\nf 29588 30056 30054\nf 29589 29591 29590\nf 29590 29591 30055\nf 29590 30055 29593\nf 29591 30053 30055\nf 29592 29594 30058\nf 29592 30058 30056\nf 29593 30055 30057\nf 29593 30057 29595\nf 29594 29596 30060\nf 29594 30060 30058\nf 29595 30057 30059\nf 29595 30059 29598\nf 29596 29597 30060\nf 29597 29599 30063\nf 29597 30061 30060\nf 29597 30063 30061\nf 29598 30059 30062\nf 29598 30062 29600\nf 29599 29601 30065\nf 29599 30065 30063\nf 29600 30062 30064\nf 29600 30064 29602\nf 29601 29603 30067\nf 29601 30067 30065\nf 29602 30064 30066\nf 29602 30066 29604\nf 29603 29605 30069\nf 29603 30069 30067\nf 29604 30066 30068\nf 29604 30068 29607\nf 29605 29606 30069\nf 29606 29609 30073\nf 29606 30070 30069\nf 29606 30073 30070\nf 29607 30068 30071\nf 29607 30071 30072\nf 29607 30072 29608\nf 29608 30072 29611\nf 29609 29610 30073\nf 29610 29613 30077\nf 29610 30074 30073\nf 29610 30077 30074\nf 29611 30072 30075\nf 29611 30075 30076\nf 29611 30076 29612\nf 29612 30076 30078\nf 29612 30078 29614\nf 29613 29614 30077\nf 29614 30078 30077\nf 29615 29616 30079\nf 29615 29627 29625\nf 29615 30079 30090\nf 29615 30090 29627\nf 29616 29617 30079\nf 29617 29618 30080\nf 29617 30080 30079\nf 29618 29619 30081\nf 29618 30081 30080\nf 29619 29620 30082\nf 29619 30082 30081\nf 29620 29621 30083\nf 29620 30083 30082\nf 29621 29622 30084\nf 29621 30084 30083\nf 29622 29623 30085\nf 29622 30085 30084\nf 29623 29628 30087\nf 29623 30086 30085\nf 29623 30087 30086\nf 29624 29626 30089\nf 29624 29639 29637\nf 29624 30089 30105\nf 29624 30105 29639\nf 29625 29627 29626\nf 29626 29627 30091\nf 29626 30091 30089\nf 29627 30090 30091\nf 29628 29629 29630\nf 29628 29630 30087\nf 29629 29631 29630\nf 29630 29631 29632\nf 29630 29632 30088\nf 29630 30088 30087\nf 29631 29633 30096\nf 29631 30096 29632\nf 29632 30095 30088\nf 29632 30096 30095\nf 29633 29634 30096\nf 29634 29635 30098\nf 29634 30098 30096\nf 29635 29636 30100\nf 29635 30100 30098\nf 29636 29640 30103\nf 29636 30102 30100\nf 29636 30103 30102\nf 29637 29639 29638\nf 29638 29639 29647\nf 29639 30105 29647\nf 29640 29641 29642\nf 29640 29642 30103\nf 29641 29643 29642\nf 29642 29643 29644\nf 29642 29644 30104\nf 29642 30104 30103\nf 29643 29645 30108\nf 29643 30108 29644\nf 29644 30107 30104\nf 29644 30108 30107\nf 29645 29646 30108\nf 29646 29648 30111\nf 29646 30110 30108\nf 29646 30111 30110\nf 29647 30105 30112\nf 29647 30112 29651\nf 29648 29649 29650\nf 29648 29650 30111\nf 29649 29654 29650\nf 29650 29654 30114\nf 29650 30114 30111\nf 29651 29653 29652\nf 29651 30112 30113\nf 29651 30113 29653\nf 29652 29653 29655\nf 29653 30113 30115\nf 29653 30115 29655\nf 29654 29659 30121\nf 29654 30116 30114\nf 29654 30121 30116\nf 29655 30115 30117\nf 29655 30117 30118\nf 29655 30118 29656\nf 29656 30118 30119\nf 29656 30119 29657\nf 29657 30119 29661\nf 29658 29670 30131\nf 29658 30120 30122\nf 29658 30122 29660\nf 29658 30131 30120\nf 29659 29660 30121\nf 29660 30122 30121\nf 29661 30119 30123\nf 29661 30123 30125\nf 29661 30125 29662\nf 29662 30125 30126\nf 29662 30126 29663\nf 29663 30126 30127\nf 29663 30127 29664\nf 29664 30127 29672\nf 29665 29679 29681\nf 29665 29681 29682\nf 29665 29682 29666\nf 29666 29682 30142\nf 29666 30128 29667\nf 29666 30142 30128\nf 29667 30128 30129\nf 29667 30129 29668\nf 29668 30129 30130\nf 29668 30130 29669\nf 29669 30130 30132\nf 29669 30132 29671\nf 29670 29671 30131\nf 29671 30132 30131\nf 29672 30127 30133\nf 29672 30133 30134\nf 29672 30134 29673\nf 29673 30134 30135\nf 29673 30135 29674\nf 29674 30135 30136\nf 29674 30136 29675\nf 29675 30136 30137\nf 29675 30137 29676\nf 29676 30137 30138\nf 29676 30138 29677\nf 29677 30138 30139\nf 29677 30139 29678\nf 29678 30139 30140\nf 29678 30140 29680\nf 29679 29680 29681\nf 29680 30140 30141\nf 29680 30141 29681\nf 29681 30141 29682\nf 29682 30141 30143\nf 29682 30143 30142\nf 29683 29684 30145\nf 29683 30145 30152\nf 29683 30152 29690\nf 29684 29685 30146\nf 29684 30146 30145\nf 29685 29686 30147\nf 29685 30147 30146\nf 29686 29691 30148\nf 29686 30148 30147\nf 29687 29688 30149\nf 29687 30149 30155\nf 29687 30155 29693\nf 29688 29689 30150\nf 29688 30150 30149\nf 29689 29695 30151\nf 29689 30151 30150\nf 29690 30152 29697\nf 29691 29692 30154\nf 29691 30153 30148\nf 29691 30154 30153\nf 29692 29699 30154\nf 29693 30155 29694\nf 29694 30155 30156\nf 29694 30156 30162\nf 29694 30162 29700\nf 29695 29696 30158\nf 29695 30157 30151\nf 29695 30158 30157\nf 29696 29701 30158\nf 29697 30152 30159\nf 29697 30159 29698\nf 29698 30159 30160\nf 29698 30160 30164\nf 29698 30164 29702\nf 29699 29703 30165\nf 29699 30161 30154\nf 29699 30165 30161\nf 29700 30162 29705\nf 29701 29706 30168\nf 29701 30163 30158\nf 29701 30168 30163\nf 29702 30164 29707\nf 29703 29704 30166\nf 29703 30166 30165\nf 29704 29708 30166\nf 29705 30162 30167\nf 29705 30167 29709\nf 29706 29710 30172\nf 29706 30172 30168\nf 29707 30164 30169\nf 29707 30169 29711\nf 29708 29712 30174\nf 29708 30170 30166\nf 29708 30174 30170\nf 29709 30167 30171\nf 29709 30171 29713\nf 29710 29714 30176\nf 29710 30176 30172\nf 29711 30169 30173\nf 29711 30173 29715\nf 29712 29716 30178\nf 29712 30178 30174\nf 29713 30171 30175\nf 29713 30175 29717\nf 29714 29718 30180\nf 29714 30180 30176\nf 29715 30173 30177\nf 29715 30177 29719\nf 29716 29720 30182\nf 29716 30182 30178\nf 29717 30175 30179\nf 29717 30179 29721\nf 29718 29722 30184\nf 29718 30184 30180\nf 29719 30177 30181\nf 29719 30181 29723\nf 29720 29724 30186\nf 29720 30186 30182\nf 29721 30179 30183\nf 29721 30183 29726\nf 29722 29727 30189\nf 29722 30189 30184\nf 29723 30181 30185\nf 29723 30185 29728\nf 29724 29725 30187\nf 29724 30187 30186\nf 29725 29729 30187\nf 29726 30183 30188\nf 29726 30188 29731\nf 29727 29732 30193\nf 29727 30193 30189\nf 29728 30185 30190\nf 29728 30190 29734\nf 29729 29730 30196\nf 29729 30191 30187\nf 29729 30196 30191\nf 29730 29735 29736\nf 29730 29736 30196\nf 29731 30188 30192\nf 29731 30192 29737\nf 29732 29733 30194\nf 29732 30194 30193\nf 29733 29738 30194\nf 29734 30190 30195\nf 29734 30195 29743\nf 29735 29745 30206\nf 29735 30206 29736\nf 29736 30197 30196\nf 29736 30206 30197\nf 29737 30192 30198\nf 29737 30198 29747\nf 29738 29739 30200\nf 29738 30199 30194\nf 29738 30200 30199\nf 29739 29740 30200\nf 29740 29741 30201\nf 29740 30201 30200\nf 29741 29748 30202\nf 29741 30202 30201\nf 29742 29744 30203\nf 29742 30203 30294\nf 29742 30294 29832\nf 29743 30195 30204\nf 29743 30204 29744\nf 29744 30204 30205\nf 29744 30205 30203\nf 29745 29746 30207\nf 29745 30207 30206\nf 29746 29834 30207\nf 29747 30198 30209\nf 29747 30209 29836\nf 29748 29749 30211\nf 29748 30210 30202\nf 29748 30211 30210\nf 29749 29750 30211\nf 29750 29751 30212\nf 29750 30212 30211\nf 29751 29752 30213\nf 29751 30213 30212\nf 29752 29753 30214\nf 29752 30214 30213\nf 29753 29754 30215\nf 29753 30215 30214\nf 29754 29755 30216\nf 29754 30216 30215\nf 29755 29756 30217\nf 29755 30217 30216\nf 29756 29757 30218\nf 29756 30218 30217\nf 29757 29758 30219\nf 29757 30219 30218\nf 29758 29759 30220\nf 29758 30220 30219\nf 29759 29760 30221\nf 29759 30221 30220\nf 29760 29761 30222\nf 29760 30222 30221\nf 29761 29762 30223\nf 29761 30223 30222\nf 29762 29763 30224\nf 29762 30224 30223\nf 29763 29764 30225\nf 29763 30225 30224\nf 29764 29765 30226\nf 29764 30226 30225\nf 29765 29766 30227\nf 29765 30227 30226\nf 29766 29767 30228\nf 29766 30228 30227\nf 29767 29768 30229\nf 29767 30229 30228\nf 29768 29769 30230\nf 29768 30230 30229\nf 29769 29770 30231\nf 29769 30231 30230\nf 29770 29771 30232\nf 29770 30232 30231\nf 29771 29772 30233\nf 29771 30233 30232\nf 29772 29773 30234\nf 29772 30234 30233\nf 29773 29774 30235\nf 29773 30235 30234\nf 29774 29775 30236\nf 29774 30236 30235\nf 29775 29776 30237\nf 29775 30237 30236\nf 29776 29777 30238\nf 29776 30238 30237\nf 29777 29778 30239\nf 29777 30239 30238\nf 29778 29779 30240\nf 29778 30240 30239\nf 29779 29780 30241\nf 29779 30241 30240\nf 29780 29781 30242\nf 29780 30242 30241\nf 29781 29782 30243\nf 29781 30243 30242\nf 29782 29783 30244\nf 29782 30244 30243\nf 29783 29784 30245\nf 29783 30245 30244\nf 29784 29785 30246\nf 29784 30246 30245\nf 29785 29786 30247\nf 29785 30247 30246\nf 29786 29787 30248\nf 29786 30248 30247\nf 29787 29788 30249\nf 29787 30249 30248\nf 29788 29789 30250\nf 29788 30250 30249\nf 29789 29790 30251\nf 29789 30251 30250\nf 29790 29791 30252\nf 29790 30252 30251\nf 29791 29792 30253\nf 29791 30253 30252\nf 29792 29793 30254\nf 29792 30254 30253\nf 29793 29794 30255\nf 29793 30255 30254\nf 29794 29795 30256\nf 29794 30256 30255\nf 29795 29796 30257\nf 29795 30257 30256\nf 29796 29797 30258\nf 29796 30258 30257\nf 29797 29798 30259\nf 29797 30259 30258\nf 29798 29799 30260\nf 29798 30260 30259\nf 29799 29800 30261\nf 29799 30261 30260\nf 29800 29801 30262\nf 29800 30262 30261\nf 29801 29802 30263\nf 29801 30263 30262\nf 29802 29803 30264\nf 29802 30264 30263\nf 29803 29804 30265\nf 29803 30265 30264\nf 29804 29805 30266\nf 29804 30266 30265\nf 29805 29806 30267\nf 29805 30267 30266\nf 29806 29807 30268\nf 29806 30268 30267\nf 29807 29808 30269\nf 29807 30269 30268\nf 29808 29809 30270\nf 29808 30270 30269\nf 29809 29810 30271\nf 29809 30271 30270\nf 29810 29811 30272\nf 29810 30272 30271\nf 29811 29812 30273\nf 29811 30273 30272\nf 29812 29813 30274\nf 29812 30274 30273\nf 29813 29814 30275\nf 29813 30275 30274\nf 29814 29815 30276\nf 29814 30276 30275\nf 29815 29816 30277\nf 29815 30277 30276\nf 29816 29817 30278\nf 29816 30278 30277\nf 29817 29818 30279\nf 29817 30279 30278\nf 29818 29819 30280\nf 29818 30280 30279\nf 29819 29820 30281\nf 29819 30281 30280\nf 29820 29821 30282\nf 29820 30282 30281\nf 29821 29822 30283\nf 29821 30283 30282\nf 29822 29823 30284\nf 29822 30284 30283\nf 29823 29824 30285\nf 29823 30285 30284\nf 29824 29825 30286\nf 29824 30286 30285\nf 29825 29826 30287\nf 29825 30287 30286\nf 29826 29827 30288\nf 29826 30288 30287\nf 29827 29828 30289\nf 29827 30289 30288\nf 29828 29829 30290\nf 29828 30290 30289\nf 29829 29830 30291\nf 29829 30291 30290\nf 29830 29831 30292\nf 29830 30292 30291\nf 29831 29833 30293\nf 29831 30293 30292\nf 29832 30294 29833\nf 29833 30294 30295\nf 29833 30295 30293\nf 29834 29835 30296\nf 29834 30296 30207\nf 29835 29837 30299\nf 29835 30297 30296\nf 29835 30299 30297\nf 29836 30209 30298\nf 29836 30298 29838\nf 29837 29840 30302\nf 29837 30302 30299\nf 29838 30298 30300\nf 29838 30300 30301\nf 29838 30301 29839\nf 29839 30301 29841\nf 29840 29842 30304\nf 29840 30304 30302\nf 29841 30301 30303\nf 29841 30303 29844\nf 29842 29843 30304\nf 29843 29846 30308\nf 29843 30305 30304\nf 29843 30308 30305\nf 29844 30303 30306\nf 29844 30306 29848\nf 29845 29854 30315\nf 29845 30307 30309\nf 29845 30309 29847\nf 29845 30315 30307\nf 29846 29847 30308\nf 29847 30309 30308\nf 29848 30306 30310\nf 29848 30310 30311\nf 29848 30311 29849\nf 29849 30311 29850\nf 29850 29857 29856\nf 29850 30311 29857\nf 29851 29944 30404\nf 29851 30312 30313\nf 29851 30313 29852\nf 29851 30404 30312\nf 29852 30313 30314\nf 29852 30314 29853\nf 29853 30314 30316\nf 29853 30316 29855\nf 29854 29855 30315\nf 29855 30316 30315\nf 29856 29857 30318\nf 29856 30318 29858\nf 29857 30311 30317\nf 29857 30317 30318\nf 29858 30318 30319\nf 29858 30319 29859\nf 29859 29947 29946\nf 29859 30319 29947\nf 29860 29949 30409\nf 29860 30320 30321\nf 29860 30321 29861\nf 29860 30409 30320\nf 29861 30321 30322\nf 29861 30322 29862\nf 29862 30322 30323\nf 29862 30323 29863\nf 29863 30323 30324\nf 29863 30324 29864\nf 29864 30324 30325\nf 29864 30325 29865\nf 29865 30325 30326\nf 29865 30326 29866\nf 29866 30326 30327\nf 29866 30327 29867\nf 29867 30327 30328\nf 29867 30328 29868\nf 29868 30328 30329\nf 29868 30329 29869\nf 29869 30329 30330\nf 29869 30330 29870\nf 29870 30330 30331\nf 29870 30331 29871\nf 29871 30331 30332\nf 29871 30332 29872\nf 29872 30332 30333\nf 29872 30333 29873\nf 29873 30333 30334\nf 29873 30334 29874\nf 29874 30334 30335\nf 29874 30335 29875\nf 29875 30335 30336\nf 29875 30336 29876\nf 29876 30336 30337\nf 29876 30337 29877\nf 29877 30337 30338\nf 29877 30338 29878\nf 29878 30338 30339\nf 29878 30339 29879\nf 29879 30339 30340\nf 29879 30340 29880\nf 29880 30340 30341\nf 29880 30341 29881\nf 29881 30341 30342\nf 29881 30342 29882\nf 29882 30342 30343\nf 29882 30343 29883\nf 29883 30343 30344\nf 29883 30344 29884\nf 29884 30344 30345\nf 29884 30345 29885\nf 29885 30345 30346\nf 29885 30346 29886\nf 29886 30346 30347\nf 29886 30347 29887\nf 29887 30347 30348\nf 29887 30348 29888\nf 29888 30348 30349\nf 29888 30349 29889\nf 29889 30349 30350\nf 29889 30350 29890\nf 29890 30350 30351\nf 29890 30351 29891\nf 29891 30351 30352\nf 29891 30352 29892\nf 29892 30352 30353\nf 29892 30353 29893\nf 29893 30353 30354\nf 29893 30354 29894\nf 29894 30354 30355\nf 29894 30355 29895\nf 29895 30355 30356\nf 29895 30356 29896\nf 29896 30356 30357\nf 29896 30357 29897\nf 29897 30357 30358\nf 29897 30358 29898\nf 29898 30358 30359\nf 29898 30359 29899\nf 29899 30359 30360\nf 29899 30360 29900\nf 29900 30360 30361\nf 29900 30361 29901\nf 29901 30361 30362\nf 29901 30362 29902\nf 29902 30362 30363\nf 29902 30363 29903\nf 29903 30363 30364\nf 29903 30364 29904\nf 29904 30364 30365\nf 29904 30365 29905\nf 29905 30365 30366\nf 29905 30366 29906\nf 29906 30366 30367\nf 29906 30367 29907\nf 29907 30367 30368\nf 29907 30368 29908\nf 29908 30368 30369\nf 29908 30369 29909\nf 29909 30369 30370\nf 29909 30370 29910\nf 29910 30370 30371\nf 29910 30371 29911\nf 29911 30371 30372\nf 29911 30372 29912\nf 29912 30372 30373\nf 29912 30373 29913\nf 29913 30373 30374\nf 29913 30374 29914\nf 29914 30374 30375\nf 29914 30375 29915\nf 29915 30375 30376\nf 29915 30376 29916\nf 29916 30376 30377\nf 29916 30377 29917\nf 29917 30377 30378\nf 29917 30378 29918\nf 29918 30378 30379\nf 29918 30379 29919\nf 29919 30379 30380\nf 29919 30380 29920\nf 29920 30380 30381\nf 29920 30381 29921\nf 29921 30381 30382\nf 29921 30382 29922\nf 29922 30382 30383\nf 29922 30383 29923\nf 29923 30383 30384\nf 29923 30384 29924\nf 29924 30384 30385\nf 29924 30385 29925\nf 29925 30385 30386\nf 29925 30386 29926\nf 29926 30386 30387\nf 29926 30387 29927\nf 29927 30387 30388\nf 29927 30388 29928\nf 29928 30388 30389\nf 29928 30389 29929\nf 29929 30389 30390\nf 29929 30390 29930\nf 29930 30390 30391\nf 29930 30391 29931\nf 29931 30391 30392\nf 29931 30392 29932\nf 29932 30392 30393\nf 29932 30393 29933\nf 29933 30393 30394\nf 29933 30394 29934\nf 29934 30394 30395\nf 29934 30395 29935\nf 29935 30395 30396\nf 29935 30396 29936\nf 29936 30396 30397\nf 29936 30397 29937\nf 29937 30397 30398\nf 29937 30398 29938\nf 29938 30398 30399\nf 29938 30399 29939\nf 29939 30399 30400\nf 29939 30400 29940\nf 29940 30400 30401\nf 29940 30401 29941\nf 29941 30401 30402\nf 29941 30402 29942\nf 29942 30402 30403\nf 29942 30403 29943\nf 29943 30403 30405\nf 29943 30405 29945\nf 29944 29945 30404\nf 29945 30405 30404\nf 29946 29947 30407\nf 29946 30407 30412\nf 29946 30412 29951\nf 29947 30319 30406\nf 29947 30406 30407\nf 29948 29954 30415\nf 29948 30408 30410\nf 29948 30410 29950\nf 29948 30415 30408\nf 29949 29950 30409\nf 29950 30410 30409\nf 29951 30412 30413\nf 29951 30413 29952\nf 29952 30413 30414\nf 29952 30414 29953\nf 29953 30414 30416\nf 29953 30416 29955\nf 29954 29955 30415\nf 29955 30416 30415\nf 29956 29957 30417\nf 29956 30417 30421\nf 29956 30421 29960\nf 29957 29958 30418\nf 29957 30418 30417\nf 29958 29959 30419\nf 29958 30419 30418\nf 29959 29962 30420\nf 29959 30420 30419\nf 29960 30421 29961\nf 29961 30421 30422\nf 29961 30422 30425\nf 29961 30425 29964\nf 29962 29963 30424\nf 29962 30423 30420\nf 29962 30424 30423\nf 29963 29965 30424\nf 29964 30425 29966\nf 29965 29968 30429\nf 29965 30426 30424\nf 29965 30429 30426\nf 29966 30425 30427\nf 29966 30427 29967\nf 29967 30427 30428\nf 29967 30428 30430\nf 29967 30430 29969\nf 29968 29970 30431\nf 29968 30431 30429\nf 29969 30430 29972\nf 29970 29971 30432\nf 29970 30432 30431\nf 29971 29973 30432\nf 29972 30430 30433\nf 29972 30433 29974\nf 29973 29975 30436\nf 29973 30434 30432\nf 29973 30436 30434\nf 29974 30433 30435\nf 29974 30435 29976\nf 29975 29977 30438\nf 29975 30438 30436\nf 29976 30435 30437\nf 29976 30437 29978\nf 29977 29979 30440\nf 29977 30440 30438\nf 29978 30437 30439\nf 29978 30439 29980\nf 29979 29981 30442\nf 29979 30442 30440\nf 29980 30439 30441\nf 29980 30441 29982\nf 29981 29983 30444\nf 29981 30444 30442\nf 29982 30441 30443\nf 29982 30443 29984\nf 29983 29985 30446\nf 29983 30446 30444\nf 29984 30443 30445\nf 29984 30445 29987\nf 29985 29986 30446\nf 29986 29988 30449\nf 29986 30447 30446\nf 29986 30449 30447\nf 29987 30445 30448\nf 29987 30448 29989\nf 29988 29990 30451\nf 29988 30451 30449\nf 29989 30448 30450\nf 29989 30450 29991\nf 29990 29992 30453\nf 29990 30453 30451\nf 29991 30450 30452\nf 29991 30452 29993\nf 29992 29995 30456\nf 29992 30456 30453\nf 29993 30452 30454\nf 29993 30454 30455\nf 29993 30455 29994\nf 29994 30455 29996\nf 29995 29997 30458\nf 29995 30458 30456\nf 29996 30455 30457\nf 29996 30457 29998\nf 29997 29999 30460\nf 29997 30460 30458\nf 29998 30457 30459\nf 29998 30459 30001\nf 29999 30000 30460\nf 30000 30003 30464\nf 30000 30461 30460\nf 30000 30464 30461\nf 30001 30459 30462\nf 30001 30462 30463\nf 30001 30463 30002\nf 30002 30463 30004\nf 30003 30006 30466\nf 30003 30466 30464\nf 30004 30463 30465\nf 30004 30465 30008\nf 30005 30010 30012\nf 30005 30012 30470\nf 30005 30467 30007\nf 30005 30470 30467\nf 30006 30007 30466\nf 30007 30467 30466\nf 30008 30465 30468\nf 30008 30468 30469\nf 30008 30469 30009\nf 30009 30469 30011\nf 30010 30011 30012\nf 30011 30013 30012\nf 30011 30469 30013\nf 30012 30013 30471\nf 30012 30471 30470\nf 30013 30469 30473\nf 30013 30473 30476\nf 30013 30475 30471\nf 30013 30476 30475\nf 30014 30015 30487\nf 30014 30021 30019\nf 30014 30485 30021\nf 30014 30487 30485\nf 30015 30016 30486\nf 30015 30017 30016\nf 30015 30486 30487\nf 30016 30017 30018\nf 30016 30018 30482\nf 30016 30480 30486\nf 30016 30482 30480\nf 30017 30022 30023\nf 30017 30023 30490\nf 30017 30490 30018\nf 30018 30489 30482\nf 30018 30490 30489\nf 30019 30021 30020\nf 30020 30021 30492\nf 30020 30492 30024\nf 30021 30485 30492\nf 30022 30026 30023\nf 30023 30026 30028\nf 30023 30028 30496\nf 30023 30493 30490\nf 30023 30496 30493\nf 30024 30492 30494\nf 30024 30494 30025\nf 30025 30494 30495\nf 30025 30495 30497\nf 30025 30497 30029\nf 30026 30027 30028\nf 30027 30030 30028\nf 30028 30030 30496\nf 30029 30497 30031\nf 30030 30032 30500\nf 30030 30498 30496\nf 30030 30500 30498\nf 30031 30497 30499\nf 30031 30499 30034\nf 30032 30033 30502\nf 30032 30502 30500\nf 30033 30035 30037\nf 30033 30037 30502\nf 30034 30499 30501\nf 30034 30501 30038\nf 30035 30036 30037\nf 30036 30039 30037\nf 30037 30039 30502\nf 30038 30501 30503\nf 30038 30503 30040\nf 30039 30041 30506\nf 30039 30504 30502\nf 30039 30506 30504\nf 30040 30503 30505\nf 30040 30505 30043\nf 30041 30042 30509\nf 30041 30509 30506\nf 30042 30045 30046\nf 30042 30046 30509\nf 30043 30505 30507\nf 30043 30507 30044\nf 30044 30507 30508\nf 30044 30508 30512\nf 30044 30512 30047\nf 30045 30048 30513\nf 30045 30513 30046\nf 30046 30510 30509\nf 30046 30513 30510\nf 30047 30512 30049\nf 30048 30050 30515\nf 30048 30515 30513\nf 30049 30512 30514\nf 30049 30514 30051\nf 30050 30052 30517\nf 30050 30517 30515\nf 30051 30514 30516\nf 30051 30516 30053\nf 30052 30054 30519\nf 30052 30519 30517\nf 30053 30516 30518\nf 30053 30518 30055\nf 30054 30056 30521\nf 30054 30521 30519\nf 30055 30518 30520\nf 30055 30520 30057\nf 30056 30058 30523\nf 30056 30523 30521\nf 30057 30520 30522\nf 30057 30522 30059\nf 30058 30060 30525\nf 30058 30525 30523\nf 30059 30522 30524\nf 30059 30524 30062\nf 30060 30061 30525\nf 30061 30063 30528\nf 30061 30526 30525\nf 30061 30528 30526\nf 30062 30524 30527\nf 30062 30527 30064\nf 30063 30065 30530\nf 30063 30530 30528\nf 30064 30527 30529\nf 30064 30529 30066\nf 30065 30067 30532\nf 30065 30532 30530\nf 30066 30529 30531\nf 30066 30531 30068\nf 30067 30069 30534\nf 30067 30534 30532\nf 30068 30531 30533\nf 30068 30533 30071\nf 30069 30070 30534\nf 30070 30073 30538\nf 30070 30535 30534\nf 30070 30538 30535\nf 30071 30533 30536\nf 30071 30536 30537\nf 30071 30537 30072\nf 30072 30537 30075\nf 30073 30074 30538\nf 30074 30077 30543\nf 30074 30539 30538\nf 30074 30543 30539\nf 30075 30537 30540\nf 30075 30540 30542\nf 30075 30542 30076\nf 30076 30542 30544\nf 30076 30544 30078\nf 30077 30078 30543\nf 30078 30544 30543\nf 30079 30080 30093\nf 30079 30092 30090\nf 30079 30093 30092\nf 30080 30081 30094\nf 30080 30094 30093\nf 30081 30082 30545\nf 30081 30545 30558\nf 30081 30558 30094\nf 30082 30083 30545\nf 30083 30084 30546\nf 30083 30546 30545\nf 30084 30085 30547\nf 30084 30547 30546\nf 30085 30086 30548\nf 30085 30548 30547\nf 30086 30087 30549\nf 30086 30549 30548\nf 30087 30088 30550\nf 30087 30550 30549\nf 30088 30095 30552\nf 30088 30551 30550\nf 30088 30552 30551\nf 30089 30091 30555\nf 30089 30106 30105\nf 30089 30555 30567\nf 30089 30567 30106\nf 30090 30092 30091\nf 30091 30092 30556\nf 30091 30556 30555\nf 30092 30093 30556\nf 30093 30094 30557\nf 30093 30557 30556\nf 30094 30558 30559\nf 30094 30559 30557\nf 30095 30096 30097\nf 30095 30097 30552\nf 30096 30098 30097\nf 30097 30098 30099\nf 30097 30099 30553\nf 30097 30553 30552\nf 30098 30100 30099\nf 30099 30100 30101\nf 30099 30101 30554\nf 30099 30554 30553\nf 30100 30102 30562\nf 30100 30562 30101\nf 30101 30561 30554\nf 30101 30562 30561\nf 30102 30103 30562\nf 30103 30104 30564\nf 30103 30564 30562\nf 30104 30107 30566\nf 30104 30565 30564\nf 30104 30566 30565\nf 30105 30106 30573\nf 30105 30573 30112\nf 30106 30567 30568\nf 30106 30568 30573\nf 30107 30108 30109\nf 30107 30109 30566\nf 30108 30110 30571\nf 30108 30571 30109\nf 30109 30570 30566\nf 30109 30571 30570\nf 30110 30111 30571\nf 30111 30114 30572\nf 30111 30572 30571\nf 30112 30573 30574\nf 30112 30574 30113\nf 30113 30574 30115\nf 30114 30116 30579\nf 30114 30575 30572\nf 30114 30579 30575\nf 30115 30574 30577\nf 30115 30577 30117\nf 30116 30121 30583\nf 30116 30583 30579\nf 30117 30577 30580\nf 30117 30580 30581\nf 30117 30581 30118\nf 30118 30581 30119\nf 30119 30124 30123\nf 30119 30581 30124\nf 30120 30131 30592\nf 30120 30582 30584\nf 30120 30584 30122\nf 30120 30592 30582\nf 30121 30122 30583\nf 30122 30584 30583\nf 30123 30124 30586\nf 30123 30586 30125\nf 30124 30581 30585\nf 30124 30585 30586\nf 30125 30586 30587\nf 30125 30587 30588\nf 30125 30588 30126\nf 30126 30588 30589\nf 30126 30589 30127\nf 30127 30589 30133\nf 30128 30142 30144\nf 30128 30144 30604\nf 30128 30590 30129\nf 30128 30604 30590\nf 30129 30590 30591\nf 30129 30591 30130\nf 30130 30591 30593\nf 30130 30593 30132\nf 30131 30132 30592\nf 30132 30593 30592\nf 30133 30589 30594\nf 30133 30594 30595\nf 30133 30595 30134\nf 30134 30595 30596\nf 30134 30596 30135\nf 30135 30596 30597\nf 30135 30597 30136\nf 30136 30597 30598\nf 30136 30598 30137\nf 30137 30598 30599\nf 30137 30599 30138\nf 30138 30599 30600\nf 30138 30600 30139\nf 30139 30600 30601\nf 30139 30601 30140\nf 30140 30601 30602\nf 30140 30602 30141\nf 30141 30602 30603\nf 30141 30603 30143\nf 30142 30143 30144\nf 30143 30603 30605\nf 30143 30605 30144\nf 30144 30605 30604\nf 30145 30146 30606\nf 30145 30606 30613\nf 30145 30613 30152\nf 30146 30147 30607\nf 30146 30607 30606\nf 30147 30148 30608\nf 30147 30608 30607\nf 30148 30153 30609\nf 30148 30609 30608\nf 30149 30150 30610\nf 30149 30610 30616\nf 30149 30616 30155\nf 30150 30151 30611\nf 30150 30611 30610\nf 30151 30157 30612\nf 30151 30612 30611\nf 30152 30613 30159\nf 30153 30154 30615\nf 30153 30614 30609\nf 30153 30615 30614\nf 30154 30161 30615\nf 30155 30616 30156\nf 30156 30616 30617\nf 30156 30617 30623\nf 30156 30623 30162\nf 30157 30158 30619\nf 30157 30618 30612\nf 30157 30619 30618\nf 30158 30163 30619\nf 30159 30613 30620\nf 30159 30620 30160\nf 30160 30620 30621\nf 30160 30621 30625\nf 30160 30625 30164\nf 30161 30165 30626\nf 30161 30622 30615\nf 30161 30626 30622\nf 30162 30623 30167\nf 30163 30168 30629\nf 30163 30624 30619\nf 30163 30629 30624\nf 30164 30625 30169\nf 30165 30166 30627\nf 30165 30627 30626\nf 30166 30170 30627\nf 30167 30623 30628\nf 30167 30628 30171\nf 30168 30172 30633\nf 30168 30633 30629\nf 30169 30625 30630\nf 30169 30630 30173\nf 30170 30174 30635\nf 30170 30631 30627\nf 30170 30635 30631\nf 30171 30628 30632\nf 30171 30632 30175\nf 30172 30176 30637\nf 30172 30637 30633\nf 30173 30630 30634\nf 30173 30634 30177\nf 30174 30178 30639\nf 30174 30639 30635\nf 30175 30632 30636\nf 30175 30636 30179\nf 30176 30180 30641\nf 30176 30641 30637\nf 30177 30634 30638\nf 30177 30638 30181\nf 30178 30182 30643\nf 30178 30643 30639\nf 30179 30636 30640\nf 30179 30640 30183\nf 30180 30184 30645\nf 30180 30645 30641\nf 30181 30638 30642\nf 30181 30642 30185\nf 30182 30186 30647\nf 30182 30647 30643\nf 30183 30640 30644\nf 30183 30644 30188\nf 30184 30189 30652\nf 30184 30652 30645\nf 30185 30642 30646\nf 30185 30646 30190\nf 30186 30187 30648\nf 30186 30648 30647\nf 30187 30191 30648\nf 30188 30644 30650\nf 30188 30650 30192\nf 30189 30193 30656\nf 30189 30656 30652\nf 30190 30646 30653\nf 30190 30653 30195\nf 30191 30196 30659\nf 30191 30654 30648\nf 30191 30659 30654\nf 30192 30650 30655\nf 30192 30655 30198\nf 30193 30194 30657\nf 30193 30657 30656\nf 30194 30199 30657\nf 30195 30653 30658\nf 30195 30658 30204\nf 30196 30197 30668\nf 30196 30668 30659\nf 30197 30206 30208\nf 30197 30208 30668\nf 30198 30655 30660\nf 30198 30660 30209\nf 30199 30200 30662\nf 30199 30661 30657\nf 30199 30662 30661\nf 30200 30201 30662\nf 30201 30202 30663\nf 30201 30663 30662\nf 30202 30210 30664\nf 30202 30664 30663\nf 30203 30205 30665\nf 30203 30665 30754\nf 30203 30754 30294\nf 30204 30658 30666\nf 30204 30666 30205\nf 30205 30666 30667\nf 30205 30667 30665\nf 30206 30207 30208\nf 30207 30296 30208\nf 30208 30296 30668\nf 30209 30660 30669\nf 30209 30669 30298\nf 30210 30211 30671\nf 30210 30670 30664\nf 30210 30671 30670\nf 30211 30212 30671\nf 30212 30213 30672\nf 30212 30672 30671\nf 30213 30214 30673\nf 30213 30673 30672\nf 30214 30215 30674\nf 30214 30674 30673\nf 30215 30216 30675\nf 30215 30675 30674\nf 30216 30217 30676\nf 30216 30676 30675\nf 30217 30218 30677\nf 30217 30677 30676\nf 30218 30219 30678\nf 30218 30678 30677\nf 30219 30220 30679\nf 30219 30679 30678\nf 30220 30221 30680\nf 30220 30680 30679\nf 30221 30222 30681\nf 30221 30681 30680\nf 30222 30223 30682\nf 30222 30682 30681\nf 30223 30224 30683\nf 30223 30683 30682\nf 30224 30225 30684\nf 30224 30684 30683\nf 30225 30226 30685\nf 30225 30685 30684\nf 30226 30227 30686\nf 30226 30686 30685\nf 30227 30228 30687\nf 30227 30687 30686\nf 30228 30229 30688\nf 30228 30688 30687\nf 30229 30230 30689\nf 30229 30689 30688\nf 30230 30231 30690\nf 30230 30690 30689\nf 30231 30232 30691\nf 30231 30691 30690\nf 30232 30233 30692\nf 30232 30692 30691\nf 30233 30234 30693\nf 30233 30693 30692\nf 30234 30235 30694\nf 30234 30694 30693\nf 30235 30236 30695\nf 30235 30695 30694\nf 30236 30237 30696\nf 30236 30696 30695\nf 30237 30238 30697\nf 30237 30697 30696\nf 30238 30239 30698\nf 30238 30698 30697\nf 30239 30240 30699\nf 30239 30699 30698\nf 30240 30241 30700\nf 30240 30700 30699\nf 30241 30242 30701\nf 30241 30701 30700\nf 30242 30243 30702\nf 30242 30702 30701\nf 30243 30244 30703\nf 30243 30703 30702\nf 30244 30245 30704\nf 30244 30704 30703\nf 30245 30246 30705\nf 30245 30705 30704\nf 30246 30247 30706\nf 30246 30706 30705\nf 30247 30248 30707\nf 30247 30707 30706\nf 30248 30249 30708\nf 30248 30708 30707\nf 30249 30250 30709\nf 30249 30709 30708\nf 30250 30251 30710\nf 30250 30710 30709\nf 30251 30252 30711\nf 30251 30711 30710\nf 30252 30253 30712\nf 30252 30712 30711\nf 30253 30254 30713\nf 30253 30713 30712\nf 30254 30255 30714\nf 30254 30714 30713\nf 30255 30256 30715\nf 30255 30715 30714\nf 30256 30257 30716\nf 30256 30716 30715\nf 30257 30258 30717\nf 30257 30717 30716\nf 30258 30259 30718\nf 30258 30718 30717\nf 30259 30260 30719\nf 30259 30719 30718\nf 30260 30261 30720\nf 30260 30720 30719\nf 30261 30262 30721\nf 30261 30721 30720\nf 30262 30263 30722\nf 30262 30722 30721\nf 30263 30264 30723\nf 30263 30723 30722\nf 30264 30265 30724\nf 30264 30724 30723\nf 30265 30266 30725\nf 30265 30725 30724\nf 30266 30267 30726\nf 30266 30726 30725\nf 30267 30268 30727\nf 30267 30727 30726\nf 30268 30269 30728\nf 30268 30728 30727\nf 30269 30270 30729\nf 30269 30729 30728\nf 30270 30271 30730\nf 30270 30730 30729\nf 30271 30272 30731\nf 30271 30731 30730\nf 30272 30273 30732\nf 30272 30732 30731\nf 30273 30274 30733\nf 30273 30733 30732\nf 30274 30275 30734\nf 30274 30734 30733\nf 30275 30276 30735\nf 30275 30735 30734\nf 30276 30277 30736\nf 30276 30736 30735\nf 30277 30278 30737\nf 30277 30737 30736\nf 30278 30279 30738\nf 30278 30738 30737\nf 30279 30280 30739\nf 30279 30739 30738\nf 30280 30281 30740\nf 30280 30740 30739\nf 30281 30282 30741\nf 30281 30741 30740\nf 30282 30283 30742\nf 30282 30742 30741\nf 30283 30284 30743\nf 30283 30743 30742\nf 30284 30285 30744\nf 30284 30744 30743\nf 30285 30286 30745\nf 30285 30745 30744\nf 30286 30287 30746\nf 30286 30746 30745\nf 30287 30288 30747\nf 30287 30747 30746\nf 30288 30289 30748\nf 30288 30748 30747\nf 30289 30290 30749\nf 30289 30749 30748\nf 30290 30291 30750\nf 30290 30750 30749\nf 30291 30292 30751\nf 30291 30751 30750\nf 30292 30293 30752\nf 30292 30752 30751\nf 30293 30295 30753\nf 30293 30753 30752\nf 30294 30754 30295\nf 30295 30754 30755\nf 30295 30755 30753\nf 30296 30297 30756\nf 30296 30756 30668\nf 30297 30299 30759\nf 30297 30757 30756\nf 30297 30759 30757\nf 30298 30669 30758\nf 30298 30758 30300\nf 30299 30302 30762\nf 30299 30762 30759\nf 30300 30758 30760\nf 30300 30760 30761\nf 30300 30761 30301\nf 30301 30761 30303\nf 30302 30304 30765\nf 30302 30765 30762\nf 30303 30761 30763\nf 30303 30763 30306\nf 30304 30305 30765\nf 30305 30308 30769\nf 30305 30766 30765\nf 30305 30769 30766\nf 30306 30763 30767\nf 30306 30767 30310\nf 30307 30315 30776\nf 30307 30768 30770\nf 30307 30770 30309\nf 30307 30776 30768\nf 30308 30309 30769\nf 30309 30770 30769\nf 30310 30767 30771\nf 30310 30771 30772\nf 30310 30772 30311\nf 30311 30772 30317\nf 30312 30404 30866\nf 30312 30773 30774\nf 30312 30774 30313\nf 30312 30866 30773\nf 30313 30774 30775\nf 30313 30775 30314\nf 30314 30775 30777\nf 30314 30777 30316\nf 30315 30316 30776\nf 30316 30777 30776\nf 30317 30772 30778\nf 30317 30778 30779\nf 30317 30779 30318\nf 30318 30779 30780\nf 30318 30780 30319\nf 30319 30780 30406\nf 30320 30409 30411\nf 30320 30411 30781\nf 30320 30781 30782\nf 30320 30782 30783\nf 30320 30783 30321\nf 30321 30783 30784\nf 30321 30784 30322\nf 30322 30784 30785\nf 30322 30785 30323\nf 30323 30785 30786\nf 30323 30786 30324\nf 30324 30786 30787\nf 30324 30787 30325\nf 30325 30787 30788\nf 30325 30788 30326\nf 30326 30788 30789\nf 30326 30789 30327\nf 30327 30789 30790\nf 30327 30790 30328\nf 30328 30790 30791\nf 30328 30791 30329\nf 30329 30791 30792\nf 30329 30792 30330\nf 30330 30792 30793\nf 30330 30793 30331\nf 30331 30793 30794\nf 30331 30794 30332\nf 30332 30794 30795\nf 30332 30795 30333\nf 30333 30795 30796\nf 30333 30796 30334\nf 30334 30796 30797\nf 30334 30797 30335\nf 30335 30797 30798\nf 30335 30798 30336\nf 30336 30798 30799\nf 30336 30799 30337\nf 30337 30799 30800\nf 30337 30800 30338\nf 30338 30800 30801\nf 30338 30801 30339\nf 30339 30801 30802\nf 30339 30802 30340\nf 30340 30802 30803\nf 30340 30803 30341\nf 30341 30803 30804\nf 30341 30804 30342\nf 30342 30804 30805\nf 30342 30805 30343\nf 30343 30805 30806\nf 30343 30806 30344\nf 30344 30806 30807\nf 30344 30807 30345\nf 30345 30807 30808\nf 30345 30808 30346\nf 30346 30808 30809\nf 30346 30809 30347\nf 30347 30809 30810\nf 30347 30810 30348\nf 30348 30810 30811\nf 30348 30811 30349\nf 30349 30811 30812\nf 30349 30812 30350\nf 30350 30812 30813\nf 30350 30813 30351\nf 30351 30813 30814\nf 30351 30814 30352\nf 30352 30814 30815\nf 30352 30815 30353\nf 30353 30815 30816\nf 30353 30816 30354\nf 30354 30816 30817\nf 30354 30817 30355\nf 30355 30817 30818\nf 30355 30818 30356\nf 30356 30818 30819\nf 30356 30819 30357\nf 30357 30819 30820\nf 30357 30820 30358\nf 30358 30820 30821\nf 30358 30821 30359\nf 30359 30821 30822\nf 30359 30822 30360\nf 30360 30822 30823\nf 30360 30823 30361\nf 30361 30823 30824\nf 30361 30824 30362\nf 30362 30824 30825\nf 30362 30825 30363\nf 30363 30825 30826\nf 30363 30826 30364\nf 30364 30826 30827\nf 30364 30827 30365\nf 30365 30827 30828\nf 30365 30828 30366\nf 30366 30828 30829\nf 30366 30829 30367\nf 30367 30829 30830\nf 30367 30830 30368\nf 30368 30830 30831\nf 30368 30831 30369\nf 30369 30831 30832\nf 30369 30832 30370\nf 30370 30832 30833\nf 30370 30833 30371\nf 30371 30833 30834\nf 30371 30834 30372\nf 30372 30834 30835\nf 30372 30835 30373\nf 30373 30835 30836\nf 30373 30836 30374\nf 30374 30836 30837\nf 30374 30837 30375\nf 30375 30837 30838\nf 30375 30838 30376\nf 30376 30838 30839\nf 30376 30839 30377\nf 30377 30839 30840\nf 30377 30840 30378\nf 30378 30840 30841\nf 30378 30841 30379\nf 30379 30841 30842\nf 30379 30842 30380\nf 30380 30842 30843\nf 30380 30843 30381\nf 30381 30843 30844\nf 30381 30844 30382\nf 30382 30844 30845\nf 30382 30845 30383\nf 30383 30845 30846\nf 30383 30846 30384\nf 30384 30846 30847\nf 30384 30847 30385\nf 30385 30847 30848\nf 30385 30848 30386\nf 30386 30848 30849\nf 30386 30849 30387\nf 30387 30849 30850\nf 30387 30850 30388\nf 30388 30850 30851\nf 30388 30851 30389\nf 30389 30851 30852\nf 30389 30852 30390\nf 30390 30852 30853\nf 30390 30853 30391\nf 30391 30853 30854\nf 30391 30854 30392\nf 30392 30854 30855\nf 30392 30855 30393\nf 30393 30855 30856\nf 30393 30856 30394\nf 30394 30856 30857\nf 30394 30857 30395\nf 30395 30857 30858\nf 30395 30858 30396\nf 30396 30858 30859\nf 30396 30859 30397\nf 30397 30859 30860\nf 30397 30860 30398\nf 30398 30860 30861\nf 30398 30861 30399\nf 30399 30861 30862\nf 30399 30862 30400\nf 30400 30862 30863\nf 30400 30863 30401\nf 30401 30863 30864\nf 30401 30864 30402\nf 30402 30864 30865\nf 30402 30865 30403\nf 30403 30865 30867\nf 30403 30867 30405\nf 30404 30405 30866\nf 30405 30867 30866\nf 30406 30780 30868\nf 30406 30868 30869\nf 30406 30869 30407\nf 30407 30869 30412\nf 30408 30415 30875\nf 30408 30871 30410\nf 30408 30875 30871\nf 30409 30410 30411\nf 30410 30870 30411\nf 30410 30871 30870\nf 30411 30870 30781\nf 30412 30869 30872\nf 30412 30872 30873\nf 30412 30873 30413\nf 30413 30873 30874\nf 30413 30874 30414\nf 30414 30874 30876\nf 30414 30876 30416\nf 30415 30416 30875\nf 30416 30876 30875\nf 30417 30418 30877\nf 30417 30877 30881\nf 30417 30881 30421\nf 30418 30419 30878\nf 30418 30878 30877\nf 30419 30420 30879\nf 30419 30879 30878\nf 30420 30423 30880\nf 30420 30880 30879\nf 30421 30881 30422\nf 30422 30881 30882\nf 30422 30882 30885\nf 30422 30885 30425\nf 30423 30424 30884\nf 30423 30883 30880\nf 30423 30884 30883\nf 30424 30426 30884\nf 30425 30885 30427\nf 30426 30429 30891\nf 30426 30886 30884\nf 30426 30891 30886\nf 30427 30885 30888\nf 30427 30888 30428\nf 30428 30888 30889\nf 30428 30889 30892\nf 30428 30892 30430\nf 30429 30431 30893\nf 30429 30893 30891\nf 30430 30892 30433\nf 30431 30432 30894\nf 30431 30894 30893\nf 30432 30434 30894\nf 30433 30892 30895\nf 30433 30895 30435\nf 30434 30436 30898\nf 30434 30896 30894\nf 30434 30898 30896\nf 30435 30895 30897\nf 30435 30897 30437\nf 30436 30438 30900\nf 30436 30900 30898\nf 30437 30897 30899\nf 30437 30899 30439\nf 30438 30440 30902\nf 30438 30902 30900\nf 30439 30899 30901\nf 30439 30901 30441\nf 30440 30442 30904\nf 30440 30904 30902\nf 30441 30901 30903\nf 30441 30903 30443\nf 30442 30444 30906\nf 30442 30906 30904\nf 30443 30903 30905\nf 30443 30905 30445\nf 30444 30446 30908\nf 30444 30908 30906\nf 30445 30905 30907\nf 30445 30907 30448\nf 30446 30447 30908\nf 30447 30449 30911\nf 30447 30909 30908\nf 30447 30911 30909\nf 30448 30907 30910\nf 30448 30910 30450\nf 30449 30451 30913\nf 30449 30913 30911\nf 30450 30910 30912\nf 30450 30912 30452\nf 30451 30453 30915\nf 30451 30915 30913\nf 30452 30912 30914\nf 30452 30914 30454\nf 30453 30456 30918\nf 30453 30918 30915\nf 30454 30914 30916\nf 30454 30916 30917\nf 30454 30917 30455\nf 30455 30917 30457\nf 30456 30458 30920\nf 30456 30920 30918\nf 30457 30917 30919\nf 30457 30919 30459\nf 30458 30460 30922\nf 30458 30922 30920\nf 30459 30919 30921\nf 30459 30921 30462\nf 30460 30461 30922\nf 30461 30464 30926\nf 30461 30923 30922\nf 30461 30926 30923\nf 30462 30921 30924\nf 30462 30924 30925\nf 30462 30925 30463\nf 30463 30925 30465\nf 30464 30466 30928\nf 30464 30928 30926\nf 30465 30925 30927\nf 30465 30927 30468\nf 30466 30467 30930\nf 30466 30930 30928\nf 30467 30470 30472\nf 30467 30472 30930\nf 30468 30474 30469\nf 30468 30927 30929\nf 30468 30929 30932\nf 30468 30932 30474\nf 30469 30474 30473\nf 30470 30471 30472\nf 30471 30475 30477\nf 30471 30477 30472\nf 30472 30477 30931\nf 30472 30931 30930\nf 30473 30474 30933\nf 30473 30933 30476\nf 30474 30932 30933\nf 30475 30476 30477\nf 30476 30933 30934\nf 30476 30934 30936\nf 30476 30936 30477\nf 30477 30935 30931\nf 30477 30936 30935\nf 30478 30479 30952\nf 30478 30481 30483\nf 30478 30483 30479\nf 30478 30950 30955\nf 30478 30952 30950\nf 30478 30955 30481\nf 30479 30483 30484\nf 30479 30484 30958\nf 30479 30957 30952\nf 30479 30958 30957\nf 30480 30481 30960\nf 30480 30482 30481\nf 30480 30960 30961\nf 30480 30961 30486\nf 30481 30482 30483\nf 30481 30955 30960\nf 30482 30489 30483\nf 30483 30489 30491\nf 30483 30491 30484\nf 30484 30491 30966\nf 30484 30963 30958\nf 30484 30966 30963\nf 30485 30487 30965\nf 30485 30965 30967\nf 30485 30967 30492\nf 30486 30488 30487\nf 30486 30961 30488\nf 30487 30488 30964\nf 30487 30964 30965\nf 30488 30961 30964\nf 30489 30490 30491\nf 30490 30493 30491\nf 30491 30493 30966\nf 30492 30967 30494\nf 30493 30496 30972\nf 30493 30968 30966\nf 30493 30972 30968\nf 30494 30967 30969\nf 30494 30969 30495\nf 30495 30969 30970\nf 30495 30970 30973\nf 30495 30973 30497\nf 30496 30498 30974\nf 30496 30974 30972\nf 30497 30973 30499\nf 30498 30500 30976\nf 30498 30976 30974\nf 30499 30973 30975\nf 30499 30975 30501\nf 30500 30502 30978\nf 30500 30978 30976\nf 30501 30975 30977\nf 30501 30977 30503\nf 30502 30504 30980\nf 30502 30980 30978\nf 30503 30977 30979\nf 30503 30979 30505\nf 30504 30506 30982\nf 30504 30982 30980\nf 30505 30979 30981\nf 30505 30981 30507\nf 30506 30509 30982\nf 30507 30981 30984\nf 30507 30984 30508\nf 30508 30984 30985\nf 30508 30985 30988\nf 30508 30988 30512\nf 30509 30510 30511\nf 30509 30511 30982\nf 30510 30513 30987\nf 30510 30987 30511\nf 30511 30983 30982\nf 30511 30987 30983\nf 30512 30988 30514\nf 30513 30515 30991\nf 30513 30989 30987\nf 30513 30991 30989\nf 30514 30988 30990\nf 30514 30990 30516\nf 30515 30517 30993\nf 30515 30993 30991\nf 30516 30990 30992\nf 30516 30992 30518\nf 30517 30519 30995\nf 30517 30995 30993\nf 30518 30992 30994\nf 30518 30994 30520\nf 30519 30521 30997\nf 30519 30997 30995\nf 30520 30994 30996\nf 30520 30996 30522\nf 30521 30523 30999\nf 30521 30999 30997\nf 30522 30996 30998\nf 30522 30998 30524\nf 30523 30525 31001\nf 30523 31001 30999\nf 30524 30998 31000\nf 30524 31000 30527\nf 30525 30526 31001\nf 30526 30528 31004\nf 30526 31002 31001\nf 30526 31004 31002\nf 30527 31000 31003\nf 30527 31003 30529\nf 30528 30530 31006\nf 30528 31006 31004\nf 30529 31003 31005\nf 30529 31005 30531\nf 30530 30532 31008\nf 30530 31008 31006\nf 30531 31005 31007\nf 30531 31007 30533\nf 30532 30534 31010\nf 30532 31010 31008\nf 30533 31007 31009\nf 30533 31009 30536\nf 30534 30535 31010\nf 30535 30538 31013\nf 30535 31011 31010\nf 30535 31013 31011\nf 30536 30541 30537\nf 30536 31009 31012\nf 30536 31012 31015\nf 30536 31015 30541\nf 30537 30541 30540\nf 30538 30539 31013\nf 30539 30543 31018\nf 30539 31014 31013\nf 30539 31018 31014\nf 30540 30541 31016\nf 30540 31016 30542\nf 30541 31015 31016\nf 30542 31016 31017\nf 30542 31017 31019\nf 30542 31019 30544\nf 30543 30544 31018\nf 30544 31019 31018\nf 30545 30546 31021\nf 30545 30560 30558\nf 30545 31021 31034\nf 30545 31034 30560\nf 30546 30547 31021\nf 30547 30548 31022\nf 30547 31022 31021\nf 30548 30549 31023\nf 30548 31023 31022\nf 30549 30550 31024\nf 30549 31024 31023\nf 30550 30551 31025\nf 30550 31025 31024\nf 30551 30552 31026\nf 30551 31026 31025\nf 30552 30553 31027\nf 30552 31027 31026\nf 30553 30554 31028\nf 30553 31028 31027\nf 30554 30561 31030\nf 30554 31029 31028\nf 30554 31030 31029\nf 30555 30556 31031\nf 30555 30569 30567\nf 30555 31031 31041\nf 30555 31041 30569\nf 30556 30557 31031\nf 30557 30559 31032\nf 30557 31032 31031\nf 30558 30560 30559\nf 30559 30560 31035\nf 30559 31033 31032\nf 30559 31035 31033\nf 30560 31034 31035\nf 30561 30562 30563\nf 30561 30563 31030\nf 30562 30564 31037\nf 30562 31037 30563\nf 30563 31036 31030\nf 30563 31037 31036\nf 30564 30565 31037\nf 30565 30566 31038\nf 30565 31038 31037\nf 30566 30570 31039\nf 30566 31039 31038\nf 30567 30569 30568\nf 30568 30569 31042\nf 30568 31040 31045\nf 30568 31042 31040\nf 30568 31045 30573\nf 30569 31041 31042\nf 30570 30571 31044\nf 30570 31043 31039\nf 30570 31044 31043\nf 30571 30572 31044\nf 30572 30575 30576\nf 30572 30576 31044\nf 30573 30578 30574\nf 30573 31045 31048\nf 30573 31048 30578\nf 30574 30578 30577\nf 30575 30579 31050\nf 30575 31047 30576\nf 30575 31050 31047\nf 30576 31046 31044\nf 30576 31047 31046\nf 30577 30578 31049\nf 30577 31049 31051\nf 30577 31051 30580\nf 30578 31048 31049\nf 30579 30583 31055\nf 30579 31055 31050\nf 30580 31051 31053\nf 30580 31053 30581\nf 30581 31053 30585\nf 30582 30592 31064\nf 30582 31054 31056\nf 30582 31056 30584\nf 30582 31064 31054\nf 30583 30584 31055\nf 30584 31056 31055\nf 30585 31053 31057\nf 30585 31057 31058\nf 30585 31058 30586\nf 30586 31058 31059\nf 30586 31059 30587\nf 30587 31059 31060\nf 30587 31060 30588\nf 30588 31060 31061\nf 30588 31061 30589\nf 30589 31061 30594\nf 30590 30604 31077\nf 30590 31062 31063\nf 30590 31063 30591\nf 30590 31077 31062\nf 30591 31063 31065\nf 30591 31065 30593\nf 30592 30593 31064\nf 30593 31065 31064\nf 30594 31061 31066\nf 30594 31066 31068\nf 30594 31068 30595\nf 30595 31068 31069\nf 30595 31069 30596\nf 30596 31069 31070\nf 30596 31070 30597\nf 30597 31070 31071\nf 30597 31071 30598\nf 30598 31071 31072\nf 30598 31072 30599\nf 30599 31072 31073\nf 30599 31073 30600\nf 30600 31073 31074\nf 30600 31074 30601\nf 30601 31074 31075\nf 30601 31075 30602\nf 30602 31075 31076\nf 30602 31076 30603\nf 30603 31076 31078\nf 30603 31078 30605\nf 30604 30605 31077\nf 30605 31078 31077\nf 30606 30607 31079\nf 30606 31079 31086\nf 30606 31086 30613\nf 30607 30608 31080\nf 30607 31080 31079\nf 30608 30609 31081\nf 30608 31081 31080\nf 30609 30614 31082\nf 30609 31082 31081\nf 30610 30611 31083\nf 30610 31083 31089\nf 30610 31089 30616\nf 30611 30612 31084\nf 30611 31084 31083\nf 30612 30618 31085\nf 30612 31085 31084\nf 30613 31086 30620\nf 30614 30615 31088\nf 30614 31087 31082\nf 30614 31088 31087\nf 30615 30622 31088\nf 30616 31089 30617\nf 30617 31089 31090\nf 30617 31090 31096\nf 30617 31096 30623\nf 30618 30619 31092\nf 30618 31091 31085\nf 30618 31092 31091\nf 30619 30624 31092\nf 30620 31086 31093\nf 30620 31093 30621\nf 30621 31093 31094\nf 30621 31094 31098\nf 30621 31098 30625\nf 30622 30626 31099\nf 30622 31095 31088\nf 30622 31099 31095\nf 30623 31096 30628\nf 30624 30629 31102\nf 30624 31097 31092\nf 30624 31102 31097\nf 30625 31098 30630\nf 30626 30627 31100\nf 30626 31100 31099\nf 30627 30631 31100\nf 30628 31096 31101\nf 30628 31101 30632\nf 30629 30633 31106\nf 30629 31106 31102\nf 30630 31098 31103\nf 30630 31103 30634\nf 30631 30635 31108\nf 30631 31104 31100\nf 30631 31108 31104\nf 30632 31101 31105\nf 30632 31105 30636\nf 30633 30637 31110\nf 30633 31110 31106\nf 30634 31103 31107\nf 30634 31107 30638\nf 30635 30639 31112\nf 30635 31112 31108\nf 30636 31105 31109\nf 30636 31109 30640\nf 30637 30641 31114\nf 30637 31114 31110\nf 30638 31107 31111\nf 30638 31111 30642\nf 30639 30643 31116\nf 30639 31116 31112\nf 30640 31109 31113\nf 30640 31113 30644\nf 30641 30645 31120\nf 30641 31120 31114\nf 30642 31111 31115\nf 30642 31115 30646\nf 30643 30647 31116\nf 30644 31113 31118\nf 30644 31118 30650\nf 30645 30652 31125\nf 30645 31125 31120\nf 30646 31115 31121\nf 30646 31121 30653\nf 30647 30648 30649\nf 30647 30649 31117\nf 30647 31117 31116\nf 30648 30654 30649\nf 30649 30654 31122\nf 30649 31122 31117\nf 30650 30651 31124\nf 30650 31118 30651\nf 30650 31124 31128\nf 30650 31128 30655\nf 30651 31118 31119\nf 30651 31119 31123\nf 30651 31123 31124\nf 30652 30656 31129\nf 30652 31129 31125\nf 30653 31121 31126\nf 30653 31126 30658\nf 30654 30659 31132\nf 30654 31127 31122\nf 30654 31132 31127\nf 30655 31128 30660\nf 30656 30657 31130\nf 30656 31130 31129\nf 30657 30661 31130\nf 30658 31126 31131\nf 30658 31131 30666\nf 30659 30668 31141\nf 30659 31141 31132\nf 30660 31128 31133\nf 30660 31133 30669\nf 30661 30662 31135\nf 30661 31134 31130\nf 30661 31135 31134\nf 30662 30663 31135\nf 30663 30664 31136\nf 30663 31136 31135\nf 30664 30670 31137\nf 30664 31137 31136\nf 30665 30667 31138\nf 30665 31138 31227\nf 30665 31227 30754\nf 30666 31131 31139\nf 30666 31139 30667\nf 30667 31139 31140\nf 30667 31140 31138\nf 30668 30756 31229\nf 30668 31229 31141\nf 30669 31133 31142\nf 30669 31142 30758\nf 30670 30671 31144\nf 30670 31143 31137\nf 30670 31144 31143\nf 30671 30672 31144\nf 30672 30673 31145\nf 30672 31145 31144\nf 30673 30674 31146\nf 30673 31146 31145\nf 30674 30675 31147\nf 30674 31147 31146\nf 30675 30676 31148\nf 30675 31148 31147\nf 30676 30677 31149\nf 30676 31149 31148\nf 30677 30678 31150\nf 30677 31150 31149\nf 30678 30679 31151\nf 30678 31151 31150\nf 30679 30680 31152\nf 30679 31152 31151\nf 30680 30681 31153\nf 30680 31153 31152\nf 30681 30682 31154\nf 30681 31154 31153\nf 30682 30683 31155\nf 30682 31155 31154\nf 30683 30684 31156\nf 30683 31156 31155\nf 30684 30685 31157\nf 30684 31157 31156\nf 30685 30686 31158\nf 30685 31158 31157\nf 30686 30687 31159\nf 30686 31159 31158\nf 30687 30688 31160\nf 30687 31160 31159\nf 30688 30689 31161\nf 30688 31161 31160\nf 30689 30690 31162\nf 30689 31162 31161\nf 30690 30691 31163\nf 30690 31163 31162\nf 30691 30692 31164\nf 30691 31164 31163\nf 30692 30693 31165\nf 30692 31165 31164\nf 30693 30694 31166\nf 30693 31166 31165\nf 30694 30695 31167\nf 30694 31167 31166\nf 30695 30696 31168\nf 30695 31168 31167\nf 30696 30697 31169\nf 30696 31169 31168\nf 30697 30698 31170\nf 30697 31170 31169\nf 30698 30699 31171\nf 30698 31171 31170\nf 30699 30700 31172\nf 30699 31172 31171\nf 30700 30701 31173\nf 30700 31173 31172\nf 30701 30702 31174\nf 30701 31174 31173\nf 30702 30703 31175\nf 30702 31175 31174\nf 30703 30704 31176\nf 30703 31176 31175\nf 30704 30705 31177\nf 30704 31177 31176\nf 30705 30706 31178\nf 30705 31178 31177\nf 30706 30707 31179\nf 30706 31179 31178\nf 30707 30708 31180\nf 30707 31180 31179\nf 30708 30709 31181\nf 30708 31181 31180\nf 30709 30710 31182\nf 30709 31182 31181\nf 30710 30711 31183\nf 30710 31183 31182\nf 30711 30712 31184\nf 30711 31184 31183\nf 30712 30713 31185\nf 30712 31185 31184\nf 30713 30714 31186\nf 30713 31186 31185\nf 30714 30715 31187\nf 30714 31187 31186\nf 30715 30716 31188\nf 30715 31188 31187\nf 30716 30717 31189\nf 30716 31189 31188\nf 30717 30718 31190\nf 30717 31190 31189\nf 30718 30719 31191\nf 30718 31191 31190\nf 30719 30720 31192\nf 30719 31192 31191\nf 30720 30721 31193\nf 30720 31193 31192\nf 30721 30722 31194\nf 30721 31194 31193\nf 30722 30723 31195\nf 30722 31195 31194\nf 30723 30724 31196\nf 30723 31196 31195\nf 30724 30725 31197\nf 30724 31197 31196\nf 30725 30726 31198\nf 30725 31198 31197\nf 30726 30727 31199\nf 30726 31199 31198\nf 30727 30728 31200\nf 30727 31200 31199\nf 30728 30729 31201\nf 30728 31201 31200\nf 30729 30730 31202\nf 30729 31202 31201\nf 30730 30731 31203\nf 30730 31203 31202\nf 30731 30732 31204\nf 30731 31204 31203\nf 30732 30733 31205\nf 30732 31205 31204\nf 30733 30734 31206\nf 30733 31206 31205\nf 30734 30735 31207\nf 30734 31207 31206\nf 30735 30736 31208\nf 30735 31208 31207\nf 30736 30737 31209\nf 30736 31209 31208\nf 30737 30738 31210\nf 30737 31210 31209\nf 30738 30739 31211\nf 30738 31211 31210\nf 30739 30740 31212\nf 30739 31212 31211\nf 30740 30741 31213\nf 30740 31213 31212\nf 30741 30742 31214\nf 30741 31214 31213\nf 30742 30743 31215\nf 30742 31215 31214\nf 30743 30744 31216\nf 30743 31216 31215\nf 30744 30745 31217\nf 30744 31217 31216\nf 30745 30746 31218\nf 30745 31218 31217\nf 30746 30747 31219\nf 30746 31219 31218\nf 30747 30748 31220\nf 30747 31220 31219\nf 30748 30749 31221\nf 30748 31221 31220\nf 30749 30750 31222\nf 30749 31222 31221\nf 30750 30751 31223\nf 30750 31223 31222\nf 30751 30752 31224\nf 30751 31224 31223\nf 30752 30753 31225\nf 30752 31225 31224\nf 30753 30755 31226\nf 30753 31226 31225\nf 30754 31227 30755\nf 30755 31227 31228\nf 30755 31228 31226\nf 30756 30757 31229\nf 30757 30759 31232\nf 30757 31230 31229\nf 30757 31232 31230\nf 30758 31142 31231\nf 30758 31231 30760\nf 30759 30762 31234\nf 30759 31234 31232\nf 30760 30764 30761\nf 30760 31231 31233\nf 30760 31233 31235\nf 30760 31235 30764\nf 30761 30764 30763\nf 30762 30765 31237\nf 30762 31237 31234\nf 30763 30764 31236\nf 30763 31236 31239\nf 30763 31239 30767\nf 30764 31235 31236\nf 30765 30766 31237\nf 30766 30769 31241\nf 30766 31238 31237\nf 30766 31241 31238\nf 30767 31239 30771\nf 30768 30776 31248\nf 30768 31240 31242\nf 30768 31242 30770\nf 30768 31248 31240\nf 30769 30770 31241\nf 30770 31242 31241\nf 30771 31239 31243\nf 30771 31243 31244\nf 30771 31244 30772\nf 30772 31244 30778\nf 30773 30866 31339\nf 30773 31245 31246\nf 30773 31246 30774\nf 30773 31339 31245\nf 30774 31246 31247\nf 30774 31247 30775\nf 30775 31247 31249\nf 30775 31249 30777\nf 30776 30777 31248\nf 30777 31249 31248\nf 30778 31244 31251\nf 30778 31251 31252\nf 30778 31252 30779\nf 30779 31252 31253\nf 30779 31253 30780\nf 30780 31253 30868\nf 30781 30870 31343\nf 30781 31254 31255\nf 30781 31255 30782\nf 30781 31343 31254\nf 30782 31255 31256\nf 30782 31256 30783\nf 30783 31256 31257\nf 30783 31257 30784\nf 30784 31257 31258\nf 30784 31258 30785\nf 30785 31258 31259\nf 30785 31259 30786\nf 30786 31259 31260\nf 30786 31260 30787\nf 30787 31260 31261\nf 30787 31261 30788\nf 30788 31261 31262\nf 30788 31262 30789\nf 30789 31262 31263\nf 30789 31263 30790\nf 30790 31263 31264\nf 30790 31264 30791\nf 30791 31264 31265\nf 30791 31265 30792\nf 30792 31265 31266\nf 30792 31266 30793\nf 30793 31266 31267\nf 30793 31267 30794\nf 30794 31267 31268\nf 30794 31268 30795\nf 30795 31268 31269\nf 30795 31269 30796\nf 30796 31269 31270\nf 30796 31270 30797\nf 30797 31270 31271\nf 30797 31271 30798\nf 30798 31271 31272\nf 30798 31272 30799\nf 30799 31272 31273\nf 30799 31273 30800\nf 30800 31273 31274\nf 30800 31274 30801\nf 30801 31274 31275\nf 30801 31275 30802\nf 30802 31275 31276\nf 30802 31276 30803\nf 30803 31276 31277\nf 30803 31277 30804\nf 30804 31277 31278\nf 30804 31278 30805\nf 30805 31278 31279\nf 30805 31279 30806\nf 30806 31279 31280\nf 30806 31280 30807\nf 30807 31280 31281\nf 30807 31281 30808\nf 30808 31281 31282\nf 30808 31282 30809\nf 30809 31282 31283\nf 30809 31283 30810\nf 30810 31283 31284\nf 30810 31284 30811\nf 30811 31284 31285\nf 30811 31285 30812\nf 30812 31285 31286\nf 30812 31286 30813\nf 30813 31286 31287\nf 30813 31287 30814\nf 30814 31287 31288\nf 30814 31288 30815\nf 30815 31288 31289\nf 30815 31289 30816\nf 30816 31289 31290\nf 30816 31290 30817\nf 30817 31290 31291\nf 30817 31291 30818\nf 30818 31291 31292\nf 30818 31292 30819\nf 30819 31292 31293\nf 30819 31293 30820\nf 30820 31293 31294\nf 30820 31294 30821\nf 30821 31294 31295\nf 30821 31295 30822\nf 30822 31295 31296\nf 30822 31296 30823\nf 30823 31296 31297\nf 30823 31297 30824\nf 30824 31297 31298\nf 30824 31298 30825\nf 30825 31298 31299\nf 30825 31299 30826\nf 30826 31299 31300\nf 30826 31300 30827\nf 30827 31300 31301\nf 30827 31301 30828\nf 30828 31301 31302\nf 30828 31302 30829\nf 30829 31302 31303\nf 30829 31303 30830\nf 30830 31303 31304\nf 30830 31304 30831\nf 30831 31304 31305\nf 30831 31305 30832\nf 30832 31305 31306\nf 30832 31306 30833\nf 30833 31306 31307\nf 30833 31307 30834\nf 30834 31307 31308\nf 30834 31308 30835\nf 30835 31308 31309\nf 30835 31309 30836\nf 30836 31309 31310\nf 30836 31310 30837\nf 30837 31310 31311\nf 30837 31311 30838\nf 30838 31311 31312\nf 30838 31312 30839\nf 30839 31312 31313\nf 30839 31313 30840\nf 30840 31313 31314\nf 30840 31314 30841\nf 30841 31314 31315\nf 30841 31315 30842\nf 30842 31315 31316\nf 30842 31316 30843\nf 30843 31316 31317\nf 30843 31317 30844\nf 30844 31317 31318\nf 30844 31318 30845\nf 30845 31318 31319\nf 30845 31319 30846\nf 30846 31319 31320\nf 30846 31320 30847\nf 30847 31320 31321\nf 30847 31321 30848\nf 30848 31321 31322\nf 30848 31322 30849\nf 30849 31322 31323\nf 30849 31323 30850\nf 30850 31323 31324\nf 30850 31324 30851\nf 30851 31324 31325\nf 30851 31325 30852\nf 30852 31325 31326\nf 30852 31326 30853\nf 30853 31326 31327\nf 30853 31327 30854\nf 30854 31327 31328\nf 30854 31328 30855\nf 30855 31328 31329\nf 30855 31329 30856\nf 30856 31329 31330\nf 30856 31330 30857\nf 30857 31330 31331\nf 30857 31331 30858\nf 30858 31331 31332\nf 30858 31332 30859\nf 30859 31332 31333\nf 30859 31333 30860\nf 30860 31333 31334\nf 30860 31334 30861\nf 30861 31334 31335\nf 30861 31335 30862\nf 30862 31335 31336\nf 30862 31336 30863\nf 30863 31336 31337\nf 30863 31337 30864\nf 30864 31337 31338\nf 30864 31338 30865\nf 30865 31338 31340\nf 30865 31340 30867\nf 30866 30867 31339\nf 30867 31340 31339\nf 30868 31253 31341\nf 30868 31341 31342\nf 30868 31342 30869\nf 30869 31342 30872\nf 30870 30871 31343\nf 30871 30875 31348\nf 30871 31344 31343\nf 30871 31348 31344\nf 30872 31342 31345\nf 30872 31345 31346\nf 30872 31346 30873\nf 30873 31346 31347\nf 30873 31347 30874\nf 30874 31347 31349\nf 30874 31349 30876\nf 30875 30876 31348\nf 30876 31349 31348\nf 30877 30878 31350\nf 30877 31350 31354\nf 30877 31354 30881\nf 30878 30879 31351\nf 30878 31351 31350\nf 30879 30880 31352\nf 30879 31352 31351\nf 30880 30883 31353\nf 30880 31353 31352\nf 30881 31354 30882\nf 30882 31354 31355\nf 30882 31355 31357\nf 30882 31357 30885\nf 30883 30884 30887\nf 30883 30887 31359\nf 30883 31356 31353\nf 30883 31359 31356\nf 30884 30886 30887\nf 30885 31357 30888\nf 30886 30891 31363\nf 30886 31360 30887\nf 30886 31363 31360\nf 30887 31360 31359\nf 30888 30890 30889\nf 30888 31357 30890\nf 30889 30890 31362\nf 30889 31362 30892\nf 30890 31357 31358\nf 30890 31358 31362\nf 30891 30893 31365\nf 30891 31365 31363\nf 30892 31362 31364\nf 30892 31364 30895\nf 30893 30894 31366\nf 30893 31366 31365\nf 30894 30896 31366\nf 30895 31364 31367\nf 30895 31367 30897\nf 30896 30898 31370\nf 30896 31368 31366\nf 30896 31370 31368\nf 30897 31367 31369\nf 30897 31369 30899\nf 30898 30900 31372\nf 30898 31372 31370\nf 30899 31369 31371\nf 30899 31371 30901\nf 30900 30902 31374\nf 30900 31374 31372\nf 30901 31371 31373\nf 30901 31373 30903\nf 30902 30904 31376\nf 30902 31376 31374\nf 30903 31373 31375\nf 30903 31375 30905\nf 30904 30906 31378\nf 30904 31378 31376\nf 30905 31375 31377\nf 30905 31377 30907\nf 30906 30908 31380\nf 30906 31380 31378\nf 30907 31377 31379\nf 30907 31379 30910\nf 30908 30909 31380\nf 30909 30911 31383\nf 30909 31381 31380\nf 30909 31383 31381\nf 30910 31379 31382\nf 30910 31382 30912\nf 30911 30913 31385\nf 30911 31385 31383\nf 30912 31382 31384\nf 30912 31384 30914\nf 30913 30915 31387\nf 30913 31387 31385\nf 30914 31384 31386\nf 30914 31386 30916\nf 30915 30918 31390\nf 30915 31390 31387\nf 30916 31386 31388\nf 30916 31388 31389\nf 30916 31389 30917\nf 30917 31389 30919\nf 30918 30920 31392\nf 30918 31392 31390\nf 30919 31389 31391\nf 30919 31391 30921\nf 30920 30922 31394\nf 30920 31394 31392\nf 30921 31391 31393\nf 30921 31393 30924\nf 30922 30923 31394\nf 30923 30926 31398\nf 30923 31395 31394\nf 30923 31398 31395\nf 30924 31393 31396\nf 30924 31396 31397\nf 30924 31397 30925\nf 30925 31397 30927\nf 30926 30928 31401\nf 30926 31401 31398\nf 30927 31397 31399\nf 30927 31399 30929\nf 30928 30930 31404\nf 30928 31404 31401\nf 30929 31399 31402\nf 30929 31402 30932\nf 30930 30931 31407\nf 30930 31407 31404\nf 30931 30935 30937\nf 30931 30937 31407\nf 30932 30938 30933\nf 30932 31402 31405\nf 30932 31405 31409\nf 30932 31409 30938\nf 30933 30938 30939\nf 30933 30939 30934\nf 30934 30939 30940\nf 30934 30940 30936\nf 30935 30936 30937\nf 30936 30940 30937\nf 30937 30940 31408\nf 30937 31408 31407\nf 30938 30941 30942\nf 30938 30942 30939\nf 30938 31409 30941\nf 30939 30942 30943\nf 30939 30943 30940\nf 30940 30943 31414\nf 30940 31411 31408\nf 30940 31414 31411\nf 30941 30944 30945\nf 30941 30945 30942\nf 30941 31409 31412\nf 30941 31412 30944\nf 30942 30945 30946\nf 30942 30946 30943\nf 30943 30946 31417\nf 30943 31417 31414\nf 30944 30947 30945\nf 30944 31412 31415\nf 30944 31415 31416\nf 30944 31416 30947\nf 30945 30947 30948\nf 30945 30948 30946\nf 30946 30948 31420\nf 30946 31420 31417\nf 30947 30949 30948\nf 30947 31416 31418\nf 30947 31418 30949\nf 30948 30949 31424\nf 30948 31421 31420\nf 30948 31424 31421\nf 30949 31418 31422\nf 30949 31422 31425\nf 30949 31425 31424\nf 30950 30951 31437\nf 30950 30952 30951\nf 30950 31437 31438\nf 30950 31438 30955\nf 30951 30952 30953\nf 30951 30953 31433\nf 30951 31431 31437\nf 30951 31433 31431\nf 30952 30957 30953\nf 30953 30954 31435\nf 30953 30957 30959\nf 30953 30959 30954\nf 30953 31435 31433\nf 30954 30959 31442\nf 30954 31440 31435\nf 30954 31442 31440\nf 30955 30956 30962\nf 30955 30962 30960\nf 30955 31438 30956\nf 30956 31438 31441\nf 30956 31441 30962\nf 30957 30958 30959\nf 30958 30963 30959\nf 30959 30963 31442\nf 30960 30962 30961\nf 30961 30962 31443\nf 30961 31443 30964\nf 30962 31441 31443\nf 30963 30966 31449\nf 30963 31445 31442\nf 30963 31449 31445\nf 30964 31443 31446\nf 30964 31446 30965\nf 30965 31446 31447\nf 30965 31447 31450\nf 30965 31450 30967\nf 30966 30968 31452\nf 30966 31452 31449\nf 30967 31450 30969\nf 30968 30972 31454\nf 30968 31454 31452\nf 30969 30971 30970\nf 30969 31450 30971\nf 30970 30971 31453\nf 30970 31453 30973\nf 30971 31450 31451\nf 30971 31451 31453\nf 30972 30974 31456\nf 30972 31456 31454\nf 30973 31453 31455\nf 30973 31455 30975\nf 30974 30976 31458\nf 30974 31458 31456\nf 30975 31455 31457\nf 30975 31457 30977\nf 30976 30978 31460\nf 30976 31460 31458\nf 30977 31457 31459\nf 30977 31459 30979\nf 30978 30980 31462\nf 30978 31462 31460\nf 30979 31459 31461\nf 30979 31461 30981\nf 30980 30982 31465\nf 30980 31465 31462\nf 30981 31461 31463\nf 30981 31463 30984\nf 30982 30983 31465\nf 30983 30987 31468\nf 30983 31466 31465\nf 30983 31468 31466\nf 30984 30986 30985\nf 30984 31463 30986\nf 30985 30986 31467\nf 30985 31467 30988\nf 30986 31463 31464\nf 30986 31464 31467\nf 30987 30989 31470\nf 30987 31470 31468\nf 30988 31467 31469\nf 30988 31469 30990\nf 30989 30991 31472\nf 30989 31472 31470\nf 30990 31469 31471\nf 30990 31471 30992\nf 30991 30993 31474\nf 30991 31474 31472\nf 30992 31471 31473\nf 30992 31473 30994\nf 30993 30995 31476\nf 30993 31476 31474\nf 30994 31473 31475\nf 30994 31475 30996\nf 30995 30997 31478\nf 30995 31478 31476\nf 30996 31475 31477\nf 30996 31477 30998\nf 30997 30999 31480\nf 30997 31480 31478\nf 30998 31477 31479\nf 30998 31479 31000\nf 30999 31001 31482\nf 30999 31482 31480\nf 31000 31479 31481\nf 31000 31481 31003\nf 31001 31002 31482\nf 31002 31004 31485\nf 31002 31483 31482\nf 31002 31485 31483\nf 31003 31481 31484\nf 31003 31484 31005\nf 31004 31006 31487\nf 31004 31487 31485\nf 31005 31484 31486\nf 31005 31486 31007\nf 31006 31008 31489\nf 31006 31489 31487\nf 31007 31486 31488\nf 31007 31488 31009\nf 31008 31010 31491\nf 31008 31491 31489\nf 31009 31488 31490\nf 31009 31490 31012\nf 31010 31011 31491\nf 31011 31013 31494\nf 31011 31492 31491\nf 31011 31494 31492\nf 31012 31490 31493\nf 31012 31493 31015\nf 31013 31014 31494\nf 31014 31018 31498\nf 31014 31495 31494\nf 31014 31498 31495\nf 31015 31493 31496\nf 31015 31496 31497\nf 31015 31497 31016\nf 31016 31497 31017\nf 31017 31020 31502\nf 31017 31497 31020\nf 31017 31499 31019\nf 31017 31502 31499\nf 31018 31019 31498\nf 31019 31499 31498\nf 31020 31497 31501\nf 31020 31501 31503\nf 31020 31503 31502\nf 31021 31022 31505\nf 31021 31505 31518\nf 31021 31518 31034\nf 31022 31023 31506\nf 31022 31506 31505\nf 31023 31024 31507\nf 31023 31507 31506\nf 31024 31025 31508\nf 31024 31508 31507\nf 31025 31026 31509\nf 31025 31509 31508\nf 31026 31027 31510\nf 31026 31510 31509\nf 31027 31028 31511\nf 31027 31511 31510\nf 31028 31029 31512\nf 31028 31512 31511\nf 31029 31030 31513\nf 31029 31513 31512\nf 31030 31036 31514\nf 31030 31514 31513\nf 31031 31032 31515\nf 31031 31515 31526\nf 31031 31526 31041\nf 31032 31033 31516\nf 31032 31516 31515\nf 31033 31035 31517\nf 31033 31517 31516\nf 31034 31518 31035\nf 31035 31518 31519\nf 31035 31519 31517\nf 31036 31037 31522\nf 31036 31521 31514\nf 31036 31522 31521\nf 31037 31038 31522\nf 31038 31039 31523\nf 31038 31523 31522\nf 31039 31043 31524\nf 31039 31524 31523\nf 31040 31042 31525\nf 31040 31525 31530\nf 31040 31530 31045\nf 31041 31526 31042\nf 31042 31526 31527\nf 31042 31527 31525\nf 31043 31044 31529\nf 31043 31528 31524\nf 31043 31529 31528\nf 31044 31046 31529\nf 31045 31530 31048\nf 31046 31047 31532\nf 31046 31531 31529\nf 31046 31532 31531\nf 31047 31050 31532\nf 31048 31052 31049\nf 31048 31530 31533\nf 31048 31533 31536\nf 31048 31536 31052\nf 31049 31052 31051\nf 31050 31055 31540\nf 31050 31534 31532\nf 31050 31540 31534\nf 31051 31052 31537\nf 31051 31537 31053\nf 31052 31536 31537\nf 31053 31537 31538\nf 31053 31538 31057\nf 31054 31064 31549\nf 31054 31539 31541\nf 31054 31541 31056\nf 31054 31549 31539\nf 31055 31056 31540\nf 31056 31541 31540\nf 31057 31538 31543\nf 31057 31543 31544\nf 31057 31544 31058\nf 31058 31544 31545\nf 31058 31545 31059\nf 31059 31545 31546\nf 31059 31546 31060\nf 31060 31546 31061\nf 31061 31067 31066\nf 31061 31546 31067\nf 31062 31077 31562\nf 31062 31547 31548\nf 31062 31548 31063\nf 31062 31562 31547\nf 31063 31548 31550\nf 31063 31550 31065\nf 31064 31065 31549\nf 31065 31550 31549\nf 31066 31067 31552\nf 31066 31552 31068\nf 31067 31546 31551\nf 31067 31551 31552\nf 31068 31552 31553\nf 31068 31553 31554\nf 31068 31554 31069\nf 31069 31554 31555\nf 31069 31555 31070\nf 31070 31555 31556\nf 31070 31556 31071\nf 31071 31556 31557\nf 31071 31557 31072\nf 31072 31557 31558\nf 31072 31558 31073\nf 31073 31558 31559\nf 31073 31559 31074\nf 31074 31559 31560\nf 31074 31560 31075\nf 31075 31560 31561\nf 31075 31561 31076\nf 31076 31561 31563\nf 31076 31563 31078\nf 31077 31078 31562\nf 31078 31563 31562\nf 31079 31080 31567\nf 31079 31567 31575\nf 31079 31575 31086\nf 31080 31081 31568\nf 31080 31568 31567\nf 31081 31082 31569\nf 31081 31569 31568\nf 31082 31087 31570\nf 31082 31570 31569\nf 31083 31084 31571\nf 31083 31571 31578\nf 31083 31578 31089\nf 31084 31085 31572\nf 31084 31572 31571\nf 31085 31091 31574\nf 31085 31574 31572\nf 31086 31575 31093\nf 31087 31088 31577\nf 31087 31576 31570\nf 31087 31577 31576\nf 31088 31095 31577\nf 31089 31578 31090\nf 31090 31578 31579\nf 31090 31579 31585\nf 31090 31585 31096\nf 31091 31092 31581\nf 31091 31580 31574\nf 31091 31581 31580\nf 31092 31097 31581\nf 31093 31575 31582\nf 31093 31582 31094\nf 31094 31582 31583\nf 31094 31583 31587\nf 31094 31587 31098\nf 31095 31099 31589\nf 31095 31584 31577\nf 31095 31589 31584\nf 31096 31585 31101\nf 31097 31102 31592\nf 31097 31586 31581\nf 31097 31592 31586\nf 31098 31587 31103\nf 31099 31100 31590\nf 31099 31590 31589\nf 31100 31104 31590\nf 31101 31585 31591\nf 31101 31591 31105\nf 31102 31106 31597\nf 31102 31597 31592\nf 31103 31587 31593\nf 31103 31593 31107\nf 31104 31108 31599\nf 31104 31595 31590\nf 31104 31599 31595\nf 31105 31591 31596\nf 31105 31596 31109\nf 31106 31110 31601\nf 31106 31601 31597\nf 31107 31593 31598\nf 31107 31598 31111\nf 31108 31112 31603\nf 31108 31603 31599\nf 31109 31596 31600\nf 31109 31600 31113\nf 31110 31114 31605\nf 31110 31605 31601\nf 31111 31598 31602\nf 31111 31602 31115\nf 31112 31116 31607\nf 31112 31607 31603\nf 31113 31600 31604\nf 31113 31604 31118\nf 31114 31120 31612\nf 31114 31612 31605\nf 31115 31602 31606\nf 31115 31606 31121\nf 31116 31117 31608\nf 31116 31608 31607\nf 31117 31122 31608\nf 31118 31604 31610\nf 31118 31610 31119\nf 31119 31610 31611\nf 31119 31611 31615\nf 31119 31615 31123\nf 31120 31125 31617\nf 31120 31617 31612\nf 31121 31606 31613\nf 31121 31613 31126\nf 31122 31127 31619\nf 31122 31614 31608\nf 31122 31619 31614\nf 31123 31615 31616\nf 31123 31616 31124\nf 31124 31616 31128\nf 31125 31129 31621\nf 31125 31621 31617\nf 31126 31613 31618\nf 31126 31618 31131\nf 31127 31132 31624\nf 31127 31624 31619\nf 31128 31616 31620\nf 31128 31620 31133\nf 31129 31130 31622\nf 31129 31622 31621\nf 31130 31134 31622\nf 31131 31618 31623\nf 31131 31623 31139\nf 31132 31141 31633\nf 31132 31633 31624\nf 31133 31620 31625\nf 31133 31625 31142\nf 31134 31135 31627\nf 31134 31626 31622\nf 31134 31627 31626\nf 31135 31136 31627\nf 31136 31137 31628\nf 31136 31628 31627\nf 31137 31143 31629\nf 31137 31629 31628\nf 31138 31140 31630\nf 31138 31630 31719\nf 31138 31719 31227\nf 31139 31623 31631\nf 31139 31631 31140\nf 31140 31631 31632\nf 31140 31632 31630\nf 31141 31229 31721\nf 31141 31721 31633\nf 31142 31625 31634\nf 31142 31634 31231\nf 31143 31144 31636\nf 31143 31635 31629\nf 31143 31636 31635\nf 31144 31145 31636\nf 31145 31146 31637\nf 31145 31637 31636\nf 31146 31147 31638\nf 31146 31638 31637\nf 31147 31148 31639\nf 31147 31639 31638\nf 31148 31149 31640\nf 31148 31640 31639\nf 31149 31150 31641\nf 31149 31641 31640\nf 31150 31151 31642\nf 31150 31642 31641\nf 31151 31152 31643\nf 31151 31643 31642\nf 31152 31153 31644\nf 31152 31644 31643\nf 31153 31154 31645\nf 31153 31645 31644\nf 31154 31155 31646\nf 31154 31646 31645\nf 31155 31156 31647\nf 31155 31647 31646\nf 31156 31157 31648\nf 31156 31648 31647\nf 31157 31158 31649\nf 31157 31649 31648\nf 31158 31159 31650\nf 31158 31650 31649\nf 31159 31160 31651\nf 31159 31651 31650\nf 31160 31161 31652\nf 31160 31652 31651\nf 31161 31162 31653\nf 31161 31653 31652\nf 31162 31163 31654\nf 31162 31654 31653\nf 31163 31164 31655\nf 31163 31655 31654\nf 31164 31165 31656\nf 31164 31656 31655\nf 31165 31166 31657\nf 31165 31657 31656\nf 31166 31167 31658\nf 31166 31658 31657\nf 31167 31168 31659\nf 31167 31659 31658\nf 31168 31169 31660\nf 31168 31660 31659\nf 31169 31170 31661\nf 31169 31661 31660\nf 31170 31171 31662\nf 31170 31662 31661\nf 31171 31172 31663\nf 31171 31663 31662\nf 31172 31173 31664\nf 31172 31664 31663\nf 31173 31174 31665\nf 31173 31665 31664\nf 31174 31175 31666\nf 31174 31666 31665\nf 31175 31176 31667\nf 31175 31667 31666\nf 31176 31177 31668\nf 31176 31668 31667\nf 31177 31178 31669\nf 31177 31669 31668\nf 31178 31179 31670\nf 31178 31670 31669\nf 31179 31180 31671\nf 31179 31671 31670\nf 31180 31181 31672\nf 31180 31672 31671\nf 31181 31182 31673\nf 31181 31673 31672\nf 31182 31183 31674\nf 31182 31674 31673\nf 31183 31184 31675\nf 31183 31675 31674\nf 31184 31185 31676\nf 31184 31676 31675\nf 31185 31186 31677\nf 31185 31677 31676\nf 31186 31187 31678\nf 31186 31678 31677\nf 31187 31188 31679\nf 31187 31679 31678\nf 31188 31189 31680\nf 31188 31680 31679\nf 31189 31190 31681\nf 31189 31681 31680\nf 31190 31191 31682\nf 31190 31682 31681\nf 31191 31192 31683\nf 31191 31683 31682\nf 31192 31193 31684\nf 31192 31684 31683\nf 31193 31194 31685\nf 31193 31685 31684\nf 31194 31195 31686\nf 31194 31686 31685\nf 31195 31196 31687\nf 31195 31687 31686\nf 31196 31197 31688\nf 31196 31688 31687\nf 31197 31198 31689\nf 31197 31689 31688\nf 31198 31199 31690\nf 31198 31690 31689\nf 31199 31200 31691\nf 31199 31691 31690\nf 31200 31201 31692\nf 31200 31692 31691\nf 31201 31202 31693\nf 31201 31693 31692\nf 31202 31203 31694\nf 31202 31694 31693\nf 31203 31204 31695\nf 31203 31695 31694\nf 31204 31205 31696\nf 31204 31696 31695\nf 31205 31206 31697\nf 31205 31697 31696\nf 31206 31207 31698\nf 31206 31698 31697\nf 31207 31208 31699\nf 31207 31699 31698\nf 31208 31209 31700\nf 31208 31700 31699\nf 31209 31210 31701\nf 31209 31701 31700\nf 31210 31211 31702\nf 31210 31702 31701\nf 31211 31212 31703\nf 31211 31703 31702\nf 31212 31213 31704\nf 31212 31704 31703\nf 31213 31214 31705\nf 31213 31705 31704\nf 31214 31215 31706\nf 31214 31706 31705\nf 31215 31216 31707\nf 31215 31707 31706\nf 31216 31217 31708\nf 31216 31708 31707\nf 31217 31218 31709\nf 31217 31709 31708\nf 31218 31219 31710\nf 31218 31710 31709\nf 31219 31220 31711\nf 31219 31711 31710\nf 31220 31221 31712\nf 31220 31712 31711\nf 31221 31222 31713\nf 31221 31713 31712\nf 31222 31223 31714\nf 31222 31714 31713\nf 31223 31224 31715\nf 31223 31715 31714\nf 31224 31225 31716\nf 31224 31716 31715\nf 31225 31226 31717\nf 31225 31717 31716\nf 31226 31228 31718\nf 31226 31718 31717\nf 31227 31719 31228\nf 31228 31719 31720\nf 31228 31720 31718\nf 31229 31230 31721\nf 31230 31232 31724\nf 31230 31722 31721\nf 31230 31724 31722\nf 31231 31634 31723\nf 31231 31723 31233\nf 31232 31234 31726\nf 31232 31726 31724\nf 31233 31723 31725\nf 31233 31725 31235\nf 31234 31237 31729\nf 31234 31729 31726\nf 31235 31725 31727\nf 31235 31727 31728\nf 31235 31728 31236\nf 31236 31728 31239\nf 31237 31238 31729\nf 31238 31241 31732\nf 31238 31730 31729\nf 31238 31732 31730\nf 31239 31728 31731\nf 31239 31731 31243\nf 31240 31248 31250\nf 31240 31250 31740\nf 31240 31733 31242\nf 31240 31740 31733\nf 31241 31242 31732\nf 31242 31733 31732\nf 31243 31731 31734\nf 31243 31734 31735\nf 31243 31735 31244\nf 31244 31735 31251\nf 31245 31339 31830\nf 31245 31736 31737\nf 31245 31737 31246\nf 31245 31830 31736\nf 31246 31737 31738\nf 31246 31738 31247\nf 31247 31738 31739\nf 31247 31739 31249\nf 31248 31249 31250\nf 31249 31739 31741\nf 31249 31741 31250\nf 31250 31741 31740\nf 31251 31735 31742\nf 31251 31742 31743\nf 31251 31743 31252\nf 31252 31743 31744\nf 31252 31744 31253\nf 31253 31744 31341\nf 31254 31343 31834\nf 31254 31745 31746\nf 31254 31746 31255\nf 31254 31834 31745\nf 31255 31746 31747\nf 31255 31747 31256\nf 31256 31747 31748\nf 31256 31748 31257\nf 31257 31748 31749\nf 31257 31749 31258\nf 31258 31749 31750\nf 31258 31750 31259\nf 31259 31750 31751\nf 31259 31751 31260\nf 31260 31751 31752\nf 31260 31752 31261\nf 31261 31752 31753\nf 31261 31753 31262\nf 31262 31753 31754\nf 31262 31754 31263\nf 31263 31754 31755\nf 31263 31755 31264\nf 31264 31755 31756\nf 31264 31756 31265\nf 31265 31756 31757\nf 31265 31757 31266\nf 31266 31757 31758\nf 31266 31758 31267\nf 31267 31758 31759\nf 31267 31759 31268\nf 31268 31759 31760\nf 31268 31760 31269\nf 31269 31760 31761\nf 31269 31761 31270\nf 31270 31761 31762\nf 31270 31762 31271\nf 31271 31762 31763\nf 31271 31763 31272\nf 31272 31763 31764\nf 31272 31764 31273\nf 31273 31764 31765\nf 31273 31765 31274\nf 31274 31765 31766\nf 31274 31766 31275\nf 31275 31766 31767\nf 31275 31767 31276\nf 31276 31767 31768\nf 31276 31768 31277\nf 31277 31768 31769\nf 31277 31769 31278\nf 31278 31769 31770\nf 31278 31770 31279\nf 31279 31770 31771\nf 31279 31771 31280\nf 31280 31771 31772\nf 31280 31772 31281\nf 31281 31772 31773\nf 31281 31773 31282\nf 31282 31773 31774\nf 31282 31774 31283\nf 31283 31774 31775\nf 31283 31775 31284\nf 31284 31775 31776\nf 31284 31776 31285\nf 31285 31776 31777\nf 31285 31777 31286\nf 31286 31777 31778\nf 31286 31778 31287\nf 31287 31778 31779\nf 31287 31779 31288\nf 31288 31779 31780\nf 31288 31780 31289\nf 31289 31780 31781\nf 31289 31781 31290\nf 31290 31781 31782\nf 31290 31782 31291\nf 31291 31782 31783\nf 31291 31783 31292\nf 31292 31783 31784\nf 31292 31784 31293\nf 31293 31784 31785\nf 31293 31785 31294\nf 31294 31785 31786\nf 31294 31786 31295\nf 31295 31786 31787\nf 31295 31787 31296\nf 31296 31787 31788\nf 31296 31788 31297\nf 31297 31788 31789\nf 31297 31789 31298\nf 31298 31789 31790\nf 31298 31790 31299\nf 31299 31790 31791\nf 31299 31791 31300\nf 31300 31791 31792\nf 31300 31792 31301\nf 31301 31792 31793\nf 31301 31793 31302\nf 31302 31793 31794\nf 31302 31794 31303\nf 31303 31794 31795\nf 31303 31795 31304\nf 31304 31795 31796\nf 31304 31796 31305\nf 31305 31796 31797\nf 31305 31797 31306\nf 31306 31797 31798\nf 31306 31798 31307\nf 31307 31798 31799\nf 31307 31799 31308\nf 31308 31799 31800\nf 31308 31800 31309\nf 31309 31800 31801\nf 31309 31801 31310\nf 31310 31801 31802\nf 31310 31802 31311\nf 31311 31802 31803\nf 31311 31803 31312\nf 31312 31803 31804\nf 31312 31804 31313\nf 31313 31804 31805\nf 31313 31805 31314\nf 31314 31805 31806\nf 31314 31806 31315\nf 31315 31806 31807\nf 31315 31807 31316\nf 31316 31807 31808\nf 31316 31808 31317\nf 31317 31808 31809\nf 31317 31809 31318\nf 31318 31809 31810\nf 31318 31810 31319\nf 31319 31810 31811\nf 31319 31811 31320\nf 31320 31811 31812\nf 31320 31812 31321\nf 31321 31812 31813\nf 31321 31813 31322\nf 31322 31813 31814\nf 31322 31814 31323\nf 31323 31814 31815\nf 31323 31815 31324\nf 31324 31815 31816\nf 31324 31816 31325\nf 31325 31816 31817\nf 31325 31817 31326\nf 31326 31817 31818\nf 31326 31818 31327\nf 31327 31818 31819\nf 31327 31819 31328\nf 31328 31819 31820\nf 31328 31820 31329\nf 31329 31820 31821\nf 31329 31821 31330\nf 31330 31821 31822\nf 31330 31822 31331\nf 31331 31822 31823\nf 31331 31823 31332\nf 31332 31823 31824\nf 31332 31824 31333\nf 31333 31824 31825\nf 31333 31825 31334\nf 31334 31825 31826\nf 31334 31826 31335\nf 31335 31826 31827\nf 31335 31827 31336\nf 31336 31827 31828\nf 31336 31828 31337\nf 31337 31828 31829\nf 31337 31829 31338\nf 31338 31829 31831\nf 31338 31831 31340\nf 31339 31340 31830\nf 31340 31831 31830\nf 31341 31744 31832\nf 31341 31832 31833\nf 31341 31833 31342\nf 31342 31833 31345\nf 31343 31344 31834\nf 31344 31348 31839\nf 31344 31835 31834\nf 31344 31839 31835\nf 31345 31833 31836\nf 31345 31836 31837\nf 31345 31837 31346\nf 31346 31837 31838\nf 31346 31838 31347\nf 31347 31838 31840\nf 31347 31840 31349\nf 31348 31349 31839\nf 31349 31840 31839\nf 31350 31351 31841\nf 31350 31841 31845\nf 31350 31845 31354\nf 31351 31352 31842\nf 31351 31842 31841\nf 31352 31353 31843\nf 31352 31843 31842\nf 31353 31356 31844\nf 31353 31844 31843\nf 31354 31845 31355\nf 31355 31845 31846\nf 31355 31846 31849\nf 31355 31849 31357\nf 31356 31359 31847\nf 31356 31847 31844\nf 31357 31849 31358\nf 31358 31849 31850\nf 31358 31850 31852\nf 31358 31852 31362\nf 31359 31360 31361\nf 31359 31361 31848\nf 31359 31848 31847\nf 31360 31363 31361\nf 31361 31363 31851\nf 31361 31851 31848\nf 31362 31852 31364\nf 31363 31365 31855\nf 31363 31853 31851\nf 31363 31855 31853\nf 31364 31852 31854\nf 31364 31854 31367\nf 31365 31366 31856\nf 31365 31856 31855\nf 31366 31368 31856\nf 31367 31854 31857\nf 31367 31857 31369\nf 31368 31370 31860\nf 31368 31858 31856\nf 31368 31860 31858\nf 31369 31857 31859\nf 31369 31859 31371\nf 31370 31372 31862\nf 31370 31862 31860\nf 31371 31859 31861\nf 31371 31861 31373\nf 31372 31374 31864\nf 31372 31864 31862\nf 31373 31861 31863\nf 31373 31863 31375\nf 31374 31376 31866\nf 31374 31866 31864\nf 31375 31863 31865\nf 31375 31865 31377\nf 31376 31378 31868\nf 31376 31868 31866\nf 31377 31865 31867\nf 31377 31867 31379\nf 31378 31380 31870\nf 31378 31870 31868\nf 31379 31867 31869\nf 31379 31869 31382\nf 31380 31381 31870\nf 31381 31383 31873\nf 31381 31871 31870\nf 31381 31873 31871\nf 31382 31869 31872\nf 31382 31872 31384\nf 31383 31385 31875\nf 31383 31875 31873\nf 31384 31872 31874\nf 31384 31874 31386\nf 31385 31387 31877\nf 31385 31877 31875\nf 31386 31874 31876\nf 31386 31876 31388\nf 31387 31390 31880\nf 31387 31880 31877\nf 31388 31876 31878\nf 31388 31878 31879\nf 31388 31879 31389\nf 31389 31879 31391\nf 31390 31392 31882\nf 31390 31882 31880\nf 31391 31879 31881\nf 31391 31881 31393\nf 31392 31394 31884\nf 31392 31884 31882\nf 31393 31881 31883\nf 31393 31883 31396\nf 31394 31395 31884\nf 31395 31398 31887\nf 31395 31885 31884\nf 31395 31887 31885\nf 31396 31400 31397\nf 31396 31883 31886\nf 31396 31886 31888\nf 31396 31888 31400\nf 31397 31400 31399\nf 31398 31401 31889\nf 31398 31889 31887\nf 31399 31400 31403\nf 31399 31403 31402\nf 31400 31888 31403\nf 31401 31404 31891\nf 31401 31891 31889\nf 31402 31403 31406\nf 31402 31406 31405\nf 31403 31888 31890\nf 31403 31890 31406\nf 31404 31407 31893\nf 31404 31893 31891\nf 31405 31406 31410\nf 31405 31410 31409\nf 31406 31890 31892\nf 31406 31892 31410\nf 31407 31408 31893\nf 31408 31411 31896\nf 31408 31894 31893\nf 31408 31896 31894\nf 31409 31410 31413\nf 31409 31413 31412\nf 31410 31892 31895\nf 31410 31895 31413\nf 31411 31414 31900\nf 31411 31900 31896\nf 31412 31413 31899\nf 31412 31899 31901\nf 31412 31901 31415\nf 31413 31895 31898\nf 31413 31898 31899\nf 31414 31417 31903\nf 31414 31903 31900\nf 31415 31419 31416\nf 31415 31901 31904\nf 31415 31904 31419\nf 31416 31419 31418\nf 31417 31420 31906\nf 31417 31906 31903\nf 31418 31419 31423\nf 31418 31423 31422\nf 31419 31904 31423\nf 31420 31421 31909\nf 31420 31909 31906\nf 31421 31424 31426\nf 31421 31426 31909\nf 31422 31423 31428\nf 31422 31428 31425\nf 31423 31427 31428\nf 31423 31904 31907\nf 31423 31907 31427\nf 31424 31425 31426\nf 31425 31428 31426\nf 31426 31428 31429\nf 31426 31429 31912\nf 31426 31912 31909\nf 31427 31430 31428\nf 31427 31907 31910\nf 31427 31910 31911\nf 31427 31911 31430\nf 31428 31430 31429\nf 31429 31430 31916\nf 31429 31913 31912\nf 31429 31916 31913\nf 31430 31911 31914\nf 31430 31914 31917\nf 31430 31917 31916\nf 31431 31432 31928\nf 31431 31433 31432\nf 31431 31928 31929\nf 31431 31929 31437\nf 31432 31433 31434\nf 31432 31434 31924\nf 31432 31922 31928\nf 31432 31924 31922\nf 31433 31435 31434\nf 31434 31435 31436\nf 31434 31436 31926\nf 31434 31926 31924\nf 31435 31440 31436\nf 31436 31440 31931\nf 31436 31931 31926\nf 31437 31439 31438\nf 31437 31929 31439\nf 31438 31439 31932\nf 31438 31932 31441\nf 31439 31929 31932\nf 31440 31442 31938\nf 31440 31934 31931\nf 31440 31938 31934\nf 31441 31932 31935\nf 31441 31935 31443\nf 31442 31445 31940\nf 31442 31940 31938\nf 31443 31444 31448\nf 31443 31448 31446\nf 31443 31935 31444\nf 31444 31935 31936\nf 31444 31936 31939\nf 31444 31939 31448\nf 31445 31449 31942\nf 31445 31942 31940\nf 31446 31448 31447\nf 31447 31448 31941\nf 31447 31941 31450\nf 31448 31939 31941\nf 31449 31452 31946\nf 31449 31946 31942\nf 31450 31941 31943\nf 31450 31943 31451\nf 31451 31943 31944\nf 31451 31944 31947\nf 31451 31947 31453\nf 31452 31454 31948\nf 31452 31948 31946\nf 31453 31947 31455\nf 31454 31456 31950\nf 31454 31950 31948\nf 31455 31947 31949\nf 31455 31949 31457\nf 31456 31458 31952\nf 31456 31952 31950\nf 31457 31949 31951\nf 31457 31951 31459\nf 31458 31460 31954\nf 31458 31954 31952\nf 31459 31951 31953\nf 31459 31953 31461\nf 31460 31462 31956\nf 31460 31956 31954\nf 31461 31953 31955\nf 31461 31955 31463\nf 31462 31465 31959\nf 31462 31959 31956\nf 31463 31955 31957\nf 31463 31957 31464\nf 31464 31957 31958\nf 31464 31958 31962\nf 31464 31962 31467\nf 31465 31466 31959\nf 31466 31468 31963\nf 31466 31960 31959\nf 31466 31963 31960\nf 31467 31962 31469\nf 31468 31470 31965\nf 31468 31965 31963\nf 31469 31962 31964\nf 31469 31964 31471\nf 31470 31472 31967\nf 31470 31967 31965\nf 31471 31964 31966\nf 31471 31966 31473\nf 31472 31474 31969\nf 31472 31969 31967\nf 31473 31966 31968\nf 31473 31968 31475\nf 31474 31476 31971\nf 31474 31971 31969\nf 31475 31968 31970\nf 31475 31970 31477\nf 31476 31478 31973\nf 31476 31973 31971\nf 31477 31970 31972\nf 31477 31972 31479\nf 31478 31480 31975\nf 31478 31975 31973\nf 31479 31972 31974\nf 31479 31974 31481\nf 31480 31482 31977\nf 31480 31977 31975\nf 31481 31974 31976\nf 31481 31976 31484\nf 31482 31483 31977\nf 31483 31485 31980\nf 31483 31978 31977\nf 31483 31980 31978\nf 31484 31976 31979\nf 31484 31979 31486\nf 31485 31487 31982\nf 31485 31982 31980\nf 31486 31979 31981\nf 31486 31981 31488\nf 31487 31489 31984\nf 31487 31984 31982\nf 31488 31981 31983\nf 31488 31983 31490\nf 31489 31491 31986\nf 31489 31986 31984\nf 31490 31983 31985\nf 31490 31985 31493\nf 31491 31492 31986\nf 31492 31494 31989\nf 31492 31987 31986\nf 31492 31989 31987\nf 31493 31985 31988\nf 31493 31988 31496\nf 31494 31495 31993\nf 31494 31993 31989\nf 31495 31498 31500\nf 31495 31500 31993\nf 31496 31988 31991\nf 31496 31991 31992\nf 31496 31992 31497\nf 31497 31992 31501\nf 31498 31499 31500\nf 31499 31502 31504\nf 31499 31504 31500\nf 31500 31504 31994\nf 31500 31994 31993\nf 31501 31992 31995\nf 31501 31995 31997\nf 31501 31997 31503\nf 31502 31503 31504\nf 31503 31997 31999\nf 31503 31999 31504\nf 31504 31998 31994\nf 31504 31999 31998\nf 31505 31506 32001\nf 31505 31520 31518\nf 31505 32000 31520\nf 31505 32001 32000\nf 31506 31507 32002\nf 31506 32002 32001\nf 31507 31508 32003\nf 31507 32003 32002\nf 31508 31509 32004\nf 31508 32004 32003\nf 31509 31510 32005\nf 31509 32005 32004\nf 31510 31511 32006\nf 31510 32006 32005\nf 31511 31512 32007\nf 31511 32007 32006\nf 31512 31513 32008\nf 31512 32008 32007\nf 31513 31514 32009\nf 31513 32009 32008\nf 31514 31521 32010\nf 31514 32010 32009\nf 31515 31516 32011\nf 31515 32011 32020\nf 31515 32020 31526\nf 31516 31517 32012\nf 31516 32012 32011\nf 31517 31519 32014\nf 31517 32014 32012\nf 31518 31520 31519\nf 31519 31520 32013\nf 31519 32013 32014\nf 31520 32000 32013\nf 31521 31522 32016\nf 31521 32015 32010\nf 31521 32016 32015\nf 31522 31523 32016\nf 31523 31524 32017\nf 31523 32017 32016\nf 31524 31528 32018\nf 31524 32018 32017\nf 31525 31527 32019\nf 31525 32019 32025\nf 31525 32025 31530\nf 31526 32020 31527\nf 31527 32020 32021\nf 31527 32021 32019\nf 31528 31529 32024\nf 31528 32022 32018\nf 31528 32024 32022\nf 31529 31531 32024\nf 31530 32025 31533\nf 31531 31532 31535\nf 31531 31535 32028\nf 31531 32026 32024\nf 31531 32028 32026\nf 31532 31534 31535\nf 31533 32025 32027\nf 31533 32027 31536\nf 31534 31540 31542\nf 31534 31542 31535\nf 31535 31542 32028\nf 31536 32027 32029\nf 31536 32029 32030\nf 31536 32030 31537\nf 31537 32030 32031\nf 31537 32031 31538\nf 31538 32031 31543\nf 31539 31549 32040\nf 31539 32033 31541\nf 31539 32040 32033\nf 31540 31541 31542\nf 31541 32032 31542\nf 31541 32033 32032\nf 31542 32032 32028\nf 31543 32031 32034\nf 31543 32034 32035\nf 31543 32035 31544\nf 31544 32035 32036\nf 31544 32036 31545\nf 31545 32036 32037\nf 31545 32037 31546\nf 31546 32037 31551\nf 31547 31562 32052\nf 31547 32038 32039\nf 31547 32039 31548\nf 31547 32052 32038\nf 31548 32039 32041\nf 31548 32041 31550\nf 31549 31550 32040\nf 31550 32041 32040\nf 31551 32037 32043\nf 31551 32043 32045\nf 31551 32045 31552\nf 31552 32045 32046\nf 31552 32046 31553\nf 31553 32046 32047\nf 31553 32047 31554\nf 31554 32047 32048\nf 31554 32048 31555\nf 31555 32048 31556\nf 31556 31564 31565\nf 31556 31565 31557\nf 31556 32048 31564\nf 31557 31565 31566\nf 31557 31566 31558\nf 31558 31566 32058\nf 31558 32049 31559\nf 31558 32058 32049\nf 31559 32049 32050\nf 31559 32050 31560\nf 31560 32050 32051\nf 31560 32051 31561\nf 31561 32051 32053\nf 31561 32053 31563\nf 31562 31563 32052\nf 31563 32053 32052\nf 31564 32048 32054\nf 31564 32054 32056\nf 31564 32056 31565\nf 31565 32056 32057\nf 31565 32057 31566\nf 31566 32057 32059\nf 31566 32059 32058\nf 31567 31568 32062\nf 31567 32062 32070\nf 31567 32070 31575\nf 31568 31569 32063\nf 31568 32063 32062\nf 31569 31570 32064\nf 31569 32064 32063\nf 31570 31576 32065\nf 31570 32065 32064\nf 31571 31572 32067\nf 31571 32067 32073\nf 31571 32073 31578\nf 31572 31573 32066\nf 31572 31574 32069\nf 31572 32066 32067\nf 31572 32069 31573\nf 31573 32061 32066\nf 31573 32068 32061\nf 31573 32069 32068\nf 31574 31580 32069\nf 31575 32070 31582\nf 31576 31577 32072\nf 31576 32071 32065\nf 31576 32072 32071\nf 31577 31584 32072\nf 31578 32073 31579\nf 31579 32073 32074\nf 31579 32074 32079\nf 31579 32079 31585\nf 31580 31581 32076\nf 31580 32075 32069\nf 31580 32076 32075\nf 31581 31586 32076\nf 31582 32070 32077\nf 31582 32077 32081\nf 31582 32081 31583\nf 31583 31588 31587\nf 31583 32081 31588\nf 31584 31589 32082\nf 31584 32078 32072\nf 31584 32082 32078\nf 31585 32079 31591\nf 31586 31592 32086\nf 31586 32080 32076\nf 31586 32086 32080\nf 31587 31588 31593\nf 31588 31594 31593\nf 31588 32081 32087\nf 31588 32087 31594\nf 31589 31590 32083\nf 31589 32083 32082\nf 31590 31595 32083\nf 31591 32079 32085\nf 31591 32085 31596\nf 31592 31597 32091\nf 31592 32091 32086\nf 31593 31594 32092\nf 31593 32092 31598\nf 31594 32087 32088\nf 31594 32088 32092\nf 31595 31599 32093\nf 31595 32089 32083\nf 31595 32093 32089\nf 31596 32085 32090\nf 31596 32090 31600\nf 31597 31601 32095\nf 31597 32095 32091\nf 31598 32092 31602\nf 31599 31603 32097\nf 31599 32097 32093\nf 31600 32090 32094\nf 31600 32094 31604\nf 31601 31605 32100\nf 31601 32100 32095\nf 31602 32092 32096\nf 31602 32096 31606\nf 31603 31607 32097\nf 31604 32094 32099\nf 31604 32099 31610\nf 31605 31612 32105\nf 31605 32105 32100\nf 31606 32096 32101\nf 31606 32101 31613\nf 31607 31608 31609\nf 31607 31609 32098\nf 31607 32098 32097\nf 31608 31614 31609\nf 31609 31614 32102\nf 31609 32102 32098\nf 31610 32099 32103\nf 31610 32103 31611\nf 31611 32103 32104\nf 31611 32104 32108\nf 31611 32108 31615\nf 31612 31617 32110\nf 31612 32110 32105\nf 31613 32101 32106\nf 31613 32106 31618\nf 31614 31619 32112\nf 31614 32107 32102\nf 31614 32112 32107\nf 31615 32108 32109\nf 31615 32109 31616\nf 31616 32109 31620\nf 31617 31621 32115\nf 31617 32115 32110\nf 31618 32106 32111\nf 31618 32111 31623\nf 31619 31624 32118\nf 31619 32118 32112\nf 31620 32109 32114\nf 31620 32114 31625\nf 31621 31622 32116\nf 31621 32116 32115\nf 31622 31626 32116\nf 31623 32111 32117\nf 31623 32117 31631\nf 31624 31633 32128\nf 31624 32128 32118\nf 31625 32114 32120\nf 31625 32120 31634\nf 31626 31627 32122\nf 31626 32121 32116\nf 31626 32122 32121\nf 31627 31628 32122\nf 31628 31629 32123\nf 31628 32123 32122\nf 31629 31635 32124\nf 31629 32124 32123\nf 31630 31632 32125\nf 31630 32125 32215\nf 31630 32215 31719\nf 31631 32117 32126\nf 31631 32126 31632\nf 31632 32126 32127\nf 31632 32127 32125\nf 31633 31721 32218\nf 31633 32218 32128\nf 31634 32120 32130\nf 31634 32130 31723\nf 31635 31636 32132\nf 31635 32131 32124\nf 31635 32132 32131\nf 31636 31637 32132\nf 31637 31638 32133\nf 31637 32133 32132\nf 31638 31639 32134\nf 31638 32134 32133\nf 31639 31640 32135\nf 31639 32135 32134\nf 31640 31641 32136\nf 31640 32136 32135\nf 31641 31642 32137\nf 31641 32137 32136\nf 31642 31643 32138\nf 31642 32138 32137\nf 31643 31644 32139\nf 31643 32139 32138\nf 31644 31645 32140\nf 31644 32140 32139\nf 31645 31646 32141\nf 31645 32141 32140\nf 31646 31647 32142\nf 31646 32142 32141\nf 31647 31648 32143\nf 31647 32143 32142\nf 31648 31649 32144\nf 31648 32144 32143\nf 31649 31650 32145\nf 31649 32145 32144\nf 31650 31651 32146\nf 31650 32146 32145\nf 31651 31652 32147\nf 31651 32147 32146\nf 31652 31653 32148\nf 31652 32148 32147\nf 31653 31654 32149\nf 31653 32149 32148\nf 31654 31655 32150\nf 31654 32150 32149\nf 31655 31656 32151\nf 31655 32151 32150\nf 31656 31657 32152\nf 31656 32152 32151\nf 31657 31658 32153\nf 31657 32153 32152\nf 31658 31659 32154\nf 31658 32154 32153\nf 31659 31660 32155\nf 31659 32155 32154\nf 31660 31661 32156\nf 31660 32156 32155\nf 31661 31662 32157\nf 31661 32157 32156\nf 31662 31663 32158\nf 31662 32158 32157\nf 31663 31664 32159\nf 31663 32159 32158\nf 31664 31665 32160\nf 31664 32160 32159\nf 31665 31666 32161\nf 31665 32161 32160\nf 31666 31667 32162\nf 31666 32162 32161\nf 31667 31668 32163\nf 31667 32163 32162\nf 31668 31669 32164\nf 31668 32164 32163\nf 31669 31670 32165\nf 31669 32165 32164\nf 31670 31671 32166\nf 31670 32166 32165\nf 31671 31672 32167\nf 31671 32167 32166\nf 31672 31673 32168\nf 31672 32168 32167\nf 31673 31674 32169\nf 31673 32169 32168\nf 31674 31675 32170\nf 31674 32170 32169\nf 31675 31676 32171\nf 31675 32171 32170\nf 31676 31677 32172\nf 31676 32172 32171\nf 31677 31678 32173\nf 31677 32173 32172\nf 31678 31679 32174\nf 31678 32174 32173\nf 31679 31680 32175\nf 31679 32175 32174\nf 31680 31681 32176\nf 31680 32176 32175\nf 31681 31682 32177\nf 31681 32177 32176\nf 31682 31683 32178\nf 31682 32178 32177\nf 31683 31684 32179\nf 31683 32179 32178\nf 31684 31685 32180\nf 31684 32180 32179\nf 31685 31686 32181\nf 31685 32181 32180\nf 31686 31687 32182\nf 31686 32182 32181\nf 31687 31688 32183\nf 31687 32183 32182\nf 31688 31689 32184\nf 31688 32184 32183\nf 31689 31690 32185\nf 31689 32185 32184\nf 31690 31691 32186\nf 31690 32186 32185\nf 31691 31692 32187\nf 31691 32187 32186\nf 31692 31693 32188\nf 31692 32188 32187\nf 31693 31694 32189\nf 31693 32189 32188\nf 31694 31695 32190\nf 31694 32190 32189\nf 31695 31696 32191\nf 31695 32191 32190\nf 31696 31697 32192\nf 31696 32192 32191\nf 31697 31698 32193\nf 31697 32193 32192\nf 31698 31699 32194\nf 31698 32194 32193\nf 31699 31700 32195\nf 31699 32195 32194\nf 31700 31701 32196\nf 31700 32196 32195\nf 31701 31702 32197\nf 31701 32197 32196\nf 31702 31703 32198\nf 31702 32198 32197\nf 31703 31704 32199\nf 31703 32199 32198\nf 31704 31705 32200\nf 31704 32200 32199\nf 31705 31706 32201\nf 31705 32201 32200\nf 31706 31707 32202\nf 31706 32202 32201\nf 31707 31708 32203\nf 31707 32203 32202\nf 31708 31709 32204\nf 31708 32204 32203\nf 31709 31710 32205\nf 31709 32205 32204\nf 31710 31711 32206\nf 31710 32206 32205\nf 31711 31712 32207\nf 31711 32207 32206\nf 31712 31713 32208\nf 31712 32208 32207\nf 31713 31714 32209\nf 31713 32209 32208\nf 31714 31715 32210\nf 31714 32210 32209\nf 31715 31716 32211\nf 31715 32211 32210\nf 31716 31717 32212\nf 31716 32212 32211\nf 31717 31718 32213\nf 31717 32213 32212\nf 31718 31720 32214\nf 31718 32214 32213\nf 31719 32215 31720\nf 31720 32215 32216\nf 31720 32216 32214\nf 31721 31722 32218\nf 31722 31724 32221\nf 31722 32219 32218\nf 31722 32221 32219\nf 31723 32130 32220\nf 31723 32220 31725\nf 31724 31726 32223\nf 31724 32223 32221\nf 31725 32220 32222\nf 31725 32222 31727\nf 31726 31729 32226\nf 31726 32226 32223\nf 31727 32222 32224\nf 31727 32224 32225\nf 31727 32225 31728\nf 31728 32225 31731\nf 31729 31730 32226\nf 31730 31732 32229\nf 31730 32227 32226\nf 31730 32229 32227\nf 31731 32225 32228\nf 31731 32228 31734\nf 31732 31733 32229\nf 31733 31740 32237\nf 31733 32230 32229\nf 31733 32237 32230\nf 31734 32228 32231\nf 31734 32231 32232\nf 31734 32232 31735\nf 31735 32232 31742\nf 31736 31830 32327\nf 31736 32233 32234\nf 31736 32234 31737\nf 31736 32327 32233\nf 31737 32234 32235\nf 31737 32235 31738\nf 31738 32235 32236\nf 31738 32236 31739\nf 31739 32236 32238\nf 31739 32238 31741\nf 31740 31741 32237\nf 31741 32238 32237\nf 31742 32232 32239\nf 31742 32239 32240\nf 31742 32240 31743\nf 31743 32240 32241\nf 31743 32241 31744\nf 31744 32241 31832\nf 31745 31834 32331\nf 31745 32242 32243\nf 31745 32243 31746\nf 31745 32331 32242\nf 31746 32243 32244\nf 31746 32244 31747\nf 31747 32244 32245\nf 31747 32245 31748\nf 31748 32245 32246\nf 31748 32246 31749\nf 31749 32246 32247\nf 31749 32247 31750\nf 31750 32247 32248\nf 31750 32248 31751\nf 31751 32248 32249\nf 31751 32249 31752\nf 31752 32249 32250\nf 31752 32250 31753\nf 31753 32250 32251\nf 31753 32251 31754\nf 31754 32251 32252\nf 31754 32252 31755\nf 31755 32252 32253\nf 31755 32253 31756\nf 31756 32253 32254\nf 31756 32254 31757\nf 31757 32254 32255\nf 31757 32255 31758\nf 31758 32255 32256\nf 31758 32256 31759\nf 31759 32256 32257\nf 31759 32257 31760\nf 31760 32257 32258\nf 31760 32258 31761\nf 31761 32258 32259\nf 31761 32259 31762\nf 31762 32259 32260\nf 31762 32260 31763\nf 31763 32260 32261\nf 31763 32261 31764\nf 31764 32261 32262\nf 31764 32262 31765\nf 31765 32262 32263\nf 31765 32263 31766\nf 31766 32263 32264\nf 31766 32264 31767\nf 31767 32264 32265\nf 31767 32265 31768\nf 31768 32265 32266\nf 31768 32266 31769\nf 31769 32266 32267\nf 31769 32267 31770\nf 31770 32267 32268\nf 31770 32268 31771\nf 31771 32268 32269\nf 31771 32269 31772\nf 31772 32269 32270\nf 31772 32270 31773\nf 31773 32270 32271\nf 31773 32271 31774\nf 31774 32271 32272\nf 31774 32272 31775\nf 31775 32272 32273\nf 31775 32273 31776\nf 31776 32273 32274\nf 31776 32274 31777\nf 31777 32274 32275\nf 31777 32275 31778\nf 31778 32275 32276\nf 31778 32276 31779\nf 31779 32276 32277\nf 31779 32277 31780\nf 31780 32277 32278\nf 31780 32278 31781\nf 31781 32278 32279\nf 31781 32279 31782\nf 31782 32279 32280\nf 31782 32280 31783\nf 31783 32280 32281\nf 31783 32281 31784\nf 31784 32281 32282\nf 31784 32282 31785\nf 31785 32282 32283\nf 31785 32283 31786\nf 31786 32283 32284\nf 31786 32284 31787\nf 31787 32284 32285\nf 31787 32285 31788\nf 31788 32285 32286\nf 31788 32286 31789\nf 31789 32286 32287\nf 31789 32287 31790\nf 31790 32287 32288\nf 31790 32288 31791\nf 31791 32288 32289\nf 31791 32289 31792\nf 31792 32289 32290\nf 31792 32290 31793\nf 31793 32290 32291\nf 31793 32291 31794\nf 31794 32291 32292\nf 31794 32292 31795\nf 31795 32292 32293\nf 31795 32293 31796\nf 31796 32293 32294\nf 31796 32294 31797\nf 31797 32294 32295\nf 31797 32295 31798\nf 31798 32295 32296\nf 31798 32296 31799\nf 31799 32296 32297\nf 31799 32297 31800\nf 31800 32297 32298\nf 31800 32298 31801\nf 31801 32298 32299\nf 31801 32299 31802\nf 31802 32299 32300\nf 31802 32300 31803\nf 31803 32300 32301\nf 31803 32301 31804\nf 31804 32301 32302\nf 31804 32302 31805\nf 31805 32302 32303\nf 31805 32303 31806\nf 31806 32303 32304\nf 31806 32304 31807\nf 31807 32304 32305\nf 31807 32305 31808\nf 31808 32305 32306\nf 31808 32306 31809\nf 31809 32306 32307\nf 31809 32307 31810\nf 31810 32307 32308\nf 31810 32308 31811\nf 31811 32308 32309\nf 31811 32309 31812\nf 31812 32309 32310\nf 31812 32310 31813\nf 31813 32310 32311\nf 31813 32311 31814\nf 31814 32311 32312\nf 31814 32312 31815\nf 31815 32312 32313\nf 31815 32313 31816\nf 31816 32313 32314\nf 31816 32314 31817\nf 31817 32314 32315\nf 31817 32315 31818\nf 31818 32315 32316\nf 31818 32316 31819\nf 31819 32316 32317\nf 31819 32317 31820\nf 31820 32317 32318\nf 31820 32318 31821\nf 31821 32318 32319\nf 31821 32319 31822\nf 31822 32319 32320\nf 31822 32320 31823\nf 31823 32320 32321\nf 31823 32321 31824\nf 31824 32321 32322\nf 31824 32322 31825\nf 31825 32322 32323\nf 31825 32323 31826\nf 31826 32323 32324\nf 31826 32324 31827\nf 31827 32324 32325\nf 31827 32325 31828\nf 31828 32325 32326\nf 31828 32326 31829\nf 31829 32326 32328\nf 31829 32328 31831\nf 31830 31831 32327\nf 31831 32328 32327\nf 31832 32241 32329\nf 31832 32329 32330\nf 31832 32330 31833\nf 31833 32330 31836\nf 31834 31835 32331\nf 31835 31839 32336\nf 31835 32332 32331\nf 31835 32336 32332\nf 31836 32330 32333\nf 31836 32333 32334\nf 31836 32334 31837\nf 31837 32334 32335\nf 31837 32335 31838\nf 31838 32335 32337\nf 31838 32337 31840\nf 31839 31840 32336\nf 31840 32337 32336\nf 31841 31842 32338\nf 31841 32338 32342\nf 31841 32342 31845\nf 31842 31843 32339\nf 31842 32339 32338\nf 31843 31844 32340\nf 31843 32340 32339\nf 31844 31847 32341\nf 31844 32341 32340\nf 31845 32342 31846\nf 31846 32342 32343\nf 31846 32343 32347\nf 31846 32347 31849\nf 31847 31848 32346\nf 31847 32345 32341\nf 31847 32346 32345\nf 31848 31851 32346\nf 31849 32347 31850\nf 31850 32347 32348\nf 31850 32348 32350\nf 31850 32350 31852\nf 31851 31853 32351\nf 31851 32349 32346\nf 31851 32351 32349\nf 31852 32350 31854\nf 31853 31855 32353\nf 31853 32353 32351\nf 31854 32350 32352\nf 31854 32352 31857\nf 31855 31856 32354\nf 31855 32354 32353\nf 31856 31858 32354\nf 31857 32352 32356\nf 31857 32356 31859\nf 31858 31860 32359\nf 31858 32357 32354\nf 31858 32359 32357\nf 31859 32356 32358\nf 31859 32358 31861\nf 31860 31862 32361\nf 31860 32361 32359\nf 31861 32358 32360\nf 31861 32360 31863\nf 31862 31864 32363\nf 31862 32363 32361\nf 31863 32360 32362\nf 31863 32362 31865\nf 31864 31866 32365\nf 31864 32365 32363\nf 31865 32362 32364\nf 31865 32364 31867\nf 31866 31868 32367\nf 31866 32367 32365\nf 31867 32364 32366\nf 31867 32366 31869\nf 31868 31870 32369\nf 31868 32369 32367\nf 31869 32366 32368\nf 31869 32368 31872\nf 31870 31871 32369\nf 31871 31873 32372\nf 31871 32370 32369\nf 31871 32372 32370\nf 31872 32368 32371\nf 31872 32371 31874\nf 31873 31875 32374\nf 31873 32374 32372\nf 31874 32371 32373\nf 31874 32373 31876\nf 31875 31877 32376\nf 31875 32376 32374\nf 31876 32373 32375\nf 31876 32375 31878\nf 31877 31880 32379\nf 31877 32379 32376\nf 31878 32375 32377\nf 31878 32377 32378\nf 31878 32378 31879\nf 31879 32378 31881\nf 31880 31882 32381\nf 31880 32381 32379\nf 31881 32378 32380\nf 31881 32380 31883\nf 31882 31884 32383\nf 31882 32383 32381\nf 31883 32380 32382\nf 31883 32382 31886\nf 31884 31885 32383\nf 31885 31887 32386\nf 31885 32384 32383\nf 31885 32386 32384\nf 31886 32382 32385\nf 31886 32385 31888\nf 31887 31889 32388\nf 31887 32388 32386\nf 31888 32385 32387\nf 31888 32387 31890\nf 31889 31891 32390\nf 31889 32390 32388\nf 31890 32387 32389\nf 31890 32389 31892\nf 31891 31893 32392\nf 31891 32392 32390\nf 31892 32389 32391\nf 31892 32391 31895\nf 31893 31894 32394\nf 31893 32394 32392\nf 31894 31896 31897\nf 31894 31897 32394\nf 31895 32391 32393\nf 31895 32393 31898\nf 31896 31900 32397\nf 31896 32397 31897\nf 31897 32395 32394\nf 31897 32397 32395\nf 31898 31902 31899\nf 31898 32393 32396\nf 31898 32396 32399\nf 31898 32399 31902\nf 31899 31902 31901\nf 31900 31903 32400\nf 31900 32400 32397\nf 31901 31902 31905\nf 31901 31905 31904\nf 31902 32399 31905\nf 31903 31906 32403\nf 31903 32403 32400\nf 31904 31905 31908\nf 31904 31908 31907\nf 31905 32399 32402\nf 31905 32402 31908\nf 31906 31909 32406\nf 31906 32406 32403\nf 31907 31908 32405\nf 31907 32405 32407\nf 31907 32407 31910\nf 31908 32402 32404\nf 31908 32404 32405\nf 31909 31912 32409\nf 31909 32409 32406\nf 31910 31915 31911\nf 31910 32407 32410\nf 31910 32410 31915\nf 31911 31915 31914\nf 31912 31913 32413\nf 31912 32413 32409\nf 31913 31916 31918\nf 31913 31918 32413\nf 31914 31915 31917\nf 31915 32410 32412\nf 31915 32412 31917\nf 31916 31917 31918\nf 31917 31919 31918\nf 31917 32412 31919\nf 31918 31919 32414\nf 31918 32414 32413\nf 31919 32412 32415\nf 31919 32415 32418\nf 31919 32417 32414\nf 31919 32418 32417\nf 31920 31923 31925\nf 31920 31925 31927\nf 31920 31927 32430\nf 31920 32422 32426\nf 31920 32426 31923\nf 31920 32429 32422\nf 31920 32430 32429\nf 31921 31923 32427\nf 31921 31930 31923\nf 31921 32424 32432\nf 31921 32427 32424\nf 31921 32432 31930\nf 31922 31923 31930\nf 31922 31924 31923\nf 31922 31930 31928\nf 31923 31924 31925\nf 31923 32426 32427\nf 31924 31926 31925\nf 31925 31926 31927\nf 31926 31931 31927\nf 31927 31931 32433\nf 31927 32433 32430\nf 31928 31930 31929\nf 31929 31930 32434\nf 31929 32434 32435\nf 31929 32435 31932\nf 31930 32432 32434\nf 31931 31934 32439\nf 31931 32437 32433\nf 31931 32439 32437\nf 31932 31933 31937\nf 31932 31937 31935\nf 31932 32435 31933\nf 31933 32435 32438\nf 31933 32438 31937\nf 31934 31938 32441\nf 31934 32441 32439\nf 31935 31937 31936\nf 31936 31937 32440\nf 31936 32440 31939\nf 31937 32438 32440\nf 31938 31940 32443\nf 31938 32443 32441\nf 31939 32440 32442\nf 31939 32442 31941\nf 31940 31942 32446\nf 31940 32446 32443\nf 31941 32442 32444\nf 31941 32444 31943\nf 31942 31946 32448\nf 31942 32448 32446\nf 31943 31945 31944\nf 31943 32444 31945\nf 31944 31945 32447\nf 31944 32447 31947\nf 31945 32444 32445\nf 31945 32445 32447\nf 31946 31948 32450\nf 31946 32450 32448\nf 31947 32447 32449\nf 31947 32449 31949\nf 31948 31950 32452\nf 31948 32452 32450\nf 31949 32449 32451\nf 31949 32451 31951\nf 31950 31952 32454\nf 31950 32454 32452\nf 31951 32451 32453\nf 31951 32453 31953\nf 31952 31954 32456\nf 31952 32456 32454\nf 31953 32453 32455\nf 31953 32455 31955\nf 31954 31956 32458\nf 31954 32458 32456\nf 31955 32455 32457\nf 31955 32457 31957\nf 31956 31959 32458\nf 31957 32457 32461\nf 31957 32461 31958\nf 31958 32461 32462\nf 31958 32462 32464\nf 31958 32464 31962\nf 31959 31960 31961\nf 31959 31961 32458\nf 31960 31963 32463\nf 31960 32463 31961\nf 31961 32459 32458\nf 31961 32463 32459\nf 31962 32464 31964\nf 31963 31965 32467\nf 31963 32465 32463\nf 31963 32467 32465\nf 31964 32464 32466\nf 31964 32466 31966\nf 31965 31967 32469\nf 31965 32469 32467\nf 31966 32466 32468\nf 31966 32468 31968\nf 31967 31969 32471\nf 31967 32471 32469\nf 31968 32468 32470\nf 31968 32470 31970\nf 31969 31971 32473\nf 31969 32473 32471\nf 31970 32470 32472\nf 31970 32472 31972\nf 31971 31973 32475\nf 31971 32475 32473\nf 31972 32472 32474\nf 31972 32474 31974\nf 31973 31975 32477\nf 31973 32477 32475\nf 31974 32474 32476\nf 31974 32476 31976\nf 31975 31977 32479\nf 31975 32479 32477\nf 31976 32476 32478\nf 31976 32478 31979\nf 31977 31978 32479\nf 31978 31980 32482\nf 31978 32480 32479\nf 31978 32482 32480\nf 31979 32478 32481\nf 31979 32481 31981\nf 31980 31982 32484\nf 31980 32484 32482\nf 31981 32481 32483\nf 31981 32483 31983\nf 31982 31984 32486\nf 31982 32486 32484\nf 31983 32483 32485\nf 31983 32485 31985\nf 31984 31986 32488\nf 31984 32488 32486\nf 31985 32485 32487\nf 31985 32487 31988\nf 31986 31987 32490\nf 31986 32490 32488\nf 31987 31989 31990\nf 31987 31990 32490\nf 31988 32487 32489\nf 31988 32489 31991\nf 31989 31993 32493\nf 31989 32493 31990\nf 31990 32491 32490\nf 31990 32493 32491\nf 31991 31996 31992\nf 31991 32489 32492\nf 31991 32492 32495\nf 31991 32495 31996\nf 31992 31996 31995\nf 31993 31994 32493\nf 31994 31998 32498\nf 31994 32494 32493\nf 31994 32498 32494\nf 31995 31996 32496\nf 31995 32496 31997\nf 31996 32495 32496\nf 31997 32496 32497\nf 31997 32497 32499\nf 31997 32499 31999\nf 31998 31999 32498\nf 31999 32499 32498\nf 32000 32001 32502\nf 32000 32502 32515\nf 32000 32515 32013\nf 32001 32002 32503\nf 32001 32503 32502\nf 32002 32003 32504\nf 32002 32504 32503\nf 32003 32004 32505\nf 32003 32505 32504\nf 32004 32005 32506\nf 32004 32506 32505\nf 32005 32006 32507\nf 32005 32507 32506\nf 32006 32007 32508\nf 32006 32508 32507\nf 32007 32008 32509\nf 32007 32509 32508\nf 32008 32009 32510\nf 32008 32510 32509\nf 32009 32010 32511\nf 32009 32511 32510\nf 32010 32015 32512\nf 32010 32512 32511\nf 32011 32012 32513\nf 32011 32513 32521\nf 32011 32521 32020\nf 32012 32014 32514\nf 32012 32514 32513\nf 32013 32515 32014\nf 32014 32515 32516\nf 32014 32516 32514\nf 32015 32016 32518\nf 32015 32517 32512\nf 32015 32518 32517\nf 32016 32017 32518\nf 32017 32018 32519\nf 32017 32519 32518\nf 32018 32022 32023\nf 32018 32023 32519\nf 32019 32021 32520\nf 32019 32520 32526\nf 32019 32526 32025\nf 32020 32521 32021\nf 32021 32521 32522\nf 32021 32522 32520\nf 32022 32024 32524\nf 32022 32524 32023\nf 32023 32523 32519\nf 32023 32524 32523\nf 32024 32026 32525\nf 32024 32525 32524\nf 32025 32526 32027\nf 32026 32028 32530\nf 32026 32527 32525\nf 32026 32530 32527\nf 32027 32526 32529\nf 32027 32529 32029\nf 32028 32032 32535\nf 32028 32535 32530\nf 32029 32529 32531\nf 32029 32531 32532\nf 32029 32532 32030\nf 32030 32532 32533\nf 32030 32533 32031\nf 32031 32533 32034\nf 32032 32033 32535\nf 32033 32040 32042\nf 32033 32042 32534\nf 32033 32534 32536\nf 32033 32536 32535\nf 32034 32533 32537\nf 32034 32537 32538\nf 32034 32538 32035\nf 32035 32538 32539\nf 32035 32539 32036\nf 32036 32539 32037\nf 32037 32044 32043\nf 32037 32539 32044\nf 32038 32052 32550\nf 32038 32540 32542\nf 32038 32542 32039\nf 32038 32550 32540\nf 32039 32542 32041\nf 32040 32041 32042\nf 32041 32541 32042\nf 32041 32542 32541\nf 32042 32541 32534\nf 32043 32044 32544\nf 32043 32544 32045\nf 32044 32539 32543\nf 32044 32543 32544\nf 32045 32544 32545\nf 32045 32545 32546\nf 32045 32546 32046\nf 32046 32546 32547\nf 32046 32547 32047\nf 32047 32547 32048\nf 32048 32055 32054\nf 32048 32547 32055\nf 32049 32058 32060\nf 32049 32060 32557\nf 32049 32548 32050\nf 32049 32557 32548\nf 32050 32548 32549\nf 32050 32549 32051\nf 32051 32549 32551\nf 32051 32551 32053\nf 32052 32053 32550\nf 32053 32551 32550\nf 32054 32055 32553\nf 32054 32553 32056\nf 32055 32547 32552\nf 32055 32552 32553\nf 32056 32553 32554\nf 32056 32554 32555\nf 32056 32555 32057\nf 32057 32555 32556\nf 32057 32556 32059\nf 32058 32059 32060\nf 32059 32556 32558\nf 32059 32558 32060\nf 32060 32558 32557\nf 32061 32068 32559\nf 32061 32559 32564\nf 32061 32564 32066\nf 32062 32063 32560\nf 32062 32560 32568\nf 32062 32568 32070\nf 32063 32064 32561\nf 32063 32561 32560\nf 32064 32065 32562\nf 32064 32562 32561\nf 32065 32071 32563\nf 32065 32563 32562\nf 32066 32564 32067\nf 32067 32564 32565\nf 32067 32565 32571\nf 32067 32571 32073\nf 32068 32069 32567\nf 32068 32566 32559\nf 32068 32567 32566\nf 32069 32075 32567\nf 32070 32568 32077\nf 32071 32072 32570\nf 32071 32569 32563\nf 32071 32570 32569\nf 32072 32078 32570\nf 32073 32571 32074\nf 32074 32571 32572\nf 32074 32572 32578\nf 32074 32578 32079\nf 32075 32076 32574\nf 32075 32573 32567\nf 32075 32574 32573\nf 32076 32080 32574\nf 32077 32568 32575\nf 32077 32575 32081\nf 32078 32082 32576\nf 32078 32576 32570\nf 32079 32578 32085\nf 32080 32086 32583\nf 32080 32579 32574\nf 32080 32583 32579\nf 32081 32575 32580\nf 32081 32580 32087\nf 32082 32083 32084\nf 32082 32084 32577\nf 32082 32577 32576\nf 32083 32089 32084\nf 32084 32089 32581\nf 32084 32581 32577\nf 32085 32578 32582\nf 32085 32582 32090\nf 32086 32091 32588\nf 32086 32588 32583\nf 32087 32580 32584\nf 32087 32584 32088\nf 32088 32584 32585\nf 32088 32585 32589\nf 32088 32589 32092\nf 32089 32093 32590\nf 32089 32586 32581\nf 32089 32590 32586\nf 32090 32582 32587\nf 32090 32587 32094\nf 32091 32095 32592\nf 32091 32592 32588\nf 32092 32589 32096\nf 32093 32097 32594\nf 32093 32594 32590\nf 32094 32587 32591\nf 32094 32591 32099\nf 32095 32100 32597\nf 32095 32597 32592\nf 32096 32589 32593\nf 32096 32593 32101\nf 32097 32098 32595\nf 32097 32595 32594\nf 32098 32102 32595\nf 32099 32591 32596\nf 32099 32596 32103\nf 32100 32105 32602\nf 32100 32602 32597\nf 32101 32593 32598\nf 32101 32598 32106\nf 32102 32107 32604\nf 32102 32599 32595\nf 32102 32604 32599\nf 32103 32596 32600\nf 32103 32600 32104\nf 32104 32600 32601\nf 32104 32601 32607\nf 32104 32607 32108\nf 32105 32110 32610\nf 32105 32610 32602\nf 32106 32598 32603\nf 32106 32603 32111\nf 32107 32112 32604\nf 32108 32607 32608\nf 32108 32608 32109\nf 32109 32608 32114\nf 32110 32115 32614\nf 32110 32614 32610\nf 32111 32603 32611\nf 32111 32611 32117\nf 32112 32113 32604\nf 32112 32118 32119\nf 32112 32119 32113\nf 32113 32119 32612\nf 32113 32605 32604\nf 32113 32612 32605\nf 32114 32608 32613\nf 32114 32613 32120\nf 32115 32116 32615\nf 32115 32615 32614\nf 32116 32121 32615\nf 32117 32611 32616\nf 32117 32616 32126\nf 32118 32128 32129\nf 32118 32129 32119\nf 32119 32129 32617\nf 32119 32617 32612\nf 32120 32613 32618\nf 32120 32618 32130\nf 32121 32122 32620\nf 32121 32619 32615\nf 32121 32620 32619\nf 32122 32123 32620\nf 32123 32124 32621\nf 32123 32621 32620\nf 32124 32131 32622\nf 32124 32622 32621\nf 32125 32127 32624\nf 32125 32217 32215\nf 32125 32623 32217\nf 32125 32624 32623\nf 32126 32616 32625\nf 32126 32625 32127\nf 32127 32625 32626\nf 32127 32626 32624\nf 32128 32218 32715\nf 32128 32628 32129\nf 32128 32715 32628\nf 32129 32627 32617\nf 32129 32628 32627\nf 32130 32618 32629\nf 32130 32629 32220\nf 32131 32132 32631\nf 32131 32630 32622\nf 32131 32631 32630\nf 32132 32133 32631\nf 32133 32134 32632\nf 32133 32632 32631\nf 32134 32135 32633\nf 32134 32633 32632\nf 32135 32136 32634\nf 32135 32634 32633\nf 32136 32137 32635\nf 32136 32635 32634\nf 32137 32138 32636\nf 32137 32636 32635\nf 32138 32139 32637\nf 32138 32637 32636\nf 32139 32140 32638\nf 32139 32638 32637\nf 32140 32141 32639\nf 32140 32639 32638\nf 32141 32142 32640\nf 32141 32640 32639\nf 32142 32143 32641\nf 32142 32641 32640\nf 32143 32144 32642\nf 32143 32642 32641\nf 32144 32145 32643\nf 32144 32643 32642\nf 32145 32146 32644\nf 32145 32644 32643\nf 32146 32147 32645\nf 32146 32645 32644\nf 32147 32148 32646\nf 32147 32646 32645\nf 32148 32149 32647\nf 32148 32647 32646\nf 32149 32150 32648\nf 32149 32648 32647\nf 32150 32151 32649\nf 32150 32649 32648\nf 32151 32152 32650\nf 32151 32650 32649\nf 32152 32153 32651\nf 32152 32651 32650\nf 32153 32154 32652\nf 32153 32652 32651\nf 32154 32155 32653\nf 32154 32653 32652\nf 32155 32156 32654\nf 32155 32654 32653\nf 32156 32157 32655\nf 32156 32655 32654\nf 32157 32158 32656\nf 32157 32656 32655\nf 32158 32159 32657\nf 32158 32657 32656\nf 32159 32160 32658\nf 32159 32658 32657\nf 32160 32161 32659\nf 32160 32659 32658\nf 32161 32162 32660\nf 32161 32660 32659\nf 32162 32163 32661\nf 32162 32661 32660\nf 32163 32164 32662\nf 32163 32662 32661\nf 32164 32165 32663\nf 32164 32663 32662\nf 32165 32166 32664\nf 32165 32664 32663\nf 32166 32167 32665\nf 32166 32665 32664\nf 32167 32168 32666\nf 32167 32666 32665\nf 32168 32169 32667\nf 32168 32667 32666\nf 32169 32170 32668\nf 32169 32668 32667\nf 32170 32171 32669\nf 32170 32669 32668\nf 32171 32172 32670\nf 32171 32670 32669\nf 32172 32173 32671\nf 32172 32671 32670\nf 32173 32174 32672\nf 32173 32672 32671\nf 32174 32175 32673\nf 32174 32673 32672\nf 32175 32176 32674\nf 32175 32674 32673\nf 32176 32177 32675\nf 32176 32675 32674\nf 32177 32178 32676\nf 32177 32676 32675\nf 32178 32179 32677\nf 32178 32677 32676\nf 32179 32180 32678\nf 32179 32678 32677\nf 32180 32181 32679\nf 32180 32679 32678\nf 32181 32182 32680\nf 32181 32680 32679\nf 32182 32183 32681\nf 32182 32681 32680\nf 32183 32184 32682\nf 32183 32682 32681\nf 32184 32185 32683\nf 32184 32683 32682\nf 32185 32186 32684\nf 32185 32684 32683\nf 32186 32187 32685\nf 32186 32685 32684\nf 32187 32188 32686\nf 32187 32686 32685\nf 32188 32189 32687\nf 32188 32687 32686\nf 32189 32190 32688\nf 32189 32688 32687\nf 32190 32191 32689\nf 32190 32689 32688\nf 32191 32192 32690\nf 32191 32690 32689\nf 32192 32193 32691\nf 32192 32691 32690\nf 32193 32194 32692\nf 32193 32692 32691\nf 32194 32195 32693\nf 32194 32693 32692\nf 32195 32196 32694\nf 32195 32694 32693\nf 32196 32197 32695\nf 32196 32695 32694\nf 32197 32198 32696\nf 32197 32696 32695\nf 32198 32199 32697\nf 32198 32697 32696\nf 32199 32200 32698\nf 32199 32698 32697\nf 32200 32201 32699\nf 32200 32699 32698\nf 32201 32202 32700\nf 32201 32700 32699\nf 32202 32203 32701\nf 32202 32701 32700\nf 32203 32204 32702\nf 32203 32702 32701\nf 32204 32205 32703\nf 32204 32703 32702\nf 32205 32206 32704\nf 32205 32704 32703\nf 32206 32207 32705\nf 32206 32705 32704\nf 32207 32208 32706\nf 32207 32706 32705\nf 32208 32209 32707\nf 32208 32707 32706\nf 32209 32210 32708\nf 32209 32708 32707\nf 32210 32211 32709\nf 32210 32709 32708\nf 32211 32212 32710\nf 32211 32710 32709\nf 32212 32213 32711\nf 32212 32711 32710\nf 32213 32214 32712\nf 32213 32712 32711\nf 32214 32216 32714\nf 32214 32714 32712\nf 32215 32217 32216\nf 32216 32217 32713\nf 32216 32713 32714\nf 32217 32623 32713\nf 32218 32219 32715\nf 32219 32221 32719\nf 32219 32716 32715\nf 32219 32719 32716\nf 32220 32629 32718\nf 32220 32718 32222\nf 32221 32223 32721\nf 32221 32721 32719\nf 32222 32718 32720\nf 32222 32720 32224\nf 32223 32226 32724\nf 32223 32724 32721\nf 32224 32720 32722\nf 32224 32722 32723\nf 32224 32723 32225\nf 32225 32723 32228\nf 32226 32227 32724\nf 32227 32229 32727\nf 32227 32725 32724\nf 32227 32727 32725\nf 32228 32723 32726\nf 32228 32726 32231\nf 32229 32230 32727\nf 32230 32237 32735\nf 32230 32728 32727\nf 32230 32735 32728\nf 32231 32726 32729\nf 32231 32729 32730\nf 32231 32730 32232\nf 32232 32730 32239\nf 32233 32327 32825\nf 32233 32731 32732\nf 32233 32732 32234\nf 32233 32825 32731\nf 32234 32732 32733\nf 32234 32733 32235\nf 32235 32733 32734\nf 32235 32734 32236\nf 32236 32734 32736\nf 32236 32736 32238\nf 32237 32238 32735\nf 32238 32736 32735\nf 32239 32730 32737\nf 32239 32737 32738\nf 32239 32738 32240\nf 32240 32738 32739\nf 32240 32739 32241\nf 32241 32739 32329\nf 32242 32331 32829\nf 32242 32740 32741\nf 32242 32741 32243\nf 32242 32829 32740\nf 32243 32741 32742\nf 32243 32742 32244\nf 32244 32742 32743\nf 32244 32743 32245\nf 32245 32743 32744\nf 32245 32744 32246\nf 32246 32744 32745\nf 32246 32745 32247\nf 32247 32745 32746\nf 32247 32746 32248\nf 32248 32746 32747\nf 32248 32747 32249\nf 32249 32747 32748\nf 32249 32748 32250\nf 32250 32748 32749\nf 32250 32749 32251\nf 32251 32749 32750\nf 32251 32750 32252\nf 32252 32750 32751\nf 32252 32751 32253\nf 32253 32751 32752\nf 32253 32752 32254\nf 32254 32752 32753\nf 32254 32753 32255\nf 32255 32753 32754\nf 32255 32754 32256\nf 32256 32754 32755\nf 32256 32755 32257\nf 32257 32755 32756\nf 32257 32756 32258\nf 32258 32756 32757\nf 32258 32757 32259\nf 32259 32757 32758\nf 32259 32758 32260\nf 32260 32758 32759\nf 32260 32759 32261\nf 32261 32759 32760\nf 32261 32760 32262\nf 32262 32760 32761\nf 32262 32761 32263\nf 32263 32761 32762\nf 32263 32762 32264\nf 32264 32762 32763\nf 32264 32763 32265\nf 32265 32763 32764\nf 32265 32764 32266\nf 32266 32764 32765\nf 32266 32765 32267\nf 32267 32765 32766\nf 32267 32766 32268\nf 32268 32766 32767\nf 32268 32767 32269\nf 32269 32767 32768\nf 32269 32768 32270\nf 32270 32768 32769\nf 32270 32769 32271\nf 32271 32769 32770\nf 32271 32770 32272\nf 32272 32770 32771\nf 32272 32771 32273\nf 32273 32771 32772\nf 32273 32772 32274\nf 32274 32772 32773\nf 32274 32773 32275\nf 32275 32773 32774\nf 32275 32774 32276\nf 32276 32774 32775\nf 32276 32775 32277\nf 32277 32775 32776\nf 32277 32776 32278\nf 32278 32776 32777\nf 32278 32777 32279\nf 32279 32777 32778\nf 32279 32778 32280\nf 32280 32778 32779\nf 32280 32779 32281\nf 32281 32779 32780\nf 32281 32780 32282\nf 32282 32780 32781\nf 32282 32781 32283\nf 32283 32781 32782\nf 32283 32782 32284\nf 32284 32782 32783\nf 32284 32783 32285\nf 32285 32783 32784\nf 32285 32784 32286\nf 32286 32784 32785\nf 32286 32785 32287\nf 32287 32785 32786\nf 32287 32786 32288\nf 32288 32786 32787\nf 32288 32787 32289\nf 32289 32787 32788\nf 32289 32788 32290\nf 32290 32788 32789\nf 32290 32789 32291\nf 32291 32789 32790\nf 32291 32790 32292\nf 32292 32790 32791\nf 32292 32791 32293\nf 32293 32791 32792\nf 32293 32792 32294\nf 32294 32792 32793\nf 32294 32793 32295\nf 32295 32793 32794\nf 32295 32794 32296\nf 32296 32794 32795\nf 32296 32795 32297\nf 32297 32795 32796\nf 32297 32796 32298\nf 32298 32796 32797\nf 32298 32797 32299\nf 32299 32797 32798\nf 32299 32798 32300\nf 32300 32798 32799\nf 32300 32799 32301\nf 32301 32799 32800\nf 32301 32800 32302\nf 32302 32800 32801\nf 32302 32801 32303\nf 32303 32801 32802\nf 32303 32802 32304\nf 32304 32802 32803\nf 32304 32803 32305\nf 32305 32803 32804\nf 32305 32804 32306\nf 32306 32804 32805\nf 32306 32805 32307\nf 32307 32805 32806\nf 32307 32806 32308\nf 32308 32806 32807\nf 32308 32807 32309\nf 32309 32807 32808\nf 32309 32808 32310\nf 32310 32808 32809\nf 32310 32809 32311\nf 32311 32809 32810\nf 32311 32810 32312\nf 32312 32810 32811\nf 32312 32811 32313\nf 32313 32811 32812\nf 32313 32812 32314\nf 32314 32812 32813\nf 32314 32813 32315\nf 32315 32813 32814\nf 32315 32814 32316\nf 32316 32814 32815\nf 32316 32815 32317\nf 32317 32815 32816\nf 32317 32816 32318\nf 32318 32816 32817\nf 32318 32817 32319\nf 32319 32817 32818\nf 32319 32818 32320\nf 32320 32818 32819\nf 32320 32819 32321\nf 32321 32819 32820\nf 32321 32820 32322\nf 32322 32820 32821\nf 32322 32821 32323\nf 32323 32821 32822\nf 32323 32822 32324\nf 32324 32822 32823\nf 32324 32823 32325\nf 32325 32823 32824\nf 32325 32824 32326\nf 32326 32824 32826\nf 32326 32826 32328\nf 32327 32328 32825\nf 32328 32826 32825\nf 32329 32739 32827\nf 32329 32827 32828\nf 32329 32828 32330\nf 32330 32828 32333\nf 32331 32332 32829\nf 32332 32336 32834\nf 32332 32830 32829\nf 32332 32834 32830\nf 32333 32828 32831\nf 32333 32831 32832\nf 32333 32832 32334\nf 32334 32832 32833\nf 32334 32833 32335\nf 32335 32833 32835\nf 32335 32835 32337\nf 32336 32337 32834\nf 32337 32835 32834\nf 32338 32339 32837\nf 32338 32344 32342\nf 32338 32836 32344\nf 32338 32837 32836\nf 32339 32340 32838\nf 32339 32838 32837\nf 32340 32341 32839\nf 32340 32839 32838\nf 32341 32345 32840\nf 32341 32840 32839\nf 32342 32344 32343\nf 32343 32344 32841\nf 32343 32841 32347\nf 32344 32836 32841\nf 32345 32346 32843\nf 32345 32842 32840\nf 32345 32843 32842\nf 32346 32349 32843\nf 32347 32841 32844\nf 32347 32844 32348\nf 32348 32844 32845\nf 32348 32845 32847\nf 32348 32847 32350\nf 32349 32351 32848\nf 32349 32846 32843\nf 32349 32848 32846\nf 32350 32847 32352\nf 32351 32353 32848\nf 32352 32847 32850\nf 32352 32850 32356\nf 32353 32354 32355\nf 32353 32355 32849\nf 32353 32849 32848\nf 32354 32357 32355\nf 32355 32357 32851\nf 32355 32851 32849\nf 32356 32850 32852\nf 32356 32852 32358\nf 32357 32359 32855\nf 32357 32853 32851\nf 32357 32855 32853\nf 32358 32852 32854\nf 32358 32854 32360\nf 32359 32361 32857\nf 32359 32857 32855\nf 32360 32854 32856\nf 32360 32856 32362\nf 32361 32363 32859\nf 32361 32859 32857\nf 32362 32856 32858\nf 32362 32858 32364\nf 32363 32365 32861\nf 32363 32861 32859\nf 32364 32858 32860\nf 32364 32860 32366\nf 32365 32367 32863\nf 32365 32863 32861\nf 32366 32860 32862\nf 32366 32862 32368\nf 32367 32369 32865\nf 32367 32865 32863\nf 32368 32862 32864\nf 32368 32864 32371\nf 32369 32370 32865\nf 32370 32372 32868\nf 32370 32866 32865\nf 32370 32868 32866\nf 32371 32864 32867\nf 32371 32867 32373\nf 32372 32374 32870\nf 32372 32870 32868\nf 32373 32867 32869\nf 32373 32869 32375\nf 32374 32376 32872\nf 32374 32872 32870\nf 32375 32869 32871\nf 32375 32871 32377\nf 32376 32379 32875\nf 32376 32875 32872\nf 32377 32871 32873\nf 32377 32873 32874\nf 32377 32874 32378\nf 32378 32874 32380\nf 32379 32381 32877\nf 32379 32877 32875\nf 32380 32874 32876\nf 32380 32876 32382\nf 32381 32383 32879\nf 32381 32879 32877\nf 32382 32876 32878\nf 32382 32878 32385\nf 32383 32384 32879\nf 32384 32386 32882\nf 32384 32880 32879\nf 32384 32882 32880\nf 32385 32878 32881\nf 32385 32881 32387\nf 32386 32388 32884\nf 32386 32884 32882\nf 32387 32881 32883\nf 32387 32883 32389\nf 32388 32390 32886\nf 32388 32886 32884\nf 32389 32883 32885\nf 32389 32885 32391\nf 32390 32392 32888\nf 32390 32888 32886\nf 32391 32885 32887\nf 32391 32887 32393\nf 32392 32394 32890\nf 32392 32890 32888\nf 32393 32887 32889\nf 32393 32889 32396\nf 32394 32395 32892\nf 32394 32892 32890\nf 32395 32397 32398\nf 32395 32398 32892\nf 32396 32889 32891\nf 32396 32891 32399\nf 32397 32400 32398\nf 32398 32400 32401\nf 32398 32401 32894\nf 32398 32894 32892\nf 32399 32891 32893\nf 32399 32893 32402\nf 32400 32403 32897\nf 32400 32897 32401\nf 32401 32895 32894\nf 32401 32897 32895\nf 32402 32893 32896\nf 32402 32896 32404\nf 32403 32406 32900\nf 32403 32900 32897\nf 32404 32408 32405\nf 32404 32896 32899\nf 32404 32899 32901\nf 32404 32901 32408\nf 32405 32408 32407\nf 32406 32409 32902\nf 32406 32902 32900\nf 32407 32408 32411\nf 32407 32411 32410\nf 32408 32901 32411\nf 32409 32413 32905\nf 32409 32905 32902\nf 32410 32411 32412\nf 32411 32901 32903\nf 32411 32903 32904\nf 32411 32904 32412\nf 32412 32416 32415\nf 32412 32904 32416\nf 32413 32414 32909\nf 32413 32909 32905\nf 32414 32417 32419\nf 32414 32419 32909\nf 32415 32416 32418\nf 32416 32904 32906\nf 32416 32906 32908\nf 32416 32908 32418\nf 32417 32418 32419\nf 32418 32420 32419\nf 32418 32908 32420\nf 32419 32420 32910\nf 32419 32910 32909\nf 32420 32908 32911\nf 32420 32911 32914\nf 32420 32913 32910\nf 32420 32914 32913\nf 32421 32423 32919\nf 32421 32425 32428\nf 32421 32428 32423\nf 32421 32917 32922\nf 32421 32919 32917\nf 32421 32922 32425\nf 32422 32423 32428\nf 32422 32428 32426\nf 32422 32429 32431\nf 32422 32431 32926\nf 32422 32926 32423\nf 32423 32925 32919\nf 32423 32926 32925\nf 32424 32425 32928\nf 32424 32427 32425\nf 32424 32928 32432\nf 32425 32427 32428\nf 32425 32922 32923\nf 32425 32923 32928\nf 32426 32428 32427\nf 32429 32430 32431\nf 32430 32433 32431\nf 32431 32433 32929\nf 32431 32929 32926\nf 32432 32928 32930\nf 32432 32930 32434\nf 32433 32437 32935\nf 32433 32933 32929\nf 32433 32935 32933\nf 32434 32436 32435\nf 32434 32930 32436\nf 32435 32436 32934\nf 32435 32934 32438\nf 32436 32930 32931\nf 32436 32931 32934\nf 32437 32439 32937\nf 32437 32937 32935\nf 32438 32934 32936\nf 32438 32936 32440\nf 32439 32441 32939\nf 32439 32939 32937\nf 32440 32936 32938\nf 32440 32938 32442\nf 32441 32443 32941\nf 32441 32941 32939\nf 32442 32938 32940\nf 32442 32940 32444\nf 32443 32446 32944\nf 32443 32944 32941\nf 32444 32940 32942\nf 32444 32942 32445\nf 32445 32942 32943\nf 32445 32943 32945\nf 32445 32945 32447\nf 32446 32448 32946\nf 32446 32946 32944\nf 32447 32945 32449\nf 32448 32450 32948\nf 32448 32948 32946\nf 32449 32945 32947\nf 32449 32947 32451\nf 32450 32452 32950\nf 32450 32950 32948\nf 32451 32947 32949\nf 32451 32949 32453\nf 32452 32454 32952\nf 32452 32952 32950\nf 32453 32949 32951\nf 32453 32951 32455\nf 32454 32456 32955\nf 32454 32955 32952\nf 32455 32951 32954\nf 32455 32954 32457\nf 32456 32458 32955\nf 32457 32954 32958\nf 32457 32958 32461\nf 32458 32459 32460\nf 32458 32460 32955\nf 32459 32463 32959\nf 32459 32959 32460\nf 32460 32956 32955\nf 32460 32959 32956\nf 32461 32958 32960\nf 32461 32960 32462\nf 32462 32960 32961\nf 32462 32961 32963\nf 32462 32963 32464\nf 32463 32465 32964\nf 32463 32962 32959\nf 32463 32964 32962\nf 32464 32963 32466\nf 32465 32467 32966\nf 32465 32966 32964\nf 32466 32963 32965\nf 32466 32965 32468\nf 32467 32469 32968\nf 32467 32968 32966\nf 32468 32965 32967\nf 32468 32967 32470\nf 32469 32471 32970\nf 32469 32970 32968\nf 32470 32967 32969\nf 32470 32969 32472\nf 32471 32473 32972\nf 32471 32972 32970\nf 32472 32969 32971\nf 32472 32971 32474\nf 32473 32475 32974\nf 32473 32974 32972\nf 32474 32971 32973\nf 32474 32973 32476\nf 32475 32477 32976\nf 32475 32976 32974\nf 32476 32973 32975\nf 32476 32975 32478\nf 32477 32479 32978\nf 32477 32978 32976\nf 32478 32975 32977\nf 32478 32977 32481\nf 32479 32480 32978\nf 32480 32482 32981\nf 32480 32979 32978\nf 32480 32981 32979\nf 32481 32977 32980\nf 32481 32980 32483\nf 32482 32484 32983\nf 32482 32983 32981\nf 32483 32980 32982\nf 32483 32982 32485\nf 32484 32486 32985\nf 32484 32985 32983\nf 32485 32982 32984\nf 32485 32984 32487\nf 32486 32488 32987\nf 32486 32987 32985\nf 32487 32984 32986\nf 32487 32986 32489\nf 32488 32490 32989\nf 32488 32989 32987\nf 32489 32986 32988\nf 32489 32988 32492\nf 32490 32491 32989\nf 32491 32493 32992\nf 32491 32990 32989\nf 32491 32992 32990\nf 32492 32988 32991\nf 32492 32991 32495\nf 32493 32494 32992\nf 32494 32498 32995\nf 32494 32993 32992\nf 32494 32995 32993\nf 32495 32500 32496\nf 32495 32991 32994\nf 32495 32994 32997\nf 32495 32997 32500\nf 32496 32500 32501\nf 32496 32501 32497\nf 32497 32501 32999\nf 32497 32996 32499\nf 32497 32999 32996\nf 32498 32499 32995\nf 32499 32996 32995\nf 32500 32997 32998\nf 32500 32998 32501\nf 32501 32998 33000\nf 32501 33000 32999\nf 32502 32503 33001\nf 32502 33001 33014\nf 32502 33014 32515\nf 32503 32504 33002\nf 32503 33002 33001\nf 32504 32505 33003\nf 32504 33003 33002\nf 32505 32506 33004\nf 32505 33004 33003\nf 32506 32507 33005\nf 32506 33005 33004\nf 32507 32508 33006\nf 32507 33006 33005\nf 32508 32509 33007\nf 32508 33007 33006\nf 32509 32510 33008\nf 32509 33008 33007\nf 32510 32511 33009\nf 32510 33009 33008\nf 32511 32512 33010\nf 32511 33010 33009\nf 32512 32517 33011\nf 32512 33011 33010\nf 32513 32514 33012\nf 32513 33012 33022\nf 32513 33022 32521\nf 32514 32516 33013\nf 32514 33013 33012\nf 32515 33014 32516\nf 32516 33014 33015\nf 32516 33015 33013\nf 32517 32518 33019\nf 32517 33017 33011\nf 32517 33019 33017\nf 32518 32519 33019\nf 32519 32523 33020\nf 32519 33020 33019\nf 32520 32522 33021\nf 32520 33021 33027\nf 32520 33027 32526\nf 32521 33022 32522\nf 32522 33022 33023\nf 32522 33023 33021\nf 32523 32524 33026\nf 32523 33025 33020\nf 32523 33026 33025\nf 32524 32525 33026\nf 32525 32527 32528\nf 32525 32528 33026\nf 32526 33027 32529\nf 32527 32530 33031\nf 32527 33029 32528\nf 32527 33031 33029\nf 32528 33028 33026\nf 32528 33029 33028\nf 32529 33027 33030\nf 32529 33030 32531\nf 32530 32535 33036\nf 32530 33036 33031\nf 32531 33030 33032\nf 32531 33032 33033\nf 32531 33033 32532\nf 32532 33033 33034\nf 32532 33034 32533\nf 32533 33034 32537\nf 32534 32541 33043\nf 32534 33035 33037\nf 32534 33037 32536\nf 32534 33043 33035\nf 32535 32536 33036\nf 32536 33037 33036\nf 32537 33034 33038\nf 32537 33038 33040\nf 32537 33040 32538\nf 32538 33040 33041\nf 32538 33041 32539\nf 32539 33041 32543\nf 32540 32550 33053\nf 32540 33042 33044\nf 32540 33044 32542\nf 32540 33053 33042\nf 32541 32542 33043\nf 32542 33044 33043\nf 32543 33041 33045\nf 32543 33045 33047\nf 32543 33047 32544\nf 32544 33047 33048\nf 32544 33048 32545\nf 32545 33048 33049\nf 32545 33049 32546\nf 32546 33049 33050\nf 32546 33050 32547\nf 32547 33050 32552\nf 32548 32557 33061\nf 32548 33051 33052\nf 32548 33052 32549\nf 32548 33061 33051\nf 32549 33052 33054\nf 32549 33054 32551\nf 32550 32551 33053\nf 32551 33054 33053\nf 32552 33050 33055\nf 32552 33055 33057\nf 32552 33057 32553\nf 32553 33057 33058\nf 32553 33058 32554\nf 32554 33058 33059\nf 32554 33059 32555\nf 32555 33059 33060\nf 32555 33060 32556\nf 32556 33060 33062\nf 32556 33062 32558\nf 32557 32558 33061\nf 32558 33062 33061\nf 32559 32566 33063\nf 32559 33063 33068\nf 32559 33068 32564\nf 32560 32561 33064\nf 32560 33064 33072\nf 32560 33072 32568\nf 32561 32562 33065\nf 32561 33065 33064\nf 32562 32563 33066\nf 32562 33066 33065\nf 32563 32569 33067\nf 32563 33067 33066\nf 32564 33068 32565\nf 32565 33068 33069\nf 32565 33069 33075\nf 32565 33075 32571\nf 32566 32567 33071\nf 32566 33070 33063\nf 32566 33071 33070\nf 32567 32573 33071\nf 32568 33072 32575\nf 32569 32570 33074\nf 32569 33073 33067\nf 32569 33074 33073\nf 32570 32576 33074\nf 32571 33075 32572\nf 32572 33075 33076\nf 32572 33076 33082\nf 32572 33082 32578\nf 32573 32574 33078\nf 32573 33077 33071\nf 32573 33078 33077\nf 32574 32579 33078\nf 32575 33072 33079\nf 32575 33079 32580\nf 32576 32577 33081\nf 32576 33080 33074\nf 32576 33081 33080\nf 32577 32581 33081\nf 32578 33082 32582\nf 32579 32583 33087\nf 32579 33083 33078\nf 32579 33087 33083\nf 32580 33079 33084\nf 32580 33084 32584\nf 32581 32586 33090\nf 32581 33085 33081\nf 32581 33090 33085\nf 32582 33082 33086\nf 32582 33086 32587\nf 32583 32588 33092\nf 32583 33092 33087\nf 32584 33084 33088\nf 32584 33088 32585\nf 32585 33088 33089\nf 32585 33089 33093\nf 32585 33093 32589\nf 32586 32590 33095\nf 32586 33095 33090\nf 32587 33086 33091\nf 32587 33091 32591\nf 32588 32592 33097\nf 32588 33097 33092\nf 32589 33093 32593\nf 32590 32594 33099\nf 32590 33099 33095\nf 32591 33091 33096\nf 32591 33096 32596\nf 32592 32597 33102\nf 32592 33102 33097\nf 32593 33093 33098\nf 32593 33098 32598\nf 32594 32595 33100\nf 32594 33100 33099\nf 32595 32599 33100\nf 32596 33096 33101\nf 32596 33101 32600\nf 32597 32602 33108\nf 32597 33108 33102\nf 32598 33098 33103\nf 32598 33103 32603\nf 32599 32604 33104\nf 32599 33104 33100\nf 32600 33101 33107\nf 32600 33107 33111\nf 32600 33111 32601\nf 32601 32609 32607\nf 32601 33111 32609\nf 32602 32610 33112\nf 32602 33112 33108\nf 32603 33103 33109\nf 32603 33109 32611\nf 32604 32605 32606\nf 32604 32606 33104\nf 32605 32612 33110\nf 32605 33110 32606\nf 32606 33105 33104\nf 32606 33110 33105\nf 32607 32609 32608\nf 32608 32609 32613\nf 32609 33111 32613\nf 32610 32614 33116\nf 32610 33116 33112\nf 32611 33109 33113\nf 32611 33113 32616\nf 32612 32617 33119\nf 32612 33114 33110\nf 32612 33119 33114\nf 32613 33111 33115\nf 32613 33115 32618\nf 32614 32615 33117\nf 32614 33117 33116\nf 32615 32619 33117\nf 32616 33113 33118\nf 32616 33118 32625\nf 32617 32627 33129\nf 32617 33129 33119\nf 32618 33115 33120\nf 32618 33120 32629\nf 32619 32620 33122\nf 32619 33121 33117\nf 32619 33122 33121\nf 32620 32621 33122\nf 32621 32622 33123\nf 32621 33123 33122\nf 32622 32630 33124\nf 32622 33124 33123\nf 32623 32624 33125\nf 32623 33125 33215\nf 32623 33215 32713\nf 32624 32626 33126\nf 32624 33126 33125\nf 32625 33118 33127\nf 32625 33127 32626\nf 32626 33127 33128\nf 32626 33128 33126\nf 32627 32628 32717\nf 32627 32717 33217\nf 32627 33217 33129\nf 32628 32715 32717\nf 32629 33120 33130\nf 32629 33130 32718\nf 32630 32631 33132\nf 32630 33131 33124\nf 32630 33132 33131\nf 32631 32632 33132\nf 32632 32633 33134\nf 32632 33134 33132\nf 32633 32634 33135\nf 32633 33135 33134\nf 32634 32635 33136\nf 32634 33136 33135\nf 32635 32636 33137\nf 32635 33137 33136\nf 32636 32637 33138\nf 32636 33138 33137\nf 32637 32638 33139\nf 32637 33139 33138\nf 32638 32639 33140\nf 32638 33140 33139\nf 32639 32640 33141\nf 32639 33141 33140\nf 32640 32641 33142\nf 32640 33142 33141\nf 32641 32642 33143\nf 32641 33143 33142\nf 32642 32643 33144\nf 32642 33144 33143\nf 32643 32644 33145\nf 32643 33145 33144\nf 32644 32645 33146\nf 32644 33146 33145\nf 32645 32646 33147\nf 32645 33147 33146\nf 32646 32647 33148\nf 32646 33148 33147\nf 32647 32648 33149\nf 32647 33149 33148\nf 32648 32649 33150\nf 32648 33150 33149\nf 32649 32650 33151\nf 32649 33151 33150\nf 32650 32651 33152\nf 32650 33152 33151\nf 32651 32652 33153\nf 32651 33153 33152\nf 32652 32653 33154\nf 32652 33154 33153\nf 32653 32654 33155\nf 32653 33155 33154\nf 32654 32655 33156\nf 32654 33156 33155\nf 32655 32656 33157\nf 32655 33157 33156\nf 32656 32657 33158\nf 32656 33158 33157\nf 32657 32658 33159\nf 32657 33159 33158\nf 32658 32659 33160\nf 32658 33160 33159\nf 32659 32660 33161\nf 32659 33161 33160\nf 32660 32661 33162\nf 32660 33162 33161\nf 32661 32662 33163\nf 32661 33163 33162\nf 32662 32663 33164\nf 32662 33164 33163\nf 32663 32664 33165\nf 32663 33165 33164\nf 32664 32665 33166\nf 32664 33166 33165\nf 32665 32666 33167\nf 32665 33167 33166\nf 32666 32667 33168\nf 32666 33168 33167\nf 32667 32668 33169\nf 32667 33169 33168\nf 32668 32669 33170\nf 32668 33170 33169\nf 32669 32670 33171\nf 32669 33171 33170\nf 32670 32671 33172\nf 32670 33172 33171\nf 32671 32672 33173\nf 32671 33173 33172\nf 32672 32673 33174\nf 32672 33174 33173\nf 32673 32674 33175\nf 32673 33175 33174\nf 32674 32675 33176\nf 32674 33176 33175\nf 32675 32676 33177\nf 32675 33177 33176\nf 32676 32677 33178\nf 32676 33178 33177\nf 32677 32678 33179\nf 32677 33179 33178\nf 32678 32679 33180\nf 32678 33180 33179\nf 32679 32680 33181\nf 32679 33181 33180\nf 32680 32681 33182\nf 32680 33182 33181\nf 32681 32682 33183\nf 32681 33183 33182\nf 32682 32683 33184\nf 32682 33184 33183\nf 32683 32684 33185\nf 32683 33185 33184\nf 32684 32685 33186\nf 32684 33186 33185\nf 32685 32686 33187\nf 32685 33187 33186\nf 32686 32687 33188\nf 32686 33188 33187\nf 32687 32688 33189\nf 32687 33189 33188\nf 32688 32689 33190\nf 32688 33190 33189\nf 32689 32690 33191\nf 32689 33191 33190\nf 32690 32691 33192\nf 32690 33192 33191\nf 32691 32692 33193\nf 32691 33193 33192\nf 32692 32693 33194\nf 32692 33194 33193\nf 32693 32694 33195\nf 32693 33195 33194\nf 32694 32695 33196\nf 32694 33196 33195\nf 32695 32696 33197\nf 32695 33197 33196\nf 32696 32697 33198\nf 32696 33198 33197\nf 32697 32698 33199\nf 32697 33199 33198\nf 32698 32699 33200\nf 32698 33200 33199\nf 32699 32700 33201\nf 32699 33201 33200\nf 32700 32701 33202\nf 32700 33202 33201\nf 32701 32702 33203\nf 32701 33203 33202\nf 32702 32703 33204\nf 32702 33204 33203\nf 32703 32704 33205\nf 32703 33205 33204\nf 32704 32705 33206\nf 32704 33206 33205\nf 32705 32706 33207\nf 32705 33207 33206\nf 32706 32707 33208\nf 32706 33208 33207\nf 32707 32708 33209\nf 32707 33209 33208\nf 32708 32709 33210\nf 32708 33210 33209\nf 32709 32710 33211\nf 32709 33211 33210\nf 32710 32711 33212\nf 32710 33212 33211\nf 32711 32712 33213\nf 32711 33213 33212\nf 32712 32714 33214\nf 32712 33214 33213\nf 32713 33215 32714\nf 32714 33215 33216\nf 32714 33216 33214\nf 32715 32716 32717\nf 32716 32719 33217\nf 32716 33217 32717\nf 32718 33130 33218\nf 32718 33218 32720\nf 32719 32721 33221\nf 32719 33219 33217\nf 32719 33221 33219\nf 32720 33218 33220\nf 32720 33220 32722\nf 32721 32724 33224\nf 32721 33224 33221\nf 32722 33220 33222\nf 32722 33222 33223\nf 32722 33223 32723\nf 32723 33223 32726\nf 32724 32725 33224\nf 32725 32727 33227\nf 32725 33225 33224\nf 32725 33227 33225\nf 32726 33223 33226\nf 32726 33226 32729\nf 32727 32728 33227\nf 32728 32735 33235\nf 32728 33228 33227\nf 32728 33235 33228\nf 32729 33226 33229\nf 32729 33229 33230\nf 32729 33230 32730\nf 32730 33230 32737\nf 32731 32825 33325\nf 32731 33231 33232\nf 32731 33232 32732\nf 32731 33325 33231\nf 32732 33232 33233\nf 32732 33233 32733\nf 32733 33233 33234\nf 32733 33234 32734\nf 32734 33234 33236\nf 32734 33236 32736\nf 32735 32736 33235\nf 32736 33236 33235\nf 32737 33230 33237\nf 32737 33237 33238\nf 32737 33238 32738\nf 32738 33238 33239\nf 32738 33239 32739\nf 32739 33239 32827\nf 32740 32829 33330\nf 32740 33240 33241\nf 32740 33241 32741\nf 32740 33330 33240\nf 32741 33241 33242\nf 32741 33242 32742\nf 32742 33242 33243\nf 32742 33243 32743\nf 32743 33243 33244\nf 32743 33244 32744\nf 32744 33244 33245\nf 32744 33245 32745\nf 32745 33245 33246\nf 32745 33246 32746\nf 32746 33246 33247\nf 32746 33247 32747\nf 32747 33247 33248\nf 32747 33248 32748\nf 32748 33248 33249\nf 32748 33249 32749\nf 32749 33249 33250\nf 32749 33250 32750\nf 32750 33250 33251\nf 32750 33251 32751\nf 32751 33251 33252\nf 32751 33252 32752\nf 32752 33252 33253\nf 32752 33253 32753\nf 32753 33253 33254\nf 32753 33254 32754\nf 32754 33254 33255\nf 32754 33255 32755\nf 32755 33255 33256\nf 32755 33256 32756\nf 32756 33256 33257\nf 32756 33257 32757\nf 32757 33257 33258\nf 32757 33258 32758\nf 32758 33258 33259\nf 32758 33259 32759\nf 32759 33259 33260\nf 32759 33260 32760\nf 32760 33260 33261\nf 32760 33261 32761\nf 32761 33261 33262\nf 32761 33262 32762\nf 32762 33262 33263\nf 32762 33263 32763\nf 32763 33263 33264\nf 32763 33264 32764\nf 32764 33264 33265\nf 32764 33265 32765\nf 32765 33265 33266\nf 32765 33266 32766\nf 32766 33266 33267\nf 32766 33267 32767\nf 32767 33267 33268\nf 32767 33268 32768\nf 32768 33268 33269\nf 32768 33269 32769\nf 32769 33269 33270\nf 32769 33270 32770\nf 32770 33270 33271\nf 32770 33271 32771\nf 32771 33271 33272\nf 32771 33272 32772\nf 32772 33272 33273\nf 32772 33273 32773\nf 32773 33273 33274\nf 32773 33274 32774\nf 32774 33274 33275\nf 32774 33275 32775\nf 32775 33275 33276\nf 32775 33276 32776\nf 32776 33276 33277\nf 32776 33277 32777\nf 32777 33277 33278\nf 32777 33278 32778\nf 32778 33278 33279\nf 32778 33279 32779\nf 32779 33279 33280\nf 32779 33280 32780\nf 32780 33280 33281\nf 32780 33281 32781\nf 32781 33281 33282\nf 32781 33282 32782\nf 32782 33282 33283\nf 32782 33283 32783\nf 32783 33283 33284\nf 32783 33284 32784\nf 32784 33284 33285\nf 32784 33285 32785\nf 32785 33285 33286\nf 32785 33286 32786\nf 32786 33286 33287\nf 32786 33287 32787\nf 32787 33287 33288\nf 32787 33288 32788\nf 32788 33288 33289\nf 32788 33289 32789\nf 32789 33289 33290\nf 32789 33290 32790\nf 32790 33290 33291\nf 32790 33291 32791\nf 32791 33291 33292\nf 32791 33292 32792\nf 32792 33292 33293\nf 32792 33293 32793\nf 32793 33293 33294\nf 32793 33294 32794\nf 32794 33294 33295\nf 32794 33295 32795\nf 32795 33295 33296\nf 32795 33296 32796\nf 32796 33296 33297\nf 32796 33297 32797\nf 32797 33297 33298\nf 32797 33298 32798\nf 32798 33298 33299\nf 32798 33299 32799\nf 32799 33299 33300\nf 32799 33300 32800\nf 32800 33300 33301\nf 32800 33301 32801\nf 32801 33301 33302\nf 32801 33302 32802\nf 32802 33302 33303\nf 32802 33303 32803\nf 32803 33303 33304\nf 32803 33304 32804\nf 32804 33304 33305\nf 32804 33305 32805\nf 32805 33305 33306\nf 32805 33306 32806\nf 32806 33306 33307\nf 32806 33307 32807\nf 32807 33307 33308\nf 32807 33308 32808\nf 32808 33308 33309\nf 32808 33309 32809\nf 32809 33309 33310\nf 32809 33310 32810\nf 32810 33310 33311\nf 32810 33311 32811\nf 32811 33311 33312\nf 32811 33312 32812\nf 32812 33312 33313\nf 32812 33313 32813\nf 32813 33313 33314\nf 32813 33314 32814\nf 32814 33314 33315\nf 32814 33315 32815\nf 32815 33315 33316\nf 32815 33316 32816\nf 32816 33316 33317\nf 32816 33317 32817\nf 32817 33317 33318\nf 32817 33318 32818\nf 32818 33318 33319\nf 32818 33319 32819\nf 32819 33319 33320\nf 32819 33320 32820\nf 32820 33320 33321\nf 32820 33321 32821\nf 32821 33321 33322\nf 32821 33322 32822\nf 32822 33322 33323\nf 32822 33323 32823\nf 32823 33323 33324\nf 32823 33324 32824\nf 32824 33324 33326\nf 32824 33326 32826\nf 32825 32826 33325\nf 32826 33326 33325\nf 32827 33239 33327\nf 32827 33327 33329\nf 32827 33329 32828\nf 32828 33329 32831\nf 32829 32830 33330\nf 32830 32834 33335\nf 32830 33331 33330\nf 32830 33335 33331\nf 32831 33329 33332\nf 32831 33332 33333\nf 32831 33333 32832\nf 32832 33333 33334\nf 32832 33334 32833\nf 32833 33334 33336\nf 32833 33336 32835\nf 32834 32835 33335\nf 32835 33336 33335\nf 32836 32837 33337\nf 32836 33337 33342\nf 32836 33342 32841\nf 32837 32838 33338\nf 32837 33338 33337\nf 32838 32839 33339\nf 32838 33339 33338\nf 32839 32840 33340\nf 32839 33340 33339\nf 32840 32842 33341\nf 32840 33341 33340\nf 32841 33342 32844\nf 32842 32843 33344\nf 32842 33343 33341\nf 32842 33344 33343\nf 32843 32846 33344\nf 32844 33342 33345\nf 32844 33345 32845\nf 32845 33345 33346\nf 32845 33346 33348\nf 32845 33348 32847\nf 32846 32848 33349\nf 32846 33347 33344\nf 32846 33349 33347\nf 32847 33348 32850\nf 32848 32849 33350\nf 32848 33350 33349\nf 32849 32851 33350\nf 32850 33348 33351\nf 32850 33351 32852\nf 32851 32853 33354\nf 32851 33352 33350\nf 32851 33354 33352\nf 32852 33351 33353\nf 32852 33353 32854\nf 32853 32855 33356\nf 32853 33356 33354\nf 32854 33353 33355\nf 32854 33355 32856\nf 32855 32857 33358\nf 32855 33358 33356\nf 32856 33355 33357\nf 32856 33357 32858\nf 32857 32859 33360\nf 32857 33360 33358\nf 32858 33357 33359\nf 32858 33359 32860\nf 32859 32861 33362\nf 32859 33362 33360\nf 32860 33359 33361\nf 32860 33361 32862\nf 32861 32863 33364\nf 32861 33364 33362\nf 32862 33361 33363\nf 32862 33363 32864\nf 32863 32865 33366\nf 32863 33366 33364\nf 32864 33363 33365\nf 32864 33365 32867\nf 32865 32866 33366\nf 32866 32868 33370\nf 32866 33367 33366\nf 32866 33370 33367\nf 32867 33365 33369\nf 32867 33369 32869\nf 32868 32870 33372\nf 32868 33372 33370\nf 32869 33369 33371\nf 32869 33371 32871\nf 32870 32872 33374\nf 32870 33374 33372\nf 32871 33371 33373\nf 32871 33373 32873\nf 32872 32875 33377\nf 32872 33377 33374\nf 32873 33373 33375\nf 32873 33375 33376\nf 32873 33376 32874\nf 32874 33376 32876\nf 32875 32877 33379\nf 32875 33379 33377\nf 32876 33376 33378\nf 32876 33378 32878\nf 32877 32879 33381\nf 32877 33381 33379\nf 32878 33378 33380\nf 32878 33380 32881\nf 32879 32880 33381\nf 32880 32882 33384\nf 32880 33382 33381\nf 32880 33384 33382\nf 32881 33380 33383\nf 32881 33383 32883\nf 32882 32884 33386\nf 32882 33386 33384\nf 32883 33383 33385\nf 32883 33385 32885\nf 32884 32886 33388\nf 32884 33388 33386\nf 32885 33385 33387\nf 32885 33387 32887\nf 32886 32888 33390\nf 32886 33390 33388\nf 32887 33387 33389\nf 32887 33389 32889\nf 32888 32890 33392\nf 32888 33392 33390\nf 32889 33389 33391\nf 32889 33391 32891\nf 32890 32892 33394\nf 32890 33394 33392\nf 32891 33391 33393\nf 32891 33393 32893\nf 32892 32894 33396\nf 32892 33396 33394\nf 32893 33393 33395\nf 32893 33395 32896\nf 32894 32895 33398\nf 32894 33398 33396\nf 32895 32897 32898\nf 32895 32898 33398\nf 32896 33395 33397\nf 32896 33397 32899\nf 32897 32900 33401\nf 32897 33401 32898\nf 32898 33399 33398\nf 32898 33401 33399\nf 32899 33397 33400\nf 32899 33400 32901\nf 32900 32902 33404\nf 32900 33404 33401\nf 32901 33400 33403\nf 32901 33403 32903\nf 32902 32905 33406\nf 32902 33406 33404\nf 32903 32907 32904\nf 32903 33403 33405\nf 32903 33405 33407\nf 32903 33407 32907\nf 32904 32907 32906\nf 32905 32909 33409\nf 32905 33409 33406\nf 32906 32907 32908\nf 32907 33407 33408\nf 32907 33408 32908\nf 32908 32912 32911\nf 32908 33408 32912\nf 32909 32910 33409\nf 32910 32913 33413\nf 32910 33410 33409\nf 32910 33413 33410\nf 32911 32912 32916\nf 32911 32916 32914\nf 32912 32915 32916\nf 32912 33408 33411\nf 32912 33411 32915\nf 32913 32914 33417\nf 32913 33417 33413\nf 32914 32916 33417\nf 32915 33411 33415\nf 32915 33415 33416\nf 32915 33416 32916\nf 32916 33416 33418\nf 32916 33418 33417\nf 32917 32918 33432\nf 32917 32919 32918\nf 32917 33432 33433\nf 32917 33433 32922\nf 32918 32919 32920\nf 32918 32920 33428\nf 32918 33426 33432\nf 32918 33428 33426\nf 32919 32925 32920\nf 32920 32921 33430\nf 32920 32925 32927\nf 32920 32927 32921\nf 32920 33430 33428\nf 32921 32927 33437\nf 32921 33435 33430\nf 32921 33437 33435\nf 32922 32924 32923\nf 32922 33433 32924\nf 32923 32924 33436\nf 32923 33436 32928\nf 32924 33433 33436\nf 32925 32926 32927\nf 32926 32929 32927\nf 32927 32929 33437\nf 32928 33436 33438\nf 32928 33438 32930\nf 32929 32933 33443\nf 32929 33441 33437\nf 32929 33443 33441\nf 32930 32932 32931\nf 32930 33438 32932\nf 32931 32932 33442\nf 32931 33442 32934\nf 32932 33438 33439\nf 32932 33439 33442\nf 32933 32935 33445\nf 32933 33445 33443\nf 32934 33442 33444\nf 32934 33444 32936\nf 32935 32937 33447\nf 32935 33447 33445\nf 32936 33444 33446\nf 32936 33446 32938\nf 32937 32939 33449\nf 32937 33449 33447\nf 32938 33446 33448\nf 32938 33448 32940\nf 32939 32941 33451\nf 32939 33451 33449\nf 32940 33448 33450\nf 32940 33450 32942\nf 32941 32944 33454\nf 32941 33454 33451\nf 32942 33450 33452\nf 32942 33452 32943\nf 32943 33452 33453\nf 32943 33453 33455\nf 32943 33455 32945\nf 32944 32946 33456\nf 32944 33456 33454\nf 32945 33455 32947\nf 32946 32948 33458\nf 32946 33458 33456\nf 32947 33455 33457\nf 32947 33457 32949\nf 32948 32950 33460\nf 32948 33460 33458\nf 32949 33457 33459\nf 32949 33459 32951\nf 32950 32952 33460\nf 32951 33459 33462\nf 32951 33462 32954\nf 32952 32953 33460\nf 32952 32955 32957\nf 32952 32957 32953\nf 32953 32957 33463\nf 32953 33461 33460\nf 32953 33463 33461\nf 32954 33462 33464\nf 32954 33464 32958\nf 32955 32956 32957\nf 32956 32959 33465\nf 32956 33465 32957\nf 32957 33465 33463\nf 32958 33464 33466\nf 32958 33466 32960\nf 32959 32962 33470\nf 32959 33467 33465\nf 32959 33470 33467\nf 32960 33466 33468\nf 32960 33468 32961\nf 32961 33468 33469\nf 32961 33469 33471\nf 32961 33471 32963\nf 32962 32964 33473\nf 32962 33473 33470\nf 32963 33471 32965\nf 32964 32966 33475\nf 32964 33475 33473\nf 32965 33471 33474\nf 32965 33474 32967\nf 32966 32968 33477\nf 32966 33477 33475\nf 32967 33474 33476\nf 32967 33476 32969\nf 32968 32970 33479\nf 32968 33479 33477\nf 32969 33476 33478\nf 32969 33478 32971\nf 32970 32972 33481\nf 32970 33481 33479\nf 32971 33478 33480\nf 32971 33480 32973\nf 32972 32974 33483\nf 32972 33483 33481\nf 32973 33480 33482\nf 32973 33482 32975\nf 32974 32976 33485\nf 32974 33485 33483\nf 32975 33482 33484\nf 32975 33484 32977\nf 32976 32978 33487\nf 32976 33487 33485\nf 32977 33484 33486\nf 32977 33486 32980\nf 32978 32979 33487\nf 32979 32981 33490\nf 32979 33488 33487\nf 32979 33490 33488\nf 32980 33486 33489\nf 32980 33489 32982\nf 32981 32983 33492\nf 32981 33492 33490\nf 32982 33489 33491\nf 32982 33491 32984\nf 32983 32985 33494\nf 32983 33494 33492\nf 32984 33491 33493\nf 32984 33493 32986\nf 32985 32987 33496\nf 32985 33496 33494\nf 32986 33493 33495\nf 32986 33495 32988\nf 32987 32989 33498\nf 32987 33498 33496\nf 32988 33495 33497\nf 32988 33497 32991\nf 32989 32990 33498\nf 32990 32992 33502\nf 32990 33499 33498\nf 32990 33502 33499\nf 32991 33497 33500\nf 32991 33500 32994\nf 32992 32993 33502\nf 32993 32995 33506\nf 32993 33503 33502\nf 32993 33506 33503\nf 32994 33500 33504\nf 32994 33504 32997\nf 32995 32996 33506\nf 32996 32999 33511\nf 32996 33507 33506\nf 32996 33511 33507\nf 32997 33504 33509\nf 32997 33509 33510\nf 32997 33510 32998\nf 32998 33510 33512\nf 32998 33512 33000\nf 32999 33000 33511\nf 33000 33512 33511\nf 33001 33002 33517\nf 33001 33016 33014\nf 33001 33516 33016\nf 33001 33517 33516\nf 33002 33003 33518\nf 33002 33518 33517\nf 33003 33004 33519\nf 33003 33519 33518\nf 33004 33005 33520\nf 33004 33520 33519\nf 33005 33006 33521\nf 33005 33521 33520\nf 33006 33007 33522\nf 33006 33522 33521\nf 33007 33008 33523\nf 33007 33523 33522\nf 33008 33009 33524\nf 33008 33524 33523\nf 33009 33010 33525\nf 33009 33525 33524\nf 33010 33011 33526\nf 33010 33526 33525\nf 33011 33017 33018\nf 33011 33018 33526\nf 33012 33013 33528\nf 33012 33024 33022\nf 33012 33527 33024\nf 33012 33528 33527\nf 33013 33015 33530\nf 33013 33530 33528\nf 33014 33016 33015\nf 33015 33016 33529\nf 33015 33529 33530\nf 33016 33516 33529\nf 33017 33019 33532\nf 33017 33532 33018\nf 33018 33531 33526\nf 33018 33532 33531\nf 33019 33020 33533\nf 33019 33533 33532\nf 33020 33025 33534\nf 33020 33534 33533\nf 33021 33023 33536\nf 33021 33536 33540\nf 33021 33540 33027\nf 33022 33024 33023\nf 33023 33024 33535\nf 33023 33535 33536\nf 33024 33527 33535\nf 33025 33026 33539\nf 33025 33537 33534\nf 33025 33539 33537\nf 33026 33028 33539\nf 33027 33540 33030\nf 33028 33029 33542\nf 33028 33541 33539\nf 33028 33542 33541\nf 33029 33031 33542\nf 33030 33540 33543\nf 33030 33543 33032\nf 33031 33036 33550\nf 33031 33545 33542\nf 33031 33550 33545\nf 33032 33543 33547\nf 33032 33547 33548\nf 33032 33548 33033\nf 33033 33548 33034\nf 33034 33039 33038\nf 33034 33548 33039\nf 33035 33043 33557\nf 33035 33549 33551\nf 33035 33551 33037\nf 33035 33557 33549\nf 33036 33037 33550\nf 33037 33551 33550\nf 33038 33039 33554\nf 33038 33554 33040\nf 33039 33548 33553\nf 33039 33553 33554\nf 33040 33554 33555\nf 33040 33555 33041\nf 33041 33046 33045\nf 33041 33555 33046\nf 33042 33053 33566\nf 33042 33556 33558\nf 33042 33558 33044\nf 33042 33566 33556\nf 33043 33044 33557\nf 33044 33558 33557\nf 33045 33046 33560\nf 33045 33560 33047\nf 33046 33555 33559\nf 33046 33559 33560\nf 33047 33560 33561\nf 33047 33561 33562\nf 33047 33562 33048\nf 33048 33562 33563\nf 33048 33563 33049\nf 33049 33563 33050\nf 33050 33056 33055\nf 33050 33563 33056\nf 33051 33061 33574\nf 33051 33564 33565\nf 33051 33565 33052\nf 33051 33574 33564\nf 33052 33565 33567\nf 33052 33567 33054\nf 33053 33054 33566\nf 33054 33567 33566\nf 33055 33056 33569\nf 33055 33569 33057\nf 33056 33563 33568\nf 33056 33568 33569\nf 33057 33569 33570\nf 33057 33570 33571\nf 33057 33571 33058\nf 33058 33571 33572\nf 33058 33572 33059\nf 33059 33572 33573\nf 33059 33573 33060\nf 33060 33573 33575\nf 33060 33575 33062\nf 33061 33062 33574\nf 33062 33575 33574\nf 33063 33070 33576\nf 33063 33576 33581\nf 33063 33581 33068\nf 33064 33065 33577\nf 33064 33577 33587\nf 33064 33587 33072\nf 33065 33066 33578\nf 33065 33578 33577\nf 33066 33067 33579\nf 33066 33579 33578\nf 33067 33073 33580\nf 33067 33580 33579\nf 33068 33581 33069\nf 33069 33581 33582\nf 33069 33582 33591\nf 33069 33591 33075\nf 33070 33071 33585\nf 33070 33584 33576\nf 33070 33585 33584\nf 33071 33077 33585\nf 33072 33587 33079\nf 33073 33074 33589\nf 33073 33588 33580\nf 33073 33589 33588\nf 33074 33080 33589\nf 33075 33591 33076\nf 33076 33591 33592\nf 33076 33592 33598\nf 33076 33598 33082\nf 33077 33078 33594\nf 33077 33593 33585\nf 33077 33594 33593\nf 33078 33083 33594\nf 33079 33587 33595\nf 33079 33595 33084\nf 33080 33081 33597\nf 33080 33596 33589\nf 33080 33597 33596\nf 33081 33085 33597\nf 33082 33598 33086\nf 33083 33087 33603\nf 33083 33599 33594\nf 33083 33603 33599\nf 33084 33595 33600\nf 33084 33600 33088\nf 33085 33090 33605\nf 33085 33601 33597\nf 33085 33605 33601\nf 33086 33598 33602\nf 33086 33602 33091\nf 33087 33092 33607\nf 33087 33607 33603\nf 33088 33600 33604\nf 33088 33604 33608\nf 33088 33608 33089\nf 33089 33094 33093\nf 33089 33608 33094\nf 33090 33095 33610\nf 33090 33610 33605\nf 33091 33602 33606\nf 33091 33606 33096\nf 33092 33097 33612\nf 33092 33612 33607\nf 33093 33094 33613\nf 33093 33613 33098\nf 33094 33608 33609\nf 33094 33609 33613\nf 33095 33099 33614\nf 33095 33614 33610\nf 33096 33606 33611\nf 33096 33611 33101\nf 33097 33102 33616\nf 33097 33616 33612\nf 33098 33613 33103\nf 33099 33100 33106\nf 33099 33106 33618\nf 33099 33618 33614\nf 33100 33104 33106\nf 33101 33611 33615\nf 33101 33615 33107\nf 33102 33108 33620\nf 33102 33620 33616\nf 33103 33613 33617\nf 33103 33617 33109\nf 33104 33105 33106\nf 33105 33110 33618\nf 33105 33618 33106\nf 33107 33615 33619\nf 33107 33619 33111\nf 33108 33112 33624\nf 33108 33624 33620\nf 33109 33617 33621\nf 33109 33621 33113\nf 33110 33114 33626\nf 33110 33622 33618\nf 33110 33626 33622\nf 33111 33619 33623\nf 33111 33623 33115\nf 33112 33116 33628\nf 33112 33628 33624\nf 33113 33621 33625\nf 33113 33625 33118\nf 33114 33119 33631\nf 33114 33631 33626\nf 33115 33623 33627\nf 33115 33627 33120\nf 33116 33117 33629\nf 33116 33629 33628\nf 33117 33121 33629\nf 33118 33625 33630\nf 33118 33630 33127\nf 33119 33129 33642\nf 33119 33642 33631\nf 33120 33627 33632\nf 33120 33632 33130\nf 33121 33122 33634\nf 33121 33633 33629\nf 33121 33634 33633\nf 33122 33123 33634\nf 33123 33124 33635\nf 33123 33635 33634\nf 33124 33131 33637\nf 33124 33636 33635\nf 33124 33637 33636\nf 33125 33126 33638\nf 33125 33638 33726\nf 33125 33726 33215\nf 33126 33128 33639\nf 33126 33639 33638\nf 33127 33630 33640\nf 33127 33640 33128\nf 33128 33640 33641\nf 33128 33641 33639\nf 33129 33217 33728\nf 33129 33728 33642\nf 33130 33632 33643\nf 33130 33643 33218\nf 33131 33132 33133\nf 33131 33133 33637\nf 33132 33134 33645\nf 33132 33645 33133\nf 33133 33644 33637\nf 33133 33645 33644\nf 33134 33135 33645\nf 33135 33136 33646\nf 33135 33646 33645\nf 33136 33137 33647\nf 33136 33647 33646\nf 33137 33138 33648\nf 33137 33648 33647\nf 33138 33139 33649\nf 33138 33649 33648\nf 33139 33140 33650\nf 33139 33650 33649\nf 33140 33141 33651\nf 33140 33651 33650\nf 33141 33142 33652\nf 33141 33652 33651\nf 33142 33143 33653\nf 33142 33653 33652\nf 33143 33144 33654\nf 33143 33654 33653\nf 33144 33145 33655\nf 33144 33655 33654\nf 33145 33146 33656\nf 33145 33656 33655\nf 33146 33147 33657\nf 33146 33657 33656\nf 33147 33148 33658\nf 33147 33658 33657\nf 33148 33149 33659\nf 33148 33659 33658\nf 33149 33150 33660\nf 33149 33660 33659\nf 33150 33151 33661\nf 33150 33661 33660\nf 33151 33152 33662\nf 33151 33662 33661\nf 33152 33153 33663\nf 33152 33663 33662\nf 33153 33154 33664\nf 33153 33664 33663\nf 33154 33155 33665\nf 33154 33665 33664\nf 33155 33156 33666\nf 33155 33666 33665\nf 33156 33157 33667\nf 33156 33667 33666\nf 33157 33158 33668\nf 33157 33668 33667\nf 33158 33159 33669\nf 33158 33669 33668\nf 33159 33160 33670\nf 33159 33670 33669\nf 33160 33161 33671\nf 33160 33671 33670\nf 33161 33162 33672\nf 33161 33672 33671\nf 33162 33163 33673\nf 33162 33673 33672\nf 33163 33164 33674\nf 33163 33674 33673\nf 33164 33165 33675\nf 33164 33675 33674\nf 33165 33166 33676\nf 33165 33676 33675\nf 33166 33167 33677\nf 33166 33677 33676\nf 33167 33168 33678\nf 33167 33678 33677\nf 33168 33169 33679\nf 33168 33679 33678\nf 33169 33170 33680\nf 33169 33680 33679\nf 33170 33171 33681\nf 33170 33681 33680\nf 33171 33172 33682\nf 33171 33682 33681\nf 33172 33173 33683\nf 33172 33683 33682\nf 33173 33174 33684\nf 33173 33684 33683\nf 33174 33175 33685\nf 33174 33685 33684\nf 33175 33176 33686\nf 33175 33686 33685\nf 33176 33177 33687\nf 33176 33687 33686\nf 33177 33178 33688\nf 33177 33688 33687\nf 33178 33179 33689\nf 33178 33689 33688\nf 33179 33180 33690\nf 33179 33690 33689\nf 33180 33181 33691\nf 33180 33691 33690\nf 33181 33182 33692\nf 33181 33692 33691\nf 33182 33183 33693\nf 33182 33693 33692\nf 33183 33184 33694\nf 33183 33694 33693\nf 33184 33185 33695\nf 33184 33695 33694\nf 33185 33186 33696\nf 33185 33696 33695\nf 33186 33187 33697\nf 33186 33697 33696\nf 33187 33188 33698\nf 33187 33698 33697\nf 33188 33189 33699\nf 33188 33699 33698\nf 33189 33190 33700\nf 33189 33700 33699\nf 33190 33191 33701\nf 33190 33701 33700\nf 33191 33192 33702\nf 33191 33702 33701\nf 33192 33193 33703\nf 33192 33703 33702\nf 33193 33194 33704\nf 33193 33704 33703\nf 33194 33195 33705\nf 33194 33705 33704\nf 33195 33196 33706\nf 33195 33706 33705\nf 33196 33197 33707\nf 33196 33707 33706\nf 33197 33198 33708\nf 33197 33708 33707\nf 33198 33199 33709\nf 33198 33709 33708\nf 33199 33200 33710\nf 33199 33710 33709\nf 33200 33201 33711\nf 33200 33711 33710\nf 33201 33202 33712\nf 33201 33712 33711\nf 33202 33203 33713\nf 33202 33713 33712\nf 33203 33204 33714\nf 33203 33714 33713\nf 33204 33205 33715\nf 33204 33715 33714\nf 33205 33206 33716\nf 33205 33716 33715\nf 33206 33207 33717\nf 33206 33717 33716\nf 33207 33208 33718\nf 33207 33718 33717\nf 33208 33209 33719\nf 33208 33719 33718\nf 33209 33210 33720\nf 33209 33720 33719\nf 33210 33211 33721\nf 33210 33721 33720\nf 33211 33212 33722\nf 33211 33722 33721\nf 33212 33213 33723\nf 33212 33723 33722\nf 33213 33214 33724\nf 33213 33724 33723\nf 33214 33216 33725\nf 33214 33725 33724\nf 33215 33726 33216\nf 33216 33726 33727\nf 33216 33727 33725\nf 33217 33219 33730\nf 33217 33730 33728\nf 33218 33643 33729\nf 33218 33729 33220\nf 33219 33221 33732\nf 33219 33732 33730\nf 33220 33729 33731\nf 33220 33731 33222\nf 33221 33224 33735\nf 33221 33735 33732\nf 33222 33731 33733\nf 33222 33733 33734\nf 33222 33734 33223\nf 33223 33734 33226\nf 33224 33225 33735\nf 33225 33227 33738\nf 33225 33736 33735\nf 33225 33738 33736\nf 33226 33734 33737\nf 33226 33737 33229\nf 33227 33228 33738\nf 33228 33235 33746\nf 33228 33739 33738\nf 33228 33746 33739\nf 33229 33737 33740\nf 33229 33740 33741\nf 33229 33741 33230\nf 33230 33741 33237\nf 33231 33325 33835\nf 33231 33742 33743\nf 33231 33743 33232\nf 33231 33835 33742\nf 33232 33743 33744\nf 33232 33744 33233\nf 33233 33744 33745\nf 33233 33745 33234\nf 33234 33745 33747\nf 33234 33747 33236\nf 33235 33236 33746\nf 33236 33747 33746\nf 33237 33741 33748\nf 33237 33748 33749\nf 33237 33749 33238\nf 33238 33749 33239\nf 33239 33328 33327\nf 33239 33749 33328\nf 33240 33330 33840\nf 33240 33750 33751\nf 33240 33751 33241\nf 33240 33840 33750\nf 33241 33751 33752\nf 33241 33752 33242\nf 33242 33752 33753\nf 33242 33753 33243\nf 33243 33753 33754\nf 33243 33754 33244\nf 33244 33754 33755\nf 33244 33755 33245\nf 33245 33755 33756\nf 33245 33756 33246\nf 33246 33756 33757\nf 33246 33757 33247\nf 33247 33757 33758\nf 33247 33758 33248\nf 33248 33758 33759\nf 33248 33759 33249\nf 33249 33759 33760\nf 33249 33760 33250\nf 33250 33760 33761\nf 33250 33761 33251\nf 33251 33761 33762\nf 33251 33762 33252\nf 33252 33762 33763\nf 33252 33763 33253\nf 33253 33763 33764\nf 33253 33764 33254\nf 33254 33764 33765\nf 33254 33765 33255\nf 33255 33765 33766\nf 33255 33766 33256\nf 33256 33766 33767\nf 33256 33767 33257\nf 33257 33767 33768\nf 33257 33768 33258\nf 33258 33768 33769\nf 33258 33769 33259\nf 33259 33769 33770\nf 33259 33770 33260\nf 33260 33770 33771\nf 33260 33771 33261\nf 33261 33771 33772\nf 33261 33772 33262\nf 33262 33772 33773\nf 33262 33773 33263\nf 33263 33773 33774\nf 33263 33774 33264\nf 33264 33774 33775\nf 33264 33775 33265\nf 33265 33775 33776\nf 33265 33776 33266\nf 33266 33776 33777\nf 33266 33777 33267\nf 33267 33777 33778\nf 33267 33778 33268\nf 33268 33778 33779\nf 33268 33779 33269\nf 33269 33779 33780\nf 33269 33780 33270\nf 33270 33780 33781\nf 33270 33781 33271\nf 33271 33781 33782\nf 33271 33782 33272\nf 33272 33782 33783\nf 33272 33783 33273\nf 33273 33783 33784\nf 33273 33784 33274\nf 33274 33784 33785\nf 33274 33785 33275\nf 33275 33785 33786\nf 33275 33786 33276\nf 33276 33786 33787\nf 33276 33787 33277\nf 33277 33787 33788\nf 33277 33788 33278\nf 33278 33788 33789\nf 33278 33789 33279\nf 33279 33789 33790\nf 33279 33790 33280\nf 33280 33790 33791\nf 33280 33791 33281\nf 33281 33791 33792\nf 33281 33792 33282\nf 33282 33792 33793\nf 33282 33793 33283\nf 33283 33793 33794\nf 33283 33794 33284\nf 33284 33794 33795\nf 33284 33795 33285\nf 33285 33795 33796\nf 33285 33796 33286\nf 33286 33796 33797\nf 33286 33797 33287\nf 33287 33797 33798\nf 33287 33798 33288\nf 33288 33798 33799\nf 33288 33799 33289\nf 33289 33799 33800\nf 33289 33800 33290\nf 33290 33800 33801\nf 33290 33801 33291\nf 33291 33801 33802\nf 33291 33802 33292\nf 33292 33802 33803\nf 33292 33803 33293\nf 33293 33803 33804\nf 33293 33804 33294\nf 33294 33804 33805\nf 33294 33805 33295\nf 33295 33805 33806\nf 33295 33806 33296\nf 33296 33806 33807\nf 33296 33807 33297\nf 33297 33807 33808\nf 33297 33808 33298\nf 33298 33808 33809\nf 33298 33809 33299\nf 33299 33809 33810\nf 33299 33810 33300\nf 33300 33810 33811\nf 33300 33811 33301\nf 33301 33811 33812\nf 33301 33812 33302\nf 33302 33812 33813\nf 33302 33813 33303\nf 33303 33813 33814\nf 33303 33814 33304\nf 33304 33814 33815\nf 33304 33815 33305\nf 33305 33815 33816\nf 33305 33816 33306\nf 33306 33816 33817\nf 33306 33817 33307\nf 33307 33817 33818\nf 33307 33818 33308\nf 33308 33818 33819\nf 33308 33819 33309\nf 33309 33819 33820\nf 33309 33820 33310\nf 33310 33820 33821\nf 33310 33821 33311\nf 33311 33821 33822\nf 33311 33822 33312\nf 33312 33822 33823\nf 33312 33823 33313\nf 33313 33823 33824\nf 33313 33824 33314\nf 33314 33824 33825\nf 33314 33825 33315\nf 33315 33825 33826\nf 33315 33826 33316\nf 33316 33826 33827\nf 33316 33827 33317\nf 33317 33827 33828\nf 33317 33828 33318\nf 33318 33828 33829\nf 33318 33829 33319\nf 33319 33829 33830\nf 33319 33830 33320\nf 33320 33830 33831\nf 33320 33831 33321\nf 33321 33831 33832\nf 33321 33832 33322\nf 33322 33832 33833\nf 33322 33833 33323\nf 33323 33833 33834\nf 33323 33834 33324\nf 33324 33834 33836\nf 33324 33836 33326\nf 33325 33326 33835\nf 33326 33836 33835\nf 33327 33328 33838\nf 33327 33838 33329\nf 33328 33749 33837\nf 33328 33837 33838\nf 33329 33838 33839\nf 33329 33839 33332\nf 33330 33331 33840\nf 33331 33335 33845\nf 33331 33841 33840\nf 33331 33845 33841\nf 33332 33839 33842\nf 33332 33842 33843\nf 33332 33843 33333\nf 33333 33843 33844\nf 33333 33844 33334\nf 33334 33844 33846\nf 33334 33846 33336\nf 33335 33336 33845\nf 33336 33846 33845\nf 33337 33338 33848\nf 33337 33848 33853\nf 33337 33853 33342\nf 33338 33339 33849\nf 33338 33849 33848\nf 33339 33340 33850\nf 33339 33850 33849\nf 33340 33341 33851\nf 33340 33851 33850\nf 33341 33343 33852\nf 33341 33852 33851\nf 33342 33853 33345\nf 33343 33344 33855\nf 33343 33854 33852\nf 33343 33855 33854\nf 33344 33347 33855\nf 33345 33853 33856\nf 33345 33856 33346\nf 33346 33856 33857\nf 33346 33857 33859\nf 33346 33859 33348\nf 33347 33349 33860\nf 33347 33858 33855\nf 33347 33860 33858\nf 33348 33859 33351\nf 33349 33350 33861\nf 33349 33861 33860\nf 33350 33352 33861\nf 33351 33859 33862\nf 33351 33862 33353\nf 33352 33354 33865\nf 33352 33863 33861\nf 33352 33865 33863\nf 33353 33862 33864\nf 33353 33864 33355\nf 33354 33356 33867\nf 33354 33867 33865\nf 33355 33864 33866\nf 33355 33866 33357\nf 33356 33358 33869\nf 33356 33869 33867\nf 33357 33866 33868\nf 33357 33868 33359\nf 33358 33360 33871\nf 33358 33871 33869\nf 33359 33868 33870\nf 33359 33870 33361\nf 33360 33362 33873\nf 33360 33873 33871\nf 33361 33870 33872\nf 33361 33872 33363\nf 33362 33364 33875\nf 33362 33875 33873\nf 33363 33872 33874\nf 33363 33874 33365\nf 33364 33366 33875\nf 33365 33874 33877\nf 33365 33877 33369\nf 33366 33367 33368\nf 33366 33368 33875\nf 33367 33370 33878\nf 33367 33878 33368\nf 33368 33876 33875\nf 33368 33878 33876\nf 33369 33877 33879\nf 33369 33879 33371\nf 33370 33372 33882\nf 33370 33880 33878\nf 33370 33882 33880\nf 33371 33879 33881\nf 33371 33881 33373\nf 33372 33374 33884\nf 33372 33884 33882\nf 33373 33881 33883\nf 33373 33883 33375\nf 33374 33377 33887\nf 33374 33887 33884\nf 33375 33883 33885\nf 33375 33885 33886\nf 33375 33886 33376\nf 33376 33886 33378\nf 33377 33379 33889\nf 33377 33889 33887\nf 33378 33886 33888\nf 33378 33888 33380\nf 33379 33381 33891\nf 33379 33891 33889\nf 33380 33888 33890\nf 33380 33890 33383\nf 33381 33382 33891\nf 33382 33384 33894\nf 33382 33892 33891\nf 33382 33894 33892\nf 33383 33890 33893\nf 33383 33893 33385\nf 33384 33386 33896\nf 33384 33896 33894\nf 33385 33893 33895\nf 33385 33895 33387\nf 33386 33388 33898\nf 33386 33898 33896\nf 33387 33895 33897\nf 33387 33897 33389\nf 33388 33390 33900\nf 33388 33900 33898\nf 33389 33897 33899\nf 33389 33899 33391\nf 33390 33392 33902\nf 33390 33902 33900\nf 33391 33899 33901\nf 33391 33901 33393\nf 33392 33394 33904\nf 33392 33904 33902\nf 33393 33901 33903\nf 33393 33903 33395\nf 33394 33396 33906\nf 33394 33906 33904\nf 33395 33903 33905\nf 33395 33905 33397\nf 33396 33398 33908\nf 33396 33908 33906\nf 33397 33905 33907\nf 33397 33907 33400\nf 33398 33399 33910\nf 33398 33910 33908\nf 33399 33401 33402\nf 33399 33402 33910\nf 33400 33907 33909\nf 33400 33909 33403\nf 33401 33404 33913\nf 33401 33913 33402\nf 33402 33911 33910\nf 33402 33913 33911\nf 33403 33909 33912\nf 33403 33912 33405\nf 33404 33406 33916\nf 33404 33916 33913\nf 33405 33912 33915\nf 33405 33915 33407\nf 33406 33409 33919\nf 33406 33919 33916\nf 33407 33412 33408\nf 33407 33915 33918\nf 33407 33918 33920\nf 33407 33920 33412\nf 33408 33412 33411\nf 33409 33410 33922\nf 33409 33922 33919\nf 33410 33413 33414\nf 33410 33414 33922\nf 33411 33412 33921\nf 33411 33921 33923\nf 33411 33923 33415\nf 33412 33920 33921\nf 33413 33417 33414\nf 33414 33417 33419\nf 33414 33419 33925\nf 33414 33925 33922\nf 33415 33420 33416\nf 33415 33923 33927\nf 33415 33927 33420\nf 33416 33420 33421\nf 33416 33421 33418\nf 33417 33418 33419\nf 33418 33421 33419\nf 33419 33421 33926\nf 33419 33926 33925\nf 33420 33927 33928\nf 33420 33928 33421\nf 33421 33928 33930\nf 33421 33929 33926\nf 33421 33930 33929\nf 33422 33944 33946\nf 33422 33946 33949\nf 33422 33948 33944\nf 33422 33949 33948\nf 33423 33424 33425\nf 33423 33425 33969\nf 33423 33963 33966\nf 33423 33966 33424\nf 33423 33968 33963\nf 33423 33969 33968\nf 33424 33427 33429\nf 33424 33429 33431\nf 33424 33431 33425\nf 33424 33966 33971\nf 33424 33971 33427\nf 33425 33431 33978\nf 33425 33974 33969\nf 33425 33978 33974\nf 33426 33427 33975\nf 33426 33428 33427\nf 33426 33975 33976\nf 33426 33976 33432\nf 33427 33428 33429\nf 33427 33971 33972\nf 33427 33972 33975\nf 33428 33430 33429\nf 33429 33430 33431\nf 33430 33435 33431\nf 33431 33435 33978\nf 33432 33434 33433\nf 33432 33976 33434\nf 33433 33434 33979\nf 33433 33979 33436\nf 33434 33976 33979\nf 33435 33437 33984\nf 33435 33980 33978\nf 33435 33984 33980\nf 33436 33979 33981\nf 33436 33981 33438\nf 33437 33441 33986\nf 33437 33986 33984\nf 33438 33440 33439\nf 33438 33981 33440\nf 33439 33440 33985\nf 33439 33985 33442\nf 33440 33981 33982\nf 33440 33982 33985\nf 33441 33443 33988\nf 33441 33988 33986\nf 33442 33985 33987\nf 33442 33987 33444\nf 33443 33445 33990\nf 33443 33990 33988\nf 33444 33987 33989\nf 33444 33989 33446\nf 33445 33447 33992\nf 33445 33992 33990\nf 33446 33989 33991\nf 33446 33991 33448\nf 33447 33449 33994\nf 33447 33994 33992\nf 33448 33991 33993\nf 33448 33993 33450\nf 33449 33451 33996\nf 33449 33996 33994\nf 33450 33993 33995\nf 33450 33995 33452\nf 33451 33454 33999\nf 33451 33999 33996\nf 33452 33995 33997\nf 33452 33997 33453\nf 33453 33997 33998\nf 33453 33998 34000\nf 33453 34000 33455\nf 33454 33456 34002\nf 33454 34002 33999\nf 33455 34000 33457\nf 33456 33458 34004\nf 33456 34004 34002\nf 33457 34000 34003\nf 33457 34003 33459\nf 33458 33460 34006\nf 33458 34006 34004\nf 33459 34003 34005\nf 33459 34005 33462\nf 33460 33461 34006\nf 33461 33463 34010\nf 33461 34007 34006\nf 33461 34010 34007\nf 33462 34005 34009\nf 33462 34009 33464\nf 33463 33465 34012\nf 33463 34012 34010\nf 33464 34009 34011\nf 33464 34011 33466\nf 33465 33467 34014\nf 33465 34014 34012\nf 33466 34011 34013\nf 33466 34013 33468\nf 33467 33470 34016\nf 33467 34016 34014\nf 33468 34013 34015\nf 33468 34015 34017\nf 33468 34017 33469\nf 33469 33472 33471\nf 33469 34017 33472\nf 33470 33473 34019\nf 33470 34019 34016\nf 33471 33472 34020\nf 33471 34020 33474\nf 33472 34017 34018\nf 33472 34018 34020\nf 33473 33475 34021\nf 33473 34021 34019\nf 33474 34020 33476\nf 33475 33477 34023\nf 33475 34023 34021\nf 33476 34020 34022\nf 33476 34022 33478\nf 33477 33479 34025\nf 33477 34025 34023\nf 33478 34022 34024\nf 33478 34024 33480\nf 33479 33481 34027\nf 33479 34027 34025\nf 33480 34024 34026\nf 33480 34026 33482\nf 33481 33483 34029\nf 33481 34029 34027\nf 33482 34026 34028\nf 33482 34028 33484\nf 33483 33485 34031\nf 33483 34031 34029\nf 33484 34028 34030\nf 33484 34030 33486\nf 33485 33487 34033\nf 33485 34033 34031\nf 33486 34030 34032\nf 33486 34032 33489\nf 33487 33488 34033\nf 33488 33490 34036\nf 33488 34034 34033\nf 33488 34036 34034\nf 33489 34032 34035\nf 33489 34035 33491\nf 33490 33492 34038\nf 33490 34038 34036\nf 33491 34035 34037\nf 33491 34037 33493\nf 33492 33494 34040\nf 33492 34040 34038\nf 33493 34037 34039\nf 33493 34039 33495\nf 33494 33496 34042\nf 33494 34042 34040\nf 33495 34039 34041\nf 33495 34041 33497\nf 33496 33498 34046\nf 33496 34046 34042\nf 33497 34041 34043\nf 33497 34043 33500\nf 33498 33499 34046\nf 33499 33502 34049\nf 33499 34047 34046\nf 33499 34049 34047\nf 33500 33501 33505\nf 33500 33505 33504\nf 33500 34043 33501\nf 33501 34043 34044\nf 33501 34044 34048\nf 33501 34048 33505\nf 33502 33503 34052\nf 33502 34052 34049\nf 33503 33506 33508\nf 33503 33508 34052\nf 33504 33505 34051\nf 33504 34051 34054\nf 33504 34054 33509\nf 33505 34048 34050\nf 33505 34050 34051\nf 33506 33507 33508\nf 33507 33511 33513\nf 33507 33513 33508\nf 33508 33513 34053\nf 33508 34053 34052\nf 33509 33514 33510\nf 33509 34054 34058\nf 33509 34058 33514\nf 33510 33514 33515\nf 33510 33515 33512\nf 33511 33512 33513\nf 33512 33515 33513\nf 33513 33515 34057\nf 33513 34056 34053\nf 33513 34057 34056\nf 33514 34058 34059\nf 33514 34059 33515\nf 33515 34059 34061\nf 33515 34060 34057\nf 33515 34061 34060\nf 33516 33517 34062\nf 33516 34062 34075\nf 33516 34075 33529\nf 33517 33518 34063\nf 33517 34063 34062\nf 33518 33519 34064\nf 33518 34064 34063\nf 33519 33520 34065\nf 33519 34065 34064\nf 33520 33521 34066\nf 33520 34066 34065\nf 33521 33522 34067\nf 33521 34067 34066\nf 33522 33523 34068\nf 33522 34068 34067\nf 33523 33524 34069\nf 33523 34069 34068\nf 33524 33525 34070\nf 33524 34070 34069\nf 33525 33526 34071\nf 33525 34071 34070\nf 33526 33531 34072\nf 33526 34072 34071\nf 33527 33528 34073\nf 33527 34073 34081\nf 33527 34081 33535\nf 33528 33530 34074\nf 33528 34074 34073\nf 33529 34075 33530\nf 33530 34075 34076\nf 33530 34076 34074\nf 33531 33532 34079\nf 33531 34078 34072\nf 33531 34079 34078\nf 33532 33533 34079\nf 33533 33534 34080\nf 33533 34080 34079\nf 33534 33537 33538\nf 33534 33538 34080\nf 33535 34081 33536\nf 33536 34081 34082\nf 33536 34082 34086\nf 33536 34086 33540\nf 33537 33539 34084\nf 33537 34084 33538\nf 33538 34083 34080\nf 33538 34084 34083\nf 33539 33541 34085\nf 33539 34085 34084\nf 33540 34086 33543\nf 33541 33542 33546\nf 33541 33546 34093\nf 33541 34089 34085\nf 33541 34093 34089\nf 33542 33545 33546\nf 33543 33544 34092\nf 33543 34086 33544\nf 33543 34092 34094\nf 33543 34094 33547\nf 33544 34086 34087\nf 33544 34087 34091\nf 33544 34091 34092\nf 33545 33550 33552\nf 33545 33552 33546\nf 33546 33552 34093\nf 33547 34094 34095\nf 33547 34095 33548\nf 33548 34095 33553\nf 33549 33557 34102\nf 33549 34097 33551\nf 33549 34102 34097\nf 33550 33551 33552\nf 33551 34096 33552\nf 33551 34097 34096\nf 33552 34096 34093\nf 33553 34095 34098\nf 33553 34098 34099\nf 33553 34099 33554\nf 33554 34099 34100\nf 33554 34100 33555\nf 33555 34100 33559\nf 33556 33566 34112\nf 33556 34101 34103\nf 33556 34103 33558\nf 33556 34112 34101\nf 33557 33558 34102\nf 33558 34103 34102\nf 33559 34100 34104\nf 33559 34104 34106\nf 33559 34106 33560\nf 33560 34106 34107\nf 33560 34107 33561\nf 33561 34107 34108\nf 33561 34108 33562\nf 33562 34108 34109\nf 33562 34109 33563\nf 33563 34109 33568\nf 33564 33574 34121\nf 33564 34110 34111\nf 33564 34111 33565\nf 33564 34121 34110\nf 33565 34111 34113\nf 33565 34113 33567\nf 33566 33567 34112\nf 33567 34113 34112\nf 33568 34109 34114\nf 33568 34114 34116\nf 33568 34116 33569\nf 33569 34116 34117\nf 33569 34117 33570\nf 33570 34117 34118\nf 33570 34118 33571\nf 33571 34118 34119\nf 33571 34119 33572\nf 33572 34119 34120\nf 33572 34120 33573\nf 33573 34120 34122\nf 33573 34122 33575\nf 33574 33575 34121\nf 33575 34122 34121\nf 33576 33583 33581\nf 33576 33584 34125\nf 33576 34123 33583\nf 33576 34124 34123\nf 33576 34125 34124\nf 33577 33578 34126\nf 33577 34126 34133\nf 33577 34133 33587\nf 33578 33579 34127\nf 33578 34127 34126\nf 33579 33580 34128\nf 33579 34128 34127\nf 33580 33588 34130\nf 33580 34129 34128\nf 33580 34130 34129\nf 33581 33583 33582\nf 33582 33583 34131\nf 33582 34131 33591\nf 33583 34123 34131\nf 33584 33585 33586\nf 33584 33586 34125\nf 33585 33593 33586\nf 33586 33593 34132\nf 33586 34132 34125\nf 33587 34133 33595\nf 33588 33589 33590\nf 33588 33590 34130\nf 33589 33596 33590\nf 33590 33596 34134\nf 33590 34134 34130\nf 33591 34131 34135\nf 33591 34135 33592\nf 33592 34135 34136\nf 33592 34136 34142\nf 33592 34142 33598\nf 33593 33594 34138\nf 33593 34137 34132\nf 33593 34138 34137\nf 33594 33599 34138\nf 33595 34133 34139\nf 33595 34139 33600\nf 33596 33597 34141\nf 33596 34140 34134\nf 33596 34141 34140\nf 33597 33601 34141\nf 33598 34142 33602\nf 33599 33603 34147\nf 33599 34143 34138\nf 33599 34147 34143\nf 33600 34139 34144\nf 33600 34144 33604\nf 33601 33605 34149\nf 33601 34145 34141\nf 33601 34149 34145\nf 33602 34142 34146\nf 33602 34146 33606\nf 33603 33607 34151\nf 33603 34151 34147\nf 33604 34144 34148\nf 33604 34148 33608\nf 33605 33610 34154\nf 33605 34154 34149\nf 33606 34146 34150\nf 33606 34150 33611\nf 33607 33612 34156\nf 33607 34156 34151\nf 33608 34148 34152\nf 33608 34152 33609\nf 33609 34152 34153\nf 33609 34153 34157\nf 33609 34157 33613\nf 33610 33614 34158\nf 33610 34158 34154\nf 33611 34150 34155\nf 33611 34155 33615\nf 33612 33616 34160\nf 33612 34160 34156\nf 33613 34157 33617\nf 33614 33618 34162\nf 33614 34162 34158\nf 33615 34155 34159\nf 33615 34159 33619\nf 33616 33620 34164\nf 33616 34164 34160\nf 33617 34157 34161\nf 33617 34161 33621\nf 33618 33622 34166\nf 33618 34166 34162\nf 33619 34159 34163\nf 33619 34163 33623\nf 33620 33624 34168\nf 33620 34168 34164\nf 33621 34161 34165\nf 33621 34165 33625\nf 33622 33626 34170\nf 33622 34170 34166\nf 33623 34163 34167\nf 33623 34167 33627\nf 33624 33628 34172\nf 33624 34172 34168\nf 33625 34165 34169\nf 33625 34169 33630\nf 33626 33631 34175\nf 33626 34175 34170\nf 33627 34167 34171\nf 33627 34171 33632\nf 33628 33629 34173\nf 33628 34173 34172\nf 33629 33633 34173\nf 33630 34169 34174\nf 33630 34174 33640\nf 33631 33642 34186\nf 33631 34186 34175\nf 33632 34171 34176\nf 33632 34176 33643\nf 33633 33634 34178\nf 33633 34177 34173\nf 33633 34178 34177\nf 33634 33635 34178\nf 33635 33636 34179\nf 33635 34179 34178\nf 33636 33637 34180\nf 33636 34180 34179\nf 33637 33644 34181\nf 33637 34181 34180\nf 33638 33639 34182\nf 33638 34182 34270\nf 33638 34270 33726\nf 33639 33641 34183\nf 33639 34183 34182\nf 33640 34174 34184\nf 33640 34184 33641\nf 33641 34184 34185\nf 33641 34185 34183\nf 33642 33728 34272\nf 33642 34272 34186\nf 33643 34176 34187\nf 33643 34187 33729\nf 33644 33645 34189\nf 33644 34188 34181\nf 33644 34189 34188\nf 33645 33646 34189\nf 33646 33647 34190\nf 33646 34190 34189\nf 33647 33648 34191\nf 33647 34191 34190\nf 33648 33649 34192\nf 33648 34192 34191\nf 33649 33650 34193\nf 33649 34193 34192\nf 33650 33651 34194\nf 33650 34194 34193\nf 33651 33652 34195\nf 33651 34195 34194\nf 33652 33653 34196\nf 33652 34196 34195\nf 33653 33654 34197\nf 33653 34197 34196\nf 33654 33655 34198\nf 33654 34198 34197\nf 33655 33656 34199\nf 33655 34199 34198\nf 33656 33657 34200\nf 33656 34200 34199\nf 33657 33658 34201\nf 33657 34201 34200\nf 33658 33659 34202\nf 33658 34202 34201\nf 33659 33660 34203\nf 33659 34203 34202\nf 33660 33661 34204\nf 33660 34204 34203\nf 33661 33662 34205\nf 33661 34205 34204\nf 33662 33663 34206\nf 33662 34206 34205\nf 33663 33664 34207\nf 33663 34207 34206\nf 33664 33665 34208\nf 33664 34208 34207\nf 33665 33666 34209\nf 33665 34209 34208\nf 33666 33667 34210\nf 33666 34210 34209\nf 33667 33668 34211\nf 33667 34211 34210\nf 33668 33669 34212\nf 33668 34212 34211\nf 33669 33670 34213\nf 33669 34213 34212\nf 33670 33671 34214\nf 33670 34214 34213\nf 33671 33672 34215\nf 33671 34215 34214\nf 33672 33673 34216\nf 33672 34216 34215\nf 33673 33674 34217\nf 33673 34217 34216\nf 33674 33675 34218\nf 33674 34218 34217\nf 33675 33676 34219\nf 33675 34219 34218\nf 33676 33677 34220\nf 33676 34220 34219\nf 33677 33678 34221\nf 33677 34221 34220\nf 33678 33679 34222\nf 33678 34222 34221\nf 33679 33680 34223\nf 33679 34223 34222\nf 33680 33681 34224\nf 33680 34224 34223\nf 33681 33682 34225\nf 33681 34225 34224\nf 33682 33683 34226\nf 33682 34226 34225\nf 33683 33684 34227\nf 33683 34227 34226\nf 33684 33685 34228\nf 33684 34228 34227\nf 33685 33686 34229\nf 33685 34229 34228\nf 33686 33687 34230\nf 33686 34230 34229\nf 33687 33688 34231\nf 33687 34231 34230\nf 33688 33689 34232\nf 33688 34232 34231\nf 33689 33690 34233\nf 33689 34233 34232\nf 33690 33691 34234\nf 33690 34234 34233\nf 33691 33692 34235\nf 33691 34235 34234\nf 33692 33693 34236\nf 33692 34236 34235\nf 33693 33694 34237\nf 33693 34237 34236\nf 33694 33695 34238\nf 33694 34238 34237\nf 33695 33696 34239\nf 33695 34239 34238\nf 33696 33697 34240\nf 33696 34240 34239\nf 33697 33698 34241\nf 33697 34241 34240\nf 33698 33699 34242\nf 33698 34242 34241\nf 33699 33700 34243\nf 33699 34243 34242\nf 33700 33701 34244\nf 33700 34244 34243\nf 33701 33702 34245\nf 33701 34245 34244\nf 33702 33703 34246\nf 33702 34246 34245\nf 33703 33704 34247\nf 33703 34247 34246\nf 33704 33705 34248\nf 33704 34248 34247\nf 33705 33706 34249\nf 33705 34249 34248\nf 33706 33707 34250\nf 33706 34250 34249\nf 33707 33708 34251\nf 33707 34251 34250\nf 33708 33709 34252\nf 33708 34252 34251\nf 33709 33710 34253\nf 33709 34253 34252\nf 33710 33711 34254\nf 33710 34254 34253\nf 33711 33712 34255\nf 33711 34255 34254\nf 33712 33713 34256\nf 33712 34256 34255\nf 33713 33714 34257\nf 33713 34257 34256\nf 33714 33715 34258\nf 33714 34258 34257\nf 33715 33716 34259\nf 33715 34259 34258\nf 33716 33717 34260\nf 33716 34260 34259\nf 33717 33718 34261\nf 33717 34261 34260\nf 33718 33719 34262\nf 33718 34262 34261\nf 33719 33720 34263\nf 33719 34263 34262\nf 33720 33721 34264\nf 33720 34264 34263\nf 33721 33722 34265\nf 33721 34265 34264\nf 33722 33723 34266\nf 33722 34266 34265\nf 33723 33724 34267\nf 33723 34267 34266\nf 33724 33725 34268\nf 33724 34268 34267\nf 33725 33727 34269\nf 33725 34269 34268\nf 33726 34270 33727\nf 33727 34270 34271\nf 33727 34271 34269\nf 33728 33730 34274\nf 33728 34274 34272\nf 33729 34187 34273\nf 33729 34273 33731\nf 33730 33732 34276\nf 33730 34276 34274\nf 33731 34273 34275\nf 33731 34275 33733\nf 33732 33735 34279\nf 33732 34279 34276\nf 33733 34275 34277\nf 33733 34277 34278\nf 33733 34278 33734\nf 33734 34278 33737\nf 33735 33736 34279\nf 33736 33738 34282\nf 33736 34280 34279\nf 33736 34282 34280\nf 33737 34278 34281\nf 33737 34281 33740\nf 33738 33739 34282\nf 33739 33746 34290\nf 33739 34283 34282\nf 33739 34290 34283\nf 33740 34281 34284\nf 33740 34284 34285\nf 33740 34285 33741\nf 33741 34285 33748\nf 33742 33835 34379\nf 33742 34286 34287\nf 33742 34287 33743\nf 33742 34379 34286\nf 33743 34287 34288\nf 33743 34288 33744\nf 33744 34288 34289\nf 33744 34289 33745\nf 33745 34289 34291\nf 33745 34291 33747\nf 33746 33747 34290\nf 33747 34291 34290\nf 33748 34285 34292\nf 33748 34292 34293\nf 33748 34293 33749\nf 33749 34293 33837\nf 33750 33840 34386\nf 33750 34294 34295\nf 33750 34295 33751\nf 33750 34386 34294\nf 33751 34295 34296\nf 33751 34296 33752\nf 33752 34296 34297\nf 33752 34297 33753\nf 33753 34297 34298\nf 33753 34298 33754\nf 33754 34298 34299\nf 33754 34299 33755\nf 33755 34299 34300\nf 33755 34300 33756\nf 33756 34300 34301\nf 33756 34301 33757\nf 33757 34301 34302\nf 33757 34302 33758\nf 33758 34302 34303\nf 33758 34303 33759\nf 33759 34303 34304\nf 33759 34304 33760\nf 33760 34304 34305\nf 33760 34305 33761\nf 33761 34305 34306\nf 33761 34306 33762\nf 33762 34306 34307\nf 33762 34307 33763\nf 33763 34307 34308\nf 33763 34308 33764\nf 33764 34308 34309\nf 33764 34309 33765\nf 33765 34309 34310\nf 33765 34310 33766\nf 33766 34310 34311\nf 33766 34311 33767\nf 33767 34311 34312\nf 33767 34312 33768\nf 33768 34312 34313\nf 33768 34313 33769\nf 33769 34313 34314\nf 33769 34314 33770\nf 33770 34314 34315\nf 33770 34315 33771\nf 33771 34315 34316\nf 33771 34316 33772\nf 33772 34316 34317\nf 33772 34317 33773\nf 33773 34317 34318\nf 33773 34318 33774\nf 33774 34318 34319\nf 33774 34319 33775\nf 33775 34319 34320\nf 33775 34320 33776\nf 33776 34320 34321\nf 33776 34321 33777\nf 33777 34321 34322\nf 33777 34322 33778\nf 33778 34322 34323\nf 33778 34323 33779\nf 33779 34323 34324\nf 33779 34324 33780\nf 33780 34324 34325\nf 33780 34325 33781\nf 33781 34325 34326\nf 33781 34326 33782\nf 33782 34326 34327\nf 33782 34327 33783\nf 33783 34327 34328\nf 33783 34328 33784\nf 33784 34328 34329\nf 33784 34329 33785\nf 33785 34329 34330\nf 33785 34330 33786\nf 33786 34330 34331\nf 33786 34331 33787\nf 33787 34331 34332\nf 33787 34332 33788\nf 33788 34332 34333\nf 33788 34333 33789\nf 33789 34333 34334\nf 33789 34334 33790\nf 33790 34334 34335\nf 33790 34335 33791\nf 33791 34335 34336\nf 33791 34336 33792\nf 33792 34336 34337\nf 33792 34337 33793\nf 33793 34337 34338\nf 33793 34338 33794\nf 33794 34338 34339\nf 33794 34339 33795\nf 33795 34339 34340\nf 33795 34340 33796\nf 33796 34340 34341\nf 33796 34341 33797\nf 33797 34341 34342\nf 33797 34342 33798\nf 33798 34342 34343\nf 33798 34343 33799\nf 33799 34343 34344\nf 33799 34344 33800\nf 33800 34344 34345\nf 33800 34345 33801\nf 33801 34345 34346\nf 33801 34346 33802\nf 33802 34346 34347\nf 33802 34347 33803\nf 33803 34347 34348\nf 33803 34348 33804\nf 33804 34348 34349\nf 33804 34349 33805\nf 33805 34349 34350\nf 33805 34350 33806\nf 33806 34350 34351\nf 33806 34351 33807\nf 33807 34351 34352\nf 33807 34352 33808\nf 33808 34352 34353\nf 33808 34353 33809\nf 33809 34353 34354\nf 33809 34354 33810\nf 33810 34354 34355\nf 33810 34355 33811\nf 33811 34355 34356\nf 33811 34356 33812\nf 33812 34356 34357\nf 33812 34357 33813\nf 33813 34357 34358\nf 33813 34358 33814\nf 33814 34358 34359\nf 33814 34359 33815\nf 33815 34359 34360\nf 33815 34360 33816\nf 33816 34360 34361\nf 33816 34361 33817\nf 33817 34361 34362\nf 33817 34362 33818\nf 33818 34362 34363\nf 33818 34363 33819\nf 33819 34363 34364\nf 33819 34364 33820\nf 33820 34364 34365\nf 33820 34365 33821\nf 33821 34365 34366\nf 33821 34366 33822\nf 33822 34366 34367\nf 33822 34367 33823\nf 33823 34367 34368\nf 33823 34368 33824\nf 33824 34368 34369\nf 33824 34369 33825\nf 33825 34369 34370\nf 33825 34370 33826\nf 33826 34370 34371\nf 33826 34371 33827\nf 33827 34371 34372\nf 33827 34372 33828\nf 33828 34372 34373\nf 33828 34373 33829\nf 33829 34373 34374\nf 33829 34374 33830\nf 33830 34374 34375\nf 33830 34375 33831\nf 33831 34375 34376\nf 33831 34376 33832\nf 33832 34376 34377\nf 33832 34377 33833\nf 33833 34377 34378\nf 33833 34378 33834\nf 33834 34378 34380\nf 33834 34380 33836\nf 33835 33836 34379\nf 33836 34380 34379\nf 33837 34293 34382\nf 33837 34382 34383\nf 33837 34383 33838\nf 33838 34383 34384\nf 33838 34384 33839\nf 33839 34384 33842\nf 33840 33841 34386\nf 33841 33845 33847\nf 33841 33847 34385\nf 33841 34385 34387\nf 33841 34387 34386\nf 33842 34384 34388\nf 33842 34388 34389\nf 33842 34389 33843\nf 33843 34389 34391\nf 33843 34391 33844\nf 33844 34391 33846\nf 33845 33846 33847\nf 33846 34390 33847\nf 33846 34391 34390\nf 33847 34390 34385\nf 33848 33849 34392\nf 33848 34392 34397\nf 33848 34397 33853\nf 33849 33850 34393\nf 33849 34393 34392\nf 33850 33851 34394\nf 33850 34394 34393\nf 33851 33852 34395\nf 33851 34395 34394\nf 33852 33854 34396\nf 33852 34396 34395\nf 33853 34397 33856\nf 33854 33855 34399\nf 33854 34398 34396\nf 33854 34399 34398\nf 33855 33858 34399\nf 33856 34397 34400\nf 33856 34400 33857\nf 33857 34400 34401\nf 33857 34401 34403\nf 33857 34403 33859\nf 33858 33860 34404\nf 33858 34402 34399\nf 33858 34404 34402\nf 33859 34403 33862\nf 33860 33861 34405\nf 33860 34405 34404\nf 33861 33863 34405\nf 33862 34403 34406\nf 33862 34406 33864\nf 33863 33865 34410\nf 33863 34407 34405\nf 33863 34410 34407\nf 33864 34406 34409\nf 33864 34409 33866\nf 33865 33867 34412\nf 33865 34412 34410\nf 33866 34409 34411\nf 33866 34411 33868\nf 33867 33869 34414\nf 33867 34414 34412\nf 33868 34411 34413\nf 33868 34413 33870\nf 33869 33871 34416\nf 33869 34416 34414\nf 33870 34413 34415\nf 33870 34415 33872\nf 33871 33873 34418\nf 33871 34418 34416\nf 33872 34415 34417\nf 33872 34417 33874\nf 33873 33875 34420\nf 33873 34420 34418\nf 33874 34417 34419\nf 33874 34419 33877\nf 33875 33876 34420\nf 33876 33878 34423\nf 33876 34421 34420\nf 33876 34423 34421\nf 33877 34419 34422\nf 33877 34422 33879\nf 33878 33880 34425\nf 33878 34425 34423\nf 33879 34422 34424\nf 33879 34424 33881\nf 33880 33882 34427\nf 33880 34427 34425\nf 33881 34424 34426\nf 33881 34426 33883\nf 33882 33884 34429\nf 33882 34429 34427\nf 33883 34426 34428\nf 33883 34428 33885\nf 33884 33887 34432\nf 33884 34432 34429\nf 33885 34428 34430\nf 33885 34430 34431\nf 33885 34431 33886\nf 33886 34431 33888\nf 33887 33889 34435\nf 33887 34435 34432\nf 33888 34431 34433\nf 33888 34433 33890\nf 33889 33891 34437\nf 33889 34437 34435\nf 33890 34433 34436\nf 33890 34436 33893\nf 33891 33892 34437\nf 33892 33894 34440\nf 33892 34438 34437\nf 33892 34440 34438\nf 33893 34436 34439\nf 33893 34439 33895\nf 33894 33896 34442\nf 33894 34442 34440\nf 33895 34439 34441\nf 33895 34441 33897\nf 33896 33898 34444\nf 33896 34444 34442\nf 33897 34441 34443\nf 33897 34443 33899\nf 33898 33900 34446\nf 33898 34446 34444\nf 33899 34443 34445\nf 33899 34445 33901\nf 33900 33902 34448\nf 33900 34448 34446\nf 33901 34445 34447\nf 33901 34447 33903\nf 33902 33904 34450\nf 33902 34450 34448\nf 33903 34447 34449\nf 33903 34449 33905\nf 33904 33906 34452\nf 33904 34452 34450\nf 33905 34449 34451\nf 33905 34451 33907\nf 33906 33908 34454\nf 33906 34454 34452\nf 33907 34451 34453\nf 33907 34453 33909\nf 33908 33910 34456\nf 33908 34456 34454\nf 33909 34453 34455\nf 33909 34455 33912\nf 33910 33911 34458\nf 33910 34458 34456\nf 33911 33913 33914\nf 33911 33914 34458\nf 33912 34455 34457\nf 33912 34457 33915\nf 33913 33916 33914\nf 33914 33916 33917\nf 33914 33917 34460\nf 33914 34460 34458\nf 33915 34457 34459\nf 33915 34459 33918\nf 33916 33919 34463\nf 33916 34463 33917\nf 33917 34461 34460\nf 33917 34463 34461\nf 33918 34459 34462\nf 33918 34462 33920\nf 33919 33922 34465\nf 33919 34465 34463\nf 33920 33924 33921\nf 33920 34462 34464\nf 33920 34464 34466\nf 33920 34466 33924\nf 33921 33924 33923\nf 33922 33925 34468\nf 33922 34468 34465\nf 33923 33924 34467\nf 33923 34467 34469\nf 33923 34469 33927\nf 33924 34466 34467\nf 33925 33926 34471\nf 33925 34471 34468\nf 33926 33929 33931\nf 33926 33931 34471\nf 33927 33932 33928\nf 33927 34469 34472\nf 33927 34472 33932\nf 33928 33932 33933\nf 33928 33933 33930\nf 33929 33930 33931\nf 33930 33933 33931\nf 33931 33933 33934\nf 33931 33934 34474\nf 33931 34474 34471\nf 33932 33935 33936\nf 33932 33936 33933\nf 33932 34472 33935\nf 33933 33936 33934\nf 33934 33936 34478\nf 33934 34475 34474\nf 33934 34478 34475\nf 33935 33937 33938\nf 33935 33938 33936\nf 33935 34472 34476\nf 33935 34476 33937\nf 33936 33938 34481\nf 33936 34481 34478\nf 33937 33939 33938\nf 33937 34476 34480\nf 33937 34480 33939\nf 33938 33939 34486\nf 33938 34482 34481\nf 33938 34486 34482\nf 33939 33940 33941\nf 33939 33941 34487\nf 33939 34480 34484\nf 33939 34484 33940\nf 33939 34487 34486\nf 33940 33942 33943\nf 33940 33943 33945\nf 33940 33945 33941\nf 33940 34484 34489\nf 33940 34489 33942\nf 33941 33945 34495\nf 33941 34492 34487\nf 33941 34495 34492\nf 33942 33947 33943\nf 33942 34489 34490\nf 33942 34490 34493\nf 33942 34493 34494\nf 33942 34494 33947\nf 33943 33947 33945\nf 33944 33945 33947\nf 33944 33947 33946\nf 33944 33948 33945\nf 33945 33948 34495\nf 33946 33947 33951\nf 33946 33951 33949\nf 33947 33950 33951\nf 33947 34494 34497\nf 33947 34497 33950\nf 33948 33949 34503\nf 33948 34499 34495\nf 33948 34503 34499\nf 33949 33951 34503\nf 33950 33952 33953\nf 33950 33953 33951\nf 33950 34497 34501\nf 33950 34501 33952\nf 33951 33953 34507\nf 33951 34507 34503\nf 33952 33954 33955\nf 33952 33955 33953\nf 33952 34501 34505\nf 33952 34505 33954\nf 33953 33955 34511\nf 33953 34511 34507\nf 33954 33956 33957\nf 33954 33957 33955\nf 33954 34505 34509\nf 33954 34509 33956\nf 33955 33957 34514\nf 33955 34514 34511\nf 33956 33958 33959\nf 33956 33959 33957\nf 33956 34509 34512\nf 33956 34512 33958\nf 33957 33959 34517\nf 33957 34517 34514\nf 33958 33960 33961\nf 33958 33961 33959\nf 33958 34512 34515\nf 33958 34515 33960\nf 33959 33961 34521\nf 33959 34521 34517\nf 33960 33962 33964\nf 33960 33964 33965\nf 33960 33965 33961\nf 33960 34515 34518\nf 33960 34518 33962\nf 33961 33965 34523\nf 33961 34523 34521\nf 33962 33967 33964\nf 33962 34518 34519\nf 33962 34519 34522\nf 33962 34522 33967\nf 33963 33964 33967\nf 33963 33967 33966\nf 33963 33968 33964\nf 33964 33968 33970\nf 33964 33970 33965\nf 33965 33970 34526\nf 33965 34526 34523\nf 33966 33967 33973\nf 33966 33973 33971\nf 33967 34522 34524\nf 33967 34524 33973\nf 33968 33969 33970\nf 33969 33974 33970\nf 33970 33974 34526\nf 33971 33973 33972\nf 33972 33973 34527\nf 33972 34527 34528\nf 33972 34528 33975\nf 33973 34524 34527\nf 33974 33978 34532\nf 33974 34530 34526\nf 33974 34532 34530\nf 33975 33977 33976\nf 33975 34528 33977\nf 33976 33977 34531\nf 33976 34531 33979\nf 33977 34528 34531\nf 33978 33980 34536\nf 33978 34536 34532\nf 33979 34531 34533\nf 33979 34533 33981\nf 33980 33984 34538\nf 33980 34538 34536\nf 33981 33983 33982\nf 33981 34533 33983\nf 33982 33983 34537\nf 33982 34537 33985\nf 33983 34533 34534\nf 33983 34534 34537\nf 33984 33986 34540\nf 33984 34540 34538\nf 33985 34537 34539\nf 33985 34539 33987\nf 33986 33988 34542\nf 33986 34542 34540\nf 33987 34539 34541\nf 33987 34541 33989\nf 33988 33990 34544\nf 33988 34544 34542\nf 33989 34541 34543\nf 33989 34543 33991\nf 33990 33992 34546\nf 33990 34546 34544\nf 33991 34543 34545\nf 33991 34545 33993\nf 33992 33994 34548\nf 33992 34548 34546\nf 33993 34545 34547\nf 33993 34547 33995\nf 33994 33996 34550\nf 33994 34550 34548\nf 33995 34547 34549\nf 33995 34549 33997\nf 33996 33999 34552\nf 33996 34552 34550\nf 33997 34549 34551\nf 33997 34551 34553\nf 33997 34553 33998\nf 33998 34001 34000\nf 33998 34553 34001\nf 33999 34002 34555\nf 33999 34555 34552\nf 34000 34001 34556\nf 34000 34556 34003\nf 34001 34553 34554\nf 34001 34554 34556\nf 34002 34004 34557\nf 34002 34557 34555\nf 34003 34556 34005\nf 34004 34006 34557\nf 34005 34556 34560\nf 34005 34560 34009\nf 34006 34007 34008\nf 34006 34008 34557\nf 34007 34010 34561\nf 34007 34561 34008\nf 34008 34558 34557\nf 34008 34561 34558\nf 34009 34560 34562\nf 34009 34562 34011\nf 34010 34012 34565\nf 34010 34563 34561\nf 34010 34565 34563\nf 34011 34562 34564\nf 34011 34564 34013\nf 34012 34014 34567\nf 34012 34567 34565\nf 34013 34564 34566\nf 34013 34566 34015\nf 34014 34016 34569\nf 34014 34569 34567\nf 34015 34566 34568\nf 34015 34568 34017\nf 34016 34019 34572\nf 34016 34572 34569\nf 34017 34568 34570\nf 34017 34570 34018\nf 34018 34570 34571\nf 34018 34571 34573\nf 34018 34573 34020\nf 34019 34021 34575\nf 34019 34575 34572\nf 34020 34573 34022\nf 34021 34023 34577\nf 34021 34577 34575\nf 34022 34573 34576\nf 34022 34576 34024\nf 34023 34025 34579\nf 34023 34579 34577\nf 34024 34576 34578\nf 34024 34578 34026\nf 34025 34027 34581\nf 34025 34581 34579\nf 34026 34578 34580\nf 34026 34580 34028\nf 34027 34029 34583\nf 34027 34583 34581\nf 34028 34580 34582\nf 34028 34582 34030\nf 34029 34031 34585\nf 34029 34585 34583\nf 34030 34582 34584\nf 34030 34584 34032\nf 34031 34033 34587\nf 34031 34587 34585\nf 34032 34584 34586\nf 34032 34586 34035\nf 34033 34034 34587\nf 34034 34036 34590\nf 34034 34588 34587\nf 34034 34590 34588\nf 34035 34586 34589\nf 34035 34589 34037\nf 34036 34038 34592\nf 34036 34592 34590\nf 34037 34589 34591\nf 34037 34591 34039\nf 34038 34040 34594\nf 34038 34594 34592\nf 34039 34591 34593\nf 34039 34593 34041\nf 34040 34042 34597\nf 34040 34597 34594\nf 34041 34593 34595\nf 34041 34595 34043\nf 34042 34046 34599\nf 34042 34599 34597\nf 34043 34045 34044\nf 34043 34595 34045\nf 34044 34045 34598\nf 34044 34598 34048\nf 34045 34595 34596\nf 34045 34596 34598\nf 34046 34047 34599\nf 34047 34049 34602\nf 34047 34600 34599\nf 34047 34602 34600\nf 34048 34598 34601\nf 34048 34601 34050\nf 34049 34052 34604\nf 34049 34604 34602\nf 34050 34055 34051\nf 34050 34601 34603\nf 34050 34603 34606\nf 34050 34606 34055\nf 34051 34055 34054\nf 34052 34053 34604\nf 34053 34056 34608\nf 34053 34605 34604\nf 34053 34608 34605\nf 34054 34055 34607\nf 34054 34607 34610\nf 34054 34610 34058\nf 34055 34606 34607\nf 34056 34057 34608\nf 34057 34060 34613\nf 34057 34609 34608\nf 34057 34613 34609\nf 34058 34610 34612\nf 34058 34612 34059\nf 34059 34612 34614\nf 34059 34614 34061\nf 34060 34061 34613\nf 34061 34614 34613\nf 34062 34063 34618\nf 34062 34077 34075\nf 34062 34617 34077\nf 34062 34618 34617\nf 34063 34064 34619\nf 34063 34619 34618\nf 34064 34065 34620\nf 34064 34620 34619\nf 34065 34066 34621\nf 34065 34621 34620\nf 34066 34067 34622\nf 34066 34622 34621\nf 34067 34068 34623\nf 34067 34623 34622\nf 34068 34069 34624\nf 34068 34624 34623\nf 34069 34070 34625\nf 34069 34625 34624\nf 34070 34071 34626\nf 34070 34626 34625\nf 34071 34072 34627\nf 34071 34627 34626\nf 34072 34078 34628\nf 34072 34628 34627\nf 34073 34074 34629\nf 34073 34629 34637\nf 34073 34637 34081\nf 34074 34076 34631\nf 34074 34631 34629\nf 34075 34077 34076\nf 34076 34077 34630\nf 34076 34630 34631\nf 34077 34617 34630\nf 34078 34079 34634\nf 34078 34632 34628\nf 34078 34634 34632\nf 34079 34080 34634\nf 34080 34083 34635\nf 34080 34635 34634\nf 34081 34637 34082\nf 34082 34088 34086\nf 34082 34636 34088\nf 34082 34637 34638\nf 34082 34638 34636\nf 34083 34084 34641\nf 34083 34639 34635\nf 34083 34641 34639\nf 34084 34085 34641\nf 34085 34089 34090\nf 34085 34090 34641\nf 34086 34088 34087\nf 34087 34088 34642\nf 34087 34642 34091\nf 34088 34636 34642\nf 34089 34093 34647\nf 34089 34644 34090\nf 34089 34647 34644\nf 34090 34643 34641\nf 34090 34644 34643\nf 34091 34642 34645\nf 34091 34645 34646\nf 34091 34646 34092\nf 34092 34646 34094\nf 34093 34096 34652\nf 34093 34652 34647\nf 34094 34646 34649\nf 34094 34649 34651\nf 34094 34651 34095\nf 34095 34651 34098\nf 34096 34097 34652\nf 34097 34102 34658\nf 34097 34653 34652\nf 34097 34658 34653\nf 34098 34651 34655\nf 34098 34655 34656\nf 34098 34656 34099\nf 34099 34656 34100\nf 34100 34105 34104\nf 34100 34656 34105\nf 34101 34112 34668\nf 34101 34657 34659\nf 34101 34659 34103\nf 34101 34668 34657\nf 34102 34103 34658\nf 34103 34659 34658\nf 34104 34105 34662\nf 34104 34662 34106\nf 34105 34656 34661\nf 34105 34661 34662\nf 34106 34662 34663\nf 34106 34663 34664\nf 34106 34664 34107\nf 34107 34664 34665\nf 34107 34665 34108\nf 34108 34665 34109\nf 34109 34115 34114\nf 34109 34665 34115\nf 34110 34121 34677\nf 34110 34666 34667\nf 34110 34667 34111\nf 34110 34677 34666\nf 34111 34667 34669\nf 34111 34669 34113\nf 34112 34113 34668\nf 34113 34669 34668\nf 34114 34115 34671\nf 34114 34671 34116\nf 34115 34665 34670\nf 34115 34670 34671\nf 34116 34671 34672\nf 34116 34672 34673\nf 34116 34673 34117\nf 34117 34673 34674\nf 34117 34674 34118\nf 34118 34674 34675\nf 34118 34675 34119\nf 34119 34675 34676\nf 34119 34676 34120\nf 34120 34676 34678\nf 34120 34678 34122\nf 34121 34122 34677\nf 34122 34678 34677\nf 34123 34124 34679\nf 34123 34679 34687\nf 34123 34687 34131\nf 34124 34125 34680\nf 34124 34680 34679\nf 34125 34132 34681\nf 34125 34681 34680\nf 34126 34127 34682\nf 34126 34682 34689\nf 34126 34689 34133\nf 34127 34128 34683\nf 34127 34683 34682\nf 34128 34129 34684\nf 34128 34684 34683\nf 34129 34130 34685\nf 34129 34685 34684\nf 34130 34134 34686\nf 34130 34686 34685\nf 34131 34687 34135\nf 34132 34137 34693\nf 34132 34688 34681\nf 34132 34693 34688\nf 34133 34689 34139\nf 34134 34140 34696\nf 34134 34690 34686\nf 34134 34696 34690\nf 34135 34687 34691\nf 34135 34691 34136\nf 34136 34691 34692\nf 34136 34692 34698\nf 34136 34698 34142\nf 34137 34138 34694\nf 34137 34694 34693\nf 34138 34143 34694\nf 34139 34689 34695\nf 34139 34695 34144\nf 34140 34141 34697\nf 34140 34697 34696\nf 34141 34145 34697\nf 34142 34698 34146\nf 34143 34147 34703\nf 34143 34699 34694\nf 34143 34703 34699\nf 34144 34695 34700\nf 34144 34700 34148\nf 34145 34149 34705\nf 34145 34701 34697\nf 34145 34705 34701\nf 34146 34698 34702\nf 34146 34702 34150\nf 34147 34151 34707\nf 34147 34707 34703\nf 34148 34700 34704\nf 34148 34704 34152\nf 34149 34154 34711\nf 34149 34711 34705\nf 34150 34702 34706\nf 34150 34706 34155\nf 34151 34156 34713\nf 34151 34713 34707\nf 34152 34704 34708\nf 34152 34708 34153\nf 34153 34708 34709\nf 34153 34709 34714\nf 34153 34714 34157\nf 34154 34158 34715\nf 34154 34715 34711\nf 34155 34706 34712\nf 34155 34712 34159\nf 34156 34160 34717\nf 34156 34717 34713\nf 34157 34714 34161\nf 34158 34162 34719\nf 34158 34719 34715\nf 34159 34712 34716\nf 34159 34716 34163\nf 34160 34164 34721\nf 34160 34721 34717\nf 34161 34714 34718\nf 34161 34718 34165\nf 34162 34166 34723\nf 34162 34723 34719\nf 34163 34716 34720\nf 34163 34720 34167\nf 34164 34168 34725\nf 34164 34725 34721\nf 34165 34718 34722\nf 34165 34722 34169\nf 34166 34170 34727\nf 34166 34727 34723\nf 34167 34720 34724\nf 34167 34724 34171\nf 34168 34172 34729\nf 34168 34729 34725\nf 34169 34722 34726\nf 34169 34726 34174\nf 34170 34175 34732\nf 34170 34732 34727\nf 34171 34724 34728\nf 34171 34728 34176\nf 34172 34173 34730\nf 34172 34730 34729\nf 34173 34177 34730\nf 34174 34726 34731\nf 34174 34731 34184\nf 34175 34186 34743\nf 34175 34743 34732\nf 34176 34728 34733\nf 34176 34733 34187\nf 34177 34178 34735\nf 34177 34734 34730\nf 34177 34735 34734\nf 34178 34179 34735\nf 34179 34180 34736\nf 34179 34736 34735\nf 34180 34181 34737\nf 34180 34737 34736\nf 34181 34188 34738\nf 34181 34738 34737\nf 34182 34183 34739\nf 34182 34739 34827\nf 34182 34827 34270\nf 34183 34185 34740\nf 34183 34740 34739\nf 34184 34731 34741\nf 34184 34741 34185\nf 34185 34741 34742\nf 34185 34742 34740\nf 34186 34272 34829\nf 34186 34829 34743\nf 34187 34733 34744\nf 34187 34744 34273\nf 34188 34189 34746\nf 34188 34745 34738\nf 34188 34746 34745\nf 34189 34190 34746\nf 34190 34191 34747\nf 34190 34747 34746\nf 34191 34192 34748\nf 34191 34748 34747\nf 34192 34193 34749\nf 34192 34749 34748\nf 34193 34194 34750\nf 34193 34750 34749\nf 34194 34195 34751\nf 34194 34751 34750\nf 34195 34196 34752\nf 34195 34752 34751\nf 34196 34197 34753\nf 34196 34753 34752\nf 34197 34198 34754\nf 34197 34754 34753\nf 34198 34199 34755\nf 34198 34755 34754\nf 34199 34200 34756\nf 34199 34756 34755\nf 34200 34201 34757\nf 34200 34757 34756\nf 34201 34202 34758\nf 34201 34758 34757\nf 34202 34203 34759\nf 34202 34759 34758\nf 34203 34204 34760\nf 34203 34760 34759\nf 34204 34205 34761\nf 34204 34761 34760\nf 34205 34206 34762\nf 34205 34762 34761\nf 34206 34207 34763\nf 34206 34763 34762\nf 34207 34208 34764\nf 34207 34764 34763\nf 34208 34209 34765\nf 34208 34765 34764\nf 34209 34210 34766\nf 34209 34766 34765\nf 34210 34211 34767\nf 34210 34767 34766\nf 34211 34212 34768\nf 34211 34768 34767\nf 34212 34213 34769\nf 34212 34769 34768\nf 34213 34214 34770\nf 34213 34770 34769\nf 34214 34215 34771\nf 34214 34771 34770\nf 34215 34216 34772\nf 34215 34772 34771\nf 34216 34217 34773\nf 34216 34773 34772\nf 34217 34218 34774\nf 34217 34774 34773\nf 34218 34219 34775\nf 34218 34775 34774\nf 34219 34220 34776\nf 34219 34776 34775\nf 34220 34221 34777\nf 34220 34777 34776\nf 34221 34222 34778\nf 34221 34778 34777\nf 34222 34223 34779\nf 34222 34779 34778\nf 34223 34224 34780\nf 34223 34780 34779\nf 34224 34225 34781\nf 34224 34781 34780\nf 34225 34226 34782\nf 34225 34782 34781\nf 34226 34227 34783\nf 34226 34783 34782\nf 34227 34228 34784\nf 34227 34784 34783\nf 34228 34229 34785\nf 34228 34785 34784\nf 34229 34230 34786\nf 34229 34786 34785\nf 34230 34231 34787\nf 34230 34787 34786\nf 34231 34232 34788\nf 34231 34788 34787\nf 34232 34233 34789\nf 34232 34789 34788\nf 34233 34234 34790\nf 34233 34790 34789\nf 34234 34235 34791\nf 34234 34791 34790\nf 34235 34236 34792\nf 34235 34792 34791\nf 34236 34237 34793\nf 34236 34793 34792\nf 34237 34238 34794\nf 34237 34794 34793\nf 34238 34239 34795\nf 34238 34795 34794\nf 34239 34240 34796\nf 34239 34796 34795\nf 34240 34241 34797\nf 34240 34797 34796\nf 34241 34242 34798\nf 34241 34798 34797\nf 34242 34243 34799\nf 34242 34799 34798\nf 34243 34244 34800\nf 34243 34800 34799\nf 34244 34245 34801\nf 34244 34801 34800\nf 34245 34246 34802\nf 34245 34802 34801\nf 34246 34247 34803\nf 34246 34803 34802\nf 34247 34248 34804\nf 34247 34804 34803\nf 34248 34249 34805\nf 34248 34805 34804\nf 34249 34250 34806\nf 34249 34806 34805\nf 34250 34251 34807\nf 34250 34807 34806\nf 34251 34252 34808\nf 34251 34808 34807\nf 34252 34253 34809\nf 34252 34809 34808\nf 34253 34254 34810\nf 34253 34810 34809\nf 34254 34255 34811\nf 34254 34811 34810\nf 34255 34256 34812\nf 34255 34812 34811\nf 34256 34257 34813\nf 34256 34813 34812\nf 34257 34258 34814\nf 34257 34814 34813\nf 34258 34259 34815\nf 34258 34815 34814\nf 34259 34260 34816\nf 34259 34816 34815\nf 34260 34261 34817\nf 34260 34817 34816\nf 34261 34262 34818\nf 34261 34818 34817\nf 34262 34263 34819\nf 34262 34819 34818\nf 34263 34264 34820\nf 34263 34820 34819\nf 34264 34265 34821\nf 34264 34821 34820\nf 34265 34266 34822\nf 34265 34822 34821\nf 34266 34267 34823\nf 34266 34823 34822\nf 34267 34268 34824\nf 34267 34824 34823\nf 34268 34269 34825\nf 34268 34825 34824\nf 34269 34271 34826\nf 34269 34826 34825\nf 34270 34827 34271\nf 34271 34827 34828\nf 34271 34828 34826\nf 34272 34274 34831\nf 34272 34831 34829\nf 34273 34744 34830\nf 34273 34830 34275\nf 34274 34276 34833\nf 34274 34833 34831\nf 34275 34830 34832\nf 34275 34832 34277\nf 34276 34279 34836\nf 34276 34836 34833\nf 34277 34832 34834\nf 34277 34834 34835\nf 34277 34835 34278\nf 34278 34835 34281\nf 34279 34280 34836\nf 34280 34282 34839\nf 34280 34837 34836\nf 34280 34839 34837\nf 34281 34835 34838\nf 34281 34838 34284\nf 34282 34283 34839\nf 34283 34290 34846\nf 34283 34840 34839\nf 34283 34846 34840\nf 34284 34838 34841\nf 34284 34841 34842\nf 34284 34842 34285\nf 34285 34842 34292\nf 34286 34379 34381\nf 34286 34381 34936\nf 34286 34843 34287\nf 34286 34936 34843\nf 34287 34843 34844\nf 34287 34844 34288\nf 34288 34844 34845\nf 34288 34845 34289\nf 34289 34845 34847\nf 34289 34847 34291\nf 34290 34291 34846\nf 34291 34847 34846\nf 34292 34842 34848\nf 34292 34848 34849\nf 34292 34849 34293\nf 34293 34849 34382\nf 34294 34386 34942\nf 34294 34850 34851\nf 34294 34851 34295\nf 34294 34942 34850\nf 34295 34851 34852\nf 34295 34852 34296\nf 34296 34852 34853\nf 34296 34853 34297\nf 34297 34853 34854\nf 34297 34854 34298\nf 34298 34854 34855\nf 34298 34855 34299\nf 34299 34855 34856\nf 34299 34856 34300\nf 34300 34856 34857\nf 34300 34857 34301\nf 34301 34857 34858\nf 34301 34858 34302\nf 34302 34858 34859\nf 34302 34859 34303\nf 34303 34859 34860\nf 34303 34860 34304\nf 34304 34860 34861\nf 34304 34861 34305\nf 34305 34861 34862\nf 34305 34862 34306\nf 34306 34862 34863\nf 34306 34863 34307\nf 34307 34863 34864\nf 34307 34864 34308\nf 34308 34864 34865\nf 34308 34865 34309\nf 34309 34865 34866\nf 34309 34866 34310\nf 34310 34866 34867\nf 34310 34867 34311\nf 34311 34867 34868\nf 34311 34868 34312\nf 34312 34868 34869\nf 34312 34869 34313\nf 34313 34869 34870\nf 34313 34870 34314\nf 34314 34870 34871\nf 34314 34871 34315\nf 34315 34871 34872\nf 34315 34872 34316\nf 34316 34872 34873\nf 34316 34873 34317\nf 34317 34873 34874\nf 34317 34874 34318\nf 34318 34874 34875\nf 34318 34875 34319\nf 34319 34875 34876\nf 34319 34876 34320\nf 34320 34876 34877\nf 34320 34877 34321\nf 34321 34877 34878\nf 34321 34878 34322\nf 34322 34878 34879\nf 34322 34879 34323\nf 34323 34879 34880\nf 34323 34880 34324\nf 34324 34880 34881\nf 34324 34881 34325\nf 34325 34881 34882\nf 34325 34882 34326\nf 34326 34882 34883\nf 34326 34883 34327\nf 34327 34883 34884\nf 34327 34884 34328\nf 34328 34884 34885\nf 34328 34885 34329\nf 34329 34885 34886\nf 34329 34886 34330\nf 34330 34886 34887\nf 34330 34887 34331\nf 34331 34887 34888\nf 34331 34888 34332\nf 34332 34888 34889\nf 34332 34889 34333\nf 34333 34889 34890\nf 34333 34890 34334\nf 34334 34890 34891\nf 34334 34891 34335\nf 34335 34891 34892\nf 34335 34892 34336\nf 34336 34892 34893\nf 34336 34893 34337\nf 34337 34893 34894\nf 34337 34894 34338\nf 34338 34894 34895\nf 34338 34895 34339\nf 34339 34895 34896\nf 34339 34896 34340\nf 34340 34896 34897\nf 34340 34897 34341\nf 34341 34897 34898\nf 34341 34898 34342\nf 34342 34898 34899\nf 34342 34899 34343\nf 34343 34899 34900\nf 34343 34900 34344\nf 34344 34900 34901\nf 34344 34901 34345\nf 34345 34901 34902\nf 34345 34902 34346\nf 34346 34902 34903\nf 34346 34903 34347\nf 34347 34903 34904\nf 34347 34904 34348\nf 34348 34904 34905\nf 34348 34905 34349\nf 34349 34905 34906\nf 34349 34906 34350\nf 34350 34906 34907\nf 34350 34907 34351\nf 34351 34907 34908\nf 34351 34908 34352\nf 34352 34908 34909\nf 34352 34909 34353\nf 34353 34909 34910\nf 34353 34910 34354\nf 34354 34910 34911\nf 34354 34911 34355\nf 34355 34911 34912\nf 34355 34912 34356\nf 34356 34912 34913\nf 34356 34913 34357\nf 34357 34913 34914\nf 34357 34914 34358\nf 34358 34914 34915\nf 34358 34915 34359\nf 34359 34915 34916\nf 34359 34916 34360\nf 34360 34916 34917\nf 34360 34917 34361\nf 34361 34917 34918\nf 34361 34918 34362\nf 34362 34918 34919\nf 34362 34919 34363\nf 34363 34919 34920\nf 34363 34920 34364\nf 34364 34920 34921\nf 34364 34921 34365\nf 34365 34921 34922\nf 34365 34922 34366\nf 34366 34922 34923\nf 34366 34923 34367\nf 34367 34923 34924\nf 34367 34924 34368\nf 34368 34924 34925\nf 34368 34925 34369\nf 34369 34925 34926\nf 34369 34926 34370\nf 34370 34926 34927\nf 34370 34927 34371\nf 34371 34927 34928\nf 34371 34928 34372\nf 34372 34928 34929\nf 34372 34929 34373\nf 34373 34929 34930\nf 34373 34930 34374\nf 34374 34930 34931\nf 34374 34931 34375\nf 34375 34931 34932\nf 34375 34932 34376\nf 34376 34932 34933\nf 34376 34933 34377\nf 34377 34933 34934\nf 34377 34934 34378\nf 34378 34934 34935\nf 34378 34935 34380\nf 34379 34380 34381\nf 34380 34935 34937\nf 34380 34937 34381\nf 34381 34937 34936\nf 34382 34849 34938\nf 34382 34938 34939\nf 34382 34939 34383\nf 34383 34939 34940\nf 34383 34940 34384\nf 34384 34940 34388\nf 34385 34390 34946\nf 34385 34941 34943\nf 34385 34943 34387\nf 34385 34946 34941\nf 34386 34387 34942\nf 34387 34943 34942\nf 34388 34940 34944\nf 34388 34944 34945\nf 34388 34945 34389\nf 34389 34945 34947\nf 34389 34947 34391\nf 34390 34391 34946\nf 34391 34947 34946\nf 34392 34393 34948\nf 34392 34948 34953\nf 34392 34953 34397\nf 34393 34394 34949\nf 34393 34949 34948\nf 34394 34395 34950\nf 34394 34950 34949\nf 34395 34396 34951\nf 34395 34951 34950\nf 34396 34398 34952\nf 34396 34952 34951\nf 34397 34953 34400\nf 34398 34399 34955\nf 34398 34954 34952\nf 34398 34955 34954\nf 34399 34402 34955\nf 34400 34953 34956\nf 34400 34956 34401\nf 34401 34956 34957\nf 34401 34957 34960\nf 34401 34960 34403\nf 34402 34404 34961\nf 34402 34958 34955\nf 34402 34961 34958\nf 34403 34960 34406\nf 34404 34405 34408\nf 34404 34408 34963\nf 34404 34963 34961\nf 34405 34407 34408\nf 34406 34960 34962\nf 34406 34962 34409\nf 34407 34410 34966\nf 34407 34964 34408\nf 34407 34966 34964\nf 34408 34964 34963\nf 34409 34962 34965\nf 34409 34965 34411\nf 34410 34412 34968\nf 34410 34968 34966\nf 34411 34965 34967\nf 34411 34967 34413\nf 34412 34414 34970\nf 34412 34970 34968\nf 34413 34967 34969\nf 34413 34969 34415\nf 34414 34416 34972\nf 34414 34972 34970\nf 34415 34969 34971\nf 34415 34971 34417\nf 34416 34418 34974\nf 34416 34974 34972\nf 34417 34971 34973\nf 34417 34973 34419\nf 34418 34420 34976\nf 34418 34976 34974\nf 34419 34973 34975\nf 34419 34975 34422\nf 34420 34421 34976\nf 34421 34423 34979\nf 34421 34977 34976\nf 34421 34979 34977\nf 34422 34975 34978\nf 34422 34978 34424\nf 34423 34425 34981\nf 34423 34981 34979\nf 34424 34978 34980\nf 34424 34980 34426\nf 34425 34427 34983\nf 34425 34983 34981\nf 34426 34980 34982\nf 34426 34982 34428\nf 34427 34429 34985\nf 34427 34985 34983\nf 34428 34982 34984\nf 34428 34984 34430\nf 34429 34432 34987\nf 34429 34987 34985\nf 34430 34434 34431\nf 34430 34984 34986\nf 34430 34986 34988\nf 34430 34988 34434\nf 34431 34434 34433\nf 34432 34435 34990\nf 34432 34990 34987\nf 34433 34434 34989\nf 34433 34989 34991\nf 34433 34991 34436\nf 34434 34988 34989\nf 34435 34437 34992\nf 34435 34992 34990\nf 34436 34991 34439\nf 34437 34438 34992\nf 34438 34440 34995\nf 34438 34993 34992\nf 34438 34995 34993\nf 34439 34991 34994\nf 34439 34994 34441\nf 34440 34442 34997\nf 34440 34997 34995\nf 34441 34994 34996\nf 34441 34996 34443\nf 34442 34444 34999\nf 34442 34999 34997\nf 34443 34996 34998\nf 34443 34998 34445\nf 34444 34446 35001\nf 34444 35001 34999\nf 34445 34998 35000\nf 34445 35000 34447\nf 34446 34448 35003\nf 34446 35003 35001\nf 34447 35000 35002\nf 34447 35002 34449\nf 34448 34450 35005\nf 34448 35005 35003\nf 34449 35002 35004\nf 34449 35004 34451\nf 34450 34452 35007\nf 34450 35007 35005\nf 34451 35004 35006\nf 34451 35006 34453\nf 34452 34454 35009\nf 34452 35009 35007\nf 34453 35006 35008\nf 34453 35008 34455\nf 34454 34456 35011\nf 34454 35011 35009\nf 34455 35008 35010\nf 34455 35010 34457\nf 34456 34458 35013\nf 34456 35013 35011\nf 34457 35010 35012\nf 34457 35012 34459\nf 34458 34460 35015\nf 34458 35015 35013\nf 34459 35012 35014\nf 34459 35014 34462\nf 34460 34461 35015\nf 34461 34463 35018\nf 34461 35016 35015\nf 34461 35018 35016\nf 34462 35014 35017\nf 34462 35017 34464\nf 34463 34465 35021\nf 34463 35021 35018\nf 34464 35017 35020\nf 34464 35020 34466\nf 34465 34468 35023\nf 34465 35023 35021\nf 34466 34470 34467\nf 34466 35020 35022\nf 34466 35022 35024\nf 34466 35024 34470\nf 34467 34470 34469\nf 34468 34471 35025\nf 34468 35025 35023\nf 34469 34470 34473\nf 34469 34473 34472\nf 34470 35024 34473\nf 34471 34474 35027\nf 34471 35027 35025\nf 34472 34473 34477\nf 34472 34477 34476\nf 34473 35024 35026\nf 34473 35026 34477\nf 34474 34475 35030\nf 34474 35030 35027\nf 34475 34478 34479\nf 34475 34479 35030\nf 34476 34477 35029\nf 34476 35029 35031\nf 34476 35031 34480\nf 34477 35026 35028\nf 34477 35028 35029\nf 34478 34481 34479\nf 34479 34481 34483\nf 34479 34483 35034\nf 34479 35034 35030\nf 34480 35031 34484\nf 34481 34482 34483\nf 34482 34486 34488\nf 34482 34488 34483\nf 34483 34488 35035\nf 34483 35035 35034\nf 34484 34485 34491\nf 34484 34491 34489\nf 34484 35031 34485\nf 34485 35031 35032\nf 34485 35032 35036\nf 34485 35036 34491\nf 34486 34487 34488\nf 34487 34492 34488\nf 34488 34492 35037\nf 34488 35037 35035\nf 34489 34491 34490\nf 34490 34491 35039\nf 34490 35039 34493\nf 34491 35036 35039\nf 34492 34495 35040\nf 34492 35040 35037\nf 34493 34498 34494\nf 34493 35039 35043\nf 34493 35043 35045\nf 34493 35045 34498\nf 34494 34498 34497\nf 34495 34496 35041\nf 34495 34499 34496\nf 34495 35041 35040\nf 34496 34499 34500\nf 34496 34500 35046\nf 34496 35044 35041\nf 34496 35046 35044\nf 34497 34498 34502\nf 34497 34502 34501\nf 34498 35045 34502\nf 34499 34503 34500\nf 34500 34503 34504\nf 34500 34504 35048\nf 34500 35048 35046\nf 34501 34502 34506\nf 34501 34506 34505\nf 34502 35045 35047\nf 34502 35047 34506\nf 34503 34507 34504\nf 34504 34507 34508\nf 34504 34508 35050\nf 34504 35050 35048\nf 34505 34506 34510\nf 34505 34510 34509\nf 34506 35047 35049\nf 34506 35049 34510\nf 34507 34511 35053\nf 34507 35053 34508\nf 34508 35051 35050\nf 34508 35053 35051\nf 34509 34510 34513\nf 34509 34513 34512\nf 34510 35049 35052\nf 34510 35052 34513\nf 34511 34514 35056\nf 34511 35056 35053\nf 34512 34513 34516\nf 34512 34516 34515\nf 34513 35052 35055\nf 34513 35055 34516\nf 34514 34517 35059\nf 34514 35059 35056\nf 34515 34516 34520\nf 34515 34520 34518\nf 34516 35055 35058\nf 34516 35058 34520\nf 34517 34521 35063\nf 34517 35063 35059\nf 34518 34520 34519\nf 34519 34520 35061\nf 34519 35061 34522\nf 34520 35058 35061\nf 34521 34523 35068\nf 34521 35068 35063\nf 34522 35061 35065\nf 34522 35065 34524\nf 34523 34526 35071\nf 34523 35071 35068\nf 34524 34525 34529\nf 34524 34529 34527\nf 34524 35065 34525\nf 34525 35065 35066\nf 34525 35066 35070\nf 34525 35070 34529\nf 34526 34530 35073\nf 34526 35073 35071\nf 34527 34529 34528\nf 34528 34529 35072\nf 34528 35072 34531\nf 34529 35070 35072\nf 34530 34532 35076\nf 34530 35076 35073\nf 34531 35072 35074\nf 34531 35074 34533\nf 34532 34536 35078\nf 34532 35078 35076\nf 34533 34535 34534\nf 34533 35074 34535\nf 34534 34535 35077\nf 34534 35077 34537\nf 34535 35074 35075\nf 34535 35075 35077\nf 34536 34538 35080\nf 34536 35080 35078\nf 34537 35077 35079\nf 34537 35079 34539\nf 34538 34540 35082\nf 34538 35082 35080\nf 34539 35079 35081\nf 34539 35081 34541\nf 34540 34542 35084\nf 34540 35084 35082\nf 34541 35081 35083\nf 34541 35083 34543\nf 34542 34544 35086\nf 34542 35086 35084\nf 34543 35083 35085\nf 34543 35085 34545\nf 34544 34546 35088\nf 34544 35088 35086\nf 34545 35085 35087\nf 34545 35087 34547\nf 34546 34548 35090\nf 34546 35090 35088\nf 34547 35087 35089\nf 34547 35089 34549\nf 34548 34550 35092\nf 34548 35092 35090\nf 34549 35089 35091\nf 34549 35091 34551\nf 34550 34552 35094\nf 34550 35094 35092\nf 34551 35091 35093\nf 34551 35093 34553\nf 34552 34555 35097\nf 34552 35097 35094\nf 34553 35093 35095\nf 34553 35095 34554\nf 34554 35095 35096\nf 34554 35096 35100\nf 34554 35100 34556\nf 34555 34557 35097\nf 34556 35100 34560\nf 34557 34558 34559\nf 34557 34559 35097\nf 34558 34561 35102\nf 34558 35102 34559\nf 34559 35098 35097\nf 34559 35102 35098\nf 34560 35100 35103\nf 34560 35103 34562\nf 34561 34563 35106\nf 34561 35104 35102\nf 34561 35106 35104\nf 34562 35103 35105\nf 34562 35105 34564\nf 34563 34565 35108\nf 34563 35108 35106\nf 34564 35105 35107\nf 34564 35107 34566\nf 34565 34567 35110\nf 34565 35110 35108\nf 34566 35107 35109\nf 34566 35109 34568\nf 34567 34569 35112\nf 34567 35112 35110\nf 34568 35109 35111\nf 34568 35111 34570\nf 34569 34572 35114\nf 34569 35114 35112\nf 34570 35111 35113\nf 34570 35113 35115\nf 34570 35115 34571\nf 34571 34574 34573\nf 34571 35115 34574\nf 34572 34575 35117\nf 34572 35117 35114\nf 34573 34574 35118\nf 34573 35118 34576\nf 34574 35115 35116\nf 34574 35116 35118\nf 34575 34577 35120\nf 34575 35120 35117\nf 34576 35118 34578\nf 34577 34579 35122\nf 34577 35122 35120\nf 34578 35118 35121\nf 34578 35121 34580\nf 34579 34581 35124\nf 34579 35124 35122\nf 34580 35121 35123\nf 34580 35123 34582\nf 34581 34583 35126\nf 34581 35126 35124\nf 34582 35123 35125\nf 34582 35125 34584\nf 34583 34585 35128\nf 34583 35128 35126\nf 34584 35125 35127\nf 34584 35127 34586\nf 34585 34587 35130\nf 34585 35130 35128\nf 34586 35127 35129\nf 34586 35129 34589\nf 34587 34588 35130\nf 34588 34590 35133\nf 34588 35131 35130\nf 34588 35133 35131\nf 34589 35129 35132\nf 34589 35132 34591\nf 34590 34592 35135\nf 34590 35135 35133\nf 34591 35132 35134\nf 34591 35134 34593\nf 34592 34594 35137\nf 34592 35137 35135\nf 34593 35134 35136\nf 34593 35136 34595\nf 34594 34597 35140\nf 34594 35140 35137\nf 34595 35136 35138\nf 34595 35138 34596\nf 34596 35138 35139\nf 34596 35139 35141\nf 34596 35141 34598\nf 34597 34599 35142\nf 34597 35142 35140\nf 34598 35141 34601\nf 34599 34600 35142\nf 34600 34602 35145\nf 34600 35143 35142\nf 34600 35145 35143\nf 34601 35141 35144\nf 34601 35144 34603\nf 34602 34604 35148\nf 34602 35148 35145\nf 34603 35144 35147\nf 34603 35147 34606\nf 34604 34605 35148\nf 34605 34608 35151\nf 34605 35149 35148\nf 34605 35151 35149\nf 34606 34611 34607\nf 34606 35147 35150\nf 34606 35150 35154\nf 34606 35154 34611\nf 34607 34611 34610\nf 34608 34609 35151\nf 34609 34613 35156\nf 34609 35152 35151\nf 34609 35156 35152\nf 34610 34611 34612\nf 34611 35154 35155\nf 34611 35155 34612\nf 34612 34615 34616\nf 34612 34616 34614\nf 34612 35155 34615\nf 34613 34614 35160\nf 34613 35160 35156\nf 34614 34616 35160\nf 34615 35155 35158\nf 34615 35158 35159\nf 34615 35159 34616\nf 34616 35159 35161\nf 34616 35161 35160\nf 34617 34618 35162\nf 34617 35162 35174\nf 34617 35174 34630\nf 34618 34619 35163\nf 34618 35163 35162\nf 34619 34620 35164\nf 34619 35164 35163\nf 34620 34621 35165\nf 34620 35165 35164\nf 34621 34622 35166\nf 34621 35166 35165\nf 34622 34623 35167\nf 34622 35167 35166\nf 34623 34624 35168\nf 34623 35168 35167\nf 34624 34625 35169\nf 34624 35169 35168\nf 34625 34626 35170\nf 34625 35170 35169\nf 34626 34627 35171\nf 34626 35171 35170\nf 34627 34628 35172\nf 34627 35172 35171\nf 34628 34632 34633\nf 34628 34633 35172\nf 34629 34631 35173\nf 34629 35173 35180\nf 34629 35180 34637\nf 34630 35174 34631\nf 34631 35174 35175\nf 34631 35175 35173\nf 34632 34634 35177\nf 34632 35177 34633\nf 34633 35176 35172\nf 34633 35177 35176\nf 34634 34635 35178\nf 34634 35178 35177\nf 34635 34639 34640\nf 34635 34640 35178\nf 34636 34638 35179\nf 34636 35179 35185\nf 34636 35185 34642\nf 34637 35180 34638\nf 34638 35180 35181\nf 34638 35181 35179\nf 34639 34641 35183\nf 34639 35183 34640\nf 34640 35182 35178\nf 34640 35183 35182\nf 34641 34643 35184\nf 34641 35184 35183\nf 34642 35185 34645\nf 34643 34644 34648\nf 34643 34648 35189\nf 34643 35186 35184\nf 34643 35189 35186\nf 34644 34647 34648\nf 34645 34650 34646\nf 34645 35185 35188\nf 34645 35188 35190\nf 34645 35190 34650\nf 34646 34650 34649\nf 34647 34652 34654\nf 34647 34654 34648\nf 34648 34654 35189\nf 34649 34650 35191\nf 34649 35191 34651\nf 34650 35190 35191\nf 34651 35191 35192\nf 34651 35192 34655\nf 34652 34653 34654\nf 34653 34658 34660\nf 34653 34660 35194\nf 34653 35194 34654\nf 34654 35193 35189\nf 34654 35194 35193\nf 34655 35192 35195\nf 34655 35195 35196\nf 34655 35196 34656\nf 34656 35196 34661\nf 34657 34668 35206\nf 34657 35198 34659\nf 34657 35206 35198\nf 34658 34659 34660\nf 34659 35197 34660\nf 34659 35198 35197\nf 34660 35197 35194\nf 34661 35196 35199\nf 34661 35199 35200\nf 34661 35200 34662\nf 34662 35200 35201\nf 34662 35201 34663\nf 34663 35201 35202\nf 34663 35202 34664\nf 34664 35202 35203\nf 34664 35203 34665\nf 34665 35203 34670\nf 34666 34677 35216\nf 34666 35204 35205\nf 34666 35205 34667\nf 34666 35216 35204\nf 34667 35205 35207\nf 34667 35207 34669\nf 34668 34669 35206\nf 34669 35207 35206\nf 34670 35203 35208\nf 34670 35208 35209\nf 34670 35209 34671\nf 34671 35209 35211\nf 34671 35211 34672\nf 34672 35211 35212\nf 34672 35212 34673\nf 34673 35212 35213\nf 34673 35213 34674\nf 34674 35213 35214\nf 34674 35214 34675\nf 34675 35214 35215\nf 34675 35215 34676\nf 34676 35215 35217\nf 34676 35217 34678\nf 34677 34678 35216\nf 34678 35217 35216\nf 34679 34680 35218\nf 34679 35218 35226\nf 34679 35226 34687\nf 34680 34681 35219\nf 34680 35219 35218\nf 34681 34688 35220\nf 34681 35220 35219\nf 34682 34683 35221\nf 34682 35221 35228\nf 34682 35228 34689\nf 34683 34684 35222\nf 34683 35222 35221\nf 34684 34685 35223\nf 34684 35223 35222\nf 34685 34686 35224\nf 34685 35224 35223\nf 34686 34690 35225\nf 34686 35225 35224\nf 34687 35226 34691\nf 34688 34693 35232\nf 34688 35227 35220\nf 34688 35232 35227\nf 34689 35228 34695\nf 34690 34696 35235\nf 34690 35229 35225\nf 34690 35235 35229\nf 34691 35226 35230\nf 34691 35230 34692\nf 34692 35230 35231\nf 34692 35231 35237\nf 34692 35237 34698\nf 34693 34694 35233\nf 34693 35233 35232\nf 34694 34699 35233\nf 34695 35228 35234\nf 34695 35234 34700\nf 34696 34697 35236\nf 34696 35236 35235\nf 34697 34701 35236\nf 34698 35237 34702\nf 34699 34703 35243\nf 34699 35238 35233\nf 34699 35243 35238\nf 34700 35234 35239\nf 34700 35239 34704\nf 34701 34705 35247\nf 34701 35241 35236\nf 34701 35247 35241\nf 34702 35237 35242\nf 34702 35242 34706\nf 34703 34707 35249\nf 34703 35249 35243\nf 34704 35239 35244\nf 34704 35244 34708\nf 34705 34711 35251\nf 34705 35251 35247\nf 34706 35242 35248\nf 34706 35248 34712\nf 34707 34713 35253\nf 34707 35253 35249\nf 34708 34710 34709\nf 34708 35244 34710\nf 34709 34710 35250\nf 34709 35250 34714\nf 34710 35244 35245\nf 34710 35245 35250\nf 34711 34715 35255\nf 34711 35255 35251\nf 34712 35248 35252\nf 34712 35252 34716\nf 34713 34717 35257\nf 34713 35257 35253\nf 34714 35250 35254\nf 34714 35254 34718\nf 34715 34719 35259\nf 34715 35259 35255\nf 34716 35252 35256\nf 34716 35256 34720\nf 34717 34721 35261\nf 34717 35261 35257\nf 34718 35254 35258\nf 34718 35258 34722\nf 34719 34723 35263\nf 34719 35263 35259\nf 34720 35256 35260\nf 34720 35260 34724\nf 34721 34725 35265\nf 34721 35265 35261\nf 34722 35258 35262\nf 34722 35262 34726\nf 34723 34727 35267\nf 34723 35267 35263\nf 34724 35260 35264\nf 34724 35264 34728\nf 34725 34729 35269\nf 34725 35269 35265\nf 34726 35262 35266\nf 34726 35266 34731\nf 34727 34732 35272\nf 34727 35272 35267\nf 34728 35264 35268\nf 34728 35268 34733\nf 34729 34730 35270\nf 34729 35270 35269\nf 34730 34734 35270\nf 34731 35266 35271\nf 34731 35271 34741\nf 34732 34743 35283\nf 34732 35283 35272\nf 34733 35268 35273\nf 34733 35273 34744\nf 34734 34735 35275\nf 34734 35274 35270\nf 34734 35275 35274\nf 34735 34736 35275\nf 34736 34737 35276\nf 34736 35276 35275\nf 34737 34738 35277\nf 34737 35277 35276\nf 34738 34745 35278\nf 34738 35278 35277\nf 34739 34740 35279\nf 34739 35279 35367\nf 34739 35367 34827\nf 34740 34742 35280\nf 34740 35280 35279\nf 34741 35271 35281\nf 34741 35281 34742\nf 34742 35281 35282\nf 34742 35282 35280\nf 34743 34829 35369\nf 34743 35369 35283\nf 34744 35273 35284\nf 34744 35284 34830\nf 34745 34746 35286\nf 34745 35285 35278\nf 34745 35286 35285\nf 34746 34747 35286\nf 34747 34748 35287\nf 34747 35287 35286\nf 34748 34749 35288\nf 34748 35288 35287\nf 34749 34750 35289\nf 34749 35289 35288\nf 34750 34751 35290\nf 34750 35290 35289\nf 34751 34752 35291\nf 34751 35291 35290\nf 34752 34753 35292\nf 34752 35292 35291\nf 34753 34754 35293\nf 34753 35293 35292\nf 34754 34755 35294\nf 34754 35294 35293\nf 34755 34756 35295\nf 34755 35295 35294\nf 34756 34757 35296\nf 34756 35296 35295\nf 34757 34758 35297\nf 34757 35297 35296\nf 34758 34759 35298\nf 34758 35298 35297\nf 34759 34760 35299\nf 34759 35299 35298\nf 34760 34761 35300\nf 34760 35300 35299\nf 34761 34762 35301\nf 34761 35301 35300\nf 34762 34763 35302\nf 34762 35302 35301\nf 34763 34764 35303\nf 34763 35303 35302\nf 34764 34765 35304\nf 34764 35304 35303\nf 34765 34766 35305\nf 34765 35305 35304\nf 34766 34767 35306\nf 34766 35306 35305\nf 34767 34768 35307\nf 34767 35307 35306\nf 34768 34769 35308\nf 34768 35308 35307\nf 34769 34770 35309\nf 34769 35309 35308\nf 34770 34771 35310\nf 34770 35310 35309\nf 34771 34772 35311\nf 34771 35311 35310\nf 34772 34773 35312\nf 34772 35312 35311\nf 34773 34774 35313\nf 34773 35313 35312\nf 34774 34775 35314\nf 34774 35314 35313\nf 34775 34776 35315\nf 34775 35315 35314\nf 34776 34777 35316\nf 34776 35316 35315\nf 34777 34778 35317\nf 34777 35317 35316\nf 34778 34779 35318\nf 34778 35318 35317\nf 34779 34780 35319\nf 34779 35319 35318\nf 34780 34781 35320\nf 34780 35320 35319\nf 34781 34782 35321\nf 34781 35321 35320\nf 34782 34783 35322\nf 34782 35322 35321\nf 34783 34784 35323\nf 34783 35323 35322\nf 34784 34785 35324\nf 34784 35324 35323\nf 34785 34786 35325\nf 34785 35325 35324\nf 34786 34787 35326\nf 34786 35326 35325\nf 34787 34788 35327\nf 34787 35327 35326\nf 34788 34789 35328\nf 34788 35328 35327\nf 34789 34790 35329\nf 34789 35329 35328\nf 34790 34791 35330\nf 34790 35330 35329\nf 34791 34792 35331\nf 34791 35331 35330\nf 34792 34793 35332\nf 34792 35332 35331\nf 34793 34794 35333\nf 34793 35333 35332\nf 34794 34795 35334\nf 34794 35334 35333\nf 34795 34796 35335\nf 34795 35335 35334\nf 34796 34797 35336\nf 34796 35336 35335\nf 34797 34798 35337\nf 34797 35337 35336\nf 34798 34799 35338\nf 34798 35338 35337\nf 34799 34800 35339\nf 34799 35339 35338\nf 34800 34801 35340\nf 34800 35340 35339\nf 34801 34802 35341\nf 34801 35341 35340\nf 34802 34803 35342\nf 34802 35342 35341\nf 34803 34804 35343\nf 34803 35343 35342\nf 34804 34805 35344\nf 34804 35344 35343\nf 34805 34806 35345\nf 34805 35345 35344\nf 34806 34807 35346\nf 34806 35346 35345\nf 34807 34808 35347\nf 34807 35347 35346\nf 34808 34809 35348\nf 34808 35348 35347\nf 34809 34810 35349\nf 34809 35349 35348\nf 34810 34811 35350\nf 34810 35350 35349\nf 34811 34812 35351\nf 34811 35351 35350\nf 34812 34813 35352\nf 34812 35352 35351\nf 34813 34814 35353\nf 34813 35353 35352\nf 34814 34815 35354\nf 34814 35354 35353\nf 34815 34816 35355\nf 34815 35355 35354\nf 34816 34817 35356\nf 34816 35356 35355\nf 34817 34818 35357\nf 34817 35357 35356\nf 34818 34819 35358\nf 34818 35358 35357\nf 34819 34820 35359\nf 34819 35359 35358\nf 34820 34821 35360\nf 34820 35360 35359\nf 34821 34822 35361\nf 34821 35361 35360\nf 34822 34823 35362\nf 34822 35362 35361\nf 34823 34824 35363\nf 34823 35363 35362\nf 34824 34825 35364\nf 34824 35364 35363\nf 34825 34826 35365\nf 34825 35365 35364\nf 34826 34828 35366\nf 34826 35366 35365\nf 34827 35367 34828\nf 34828 35367 35368\nf 34828 35368 35366\nf 34829 34831 35371\nf 34829 35371 35369\nf 34830 35284 35370\nf 34830 35370 34832\nf 34831 34833 35373\nf 34831 35373 35371\nf 34832 35370 35372\nf 34832 35372 34834\nf 34833 34836 35376\nf 34833 35376 35373\nf 34834 35372 35374\nf 34834 35374 35375\nf 34834 35375 34835\nf 34835 35375 34838\nf 34836 34837 35376\nf 34837 34839 35379\nf 34837 35377 35376\nf 34837 35379 35377\nf 34838 35375 35378\nf 34838 35378 34841\nf 34839 34840 35379\nf 34840 34846 35386\nf 34840 35380 35379\nf 34840 35386 35380\nf 34841 35378 35381\nf 34841 35381 35382\nf 34841 35382 34842\nf 34842 35382 34848\nf 34843 34936 35476\nf 34843 35383 35384\nf 34843 35384 34844\nf 34843 35476 35383\nf 34844 35384 35385\nf 34844 35385 34845\nf 34845 35385 35387\nf 34845 35387 34847\nf 34846 34847 35386\nf 34847 35387 35386\nf 34848 35382 35388\nf 34848 35388 35389\nf 34848 35389 34849\nf 34849 35389 34938\nf 34850 34942 35482\nf 34850 35390 35391\nf 34850 35391 34851\nf 34850 35482 35390\nf 34851 35391 35392\nf 34851 35392 34852\nf 34852 35392 35393\nf 34852 35393 34853\nf 34853 35393 35394\nf 34853 35394 34854\nf 34854 35394 35395\nf 34854 35395 34855\nf 34855 35395 35396\nf 34855 35396 34856\nf 34856 35396 35397\nf 34856 35397 34857\nf 34857 35397 35398\nf 34857 35398 34858\nf 34858 35398 35399\nf 34858 35399 34859\nf 34859 35399 35400\nf 34859 35400 34860\nf 34860 35400 35401\nf 34860 35401 34861\nf 34861 35401 35402\nf 34861 35402 34862\nf 34862 35402 35403\nf 34862 35403 34863\nf 34863 35403 35404\nf 34863 35404 34864\nf 34864 35404 35405\nf 34864 35405 34865\nf 34865 35405 35406\nf 34865 35406 34866\nf 34866 35406 35407\nf 34866 35407 34867\nf 34867 35407 35408\nf 34867 35408 34868\nf 34868 35408 35409\nf 34868 35409 34869\nf 34869 35409 35410\nf 34869 35410 34870\nf 34870 35410 35411\nf 34870 35411 34871\nf 34871 35411 35412\nf 34871 35412 34872\nf 34872 35412 35413\nf 34872 35413 34873\nf 34873 35413 35414\nf 34873 35414 34874\nf 34874 35414 35415\nf 34874 35415 34875\nf 34875 35415 35416\nf 34875 35416 34876\nf 34876 35416 35417\nf 34876 35417 34877\nf 34877 35417 35418\nf 34877 35418 34878\nf 34878 35418 35419\nf 34878 35419 34879\nf 34879 35419 35420\nf 34879 35420 34880\nf 34880 35420 35421\nf 34880 35421 34881\nf 34881 35421 35422\nf 34881 35422 34882\nf 34882 35422 35423\nf 34882 35423 34883\nf 34883 35423 35424\nf 34883 35424 34884\nf 34884 35424 35425\nf 34884 35425 34885\nf 34885 35425 35426\nf 34885 35426 34886\nf 34886 35426 35427\nf 34886 35427 34887\nf 34887 35427 35428\nf 34887 35428 34888\nf 34888 35428 35429\nf 34888 35429 34889\nf 34889 35429 35430\nf 34889 35430 34890\nf 34890 35430 35431\nf 34890 35431 34891\nf 34891 35431 35432\nf 34891 35432 34892\nf 34892 35432 35433\nf 34892 35433 34893\nf 34893 35433 35434\nf 34893 35434 34894\nf 34894 35434 35435\nf 34894 35435 34895\nf 34895 35435 35436\nf 34895 35436 34896\nf 34896 35436 35437\nf 34896 35437 34897\nf 34897 35437 35438\nf 34897 35438 34898\nf 34898 35438 35439\nf 34898 35439 34899\nf 34899 35439 35440\nf 34899 35440 34900\nf 34900 35440 35441\nf 34900 35441 34901\nf 34901 35441 35442\nf 34901 35442 34902\nf 34902 35442 35443\nf 34902 35443 34903\nf 34903 35443 35444\nf 34903 35444 34904\nf 34904 35444 35445\nf 34904 35445 34905\nf 34905 35445 35446\nf 34905 35446 34906\nf 34906 35446 35447\nf 34906 35447 34907\nf 34907 35447 35448\nf 34907 35448 34908\nf 34908 35448 35449\nf 34908 35449 34909\nf 34909 35449 35450\nf 34909 35450 34910\nf 34910 35450 35451\nf 34910 35451 34911\nf 34911 35451 35452\nf 34911 35452 34912\nf 34912 35452 35453\nf 34912 35453 34913\nf 34913 35453 35454\nf 34913 35454 34914\nf 34914 35454 35455\nf 34914 35455 34915\nf 34915 35455 35456\nf 34915 35456 34916\nf 34916 35456 35457\nf 34916 35457 34917\nf 34917 35457 35458\nf 34917 35458 34918\nf 34918 35458 35459\nf 34918 35459 34919\nf 34919 35459 35460\nf 34919 35460 34920\nf 34920 35460 35461\nf 34920 35461 34921\nf 34921 35461 35462\nf 34921 35462 34922\nf 34922 35462 35463\nf 34922 35463 34923\nf 34923 35463 35464\nf 34923 35464 34924\nf 34924 35464 35465\nf 34924 35465 34925\nf 34925 35465 35466\nf 34925 35466 34926\nf 34926 35466 35467\nf 34926 35467 34927\nf 34927 35467 35468\nf 34927 35468 34928\nf 34928 35468 35469\nf 34928 35469 34929\nf 34929 35469 35470\nf 34929 35470 34930\nf 34930 35470 35471\nf 34930 35471 34931\nf 34931 35471 35472\nf 34931 35472 34932\nf 34932 35472 35473\nf 34932 35473 34933\nf 34933 35473 35474\nf 34933 35474 34934\nf 34934 35474 35475\nf 34934 35475 34935\nf 34935 35475 35477\nf 34935 35477 34937\nf 34936 34937 35476\nf 34937 35477 35476\nf 34938 35389 35478\nf 34938 35478 35479\nf 34938 35479 34939\nf 34939 35479 35480\nf 34939 35480 34940\nf 34940 35480 34944\nf 34941 34946 35486\nf 34941 35481 35483\nf 34941 35483 34943\nf 34941 35486 35481\nf 34942 34943 35482\nf 34943 35483 35482\nf 34944 35480 35484\nf 34944 35484 35485\nf 34944 35485 34945\nf 34945 35485 35487\nf 34945 35487 34947\nf 34946 34947 35486\nf 34947 35487 35486\nf 34948 34949 35488\nf 34948 35488 35493\nf 34948 35493 34953\nf 34949 34950 35489\nf 34949 35489 35488\nf 34950 34951 35490\nf 34950 35490 35489\nf 34951 34952 35491\nf 34951 35491 35490\nf 34952 34954 35492\nf 34952 35492 35491\nf 34953 35493 34956\nf 34954 34955 34959\nf 34954 34959 35497\nf 34954 35494 35492\nf 34954 35497 35494\nf 34955 34958 34959\nf 34956 35493 35495\nf 34956 35495 34957\nf 34957 35495 35496\nf 34957 35496 35499\nf 34957 35499 34960\nf 34958 34961 35500\nf 34958 35498 34959\nf 34958 35500 35498\nf 34959 35498 35497\nf 34960 35499 34962\nf 34961 34963 35502\nf 34961 35502 35500\nf 34962 35499 35501\nf 34962 35501 34965\nf 34963 34964 35503\nf 34963 35503 35502\nf 34964 34966 35503\nf 34965 35501 35504\nf 34965 35504 34967\nf 34966 34968 35507\nf 34966 35505 35503\nf 34966 35507 35505\nf 34967 35504 35506\nf 34967 35506 34969\nf 34968 34970 35509\nf 34968 35509 35507\nf 34969 35506 35508\nf 34969 35508 34971\nf 34970 34972 35511\nf 34970 35511 35509\nf 34971 35508 35510\nf 34971 35510 34973\nf 34972 34974 35513\nf 34972 35513 35511\nf 34973 35510 35512\nf 34973 35512 34975\nf 34974 34976 35515\nf 34974 35515 35513\nf 34975 35512 35514\nf 34975 35514 34978\nf 34976 34977 35515\nf 34977 34979 35519\nf 34977 35516 35515\nf 34977 35519 35516\nf 34978 35514 35518\nf 34978 35518 34980\nf 34979 34981 35521\nf 34979 35521 35519\nf 34980 35518 35520\nf 34980 35520 34982\nf 34981 34983 35523\nf 34981 35523 35521\nf 34982 35520 35522\nf 34982 35522 34984\nf 34983 34985 35525\nf 34983 35525 35523\nf 34984 35522 35524\nf 34984 35524 34986\nf 34985 34987 35527\nf 34985 35527 35525\nf 34986 35524 35526\nf 34986 35526 34988\nf 34987 34990 35530\nf 34987 35530 35527\nf 34988 35526 35528\nf 34988 35528 35529\nf 34988 35529 34989\nf 34989 35529 34991\nf 34990 34992 35532\nf 34990 35532 35530\nf 34991 35529 35531\nf 34991 35531 34994\nf 34992 34993 35532\nf 34993 34995 35535\nf 34993 35533 35532\nf 34993 35535 35533\nf 34994 35531 35534\nf 34994 35534 34996\nf 34995 34997 35537\nf 34995 35537 35535\nf 34996 35534 35536\nf 34996 35536 34998\nf 34997 34999 35539\nf 34997 35539 35537\nf 34998 35536 35538\nf 34998 35538 35000\nf 34999 35001 35541\nf 34999 35541 35539\nf 35000 35538 35540\nf 35000 35540 35002\nf 35001 35003 35543\nf 35001 35543 35541\nf 35002 35540 35542\nf 35002 35542 35004\nf 35003 35005 35545\nf 35003 35545 35543\nf 35004 35542 35544\nf 35004 35544 35006\nf 35005 35007 35547\nf 35005 35547 35545\nf 35006 35544 35546\nf 35006 35546 35008\nf 35007 35009 35549\nf 35007 35549 35547\nf 35008 35546 35548\nf 35008 35548 35010\nf 35009 35011 35551\nf 35009 35551 35549\nf 35010 35548 35550\nf 35010 35550 35012\nf 35011 35013 35553\nf 35011 35553 35551\nf 35012 35550 35552\nf 35012 35552 35014\nf 35013 35015 35555\nf 35013 35555 35553\nf 35014 35552 35554\nf 35014 35554 35017\nf 35015 35016 35557\nf 35015 35557 35555\nf 35016 35018 35019\nf 35016 35019 35557\nf 35017 35554 35556\nf 35017 35556 35020\nf 35018 35021 35561\nf 35018 35561 35019\nf 35019 35558 35557\nf 35019 35561 35558\nf 35020 35556 35560\nf 35020 35560 35022\nf 35021 35023 35563\nf 35021 35563 35561\nf 35022 35560 35562\nf 35022 35562 35024\nf 35023 35025 35565\nf 35023 35565 35563\nf 35024 35562 35564\nf 35024 35564 35026\nf 35025 35027 35567\nf 35025 35567 35565\nf 35026 35564 35566\nf 35026 35566 35028\nf 35027 35030 35569\nf 35027 35569 35567\nf 35028 35033 35029\nf 35028 35566 35568\nf 35028 35568 35570\nf 35028 35570 35033\nf 35029 35033 35031\nf 35030 35034 35571\nf 35030 35571 35569\nf 35031 35033 35032\nf 35032 35033 35570\nf 35032 35570 35036\nf 35034 35035 35573\nf 35034 35573 35571\nf 35035 35037 35038\nf 35035 35038 35573\nf 35036 35570 35572\nf 35036 35572 35039\nf 35037 35040 35038\nf 35038 35040 35042\nf 35038 35042 35575\nf 35038 35575 35573\nf 35039 35572 35574\nf 35039 35574 35043\nf 35040 35041 35042\nf 35041 35044 35042\nf 35042 35044 35575\nf 35043 35574 35576\nf 35043 35576 35045\nf 35044 35046 35579\nf 35044 35577 35575\nf 35044 35579 35577\nf 35045 35576 35578\nf 35045 35578 35047\nf 35046 35048 35581\nf 35046 35581 35579\nf 35047 35578 35580\nf 35047 35580 35049\nf 35048 35050 35584\nf 35048 35584 35581\nf 35049 35580 35582\nf 35049 35582 35052\nf 35050 35051 35587\nf 35050 35587 35584\nf 35051 35053 35054\nf 35051 35054 35587\nf 35052 35582 35585\nf 35052 35585 35055\nf 35053 35056 35054\nf 35054 35056 35057\nf 35054 35057 35590\nf 35054 35590 35587\nf 35055 35585 35588\nf 35055 35588 35058\nf 35056 35059 35057\nf 35057 35059 35060\nf 35057 35060 35594\nf 35057 35594 35590\nf 35058 35588 35591\nf 35058 35591 35061\nf 35059 35063 35060\nf 35060 35063 35064\nf 35060 35064 35596\nf 35060 35596 35594\nf 35061 35062 35067\nf 35061 35067 35065\nf 35061 35591 35062\nf 35062 35591 35592\nf 35062 35592 35595\nf 35062 35595 35067\nf 35063 35068 35064\nf 35064 35068 35069\nf 35064 35069 35598\nf 35064 35598 35596\nf 35065 35067 35066\nf 35066 35067 35597\nf 35066 35597 35070\nf 35067 35595 35597\nf 35068 35071 35601\nf 35068 35601 35069\nf 35069 35599 35598\nf 35069 35601 35599\nf 35070 35597 35600\nf 35070 35600 35072\nf 35071 35073 35604\nf 35071 35604 35601\nf 35072 35600 35603\nf 35072 35603 35074\nf 35073 35076 35608\nf 35073 35608 35604\nf 35074 35603 35606\nf 35074 35606 35075\nf 35075 35606 35607\nf 35075 35607 35609\nf 35075 35609 35077\nf 35076 35078 35610\nf 35076 35610 35608\nf 35077 35609 35079\nf 35078 35080 35612\nf 35078 35612 35610\nf 35079 35609 35611\nf 35079 35611 35081\nf 35080 35082 35614\nf 35080 35614 35612\nf 35081 35611 35613\nf 35081 35613 35083\nf 35082 35084 35616\nf 35082 35616 35614\nf 35083 35613 35615\nf 35083 35615 35085\nf 35084 35086 35618\nf 35084 35618 35616\nf 35085 35615 35617\nf 35085 35617 35087\nf 35086 35088 35620\nf 35086 35620 35618\nf 35087 35617 35619\nf 35087 35619 35089\nf 35088 35090 35622\nf 35088 35622 35620\nf 35089 35619 35621\nf 35089 35621 35091\nf 35090 35092 35624\nf 35090 35624 35622\nf 35091 35621 35623\nf 35091 35623 35093\nf 35092 35094 35626\nf 35092 35626 35624\nf 35093 35623 35625\nf 35093 35625 35095\nf 35094 35097 35626\nf 35095 35625 35629\nf 35095 35629 35631\nf 35095 35631 35096\nf 35096 35101 35100\nf 35096 35631 35101\nf 35097 35098 35099\nf 35097 35099 35626\nf 35098 35102 35630\nf 35098 35630 35099\nf 35099 35627 35626\nf 35099 35630 35627\nf 35100 35101 35634\nf 35100 35634 35103\nf 35101 35631 35632\nf 35101 35632 35634\nf 35102 35104 35635\nf 35102 35633 35630\nf 35102 35635 35633\nf 35103 35634 35105\nf 35104 35106 35637\nf 35104 35637 35635\nf 35105 35634 35636\nf 35105 35636 35107\nf 35106 35108 35639\nf 35106 35639 35637\nf 35107 35636 35638\nf 35107 35638 35109\nf 35108 35110 35641\nf 35108 35641 35639\nf 35109 35638 35640\nf 35109 35640 35111\nf 35110 35112 35643\nf 35110 35643 35641\nf 35111 35640 35642\nf 35111 35642 35113\nf 35112 35114 35645\nf 35112 35645 35643\nf 35113 35642 35644\nf 35113 35644 35115\nf 35114 35117 35647\nf 35114 35647 35645\nf 35115 35644 35646\nf 35115 35646 35648\nf 35115 35648 35116\nf 35116 35119 35118\nf 35116 35648 35119\nf 35117 35120 35650\nf 35117 35650 35647\nf 35118 35119 35651\nf 35118 35651 35121\nf 35119 35648 35649\nf 35119 35649 35651\nf 35120 35122 35652\nf 35120 35652 35650\nf 35121 35651 35123\nf 35122 35124 35654\nf 35122 35654 35652\nf 35123 35651 35653\nf 35123 35653 35125\nf 35124 35126 35656\nf 35124 35656 35654\nf 35125 35653 35655\nf 35125 35655 35127\nf 35126 35128 35658\nf 35126 35658 35656\nf 35127 35655 35657\nf 35127 35657 35129\nf 35128 35130 35660\nf 35128 35660 35658\nf 35129 35657 35659\nf 35129 35659 35132\nf 35130 35131 35660\nf 35131 35133 35663\nf 35131 35661 35660\nf 35131 35663 35661\nf 35132 35659 35662\nf 35132 35662 35134\nf 35133 35135 35665\nf 35133 35665 35663\nf 35134 35662 35664\nf 35134 35664 35136\nf 35135 35137 35667\nf 35135 35667 35665\nf 35136 35664 35666\nf 35136 35666 35138\nf 35137 35140 35670\nf 35137 35670 35667\nf 35138 35666 35668\nf 35138 35668 35139\nf 35139 35668 35669\nf 35139 35669 35671\nf 35139 35671 35141\nf 35140 35142 35672\nf 35140 35672 35670\nf 35141 35671 35144\nf 35142 35143 35674\nf 35142 35674 35672\nf 35143 35145 35146\nf 35143 35146 35674\nf 35144 35671 35673\nf 35144 35673 35147\nf 35145 35148 35677\nf 35145 35677 35146\nf 35146 35675 35674\nf 35146 35677 35675\nf 35147 35673 35676\nf 35147 35676 35150\nf 35148 35149 35679\nf 35148 35679 35677\nf 35149 35151 35153\nf 35149 35153 35679\nf 35150 35676 35678\nf 35150 35678 35154\nf 35151 35152 35153\nf 35152 35156 35157\nf 35152 35157 35153\nf 35153 35157 35680\nf 35153 35680 35679\nf 35154 35678 35681\nf 35154 35681 35682\nf 35154 35682 35155\nf 35155 35682 35158\nf 35156 35160 35688\nf 35156 35688 35157\nf 35157 35683 35680\nf 35157 35684 35683\nf 35157 35688 35684\nf 35158 35682 35685\nf 35158 35685 35687\nf 35158 35687 35159\nf 35159 35687 35689\nf 35159 35689 35161\nf 35160 35161 35688\nf 35161 35689 35688\nf 35162 35163 35691\nf 35162 35691 35703\nf 35162 35703 35174\nf 35163 35164 35692\nf 35163 35692 35691\nf 35164 35165 35693\nf 35164 35693 35692\nf 35165 35166 35694\nf 35165 35694 35693\nf 35166 35167 35695\nf 35166 35695 35694\nf 35167 35168 35696\nf 35167 35696 35695\nf 35168 35169 35697\nf 35168 35697 35696\nf 35169 35170 35698\nf 35169 35698 35697\nf 35170 35171 35699\nf 35170 35699 35698\nf 35171 35172 35700\nf 35171 35700 35699\nf 35172 35176 35701\nf 35172 35701 35700\nf 35173 35175 35702\nf 35173 35702 35712\nf 35173 35712 35180\nf 35174 35703 35175\nf 35175 35703 35704\nf 35175 35704 35702\nf 35176 35177 35709\nf 35176 35707 35701\nf 35176 35709 35707\nf 35177 35178 35709\nf 35178 35182 35710\nf 35178 35710 35709\nf 35179 35181 35711\nf 35179 35711 35717\nf 35179 35717 35185\nf 35180 35712 35181\nf 35181 35712 35713\nf 35181 35713 35711\nf 35182 35183 35716\nf 35182 35714 35710\nf 35182 35716 35714\nf 35183 35184 35716\nf 35184 35186 35187\nf 35184 35187 35716\nf 35185 35717 35188\nf 35186 35189 35721\nf 35186 35719 35187\nf 35186 35721 35719\nf 35187 35718 35716\nf 35187 35719 35718\nf 35188 35717 35720\nf 35188 35720 35190\nf 35189 35193 35726\nf 35189 35726 35721\nf 35190 35720 35723\nf 35190 35723 35724\nf 35190 35724 35191\nf 35191 35724 35725\nf 35191 35725 35192\nf 35192 35725 35195\nf 35193 35194 35726\nf 35194 35197 35731\nf 35194 35727 35726\nf 35194 35731 35727\nf 35195 35725 35729\nf 35195 35729 35730\nf 35195 35730 35196\nf 35196 35730 35199\nf 35197 35198 35731\nf 35198 35206 35741\nf 35198 35732 35731\nf 35198 35741 35732\nf 35199 35730 35733\nf 35199 35733 35734\nf 35199 35734 35200\nf 35200 35734 35735\nf 35200 35735 35201\nf 35201 35735 35736\nf 35201 35736 35202\nf 35202 35736 35737\nf 35202 35737 35203\nf 35203 35737 35738\nf 35203 35738 35208\nf 35204 35216 35749\nf 35204 35739 35740\nf 35204 35740 35205\nf 35204 35749 35739\nf 35205 35740 35742\nf 35205 35742 35207\nf 35206 35207 35741\nf 35207 35742 35741\nf 35208 35210 35209\nf 35208 35738 35210\nf 35209 35210 35744\nf 35209 35744 35211\nf 35210 35738 35743\nf 35210 35743 35744\nf 35211 35744 35745\nf 35211 35745 35212\nf 35212 35745 35746\nf 35212 35746 35213\nf 35213 35746 35747\nf 35213 35747 35214\nf 35214 35747 35748\nf 35214 35748 35215\nf 35215 35748 35750\nf 35215 35750 35217\nf 35216 35217 35749\nf 35217 35750 35749\nf 35218 35219 35752\nf 35218 35752 35760\nf 35218 35760 35226\nf 35219 35220 35753\nf 35219 35753 35752\nf 35220 35227 35754\nf 35220 35754 35753\nf 35221 35222 35755\nf 35221 35755 35762\nf 35221 35762 35228\nf 35222 35223 35756\nf 35222 35756 35755\nf 35223 35224 35757\nf 35223 35757 35756\nf 35224 35225 35758\nf 35224 35758 35757\nf 35225 35229 35759\nf 35225 35759 35758\nf 35226 35760 35230\nf 35227 35232 35766\nf 35227 35761 35754\nf 35227 35766 35761\nf 35228 35762 35234\nf 35229 35235 35770\nf 35229 35763 35759\nf 35229 35770 35763\nf 35230 35760 35764\nf 35230 35764 35231\nf 35231 35764 35765\nf 35231 35765 35772\nf 35231 35772 35237\nf 35232 35233 35767\nf 35232 35767 35766\nf 35233 35238 35767\nf 35234 35762 35768\nf 35234 35768 35239\nf 35235 35236 35771\nf 35235 35771 35770\nf 35236 35241 35771\nf 35237 35772 35242\nf 35238 35243 35777\nf 35238 35773 35767\nf 35238 35777 35773\nf 35239 35240 35246\nf 35239 35246 35244\nf 35239 35768 35240\nf 35240 35768 35769\nf 35240 35769 35774\nf 35240 35774 35246\nf 35241 35247 35779\nf 35241 35775 35771\nf 35241 35779 35775\nf 35242 35772 35776\nf 35242 35776 35248\nf 35243 35249 35781\nf 35243 35781 35777\nf 35244 35246 35245\nf 35245 35246 35778\nf 35245 35778 35250\nf 35246 35774 35778\nf 35247 35251 35783\nf 35247 35783 35779\nf 35248 35776 35780\nf 35248 35780 35252\nf 35249 35253 35785\nf 35249 35785 35781\nf 35250 35778 35782\nf 35250 35782 35254\nf 35251 35255 35787\nf 35251 35787 35783\nf 35252 35780 35784\nf 35252 35784 35256\nf 35253 35257 35789\nf 35253 35789 35785\nf 35254 35782 35786\nf 35254 35786 35258\nf 35255 35259 35791\nf 35255 35791 35787\nf 35256 35784 35788\nf 35256 35788 35260\nf 35257 35261 35793\nf 35257 35793 35789\nf 35258 35786 35790\nf 35258 35790 35262\nf 35259 35263 35795\nf 35259 35795 35791\nf 35260 35788 35792\nf 35260 35792 35264\nf 35261 35265 35797\nf 35261 35797 35793\nf 35262 35790 35794\nf 35262 35794 35266\nf 35263 35267 35799\nf 35263 35799 35795\nf 35264 35792 35796\nf 35264 35796 35268\nf 35265 35269 35801\nf 35265 35801 35797\nf 35266 35794 35798\nf 35266 35798 35271\nf 35267 35272 35804\nf 35267 35804 35799\nf 35268 35796 35800\nf 35268 35800 35273\nf 35269 35270 35802\nf 35269 35802 35801\nf 35270 35274 35802\nf 35271 35798 35803\nf 35271 35803 35281\nf 35272 35283 35815\nf 35272 35815 35804\nf 35273 35800 35805\nf 35273 35805 35284\nf 35274 35275 35807\nf 35274 35806 35802\nf 35274 35807 35806\nf 35275 35276 35807\nf 35276 35277 35808\nf 35276 35808 35807\nf 35277 35278 35809\nf 35277 35809 35808\nf 35278 35285 35810\nf 35278 35810 35809\nf 35279 35280 35811\nf 35279 35811 35899\nf 35279 35899 35367\nf 35280 35282 35812\nf 35280 35812 35811\nf 35281 35803 35813\nf 35281 35813 35282\nf 35282 35813 35814\nf 35282 35814 35812\nf 35283 35369 35901\nf 35283 35901 35815\nf 35284 35805 35816\nf 35284 35816 35370\nf 35285 35286 35818\nf 35285 35817 35810\nf 35285 35818 35817\nf 35286 35287 35818\nf 35287 35288 35819\nf 35287 35819 35818\nf 35288 35289 35820\nf 35288 35820 35819\nf 35289 35290 35821\nf 35289 35821 35820\nf 35290 35291 35822\nf 35290 35822 35821\nf 35291 35292 35823\nf 35291 35823 35822\nf 35292 35293 35824\nf 35292 35824 35823\nf 35293 35294 35825\nf 35293 35825 35824\nf 35294 35295 35826\nf 35294 35826 35825\nf 35295 35296 35827\nf 35295 35827 35826\nf 35296 35297 35828\nf 35296 35828 35827\nf 35297 35298 35829\nf 35297 35829 35828\nf 35298 35299 35830\nf 35298 35830 35829\nf 35299 35300 35831\nf 35299 35831 35830\nf 35300 35301 35832\nf 35300 35832 35831\nf 35301 35302 35833\nf 35301 35833 35832\nf 35302 35303 35834\nf 35302 35834 35833\nf 35303 35304 35835\nf 35303 35835 35834\nf 35304 35305 35836\nf 35304 35836 35835\nf 35305 35306 35837\nf 35305 35837 35836\nf 35306 35307 35838\nf 35306 35838 35837\nf 35307 35308 35839\nf 35307 35839 35838\nf 35308 35309 35840\nf 35308 35840 35839\nf 35309 35310 35841\nf 35309 35841 35840\nf 35310 35311 35842\nf 35310 35842 35841\nf 35311 35312 35843\nf 35311 35843 35842\nf 35312 35313 35844\nf 35312 35844 35843\nf 35313 35314 35845\nf 35313 35845 35844\nf 35314 35315 35846\nf 35314 35846 35845\nf 35315 35316 35847\nf 35315 35847 35846\nf 35316 35317 35848\nf 35316 35848 35847\nf 35317 35318 35849\nf 35317 35849 35848\nf 35318 35319 35850\nf 35318 35850 35849\nf 35319 35320 35851\nf 35319 35851 35850\nf 35320 35321 35852\nf 35320 35852 35851\nf 35321 35322 35853\nf 35321 35853 35852\nf 35322 35323 35854\nf 35322 35854 35853\nf 35323 35324 35855\nf 35323 35855 35854\nf 35324 35325 35856\nf 35324 35856 35855\nf 35325 35326 35857\nf 35325 35857 35856\nf 35326 35327 35858\nf 35326 35858 35857\nf 35327 35328 35859\nf 35327 35859 35858\nf 35328 35329 35860\nf 35328 35860 35859\nf 35329 35330 35861\nf 35329 35861 35860\nf 35330 35331 35862\nf 35330 35862 35861\nf 35331 35332 35863\nf 35331 35863 35862\nf 35332 35333 35864\nf 35332 35864 35863\nf 35333 35334 35865\nf 35333 35865 35864\nf 35334 35335 35866\nf 35334 35866 35865\nf 35335 35336 35867\nf 35335 35867 35866\nf 35336 35337 35868\nf 35336 35868 35867\nf 35337 35338 35869\nf 35337 35869 35868\nf 35338 35339 35870\nf 35338 35870 35869\nf 35339 35340 35871\nf 35339 35871 35870\nf 35340 35341 35872\nf 35340 35872 35871\nf 35341 35342 35873\nf 35341 35873 35872\nf 35342 35343 35874\nf 35342 35874 35873\nf 35343 35344 35875\nf 35343 35875 35874\nf 35344 35345 35876\nf 35344 35876 35875\nf 35345 35346 35877\nf 35345 35877 35876\nf 35346 35347 35878\nf 35346 35878 35877\nf 35347 35348 35879\nf 35347 35879 35878\nf 35348 35349 35880\nf 35348 35880 35879\nf 35349 35350 35881\nf 35349 35881 35880\nf 35350 35351 35882\nf 35350 35882 35881\nf 35351 35352 35883\nf 35351 35883 35882\nf 35352 35353 35884\nf 35352 35884 35883\nf 35353 35354 35885\nf 35353 35885 35884\nf 35354 35355 35886\nf 35354 35886 35885\nf 35355 35356 35887\nf 35355 35887 35886\nf 35356 35357 35888\nf 35356 35888 35887\nf 35357 35358 35889\nf 35357 35889 35888\nf 35358 35359 35890\nf 35358 35890 35889\nf 35359 35360 35891\nf 35359 35891 35890\nf 35360 35361 35892\nf 35360 35892 35891\nf 35361 35362 35893\nf 35361 35893 35892\nf 35362 35363 35894\nf 35362 35894 35893\nf 35363 35364 35895\nf 35363 35895 35894\nf 35364 35365 35896\nf 35364 35896 35895\nf 35365 35366 35897\nf 35365 35897 35896\nf 35366 35368 35898\nf 35366 35898 35897\nf 35367 35899 35368\nf 35368 35899 35900\nf 35368 35900 35898\nf 35369 35371 35903\nf 35369 35903 35901\nf 35370 35816 35902\nf 35370 35902 35372\nf 35371 35373 35905\nf 35371 35905 35903\nf 35372 35902 35904\nf 35372 35904 35374\nf 35373 35376 35909\nf 35373 35909 35905\nf 35374 35904 35906\nf 35374 35906 35907\nf 35374 35907 35375\nf 35375 35907 35378\nf 35376 35377 35909\nf 35377 35379 35912\nf 35377 35910 35909\nf 35377 35912 35910\nf 35378 35907 35911\nf 35378 35911 35381\nf 35379 35380 35912\nf 35380 35386 35919\nf 35380 35913 35912\nf 35380 35919 35913\nf 35381 35911 35914\nf 35381 35914 35915\nf 35381 35915 35382\nf 35382 35915 35388\nf 35383 35476 36009\nf 35383 35916 35917\nf 35383 35917 35384\nf 35383 36009 35916\nf 35384 35917 35918\nf 35384 35918 35385\nf 35385 35918 35920\nf 35385 35920 35387\nf 35386 35387 35919\nf 35387 35920 35919\nf 35388 35915 35921\nf 35388 35921 35922\nf 35388 35922 35389\nf 35389 35922 35478\nf 35390 35482 36015\nf 35390 35923 35924\nf 35390 35924 35391\nf 35390 36015 35923\nf 35391 35924 35925\nf 35391 35925 35392\nf 35392 35925 35926\nf 35392 35926 35393\nf 35393 35926 35927\nf 35393 35927 35394\nf 35394 35927 35928\nf 35394 35928 35395\nf 35395 35928 35929\nf 35395 35929 35396\nf 35396 35929 35930\nf 35396 35930 35397\nf 35397 35930 35931\nf 35397 35931 35398\nf 35398 35931 35932\nf 35398 35932 35399\nf 35399 35932 35933\nf 35399 35933 35400\nf 35400 35933 35934\nf 35400 35934 35401\nf 35401 35934 35935\nf 35401 35935 35402\nf 35402 35935 35936\nf 35402 35936 35403\nf 35403 35936 35937\nf 35403 35937 35404\nf 35404 35937 35938\nf 35404 35938 35405\nf 35405 35938 35939\nf 35405 35939 35406\nf 35406 35939 35940\nf 35406 35940 35407\nf 35407 35940 35941\nf 35407 35941 35408\nf 35408 35941 35942\nf 35408 35942 35409\nf 35409 35942 35943\nf 35409 35943 35410\nf 35410 35943 35944\nf 35410 35944 35411\nf 35411 35944 35945\nf 35411 35945 35412\nf 35412 35945 35946\nf 35412 35946 35413\nf 35413 35946 35947\nf 35413 35947 35414\nf 35414 35947 35948\nf 35414 35948 35415\nf 35415 35948 35949\nf 35415 35949 35416\nf 35416 35949 35950\nf 35416 35950 35417\nf 35417 35950 35951\nf 35417 35951 35418\nf 35418 35951 35952\nf 35418 35952 35419\nf 35419 35952 35953\nf 35419 35953 35420\nf 35420 35953 35954\nf 35420 35954 35421\nf 35421 35954 35955\nf 35421 35955 35422\nf 35422 35955 35956\nf 35422 35956 35423\nf 35423 35956 35957\nf 35423 35957 35424\nf 35424 35957 35958\nf 35424 35958 35425\nf 35425 35958 35959\nf 35425 35959 35426\nf 35426 35959 35960\nf 35426 35960 35427\nf 35427 35960 35961\nf 35427 35961 35428\nf 35428 35961 35962\nf 35428 35962 35429\nf 35429 35962 35963\nf 35429 35963 35430\nf 35430 35963 35964\nf 35430 35964 35431\nf 35431 35964 35965\nf 35431 35965 35432\nf 35432 35965 35966\nf 35432 35966 35433\nf 35433 35966 35967\nf 35433 35967 35434\nf 35434 35967 35968\nf 35434 35968 35435\nf 35435 35968 35969\nf 35435 35969 35436\nf 35436 35969 35970\nf 35436 35970 35437\nf 35437 35970 35971\nf 35437 35971 35438\nf 35438 35971 35972\nf 35438 35972 35439\nf 35439 35972 35973\nf 35439 35973 35440\nf 35440 35973 35974\nf 35440 35974 35441\nf 35441 35974 35975\nf 35441 35975 35442\nf 35442 35975 35976\nf 35442 35976 35443\nf 35443 35976 35977\nf 35443 35977 35444\nf 35444 35977 35978\nf 35444 35978 35445\nf 35445 35978 35979\nf 35445 35979 35446\nf 35446 35979 35980\nf 35446 35980 35447\nf 35447 35980 35981\nf 35447 35981 35448\nf 35448 35981 35982\nf 35448 35982 35449\nf 35449 35982 35983\nf 35449 35983 35450\nf 35450 35983 35984\nf 35450 35984 35451\nf 35451 35984 35985\nf 35451 35985 35452\nf 35452 35985 35986\nf 35452 35986 35453\nf 35453 35986 35987\nf 35453 35987 35454\nf 35454 35987 35988\nf 35454 35988 35455\nf 35455 35988 35989\nf 35455 35989 35456\nf 35456 35989 35990\nf 35456 35990 35457\nf 35457 35990 35991\nf 35457 35991 35458\nf 35458 35991 35992\nf 35458 35992 35459\nf 35459 35992 35993\nf 35459 35993 35460\nf 35460 35993 35994\nf 35460 35994 35461\nf 35461 35994 35995\nf 35461 35995 35462\nf 35462 35995 35996\nf 35462 35996 35463\nf 35463 35996 35997\nf 35463 35997 35464\nf 35464 35997 35998\nf 35464 35998 35465\nf 35465 35998 35999\nf 35465 35999 35466\nf 35466 35999 36000\nf 35466 36000 35467\nf 35467 36000 36001\nf 35467 36001 35468\nf 35468 36001 36002\nf 35468 36002 35469\nf 35469 36002 36003\nf 35469 36003 35470\nf 35470 36003 36004\nf 35470 36004 35471\nf 35471 36004 36005\nf 35471 36005 35472\nf 35472 36005 36006\nf 35472 36006 35473\nf 35473 36006 36007\nf 35473 36007 35474\nf 35474 36007 36008\nf 35474 36008 35475\nf 35475 36008 36010\nf 35475 36010 35477\nf 35476 35477 36009\nf 35477 36010 36009\nf 35478 35922 36011\nf 35478 36011 36012\nf 35478 36012 35479\nf 35479 36012 36013\nf 35479 36013 35480\nf 35480 36013 35484\nf 35481 35486 36019\nf 35481 36014 36016\nf 35481 36016 35483\nf 35481 36019 36014\nf 35482 35483 36015\nf 35483 36016 36015\nf 35484 36013 36017\nf 35484 36017 36018\nf 35484 36018 35485\nf 35485 36018 36020\nf 35485 36020 35487\nf 35486 35487 36019\nf 35487 36020 36019\nf 35488 35489 36021\nf 35488 36021 36026\nf 35488 36026 35493\nf 35489 35490 36022\nf 35489 36022 36021\nf 35490 35491 36023\nf 35490 36023 36022\nf 35491 35492 36024\nf 35491 36024 36023\nf 35492 35494 36025\nf 35492 36025 36024\nf 35493 36026 35495\nf 35494 35497 36030\nf 35494 36027 36025\nf 35494 36030 36027\nf 35495 36026 36028\nf 35495 36028 35496\nf 35496 36028 36029\nf 35496 36029 36032\nf 35496 36032 35499\nf 35497 35498 36031\nf 35497 36031 36030\nf 35498 35500 36031\nf 35499 36032 35501\nf 35500 35502 36035\nf 35500 36033 36031\nf 35500 36035 36033\nf 35501 36032 36034\nf 35501 36034 35504\nf 35502 35503 36036\nf 35502 36036 36035\nf 35503 35505 36036\nf 35504 36034 36037\nf 35504 36037 35506\nf 35505 35507 36041\nf 35505 36038 36036\nf 35505 36041 36038\nf 35506 36037 36040\nf 35506 36040 35508\nf 35507 35509 36043\nf 35507 36043 36041\nf 35508 36040 36042\nf 35508 36042 35510\nf 35509 35511 36045\nf 35509 36045 36043\nf 35510 36042 36044\nf 35510 36044 35512\nf 35511 35513 36047\nf 35511 36047 36045\nf 35512 36044 36046\nf 35512 36046 35514\nf 35513 35515 36047\nf 35514 36046 36049\nf 35514 36049 35518\nf 35515 35516 35517\nf 35515 35517 36047\nf 35516 35519 36050\nf 35516 36050 35517\nf 35517 36048 36047\nf 35517 36050 36048\nf 35518 36049 36051\nf 35518 36051 35520\nf 35519 35521 36054\nf 35519 36052 36050\nf 35519 36054 36052\nf 35520 36051 36053\nf 35520 36053 35522\nf 35521 35523 36056\nf 35521 36056 36054\nf 35522 36053 36055\nf 35522 36055 35524\nf 35523 35525 36058\nf 35523 36058 36056\nf 35524 36055 36057\nf 35524 36057 35526\nf 35525 35527 36060\nf 35525 36060 36058\nf 35526 36057 36059\nf 35526 36059 35528\nf 35527 35530 36064\nf 35527 36064 36060\nf 35528 36059 36061\nf 35528 36061 36062\nf 35528 36062 35529\nf 35529 36062 35531\nf 35530 35532 36066\nf 35530 36066 36064\nf 35531 36062 36065\nf 35531 36065 35534\nf 35532 35533 36066\nf 35533 35535 36070\nf 35533 36067 36066\nf 35533 36070 36067\nf 35534 36065 36069\nf 35534 36069 35536\nf 35535 35537 36072\nf 35535 36072 36070\nf 35536 36069 36071\nf 35536 36071 35538\nf 35537 35539 36074\nf 35537 36074 36072\nf 35538 36071 36073\nf 35538 36073 35540\nf 35539 35541 36076\nf 35539 36076 36074\nf 35540 36073 36075\nf 35540 36075 35542\nf 35541 35543 36078\nf 35541 36078 36076\nf 35542 36075 36077\nf 35542 36077 35544\nf 35543 35545 36080\nf 35543 36080 36078\nf 35544 36077 36079\nf 35544 36079 35546\nf 35545 35547 36082\nf 35545 36082 36080\nf 35546 36079 36081\nf 35546 36081 35548\nf 35547 35549 36084\nf 35547 36084 36082\nf 35548 36081 36083\nf 35548 36083 35550\nf 35549 35551 36086\nf 35549 36086 36084\nf 35550 36083 36085\nf 35550 36085 35552\nf 35551 35553 36088\nf 35551 36088 36086\nf 35552 36085 36087\nf 35552 36087 35554\nf 35553 35555 36090\nf 35553 36090 36088\nf 35554 36087 36089\nf 35554 36089 35556\nf 35555 35557 36090\nf 35556 36089 36093\nf 35556 36093 35560\nf 35557 35558 35559\nf 35557 35559 36090\nf 35558 35561 36094\nf 35558 36094 35559\nf 35559 36091 36090\nf 35559 36094 36091\nf 35560 36093 36095\nf 35560 36095 35562\nf 35561 35563 36098\nf 35561 36096 36094\nf 35561 36098 36096\nf 35562 36095 36097\nf 35562 36097 35564\nf 35563 35565 36100\nf 35563 36100 36098\nf 35564 36097 36099\nf 35564 36099 35566\nf 35565 35567 36102\nf 35565 36102 36100\nf 35566 36099 36101\nf 35566 36101 35568\nf 35567 35569 36104\nf 35567 36104 36102\nf 35568 36101 36103\nf 35568 36103 35570\nf 35569 35571 36106\nf 35569 36106 36104\nf 35570 36103 36105\nf 35570 36105 35572\nf 35571 35573 36108\nf 35571 36108 36106\nf 35572 36105 36107\nf 35572 36107 35574\nf 35573 35575 36110\nf 35573 36110 36108\nf 35574 36107 36109\nf 35574 36109 35576\nf 35575 35577 36113\nf 35575 36113 36110\nf 35576 36109 36111\nf 35576 36111 35578\nf 35577 35579 36116\nf 35577 36116 36113\nf 35578 36111 36114\nf 35578 36114 35580\nf 35579 35581 36120\nf 35579 36120 36116\nf 35580 36114 36117\nf 35580 36117 35582\nf 35581 35584 36122\nf 35581 36122 36120\nf 35582 35583 35586\nf 35582 35586 35585\nf 35582 36117 35583\nf 35583 36117 36118\nf 35583 36118 36121\nf 35583 36121 35586\nf 35584 35587 36124\nf 35584 36124 36122\nf 35585 35586 35589\nf 35585 35589 35588\nf 35586 36121 36123\nf 35586 36123 35589\nf 35587 35590 36126\nf 35587 36126 36124\nf 35588 35589 35593\nf 35588 35593 35591\nf 35589 36123 36125\nf 35589 36125 35593\nf 35590 35594 36128\nf 35590 36128 36126\nf 35591 35593 35592\nf 35592 35593 36127\nf 35592 36127 35595\nf 35593 36125 36127\nf 35594 35596 36130\nf 35594 36130 36128\nf 35595 36127 36129\nf 35595 36129 35597\nf 35596 35598 36132\nf 35596 36132 36130\nf 35597 36129 36131\nf 35597 36131 35600\nf 35598 35599 36134\nf 35598 36134 36132\nf 35599 35601 35602\nf 35599 35602 36134\nf 35600 36131 36133\nf 35600 36133 35603\nf 35601 35604 35602\nf 35602 35604 35605\nf 35602 35605 36136\nf 35602 36136 36134\nf 35603 36133 36135\nf 35603 36135 35606\nf 35604 35608 36140\nf 35604 36140 35605\nf 35605 36137 36136\nf 35605 36140 36137\nf 35606 36135 36138\nf 35606 36138 35607\nf 35607 36138 36139\nf 35607 36139 36141\nf 35607 36141 35609\nf 35608 35610 36142\nf 35608 36142 36140\nf 35609 36141 35611\nf 35610 35612 36144\nf 35610 36144 36142\nf 35611 36141 36143\nf 35611 36143 35613\nf 35612 35614 36146\nf 35612 36146 36144\nf 35613 36143 36145\nf 35613 36145 35615\nf 35614 35616 36148\nf 35614 36148 36146\nf 35615 36145 36147\nf 35615 36147 35617\nf 35616 35618 36150\nf 35616 36150 36148\nf 35617 36147 36149\nf 35617 36149 35619\nf 35618 35620 36152\nf 35618 36152 36150\nf 35619 36149 36151\nf 35619 36151 35621\nf 35620 35622 36154\nf 35620 36154 36152\nf 35621 36151 36153\nf 35621 36153 35623\nf 35622 35624 36156\nf 35622 36156 36154\nf 35623 36153 36155\nf 35623 36155 35625\nf 35624 35626 36156\nf 35625 36155 36159\nf 35625 36159 35629\nf 35626 35627 35628\nf 35626 35628 36156\nf 35627 35630 36160\nf 35627 36160 35628\nf 35628 36157 36156\nf 35628 36160 36157\nf 35629 36159 36161\nf 35629 36161 35631\nf 35630 35633 36165\nf 35630 36162 36160\nf 35630 36165 36162\nf 35631 36161 36163\nf 35631 36163 35632\nf 35632 36163 36164\nf 35632 36164 36166\nf 35632 36166 35634\nf 35633 35635 36168\nf 35633 36168 36165\nf 35634 36166 35636\nf 35635 35637 36170\nf 35635 36170 36168\nf 35636 36166 36169\nf 35636 36169 35638\nf 35637 35639 36173\nf 35637 36173 36170\nf 35638 36169 36172\nf 35638 36172 35640\nf 35639 35641 36176\nf 35639 36176 36173\nf 35640 36172 36175\nf 35640 36175 35642\nf 35641 35643 36179\nf 35641 36179 36176\nf 35642 36175 36178\nf 35642 36178 35644\nf 35643 35645 36181\nf 35643 36181 36179\nf 35644 36178 36180\nf 35644 36180 35646\nf 35645 35647 36183\nf 35645 36183 36181\nf 35646 36180 36182\nf 35646 36182 35648\nf 35647 35650 36186\nf 35647 36186 36183\nf 35648 36182 36184\nf 35648 36184 35649\nf 35649 36184 36185\nf 35649 36185 36187\nf 35649 36187 35651\nf 35650 35652 36189\nf 35650 36189 36186\nf 35651 36187 35653\nf 35652 35654 36191\nf 35652 36191 36189\nf 35653 36187 36190\nf 35653 36190 35655\nf 35654 35656 36193\nf 35654 36193 36191\nf 35655 36190 36192\nf 35655 36192 35657\nf 35656 35658 36195\nf 35656 36195 36193\nf 35657 36192 36194\nf 35657 36194 35659\nf 35658 35660 36197\nf 35658 36197 36195\nf 35659 36194 36196\nf 35659 36196 35662\nf 35660 35661 36197\nf 35661 35663 36200\nf 35661 36198 36197\nf 35661 36200 36198\nf 35662 36196 36199\nf 35662 36199 35664\nf 35663 35665 36202\nf 35663 36202 36200\nf 35664 36199 36201\nf 35664 36201 35666\nf 35665 35667 36204\nf 35665 36204 36202\nf 35666 36201 36203\nf 35666 36203 35668\nf 35667 35670 36207\nf 35667 36207 36204\nf 35668 36203 36205\nf 35668 36205 35669\nf 35669 36205 36206\nf 35669 36206 36208\nf 35669 36208 35671\nf 35670 35672 36209\nf 35670 36209 36207\nf 35671 36208 35673\nf 35672 35674 36211\nf 35672 36211 36209\nf 35673 36208 36210\nf 35673 36210 35676\nf 35674 35675 36211\nf 35675 35677 36214\nf 35675 36212 36211\nf 35675 36214 36212\nf 35676 36210 36213\nf 35676 36213 35678\nf 35677 35679 36216\nf 35677 36216 36214\nf 35678 36213 36215\nf 35678 36215 35681\nf 35679 35680 36216\nf 35680 35683 36219\nf 35680 36217 36216\nf 35680 36219 36217\nf 35681 35686 35682\nf 35681 36215 36218\nf 35681 36218 36221\nf 35681 36221 35686\nf 35682 35686 35685\nf 35683 35684 36219\nf 35684 35688 36223\nf 35684 36220 36219\nf 35684 36223 36220\nf 35685 35686 35687\nf 35686 36221 36222\nf 35686 36222 35687\nf 35687 35690 36226\nf 35687 36222 35690\nf 35687 36224 35689\nf 35687 36226 36224\nf 35688 35689 36223\nf 35689 36224 36223\nf 35690 36222 36225\nf 35690 36225 36227\nf 35690 36227 36226\nf 35691 35692 35706\nf 35691 35705 35703\nf 35691 35706 35705\nf 35692 35693 36228\nf 35692 36228 36239\nf 35692 36239 35706\nf 35693 35694 36228\nf 35694 35695 36229\nf 35694 36229 36228\nf 35695 35696 36230\nf 35695 36230 36229\nf 35696 35697 36231\nf 35696 36231 36230\nf 35697 35698 36232\nf 35697 36232 36231\nf 35698 35699 36233\nf 35698 36233 36232\nf 35699 35700 36234\nf 35699 36234 36233\nf 35700 35701 36235\nf 35700 36235 36234\nf 35701 35707 35708\nf 35701 35708 36235\nf 35702 35704 36236\nf 35702 36236 36246\nf 35702 36246 35712\nf 35703 35705 35704\nf 35704 35705 36238\nf 35704 36237 36236\nf 35704 36238 36237\nf 35705 35706 36238\nf 35706 36239 36240\nf 35706 36240 36238\nf 35707 35709 36243\nf 35707 36243 35708\nf 35708 36242 36235\nf 35708 36243 36242\nf 35709 35710 36244\nf 35709 36244 36243\nf 35710 35714 35715\nf 35710 35715 36244\nf 35711 35713 36245\nf 35711 36245 36251\nf 35711 36251 35717\nf 35712 36246 35713\nf 35713 36246 36247\nf 35713 36247 36245\nf 35714 35716 36249\nf 35714 36249 35715\nf 35715 36248 36244\nf 35715 36249 36248\nf 35716 35718 36250\nf 35716 36250 36249\nf 35717 36251 35720\nf 35718 35719 35722\nf 35718 35722 36256\nf 35718 36252 36250\nf 35718 36256 36252\nf 35719 35721 35722\nf 35720 36251 36254\nf 35720 36254 35723\nf 35721 35726 35728\nf 35721 35728 35722\nf 35722 35728 36256\nf 35723 36254 36258\nf 35723 36258 36259\nf 35723 36259 35724\nf 35724 36259 36260\nf 35724 36260 35725\nf 35725 36260 35729\nf 35726 35727 35728\nf 35727 35731 36261\nf 35727 36261 35728\nf 35728 36261 36256\nf 35729 36260 36262\nf 35729 36262 36263\nf 35729 36263 35730\nf 35730 36263 35733\nf 35731 35732 36264\nf 35731 36264 36261\nf 35732 35741 36274\nf 35732 36265 36264\nf 35732 36274 36265\nf 35733 36263 36266\nf 35733 36266 36267\nf 35733 36267 35734\nf 35734 36267 36269\nf 35734 36269 35735\nf 35735 36269 36270\nf 35735 36270 35736\nf 35736 36270 36271\nf 35736 36271 35737\nf 35737 36271 36272\nf 35737 36272 35738\nf 35738 36272 35743\nf 35739 35749 35751\nf 35739 35751 36283\nf 35739 36273 35740\nf 35739 36283 36273\nf 35740 36273 36275\nf 35740 36275 35742\nf 35741 35742 36274\nf 35742 36275 36274\nf 35743 36272 36276\nf 35743 36276 36277\nf 35743 36277 35744\nf 35744 36277 36278\nf 35744 36278 35745\nf 35745 36278 36279\nf 35745 36279 35746\nf 35746 36279 36280\nf 35746 36280 35747\nf 35747 36280 36281\nf 35747 36281 35748\nf 35748 36281 36282\nf 35748 36282 35750\nf 35749 35750 35751\nf 35750 36282 36284\nf 35750 36284 35751\nf 35751 36284 36283\nf 35752 35753 36286\nf 35752 36286 36294\nf 35752 36294 35760\nf 35753 35754 36287\nf 35753 36287 36286\nf 35754 35761 36288\nf 35754 36288 36287\nf 35755 35756 36289\nf 35755 36289 36296\nf 35755 36296 35762\nf 35756 35757 36290\nf 35756 36290 36289\nf 35757 35758 36291\nf 35757 36291 36290\nf 35758 35759 36292\nf 35758 36292 36291\nf 35759 35763 36293\nf 35759 36293 36292\nf 35760 36294 35764\nf 35761 35766 36300\nf 35761 36295 36288\nf 35761 36300 36295\nf 35762 36296 35768\nf 35763 35770 36304\nf 35763 36297 36293\nf 35763 36304 36297\nf 35764 36294 36298\nf 35764 36298 35765\nf 35765 36298 36299\nf 35765 36299 36306\nf 35765 36306 35772\nf 35766 35767 36301\nf 35766 36301 36300\nf 35767 35773 36301\nf 35768 36296 36302\nf 35768 36302 35769\nf 35769 36302 36303\nf 35769 36303 36308\nf 35769 36308 35774\nf 35770 35771 36305\nf 35770 36305 36304\nf 35771 35775 36305\nf 35772 36306 35776\nf 35773 35777 36311\nf 35773 36307 36301\nf 35773 36311 36307\nf 35774 36308 35778\nf 35775 35779 36313\nf 35775 36309 36305\nf 35775 36313 36309\nf 35776 36306 36310\nf 35776 36310 35780\nf 35777 35781 36315\nf 35777 36315 36311\nf 35778 36308 36312\nf 35778 36312 35782\nf 35779 35783 36317\nf 35779 36317 36313\nf 35780 36310 36314\nf 35780 36314 35784\nf 35781 35785 36319\nf 35781 36319 36315\nf 35782 36312 36316\nf 35782 36316 35786\nf 35783 35787 36321\nf 35783 36321 36317\nf 35784 36314 36318\nf 35784 36318 35788\nf 35785 35789 36323\nf 35785 36323 36319\nf 35786 36316 36320\nf 35786 36320 35790\nf 35787 35791 36325\nf 35787 36325 36321\nf 35788 36318 36322\nf 35788 36322 35792\nf 35789 35793 36328\nf 35789 36328 36323\nf 35790 36320 36324\nf 35790 36324 35794\nf 35791 35795 36330\nf 35791 36330 36325\nf 35792 36322 36327\nf 35792 36327 35796\nf 35793 35797 36332\nf 35793 36332 36328\nf 35794 36324 36329\nf 35794 36329 35798\nf 35795 35799 36334\nf 35795 36334 36330\nf 35796 36327 36331\nf 35796 36331 35800\nf 35797 35801 36336\nf 35797 36336 36332\nf 35798 36329 36333\nf 35798 36333 35803\nf 35799 35804 36339\nf 35799 36339 36334\nf 35800 36331 36335\nf 35800 36335 35805\nf 35801 35802 36337\nf 35801 36337 36336\nf 35802 35806 36337\nf 35803 36333 36338\nf 35803 36338 35813\nf 35804 35815 36350\nf 35804 36350 36339\nf 35805 36335 36340\nf 35805 36340 35816\nf 35806 35807 36342\nf 35806 36341 36337\nf 35806 36342 36341\nf 35807 35808 36342\nf 35808 35809 36343\nf 35808 36343 36342\nf 35809 35810 36344\nf 35809 36344 36343\nf 35810 35817 36345\nf 35810 36345 36344\nf 35811 35812 36346\nf 35811 36346 36434\nf 35811 36434 35899\nf 35812 35814 36347\nf 35812 36347 36346\nf 35813 36338 36348\nf 35813 36348 35814\nf 35814 36348 36349\nf 35814 36349 36347\nf 35815 35901 36436\nf 35815 36436 36350\nf 35816 36340 36351\nf 35816 36351 35902\nf 35817 35818 36353\nf 35817 36352 36345\nf 35817 36353 36352\nf 35818 35819 36353\nf 35819 35820 36354\nf 35819 36354 36353\nf 35820 35821 36355\nf 35820 36355 36354\nf 35821 35822 36356\nf 35821 36356 36355\nf 35822 35823 36357\nf 35822 36357 36356\nf 35823 35824 36358\nf 35823 36358 36357\nf 35824 35825 36359\nf 35824 36359 36358\nf 35825 35826 36360\nf 35825 36360 36359\nf 35826 35827 36361\nf 35826 36361 36360\nf 35827 35828 36362\nf 35827 36362 36361\nf 35828 35829 36363\nf 35828 36363 36362\nf 35829 35830 36364\nf 35829 36364 36363\nf 35830 35831 36365\nf 35830 36365 36364\nf 35831 35832 36366\nf 35831 36366 36365\nf 35832 35833 36367\nf 35832 36367 36366\nf 35833 35834 36368\nf 35833 36368 36367\nf 35834 35835 36369\nf 35834 36369 36368\nf 35835 35836 36370\nf 35835 36370 36369\nf 35836 35837 36371\nf 35836 36371 36370\nf 35837 35838 36372\nf 35837 36372 36371\nf 35838 35839 36373\nf 35838 36373 36372\nf 35839 35840 36374\nf 35839 36374 36373\nf 35840 35841 36375\nf 35840 36375 36374\nf 35841 35842 36376\nf 35841 36376 36375\nf 35842 35843 36377\nf 35842 36377 36376\nf 35843 35844 36378\nf 35843 36378 36377\nf 35844 35845 36379\nf 35844 36379 36378\nf 35845 35846 36380\nf 35845 36380 36379\nf 35846 35847 36381\nf 35846 36381 36380\nf 35847 35848 36382\nf 35847 36382 36381\nf 35848 35849 36383\nf 35848 36383 36382\nf 35849 35850 36384\nf 35849 36384 36383\nf 35850 35851 36385\nf 35850 36385 36384\nf 35851 35852 36386\nf 35851 36386 36385\nf 35852 35853 36387\nf 35852 36387 36386\nf 35853 35854 36388\nf 35853 36388 36387\nf 35854 35855 36389\nf 35854 36389 36388\nf 35855 35856 36390\nf 35855 36390 36389\nf 35856 35857 36391\nf 35856 36391 36390\nf 35857 35858 36392\nf 35857 36392 36391\nf 35858 35859 36393\nf 35858 36393 36392\nf 35859 35860 36394\nf 35859 36394 36393\nf 35860 35861 36395\nf 35860 36395 36394\nf 35861 35862 36396\nf 35861 36396 36395\nf 35862 35863 36397\nf 35862 36397 36396\nf 35863 35864 36398\nf 35863 36398 36397\nf 35864 35865 36399\nf 35864 36399 36398\nf 35865 35866 36400\nf 35865 36400 36399\nf 35866 35867 36401\nf 35866 36401 36400\nf 35867 35868 36402\nf 35867 36402 36401\nf 35868 35869 36403\nf 35868 36403 36402\nf 35869 35870 36404\nf 35869 36404 36403\nf 35870 35871 36405\nf 35870 36405 36404\nf 35871 35872 36406\nf 35871 36406 36405\nf 35872 35873 36407\nf 35872 36407 36406\nf 35873 35874 36408\nf 35873 36408 36407\nf 35874 35875 36409\nf 35874 36409 36408\nf 35875 35876 36410\nf 35875 36410 36409\nf 35876 35877 36411\nf 35876 36411 36410\nf 35877 35878 36412\nf 35877 36412 36411\nf 35878 35879 36413\nf 35878 36413 36412\nf 35879 35880 36414\nf 35879 36414 36413\nf 35880 35881 36415\nf 35880 36415 36414\nf 35881 35882 36416\nf 35881 36416 36415\nf 35882 35883 36417\nf 35882 36417 36416\nf 35883 35884 36418\nf 35883 36418 36417\nf 35884 35885 36419\nf 35884 36419 36418\nf 35885 35886 36420\nf 35885 36420 36419\nf 35886 35887 36421\nf 35886 36421 36420\nf 35887 35888 36422\nf 35887 36422 36421\nf 35888 35889 36423\nf 35888 36423 36422\nf 35889 35890 36424\nf 35889 36424 36423\nf 35890 35891 36425\nf 35890 36425 36424\nf 35891 35892 36426\nf 35891 36426 36425\nf 35892 35893 36427\nf 35892 36427 36426\nf 35893 35894 36428\nf 35893 36428 36427\nf 35894 35895 36429\nf 35894 36429 36428\nf 35895 35896 36430\nf 35895 36430 36429\nf 35896 35897 36431\nf 35896 36431 36430\nf 35897 35898 36432\nf 35897 36432 36431\nf 35898 35900 36433\nf 35898 36433 36432\nf 35899 36434 35900\nf 35900 36434 36435\nf 35900 36435 36433\nf 35901 35903 36438\nf 35901 36438 36436\nf 35902 36351 36437\nf 35902 36437 35904\nf 35903 35905 36441\nf 35903 36441 36438\nf 35904 36437 36439\nf 35904 36439 35906\nf 35905 35909 36443\nf 35905 36443 36441\nf 35906 35908 35907\nf 35906 36439 36440\nf 35906 36440 35908\nf 35907 35908 35911\nf 35908 36440 36442\nf 35908 36442 35911\nf 35909 35910 36443\nf 35910 35912 36446\nf 35910 36444 36443\nf 35910 36446 36444\nf 35911 36442 36445\nf 35911 36445 35914\nf 35912 35913 36446\nf 35913 35919 36453\nf 35913 36447 36446\nf 35913 36453 36447\nf 35914 36445 36448\nf 35914 36448 36449\nf 35914 36449 35915\nf 35915 36449 35921\nf 35916 36009 36543\nf 35916 36450 36451\nf 35916 36451 35917\nf 35916 36543 36450\nf 35917 36451 36452\nf 35917 36452 35918\nf 35918 36452 36454\nf 35918 36454 35920\nf 35919 35920 36453\nf 35920 36454 36453\nf 35921 36449 36455\nf 35921 36455 36456\nf 35921 36456 35922\nf 35922 36456 36011\nf 35923 36015 36549\nf 35923 36457 36458\nf 35923 36458 35924\nf 35923 36549 36457\nf 35924 36458 36459\nf 35924 36459 35925\nf 35925 36459 36460\nf 35925 36460 35926\nf 35926 36460 36461\nf 35926 36461 35927\nf 35927 36461 36462\nf 35927 36462 35928\nf 35928 36462 36463\nf 35928 36463 35929\nf 35929 36463 36464\nf 35929 36464 35930\nf 35930 36464 36465\nf 35930 36465 35931\nf 35931 36465 36466\nf 35931 36466 35932\nf 35932 36466 36467\nf 35932 36467 35933\nf 35933 36467 36468\nf 35933 36468 35934\nf 35934 36468 36469\nf 35934 36469 35935\nf 35935 36469 36470\nf 35935 36470 35936\nf 35936 36470 36471\nf 35936 36471 35937\nf 35937 36471 36472\nf 35937 36472 35938\nf 35938 36472 36473\nf 35938 36473 35939\nf 35939 36473 36474\nf 35939 36474 35940\nf 35940 36474 36475\nf 35940 36475 35941\nf 35941 36475 36476\nf 35941 36476 35942\nf 35942 36476 36477\nf 35942 36477 35943\nf 35943 36477 36478\nf 35943 36478 35944\nf 35944 36478 36479\nf 35944 36479 35945\nf 35945 36479 36480\nf 35945 36480 35946\nf 35946 36480 36481\nf 35946 36481 35947\nf 35947 36481 36482\nf 35947 36482 35948\nf 35948 36482 36483\nf 35948 36483 35949\nf 35949 36483 36484\nf 35949 36484 35950\nf 35950 36484 36485\nf 35950 36485 35951\nf 35951 36485 36486\nf 35951 36486 35952\nf 35952 36486 36487\nf 35952 36487 35953\nf 35953 36487 36488\nf 35953 36488 35954\nf 35954 36488 36489\nf 35954 36489 35955\nf 35955 36489 36490\nf 35955 36490 35956\nf 35956 36490 36491\nf 35956 36491 35957\nf 35957 36491 36492\nf 35957 36492 35958\nf 35958 36492 36493\nf 35958 36493 35959\nf 35959 36493 36494\nf 35959 36494 35960\nf 35960 36494 36495\nf 35960 36495 35961\nf 35961 36495 36496\nf 35961 36496 35962\nf 35962 36496 36497\nf 35962 36497 35963\nf 35963 36497 36498\nf 35963 36498 35964\nf 35964 36498 36499\nf 35964 36499 35965\nf 35965 36499 36500\nf 35965 36500 35966\nf 35966 36500 36501\nf 35966 36501 35967\nf 35967 36501 36502\nf 35967 36502 35968\nf 35968 36502 36503\nf 35968 36503 35969\nf 35969 36503 36504\nf 35969 36504 35970\nf 35970 36504 36505\nf 35970 36505 35971\nf 35971 36505 36506\nf 35971 36506 35972\nf 35972 36506 36507\nf 35972 36507 35973\nf 35973 36507 36508\nf 35973 36508 35974\nf 35974 36508 36509\nf 35974 36509 35975\nf 35975 36509 36510\nf 35975 36510 35976\nf 35976 36510 36511\nf 35976 36511 35977\nf 35977 36511 36512\nf 35977 36512 35978\nf 35978 36512 36513\nf 35978 36513 35979\nf 35979 36513 36514\nf 35979 36514 35980\nf 35980 36514 36515\nf 35980 36515 35981\nf 35981 36515 36516\nf 35981 36516 35982\nf 35982 36516 36517\nf 35982 36517 35983\nf 35983 36517 36518\nf 35983 36518 35984\nf 35984 36518 36519\nf 35984 36519 35985\nf 35985 36519 36520\nf 35985 36520 35986\nf 35986 36520 36521\nf 35986 36521 35987\nf 35987 36521 36522\nf 35987 36522 35988\nf 35988 36522 36523\nf 35988 36523 35989\nf 35989 36523 36524\nf 35989 36524 35990\nf 35990 36524 36525\nf 35990 36525 35991\nf 35991 36525 36526\nf 35991 36526 35992\nf 35992 36526 36527\nf 35992 36527 35993\nf 35993 36527 36528\nf 35993 36528 35994\nf 35994 36528 36529\nf 35994 36529 35995\nf 35995 36529 36530\nf 35995 36530 35996\nf 35996 36530 36531\nf 35996 36531 35997\nf 35997 36531 36532\nf 35997 36532 35998\nf 35998 36532 36533\nf 35998 36533 35999\nf 35999 36533 36534\nf 35999 36534 36000\nf 36000 36534 36535\nf 36000 36535 36001\nf 36001 36535 36536\nf 36001 36536 36002\nf 36002 36536 36537\nf 36002 36537 36003\nf 36003 36537 36538\nf 36003 36538 36004\nf 36004 36538 36539\nf 36004 36539 36005\nf 36005 36539 36540\nf 36005 36540 36006\nf 36006 36540 36541\nf 36006 36541 36007\nf 36007 36541 36542\nf 36007 36542 36008\nf 36008 36542 36544\nf 36008 36544 36010\nf 36009 36010 36543\nf 36010 36544 36543\nf 36011 36456 36545\nf 36011 36545 36546\nf 36011 36546 36012\nf 36012 36546 36547\nf 36012 36547 36013\nf 36013 36547 36017\nf 36014 36019 36554\nf 36014 36548 36550\nf 36014 36550 36016\nf 36014 36554 36548\nf 36015 36016 36549\nf 36016 36550 36549\nf 36017 36547 36552\nf 36017 36552 36553\nf 36017 36553 36018\nf 36018 36553 36555\nf 36018 36555 36020\nf 36019 36020 36554\nf 36020 36555 36554\nf 36021 36022 36556\nf 36021 36556 36561\nf 36021 36561 36026\nf 36022 36023 36557\nf 36022 36557 36556\nf 36023 36024 36558\nf 36023 36558 36557\nf 36024 36025 36559\nf 36024 36559 36558\nf 36025 36027 36560\nf 36025 36560 36559\nf 36026 36561 36028\nf 36027 36030 36566\nf 36027 36563 36560\nf 36027 36566 36563\nf 36028 36561 36564\nf 36028 36564 36029\nf 36029 36564 36565\nf 36029 36565 36568\nf 36029 36568 36032\nf 36030 36031 36567\nf 36030 36567 36566\nf 36031 36033 36567\nf 36032 36568 36034\nf 36033 36035 36571\nf 36033 36569 36567\nf 36033 36571 36569\nf 36034 36568 36570\nf 36034 36570 36037\nf 36035 36036 36039\nf 36035 36039 36573\nf 36035 36573 36571\nf 36036 36038 36039\nf 36037 36570 36572\nf 36037 36572 36040\nf 36038 36041 36576\nf 36038 36574 36039\nf 36038 36576 36574\nf 36039 36574 36573\nf 36040 36572 36575\nf 36040 36575 36042\nf 36041 36043 36579\nf 36041 36579 36576\nf 36042 36575 36578\nf 36042 36578 36044\nf 36043 36045 36581\nf 36043 36581 36579\nf 36044 36578 36580\nf 36044 36580 36046\nf 36045 36047 36583\nf 36045 36583 36581\nf 36046 36580 36582\nf 36046 36582 36049\nf 36047 36048 36583\nf 36048 36050 36586\nf 36048 36584 36583\nf 36048 36586 36584\nf 36049 36582 36585\nf 36049 36585 36051\nf 36050 36052 36588\nf 36050 36588 36586\nf 36051 36585 36587\nf 36051 36587 36053\nf 36052 36054 36590\nf 36052 36590 36588\nf 36053 36587 36589\nf 36053 36589 36055\nf 36054 36056 36592\nf 36054 36592 36590\nf 36055 36589 36591\nf 36055 36591 36057\nf 36056 36058 36594\nf 36056 36594 36592\nf 36057 36591 36593\nf 36057 36593 36059\nf 36058 36060 36597\nf 36058 36597 36594\nf 36059 36593 36595\nf 36059 36595 36061\nf 36060 36064 36599\nf 36060 36599 36597\nf 36061 36063 36062\nf 36061 36595 36596\nf 36061 36596 36063\nf 36062 36063 36065\nf 36063 36596 36598\nf 36063 36598 36065\nf 36064 36066 36599\nf 36065 36598 36601\nf 36065 36601 36069\nf 36066 36067 36068\nf 36066 36068 36599\nf 36067 36070 36602\nf 36067 36602 36068\nf 36068 36600 36599\nf 36068 36602 36600\nf 36069 36601 36603\nf 36069 36603 36071\nf 36070 36072 36606\nf 36070 36604 36602\nf 36070 36606 36604\nf 36071 36603 36605\nf 36071 36605 36073\nf 36072 36074 36608\nf 36072 36608 36606\nf 36073 36605 36607\nf 36073 36607 36075\nf 36074 36076 36610\nf 36074 36610 36608\nf 36075 36607 36609\nf 36075 36609 36077\nf 36076 36078 36612\nf 36076 36612 36610\nf 36077 36609 36611\nf 36077 36611 36079\nf 36078 36080 36615\nf 36078 36615 36612\nf 36079 36611 36614\nf 36079 36614 36081\nf 36080 36082 36618\nf 36080 36618 36615\nf 36081 36614 36617\nf 36081 36617 36083\nf 36082 36084 36621\nf 36082 36621 36618\nf 36083 36617 36620\nf 36083 36620 36085\nf 36084 36086 36624\nf 36084 36624 36621\nf 36085 36620 36623\nf 36085 36623 36087\nf 36086 36088 36627\nf 36086 36627 36624\nf 36087 36623 36626\nf 36087 36626 36089\nf 36088 36090 36627\nf 36089 36626 36630\nf 36089 36630 36093\nf 36090 36091 36092\nf 36090 36092 36627\nf 36091 36094 36631\nf 36091 36631 36092\nf 36092 36628 36627\nf 36092 36631 36628\nf 36093 36630 36632\nf 36093 36632 36095\nf 36094 36096 36635\nf 36094 36633 36631\nf 36094 36635 36633\nf 36095 36632 36634\nf 36095 36634 36097\nf 36096 36098 36637\nf 36096 36637 36635\nf 36097 36634 36636\nf 36097 36636 36099\nf 36098 36100 36639\nf 36098 36639 36637\nf 36099 36636 36638\nf 36099 36638 36101\nf 36100 36102 36641\nf 36100 36641 36639\nf 36101 36638 36640\nf 36101 36640 36103\nf 36102 36104 36643\nf 36102 36643 36641\nf 36103 36640 36642\nf 36103 36642 36105\nf 36104 36106 36645\nf 36104 36645 36643\nf 36105 36642 36644\nf 36105 36644 36107\nf 36106 36108 36647\nf 36106 36647 36645\nf 36107 36644 36646\nf 36107 36646 36109\nf 36108 36110 36651\nf 36108 36651 36647\nf 36109 36646 36648\nf 36109 36648 36111\nf 36110 36113 36653\nf 36110 36653 36651\nf 36111 36112 36115\nf 36111 36115 36114\nf 36111 36648 36112\nf 36112 36648 36649\nf 36112 36649 36652\nf 36112 36652 36115\nf 36113 36116 36655\nf 36113 36655 36653\nf 36114 36115 36119\nf 36114 36119 36117\nf 36115 36652 36654\nf 36115 36654 36119\nf 36116 36120 36657\nf 36116 36657 36655\nf 36117 36119 36118\nf 36118 36119 36656\nf 36118 36656 36121\nf 36119 36654 36656\nf 36120 36122 36659\nf 36120 36659 36657\nf 36121 36656 36658\nf 36121 36658 36123\nf 36122 36124 36661\nf 36122 36661 36659\nf 36123 36658 36660\nf 36123 36660 36125\nf 36124 36126 36663\nf 36124 36663 36661\nf 36125 36660 36662\nf 36125 36662 36127\nf 36126 36128 36665\nf 36126 36665 36663\nf 36127 36662 36664\nf 36127 36664 36129\nf 36128 36130 36667\nf 36128 36667 36665\nf 36129 36664 36666\nf 36129 36666 36131\nf 36130 36132 36669\nf 36130 36669 36667\nf 36131 36666 36668\nf 36131 36668 36133\nf 36132 36134 36671\nf 36132 36671 36669\nf 36133 36668 36670\nf 36133 36670 36135\nf 36134 36136 36673\nf 36134 36673 36671\nf 36135 36670 36672\nf 36135 36672 36138\nf 36136 36137 36673\nf 36137 36140 36677\nf 36137 36674 36673\nf 36137 36677 36674\nf 36138 36672 36675\nf 36138 36675 36139\nf 36139 36675 36676\nf 36139 36676 36678\nf 36139 36678 36141\nf 36140 36142 36679\nf 36140 36679 36677\nf 36141 36678 36143\nf 36142 36144 36681\nf 36142 36681 36679\nf 36143 36678 36680\nf 36143 36680 36145\nf 36144 36146 36683\nf 36144 36683 36681\nf 36145 36680 36682\nf 36145 36682 36147\nf 36146 36148 36685\nf 36146 36685 36683\nf 36147 36682 36684\nf 36147 36684 36149\nf 36148 36150 36687\nf 36148 36687 36685\nf 36149 36684 36686\nf 36149 36686 36151\nf 36150 36152 36689\nf 36150 36689 36687\nf 36151 36686 36688\nf 36151 36688 36153\nf 36152 36154 36691\nf 36152 36691 36689\nf 36153 36688 36690\nf 36153 36690 36155\nf 36154 36156 36691\nf 36155 36690 36694\nf 36155 36694 36159\nf 36156 36157 36158\nf 36156 36158 36691\nf 36157 36160 36695\nf 36157 36695 36158\nf 36158 36692 36691\nf 36158 36695 36692\nf 36159 36694 36696\nf 36159 36696 36161\nf 36160 36162 36701\nf 36160 36698 36695\nf 36160 36701 36698\nf 36161 36696 36700\nf 36161 36700 36163\nf 36162 36165 36704\nf 36162 36704 36701\nf 36163 36700 36703\nf 36163 36703 36706\nf 36163 36706 36164\nf 36164 36167 36166\nf 36164 36706 36167\nf 36165 36168 36708\nf 36165 36708 36704\nf 36166 36167 36711\nf 36166 36711 36169\nf 36167 36706 36707\nf 36167 36707 36711\nf 36168 36170 36708\nf 36169 36711 36172\nf 36170 36171 36708\nf 36170 36173 36174\nf 36170 36174 36171\nf 36171 36174 36712\nf 36171 36709 36708\nf 36171 36712 36709\nf 36172 36711 36713\nf 36172 36713 36175\nf 36173 36176 36177\nf 36173 36177 36174\nf 36174 36177 36714\nf 36174 36714 36712\nf 36175 36713 36715\nf 36175 36715 36178\nf 36176 36179 36719\nf 36176 36717 36177\nf 36176 36719 36717\nf 36177 36716 36714\nf 36177 36717 36716\nf 36178 36715 36718\nf 36178 36718 36180\nf 36179 36181 36722\nf 36179 36722 36719\nf 36180 36718 36721\nf 36180 36721 36182\nf 36181 36183 36725\nf 36181 36725 36722\nf 36182 36721 36724\nf 36182 36724 36184\nf 36183 36186 36728\nf 36183 36728 36725\nf 36184 36724 36727\nf 36184 36727 36729\nf 36184 36729 36185\nf 36185 36188 36187\nf 36185 36729 36188\nf 36186 36189 36731\nf 36186 36731 36728\nf 36187 36188 36732\nf 36187 36732 36190\nf 36188 36729 36730\nf 36188 36730 36732\nf 36189 36191 36733\nf 36189 36733 36731\nf 36190 36732 36192\nf 36191 36193 36735\nf 36191 36735 36733\nf 36192 36732 36734\nf 36192 36734 36194\nf 36193 36195 36737\nf 36193 36737 36735\nf 36194 36734 36736\nf 36194 36736 36196\nf 36195 36197 36740\nf 36195 36740 36737\nf 36196 36736 36739\nf 36196 36739 36199\nf 36197 36198 36740\nf 36198 36200 36744\nf 36198 36741 36740\nf 36198 36744 36741\nf 36199 36739 36743\nf 36199 36743 36201\nf 36200 36202 36746\nf 36200 36746 36744\nf 36201 36743 36745\nf 36201 36745 36203\nf 36202 36204 36748\nf 36202 36748 36746\nf 36203 36745 36747\nf 36203 36747 36205\nf 36204 36207 36751\nf 36204 36751 36748\nf 36205 36747 36749\nf 36205 36749 36206\nf 36206 36749 36750\nf 36206 36750 36752\nf 36206 36752 36208\nf 36207 36209 36753\nf 36207 36753 36751\nf 36208 36752 36210\nf 36209 36211 36755\nf 36209 36755 36753\nf 36210 36752 36754\nf 36210 36754 36213\nf 36211 36212 36755\nf 36212 36214 36758\nf 36212 36756 36755\nf 36212 36758 36756\nf 36213 36754 36757\nf 36213 36757 36215\nf 36214 36216 36760\nf 36214 36760 36758\nf 36215 36757 36759\nf 36215 36759 36218\nf 36216 36217 36760\nf 36217 36219 36763\nf 36217 36761 36760\nf 36217 36763 36761\nf 36218 36759 36762\nf 36218 36762 36221\nf 36219 36220 36763\nf 36220 36223 36767\nf 36220 36764 36763\nf 36220 36767 36764\nf 36221 36762 36765\nf 36221 36765 36766\nf 36221 36766 36222\nf 36222 36766 36225\nf 36223 36224 36767\nf 36224 36226 36770\nf 36224 36768 36767\nf 36224 36770 36768\nf 36225 36766 36769\nf 36225 36769 36771\nf 36225 36771 36227\nf 36226 36227 36770\nf 36227 36771 36770\nf 36228 36229 36773\nf 36228 36241 36239\nf 36228 36773 36784\nf 36228 36784 36241\nf 36229 36230 36773\nf 36230 36231 36774\nf 36230 36774 36773\nf 36231 36232 36775\nf 36231 36775 36774\nf 36232 36233 36776\nf 36232 36776 36775\nf 36233 36234 36777\nf 36233 36777 36776\nf 36234 36235 36778\nf 36234 36778 36777\nf 36235 36242 36779\nf 36235 36779 36778\nf 36236 36237 36780\nf 36236 36780 36793\nf 36236 36793 36246\nf 36237 36238 36781\nf 36237 36781 36780\nf 36238 36240 36782\nf 36238 36782 36781\nf 36239 36241 36240\nf 36240 36241 36785\nf 36240 36783 36782\nf 36240 36785 36783\nf 36241 36784 36785\nf 36242 36243 36790\nf 36242 36788 36779\nf 36242 36790 36788\nf 36243 36244 36790\nf 36244 36248 36791\nf 36244 36791 36790\nf 36245 36247 36792\nf 36245 36792 36799\nf 36245 36799 36251\nf 36246 36793 36247\nf 36247 36793 36794\nf 36247 36794 36792\nf 36248 36249 36798\nf 36248 36796 36791\nf 36248 36798 36796\nf 36249 36250 36798\nf 36250 36252 36253\nf 36250 36253 36798\nf 36251 36799 36254\nf 36252 36256 36257\nf 36252 36257 36253\nf 36253 36257 36801\nf 36253 36801 36798\nf 36254 36255 36804\nf 36254 36799 36255\nf 36254 36804 36807\nf 36254 36807 36258\nf 36255 36799 36800\nf 36255 36800 36803\nf 36255 36803 36804\nf 36256 36261 36810\nf 36256 36806 36257\nf 36256 36810 36806\nf 36257 36805 36801\nf 36257 36806 36805\nf 36258 36807 36808\nf 36258 36808 36259\nf 36259 36808 36809\nf 36259 36809 36260\nf 36260 36809 36262\nf 36261 36264 36815\nf 36261 36815 36810\nf 36262 36809 36812\nf 36262 36812 36813\nf 36262 36813 36263\nf 36263 36813 36814\nf 36263 36814 36266\nf 36264 36265 36815\nf 36265 36274 36822\nf 36265 36816 36815\nf 36265 36822 36816\nf 36266 36268 36267\nf 36266 36814 36268\nf 36267 36268 36818\nf 36267 36818 36269\nf 36268 36814 36817\nf 36268 36817 36818\nf 36269 36818 36819\nf 36269 36819 36270\nf 36270 36819 36820\nf 36270 36820 36271\nf 36271 36820 36821\nf 36271 36821 36272\nf 36272 36821 36276\nf 36273 36283 36285\nf 36273 36285 36833\nf 36273 36823 36275\nf 36273 36833 36823\nf 36274 36275 36822\nf 36275 36823 36822\nf 36276 36821 36825\nf 36276 36825 36826\nf 36276 36826 36277\nf 36277 36826 36827\nf 36277 36827 36278\nf 36278 36827 36828\nf 36278 36828 36279\nf 36279 36828 36829\nf 36279 36829 36280\nf 36280 36829 36830\nf 36280 36830 36281\nf 36281 36830 36831\nf 36281 36831 36282\nf 36282 36831 36832\nf 36282 36832 36284\nf 36283 36284 36285\nf 36284 36832 36834\nf 36284 36834 36285\nf 36285 36834 36833\nf 36286 36287 36839\nf 36286 36839 36847\nf 36286 36847 36294\nf 36287 36288 36840\nf 36287 36840 36839\nf 36288 36295 36841\nf 36288 36841 36840\nf 36289 36290 36842\nf 36289 36842 36849\nf 36289 36849 36296\nf 36290 36291 36843\nf 36290 36843 36842\nf 36291 36292 36844\nf 36291 36844 36843\nf 36292 36293 36845\nf 36292 36845 36844\nf 36293 36297 36846\nf 36293 36846 36845\nf 36294 36847 36298\nf 36295 36300 36853\nf 36295 36848 36841\nf 36295 36853 36848\nf 36296 36849 36302\nf 36297 36304 36857\nf 36297 36850 36846\nf 36297 36857 36850\nf 36298 36847 36851\nf 36298 36851 36299\nf 36299 36851 36852\nf 36299 36852 36859\nf 36299 36859 36306\nf 36300 36301 36854\nf 36300 36854 36853\nf 36301 36307 36854\nf 36302 36849 36855\nf 36302 36855 36303\nf 36303 36855 36856\nf 36303 36856 36861\nf 36303 36861 36308\nf 36304 36305 36858\nf 36304 36858 36857\nf 36305 36309 36858\nf 36306 36859 36310\nf 36307 36311 36864\nf 36307 36860 36854\nf 36307 36864 36860\nf 36308 36861 36312\nf 36309 36313 36866\nf 36309 36862 36858\nf 36309 36866 36862\nf 36310 36859 36863\nf 36310 36863 36314\nf 36311 36315 36868\nf 36311 36868 36864\nf 36312 36861 36865\nf 36312 36865 36316\nf 36313 36317 36870\nf 36313 36870 36866\nf 36314 36863 36867\nf 36314 36867 36318\nf 36315 36319 36872\nf 36315 36872 36868\nf 36316 36865 36869\nf 36316 36869 36320\nf 36317 36321 36874\nf 36317 36874 36870\nf 36318 36867 36871\nf 36318 36871 36322\nf 36319 36323 36877\nf 36319 36877 36872\nf 36320 36869 36873\nf 36320 36873 36324\nf 36321 36325 36874\nf 36322 36871 36876\nf 36322 36876 36327\nf 36323 36328 36882\nf 36323 36882 36877\nf 36324 36873 36878\nf 36324 36878 36329\nf 36325 36326 36875\nf 36325 36330 36884\nf 36325 36875 36874\nf 36325 36884 36326\nf 36326 36879 36875\nf 36326 36880 36879\nf 36326 36884 36880\nf 36327 36876 36881\nf 36327 36881 36331\nf 36328 36332 36886\nf 36328 36886 36882\nf 36329 36878 36883\nf 36329 36883 36333\nf 36330 36334 36888\nf 36330 36888 36884\nf 36331 36881 36885\nf 36331 36885 36335\nf 36332 36336 36890\nf 36332 36890 36886\nf 36333 36883 36887\nf 36333 36887 36338\nf 36334 36339 36893\nf 36334 36893 36888\nf 36335 36885 36889\nf 36335 36889 36340\nf 36336 36337 36891\nf 36336 36891 36890\nf 36337 36341 36891\nf 36338 36887 36892\nf 36338 36892 36348\nf 36339 36350 36904\nf 36339 36904 36893\nf 36340 36889 36894\nf 36340 36894 36351\nf 36341 36342 36896\nf 36341 36895 36891\nf 36341 36896 36895\nf 36342 36343 36896\nf 36343 36344 36897\nf 36343 36897 36896\nf 36344 36345 36898\nf 36344 36898 36897\nf 36345 36352 36899\nf 36345 36899 36898\nf 36346 36347 36900\nf 36346 36900 36988\nf 36346 36988 36434\nf 36347 36349 36901\nf 36347 36901 36900\nf 36348 36892 36902\nf 36348 36902 36349\nf 36349 36902 36903\nf 36349 36903 36901\nf 36350 36436 36990\nf 36350 36990 36904\nf 36351 36894 36905\nf 36351 36905 36437\nf 36352 36353 36907\nf 36352 36906 36899\nf 36352 36907 36906\nf 36353 36354 36907\nf 36354 36355 36908\nf 36354 36908 36907\nf 36355 36356 36909\nf 36355 36909 36908\nf 36356 36357 36910\nf 36356 36910 36909\nf 36357 36358 36911\nf 36357 36911 36910\nf 36358 36359 36912\nf 36358 36912 36911\nf 36359 36360 36913\nf 36359 36913 36912\nf 36360 36361 36914\nf 36360 36914 36913\nf 36361 36362 36915\nf 36361 36915 36914\nf 36362 36363 36916\nf 36362 36916 36915\nf 36363 36364 36917\nf 36363 36917 36916\nf 36364 36365 36918\nf 36364 36918 36917\nf 36365 36366 36919\nf 36365 36919 36918\nf 36366 36367 36920\nf 36366 36920 36919\nf 36367 36368 36921\nf 36367 36921 36920\nf 36368 36369 36922\nf 36368 36922 36921\nf 36369 36370 36923\nf 36369 36923 36922\nf 36370 36371 36924\nf 36370 36924 36923\nf 36371 36372 36925\nf 36371 36925 36924\nf 36372 36373 36926\nf 36372 36926 36925\nf 36373 36374 36927\nf 36373 36927 36926\nf 36374 36375 36928\nf 36374 36928 36927\nf 36375 36376 36929\nf 36375 36929 36928\nf 36376 36377 36930\nf 36376 36930 36929\nf 36377 36378 36931\nf 36377 36931 36930\nf 36378 36379 36932\nf 36378 36932 36931\nf 36379 36380 36933\nf 36379 36933 36932\nf 36380 36381 36934\nf 36380 36934 36933\nf 36381 36382 36935\nf 36381 36935 36934\nf 36382 36383 36936\nf 36382 36936 36935\nf 36383 36384 36937\nf 36383 36937 36936\nf 36384 36385 36938\nf 36384 36938 36937\nf 36385 36386 36939\nf 36385 36939 36938\nf 36386 36387 36940\nf 36386 36940 36939\nf 36387 36388 36941\nf 36387 36941 36940\nf 36388 36389 36942\nf 36388 36942 36941\nf 36389 36390 36943\nf 36389 36943 36942\nf 36390 36391 36944\nf 36390 36944 36943\nf 36391 36392 36945\nf 36391 36945 36944\nf 36392 36393 36946\nf 36392 36946 36945\nf 36393 36394 36947\nf 36393 36947 36946\nf 36394 36395 36948\nf 36394 36948 36947\nf 36395 36396 36949\nf 36395 36949 36948\nf 36396 36397 36950\nf 36396 36950 36949\nf 36397 36398 36951\nf 36397 36951 36950\nf 36398 36399 36952\nf 36398 36952 36951\nf 36399 36400 36953\nf 36399 36953 36952\nf 36400 36401 36954\nf 36400 36954 36953\nf 36401 36402 36955\nf 36401 36955 36954\nf 36402 36403 36956\nf 36402 36956 36955\nf 36403 36404 36957\nf 36403 36957 36956\nf 36404 36405 36958\nf 36404 36958 36957\nf 36405 36406 36959\nf 36405 36959 36958\nf 36406 36407 36960\nf 36406 36960 36959\nf 36407 36408 36961\nf 36407 36961 36960\nf 36408 36409 36962\nf 36408 36962 36961\nf 36409 36410 36963\nf 36409 36963 36962\nf 36410 36411 36964\nf 36410 36964 36963\nf 36411 36412 36965\nf 36411 36965 36964\nf 36412 36413 36966\nf 36412 36966 36965\nf 36413 36414 36967\nf 36413 36967 36966\nf 36414 36415 36968\nf 36414 36968 36967\nf 36415 36416 36969\nf 36415 36969 36968\nf 36416 36417 36970\nf 36416 36970 36969\nf 36417 36418 36971\nf 36417 36971 36970\nf 36418 36419 36972\nf 36418 36972 36971\nf 36419 36420 36973\nf 36419 36973 36972\nf 36420 36421 36974\nf 36420 36974 36973\nf 36421 36422 36975\nf 36421 36975 36974\nf 36422 36423 36976\nf 36422 36976 36975\nf 36423 36424 36977\nf 36423 36977 36976\nf 36424 36425 36978\nf 36424 36978 36977\nf 36425 36426 36979\nf 36425 36979 36978\nf 36426 36427 36980\nf 36426 36980 36979\nf 36427 36428 36981\nf 36427 36981 36980\nf 36428 36429 36982\nf 36428 36982 36981\nf 36429 36430 36983\nf 36429 36983 36982\nf 36430 36431 36984\nf 36430 36984 36983\nf 36431 36432 36985\nf 36431 36985 36984\nf 36432 36433 36986\nf 36432 36986 36985\nf 36433 36435 36987\nf 36433 36987 36986\nf 36434 36988 36435\nf 36435 36988 36989\nf 36435 36989 36987\nf 36436 36438 36992\nf 36436 36992 36990\nf 36437 36905 36991\nf 36437 36991 36439\nf 36438 36441 36995\nf 36438 36995 36992\nf 36439 36991 36993\nf 36439 36993 36994\nf 36439 36994 36440\nf 36440 36994 36442\nf 36441 36443 36997\nf 36441 36997 36995\nf 36442 36994 36996\nf 36442 36996 36445\nf 36443 36444 36997\nf 36444 36446 37000\nf 36444 36998 36997\nf 36444 37000 36998\nf 36445 36996 36999\nf 36445 36999 36448\nf 36446 36447 37000\nf 36447 36453 37007\nf 36447 37001 37000\nf 36447 37007 37001\nf 36448 36999 37002\nf 36448 37002 37003\nf 36448 37003 36449\nf 36449 37003 36455\nf 36450 36543 37098\nf 36450 37004 37005\nf 36450 37005 36451\nf 36450 37098 37004\nf 36451 37005 37006\nf 36451 37006 36452\nf 36452 37006 37008\nf 36452 37008 36454\nf 36453 36454 37007\nf 36454 37008 37007\nf 36455 37003 37009\nf 36455 37009 37010\nf 36455 37010 36456\nf 36456 37010 36545\nf 36457 36549 36551\nf 36457 36551 37011\nf 36457 37011 37012\nf 36457 37012 37013\nf 36457 37013 36458\nf 36458 37013 37014\nf 36458 37014 36459\nf 36459 37014 37015\nf 36459 37015 36460\nf 36460 37015 37016\nf 36460 37016 36461\nf 36461 37016 37017\nf 36461 37017 36462\nf 36462 37017 37018\nf 36462 37018 36463\nf 36463 37018 37019\nf 36463 37019 36464\nf 36464 37019 37020\nf 36464 37020 36465\nf 36465 37020 37021\nf 36465 37021 36466\nf 36466 37021 37022\nf 36466 37022 36467\nf 36467 37022 37023\nf 36467 37023 36468\nf 36468 37023 37024\nf 36468 37024 36469\nf 36469 37024 37025\nf 36469 37025 36470\nf 36470 37025 37026\nf 36470 37026 36471\nf 36471 37026 37027\nf 36471 37027 36472\nf 36472 37027 37028\nf 36472 37028 36473\nf 36473 37028 37029\nf 36473 37029 36474\nf 36474 37029 37030\nf 36474 37030 36475\nf 36475 37030 37031\nf 36475 37031 36476\nf 36476 37031 37032\nf 36476 37032 36477\nf 36477 37032 37033\nf 36477 37033 36478\nf 36478 37033 37034\nf 36478 37034 36479\nf 36479 37034 37035\nf 36479 37035 36480\nf 36480 37035 37036\nf 36480 37036 36481\nf 36481 37036 37037\nf 36481 37037 36482\nf 36482 37037 37038\nf 36482 37038 36483\nf 36483 37038 37039\nf 36483 37039 36484\nf 36484 37039 37040\nf 36484 37040 36485\nf 36485 37040 37041\nf 36485 37041 36486\nf 36486 37041 37042\nf 36486 37042 36487\nf 36487 37042 37043\nf 36487 37043 36488\nf 36488 37043 37044\nf 36488 37044 36489\nf 36489 37044 37045\nf 36489 37045 36490\nf 36490 37045 37046\nf 36490 37046 36491\nf 36491 37046 37047\nf 36491 37047 36492\nf 36492 37047 37048\nf 36492 37048 36493\nf 36493 37048 37049\nf 36493 37049 36494\nf 36494 37049 37050\nf 36494 37050 36495\nf 36495 37050 37051\nf 36495 37051 36496\nf 36496 37051 37052\nf 36496 37052 36497\nf 36497 37052 37053\nf 36497 37053 36498\nf 36498 37053 37054\nf 36498 37054 36499\nf 36499 37054 37055\nf 36499 37055 36500\nf 36500 37055 37056\nf 36500 37056 36501\nf 36501 37056 37057\nf 36501 37057 36502\nf 36502 37057 37058\nf 36502 37058 36503\nf 36503 37058 37059\nf 36503 37059 36504\nf 36504 37059 37060\nf 36504 37060 36505\nf 36505 37060 37061\nf 36505 37061 36506\nf 36506 37061 37062\nf 36506 37062 36507\nf 36507 37062 37063\nf 36507 37063 36508\nf 36508 37063 37064\nf 36508 37064 36509\nf 36509 37064 37065\nf 36509 37065 36510\nf 36510 37065 37066\nf 36510 37066 36511\nf 36511 37066 37067\nf 36511 37067 36512\nf 36512 37067 37068\nf 36512 37068 36513\nf 36513 37068 37069\nf 36513 37069 36514\nf 36514 37069 37070\nf 36514 37070 36515\nf 36515 37070 37071\nf 36515 37071 36516\nf 36516 37071 37072\nf 36516 37072 36517\nf 36517 37072 37073\nf 36517 37073 36518\nf 36518 37073 37074\nf 36518 37074 36519\nf 36519 37074 37075\nf 36519 37075 36520\nf 36520 37075 37076\nf 36520 37076 36521\nf 36521 37076 37077\nf 36521 37077 36522\nf 36522 37077 37078\nf 36522 37078 36523\nf 36523 37078 37079\nf 36523 37079 36524\nf 36524 37079 37080\nf 36524 37080 36525\nf 36525 37080 37081\nf 36525 37081 36526\nf 36526 37081 37082\nf 36526 37082 36527\nf 36527 37082 37083\nf 36527 37083 36528\nf 36528 37083 37084\nf 36528 37084 36529\nf 36529 37084 37085\nf 36529 37085 36530\nf 36530 37085 37086\nf 36530 37086 36531\nf 36531 37086 37087\nf 36531 37087 36532\nf 36532 37087 37088\nf 36532 37088 36533\nf 36533 37088 37089\nf 36533 37089 36534\nf 36534 37089 37090\nf 36534 37090 36535\nf 36535 37090 37091\nf 36535 37091 36536\nf 36536 37091 37092\nf 36536 37092 36537\nf 36537 37092 37093\nf 36537 37093 36538\nf 36538 37093 37094\nf 36538 37094 36539\nf 36539 37094 37095\nf 36539 37095 36540\nf 36540 37095 37096\nf 36540 37096 36541\nf 36541 37096 37097\nf 36541 37097 36542\nf 36542 37097 37099\nf 36542 37099 36544\nf 36543 36544 37098\nf 36544 37099 37098\nf 36545 37010 37100\nf 36545 37100 37101\nf 36545 37101 36546\nf 36546 37101 37102\nf 36546 37102 36547\nf 36547 37102 36552\nf 36548 36554 37107\nf 36548 37104 36550\nf 36548 37107 37104\nf 36549 36550 36551\nf 36550 37103 36551\nf 36550 37104 37103\nf 36551 37103 37011\nf 36552 37102 37105\nf 36552 37105 37106\nf 36552 37106 36553\nf 36553 37106 37108\nf 36553 37108 36555\nf 36554 36555 37107\nf 36555 37108 37107\nf 36556 36557 37110\nf 36556 36562 36561\nf 36556 37110 37114\nf 36556 37114 36562\nf 36557 36558 37110\nf 36558 36559 37111\nf 36558 37111 37110\nf 36559 36560 37112\nf 36559 37112 37111\nf 36560 36563 37113\nf 36560 37113 37112\nf 36561 36562 37118\nf 36561 37118 36564\nf 36562 37114 37115\nf 36562 37115 37118\nf 36563 36566 37120\nf 36563 37116 37113\nf 36563 37120 37116\nf 36564 37118 36565\nf 36565 37118 37119\nf 36565 37119 37122\nf 36565 37122 36568\nf 36566 36567 37121\nf 36566 37121 37120\nf 36567 36569 37121\nf 36568 37122 36570\nf 36569 36571 37125\nf 36569 37123 37121\nf 36569 37125 37123\nf 36570 37122 37124\nf 36570 37124 36572\nf 36571 36573 37127\nf 36571 37127 37125\nf 36572 37124 37126\nf 36572 37126 36575\nf 36573 36574 36577\nf 36573 36577 37129\nf 36573 37129 37127\nf 36574 36576 36577\nf 36575 37126 37128\nf 36575 37128 36578\nf 36576 36579 37132\nf 36576 37130 36577\nf 36576 37132 37130\nf 36577 37130 37129\nf 36578 37128 37131\nf 36578 37131 36580\nf 36579 36581 37135\nf 36579 37135 37132\nf 36580 37131 37134\nf 36580 37134 36582\nf 36581 36583 37137\nf 36581 37137 37135\nf 36582 37134 37136\nf 36582 37136 36585\nf 36583 36584 37137\nf 36584 36586 37141\nf 36584 37138 37137\nf 36584 37141 37138\nf 36585 37136 37140\nf 36585 37140 36587\nf 36586 36588 37143\nf 36586 37143 37141\nf 36587 37140 37142\nf 36587 37142 36589\nf 36588 36590 37145\nf 36588 37145 37143\nf 36589 37142 37144\nf 36589 37144 36591\nf 36590 36592 37147\nf 36590 37147 37145\nf 36591 37144 37146\nf 36591 37146 36593\nf 36592 36594 37149\nf 36592 37149 37147\nf 36593 37146 37148\nf 36593 37148 36595\nf 36594 36597 37153\nf 36594 37153 37149\nf 36595 37148 37150\nf 36595 37150 37151\nf 36595 37151 36596\nf 36596 37151 36598\nf 36597 36599 37155\nf 36597 37155 37153\nf 36598 37151 37154\nf 36598 37154 36601\nf 36599 36600 37155\nf 36600 36602 37158\nf 36600 37156 37155\nf 36600 37158 37156\nf 36601 37154 37157\nf 36601 37157 36603\nf 36602 36604 37160\nf 36602 37160 37158\nf 36603 37157 37159\nf 36603 37159 36605\nf 36604 36606 37162\nf 36604 37162 37160\nf 36605 37159 37161\nf 36605 37161 36607\nf 36606 36608 37164\nf 36606 37164 37162\nf 36607 37161 37163\nf 36607 37163 36609\nf 36608 36610 37166\nf 36608 37166 37164\nf 36609 37163 37165\nf 36609 37165 36611\nf 36610 36612 37166\nf 36611 37165 37168\nf 36611 37168 36614\nf 36612 36613 37166\nf 36612 36615 36616\nf 36612 36616 36613\nf 36613 36616 37169\nf 36613 37167 37166\nf 36613 37169 37167\nf 36614 37168 37170\nf 36614 37170 36617\nf 36615 36618 36619\nf 36615 36619 36616\nf 36616 36619 37171\nf 36616 37171 37169\nf 36617 37170 37172\nf 36617 37172 36620\nf 36618 36621 36622\nf 36618 36622 36619\nf 36619 36622 37173\nf 36619 37173 37171\nf 36620 37172 37174\nf 36620 37174 36623\nf 36621 36624 36625\nf 36621 36625 36622\nf 36622 36625 37175\nf 36622 37175 37173\nf 36623 37174 37176\nf 36623 37176 36626\nf 36624 36627 36629\nf 36624 36629 36625\nf 36625 36629 37177\nf 36625 37177 37175\nf 36626 37176 37178\nf 36626 37178 36630\nf 36627 36628 36629\nf 36628 36631 37179\nf 36628 37179 36629\nf 36629 37179 37177\nf 36630 37178 37180\nf 36630 37180 36632\nf 36631 36633 37183\nf 36631 37181 37179\nf 36631 37183 37181\nf 36632 37180 37182\nf 36632 37182 36634\nf 36633 36635 37185\nf 36633 37185 37183\nf 36634 37182 37184\nf 36634 37184 36636\nf 36635 36637 37187\nf 36635 37187 37185\nf 36636 37184 37186\nf 36636 37186 36638\nf 36637 36639 37189\nf 36637 37189 37187\nf 36638 37186 37188\nf 36638 37188 36640\nf 36639 36641 37191\nf 36639 37191 37189\nf 36640 37188 37190\nf 36640 37190 36642\nf 36641 36643 37193\nf 36641 37193 37191\nf 36642 37190 37192\nf 36642 37192 36644\nf 36643 36645 37195\nf 36643 37195 37193\nf 36644 37192 37194\nf 36644 37194 36646\nf 36645 36647 37199\nf 36645 37199 37195\nf 36646 37194 37196\nf 36646 37196 36648\nf 36647 36651 37201\nf 36647 37201 37199\nf 36648 36650 36649\nf 36648 37196 36650\nf 36649 36650 37200\nf 36649 37200 36652\nf 36650 37196 37197\nf 36650 37197 37200\nf 36651 36653 37203\nf 36651 37203 37201\nf 36652 37200 37202\nf 36652 37202 36654\nf 36653 36655 37205\nf 36653 37205 37203\nf 36654 37202 37204\nf 36654 37204 36656\nf 36655 36657 37207\nf 36655 37207 37205\nf 36656 37204 37206\nf 36656 37206 36658\nf 36657 36659 37209\nf 36657 37209 37207\nf 36658 37206 37208\nf 36658 37208 36660\nf 36659 36661 37211\nf 36659 37211 37209\nf 36660 37208 37210\nf 36660 37210 36662\nf 36661 36663 37213\nf 36661 37213 37211\nf 36662 37210 37212\nf 36662 37212 36664\nf 36663 36665 37215\nf 36663 37215 37213\nf 36664 37212 37214\nf 36664 37214 36666\nf 36665 36667 37217\nf 36665 37217 37215\nf 36666 37214 37216\nf 36666 37216 36668\nf 36667 36669 37219\nf 36667 37219 37217\nf 36668 37216 37218\nf 36668 37218 36670\nf 36669 36671 37221\nf 36669 37221 37219\nf 36670 37218 37220\nf 36670 37220 36672\nf 36671 36673 37223\nf 36671 37223 37221\nf 36672 37220 37222\nf 36672 37222 36675\nf 36673 36674 37223\nf 36674 36677 37228\nf 36674 37224 37223\nf 36674 37228 37224\nf 36675 37222 37226\nf 36675 37226 36676\nf 36676 37226 37227\nf 36676 37227 37229\nf 36676 37229 36678\nf 36677 36679 37231\nf 36677 37231 37228\nf 36678 37229 36680\nf 36679 36681 37233\nf 36679 37233 37231\nf 36680 37229 37232\nf 36680 37232 36682\nf 36681 36683 37235\nf 36681 37235 37233\nf 36682 37232 37234\nf 36682 37234 36684\nf 36683 36685 37237\nf 36683 37237 37235\nf 36684 37234 37236\nf 36684 37236 36686\nf 36685 36687 37239\nf 36685 37239 37237\nf 36686 37236 37238\nf 36686 37238 36688\nf 36687 36689 37241\nf 36687 37241 37239\nf 36688 37238 37240\nf 36688 37240 36690\nf 36689 36691 37241\nf 36690 37240 37243\nf 36690 37243 36694\nf 36691 36692 36693\nf 36691 36693 37241\nf 36692 36695 37245\nf 36692 37245 36693\nf 36693 37242 37241\nf 36693 37245 37242\nf 36694 37243 37246\nf 36694 37246 36696\nf 36695 36698 37249\nf 36695 37249 37245\nf 36696 36697 37254\nf 36696 37246 37247\nf 36696 37247 36697\nf 36696 37254 36700\nf 36697 37247 37251\nf 36697 37251 37252\nf 36697 37252 37254\nf 36698 36699 37249\nf 36698 36701 36702\nf 36698 36702 36699\nf 36699 36702 37253\nf 36699 37250 37249\nf 36699 37253 37250\nf 36700 37254 36703\nf 36701 36704 36705\nf 36701 36705 36702\nf 36702 36705 37256\nf 36702 37256 37253\nf 36703 37254 37257\nf 36703 37257 36706\nf 36704 36708 36710\nf 36704 36710 36705\nf 36705 36710 37259\nf 36705 37259 37256\nf 36706 37257 37260\nf 36706 37260 36707\nf 36707 37260 37261\nf 36707 37261 37264\nf 36707 37264 36711\nf 36708 36709 36710\nf 36709 36712 37262\nf 36709 37262 36710\nf 36710 37262 37259\nf 36711 37264 36713\nf 36712 36714 37270\nf 36712 37266 37262\nf 36712 37270 37266\nf 36713 37264 37268\nf 36713 37268 36715\nf 36714 36716 37273\nf 36714 37273 37270\nf 36715 37268 37272\nf 36715 37272 36718\nf 36716 36717 36720\nf 36716 36720 37275\nf 36716 37275 37273\nf 36717 36719 36720\nf 36718 37272 37274\nf 36718 37274 36721\nf 36719 36722 36723\nf 36719 36723 36720\nf 36720 36723 37275\nf 36721 37274 37276\nf 36721 37276 36724\nf 36722 36725 36726\nf 36722 36726 36723\nf 36723 36726 37277\nf 36723 37277 37275\nf 36724 37276 37278\nf 36724 37278 36727\nf 36725 36728 37282\nf 36725 37280 36726\nf 36725 37282 37280\nf 36726 37279 37277\nf 36726 37280 37279\nf 36727 37278 37281\nf 36727 37281 36729\nf 36728 36731 37286\nf 36728 37286 37282\nf 36729 37281 37284\nf 36729 37284 36730\nf 36730 37284 37285\nf 36730 37285 37288\nf 36730 37288 36732\nf 36731 36733 37290\nf 36731 37290 37286\nf 36732 37288 36734\nf 36733 36735 37292\nf 36733 37292 37290\nf 36734 37288 37291\nf 36734 37291 36736\nf 36735 36737 37292\nf 36736 37291 37295\nf 36736 37295 36739\nf 36737 36738 37292\nf 36737 36740 36742\nf 36737 36742 36738\nf 36738 36742 37296\nf 36738 37293 37292\nf 36738 37296 37293\nf 36739 37295 37297\nf 36739 37297 36743\nf 36740 36741 36742\nf 36741 36744 37298\nf 36741 37298 36742\nf 36742 37298 37296\nf 36743 37297 37299\nf 36743 37299 36745\nf 36744 36746 37302\nf 36744 37300 37298\nf 36744 37302 37300\nf 36745 37299 37301\nf 36745 37301 36747\nf 36746 36748 37304\nf 36746 37304 37302\nf 36747 37301 37303\nf 36747 37303 36749\nf 36748 36751 37307\nf 36748 37307 37304\nf 36749 37303 37305\nf 36749 37305 36750\nf 36750 37305 37306\nf 36750 37306 37308\nf 36750 37308 36752\nf 36751 36753 37309\nf 36751 37309 37307\nf 36752 37308 36754\nf 36753 36755 37311\nf 36753 37311 37309\nf 36754 37308 37310\nf 36754 37310 36757\nf 36755 36756 37311\nf 36756 36758 37314\nf 36756 37312 37311\nf 36756 37314 37312\nf 36757 37310 37313\nf 36757 37313 36759\nf 36758 36760 37316\nf 36758 37316 37314\nf 36759 37313 37315\nf 36759 37315 36762\nf 36760 36761 37316\nf 36761 36763 37319\nf 36761 37317 37316\nf 36761 37319 37317\nf 36762 37315 37318\nf 36762 37318 36765\nf 36763 36764 37319\nf 36764 36767 37323\nf 36764 37320 37319\nf 36764 37323 37320\nf 36765 37318 37321\nf 36765 37321 37322\nf 36765 37322 36766\nf 36766 37322 36769\nf 36767 36768 37328\nf 36767 37328 37323\nf 36768 36770 36772\nf 36768 36772 37328\nf 36769 37322 37325\nf 36769 37325 37327\nf 36769 37327 36771\nf 36770 36771 36772\nf 36771 37327 37329\nf 36771 37329 36772\nf 36772 37329 37328\nf 36773 36774 36787\nf 36773 36786 36784\nf 36773 36787 36786\nf 36774 36775 37330\nf 36774 37330 37339\nf 36774 37339 36787\nf 36775 36776 37330\nf 36776 36777 37331\nf 36776 37331 37330\nf 36777 36778 37332\nf 36777 37332 37331\nf 36778 36779 37333\nf 36778 37333 37332\nf 36779 36788 36789\nf 36779 36789 37333\nf 36780 36781 37334\nf 36780 36795 36793\nf 36780 37334 37347\nf 36780 37347 36795\nf 36781 36782 37334\nf 36782 36783 37335\nf 36782 37335 37334\nf 36783 36785 37336\nf 36783 37336 37335\nf 36784 36786 36785\nf 36785 36786 37338\nf 36785 37337 37336\nf 36785 37338 37337\nf 36786 36787 37338\nf 36787 37339 37340\nf 36787 37340 37338\nf 36788 36790 37343\nf 36788 37343 36789\nf 36789 37342 37333\nf 36789 37343 37342\nf 36790 36791 37344\nf 36790 37344 37343\nf 36791 36796 36797\nf 36791 36797 37344\nf 36792 36794 37345\nf 36792 37345 37353\nf 36792 37353 36799\nf 36793 36795 36794\nf 36794 36795 37348\nf 36794 37346 37345\nf 36794 37348 37346\nf 36795 37347 37348\nf 36796 36798 37352\nf 36796 37352 36797\nf 36797 37351 37344\nf 36797 37352 37351\nf 36798 36801 36802\nf 36798 36802 37355\nf 36798 37355 37352\nf 36799 37353 36800\nf 36800 37353 37354\nf 36800 37354 37357\nf 36800 37357 36803\nf 36801 36805 37360\nf 36801 37356 36802\nf 36801 37360 37356\nf 36802 37356 37355\nf 36803 37357 37358\nf 36803 37358 36804\nf 36804 37358 36807\nf 36805 36806 36811\nf 36805 36811 37364\nf 36805 37364 37360\nf 36806 36810 36811\nf 36807 37358 37361\nf 36807 37361 37362\nf 36807 37362 36808\nf 36808 37362 37363\nf 36808 37363 36809\nf 36809 37363 36812\nf 36810 36815 37369\nf 36810 37365 36811\nf 36810 37369 37365\nf 36811 37365 37364\nf 36812 37363 37366\nf 36812 37366 37367\nf 36812 37367 36813\nf 36813 37367 37368\nf 36813 37368 36814\nf 36814 37368 36817\nf 36815 36816 37376\nf 36815 37376 37369\nf 36816 36822 36824\nf 36816 36824 37376\nf 36817 37368 37371\nf 36817 37371 37372\nf 36817 37372 36818\nf 36818 37372 37373\nf 36818 37373 36819\nf 36819 37373 37374\nf 36819 37374 36820\nf 36820 37374 37375\nf 36820 37375 36821\nf 36821 37375 36825\nf 36822 36823 36824\nf 36823 36833 36835\nf 36823 36835 36824\nf 36824 36835 37377\nf 36824 37377 37376\nf 36825 37375 37379\nf 36825 37379 37380\nf 36825 37380 36826\nf 36826 37380 37381\nf 36826 37381 36827\nf 36827 37381 37382\nf 36827 37382 36828\nf 36828 37382 37383\nf 36828 37383 36829\nf 36829 37383 36830\nf 36830 36836 36837\nf 36830 36837 36831\nf 36830 37383 36836\nf 36831 36837 36838\nf 36831 36838 36832\nf 36832 36838 37391\nf 36832 37384 36834\nf 36832 37391 37384\nf 36833 36834 36835\nf 36834 37384 37386\nf 36834 37386 36835\nf 36835 37385 37377\nf 36835 37386 37385\nf 36836 37383 37387\nf 36836 37387 37389\nf 36836 37389 36837\nf 36837 37389 37390\nf 36837 37390 36838\nf 36838 37390 37392\nf 36838 37392 37391\nf 36839 36840 37394\nf 36839 37394 37402\nf 36839 37402 36847\nf 36840 36841 37395\nf 36840 37395 37394\nf 36841 36848 37396\nf 36841 37396 37395\nf 36842 36843 37397\nf 36842 37397 37404\nf 36842 37404 36849\nf 36843 36844 37398\nf 36843 37398 37397\nf 36844 36845 37399\nf 36844 37399 37398\nf 36845 36846 37400\nf 36845 37400 37399\nf 36846 36850 37401\nf 36846 37401 37400\nf 36847 37402 36851\nf 36848 36853 37408\nf 36848 37403 37396\nf 36848 37408 37403\nf 36849 37404 36855\nf 36850 36857 37413\nf 36850 37405 37401\nf 36850 37413 37405\nf 36851 37402 37406\nf 36851 37406 36852\nf 36852 37406 37407\nf 36852 37407 37416\nf 36852 37416 36859\nf 36853 36854 37409\nf 36853 37409 37408\nf 36854 36860 37409\nf 36855 37404 37410\nf 36855 37410 36856\nf 36856 37410 37411\nf 36856 37411 37418\nf 36856 37418 36861\nf 36857 36858 37414\nf 36857 37414 37413\nf 36858 36862 37414\nf 36859 37416 36863\nf 36860 36864 37421\nf 36860 37417 37409\nf 36860 37421 37417\nf 36861 37418 36865\nf 36862 36866 37423\nf 36862 37419 37414\nf 36862 37423 37419\nf 36863 37416 37420\nf 36863 37420 36867\nf 36864 36868 37425\nf 36864 37425 37421\nf 36865 37418 37422\nf 36865 37422 36869\nf 36866 36870 37427\nf 36866 37427 37423\nf 36867 37420 37424\nf 36867 37424 36871\nf 36868 36872 37429\nf 36868 37429 37425\nf 36869 37422 37426\nf 36869 37426 36873\nf 36870 36874 37431\nf 36870 37431 37427\nf 36871 37424 37428\nf 36871 37428 36876\nf 36872 36877 37435\nf 36872 37435 37429\nf 36873 37426 37430\nf 36873 37430 36878\nf 36874 36875 37432\nf 36874 37432 37431\nf 36875 36879 37432\nf 36876 37428 37434\nf 36876 37434 36881\nf 36877 36882 37440\nf 36877 37440 37435\nf 36878 37430 37436\nf 36878 37436 36883\nf 36879 36880 37437\nf 36879 37437 37432\nf 36880 36884 37442\nf 36880 37438 37437\nf 36880 37442 37438\nf 36881 37434 37439\nf 36881 37439 36885\nf 36882 36886 37445\nf 36882 37445 37440\nf 36883 37436 37441\nf 36883 37441 36887\nf 36884 36888 37447\nf 36884 37447 37442\nf 36885 37439 37444\nf 36885 37444 36889\nf 36886 36890 37449\nf 36886 37449 37445\nf 36887 37441 37446\nf 36887 37446 36892\nf 36888 36893 37452\nf 36888 37452 37447\nf 36889 37444 37448\nf 36889 37448 36894\nf 36890 36891 37450\nf 36890 37450 37449\nf 36891 36895 37450\nf 36892 37446 37451\nf 36892 37451 36902\nf 36893 36904 37463\nf 36893 37463 37452\nf 36894 37448 37453\nf 36894 37453 36905\nf 36895 36896 37455\nf 36895 37454 37450\nf 36895 37455 37454\nf 36896 36897 37455\nf 36897 36898 37456\nf 36897 37456 37455\nf 36898 36899 37457\nf 36898 37457 37456\nf 36899 36906 37458\nf 36899 37458 37457\nf 36900 36901 37459\nf 36900 37459 37547\nf 36900 37547 36988\nf 36901 36903 37460\nf 36901 37460 37459\nf 36902 37451 37461\nf 36902 37461 36903\nf 36903 37461 37462\nf 36903 37462 37460\nf 36904 36990 37549\nf 36904 37549 37463\nf 36905 37453 37464\nf 36905 37464 36991\nf 36906 36907 37466\nf 36906 37465 37458\nf 36906 37466 37465\nf 36907 36908 37466\nf 36908 36909 37467\nf 36908 37467 37466\nf 36909 36910 37468\nf 36909 37468 37467\nf 36910 36911 37469\nf 36910 37469 37468\nf 36911 36912 37470\nf 36911 37470 37469\nf 36912 36913 37471\nf 36912 37471 37470\nf 36913 36914 37472\nf 36913 37472 37471\nf 36914 36915 37473\nf 36914 37473 37472\nf 36915 36916 37474\nf 36915 37474 37473\nf 36916 36917 37475\nf 36916 37475 37474\nf 36917 36918 37476\nf 36917 37476 37475\nf 36918 36919 37477\nf 36918 37477 37476\nf 36919 36920 37478\nf 36919 37478 37477\nf 36920 36921 37479\nf 36920 37479 37478\nf 36921 36922 37480\nf 36921 37480 37479\nf 36922 36923 37481\nf 36922 37481 37480\nf 36923 36924 37482\nf 36923 37482 37481\nf 36924 36925 37483\nf 36924 37483 37482\nf 36925 36926 37484\nf 36925 37484 37483\nf 36926 36927 37485\nf 36926 37485 37484\nf 36927 36928 37486\nf 36927 37486 37485\nf 36928 36929 37487\nf 36928 37487 37486\nf 36929 36930 37488\nf 36929 37488 37487\nf 36930 36931 37489\nf 36930 37489 37488\nf 36931 36932 37490\nf 36931 37490 37489\nf 36932 36933 37491\nf 36932 37491 37490\nf 36933 36934 37492\nf 36933 37492 37491\nf 36934 36935 37493\nf 36934 37493 37492\nf 36935 36936 37494\nf 36935 37494 37493\nf 36936 36937 37495\nf 36936 37495 37494\nf 36937 36938 37496\nf 36937 37496 37495\nf 36938 36939 37497\nf 36938 37497 37496\nf 36939 36940 37498\nf 36939 37498 37497\nf 36940 36941 37499\nf 36940 37499 37498\nf 36941 36942 37500\nf 36941 37500 37499\nf 36942 36943 37501\nf 36942 37501 37500\nf 36943 36944 37502\nf 36943 37502 37501\nf 36944 36945 37503\nf 36944 37503 37502\nf 36945 36946 37504\nf 36945 37504 37503\nf 36946 36947 37505\nf 36946 37505 37504\nf 36947 36948 37506\nf 36947 37506 37505\nf 36948 36949 37507\nf 36948 37507 37506\nf 36949 36950 37508\nf 36949 37508 37507\nf 36950 36951 37509\nf 36950 37509 37508\nf 36951 36952 37510\nf 36951 37510 37509\nf 36952 36953 37511\nf 36952 37511 37510\nf 36953 36954 37512\nf 36953 37512 37511\nf 36954 36955 37513\nf 36954 37513 37512\nf 36955 36956 37514\nf 36955 37514 37513\nf 36956 36957 37515\nf 36956 37515 37514\nf 36957 36958 37516\nf 36957 37516 37515\nf 36958 36959 37517\nf 36958 37517 37516\nf 36959 36960 37518\nf 36959 37518 37517\nf 36960 36961 37519\nf 36960 37519 37518\nf 36961 36962 37520\nf 36961 37520 37519\nf 36962 36963 37521\nf 36962 37521 37520\nf 36963 36964 37522\nf 36963 37522 37521\nf 36964 36965 37523\nf 36964 37523 37522\nf 36965 36966 37524\nf 36965 37524 37523\nf 36966 36967 37525\nf 36966 37525 37524\nf 36967 36968 37526\nf 36967 37526 37525\nf 36968 36969 37527\nf 36968 37527 37526\nf 36969 36970 37528\nf 36969 37528 37527\nf 36970 36971 37529\nf 36970 37529 37528\nf 36971 36972 37530\nf 36971 37530 37529\nf 36972 36973 37531\nf 36972 37531 37530\nf 36973 36974 37532\nf 36973 37532 37531\nf 36974 36975 37533\nf 36974 37533 37532\nf 36975 36976 37534\nf 36975 37534 37533\nf 36976 36977 37535\nf 36976 37535 37534\nf 36977 36978 37536\nf 36977 37536 37535\nf 36978 36979 37537\nf 36978 37537 37536\nf 36979 36980 37538\nf 36979 37538 37537\nf 36980 36981 37539\nf 36980 37539 37538\nf 36981 36982 37540\nf 36981 37540 37539\nf 36982 36983 37541\nf 36982 37541 37540\nf 36983 36984 37542\nf 36983 37542 37541\nf 36984 36985 37543\nf 36984 37543 37542\nf 36985 36986 37544\nf 36985 37544 37543\nf 36986 36987 37545\nf 36986 37545 37544\nf 36987 36989 37546\nf 36987 37546 37545\nf 36988 37547 36989\nf 36989 37547 37548\nf 36989 37548 37546\nf 36990 36992 37551\nf 36990 37551 37549\nf 36991 37464 37550\nf 36991 37550 36993\nf 36992 36995 37554\nf 36992 37554 37551\nf 36993 37550 37552\nf 36993 37552 37553\nf 36993 37553 36994\nf 36994 37553 36996\nf 36995 36997 37556\nf 36995 37556 37554\nf 36996 37553 37555\nf 36996 37555 36999\nf 36997 36998 37556\nf 36998 37000 37559\nf 36998 37557 37556\nf 36998 37559 37557\nf 36999 37555 37558\nf 36999 37558 37002\nf 37000 37001 37559\nf 37001 37007 37566\nf 37001 37560 37559\nf 37001 37566 37560\nf 37002 37558 37561\nf 37002 37561 37562\nf 37002 37562 37003\nf 37003 37562 37009\nf 37004 37098 37657\nf 37004 37563 37564\nf 37004 37564 37005\nf 37004 37657 37563\nf 37005 37564 37565\nf 37005 37565 37006\nf 37006 37565 37567\nf 37006 37567 37008\nf 37007 37008 37566\nf 37008 37567 37566\nf 37009 37562 37568\nf 37009 37568 37569\nf 37009 37569 37010\nf 37010 37569 37100\nf 37011 37103 37664\nf 37011 37570 37571\nf 37011 37571 37012\nf 37011 37664 37570\nf 37012 37571 37572\nf 37012 37572 37013\nf 37013 37572 37573\nf 37013 37573 37014\nf 37014 37573 37574\nf 37014 37574 37015\nf 37015 37574 37575\nf 37015 37575 37016\nf 37016 37575 37576\nf 37016 37576 37017\nf 37017 37576 37577\nf 37017 37577 37018\nf 37018 37577 37578\nf 37018 37578 37019\nf 37019 37578 37579\nf 37019 37579 37020\nf 37020 37579 37580\nf 37020 37580 37021\nf 37021 37580 37581\nf 37021 37581 37022\nf 37022 37581 37582\nf 37022 37582 37023\nf 37023 37582 37583\nf 37023 37583 37024\nf 37024 37583 37584\nf 37024 37584 37025\nf 37025 37584 37585\nf 37025 37585 37026\nf 37026 37585 37586\nf 37026 37586 37027\nf 37027 37586 37587\nf 37027 37587 37028\nf 37028 37587 37588\nf 37028 37588 37029\nf 37029 37588 37589\nf 37029 37589 37030\nf 37030 37589 37590\nf 37030 37590 37031\nf 37031 37590 37591\nf 37031 37591 37032\nf 37032 37591 37592\nf 37032 37592 37033\nf 37033 37592 37593\nf 37033 37593 37034\nf 37034 37593 37594\nf 37034 37594 37035\nf 37035 37594 37595\nf 37035 37595 37036\nf 37036 37595 37596\nf 37036 37596 37037\nf 37037 37596 37597\nf 37037 37597 37038\nf 37038 37597 37598\nf 37038 37598 37039\nf 37039 37598 37599\nf 37039 37599 37040\nf 37040 37599 37600\nf 37040 37600 37041\nf 37041 37600 37601\nf 37041 37601 37042\nf 37042 37601 37602\nf 37042 37602 37043\nf 37043 37602 37603\nf 37043 37603 37044\nf 37044 37603 37604\nf 37044 37604 37045\nf 37045 37604 37605\nf 37045 37605 37046\nf 37046 37605 37606\nf 37046 37606 37047\nf 37047 37606 37607\nf 37047 37607 37048\nf 37048 37607 37608\nf 37048 37608 37049\nf 37049 37608 37609\nf 37049 37609 37050\nf 37050 37609 37610\nf 37050 37610 37051\nf 37051 37610 37611\nf 37051 37611 37052\nf 37052 37611 37612\nf 37052 37612 37053\nf 37053 37612 37613\nf 37053 37613 37054\nf 37054 37613 37614\nf 37054 37614 37055\nf 37055 37614 37615\nf 37055 37615 37056\nf 37056 37615 37616\nf 37056 37616 37057\nf 37057 37616 37617\nf 37057 37617 37058\nf 37058 37617 37618\nf 37058 37618 37059\nf 37059 37618 37619\nf 37059 37619 37060\nf 37060 37619 37620\nf 37060 37620 37061\nf 37061 37620 37621\nf 37061 37621 37062\nf 37062 37621 37622\nf 37062 37622 37063\nf 37063 37622 37623\nf 37063 37623 37064\nf 37064 37623 37624\nf 37064 37624 37065\nf 37065 37624 37625\nf 37065 37625 37066\nf 37066 37625 37626\nf 37066 37626 37067\nf 37067 37626 37627\nf 37067 37627 37068\nf 37068 37627 37628\nf 37068 37628 37069\nf 37069 37628 37629\nf 37069 37629 37070\nf 37070 37629 37630\nf 37070 37630 37071\nf 37071 37630 37631\nf 37071 37631 37072\nf 37072 37631 37632\nf 37072 37632 37073\nf 37073 37632 37633\nf 37073 37633 37074\nf 37074 37633 37634\nf 37074 37634 37075\nf 37075 37634 37635\nf 37075 37635 37076\nf 37076 37635 37636\nf 37076 37636 37077\nf 37077 37636 37637\nf 37077 37637 37078\nf 37078 37637 37638\nf 37078 37638 37079\nf 37079 37638 37639\nf 37079 37639 37080\nf 37080 37639 37640\nf 37080 37640 37081\nf 37081 37640 37641\nf 37081 37641 37082\nf 37082 37641 37642\nf 37082 37642 37083\nf 37083 37642 37643\nf 37083 37643 37084\nf 37084 37643 37644\nf 37084 37644 37085\nf 37085 37644 37645\nf 37085 37645 37086\nf 37086 37645 37646\nf 37086 37646 37087\nf 37087 37646 37647\nf 37087 37647 37088\nf 37088 37647 37648\nf 37088 37648 37089\nf 37089 37648 37649\nf 37089 37649 37090\nf 37090 37649 37650\nf 37090 37650 37091\nf 37091 37650 37651\nf 37091 37651 37092\nf 37092 37651 37652\nf 37092 37652 37093\nf 37093 37652 37653\nf 37093 37653 37094\nf 37094 37653 37654\nf 37094 37654 37095\nf 37095 37654 37655\nf 37095 37655 37096\nf 37096 37655 37656\nf 37096 37656 37097\nf 37097 37656 37658\nf 37097 37658 37099\nf 37098 37099 37657\nf 37099 37658 37657\nf 37100 37569 37659\nf 37100 37659 37660\nf 37100 37660 37101\nf 37101 37660 37662\nf 37101 37662 37102\nf 37102 37662 37105\nf 37103 37104 37664\nf 37104 37107 37109\nf 37104 37109 37663\nf 37104 37663 37665\nf 37104 37665 37664\nf 37105 37662 37666\nf 37105 37666 37668\nf 37105 37668 37106\nf 37106 37668 37108\nf 37107 37108 37109\nf 37108 37667 37109\nf 37108 37668 37667\nf 37109 37667 37663\nf 37110 37111 37670\nf 37110 37670 37673\nf 37110 37673 37114\nf 37111 37112 37671\nf 37111 37671 37670\nf 37112 37113 37672\nf 37112 37672 37671\nf 37113 37116 37117\nf 37113 37117 37672\nf 37114 37673 37115\nf 37115 37673 37674\nf 37115 37674 37677\nf 37115 37677 37118\nf 37116 37120 37679\nf 37116 37676 37117\nf 37116 37679 37676\nf 37117 37675 37672\nf 37117 37676 37675\nf 37118 37677 37119\nf 37119 37677 37678\nf 37119 37678 37681\nf 37119 37681 37122\nf 37120 37121 37680\nf 37120 37680 37679\nf 37121 37123 37680\nf 37122 37681 37124\nf 37123 37125 37684\nf 37123 37682 37680\nf 37123 37684 37682\nf 37124 37681 37683\nf 37124 37683 37126\nf 37125 37127 37686\nf 37125 37686 37684\nf 37126 37683 37685\nf 37126 37685 37128\nf 37127 37129 37688\nf 37127 37688 37686\nf 37128 37685 37687\nf 37128 37687 37131\nf 37129 37130 37133\nf 37129 37133 37690\nf 37129 37690 37688\nf 37130 37132 37133\nf 37131 37687 37689\nf 37131 37689 37134\nf 37132 37135 37693\nf 37132 37691 37133\nf 37132 37693 37691\nf 37133 37691 37690\nf 37134 37689 37692\nf 37134 37692 37136\nf 37135 37137 37693\nf 37136 37692 37696\nf 37136 37696 37140\nf 37137 37138 37139\nf 37137 37139 37693\nf 37138 37141 37697\nf 37138 37697 37139\nf 37139 37694 37693\nf 37139 37697 37694\nf 37140 37696 37698\nf 37140 37698 37142\nf 37141 37143 37701\nf 37141 37699 37697\nf 37141 37701 37699\nf 37142 37698 37700\nf 37142 37700 37144\nf 37143 37145 37703\nf 37143 37703 37701\nf 37144 37700 37702\nf 37144 37702 37146\nf 37145 37147 37705\nf 37145 37705 37703\nf 37146 37702 37704\nf 37146 37704 37148\nf 37147 37149 37708\nf 37147 37708 37705\nf 37148 37704 37706\nf 37148 37706 37150\nf 37149 37153 37710\nf 37149 37710 37708\nf 37150 37152 37151\nf 37150 37706 37707\nf 37150 37707 37152\nf 37151 37152 37154\nf 37152 37707 37709\nf 37152 37709 37154\nf 37153 37155 37712\nf 37153 37712 37710\nf 37154 37709 37711\nf 37154 37711 37157\nf 37155 37156 37712\nf 37156 37158 37715\nf 37156 37713 37712\nf 37156 37715 37713\nf 37157 37711 37714\nf 37157 37714 37159\nf 37158 37160 37717\nf 37158 37717 37715\nf 37159 37714 37716\nf 37159 37716 37161\nf 37160 37162 37719\nf 37160 37719 37717\nf 37161 37716 37718\nf 37161 37718 37163\nf 37162 37164 37721\nf 37162 37721 37719\nf 37163 37718 37720\nf 37163 37720 37165\nf 37164 37166 37723\nf 37164 37723 37721\nf 37165 37720 37722\nf 37165 37722 37168\nf 37166 37167 37723\nf 37167 37169 37727\nf 37167 37724 37723\nf 37167 37727 37724\nf 37168 37722 37726\nf 37168 37726 37170\nf 37169 37171 37729\nf 37169 37729 37727\nf 37170 37726 37728\nf 37170 37728 37172\nf 37171 37173 37731\nf 37171 37731 37729\nf 37172 37728 37730\nf 37172 37730 37174\nf 37173 37175 37733\nf 37173 37733 37731\nf 37174 37730 37732\nf 37174 37732 37176\nf 37175 37177 37735\nf 37175 37735 37733\nf 37176 37732 37734\nf 37176 37734 37178\nf 37177 37179 37737\nf 37177 37737 37735\nf 37178 37734 37736\nf 37178 37736 37180\nf 37179 37181 37739\nf 37179 37739 37737\nf 37180 37736 37738\nf 37180 37738 37182\nf 37181 37183 37741\nf 37181 37741 37739\nf 37182 37738 37740\nf 37182 37740 37184\nf 37183 37185 37743\nf 37183 37743 37741\nf 37184 37740 37742\nf 37184 37742 37186\nf 37185 37187 37745\nf 37185 37745 37743\nf 37186 37742 37744\nf 37186 37744 37188\nf 37187 37189 37747\nf 37187 37747 37745\nf 37188 37744 37746\nf 37188 37746 37190\nf 37189 37191 37750\nf 37189 37750 37747\nf 37190 37746 37748\nf 37190 37748 37192\nf 37191 37193 37753\nf 37191 37753 37750\nf 37192 37748 37751\nf 37192 37751 37194\nf 37193 37195 37757\nf 37193 37757 37753\nf 37194 37751 37754\nf 37194 37754 37196\nf 37195 37199 37759\nf 37195 37759 37757\nf 37196 37198 37197\nf 37196 37754 37198\nf 37197 37198 37758\nf 37197 37758 37200\nf 37198 37754 37755\nf 37198 37755 37758\nf 37199 37201 37761\nf 37199 37761 37759\nf 37200 37758 37760\nf 37200 37760 37202\nf 37201 37203 37763\nf 37201 37763 37761\nf 37202 37760 37762\nf 37202 37762 37204\nf 37203 37205 37765\nf 37203 37765 37763\nf 37204 37762 37764\nf 37204 37764 37206\nf 37205 37207 37767\nf 37205 37767 37765\nf 37206 37764 37766\nf 37206 37766 37208\nf 37207 37209 37769\nf 37207 37769 37767\nf 37208 37766 37768\nf 37208 37768 37210\nf 37209 37211 37771\nf 37209 37771 37769\nf 37210 37768 37770\nf 37210 37770 37212\nf 37211 37213 37773\nf 37211 37773 37771\nf 37212 37770 37772\nf 37212 37772 37214\nf 37213 37215 37775\nf 37213 37775 37773\nf 37214 37772 37774\nf 37214 37774 37216\nf 37215 37217 37777\nf 37215 37777 37775\nf 37216 37774 37776\nf 37216 37776 37218\nf 37217 37219 37779\nf 37217 37779 37777\nf 37218 37776 37778\nf 37218 37778 37220\nf 37219 37221 37781\nf 37219 37781 37779\nf 37220 37778 37780\nf 37220 37780 37222\nf 37221 37223 37781\nf 37222 37780 37783\nf 37222 37783 37226\nf 37223 37224 37225\nf 37223 37225 37781\nf 37224 37228 37784\nf 37224 37784 37225\nf 37225 37782 37781\nf 37225 37784 37782\nf 37226 37783 37785\nf 37226 37785 37787\nf 37226 37787 37227\nf 37227 37230 37229\nf 37227 37787 37230\nf 37228 37231 37789\nf 37228 37786 37784\nf 37228 37789 37786\nf 37229 37230 37790\nf 37229 37790 37232\nf 37230 37787 37788\nf 37230 37788 37790\nf 37231 37233 37792\nf 37231 37792 37789\nf 37232 37790 37234\nf 37233 37235 37795\nf 37233 37795 37792\nf 37234 37790 37793\nf 37234 37793 37236\nf 37235 37237 37798\nf 37235 37798 37795\nf 37236 37793 37796\nf 37236 37796 37238\nf 37237 37239 37801\nf 37237 37801 37798\nf 37238 37796 37799\nf 37238 37799 37240\nf 37239 37241 37805\nf 37239 37805 37801\nf 37240 37799 37802\nf 37240 37802 37243\nf 37241 37242 37805\nf 37242 37245 37809\nf 37242 37806 37805\nf 37242 37809 37806\nf 37243 37244 37246\nf 37243 37802 37803\nf 37243 37803 37244\nf 37244 37248 37246\nf 37244 37803 37808\nf 37244 37808 37810\nf 37244 37810 37248\nf 37245 37249 37811\nf 37245 37811 37809\nf 37246 37248 37247\nf 37247 37248 37251\nf 37248 37810 37251\nf 37249 37250 37811\nf 37250 37253 37816\nf 37250 37812 37811\nf 37250 37816 37812\nf 37251 37810 37814\nf 37251 37814 37817\nf 37251 37817 37252\nf 37252 37255 37254\nf 37252 37817 37255\nf 37253 37256 37819\nf 37253 37819 37816\nf 37254 37255 37257\nf 37255 37258 37257\nf 37255 37817 37821\nf 37255 37821 37258\nf 37256 37259 37824\nf 37256 37824 37819\nf 37257 37258 37827\nf 37257 37827 37260\nf 37258 37821 37822\nf 37258 37822 37827\nf 37259 37262 37824\nf 37260 37827 37830\nf 37260 37830 37261\nf 37261 37265 37264\nf 37261 37830 37265\nf 37262 37263 37824\nf 37262 37266 37267\nf 37262 37267 37263\nf 37263 37267 37829\nf 37263 37825 37824\nf 37263 37829 37825\nf 37264 37265 37268\nf 37265 37269 37268\nf 37265 37830 37833\nf 37265 37833 37269\nf 37266 37270 37271\nf 37266 37271 37267\nf 37267 37271 37832\nf 37267 37832 37829\nf 37268 37269 37837\nf 37268 37837 37272\nf 37269 37833 37834\nf 37269 37834 37837\nf 37270 37273 37839\nf 37270 37836 37271\nf 37270 37839 37836\nf 37271 37835 37832\nf 37271 37836 37835\nf 37272 37837 37274\nf 37273 37275 37843\nf 37273 37843 37839\nf 37274 37837 37841\nf 37274 37841 37276\nf 37275 37277 37846\nf 37275 37846 37843\nf 37276 37841 37845\nf 37276 37845 37278\nf 37277 37279 37849\nf 37277 37849 37846\nf 37278 37845 37848\nf 37278 37848 37281\nf 37279 37280 37283\nf 37279 37283 37851\nf 37279 37851 37849\nf 37280 37282 37283\nf 37281 37848 37850\nf 37281 37850 37284\nf 37282 37286 37287\nf 37282 37287 37283\nf 37283 37287 37851\nf 37284 37850 37852\nf 37284 37852 37855\nf 37284 37855 37285\nf 37285 37289 37288\nf 37285 37855 37289\nf 37286 37290 37857\nf 37286 37854 37287\nf 37286 37857 37854\nf 37287 37853 37851\nf 37287 37854 37853\nf 37288 37289 37860\nf 37288 37860 37291\nf 37289 37855 37856\nf 37289 37856 37860\nf 37290 37292 37857\nf 37291 37860 37295\nf 37292 37293 37294\nf 37292 37294 37857\nf 37293 37296 37861\nf 37293 37861 37294\nf 37294 37858 37857\nf 37294 37861 37858\nf 37295 37860 37862\nf 37295 37862 37297\nf 37296 37298 37865\nf 37296 37863 37861\nf 37296 37865 37863\nf 37297 37862 37864\nf 37297 37864 37299\nf 37298 37300 37867\nf 37298 37867 37865\nf 37299 37864 37866\nf 37299 37866 37301\nf 37300 37302 37869\nf 37300 37869 37867\nf 37301 37866 37868\nf 37301 37868 37303\nf 37302 37304 37871\nf 37302 37871 37869\nf 37303 37868 37870\nf 37303 37870 37305\nf 37304 37307 37874\nf 37304 37874 37871\nf 37305 37870 37872\nf 37305 37872 37306\nf 37306 37872 37873\nf 37306 37873 37875\nf 37306 37875 37308\nf 37307 37309 37876\nf 37307 37876 37874\nf 37308 37875 37310\nf 37309 37311 37878\nf 37309 37878 37876\nf 37310 37875 37877\nf 37310 37877 37313\nf 37311 37312 37878\nf 37312 37314 37881\nf 37312 37879 37878\nf 37312 37881 37879\nf 37313 37877 37880\nf 37313 37880 37315\nf 37314 37316 37883\nf 37314 37883 37881\nf 37315 37880 37882\nf 37315 37882 37318\nf 37316 37317 37883\nf 37317 37319 37886\nf 37317 37884 37883\nf 37317 37886 37884\nf 37318 37882 37885\nf 37318 37885 37321\nf 37319 37320 37888\nf 37319 37888 37886\nf 37320 37323 37324\nf 37320 37324 37888\nf 37321 37326 37322\nf 37321 37885 37887\nf 37321 37887 37890\nf 37321 37890 37326\nf 37322 37326 37325\nf 37323 37328 37893\nf 37323 37893 37324\nf 37324 37889 37888\nf 37324 37893 37889\nf 37325 37326 37891\nf 37325 37891 37327\nf 37326 37890 37891\nf 37327 37891 37892\nf 37327 37892 37894\nf 37327 37894 37329\nf 37328 37329 37893\nf 37329 37894 37893\nf 37330 37331 37896\nf 37330 37341 37339\nf 37330 37896 37903\nf 37330 37903 37341\nf 37331 37332 37896\nf 37332 37333 37897\nf 37332 37897 37896\nf 37333 37342 37898\nf 37333 37898 37897\nf 37334 37335 37350\nf 37334 37349 37347\nf 37334 37350 37349\nf 37335 37336 37899\nf 37335 37899 37914\nf 37335 37914 37350\nf 37336 37337 37899\nf 37337 37338 37900\nf 37337 37900 37899\nf 37338 37340 37901\nf 37338 37901 37900\nf 37339 37341 37340\nf 37340 37341 37904\nf 37340 37902 37901\nf 37340 37904 37902\nf 37341 37903 37904\nf 37342 37343 37908\nf 37342 37906 37898\nf 37342 37908 37906\nf 37343 37344 37908\nf 37344 37351 37909\nf 37344 37909 37908\nf 37345 37346 37910\nf 37345 37910 37920\nf 37345 37920 37353\nf 37346 37348 37911\nf 37346 37911 37910\nf 37347 37349 37348\nf 37348 37349 37913\nf 37348 37912 37911\nf 37348 37913 37912\nf 37349 37350 37913\nf 37350 37914 37915\nf 37350 37915 37913\nf 37351 37352 37919\nf 37351 37917 37909\nf 37351 37919 37917\nf 37352 37355 37919\nf 37353 37920 37925\nf 37353 37925 37354\nf 37354 37359 37357\nf 37354 37925 37359\nf 37355 37356 37924\nf 37355 37922 37919\nf 37355 37924 37922\nf 37356 37360 37924\nf 37357 37359 37358\nf 37358 37359 37361\nf 37359 37925 37361\nf 37360 37364 37931\nf 37360 37926 37924\nf 37360 37931 37926\nf 37361 37925 37928\nf 37361 37928 37929\nf 37361 37929 37362\nf 37362 37929 37930\nf 37362 37930 37363\nf 37363 37930 37366\nf 37364 37365 37370\nf 37364 37370 37936\nf 37364 37936 37931\nf 37365 37369 37370\nf 37366 37930 37932\nf 37366 37932 37933\nf 37366 37933 37367\nf 37367 37933 37935\nf 37367 37935 37368\nf 37368 37935 37371\nf 37369 37376 37378\nf 37369 37378 37370\nf 37370 37378 37936\nf 37371 37935 37937\nf 37371 37937 37938\nf 37371 37938 37372\nf 37372 37938 37940\nf 37372 37940 37373\nf 37373 37940 37941\nf 37373 37941 37374\nf 37374 37941 37942\nf 37374 37942 37375\nf 37375 37942 37379\nf 37376 37377 37378\nf 37377 37385 37943\nf 37377 37943 37378\nf 37378 37943 37936\nf 37379 37942 37944\nf 37379 37944 37946\nf 37379 37946 37380\nf 37380 37946 37947\nf 37380 37947 37381\nf 37381 37947 37948\nf 37381 37948 37382\nf 37382 37948 37383\nf 37383 37388 37387\nf 37383 37948 37388\nf 37384 37391 37393\nf 37384 37393 37957\nf 37384 37950 37386\nf 37384 37957 37950\nf 37385 37386 37949\nf 37385 37949 37943\nf 37386 37950 37949\nf 37387 37388 37953\nf 37387 37953 37389\nf 37388 37948 37951\nf 37388 37951 37953\nf 37389 37953 37954\nf 37389 37954 37955\nf 37389 37955 37390\nf 37390 37955 37956\nf 37390 37956 37392\nf 37391 37392 37393\nf 37392 37956 37958\nf 37392 37958 37393\nf 37393 37958 37957\nf 37394 37395 37959\nf 37394 37959 37967\nf 37394 37967 37402\nf 37395 37396 37960\nf 37395 37960 37959\nf 37396 37403 37961\nf 37396 37961 37960\nf 37397 37398 37962\nf 37397 37962 37969\nf 37397 37969 37404\nf 37398 37399 37963\nf 37398 37963 37962\nf 37399 37400 37964\nf 37399 37964 37963\nf 37400 37401 37965\nf 37400 37965 37964\nf 37401 37405 37966\nf 37401 37966 37965\nf 37402 37967 37406\nf 37403 37408 37975\nf 37403 37968 37961\nf 37403 37975 37968\nf 37404 37969 37410\nf 37405 37413 37971\nf 37405 37971 37966\nf 37406 37967 37973\nf 37406 37973 37407\nf 37407 37973 37974\nf 37407 37974 37980\nf 37407 37980 37416\nf 37408 37409 37976\nf 37408 37976 37975\nf 37409 37417 37976\nf 37410 37412 37411\nf 37410 37969 37412\nf 37411 37412 37977\nf 37411 37977 37418\nf 37412 37969 37970\nf 37412 37970 37977\nf 37413 37414 37415\nf 37413 37415 37972\nf 37413 37972 37971\nf 37414 37419 37415\nf 37415 37419 37979\nf 37415 37979 37972\nf 37416 37980 37420\nf 37417 37421 37985\nf 37417 37981 37976\nf 37417 37985 37981\nf 37418 37977 37982\nf 37418 37982 37422\nf 37419 37423 37987\nf 37419 37983 37979\nf 37419 37987 37983\nf 37420 37980 37984\nf 37420 37984 37424\nf 37421 37425 37989\nf 37421 37989 37985\nf 37422 37982 37986\nf 37422 37986 37426\nf 37423 37427 37991\nf 37423 37991 37987\nf 37424 37984 37988\nf 37424 37988 37428\nf 37425 37429 37994\nf 37425 37994 37989\nf 37426 37986 37990\nf 37426 37990 37430\nf 37427 37431 37991\nf 37428 37988 37993\nf 37428 37993 37434\nf 37429 37435 37998\nf 37429 37998 37994\nf 37430 37990 37995\nf 37430 37995 37436\nf 37431 37432 37433\nf 37431 37433 37992\nf 37431 37992 37991\nf 37432 37437 37433\nf 37433 37437 37996\nf 37433 37996 37992\nf 37434 37993 37997\nf 37434 37997 37439\nf 37435 37440 38002\nf 37435 38002 37998\nf 37436 37995 37999\nf 37436 37999 37441\nf 37437 37438 38004\nf 37437 38000 37996\nf 37437 38004 38000\nf 37438 37442 37443\nf 37438 37443 38004\nf 37439 37997 38001\nf 37439 38001 37444\nf 37440 37445 38007\nf 37440 38007 38002\nf 37441 37999 38003\nf 37441 38003 37446\nf 37442 37447 38009\nf 37442 38009 37443\nf 37443 38005 38004\nf 37443 38009 38005\nf 37444 38001 38006\nf 37444 38006 37448\nf 37445 37449 38012\nf 37445 38012 38007\nf 37446 38003 38008\nf 37446 38008 37451\nf 37447 37452 38015\nf 37447 38015 38009\nf 37448 38006 38011\nf 37448 38011 37453\nf 37449 37450 38013\nf 37449 38013 38012\nf 37450 37454 38013\nf 37451 38008 38014\nf 37451 38014 37461\nf 37452 37463 38027\nf 37452 38027 38015\nf 37453 38011 38016\nf 37453 38016 37464\nf 37454 37455 38018\nf 37454 38017 38013\nf 37454 38018 38017\nf 37455 37456 38018\nf 37456 37457 38019\nf 37456 38019 38018\nf 37457 37458 38020\nf 37457 38020 38019\nf 37458 37465 38021\nf 37458 38021 38020\nf 37459 37460 38022\nf 37459 38022 38111\nf 37459 38111 37547\nf 37460 37462 38023\nf 37460 38023 38022\nf 37461 38014 38024\nf 37461 38024 37462\nf 37462 38024 38025\nf 37462 38025 38023\nf 37463 37549 38113\nf 37463 38113 38027\nf 37464 38016 38028\nf 37464 38028 37550\nf 37465 37466 38030\nf 37465 38029 38021\nf 37465 38030 38029\nf 37466 37467 38030\nf 37467 37468 38031\nf 37467 38031 38030\nf 37468 37469 38032\nf 37468 38032 38031\nf 37469 37470 38033\nf 37469 38033 38032\nf 37470 37471 38034\nf 37470 38034 38033\nf 37471 37472 38035\nf 37471 38035 38034\nf 37472 37473 38036\nf 37472 38036 38035\nf 37473 37474 38037\nf 37473 38037 38036\nf 37474 37475 38038\nf 37474 38038 38037\nf 37475 37476 38039\nf 37475 38039 38038\nf 37476 37477 38040\nf 37476 38040 38039\nf 37477 37478 38041\nf 37477 38041 38040\nf 37478 37479 38042\nf 37478 38042 38041\nf 37479 37480 38043\nf 37479 38043 38042\nf 37480 37481 38044\nf 37480 38044 38043\nf 37481 37482 38045\nf 37481 38045 38044\nf 37482 37483 38046\nf 37482 38046 38045\nf 37483 37484 38047\nf 37483 38047 38046\nf 37484 37485 38048\nf 37484 38048 38047\nf 37485 37486 38049\nf 37485 38049 38048\nf 37486 37487 38050\nf 37486 38050 38049\nf 37487 37488 38051\nf 37487 38051 38050\nf 37488 37489 38052\nf 37488 38052 38051\nf 37489 37490 38053\nf 37489 38053 38052\nf 37490 37491 38054\nf 37490 38054 38053\nf 37491 37492 38055\nf 37491 38055 38054\nf 37492 37493 38056\nf 37492 38056 38055\nf 37493 37494 38057\nf 37493 38057 38056\nf 37494 37495 38058\nf 37494 38058 38057\nf 37495 37496 38059\nf 37495 38059 38058\nf 37496 37497 38060\nf 37496 38060 38059\nf 37497 37498 38061\nf 37497 38061 38060\nf 37498 37499 38062\nf 37498 38062 38061\nf 37499 37500 38063\nf 37499 38063 38062\nf 37500 37501 38064\nf 37500 38064 38063\nf 37501 37502 38065\nf 37501 38065 38064\nf 37502 37503 38066\nf 37502 38066 38065\nf 37503 37504 38067\nf 37503 38067 38066\nf 37504 37505 38068\nf 37504 38068 38067\nf 37505 37506 38069\nf 37505 38069 38068\nf 37506 37507 38070\nf 37506 38070 38069\nf 37507 37508 38071\nf 37507 38071 38070\nf 37508 37509 38072\nf 37508 38072 38071\nf 37509 37510 38073\nf 37509 38073 38072\nf 37510 37511 38074\nf 37510 38074 38073\nf 37511 37512 38075\nf 37511 38075 38074\nf 37512 37513 38076\nf 37512 38076 38075\nf 37513 37514 38077\nf 37513 38077 38076\nf 37514 37515 38078\nf 37514 38078 38077\nf 37515 37516 38079\nf 37515 38079 38078\nf 37516 37517 38080\nf 37516 38080 38079\nf 37517 37518 38081\nf 37517 38081 38080\nf 37518 37519 38082\nf 37518 38082 38081\nf 37519 37520 38083\nf 37519 38083 38082\nf 37520 37521 38084\nf 37520 38084 38083\nf 37521 37522 38085\nf 37521 38085 38084\nf 37522 37523 38086\nf 37522 38086 38085\nf 37523 37524 38087\nf 37523 38087 38086\nf 37524 37525 38088\nf 37524 38088 38087\nf 37525 37526 38089\nf 37525 38089 38088\nf 37526 37527 38090\nf 37526 38090 38089\nf 37527 37528 38091\nf 37527 38091 38090\nf 37528 37529 38092\nf 37528 38092 38091\nf 37529 37530 38093\nf 37529 38093 38092\nf 37530 37531 38094\nf 37530 38094 38093\nf 37531 37532 38095\nf 37531 38095 38094\nf 37532 37533 38096\nf 37532 38096 38095\nf 37533 37534 38097\nf 37533 38097 38096\nf 37534 37535 38098\nf 37534 38098 38097\nf 37535 37536 38099\nf 37535 38099 38098\nf 37536 37537 38100\nf 37536 38100 38099\nf 37537 37538 38101\nf 37537 38101 38100\nf 37538 37539 38102\nf 37538 38102 38101\nf 37539 37540 38103\nf 37539 38103 38102\nf 37540 37541 38104\nf 37540 38104 38103\nf 37541 37542 38105\nf 37541 38105 38104\nf 37542 37543 38106\nf 37542 38106 38105\nf 37543 37544 38107\nf 37543 38107 38106\nf 37544 37545 38108\nf 37544 38108 38107\nf 37545 37546 38109\nf 37545 38109 38108\nf 37546 37548 38110\nf 37546 38110 38109\nf 37547 38111 37548\nf 37548 38111 38112\nf 37548 38112 38110\nf 37549 37551 38115\nf 37549 38115 38113\nf 37550 38028 38114\nf 37550 38114 37552\nf 37551 37554 38118\nf 37551 38118 38115\nf 37552 38114 38116\nf 37552 38116 38117\nf 37552 38117 37553\nf 37553 38117 37555\nf 37554 37556 38120\nf 37554 38120 38118\nf 37555 38117 38119\nf 37555 38119 37558\nf 37556 37557 38120\nf 37557 37559 38123\nf 37557 38121 38120\nf 37557 38123 38121\nf 37558 38119 38122\nf 37558 38122 37561\nf 37559 37560 38123\nf 37560 37566 38130\nf 37560 38124 38123\nf 37560 38130 38124\nf 37561 38122 38125\nf 37561 38125 38126\nf 37561 38126 37562\nf 37562 38126 37568\nf 37563 37657 38222\nf 37563 38127 38128\nf 37563 38128 37564\nf 37563 38222 38127\nf 37564 38128 38129\nf 37564 38129 37565\nf 37565 38129 38131\nf 37565 38131 37567\nf 37566 37567 38130\nf 37567 38131 38130\nf 37568 38126 38132\nf 37568 38132 38133\nf 37568 38133 37569\nf 37569 38133 38134\nf 37569 38134 37659\nf 37570 37664 38228\nf 37570 38135 38136\nf 37570 38136 37571\nf 37570 38228 38135\nf 37571 38136 38137\nf 37571 38137 37572\nf 37572 38137 38138\nf 37572 38138 37573\nf 37573 38138 38139\nf 37573 38139 37574\nf 37574 38139 38140\nf 37574 38140 37575\nf 37575 38140 38141\nf 37575 38141 37576\nf 37576 38141 38142\nf 37576 38142 37577\nf 37577 38142 38143\nf 37577 38143 37578\nf 37578 38143 38144\nf 37578 38144 37579\nf 37579 38144 38145\nf 37579 38145 37580\nf 37580 38145 38146\nf 37580 38146 37581\nf 37581 38146 38147\nf 37581 38147 37582\nf 37582 38147 38148\nf 37582 38148 37583\nf 37583 38148 38149\nf 37583 38149 37584\nf 37584 38149 38150\nf 37584 38150 37585\nf 37585 38150 38151\nf 37585 38151 37586\nf 37586 38151 38152\nf 37586 38152 37587\nf 37587 38152 38153\nf 37587 38153 37588\nf 37588 38153 38154\nf 37588 38154 37589\nf 37589 38154 38155\nf 37589 38155 37590\nf 37590 38155 38156\nf 37590 38156 37591\nf 37591 38156 38157\nf 37591 38157 37592\nf 37592 38157 38158\nf 37592 38158 37593\nf 37593 38158 38159\nf 37593 38159 37594\nf 37594 38159 38160\nf 37594 38160 37595\nf 37595 38160 38161\nf 37595 38161 37596\nf 37596 38161 38162\nf 37596 38162 37597\nf 37597 38162 38163\nf 37597 38163 37598\nf 37598 38163 38164\nf 37598 38164 37599\nf 37599 38164 38165\nf 37599 38165 37600\nf 37600 38165 38166\nf 37600 38166 37601\nf 37601 38166 38167\nf 37601 38167 37602\nf 37602 38167 38168\nf 37602 38168 37603\nf 37603 38168 38169\nf 37603 38169 37604\nf 37604 38169 38170\nf 37604 38170 37605\nf 37605 38170 38171\nf 37605 38171 37606\nf 37606 38171 38172\nf 37606 38172 37607\nf 37607 38172 38173\nf 37607 38173 37608\nf 37608 38173 38174\nf 37608 38174 37609\nf 37609 38174 38175\nf 37609 38175 37610\nf 37610 38175 38176\nf 37610 38176 37611\nf 37611 38176 38177\nf 37611 38177 37612\nf 37612 38177 38178\nf 37612 38178 37613\nf 37613 38178 38179\nf 37613 38179 37614\nf 37614 38179 38180\nf 37614 38180 37615\nf 37615 38180 38181\nf 37615 38181 37616\nf 37616 38181 38182\nf 37616 38182 37617\nf 37617 38182 38183\nf 37617 38183 37618\nf 37618 38183 38184\nf 37618 38184 37619\nf 37619 38184 38185\nf 37619 38185 37620\nf 37620 38185 38186\nf 37620 38186 37621\nf 37621 38186 38187\nf 37621 38187 37622\nf 37622 38187 38188\nf 37622 38188 37623\nf 37623 38188 38189\nf 37623 38189 37624\nf 37624 38189 38190\nf 37624 38190 37625\nf 37625 38190 38191\nf 37625 38191 37626\nf 37626 38191 38192\nf 37626 38192 37627\nf 37627 38192 38193\nf 37627 38193 37628\nf 37628 38193 38194\nf 37628 38194 37629\nf 37629 38194 38195\nf 37629 38195 37630\nf 37630 38195 38196\nf 37630 38196 37631\nf 37631 38196 38197\nf 37631 38197 37632\nf 37632 38197 38198\nf 37632 38198 37633\nf 37633 38198 38199\nf 37633 38199 37634\nf 37634 38199 38200\nf 37634 38200 37635\nf 37635 38200 38201\nf 37635 38201 37636\nf 37636 38201 38202\nf 37636 38202 37637\nf 37637 38202 38203\nf 37637 38203 37638\nf 37638 38203 38204\nf 37638 38204 37639\nf 37639 38204 38205\nf 37639 38205 37640\nf 37640 38205 38206\nf 37640 38206 37641\nf 37641 38206 38207\nf 37641 38207 37642\nf 37642 38207 38208\nf 37642 38208 37643\nf 37643 38208 38209\nf 37643 38209 37644\nf 37644 38209 38210\nf 37644 38210 37645\nf 37645 38210 38211\nf 37645 38211 37646\nf 37646 38211 38212\nf 37646 38212 37647\nf 37647 38212 38213\nf 37647 38213 37648\nf 37648 38213 38214\nf 37648 38214 37649\nf 37649 38214 38215\nf 37649 38215 37650\nf 37650 38215 38216\nf 37650 38216 37651\nf 37651 38216 38217\nf 37651 38217 37652\nf 37652 38217 38218\nf 37652 38218 37653\nf 37653 38218 38219\nf 37653 38219 37654\nf 37654 38219 38220\nf 37654 38220 37655\nf 37655 38220 38221\nf 37655 38221 37656\nf 37656 38221 38223\nf 37656 38223 37658\nf 37657 37658 38222\nf 37658 38223 38222\nf 37659 37661 37660\nf 37659 38134 37661\nf 37660 37661 38225\nf 37660 38225 37662\nf 37661 38134 38224\nf 37661 38224 38225\nf 37662 38225 38226\nf 37662 38226 37666\nf 37663 37667 37669\nf 37663 37669 38226\nf 37663 38226 38227\nf 37663 38227 38229\nf 37663 38229 37665\nf 37664 37665 38228\nf 37665 38229 38228\nf 37666 37669 37668\nf 37666 38226 37669\nf 37667 37668 37669\nf 37670 37671 38230\nf 37670 38230 38233\nf 37670 38233 37673\nf 37671 37672 38231\nf 37671 38231 38230\nf 37672 37675 38232\nf 37672 38232 38231\nf 37673 38233 37674\nf 37674 38233 38234\nf 37674 38234 38237\nf 37674 38237 37677\nf 37675 37676 38236\nf 37675 38235 38232\nf 37675 38236 38235\nf 37676 37679 38236\nf 37677 38237 37678\nf 37678 38237 38238\nf 37678 38238 38241\nf 37678 38241 37681\nf 37679 37680 38240\nf 37679 38239 38236\nf 37679 38240 38239\nf 37680 37682 38240\nf 37681 38241 37683\nf 37682 37684 38245\nf 37682 38242 38240\nf 37682 38245 38242\nf 37683 38241 38244\nf 37683 38244 37685\nf 37684 37686 38247\nf 37684 38247 38245\nf 37685 38244 38246\nf 37685 38246 37687\nf 37686 37688 38249\nf 37686 38249 38247\nf 37687 38246 38248\nf 37687 38248 37689\nf 37688 37690 38251\nf 37688 38251 38249\nf 37689 38248 38250\nf 37689 38250 37692\nf 37690 37691 37695\nf 37690 37695 38253\nf 37690 38253 38251\nf 37691 37693 37695\nf 37692 38250 38252\nf 37692 38252 37696\nf 37693 37694 37695\nf 37694 37697 38253\nf 37694 38253 37695\nf 37696 38252 38254\nf 37696 38254 37698\nf 37697 37699 38257\nf 37697 38255 38253\nf 37697 38257 38255\nf 37698 38254 38256\nf 37698 38256 37700\nf 37699 37701 38259\nf 37699 38259 38257\nf 37700 38256 38258\nf 37700 38258 37702\nf 37701 37703 38261\nf 37701 38261 38259\nf 37702 38258 38260\nf 37702 38260 37704\nf 37703 37705 38263\nf 37703 38263 38261\nf 37704 38260 38262\nf 37704 38262 37706\nf 37705 37708 38266\nf 37705 38266 38263\nf 37706 38262 38264\nf 37706 38264 38265\nf 37706 38265 37707\nf 37707 38265 37709\nf 37708 37710 38268\nf 37708 38268 38266\nf 37709 38265 38267\nf 37709 38267 37711\nf 37710 37712 38270\nf 37710 38270 38268\nf 37711 38267 38269\nf 37711 38269 37714\nf 37712 37713 38270\nf 37713 37715 38273\nf 37713 38271 38270\nf 37713 38273 38271\nf 37714 38269 38272\nf 37714 38272 37716\nf 37715 37717 38275\nf 37715 38275 38273\nf 37716 38272 38274\nf 37716 38274 37718\nf 37717 37719 38277\nf 37717 38277 38275\nf 37718 38274 38276\nf 37718 38276 37720\nf 37719 37721 38279\nf 37719 38279 38277\nf 37720 38276 38278\nf 37720 38278 37722\nf 37721 37723 38279\nf 37722 38278 38281\nf 37722 38281 37726\nf 37723 37724 37725\nf 37723 37725 38279\nf 37724 37727 38282\nf 37724 38282 37725\nf 37725 38280 38279\nf 37725 38282 38280\nf 37726 38281 38283\nf 37726 38283 37728\nf 37727 37729 38286\nf 37727 38284 38282\nf 37727 38286 38284\nf 37728 38283 38285\nf 37728 38285 37730\nf 37729 37731 38288\nf 37729 38288 38286\nf 37730 38285 38287\nf 37730 38287 37732\nf 37731 37733 38290\nf 37731 38290 38288\nf 37732 38287 38289\nf 37732 38289 37734\nf 37733 37735 38292\nf 37733 38292 38290\nf 37734 38289 38291\nf 37734 38291 37736\nf 37735 37737 38294\nf 37735 38294 38292\nf 37736 38291 38293\nf 37736 38293 37738\nf 37737 37739 38296\nf 37737 38296 38294\nf 37738 38293 38295\nf 37738 38295 37740\nf 37739 37741 38298\nf 37739 38298 38296\nf 37740 38295 38297\nf 37740 38297 37742\nf 37741 37743 38300\nf 37741 38300 38298\nf 37742 38297 38299\nf 37742 38299 37744\nf 37743 37745 38302\nf 37743 38302 38300\nf 37744 38299 38301\nf 37744 38301 37746\nf 37745 37747 38305\nf 37745 38305 38302\nf 37746 38301 38303\nf 37746 38303 37748\nf 37747 37750 38307\nf 37747 38307 38305\nf 37748 37749 37752\nf 37748 37752 37751\nf 37748 38303 37749\nf 37749 38303 38304\nf 37749 38304 38306\nf 37749 38306 37752\nf 37750 37753 38309\nf 37750 38309 38307\nf 37751 37752 37756\nf 37751 37756 37754\nf 37752 38306 38308\nf 37752 38308 37756\nf 37753 37757 38311\nf 37753 38311 38309\nf 37754 37756 37755\nf 37755 37756 38310\nf 37755 38310 37758\nf 37756 38308 38310\nf 37757 37759 38313\nf 37757 38313 38311\nf 37758 38310 38312\nf 37758 38312 37760\nf 37759 37761 38315\nf 37759 38315 38313\nf 37760 38312 38314\nf 37760 38314 37762\nf 37761 37763 38317\nf 37761 38317 38315\nf 37762 38314 38316\nf 37762 38316 37764\nf 37763 37765 38319\nf 37763 38319 38317\nf 37764 38316 38318\nf 37764 38318 37766\nf 37765 37767 38321\nf 37765 38321 38319\nf 37766 38318 38320\nf 37766 38320 37768\nf 37767 37769 38323\nf 37767 38323 38321\nf 37768 38320 38322\nf 37768 38322 37770\nf 37769 37771 38325\nf 37769 38325 38323\nf 37770 38322 38324\nf 37770 38324 37772\nf 37771 37773 38327\nf 37771 38327 38325\nf 37772 38324 38326\nf 37772 38326 37774\nf 37773 37775 38329\nf 37773 38329 38327\nf 37774 38326 38328\nf 37774 38328 37776\nf 37775 37777 38331\nf 37775 38331 38329\nf 37776 38328 38330\nf 37776 38330 37778\nf 37777 37779 38333\nf 37777 38333 38331\nf 37778 38330 38332\nf 37778 38332 37780\nf 37779 37781 38335\nf 37779 38335 38333\nf 37780 38332 38334\nf 37780 38334 37783\nf 37781 37782 38335\nf 37782 37784 38339\nf 37782 38336 38335\nf 37782 38339 38336\nf 37783 38334 38338\nf 37783 38338 37785\nf 37784 37786 38341\nf 37784 38341 38339\nf 37785 38338 38340\nf 37785 38340 37787\nf 37786 37789 38343\nf 37786 38343 38341\nf 37787 38340 38342\nf 37787 38342 38344\nf 37787 38344 37788\nf 37788 37791 37790\nf 37788 38344 37791\nf 37789 37792 38345\nf 37789 38345 38343\nf 37790 37791 37793\nf 37791 37794 37793\nf 37791 38344 38346\nf 37791 38346 37794\nf 37792 37795 38347\nf 37792 38347 38345\nf 37793 37794 37796\nf 37794 37797 37796\nf 37794 38346 38348\nf 37794 38348 37797\nf 37795 37798 38349\nf 37795 38349 38347\nf 37796 37797 37799\nf 37797 37800 37799\nf 37797 38348 38350\nf 37797 38350 37800\nf 37798 37801 38351\nf 37798 38351 38349\nf 37799 37800 37802\nf 37800 37804 37802\nf 37800 38350 38353\nf 37800 38353 37804\nf 37801 37805 38351\nf 37802 37804 37803\nf 37803 37804 37808\nf 37804 38353 37808\nf 37805 37806 37807\nf 37805 37807 38351\nf 37806 37809 38354\nf 37806 38354 37807\nf 37807 38352 38351\nf 37807 38354 38352\nf 37808 38353 38355\nf 37808 38355 37810\nf 37809 37811 38356\nf 37809 38356 38354\nf 37810 38355 38359\nf 37810 38359 37814\nf 37811 37812 37813\nf 37811 37813 38356\nf 37812 37816 38362\nf 37812 38362 37813\nf 37813 38357 38356\nf 37813 38362 38357\nf 37814 37815 37817\nf 37814 38359 38360\nf 37814 38360 37815\nf 37815 37818 37817\nf 37815 37820 37818\nf 37815 38360 38363\nf 37815 38363 38365\nf 37815 38365 37820\nf 37816 37819 38364\nf 37816 38364 38362\nf 37817 37818 37821\nf 37818 37820 37823\nf 37818 37823 37821\nf 37819 37820 38364\nf 37819 37824 37826\nf 37819 37826 37820\nf 37820 37826 37823\nf 37820 38365 38364\nf 37821 37823 37822\nf 37822 37823 38367\nf 37822 37828 37827\nf 37822 38367 37828\nf 37823 37826 38367\nf 37824 37825 37826\nf 37825 37829 37826\nf 37826 37829 38367\nf 37827 37828 37830\nf 37828 37831 37830\nf 37828 38367 38368\nf 37828 38368 38371\nf 37828 38371 37831\nf 37829 37832 38373\nf 37829 38369 38367\nf 37829 38373 38369\nf 37830 37831 38375\nf 37830 38375 37833\nf 37831 38371 38372\nf 37831 38372 38375\nf 37832 37835 38377\nf 37832 38377 38373\nf 37833 38375 38379\nf 37833 38379 37834\nf 37834 37838 37837\nf 37834 38379 37838\nf 37835 37836 37840\nf 37835 37840 38381\nf 37835 38381 38377\nf 37836 37839 37840\nf 37837 37838 37841\nf 37838 37842 37841\nf 37838 38379 38382\nf 37838 38382 37842\nf 37839 37843 37844\nf 37839 37844 37840\nf 37840 37844 38381\nf 37841 37842 38385\nf 37841 38385 37845\nf 37842 38382 38383\nf 37842 38383 38385\nf 37843 37846 37847\nf 37843 37847 37844\nf 37844 37847 38384\nf 37844 38384 38381\nf 37845 38385 37848\nf 37846 37849 38390\nf 37846 38388 37847\nf 37846 38390 38388\nf 37847 38387 38384\nf 37847 38388 38387\nf 37848 38385 38389\nf 37848 38389 37850\nf 37849 37851 38393\nf 37849 38393 38390\nf 37850 38389 38392\nf 37850 38392 37852\nf 37851 37853 38395\nf 37851 38395 38393\nf 37852 38392 38394\nf 37852 38394 37855\nf 37853 37854 37859\nf 37853 37859 38398\nf 37853 38398 38395\nf 37854 37857 37859\nf 37855 38394 38396\nf 37855 38396 37856\nf 37856 38396 38397\nf 37856 38397 38399\nf 37856 38399 37860\nf 37857 37858 37859\nf 37858 37861 38398\nf 37858 38398 37859\nf 37860 38399 37862\nf 37861 37863 38403\nf 37861 38401 38398\nf 37861 38403 38401\nf 37862 38399 38402\nf 37862 38402 37864\nf 37863 37865 38405\nf 37863 38405 38403\nf 37864 38402 38404\nf 37864 38404 37866\nf 37865 37867 38407\nf 37865 38407 38405\nf 37866 38404 38406\nf 37866 38406 37868\nf 37867 37869 38409\nf 37867 38409 38407\nf 37868 38406 38408\nf 37868 38408 37870\nf 37869 37871 38411\nf 37869 38411 38409\nf 37870 38408 38410\nf 37870 38410 37872\nf 37871 37874 38414\nf 37871 38414 38411\nf 37872 38410 38412\nf 37872 38412 37873\nf 37873 38412 38413\nf 37873 38413 38415\nf 37873 38415 37875\nf 37874 37876 38416\nf 37874 38416 38414\nf 37875 38415 37877\nf 37876 37878 38418\nf 37876 38418 38416\nf 37877 38415 38417\nf 37877 38417 37880\nf 37878 37879 38418\nf 37879 37881 38421\nf 37879 38419 38418\nf 37879 38421 38419\nf 37880 38417 38420\nf 37880 38420 37882\nf 37881 37883 38423\nf 37881 38423 38421\nf 37882 38420 38422\nf 37882 38422 37885\nf 37883 37884 38423\nf 37884 37886 38426\nf 37884 38424 38423\nf 37884 38426 38424\nf 37885 38422 38425\nf 37885 38425 37887\nf 37886 37888 38428\nf 37886 38428 38426\nf 37887 38425 38427\nf 37887 38427 37890\nf 37888 37889 38428\nf 37889 37893 38432\nf 37889 38429 38428\nf 37889 38432 38429\nf 37890 38427 38430\nf 37890 38430 38431\nf 37890 38431 37891\nf 37891 38431 37892\nf 37892 37895 38435\nf 37892 38431 37895\nf 37892 38433 37894\nf 37892 38435 38433\nf 37893 37894 38432\nf 37894 38433 38432\nf 37895 38431 38434\nf 37895 38434 38436\nf 37895 38436 38435\nf 37896 37897 38437\nf 37896 37905 37903\nf 37896 38437 38442\nf 37896 38442 37905\nf 37897 37898 38437\nf 37898 37906 37907\nf 37898 37907 38437\nf 37899 37900 38438\nf 37899 37916 37914\nf 37899 38438 38452\nf 37899 38452 37916\nf 37900 37901 38438\nf 37901 37902 38439\nf 37901 38439 38438\nf 37902 37904 38440\nf 37902 38440 38439\nf 37903 37905 37904\nf 37904 37905 38443\nf 37904 38441 38440\nf 37904 38443 38441\nf 37905 38442 38443\nf 37906 37908 38446\nf 37906 38446 37907\nf 37907 38444 38437\nf 37907 38446 38444\nf 37908 37909 38447\nf 37908 38447 38446\nf 37909 37917 37918\nf 37909 37918 38447\nf 37910 37911 38448\nf 37910 37921 37920\nf 37910 38448 38456\nf 37910 38456 37921\nf 37911 37912 38448\nf 37912 37913 38449\nf 37912 38449 38448\nf 37913 37915 38450\nf 37913 38450 38449\nf 37914 37916 37915\nf 37915 37916 38453\nf 37915 38451 38450\nf 37915 38453 38451\nf 37916 38452 38453\nf 37917 37919 38455\nf 37917 38455 37918\nf 37918 38454 38447\nf 37918 38455 38454\nf 37919 37922 37923\nf 37919 37923 38459\nf 37919 38459 38455\nf 37920 37921 38461\nf 37920 38461 37925\nf 37921 38456 38457\nf 37921 38457 38461\nf 37922 37924 38460\nf 37922 38460 37923\nf 37923 38460 38459\nf 37924 37926 37927\nf 37924 37927 38463\nf 37924 38463 38460\nf 37925 38461 37928\nf 37926 37931 38470\nf 37926 38464 37927\nf 37926 38470 38464\nf 37927 38464 38463\nf 37928 38461 38465\nf 37928 38465 38466\nf 37928 38466 37929\nf 37929 38466 38468\nf 37929 38468 37930\nf 37930 38468 38469\nf 37930 38469 37932\nf 37931 37936 38474\nf 37931 38474 38470\nf 37932 37934 37933\nf 37932 38469 37934\nf 37933 37934 38472\nf 37933 38472 37935\nf 37934 38469 38471\nf 37934 38471 38472\nf 37935 38472 38473\nf 37935 38473 37937\nf 37936 37943 38478\nf 37936 38478 38474\nf 37937 37939 37938\nf 37937 38473 37939\nf 37938 37939 38476\nf 37938 38476 37940\nf 37939 38473 38475\nf 37939 38475 38476\nf 37940 38476 38477\nf 37940 38477 37941\nf 37941 38477 37942\nf 37942 37945 37944\nf 37942 38477 37945\nf 37943 37949 38483\nf 37943 38483 38478\nf 37944 37945 38480\nf 37944 38480 37946\nf 37945 38477 38479\nf 37945 38479 38480\nf 37946 38480 38481\nf 37946 38481 38482\nf 37946 38482 37947\nf 37947 38482 37948\nf 37948 37952 37951\nf 37948 38482 37952\nf 37949 37950 38483\nf 37950 37957 38491\nf 37950 38484 38483\nf 37950 38491 38484\nf 37951 37952 38486\nf 37951 38486 37953\nf 37952 38482 38485\nf 37952 38485 38486\nf 37953 38486 38487\nf 37953 38487 38488\nf 37953 38488 37954\nf 37954 38488 38489\nf 37954 38489 37955\nf 37955 38489 38490\nf 37955 38490 37956\nf 37956 38490 38492\nf 37956 38492 37958\nf 37957 37958 38491\nf 37958 38492 38491\nf 37959 37960 38493\nf 37959 38493 38501\nf 37959 38501 37967\nf 37960 37961 38494\nf 37960 38494 38493\nf 37961 37968 38495\nf 37961 38495 38494\nf 37962 37963 38496\nf 37962 38496 38503\nf 37962 38503 37969\nf 37963 37964 38497\nf 37963 38497 38496\nf 37964 37965 38498\nf 37964 38498 38497\nf 37965 37966 38499\nf 37965 38499 38498\nf 37966 37971 38500\nf 37966 38500 38499\nf 37967 38501 37973\nf 37968 37975 38508\nf 37968 38502 38495\nf 37968 38508 38502\nf 37969 38503 38510\nf 37969 38510 37970\nf 37970 37978 37977\nf 37970 38510 37978\nf 37971 37972 38505\nf 37971 38504 38500\nf 37971 38505 38504\nf 37972 37979 38505\nf 37973 38501 38506\nf 37973 38506 37974\nf 37974 38506 38507\nf 37974 38507 38513\nf 37974 38513 37980\nf 37975 37976 38509\nf 37975 38509 38508\nf 37976 37981 38509\nf 37977 37978 38515\nf 37977 38515 37982\nf 37978 38510 38511\nf 37978 38511 38515\nf 37979 37983 38516\nf 37979 38512 38505\nf 37979 38516 38512\nf 37980 38513 37984\nf 37981 37985 38518\nf 37981 38514 38509\nf 37981 38518 38514\nf 37982 38515 37986\nf 37983 37987 38520\nf 37983 38520 38516\nf 37984 38513 38517\nf 37984 38517 37988\nf 37985 37989 38522\nf 37985 38522 38518\nf 37986 38515 38519\nf 37986 38519 37990\nf 37987 37991 38524\nf 37987 38524 38520\nf 37988 38517 38521\nf 37988 38521 37993\nf 37989 37994 38527\nf 37989 38527 38522\nf 37990 38519 38523\nf 37990 38523 37995\nf 37991 37992 38525\nf 37991 38525 38524\nf 37992 37996 38525\nf 37993 38521 38526\nf 37993 38526 37997\nf 37994 37998 38531\nf 37994 38531 38527\nf 37995 38523 38528\nf 37995 38528 37999\nf 37996 38000 38533\nf 37996 38529 38525\nf 37996 38533 38529\nf 37997 38526 38530\nf 37997 38530 38001\nf 37998 38002 38535\nf 37998 38535 38531\nf 37999 38528 38532\nf 37999 38532 38003\nf 38000 38004 38537\nf 38000 38537 38533\nf 38001 38530 38534\nf 38001 38534 38006\nf 38002 38007 38539\nf 38002 38539 38535\nf 38003 38532 38536\nf 38003 38536 38008\nf 38004 38005 38541\nf 38004 38541 38537\nf 38005 38009 38010\nf 38005 38010 38541\nf 38006 38534 38538\nf 38006 38538 38011\nf 38007 38012 38544\nf 38007 38544 38539\nf 38008 38536 38540\nf 38008 38540 38014\nf 38009 38015 38548\nf 38009 38548 38010\nf 38010 38542 38541\nf 38010 38548 38542\nf 38011 38538 38543\nf 38011 38543 38016\nf 38012 38013 38545\nf 38012 38545 38544\nf 38013 38017 38545\nf 38014 38540 38546\nf 38014 38546 38024\nf 38015 38027 38559\nf 38015 38559 38548\nf 38016 38543 38550\nf 38016 38550 38028\nf 38017 38018 38552\nf 38017 38551 38545\nf 38017 38552 38551\nf 38018 38019 38552\nf 38019 38020 38553\nf 38019 38553 38552\nf 38020 38021 38554\nf 38020 38554 38553\nf 38021 38029 38555\nf 38021 38555 38554\nf 38022 38023 38556\nf 38022 38556 38643\nf 38022 38643 38111\nf 38023 38025 38558\nf 38023 38558 38556\nf 38024 38026 38025\nf 38024 38546 38026\nf 38025 38026 38557\nf 38025 38557 38558\nf 38026 38546 38547\nf 38026 38547 38557\nf 38027 38113 38645\nf 38027 38645 38559\nf 38028 38550 38560\nf 38028 38560 38114\nf 38029 38030 38562\nf 38029 38561 38555\nf 38029 38562 38561\nf 38030 38031 38562\nf 38031 38032 38563\nf 38031 38563 38562\nf 38032 38033 38564\nf 38032 38564 38563\nf 38033 38034 38565\nf 38033 38565 38564\nf 38034 38035 38566\nf 38034 38566 38565\nf 38035 38036 38567\nf 38035 38567 38566\nf 38036 38037 38568\nf 38036 38568 38567\nf 38037 38038 38569\nf 38037 38569 38568\nf 38038 38039 38570\nf 38038 38570 38569\nf 38039 38040 38571\nf 38039 38571 38570\nf 38040 38041 38572\nf 38040 38572 38571\nf 38041 38042 38573\nf 38041 38573 38572\nf 38042 38043 38574\nf 38042 38574 38573\nf 38043 38044 38575\nf 38043 38575 38574\nf 38044 38045 38576\nf 38044 38576 38575\nf 38045 38046 38577\nf 38045 38577 38576\nf 38046 38047 38578\nf 38046 38578 38577\nf 38047 38048 38579\nf 38047 38579 38578\nf 38048 38049 38580\nf 38048 38580 38579\nf 38049 38050 38581\nf 38049 38581 38580\nf 38050 38051 38582\nf 38050 38582 38581\nf 38051 38052 38583\nf 38051 38583 38582\nf 38052 38053 38584\nf 38052 38584 38583\nf 38053 38054 38585\nf 38053 38585 38584\nf 38054 38055 38586\nf 38054 38586 38585\nf 38055 38056 38587\nf 38055 38587 38586\nf 38056 38057 38588\nf 38056 38588 38587\nf 38057 38058 38589\nf 38057 38589 38588\nf 38058 38059 38590\nf 38058 38590 38589\nf 38059 38060 38591\nf 38059 38591 38590\nf 38060 38061 38592\nf 38060 38592 38591\nf 38061 38062 38593\nf 38061 38593 38592\nf 38062 38063 38594\nf 38062 38594 38593\nf 38063 38064 38595\nf 38063 38595 38594\nf 38064 38065 38596\nf 38064 38596 38595\nf 38065 38066 38597\nf 38065 38597 38596\nf 38066 38067 38598\nf 38066 38598 38597\nf 38067 38068 38599\nf 38067 38599 38598\nf 38068 38069 38600\nf 38068 38600 38599\nf 38069 38070 38601\nf 38069 38601 38600\nf 38070 38071 38602\nf 38070 38602 38601\nf 38071 38072 38603\nf 38071 38603 38602\nf 38072 38073 38604\nf 38072 38604 38603\nf 38073 38074 38605\nf 38073 38605 38604\nf 38074 38075 38606\nf 38074 38606 38605\nf 38075 38076 38607\nf 38075 38607 38606\nf 38076 38077 38608\nf 38076 38608 38607\nf 38077 38078 38609\nf 38077 38609 38608\nf 38078 38079 38610\nf 38078 38610 38609\nf 38079 38080 38611\nf 38079 38611 38610\nf 38080 38081 38612\nf 38080 38612 38611\nf 38081 38082 38613\nf 38081 38613 38612\nf 38082 38083 38614\nf 38082 38614 38613\nf 38083 38084 38615\nf 38083 38615 38614\nf 38084 38085 38616\nf 38084 38616 38615\nf 38085 38086 38617\nf 38085 38617 38616\nf 38086 38087 38618\nf 38086 38618 38617\nf 38087 38088 38619\nf 38087 38619 38618\nf 38088 38089 38620\nf 38088 38620 38619\nf 38089 38090 38621\nf 38089 38621 38620\nf 38090 38091 38622\nf 38090 38622 38621\nf 38091 38092 38623\nf 38091 38623 38622\nf 38092 38093 38624\nf 38092 38624 38623\nf 38093 38094 38625\nf 38093 38625 38624\nf 38094 38095 38626\nf 38094 38626 38625\nf 38095 38096 38627\nf 38095 38627 38626\nf 38096 38097 38628\nf 38096 38628 38627\nf 38097 38098 38629\nf 38097 38629 38628\nf 38098 38099 38630\nf 38098 38630 38629\nf 38099 38100 38631\nf 38099 38631 38630\nf 38100 38101 38632\nf 38100 38632 38631\nf 38101 38102 38633\nf 38101 38633 38632\nf 38102 38103 38634\nf 38102 38634 38633\nf 38103 38104 38635\nf 38103 38635 38634\nf 38104 38105 38636\nf 38104 38636 38635\nf 38105 38106 38637\nf 38105 38637 38636\nf 38106 38107 38638\nf 38106 38638 38637\nf 38107 38108 38639\nf 38107 38639 38638\nf 38108 38109 38640\nf 38108 38640 38639\nf 38109 38110 38641\nf 38109 38641 38640\nf 38110 38112 38642\nf 38110 38642 38641\nf 38111 38643 38112\nf 38112 38643 38644\nf 38112 38644 38642\nf 38113 38115 38647\nf 38113 38647 38645\nf 38114 38560 38646\nf 38114 38646 38116\nf 38115 38118 38650\nf 38115 38650 38647\nf 38116 38646 38648\nf 38116 38648 38649\nf 38116 38649 38117\nf 38117 38649 38119\nf 38118 38120 38652\nf 38118 38652 38650\nf 38119 38649 38651\nf 38119 38651 38122\nf 38120 38121 38652\nf 38121 38123 38655\nf 38121 38653 38652\nf 38121 38655 38653\nf 38122 38651 38654\nf 38122 38654 38125\nf 38123 38124 38655\nf 38124 38130 38662\nf 38124 38656 38655\nf 38124 38662 38656\nf 38125 38654 38657\nf 38125 38657 38658\nf 38125 38658 38126\nf 38126 38658 38132\nf 38127 38222 38754\nf 38127 38659 38660\nf 38127 38660 38128\nf 38127 38754 38659\nf 38128 38660 38661\nf 38128 38661 38129\nf 38129 38661 38663\nf 38129 38663 38131\nf 38130 38131 38662\nf 38131 38663 38662\nf 38132 38658 38664\nf 38132 38664 38665\nf 38132 38665 38133\nf 38133 38665 38666\nf 38133 38666 38134\nf 38134 38666 38224\nf 38135 38228 38760\nf 38135 38667 38668\nf 38135 38668 38136\nf 38135 38760 38667\nf 38136 38668 38669\nf 38136 38669 38137\nf 38137 38669 38670\nf 38137 38670 38138\nf 38138 38670 38671\nf 38138 38671 38139\nf 38139 38671 38672\nf 38139 38672 38140\nf 38140 38672 38673\nf 38140 38673 38141\nf 38141 38673 38674\nf 38141 38674 38142\nf 38142 38674 38675\nf 38142 38675 38143\nf 38143 38675 38676\nf 38143 38676 38144\nf 38144 38676 38677\nf 38144 38677 38145\nf 38145 38677 38678\nf 38145 38678 38146\nf 38146 38678 38679\nf 38146 38679 38147\nf 38147 38679 38680\nf 38147 38680 38148\nf 38148 38680 38681\nf 38148 38681 38149\nf 38149 38681 38682\nf 38149 38682 38150\nf 38150 38682 38683\nf 38150 38683 38151\nf 38151 38683 38684\nf 38151 38684 38152\nf 38152 38684 38685\nf 38152 38685 38153\nf 38153 38685 38686\nf 38153 38686 38154\nf 38154 38686 38687\nf 38154 38687 38155\nf 38155 38687 38688\nf 38155 38688 38156\nf 38156 38688 38689\nf 38156 38689 38157\nf 38157 38689 38690\nf 38157 38690 38158\nf 38158 38690 38691\nf 38158 38691 38159\nf 38159 38691 38692\nf 38159 38692 38160\nf 38160 38692 38693\nf 38160 38693 38161\nf 38161 38693 38694\nf 38161 38694 38162\nf 38162 38694 38695\nf 38162 38695 38163\nf 38163 38695 38696\nf 38163 38696 38164\nf 38164 38696 38697\nf 38164 38697 38165\nf 38165 38697 38698\nf 38165 38698 38166\nf 38166 38698 38699\nf 38166 38699 38167\nf 38167 38699 38700\nf 38167 38700 38168\nf 38168 38700 38701\nf 38168 38701 38169\nf 38169 38701 38702\nf 38169 38702 38170\nf 38170 38702 38703\nf 38170 38703 38171\nf 38171 38703 38704\nf 38171 38704 38172\nf 38172 38704 38705\nf 38172 38705 38173\nf 38173 38705 38706\nf 38173 38706 38174\nf 38174 38706 38707\nf 38174 38707 38175\nf 38175 38707 38708\nf 38175 38708 38176\nf 38176 38708 38709\nf 38176 38709 38177\nf 38177 38709 38710\nf 38177 38710 38178\nf 38178 38710 38711\nf 38178 38711 38179\nf 38179 38711 38712\nf 38179 38712 38180\nf 38180 38712 38713\nf 38180 38713 38181\nf 38181 38713 38714\nf 38181 38714 38182\nf 38182 38714 38715\nf 38182 38715 38183\nf 38183 38715 38716\nf 38183 38716 38184\nf 38184 38716 38717\nf 38184 38717 38185\nf 38185 38717 38718\nf 38185 38718 38186\nf 38186 38718 38719\nf 38186 38719 38187\nf 38187 38719 38720\nf 38187 38720 38188\nf 38188 38720 38721\nf 38188 38721 38189\nf 38189 38721 38722\nf 38189 38722 38190\nf 38190 38722 38723\nf 38190 38723 38191\nf 38191 38723 38724\nf 38191 38724 38192\nf 38192 38724 38725\nf 38192 38725 38193\nf 38193 38725 38726\nf 38193 38726 38194\nf 38194 38726 38727\nf 38194 38727 38195\nf 38195 38727 38728\nf 38195 38728 38196\nf 38196 38728 38729\nf 38196 38729 38197\nf 38197 38729 38730\nf 38197 38730 38198\nf 38198 38730 38731\nf 38198 38731 38199\nf 38199 38731 38732\nf 38199 38732 38200\nf 38200 38732 38733\nf 38200 38733 38201\nf 38201 38733 38734\nf 38201 38734 38202\nf 38202 38734 38735\nf 38202 38735 38203\nf 38203 38735 38736\nf 38203 38736 38204\nf 38204 38736 38737\nf 38204 38737 38205\nf 38205 38737 38738\nf 38205 38738 38206\nf 38206 38738 38739\nf 38206 38739 38207\nf 38207 38739 38740\nf 38207 38740 38208\nf 38208 38740 38741\nf 38208 38741 38209\nf 38209 38741 38742\nf 38209 38742 38210\nf 38210 38742 38743\nf 38210 38743 38211\nf 38211 38743 38744\nf 38211 38744 38212\nf 38212 38744 38745\nf 38212 38745 38213\nf 38213 38745 38746\nf 38213 38746 38214\nf 38214 38746 38747\nf 38214 38747 38215\nf 38215 38747 38748\nf 38215 38748 38216\nf 38216 38748 38749\nf 38216 38749 38217\nf 38217 38749 38750\nf 38217 38750 38218\nf 38218 38750 38751\nf 38218 38751 38219\nf 38219 38751 38752\nf 38219 38752 38220\nf 38220 38752 38753\nf 38220 38753 38221\nf 38221 38753 38755\nf 38221 38755 38223\nf 38222 38223 38754\nf 38223 38755 38754\nf 38224 38666 38756\nf 38224 38756 38757\nf 38224 38757 38225\nf 38225 38757 38758\nf 38225 38758 38226\nf 38226 38758 38759\nf 38226 38759 38227\nf 38227 38759 38761\nf 38227 38761 38229\nf 38228 38229 38760\nf 38229 38761 38760\nf 38230 38231 38762\nf 38230 38762 38765\nf 38230 38765 38233\nf 38231 38232 38763\nf 38231 38763 38762\nf 38232 38235 38764\nf 38232 38764 38763\nf 38233 38765 38234\nf 38234 38765 38766\nf 38234 38766 38770\nf 38234 38770 38237\nf 38235 38236 38769\nf 38235 38768 38764\nf 38235 38769 38768\nf 38236 38239 38769\nf 38237 38770 38238\nf 38238 38770 38771\nf 38238 38771 38773\nf 38238 38773 38241\nf 38239 38240 38243\nf 38239 38243 38774\nf 38239 38772 38769\nf 38239 38774 38772\nf 38240 38242 38243\nf 38241 38773 38244\nf 38242 38245 38777\nf 38242 38775 38243\nf 38242 38777 38775\nf 38243 38775 38774\nf 38244 38773 38776\nf 38244 38776 38246\nf 38245 38247 38779\nf 38245 38779 38777\nf 38246 38776 38778\nf 38246 38778 38248\nf 38247 38249 38781\nf 38247 38781 38779\nf 38248 38778 38780\nf 38248 38780 38250\nf 38249 38251 38783\nf 38249 38783 38781\nf 38250 38780 38782\nf 38250 38782 38252\nf 38251 38253 38785\nf 38251 38785 38783\nf 38252 38782 38784\nf 38252 38784 38254\nf 38253 38255 38787\nf 38253 38787 38785\nf 38254 38784 38786\nf 38254 38786 38256\nf 38255 38257 38789\nf 38255 38789 38787\nf 38256 38786 38788\nf 38256 38788 38258\nf 38257 38259 38791\nf 38257 38791 38789\nf 38258 38788 38790\nf 38258 38790 38260\nf 38259 38261 38793\nf 38259 38793 38791\nf 38260 38790 38792\nf 38260 38792 38262\nf 38261 38263 38795\nf 38261 38795 38793\nf 38262 38792 38794\nf 38262 38794 38264\nf 38263 38266 38798\nf 38263 38798 38795\nf 38264 38794 38796\nf 38264 38796 38797\nf 38264 38797 38265\nf 38265 38797 38267\nf 38266 38268 38800\nf 38266 38800 38798\nf 38267 38797 38799\nf 38267 38799 38269\nf 38268 38270 38802\nf 38268 38802 38800\nf 38269 38799 38801\nf 38269 38801 38272\nf 38270 38271 38802\nf 38271 38273 38805\nf 38271 38803 38802\nf 38271 38805 38803\nf 38272 38801 38804\nf 38272 38804 38274\nf 38273 38275 38807\nf 38273 38807 38805\nf 38274 38804 38806\nf 38274 38806 38276\nf 38275 38277 38809\nf 38275 38809 38807\nf 38276 38806 38808\nf 38276 38808 38278\nf 38277 38279 38811\nf 38277 38811 38809\nf 38278 38808 38810\nf 38278 38810 38281\nf 38279 38280 38811\nf 38280 38282 38815\nf 38280 38812 38811\nf 38280 38815 38812\nf 38281 38810 38814\nf 38281 38814 38283\nf 38282 38284 38817\nf 38282 38817 38815\nf 38283 38814 38816\nf 38283 38816 38285\nf 38284 38286 38819\nf 38284 38819 38817\nf 38285 38816 38818\nf 38285 38818 38287\nf 38286 38288 38821\nf 38286 38821 38819\nf 38287 38818 38820\nf 38287 38820 38289\nf 38288 38290 38824\nf 38288 38824 38821\nf 38289 38820 38823\nf 38289 38823 38291\nf 38290 38292 38827\nf 38290 38827 38824\nf 38291 38823 38826\nf 38291 38826 38293\nf 38292 38294 38830\nf 38292 38830 38827\nf 38293 38826 38829\nf 38293 38829 38295\nf 38294 38296 38833\nf 38294 38833 38830\nf 38295 38829 38832\nf 38295 38832 38297\nf 38296 38298 38835\nf 38296 38835 38833\nf 38297 38832 38834\nf 38297 38834 38299\nf 38298 38300 38837\nf 38298 38837 38835\nf 38299 38834 38836\nf 38299 38836 38301\nf 38300 38302 38839\nf 38300 38839 38837\nf 38301 38836 38838\nf 38301 38838 38303\nf 38302 38305 38842\nf 38302 38842 38839\nf 38303 38838 38840\nf 38303 38840 38304\nf 38304 38840 38841\nf 38304 38841 38843\nf 38304 38843 38306\nf 38305 38307 38845\nf 38305 38845 38842\nf 38306 38843 38308\nf 38307 38309 38847\nf 38307 38847 38845\nf 38308 38843 38846\nf 38308 38846 38310\nf 38309 38311 38849\nf 38309 38849 38847\nf 38310 38846 38848\nf 38310 38848 38312\nf 38311 38313 38851\nf 38311 38851 38849\nf 38312 38848 38850\nf 38312 38850 38314\nf 38313 38315 38853\nf 38313 38853 38851\nf 38314 38850 38852\nf 38314 38852 38316\nf 38315 38317 38855\nf 38315 38855 38853\nf 38316 38852 38854\nf 38316 38854 38318\nf 38317 38319 38857\nf 38317 38857 38855\nf 38318 38854 38856\nf 38318 38856 38320\nf 38319 38321 38859\nf 38319 38859 38857\nf 38320 38856 38858\nf 38320 38858 38322\nf 38321 38323 38861\nf 38321 38861 38859\nf 38322 38858 38860\nf 38322 38860 38324\nf 38323 38325 38863\nf 38323 38863 38861\nf 38324 38860 38862\nf 38324 38862 38326\nf 38325 38327 38865\nf 38325 38865 38863\nf 38326 38862 38864\nf 38326 38864 38328\nf 38327 38329 38867\nf 38327 38867 38865\nf 38328 38864 38866\nf 38328 38866 38330\nf 38329 38331 38869\nf 38329 38869 38867\nf 38330 38866 38868\nf 38330 38868 38332\nf 38331 38333 38871\nf 38331 38871 38869\nf 38332 38868 38870\nf 38332 38870 38334\nf 38333 38335 38871\nf 38334 38870 38874\nf 38334 38874 38338\nf 38335 38336 38337\nf 38335 38337 38871\nf 38336 38339 38875\nf 38336 38875 38337\nf 38337 38872 38871\nf 38337 38875 38872\nf 38338 38874 38876\nf 38338 38876 38340\nf 38339 38341 38879\nf 38339 38877 38875\nf 38339 38879 38877\nf 38340 38876 38878\nf 38340 38878 38342\nf 38341 38343 38881\nf 38341 38881 38879\nf 38342 38878 38880\nf 38342 38880 38344\nf 38343 38345 38883\nf 38343 38883 38881\nf 38344 38880 38882\nf 38344 38882 38346\nf 38345 38347 38885\nf 38345 38885 38883\nf 38346 38882 38884\nf 38346 38884 38348\nf 38347 38349 38887\nf 38347 38887 38885\nf 38348 38884 38886\nf 38348 38886 38350\nf 38349 38351 38889\nf 38349 38889 38887\nf 38350 38886 38888\nf 38350 38888 38353\nf 38351 38352 38889\nf 38352 38354 38892\nf 38352 38890 38889\nf 38352 38892 38890\nf 38353 38888 38891\nf 38353 38891 38355\nf 38354 38356 38892\nf 38355 38891 38894\nf 38355 38894 38359\nf 38356 38357 38358\nf 38356 38358 38892\nf 38357 38362 38896\nf 38357 38896 38358\nf 38358 38893 38892\nf 38358 38896 38893\nf 38359 38361 38360\nf 38359 38894 38895\nf 38359 38895 38361\nf 38360 38361 38366\nf 38360 38366 38363\nf 38361 38895 38897\nf 38361 38897 38899\nf 38361 38899 38366\nf 38362 38364 38898\nf 38362 38898 38896\nf 38363 38366 38365\nf 38364 38365 38366\nf 38364 38366 38898\nf 38366 38899 38898\nf 38367 38369 38370\nf 38367 38370 38368\nf 38368 38370 38371\nf 38369 38373 38374\nf 38369 38374 38370\nf 38370 38374 38371\nf 38371 38374 38372\nf 38372 38374 38376\nf 38372 38376 38375\nf 38373 38377 38378\nf 38373 38378 38374\nf 38374 38378 38376\nf 38375 38376 38379\nf 38376 38378 38380\nf 38376 38380 38379\nf 38377 38381 38903\nf 38377 38900 38378\nf 38377 38903 38900\nf 38378 38900 38901\nf 38378 38901 38380\nf 38379 38380 38905\nf 38379 38905 38382\nf 38380 38901 38902\nf 38380 38902 38905\nf 38381 38384 38907\nf 38381 38907 38903\nf 38382 38905 38908\nf 38382 38908 38383\nf 38383 38386 38385\nf 38383 38908 38386\nf 38384 38387 38910\nf 38384 38910 38907\nf 38385 38386 38911\nf 38385 38911 38389\nf 38386 38908 38909\nf 38386 38909 38911\nf 38387 38388 38391\nf 38387 38391 38913\nf 38387 38913 38910\nf 38388 38390 38391\nf 38389 38911 38392\nf 38390 38393 38916\nf 38390 38914 38391\nf 38390 38916 38914\nf 38391 38914 38913\nf 38392 38911 38915\nf 38392 38915 38394\nf 38393 38395 38918\nf 38393 38918 38916\nf 38394 38915 38917\nf 38394 38917 38396\nf 38395 38398 38920\nf 38395 38920 38918\nf 38396 38917 38919\nf 38396 38919 38921\nf 38396 38921 38397\nf 38397 38400 38399\nf 38397 38921 38400\nf 38398 38401 38923\nf 38398 38923 38920\nf 38399 38400 38924\nf 38399 38924 38402\nf 38400 38921 38922\nf 38400 38922 38924\nf 38401 38403 38925\nf 38401 38925 38923\nf 38402 38924 38404\nf 38403 38405 38927\nf 38403 38927 38925\nf 38404 38924 38926\nf 38404 38926 38406\nf 38405 38407 38929\nf 38405 38929 38927\nf 38406 38926 38928\nf 38406 38928 38408\nf 38407 38409 38931\nf 38407 38931 38929\nf 38408 38928 38930\nf 38408 38930 38410\nf 38409 38411 38933\nf 38409 38933 38931\nf 38410 38930 38932\nf 38410 38932 38412\nf 38411 38414 38936\nf 38411 38936 38933\nf 38412 38932 38934\nf 38412 38934 38413\nf 38413 38934 38935\nf 38413 38935 38937\nf 38413 38937 38415\nf 38414 38416 38938\nf 38414 38938 38936\nf 38415 38937 38417\nf 38416 38418 38940\nf 38416 38940 38938\nf 38417 38937 38939\nf 38417 38939 38420\nf 38418 38419 38940\nf 38419 38421 38943\nf 38419 38941 38940\nf 38419 38943 38941\nf 38420 38939 38942\nf 38420 38942 38422\nf 38421 38423 38945\nf 38421 38945 38943\nf 38422 38942 38944\nf 38422 38944 38425\nf 38423 38424 38945\nf 38424 38426 38948\nf 38424 38946 38945\nf 38424 38948 38946\nf 38425 38944 38947\nf 38425 38947 38427\nf 38426 38428 38950\nf 38426 38950 38948\nf 38427 38947 38949\nf 38427 38949 38430\nf 38428 38429 38950\nf 38429 38432 38954\nf 38429 38951 38950\nf 38429 38954 38951\nf 38430 38949 38952\nf 38430 38952 38953\nf 38430 38953 38431\nf 38431 38953 38434\nf 38432 38433 38954\nf 38433 38435 38957\nf 38433 38955 38954\nf 38433 38957 38955\nf 38434 38953 38956\nf 38434 38956 38958\nf 38434 38958 38436\nf 38435 38436 38957\nf 38436 38958 38957\nf 38437 38444 38445\nf 38437 38445 38442\nf 38438 38439 38959\nf 38438 38959 38972\nf 38438 38972 38452\nf 38439 38440 38960\nf 38439 38960 38959\nf 38440 38441 38961\nf 38440 38961 38960\nf 38441 38443 38962\nf 38441 38962 38961\nf 38442 38445 38443\nf 38443 38445 38966\nf 38443 38964 38962\nf 38443 38966 38964\nf 38444 38446 38966\nf 38444 38966 38445\nf 38446 38447 38967\nf 38446 38967 38966\nf 38447 38454 38968\nf 38447 38968 38967\nf 38448 38449 38969\nf 38448 38458 38456\nf 38448 38969 38977\nf 38448 38977 38458\nf 38449 38450 38969\nf 38450 38451 38970\nf 38450 38970 38969\nf 38451 38453 38971\nf 38451 38971 38970\nf 38452 38972 38453\nf 38453 38972 38973\nf 38453 38973 38971\nf 38454 38455 38976\nf 38454 38974 38968\nf 38454 38976 38974\nf 38455 38459 38976\nf 38456 38458 38457\nf 38457 38458 38978\nf 38457 38462 38461\nf 38457 38978 38462\nf 38458 38977 38978\nf 38459 38460 38981\nf 38459 38980 38976\nf 38459 38981 38980\nf 38460 38463 38981\nf 38461 38462 38465\nf 38462 38467 38465\nf 38462 38978 38982\nf 38462 38982 38985\nf 38462 38985 38467\nf 38463 38464 38984\nf 38463 38983 38981\nf 38463 38984 38983\nf 38464 38470 38984\nf 38465 38467 38466\nf 38466 38467 38986\nf 38466 38986 38468\nf 38467 38985 38986\nf 38468 38986 38987\nf 38468 38987 38469\nf 38469 38987 38471\nf 38470 38474 38992\nf 38470 38988 38984\nf 38470 38992 38988\nf 38471 38987 38989\nf 38471 38989 38990\nf 38471 38990 38472\nf 38472 38990 38991\nf 38472 38991 38473\nf 38473 38991 38475\nf 38474 38478 38996\nf 38474 38996 38992\nf 38475 38991 38993\nf 38475 38993 38994\nf 38475 38994 38476\nf 38476 38994 38995\nf 38476 38995 38477\nf 38477 38995 38479\nf 38478 38483 39001\nf 38478 39001 38996\nf 38479 38995 38997\nf 38479 38997 38998\nf 38479 38998 38480\nf 38480 38998 38999\nf 38480 38999 38481\nf 38481 38999 39000\nf 38481 39000 38482\nf 38482 39000 38485\nf 38483 38484 39001\nf 38484 38491 39010\nf 38484 39002 39001\nf 38484 39010 39002\nf 38485 39000 39003\nf 38485 39003 39005\nf 38485 39005 38486\nf 38486 39005 39006\nf 38486 39006 38487\nf 38487 39006 39007\nf 38487 39007 38488\nf 38488 39007 39008\nf 38488 39008 38489\nf 38489 39008 39009\nf 38489 39009 38490\nf 38490 39009 39011\nf 38490 39011 38492\nf 38491 38492 39010\nf 38492 39011 39010\nf 38493 38494 39012\nf 38493 39012 39020\nf 38493 39020 38501\nf 38494 38495 39013\nf 38494 39013 39012\nf 38495 38502 39014\nf 38495 39014 39013\nf 38496 38497 39015\nf 38496 39015 39022\nf 38496 39022 38503\nf 38497 38498 39016\nf 38497 39016 39015\nf 38498 38499 39017\nf 38498 39017 39016\nf 38499 38500 39018\nf 38499 39018 39017\nf 38500 38504 39019\nf 38500 39019 39018\nf 38501 39020 38506\nf 38502 38508 39027\nf 38502 39021 39014\nf 38502 39027 39021\nf 38503 39022 38510\nf 38504 38505 39024\nf 38504 39023 39019\nf 38504 39024 39023\nf 38505 38512 39024\nf 38506 39020 39025\nf 38506 39025 38507\nf 38507 39025 39026\nf 38507 39026 39032\nf 38507 39032 38513\nf 38508 38509 39028\nf 38508 39028 39027\nf 38509 38514 39028\nf 38510 39022 39029\nf 38510 39029 38511\nf 38511 39029 39030\nf 38511 39030 39034\nf 38511 39034 38515\nf 38512 38516 39035\nf 38512 39031 39024\nf 38512 39035 39031\nf 38513 39032 38517\nf 38514 38518 39037\nf 38514 39033 39028\nf 38514 39037 39033\nf 38515 39034 38519\nf 38516 38520 39039\nf 38516 39039 39035\nf 38517 39032 39036\nf 38517 39036 38521\nf 38518 38522 39041\nf 38518 39041 39037\nf 38519 39034 39038\nf 38519 39038 38523\nf 38520 38524 39043\nf 38520 39043 39039\nf 38521 39036 39040\nf 38521 39040 38526\nf 38522 38527 39047\nf 38522 39047 39041\nf 38523 39038 39042\nf 38523 39042 38528\nf 38524 38525 39044\nf 38524 39044 39043\nf 38525 38529 39044\nf 38526 39040 39046\nf 38526 39046 38530\nf 38527 38531 39051\nf 38527 39051 39047\nf 38528 39042 39048\nf 38528 39048 38532\nf 38529 38533 39053\nf 38529 39049 39044\nf 38529 39053 39049\nf 38530 39046 39050\nf 38530 39050 38534\nf 38531 38535 39055\nf 38531 39055 39051\nf 38532 39048 39052\nf 38532 39052 38536\nf 38533 38537 39057\nf 38533 39057 39053\nf 38534 39050 39054\nf 38534 39054 38538\nf 38535 38539 39059\nf 38535 39059 39055\nf 38536 39052 39056\nf 38536 39056 38540\nf 38537 38541 39061\nf 38537 39061 39057\nf 38538 39054 39058\nf 38538 39058 38543\nf 38539 38544 39063\nf 38539 39063 39059\nf 38540 39056 39060\nf 38540 39060 38546\nf 38541 38542 39067\nf 38541 39067 39061\nf 38542 38548 38549\nf 38542 38549 39067\nf 38543 39058 39062\nf 38543 39062 38550\nf 38544 38545 39064\nf 38544 39064 39063\nf 38545 38551 39064\nf 38546 39060 39065\nf 38546 39065 38547\nf 38547 39065 39066\nf 38547 39066 39076\nf 38547 39076 38557\nf 38548 38559 39078\nf 38548 39078 38549\nf 38549 39068 39067\nf 38549 39078 39068\nf 38550 39062 39069\nf 38550 39069 38560\nf 38551 38552 39071\nf 38551 39070 39064\nf 38551 39071 39070\nf 38552 38553 39071\nf 38553 38554 39072\nf 38553 39072 39071\nf 38554 38555 39073\nf 38554 39073 39072\nf 38555 38561 39074\nf 38555 39074 39073\nf 38556 38558 39075\nf 38556 39075 39163\nf 38556 39163 38643\nf 38557 39076 38558\nf 38558 39076 39077\nf 38558 39077 39075\nf 38559 38645 39165\nf 38559 39165 39078\nf 38560 39069 39080\nf 38560 39080 38646\nf 38561 38562 39082\nf 38561 39081 39074\nf 38561 39082 39081\nf 38562 38563 39082\nf 38563 38564 39083\nf 38563 39083 39082\nf 38564 38565 39084\nf 38564 39084 39083\nf 38565 38566 39085\nf 38565 39085 39084\nf 38566 38567 39086\nf 38566 39086 39085\nf 38567 38568 39087\nf 38567 39087 39086\nf 38568 38569 39088\nf 38568 39088 39087\nf 38569 38570 39089\nf 38569 39089 39088\nf 38570 38571 39090\nf 38570 39090 39089\nf 38571 38572 39091\nf 38571 39091 39090\nf 38572 38573 39092\nf 38572 39092 39091\nf 38573 38574 39093\nf 38573 39093 39092\nf 38574 38575 39094\nf 38574 39094 39093\nf 38575 38576 39095\nf 38575 39095 39094\nf 38576 38577 39096\nf 38576 39096 39095\nf 38577 38578 39097\nf 38577 39097 39096\nf 38578 38579 39098\nf 38578 39098 39097\nf 38579 38580 39099\nf 38579 39099 39098\nf 38580 38581 39100\nf 38580 39100 39099\nf 38581 38582 39101\nf 38581 39101 39100\nf 38582 38583 39102\nf 38582 39102 39101\nf 38583 38584 39103\nf 38583 39103 39102\nf 38584 38585 39104\nf 38584 39104 39103\nf 38585 38586 39105\nf 38585 39105 39104\nf 38586 38587 39106\nf 38586 39106 39105\nf 38587 38588 39107\nf 38587 39107 39106\nf 38588 38589 39108\nf 38588 39108 39107\nf 38589 38590 39109\nf 38589 39109 39108\nf 38590 38591 39110\nf 38590 39110 39109\nf 38591 38592 39111\nf 38591 39111 39110\nf 38592 38593 39112\nf 38592 39112 39111\nf 38593 38594 39113\nf 38593 39113 39112\nf 38594 38595 39114\nf 38594 39114 39113\nf 38595 38596 39115\nf 38595 39115 39114\nf 38596 38597 39116\nf 38596 39116 39115\nf 38597 38598 39117\nf 38597 39117 39116\nf 38598 38599 39118\nf 38598 39118 39117\nf 38599 38600 39119\nf 38599 39119 39118\nf 38600 38601 39120\nf 38600 39120 39119\nf 38601 38602 39121\nf 38601 39121 39120\nf 38602 38603 39122\nf 38602 39122 39121\nf 38603 38604 39123\nf 38603 39123 39122\nf 38604 38605 39124\nf 38604 39124 39123\nf 38605 38606 39125\nf 38605 39125 39124\nf 38606 38607 39126\nf 38606 39126 39125\nf 38607 38608 39127\nf 38607 39127 39126\nf 38608 38609 39128\nf 38608 39128 39127\nf 38609 38610 39129\nf 38609 39129 39128\nf 38610 38611 39130\nf 38610 39130 39129\nf 38611 38612 39131\nf 38611 39131 39130\nf 38612 38613 39132\nf 38612 39132 39131\nf 38613 38614 39133\nf 38613 39133 39132\nf 38614 38615 39134\nf 38614 39134 39133\nf 38615 38616 39135\nf 38615 39135 39134\nf 38616 38617 39136\nf 38616 39136 39135\nf 38617 38618 39137\nf 38617 39137 39136\nf 38618 38619 39138\nf 38618 39138 39137\nf 38619 38620 39139\nf 38619 39139 39138\nf 38620 38621 39140\nf 38620 39140 39139\nf 38621 38622 39141\nf 38621 39141 39140\nf 38622 38623 39142\nf 38622 39142 39141\nf 38623 38624 39143\nf 38623 39143 39142\nf 38624 38625 39144\nf 38624 39144 39143\nf 38625 38626 39145\nf 38625 39145 39144\nf 38626 38627 39146\nf 38626 39146 39145\nf 38627 38628 39147\nf 38627 39147 39146\nf 38628 38629 39148\nf 38628 39148 39147\nf 38629 38630 39149\nf 38629 39149 39148\nf 38630 38631 39150\nf 38630 39150 39149\nf 38631 38632 39151\nf 38631 39151 39150\nf 38632 38633 39152\nf 38632 39152 39151\nf 38633 38634 39153\nf 38633 39153 39152\nf 38634 38635 39154\nf 38634 39154 39153\nf 38635 38636 39155\nf 38635 39155 39154\nf 38636 38637 39156\nf 38636 39156 39155\nf 38637 38638 39157\nf 38637 39157 39156\nf 38638 38639 39158\nf 38638 39158 39157\nf 38639 38640 39159\nf 38639 39159 39158\nf 38640 38641 39160\nf 38640 39160 39159\nf 38641 38642 39161\nf 38641 39161 39160\nf 38642 38644 39162\nf 38642 39162 39161\nf 38643 39163 38644\nf 38644 39163 39164\nf 38644 39164 39162\nf 38645 38647 39168\nf 38645 39168 39165\nf 38646 39080 39167\nf 38646 39167 38648\nf 38647 38650 39171\nf 38647 39171 39168\nf 38648 39167 39169\nf 38648 39169 39170\nf 38648 39170 38649\nf 38649 39170 38651\nf 38650 38652 39173\nf 38650 39173 39171\nf 38651 39170 39172\nf 38651 39172 38654\nf 38652 38653 39173\nf 38653 38655 39176\nf 38653 39174 39173\nf 38653 39176 39174\nf 38654 39172 39175\nf 38654 39175 38657\nf 38655 38656 39176\nf 38656 38662 39183\nf 38656 39177 39176\nf 38656 39183 39177\nf 38657 39175 39178\nf 38657 39178 39179\nf 38657 39179 38658\nf 38658 39179 38664\nf 38659 38754 39275\nf 38659 39180 39181\nf 38659 39181 38660\nf 38659 39275 39180\nf 38660 39181 39182\nf 38660 39182 38661\nf 38661 39182 39184\nf 38661 39184 38663\nf 38662 38663 39183\nf 38663 39184 39183\nf 38664 39179 39185\nf 38664 39185 39186\nf 38664 39186 38665\nf 38665 39186 39187\nf 38665 39187 38666\nf 38666 39187 38756\nf 38667 38760 39282\nf 38667 39188 39189\nf 38667 39189 38668\nf 38667 39282 39188\nf 38668 39189 39190\nf 38668 39190 38669\nf 38669 39190 39191\nf 38669 39191 38670\nf 38670 39191 39192\nf 38670 39192 38671\nf 38671 39192 39193\nf 38671 39193 38672\nf 38672 39193 39194\nf 38672 39194 38673\nf 38673 39194 39195\nf 38673 39195 38674\nf 38674 39195 39196\nf 38674 39196 38675\nf 38675 39196 39197\nf 38675 39197 38676\nf 38676 39197 39198\nf 38676 39198 38677\nf 38677 39198 39199\nf 38677 39199 38678\nf 38678 39199 39200\nf 38678 39200 38679\nf 38679 39200 39201\nf 38679 39201 38680\nf 38680 39201 39202\nf 38680 39202 38681\nf 38681 39202 39203\nf 38681 39203 38682\nf 38682 39203 39204\nf 38682 39204 38683\nf 38683 39204 39205\nf 38683 39205 38684\nf 38684 39205 39206\nf 38684 39206 38685\nf 38685 39206 39207\nf 38685 39207 38686\nf 38686 39207 39208\nf 38686 39208 38687\nf 38687 39208 39209\nf 38687 39209 38688\nf 38688 39209 39210\nf 38688 39210 38689\nf 38689 39210 39211\nf 38689 39211 38690\nf 38690 39211 39212\nf 38690 39212 38691\nf 38691 39212 39213\nf 38691 39213 38692\nf 38692 39213 39214\nf 38692 39214 38693\nf 38693 39214 39215\nf 38693 39215 38694\nf 38694 39215 39216\nf 38694 39216 38695\nf 38695 39216 39217\nf 38695 39217 38696\nf 38696 39217 39218\nf 38696 39218 38697\nf 38697 39218 39219\nf 38697 39219 38698\nf 38698 39219 39220\nf 38698 39220 38699\nf 38699 39220 39221\nf 38699 39221 38700\nf 38700 39221 39222\nf 38700 39222 38701\nf 38701 39222 39223\nf 38701 39223 38702\nf 38702 39223 39224\nf 38702 39224 38703\nf 38703 39224 39225\nf 38703 39225 38704\nf 38704 39225 39226\nf 38704 39226 38705\nf 38705 39226 39227\nf 38705 39227 38706\nf 38706 39227 39228\nf 38706 39228 38707\nf 38707 39228 39229\nf 38707 39229 38708\nf 38708 39229 39230\nf 38708 39230 38709\nf 38709 39230 39231\nf 38709 39231 38710\nf 38710 39231 39232\nf 38710 39232 38711\nf 38711 39232 39233\nf 38711 39233 38712\nf 38712 39233 39234\nf 38712 39234 38713\nf 38713 39234 39235\nf 38713 39235 38714\nf 38714 39235 39236\nf 38714 39236 38715\nf 38715 39236 39237\nf 38715 39237 38716\nf 38716 39237 39238\nf 38716 39238 38717\nf 38717 39238 39239\nf 38717 39239 38718\nf 38718 39239 39240\nf 38718 39240 38719\nf 38719 39240 39241\nf 38719 39241 38720\nf 38720 39241 39242\nf 38720 39242 38721\nf 38721 39242 39243\nf 38721 39243 38722\nf 38722 39243 39244\nf 38722 39244 38723\nf 38723 39244 39245\nf 38723 39245 38724\nf 38724 39245 39246\nf 38724 39246 38725\nf 38725 39246 39247\nf 38725 39247 38726\nf 38726 39247 39248\nf 38726 39248 38727\nf 38727 39248 39249\nf 38727 39249 38728\nf 38728 39249 39250\nf 38728 39250 38729\nf 38729 39250 39251\nf 38729 39251 38730\nf 38730 39251 39252\nf 38730 39252 38731\nf 38731 39252 39253\nf 38731 39253 38732\nf 38732 39253 39254\nf 38732 39254 38733\nf 38733 39254 39255\nf 38733 39255 38734\nf 38734 39255 39256\nf 38734 39256 38735\nf 38735 39256 39257\nf 38735 39257 38736\nf 38736 39257 39258\nf 38736 39258 38737\nf 38737 39258 39259\nf 38737 39259 38738\nf 38738 39259 39260\nf 38738 39260 38739\nf 38739 39260 39261\nf 38739 39261 38740\nf 38740 39261 39262\nf 38740 39262 38741\nf 38741 39262 39263\nf 38741 39263 38742\nf 38742 39263 39264\nf 38742 39264 38743\nf 38743 39264 39265\nf 38743 39265 38744\nf 38744 39265 39266\nf 38744 39266 38745\nf 38745 39266 39267\nf 38745 39267 38746\nf 38746 39267 39268\nf 38746 39268 38747\nf 38747 39268 39269\nf 38747 39269 38748\nf 38748 39269 39270\nf 38748 39270 38749\nf 38749 39270 39271\nf 38749 39271 38750\nf 38750 39271 39272\nf 38750 39272 38751\nf 38751 39272 39273\nf 38751 39273 38752\nf 38752 39273 39274\nf 38752 39274 38753\nf 38753 39274 39276\nf 38753 39276 38755\nf 38754 38755 39275\nf 38755 39276 39275\nf 38756 39187 39278\nf 38756 39278 39279\nf 38756 39279 38757\nf 38757 39279 39280\nf 38757 39280 38758\nf 38758 39280 39281\nf 38758 39281 38759\nf 38759 39281 39283\nf 38759 39283 38761\nf 38760 38761 39282\nf 38761 39283 39282\nf 38762 38763 39284\nf 38762 38767 38765\nf 38762 39284 39287\nf 38762 39287 38767\nf 38763 38764 39284\nf 38764 38768 39285\nf 38764 39285 39284\nf 38765 38767 38766\nf 38766 38767 39288\nf 38766 39286 39291\nf 38766 39288 39286\nf 38766 39291 38770\nf 38767 39287 39288\nf 38768 38769 39290\nf 38768 39289 39285\nf 38768 39290 39289\nf 38769 38772 39290\nf 38770 39291 38771\nf 38771 39291 39292\nf 38771 39292 39294\nf 38771 39294 38773\nf 38772 38774 39295\nf 38772 39293 39290\nf 38772 39295 39293\nf 38773 39294 38776\nf 38774 38775 39296\nf 38774 39296 39295\nf 38775 38777 39296\nf 38776 39294 39298\nf 38776 39298 38778\nf 38777 38779 39301\nf 38777 39299 39296\nf 38777 39301 39299\nf 38778 39298 39300\nf 38778 39300 38780\nf 38779 38781 39303\nf 38779 39303 39301\nf 38780 39300 39302\nf 38780 39302 38782\nf 38781 38783 39305\nf 38781 39305 39303\nf 38782 39302 39304\nf 38782 39304 38784\nf 38783 38785 39307\nf 38783 39307 39305\nf 38784 39304 39306\nf 38784 39306 38786\nf 38785 38787 39309\nf 38785 39309 39307\nf 38786 39306 39308\nf 38786 39308 38788\nf 38787 38789 39311\nf 38787 39311 39309\nf 38788 39308 39310\nf 38788 39310 38790\nf 38789 38791 39313\nf 38789 39313 39311\nf 38790 39310 39312\nf 38790 39312 38792\nf 38791 38793 39315\nf 38791 39315 39313\nf 38792 39312 39314\nf 38792 39314 38794\nf 38793 38795 39317\nf 38793 39317 39315\nf 38794 39314 39316\nf 38794 39316 38796\nf 38795 38798 39320\nf 38795 39320 39317\nf 38796 39316 39318\nf 38796 39318 39319\nf 38796 39319 38797\nf 38797 39319 38799\nf 38798 38800 39322\nf 38798 39322 39320\nf 38799 39319 39321\nf 38799 39321 38801\nf 38800 38802 39324\nf 38800 39324 39322\nf 38801 39321 39323\nf 38801 39323 38804\nf 38802 38803 39324\nf 38803 38805 39327\nf 38803 39325 39324\nf 38803 39327 39325\nf 38804 39323 39326\nf 38804 39326 38806\nf 38805 38807 39329\nf 38805 39329 39327\nf 38806 39326 39328\nf 38806 39328 38808\nf 38807 38809 39331\nf 38807 39331 39329\nf 38808 39328 39330\nf 38808 39330 38810\nf 38809 38811 39331\nf 38810 39330 39333\nf 38810 39333 38814\nf 38811 38812 38813\nf 38811 38813 39331\nf 38812 38815 39334\nf 38812 39334 38813\nf 38813 39332 39331\nf 38813 39334 39332\nf 38814 39333 39335\nf 38814 39335 38816\nf 38815 38817 39339\nf 38815 39336 39334\nf 38815 39339 39336\nf 38816 39335 39337\nf 38816 39337 38818\nf 38817 38819 39342\nf 38817 39342 39339\nf 38818 39337 39340\nf 38818 39340 38820\nf 38819 38821 39342\nf 38820 39340 39345\nf 38820 39345 38823\nf 38821 38822 39342\nf 38821 38824 38825\nf 38821 38825 38822\nf 38822 38825 39347\nf 38822 39343 39342\nf 38822 39347 39343\nf 38823 39345 39348\nf 38823 39348 38826\nf 38824 38827 38828\nf 38824 38828 38825\nf 38825 38828 39350\nf 38825 39350 39347\nf 38826 39348 39351\nf 38826 39351 38829\nf 38827 38830 38831\nf 38827 38831 38828\nf 38828 38831 39352\nf 38828 39352 39350\nf 38829 39351 39353\nf 38829 39353 38832\nf 38830 38833 39357\nf 38830 39355 38831\nf 38830 39357 39355\nf 38831 39354 39352\nf 38831 39355 39354\nf 38832 39353 39356\nf 38832 39356 38834\nf 38833 38835 39360\nf 38833 39360 39357\nf 38834 39356 39359\nf 38834 39359 38836\nf 38835 38837 39363\nf 38835 39363 39360\nf 38836 39359 39362\nf 38836 39362 38838\nf 38837 38839 39366\nf 38837 39366 39363\nf 38838 39362 39365\nf 38838 39365 38840\nf 38839 38842 39369\nf 38839 39369 39366\nf 38840 39365 39368\nf 38840 39368 39370\nf 38840 39370 38841\nf 38841 38844 38843\nf 38841 39370 38844\nf 38842 38845 39372\nf 38842 39372 39369\nf 38843 38844 39373\nf 38843 39373 38846\nf 38844 39370 39371\nf 38844 39371 39373\nf 38845 38847 39374\nf 38845 39374 39372\nf 38846 39373 38848\nf 38847 38849 39376\nf 38847 39376 39374\nf 38848 39373 39375\nf 38848 39375 38850\nf 38849 38851 39378\nf 38849 39378 39376\nf 38850 39375 39377\nf 38850 39377 38852\nf 38851 38853 39380\nf 38851 39380 39378\nf 38852 39377 39379\nf 38852 39379 38854\nf 38853 38855 39382\nf 38853 39382 39380\nf 38854 39379 39381\nf 38854 39381 38856\nf 38855 38857 39384\nf 38855 39384 39382\nf 38856 39381 39383\nf 38856 39383 38858\nf 38857 38859 39386\nf 38857 39386 39384\nf 38858 39383 39385\nf 38858 39385 38860\nf 38859 38861 39388\nf 38859 39388 39386\nf 38860 39385 39387\nf 38860 39387 38862\nf 38861 38863 39390\nf 38861 39390 39388\nf 38862 39387 39389\nf 38862 39389 38864\nf 38863 38865 39392\nf 38863 39392 39390\nf 38864 39389 39391\nf 38864 39391 38866\nf 38865 38867 39394\nf 38865 39394 39392\nf 38866 39391 39393\nf 38866 39393 38868\nf 38867 38869 39396\nf 38867 39396 39394\nf 38868 39393 39395\nf 38868 39395 38870\nf 38869 38871 39396\nf 38870 39395 39398\nf 38870 39398 38874\nf 38871 38872 38873\nf 38871 38873 39396\nf 38872 38875 39399\nf 38872 39399 38873\nf 38873 39397 39396\nf 38873 39399 39397\nf 38874 39398 39400\nf 38874 39400 38876\nf 38875 38877 39403\nf 38875 39401 39399\nf 38875 39403 39401\nf 38876 39400 39402\nf 38876 39402 38878\nf 38877 38879 39405\nf 38877 39405 39403\nf 38878 39402 39404\nf 38878 39404 38880\nf 38879 38881 39407\nf 38879 39407 39405\nf 38880 39404 39406\nf 38880 39406 38882\nf 38881 38883 39409\nf 38881 39409 39407\nf 38882 39406 39408\nf 38882 39408 38884\nf 38883 38885 39411\nf 38883 39411 39409\nf 38884 39408 39410\nf 38884 39410 38886\nf 38885 38887 39413\nf 38885 39413 39411\nf 38886 39410 39412\nf 38886 39412 38888\nf 38887 38889 39415\nf 38887 39415 39413\nf 38888 39412 39414\nf 38888 39414 38891\nf 38889 38890 39415\nf 38890 38892 39419\nf 38890 39416 39415\nf 38890 39419 39416\nf 38891 39414 39418\nf 38891 39418 38894\nf 38892 38893 39419\nf 38893 38896 39423\nf 38893 39420 39419\nf 38893 39423 39420\nf 38894 39418 39421\nf 38894 39421 39422\nf 38894 39422 38895\nf 38895 39422 38897\nf 38896 38898 39425\nf 38896 39425 39423\nf 38897 39422 39424\nf 38897 39424 39426\nf 38897 39426 38899\nf 38898 38899 39425\nf 38899 39426 39425\nf 38900 38903 38904\nf 38900 38904 38901\nf 38901 38904 38902\nf 38902 38904 39428\nf 38902 38906 38905\nf 38902 39428 38906\nf 38903 38907 39431\nf 38903 39428 38904\nf 38903 39431 39428\nf 38905 38906 39432\nf 38905 39432 38908\nf 38906 39428 39429\nf 38906 39429 39430\nf 38906 39430 39432\nf 38907 38910 39433\nf 38907 39433 39431\nf 38908 39432 39434\nf 38908 39434 38909\nf 38909 38912 38911\nf 38909 39434 38912\nf 38910 38913 39436\nf 38910 39436 39433\nf 38911 38912 39438\nf 38911 39438 38915\nf 38912 39434 39435\nf 38912 39435 39438\nf 38913 38914 39437\nf 38913 39437 39436\nf 38914 38916 39437\nf 38915 39438 38917\nf 38916 38918 39441\nf 38916 39439 39437\nf 38916 39441 39439\nf 38917 39438 39440\nf 38917 39440 38919\nf 38918 38920 39443\nf 38918 39443 39441\nf 38919 39440 39442\nf 38919 39442 38921\nf 38920 38923 39446\nf 38920 39446 39443\nf 38921 39442 39444\nf 38921 39444 38922\nf 38922 39444 39445\nf 38922 39445 39447\nf 38922 39447 38924\nf 38923 38925 39448\nf 38923 39448 39446\nf 38924 39447 38926\nf 38925 38927 39450\nf 38925 39450 39448\nf 38926 39447 39449\nf 38926 39449 38928\nf 38927 38929 39452\nf 38927 39452 39450\nf 38928 39449 39451\nf 38928 39451 38930\nf 38929 38931 39454\nf 38929 39454 39452\nf 38930 39451 39453\nf 38930 39453 38932\nf 38931 38933 39456\nf 38931 39456 39454\nf 38932 39453 39455\nf 38932 39455 38934\nf 38933 38936 39459\nf 38933 39459 39456\nf 38934 39455 39457\nf 38934 39457 38935\nf 38935 39457 39458\nf 38935 39458 39460\nf 38935 39460 38937\nf 38936 38938 39461\nf 38936 39461 39459\nf 38937 39460 38939\nf 38938 38940 39463\nf 38938 39463 39461\nf 38939 39460 39462\nf 38939 39462 38942\nf 38940 38941 39463\nf 38941 38943 39466\nf 38941 39464 39463\nf 38941 39466 39464\nf 38942 39462 39465\nf 38942 39465 38944\nf 38943 38945 39468\nf 38943 39468 39466\nf 38944 39465 39467\nf 38944 39467 38947\nf 38945 38946 39468\nf 38946 38948 39471\nf 38946 39469 39468\nf 38946 39471 39469\nf 38947 39467 39470\nf 38947 39470 38949\nf 38948 38950 39474\nf 38948 39474 39471\nf 38949 39470 39473\nf 38949 39473 38952\nf 38950 38951 39474\nf 38951 38954 39478\nf 38951 39475 39474\nf 38951 39478 39475\nf 38952 39473 39476\nf 38952 39476 39477\nf 38952 39477 38953\nf 38953 39477 38956\nf 38954 38955 39478\nf 38955 38957 39481\nf 38955 39479 39478\nf 38955 39481 39479\nf 38956 39477 39480\nf 38956 39480 39482\nf 38956 39482 38958\nf 38957 38958 39481\nf 38958 39482 39481\nf 38959 38960 39485\nf 38959 39485 39494\nf 38959 39494 38972\nf 38960 38961 39486\nf 38960 39486 39485\nf 38961 38962 39488\nf 38961 39488 39486\nf 38962 38963 39487\nf 38962 38964 38963\nf 38962 39487 39488\nf 38963 38964 38965\nf 38963 38965 39484\nf 38963 39483 39487\nf 38963 39484 39483\nf 38964 38966 39490\nf 38964 39490 38965\nf 38965 39489 39484\nf 38965 39490 39489\nf 38966 38967 39490\nf 38967 38968 39491\nf 38967 39491 39490\nf 38968 38974 38975\nf 38968 38975 39491\nf 38969 38970 39492\nf 38969 38979 38977\nf 38969 39492 39501\nf 38969 39501 38979\nf 38970 38971 39492\nf 38971 38973 39493\nf 38971 39493 39492\nf 38972 39494 38973\nf 38973 39494 39495\nf 38973 39495 39493\nf 38974 38976 39498\nf 38974 39498 38975\nf 38975 39497 39491\nf 38975 39498 39497\nf 38976 38980 39499\nf 38976 39499 39498\nf 38977 38979 38978\nf 38978 38979 39502\nf 38978 39500 39505\nf 38978 39502 39500\nf 38978 39505 38982\nf 38979 39501 39502\nf 38980 38981 39504\nf 38980 39503 39499\nf 38980 39504 39503\nf 38981 38983 39504\nf 38982 39505 38985\nf 38983 38984 39507\nf 38983 39506 39504\nf 38983 39507 39506\nf 38984 38988 39507\nf 38985 39505 39508\nf 38985 39508 39509\nf 38985 39509 38986\nf 38986 39509 39510\nf 38986 39510 38987\nf 38987 39510 38989\nf 38988 38992 39515\nf 38988 39511 39507\nf 38988 39515 39511\nf 38989 39510 39512\nf 38989 39512 39513\nf 38989 39513 38990\nf 38990 39513 39514\nf 38990 39514 38991\nf 38991 39514 38993\nf 38992 38996 39519\nf 38992 39519 39515\nf 38993 39514 39516\nf 38993 39516 39517\nf 38993 39517 38994\nf 38994 39517 39518\nf 38994 39518 38995\nf 38995 39518 38997\nf 38996 39001 39524\nf 38996 39524 39519\nf 38997 39518 39520\nf 38997 39520 39522\nf 38997 39522 38998\nf 38998 39522 39523\nf 38998 39523 38999\nf 38999 39523 39000\nf 39000 39004 39003\nf 39000 39523 39004\nf 39001 39002 39524\nf 39002 39010 39533\nf 39002 39525 39524\nf 39002 39533 39525\nf 39003 39004 39527\nf 39003 39527 39005\nf 39004 39523 39526\nf 39004 39526 39527\nf 39005 39527 39528\nf 39005 39528 39529\nf 39005 39529 39006\nf 39006 39529 39530\nf 39006 39530 39007\nf 39007 39530 39531\nf 39007 39531 39008\nf 39008 39531 39532\nf 39008 39532 39009\nf 39009 39532 39534\nf 39009 39534 39011\nf 39010 39011 39533\nf 39011 39534 39533\nf 39012 39013 39535\nf 39012 39535 39543\nf 39012 39543 39020\nf 39013 39014 39536\nf 39013 39536 39535\nf 39014 39021 39537\nf 39014 39537 39536\nf 39015 39016 39538\nf 39015 39538 39545\nf 39015 39545 39022\nf 39016 39017 39539\nf 39016 39539 39538\nf 39017 39018 39540\nf 39017 39540 39539\nf 39018 39019 39541\nf 39018 39541 39540\nf 39019 39023 39542\nf 39019 39542 39541\nf 39020 39543 39025\nf 39021 39027 39550\nf 39021 39544 39537\nf 39021 39550 39544\nf 39022 39545 39029\nf 39023 39024 39547\nf 39023 39546 39542\nf 39023 39547 39546\nf 39024 39031 39547\nf 39025 39543 39548\nf 39025 39548 39026\nf 39026 39548 39549\nf 39026 39549 39555\nf 39026 39555 39032\nf 39027 39028 39551\nf 39027 39551 39550\nf 39028 39033 39551\nf 39029 39545 39552\nf 39029 39552 39030\nf 39030 39552 39553\nf 39030 39553 39557\nf 39030 39557 39034\nf 39031 39035 39559\nf 39031 39554 39547\nf 39031 39559 39554\nf 39032 39555 39036\nf 39033 39037 39561\nf 39033 39556 39551\nf 39033 39561 39556\nf 39034 39557 39038\nf 39035 39039 39563\nf 39035 39563 39559\nf 39036 39555 39560\nf 39036 39560 39040\nf 39037 39041 39566\nf 39037 39566 39561\nf 39038 39557 39562\nf 39038 39562 39042\nf 39039 39043 39563\nf 39040 39560 39565\nf 39040 39565 39046\nf 39041 39047 39570\nf 39041 39570 39566\nf 39042 39562 39567\nf 39042 39567 39048\nf 39043 39044 39045\nf 39043 39045 39564\nf 39043 39564 39563\nf 39044 39049 39045\nf 39045 39049 39568\nf 39045 39568 39564\nf 39046 39565 39569\nf 39046 39569 39050\nf 39047 39051 39574\nf 39047 39574 39570\nf 39048 39567 39571\nf 39048 39571 39052\nf 39049 39053 39576\nf 39049 39572 39568\nf 39049 39576 39572\nf 39050 39569 39573\nf 39050 39573 39054\nf 39051 39055 39578\nf 39051 39578 39574\nf 39052 39571 39575\nf 39052 39575 39056\nf 39053 39057 39580\nf 39053 39580 39576\nf 39054 39573 39577\nf 39054 39577 39058\nf 39055 39059 39582\nf 39055 39582 39578\nf 39056 39575 39579\nf 39056 39579 39060\nf 39057 39061 39584\nf 39057 39584 39580\nf 39058 39577 39581\nf 39058 39581 39062\nf 39059 39063 39586\nf 39059 39586 39582\nf 39060 39579 39583\nf 39060 39583 39065\nf 39061 39067 39590\nf 39061 39590 39584\nf 39062 39581 39585\nf 39062 39585 39069\nf 39063 39064 39587\nf 39063 39587 39586\nf 39064 39070 39587\nf 39065 39583 39588\nf 39065 39588 39066\nf 39066 39588 39589\nf 39066 39589 39598\nf 39066 39598 39076\nf 39067 39068 39600\nf 39067 39600 39590\nf 39068 39078 39079\nf 39068 39079 39600\nf 39069 39585 39591\nf 39069 39591 39080\nf 39070 39071 39593\nf 39070 39592 39587\nf 39070 39593 39592\nf 39071 39072 39593\nf 39072 39073 39594\nf 39072 39594 39593\nf 39073 39074 39595\nf 39073 39595 39594\nf 39074 39081 39596\nf 39074 39596 39595\nf 39075 39077 39597\nf 39075 39597 39684\nf 39075 39684 39163\nf 39076 39598 39077\nf 39077 39598 39599\nf 39077 39599 39597\nf 39078 39165 39079\nf 39079 39165 39166\nf 39079 39166 39686\nf 39079 39686 39600\nf 39080 39591 39601\nf 39080 39601 39167\nf 39081 39082 39603\nf 39081 39602 39596\nf 39081 39603 39602\nf 39082 39083 39603\nf 39083 39084 39604\nf 39083 39604 39603\nf 39084 39085 39605\nf 39084 39605 39604\nf 39085 39086 39606\nf 39085 39606 39605\nf 39086 39087 39607\nf 39086 39607 39606\nf 39087 39088 39608\nf 39087 39608 39607\nf 39088 39089 39609\nf 39088 39609 39608\nf 39089 39090 39610\nf 39089 39610 39609\nf 39090 39091 39611\nf 39090 39611 39610\nf 39091 39092 39612\nf 39091 39612 39611\nf 39092 39093 39613\nf 39092 39613 39612\nf 39093 39094 39614\nf 39093 39614 39613\nf 39094 39095 39615\nf 39094 39615 39614\nf 39095 39096 39616\nf 39095 39616 39615\nf 39096 39097 39617\nf 39096 39617 39616\nf 39097 39098 39618\nf 39097 39618 39617\nf 39098 39099 39619\nf 39098 39619 39618\nf 39099 39100 39620\nf 39099 39620 39619\nf 39100 39101 39621\nf 39100 39621 39620\nf 39101 39102 39622\nf 39101 39622 39621\nf 39102 39103 39623\nf 39102 39623 39622\nf 39103 39104 39624\nf 39103 39624 39623\nf 39104 39105 39625\nf 39104 39625 39624\nf 39105 39106 39626\nf 39105 39626 39625\nf 39106 39107 39627\nf 39106 39627 39626\nf 39107 39108 39628\nf 39107 39628 39627\nf 39108 39109 39629\nf 39108 39629 39628\nf 39109 39110 39630\nf 39109 39630 39629\nf 39110 39111 39631\nf 39110 39631 39630\nf 39111 39112 39632\nf 39111 39632 39631\nf 39112 39113 39633\nf 39112 39633 39632\nf 39113 39114 39634\nf 39113 39634 39633\nf 39114 39115 39635\nf 39114 39635 39634\nf 39115 39116 39636\nf 39115 39636 39635\nf 39116 39117 39637\nf 39116 39637 39636\nf 39117 39118 39638\nf 39117 39638 39637\nf 39118 39119 39639\nf 39118 39639 39638\nf 39119 39120 39640\nf 39119 39640 39639\nf 39120 39121 39641\nf 39120 39641 39640\nf 39121 39122 39642\nf 39121 39642 39641\nf 39122 39123 39643\nf 39122 39643 39642\nf 39123 39124 39644\nf 39123 39644 39643\nf 39124 39125 39645\nf 39124 39645 39644\nf 39125 39126 39646\nf 39125 39646 39645\nf 39126 39127 39647\nf 39126 39647 39646\nf 39127 39128 39648\nf 39127 39648 39647\nf 39128 39129 39649\nf 39128 39649 39648\nf 39129 39130 39650\nf 39129 39650 39649\nf 39130 39131 39651\nf 39130 39651 39650\nf 39131 39132 39652\nf 39131 39652 39651\nf 39132 39133 39653\nf 39132 39653 39652\nf 39133 39134 39654\nf 39133 39654 39653\nf 39134 39135 39655\nf 39134 39655 39654\nf 39135 39136 39656\nf 39135 39656 39655\nf 39136 39137 39657\nf 39136 39657 39656\nf 39137 39138 39658\nf 39137 39658 39657\nf 39138 39139 39659\nf 39138 39659 39658\nf 39139 39140 39660\nf 39139 39660 39659\nf 39140 39141 39661\nf 39140 39661 39660\nf 39141 39142 39662\nf 39141 39662 39661\nf 39142 39143 39663\nf 39142 39663 39662\nf 39143 39144 39664\nf 39143 39664 39663\nf 39144 39145 39665\nf 39144 39665 39664\nf 39145 39146 39666\nf 39145 39666 39665\nf 39146 39147 39667\nf 39146 39667 39666\nf 39147 39148 39668\nf 39147 39668 39667\nf 39148 39149 39669\nf 39148 39669 39668\nf 39149 39150 39670\nf 39149 39670 39669\nf 39150 39151 39671\nf 39150 39671 39670\nf 39151 39152 39672\nf 39151 39672 39671\nf 39152 39153 39673\nf 39152 39673 39672\nf 39153 39154 39674\nf 39153 39674 39673\nf 39154 39155 39675\nf 39154 39675 39674\nf 39155 39156 39676\nf 39155 39676 39675\nf 39156 39157 39677\nf 39156 39677 39676\nf 39157 39158 39678\nf 39157 39678 39677\nf 39158 39159 39679\nf 39158 39679 39678\nf 39159 39160 39680\nf 39159 39680 39679\nf 39160 39161 39681\nf 39160 39681 39680\nf 39161 39162 39682\nf 39161 39682 39681\nf 39162 39164 39683\nf 39162 39683 39682\nf 39163 39684 39164\nf 39164 39684 39685\nf 39164 39685 39683\nf 39165 39168 39689\nf 39165 39689 39166\nf 39166 39687 39686\nf 39166 39689 39687\nf 39167 39601 39688\nf 39167 39688 39169\nf 39168 39171 39692\nf 39168 39692 39689\nf 39169 39688 39690\nf 39169 39690 39691\nf 39169 39691 39170\nf 39170 39691 39172\nf 39171 39173 39694\nf 39171 39694 39692\nf 39172 39691 39693\nf 39172 39693 39175\nf 39173 39174 39694\nf 39174 39176 39697\nf 39174 39695 39694\nf 39174 39697 39695\nf 39175 39693 39696\nf 39175 39696 39178\nf 39176 39177 39697\nf 39177 39183 39705\nf 39177 39698 39697\nf 39177 39705 39698\nf 39178 39696 39699\nf 39178 39699 39700\nf 39178 39700 39179\nf 39179 39700 39185\nf 39180 39275 39277\nf 39180 39277 39701\nf 39180 39701 39702\nf 39180 39702 39703\nf 39180 39703 39181\nf 39181 39703 39704\nf 39181 39704 39182\nf 39182 39704 39706\nf 39182 39706 39184\nf 39183 39184 39705\nf 39184 39706 39705\nf 39185 39700 39707\nf 39185 39707 39708\nf 39185 39708 39186\nf 39186 39708 39709\nf 39186 39709 39187\nf 39187 39709 39278\nf 39188 39282 39802\nf 39188 39710 39711\nf 39188 39711 39189\nf 39188 39802 39710\nf 39189 39711 39712\nf 39189 39712 39190\nf 39190 39712 39713\nf 39190 39713 39191\nf 39191 39713 39714\nf 39191 39714 39192\nf 39192 39714 39715\nf 39192 39715 39193\nf 39193 39715 39716\nf 39193 39716 39194\nf 39194 39716 39717\nf 39194 39717 39195\nf 39195 39717 39718\nf 39195 39718 39196\nf 39196 39718 39719\nf 39196 39719 39197\nf 39197 39719 39720\nf 39197 39720 39198\nf 39198 39720 39721\nf 39198 39721 39199\nf 39199 39721 39722\nf 39199 39722 39200\nf 39200 39722 39723\nf 39200 39723 39201\nf 39201 39723 39724\nf 39201 39724 39202\nf 39202 39724 39725\nf 39202 39725 39203\nf 39203 39725 39726\nf 39203 39726 39204\nf 39204 39726 39727\nf 39204 39727 39205\nf 39205 39727 39728\nf 39205 39728 39206\nf 39206 39728 39729\nf 39206 39729 39207\nf 39207 39729 39730\nf 39207 39730 39208\nf 39208 39730 39731\nf 39208 39731 39209\nf 39209 39731 39732\nf 39209 39732 39210\nf 39210 39732 39733\nf 39210 39733 39211\nf 39211 39733 39734\nf 39211 39734 39212\nf 39212 39734 39735\nf 39212 39735 39213\nf 39213 39735 39736\nf 39213 39736 39214\nf 39214 39736 39737\nf 39214 39737 39215\nf 39215 39737 39738\nf 39215 39738 39216\nf 39216 39738 39739\nf 39216 39739 39217\nf 39217 39739 39740\nf 39217 39740 39218\nf 39218 39740 39741\nf 39218 39741 39219\nf 39219 39741 39742\nf 39219 39742 39220\nf 39220 39742 39743\nf 39220 39743 39221\nf 39221 39743 39744\nf 39221 39744 39222\nf 39222 39744 39745\nf 39222 39745 39223\nf 39223 39745 39746\nf 39223 39746 39224\nf 39224 39746 39747\nf 39224 39747 39225\nf 39225 39747 39748\nf 39225 39748 39226\nf 39226 39748 39749\nf 39226 39749 39227\nf 39227 39749 39750\nf 39227 39750 39228\nf 39228 39750 39751\nf 39228 39751 39229\nf 39229 39751 39752\nf 39229 39752 39230\nf 39230 39752 39753\nf 39230 39753 39231\nf 39231 39753 39754\nf 39231 39754 39232\nf 39232 39754 39755\nf 39232 39755 39233\nf 39233 39755 39756\nf 39233 39756 39234\nf 39234 39756 39757\nf 39234 39757 39235\nf 39235 39757 39758\nf 39235 39758 39236\nf 39236 39758 39759\nf 39236 39759 39237\nf 39237 39759 39760\nf 39237 39760 39238\nf 39238 39760 39761\nf 39238 39761 39239\nf 39239 39761 39762\nf 39239 39762 39240\nf 39240 39762 39763\nf 39240 39763 39241\nf 39241 39763 39764\nf 39241 39764 39242\nf 39242 39764 39765\nf 39242 39765 39243\nf 39243 39765 39766\nf 39243 39766 39244\nf 39244 39766 39767\nf 39244 39767 39245\nf 39245 39767 39768\nf 39245 39768 39246\nf 39246 39768 39769\nf 39246 39769 39247\nf 39247 39769 39770\nf 39247 39770 39248\nf 39248 39770 39771\nf 39248 39771 39249\nf 39249 39771 39772\nf 39249 39772 39250\nf 39250 39772 39773\nf 39250 39773 39251\nf 39251 39773 39774\nf 39251 39774 39252\nf 39252 39774 39775\nf 39252 39775 39253\nf 39253 39775 39776\nf 39253 39776 39254\nf 39254 39776 39777\nf 39254 39777 39255\nf 39255 39777 39778\nf 39255 39778 39256\nf 39256 39778 39779\nf 39256 39779 39257\nf 39257 39779 39780\nf 39257 39780 39258\nf 39258 39780 39781\nf 39258 39781 39259\nf 39259 39781 39782\nf 39259 39782 39260\nf 39260 39782 39783\nf 39260 39783 39261\nf 39261 39783 39784\nf 39261 39784 39262\nf 39262 39784 39785\nf 39262 39785 39263\nf 39263 39785 39786\nf 39263 39786 39264\nf 39264 39786 39787\nf 39264 39787 39265\nf 39265 39787 39788\nf 39265 39788 39266\nf 39266 39788 39789\nf 39266 39789 39267\nf 39267 39789 39790\nf 39267 39790 39268\nf 39268 39790 39791\nf 39268 39791 39269\nf 39269 39791 39792\nf 39269 39792 39270\nf 39270 39792 39793\nf 39270 39793 39271\nf 39271 39793 39794\nf 39271 39794 39272\nf 39272 39794 39795\nf 39272 39795 39273\nf 39273 39795 39797\nf 39273 39797 39274\nf 39274 39797 39276\nf 39275 39276 39277\nf 39276 39796 39277\nf 39276 39797 39796\nf 39277 39796 39701\nf 39278 39709 39798\nf 39278 39798 39799\nf 39278 39799 39279\nf 39279 39799 39800\nf 39279 39800 39280\nf 39280 39800 39801\nf 39280 39801 39281\nf 39281 39801 39803\nf 39281 39803 39283\nf 39282 39283 39802\nf 39283 39803 39802\nf 39284 39285 39804\nf 39284 39804 39807\nf 39284 39807 39287\nf 39285 39289 39805\nf 39285 39805 39804\nf 39286 39288 39806\nf 39286 39806 39812\nf 39286 39812 39291\nf 39287 39807 39288\nf 39288 39807 39808\nf 39288 39808 39806\nf 39289 39290 39811\nf 39289 39810 39805\nf 39289 39811 39810\nf 39290 39293 39811\nf 39291 39812 39292\nf 39292 39812 39813\nf 39292 39813 39816\nf 39292 39816 39294\nf 39293 39295 39814\nf 39293 39814 39811\nf 39294 39816 39298\nf 39295 39296 39297\nf 39295 39297 39815\nf 39295 39815 39814\nf 39296 39299 39297\nf 39297 39299 39817\nf 39297 39817 39815\nf 39298 39816 39818\nf 39298 39818 39300\nf 39299 39301 39821\nf 39299 39819 39817\nf 39299 39821 39819\nf 39300 39818 39820\nf 39300 39820 39302\nf 39301 39303 39823\nf 39301 39823 39821\nf 39302 39820 39822\nf 39302 39822 39304\nf 39303 39305 39825\nf 39303 39825 39823\nf 39304 39822 39824\nf 39304 39824 39306\nf 39305 39307 39827\nf 39305 39827 39825\nf 39306 39824 39826\nf 39306 39826 39308\nf 39307 39309 39829\nf 39307 39829 39827\nf 39308 39826 39828\nf 39308 39828 39310\nf 39309 39311 39831\nf 39309 39831 39829\nf 39310 39828 39830\nf 39310 39830 39312\nf 39311 39313 39833\nf 39311 39833 39831\nf 39312 39830 39832\nf 39312 39832 39314\nf 39313 39315 39835\nf 39313 39835 39833\nf 39314 39832 39834\nf 39314 39834 39316\nf 39315 39317 39837\nf 39315 39837 39835\nf 39316 39834 39836\nf 39316 39836 39318\nf 39317 39320 39840\nf 39317 39840 39837\nf 39318 39836 39838\nf 39318 39838 39839\nf 39318 39839 39319\nf 39319 39839 39321\nf 39320 39322 39842\nf 39320 39842 39840\nf 39321 39839 39841\nf 39321 39841 39323\nf 39322 39324 39844\nf 39322 39844 39842\nf 39323 39841 39843\nf 39323 39843 39326\nf 39324 39325 39844\nf 39325 39327 39847\nf 39325 39845 39844\nf 39325 39847 39845\nf 39326 39843 39846\nf 39326 39846 39328\nf 39327 39329 39849\nf 39327 39849 39847\nf 39328 39846 39848\nf 39328 39848 39330\nf 39329 39331 39851\nf 39329 39851 39849\nf 39330 39848 39850\nf 39330 39850 39333\nf 39331 39332 39851\nf 39332 39334 39854\nf 39332 39852 39851\nf 39332 39854 39852\nf 39333 39850 39853\nf 39333 39853 39335\nf 39334 39336 39858\nf 39334 39858 39854\nf 39335 39853 39855\nf 39335 39855 39337\nf 39336 39339 39860\nf 39336 39860 39858\nf 39337 39338 39340\nf 39337 39855 39856\nf 39337 39856 39338\nf 39338 39341 39340\nf 39338 39856 39859\nf 39338 39859 39862\nf 39338 39862 39341\nf 39339 39342 39860\nf 39340 39341 39345\nf 39341 39346 39345\nf 39341 39862 39864\nf 39341 39864 39346\nf 39342 39343 39344\nf 39342 39344 39860\nf 39343 39347 39863\nf 39343 39863 39344\nf 39344 39861 39860\nf 39344 39863 39861\nf 39345 39346 39348\nf 39346 39349 39348\nf 39346 39864 39867\nf 39346 39867 39349\nf 39347 39350 39869\nf 39347 39865 39863\nf 39347 39869 39865\nf 39348 39349 39871\nf 39348 39871 39351\nf 39349 39867 39868\nf 39349 39868 39871\nf 39350 39352 39873\nf 39350 39873 39869\nf 39351 39871 39353\nf 39352 39354 39877\nf 39352 39877 39873\nf 39353 39871 39875\nf 39353 39875 39356\nf 39354 39355 39358\nf 39354 39358 39880\nf 39354 39880 39877\nf 39355 39357 39358\nf 39356 39875 39879\nf 39356 39879 39359\nf 39357 39360 39361\nf 39357 39361 39358\nf 39358 39361 39880\nf 39359 39879 39881\nf 39359 39881 39362\nf 39360 39363 39364\nf 39360 39364 39361\nf 39361 39364 39882\nf 39361 39882 39880\nf 39362 39881 39883\nf 39362 39883 39365\nf 39363 39366 39367\nf 39363 39367 39364\nf 39364 39367 39884\nf 39364 39884 39882\nf 39365 39883 39885\nf 39365 39885 39368\nf 39366 39369 39889\nf 39366 39887 39367\nf 39366 39889 39887\nf 39367 39886 39884\nf 39367 39887 39886\nf 39368 39885 39888\nf 39368 39888 39370\nf 39369 39372 39893\nf 39369 39893 39889\nf 39370 39888 39891\nf 39370 39891 39371\nf 39371 39891 39892\nf 39371 39892 39895\nf 39371 39895 39373\nf 39372 39374 39897\nf 39372 39897 39893\nf 39373 39895 39375\nf 39374 39376 39901\nf 39374 39901 39897\nf 39375 39895 39899\nf 39375 39899 39377\nf 39376 39378 39904\nf 39376 39904 39901\nf 39377 39899 39903\nf 39377 39903 39379\nf 39378 39380 39907\nf 39378 39907 39904\nf 39379 39903 39906\nf 39379 39906 39381\nf 39380 39382 39910\nf 39380 39910 39907\nf 39381 39906 39909\nf 39381 39909 39383\nf 39382 39384 39913\nf 39382 39913 39910\nf 39383 39909 39912\nf 39383 39912 39385\nf 39384 39386 39916\nf 39384 39916 39913\nf 39385 39912 39915\nf 39385 39915 39387\nf 39386 39388 39919\nf 39386 39919 39916\nf 39387 39915 39918\nf 39387 39918 39389\nf 39388 39390 39922\nf 39388 39922 39919\nf 39389 39918 39921\nf 39389 39921 39391\nf 39390 39392 39924\nf 39390 39924 39922\nf 39391 39921 39923\nf 39391 39923 39393\nf 39392 39394 39926\nf 39392 39926 39924\nf 39393 39923 39925\nf 39393 39925 39395\nf 39394 39396 39928\nf 39394 39928 39926\nf 39395 39925 39927\nf 39395 39927 39398\nf 39396 39397 39928\nf 39397 39399 39932\nf 39397 39929 39928\nf 39397 39932 39929\nf 39398 39927 39931\nf 39398 39931 39400\nf 39399 39401 39934\nf 39399 39934 39932\nf 39400 39931 39933\nf 39400 39933 39402\nf 39401 39403 39936\nf 39401 39936 39934\nf 39402 39933 39935\nf 39402 39935 39404\nf 39403 39405 39938\nf 39403 39938 39936\nf 39404 39935 39937\nf 39404 39937 39406\nf 39405 39407 39940\nf 39405 39940 39938\nf 39406 39937 39939\nf 39406 39939 39408\nf 39407 39409 39942\nf 39407 39942 39940\nf 39408 39939 39941\nf 39408 39941 39410\nf 39409 39411 39944\nf 39409 39944 39942\nf 39410 39941 39943\nf 39410 39943 39412\nf 39411 39413 39946\nf 39411 39946 39944\nf 39412 39943 39945\nf 39412 39945 39414\nf 39413 39415 39946\nf 39414 39945 39948\nf 39414 39948 39418\nf 39415 39416 39417\nf 39415 39417 39946\nf 39416 39419 39949\nf 39416 39949 39417\nf 39417 39947 39946\nf 39417 39949 39947\nf 39418 39948 39951\nf 39418 39951 39421\nf 39419 39420 39952\nf 39419 39952 39949\nf 39420 39423 39957\nf 39420 39953 39952\nf 39420 39957 39953\nf 39421 39951 39954\nf 39421 39954 39955\nf 39421 39955 39422\nf 39422 39955 39958\nf 39422 39958 39424\nf 39423 39425 39957\nf 39424 39427 39426\nf 39424 39958 39427\nf 39425 39426 39427\nf 39425 39427 39957\nf 39427 39958 39957\nf 39428 39431 39959\nf 39428 39959 39960\nf 39428 39960 39429\nf 39429 39960 39430\nf 39430 39960 39961\nf 39430 39961 39964\nf 39430 39964 39432\nf 39431 39433 39965\nf 39431 39962 39959\nf 39431 39965 39962\nf 39432 39964 39434\nf 39433 39436 39968\nf 39433 39968 39965\nf 39434 39964 39966\nf 39434 39966 39435\nf 39435 39966 39967\nf 39435 39967 39970\nf 39435 39970 39438\nf 39436 39437 39969\nf 39436 39969 39968\nf 39437 39439 39969\nf 39438 39970 39440\nf 39439 39441 39975\nf 39439 39972 39969\nf 39439 39975 39972\nf 39440 39970 39974\nf 39440 39974 39442\nf 39441 39443 39977\nf 39441 39977 39975\nf 39442 39974 39976\nf 39442 39976 39444\nf 39443 39446 39980\nf 39443 39980 39977\nf 39444 39976 39978\nf 39444 39978 39445\nf 39445 39978 39979\nf 39445 39979 39981\nf 39445 39981 39447\nf 39446 39448 39983\nf 39446 39983 39980\nf 39447 39981 39449\nf 39448 39450 39985\nf 39448 39985 39983\nf 39449 39981 39984\nf 39449 39984 39451\nf 39450 39452 39987\nf 39450 39987 39985\nf 39451 39984 39986\nf 39451 39986 39453\nf 39452 39454 39989\nf 39452 39989 39987\nf 39453 39986 39988\nf 39453 39988 39455\nf 39454 39456 39991\nf 39454 39991 39989\nf 39455 39988 39990\nf 39455 39990 39457\nf 39456 39459 39994\nf 39456 39994 39991\nf 39457 39990 39992\nf 39457 39992 39458\nf 39458 39992 39993\nf 39458 39993 39995\nf 39458 39995 39460\nf 39459 39461 39996\nf 39459 39996 39994\nf 39460 39995 39462\nf 39461 39463 39998\nf 39461 39998 39996\nf 39462 39995 39997\nf 39462 39997 39465\nf 39463 39464 39998\nf 39464 39466 40001\nf 39464 39999 39998\nf 39464 40001 39999\nf 39465 39997 40000\nf 39465 40000 39467\nf 39466 39468 40003\nf 39466 40003 40001\nf 39467 40000 40002\nf 39467 40002 39470\nf 39468 39469 40005\nf 39468 40005 40003\nf 39469 39471 39472\nf 39469 39472 40005\nf 39470 40002 40004\nf 39470 40004 39473\nf 39471 39474 40008\nf 39471 40008 39472\nf 39472 40006 40005\nf 39472 40008 40006\nf 39473 40004 40007\nf 39473 40007 39476\nf 39474 39475 40008\nf 39475 39478 40012\nf 39475 40009 40008\nf 39475 40012 40009\nf 39476 40007 40010\nf 39476 40010 40011\nf 39476 40011 39477\nf 39477 40011 39480\nf 39478 39479 40012\nf 39479 39481 40016\nf 39479 40013 40012\nf 39479 40016 40013\nf 39480 40011 40014\nf 39480 40014 40017\nf 39480 40017 39482\nf 39481 39482 40016\nf 39482 40017 40016\nf 39483 39484 40019\nf 39483 40019 40024\nf 39483 40024 39487\nf 39484 39489 40020\nf 39484 40020 40019\nf 39485 39486 40022\nf 39485 39496 39494\nf 39485 40021 39496\nf 39485 40022 40021\nf 39486 39488 40023\nf 39486 40023 40022\nf 39487 40024 39488\nf 39488 40024 40025\nf 39488 40025 40023\nf 39489 39490 40029\nf 39489 40027 40020\nf 39489 40029 40027\nf 39490 39491 40029\nf 39491 39497 40030\nf 39491 40030 40029\nf 39492 39493 40031\nf 39492 40031 40038\nf 39492 40038 39501\nf 39493 39495 40033\nf 39493 40033 40031\nf 39494 39496 39495\nf 39495 39496 40032\nf 39495 40032 40033\nf 39496 40021 40032\nf 39497 39498 40035\nf 39497 40034 40030\nf 39497 40035 40034\nf 39498 39499 40035\nf 39499 39503 40036\nf 39499 40036 40035\nf 39500 39502 40037\nf 39500 40037 40044\nf 39500 40044 39505\nf 39501 40038 39502\nf 39502 40038 40039\nf 39502 40039 40037\nf 39503 39504 40043\nf 39503 40041 40036\nf 39503 40043 40041\nf 39504 39506 40043\nf 39505 40044 39508\nf 39506 39507 40046\nf 39506 40045 40043\nf 39506 40046 40045\nf 39507 39511 40046\nf 39508 40044 40047\nf 39508 40047 40048\nf 39508 40048 39509\nf 39509 40048 40049\nf 39509 40049 39510\nf 39510 40049 39512\nf 39511 39515 40054\nf 39511 40050 40046\nf 39511 40054 40050\nf 39512 40049 40051\nf 39512 40051 40052\nf 39512 40052 39513\nf 39513 40052 40053\nf 39513 40053 39514\nf 39514 40053 39516\nf 39515 39519 40057\nf 39515 40057 40054\nf 39516 40053 40055\nf 39516 40055 40056\nf 39516 40056 39517\nf 39517 40056 39518\nf 39518 39521 39520\nf 39518 40056 39521\nf 39519 39524 40063\nf 39519 40063 40057\nf 39520 39521 40059\nf 39520 40059 39522\nf 39521 40056 40058\nf 39521 40058 40059\nf 39522 40059 40061\nf 39522 40061 40062\nf 39522 40062 39523\nf 39523 40062 39526\nf 39524 39525 40063\nf 39525 39533 40072\nf 39525 40064 40063\nf 39525 40072 40064\nf 39526 40062 40065\nf 39526 40065 40066\nf 39526 40066 39527\nf 39527 40066 40067\nf 39527 40067 39528\nf 39528 40067 40068\nf 39528 40068 39529\nf 39529 40068 40069\nf 39529 40069 39530\nf 39530 40069 40070\nf 39530 40070 39531\nf 39531 40070 40071\nf 39531 40071 39532\nf 39532 40071 40073\nf 39532 40073 39534\nf 39533 39534 40072\nf 39534 40073 40072\nf 39535 39536 40074\nf 39535 40074 40082\nf 39535 40082 39543\nf 39536 39537 40075\nf 39536 40075 40074\nf 39537 39544 40076\nf 39537 40076 40075\nf 39538 39539 40077\nf 39538 40077 40084\nf 39538 40084 39545\nf 39539 39540 40078\nf 39539 40078 40077\nf 39540 39541 40079\nf 39540 40079 40078\nf 39541 39542 40080\nf 39541 40080 40079\nf 39542 39546 40081\nf 39542 40081 40080\nf 39543 40082 39548\nf 39544 39550 40089\nf 39544 40083 40076\nf 39544 40089 40083\nf 39545 40084 39552\nf 39546 39547 40086\nf 39546 40085 40081\nf 39546 40086 40085\nf 39547 39554 40086\nf 39548 40082 40087\nf 39548 40087 39549\nf 39549 40087 40088\nf 39549 40088 40093\nf 39549 40093 39555\nf 39550 39551 40090\nf 39550 40090 40089\nf 39551 39556 40090\nf 39552 40084 40091\nf 39552 40091 40095\nf 39552 40095 39553\nf 39553 39558 39557\nf 39553 40095 39558\nf 39554 39559 40097\nf 39554 40092 40086\nf 39554 40097 40092\nf 39555 40093 39560\nf 39556 39561 40099\nf 39556 40094 40090\nf 39556 40099 40094\nf 39557 39558 40100\nf 39557 40100 39562\nf 39558 40095 40096\nf 39558 40096 40100\nf 39559 39563 40102\nf 39559 40102 40097\nf 39560 40093 40098\nf 39560 40098 39565\nf 39561 39566 40106\nf 39561 40106 40099\nf 39562 40100 39567\nf 39563 39564 40103\nf 39563 40103 40102\nf 39564 39568 40103\nf 39565 40098 40105\nf 39565 40105 39569\nf 39566 39570 40111\nf 39566 40111 40106\nf 39567 40100 40107\nf 39567 40107 39571\nf 39568 39572 40113\nf 39568 40109 40103\nf 39568 40113 40109\nf 39569 40105 40110\nf 39569 40110 39573\nf 39570 39574 40115\nf 39570 40115 40111\nf 39571 40107 40112\nf 39571 40112 39575\nf 39572 39576 40117\nf 39572 40117 40113\nf 39573 40110 40114\nf 39573 40114 39577\nf 39574 39578 40119\nf 39574 40119 40115\nf 39575 40112 40116\nf 39575 40116 39579\nf 39576 39580 40121\nf 39576 40121 40117\nf 39577 40114 40118\nf 39577 40118 39581\nf 39578 39582 40123\nf 39578 40123 40119\nf 39579 40116 40120\nf 39579 40120 39583\nf 39580 39584 40125\nf 39580 40125 40121\nf 39581 40118 40122\nf 39581 40122 39585\nf 39582 39586 40127\nf 39582 40127 40123\nf 39583 40120 40124\nf 39583 40124 39588\nf 39584 39590 40131\nf 39584 40131 40125\nf 39585 40122 40126\nf 39585 40126 39591\nf 39586 39587 40128\nf 39586 40128 40127\nf 39587 39592 40128\nf 39588 40124 40129\nf 39588 40129 39589\nf 39589 40129 40130\nf 39589 40130 40139\nf 39589 40139 39598\nf 39590 39600 40141\nf 39590 40141 40131\nf 39591 40126 40132\nf 39591 40132 39601\nf 39592 39593 40134\nf 39592 40133 40128\nf 39592 40134 40133\nf 39593 39594 40134\nf 39594 39595 40135\nf 39594 40135 40134\nf 39595 39596 40136\nf 39595 40136 40135\nf 39596 39602 40137\nf 39596 40137 40136\nf 39597 39599 40138\nf 39597 40138 40225\nf 39597 40225 39684\nf 39598 40139 39599\nf 39599 40139 40140\nf 39599 40140 40138\nf 39600 39686 40227\nf 39600 40227 40141\nf 39601 40132 40142\nf 39601 40142 39688\nf 39602 39603 40144\nf 39602 40143 40137\nf 39602 40144 40143\nf 39603 39604 40144\nf 39604 39605 40145\nf 39604 40145 40144\nf 39605 39606 40146\nf 39605 40146 40145\nf 39606 39607 40147\nf 39606 40147 40146\nf 39607 39608 40148\nf 39607 40148 40147\nf 39608 39609 40149\nf 39608 40149 40148\nf 39609 39610 40150\nf 39609 40150 40149\nf 39610 39611 40151\nf 39610 40151 40150\nf 39611 39612 40152\nf 39611 40152 40151\nf 39612 39613 40153\nf 39612 40153 40152\nf 39613 39614 40154\nf 39613 40154 40153\nf 39614 39615 40155\nf 39614 40155 40154\nf 39615 39616 40156\nf 39615 40156 40155\nf 39616 39617 40157\nf 39616 40157 40156\nf 39617 39618 40158\nf 39617 40158 40157\nf 39618 39619 40159\nf 39618 40159 40158\nf 39619 39620 40160\nf 39619 40160 40159\nf 39620 39621 40161\nf 39620 40161 40160\nf 39621 39622 40162\nf 39621 40162 40161\nf 39622 39623 40163\nf 39622 40163 40162\nf 39623 39624 40164\nf 39623 40164 40163\nf 39624 39625 40165\nf 39624 40165 40164\nf 39625 39626 40166\nf 39625 40166 40165\nf 39626 39627 40167\nf 39626 40167 40166\nf 39627 39628 40168\nf 39627 40168 40167\nf 39628 39629 40169\nf 39628 40169 40168\nf 39629 39630 40170\nf 39629 40170 40169\nf 39630 39631 40171\nf 39630 40171 40170\nf 39631 39632 40172\nf 39631 40172 40171\nf 39632 39633 40173\nf 39632 40173 40172\nf 39633 39634 40174\nf 39633 40174 40173\nf 39634 39635 40175\nf 39634 40175 40174\nf 39635 39636 40176\nf 39635 40176 40175\nf 39636 39637 40177\nf 39636 40177 40176\nf 39637 39638 40178\nf 39637 40178 40177\nf 39638 39639 40179\nf 39638 40179 40178\nf 39639 39640 40180\nf 39639 40180 40179\nf 39640 39641 40181\nf 39640 40181 40180\nf 39641 39642 40182\nf 39641 40182 40181\nf 39642 39643 40183\nf 39642 40183 40182\nf 39643 39644 40184\nf 39643 40184 40183\nf 39644 39645 40185\nf 39644 40185 40184\nf 39645 39646 40186\nf 39645 40186 40185\nf 39646 39647 40187\nf 39646 40187 40186\nf 39647 39648 40188\nf 39647 40188 40187\nf 39648 39649 40189\nf 39648 40189 40188\nf 39649 39650 40190\nf 39649 40190 40189\nf 39650 39651 40191\nf 39650 40191 40190\nf 39651 39652 40192\nf 39651 40192 40191\nf 39652 39653 40193\nf 39652 40193 40192\nf 39653 39654 40194\nf 39653 40194 40193\nf 39654 39655 40195\nf 39654 40195 40194\nf 39655 39656 40196\nf 39655 40196 40195\nf 39656 39657 40197\nf 39656 40197 40196\nf 39657 39658 40198\nf 39657 40198 40197\nf 39658 39659 40199\nf 39658 40199 40198\nf 39659 39660 40200\nf 39659 40200 40199\nf 39660 39661 40201\nf 39660 40201 40200\nf 39661 39662 40202\nf 39661 40202 40201\nf 39662 39663 40203\nf 39662 40203 40202\nf 39663 39664 40204\nf 39663 40204 40203\nf 39664 39665 40205\nf 39664 40205 40204\nf 39665 39666 40206\nf 39665 40206 40205\nf 39666 39667 40207\nf 39666 40207 40206\nf 39667 39668 40208\nf 39667 40208 40207\nf 39668 39669 40209\nf 39668 40209 40208\nf 39669 39670 40210\nf 39669 40210 40209\nf 39670 39671 40211\nf 39670 40211 40210\nf 39671 39672 40212\nf 39671 40212 40211\nf 39672 39673 40213\nf 39672 40213 40212\nf 39673 39674 40214\nf 39673 40214 40213\nf 39674 39675 40215\nf 39674 40215 40214\nf 39675 39676 40216\nf 39675 40216 40215\nf 39676 39677 40217\nf 39676 40217 40216\nf 39677 39678 40218\nf 39677 40218 40217\nf 39678 39679 40219\nf 39678 40219 40218\nf 39679 39680 40220\nf 39679 40220 40219\nf 39680 39681 40221\nf 39680 40221 40220\nf 39681 39682 40222\nf 39681 40222 40221\nf 39682 39683 40223\nf 39682 40223 40222\nf 39683 39685 40224\nf 39683 40224 40223\nf 39684 40225 39685\nf 39685 40225 40226\nf 39685 40226 40224\nf 39686 39687 40227\nf 39687 39689 40230\nf 39687 40228 40227\nf 39687 40230 40228\nf 39688 40142 40229\nf 39688 40229 39690\nf 39689 39692 40233\nf 39689 40233 40230\nf 39690 40229 40231\nf 39690 40231 40232\nf 39690 40232 39691\nf 39691 40232 39693\nf 39692 39694 40235\nf 39692 40235 40233\nf 39693 40232 40234\nf 39693 40234 39696\nf 39694 39695 40235\nf 39695 39697 40238\nf 39695 40236 40235\nf 39695 40238 40236\nf 39696 40234 40237\nf 39696 40237 39699\nf 39697 39698 40238\nf 39698 39705 40246\nf 39698 40239 40238\nf 39698 40246 40239\nf 39699 40237 40240\nf 39699 40240 40241\nf 39699 40241 39700\nf 39700 40241 39707\nf 39701 39796 40337\nf 39701 40242 40243\nf 39701 40243 39702\nf 39701 40337 40242\nf 39702 40243 40244\nf 39702 40244 39703\nf 39703 40244 40245\nf 39703 40245 39704\nf 39704 40245 40247\nf 39704 40247 39706\nf 39705 39706 40246\nf 39706 40247 40246\nf 39707 40241 40248\nf 39707 40248 40249\nf 39707 40249 39708\nf 39708 40249 40250\nf 39708 40250 39709\nf 39709 40250 39798\nf 39710 39802 40343\nf 39710 40251 40252\nf 39710 40252 39711\nf 39710 40343 40251\nf 39711 40252 40253\nf 39711 40253 39712\nf 39712 40253 40254\nf 39712 40254 39713\nf 39713 40254 40255\nf 39713 40255 39714\nf 39714 40255 40256\nf 39714 40256 39715\nf 39715 40256 40257\nf 39715 40257 39716\nf 39716 40257 40258\nf 39716 40258 39717\nf 39717 40258 40259\nf 39717 40259 39718\nf 39718 40259 40260\nf 39718 40260 39719\nf 39719 40260 40261\nf 39719 40261 39720\nf 39720 40261 40262\nf 39720 40262 39721\nf 39721 40262 40263\nf 39721 40263 39722\nf 39722 40263 40264\nf 39722 40264 39723\nf 39723 40264 40265\nf 39723 40265 39724\nf 39724 40265 40266\nf 39724 40266 39725\nf 39725 40266 40267\nf 39725 40267 39726\nf 39726 40267 40268\nf 39726 40268 39727\nf 39727 40268 40269\nf 39727 40269 39728\nf 39728 40269 40270\nf 39728 40270 39729\nf 39729 40270 40271\nf 39729 40271 39730\nf 39730 40271 40272\nf 39730 40272 39731\nf 39731 40272 40273\nf 39731 40273 39732\nf 39732 40273 40274\nf 39732 40274 39733\nf 39733 40274 40275\nf 39733 40275 39734\nf 39734 40275 40276\nf 39734 40276 39735\nf 39735 40276 40277\nf 39735 40277 39736\nf 39736 40277 40278\nf 39736 40278 39737\nf 39737 40278 40279\nf 39737 40279 39738\nf 39738 40279 40280\nf 39738 40280 39739\nf 39739 40280 40281\nf 39739 40281 39740\nf 39740 40281 40282\nf 39740 40282 39741\nf 39741 40282 40283\nf 39741 40283 39742\nf 39742 40283 40284\nf 39742 40284 39743\nf 39743 40284 40285\nf 39743 40285 39744\nf 39744 40285 40286\nf 39744 40286 39745\nf 39745 40286 40287\nf 39745 40287 39746\nf 39746 40287 40288\nf 39746 40288 39747\nf 39747 40288 40289\nf 39747 40289 39748\nf 39748 40289 40290\nf 39748 40290 39749\nf 39749 40290 40291\nf 39749 40291 39750\nf 39750 40291 40292\nf 39750 40292 39751\nf 39751 40292 40293\nf 39751 40293 39752\nf 39752 40293 40294\nf 39752 40294 39753\nf 39753 40294 40295\nf 39753 40295 39754\nf 39754 40295 40296\nf 39754 40296 39755\nf 39755 40296 40297\nf 39755 40297 39756\nf 39756 40297 40298\nf 39756 40298 39757\nf 39757 40298 40299\nf 39757 40299 39758\nf 39758 40299 40300\nf 39758 40300 39759\nf 39759 40300 40301\nf 39759 40301 39760\nf 39760 40301 40302\nf 39760 40302 39761\nf 39761 40302 40303\nf 39761 40303 39762\nf 39762 40303 40304\nf 39762 40304 39763\nf 39763 40304 40305\nf 39763 40305 39764\nf 39764 40305 40306\nf 39764 40306 39765\nf 39765 40306 40307\nf 39765 40307 39766\nf 39766 40307 40308\nf 39766 40308 39767\nf 39767 40308 40309\nf 39767 40309 39768\nf 39768 40309 40310\nf 39768 40310 39769\nf 39769 40310 40311\nf 39769 40311 39770\nf 39770 40311 40312\nf 39770 40312 39771\nf 39771 40312 40313\nf 39771 40313 39772\nf 39772 40313 40314\nf 39772 40314 39773\nf 39773 40314 40315\nf 39773 40315 39774\nf 39774 40315 40316\nf 39774 40316 39775\nf 39775 40316 40317\nf 39775 40317 39776\nf 39776 40317 40318\nf 39776 40318 39777\nf 39777 40318 40319\nf 39777 40319 39778\nf 39778 40319 40320\nf 39778 40320 39779\nf 39779 40320 40321\nf 39779 40321 39780\nf 39780 40321 40322\nf 39780 40322 39781\nf 39781 40322 40323\nf 39781 40323 39782\nf 39782 40323 40324\nf 39782 40324 39783\nf 39783 40324 40325\nf 39783 40325 39784\nf 39784 40325 40326\nf 39784 40326 39785\nf 39785 40326 40327\nf 39785 40327 39786\nf 39786 40327 40328\nf 39786 40328 39787\nf 39787 40328 40329\nf 39787 40329 39788\nf 39788 40329 40330\nf 39788 40330 39789\nf 39789 40330 40331\nf 39789 40331 39790\nf 39790 40331 40332\nf 39790 40332 39791\nf 39791 40332 40333\nf 39791 40333 39792\nf 39792 40333 40334\nf 39792 40334 39793\nf 39793 40334 40335\nf 39793 40335 39794\nf 39794 40335 40336\nf 39794 40336 39795\nf 39795 40336 40338\nf 39795 40338 39797\nf 39796 39797 40337\nf 39797 40338 40337\nf 39798 40250 40339\nf 39798 40339 40340\nf 39798 40340 39799\nf 39799 40340 40341\nf 39799 40341 39800\nf 39800 40341 40342\nf 39800 40342 39801\nf 39801 40342 40344\nf 39801 40344 39803\nf 39802 39803 40343\nf 39803 40344 40343\nf 39804 39805 40346\nf 39804 39809 39807\nf 39804 40345 39809\nf 39804 40346 40345\nf 39805 39810 40347\nf 39805 40347 40346\nf 39806 39808 40350\nf 39806 40350 40354\nf 39806 40354 39812\nf 39807 39809 39808\nf 39808 39809 40349\nf 39808 40349 40350\nf 39809 40345 40349\nf 39810 39811 40352\nf 39810 40351 40347\nf 39810 40352 40351\nf 39811 39814 40352\nf 39812 40354 39813\nf 39813 40354 40355\nf 39813 40355 40358\nf 39813 40358 39816\nf 39814 39815 40357\nf 39814 40356 40352\nf 39814 40357 40356\nf 39815 39817 40357\nf 39816 40358 39818\nf 39817 39819 40361\nf 39817 40359 40357\nf 39817 40361 40359\nf 39818 40358 40360\nf 39818 40360 39820\nf 39819 39821 40363\nf 39819 40363 40361\nf 39820 40360 40362\nf 39820 40362 39822\nf 39821 39823 40365\nf 39821 40365 40363\nf 39822 40362 40364\nf 39822 40364 39824\nf 39823 39825 40367\nf 39823 40367 40365\nf 39824 40364 40366\nf 39824 40366 39826\nf 39825 39827 40369\nf 39825 40369 40367\nf 39826 40366 40368\nf 39826 40368 39828\nf 39827 39829 40371\nf 39827 40371 40369\nf 39828 40368 40370\nf 39828 40370 39830\nf 39829 39831 40373\nf 39829 40373 40371\nf 39830 40370 40372\nf 39830 40372 39832\nf 39831 39833 40375\nf 39831 40375 40373\nf 39832 40372 40374\nf 39832 40374 39834\nf 39833 39835 40377\nf 39833 40377 40375\nf 39834 40374 40376\nf 39834 40376 39836\nf 39835 39837 40379\nf 39835 40379 40377\nf 39836 40376 40378\nf 39836 40378 39838\nf 39837 39840 40382\nf 39837 40382 40379\nf 39838 40378 40380\nf 39838 40380 40381\nf 39838 40381 39839\nf 39839 40381 39841\nf 39840 39842 40384\nf 39840 40384 40382\nf 39841 40381 40383\nf 39841 40383 39843\nf 39842 39844 40386\nf 39842 40386 40384\nf 39843 40383 40385\nf 39843 40385 39846\nf 39844 39845 40386\nf 39845 39847 40389\nf 39845 40387 40386\nf 39845 40389 40387\nf 39846 40385 40388\nf 39846 40388 39848\nf 39847 39849 40391\nf 39847 40391 40389\nf 39848 40388 40390\nf 39848 40390 39850\nf 39849 39851 40393\nf 39849 40393 40391\nf 39850 40390 40392\nf 39850 40392 39853\nf 39851 39852 40393\nf 39852 39854 40397\nf 39852 40394 40393\nf 39852 40397 40394\nf 39853 40392 40395\nf 39853 40395 39855\nf 39854 39858 40400\nf 39854 40400 40397\nf 39855 39857 39856\nf 39855 40395 40396\nf 39855 40396 39857\nf 39856 39857 39859\nf 39857 40396 40399\nf 39857 40399 39859\nf 39858 39860 40402\nf 39858 40402 40400\nf 39859 40399 40401\nf 39859 40401 39862\nf 39860 39861 40402\nf 39861 39863 40406\nf 39861 40403 40402\nf 39861 40406 40403\nf 39862 40401 40404\nf 39862 40404 39864\nf 39863 39865 40406\nf 39864 40404 40408\nf 39864 40408 39867\nf 39865 39866 40406\nf 39865 39869 39870\nf 39865 39870 39866\nf 39866 39870 40409\nf 39866 40407 40406\nf 39866 40409 40407\nf 39867 40408 40411\nf 39867 40411 40414\nf 39867 40414 39868\nf 39868 39872 39871\nf 39868 40414 39872\nf 39869 39873 39874\nf 39869 39874 39870\nf 39870 39874 40412\nf 39870 40412 40409\nf 39871 39872 39875\nf 39872 39876 39875\nf 39872 40414 40417\nf 39872 40417 39876\nf 39873 39877 39878\nf 39873 39878 39874\nf 39874 39878 40415\nf 39874 40415 40412\nf 39875 39876 40422\nf 39875 40422 39879\nf 39876 40417 40418\nf 39876 40418 40422\nf 39877 39880 40425\nf 39877 40421 39878\nf 39877 40425 40421\nf 39878 40419 40415\nf 39878 40421 40419\nf 39879 40422 39881\nf 39880 39882 40429\nf 39880 40429 40425\nf 39881 40422 40427\nf 39881 40427 39883\nf 39882 39884 40431\nf 39882 40431 40429\nf 39883 40427 40430\nf 39883 40430 39885\nf 39884 39886 40433\nf 39884 40433 40431\nf 39885 40430 40432\nf 39885 40432 39888\nf 39886 39887 39890\nf 39886 39890 40435\nf 39886 40435 40433\nf 39887 39889 39890\nf 39888 40432 40434\nf 39888 40434 39891\nf 39889 39893 39894\nf 39889 39894 39890\nf 39890 39894 40435\nf 39891 40434 40436\nf 39891 40436 40438\nf 39891 40438 39892\nf 39892 39896 39895\nf 39892 40438 39896\nf 39893 39897 39898\nf 39893 39898 39894\nf 39894 39898 40437\nf 39894 40437 40435\nf 39895 39896 39899\nf 39896 39900 39899\nf 39896 40438 40440\nf 39896 40440 39900\nf 39897 39901 39902\nf 39897 39902 39898\nf 39898 39902 40439\nf 39898 40439 40437\nf 39899 39900 40443\nf 39899 40443 39903\nf 39900 40440 40441\nf 39900 40441 40443\nf 39901 39904 39905\nf 39901 39905 39902\nf 39902 39905 40442\nf 39902 40442 40439\nf 39903 40443 39906\nf 39904 39907 39908\nf 39904 39908 39905\nf 39905 39908 40445\nf 39905 40445 40442\nf 39906 40443 40446\nf 39906 40446 39909\nf 39907 39910 39911\nf 39907 39911 39908\nf 39908 39911 40448\nf 39908 40448 40445\nf 39909 40446 40449\nf 39909 40449 39912\nf 39910 39913 39914\nf 39910 39914 39911\nf 39911 39914 40451\nf 39911 40451 40448\nf 39912 40449 40452\nf 39912 40452 39915\nf 39913 39916 39917\nf 39913 39917 39914\nf 39914 39917 40453\nf 39914 40453 40451\nf 39915 40452 40454\nf 39915 40454 39918\nf 39916 39919 39920\nf 39916 39920 39917\nf 39917 39920 40455\nf 39917 40455 40453\nf 39918 40454 40456\nf 39918 40456 39921\nf 39919 39922 40460\nf 39919 40458 39920\nf 39919 40460 40458\nf 39920 40457 40455\nf 39920 40458 40457\nf 39921 40456 40459\nf 39921 40459 39923\nf 39922 39924 40462\nf 39922 40462 40460\nf 39923 40459 40461\nf 39923 40461 39925\nf 39924 39926 40464\nf 39924 40464 40462\nf 39925 40461 40463\nf 39925 40463 39927\nf 39926 39928 40464\nf 39927 40463 40466\nf 39927 40466 39931\nf 39928 39929 39930\nf 39928 39930 40464\nf 39929 39932 40467\nf 39929 40467 39930\nf 39930 40465 40464\nf 39930 40467 40465\nf 39931 40466 40468\nf 39931 40468 39933\nf 39932 39934 40471\nf 39932 40469 40467\nf 39932 40471 40469\nf 39933 40468 40470\nf 39933 40470 39935\nf 39934 39936 40473\nf 39934 40473 40471\nf 39935 40470 40472\nf 39935 40472 39937\nf 39936 39938 40475\nf 39936 40475 40473\nf 39937 40472 40474\nf 39937 40474 39939\nf 39938 39940 40477\nf 39938 40477 40475\nf 39939 40474 40476\nf 39939 40476 39941\nf 39940 39942 40479\nf 39940 40479 40477\nf 39941 40476 40478\nf 39941 40478 39943\nf 39942 39944 40481\nf 39942 40481 40479\nf 39943 40478 40480\nf 39943 40480 39945\nf 39944 39946 40483\nf 39944 40483 40481\nf 39945 40480 40482\nf 39945 40482 39948\nf 39946 39947 40485\nf 39946 40485 40483\nf 39947 39949 39950\nf 39947 39950 40485\nf 39948 40482 40484\nf 39948 40484 39951\nf 39949 39952 40489\nf 39949 40489 39950\nf 39950 40486 40485\nf 39950 40489 40486\nf 39951 40484 40487\nf 39951 40487 39954\nf 39952 39953 40489\nf 39953 39957 40492\nf 39953 40490 40489\nf 39953 40492 40490\nf 39954 39956 39955\nf 39954 40487 40488\nf 39954 40488 39956\nf 39955 39956 40493\nf 39955 40493 39958\nf 39956 40488 40491\nf 39956 40491 40493\nf 39957 39958 40492\nf 39958 40493 40492\nf 39959 39962 39963\nf 39959 39963 39960\nf 39960 39963 39961\nf 39961 39963 40496\nf 39961 40495 40497\nf 39961 40496 40495\nf 39961 40497 39964\nf 39962 39965 40499\nf 39962 40496 39963\nf 39962 40499 40496\nf 39964 40497 39966\nf 39965 39968 40501\nf 39965 40501 40499\nf 39966 40497 40500\nf 39966 40500 40502\nf 39966 40502 39967\nf 39967 39971 39970\nf 39967 40502 39971\nf 39968 39969 39973\nf 39968 39973 40504\nf 39968 40504 40501\nf 39969 39972 39973\nf 39970 39971 40506\nf 39970 40506 39974\nf 39971 40502 40503\nf 39971 40503 40506\nf 39972 39975 40507\nf 39972 40505 39973\nf 39972 40507 40505\nf 39973 40505 40504\nf 39974 40506 39976\nf 39975 39977 40509\nf 39975 40509 40507\nf 39976 40506 40508\nf 39976 40508 39978\nf 39977 39980 40511\nf 39977 40511 40509\nf 39978 40508 40510\nf 39978 40510 40512\nf 39978 40512 39979\nf 39979 39982 39981\nf 39979 40512 39982\nf 39980 39983 40514\nf 39980 40514 40511\nf 39981 39982 40515\nf 39981 40515 39984\nf 39982 40512 40513\nf 39982 40513 40515\nf 39983 39985 40516\nf 39983 40516 40514\nf 39984 40515 39986\nf 39985 39987 40518\nf 39985 40518 40516\nf 39986 40515 40517\nf 39986 40517 39988\nf 39987 39989 40520\nf 39987 40520 40518\nf 39988 40517 40519\nf 39988 40519 39990\nf 39989 39991 40522\nf 39989 40522 40520\nf 39990 40519 40521\nf 39990 40521 39992\nf 39991 39994 40525\nf 39991 40525 40522\nf 39992 40521 40523\nf 39992 40523 39993\nf 39993 40523 40524\nf 39993 40524 40526\nf 39993 40526 39995\nf 39994 39996 40527\nf 39994 40527 40525\nf 39995 40526 39997\nf 39996 39998 40529\nf 39996 40529 40527\nf 39997 40526 40528\nf 39997 40528 40000\nf 39998 39999 40529\nf 39999 40001 40532\nf 39999 40530 40529\nf 39999 40532 40530\nf 40000 40528 40531\nf 40000 40531 40002\nf 40001 40003 40534\nf 40001 40534 40532\nf 40002 40531 40533\nf 40002 40533 40004\nf 40003 40005 40536\nf 40003 40536 40534\nf 40004 40533 40535\nf 40004 40535 40007\nf 40005 40006 40536\nf 40006 40008 40539\nf 40006 40537 40536\nf 40006 40539 40537\nf 40007 40535 40538\nf 40007 40538 40010\nf 40008 40009 40539\nf 40009 40012 40542\nf 40009 40540 40539\nf 40009 40542 40540\nf 40010 40015 40011\nf 40010 40538 40541\nf 40010 40541 40543\nf 40010 40543 40015\nf 40011 40015 40014\nf 40012 40013 40546\nf 40012 40546 40542\nf 40013 40016 40018\nf 40013 40018 40546\nf 40014 40015 40544\nf 40014 40544 40017\nf 40015 40543 40544\nf 40016 40017 40018\nf 40017 40544 40545\nf 40017 40545 40547\nf 40017 40547 40018\nf 40018 40547 40546\nf 40019 40020 40549\nf 40019 40026 40024\nf 40019 40548 40026\nf 40019 40549 40548\nf 40020 40027 40028\nf 40020 40028 40549\nf 40021 40022 40550\nf 40021 40550 40562\nf 40021 40562 40032\nf 40022 40023 40551\nf 40022 40551 40550\nf 40023 40025 40553\nf 40023 40553 40551\nf 40024 40026 40025\nf 40025 40026 40552\nf 40025 40552 40553\nf 40026 40548 40552\nf 40027 40029 40557\nf 40027 40557 40028\nf 40028 40555 40549\nf 40028 40557 40555\nf 40029 40030 40558\nf 40029 40558 40557\nf 40030 40034 40559\nf 40030 40559 40558\nf 40031 40033 40561\nf 40031 40040 40038\nf 40031 40560 40040\nf 40031 40561 40560\nf 40032 40562 40033\nf 40033 40562 40563\nf 40033 40563 40561\nf 40034 40035 40565\nf 40034 40564 40559\nf 40034 40565 40564\nf 40035 40036 40565\nf 40036 40041 40042\nf 40036 40042 40565\nf 40037 40039 40567\nf 40037 40567 40572\nf 40037 40572 40044\nf 40038 40040 40039\nf 40039 40040 40566\nf 40039 40566 40567\nf 40040 40560 40566\nf 40041 40043 40569\nf 40041 40569 40042\nf 40042 40568 40565\nf 40042 40569 40568\nf 40043 40045 40571\nf 40043 40571 40569\nf 40044 40572 40047\nf 40045 40046 40574\nf 40045 40573 40571\nf 40045 40574 40573\nf 40046 40050 40574\nf 40047 40572 40575\nf 40047 40575 40576\nf 40047 40576 40048\nf 40048 40576 40577\nf 40048 40577 40049\nf 40049 40577 40051\nf 40050 40054 40582\nf 40050 40578 40574\nf 40050 40582 40578\nf 40051 40577 40579\nf 40051 40579 40580\nf 40051 40580 40052\nf 40052 40580 40581\nf 40052 40581 40053\nf 40053 40581 40055\nf 40054 40057 40586\nf 40054 40586 40582\nf 40055 40581 40583\nf 40055 40583 40584\nf 40055 40584 40056\nf 40056 40584 40585\nf 40056 40585 40058\nf 40057 40063 40590\nf 40057 40590 40586\nf 40058 40060 40059\nf 40058 40585 40060\nf 40059 40060 40588\nf 40059 40588 40061\nf 40060 40585 40587\nf 40060 40587 40588\nf 40061 40588 40589\nf 40061 40589 40062\nf 40062 40589 40065\nf 40063 40064 40590\nf 40064 40072 40599\nf 40064 40591 40590\nf 40064 40599 40591\nf 40065 40589 40592\nf 40065 40592 40593\nf 40065 40593 40066\nf 40066 40593 40594\nf 40066 40594 40067\nf 40067 40594 40595\nf 40067 40595 40068\nf 40068 40595 40596\nf 40068 40596 40069\nf 40069 40596 40597\nf 40069 40597 40070\nf 40070 40597 40598\nf 40070 40598 40071\nf 40071 40598 40600\nf 40071 40600 40073\nf 40072 40073 40599\nf 40073 40600 40599\nf 40074 40075 40601\nf 40074 40601 40609\nf 40074 40609 40082\nf 40075 40076 40602\nf 40075 40602 40601\nf 40076 40083 40603\nf 40076 40603 40602\nf 40077 40078 40604\nf 40077 40604 40611\nf 40077 40611 40084\nf 40078 40079 40605\nf 40078 40605 40604\nf 40079 40080 40606\nf 40079 40606 40605\nf 40080 40081 40607\nf 40080 40607 40606\nf 40081 40085 40608\nf 40081 40608 40607\nf 40082 40609 40087\nf 40083 40089 40616\nf 40083 40610 40603\nf 40083 40616 40610\nf 40084 40611 40091\nf 40085 40086 40613\nf 40085 40612 40608\nf 40085 40613 40612\nf 40086 40092 40613\nf 40087 40609 40614\nf 40087 40614 40088\nf 40088 40614 40615\nf 40088 40615 40620\nf 40088 40620 40093\nf 40089 40090 40617\nf 40089 40617 40616\nf 40090 40094 40617\nf 40091 40611 40618\nf 40091 40618 40095\nf 40092 40097 40623\nf 40092 40619 40613\nf 40092 40623 40619\nf 40093 40620 40098\nf 40094 40099 40626\nf 40094 40621 40617\nf 40094 40626 40621\nf 40095 40618 40622\nf 40095 40622 40627\nf 40095 40627 40096\nf 40096 40101 40100\nf 40096 40627 40101\nf 40097 40102 40623\nf 40098 40620 40625\nf 40098 40625 40105\nf 40099 40106 40630\nf 40099 40630 40626\nf 40100 40101 40107\nf 40101 40108 40107\nf 40101 40627 40631\nf 40101 40631 40108\nf 40102 40103 40104\nf 40102 40104 40624\nf 40102 40624 40623\nf 40103 40109 40104\nf 40104 40109 40628\nf 40104 40628 40624\nf 40105 40625 40629\nf 40105 40629 40110\nf 40106 40111 40635\nf 40106 40635 40630\nf 40107 40108 40636\nf 40107 40636 40112\nf 40108 40631 40632\nf 40108 40632 40636\nf 40109 40113 40637\nf 40109 40633 40628\nf 40109 40637 40633\nf 40110 40629 40634\nf 40110 40634 40114\nf 40111 40115 40639\nf 40111 40639 40635\nf 40112 40636 40116\nf 40113 40117 40641\nf 40113 40641 40637\nf 40114 40634 40638\nf 40114 40638 40118\nf 40115 40119 40643\nf 40115 40643 40639\nf 40116 40636 40640\nf 40116 40640 40120\nf 40117 40121 40645\nf 40117 40645 40641\nf 40118 40638 40642\nf 40118 40642 40122\nf 40119 40123 40647\nf 40119 40647 40643\nf 40120 40640 40644\nf 40120 40644 40124\nf 40121 40125 40649\nf 40121 40649 40645\nf 40122 40642 40646\nf 40122 40646 40126\nf 40123 40127 40651\nf 40123 40651 40647\nf 40124 40644 40648\nf 40124 40648 40129\nf 40125 40131 40655\nf 40125 40655 40649\nf 40126 40646 40650\nf 40126 40650 40132\nf 40127 40128 40652\nf 40127 40652 40651\nf 40128 40133 40652\nf 40129 40648 40653\nf 40129 40653 40130\nf 40130 40653 40654\nf 40130 40654 40663\nf 40130 40663 40139\nf 40131 40141 40665\nf 40131 40665 40655\nf 40132 40650 40656\nf 40132 40656 40142\nf 40133 40134 40658\nf 40133 40657 40652\nf 40133 40658 40657\nf 40134 40135 40658\nf 40135 40136 40659\nf 40135 40659 40658\nf 40136 40137 40660\nf 40136 40660 40659\nf 40137 40143 40661\nf 40137 40661 40660\nf 40138 40140 40662\nf 40138 40662 40749\nf 40138 40749 40225\nf 40139 40663 40140\nf 40140 40663 40664\nf 40140 40664 40662\nf 40141 40227 40751\nf 40141 40751 40665\nf 40142 40656 40666\nf 40142 40666 40229\nf 40143 40144 40668\nf 40143 40667 40661\nf 40143 40668 40667\nf 40144 40145 40668\nf 40145 40146 40669\nf 40145 40669 40668\nf 40146 40147 40670\nf 40146 40670 40669\nf 40147 40148 40671\nf 40147 40671 40670\nf 40148 40149 40672\nf 40148 40672 40671\nf 40149 40150 40673\nf 40149 40673 40672\nf 40150 40151 40674\nf 40150 40674 40673\nf 40151 40152 40675\nf 40151 40675 40674\nf 40152 40153 40676\nf 40152 40676 40675\nf 40153 40154 40677\nf 40153 40677 40676\nf 40154 40155 40678\nf 40154 40678 40677\nf 40155 40156 40679\nf 40155 40679 40678\nf 40156 40157 40680\nf 40156 40680 40679\nf 40157 40158 40681\nf 40157 40681 40680\nf 40158 40159 40682\nf 40158 40682 40681\nf 40159 40160 40683\nf 40159 40683 40682\nf 40160 40161 40684\nf 40160 40684 40683\nf 40161 40162 40685\nf 40161 40685 40684\nf 40162 40163 40686\nf 40162 40686 40685\nf 40163 40164 40687\nf 40163 40687 40686\nf 40164 40165 40688\nf 40164 40688 40687\nf 40165 40166 40689\nf 40165 40689 40688\nf 40166 40167 40690\nf 40166 40690 40689\nf 40167 40168 40691\nf 40167 40691 40690\nf 40168 40169 40692\nf 40168 40692 40691\nf 40169 40170 40693\nf 40169 40693 40692\nf 40170 40171 40694\nf 40170 40694 40693\nf 40171 40172 40695\nf 40171 40695 40694\nf 40172 40173 40696\nf 40172 40696 40695\nf 40173 40174 40697\nf 40173 40697 40696\nf 40174 40175 40698\nf 40174 40698 40697\nf 40175 40176 40699\nf 40175 40699 40698\nf 40176 40177 40700\nf 40176 40700 40699\nf 40177 40178 40701\nf 40177 40701 40700\nf 40178 40179 40702\nf 40178 40702 40701\nf 40179 40180 40703\nf 40179 40703 40702\nf 40180 40181 40704\nf 40180 40704 40703\nf 40181 40182 40705\nf 40181 40705 40704\nf 40182 40183 40706\nf 40182 40706 40705\nf 40183 40184 40707\nf 40183 40707 40706\nf 40184 40185 40708\nf 40184 40708 40707\nf 40185 40186 40709\nf 40185 40709 40708\nf 40186 40187 40710\nf 40186 40710 40709\nf 40187 40188 40711\nf 40187 40711 40710\nf 40188 40189 40712\nf 40188 40712 40711\nf 40189 40190 40713\nf 40189 40713 40712\nf 40190 40191 40714\nf 40190 40714 40713\nf 40191 40192 40715\nf 40191 40715 40714\nf 40192 40193 40716\nf 40192 40716 40715\nf 40193 40194 40717\nf 40193 40717 40716\nf 40194 40195 40718\nf 40194 40718 40717\nf 40195 40196 40719\nf 40195 40719 40718\nf 40196 40197 40720\nf 40196 40720 40719\nf 40197 40198 40721\nf 40197 40721 40720\nf 40198 40199 40722\nf 40198 40722 40721\nf 40199 40200 40723\nf 40199 40723 40722\nf 40200 40201 40724\nf 40200 40724 40723\nf 40201 40202 40725\nf 40201 40725 40724\nf 40202 40203 40726\nf 40202 40726 40725\nf 40203 40204 40727\nf 40203 40727 40726\nf 40204 40205 40728\nf 40204 40728 40727\nf 40205 40206 40729\nf 40205 40729 40728\nf 40206 40207 40730\nf 40206 40730 40729\nf 40207 40208 40731\nf 40207 40731 40730\nf 40208 40209 40732\nf 40208 40732 40731\nf 40209 40210 40733\nf 40209 40733 40732\nf 40210 40211 40734\nf 40210 40734 40733\nf 40211 40212 40735\nf 40211 40735 40734\nf 40212 40213 40736\nf 40212 40736 40735\nf 40213 40214 40737\nf 40213 40737 40736\nf 40214 40215 40738\nf 40214 40738 40737\nf 40215 40216 40739\nf 40215 40739 40738\nf 40216 40217 40740\nf 40216 40740 40739\nf 40217 40218 40741\nf 40217 40741 40740\nf 40218 40219 40742\nf 40218 40742 40741\nf 40219 40220 40743\nf 40219 40743 40742\nf 40220 40221 40744\nf 40220 40744 40743\nf 40221 40222 40745\nf 40221 40745 40744\nf 40222 40223 40746\nf 40222 40746 40745\nf 40223 40224 40747\nf 40223 40747 40746\nf 40224 40226 40748\nf 40224 40748 40747\nf 40225 40749 40226\nf 40226 40749 40750\nf 40226 40750 40748\nf 40227 40228 40751\nf 40228 40230 40754\nf 40228 40752 40751\nf 40228 40754 40752\nf 40229 40666 40753\nf 40229 40753 40231\nf 40230 40233 40757\nf 40230 40757 40754\nf 40231 40753 40755\nf 40231 40755 40756\nf 40231 40756 40232\nf 40232 40756 40234\nf 40233 40235 40759\nf 40233 40759 40757\nf 40234 40756 40758\nf 40234 40758 40237\nf 40235 40236 40759\nf 40236 40238 40762\nf 40236 40760 40759\nf 40236 40762 40760\nf 40237 40758 40761\nf 40237 40761 40240\nf 40238 40239 40762\nf 40239 40246 40770\nf 40239 40763 40762\nf 40239 40770 40763\nf 40240 40761 40764\nf 40240 40764 40765\nf 40240 40765 40241\nf 40241 40765 40248\nf 40242 40337 40861\nf 40242 40766 40767\nf 40242 40767 40243\nf 40242 40861 40766\nf 40243 40767 40768\nf 40243 40768 40244\nf 40244 40768 40769\nf 40244 40769 40245\nf 40245 40769 40771\nf 40245 40771 40247\nf 40246 40247 40770\nf 40247 40771 40770\nf 40248 40765 40772\nf 40248 40772 40773\nf 40248 40773 40249\nf 40249 40773 40774\nf 40249 40774 40250\nf 40250 40774 40339\nf 40251 40343 40867\nf 40251 40775 40776\nf 40251 40776 40252\nf 40251 40867 40775\nf 40252 40776 40777\nf 40252 40777 40253\nf 40253 40777 40778\nf 40253 40778 40254\nf 40254 40778 40779\nf 40254 40779 40255\nf 40255 40779 40780\nf 40255 40780 40256\nf 40256 40780 40781\nf 40256 40781 40257\nf 40257 40781 40782\nf 40257 40782 40258\nf 40258 40782 40783\nf 40258 40783 40259\nf 40259 40783 40784\nf 40259 40784 40260\nf 40260 40784 40785\nf 40260 40785 40261\nf 40261 40785 40786\nf 40261 40786 40262\nf 40262 40786 40787\nf 40262 40787 40263\nf 40263 40787 40788\nf 40263 40788 40264\nf 40264 40788 40789\nf 40264 40789 40265\nf 40265 40789 40790\nf 40265 40790 40266\nf 40266 40790 40791\nf 40266 40791 40267\nf 40267 40791 40792\nf 40267 40792 40268\nf 40268 40792 40793\nf 40268 40793 40269\nf 40269 40793 40794\nf 40269 40794 40270\nf 40270 40794 40795\nf 40270 40795 40271\nf 40271 40795 40796\nf 40271 40796 40272\nf 40272 40796 40797\nf 40272 40797 40273\nf 40273 40797 40798\nf 40273 40798 40274\nf 40274 40798 40799\nf 40274 40799 40275\nf 40275 40799 40800\nf 40275 40800 40276\nf 40276 40800 40801\nf 40276 40801 40277\nf 40277 40801 40802\nf 40277 40802 40278\nf 40278 40802 40803\nf 40278 40803 40279\nf 40279 40803 40804\nf 40279 40804 40280\nf 40280 40804 40805\nf 40280 40805 40281\nf 40281 40805 40806\nf 40281 40806 40282\nf 40282 40806 40807\nf 40282 40807 40283\nf 40283 40807 40808\nf 40283 40808 40284\nf 40284 40808 40809\nf 40284 40809 40285\nf 40285 40809 40810\nf 40285 40810 40286\nf 40286 40810 40811\nf 40286 40811 40287\nf 40287 40811 40812\nf 40287 40812 40288\nf 40288 40812 40813\nf 40288 40813 40289\nf 40289 40813 40814\nf 40289 40814 40290\nf 40290 40814 40815\nf 40290 40815 40291\nf 40291 40815 40816\nf 40291 40816 40292\nf 40292 40816 40817\nf 40292 40817 40293\nf 40293 40817 40818\nf 40293 40818 40294\nf 40294 40818 40819\nf 40294 40819 40295\nf 40295 40819 40820\nf 40295 40820 40296\nf 40296 40820 40821\nf 40296 40821 40297\nf 40297 40821 40822\nf 40297 40822 40298\nf 40298 40822 40823\nf 40298 40823 40299\nf 40299 40823 40824\nf 40299 40824 40300\nf 40300 40824 40825\nf 40300 40825 40301\nf 40301 40825 40826\nf 40301 40826 40302\nf 40302 40826 40827\nf 40302 40827 40303\nf 40303 40827 40828\nf 40303 40828 40304\nf 40304 40828 40829\nf 40304 40829 40305\nf 40305 40829 40830\nf 40305 40830 40306\nf 40306 40830 40831\nf 40306 40831 40307\nf 40307 40831 40832\nf 40307 40832 40308\nf 40308 40832 40833\nf 40308 40833 40309\nf 40309 40833 40834\nf 40309 40834 40310\nf 40310 40834 40835\nf 40310 40835 40311\nf 40311 40835 40836\nf 40311 40836 40312\nf 40312 40836 40837\nf 40312 40837 40313\nf 40313 40837 40838\nf 40313 40838 40314\nf 40314 40838 40839\nf 40314 40839 40315\nf 40315 40839 40840\nf 40315 40840 40316\nf 40316 40840 40841\nf 40316 40841 40317\nf 40317 40841 40842\nf 40317 40842 40318\nf 40318 40842 40843\nf 40318 40843 40319\nf 40319 40843 40844\nf 40319 40844 40320\nf 40320 40844 40845\nf 40320 40845 40321\nf 40321 40845 40846\nf 40321 40846 40322\nf 40322 40846 40847\nf 40322 40847 40323\nf 40323 40847 40848\nf 40323 40848 40324\nf 40324 40848 40849\nf 40324 40849 40325\nf 40325 40849 40850\nf 40325 40850 40326\nf 40326 40850 40851\nf 40326 40851 40327\nf 40327 40851 40852\nf 40327 40852 40328\nf 40328 40852 40853\nf 40328 40853 40329\nf 40329 40853 40854\nf 40329 40854 40330\nf 40330 40854 40855\nf 40330 40855 40331\nf 40331 40855 40856\nf 40331 40856 40332\nf 40332 40856 40857\nf 40332 40857 40333\nf 40333 40857 40858\nf 40333 40858 40334\nf 40334 40858 40859\nf 40334 40859 40335\nf 40335 40859 40860\nf 40335 40860 40336\nf 40336 40860 40862\nf 40336 40862 40338\nf 40337 40338 40861\nf 40338 40862 40861\nf 40339 40774 40863\nf 40339 40863 40864\nf 40339 40864 40340\nf 40340 40864 40865\nf 40340 40865 40341\nf 40341 40865 40866\nf 40341 40866 40342\nf 40342 40866 40868\nf 40342 40868 40344\nf 40343 40344 40867\nf 40344 40868 40867\nf 40345 40346 40870\nf 40345 40870 40877\nf 40345 40877 40349\nf 40346 40347 40872\nf 40346 40872 40870\nf 40347 40348 40871\nf 40347 40351 40353\nf 40347 40353 40875\nf 40347 40871 40872\nf 40347 40875 40348\nf 40348 40869 40871\nf 40348 40874 40869\nf 40348 40875 40874\nf 40349 40877 40350\nf 40350 40877 40878\nf 40350 40878 40881\nf 40350 40881 40354\nf 40351 40352 40353\nf 40352 40356 40353\nf 40353 40356 40880\nf 40353 40880 40875\nf 40354 40881 40355\nf 40355 40881 40882\nf 40355 40882 40886\nf 40355 40886 40358\nf 40356 40357 40884\nf 40356 40883 40880\nf 40356 40884 40883\nf 40357 40359 40884\nf 40358 40886 40360\nf 40359 40361 40889\nf 40359 40887 40884\nf 40359 40889 40887\nf 40360 40886 40888\nf 40360 40888 40362\nf 40361 40363 40891\nf 40361 40891 40889\nf 40362 40888 40890\nf 40362 40890 40364\nf 40363 40365 40893\nf 40363 40893 40891\nf 40364 40890 40892\nf 40364 40892 40366\nf 40365 40367 40896\nf 40365 40896 40893\nf 40366 40892 40895\nf 40366 40895 40368\nf 40367 40369 40899\nf 40367 40899 40896\nf 40368 40895 40898\nf 40368 40898 40370\nf 40369 40371 40901\nf 40369 40901 40899\nf 40370 40898 40900\nf 40370 40900 40372\nf 40371 40373 40904\nf 40371 40904 40901\nf 40372 40900 40903\nf 40372 40903 40374\nf 40373 40375 40907\nf 40373 40907 40904\nf 40374 40903 40906\nf 40374 40906 40376\nf 40375 40377 40909\nf 40375 40909 40907\nf 40376 40906 40908\nf 40376 40908 40378\nf 40377 40379 40911\nf 40377 40911 40909\nf 40378 40908 40910\nf 40378 40910 40380\nf 40379 40382 40914\nf 40379 40914 40911\nf 40380 40910 40912\nf 40380 40912 40913\nf 40380 40913 40381\nf 40381 40913 40383\nf 40382 40384 40916\nf 40382 40916 40914\nf 40383 40913 40915\nf 40383 40915 40385\nf 40384 40386 40918\nf 40384 40918 40916\nf 40385 40915 40917\nf 40385 40917 40388\nf 40386 40387 40918\nf 40387 40389 40921\nf 40387 40919 40918\nf 40387 40921 40919\nf 40388 40917 40920\nf 40388 40920 40390\nf 40389 40391 40923\nf 40389 40923 40921\nf 40390 40920 40922\nf 40390 40922 40392\nf 40391 40393 40925\nf 40391 40925 40923\nf 40392 40922 40924\nf 40392 40924 40395\nf 40393 40394 40929\nf 40393 40929 40925\nf 40394 40397 40398\nf 40394 40398 40929\nf 40395 40924 40926\nf 40395 40926 40927\nf 40395 40927 40396\nf 40396 40927 40399\nf 40397 40400 40932\nf 40397 40932 40398\nf 40398 40930 40929\nf 40398 40932 40930\nf 40399 40927 40931\nf 40399 40931 40401\nf 40400 40402 40935\nf 40400 40935 40932\nf 40401 40931 40933\nf 40401 40933 40404\nf 40402 40403 40935\nf 40403 40406 40938\nf 40403 40936 40935\nf 40403 40938 40936\nf 40404 40405 40408\nf 40404 40933 40934\nf 40404 40934 40405\nf 40405 40407 40410\nf 40405 40410 40408\nf 40405 40934 40937\nf 40405 40937 40407\nf 40406 40407 40938\nf 40407 40409 40410\nf 40407 40937 40939\nf 40407 40939 40938\nf 40408 40410 40411\nf 40409 40412 40413\nf 40409 40413 40410\nf 40410 40413 40411\nf 40411 40413 40414\nf 40412 40415 40416\nf 40412 40416 40413\nf 40413 40416 40414\nf 40414 40416 40417\nf 40415 40419 40420\nf 40415 40420 40416\nf 40416 40420 40417\nf 40417 40420 40418\nf 40418 40420 40423\nf 40418 40423 40422\nf 40419 40421 40426\nf 40419 40426 40420\nf 40420 40424 40423\nf 40420 40426 40424\nf 40421 40425 40426\nf 40422 40423 40427\nf 40423 40424 40428\nf 40423 40428 40427\nf 40424 40426 40940\nf 40424 40940 40943\nf 40424 40943 40428\nf 40425 40429 40945\nf 40425 40942 40426\nf 40425 40945 40942\nf 40426 40942 40940\nf 40427 40428 40946\nf 40427 40946 40430\nf 40428 40943 40944\nf 40428 40944 40946\nf 40429 40431 40947\nf 40429 40947 40945\nf 40430 40946 40432\nf 40431 40433 40949\nf 40431 40949 40947\nf 40432 40946 40948\nf 40432 40948 40434\nf 40433 40435 40951\nf 40433 40951 40949\nf 40434 40948 40950\nf 40434 40950 40436\nf 40435 40437 40953\nf 40435 40953 40951\nf 40436 40950 40952\nf 40436 40952 40438\nf 40437 40439 40955\nf 40437 40955 40953\nf 40438 40952 40954\nf 40438 40954 40440\nf 40439 40442 40957\nf 40439 40957 40955\nf 40440 40954 40956\nf 40440 40956 40958\nf 40440 40958 40441\nf 40441 40444 40443\nf 40441 40958 40444\nf 40442 40445 40959\nf 40442 40959 40957\nf 40443 40444 40446\nf 40444 40447 40446\nf 40444 40958 40960\nf 40444 40960 40447\nf 40445 40448 40961\nf 40445 40961 40959\nf 40446 40447 40449\nf 40447 40450 40449\nf 40447 40960 40962\nf 40447 40962 40450\nf 40448 40451 40964\nf 40448 40964 40961\nf 40449 40450 40965\nf 40449 40965 40452\nf 40450 40962 40963\nf 40450 40963 40965\nf 40451 40453 40967\nf 40451 40967 40964\nf 40452 40965 40454\nf 40453 40455 40970\nf 40453 40970 40967\nf 40454 40965 40968\nf 40454 40968 40456\nf 40455 40457 40972\nf 40455 40972 40970\nf 40456 40968 40971\nf 40456 40971 40459\nf 40457 40458 40973\nf 40457 40973 40972\nf 40458 40460 40973\nf 40459 40971 40975\nf 40459 40975 40461\nf 40460 40462 40978\nf 40460 40976 40973\nf 40460 40978 40976\nf 40461 40975 40977\nf 40461 40977 40463\nf 40462 40464 40980\nf 40462 40980 40978\nf 40463 40977 40979\nf 40463 40979 40466\nf 40464 40465 40980\nf 40465 40467 40983\nf 40465 40981 40980\nf 40465 40983 40981\nf 40466 40979 40982\nf 40466 40982 40468\nf 40467 40469 40986\nf 40467 40986 40983\nf 40468 40982 40985\nf 40468 40985 40470\nf 40469 40471 40989\nf 40469 40989 40986\nf 40470 40985 40988\nf 40470 40988 40472\nf 40471 40473 40991\nf 40471 40991 40989\nf 40472 40988 40990\nf 40472 40990 40474\nf 40473 40475 40993\nf 40473 40993 40991\nf 40474 40990 40992\nf 40474 40992 40476\nf 40475 40477 40995\nf 40475 40995 40993\nf 40476 40992 40994\nf 40476 40994 40478\nf 40477 40479 40997\nf 40477 40997 40995\nf 40478 40994 40996\nf 40478 40996 40480\nf 40479 40481 40999\nf 40479 40999 40997\nf 40480 40996 40998\nf 40480 40998 40482\nf 40481 40483 41001\nf 40481 41001 40999\nf 40482 40998 41000\nf 40482 41000 40484\nf 40483 40485 41003\nf 40483 41003 41001\nf 40484 41000 41002\nf 40484 41002 40487\nf 40485 40486 41003\nf 40486 40489 41007\nf 40486 41004 41003\nf 40486 41007 41004\nf 40487 41002 41005\nf 40487 41005 41006\nf 40487 41006 40488\nf 40488 41006 40491\nf 40489 40490 41012\nf 40489 41012 41007\nf 40490 40492 40494\nf 40490 40494 41012\nf 40491 41006 41009\nf 40491 41009 41011\nf 40491 41011 40493\nf 40492 40493 40494\nf 40493 41011 41013\nf 40493 41013 40494\nf 40494 41013 41012\nf 40495 40496 41015\nf 40495 40498 40497\nf 40495 41015 41016\nf 40495 41016 40498\nf 40496 40499 41015\nf 40497 40498 41019\nf 40497 41019 40500\nf 40498 41016 41017\nf 40498 41017 41019\nf 40499 40501 41020\nf 40499 41018 41015\nf 40499 41020 41018\nf 40500 41019 40502\nf 40501 40504 41023\nf 40501 41023 41020\nf 40502 41019 41021\nf 40502 41021 40503\nf 40503 41021 41022\nf 40503 41022 41025\nf 40503 41025 40506\nf 40504 40505 41024\nf 40504 41024 41023\nf 40505 40507 41024\nf 40506 41025 40508\nf 40507 40509 41029\nf 40507 41027 41024\nf 40507 41029 41027\nf 40508 41025 41028\nf 40508 41028 40510\nf 40509 40511 41031\nf 40509 41031 41029\nf 40510 41028 41030\nf 40510 41030 40512\nf 40511 40514 41034\nf 40511 41034 41031\nf 40512 41030 41032\nf 40512 41032 40513\nf 40513 41032 41033\nf 40513 41033 41035\nf 40513 41035 40515\nf 40514 40516 41036\nf 40514 41036 41034\nf 40515 41035 40517\nf 40516 40518 41038\nf 40516 41038 41036\nf 40517 41035 41037\nf 40517 41037 40519\nf 40518 40520 41040\nf 40518 41040 41038\nf 40519 41037 41039\nf 40519 41039 40521\nf 40520 40522 41042\nf 40520 41042 41040\nf 40521 41039 41041\nf 40521 41041 40523\nf 40522 40525 41045\nf 40522 41045 41042\nf 40523 41041 41043\nf 40523 41043 40524\nf 40524 41043 41044\nf 40524 41044 41046\nf 40524 41046 40526\nf 40525 40527 41047\nf 40525 41047 41045\nf 40526 41046 40528\nf 40527 40529 41049\nf 40527 41049 41047\nf 40528 41046 41048\nf 40528 41048 40531\nf 40529 40530 41049\nf 40530 40532 41052\nf 40530 41050 41049\nf 40530 41052 41050\nf 40531 41048 41051\nf 40531 41051 40533\nf 40532 40534 41054\nf 40532 41054 41052\nf 40533 41051 41053\nf 40533 41053 40535\nf 40534 40536 41056\nf 40534 41056 41054\nf 40535 41053 41055\nf 40535 41055 40538\nf 40536 40537 41056\nf 40537 40539 41059\nf 40537 41057 41056\nf 40537 41059 41057\nf 40538 41055 41058\nf 40538 41058 40541\nf 40539 40540 41059\nf 40540 40542 41062\nf 40540 41060 41059\nf 40540 41062 41060\nf 40541 41058 41061\nf 40541 41061 40543\nf 40542 40546 41066\nf 40542 41066 41062\nf 40543 41061 41063\nf 40543 41063 41064\nf 40543 41064 40544\nf 40544 41064 41065\nf 40544 41065 40545\nf 40545 41065 41067\nf 40545 41067 40547\nf 40546 40547 41066\nf 40547 41067 41066\nf 40548 40549 41069\nf 40548 40554 40552\nf 40548 41068 40554\nf 40548 41069 41068\nf 40549 40555 40556\nf 40549 40556 41069\nf 40550 40551 41070\nf 40550 41070 41080\nf 40550 41080 40562\nf 40551 40553 41072\nf 40551 41072 41070\nf 40552 40554 40553\nf 40553 40554 41071\nf 40553 41071 41072\nf 40554 41068 41071\nf 40555 40557 41074\nf 40555 41074 40556\nf 40556 41073 41069\nf 40556 41074 41073\nf 40557 40558 41075\nf 40557 41075 41074\nf 40558 40559 41076\nf 40558 41076 41075\nf 40559 40564 41077\nf 40559 41077 41076\nf 40560 40561 41078\nf 40560 41078 41086\nf 40560 41086 40566\nf 40561 40563 41079\nf 40561 41079 41078\nf 40562 41080 40563\nf 40563 41080 41081\nf 40563 41081 41079\nf 40564 40565 41084\nf 40564 41083 41077\nf 40564 41084 41083\nf 40565 40568 41085\nf 40565 41085 41084\nf 40566 41086 40567\nf 40567 41086 41087\nf 40567 41087 41092\nf 40567 41092 40572\nf 40568 40569 40570\nf 40568 40570 41085\nf 40569 40571 41091\nf 40569 41091 40570\nf 40570 41089 41085\nf 40570 41091 41089\nf 40571 40573 41091\nf 40572 41092 40575\nf 40573 40574 41095\nf 40573 41094 41091\nf 40573 41095 41094\nf 40574 40578 41095\nf 40575 41092 41096\nf 40575 41096 41097\nf 40575 41097 40576\nf 40576 41097 41098\nf 40576 41098 40577\nf 40577 41098 40579\nf 40578 40582 41104\nf 40578 41099 41095\nf 40578 41104 41099\nf 40579 41098 41101\nf 40579 41101 41102\nf 40579 41102 40580\nf 40580 41102 41103\nf 40580 41103 40581\nf 40581 41103 40583\nf 40582 40586 41108\nf 40582 41108 41104\nf 40583 41103 41105\nf 40583 41105 41106\nf 40583 41106 40584\nf 40584 41106 41107\nf 40584 41107 40585\nf 40585 41107 40587\nf 40586 40590 41113\nf 40586 41113 41108\nf 40587 41107 41109\nf 40587 41109 41111\nf 40587 41111 40588\nf 40588 41111 41112\nf 40588 41112 40589\nf 40589 41112 40592\nf 40590 40591 41113\nf 40591 40599 41122\nf 40591 41114 41113\nf 40591 41122 41114\nf 40592 41112 41115\nf 40592 41115 41116\nf 40592 41116 40593\nf 40593 41116 41117\nf 40593 41117 40594\nf 40594 41117 41118\nf 40594 41118 40595\nf 40595 41118 41119\nf 40595 41119 40596\nf 40596 41119 41120\nf 40596 41120 40597\nf 40597 41120 41121\nf 40597 41121 40598\nf 40598 41121 41123\nf 40598 41123 40600\nf 40599 40600 41122\nf 40600 41123 41122\nf 40601 40602 41124\nf 40601 41124 41132\nf 40601 41132 40609\nf 40602 40603 41125\nf 40602 41125 41124\nf 40603 40610 41126\nf 40603 41126 41125\nf 40604 40605 41127\nf 40604 41127 41134\nf 40604 41134 40611\nf 40605 40606 41128\nf 40605 41128 41127\nf 40606 40607 41129\nf 40606 41129 41128\nf 40607 40608 41130\nf 40607 41130 41129\nf 40608 40612 41131\nf 40608 41131 41130\nf 40609 41132 40614\nf 40610 40616 41139\nf 40610 41133 41126\nf 40610 41139 41133\nf 40611 41134 40618\nf 40612 40613 41136\nf 40612 41135 41131\nf 40612 41136 41135\nf 40613 40619 41136\nf 40614 41132 41137\nf 40614 41137 40615\nf 40615 41137 41138\nf 40615 41138 41143\nf 40615 41143 40620\nf 40616 40617 41140\nf 40616 41140 41139\nf 40617 40621 41140\nf 40618 41134 41141\nf 40618 41141 40622\nf 40619 40623 41146\nf 40619 41142 41136\nf 40619 41146 41142\nf 40620 41143 40625\nf 40621 40626 41149\nf 40621 41144 41140\nf 40621 41149 41144\nf 40622 41141 41145\nf 40622 41145 40627\nf 40623 40624 41147\nf 40623 41147 41146\nf 40624 40628 41147\nf 40625 41143 41148\nf 40625 41148 40629\nf 40626 40630 41153\nf 40626 41153 41149\nf 40627 41145 41150\nf 40627 41150 40631\nf 40628 40633 41156\nf 40628 41151 41147\nf 40628 41156 41151\nf 40629 41148 41152\nf 40629 41152 40634\nf 40630 40635 41158\nf 40630 41158 41153\nf 40631 41150 41154\nf 40631 41154 40632\nf 40632 41154 41155\nf 40632 41155 41159\nf 40632 41159 40636\nf 40633 40637 41160\nf 40633 41160 41156\nf 40634 41152 41157\nf 40634 41157 40638\nf 40635 40639 41162\nf 40635 41162 41158\nf 40636 41159 40640\nf 40637 40641 41164\nf 40637 41164 41160\nf 40638 41157 41161\nf 40638 41161 40642\nf 40639 40643 41166\nf 40639 41166 41162\nf 40640 41159 41163\nf 40640 41163 40644\nf 40641 40645 41168\nf 40641 41168 41164\nf 40642 41161 41165\nf 40642 41165 40646\nf 40643 40647 41170\nf 40643 41170 41166\nf 40644 41163 41167\nf 40644 41167 40648\nf 40645 40649 41172\nf 40645 41172 41168\nf 40646 41165 41169\nf 40646 41169 40650\nf 40647 40651 41174\nf 40647 41174 41170\nf 40648 41167 41171\nf 40648 41171 40653\nf 40649 40655 41178\nf 40649 41178 41172\nf 40650 41169 41173\nf 40650 41173 40656\nf 40651 40652 41175\nf 40651 41175 41174\nf 40652 40657 41175\nf 40653 41171 41176\nf 40653 41176 40654\nf 40654 41176 41177\nf 40654 41177 41186\nf 40654 41186 40663\nf 40655 40665 41188\nf 40655 41188 41178\nf 40656 41173 41179\nf 40656 41179 40666\nf 40657 40658 41181\nf 40657 41180 41175\nf 40657 41181 41180\nf 40658 40659 41181\nf 40659 40660 41182\nf 40659 41182 41181\nf 40660 40661 41183\nf 40660 41183 41182\nf 40661 40667 41184\nf 40661 41184 41183\nf 40662 40664 41185\nf 40662 41185 41272\nf 40662 41272 40749\nf 40663 41186 40664\nf 40664 41186 41187\nf 40664 41187 41185\nf 40665 40751 41274\nf 40665 41274 41188\nf 40666 41179 41189\nf 40666 41189 40753\nf 40667 40668 41191\nf 40667 41190 41184\nf 40667 41191 41190\nf 40668 40669 41191\nf 40669 40670 41192\nf 40669 41192 41191\nf 40670 40671 41193\nf 40670 41193 41192\nf 40671 40672 41194\nf 40671 41194 41193\nf 40672 40673 41195\nf 40672 41195 41194\nf 40673 40674 41196\nf 40673 41196 41195\nf 40674 40675 41197\nf 40674 41197 41196\nf 40675 40676 41198\nf 40675 41198 41197\nf 40676 40677 41199\nf 40676 41199 41198\nf 40677 40678 41200\nf 40677 41200 41199\nf 40678 40679 41201\nf 40678 41201 41200\nf 40679 40680 41202\nf 40679 41202 41201\nf 40680 40681 41203\nf 40680 41203 41202\nf 40681 40682 41204\nf 40681 41204 41203\nf 40682 40683 41205\nf 40682 41205 41204\nf 40683 40684 41206\nf 40683 41206 41205\nf 40684 40685 41207\nf 40684 41207 41206\nf 40685 40686 41208\nf 40685 41208 41207\nf 40686 40687 41209\nf 40686 41209 41208\nf 40687 40688 41210\nf 40687 41210 41209\nf 40688 40689 41211\nf 40688 41211 41210\nf 40689 40690 41212\nf 40689 41212 41211\nf 40690 40691 41213\nf 40690 41213 41212\nf 40691 40692 41214\nf 40691 41214 41213\nf 40692 40693 41215\nf 40692 41215 41214\nf 40693 40694 41216\nf 40693 41216 41215\nf 40694 40695 41217\nf 40694 41217 41216\nf 40695 40696 41218\nf 40695 41218 41217\nf 40696 40697 41219\nf 40696 41219 41218\nf 40697 40698 41220\nf 40697 41220 41219\nf 40698 40699 41221\nf 40698 41221 41220\nf 40699 40700 41222\nf 40699 41222 41221\nf 40700 40701 41223\nf 40700 41223 41222\nf 40701 40702 41224\nf 40701 41224 41223\nf 40702 40703 41225\nf 40702 41225 41224\nf 40703 40704 41226\nf 40703 41226 41225\nf 40704 40705 41227\nf 40704 41227 41226\nf 40705 40706 41228\nf 40705 41228 41227\nf 40706 40707 41229\nf 40706 41229 41228\nf 40707 40708 41230\nf 40707 41230 41229\nf 40708 40709 41231\nf 40708 41231 41230\nf 40709 40710 41232\nf 40709 41232 41231\nf 40710 40711 41233\nf 40710 41233 41232\nf 40711 40712 41234\nf 40711 41234 41233\nf 40712 40713 41235\nf 40712 41235 41234\nf 40713 40714 41236\nf 40713 41236 41235\nf 40714 40715 41237\nf 40714 41237 41236\nf 40715 40716 41238\nf 40715 41238 41237\nf 40716 40717 41239\nf 40716 41239 41238\nf 40717 40718 41240\nf 40717 41240 41239\nf 40718 40719 41241\nf 40718 41241 41240\nf 40719 40720 41242\nf 40719 41242 41241\nf 40720 40721 41243\nf 40720 41243 41242\nf 40721 40722 41244\nf 40721 41244 41243\nf 40722 40723 41245\nf 40722 41245 41244\nf 40723 40724 41246\nf 40723 41246 41245\nf 40724 40725 41247\nf 40724 41247 41246\nf 40725 40726 41248\nf 40725 41248 41247\nf 40726 40727 41249\nf 40726 41249 41248\nf 40727 40728 41250\nf 40727 41250 41249\nf 40728 40729 41251\nf 40728 41251 41250\nf 40729 40730 41252\nf 40729 41252 41251\nf 40730 40731 41253\nf 40730 41253 41252\nf 40731 40732 41254\nf 40731 41254 41253\nf 40732 40733 41255\nf 40732 41255 41254\nf 40733 40734 41256\nf 40733 41256 41255\nf 40734 40735 41257\nf 40734 41257 41256\nf 40735 40736 41258\nf 40735 41258 41257\nf 40736 40737 41259\nf 40736 41259 41258\nf 40737 40738 41260\nf 40737 41260 41259\nf 40738 40739 41261\nf 40738 41261 41260\nf 40739 40740 41262\nf 40739 41262 41261\nf 40740 40741 41263\nf 40740 41263 41262\nf 40741 40742 41264\nf 40741 41264 41263\nf 40742 40743 41265\nf 40742 41265 41264\nf 40743 40744 41266\nf 40743 41266 41265\nf 40744 40745 41267\nf 40744 41267 41266\nf 40745 40746 41268\nf 40745 41268 41267\nf 40746 40747 41269\nf 40746 41269 41268\nf 40747 40748 41270\nf 40747 41270 41269\nf 40748 40750 41271\nf 40748 41271 41270\nf 40749 41272 40750\nf 40750 41272 41273\nf 40750 41273 41271\nf 40751 40752 41274\nf 40752 40754 41277\nf 40752 41275 41274\nf 40752 41277 41275\nf 40753 41189 41276\nf 40753 41276 40755\nf 40754 40757 41280\nf 40754 41280 41277\nf 40755 41276 41278\nf 40755 41278 41279\nf 40755 41279 40756\nf 40756 41279 40758\nf 40757 40759 41282\nf 40757 41282 41280\nf 40758 41279 41281\nf 40758 41281 40761\nf 40759 40760 41282\nf 40760 40762 41285\nf 40760 41283 41282\nf 40760 41285 41283\nf 40761 41281 41284\nf 40761 41284 40764\nf 40762 40763 41285\nf 40763 40770 41294\nf 40763 41286 41285\nf 40763 41294 41286\nf 40764 41284 41287\nf 40764 41287 41288\nf 40764 41288 40765\nf 40765 41288 40772\nf 40766 40861 41386\nf 40766 41290 41291\nf 40766 41291 40767\nf 40766 41386 41290\nf 40767 41291 41292\nf 40767 41292 40768\nf 40768 41292 41293\nf 40768 41293 40769\nf 40769 41293 41295\nf 40769 41295 40771\nf 40770 40771 41294\nf 40771 41295 41294\nf 40772 41288 41296\nf 40772 41296 41297\nf 40772 41297 40773\nf 40773 41297 41299\nf 40773 41299 40774\nf 40774 41299 40863\nf 40775 40867 41393\nf 40775 41300 41301\nf 40775 41301 40776\nf 40775 41393 41300\nf 40776 41301 41302\nf 40776 41302 40777\nf 40777 41302 41303\nf 40777 41303 40778\nf 40778 41303 41304\nf 40778 41304 40779\nf 40779 41304 41305\nf 40779 41305 40780\nf 40780 41305 41306\nf 40780 41306 40781\nf 40781 41306 41307\nf 40781 41307 40782\nf 40782 41307 41308\nf 40782 41308 40783\nf 40783 41308 41309\nf 40783 41309 40784\nf 40784 41309 41310\nf 40784 41310 40785\nf 40785 41310 41311\nf 40785 41311 40786\nf 40786 41311 41312\nf 40786 41312 40787\nf 40787 41312 41313\nf 40787 41313 40788\nf 40788 41313 41314\nf 40788 41314 40789\nf 40789 41314 41315\nf 40789 41315 40790\nf 40790 41315 41316\nf 40790 41316 40791\nf 40791 41316 41317\nf 40791 41317 40792\nf 40792 41317 41318\nf 40792 41318 40793\nf 40793 41318 41319\nf 40793 41319 40794\nf 40794 41319 41320\nf 40794 41320 40795\nf 40795 41320 41321\nf 40795 41321 40796\nf 40796 41321 41322\nf 40796 41322 40797\nf 40797 41322 41323\nf 40797 41323 40798\nf 40798 41323 41324\nf 40798 41324 40799\nf 40799 41324 41325\nf 40799 41325 40800\nf 40800 41325 41326\nf 40800 41326 40801\nf 40801 41326 41327\nf 40801 41327 40802\nf 40802 41327 41328\nf 40802 41328 40803\nf 40803 41328 41329\nf 40803 41329 40804\nf 40804 41329 41330\nf 40804 41330 40805\nf 40805 41330 41331\nf 40805 41331 40806\nf 40806 41331 41332\nf 40806 41332 40807\nf 40807 41332 41333\nf 40807 41333 40808\nf 40808 41333 41334\nf 40808 41334 40809\nf 40809 41334 41335\nf 40809 41335 40810\nf 40810 41335 41336\nf 40810 41336 40811\nf 40811 41336 41337\nf 40811 41337 40812\nf 40812 41337 41338\nf 40812 41338 40813\nf 40813 41338 41339\nf 40813 41339 40814\nf 40814 41339 41340\nf 40814 41340 40815\nf 40815 41340 41341\nf 40815 41341 40816\nf 40816 41341 41342\nf 40816 41342 40817\nf 40817 41342 41343\nf 40817 41343 40818\nf 40818 41343 41344\nf 40818 41344 40819\nf 40819 41344 41345\nf 40819 41345 40820\nf 40820 41345 41346\nf 40820 41346 40821\nf 40821 41346 41347\nf 40821 41347 40822\nf 40822 41347 41348\nf 40822 41348 40823\nf 40823 41348 41349\nf 40823 41349 40824\nf 40824 41349 41350\nf 40824 41350 40825\nf 40825 41350 41351\nf 40825 41351 40826\nf 40826 41351 41352\nf 40826 41352 40827\nf 40827 41352 41353\nf 40827 41353 40828\nf 40828 41353 41354\nf 40828 41354 40829\nf 40829 41354 41355\nf 40829 41355 40830\nf 40830 41355 41356\nf 40830 41356 40831\nf 40831 41356 41357\nf 40831 41357 40832\nf 40832 41357 41358\nf 40832 41358 40833\nf 40833 41358 41359\nf 40833 41359 40834\nf 40834 41359 41360\nf 40834 41360 40835\nf 40835 41360 41361\nf 40835 41361 40836\nf 40836 41361 41362\nf 40836 41362 40837\nf 40837 41362 41363\nf 40837 41363 40838\nf 40838 41363 41364\nf 40838 41364 40839\nf 40839 41364 41365\nf 40839 41365 40840\nf 40840 41365 41366\nf 40840 41366 40841\nf 40841 41366 41367\nf 40841 41367 40842\nf 40842 41367 41368\nf 40842 41368 40843\nf 40843 41368 41369\nf 40843 41369 40844\nf 40844 41369 41370\nf 40844 41370 40845\nf 40845 41370 41371\nf 40845 41371 40846\nf 40846 41371 41372\nf 40846 41372 40847\nf 40847 41372 41373\nf 40847 41373 40848\nf 40848 41373 41374\nf 40848 41374 40849\nf 40849 41374 41375\nf 40849 41375 40850\nf 40850 41375 41376\nf 40850 41376 40851\nf 40851 41376 41377\nf 40851 41377 40852\nf 40852 41377 41378\nf 40852 41378 40853\nf 40853 41378 41379\nf 40853 41379 40854\nf 40854 41379 41380\nf 40854 41380 40855\nf 40855 41380 41381\nf 40855 41381 40856\nf 40856 41381 41382\nf 40856 41382 40857\nf 40857 41382 41383\nf 40857 41383 40858\nf 40858 41383 41384\nf 40858 41384 40859\nf 40859 41384 41385\nf 40859 41385 40860\nf 40860 41385 41387\nf 40860 41387 40862\nf 40861 40862 41386\nf 40862 41387 41386\nf 40863 41299 41388\nf 40863 41388 41389\nf 40863 41389 40864\nf 40864 41389 41391\nf 40864 41391 40865\nf 40865 41391 41392\nf 40865 41392 40866\nf 40866 41392 41394\nf 40866 41394 40868\nf 40867 40868 41393\nf 40868 41394 41393\nf 40869 40873 40871\nf 40869 40874 41398\nf 40869 41396 40873\nf 40869 41397 41396\nf 40869 41398 41397\nf 40870 40872 41401\nf 40870 40879 40877\nf 40870 41399 40879\nf 40870 41401 41399\nf 40871 40873 40872\nf 40872 40873 41400\nf 40872 41400 41401\nf 40873 41396 41400\nf 40874 40875 40876\nf 40874 40876 41398\nf 40875 40880 40876\nf 40876 40880 41403\nf 40876 41403 41398\nf 40877 40879 40878\nf 40878 40879 41404\nf 40878 41404 40881\nf 40879 41399 41404\nf 40880 40883 41406\nf 40880 41406 41403\nf 40881 41404 41408\nf 40881 41408 40882\nf 40882 41408 41409\nf 40882 41409 41412\nf 40882 41412 40886\nf 40883 40884 40885\nf 40883 40885 41407\nf 40883 41407 41406\nf 40884 40887 40885\nf 40885 40887 41410\nf 40885 41410 41407\nf 40886 41412 40888\nf 40887 40889 41415\nf 40887 41413 41410\nf 40887 41415 41413\nf 40888 41412 41414\nf 40888 41414 40890\nf 40889 40891 41417\nf 40889 41417 41415\nf 40890 41414 41416\nf 40890 41416 40892\nf 40891 40893 41417\nf 40892 41416 41419\nf 40892 41419 40895\nf 40893 40894 41418\nf 40893 40896 40894\nf 40893 41418 41417\nf 40894 40896 40897\nf 40894 40897 41422\nf 40894 41420 41418\nf 40894 41422 41420\nf 40895 41419 41421\nf 40895 41421 40898\nf 40896 40899 41425\nf 40896 41425 40897\nf 40897 41423 41422\nf 40897 41425 41423\nf 40898 41421 41424\nf 40898 41424 40900\nf 40899 40901 41425\nf 40900 41424 41428\nf 40900 41428 40903\nf 40901 40902 41426\nf 40901 40904 40902\nf 40901 41426 41425\nf 40902 40904 40905\nf 40902 40905 41431\nf 40902 41429 41426\nf 40902 41431 41429\nf 40903 41428 41430\nf 40903 41430 40906\nf 40904 40907 41434\nf 40904 41434 40905\nf 40905 41432 41431\nf 40905 41434 41432\nf 40906 41430 41433\nf 40906 41433 40908\nf 40907 40909 41436\nf 40907 41436 41434\nf 40908 41433 41435\nf 40908 41435 40910\nf 40909 40911 41438\nf 40909 41438 41436\nf 40910 41435 41437\nf 40910 41437 40912\nf 40911 40914 41441\nf 40911 41441 41438\nf 40912 41437 41439\nf 40912 41439 41440\nf 40912 41440 40913\nf 40913 41440 40915\nf 40914 40916 41443\nf 40914 41443 41441\nf 40915 41440 41442\nf 40915 41442 40917\nf 40916 40918 41445\nf 40916 41445 41443\nf 40917 41442 41444\nf 40917 41444 40920\nf 40918 40919 41445\nf 40919 40921 41448\nf 40919 41446 41445\nf 40919 41448 41446\nf 40920 41444 41447\nf 40920 41447 40922\nf 40921 40923 41451\nf 40921 41451 41448\nf 40922 41447 41450\nf 40922 41450 40924\nf 40923 40925 41455\nf 40923 41455 41451\nf 40924 41450 41452\nf 40924 41452 40926\nf 40925 40929 41457\nf 40925 41457 41455\nf 40926 40928 40927\nf 40926 41452 41453\nf 40926 41453 40928\nf 40927 40928 40931\nf 40928 41453 41456\nf 40928 41456 40931\nf 40929 40930 41457\nf 40930 40932 41460\nf 40930 41458 41457\nf 40930 41460 41458\nf 40931 41456 41459\nf 40931 41459 40933\nf 40932 40935 41463\nf 40932 41463 41460\nf 40933 41459 41461\nf 40933 41461 41462\nf 40933 41462 40934\nf 40934 41462 40937\nf 40935 40936 41463\nf 40936 40938 41466\nf 40936 41464 41463\nf 40936 41466 41464\nf 40937 41462 41465\nf 40937 41465 41467\nf 40937 41467 40939\nf 40938 40939 41466\nf 40939 41467 41466\nf 40940 40941 41470\nf 40940 40942 41472\nf 40940 41470 40943\nf 40940 41472 40941\nf 40941 41469 41470\nf 40941 41471 41469\nf 40941 41472 41471\nf 40942 40945 41472\nf 40943 41470 41474\nf 40943 41474 40944\nf 40944 41474 41475\nf 40944 41475 41477\nf 40944 41477 40946\nf 40945 40947 41478\nf 40945 41476 41472\nf 40945 41478 41476\nf 40946 41477 40948\nf 40947 40949 41480\nf 40947 41480 41478\nf 40948 41477 41479\nf 40948 41479 40950\nf 40949 40951 41483\nf 40949 41483 41480\nf 40950 41479 41482\nf 40950 41482 40952\nf 40951 40953 41486\nf 40951 41486 41483\nf 40952 41482 41485\nf 40952 41485 40954\nf 40953 40955 41488\nf 40953 41488 41486\nf 40954 41485 41487\nf 40954 41487 40956\nf 40955 40957 41490\nf 40955 41490 41488\nf 40956 41487 41489\nf 40956 41489 40958\nf 40957 40959 41492\nf 40957 41492 41490\nf 40958 41489 41491\nf 40958 41491 40960\nf 40959 40961 41494\nf 40959 41494 41492\nf 40960 41491 41493\nf 40960 41493 40962\nf 40961 40964 41496\nf 40961 41496 41494\nf 40962 41493 41495\nf 40962 41495 41497\nf 40962 41497 40963\nf 40963 40966 40965\nf 40963 41497 40966\nf 40964 40967 41498\nf 40964 41498 41496\nf 40965 40966 40968\nf 40966 40969 40968\nf 40966 41497 41499\nf 40966 41499 40969\nf 40967 40970 41502\nf 40967 41502 41498\nf 40968 40969 41505\nf 40968 41505 40971\nf 40969 41499 41500\nf 40969 41500 41505\nf 40970 40972 41502\nf 40971 41505 40975\nf 40972 40973 40974\nf 40972 40974 41503\nf 40972 41503 41502\nf 40973 40976 40974\nf 40974 40976 41506\nf 40974 41506 41503\nf 40975 41505 41507\nf 40975 41507 40977\nf 40976 40978 41510\nf 40976 41508 41506\nf 40976 41510 41508\nf 40977 41507 41509\nf 40977 41509 40979\nf 40978 40980 41512\nf 40978 41512 41510\nf 40979 41509 41511\nf 40979 41511 40982\nf 40980 40981 41514\nf 40980 41514 41512\nf 40981 40983 40984\nf 40981 40984 41514\nf 40982 41511 41513\nf 40982 41513 40985\nf 40983 40986 40984\nf 40984 40986 40987\nf 40984 40987 41516\nf 40984 41516 41514\nf 40985 41513 41515\nf 40985 41515 40988\nf 40986 40989 41519\nf 40986 41519 40987\nf 40987 41517 41516\nf 40987 41519 41517\nf 40988 41515 41518\nf 40988 41518 40990\nf 40989 40991 41521\nf 40989 41521 41519\nf 40990 41518 41520\nf 40990 41520 40992\nf 40991 40993 41523\nf 40991 41523 41521\nf 40992 41520 41522\nf 40992 41522 40994\nf 40993 40995 41525\nf 40993 41525 41523\nf 40994 41522 41524\nf 40994 41524 40996\nf 40995 40997 41527\nf 40995 41527 41525\nf 40996 41524 41526\nf 40996 41526 40998\nf 40997 40999 41529\nf 40997 41529 41527\nf 40998 41526 41528\nf 40998 41528 41000\nf 40999 41001 41531\nf 40999 41531 41529\nf 41000 41528 41530\nf 41000 41530 41002\nf 41001 41003 41533\nf 41001 41533 41531\nf 41002 41530 41532\nf 41002 41532 41005\nf 41003 41004 41535\nf 41003 41535 41533\nf 41004 41007 41008\nf 41004 41008 41535\nf 41005 41010 41006\nf 41005 41532 41534\nf 41005 41534 41537\nf 41005 41537 41010\nf 41006 41010 41009\nf 41007 41012 41539\nf 41007 41539 41008\nf 41008 41536 41535\nf 41008 41539 41536\nf 41009 41010 41011\nf 41010 41537 41538\nf 41010 41538 41011\nf 41011 41014 41542\nf 41011 41538 41014\nf 41011 41540 41013\nf 41011 41542 41540\nf 41012 41013 41539\nf 41013 41540 41539\nf 41014 41538 41541\nf 41014 41541 41543\nf 41014 41543 41542\nf 41015 41018 41545\nf 41015 41545 41546\nf 41015 41546 41016\nf 41016 41546 41017\nf 41017 41546 41547\nf 41017 41547 41549\nf 41017 41549 41019\nf 41018 41020 41550\nf 41018 41548 41545\nf 41018 41550 41548\nf 41019 41549 41021\nf 41020 41023 41552\nf 41020 41552 41550\nf 41021 41549 41551\nf 41021 41551 41554\nf 41021 41554 41022\nf 41022 41026 41025\nf 41022 41554 41026\nf 41023 41024 41553\nf 41023 41553 41552\nf 41024 41027 41553\nf 41025 41026 41557\nf 41025 41557 41028\nf 41026 41554 41555\nf 41026 41555 41557\nf 41027 41029 41558\nf 41027 41556 41553\nf 41027 41558 41556\nf 41028 41557 41030\nf 41029 41031 41560\nf 41029 41560 41558\nf 41030 41557 41559\nf 41030 41559 41032\nf 41031 41034 41563\nf 41031 41563 41560\nf 41032 41559 41561\nf 41032 41561 41033\nf 41033 41561 41562\nf 41033 41562 41564\nf 41033 41564 41035\nf 41034 41036 41565\nf 41034 41565 41563\nf 41035 41564 41037\nf 41036 41038 41567\nf 41036 41567 41565\nf 41037 41564 41566\nf 41037 41566 41039\nf 41038 41040 41569\nf 41038 41569 41567\nf 41039 41566 41568\nf 41039 41568 41041\nf 41040 41042 41571\nf 41040 41571 41569\nf 41041 41568 41570\nf 41041 41570 41043\nf 41042 41045 41574\nf 41042 41574 41571\nf 41043 41570 41572\nf 41043 41572 41044\nf 41044 41572 41573\nf 41044 41573 41575\nf 41044 41575 41046\nf 41045 41047 41576\nf 41045 41576 41574\nf 41046 41575 41048\nf 41047 41049 41578\nf 41047 41578 41576\nf 41048 41575 41577\nf 41048 41577 41051\nf 41049 41050 41578\nf 41050 41052 41581\nf 41050 41579 41578\nf 41050 41581 41579\nf 41051 41577 41580\nf 41051 41580 41053\nf 41052 41054 41583\nf 41052 41583 41581\nf 41053 41580 41582\nf 41053 41582 41055\nf 41054 41056 41585\nf 41054 41585 41583\nf 41055 41582 41584\nf 41055 41584 41058\nf 41056 41057 41585\nf 41057 41059 41588\nf 41057 41586 41585\nf 41057 41588 41586\nf 41058 41584 41587\nf 41058 41587 41061\nf 41059 41060 41588\nf 41060 41062 41591\nf 41060 41589 41588\nf 41060 41591 41589\nf 41061 41587 41590\nf 41061 41590 41063\nf 41062 41066 41595\nf 41062 41595 41591\nf 41063 41590 41592\nf 41063 41592 41593\nf 41063 41593 41064\nf 41064 41593 41594\nf 41064 41594 41065\nf 41065 41594 41596\nf 41065 41596 41067\nf 41066 41067 41595\nf 41067 41596 41595\nf 41068 41069 41598\nf 41068 41598 41602\nf 41068 41602 41071\nf 41069 41073 41599\nf 41069 41599 41598\nf 41070 41072 41601\nf 41070 41082 41080\nf 41070 41600 41082\nf 41070 41601 41600\nf 41071 41602 41072\nf 41072 41602 41603\nf 41072 41603 41601\nf 41073 41074 41606\nf 41073 41605 41599\nf 41073 41606 41605\nf 41074 41075 41606\nf 41075 41076 41607\nf 41075 41607 41606\nf 41076 41077 41608\nf 41076 41608 41607\nf 41077 41083 41609\nf 41077 41609 41608\nf 41078 41079 41611\nf 41078 41088 41086\nf 41078 41610 41088\nf 41078 41611 41610\nf 41079 41081 41613\nf 41079 41613 41611\nf 41080 41082 41081\nf 41081 41082 41612\nf 41081 41612 41613\nf 41082 41600 41612\nf 41083 41084 41617\nf 41083 41615 41609\nf 41083 41617 41615\nf 41084 41085 41617\nf 41085 41089 41090\nf 41085 41090 41617\nf 41086 41088 41087\nf 41087 41088 41618\nf 41087 41618 41619\nf 41087 41619 41092\nf 41088 41610 41618\nf 41089 41091 41621\nf 41089 41621 41090\nf 41090 41620 41617\nf 41090 41621 41620\nf 41091 41094 41622\nf 41091 41622 41621\nf 41092 41093 41624\nf 41092 41619 41093\nf 41092 41624 41627\nf 41092 41627 41096\nf 41093 41619 41623\nf 41093 41623 41624\nf 41094 41095 41100\nf 41094 41100 41631\nf 41094 41625 41622\nf 41094 41631 41625\nf 41095 41099 41100\nf 41096 41627 41629\nf 41096 41629 41097\nf 41097 41629 41630\nf 41097 41630 41098\nf 41098 41630 41101\nf 41099 41104 41637\nf 41099 41632 41100\nf 41099 41637 41632\nf 41100 41632 41631\nf 41101 41630 41633\nf 41101 41633 41635\nf 41101 41635 41102\nf 41102 41635 41636\nf 41102 41636 41103\nf 41103 41636 41105\nf 41104 41108 41642\nf 41104 41642 41637\nf 41105 41636 41639\nf 41105 41639 41641\nf 41105 41641 41106\nf 41106 41641 41107\nf 41107 41110 41109\nf 41107 41641 41110\nf 41108 41113 41647\nf 41108 41647 41642\nf 41109 41110 41644\nf 41109 41644 41111\nf 41110 41641 41643\nf 41110 41643 41644\nf 41111 41644 41645\nf 41111 41645 41646\nf 41111 41646 41112\nf 41112 41646 41115\nf 41113 41114 41647\nf 41114 41122 41656\nf 41114 41648 41647\nf 41114 41656 41648\nf 41115 41646 41649\nf 41115 41649 41650\nf 41115 41650 41116\nf 41116 41650 41651\nf 41116 41651 41117\nf 41117 41651 41652\nf 41117 41652 41118\nf 41118 41652 41653\nf 41118 41653 41119\nf 41119 41653 41654\nf 41119 41654 41120\nf 41120 41654 41655\nf 41120 41655 41121\nf 41121 41655 41657\nf 41121 41657 41123\nf 41122 41123 41656\nf 41123 41657 41656\nf 41124 41125 41658\nf 41124 41658 41666\nf 41124 41666 41132\nf 41125 41126 41659\nf 41125 41659 41658\nf 41126 41133 41660\nf 41126 41660 41659\nf 41127 41128 41661\nf 41127 41661 41668\nf 41127 41668 41134\nf 41128 41129 41662\nf 41128 41662 41661\nf 41129 41130 41663\nf 41129 41663 41662\nf 41130 41131 41664\nf 41130 41664 41663\nf 41131 41135 41665\nf 41131 41665 41664\nf 41132 41666 41137\nf 41133 41139 41673\nf 41133 41667 41660\nf 41133 41673 41667\nf 41134 41668 41141\nf 41135 41136 41670\nf 41135 41669 41665\nf 41135 41670 41669\nf 41136 41142 41670\nf 41137 41666 41671\nf 41137 41671 41138\nf 41138 41671 41672\nf 41138 41672 41677\nf 41138 41677 41143\nf 41139 41140 41674\nf 41139 41674 41673\nf 41140 41144 41674\nf 41141 41668 41675\nf 41141 41675 41145\nf 41142 41146 41680\nf 41142 41676 41670\nf 41142 41680 41676\nf 41143 41677 41148\nf 41144 41149 41683\nf 41144 41678 41674\nf 41144 41683 41678\nf 41145 41675 41679\nf 41145 41679 41150\nf 41146 41147 41681\nf 41146 41681 41680\nf 41147 41151 41681\nf 41148 41677 41682\nf 41148 41682 41152\nf 41149 41153 41688\nf 41149 41688 41683\nf 41150 41679 41684\nf 41150 41684 41154\nf 41151 41156 41691\nf 41151 41685 41681\nf 41151 41691 41685\nf 41152 41682 41687\nf 41152 41687 41157\nf 41153 41158 41693\nf 41153 41693 41688\nf 41154 41684 41689\nf 41154 41689 41155\nf 41155 41689 41690\nf 41155 41690 41694\nf 41155 41694 41159\nf 41156 41160 41695\nf 41156 41695 41691\nf 41157 41687 41692\nf 41157 41692 41161\nf 41158 41162 41697\nf 41158 41697 41693\nf 41159 41694 41163\nf 41160 41164 41699\nf 41160 41699 41695\nf 41161 41692 41696\nf 41161 41696 41165\nf 41162 41166 41701\nf 41162 41701 41697\nf 41163 41694 41698\nf 41163 41698 41167\nf 41164 41168 41703\nf 41164 41703 41699\nf 41165 41696 41700\nf 41165 41700 41169\nf 41166 41170 41705\nf 41166 41705 41701\nf 41167 41698 41702\nf 41167 41702 41171\nf 41168 41172 41707\nf 41168 41707 41703\nf 41169 41700 41704\nf 41169 41704 41173\nf 41170 41174 41709\nf 41170 41709 41705\nf 41171 41702 41706\nf 41171 41706 41176\nf 41172 41178 41713\nf 41172 41713 41707\nf 41173 41704 41708\nf 41173 41708 41179\nf 41174 41175 41710\nf 41174 41710 41709\nf 41175 41180 41710\nf 41176 41706 41711\nf 41176 41711 41177\nf 41177 41711 41712\nf 41177 41712 41721\nf 41177 41721 41186\nf 41178 41188 41723\nf 41178 41723 41713\nf 41179 41708 41714\nf 41179 41714 41189\nf 41180 41181 41716\nf 41180 41715 41710\nf 41180 41716 41715\nf 41181 41182 41716\nf 41182 41183 41717\nf 41182 41717 41716\nf 41183 41184 41718\nf 41183 41718 41717\nf 41184 41190 41719\nf 41184 41719 41718\nf 41185 41187 41720\nf 41185 41720 41807\nf 41185 41807 41272\nf 41186 41721 41187\nf 41187 41721 41722\nf 41187 41722 41720\nf 41188 41274 41809\nf 41188 41809 41723\nf 41189 41714 41724\nf 41189 41724 41276\nf 41190 41191 41726\nf 41190 41725 41719\nf 41190 41726 41725\nf 41191 41192 41726\nf 41192 41193 41727\nf 41192 41727 41726\nf 41193 41194 41728\nf 41193 41728 41727\nf 41194 41195 41729\nf 41194 41729 41728\nf 41195 41196 41730\nf 41195 41730 41729\nf 41196 41197 41731\nf 41196 41731 41730\nf 41197 41198 41732\nf 41197 41732 41731\nf 41198 41199 41733\nf 41198 41733 41732\nf 41199 41200 41734\nf 41199 41734 41733\nf 41200 41201 41735\nf 41200 41735 41734\nf 41201 41202 41736\nf 41201 41736 41735\nf 41202 41203 41737\nf 41202 41737 41736\nf 41203 41204 41738\nf 41203 41738 41737\nf 41204 41205 41739\nf 41204 41739 41738\nf 41205 41206 41740\nf 41205 41740 41739\nf 41206 41207 41741\nf 41206 41741 41740\nf 41207 41208 41742\nf 41207 41742 41741\nf 41208 41209 41743\nf 41208 41743 41742\nf 41209 41210 41744\nf 41209 41744 41743\nf 41210 41211 41745\nf 41210 41745 41744\nf 41211 41212 41746\nf 41211 41746 41745\nf 41212 41213 41747\nf 41212 41747 41746\nf 41213 41214 41748\nf 41213 41748 41747\nf 41214 41215 41749\nf 41214 41749 41748\nf 41215 41216 41750\nf 41215 41750 41749\nf 41216 41217 41751\nf 41216 41751 41750\nf 41217 41218 41752\nf 41217 41752 41751\nf 41218 41219 41753\nf 41218 41753 41752\nf 41219 41220 41754\nf 41219 41754 41753\nf 41220 41221 41755\nf 41220 41755 41754\nf 41221 41222 41756\nf 41221 41756 41755\nf 41222 41223 41757\nf 41222 41757 41756\nf 41223 41224 41758\nf 41223 41758 41757\nf 41224 41225 41759\nf 41224 41759 41758\nf 41225 41226 41760\nf 41225 41760 41759\nf 41226 41227 41761\nf 41226 41761 41760\nf 41227 41228 41762\nf 41227 41762 41761\nf 41228 41229 41763\nf 41228 41763 41762\nf 41229 41230 41764\nf 41229 41764 41763\nf 41230 41231 41765\nf 41230 41765 41764\nf 41231 41232 41766\nf 41231 41766 41765\nf 41232 41233 41767\nf 41232 41767 41766\nf 41233 41234 41768\nf 41233 41768 41767\nf 41234 41235 41769\nf 41234 41769 41768\nf 41235 41236 41770\nf 41235 41770 41769\nf 41236 41237 41771\nf 41236 41771 41770\nf 41237 41238 41772\nf 41237 41772 41771\nf 41238 41239 41773\nf 41238 41773 41772\nf 41239 41240 41774\nf 41239 41774 41773\nf 41240 41241 41775\nf 41240 41775 41774\nf 41241 41242 41776\nf 41241 41776 41775\nf 41242 41243 41777\nf 41242 41777 41776\nf 41243 41244 41778\nf 41243 41778 41777\nf 41244 41245 41779\nf 41244 41779 41778\nf 41245 41246 41780\nf 41245 41780 41779\nf 41246 41247 41781\nf 41246 41781 41780\nf 41247 41248 41782\nf 41247 41782 41781\nf 41248 41249 41783\nf 41248 41783 41782\nf 41249 41250 41784\nf 41249 41784 41783\nf 41250 41251 41785\nf 41250 41785 41784\nf 41251 41252 41786\nf 41251 41786 41785\nf 41252 41253 41787\nf 41252 41787 41786\nf 41253 41254 41788\nf 41253 41788 41787\nf 41254 41255 41789\nf 41254 41789 41788\nf 41255 41256 41790\nf 41255 41790 41789\nf 41256 41257 41791\nf 41256 41791 41790\nf 41257 41258 41792\nf 41257 41792 41791\nf 41258 41259 41793\nf 41258 41793 41792\nf 41259 41260 41794\nf 41259 41794 41793\nf 41260 41261 41795\nf 41260 41795 41794\nf 41261 41262 41796\nf 41261 41796 41795\nf 41262 41263 41797\nf 41262 41797 41796\nf 41263 41264 41798\nf 41263 41798 41797\nf 41264 41265 41799\nf 41264 41799 41798\nf 41265 41266 41800\nf 41265 41800 41799\nf 41266 41267 41801\nf 41266 41801 41800\nf 41267 41268 41802\nf 41267 41802 41801\nf 41268 41269 41803\nf 41268 41803 41802\nf 41269 41270 41804\nf 41269 41804 41803\nf 41270 41271 41805\nf 41270 41805 41804\nf 41271 41273 41806\nf 41271 41806 41805\nf 41272 41807 41273\nf 41273 41807 41808\nf 41273 41808 41806\nf 41274 41275 41809\nf 41275 41277 41812\nf 41275 41810 41809\nf 41275 41812 41810\nf 41276 41724 41811\nf 41276 41811 41278\nf 41277 41280 41815\nf 41277 41815 41812\nf 41278 41811 41813\nf 41278 41813 41814\nf 41278 41814 41279\nf 41279 41814 41281\nf 41280 41282 41817\nf 41280 41817 41815\nf 41281 41814 41816\nf 41281 41816 41284\nf 41282 41283 41817\nf 41283 41285 41821\nf 41283 41818 41817\nf 41283 41821 41818\nf 41284 41816 41819\nf 41284 41819 41287\nf 41285 41286 41821\nf 41286 41294 41829\nf 41286 41822 41821\nf 41286 41829 41822\nf 41287 41289 41288\nf 41287 41819 41820\nf 41287 41820 41289\nf 41288 41289 41298\nf 41288 41298 41296\nf 41289 41820 41823\nf 41289 41823 41824\nf 41289 41824 41298\nf 41290 41386 41922\nf 41290 41825 41826\nf 41290 41826 41291\nf 41290 41922 41825\nf 41291 41826 41827\nf 41291 41827 41292\nf 41292 41827 41828\nf 41292 41828 41293\nf 41293 41828 41830\nf 41293 41830 41295\nf 41294 41295 41829\nf 41295 41830 41829\nf 41296 41298 41297\nf 41297 41298 41832\nf 41297 41832 41299\nf 41298 41824 41831\nf 41298 41831 41832\nf 41299 41832 41834\nf 41299 41834 41388\nf 41300 41393 41395\nf 41300 41395 41835\nf 41300 41835 41836\nf 41300 41836 41837\nf 41300 41837 41301\nf 41301 41837 41838\nf 41301 41838 41302\nf 41302 41838 41839\nf 41302 41839 41303\nf 41303 41839 41840\nf 41303 41840 41304\nf 41304 41840 41841\nf 41304 41841 41305\nf 41305 41841 41842\nf 41305 41842 41306\nf 41306 41842 41843\nf 41306 41843 41307\nf 41307 41843 41844\nf 41307 41844 41308\nf 41308 41844 41845\nf 41308 41845 41309\nf 41309 41845 41846\nf 41309 41846 41310\nf 41310 41846 41847\nf 41310 41847 41311\nf 41311 41847 41848\nf 41311 41848 41312\nf 41312 41848 41849\nf 41312 41849 41313\nf 41313 41849 41850\nf 41313 41850 41314\nf 41314 41850 41851\nf 41314 41851 41315\nf 41315 41851 41852\nf 41315 41852 41316\nf 41316 41852 41853\nf 41316 41853 41317\nf 41317 41853 41854\nf 41317 41854 41318\nf 41318 41854 41855\nf 41318 41855 41319\nf 41319 41855 41856\nf 41319 41856 41320\nf 41320 41856 41857\nf 41320 41857 41321\nf 41321 41857 41858\nf 41321 41858 41322\nf 41322 41858 41859\nf 41322 41859 41323\nf 41323 41859 41860\nf 41323 41860 41324\nf 41324 41860 41861\nf 41324 41861 41325\nf 41325 41861 41862\nf 41325 41862 41326\nf 41326 41862 41863\nf 41326 41863 41327\nf 41327 41863 41864\nf 41327 41864 41328\nf 41328 41864 41865\nf 41328 41865 41329\nf 41329 41865 41866\nf 41329 41866 41330\nf 41330 41866 41867\nf 41330 41867 41331\nf 41331 41867 41868\nf 41331 41868 41332\nf 41332 41868 41869\nf 41332 41869 41333\nf 41333 41869 41870\nf 41333 41870 41334\nf 41334 41870 41871\nf 41334 41871 41335\nf 41335 41871 41872\nf 41335 41872 41336\nf 41336 41872 41873\nf 41336 41873 41337\nf 41337 41873 41874\nf 41337 41874 41338\nf 41338 41874 41875\nf 41338 41875 41339\nf 41339 41875 41876\nf 41339 41876 41340\nf 41340 41876 41877\nf 41340 41877 41341\nf 41341 41877 41878\nf 41341 41878 41342\nf 41342 41878 41879\nf 41342 41879 41343\nf 41343 41879 41880\nf 41343 41880 41344\nf 41344 41880 41881\nf 41344 41881 41345\nf 41345 41881 41882\nf 41345 41882 41346\nf 41346 41882 41883\nf 41346 41883 41347\nf 41347 41883 41884\nf 41347 41884 41348\nf 41348 41884 41885\nf 41348 41885 41349\nf 41349 41885 41886\nf 41349 41886 41350\nf 41350 41886 41887\nf 41350 41887 41351\nf 41351 41887 41888\nf 41351 41888 41352\nf 41352 41888 41889\nf 41352 41889 41353\nf 41353 41889 41890\nf 41353 41890 41354\nf 41354 41890 41891\nf 41354 41891 41355\nf 41355 41891 41892\nf 41355 41892 41356\nf 41356 41892 41893\nf 41356 41893 41357\nf 41357 41893 41894\nf 41357 41894 41358\nf 41358 41894 41895\nf 41358 41895 41359\nf 41359 41895 41896\nf 41359 41896 41360\nf 41360 41896 41897\nf 41360 41897 41361\nf 41361 41897 41898\nf 41361 41898 41362\nf 41362 41898 41899\nf 41362 41899 41363\nf 41363 41899 41900\nf 41363 41900 41364\nf 41364 41900 41901\nf 41364 41901 41365\nf 41365 41901 41902\nf 41365 41902 41366\nf 41366 41902 41903\nf 41366 41903 41367\nf 41367 41903 41904\nf 41367 41904 41368\nf 41368 41904 41905\nf 41368 41905 41369\nf 41369 41905 41906\nf 41369 41906 41370\nf 41370 41906 41907\nf 41370 41907 41371\nf 41371 41907 41908\nf 41371 41908 41372\nf 41372 41908 41909\nf 41372 41909 41373\nf 41373 41909 41910\nf 41373 41910 41374\nf 41374 41910 41911\nf 41374 41911 41375\nf 41375 41911 41912\nf 41375 41912 41376\nf 41376 41912 41913\nf 41376 41913 41377\nf 41377 41913 41914\nf 41377 41914 41378\nf 41378 41914 41915\nf 41378 41915 41379\nf 41379 41915 41916\nf 41379 41916 41380\nf 41380 41916 41917\nf 41380 41917 41381\nf 41381 41917 41918\nf 41381 41918 41382\nf 41382 41918 41919\nf 41382 41919 41383\nf 41383 41919 41920\nf 41383 41920 41384\nf 41384 41920 41921\nf 41384 41921 41385\nf 41385 41921 41923\nf 41385 41923 41387\nf 41386 41387 41922\nf 41387 41923 41922\nf 41388 41390 41389\nf 41388 41834 41390\nf 41389 41390 41925\nf 41389 41925 41391\nf 41390 41834 41924\nf 41390 41924 41925\nf 41391 41925 41928\nf 41391 41928 41392\nf 41392 41928 41394\nf 41393 41394 41395\nf 41394 41927 41395\nf 41394 41928 41927\nf 41395 41927 41835\nf 41396 41397 41930\nf 41396 41402 41400\nf 41396 41930 41933\nf 41396 41933 41402\nf 41397 41398 41930\nf 41398 41403 41931\nf 41398 41931 41930\nf 41399 41401 41932\nf 41399 41405 41404\nf 41399 41932 41937\nf 41399 41937 41405\nf 41400 41402 41401\nf 41401 41402 41934\nf 41401 41934 41932\nf 41402 41933 41934\nf 41403 41406 41939\nf 41403 41935 41931\nf 41403 41939 41935\nf 41404 41405 41940\nf 41404 41940 41408\nf 41405 41937 41938\nf 41405 41938 41940\nf 41406 41407 41411\nf 41406 41411 41942\nf 41406 41942 41939\nf 41407 41410 41411\nf 41408 41940 41409\nf 41409 41940 41941\nf 41409 41941 41944\nf 41409 41944 41412\nf 41410 41413 41945\nf 41410 41943 41411\nf 41410 41945 41943\nf 41411 41943 41942\nf 41412 41944 41414\nf 41413 41415 41947\nf 41413 41947 41945\nf 41414 41944 41946\nf 41414 41946 41416\nf 41415 41417 41949\nf 41415 41949 41947\nf 41416 41946 41948\nf 41416 41948 41419\nf 41417 41418 41950\nf 41417 41950 41949\nf 41418 41420 41950\nf 41419 41948 41951\nf 41419 41951 41421\nf 41420 41422 41955\nf 41420 41952 41950\nf 41420 41955 41952\nf 41421 41951 41954\nf 41421 41954 41424\nf 41422 41423 41958\nf 41422 41958 41955\nf 41423 41425 41427\nf 41423 41427 41958\nf 41424 41954 41957\nf 41424 41957 41428\nf 41425 41426 41427\nf 41426 41429 41427\nf 41427 41429 41958\nf 41428 41957 41959\nf 41428 41959 41430\nf 41429 41431 41962\nf 41429 41960 41958\nf 41429 41962 41960\nf 41430 41959 41961\nf 41430 41961 41433\nf 41431 41432 41962\nf 41432 41434 41965\nf 41432 41963 41962\nf 41432 41965 41963\nf 41433 41961 41964\nf 41433 41964 41435\nf 41434 41436 41967\nf 41434 41967 41965\nf 41435 41964 41966\nf 41435 41966 41437\nf 41436 41438 41969\nf 41436 41969 41967\nf 41437 41966 41968\nf 41437 41968 41439\nf 41438 41441 41972\nf 41438 41972 41969\nf 41439 41968 41970\nf 41439 41970 41971\nf 41439 41971 41440\nf 41440 41971 41442\nf 41441 41443 41974\nf 41441 41974 41972\nf 41442 41971 41973\nf 41442 41973 41444\nf 41443 41445 41976\nf 41443 41976 41974\nf 41444 41973 41975\nf 41444 41975 41447\nf 41445 41446 41978\nf 41445 41978 41976\nf 41446 41448 41449\nf 41446 41449 41978\nf 41447 41975 41977\nf 41447 41977 41450\nf 41448 41451 41982\nf 41448 41982 41449\nf 41449 41979 41978\nf 41449 41982 41979\nf 41450 41977 41980\nf 41450 41980 41452\nf 41451 41455 41984\nf 41451 41984 41982\nf 41452 41454 41453\nf 41452 41980 41981\nf 41452 41981 41454\nf 41453 41454 41456\nf 41454 41981 41983\nf 41454 41983 41456\nf 41455 41457 41986\nf 41455 41986 41984\nf 41456 41983 41985\nf 41456 41985 41459\nf 41457 41458 41986\nf 41458 41460 41989\nf 41458 41987 41986\nf 41458 41989 41987\nf 41459 41985 41988\nf 41459 41988 41461\nf 41460 41463 41993\nf 41460 41993 41989\nf 41461 41988 41991\nf 41461 41991 41992\nf 41461 41992 41462\nf 41462 41992 41465\nf 41463 41464 41997\nf 41463 41997 41993\nf 41464 41466 41468\nf 41464 41468 41997\nf 41465 41992 41994\nf 41465 41994 41996\nf 41465 41996 41467\nf 41466 41467 41468\nf 41467 41996 41998\nf 41467 41998 41468\nf 41468 41998 41997\nf 41469 41471 42008\nf 41469 42006 42011\nf 41469 42008 42006\nf 41469 42011 41470\nf 41470 42011 41474\nf 41471 41472 41473\nf 41471 41473 42008\nf 41472 41476 41473\nf 41473 41476 42012\nf 41473 42012 42008\nf 41474 42011 42014\nf 41474 42014 41475\nf 41475 42014 42015\nf 41475 42015 42019\nf 41475 42019 41477\nf 41476 41478 42020\nf 41476 42017 42012\nf 41476 42020 42017\nf 41477 42019 41479\nf 41478 41480 42020\nf 41479 42019 42023\nf 41479 42023 41482\nf 41480 41481 42021\nf 41480 41483 41481\nf 41480 42021 42020\nf 41481 41483 41484\nf 41481 41484 42026\nf 41481 42024 42021\nf 41481 42026 42024\nf 41482 42023 42025\nf 41482 42025 41485\nf 41483 41486 42029\nf 41483 42029 41484\nf 41484 42027 42026\nf 41484 42029 42027\nf 41485 42025 42028\nf 41485 42028 41487\nf 41486 41488 42032\nf 41486 42032 42029\nf 41487 42028 42031\nf 41487 42031 41489\nf 41488 41490 42035\nf 41488 42035 42032\nf 41489 42031 42034\nf 41489 42034 41491\nf 41490 41492 42038\nf 41490 42038 42035\nf 41491 42034 42037\nf 41491 42037 41493\nf 41492 41494 42041\nf 41492 42041 42038\nf 41493 42037 42040\nf 41493 42040 41495\nf 41494 41496 42044\nf 41494 42044 42041\nf 41495 42040 42043\nf 41495 42043 41497\nf 41496 41498 42049\nf 41496 42049 42044\nf 41497 42043 42046\nf 41497 42046 41499\nf 41498 41502 42049\nf 41499 41501 41500\nf 41499 42046 41501\nf 41500 41501 42052\nf 41500 42052 41505\nf 41501 42046 42047\nf 41501 42047 42052\nf 41502 41503 41504\nf 41502 41504 42050\nf 41502 42050 42049\nf 41503 41506 41504\nf 41504 41506 42053\nf 41504 42053 42050\nf 41505 42052 42054\nf 41505 42054 41507\nf 41506 41508 42057\nf 41506 42055 42053\nf 41506 42057 42055\nf 41507 42054 42056\nf 41507 42056 41509\nf 41508 41510 42059\nf 41508 42059 42057\nf 41509 42056 42058\nf 41509 42058 41511\nf 41510 41512 42061\nf 41510 42061 42059\nf 41511 42058 42060\nf 41511 42060 41513\nf 41512 41514 42063\nf 41512 42063 42061\nf 41513 42060 42062\nf 41513 42062 41515\nf 41514 41516 42065\nf 41514 42065 42063\nf 41515 42062 42064\nf 41515 42064 41518\nf 41516 41517 42065\nf 41517 41519 42068\nf 41517 42066 42065\nf 41517 42068 42066\nf 41518 42064 42067\nf 41518 42067 41520\nf 41519 41521 42070\nf 41519 42070 42068\nf 41520 42067 42069\nf 41520 42069 41522\nf 41521 41523 42072\nf 41521 42072 42070\nf 41522 42069 42071\nf 41522 42071 41524\nf 41523 41525 42074\nf 41523 42074 42072\nf 41524 42071 42073\nf 41524 42073 41526\nf 41525 41527 42076\nf 41525 42076 42074\nf 41526 42073 42075\nf 41526 42075 41528\nf 41527 41529 42079\nf 41527 42079 42076\nf 41528 42075 42077\nf 41528 42077 41530\nf 41529 41531 42081\nf 41529 42081 42079\nf 41530 42077 42080\nf 41530 42080 41532\nf 41531 41533 42083\nf 41531 42083 42081\nf 41532 42080 42082\nf 41532 42082 41534\nf 41533 41535 42085\nf 41533 42085 42083\nf 41534 42082 42084\nf 41534 42084 41537\nf 41535 41536 42085\nf 41536 41539 42089\nf 41536 42086 42085\nf 41536 42089 42086\nf 41537 42084 42087\nf 41537 42087 42088\nf 41537 42088 41538\nf 41538 42088 41541\nf 41539 41540 42094\nf 41539 42094 42089\nf 41540 41542 41544\nf 41540 41544 42094\nf 41541 42088 42091\nf 41541 42091 42093\nf 41541 42093 41543\nf 41542 41543 41544\nf 41543 42093 42095\nf 41543 42095 41544\nf 41544 42095 42094\nf 41545 41548 42097\nf 41545 42097 42099\nf 41545 42099 41546\nf 41546 42099 41547\nf 41547 42099 42100\nf 41547 42100 42102\nf 41547 42102 41549\nf 41548 41550 42103\nf 41548 42101 42097\nf 41548 42103 42101\nf 41549 42102 41551\nf 41550 41552 42105\nf 41550 42105 42103\nf 41551 42102 42104\nf 41551 42104 41554\nf 41552 41553 42106\nf 41552 42106 42105\nf 41553 41556 42106\nf 41554 42104 42108\nf 41554 42108 41555\nf 41555 42108 42109\nf 41555 42109 42111\nf 41555 42111 41557\nf 41556 41558 42112\nf 41556 42110 42106\nf 41556 42112 42110\nf 41557 42111 41559\nf 41558 41560 42114\nf 41558 42114 42112\nf 41559 42111 42113\nf 41559 42113 41561\nf 41560 41563 42118\nf 41560 42118 42114\nf 41561 42113 42115\nf 41561 42115 41562\nf 41562 42115 42116\nf 41562 42116 42119\nf 41562 42119 41564\nf 41563 41565 42120\nf 41563 42120 42118\nf 41564 42119 41566\nf 41565 41567 42122\nf 41565 42122 42120\nf 41566 42119 42121\nf 41566 42121 41568\nf 41567 41569 42124\nf 41567 42124 42122\nf 41568 42121 42123\nf 41568 42123 41570\nf 41569 41571 42126\nf 41569 42126 42124\nf 41570 42123 42125\nf 41570 42125 41572\nf 41571 41574 42129\nf 41571 42129 42126\nf 41572 42125 42127\nf 41572 42127 41573\nf 41573 42127 42128\nf 41573 42128 42130\nf 41573 42130 41575\nf 41574 41576 42131\nf 41574 42131 42129\nf 41575 42130 41577\nf 41576 41578 42133\nf 41576 42133 42131\nf 41577 42130 42132\nf 41577 42132 41580\nf 41578 41579 42133\nf 41579 41581 42136\nf 41579 42134 42133\nf 41579 42136 42134\nf 41580 42132 42135\nf 41580 42135 41582\nf 41581 41583 42138\nf 41581 42138 42136\nf 41582 42135 42137\nf 41582 42137 41584\nf 41583 41585 42140\nf 41583 42140 42138\nf 41584 42137 42139\nf 41584 42139 41587\nf 41585 41586 42140\nf 41586 41588 42143\nf 41586 42141 42140\nf 41586 42143 42141\nf 41587 42139 42142\nf 41587 42142 41590\nf 41588 41589 42143\nf 41589 41591 42146\nf 41589 42144 42143\nf 41589 42146 42144\nf 41590 42142 42145\nf 41590 42145 41592\nf 41591 41595 42146\nf 41592 42145 42148\nf 41592 42148 42149\nf 41592 42149 41593\nf 41593 42149 42151\nf 41593 42151 41594\nf 41594 42151 41596\nf 41595 41596 41597\nf 41595 41597 42146\nf 41596 42150 41597\nf 41596 42151 42150\nf 41597 42147 42146\nf 41597 42150 42147\nf 41598 41599 42153\nf 41598 41604 41602\nf 41598 42152 41604\nf 41598 42153 42152\nf 41599 41605 42154\nf 41599 42154 42153\nf 41600 41601 42156\nf 41600 41614 41612\nf 41600 42155 41614\nf 41600 42156 42155\nf 41601 41603 42158\nf 41601 42158 42156\nf 41602 41604 41603\nf 41603 41604 42157\nf 41603 42157 42158\nf 41604 42152 42157\nf 41605 41606 42161\nf 41605 42159 42154\nf 41605 42161 42159\nf 41606 41607 42161\nf 41607 41608 42162\nf 41607 42162 42161\nf 41608 41609 42163\nf 41608 42163 42162\nf 41609 41615 41616\nf 41609 41616 42163\nf 41610 41611 42164\nf 41610 42164 42171\nf 41610 42171 41618\nf 41611 41613 42166\nf 41611 42166 42164\nf 41612 41614 41613\nf 41613 41614 42165\nf 41613 42165 42166\nf 41614 42155 42165\nf 41615 41617 42169\nf 41615 42169 41616\nf 41616 42168 42163\nf 41616 42169 42168\nf 41617 41620 42170\nf 41617 42170 42169\nf 41618 42171 41619\nf 41619 42171 42172\nf 41619 42172 42176\nf 41619 42176 41623\nf 41620 41621 42175\nf 41620 42174 42170\nf 41620 42175 42174\nf 41621 41622 42175\nf 41622 41625 41626\nf 41622 41626 42175\nf 41623 41628 41624\nf 41623 42176 42179\nf 41623 42179 41628\nf 41624 41628 41627\nf 41625 41631 42182\nf 41625 42178 41626\nf 41625 42182 42178\nf 41626 42177 42175\nf 41626 42178 42177\nf 41627 41628 42180\nf 41627 42180 41629\nf 41628 42179 42180\nf 41629 42180 42181\nf 41629 42181 41630\nf 41630 41634 41633\nf 41630 42181 41634\nf 41631 41632 41638\nf 41631 41638 42186\nf 41631 42186 42182\nf 41632 41637 41638\nf 41633 41634 42184\nf 41633 42184 41635\nf 41634 42181 42183\nf 41634 42183 42184\nf 41635 42184 42185\nf 41635 42185 41636\nf 41636 41640 41639\nf 41636 42185 41640\nf 41637 41642 42191\nf 41637 42187 41638\nf 41637 42191 42187\nf 41638 42187 42186\nf 41639 41640 42189\nf 41639 42189 41641\nf 41640 42185 42188\nf 41640 42188 42189\nf 41641 42189 42190\nf 41641 42190 41643\nf 41642 41647 42196\nf 41642 42196 42191\nf 41643 42190 42192\nf 41643 42192 42193\nf 41643 42193 41644\nf 41644 42193 42194\nf 41644 42194 41645\nf 41645 42194 42195\nf 41645 42195 41646\nf 41646 42195 41649\nf 41647 41648 42196\nf 41648 41656 42206\nf 41648 42197 42196\nf 41648 42206 42197\nf 41649 42195 42199\nf 41649 42199 42200\nf 41649 42200 41650\nf 41650 42200 42201\nf 41650 42201 41651\nf 41651 42201 42202\nf 41651 42202 41652\nf 41652 42202 42203\nf 41652 42203 41653\nf 41653 42203 42204\nf 41653 42204 41654\nf 41654 42204 42205\nf 41654 42205 41655\nf 41655 42205 42207\nf 41655 42207 41657\nf 41656 41657 42206\nf 41657 42207 42206\nf 41658 41659 42209\nf 41658 42209 42217\nf 41658 42217 41666\nf 41659 41660 42210\nf 41659 42210 42209\nf 41660 41667 42211\nf 41660 42211 42210\nf 41661 41662 42212\nf 41661 42212 42219\nf 41661 42219 41668\nf 41662 41663 42213\nf 41662 42213 42212\nf 41663 41664 42214\nf 41663 42214 42213\nf 41664 41665 42215\nf 41664 42215 42214\nf 41665 41669 42216\nf 41665 42216 42215\nf 41666 42217 41671\nf 41667 41673 42224\nf 41667 42218 42211\nf 41667 42224 42218\nf 41668 42219 41675\nf 41669 41670 42221\nf 41669 42220 42216\nf 41669 42221 42220\nf 41670 41676 42221\nf 41671 42217 42222\nf 41671 42222 41672\nf 41672 42222 42223\nf 41672 42223 42228\nf 41672 42228 41677\nf 41673 41674 42225\nf 41673 42225 42224\nf 41674 41678 42225\nf 41675 42219 42226\nf 41675 42226 41679\nf 41676 41680 42232\nf 41676 42227 42221\nf 41676 42232 42227\nf 41677 42228 41682\nf 41678 41683 42234\nf 41678 42229 42225\nf 41678 42234 42229\nf 41679 42226 42230\nf 41679 42230 41684\nf 41680 41681 41686\nf 41680 41686 42237\nf 41680 42237 42232\nf 41681 41685 41686\nf 41682 42228 42233\nf 41682 42233 41687\nf 41683 41688 42240\nf 41683 42240 42234\nf 41684 42230 42235\nf 41684 42235 41689\nf 41685 41691 42244\nf 41685 42238 41686\nf 41685 42244 42238\nf 41686 42238 42237\nf 41687 42233 42239\nf 41687 42239 41692\nf 41688 41693 42246\nf 41688 42246 42240\nf 41689 42235 42241\nf 41689 42241 41690\nf 41690 42241 42242\nf 41690 42242 42247\nf 41690 42247 41694\nf 41691 41695 42248\nf 41691 42248 42244\nf 41692 42239 42245\nf 41692 42245 41696\nf 41693 41697 42250\nf 41693 42250 42246\nf 41694 42247 41698\nf 41695 41699 42252\nf 41695 42252 42248\nf 41696 42245 42249\nf 41696 42249 41700\nf 41697 41701 42254\nf 41697 42254 42250\nf 41698 42247 42251\nf 41698 42251 41702\nf 41699 41703 42256\nf 41699 42256 42252\nf 41700 42249 42253\nf 41700 42253 41704\nf 41701 41705 42258\nf 41701 42258 42254\nf 41702 42251 42255\nf 41702 42255 41706\nf 41703 41707 42260\nf 41703 42260 42256\nf 41704 42253 42257\nf 41704 42257 41708\nf 41705 41709 42262\nf 41705 42262 42258\nf 41706 42255 42259\nf 41706 42259 41711\nf 41707 41713 42266\nf 41707 42266 42260\nf 41708 42257 42261\nf 41708 42261 41714\nf 41709 41710 42263\nf 41709 42263 42262\nf 41710 41715 42263\nf 41711 42259 42264\nf 41711 42264 41712\nf 41712 42264 42265\nf 41712 42265 42274\nf 41712 42274 41721\nf 41713 41723 42276\nf 41713 42276 42266\nf 41714 42261 42267\nf 41714 42267 41724\nf 41715 41716 42269\nf 41715 42268 42263\nf 41715 42269 42268\nf 41716 41717 42269\nf 41717 41718 42270\nf 41717 42270 42269\nf 41718 41719 42271\nf 41718 42271 42270\nf 41719 41725 42272\nf 41719 42272 42271\nf 41720 41722 42273\nf 41720 42273 42360\nf 41720 42360 41807\nf 41721 42274 41722\nf 41722 42274 42275\nf 41722 42275 42273\nf 41723 41809 42362\nf 41723 42362 42276\nf 41724 42267 42277\nf 41724 42277 41811\nf 41725 41726 42279\nf 41725 42278 42272\nf 41725 42279 42278\nf 41726 41727 42279\nf 41727 41728 42280\nf 41727 42280 42279\nf 41728 41729 42281\nf 41728 42281 42280\nf 41729 41730 42282\nf 41729 42282 42281\nf 41730 41731 42283\nf 41730 42283 42282\nf 41731 41732 42284\nf 41731 42284 42283\nf 41732 41733 42285\nf 41732 42285 42284\nf 41733 41734 42286\nf 41733 42286 42285\nf 41734 41735 42287\nf 41734 42287 42286\nf 41735 41736 42288\nf 41735 42288 42287\nf 41736 41737 42289\nf 41736 42289 42288\nf 41737 41738 42290\nf 41737 42290 42289\nf 41738 41739 42291\nf 41738 42291 42290\nf 41739 41740 42292\nf 41739 42292 42291\nf 41740 41741 42293\nf 41740 42293 42292\nf 41741 41742 42294\nf 41741 42294 42293\nf 41742 41743 42295\nf 41742 42295 42294\nf 41743 41744 42296\nf 41743 42296 42295\nf 41744 41745 42297\nf 41744 42297 42296\nf 41745 41746 42298\nf 41745 42298 42297\nf 41746 41747 42299\nf 41746 42299 42298\nf 41747 41748 42300\nf 41747 42300 42299\nf 41748 41749 42301\nf 41748 42301 42300\nf 41749 41750 42302\nf 41749 42302 42301\nf 41750 41751 42303\nf 41750 42303 42302\nf 41751 41752 42304\nf 41751 42304 42303\nf 41752 41753 42305\nf 41752 42305 42304\nf 41753 41754 42306\nf 41753 42306 42305\nf 41754 41755 42307\nf 41754 42307 42306\nf 41755 41756 42308\nf 41755 42308 42307\nf 41756 41757 42309\nf 41756 42309 42308\nf 41757 41758 42310\nf 41757 42310 42309\nf 41758 41759 42311\nf 41758 42311 42310\nf 41759 41760 42312\nf 41759 42312 42311\nf 41760 41761 42313\nf 41760 42313 42312\nf 41761 41762 42314\nf 41761 42314 42313\nf 41762 41763 42315\nf 41762 42315 42314\nf 41763 41764 42316\nf 41763 42316 42315\nf 41764 41765 42317\nf 41764 42317 42316\nf 41765 41766 42318\nf 41765 42318 42317\nf 41766 41767 42319\nf 41766 42319 42318\nf 41767 41768 42320\nf 41767 42320 42319\nf 41768 41769 42321\nf 41768 42321 42320\nf 41769 41770 42322\nf 41769 42322 42321\nf 41770 41771 42323\nf 41770 42323 42322\nf 41771 41772 42324\nf 41771 42324 42323\nf 41772 41773 42325\nf 41772 42325 42324\nf 41773 41774 42326\nf 41773 42326 42325\nf 41774 41775 42327\nf 41774 42327 42326\nf 41775 41776 42328\nf 41775 42328 42327\nf 41776 41777 42329\nf 41776 42329 42328\nf 41777 41778 42330\nf 41777 42330 42329\nf 41778 41779 42331\nf 41778 42331 42330\nf 41779 41780 42332\nf 41779 42332 42331\nf 41780 41781 42333\nf 41780 42333 42332\nf 41781 41782 42334\nf 41781 42334 42333\nf 41782 41783 42335\nf 41782 42335 42334\nf 41783 41784 42336\nf 41783 42336 42335\nf 41784 41785 42337\nf 41784 42337 42336\nf 41785 41786 42338\nf 41785 42338 42337\nf 41786 41787 42339\nf 41786 42339 42338\nf 41787 41788 42340\nf 41787 42340 42339\nf 41788 41789 42341\nf 41788 42341 42340\nf 41789 41790 42342\nf 41789 42342 42341\nf 41790 41791 42343\nf 41790 42343 42342\nf 41791 41792 42344\nf 41791 42344 42343\nf 41792 41793 42345\nf 41792 42345 42344\nf 41793 41794 42346\nf 41793 42346 42345\nf 41794 41795 42347\nf 41794 42347 42346\nf 41795 41796 42348\nf 41795 42348 42347\nf 41796 41797 42349\nf 41796 42349 42348\nf 41797 41798 42350\nf 41797 42350 42349\nf 41798 41799 42351\nf 41798 42351 42350\nf 41799 41800 42352\nf 41799 42352 42351\nf 41800 41801 42353\nf 41800 42353 42352\nf 41801 41802 42354\nf 41801 42354 42353\nf 41802 41803 42355\nf 41802 42355 42354\nf 41803 41804 42356\nf 41803 42356 42355\nf 41804 41805 42357\nf 41804 42357 42356\nf 41805 41806 42358\nf 41805 42358 42357\nf 41806 41808 42359\nf 41806 42359 42358\nf 41807 42360 41808\nf 41808 42360 42361\nf 41808 42361 42359\nf 41809 41810 42362\nf 41810 41812 42366\nf 41810 42363 42362\nf 41810 42366 42363\nf 41811 42277 42365\nf 41811 42365 41813\nf 41812 41815 42369\nf 41812 42369 42366\nf 41813 42365 42367\nf 41813 42367 42368\nf 41813 42368 41814\nf 41814 42368 41816\nf 41815 41817 42371\nf 41815 42371 42369\nf 41816 42368 42370\nf 41816 42370 41819\nf 41817 41818 42371\nf 41818 41821 42376\nf 41818 42372 42371\nf 41818 42376 42372\nf 41819 42370 42373\nf 41819 42373 42374\nf 41819 42374 41820\nf 41820 42374 41823\nf 41821 41822 42376\nf 41822 41829 42385\nf 41822 42377 42376\nf 41822 42385 42377\nf 41823 42374 42378\nf 41823 42378 42379\nf 41823 42379 41824\nf 41824 42379 42380\nf 41824 42380 41831\nf 41825 41922 42478\nf 41825 42381 42382\nf 41825 42382 41826\nf 41825 42478 42381\nf 41826 42382 42383\nf 41826 42383 41827\nf 41827 42383 42384\nf 41827 42384 41828\nf 41828 42384 42386\nf 41828 42386 41830\nf 41829 41830 42385\nf 41830 42386 42385\nf 41831 41833 41832\nf 41831 42380 41833\nf 41832 41833 42388\nf 41832 42388 41834\nf 41833 42380 42387\nf 41833 42387 42388\nf 41834 42388 42389\nf 41834 42389 41924\nf 41835 41927 41929\nf 41835 41929 42390\nf 41835 42390 42391\nf 41835 42391 42392\nf 41835 42392 41836\nf 41836 42392 42393\nf 41836 42393 41837\nf 41837 42393 42394\nf 41837 42394 41838\nf 41838 42394 42395\nf 41838 42395 41839\nf 41839 42395 42396\nf 41839 42396 41840\nf 41840 42396 42397\nf 41840 42397 41841\nf 41841 42397 42398\nf 41841 42398 41842\nf 41842 42398 42399\nf 41842 42399 41843\nf 41843 42399 42400\nf 41843 42400 41844\nf 41844 42400 42401\nf 41844 42401 41845\nf 41845 42401 42402\nf 41845 42402 41846\nf 41846 42402 42403\nf 41846 42403 41847\nf 41847 42403 42404\nf 41847 42404 41848\nf 41848 42404 42405\nf 41848 42405 41849\nf 41849 42405 42406\nf 41849 42406 41850\nf 41850 42406 42407\nf 41850 42407 41851\nf 41851 42407 42408\nf 41851 42408 41852\nf 41852 42408 42409\nf 41852 42409 41853\nf 41853 42409 42410\nf 41853 42410 41854\nf 41854 42410 42411\nf 41854 42411 41855\nf 41855 42411 42412\nf 41855 42412 41856\nf 41856 42412 42413\nf 41856 42413 41857\nf 41857 42413 42414\nf 41857 42414 41858\nf 41858 42414 42415\nf 41858 42415 41859\nf 41859 42415 42416\nf 41859 42416 41860\nf 41860 42416 42417\nf 41860 42417 41861\nf 41861 42417 42418\nf 41861 42418 41862\nf 41862 42418 42419\nf 41862 42419 41863\nf 41863 42419 42420\nf 41863 42420 41864\nf 41864 42420 42421\nf 41864 42421 41865\nf 41865 42421 42422\nf 41865 42422 41866\nf 41866 42422 42423\nf 41866 42423 41867\nf 41867 42423 42424\nf 41867 42424 41868\nf 41868 42424 42425\nf 41868 42425 41869\nf 41869 42425 42426\nf 41869 42426 41870\nf 41870 42426 42427\nf 41870 42427 41871\nf 41871 42427 42428\nf 41871 42428 41872\nf 41872 42428 42429\nf 41872 42429 41873\nf 41873 42429 42430\nf 41873 42430 41874\nf 41874 42430 42431\nf 41874 42431 41875\nf 41875 42431 42432\nf 41875 42432 41876\nf 41876 42432 42433\nf 41876 42433 41877\nf 41877 42433 42434\nf 41877 42434 41878\nf 41878 42434 42435\nf 41878 42435 41879\nf 41879 42435 42436\nf 41879 42436 41880\nf 41880 42436 42437\nf 41880 42437 41881\nf 41881 42437 42438\nf 41881 42438 41882\nf 41882 42438 42439\nf 41882 42439 41883\nf 41883 42439 42440\nf 41883 42440 41884\nf 41884 42440 42441\nf 41884 42441 41885\nf 41885 42441 42442\nf 41885 42442 41886\nf 41886 42442 42443\nf 41886 42443 41887\nf 41887 42443 42444\nf 41887 42444 41888\nf 41888 42444 42445\nf 41888 42445 41889\nf 41889 42445 42446\nf 41889 42446 41890\nf 41890 42446 42447\nf 41890 42447 41891\nf 41891 42447 42448\nf 41891 42448 41892\nf 41892 42448 42449\nf 41892 42449 41893\nf 41893 42449 42450\nf 41893 42450 41894\nf 41894 42450 42451\nf 41894 42451 41895\nf 41895 42451 42452\nf 41895 42452 41896\nf 41896 42452 42453\nf 41896 42453 41897\nf 41897 42453 42454\nf 41897 42454 41898\nf 41898 42454 42455\nf 41898 42455 41899\nf 41899 42455 42456\nf 41899 42456 41900\nf 41900 42456 42457\nf 41900 42457 41901\nf 41901 42457 42458\nf 41901 42458 41902\nf 41902 42458 42459\nf 41902 42459 41903\nf 41903 42459 42460\nf 41903 42460 41904\nf 41904 42460 42461\nf 41904 42461 41905\nf 41905 42461 42462\nf 41905 42462 41906\nf 41906 42462 42463\nf 41906 42463 41907\nf 41907 42463 42464\nf 41907 42464 41908\nf 41908 42464 42465\nf 41908 42465 41909\nf 41909 42465 42466\nf 41909 42466 41910\nf 41910 42466 42467\nf 41910 42467 41911\nf 41911 42467 42468\nf 41911 42468 41912\nf 41912 42468 42469\nf 41912 42469 41913\nf 41913 42469 42470\nf 41913 42470 41914\nf 41914 42470 42471\nf 41914 42471 41915\nf 41915 42471 42472\nf 41915 42472 41916\nf 41916 42472 42473\nf 41916 42473 41917\nf 41917 42473 42474\nf 41917 42474 41918\nf 41918 42474 42475\nf 41918 42475 41919\nf 41919 42475 42476\nf 41919 42476 41920\nf 41920 42476 42477\nf 41920 42477 41921\nf 41921 42477 42479\nf 41921 42479 41923\nf 41922 41923 42478\nf 41923 42479 42478\nf 41924 41926 41925\nf 41924 42389 41926\nf 41925 41926 41928\nf 41926 41929 41928\nf 41926 42389 42390\nf 41926 42390 41929\nf 41927 41928 41929\nf 41930 41931 42480\nf 41930 42480 42482\nf 41930 42482 41933\nf 41931 41935 41936\nf 41931 41936 42480\nf 41932 41934 42481\nf 41932 42481 42487\nf 41932 42487 41937\nf 41933 42482 41934\nf 41934 42482 42483\nf 41934 42483 42481\nf 41935 41939 42489\nf 41935 42486 41936\nf 41935 42489 42486\nf 41936 42484 42480\nf 41936 42486 42484\nf 41937 42487 41938\nf 41938 42487 42488\nf 41938 42488 42490\nf 41938 42490 41940\nf 41939 41942 42492\nf 41939 42492 42489\nf 41940 42490 41941\nf 41941 42490 42491\nf 41941 42491 42494\nf 41941 42494 41944\nf 41942 41943 42493\nf 41942 42493 42492\nf 41943 41945 42493\nf 41944 42494 41946\nf 41945 41947 42497\nf 41945 42495 42493\nf 41945 42497 42495\nf 41946 42494 42496\nf 41946 42496 41948\nf 41947 41949 42499\nf 41947 42499 42497\nf 41948 42496 42498\nf 41948 42498 41951\nf 41949 41950 41953\nf 41949 41953 42501\nf 41949 42501 42499\nf 41950 41952 41953\nf 41951 42498 42500\nf 41951 42500 41954\nf 41952 41955 41956\nf 41952 41956 41953\nf 41953 41956 42501\nf 41954 42500 42502\nf 41954 42502 41957\nf 41955 41958 42506\nf 41955 42504 41956\nf 41955 42506 42504\nf 41956 42503 42501\nf 41956 42504 42503\nf 41957 42502 42505\nf 41957 42505 41959\nf 41958 41960 42509\nf 41958 42509 42506\nf 41959 42505 42508\nf 41959 42508 41961\nf 41960 41962 42511\nf 41960 42511 42509\nf 41961 42508 42510\nf 41961 42510 41964\nf 41962 41963 42511\nf 41963 41965 42514\nf 41963 42512 42511\nf 41963 42514 42512\nf 41964 42510 42513\nf 41964 42513 41966\nf 41965 41967 42517\nf 41965 42517 42514\nf 41966 42513 42516\nf 41966 42516 41968\nf 41967 41969 42519\nf 41967 42519 42517\nf 41968 42516 42518\nf 41968 42518 41970\nf 41969 41972 42522\nf 41969 42522 42519\nf 41970 42518 42520\nf 41970 42520 42521\nf 41970 42521 41971\nf 41971 42521 41973\nf 41972 41974 42524\nf 41972 42524 42522\nf 41973 42521 42523\nf 41973 42523 41975\nf 41974 41976 42526\nf 41974 42526 42524\nf 41975 42523 42525\nf 41975 42525 41977\nf 41976 41978 42528\nf 41976 42528 42526\nf 41977 42525 42527\nf 41977 42527 41980\nf 41978 41979 42528\nf 41979 41982 42532\nf 41979 42529 42528\nf 41979 42532 42529\nf 41980 42527 42530\nf 41980 42530 42531\nf 41980 42531 41981\nf 41981 42531 41983\nf 41982 41984 42535\nf 41982 42535 42532\nf 41983 42531 42533\nf 41983 42533 41985\nf 41984 41986 42537\nf 41984 42537 42535\nf 41985 42533 42536\nf 41985 42536 41988\nf 41986 41987 42539\nf 41986 42539 42537\nf 41987 41989 41990\nf 41987 41990 42539\nf 41988 42536 42538\nf 41988 42538 41991\nf 41989 41993 42542\nf 41989 42542 41990\nf 41990 42540 42539\nf 41990 42542 42540\nf 41991 41995 41992\nf 41991 42538 42541\nf 41991 42541 42544\nf 41991 42544 41995\nf 41992 41995 41994\nf 41993 41997 42545\nf 41993 42545 42542\nf 41994 41995 42000\nf 41994 42000 41996\nf 41995 41999 42000\nf 41995 42544 41999\nf 41996 42000 42001\nf 41996 42001 41998\nf 41997 41998 42548\nf 41997 42548 42545\nf 41998 42001 42548\nf 41999 42002 42000\nf 41999 42544 42546\nf 41999 42546 42547\nf 41999 42547 42002\nf 42000 42002 42003\nf 42000 42003 42001\nf 42001 42003 42552\nf 42001 42552 42548\nf 42002 42004 42005\nf 42002 42005 42003\nf 42002 42547 42549\nf 42002 42549 42004\nf 42003 42005 42555\nf 42003 42553 42552\nf 42003 42555 42553\nf 42004 42007 42009\nf 42004 42009 42005\nf 42004 42549 42550\nf 42004 42550 42554\nf 42004 42554 42007\nf 42005 42009 42010\nf 42005 42010 42556\nf 42005 42556 42555\nf 42006 42007 42558\nf 42006 42008 42007\nf 42006 42558 42011\nf 42007 42008 42009\nf 42007 42554 42558\nf 42008 42012 42009\nf 42009 42012 42013\nf 42009 42013 42010\nf 42010 42013 42563\nf 42010 42559 42556\nf 42010 42563 42559\nf 42011 42558 42560\nf 42011 42560 42014\nf 42012 42017 42013\nf 42013 42017 42018\nf 42013 42018 42565\nf 42013 42565 42563\nf 42014 42016 42015\nf 42014 42560 42016\nf 42015 42016 42564\nf 42015 42564 42019\nf 42016 42560 42561\nf 42016 42561 42564\nf 42017 42020 42018\nf 42018 42020 42022\nf 42018 42022 42567\nf 42018 42567 42565\nf 42019 42564 42566\nf 42019 42566 42023\nf 42020 42021 42022\nf 42021 42024 42022\nf 42022 42024 42567\nf 42023 42566 42568\nf 42023 42568 42025\nf 42024 42026 42571\nf 42024 42569 42567\nf 42024 42571 42569\nf 42025 42568 42570\nf 42025 42570 42028\nf 42026 42027 42573\nf 42026 42573 42571\nf 42027 42029 42030\nf 42027 42030 42573\nf 42028 42570 42572\nf 42028 42572 42031\nf 42029 42032 42030\nf 42030 42032 42033\nf 42030 42033 42575\nf 42030 42575 42573\nf 42031 42572 42574\nf 42031 42574 42034\nf 42032 42035 42033\nf 42033 42035 42036\nf 42033 42036 42577\nf 42033 42577 42575\nf 42034 42574 42576\nf 42034 42576 42037\nf 42035 42038 42036\nf 42036 42038 42039\nf 42036 42039 42579\nf 42036 42579 42577\nf 42037 42576 42578\nf 42037 42578 42040\nf 42038 42041 42039\nf 42039 42041 42042\nf 42039 42042 42581\nf 42039 42581 42579\nf 42040 42578 42580\nf 42040 42580 42043\nf 42041 42044 42042\nf 42042 42044 42045\nf 42042 42045 42584\nf 42042 42584 42581\nf 42043 42580 42582\nf 42043 42582 42046\nf 42044 42049 42045\nf 42045 42049 42051\nf 42045 42051 42586\nf 42045 42586 42584\nf 42046 42048 42047\nf 42046 42582 42048\nf 42047 42048 42585\nf 42047 42585 42052\nf 42048 42582 42583\nf 42048 42583 42585\nf 42049 42050 42051\nf 42050 42053 42051\nf 42051 42053 42586\nf 42052 42585 42587\nf 42052 42587 42054\nf 42053 42055 42590\nf 42053 42588 42586\nf 42053 42590 42588\nf 42054 42587 42589\nf 42054 42589 42056\nf 42055 42057 42592\nf 42055 42592 42590\nf 42056 42589 42591\nf 42056 42591 42058\nf 42057 42059 42594\nf 42057 42594 42592\nf 42058 42591 42593\nf 42058 42593 42060\nf 42059 42061 42596\nf 42059 42596 42594\nf 42060 42593 42595\nf 42060 42595 42062\nf 42061 42063 42598\nf 42061 42598 42596\nf 42062 42595 42597\nf 42062 42597 42064\nf 42063 42065 42600\nf 42063 42600 42598\nf 42064 42597 42599\nf 42064 42599 42067\nf 42065 42066 42600\nf 42066 42068 42603\nf 42066 42601 42600\nf 42066 42603 42601\nf 42067 42599 42602\nf 42067 42602 42069\nf 42068 42070 42605\nf 42068 42605 42603\nf 42069 42602 42604\nf 42069 42604 42071\nf 42070 42072 42607\nf 42070 42607 42605\nf 42071 42604 42606\nf 42071 42606 42073\nf 42072 42074 42609\nf 42072 42609 42607\nf 42073 42606 42608\nf 42073 42608 42075\nf 42074 42076 42613\nf 42074 42613 42609\nf 42075 42608 42610\nf 42075 42610 42077\nf 42076 42079 42616\nf 42076 42616 42613\nf 42077 42078 42615\nf 42077 42610 42078\nf 42077 42615 42617\nf 42077 42617 42080\nf 42078 42610 42611\nf 42078 42611 42614\nf 42078 42614 42615\nf 42079 42081 42619\nf 42079 42619 42616\nf 42080 42617 42082\nf 42081 42083 42622\nf 42081 42622 42619\nf 42082 42617 42620\nf 42082 42620 42084\nf 42083 42085 42624\nf 42083 42624 42622\nf 42084 42620 42623\nf 42084 42623 42087\nf 42085 42086 42626\nf 42085 42626 42624\nf 42086 42089 42090\nf 42086 42090 42626\nf 42087 42092 42088\nf 42087 42623 42625\nf 42087 42625 42628\nf 42087 42628 42092\nf 42088 42092 42091\nf 42089 42094 42630\nf 42089 42630 42090\nf 42090 42627 42626\nf 42090 42630 42627\nf 42091 42092 42093\nf 42092 42628 42629\nf 42092 42629 42093\nf 42093 42096 42635\nf 42093 42629 42096\nf 42093 42631 42095\nf 42093 42635 42631\nf 42094 42095 42630\nf 42095 42631 42630\nf 42096 42629 42633\nf 42096 42633 42636\nf 42096 42636 42635\nf 42097 42098 42647\nf 42097 42101 42098\nf 42097 42647 42099\nf 42098 42101 42648\nf 42098 42645 42647\nf 42098 42648 42645\nf 42099 42647 42649\nf 42099 42649 42100\nf 42100 42649 42650\nf 42100 42650 42654\nf 42100 42654 42102\nf 42101 42103 42655\nf 42101 42652 42648\nf 42101 42655 42652\nf 42102 42654 42104\nf 42103 42105 42655\nf 42104 42654 42658\nf 42104 42658 42108\nf 42105 42106 42107\nf 42105 42107 42656\nf 42105 42656 42655\nf 42106 42110 42107\nf 42107 42110 42659\nf 42107 42659 42656\nf 42108 42658 42660\nf 42108 42660 42109\nf 42109 42660 42661\nf 42109 42661 42663\nf 42109 42663 42111\nf 42110 42112 42664\nf 42110 42662 42659\nf 42110 42664 42662\nf 42111 42663 42113\nf 42112 42114 42667\nf 42112 42667 42664\nf 42113 42663 42665\nf 42113 42665 42115\nf 42114 42118 42669\nf 42114 42669 42667\nf 42115 42117 42116\nf 42115 42665 42117\nf 42116 42117 42668\nf 42116 42668 42119\nf 42117 42665 42666\nf 42117 42666 42668\nf 42118 42120 42671\nf 42118 42671 42669\nf 42119 42668 42670\nf 42119 42670 42121\nf 42120 42122 42673\nf 42120 42673 42671\nf 42121 42670 42672\nf 42121 42672 42123\nf 42122 42124 42675\nf 42122 42675 42673\nf 42123 42672 42674\nf 42123 42674 42125\nf 42124 42126 42677\nf 42124 42677 42675\nf 42125 42674 42676\nf 42125 42676 42127\nf 42126 42129 42680\nf 42126 42680 42677\nf 42127 42676 42678\nf 42127 42678 42128\nf 42128 42678 42679\nf 42128 42679 42681\nf 42128 42681 42130\nf 42129 42131 42682\nf 42129 42682 42680\nf 42130 42681 42132\nf 42131 42133 42684\nf 42131 42684 42682\nf 42132 42681 42683\nf 42132 42683 42135\nf 42133 42134 42684\nf 42134 42136 42687\nf 42134 42685 42684\nf 42134 42687 42685\nf 42135 42683 42686\nf 42135 42686 42137\nf 42136 42138 42689\nf 42136 42689 42687\nf 42137 42686 42688\nf 42137 42688 42139\nf 42138 42140 42691\nf 42138 42691 42689\nf 42139 42688 42690\nf 42139 42690 42142\nf 42140 42141 42691\nf 42141 42143 42694\nf 42141 42692 42691\nf 42141 42694 42692\nf 42142 42690 42693\nf 42142 42693 42145\nf 42143 42144 42694\nf 42144 42146 42697\nf 42144 42695 42694\nf 42144 42697 42695\nf 42145 42693 42696\nf 42145 42696 42148\nf 42146 42147 42697\nf 42147 42150 42702\nf 42147 42698 42697\nf 42147 42702 42698\nf 42148 42696 42699\nf 42148 42699 42700\nf 42148 42700 42149\nf 42149 42700 42703\nf 42149 42703 42151\nf 42150 42151 42702\nf 42151 42703 42702\nf 42152 42153 42704\nf 42152 42704 42709\nf 42152 42709 42157\nf 42153 42154 42705\nf 42153 42705 42704\nf 42154 42159 42160\nf 42154 42160 42705\nf 42155 42156 42707\nf 42155 42167 42165\nf 42155 42706 42167\nf 42155 42707 42706\nf 42156 42158 42708\nf 42156 42708 42707\nf 42157 42709 42158\nf 42158 42709 42710\nf 42158 42710 42708\nf 42159 42161 42713\nf 42159 42713 42160\nf 42160 42712 42705\nf 42160 42713 42712\nf 42161 42162 42715\nf 42161 42715 42713\nf 42162 42163 42716\nf 42162 42716 42715\nf 42163 42168 42717\nf 42163 42717 42716\nf 42164 42166 42720\nf 42164 42173 42171\nf 42164 42718 42173\nf 42164 42720 42718\nf 42165 42167 42166\nf 42166 42167 42719\nf 42166 42719 42720\nf 42167 42706 42719\nf 42168 42169 42722\nf 42168 42721 42717\nf 42168 42722 42721\nf 42169 42170 42722\nf 42170 42174 42723\nf 42170 42723 42722\nf 42171 42173 42172\nf 42172 42173 42724\nf 42172 42724 42176\nf 42173 42718 42724\nf 42174 42175 42727\nf 42174 42726 42723\nf 42174 42727 42726\nf 42175 42177 42727\nf 42176 42724 42728\nf 42176 42728 42179\nf 42177 42178 42731\nf 42177 42730 42727\nf 42177 42731 42730\nf 42178 42182 42731\nf 42179 42728 42732\nf 42179 42732 42733\nf 42179 42733 42180\nf 42180 42733 42734\nf 42180 42734 42181\nf 42181 42734 42183\nf 42182 42186 42739\nf 42182 42735 42731\nf 42182 42739 42735\nf 42183 42734 42736\nf 42183 42736 42737\nf 42183 42737 42184\nf 42184 42737 42738\nf 42184 42738 42185\nf 42185 42738 42188\nf 42186 42187 42740\nf 42186 42740 42739\nf 42187 42191 42740\nf 42188 42738 42741\nf 42188 42741 42743\nf 42188 42743 42189\nf 42189 42743 42744\nf 42189 42744 42190\nf 42190 42744 42192\nf 42191 42196 42745\nf 42191 42745 42740\nf 42192 42744 42747\nf 42192 42747 42748\nf 42192 42748 42193\nf 42193 42748 42749\nf 42193 42749 42194\nf 42194 42749 42750\nf 42194 42750 42195\nf 42195 42750 42199\nf 42196 42197 42198\nf 42196 42198 42745\nf 42197 42206 42208\nf 42197 42208 42752\nf 42197 42752 42198\nf 42198 42746 42745\nf 42198 42751 42746\nf 42198 42752 42751\nf 42199 42750 42753\nf 42199 42753 42754\nf 42199 42754 42200\nf 42200 42754 42755\nf 42200 42755 42201\nf 42201 42755 42756\nf 42201 42756 42202\nf 42202 42756 42757\nf 42202 42757 42203\nf 42203 42757 42758\nf 42203 42758 42204\nf 42204 42758 42760\nf 42204 42760 42205\nf 42205 42760 42207\nf 42206 42207 42208\nf 42207 42759 42208\nf 42207 42760 42759\nf 42208 42759 42752\nf 42209 42210 42761\nf 42209 42761 42769\nf 42209 42769 42217\nf 42210 42211 42762\nf 42210 42762 42761\nf 42211 42218 42763\nf 42211 42763 42762\nf 42212 42213 42764\nf 42212 42764 42771\nf 42212 42771 42219\nf 42213 42214 42765\nf 42213 42765 42764\nf 42214 42215 42766\nf 42214 42766 42765\nf 42215 42216 42767\nf 42215 42767 42766\nf 42216 42220 42768\nf 42216 42768 42767\nf 42217 42769 42222\nf 42218 42224 42776\nf 42218 42770 42763\nf 42218 42776 42770\nf 42219 42771 42226\nf 42220 42221 42773\nf 42220 42772 42768\nf 42220 42773 42772\nf 42221 42227 42773\nf 42222 42769 42774\nf 42222 42774 42223\nf 42223 42774 42775\nf 42223 42775 42781\nf 42223 42781 42228\nf 42224 42225 42777\nf 42224 42777 42776\nf 42225 42229 42777\nf 42226 42771 42778\nf 42226 42778 42230\nf 42227 42232 42784\nf 42227 42780 42773\nf 42227 42784 42780\nf 42228 42781 42233\nf 42229 42234 42786\nf 42229 42782 42777\nf 42229 42786 42782\nf 42230 42231 42236\nf 42230 42236 42235\nf 42230 42778 42231\nf 42231 42778 42779\nf 42231 42779 42783\nf 42231 42783 42236\nf 42232 42237 42788\nf 42232 42788 42784\nf 42233 42781 42785\nf 42233 42785 42239\nf 42234 42240 42791\nf 42234 42791 42786\nf 42235 42236 42243\nf 42235 42243 42241\nf 42236 42783 42787\nf 42236 42787 42243\nf 42237 42238 42789\nf 42237 42789 42788\nf 42238 42244 42789\nf 42239 42785 42790\nf 42239 42790 42245\nf 42240 42246 42796\nf 42240 42796 42791\nf 42241 42243 42242\nf 42242 42243 42792\nf 42242 42792 42247\nf 42243 42787 42792\nf 42244 42248 42798\nf 42244 42793 42789\nf 42244 42798 42793\nf 42245 42790 42795\nf 42245 42795 42249\nf 42246 42250 42800\nf 42246 42800 42796\nf 42247 42792 42797\nf 42247 42797 42251\nf 42248 42252 42802\nf 42248 42802 42798\nf 42249 42795 42799\nf 42249 42799 42253\nf 42250 42254 42804\nf 42250 42804 42800\nf 42251 42797 42801\nf 42251 42801 42255\nf 42252 42256 42806\nf 42252 42806 42802\nf 42253 42799 42803\nf 42253 42803 42257\nf 42254 42258 42808\nf 42254 42808 42804\nf 42255 42801 42805\nf 42255 42805 42259\nf 42256 42260 42810\nf 42256 42810 42806\nf 42257 42803 42807\nf 42257 42807 42261\nf 42258 42262 42812\nf 42258 42812 42808\nf 42259 42805 42809\nf 42259 42809 42264\nf 42260 42266 42816\nf 42260 42816 42810\nf 42261 42807 42811\nf 42261 42811 42267\nf 42262 42263 42813\nf 42262 42813 42812\nf 42263 42268 42813\nf 42264 42809 42814\nf 42264 42814 42265\nf 42265 42814 42815\nf 42265 42815 42824\nf 42265 42824 42274\nf 42266 42276 42826\nf 42266 42826 42816\nf 42267 42811 42817\nf 42267 42817 42277\nf 42268 42269 42819\nf 42268 42818 42813\nf 42268 42819 42818\nf 42269 42270 42819\nf 42270 42271 42820\nf 42270 42820 42819\nf 42271 42272 42821\nf 42271 42821 42820\nf 42272 42278 42822\nf 42272 42822 42821\nf 42273 42275 42823\nf 42273 42823 42912\nf 42273 42912 42360\nf 42274 42824 42275\nf 42275 42824 42825\nf 42275 42825 42823\nf 42276 42362 42826\nf 42277 42817 42829\nf 42277 42829 42365\nf 42278 42279 42831\nf 42278 42830 42822\nf 42278 42831 42830\nf 42279 42280 42831\nf 42280 42281 42832\nf 42280 42832 42831\nf 42281 42282 42833\nf 42281 42833 42832\nf 42282 42283 42834\nf 42282 42834 42833\nf 42283 42284 42835\nf 42283 42835 42834\nf 42284 42285 42836\nf 42284 42836 42835\nf 42285 42286 42837\nf 42285 42837 42836\nf 42286 42287 42838\nf 42286 42838 42837\nf 42287 42288 42839\nf 42287 42839 42838\nf 42288 42289 42840\nf 42288 42840 42839\nf 42289 42290 42841\nf 42289 42841 42840\nf 42290 42291 42842\nf 42290 42842 42841\nf 42291 42292 42843\nf 42291 42843 42842\nf 42292 42293 42844\nf 42292 42844 42843\nf 42293 42294 42845\nf 42293 42845 42844\nf 42294 42295 42846\nf 42294 42846 42845\nf 42295 42296 42847\nf 42295 42847 42846\nf 42296 42297 42848\nf 42296 42848 42847\nf 42297 42298 42849\nf 42297 42849 42848\nf 42298 42299 42850\nf 42298 42850 42849\nf 42299 42300 42851\nf 42299 42851 42850\nf 42300 42301 42852\nf 42300 42852 42851\nf 42301 42302 42853\nf 42301 42853 42852\nf 42302 42303 42854\nf 42302 42854 42853\nf 42303 42304 42855\nf 42303 42855 42854\nf 42304 42305 42856\nf 42304 42856 42855\nf 42305 42306 42857\nf 42305 42857 42856\nf 42306 42307 42858\nf 42306 42858 42857\nf 42307 42308 42859\nf 42307 42859 42858\nf 42308 42309 42860\nf 42308 42860 42859\nf 42309 42310 42861\nf 42309 42861 42860\nf 42310 42311 42862\nf 42310 42862 42861\nf 42311 42312 42863\nf 42311 42863 42862\nf 42312 42313 42864\nf 42312 42864 42863\nf 42313 42314 42865\nf 42313 42865 42864\nf 42314 42315 42866\nf 42314 42866 42865\nf 42315 42316 42867\nf 42315 42867 42866\nf 42316 42317 42868\nf 42316 42868 42867\nf 42317 42318 42869\nf 42317 42869 42868\nf 42318 42319 42870\nf 42318 42870 42869\nf 42319 42320 42871\nf 42319 42871 42870\nf 42320 42321 42872\nf 42320 42872 42871\nf 42321 42322 42873\nf 42321 42873 42872\nf 42322 42323 42874\nf 42322 42874 42873\nf 42323 42324 42875\nf 42323 42875 42874\nf 42324 42325 42876\nf 42324 42876 42875\nf 42325 42326 42877\nf 42325 42877 42876\nf 42326 42327 42878\nf 42326 42878 42877\nf 42327 42328 42879\nf 42327 42879 42878\nf 42328 42329 42880\nf 42328 42880 42879\nf 42329 42330 42881\nf 42329 42881 42880\nf 42330 42331 42882\nf 42330 42882 42881\nf 42331 42332 42883\nf 42331 42883 42882\nf 42332 42333 42884\nf 42332 42884 42883\nf 42333 42334 42885\nf 42333 42885 42884\nf 42334 42335 42886\nf 42334 42886 42885\nf 42335 42336 42887\nf 42335 42887 42886\nf 42336 42337 42888\nf 42336 42888 42887\nf 42337 42338 42889\nf 42337 42889 42888\nf 42338 42339 42890\nf 42338 42890 42889\nf 42339 42340 42891\nf 42339 42891 42890\nf 42340 42341 42892\nf 42340 42892 42891\nf 42341 42342 42893\nf 42341 42893 42892\nf 42342 42343 42894\nf 42342 42894 42893\nf 42343 42344 42895\nf 42343 42895 42894\nf 42344 42345 42896\nf 42344 42896 42895\nf 42345 42346 42897\nf 42345 42897 42896\nf 42346 42347 42898\nf 42346 42898 42897\nf 42347 42348 42899\nf 42347 42899 42898\nf 42348 42349 42900\nf 42348 42900 42899\nf 42349 42350 42901\nf 42349 42901 42900\nf 42350 42351 42902\nf 42350 42902 42901\nf 42351 42352 42903\nf 42351 42903 42902\nf 42352 42353 42904\nf 42352 42904 42903\nf 42353 42354 42905\nf 42353 42905 42904\nf 42354 42355 42906\nf 42354 42906 42905\nf 42355 42356 42907\nf 42355 42907 42906\nf 42356 42357 42908\nf 42356 42908 42907\nf 42357 42358 42909\nf 42357 42909 42908\nf 42358 42359 42910\nf 42358 42910 42909\nf 42359 42361 42911\nf 42359 42911 42910\nf 42360 42912 42361\nf 42361 42912 42913\nf 42361 42913 42911\nf 42362 42363 42364\nf 42362 42364 42826\nf 42363 42366 42914\nf 42363 42914 42364\nf 42364 42827 42826\nf 42364 42914 42827\nf 42365 42829 42915\nf 42365 42915 42367\nf 42366 42369 42919\nf 42366 42916 42914\nf 42366 42919 42916\nf 42367 42915 42917\nf 42367 42917 42918\nf 42367 42918 42368\nf 42368 42918 42370\nf 42369 42371 42922\nf 42369 42922 42919\nf 42370 42918 42920\nf 42370 42920 42373\nf 42371 42372 42922\nf 42372 42376 42925\nf 42372 42923 42922\nf 42372 42925 42923\nf 42373 42375 42374\nf 42373 42920 42921\nf 42373 42921 42375\nf 42374 42375 42378\nf 42375 42921 42924\nf 42375 42924 42378\nf 42376 42377 42925\nf 42377 42385 42934\nf 42377 42926 42925\nf 42377 42934 42926\nf 42378 42924 42927\nf 42378 42927 42928\nf 42378 42928 42379\nf 42379 42928 42929\nf 42379 42929 42380\nf 42380 42929 42387\nf 42381 42478 43027\nf 42381 42930 42931\nf 42381 42931 42382\nf 42381 43027 42930\nf 42382 42931 42932\nf 42382 42932 42383\nf 42383 42932 42933\nf 42383 42933 42384\nf 42384 42933 42935\nf 42384 42935 42386\nf 42385 42386 42934\nf 42386 42935 42934\nf 42387 42929 42936\nf 42387 42936 42937\nf 42387 42937 42388\nf 42388 42937 42938\nf 42388 42938 42389\nf 42389 42938 42939\nf 42389 42939 42390\nf 42390 42939 42940\nf 42390 42940 42391\nf 42391 42940 42941\nf 42391 42941 42392\nf 42392 42941 42942\nf 42392 42942 42393\nf 42393 42942 42943\nf 42393 42943 42394\nf 42394 42943 42944\nf 42394 42944 42395\nf 42395 42944 42945\nf 42395 42945 42396\nf 42396 42945 42946\nf 42396 42946 42397\nf 42397 42946 42947\nf 42397 42947 42398\nf 42398 42947 42948\nf 42398 42948 42399\nf 42399 42948 42949\nf 42399 42949 42400\nf 42400 42949 42950\nf 42400 42950 42401\nf 42401 42950 42951\nf 42401 42951 42402\nf 42402 42951 42952\nf 42402 42952 42403\nf 42403 42952 42953\nf 42403 42953 42404\nf 42404 42953 42954\nf 42404 42954 42405\nf 42405 42954 42955\nf 42405 42955 42406\nf 42406 42955 42956\nf 42406 42956 42407\nf 42407 42956 42957\nf 42407 42957 42408\nf 42408 42957 42958\nf 42408 42958 42409\nf 42409 42958 42959\nf 42409 42959 42410\nf 42410 42959 42960\nf 42410 42960 42411\nf 42411 42960 42961\nf 42411 42961 42412\nf 42412 42961 42962\nf 42412 42962 42413\nf 42413 42962 42963\nf 42413 42963 42414\nf 42414 42963 42964\nf 42414 42964 42415\nf 42415 42964 42965\nf 42415 42965 42416\nf 42416 42965 42966\nf 42416 42966 42417\nf 42417 42966 42967\nf 42417 42967 42418\nf 42418 42967 42968\nf 42418 42968 42419\nf 42419 42968 42969\nf 42419 42969 42420\nf 42420 42969 42970\nf 42420 42970 42421\nf 42421 42970 42971\nf 42421 42971 42422\nf 42422 42971 42972\nf 42422 42972 42423\nf 42423 42972 42973\nf 42423 42973 42424\nf 42424 42973 42974\nf 42424 42974 42425\nf 42425 42974 42975\nf 42425 42975 42426\nf 42426 42975 42976\nf 42426 42976 42427\nf 42427 42976 42977\nf 42427 42977 42428\nf 42428 42977 42978\nf 42428 42978 42429\nf 42429 42978 42979\nf 42429 42979 42430\nf 42430 42979 42980\nf 42430 42980 42431\nf 42431 42980 42981\nf 42431 42981 42432\nf 42432 42981 42982\nf 42432 42982 42433\nf 42433 42982 42983\nf 42433 42983 42434\nf 42434 42983 42984\nf 42434 42984 42435\nf 42435 42984 42985\nf 42435 42985 42436\nf 42436 42985 42986\nf 42436 42986 42437\nf 42437 42986 42987\nf 42437 42987 42438\nf 42438 42987 42988\nf 42438 42988 42439\nf 42439 42988 42989\nf 42439 42989 42440\nf 42440 42989 42990\nf 42440 42990 42441\nf 42441 42990 42991\nf 42441 42991 42442\nf 42442 42991 42992\nf 42442 42992 42443\nf 42443 42992 42993\nf 42443 42993 42444\nf 42444 42993 42994\nf 42444 42994 42445\nf 42445 42994 42995\nf 42445 42995 42446\nf 42446 42995 42996\nf 42446 42996 42447\nf 42447 42996 42997\nf 42447 42997 42448\nf 42448 42997 42998\nf 42448 42998 42449\nf 42449 42998 42999\nf 42449 42999 42450\nf 42450 42999 43000\nf 42450 43000 42451\nf 42451 43000 43001\nf 42451 43001 42452\nf 42452 43001 43002\nf 42452 43002 42453\nf 42453 43002 43003\nf 42453 43003 42454\nf 42454 43003 43004\nf 42454 43004 42455\nf 42455 43004 43005\nf 42455 43005 42456\nf 42456 43005 43006\nf 42456 43006 42457\nf 42457 43006 43007\nf 42457 43007 42458\nf 42458 43007 43008\nf 42458 43008 42459\nf 42459 43008 43009\nf 42459 43009 42460\nf 42460 43009 43010\nf 42460 43010 42461\nf 42461 43010 43011\nf 42461 43011 42462\nf 42462 43011 43012\nf 42462 43012 42463\nf 42463 43012 43013\nf 42463 43013 42464\nf 42464 43013 43014\nf 42464 43014 42465\nf 42465 43014 43015\nf 42465 43015 42466\nf 42466 43015 43016\nf 42466 43016 42467\nf 42467 43016 43017\nf 42467 43017 42468\nf 42468 43017 43018\nf 42468 43018 42469\nf 42469 43018 43019\nf 42469 43019 42470\nf 42470 43019 43020\nf 42470 43020 42471\nf 42471 43020 43021\nf 42471 43021 42472\nf 42472 43021 43022\nf 42472 43022 42473\nf 42473 43022 43023\nf 42473 43023 42474\nf 42474 43023 43024\nf 42474 43024 42475\nf 42475 43024 43025\nf 42475 43025 42476\nf 42476 43025 43026\nf 42476 43026 42477\nf 42477 43026 43028\nf 42477 43028 42479\nf 42478 42479 43027\nf 42479 43028 43027\nf 42480 42484 42485\nf 42480 42485 42482\nf 42481 42483 43029\nf 42481 43029 43033\nf 42481 43033 42487\nf 42482 42485 42483\nf 42483 42485 43031\nf 42483 43030 43029\nf 42483 43031 43030\nf 42484 42486 43031\nf 42484 43031 42485\nf 42486 42489 43032\nf 42486 43032 43031\nf 42487 43033 42488\nf 42488 43033 43034\nf 42488 43034 43036\nf 42488 43036 42490\nf 42489 42492 43038\nf 42489 43035 43032\nf 42489 43038 43035\nf 42490 43036 42491\nf 42491 43036 43037\nf 42491 43037 43040\nf 42491 43040 42494\nf 42492 42493 43039\nf 42492 43039 43038\nf 42493 42495 43039\nf 42494 43040 42496\nf 42495 42497 43043\nf 42495 43041 43039\nf 42495 43043 43041\nf 42496 43040 43042\nf 42496 43042 42498\nf 42497 42499 43045\nf 42497 43045 43043\nf 42498 43042 43044\nf 42498 43044 42500\nf 42499 42501 43047\nf 42499 43047 43045\nf 42500 43044 43046\nf 42500 43046 42502\nf 42501 42503 43049\nf 42501 43049 43047\nf 42502 43046 43048\nf 42502 43048 42505\nf 42503 42504 42507\nf 42503 42507 43051\nf 42503 43051 43049\nf 42504 42506 42507\nf 42505 43048 43050\nf 42505 43050 42508\nf 42506 42509 43054\nf 42506 43052 42507\nf 42506 43054 43052\nf 42507 43052 43051\nf 42508 43050 43053\nf 42508 43053 42510\nf 42509 42511 43057\nf 42509 43057 43054\nf 42510 43053 43056\nf 42510 43056 42513\nf 42511 42512 43059\nf 42511 43059 43057\nf 42512 42514 42515\nf 42512 42515 43059\nf 42513 43056 43058\nf 42513 43058 42516\nf 42514 42517 43062\nf 42514 43062 42515\nf 42515 43060 43059\nf 42515 43062 43060\nf 42516 43058 43061\nf 42516 43061 42518\nf 42517 42519 43064\nf 42517 43064 43062\nf 42518 43061 43063\nf 42518 43063 42520\nf 42519 42522 43067\nf 42519 43067 43064\nf 42520 43063 43065\nf 42520 43065 43066\nf 42520 43066 42521\nf 42521 43066 42523\nf 42522 42524 43069\nf 42522 43069 43067\nf 42523 43066 43068\nf 42523 43068 42525\nf 42524 42526 43071\nf 42524 43071 43069\nf 42525 43068 43070\nf 42525 43070 42527\nf 42526 42528 43073\nf 42526 43073 43071\nf 42527 43070 43072\nf 42527 43072 42530\nf 42528 42529 43073\nf 42529 42532 43076\nf 42529 43074 43073\nf 42529 43076 43074\nf 42530 42534 42531\nf 42530 43072 43075\nf 42530 43075 43078\nf 42530 43078 42534\nf 42531 42534 42533\nf 42532 42535 43080\nf 42532 43080 43076\nf 42533 42534 43079\nf 42533 43079 43081\nf 42533 43081 42536\nf 42534 43078 43079\nf 42535 42537 43083\nf 42535 43083 43080\nf 42536 43081 42538\nf 42537 42539 43086\nf 42537 43086 43083\nf 42538 43081 43084\nf 42538 43084 42541\nf 42539 42540 43089\nf 42539 43089 43086\nf 42540 42542 42543\nf 42540 42543 43089\nf 42541 43084 43087\nf 42541 43087 42544\nf 42542 42545 43093\nf 42542 43093 42543\nf 42543 43090 43089\nf 42543 43093 43090\nf 42544 43087 43091\nf 42544 43091 42546\nf 42545 42548 43097\nf 42545 43097 43093\nf 42546 42551 42547\nf 42546 43091 43095\nf 42546 43095 43099\nf 42546 43099 42551\nf 42547 42551 42549\nf 42548 42552 43101\nf 42548 43101 43097\nf 42549 42551 42550\nf 42550 42551 43099\nf 42550 43099 42554\nf 42552 42553 43104\nf 42552 43104 43101\nf 42553 42555 42557\nf 42553 42557 43104\nf 42554 43099 43102\nf 42554 43102 42558\nf 42555 42556 42557\nf 42556 42559 42557\nf 42557 42559 43104\nf 42558 43102 43105\nf 42558 43105 42560\nf 42559 42563 43110\nf 42559 43108 43104\nf 42559 43110 43108\nf 42560 42562 42561\nf 42560 43105 42562\nf 42561 42562 43109\nf 42561 43109 42564\nf 42562 43105 43106\nf 42562 43106 43109\nf 42563 42565 43112\nf 42563 43112 43110\nf 42564 43109 43111\nf 42564 43111 42566\nf 42565 42567 43114\nf 42565 43114 43112\nf 42566 43111 43113\nf 42566 43113 42568\nf 42567 42569 43116\nf 42567 43116 43114\nf 42568 43113 43115\nf 42568 43115 42570\nf 42569 42571 43118\nf 42569 43118 43116\nf 42570 43115 43117\nf 42570 43117 42572\nf 42571 42573 43120\nf 42571 43120 43118\nf 42572 43117 43119\nf 42572 43119 42574\nf 42573 42575 43122\nf 42573 43122 43120\nf 42574 43119 43121\nf 42574 43121 42576\nf 42575 42577 43124\nf 42575 43124 43122\nf 42576 43121 43123\nf 42576 43123 42578\nf 42577 42579 43126\nf 42577 43126 43124\nf 42578 43123 43125\nf 42578 43125 42580\nf 42579 42581 43128\nf 42579 43128 43126\nf 42580 43125 43127\nf 42580 43127 42582\nf 42581 42584 43132\nf 42581 43132 43128\nf 42582 43127 43129\nf 42582 43129 42583\nf 42583 43129 43130\nf 42583 43130 43133\nf 42583 43133 42585\nf 42584 42586 43134\nf 42584 43134 43132\nf 42585 43133 42587\nf 42586 42588 43136\nf 42586 43136 43134\nf 42587 43133 43135\nf 42587 43135 42589\nf 42588 42590 43138\nf 42588 43138 43136\nf 42589 43135 43137\nf 42589 43137 42591\nf 42590 42592 43140\nf 42590 43140 43138\nf 42591 43137 43139\nf 42591 43139 42593\nf 42592 42594 43142\nf 42592 43142 43140\nf 42593 43139 43141\nf 42593 43141 42595\nf 42594 42596 43144\nf 42594 43144 43142\nf 42595 43141 43143\nf 42595 43143 42597\nf 42596 42598 43146\nf 42596 43146 43144\nf 42597 43143 43145\nf 42597 43145 42599\nf 42598 42600 43148\nf 42598 43148 43146\nf 42599 43145 43147\nf 42599 43147 42602\nf 42600 42601 43148\nf 42601 42603 43151\nf 42601 43149 43148\nf 42601 43151 43149\nf 42602 43147 43150\nf 42602 43150 42604\nf 42603 42605 43153\nf 42603 43153 43151\nf 42604 43150 43152\nf 42604 43152 42606\nf 42605 42607 43155\nf 42605 43155 43153\nf 42606 43152 43154\nf 42606 43154 42608\nf 42607 42609 43158\nf 42607 43158 43155\nf 42608 43154 43156\nf 42608 43156 42610\nf 42609 42613 43160\nf 42609 43160 43158\nf 42610 42612 42611\nf 42610 43156 42612\nf 42611 42612 43159\nf 42611 43159 42614\nf 42612 43156 43157\nf 42612 43157 43159\nf 42613 42616 43162\nf 42613 43162 43160\nf 42614 42618 42615\nf 42614 43159 43161\nf 42614 43161 43163\nf 42614 43163 42618\nf 42615 42618 42617\nf 42616 42619 43164\nf 42616 43164 43162\nf 42617 42618 42621\nf 42617 42621 42620\nf 42618 43163 42621\nf 42619 42622 43167\nf 42619 43167 43164\nf 42620 42621 43166\nf 42620 43166 43168\nf 42620 43168 42623\nf 42621 43163 43165\nf 42621 43165 43166\nf 42622 42624 43170\nf 42622 43170 43167\nf 42623 43168 42625\nf 42624 42626 43172\nf 42624 43172 43170\nf 42625 43168 43171\nf 42625 43171 42628\nf 42626 42627 43174\nf 42626 43174 43172\nf 42627 42630 42632\nf 42627 42632 43174\nf 42628 42634 42629\nf 42628 43171 43173\nf 42628 43173 43176\nf 42628 43176 42634\nf 42629 42634 42633\nf 42630 42631 42632\nf 42631 42635 42637\nf 42631 42637 42632\nf 42632 42637 43175\nf 42632 43175 43174\nf 42633 42634 42636\nf 42634 43176 43177\nf 42634 43177 42636\nf 42635 42636 42637\nf 42636 42638 42637\nf 42636 43177 42638\nf 42637 42638 43179\nf 42637 43178 43175\nf 42637 43179 43178\nf 42638 42639 43187\nf 42638 43177 43180\nf 42638 43180 42639\nf 42638 43182 43179\nf 42638 43187 43182\nf 42639 42640 42641\nf 42639 42641 43190\nf 42639 43180 43184\nf 42639 43184 42640\nf 42639 43190 43187\nf 42640 42642 42643\nf 42640 42643 42641\nf 42640 43184 43185\nf 42640 43185 43189\nf 42640 43189 42642\nf 42641 42643 43192\nf 42641 43192 43190\nf 42642 42644 42643\nf 42642 43189 43191\nf 42642 43191 42644\nf 42643 42644 43195\nf 42643 43193 43192\nf 42643 43195 43193\nf 42644 42646 43199\nf 42644 43191 43194\nf 42644 43194 42646\nf 42644 43199 43195\nf 42645 42646 43197\nf 42645 42648 42646\nf 42645 43197 42647\nf 42646 42648 43199\nf 42646 43194 43197\nf 42647 43197 43201\nf 42647 43201 42649\nf 42648 42652 43204\nf 42648 43204 43199\nf 42649 42651 42650\nf 42649 43201 42651\nf 42650 42651 43207\nf 42650 43207 42654\nf 42651 43201 43202\nf 42651 43202 43207\nf 42652 42653 43205\nf 42652 42655 42653\nf 42652 43205 43204\nf 42653 42655 42657\nf 42653 42657 43210\nf 42653 43208 43205\nf 42653 43210 43208\nf 42654 43207 43209\nf 42654 43209 42658\nf 42655 42656 42657\nf 42656 42659 42657\nf 42657 42659 43210\nf 42658 43209 43211\nf 42658 43211 42660\nf 42659 42662 43215\nf 42659 43212 43210\nf 42659 43215 43212\nf 42660 43211 43213\nf 42660 43213 42661\nf 42661 43213 43214\nf 42661 43214 43216\nf 42661 43216 42663\nf 42662 42664 43217\nf 42662 43217 43215\nf 42663 43216 42665\nf 42664 42667 43220\nf 42664 43220 43217\nf 42665 43216 43218\nf 42665 43218 42666\nf 42666 43218 43219\nf 42666 43219 43221\nf 42666 43221 42668\nf 42667 42669 43222\nf 42667 43222 43220\nf 42668 43221 42670\nf 42669 42671 43224\nf 42669 43224 43222\nf 42670 43221 43223\nf 42670 43223 42672\nf 42671 42673 43226\nf 42671 43226 43224\nf 42672 43223 43225\nf 42672 43225 42674\nf 42673 42675 43228\nf 42673 43228 43226\nf 42674 43225 43227\nf 42674 43227 42676\nf 42675 42677 43230\nf 42675 43230 43228\nf 42676 43227 43229\nf 42676 43229 42678\nf 42677 42680 43233\nf 42677 43233 43230\nf 42678 43229 43231\nf 42678 43231 42679\nf 42679 43231 43232\nf 42679 43232 43234\nf 42679 43234 42681\nf 42680 42682 43235\nf 42680 43235 43233\nf 42681 43234 42683\nf 42682 42684 43237\nf 42682 43237 43235\nf 42683 43234 43236\nf 42683 43236 42686\nf 42684 42685 43237\nf 42685 42687 43240\nf 42685 43238 43237\nf 42685 43240 43238\nf 42686 43236 43239\nf 42686 43239 42688\nf 42687 42689 43242\nf 42687 43242 43240\nf 42688 43239 43241\nf 42688 43241 42690\nf 42689 42691 43244\nf 42689 43244 43242\nf 42690 43241 43243\nf 42690 43243 42693\nf 42691 42692 43244\nf 42692 42694 43247\nf 42692 43245 43244\nf 42692 43247 43245\nf 42693 43243 43246\nf 42693 43246 42696\nf 42694 42695 43247\nf 42695 42697 43251\nf 42695 43248 43247\nf 42695 43251 43248\nf 42696 43246 43249\nf 42696 43249 42699\nf 42697 42698 43251\nf 42698 42702 43254\nf 42698 43252 43251\nf 42698 43254 43252\nf 42699 42701 42700\nf 42699 43249 43250\nf 42699 43250 42701\nf 42700 42701 43255\nf 42700 43255 42703\nf 42701 43250 43253\nf 42701 43253 43255\nf 42702 42703 43254\nf 42703 43255 43254\nf 42704 42705 43257\nf 42704 42711 42709\nf 42704 43256 42711\nf 42704 43257 43256\nf 42705 42712 43259\nf 42705 43258 43257\nf 42705 43259 43258\nf 42706 42707 43260\nf 42706 43260 43271\nf 42706 43271 42719\nf 42707 42708 43261\nf 42707 43261 43260\nf 42708 42710 43263\nf 42708 43263 43261\nf 42709 42711 42710\nf 42710 42711 43262\nf 42710 43262 43263\nf 42711 43256 43262\nf 42712 42713 42714\nf 42712 42714 43259\nf 42713 42715 43266\nf 42713 43266 42714\nf 42714 43265 43259\nf 42714 43266 43265\nf 42715 42716 43266\nf 42716 42717 43267\nf 42716 43267 43266\nf 42717 42721 43268\nf 42717 43268 43267\nf 42718 42720 43270\nf 42718 42725 42724\nf 42718 43269 42725\nf 42718 43270 43269\nf 42719 43271 42720\nf 42720 43271 43272\nf 42720 43272 43270\nf 42721 42722 43275\nf 42721 43274 43268\nf 42721 43275 43274\nf 42722 42723 43275\nf 42723 42726 43276\nf 42723 43276 43275\nf 42724 42725 42729\nf 42724 42729 42728\nf 42725 43269 43277\nf 42725 43277 42729\nf 42726 42727 43279\nf 42726 43278 43276\nf 42726 43279 43278\nf 42727 42730 43279\nf 42728 42729 43281\nf 42728 43281 43284\nf 42728 43284 42732\nf 42729 43277 43280\nf 42729 43280 43281\nf 42730 42731 43283\nf 42730 43282 43279\nf 42730 43283 43282\nf 42731 42735 43283\nf 42732 43284 43285\nf 42732 43285 42733\nf 42733 43285 43286\nf 42733 43286 42734\nf 42734 43286 42736\nf 42735 42739 43291\nf 42735 43287 43283\nf 42735 43291 43287\nf 42736 43286 43288\nf 42736 43288 43290\nf 42736 43290 42737\nf 42737 43290 42738\nf 42738 42742 42741\nf 42738 43290 42742\nf 42739 42740 43292\nf 42739 43292 43291\nf 42740 42745 43292\nf 42741 42742 43294\nf 42741 43294 42743\nf 42742 43290 43293\nf 42742 43293 43294\nf 42743 43294 43295\nf 42743 43295 43296\nf 42743 43296 42744\nf 42744 43296 42747\nf 42745 42746 43297\nf 42745 43297 43292\nf 42746 42751 43304\nf 42746 43298 43297\nf 42746 43304 43298\nf 42747 43296 43299\nf 42747 43299 43301\nf 42747 43301 42748\nf 42748 43301 43302\nf 42748 43302 42749\nf 42749 43302 43303\nf 42749 43303 42750\nf 42750 43303 42753\nf 42751 42752 43304\nf 42752 42759 43312\nf 42752 43305 43304\nf 42752 43312 43305\nf 42753 43303 43306\nf 42753 43306 43307\nf 42753 43307 42754\nf 42754 43307 43308\nf 42754 43308 42755\nf 42755 43308 43309\nf 42755 43309 42756\nf 42756 43309 43310\nf 42756 43310 42757\nf 42757 43310 43311\nf 42757 43311 42758\nf 42758 43311 43313\nf 42758 43313 42760\nf 42759 42760 43312\nf 42760 43313 43312\nf 42761 42762 43314\nf 42761 43314 43322\nf 42761 43322 42769\nf 42762 42763 43315\nf 42762 43315 43314\nf 42763 42770 43316\nf 42763 43316 43315\nf 42764 42765 43317\nf 42764 43317 43324\nf 42764 43324 42771\nf 42765 42766 43318\nf 42765 43318 43317\nf 42766 42767 43319\nf 42766 43319 43318\nf 42767 42768 43320\nf 42767 43320 43319\nf 42768 42772 43321\nf 42768 43321 43320\nf 42769 43322 42774\nf 42770 42776 43329\nf 42770 43323 43316\nf 42770 43329 43323\nf 42771 43324 42778\nf 42772 42773 43326\nf 42772 43325 43321\nf 42772 43326 43325\nf 42773 42780 43326\nf 42774 43322 43327\nf 42774 43327 42775\nf 42775 43327 43328\nf 42775 43328 43335\nf 42775 43335 42781\nf 42776 42777 43330\nf 42776 43330 43329\nf 42777 42782 43330\nf 42778 43324 43331\nf 42778 43331 42779\nf 42779 43331 43332\nf 42779 43332 43337\nf 42779 43337 42783\nf 42780 42784 43338\nf 42780 43334 43326\nf 42780 43338 43334\nf 42781 43335 42785\nf 42782 42786 43340\nf 42782 43336 43330\nf 42782 43340 43336\nf 42783 43337 42787\nf 42784 42788 43342\nf 42784 43342 43338\nf 42785 43335 43339\nf 42785 43339 42790\nf 42786 42791 43344\nf 42786 43344 43340\nf 42787 43337 43341\nf 42787 43341 42792\nf 42788 42789 42794\nf 42788 42794 43346\nf 42788 43346 43342\nf 42789 42793 42794\nf 42790 43339 43343\nf 42790 43343 42795\nf 42791 42796 43349\nf 42791 43349 43344\nf 42792 43341 43345\nf 42792 43345 42797\nf 42793 42798 43351\nf 42793 43347 42794\nf 42793 43351 43347\nf 42794 43347 43346\nf 42795 43343 43348\nf 42795 43348 42799\nf 42796 42800 43353\nf 42796 43353 43349\nf 42797 43345 43350\nf 42797 43350 42801\nf 42798 42802 43355\nf 42798 43355 43351\nf 42799 43348 43352\nf 42799 43352 42803\nf 42800 42804 43357\nf 42800 43357 43353\nf 42801 43350 43354\nf 42801 43354 42805\nf 42802 42806 43359\nf 42802 43359 43355\nf 42803 43352 43356\nf 42803 43356 42807\nf 42804 42808 43361\nf 42804 43361 43357\nf 42805 43354 43358\nf 42805 43358 42809\nf 42806 42810 43363\nf 42806 43363 43359\nf 42807 43356 43360\nf 42807 43360 42811\nf 42808 42812 43365\nf 42808 43365 43361\nf 42809 43358 43362\nf 42809 43362 42814\nf 42810 42816 43369\nf 42810 43369 43363\nf 42811 43360 43364\nf 42811 43364 42817\nf 42812 42813 43366\nf 42812 43366 43365\nf 42813 42818 43366\nf 42814 43362 43367\nf 42814 43367 42815\nf 42815 43367 43368\nf 42815 43368 43378\nf 42815 43378 42824\nf 42816 42826 43369\nf 42817 43364 43371\nf 42817 43371 42829\nf 42818 42819 43373\nf 42818 43372 43366\nf 42818 43373 43372\nf 42819 42820 43373\nf 42820 42821 43374\nf 42820 43374 43373\nf 42821 42822 43375\nf 42821 43375 43374\nf 42822 42830 43376\nf 42822 43376 43375\nf 42823 42825 43377\nf 42823 43377 43464\nf 42823 43464 42912\nf 42824 43378 42825\nf 42825 43378 43379\nf 42825 43379 43377\nf 42826 42827 42828\nf 42826 42828 43369\nf 42827 42914 43380\nf 42827 43380 42828\nf 42828 43370 43369\nf 42828 43380 43370\nf 42829 43371 43381\nf 42829 43381 42915\nf 42830 42831 43383\nf 42830 43382 43376\nf 42830 43383 43382\nf 42831 42832 43383\nf 42832 42833 43384\nf 42832 43384 43383\nf 42833 42834 43385\nf 42833 43385 43384\nf 42834 42835 43386\nf 42834 43386 43385\nf 42835 42836 43387\nf 42835 43387 43386\nf 42836 42837 43388\nf 42836 43388 43387\nf 42837 42838 43389\nf 42837 43389 43388\nf 42838 42839 43390\nf 42838 43390 43389\nf 42839 42840 43391\nf 42839 43391 43390\nf 42840 42841 43392\nf 42840 43392 43391\nf 42841 42842 43393\nf 42841 43393 43392\nf 42842 42843 43394\nf 42842 43394 43393\nf 42843 42844 43395\nf 42843 43395 43394\nf 42844 42845 43396\nf 42844 43396 43395\nf 42845 42846 43397\nf 42845 43397 43396\nf 42846 42847 43398\nf 42846 43398 43397\nf 42847 42848 43399\nf 42847 43399 43398\nf 42848 42849 43400\nf 42848 43400 43399\nf 42849 42850 43401\nf 42849 43401 43400\nf 42850 42851 43402\nf 42850 43402 43401\nf 42851 42852 43403\nf 42851 43403 43402\nf 42852 42853 43404\nf 42852 43404 43403\nf 42853 42854 43405\nf 42853 43405 43404\nf 42854 42855 43406\nf 42854 43406 43405\nf 42855 42856 43407\nf 42855 43407 43406\nf 42856 42857 43408\nf 42856 43408 43407\nf 42857 42858 43409\nf 42857 43409 43408\nf 42858 42859 43410\nf 42858 43410 43409\nf 42859 42860 43411\nf 42859 43411 43410\nf 42860 42861 43412\nf 42860 43412 43411\nf 42861 42862 43413\nf 42861 43413 43412\nf 42862 42863 43414\nf 42862 43414 43413\nf 42863 42864 43415\nf 42863 43415 43414\nf 42864 42865 43416\nf 42864 43416 43415\nf 42865 42866 43417\nf 42865 43417 43416\nf 42866 42867 43418\nf 42866 43418 43417\nf 42867 42868 43419\nf 42867 43419 43418\nf 42868 42869 43420\nf 42868 43420 43419\nf 42869 42870 43421\nf 42869 43421 43420\nf 42870 42871 43422\nf 42870 43422 43421\nf 42871 42872 43423\nf 42871 43423 43422\nf 42872 42873 43424\nf 42872 43424 43423\nf 42873 42874 43425\nf 42873 43425 43424\nf 42874 42875 43426\nf 42874 43426 43425\nf 42875 42876 43427\nf 42875 43427 43426\nf 42876 42877 43428\nf 42876 43428 43427\nf 42877 42878 43429\nf 42877 43429 43428\nf 42878 42879 43430\nf 42878 43430 43429\nf 42879 42880 43431\nf 42879 43431 43430\nf 42880 42881 43432\nf 42880 43432 43431\nf 42881 42882 43433\nf 42881 43433 43432\nf 42882 42883 43434\nf 42882 43434 43433\nf 42883 42884 43435\nf 42883 43435 43434\nf 42884 42885 43436\nf 42884 43436 43435\nf 42885 42886 43437\nf 42885 43437 43436\nf 42886 42887 43438\nf 42886 43438 43437\nf 42887 42888 43439\nf 42887 43439 43438\nf 42888 42889 43440\nf 42888 43440 43439\nf 42889 42890 43441\nf 42889 43441 43440\nf 42890 42891 43442\nf 42890 43442 43441\nf 42891 42892 43443\nf 42891 43443 43442\nf 42892 42893 43444\nf 42892 43444 43443\nf 42893 42894 43445\nf 42893 43445 43444\nf 42894 42895 43446\nf 42894 43446 43445\nf 42895 42896 43447\nf 42895 43447 43446\nf 42896 42897 43448\nf 42896 43448 43447\nf 42897 42898 43449\nf 42897 43449 43448\nf 42898 42899 43450\nf 42898 43450 43449\nf 42899 42900 43451\nf 42899 43451 43450\nf 42900 42901 43452\nf 42900 43452 43451\nf 42901 42902 43453\nf 42901 43453 43452\nf 42902 42903 43454\nf 42902 43454 43453\nf 42903 42904 43455\nf 42903 43455 43454\nf 42904 42905 43456\nf 42904 43456 43455\nf 42905 42906 43457\nf 42905 43457 43456\nf 42906 42907 43458\nf 42906 43458 43457\nf 42907 42908 43459\nf 42907 43459 43458\nf 42908 42909 43460\nf 42908 43460 43459\nf 42909 42910 43461\nf 42909 43461 43460\nf 42910 42911 43462\nf 42910 43462 43461\nf 42911 42913 43463\nf 42911 43463 43462\nf 42912 43464 42913\nf 42913 43464 43465\nf 42913 43465 43463\nf 42914 42916 43468\nf 42914 43466 43380\nf 42914 43468 43466\nf 42915 43381 43467\nf 42915 43467 42917\nf 42916 42919 43471\nf 42916 43471 43468\nf 42917 43467 43469\nf 42917 43469 43470\nf 42917 43470 42918\nf 42918 43470 42920\nf 42919 42922 43474\nf 42919 43474 43471\nf 42920 43470 43472\nf 42920 43472 43473\nf 42920 43473 42921\nf 42921 43473 42924\nf 42922 42923 43474\nf 42923 42925 43477\nf 42923 43475 43474\nf 42923 43477 43475\nf 42924 43473 43476\nf 42924 43476 42927\nf 42925 42926 43477\nf 42926 42934 43486\nf 42926 43478 43477\nf 42926 43486 43478\nf 42927 43476 43479\nf 42927 43479 43480\nf 42927 43480 42928\nf 42928 43480 43481\nf 42928 43481 42929\nf 42929 43481 42936\nf 42930 43027 43579\nf 42930 43482 43483\nf 42930 43483 42931\nf 42930 43579 43482\nf 42931 43483 43484\nf 42931 43484 42932\nf 42932 43484 43485\nf 42932 43485 42933\nf 42933 43485 43487\nf 42933 43487 42935\nf 42934 42935 43486\nf 42935 43487 43486\nf 42936 43481 43488\nf 42936 43488 43489\nf 42936 43489 42937\nf 42937 43489 43490\nf 42937 43490 42938\nf 42938 43490 43491\nf 42938 43491 42939\nf 42939 43491 43492\nf 42939 43492 42940\nf 42940 43492 43493\nf 42940 43493 42941\nf 42941 43493 43494\nf 42941 43494 42942\nf 42942 43494 43495\nf 42942 43495 42943\nf 42943 43495 43496\nf 42943 43496 42944\nf 42944 43496 43497\nf 42944 43497 42945\nf 42945 43497 43498\nf 42945 43498 42946\nf 42946 43498 43499\nf 42946 43499 42947\nf 42947 43499 43500\nf 42947 43500 42948\nf 42948 43500 43501\nf 42948 43501 42949\nf 42949 43501 43502\nf 42949 43502 42950\nf 42950 43502 43503\nf 42950 43503 42951\nf 42951 43503 43504\nf 42951 43504 42952\nf 42952 43504 43505\nf 42952 43505 42953\nf 42953 43505 43506\nf 42953 43506 42954\nf 42954 43506 43507\nf 42954 43507 42955\nf 42955 43507 43508\nf 42955 43508 42956\nf 42956 43508 43509\nf 42956 43509 42957\nf 42957 43509 43510\nf 42957 43510 42958\nf 42958 43510 43511\nf 42958 43511 42959\nf 42959 43511 43512\nf 42959 43512 42960\nf 42960 43512 43513\nf 42960 43513 42961\nf 42961 43513 43514\nf 42961 43514 42962\nf 42962 43514 43515\nf 42962 43515 42963\nf 42963 43515 43516\nf 42963 43516 42964\nf 42964 43516 43517\nf 42964 43517 42965\nf 42965 43517 43518\nf 42965 43518 42966\nf 42966 43518 43519\nf 42966 43519 42967\nf 42967 43519 43520\nf 42967 43520 42968\nf 42968 43520 43521\nf 42968 43521 42969\nf 42969 43521 43522\nf 42969 43522 42970\nf 42970 43522 43523\nf 42970 43523 42971\nf 42971 43523 43524\nf 42971 43524 42972\nf 42972 43524 43525\nf 42972 43525 42973\nf 42973 43525 43526\nf 42973 43526 42974\nf 42974 43526 43527\nf 42974 43527 42975\nf 42975 43527 43528\nf 42975 43528 42976\nf 42976 43528 43529\nf 42976 43529 42977\nf 42977 43529 43530\nf 42977 43530 42978\nf 42978 43530 43531\nf 42978 43531 42979\nf 42979 43531 43532\nf 42979 43532 42980\nf 42980 43532 43533\nf 42980 43533 42981\nf 42981 43533 43534\nf 42981 43534 42982\nf 42982 43534 43535\nf 42982 43535 42983\nf 42983 43535 43536\nf 42983 43536 42984\nf 42984 43536 43537\nf 42984 43537 42985\nf 42985 43537 43538\nf 42985 43538 42986\nf 42986 43538 43539\nf 42986 43539 42987\nf 42987 43539 43540\nf 42987 43540 42988\nf 42988 43540 43541\nf 42988 43541 42989\nf 42989 43541 43542\nf 42989 43542 42990\nf 42990 43542 43543\nf 42990 43543 42991\nf 42991 43543 43544\nf 42991 43544 42992\nf 42992 43544 43545\nf 42992 43545 42993\nf 42993 43545 43546\nf 42993 43546 42994\nf 42994 43546 43547\nf 42994 43547 42995\nf 42995 43547 43548\nf 42995 43548 42996\nf 42996 43548 43549\nf 42996 43549 42997\nf 42997 43549 43550\nf 42997 43550 42998\nf 42998 43550 43551\nf 42998 43551 42999\nf 42999 43551 43552\nf 42999 43552 43000\nf 43000 43552 43553\nf 43000 43553 43001\nf 43001 43553 43554\nf 43001 43554 43002\nf 43002 43554 43555\nf 43002 43555 43003\nf 43003 43555 43556\nf 43003 43556 43004\nf 43004 43556 43557\nf 43004 43557 43005\nf 43005 43557 43558\nf 43005 43558 43006\nf 43006 43558 43559\nf 43006 43559 43007\nf 43007 43559 43560\nf 43007 43560 43008\nf 43008 43560 43561\nf 43008 43561 43009\nf 43009 43561 43562\nf 43009 43562 43010\nf 43010 43562 43563\nf 43010 43563 43011\nf 43011 43563 43564\nf 43011 43564 43012\nf 43012 43564 43565\nf 43012 43565 43013\nf 43013 43565 43566\nf 43013 43566 43014\nf 43014 43566 43567\nf 43014 43567 43015\nf 43015 43567 43568\nf 43015 43568 43016\nf 43016 43568 43569\nf 43016 43569 43017\nf 43017 43569 43570\nf 43017 43570 43018\nf 43018 43570 43571\nf 43018 43571 43019\nf 43019 43571 43572\nf 43019 43572 43020\nf 43020 43572 43573\nf 43020 43573 43021\nf 43021 43573 43574\nf 43021 43574 43022\nf 43022 43574 43575\nf 43022 43575 43023\nf 43023 43575 43576\nf 43023 43576 43024\nf 43024 43576 43577\nf 43024 43577 43025\nf 43025 43577 43578\nf 43025 43578 43026\nf 43026 43578 43580\nf 43026 43580 43028\nf 43027 43028 43579\nf 43028 43580 43579\nf 43029 43030 43581\nf 43029 43581 43585\nf 43029 43585 43033\nf 43030 43031 43582\nf 43030 43582 43581\nf 43031 43032 43583\nf 43031 43583 43582\nf 43032 43035 43584\nf 43032 43584 43583\nf 43033 43585 43034\nf 43034 43585 43586\nf 43034 43586 43588\nf 43034 43588 43036\nf 43035 43038 43590\nf 43035 43587 43584\nf 43035 43590 43587\nf 43036 43588 43037\nf 43037 43588 43589\nf 43037 43589 43592\nf 43037 43592 43040\nf 43038 43039 43591\nf 43038 43591 43590\nf 43039 43041 43591\nf 43040 43592 43042\nf 43041 43043 43596\nf 43041 43594 43591\nf 43041 43596 43594\nf 43042 43592 43595\nf 43042 43595 43044\nf 43043 43045 43598\nf 43043 43598 43596\nf 43044 43595 43597\nf 43044 43597 43046\nf 43045 43047 43600\nf 43045 43600 43598\nf 43046 43597 43599\nf 43046 43599 43048\nf 43047 43049 43602\nf 43047 43602 43600\nf 43048 43599 43601\nf 43048 43601 43050\nf 43049 43051 43604\nf 43049 43604 43602\nf 43050 43601 43603\nf 43050 43603 43053\nf 43051 43052 43055\nf 43051 43055 43606\nf 43051 43606 43604\nf 43052 43054 43055\nf 43053 43603 43605\nf 43053 43605 43056\nf 43054 43057 43609\nf 43054 43607 43055\nf 43054 43609 43607\nf 43055 43607 43606\nf 43056 43605 43608\nf 43056 43608 43058\nf 43057 43059 43611\nf 43057 43611 43609\nf 43058 43608 43610\nf 43058 43610 43061\nf 43059 43060 43611\nf 43060 43062 43614\nf 43060 43612 43611\nf 43060 43614 43612\nf 43061 43610 43613\nf 43061 43613 43063\nf 43062 43064 43616\nf 43062 43616 43614\nf 43063 43613 43615\nf 43063 43615 43065\nf 43064 43067 43619\nf 43064 43619 43616\nf 43065 43615 43617\nf 43065 43617 43618\nf 43065 43618 43066\nf 43066 43618 43068\nf 43067 43069 43622\nf 43067 43622 43619\nf 43068 43618 43620\nf 43068 43620 43070\nf 43069 43071 43624\nf 43069 43624 43622\nf 43070 43620 43623\nf 43070 43623 43072\nf 43071 43073 43626\nf 43071 43626 43624\nf 43072 43623 43625\nf 43072 43625 43075\nf 43073 43074 43628\nf 43073 43628 43626\nf 43074 43076 43077\nf 43074 43077 43628\nf 43075 43625 43627\nf 43075 43627 43078\nf 43076 43080 43631\nf 43076 43631 43077\nf 43077 43629 43628\nf 43077 43631 43629\nf 43078 43082 43079\nf 43078 43627 43630\nf 43078 43630 43633\nf 43078 43633 43082\nf 43079 43082 43081\nf 43080 43083 43634\nf 43080 43634 43631\nf 43081 43082 43085\nf 43081 43085 43084\nf 43082 43633 43085\nf 43083 43086 43636\nf 43083 43636 43634\nf 43084 43085 43088\nf 43084 43088 43087\nf 43085 43633 43635\nf 43085 43635 43088\nf 43086 43089 43638\nf 43086 43638 43636\nf 43087 43088 43092\nf 43087 43092 43091\nf 43088 43635 43637\nf 43088 43637 43092\nf 43089 43090 43640\nf 43089 43640 43638\nf 43090 43093 43094\nf 43090 43094 43640\nf 43091 43092 43096\nf 43091 43096 43095\nf 43092 43637 43639\nf 43092 43639 43096\nf 43093 43097 43094\nf 43094 43097 43098\nf 43094 43098 43642\nf 43094 43642 43640\nf 43095 43096 43100\nf 43095 43100 43099\nf 43096 43639 43641\nf 43096 43641 43100\nf 43097 43101 43645\nf 43097 43645 43098\nf 43098 43643 43642\nf 43098 43645 43643\nf 43099 43100 43103\nf 43099 43103 43102\nf 43100 43641 43644\nf 43100 43644 43103\nf 43101 43104 43648\nf 43101 43648 43645\nf 43102 43103 43107\nf 43102 43107 43105\nf 43103 43644 43647\nf 43103 43647 43107\nf 43104 43108 43651\nf 43104 43651 43648\nf 43105 43107 43106\nf 43106 43107 43650\nf 43106 43650 43109\nf 43107 43647 43650\nf 43108 43110 43654\nf 43108 43654 43651\nf 43109 43650 43653\nf 43109 43653 43111\nf 43110 43112 43657\nf 43110 43657 43654\nf 43111 43653 43656\nf 43111 43656 43113\nf 43112 43114 43660\nf 43112 43660 43657\nf 43113 43656 43659\nf 43113 43659 43115\nf 43114 43116 43663\nf 43114 43663 43660\nf 43115 43659 43662\nf 43115 43662 43117\nf 43116 43118 43666\nf 43116 43666 43663\nf 43117 43662 43665\nf 43117 43665 43119\nf 43118 43120 43669\nf 43118 43669 43666\nf 43119 43665 43667\nf 43119 43667 43121\nf 43120 43122 43672\nf 43120 43672 43669\nf 43121 43667 43670\nf 43121 43670 43123\nf 43122 43124 43675\nf 43122 43675 43672\nf 43123 43670 43673\nf 43123 43673 43125\nf 43124 43126 43678\nf 43124 43678 43675\nf 43125 43673 43676\nf 43125 43676 43127\nf 43126 43128 43682\nf 43126 43682 43678\nf 43127 43676 43679\nf 43127 43679 43129\nf 43128 43132 43684\nf 43128 43684 43682\nf 43129 43131 43130\nf 43129 43679 43131\nf 43130 43131 43683\nf 43130 43683 43133\nf 43131 43679 43680\nf 43131 43680 43683\nf 43132 43134 43686\nf 43132 43686 43684\nf 43133 43683 43685\nf 43133 43685 43135\nf 43134 43136 43688\nf 43134 43688 43686\nf 43135 43685 43687\nf 43135 43687 43137\nf 43136 43138 43690\nf 43136 43690 43688\nf 43137 43687 43689\nf 43137 43689 43139\nf 43138 43140 43692\nf 43138 43692 43690\nf 43139 43689 43691\nf 43139 43691 43141\nf 43140 43142 43694\nf 43140 43694 43692\nf 43141 43691 43693\nf 43141 43693 43143\nf 43142 43144 43696\nf 43142 43696 43694\nf 43143 43693 43695\nf 43143 43695 43145\nf 43144 43146 43698\nf 43144 43698 43696\nf 43145 43695 43697\nf 43145 43697 43147\nf 43146 43148 43700\nf 43146 43700 43698\nf 43147 43697 43699\nf 43147 43699 43150\nf 43148 43149 43700\nf 43149 43151 43704\nf 43149 43701 43700\nf 43149 43704 43701\nf 43150 43699 43703\nf 43150 43703 43152\nf 43151 43153 43706\nf 43151 43706 43704\nf 43152 43703 43705\nf 43152 43705 43154\nf 43153 43155 43708\nf 43153 43708 43706\nf 43154 43705 43707\nf 43154 43707 43156\nf 43155 43158 43712\nf 43155 43712 43708\nf 43156 43707 43709\nf 43156 43709 43157\nf 43157 43709 43710\nf 43157 43710 43713\nf 43157 43713 43159\nf 43158 43160 43714\nf 43158 43714 43712\nf 43159 43713 43161\nf 43160 43162 43716\nf 43160 43716 43714\nf 43161 43713 43715\nf 43161 43715 43163\nf 43162 43164 43718\nf 43162 43718 43716\nf 43163 43715 43717\nf 43163 43717 43165\nf 43164 43167 43720\nf 43164 43720 43718\nf 43165 43169 43166\nf 43165 43717 43719\nf 43165 43719 43721\nf 43165 43721 43169\nf 43166 43169 43168\nf 43167 43170 43723\nf 43167 43723 43720\nf 43168 43169 43722\nf 43168 43722 43724\nf 43168 43724 43171\nf 43169 43721 43722\nf 43170 43172 43726\nf 43170 43726 43723\nf 43171 43724 43173\nf 43172 43174 43728\nf 43172 43728 43726\nf 43173 43724 43727\nf 43173 43727 43176\nf 43174 43175 43728\nf 43175 43178 43731\nf 43175 43729 43728\nf 43175 43731 43729\nf 43176 43181 43177\nf 43176 43727 43730\nf 43176 43730 43733\nf 43176 43733 43181\nf 43177 43181 43180\nf 43178 43179 43734\nf 43178 43734 43731\nf 43179 43182 43183\nf 43179 43183 43734\nf 43180 43181 43186\nf 43180 43186 43184\nf 43181 43733 43186\nf 43182 43187 43183\nf 43183 43187 43188\nf 43183 43188 43736\nf 43183 43736 43734\nf 43184 43186 43185\nf 43185 43186 43735\nf 43185 43735 43189\nf 43186 43733 43735\nf 43187 43190 43739\nf 43187 43739 43188\nf 43188 43737 43736\nf 43188 43739 43737\nf 43189 43735 43738\nf 43189 43738 43191\nf 43190 43192 43743\nf 43190 43743 43739\nf 43191 43738 43741\nf 43191 43741 43194\nf 43192 43193 43748\nf 43192 43748 43743\nf 43193 43195 43196\nf 43193 43196 43748\nf 43194 43741 43745\nf 43194 43745 43197\nf 43195 43199 43196\nf 43196 43199 43200\nf 43196 43200 43751\nf 43196 43751 43748\nf 43197 43198 43203\nf 43197 43203 43201\nf 43197 43745 43198\nf 43198 43745 43746\nf 43198 43746 43750\nf 43198 43750 43203\nf 43199 43204 43200\nf 43200 43204 43206\nf 43200 43206 43753\nf 43200 43753 43751\nf 43201 43203 43202\nf 43202 43203 43752\nf 43202 43752 43207\nf 43203 43750 43752\nf 43204 43205 43206\nf 43205 43208 43206\nf 43206 43208 43753\nf 43207 43752 43754\nf 43207 43754 43209\nf 43208 43210 43757\nf 43208 43755 43753\nf 43208 43757 43755\nf 43209 43754 43756\nf 43209 43756 43211\nf 43210 43212 43759\nf 43210 43759 43757\nf 43211 43756 43758\nf 43211 43758 43213\nf 43212 43215 43763\nf 43212 43763 43759\nf 43213 43758 43760\nf 43213 43760 43214\nf 43214 43760 43761\nf 43214 43761 43764\nf 43214 43764 43216\nf 43215 43217 43765\nf 43215 43765 43763\nf 43216 43764 43218\nf 43217 43220 43769\nf 43217 43769 43765\nf 43218 43764 43767\nf 43218 43767 43219\nf 43219 43767 43768\nf 43219 43768 43771\nf 43219 43771 43221\nf 43220 43222 43772\nf 43220 43772 43769\nf 43221 43771 43223\nf 43222 43224 43775\nf 43222 43775 43772\nf 43223 43771 43774\nf 43223 43774 43225\nf 43224 43226 43778\nf 43224 43778 43775\nf 43225 43774 43777\nf 43225 43777 43227\nf 43226 43228 43780\nf 43226 43780 43778\nf 43227 43777 43779\nf 43227 43779 43229\nf 43228 43230 43782\nf 43228 43782 43780\nf 43229 43779 43781\nf 43229 43781 43231\nf 43230 43233 43785\nf 43230 43785 43782\nf 43231 43781 43783\nf 43231 43783 43232\nf 43232 43783 43784\nf 43232 43784 43786\nf 43232 43786 43234\nf 43233 43235 43787\nf 43233 43787 43785\nf 43234 43786 43236\nf 43235 43237 43789\nf 43235 43789 43787\nf 43236 43786 43788\nf 43236 43788 43239\nf 43237 43238 43789\nf 43238 43240 43792\nf 43238 43790 43789\nf 43238 43792 43790\nf 43239 43788 43791\nf 43239 43791 43241\nf 43240 43242 43794\nf 43240 43794 43792\nf 43241 43791 43793\nf 43241 43793 43243\nf 43242 43244 43796\nf 43242 43796 43794\nf 43243 43793 43795\nf 43243 43795 43246\nf 43244 43245 43796\nf 43245 43247 43799\nf 43245 43797 43796\nf 43245 43799 43797\nf 43246 43795 43798\nf 43246 43798 43249\nf 43247 43248 43799\nf 43248 43251 43803\nf 43248 43800 43799\nf 43248 43803 43800\nf 43249 43798 43801\nf 43249 43801 43802\nf 43249 43802 43250\nf 43250 43802 43253\nf 43251 43252 43803\nf 43252 43254 43806\nf 43252 43804 43803\nf 43252 43806 43804\nf 43253 43802 43805\nf 43253 43805 43807\nf 43253 43807 43255\nf 43254 43255 43806\nf 43255 43807 43806\nf 43256 43257 43810\nf 43256 43264 43262\nf 43256 43809 43264\nf 43256 43810 43809\nf 43257 43258 43811\nf 43257 43811 43810\nf 43258 43259 43812\nf 43258 43812 43811\nf 43259 43265 43813\nf 43259 43813 43812\nf 43260 43261 43815\nf 43260 43273 43271\nf 43260 43814 43273\nf 43260 43815 43814\nf 43261 43263 43817\nf 43261 43817 43815\nf 43262 43264 43263\nf 43263 43264 43816\nf 43263 43816 43817\nf 43264 43809 43816\nf 43265 43266 43819\nf 43265 43818 43813\nf 43265 43819 43818\nf 43266 43267 43819\nf 43267 43268 43820\nf 43267 43820 43819\nf 43268 43274 43821\nf 43268 43821 43820\nf 43269 43270 43822\nf 43269 43822 43828\nf 43269 43828 43277\nf 43270 43272 43824\nf 43270 43824 43822\nf 43271 43273 43272\nf 43272 43273 43823\nf 43272 43823 43824\nf 43273 43814 43823\nf 43274 43275 43826\nf 43274 43825 43821\nf 43274 43826 43825\nf 43275 43276 43826\nf 43276 43278 43827\nf 43276 43827 43826\nf 43277 43828 43280\nf 43278 43279 43830\nf 43278 43829 43827\nf 43278 43830 43829\nf 43279 43282 43830\nf 43280 43828 43831\nf 43280 43831 43832\nf 43280 43832 43281\nf 43281 43832 43284\nf 43282 43283 43834\nf 43282 43833 43830\nf 43282 43834 43833\nf 43283 43287 43834\nf 43284 43832 43835\nf 43284 43835 43836\nf 43284 43836 43285\nf 43285 43836 43286\nf 43286 43289 43288\nf 43286 43836 43289\nf 43287 43291 43842\nf 43287 43837 43834\nf 43287 43842 43837\nf 43288 43289 43839\nf 43288 43839 43290\nf 43289 43836 43838\nf 43289 43838 43839\nf 43290 43839 43841\nf 43290 43841 43293\nf 43291 43292 43843\nf 43291 43843 43842\nf 43292 43297 43843\nf 43293 43841 43844\nf 43293 43844 43845\nf 43293 43845 43294\nf 43294 43845 43846\nf 43294 43846 43295\nf 43295 43846 43296\nf 43296 43300 43299\nf 43296 43846 43300\nf 43297 43298 43847\nf 43297 43847 43843\nf 43298 43304 43855\nf 43298 43848 43847\nf 43298 43855 43848\nf 43299 43300 43850\nf 43299 43850 43301\nf 43300 43846 43849\nf 43300 43849 43850\nf 43301 43850 43852\nf 43301 43852 43853\nf 43301 43853 43302\nf 43302 43853 43854\nf 43302 43854 43303\nf 43303 43854 43306\nf 43304 43305 43855\nf 43305 43312 43864\nf 43305 43856 43855\nf 43305 43864 43856\nf 43306 43854 43857\nf 43306 43857 43858\nf 43306 43858 43307\nf 43307 43858 43860\nf 43307 43860 43308\nf 43308 43860 43861\nf 43308 43861 43309\nf 43309 43861 43862\nf 43309 43862 43310\nf 43310 43862 43863\nf 43310 43863 43311\nf 43311 43863 43865\nf 43311 43865 43313\nf 43312 43313 43864\nf 43313 43865 43864\nf 43314 43315 43866\nf 43314 43866 43874\nf 43314 43874 43322\nf 43315 43316 43867\nf 43315 43867 43866\nf 43316 43323 43868\nf 43316 43868 43867\nf 43317 43318 43869\nf 43317 43869 43876\nf 43317 43876 43324\nf 43318 43319 43870\nf 43318 43870 43869\nf 43319 43320 43871\nf 43319 43871 43870\nf 43320 43321 43872\nf 43320 43872 43871\nf 43321 43325 43873\nf 43321 43873 43872\nf 43322 43874 43327\nf 43323 43329 43882\nf 43323 43875 43868\nf 43323 43882 43875\nf 43324 43876 43331\nf 43325 43326 43879\nf 43325 43878 43873\nf 43325 43879 43878\nf 43326 43334 43879\nf 43327 43874 43880\nf 43327 43880 43328\nf 43328 43880 43881\nf 43328 43881 43886\nf 43328 43886 43335\nf 43329 43330 43883\nf 43329 43883 43882\nf 43330 43336 43883\nf 43331 43333 43332\nf 43331 43876 43333\nf 43332 43333 43884\nf 43332 43884 43337\nf 43333 43876 43877\nf 43333 43877 43884\nf 43334 43338 43889\nf 43334 43885 43879\nf 43334 43889 43885\nf 43335 43886 43339\nf 43336 43340 43891\nf 43336 43887 43883\nf 43336 43891 43887\nf 43337 43884 43888\nf 43337 43888 43341\nf 43338 43342 43893\nf 43338 43893 43889\nf 43339 43886 43890\nf 43339 43890 43343\nf 43340 43344 43895\nf 43340 43895 43891\nf 43341 43888 43892\nf 43341 43892 43345\nf 43342 43346 43897\nf 43342 43897 43893\nf 43343 43890 43894\nf 43343 43894 43348\nf 43344 43349 43900\nf 43344 43900 43895\nf 43345 43892 43896\nf 43345 43896 43350\nf 43346 43347 43898\nf 43346 43898 43897\nf 43347 43351 43898\nf 43348 43894 43899\nf 43348 43899 43352\nf 43349 43353 43904\nf 43349 43904 43900\nf 43350 43896 43901\nf 43350 43901 43354\nf 43351 43355 43906\nf 43351 43902 43898\nf 43351 43906 43902\nf 43352 43899 43903\nf 43352 43903 43356\nf 43353 43357 43908\nf 43353 43908 43904\nf 43354 43901 43905\nf 43354 43905 43358\nf 43355 43359 43910\nf 43355 43910 43906\nf 43356 43903 43907\nf 43356 43907 43360\nf 43357 43361 43912\nf 43357 43912 43908\nf 43358 43905 43909\nf 43358 43909 43362\nf 43359 43363 43914\nf 43359 43914 43910\nf 43360 43907 43911\nf 43360 43911 43364\nf 43361 43365 43916\nf 43361 43916 43912\nf 43362 43909 43913\nf 43362 43913 43367\nf 43363 43369 43921\nf 43363 43921 43914\nf 43364 43911 43915\nf 43364 43915 43371\nf 43365 43366 43917\nf 43365 43917 43916\nf 43366 43372 43917\nf 43367 43913 43919\nf 43367 43919 43368\nf 43368 43919 43920\nf 43368 43920 43931\nf 43368 43931 43378\nf 43369 43370 43921\nf 43370 43380 43934\nf 43370 43922 43921\nf 43370 43934 43922\nf 43371 43915 43924\nf 43371 43924 43381\nf 43372 43373 43926\nf 43372 43925 43917\nf 43372 43926 43925\nf 43373 43374 43926\nf 43374 43375 43927\nf 43374 43927 43926\nf 43375 43376 43928\nf 43375 43928 43927\nf 43376 43382 43929\nf 43376 43929 43928\nf 43377 43379 43930\nf 43377 43930 44018\nf 43377 44018 43464\nf 43378 43931 43379\nf 43379 43931 43932\nf 43379 43932 43930\nf 43380 43466 44020\nf 43380 44020 43934\nf 43381 43924 43935\nf 43381 43935 43467\nf 43382 43383 43937\nf 43382 43936 43929\nf 43382 43937 43936\nf 43383 43384 43937\nf 43384 43385 43938\nf 43384 43938 43937\nf 43385 43386 43939\nf 43385 43939 43938\nf 43386 43387 43940\nf 43386 43940 43939\nf 43387 43388 43941\nf 43387 43941 43940\nf 43388 43389 43942\nf 43388 43942 43941\nf 43389 43390 43943\nf 43389 43943 43942\nf 43390 43391 43944\nf 43390 43944 43943\nf 43391 43392 43945\nf 43391 43945 43944\nf 43392 43393 43946\nf 43392 43946 43945\nf 43393 43394 43947\nf 43393 43947 43946\nf 43394 43395 43948\nf 43394 43948 43947\nf 43395 43396 43949\nf 43395 43949 43948\nf 43396 43397 43950\nf 43396 43950 43949\nf 43397 43398 43951\nf 43397 43951 43950\nf 43398 43399 43952\nf 43398 43952 43951\nf 43399 43400 43953\nf 43399 43953 43952\nf 43400 43401 43954\nf 43400 43954 43953\nf 43401 43402 43955\nf 43401 43955 43954\nf 43402 43403 43956\nf 43402 43956 43955\nf 43403 43404 43957\nf 43403 43957 43956\nf 43404 43405 43958\nf 43404 43958 43957\nf 43405 43406 43959\nf 43405 43959 43958\nf 43406 43407 43960\nf 43406 43960 43959\nf 43407 43408 43961\nf 43407 43961 43960\nf 43408 43409 43962\nf 43408 43962 43961\nf 43409 43410 43963\nf 43409 43963 43962\nf 43410 43411 43964\nf 43410 43964 43963\nf 43411 43412 43965\nf 43411 43965 43964\nf 43412 43413 43966\nf 43412 43966 43965\nf 43413 43414 43967\nf 43413 43967 43966\nf 43414 43415 43968\nf 43414 43968 43967\nf 43415 43416 43969\nf 43415 43969 43968\nf 43416 43417 43970\nf 43416 43970 43969\nf 43417 43418 43971\nf 43417 43971 43970\nf 43418 43419 43972\nf 43418 43972 43971\nf 43419 43420 43973\nf 43419 43973 43972\nf 43420 43421 43974\nf 43420 43974 43973\nf 43421 43422 43975\nf 43421 43975 43974\nf 43422 43423 43976\nf 43422 43976 43975\nf 43423 43424 43977\nf 43423 43977 43976\nf 43424 43425 43978\nf 43424 43978 43977\nf 43425 43426 43979\nf 43425 43979 43978\nf 43426 43427 43980\nf 43426 43980 43979\nf 43427 43428 43981\nf 43427 43981 43980\nf 43428 43429 43982\nf 43428 43982 43981\nf 43429 43430 43983\nf 43429 43983 43982\nf 43430 43431 43984\nf 43430 43984 43983\nf 43431 43432 43985\nf 43431 43985 43984\nf 43432 43433 43986\nf 43432 43986 43985\nf 43433 43434 43987\nf 43433 43987 43986\nf 43434 43435 43988\nf 43434 43988 43987\nf 43435 43436 43989\nf 43435 43989 43988\nf 43436 43437 43990\nf 43436 43990 43989\nf 43437 43438 43991\nf 43437 43991 43990\nf 43438 43439 43992\nf 43438 43992 43991\nf 43439 43440 43993\nf 43439 43993 43992\nf 43440 43441 43994\nf 43440 43994 43993\nf 43441 43442 43995\nf 43441 43995 43994\nf 43442 43443 43996\nf 43442 43996 43995\nf 43443 43444 43997\nf 43443 43997 43996\nf 43444 43445 43998\nf 43444 43998 43997\nf 43445 43446 43999\nf 43445 43999 43998\nf 43446 43447 44000\nf 43446 44000 43999\nf 43447 43448 44001\nf 43447 44001 44000\nf 43448 43449 44002\nf 43448 44002 44001\nf 43449 43450 44003\nf 43449 44003 44002\nf 43450 43451 44004\nf 43450 44004 44003\nf 43451 43452 44005\nf 43451 44005 44004\nf 43452 43453 44006\nf 43452 44006 44005\nf 43453 43454 44007\nf 43453 44007 44006\nf 43454 43455 44008\nf 43454 44008 44007\nf 43455 43456 44009\nf 43455 44009 44008\nf 43456 43457 44010\nf 43456 44010 44009\nf 43457 43458 44011\nf 43457 44011 44010\nf 43458 43459 44012\nf 43458 44012 44011\nf 43459 43460 44013\nf 43459 44013 44012\nf 43460 43461 44014\nf 43460 44014 44013\nf 43461 43462 44015\nf 43461 44015 44014\nf 43462 43463 44016\nf 43462 44016 44015\nf 43463 43465 44017\nf 43463 44017 44016\nf 43464 44018 43465\nf 43465 44018 44019\nf 43465 44019 44017\nf 43466 43468 44022\nf 43466 44022 44020\nf 43467 43935 44021\nf 43467 44021 43469\nf 43468 43471 44025\nf 43468 44025 44022\nf 43469 44021 44023\nf 43469 44023 44024\nf 43469 44024 43470\nf 43470 44024 43472\nf 43471 43474 44028\nf 43471 44028 44025\nf 43472 44024 44026\nf 43472 44026 44027\nf 43472 44027 43473\nf 43473 44027 43476\nf 43474 43475 44028\nf 43475 43477 44032\nf 43475 44029 44028\nf 43475 44032 44029\nf 43476 44027 44030\nf 43476 44030 43479\nf 43477 43478 44032\nf 43478 43486 44041\nf 43478 44033 44032\nf 43478 44041 44033\nf 43479 44030 44034\nf 43479 44034 44035\nf 43479 44035 43480\nf 43480 44035 44036\nf 43480 44036 43481\nf 43481 44036 43488\nf 43482 43579 44134\nf 43482 44037 44038\nf 43482 44038 43483\nf 43482 44134 44037\nf 43483 44038 44039\nf 43483 44039 43484\nf 43484 44039 44040\nf 43484 44040 43485\nf 43485 44040 44042\nf 43485 44042 43487\nf 43486 43487 44041\nf 43487 44042 44041\nf 43488 44036 44043\nf 43488 44043 44044\nf 43488 44044 43489\nf 43489 44044 44045\nf 43489 44045 43490\nf 43490 44045 44046\nf 43490 44046 43491\nf 43491 44046 44047\nf 43491 44047 43492\nf 43492 44047 44048\nf 43492 44048 43493\nf 43493 44048 44049\nf 43493 44049 43494\nf 43494 44049 44050\nf 43494 44050 43495\nf 43495 44050 44051\nf 43495 44051 43496\nf 43496 44051 44052\nf 43496 44052 43497\nf 43497 44052 44053\nf 43497 44053 43498\nf 43498 44053 44054\nf 43498 44054 43499\nf 43499 44054 44055\nf 43499 44055 43500\nf 43500 44055 44056\nf 43500 44056 43501\nf 43501 44056 44057\nf 43501 44057 43502\nf 43502 44057 44058\nf 43502 44058 43503\nf 43503 44058 44059\nf 43503 44059 43504\nf 43504 44059 44060\nf 43504 44060 43505\nf 43505 44060 44061\nf 43505 44061 43506\nf 43506 44061 44062\nf 43506 44062 43507\nf 43507 44062 44063\nf 43507 44063 43508\nf 43508 44063 44064\nf 43508 44064 43509\nf 43509 44064 44065\nf 43509 44065 43510\nf 43510 44065 44066\nf 43510 44066 43511\nf 43511 44066 44067\nf 43511 44067 43512\nf 43512 44067 44068\nf 43512 44068 43513\nf 43513 44068 44069\nf 43513 44069 43514\nf 43514 44069 44070\nf 43514 44070 43515\nf 43515 44070 44071\nf 43515 44071 43516\nf 43516 44071 44072\nf 43516 44072 43517\nf 43517 44072 44073\nf 43517 44073 43518\nf 43518 44073 44074\nf 43518 44074 43519\nf 43519 44074 44075\nf 43519 44075 43520\nf 43520 44075 44076\nf 43520 44076 43521\nf 43521 44076 44077\nf 43521 44077 43522\nf 43522 44077 44078\nf 43522 44078 43523\nf 43523 44078 44079\nf 43523 44079 43524\nf 43524 44079 44080\nf 43524 44080 43525\nf 43525 44080 44081\nf 43525 44081 43526\nf 43526 44081 44082\nf 43526 44082 43527\nf 43527 44082 44083\nf 43527 44083 43528\nf 43528 44083 44084\nf 43528 44084 43529\nf 43529 44084 44085\nf 43529 44085 43530\nf 43530 44085 44086\nf 43530 44086 43531\nf 43531 44086 44087\nf 43531 44087 43532\nf 43532 44087 44088\nf 43532 44088 43533\nf 43533 44088 44089\nf 43533 44089 43534\nf 43534 44089 44090\nf 43534 44090 43535\nf 43535 44090 44091\nf 43535 44091 43536\nf 43536 44091 44092\nf 43536 44092 43537\nf 43537 44092 44093\nf 43537 44093 43538\nf 43538 44093 44094\nf 43538 44094 43539\nf 43539 44094 44095\nf 43539 44095 43540\nf 43540 44095 44096\nf 43540 44096 43541\nf 43541 44096 44097\nf 43541 44097 43542\nf 43542 44097 44098\nf 43542 44098 43543\nf 43543 44098 44099\nf 43543 44099 43544\nf 43544 44099 44100\nf 43544 44100 43545\nf 43545 44100 44101\nf 43545 44101 43546\nf 43546 44101 44102\nf 43546 44102 43547\nf 43547 44102 44103\nf 43547 44103 43548\nf 43548 44103 44104\nf 43548 44104 43549\nf 43549 44104 44105\nf 43549 44105 43550\nf 43550 44105 44106\nf 43550 44106 43551\nf 43551 44106 44107\nf 43551 44107 43552\nf 43552 44107 44108\nf 43552 44108 43553\nf 43553 44108 44109\nf 43553 44109 43554\nf 43554 44109 44110\nf 43554 44110 43555\nf 43555 44110 44111\nf 43555 44111 43556\nf 43556 44111 44112\nf 43556 44112 43557\nf 43557 44112 44113\nf 43557 44113 43558\nf 43558 44113 44114\nf 43558 44114 43559\nf 43559 44114 44115\nf 43559 44115 43560\nf 43560 44115 44116\nf 43560 44116 43561\nf 43561 44116 44117\nf 43561 44117 43562\nf 43562 44117 44118\nf 43562 44118 43563\nf 43563 44118 44119\nf 43563 44119 43564\nf 43564 44119 44120\nf 43564 44120 43565\nf 43565 44120 44121\nf 43565 44121 43566\nf 43566 44121 44122\nf 43566 44122 43567\nf 43567 44122 44123\nf 43567 44123 43568\nf 43568 44123 44124\nf 43568 44124 43569\nf 43569 44124 44125\nf 43569 44125 43570\nf 43570 44125 44126\nf 43570 44126 43571\nf 43571 44126 44127\nf 43571 44127 43572\nf 43572 44127 44128\nf 43572 44128 43573\nf 43573 44128 44129\nf 43573 44129 43574\nf 43574 44129 44130\nf 43574 44130 43575\nf 43575 44130 44131\nf 43575 44131 43576\nf 43576 44131 44132\nf 43576 44132 43577\nf 43577 44132 44133\nf 43577 44133 43578\nf 43578 44133 44135\nf 43578 44135 43580\nf 43579 43580 44134\nf 43580 44135 44134\nf 43581 43582 44136\nf 43581 44136 44141\nf 43581 44141 43585\nf 43582 43583 44137\nf 43582 44137 44136\nf 43583 43584 44138\nf 43583 44138 44137\nf 43584 43587 44140\nf 43584 44140 44138\nf 43585 44141 43586\nf 43586 44141 44142\nf 43586 44142 44144\nf 43586 44144 43588\nf 43587 43590 44145\nf 43587 44143 44140\nf 43587 44145 44143\nf 43588 44144 44147\nf 43588 44147 43589\nf 43589 43593 43592\nf 43589 44147 43593\nf 43590 43591 44146\nf 43590 44146 44145\nf 43591 43594 44146\nf 43592 43593 44150\nf 43592 44150 43595\nf 43593 44147 44148\nf 43593 44148 44150\nf 43594 43596 44151\nf 43594 44149 44146\nf 43594 44151 44149\nf 43595 44150 43597\nf 43596 43598 44153\nf 43596 44153 44151\nf 43597 44150 44152\nf 43597 44152 43599\nf 43598 43600 44155\nf 43598 44155 44153\nf 43599 44152 44154\nf 43599 44154 43601\nf 43600 43602 44157\nf 43600 44157 44155\nf 43601 44154 44156\nf 43601 44156 43603\nf 43602 43604 44159\nf 43602 44159 44157\nf 43603 44156 44158\nf 43603 44158 43605\nf 43604 43606 44161\nf 43604 44161 44159\nf 43605 44158 44160\nf 43605 44160 43608\nf 43606 43607 44162\nf 43606 44162 44161\nf 43607 43609 44162\nf 43608 44160 44163\nf 43608 44163 43610\nf 43609 43611 44166\nf 43609 44164 44162\nf 43609 44166 44164\nf 43610 44163 44165\nf 43610 44165 43613\nf 43611 43612 44166\nf 43612 43614 44169\nf 43612 44167 44166\nf 43612 44169 44167\nf 43613 44165 44168\nf 43613 44168 43615\nf 43614 43616 44171\nf 43614 44171 44169\nf 43615 44168 44170\nf 43615 44170 43617\nf 43616 43619 44173\nf 43616 44173 44171\nf 43617 43621 43618\nf 43617 44170 44172\nf 43617 44172 44174\nf 43617 44174 43621\nf 43618 43621 43620\nf 43619 43622 44176\nf 43619 44176 44173\nf 43620 43621 44175\nf 43620 44175 44177\nf 43620 44177 43623\nf 43621 44174 44175\nf 43622 43624 44179\nf 43622 44179 44176\nf 43623 44177 43625\nf 43624 43626 44181\nf 43624 44181 44179\nf 43625 44177 44180\nf 43625 44180 43627\nf 43626 43628 44183\nf 43626 44183 44181\nf 43627 44180 44182\nf 43627 44182 43630\nf 43628 43629 44185\nf 43628 44185 44183\nf 43629 43631 43632\nf 43629 43632 44185\nf 43630 44182 44184\nf 43630 44184 43633\nf 43631 43634 44188\nf 43631 44188 43632\nf 43632 44186 44185\nf 43632 44188 44186\nf 43633 44184 44187\nf 43633 44187 43635\nf 43634 43636 44190\nf 43634 44190 44188\nf 43635 44187 44189\nf 43635 44189 43637\nf 43636 43638 44192\nf 43636 44192 44190\nf 43637 44189 44191\nf 43637 44191 43639\nf 43638 43640 44194\nf 43638 44194 44192\nf 43639 44191 44193\nf 43639 44193 43641\nf 43640 43642 44196\nf 43640 44196 44194\nf 43641 44193 44195\nf 43641 44195 43644\nf 43642 43643 44198\nf 43642 44198 44196\nf 43643 43645 43646\nf 43643 43646 44198\nf 43644 44195 44197\nf 43644 44197 43647\nf 43645 43648 43646\nf 43646 43648 43649\nf 43646 43649 44200\nf 43646 44200 44198\nf 43647 44197 44199\nf 43647 44199 43650\nf 43648 43651 43649\nf 43649 43651 43652\nf 43649 43652 44202\nf 43649 44202 44200\nf 43650 44199 44201\nf 43650 44201 43653\nf 43651 43654 43652\nf 43652 43654 43655\nf 43652 43655 44204\nf 43652 44204 44202\nf 43653 44201 44203\nf 43653 44203 43656\nf 43654 43657 43655\nf 43655 43657 43658\nf 43655 43658 44206\nf 43655 44206 44204\nf 43656 44203 44205\nf 43656 44205 43659\nf 43657 43660 43658\nf 43658 43660 43661\nf 43658 43661 44208\nf 43658 44208 44206\nf 43659 44205 44207\nf 43659 44207 43662\nf 43660 43663 43661\nf 43661 43663 43664\nf 43661 43664 44211\nf 43661 44211 44208\nf 43662 44207 44209\nf 43662 44209 43665\nf 43663 43666 44216\nf 43663 44216 43664\nf 43664 44212 44211\nf 43664 44216 44212\nf 43665 44209 44213\nf 43665 44213 43667\nf 43666 43669 44219\nf 43666 44219 44216\nf 43667 43668 43671\nf 43667 43671 43670\nf 43667 44213 43668\nf 43668 44213 44214\nf 43668 44214 44218\nf 43668 44218 43671\nf 43669 43672 44221\nf 43669 44221 44219\nf 43670 43671 43674\nf 43670 43674 43673\nf 43671 44218 44220\nf 43671 44220 43674\nf 43672 43675 44223\nf 43672 44223 44221\nf 43673 43674 43677\nf 43673 43677 43676\nf 43674 44220 44222\nf 43674 44222 43677\nf 43675 43678 44225\nf 43675 44225 44223\nf 43676 43677 43681\nf 43676 43681 43679\nf 43677 44222 44224\nf 43677 44224 43681\nf 43678 43682 44227\nf 43678 44227 44225\nf 43679 43681 43680\nf 43680 43681 44226\nf 43680 44226 43683\nf 43681 44224 44226\nf 43682 43684 44229\nf 43682 44229 44227\nf 43683 44226 44228\nf 43683 44228 43685\nf 43684 43686 44231\nf 43684 44231 44229\nf 43685 44228 44230\nf 43685 44230 43687\nf 43686 43688 44233\nf 43686 44233 44231\nf 43687 44230 44232\nf 43687 44232 43689\nf 43688 43690 44235\nf 43688 44235 44233\nf 43689 44232 44234\nf 43689 44234 43691\nf 43690 43692 44237\nf 43690 44237 44235\nf 43691 44234 44236\nf 43691 44236 43693\nf 43692 43694 44239\nf 43692 44239 44237\nf 43693 44236 44238\nf 43693 44238 43695\nf 43694 43696 44241\nf 43694 44241 44239\nf 43695 44238 44240\nf 43695 44240 43697\nf 43696 43698 44244\nf 43696 44244 44241\nf 43697 44240 44243\nf 43697 44243 43699\nf 43698 43700 44244\nf 43699 44243 44247\nf 43699 44247 43703\nf 43700 43701 43702\nf 43700 43702 44244\nf 43701 43704 44248\nf 43701 44248 43702\nf 43702 44245 44244\nf 43702 44248 44245\nf 43703 44247 44249\nf 43703 44249 43705\nf 43704 43706 44252\nf 43704 44250 44248\nf 43704 44252 44250\nf 43705 44249 44251\nf 43705 44251 43707\nf 43706 43708 44255\nf 43706 44255 44252\nf 43707 44251 44253\nf 43707 44253 43709\nf 43708 43712 44257\nf 43708 44257 44255\nf 43709 43711 43710\nf 43709 44253 43711\nf 43710 43711 44256\nf 43710 44256 43713\nf 43711 44253 44254\nf 43711 44254 44256\nf 43712 43714 44259\nf 43712 44259 44257\nf 43713 44256 44258\nf 43713 44258 43715\nf 43714 43716 44261\nf 43714 44261 44259\nf 43715 44258 44260\nf 43715 44260 43717\nf 43716 43718 44263\nf 43716 44263 44261\nf 43717 44260 44262\nf 43717 44262 43719\nf 43718 43720 44265\nf 43718 44265 44263\nf 43719 44262 44264\nf 43719 44264 43721\nf 43720 43723 44267\nf 43720 44267 44265\nf 43721 43725 43722\nf 43721 44264 44266\nf 43721 44266 44268\nf 43721 44268 43725\nf 43722 43725 43724\nf 43723 43726 44270\nf 43723 44270 44267\nf 43724 43725 44269\nf 43724 44269 44271\nf 43724 44271 43727\nf 43725 44268 44269\nf 43726 43728 44273\nf 43726 44273 44270\nf 43727 44271 43730\nf 43728 43729 44276\nf 43728 44276 44273\nf 43729 43731 43732\nf 43729 43732 44276\nf 43730 44271 44274\nf 43730 44274 43733\nf 43731 43734 44280\nf 43731 44280 43732\nf 43732 44277 44276\nf 43732 44280 44277\nf 43733 44274 44278\nf 43733 44278 43735\nf 43734 43736 44284\nf 43734 44284 44280\nf 43735 44278 44282\nf 43735 44282 43738\nf 43736 43737 44289\nf 43736 44289 44284\nf 43737 43739 43740\nf 43737 43740 44289\nf 43738 44282 44286\nf 43738 44286 43741\nf 43739 43743 43740\nf 43740 43743 43744\nf 43740 43744 44291\nf 43740 44291 44289\nf 43741 43742 43747\nf 43741 43747 43745\nf 43741 44286 43742\nf 43742 44286 44287\nf 43742 44287 44290\nf 43742 44290 43747\nf 43743 43748 43744\nf 43744 43748 43749\nf 43744 43749 44293\nf 43744 44293 44291\nf 43745 43747 43746\nf 43746 43747 44292\nf 43746 44292 43750\nf 43747 44290 44292\nf 43748 43751 44296\nf 43748 44296 43749\nf 43749 44294 44293\nf 43749 44296 44294\nf 43750 44292 44295\nf 43750 44295 43752\nf 43751 43753 44299\nf 43751 44299 44296\nf 43752 44295 44298\nf 43752 44298 43754\nf 43753 43755 44302\nf 43753 44302 44299\nf 43754 44298 44301\nf 43754 44301 43756\nf 43755 43757 44305\nf 43755 44305 44302\nf 43756 44301 44304\nf 43756 44304 43758\nf 43757 43759 44310\nf 43757 44310 44305\nf 43758 44304 44307\nf 43758 44307 43760\nf 43759 43763 44313\nf 43759 44313 44310\nf 43760 43762 43761\nf 43760 44307 43762\nf 43761 43762 44312\nf 43761 44312 43764\nf 43762 44307 44308\nf 43762 44308 44312\nf 43763 43765 44313\nf 43764 44312 44316\nf 43764 44316 43767\nf 43765 43766 44314\nf 43765 43769 43766\nf 43765 44314 44313\nf 43766 43769 43770\nf 43766 43770 44320\nf 43766 44317 44314\nf 43766 44320 44317\nf 43767 44316 44318\nf 43767 44318 43768\nf 43768 44318 44319\nf 43768 44319 44321\nf 43768 44321 43771\nf 43769 43772 43770\nf 43770 43772 43773\nf 43770 43773 44322\nf 43770 44322 44320\nf 43771 44321 43774\nf 43772 43775 43773\nf 43773 43775 43776\nf 43773 43776 44324\nf 43773 44324 44322\nf 43774 44321 44323\nf 43774 44323 43777\nf 43775 43778 44327\nf 43775 44327 43776\nf 43776 44325 44324\nf 43776 44327 44325\nf 43777 44323 44326\nf 43777 44326 43779\nf 43778 43780 44329\nf 43778 44329 44327\nf 43779 44326 44328\nf 43779 44328 43781\nf 43780 43782 44331\nf 43780 44331 44329\nf 43781 44328 44330\nf 43781 44330 43783\nf 43782 43785 44334\nf 43782 44334 44331\nf 43783 44330 44332\nf 43783 44332 43784\nf 43784 44332 44333\nf 43784 44333 44335\nf 43784 44335 43786\nf 43785 43787 44336\nf 43785 44336 44334\nf 43786 44335 43788\nf 43787 43789 44338\nf 43787 44338 44336\nf 43788 44335 44337\nf 43788 44337 43791\nf 43789 43790 44338\nf 43790 43792 44341\nf 43790 44339 44338\nf 43790 44341 44339\nf 43791 44337 44340\nf 43791 44340 43793\nf 43792 43794 44343\nf 43792 44343 44341\nf 43793 44340 44342\nf 43793 44342 43795\nf 43794 43796 44345\nf 43794 44345 44343\nf 43795 44342 44344\nf 43795 44344 43798\nf 43796 43797 44345\nf 43797 43799 44348\nf 43797 44346 44345\nf 43797 44348 44346\nf 43798 44344 44347\nf 43798 44347 43801\nf 43799 43800 44348\nf 43800 43803 44353\nf 43800 44349 44348\nf 43800 44353 44349\nf 43801 44347 44350\nf 43801 44350 44351\nf 43801 44351 43802\nf 43802 44351 44352\nf 43802 44352 43805\nf 43803 43804 44353\nf 43804 43806 43808\nf 43804 43808 44352\nf 43804 44352 44354\nf 43804 44354 44353\nf 43805 43808 43807\nf 43805 44352 43808\nf 43806 43807 43808\nf 43809 43810 44355\nf 43809 44355 44362\nf 43809 44362 43816\nf 43810 43811 44356\nf 43810 44356 44355\nf 43811 43812 44357\nf 43811 44357 44356\nf 43812 43813 44358\nf 43812 44358 44357\nf 43813 43818 44359\nf 43813 44359 44358\nf 43814 43815 44360\nf 43814 44360 44369\nf 43814 44369 43823\nf 43815 43817 44361\nf 43815 44361 44360\nf 43816 44362 43817\nf 43817 44362 44363\nf 43817 44363 44361\nf 43818 43819 44365\nf 43818 44364 44359\nf 43818 44365 44364\nf 43819 43820 44365\nf 43820 43821 44366\nf 43820 44366 44365\nf 43821 43825 44367\nf 43821 44367 44366\nf 43822 43824 44368\nf 43822 44368 44374\nf 43822 44374 43828\nf 43823 44369 43824\nf 43824 44369 44370\nf 43824 44370 44368\nf 43825 43826 44372\nf 43825 44371 44367\nf 43825 44372 44371\nf 43826 43827 44372\nf 43827 43829 44373\nf 43827 44373 44372\nf 43828 44374 43831\nf 43829 43830 44376\nf 43829 44375 44373\nf 43829 44376 44375\nf 43830 43833 44376\nf 43831 44374 44377\nf 43831 44377 44378\nf 43831 44378 43832\nf 43832 44378 43835\nf 43833 43834 44380\nf 43833 44379 44376\nf 43833 44380 44379\nf 43834 43837 44380\nf 43835 44378 44381\nf 43835 44381 44382\nf 43835 44382 43836\nf 43836 44382 44383\nf 43836 44383 43838\nf 43837 43842 44387\nf 43837 44384 44380\nf 43837 44387 44384\nf 43838 43840 43839\nf 43838 44383 43840\nf 43839 43840 44386\nf 43839 44386 43841\nf 43840 44383 44385\nf 43840 44385 44386\nf 43841 44386 43844\nf 43842 43843 44388\nf 43842 44388 44387\nf 43843 43847 44388\nf 43844 44386 44389\nf 43844 44389 44390\nf 43844 44390 43845\nf 43845 44390 44392\nf 43845 44392 43846\nf 43846 44392 44393\nf 43846 44393 43849\nf 43847 43848 44394\nf 43847 44394 44388\nf 43848 43855 44402\nf 43848 44395 44394\nf 43848 44402 44395\nf 43849 43851 43850\nf 43849 44393 43851\nf 43850 43851 44398\nf 43850 44398 43852\nf 43851 44393 44397\nf 43851 44397 44398\nf 43852 44398 44399\nf 43852 44399 43853\nf 43853 44399 44400\nf 43853 44400 43854\nf 43854 44400 44401\nf 43854 44401 43857\nf 43855 43856 44402\nf 43856 43864 44409\nf 43856 44403 44402\nf 43856 44409 44403\nf 43857 43859 43858\nf 43857 44401 43859\nf 43858 43859 44405\nf 43858 44405 43860\nf 43859 44401 44404\nf 43859 44404 44405\nf 43860 44405 44406\nf 43860 44406 43861\nf 43861 44406 44407\nf 43861 44407 43862\nf 43862 44407 44408\nf 43862 44408 43863\nf 43863 44408 44410\nf 43863 44410 43865\nf 43864 43865 44409\nf 43865 44410 44409\nf 43866 43867 44411\nf 43866 44411 44419\nf 43866 44419 43874\nf 43867 43868 44412\nf 43867 44412 44411\nf 43868 43875 44413\nf 43868 44413 44412\nf 43869 43870 44414\nf 43869 44414 44421\nf 43869 44421 43876\nf 43870 43871 44415\nf 43870 44415 44414\nf 43871 43872 44416\nf 43871 44416 44415\nf 43872 43873 44417\nf 43872 44417 44416\nf 43873 43878 44418\nf 43873 44418 44417\nf 43874 44419 43880\nf 43875 43882 44427\nf 43875 44420 44413\nf 43875 44427 44420\nf 43876 44421 43877\nf 43877 44421 44422\nf 43877 44422 44429\nf 43877 44429 43884\nf 43878 43879 44424\nf 43878 44423 44418\nf 43878 44424 44423\nf 43879 43885 44424\nf 43880 44419 44425\nf 43880 44425 43881\nf 43881 44425 44426\nf 43881 44426 44431\nf 43881 44431 43886\nf 43882 43883 44428\nf 43882 44428 44427\nf 43883 43887 44428\nf 43884 44429 43888\nf 43885 43889 44434\nf 43885 44430 44424\nf 43885 44434 44430\nf 43886 44431 43890\nf 43887 43891 44436\nf 43887 44432 44428\nf 43887 44436 44432\nf 43888 44429 44433\nf 43888 44433 43892\nf 43889 43893 44438\nf 43889 44438 44434\nf 43890 44431 44435\nf 43890 44435 43894\nf 43891 43895 44440\nf 43891 44440 44436\nf 43892 44433 44437\nf 43892 44437 43896\nf 43893 43897 44442\nf 43893 44442 44438\nf 43894 44435 44439\nf 43894 44439 43899\nf 43895 43900 44445\nf 43895 44445 44440\nf 43896 44437 44441\nf 43896 44441 43901\nf 43897 43898 44443\nf 43897 44443 44442\nf 43898 43902 44443\nf 43899 44439 44444\nf 43899 44444 43903\nf 43900 43904 44449\nf 43900 44449 44445\nf 43901 44441 44446\nf 43901 44446 43905\nf 43902 43906 44451\nf 43902 44447 44443\nf 43902 44451 44447\nf 43903 44444 44448\nf 43903 44448 43907\nf 43904 43908 44453\nf 43904 44453 44449\nf 43905 44446 44450\nf 43905 44450 43909\nf 43906 43910 44455\nf 43906 44455 44451\nf 43907 44448 44452\nf 43907 44452 43911\nf 43908 43912 44457\nf 43908 44457 44453\nf 43909 44450 44454\nf 43909 44454 43913\nf 43910 43914 44460\nf 43910 44460 44455\nf 43911 44452 44456\nf 43911 44456 43915\nf 43912 43916 44457\nf 43913 44454 44459\nf 43913 44459 43919\nf 43914 43921 44460\nf 43915 44456 44462\nf 43915 44462 43924\nf 43916 43917 43918\nf 43916 43918 44458\nf 43916 44458 44457\nf 43917 43925 43918\nf 43918 43925 44463\nf 43918 44463 44458\nf 43919 44459 44464\nf 43919 44464 44475\nf 43919 44475 43920\nf 43920 43933 43931\nf 43920 44475 43933\nf 43921 43922 43923\nf 43921 43923 44460\nf 43922 43934 44465\nf 43922 44465 43923\nf 43923 44461 44460\nf 43923 44465 44461\nf 43924 44462 44467\nf 43924 44467 43935\nf 43925 43926 44469\nf 43925 44468 44463\nf 43925 44469 44468\nf 43926 43927 44469\nf 43927 43928 44470\nf 43927 44470 44469\nf 43928 43929 44471\nf 43928 44471 44470\nf 43929 43936 44472\nf 43929 44472 44471\nf 43930 43932 44473\nf 43930 44473 44561\nf 43930 44561 44018\nf 43931 43933 43932\nf 43932 43933 44476\nf 43932 44474 44473\nf 43932 44476 44474\nf 43933 44475 44476\nf 43934 44020 44563\nf 43934 44477 44465\nf 43934 44563 44477\nf 43935 44467 44478\nf 43935 44478 44021\nf 43936 43937 44480\nf 43936 44479 44472\nf 43936 44480 44479\nf 43937 43938 44480\nf 43938 43939 44481\nf 43938 44481 44480\nf 43939 43940 44482\nf 43939 44482 44481\nf 43940 43941 44483\nf 43940 44483 44482\nf 43941 43942 44484\nf 43941 44484 44483\nf 43942 43943 44485\nf 43942 44485 44484\nf 43943 43944 44486\nf 43943 44486 44485\nf 43944 43945 44487\nf 43944 44487 44486\nf 43945 43946 44488\nf 43945 44488 44487\nf 43946 43947 44489\nf 43946 44489 44488\nf 43947 43948 44490\nf 43947 44490 44489\nf 43948 43949 44491\nf 43948 44491 44490\nf 43949 43950 44492\nf 43949 44492 44491\nf 43950 43951 44493\nf 43950 44493 44492\nf 43951 43952 44494\nf 43951 44494 44493\nf 43952 43953 44495\nf 43952 44495 44494\nf 43953 43954 44496\nf 43953 44496 44495\nf 43954 43955 44497\nf 43954 44497 44496\nf 43955 43956 44498\nf 43955 44498 44497\nf 43956 43957 44499\nf 43956 44499 44498\nf 43957 43958 44500\nf 43957 44500 44499\nf 43958 43959 44501\nf 43958 44501 44500\nf 43959 43960 44502\nf 43959 44502 44501\nf 43960 43961 44503\nf 43960 44503 44502\nf 43961 43962 44504\nf 43961 44504 44503\nf 43962 43963 44505\nf 43962 44505 44504\nf 43963 43964 44506\nf 43963 44506 44505\nf 43964 43965 44507\nf 43964 44507 44506\nf 43965 43966 44508\nf 43965 44508 44507\nf 43966 43967 44509\nf 43966 44509 44508\nf 43967 43968 44510\nf 43967 44510 44509\nf 43968 43969 44511\nf 43968 44511 44510\nf 43969 43970 44512\nf 43969 44512 44511\nf 43970 43971 44513\nf 43970 44513 44512\nf 43971 43972 44514\nf 43971 44514 44513\nf 43972 43973 44515\nf 43972 44515 44514\nf 43973 43974 44516\nf 43973 44516 44515\nf 43974 43975 44517\nf 43974 44517 44516\nf 43975 43976 44518\nf 43975 44518 44517\nf 43976 43977 44519\nf 43976 44519 44518\nf 43977 43978 44520\nf 43977 44520 44519\nf 43978 43979 44521\nf 43978 44521 44520\nf 43979 43980 44522\nf 43979 44522 44521\nf 43980 43981 44523\nf 43980 44523 44522\nf 43981 43982 44524\nf 43981 44524 44523\nf 43982 43983 44525\nf 43982 44525 44524\nf 43983 43984 44526\nf 43983 44526 44525\nf 43984 43985 44527\nf 43984 44527 44526\nf 43985 43986 44528\nf 43985 44528 44527\nf 43986 43987 44529\nf 43986 44529 44528\nf 43987 43988 44530\nf 43987 44530 44529\nf 43988 43989 44531\nf 43988 44531 44530\nf 43989 43990 44532\nf 43989 44532 44531\nf 43990 43991 44533\nf 43990 44533 44532\nf 43991 43992 44534\nf 43991 44534 44533\nf 43992 43993 44535\nf 43992 44535 44534\nf 43993 43994 44536\nf 43993 44536 44535\nf 43994 43995 44537\nf 43994 44537 44536\nf 43995 43996 44538\nf 43995 44538 44537\nf 43996 43997 44539\nf 43996 44539 44538\nf 43997 43998 44540\nf 43997 44540 44539\nf 43998 43999 44541\nf 43998 44541 44540\nf 43999 44000 44542\nf 43999 44542 44541\nf 44000 44001 44543\nf 44000 44543 44542\nf 44001 44002 44544\nf 44001 44544 44543\nf 44002 44003 44545\nf 44002 44545 44544\nf 44003 44004 44546\nf 44003 44546 44545\nf 44004 44005 44547\nf 44004 44547 44546\nf 44005 44006 44548\nf 44005 44548 44547\nf 44006 44007 44549\nf 44006 44549 44548\nf 44007 44008 44550\nf 44007 44550 44549\nf 44008 44009 44551\nf 44008 44551 44550\nf 44009 44010 44552\nf 44009 44552 44551\nf 44010 44011 44553\nf 44010 44553 44552\nf 44011 44012 44554\nf 44011 44554 44553\nf 44012 44013 44555\nf 44012 44555 44554\nf 44013 44014 44556\nf 44013 44556 44555\nf 44014 44015 44557\nf 44014 44557 44556\nf 44015 44016 44558\nf 44015 44558 44557\nf 44016 44017 44559\nf 44016 44559 44558\nf 44017 44019 44560\nf 44017 44560 44559\nf 44018 44561 44019\nf 44019 44561 44562\nf 44019 44562 44560\nf 44020 44022 44565\nf 44020 44565 44563\nf 44021 44478 44564\nf 44021 44564 44023\nf 44022 44025 44568\nf 44022 44568 44565\nf 44023 44564 44566\nf 44023 44566 44567\nf 44023 44567 44024\nf 44024 44567 44026\nf 44025 44028 44570\nf 44025 44570 44568\nf 44026 44031 44027\nf 44026 44567 44569\nf 44026 44569 44572\nf 44026 44572 44031\nf 44027 44031 44030\nf 44028 44029 44570\nf 44029 44032 44574\nf 44029 44571 44570\nf 44029 44574 44571\nf 44030 44031 44573\nf 44030 44573 44576\nf 44030 44576 44034\nf 44031 44572 44573\nf 44032 44033 44574\nf 44033 44041 44583\nf 44033 44575 44574\nf 44033 44583 44575\nf 44034 44576 44577\nf 44034 44577 44035\nf 44035 44577 44578\nf 44035 44578 44036\nf 44036 44578 44043\nf 44037 44134 44677\nf 44037 44579 44580\nf 44037 44580 44038\nf 44037 44677 44579\nf 44038 44580 44581\nf 44038 44581 44039\nf 44039 44581 44582\nf 44039 44582 44040\nf 44040 44582 44584\nf 44040 44584 44042\nf 44041 44042 44583\nf 44042 44584 44583\nf 44043 44578 44585\nf 44043 44585 44587\nf 44043 44587 44044\nf 44044 44587 44588\nf 44044 44588 44045\nf 44045 44588 44589\nf 44045 44589 44046\nf 44046 44589 44590\nf 44046 44590 44047\nf 44047 44590 44591\nf 44047 44591 44048\nf 44048 44591 44592\nf 44048 44592 44049\nf 44049 44592 44593\nf 44049 44593 44050\nf 44050 44593 44594\nf 44050 44594 44051\nf 44051 44594 44595\nf 44051 44595 44052\nf 44052 44595 44596\nf 44052 44596 44053\nf 44053 44596 44597\nf 44053 44597 44054\nf 44054 44597 44598\nf 44054 44598 44055\nf 44055 44598 44599\nf 44055 44599 44056\nf 44056 44599 44600\nf 44056 44600 44057\nf 44057 44600 44601\nf 44057 44601 44058\nf 44058 44601 44602\nf 44058 44602 44059\nf 44059 44602 44603\nf 44059 44603 44060\nf 44060 44603 44604\nf 44060 44604 44061\nf 44061 44604 44605\nf 44061 44605 44062\nf 44062 44605 44606\nf 44062 44606 44063\nf 44063 44606 44607\nf 44063 44607 44064\nf 44064 44607 44608\nf 44064 44608 44065\nf 44065 44608 44609\nf 44065 44609 44066\nf 44066 44609 44610\nf 44066 44610 44067\nf 44067 44610 44611\nf 44067 44611 44068\nf 44068 44611 44612\nf 44068 44612 44069\nf 44069 44612 44613\nf 44069 44613 44070\nf 44070 44613 44614\nf 44070 44614 44071\nf 44071 44614 44615\nf 44071 44615 44072\nf 44072 44615 44616\nf 44072 44616 44073\nf 44073 44616 44617\nf 44073 44617 44074\nf 44074 44617 44618\nf 44074 44618 44075\nf 44075 44618 44619\nf 44075 44619 44076\nf 44076 44619 44620\nf 44076 44620 44077\nf 44077 44620 44621\nf 44077 44621 44078\nf 44078 44621 44622\nf 44078 44622 44079\nf 44079 44622 44623\nf 44079 44623 44080\nf 44080 44623 44624\nf 44080 44624 44081\nf 44081 44624 44625\nf 44081 44625 44082\nf 44082 44625 44626\nf 44082 44626 44083\nf 44083 44626 44627\nf 44083 44627 44084\nf 44084 44627 44628\nf 44084 44628 44085\nf 44085 44628 44629\nf 44085 44629 44086\nf 44086 44629 44630\nf 44086 44630 44087\nf 44087 44630 44631\nf 44087 44631 44088\nf 44088 44631 44632\nf 44088 44632 44089\nf 44089 44632 44633\nf 44089 44633 44090\nf 44090 44633 44634\nf 44090 44634 44091\nf 44091 44634 44635\nf 44091 44635 44092\nf 44092 44635 44636\nf 44092 44636 44093\nf 44093 44636 44637\nf 44093 44637 44094\nf 44094 44637 44638\nf 44094 44638 44095\nf 44095 44638 44639\nf 44095 44639 44096\nf 44096 44639 44640\nf 44096 44640 44097\nf 44097 44640 44641\nf 44097 44641 44098\nf 44098 44641 44642\nf 44098 44642 44099\nf 44099 44642 44643\nf 44099 44643 44100\nf 44100 44643 44644\nf 44100 44644 44101\nf 44101 44644 44645\nf 44101 44645 44102\nf 44102 44645 44646\nf 44102 44646 44103\nf 44103 44646 44647\nf 44103 44647 44104\nf 44104 44647 44648\nf 44104 44648 44105\nf 44105 44648 44649\nf 44105 44649 44106\nf 44106 44649 44650\nf 44106 44650 44107\nf 44107 44650 44651\nf 44107 44651 44108\nf 44108 44651 44652\nf 44108 44652 44109\nf 44109 44652 44653\nf 44109 44653 44110\nf 44110 44653 44654\nf 44110 44654 44111\nf 44111 44654 44655\nf 44111 44655 44112\nf 44112 44655 44656\nf 44112 44656 44113\nf 44113 44656 44657\nf 44113 44657 44114\nf 44114 44657 44658\nf 44114 44658 44115\nf 44115 44658 44659\nf 44115 44659 44116\nf 44116 44659 44660\nf 44116 44660 44117\nf 44117 44660 44661\nf 44117 44661 44118\nf 44118 44661 44662\nf 44118 44662 44119\nf 44119 44662 44663\nf 44119 44663 44120\nf 44120 44663 44664\nf 44120 44664 44121\nf 44121 44664 44665\nf 44121 44665 44122\nf 44122 44665 44666\nf 44122 44666 44123\nf 44123 44666 44667\nf 44123 44667 44124\nf 44124 44667 44668\nf 44124 44668 44125\nf 44125 44668 44669\nf 44125 44669 44126\nf 44126 44669 44670\nf 44126 44670 44127\nf 44127 44670 44671\nf 44127 44671 44128\nf 44128 44671 44672\nf 44128 44672 44129\nf 44129 44672 44673\nf 44129 44673 44130\nf 44130 44673 44674\nf 44130 44674 44131\nf 44131 44674 44675\nf 44131 44675 44132\nf 44132 44675 44676\nf 44132 44676 44133\nf 44133 44676 44678\nf 44133 44678 44135\nf 44134 44135 44677\nf 44135 44678 44677\nf 44136 44137 44682\nf 44136 44682 44687\nf 44136 44687 44141\nf 44137 44138 44684\nf 44137 44684 44682\nf 44138 44139 44683\nf 44138 44140 44686\nf 44138 44683 44684\nf 44138 44686 44139\nf 44139 44681 44683\nf 44139 44685 44681\nf 44139 44686 44685\nf 44140 44143 44686\nf 44141 44687 44142\nf 44142 44687 44688\nf 44142 44688 44690\nf 44142 44690 44144\nf 44143 44145 44691\nf 44143 44689 44686\nf 44143 44691 44689\nf 44144 44690 44147\nf 44145 44146 44692\nf 44145 44692 44691\nf 44146 44149 44692\nf 44147 44690 44693\nf 44147 44693 44148\nf 44148 44693 44694\nf 44148 44694 44696\nf 44148 44696 44150\nf 44149 44151 44697\nf 44149 44695 44692\nf 44149 44697 44695\nf 44150 44696 44152\nf 44151 44153 44699\nf 44151 44699 44697\nf 44152 44696 44698\nf 44152 44698 44154\nf 44153 44155 44701\nf 44153 44701 44699\nf 44154 44698 44700\nf 44154 44700 44156\nf 44155 44157 44703\nf 44155 44703 44701\nf 44156 44700 44702\nf 44156 44702 44158\nf 44157 44159 44705\nf 44157 44705 44703\nf 44158 44702 44704\nf 44158 44704 44160\nf 44159 44161 44707\nf 44159 44707 44705\nf 44160 44704 44706\nf 44160 44706 44163\nf 44161 44162 44708\nf 44161 44708 44707\nf 44162 44164 44708\nf 44163 44706 44709\nf 44163 44709 44165\nf 44164 44166 44712\nf 44164 44710 44708\nf 44164 44712 44710\nf 44165 44709 44711\nf 44165 44711 44168\nf 44166 44167 44712\nf 44167 44169 44715\nf 44167 44713 44712\nf 44167 44715 44713\nf 44168 44711 44714\nf 44168 44714 44170\nf 44169 44171 44717\nf 44169 44717 44715\nf 44170 44714 44716\nf 44170 44716 44172\nf 44171 44173 44719\nf 44171 44719 44717\nf 44172 44716 44718\nf 44172 44718 44174\nf 44173 44176 44721\nf 44173 44721 44719\nf 44174 44178 44175\nf 44174 44718 44720\nf 44174 44720 44722\nf 44174 44722 44178\nf 44175 44178 44177\nf 44176 44179 44724\nf 44176 44724 44721\nf 44177 44178 44723\nf 44177 44723 44725\nf 44177 44725 44180\nf 44178 44722 44723\nf 44179 44181 44726\nf 44179 44726 44724\nf 44180 44725 44182\nf 44181 44183 44728\nf 44181 44728 44726\nf 44182 44725 44727\nf 44182 44727 44184\nf 44183 44185 44730\nf 44183 44730 44728\nf 44184 44727 44729\nf 44184 44729 44187\nf 44185 44186 44730\nf 44186 44188 44733\nf 44186 44731 44730\nf 44186 44733 44731\nf 44187 44729 44732\nf 44187 44732 44189\nf 44188 44190 44735\nf 44188 44735 44733\nf 44189 44732 44734\nf 44189 44734 44191\nf 44190 44192 44737\nf 44190 44737 44735\nf 44191 44734 44736\nf 44191 44736 44193\nf 44192 44194 44739\nf 44192 44739 44737\nf 44193 44736 44738\nf 44193 44738 44195\nf 44194 44196 44741\nf 44194 44741 44739\nf 44195 44738 44740\nf 44195 44740 44197\nf 44196 44198 44743\nf 44196 44743 44741\nf 44197 44740 44742\nf 44197 44742 44199\nf 44198 44200 44745\nf 44198 44745 44743\nf 44199 44742 44744\nf 44199 44744 44201\nf 44200 44202 44747\nf 44200 44747 44745\nf 44201 44744 44746\nf 44201 44746 44203\nf 44202 44204 44749\nf 44202 44749 44747\nf 44203 44746 44748\nf 44203 44748 44205\nf 44204 44206 44751\nf 44204 44751 44749\nf 44205 44748 44750\nf 44205 44750 44207\nf 44206 44208 44755\nf 44206 44755 44751\nf 44207 44750 44752\nf 44207 44752 44209\nf 44208 44211 44757\nf 44208 44757 44755\nf 44209 44210 44215\nf 44209 44215 44213\nf 44209 44752 44210\nf 44210 44752 44753\nf 44210 44753 44756\nf 44210 44756 44215\nf 44211 44212 44759\nf 44211 44759 44757\nf 44212 44216 44217\nf 44212 44217 44759\nf 44213 44215 44214\nf 44214 44215 44758\nf 44214 44758 44218\nf 44215 44756 44758\nf 44216 44219 44763\nf 44216 44763 44217\nf 44217 44760 44759\nf 44217 44763 44760\nf 44218 44758 44762\nf 44218 44762 44220\nf 44219 44221 44765\nf 44219 44765 44763\nf 44220 44762 44764\nf 44220 44764 44222\nf 44221 44223 44767\nf 44221 44767 44765\nf 44222 44764 44766\nf 44222 44766 44224\nf 44223 44225 44769\nf 44223 44769 44767\nf 44224 44766 44768\nf 44224 44768 44226\nf 44225 44227 44771\nf 44225 44771 44769\nf 44226 44768 44770\nf 44226 44770 44228\nf 44227 44229 44773\nf 44227 44773 44771\nf 44228 44770 44772\nf 44228 44772 44230\nf 44229 44231 44775\nf 44229 44775 44773\nf 44230 44772 44774\nf 44230 44774 44232\nf 44231 44233 44777\nf 44231 44777 44775\nf 44232 44774 44776\nf 44232 44776 44234\nf 44233 44235 44779\nf 44233 44779 44777\nf 44234 44776 44778\nf 44234 44778 44236\nf 44235 44237 44781\nf 44235 44781 44779\nf 44236 44778 44780\nf 44236 44780 44238\nf 44237 44239 44783\nf 44237 44783 44781\nf 44238 44780 44782\nf 44238 44782 44240\nf 44239 44241 44783\nf 44240 44782 44786\nf 44240 44786 44243\nf 44241 44242 44783\nf 44241 44244 44246\nf 44241 44246 44242\nf 44242 44246 44787\nf 44242 44784 44783\nf 44242 44787 44784\nf 44243 44786 44788\nf 44243 44788 44247\nf 44244 44245 44246\nf 44245 44248 44789\nf 44245 44789 44246\nf 44246 44789 44787\nf 44247 44788 44790\nf 44247 44790 44249\nf 44248 44250 44793\nf 44248 44791 44789\nf 44248 44793 44791\nf 44249 44790 44792\nf 44249 44792 44251\nf 44250 44252 44795\nf 44250 44795 44793\nf 44251 44792 44794\nf 44251 44794 44253\nf 44252 44255 44798\nf 44252 44798 44795\nf 44253 44794 44796\nf 44253 44796 44254\nf 44254 44796 44797\nf 44254 44797 44799\nf 44254 44799 44256\nf 44255 44257 44800\nf 44255 44800 44798\nf 44256 44799 44258\nf 44257 44259 44802\nf 44257 44802 44800\nf 44258 44799 44801\nf 44258 44801 44260\nf 44259 44261 44804\nf 44259 44804 44802\nf 44260 44801 44803\nf 44260 44803 44262\nf 44261 44263 44806\nf 44261 44806 44804\nf 44262 44803 44805\nf 44262 44805 44264\nf 44263 44265 44808\nf 44263 44808 44806\nf 44264 44805 44807\nf 44264 44807 44266\nf 44265 44267 44810\nf 44265 44810 44808\nf 44266 44807 44809\nf 44266 44809 44268\nf 44267 44270 44812\nf 44267 44812 44810\nf 44268 44272 44269\nf 44268 44809 44811\nf 44268 44811 44813\nf 44268 44813 44272\nf 44269 44272 44271\nf 44270 44273 44814\nf 44270 44814 44812\nf 44271 44272 44275\nf 44271 44275 44274\nf 44272 44813 44275\nf 44273 44276 44816\nf 44273 44816 44814\nf 44274 44275 44279\nf 44274 44279 44278\nf 44275 44813 44815\nf 44275 44815 44279\nf 44276 44277 44818\nf 44276 44818 44816\nf 44277 44280 44281\nf 44277 44281 44818\nf 44278 44279 44283\nf 44278 44283 44282\nf 44279 44815 44817\nf 44279 44817 44283\nf 44280 44284 44281\nf 44281 44284 44285\nf 44281 44285 44820\nf 44281 44820 44818\nf 44282 44283 44288\nf 44282 44288 44286\nf 44283 44817 44819\nf 44283 44819 44288\nf 44284 44289 44823\nf 44284 44823 44285\nf 44285 44821 44820\nf 44285 44823 44821\nf 44286 44288 44287\nf 44287 44288 44822\nf 44287 44822 44290\nf 44288 44819 44822\nf 44289 44291 44825\nf 44289 44825 44823\nf 44290 44822 44824\nf 44290 44824 44292\nf 44291 44293 44827\nf 44291 44827 44825\nf 44292 44824 44826\nf 44292 44826 44295\nf 44293 44294 44829\nf 44293 44829 44827\nf 44294 44296 44297\nf 44294 44297 44829\nf 44295 44826 44828\nf 44295 44828 44298\nf 44296 44299 44297\nf 44297 44299 44300\nf 44297 44300 44832\nf 44297 44832 44829\nf 44298 44828 44830\nf 44298 44830 44301\nf 44299 44302 44300\nf 44300 44302 44303\nf 44300 44303 44835\nf 44300 44835 44832\nf 44301 44830 44833\nf 44301 44833 44304\nf 44302 44305 44303\nf 44303 44305 44306\nf 44303 44306 44839\nf 44303 44839 44835\nf 44304 44833 44836\nf 44304 44836 44307\nf 44305 44310 44306\nf 44306 44310 44311\nf 44306 44311 44841\nf 44306 44841 44839\nf 44307 44309 44308\nf 44307 44836 44309\nf 44308 44309 44840\nf 44308 44840 44312\nf 44309 44836 44837\nf 44309 44837 44840\nf 44310 44313 44311\nf 44311 44313 44315\nf 44311 44315 44843\nf 44311 44843 44841\nf 44312 44840 44842\nf 44312 44842 44316\nf 44313 44314 44315\nf 44314 44317 44315\nf 44315 44317 44843\nf 44316 44842 44844\nf 44316 44844 44318\nf 44317 44320 44848\nf 44317 44845 44843\nf 44317 44848 44845\nf 44318 44844 44846\nf 44318 44846 44319\nf 44319 44846 44847\nf 44319 44847 44849\nf 44319 44849 44321\nf 44320 44322 44850\nf 44320 44850 44848\nf 44321 44849 44323\nf 44322 44324 44852\nf 44322 44852 44850\nf 44323 44849 44851\nf 44323 44851 44326\nf 44324 44325 44852\nf 44325 44327 44855\nf 44325 44853 44852\nf 44325 44855 44853\nf 44326 44851 44854\nf 44326 44854 44328\nf 44327 44329 44857\nf 44327 44857 44855\nf 44328 44854 44856\nf 44328 44856 44330\nf 44329 44331 44859\nf 44329 44859 44857\nf 44330 44856 44858\nf 44330 44858 44332\nf 44331 44334 44862\nf 44331 44862 44859\nf 44332 44858 44860\nf 44332 44860 44333\nf 44333 44860 44861\nf 44333 44861 44863\nf 44333 44863 44335\nf 44334 44336 44864\nf 44334 44864 44862\nf 44335 44863 44337\nf 44336 44338 44866\nf 44336 44866 44864\nf 44337 44863 44865\nf 44337 44865 44340\nf 44338 44339 44866\nf 44339 44341 44869\nf 44339 44867 44866\nf 44339 44869 44867\nf 44340 44865 44868\nf 44340 44868 44342\nf 44341 44343 44871\nf 44341 44871 44869\nf 44342 44868 44870\nf 44342 44870 44344\nf 44343 44345 44873\nf 44343 44873 44871\nf 44344 44870 44872\nf 44344 44872 44347\nf 44345 44346 44873\nf 44346 44348 44877\nf 44346 44874 44873\nf 44346 44877 44874\nf 44347 44872 44876\nf 44347 44876 44350\nf 44348 44349 44877\nf 44349 44353 44882\nf 44349 44878 44877\nf 44349 44882 44878\nf 44350 44876 44879\nf 44350 44879 44880\nf 44350 44880 44351\nf 44351 44880 44881\nf 44351 44881 44352\nf 44352 44881 44883\nf 44352 44883 44354\nf 44353 44354 44882\nf 44354 44883 44882\nf 44355 44356 44884\nf 44355 44884 44891\nf 44355 44891 44362\nf 44356 44357 44885\nf 44356 44885 44884\nf 44357 44358 44886\nf 44357 44886 44885\nf 44358 44359 44887\nf 44358 44887 44886\nf 44359 44364 44888\nf 44359 44888 44887\nf 44360 44361 44889\nf 44360 44889 44899\nf 44360 44899 44369\nf 44361 44363 44890\nf 44361 44890 44889\nf 44362 44891 44363\nf 44363 44891 44892\nf 44363 44892 44890\nf 44364 44365 44895\nf 44364 44894 44888\nf 44364 44895 44894\nf 44365 44366 44895\nf 44366 44367 44896\nf 44366 44896 44895\nf 44367 44371 44897\nf 44367 44897 44896\nf 44368 44370 44898\nf 44368 44898 44904\nf 44368 44904 44374\nf 44369 44899 44370\nf 44370 44899 44900\nf 44370 44900 44898\nf 44371 44372 44902\nf 44371 44901 44897\nf 44371 44902 44901\nf 44372 44373 44902\nf 44373 44375 44903\nf 44373 44903 44902\nf 44374 44904 44377\nf 44375 44376 44906\nf 44375 44905 44903\nf 44375 44906 44905\nf 44376 44379 44906\nf 44377 44904 44907\nf 44377 44907 44908\nf 44377 44908 44378\nf 44378 44908 44381\nf 44379 44380 44910\nf 44379 44909 44906\nf 44379 44910 44909\nf 44380 44384 44910\nf 44381 44908 44911\nf 44381 44911 44912\nf 44381 44912 44382\nf 44382 44912 44913\nf 44382 44913 44383\nf 44383 44913 44385\nf 44384 44387 44918\nf 44384 44914 44910\nf 44384 44918 44914\nf 44385 44913 44915\nf 44385 44915 44916\nf 44385 44916 44386\nf 44386 44916 44917\nf 44386 44917 44389\nf 44387 44388 44396\nf 44387 44396 44922\nf 44387 44922 44918\nf 44388 44394 44396\nf 44389 44391 44390\nf 44389 44917 44391\nf 44390 44391 44920\nf 44390 44920 44392\nf 44391 44917 44919\nf 44391 44919 44920\nf 44392 44920 44921\nf 44392 44921 44393\nf 44393 44921 44397\nf 44394 44395 44396\nf 44395 44402 44922\nf 44395 44922 44396\nf 44397 44921 44923\nf 44397 44923 44924\nf 44397 44924 44398\nf 44398 44924 44925\nf 44398 44925 44399\nf 44399 44925 44926\nf 44399 44926 44400\nf 44400 44926 44927\nf 44400 44927 44401\nf 44401 44927 44404\nf 44402 44403 44928\nf 44402 44928 44922\nf 44403 44409 44935\nf 44403 44929 44928\nf 44403 44935 44929\nf 44404 44927 44930\nf 44404 44930 44931\nf 44404 44931 44405\nf 44405 44931 44932\nf 44405 44932 44406\nf 44406 44932 44933\nf 44406 44933 44407\nf 44407 44933 44934\nf 44407 44934 44408\nf 44408 44934 44936\nf 44408 44936 44410\nf 44409 44410 44935\nf 44410 44936 44935\nf 44411 44412 44938\nf 44411 44938 44946\nf 44411 44946 44419\nf 44412 44413 44939\nf 44412 44939 44938\nf 44413 44420 44940\nf 44413 44940 44939\nf 44414 44415 44941\nf 44414 44941 44948\nf 44414 44948 44421\nf 44415 44416 44942\nf 44415 44942 44941\nf 44416 44417 44943\nf 44416 44943 44942\nf 44417 44418 44944\nf 44417 44944 44943\nf 44418 44423 44945\nf 44418 44945 44944\nf 44419 44946 44425\nf 44420 44427 44954\nf 44420 44947 44940\nf 44420 44954 44947\nf 44421 44948 44422\nf 44422 44948 44949\nf 44422 44949 44956\nf 44422 44956 44429\nf 44423 44424 44951\nf 44423 44950 44945\nf 44423 44951 44950\nf 44424 44430 44951\nf 44425 44946 44952\nf 44425 44952 44426\nf 44426 44952 44953\nf 44426 44953 44958\nf 44426 44958 44431\nf 44427 44428 44955\nf 44427 44955 44954\nf 44428 44432 44955\nf 44429 44956 44433\nf 44430 44434 44961\nf 44430 44957 44951\nf 44430 44961 44957\nf 44431 44958 44435\nf 44432 44436 44963\nf 44432 44959 44955\nf 44432 44963 44959\nf 44433 44956 44960\nf 44433 44960 44437\nf 44434 44438 44965\nf 44434 44965 44961\nf 44435 44958 44962\nf 44435 44962 44439\nf 44436 44440 44967\nf 44436 44967 44963\nf 44437 44960 44964\nf 44437 44964 44441\nf 44438 44442 44969\nf 44438 44969 44965\nf 44439 44962 44966\nf 44439 44966 44444\nf 44440 44445 44972\nf 44440 44972 44967\nf 44441 44964 44968\nf 44441 44968 44446\nf 44442 44443 44970\nf 44442 44970 44969\nf 44443 44447 44970\nf 44444 44966 44971\nf 44444 44971 44448\nf 44445 44449 44976\nf 44445 44976 44972\nf 44446 44968 44973\nf 44446 44973 44450\nf 44447 44451 44978\nf 44447 44974 44970\nf 44447 44978 44974\nf 44448 44971 44975\nf 44448 44975 44452\nf 44449 44453 44980\nf 44449 44980 44976\nf 44450 44973 44977\nf 44450 44977 44454\nf 44451 44455 44982\nf 44451 44982 44978\nf 44452 44975 44979\nf 44452 44979 44456\nf 44453 44457 44984\nf 44453 44984 44980\nf 44454 44977 44981\nf 44454 44981 44459\nf 44455 44460 44987\nf 44455 44987 44982\nf 44456 44979 44983\nf 44456 44983 44462\nf 44457 44458 44985\nf 44457 44985 44984\nf 44458 44463 44985\nf 44459 44981 44986\nf 44459 44986 44464\nf 44460 44461 44991\nf 44460 44991 44987\nf 44461 44465 44466\nf 44461 44466 44991\nf 44462 44983 44988\nf 44462 44988 44467\nf 44463 44468 44994\nf 44463 44989 44985\nf 44463 44994 44989\nf 44464 44986 44990\nf 44464 44990 44475\nf 44465 44477 45003\nf 44465 45003 44466\nf 44466 44992 44991\nf 44466 45003 44992\nf 44467 44988 44993\nf 44467 44993 44478\nf 44468 44469 44995\nf 44468 44995 44994\nf 44469 44470 44995\nf 44470 44471 44996\nf 44470 44996 44995\nf 44471 44472 44997\nf 44471 44997 44996\nf 44472 44479 44998\nf 44472 44998 44997\nf 44473 44474 44999\nf 44473 44999 45088\nf 44473 45088 44561\nf 44474 44476 45000\nf 44474 45000 44999\nf 44475 44990 45001\nf 44475 45001 44476\nf 44476 45001 45002\nf 44476 45002 45000\nf 44477 44563 45090\nf 44477 45090 45003\nf 44478 44993 45005\nf 44478 45005 44564\nf 44479 44480 45007\nf 44479 45006 44998\nf 44479 45007 45006\nf 44480 44481 45007\nf 44481 44482 45008\nf 44481 45008 45007\nf 44482 44483 45009\nf 44482 45009 45008\nf 44483 44484 45010\nf 44483 45010 45009\nf 44484 44485 45011\nf 44484 45011 45010\nf 44485 44486 45012\nf 44485 45012 45011\nf 44486 44487 45013\nf 44486 45013 45012\nf 44487 44488 45014\nf 44487 45014 45013\nf 44488 44489 45015\nf 44488 45015 45014\nf 44489 44490 45016\nf 44489 45016 45015\nf 44490 44491 45017\nf 44490 45017 45016\nf 44491 44492 45018\nf 44491 45018 45017\nf 44492 44493 45019\nf 44492 45019 45018\nf 44493 44494 45020\nf 44493 45020 45019\nf 44494 44495 45021\nf 44494 45021 45020\nf 44495 44496 45022\nf 44495 45022 45021\nf 44496 44497 45023\nf 44496 45023 45022\nf 44497 44498 45024\nf 44497 45024 45023\nf 44498 44499 45025\nf 44498 45025 45024\nf 44499 44500 45026\nf 44499 45026 45025\nf 44500 44501 45027\nf 44500 45027 45026\nf 44501 44502 45028\nf 44501 45028 45027\nf 44502 44503 45029\nf 44502 45029 45028\nf 44503 44504 45030\nf 44503 45030 45029\nf 44504 44505 45031\nf 44504 45031 45030\nf 44505 44506 45032\nf 44505 45032 45031\nf 44506 44507 45033\nf 44506 45033 45032\nf 44507 44508 45034\nf 44507 45034 45033\nf 44508 44509 45035\nf 44508 45035 45034\nf 44509 44510 45036\nf 44509 45036 45035\nf 44510 44511 45037\nf 44510 45037 45036\nf 44511 44512 45038\nf 44511 45038 45037\nf 44512 44513 45039\nf 44512 45039 45038\nf 44513 44514 45040\nf 44513 45040 45039\nf 44514 44515 45041\nf 44514 45041 45040\nf 44515 44516 45042\nf 44515 45042 45041\nf 44516 44517 45043\nf 44516 45043 45042\nf 44517 44518 45044\nf 44517 45044 45043\nf 44518 44519 45045\nf 44518 45045 45044\nf 44519 44520 45046\nf 44519 45046 45045\nf 44520 44521 45047\nf 44520 45047 45046\nf 44521 44522 45048\nf 44521 45048 45047\nf 44522 44523 45049\nf 44522 45049 45048\nf 44523 44524 45050\nf 44523 45050 45049\nf 44524 44525 45051\nf 44524 45051 45050\nf 44525 44526 45052\nf 44525 45052 45051\nf 44526 44527 45053\nf 44526 45053 45052\nf 44527 44528 45054\nf 44527 45054 45053\nf 44528 44529 45055\nf 44528 45055 45054\nf 44529 44530 45056\nf 44529 45056 45055\nf 44530 44531 45057\nf 44530 45057 45056\nf 44531 44532 45058\nf 44531 45058 45057\nf 44532 44533 45059\nf 44532 45059 45058\nf 44533 44534 45060\nf 44533 45060 45059\nf 44534 44535 45061\nf 44534 45061 45060\nf 44535 44536 45062\nf 44535 45062 45061\nf 44536 44537 45063\nf 44536 45063 45062\nf 44537 44538 45064\nf 44537 45064 45063\nf 44538 44539 45065\nf 44538 45065 45064\nf 44539 44540 45066\nf 44539 45066 45065\nf 44540 44541 45067\nf 44540 45067 45066\nf 44541 44542 45068\nf 44541 45068 45067\nf 44542 44543 45069\nf 44542 45069 45068\nf 44543 44544 45070\nf 44543 45070 45069\nf 44544 44545 45071\nf 44544 45071 45070\nf 44545 44546 45072\nf 44545 45072 45071\nf 44546 44547 45073\nf 44546 45073 45072\nf 44547 44548 45074\nf 44547 45074 45073\nf 44548 44549 45075\nf 44548 45075 45074\nf 44549 44550 45076\nf 44549 45076 45075\nf 44550 44551 45077\nf 44550 45077 45076\nf 44551 44552 45078\nf 44551 45078 45077\nf 44552 44553 45079\nf 44552 45079 45078\nf 44553 44554 45080\nf 44553 45080 45079\nf 44554 44555 45081\nf 44554 45081 45080\nf 44555 44556 45082\nf 44555 45082 45081\nf 44556 44557 45083\nf 44556 45083 45082\nf 44557 44558 45084\nf 44557 45084 45083\nf 44558 44559 45085\nf 44558 45085 45084\nf 44559 44560 45086\nf 44559 45086 45085\nf 44560 44562 45087\nf 44560 45087 45086\nf 44561 45088 44562\nf 44562 45088 45089\nf 44562 45089 45087\nf 44563 44565 45092\nf 44563 45092 45090\nf 44564 45005 45091\nf 44564 45091 44566\nf 44565 44568 45095\nf 44565 45095 45092\nf 44566 45091 45093\nf 44566 45093 45094\nf 44566 45094 44567\nf 44567 45094 44569\nf 44568 44570 45097\nf 44568 45097 45095\nf 44569 45094 45096\nf 44569 45096 44572\nf 44570 44571 45097\nf 44571 44574 45101\nf 44571 45098 45097\nf 44571 45101 45098\nf 44572 45096 45099\nf 44572 45099 45100\nf 44572 45100 44573\nf 44573 45100 44576\nf 44574 44575 45101\nf 44575 44583 45109\nf 44575 45102 45101\nf 44575 45109 45102\nf 44576 45100 45103\nf 44576 45103 45104\nf 44576 45104 44577\nf 44577 45104 44578\nf 44578 44586 44585\nf 44578 45104 44586\nf 44579 44677 45201\nf 44579 45105 45106\nf 44579 45106 44580\nf 44579 45201 45105\nf 44580 45106 45107\nf 44580 45107 44581\nf 44581 45107 45108\nf 44581 45108 44582\nf 44582 45108 45110\nf 44582 45110 44584\nf 44583 44584 45109\nf 44584 45110 45109\nf 44585 44586 45112\nf 44585 45112 44587\nf 44586 45104 45111\nf 44586 45111 45112\nf 44587 45112 45113\nf 44587 45113 44588\nf 44588 44679 44680\nf 44588 44680 44589\nf 44588 45113 44679\nf 44589 44680 45205\nf 44589 45114 44590\nf 44589 45205 45114\nf 44590 45114 45115\nf 44590 45115 44591\nf 44591 45115 45116\nf 44591 45116 44592\nf 44592 45116 45117\nf 44592 45117 44593\nf 44593 45117 45118\nf 44593 45118 44594\nf 44594 45118 45119\nf 44594 45119 44595\nf 44595 45119 45120\nf 44595 45120 44596\nf 44596 45120 45121\nf 44596 45121 44597\nf 44597 45121 45122\nf 44597 45122 44598\nf 44598 45122 45123\nf 44598 45123 44599\nf 44599 45123 45124\nf 44599 45124 44600\nf 44600 45124 45125\nf 44600 45125 44601\nf 44601 45125 45126\nf 44601 45126 44602\nf 44602 45126 45127\nf 44602 45127 44603\nf 44603 45127 45128\nf 44603 45128 44604\nf 44604 45128 45129\nf 44604 45129 44605\nf 44605 45129 45130\nf 44605 45130 44606\nf 44606 45130 45131\nf 44606 45131 44607\nf 44607 45131 45132\nf 44607 45132 44608\nf 44608 45132 45133\nf 44608 45133 44609\nf 44609 45133 45134\nf 44609 45134 44610\nf 44610 45134 45135\nf 44610 45135 44611\nf 44611 45135 45136\nf 44611 45136 44612\nf 44612 45136 45137\nf 44612 45137 44613\nf 44613 45137 45138\nf 44613 45138 44614\nf 44614 45138 45139\nf 44614 45139 44615\nf 44615 45139 45140\nf 44615 45140 44616\nf 44616 45140 45141\nf 44616 45141 44617\nf 44617 45141 45142\nf 44617 45142 44618\nf 44618 45142 45143\nf 44618 45143 44619\nf 44619 45143 45144\nf 44619 45144 44620\nf 44620 45144 45145\nf 44620 45145 44621\nf 44621 45145 45146\nf 44621 45146 44622\nf 44622 45146 45147\nf 44622 45147 44623\nf 44623 45147 45148\nf 44623 45148 44624\nf 44624 45148 45149\nf 44624 45149 44625\nf 44625 45149 45150\nf 44625 45150 44626\nf 44626 45150 45151\nf 44626 45151 44627\nf 44627 45151 45152\nf 44627 45152 44628\nf 44628 45152 45153\nf 44628 45153 44629\nf 44629 45153 45154\nf 44629 45154 44630\nf 44630 45154 45155\nf 44630 45155 44631\nf 44631 45155 45156\nf 44631 45156 44632\nf 44632 45156 45157\nf 44632 45157 44633\nf 44633 45157 45158\nf 44633 45158 44634\nf 44634 45158 45159\nf 44634 45159 44635\nf 44635 45159 45160\nf 44635 45160 44636\nf 44636 45160 45161\nf 44636 45161 44637\nf 44637 45161 45162\nf 44637 45162 44638\nf 44638 45162 45163\nf 44638 45163 44639\nf 44639 45163 45164\nf 44639 45164 44640\nf 44640 45164 45165\nf 44640 45165 44641\nf 44641 45165 45166\nf 44641 45166 44642\nf 44642 45166 45167\nf 44642 45167 44643\nf 44643 45167 45168\nf 44643 45168 44644\nf 44644 45168 45169\nf 44644 45169 44645\nf 44645 45169 45170\nf 44645 45170 44646\nf 44646 45170 45171\nf 44646 45171 44647\nf 44647 45171 45172\nf 44647 45172 44648\nf 44648 45172 45173\nf 44648 45173 44649\nf 44649 45173 45174\nf 44649 45174 44650\nf 44650 45174 45175\nf 44650 45175 44651\nf 44651 45175 45176\nf 44651 45176 44652\nf 44652 45176 45177\nf 44652 45177 44653\nf 44653 45177 45178\nf 44653 45178 44654\nf 44654 45178 45179\nf 44654 45179 44655\nf 44655 45179 45180\nf 44655 45180 44656\nf 44656 45180 45181\nf 44656 45181 44657\nf 44657 45181 45182\nf 44657 45182 44658\nf 44658 45182 45183\nf 44658 45183 44659\nf 44659 45183 45184\nf 44659 45184 44660\nf 44660 45184 45185\nf 44660 45185 44661\nf 44661 45185 45186\nf 44661 45186 44662\nf 44662 45186 45187\nf 44662 45187 44663\nf 44663 45187 45188\nf 44663 45188 44664\nf 44664 45188 45189\nf 44664 45189 44665\nf 44665 45189 45190\nf 44665 45190 44666\nf 44666 45190 45191\nf 44666 45191 44667\nf 44667 45191 45192\nf 44667 45192 44668\nf 44668 45192 45193\nf 44668 45193 44669\nf 44669 45193 45194\nf 44669 45194 44670\nf 44670 45194 45195\nf 44670 45195 44671\nf 44671 45195 45196\nf 44671 45196 44672\nf 44672 45196 45197\nf 44672 45197 44673\nf 44673 45197 45198\nf 44673 45198 44674\nf 44674 45198 45199\nf 44674 45199 44675\nf 44675 45199 45200\nf 44675 45200 44676\nf 44676 45200 45202\nf 44676 45202 44678\nf 44677 44678 45201\nf 44678 45202 45201\nf 44679 45113 45203\nf 44679 45203 45204\nf 44679 45204 44680\nf 44680 45204 45206\nf 44680 45206 45205\nf 44681 44685 45207\nf 44681 45207 45209\nf 44681 45209 44683\nf 44682 44684 45208\nf 44682 45208 45213\nf 44682 45213 44687\nf 44683 45209 44684\nf 44684 45209 45210\nf 44684 45210 45208\nf 44685 44686 45212\nf 44685 45211 45207\nf 44685 45212 45211\nf 44686 44689 45212\nf 44687 45213 44688\nf 44688 45213 45214\nf 44688 45214 45216\nf 44688 45216 44690\nf 44689 44691 45217\nf 44689 45215 45212\nf 44689 45217 45215\nf 44690 45216 44693\nf 44691 44692 45218\nf 44691 45218 45217\nf 44692 44695 45218\nf 44693 45216 45219\nf 44693 45219 44694\nf 44694 45219 45220\nf 44694 45220 45222\nf 44694 45222 44696\nf 44695 44697 45223\nf 44695 45221 45218\nf 44695 45223 45221\nf 44696 45222 44698\nf 44697 44699 45225\nf 44697 45225 45223\nf 44698 45222 45224\nf 44698 45224 44700\nf 44699 44701 45227\nf 44699 45227 45225\nf 44700 45224 45226\nf 44700 45226 44702\nf 44701 44703 45229\nf 44701 45229 45227\nf 44702 45226 45228\nf 44702 45228 44704\nf 44703 44705 45231\nf 44703 45231 45229\nf 44704 45228 45230\nf 44704 45230 44706\nf 44705 44707 45233\nf 44705 45233 45231\nf 44706 45230 45232\nf 44706 45232 44709\nf 44707 44708 45234\nf 44707 45234 45233\nf 44708 44710 45234\nf 44709 45232 45235\nf 44709 45235 44711\nf 44710 44712 45238\nf 44710 45236 45234\nf 44710 45238 45236\nf 44711 45235 45237\nf 44711 45237 44714\nf 44712 44713 45238\nf 44713 44715 45242\nf 44713 45239 45238\nf 44713 45242 45239\nf 44714 45237 45241\nf 44714 45241 44716\nf 44715 44717 45244\nf 44715 45244 45242\nf 44716 45241 45243\nf 44716 45243 44718\nf 44717 44719 45246\nf 44717 45246 45244\nf 44718 45243 45245\nf 44718 45245 44720\nf 44719 44721 45248\nf 44719 45248 45246\nf 44720 45245 45247\nf 44720 45247 44722\nf 44721 44724 45251\nf 44721 45251 45248\nf 44722 45247 45249\nf 44722 45249 45250\nf 44722 45250 44723\nf 44723 45250 44725\nf 44724 44726 45254\nf 44724 45254 45251\nf 44725 45250 45252\nf 44725 45252 44727\nf 44726 44728 45256\nf 44726 45256 45254\nf 44727 45252 45255\nf 44727 45255 44729\nf 44728 44730 45258\nf 44728 45258 45256\nf 44729 45255 45257\nf 44729 45257 44732\nf 44730 44731 45258\nf 44731 44733 45261\nf 44731 45259 45258\nf 44731 45261 45259\nf 44732 45257 45260\nf 44732 45260 44734\nf 44733 44735 45263\nf 44733 45263 45261\nf 44734 45260 45262\nf 44734 45262 44736\nf 44735 44737 45265\nf 44735 45265 45263\nf 44736 45262 45264\nf 44736 45264 44738\nf 44737 44739 45267\nf 44737 45267 45265\nf 44738 45264 45266\nf 44738 45266 44740\nf 44739 44741 45269\nf 44739 45269 45267\nf 44740 45266 45268\nf 44740 45268 44742\nf 44741 44743 45271\nf 44741 45271 45269\nf 44742 45268 45270\nf 44742 45270 44744\nf 44743 44745 45273\nf 44743 45273 45271\nf 44744 45270 45272\nf 44744 45272 44746\nf 44745 44747 45275\nf 44745 45275 45273\nf 44746 45272 45274\nf 44746 45274 44748\nf 44747 44749 45278\nf 44747 45278 45275\nf 44748 45274 45276\nf 44748 45276 44750\nf 44749 44751 45282\nf 44749 45282 45278\nf 44750 45276 45279\nf 44750 45279 44752\nf 44751 44755 45284\nf 44751 45284 45282\nf 44752 44754 44753\nf 44752 45279 44754\nf 44753 44754 45283\nf 44753 45283 44756\nf 44754 45279 45280\nf 44754 45280 45283\nf 44755 44757 45286\nf 44755 45286 45284\nf 44756 45283 45285\nf 44756 45285 44758\nf 44757 44759 45286\nf 44758 45285 45289\nf 44758 45289 44762\nf 44759 44760 44761\nf 44759 44761 45286\nf 44760 44763 45290\nf 44760 45290 44761\nf 44761 45287 45286\nf 44761 45290 45287\nf 44762 45289 45291\nf 44762 45291 44764\nf 44763 44765 45294\nf 44763 45292 45290\nf 44763 45294 45292\nf 44764 45291 45293\nf 44764 45293 44766\nf 44765 44767 45296\nf 44765 45296 45294\nf 44766 45293 45295\nf 44766 45295 44768\nf 44767 44769 45298\nf 44767 45298 45296\nf 44768 45295 45297\nf 44768 45297 44770\nf 44769 44771 45300\nf 44769 45300 45298\nf 44770 45297 45299\nf 44770 45299 44772\nf 44771 44773 45302\nf 44771 45302 45300\nf 44772 45299 45301\nf 44772 45301 44774\nf 44773 44775 45304\nf 44773 45304 45302\nf 44774 45301 45303\nf 44774 45303 44776\nf 44775 44777 45306\nf 44775 45306 45304\nf 44776 45303 45305\nf 44776 45305 44778\nf 44777 44779 45309\nf 44777 45309 45306\nf 44778 45305 45308\nf 44778 45308 44780\nf 44779 44781 45312\nf 44779 45312 45309\nf 44780 45308 45311\nf 44780 45311 44782\nf 44781 44783 45312\nf 44782 45311 45315\nf 44782 45315 44786\nf 44783 44784 44785\nf 44783 44785 45312\nf 44784 44787 45316\nf 44784 45316 44785\nf 44785 45313 45312\nf 44785 45316 45313\nf 44786 45315 45317\nf 44786 45317 44788\nf 44787 44789 45320\nf 44787 45318 45316\nf 44787 45320 45318\nf 44788 45317 45319\nf 44788 45319 44790\nf 44789 44791 45322\nf 44789 45322 45320\nf 44790 45319 45321\nf 44790 45321 44792\nf 44791 44793 45324\nf 44791 45324 45322\nf 44792 45321 45323\nf 44792 45323 44794\nf 44793 44795 45326\nf 44793 45326 45324\nf 44794 45323 45325\nf 44794 45325 44796\nf 44795 44798 45329\nf 44795 45329 45326\nf 44796 45325 45327\nf 44796 45327 44797\nf 44797 45327 45328\nf 44797 45328 45330\nf 44797 45330 44799\nf 44798 44800 45331\nf 44798 45331 45329\nf 44799 45330 44801\nf 44800 44802 45333\nf 44800 45333 45331\nf 44801 45330 45332\nf 44801 45332 44803\nf 44802 44804 45335\nf 44802 45335 45333\nf 44803 45332 45334\nf 44803 45334 44805\nf 44804 44806 45337\nf 44804 45337 45335\nf 44805 45334 45336\nf 44805 45336 44807\nf 44806 44808 45339\nf 44806 45339 45337\nf 44807 45336 45338\nf 44807 45338 44809\nf 44808 44810 45341\nf 44808 45341 45339\nf 44809 45338 45340\nf 44809 45340 44811\nf 44810 44812 45343\nf 44810 45343 45341\nf 44811 45340 45342\nf 44811 45342 44813\nf 44812 44814 45345\nf 44812 45345 45343\nf 44813 45342 45344\nf 44813 45344 44815\nf 44814 44816 45347\nf 44814 45347 45345\nf 44815 45344 45346\nf 44815 45346 44817\nf 44816 44818 45349\nf 44816 45349 45347\nf 44817 45346 45348\nf 44817 45348 44819\nf 44818 44820 45351\nf 44818 45351 45349\nf 44819 45348 45350\nf 44819 45350 44822\nf 44820 44821 45351\nf 44821 44823 45354\nf 44821 45352 45351\nf 44821 45354 45352\nf 44822 45350 45353\nf 44822 45353 44824\nf 44823 44825 45356\nf 44823 45356 45354\nf 44824 45353 45355\nf 44824 45355 44826\nf 44825 44827 45359\nf 44825 45359 45356\nf 44826 45355 45357\nf 44826 45357 44828\nf 44827 44829 45363\nf 44827 45363 45359\nf 44828 45357 45360\nf 44828 45360 44830\nf 44829 44832 45365\nf 44829 45365 45363\nf 44830 44831 44834\nf 44830 44834 44833\nf 44830 45360 44831\nf 44831 45360 45361\nf 44831 45361 45364\nf 44831 45364 44834\nf 44832 44835 45367\nf 44832 45367 45365\nf 44833 44834 44838\nf 44833 44838 44836\nf 44834 45364 45366\nf 44834 45366 44838\nf 44835 44839 45369\nf 44835 45369 45367\nf 44836 44838 44837\nf 44837 44838 45368\nf 44837 45368 44840\nf 44838 45366 45368\nf 44839 44841 45371\nf 44839 45371 45369\nf 44840 45368 45370\nf 44840 45370 44842\nf 44841 44843 45373\nf 44841 45373 45371\nf 44842 45370 45372\nf 44842 45372 44844\nf 44843 44845 45375\nf 44843 45375 45373\nf 44844 45372 45374\nf 44844 45374 44846\nf 44845 44848 45378\nf 44845 45378 45375\nf 44846 45374 45376\nf 44846 45376 44847\nf 44847 45376 45377\nf 44847 45377 45379\nf 44847 45379 44849\nf 44848 44850 45380\nf 44848 45380 45378\nf 44849 45379 44851\nf 44850 44852 45382\nf 44850 45382 45380\nf 44851 45379 45381\nf 44851 45381 44854\nf 44852 44853 45382\nf 44853 44855 45385\nf 44853 45383 45382\nf 44853 45385 45383\nf 44854 45381 45384\nf 44854 45384 44856\nf 44855 44857 45388\nf 44855 45388 45385\nf 44856 45384 45387\nf 44856 45387 44858\nf 44857 44859 45390\nf 44857 45390 45388\nf 44858 45387 45389\nf 44858 45389 44860\nf 44859 44862 45393\nf 44859 45393 45390\nf 44860 45389 45391\nf 44860 45391 44861\nf 44861 45391 45392\nf 44861 45392 45394\nf 44861 45394 44863\nf 44862 44864 45395\nf 44862 45395 45393\nf 44863 45394 44865\nf 44864 44866 45397\nf 44864 45397 45395\nf 44865 45394 45396\nf 44865 45396 44868\nf 44866 44867 45397\nf 44867 44869 45400\nf 44867 45398 45397\nf 44867 45400 45398\nf 44868 45396 45399\nf 44868 45399 44870\nf 44869 44871 45402\nf 44869 45402 45400\nf 44870 45399 45401\nf 44870 45401 44872\nf 44871 44873 45402\nf 44872 45401 45404\nf 44872 45404 44876\nf 44873 44874 44875\nf 44873 44875 45402\nf 44874 44877 45405\nf 44874 45405 44875\nf 44875 45403 45402\nf 44875 45405 45403\nf 44876 45404 45406\nf 44876 45406 44879\nf 44877 44878 45407\nf 44877 45407 45405\nf 44878 44882 45413\nf 44878 45408 45407\nf 44878 45413 45408\nf 44879 45406 45410\nf 44879 45410 45411\nf 44879 45411 44880\nf 44880 45411 45412\nf 44880 45412 44881\nf 44881 45412 45414\nf 44881 45414 44883\nf 44882 44883 45413\nf 44883 45414 45413\nf 44884 44885 45416\nf 44884 44893 44891\nf 44884 45415 44893\nf 44884 45416 45415\nf 44885 44886 45417\nf 44885 45417 45416\nf 44886 44887 45418\nf 44886 45418 45417\nf 44887 44888 45419\nf 44887 45419 45418\nf 44888 44894 45420\nf 44888 45420 45419\nf 44889 44890 45421\nf 44889 45421 45429\nf 44889 45429 44899\nf 44890 44892 45423\nf 44890 45423 45421\nf 44891 44893 44892\nf 44892 44893 45422\nf 44892 45422 45423\nf 44893 45415 45422\nf 44894 44895 45425\nf 44894 45424 45420\nf 44894 45425 45424\nf 44895 44896 45425\nf 44896 44897 45426\nf 44896 45426 45425\nf 44897 44901 45427\nf 44897 45427 45426\nf 44898 44900 45428\nf 44898 45428 45435\nf 44898 45435 44904\nf 44899 45429 44900\nf 44900 45429 45430\nf 44900 45430 45428\nf 44901 44902 45433\nf 44901 45432 45427\nf 44901 45433 45432\nf 44902 44903 45433\nf 44903 44905 45434\nf 44903 45434 45433\nf 44904 45435 44907\nf 44905 44906 45437\nf 44905 45436 45434\nf 44905 45437 45436\nf 44906 44909 45437\nf 44907 45435 45438\nf 44907 45438 45439\nf 44907 45439 44908\nf 44908 45439 44911\nf 44909 44910 45441\nf 44909 45440 45437\nf 44909 45441 45440\nf 44910 44914 45441\nf 44911 45439 45442\nf 44911 45442 45443\nf 44911 45443 44912\nf 44912 45443 45444\nf 44912 45444 44913\nf 44913 45444 44915\nf 44914 44918 45449\nf 44914 45445 45441\nf 44914 45449 45445\nf 44915 45444 45446\nf 44915 45446 45447\nf 44915 45447 44916\nf 44916 45447 45448\nf 44916 45448 44917\nf 44917 45448 44919\nf 44918 44922 45453\nf 44918 45453 45449\nf 44919 45448 45450\nf 44919 45450 45451\nf 44919 45451 44920\nf 44920 45451 45452\nf 44920 45452 44921\nf 44921 45452 44923\nf 44922 44928 45460\nf 44922 45460 45453\nf 44923 45452 45454\nf 44923 45454 45455\nf 44923 45455 44924\nf 44924 45455 45456\nf 44924 45456 44925\nf 44925 45456 45457\nf 44925 45457 44926\nf 44926 45457 45458\nf 44926 45458 44927\nf 44927 45458 44930\nf 44928 44929 45460\nf 44929 44935 44937\nf 44929 44937 45459\nf 44929 45459 45461\nf 44929 45461 45460\nf 44930 45458 45462\nf 44930 45462 45463\nf 44930 45463 44931\nf 44931 45463 45464\nf 44931 45464 44932\nf 44932 45464 45465\nf 44932 45465 44933\nf 44933 45465 45467\nf 44933 45467 44934\nf 44934 45467 44936\nf 44935 44936 44937\nf 44936 45466 44937\nf 44936 45467 45466\nf 44937 45466 45459\nf 44938 44939 45468\nf 44938 45468 45476\nf 44938 45476 44946\nf 44939 44940 45469\nf 44939 45469 45468\nf 44940 44947 45470\nf 44940 45470 45469\nf 44941 44942 45471\nf 44941 45471 45478\nf 44941 45478 44948\nf 44942 44943 45472\nf 44942 45472 45471\nf 44943 44944 45473\nf 44943 45473 45472\nf 44944 44945 45474\nf 44944 45474 45473\nf 44945 44950 45475\nf 44945 45475 45474\nf 44946 45476 44952\nf 44947 44954 45484\nf 44947 45477 45470\nf 44947 45484 45477\nf 44948 45478 44949\nf 44949 45478 45479\nf 44949 45479 45486\nf 44949 45486 44956\nf 44950 44951 45481\nf 44950 45480 45475\nf 44950 45481 45480\nf 44951 44957 45481\nf 44952 45476 45482\nf 44952 45482 44953\nf 44953 45482 45483\nf 44953 45483 45490\nf 44953 45490 44958\nf 44954 44955 45485\nf 44954 45485 45484\nf 44955 44959 45485\nf 44956 45486 44960\nf 44957 44961 45493\nf 44957 45488 45481\nf 44957 45493 45488\nf 44958 45490 44962\nf 44959 44963 45495\nf 44959 45491 45485\nf 44959 45495 45491\nf 44960 45486 45492\nf 44960 45492 44964\nf 44961 44965 45497\nf 44961 45497 45493\nf 44962 45490 45494\nf 44962 45494 44966\nf 44963 44967 45499\nf 44963 45499 45495\nf 44964 45492 45496\nf 44964 45496 44968\nf 44965 44969 45501\nf 44965 45501 45497\nf 44966 45494 45498\nf 44966 45498 44971\nf 44967 44972 45504\nf 44967 45504 45499\nf 44968 45496 45500\nf 44968 45500 44973\nf 44969 44970 45502\nf 44969 45502 45501\nf 44970 44974 45502\nf 44971 45498 45503\nf 44971 45503 44975\nf 44972 44976 45508\nf 44972 45508 45504\nf 44973 45500 45505\nf 44973 45505 44977\nf 44974 44978 45510\nf 44974 45506 45502\nf 44974 45510 45506\nf 44975 45503 45507\nf 44975 45507 44979\nf 44976 44980 45512\nf 44976 45512 45508\nf 44977 45505 45509\nf 44977 45509 44981\nf 44978 44982 45514\nf 44978 45514 45510\nf 44979 45507 45511\nf 44979 45511 44983\nf 44980 44984 45516\nf 44980 45516 45512\nf 44981 45509 45513\nf 44981 45513 44986\nf 44982 44987 45519\nf 44982 45519 45514\nf 44983 45511 45515\nf 44983 45515 44988\nf 44984 44985 45517\nf 44984 45517 45516\nf 44985 44989 45517\nf 44986 45513 45518\nf 44986 45518 44990\nf 44987 44991 45523\nf 44987 45523 45519\nf 44988 45515 45520\nf 44988 45520 44993\nf 44989 44994 45525\nf 44989 45521 45517\nf 44989 45525 45521\nf 44990 45518 45522\nf 44990 45522 45001\nf 44991 44992 45534\nf 44991 45534 45523\nf 44992 45003 45004\nf 44992 45004 45534\nf 44993 45520 45524\nf 44993 45524 45005\nf 44994 44995 45526\nf 44994 45526 45525\nf 44995 44996 45526\nf 44996 44997 45527\nf 44996 45527 45526\nf 44997 44998 45528\nf 44997 45528 45527\nf 44998 45006 45529\nf 44998 45529 45528\nf 44999 45000 45530\nf 44999 45530 45619\nf 44999 45619 45088\nf 45000 45002 45531\nf 45000 45531 45530\nf 45001 45522 45532\nf 45001 45532 45002\nf 45002 45532 45533\nf 45002 45533 45531\nf 45003 45090 45621\nf 45003 45621 45004\nf 45004 45535 45534\nf 45004 45621 45535\nf 45005 45524 45536\nf 45005 45536 45091\nf 45006 45007 45538\nf 45006 45537 45529\nf 45006 45538 45537\nf 45007 45008 45538\nf 45008 45009 45539\nf 45008 45539 45538\nf 45009 45010 45540\nf 45009 45540 45539\nf 45010 45011 45541\nf 45010 45541 45540\nf 45011 45012 45542\nf 45011 45542 45541\nf 45012 45013 45543\nf 45012 45543 45542\nf 45013 45014 45544\nf 45013 45544 45543\nf 45014 45015 45545\nf 45014 45545 45544\nf 45015 45016 45546\nf 45015 45546 45545\nf 45016 45017 45547\nf 45016 45547 45546\nf 45017 45018 45548\nf 45017 45548 45547\nf 45018 45019 45549\nf 45018 45549 45548\nf 45019 45020 45550\nf 45019 45550 45549\nf 45020 45021 45551\nf 45020 45551 45550\nf 45021 45022 45552\nf 45021 45552 45551\nf 45022 45023 45553\nf 45022 45553 45552\nf 45023 45024 45554\nf 45023 45554 45553\nf 45024 45025 45555\nf 45024 45555 45554\nf 45025 45026 45556\nf 45025 45556 45555\nf 45026 45027 45557\nf 45026 45557 45556\nf 45027 45028 45558\nf 45027 45558 45557\nf 45028 45029 45559\nf 45028 45559 45558\nf 45029 45030 45560\nf 45029 45560 45559\nf 45030 45031 45561\nf 45030 45561 45560\nf 45031 45032 45562\nf 45031 45562 45561\nf 45032 45033 45563\nf 45032 45563 45562\nf 45033 45034 45564\nf 45033 45564 45563\nf 45034 45035 45565\nf 45034 45565 45564\nf 45035 45036 45566\nf 45035 45566 45565\nf 45036 45037 45567\nf 45036 45567 45566\nf 45037 45038 45568\nf 45037 45568 45567\nf 45038 45039 45569\nf 45038 45569 45568\nf 45039 45040 45570\nf 45039 45570 45569\nf 45040 45041 45571\nf 45040 45571 45570\nf 45041 45042 45572\nf 45041 45572 45571\nf 45042 45043 45573\nf 45042 45573 45572\nf 45043 45044 45574\nf 45043 45574 45573\nf 45044 45045 45575\nf 45044 45575 45574\nf 45045 45046 45576\nf 45045 45576 45575\nf 45046 45047 45577\nf 45046 45577 45576\nf 45047 45048 45578\nf 45047 45578 45577\nf 45048 45049 45579\nf 45048 45579 45578\nf 45049 45050 45580\nf 45049 45580 45579\nf 45050 45051 45581\nf 45050 45581 45580\nf 45051 45052 45582\nf 45051 45582 45581\nf 45052 45053 45583\nf 45052 45583 45582\nf 45053 45054 45584\nf 45053 45584 45583\nf 45054 45055 45585\nf 45054 45585 45584\nf 45055 45056 45586\nf 45055 45586 45585\nf 45056 45057 45587\nf 45056 45587 45586\nf 45057 45058 45588\nf 45057 45588 45587\nf 45058 45059 45589\nf 45058 45589 45588\nf 45059 45060 45590\nf 45059 45590 45589\nf 45060 45061 45591\nf 45060 45591 45590\nf 45061 45062 45592\nf 45061 45592 45591\nf 45062 45063 45593\nf 45062 45593 45592\nf 45063 45064 45594\nf 45063 45594 45593\nf 45064 45065 45595\nf 45064 45595 45594\nf 45065 45066 45596\nf 45065 45596 45595\nf 45066 45067 45597\nf 45066 45597 45596\nf 45067 45068 45598\nf 45067 45598 45597\nf 45068 45069 45599\nf 45068 45599 45598\nf 45069 45070 45600\nf 45069 45600 45599\nf 45070 45071 45601\nf 45070 45601 45600\nf 45071 45072 45602\nf 45071 45602 45601\nf 45072 45073 45603\nf 45072 45603 45602\nf 45073 45074 45604\nf 45073 45604 45603\nf 45074 45075 45605\nf 45074 45605 45604\nf 45075 45076 45606\nf 45075 45606 45605\nf 45076 45077 45607\nf 45076 45607 45606\nf 45077 45078 45608\nf 45077 45608 45607\nf 45078 45079 45609\nf 45078 45609 45608\nf 45079 45080 45610\nf 45079 45610 45609\nf 45080 45081 45611\nf 45080 45611 45610\nf 45081 45082 45612\nf 45081 45612 45611\nf 45082 45083 45613\nf 45082 45613 45612\nf 45083 45084 45614\nf 45083 45614 45613\nf 45084 45085 45615\nf 45084 45615 45614\nf 45085 45086 45616\nf 45085 45616 45615\nf 45086 45087 45617\nf 45086 45617 45616\nf 45087 45089 45618\nf 45087 45618 45617\nf 45088 45619 45089\nf 45089 45619 45620\nf 45089 45620 45618\nf 45090 45092 45623\nf 45090 45623 45621\nf 45091 45536 45622\nf 45091 45622 45093\nf 45092 45095 45626\nf 45092 45626 45623\nf 45093 45622 45624\nf 45093 45624 45625\nf 45093 45625 45094\nf 45094 45625 45096\nf 45095 45097 45628\nf 45095 45628 45626\nf 45096 45625 45627\nf 45096 45627 45099\nf 45097 45098 45628\nf 45098 45101 45632\nf 45098 45629 45628\nf 45098 45632 45629\nf 45099 45627 45630\nf 45099 45630 45631\nf 45099 45631 45100\nf 45100 45631 45103\nf 45101 45102 45632\nf 45102 45109 45640\nf 45102 45633 45632\nf 45102 45640 45633\nf 45103 45631 45634\nf 45103 45634 45635\nf 45103 45635 45104\nf 45104 45635 45111\nf 45105 45201 45733\nf 45105 45636 45637\nf 45105 45637 45106\nf 45105 45733 45636\nf 45106 45637 45638\nf 45106 45638 45107\nf 45107 45638 45639\nf 45107 45639 45108\nf 45108 45639 45641\nf 45108 45641 45110\nf 45109 45110 45640\nf 45110 45641 45640\nf 45111 45635 45642\nf 45111 45642 45644\nf 45111 45644 45112\nf 45112 45644 45645\nf 45112 45645 45113\nf 45113 45645 45203\nf 45114 45205 45738\nf 45114 45646 45647\nf 45114 45647 45115\nf 45114 45738 45646\nf 45115 45647 45648\nf 45115 45648 45116\nf 45116 45648 45649\nf 45116 45649 45117\nf 45117 45649 45650\nf 45117 45650 45118\nf 45118 45650 45651\nf 45118 45651 45119\nf 45119 45651 45652\nf 45119 45652 45120\nf 45120 45652 45653\nf 45120 45653 45121\nf 45121 45653 45654\nf 45121 45654 45122\nf 45122 45654 45655\nf 45122 45655 45123\nf 45123 45655 45656\nf 45123 45656 45124\nf 45124 45656 45657\nf 45124 45657 45125\nf 45125 45657 45658\nf 45125 45658 45126\nf 45126 45658 45659\nf 45126 45659 45127\nf 45127 45659 45660\nf 45127 45660 45128\nf 45128 45660 45661\nf 45128 45661 45129\nf 45129 45661 45662\nf 45129 45662 45130\nf 45130 45662 45663\nf 45130 45663 45131\nf 45131 45663 45664\nf 45131 45664 45132\nf 45132 45664 45665\nf 45132 45665 45133\nf 45133 45665 45666\nf 45133 45666 45134\nf 45134 45666 45667\nf 45134 45667 45135\nf 45135 45667 45668\nf 45135 45668 45136\nf 45136 45668 45669\nf 45136 45669 45137\nf 45137 45669 45670\nf 45137 45670 45138\nf 45138 45670 45671\nf 45138 45671 45139\nf 45139 45671 45672\nf 45139 45672 45140\nf 45140 45672 45673\nf 45140 45673 45141\nf 45141 45673 45674\nf 45141 45674 45142\nf 45142 45674 45675\nf 45142 45675 45143\nf 45143 45675 45676\nf 45143 45676 45144\nf 45144 45676 45677\nf 45144 45677 45145\nf 45145 45677 45678\nf 45145 45678 45146\nf 45146 45678 45679\nf 45146 45679 45147\nf 45147 45679 45680\nf 45147 45680 45148\nf 45148 45680 45681\nf 45148 45681 45149\nf 45149 45681 45682\nf 45149 45682 45150\nf 45150 45682 45683\nf 45150 45683 45151\nf 45151 45683 45684\nf 45151 45684 45152\nf 45152 45684 45685\nf 45152 45685 45153\nf 45153 45685 45686\nf 45153 45686 45154\nf 45154 45686 45687\nf 45154 45687 45155\nf 45155 45687 45688\nf 45155 45688 45156\nf 45156 45688 45689\nf 45156 45689 45157\nf 45157 45689 45690\nf 45157 45690 45158\nf 45158 45690 45691\nf 45158 45691 45159\nf 45159 45691 45692\nf 45159 45692 45160\nf 45160 45692 45693\nf 45160 45693 45161\nf 45161 45693 45694\nf 45161 45694 45162\nf 45162 45694 45695\nf 45162 45695 45163\nf 45163 45695 45696\nf 45163 45696 45164\nf 45164 45696 45697\nf 45164 45697 45165\nf 45165 45697 45698\nf 45165 45698 45166\nf 45166 45698 45699\nf 45166 45699 45167\nf 45167 45699 45700\nf 45167 45700 45168\nf 45168 45700 45701\nf 45168 45701 45169\nf 45169 45701 45702\nf 45169 45702 45170\nf 45170 45702 45703\nf 45170 45703 45171\nf 45171 45703 45704\nf 45171 45704 45172\nf 45172 45704 45705\nf 45172 45705 45173\nf 45173 45705 45706\nf 45173 45706 45174\nf 45174 45706 45707\nf 45174 45707 45175\nf 45175 45707 45708\nf 45175 45708 45176\nf 45176 45708 45709\nf 45176 45709 45177\nf 45177 45709 45710\nf 45177 45710 45178\nf 45178 45710 45711\nf 45178 45711 45179\nf 45179 45711 45712\nf 45179 45712 45180\nf 45180 45712 45713\nf 45180 45713 45181\nf 45181 45713 45714\nf 45181 45714 45182\nf 45182 45714 45715\nf 45182 45715 45183\nf 45183 45715 45716\nf 45183 45716 45184\nf 45184 45716 45717\nf 45184 45717 45185\nf 45185 45717 45718\nf 45185 45718 45186\nf 45186 45718 45719\nf 45186 45719 45187\nf 45187 45719 45720\nf 45187 45720 45188\nf 45188 45720 45721\nf 45188 45721 45189\nf 45189 45721 45722\nf 45189 45722 45190\nf 45190 45722 45723\nf 45190 45723 45191\nf 45191 45723 45724\nf 45191 45724 45192\nf 45192 45724 45725\nf 45192 45725 45193\nf 45193 45725 45726\nf 45193 45726 45194\nf 45194 45726 45727\nf 45194 45727 45195\nf 45195 45727 45728\nf 45195 45728 45196\nf 45196 45728 45729\nf 45196 45729 45197\nf 45197 45729 45730\nf 45197 45730 45198\nf 45198 45730 45731\nf 45198 45731 45199\nf 45199 45731 45732\nf 45199 45732 45200\nf 45200 45732 45734\nf 45200 45734 45202\nf 45201 45202 45733\nf 45202 45734 45733\nf 45203 45645 45735\nf 45203 45735 45737\nf 45203 45737 45204\nf 45204 45737 45739\nf 45204 45739 45206\nf 45205 45206 45738\nf 45206 45739 45738\nf 45207 45211 45740\nf 45207 45740 45742\nf 45207 45742 45209\nf 45208 45210 45741\nf 45208 45741 45747\nf 45208 45747 45213\nf 45209 45742 45210\nf 45210 45742 45743\nf 45210 45743 45741\nf 45211 45212 45746\nf 45211 45744 45740\nf 45211 45746 45744\nf 45212 45215 45746\nf 45213 45747 45214\nf 45214 45747 45748\nf 45214 45748 45750\nf 45214 45750 45216\nf 45215 45217 45751\nf 45215 45749 45746\nf 45215 45751 45749\nf 45216 45750 45219\nf 45217 45218 45752\nf 45217 45752 45751\nf 45218 45221 45752\nf 45219 45750 45753\nf 45219 45753 45220\nf 45220 45753 45754\nf 45220 45754 45757\nf 45220 45757 45222\nf 45221 45223 45758\nf 45221 45755 45752\nf 45221 45758 45755\nf 45222 45757 45224\nf 45223 45225 45760\nf 45223 45760 45758\nf 45224 45757 45759\nf 45224 45759 45226\nf 45225 45227 45762\nf 45225 45762 45760\nf 45226 45759 45761\nf 45226 45761 45228\nf 45227 45229 45764\nf 45227 45764 45762\nf 45228 45761 45763\nf 45228 45763 45230\nf 45229 45231 45766\nf 45229 45766 45764\nf 45230 45763 45765\nf 45230 45765 45232\nf 45231 45233 45768\nf 45231 45768 45766\nf 45232 45765 45767\nf 45232 45767 45235\nf 45233 45234 45769\nf 45233 45769 45768\nf 45234 45236 45769\nf 45235 45767 45770\nf 45235 45770 45237\nf 45236 45238 45771\nf 45236 45771 45769\nf 45237 45770 45774\nf 45237 45774 45241\nf 45238 45239 45240\nf 45238 45240 45771\nf 45239 45242 45775\nf 45239 45775 45240\nf 45240 45772 45771\nf 45240 45775 45772\nf 45241 45774 45776\nf 45241 45776 45243\nf 45242 45244 45779\nf 45242 45777 45775\nf 45242 45779 45777\nf 45243 45776 45778\nf 45243 45778 45245\nf 45244 45246 45781\nf 45244 45781 45779\nf 45245 45778 45780\nf 45245 45780 45247\nf 45246 45248 45783\nf 45246 45783 45781\nf 45247 45780 45782\nf 45247 45782 45249\nf 45248 45251 45785\nf 45248 45785 45783\nf 45249 45253 45250\nf 45249 45782 45784\nf 45249 45784 45786\nf 45249 45786 45253\nf 45250 45253 45252\nf 45251 45254 45788\nf 45251 45788 45785\nf 45252 45253 45787\nf 45252 45787 45789\nf 45252 45789 45255\nf 45253 45786 45787\nf 45254 45256 45790\nf 45254 45790 45788\nf 45255 45789 45257\nf 45256 45258 45792\nf 45256 45792 45790\nf 45257 45789 45791\nf 45257 45791 45260\nf 45258 45259 45792\nf 45259 45261 45795\nf 45259 45793 45792\nf 45259 45795 45793\nf 45260 45791 45794\nf 45260 45794 45262\nf 45261 45263 45797\nf 45261 45797 45795\nf 45262 45794 45796\nf 45262 45796 45264\nf 45263 45265 45799\nf 45263 45799 45797\nf 45264 45796 45798\nf 45264 45798 45266\nf 45265 45267 45801\nf 45265 45801 45799\nf 45266 45798 45800\nf 45266 45800 45268\nf 45267 45269 45803\nf 45267 45803 45801\nf 45268 45800 45802\nf 45268 45802 45270\nf 45269 45271 45805\nf 45269 45805 45803\nf 45270 45802 45804\nf 45270 45804 45272\nf 45271 45273 45808\nf 45271 45808 45805\nf 45272 45804 45806\nf 45272 45806 45274\nf 45273 45275 45812\nf 45273 45812 45808\nf 45274 45806 45809\nf 45274 45809 45276\nf 45275 45278 45814\nf 45275 45814 45812\nf 45276 45277 45281\nf 45276 45281 45279\nf 45276 45809 45277\nf 45277 45809 45810\nf 45277 45810 45813\nf 45277 45813 45281\nf 45278 45282 45816\nf 45278 45816 45814\nf 45279 45281 45280\nf 45280 45281 45815\nf 45280 45815 45283\nf 45281 45813 45815\nf 45282 45284 45818\nf 45282 45818 45816\nf 45283 45815 45817\nf 45283 45817 45285\nf 45284 45286 45818\nf 45285 45817 45821\nf 45285 45821 45289\nf 45286 45287 45288\nf 45286 45288 45818\nf 45287 45290 45822\nf 45287 45822 45288\nf 45288 45819 45818\nf 45288 45822 45819\nf 45289 45821 45823\nf 45289 45823 45291\nf 45290 45292 45826\nf 45290 45824 45822\nf 45290 45826 45824\nf 45291 45823 45825\nf 45291 45825 45293\nf 45292 45294 45828\nf 45292 45828 45826\nf 45293 45825 45827\nf 45293 45827 45295\nf 45294 45296 45830\nf 45294 45830 45828\nf 45295 45827 45829\nf 45295 45829 45297\nf 45296 45298 45832\nf 45296 45832 45830\nf 45297 45829 45831\nf 45297 45831 45299\nf 45298 45300 45834\nf 45298 45834 45832\nf 45299 45831 45833\nf 45299 45833 45301\nf 45300 45302 45836\nf 45300 45836 45834\nf 45301 45833 45835\nf 45301 45835 45303\nf 45302 45304 45839\nf 45302 45839 45836\nf 45303 45835 45838\nf 45303 45838 45305\nf 45304 45306 45839\nf 45305 45838 45842\nf 45305 45842 45308\nf 45306 45307 45839\nf 45306 45309 45310\nf 45306 45310 45307\nf 45307 45310 45843\nf 45307 45840 45839\nf 45307 45843 45840\nf 45308 45842 45844\nf 45308 45844 45311\nf 45309 45312 45314\nf 45309 45314 45310\nf 45310 45314 45845\nf 45310 45845 45843\nf 45311 45844 45846\nf 45311 45846 45315\nf 45312 45313 45314\nf 45313 45316 45847\nf 45313 45847 45314\nf 45314 45847 45845\nf 45315 45846 45848\nf 45315 45848 45317\nf 45316 45318 45851\nf 45316 45849 45847\nf 45316 45851 45849\nf 45317 45848 45850\nf 45317 45850 45319\nf 45318 45320 45853\nf 45318 45853 45851\nf 45319 45850 45852\nf 45319 45852 45321\nf 45320 45322 45855\nf 45320 45855 45853\nf 45321 45852 45854\nf 45321 45854 45323\nf 45322 45324 45857\nf 45322 45857 45855\nf 45323 45854 45856\nf 45323 45856 45325\nf 45324 45326 45859\nf 45324 45859 45857\nf 45325 45856 45858\nf 45325 45858 45327\nf 45326 45329 45862\nf 45326 45862 45859\nf 45327 45858 45860\nf 45327 45860 45328\nf 45328 45860 45861\nf 45328 45861 45863\nf 45328 45863 45330\nf 45329 45331 45864\nf 45329 45864 45862\nf 45330 45863 45332\nf 45331 45333 45866\nf 45331 45866 45864\nf 45332 45863 45865\nf 45332 45865 45334\nf 45333 45335 45868\nf 45333 45868 45866\nf 45334 45865 45867\nf 45334 45867 45336\nf 45335 45337 45870\nf 45335 45870 45868\nf 45336 45867 45869\nf 45336 45869 45338\nf 45337 45339 45872\nf 45337 45872 45870\nf 45338 45869 45871\nf 45338 45871 45340\nf 45339 45341 45874\nf 45339 45874 45872\nf 45340 45871 45873\nf 45340 45873 45342\nf 45341 45343 45876\nf 45341 45876 45874\nf 45342 45873 45875\nf 45342 45875 45344\nf 45343 45345 45878\nf 45343 45878 45876\nf 45344 45875 45877\nf 45344 45877 45346\nf 45345 45347 45880\nf 45345 45880 45878\nf 45346 45877 45879\nf 45346 45879 45348\nf 45347 45349 45882\nf 45347 45882 45880\nf 45348 45879 45881\nf 45348 45881 45350\nf 45349 45351 45884\nf 45349 45884 45882\nf 45350 45881 45883\nf 45350 45883 45353\nf 45351 45352 45884\nf 45352 45354 45887\nf 45352 45885 45884\nf 45352 45887 45885\nf 45353 45883 45886\nf 45353 45886 45355\nf 45354 45356 45892\nf 45354 45892 45887\nf 45355 45886 45889\nf 45355 45889 45357\nf 45356 45359 45894\nf 45356 45894 45892\nf 45357 45358 45362\nf 45357 45362 45360\nf 45357 45889 45358\nf 45358 45889 45890\nf 45358 45890 45893\nf 45358 45893 45362\nf 45359 45363 45896\nf 45359 45896 45894\nf 45360 45362 45361\nf 45361 45362 45895\nf 45361 45895 45364\nf 45362 45893 45895\nf 45363 45365 45898\nf 45363 45898 45896\nf 45364 45895 45897\nf 45364 45897 45366\nf 45365 45367 45900\nf 45365 45900 45898\nf 45366 45897 45899\nf 45366 45899 45368\nf 45367 45369 45902\nf 45367 45902 45900\nf 45368 45899 45901\nf 45368 45901 45370\nf 45369 45371 45904\nf 45369 45904 45902\nf 45370 45901 45903\nf 45370 45903 45372\nf 45371 45373 45906\nf 45371 45906 45904\nf 45372 45903 45905\nf 45372 45905 45374\nf 45373 45375 45908\nf 45373 45908 45906\nf 45374 45905 45907\nf 45374 45907 45376\nf 45375 45378 45912\nf 45375 45912 45908\nf 45376 45907 45909\nf 45376 45909 45377\nf 45377 45909 45910\nf 45377 45910 45913\nf 45377 45913 45379\nf 45378 45380 45914\nf 45378 45914 45912\nf 45379 45913 45381\nf 45380 45382 45916\nf 45380 45916 45914\nf 45381 45913 45915\nf 45381 45915 45384\nf 45382 45383 45918\nf 45382 45918 45916\nf 45383 45385 45386\nf 45383 45386 45918\nf 45384 45915 45917\nf 45384 45917 45387\nf 45385 45388 45921\nf 45385 45921 45386\nf 45386 45919 45918\nf 45386 45921 45919\nf 45387 45917 45920\nf 45387 45920 45389\nf 45388 45390 45923\nf 45388 45923 45921\nf 45389 45920 45922\nf 45389 45922 45391\nf 45390 45393 45926\nf 45390 45926 45923\nf 45391 45922 45924\nf 45391 45924 45392\nf 45392 45924 45925\nf 45392 45925 45927\nf 45392 45927 45394\nf 45393 45395 45928\nf 45393 45928 45926\nf 45394 45927 45396\nf 45395 45397 45930\nf 45395 45930 45928\nf 45396 45927 45929\nf 45396 45929 45399\nf 45397 45398 45930\nf 45398 45400 45933\nf 45398 45931 45930\nf 45398 45933 45931\nf 45399 45929 45932\nf 45399 45932 45401\nf 45400 45402 45935\nf 45400 45935 45933\nf 45401 45932 45934\nf 45401 45934 45404\nf 45402 45403 45935\nf 45403 45405 45938\nf 45403 45936 45935\nf 45403 45938 45936\nf 45404 45934 45937\nf 45404 45937 45406\nf 45405 45407 45938\nf 45406 45937 45940\nf 45406 45940 45410\nf 45407 45408 45409\nf 45407 45409 45938\nf 45408 45413 45941\nf 45408 45941 45409\nf 45409 45939 45938\nf 45409 45941 45939\nf 45410 45940 45942\nf 45410 45942 45943\nf 45410 45943 45411\nf 45411 45943 45945\nf 45411 45945 45412\nf 45412 45945 45947\nf 45412 45947 45414\nf 45413 45414 45946\nf 45413 45946 45941\nf 45414 45947 45946\nf 45415 45416 45949\nf 45415 45949 45957\nf 45415 45957 45422\nf 45416 45417 45950\nf 45416 45950 45949\nf 45417 45418 45951\nf 45417 45951 45950\nf 45418 45419 45952\nf 45418 45952 45951\nf 45419 45420 45953\nf 45419 45953 45952\nf 45420 45424 45954\nf 45420 45954 45953\nf 45421 45423 45956\nf 45421 45431 45429\nf 45421 45955 45431\nf 45421 45956 45955\nf 45422 45957 45423\nf 45423 45957 45958\nf 45423 45958 45956\nf 45424 45425 45960\nf 45424 45959 45954\nf 45424 45960 45959\nf 45425 45426 45960\nf 45426 45427 45961\nf 45426 45961 45960\nf 45427 45432 45962\nf 45427 45962 45961\nf 45428 45430 45964\nf 45428 45964 45968\nf 45428 45968 45435\nf 45429 45431 45430\nf 45430 45431 45963\nf 45430 45963 45964\nf 45431 45955 45963\nf 45432 45433 45966\nf 45432 45965 45962\nf 45432 45966 45965\nf 45433 45434 45966\nf 45434 45436 45967\nf 45434 45967 45966\nf 45435 45968 45438\nf 45436 45437 45970\nf 45436 45969 45967\nf 45436 45970 45969\nf 45437 45440 45970\nf 45438 45968 45971\nf 45438 45971 45972\nf 45438 45972 45439\nf 45439 45972 45442\nf 45440 45441 45974\nf 45440 45973 45970\nf 45440 45974 45973\nf 45441 45445 45974\nf 45442 45972 45975\nf 45442 45975 45976\nf 45442 45976 45443\nf 45443 45976 45977\nf 45443 45977 45444\nf 45444 45977 45446\nf 45445 45449 45982\nf 45445 45978 45974\nf 45445 45982 45978\nf 45446 45977 45979\nf 45446 45979 45980\nf 45446 45980 45447\nf 45447 45980 45981\nf 45447 45981 45448\nf 45448 45981 45450\nf 45449 45453 45986\nf 45449 45986 45982\nf 45450 45981 45983\nf 45450 45983 45984\nf 45450 45984 45451\nf 45451 45984 45985\nf 45451 45985 45452\nf 45452 45985 45454\nf 45453 45460 45994\nf 45453 45994 45986\nf 45454 45985 45987\nf 45454 45987 45988\nf 45454 45988 45455\nf 45455 45988 45990\nf 45455 45990 45456\nf 45456 45990 45991\nf 45456 45991 45457\nf 45457 45991 45992\nf 45457 45992 45458\nf 45458 45992 45462\nf 45459 45466 46001\nf 45459 45993 45995\nf 45459 45995 45461\nf 45459 46001 45993\nf 45460 45461 45994\nf 45461 45995 45994\nf 45462 45992 45997\nf 45462 45997 45998\nf 45462 45998 45463\nf 45463 45998 45999\nf 45463 45999 45464\nf 45464 45999 46000\nf 45464 46000 45465\nf 45465 46000 46002\nf 45465 46002 45467\nf 45466 45467 46001\nf 45467 46002 46001\nf 45468 45469 46003\nf 45468 46003 46011\nf 45468 46011 45476\nf 45469 45470 46004\nf 45469 46004 46003\nf 45470 45477 46005\nf 45470 46005 46004\nf 45471 45472 46006\nf 45471 46006 46013\nf 45471 46013 45478\nf 45472 45473 46007\nf 45472 46007 46006\nf 45473 45474 46008\nf 45473 46008 46007\nf 45474 45475 46009\nf 45474 46009 46008\nf 45475 45480 46010\nf 45475 46010 46009\nf 45476 46011 45482\nf 45477 45484 46017\nf 45477 46012 46005\nf 45477 46017 46012\nf 45478 46013 46019\nf 45478 46019 45479\nf 45479 45487 45486\nf 45479 46019 45487\nf 45480 45481 45489\nf 45480 45489 46021\nf 45480 46014 46010\nf 45480 46021 46014\nf 45481 45488 45489\nf 45482 46011 46015\nf 45482 46015 45483\nf 45483 46015 46016\nf 45483 46016 46024\nf 45483 46024 45490\nf 45484 45485 46018\nf 45484 46018 46017\nf 45485 45491 46018\nf 45486 45487 46026\nf 45486 46026 45492\nf 45487 46019 46020\nf 45487 46020 46026\nf 45488 45493 46027\nf 45488 46022 45489\nf 45488 46027 46022\nf 45489 46022 46021\nf 45490 46024 45494\nf 45491 45495 46029\nf 45491 46025 46018\nf 45491 46029 46025\nf 45492 46026 45496\nf 45493 45497 46031\nf 45493 46031 46027\nf 45494 46024 46028\nf 45494 46028 45498\nf 45495 45499 46033\nf 45495 46033 46029\nf 45496 46026 46030\nf 45496 46030 45500\nf 45497 45501 46035\nf 45497 46035 46031\nf 45498 46028 46032\nf 45498 46032 45503\nf 45499 45504 46038\nf 45499 46038 46033\nf 45500 46030 46034\nf 45500 46034 45505\nf 45501 45502 46036\nf 45501 46036 46035\nf 45502 45506 46036\nf 45503 46032 46037\nf 45503 46037 45507\nf 45504 45508 46042\nf 45504 46042 46038\nf 45505 46034 46039\nf 45505 46039 45509\nf 45506 45510 46044\nf 45506 46040 46036\nf 45506 46044 46040\nf 45507 46037 46041\nf 45507 46041 45511\nf 45508 45512 46046\nf 45508 46046 46042\nf 45509 46039 46043\nf 45509 46043 45513\nf 45510 45514 46048\nf 45510 46048 46044\nf 45511 46041 46045\nf 45511 46045 45515\nf 45512 45516 46050\nf 45512 46050 46046\nf 45513 46043 46047\nf 45513 46047 45518\nf 45514 45519 46053\nf 45514 46053 46048\nf 45515 46045 46049\nf 45515 46049 45520\nf 45516 45517 46051\nf 45516 46051 46050\nf 45517 45521 46051\nf 45518 46047 46052\nf 45518 46052 45522\nf 45519 45523 46058\nf 45519 46058 46053\nf 45520 46049 46054\nf 45520 46054 45524\nf 45521 45525 46060\nf 45521 46055 46051\nf 45521 46060 46055\nf 45522 46052 46057\nf 45522 46057 45532\nf 45523 45534 46069\nf 45523 46069 46058\nf 45524 46054 46059\nf 45524 46059 45536\nf 45525 45526 46061\nf 45525 46061 46060\nf 45526 45527 46061\nf 45527 45528 46062\nf 45527 46062 46061\nf 45528 45529 46063\nf 45528 46063 46062\nf 45529 45537 46064\nf 45529 46064 46063\nf 45530 45531 46065\nf 45530 46065 46154\nf 45530 46154 45619\nf 45531 45533 46066\nf 45531 46066 46065\nf 45532 46057 46067\nf 45532 46067 45533\nf 45533 46067 46068\nf 45533 46068 46066\nf 45534 45535 46069\nf 45535 45621 46156\nf 45535 46070 46069\nf 45535 46156 46070\nf 45536 46059 46071\nf 45536 46071 45622\nf 45537 45538 46073\nf 45537 46072 46064\nf 45537 46073 46072\nf 45538 45539 46073\nf 45539 45540 46074\nf 45539 46074 46073\nf 45540 45541 46075\nf 45540 46075 46074\nf 45541 45542 46076\nf 45541 46076 46075\nf 45542 45543 46077\nf 45542 46077 46076\nf 45543 45544 46078\nf 45543 46078 46077\nf 45544 45545 46079\nf 45544 46079 46078\nf 45545 45546 46080\nf 45545 46080 46079\nf 45546 45547 46081\nf 45546 46081 46080\nf 45547 45548 46082\nf 45547 46082 46081\nf 45548 45549 46083\nf 45548 46083 46082\nf 45549 45550 46084\nf 45549 46084 46083\nf 45550 45551 46085\nf 45550 46085 46084\nf 45551 45552 46086\nf 45551 46086 46085\nf 45552 45553 46087\nf 45552 46087 46086\nf 45553 45554 46088\nf 45553 46088 46087\nf 45554 45555 46089\nf 45554 46089 46088\nf 45555 45556 46090\nf 45555 46090 46089\nf 45556 45557 46091\nf 45556 46091 46090\nf 45557 45558 46092\nf 45557 46092 46091\nf 45558 45559 46093\nf 45558 46093 46092\nf 45559 45560 46094\nf 45559 46094 46093\nf 45560 45561 46095\nf 45560 46095 46094\nf 45561 45562 46096\nf 45561 46096 46095\nf 45562 45563 46097\nf 45562 46097 46096\nf 45563 45564 46098\nf 45563 46098 46097\nf 45564 45565 46099\nf 45564 46099 46098\nf 45565 45566 46100\nf 45565 46100 46099\nf 45566 45567 46101\nf 45566 46101 46100\nf 45567 45568 46102\nf 45567 46102 46101\nf 45568 45569 46103\nf 45568 46103 46102\nf 45569 45570 46104\nf 45569 46104 46103\nf 45570 45571 46105\nf 45570 46105 46104\nf 45571 45572 46106\nf 45571 46106 46105\nf 45572 45573 46107\nf 45572 46107 46106\nf 45573 45574 46108\nf 45573 46108 46107\nf 45574 45575 46109\nf 45574 46109 46108\nf 45575 45576 46110\nf 45575 46110 46109\nf 45576 45577 46111\nf 45576 46111 46110\nf 45577 45578 46112\nf 45577 46112 46111\nf 45578 45579 46113\nf 45578 46113 46112\nf 45579 45580 46114\nf 45579 46114 46113\nf 45580 45581 46115\nf 45580 46115 46114\nf 45581 45582 46116\nf 45581 46116 46115\nf 45582 45583 46117\nf 45582 46117 46116\nf 45583 45584 46118\nf 45583 46118 46117\nf 45584 45585 46119\nf 45584 46119 46118\nf 45585 45586 46120\nf 45585 46120 46119\nf 45586 45587 46121\nf 45586 46121 46120\nf 45587 45588 46122\nf 45587 46122 46121\nf 45588 45589 46123\nf 45588 46123 46122\nf 45589 45590 46124\nf 45589 46124 46123\nf 45590 45591 46125\nf 45590 46125 46124\nf 45591 45592 46126\nf 45591 46126 46125\nf 45592 45593 46127\nf 45592 46127 46126\nf 45593 45594 46128\nf 45593 46128 46127\nf 45594 45595 46129\nf 45594 46129 46128\nf 45595 45596 46130\nf 45595 46130 46129\nf 45596 45597 46131\nf 45596 46131 46130\nf 45597 45598 46132\nf 45597 46132 46131\nf 45598 45599 46133\nf 45598 46133 46132\nf 45599 45600 46134\nf 45599 46134 46133\nf 45600 45601 46135\nf 45600 46135 46134\nf 45601 45602 46136\nf 45601 46136 46135\nf 45602 45603 46137\nf 45602 46137 46136\nf 45603 45604 46138\nf 45603 46138 46137\nf 45604 45605 46139\nf 45604 46139 46138\nf 45605 45606 46140\nf 45605 46140 46139\nf 45606 45607 46141\nf 45606 46141 46140\nf 45607 45608 46142\nf 45607 46142 46141\nf 45608 45609 46143\nf 45608 46143 46142\nf 45609 45610 46144\nf 45609 46144 46143\nf 45610 45611 46145\nf 45610 46145 46144\nf 45611 45612 46146\nf 45611 46146 46145\nf 45612 45613 46147\nf 45612 46147 46146\nf 45613 45614 46148\nf 45613 46148 46147\nf 45614 45615 46149\nf 45614 46149 46148\nf 45615 45616 46150\nf 45615 46150 46149\nf 45616 45617 46151\nf 45616 46151 46150\nf 45617 45618 46152\nf 45617 46152 46151\nf 45618 45620 46153\nf 45618 46153 46152\nf 45619 46154 45620\nf 45620 46154 46155\nf 45620 46155 46153\nf 45621 45623 46159\nf 45621 46159 46156\nf 45622 46071 46158\nf 45622 46158 45624\nf 45623 45626 46162\nf 45623 46162 46159\nf 45624 46158 46160\nf 45624 46160 46161\nf 45624 46161 45625\nf 45625 46161 45627\nf 45626 45628 46164\nf 45626 46164 46162\nf 45627 46161 46163\nf 45627 46163 45630\nf 45628 45629 46164\nf 45629 45632 46168\nf 45629 46165 46164\nf 45629 46168 46165\nf 45630 46163 46166\nf 45630 46166 46167\nf 45630 46167 45631\nf 45631 46167 45634\nf 45632 45633 46168\nf 45633 45640 46176\nf 45633 46169 46168\nf 45633 46176 46169\nf 45634 45643 45635\nf 45634 46167 46170\nf 45634 46170 46178\nf 45634 46178 45643\nf 45635 45643 45642\nf 45636 45733 46268\nf 45636 46172 46173\nf 45636 46173 45637\nf 45636 46268 46172\nf 45637 46173 46174\nf 45637 46174 45638\nf 45638 46174 46175\nf 45638 46175 45639\nf 45639 46175 46177\nf 45639 46177 45641\nf 45640 45641 46176\nf 45641 46177 46176\nf 45642 45643 46179\nf 45642 46179 45644\nf 45643 46178 46179\nf 45644 46179 46180\nf 45644 46180 45645\nf 45645 45736 45735\nf 45645 46180 45736\nf 45646 45738 46273\nf 45646 46181 46182\nf 45646 46182 45647\nf 45646 46273 46181\nf 45647 46182 46183\nf 45647 46183 45648\nf 45648 46183 46184\nf 45648 46184 45649\nf 45649 46184 46185\nf 45649 46185 45650\nf 45650 46185 46186\nf 45650 46186 45651\nf 45651 46186 46187\nf 45651 46187 45652\nf 45652 46187 46188\nf 45652 46188 45653\nf 45653 46188 46189\nf 45653 46189 45654\nf 45654 46189 46190\nf 45654 46190 45655\nf 45655 46190 46191\nf 45655 46191 45656\nf 45656 46191 46192\nf 45656 46192 45657\nf 45657 46192 46193\nf 45657 46193 45658\nf 45658 46193 46194\nf 45658 46194 45659\nf 45659 46194 46195\nf 45659 46195 45660\nf 45660 46195 46196\nf 45660 46196 45661\nf 45661 46196 46197\nf 45661 46197 45662\nf 45662 46197 46198\nf 45662 46198 45663\nf 45663 46198 46199\nf 45663 46199 45664\nf 45664 46199 46200\nf 45664 46200 45665\nf 45665 46200 46201\nf 45665 46201 45666\nf 45666 46201 46202\nf 45666 46202 45667\nf 45667 46202 46203\nf 45667 46203 45668\nf 45668 46203 46204\nf 45668 46204 45669\nf 45669 46204 46205\nf 45669 46205 45670\nf 45670 46205 46206\nf 45670 46206 45671\nf 45671 46206 46207\nf 45671 46207 45672\nf 45672 46207 46208\nf 45672 46208 45673\nf 45673 46208 46209\nf 45673 46209 45674\nf 45674 46209 46210\nf 45674 46210 45675\nf 45675 46210 46211\nf 45675 46211 45676\nf 45676 46211 46212\nf 45676 46212 45677\nf 45677 46212 46213\nf 45677 46213 45678\nf 45678 46213 46214\nf 45678 46214 45679\nf 45679 46214 46215\nf 45679 46215 45680\nf 45680 46215 46216\nf 45680 46216 45681\nf 45681 46216 46217\nf 45681 46217 45682\nf 45682 46217 46218\nf 45682 46218 45683\nf 45683 46218 46219\nf 45683 46219 45684\nf 45684 46219 46220\nf 45684 46220 45685\nf 45685 46220 46221\nf 45685 46221 45686\nf 45686 46221 46222\nf 45686 46222 45687\nf 45687 46222 46223\nf 45687 46223 45688\nf 45688 46223 46224\nf 45688 46224 45689\nf 45689 46224 46225\nf 45689 46225 45690\nf 45690 46225 46226\nf 45690 46226 45691\nf 45691 46226 46227\nf 45691 46227 45692\nf 45692 46227 46228\nf 45692 46228 45693\nf 45693 46228 46229\nf 45693 46229 45694\nf 45694 46229 46230\nf 45694 46230 45695\nf 45695 46230 46231\nf 45695 46231 45696\nf 45696 46231 46232\nf 45696 46232 45697\nf 45697 46232 46233\nf 45697 46233 45698\nf 45698 46233 46234\nf 45698 46234 45699\nf 45699 46234 46235\nf 45699 46235 45700\nf 45700 46235 46236\nf 45700 46236 45701\nf 45701 46236 46237\nf 45701 46237 45702\nf 45702 46237 46238\nf 45702 46238 45703\nf 45703 46238 46239\nf 45703 46239 45704\nf 45704 46239 46240\nf 45704 46240 45705\nf 45705 46240 46241\nf 45705 46241 45706\nf 45706 46241 46242\nf 45706 46242 45707\nf 45707 46242 46243\nf 45707 46243 45708\nf 45708 46243 46244\nf 45708 46244 45709\nf 45709 46244 46245\nf 45709 46245 45710\nf 45710 46245 46246\nf 45710 46246 45711\nf 45711 46246 46247\nf 45711 46247 45712\nf 45712 46247 46248\nf 45712 46248 45713\nf 45713 46248 46249\nf 45713 46249 45714\nf 45714 46249 46250\nf 45714 46250 45715\nf 45715 46250 46251\nf 45715 46251 45716\nf 45716 46251 46252\nf 45716 46252 45717\nf 45717 46252 46253\nf 45717 46253 45718\nf 45718 46253 46254\nf 45718 46254 45719\nf 45719 46254 46255\nf 45719 46255 45720\nf 45720 46255 46256\nf 45720 46256 45721\nf 45721 46256 46257\nf 45721 46257 45722\nf 45722 46257 46258\nf 45722 46258 45723\nf 45723 46258 46259\nf 45723 46259 45724\nf 45724 46259 46260\nf 45724 46260 45725\nf 45725 46260 46261\nf 45725 46261 45726\nf 45726 46261 46262\nf 45726 46262 45727\nf 45727 46262 46263\nf 45727 46263 45728\nf 45728 46263 46264\nf 45728 46264 45729\nf 45729 46264 46265\nf 45729 46265 45730\nf 45730 46265 46266\nf 45730 46266 45731\nf 45731 46266 46267\nf 45731 46267 45732\nf 45732 46267 46269\nf 45732 46269 45734\nf 45733 45734 46268\nf 45734 46269 46268\nf 45735 45736 46271\nf 45735 46271 45737\nf 45736 46180 46270\nf 45736 46270 46271\nf 45737 46271 46272\nf 45737 46272 46274\nf 45737 46274 45739\nf 45738 45739 46273\nf 45739 46274 46273\nf 45740 45744 45745\nf 45740 45745 45742\nf 45741 45743 46276\nf 45741 46276 46280\nf 45741 46280 45747\nf 45742 45745 45743\nf 45743 45745 46278\nf 45743 46277 46276\nf 45743 46278 46277\nf 45744 45746 46278\nf 45744 46278 45745\nf 45746 45749 46279\nf 45746 46279 46278\nf 45747 46280 45748\nf 45748 46280 46281\nf 45748 46281 46283\nf 45748 46283 45750\nf 45749 45751 46284\nf 45749 46282 46279\nf 45749 46284 46282\nf 45750 46283 45753\nf 45751 45752 45756\nf 45751 45756 46287\nf 45751 46287 46284\nf 45752 45755 45756\nf 45753 46283 46285\nf 45753 46285 45754\nf 45754 46285 46286\nf 45754 46286 46289\nf 45754 46289 45757\nf 45755 45758 46290\nf 45755 46288 45756\nf 45755 46290 46288\nf 45756 46288 46287\nf 45757 46289 45759\nf 45758 45760 46292\nf 45758 46292 46290\nf 45759 46289 46291\nf 45759 46291 45761\nf 45760 45762 46294\nf 45760 46294 46292\nf 45761 46291 46293\nf 45761 46293 45763\nf 45762 45764 46296\nf 45762 46296 46294\nf 45763 46293 46295\nf 45763 46295 45765\nf 45764 45766 46298\nf 45764 46298 46296\nf 45765 46295 46297\nf 45765 46297 45767\nf 45766 45768 46300\nf 45766 46300 46298\nf 45767 46297 46299\nf 45767 46299 45770\nf 45768 45769 45773\nf 45768 45773 46302\nf 45768 46302 46300\nf 45769 45771 45773\nf 45770 46299 46301\nf 45770 46301 45774\nf 45771 45772 45773\nf 45772 45775 46302\nf 45772 46302 45773\nf 45774 46301 46303\nf 45774 46303 45776\nf 45775 45777 46306\nf 45775 46304 46302\nf 45775 46306 46304\nf 45776 46303 46305\nf 45776 46305 45778\nf 45777 45779 46308\nf 45777 46308 46306\nf 45778 46305 46307\nf 45778 46307 45780\nf 45779 45781 46310\nf 45779 46310 46308\nf 45780 46307 46309\nf 45780 46309 45782\nf 45781 45783 46312\nf 45781 46312 46310\nf 45782 46309 46311\nf 45782 46311 45784\nf 45783 45785 46314\nf 45783 46314 46312\nf 45784 46311 46313\nf 45784 46313 45786\nf 45785 45788 46317\nf 45785 46317 46314\nf 45786 46313 46315\nf 45786 46315 46316\nf 45786 46316 45787\nf 45787 46316 45789\nf 45788 45790 46319\nf 45788 46319 46317\nf 45789 46316 46318\nf 45789 46318 45791\nf 45790 45792 46321\nf 45790 46321 46319\nf 45791 46318 46320\nf 45791 46320 45794\nf 45792 45793 46321\nf 45793 45795 46324\nf 45793 46322 46321\nf 45793 46324 46322\nf 45794 46320 46323\nf 45794 46323 45796\nf 45795 45797 46326\nf 45795 46326 46324\nf 45796 46323 46325\nf 45796 46325 45798\nf 45797 45799 46328\nf 45797 46328 46326\nf 45798 46325 46327\nf 45798 46327 45800\nf 45799 45801 46330\nf 45799 46330 46328\nf 45800 46327 46329\nf 45800 46329 45802\nf 45801 45803 46332\nf 45801 46332 46330\nf 45802 46329 46331\nf 45802 46331 45804\nf 45803 45805 46336\nf 45803 46336 46332\nf 45804 46331 46333\nf 45804 46333 45806\nf 45805 45808 46338\nf 45805 46338 46336\nf 45806 45807 45811\nf 45806 45811 45809\nf 45806 46333 45807\nf 45807 46333 46334\nf 45807 46334 46337\nf 45807 46337 45811\nf 45808 45812 46340\nf 45808 46340 46338\nf 45809 45811 45810\nf 45810 45811 46339\nf 45810 46339 45813\nf 45811 46337 46339\nf 45812 45814 46342\nf 45812 46342 46340\nf 45813 46339 46341\nf 45813 46341 45815\nf 45814 45816 46344\nf 45814 46344 46342\nf 45815 46341 46343\nf 45815 46343 45817\nf 45816 45818 46344\nf 45817 46343 46347\nf 45817 46347 45821\nf 45818 45819 45820\nf 45818 45820 46344\nf 45819 45822 46348\nf 45819 46348 45820\nf 45820 46345 46344\nf 45820 46348 46345\nf 45821 46347 46349\nf 45821 46349 45823\nf 45822 45824 46352\nf 45822 46350 46348\nf 45822 46352 46350\nf 45823 46349 46351\nf 45823 46351 45825\nf 45824 45826 46354\nf 45824 46354 46352\nf 45825 46351 46353\nf 45825 46353 45827\nf 45826 45828 46356\nf 45826 46356 46354\nf 45827 46353 46355\nf 45827 46355 45829\nf 45828 45830 46358\nf 45828 46358 46356\nf 45829 46355 46357\nf 45829 46357 45831\nf 45830 45832 46360\nf 45830 46360 46358\nf 45831 46357 46359\nf 45831 46359 45833\nf 45832 45834 46363\nf 45832 46363 46360\nf 45833 46359 46362\nf 45833 46362 45835\nf 45834 45836 46363\nf 45835 46362 46366\nf 45835 46366 45838\nf 45836 45837 46363\nf 45836 45839 45841\nf 45836 45841 45837\nf 45837 45841 46367\nf 45837 46364 46363\nf 45837 46367 46364\nf 45838 46366 46368\nf 45838 46368 45842\nf 45839 45840 45841\nf 45840 45843 46369\nf 45840 46369 45841\nf 45841 46369 46367\nf 45842 46368 46370\nf 45842 46370 45844\nf 45843 45845 46373\nf 45843 46371 46369\nf 45843 46373 46371\nf 45844 46370 46372\nf 45844 46372 45846\nf 45845 45847 46376\nf 45845 46376 46373\nf 45846 46372 46375\nf 45846 46375 45848\nf 45847 45849 46379\nf 45847 46379 46376\nf 45848 46375 46378\nf 45848 46378 45850\nf 45849 45851 46382\nf 45849 46382 46379\nf 45850 46378 46381\nf 45850 46381 45852\nf 45851 45853 46385\nf 45851 46385 46382\nf 45852 46381 46384\nf 45852 46384 45854\nf 45853 45855 46388\nf 45853 46388 46385\nf 45854 46384 46387\nf 45854 46387 45856\nf 45855 45857 46391\nf 45855 46391 46388\nf 45856 46387 46390\nf 45856 46390 45858\nf 45857 45859 46394\nf 45857 46394 46391\nf 45858 46390 46393\nf 45858 46393 45860\nf 45859 45862 46397\nf 45859 46397 46394\nf 45860 46393 46395\nf 45860 46395 45861\nf 45861 46395 46396\nf 45861 46396 46398\nf 45861 46398 45863\nf 45862 45864 46399\nf 45862 46399 46397\nf 45863 46398 45865\nf 45864 45866 46401\nf 45864 46401 46399\nf 45865 46398 46400\nf 45865 46400 45867\nf 45866 45868 46403\nf 45866 46403 46401\nf 45867 46400 46402\nf 45867 46402 45869\nf 45868 45870 46405\nf 45868 46405 46403\nf 45869 46402 46404\nf 45869 46404 45871\nf 45870 45872 46407\nf 45870 46407 46405\nf 45871 46404 46406\nf 45871 46406 45873\nf 45872 45874 46409\nf 45872 46409 46407\nf 45873 46406 46408\nf 45873 46408 45875\nf 45874 45876 46411\nf 45874 46411 46409\nf 45875 46408 46410\nf 45875 46410 45877\nf 45876 45878 46413\nf 45876 46413 46411\nf 45877 46410 46412\nf 45877 46412 45879\nf 45878 45880 46415\nf 45878 46415 46413\nf 45879 46412 46414\nf 45879 46414 45881\nf 45880 45882 46417\nf 45880 46417 46415\nf 45881 46414 46416\nf 45881 46416 45883\nf 45882 45884 46419\nf 45882 46419 46417\nf 45883 46416 46418\nf 45883 46418 45886\nf 45884 45885 46423\nf 45884 46423 46419\nf 45885 45887 45888\nf 45885 45888 46423\nf 45886 46418 46420\nf 45886 46420 45889\nf 45887 45892 46426\nf 45887 46426 45888\nf 45888 46424 46423\nf 45888 46426 46424\nf 45889 45891 45890\nf 45889 46420 45891\nf 45890 45891 46425\nf 45890 46425 45893\nf 45891 46420 46421\nf 45891 46421 46425\nf 45892 45894 46428\nf 45892 46428 46426\nf 45893 46425 46427\nf 45893 46427 45895\nf 45894 45896 46430\nf 45894 46430 46428\nf 45895 46427 46429\nf 45895 46429 45897\nf 45896 45898 46432\nf 45896 46432 46430\nf 45897 46429 46431\nf 45897 46431 45899\nf 45898 45900 46434\nf 45898 46434 46432\nf 45899 46431 46433\nf 45899 46433 45901\nf 45900 45902 46436\nf 45900 46436 46434\nf 45901 46433 46435\nf 45901 46435 45903\nf 45902 45904 46438\nf 45902 46438 46436\nf 45903 46435 46437\nf 45903 46437 45905\nf 45904 45906 46440\nf 45904 46440 46438\nf 45905 46437 46439\nf 45905 46439 45907\nf 45906 45908 46443\nf 45906 46443 46440\nf 45907 46439 46441\nf 45907 46441 45909\nf 45908 45912 46445\nf 45908 46445 46443\nf 45909 45911 45910\nf 45909 46441 45911\nf 45910 45911 46444\nf 45910 46444 45913\nf 45911 46441 46442\nf 45911 46442 46444\nf 45912 45914 46447\nf 45912 46447 46445\nf 45913 46444 46446\nf 45913 46446 45915\nf 45914 45916 46449\nf 45914 46449 46447\nf 45915 46446 46448\nf 45915 46448 45917\nf 45916 45918 46451\nf 45916 46451 46449\nf 45917 46448 46450\nf 45917 46450 45920\nf 45918 45919 46451\nf 45919 45921 46454\nf 45919 46452 46451\nf 45919 46454 46452\nf 45920 46450 46453\nf 45920 46453 45922\nf 45921 45923 46456\nf 45921 46456 46454\nf 45922 46453 46455\nf 45922 46455 45924\nf 45923 45926 46459\nf 45923 46459 46456\nf 45924 46455 46457\nf 45924 46457 45925\nf 45925 46457 46458\nf 45925 46458 46460\nf 45925 46460 45927\nf 45926 45928 46461\nf 45926 46461 46459\nf 45927 46460 45929\nf 45928 45930 46463\nf 45928 46463 46461\nf 45929 46460 46462\nf 45929 46462 45932\nf 45930 45931 46463\nf 45931 45933 46466\nf 45931 46464 46463\nf 45931 46466 46464\nf 45932 46462 46465\nf 45932 46465 45934\nf 45933 45935 46468\nf 45933 46468 46466\nf 45934 46465 46467\nf 45934 46467 45937\nf 45935 45936 46468\nf 45936 45938 46471\nf 45936 46469 46468\nf 45936 46471 46469\nf 45937 46467 46470\nf 45937 46470 45940\nf 45938 45939 46471\nf 45939 45941 46475\nf 45939 46472 46471\nf 45939 46475 46472\nf 45940 46470 46473\nf 45940 46473 45942\nf 45941 45946 46475\nf 45942 45944 45943\nf 45942 46473 46474\nf 45942 46474 45944\nf 45943 45944 46479\nf 45943 46479 45945\nf 45944 46474 46477\nf 45944 46477 46479\nf 45945 46479 45947\nf 45946 45947 45948\nf 45946 45948 46475\nf 45947 46478 45948\nf 45947 46479 46478\nf 45948 46476 46475\nf 45948 46478 46476\nf 45949 45950 46481\nf 45949 46481 46489\nf 45949 46489 45957\nf 45950 45951 46482\nf 45950 46482 46481\nf 45951 45952 46483\nf 45951 46483 46482\nf 45952 45953 46484\nf 45952 46484 46483\nf 45953 45954 46485\nf 45953 46485 46484\nf 45954 45959 46486\nf 45954 46486 46485\nf 45955 45956 46487\nf 45955 46487 46496\nf 45955 46496 45963\nf 45956 45958 46488\nf 45956 46488 46487\nf 45957 46489 45958\nf 45958 46489 46490\nf 45958 46490 46488\nf 45959 45960 46492\nf 45959 46491 46486\nf 45959 46492 46491\nf 45960 45961 46492\nf 45961 45962 46494\nf 45961 46494 46492\nf 45962 45965 46495\nf 45962 46495 46494\nf 45963 46496 45964\nf 45964 46496 46497\nf 45964 46497 46501\nf 45964 46501 45968\nf 45965 45966 46499\nf 45965 46498 46495\nf 45965 46499 46498\nf 45966 45967 46499\nf 45967 45969 46500\nf 45967 46500 46499\nf 45968 46501 45971\nf 45969 45970 46503\nf 45969 46502 46500\nf 45969 46503 46502\nf 45970 45973 46503\nf 45971 46501 46504\nf 45971 46504 46505\nf 45971 46505 45972\nf 45972 46505 45975\nf 45973 45974 46507\nf 45973 46506 46503\nf 45973 46507 46506\nf 45974 45978 46507\nf 45975 46505 46508\nf 45975 46508 46509\nf 45975 46509 45976\nf 45976 46509 46510\nf 45976 46510 45977\nf 45977 46510 45979\nf 45978 45982 46515\nf 45978 46511 46507\nf 45978 46515 46511\nf 45979 46510 46512\nf 45979 46512 46513\nf 45979 46513 45980\nf 45980 46513 46514\nf 45980 46514 45981\nf 45981 46514 45983\nf 45982 45986 46521\nf 45982 46521 46515\nf 45983 46514 46516\nf 45983 46516 46518\nf 45983 46518 45984\nf 45984 46518 46519\nf 45984 46519 45985\nf 45985 46519 46520\nf 45985 46520 45987\nf 45986 45994 46521\nf 45987 45989 45988\nf 45987 46520 45989\nf 45988 45989 46524\nf 45988 46524 45990\nf 45989 46520 46523\nf 45989 46523 46524\nf 45990 46524 46525\nf 45990 46525 45991\nf 45991 46525 46526\nf 45991 46526 45992\nf 45992 46526 45997\nf 45993 46001 46533\nf 45993 46528 45995\nf 45993 46533 46528\nf 45994 45995 45996\nf 45994 45996 46521\nf 45995 46527 45996\nf 45995 46528 46527\nf 45996 46522 46521\nf 45996 46527 46522\nf 45997 46526 46529\nf 45997 46529 46530\nf 45997 46530 45998\nf 45998 46530 46531\nf 45998 46531 45999\nf 45999 46531 46532\nf 45999 46532 46000\nf 46000 46532 46534\nf 46000 46534 46002\nf 46001 46002 46533\nf 46002 46534 46533\nf 46003 46004 46535\nf 46003 46535 46543\nf 46003 46543 46011\nf 46004 46005 46536\nf 46004 46536 46535\nf 46005 46012 46537\nf 46005 46537 46536\nf 46006 46007 46538\nf 46006 46538 46545\nf 46006 46545 46013\nf 46007 46008 46539\nf 46007 46539 46538\nf 46008 46009 46540\nf 46008 46540 46539\nf 46009 46010 46541\nf 46009 46541 46540\nf 46010 46014 46542\nf 46010 46542 46541\nf 46011 46543 46015\nf 46012 46017 46550\nf 46012 46544 46537\nf 46012 46550 46544\nf 46013 46545 46019\nf 46014 46021 46546\nf 46014 46546 46542\nf 46015 46543 46548\nf 46015 46548 46016\nf 46016 46548 46549\nf 46016 46549 46556\nf 46016 46556 46024\nf 46017 46018 46551\nf 46017 46551 46550\nf 46018 46025 46551\nf 46019 46545 46552\nf 46019 46552 46020\nf 46020 46552 46553\nf 46020 46553 46558\nf 46020 46558 46026\nf 46021 46022 46023\nf 46021 46023 46547\nf 46021 46547 46546\nf 46022 46027 46023\nf 46023 46027 46554\nf 46023 46554 46547\nf 46024 46556 46028\nf 46025 46029 46561\nf 46025 46557 46551\nf 46025 46561 46557\nf 46026 46558 46030\nf 46027 46031 46564\nf 46027 46559 46554\nf 46027 46564 46559\nf 46028 46556 46560\nf 46028 46560 46032\nf 46029 46033 46566\nf 46029 46566 46561\nf 46030 46558 46562\nf 46030 46562 46034\nf 46031 46035 46568\nf 46031 46568 46564\nf 46032 46560 46565\nf 46032 46565 46037\nf 46033 46038 46571\nf 46033 46571 46566\nf 46034 46562 46567\nf 46034 46567 46039\nf 46035 46036 46569\nf 46035 46569 46568\nf 46036 46040 46569\nf 46037 46565 46570\nf 46037 46570 46041\nf 46038 46042 46575\nf 46038 46575 46571\nf 46039 46567 46572\nf 46039 46572 46043\nf 46040 46044 46577\nf 46040 46573 46569\nf 46040 46577 46573\nf 46041 46570 46574\nf 46041 46574 46045\nf 46042 46046 46579\nf 46042 46579 46575\nf 46043 46572 46576\nf 46043 46576 46047\nf 46044 46048 46581\nf 46044 46581 46577\nf 46045 46574 46578\nf 46045 46578 46049\nf 46046 46050 46583\nf 46046 46583 46579\nf 46047 46576 46580\nf 46047 46580 46052\nf 46048 46053 46585\nf 46048 46585 46581\nf 46049 46578 46582\nf 46049 46582 46054\nf 46050 46051 46056\nf 46050 46056 46587\nf 46050 46587 46583\nf 46051 46055 46056\nf 46052 46580 46584\nf 46052 46584 46057\nf 46053 46058 46590\nf 46053 46590 46585\nf 46054 46582 46586\nf 46054 46586 46059\nf 46055 46060 46592\nf 46055 46588 46056\nf 46055 46592 46588\nf 46056 46588 46587\nf 46057 46584 46589\nf 46057 46589 46067\nf 46058 46069 46601\nf 46058 46601 46590\nf 46059 46586 46591\nf 46059 46591 46071\nf 46060 46061 46593\nf 46060 46593 46592\nf 46061 46062 46593\nf 46062 46063 46594\nf 46062 46594 46593\nf 46063 46064 46595\nf 46063 46595 46594\nf 46064 46072 46596\nf 46064 46596 46595\nf 46065 46066 46597\nf 46065 46597 46685\nf 46065 46685 46154\nf 46066 46068 46598\nf 46066 46598 46597\nf 46067 46589 46599\nf 46067 46599 46068\nf 46068 46599 46600\nf 46068 46600 46598\nf 46069 46070 46687\nf 46069 46687 46601\nf 46070 46156 46157\nf 46070 46157 46687\nf 46071 46591 46602\nf 46071 46602 46158\nf 46072 46073 46604\nf 46072 46603 46596\nf 46072 46604 46603\nf 46073 46074 46604\nf 46074 46075 46605\nf 46074 46605 46604\nf 46075 46076 46606\nf 46075 46606 46605\nf 46076 46077 46607\nf 46076 46607 46606\nf 46077 46078 46608\nf 46077 46608 46607\nf 46078 46079 46609\nf 46078 46609 46608\nf 46079 46080 46610\nf 46079 46610 46609\nf 46080 46081 46611\nf 46080 46611 46610\nf 46081 46082 46612\nf 46081 46612 46611\nf 46082 46083 46613\nf 46082 46613 46612\nf 46083 46084 46614\nf 46083 46614 46613\nf 46084 46085 46615\nf 46084 46615 46614\nf 46085 46086 46616\nf 46085 46616 46615\nf 46086 46087 46617\nf 46086 46617 46616\nf 46087 46088 46618\nf 46087 46618 46617\nf 46088 46089 46619\nf 46088 46619 46618\nf 46089 46090 46620\nf 46089 46620 46619\nf 46090 46091 46621\nf 46090 46621 46620\nf 46091 46092 46622\nf 46091 46622 46621\nf 46092 46093 46623\nf 46092 46623 46622\nf 46093 46094 46624\nf 46093 46624 46623\nf 46094 46095 46625\nf 46094 46625 46624\nf 46095 46096 46626\nf 46095 46626 46625\nf 46096 46097 46627\nf 46096 46627 46626\nf 46097 46098 46628\nf 46097 46628 46627\nf 46098 46099 46629\nf 46098 46629 46628\nf 46099 46100 46630\nf 46099 46630 46629\nf 46100 46101 46631\nf 46100 46631 46630\nf 46101 46102 46632\nf 46101 46632 46631\nf 46102 46103 46633\nf 46102 46633 46632\nf 46103 46104 46634\nf 46103 46634 46633\nf 46104 46105 46635\nf 46104 46635 46634\nf 46105 46106 46636\nf 46105 46636 46635\nf 46106 46107 46637\nf 46106 46637 46636\nf 46107 46108 46638\nf 46107 46638 46637\nf 46108 46109 46639\nf 46108 46639 46638\nf 46109 46110 46640\nf 46109 46640 46639\nf 46110 46111 46641\nf 46110 46641 46640\nf 46111 46112 46642\nf 46111 46642 46641\nf 46112 46113 46643\nf 46112 46643 46642\nf 46113 46114 46644\nf 46113 46644 46643\nf 46114 46115 46645\nf 46114 46645 46644\nf 46115 46116 46646\nf 46115 46646 46645\nf 46116 46117 46647\nf 46116 46647 46646\nf 46117 46118 46648\nf 46117 46648 46647\nf 46118 46119 46649\nf 46118 46649 46648\nf 46119 46120 46650\nf 46119 46650 46649\nf 46120 46121 46651\nf 46120 46651 46650\nf 46121 46122 46652\nf 46121 46652 46651\nf 46122 46123 46653\nf 46122 46653 46652\nf 46123 46124 46654\nf 46123 46654 46653\nf 46124 46125 46655\nf 46124 46655 46654\nf 46125 46126 46656\nf 46125 46656 46655\nf 46126 46127 46657\nf 46126 46657 46656\nf 46127 46128 46658\nf 46127 46658 46657\nf 46128 46129 46659\nf 46128 46659 46658\nf 46129 46130 46660\nf 46129 46660 46659\nf 46130 46131 46661\nf 46130 46661 46660\nf 46131 46132 46662\nf 46131 46662 46661\nf 46132 46133 46663\nf 46132 46663 46662\nf 46133 46134 46664\nf 46133 46664 46663\nf 46134 46135 46665\nf 46134 46665 46664\nf 46135 46136 46666\nf 46135 46666 46665\nf 46136 46137 46667\nf 46136 46667 46666\nf 46137 46138 46668\nf 46137 46668 46667\nf 46138 46139 46669\nf 46138 46669 46668\nf 46139 46140 46670\nf 46139 46670 46669\nf 46140 46141 46671\nf 46140 46671 46670\nf 46141 46142 46672\nf 46141 46672 46671\nf 46142 46143 46673\nf 46142 46673 46672\nf 46143 46144 46674\nf 46143 46674 46673\nf 46144 46145 46675\nf 46144 46675 46674\nf 46145 46146 46676\nf 46145 46676 46675\nf 46146 46147 46677\nf 46146 46677 46676\nf 46147 46148 46678\nf 46147 46678 46677\nf 46148 46149 46679\nf 46148 46679 46678\nf 46149 46150 46680\nf 46149 46680 46679\nf 46150 46151 46681\nf 46150 46681 46680\nf 46151 46152 46682\nf 46151 46682 46681\nf 46152 46153 46683\nf 46152 46683 46682\nf 46153 46155 46684\nf 46153 46684 46683\nf 46154 46685 46155\nf 46155 46685 46686\nf 46155 46686 46684\nf 46156 46159 46690\nf 46156 46690 46157\nf 46157 46688 46687\nf 46157 46690 46688\nf 46158 46602 46689\nf 46158 46689 46160\nf 46159 46162 46693\nf 46159 46693 46690\nf 46160 46689 46691\nf 46160 46691 46692\nf 46160 46692 46161\nf 46161 46692 46163\nf 46162 46164 46695\nf 46162 46695 46693\nf 46163 46692 46694\nf 46163 46694 46166\nf 46164 46165 46695\nf 46165 46168 46698\nf 46165 46696 46695\nf 46165 46698 46696\nf 46166 46171 46167\nf 46166 46694 46697\nf 46166 46697 46700\nf 46166 46700 46171\nf 46167 46171 46170\nf 46168 46169 46698\nf 46169 46176 46706\nf 46169 46699 46698\nf 46169 46706 46699\nf 46170 46171 46701\nf 46170 46701 46708\nf 46170 46708 46178\nf 46171 46700 46701\nf 46172 46268 46797\nf 46172 46702 46703\nf 46172 46703 46173\nf 46172 46797 46702\nf 46173 46703 46704\nf 46173 46704 46174\nf 46174 46704 46705\nf 46174 46705 46175\nf 46175 46705 46707\nf 46175 46707 46177\nf 46176 46177 46706\nf 46177 46707 46706\nf 46178 46708 46709\nf 46178 46709 46179\nf 46179 46709 46710\nf 46179 46710 46180\nf 46180 46710 46270\nf 46181 46273 46275\nf 46181 46275 46803\nf 46181 46711 46182\nf 46181 46803 46711\nf 46182 46711 46712\nf 46182 46712 46183\nf 46183 46712 46713\nf 46183 46713 46184\nf 46184 46713 46714\nf 46184 46714 46185\nf 46185 46714 46715\nf 46185 46715 46186\nf 46186 46715 46716\nf 46186 46716 46187\nf 46187 46716 46717\nf 46187 46717 46188\nf 46188 46717 46718\nf 46188 46718 46189\nf 46189 46718 46719\nf 46189 46719 46190\nf 46190 46719 46720\nf 46190 46720 46191\nf 46191 46720 46721\nf 46191 46721 46192\nf 46192 46721 46722\nf 46192 46722 46193\nf 46193 46722 46723\nf 46193 46723 46194\nf 46194 46723 46724\nf 46194 46724 46195\nf 46195 46724 46725\nf 46195 46725 46196\nf 46196 46725 46726\nf 46196 46726 46197\nf 46197 46726 46727\nf 46197 46727 46198\nf 46198 46727 46728\nf 46198 46728 46199\nf 46199 46728 46729\nf 46199 46729 46200\nf 46200 46729 46730\nf 46200 46730 46201\nf 46201 46730 46731\nf 46201 46731 46202\nf 46202 46731 46732\nf 46202 46732 46203\nf 46203 46732 46733\nf 46203 46733 46204\nf 46204 46733 46734\nf 46204 46734 46205\nf 46205 46734 46735\nf 46205 46735 46206\nf 46206 46735 46736\nf 46206 46736 46207\nf 46207 46736 46737\nf 46207 46737 46208\nf 46208 46737 46738\nf 46208 46738 46209\nf 46209 46738 46739\nf 46209 46739 46210\nf 46210 46739 46740\nf 46210 46740 46211\nf 46211 46740 46741\nf 46211 46741 46212\nf 46212 46741 46742\nf 46212 46742 46213\nf 46213 46742 46743\nf 46213 46743 46214\nf 46214 46743 46744\nf 46214 46744 46215\nf 46215 46744 46745\nf 46215 46745 46216\nf 46216 46745 46746\nf 46216 46746 46217\nf 46217 46746 46747\nf 46217 46747 46218\nf 46218 46747 46748\nf 46218 46748 46219\nf 46219 46748 46749\nf 46219 46749 46220\nf 46220 46749 46750\nf 46220 46750 46221\nf 46221 46750 46751\nf 46221 46751 46222\nf 46222 46751 46752\nf 46222 46752 46223\nf 46223 46752 46753\nf 46223 46753 46224\nf 46224 46753 46754\nf 46224 46754 46225\nf 46225 46754 46755\nf 46225 46755 46226\nf 46226 46755 46756\nf 46226 46756 46227\nf 46227 46756 46757\nf 46227 46757 46228\nf 46228 46757 46758\nf 46228 46758 46229\nf 46229 46758 46759\nf 46229 46759 46230\nf 46230 46759 46760\nf 46230 46760 46231\nf 46231 46760 46761\nf 46231 46761 46232\nf 46232 46761 46762\nf 46232 46762 46233\nf 46233 46762 46763\nf 46233 46763 46234\nf 46234 46763 46764\nf 46234 46764 46235\nf 46235 46764 46765\nf 46235 46765 46236\nf 46236 46765 46766\nf 46236 46766 46237\nf 46237 46766 46767\nf 46237 46767 46238\nf 46238 46767 46768\nf 46238 46768 46239\nf 46239 46768 46769\nf 46239 46769 46240\nf 46240 46769 46770\nf 46240 46770 46241\nf 46241 46770 46771\nf 46241 46771 46242\nf 46242 46771 46772\nf 46242 46772 46243\nf 46243 46772 46773\nf 46243 46773 46244\nf 46244 46773 46774\nf 46244 46774 46245\nf 46245 46774 46775\nf 46245 46775 46246\nf 46246 46775 46776\nf 46246 46776 46247\nf 46247 46776 46777\nf 46247 46777 46248\nf 46248 46777 46778\nf 46248 46778 46249\nf 46249 46778 46779\nf 46249 46779 46250\nf 46250 46779 46780\nf 46250 46780 46251\nf 46251 46780 46781\nf 46251 46781 46252\nf 46252 46781 46782\nf 46252 46782 46253\nf 46253 46782 46783\nf 46253 46783 46254\nf 46254 46783 46784\nf 46254 46784 46255\nf 46255 46784 46785\nf 46255 46785 46256\nf 46256 46785 46786\nf 46256 46786 46257\nf 46257 46786 46787\nf 46257 46787 46258\nf 46258 46787 46788\nf 46258 46788 46259\nf 46259 46788 46789\nf 46259 46789 46260\nf 46260 46789 46790\nf 46260 46790 46261\nf 46261 46790 46791\nf 46261 46791 46262\nf 46262 46791 46792\nf 46262 46792 46263\nf 46263 46792 46793\nf 46263 46793 46264\nf 46264 46793 46794\nf 46264 46794 46265\nf 46265 46794 46795\nf 46265 46795 46266\nf 46266 46795 46796\nf 46266 46796 46267\nf 46267 46796 46798\nf 46267 46798 46269\nf 46268 46269 46797\nf 46269 46798 46797\nf 46270 46710 46799\nf 46270 46799 46800\nf 46270 46800 46271\nf 46271 46800 46801\nf 46271 46801 46272\nf 46272 46801 46802\nf 46272 46802 46274\nf 46273 46274 46275\nf 46274 46802 46804\nf 46274 46804 46275\nf 46275 46804 46803\nf 46276 46277 46805\nf 46276 46805 46809\nf 46276 46809 46280\nf 46277 46278 46806\nf 46277 46806 46805\nf 46278 46279 46807\nf 46278 46807 46806\nf 46279 46282 46808\nf 46279 46808 46807\nf 46280 46809 46281\nf 46281 46809 46810\nf 46281 46810 46814\nf 46281 46814 46283\nf 46282 46284 46815\nf 46282 46812 46808\nf 46282 46815 46812\nf 46283 46814 46285\nf 46284 46287 46818\nf 46284 46818 46815\nf 46285 46814 46816\nf 46285 46816 46286\nf 46286 46816 46817\nf 46286 46817 46820\nf 46286 46820 46289\nf 46287 46288 46819\nf 46287 46819 46818\nf 46288 46290 46819\nf 46289 46820 46291\nf 46290 46292 46823\nf 46290 46821 46819\nf 46290 46823 46821\nf 46291 46820 46822\nf 46291 46822 46293\nf 46292 46294 46825\nf 46292 46825 46823\nf 46293 46822 46824\nf 46293 46824 46295\nf 46294 46296 46827\nf 46294 46827 46825\nf 46295 46824 46826\nf 46295 46826 46297\nf 46296 46298 46829\nf 46296 46829 46827\nf 46297 46826 46828\nf 46297 46828 46299\nf 46298 46300 46831\nf 46298 46831 46829\nf 46299 46828 46830\nf 46299 46830 46301\nf 46300 46302 46833\nf 46300 46833 46831\nf 46301 46830 46832\nf 46301 46832 46303\nf 46302 46304 46835\nf 46302 46835 46833\nf 46303 46832 46834\nf 46303 46834 46305\nf 46304 46306 46837\nf 46304 46837 46835\nf 46305 46834 46836\nf 46305 46836 46307\nf 46306 46308 46839\nf 46306 46839 46837\nf 46307 46836 46838\nf 46307 46838 46309\nf 46308 46310 46841\nf 46308 46841 46839\nf 46309 46838 46840\nf 46309 46840 46311\nf 46310 46312 46843\nf 46310 46843 46841\nf 46311 46840 46842\nf 46311 46842 46313\nf 46312 46314 46845\nf 46312 46845 46843\nf 46313 46842 46844\nf 46313 46844 46315\nf 46314 46317 46848\nf 46314 46848 46845\nf 46315 46844 46846\nf 46315 46846 46847\nf 46315 46847 46316\nf 46316 46847 46318\nf 46317 46319 46851\nf 46317 46851 46848\nf 46318 46847 46849\nf 46318 46849 46320\nf 46319 46321 46853\nf 46319 46853 46851\nf 46320 46849 46852\nf 46320 46852 46323\nf 46321 46322 46853\nf 46322 46324 46857\nf 46322 46854 46853\nf 46322 46857 46854\nf 46323 46852 46856\nf 46323 46856 46325\nf 46324 46326 46859\nf 46324 46859 46857\nf 46325 46856 46858\nf 46325 46858 46327\nf 46326 46328 46861\nf 46326 46861 46859\nf 46327 46858 46860\nf 46327 46860 46329\nf 46328 46330 46863\nf 46328 46863 46861\nf 46329 46860 46862\nf 46329 46862 46331\nf 46330 46332 46866\nf 46330 46866 46863\nf 46331 46862 46864\nf 46331 46864 46333\nf 46332 46336 46868\nf 46332 46868 46866\nf 46333 46335 46334\nf 46333 46864 46335\nf 46334 46335 46867\nf 46334 46867 46337\nf 46335 46864 46865\nf 46335 46865 46867\nf 46336 46338 46870\nf 46336 46870 46868\nf 46337 46867 46869\nf 46337 46869 46339\nf 46338 46340 46872\nf 46338 46872 46870\nf 46339 46869 46871\nf 46339 46871 46341\nf 46340 46342 46874\nf 46340 46874 46872\nf 46341 46871 46873\nf 46341 46873 46343\nf 46342 46344 46874\nf 46343 46873 46877\nf 46343 46877 46347\nf 46344 46345 46346\nf 46344 46346 46874\nf 46345 46348 46878\nf 46345 46878 46346\nf 46346 46875 46874\nf 46346 46878 46875\nf 46347 46877 46879\nf 46347 46879 46349\nf 46348 46350 46882\nf 46348 46880 46878\nf 46348 46882 46880\nf 46349 46879 46881\nf 46349 46881 46351\nf 46350 46352 46884\nf 46350 46884 46882\nf 46351 46881 46883\nf 46351 46883 46353\nf 46352 46354 46886\nf 46352 46886 46884\nf 46353 46883 46885\nf 46353 46885 46355\nf 46354 46356 46889\nf 46354 46889 46886\nf 46355 46885 46888\nf 46355 46888 46357\nf 46356 46358 46892\nf 46356 46892 46889\nf 46357 46888 46891\nf 46357 46891 46359\nf 46358 46360 46892\nf 46359 46891 46895\nf 46359 46895 46362\nf 46360 46361 46892\nf 46360 46363 46365\nf 46360 46365 46361\nf 46361 46365 46896\nf 46361 46893 46892\nf 46361 46896 46893\nf 46362 46895 46897\nf 46362 46897 46366\nf 46363 46364 46365\nf 46364 46367 46899\nf 46364 46899 46365\nf 46365 46899 46896\nf 46366 46897 46900\nf 46366 46900 46368\nf 46367 46369 46906\nf 46367 46902 46899\nf 46367 46906 46902\nf 46368 46900 46904\nf 46368 46904 46370\nf 46369 46371 46910\nf 46369 46910 46906\nf 46370 46904 46908\nf 46370 46908 46372\nf 46371 46373 46910\nf 46372 46908 46913\nf 46372 46913 46375\nf 46373 46374 46910\nf 46373 46376 46377\nf 46373 46377 46374\nf 46374 46377 46916\nf 46374 46911 46910\nf 46374 46916 46911\nf 46375 46913 46918\nf 46375 46918 46378\nf 46376 46379 46380\nf 46376 46380 46377\nf 46377 46380 46921\nf 46377 46921 46916\nf 46378 46918 46923\nf 46378 46923 46381\nf 46379 46382 46383\nf 46379 46383 46380\nf 46380 46383 46926\nf 46380 46926 46921\nf 46381 46923 46928\nf 46381 46928 46384\nf 46382 46385 46386\nf 46382 46386 46383\nf 46383 46386 46930\nf 46383 46930 46926\nf 46384 46928 46931\nf 46384 46931 46387\nf 46385 46388 46389\nf 46385 46389 46386\nf 46386 46389 46932\nf 46386 46932 46930\nf 46387 46931 46933\nf 46387 46933 46390\nf 46388 46391 46392\nf 46388 46392 46389\nf 46389 46392 46934\nf 46389 46934 46932\nf 46390 46933 46935\nf 46390 46935 46393\nf 46391 46394 46939\nf 46391 46937 46392\nf 46391 46939 46937\nf 46392 46936 46934\nf 46392 46937 46936\nf 46393 46935 46938\nf 46393 46938 46395\nf 46394 46397 46943\nf 46394 46943 46939\nf 46395 46938 46941\nf 46395 46941 46396\nf 46396 46941 46942\nf 46396 46942 46944\nf 46396 46944 46398\nf 46397 46399 46946\nf 46397 46946 46943\nf 46398 46944 46400\nf 46399 46401 46948\nf 46399 46948 46946\nf 46400 46944 46947\nf 46400 46947 46402\nf 46401 46403 46950\nf 46401 46950 46948\nf 46402 46947 46949\nf 46402 46949 46404\nf 46403 46405 46952\nf 46403 46952 46950\nf 46404 46949 46951\nf 46404 46951 46406\nf 46405 46407 46954\nf 46405 46954 46952\nf 46406 46951 46953\nf 46406 46953 46408\nf 46407 46409 46956\nf 46407 46956 46954\nf 46408 46953 46955\nf 46408 46955 46410\nf 46409 46411 46958\nf 46409 46958 46956\nf 46410 46955 46957\nf 46410 46957 46412\nf 46411 46413 46960\nf 46411 46960 46958\nf 46412 46957 46959\nf 46412 46959 46414\nf 46413 46415 46962\nf 46413 46962 46960\nf 46414 46959 46961\nf 46414 46961 46416\nf 46415 46417 46964\nf 46415 46964 46962\nf 46416 46961 46963\nf 46416 46963 46418\nf 46417 46419 46968\nf 46417 46968 46964\nf 46418 46963 46965\nf 46418 46965 46420\nf 46419 46423 46970\nf 46419 46970 46968\nf 46420 46422 46421\nf 46420 46965 46422\nf 46421 46422 46969\nf 46421 46969 46425\nf 46422 46965 46966\nf 46422 46966 46969\nf 46423 46424 46970\nf 46424 46426 46973\nf 46424 46971 46970\nf 46424 46973 46971\nf 46425 46969 46972\nf 46425 46972 46427\nf 46426 46428 46976\nf 46426 46976 46973\nf 46427 46972 46975\nf 46427 46975 46429\nf 46428 46430 46978\nf 46428 46978 46976\nf 46429 46975 46977\nf 46429 46977 46431\nf 46430 46432 46980\nf 46430 46980 46978\nf 46431 46977 46979\nf 46431 46979 46433\nf 46432 46434 46982\nf 46432 46982 46980\nf 46433 46979 46981\nf 46433 46981 46435\nf 46434 46436 46984\nf 46434 46984 46982\nf 46435 46981 46983\nf 46435 46983 46437\nf 46436 46438 46986\nf 46436 46986 46984\nf 46437 46983 46985\nf 46437 46985 46439\nf 46438 46440 46988\nf 46438 46988 46986\nf 46439 46985 46987\nf 46439 46987 46441\nf 46440 46443 46992\nf 46440 46992 46988\nf 46441 46987 46989\nf 46441 46989 46442\nf 46442 46989 46990\nf 46442 46990 46993\nf 46442 46993 46444\nf 46443 46445 46994\nf 46443 46994 46992\nf 46444 46993 46446\nf 46445 46447 46996\nf 46445 46996 46994\nf 46446 46993 46995\nf 46446 46995 46448\nf 46447 46449 46998\nf 46447 46998 46996\nf 46448 46995 46997\nf 46448 46997 46450\nf 46449 46451 47000\nf 46449 47000 46998\nf 46450 46997 46999\nf 46450 46999 46453\nf 46451 46452 47000\nf 46452 46454 47003\nf 46452 47001 47000\nf 46452 47003 47001\nf 46453 46999 47002\nf 46453 47002 46455\nf 46454 46456 47005\nf 46454 47005 47003\nf 46455 47002 47004\nf 46455 47004 46457\nf 46456 46459 47008\nf 46456 47008 47005\nf 46457 47004 47006\nf 46457 47006 46458\nf 46458 47006 47007\nf 46458 47007 47009\nf 46458 47009 46460\nf 46459 46461 47010\nf 46459 47010 47008\nf 46460 47009 46462\nf 46461 46463 47012\nf 46461 47012 47010\nf 46462 47009 47011\nf 46462 47011 46465\nf 46463 46464 47012\nf 46464 46466 47016\nf 46464 47013 47012\nf 46464 47016 47013\nf 46465 47011 47015\nf 46465 47015 46467\nf 46466 46468 47018\nf 46466 47018 47016\nf 46467 47015 47017\nf 46467 47017 46470\nf 46468 46469 47018\nf 46469 46471 47021\nf 46469 47019 47018\nf 46469 47021 47019\nf 46470 47017 47020\nf 46470 47020 46473\nf 46471 46472 47021\nf 46472 46475 47026\nf 46472 47022 47021\nf 46472 47026 47022\nf 46473 47020 47023\nf 46473 47023 47024\nf 46473 47024 46474\nf 46474 47024 47025\nf 46474 47025 46477\nf 46475 46476 47026\nf 46476 46478 46480\nf 46476 46480 47025\nf 46476 47025 47027\nf 46476 47027 47026\nf 46477 46480 46479\nf 46477 47025 46480\nf 46478 46479 46480\nf 46481 46482 47028\nf 46481 47028 47037\nf 46481 47037 46489\nf 46482 46483 47029\nf 46482 47029 47028\nf 46483 46484 47030\nf 46483 47030 47029\nf 46484 46485 47031\nf 46484 47031 47030\nf 46485 46486 47032\nf 46485 47032 47031\nf 46486 46491 47034\nf 46486 47033 47032\nf 46486 47034 47033\nf 46487 46488 47035\nf 46487 47035 47042\nf 46487 47042 46496\nf 46488 46490 47036\nf 46488 47036 47035\nf 46489 47037 46490\nf 46490 47037 47038\nf 46490 47038 47036\nf 46491 46492 46493\nf 46491 46493 47034\nf 46492 46494 47040\nf 46492 47040 46493\nf 46493 47039 47034\nf 46493 47040 47039\nf 46494 46495 47040\nf 46495 46498 47041\nf 46495 47041 47040\nf 46496 47042 46497\nf 46497 47042 47043\nf 46497 47043 47047\nf 46497 47047 46501\nf 46498 46499 47045\nf 46498 47044 47041\nf 46498 47045 47044\nf 46499 46500 47045\nf 46500 46502 47046\nf 46500 47046 47045\nf 46501 47047 46504\nf 46502 46503 47049\nf 46502 47048 47046\nf 46502 47049 47048\nf 46503 46506 47049\nf 46504 47047 47050\nf 46504 47050 47051\nf 46504 47051 46505\nf 46505 47051 46508\nf 46506 46507 47053\nf 46506 47052 47049\nf 46506 47053 47052\nf 46507 46511 47053\nf 46508 47051 47054\nf 46508 47054 47056\nf 46508 47056 46509\nf 46509 47056 47057\nf 46509 47057 46510\nf 46510 47057 46512\nf 46511 46515 47062\nf 46511 47058 47053\nf 46511 47062 47058\nf 46512 47057 47059\nf 46512 47059 47061\nf 46512 47061 46513\nf 46513 47061 46514\nf 46514 46517 46516\nf 46514 47061 46517\nf 46515 46521 47068\nf 46515 47068 47062\nf 46516 46517 47064\nf 46516 47064 46518\nf 46517 47061 47063\nf 46517 47063 47064\nf 46518 47064 47065\nf 46518 47065 47066\nf 46518 47066 46519\nf 46519 47066 47067\nf 46519 47067 46520\nf 46520 47067 46523\nf 46521 46522 47068\nf 46522 46527 47074\nf 46522 47069 47068\nf 46522 47074 47069\nf 46523 47067 47070\nf 46523 47070 47071\nf 46523 47071 46524\nf 46524 47071 47072\nf 46524 47072 46525\nf 46525 47072 47073\nf 46525 47073 46526\nf 46526 47073 46529\nf 46527 46528 47074\nf 46528 46533 47080\nf 46528 47075 47074\nf 46528 47080 47075\nf 46529 47073 47076\nf 46529 47076 47077\nf 46529 47077 46530\nf 46530 47077 47078\nf 46530 47078 46531\nf 46531 47078 47079\nf 46531 47079 46532\nf 46532 47079 47081\nf 46532 47081 46534\nf 46533 46534 47080\nf 46534 47081 47080\nf 46535 46536 47082\nf 46535 47082 47090\nf 46535 47090 46543\nf 46536 46537 47083\nf 46536 47083 47082\nf 46537 46544 47084\nf 46537 47084 47083\nf 46538 46539 47085\nf 46538 47085 47092\nf 46538 47092 46545\nf 46539 46540 47086\nf 46539 47086 47085\nf 46540 46541 47087\nf 46540 47087 47086\nf 46541 46542 47088\nf 46541 47088 47087\nf 46542 46546 47089\nf 46542 47089 47088\nf 46543 47090 46548\nf 46544 46550 47096\nf 46544 47091 47084\nf 46544 47096 47091\nf 46545 47092 46552\nf 46546 46547 46555\nf 46546 46555 47100\nf 46546 47093 47089\nf 46546 47100 47093\nf 46547 46554 46555\nf 46548 47090 47094\nf 46548 47094 46549\nf 46549 47094 47095\nf 46549 47095 47102\nf 46549 47102 46556\nf 46550 46551 47097\nf 46550 47097 47096\nf 46551 46557 47097\nf 46552 47092 47098\nf 46552 47098 46553\nf 46553 47098 47099\nf 46553 47099 47105\nf 46553 47105 46558\nf 46554 46559 47107\nf 46554 47101 46555\nf 46554 47107 47101\nf 46555 47101 47100\nf 46556 47102 46560\nf 46557 46561 47109\nf 46557 47104 47097\nf 46557 47109 47104\nf 46558 47105 46562\nf 46559 46564 47112\nf 46559 47112 47107\nf 46560 47102 47108\nf 46560 47108 46565\nf 46561 46566 47114\nf 46561 47114 47109\nf 46562 46563 47115\nf 46562 47105 47106\nf 46562 47106 46563\nf 46562 47115 46567\nf 46563 47106 47110\nf 46563 47110 47111\nf 46563 47111 47115\nf 46564 46568 47116\nf 46564 47116 47112\nf 46565 47108 47113\nf 46565 47113 46570\nf 46566 46571 47119\nf 46566 47119 47114\nf 46567 47115 46572\nf 46568 46569 47117\nf 46568 47117 47116\nf 46569 46573 47117\nf 46570 47113 47118\nf 46570 47118 46574\nf 46571 46575 47123\nf 46571 47123 47119\nf 46572 47115 47120\nf 46572 47120 46576\nf 46573 46577 47125\nf 46573 47121 47117\nf 46573 47125 47121\nf 46574 47118 47122\nf 46574 47122 46578\nf 46575 46579 47127\nf 46575 47127 47123\nf 46576 47120 47124\nf 46576 47124 46580\nf 46577 46581 47129\nf 46577 47129 47125\nf 46578 47122 47126\nf 46578 47126 46582\nf 46579 46583 47131\nf 46579 47131 47127\nf 46580 47124 47128\nf 46580 47128 46584\nf 46581 46585 47133\nf 46581 47133 47129\nf 46582 47126 47130\nf 46582 47130 46586\nf 46583 46587 47135\nf 46583 47135 47131\nf 46584 47128 47132\nf 46584 47132 46589\nf 46585 46590 47138\nf 46585 47138 47133\nf 46586 47130 47134\nf 46586 47134 46591\nf 46587 46588 47136\nf 46587 47136 47135\nf 46588 46592 47136\nf 46589 47132 47137\nf 46589 47137 46599\nf 46590 46601 47149\nf 46590 47149 47138\nf 46591 47134 47139\nf 46591 47139 46602\nf 46592 46593 47141\nf 46592 47140 47136\nf 46592 47141 47140\nf 46593 46594 47141\nf 46594 46595 47142\nf 46594 47142 47141\nf 46595 46596 47143\nf 46595 47143 47142\nf 46596 46603 47144\nf 46596 47144 47143\nf 46597 46598 47145\nf 46597 47145 47233\nf 46597 47233 46685\nf 46598 46600 47146\nf 46598 47146 47145\nf 46599 47137 47147\nf 46599 47147 46600\nf 46600 47147 47148\nf 46600 47148 47146\nf 46601 46687 47235\nf 46601 47235 47149\nf 46602 47139 47150\nf 46602 47150 46689\nf 46603 46604 47152\nf 46603 47151 47144\nf 46603 47152 47151\nf 46604 46605 47152\nf 46605 46606 47153\nf 46605 47153 47152\nf 46606 46607 47154\nf 46606 47154 47153\nf 46607 46608 47155\nf 46607 47155 47154\nf 46608 46609 47156\nf 46608 47156 47155\nf 46609 46610 47157\nf 46609 47157 47156\nf 46610 46611 47158\nf 46610 47158 47157\nf 46611 46612 47159\nf 46611 47159 47158\nf 46612 46613 47160\nf 46612 47160 47159\nf 46613 46614 47161\nf 46613 47161 47160\nf 46614 46615 47162\nf 46614 47162 47161\nf 46615 46616 47163\nf 46615 47163 47162\nf 46616 46617 47164\nf 46616 47164 47163\nf 46617 46618 47165\nf 46617 47165 47164\nf 46618 46619 47166\nf 46618 47166 47165\nf 46619 46620 47167\nf 46619 47167 47166\nf 46620 46621 47168\nf 46620 47168 47167\nf 46621 46622 47169\nf 46621 47169 47168\nf 46622 46623 47170\nf 46622 47170 47169\nf 46623 46624 47171\nf 46623 47171 47170\nf 46624 46625 47172\nf 46624 47172 47171\nf 46625 46626 47173\nf 46625 47173 47172\nf 46626 46627 47174\nf 46626 47174 47173\nf 46627 46628 47175\nf 46627 47175 47174\nf 46628 46629 47176\nf 46628 47176 47175\nf 46629 46630 47177\nf 46629 47177 47176\nf 46630 46631 47178\nf 46630 47178 47177\nf 46631 46632 47179\nf 46631 47179 47178\nf 46632 46633 47180\nf 46632 47180 47179\nf 46633 46634 47181\nf 46633 47181 47180\nf 46634 46635 47182\nf 46634 47182 47181\nf 46635 46636 47183\nf 46635 47183 47182\nf 46636 46637 47184\nf 46636 47184 47183\nf 46637 46638 47185\nf 46637 47185 47184\nf 46638 46639 47186\nf 46638 47186 47185\nf 46639 46640 47187\nf 46639 47187 47186\nf 46640 46641 47188\nf 46640 47188 47187\nf 46641 46642 47189\nf 46641 47189 47188\nf 46642 46643 47190\nf 46642 47190 47189\nf 46643 46644 47191\nf 46643 47191 47190\nf 46644 46645 47192\nf 46644 47192 47191\nf 46645 46646 47193\nf 46645 47193 47192\nf 46646 46647 47194\nf 46646 47194 47193\nf 46647 46648 47195\nf 46647 47195 47194\nf 46648 46649 47196\nf 46648 47196 47195\nf 46649 46650 47197\nf 46649 47197 47196\nf 46650 46651 47198\nf 46650 47198 47197\nf 46651 46652 47199\nf 46651 47199 47198\nf 46652 46653 47200\nf 46652 47200 47199\nf 46653 46654 47201\nf 46653 47201 47200\nf 46654 46655 47202\nf 46654 47202 47201\nf 46655 46656 47203\nf 46655 47203 47202\nf 46656 46657 47204\nf 46656 47204 47203\nf 46657 46658 47205\nf 46657 47205 47204\nf 46658 46659 47206\nf 46658 47206 47205\nf 46659 46660 47207\nf 46659 47207 47206\nf 46660 46661 47208\nf 46660 47208 47207\nf 46661 46662 47209\nf 46661 47209 47208\nf 46662 46663 47210\nf 46662 47210 47209\nf 46663 46664 47211\nf 46663 47211 47210\nf 46664 46665 47212\nf 46664 47212 47211\nf 46665 46666 47213\nf 46665 47213 47212\nf 46666 46667 47214\nf 46666 47214 47213\nf 46667 46668 47215\nf 46667 47215 47214\nf 46668 46669 47216\nf 46668 47216 47215\nf 46669 46670 47217\nf 46669 47217 47216\nf 46670 46671 47218\nf 46670 47218 47217\nf 46671 46672 47219\nf 46671 47219 47218\nf 46672 46673 47220\nf 46672 47220 47219\nf 46673 46674 47221\nf 46673 47221 47220\nf 46674 46675 47222\nf 46674 47222 47221\nf 46675 46676 47223\nf 46675 47223 47222\nf 46676 46677 47224\nf 46676 47224 47223\nf 46677 46678 47225\nf 46677 47225 47224\nf 46678 46679 47226\nf 46678 47226 47225\nf 46679 46680 47227\nf 46679 47227 47226\nf 46680 46681 47228\nf 46680 47228 47227\nf 46681 46682 47229\nf 46681 47229 47228\nf 46682 46683 47230\nf 46682 47230 47229\nf 46683 46684 47231\nf 46683 47231 47230\nf 46684 46686 47232\nf 46684 47232 47231\nf 46685 47233 46686\nf 46686 47233 47234\nf 46686 47234 47232\nf 46687 46688 47235\nf 46688 46690 47238\nf 46688 47236 47235\nf 46688 47238 47236\nf 46689 47150 47237\nf 46689 47237 46691\nf 46690 46693 47241\nf 46690 47241 47238\nf 46691 47237 47239\nf 46691 47239 47240\nf 46691 47240 46692\nf 46692 47240 46694\nf 46693 46695 47243\nf 46693 47243 47241\nf 46694 47240 47242\nf 46694 47242 46697\nf 46695 46696 47243\nf 46696 46698 47247\nf 46696 47244 47243\nf 46696 47247 47244\nf 46697 47242 47246\nf 46697 47246 46700\nf 46698 46699 47247\nf 46699 46706 47255\nf 46699 47248 47247\nf 46699 47255 47248\nf 46700 47246 47249\nf 46700 47249 47250\nf 46700 47250 46701\nf 46701 47250 46708\nf 46702 46797 47347\nf 46702 47251 47252\nf 46702 47252 46703\nf 46702 47347 47251\nf 46703 47252 47253\nf 46703 47253 46704\nf 46704 47253 47254\nf 46704 47254 46705\nf 46705 47254 47256\nf 46705 47256 46707\nf 46706 46707 47255\nf 46707 47256 47255\nf 46708 47250 47258\nf 46708 47258 47259\nf 46708 47259 46709\nf 46709 47259 47260\nf 46709 47260 46710\nf 46710 47260 46799\nf 46711 46803 47353\nf 46711 47261 47262\nf 46711 47262 46712\nf 46711 47353 47261\nf 46712 47262 47263\nf 46712 47263 46713\nf 46713 47263 47264\nf 46713 47264 46714\nf 46714 47264 47265\nf 46714 47265 46715\nf 46715 47265 47266\nf 46715 47266 46716\nf 46716 47266 47267\nf 46716 47267 46717\nf 46717 47267 47268\nf 46717 47268 46718\nf 46718 47268 47269\nf 46718 47269 46719\nf 46719 47269 47270\nf 46719 47270 46720\nf 46720 47270 47271\nf 46720 47271 46721\nf 46721 47271 47272\nf 46721 47272 46722\nf 46722 47272 47273\nf 46722 47273 46723\nf 46723 47273 47274\nf 46723 47274 46724\nf 46724 47274 47275\nf 46724 47275 46725\nf 46725 47275 47276\nf 46725 47276 46726\nf 46726 47276 47277\nf 46726 47277 46727\nf 46727 47277 47278\nf 46727 47278 46728\nf 46728 47278 47279\nf 46728 47279 46729\nf 46729 47279 47280\nf 46729 47280 46730\nf 46730 47280 47281\nf 46730 47281 46731\nf 46731 47281 47282\nf 46731 47282 46732\nf 46732 47282 47283\nf 46732 47283 46733\nf 46733 47283 47284\nf 46733 47284 46734\nf 46734 47284 47285\nf 46734 47285 46735\nf 46735 47285 47286\nf 46735 47286 46736\nf 46736 47286 47287\nf 46736 47287 46737\nf 46737 47287 47288\nf 46737 47288 46738\nf 46738 47288 47289\nf 46738 47289 46739\nf 46739 47289 47290\nf 46739 47290 46740\nf 46740 47290 47291\nf 46740 47291 46741\nf 46741 47291 47292\nf 46741 47292 46742\nf 46742 47292 47293\nf 46742 47293 46743\nf 46743 47293 47294\nf 46743 47294 46744\nf 46744 47294 47295\nf 46744 47295 46745\nf 46745 47295 47296\nf 46745 47296 46746\nf 46746 47296 47297\nf 46746 47297 46747\nf 46747 47297 47298\nf 46747 47298 46748\nf 46748 47298 47299\nf 46748 47299 46749\nf 46749 47299 47300\nf 46749 47300 46750\nf 46750 47300 47301\nf 46750 47301 46751\nf 46751 47301 47302\nf 46751 47302 46752\nf 46752 47302 47303\nf 46752 47303 46753\nf 46753 47303 47304\nf 46753 47304 46754\nf 46754 47304 47305\nf 46754 47305 46755\nf 46755 47305 47306\nf 46755 47306 46756\nf 46756 47306 47307\nf 46756 47307 46757\nf 46757 47307 47308\nf 46757 47308 46758\nf 46758 47308 47309\nf 46758 47309 46759\nf 46759 47309 47310\nf 46759 47310 46760\nf 46760 47310 47311\nf 46760 47311 46761\nf 46761 47311 47312\nf 46761 47312 46762\nf 46762 47312 47313\nf 46762 47313 46763\nf 46763 47313 47314\nf 46763 47314 46764\nf 46764 47314 47315\nf 46764 47315 46765\nf 46765 47315 47316\nf 46765 47316 46766\nf 46766 47316 47317\nf 46766 47317 46767\nf 46767 47317 47318\nf 46767 47318 46768\nf 46768 47318 47319\nf 46768 47319 46769\nf 46769 47319 47320\nf 46769 47320 46770\nf 46770 47320 47321\nf 46770 47321 46771\nf 46771 47321 47322\nf 46771 47322 46772\nf 46772 47322 47323\nf 46772 47323 46773\nf 46773 47323 47324\nf 46773 47324 46774\nf 46774 47324 47325\nf 46774 47325 46775\nf 46775 47325 47326\nf 46775 47326 46776\nf 46776 47326 47327\nf 46776 47327 46777\nf 46777 47327 47328\nf 46777 47328 46778\nf 46778 47328 47329\nf 46778 47329 46779\nf 46779 47329 47330\nf 46779 47330 46780\nf 46780 47330 47331\nf 46780 47331 46781\nf 46781 47331 47332\nf 46781 47332 46782\nf 46782 47332 47333\nf 46782 47333 46783\nf 46783 47333 47334\nf 46783 47334 46784\nf 46784 47334 47335\nf 46784 47335 46785\nf 46785 47335 47336\nf 46785 47336 46786\nf 46786 47336 47337\nf 46786 47337 46787\nf 46787 47337 47338\nf 46787 47338 46788\nf 46788 47338 47339\nf 46788 47339 46789\nf 46789 47339 47340\nf 46789 47340 46790\nf 46790 47340 47341\nf 46790 47341 46791\nf 46791 47341 47342\nf 46791 47342 46792\nf 46792 47342 47343\nf 46792 47343 46793\nf 46793 47343 47344\nf 46793 47344 46794\nf 46794 47344 47345\nf 46794 47345 46795\nf 46795 47345 47346\nf 46795 47346 46796\nf 46796 47346 47348\nf 46796 47348 46798\nf 46797 46798 47347\nf 46798 47348 47347\nf 46799 47260 47349\nf 46799 47349 47350\nf 46799 47350 46800\nf 46800 47350 47351\nf 46800 47351 46801\nf 46801 47351 47352\nf 46801 47352 46802\nf 46802 47352 47354\nf 46802 47354 46804\nf 46803 46804 47353\nf 46804 47354 47353\nf 46805 46806 47355\nf 46805 46811 46809\nf 46805 47355 47358\nf 46805 47358 46811\nf 46806 46807 47355\nf 46807 46808 47356\nf 46807 47356 47355\nf 46808 46812 46813\nf 46808 46813 47356\nf 46809 46811 46810\nf 46810 46811 47359\nf 46810 47357 47362\nf 46810 47359 47357\nf 46810 47362 46814\nf 46811 47358 47359\nf 46812 46815 47364\nf 46812 47361 46813\nf 46812 47364 47361\nf 46813 47360 47356\nf 46813 47361 47360\nf 46814 47362 46816\nf 46815 46818 47367\nf 46815 47367 47364\nf 46816 47362 47365\nf 46816 47365 46817\nf 46817 47365 47366\nf 46817 47366 47369\nf 46817 47369 46820\nf 46818 46819 47368\nf 46818 47368 47367\nf 46819 46821 47368\nf 46820 47369 46822\nf 46821 46823 47372\nf 46821 47370 47368\nf 46821 47372 47370\nf 46822 47369 47371\nf 46822 47371 46824\nf 46823 46825 47374\nf 46823 47374 47372\nf 46824 47371 47373\nf 46824 47373 46826\nf 46825 46827 47376\nf 46825 47376 47374\nf 46826 47373 47375\nf 46826 47375 46828\nf 46827 46829 47378\nf 46827 47378 47376\nf 46828 47375 47377\nf 46828 47377 46830\nf 46829 46831 47380\nf 46829 47380 47378\nf 46830 47377 47379\nf 46830 47379 46832\nf 46831 46833 47382\nf 46831 47382 47380\nf 46832 47379 47381\nf 46832 47381 46834\nf 46833 46835 47384\nf 46833 47384 47382\nf 46834 47381 47383\nf 46834 47383 46836\nf 46835 46837 47386\nf 46835 47386 47384\nf 46836 47383 47385\nf 46836 47385 46838\nf 46837 46839 47388\nf 46837 47388 47386\nf 46838 47385 47387\nf 46838 47387 46840\nf 46839 46841 47390\nf 46839 47390 47388\nf 46840 47387 47389\nf 46840 47389 46842\nf 46841 46843 47392\nf 46841 47392 47390\nf 46842 47389 47391\nf 46842 47391 46844\nf 46843 46845 47394\nf 46843 47394 47392\nf 46844 47391 47393\nf 46844 47393 46846\nf 46845 46848 47396\nf 46845 47396 47394\nf 46846 46850 46847\nf 46846 47393 47395\nf 46846 47395 47397\nf 46846 47397 46850\nf 46847 46850 46849\nf 46848 46851 47399\nf 46848 47399 47396\nf 46849 46850 47398\nf 46849 47398 47401\nf 46849 47401 46852\nf 46850 47397 47398\nf 46851 46853 47399\nf 46852 47401 46856\nf 46853 46854 46855\nf 46853 46855 47399\nf 46854 46857 47402\nf 46854 47402 46855\nf 46855 47400 47399\nf 46855 47402 47400\nf 46856 47401 47403\nf 46856 47403 46858\nf 46857 46859 47406\nf 46857 47404 47402\nf 46857 47406 47404\nf 46858 47403 47405\nf 46858 47405 46860\nf 46859 46861 47408\nf 46859 47408 47406\nf 46860 47405 47407\nf 46860 47407 46862\nf 46861 46863 47410\nf 46861 47410 47408\nf 46862 47407 47409\nf 46862 47409 46864\nf 46863 46866 47413\nf 46863 47413 47410\nf 46864 47409 47411\nf 46864 47411 46865\nf 46865 47411 47412\nf 46865 47412 47414\nf 46865 47414 46867\nf 46866 46868 47416\nf 46866 47416 47413\nf 46867 47414 46869\nf 46868 46870 47419\nf 46868 47419 47416\nf 46869 47414 47417\nf 46869 47417 46871\nf 46870 46872 47422\nf 46870 47422 47419\nf 46871 47417 47420\nf 46871 47420 46873\nf 46872 46874 47422\nf 46873 47420 47425\nf 46873 47425 46877\nf 46874 46875 46876\nf 46874 46876 47422\nf 46875 46878 47426\nf 46875 47426 46876\nf 46876 47423 47422\nf 46876 47426 47423\nf 46877 47425 47427\nf 46877 47427 46879\nf 46878 46880 47432\nf 46878 47429 47426\nf 46878 47432 47429\nf 46879 47427 47430\nf 46879 47430 46881\nf 46880 46882 47435\nf 46880 47435 47432\nf 46881 47430 47433\nf 46881 47433 46883\nf 46882 46884 47439\nf 46882 47439 47435\nf 46883 47433 47437\nf 46883 47437 46885\nf 46884 46886 47439\nf 46885 47437 47442\nf 46885 47442 46888\nf 46886 46887 47439\nf 46886 46889 46890\nf 46886 46890 46887\nf 46887 46890 47444\nf 46887 47440 47439\nf 46887 47444 47440\nf 46888 47442 47445\nf 46888 47445 46891\nf 46889 46892 46894\nf 46889 46894 46890\nf 46890 46894 47447\nf 46890 47447 47444\nf 46891 47445 47449\nf 46891 47449 46895\nf 46892 46893 46894\nf 46893 46896 47451\nf 46893 47451 46894\nf 46894 47451 47447\nf 46895 47449 47453\nf 46895 47453 46897\nf 46896 46899 47459\nf 46896 47456 47451\nf 46896 47459 47456\nf 46897 46898 46900\nf 46897 47453 47454\nf 46897 47454 46898\nf 46898 46901 46900\nf 46898 47454 47458\nf 46898 47458 47462\nf 46898 47462 46901\nf 46899 46902 47459\nf 46900 46901 46904\nf 46901 46905 46904\nf 46901 47462 47466\nf 46901 47466 46905\nf 46902 46903 47459\nf 46902 46906 46907\nf 46902 46907 46903\nf 46903 46907 47464\nf 46903 47460 47459\nf 46903 47464 47460\nf 46904 46905 46908\nf 46905 46909 46908\nf 46905 47466 47470\nf 46905 47470 46909\nf 46906 46910 46912\nf 46906 46912 46907\nf 46907 46912 47468\nf 46907 47468 47464\nf 46908 46909 46913\nf 46909 46914 46913\nf 46909 46915 46914\nf 46909 47470 47471\nf 46909 47471 46915\nf 46910 46911 46912\nf 46911 46916 46917\nf 46911 46917 47474\nf 46911 47474 46912\nf 46912 47473 47468\nf 46912 47474 47473\nf 46913 46914 46918\nf 46914 46915 46919\nf 46914 46919 46918\nf 46915 46917 46920\nf 46915 46920 46919\nf 46915 47471 47474\nf 46915 47474 46917\nf 46916 46921 46922\nf 46916 46922 46917\nf 46917 46922 46920\nf 46918 46919 46923\nf 46919 46920 46924\nf 46919 46924 46923\nf 46920 46922 46925\nf 46920 46925 46924\nf 46921 46926 46927\nf 46921 46927 46922\nf 46922 46927 46925\nf 46923 46924 46928\nf 46924 46925 46929\nf 46924 46929 46928\nf 46925 46927 47476\nf 46925 47476 47478\nf 46925 47478 46929\nf 46926 46930 47481\nf 46926 47477 46927\nf 46926 47481 47477\nf 46927 47477 47476\nf 46928 46929 47483\nf 46928 47483 46931\nf 46929 47478 47479\nf 46929 47479 47483\nf 46930 46932 47486\nf 46930 47486 47481\nf 46931 47483 46933\nf 46932 46934 47490\nf 46932 47490 47486\nf 46933 47483 47488\nf 46933 47488 46935\nf 46934 46936 47493\nf 46934 47493 47490\nf 46935 47488 47492\nf 46935 47492 46938\nf 46936 46937 46940\nf 46936 46940 47496\nf 46936 47496 47493\nf 46937 46939 46940\nf 46938 47492 47495\nf 46938 47495 46941\nf 46939 46943 47499\nf 46939 47497 46940\nf 46939 47499 47497\nf 46940 47497 47496\nf 46941 47495 47498\nf 46941 47498 47501\nf 46941 47501 46942\nf 46942 46945 46944\nf 46942 47501 46945\nf 46943 46946 47503\nf 46943 47503 47499\nf 46944 46945 47504\nf 46944 47504 46947\nf 46945 47501 47502\nf 46945 47502 47504\nf 46946 46948 47505\nf 46946 47505 47503\nf 46947 47504 46949\nf 46948 46950 47507\nf 46948 47507 47505\nf 46949 47504 47506\nf 46949 47506 46951\nf 46950 46952 47509\nf 46950 47509 47507\nf 46951 47506 47508\nf 46951 47508 46953\nf 46952 46954 47511\nf 46952 47511 47509\nf 46953 47508 47510\nf 46953 47510 46955\nf 46954 46956 47513\nf 46954 47513 47511\nf 46955 47510 47512\nf 46955 47512 46957\nf 46956 46958 47515\nf 46956 47515 47513\nf 46957 47512 47514\nf 46957 47514 46959\nf 46958 46960 47517\nf 46958 47517 47515\nf 46959 47514 47516\nf 46959 47516 46961\nf 46960 46962 47519\nf 46960 47519 47517\nf 46961 47516 47518\nf 46961 47518 46963\nf 46962 46964 47522\nf 46962 47522 47519\nf 46963 47518 47520\nf 46963 47520 46965\nf 46964 46968 47524\nf 46964 47524 47522\nf 46965 46967 46966\nf 46965 47520 46967\nf 46966 46967 47523\nf 46966 47523 46969\nf 46967 47520 47521\nf 46967 47521 47523\nf 46968 46970 47526\nf 46968 47526 47524\nf 46969 47523 47525\nf 46969 47525 46972\nf 46970 46971 47528\nf 46970 47528 47526\nf 46971 46973 46974\nf 46971 46974 47528\nf 46972 47525 47527\nf 46972 47527 46975\nf 46973 46976 47531\nf 46973 47531 46974\nf 46974 47529 47528\nf 46974 47531 47529\nf 46975 47527 47530\nf 46975 47530 46977\nf 46976 46978 47534\nf 46976 47534 47531\nf 46977 47530 47533\nf 46977 47533 46979\nf 46978 46980 47536\nf 46978 47536 47534\nf 46979 47533 47535\nf 46979 47535 46981\nf 46980 46982 47538\nf 46980 47538 47536\nf 46981 47535 47537\nf 46981 47537 46983\nf 46982 46984 47540\nf 46982 47540 47538\nf 46983 47537 47539\nf 46983 47539 46985\nf 46984 46986 47543\nf 46984 47543 47540\nf 46985 47539 47541\nf 46985 47541 46987\nf 46986 46988 47547\nf 46986 47547 47543\nf 46987 47541 47544\nf 46987 47544 46989\nf 46988 46992 47549\nf 46988 47549 47547\nf 46989 46991 46990\nf 46989 47544 46991\nf 46990 46991 47548\nf 46990 47548 46993\nf 46991 47544 47545\nf 46991 47545 47548\nf 46992 46994 47551\nf 46992 47551 47549\nf 46993 47548 47550\nf 46993 47550 46995\nf 46994 46996 47553\nf 46994 47553 47551\nf 46995 47550 47552\nf 46995 47552 46997\nf 46996 46998 47555\nf 46996 47555 47553\nf 46997 47552 47554\nf 46997 47554 46999\nf 46998 47000 47557\nf 46998 47557 47555\nf 46999 47554 47556\nf 46999 47556 47002\nf 47000 47001 47557\nf 47001 47003 47560\nf 47001 47558 47557\nf 47001 47560 47558\nf 47002 47556 47559\nf 47002 47559 47004\nf 47003 47005 47562\nf 47003 47562 47560\nf 47004 47559 47561\nf 47004 47561 47006\nf 47005 47008 47565\nf 47005 47565 47562\nf 47006 47561 47563\nf 47006 47563 47007\nf 47007 47563 47564\nf 47007 47564 47566\nf 47007 47566 47009\nf 47008 47010 47567\nf 47008 47567 47565\nf 47009 47566 47011\nf 47010 47012 47567\nf 47011 47566 47569\nf 47011 47569 47015\nf 47012 47013 47014\nf 47012 47014 47567\nf 47013 47016 47570\nf 47013 47570 47014\nf 47014 47568 47567\nf 47014 47570 47568\nf 47015 47569 47571\nf 47015 47571 47017\nf 47016 47018 47574\nf 47016 47572 47570\nf 47016 47574 47572\nf 47017 47571 47573\nf 47017 47573 47020\nf 47018 47019 47574\nf 47019 47021 47578\nf 47019 47575 47574\nf 47019 47578 47575\nf 47020 47573 47577\nf 47020 47577 47023\nf 47021 47022 47578\nf 47022 47026 47585\nf 47022 47579 47578\nf 47022 47585 47579\nf 47023 47577 47581\nf 47023 47581 47582\nf 47023 47582 47024\nf 47024 47582 47584\nf 47024 47584 47025\nf 47025 47584 47586\nf 47025 47586 47027\nf 47026 47027 47585\nf 47027 47586 47585\nf 47028 47029 47588\nf 47028 47588 47597\nf 47028 47597 47037\nf 47029 47030 47589\nf 47029 47589 47588\nf 47030 47031 47590\nf 47030 47590 47589\nf 47031 47032 47591\nf 47031 47591 47590\nf 47032 47033 47592\nf 47032 47592 47591\nf 47033 47034 47593\nf 47033 47593 47592\nf 47034 47039 47594\nf 47034 47594 47593\nf 47035 47036 47595\nf 47035 47595 47604\nf 47035 47604 47042\nf 47036 47038 47596\nf 47036 47596 47595\nf 47037 47597 47038\nf 47038 47597 47598\nf 47038 47598 47596\nf 47039 47040 47601\nf 47039 47600 47594\nf 47039 47601 47600\nf 47040 47041 47601\nf 47041 47044 47603\nf 47041 47603 47601\nf 47042 47604 47043\nf 47043 47604 47605\nf 47043 47605 47610\nf 47043 47610 47047\nf 47044 47045 47607\nf 47044 47606 47603\nf 47044 47607 47606\nf 47045 47046 47607\nf 47046 47048 47609\nf 47046 47609 47607\nf 47047 47610 47050\nf 47048 47049 47612\nf 47048 47611 47609\nf 47048 47612 47611\nf 47049 47052 47612\nf 47050 47055 47051\nf 47050 47610 47613\nf 47050 47613 47616\nf 47050 47616 47055\nf 47051 47055 47054\nf 47052 47053 47615\nf 47052 47614 47612\nf 47052 47615 47614\nf 47053 47058 47615\nf 47054 47055 47617\nf 47054 47617 47056\nf 47055 47616 47617\nf 47056 47617 47618\nf 47056 47618 47057\nf 47057 47060 47059\nf 47057 47618 47060\nf 47058 47062 47623\nf 47058 47619 47615\nf 47058 47623 47619\nf 47059 47060 47621\nf 47059 47621 47061\nf 47060 47618 47620\nf 47060 47620 47621\nf 47061 47621 47622\nf 47061 47622 47063\nf 47062 47068 47629\nf 47062 47629 47623\nf 47063 47622 47624\nf 47063 47624 47625\nf 47063 47625 47064\nf 47064 47625 47626\nf 47064 47626 47065\nf 47065 47626 47627\nf 47065 47627 47066\nf 47066 47627 47628\nf 47066 47628 47067\nf 47067 47628 47070\nf 47068 47069 47629\nf 47069 47074 47635\nf 47069 47630 47629\nf 47069 47635 47630\nf 47070 47628 47631\nf 47070 47631 47632\nf 47070 47632 47071\nf 47071 47632 47633\nf 47071 47633 47072\nf 47072 47633 47634\nf 47072 47634 47073\nf 47073 47634 47076\nf 47074 47075 47635\nf 47075 47080 47641\nf 47075 47636 47635\nf 47075 47641 47636\nf 47076 47634 47637\nf 47076 47637 47638\nf 47076 47638 47077\nf 47077 47638 47639\nf 47077 47639 47078\nf 47078 47639 47640\nf 47078 47640 47079\nf 47079 47640 47642\nf 47079 47642 47081\nf 47080 47081 47641\nf 47081 47642 47641\nf 47082 47083 47643\nf 47082 47643 47651\nf 47082 47651 47090\nf 47083 47084 47644\nf 47083 47644 47643\nf 47084 47091 47645\nf 47084 47645 47644\nf 47085 47086 47646\nf 47085 47646 47655\nf 47085 47655 47092\nf 47086 47087 47647\nf 47086 47647 47646\nf 47087 47088 47648\nf 47087 47648 47647\nf 47088 47089 47649\nf 47088 47649 47648\nf 47089 47093 47650\nf 47089 47650 47649\nf 47090 47651 47094\nf 47091 47096 47658\nf 47091 47653 47645\nf 47091 47658 47653\nf 47092 47655 47098\nf 47093 47100 47662\nf 47093 47656 47650\nf 47093 47662 47656\nf 47094 47651 47657\nf 47094 47657 47664\nf 47094 47664 47095\nf 47095 47103 47102\nf 47095 47664 47103\nf 47096 47097 47659\nf 47096 47659 47658\nf 47097 47104 47659\nf 47098 47655 47660\nf 47098 47660 47099\nf 47099 47660 47661\nf 47099 47661 47667\nf 47099 47667 47105\nf 47100 47101 47663\nf 47100 47663 47662\nf 47101 47107 47663\nf 47102 47103 47670\nf 47102 47670 47108\nf 47103 47664 47665\nf 47103 47665 47670\nf 47104 47109 47671\nf 47104 47666 47659\nf 47104 47671 47666\nf 47105 47667 47668\nf 47105 47668 47106\nf 47106 47668 47110\nf 47107 47112 47674\nf 47107 47669 47663\nf 47107 47674 47669\nf 47108 47670 47113\nf 47109 47114 47676\nf 47109 47676 47671\nf 47110 47668 47672\nf 47110 47672 47111\nf 47111 47672 47673\nf 47111 47673 47677\nf 47111 47677 47115\nf 47112 47116 47678\nf 47112 47678 47674\nf 47113 47670 47675\nf 47113 47675 47118\nf 47114 47119 47681\nf 47114 47681 47676\nf 47115 47677 47120\nf 47116 47117 47679\nf 47116 47679 47678\nf 47117 47121 47679\nf 47118 47675 47680\nf 47118 47680 47122\nf 47119 47123 47685\nf 47119 47685 47681\nf 47120 47677 47682\nf 47120 47682 47124\nf 47121 47125 47687\nf 47121 47683 47679\nf 47121 47687 47683\nf 47122 47680 47684\nf 47122 47684 47126\nf 47123 47127 47689\nf 47123 47689 47685\nf 47124 47682 47686\nf 47124 47686 47128\nf 47125 47129 47691\nf 47125 47691 47687\nf 47126 47684 47688\nf 47126 47688 47130\nf 47127 47131 47693\nf 47127 47693 47689\nf 47128 47686 47690\nf 47128 47690 47132\nf 47129 47133 47695\nf 47129 47695 47691\nf 47130 47688 47692\nf 47130 47692 47134\nf 47131 47135 47697\nf 47131 47697 47693\nf 47132 47690 47694\nf 47132 47694 47137\nf 47133 47138 47700\nf 47133 47700 47695\nf 47134 47692 47696\nf 47134 47696 47139\nf 47135 47136 47698\nf 47135 47698 47697\nf 47136 47140 47698\nf 47137 47694 47699\nf 47137 47699 47147\nf 47138 47149 47711\nf 47138 47711 47700\nf 47139 47696 47701\nf 47139 47701 47150\nf 47140 47141 47703\nf 47140 47702 47698\nf 47140 47703 47702\nf 47141 47142 47703\nf 47142 47143 47704\nf 47142 47704 47703\nf 47143 47144 47705\nf 47143 47705 47704\nf 47144 47151 47706\nf 47144 47706 47705\nf 47145 47146 47707\nf 47145 47707 47795\nf 47145 47795 47233\nf 47146 47148 47708\nf 47146 47708 47707\nf 47147 47699 47709\nf 47147 47709 47148\nf 47148 47709 47710\nf 47148 47710 47708\nf 47149 47235 47798\nf 47149 47798 47711\nf 47150 47701 47712\nf 47150 47712 47237\nf 47151 47152 47714\nf 47151 47713 47706\nf 47151 47714 47713\nf 47152 47153 47714\nf 47153 47154 47715\nf 47153 47715 47714\nf 47154 47155 47716\nf 47154 47716 47715\nf 47155 47156 47717\nf 47155 47717 47716\nf 47156 47157 47718\nf 47156 47718 47717\nf 47157 47158 47719\nf 47157 47719 47718\nf 47158 47159 47720\nf 47158 47720 47719\nf 47159 47160 47721\nf 47159 47721 47720\nf 47160 47161 47722\nf 47160 47722 47721\nf 47161 47162 47723\nf 47161 47723 47722\nf 47162 47163 47724\nf 47162 47724 47723\nf 47163 47164 47725\nf 47163 47725 47724\nf 47164 47165 47726\nf 47164 47726 47725\nf 47165 47166 47727\nf 47165 47727 47726\nf 47166 47167 47728\nf 47166 47728 47727\nf 47167 47168 47729\nf 47167 47729 47728\nf 47168 47169 47730\nf 47168 47730 47729\nf 47169 47170 47731\nf 47169 47731 47730\nf 47170 47171 47732\nf 47170 47732 47731\nf 47171 47172 47733\nf 47171 47733 47732\nf 47172 47173 47734\nf 47172 47734 47733\nf 47173 47174 47735\nf 47173 47735 47734\nf 47174 47175 47736\nf 47174 47736 47735\nf 47175 47176 47737\nf 47175 47737 47736\nf 47176 47177 47738\nf 47176 47738 47737\nf 47177 47178 47739\nf 47177 47739 47738\nf 47178 47179 47740\nf 47178 47740 47739\nf 47179 47180 47741\nf 47179 47741 47740\nf 47180 47181 47742\nf 47180 47742 47741\nf 47181 47182 47743\nf 47181 47743 47742\nf 47182 47183 47744\nf 47182 47744 47743\nf 47183 47184 47745\nf 47183 47745 47744\nf 47184 47185 47746\nf 47184 47746 47745\nf 47185 47186 47747\nf 47185 47747 47746\nf 47186 47187 47748\nf 47186 47748 47747\nf 47187 47188 47749\nf 47187 47749 47748\nf 47188 47189 47750\nf 47188 47750 47749\nf 47189 47190 47751\nf 47189 47751 47750\nf 47190 47191 47752\nf 47190 47752 47751\nf 47191 47192 47753\nf 47191 47753 47752\nf 47192 47193 47754\nf 47192 47754 47753\nf 47193 47194 47755\nf 47193 47755 47754\nf 47194 47195 47756\nf 47194 47756 47755\nf 47195 47196 47757\nf 47195 47757 47756\nf 47196 47197 47758\nf 47196 47758 47757\nf 47197 47198 47759\nf 47197 47759 47758\nf 47198 47199 47760\nf 47198 47760 47759\nf 47199 47200 47761\nf 47199 47761 47760\nf 47200 47201 47762\nf 47200 47762 47761\nf 47201 47202 47763\nf 47201 47763 47762\nf 47202 47203 47764\nf 47202 47764 47763\nf 47203 47204 47765\nf 47203 47765 47764\nf 47204 47205 47766\nf 47204 47766 47765\nf 47205 47206 47767\nf 47205 47767 47766\nf 47206 47207 47768\nf 47206 47768 47767\nf 47207 47208 47769\nf 47207 47769 47768\nf 47208 47209 47770\nf 47208 47770 47769\nf 47209 47210 47771\nf 47209 47771 47770\nf 47210 47211 47772\nf 47210 47772 47771\nf 47211 47212 47773\nf 47211 47773 47772\nf 47212 47213 47774\nf 47212 47774 47773\nf 47213 47214 47775\nf 47213 47775 47774\nf 47214 47215 47776\nf 47214 47776 47775\nf 47215 47216 47777\nf 47215 47777 47776\nf 47216 47217 47778\nf 47216 47778 47777\nf 47217 47218 47779\nf 47217 47779 47778\nf 47218 47219 47780\nf 47218 47780 47779\nf 47219 47220 47781\nf 47219 47781 47780\nf 47220 47221 47782\nf 47220 47782 47781\nf 47221 47222 47783\nf 47221 47783 47782\nf 47222 47223 47784\nf 47222 47784 47783\nf 47223 47224 47785\nf 47223 47785 47784\nf 47224 47225 47786\nf 47224 47786 47785\nf 47225 47226 47787\nf 47225 47787 47786\nf 47226 47227 47788\nf 47226 47788 47787\nf 47227 47228 47789\nf 47227 47789 47788\nf 47228 47229 47790\nf 47228 47790 47789\nf 47229 47230 47791\nf 47229 47791 47790\nf 47230 47231 47792\nf 47230 47792 47791\nf 47231 47232 47793\nf 47231 47793 47792\nf 47232 47234 47794\nf 47232 47794 47793\nf 47233 47795 47234\nf 47234 47795 47796\nf 47234 47796 47794\nf 47235 47236 47798\nf 47236 47238 47801\nf 47236 47799 47798\nf 47236 47801 47799\nf 47237 47712 47800\nf 47237 47800 47239\nf 47238 47241 47804\nf 47238 47804 47801\nf 47239 47800 47802\nf 47239 47802 47803\nf 47239 47803 47240\nf 47240 47803 47242\nf 47241 47243 47804\nf 47242 47803 47806\nf 47242 47806 47246\nf 47243 47244 47245\nf 47243 47245 47804\nf 47244 47247 47807\nf 47244 47807 47245\nf 47245 47805 47804\nf 47245 47807 47805\nf 47246 47806 47808\nf 47246 47808 47249\nf 47247 47248 47810\nf 47247 47810 47807\nf 47248 47255 47257\nf 47248 47257 47809\nf 47248 47809 47811\nf 47248 47811 47810\nf 47249 47808 47812\nf 47249 47812 47813\nf 47249 47813 47250\nf 47250 47813 47258\nf 47251 47347 47908\nf 47251 47814 47815\nf 47251 47815 47252\nf 47251 47908 47814\nf 47252 47815 47816\nf 47252 47816 47253\nf 47253 47816 47818\nf 47253 47818 47254\nf 47254 47818 47256\nf 47255 47256 47257\nf 47256 47817 47257\nf 47256 47818 47817\nf 47257 47817 47809\nf 47258 47813 47819\nf 47258 47819 47820\nf 47258 47820 47259\nf 47259 47820 47821\nf 47259 47821 47260\nf 47260 47821 47349\nf 47261 47353 47914\nf 47261 47822 47823\nf 47261 47823 47262\nf 47261 47914 47822\nf 47262 47823 47824\nf 47262 47824 47263\nf 47263 47824 47825\nf 47263 47825 47264\nf 47264 47825 47826\nf 47264 47826 47265\nf 47265 47826 47827\nf 47265 47827 47266\nf 47266 47827 47828\nf 47266 47828 47267\nf 47267 47828 47829\nf 47267 47829 47268\nf 47268 47829 47830\nf 47268 47830 47269\nf 47269 47830 47831\nf 47269 47831 47270\nf 47270 47831 47832\nf 47270 47832 47271\nf 47271 47832 47833\nf 47271 47833 47272\nf 47272 47833 47834\nf 47272 47834 47273\nf 47273 47834 47835\nf 47273 47835 47274\nf 47274 47835 47836\nf 47274 47836 47275\nf 47275 47836 47837\nf 47275 47837 47276\nf 47276 47837 47838\nf 47276 47838 47277\nf 47277 47838 47839\nf 47277 47839 47278\nf 47278 47839 47840\nf 47278 47840 47279\nf 47279 47840 47841\nf 47279 47841 47280\nf 47280 47841 47842\nf 47280 47842 47281\nf 47281 47842 47843\nf 47281 47843 47282\nf 47282 47843 47844\nf 47282 47844 47283\nf 47283 47844 47845\nf 47283 47845 47284\nf 47284 47845 47846\nf 47284 47846 47285\nf 47285 47846 47847\nf 47285 47847 47286\nf 47286 47847 47848\nf 47286 47848 47287\nf 47287 47848 47849\nf 47287 47849 47288\nf 47288 47849 47850\nf 47288 47850 47289\nf 47289 47850 47851\nf 47289 47851 47290\nf 47290 47851 47852\nf 47290 47852 47291\nf 47291 47852 47853\nf 47291 47853 47292\nf 47292 47853 47854\nf 47292 47854 47293\nf 47293 47854 47855\nf 47293 47855 47294\nf 47294 47855 47856\nf 47294 47856 47295\nf 47295 47856 47857\nf 47295 47857 47296\nf 47296 47857 47858\nf 47296 47858 47297\nf 47297 47858 47859\nf 47297 47859 47298\nf 47298 47859 47860\nf 47298 47860 47299\nf 47299 47860 47861\nf 47299 47861 47300\nf 47300 47861 47862\nf 47300 47862 47301\nf 47301 47862 47863\nf 47301 47863 47302\nf 47302 47863 47864\nf 47302 47864 47303\nf 47303 47864 47865\nf 47303 47865 47304\nf 47304 47865 47866\nf 47304 47866 47305\nf 47305 47866 47867\nf 47305 47867 47306\nf 47306 47867 47868\nf 47306 47868 47307\nf 47307 47868 47869\nf 47307 47869 47308\nf 47308 47869 47870\nf 47308 47870 47309\nf 47309 47870 47871\nf 47309 47871 47310\nf 47310 47871 47872\nf 47310 47872 47311\nf 47311 47872 47873\nf 47311 47873 47312\nf 47312 47873 47874\nf 47312 47874 47313\nf 47313 47874 47875\nf 47313 47875 47314\nf 47314 47875 47876\nf 47314 47876 47315\nf 47315 47876 47877\nf 47315 47877 47316\nf 47316 47877 47878\nf 47316 47878 47317\nf 47317 47878 47879\nf 47317 47879 47318\nf 47318 47879 47880\nf 47318 47880 47319\nf 47319 47880 47881\nf 47319 47881 47320\nf 47320 47881 47882\nf 47320 47882 47321\nf 47321 47882 47883\nf 47321 47883 47322\nf 47322 47883 47884\nf 47322 47884 47323\nf 47323 47884 47885\nf 47323 47885 47324\nf 47324 47885 47886\nf 47324 47886 47325\nf 47325 47886 47887\nf 47325 47887 47326\nf 47326 47887 47888\nf 47326 47888 47327\nf 47327 47888 47889\nf 47327 47889 47328\nf 47328 47889 47890\nf 47328 47890 47329\nf 47329 47890 47891\nf 47329 47891 47330\nf 47330 47891 47892\nf 47330 47892 47331\nf 47331 47892 47893\nf 47331 47893 47332\nf 47332 47893 47894\nf 47332 47894 47333\nf 47333 47894 47895\nf 47333 47895 47334\nf 47334 47895 47896\nf 47334 47896 47335\nf 47335 47896 47897\nf 47335 47897 47336\nf 47336 47897 47898\nf 47336 47898 47337\nf 47337 47898 47899\nf 47337 47899 47338\nf 47338 47899 47900\nf 47338 47900 47339\nf 47339 47900 47901\nf 47339 47901 47340\nf 47340 47901 47902\nf 47340 47902 47341\nf 47341 47902 47903\nf 47341 47903 47342\nf 47342 47903 47904\nf 47342 47904 47343\nf 47343 47904 47905\nf 47343 47905 47344\nf 47344 47905 47906\nf 47344 47906 47345\nf 47345 47906 47907\nf 47345 47907 47346\nf 47346 47907 47909\nf 47346 47909 47348\nf 47347 47348 47908\nf 47348 47909 47908\nf 47349 47821 47910\nf 47349 47910 47911\nf 47349 47911 47350\nf 47350 47911 47912\nf 47350 47912 47351\nf 47351 47912 47913\nf 47351 47913 47352\nf 47352 47913 47915\nf 47352 47915 47354\nf 47353 47354 47914\nf 47354 47915 47914\nf 47355 47356 47917\nf 47355 47917 47919\nf 47355 47919 47358\nf 47356 47360 47918\nf 47356 47918 47917\nf 47357 47359 47920\nf 47357 47363 47362\nf 47357 47920 47924\nf 47357 47924 47363\nf 47358 47919 47359\nf 47359 47919 47920\nf 47360 47361 47923\nf 47360 47922 47918\nf 47360 47923 47922\nf 47361 47364 47923\nf 47362 47363 47927\nf 47362 47927 47365\nf 47363 47924 47925\nf 47363 47925 47927\nf 47364 47367 47929\nf 47364 47926 47923\nf 47364 47929 47926\nf 47365 47927 47366\nf 47366 47927 47928\nf 47366 47928 47931\nf 47366 47931 47369\nf 47367 47368 47930\nf 47367 47930 47929\nf 47368 47370 47930\nf 47369 47931 47371\nf 47370 47372 47934\nf 47370 47932 47930\nf 47370 47934 47932\nf 47371 47931 47933\nf 47371 47933 47373\nf 47372 47374 47936\nf 47372 47936 47934\nf 47373 47933 47935\nf 47373 47935 47375\nf 47374 47376 47938\nf 47374 47938 47936\nf 47375 47935 47937\nf 47375 47937 47377\nf 47376 47378 47940\nf 47376 47940 47938\nf 47377 47937 47939\nf 47377 47939 47379\nf 47378 47380 47942\nf 47378 47942 47940\nf 47379 47939 47941\nf 47379 47941 47381\nf 47380 47382 47944\nf 47380 47944 47942\nf 47381 47941 47943\nf 47381 47943 47383\nf 47382 47384 47946\nf 47382 47946 47944\nf 47383 47943 47945\nf 47383 47945 47385\nf 47384 47386 47948\nf 47384 47948 47946\nf 47385 47945 47947\nf 47385 47947 47387\nf 47386 47388 47950\nf 47386 47950 47948\nf 47387 47947 47949\nf 47387 47949 47389\nf 47388 47390 47952\nf 47388 47952 47950\nf 47389 47949 47951\nf 47389 47951 47391\nf 47390 47392 47954\nf 47390 47954 47952\nf 47391 47951 47953\nf 47391 47953 47393\nf 47392 47394 47956\nf 47392 47956 47954\nf 47393 47953 47955\nf 47393 47955 47395\nf 47394 47396 47958\nf 47394 47958 47956\nf 47395 47955 47957\nf 47395 47957 47397\nf 47396 47399 47962\nf 47396 47962 47958\nf 47397 47957 47959\nf 47397 47959 47960\nf 47397 47960 47398\nf 47398 47960 47401\nf 47399 47400 47962\nf 47400 47402 47965\nf 47400 47963 47962\nf 47400 47965 47963\nf 47401 47960 47964\nf 47401 47964 47403\nf 47402 47404 47967\nf 47402 47967 47965\nf 47403 47964 47966\nf 47403 47966 47405\nf 47404 47406 47969\nf 47404 47969 47967\nf 47405 47966 47968\nf 47405 47968 47407\nf 47406 47408 47971\nf 47406 47971 47969\nf 47407 47968 47970\nf 47407 47970 47409\nf 47408 47410 47973\nf 47408 47973 47971\nf 47409 47970 47972\nf 47409 47972 47411\nf 47410 47413 47975\nf 47410 47975 47973\nf 47411 47972 47974\nf 47411 47974 47976\nf 47411 47976 47412\nf 47412 47415 47414\nf 47412 47976 47415\nf 47413 47416 47977\nf 47413 47977 47975\nf 47414 47415 47417\nf 47415 47418 47417\nf 47415 47976 47979\nf 47415 47979 47418\nf 47416 47419 47980\nf 47416 47980 47977\nf 47417 47418 47420\nf 47418 47421 47420\nf 47418 47979 47983\nf 47418 47983 47421\nf 47419 47422 47980\nf 47420 47421 47986\nf 47420 47986 47425\nf 47421 47983 47984\nf 47421 47984 47986\nf 47422 47423 47424\nf 47422 47424 47980\nf 47423 47426 47985\nf 47423 47985 47424\nf 47424 47981 47980\nf 47424 47985 47981\nf 47425 47986 47427\nf 47426 47429 47991\nf 47426 47989 47985\nf 47426 47991 47989\nf 47427 47428 47430\nf 47427 47986 47987\nf 47427 47987 47428\nf 47428 47431 47430\nf 47428 47987 47990\nf 47428 47990 47992\nf 47428 47992 47431\nf 47429 47432 47993\nf 47429 47993 47991\nf 47430 47431 47433\nf 47431 47434 47433\nf 47431 47992 47996\nf 47431 47996 47434\nf 47432 47435 47993\nf 47433 47434 47437\nf 47434 47438 47437\nf 47434 47996 47998\nf 47434 47998 47438\nf 47435 47436 47993\nf 47435 47439 47441\nf 47435 47441 47436\nf 47436 47441 47997\nf 47436 47994 47993\nf 47436 47997 47994\nf 47437 47438 47442\nf 47438 47443 47442\nf 47438 47998 48001\nf 47438 48001 47443\nf 47439 47440 47441\nf 47440 47444 47999\nf 47440 47999 47441\nf 47441 47999 47997\nf 47442 47443 47445\nf 47443 47446 47445\nf 47443 48001 48005\nf 47443 48005 47446\nf 47444 47447 48002\nf 47444 48002 47999\nf 47445 47446 47449\nf 47446 47450 47449\nf 47446 48005 48008\nf 47446 48008 47450\nf 47447 47448 48002\nf 47447 47451 47452\nf 47447 47452 47448\nf 47448 47452 48006\nf 47448 48003 48002\nf 47448 48006 48003\nf 47449 47450 47453\nf 47450 47455 47453\nf 47450 48008 48012\nf 47450 48012 47455\nf 47451 47456 47457\nf 47451 47457 47452\nf 47452 47457 48010\nf 47452 48010 48006\nf 47453 47455 47454\nf 47454 47455 47458\nf 47455 48012 47458\nf 47456 47459 47461\nf 47456 47461 47457\nf 47457 47461 48014\nf 47457 48014 48010\nf 47458 48012 48016\nf 47458 48016 47462\nf 47459 47460 47461\nf 47460 47464 47465\nf 47460 47465 48020\nf 47460 48020 47461\nf 47461 48019 48014\nf 47461 48020 48019\nf 47462 47463 47466\nf 47462 48016 48017\nf 47462 48017 47463\nf 47463 47465 47467\nf 47463 47467 47466\nf 47463 48017 48020\nf 47463 48020 47465\nf 47464 47468 47469\nf 47464 47469 47465\nf 47465 47469 47467\nf 47466 47467 47470\nf 47467 47469 47472\nf 47467 47472 47470\nf 47468 47473 47475\nf 47468 47475 47469\nf 47469 47475 47472\nf 47470 47472 47471\nf 47471 47472 47474\nf 47472 47475 47474\nf 47473 47474 47475\nf 47476 47477 47482\nf 47476 47480 47478\nf 47476 47482 47480\nf 47477 47481 47482\nf 47478 47480 47479\nf 47479 47480 47484\nf 47479 47484 47483\nf 47480 47482 47485\nf 47480 47485 47484\nf 47481 47486 47487\nf 47481 47487 47482\nf 47482 47487 47485\nf 47483 47484 47488\nf 47484 47485 47489\nf 47484 47489 47488\nf 47485 47487 47491\nf 47485 47491 48022\nf 47485 48022 48023\nf 47485 48023 47489\nf 47486 47490 47491\nf 47486 47491 47487\nf 47488 47489 48027\nf 47488 48027 47492\nf 47489 48023 48024\nf 47489 48024 48027\nf 47490 47493 47494\nf 47490 47494 47491\nf 47491 47494 48025\nf 47491 48025 48022\nf 47492 48027 47495\nf 47493 47496 48034\nf 47493 48031 47494\nf 47493 48034 48031\nf 47494 48029 48025\nf 47494 48031 48029\nf 47495 48027 48032\nf 47495 48032 47498\nf 47496 47497 47500\nf 47496 47500 48037\nf 47496 48037 48034\nf 47497 47499 47500\nf 47498 48032 48036\nf 47498 48036 47501\nf 47499 47503 48041\nf 47499 48038 47500\nf 47499 48041 48038\nf 47500 48038 48037\nf 47501 48036 48039\nf 47501 48039 47502\nf 47502 48039 48040\nf 47502 48040 48043\nf 47502 48043 47504\nf 47503 47505 48044\nf 47503 48044 48041\nf 47504 48043 47506\nf 47505 47507 48046\nf 47505 48046 48044\nf 47506 48043 48045\nf 47506 48045 47508\nf 47507 47509 48048\nf 47507 48048 48046\nf 47508 48045 48047\nf 47508 48047 47510\nf 47509 47511 48050\nf 47509 48050 48048\nf 47510 48047 48049\nf 47510 48049 47512\nf 47511 47513 48052\nf 47511 48052 48050\nf 47512 48049 48051\nf 47512 48051 47514\nf 47513 47515 48054\nf 47513 48054 48052\nf 47514 48051 48053\nf 47514 48053 47516\nf 47515 47517 48056\nf 47515 48056 48054\nf 47516 48053 48055\nf 47516 48055 47518\nf 47517 47519 48058\nf 47517 48058 48056\nf 47518 48055 48057\nf 47518 48057 47520\nf 47519 47522 48061\nf 47519 48061 48058\nf 47520 48057 48059\nf 47520 48059 47521\nf 47521 48059 48060\nf 47521 48060 48062\nf 47521 48062 47523\nf 47522 47524 48063\nf 47522 48063 48061\nf 47523 48062 47525\nf 47524 47526 48065\nf 47524 48065 48063\nf 47525 48062 48064\nf 47525 48064 47527\nf 47526 47528 48067\nf 47526 48067 48065\nf 47527 48064 48066\nf 47527 48066 47530\nf 47528 47529 48069\nf 47528 48069 48067\nf 47529 47531 47532\nf 47529 47532 48069\nf 47530 48066 48068\nf 47530 48068 47533\nf 47531 47534 48072\nf 47531 48072 47532\nf 47532 48070 48069\nf 47532 48072 48070\nf 47533 48068 48071\nf 47533 48071 47535\nf 47534 47536 48075\nf 47534 48075 48072\nf 47535 48071 48074\nf 47535 48074 47537\nf 47536 47538 48077\nf 47536 48077 48075\nf 47537 48074 48076\nf 47537 48076 47539\nf 47538 47540 48081\nf 47538 48081 48077\nf 47539 48076 48078\nf 47539 48078 47541\nf 47540 47543 48083\nf 47540 48083 48081\nf 47541 47542 47546\nf 47541 47546 47544\nf 47541 48078 47542\nf 47542 48078 48079\nf 47542 48079 48082\nf 47542 48082 47546\nf 47543 47547 48085\nf 47543 48085 48083\nf 47544 47546 47545\nf 47545 47546 48084\nf 47545 48084 47548\nf 47546 48082 48084\nf 47547 47549 48087\nf 47547 48087 48085\nf 47548 48084 48086\nf 47548 48086 47550\nf 47549 47551 48089\nf 47549 48089 48087\nf 47550 48086 48088\nf 47550 48088 47552\nf 47551 47553 48091\nf 47551 48091 48089\nf 47552 48088 48090\nf 47552 48090 47554\nf 47553 47555 48093\nf 47553 48093 48091\nf 47554 48090 48092\nf 47554 48092 47556\nf 47555 47557 48095\nf 47555 48095 48093\nf 47556 48092 48094\nf 47556 48094 47559\nf 47557 47558 48095\nf 47558 47560 48098\nf 47558 48096 48095\nf 47558 48098 48096\nf 47559 48094 48097\nf 47559 48097 47561\nf 47560 47562 48100\nf 47560 48100 48098\nf 47561 48097 48099\nf 47561 48099 47563\nf 47562 47565 48103\nf 47562 48103 48100\nf 47563 48099 48101\nf 47563 48101 47564\nf 47564 48101 48102\nf 47564 48102 48104\nf 47564 48104 47566\nf 47565 47567 48105\nf 47565 48105 48103\nf 47566 48104 47569\nf 47567 47568 48105\nf 47568 47570 48108\nf 47568 48106 48105\nf 47568 48108 48106\nf 47569 48104 48107\nf 47569 48107 47571\nf 47570 47572 48110\nf 47570 48110 48108\nf 47571 48107 48109\nf 47571 48109 47573\nf 47572 47574 48110\nf 47573 48109 48112\nf 47573 48112 47577\nf 47574 47575 47576\nf 47574 47576 48110\nf 47575 47578 47580\nf 47575 47580 48114\nf 47575 48114 47576\nf 47576 48111 48110\nf 47576 48113 48111\nf 47576 48114 48113\nf 47577 48112 48115\nf 47577 48115 47581\nf 47578 47579 47580\nf 47579 47585 47587\nf 47579 47587 48118\nf 47579 48118 47580\nf 47580 48117 48114\nf 47580 48118 48117\nf 47581 47583 47582\nf 47581 48115 48116\nf 47581 48116 47583\nf 47582 47583 48121\nf 47582 48121 47584\nf 47583 48116 48119\nf 47583 48119 48121\nf 47584 48121 47586\nf 47585 47586 47587\nf 47586 48120 47587\nf 47586 48121 48120\nf 47587 48120 48118\nf 47588 47589 48124\nf 47588 47599 47597\nf 47588 48123 47599\nf 47588 48124 48123\nf 47589 47590 48125\nf 47589 48125 48124\nf 47590 47591 48126\nf 47590 48126 48125\nf 47591 47592 48127\nf 47591 48127 48126\nf 47592 47593 48128\nf 47592 48128 48127\nf 47593 47594 48129\nf 47593 48129 48128\nf 47594 47600 48131\nf 47594 48130 48129\nf 47594 48131 48130\nf 47595 47596 48132\nf 47595 48132 48138\nf 47595 48138 47604\nf 47596 47598 48134\nf 47596 48134 48132\nf 47597 47599 47598\nf 47598 47599 48133\nf 47598 48133 48134\nf 47599 48123 48133\nf 47600 47601 47602\nf 47600 47602 48131\nf 47601 47603 48136\nf 47601 48136 47602\nf 47602 48135 48131\nf 47602 48136 48135\nf 47603 47606 48137\nf 47603 48137 48136\nf 47604 48138 47605\nf 47605 48138 48139\nf 47605 48139 48142\nf 47605 48142 47610\nf 47606 47607 47608\nf 47606 47608 48137\nf 47607 47609 48141\nf 47607 48141 47608\nf 47608 48140 48137\nf 47608 48141 48140\nf 47609 47611 48141\nf 47610 48142 47613\nf 47611 47612 48144\nf 47611 48143 48141\nf 47611 48144 48143\nf 47612 47614 48144\nf 47613 48142 48145\nf 47613 48145 47616\nf 47614 47615 48147\nf 47614 48146 48144\nf 47614 48147 48146\nf 47615 47619 48147\nf 47616 48145 48148\nf 47616 48148 48149\nf 47616 48149 47617\nf 47617 48149 48150\nf 47617 48150 47618\nf 47618 48150 47620\nf 47619 47623 48155\nf 47619 48151 48147\nf 47619 48155 48151\nf 47620 48150 48152\nf 47620 48152 48153\nf 47620 48153 47621\nf 47621 48153 48154\nf 47621 48154 47622\nf 47622 48154 47624\nf 47623 47629 48161\nf 47623 48161 48155\nf 47624 48154 48156\nf 47624 48156 48157\nf 47624 48157 47625\nf 47625 48157 48158\nf 47625 48158 47626\nf 47626 48158 48159\nf 47626 48159 47627\nf 47627 48159 48160\nf 47627 48160 47628\nf 47628 48160 47631\nf 47629 47630 48161\nf 47630 47635 48167\nf 47630 48162 48161\nf 47630 48167 48162\nf 47631 48160 48163\nf 47631 48163 48164\nf 47631 48164 47632\nf 47632 48164 48165\nf 47632 48165 47633\nf 47633 48165 48166\nf 47633 48166 47634\nf 47634 48166 47637\nf 47635 47636 48167\nf 47636 47641 48174\nf 47636 48168 48167\nf 47636 48174 48168\nf 47637 48166 48169\nf 47637 48169 48170\nf 47637 48170 47638\nf 47638 48170 48172\nf 47638 48172 47639\nf 47639 48172 48173\nf 47639 48173 47640\nf 47640 48173 48175\nf 47640 48175 47642\nf 47641 47642 48174\nf 47642 48175 48174\nf 47643 47644 48176\nf 47643 47652 47651\nf 47643 48176 48182\nf 47643 48182 47652\nf 47644 47645 48176\nf 47645 47653 47654\nf 47645 47654 48176\nf 47646 47647 48177\nf 47646 48177 48186\nf 47646 48186 47655\nf 47647 47648 48178\nf 47647 48178 48177\nf 47648 47649 48179\nf 47648 48179 48178\nf 47649 47650 48180\nf 47649 48180 48179\nf 47650 47656 48181\nf 47650 48181 48180\nf 47651 47652 48188\nf 47651 48188 47657\nf 47652 48182 48183\nf 47652 48183 48188\nf 47653 47658 48189\nf 47653 48185 47654\nf 47653 48189 48185\nf 47654 48184 48176\nf 47654 48185 48184\nf 47655 48186 47660\nf 47656 47662 48193\nf 47656 48187 48181\nf 47656 48193 48187\nf 47657 48188 47664\nf 47658 47659 48190\nf 47658 48190 48189\nf 47659 47666 48190\nf 47660 48186 48191\nf 47660 48191 47661\nf 47661 48191 48192\nf 47661 48192 48199\nf 47661 48199 47667\nf 47662 47663 48194\nf 47662 48194 48193\nf 47663 47669 48194\nf 47664 48188 48195\nf 47664 48195 47665\nf 47665 48195 48196\nf 47665 48196 48203\nf 47665 48203 47670\nf 47666 47671 48204\nf 47666 48197 48190\nf 47666 48204 48197\nf 47667 48199 48200\nf 47667 48200 47668\nf 47668 48200 47672\nf 47669 47674 48207\nf 47669 48202 48194\nf 47669 48207 48202\nf 47670 48203 47675\nf 47671 47676 48209\nf 47671 48209 48204\nf 47672 48200 48205\nf 47672 48205 47673\nf 47673 48205 48206\nf 47673 48206 48210\nf 47673 48210 47677\nf 47674 47678 48212\nf 47674 48212 48207\nf 47675 48203 48208\nf 47675 48208 47680\nf 47676 47681 48215\nf 47676 48215 48209\nf 47677 48210 47682\nf 47678 47679 48213\nf 47678 48213 48212\nf 47679 47683 48213\nf 47680 48208 48214\nf 47680 48214 47684\nf 47681 47685 48219\nf 47681 48219 48215\nf 47682 48210 48216\nf 47682 48216 47686\nf 47683 47687 48221\nf 47683 48217 48213\nf 47683 48221 48217\nf 47684 48214 48218\nf 47684 48218 47688\nf 47685 47689 48223\nf 47685 48223 48219\nf 47686 48216 48220\nf 47686 48220 47690\nf 47687 47691 48225\nf 47687 48225 48221\nf 47688 48218 48222\nf 47688 48222 47692\nf 47689 47693 48227\nf 47689 48227 48223\nf 47690 48220 48224\nf 47690 48224 47694\nf 47691 47695 48229\nf 47691 48229 48225\nf 47692 48222 48226\nf 47692 48226 47696\nf 47693 47697 48231\nf 47693 48231 48227\nf 47694 48224 48228\nf 47694 48228 47699\nf 47695 47700 48234\nf 47695 48234 48229\nf 47696 48226 48230\nf 47696 48230 47701\nf 47697 47698 48232\nf 47697 48232 48231\nf 47698 47702 48232\nf 47699 48228 48233\nf 47699 48233 47709\nf 47700 47711 48244\nf 47700 48244 48234\nf 47701 48230 48235\nf 47701 48235 47712\nf 47702 47703 48237\nf 47702 48236 48232\nf 47702 48237 48236\nf 47703 47704 48237\nf 47704 47705 48238\nf 47704 48238 48237\nf 47705 47706 48239\nf 47705 48239 48238\nf 47706 47713 48240\nf 47706 48240 48239\nf 47707 47708 48241\nf 47707 47797 47795\nf 47707 48241 48329\nf 47707 48329 47797\nf 47708 47710 48241\nf 47709 48233 48242\nf 47709 48242 47710\nf 47710 48242 48243\nf 47710 48243 48241\nf 47711 47798 48331\nf 47711 48331 48244\nf 47712 48235 48245\nf 47712 48245 47800\nf 47713 47714 48247\nf 47713 48246 48240\nf 47713 48247 48246\nf 47714 47715 48247\nf 47715 47716 48248\nf 47715 48248 48247\nf 47716 47717 48249\nf 47716 48249 48248\nf 47717 47718 48250\nf 47717 48250 48249\nf 47718 47719 48251\nf 47718 48251 48250\nf 47719 47720 48252\nf 47719 48252 48251\nf 47720 47721 48253\nf 47720 48253 48252\nf 47721 47722 48254\nf 47721 48254 48253\nf 47722 47723 48255\nf 47722 48255 48254\nf 47723 47724 48256\nf 47723 48256 48255\nf 47724 47725 48257\nf 47724 48257 48256\nf 47725 47726 48258\nf 47725 48258 48257\nf 47726 47727 48259\nf 47726 48259 48258\nf 47727 47728 48260\nf 47727 48260 48259\nf 47728 47729 48261\nf 47728 48261 48260\nf 47729 47730 48262\nf 47729 48262 48261\nf 47730 47731 48263\nf 47730 48263 48262\nf 47731 47732 48264\nf 47731 48264 48263\nf 47732 47733 48265\nf 47732 48265 48264\nf 47733 47734 48266\nf 47733 48266 48265\nf 47734 47735 48267\nf 47734 48267 48266\nf 47735 47736 48268\nf 47735 48268 48267\nf 47736 47737 48269\nf 47736 48269 48268\nf 47737 47738 48270\nf 47737 48270 48269\nf 47738 47739 48271\nf 47738 48271 48270\nf 47739 47740 48272\nf 47739 48272 48271\nf 47740 47741 48273\nf 47740 48273 48272\nf 47741 47742 48274\nf 47741 48274 48273\nf 47742 47743 48275\nf 47742 48275 48274\nf 47743 47744 48276\nf 47743 48276 48275\nf 47744 47745 48277\nf 47744 48277 48276\nf 47745 47746 48278\nf 47745 48278 48277\nf 47746 47747 48279\nf 47746 48279 48278\nf 47747 47748 48280\nf 47747 48280 48279\nf 47748 47749 48281\nf 47748 48281 48280\nf 47749 47750 48282\nf 47749 48282 48281\nf 47750 47751 48283\nf 47750 48283 48282\nf 47751 47752 48284\nf 47751 48284 48283\nf 47752 47753 48285\nf 47752 48285 48284\nf 47753 47754 48286\nf 47753 48286 48285\nf 47754 47755 48287\nf 47754 48287 48286\nf 47755 47756 48288\nf 47755 48288 48287\nf 47756 47757 48289\nf 47756 48289 48288\nf 47757 47758 48290\nf 47757 48290 48289\nf 47758 47759 48291\nf 47758 48291 48290\nf 47759 47760 48292\nf 47759 48292 48291\nf 47760 47761 48293\nf 47760 48293 48292\nf 47761 47762 48294\nf 47761 48294 48293\nf 47762 47763 48295\nf 47762 48295 48294\nf 47763 47764 48296\nf 47763 48296 48295\nf 47764 47765 48297\nf 47764 48297 48296\nf 47765 47766 48298\nf 47765 48298 48297\nf 47766 47767 48299\nf 47766 48299 48298\nf 47767 47768 48300\nf 47767 48300 48299\nf 47768 47769 48301\nf 47768 48301 48300\nf 47769 47770 48302\nf 47769 48302 48301\nf 47770 47771 48303\nf 47770 48303 48302\nf 47771 47772 48304\nf 47771 48304 48303\nf 47772 47773 48305\nf 47772 48305 48304\nf 47773 47774 48306\nf 47773 48306 48305\nf 47774 47775 48307\nf 47774 48307 48306\nf 47775 47776 48308\nf 47775 48308 48307\nf 47776 47777 48309\nf 47776 48309 48308\nf 47777 47778 48310\nf 47777 48310 48309\nf 47778 47779 48311\nf 47778 48311 48310\nf 47779 47780 48312\nf 47779 48312 48311\nf 47780 47781 48313\nf 47780 48313 48312\nf 47781 47782 48314\nf 47781 48314 48313\nf 47782 47783 48315\nf 47782 48315 48314\nf 47783 47784 48316\nf 47783 48316 48315\nf 47784 47785 48317\nf 47784 48317 48316\nf 47785 47786 48318\nf 47785 48318 48317\nf 47786 47787 48319\nf 47786 48319 48318\nf 47787 47788 48320\nf 47787 48320 48319\nf 47788 47789 48321\nf 47788 48321 48320\nf 47789 47790 48322\nf 47789 48322 48321\nf 47790 47791 48323\nf 47790 48323 48322\nf 47791 47792 48324\nf 47791 48324 48323\nf 47792 47793 48325\nf 47792 48325 48324\nf 47793 47794 48326\nf 47793 48326 48325\nf 47794 47796 48327\nf 47794 48327 48326\nf 47795 47797 47796\nf 47796 47797 48330\nf 47796 48328 48327\nf 47796 48330 48328\nf 47797 48329 48330\nf 47798 47799 48331\nf 47799 47801 48334\nf 47799 48332 48331\nf 47799 48334 48332\nf 47800 48245 48333\nf 47800 48333 47802\nf 47801 47804 48337\nf 47801 48337 48334\nf 47802 48333 48335\nf 47802 48335 48336\nf 47802 48336 47803\nf 47803 48336 47806\nf 47804 47805 48337\nf 47805 47807 48340\nf 47805 48338 48337\nf 47805 48340 48338\nf 47806 48336 48339\nf 47806 48339 47808\nf 47807 47810 48343\nf 47807 48343 48340\nf 47808 48339 48341\nf 47808 48341 47812\nf 47809 47817 48350\nf 47809 48342 48344\nf 47809 48344 47811\nf 47809 48350 48342\nf 47810 47811 48343\nf 47811 48344 48343\nf 47812 48341 48345\nf 47812 48345 48346\nf 47812 48346 47813\nf 47813 48346 47819\nf 47814 47908 48440\nf 47814 48347 48348\nf 47814 48348 47815\nf 47814 48440 48347\nf 47815 48348 48349\nf 47815 48349 47816\nf 47816 48349 48351\nf 47816 48351 47818\nf 47817 47818 48350\nf 47818 48351 48350\nf 47819 48346 48352\nf 47819 48352 48353\nf 47819 48353 47820\nf 47820 48353 48354\nf 47820 48354 47821\nf 47821 48354 47910\nf 47822 47914 47916\nf 47822 47916 48447\nf 47822 48355 47823\nf 47822 48447 48355\nf 47823 48355 48356\nf 47823 48356 47824\nf 47824 48356 48357\nf 47824 48357 47825\nf 47825 48357 48358\nf 47825 48358 47826\nf 47826 48358 48359\nf 47826 48359 47827\nf 47827 48359 48360\nf 47827 48360 47828\nf 47828 48360 48361\nf 47828 48361 47829\nf 47829 48361 48362\nf 47829 48362 47830\nf 47830 48362 48363\nf 47830 48363 47831\nf 47831 48363 48364\nf 47831 48364 47832\nf 47832 48364 48365\nf 47832 48365 47833\nf 47833 48365 48366\nf 47833 48366 47834\nf 47834 48366 48367\nf 47834 48367 47835\nf 47835 48367 48368\nf 47835 48368 47836\nf 47836 48368 48369\nf 47836 48369 47837\nf 47837 48369 48370\nf 47837 48370 47838\nf 47838 48370 48371\nf 47838 48371 47839\nf 47839 48371 48372\nf 47839 48372 47840\nf 47840 48372 48373\nf 47840 48373 47841\nf 47841 48373 48374\nf 47841 48374 47842\nf 47842 48374 48375\nf 47842 48375 47843\nf 47843 48375 48376\nf 47843 48376 47844\nf 47844 48376 48377\nf 47844 48377 47845\nf 47845 48377 48378\nf 47845 48378 47846\nf 47846 48378 48379\nf 47846 48379 47847\nf 47847 48379 48380\nf 47847 48380 47848\nf 47848 48380 48381\nf 47848 48381 47849\nf 47849 48381 48382\nf 47849 48382 47850\nf 47850 48382 48383\nf 47850 48383 47851\nf 47851 48383 48384\nf 47851 48384 47852\nf 47852 48384 48385\nf 47852 48385 47853\nf 47853 48385 48386\nf 47853 48386 47854\nf 47854 48386 48387\nf 47854 48387 47855\nf 47855 48387 48388\nf 47855 48388 47856\nf 47856 48388 48389\nf 47856 48389 47857\nf 47857 48389 48390\nf 47857 48390 47858\nf 47858 48390 48391\nf 47858 48391 47859\nf 47859 48391 48392\nf 47859 48392 47860\nf 47860 48392 48393\nf 47860 48393 47861\nf 47861 48393 48394\nf 47861 48394 47862\nf 47862 48394 48395\nf 47862 48395 47863\nf 47863 48395 48396\nf 47863 48396 47864\nf 47864 48396 48397\nf 47864 48397 47865\nf 47865 48397 48398\nf 47865 48398 47866\nf 47866 48398 48399\nf 47866 48399 47867\nf 47867 48399 48400\nf 47867 48400 47868\nf 47868 48400 48401\nf 47868 48401 47869\nf 47869 48401 48402\nf 47869 48402 47870\nf 47870 48402 48403\nf 47870 48403 47871\nf 47871 48403 48404\nf 47871 48404 47872\nf 47872 48404 48405\nf 47872 48405 47873\nf 47873 48405 48406\nf 47873 48406 47874\nf 47874 48406 48407\nf 47874 48407 47875\nf 47875 48407 48408\nf 47875 48408 47876\nf 47876 48408 48409\nf 47876 48409 47877\nf 47877 48409 48410\nf 47877 48410 47878\nf 47878 48410 48411\nf 47878 48411 47879\nf 47879 48411 48412\nf 47879 48412 47880\nf 47880 48412 48413\nf 47880 48413 47881\nf 47881 48413 48414\nf 47881 48414 47882\nf 47882 48414 48415\nf 47882 48415 47883\nf 47883 48415 48416\nf 47883 48416 47884\nf 47884 48416 48417\nf 47884 48417 47885\nf 47885 48417 48418\nf 47885 48418 47886\nf 47886 48418 48419\nf 47886 48419 47887\nf 47887 48419 48420\nf 47887 48420 47888\nf 47888 48420 48421\nf 47888 48421 47889\nf 47889 48421 48422\nf 47889 48422 47890\nf 47890 48422 48423\nf 47890 48423 47891\nf 47891 48423 48424\nf 47891 48424 47892\nf 47892 48424 48425\nf 47892 48425 47893\nf 47893 48425 48426\nf 47893 48426 47894\nf 47894 48426 48427\nf 47894 48427 47895\nf 47895 48427 48428\nf 47895 48428 47896\nf 47896 48428 48429\nf 47896 48429 47897\nf 47897 48429 48430\nf 47897 48430 47898\nf 47898 48430 48431\nf 47898 48431 47899\nf 47899 48431 48432\nf 47899 48432 47900\nf 47900 48432 48433\nf 47900 48433 47901\nf 47901 48433 48434\nf 47901 48434 47902\nf 47902 48434 48435\nf 47902 48435 47903\nf 47903 48435 48436\nf 47903 48436 47904\nf 47904 48436 48437\nf 47904 48437 47905\nf 47905 48437 48438\nf 47905 48438 47906\nf 47906 48438 48439\nf 47906 48439 47907\nf 47907 48439 48441\nf 47907 48441 47909\nf 47908 47909 48440\nf 47909 48441 48440\nf 47910 48354 48442\nf 47910 48442 48443\nf 47910 48443 47911\nf 47911 48443 48444\nf 47911 48444 47912\nf 47912 48444 48445\nf 47912 48445 47913\nf 47913 48445 48446\nf 47913 48446 47915\nf 47914 47915 47916\nf 47915 48446 48448\nf 47915 48448 47916\nf 47916 48448 48447\nf 47917 47918 48449\nf 47917 47921 47919\nf 47917 48449 48451\nf 47917 48451 47921\nf 47918 47922 48449\nf 47919 47921 47920\nf 47920 47921 48452\nf 47920 48450 48456\nf 47920 48452 48450\nf 47920 48456 47924\nf 47921 48451 48452\nf 47922 47923 48455\nf 47922 48453 48449\nf 47922 48455 48453\nf 47923 47926 48455\nf 47924 48456 47925\nf 47925 48456 48457\nf 47925 48457 48459\nf 47925 48459 47927\nf 47926 47929 48461\nf 47926 48458 48455\nf 47926 48461 48458\nf 47927 48459 47928\nf 47928 48459 48460\nf 47928 48460 48463\nf 47928 48463 47931\nf 47929 47930 48462\nf 47929 48462 48461\nf 47930 47932 48462\nf 47931 48463 47933\nf 47932 47934 48466\nf 47932 48464 48462\nf 47932 48466 48464\nf 47933 48463 48465\nf 47933 48465 47935\nf 47934 47936 48468\nf 47934 48468 48466\nf 47935 48465 48467\nf 47935 48467 47937\nf 47936 47938 48470\nf 47936 48470 48468\nf 47937 48467 48469\nf 47937 48469 47939\nf 47938 47940 48472\nf 47938 48472 48470\nf 47939 48469 48471\nf 47939 48471 47941\nf 47940 47942 48474\nf 47940 48474 48472\nf 47941 48471 48473\nf 47941 48473 47943\nf 47942 47944 48476\nf 47942 48476 48474\nf 47943 48473 48475\nf 47943 48475 47945\nf 47944 47946 48479\nf 47944 48479 48476\nf 47945 48475 48478\nf 47945 48478 47947\nf 47946 47948 48482\nf 47946 48482 48479\nf 47947 48478 48481\nf 47947 48481 47949\nf 47948 47950 48485\nf 47948 48485 48482\nf 47949 48481 48484\nf 47949 48484 47951\nf 47950 47952 48487\nf 47950 48487 48485\nf 47951 48484 48486\nf 47951 48486 47953\nf 47952 47954 48489\nf 47952 48489 48487\nf 47953 48486 48488\nf 47953 48488 47955\nf 47954 47956 48491\nf 47954 48491 48489\nf 47955 48488 48490\nf 47955 48490 47957\nf 47956 47958 48494\nf 47956 48494 48491\nf 47957 48490 48492\nf 47957 48492 47959\nf 47958 47962 48496\nf 47958 48496 48494\nf 47959 47961 47960\nf 47959 48492 48493\nf 47959 48493 47961\nf 47960 47961 47964\nf 47961 48493 48495\nf 47961 48495 47964\nf 47962 47963 48496\nf 47963 47965 48499\nf 47963 48497 48496\nf 47963 48499 48497\nf 47964 48495 48498\nf 47964 48498 47966\nf 47965 47967 48501\nf 47965 48501 48499\nf 47966 48498 48500\nf 47966 48500 47968\nf 47967 47969 48503\nf 47967 48503 48501\nf 47968 48500 48502\nf 47968 48502 47970\nf 47969 47971 48505\nf 47969 48505 48503\nf 47970 48502 48504\nf 47970 48504 47972\nf 47971 47973 48507\nf 47971 48507 48505\nf 47972 48504 48506\nf 47972 48506 47974\nf 47973 47975 48509\nf 47973 48509 48507\nf 47974 48506 48508\nf 47974 48508 47976\nf 47975 47977 48509\nf 47976 48508 48512\nf 47976 48512 47979\nf 47977 47978 48509\nf 47977 47980 47982\nf 47977 47982 47978\nf 47978 47982 48513\nf 47978 48510 48509\nf 47978 48513 48510\nf 47979 48512 48514\nf 47979 48514 47983\nf 47980 47981 47982\nf 47981 47985 48515\nf 47981 48515 47982\nf 47982 48515 48513\nf 47983 48514 48516\nf 47983 48516 48518\nf 47983 48518 47984\nf 47984 47988 47986\nf 47984 48518 47988\nf 47985 47989 48519\nf 47985 48517 48515\nf 47985 48519 48517\nf 47986 47988 47987\nf 47987 47988 47990\nf 47988 48518 47990\nf 47989 47991 48521\nf 47989 48521 48519\nf 47990 48518 48520\nf 47990 48520 47992\nf 47991 47993 48521\nf 47992 48520 48523\nf 47992 48523 47996\nf 47993 47994 47995\nf 47993 47995 48521\nf 47994 47997 48524\nf 47994 48524 47995\nf 47995 48522 48521\nf 47995 48524 48522\nf 47996 48523 48525\nf 47996 48525 47998\nf 47997 47999 48527\nf 47997 48527 48524\nf 47998 48525 48530\nf 47998 48530 48001\nf 47999 48000 48527\nf 47999 48002 48004\nf 47999 48004 48000\nf 48000 48004 48532\nf 48000 48528 48527\nf 48000 48532 48528\nf 48001 48530 48534\nf 48001 48534 48005\nf 48002 48003 48004\nf 48003 48006 48007\nf 48003 48007 48537\nf 48003 48537 48004\nf 48004 48536 48532\nf 48004 48537 48536\nf 48005 48534 48539\nf 48005 48539 48008\nf 48006 48010 48011\nf 48006 48011 48007\nf 48007 48009 48540\nf 48007 48011 48009\nf 48007 48540 48537\nf 48008 48009 48012\nf 48008 48539 48541\nf 48008 48541 48009\nf 48009 48011 48013\nf 48009 48013 48012\nf 48009 48541 48540\nf 48010 48014 48015\nf 48010 48015 48011\nf 48011 48015 48013\nf 48012 48013 48016\nf 48013 48015 48018\nf 48013 48018 48016\nf 48014 48019 48021\nf 48014 48021 48015\nf 48015 48021 48018\nf 48016 48018 48017\nf 48017 48018 48020\nf 48018 48021 48020\nf 48019 48020 48021\nf 48022 48025 48026\nf 48022 48026 48023\nf 48023 48026 48024\nf 48024 48026 48028\nf 48024 48028 48027\nf 48025 48029 48030\nf 48025 48030 48026\nf 48026 48030 48028\nf 48027 48028 48032\nf 48028 48030 48033\nf 48028 48033 48032\nf 48029 48031 48543\nf 48029 48543 48030\nf 48030 48543 48544\nf 48030 48544 48033\nf 48031 48034 48035\nf 48031 48035 48546\nf 48031 48546 48543\nf 48032 48033 48549\nf 48032 48549 48036\nf 48033 48544 48545\nf 48033 48545 48549\nf 48034 48037 48550\nf 48034 48548 48035\nf 48034 48550 48548\nf 48035 48548 48546\nf 48036 48549 48039\nf 48037 48038 48042\nf 48037 48042 48554\nf 48037 48554 48550\nf 48038 48041 48042\nf 48039 48549 48552\nf 48039 48552 48040\nf 48040 48552 48553\nf 48040 48553 48556\nf 48040 48556 48043\nf 48041 48044 48557\nf 48041 48555 48042\nf 48041 48557 48555\nf 48042 48555 48554\nf 48043 48556 48045\nf 48044 48046 48560\nf 48044 48560 48557\nf 48045 48556 48559\nf 48045 48559 48047\nf 48046 48048 48563\nf 48046 48563 48560\nf 48047 48559 48562\nf 48047 48562 48049\nf 48048 48050 48566\nf 48048 48566 48563\nf 48049 48562 48565\nf 48049 48565 48051\nf 48050 48052 48569\nf 48050 48569 48566\nf 48051 48565 48568\nf 48051 48568 48053\nf 48052 48054 48571\nf 48052 48571 48569\nf 48053 48568 48570\nf 48053 48570 48055\nf 48054 48056 48573\nf 48054 48573 48571\nf 48055 48570 48572\nf 48055 48572 48057\nf 48056 48058 48575\nf 48056 48575 48573\nf 48057 48572 48574\nf 48057 48574 48059\nf 48058 48061 48579\nf 48058 48579 48575\nf 48059 48574 48576\nf 48059 48576 48060\nf 48060 48576 48577\nf 48060 48577 48580\nf 48060 48580 48062\nf 48061 48063 48581\nf 48061 48581 48579\nf 48062 48580 48064\nf 48063 48065 48583\nf 48063 48583 48581\nf 48064 48580 48582\nf 48064 48582 48066\nf 48065 48067 48585\nf 48065 48585 48583\nf 48066 48582 48584\nf 48066 48584 48068\nf 48067 48069 48587\nf 48067 48587 48585\nf 48068 48584 48586\nf 48068 48586 48071\nf 48069 48070 48589\nf 48069 48589 48587\nf 48070 48072 48073\nf 48070 48073 48589\nf 48071 48586 48588\nf 48071 48588 48074\nf 48072 48075 48592\nf 48072 48592 48073\nf 48073 48590 48589\nf 48073 48592 48590\nf 48074 48588 48591\nf 48074 48591 48076\nf 48075 48077 48595\nf 48075 48595 48592\nf 48076 48591 48593\nf 48076 48593 48078\nf 48077 48081 48597\nf 48077 48597 48595\nf 48078 48080 48079\nf 48078 48593 48080\nf 48079 48080 48596\nf 48079 48596 48082\nf 48080 48593 48594\nf 48080 48594 48596\nf 48081 48083 48599\nf 48081 48599 48597\nf 48082 48596 48598\nf 48082 48598 48084\nf 48083 48085 48601\nf 48083 48601 48599\nf 48084 48598 48600\nf 48084 48600 48086\nf 48085 48087 48603\nf 48085 48603 48601\nf 48086 48600 48602\nf 48086 48602 48088\nf 48087 48089 48605\nf 48087 48605 48603\nf 48088 48602 48604\nf 48088 48604 48090\nf 48089 48091 48607\nf 48089 48607 48605\nf 48090 48604 48606\nf 48090 48606 48092\nf 48091 48093 48609\nf 48091 48609 48607\nf 48092 48606 48608\nf 48092 48608 48094\nf 48093 48095 48611\nf 48093 48611 48609\nf 48094 48608 48610\nf 48094 48610 48097\nf 48095 48096 48611\nf 48096 48098 48614\nf 48096 48612 48611\nf 48096 48614 48612\nf 48097 48610 48613\nf 48097 48613 48099\nf 48098 48100 48616\nf 48098 48616 48614\nf 48099 48613 48615\nf 48099 48615 48101\nf 48100 48103 48619\nf 48100 48619 48616\nf 48101 48615 48617\nf 48101 48617 48102\nf 48102 48617 48618\nf 48102 48618 48620\nf 48102 48620 48104\nf 48103 48105 48621\nf 48103 48621 48619\nf 48104 48620 48107\nf 48105 48106 48621\nf 48106 48108 48624\nf 48106 48622 48621\nf 48106 48624 48622\nf 48107 48620 48623\nf 48107 48623 48109\nf 48108 48110 48626\nf 48108 48626 48624\nf 48109 48623 48625\nf 48109 48625 48112\nf 48110 48111 48626\nf 48111 48113 48629\nf 48111 48627 48626\nf 48111 48629 48627\nf 48112 48625 48628\nf 48112 48628 48115\nf 48113 48114 48629\nf 48114 48117 48635\nf 48114 48630 48629\nf 48114 48635 48630\nf 48115 48628 48631\nf 48115 48631 48632\nf 48115 48632 48116\nf 48116 48632 48634\nf 48116 48634 48119\nf 48117 48118 48635\nf 48118 48120 48122\nf 48118 48122 48634\nf 48118 48634 48636\nf 48118 48636 48635\nf 48119 48122 48121\nf 48119 48634 48122\nf 48120 48121 48122\nf 48123 48124 48638\nf 48123 48638 48648\nf 48123 48648 48133\nf 48124 48125 48639\nf 48124 48639 48638\nf 48125 48126 48640\nf 48125 48640 48639\nf 48126 48127 48641\nf 48126 48641 48640\nf 48127 48128 48642\nf 48127 48642 48641\nf 48128 48129 48643\nf 48128 48643 48642\nf 48129 48130 48644\nf 48129 48644 48643\nf 48130 48131 48645\nf 48130 48645 48644\nf 48131 48135 48646\nf 48131 48646 48645\nf 48132 48134 48647\nf 48132 48647 48653\nf 48132 48653 48138\nf 48133 48648 48134\nf 48134 48648 48649\nf 48134 48649 48647\nf 48135 48136 48651\nf 48135 48650 48646\nf 48135 48651 48650\nf 48136 48137 48651\nf 48137 48140 48652\nf 48137 48652 48651\nf 48138 48653 48139\nf 48139 48653 48654\nf 48139 48654 48657\nf 48139 48657 48142\nf 48140 48141 48656\nf 48140 48655 48652\nf 48140 48656 48655\nf 48141 48143 48656\nf 48142 48657 48145\nf 48143 48144 48659\nf 48143 48658 48656\nf 48143 48659 48658\nf 48144 48146 48659\nf 48145 48657 48660\nf 48145 48660 48148\nf 48146 48147 48663\nf 48146 48662 48659\nf 48146 48663 48662\nf 48147 48151 48663\nf 48148 48660 48664\nf 48148 48664 48665\nf 48148 48665 48149\nf 48149 48665 48666\nf 48149 48666 48150\nf 48150 48666 48152\nf 48151 48155 48671\nf 48151 48667 48663\nf 48151 48671 48667\nf 48152 48666 48668\nf 48152 48668 48669\nf 48152 48669 48153\nf 48153 48669 48670\nf 48153 48670 48154\nf 48154 48670 48156\nf 48155 48161 48678\nf 48155 48678 48671\nf 48156 48670 48672\nf 48156 48672 48673\nf 48156 48673 48157\nf 48157 48673 48675\nf 48157 48675 48158\nf 48158 48675 48676\nf 48158 48676 48159\nf 48159 48676 48677\nf 48159 48677 48160\nf 48160 48677 48163\nf 48161 48162 48678\nf 48162 48167 48686\nf 48162 48679 48678\nf 48162 48686 48679\nf 48163 48677 48680\nf 48163 48680 48681\nf 48163 48681 48164\nf 48164 48681 48683\nf 48164 48683 48165\nf 48165 48683 48684\nf 48165 48684 48166\nf 48166 48684 48685\nf 48166 48685 48169\nf 48167 48168 48686\nf 48168 48174 48692\nf 48168 48687 48686\nf 48168 48692 48687\nf 48169 48171 48170\nf 48169 48685 48171\nf 48170 48171 48689\nf 48170 48689 48172\nf 48171 48685 48688\nf 48171 48688 48689\nf 48172 48689 48690\nf 48172 48690 48173\nf 48173 48690 48693\nf 48173 48693 48175\nf 48174 48175 48692\nf 48175 48693 48692\nf 48176 48184 48695\nf 48176 48695 48701\nf 48176 48701 48182\nf 48177 48178 48696\nf 48177 48696 48705\nf 48177 48705 48186\nf 48178 48179 48697\nf 48178 48697 48696\nf 48179 48180 48698\nf 48179 48698 48697\nf 48180 48181 48699\nf 48180 48699 48698\nf 48181 48187 48700\nf 48181 48700 48699\nf 48182 48701 48183\nf 48183 48701 48702\nf 48183 48702 48707\nf 48183 48707 48188\nf 48184 48185 48704\nf 48184 48703 48695\nf 48184 48704 48703\nf 48185 48189 48704\nf 48186 48705 48191\nf 48187 48193 48710\nf 48187 48706 48700\nf 48187 48710 48706\nf 48188 48707 48195\nf 48189 48190 48198\nf 48189 48198 48714\nf 48189 48708 48704\nf 48189 48714 48708\nf 48190 48197 48198\nf 48191 48705 48709\nf 48191 48709 48716\nf 48191 48716 48192\nf 48192 48201 48199\nf 48192 48716 48201\nf 48193 48194 48711\nf 48193 48711 48710\nf 48194 48202 48711\nf 48195 48707 48712\nf 48195 48712 48196\nf 48196 48712 48713\nf 48196 48713 48718\nf 48196 48718 48203\nf 48197 48204 48719\nf 48197 48715 48198\nf 48197 48719 48715\nf 48198 48715 48714\nf 48199 48201 48200\nf 48200 48201 48205\nf 48201 48716 48205\nf 48202 48207 48721\nf 48202 48717 48711\nf 48202 48721 48717\nf 48203 48718 48208\nf 48204 48209 48723\nf 48204 48723 48719\nf 48205 48716 48720\nf 48205 48720 48724\nf 48205 48724 48206\nf 48206 48211 48210\nf 48206 48724 48211\nf 48207 48212 48726\nf 48207 48726 48721\nf 48208 48718 48722\nf 48208 48722 48214\nf 48209 48215 48729\nf 48209 48729 48723\nf 48210 48211 48730\nf 48210 48730 48216\nf 48211 48724 48725\nf 48211 48725 48730\nf 48212 48213 48727\nf 48212 48727 48726\nf 48213 48217 48727\nf 48214 48722 48728\nf 48214 48728 48218\nf 48215 48219 48734\nf 48215 48734 48729\nf 48216 48730 48220\nf 48217 48221 48736\nf 48217 48731 48727\nf 48217 48736 48731\nf 48218 48728 48733\nf 48218 48733 48222\nf 48219 48223 48738\nf 48219 48738 48734\nf 48220 48730 48735\nf 48220 48735 48224\nf 48221 48225 48740\nf 48221 48740 48736\nf 48222 48733 48737\nf 48222 48737 48226\nf 48223 48227 48742\nf 48223 48742 48738\nf 48224 48735 48739\nf 48224 48739 48228\nf 48225 48229 48744\nf 48225 48744 48740\nf 48226 48737 48741\nf 48226 48741 48230\nf 48227 48231 48746\nf 48227 48746 48742\nf 48228 48739 48743\nf 48228 48743 48233\nf 48229 48234 48749\nf 48229 48749 48744\nf 48230 48741 48745\nf 48230 48745 48235\nf 48231 48232 48747\nf 48231 48747 48746\nf 48232 48236 48747\nf 48233 48743 48748\nf 48233 48748 48242\nf 48234 48244 48759\nf 48234 48759 48749\nf 48235 48745 48750\nf 48235 48750 48245\nf 48236 48237 48752\nf 48236 48751 48747\nf 48236 48752 48751\nf 48237 48238 48752\nf 48238 48239 48753\nf 48238 48753 48752\nf 48239 48240 48754\nf 48239 48754 48753\nf 48240 48246 48755\nf 48240 48755 48754\nf 48241 48243 48756\nf 48241 48756 48844\nf 48241 48844 48329\nf 48242 48748 48757\nf 48242 48757 48243\nf 48243 48757 48758\nf 48243 48758 48756\nf 48244 48331 48846\nf 48244 48846 48759\nf 48245 48750 48760\nf 48245 48760 48333\nf 48246 48247 48762\nf 48246 48761 48755\nf 48246 48762 48761\nf 48247 48248 48762\nf 48248 48249 48763\nf 48248 48763 48762\nf 48249 48250 48764\nf 48249 48764 48763\nf 48250 48251 48765\nf 48250 48765 48764\nf 48251 48252 48766\nf 48251 48766 48765\nf 48252 48253 48767\nf 48252 48767 48766\nf 48253 48254 48768\nf 48253 48768 48767\nf 48254 48255 48769\nf 48254 48769 48768\nf 48255 48256 48770\nf 48255 48770 48769\nf 48256 48257 48771\nf 48256 48771 48770\nf 48257 48258 48772\nf 48257 48772 48771\nf 48258 48259 48773\nf 48258 48773 48772\nf 48259 48260 48774\nf 48259 48774 48773\nf 48260 48261 48775\nf 48260 48775 48774\nf 48261 48262 48776\nf 48261 48776 48775\nf 48262 48263 48777\nf 48262 48777 48776\nf 48263 48264 48778\nf 48263 48778 48777\nf 48264 48265 48779\nf 48264 48779 48778\nf 48265 48266 48780\nf 48265 48780 48779\nf 48266 48267 48781\nf 48266 48781 48780\nf 48267 48268 48782\nf 48267 48782 48781\nf 48268 48269 48783\nf 48268 48783 48782\nf 48269 48270 48784\nf 48269 48784 48783\nf 48270 48271 48785\nf 48270 48785 48784\nf 48271 48272 48786\nf 48271 48786 48785\nf 48272 48273 48787\nf 48272 48787 48786\nf 48273 48274 48788\nf 48273 48788 48787\nf 48274 48275 48789\nf 48274 48789 48788\nf 48275 48276 48790\nf 48275 48790 48789\nf 48276 48277 48791\nf 48276 48791 48790\nf 48277 48278 48792\nf 48277 48792 48791\nf 48278 48279 48793\nf 48278 48793 48792\nf 48279 48280 48794\nf 48279 48794 48793\nf 48280 48281 48795\nf 48280 48795 48794\nf 48281 48282 48796\nf 48281 48796 48795\nf 48282 48283 48797\nf 48282 48797 48796\nf 48283 48284 48798\nf 48283 48798 48797\nf 48284 48285 48799\nf 48284 48799 48798\nf 48285 48286 48800\nf 48285 48800 48799\nf 48286 48287 48801\nf 48286 48801 48800\nf 48287 48288 48802\nf 48287 48802 48801\nf 48288 48289 48803\nf 48288 48803 48802\nf 48289 48290 48804\nf 48289 48804 48803\nf 48290 48291 48805\nf 48290 48805 48804\nf 48291 48292 48806\nf 48291 48806 48805\nf 48292 48293 48807\nf 48292 48807 48806\nf 48293 48294 48808\nf 48293 48808 48807\nf 48294 48295 48809\nf 48294 48809 48808\nf 48295 48296 48810\nf 48295 48810 48809\nf 48296 48297 48811\nf 48296 48811 48810\nf 48297 48298 48812\nf 48297 48812 48811\nf 48298 48299 48813\nf 48298 48813 48812\nf 48299 48300 48814\nf 48299 48814 48813\nf 48300 48301 48815\nf 48300 48815 48814\nf 48301 48302 48816\nf 48301 48816 48815\nf 48302 48303 48817\nf 48302 48817 48816\nf 48303 48304 48818\nf 48303 48818 48817\nf 48304 48305 48819\nf 48304 48819 48818\nf 48305 48306 48820\nf 48305 48820 48819\nf 48306 48307 48821\nf 48306 48821 48820\nf 48307 48308 48822\nf 48307 48822 48821\nf 48308 48309 48823\nf 48308 48823 48822\nf 48309 48310 48824\nf 48309 48824 48823\nf 48310 48311 48825\nf 48310 48825 48824\nf 48311 48312 48826\nf 48311 48826 48825\nf 48312 48313 48827\nf 48312 48827 48826\nf 48313 48314 48828\nf 48313 48828 48827\nf 48314 48315 48829\nf 48314 48829 48828\nf 48315 48316 48830\nf 48315 48830 48829\nf 48316 48317 48831\nf 48316 48831 48830\nf 48317 48318 48832\nf 48317 48832 48831\nf 48318 48319 48833\nf 48318 48833 48832\nf 48319 48320 48834\nf 48319 48834 48833\nf 48320 48321 48835\nf 48320 48835 48834\nf 48321 48322 48836\nf 48321 48836 48835\nf 48322 48323 48837\nf 48322 48837 48836\nf 48323 48324 48838\nf 48323 48838 48837\nf 48324 48325 48839\nf 48324 48839 48838\nf 48325 48326 48840\nf 48325 48840 48839\nf 48326 48327 48841\nf 48326 48841 48840\nf 48327 48328 48842\nf 48327 48842 48841\nf 48328 48330 48843\nf 48328 48843 48842\nf 48329 48844 48330\nf 48330 48844 48845\nf 48330 48845 48843\nf 48331 48332 48846\nf 48332 48334 48849\nf 48332 48847 48846\nf 48332 48849 48847\nf 48333 48760 48848\nf 48333 48848 48335\nf 48334 48337 48852\nf 48334 48852 48849\nf 48335 48848 48850\nf 48335 48850 48851\nf 48335 48851 48336\nf 48336 48851 48339\nf 48337 48338 48852\nf 48338 48340 48855\nf 48338 48853 48852\nf 48338 48855 48853\nf 48339 48851 48854\nf 48339 48854 48341\nf 48340 48343 48858\nf 48340 48858 48855\nf 48341 48854 48856\nf 48341 48856 48345\nf 48342 48350 48865\nf 48342 48857 48859\nf 48342 48859 48344\nf 48342 48865 48857\nf 48343 48344 48858\nf 48344 48859 48858\nf 48345 48856 48860\nf 48345 48860 48861\nf 48345 48861 48346\nf 48346 48861 48352\nf 48347 48440 48955\nf 48347 48862 48863\nf 48347 48863 48348\nf 48347 48955 48862\nf 48348 48863 48864\nf 48348 48864 48349\nf 48349 48864 48866\nf 48349 48866 48351\nf 48350 48351 48865\nf 48351 48866 48865\nf 48352 48861 48867\nf 48352 48867 48868\nf 48352 48868 48353\nf 48353 48868 48869\nf 48353 48869 48354\nf 48354 48869 48442\nf 48355 48447 48962\nf 48355 48870 48871\nf 48355 48871 48356\nf 48355 48962 48870\nf 48356 48871 48872\nf 48356 48872 48357\nf 48357 48872 48873\nf 48357 48873 48358\nf 48358 48873 48874\nf 48358 48874 48359\nf 48359 48874 48875\nf 48359 48875 48360\nf 48360 48875 48876\nf 48360 48876 48361\nf 48361 48876 48877\nf 48361 48877 48362\nf 48362 48877 48878\nf 48362 48878 48363\nf 48363 48878 48879\nf 48363 48879 48364\nf 48364 48879 48880\nf 48364 48880 48365\nf 48365 48880 48881\nf 48365 48881 48366\nf 48366 48881 48882\nf 48366 48882 48367\nf 48367 48882 48883\nf 48367 48883 48368\nf 48368 48883 48884\nf 48368 48884 48369\nf 48369 48884 48885\nf 48369 48885 48370\nf 48370 48885 48886\nf 48370 48886 48371\nf 48371 48886 48887\nf 48371 48887 48372\nf 48372 48887 48888\nf 48372 48888 48373\nf 48373 48888 48889\nf 48373 48889 48374\nf 48374 48889 48890\nf 48374 48890 48375\nf 48375 48890 48891\nf 48375 48891 48376\nf 48376 48891 48892\nf 48376 48892 48377\nf 48377 48892 48893\nf 48377 48893 48378\nf 48378 48893 48894\nf 48378 48894 48379\nf 48379 48894 48895\nf 48379 48895 48380\nf 48380 48895 48896\nf 48380 48896 48381\nf 48381 48896 48897\nf 48381 48897 48382\nf 48382 48897 48898\nf 48382 48898 48383\nf 48383 48898 48899\nf 48383 48899 48384\nf 48384 48899 48900\nf 48384 48900 48385\nf 48385 48900 48901\nf 48385 48901 48386\nf 48386 48901 48902\nf 48386 48902 48387\nf 48387 48902 48903\nf 48387 48903 48388\nf 48388 48903 48904\nf 48388 48904 48389\nf 48389 48904 48905\nf 48389 48905 48390\nf 48390 48905 48906\nf 48390 48906 48391\nf 48391 48906 48907\nf 48391 48907 48392\nf 48392 48907 48908\nf 48392 48908 48393\nf 48393 48908 48909\nf 48393 48909 48394\nf 48394 48909 48910\nf 48394 48910 48395\nf 48395 48910 48911\nf 48395 48911 48396\nf 48396 48911 48912\nf 48396 48912 48397\nf 48397 48912 48913\nf 48397 48913 48398\nf 48398 48913 48914\nf 48398 48914 48399\nf 48399 48914 48915\nf 48399 48915 48400\nf 48400 48915 48916\nf 48400 48916 48401\nf 48401 48916 48917\nf 48401 48917 48402\nf 48402 48917 48918\nf 48402 48918 48403\nf 48403 48918 48919\nf 48403 48919 48404\nf 48404 48919 48920\nf 48404 48920 48405\nf 48405 48920 48921\nf 48405 48921 48406\nf 48406 48921 48922\nf 48406 48922 48407\nf 48407 48922 48923\nf 48407 48923 48408\nf 48408 48923 48924\nf 48408 48924 48409\nf 48409 48924 48925\nf 48409 48925 48410\nf 48410 48925 48926\nf 48410 48926 48411\nf 48411 48926 48927\nf 48411 48927 48412\nf 48412 48927 48928\nf 48412 48928 48413\nf 48413 48928 48929\nf 48413 48929 48414\nf 48414 48929 48930\nf 48414 48930 48415\nf 48415 48930 48931\nf 48415 48931 48416\nf 48416 48931 48932\nf 48416 48932 48417\nf 48417 48932 48933\nf 48417 48933 48418\nf 48418 48933 48934\nf 48418 48934 48419\nf 48419 48934 48935\nf 48419 48935 48420\nf 48420 48935 48936\nf 48420 48936 48421\nf 48421 48936 48937\nf 48421 48937 48422\nf 48422 48937 48938\nf 48422 48938 48423\nf 48423 48938 48939\nf 48423 48939 48424\nf 48424 48939 48940\nf 48424 48940 48425\nf 48425 48940 48941\nf 48425 48941 48426\nf 48426 48941 48942\nf 48426 48942 48427\nf 48427 48942 48943\nf 48427 48943 48428\nf 48428 48943 48944\nf 48428 48944 48429\nf 48429 48944 48945\nf 48429 48945 48430\nf 48430 48945 48946\nf 48430 48946 48431\nf 48431 48946 48947\nf 48431 48947 48432\nf 48432 48947 48948\nf 48432 48948 48433\nf 48433 48948 48949\nf 48433 48949 48434\nf 48434 48949 48950\nf 48434 48950 48435\nf 48435 48950 48951\nf 48435 48951 48436\nf 48436 48951 48952\nf 48436 48952 48437\nf 48437 48952 48953\nf 48437 48953 48438\nf 48438 48953 48954\nf 48438 48954 48439\nf 48439 48954 48956\nf 48439 48956 48441\nf 48440 48441 48955\nf 48441 48956 48955\nf 48442 48869 48957\nf 48442 48957 48958\nf 48442 48958 48443\nf 48443 48958 48959\nf 48443 48959 48444\nf 48444 48959 48960\nf 48444 48960 48445\nf 48445 48960 48961\nf 48445 48961 48446\nf 48446 48961 48963\nf 48446 48963 48448\nf 48447 48448 48962\nf 48448 48963 48962\nf 48449 48453 48454\nf 48449 48454 48451\nf 48450 48452 48964\nf 48450 48964 48968\nf 48450 48968 48456\nf 48451 48454 48452\nf 48452 48454 48966\nf 48452 48965 48964\nf 48452 48966 48965\nf 48453 48455 48966\nf 48453 48966 48454\nf 48455 48458 48967\nf 48455 48967 48966\nf 48456 48968 48457\nf 48457 48968 48969\nf 48457 48969 48971\nf 48457 48971 48459\nf 48458 48461 48973\nf 48458 48970 48967\nf 48458 48973 48970\nf 48459 48971 48460\nf 48460 48971 48972\nf 48460 48972 48975\nf 48460 48975 48463\nf 48461 48462 48974\nf 48461 48974 48973\nf 48462 48464 48974\nf 48463 48975 48465\nf 48464 48466 48978\nf 48464 48976 48974\nf 48464 48978 48976\nf 48465 48975 48977\nf 48465 48977 48467\nf 48466 48468 48980\nf 48466 48980 48978\nf 48467 48977 48979\nf 48467 48979 48469\nf 48468 48470 48982\nf 48468 48982 48980\nf 48469 48979 48981\nf 48469 48981 48471\nf 48470 48472 48984\nf 48470 48984 48982\nf 48471 48981 48983\nf 48471 48983 48473\nf 48472 48474 48986\nf 48472 48986 48984\nf 48473 48983 48985\nf 48473 48985 48475\nf 48474 48476 48986\nf 48475 48985 48989\nf 48475 48989 48478\nf 48476 48477 48987\nf 48476 48479 48477\nf 48476 48987 48986\nf 48477 48479 48480\nf 48477 48480 48992\nf 48477 48990 48987\nf 48477 48992 48990\nf 48478 48989 48991\nf 48478 48991 48481\nf 48479 48482 48480\nf 48480 48482 48483\nf 48480 48483 48994\nf 48480 48994 48992\nf 48481 48991 48993\nf 48481 48993 48484\nf 48482 48485 48997\nf 48482 48997 48483\nf 48483 48995 48994\nf 48483 48997 48995\nf 48484 48993 48996\nf 48484 48996 48486\nf 48485 48487 49000\nf 48485 49000 48997\nf 48486 48996 48999\nf 48486 48999 48488\nf 48487 48489 49002\nf 48487 49002 49000\nf 48488 48999 49001\nf 48488 49001 48490\nf 48489 48491 49004\nf 48489 49004 49002\nf 48490 49001 49003\nf 48490 49003 48492\nf 48491 48494 49007\nf 48491 49007 49004\nf 48492 49003 49005\nf 48492 49005 49006\nf 48492 49006 48493\nf 48493 49006 48495\nf 48494 48496 49009\nf 48494 49009 49007\nf 48495 49006 49008\nf 48495 49008 48498\nf 48496 48497 49009\nf 48497 48499 49013\nf 48497 49010 49009\nf 48497 49013 49010\nf 48498 49008 49012\nf 48498 49012 48500\nf 48499 48501 49015\nf 48499 49015 49013\nf 48500 49012 49014\nf 48500 49014 48502\nf 48501 48503 49017\nf 48501 49017 49015\nf 48502 49014 49016\nf 48502 49016 48504\nf 48503 48505 49019\nf 48503 49019 49017\nf 48504 49016 49018\nf 48504 49018 48506\nf 48505 48507 49022\nf 48505 49022 49019\nf 48506 49018 49021\nf 48506 49021 48508\nf 48507 48509 49022\nf 48508 49021 49025\nf 48508 49025 48512\nf 48509 48510 48511\nf 48509 48511 49022\nf 48510 48513 49026\nf 48510 49026 48511\nf 48511 49023 49022\nf 48511 49026 49023\nf 48512 49025 49027\nf 48512 49027 48514\nf 48513 48515 49030\nf 48513 49028 49026\nf 48513 49030 49028\nf 48514 49027 49029\nf 48514 49029 48516\nf 48515 48517 49032\nf 48515 49032 49030\nf 48516 49029 49031\nf 48516 49031 48518\nf 48517 48519 49034\nf 48517 49034 49032\nf 48518 49031 49033\nf 48518 49033 48520\nf 48519 48521 49036\nf 48519 49036 49034\nf 48520 49033 49035\nf 48520 49035 48523\nf 48521 48522 49036\nf 48522 48524 49042\nf 48522 49037 49036\nf 48522 49042 49037\nf 48523 49035 49039\nf 48523 49039 48525\nf 48524 48527 49042\nf 48525 48526 48530\nf 48525 49039 49040\nf 48525 49040 48526\nf 48526 48531 48530\nf 48526 48533 48531\nf 48526 49040 49045\nf 48526 49045 49047\nf 48526 49047 48533\nf 48527 48528 48529\nf 48527 48529 49042\nf 48528 48532 48533\nf 48528 48533 49047\nf 48528 49047 48529\nf 48529 49043 49042\nf 48529 49046 49043\nf 48529 49047 49046\nf 48530 48531 48534\nf 48531 48533 48535\nf 48531 48535 48534\nf 48532 48536 48538\nf 48532 48538 48533\nf 48533 48538 48535\nf 48534 48535 48539\nf 48535 48538 48542\nf 48535 48542 48539\nf 48536 48537 48538\nf 48537 48540 48542\nf 48537 48542 48538\nf 48539 48542 48541\nf 48540 48541 48542\nf 48543 48546 48547\nf 48543 48547 48544\nf 48544 48547 48545\nf 48545 48547 49050\nf 48545 49049 49051\nf 48545 49050 49049\nf 48545 49051 48549\nf 48546 48548 49050\nf 48546 49050 48547\nf 48548 48550 48551\nf 48548 48551 49053\nf 48548 49053 49050\nf 48549 49051 48552\nf 48550 48554 49058\nf 48550 49055 48551\nf 48550 49058 49055\nf 48551 49055 49053\nf 48552 49051 49056\nf 48552 49056 48553\nf 48553 49056 49057\nf 48553 49057 49060\nf 48553 49060 48556\nf 48554 48555 48558\nf 48554 48558 49062\nf 48554 49062 49058\nf 48555 48557 48558\nf 48556 49060 48559\nf 48557 48560 48561\nf 48557 48561 48558\nf 48558 48561 49062\nf 48559 49060 49064\nf 48559 49064 48562\nf 48560 48563 48564\nf 48560 48564 48561\nf 48561 48564 49065\nf 48561 49065 49062\nf 48562 49064 49066\nf 48562 49066 48565\nf 48563 48566 48567\nf 48563 48567 48564\nf 48564 48567 49067\nf 48564 49067 49065\nf 48565 49066 49068\nf 48565 49068 48568\nf 48566 48569 49072\nf 48566 49070 48567\nf 48566 49072 49070\nf 48567 49069 49067\nf 48567 49070 49069\nf 48568 49068 49071\nf 48568 49071 48570\nf 48569 48571 49075\nf 48569 49075 49072\nf 48570 49071 49074\nf 48570 49074 48572\nf 48571 48573 49078\nf 48571 49078 49075\nf 48572 49074 49077\nf 48572 49077 48574\nf 48573 48575 49082\nf 48573 49082 49078\nf 48574 49077 49080\nf 48574 49080 48576\nf 48575 48579 49084\nf 48575 49084 49082\nf 48576 48578 48577\nf 48576 49080 48578\nf 48577 48578 49083\nf 48577 49083 48580\nf 48578 49080 49081\nf 48578 49081 49083\nf 48579 48581 49086\nf 48579 49086 49084\nf 48580 49083 49085\nf 48580 49085 48582\nf 48581 48583 49088\nf 48581 49088 49086\nf 48582 49085 49087\nf 48582 49087 48584\nf 48583 48585 49090\nf 48583 49090 49088\nf 48584 49087 49089\nf 48584 49089 48586\nf 48585 48587 49092\nf 48585 49092 49090\nf 48586 49089 49091\nf 48586 49091 48588\nf 48587 48589 49094\nf 48587 49094 49092\nf 48588 49091 49093\nf 48588 49093 48591\nf 48589 48590 49094\nf 48590 48592 49097\nf 48590 49095 49094\nf 48590 49097 49095\nf 48591 49093 49096\nf 48591 49096 48593\nf 48592 48595 49102\nf 48592 49102 49097\nf 48593 49096 49099\nf 48593 49099 48594\nf 48594 49099 49100\nf 48594 49100 49103\nf 48594 49103 48596\nf 48595 48597 49104\nf 48595 49104 49102\nf 48596 49103 48598\nf 48597 48599 49106\nf 48597 49106 49104\nf 48598 49103 49105\nf 48598 49105 48600\nf 48599 48601 49108\nf 48599 49108 49106\nf 48600 49105 49107\nf 48600 49107 48602\nf 48601 48603 49110\nf 48601 49110 49108\nf 48602 49107 49109\nf 48602 49109 48604\nf 48603 48605 49112\nf 48603 49112 49110\nf 48604 49109 49111\nf 48604 49111 48606\nf 48605 48607 49114\nf 48605 49114 49112\nf 48606 49111 49113\nf 48606 49113 48608\nf 48607 48609 49116\nf 48607 49116 49114\nf 48608 49113 49115\nf 48608 49115 48610\nf 48609 48611 49118\nf 48609 49118 49116\nf 48610 49115 49117\nf 48610 49117 48613\nf 48611 48612 49118\nf 48612 48614 49121\nf 48612 49119 49118\nf 48612 49121 49119\nf 48613 49117 49120\nf 48613 49120 48615\nf 48614 48616 49123\nf 48614 49123 49121\nf 48615 49120 49122\nf 48615 49122 48617\nf 48616 48619 49126\nf 48616 49126 49123\nf 48617 49122 49124\nf 48617 49124 48618\nf 48618 49124 49125\nf 48618 49125 49127\nf 48618 49127 48620\nf 48619 48621 49128\nf 48619 49128 49126\nf 48620 49127 48623\nf 48621 48622 49128\nf 48622 48624 49131\nf 48622 49129 49128\nf 48622 49131 49129\nf 48623 49127 49130\nf 48623 49130 48625\nf 48624 48626 49133\nf 48624 49133 49131\nf 48625 49130 49132\nf 48625 49132 48628\nf 48626 48627 49133\nf 48627 48629 49140\nf 48627 49134 49133\nf 48627 49140 49134\nf 48628 49132 49136\nf 48628 49136 48631\nf 48629 48630 49140\nf 48630 48635 48637\nf 48630 48637 49139\nf 48630 49139 49141\nf 48630 49141 49140\nf 48631 48633 48632\nf 48631 49136 49137\nf 48631 49137 48633\nf 48632 48633 49145\nf 48632 49145 48634\nf 48633 49137 49143\nf 48633 49143 49145\nf 48634 49145 48636\nf 48635 48636 48637\nf 48636 49144 48637\nf 48636 49145 49144\nf 48637 49144 49139\nf 48638 48639 49147\nf 48638 49147 49157\nf 48638 49157 48648\nf 48639 48640 49148\nf 48639 49148 49147\nf 48640 48641 49149\nf 48640 49149 49148\nf 48641 48642 49150\nf 48641 49150 49149\nf 48642 48643 49151\nf 48642 49151 49150\nf 48643 48644 49152\nf 48643 49152 49151\nf 48644 48645 49153\nf 48644 49153 49152\nf 48645 48646 49154\nf 48645 49154 49153\nf 48646 48650 49155\nf 48646 49155 49154\nf 48647 48649 49156\nf 48647 49156 49162\nf 48647 49162 48653\nf 48648 49157 48649\nf 48649 49157 49158\nf 48649 49158 49156\nf 48650 48651 49160\nf 48650 49159 49155\nf 48650 49160 49159\nf 48651 48652 49160\nf 48652 48655 49161\nf 48652 49161 49160\nf 48653 49162 48654\nf 48654 49162 49163\nf 48654 49163 49166\nf 48654 49166 48657\nf 48655 48656 49165\nf 48655 49164 49161\nf 48655 49165 49164\nf 48656 48658 49165\nf 48657 49166 48660\nf 48658 48659 49169\nf 48658 49168 49165\nf 48658 49169 49168\nf 48659 48662 49169\nf 48660 48661 49171\nf 48660 49166 48661\nf 48660 49171 49174\nf 48660 49174 48664\nf 48661 49166 49167\nf 48661 49167 49170\nf 48661 49170 49171\nf 48662 48663 49173\nf 48662 49172 49169\nf 48662 49173 49172\nf 48663 48667 49173\nf 48664 49174 49175\nf 48664 49175 48665\nf 48665 49175 49176\nf 48665 49176 48666\nf 48666 49176 48668\nf 48667 48671 49182\nf 48667 49177 49173\nf 48667 49182 49177\nf 48668 49176 49178\nf 48668 49178 49179\nf 48668 49179 48669\nf 48669 49179 49180\nf 48669 49180 48670\nf 48670 49180 49181\nf 48670 49181 48672\nf 48671 48678 49188\nf 48671 49188 49182\nf 48672 48674 48673\nf 48672 49181 48674\nf 48673 48674 49184\nf 48673 49184 48675\nf 48674 49181 49183\nf 48674 49183 49184\nf 48675 49184 49185\nf 48675 49185 48676\nf 48676 49185 49186\nf 48676 49186 48677\nf 48677 49186 49187\nf 48677 49187 48680\nf 48678 48679 49188\nf 48679 48686 49196\nf 48679 49189 49188\nf 48679 49196 49189\nf 48680 48682 48681\nf 48680 49187 48682\nf 48681 48682 49191\nf 48681 49191 48683\nf 48682 49187 49190\nf 48682 49190 49191\nf 48683 49191 49192\nf 48683 49192 48684\nf 48684 49192 49193\nf 48684 49193 48685\nf 48685 49193 48688\nf 48686 48687 49196\nf 48687 48692 48694\nf 48687 48694 49195\nf 48687 49195 49197\nf 48687 49197 49196\nf 48688 49193 49198\nf 48688 49198 49200\nf 48688 49200 48689\nf 48689 49200 48690\nf 48690 48691 48693\nf 48690 49199 48691\nf 48690 49200 49199\nf 48691 48694 48693\nf 48691 49194 49195\nf 48691 49195 48694\nf 48691 49199 49194\nf 48692 48693 48694\nf 48695 48703 49202\nf 48695 49202 49208\nf 48695 49208 48701\nf 48696 48697 49203\nf 48696 49203 49212\nf 48696 49212 48705\nf 48697 48698 49204\nf 48697 49204 49203\nf 48698 48699 49205\nf 48698 49205 49204\nf 48699 48700 49206\nf 48699 49206 49205\nf 48700 48706 49207\nf 48700 49207 49206\nf 48701 49208 48702\nf 48702 49208 49209\nf 48702 49209 49214\nf 48702 49214 48707\nf 48703 48704 49211\nf 48703 49210 49202\nf 48703 49211 49210\nf 48704 48708 49211\nf 48705 49212 48709\nf 48706 48710 49217\nf 48706 49213 49207\nf 48706 49217 49213\nf 48707 49214 48712\nf 48708 48714 49221\nf 48708 49215 49211\nf 48708 49221 49215\nf 48709 49212 49216\nf 48709 49216 48716\nf 48710 48711 49218\nf 48710 49218 49217\nf 48711 48717 49218\nf 48712 49214 49219\nf 48712 49219 48713\nf 48713 49219 49220\nf 48713 49220 49225\nf 48713 49225 48718\nf 48714 48715 49222\nf 48714 49222 49221\nf 48715 48719 49222\nf 48716 49216 49223\nf 48716 49223 48720\nf 48717 48721 49228\nf 48717 49224 49218\nf 48717 49228 49224\nf 48718 49225 48722\nf 48719 48723 49230\nf 48719 49226 49222\nf 48719 49230 49226\nf 48720 49223 49227\nf 48720 49227 48724\nf 48721 48726 49233\nf 48721 49233 49228\nf 48722 49225 49229\nf 48722 49229 48728\nf 48723 48729 49235\nf 48723 49235 49230\nf 48724 49227 49231\nf 48724 49231 48725\nf 48725 49231 49232\nf 48725 49232 49236\nf 48725 49236 48730\nf 48726 48727 48732\nf 48726 48732 49237\nf 48726 49237 49233\nf 48727 48731 48732\nf 48728 49229 49234\nf 48728 49234 48733\nf 48729 48734 49240\nf 48729 49240 49235\nf 48730 49236 48735\nf 48731 48736 49242\nf 48731 49238 48732\nf 48731 49242 49238\nf 48732 49238 49237\nf 48733 49234 49239\nf 48733 49239 48737\nf 48734 48738 49244\nf 48734 49244 49240\nf 48735 49236 49241\nf 48735 49241 48739\nf 48736 48740 49246\nf 48736 49246 49242\nf 48737 49239 49243\nf 48737 49243 48741\nf 48738 48742 49248\nf 48738 49248 49244\nf 48739 49241 49245\nf 48739 49245 48743\nf 48740 48744 49250\nf 48740 49250 49246\nf 48741 49243 49247\nf 48741 49247 48745\nf 48742 48746 49252\nf 48742 49252 49248\nf 48743 49245 49249\nf 48743 49249 48748\nf 48744 48749 49255\nf 48744 49255 49250\nf 48745 49247 49251\nf 48745 49251 48750\nf 48746 48747 49253\nf 48746 49253 49252\nf 48747 48751 49253\nf 48748 49249 49254\nf 48748 49254 48757\nf 48749 48759 49265\nf 48749 49265 49255\nf 48750 49251 49256\nf 48750 49256 48760\nf 48751 48752 49258\nf 48751 49257 49253\nf 48751 49258 49257\nf 48752 48753 49258\nf 48753 48754 49259\nf 48753 49259 49258\nf 48754 48755 49260\nf 48754 49260 49259\nf 48755 48761 49261\nf 48755 49261 49260\nf 48756 48758 49262\nf 48756 49262 49352\nf 48756 49352 48844\nf 48757 49254 49263\nf 48757 49263 48758\nf 48758 49263 49264\nf 48758 49264 49262\nf 48759 48846 49354\nf 48759 49354 49265\nf 48760 49256 49266\nf 48760 49266 48848\nf 48761 48762 49268\nf 48761 49267 49261\nf 48761 49268 49267\nf 48762 48763 49268\nf 48763 48764 49269\nf 48763 49269 49268\nf 48764 48765 49270\nf 48764 49270 49269\nf 48765 48766 49271\nf 48765 49271 49270\nf 48766 48767 49272\nf 48766 49272 49271\nf 48767 48768 49273\nf 48767 49273 49272\nf 48768 48769 49274\nf 48768 49274 49273\nf 48769 48770 49275\nf 48769 49275 49274\nf 48770 48771 49276\nf 48770 49276 49275\nf 48771 48772 49277\nf 48771 49277 49276\nf 48772 48773 49278\nf 48772 49278 49277\nf 48773 48774 49279\nf 48773 49279 49278\nf 48774 48775 49280\nf 48774 49280 49279\nf 48775 48776 49281\nf 48775 49281 49280\nf 48776 48777 49282\nf 48776 49282 49281\nf 48777 48778 49283\nf 48777 49283 49282\nf 48778 48779 49284\nf 48778 49284 49283\nf 48779 48780 49285\nf 48779 49285 49284\nf 48780 48781 49286\nf 48780 49286 49285\nf 48781 48782 49287\nf 48781 49287 49286\nf 48782 48783 49288\nf 48782 49288 49287\nf 48783 48784 49289\nf 48783 49289 49288\nf 48784 48785 49290\nf 48784 49290 49289\nf 48785 48786 49291\nf 48785 49291 49290\nf 48786 48787 49292\nf 48786 49292 49291\nf 48787 48788 49293\nf 48787 49293 49292\nf 48788 48789 49294\nf 48788 49294 49293\nf 48789 48790 49295\nf 48789 49295 49294\nf 48790 48791 49296\nf 48790 49296 49295\nf 48791 48792 49297\nf 48791 49297 49296\nf 48792 48793 49298\nf 48792 49298 49297\nf 48793 48794 49299\nf 48793 49299 49298\nf 48794 48795 49300\nf 48794 49300 49299\nf 48795 48796 49301\nf 48795 49301 49300\nf 48796 48797 49302\nf 48796 49302 49301\nf 48797 48798 49303\nf 48797 49303 49302\nf 48798 48799 49304\nf 48798 49304 49303\nf 48799 48800 49305\nf 48799 49305 49304\nf 48800 48801 49306\nf 48800 49306 49305\nf 48801 48802 49307\nf 48801 49307 49306\nf 48802 48803 49308\nf 48802 49308 49307\nf 48803 48804 49309\nf 48803 49309 49308\nf 48804 48805 49310\nf 48804 49310 49309\nf 48805 48806 49311\nf 48805 49311 49310\nf 48806 48807 49312\nf 48806 49312 49311\nf 48807 48808 49313\nf 48807 49313 49312\nf 48808 48809 49314\nf 48808 49314 49313\nf 48809 48810 49315\nf 48809 49315 49314\nf 48810 48811 49316\nf 48810 49316 49315\nf 48811 48812 49317\nf 48811 49317 49316\nf 48812 48813 49318\nf 48812 49318 49317\nf 48813 48814 49319\nf 48813 49319 49318\nf 48814 48815 49320\nf 48814 49320 49319\nf 48815 48816 49321\nf 48815 49321 49320\nf 48816 48817 49323\nf 48816 49323 49321\nf 48817 48818 49325\nf 48817 49325 49323\nf 48818 48819 49326\nf 48818 49326 49325\nf 48819 48820 49327\nf 48819 49327 49326\nf 48820 48821 49328\nf 48820 49328 49327\nf 48821 48822 49329\nf 48821 49329 49328\nf 48822 48823 49330\nf 48822 49330 49329\nf 48823 48824 49331\nf 48823 49331 49330\nf 48824 48825 49332\nf 48824 49332 49331\nf 48825 48826 49333\nf 48825 49333 49332\nf 48826 48827 49334\nf 48826 49334 49333\nf 48827 48828 49335\nf 48827 49335 49334\nf 48828 48829 49336\nf 48828 49336 49335\nf 48829 48830 49337\nf 48829 49337 49336\nf 48830 48831 49338\nf 48830 49338 49337\nf 48831 48832 49339\nf 48831 49339 49338\nf 48832 48833 49340\nf 48832 49340 49339\nf 48833 48834 49341\nf 48833 49341 49340\nf 48834 48835 49342\nf 48834 49342 49341\nf 48835 48836 49343\nf 48835 49343 49342\nf 48836 48837 49344\nf 48836 49344 49343\nf 48837 48838 49345\nf 48837 49345 49344\nf 48838 48839 49346\nf 48838 49346 49345\nf 48839 48840 49347\nf 48839 49347 49346\nf 48840 48841 49348\nf 48840 49348 49347\nf 48841 48842 49349\nf 48841 49349 49348\nf 48842 48843 49350\nf 48842 49350 49349\nf 48843 48845 49351\nf 48843 49351 49350\nf 48844 49352 48845\nf 48845 49352 49353\nf 48845 49353 49351\nf 48846 48847 49354\nf 48847 48849 49357\nf 48847 49355 49354\nf 48847 49357 49355\nf 48848 49266 49356\nf 48848 49356 48850\nf 48849 48852 49360\nf 48849 49360 49357\nf 48850 49356 49358\nf 48850 49358 49359\nf 48850 49359 48851\nf 48851 49359 48854\nf 48852 48853 49360\nf 48853 48855 49363\nf 48853 49361 49360\nf 48853 49363 49361\nf 48854 49359 49362\nf 48854 49362 48856\nf 48855 48858 49366\nf 48855 49366 49363\nf 48856 49362 49364\nf 48856 49364 48860\nf 48857 48865 49373\nf 48857 49365 49367\nf 48857 49367 48859\nf 48857 49373 49365\nf 48858 48859 49366\nf 48859 49367 49366\nf 48860 49364 49368\nf 48860 49368 49369\nf 48860 49369 48861\nf 48861 49369 48867\nf 48862 48955 49463\nf 48862 49370 49371\nf 48862 49371 48863\nf 48862 49463 49370\nf 48863 49371 49372\nf 48863 49372 48864\nf 48864 49372 49374\nf 48864 49374 48866\nf 48865 48866 49373\nf 48866 49374 49373\nf 48867 49369 49375\nf 48867 49375 49376\nf 48867 49376 48868\nf 48868 49376 49377\nf 48868 49377 48869\nf 48869 49377 48957\nf 48870 48962 49470\nf 48870 49378 49379\nf 48870 49379 48871\nf 48870 49470 49378\nf 48871 49379 49380\nf 48871 49380 48872\nf 48872 49380 49381\nf 48872 49381 48873\nf 48873 49381 49382\nf 48873 49382 48874\nf 48874 49382 49383\nf 48874 49383 48875\nf 48875 49383 49384\nf 48875 49384 48876\nf 48876 49384 49385\nf 48876 49385 48877\nf 48877 49385 49386\nf 48877 49386 48878\nf 48878 49386 49387\nf 48878 49387 48879\nf 48879 49387 49388\nf 48879 49388 48880\nf 48880 49388 49389\nf 48880 49389 48881\nf 48881 49389 49390\nf 48881 49390 48882\nf 48882 49390 49391\nf 48882 49391 48883\nf 48883 49391 49392\nf 48883 49392 48884\nf 48884 49392 49393\nf 48884 49393 48885\nf 48885 49393 49394\nf 48885 49394 48886\nf 48886 49394 49395\nf 48886 49395 48887\nf 48887 49395 49396\nf 48887 49396 48888\nf 48888 49396 49397\nf 48888 49397 48889\nf 48889 49397 49398\nf 48889 49398 48890\nf 48890 49398 49399\nf 48890 49399 48891\nf 48891 49399 49400\nf 48891 49400 48892\nf 48892 49400 49401\nf 48892 49401 48893\nf 48893 49401 49402\nf 48893 49402 48894\nf 48894 49402 49403\nf 48894 49403 48895\nf 48895 49403 49404\nf 48895 49404 48896\nf 48896 49404 49405\nf 48896 49405 48897\nf 48897 49405 49406\nf 48897 49406 48898\nf 48898 49406 49407\nf 48898 49407 48899\nf 48899 49407 49408\nf 48899 49408 48900\nf 48900 49408 49409\nf 48900 49409 48901\nf 48901 49409 49410\nf 48901 49410 48902\nf 48902 49410 49411\nf 48902 49411 48903\nf 48903 49411 49412\nf 48903 49412 48904\nf 48904 49412 49413\nf 48904 49413 48905\nf 48905 49413 49414\nf 48905 49414 48906\nf 48906 49414 49415\nf 48906 49415 48907\nf 48907 49415 49416\nf 48907 49416 48908\nf 48908 49416 49417\nf 48908 49417 48909\nf 48909 49417 49418\nf 48909 49418 48910\nf 48910 49418 49419\nf 48910 49419 48911\nf 48911 49419 49420\nf 48911 49420 48912\nf 48912 49420 49421\nf 48912 49421 48913\nf 48913 49421 49422\nf 48913 49422 48914\nf 48914 49422 49423\nf 48914 49423 48915\nf 48915 49423 49424\nf 48915 49424 48916\nf 48916 49424 49425\nf 48916 49425 48917\nf 48917 49425 49426\nf 48917 49426 48918\nf 48918 49426 49427\nf 48918 49427 48919\nf 48919 49427 49428\nf 48919 49428 48920\nf 48920 49428 49429\nf 48920 49429 48921\nf 48921 49429 49430\nf 48921 49430 48922\nf 48922 49430 49431\nf 48922 49431 48923\nf 48923 49431 49432\nf 48923 49432 48924\nf 48924 49432 49433\nf 48924 49433 48925\nf 48925 49433 49434\nf 48925 49434 48926\nf 48926 49434 49435\nf 48926 49435 48927\nf 48927 49435 49436\nf 48927 49436 48928\nf 48928 49436 49437\nf 48928 49437 48929\nf 48929 49437 49438\nf 48929 49438 48930\nf 48930 49438 49439\nf 48930 49439 48931\nf 48931 49439 49440\nf 48931 49440 48932\nf 48932 49440 49441\nf 48932 49441 48933\nf 48933 49441 49442\nf 48933 49442 48934\nf 48934 49442 49443\nf 48934 49443 48935\nf 48935 49443 49444\nf 48935 49444 48936\nf 48936 49444 49445\nf 48936 49445 48937\nf 48937 49445 49446\nf 48937 49446 48938\nf 48938 49446 49447\nf 48938 49447 48939\nf 48939 49447 49448\nf 48939 49448 48940\nf 48940 49448 49449\nf 48940 49449 48941\nf 48941 49449 49450\nf 48941 49450 48942\nf 48942 49450 49451\nf 48942 49451 48943\nf 48943 49451 49452\nf 48943 49452 48944\nf 48944 49452 49453\nf 48944 49453 48945\nf 48945 49453 49454\nf 48945 49454 48946\nf 48946 49454 49455\nf 48946 49455 48947\nf 48947 49455 49456\nf 48947 49456 48948\nf 48948 49456 49457\nf 48948 49457 48949\nf 48949 49457 49458\nf 48949 49458 48950\nf 48950 49458 49459\nf 48950 49459 48951\nf 48951 49459 49460\nf 48951 49460 48952\nf 48952 49460 49461\nf 48952 49461 48953\nf 48953 49461 49462\nf 48953 49462 48954\nf 48954 49462 49464\nf 48954 49464 48956\nf 48955 48956 49463\nf 48956 49464 49463\nf 48957 49377 49465\nf 48957 49465 49466\nf 48957 49466 48958\nf 48958 49466 49467\nf 48958 49467 48959\nf 48959 49467 49468\nf 48959 49468 48960\nf 48960 49468 49469\nf 48960 49469 48961\nf 48961 49469 49471\nf 48961 49471 48963\nf 48962 48963 49470\nf 48963 49471 49470\nf 48964 48965 49474\nf 48964 49474 49478\nf 48964 49478 48968\nf 48965 48966 49475\nf 48965 49475 49474\nf 48966 48967 49476\nf 48966 49476 49475\nf 48967 48970 49477\nf 48967 49477 49476\nf 48968 49478 48969\nf 48969 49478 49479\nf 48969 49479 49481\nf 48969 49481 48971\nf 48970 48973 49483\nf 48970 49480 49477\nf 48970 49483 49480\nf 48971 49481 48972\nf 48972 49481 49482\nf 48972 49482 49485\nf 48972 49485 48975\nf 48973 48974 49484\nf 48973 49484 49483\nf 48974 48976 49484\nf 48975 49485 48977\nf 48976 48978 49488\nf 48976 49486 49484\nf 48976 49488 49486\nf 48977 49485 49487\nf 48977 49487 48979\nf 48978 48980 49490\nf 48978 49490 49488\nf 48979 49487 49489\nf 48979 49489 48981\nf 48980 48982 49492\nf 48980 49492 49490\nf 48981 49489 49491\nf 48981 49491 48983\nf 48982 48984 49494\nf 48982 49494 49492\nf 48983 49491 49493\nf 48983 49493 48985\nf 48984 48986 49494\nf 48985 49493 49496\nf 48985 49496 48989\nf 48986 48987 48988\nf 48986 48988 49495\nf 48986 49495 49494\nf 48987 48990 48988\nf 48988 48990 49497\nf 48988 49497 49495\nf 48989 49496 49498\nf 48989 49498 48991\nf 48990 48992 49501\nf 48990 49499 49497\nf 48990 49501 49499\nf 48991 49498 49500\nf 48991 49500 48993\nf 48992 48994 49503\nf 48992 49503 49501\nf 48993 49500 49502\nf 48993 49502 48996\nf 48994 48995 49505\nf 48994 49505 49503\nf 48995 48997 48998\nf 48995 48998 49505\nf 48996 49502 49504\nf 48996 49504 48999\nf 48997 49000 49508\nf 48997 49508 48998\nf 48998 49506 49505\nf 48998 49508 49506\nf 48999 49504 49507\nf 48999 49507 49001\nf 49000 49002 49510\nf 49000 49510 49508\nf 49001 49507 49509\nf 49001 49509 49003\nf 49002 49004 49512\nf 49002 49512 49510\nf 49003 49509 49511\nf 49003 49511 49005\nf 49004 49007 49516\nf 49004 49516 49512\nf 49005 49511 49513\nf 49005 49513 49514\nf 49005 49514 49006\nf 49006 49514 49008\nf 49007 49009 49516\nf 49008 49514 49518\nf 49008 49518 49012\nf 49009 49010 49011\nf 49009 49011 49516\nf 49010 49013 49519\nf 49010 49519 49011\nf 49011 49517 49516\nf 49011 49519 49517\nf 49012 49518 49520\nf 49012 49520 49014\nf 49013 49015 49523\nf 49013 49521 49519\nf 49013 49523 49521\nf 49014 49520 49522\nf 49014 49522 49016\nf 49015 49017 49525\nf 49015 49525 49523\nf 49016 49522 49524\nf 49016 49524 49018\nf 49017 49019 49525\nf 49018 49524 49528\nf 49018 49528 49021\nf 49019 49020 49525\nf 49019 49022 49024\nf 49019 49024 49020\nf 49020 49024 49529\nf 49020 49526 49525\nf 49020 49529 49526\nf 49021 49528 49530\nf 49021 49530 49025\nf 49022 49023 49024\nf 49023 49026 49531\nf 49023 49531 49024\nf 49024 49531 49529\nf 49025 49530 49532\nf 49025 49532 49027\nf 49026 49028 49535\nf 49026 49533 49531\nf 49026 49535 49533\nf 49027 49532 49534\nf 49027 49534 49029\nf 49028 49030 49538\nf 49028 49538 49535\nf 49029 49534 49537\nf 49029 49537 49031\nf 49030 49032 49541\nf 49030 49541 49538\nf 49031 49537 49540\nf 49031 49540 49033\nf 49032 49034 49544\nf 49032 49544 49541\nf 49033 49540 49543\nf 49033 49543 49035\nf 49034 49036 49544\nf 49035 49543 49547\nf 49035 49547 49039\nf 49036 49037 49038\nf 49036 49038 49544\nf 49037 49042 49044\nf 49037 49044 49551\nf 49037 49551 49038\nf 49038 49545 49544\nf 49038 49550 49545\nf 49038 49551 49550\nf 49039 49041 49040\nf 49039 49547 49548\nf 49039 49548 49041\nf 49040 49041 49048\nf 49040 49048 49045\nf 49041 49548 49553\nf 49041 49553 49555\nf 49041 49555 49048\nf 49042 49043 49044\nf 49043 49046 49048\nf 49043 49048 49555\nf 49043 49555 49044\nf 49044 49554 49551\nf 49044 49555 49554\nf 49045 49048 49047\nf 49046 49047 49048\nf 49049 49050 49054\nf 49049 49052 49051\nf 49049 49054 49052\nf 49050 49053 49054\nf 49051 49052 49559\nf 49051 49559 49056\nf 49052 49054 49557\nf 49052 49557 49559\nf 49053 49055 49558\nf 49053 49558 49054\nf 49054 49558 49557\nf 49055 49058 49059\nf 49055 49059 49561\nf 49055 49561 49558\nf 49056 49559 49563\nf 49056 49563 49057\nf 49057 49061 49060\nf 49057 49563 49061\nf 49058 49062 49063\nf 49058 49063 49059\nf 49059 49063 49561\nf 49060 49061 49569\nf 49060 49569 49064\nf 49061 49563 49564\nf 49061 49564 49569\nf 49062 49065 49571\nf 49062 49568 49063\nf 49062 49571 49568\nf 49063 49566 49561\nf 49063 49568 49566\nf 49064 49569 49066\nf 49065 49067 49574\nf 49065 49574 49571\nf 49066 49569 49573\nf 49066 49573 49068\nf 49067 49069 49577\nf 49067 49577 49574\nf 49068 49573 49576\nf 49068 49576 49071\nf 49069 49070 49073\nf 49069 49073 49579\nf 49069 49579 49577\nf 49070 49072 49073\nf 49071 49576 49578\nf 49071 49578 49074\nf 49072 49075 49076\nf 49072 49076 49073\nf 49073 49076 49579\nf 49074 49578 49580\nf 49074 49580 49077\nf 49075 49078 49079\nf 49075 49079 49076\nf 49076 49079 49581\nf 49076 49581 49579\nf 49077 49580 49582\nf 49077 49582 49080\nf 49078 49082 49587\nf 49078 49584 49079\nf 49078 49587 49584\nf 49079 49583 49581\nf 49079 49584 49583\nf 49080 49582 49585\nf 49080 49585 49081\nf 49081 49585 49586\nf 49081 49586 49589\nf 49081 49589 49083\nf 49082 49084 49590\nf 49082 49590 49587\nf 49083 49589 49085\nf 49084 49086 49592\nf 49084 49592 49590\nf 49085 49589 49591\nf 49085 49591 49087\nf 49086 49088 49594\nf 49086 49594 49592\nf 49087 49591 49593\nf 49087 49593 49089\nf 49088 49090 49596\nf 49088 49596 49594\nf 49089 49593 49595\nf 49089 49595 49091\nf 49090 49092 49598\nf 49090 49598 49596\nf 49091 49595 49597\nf 49091 49597 49093\nf 49092 49094 49600\nf 49092 49600 49598\nf 49093 49597 49599\nf 49093 49599 49096\nf 49094 49095 49603\nf 49094 49603 49600\nf 49095 49097 49098\nf 49095 49098 49603\nf 49096 49599 49601\nf 49096 49601 49099\nf 49097 49102 49606\nf 49097 49606 49098\nf 49098 49604 49603\nf 49098 49606 49604\nf 49099 49101 49100\nf 49099 49601 49101\nf 49100 49101 49605\nf 49100 49605 49103\nf 49101 49601 49602\nf 49101 49602 49605\nf 49102 49104 49608\nf 49102 49608 49606\nf 49103 49605 49607\nf 49103 49607 49105\nf 49104 49106 49610\nf 49104 49610 49608\nf 49105 49607 49609\nf 49105 49609 49107\nf 49106 49108 49612\nf 49106 49612 49610\nf 49107 49609 49611\nf 49107 49611 49109\nf 49108 49110 49614\nf 49108 49614 49612\nf 49109 49611 49613\nf 49109 49613 49111\nf 49110 49112 49616\nf 49110 49616 49614\nf 49111 49613 49615\nf 49111 49615 49113\nf 49112 49114 49618\nf 49112 49618 49616\nf 49113 49615 49617\nf 49113 49617 49115\nf 49114 49116 49620\nf 49114 49620 49618\nf 49115 49617 49619\nf 49115 49619 49117\nf 49116 49118 49622\nf 49116 49622 49620\nf 49117 49619 49621\nf 49117 49621 49120\nf 49118 49119 49622\nf 49119 49121 49625\nf 49119 49623 49622\nf 49119 49625 49623\nf 49120 49621 49624\nf 49120 49624 49122\nf 49121 49123 49627\nf 49121 49627 49625\nf 49122 49624 49626\nf 49122 49626 49124\nf 49123 49126 49630\nf 49123 49630 49627\nf 49124 49626 49628\nf 49124 49628 49125\nf 49125 49628 49629\nf 49125 49629 49631\nf 49125 49631 49127\nf 49126 49128 49633\nf 49126 49633 49630\nf 49127 49631 49130\nf 49128 49129 49633\nf 49129 49131 49636\nf 49129 49634 49633\nf 49129 49636 49634\nf 49130 49631 49635\nf 49130 49635 49132\nf 49131 49133 49636\nf 49132 49635 49638\nf 49132 49638 49136\nf 49133 49134 49135\nf 49133 49135 49636\nf 49134 49140 49142\nf 49134 49142 49642\nf 49134 49642 49135\nf 49135 49637 49636\nf 49135 49641 49637\nf 49135 49642 49641\nf 49136 49138 49137\nf 49136 49638 49639\nf 49136 49639 49138\nf 49137 49138 49146\nf 49137 49146 49143\nf 49138 49639 49643\nf 49138 49643 49644\nf 49138 49644 49146\nf 49139 49144 49146\nf 49139 49146 49644\nf 49139 49644 49646\nf 49139 49646 49141\nf 49140 49141 49142\nf 49141 49645 49142\nf 49141 49646 49645\nf 49142 49645 49642\nf 49143 49146 49145\nf 49144 49145 49146\nf 49147 49148 49647\nf 49147 49647 49657\nf 49147 49657 49157\nf 49148 49149 49648\nf 49148 49648 49647\nf 49149 49150 49649\nf 49149 49649 49648\nf 49150 49151 49650\nf 49150 49650 49649\nf 49151 49152 49651\nf 49151 49651 49650\nf 49152 49153 49652\nf 49152 49652 49651\nf 49153 49154 49653\nf 49153 49653 49652\nf 49154 49155 49654\nf 49154 49654 49653\nf 49155 49159 49655\nf 49155 49655 49654\nf 49156 49158 49656\nf 49156 49656 49662\nf 49156 49662 49162\nf 49157 49657 49158\nf 49158 49657 49658\nf 49158 49658 49656\nf 49159 49160 49660\nf 49159 49659 49655\nf 49159 49660 49659\nf 49160 49161 49660\nf 49161 49164 49661\nf 49161 49661 49660\nf 49162 49662 49163\nf 49163 49662 49663\nf 49163 49663 49666\nf 49163 49666 49166\nf 49164 49165 49665\nf 49164 49664 49661\nf 49164 49665 49664\nf 49165 49168 49665\nf 49166 49666 49167\nf 49167 49666 49667\nf 49167 49667 49670\nf 49167 49670 49170\nf 49168 49169 49669\nf 49168 49668 49665\nf 49168 49669 49668\nf 49169 49172 49669\nf 49170 49670 49671\nf 49170 49671 49171\nf 49171 49671 49174\nf 49172 49173 49673\nf 49172 49672 49669\nf 49172 49673 49672\nf 49173 49177 49673\nf 49174 49671 49674\nf 49174 49674 49675\nf 49174 49675 49175\nf 49175 49675 49676\nf 49175 49676 49176\nf 49176 49676 49178\nf 49177 49182 49682\nf 49177 49677 49673\nf 49177 49682 49677\nf 49178 49676 49678\nf 49178 49678 49679\nf 49178 49679 49179\nf 49179 49679 49680\nf 49179 49680 49180\nf 49180 49680 49681\nf 49180 49681 49181\nf 49181 49681 49183\nf 49182 49188 49688\nf 49182 49688 49682\nf 49183 49681 49683\nf 49183 49683 49684\nf 49183 49684 49184\nf 49184 49684 49685\nf 49184 49685 49185\nf 49185 49685 49686\nf 49185 49686 49186\nf 49186 49686 49687\nf 49186 49687 49187\nf 49187 49687 49190\nf 49188 49189 49688\nf 49189 49196 49698\nf 49189 49689 49688\nf 49189 49698 49689\nf 49190 49687 49691\nf 49190 49691 49692\nf 49190 49692 49191\nf 49191 49692 49693\nf 49191 49693 49192\nf 49192 49693 49694\nf 49192 49694 49193\nf 49193 49694 49695\nf 49193 49695 49198\nf 49194 49199 49201\nf 49194 49201 49695\nf 49194 49695 49696\nf 49194 49696 49697\nf 49194 49697 49195\nf 49195 49697 49699\nf 49195 49699 49197\nf 49196 49197 49698\nf 49197 49699 49698\nf 49198 49201 49200\nf 49198 49695 49201\nf 49199 49200 49201\nf 49202 49210 49701\nf 49202 49701 49707\nf 49202 49707 49208\nf 49203 49204 49702\nf 49203 49702 49712\nf 49203 49712 49212\nf 49204 49205 49703\nf 49204 49703 49702\nf 49205 49206 49704\nf 49205 49704 49703\nf 49206 49207 49705\nf 49206 49705 49704\nf 49207 49213 49706\nf 49207 49706 49705\nf 49208 49707 49209\nf 49209 49707 49708\nf 49209 49708 49714\nf 49209 49714 49214\nf 49210 49211 49711\nf 49210 49709 49701\nf 49210 49711 49709\nf 49211 49215 49711\nf 49212 49712 49216\nf 49213 49217 49717\nf 49213 49713 49706\nf 49213 49717 49713\nf 49214 49714 49219\nf 49215 49221 49721\nf 49215 49715 49711\nf 49215 49721 49715\nf 49216 49712 49716\nf 49216 49716 49223\nf 49217 49218 49718\nf 49217 49718 49717\nf 49218 49224 49718\nf 49219 49714 49719\nf 49219 49719 49220\nf 49220 49719 49720\nf 49220 49720 49725\nf 49220 49725 49225\nf 49221 49222 49722\nf 49221 49722 49721\nf 49222 49226 49722\nf 49223 49716 49723\nf 49223 49723 49227\nf 49224 49228 49728\nf 49224 49724 49718\nf 49224 49728 49724\nf 49225 49725 49229\nf 49226 49230 49730\nf 49226 49726 49722\nf 49226 49730 49726\nf 49227 49723 49727\nf 49227 49727 49231\nf 49228 49233 49733\nf 49228 49733 49728\nf 49229 49725 49729\nf 49229 49729 49234\nf 49230 49235 49735\nf 49230 49735 49730\nf 49231 49727 49731\nf 49231 49731 49232\nf 49232 49731 49732\nf 49232 49732 49736\nf 49232 49736 49236\nf 49233 49237 49737\nf 49233 49737 49733\nf 49234 49729 49734\nf 49234 49734 49239\nf 49235 49240 49740\nf 49235 49740 49735\nf 49236 49736 49241\nf 49237 49238 49738\nf 49237 49738 49737\nf 49238 49242 49738\nf 49239 49734 49739\nf 49239 49739 49243\nf 49240 49244 49744\nf 49240 49744 49740\nf 49241 49736 49741\nf 49241 49741 49245\nf 49242 49246 49746\nf 49242 49742 49738\nf 49242 49746 49742\nf 49243 49739 49743\nf 49243 49743 49247\nf 49244 49248 49748\nf 49244 49748 49744\nf 49245 49741 49745\nf 49245 49745 49249\nf 49246 49250 49750\nf 49246 49750 49746\nf 49247 49743 49747\nf 49247 49747 49251\nf 49248 49252 49752\nf 49248 49752 49748\nf 49249 49745 49749\nf 49249 49749 49254\nf 49250 49255 49755\nf 49250 49755 49750\nf 49251 49747 49751\nf 49251 49751 49256\nf 49252 49253 49753\nf 49252 49753 49752\nf 49253 49257 49753\nf 49254 49749 49754\nf 49254 49754 49263\nf 49255 49265 49767\nf 49255 49767 49755\nf 49256 49751 49756\nf 49256 49756 49266\nf 49257 49258 49758\nf 49257 49757 49753\nf 49257 49758 49757\nf 49258 49259 49758\nf 49259 49260 49759\nf 49259 49759 49758\nf 49260 49261 49760\nf 49260 49760 49759\nf 49261 49267 49761\nf 49261 49761 49760\nf 49262 49264 49764\nf 49262 49764 49853\nf 49262 49853 49352\nf 49263 49754 49765\nf 49263 49765 49264\nf 49264 49765 49766\nf 49264 49766 49764\nf 49265 49354 49855\nf 49265 49855 49767\nf 49266 49756 49768\nf 49266 49768 49356\nf 49267 49268 49771\nf 49267 49769 49761\nf 49267 49771 49769\nf 49268 49269 49771\nf 49269 49270 49772\nf 49269 49772 49771\nf 49270 49271 49773\nf 49270 49773 49772\nf 49271 49272 49774\nf 49271 49774 49773\nf 49272 49273 49775\nf 49272 49775 49774\nf 49273 49274 49776\nf 49273 49776 49775\nf 49274 49275 49777\nf 49274 49777 49776\nf 49275 49276 49778\nf 49275 49778 49777\nf 49276 49277 49779\nf 49276 49779 49778\nf 49277 49278 49780\nf 49277 49780 49779\nf 49278 49279 49781\nf 49278 49781 49780\nf 49279 49280 49782\nf 49279 49782 49781\nf 49280 49281 49783\nf 49280 49783 49782\nf 49281 49282 49784\nf 49281 49784 49783\nf 49282 49283 49785\nf 49282 49785 49784\nf 49283 49284 49786\nf 49283 49786 49785\nf 49284 49285 49787\nf 49284 49787 49786\nf 49285 49286 49788\nf 49285 49788 49787\nf 49286 49287 49789\nf 49286 49789 49788\nf 49287 49288 49790\nf 49287 49790 49789\nf 49288 49289 49791\nf 49288 49791 49790\nf 49289 49290 49792\nf 49289 49792 49791\nf 49290 49291 49793\nf 49290 49793 49792\nf 49291 49292 49794\nf 49291 49794 49793\nf 49292 49293 49795\nf 49292 49795 49794\nf 49293 49294 49796\nf 49293 49796 49795\nf 49294 49295 49797\nf 49294 49797 49796\nf 49295 49296 49798\nf 49295 49798 49797\nf 49296 49297 49799\nf 49296 49799 49798\nf 49297 49298 49800\nf 49297 49800 49799\nf 49298 49299 49801\nf 49298 49801 49800\nf 49299 49300 49802\nf 49299 49802 49801\nf 49300 49301 49803\nf 49300 49803 49802\nf 49301 49302 49804\nf 49301 49804 49803\nf 49302 49303 49805\nf 49302 49805 49804\nf 49303 49304 49806\nf 49303 49806 49805\nf 49304 49305 49807\nf 49304 49807 49806\nf 49305 49306 49808\nf 49305 49808 49807\nf 49306 49307 49809\nf 49306 49809 49808\nf 49307 49308 49810\nf 49307 49810 49809\nf 49308 49309 49811\nf 49308 49811 49810\nf 49309 49310 49812\nf 49309 49812 49811\nf 49310 49311 49813\nf 49310 49813 49812\nf 49311 49312 49814\nf 49311 49814 49813\nf 49312 49313 49815\nf 49312 49815 49814\nf 49313 49314 49816\nf 49313 49816 49815\nf 49314 49315 49817\nf 49314 49817 49816\nf 49315 49316 49818\nf 49315 49818 49817\nf 49316 49317 49819\nf 49316 49819 49818\nf 49317 49318 49820\nf 49317 49820 49819\nf 49318 49319 49821\nf 49318 49821 49820\nf 49319 49320 49822\nf 49319 49822 49821\nf 49320 49321 49824\nf 49320 49824 49822\nf 49321 49322 49823\nf 49321 49323 49322\nf 49321 49823 49824\nf 49322 49323 49324\nf 49322 49324 49763\nf 49322 49762 49823\nf 49322 49763 49762\nf 49323 49325 49826\nf 49323 49826 49324\nf 49324 49825 49763\nf 49324 49826 49825\nf 49325 49326 49826\nf 49326 49327 49827\nf 49326 49827 49826\nf 49327 49328 49828\nf 49327 49828 49827\nf 49328 49329 49829\nf 49328 49829 49828\nf 49329 49330 49830\nf 49329 49830 49829\nf 49330 49331 49831\nf 49330 49831 49830\nf 49331 49332 49832\nf 49331 49832 49831\nf 49332 49333 49833\nf 49332 49833 49832\nf 49333 49334 49834\nf 49333 49834 49833\nf 49334 49335 49835\nf 49334 49835 49834\nf 49335 49336 49836\nf 49335 49836 49835\nf 49336 49337 49837\nf 49336 49837 49836\nf 49337 49338 49838\nf 49337 49838 49837\nf 49338 49339 49839\nf 49338 49839 49838\nf 49339 49340 49840\nf 49339 49840 49839\nf 49340 49341 49841\nf 49340 49841 49840\nf 49341 49342 49842\nf 49341 49842 49841\nf 49342 49343 49843\nf 49342 49843 49842\nf 49343 49344 49844\nf 49343 49844 49843\nf 49344 49345 49845\nf 49344 49845 49844\nf 49345 49346 49846\nf 49345 49846 49845\nf 49346 49347 49847\nf 49346 49847 49846\nf 49347 49348 49848\nf 49347 49848 49847\nf 49348 49349 49849\nf 49348 49849 49848\nf 49349 49350 49850\nf 49349 49850 49849\nf 49350 49351 49851\nf 49350 49851 49850\nf 49351 49353 49852\nf 49351 49852 49851\nf 49352 49853 49353\nf 49353 49853 49854\nf 49353 49854 49852\nf 49354 49355 49855\nf 49355 49357 49858\nf 49355 49856 49855\nf 49355 49858 49856\nf 49356 49768 49857\nf 49356 49857 49358\nf 49357 49360 49861\nf 49357 49861 49858\nf 49358 49857 49859\nf 49358 49859 49860\nf 49358 49860 49359\nf 49359 49860 49362\nf 49360 49361 49861\nf 49361 49363 49864\nf 49361 49862 49861\nf 49361 49864 49862\nf 49362 49860 49863\nf 49362 49863 49364\nf 49363 49366 49867\nf 49363 49867 49864\nf 49364 49863 49865\nf 49364 49865 49368\nf 49365 49373 49874\nf 49365 49866 49868\nf 49365 49868 49367\nf 49365 49874 49866\nf 49366 49367 49867\nf 49367 49868 49867\nf 49368 49865 49869\nf 49368 49869 49870\nf 49368 49870 49369\nf 49369 49870 49375\nf 49370 49463 49964\nf 49370 49871 49872\nf 49370 49872 49371\nf 49370 49964 49871\nf 49371 49872 49873\nf 49371 49873 49372\nf 49372 49873 49875\nf 49372 49875 49374\nf 49373 49374 49874\nf 49374 49875 49874\nf 49375 49870 49876\nf 49375 49876 49877\nf 49375 49877 49376\nf 49376 49877 49878\nf 49376 49878 49377\nf 49377 49878 49465\nf 49378 49470 49969\nf 49378 49879 49880\nf 49378 49880 49379\nf 49378 49969 49879\nf 49379 49880 49881\nf 49379 49881 49380\nf 49380 49881 49882\nf 49380 49882 49381\nf 49381 49882 49883\nf 49381 49883 49382\nf 49382 49883 49884\nf 49382 49884 49383\nf 49383 49884 49885\nf 49383 49885 49384\nf 49384 49885 49886\nf 49384 49886 49385\nf 49385 49886 49887\nf 49385 49887 49386\nf 49386 49887 49888\nf 49386 49888 49387\nf 49387 49888 49889\nf 49387 49889 49388\nf 49388 49889 49890\nf 49388 49890 49389\nf 49389 49890 49891\nf 49389 49891 49390\nf 49390 49891 49892\nf 49390 49892 49391\nf 49391 49892 49893\nf 49391 49893 49392\nf 49392 49893 49894\nf 49392 49894 49393\nf 49393 49894 49895\nf 49393 49895 49394\nf 49394 49895 49896\nf 49394 49896 49395\nf 49395 49896 49897\nf 49395 49897 49396\nf 49396 49897 49898\nf 49396 49898 49397\nf 49397 49898 49899\nf 49397 49899 49398\nf 49398 49899 49900\nf 49398 49900 49399\nf 49399 49900 49901\nf 49399 49901 49400\nf 49400 49901 49902\nf 49400 49902 49401\nf 49401 49902 49903\nf 49401 49903 49402\nf 49402 49903 49904\nf 49402 49904 49403\nf 49403 49904 49905\nf 49403 49905 49404\nf 49404 49905 49906\nf 49404 49906 49405\nf 49405 49906 49907\nf 49405 49907 49406\nf 49406 49907 49908\nf 49406 49908 49407\nf 49407 49908 49909\nf 49407 49909 49408\nf 49408 49909 49910\nf 49408 49910 49409\nf 49409 49910 49911\nf 49409 49911 49410\nf 49410 49911 49912\nf 49410 49912 49411\nf 49411 49912 49913\nf 49411 49913 49412\nf 49412 49913 49914\nf 49412 49914 49413\nf 49413 49914 49915\nf 49413 49915 49414\nf 49414 49915 49916\nf 49414 49916 49415\nf 49415 49916 49917\nf 49415 49917 49416\nf 49416 49917 49918\nf 49416 49918 49417\nf 49417 49918 49919\nf 49417 49919 49418\nf 49418 49919 49920\nf 49418 49920 49419\nf 49419 49920 49921\nf 49419 49921 49420\nf 49420 49921 49922\nf 49420 49922 49421\nf 49421 49922 49923\nf 49421 49923 49422\nf 49422 49923 49924\nf 49422 49924 49423\nf 49423 49924 49925\nf 49423 49925 49424\nf 49424 49925 49926\nf 49424 49926 49425\nf 49425 49926 49927\nf 49425 49927 49426\nf 49426 49927 49928\nf 49426 49928 49427\nf 49427 49928 49929\nf 49427 49929 49428\nf 49428 49929 49930\nf 49428 49930 49429\nf 49429 49930 49931\nf 49429 49931 49430\nf 49430 49931 49932\nf 49430 49932 49431\nf 49431 49932 49933\nf 49431 49933 49432\nf 49432 49933 49934\nf 49432 49934 49433\nf 49433 49934 49935\nf 49433 49935 49434\nf 49434 49935 49936\nf 49434 49936 49435\nf 49435 49936 49937\nf 49435 49937 49436\nf 49436 49937 49938\nf 49436 49938 49437\nf 49437 49938 49939\nf 49437 49939 49438\nf 49438 49939 49940\nf 49438 49940 49439\nf 49439 49940 49941\nf 49439 49941 49440\nf 49440 49941 49942\nf 49440 49942 49441\nf 49441 49942 49943\nf 49441 49943 49442\nf 49442 49943 49944\nf 49442 49944 49443\nf 49443 49944 49945\nf 49443 49945 49444\nf 49444 49945 49946\nf 49444 49946 49445\nf 49445 49946 49947\nf 49445 49947 49446\nf 49446 49947 49948\nf 49446 49948 49447\nf 49447 49948 49949\nf 49447 49949 49448\nf 49448 49949 49950\nf 49448 49950 49449\nf 49449 49950 49951\nf 49449 49951 49450\nf 49450 49951 49952\nf 49450 49952 49451\nf 49451 49952 49953\nf 49451 49953 49452\nf 49452 49953 49954\nf 49452 49954 49453\nf 49453 49954 49955\nf 49453 49955 49454\nf 49454 49955 49956\nf 49454 49956 49455\nf 49455 49956 49957\nf 49455 49957 49456\nf 49456 49957 49958\nf 49456 49958 49457\nf 49457 49958 49959\nf 49457 49959 49458\nf 49458 49959 49960\nf 49458 49960 49459\nf 49459 49960 49961\nf 49459 49961 49460\nf 49460 49961 49962\nf 49460 49962 49461\nf 49461 49962 49963\nf 49461 49963 49462\nf 49462 49963 49965\nf 49462 49965 49464\nf 49463 49464 49964\nf 49464 49965 49964\nf 49465 49878 49966\nf 49465 49966 49967\nf 49465 49967 49466\nf 49466 49967 49467\nf 49467 49472 49473\nf 49467 49473 49468\nf 49467 49967 49472\nf 49468 49473 49973\nf 49468 49968 49469\nf 49468 49973 49968\nf 49469 49968 49970\nf 49469 49970 49471\nf 49470 49471 49969\nf 49471 49970 49969\nf 49472 49967 49971\nf 49472 49971 49972\nf 49472 49972 49473\nf 49473 49972 49974\nf 49473 49974 49973\nf 49474 49475 49975\nf 49474 49975 49979\nf 49474 49979 49478\nf 49475 49476 49976\nf 49475 49976 49975\nf 49476 49477 49977\nf 49476 49977 49976\nf 49477 49480 49978\nf 49477 49978 49977\nf 49478 49979 49479\nf 49479 49979 49980\nf 49479 49980 49982\nf 49479 49982 49481\nf 49480 49483 49984\nf 49480 49981 49978\nf 49480 49984 49981\nf 49481 49982 49482\nf 49482 49982 49983\nf 49482 49983 49986\nf 49482 49986 49485\nf 49483 49484 49985\nf 49483 49985 49984\nf 49484 49486 49985\nf 49485 49986 49487\nf 49486 49488 49989\nf 49486 49987 49985\nf 49486 49989 49987\nf 49487 49986 49988\nf 49487 49988 49489\nf 49488 49490 49991\nf 49488 49991 49989\nf 49489 49988 49990\nf 49489 49990 49491\nf 49490 49492 49993\nf 49490 49993 49991\nf 49491 49990 49992\nf 49491 49992 49493\nf 49492 49494 49995\nf 49492 49995 49993\nf 49493 49992 49994\nf 49493 49994 49496\nf 49494 49495 49996\nf 49494 49996 49995\nf 49495 49497 49996\nf 49496 49994 49997\nf 49496 49997 49498\nf 49497 49499 50001\nf 49497 49998 49996\nf 49497 50001 49998\nf 49498 49997 50000\nf 49498 50000 49500\nf 49499 49501 50003\nf 49499 50003 50001\nf 49500 50000 50002\nf 49500 50002 49502\nf 49501 49503 50005\nf 49501 50005 50003\nf 49502 50002 50004\nf 49502 50004 49504\nf 49503 49505 50007\nf 49503 50007 50005\nf 49504 50004 50006\nf 49504 50006 49507\nf 49505 49506 50007\nf 49506 49508 50010\nf 49506 50008 50007\nf 49506 50010 50008\nf 49507 50006 50009\nf 49507 50009 49509\nf 49508 49510 50012\nf 49508 50012 50010\nf 49509 50009 50011\nf 49509 50011 49511\nf 49510 49512 50015\nf 49510 50015 50012\nf 49511 50011 50013\nf 49511 50013 49513\nf 49512 49516 50017\nf 49512 50017 50015\nf 49513 49515 49514\nf 49513 50013 50014\nf 49513 50014 49515\nf 49514 49515 49518\nf 49515 50014 50016\nf 49515 50016 49518\nf 49516 49517 50017\nf 49517 49519 50020\nf 49517 50018 50017\nf 49517 50020 50018\nf 49518 50016 50019\nf 49518 50019 49520\nf 49519 49521 50022\nf 49519 50022 50020\nf 49520 50019 50021\nf 49520 50021 49522\nf 49521 49523 50024\nf 49521 50024 50022\nf 49522 50021 50023\nf 49522 50023 49524\nf 49523 49525 50024\nf 49524 50023 50027\nf 49524 50027 49528\nf 49525 49526 49527\nf 49525 49527 50024\nf 49526 49529 50028\nf 49526 50028 49527\nf 49527 50025 50024\nf 49527 50028 50025\nf 49528 50027 50029\nf 49528 50029 49530\nf 49529 49531 50032\nf 49529 50030 50028\nf 49529 50032 50030\nf 49530 50029 50031\nf 49530 50031 49532\nf 49531 49533 50035\nf 49531 50035 50032\nf 49532 50031 50034\nf 49532 50034 49534\nf 49533 49535 50035\nf 49534 50034 50038\nf 49534 50038 49537\nf 49535 49536 50035\nf 49535 49538 49539\nf 49535 49539 49536\nf 49536 49539 50039\nf 49536 50036 50035\nf 49536 50039 50036\nf 49537 50038 50040\nf 49537 50040 49540\nf 49538 49541 49542\nf 49538 49542 49539\nf 49539 49542 50041\nf 49539 50041 50039\nf 49540 50040 50042\nf 49540 50042 49543\nf 49541 49544 49546\nf 49541 49546 49542\nf 49542 49546 50043\nf 49542 50043 50041\nf 49543 50042 50045\nf 49543 50045 49547\nf 49544 49545 49546\nf 49545 49550 49552\nf 49545 49552 50049\nf 49545 50049 49546\nf 49546 50048 50043\nf 49546 50049 50048\nf 49547 49549 49548\nf 49547 50045 50046\nf 49547 50046 49549\nf 49548 49549 49556\nf 49548 49556 49553\nf 49549 50046 50051\nf 49549 50051 50053\nf 49549 50053 49556\nf 49550 49551 49552\nf 49551 49554 49556\nf 49551 49556 50053\nf 49551 50053 49552\nf 49552 50052 50049\nf 49552 50053 50052\nf 49553 49556 49555\nf 49554 49555 49556\nf 49557 49558 49562\nf 49557 49560 49559\nf 49557 49562 49560\nf 49558 49561 49562\nf 49559 49560 49563\nf 49560 49562 49565\nf 49560 49565 49563\nf 49561 49566 49567\nf 49561 49567 49562\nf 49562 49567 49565\nf 49563 49565 49564\nf 49564 49565 50055\nf 49564 49570 49569\nf 49564 50055 49570\nf 49565 49567 50055\nf 49566 49568 50056\nf 49566 50056 49567\nf 49567 50056 50055\nf 49568 49571 49572\nf 49568 49572 50060\nf 49568 50060 50056\nf 49569 49570 50062\nf 49569 50062 49573\nf 49570 50055 50057\nf 49570 50057 50058\nf 49570 50058 50062\nf 49571 49574 49575\nf 49571 49575 49572\nf 49572 49575 50060\nf 49573 50062 49576\nf 49574 49577 50070\nf 49574 50067 49575\nf 49574 50070 50067\nf 49575 50065 50060\nf 49575 50067 50065\nf 49576 50062 50068\nf 49576 50068 49578\nf 49577 49579 50074\nf 49577 50074 50070\nf 49578 50068 50072\nf 49578 50072 49580\nf 49579 49581 50077\nf 49579 50077 50074\nf 49580 50072 50076\nf 49580 50076 49582\nf 49581 49583 50079\nf 49581 50079 50077\nf 49582 50076 50078\nf 49582 50078 49585\nf 49583 49584 49588\nf 49583 49588 50082\nf 49583 50082 50079\nf 49584 49587 49588\nf 49585 50078 50080\nf 49585 50080 49586\nf 49586 50080 50081\nf 49586 50081 50084\nf 49586 50084 49589\nf 49587 49590 50085\nf 49587 50083 49588\nf 49587 50085 50083\nf 49588 50083 50082\nf 49589 50084 49591\nf 49590 49592 50088\nf 49590 50088 50085\nf 49591 50084 50087\nf 49591 50087 49593\nf 49592 49594 50090\nf 49592 50090 50088\nf 49593 50087 50089\nf 49593 50089 49595\nf 49594 49596 50092\nf 49594 50092 50090\nf 49595 50089 50091\nf 49595 50091 49597\nf 49596 49598 50094\nf 49596 50094 50092\nf 49597 50091 50093\nf 49597 50093 49599\nf 49598 49600 50096\nf 49598 50096 50094\nf 49599 50093 50095\nf 49599 50095 49601\nf 49600 49603 50100\nf 49600 50100 50096\nf 49601 50095 50097\nf 49601 50097 49602\nf 49602 50097 50098\nf 49602 50098 50102\nf 49602 50102 49605\nf 49603 49604 50100\nf 49604 49606 50103\nf 49604 50101 50100\nf 49604 50103 50101\nf 49605 50102 49607\nf 49606 49608 50105\nf 49606 50105 50103\nf 49607 50102 50104\nf 49607 50104 49609\nf 49608 49610 50107\nf 49608 50107 50105\nf 49609 50104 50106\nf 49609 50106 49611\nf 49610 49612 50109\nf 49610 50109 50107\nf 49611 50106 50108\nf 49611 50108 49613\nf 49612 49614 50111\nf 49612 50111 50109\nf 49613 50108 50110\nf 49613 50110 49615\nf 49614 49616 50113\nf 49614 50113 50111\nf 49615 50110 50112\nf 49615 50112 49617\nf 49616 49618 50115\nf 49616 50115 50113\nf 49617 50112 50114\nf 49617 50114 49619\nf 49618 49620 50117\nf 49618 50117 50115\nf 49619 50114 50116\nf 49619 50116 49621\nf 49620 49622 50119\nf 49620 50119 50117\nf 49621 50116 50118\nf 49621 50118 49624\nf 49622 49623 50119\nf 49623 49625 50122\nf 49623 50120 50119\nf 49623 50122 50120\nf 49624 50118 50121\nf 49624 50121 49626\nf 49625 49627 50124\nf 49625 50124 50122\nf 49626 50121 50123\nf 49626 50123 49628\nf 49627 49630 50126\nf 49627 50126 50124\nf 49628 50123 50125\nf 49628 50125 50127\nf 49628 50127 49629\nf 49629 49632 49631\nf 49629 50127 49632\nf 49630 49633 50129\nf 49630 50129 50126\nf 49631 49632 50131\nf 49631 50131 49635\nf 49632 50127 50128\nf 49632 50128 50131\nf 49633 49634 50129\nf 49634 49636 50134\nf 49634 50130 50129\nf 49634 50134 50130\nf 49635 50131 49638\nf 49636 49637 50134\nf 49637 49641 50137\nf 49637 50135 50134\nf 49637 50137 50135\nf 49638 49640 49639\nf 49638 50131 50132\nf 49638 50132 49640\nf 49639 49640 49643\nf 49640 50132 50136\nf 49640 50136 49643\nf 49641 49642 50137\nf 49642 49645 50141\nf 49642 50138 50137\nf 49642 50141 50138\nf 49643 50136 50139\nf 49643 50139 50140\nf 49643 50140 49644\nf 49644 50140 50142\nf 49644 50142 49646\nf 49645 49646 50141\nf 49646 50142 50141\nf 49647 49648 50144\nf 49647 50144 50154\nf 49647 50154 49657\nf 49648 49649 50145\nf 49648 50145 50144\nf 49649 49650 50146\nf 49649 50146 50145\nf 49650 49651 50147\nf 49650 50147 50146\nf 49651 49652 50148\nf 49651 50148 50147\nf 49652 49653 50149\nf 49652 50149 50148\nf 49653 49654 50150\nf 49653 50150 50149\nf 49654 49655 50151\nf 49654 50151 50150\nf 49655 49659 50152\nf 49655 50152 50151\nf 49656 49658 50153\nf 49656 50153 50159\nf 49656 50159 49662\nf 49657 50154 49658\nf 49658 50154 50155\nf 49658 50155 50153\nf 49659 49660 50157\nf 49659 50156 50152\nf 49659 50157 50156\nf 49660 49661 50157\nf 49661 49664 50158\nf 49661 50158 50157\nf 49662 50159 49663\nf 49663 50159 50160\nf 49663 50160 50163\nf 49663 50163 49666\nf 49664 49665 50162\nf 49664 50161 50158\nf 49664 50162 50161\nf 49665 49668 50162\nf 49666 50163 49667\nf 49667 50163 50164\nf 49667 50164 50167\nf 49667 50167 49670\nf 49668 49669 50166\nf 49668 50165 50162\nf 49668 50166 50165\nf 49669 49672 50166\nf 49670 50167 50168\nf 49670 50168 49671\nf 49671 50168 49674\nf 49672 49673 50170\nf 49672 50169 50166\nf 49672 50170 50169\nf 49673 49677 50170\nf 49674 50168 50171\nf 49674 50171 50172\nf 49674 50172 49675\nf 49675 50172 50173\nf 49675 50173 49676\nf 49676 50173 49678\nf 49677 49682 50179\nf 49677 50174 50170\nf 49677 50179 50174\nf 49678 50173 50175\nf 49678 50175 50176\nf 49678 50176 49679\nf 49679 50176 50177\nf 49679 50177 49680\nf 49680 50177 50178\nf 49680 50178 49681\nf 49681 50178 49683\nf 49682 49688 50179\nf 49683 50178 50181\nf 49683 50181 50182\nf 49683 50182 49684\nf 49684 50182 50183\nf 49684 50183 49685\nf 49685 50183 50184\nf 49685 50184 49686\nf 49686 50184 50185\nf 49686 50185 49687\nf 49687 50185 49691\nf 49688 49689 49690\nf 49688 49690 50179\nf 49689 49698 49700\nf 49689 49700 50187\nf 49689 50187 49690\nf 49690 50180 50179\nf 49690 50186 50180\nf 49690 50187 50186\nf 49691 50185 50188\nf 49691 50188 50189\nf 49691 50189 49692\nf 49692 50189 50190\nf 49692 50190 49693\nf 49693 50190 50191\nf 49693 50191 49694\nf 49694 50191 50192\nf 49694 50192 49695\nf 49695 50192 50193\nf 49695 50193 49696\nf 49696 50193 50195\nf 49696 50195 49697\nf 49697 50195 49699\nf 49698 49699 49700\nf 49699 50194 49700\nf 49699 50195 50194\nf 49700 50194 50187\nf 49701 49709 49710\nf 49701 49710 49707\nf 49702 49703 50196\nf 49702 50196 50204\nf 49702 50204 49712\nf 49703 49704 50197\nf 49703 50197 50196\nf 49704 49705 50198\nf 49704 50198 50197\nf 49705 49706 50199\nf 49705 50199 50198\nf 49706 49713 50200\nf 49706 50200 50199\nf 49707 49710 49708\nf 49708 49710 50202\nf 49708 50201 50206\nf 49708 50202 50201\nf 49708 50206 49714\nf 49709 49711 50202\nf 49709 50202 49710\nf 49711 49715 50203\nf 49711 50203 50202\nf 49712 50204 49716\nf 49713 49717 50209\nf 49713 50205 50200\nf 49713 50209 50205\nf 49714 50206 49719\nf 49715 49721 50213\nf 49715 50207 50203\nf 49715 50213 50207\nf 49716 50204 50208\nf 49716 50208 49723\nf 49717 49718 50210\nf 49717 50210 50209\nf 49718 49724 50210\nf 49719 50206 50211\nf 49719 50211 49720\nf 49720 50211 50212\nf 49720 50212 50217\nf 49720 50217 49725\nf 49721 49722 50214\nf 49721 50214 50213\nf 49722 49726 50214\nf 49723 50208 50215\nf 49723 50215 49727\nf 49724 49728 50220\nf 49724 50216 50210\nf 49724 50220 50216\nf 49725 50217 49729\nf 49726 49730 50222\nf 49726 50218 50214\nf 49726 50222 50218\nf 49727 50215 50219\nf 49727 50219 49731\nf 49728 49733 50225\nf 49728 50225 50220\nf 49729 50217 50221\nf 49729 50221 49734\nf 49730 49735 50227\nf 49730 50227 50222\nf 49731 50219 50223\nf 49731 50223 49732\nf 49732 50223 50224\nf 49732 50224 50228\nf 49732 50228 49736\nf 49733 49737 50229\nf 49733 50229 50225\nf 49734 50221 50226\nf 49734 50226 49739\nf 49735 49740 50232\nf 49735 50232 50227\nf 49736 50228 49741\nf 49737 49738 50230\nf 49737 50230 50229\nf 49738 49742 50230\nf 49739 50226 50231\nf 49739 50231 49743\nf 49740 49744 50236\nf 49740 50236 50232\nf 49741 50228 50233\nf 49741 50233 49745\nf 49742 49746 50238\nf 49742 50234 50230\nf 49742 50238 50234\nf 49743 50231 50235\nf 49743 50235 49747\nf 49744 49748 50240\nf 49744 50240 50236\nf 49745 50233 50237\nf 49745 50237 49749\nf 49746 49750 50242\nf 49746 50242 50238\nf 49747 50235 50239\nf 49747 50239 49751\nf 49748 49752 50244\nf 49748 50244 50240\nf 49749 50237 50241\nf 49749 50241 49754\nf 49750 49755 50247\nf 49750 50247 50242\nf 49751 50239 50243\nf 49751 50243 49756\nf 49752 49753 50245\nf 49752 50245 50244\nf 49753 49757 50245\nf 49754 50241 50246\nf 49754 50246 49765\nf 49755 49767 50259\nf 49755 50259 50247\nf 49756 50243 50249\nf 49756 50249 49768\nf 49757 49758 50251\nf 49757 50250 50245\nf 49757 50251 50250\nf 49758 49759 50251\nf 49759 49760 50252\nf 49759 50252 50251\nf 49760 49761 50253\nf 49760 50253 50252\nf 49761 49769 49770\nf 49761 49770 50253\nf 49762 49763 50254\nf 49762 50254 50316\nf 49762 50316 49823\nf 49763 49825 50255\nf 49763 50255 50254\nf 49764 49766 50256\nf 49764 50256 50347\nf 49764 50347 49853\nf 49765 50246 50257\nf 49765 50257 49766\nf 49766 50257 50258\nf 49766 50258 50256\nf 49767 49855 50349\nf 49767 50349 50259\nf 49768 50249 50261\nf 49768 50261 49857\nf 49769 49771 50263\nf 49769 50263 49770\nf 49770 50262 50253\nf 49770 50263 50262\nf 49771 49772 50264\nf 49771 50264 50263\nf 49772 49773 50265\nf 49772 50265 50264\nf 49773 49774 50266\nf 49773 50266 50265\nf 49774 49775 50267\nf 49774 50267 50266\nf 49775 49776 50268\nf 49775 50268 50267\nf 49776 49777 50269\nf 49776 50269 50268\nf 49777 49778 50270\nf 49777 50270 50269\nf 49778 49779 50271\nf 49778 50271 50270\nf 49779 49780 50272\nf 49779 50272 50271\nf 49780 49781 50273\nf 49780 50273 50272\nf 49781 49782 50274\nf 49781 50274 50273\nf 49782 49783 50275\nf 49782 50275 50274\nf 49783 49784 50276\nf 49783 50276 50275\nf 49784 49785 50277\nf 49784 50277 50276\nf 49785 49786 50278\nf 49785 50278 50277\nf 49786 49787 50279\nf 49786 50279 50278\nf 49787 49788 50280\nf 49787 50280 50279\nf 49788 49789 50281\nf 49788 50281 50280\nf 49789 49790 50282\nf 49789 50282 50281\nf 49790 49791 50283\nf 49790 50283 50282\nf 49791 49792 50284\nf 49791 50284 50283\nf 49792 49793 50285\nf 49792 50285 50284\nf 49793 49794 50286\nf 49793 50286 50285\nf 49794 49795 50287\nf 49794 50287 50286\nf 49795 49796 50288\nf 49795 50288 50287\nf 49796 49797 50289\nf 49796 50289 50288\nf 49797 49798 50290\nf 49797 50290 50289\nf 49798 49799 50291\nf 49798 50291 50290\nf 49799 49800 50292\nf 49799 50292 50291\nf 49800 49801 50293\nf 49800 50293 50292\nf 49801 49802 50294\nf 49801 50294 50293\nf 49802 49803 50295\nf 49802 50295 50294\nf 49803 49804 50296\nf 49803 50296 50295\nf 49804 49805 50297\nf 49804 50297 50296\nf 49805 49806 50298\nf 49805 50298 50297\nf 49806 49807 50299\nf 49806 50299 50298\nf 49807 49808 50300\nf 49807 50300 50299\nf 49808 49809 50301\nf 49808 50301 50300\nf 49809 49810 50302\nf 49809 50302 50301\nf 49810 49811 50303\nf 49810 50303 50302\nf 49811 49812 50304\nf 49811 50304 50303\nf 49812 49813 50305\nf 49812 50305 50304\nf 49813 49814 50306\nf 49813 50306 50305\nf 49814 49815 50307\nf 49814 50307 50306\nf 49815 49816 50308\nf 49815 50308 50307\nf 49816 49817 50309\nf 49816 50309 50308\nf 49817 49818 50310\nf 49817 50310 50309\nf 49818 49819 50311\nf 49818 50311 50310\nf 49819 49820 50312\nf 49819 50312 50311\nf 49820 49821 50313\nf 49820 50313 50312\nf 49821 49822 50314\nf 49821 50314 50313\nf 49822 49824 50315\nf 49822 50315 50314\nf 49823 50316 49824\nf 49824 50316 50317\nf 49824 50317 50315\nf 49825 49826 50320\nf 49825 50318 50255\nf 49825 50320 50318\nf 49826 49827 50320\nf 49827 49828 50321\nf 49827 50321 50320\nf 49828 49829 50322\nf 49828 50322 50321\nf 49829 49830 50323\nf 49829 50323 50322\nf 49830 49831 50324\nf 49830 50324 50323\nf 49831 49832 50325\nf 49831 50325 50324\nf 49832 49833 50326\nf 49832 50326 50325\nf 49833 49834 50327\nf 49833 50327 50326\nf 49834 49835 50328\nf 49834 50328 50327\nf 49835 49836 50329\nf 49835 50329 50328\nf 49836 49837 50330\nf 49836 50330 50329\nf 49837 49838 50331\nf 49837 50331 50330\nf 49838 49839 50332\nf 49838 50332 50331\nf 49839 49840 50333\nf 49839 50333 50332\nf 49840 49841 50334\nf 49840 50334 50333\nf 49841 49842 50335\nf 49841 50335 50334\nf 49842 49843 50336\nf 49842 50336 50335\nf 49843 49844 50337\nf 49843 50337 50336\nf 49844 49845 50338\nf 49844 50338 50337\nf 49845 49846 50339\nf 49845 50339 50338\nf 49846 49847 50340\nf 49846 50340 50339\nf 49847 49848 50341\nf 49847 50341 50340\nf 49848 49849 50342\nf 49848 50342 50341\nf 49849 49850 50343\nf 49849 50343 50342\nf 49850 49851 50344\nf 49850 50344 50343\nf 49851 49852 50345\nf 49851 50345 50344\nf 49852 49854 50346\nf 49852 50346 50345\nf 49853 50347 49854\nf 49854 50347 50348\nf 49854 50348 50346\nf 49855 49856 50349\nf 49856 49858 50353\nf 49856 50350 50349\nf 49856 50353 50350\nf 49857 50261 50352\nf 49857 50352 49859\nf 49858 49861 50356\nf 49858 50356 50353\nf 49859 50352 50354\nf 49859 50354 50355\nf 49859 50355 49860\nf 49860 50355 49863\nf 49861 49862 50356\nf 49862 49864 50359\nf 49862 50357 50356\nf 49862 50359 50357\nf 49863 50355 50358\nf 49863 50358 49865\nf 49864 49867 50362\nf 49864 50362 50359\nf 49865 50358 50360\nf 49865 50360 49869\nf 49866 49874 50369\nf 49866 50361 50363\nf 49866 50363 49868\nf 49866 50369 50361\nf 49867 49868 50362\nf 49868 50363 50362\nf 49869 50360 50364\nf 49869 50364 50365\nf 49869 50365 49870\nf 49870 50365 49876\nf 49871 49964 50459\nf 49871 50366 50367\nf 49871 50367 49872\nf 49871 50459 50366\nf 49872 50367 50368\nf 49872 50368 49873\nf 49873 50368 50370\nf 49873 50370 49875\nf 49874 49875 50369\nf 49875 50370 50369\nf 49876 50365 50371\nf 49876 50371 50372\nf 49876 50372 49877\nf 49877 50372 50373\nf 49877 50373 49878\nf 49878 50373 49966\nf 49879 49969 50464\nf 49879 50374 50375\nf 49879 50375 49880\nf 49879 50464 50374\nf 49880 50375 50376\nf 49880 50376 49881\nf 49881 50376 50377\nf 49881 50377 49882\nf 49882 50377 50378\nf 49882 50378 49883\nf 49883 50378 50379\nf 49883 50379 49884\nf 49884 50379 50380\nf 49884 50380 49885\nf 49885 50380 50381\nf 49885 50381 49886\nf 49886 50381 50382\nf 49886 50382 49887\nf 49887 50382 50383\nf 49887 50383 49888\nf 49888 50383 50384\nf 49888 50384 49889\nf 49889 50384 50385\nf 49889 50385 49890\nf 49890 50385 50386\nf 49890 50386 49891\nf 49891 50386 50387\nf 49891 50387 49892\nf 49892 50387 50388\nf 49892 50388 49893\nf 49893 50388 50389\nf 49893 50389 49894\nf 49894 50389 50390\nf 49894 50390 49895\nf 49895 50390 50391\nf 49895 50391 49896\nf 49896 50391 50392\nf 49896 50392 49897\nf 49897 50392 50393\nf 49897 50393 49898\nf 49898 50393 50394\nf 49898 50394 49899\nf 49899 50394 50395\nf 49899 50395 49900\nf 49900 50395 50396\nf 49900 50396 49901\nf 49901 50396 50397\nf 49901 50397 49902\nf 49902 50397 50398\nf 49902 50398 49903\nf 49903 50398 50399\nf 49903 50399 49904\nf 49904 50399 50400\nf 49904 50400 49905\nf 49905 50400 50401\nf 49905 50401 49906\nf 49906 50401 50402\nf 49906 50402 49907\nf 49907 50402 50403\nf 49907 50403 49908\nf 49908 50403 50404\nf 49908 50404 49909\nf 49909 50404 50405\nf 49909 50405 49910\nf 49910 50405 50406\nf 49910 50406 49911\nf 49911 50406 50407\nf 49911 50407 49912\nf 49912 50407 50408\nf 49912 50408 49913\nf 49913 50408 50409\nf 49913 50409 49914\nf 49914 50409 50410\nf 49914 50410 49915\nf 49915 50410 50411\nf 49915 50411 49916\nf 49916 50411 50412\nf 49916 50412 49917\nf 49917 50412 50413\nf 49917 50413 49918\nf 49918 50413 50414\nf 49918 50414 49919\nf 49919 50414 50415\nf 49919 50415 49920\nf 49920 50415 50416\nf 49920 50416 49921\nf 49921 50416 50417\nf 49921 50417 49922\nf 49922 50417 50418\nf 49922 50418 49923\nf 49923 50418 50419\nf 49923 50419 49924\nf 49924 50419 50420\nf 49924 50420 49925\nf 49925 50420 50421\nf 49925 50421 49926\nf 49926 50421 50422\nf 49926 50422 49927\nf 49927 50422 50423\nf 49927 50423 49928\nf 49928 50423 50424\nf 49928 50424 49929\nf 49929 50424 50425\nf 49929 50425 49930\nf 49930 50425 50426\nf 49930 50426 49931\nf 49931 50426 50427\nf 49931 50427 49932\nf 49932 50427 50428\nf 49932 50428 49933\nf 49933 50428 50429\nf 49933 50429 49934\nf 49934 50429 50430\nf 49934 50430 49935\nf 49935 50430 50431\nf 49935 50431 49936\nf 49936 50431 50432\nf 49936 50432 49937\nf 49937 50432 50433\nf 49937 50433 49938\nf 49938 50433 50434\nf 49938 50434 49939\nf 49939 50434 50435\nf 49939 50435 49940\nf 49940 50435 50436\nf 49940 50436 49941\nf 49941 50436 50437\nf 49941 50437 49942\nf 49942 50437 50438\nf 49942 50438 49943\nf 49943 50438 50439\nf 49943 50439 49944\nf 49944 50439 50440\nf 49944 50440 49945\nf 49945 50440 50441\nf 49945 50441 49946\nf 49946 50441 50442\nf 49946 50442 49947\nf 49947 50442 50443\nf 49947 50443 49948\nf 49948 50443 50444\nf 49948 50444 49949\nf 49949 50444 50445\nf 49949 50445 49950\nf 49950 50445 50446\nf 49950 50446 49951\nf 49951 50446 50447\nf 49951 50447 49952\nf 49952 50447 50448\nf 49952 50448 49953\nf 49953 50448 50449\nf 49953 50449 49954\nf 49954 50449 50450\nf 49954 50450 49955\nf 49955 50450 50451\nf 49955 50451 49956\nf 49956 50451 50452\nf 49956 50452 49957\nf 49957 50452 50453\nf 49957 50453 49958\nf 49958 50453 50454\nf 49958 50454 49959\nf 49959 50454 50455\nf 49959 50455 49960\nf 49960 50455 50456\nf 49960 50456 49961\nf 49961 50456 50457\nf 49961 50457 49962\nf 49962 50457 50458\nf 49962 50458 49963\nf 49963 50458 50460\nf 49963 50460 49965\nf 49964 49965 50459\nf 49965 50460 50459\nf 49966 50373 50461\nf 49966 50461 50462\nf 49966 50462 49967\nf 49967 50462 49971\nf 49968 49973 50468\nf 49968 50463 50465\nf 49968 50465 49970\nf 49968 50468 50463\nf 49969 49970 50464\nf 49970 50465 50464\nf 49971 50462 50466\nf 49971 50466 50467\nf 49971 50467 49972\nf 49972 50467 50469\nf 49972 50469 49974\nf 49973 49974 50468\nf 49974 50469 50468\nf 49975 49976 50470\nf 49975 50470 50474\nf 49975 50474 49979\nf 49976 49977 50471\nf 49976 50471 50470\nf 49977 49978 50472\nf 49977 50472 50471\nf 49978 49981 50473\nf 49978 50473 50472\nf 49979 50474 49980\nf 49980 50474 50475\nf 49980 50475 50477\nf 49980 50477 49982\nf 49981 49984 50479\nf 49981 50476 50473\nf 49981 50479 50476\nf 49982 50477 49983\nf 49983 50477 50478\nf 49983 50478 50482\nf 49983 50482 49986\nf 49984 49985 50480\nf 49984 50480 50479\nf 49985 49987 50480\nf 49986 50482 49988\nf 49987 49989 50486\nf 49987 50484 50480\nf 49987 50486 50484\nf 49988 50482 50485\nf 49988 50485 49990\nf 49989 49991 50488\nf 49989 50488 50486\nf 49990 50485 50487\nf 49990 50487 49992\nf 49991 49993 50490\nf 49991 50490 50488\nf 49992 50487 50489\nf 49992 50489 49994\nf 49993 49995 50492\nf 49993 50492 50490\nf 49994 50489 50491\nf 49994 50491 49997\nf 49995 49996 49999\nf 49995 49999 50494\nf 49995 50494 50492\nf 49996 49998 49999\nf 49997 50491 50493\nf 49997 50493 50000\nf 49998 50001 50497\nf 49998 50495 49999\nf 49998 50497 50495\nf 49999 50495 50494\nf 50000 50493 50496\nf 50000 50496 50002\nf 50001 50003 50499\nf 50001 50499 50497\nf 50002 50496 50498\nf 50002 50498 50004\nf 50003 50005 50501\nf 50003 50501 50499\nf 50004 50498 50500\nf 50004 50500 50006\nf 50005 50007 50503\nf 50005 50503 50501\nf 50006 50500 50502\nf 50006 50502 50009\nf 50007 50008 50503\nf 50008 50010 50506\nf 50008 50504 50503\nf 50008 50506 50504\nf 50009 50502 50505\nf 50009 50505 50011\nf 50010 50012 50508\nf 50010 50508 50506\nf 50011 50505 50507\nf 50011 50507 50013\nf 50012 50015 50511\nf 50012 50511 50508\nf 50013 50507 50509\nf 50013 50509 50510\nf 50013 50510 50014\nf 50014 50510 50016\nf 50015 50017 50513\nf 50015 50513 50511\nf 50016 50510 50512\nf 50016 50512 50019\nf 50017 50018 50513\nf 50018 50020 50516\nf 50018 50514 50513\nf 50018 50516 50514\nf 50019 50512 50515\nf 50019 50515 50021\nf 50020 50022 50518\nf 50020 50518 50516\nf 50021 50515 50517\nf 50021 50517 50023\nf 50022 50024 50518\nf 50023 50517 50520\nf 50023 50520 50027\nf 50024 50025 50026\nf 50024 50026 50518\nf 50025 50028 50521\nf 50025 50521 50026\nf 50026 50519 50518\nf 50026 50521 50519\nf 50027 50520 50522\nf 50027 50522 50029\nf 50028 50030 50525\nf 50028 50523 50521\nf 50028 50525 50523\nf 50029 50522 50524\nf 50029 50524 50031\nf 50030 50032 50525\nf 50031 50524 50528\nf 50031 50528 50034\nf 50032 50033 50525\nf 50032 50035 50037\nf 50032 50037 50033\nf 50033 50037 50529\nf 50033 50526 50525\nf 50033 50529 50526\nf 50034 50528 50530\nf 50034 50530 50038\nf 50035 50036 50037\nf 50036 50039 50532\nf 50036 50532 50037\nf 50037 50532 50529\nf 50038 50530 50534\nf 50038 50534 50040\nf 50039 50041 50541\nf 50039 50536 50532\nf 50039 50541 50536\nf 50040 50534 50538\nf 50040 50538 50042\nf 50041 50043 50541\nf 50042 50538 50544\nf 50042 50544 50045\nf 50043 50044 50541\nf 50043 50048 50050\nf 50043 50050 50044\nf 50044 50050 50547\nf 50044 50542 50541\nf 50044 50547 50542\nf 50045 50047 50046\nf 50045 50544 50545\nf 50045 50545 50047\nf 50046 50047 50054\nf 50046 50054 50051\nf 50047 50545 50549\nf 50047 50549 50551\nf 50047 50551 50054\nf 50048 50049 50050\nf 50049 50052 50054\nf 50049 50054 50551\nf 50049 50551 50050\nf 50050 50550 50547\nf 50050 50551 50550\nf 50051 50054 50053\nf 50052 50053 50054\nf 50055 50056 50061\nf 50055 50059 50057\nf 50055 50061 50059\nf 50056 50060 50061\nf 50057 50059 50058\nf 50058 50059 50063\nf 50058 50063 50062\nf 50059 50061 50064\nf 50059 50064 50063\nf 50060 50065 50066\nf 50060 50066 50061\nf 50061 50066 50064\nf 50062 50063 50068\nf 50063 50064 50069\nf 50063 50069 50068\nf 50064 50066 50553\nf 50064 50553 50555\nf 50064 50555 50069\nf 50065 50067 50554\nf 50065 50554 50066\nf 50066 50554 50553\nf 50067 50070 50071\nf 50067 50071 50557\nf 50067 50557 50554\nf 50068 50069 50072\nf 50069 50073 50072\nf 50069 50555 50559\nf 50069 50559 50073\nf 50070 50074 50075\nf 50070 50075 50071\nf 50071 50075 50557\nf 50072 50073 50564\nf 50072 50564 50076\nf 50073 50559 50560\nf 50073 50560 50564\nf 50074 50077 50566\nf 50074 50563 50075\nf 50074 50566 50563\nf 50075 50562 50557\nf 50075 50563 50562\nf 50076 50564 50078\nf 50077 50079 50569\nf 50077 50569 50566\nf 50078 50564 50568\nf 50078 50568 50080\nf 50079 50082 50573\nf 50079 50573 50569\nf 50080 50568 50571\nf 50080 50571 50081\nf 50081 50571 50572\nf 50081 50572 50574\nf 50081 50574 50084\nf 50082 50083 50086\nf 50082 50086 50575\nf 50082 50575 50573\nf 50083 50085 50086\nf 50084 50574 50087\nf 50085 50088 50578\nf 50085 50576 50086\nf 50085 50578 50576\nf 50086 50576 50575\nf 50087 50574 50577\nf 50087 50577 50089\nf 50088 50090 50581\nf 50088 50581 50578\nf 50089 50577 50580\nf 50089 50580 50091\nf 50090 50092 50583\nf 50090 50583 50581\nf 50091 50580 50582\nf 50091 50582 50093\nf 50092 50094 50585\nf 50092 50585 50583\nf 50093 50582 50584\nf 50093 50584 50095\nf 50094 50096 50589\nf 50094 50589 50585\nf 50095 50584 50586\nf 50095 50586 50097\nf 50096 50100 50591\nf 50096 50591 50589\nf 50097 50099 50098\nf 50097 50586 50099\nf 50098 50099 50590\nf 50098 50590 50102\nf 50099 50586 50587\nf 50099 50587 50590\nf 50100 50101 50591\nf 50101 50103 50595\nf 50101 50592 50591\nf 50101 50595 50592\nf 50102 50590 50594\nf 50102 50594 50104\nf 50103 50105 50597\nf 50103 50597 50595\nf 50104 50594 50596\nf 50104 50596 50106\nf 50105 50107 50599\nf 50105 50599 50597\nf 50106 50596 50598\nf 50106 50598 50108\nf 50107 50109 50601\nf 50107 50601 50599\nf 50108 50598 50600\nf 50108 50600 50110\nf 50109 50111 50603\nf 50109 50603 50601\nf 50110 50600 50602\nf 50110 50602 50112\nf 50111 50113 50605\nf 50111 50605 50603\nf 50112 50602 50604\nf 50112 50604 50114\nf 50113 50115 50607\nf 50113 50607 50605\nf 50114 50604 50606\nf 50114 50606 50116\nf 50115 50117 50609\nf 50115 50609 50607\nf 50116 50606 50608\nf 50116 50608 50118\nf 50117 50119 50611\nf 50117 50611 50609\nf 50118 50608 50610\nf 50118 50610 50121\nf 50119 50120 50611\nf 50120 50122 50615\nf 50120 50612 50611\nf 50120 50615 50612\nf 50121 50610 50614\nf 50121 50614 50123\nf 50122 50124 50617\nf 50122 50617 50615\nf 50123 50614 50616\nf 50123 50616 50125\nf 50124 50126 50619\nf 50124 50619 50617\nf 50125 50616 50618\nf 50125 50618 50127\nf 50126 50129 50621\nf 50126 50621 50619\nf 50127 50618 50620\nf 50127 50620 50624\nf 50127 50624 50128\nf 50128 50133 50131\nf 50128 50624 50133\nf 50129 50130 50621\nf 50130 50134 50625\nf 50130 50622 50621\nf 50130 50625 50622\nf 50131 50133 50132\nf 50132 50133 50136\nf 50133 50624 50136\nf 50134 50135 50625\nf 50135 50137 50629\nf 50135 50626 50625\nf 50135 50629 50626\nf 50136 50624 50627\nf 50136 50627 50139\nf 50137 50138 50629\nf 50138 50141 50143\nf 50138 50143 50628\nf 50138 50628 50630\nf 50138 50630 50629\nf 50139 50627 50631\nf 50139 50631 50633\nf 50139 50633 50140\nf 50140 50633 50142\nf 50141 50142 50143\nf 50142 50632 50143\nf 50142 50633 50632\nf 50143 50632 50628\nf 50144 50145 50635\nf 50144 50635 50645\nf 50144 50645 50154\nf 50145 50146 50636\nf 50145 50636 50635\nf 50146 50147 50637\nf 50146 50637 50636\nf 50147 50148 50638\nf 50147 50638 50637\nf 50148 50149 50639\nf 50148 50639 50638\nf 50149 50150 50640\nf 50149 50640 50639\nf 50150 50151 50641\nf 50150 50641 50640\nf 50151 50152 50642\nf 50151 50642 50641\nf 50152 50156 50643\nf 50152 50643 50642\nf 50153 50155 50644\nf 50153 50644 50651\nf 50153 50651 50159\nf 50154 50645 50155\nf 50155 50645 50646\nf 50155 50646 50644\nf 50156 50157 50649\nf 50156 50647 50643\nf 50156 50649 50647\nf 50157 50158 50649\nf 50158 50161 50650\nf 50158 50650 50649\nf 50159 50651 50160\nf 50160 50651 50652\nf 50160 50652 50656\nf 50160 50656 50163\nf 50161 50162 50655\nf 50161 50653 50650\nf 50161 50655 50653\nf 50162 50165 50655\nf 50163 50656 50164\nf 50164 50656 50657\nf 50164 50657 50660\nf 50164 50660 50167\nf 50165 50166 50659\nf 50165 50658 50655\nf 50165 50659 50658\nf 50166 50169 50659\nf 50167 50660 50661\nf 50167 50661 50168\nf 50168 50661 50171\nf 50169 50170 50663\nf 50169 50662 50659\nf 50169 50663 50662\nf 50170 50174 50663\nf 50171 50661 50664\nf 50171 50664 50665\nf 50171 50665 50172\nf 50172 50665 50666\nf 50172 50666 50173\nf 50173 50666 50175\nf 50174 50179 50672\nf 50174 50667 50663\nf 50174 50672 50667\nf 50175 50666 50668\nf 50175 50668 50669\nf 50175 50669 50176\nf 50176 50669 50670\nf 50176 50670 50177\nf 50177 50670 50671\nf 50177 50671 50178\nf 50178 50671 50181\nf 50179 50180 50672\nf 50180 50186 50679\nf 50180 50673 50672\nf 50180 50679 50673\nf 50181 50671 50674\nf 50181 50674 50675\nf 50181 50675 50182\nf 50182 50675 50676\nf 50182 50676 50183\nf 50183 50676 50677\nf 50183 50677 50184\nf 50184 50677 50678\nf 50184 50678 50185\nf 50185 50678 50188\nf 50186 50187 50679\nf 50187 50194 50687\nf 50187 50680 50679\nf 50187 50687 50680\nf 50188 50678 50681\nf 50188 50681 50682\nf 50188 50682 50189\nf 50189 50682 50683\nf 50189 50683 50190\nf 50190 50683 50684\nf 50190 50684 50191\nf 50191 50684 50685\nf 50191 50685 50192\nf 50192 50685 50686\nf 50192 50686 50193\nf 50193 50686 50688\nf 50193 50688 50195\nf 50194 50195 50687\nf 50195 50688 50687\nf 50196 50197 50690\nf 50196 50690 50698\nf 50196 50698 50204\nf 50197 50198 50691\nf 50197 50691 50690\nf 50198 50199 50692\nf 50198 50692 50691\nf 50199 50200 50693\nf 50199 50693 50692\nf 50200 50205 50694\nf 50200 50694 50693\nf 50201 50202 50695\nf 50201 50695 50700\nf 50201 50700 50206\nf 50202 50203 50696\nf 50202 50696 50695\nf 50203 50207 50697\nf 50203 50697 50696\nf 50204 50698 50208\nf 50205 50209 50703\nf 50205 50699 50694\nf 50205 50703 50699\nf 50206 50700 50211\nf 50207 50213 50707\nf 50207 50701 50697\nf 50207 50707 50701\nf 50208 50698 50702\nf 50208 50702 50215\nf 50209 50210 50704\nf 50209 50704 50703\nf 50210 50216 50704\nf 50211 50700 50705\nf 50211 50705 50212\nf 50212 50705 50706\nf 50212 50706 50711\nf 50212 50711 50217\nf 50213 50214 50708\nf 50213 50708 50707\nf 50214 50218 50708\nf 50215 50702 50709\nf 50215 50709 50219\nf 50216 50220 50714\nf 50216 50710 50704\nf 50216 50714 50710\nf 50217 50711 50221\nf 50218 50222 50716\nf 50218 50712 50708\nf 50218 50716 50712\nf 50219 50709 50713\nf 50219 50713 50223\nf 50220 50225 50719\nf 50220 50719 50714\nf 50221 50711 50715\nf 50221 50715 50226\nf 50222 50227 50721\nf 50222 50721 50716\nf 50223 50713 50717\nf 50223 50717 50224\nf 50224 50717 50718\nf 50224 50718 50722\nf 50224 50722 50228\nf 50225 50229 50723\nf 50225 50723 50719\nf 50226 50715 50720\nf 50226 50720 50231\nf 50227 50232 50726\nf 50227 50726 50721\nf 50228 50722 50233\nf 50229 50230 50724\nf 50229 50724 50723\nf 50230 50234 50724\nf 50231 50720 50725\nf 50231 50725 50235\nf 50232 50236 50731\nf 50232 50731 50726\nf 50233 50722 50727\nf 50233 50727 50237\nf 50234 50238 50733\nf 50234 50728 50724\nf 50234 50733 50728\nf 50235 50725 50730\nf 50235 50730 50239\nf 50236 50240 50736\nf 50236 50736 50731\nf 50237 50727 50732\nf 50237 50732 50241\nf 50238 50242 50738\nf 50238 50738 50733\nf 50239 50730 50735\nf 50239 50735 50243\nf 50240 50244 50742\nf 50240 50742 50736\nf 50241 50732 50737\nf 50241 50737 50246\nf 50242 50247 50738\nf 50243 50735 50741\nf 50243 50741 50249\nf 50244 50245 50743\nf 50244 50743 50742\nf 50245 50250 50743\nf 50246 50737 50744\nf 50246 50744 50257\nf 50247 50248 50738\nf 50247 50259 50260\nf 50247 50260 50248\nf 50248 50260 50745\nf 50248 50739 50738\nf 50248 50745 50739\nf 50249 50741 50746\nf 50249 50746 50261\nf 50250 50251 50748\nf 50250 50747 50743\nf 50250 50748 50747\nf 50251 50252 50748\nf 50252 50253 50749\nf 50252 50749 50748\nf 50253 50262 50750\nf 50253 50750 50749\nf 50254 50255 50751\nf 50254 50751 50811\nf 50254 50811 50316\nf 50255 50318 50319\nf 50255 50319 50751\nf 50256 50258 50752\nf 50256 50752 50843\nf 50256 50843 50347\nf 50257 50744 50753\nf 50257 50753 50258\nf 50258 50753 50754\nf 50258 50754 50752\nf 50259 50349 50351\nf 50259 50351 50260\nf 50260 50351 50755\nf 50260 50755 50745\nf 50261 50746 50756\nf 50261 50756 50352\nf 50262 50263 50758\nf 50262 50757 50750\nf 50262 50758 50757\nf 50263 50264 50758\nf 50264 50265 50759\nf 50264 50759 50758\nf 50265 50266 50760\nf 50265 50760 50759\nf 50266 50267 50761\nf 50266 50761 50760\nf 50267 50268 50762\nf 50267 50762 50761\nf 50268 50269 50763\nf 50268 50763 50762\nf 50269 50270 50764\nf 50269 50764 50763\nf 50270 50271 50765\nf 50270 50765 50764\nf 50271 50272 50766\nf 50271 50766 50765\nf 50272 50273 50767\nf 50272 50767 50766\nf 50273 50274 50768\nf 50273 50768 50767\nf 50274 50275 50769\nf 50274 50769 50768\nf 50275 50276 50770\nf 50275 50770 50769\nf 50276 50277 50771\nf 50276 50771 50770\nf 50277 50278 50772\nf 50277 50772 50771\nf 50278 50279 50773\nf 50278 50773 50772\nf 50279 50280 50774\nf 50279 50774 50773\nf 50280 50281 50775\nf 50280 50775 50774\nf 50281 50282 50776\nf 50281 50776 50775\nf 50282 50283 50777\nf 50282 50777 50776\nf 50283 50284 50778\nf 50283 50778 50777\nf 50284 50285 50779\nf 50284 50779 50778\nf 50285 50286 50780\nf 50285 50780 50779\nf 50286 50287 50781\nf 50286 50781 50780\nf 50287 50288 50782\nf 50287 50782 50781\nf 50288 50289 50783\nf 50288 50783 50782\nf 50289 50290 50784\nf 50289 50784 50783\nf 50290 50291 50785\nf 50290 50785 50784\nf 50291 50292 50786\nf 50291 50786 50785\nf 50292 50293 50787\nf 50292 50787 50786\nf 50293 50294 50788\nf 50293 50788 50787\nf 50294 50295 50789\nf 50294 50789 50788\nf 50295 50296 50790\nf 50295 50790 50789\nf 50296 50297 50791\nf 50296 50791 50790\nf 50297 50298 50792\nf 50297 50792 50791\nf 50298 50299 50793\nf 50298 50793 50792\nf 50299 50300 50794\nf 50299 50794 50793\nf 50300 50301 50795\nf 50300 50795 50794\nf 50301 50302 50796\nf 50301 50796 50795\nf 50302 50303 50797\nf 50302 50797 50796\nf 50303 50304 50798\nf 50303 50798 50797\nf 50304 50305 50799\nf 50304 50799 50798\nf 50305 50306 50800\nf 50305 50800 50799\nf 50306 50307 50801\nf 50306 50801 50800\nf 50307 50308 50802\nf 50307 50802 50801\nf 50308 50309 50803\nf 50308 50803 50802\nf 50309 50310 50804\nf 50309 50804 50803\nf 50310 50311 50805\nf 50310 50805 50804\nf 50311 50312 50806\nf 50311 50806 50805\nf 50312 50313 50807\nf 50312 50807 50806\nf 50313 50314 50808\nf 50313 50808 50807\nf 50314 50315 50809\nf 50314 50809 50808\nf 50315 50317 50810\nf 50315 50810 50809\nf 50316 50811 50317\nf 50317 50811 50812\nf 50317 50812 50810\nf 50318 50320 50815\nf 50318 50815 50319\nf 50319 50813 50751\nf 50319 50815 50813\nf 50320 50321 50816\nf 50320 50816 50815\nf 50321 50322 50817\nf 50321 50817 50816\nf 50322 50323 50818\nf 50322 50818 50817\nf 50323 50324 50819\nf 50323 50819 50818\nf 50324 50325 50820\nf 50324 50820 50819\nf 50325 50326 50821\nf 50325 50821 50820\nf 50326 50327 50822\nf 50326 50822 50821\nf 50327 50328 50823\nf 50327 50823 50822\nf 50328 50329 50824\nf 50328 50824 50823\nf 50329 50330 50825\nf 50329 50825 50824\nf 50330 50331 50826\nf 50330 50826 50825\nf 50331 50332 50827\nf 50331 50827 50826\nf 50332 50333 50828\nf 50332 50828 50827\nf 50333 50334 50829\nf 50333 50829 50828\nf 50334 50335 50830\nf 50334 50830 50829\nf 50335 50336 50831\nf 50335 50831 50830\nf 50336 50337 50832\nf 50336 50832 50831\nf 50337 50338 50833\nf 50337 50833 50832\nf 50338 50339 50834\nf 50338 50834 50833\nf 50339 50340 50835\nf 50339 50835 50834\nf 50340 50341 50836\nf 50340 50836 50835\nf 50341 50342 50837\nf 50341 50837 50836\nf 50342 50343 50838\nf 50342 50838 50837\nf 50343 50344 50839\nf 50343 50839 50838\nf 50344 50345 50840\nf 50344 50840 50839\nf 50345 50346 50841\nf 50345 50841 50840\nf 50346 50348 50842\nf 50346 50842 50841\nf 50347 50843 50348\nf 50348 50843 50844\nf 50348 50844 50842\nf 50349 50350 50351\nf 50350 50353 50845\nf 50350 50845 50351\nf 50351 50845 50755\nf 50352 50756 50846\nf 50352 50846 50354\nf 50353 50356 50850\nf 50353 50847 50845\nf 50353 50850 50847\nf 50354 50846 50848\nf 50354 50848 50849\nf 50354 50849 50355\nf 50355 50849 50358\nf 50356 50357 50850\nf 50357 50359 50853\nf 50357 50851 50850\nf 50357 50853 50851\nf 50358 50849 50852\nf 50358 50852 50360\nf 50359 50362 50856\nf 50359 50856 50853\nf 50360 50852 50854\nf 50360 50854 50364\nf 50361 50369 50863\nf 50361 50855 50857\nf 50361 50857 50363\nf 50361 50863 50855\nf 50362 50363 50856\nf 50363 50857 50856\nf 50364 50854 50858\nf 50364 50858 50859\nf 50364 50859 50365\nf 50365 50859 50371\nf 50366 50459 50953\nf 50366 50860 50861\nf 50366 50861 50367\nf 50366 50953 50860\nf 50367 50861 50862\nf 50367 50862 50368\nf 50368 50862 50864\nf 50368 50864 50370\nf 50369 50370 50863\nf 50370 50864 50863\nf 50371 50859 50865\nf 50371 50865 50866\nf 50371 50866 50372\nf 50372 50866 50867\nf 50372 50867 50373\nf 50373 50867 50461\nf 50374 50464 50958\nf 50374 50868 50869\nf 50374 50869 50375\nf 50374 50958 50868\nf 50375 50869 50870\nf 50375 50870 50376\nf 50376 50870 50871\nf 50376 50871 50377\nf 50377 50871 50872\nf 50377 50872 50378\nf 50378 50872 50873\nf 50378 50873 50379\nf 50379 50873 50874\nf 50379 50874 50380\nf 50380 50874 50875\nf 50380 50875 50381\nf 50381 50875 50876\nf 50381 50876 50382\nf 50382 50876 50877\nf 50382 50877 50383\nf 50383 50877 50878\nf 50383 50878 50384\nf 50384 50878 50879\nf 50384 50879 50385\nf 50385 50879 50880\nf 50385 50880 50386\nf 50386 50880 50881\nf 50386 50881 50387\nf 50387 50881 50882\nf 50387 50882 50388\nf 50388 50882 50883\nf 50388 50883 50389\nf 50389 50883 50884\nf 50389 50884 50390\nf 50390 50884 50885\nf 50390 50885 50391\nf 50391 50885 50886\nf 50391 50886 50392\nf 50392 50886 50887\nf 50392 50887 50393\nf 50393 50887 50888\nf 50393 50888 50394\nf 50394 50888 50889\nf 50394 50889 50395\nf 50395 50889 50890\nf 50395 50890 50396\nf 50396 50890 50891\nf 50396 50891 50397\nf 50397 50891 50892\nf 50397 50892 50398\nf 50398 50892 50893\nf 50398 50893 50399\nf 50399 50893 50894\nf 50399 50894 50400\nf 50400 50894 50895\nf 50400 50895 50401\nf 50401 50895 50896\nf 50401 50896 50402\nf 50402 50896 50897\nf 50402 50897 50403\nf 50403 50897 50898\nf 50403 50898 50404\nf 50404 50898 50899\nf 50404 50899 50405\nf 50405 50899 50900\nf 50405 50900 50406\nf 50406 50900 50901\nf 50406 50901 50407\nf 50407 50901 50902\nf 50407 50902 50408\nf 50408 50902 50903\nf 50408 50903 50409\nf 50409 50903 50904\nf 50409 50904 50410\nf 50410 50904 50905\nf 50410 50905 50411\nf 50411 50905 50906\nf 50411 50906 50412\nf 50412 50906 50907\nf 50412 50907 50413\nf 50413 50907 50908\nf 50413 50908 50414\nf 50414 50908 50909\nf 50414 50909 50415\nf 50415 50909 50910\nf 50415 50910 50416\nf 50416 50910 50911\nf 50416 50911 50417\nf 50417 50911 50912\nf 50417 50912 50418\nf 50418 50912 50913\nf 50418 50913 50419\nf 50419 50913 50914\nf 50419 50914 50420\nf 50420 50914 50915\nf 50420 50915 50421\nf 50421 50915 50916\nf 50421 50916 50422\nf 50422 50916 50917\nf 50422 50917 50423\nf 50423 50917 50918\nf 50423 50918 50424\nf 50424 50918 50919\nf 50424 50919 50425\nf 50425 50919 50920\nf 50425 50920 50426\nf 50426 50920 50921\nf 50426 50921 50427\nf 50427 50921 50922\nf 50427 50922 50428\nf 50428 50922 50923\nf 50428 50923 50429\nf 50429 50923 50924\nf 50429 50924 50430\nf 50430 50924 50925\nf 50430 50925 50431\nf 50431 50925 50926\nf 50431 50926 50432\nf 50432 50926 50927\nf 50432 50927 50433\nf 50433 50927 50928\nf 50433 50928 50434\nf 50434 50928 50929\nf 50434 50929 50435\nf 50435 50929 50930\nf 50435 50930 50436\nf 50436 50930 50931\nf 50436 50931 50437\nf 50437 50931 50932\nf 50437 50932 50438\nf 50438 50932 50933\nf 50438 50933 50439\nf 50439 50933 50934\nf 50439 50934 50440\nf 50440 50934 50935\nf 50440 50935 50441\nf 50441 50935 50936\nf 50441 50936 50442\nf 50442 50936 50937\nf 50442 50937 50443\nf 50443 50937 50938\nf 50443 50938 50444\nf 50444 50938 50939\nf 50444 50939 50445\nf 50445 50939 50940\nf 50445 50940 50446\nf 50446 50940 50941\nf 50446 50941 50447\nf 50447 50941 50942\nf 50447 50942 50448\nf 50448 50942 50943\nf 50448 50943 50449\nf 50449 50943 50944\nf 50449 50944 50450\nf 50450 50944 50945\nf 50450 50945 50451\nf 50451 50945 50946\nf 50451 50946 50452\nf 50452 50946 50947\nf 50452 50947 50453\nf 50453 50947 50948\nf 50453 50948 50454\nf 50454 50948 50949\nf 50454 50949 50455\nf 50455 50949 50950\nf 50455 50950 50456\nf 50456 50950 50951\nf 50456 50951 50457\nf 50457 50951 50952\nf 50457 50952 50458\nf 50458 50952 50954\nf 50458 50954 50460\nf 50459 50460 50953\nf 50460 50954 50953\nf 50461 50867 50955\nf 50461 50955 50956\nf 50461 50956 50462\nf 50462 50956 50466\nf 50463 50468 50962\nf 50463 50957 50959\nf 50463 50959 50465\nf 50463 50962 50957\nf 50464 50465 50958\nf 50465 50959 50958\nf 50466 50956 50960\nf 50466 50960 50961\nf 50466 50961 50467\nf 50467 50961 50963\nf 50467 50963 50469\nf 50468 50469 50962\nf 50469 50963 50962\nf 50470 50471 50964\nf 50470 50964 50968\nf 50470 50968 50474\nf 50471 50472 50965\nf 50471 50965 50964\nf 50472 50473 50966\nf 50472 50966 50965\nf 50473 50476 50967\nf 50473 50967 50966\nf 50474 50968 50475\nf 50475 50968 50969\nf 50475 50969 50972\nf 50475 50972 50477\nf 50476 50479 50970\nf 50476 50970 50967\nf 50477 50972 50974\nf 50477 50974 50478\nf 50478 50483 50482\nf 50478 50974 50483\nf 50479 50480 50481\nf 50479 50481 50971\nf 50479 50971 50970\nf 50480 50484 50481\nf 50481 50484 50973\nf 50481 50973 50971\nf 50482 50483 50977\nf 50482 50977 50485\nf 50483 50974 50975\nf 50483 50975 50977\nf 50484 50486 50978\nf 50484 50976 50973\nf 50484 50978 50976\nf 50485 50977 50487\nf 50486 50488 50980\nf 50486 50980 50978\nf 50487 50977 50979\nf 50487 50979 50489\nf 50488 50490 50982\nf 50488 50982 50980\nf 50489 50979 50981\nf 50489 50981 50491\nf 50490 50492 50984\nf 50490 50984 50982\nf 50491 50981 50983\nf 50491 50983 50493\nf 50492 50494 50986\nf 50492 50986 50984\nf 50493 50983 50985\nf 50493 50985 50496\nf 50494 50495 50987\nf 50494 50987 50986\nf 50495 50497 50987\nf 50496 50985 50988\nf 50496 50988 50498\nf 50497 50499 50991\nf 50497 50989 50987\nf 50497 50991 50989\nf 50498 50988 50990\nf 50498 50990 50500\nf 50499 50501 50993\nf 50499 50993 50991\nf 50500 50990 50992\nf 50500 50992 50502\nf 50501 50503 50995\nf 50501 50995 50993\nf 50502 50992 50994\nf 50502 50994 50505\nf 50503 50504 50995\nf 50504 50506 50998\nf 50504 50996 50995\nf 50504 50998 50996\nf 50505 50994 50997\nf 50505 50997 50507\nf 50506 50508 51000\nf 50506 51000 50998\nf 50507 50997 50999\nf 50507 50999 50509\nf 50508 50511 51003\nf 50508 51003 51000\nf 50509 50999 51001\nf 50509 51001 51002\nf 50509 51002 50510\nf 50510 51002 50512\nf 50511 50513 51005\nf 50511 51005 51003\nf 50512 51002 51004\nf 50512 51004 50515\nf 50513 50514 51005\nf 50514 50516 51008\nf 50514 51006 51005\nf 50514 51008 51006\nf 50515 51004 51007\nf 50515 51007 50517\nf 50516 50518 51010\nf 50516 51010 51008\nf 50517 51007 51009\nf 50517 51009 50520\nf 50518 50519 51010\nf 50519 50521 51014\nf 50519 51011 51010\nf 50519 51014 51011\nf 50520 51009 51013\nf 50520 51013 50522\nf 50521 50523 51017\nf 50521 51017 51014\nf 50522 51013 51015\nf 50522 51015 50524\nf 50523 50525 51017\nf 50524 51015 51020\nf 50524 51020 50528\nf 50525 50526 50527\nf 50525 50527 51017\nf 50526 50529 51022\nf 50526 51022 50527\nf 50527 51018 51017\nf 50527 51022 51018\nf 50528 51020 51024\nf 50528 51024 50530\nf 50529 50532 51028\nf 50529 51028 51022\nf 50530 50531 50534\nf 50530 51024 51025\nf 50530 51025 50531\nf 50531 50535 50534\nf 50531 51025 51031\nf 50531 51031 51034\nf 50531 51034 50535\nf 50532 50533 51028\nf 50532 50536 50537\nf 50532 50537 50533\nf 50533 50537 51032\nf 50533 51029 51028\nf 50533 51032 51029\nf 50534 50535 50538\nf 50535 50539 50538\nf 50535 50540 50539\nf 50535 51034 51036\nf 50535 51036 50540\nf 50536 50541 50543\nf 50536 50543 50537\nf 50537 50540 51035\nf 50537 50543 50540\nf 50537 51035 51032\nf 50538 50539 50544\nf 50539 50540 50546\nf 50539 50546 50544\nf 50540 50543 50548\nf 50540 50548 50546\nf 50540 51036 51035\nf 50541 50542 50543\nf 50542 50547 50548\nf 50542 50548 50543\nf 50544 50546 50545\nf 50545 50546 50549\nf 50546 50548 50552\nf 50546 50552 50549\nf 50547 50550 50552\nf 50547 50552 50548\nf 50549 50552 50551\nf 50550 50551 50552\nf 50553 50554 50558\nf 50553 50556 50555\nf 50553 50558 50556\nf 50554 50557 50558\nf 50555 50556 50559\nf 50556 50558 50561\nf 50556 50561 50559\nf 50557 50562 51041\nf 50557 51038 50558\nf 50557 51041 51038\nf 50558 51038 51039\nf 50558 51039 50561\nf 50559 50561 50560\nf 50560 50561 51040\nf 50560 50565 50564\nf 50560 51040 50565\nf 50561 51039 51040\nf 50562 50563 50567\nf 50562 50567 51046\nf 50562 51046 51041\nf 50563 50566 50567\nf 50564 50565 51047\nf 50564 51047 50568\nf 50565 51040 51043\nf 50565 51043 51044\nf 50565 51044 51047\nf 50566 50569 50570\nf 50566 50570 50567\nf 50567 50570 51046\nf 50568 51047 50571\nf 50569 50573 51053\nf 50569 51050 50570\nf 50569 51053 51050\nf 50570 51049 51046\nf 50570 51050 51049\nf 50571 51047 51051\nf 50571 51051 50572\nf 50572 51051 51052\nf 50572 51052 51055\nf 50572 51055 50574\nf 50573 50575 51057\nf 50573 51057 51053\nf 50574 51055 50577\nf 50575 50576 50579\nf 50575 50579 51059\nf 50575 51059 51057\nf 50576 50578 50579\nf 50577 51055 51058\nf 50577 51058 50580\nf 50578 50581 51062\nf 50578 51060 50579\nf 50578 51062 51060\nf 50579 51060 51059\nf 50580 51058 51061\nf 50580 51061 50582\nf 50581 50583 51064\nf 50581 51064 51062\nf 50582 51061 51063\nf 50582 51063 50584\nf 50583 50585 51067\nf 50583 51067 51064\nf 50584 51063 51065\nf 50584 51065 50586\nf 50585 50589 51069\nf 50585 51069 51067\nf 50586 50588 50587\nf 50586 51065 50588\nf 50587 50588 51068\nf 50587 51068 50590\nf 50588 51065 51066\nf 50588 51066 51068\nf 50589 50591 51069\nf 50590 51068 51071\nf 50590 51071 50594\nf 50591 50592 50593\nf 50591 50593 51069\nf 50592 50595 51072\nf 50592 51072 50593\nf 50593 51070 51069\nf 50593 51072 51070\nf 50594 51071 51073\nf 50594 51073 50596\nf 50595 50597 51076\nf 50595 51074 51072\nf 50595 51076 51074\nf 50596 51073 51075\nf 50596 51075 50598\nf 50597 50599 51078\nf 50597 51078 51076\nf 50598 51075 51077\nf 50598 51077 50600\nf 50599 50601 51080\nf 50599 51080 51078\nf 50600 51077 51079\nf 50600 51079 50602\nf 50601 50603 51082\nf 50601 51082 51080\nf 50602 51079 51081\nf 50602 51081 50604\nf 50603 50605 51084\nf 50603 51084 51082\nf 50604 51081 51083\nf 50604 51083 50606\nf 50605 50607 51086\nf 50605 51086 51084\nf 50606 51083 51085\nf 50606 51085 50608\nf 50607 50609 51088\nf 50607 51088 51086\nf 50608 51085 51087\nf 50608 51087 50610\nf 50609 50611 51088\nf 50610 51087 51090\nf 50610 51090 50614\nf 50611 50612 50613\nf 50611 50613 51088\nf 50612 50615 51091\nf 50612 51091 50613\nf 50613 51089 51088\nf 50613 51091 51089\nf 50614 51090 51092\nf 50614 51092 50616\nf 50615 50617 51095\nf 50615 51093 51091\nf 50615 51095 51093\nf 50616 51092 51094\nf 50616 51094 50618\nf 50617 50619 51097\nf 50617 51097 51095\nf 50618 51094 51096\nf 50618 51096 50620\nf 50619 50621 51097\nf 50620 51096 51099\nf 50620 51099 50624\nf 50621 50622 50623\nf 50621 50623 51097\nf 50622 50625 51100\nf 50622 51100 50623\nf 50623 51098 51097\nf 50623 51100 51098\nf 50624 51099 51101\nf 50624 51101 50627\nf 50625 50626 51102\nf 50625 51102 51100\nf 50626 50629 51107\nf 50626 51103 51102\nf 50626 51107 51103\nf 50627 51101 51104\nf 50627 51104 50631\nf 50628 50632 50634\nf 50628 50634 51105\nf 50628 51105 51106\nf 50628 51106 51108\nf 50628 51108 50630\nf 50629 50630 51107\nf 50630 51108 51107\nf 50631 50634 50633\nf 50631 51104 51105\nf 50631 51105 50634\nf 50632 50633 50634\nf 50635 50636 51110\nf 50635 51110 51119\nf 50635 51119 50645\nf 50636 50637 51111\nf 50636 51111 51110\nf 50637 50638 51112\nf 50637 51112 51111\nf 50638 50639 51113\nf 50638 51113 51112\nf 50639 50640 51114\nf 50639 51114 51113\nf 50640 50641 51115\nf 50640 51115 51114\nf 50641 50642 51116\nf 50641 51116 51115\nf 50642 50643 51117\nf 50642 51117 51116\nf 50643 50647 50648\nf 50643 50648 51117\nf 50644 50646 51118\nf 50644 51118 51124\nf 50644 51124 50651\nf 50645 51119 50646\nf 50646 51119 51120\nf 50646 51120 51118\nf 50647 50649 51122\nf 50647 51122 50648\nf 50648 51121 51117\nf 50648 51122 51121\nf 50649 50650 51123\nf 50649 51123 51122\nf 50650 50653 50654\nf 50650 50654 51123\nf 50651 51124 50652\nf 50652 51124 51125\nf 50652 51125 51129\nf 50652 51129 50656\nf 50653 50655 51127\nf 50653 51127 50654\nf 50654 51126 51123\nf 50654 51127 51126\nf 50655 50658 51128\nf 50655 51128 51127\nf 50656 51129 50657\nf 50657 51129 51130\nf 50657 51130 51133\nf 50657 51133 50660\nf 50658 50659 51132\nf 50658 51131 51128\nf 50658 51132 51131\nf 50659 50662 51132\nf 50660 51133 51134\nf 50660 51134 50661\nf 50661 51134 50664\nf 50662 50663 51136\nf 50662 51135 51132\nf 50662 51136 51135\nf 50663 50667 51136\nf 50664 51134 51137\nf 50664 51137 51138\nf 50664 51138 50665\nf 50665 51138 51139\nf 50665 51139 50666\nf 50666 51139 50668\nf 50667 50672 51145\nf 50667 51140 51136\nf 50667 51145 51140\nf 50668 51139 51141\nf 50668 51141 51142\nf 50668 51142 50669\nf 50669 51142 51143\nf 50669 51143 50670\nf 50670 51143 51144\nf 50670 51144 50671\nf 50671 51144 50674\nf 50672 50673 51145\nf 50673 50679 51153\nf 50673 51146 51145\nf 50673 51153 51146\nf 50674 51144 51147\nf 50674 51147 51148\nf 50674 51148 50675\nf 50675 51148 51149\nf 50675 51149 50676\nf 50676 51149 51150\nf 50676 51150 50677\nf 50677 51150 51151\nf 50677 51151 50678\nf 50678 51151 50681\nf 50679 50680 51153\nf 50680 50687 50689\nf 50680 50689 51152\nf 50680 51152 51154\nf 50680 51154 51153\nf 50681 51151 51155\nf 50681 51155 51156\nf 50681 51156 50682\nf 50682 51156 51157\nf 50682 51157 50683\nf 50683 51157 51158\nf 50683 51158 50684\nf 50684 51158 51159\nf 50684 51159 50685\nf 50685 51159 51161\nf 50685 51161 50686\nf 50686 51161 50688\nf 50687 50688 50689\nf 50688 51160 50689\nf 50688 51161 51160\nf 50689 51160 51152\nf 50690 50691 51162\nf 50690 51162 51170\nf 50690 51170 50698\nf 50691 50692 51163\nf 50691 51163 51162\nf 50692 50693 51164\nf 50692 51164 51163\nf 50693 50694 51165\nf 50693 51165 51164\nf 50694 50699 51166\nf 50694 51166 51165\nf 50695 50696 51167\nf 50695 51167 51172\nf 50695 51172 50700\nf 50696 50697 51168\nf 50696 51168 51167\nf 50697 50701 51169\nf 50697 51169 51168\nf 50698 51170 50702\nf 50699 50703 51175\nf 50699 51171 51166\nf 50699 51175 51171\nf 50700 51172 50705\nf 50701 50707 51179\nf 50701 51173 51169\nf 50701 51179 51173\nf 50702 51170 51174\nf 50702 51174 50709\nf 50703 50704 51176\nf 50703 51176 51175\nf 50704 50710 51176\nf 50705 51172 51177\nf 50705 51177 50706\nf 50706 51177 51178\nf 50706 51178 51183\nf 50706 51183 50711\nf 50707 50708 51180\nf 50707 51180 51179\nf 50708 50712 51180\nf 50709 51174 51181\nf 50709 51181 50713\nf 50710 50714 51186\nf 50710 51182 51176\nf 50710 51186 51182\nf 50711 51183 50715\nf 50712 50716 51188\nf 50712 51184 51180\nf 50712 51188 51184\nf 50713 51181 51185\nf 50713 51185 50717\nf 50714 50719 51191\nf 50714 51191 51186\nf 50715 51183 51187\nf 50715 51187 50720\nf 50716 50721 51193\nf 50716 51193 51188\nf 50717 51185 51189\nf 50717 51189 50718\nf 50718 51189 51190\nf 50718 51190 51194\nf 50718 51194 50722\nf 50719 50723 51195\nf 50719 51195 51191\nf 50720 51187 51192\nf 50720 51192 50725\nf 50721 50726 51197\nf 50721 51197 51193\nf 50722 51194 50727\nf 50723 50724 50729\nf 50723 50729 51199\nf 50723 51199 51195\nf 50724 50728 50729\nf 50725 51192 51196\nf 50725 51196 50730\nf 50726 50731 51201\nf 50726 51201 51197\nf 50727 51194 51198\nf 50727 51198 50732\nf 50728 50733 50734\nf 50728 50734 50729\nf 50729 50734 51199\nf 50730 51196 51200\nf 50730 51200 50735\nf 50731 50736 51205\nf 50731 51205 51201\nf 50732 51198 51202\nf 50732 51202 50737\nf 50733 50738 50740\nf 50733 50740 50734\nf 50734 50740 51203\nf 50734 51203 51199\nf 50735 51200 51204\nf 50735 51204 50741\nf 50736 50742 51209\nf 50736 51209 51205\nf 50737 51202 51206\nf 50737 51206 50744\nf 50738 50739 50740\nf 50739 50745 51207\nf 50739 51207 50740\nf 50740 51207 51203\nf 50741 51204 51208\nf 50741 51208 50746\nf 50742 50743 51210\nf 50742 51210 51209\nf 50743 50747 51210\nf 50744 51206 51211\nf 50744 51211 50753\nf 50745 50755 51221\nf 50745 51212 51207\nf 50745 51221 51212\nf 50746 51208 51213\nf 50746 51213 50756\nf 50747 50748 51215\nf 50747 51214 51210\nf 50747 51215 51214\nf 50748 50749 51215\nf 50749 50750 51216\nf 50749 51216 51215\nf 50750 50757 51217\nf 50750 51217 51216\nf 50751 50813 50814\nf 50751 50814 50811\nf 50752 50754 51218\nf 50752 51218 51307\nf 50752 51307 50843\nf 50753 51211 51219\nf 50753 51219 50754\nf 50754 51219 51220\nf 50754 51220 51218\nf 50755 50845 51309\nf 50755 51309 51221\nf 50756 51213 51222\nf 50756 51222 50846\nf 50757 50758 51224\nf 50757 51223 51217\nf 50757 51224 51223\nf 50758 50759 51224\nf 50759 50760 51225\nf 50759 51225 51224\nf 50760 50761 51226\nf 50760 51226 51225\nf 50761 50762 51227\nf 50761 51227 51226\nf 50762 50763 51228\nf 50762 51228 51227\nf 50763 50764 51229\nf 50763 51229 51228\nf 50764 50765 51230\nf 50764 51230 51229\nf 50765 50766 51231\nf 50765 51231 51230\nf 50766 50767 51232\nf 50766 51232 51231\nf 50767 50768 51233\nf 50767 51233 51232\nf 50768 50769 51234\nf 50768 51234 51233\nf 50769 50770 51235\nf 50769 51235 51234\nf 50770 50771 51236\nf 50770 51236 51235\nf 50771 50772 51237\nf 50771 51237 51236\nf 50772 50773 51238\nf 50772 51238 51237\nf 50773 50774 51239\nf 50773 51239 51238\nf 50774 50775 51240\nf 50774 51240 51239\nf 50775 50776 51241\nf 50775 51241 51240\nf 50776 50777 51242\nf 50776 51242 51241\nf 50777 50778 51243\nf 50777 51243 51242\nf 50778 50779 51244\nf 50778 51244 51243\nf 50779 50780 51245\nf 50779 51245 51244\nf 50780 50781 51246\nf 50780 51246 51245\nf 50781 50782 51247\nf 50781 51247 51246\nf 50782 50783 51248\nf 50782 51248 51247\nf 50783 50784 51249\nf 50783 51249 51248\nf 50784 50785 51250\nf 50784 51250 51249\nf 50785 50786 51251\nf 50785 51251 51250\nf 50786 50787 51252\nf 50786 51252 51251\nf 50787 50788 51253\nf 50787 51253 51252\nf 50788 50789 51254\nf 50788 51254 51253\nf 50789 50790 51255\nf 50789 51255 51254\nf 50790 50791 51256\nf 50790 51256 51255\nf 50791 50792 51257\nf 50791 51257 51256\nf 50792 50793 51258\nf 50792 51258 51257\nf 50793 50794 51259\nf 50793 51259 51258\nf 50794 50795 51260\nf 50794 51260 51259\nf 50795 50796 51261\nf 50795 51261 51260\nf 50796 50797 51262\nf 50796 51262 51261\nf 50797 50798 51263\nf 50797 51263 51262\nf 50798 50799 51264\nf 50798 51264 51263\nf 50799 50800 51265\nf 50799 51265 51264\nf 50800 50801 51266\nf 50800 51266 51265\nf 50801 50802 51267\nf 50801 51267 51266\nf 50802 50803 51268\nf 50802 51268 51267\nf 50803 50804 51269\nf 50803 51269 51268\nf 50804 50805 51270\nf 50804 51270 51269\nf 50805 50806 51271\nf 50805 51271 51270\nf 50806 50807 51272\nf 50806 51272 51271\nf 50807 50808 51273\nf 50807 51273 51272\nf 50808 50809 51274\nf 50808 51274 51273\nf 50809 50810 51275\nf 50809 51275 51274\nf 50810 50812 51276\nf 50810 51276 51275\nf 50811 50814 50812\nf 50812 50814 51278\nf 50812 51277 51276\nf 50812 51278 51277\nf 50813 50815 51278\nf 50813 51278 50814\nf 50815 50816 51279\nf 50815 51279 51278\nf 50816 50817 51280\nf 50816 51280 51279\nf 50817 50818 51281\nf 50817 51281 51280\nf 50818 50819 51282\nf 50818 51282 51281\nf 50819 50820 51283\nf 50819 51283 51282\nf 50820 50821 51284\nf 50820 51284 51283\nf 50821 50822 51285\nf 50821 51285 51284\nf 50822 50823 51286\nf 50822 51286 51285\nf 50823 50824 51287\nf 50823 51287 51286\nf 50824 50825 51288\nf 50824 51288 51287\nf 50825 50826 51289\nf 50825 51289 51288\nf 50826 50827 51290\nf 50826 51290 51289\nf 50827 50828 51291\nf 50827 51291 51290\nf 50828 50829 51292\nf 50828 51292 51291\nf 50829 50830 51293\nf 50829 51293 51292\nf 50830 50831 51294\nf 50830 51294 51293\nf 50831 50832 51295\nf 50831 51295 51294\nf 50832 50833 51296\nf 50832 51296 51295\nf 50833 50834 51297\nf 50833 51297 51296\nf 50834 50835 51298\nf 50834 51298 51297\nf 50835 50836 51299\nf 50835 51299 51298\nf 50836 50837 51300\nf 50836 51300 51299\nf 50837 50838 51301\nf 50837 51301 51300\nf 50838 50839 51302\nf 50838 51302 51301\nf 50839 50840 51303\nf 50839 51303 51302\nf 50840 50841 51304\nf 50840 51304 51303\nf 50841 50842 51305\nf 50841 51305 51304\nf 50842 50844 51306\nf 50842 51306 51305\nf 50843 51307 50844\nf 50844 51307 51308\nf 50844 51308 51306\nf 50845 50847 51311\nf 50845 51311 51309\nf 50846 51222 51310\nf 50846 51310 50848\nf 50847 50850 51314\nf 50847 51314 51311\nf 50848 51310 51312\nf 50848 51312 51313\nf 50848 51313 50849\nf 50849 51313 50852\nf 50850 50851 51314\nf 50851 50853 51317\nf 50851 51315 51314\nf 50851 51317 51315\nf 50852 51313 51316\nf 50852 51316 50854\nf 50853 50856 51320\nf 50853 51320 51317\nf 50854 51316 51318\nf 50854 51318 50858\nf 50855 50863 51327\nf 50855 51319 51321\nf 50855 51321 50857\nf 50855 51327 51319\nf 50856 50857 51320\nf 50857 51321 51320\nf 50858 51318 51322\nf 50858 51322 51323\nf 50858 51323 50859\nf 50859 51323 50865\nf 50860 50953 51417\nf 50860 51324 51325\nf 50860 51325 50861\nf 50860 51417 51324\nf 50861 51325 51326\nf 50861 51326 50862\nf 50862 51326 51328\nf 50862 51328 50864\nf 50863 50864 51327\nf 50864 51328 51327\nf 50865 51323 51329\nf 50865 51329 51330\nf 50865 51330 50866\nf 50866 51330 51331\nf 50866 51331 50867\nf 50867 51331 50955\nf 50868 50958 51422\nf 50868 51332 51333\nf 50868 51333 50869\nf 50868 51422 51332\nf 50869 51333 51334\nf 50869 51334 50870\nf 50870 51334 51335\nf 50870 51335 50871\nf 50871 51335 51336\nf 50871 51336 50872\nf 50872 51336 51337\nf 50872 51337 50873\nf 50873 51337 51338\nf 50873 51338 50874\nf 50874 51338 51339\nf 50874 51339 50875\nf 50875 51339 51340\nf 50875 51340 50876\nf 50876 51340 51341\nf 50876 51341 50877\nf 50877 51341 51342\nf 50877 51342 50878\nf 50878 51342 51343\nf 50878 51343 50879\nf 50879 51343 51344\nf 50879 51344 50880\nf 50880 51344 51345\nf 50880 51345 50881\nf 50881 51345 51346\nf 50881 51346 50882\nf 50882 51346 51347\nf 50882 51347 50883\nf 50883 51347 51348\nf 50883 51348 50884\nf 50884 51348 51349\nf 50884 51349 50885\nf 50885 51349 51350\nf 50885 51350 50886\nf 50886 51350 51351\nf 50886 51351 50887\nf 50887 51351 51352\nf 50887 51352 50888\nf 50888 51352 51353\nf 50888 51353 50889\nf 50889 51353 51354\nf 50889 51354 50890\nf 50890 51354 51355\nf 50890 51355 50891\nf 50891 51355 51356\nf 50891 51356 50892\nf 50892 51356 51357\nf 50892 51357 50893\nf 50893 51357 51358\nf 50893 51358 50894\nf 50894 51358 51359\nf 50894 51359 50895\nf 50895 51359 51360\nf 50895 51360 50896\nf 50896 51360 51361\nf 50896 51361 50897\nf 50897 51361 51362\nf 50897 51362 50898\nf 50898 51362 51363\nf 50898 51363 50899\nf 50899 51363 51364\nf 50899 51364 50900\nf 50900 51364 51365\nf 50900 51365 50901\nf 50901 51365 51366\nf 50901 51366 50902\nf 50902 51366 51367\nf 50902 51367 50903\nf 50903 51367 51368\nf 50903 51368 50904\nf 50904 51368 51369\nf 50904 51369 50905\nf 50905 51369 51370\nf 50905 51370 50906\nf 50906 51370 51371\nf 50906 51371 50907\nf 50907 51371 51372\nf 50907 51372 50908\nf 50908 51372 51373\nf 50908 51373 50909\nf 50909 51373 51374\nf 50909 51374 50910\nf 50910 51374 51375\nf 50910 51375 50911\nf 50911 51375 51376\nf 50911 51376 50912\nf 50912 51376 51377\nf 50912 51377 50913\nf 50913 51377 51378\nf 50913 51378 50914\nf 50914 51378 51379\nf 50914 51379 50915\nf 50915 51379 51380\nf 50915 51380 50916\nf 50916 51380 51381\nf 50916 51381 50917\nf 50917 51381 51382\nf 50917 51382 50918\nf 50918 51382 51383\nf 50918 51383 50919\nf 50919 51383 51384\nf 50919 51384 50920\nf 50920 51384 51385\nf 50920 51385 50921\nf 50921 51385 51386\nf 50921 51386 50922\nf 50922 51386 51387\nf 50922 51387 50923\nf 50923 51387 51388\nf 50923 51388 50924\nf 50924 51388 51389\nf 50924 51389 50925\nf 50925 51389 51390\nf 50925 51390 50926\nf 50926 51390 51391\nf 50926 51391 50927\nf 50927 51391 51392\nf 50927 51392 50928\nf 50928 51392 51393\nf 50928 51393 50929\nf 50929 51393 51394\nf 50929 51394 50930\nf 50930 51394 51395\nf 50930 51395 50931\nf 50931 51395 51396\nf 50931 51396 50932\nf 50932 51396 51397\nf 50932 51397 50933\nf 50933 51397 51398\nf 50933 51398 50934\nf 50934 51398 51399\nf 50934 51399 50935\nf 50935 51399 51400\nf 50935 51400 50936\nf 50936 51400 51401\nf 50936 51401 50937\nf 50937 51401 51402\nf 50937 51402 50938\nf 50938 51402 51403\nf 50938 51403 50939\nf 50939 51403 51404\nf 50939 51404 50940\nf 50940 51404 51405\nf 50940 51405 50941\nf 50941 51405 51406\nf 50941 51406 50942\nf 50942 51406 51407\nf 50942 51407 50943\nf 50943 51407 51408\nf 50943 51408 50944\nf 50944 51408 51409\nf 50944 51409 50945\nf 50945 51409 51410\nf 50945 51410 50946\nf 50946 51410 51411\nf 50946 51411 50947\nf 50947 51411 51412\nf 50947 51412 50948\nf 50948 51412 51413\nf 50948 51413 50949\nf 50949 51413 51414\nf 50949 51414 50950\nf 50950 51414 51415\nf 50950 51415 50951\nf 50951 51415 51416\nf 50951 51416 50952\nf 50952 51416 51418\nf 50952 51418 50954\nf 50953 50954 51417\nf 50954 51418 51417\nf 50955 51331 51419\nf 50955 51419 51420\nf 50955 51420 50956\nf 50956 51420 50960\nf 50957 50962 51426\nf 50957 51421 51423\nf 50957 51423 50959\nf 50957 51426 51421\nf 50958 50959 51422\nf 50959 51423 51422\nf 50960 51420 51424\nf 50960 51424 51425\nf 50960 51425 50961\nf 50961 51425 51427\nf 50961 51427 50963\nf 50962 50963 51426\nf 50963 51427 51426\nf 50964 50965 51428\nf 50964 51428 51432\nf 50964 51432 50968\nf 50965 50966 51429\nf 50965 51429 51428\nf 50966 50967 51430\nf 50966 51430 51429\nf 50967 50970 51431\nf 50967 51431 51430\nf 50968 51432 50969\nf 50969 51432 51433\nf 50969 51433 51436\nf 50969 51436 50972\nf 50970 50971 51435\nf 50970 51434 51431\nf 50970 51435 51434\nf 50971 50973 51435\nf 50972 51436 50974\nf 50973 50976 51440\nf 50973 51437 51435\nf 50973 51440 51437\nf 50974 51436 51438\nf 50974 51438 50975\nf 50975 51438 51439\nf 50975 51439 51441\nf 50975 51441 50977\nf 50976 50978 51442\nf 50976 51442 51440\nf 50977 51441 50979\nf 50978 50980 51444\nf 50978 51444 51442\nf 50979 51441 51443\nf 50979 51443 50981\nf 50980 50982 51446\nf 50980 51446 51444\nf 50981 51443 51445\nf 50981 51445 50983\nf 50982 50984 51448\nf 50982 51448 51446\nf 50983 51445 51447\nf 50983 51447 50985\nf 50984 50986 51450\nf 50984 51450 51448\nf 50985 51447 51449\nf 50985 51449 50988\nf 50986 50987 51451\nf 50986 51451 51450\nf 50987 50989 51451\nf 50988 51449 51453\nf 50988 51453 50990\nf 50989 50991 51456\nf 50989 51454 51451\nf 50989 51456 51454\nf 50990 51453 51455\nf 50990 51455 50992\nf 50991 50993 51458\nf 50991 51458 51456\nf 50992 51455 51457\nf 50992 51457 50994\nf 50993 50995 51460\nf 50993 51460 51458\nf 50994 51457 51459\nf 50994 51459 50997\nf 50995 50996 51460\nf 50996 50998 51463\nf 50996 51461 51460\nf 50996 51463 51461\nf 50997 51459 51462\nf 50997 51462 50999\nf 50998 51000 51465\nf 50998 51465 51463\nf 50999 51462 51464\nf 50999 51464 51001\nf 51000 51003 51469\nf 51000 51469 51465\nf 51001 51464 51466\nf 51001 51466 51467\nf 51001 51467 51002\nf 51002 51467 51004\nf 51003 51005 51471\nf 51003 51471 51469\nf 51004 51467 51470\nf 51004 51470 51007\nf 51005 51006 51471\nf 51006 51008 51475\nf 51006 51472 51471\nf 51006 51475 51472\nf 51007 51470 51474\nf 51007 51474 51009\nf 51008 51010 51475\nf 51009 51474 51477\nf 51009 51477 51013\nf 51010 51011 51012\nf 51010 51012 51475\nf 51011 51014 51478\nf 51011 51478 51012\nf 51012 51476 51475\nf 51012 51478 51476\nf 51013 51477 51479\nf 51013 51479 51015\nf 51014 51017 51482\nf 51014 51482 51478\nf 51015 51016 51020\nf 51015 51479 51480\nf 51015 51480 51016\nf 51016 51021 51020\nf 51016 51480 51485\nf 51016 51485 51488\nf 51016 51488 51021\nf 51017 51018 51019\nf 51017 51019 51482\nf 51018 51022 51023\nf 51018 51023 51487\nf 51018 51487 51019\nf 51019 51483 51482\nf 51019 51486 51483\nf 51019 51487 51486\nf 51020 51021 51024\nf 51021 51026 51024\nf 51021 51027 51026\nf 51021 51488 51490\nf 51021 51490 51027\nf 51022 51028 51030\nf 51022 51030 51023\nf 51023 51027 51489\nf 51023 51030 51027\nf 51023 51489 51487\nf 51024 51026 51025\nf 51025 51026 51031\nf 51026 51027 51033\nf 51026 51033 51031\nf 51027 51030 51033\nf 51027 51490 51489\nf 51028 51029 51030\nf 51029 51032 51033\nf 51029 51033 51030\nf 51031 51033 51034\nf 51032 51035 51037\nf 51032 51037 51033\nf 51033 51037 51034\nf 51034 51037 51036\nf 51035 51036 51037\nf 51038 51041 51042\nf 51038 51042 51039\nf 51039 51042 51040\nf 51040 51042 51492\nf 51040 51045 51043\nf 51040 51492 51045\nf 51041 51046 51495\nf 51041 51492 51042\nf 51041 51495 51492\nf 51043 51045 51044\nf 51044 51045 51494\nf 51044 51048 51047\nf 51044 51494 51048\nf 51045 51492 51493\nf 51045 51493 51494\nf 51046 51049 51500\nf 51046 51500 51495\nf 51047 51048 51501\nf 51047 51501 51051\nf 51048 51494 51497\nf 51048 51497 51498\nf 51048 51498 51501\nf 51049 51050 51054\nf 51049 51054 51503\nf 51049 51503 51500\nf 51050 51053 51054\nf 51051 51501 51505\nf 51051 51505 51052\nf 51052 51056 51055\nf 51052 51505 51056\nf 51053 51057 51507\nf 51053 51504 51054\nf 51053 51507 51504\nf 51054 51504 51503\nf 51055 51056 51508\nf 51055 51508 51058\nf 51056 51505 51506\nf 51056 51506 51508\nf 51057 51059 51509\nf 51057 51509 51507\nf 51058 51508 51061\nf 51059 51060 51510\nf 51059 51510 51509\nf 51060 51062 51510\nf 51061 51508 51511\nf 51061 51511 51063\nf 51062 51064 51515\nf 51062 51512 51510\nf 51062 51515 51512\nf 51063 51511 51514\nf 51063 51514 51065\nf 51064 51067 51519\nf 51064 51519 51515\nf 51065 51514 51517\nf 51065 51517 51066\nf 51066 51517 51518\nf 51066 51518 51521\nf 51066 51521 51068\nf 51067 51069 51523\nf 51067 51523 51519\nf 51068 51521 51071\nf 51069 51070 51523\nf 51070 51072 51527\nf 51070 51524 51523\nf 51070 51527 51524\nf 51071 51521 51526\nf 51071 51526 51073\nf 51072 51074 51529\nf 51072 51529 51527\nf 51073 51526 51528\nf 51073 51528 51075\nf 51074 51076 51531\nf 51074 51531 51529\nf 51075 51528 51530\nf 51075 51530 51077\nf 51076 51078 51533\nf 51076 51533 51531\nf 51077 51530 51532\nf 51077 51532 51079\nf 51078 51080 51535\nf 51078 51535 51533\nf 51079 51532 51534\nf 51079 51534 51081\nf 51080 51082 51537\nf 51080 51537 51535\nf 51081 51534 51536\nf 51081 51536 51083\nf 51082 51084 51539\nf 51082 51539 51537\nf 51083 51536 51538\nf 51083 51538 51085\nf 51084 51086 51541\nf 51084 51541 51539\nf 51085 51538 51540\nf 51085 51540 51087\nf 51086 51088 51543\nf 51086 51543 51541\nf 51087 51540 51542\nf 51087 51542 51090\nf 51088 51089 51543\nf 51089 51091 51546\nf 51089 51544 51543\nf 51089 51546 51544\nf 51090 51542 51545\nf 51090 51545 51092\nf 51091 51093 51548\nf 51091 51548 51546\nf 51092 51545 51547\nf 51092 51547 51094\nf 51093 51095 51550\nf 51093 51550 51548\nf 51094 51547 51549\nf 51094 51549 51096\nf 51095 51097 51552\nf 51095 51552 51550\nf 51096 51549 51551\nf 51096 51551 51099\nf 51097 51098 51552\nf 51098 51100 51555\nf 51098 51553 51552\nf 51098 51555 51553\nf 51099 51551 51554\nf 51099 51554 51101\nf 51100 51102 51558\nf 51100 51558 51555\nf 51101 51554 51556\nf 51101 51556 51104\nf 51102 51103 51558\nf 51103 51107 51109\nf 51103 51109 51557\nf 51103 51557 51559\nf 51103 51559 51558\nf 51104 51556 51561\nf 51104 51561 51562\nf 51104 51562 51105\nf 51105 51562 51564\nf 51105 51564 51106\nf 51106 51564 51108\nf 51107 51108 51109\nf 51108 51563 51109\nf 51108 51564 51563\nf 51109 51563 51557\nf 51110 51111 51565\nf 51110 51565 51574\nf 51110 51574 51119\nf 51111 51112 51566\nf 51111 51566 51565\nf 51112 51113 51567\nf 51112 51567 51566\nf 51113 51114 51568\nf 51113 51568 51567\nf 51114 51115 51569\nf 51114 51569 51568\nf 51115 51116 51570\nf 51115 51570 51569\nf 51116 51117 51571\nf 51116 51571 51570\nf 51117 51121 51572\nf 51117 51572 51571\nf 51118 51120 51573\nf 51118 51573 51579\nf 51118 51579 51124\nf 51119 51574 51120\nf 51120 51574 51575\nf 51120 51575 51573\nf 51121 51122 51577\nf 51121 51576 51572\nf 51121 51577 51576\nf 51122 51123 51577\nf 51123 51126 51578\nf 51123 51578 51577\nf 51124 51579 51125\nf 51125 51579 51580\nf 51125 51580 51584\nf 51125 51584 51129\nf 51126 51127 51582\nf 51126 51581 51578\nf 51126 51582 51581\nf 51127 51128 51582\nf 51128 51131 51583\nf 51128 51583 51582\nf 51129 51584 51130\nf 51130 51584 51585\nf 51130 51585 51588\nf 51130 51588 51133\nf 51131 51132 51587\nf 51131 51586 51583\nf 51131 51587 51586\nf 51132 51135 51587\nf 51133 51588 51589\nf 51133 51589 51134\nf 51134 51589 51137\nf 51135 51136 51591\nf 51135 51590 51587\nf 51135 51591 51590\nf 51136 51140 51591\nf 51137 51589 51592\nf 51137 51592 51593\nf 51137 51593 51138\nf 51138 51593 51594\nf 51138 51594 51139\nf 51139 51594 51141\nf 51140 51145 51600\nf 51140 51595 51591\nf 51140 51600 51595\nf 51141 51594 51596\nf 51141 51596 51597\nf 51141 51597 51142\nf 51142 51597 51598\nf 51142 51598 51143\nf 51143 51598 51599\nf 51143 51599 51144\nf 51144 51599 51147\nf 51145 51146 51600\nf 51146 51153 51608\nf 51146 51601 51600\nf 51146 51608 51601\nf 51147 51599 51602\nf 51147 51602 51603\nf 51147 51603 51148\nf 51148 51603 51604\nf 51148 51604 51149\nf 51149 51604 51605\nf 51149 51605 51150\nf 51150 51605 51606\nf 51150 51606 51151\nf 51151 51606 51155\nf 51152 51160 51616\nf 51152 51607 51609\nf 51152 51609 51154\nf 51152 51616 51607\nf 51153 51154 51608\nf 51154 51609 51608\nf 51155 51606 51610\nf 51155 51610 51611\nf 51155 51611 51156\nf 51156 51611 51613\nf 51156 51613 51157\nf 51157 51613 51614\nf 51157 51614 51158\nf 51158 51614 51615\nf 51158 51615 51159\nf 51159 51615 51617\nf 51159 51617 51161\nf 51160 51161 51616\nf 51161 51617 51616\nf 51162 51163 51619\nf 51162 51619 51627\nf 51162 51627 51170\nf 51163 51164 51620\nf 51163 51620 51619\nf 51164 51165 51621\nf 51164 51621 51620\nf 51165 51166 51622\nf 51165 51622 51621\nf 51166 51171 51623\nf 51166 51623 51622\nf 51167 51168 51624\nf 51167 51624 51629\nf 51167 51629 51172\nf 51168 51169 51625\nf 51168 51625 51624\nf 51169 51173 51626\nf 51169 51626 51625\nf 51170 51627 51174\nf 51171 51175 51632\nf 51171 51628 51623\nf 51171 51632 51628\nf 51172 51629 51177\nf 51173 51179 51636\nf 51173 51630 51626\nf 51173 51636 51630\nf 51174 51627 51631\nf 51174 51631 51181\nf 51175 51176 51633\nf 51175 51633 51632\nf 51176 51182 51633\nf 51177 51629 51634\nf 51177 51634 51178\nf 51178 51634 51635\nf 51178 51635 51640\nf 51178 51640 51183\nf 51179 51180 51637\nf 51179 51637 51636\nf 51180 51184 51637\nf 51181 51631 51638\nf 51181 51638 51185\nf 51182 51186 51643\nf 51182 51639 51633\nf 51182 51643 51639\nf 51183 51640 51187\nf 51184 51188 51645\nf 51184 51641 51637\nf 51184 51645 51641\nf 51185 51638 51642\nf 51185 51642 51189\nf 51186 51191 51648\nf 51186 51648 51643\nf 51187 51640 51644\nf 51187 51644 51192\nf 51188 51193 51650\nf 51188 51650 51645\nf 51189 51642 51646\nf 51189 51646 51190\nf 51190 51646 51647\nf 51190 51647 51651\nf 51190 51651 51194\nf 51191 51195 51652\nf 51191 51652 51648\nf 51192 51644 51649\nf 51192 51649 51196\nf 51193 51197 51654\nf 51193 51654 51650\nf 51194 51651 51198\nf 51195 51199 51656\nf 51195 51656 51652\nf 51196 51649 51653\nf 51196 51653 51200\nf 51197 51201 51658\nf 51197 51658 51654\nf 51198 51651 51655\nf 51198 51655 51202\nf 51199 51203 51660\nf 51199 51660 51656\nf 51200 51653 51657\nf 51200 51657 51204\nf 51201 51205 51662\nf 51201 51662 51658\nf 51202 51655 51659\nf 51202 51659 51206\nf 51203 51207 51664\nf 51203 51664 51660\nf 51204 51657 51661\nf 51204 51661 51208\nf 51205 51209 51666\nf 51205 51666 51662\nf 51206 51659 51663\nf 51206 51663 51211\nf 51207 51212 51669\nf 51207 51669 51664\nf 51208 51661 51665\nf 51208 51665 51213\nf 51209 51210 51667\nf 51209 51667 51666\nf 51210 51214 51667\nf 51211 51663 51668\nf 51211 51668 51219\nf 51212 51221 51678\nf 51212 51678 51669\nf 51213 51665 51670\nf 51213 51670 51222\nf 51214 51215 51672\nf 51214 51671 51667\nf 51214 51672 51671\nf 51215 51216 51672\nf 51216 51217 51673\nf 51216 51673 51672\nf 51217 51223 51674\nf 51217 51674 51673\nf 51218 51220 51675\nf 51218 51675 51764\nf 51218 51764 51307\nf 51219 51668 51676\nf 51219 51676 51220\nf 51220 51676 51677\nf 51220 51677 51675\nf 51221 51309 51766\nf 51221 51766 51678\nf 51222 51670 51679\nf 51222 51679 51310\nf 51223 51224 51681\nf 51223 51680 51674\nf 51223 51681 51680\nf 51224 51225 51681\nf 51225 51226 51682\nf 51225 51682 51681\nf 51226 51227 51683\nf 51226 51683 51682\nf 51227 51228 51684\nf 51227 51684 51683\nf 51228 51229 51685\nf 51228 51685 51684\nf 51229 51230 51686\nf 51229 51686 51685\nf 51230 51231 51687\nf 51230 51687 51686\nf 51231 51232 51688\nf 51231 51688 51687\nf 51232 51233 51689\nf 51232 51689 51688\nf 51233 51234 51690\nf 51233 51690 51689\nf 51234 51235 51691\nf 51234 51691 51690\nf 51235 51236 51692\nf 51235 51692 51691\nf 51236 51237 51693\nf 51236 51693 51692\nf 51237 51238 51694\nf 51237 51694 51693\nf 51238 51239 51695\nf 51238 51695 51694\nf 51239 51240 51696\nf 51239 51696 51695\nf 51240 51241 51697\nf 51240 51697 51696\nf 51241 51242 51698\nf 51241 51698 51697\nf 51242 51243 51699\nf 51242 51699 51698\nf 51243 51244 51700\nf 51243 51700 51699\nf 51244 51245 51701\nf 51244 51701 51700\nf 51245 51246 51702\nf 51245 51702 51701\nf 51246 51247 51703\nf 51246 51703 51702\nf 51247 51248 51704\nf 51247 51704 51703\nf 51248 51249 51705\nf 51248 51705 51704\nf 51249 51250 51706\nf 51249 51706 51705\nf 51250 51251 51707\nf 51250 51707 51706\nf 51251 51252 51708\nf 51251 51708 51707\nf 51252 51253 51709\nf 51252 51709 51708\nf 51253 51254 51710\nf 51253 51710 51709\nf 51254 51255 51711\nf 51254 51711 51710\nf 51255 51256 51712\nf 51255 51712 51711\nf 51256 51257 51713\nf 51256 51713 51712\nf 51257 51258 51714\nf 51257 51714 51713\nf 51258 51259 51715\nf 51258 51715 51714\nf 51259 51260 51716\nf 51259 51716 51715\nf 51260 51261 51717\nf 51260 51717 51716\nf 51261 51262 51718\nf 51261 51718 51717\nf 51262 51263 51719\nf 51262 51719 51718\nf 51263 51264 51720\nf 51263 51720 51719\nf 51264 51265 51721\nf 51264 51721 51720\nf 51265 51266 51722\nf 51265 51722 51721\nf 51266 51267 51723\nf 51266 51723 51722\nf 51267 51268 51724\nf 51267 51724 51723\nf 51268 51269 51725\nf 51268 51725 51724\nf 51269 51270 51726\nf 51269 51726 51725\nf 51270 51271 51727\nf 51270 51727 51726\nf 51271 51272 51728\nf 51271 51728 51727\nf 51272 51273 51729\nf 51272 51729 51728\nf 51273 51274 51730\nf 51273 51730 51729\nf 51274 51275 51731\nf 51274 51731 51730\nf 51275 51276 51732\nf 51275 51732 51731\nf 51276 51277 51733\nf 51276 51733 51732\nf 51277 51278 51734\nf 51277 51734 51733\nf 51278 51279 51735\nf 51278 51735 51734\nf 51279 51280 51736\nf 51279 51736 51735\nf 51280 51281 51737\nf 51280 51737 51736\nf 51281 51282 51738\nf 51281 51738 51737\nf 51282 51283 51739\nf 51282 51739 51738\nf 51283 51284 51740\nf 51283 51740 51739\nf 51284 51285 51741\nf 51284 51741 51740\nf 51285 51286 51742\nf 51285 51742 51741\nf 51286 51287 51743\nf 51286 51743 51742\nf 51287 51288 51744\nf 51287 51744 51743\nf 51288 51289 51745\nf 51288 51745 51744\nf 51289 51290 51746\nf 51289 51746 51745\nf 51290 51291 51747\nf 51290 51747 51746\nf 51291 51292 51748\nf 51291 51748 51747\nf 51292 51293 51749\nf 51292 51749 51748\nf 51293 51294 51750\nf 51293 51750 51749\nf 51294 51295 51751\nf 51294 51751 51750\nf 51295 51296 51752\nf 51295 51752 51751\nf 51296 51297 51753\nf 51296 51753 51752\nf 51297 51298 51754\nf 51297 51754 51753\nf 51298 51299 51755\nf 51298 51755 51754\nf 51299 51300 51756\nf 51299 51756 51755\nf 51300 51301 51757\nf 51300 51757 51756\nf 51301 51302 51758\nf 51301 51758 51757\nf 51302 51303 51759\nf 51302 51759 51758\nf 51303 51304 51760\nf 51303 51760 51759\nf 51304 51305 51761\nf 51304 51761 51760\nf 51305 51306 51762\nf 51305 51762 51761\nf 51306 51308 51763\nf 51306 51763 51762\nf 51307 51764 51308\nf 51308 51764 51765\nf 51308 51765 51763\nf 51309 51311 51768\nf 51309 51768 51766\nf 51310 51679 51767\nf 51310 51767 51312\nf 51311 51314 51771\nf 51311 51771 51768\nf 51312 51767 51769\nf 51312 51769 51770\nf 51312 51770 51313\nf 51313 51770 51316\nf 51314 51315 51771\nf 51315 51317 51774\nf 51315 51772 51771\nf 51315 51774 51772\nf 51316 51770 51773\nf 51316 51773 51318\nf 51317 51320 51777\nf 51317 51777 51774\nf 51318 51773 51775\nf 51318 51775 51322\nf 51319 51327 51784\nf 51319 51776 51778\nf 51319 51778 51321\nf 51319 51784 51776\nf 51320 51321 51777\nf 51321 51778 51777\nf 51322 51775 51779\nf 51322 51779 51780\nf 51322 51780 51323\nf 51323 51780 51329\nf 51324 51417 51874\nf 51324 51781 51782\nf 51324 51782 51325\nf 51324 51874 51781\nf 51325 51782 51783\nf 51325 51783 51326\nf 51326 51783 51785\nf 51326 51785 51328\nf 51327 51328 51784\nf 51328 51785 51784\nf 51329 51780 51786\nf 51329 51786 51787\nf 51329 51787 51330\nf 51330 51787 51788\nf 51330 51788 51331\nf 51331 51788 51419\nf 51332 51422 51879\nf 51332 51789 51790\nf 51332 51790 51333\nf 51332 51879 51789\nf 51333 51790 51791\nf 51333 51791 51334\nf 51334 51791 51792\nf 51334 51792 51335\nf 51335 51792 51793\nf 51335 51793 51336\nf 51336 51793 51794\nf 51336 51794 51337\nf 51337 51794 51795\nf 51337 51795 51338\nf 51338 51795 51796\nf 51338 51796 51339\nf 51339 51796 51797\nf 51339 51797 51340\nf 51340 51797 51798\nf 51340 51798 51341\nf 51341 51798 51799\nf 51341 51799 51342\nf 51342 51799 51800\nf 51342 51800 51343\nf 51343 51800 51801\nf 51343 51801 51344\nf 51344 51801 51802\nf 51344 51802 51345\nf 51345 51802 51803\nf 51345 51803 51346\nf 51346 51803 51804\nf 51346 51804 51347\nf 51347 51804 51805\nf 51347 51805 51348\nf 51348 51805 51806\nf 51348 51806 51349\nf 51349 51806 51807\nf 51349 51807 51350\nf 51350 51807 51808\nf 51350 51808 51351\nf 51351 51808 51809\nf 51351 51809 51352\nf 51352 51809 51810\nf 51352 51810 51353\nf 51353 51810 51811\nf 51353 51811 51354\nf 51354 51811 51812\nf 51354 51812 51355\nf 51355 51812 51813\nf 51355 51813 51356\nf 51356 51813 51814\nf 51356 51814 51357\nf 51357 51814 51815\nf 51357 51815 51358\nf 51358 51815 51816\nf 51358 51816 51359\nf 51359 51816 51817\nf 51359 51817 51360\nf 51360 51817 51818\nf 51360 51818 51361\nf 51361 51818 51819\nf 51361 51819 51362\nf 51362 51819 51820\nf 51362 51820 51363\nf 51363 51820 51821\nf 51363 51821 51364\nf 51364 51821 51822\nf 51364 51822 51365\nf 51365 51822 51823\nf 51365 51823 51366\nf 51366 51823 51824\nf 51366 51824 51367\nf 51367 51824 51825\nf 51367 51825 51368\nf 51368 51825 51826\nf 51368 51826 51369\nf 51369 51826 51827\nf 51369 51827 51370\nf 51370 51827 51828\nf 51370 51828 51371\nf 51371 51828 51829\nf 51371 51829 51372\nf 51372 51829 51830\nf 51372 51830 51373\nf 51373 51830 51831\nf 51373 51831 51374\nf 51374 51831 51832\nf 51374 51832 51375\nf 51375 51832 51833\nf 51375 51833 51376\nf 51376 51833 51834\nf 51376 51834 51377\nf 51377 51834 51835\nf 51377 51835 51378\nf 51378 51835 51836\nf 51378 51836 51379\nf 51379 51836 51837\nf 51379 51837 51380\nf 51380 51837 51838\nf 51380 51838 51381\nf 51381 51838 51839\nf 51381 51839 51382\nf 51382 51839 51840\nf 51382 51840 51383\nf 51383 51840 51841\nf 51383 51841 51384\nf 51384 51841 51842\nf 51384 51842 51385\nf 51385 51842 51843\nf 51385 51843 51386\nf 51386 51843 51844\nf 51386 51844 51387\nf 51387 51844 51845\nf 51387 51845 51388\nf 51388 51845 51846\nf 51388 51846 51389\nf 51389 51846 51847\nf 51389 51847 51390\nf 51390 51847 51848\nf 51390 51848 51391\nf 51391 51848 51849\nf 51391 51849 51392\nf 51392 51849 51850\nf 51392 51850 51393\nf 51393 51850 51851\nf 51393 51851 51394\nf 51394 51851 51852\nf 51394 51852 51395\nf 51395 51852 51853\nf 51395 51853 51396\nf 51396 51853 51854\nf 51396 51854 51397\nf 51397 51854 51855\nf 51397 51855 51398\nf 51398 51855 51856\nf 51398 51856 51399\nf 51399 51856 51857\nf 51399 51857 51400\nf 51400 51857 51858\nf 51400 51858 51401\nf 51401 51858 51859\nf 51401 51859 51402\nf 51402 51859 51860\nf 51402 51860 51403\nf 51403 51860 51861\nf 51403 51861 51404\nf 51404 51861 51862\nf 51404 51862 51405\nf 51405 51862 51863\nf 51405 51863 51406\nf 51406 51863 51864\nf 51406 51864 51407\nf 51407 51864 51865\nf 51407 51865 51408\nf 51408 51865 51866\nf 51408 51866 51409\nf 51409 51866 51867\nf 51409 51867 51410\nf 51410 51867 51868\nf 51410 51868 51411\nf 51411 51868 51869\nf 51411 51869 51412\nf 51412 51869 51870\nf 51412 51870 51413\nf 51413 51870 51871\nf 51413 51871 51414\nf 51414 51871 51872\nf 51414 51872 51415\nf 51415 51872 51873\nf 51415 51873 51416\nf 51416 51873 51875\nf 51416 51875 51418\nf 51417 51418 51874\nf 51418 51875 51874\nf 51419 51788 51876\nf 51419 51876 51877\nf 51419 51877 51420\nf 51420 51877 51424\nf 51421 51426 51883\nf 51421 51878 51880\nf 51421 51880 51423\nf 51421 51883 51878\nf 51422 51423 51879\nf 51423 51880 51879\nf 51424 51877 51881\nf 51424 51881 51882\nf 51424 51882 51425\nf 51425 51882 51884\nf 51425 51884 51427\nf 51426 51427 51883\nf 51427 51884 51883\nf 51428 51429 51885\nf 51428 51885 51889\nf 51428 51889 51432\nf 51429 51430 51886\nf 51429 51886 51885\nf 51430 51431 51887\nf 51430 51887 51886\nf 51431 51434 51888\nf 51431 51888 51887\nf 51432 51889 51433\nf 51433 51889 51890\nf 51433 51890 51893\nf 51433 51893 51436\nf 51434 51435 51892\nf 51434 51891 51888\nf 51434 51892 51891\nf 51435 51437 51892\nf 51436 51893 51438\nf 51437 51440 51897\nf 51437 51894 51892\nf 51437 51897 51894\nf 51438 51893 51895\nf 51438 51895 51439\nf 51439 51895 51896\nf 51439 51896 51898\nf 51439 51898 51441\nf 51440 51442 51899\nf 51440 51899 51897\nf 51441 51898 51443\nf 51442 51444 51901\nf 51442 51901 51899\nf 51443 51898 51900\nf 51443 51900 51445\nf 51444 51446 51903\nf 51444 51903 51901\nf 51445 51900 51902\nf 51445 51902 51447\nf 51446 51448 51905\nf 51446 51905 51903\nf 51447 51902 51904\nf 51447 51904 51449\nf 51448 51450 51905\nf 51449 51904 51907\nf 51449 51907 51453\nf 51450 51451 51452\nf 51450 51452 51906\nf 51450 51906 51905\nf 51451 51454 51452\nf 51452 51454 51908\nf 51452 51908 51906\nf 51453 51907 51909\nf 51453 51909 51455\nf 51454 51456 51912\nf 51454 51910 51908\nf 51454 51912 51910\nf 51455 51909 51911\nf 51455 51911 51457\nf 51456 51458 51914\nf 51456 51914 51912\nf 51457 51911 51913\nf 51457 51913 51459\nf 51458 51460 51916\nf 51458 51916 51914\nf 51459 51913 51915\nf 51459 51915 51462\nf 51460 51461 51916\nf 51461 51463 51919\nf 51461 51917 51916\nf 51461 51919 51917\nf 51462 51915 51918\nf 51462 51918 51464\nf 51463 51465 51922\nf 51463 51922 51919\nf 51464 51918 51920\nf 51464 51920 51466\nf 51465 51469 51924\nf 51465 51924 51922\nf 51466 51468 51467\nf 51466 51920 51921\nf 51466 51921 51468\nf 51467 51468 51470\nf 51468 51921 51923\nf 51468 51923 51470\nf 51469 51471 51924\nf 51470 51923 51926\nf 51470 51926 51474\nf 51471 51472 51473\nf 51471 51473 51924\nf 51472 51475 51927\nf 51472 51927 51473\nf 51473 51925 51924\nf 51473 51927 51925\nf 51474 51926 51928\nf 51474 51928 51477\nf 51475 51476 51929\nf 51475 51929 51927\nf 51476 51478 51934\nf 51476 51930 51929\nf 51476 51934 51930\nf 51477 51928 51931\nf 51477 51931 51479\nf 51478 51482 51934\nf 51479 51481 51480\nf 51479 51931 51932\nf 51479 51932 51481\nf 51480 51481 51485\nf 51481 51932 51936\nf 51481 51936 51485\nf 51482 51483 51484\nf 51482 51484 51934\nf 51483 51486 51937\nf 51483 51937 51484\nf 51484 51935 51934\nf 51484 51937 51935\nf 51485 51936 51938\nf 51485 51938 51488\nf 51486 51487 51941\nf 51486 51941 51937\nf 51487 51489 51491\nf 51487 51491 51939\nf 51487 51939 51942\nf 51487 51942 51941\nf 51488 51491 51490\nf 51488 51938 51939\nf 51488 51939 51491\nf 51489 51490 51491\nf 51492 51495 51496\nf 51492 51496 51493\nf 51493 51496 51494\nf 51494 51496 51944\nf 51494 51499 51497\nf 51494 51944 51499\nf 51495 51500 51947\nf 51495 51944 51496\nf 51495 51947 51944\nf 51497 51499 51498\nf 51498 51499 51946\nf 51498 51502 51501\nf 51498 51946 51502\nf 51499 51944 51945\nf 51499 51945 51946\nf 51500 51503 51952\nf 51500 51952 51947\nf 51501 51502 51954\nf 51501 51954 51505\nf 51502 51946 51949\nf 51502 51949 51950\nf 51502 51950 51954\nf 51503 51504 51953\nf 51503 51953 51952\nf 51504 51507 51953\nf 51505 51954 51506\nf 51506 51954 51955\nf 51506 51955 51958\nf 51506 51958 51508\nf 51507 51509 51959\nf 51507 51956 51953\nf 51507 51959 51956\nf 51508 51958 51511\nf 51509 51510 51513\nf 51509 51513 51961\nf 51509 51961 51959\nf 51510 51512 51513\nf 51511 51958 51960\nf 51511 51960 51514\nf 51512 51515 51516\nf 51512 51516 51513\nf 51513 51516 51961\nf 51514 51960 51962\nf 51514 51962 51517\nf 51515 51519 51520\nf 51515 51520 51516\nf 51516 51520 51963\nf 51516 51963 51961\nf 51517 51962 51964\nf 51517 51964 51966\nf 51517 51966 51518\nf 51518 51522 51521\nf 51518 51966 51522\nf 51519 51523 51525\nf 51519 51525 51520\nf 51520 51525 51965\nf 51520 51965 51963\nf 51521 51522 51969\nf 51521 51969 51526\nf 51522 51966 51967\nf 51522 51967 51969\nf 51523 51524 51525\nf 51524 51527 51968\nf 51524 51968 51525\nf 51525 51968 51965\nf 51526 51969 51528\nf 51527 51529 51973\nf 51527 51971 51968\nf 51527 51973 51971\nf 51528 51969 51972\nf 51528 51972 51530\nf 51529 51531 51975\nf 51529 51975 51973\nf 51530 51972 51974\nf 51530 51974 51532\nf 51531 51533 51977\nf 51531 51977 51975\nf 51532 51974 51976\nf 51532 51976 51534\nf 51533 51535 51979\nf 51533 51979 51977\nf 51534 51976 51978\nf 51534 51978 51536\nf 51535 51537 51981\nf 51535 51981 51979\nf 51536 51978 51980\nf 51536 51980 51538\nf 51537 51539 51983\nf 51537 51983 51981\nf 51538 51980 51982\nf 51538 51982 51540\nf 51539 51541 51985\nf 51539 51985 51983\nf 51540 51982 51984\nf 51540 51984 51542\nf 51541 51543 51987\nf 51541 51987 51985\nf 51542 51984 51986\nf 51542 51986 51545\nf 51543 51544 51987\nf 51544 51546 51990\nf 51544 51988 51987\nf 51544 51990 51988\nf 51545 51986 51989\nf 51545 51989 51547\nf 51546 51548 51992\nf 51546 51992 51990\nf 51547 51989 51991\nf 51547 51991 51549\nf 51548 51550 51994\nf 51548 51994 51992\nf 51549 51991 51993\nf 51549 51993 51551\nf 51550 51552 51996\nf 51550 51996 51994\nf 51551 51993 51995\nf 51551 51995 51554\nf 51552 51553 51996\nf 51553 51555 51999\nf 51553 51997 51996\nf 51553 51999 51997\nf 51554 51995 51998\nf 51554 51998 51556\nf 51555 51558 51999\nf 51556 51998 52001\nf 51556 52001 51561\nf 51557 51563 52007\nf 51557 52003 51559\nf 51557 52007 52003\nf 51558 51559 51560\nf 51558 51560 51999\nf 51559 52002 51560\nf 51559 52003 52002\nf 51560 52000 51999\nf 51560 52002 52000\nf 51561 52001 52004\nf 51561 52004 52005\nf 51561 52005 51562\nf 51562 52005 52008\nf 51562 52008 51564\nf 51563 51564 52007\nf 51564 52008 52007\nf 51565 51566 52009\nf 51565 52009 52018\nf 51565 52018 51574\nf 51566 51567 52010\nf 51566 52010 52009\nf 51567 51568 52011\nf 51567 52011 52010\nf 51568 51569 52012\nf 51568 52012 52011\nf 51569 51570 52013\nf 51569 52013 52012\nf 51570 51571 52014\nf 51570 52014 52013\nf 51571 51572 52015\nf 51571 52015 52014\nf 51572 51576 52016\nf 51572 52016 52015\nf 51573 51575 52017\nf 51573 52017 52024\nf 51573 52024 51579\nf 51574 52018 51575\nf 51575 52018 52019\nf 51575 52019 52017\nf 51576 51577 52022\nf 51576 52021 52016\nf 51576 52022 52021\nf 51577 51578 52022\nf 51578 51581 52023\nf 51578 52023 52022\nf 51579 52024 51580\nf 51580 52024 52025\nf 51580 52025 52029\nf 51580 52029 51584\nf 51581 51582 52027\nf 51581 52026 52023\nf 51581 52027 52026\nf 51582 51583 52027\nf 51583 51586 52028\nf 51583 52028 52027\nf 51584 52029 51585\nf 51585 52029 52030\nf 51585 52030 52033\nf 51585 52033 51588\nf 51586 51587 52032\nf 51586 52031 52028\nf 51586 52032 52031\nf 51587 51590 52032\nf 51588 52033 52034\nf 51588 52034 51589\nf 51589 52034 51592\nf 51590 51591 52037\nf 51590 52036 52032\nf 51590 52037 52036\nf 51591 51595 52037\nf 51592 52034 52038\nf 51592 52038 52039\nf 51592 52039 51593\nf 51593 52039 52040\nf 51593 52040 51594\nf 51594 52040 51596\nf 51595 51600 52046\nf 51595 52041 52037\nf 51595 52046 52041\nf 51596 52040 52042\nf 51596 52042 52043\nf 51596 52043 51597\nf 51597 52043 52044\nf 51597 52044 51598\nf 51598 52044 52045\nf 51598 52045 51599\nf 51599 52045 51602\nf 51600 51601 52046\nf 51601 51608 52057\nf 51601 52047 52046\nf 51601 52057 52047\nf 51602 52045 52048\nf 51602 52048 52049\nf 51602 52049 51603\nf 51603 52049 52051\nf 51603 52051 51604\nf 51604 52051 52052\nf 51604 52052 51605\nf 51605 52052 52053\nf 51605 52053 51606\nf 51606 52053 52054\nf 51606 52054 51610\nf 51607 51616 51618\nf 51607 51618 52055\nf 51607 52055 52056\nf 51607 52056 52058\nf 51607 52058 51609\nf 51608 51609 52057\nf 51609 52058 52057\nf 51610 51612 51611\nf 51610 52054 51612\nf 51611 51612 52061\nf 51611 52061 51613\nf 51612 52054 52060\nf 51612 52060 52061\nf 51613 52061 52063\nf 51613 52063 51614\nf 51614 52063 52066\nf 51614 52066 51615\nf 51615 52066 51617\nf 51616 51617 51618\nf 51617 52065 51618\nf 51617 52066 52065\nf 51618 52065 52055\nf 51619 51620 52068\nf 51619 52068 52076\nf 51619 52076 51627\nf 51620 51621 52069\nf 51620 52069 52068\nf 51621 51622 52070\nf 51621 52070 52069\nf 51622 51623 52071\nf 51622 52071 52070\nf 51623 51628 52072\nf 51623 52072 52071\nf 51624 51625 52073\nf 51624 52073 52078\nf 51624 52078 51629\nf 51625 51626 52074\nf 51625 52074 52073\nf 51626 51630 52075\nf 51626 52075 52074\nf 51627 52076 51631\nf 51628 51632 52081\nf 51628 52077 52072\nf 51628 52081 52077\nf 51629 52078 51634\nf 51630 51636 52085\nf 51630 52079 52075\nf 51630 52085 52079\nf 51631 52076 52080\nf 51631 52080 51638\nf 51632 51633 52082\nf 51632 52082 52081\nf 51633 51639 52082\nf 51634 52078 52083\nf 51634 52083 51635\nf 51635 52083 52084\nf 51635 52084 52090\nf 51635 52090 51640\nf 51636 51637 52086\nf 51636 52086 52085\nf 51637 51641 52086\nf 51638 52080 52087\nf 51638 52087 51642\nf 51639 51643 52093\nf 51639 52088 52082\nf 51639 52093 52088\nf 51640 52090 51644\nf 51641 51645 52095\nf 51641 52091 52086\nf 51641 52095 52091\nf 51642 52087 52092\nf 51642 52092 51646\nf 51643 51648 52098\nf 51643 52098 52093\nf 51644 52090 52094\nf 51644 52094 51649\nf 51645 51650 52100\nf 51645 52100 52095\nf 51646 52092 52096\nf 51646 52096 51647\nf 51647 52096 52097\nf 51647 52097 52101\nf 51647 52101 51651\nf 51648 51652 52102\nf 51648 52102 52098\nf 51649 52094 52099\nf 51649 52099 51653\nf 51650 51654 52104\nf 51650 52104 52100\nf 51651 52101 51655\nf 51652 51656 52106\nf 51652 52106 52102\nf 51653 52099 52103\nf 51653 52103 51657\nf 51654 51658 52108\nf 51654 52108 52104\nf 51655 52101 52105\nf 51655 52105 51659\nf 51656 51660 52110\nf 51656 52110 52106\nf 51657 52103 52107\nf 51657 52107 51661\nf 51658 51662 52112\nf 51658 52112 52108\nf 51659 52105 52109\nf 51659 52109 51663\nf 51660 51664 52114\nf 51660 52114 52110\nf 51661 52107 52111\nf 51661 52111 51665\nf 51662 51666 52116\nf 51662 52116 52112\nf 51663 52109 52113\nf 51663 52113 51668\nf 51664 51669 52119\nf 51664 52119 52114\nf 51665 52111 52115\nf 51665 52115 51670\nf 51666 51667 52117\nf 51666 52117 52116\nf 51667 51671 52117\nf 51668 52113 52118\nf 51668 52118 51676\nf 51669 51678 52128\nf 51669 52128 52119\nf 51670 52115 52120\nf 51670 52120 51679\nf 51671 51672 52122\nf 51671 52121 52117\nf 51671 52122 52121\nf 51672 51673 52122\nf 51673 51674 52123\nf 51673 52123 52122\nf 51674 51680 52124\nf 51674 52124 52123\nf 51675 51677 52125\nf 51675 52125 52214\nf 51675 52214 51764\nf 51676 52118 52126\nf 51676 52126 51677\nf 51677 52126 52127\nf 51677 52127 52125\nf 51678 51766 52216\nf 51678 52216 52128\nf 51679 52120 52129\nf 51679 52129 51767\nf 51680 51681 52131\nf 51680 52130 52124\nf 51680 52131 52130\nf 51681 51682 52131\nf 51682 51683 52132\nf 51682 52132 52131\nf 51683 51684 52133\nf 51683 52133 52132\nf 51684 51685 52134\nf 51684 52134 52133\nf 51685 51686 52135\nf 51685 52135 52134\nf 51686 51687 52136\nf 51686 52136 52135\nf 51687 51688 52137\nf 51687 52137 52136\nf 51688 51689 52138\nf 51688 52138 52137\nf 51689 51690 52139\nf 51689 52139 52138\nf 51690 51691 52140\nf 51690 52140 52139\nf 51691 51692 52141\nf 51691 52141 52140\nf 51692 51693 52142\nf 51692 52142 52141\nf 51693 51694 52143\nf 51693 52143 52142\nf 51694 51695 52144\nf 51694 52144 52143\nf 51695 51696 52145\nf 51695 52145 52144\nf 51696 51697 52146\nf 51696 52146 52145\nf 51697 51698 52147\nf 51697 52147 52146\nf 51698 51699 52148\nf 51698 52148 52147\nf 51699 51700 52149\nf 51699 52149 52148\nf 51700 51701 52150\nf 51700 52150 52149\nf 51701 51702 52151\nf 51701 52151 52150\nf 51702 51703 52152\nf 51702 52152 52151\nf 51703 51704 52153\nf 51703 52153 52152\nf 51704 51705 52154\nf 51704 52154 52153\nf 51705 51706 52155\nf 51705 52155 52154\nf 51706 51707 52156\nf 51706 52156 52155\nf 51707 51708 52157\nf 51707 52157 52156\nf 51708 51709 52158\nf 51708 52158 52157\nf 51709 51710 52159\nf 51709 52159 52158\nf 51710 51711 52160\nf 51710 52160 52159\nf 51711 51712 52161\nf 51711 52161 52160\nf 51712 51713 52162\nf 51712 52162 52161\nf 51713 51714 52163\nf 51713 52163 52162\nf 51714 51715 52164\nf 51714 52164 52163\nf 51715 51716 52165\nf 51715 52165 52164\nf 51716 51717 52166\nf 51716 52166 52165\nf 51717 51718 52167\nf 51717 52167 52166\nf 51718 51719 52168\nf 51718 52168 52167\nf 51719 51720 52169\nf 51719 52169 52168\nf 51720 51721 52170\nf 51720 52170 52169\nf 51721 51722 52171\nf 51721 52171 52170\nf 51722 51723 52172\nf 51722 52172 52171\nf 51723 51724 52173\nf 51723 52173 52172\nf 51724 51725 52174\nf 51724 52174 52173\nf 51725 51726 52175\nf 51725 52175 52174\nf 51726 51727 52176\nf 51726 52176 52175\nf 51727 51728 52177\nf 51727 52177 52176\nf 51728 51729 52178\nf 51728 52178 52177\nf 51729 51730 52179\nf 51729 52179 52178\nf 51730 51731 52180\nf 51730 52180 52179\nf 51731 51732 52181\nf 51731 52181 52180\nf 51732 51733 52182\nf 51732 52182 52181\nf 51733 51734 52183\nf 51733 52183 52182\nf 51734 51735 52184\nf 51734 52184 52183\nf 51735 51736 52185\nf 51735 52185 52184\nf 51736 51737 52186\nf 51736 52186 52185\nf 51737 51738 52187\nf 51737 52187 52186\nf 51738 51739 52188\nf 51738 52188 52187\nf 51739 51740 52189\nf 51739 52189 52188\nf 51740 51741 52190\nf 51740 52190 52189\nf 51741 51742 52191\nf 51741 52191 52190\nf 51742 51743 52192\nf 51742 52192 52191\nf 51743 51744 52193\nf 51743 52193 52192\nf 51744 51745 52194\nf 51744 52194 52193\nf 51745 51746 52195\nf 51745 52195 52194\nf 51746 51747 52196\nf 51746 52196 52195\nf 51747 51748 52197\nf 51747 52197 52196\nf 51748 51749 52198\nf 51748 52198 52197\nf 51749 51750 52199\nf 51749 52199 52198\nf 51750 51751 52200\nf 51750 52200 52199\nf 51751 51752 52201\nf 51751 52201 52200\nf 51752 51753 52202\nf 51752 52202 52201\nf 51753 51754 52203\nf 51753 52203 52202\nf 51754 51755 52204\nf 51754 52204 52203\nf 51755 51756 52205\nf 51755 52205 52204\nf 51756 51757 52206\nf 51756 52206 52205\nf 51757 51758 52207\nf 51757 52207 52206\nf 51758 51759 52208\nf 51758 52208 52207\nf 51759 51760 52209\nf 51759 52209 52208\nf 51760 51761 52210\nf 51760 52210 52209\nf 51761 51762 52211\nf 51761 52211 52210\nf 51762 51763 52212\nf 51762 52212 52211\nf 51763 51765 52213\nf 51763 52213 52212\nf 51764 52214 51765\nf 51765 52214 52215\nf 51765 52215 52213\nf 51766 51768 52218\nf 51766 52218 52216\nf 51767 52129 52217\nf 51767 52217 51769\nf 51768 51771 52221\nf 51768 52221 52218\nf 51769 52217 52219\nf 51769 52219 52220\nf 51769 52220 51770\nf 51770 52220 51773\nf 51771 51772 52221\nf 51772 51774 52224\nf 51772 52222 52221\nf 51772 52224 52222\nf 51773 52220 52223\nf 51773 52223 51775\nf 51774 51777 52227\nf 51774 52227 52224\nf 51775 52223 52225\nf 51775 52225 51779\nf 51776 51784 52234\nf 51776 52226 52228\nf 51776 52228 51778\nf 51776 52234 52226\nf 51777 51778 52227\nf 51778 52228 52227\nf 51779 52225 52229\nf 51779 52229 52230\nf 51779 52230 51780\nf 51780 52230 51786\nf 51781 51874 52324\nf 51781 52231 52232\nf 51781 52232 51782\nf 51781 52324 52231\nf 51782 52232 52233\nf 51782 52233 51783\nf 51783 52233 52235\nf 51783 52235 51785\nf 51784 51785 52234\nf 51785 52235 52234\nf 51786 52230 52236\nf 51786 52236 52237\nf 51786 52237 51787\nf 51787 52237 52238\nf 51787 52238 51788\nf 51788 52238 51876\nf 51789 51879 52330\nf 51789 52239 52240\nf 51789 52240 51790\nf 51789 52330 52239\nf 51790 52240 52241\nf 51790 52241 51791\nf 51791 52241 52242\nf 51791 52242 51792\nf 51792 52242 52243\nf 51792 52243 51793\nf 51793 52243 52244\nf 51793 52244 51794\nf 51794 52244 52245\nf 51794 52245 51795\nf 51795 52245 52246\nf 51795 52246 51796\nf 51796 52246 52247\nf 51796 52247 51797\nf 51797 52247 52248\nf 51797 52248 51798\nf 51798 52248 52249\nf 51798 52249 51799\nf 51799 52249 52250\nf 51799 52250 51800\nf 51800 52250 52251\nf 51800 52251 51801\nf 51801 52251 52252\nf 51801 52252 51802\nf 51802 52252 52253\nf 51802 52253 51803\nf 51803 52253 52254\nf 51803 52254 51804\nf 51804 52254 52255\nf 51804 52255 51805\nf 51805 52255 52256\nf 51805 52256 51806\nf 51806 52256 52257\nf 51806 52257 51807\nf 51807 52257 52258\nf 51807 52258 51808\nf 51808 52258 52259\nf 51808 52259 51809\nf 51809 52259 52260\nf 51809 52260 51810\nf 51810 52260 52261\nf 51810 52261 51811\nf 51811 52261 52262\nf 51811 52262 51812\nf 51812 52262 52263\nf 51812 52263 51813\nf 51813 52263 52264\nf 51813 52264 51814\nf 51814 52264 52265\nf 51814 52265 51815\nf 51815 52265 52266\nf 51815 52266 51816\nf 51816 52266 52267\nf 51816 52267 51817\nf 51817 52267 52268\nf 51817 52268 51818\nf 51818 52268 52269\nf 51818 52269 51819\nf 51819 52269 52270\nf 51819 52270 51820\nf 51820 52270 52271\nf 51820 52271 51821\nf 51821 52271 52272\nf 51821 52272 51822\nf 51822 52272 52273\nf 51822 52273 51823\nf 51823 52273 52274\nf 51823 52274 51824\nf 51824 52274 52275\nf 51824 52275 51825\nf 51825 52275 52276\nf 51825 52276 51826\nf 51826 52276 52277\nf 51826 52277 51827\nf 51827 52277 52278\nf 51827 52278 51828\nf 51828 52278 52279\nf 51828 52279 51829\nf 51829 52279 52280\nf 51829 52280 51830\nf 51830 52280 52281\nf 51830 52281 51831\nf 51831 52281 52282\nf 51831 52282 51832\nf 51832 52282 52283\nf 51832 52283 51833\nf 51833 52283 52284\nf 51833 52284 51834\nf 51834 52284 52285\nf 51834 52285 51835\nf 51835 52285 52286\nf 51835 52286 51836\nf 51836 52286 52287\nf 51836 52287 51837\nf 51837 52287 52288\nf 51837 52288 51838\nf 51838 52288 52289\nf 51838 52289 51839\nf 51839 52289 52290\nf 51839 52290 51840\nf 51840 52290 52291\nf 51840 52291 51841\nf 51841 52291 52292\nf 51841 52292 51842\nf 51842 52292 52293\nf 51842 52293 51843\nf 51843 52293 52294\nf 51843 52294 51844\nf 51844 52294 52295\nf 51844 52295 51845\nf 51845 52295 52296\nf 51845 52296 51846\nf 51846 52296 52297\nf 51846 52297 51847\nf 51847 52297 52298\nf 51847 52298 51848\nf 51848 52298 52299\nf 51848 52299 51849\nf 51849 52299 52300\nf 51849 52300 51850\nf 51850 52300 52301\nf 51850 52301 51851\nf 51851 52301 52302\nf 51851 52302 51852\nf 51852 52302 52303\nf 51852 52303 51853\nf 51853 52303 52304\nf 51853 52304 51854\nf 51854 52304 52305\nf 51854 52305 51855\nf 51855 52305 52306\nf 51855 52306 51856\nf 51856 52306 52307\nf 51856 52307 51857\nf 51857 52307 52308\nf 51857 52308 51858\nf 51858 52308 52309\nf 51858 52309 51859\nf 51859 52309 52310\nf 51859 52310 51860\nf 51860 52310 52311\nf 51860 52311 51861\nf 51861 52311 52312\nf 51861 52312 51862\nf 51862 52312 52313\nf 51862 52313 51863\nf 51863 52313 52314\nf 51863 52314 51864\nf 51864 52314 52315\nf 51864 52315 51865\nf 51865 52315 52316\nf 51865 52316 51866\nf 51866 52316 52317\nf 51866 52317 51867\nf 51867 52317 52318\nf 51867 52318 51868\nf 51868 52318 52319\nf 51868 52319 51869\nf 51869 52319 52320\nf 51869 52320 51870\nf 51870 52320 52321\nf 51870 52321 51871\nf 51871 52321 52322\nf 51871 52322 51872\nf 51872 52322 52323\nf 51872 52323 51873\nf 51873 52323 52325\nf 51873 52325 51875\nf 51874 51875 52324\nf 51875 52325 52324\nf 51876 52238 52326\nf 51876 52326 52327\nf 51876 52327 51877\nf 51877 52327 51881\nf 51878 51883 52335\nf 51878 52329 52331\nf 51878 52331 51880\nf 51878 52335 52329\nf 51879 51880 52330\nf 51880 52331 52330\nf 51881 52327 52332\nf 51881 52332 52333\nf 51881 52333 51882\nf 51882 52333 52336\nf 51882 52336 51884\nf 51883 51884 52335\nf 51884 52336 52335\nf 51885 51886 52337\nf 51885 52337 52341\nf 51885 52341 51889\nf 51886 51887 52338\nf 51886 52338 52337\nf 51887 51888 52339\nf 51887 52339 52338\nf 51888 51891 52340\nf 51888 52340 52339\nf 51889 52341 51890\nf 51890 52341 52342\nf 51890 52342 52345\nf 51890 52345 51893\nf 51891 51892 52344\nf 51891 52343 52340\nf 51891 52344 52343\nf 51892 51894 52344\nf 51893 52345 51895\nf 51894 51897 52350\nf 51894 52346 52344\nf 51894 52350 52346\nf 51895 52345 52348\nf 51895 52348 51896\nf 51896 52348 52349\nf 51896 52349 52351\nf 51896 52351 51898\nf 51897 51899 52352\nf 51897 52352 52350\nf 51898 52351 51900\nf 51899 51901 52354\nf 51899 52354 52352\nf 51900 52351 52353\nf 51900 52353 51902\nf 51901 51903 52356\nf 51901 52356 52354\nf 51902 52353 52355\nf 51902 52355 51904\nf 51903 51905 52358\nf 51903 52358 52356\nf 51904 52355 52357\nf 51904 52357 51907\nf 51905 51906 52359\nf 51905 52359 52358\nf 51906 51908 52359\nf 51907 52357 52360\nf 51907 52360 51909\nf 51908 51910 52363\nf 51908 52361 52359\nf 51908 52363 52361\nf 51909 52360 52362\nf 51909 52362 51911\nf 51910 51912 52365\nf 51910 52365 52363\nf 51911 52362 52364\nf 51911 52364 51913\nf 51912 51914 52367\nf 51912 52367 52365\nf 51913 52364 52366\nf 51913 52366 51915\nf 51914 51916 52369\nf 51914 52369 52367\nf 51915 52366 52368\nf 51915 52368 51918\nf 51916 51917 52369\nf 51917 51919 52372\nf 51917 52370 52369\nf 51917 52372 52370\nf 51918 52368 52371\nf 51918 52371 51920\nf 51919 51922 52375\nf 51919 52375 52372\nf 51920 52371 52373\nf 51920 52373 52374\nf 51920 52374 51921\nf 51921 52374 51923\nf 51922 51924 52377\nf 51922 52377 52375\nf 51923 52374 52376\nf 51923 52376 51926\nf 51924 51925 52377\nf 51925 51927 52380\nf 51925 52378 52377\nf 51925 52380 52378\nf 51926 52376 52379\nf 51926 52379 51928\nf 51927 51929 52384\nf 51927 52384 52380\nf 51928 52379 52381\nf 51928 52381 51931\nf 51929 51930 52384\nf 51930 51934 52387\nf 51930 52385 52384\nf 51930 52387 52385\nf 51931 51933 51932\nf 51931 52381 52382\nf 51931 52382 51933\nf 51932 51933 51936\nf 51933 52382 52386\nf 51933 52386 51936\nf 51934 51935 52387\nf 51935 51937 52392\nf 51935 52388 52387\nf 51935 52392 52388\nf 51936 52386 52389\nf 51936 52389 51938\nf 51937 51941 52392\nf 51938 51940 51939\nf 51938 52389 52390\nf 51938 52390 51940\nf 51939 51940 51942\nf 51940 51943 51942\nf 51940 52390 52393\nf 51940 52393 51943\nf 51941 51942 51943\nf 51941 51943 52392\nf 51943 52393 52392\nf 51944 51947 51948\nf 51944 51948 51945\nf 51945 51948 51946\nf 51946 51948 52394\nf 51946 51951 51949\nf 51946 52394 51951\nf 51947 51952 52398\nf 51947 52394 51948\nf 51947 52398 52394\nf 51949 51951 51950\nf 51950 51951 52397\nf 51950 52395 52400\nf 51950 52397 52395\nf 51950 52400 51954\nf 51951 52394 52396\nf 51951 52396 52397\nf 51952 51953 51957\nf 51952 51957 52402\nf 51952 52402 52398\nf 51953 51956 51957\nf 51954 52400 51955\nf 51955 52400 52401\nf 51955 52401 52404\nf 51955 52404 51958\nf 51956 51959 52405\nf 51956 52403 51957\nf 51956 52405 52403\nf 51957 52403 52402\nf 51958 52404 51960\nf 51959 51961 52407\nf 51959 52407 52405\nf 51960 52404 52406\nf 51960 52406 51962\nf 51961 51963 52409\nf 51961 52409 52407\nf 51962 52406 52408\nf 51962 52408 51964\nf 51963 51965 52411\nf 51963 52411 52409\nf 51964 52408 52410\nf 51964 52410 51966\nf 51965 51968 52413\nf 51965 52413 52411\nf 51966 52410 52412\nf 51966 52412 52414\nf 51966 52414 51967\nf 51967 51970 51969\nf 51967 52414 51970\nf 51968 51971 52416\nf 51968 52416 52413\nf 51969 51970 52417\nf 51969 52417 51972\nf 51970 52414 52415\nf 51970 52415 52417\nf 51971 51973 52418\nf 51971 52418 52416\nf 51972 52417 51974\nf 51973 51975 52420\nf 51973 52420 52418\nf 51974 52417 52419\nf 51974 52419 51976\nf 51975 51977 52422\nf 51975 52422 52420\nf 51976 52419 52421\nf 51976 52421 51978\nf 51977 51979 52424\nf 51977 52424 52422\nf 51978 52421 52423\nf 51978 52423 51980\nf 51979 51981 52426\nf 51979 52426 52424\nf 51980 52423 52425\nf 51980 52425 51982\nf 51981 51983 52428\nf 51981 52428 52426\nf 51982 52425 52427\nf 51982 52427 51984\nf 51983 51985 52430\nf 51983 52430 52428\nf 51984 52427 52429\nf 51984 52429 51986\nf 51985 51987 52432\nf 51985 52432 52430\nf 51986 52429 52431\nf 51986 52431 51989\nf 51987 51988 52432\nf 51988 51990 52436\nf 51988 52433 52432\nf 51988 52436 52433\nf 51989 52431 52435\nf 51989 52435 51991\nf 51990 51992 52438\nf 51990 52438 52436\nf 51991 52435 52437\nf 51991 52437 51993\nf 51992 51994 52440\nf 51992 52440 52438\nf 51993 52437 52439\nf 51993 52439 51995\nf 51994 51996 52442\nf 51994 52442 52440\nf 51995 52439 52441\nf 51995 52441 51998\nf 51996 51997 52442\nf 51997 51999 52445\nf 51997 52443 52442\nf 51997 52445 52443\nf 51998 52441 52444\nf 51998 52444 52001\nf 51999 52000 52445\nf 52000 52002 52449\nf 52000 52446 52445\nf 52000 52449 52446\nf 52001 52444 52447\nf 52001 52447 52004\nf 52002 52003 52449\nf 52003 52007 52452\nf 52003 52450 52449\nf 52003 52452 52450\nf 52004 52006 52005\nf 52004 52447 52448\nf 52004 52448 52006\nf 52005 52006 52453\nf 52005 52453 52008\nf 52006 52448 52451\nf 52006 52451 52453\nf 52007 52008 52452\nf 52008 52453 52452\nf 52009 52010 52456\nf 52009 52020 52018\nf 52009 52455 52020\nf 52009 52456 52455\nf 52010 52011 52457\nf 52010 52457 52456\nf 52011 52012 52458\nf 52011 52458 52457\nf 52012 52013 52459\nf 52012 52459 52458\nf 52013 52014 52460\nf 52013 52460 52459\nf 52014 52015 52461\nf 52014 52461 52460\nf 52015 52016 52462\nf 52015 52462 52461\nf 52016 52021 52463\nf 52016 52463 52462\nf 52017 52019 52465\nf 52017 52465 52469\nf 52017 52469 52024\nf 52018 52020 52019\nf 52019 52020 52464\nf 52019 52464 52465\nf 52020 52455 52464\nf 52021 52022 52467\nf 52021 52466 52463\nf 52021 52467 52466\nf 52022 52023 52467\nf 52023 52026 52468\nf 52023 52468 52467\nf 52024 52469 52025\nf 52025 52469 52470\nf 52025 52470 52474\nf 52025 52474 52029\nf 52026 52027 52472\nf 52026 52471 52468\nf 52026 52472 52471\nf 52027 52028 52472\nf 52028 52031 52473\nf 52028 52473 52472\nf 52029 52474 52477\nf 52029 52477 52030\nf 52030 52035 52033\nf 52030 52477 52035\nf 52031 52032 52476\nf 52031 52475 52473\nf 52031 52476 52475\nf 52032 52036 52476\nf 52033 52035 52034\nf 52034 52035 52038\nf 52035 52477 52038\nf 52036 52037 52479\nf 52036 52478 52476\nf 52036 52479 52478\nf 52037 52041 52479\nf 52038 52477 52480\nf 52038 52480 52481\nf 52038 52481 52039\nf 52039 52481 52482\nf 52039 52482 52040\nf 52040 52482 52042\nf 52041 52046 52490\nf 52041 52483 52479\nf 52041 52490 52483\nf 52042 52482 52484\nf 52042 52484 52485\nf 52042 52485 52043\nf 52043 52485 52486\nf 52043 52486 52044\nf 52044 52486 52487\nf 52044 52487 52045\nf 52045 52487 52488\nf 52045 52488 52048\nf 52046 52047 52490\nf 52047 52057 52059\nf 52047 52059 52489\nf 52047 52489 52491\nf 52047 52491 52490\nf 52048 52050 52049\nf 52048 52488 52050\nf 52049 52050 52494\nf 52049 52494 52051\nf 52050 52488 52493\nf 52050 52493 52494\nf 52051 52494 52495\nf 52051 52495 52052\nf 52052 52495 52496\nf 52052 52496 52053\nf 52053 52496 52497\nf 52053 52497 52054\nf 52054 52497 52498\nf 52054 52498 52060\nf 52055 52065 52067\nf 52055 52067 52500\nf 52055 52500 52501\nf 52055 52501 52503\nf 52055 52503 52056\nf 52056 52503 52058\nf 52057 52058 52059\nf 52058 52502 52059\nf 52058 52503 52502\nf 52059 52502 52489\nf 52060 52062 52061\nf 52060 52498 52062\nf 52061 52062 52063\nf 52062 52064 52063\nf 52062 52498 52499\nf 52062 52499 52064\nf 52063 52064 52066\nf 52064 52067 52066\nf 52064 52499 52500\nf 52064 52500 52067\nf 52065 52066 52067\nf 52068 52069 52504\nf 52068 52504 52512\nf 52068 52512 52076\nf 52069 52070 52505\nf 52069 52505 52504\nf 52070 52071 52506\nf 52070 52506 52505\nf 52071 52072 52507\nf 52071 52507 52506\nf 52072 52077 52508\nf 52072 52508 52507\nf 52073 52074 52509\nf 52073 52509 52514\nf 52073 52514 52078\nf 52074 52075 52510\nf 52074 52510 52509\nf 52075 52079 52511\nf 52075 52511 52510\nf 52076 52512 52080\nf 52077 52081 52517\nf 52077 52513 52508\nf 52077 52517 52513\nf 52078 52514 52083\nf 52079 52085 52520\nf 52079 52515 52511\nf 52079 52520 52515\nf 52080 52512 52516\nf 52080 52516 52087\nf 52081 52082 52089\nf 52081 52089 52523\nf 52081 52523 52517\nf 52082 52088 52089\nf 52083 52514 52518\nf 52083 52518 52084\nf 52084 52518 52519\nf 52084 52519 52525\nf 52084 52525 52090\nf 52085 52086 52521\nf 52085 52521 52520\nf 52086 52091 52521\nf 52087 52516 52522\nf 52087 52522 52092\nf 52088 52093 52528\nf 52088 52524 52089\nf 52088 52528 52524\nf 52089 52524 52523\nf 52090 52525 52094\nf 52091 52095 52530\nf 52091 52526 52521\nf 52091 52530 52526\nf 52092 52522 52527\nf 52092 52527 52096\nf 52093 52098 52533\nf 52093 52533 52528\nf 52094 52525 52529\nf 52094 52529 52099\nf 52095 52100 52535\nf 52095 52535 52530\nf 52096 52527 52531\nf 52096 52531 52097\nf 52097 52531 52532\nf 52097 52532 52536\nf 52097 52536 52101\nf 52098 52102 52537\nf 52098 52537 52533\nf 52099 52529 52534\nf 52099 52534 52103\nf 52100 52104 52539\nf 52100 52539 52535\nf 52101 52536 52105\nf 52102 52106 52541\nf 52102 52541 52537\nf 52103 52534 52538\nf 52103 52538 52107\nf 52104 52108 52543\nf 52104 52543 52539\nf 52105 52536 52540\nf 52105 52540 52109\nf 52106 52110 52545\nf 52106 52545 52541\nf 52107 52538 52542\nf 52107 52542 52111\nf 52108 52112 52547\nf 52108 52547 52543\nf 52109 52540 52544\nf 52109 52544 52113\nf 52110 52114 52549\nf 52110 52549 52545\nf 52111 52542 52546\nf 52111 52546 52115\nf 52112 52116 52551\nf 52112 52551 52547\nf 52113 52544 52548\nf 52113 52548 52118\nf 52114 52119 52554\nf 52114 52554 52549\nf 52115 52546 52550\nf 52115 52550 52120\nf 52116 52117 52552\nf 52116 52552 52551\nf 52117 52121 52552\nf 52118 52548 52553\nf 52118 52553 52126\nf 52119 52128 52563\nf 52119 52563 52554\nf 52120 52550 52555\nf 52120 52555 52129\nf 52121 52122 52557\nf 52121 52556 52552\nf 52121 52557 52556\nf 52122 52123 52557\nf 52123 52124 52558\nf 52123 52558 52557\nf 52124 52130 52559\nf 52124 52559 52558\nf 52125 52127 52560\nf 52125 52560 52649\nf 52125 52649 52214\nf 52126 52553 52561\nf 52126 52561 52127\nf 52127 52561 52562\nf 52127 52562 52560\nf 52128 52216 52651\nf 52128 52651 52563\nf 52129 52555 52564\nf 52129 52564 52217\nf 52130 52131 52566\nf 52130 52565 52559\nf 52130 52566 52565\nf 52131 52132 52566\nf 52132 52133 52567\nf 52132 52567 52566\nf 52133 52134 52568\nf 52133 52568 52567\nf 52134 52135 52569\nf 52134 52569 52568\nf 52135 52136 52570\nf 52135 52570 52569\nf 52136 52137 52571\nf 52136 52571 52570\nf 52137 52138 52572\nf 52137 52572 52571\nf 52138 52139 52573\nf 52138 52573 52572\nf 52139 52140 52574\nf 52139 52574 52573\nf 52140 52141 52575\nf 52140 52575 52574\nf 52141 52142 52576\nf 52141 52576 52575\nf 52142 52143 52577\nf 52142 52577 52576\nf 52143 52144 52578\nf 52143 52578 52577\nf 52144 52145 52579\nf 52144 52579 52578\nf 52145 52146 52580\nf 52145 52580 52579\nf 52146 52147 52581\nf 52146 52581 52580\nf 52147 52148 52582\nf 52147 52582 52581\nf 52148 52149 52583\nf 52148 52583 52582\nf 52149 52150 52584\nf 52149 52584 52583\nf 52150 52151 52585\nf 52150 52585 52584\nf 52151 52152 52586\nf 52151 52586 52585\nf 52152 52153 52587\nf 52152 52587 52586\nf 52153 52154 52588\nf 52153 52588 52587\nf 52154 52155 52589\nf 52154 52589 52588\nf 52155 52156 52590\nf 52155 52590 52589\nf 52156 52157 52591\nf 52156 52591 52590\nf 52157 52158 52592\nf 52157 52592 52591\nf 52158 52159 52593\nf 52158 52593 52592\nf 52159 52160 52594\nf 52159 52594 52593\nf 52160 52161 52595\nf 52160 52595 52594\nf 52161 52162 52596\nf 52161 52596 52595\nf 52162 52163 52597\nf 52162 52597 52596\nf 52163 52164 52598\nf 52163 52598 52597\nf 52164 52165 52599\nf 52164 52599 52598\nf 52165 52166 52600\nf 52165 52600 52599\nf 52166 52167 52601\nf 52166 52601 52600\nf 52167 52168 52602\nf 52167 52602 52601\nf 52168 52169 52603\nf 52168 52603 52602\nf 52169 52170 52604\nf 52169 52604 52603\nf 52170 52171 52605\nf 52170 52605 52604\nf 52171 52172 52606\nf 52171 52606 52605\nf 52172 52173 52607\nf 52172 52607 52606\nf 52173 52174 52608\nf 52173 52608 52607\nf 52174 52175 52609\nf 52174 52609 52608\nf 52175 52176 52610\nf 52175 52610 52609\nf 52176 52177 52611\nf 52176 52611 52610\nf 52177 52178 52612\nf 52177 52612 52611\nf 52178 52179 52613\nf 52178 52613 52612\nf 52179 52180 52614\nf 52179 52614 52613\nf 52180 52181 52615\nf 52180 52615 52614\nf 52181 52182 52616\nf 52181 52616 52615\nf 52182 52183 52617\nf 52182 52617 52616\nf 52183 52184 52618\nf 52183 52618 52617\nf 52184 52185 52619\nf 52184 52619 52618\nf 52185 52186 52620\nf 52185 52620 52619\nf 52186 52187 52621\nf 52186 52621 52620\nf 52187 52188 52622\nf 52187 52622 52621\nf 52188 52189 52623\nf 52188 52623 52622\nf 52189 52190 52624\nf 52189 52624 52623\nf 52190 52191 52625\nf 52190 52625 52624\nf 52191 52192 52626\nf 52191 52626 52625\nf 52192 52193 52627\nf 52192 52627 52626\nf 52193 52194 52628\nf 52193 52628 52627\nf 52194 52195 52629\nf 52194 52629 52628\nf 52195 52196 52630\nf 52195 52630 52629\nf 52196 52197 52631\nf 52196 52631 52630\nf 52197 52198 52632\nf 52197 52632 52631\nf 52198 52199 52633\nf 52198 52633 52632\nf 52199 52200 52634\nf 52199 52634 52633\nf 52200 52201 52635\nf 52200 52635 52634\nf 52201 52202 52636\nf 52201 52636 52635\nf 52202 52203 52637\nf 52202 52637 52636\nf 52203 52204 52638\nf 52203 52638 52637\nf 52204 52205 52639\nf 52204 52639 52638\nf 52205 52206 52640\nf 52205 52640 52639\nf 52206 52207 52641\nf 52206 52641 52640\nf 52207 52208 52642\nf 52207 52642 52641\nf 52208 52209 52643\nf 52208 52643 52642\nf 52209 52210 52644\nf 52209 52644 52643\nf 52210 52211 52645\nf 52210 52645 52644\nf 52211 52212 52646\nf 52211 52646 52645\nf 52212 52213 52647\nf 52212 52647 52646\nf 52213 52215 52648\nf 52213 52648 52647\nf 52214 52649 52215\nf 52215 52649 52650\nf 52215 52650 52648\nf 52216 52218 52653\nf 52216 52653 52651\nf 52217 52564 52652\nf 52217 52652 52219\nf 52218 52221 52656\nf 52218 52656 52653\nf 52219 52652 52654\nf 52219 52654 52655\nf 52219 52655 52220\nf 52220 52655 52223\nf 52221 52222 52656\nf 52222 52224 52659\nf 52222 52657 52656\nf 52222 52659 52657\nf 52223 52655 52658\nf 52223 52658 52225\nf 52224 52227 52662\nf 52224 52662 52659\nf 52225 52658 52660\nf 52225 52660 52229\nf 52226 52234 52669\nf 52226 52661 52663\nf 52226 52663 52228\nf 52226 52669 52661\nf 52227 52228 52662\nf 52228 52663 52662\nf 52229 52660 52664\nf 52229 52664 52665\nf 52229 52665 52230\nf 52230 52665 52236\nf 52231 52324 52760\nf 52231 52666 52667\nf 52231 52667 52232\nf 52231 52760 52666\nf 52232 52667 52668\nf 52232 52668 52233\nf 52233 52668 52670\nf 52233 52670 52235\nf 52234 52235 52669\nf 52235 52670 52669\nf 52236 52665 52671\nf 52236 52671 52672\nf 52236 52672 52237\nf 52237 52672 52673\nf 52237 52673 52238\nf 52238 52673 52674\nf 52238 52674 52326\nf 52239 52330 52766\nf 52239 52675 52676\nf 52239 52676 52240\nf 52239 52766 52675\nf 52240 52676 52677\nf 52240 52677 52241\nf 52241 52677 52678\nf 52241 52678 52242\nf 52242 52678 52679\nf 52242 52679 52243\nf 52243 52679 52680\nf 52243 52680 52244\nf 52244 52680 52681\nf 52244 52681 52245\nf 52245 52681 52682\nf 52245 52682 52246\nf 52246 52682 52683\nf 52246 52683 52247\nf 52247 52683 52684\nf 52247 52684 52248\nf 52248 52684 52685\nf 52248 52685 52249\nf 52249 52685 52686\nf 52249 52686 52250\nf 52250 52686 52687\nf 52250 52687 52251\nf 52251 52687 52688\nf 52251 52688 52252\nf 52252 52688 52689\nf 52252 52689 52253\nf 52253 52689 52690\nf 52253 52690 52254\nf 52254 52690 52691\nf 52254 52691 52255\nf 52255 52691 52692\nf 52255 52692 52256\nf 52256 52692 52693\nf 52256 52693 52257\nf 52257 52693 52694\nf 52257 52694 52258\nf 52258 52694 52695\nf 52258 52695 52259\nf 52259 52695 52696\nf 52259 52696 52260\nf 52260 52696 52697\nf 52260 52697 52261\nf 52261 52697 52698\nf 52261 52698 52262\nf 52262 52698 52699\nf 52262 52699 52263\nf 52263 52699 52700\nf 52263 52700 52264\nf 52264 52700 52701\nf 52264 52701 52265\nf 52265 52701 52702\nf 52265 52702 52266\nf 52266 52702 52703\nf 52266 52703 52267\nf 52267 52703 52704\nf 52267 52704 52268\nf 52268 52704 52705\nf 52268 52705 52269\nf 52269 52705 52706\nf 52269 52706 52270\nf 52270 52706 52707\nf 52270 52707 52271\nf 52271 52707 52708\nf 52271 52708 52272\nf 52272 52708 52709\nf 52272 52709 52273\nf 52273 52709 52710\nf 52273 52710 52274\nf 52274 52710 52711\nf 52274 52711 52275\nf 52275 52711 52712\nf 52275 52712 52276\nf 52276 52712 52713\nf 52276 52713 52277\nf 52277 52713 52714\nf 52277 52714 52278\nf 52278 52714 52715\nf 52278 52715 52279\nf 52279 52715 52716\nf 52279 52716 52280\nf 52280 52716 52717\nf 52280 52717 52281\nf 52281 52717 52718\nf 52281 52718 52282\nf 52282 52718 52719\nf 52282 52719 52283\nf 52283 52719 52720\nf 52283 52720 52284\nf 52284 52720 52721\nf 52284 52721 52285\nf 52285 52721 52722\nf 52285 52722 52286\nf 52286 52722 52723\nf 52286 52723 52287\nf 52287 52723 52724\nf 52287 52724 52288\nf 52288 52724 52725\nf 52288 52725 52289\nf 52289 52725 52726\nf 52289 52726 52290\nf 52290 52726 52727\nf 52290 52727 52291\nf 52291 52727 52728\nf 52291 52728 52292\nf 52292 52728 52729\nf 52292 52729 52293\nf 52293 52729 52730\nf 52293 52730 52294\nf 52294 52730 52731\nf 52294 52731 52295\nf 52295 52731 52732\nf 52295 52732 52296\nf 52296 52732 52733\nf 52296 52733 52297\nf 52297 52733 52734\nf 52297 52734 52298\nf 52298 52734 52735\nf 52298 52735 52299\nf 52299 52735 52736\nf 52299 52736 52300\nf 52300 52736 52737\nf 52300 52737 52301\nf 52301 52737 52738\nf 52301 52738 52302\nf 52302 52738 52739\nf 52302 52739 52303\nf 52303 52739 52740\nf 52303 52740 52304\nf 52304 52740 52741\nf 52304 52741 52305\nf 52305 52741 52742\nf 52305 52742 52306\nf 52306 52742 52743\nf 52306 52743 52307\nf 52307 52743 52744\nf 52307 52744 52308\nf 52308 52744 52745\nf 52308 52745 52309\nf 52309 52745 52746\nf 52309 52746 52310\nf 52310 52746 52747\nf 52310 52747 52311\nf 52311 52747 52748\nf 52311 52748 52312\nf 52312 52748 52749\nf 52312 52749 52313\nf 52313 52749 52750\nf 52313 52750 52314\nf 52314 52750 52751\nf 52314 52751 52315\nf 52315 52751 52752\nf 52315 52752 52316\nf 52316 52752 52753\nf 52316 52753 52317\nf 52317 52753 52754\nf 52317 52754 52318\nf 52318 52754 52755\nf 52318 52755 52319\nf 52319 52755 52756\nf 52319 52756 52320\nf 52320 52756 52757\nf 52320 52757 52321\nf 52321 52757 52758\nf 52321 52758 52322\nf 52322 52758 52759\nf 52322 52759 52323\nf 52323 52759 52761\nf 52323 52761 52325\nf 52324 52325 52760\nf 52325 52761 52760\nf 52326 52328 52327\nf 52326 52674 52328\nf 52327 52328 52334\nf 52327 52334 52332\nf 52328 52674 52763\nf 52328 52763 52764\nf 52328 52764 52334\nf 52329 52335 52769\nf 52329 52765 52767\nf 52329 52767 52331\nf 52329 52769 52765\nf 52330 52331 52766\nf 52331 52767 52766\nf 52332 52334 52333\nf 52333 52334 52770\nf 52333 52770 52336\nf 52334 52764 52768\nf 52334 52768 52770\nf 52335 52336 52769\nf 52336 52770 52769\nf 52337 52338 52771\nf 52337 52771 52775\nf 52337 52775 52341\nf 52338 52339 52772\nf 52338 52772 52771\nf 52339 52340 52773\nf 52339 52773 52772\nf 52340 52343 52774\nf 52340 52774 52773\nf 52341 52775 52342\nf 52342 52775 52776\nf 52342 52776 52778\nf 52342 52778 52345\nf 52343 52344 52347\nf 52343 52347 52779\nf 52343 52777 52774\nf 52343 52779 52777\nf 52344 52346 52347\nf 52345 52778 52348\nf 52346 52350 52783\nf 52346 52780 52347\nf 52346 52783 52780\nf 52347 52780 52779\nf 52348 52778 52781\nf 52348 52781 52349\nf 52349 52781 52782\nf 52349 52782 52784\nf 52349 52784 52351\nf 52350 52352 52785\nf 52350 52785 52783\nf 52351 52784 52353\nf 52352 52354 52787\nf 52352 52787 52785\nf 52353 52784 52786\nf 52353 52786 52355\nf 52354 52356 52789\nf 52354 52789 52787\nf 52355 52786 52788\nf 52355 52788 52357\nf 52356 52358 52791\nf 52356 52791 52789\nf 52357 52788 52790\nf 52357 52790 52360\nf 52358 52359 52792\nf 52358 52792 52791\nf 52359 52361 52792\nf 52360 52790 52793\nf 52360 52793 52362\nf 52361 52363 52797\nf 52361 52794 52792\nf 52361 52797 52794\nf 52362 52793 52796\nf 52362 52796 52364\nf 52363 52365 52799\nf 52363 52799 52797\nf 52364 52796 52798\nf 52364 52798 52366\nf 52365 52367 52801\nf 52365 52801 52799\nf 52366 52798 52800\nf 52366 52800 52368\nf 52367 52369 52803\nf 52367 52803 52801\nf 52368 52800 52802\nf 52368 52802 52371\nf 52369 52370 52803\nf 52370 52372 52807\nf 52370 52804 52803\nf 52370 52807 52804\nf 52371 52802 52806\nf 52371 52806 52373\nf 52372 52375 52811\nf 52372 52811 52807\nf 52373 52806 52808\nf 52373 52808 52809\nf 52373 52809 52374\nf 52374 52809 52376\nf 52375 52377 52813\nf 52375 52813 52811\nf 52376 52809 52812\nf 52376 52812 52379\nf 52377 52378 52813\nf 52378 52380 52817\nf 52378 52814 52813\nf 52378 52817 52814\nf 52379 52812 52815\nf 52379 52815 52381\nf 52380 52384 52819\nf 52380 52819 52817\nf 52381 52383 52382\nf 52381 52815 52816\nf 52381 52816 52383\nf 52382 52383 52386\nf 52383 52816 52818\nf 52383 52818 52386\nf 52384 52385 52819\nf 52385 52387 52823\nf 52385 52820 52819\nf 52385 52823 52820\nf 52386 52818 52821\nf 52386 52821 52389\nf 52387 52388 52823\nf 52388 52392 52826\nf 52388 52824 52823\nf 52388 52826 52824\nf 52389 52391 52390\nf 52389 52821 52822\nf 52389 52822 52391\nf 52390 52391 52827\nf 52390 52827 52393\nf 52391 52822 52825\nf 52391 52825 52827\nf 52392 52393 52826\nf 52393 52827 52826\nf 52394 52398 52399\nf 52394 52399 52396\nf 52395 52397 52829\nf 52395 52829 52832\nf 52395 52832 52400\nf 52396 52399 52397\nf 52397 52399 52831\nf 52397 52830 52829\nf 52397 52831 52830\nf 52398 52402 52836\nf 52398 52831 52399\nf 52398 52836 52831\nf 52400 52832 52401\nf 52401 52832 52833\nf 52401 52833 52838\nf 52401 52838 52404\nf 52402 52403 52837\nf 52402 52837 52836\nf 52403 52405 52837\nf 52404 52838 52406\nf 52405 52407 52842\nf 52405 52839 52837\nf 52405 52842 52839\nf 52406 52838 52841\nf 52406 52841 52408\nf 52407 52409 52844\nf 52407 52844 52842\nf 52408 52841 52843\nf 52408 52843 52410\nf 52409 52411 52846\nf 52409 52846 52844\nf 52410 52843 52845\nf 52410 52845 52412\nf 52411 52413 52848\nf 52411 52848 52846\nf 52412 52845 52847\nf 52412 52847 52414\nf 52413 52416 52851\nf 52413 52851 52848\nf 52414 52847 52849\nf 52414 52849 52415\nf 52415 52849 52850\nf 52415 52850 52852\nf 52415 52852 52417\nf 52416 52418 52854\nf 52416 52854 52851\nf 52417 52852 52419\nf 52418 52420 52856\nf 52418 52856 52854\nf 52419 52852 52855\nf 52419 52855 52421\nf 52420 52422 52858\nf 52420 52858 52856\nf 52421 52855 52857\nf 52421 52857 52423\nf 52422 52424 52860\nf 52422 52860 52858\nf 52423 52857 52859\nf 52423 52859 52425\nf 52424 52426 52862\nf 52424 52862 52860\nf 52425 52859 52861\nf 52425 52861 52427\nf 52426 52428 52864\nf 52426 52864 52862\nf 52427 52861 52863\nf 52427 52863 52429\nf 52428 52430 52866\nf 52428 52866 52864\nf 52429 52863 52865\nf 52429 52865 52431\nf 52430 52432 52866\nf 52431 52865 52868\nf 52431 52868 52435\nf 52432 52433 52434\nf 52432 52434 52866\nf 52433 52436 52869\nf 52433 52869 52434\nf 52434 52867 52866\nf 52434 52869 52867\nf 52435 52868 52870\nf 52435 52870 52437\nf 52436 52438 52873\nf 52436 52871 52869\nf 52436 52873 52871\nf 52437 52870 52872\nf 52437 52872 52439\nf 52438 52440 52875\nf 52438 52875 52873\nf 52439 52872 52874\nf 52439 52874 52441\nf 52440 52442 52877\nf 52440 52877 52875\nf 52441 52874 52876\nf 52441 52876 52444\nf 52442 52443 52877\nf 52443 52445 52881\nf 52443 52878 52877\nf 52443 52881 52878\nf 52444 52876 52880\nf 52444 52880 52447\nf 52445 52446 52881\nf 52446 52449 52886\nf 52446 52882 52881\nf 52446 52886 52882\nf 52447 52880 52883\nf 52447 52883 52884\nf 52447 52884 52448\nf 52448 52884 52885\nf 52448 52885 52451\nf 52449 52450 52886\nf 52450 52452 52454\nf 52450 52454 52885\nf 52450 52885 52887\nf 52450 52887 52886\nf 52451 52454 52453\nf 52451 52885 52454\nf 52452 52453 52454\nf 52455 52456 52888\nf 52455 52888 52897\nf 52455 52897 52464\nf 52456 52457 52889\nf 52456 52889 52888\nf 52457 52458 52890\nf 52457 52890 52889\nf 52458 52459 52891\nf 52458 52891 52890\nf 52459 52460 52892\nf 52459 52892 52891\nf 52460 52461 52893\nf 52460 52893 52892\nf 52461 52462 52894\nf 52461 52894 52893\nf 52462 52463 52895\nf 52462 52895 52894\nf 52463 52466 52896\nf 52463 52896 52895\nf 52464 52897 52465\nf 52465 52897 52898\nf 52465 52898 52902\nf 52465 52902 52469\nf 52466 52467 52900\nf 52466 52899 52896\nf 52466 52900 52899\nf 52467 52468 52900\nf 52468 52471 52901\nf 52468 52901 52900\nf 52469 52902 52470\nf 52470 52902 52903\nf 52470 52903 52907\nf 52470 52907 52474\nf 52471 52472 52905\nf 52471 52904 52901\nf 52471 52905 52904\nf 52472 52473 52905\nf 52473 52475 52906\nf 52473 52906 52905\nf 52474 52907 52477\nf 52475 52476 52909\nf 52475 52908 52906\nf 52475 52909 52908\nf 52476 52478 52909\nf 52477 52907 52910\nf 52477 52910 52480\nf 52478 52479 52913\nf 52478 52912 52909\nf 52478 52913 52912\nf 52479 52483 52913\nf 52480 52910 52914\nf 52480 52914 52915\nf 52480 52915 52481\nf 52481 52915 52916\nf 52481 52916 52482\nf 52482 52916 52484\nf 52483 52490 52917\nf 52483 52917 52913\nf 52484 52916 52919\nf 52484 52919 52920\nf 52484 52920 52485\nf 52485 52920 52921\nf 52485 52921 52486\nf 52486 52921 52922\nf 52486 52922 52487\nf 52487 52922 52923\nf 52487 52923 52488\nf 52488 52923 52493\nf 52489 52502 52935\nf 52489 52925 52491\nf 52489 52935 52925\nf 52490 52491 52492\nf 52490 52492 52917\nf 52491 52924 52492\nf 52491 52925 52924\nf 52492 52918 52917\nf 52492 52924 52918\nf 52493 52923 52926\nf 52493 52926 52927\nf 52493 52927 52494\nf 52494 52927 52928\nf 52494 52928 52495\nf 52495 52928 52929\nf 52495 52929 52496\nf 52496 52929 52930\nf 52496 52930 52497\nf 52497 52930 52931\nf 52497 52931 52498\nf 52498 52931 52932\nf 52498 52932 52499\nf 52499 52932 52933\nf 52499 52933 52500\nf 52500 52933 52934\nf 52500 52934 52501\nf 52501 52934 52936\nf 52501 52936 52503\nf 52502 52503 52935\nf 52503 52936 52935\nf 52504 52505 52937\nf 52504 52937 52945\nf 52504 52945 52512\nf 52505 52506 52938\nf 52505 52938 52937\nf 52506 52507 52939\nf 52506 52939 52938\nf 52507 52508 52940\nf 52507 52940 52939\nf 52508 52513 52941\nf 52508 52941 52940\nf 52509 52510 52942\nf 52509 52942 52948\nf 52509 52948 52514\nf 52510 52511 52943\nf 52510 52943 52942\nf 52511 52515 52944\nf 52511 52944 52943\nf 52512 52945 52516\nf 52513 52517 52951\nf 52513 52946 52941\nf 52513 52951 52946\nf 52514 52948 52518\nf 52515 52520 52954\nf 52515 52949 52944\nf 52515 52954 52949\nf 52516 52945 52950\nf 52516 52950 52522\nf 52517 52523 52957\nf 52517 52957 52951\nf 52518 52948 52952\nf 52518 52952 52519\nf 52519 52952 52953\nf 52519 52953 52959\nf 52519 52959 52525\nf 52520 52521 52955\nf 52520 52955 52954\nf 52521 52526 52955\nf 52522 52950 52956\nf 52522 52956 52527\nf 52523 52524 52958\nf 52523 52958 52957\nf 52524 52528 52958\nf 52525 52959 52529\nf 52526 52530 52964\nf 52526 52960 52955\nf 52526 52964 52960\nf 52527 52956 52961\nf 52527 52961 52531\nf 52528 52533 52967\nf 52528 52962 52958\nf 52528 52967 52962\nf 52529 52959 52963\nf 52529 52963 52534\nf 52530 52535 52969\nf 52530 52969 52964\nf 52531 52961 52965\nf 52531 52965 52532\nf 52532 52965 52966\nf 52532 52966 52970\nf 52532 52970 52536\nf 52533 52537 52971\nf 52533 52971 52967\nf 52534 52963 52968\nf 52534 52968 52538\nf 52535 52539 52973\nf 52535 52973 52969\nf 52536 52970 52540\nf 52537 52541 52975\nf 52537 52975 52971\nf 52538 52968 52972\nf 52538 52972 52542\nf 52539 52543 52977\nf 52539 52977 52973\nf 52540 52970 52974\nf 52540 52974 52544\nf 52541 52545 52979\nf 52541 52979 52975\nf 52542 52972 52976\nf 52542 52976 52546\nf 52543 52547 52981\nf 52543 52981 52977\nf 52544 52974 52978\nf 52544 52978 52548\nf 52545 52549 52983\nf 52545 52983 52979\nf 52546 52976 52980\nf 52546 52980 52550\nf 52547 52551 52985\nf 52547 52985 52981\nf 52548 52978 52982\nf 52548 52982 52553\nf 52549 52554 52988\nf 52549 52988 52983\nf 52550 52980 52984\nf 52550 52984 52555\nf 52551 52552 52986\nf 52551 52986 52985\nf 52552 52556 52986\nf 52553 52982 52987\nf 52553 52987 52561\nf 52554 52563 52997\nf 52554 52997 52988\nf 52555 52984 52989\nf 52555 52989 52564\nf 52556 52557 52991\nf 52556 52990 52986\nf 52556 52991 52990\nf 52557 52558 52991\nf 52558 52559 52992\nf 52558 52992 52991\nf 52559 52565 52993\nf 52559 52993 52992\nf 52560 52562 52994\nf 52560 52994 53083\nf 52560 53083 52649\nf 52561 52987 52995\nf 52561 52995 52562\nf 52562 52995 52996\nf 52562 52996 52994\nf 52563 52651 53086\nf 52563 53086 52997\nf 52564 52989 52998\nf 52564 52998 52652\nf 52565 52566 53000\nf 52565 52999 52993\nf 52565 53000 52999\nf 52566 52567 53000\nf 52567 52568 53001\nf 52567 53001 53000\nf 52568 52569 53002\nf 52568 53002 53001\nf 52569 52570 53003\nf 52569 53003 53002\nf 52570 52571 53004\nf 52570 53004 53003\nf 52571 52572 53005\nf 52571 53005 53004\nf 52572 52573 53006\nf 52572 53006 53005\nf 52573 52574 53007\nf 52573 53007 53006\nf 52574 52575 53008\nf 52574 53008 53007\nf 52575 52576 53009\nf 52575 53009 53008\nf 52576 52577 53010\nf 52576 53010 53009\nf 52577 52578 53011\nf 52577 53011 53010\nf 52578 52579 53012\nf 52578 53012 53011\nf 52579 52580 53013\nf 52579 53013 53012\nf 52580 52581 53014\nf 52580 53014 53013\nf 52581 52582 53015\nf 52581 53015 53014\nf 52582 52583 53016\nf 52582 53016 53015\nf 52583 52584 53017\nf 52583 53017 53016\nf 52584 52585 53018\nf 52584 53018 53017\nf 52585 52586 53019\nf 52585 53019 53018\nf 52586 52587 53020\nf 52586 53020 53019\nf 52587 52588 53021\nf 52587 53021 53020\nf 52588 52589 53022\nf 52588 53022 53021\nf 52589 52590 53023\nf 52589 53023 53022\nf 52590 52591 53024\nf 52590 53024 53023\nf 52591 52592 53025\nf 52591 53025 53024\nf 52592 52593 53026\nf 52592 53026 53025\nf 52593 52594 53027\nf 52593 53027 53026\nf 52594 52595 53028\nf 52594 53028 53027\nf 52595 52596 53029\nf 52595 53029 53028\nf 52596 52597 53030\nf 52596 53030 53029\nf 52597 52598 53031\nf 52597 53031 53030\nf 52598 52599 53032\nf 52598 53032 53031\nf 52599 52600 53033\nf 52599 53033 53032\nf 52600 52601 53034\nf 52600 53034 53033\nf 52601 52602 53035\nf 52601 53035 53034\nf 52602 52603 53036\nf 52602 53036 53035\nf 52603 52604 53037\nf 52603 53037 53036\nf 52604 52605 53038\nf 52604 53038 53037\nf 52605 52606 53039\nf 52605 53039 53038\nf 52606 52607 53040\nf 52606 53040 53039\nf 52607 52608 53041\nf 52607 53041 53040\nf 52608 52609 53042\nf 52608 53042 53041\nf 52609 52610 53043\nf 52609 53043 53042\nf 52610 52611 53044\nf 52610 53044 53043\nf 52611 52612 53045\nf 52611 53045 53044\nf 52612 52613 53046\nf 52612 53046 53045\nf 52613 52614 53047\nf 52613 53047 53046\nf 52614 52615 53048\nf 52614 53048 53047\nf 52615 52616 53049\nf 52615 53049 53048\nf 52616 52617 53050\nf 52616 53050 53049\nf 52617 52618 53051\nf 52617 53051 53050\nf 52618 52619 53052\nf 52618 53052 53051\nf 52619 52620 53053\nf 52619 53053 53052\nf 52620 52621 53054\nf 52620 53054 53053\nf 52621 52622 53055\nf 52621 53055 53054\nf 52622 52623 53056\nf 52622 53056 53055\nf 52623 52624 53057\nf 52623 53057 53056\nf 52624 52625 53058\nf 52624 53058 53057\nf 52625 52626 53059\nf 52625 53059 53058\nf 52626 52627 53060\nf 52626 53060 53059\nf 52627 52628 53061\nf 52627 53061 53060\nf 52628 52629 53062\nf 52628 53062 53061\nf 52629 52630 53063\nf 52629 53063 53062\nf 52630 52631 53064\nf 52630 53064 53063\nf 52631 52632 53065\nf 52631 53065 53064\nf 52632 52633 53066\nf 52632 53066 53065\nf 52633 52634 53067\nf 52633 53067 53066\nf 52634 52635 53068\nf 52634 53068 53067\nf 52635 52636 53069\nf 52635 53069 53068\nf 52636 52637 53070\nf 52636 53070 53069\nf 52637 52638 53071\nf 52637 53071 53070\nf 52638 52639 53072\nf 52638 53072 53071\nf 52639 52640 53073\nf 52639 53073 53072\nf 52640 52641 53074\nf 52640 53074 53073\nf 52641 52642 53075\nf 52641 53075 53074\nf 52642 52643 53076\nf 52642 53076 53075\nf 52643 52644 53077\nf 52643 53077 53076\nf 52644 52645 53078\nf 52644 53078 53077\nf 52645 52646 53079\nf 52645 53079 53078\nf 52646 52647 53080\nf 52646 53080 53079\nf 52647 52648 53081\nf 52647 53081 53080\nf 52648 52650 53082\nf 52648 53082 53081\nf 52649 53083 52650\nf 52650 53083 53084\nf 52650 53084 53082\nf 52651 52653 53088\nf 52651 53088 53086\nf 52652 52998 53087\nf 52652 53087 52654\nf 52653 52656 53091\nf 52653 53091 53088\nf 52654 53087 53089\nf 52654 53089 53090\nf 52654 53090 52655\nf 52655 53090 52658\nf 52656 52657 53091\nf 52657 52659 53094\nf 52657 53092 53091\nf 52657 53094 53092\nf 52658 53090 53093\nf 52658 53093 52660\nf 52659 52662 53097\nf 52659 53097 53094\nf 52660 53093 53095\nf 52660 53095 52664\nf 52661 52669 53105\nf 52661 53096 53098\nf 52661 53098 52663\nf 52661 53105 53096\nf 52662 52663 53097\nf 52663 53098 53097\nf 52664 53095 53099\nf 52664 53099 53100\nf 52664 53100 52665\nf 52665 53100 52671\nf 52666 52760 52762\nf 52666 52762 53101\nf 52666 53101 53102\nf 52666 53102 53103\nf 52666 53103 52667\nf 52667 53103 53104\nf 52667 53104 52668\nf 52668 53104 53106\nf 52668 53106 52670\nf 52669 52670 53105\nf 52670 53106 53105\nf 52671 53100 53107\nf 52671 53107 53108\nf 52671 53108 52672\nf 52672 53108 53109\nf 52672 53109 52673\nf 52673 53109 53110\nf 52673 53110 52674\nf 52674 53110 52763\nf 52675 52766 53200\nf 52675 53111 53112\nf 52675 53112 52676\nf 52675 53200 53111\nf 52676 53112 53113\nf 52676 53113 52677\nf 52677 53113 53114\nf 52677 53114 52678\nf 52678 53114 53115\nf 52678 53115 52679\nf 52679 53115 53116\nf 52679 53116 52680\nf 52680 53116 53117\nf 52680 53117 52681\nf 52681 53117 53118\nf 52681 53118 52682\nf 52682 53118 53119\nf 52682 53119 52683\nf 52683 53119 53120\nf 52683 53120 52684\nf 52684 53120 53121\nf 52684 53121 52685\nf 52685 53121 53122\nf 52685 53122 52686\nf 52686 53122 53123\nf 52686 53123 52687\nf 52687 53123 53124\nf 52687 53124 52688\nf 52688 53124 53125\nf 52688 53125 52689\nf 52689 53125 53126\nf 52689 53126 52690\nf 52690 53126 53127\nf 52690 53127 52691\nf 52691 53127 53128\nf 52691 53128 52692\nf 52692 53128 53129\nf 52692 53129 52693\nf 52693 53129 53130\nf 52693 53130 52694\nf 52694 53130 53131\nf 52694 53131 52695\nf 52695 53131 53132\nf 52695 53132 52696\nf 52696 53132 53133\nf 52696 53133 52697\nf 52697 53133 53134\nf 52697 53134 52698\nf 52698 53134 53135\nf 52698 53135 52699\nf 52699 53135 53136\nf 52699 53136 52700\nf 52700 53136 53137\nf 52700 53137 52701\nf 52701 53137 53138\nf 52701 53138 52702\nf 52702 53138 53139\nf 52702 53139 52703\nf 52703 53139 53140\nf 52703 53140 52704\nf 52704 53140 53141\nf 52704 53141 52705\nf 52705 53141 53142\nf 52705 53142 52706\nf 52706 53142 53143\nf 52706 53143 52707\nf 52707 53143 53144\nf 52707 53144 52708\nf 52708 53144 53145\nf 52708 53145 52709\nf 52709 53145 53146\nf 52709 53146 52710\nf 52710 53146 53147\nf 52710 53147 52711\nf 52711 53147 53148\nf 52711 53148 52712\nf 52712 53148 53149\nf 52712 53149 52713\nf 52713 53149 53150\nf 52713 53150 52714\nf 52714 53150 53151\nf 52714 53151 52715\nf 52715 53151 53152\nf 52715 53152 52716\nf 52716 53152 53153\nf 52716 53153 52717\nf 52717 53153 53154\nf 52717 53154 52718\nf 52718 53154 53155\nf 52718 53155 52719\nf 52719 53155 53156\nf 52719 53156 52720\nf 52720 53156 53157\nf 52720 53157 52721\nf 52721 53157 53158\nf 52721 53158 52722\nf 52722 53158 53159\nf 52722 53159 52723\nf 52723 53159 53160\nf 52723 53160 52724\nf 52724 53160 53161\nf 52724 53161 52725\nf 52725 53161 53162\nf 52725 53162 52726\nf 52726 53162 53163\nf 52726 53163 52727\nf 52727 53163 53164\nf 52727 53164 52728\nf 52728 53164 53165\nf 52728 53165 52729\nf 52729 53165 53166\nf 52729 53166 52730\nf 52730 53166 53167\nf 52730 53167 52731\nf 52731 53167 53168\nf 52731 53168 52732\nf 52732 53168 53169\nf 52732 53169 52733\nf 52733 53169 53170\nf 52733 53170 52734\nf 52734 53170 53171\nf 52734 53171 52735\nf 52735 53171 53172\nf 52735 53172 52736\nf 52736 53172 53173\nf 52736 53173 52737\nf 52737 53173 53174\nf 52737 53174 52738\nf 52738 53174 53175\nf 52738 53175 52739\nf 52739 53175 53176\nf 52739 53176 52740\nf 52740 53176 53177\nf 52740 53177 52741\nf 52741 53177 53178\nf 52741 53178 52742\nf 52742 53178 53179\nf 52742 53179 52743\nf 52743 53179 53180\nf 52743 53180 52744\nf 52744 53180 53181\nf 52744 53181 52745\nf 52745 53181 53182\nf 52745 53182 52746\nf 52746 53182 53183\nf 52746 53183 52747\nf 52747 53183 53184\nf 52747 53184 52748\nf 52748 53184 53185\nf 52748 53185 52749\nf 52749 53185 53186\nf 52749 53186 52750\nf 52750 53186 53187\nf 52750 53187 52751\nf 52751 53187 53188\nf 52751 53188 52752\nf 52752 53188 53189\nf 52752 53189 52753\nf 52753 53189 53190\nf 52753 53190 52754\nf 52754 53190 53191\nf 52754 53191 52755\nf 52755 53191 53192\nf 52755 53192 52756\nf 52756 53192 53193\nf 52756 53193 52757\nf 52757 53193 53194\nf 52757 53194 52758\nf 52758 53194 53196\nf 52758 53196 52759\nf 52759 53196 52761\nf 52760 52761 52762\nf 52761 53195 52762\nf 52761 53196 53195\nf 52762 53195 53101\nf 52763 53110 53197\nf 52763 53197 53198\nf 52763 53198 52764\nf 52764 53198 52768\nf 52765 52769 53203\nf 52765 53199 53201\nf 52765 53201 52767\nf 52765 53203 53199\nf 52766 52767 53200\nf 52767 53201 53200\nf 52768 53198 53202\nf 52768 53202 53204\nf 52768 53204 52770\nf 52769 52770 53203\nf 52770 53204 53203\nf 52771 52772 53206\nf 52771 53206 53210\nf 52771 53210 52775\nf 52772 52773 53207\nf 52772 53207 53206\nf 52773 52774 53208\nf 52773 53208 53207\nf 52774 52777 53209\nf 52774 53209 53208\nf 52775 53210 52776\nf 52776 53210 53211\nf 52776 53211 53213\nf 52776 53213 52778\nf 52777 52779 53214\nf 52777 53212 53209\nf 52777 53214 53212\nf 52778 53213 52781\nf 52779 52780 53215\nf 52779 53215 53214\nf 52780 52783 53215\nf 52781 53213 53216\nf 52781 53216 52782\nf 52782 53216 53217\nf 52782 53217 53219\nf 52782 53219 52784\nf 52783 52785 53220\nf 52783 53218 53215\nf 52783 53220 53218\nf 52784 53219 52786\nf 52785 52787 53222\nf 52785 53222 53220\nf 52786 53219 53221\nf 52786 53221 52788\nf 52787 52789 53224\nf 52787 53224 53222\nf 52788 53221 53223\nf 52788 53223 52790\nf 52789 52791 53226\nf 52789 53226 53224\nf 52790 53223 53225\nf 52790 53225 52793\nf 52791 52792 52795\nf 52791 52795 53228\nf 52791 53228 53226\nf 52792 52794 52795\nf 52793 53225 53227\nf 52793 53227 52796\nf 52794 52797 53231\nf 52794 53229 52795\nf 52794 53231 53229\nf 52795 53229 53228\nf 52796 53227 53230\nf 52796 53230 52798\nf 52797 52799 53233\nf 52797 53233 53231\nf 52798 53230 53232\nf 52798 53232 52800\nf 52799 52801 53235\nf 52799 53235 53233\nf 52800 53232 53234\nf 52800 53234 52802\nf 52801 52803 53235\nf 52802 53234 53237\nf 52802 53237 52806\nf 52803 52804 52805\nf 52803 52805 53235\nf 52804 52807 53238\nf 52804 53238 52805\nf 52805 53236 53235\nf 52805 53238 53236\nf 52806 53237 53239\nf 52806 53239 52808\nf 52807 52811 53243\nf 52807 53241 53238\nf 52807 53243 53241\nf 52808 52810 52809\nf 52808 53239 53240\nf 52808 53240 52810\nf 52809 52810 52812\nf 52810 53240 53242\nf 52810 53242 52812\nf 52811 52813 53245\nf 52811 53245 53243\nf 52812 53242 53244\nf 52812 53244 52815\nf 52813 52814 53245\nf 52814 52817 53249\nf 52814 53246 53245\nf 52814 53249 53246\nf 52815 53244 53247\nf 52815 53247 53248\nf 52815 53248 52816\nf 52816 53248 52818\nf 52817 52819 53251\nf 52817 53251 53249\nf 52818 53248 53250\nf 52818 53250 52821\nf 52819 52820 53251\nf 52820 52823 53257\nf 52820 53252 53251\nf 52820 53257 53252\nf 52821 53250 53254\nf 52821 53254 53255\nf 52821 53255 52822\nf 52822 53255 53256\nf 52822 53256 52825\nf 52823 52824 53257\nf 52824 52826 52828\nf 52824 52828 53256\nf 52824 53256 53258\nf 52824 53258 53257\nf 52825 52828 52827\nf 52825 53256 52828\nf 52826 52827 52828\nf 52829 52830 52835\nf 52829 52834 52832\nf 52829 52835 52834\nf 52830 52831 53259\nf 52830 53259 53262\nf 52830 53262 52835\nf 52831 52836 53259\nf 52832 52834 52833\nf 52833 52834 53261\nf 52833 53260 53266\nf 52833 53261 53260\nf 52833 53266 52838\nf 52834 52835 53261\nf 52835 53262 53263\nf 52835 53263 53261\nf 52836 52837 52840\nf 52836 52840 53268\nf 52836 53264 53259\nf 52836 53268 53264\nf 52837 52839 52840\nf 52838 53266 52841\nf 52839 52842 53271\nf 52839 53269 52840\nf 52839 53271 53269\nf 52840 53269 53268\nf 52841 53266 53270\nf 52841 53270 52843\nf 52842 52844 53273\nf 52842 53273 53271\nf 52843 53270 53272\nf 52843 53272 52845\nf 52844 52846 53275\nf 52844 53275 53273\nf 52845 53272 53274\nf 52845 53274 52847\nf 52846 52848 53277\nf 52846 53277 53275\nf 52847 53274 53276\nf 52847 53276 52849\nf 52848 52851 53279\nf 52848 53279 53277\nf 52849 53276 53278\nf 52849 53278 53280\nf 52849 53280 52850\nf 52850 52853 52852\nf 52850 53280 52853\nf 52851 52854 53282\nf 52851 53282 53279\nf 52852 52853 53283\nf 52852 53283 52855\nf 52853 53280 53281\nf 52853 53281 53283\nf 52854 52856 53284\nf 52854 53284 53282\nf 52855 53283 52857\nf 52856 52858 53286\nf 52856 53286 53284\nf 52857 53283 53285\nf 52857 53285 52859\nf 52858 52860 53288\nf 52858 53288 53286\nf 52859 53285 53287\nf 52859 53287 52861\nf 52860 52862 53291\nf 52860 53291 53288\nf 52861 53287 53289\nf 52861 53289 52863\nf 52862 52864 53294\nf 52862 53294 53291\nf 52863 53289 53292\nf 52863 53292 52865\nf 52864 52866 53296\nf 52864 53296 53294\nf 52865 53292 53295\nf 52865 53295 52868\nf 52866 52867 53296\nf 52867 52869 53299\nf 52867 53297 53296\nf 52867 53299 53297\nf 52868 53295 53298\nf 52868 53298 52870\nf 52869 52871 53301\nf 52869 53301 53299\nf 52870 53298 53300\nf 52870 53300 52872\nf 52871 52873 53303\nf 52871 53303 53301\nf 52872 53300 53302\nf 52872 53302 52874\nf 52873 52875 53305\nf 52873 53305 53303\nf 52874 53302 53304\nf 52874 53304 52876\nf 52875 52877 53305\nf 52876 53304 53307\nf 52876 53307 52880\nf 52877 52878 52879\nf 52877 52879 53305\nf 52878 52881 53308\nf 52878 53308 52879\nf 52879 53306 53305\nf 52879 53308 53306\nf 52880 53307 53309\nf 52880 53309 52883\nf 52881 52882 53310\nf 52881 53310 53308\nf 52882 52886 53316\nf 52882 53311 53310\nf 52882 53316 53311\nf 52883 53309 53312\nf 52883 53312 53313\nf 52883 53313 52884\nf 52884 53313 53315\nf 52884 53315 52885\nf 52885 53315 53317\nf 52885 53317 52887\nf 52886 52887 53316\nf 52887 53317 53316\nf 52888 52889 53319\nf 52888 53319 53328\nf 52888 53328 52897\nf 52889 52890 53320\nf 52889 53320 53319\nf 52890 52891 53321\nf 52890 53321 53320\nf 52891 52892 53322\nf 52891 53322 53321\nf 52892 52893 53323\nf 52892 53323 53322\nf 52893 52894 53324\nf 52893 53324 53323\nf 52894 52895 53325\nf 52894 53325 53324\nf 52895 52896 53326\nf 52895 53326 53325\nf 52896 52899 53327\nf 52896 53327 53326\nf 52897 53328 52898\nf 52898 53328 53329\nf 52898 53329 53333\nf 52898 53333 52902\nf 52899 52900 53331\nf 52899 53330 53327\nf 52899 53331 53330\nf 52900 52901 53331\nf 52901 52904 53332\nf 52901 53332 53331\nf 52902 53333 52903\nf 52903 53333 53334\nf 52903 53334 53338\nf 52903 53338 52907\nf 52904 52905 53336\nf 52904 53335 53332\nf 52904 53336 53335\nf 52905 52906 53336\nf 52906 52908 53337\nf 52906 53337 53336\nf 52907 53338 52910\nf 52908 52909 53341\nf 52908 53340 53337\nf 52908 53341 53340\nf 52909 52912 53341\nf 52910 52911 53343\nf 52910 53338 52911\nf 52910 53343 53346\nf 52910 53346 52914\nf 52911 53338 53339\nf 52911 53339 53342\nf 52911 53342 53343\nf 52912 52913 53345\nf 52912 53344 53341\nf 52912 53345 53344\nf 52913 52917 53345\nf 52914 53346 53347\nf 52914 53347 52915\nf 52915 53347 53348\nf 52915 53348 52916\nf 52916 53348 52919\nf 52917 52918 53349\nf 52917 53349 53345\nf 52918 52924 53358\nf 52918 53350 53349\nf 52918 53358 53350\nf 52919 53348 53352\nf 52919 53352 53354\nf 52919 53354 52920\nf 52920 53354 53355\nf 52920 53355 52921\nf 52921 53355 53356\nf 52921 53356 52922\nf 52922 53356 53357\nf 52922 53357 52923\nf 52923 53357 52926\nf 52924 52925 53358\nf 52925 52935 53370\nf 52925 53359 53358\nf 52925 53370 53359\nf 52926 53357 53360\nf 52926 53360 53362\nf 52926 53362 52927\nf 52927 53362 53363\nf 52927 53363 52928\nf 52928 53363 53364\nf 52928 53364 52929\nf 52929 53364 53365\nf 52929 53365 52930\nf 52930 53365 53366\nf 52930 53366 52931\nf 52931 53366 53367\nf 52931 53367 52932\nf 52932 53367 53368\nf 52932 53368 52933\nf 52933 53368 53369\nf 52933 53369 52934\nf 52934 53369 53371\nf 52934 53371 52936\nf 52935 52936 53370\nf 52936 53371 53370\nf 52937 52938 53373\nf 52937 53373 53380\nf 52937 53380 52945\nf 52938 52939 53374\nf 52938 53374 53373\nf 52939 52940 53375\nf 52939 53375 53374\nf 52940 52941 53376\nf 52940 53376 53375\nf 52941 52946 52947\nf 52941 52947 53376\nf 52942 52943 53377\nf 52942 53377 53383\nf 52942 53383 52948\nf 52943 52944 53378\nf 52943 53378 53377\nf 52944 52949 53379\nf 52944 53379 53378\nf 52945 53380 52950\nf 52946 52951 53386\nf 52946 53382 52947\nf 52946 53386 53382\nf 52947 53381 53376\nf 52947 53382 53381\nf 52948 53383 52952\nf 52949 52954 53389\nf 52949 53384 53379\nf 52949 53389 53384\nf 52950 53380 53385\nf 52950 53385 52956\nf 52951 52957 53392\nf 52951 53392 53386\nf 52952 53383 53387\nf 52952 53387 52953\nf 52953 53387 53388\nf 52953 53388 53394\nf 52953 53394 52959\nf 52954 52955 53390\nf 52954 53390 53389\nf 52955 52960 53390\nf 52956 53385 53391\nf 52956 53391 52961\nf 52957 52958 53393\nf 52957 53393 53392\nf 52958 52962 53393\nf 52959 53394 52963\nf 52960 52964 53399\nf 52960 53395 53390\nf 52960 53399 53395\nf 52961 53391 53396\nf 52961 53396 52965\nf 52962 52967 53402\nf 52962 53397 53393\nf 52962 53402 53397\nf 52963 53394 53398\nf 52963 53398 52968\nf 52964 52969 53404\nf 52964 53404 53399\nf 52965 53396 53400\nf 52965 53400 52966\nf 52966 53400 53401\nf 52966 53401 53405\nf 52966 53405 52970\nf 52967 52971 53406\nf 52967 53406 53402\nf 52968 53398 53403\nf 52968 53403 52972\nf 52969 52973 53408\nf 52969 53408 53404\nf 52970 53405 52974\nf 52971 52975 53410\nf 52971 53410 53406\nf 52972 53403 53407\nf 52972 53407 52976\nf 52973 52977 53412\nf 52973 53412 53408\nf 52974 53405 53409\nf 52974 53409 52978\nf 52975 52979 53414\nf 52975 53414 53410\nf 52976 53407 53411\nf 52976 53411 52980\nf 52977 52981 53416\nf 52977 53416 53412\nf 52978 53409 53413\nf 52978 53413 52982\nf 52979 52983 53418\nf 52979 53418 53414\nf 52980 53411 53415\nf 52980 53415 52984\nf 52981 52985 53420\nf 52981 53420 53416\nf 52982 53413 53417\nf 52982 53417 52987\nf 52983 52988 53423\nf 52983 53423 53418\nf 52984 53415 53419\nf 52984 53419 52989\nf 52985 52986 53421\nf 52985 53421 53420\nf 52986 52990 53421\nf 52987 53417 53422\nf 52987 53422 52995\nf 52988 52997 53431\nf 52988 53431 53423\nf 52989 53419 53424\nf 52989 53424 52998\nf 52990 52991 53426\nf 52990 53425 53421\nf 52990 53426 53425\nf 52991 52992 53426\nf 52992 52993 53427\nf 52992 53427 53426\nf 52993 52999 53428\nf 52993 53428 53427\nf 52994 52996 53430\nf 52994 53085 53083\nf 52994 53430 53518\nf 52994 53518 53085\nf 52995 53422 53429\nf 52995 53429 52996\nf 52996 53429 53430\nf 52997 53086 53520\nf 52997 53520 53431\nf 52998 53424 53432\nf 52998 53432 53087\nf 52999 53000 53434\nf 52999 53433 53428\nf 52999 53434 53433\nf 53000 53001 53434\nf 53001 53002 53435\nf 53001 53435 53434\nf 53002 53003 53436\nf 53002 53436 53435\nf 53003 53004 53437\nf 53003 53437 53436\nf 53004 53005 53438\nf 53004 53438 53437\nf 53005 53006 53439\nf 53005 53439 53438\nf 53006 53007 53440\nf 53006 53440 53439\nf 53007 53008 53441\nf 53007 53441 53440\nf 53008 53009 53442\nf 53008 53442 53441\nf 53009 53010 53443\nf 53009 53443 53442\nf 53010 53011 53444\nf 53010 53444 53443\nf 53011 53012 53445\nf 53011 53445 53444\nf 53012 53013 53446\nf 53012 53446 53445\nf 53013 53014 53447\nf 53013 53447 53446\nf 53014 53015 53448\nf 53014 53448 53447\nf 53015 53016 53449\nf 53015 53449 53448\nf 53016 53017 53450\nf 53016 53450 53449\nf 53017 53018 53451\nf 53017 53451 53450\nf 53018 53019 53452\nf 53018 53452 53451\nf 53019 53020 53453\nf 53019 53453 53452\nf 53020 53021 53454\nf 53020 53454 53453\nf 53021 53022 53455\nf 53021 53455 53454\nf 53022 53023 53456\nf 53022 53456 53455\nf 53023 53024 53457\nf 53023 53457 53456\nf 53024 53025 53458\nf 53024 53458 53457\nf 53025 53026 53459\nf 53025 53459 53458\nf 53026 53027 53460\nf 53026 53460 53459\nf 53027 53028 53461\nf 53027 53461 53460\nf 53028 53029 53462\nf 53028 53462 53461\nf 53029 53030 53463\nf 53029 53463 53462\nf 53030 53031 53464\nf 53030 53464 53463\nf 53031 53032 53465\nf 53031 53465 53464\nf 53032 53033 53466\nf 53032 53466 53465\nf 53033 53034 53467\nf 53033 53467 53466\nf 53034 53035 53468\nf 53034 53468 53467\nf 53035 53036 53469\nf 53035 53469 53468\nf 53036 53037 53470\nf 53036 53470 53469\nf 53037 53038 53471\nf 53037 53471 53470\nf 53038 53039 53472\nf 53038 53472 53471\nf 53039 53040 53473\nf 53039 53473 53472\nf 53040 53041 53474\nf 53040 53474 53473\nf 53041 53042 53475\nf 53041 53475 53474\nf 53042 53043 53476\nf 53042 53476 53475\nf 53043 53044 53477\nf 53043 53477 53476\nf 53044 53045 53478\nf 53044 53478 53477\nf 53045 53046 53479\nf 53045 53479 53478\nf 53046 53047 53480\nf 53046 53480 53479\nf 53047 53048 53481\nf 53047 53481 53480\nf 53048 53049 53482\nf 53048 53482 53481\nf 53049 53050 53483\nf 53049 53483 53482\nf 53050 53051 53484\nf 53050 53484 53483\nf 53051 53052 53485\nf 53051 53485 53484\nf 53052 53053 53486\nf 53052 53486 53485\nf 53053 53054 53487\nf 53053 53487 53486\nf 53054 53055 53488\nf 53054 53488 53487\nf 53055 53056 53489\nf 53055 53489 53488\nf 53056 53057 53490\nf 53056 53490 53489\nf 53057 53058 53491\nf 53057 53491 53490\nf 53058 53059 53492\nf 53058 53492 53491\nf 53059 53060 53493\nf 53059 53493 53492\nf 53060 53061 53494\nf 53060 53494 53493\nf 53061 53062 53495\nf 53061 53495 53494\nf 53062 53063 53496\nf 53062 53496 53495\nf 53063 53064 53497\nf 53063 53497 53496\nf 53064 53065 53498\nf 53064 53498 53497\nf 53065 53066 53499\nf 53065 53499 53498\nf 53066 53067 53500\nf 53066 53500 53499\nf 53067 53068 53501\nf 53067 53501 53500\nf 53068 53069 53502\nf 53068 53502 53501\nf 53069 53070 53503\nf 53069 53503 53502\nf 53070 53071 53504\nf 53070 53504 53503\nf 53071 53072 53505\nf 53071 53505 53504\nf 53072 53073 53506\nf 53072 53506 53505\nf 53073 53074 53507\nf 53073 53507 53506\nf 53074 53075 53508\nf 53074 53508 53507\nf 53075 53076 53509\nf 53075 53509 53508\nf 53076 53077 53510\nf 53076 53510 53509\nf 53077 53078 53511\nf 53077 53511 53510\nf 53078 53079 53512\nf 53078 53512 53511\nf 53079 53080 53513\nf 53079 53513 53512\nf 53080 53081 53514\nf 53080 53514 53513\nf 53081 53082 53515\nf 53081 53515 53514\nf 53082 53084 53516\nf 53082 53516 53515\nf 53083 53085 53084\nf 53084 53085 53519\nf 53084 53517 53516\nf 53084 53519 53517\nf 53085 53518 53519\nf 53086 53088 53522\nf 53086 53522 53520\nf 53087 53432 53521\nf 53087 53521 53089\nf 53088 53091 53525\nf 53088 53525 53522\nf 53089 53521 53523\nf 53089 53523 53524\nf 53089 53524 53090\nf 53090 53524 53093\nf 53091 53092 53525\nf 53092 53094 53528\nf 53092 53526 53525\nf 53092 53528 53526\nf 53093 53524 53527\nf 53093 53527 53095\nf 53094 53097 53531\nf 53094 53531 53528\nf 53095 53527 53529\nf 53095 53529 53099\nf 53096 53105 53539\nf 53096 53530 53532\nf 53096 53532 53098\nf 53096 53539 53530\nf 53097 53098 53531\nf 53098 53532 53531\nf 53099 53529 53533\nf 53099 53533 53534\nf 53099 53534 53100\nf 53100 53534 53107\nf 53101 53195 53629\nf 53101 53535 53536\nf 53101 53536 53102\nf 53101 53629 53535\nf 53102 53536 53537\nf 53102 53537 53103\nf 53103 53537 53538\nf 53103 53538 53104\nf 53104 53538 53540\nf 53104 53540 53106\nf 53105 53106 53539\nf 53106 53540 53539\nf 53107 53534 53541\nf 53107 53541 53542\nf 53107 53542 53108\nf 53108 53542 53543\nf 53108 53543 53109\nf 53109 53543 53544\nf 53109 53544 53110\nf 53110 53544 53197\nf 53111 53200 53635\nf 53111 53545 53546\nf 53111 53546 53112\nf 53111 53635 53545\nf 53112 53546 53547\nf 53112 53547 53113\nf 53113 53547 53548\nf 53113 53548 53114\nf 53114 53548 53549\nf 53114 53549 53115\nf 53115 53549 53550\nf 53115 53550 53116\nf 53116 53550 53551\nf 53116 53551 53117\nf 53117 53551 53552\nf 53117 53552 53118\nf 53118 53552 53553\nf 53118 53553 53119\nf 53119 53553 53554\nf 53119 53554 53120\nf 53120 53554 53555\nf 53120 53555 53121\nf 53121 53555 53556\nf 53121 53556 53122\nf 53122 53556 53557\nf 53122 53557 53123\nf 53123 53557 53558\nf 53123 53558 53124\nf 53124 53558 53559\nf 53124 53559 53125\nf 53125 53559 53560\nf 53125 53560 53126\nf 53126 53560 53561\nf 53126 53561 53127\nf 53127 53561 53562\nf 53127 53562 53128\nf 53128 53562 53563\nf 53128 53563 53129\nf 53129 53563 53564\nf 53129 53564 53130\nf 53130 53564 53565\nf 53130 53565 53131\nf 53131 53565 53566\nf 53131 53566 53132\nf 53132 53566 53567\nf 53132 53567 53133\nf 53133 53567 53568\nf 53133 53568 53134\nf 53134 53568 53569\nf 53134 53569 53135\nf 53135 53569 53570\nf 53135 53570 53136\nf 53136 53570 53571\nf 53136 53571 53137\nf 53137 53571 53572\nf 53137 53572 53138\nf 53138 53572 53573\nf 53138 53573 53139\nf 53139 53573 53574\nf 53139 53574 53140\nf 53140 53574 53575\nf 53140 53575 53141\nf 53141 53575 53576\nf 53141 53576 53142\nf 53142 53576 53577\nf 53142 53577 53143\nf 53143 53577 53578\nf 53143 53578 53144\nf 53144 53578 53579\nf 53144 53579 53145\nf 53145 53579 53580\nf 53145 53580 53146\nf 53146 53580 53581\nf 53146 53581 53147\nf 53147 53581 53582\nf 53147 53582 53148\nf 53148 53582 53583\nf 53148 53583 53149\nf 53149 53583 53584\nf 53149 53584 53150\nf 53150 53584 53585\nf 53150 53585 53151\nf 53151 53585 53586\nf 53151 53586 53152\nf 53152 53586 53587\nf 53152 53587 53153\nf 53153 53587 53588\nf 53153 53588 53154\nf 53154 53588 53589\nf 53154 53589 53155\nf 53155 53589 53590\nf 53155 53590 53156\nf 53156 53590 53591\nf 53156 53591 53157\nf 53157 53591 53592\nf 53157 53592 53158\nf 53158 53592 53593\nf 53158 53593 53159\nf 53159 53593 53594\nf 53159 53594 53160\nf 53160 53594 53595\nf 53160 53595 53161\nf 53161 53595 53596\nf 53161 53596 53162\nf 53162 53596 53597\nf 53162 53597 53163\nf 53163 53597 53598\nf 53163 53598 53164\nf 53164 53598 53599\nf 53164 53599 53165\nf 53165 53599 53600\nf 53165 53600 53166\nf 53166 53600 53601\nf 53166 53601 53167\nf 53167 53601 53602\nf 53167 53602 53168\nf 53168 53602 53603\nf 53168 53603 53169\nf 53169 53603 53604\nf 53169 53604 53170\nf 53170 53604 53605\nf 53170 53605 53171\nf 53171 53605 53606\nf 53171 53606 53172\nf 53172 53606 53607\nf 53172 53607 53173\nf 53173 53607 53608\nf 53173 53608 53174\nf 53174 53608 53609\nf 53174 53609 53175\nf 53175 53609 53610\nf 53175 53610 53176\nf 53176 53610 53611\nf 53176 53611 53177\nf 53177 53611 53612\nf 53177 53612 53178\nf 53178 53612 53613\nf 53178 53613 53179\nf 53179 53613 53614\nf 53179 53614 53180\nf 53180 53614 53615\nf 53180 53615 53181\nf 53181 53615 53616\nf 53181 53616 53182\nf 53182 53616 53617\nf 53182 53617 53183\nf 53183 53617 53618\nf 53183 53618 53184\nf 53184 53618 53619\nf 53184 53619 53185\nf 53185 53619 53620\nf 53185 53620 53186\nf 53186 53620 53621\nf 53186 53621 53187\nf 53187 53621 53622\nf 53187 53622 53188\nf 53188 53622 53623\nf 53188 53623 53189\nf 53189 53623 53624\nf 53189 53624 53190\nf 53190 53624 53625\nf 53190 53625 53191\nf 53191 53625 53626\nf 53191 53626 53192\nf 53192 53626 53627\nf 53192 53627 53193\nf 53193 53627 53628\nf 53193 53628 53194\nf 53194 53628 53630\nf 53194 53630 53196\nf 53195 53196 53629\nf 53196 53630 53629\nf 53197 53544 53631\nf 53197 53631 53632\nf 53197 53632 53198\nf 53198 53632 53633\nf 53198 53633 53202\nf 53199 53203 53205\nf 53199 53205 53633\nf 53199 53633 53634\nf 53199 53634 53636\nf 53199 53636 53201\nf 53200 53201 53635\nf 53201 53636 53635\nf 53202 53205 53204\nf 53202 53633 53205\nf 53203 53204 53205\nf 53206 53207 53637\nf 53206 53637 53641\nf 53206 53641 53210\nf 53207 53208 53638\nf 53207 53638 53637\nf 53208 53209 53639\nf 53208 53639 53638\nf 53209 53212 53640\nf 53209 53640 53639\nf 53210 53641 53211\nf 53211 53641 53642\nf 53211 53642 53645\nf 53211 53645 53213\nf 53212 53214 53646\nf 53212 53644 53640\nf 53212 53646 53644\nf 53213 53645 53216\nf 53214 53215 53647\nf 53214 53647 53646\nf 53215 53218 53647\nf 53216 53645 53648\nf 53216 53648 53217\nf 53217 53648 53649\nf 53217 53649 53651\nf 53217 53651 53219\nf 53218 53220 53653\nf 53218 53650 53647\nf 53218 53653 53650\nf 53219 53651 53221\nf 53220 53222 53655\nf 53220 53655 53653\nf 53221 53651 53654\nf 53221 53654 53223\nf 53222 53224 53657\nf 53222 53657 53655\nf 53223 53654 53656\nf 53223 53656 53225\nf 53224 53226 53659\nf 53224 53659 53657\nf 53225 53656 53658\nf 53225 53658 53227\nf 53226 53228 53661\nf 53226 53661 53659\nf 53227 53658 53660\nf 53227 53660 53230\nf 53228 53229 53662\nf 53228 53662 53661\nf 53229 53231 53662\nf 53230 53660 53663\nf 53230 53663 53232\nf 53231 53233 53666\nf 53231 53664 53662\nf 53231 53666 53664\nf 53232 53663 53665\nf 53232 53665 53234\nf 53233 53235 53668\nf 53233 53668 53666\nf 53234 53665 53667\nf 53234 53667 53237\nf 53235 53236 53668\nf 53236 53238 53672\nf 53236 53669 53668\nf 53236 53672 53669\nf 53237 53667 53671\nf 53237 53671 53239\nf 53238 53241 53675\nf 53238 53675 53672\nf 53239 53671 53673\nf 53239 53673 53674\nf 53239 53674 53240\nf 53240 53674 53242\nf 53241 53243 53677\nf 53241 53677 53675\nf 53242 53674 53676\nf 53242 53676 53244\nf 53243 53245 53679\nf 53243 53679 53677\nf 53244 53676 53678\nf 53244 53678 53247\nf 53245 53246 53679\nf 53246 53249 53683\nf 53246 53680 53679\nf 53246 53683 53680\nf 53247 53678 53681\nf 53247 53681 53682\nf 53247 53682 53248\nf 53248 53682 53250\nf 53249 53251 53683\nf 53250 53682 53685\nf 53250 53685 53254\nf 53251 53252 53253\nf 53251 53253 53683\nf 53252 53257 53686\nf 53252 53686 53253\nf 53253 53684 53683\nf 53253 53686 53684\nf 53254 53685 53687\nf 53254 53687 53688\nf 53254 53688 53255\nf 53255 53688 53690\nf 53255 53690 53256\nf 53256 53690 53692\nf 53256 53692 53258\nf 53257 53258 53691\nf 53257 53691 53686\nf 53258 53692 53691\nf 53259 53264 53265\nf 53259 53265 53262\nf 53260 53261 53694\nf 53260 53267 53266\nf 53260 53694 53697\nf 53260 53697 53267\nf 53261 53263 53694\nf 53262 53265 53263\nf 53263 53265 53696\nf 53263 53695 53694\nf 53263 53696 53695\nf 53264 53268 53699\nf 53264 53696 53265\nf 53264 53699 53696\nf 53266 53267 53701\nf 53266 53701 53270\nf 53267 53697 53698\nf 53267 53698 53701\nf 53268 53269 53700\nf 53268 53700 53699\nf 53269 53271 53700\nf 53270 53701 53272\nf 53271 53273 53704\nf 53271 53702 53700\nf 53271 53704 53702\nf 53272 53701 53703\nf 53272 53703 53274\nf 53273 53275 53706\nf 53273 53706 53704\nf 53274 53703 53705\nf 53274 53705 53276\nf 53275 53277 53708\nf 53275 53708 53706\nf 53276 53705 53707\nf 53276 53707 53278\nf 53277 53279 53710\nf 53277 53710 53708\nf 53278 53707 53709\nf 53278 53709 53280\nf 53279 53282 53713\nf 53279 53713 53710\nf 53280 53709 53711\nf 53280 53711 53281\nf 53281 53711 53712\nf 53281 53712 53714\nf 53281 53714 53283\nf 53282 53284 53716\nf 53282 53716 53713\nf 53283 53714 53285\nf 53284 53286 53719\nf 53284 53719 53716\nf 53285 53714 53717\nf 53285 53717 53287\nf 53286 53288 53723\nf 53286 53723 53719\nf 53287 53717 53720\nf 53287 53720 53289\nf 53288 53291 53725\nf 53288 53725 53723\nf 53289 53290 53292\nf 53289 53720 53721\nf 53289 53721 53290\nf 53290 53293 53292\nf 53290 53721 53724\nf 53290 53724 53726\nf 53290 53726 53293\nf 53291 53294 53728\nf 53291 53728 53725\nf 53292 53293 53729\nf 53292 53729 53295\nf 53293 53726 53727\nf 53293 53727 53729\nf 53294 53296 53731\nf 53294 53731 53728\nf 53295 53729 53298\nf 53296 53297 53731\nf 53297 53299 53734\nf 53297 53732 53731\nf 53297 53734 53732\nf 53298 53729 53733\nf 53298 53733 53300\nf 53299 53301 53736\nf 53299 53736 53734\nf 53300 53733 53735\nf 53300 53735 53302\nf 53301 53303 53738\nf 53301 53738 53736\nf 53302 53735 53737\nf 53302 53737 53304\nf 53303 53305 53740\nf 53303 53740 53738\nf 53304 53737 53739\nf 53304 53739 53307\nf 53305 53306 53740\nf 53306 53308 53743\nf 53306 53741 53740\nf 53306 53743 53741\nf 53307 53739 53742\nf 53307 53742 53309\nf 53308 53310 53747\nf 53308 53747 53743\nf 53309 53742 53744\nf 53309 53744 53312\nf 53310 53311 53747\nf 53311 53316 53318\nf 53311 53318 53746\nf 53311 53746 53748\nf 53311 53748 53747\nf 53312 53314 53313\nf 53312 53744 53745\nf 53312 53745 53314\nf 53313 53314 53751\nf 53313 53751 53315\nf 53314 53745 53749\nf 53314 53749 53751\nf 53315 53751 53317\nf 53316 53317 53318\nf 53317 53750 53318\nf 53317 53751 53750\nf 53318 53750 53746\nf 53319 53320 53752\nf 53319 53752 53761\nf 53319 53761 53328\nf 53320 53321 53753\nf 53320 53753 53752\nf 53321 53322 53754\nf 53321 53754 53753\nf 53322 53323 53755\nf 53322 53755 53754\nf 53323 53324 53756\nf 53323 53756 53755\nf 53324 53325 53757\nf 53324 53757 53756\nf 53325 53326 53758\nf 53325 53758 53757\nf 53326 53327 53759\nf 53326 53759 53758\nf 53327 53330 53760\nf 53327 53760 53759\nf 53328 53761 53329\nf 53329 53761 53762\nf 53329 53762 53766\nf 53329 53766 53333\nf 53330 53331 53764\nf 53330 53763 53760\nf 53330 53764 53763\nf 53331 53332 53764\nf 53332 53335 53765\nf 53332 53765 53764\nf 53333 53766 53334\nf 53334 53766 53767\nf 53334 53767 53771\nf 53334 53771 53338\nf 53335 53336 53769\nf 53335 53768 53765\nf 53335 53769 53768\nf 53336 53337 53769\nf 53337 53340 53770\nf 53337 53770 53769\nf 53338 53771 53339\nf 53339 53771 53772\nf 53339 53772 53776\nf 53339 53776 53342\nf 53340 53341 53775\nf 53340 53773 53770\nf 53340 53775 53773\nf 53341 53344 53775\nf 53342 53776 53777\nf 53342 53777 53343\nf 53343 53777 53346\nf 53344 53345 53351\nf 53344 53351 53782\nf 53344 53778 53775\nf 53344 53782 53778\nf 53345 53349 53351\nf 53346 53777 53780\nf 53346 53780 53781\nf 53346 53781 53347\nf 53347 53781 53348\nf 53348 53353 53352\nf 53348 53781 53353\nf 53349 53350 53351\nf 53350 53358 53782\nf 53350 53782 53351\nf 53352 53353 53784\nf 53352 53784 53354\nf 53353 53781 53783\nf 53353 53783 53784\nf 53354 53784 53785\nf 53354 53785 53786\nf 53354 53786 53355\nf 53355 53786 53787\nf 53355 53787 53356\nf 53356 53787 53357\nf 53357 53361 53360\nf 53357 53787 53361\nf 53358 53359 53789\nf 53358 53789 53782\nf 53359 53370 53372\nf 53359 53372 53788\nf 53359 53788 53790\nf 53359 53790 53789\nf 53360 53361 53792\nf 53360 53792 53362\nf 53361 53787 53791\nf 53361 53791 53792\nf 53362 53792 53793\nf 53362 53793 53794\nf 53362 53794 53363\nf 53363 53794 53795\nf 53363 53795 53364\nf 53364 53795 53796\nf 53364 53796 53365\nf 53365 53796 53797\nf 53365 53797 53366\nf 53366 53797 53798\nf 53366 53798 53367\nf 53367 53798 53799\nf 53367 53799 53368\nf 53368 53799 53801\nf 53368 53801 53369\nf 53369 53801 53371\nf 53370 53371 53372\nf 53371 53800 53372\nf 53371 53801 53800\nf 53372 53800 53788\nf 53373 53374 53802\nf 53373 53802 53809\nf 53373 53809 53380\nf 53374 53375 53803\nf 53374 53803 53802\nf 53375 53376 53804\nf 53375 53804 53803\nf 53376 53381 53805\nf 53376 53805 53804\nf 53377 53378 53806\nf 53377 53806 53812\nf 53377 53812 53383\nf 53378 53379 53807\nf 53378 53807 53806\nf 53379 53384 53808\nf 53379 53808 53807\nf 53380 53809 53385\nf 53381 53382 53811\nf 53381 53810 53805\nf 53381 53811 53810\nf 53382 53386 53811\nf 53383 53812 53387\nf 53384 53389 53818\nf 53384 53813 53808\nf 53384 53818 53813\nf 53385 53809 53814\nf 53385 53814 53391\nf 53386 53392 53821\nf 53386 53815 53811\nf 53386 53821 53815\nf 53387 53812 53816\nf 53387 53816 53388\nf 53388 53816 53817\nf 53388 53817 53823\nf 53388 53823 53394\nf 53389 53390 53819\nf 53389 53819 53818\nf 53390 53395 53819\nf 53391 53814 53820\nf 53391 53820 53396\nf 53392 53393 53822\nf 53392 53822 53821\nf 53393 53397 53822\nf 53394 53823 53398\nf 53395 53399 53828\nf 53395 53824 53819\nf 53395 53828 53824\nf 53396 53820 53825\nf 53396 53825 53400\nf 53397 53402 53831\nf 53397 53826 53822\nf 53397 53831 53826\nf 53398 53823 53827\nf 53398 53827 53403\nf 53399 53404 53833\nf 53399 53833 53828\nf 53400 53825 53829\nf 53400 53829 53401\nf 53401 53829 53830\nf 53401 53830 53834\nf 53401 53834 53405\nf 53402 53406 53835\nf 53402 53835 53831\nf 53403 53827 53832\nf 53403 53832 53407\nf 53404 53408 53837\nf 53404 53837 53833\nf 53405 53834 53409\nf 53406 53410 53839\nf 53406 53839 53835\nf 53407 53832 53836\nf 53407 53836 53411\nf 53408 53412 53841\nf 53408 53841 53837\nf 53409 53834 53838\nf 53409 53838 53413\nf 53410 53414 53843\nf 53410 53843 53839\nf 53411 53836 53840\nf 53411 53840 53415\nf 53412 53416 53845\nf 53412 53845 53841\nf 53413 53838 53842\nf 53413 53842 53417\nf 53414 53418 53847\nf 53414 53847 53843\nf 53415 53840 53844\nf 53415 53844 53419\nf 53416 53420 53849\nf 53416 53849 53845\nf 53417 53842 53846\nf 53417 53846 53422\nf 53418 53423 53852\nf 53418 53852 53847\nf 53419 53844 53848\nf 53419 53848 53424\nf 53420 53421 53850\nf 53420 53850 53849\nf 53421 53425 53850\nf 53422 53846 53851\nf 53422 53851 53429\nf 53423 53431 53860\nf 53423 53860 53852\nf 53424 53848 53853\nf 53424 53853 53432\nf 53425 53426 53855\nf 53425 53854 53850\nf 53425 53855 53854\nf 53426 53427 53855\nf 53427 53428 53856\nf 53427 53856 53855\nf 53428 53433 53857\nf 53428 53857 53856\nf 53429 53851 53858\nf 53429 53858 53430\nf 53430 53858 53859\nf 53430 53859 53947\nf 53430 53947 53518\nf 53431 53520 53949\nf 53431 53949 53860\nf 53432 53853 53861\nf 53432 53861 53521\nf 53433 53434 53863\nf 53433 53862 53857\nf 53433 53863 53862\nf 53434 53435 53863\nf 53435 53436 53864\nf 53435 53864 53863\nf 53436 53437 53865\nf 53436 53865 53864\nf 53437 53438 53866\nf 53437 53866 53865\nf 53438 53439 53867\nf 53438 53867 53866\nf 53439 53440 53868\nf 53439 53868 53867\nf 53440 53441 53869\nf 53440 53869 53868\nf 53441 53442 53870\nf 53441 53870 53869\nf 53442 53443 53871\nf 53442 53871 53870\nf 53443 53444 53872\nf 53443 53872 53871\nf 53444 53445 53873\nf 53444 53873 53872\nf 53445 53446 53874\nf 53445 53874 53873\nf 53446 53447 53875\nf 53446 53875 53874\nf 53447 53448 53876\nf 53447 53876 53875\nf 53448 53449 53877\nf 53448 53877 53876\nf 53449 53450 53878\nf 53449 53878 53877\nf 53450 53451 53879\nf 53450 53879 53878\nf 53451 53452 53880\nf 53451 53880 53879\nf 53452 53453 53881\nf 53452 53881 53880\nf 53453 53454 53882\nf 53453 53882 53881\nf 53454 53455 53883\nf 53454 53883 53882\nf 53455 53456 53884\nf 53455 53884 53883\nf 53456 53457 53885\nf 53456 53885 53884\nf 53457 53458 53886\nf 53457 53886 53885\nf 53458 53459 53887\nf 53458 53887 53886\nf 53459 53460 53888\nf 53459 53888 53887\nf 53460 53461 53889\nf 53460 53889 53888\nf 53461 53462 53890\nf 53461 53890 53889\nf 53462 53463 53891\nf 53462 53891 53890\nf 53463 53464 53892\nf 53463 53892 53891\nf 53464 53465 53893\nf 53464 53893 53892\nf 53465 53466 53894\nf 53465 53894 53893\nf 53466 53467 53895\nf 53466 53895 53894\nf 53467 53468 53896\nf 53467 53896 53895\nf 53468 53469 53897\nf 53468 53897 53896\nf 53469 53470 53898\nf 53469 53898 53897\nf 53470 53471 53899\nf 53470 53899 53898\nf 53471 53472 53900\nf 53471 53900 53899\nf 53472 53473 53901\nf 53472 53901 53900\nf 53473 53474 53902\nf 53473 53902 53901\nf 53474 53475 53903\nf 53474 53903 53902\nf 53475 53476 53904\nf 53475 53904 53903\nf 53476 53477 53905\nf 53476 53905 53904\nf 53477 53478 53906\nf 53477 53906 53905\nf 53478 53479 53907\nf 53478 53907 53906\nf 53479 53480 53908\nf 53479 53908 53907\nf 53480 53481 53909\nf 53480 53909 53908\nf 53481 53482 53910\nf 53481 53910 53909\nf 53482 53483 53911\nf 53482 53911 53910\nf 53483 53484 53912\nf 53483 53912 53911\nf 53484 53485 53913\nf 53484 53913 53912\nf 53485 53486 53914\nf 53485 53914 53913\nf 53486 53487 53915\nf 53486 53915 53914\nf 53487 53488 53916\nf 53487 53916 53915\nf 53488 53489 53917\nf 53488 53917 53916\nf 53489 53490 53918\nf 53489 53918 53917\nf 53490 53491 53919\nf 53490 53919 53918\nf 53491 53492 53920\nf 53491 53920 53919\nf 53492 53493 53921\nf 53492 53921 53920\nf 53493 53494 53922\nf 53493 53922 53921\nf 53494 53495 53923\nf 53494 53923 53922\nf 53495 53496 53924\nf 53495 53924 53923\nf 53496 53497 53925\nf 53496 53925 53924\nf 53497 53498 53926\nf 53497 53926 53925\nf 53498 53499 53927\nf 53498 53927 53926\nf 53499 53500 53928\nf 53499 53928 53927\nf 53500 53501 53929\nf 53500 53929 53928\nf 53501 53502 53930\nf 53501 53930 53929\nf 53502 53503 53931\nf 53502 53931 53930\nf 53503 53504 53932\nf 53503 53932 53931\nf 53504 53505 53933\nf 53504 53933 53932\nf 53505 53506 53934\nf 53505 53934 53933\nf 53506 53507 53935\nf 53506 53935 53934\nf 53507 53508 53936\nf 53507 53936 53935\nf 53508 53509 53937\nf 53508 53937 53936\nf 53509 53510 53938\nf 53509 53938 53937\nf 53510 53511 53939\nf 53510 53939 53938\nf 53511 53512 53940\nf 53511 53940 53939\nf 53512 53513 53941\nf 53512 53941 53940\nf 53513 53514 53942\nf 53513 53942 53941\nf 53514 53515 53943\nf 53514 53943 53942\nf 53515 53516 53944\nf 53515 53944 53943\nf 53516 53517 53945\nf 53516 53945 53944\nf 53517 53519 53946\nf 53517 53946 53945\nf 53518 53947 53519\nf 53519 53947 53948\nf 53519 53948 53946\nf 53520 53522 53951\nf 53520 53951 53949\nf 53521 53861 53950\nf 53521 53950 53523\nf 53522 53525 53954\nf 53522 53954 53951\nf 53523 53950 53952\nf 53523 53952 53953\nf 53523 53953 53524\nf 53524 53953 53527\nf 53525 53526 53954\nf 53526 53528 53957\nf 53526 53955 53954\nf 53526 53957 53955\nf 53527 53953 53956\nf 53527 53956 53529\nf 53528 53531 53960\nf 53528 53960 53957\nf 53529 53956 53958\nf 53529 53958 53533\nf 53530 53539 53968\nf 53530 53959 53961\nf 53530 53961 53532\nf 53530 53968 53959\nf 53531 53532 53960\nf 53532 53961 53960\nf 53533 53958 53962\nf 53533 53962 53963\nf 53533 53963 53534\nf 53534 53963 53541\nf 53535 53629 54059\nf 53535 53964 53965\nf 53535 53965 53536\nf 53535 54059 53964\nf 53536 53965 53966\nf 53536 53966 53537\nf 53537 53966 53967\nf 53537 53967 53538\nf 53538 53967 53969\nf 53538 53969 53540\nf 53539 53540 53968\nf 53540 53969 53968\nf 53541 53963 53970\nf 53541 53970 53971\nf 53541 53971 53542\nf 53542 53971 53973\nf 53542 53973 53543\nf 53543 53973 53974\nf 53543 53974 53544\nf 53544 53974 53631\nf 53545 53635 54065\nf 53545 53975 53976\nf 53545 53976 53546\nf 53545 54065 53975\nf 53546 53976 53977\nf 53546 53977 53547\nf 53547 53977 53978\nf 53547 53978 53548\nf 53548 53978 53979\nf 53548 53979 53549\nf 53549 53979 53980\nf 53549 53980 53550\nf 53550 53980 53981\nf 53550 53981 53551\nf 53551 53981 53982\nf 53551 53982 53552\nf 53552 53982 53983\nf 53552 53983 53553\nf 53553 53983 53984\nf 53553 53984 53554\nf 53554 53984 53985\nf 53554 53985 53555\nf 53555 53985 53986\nf 53555 53986 53556\nf 53556 53986 53987\nf 53556 53987 53557\nf 53557 53987 53988\nf 53557 53988 53558\nf 53558 53988 53989\nf 53558 53989 53559\nf 53559 53989 53990\nf 53559 53990 53560\nf 53560 53990 53991\nf 53560 53991 53561\nf 53561 53991 53992\nf 53561 53992 53562\nf 53562 53992 53993\nf 53562 53993 53563\nf 53563 53993 53994\nf 53563 53994 53564\nf 53564 53994 53995\nf 53564 53995 53565\nf 53565 53995 53996\nf 53565 53996 53566\nf 53566 53996 53997\nf 53566 53997 53567\nf 53567 53997 53998\nf 53567 53998 53568\nf 53568 53998 53999\nf 53568 53999 53569\nf 53569 53999 54000\nf 53569 54000 53570\nf 53570 54000 54001\nf 53570 54001 53571\nf 53571 54001 54002\nf 53571 54002 53572\nf 53572 54002 54003\nf 53572 54003 53573\nf 53573 54003 54004\nf 53573 54004 53574\nf 53574 54004 54005\nf 53574 54005 53575\nf 53575 54005 54006\nf 53575 54006 53576\nf 53576 54006 54007\nf 53576 54007 53577\nf 53577 54007 54008\nf 53577 54008 53578\nf 53578 54008 54009\nf 53578 54009 53579\nf 53579 54009 54010\nf 53579 54010 53580\nf 53580 54010 54011\nf 53580 54011 53581\nf 53581 54011 54012\nf 53581 54012 53582\nf 53582 54012 54013\nf 53582 54013 53583\nf 53583 54013 54014\nf 53583 54014 53584\nf 53584 54014 54015\nf 53584 54015 53585\nf 53585 54015 54016\nf 53585 54016 53586\nf 53586 54016 54017\nf 53586 54017 53587\nf 53587 54017 54018\nf 53587 54018 53588\nf 53588 54018 54019\nf 53588 54019 53589\nf 53589 54019 54020\nf 53589 54020 53590\nf 53590 54020 54021\nf 53590 54021 53591\nf 53591 54021 54022\nf 53591 54022 53592\nf 53592 54022 54023\nf 53592 54023 53593\nf 53593 54023 54024\nf 53593 54024 53594\nf 53594 54024 54025\nf 53594 54025 53595\nf 53595 54025 54026\nf 53595 54026 53596\nf 53596 54026 54027\nf 53596 54027 53597\nf 53597 54027 54028\nf 53597 54028 53598\nf 53598 54028 54029\nf 53598 54029 53599\nf 53599 54029 54030\nf 53599 54030 53600\nf 53600 54030 54031\nf 53600 54031 53601\nf 53601 54031 54032\nf 53601 54032 53602\nf 53602 54032 54033\nf 53602 54033 53603\nf 53603 54033 54034\nf 53603 54034 53604\nf 53604 54034 54035\nf 53604 54035 53605\nf 53605 54035 54036\nf 53605 54036 53606\nf 53606 54036 54037\nf 53606 54037 53607\nf 53607 54037 54038\nf 53607 54038 53608\nf 53608 54038 54039\nf 53608 54039 53609\nf 53609 54039 54040\nf 53609 54040 53610\nf 53610 54040 54041\nf 53610 54041 53611\nf 53611 54041 54042\nf 53611 54042 53612\nf 53612 54042 54043\nf 53612 54043 53613\nf 53613 54043 54044\nf 53613 54044 53614\nf 53614 54044 54045\nf 53614 54045 53615\nf 53615 54045 54046\nf 53615 54046 53616\nf 53616 54046 54047\nf 53616 54047 53617\nf 53617 54047 54048\nf 53617 54048 53618\nf 53618 54048 54049\nf 53618 54049 53619\nf 53619 54049 54050\nf 53619 54050 53620\nf 53620 54050 54051\nf 53620 54051 53621\nf 53621 54051 54052\nf 53621 54052 53622\nf 53622 54052 54053\nf 53622 54053 53623\nf 53623 54053 54054\nf 53623 54054 53624\nf 53624 54054 54055\nf 53624 54055 53625\nf 53625 54055 54056\nf 53625 54056 53626\nf 53626 54056 54057\nf 53626 54057 53627\nf 53627 54057 54058\nf 53627 54058 53628\nf 53628 54058 54060\nf 53628 54060 53630\nf 53629 53630 54059\nf 53630 54060 54059\nf 53631 53974 54061\nf 53631 54061 54062\nf 53631 54062 53632\nf 53632 54062 54063\nf 53632 54063 53633\nf 53633 54063 54064\nf 53633 54064 53634\nf 53634 54064 54066\nf 53634 54066 53636\nf 53635 53636 54065\nf 53636 54066 54065\nf 53637 53638 54067\nf 53637 53643 53641\nf 53637 54067 54071\nf 53637 54071 53643\nf 53638 53639 54067\nf 53639 53640 54068\nf 53639 54068 54067\nf 53640 53644 54069\nf 53640 54069 54068\nf 53641 53643 53642\nf 53642 53643 54072\nf 53642 54070 54075\nf 53642 54072 54070\nf 53642 54075 53645\nf 53643 54071 54072\nf 53644 53646 54076\nf 53644 54074 54069\nf 53644 54076 54074\nf 53645 54075 53648\nf 53646 53647 54077\nf 53646 54077 54076\nf 53647 53650 54077\nf 53648 54075 54078\nf 53648 54078 54080\nf 53648 54080 53649\nf 53649 53652 53651\nf 53649 54080 53652\nf 53650 53653 54082\nf 53650 54079 54077\nf 53650 54082 54079\nf 53651 53652 54083\nf 53651 54083 53654\nf 53652 54080 54081\nf 53652 54081 54083\nf 53653 53655 54084\nf 53653 54084 54082\nf 53654 54083 53656\nf 53655 53657 54086\nf 53655 54086 54084\nf 53656 54083 54085\nf 53656 54085 53658\nf 53657 53659 54088\nf 53657 54088 54086\nf 53658 54085 54087\nf 53658 54087 53660\nf 53659 53661 54090\nf 53659 54090 54088\nf 53660 54087 54089\nf 53660 54089 53663\nf 53661 53662 54091\nf 53661 54091 54090\nf 53662 53664 54091\nf 53663 54089 54092\nf 53663 54092 53665\nf 53664 53666 54096\nf 53664 54093 54091\nf 53664 54096 54093\nf 53665 54092 54095\nf 53665 54095 53667\nf 53666 53668 54096\nf 53667 54095 54098\nf 53667 54098 53671\nf 53668 53669 53670\nf 53668 53670 54096\nf 53669 53672 54099\nf 53669 54099 53670\nf 53670 54097 54096\nf 53670 54099 54097\nf 53671 54098 54100\nf 53671 54100 53673\nf 53672 53675 54104\nf 53672 54101 54099\nf 53672 54104 54101\nf 53673 54100 54102\nf 53673 54102 54103\nf 53673 54103 53674\nf 53674 54103 53676\nf 53675 53677 54106\nf 53675 54106 54104\nf 53676 54103 54105\nf 53676 54105 53678\nf 53677 53679 54108\nf 53677 54108 54106\nf 53678 54105 54107\nf 53678 54107 53681\nf 53679 53680 54108\nf 53680 53683 54112\nf 53680 54109 54108\nf 53680 54112 54109\nf 53681 54107 54110\nf 53681 54110 54111\nf 53681 54111 53682\nf 53682 54111 53685\nf 53683 53684 54112\nf 53684 53686 54116\nf 53684 54113 54112\nf 53684 54116 54113\nf 53685 54111 54114\nf 53685 54114 53687\nf 53686 53691 54116\nf 53687 53689 53688\nf 53687 54114 54115\nf 53687 54115 53689\nf 53688 53689 54120\nf 53688 54120 53690\nf 53689 54115 54118\nf 53689 54118 54120\nf 53690 54120 53692\nf 53691 53692 53693\nf 53691 53693 54116\nf 53692 54119 53693\nf 53692 54120 54119\nf 53693 54117 54116\nf 53693 54119 54117\nf 53694 53695 54122\nf 53694 54122 54125\nf 53694 54125 53697\nf 53695 53696 54123\nf 53695 54123 54122\nf 53696 53699 54124\nf 53696 54124 54123\nf 53697 54125 53698\nf 53698 54125 54126\nf 53698 54126 54129\nf 53698 54129 53701\nf 53699 53700 54128\nf 53699 54127 54124\nf 53699 54128 54127\nf 53700 53702 54128\nf 53701 54129 53703\nf 53702 53704 54132\nf 53702 54130 54128\nf 53702 54132 54130\nf 53703 54129 54131\nf 53703 54131 53705\nf 53704 53706 54134\nf 53704 54134 54132\nf 53705 54131 54133\nf 53705 54133 53707\nf 53706 53708 54136\nf 53706 54136 54134\nf 53707 54133 54135\nf 53707 54135 53709\nf 53708 53710 54138\nf 53708 54138 54136\nf 53709 54135 54137\nf 53709 54137 53711\nf 53710 53713 54140\nf 53710 54140 54138\nf 53711 54137 54139\nf 53711 54139 54141\nf 53711 54141 53712\nf 53712 53715 53714\nf 53712 54141 53715\nf 53713 53716 54142\nf 53713 54142 54140\nf 53714 53715 53717\nf 53715 53718 53717\nf 53715 54141 54143\nf 53715 54143 53718\nf 53716 53719 54144\nf 53716 54144 54142\nf 53717 53718 53720\nf 53718 53722 53720\nf 53718 54143 54145\nf 53718 54145 53722\nf 53719 53723 54146\nf 53719 54146 54144\nf 53720 53722 53721\nf 53721 53722 53724\nf 53722 54145 53724\nf 53723 53725 54148\nf 53723 54148 54146\nf 53724 54145 54147\nf 53724 54147 53726\nf 53725 53728 54150\nf 53725 54150 54148\nf 53726 54147 54149\nf 53726 54149 54151\nf 53726 54151 53727\nf 53727 53730 53729\nf 53727 54151 53730\nf 53728 53731 54153\nf 53728 54153 54150\nf 53729 53730 54155\nf 53729 54155 53733\nf 53730 54151 54152\nf 53730 54152 54155\nf 53731 53732 54153\nf 53732 53734 54157\nf 53732 54154 54153\nf 53732 54157 54154\nf 53733 54155 53735\nf 53734 53736 54159\nf 53734 54159 54157\nf 53735 54155 54158\nf 53735 54158 53737\nf 53736 53738 54161\nf 53736 54161 54159\nf 53737 54158 54160\nf 53737 54160 53739\nf 53738 53740 54163\nf 53738 54163 54161\nf 53739 54160 54162\nf 53739 54162 53742\nf 53740 53741 54163\nf 53741 53743 54166\nf 53741 54164 54163\nf 53741 54166 54164\nf 53742 54162 54165\nf 53742 54165 53744\nf 53743 53747 54170\nf 53743 54170 54166\nf 53744 54165 54167\nf 53744 54167 54168\nf 53744 54168 53745\nf 53745 54168 53749\nf 53746 53750 54174\nf 53746 54169 54171\nf 53746 54171 53748\nf 53746 54174 54169\nf 53747 53748 54170\nf 53748 54171 54170\nf 53749 54168 54173\nf 53749 54173 54175\nf 53749 54175 53751\nf 53750 53751 54174\nf 53751 54175 54174\nf 53752 53753 54176\nf 53752 54176 54185\nf 53752 54185 53761\nf 53753 53754 54177\nf 53753 54177 54176\nf 53754 53755 54178\nf 53754 54178 54177\nf 53755 53756 54179\nf 53755 54179 54178\nf 53756 53757 54180\nf 53756 54180 54179\nf 53757 53758 54181\nf 53757 54181 54180\nf 53758 53759 54182\nf 53758 54182 54181\nf 53759 53760 54183\nf 53759 54183 54182\nf 53760 53763 54184\nf 53760 54184 54183\nf 53761 54185 53762\nf 53762 54185 54186\nf 53762 54186 54190\nf 53762 54190 53766\nf 53763 53764 54188\nf 53763 54187 54184\nf 53763 54188 54187\nf 53764 53765 54188\nf 53765 53768 54189\nf 53765 54189 54188\nf 53766 54190 53767\nf 53767 54190 54191\nf 53767 54191 54194\nf 53767 54194 53771\nf 53768 53769 54193\nf 53768 54192 54189\nf 53768 54193 54192\nf 53769 53770 54193\nf 53770 53773 53774\nf 53770 53774 54193\nf 53771 54194 53772\nf 53772 54194 54195\nf 53772 54195 54198\nf 53772 54198 53776\nf 53773 53775 54197\nf 53773 54197 53774\nf 53774 54196 54193\nf 53774 54197 54196\nf 53775 53778 53779\nf 53775 53779 54200\nf 53775 54200 54197\nf 53776 54198 54199\nf 53776 54199 53777\nf 53777 54199 53780\nf 53778 53782 54205\nf 53778 54201 53779\nf 53778 54205 54201\nf 53779 54201 54200\nf 53780 54199 54202\nf 53780 54202 54204\nf 53780 54204 53781\nf 53781 54204 53783\nf 53782 53789 54212\nf 53782 54212 54205\nf 53783 54204 54206\nf 53783 54206 54207\nf 53783 54207 53784\nf 53784 54207 54208\nf 53784 54208 53785\nf 53785 54208 54209\nf 53785 54209 53786\nf 53786 54209 54210\nf 53786 54210 53787\nf 53787 54210 53791\nf 53788 53800 54224\nf 53788 54211 54213\nf 53788 54213 53790\nf 53788 54224 54211\nf 53789 53790 54212\nf 53790 54213 54212\nf 53791 54210 54215\nf 53791 54215 54216\nf 53791 54216 53792\nf 53792 54216 54217\nf 53792 54217 53793\nf 53793 54217 54218\nf 53793 54218 53794\nf 53794 54218 54219\nf 53794 54219 53795\nf 53795 54219 54220\nf 53795 54220 53796\nf 53796 54220 54221\nf 53796 54221 53797\nf 53797 54221 54222\nf 53797 54222 53798\nf 53798 54222 54223\nf 53798 54223 53799\nf 53799 54223 54225\nf 53799 54225 53801\nf 53800 53801 54224\nf 53801 54225 54224\nf 53802 53803 54226\nf 53802 54226 54233\nf 53802 54233 53809\nf 53803 53804 54227\nf 53803 54227 54226\nf 53804 53805 54228\nf 53804 54228 54227\nf 53805 53810 54229\nf 53805 54229 54228\nf 53806 53807 54230\nf 53806 54230 54236\nf 53806 54236 53812\nf 53807 53808 54231\nf 53807 54231 54230\nf 53808 53813 54232\nf 53808 54232 54231\nf 53809 54233 53814\nf 53810 53811 54235\nf 53810 54234 54229\nf 53810 54235 54234\nf 53811 53815 54235\nf 53812 54236 53816\nf 53813 53818 54242\nf 53813 54237 54232\nf 53813 54242 54237\nf 53814 54233 54238\nf 53814 54238 53820\nf 53815 53821 54245\nf 53815 54239 54235\nf 53815 54245 54239\nf 53816 54236 54240\nf 53816 54240 53817\nf 53817 54240 54241\nf 53817 54241 54247\nf 53817 54247 53823\nf 53818 53819 54243\nf 53818 54243 54242\nf 53819 53824 54243\nf 53820 54238 54244\nf 53820 54244 53825\nf 53821 53822 54246\nf 53821 54246 54245\nf 53822 53826 54246\nf 53823 54247 53827\nf 53824 53828 54252\nf 53824 54248 54243\nf 53824 54252 54248\nf 53825 54244 54249\nf 53825 54249 53829\nf 53826 53831 54256\nf 53826 54250 54246\nf 53826 54256 54250\nf 53827 54247 54251\nf 53827 54251 53832\nf 53828 53833 54258\nf 53828 54258 54252\nf 53829 54249 54253\nf 53829 54253 53830\nf 53830 54253 54254\nf 53830 54254 54259\nf 53830 54259 53834\nf 53831 53835 54260\nf 53831 54260 54256\nf 53832 54251 54257\nf 53832 54257 53836\nf 53833 53837 54262\nf 53833 54262 54258\nf 53834 54259 53838\nf 53835 53839 54264\nf 53835 54264 54260\nf 53836 54257 54261\nf 53836 54261 53840\nf 53837 53841 54266\nf 53837 54266 54262\nf 53838 54259 54263\nf 53838 54263 53842\nf 53839 53843 54268\nf 53839 54268 54264\nf 53840 54261 54265\nf 53840 54265 53844\nf 53841 53845 54270\nf 53841 54270 54266\nf 53842 54263 54267\nf 53842 54267 53846\nf 53843 53847 54272\nf 53843 54272 54268\nf 53844 54265 54269\nf 53844 54269 53848\nf 53845 53849 54274\nf 53845 54274 54270\nf 53846 54267 54271\nf 53846 54271 53851\nf 53847 53852 54277\nf 53847 54277 54272\nf 53848 54269 54273\nf 53848 54273 53853\nf 53849 53850 54275\nf 53849 54275 54274\nf 53850 53854 54275\nf 53851 54271 54276\nf 53851 54276 53858\nf 53852 53860 54285\nf 53852 54285 54277\nf 53853 54273 54278\nf 53853 54278 53861\nf 53854 53855 54280\nf 53854 54279 54275\nf 53854 54280 54279\nf 53855 53856 54280\nf 53856 53857 54281\nf 53856 54281 54280\nf 53857 53862 54282\nf 53857 54282 54281\nf 53858 54276 54283\nf 53858 54283 53859\nf 53859 54283 54284\nf 53859 54284 54372\nf 53859 54372 53947\nf 53860 53949 54374\nf 53860 54374 54285\nf 53861 54278 54286\nf 53861 54286 53950\nf 53862 53863 54288\nf 53862 54287 54282\nf 53862 54288 54287\nf 53863 53864 54288\nf 53864 53865 54289\nf 53864 54289 54288\nf 53865 53866 54290\nf 53865 54290 54289\nf 53866 53867 54291\nf 53866 54291 54290\nf 53867 53868 54292\nf 53867 54292 54291\nf 53868 53869 54293\nf 53868 54293 54292\nf 53869 53870 54294\nf 53869 54294 54293\nf 53870 53871 54295\nf 53870 54295 54294\nf 53871 53872 54296\nf 53871 54296 54295\nf 53872 53873 54297\nf 53872 54297 54296\nf 53873 53874 54298\nf 53873 54298 54297\nf 53874 53875 54299\nf 53874 54299 54298\nf 53875 53876 54300\nf 53875 54300 54299\nf 53876 53877 54301\nf 53876 54301 54300\nf 53877 53878 54302\nf 53877 54302 54301\nf 53878 53879 54303\nf 53878 54303 54302\nf 53879 53880 54304\nf 53879 54304 54303\nf 53880 53881 54305\nf 53880 54305 54304\nf 53881 53882 54306\nf 53881 54306 54305\nf 53882 53883 54307\nf 53882 54307 54306\nf 53883 53884 54308\nf 53883 54308 54307\nf 53884 53885 54309\nf 53884 54309 54308\nf 53885 53886 54310\nf 53885 54310 54309\nf 53886 53887 54311\nf 53886 54311 54310\nf 53887 53888 54312\nf 53887 54312 54311\nf 53888 53889 54313\nf 53888 54313 54312\nf 53889 53890 54314\nf 53889 54314 54313\nf 53890 53891 54315\nf 53890 54315 54314\nf 53891 53892 54316\nf 53891 54316 54315\nf 53892 53893 54317\nf 53892 54317 54316\nf 53893 53894 54318\nf 53893 54318 54317\nf 53894 53895 54319\nf 53894 54319 54318\nf 53895 53896 54320\nf 53895 54320 54319\nf 53896 53897 54321\nf 53896 54321 54320\nf 53897 53898 54322\nf 53897 54322 54321\nf 53898 53899 54323\nf 53898 54323 54322\nf 53899 53900 54324\nf 53899 54324 54323\nf 53900 53901 54325\nf 53900 54325 54324\nf 53901 53902 54326\nf 53901 54326 54325\nf 53902 53903 54327\nf 53902 54327 54326\nf 53903 53904 54328\nf 53903 54328 54327\nf 53904 53905 54329\nf 53904 54329 54328\nf 53905 53906 54330\nf 53905 54330 54329\nf 53906 53907 54331\nf 53906 54331 54330\nf 53907 53908 54332\nf 53907 54332 54331\nf 53908 53909 54333\nf 53908 54333 54332\nf 53909 53910 54334\nf 53909 54334 54333\nf 53910 53911 54335\nf 53910 54335 54334\nf 53911 53912 54336\nf 53911 54336 54335\nf 53912 53913 54337\nf 53912 54337 54336\nf 53913 53914 54338\nf 53913 54338 54337\nf 53914 53915 54339\nf 53914 54339 54338\nf 53915 53916 54340\nf 53915 54340 54339\nf 53916 53917 54341\nf 53916 54341 54340\nf 53917 53918 54342\nf 53917 54342 54341\nf 53918 53919 54343\nf 53918 54343 54342\nf 53919 53920 54344\nf 53919 54344 54343\nf 53920 53921 54345\nf 53920 54345 54344\nf 53921 53922 54346\nf 53921 54346 54345\nf 53922 53923 54347\nf 53922 54347 54346\nf 53923 53924 54348\nf 53923 54348 54347\nf 53924 53925 54349\nf 53924 54349 54348\nf 53925 53926 54350\nf 53925 54350 54349\nf 53926 53927 54351\nf 53926 54351 54350\nf 53927 53928 54352\nf 53927 54352 54351\nf 53928 53929 54353\nf 53928 54353 54352\nf 53929 53930 54354\nf 53929 54354 54353\nf 53930 53931 54355\nf 53930 54355 54354\nf 53931 53932 54356\nf 53931 54356 54355\nf 53932 53933 54357\nf 53932 54357 54356\nf 53933 53934 54358\nf 53933 54358 54357\nf 53934 53935 54359\nf 53934 54359 54358\nf 53935 53936 54360\nf 53935 54360 54359\nf 53936 53937 54361\nf 53936 54361 54360\nf 53937 53938 54362\nf 53937 54362 54361\nf 53938 53939 54363\nf 53938 54363 54362\nf 53939 53940 54364\nf 53939 54364 54363\nf 53940 53941 54365\nf 53940 54365 54364\nf 53941 53942 54366\nf 53941 54366 54365\nf 53942 53943 54367\nf 53942 54367 54366\nf 53943 53944 54368\nf 53943 54368 54367\nf 53944 53945 54369\nf 53944 54369 54368\nf 53945 53946 54370\nf 53945 54370 54369\nf 53946 53948 54371\nf 53946 54371 54370\nf 53947 54372 53948\nf 53948 54372 54373\nf 53948 54373 54371\nf 53949 53951 54376\nf 53949 54376 54374\nf 53950 54286 54375\nf 53950 54375 53952\nf 53951 53954 54379\nf 53951 54379 54376\nf 53952 54375 54377\nf 53952 54377 54378\nf 53952 54378 53953\nf 53953 54378 53956\nf 53954 53955 54379\nf 53955 53957 54382\nf 53955 54380 54379\nf 53955 54382 54380\nf 53956 54378 54381\nf 53956 54381 53958\nf 53957 53960 54385\nf 53957 54385 54382\nf 53958 54381 54383\nf 53958 54383 53962\nf 53959 53968 54394\nf 53959 54384 54386\nf 53959 54386 53961\nf 53959 54394 54384\nf 53960 53961 54385\nf 53961 54386 54385\nf 53962 54383 54387\nf 53962 54387 54388\nf 53962 54388 53963\nf 53963 54388 54389\nf 53963 54389 53970\nf 53964 54059 54483\nf 53964 54390 54391\nf 53964 54391 53965\nf 53964 54483 54390\nf 53965 54391 54392\nf 53965 54392 53966\nf 53966 54392 54393\nf 53966 54393 53967\nf 53967 54393 54395\nf 53967 54395 53969\nf 53968 53969 54394\nf 53969 54395 54394\nf 53970 53972 53971\nf 53970 54389 53972\nf 53971 53972 54397\nf 53971 54397 53973\nf 53972 54389 54396\nf 53972 54396 54397\nf 53973 54397 54398\nf 53973 54398 53974\nf 53974 54398 54061\nf 53975 54065 54491\nf 53975 54399 54400\nf 53975 54400 53976\nf 53975 54491 54399\nf 53976 54400 54401\nf 53976 54401 53977\nf 53977 54401 54402\nf 53977 54402 53978\nf 53978 54402 54403\nf 53978 54403 53979\nf 53979 54403 54404\nf 53979 54404 53980\nf 53980 54404 54405\nf 53980 54405 53981\nf 53981 54405 54406\nf 53981 54406 53982\nf 53982 54406 54407\nf 53982 54407 53983\nf 53983 54407 54408\nf 53983 54408 53984\nf 53984 54408 54409\nf 53984 54409 53985\nf 53985 54409 54410\nf 53985 54410 53986\nf 53986 54410 54411\nf 53986 54411 53987\nf 53987 54411 54412\nf 53987 54412 53988\nf 53988 54412 54413\nf 53988 54413 53989\nf 53989 54413 54414\nf 53989 54414 53990\nf 53990 54414 54415\nf 53990 54415 53991\nf 53991 54415 54416\nf 53991 54416 53992\nf 53992 54416 54417\nf 53992 54417 53993\nf 53993 54417 54418\nf 53993 54418 53994\nf 53994 54418 54419\nf 53994 54419 53995\nf 53995 54419 54420\nf 53995 54420 53996\nf 53996 54420 54421\nf 53996 54421 53997\nf 53997 54421 54422\nf 53997 54422 53998\nf 53998 54422 54423\nf 53998 54423 53999\nf 53999 54423 54424\nf 53999 54424 54000\nf 54000 54424 54425\nf 54000 54425 54001\nf 54001 54425 54426\nf 54001 54426 54002\nf 54002 54426 54427\nf 54002 54427 54003\nf 54003 54427 54428\nf 54003 54428 54004\nf 54004 54428 54429\nf 54004 54429 54005\nf 54005 54429 54430\nf 54005 54430 54006\nf 54006 54430 54431\nf 54006 54431 54007\nf 54007 54431 54432\nf 54007 54432 54008\nf 54008 54432 54433\nf 54008 54433 54009\nf 54009 54433 54434\nf 54009 54434 54010\nf 54010 54434 54435\nf 54010 54435 54011\nf 54011 54435 54436\nf 54011 54436 54012\nf 54012 54436 54437\nf 54012 54437 54013\nf 54013 54437 54438\nf 54013 54438 54014\nf 54014 54438 54439\nf 54014 54439 54015\nf 54015 54439 54440\nf 54015 54440 54016\nf 54016 54440 54441\nf 54016 54441 54017\nf 54017 54441 54442\nf 54017 54442 54018\nf 54018 54442 54443\nf 54018 54443 54019\nf 54019 54443 54444\nf 54019 54444 54020\nf 54020 54444 54445\nf 54020 54445 54021\nf 54021 54445 54446\nf 54021 54446 54022\nf 54022 54446 54447\nf 54022 54447 54023\nf 54023 54447 54448\nf 54023 54448 54024\nf 54024 54448 54449\nf 54024 54449 54025\nf 54025 54449 54450\nf 54025 54450 54026\nf 54026 54450 54451\nf 54026 54451 54027\nf 54027 54451 54452\nf 54027 54452 54028\nf 54028 54452 54453\nf 54028 54453 54029\nf 54029 54453 54454\nf 54029 54454 54030\nf 54030 54454 54455\nf 54030 54455 54031\nf 54031 54455 54456\nf 54031 54456 54032\nf 54032 54456 54457\nf 54032 54457 54033\nf 54033 54457 54458\nf 54033 54458 54034\nf 54034 54458 54459\nf 54034 54459 54035\nf 54035 54459 54460\nf 54035 54460 54036\nf 54036 54460 54461\nf 54036 54461 54037\nf 54037 54461 54462\nf 54037 54462 54038\nf 54038 54462 54463\nf 54038 54463 54039\nf 54039 54463 54464\nf 54039 54464 54040\nf 54040 54464 54465\nf 54040 54465 54041\nf 54041 54465 54466\nf 54041 54466 54042\nf 54042 54466 54467\nf 54042 54467 54043\nf 54043 54467 54468\nf 54043 54468 54044\nf 54044 54468 54469\nf 54044 54469 54045\nf 54045 54469 54470\nf 54045 54470 54046\nf 54046 54470 54471\nf 54046 54471 54047\nf 54047 54471 54472\nf 54047 54472 54048\nf 54048 54472 54473\nf 54048 54473 54049\nf 54049 54473 54474\nf 54049 54474 54050\nf 54050 54474 54475\nf 54050 54475 54051\nf 54051 54475 54476\nf 54051 54476 54052\nf 54052 54476 54477\nf 54052 54477 54053\nf 54053 54477 54478\nf 54053 54478 54054\nf 54054 54478 54479\nf 54054 54479 54055\nf 54055 54479 54480\nf 54055 54480 54056\nf 54056 54480 54481\nf 54056 54481 54057\nf 54057 54481 54482\nf 54057 54482 54058\nf 54058 54482 54484\nf 54058 54484 54060\nf 54059 54060 54483\nf 54060 54484 54483\nf 54061 54398 54486\nf 54061 54486 54487\nf 54061 54487 54062\nf 54062 54487 54489\nf 54062 54489 54063\nf 54063 54489 54490\nf 54063 54490 54064\nf 54064 54490 54492\nf 54064 54492 54066\nf 54065 54066 54491\nf 54066 54492 54491\nf 54067 54068 54494\nf 54067 54073 54071\nf 54067 54493 54073\nf 54067 54494 54493\nf 54068 54069 54495\nf 54068 54495 54494\nf 54069 54074 54496\nf 54069 54496 54495\nf 54070 54072 54498\nf 54070 54498 54500\nf 54070 54500 54075\nf 54071 54073 54072\nf 54072 54073 54497\nf 54072 54497 54498\nf 54073 54493 54497\nf 54074 54076 54501\nf 54074 54499 54496\nf 54074 54501 54499\nf 54075 54500 54078\nf 54076 54077 54502\nf 54076 54502 54501\nf 54077 54079 54502\nf 54078 54500 54503\nf 54078 54503 54080\nf 54079 54082 54508\nf 54079 54504 54502\nf 54079 54508 54504\nf 54080 54503 54505\nf 54080 54505 54081\nf 54081 54505 54506\nf 54081 54506 54509\nf 54081 54509 54083\nf 54082 54084 54510\nf 54082 54510 54508\nf 54083 54509 54085\nf 54084 54086 54512\nf 54084 54512 54510\nf 54085 54509 54511\nf 54085 54511 54087\nf 54086 54088 54514\nf 54086 54514 54512\nf 54087 54511 54513\nf 54087 54513 54089\nf 54088 54090 54516\nf 54088 54516 54514\nf 54089 54513 54515\nf 54089 54515 54092\nf 54090 54091 54094\nf 54090 54094 54518\nf 54090 54518 54516\nf 54091 54093 54094\nf 54092 54515 54517\nf 54092 54517 54095\nf 54093 54096 54522\nf 54093 54519 54094\nf 54093 54522 54519\nf 54094 54519 54518\nf 54095 54517 54521\nf 54095 54521 54098\nf 54096 54097 54522\nf 54097 54099 54525\nf 54097 54523 54522\nf 54097 54525 54523\nf 54098 54521 54524\nf 54098 54524 54100\nf 54099 54101 54527\nf 54099 54527 54525\nf 54100 54524 54526\nf 54100 54526 54102\nf 54101 54104 54530\nf 54101 54530 54527\nf 54102 54526 54528\nf 54102 54528 54529\nf 54102 54529 54103\nf 54103 54529 54105\nf 54104 54106 54532\nf 54104 54532 54530\nf 54105 54529 54531\nf 54105 54531 54107\nf 54106 54108 54534\nf 54106 54534 54532\nf 54107 54531 54533\nf 54107 54533 54110\nf 54108 54109 54534\nf 54109 54112 54538\nf 54109 54535 54534\nf 54109 54538 54535\nf 54110 54533 54536\nf 54110 54536 54537\nf 54110 54537 54111\nf 54111 54537 54114\nf 54112 54113 54538\nf 54113 54116 54543\nf 54113 54539 54538\nf 54113 54543 54539\nf 54114 54537 54540\nf 54114 54540 54541\nf 54114 54541 54115\nf 54115 54541 54542\nf 54115 54542 54118\nf 54116 54117 54543\nf 54117 54119 54121\nf 54117 54121 54542\nf 54117 54542 54544\nf 54117 54544 54543\nf 54118 54121 54120\nf 54118 54542 54121\nf 54119 54120 54121\nf 54122 54123 54545\nf 54122 54545 54548\nf 54122 54548 54125\nf 54123 54124 54546\nf 54123 54546 54545\nf 54124 54127 54547\nf 54124 54547 54546\nf 54125 54548 54126\nf 54126 54548 54549\nf 54126 54549 54552\nf 54126 54552 54129\nf 54127 54128 54551\nf 54127 54550 54547\nf 54127 54551 54550\nf 54128 54130 54551\nf 54129 54552 54131\nf 54130 54132 54556\nf 54130 54553 54551\nf 54130 54556 54553\nf 54131 54552 54555\nf 54131 54555 54133\nf 54132 54134 54558\nf 54132 54558 54556\nf 54133 54555 54557\nf 54133 54557 54135\nf 54134 54136 54560\nf 54134 54560 54558\nf 54135 54557 54559\nf 54135 54559 54137\nf 54136 54138 54562\nf 54136 54562 54560\nf 54137 54559 54561\nf 54137 54561 54139\nf 54138 54140 54564\nf 54138 54564 54562\nf 54139 54561 54563\nf 54139 54563 54141\nf 54140 54142 54566\nf 54140 54566 54564\nf 54141 54563 54565\nf 54141 54565 54143\nf 54142 54144 54568\nf 54142 54568 54566\nf 54143 54565 54567\nf 54143 54567 54145\nf 54144 54146 54570\nf 54144 54570 54568\nf 54145 54567 54569\nf 54145 54569 54147\nf 54146 54148 54572\nf 54146 54572 54570\nf 54147 54569 54571\nf 54147 54571 54149\nf 54148 54150 54574\nf 54148 54574 54572\nf 54149 54571 54573\nf 54149 54573 54151\nf 54150 54153 54576\nf 54150 54576 54574\nf 54151 54573 54575\nf 54151 54575 54578\nf 54151 54578 54152\nf 54152 54156 54155\nf 54152 54578 54156\nf 54153 54154 54576\nf 54154 54157 54580\nf 54154 54577 54576\nf 54154 54580 54577\nf 54155 54156 54581\nf 54155 54581 54158\nf 54156 54578 54579\nf 54156 54579 54581\nf 54157 54159 54583\nf 54157 54583 54580\nf 54158 54581 54160\nf 54159 54161 54585\nf 54159 54585 54583\nf 54160 54581 54584\nf 54160 54584 54162\nf 54161 54163 54587\nf 54161 54587 54585\nf 54162 54584 54586\nf 54162 54586 54165\nf 54163 54164 54587\nf 54164 54166 54591\nf 54164 54588 54587\nf 54164 54591 54588\nf 54165 54586 54590\nf 54165 54590 54167\nf 54166 54170 54591\nf 54167 54590 54593\nf 54167 54593 54594\nf 54167 54594 54168\nf 54168 54594 54173\nf 54169 54174 54599\nf 54169 54597 54171\nf 54169 54599 54597\nf 54170 54171 54172\nf 54170 54172 54591\nf 54171 54596 54172\nf 54171 54597 54596\nf 54172 54592 54591\nf 54172 54596 54592\nf 54173 54594 54598\nf 54173 54598 54600\nf 54173 54600 54175\nf 54174 54175 54599\nf 54175 54600 54599\nf 54176 54177 54602\nf 54176 54602 54611\nf 54176 54611 54185\nf 54177 54178 54603\nf 54177 54603 54602\nf 54178 54179 54604\nf 54178 54604 54603\nf 54179 54180 54605\nf 54179 54605 54604\nf 54180 54181 54606\nf 54180 54606 54605\nf 54181 54182 54607\nf 54181 54607 54606\nf 54182 54183 54608\nf 54182 54608 54607\nf 54183 54184 54609\nf 54183 54609 54608\nf 54184 54187 54610\nf 54184 54610 54609\nf 54185 54611 54186\nf 54186 54611 54612\nf 54186 54612 54617\nf 54186 54617 54190\nf 54187 54188 54615\nf 54187 54613 54610\nf 54187 54615 54613\nf 54188 54189 54615\nf 54189 54192 54616\nf 54189 54616 54615\nf 54190 54617 54191\nf 54191 54617 54618\nf 54191 54618 54621\nf 54191 54621 54194\nf 54192 54193 54620\nf 54192 54619 54616\nf 54192 54620 54619\nf 54193 54196 54620\nf 54194 54621 54195\nf 54195 54621 54622\nf 54195 54622 54625\nf 54195 54625 54198\nf 54196 54197 54624\nf 54196 54623 54620\nf 54196 54624 54623\nf 54197 54200 54624\nf 54198 54203 54199\nf 54198 54625 54628\nf 54198 54628 54203\nf 54199 54203 54202\nf 54200 54201 54627\nf 54200 54626 54624\nf 54200 54627 54626\nf 54201 54205 54627\nf 54202 54203 54629\nf 54202 54629 54204\nf 54203 54628 54629\nf 54204 54629 54630\nf 54204 54630 54206\nf 54205 54212 54631\nf 54205 54631 54627\nf 54206 54630 54633\nf 54206 54633 54634\nf 54206 54634 54207\nf 54207 54634 54635\nf 54207 54635 54208\nf 54208 54635 54636\nf 54208 54636 54209\nf 54209 54636 54637\nf 54209 54637 54210\nf 54210 54637 54215\nf 54211 54224 54649\nf 54211 54639 54213\nf 54211 54649 54639\nf 54212 54213 54214\nf 54212 54214 54631\nf 54213 54638 54214\nf 54213 54639 54638\nf 54214 54632 54631\nf 54214 54638 54632\nf 54215 54637 54640\nf 54215 54640 54641\nf 54215 54641 54216\nf 54216 54641 54642\nf 54216 54642 54217\nf 54217 54642 54643\nf 54217 54643 54218\nf 54218 54643 54644\nf 54218 54644 54219\nf 54219 54644 54645\nf 54219 54645 54220\nf 54220 54645 54646\nf 54220 54646 54221\nf 54221 54646 54647\nf 54221 54647 54222\nf 54222 54647 54648\nf 54222 54648 54223\nf 54223 54648 54650\nf 54223 54650 54225\nf 54224 54225 54649\nf 54225 54650 54649\nf 54226 54227 54652\nf 54226 54652 54659\nf 54226 54659 54233\nf 54227 54228 54653\nf 54227 54653 54652\nf 54228 54229 54654\nf 54228 54654 54653\nf 54229 54234 54655\nf 54229 54655 54654\nf 54230 54231 54656\nf 54230 54656 54662\nf 54230 54662 54236\nf 54231 54232 54657\nf 54231 54657 54656\nf 54232 54237 54658\nf 54232 54658 54657\nf 54233 54659 54238\nf 54234 54235 54661\nf 54234 54660 54655\nf 54234 54661 54660\nf 54235 54239 54661\nf 54236 54662 54240\nf 54237 54242 54669\nf 54237 54663 54658\nf 54237 54669 54663\nf 54238 54659 54664\nf 54238 54664 54244\nf 54239 54245 54674\nf 54239 54666 54661\nf 54239 54674 54666\nf 54240 54662 54667\nf 54240 54667 54241\nf 54241 54667 54668\nf 54241 54668 54676\nf 54241 54676 54247\nf 54242 54243 54670\nf 54242 54670 54669\nf 54243 54248 54670\nf 54244 54664 54672\nf 54244 54672 54249\nf 54245 54246 54675\nf 54245 54675 54674\nf 54246 54250 54675\nf 54247 54676 54251\nf 54248 54252 54683\nf 54248 54677 54670\nf 54248 54683 54677\nf 54249 54672 54678\nf 54249 54678 54253\nf 54250 54256 54685\nf 54250 54681 54675\nf 54250 54685 54681\nf 54251 54676 54682\nf 54251 54682 54257\nf 54252 54258 54687\nf 54252 54687 54683\nf 54253 54255 54254\nf 54253 54678 54255\nf 54254 54255 54684\nf 54254 54684 54259\nf 54255 54678 54679\nf 54255 54679 54684\nf 54256 54260 54689\nf 54256 54689 54685\nf 54257 54682 54686\nf 54257 54686 54261\nf 54258 54262 54691\nf 54258 54691 54687\nf 54259 54684 54688\nf 54259 54688 54263\nf 54260 54264 54694\nf 54260 54694 54689\nf 54261 54686 54690\nf 54261 54690 54265\nf 54262 54266 54696\nf 54262 54696 54691\nf 54263 54688 54693\nf 54263 54693 54267\nf 54264 54268 54699\nf 54264 54699 54694\nf 54265 54690 54695\nf 54265 54695 54269\nf 54266 54270 54701\nf 54266 54701 54696\nf 54267 54693 54698\nf 54267 54698 54271\nf 54268 54272 54703\nf 54268 54703 54699\nf 54269 54695 54700\nf 54269 54700 54273\nf 54270 54274 54705\nf 54270 54705 54701\nf 54271 54698 54702\nf 54271 54702 54276\nf 54272 54277 54709\nf 54272 54709 54703\nf 54273 54700 54704\nf 54273 54704 54278\nf 54274 54275 54706\nf 54274 54706 54705\nf 54275 54279 54706\nf 54276 54702 54708\nf 54276 54708 54283\nf 54277 54285 54717\nf 54277 54717 54709\nf 54278 54704 54710\nf 54278 54710 54286\nf 54279 54280 54712\nf 54279 54711 54706\nf 54279 54712 54711\nf 54280 54281 54712\nf 54281 54282 54713\nf 54281 54713 54712\nf 54282 54287 54714\nf 54282 54714 54713\nf 54283 54708 54715\nf 54283 54715 54284\nf 54284 54715 54716\nf 54284 54716 54804\nf 54284 54804 54372\nf 54285 54374 54806\nf 54285 54806 54717\nf 54286 54710 54718\nf 54286 54718 54375\nf 54287 54288 54720\nf 54287 54719 54714\nf 54287 54720 54719\nf 54288 54289 54720\nf 54289 54290 54721\nf 54289 54721 54720\nf 54290 54291 54722\nf 54290 54722 54721\nf 54291 54292 54723\nf 54291 54723 54722\nf 54292 54293 54724\nf 54292 54724 54723\nf 54293 54294 54725\nf 54293 54725 54724\nf 54294 54295 54726\nf 54294 54726 54725\nf 54295 54296 54727\nf 54295 54727 54726\nf 54296 54297 54728\nf 54296 54728 54727\nf 54297 54298 54729\nf 54297 54729 54728\nf 54298 54299 54730\nf 54298 54730 54729\nf 54299 54300 54731\nf 54299 54731 54730\nf 54300 54301 54732\nf 54300 54732 54731\nf 54301 54302 54733\nf 54301 54733 54732\nf 54302 54303 54734\nf 54302 54734 54733\nf 54303 54304 54735\nf 54303 54735 54734\nf 54304 54305 54736\nf 54304 54736 54735\nf 54305 54306 54737\nf 54305 54737 54736\nf 54306 54307 54738\nf 54306 54738 54737\nf 54307 54308 54739\nf 54307 54739 54738\nf 54308 54309 54740\nf 54308 54740 54739\nf 54309 54310 54741\nf 54309 54741 54740\nf 54310 54311 54742\nf 54310 54742 54741\nf 54311 54312 54743\nf 54311 54743 54742\nf 54312 54313 54744\nf 54312 54744 54743\nf 54313 54314 54745\nf 54313 54745 54744\nf 54314 54315 54746\nf 54314 54746 54745\nf 54315 54316 54747\nf 54315 54747 54746\nf 54316 54317 54748\nf 54316 54748 54747\nf 54317 54318 54749\nf 54317 54749 54748\nf 54318 54319 54750\nf 54318 54750 54749\nf 54319 54320 54751\nf 54319 54751 54750\nf 54320 54321 54752\nf 54320 54752 54751\nf 54321 54322 54753\nf 54321 54753 54752\nf 54322 54323 54754\nf 54322 54754 54753\nf 54323 54324 54755\nf 54323 54755 54754\nf 54324 54325 54756\nf 54324 54756 54755\nf 54325 54326 54757\nf 54325 54757 54756\nf 54326 54327 54758\nf 54326 54758 54757\nf 54327 54328 54759\nf 54327 54759 54758\nf 54328 54329 54760\nf 54328 54760 54759\nf 54329 54330 54761\nf 54329 54761 54760\nf 54330 54331 54762\nf 54330 54762 54761\nf 54331 54332 54763\nf 54331 54763 54762\nf 54332 54333 54764\nf 54332 54764 54763\nf 54333 54334 54765\nf 54333 54765 54764\nf 54334 54335 54766\nf 54334 54766 54765\nf 54335 54336 54767\nf 54335 54767 54766\nf 54336 54337 54768\nf 54336 54768 54767\nf 54337 54338 54769\nf 54337 54769 54768\nf 54338 54339 54770\nf 54338 54770 54769\nf 54339 54340 54771\nf 54339 54771 54770\nf 54340 54341 54772\nf 54340 54772 54771\nf 54341 54342 54773\nf 54341 54773 54772\nf 54342 54343 54774\nf 54342 54774 54773\nf 54343 54344 54775\nf 54343 54775 54774\nf 54344 54345 54776\nf 54344 54776 54775\nf 54345 54346 54777\nf 54345 54777 54776\nf 54346 54347 54778\nf 54346 54778 54777\nf 54347 54348 54779\nf 54347 54779 54778\nf 54348 54349 54780\nf 54348 54780 54779\nf 54349 54350 54781\nf 54349 54781 54780\nf 54350 54351 54782\nf 54350 54782 54781\nf 54351 54352 54783\nf 54351 54783 54782\nf 54352 54353 54784\nf 54352 54784 54783\nf 54353 54354 54785\nf 54353 54785 54784\nf 54354 54355 54786\nf 54354 54786 54785\nf 54355 54356 54787\nf 54355 54787 54786\nf 54356 54357 54788\nf 54356 54788 54787\nf 54357 54358 54789\nf 54357 54789 54788\nf 54358 54359 54790\nf 54358 54790 54789\nf 54359 54360 54791\nf 54359 54791 54790\nf 54360 54361 54792\nf 54360 54792 54791\nf 54361 54362 54793\nf 54361 54793 54792\nf 54362 54363 54794\nf 54362 54794 54793\nf 54363 54364 54795\nf 54363 54795 54794\nf 54364 54365 54796\nf 54364 54796 54795\nf 54365 54366 54797\nf 54365 54797 54796\nf 54366 54367 54798\nf 54366 54798 54797\nf 54367 54368 54799\nf 54367 54799 54798\nf 54368 54369 54800\nf 54368 54800 54799\nf 54369 54370 54801\nf 54369 54801 54800\nf 54370 54371 54802\nf 54370 54802 54801\nf 54371 54373 54803\nf 54371 54803 54802\nf 54372 54804 54373\nf 54373 54804 54805\nf 54373 54805 54803\nf 54374 54376 54808\nf 54374 54808 54806\nf 54375 54718 54807\nf 54375 54807 54377\nf 54376 54379 54811\nf 54376 54811 54808\nf 54377 54807 54809\nf 54377 54809 54810\nf 54377 54810 54378\nf 54378 54810 54381\nf 54379 54380 54811\nf 54380 54382 54814\nf 54380 54812 54811\nf 54380 54814 54812\nf 54381 54810 54813\nf 54381 54813 54383\nf 54382 54385 54817\nf 54382 54817 54814\nf 54383 54813 54815\nf 54383 54815 54387\nf 54384 54394 54827\nf 54384 54816 54818\nf 54384 54818 54386\nf 54384 54827 54816\nf 54385 54386 54817\nf 54386 54818 54817\nf 54387 54815 54819\nf 54387 54819 54820\nf 54387 54820 54388\nf 54388 54820 54821\nf 54388 54821 54389\nf 54389 54821 54396\nf 54390 54483 54485\nf 54390 54485 54822\nf 54390 54822 54823\nf 54390 54823 54824\nf 54390 54824 54391\nf 54391 54824 54825\nf 54391 54825 54392\nf 54392 54825 54826\nf 54392 54826 54393\nf 54393 54826 54828\nf 54393 54828 54395\nf 54394 54395 54827\nf 54395 54828 54827\nf 54396 54821 54829\nf 54396 54829 54830\nf 54396 54830 54397\nf 54397 54830 54831\nf 54397 54831 54398\nf 54398 54831 54832\nf 54398 54832 54486\nf 54399 54491 54922\nf 54399 54833 54834\nf 54399 54834 54400\nf 54399 54922 54833\nf 54400 54834 54835\nf 54400 54835 54401\nf 54401 54835 54836\nf 54401 54836 54402\nf 54402 54836 54837\nf 54402 54837 54403\nf 54403 54837 54838\nf 54403 54838 54404\nf 54404 54838 54839\nf 54404 54839 54405\nf 54405 54839 54840\nf 54405 54840 54406\nf 54406 54840 54841\nf 54406 54841 54407\nf 54407 54841 54842\nf 54407 54842 54408\nf 54408 54842 54843\nf 54408 54843 54409\nf 54409 54843 54844\nf 54409 54844 54410\nf 54410 54844 54845\nf 54410 54845 54411\nf 54411 54845 54846\nf 54411 54846 54412\nf 54412 54846 54847\nf 54412 54847 54413\nf 54413 54847 54848\nf 54413 54848 54414\nf 54414 54848 54849\nf 54414 54849 54415\nf 54415 54849 54850\nf 54415 54850 54416\nf 54416 54850 54851\nf 54416 54851 54417\nf 54417 54851 54852\nf 54417 54852 54418\nf 54418 54852 54853\nf 54418 54853 54419\nf 54419 54853 54854\nf 54419 54854 54420\nf 54420 54854 54855\nf 54420 54855 54421\nf 54421 54855 54856\nf 54421 54856 54422\nf 54422 54856 54857\nf 54422 54857 54423\nf 54423 54857 54858\nf 54423 54858 54424\nf 54424 54858 54859\nf 54424 54859 54425\nf 54425 54859 54860\nf 54425 54860 54426\nf 54426 54860 54861\nf 54426 54861 54427\nf 54427 54861 54862\nf 54427 54862 54428\nf 54428 54862 54863\nf 54428 54863 54429\nf 54429 54863 54864\nf 54429 54864 54430\nf 54430 54864 54865\nf 54430 54865 54431\nf 54431 54865 54866\nf 54431 54866 54432\nf 54432 54866 54867\nf 54432 54867 54433\nf 54433 54867 54868\nf 54433 54868 54434\nf 54434 54868 54869\nf 54434 54869 54435\nf 54435 54869 54870\nf 54435 54870 54436\nf 54436 54870 54871\nf 54436 54871 54437\nf 54437 54871 54872\nf 54437 54872 54438\nf 54438 54872 54873\nf 54438 54873 54439\nf 54439 54873 54874\nf 54439 54874 54440\nf 54440 54874 54875\nf 54440 54875 54441\nf 54441 54875 54876\nf 54441 54876 54442\nf 54442 54876 54877\nf 54442 54877 54443\nf 54443 54877 54878\nf 54443 54878 54444\nf 54444 54878 54879\nf 54444 54879 54445\nf 54445 54879 54880\nf 54445 54880 54446\nf 54446 54880 54881\nf 54446 54881 54447\nf 54447 54881 54882\nf 54447 54882 54448\nf 54448 54882 54883\nf 54448 54883 54449\nf 54449 54883 54884\nf 54449 54884 54450\nf 54450 54884 54885\nf 54450 54885 54451\nf 54451 54885 54886\nf 54451 54886 54452\nf 54452 54886 54887\nf 54452 54887 54453\nf 54453 54887 54888\nf 54453 54888 54454\nf 54454 54888 54889\nf 54454 54889 54455\nf 54455 54889 54890\nf 54455 54890 54456\nf 54456 54890 54891\nf 54456 54891 54457\nf 54457 54891 54892\nf 54457 54892 54458\nf 54458 54892 54893\nf 54458 54893 54459\nf 54459 54893 54894\nf 54459 54894 54460\nf 54460 54894 54895\nf 54460 54895 54461\nf 54461 54895 54896\nf 54461 54896 54462\nf 54462 54896 54897\nf 54462 54897 54463\nf 54463 54897 54898\nf 54463 54898 54464\nf 54464 54898 54899\nf 54464 54899 54465\nf 54465 54899 54900\nf 54465 54900 54466\nf 54466 54900 54901\nf 54466 54901 54467\nf 54467 54901 54902\nf 54467 54902 54468\nf 54468 54902 54903\nf 54468 54903 54469\nf 54469 54903 54904\nf 54469 54904 54470\nf 54470 54904 54905\nf 54470 54905 54471\nf 54471 54905 54906\nf 54471 54906 54472\nf 54472 54906 54907\nf 54472 54907 54473\nf 54473 54907 54908\nf 54473 54908 54474\nf 54474 54908 54909\nf 54474 54909 54475\nf 54475 54909 54910\nf 54475 54910 54476\nf 54476 54910 54911\nf 54476 54911 54477\nf 54477 54911 54912\nf 54477 54912 54478\nf 54478 54912 54913\nf 54478 54913 54479\nf 54479 54913 54914\nf 54479 54914 54480\nf 54480 54914 54915\nf 54480 54915 54481\nf 54481 54915 54917\nf 54481 54917 54482\nf 54482 54917 54484\nf 54483 54484 54485\nf 54484 54916 54485\nf 54484 54917 54916\nf 54485 54916 54822\nf 54486 54488 54487\nf 54486 54832 54488\nf 54487 54488 54920\nf 54487 54920 54489\nf 54488 54832 54918\nf 54488 54918 54920\nf 54489 54920 54921\nf 54489 54921 54490\nf 54490 54921 54923\nf 54490 54923 54492\nf 54491 54492 54922\nf 54492 54923 54922\nf 54493 54494 54925\nf 54493 54925 54930\nf 54493 54930 54497\nf 54494 54495 54926\nf 54494 54926 54925\nf 54495 54496 54928\nf 54495 54928 54926\nf 54496 54499 54929\nf 54496 54929 54928\nf 54497 54930 54498\nf 54498 54930 54931\nf 54498 54931 54933\nf 54498 54933 54500\nf 54499 54501 54934\nf 54499 54932 54929\nf 54499 54934 54932\nf 54500 54933 54503\nf 54501 54502 54935\nf 54501 54935 54934\nf 54502 54504 54935\nf 54503 54933 54936\nf 54503 54936 54505\nf 54504 54508 54940\nf 54504 54938 54935\nf 54504 54940 54938\nf 54505 54507 54506\nf 54505 54936 54507\nf 54506 54507 54939\nf 54506 54939 54509\nf 54507 54936 54937\nf 54507 54937 54939\nf 54508 54510 54942\nf 54508 54942 54940\nf 54509 54939 54941\nf 54509 54941 54511\nf 54510 54512 54944\nf 54510 54944 54942\nf 54511 54941 54943\nf 54511 54943 54513\nf 54512 54514 54946\nf 54512 54946 54944\nf 54513 54943 54945\nf 54513 54945 54515\nf 54514 54516 54948\nf 54514 54948 54946\nf 54515 54945 54947\nf 54515 54947 54517\nf 54516 54518 54948\nf 54517 54947 54951\nf 54517 54951 54521\nf 54518 54519 54520\nf 54518 54520 54949\nf 54518 54949 54948\nf 54519 54522 54520\nf 54520 54522 54952\nf 54520 54952 54949\nf 54521 54951 54953\nf 54521 54953 54524\nf 54522 54523 54954\nf 54522 54954 54952\nf 54523 54525 54957\nf 54523 54955 54954\nf 54523 54957 54955\nf 54524 54953 54956\nf 54524 54956 54526\nf 54525 54527 54960\nf 54525 54960 54957\nf 54526 54956 54959\nf 54526 54959 54528\nf 54527 54530 54964\nf 54527 54964 54960\nf 54528 54959 54962\nf 54528 54962 54963\nf 54528 54963 54529\nf 54529 54963 54531\nf 54530 54532 54966\nf 54530 54966 54964\nf 54531 54963 54965\nf 54531 54965 54533\nf 54532 54534 54968\nf 54532 54968 54966\nf 54533 54965 54967\nf 54533 54967 54536\nf 54534 54535 54968\nf 54535 54538 54972\nf 54535 54969 54968\nf 54535 54972 54969\nf 54536 54967 54970\nf 54536 54970 54971\nf 54536 54971 54537\nf 54537 54971 54540\nf 54538 54539 54972\nf 54539 54543 54977\nf 54539 54973 54972\nf 54539 54977 54973\nf 54540 54971 54974\nf 54540 54974 54975\nf 54540 54975 54541\nf 54541 54975 54976\nf 54541 54976 54542\nf 54542 54976 54978\nf 54542 54978 54544\nf 54543 54544 54977\nf 54544 54978 54977\nf 54545 54546 54981\nf 54545 54981 54984\nf 54545 54984 54548\nf 54546 54547 54982\nf 54546 54982 54981\nf 54547 54550 54983\nf 54547 54983 54982\nf 54548 54984 54549\nf 54549 54984 54985\nf 54549 54985 54987\nf 54549 54987 54552\nf 54550 54551 54554\nf 54550 54554 54989\nf 54550 54986 54983\nf 54550 54989 54986\nf 54551 54553 54554\nf 54552 54987 54555\nf 54553 54556 54992\nf 54553 54990 54554\nf 54553 54992 54990\nf 54554 54990 54989\nf 54555 54987 54991\nf 54555 54991 54557\nf 54556 54558 54994\nf 54556 54994 54992\nf 54557 54991 54993\nf 54557 54993 54559\nf 54558 54560 54996\nf 54558 54996 54994\nf 54559 54993 54995\nf 54559 54995 54561\nf 54560 54562 54998\nf 54560 54998 54996\nf 54561 54995 54997\nf 54561 54997 54563\nf 54562 54564 55000\nf 54562 55000 54998\nf 54563 54997 54999\nf 54563 54999 54565\nf 54564 54566 55002\nf 54564 55002 55000\nf 54565 54999 55001\nf 54565 55001 54567\nf 54566 54568 55004\nf 54566 55004 55002\nf 54567 55001 55003\nf 54567 55003 54569\nf 54568 54570 55006\nf 54568 55006 55004\nf 54569 55003 55005\nf 54569 55005 54571\nf 54570 54572 55008\nf 54570 55008 55006\nf 54571 55005 55007\nf 54571 55007 54573\nf 54572 54574 55010\nf 54572 55010 55008\nf 54573 55007 55009\nf 54573 55009 54575\nf 54574 54576 55012\nf 54574 55012 55010\nf 54575 55009 55011\nf 54575 55011 54578\nf 54576 54577 55012\nf 54577 54580 55015\nf 54577 55013 55012\nf 54577 55015 55013\nf 54578 55011 55014\nf 54578 55014 55016\nf 54578 55016 54579\nf 54579 54582 54581\nf 54579 55016 54582\nf 54580 54583 55018\nf 54580 55018 55015\nf 54581 54582 55019\nf 54581 55019 54584\nf 54582 55016 55017\nf 54582 55017 55019\nf 54583 54585 55020\nf 54583 55020 55018\nf 54584 55019 54586\nf 54585 54587 55020\nf 54586 55019 55022\nf 54586 55022 54590\nf 54587 54588 54589\nf 54587 54589 55020\nf 54588 54591 55023\nf 54588 55023 54589\nf 54589 55021 55020\nf 54589 55023 55021\nf 54590 55022 55024\nf 54590 55024 54593\nf 54591 54592 55027\nf 54591 55027 55023\nf 54592 54596 55031\nf 54592 55028 55027\nf 54592 55031 55028\nf 54593 54595 54594\nf 54593 55024 55025\nf 54593 55025 54595\nf 54594 54595 54601\nf 54594 54601 54598\nf 54595 55025 55029\nf 54595 55029 55030\nf 54595 55030 54601\nf 54596 54597 55031\nf 54597 54599 54601\nf 54597 54601 55030\nf 54597 55030 55032\nf 54597 55032 55031\nf 54598 54601 54600\nf 54599 54600 54601\nf 54602 54603 55033\nf 54602 55033 55041\nf 54602 55041 54611\nf 54603 54604 55034\nf 54603 55034 55033\nf 54604 54605 55035\nf 54604 55035 55034\nf 54605 54606 55036\nf 54605 55036 55035\nf 54606 54607 55037\nf 54606 55037 55036\nf 54607 54608 55038\nf 54607 55038 55037\nf 54608 54609 55039\nf 54608 55039 55038\nf 54609 54610 55040\nf 54609 55040 55039\nf 54610 54613 54614\nf 54610 54614 55040\nf 54611 55041 54612\nf 54612 55041 55042\nf 54612 55042 55048\nf 54612 55048 54617\nf 54613 54615 55045\nf 54613 55045 54614\nf 54614 55044 55040\nf 54614 55045 55044\nf 54615 54616 55046\nf 54615 55046 55045\nf 54616 54619 55047\nf 54616 55047 55046\nf 54617 55048 54618\nf 54618 55048 55049\nf 54618 55049 55053\nf 54618 55053 54621\nf 54619 54620 55052\nf 54619 55050 55047\nf 54619 55052 55050\nf 54620 54623 55052\nf 54621 55053 54622\nf 54622 55053 55054\nf 54622 55054 55057\nf 54622 55057 54625\nf 54623 54624 55056\nf 54623 55055 55052\nf 54623 55056 55055\nf 54624 54626 55056\nf 54625 55057 54628\nf 54626 54627 55059\nf 54626 55058 55056\nf 54626 55059 55058\nf 54627 54631 55059\nf 54628 55057 55060\nf 54628 55060 55061\nf 54628 55061 54629\nf 54629 55061 55062\nf 54629 55062 54630\nf 54630 55062 54633\nf 54631 54632 55063\nf 54631 55063 55059\nf 54632 54638 55071\nf 54632 55064 55063\nf 54632 55071 55064\nf 54633 55062 55065\nf 54633 55065 55066\nf 54633 55066 54634\nf 54634 55066 55067\nf 54634 55067 54635\nf 54635 55067 55068\nf 54635 55068 54636\nf 54636 55068 55069\nf 54636 55069 54637\nf 54637 55069 54640\nf 54638 54639 55071\nf 54639 54649 54651\nf 54639 54651 55070\nf 54639 55070 55072\nf 54639 55072 55071\nf 54640 55069 55073\nf 54640 55073 55074\nf 54640 55074 54641\nf 54641 55074 55076\nf 54641 55076 54642\nf 54642 55076 55077\nf 54642 55077 54643\nf 54643 55077 55078\nf 54643 55078 54644\nf 54644 55078 55079\nf 54644 55079 54645\nf 54645 55079 55080\nf 54645 55080 54646\nf 54646 55080 55081\nf 54646 55081 54647\nf 54647 55081 55083\nf 54647 55083 54648\nf 54648 55083 54650\nf 54649 54650 54651\nf 54650 55082 54651\nf 54650 55083 55082\nf 54651 55082 55070\nf 54652 54653 55084\nf 54652 55084 55091\nf 54652 55091 54659\nf 54653 54654 55085\nf 54653 55085 55084\nf 54654 54655 55086\nf 54654 55086 55085\nf 54655 54660 55087\nf 54655 55087 55086\nf 54656 54657 55088\nf 54656 55088 55095\nf 54656 55095 54662\nf 54657 54658 55089\nf 54657 55089 55088\nf 54658 54663 55090\nf 54658 55090 55089\nf 54659 55091 54664\nf 54660 54661 55094\nf 54660 55093 55087\nf 54660 55094 55093\nf 54661 54666 55094\nf 54662 55095 54667\nf 54663 54669 55096\nf 54663 55096 55090\nf 54664 54665 54673\nf 54664 54673 54672\nf 54664 55091 54665\nf 54665 55091 55092\nf 54665 55092 55098\nf 54665 55098 54673\nf 54666 54674 55105\nf 54666 55099 55094\nf 54666 55105 55099\nf 54667 55095 55100\nf 54667 55100 54668\nf 54668 55100 55101\nf 54668 55101 55107\nf 54668 55107 54676\nf 54669 54670 54671\nf 54669 54671 55097\nf 54669 55097 55096\nf 54670 54677 54671\nf 54671 54677 55103\nf 54671 55103 55097\nf 54672 54673 54680\nf 54672 54680 54678\nf 54673 55098 55104\nf 54673 55104 54680\nf 54674 54675 55106\nf 54674 55106 55105\nf 54675 54681 55106\nf 54676 55107 54682\nf 54677 54683 55112\nf 54677 55108 55103\nf 54677 55112 55108\nf 54678 54680 54679\nf 54679 54680 55109\nf 54679 55109 54684\nf 54680 55104 55109\nf 54681 54685 55114\nf 54681 55110 55106\nf 54681 55114 55110\nf 54682 55107 55111\nf 54682 55111 54686\nf 54683 54687 55116\nf 54683 55116 55112\nf 54684 55109 55113\nf 54684 55113 54688\nf 54685 54689 55120\nf 54685 55120 55114\nf 54686 55111 55115\nf 54686 55115 54690\nf 54687 54691 55116\nf 54688 55113 55119\nf 54688 55119 54693\nf 54689 54694 55124\nf 54689 55124 55120\nf 54690 55115 55121\nf 54690 55121 54695\nf 54691 54692 55117\nf 54691 54696 54692\nf 54691 55117 55116\nf 54692 54696 54697\nf 54692 54697 55126\nf 54692 55122 55117\nf 54692 55126 55122\nf 54693 55119 55123\nf 54693 55123 54698\nf 54694 54699 55129\nf 54694 55129 55124\nf 54695 55121 55125\nf 54695 55125 54700\nf 54696 54701 55132\nf 54696 55132 54697\nf 54697 55127 55126\nf 54697 55132 55127\nf 54698 55123 55128\nf 54698 55128 54702\nf 54699 54703 55135\nf 54699 55135 55129\nf 54700 55125 55130\nf 54700 55130 54704\nf 54701 54705 55132\nf 54702 55128 55134\nf 54702 55134 54708\nf 54703 54709 55139\nf 54703 55139 55135\nf 54704 55130 55136\nf 54704 55136 54710\nf 54705 54706 54707\nf 54705 54707 55133\nf 54705 55133 55132\nf 54706 54711 54707\nf 54707 54711 55137\nf 54707 55137 55133\nf 54708 55134 55138\nf 54708 55138 54715\nf 54709 54717 55149\nf 54709 55149 55139\nf 54710 55136 55140\nf 54710 55140 54718\nf 54711 54712 55142\nf 54711 55141 55137\nf 54711 55142 55141\nf 54712 54713 55142\nf 54713 54714 55144\nf 54713 55144 55142\nf 54714 54719 55145\nf 54714 55145 55144\nf 54715 55138 55146\nf 54715 55146 54716\nf 54716 55146 55147\nf 54716 55147 55236\nf 54716 55236 54804\nf 54717 54806 55238\nf 54717 55238 55149\nf 54718 55140 55150\nf 54718 55150 54807\nf 54719 54720 55152\nf 54719 55151 55145\nf 54719 55152 55151\nf 54720 54721 55152\nf 54721 54722 55153\nf 54721 55153 55152\nf 54722 54723 55154\nf 54722 55154 55153\nf 54723 54724 55155\nf 54723 55155 55154\nf 54724 54725 55156\nf 54724 55156 55155\nf 54725 54726 55157\nf 54725 55157 55156\nf 54726 54727 55158\nf 54726 55158 55157\nf 54727 54728 55159\nf 54727 55159 55158\nf 54728 54729 55160\nf 54728 55160 55159\nf 54729 54730 55161\nf 54729 55161 55160\nf 54730 54731 55162\nf 54730 55162 55161\nf 54731 54732 55163\nf 54731 55163 55162\nf 54732 54733 55164\nf 54732 55164 55163\nf 54733 54734 55165\nf 54733 55165 55164\nf 54734 54735 55166\nf 54734 55166 55165\nf 54735 54736 55167\nf 54735 55167 55166\nf 54736 54737 55168\nf 54736 55168 55167\nf 54737 54738 55169\nf 54737 55169 55168\nf 54738 54739 55170\nf 54738 55170 55169\nf 54739 54740 55171\nf 54739 55171 55170\nf 54740 54741 55172\nf 54740 55172 55171\nf 54741 54742 55173\nf 54741 55173 55172\nf 54742 54743 55174\nf 54742 55174 55173\nf 54743 54744 55175\nf 54743 55175 55174\nf 54744 54745 55176\nf 54744 55176 55175\nf 54745 54746 55177\nf 54745 55177 55176\nf 54746 54747 55178\nf 54746 55178 55177\nf 54747 54748 55179\nf 54747 55179 55178\nf 54748 54749 55180\nf 54748 55180 55179\nf 54749 54750 55181\nf 54749 55181 55180\nf 54750 54751 55182\nf 54750 55182 55181\nf 54751 54752 55183\nf 54751 55183 55182\nf 54752 54753 55184\nf 54752 55184 55183\nf 54753 54754 55185\nf 54753 55185 55184\nf 54754 54755 55186\nf 54754 55186 55185\nf 54755 54756 55187\nf 54755 55187 55186\nf 54756 54757 55188\nf 54756 55188 55187\nf 54757 54758 55189\nf 54757 55189 55188\nf 54758 54759 55190\nf 54758 55190 55189\nf 54759 54760 55191\nf 54759 55191 55190\nf 54760 54761 55192\nf 54760 55192 55191\nf 54761 54762 55193\nf 54761 55193 55192\nf 54762 54763 55194\nf 54762 55194 55193\nf 54763 54764 55195\nf 54763 55195 55194\nf 54764 54765 55196\nf 54764 55196 55195\nf 54765 54766 55197\nf 54765 55197 55196\nf 54766 54767 55198\nf 54766 55198 55197\nf 54767 54768 55199\nf 54767 55199 55198\nf 54768 54769 55200\nf 54768 55200 55199\nf 54769 54770 55201\nf 54769 55201 55200\nf 54770 54771 55202\nf 54770 55202 55201\nf 54771 54772 55203\nf 54771 55203 55202\nf 54772 54773 55204\nf 54772 55204 55203\nf 54773 54774 55205\nf 54773 55205 55204\nf 54774 54775 55206\nf 54774 55206 55205\nf 54775 54776 55207\nf 54775 55207 55206\nf 54776 54777 55208\nf 54776 55208 55207\nf 54777 54778 55209\nf 54777 55209 55208\nf 54778 54779 55210\nf 54778 55210 55209\nf 54779 54780 55211\nf 54779 55211 55210\nf 54780 54781 55212\nf 54780 55212 55211\nf 54781 54782 55213\nf 54781 55213 55212\nf 54782 54783 55214\nf 54782 55214 55213\nf 54783 54784 55215\nf 54783 55215 55214\nf 54784 54785 55216\nf 54784 55216 55215\nf 54785 54786 55217\nf 54785 55217 55216\nf 54786 54787 55218\nf 54786 55218 55217\nf 54787 54788 55219\nf 54787 55219 55218\nf 54788 54789 55220\nf 54788 55220 55219\nf 54789 54790 55221\nf 54789 55221 55220\nf 54790 54791 55222\nf 54790 55222 55221\nf 54791 54792 55223\nf 54791 55223 55222\nf 54792 54793 55224\nf 54792 55224 55223\nf 54793 54794 55225\nf 54793 55225 55224\nf 54794 54795 55226\nf 54794 55226 55225\nf 54795 54796 55227\nf 54795 55227 55226\nf 54796 54797 55228\nf 54796 55228 55227\nf 54797 54798 55229\nf 54797 55229 55228\nf 54798 54799 55230\nf 54798 55230 55229\nf 54799 54800 55231\nf 54799 55231 55230\nf 54800 54801 55232\nf 54800 55232 55231\nf 54801 54802 55233\nf 54801 55233 55232\nf 54802 54803 55234\nf 54802 55234 55233\nf 54803 54805 55235\nf 54803 55235 55234\nf 54804 55236 54805\nf 54805 55236 55237\nf 54805 55237 55235\nf 54806 54808 55240\nf 54806 55240 55238\nf 54807 55150 55239\nf 54807 55239 54809\nf 54808 54811 55243\nf 54808 55243 55240\nf 54809 55239 55241\nf 54809 55241 55242\nf 54809 55242 54810\nf 54810 55242 54813\nf 54811 54812 55243\nf 54812 54814 55246\nf 54812 55244 55243\nf 54812 55246 55244\nf 54813 55242 55245\nf 54813 55245 54815\nf 54814 54817 55249\nf 54814 55249 55246\nf 54815 55245 55247\nf 54815 55247 54819\nf 54816 54827 55259\nf 54816 55248 55250\nf 54816 55250 54818\nf 54816 55259 55248\nf 54817 54818 55249\nf 54818 55250 55249\nf 54819 55247 55251\nf 54819 55251 55252\nf 54819 55252 54820\nf 54820 55252 55253\nf 54820 55253 54821\nf 54821 55253 54829\nf 54822 54916 55346\nf 54822 55254 55255\nf 54822 55255 54823\nf 54822 55346 55254\nf 54823 55255 55256\nf 54823 55256 54824\nf 54824 55256 55257\nf 54824 55257 54825\nf 54825 55257 55258\nf 54825 55258 54826\nf 54826 55258 55260\nf 54826 55260 54828\nf 54827 54828 55259\nf 54828 55260 55259\nf 54829 55253 55261\nf 54829 55261 55262\nf 54829 55262 54830\nf 54830 55262 55263\nf 54830 55263 54831\nf 54831 55263 54832\nf 54832 54919 54918\nf 54832 55263 54919\nf 54833 54922 54924\nf 54833 54924 55353\nf 54833 55264 54834\nf 54833 55353 55264\nf 54834 55264 55265\nf 54834 55265 54835\nf 54835 55265 55266\nf 54835 55266 54836\nf 54836 55266 55267\nf 54836 55267 54837\nf 54837 55267 55268\nf 54837 55268 54838\nf 54838 55268 55269\nf 54838 55269 54839\nf 54839 55269 55270\nf 54839 55270 54840\nf 54840 55270 55271\nf 54840 55271 54841\nf 54841 55271 55272\nf 54841 55272 54842\nf 54842 55272 55273\nf 54842 55273 54843\nf 54843 55273 55274\nf 54843 55274 54844\nf 54844 55274 55275\nf 54844 55275 54845\nf 54845 55275 55276\nf 54845 55276 54846\nf 54846 55276 55277\nf 54846 55277 54847\nf 54847 55277 55278\nf 54847 55278 54848\nf 54848 55278 55279\nf 54848 55279 54849\nf 54849 55279 55280\nf 54849 55280 54850\nf 54850 55280 55281\nf 54850 55281 54851\nf 54851 55281 55282\nf 54851 55282 54852\nf 54852 55282 55283\nf 54852 55283 54853\nf 54853 55283 55284\nf 54853 55284 54854\nf 54854 55284 55285\nf 54854 55285 54855\nf 54855 55285 55286\nf 54855 55286 54856\nf 54856 55286 55287\nf 54856 55287 54857\nf 54857 55287 55288\nf 54857 55288 54858\nf 54858 55288 55289\nf 54858 55289 54859\nf 54859 55289 55290\nf 54859 55290 54860\nf 54860 55290 55291\nf 54860 55291 54861\nf 54861 55291 55292\nf 54861 55292 54862\nf 54862 55292 55293\nf 54862 55293 54863\nf 54863 55293 55294\nf 54863 55294 54864\nf 54864 55294 55295\nf 54864 55295 54865\nf 54865 55295 55296\nf 54865 55296 54866\nf 54866 55296 55297\nf 54866 55297 54867\nf 54867 55297 55298\nf 54867 55298 54868\nf 54868 55298 55299\nf 54868 55299 54869\nf 54869 55299 55300\nf 54869 55300 54870\nf 54870 55300 55301\nf 54870 55301 54871\nf 54871 55301 55302\nf 54871 55302 54872\nf 54872 55302 55303\nf 54872 55303 54873\nf 54873 55303 55304\nf 54873 55304 54874\nf 54874 55304 55305\nf 54874 55305 54875\nf 54875 55305 55306\nf 54875 55306 54876\nf 54876 55306 55307\nf 54876 55307 54877\nf 54877 55307 55308\nf 54877 55308 54878\nf 54878 55308 55309\nf 54878 55309 54879\nf 54879 55309 55310\nf 54879 55310 54880\nf 54880 55310 55311\nf 54880 55311 54881\nf 54881 55311 55312\nf 54881 55312 54882\nf 54882 55312 55313\nf 54882 55313 54883\nf 54883 55313 55314\nf 54883 55314 54884\nf 54884 55314 55315\nf 54884 55315 54885\nf 54885 55315 55316\nf 54885 55316 54886\nf 54886 55316 55317\nf 54886 55317 54887\nf 54887 55317 55318\nf 54887 55318 54888\nf 54888 55318 55319\nf 54888 55319 54889\nf 54889 55319 55320\nf 54889 55320 54890\nf 54890 55320 55321\nf 54890 55321 54891\nf 54891 55321 55322\nf 54891 55322 54892\nf 54892 55322 55323\nf 54892 55323 54893\nf 54893 55323 55324\nf 54893 55324 54894\nf 54894 55324 55325\nf 54894 55325 54895\nf 54895 55325 55326\nf 54895 55326 54896\nf 54896 55326 55327\nf 54896 55327 54897\nf 54897 55327 55328\nf 54897 55328 54898\nf 54898 55328 55329\nf 54898 55329 54899\nf 54899 55329 55330\nf 54899 55330 54900\nf 54900 55330 55331\nf 54900 55331 54901\nf 54901 55331 55332\nf 54901 55332 54902\nf 54902 55332 55333\nf 54902 55333 54903\nf 54903 55333 55334\nf 54903 55334 54904\nf 54904 55334 55335\nf 54904 55335 54905\nf 54905 55335 55336\nf 54905 55336 54906\nf 54906 55336 55337\nf 54906 55337 54907\nf 54907 55337 55338\nf 54907 55338 54908\nf 54908 55338 55339\nf 54908 55339 54909\nf 54909 55339 55340\nf 54909 55340 54910\nf 54910 55340 55341\nf 54910 55341 54911\nf 54911 55341 55342\nf 54911 55342 54912\nf 54912 55342 55343\nf 54912 55343 54913\nf 54913 55343 55344\nf 54913 55344 54914\nf 54914 55344 55345\nf 54914 55345 54915\nf 54915 55345 55347\nf 54915 55347 54917\nf 54916 54917 55346\nf 54917 55347 55346\nf 54918 54919 55349\nf 54918 55349 54920\nf 54919 55263 55348\nf 54919 55348 55349\nf 54920 55349 55350\nf 54920 55350 55351\nf 54920 55351 54921\nf 54921 55351 55352\nf 54921 55352 54923\nf 54922 54923 54924\nf 54923 55352 55354\nf 54923 55354 54924\nf 54924 55354 55353\nf 54925 54926 55357\nf 54925 55357 55362\nf 54925 55362 54930\nf 54926 54927 55356\nf 54926 54928 55359\nf 54926 55356 55357\nf 54926 55359 54927\nf 54927 55355 55356\nf 54927 55358 55355\nf 54927 55359 55358\nf 54928 54929 55359\nf 54929 54932 55361\nf 54929 55361 55359\nf 54930 55362 54931\nf 54931 55362 55363\nf 54931 55363 55366\nf 54931 55366 54933\nf 54932 54934 55367\nf 54932 55365 55361\nf 54932 55367 55365\nf 54933 55366 54936\nf 54934 54935 55368\nf 54934 55368 55367\nf 54935 54938 55368\nf 54936 55366 55370\nf 54936 55370 54937\nf 54937 55370 55371\nf 54937 55371 55373\nf 54937 55373 54939\nf 54938 54940 55374\nf 54938 55372 55368\nf 54938 55374 55372\nf 54939 55373 54941\nf 54940 54942 55376\nf 54940 55376 55374\nf 54941 55373 55375\nf 54941 55375 54943\nf 54942 54944 55378\nf 54942 55378 55376\nf 54943 55375 55377\nf 54943 55377 54945\nf 54944 54946 55380\nf 54944 55380 55378\nf 54945 55377 55379\nf 54945 55379 54947\nf 54946 54948 55380\nf 54947 55379 55383\nf 54947 55383 54951\nf 54948 54949 54950\nf 54948 54950 55381\nf 54948 55381 55380\nf 54949 54952 54950\nf 54950 54952 55384\nf 54950 55384 55381\nf 54951 55383 55385\nf 54951 55385 54953\nf 54952 54954 55388\nf 54952 55386 55384\nf 54952 55388 55386\nf 54953 55385 55387\nf 54953 55387 54956\nf 54954 54955 55390\nf 54954 55390 55388\nf 54955 54957 54958\nf 54955 54958 55390\nf 54956 55387 55389\nf 54956 55389 54959\nf 54957 54960 54958\nf 54958 54960 54961\nf 54958 54961 55392\nf 54958 55392 55390\nf 54959 55389 55391\nf 54959 55391 54962\nf 54960 54964 55396\nf 54960 55396 54961\nf 54961 55393 55392\nf 54961 55396 55393\nf 54962 55391 55394\nf 54962 55394 55395\nf 54962 55395 54963\nf 54963 55395 54965\nf 54964 54966 55400\nf 54964 55400 55396\nf 54965 55395 55398\nf 54965 55398 54967\nf 54966 54968 55402\nf 54966 55402 55400\nf 54967 55398 55401\nf 54967 55401 54970\nf 54968 54969 55402\nf 54969 54972 55406\nf 54969 55403 55402\nf 54969 55406 55403\nf 54970 55401 55404\nf 54970 55404 55405\nf 54970 55405 54971\nf 54971 55405 54974\nf 54972 54973 55410\nf 54972 55410 55406\nf 54973 54977 54979\nf 54973 54979 55410\nf 54974 55405 55407\nf 54974 55407 55408\nf 54974 55408 54975\nf 54975 55408 54976\nf 54976 54980 55413\nf 54976 55408 54980\nf 54976 55409 54978\nf 54976 55413 55409\nf 54977 54978 54979\nf 54978 55409 55411\nf 54978 55411 54979\nf 54979 55411 55410\nf 54980 55408 55412\nf 54980 55412 55414\nf 54980 55414 55413\nf 54981 54982 55416\nf 54981 55416 55419\nf 54981 55419 54984\nf 54982 54983 55417\nf 54982 55417 55416\nf 54983 54986 55418\nf 54983 55418 55417\nf 54984 55419 55421\nf 54984 55421 54985\nf 54985 54988 54987\nf 54985 55421 54988\nf 54986 54989 55423\nf 54986 55420 55418\nf 54986 55423 55420\nf 54987 54988 55426\nf 54987 55426 54991\nf 54988 55421 55422\nf 54988 55422 55426\nf 54989 54990 55424\nf 54989 55424 55423\nf 54990 54992 55424\nf 54991 55426 54993\nf 54992 54994 55429\nf 54992 55427 55424\nf 54992 55429 55427\nf 54993 55426 55428\nf 54993 55428 54995\nf 54994 54996 55431\nf 54994 55431 55429\nf 54995 55428 55430\nf 54995 55430 54997\nf 54996 54998 55433\nf 54996 55433 55431\nf 54997 55430 55432\nf 54997 55432 54999\nf 54998 55000 55435\nf 54998 55435 55433\nf 54999 55432 55434\nf 54999 55434 55001\nf 55000 55002 55437\nf 55000 55437 55435\nf 55001 55434 55436\nf 55001 55436 55003\nf 55002 55004 55439\nf 55002 55439 55437\nf 55003 55436 55438\nf 55003 55438 55005\nf 55004 55006 55441\nf 55004 55441 55439\nf 55005 55438 55440\nf 55005 55440 55007\nf 55006 55008 55443\nf 55006 55443 55441\nf 55007 55440 55442\nf 55007 55442 55009\nf 55008 55010 55445\nf 55008 55445 55443\nf 55009 55442 55444\nf 55009 55444 55011\nf 55010 55012 55447\nf 55010 55447 55445\nf 55011 55444 55446\nf 55011 55446 55014\nf 55012 55013 55447\nf 55013 55015 55450\nf 55013 55448 55447\nf 55013 55450 55448\nf 55014 55446 55449\nf 55014 55449 55016\nf 55015 55018 55453\nf 55015 55453 55450\nf 55016 55449 55451\nf 55016 55451 55017\nf 55017 55451 55452\nf 55017 55452 55454\nf 55017 55454 55019\nf 55018 55020 55455\nf 55018 55455 55453\nf 55019 55454 55022\nf 55020 55021 55455\nf 55021 55023 55460\nf 55021 55456 55455\nf 55021 55460 55456\nf 55022 55454 55457\nf 55022 55457 55024\nf 55023 55027 55462\nf 55023 55462 55460\nf 55024 55026 55025\nf 55024 55457 55458\nf 55024 55458 55026\nf 55025 55026 55029\nf 55026 55458 55461\nf 55026 55461 55029\nf 55027 55028 55462\nf 55028 55031 55466\nf 55028 55463 55462\nf 55028 55466 55463\nf 55029 55461 55464\nf 55029 55464 55465\nf 55029 55465 55030\nf 55030 55465 55467\nf 55030 55467 55032\nf 55031 55032 55466\nf 55032 55467 55466\nf 55033 55034 55469\nf 55033 55043 55041\nf 55033 55469 55477\nf 55033 55477 55043\nf 55034 55035 55469\nf 55035 55036 55470\nf 55035 55470 55469\nf 55036 55037 55471\nf 55036 55471 55470\nf 55037 55038 55472\nf 55037 55472 55471\nf 55038 55039 55473\nf 55038 55473 55472\nf 55039 55040 55474\nf 55039 55474 55473\nf 55040 55044 55475\nf 55040 55475 55474\nf 55041 55043 55042\nf 55042 55043 55478\nf 55042 55476 55483\nf 55042 55478 55476\nf 55042 55483 55048\nf 55043 55477 55478\nf 55044 55045 55481\nf 55044 55480 55475\nf 55044 55481 55480\nf 55045 55046 55481\nf 55046 55047 55482\nf 55046 55482 55481\nf 55047 55050 55051\nf 55047 55051 55482\nf 55048 55483 55049\nf 55049 55483 55484\nf 55049 55484 55488\nf 55049 55488 55053\nf 55050 55052 55486\nf 55050 55486 55051\nf 55051 55485 55482\nf 55051 55486 55485\nf 55052 55055 55487\nf 55052 55487 55486\nf 55053 55488 55054\nf 55054 55488 55489\nf 55054 55489 55493\nf 55054 55493 55057\nf 55055 55056 55492\nf 55055 55491 55487\nf 55055 55492 55491\nf 55056 55058 55492\nf 55057 55493 55060\nf 55058 55059 55495\nf 55058 55494 55492\nf 55058 55495 55494\nf 55059 55063 55495\nf 55060 55493 55496\nf 55060 55496 55497\nf 55060 55497 55061\nf 55061 55497 55498\nf 55061 55498 55062\nf 55062 55498 55065\nf 55063 55064 55499\nf 55063 55499 55495\nf 55064 55071 55510\nf 55064 55500 55499\nf 55064 55510 55500\nf 55065 55498 55502\nf 55065 55502 55504\nf 55065 55504 55066\nf 55066 55504 55505\nf 55066 55505 55067\nf 55067 55505 55506\nf 55067 55506 55068\nf 55068 55506 55507\nf 55068 55507 55069\nf 55069 55507 55508\nf 55069 55508 55073\nf 55070 55082 55519\nf 55070 55509 55511\nf 55070 55511 55072\nf 55070 55519 55509\nf 55071 55072 55510\nf 55072 55511 55510\nf 55073 55075 55074\nf 55073 55508 55075\nf 55074 55075 55513\nf 55074 55513 55076\nf 55075 55508 55512\nf 55075 55512 55513\nf 55076 55513 55514\nf 55076 55514 55077\nf 55077 55514 55515\nf 55077 55515 55078\nf 55078 55515 55516\nf 55078 55516 55079\nf 55079 55516 55517\nf 55079 55517 55080\nf 55080 55517 55518\nf 55080 55518 55081\nf 55081 55518 55520\nf 55081 55520 55083\nf 55082 55083 55519\nf 55083 55520 55519\nf 55084 55085 55521\nf 55084 55521 55528\nf 55084 55528 55091\nf 55085 55086 55522\nf 55085 55522 55521\nf 55086 55087 55523\nf 55086 55523 55522\nf 55087 55093 55524\nf 55087 55524 55523\nf 55088 55089 55525\nf 55088 55525 55532\nf 55088 55532 55095\nf 55089 55090 55526\nf 55089 55526 55525\nf 55090 55096 55527\nf 55090 55527 55526\nf 55091 55528 55092\nf 55092 55528 55529\nf 55092 55529 55536\nf 55092 55536 55098\nf 55093 55094 55531\nf 55093 55530 55524\nf 55093 55531 55530\nf 55094 55099 55531\nf 55095 55532 55100\nf 55096 55097 55535\nf 55096 55534 55527\nf 55096 55535 55534\nf 55097 55103 55535\nf 55098 55536 55104\nf 55099 55105 55541\nf 55099 55537 55531\nf 55099 55541 55537\nf 55100 55102 55101\nf 55100 55532 55102\nf 55101 55102 55538\nf 55101 55538 55107\nf 55102 55532 55533\nf 55102 55533 55538\nf 55103 55108 55544\nf 55103 55539 55535\nf 55103 55544 55539\nf 55104 55536 55540\nf 55104 55540 55109\nf 55105 55106 55542\nf 55105 55542 55541\nf 55106 55110 55542\nf 55107 55538 55543\nf 55107 55543 55111\nf 55108 55112 55548\nf 55108 55548 55544\nf 55109 55540 55545\nf 55109 55545 55113\nf 55110 55114 55551\nf 55110 55546 55542\nf 55110 55551 55546\nf 55111 55543 55547\nf 55111 55547 55115\nf 55112 55116 55548\nf 55113 55545 55550\nf 55113 55550 55119\nf 55114 55120 55555\nf 55114 55555 55551\nf 55115 55547 55552\nf 55115 55552 55121\nf 55116 55117 55118\nf 55116 55118 55549\nf 55116 55549 55548\nf 55117 55122 55118\nf 55118 55122 55553\nf 55118 55553 55549\nf 55119 55550 55554\nf 55119 55554 55123\nf 55120 55124 55559\nf 55120 55559 55555\nf 55121 55552 55556\nf 55121 55556 55125\nf 55122 55126 55563\nf 55122 55557 55553\nf 55122 55563 55557\nf 55123 55554 55558\nf 55123 55558 55128\nf 55124 55129 55566\nf 55124 55566 55559\nf 55125 55556 55560\nf 55125 55560 55130\nf 55126 55127 55563\nf 55127 55132 55569\nf 55127 55564 55563\nf 55127 55569 55564\nf 55128 55558 55565\nf 55128 55565 55134\nf 55129 55135 55573\nf 55129 55573 55566\nf 55130 55131 55568\nf 55130 55560 55131\nf 55130 55568 55574\nf 55130 55574 55136\nf 55131 55560 55561\nf 55131 55561 55567\nf 55131 55567 55568\nf 55132 55133 55570\nf 55132 55570 55569\nf 55133 55137 55570\nf 55134 55565 55572\nf 55134 55572 55138\nf 55135 55139 55579\nf 55135 55579 55573\nf 55136 55574 55140\nf 55137 55141 55575\nf 55137 55575 55570\nf 55138 55572 55577\nf 55138 55577 55146\nf 55139 55149 55585\nf 55139 55585 55579\nf 55140 55574 55580\nf 55140 55580 55150\nf 55141 55142 55143\nf 55141 55143 55576\nf 55141 55576 55575\nf 55142 55144 55582\nf 55142 55582 55143\nf 55143 55581 55576\nf 55143 55582 55581\nf 55144 55145 55582\nf 55145 55151 55583\nf 55145 55583 55582\nf 55146 55148 55147\nf 55146 55577 55148\nf 55147 55148 55584\nf 55147 55584 55236\nf 55148 55577 55578\nf 55148 55578 55584\nf 55149 55238 55676\nf 55149 55676 55585\nf 55150 55580 55586\nf 55150 55586 55239\nf 55151 55152 55588\nf 55151 55587 55583\nf 55151 55588 55587\nf 55152 55153 55588\nf 55153 55154 55590\nf 55153 55590 55588\nf 55154 55155 55591\nf 55154 55591 55590\nf 55155 55156 55592\nf 55155 55592 55591\nf 55156 55157 55593\nf 55156 55593 55592\nf 55157 55158 55594\nf 55157 55594 55593\nf 55158 55159 55595\nf 55158 55595 55594\nf 55159 55160 55596\nf 55159 55596 55595\nf 55160 55161 55597\nf 55160 55597 55596\nf 55161 55162 55598\nf 55161 55598 55597\nf 55162 55163 55599\nf 55162 55599 55598\nf 55163 55164 55600\nf 55163 55600 55599\nf 55164 55165 55601\nf 55164 55601 55600\nf 55165 55166 55602\nf 55165 55602 55601\nf 55166 55167 55603\nf 55166 55603 55602\nf 55167 55168 55604\nf 55167 55604 55603\nf 55168 55169 55605\nf 55168 55605 55604\nf 55169 55170 55606\nf 55169 55606 55605\nf 55170 55171 55607\nf 55170 55607 55606\nf 55171 55172 55608\nf 55171 55608 55607\nf 55172 55173 55609\nf 55172 55609 55608\nf 55173 55174 55610\nf 55173 55610 55609\nf 55174 55175 55611\nf 55174 55611 55610\nf 55175 55176 55612\nf 55175 55612 55611\nf 55176 55177 55613\nf 55176 55613 55612\nf 55177 55178 55614\nf 55177 55614 55613\nf 55178 55179 55615\nf 55178 55615 55614\nf 55179 55180 55616\nf 55179 55616 55615\nf 55180 55181 55617\nf 55180 55617 55616\nf 55181 55182 55618\nf 55181 55618 55617\nf 55182 55183 55619\nf 55182 55619 55618\nf 55183 55184 55620\nf 55183 55620 55619\nf 55184 55185 55621\nf 55184 55621 55620\nf 55185 55186 55622\nf 55185 55622 55621\nf 55186 55187 55623\nf 55186 55623 55622\nf 55187 55188 55624\nf 55187 55624 55623\nf 55188 55189 55625\nf 55188 55625 55624\nf 55189 55190 55626\nf 55189 55626 55625\nf 55190 55191 55627\nf 55190 55627 55626\nf 55191 55192 55628\nf 55191 55628 55627\nf 55192 55193 55629\nf 55192 55629 55628\nf 55193 55194 55630\nf 55193 55630 55629\nf 55194 55195 55631\nf 55194 55631 55630\nf 55195 55196 55632\nf 55195 55632 55631\nf 55196 55197 55633\nf 55196 55633 55632\nf 55197 55198 55634\nf 55197 55634 55633\nf 55198 55199 55635\nf 55198 55635 55634\nf 55199 55200 55636\nf 55199 55636 55635\nf 55200 55201 55637\nf 55200 55637 55636\nf 55201 55202 55638\nf 55201 55638 55637\nf 55202 55203 55639\nf 55202 55639 55638\nf 55203 55204 55640\nf 55203 55640 55639\nf 55204 55205 55641\nf 55204 55641 55640\nf 55205 55206 55642\nf 55205 55642 55641\nf 55206 55207 55643\nf 55206 55643 55642\nf 55207 55208 55644\nf 55207 55644 55643\nf 55208 55209 55645\nf 55208 55645 55644\nf 55209 55210 55646\nf 55209 55646 55645\nf 55210 55211 55647\nf 55210 55647 55646\nf 55211 55212 55648\nf 55211 55648 55647\nf 55212 55213 55649\nf 55212 55649 55648\nf 55213 55214 55650\nf 55213 55650 55649\nf 55214 55215 55651\nf 55214 55651 55650\nf 55215 55216 55652\nf 55215 55652 55651\nf 55216 55217 55653\nf 55216 55653 55652\nf 55217 55218 55654\nf 55217 55654 55653\nf 55218 55219 55655\nf 55218 55655 55654\nf 55219 55220 55656\nf 55219 55656 55655\nf 55220 55221 55657\nf 55220 55657 55656\nf 55221 55222 55658\nf 55221 55658 55657\nf 55222 55223 55659\nf 55222 55659 55658\nf 55223 55224 55660\nf 55223 55660 55659\nf 55224 55225 55661\nf 55224 55661 55660\nf 55225 55226 55662\nf 55225 55662 55661\nf 55226 55227 55663\nf 55226 55663 55662\nf 55227 55228 55664\nf 55227 55664 55663\nf 55228 55229 55665\nf 55228 55665 55664\nf 55229 55230 55666\nf 55229 55666 55665\nf 55230 55231 55667\nf 55230 55667 55666\nf 55231 55232 55668\nf 55231 55668 55667\nf 55232 55233 55669\nf 55232 55669 55668\nf 55233 55234 55670\nf 55233 55670 55669\nf 55234 55235 55671\nf 55234 55671 55670\nf 55235 55237 55672\nf 55235 55672 55671\nf 55236 55584 55673\nf 55236 55673 55237\nf 55237 55673 55674\nf 55237 55674 55672\nf 55238 55240 55678\nf 55238 55678 55676\nf 55239 55586 55677\nf 55239 55677 55241\nf 55240 55243 55681\nf 55240 55681 55678\nf 55241 55677 55679\nf 55241 55679 55680\nf 55241 55680 55242\nf 55242 55680 55245\nf 55243 55244 55681\nf 55244 55246 55684\nf 55244 55682 55681\nf 55244 55684 55682\nf 55245 55680 55683\nf 55245 55683 55247\nf 55246 55249 55687\nf 55246 55687 55684\nf 55247 55683 55685\nf 55247 55685 55251\nf 55248 55259 55698\nf 55248 55686 55688\nf 55248 55688 55250\nf 55248 55698 55686\nf 55249 55250 55687\nf 55250 55688 55687\nf 55251 55685 55690\nf 55251 55690 55691\nf 55251 55691 55252\nf 55252 55691 55692\nf 55252 55692 55253\nf 55253 55692 55261\nf 55254 55346 55785\nf 55254 55693 55694\nf 55254 55694 55255\nf 55254 55785 55693\nf 55255 55694 55695\nf 55255 55695 55256\nf 55256 55695 55696\nf 55256 55696 55257\nf 55257 55696 55697\nf 55257 55697 55258\nf 55258 55697 55699\nf 55258 55699 55260\nf 55259 55260 55698\nf 55260 55699 55698\nf 55261 55692 55700\nf 55261 55700 55701\nf 55261 55701 55262\nf 55262 55701 55702\nf 55262 55702 55263\nf 55263 55702 55348\nf 55264 55353 55793\nf 55264 55703 55704\nf 55264 55704 55265\nf 55264 55793 55703\nf 55265 55704 55705\nf 55265 55705 55266\nf 55266 55705 55706\nf 55266 55706 55267\nf 55267 55706 55707\nf 55267 55707 55268\nf 55268 55707 55708\nf 55268 55708 55269\nf 55269 55708 55709\nf 55269 55709 55270\nf 55270 55709 55710\nf 55270 55710 55271\nf 55271 55710 55711\nf 55271 55711 55272\nf 55272 55711 55712\nf 55272 55712 55273\nf 55273 55712 55713\nf 55273 55713 55274\nf 55274 55713 55714\nf 55274 55714 55275\nf 55275 55714 55715\nf 55275 55715 55276\nf 55276 55715 55716\nf 55276 55716 55277\nf 55277 55716 55717\nf 55277 55717 55278\nf 55278 55717 55718\nf 55278 55718 55279\nf 55279 55718 55719\nf 55279 55719 55280\nf 55280 55719 55720\nf 55280 55720 55281\nf 55281 55720 55721\nf 55281 55721 55282\nf 55282 55721 55722\nf 55282 55722 55283\nf 55283 55722 55723\nf 55283 55723 55284\nf 55284 55723 55724\nf 55284 55724 55285\nf 55285 55724 55725\nf 55285 55725 55286\nf 55286 55725 55726\nf 55286 55726 55287\nf 55287 55726 55727\nf 55287 55727 55288\nf 55288 55727 55728\nf 55288 55728 55289\nf 55289 55728 55729\nf 55289 55729 55290\nf 55290 55729 55730\nf 55290 55730 55291\nf 55291 55730 55731\nf 55291 55731 55292\nf 55292 55731 55732\nf 55292 55732 55293\nf 55293 55732 55733\nf 55293 55733 55294\nf 55294 55733 55734\nf 55294 55734 55295\nf 55295 55734 55735\nf 55295 55735 55296\nf 55296 55735 55736\nf 55296 55736 55297\nf 55297 55736 55737\nf 55297 55737 55298\nf 55298 55737 55738\nf 55298 55738 55299\nf 55299 55738 55739\nf 55299 55739 55300\nf 55300 55739 55740\nf 55300 55740 55301\nf 55301 55740 55741\nf 55301 55741 55302\nf 55302 55741 55742\nf 55302 55742 55303\nf 55303 55742 55743\nf 55303 55743 55304\nf 55304 55743 55744\nf 55304 55744 55305\nf 55305 55744 55745\nf 55305 55745 55306\nf 55306 55745 55746\nf 55306 55746 55307\nf 55307 55746 55747\nf 55307 55747 55308\nf 55308 55747 55748\nf 55308 55748 55309\nf 55309 55748 55749\nf 55309 55749 55310\nf 55310 55749 55750\nf 55310 55750 55311\nf 55311 55750 55751\nf 55311 55751 55312\nf 55312 55751 55752\nf 55312 55752 55313\nf 55313 55752 55753\nf 55313 55753 55314\nf 55314 55753 55754\nf 55314 55754 55315\nf 55315 55754 55755\nf 55315 55755 55316\nf 55316 55755 55756\nf 55316 55756 55317\nf 55317 55756 55757\nf 55317 55757 55318\nf 55318 55757 55758\nf 55318 55758 55319\nf 55319 55758 55759\nf 55319 55759 55320\nf 55320 55759 55760\nf 55320 55760 55321\nf 55321 55760 55761\nf 55321 55761 55322\nf 55322 55761 55762\nf 55322 55762 55323\nf 55323 55762 55763\nf 55323 55763 55324\nf 55324 55763 55764\nf 55324 55764 55325\nf 55325 55764 55765\nf 55325 55765 55326\nf 55326 55765 55766\nf 55326 55766 55327\nf 55327 55766 55767\nf 55327 55767 55328\nf 55328 55767 55768\nf 55328 55768 55329\nf 55329 55768 55769\nf 55329 55769 55330\nf 55330 55769 55770\nf 55330 55770 55331\nf 55331 55770 55771\nf 55331 55771 55332\nf 55332 55771 55772\nf 55332 55772 55333\nf 55333 55772 55773\nf 55333 55773 55334\nf 55334 55773 55774\nf 55334 55774 55335\nf 55335 55774 55775\nf 55335 55775 55336\nf 55336 55775 55776\nf 55336 55776 55337\nf 55337 55776 55777\nf 55337 55777 55338\nf 55338 55777 55778\nf 55338 55778 55339\nf 55339 55778 55779\nf 55339 55779 55340\nf 55340 55779 55780\nf 55340 55780 55341\nf 55341 55780 55781\nf 55341 55781 55342\nf 55342 55781 55782\nf 55342 55782 55343\nf 55343 55782 55783\nf 55343 55783 55344\nf 55344 55783 55784\nf 55344 55784 55345\nf 55345 55784 55786\nf 55345 55786 55347\nf 55346 55347 55785\nf 55347 55786 55785\nf 55348 55702 55788\nf 55348 55788 55789\nf 55348 55789 55349\nf 55349 55789 55790\nf 55349 55790 55350\nf 55350 55790 55791\nf 55350 55791 55351\nf 55351 55791 55792\nf 55351 55792 55352\nf 55352 55792 55794\nf 55352 55794 55354\nf 55353 55354 55793\nf 55354 55794 55793\nf 55355 55358 55797\nf 55355 55796 55799\nf 55355 55797 55796\nf 55355 55799 55356\nf 55356 55799 55357\nf 55357 55364 55362\nf 55357 55798 55364\nf 55357 55799 55800\nf 55357 55800 55798\nf 55358 55359 55360\nf 55358 55360 55797\nf 55359 55361 55803\nf 55359 55803 55360\nf 55360 55802 55797\nf 55360 55803 55802\nf 55361 55365 55803\nf 55362 55364 55363\nf 55363 55364 55804\nf 55363 55804 55366\nf 55364 55798 55804\nf 55365 55367 55805\nf 55365 55805 55803\nf 55366 55804 55807\nf 55366 55807 55370\nf 55367 55368 55369\nf 55367 55369 55806\nf 55367 55806 55805\nf 55368 55372 55369\nf 55369 55372 55808\nf 55369 55808 55806\nf 55370 55807 55809\nf 55370 55809 55371\nf 55371 55809 55810\nf 55371 55810 55812\nf 55371 55812 55373\nf 55372 55374 55813\nf 55372 55811 55808\nf 55372 55813 55811\nf 55373 55812 55375\nf 55374 55376 55815\nf 55374 55815 55813\nf 55375 55812 55814\nf 55375 55814 55377\nf 55376 55378 55818\nf 55376 55818 55815\nf 55377 55814 55817\nf 55377 55817 55379\nf 55378 55380 55818\nf 55379 55817 55821\nf 55379 55821 55383\nf 55380 55381 55382\nf 55380 55382 55819\nf 55380 55819 55818\nf 55381 55384 55382\nf 55382 55384 55822\nf 55382 55822 55819\nf 55383 55821 55823\nf 55383 55823 55385\nf 55384 55386 55826\nf 55384 55824 55822\nf 55384 55826 55824\nf 55385 55823 55825\nf 55385 55825 55387\nf 55386 55388 55828\nf 55386 55828 55826\nf 55387 55825 55827\nf 55387 55827 55389\nf 55388 55390 55830\nf 55388 55830 55828\nf 55389 55827 55829\nf 55389 55829 55391\nf 55390 55392 55832\nf 55390 55832 55830\nf 55391 55829 55831\nf 55391 55831 55394\nf 55392 55393 55834\nf 55392 55834 55832\nf 55393 55396 55397\nf 55393 55397 55834\nf 55394 55399 55395\nf 55394 55831 55833\nf 55394 55833 55836\nf 55394 55836 55399\nf 55395 55399 55398\nf 55396 55400 55838\nf 55396 55838 55397\nf 55397 55835 55834\nf 55397 55838 55835\nf 55398 55399 55837\nf 55398 55837 55839\nf 55398 55839 55401\nf 55399 55836 55837\nf 55400 55402 55840\nf 55400 55840 55838\nf 55401 55839 55404\nf 55402 55403 55840\nf 55403 55406 55844\nf 55403 55841 55840\nf 55403 55844 55841\nf 55404 55839 55842\nf 55404 55842 55843\nf 55404 55843 55405\nf 55405 55843 55407\nf 55406 55410 55848\nf 55406 55848 55844\nf 55407 55843 55846\nf 55407 55846 55847\nf 55407 55847 55408\nf 55408 55847 55412\nf 55409 55413 55415\nf 55409 55415 55852\nf 55409 55849 55411\nf 55409 55852 55849\nf 55410 55411 55848\nf 55411 55849 55848\nf 55412 55847 55850\nf 55412 55850 55851\nf 55412 55851 55414\nf 55413 55414 55415\nf 55414 55851 55853\nf 55414 55853 55415\nf 55415 55853 55852\nf 55416 55417 55854\nf 55416 55854 55858\nf 55416 55858 55419\nf 55417 55418 55855\nf 55417 55855 55854\nf 55418 55420 55856\nf 55418 55856 55855\nf 55419 55858 55421\nf 55420 55423 55859\nf 55420 55859 55856\nf 55421 55858 55861\nf 55421 55861 55422\nf 55422 55861 55862\nf 55422 55862 55864\nf 55422 55864 55426\nf 55423 55424 55425\nf 55423 55425 55860\nf 55423 55860 55859\nf 55424 55427 55425\nf 55425 55427 55863\nf 55425 55863 55860\nf 55426 55864 55428\nf 55427 55429 55867\nf 55427 55865 55863\nf 55427 55867 55865\nf 55428 55864 55866\nf 55428 55866 55430\nf 55429 55431 55869\nf 55429 55869 55867\nf 55430 55866 55868\nf 55430 55868 55432\nf 55431 55433 55871\nf 55431 55871 55869\nf 55432 55868 55870\nf 55432 55870 55434\nf 55433 55435 55874\nf 55433 55874 55871\nf 55434 55870 55873\nf 55434 55873 55436\nf 55435 55437 55876\nf 55435 55876 55874\nf 55436 55873 55875\nf 55436 55875 55438\nf 55437 55439 55878\nf 55437 55878 55876\nf 55438 55875 55877\nf 55438 55877 55440\nf 55439 55441 55880\nf 55439 55880 55878\nf 55440 55877 55879\nf 55440 55879 55442\nf 55441 55443 55882\nf 55441 55882 55880\nf 55442 55879 55881\nf 55442 55881 55444\nf 55443 55445 55884\nf 55443 55884 55882\nf 55444 55881 55883\nf 55444 55883 55446\nf 55445 55447 55886\nf 55445 55886 55884\nf 55446 55883 55885\nf 55446 55885 55449\nf 55447 55448 55886\nf 55448 55450 55889\nf 55448 55887 55886\nf 55448 55889 55887\nf 55449 55885 55888\nf 55449 55888 55451\nf 55450 55453 55893\nf 55450 55893 55889\nf 55451 55888 55891\nf 55451 55891 55452\nf 55452 55891 55892\nf 55452 55892 55894\nf 55452 55894 55454\nf 55453 55455 55897\nf 55453 55897 55893\nf 55454 55894 55457\nf 55455 55456 55897\nf 55456 55460 55900\nf 55456 55898 55897\nf 55456 55900 55898\nf 55457 55459 55458\nf 55457 55894 55895\nf 55457 55895 55459\nf 55458 55459 55461\nf 55459 55895 55899\nf 55459 55899 55461\nf 55460 55462 55903\nf 55460 55903 55900\nf 55461 55899 55901\nf 55461 55901 55464\nf 55462 55463 55903\nf 55463 55466 55468\nf 55463 55468 55902\nf 55463 55902 55904\nf 55463 55904 55903\nf 55464 55901 55905\nf 55464 55905 55907\nf 55464 55907 55465\nf 55465 55907 55467\nf 55466 55467 55468\nf 55467 55906 55468\nf 55467 55907 55906\nf 55468 55906 55902\nf 55469 55470 55909\nf 55469 55479 55477\nf 55469 55908 55479\nf 55469 55909 55908\nf 55470 55471 55910\nf 55470 55910 55909\nf 55471 55472 55911\nf 55471 55911 55910\nf 55472 55473 55912\nf 55472 55912 55911\nf 55473 55474 55913\nf 55473 55913 55912\nf 55474 55475 55914\nf 55474 55914 55913\nf 55475 55480 55915\nf 55475 55915 55914\nf 55476 55478 55917\nf 55476 55917 55922\nf 55476 55922 55483\nf 55477 55479 55478\nf 55478 55479 55916\nf 55478 55916 55917\nf 55479 55908 55916\nf 55480 55481 55919\nf 55480 55918 55915\nf 55480 55919 55918\nf 55481 55482 55919\nf 55482 55485 55920\nf 55482 55920 55919\nf 55483 55922 55484\nf 55484 55490 55488\nf 55484 55921 55490\nf 55484 55922 55923\nf 55484 55923 55921\nf 55485 55486 55926\nf 55485 55925 55920\nf 55485 55926 55925\nf 55486 55487 55926\nf 55487 55491 55927\nf 55487 55927 55926\nf 55488 55490 55489\nf 55489 55490 55928\nf 55489 55928 55493\nf 55490 55921 55928\nf 55491 55492 55930\nf 55491 55929 55927\nf 55491 55930 55929\nf 55492 55494 55930\nf 55493 55928 55931\nf 55493 55931 55496\nf 55494 55495 55501\nf 55494 55501 55937\nf 55494 55933 55930\nf 55494 55937 55933\nf 55495 55499 55501\nf 55496 55931 55934\nf 55496 55934 55936\nf 55496 55936 55497\nf 55497 55936 55498\nf 55498 55503 55502\nf 55498 55936 55503\nf 55499 55500 55501\nf 55500 55510 55937\nf 55500 55937 55501\nf 55502 55503 55939\nf 55502 55939 55504\nf 55503 55936 55938\nf 55503 55938 55939\nf 55504 55939 55940\nf 55504 55940 55941\nf 55504 55941 55505\nf 55505 55941 55942\nf 55505 55942 55506\nf 55506 55942 55943\nf 55506 55943 55507\nf 55507 55943 55944\nf 55507 55944 55508\nf 55508 55944 55512\nf 55509 55519 55957\nf 55509 55945 55947\nf 55509 55947 55511\nf 55509 55957 55945\nf 55510 55511 55946\nf 55510 55946 55937\nf 55511 55947 55946\nf 55512 55944 55949\nf 55512 55949 55950\nf 55512 55950 55513\nf 55513 55950 55952\nf 55513 55952 55514\nf 55514 55952 55953\nf 55514 55953 55515\nf 55515 55953 55954\nf 55515 55954 55516\nf 55516 55954 55955\nf 55516 55955 55517\nf 55517 55955 55956\nf 55517 55956 55518\nf 55518 55956 55958\nf 55518 55958 55520\nf 55519 55520 55957\nf 55520 55958 55957\nf 55521 55522 55959\nf 55521 55959 55966\nf 55521 55966 55528\nf 55522 55523 55960\nf 55522 55960 55959\nf 55523 55524 55961\nf 55523 55961 55960\nf 55524 55530 55962\nf 55524 55962 55961\nf 55525 55526 55963\nf 55525 55963 55970\nf 55525 55970 55532\nf 55526 55527 55964\nf 55526 55964 55963\nf 55527 55534 55965\nf 55527 55965 55964\nf 55528 55966 55529\nf 55529 55966 55967\nf 55529 55967 55974\nf 55529 55974 55536\nf 55530 55531 55969\nf 55530 55968 55962\nf 55530 55969 55968\nf 55531 55537 55969\nf 55532 55970 55533\nf 55533 55970 55971\nf 55533 55971 55976\nf 55533 55976 55538\nf 55534 55535 55973\nf 55534 55972 55965\nf 55534 55973 55972\nf 55535 55539 55973\nf 55536 55974 55540\nf 55537 55541 55979\nf 55537 55975 55969\nf 55537 55979 55975\nf 55538 55976 55543\nf 55539 55544 55982\nf 55539 55977 55973\nf 55539 55982 55977\nf 55540 55974 55978\nf 55540 55978 55545\nf 55541 55542 55980\nf 55541 55980 55979\nf 55542 55546 55980\nf 55543 55976 55981\nf 55543 55981 55547\nf 55544 55548 55986\nf 55544 55986 55982\nf 55545 55978 55983\nf 55545 55983 55550\nf 55546 55551 55990\nf 55546 55984 55980\nf 55546 55990 55984\nf 55547 55981 55985\nf 55547 55985 55552\nf 55548 55549 55987\nf 55548 55987 55986\nf 55549 55553 55987\nf 55550 55983 55989\nf 55550 55989 55554\nf 55551 55555 55994\nf 55551 55994 55990\nf 55552 55985 55991\nf 55552 55991 55556\nf 55553 55557 55997\nf 55553 55992 55987\nf 55553 55997 55992\nf 55554 55989 55993\nf 55554 55993 55558\nf 55555 55559 55999\nf 55555 55999 55994\nf 55556 55991 55995\nf 55556 55995 55560\nf 55557 55563 56001\nf 55557 56001 55997\nf 55558 55993 55998\nf 55558 55998 55565\nf 55559 55566 56003\nf 55559 56003 55999\nf 55560 55562 55561\nf 55560 55995 55562\nf 55561 55562 56000\nf 55561 56000 55567\nf 55562 55995 55996\nf 55562 55996 56000\nf 55563 55564 56006\nf 55563 56006 56001\nf 55564 55569 55571\nf 55564 55571 56006\nf 55565 55998 56002\nf 55565 56002 55572\nf 55566 55573 56008\nf 55566 56008 56003\nf 55567 56000 56004\nf 55567 56004 56005\nf 55567 56005 55568\nf 55568 56005 55574\nf 55569 55570 55571\nf 55570 55575 55571\nf 55571 55575 56006\nf 55572 56002 56007\nf 55572 56007 55577\nf 55573 55579 56016\nf 55573 56016 56008\nf 55574 56005 56009\nf 55574 56009 55580\nf 55575 55576 56012\nf 55575 56011 56006\nf 55575 56012 56011\nf 55576 55581 56012\nf 55577 56007 56013\nf 55577 56013 55578\nf 55578 56013 56014\nf 55578 56014 56022\nf 55578 56022 55584\nf 55579 55585 56024\nf 55579 56024 56016\nf 55580 56009 56017\nf 55580 56017 55586\nf 55581 55582 56019\nf 55581 56018 56012\nf 55581 56019 56018\nf 55582 55583 56019\nf 55583 55587 56021\nf 55583 56020 56019\nf 55583 56021 56020\nf 55584 56022 55673\nf 55585 55676 56111\nf 55585 56111 56024\nf 55586 56017 56025\nf 55586 56025 55677\nf 55587 55588 55589\nf 55587 55589 56021\nf 55588 55590 56027\nf 55588 56027 55589\nf 55589 56026 56021\nf 55589 56027 56026\nf 55590 55591 56027\nf 55591 55592 56028\nf 55591 56028 56027\nf 55592 55593 56029\nf 55592 56029 56028\nf 55593 55594 56030\nf 55593 56030 56029\nf 55594 55595 56031\nf 55594 56031 56030\nf 55595 55596 56032\nf 55595 56032 56031\nf 55596 55597 56033\nf 55596 56033 56032\nf 55597 55598 56034\nf 55597 56034 56033\nf 55598 55599 56035\nf 55598 56035 56034\nf 55599 55600 56036\nf 55599 56036 56035\nf 55600 55601 56037\nf 55600 56037 56036\nf 55601 55602 56038\nf 55601 56038 56037\nf 55602 55603 56039\nf 55602 56039 56038\nf 55603 55604 56040\nf 55603 56040 56039\nf 55604 55605 56041\nf 55604 56041 56040\nf 55605 55606 56042\nf 55605 56042 56041\nf 55606 55607 56043\nf 55606 56043 56042\nf 55607 55608 56044\nf 55607 56044 56043\nf 55608 55609 56045\nf 55608 56045 56044\nf 55609 55610 56046\nf 55609 56046 56045\nf 55610 55611 56047\nf 55610 56047 56046\nf 55611 55612 56048\nf 55611 56048 56047\nf 55612 55613 56049\nf 55612 56049 56048\nf 55613 55614 56050\nf 55613 56050 56049\nf 55614 55615 56051\nf 55614 56051 56050\nf 55615 55616 56052\nf 55615 56052 56051\nf 55616 55617 56053\nf 55616 56053 56052\nf 55617 55618 56054\nf 55617 56054 56053\nf 55618 55619 56055\nf 55618 56055 56054\nf 55619 55620 56056\nf 55619 56056 56055\nf 55620 55621 56057\nf 55620 56057 56056\nf 55621 55622 56058\nf 55621 56058 56057\nf 55622 55623 56059\nf 55622 56059 56058\nf 55623 55624 56060\nf 55623 56060 56059\nf 55624 55625 56061\nf 55624 56061 56060\nf 55625 55626 56062\nf 55625 56062 56061\nf 55626 55627 56063\nf 55626 56063 56062\nf 55627 55628 56064\nf 55627 56064 56063\nf 55628 55629 56065\nf 55628 56065 56064\nf 55629 55630 56066\nf 55629 56066 56065\nf 55630 55631 56067\nf 55630 56067 56066\nf 55631 55632 56068\nf 55631 56068 56067\nf 55632 55633 56069\nf 55632 56069 56068\nf 55633 55634 56070\nf 55633 56070 56069\nf 55634 55635 56071\nf 55634 56071 56070\nf 55635 55636 56072\nf 55635 56072 56071\nf 55636 55637 56073\nf 55636 56073 56072\nf 55637 55638 56074\nf 55637 56074 56073\nf 55638 55639 56075\nf 55638 56075 56074\nf 55639 55640 56076\nf 55639 56076 56075\nf 55640 55641 56077\nf 55640 56077 56076\nf 55641 55642 56078\nf 55641 56078 56077\nf 55642 55643 56079\nf 55642 56079 56078\nf 55643 55644 56080\nf 55643 56080 56079\nf 55644 55645 56081\nf 55644 56081 56080\nf 55645 55646 56082\nf 55645 56082 56081\nf 55646 55647 56083\nf 55646 56083 56082\nf 55647 55648 56084\nf 55647 56084 56083\nf 55648 55649 56085\nf 55648 56085 56084\nf 55649 55650 56086\nf 55649 56086 56085\nf 55650 55651 56087\nf 55650 56087 56086\nf 55651 55652 56088\nf 55651 56088 56087\nf 55652 55653 56089\nf 55652 56089 56088\nf 55653 55654 56090\nf 55653 56090 56089\nf 55654 55655 56091\nf 55654 56091 56090\nf 55655 55656 56092\nf 55655 56092 56091\nf 55656 55657 56093\nf 55656 56093 56092\nf 55657 55658 56094\nf 55657 56094 56093\nf 55658 55659 56095\nf 55658 56095 56094\nf 55659 55660 56096\nf 55659 56096 56095\nf 55660 55661 56097\nf 55660 56097 56096\nf 55661 55662 56098\nf 55661 56098 56097\nf 55662 55663 56099\nf 55662 56099 56098\nf 55663 55664 56100\nf 55663 56100 56099\nf 55664 55665 56101\nf 55664 56101 56100\nf 55665 55666 56102\nf 55665 56102 56101\nf 55666 55667 56103\nf 55666 56103 56102\nf 55667 55668 56104\nf 55667 56104 56103\nf 55668 55669 56105\nf 55668 56105 56104\nf 55669 55670 56106\nf 55669 56106 56105\nf 55670 55671 56107\nf 55670 56107 56106\nf 55671 55672 56108\nf 55671 56108 56107\nf 55672 55674 56110\nf 55672 56110 56108\nf 55673 55675 55674\nf 55673 56022 55675\nf 55674 55675 56109\nf 55674 56109 56110\nf 55675 56022 56023\nf 55675 56023 56109\nf 55676 55678 56113\nf 55676 56113 56111\nf 55677 56025 56112\nf 55677 56112 55679\nf 55678 55681 56116\nf 55678 56116 56113\nf 55679 56112 56114\nf 55679 56114 56115\nf 55679 56115 55680\nf 55680 56115 55683\nf 55681 55682 56116\nf 55682 55684 56119\nf 55682 56117 56116\nf 55682 56119 56117\nf 55683 56115 56118\nf 55683 56118 55685\nf 55684 55687 56119\nf 55685 56118 56121\nf 55685 56121 55690\nf 55686 55698 56133\nf 55686 56123 55688\nf 55686 56133 56123\nf 55687 55688 55689\nf 55687 55689 56119\nf 55688 56122 55689\nf 55688 56123 56122\nf 55689 56120 56119\nf 55689 56122 56120\nf 55690 56121 56124\nf 55690 56124 56125\nf 55690 56125 55691\nf 55691 56125 56126\nf 55691 56126 55692\nf 55692 56126 55700\nf 55693 55785 55787\nf 55693 55787 56127\nf 55693 56127 56128\nf 55693 56128 56129\nf 55693 56129 55694\nf 55694 56129 56130\nf 55694 56130 55695\nf 55695 56130 56131\nf 55695 56131 55696\nf 55696 56131 56132\nf 55696 56132 55697\nf 55697 56132 56134\nf 55697 56134 55699\nf 55698 55699 56133\nf 55699 56134 56133\nf 55700 56126 56135\nf 55700 56135 56136\nf 55700 56136 55701\nf 55701 56136 56137\nf 55701 56137 55702\nf 55702 56137 55788\nf 55703 55793 55795\nf 55703 55795 56226\nf 55703 56138 55704\nf 55703 56226 56138\nf 55704 56138 56139\nf 55704 56139 55705\nf 55705 56139 56140\nf 55705 56140 55706\nf 55706 56140 56141\nf 55706 56141 55707\nf 55707 56141 56142\nf 55707 56142 55708\nf 55708 56142 56143\nf 55708 56143 55709\nf 55709 56143 56144\nf 55709 56144 55710\nf 55710 56144 56145\nf 55710 56145 55711\nf 55711 56145 56146\nf 55711 56146 55712\nf 55712 56146 56147\nf 55712 56147 55713\nf 55713 56147 56148\nf 55713 56148 55714\nf 55714 56148 56149\nf 55714 56149 55715\nf 55715 56149 56150\nf 55715 56150 55716\nf 55716 56150 56151\nf 55716 56151 55717\nf 55717 56151 56152\nf 55717 56152 55718\nf 55718 56152 56153\nf 55718 56153 55719\nf 55719 56153 56154\nf 55719 56154 55720\nf 55720 56154 56155\nf 55720 56155 55721\nf 55721 56155 56156\nf 55721 56156 55722\nf 55722 56156 56157\nf 55722 56157 55723\nf 55723 56157 56158\nf 55723 56158 55724\nf 55724 56158 56159\nf 55724 56159 55725\nf 55725 56159 56160\nf 55725 56160 55726\nf 55726 56160 56161\nf 55726 56161 55727\nf 55727 56161 56162\nf 55727 56162 55728\nf 55728 56162 56163\nf 55728 56163 55729\nf 55729 56163 56164\nf 55729 56164 55730\nf 55730 56164 56165\nf 55730 56165 55731\nf 55731 56165 56166\nf 55731 56166 55732\nf 55732 56166 56167\nf 55732 56167 55733\nf 55733 56167 56168\nf 55733 56168 55734\nf 55734 56168 56169\nf 55734 56169 55735\nf 55735 56169 56170\nf 55735 56170 55736\nf 55736 56170 56171\nf 55736 56171 55737\nf 55737 56171 56172\nf 55737 56172 55738\nf 55738 56172 56173\nf 55738 56173 55739\nf 55739 56173 56174\nf 55739 56174 55740\nf 55740 56174 56175\nf 55740 56175 55741\nf 55741 56175 56176\nf 55741 56176 55742\nf 55742 56176 56177\nf 55742 56177 55743\nf 55743 56177 56178\nf 55743 56178 55744\nf 55744 56178 56179\nf 55744 56179 55745\nf 55745 56179 56180\nf 55745 56180 55746\nf 55746 56180 56181\nf 55746 56181 55747\nf 55747 56181 56182\nf 55747 56182 55748\nf 55748 56182 56183\nf 55748 56183 55749\nf 55749 56183 56184\nf 55749 56184 55750\nf 55750 56184 56185\nf 55750 56185 55751\nf 55751 56185 56186\nf 55751 56186 55752\nf 55752 56186 56187\nf 55752 56187 55753\nf 55753 56187 56188\nf 55753 56188 55754\nf 55754 56188 56189\nf 55754 56189 55755\nf 55755 56189 56190\nf 55755 56190 55756\nf 55756 56190 56191\nf 55756 56191 55757\nf 55757 56191 56192\nf 55757 56192 55758\nf 55758 56192 56193\nf 55758 56193 55759\nf 55759 56193 56194\nf 55759 56194 55760\nf 55760 56194 56195\nf 55760 56195 55761\nf 55761 56195 56196\nf 55761 56196 55762\nf 55762 56196 56197\nf 55762 56197 55763\nf 55763 56197 56198\nf 55763 56198 55764\nf 55764 56198 56199\nf 55764 56199 55765\nf 55765 56199 56200\nf 55765 56200 55766\nf 55766 56200 56201\nf 55766 56201 55767\nf 55767 56201 56202\nf 55767 56202 55768\nf 55768 56202 56203\nf 55768 56203 55769\nf 55769 56203 56204\nf 55769 56204 55770\nf 55770 56204 56205\nf 55770 56205 55771\nf 55771 56205 56206\nf 55771 56206 55772\nf 55772 56206 56207\nf 55772 56207 55773\nf 55773 56207 56208\nf 55773 56208 55774\nf 55774 56208 56209\nf 55774 56209 55775\nf 55775 56209 56210\nf 55775 56210 55776\nf 55776 56210 56211\nf 55776 56211 55777\nf 55777 56211 56212\nf 55777 56212 55778\nf 55778 56212 56213\nf 55778 56213 55779\nf 55779 56213 56214\nf 55779 56214 55780\nf 55780 56214 56215\nf 55780 56215 55781\nf 55781 56215 56216\nf 55781 56216 55782\nf 55782 56216 56217\nf 55782 56217 55783\nf 55783 56217 56219\nf 55783 56219 55784\nf 55784 56219 55786\nf 55785 55786 55787\nf 55786 56218 55787\nf 55786 56219 56218\nf 55787 56218 56127\nf 55788 56137 56220\nf 55788 56220 56221\nf 55788 56221 55789\nf 55789 56221 56222\nf 55789 56222 55790\nf 55790 56222 56223\nf 55790 56223 55791\nf 55791 56223 56224\nf 55791 56224 55792\nf 55792 56224 56225\nf 55792 56225 55794\nf 55793 55794 55795\nf 55794 56225 56227\nf 55794 56227 55795\nf 55795 56227 56226\nf 55796 55797 56229\nf 55796 55801 55799\nf 55796 56228 55801\nf 55796 56229 56228\nf 55797 55802 56230\nf 55797 56230 56229\nf 55798 55800 56232\nf 55798 56232 56235\nf 55798 56235 55804\nf 55799 55801 55800\nf 55800 55801 56231\nf 55800 56231 56232\nf 55801 56228 56231\nf 55802 55803 56234\nf 55802 56233 56230\nf 55802 56234 56233\nf 55803 55805 56234\nf 55804 56235 55807\nf 55805 55806 56237\nf 55805 56236 56234\nf 55805 56237 56236\nf 55806 55808 56237\nf 55807 56235 56238\nf 55807 56238 55809\nf 55808 55811 56243\nf 55808 56239 56237\nf 55808 56243 56239\nf 55809 56238 56240\nf 55809 56240 55810\nf 55810 56240 56241\nf 55810 56241 56244\nf 55810 56244 55812\nf 55811 55813 56245\nf 55811 56245 56243\nf 55812 56244 55814\nf 55813 55815 56245\nf 55814 56244 56247\nf 55814 56247 55817\nf 55815 55816 56246\nf 55815 55818 55816\nf 55815 56246 56245\nf 55816 55818 55820\nf 55816 55820 56250\nf 55816 56248 56246\nf 55816 56250 56248\nf 55817 56247 56249\nf 55817 56249 55821\nf 55818 55819 55820\nf 55819 55822 55820\nf 55820 55822 56250\nf 55821 56249 56251\nf 55821 56251 55823\nf 55822 55824 56254\nf 55822 56252 56250\nf 55822 56254 56252\nf 55823 56251 56253\nf 55823 56253 55825\nf 55824 55826 56256\nf 55824 56256 56254\nf 55825 56253 56255\nf 55825 56255 55827\nf 55826 55828 56258\nf 55826 56258 56256\nf 55827 56255 56257\nf 55827 56257 55829\nf 55828 55830 56260\nf 55828 56260 56258\nf 55829 56257 56259\nf 55829 56259 55831\nf 55830 55832 56262\nf 55830 56262 56260\nf 55831 56259 56261\nf 55831 56261 55833\nf 55832 55834 56264\nf 55832 56264 56262\nf 55833 56261 56263\nf 55833 56263 55836\nf 55834 55835 56264\nf 55835 55838 56268\nf 55835 56265 56264\nf 55835 56268 56265\nf 55836 56263 56266\nf 55836 56266 56267\nf 55836 56267 55837\nf 55837 56267 55839\nf 55838 55840 56270\nf 55838 56270 56268\nf 55839 56267 56269\nf 55839 56269 55842\nf 55840 55841 56273\nf 55840 56273 56270\nf 55841 55844 55845\nf 55841 55845 56273\nf 55842 56269 56271\nf 55842 56271 56272\nf 55842 56272 55843\nf 55843 56272 55846\nf 55844 55848 56277\nf 55844 56277 55845\nf 55845 56274 56273\nf 55845 56277 56274\nf 55846 56272 56275\nf 55846 56275 56276\nf 55846 56276 55847\nf 55847 56276 55850\nf 55848 55849 56277\nf 55849 55852 56282\nf 55849 56278 56277\nf 55849 56282 56278\nf 55850 56276 56279\nf 55850 56279 56281\nf 55850 56281 55851\nf 55851 56281 56283\nf 55851 56283 55853\nf 55852 55853 56282\nf 55853 56283 56282\nf 55854 55855 56285\nf 55854 56285 56290\nf 55854 56290 55858\nf 55855 55856 56287\nf 55855 56287 56285\nf 55856 55857 56286\nf 55856 55859 55857\nf 55856 56286 56287\nf 55857 55859 56289\nf 55857 56284 56286\nf 55857 56289 56284\nf 55858 56290 55861\nf 55859 55860 56292\nf 55859 56291 56289\nf 55859 56292 56291\nf 55860 55863 56292\nf 55861 56290 56293\nf 55861 56293 55862\nf 55862 56293 56294\nf 55862 56294 56296\nf 55862 56296 55864\nf 55863 55865 56297\nf 55863 56295 56292\nf 55863 56297 56295\nf 55864 56296 55866\nf 55865 55867 56299\nf 55865 56299 56297\nf 55866 56296 56298\nf 55866 56298 55868\nf 55867 55869 56301\nf 55867 56301 56299\nf 55868 56298 56300\nf 55868 56300 55870\nf 55869 55871 56301\nf 55870 56300 56304\nf 55870 56304 55873\nf 55871 55872 56302\nf 55871 55874 56308\nf 55871 56302 56301\nf 55871 56308 55872\nf 55872 56305 56302\nf 55872 56306 56305\nf 55872 56308 56306\nf 55873 56304 56307\nf 55873 56307 55875\nf 55874 55876 56311\nf 55874 56311 56308\nf 55875 56307 56310\nf 55875 56310 55877\nf 55876 55878 56314\nf 55876 56314 56311\nf 55877 56310 56313\nf 55877 56313 55879\nf 55878 55880 56316\nf 55878 56316 56314\nf 55879 56313 56315\nf 55879 56315 55881\nf 55880 55882 56318\nf 55880 56318 56316\nf 55881 56315 56317\nf 55881 56317 55883\nf 55882 55884 56320\nf 55882 56320 56318\nf 55883 56317 56319\nf 55883 56319 55885\nf 55884 55886 56322\nf 55884 56322 56320\nf 55885 56319 56321\nf 55885 56321 55888\nf 55886 55887 56324\nf 55886 56324 56322\nf 55887 55889 55890\nf 55887 55890 56324\nf 55888 56321 56323\nf 55888 56323 55891\nf 55889 55893 56327\nf 55889 56327 55890\nf 55890 56325 56324\nf 55890 56327 56325\nf 55891 56323 56326\nf 55891 56326 56328\nf 55891 56328 55892\nf 55892 55896 55894\nf 55892 56328 55896\nf 55893 55897 56329\nf 55893 56329 56327\nf 55894 55896 55895\nf 55895 55896 55899\nf 55896 56328 55899\nf 55897 55898 56329\nf 55898 55900 56332\nf 55898 56330 56329\nf 55898 56332 56330\nf 55899 56328 56331\nf 55899 56331 55901\nf 55900 55903 56335\nf 55900 56335 56332\nf 55901 56331 56333\nf 55901 56333 55905\nf 55902 55906 56339\nf 55902 56334 56336\nf 55902 56336 55904\nf 55902 56339 56334\nf 55903 55904 56335\nf 55904 56336 56335\nf 55905 56333 56338\nf 55905 56338 56340\nf 55905 56340 55907\nf 55906 55907 56339\nf 55907 56340 56339\nf 55908 55909 56341\nf 55908 56341 56350\nf 55908 56350 55916\nf 55909 55910 56342\nf 55909 56342 56341\nf 55910 55911 56343\nf 55910 56343 56342\nf 55911 55912 56344\nf 55911 56344 56343\nf 55912 55913 56345\nf 55912 56345 56344\nf 55913 55914 56346\nf 55913 56346 56345\nf 55914 55915 56347\nf 55914 56347 56346\nf 55915 55918 56348\nf 55915 56348 56347\nf 55916 56350 55917\nf 55917 55924 55922\nf 55917 56349 55924\nf 55917 56350 56351\nf 55917 56351 56349\nf 55918 55919 56354\nf 55918 56352 56348\nf 55918 56354 56352\nf 55919 55920 56354\nf 55920 55925 56355\nf 55920 56355 56354\nf 55921 55923 56357\nf 55921 56357 56361\nf 55921 56361 55928\nf 55922 55924 55923\nf 55923 55924 56356\nf 55923 56356 56357\nf 55924 56349 56356\nf 55925 55926 56359\nf 55925 56358 56355\nf 55925 56359 56358\nf 55926 55927 56359\nf 55927 55929 56360\nf 55927 56360 56359\nf 55928 56361 55931\nf 55929 55930 56366\nf 55929 56364 56360\nf 55929 56366 56364\nf 55930 55933 56366\nf 55931 55932 55935\nf 55931 55935 55934\nf 55931 56361 55932\nf 55932 56361 56362\nf 55932 56362 56367\nf 55932 56367 55935\nf 55933 55937 56373\nf 55933 56368 56366\nf 55933 56373 56368\nf 55934 55935 56371\nf 55934 56371 55936\nf 55935 56367 56370\nf 55935 56370 56371\nf 55936 56371 56372\nf 55936 56372 55938\nf 55937 55946 56373\nf 55938 56372 56375\nf 55938 56375 56377\nf 55938 56377 55939\nf 55939 56377 56378\nf 55939 56378 55940\nf 55940 56378 56379\nf 55940 56379 55941\nf 55941 56379 56380\nf 55941 56380 55942\nf 55942 56380 56381\nf 55942 56381 55943\nf 55943 56381 56382\nf 55943 56382 55944\nf 55944 56382 56383\nf 55944 56383 55949\nf 55945 55957 56394\nf 55945 56385 55947\nf 55945 56394 56385\nf 55946 55947 55948\nf 55946 55948 56373\nf 55947 56384 55948\nf 55947 56385 56384\nf 55948 56374 56373\nf 55948 56384 56374\nf 55949 55951 55950\nf 55949 56383 55951\nf 55950 55951 56387\nf 55950 56387 55952\nf 55951 56383 56386\nf 55951 56386 56387\nf 55952 56387 56389\nf 55952 56389 55953\nf 55953 56389 56390\nf 55953 56390 55954\nf 55954 56390 56391\nf 55954 56391 55955\nf 55955 56391 56392\nf 55955 56392 55956\nf 55956 56392 56395\nf 55956 56395 55958\nf 55957 55958 56394\nf 55958 56395 56394\nf 55959 55960 56397\nf 55959 56397 56404\nf 55959 56404 55966\nf 55960 55961 56398\nf 55960 56398 56397\nf 55961 55962 56399\nf 55961 56399 56398\nf 55962 55968 56400\nf 55962 56400 56399\nf 55963 55964 56401\nf 55963 56401 56408\nf 55963 56408 55970\nf 55964 55965 56402\nf 55964 56402 56401\nf 55965 55972 56403\nf 55965 56403 56402\nf 55966 56404 55967\nf 55967 56404 56405\nf 55967 56405 56412\nf 55967 56412 55974\nf 55968 55969 56407\nf 55968 56406 56400\nf 55968 56407 56406\nf 55969 55975 56407\nf 55970 56408 55971\nf 55971 56408 56409\nf 55971 56409 56415\nf 55971 56415 55976\nf 55972 55973 56411\nf 55972 56410 56403\nf 55972 56411 56410\nf 55973 55977 56411\nf 55974 56412 55978\nf 55975 55979 56418\nf 55975 56414 56407\nf 55975 56418 56414\nf 55976 56415 55981\nf 55977 55982 56422\nf 55977 56416 56411\nf 55977 56422 56416\nf 55978 56412 56417\nf 55978 56417 55983\nf 55979 55980 56419\nf 55979 56419 56418\nf 55980 55984 56419\nf 55981 56415 56421\nf 55981 56421 55985\nf 55982 55986 56422\nf 55983 56417 56424\nf 55983 56424 55989\nf 55984 55990 56429\nf 55984 56425 56419\nf 55984 56429 56425\nf 55985 56421 56426\nf 55985 56426 55991\nf 55986 55987 55988\nf 55986 55988 56423\nf 55986 56423 56422\nf 55987 55992 55988\nf 55988 55992 56427\nf 55988 56427 56423\nf 55989 56424 56428\nf 55989 56428 55993\nf 55990 55994 56433\nf 55990 56433 56429\nf 55991 56426 56430\nf 55991 56430 55995\nf 55992 55997 56436\nf 55992 56431 56427\nf 55992 56436 56431\nf 55993 56428 56432\nf 55993 56432 55998\nf 55994 55999 56438\nf 55994 56438 56433\nf 55995 56430 56434\nf 55995 56434 55996\nf 55996 56434 56435\nf 55996 56435 56439\nf 55996 56439 56000\nf 55997 56001 56440\nf 55997 56440 56436\nf 55998 56432 56437\nf 55998 56437 56002\nf 55999 56003 56442\nf 55999 56442 56438\nf 56000 56439 56004\nf 56001 56006 56444\nf 56001 56444 56440\nf 56002 56437 56441\nf 56002 56441 56007\nf 56003 56008 56447\nf 56003 56447 56442\nf 56004 56010 56005\nf 56004 56439 56443\nf 56004 56443 56448\nf 56004 56448 56010\nf 56005 56010 56009\nf 56006 56011 56450\nf 56006 56450 56444\nf 56007 56441 56445\nf 56007 56445 56013\nf 56008 56016 56453\nf 56008 56453 56447\nf 56009 56010 56449\nf 56009 56449 56454\nf 56009 56454 56017\nf 56010 56448 56449\nf 56011 56012 56451\nf 56011 56451 56450\nf 56012 56018 56451\nf 56013 56015 56014\nf 56013 56445 56015\nf 56014 56015 56452\nf 56014 56452 56022\nf 56015 56445 56446\nf 56015 56446 56452\nf 56016 56024 56462\nf 56016 56462 56453\nf 56017 56454 56025\nf 56018 56019 56456\nf 56018 56455 56451\nf 56018 56456 56455\nf 56019 56020 56456\nf 56020 56021 56458\nf 56020 56458 56456\nf 56021 56026 56459\nf 56021 56459 56458\nf 56022 56452 56460\nf 56022 56460 56023\nf 56023 56460 56461\nf 56023 56461 56547\nf 56023 56547 56109\nf 56024 56111 56549\nf 56024 56549 56462\nf 56025 56454 56463\nf 56025 56463 56112\nf 56026 56027 56465\nf 56026 56464 56459\nf 56026 56465 56464\nf 56027 56028 56465\nf 56028 56029 56466\nf 56028 56466 56465\nf 56029 56030 56467\nf 56029 56467 56466\nf 56030 56031 56468\nf 56030 56468 56467\nf 56031 56032 56469\nf 56031 56469 56468\nf 56032 56033 56470\nf 56032 56470 56469\nf 56033 56034 56471\nf 56033 56471 56470\nf 56034 56035 56472\nf 56034 56472 56471\nf 56035 56036 56473\nf 56035 56473 56472\nf 56036 56037 56474\nf 56036 56474 56473\nf 56037 56038 56475\nf 56037 56475 56474\nf 56038 56039 56476\nf 56038 56476 56475\nf 56039 56040 56477\nf 56039 56477 56476\nf 56040 56041 56478\nf 56040 56478 56477\nf 56041 56042 56479\nf 56041 56479 56478\nf 56042 56043 56480\nf 56042 56480 56479\nf 56043 56044 56481\nf 56043 56481 56480\nf 56044 56045 56482\nf 56044 56482 56481\nf 56045 56046 56483\nf 56045 56483 56482\nf 56046 56047 56484\nf 56046 56484 56483\nf 56047 56048 56485\nf 56047 56485 56484\nf 56048 56049 56486\nf 56048 56486 56485\nf 56049 56050 56487\nf 56049 56487 56486\nf 56050 56051 56488\nf 56050 56488 56487\nf 56051 56052 56489\nf 56051 56489 56488\nf 56052 56053 56490\nf 56052 56490 56489\nf 56053 56054 56491\nf 56053 56491 56490\nf 56054 56055 56492\nf 56054 56492 56491\nf 56055 56056 56493\nf 56055 56493 56492\nf 56056 56057 56494\nf 56056 56494 56493\nf 56057 56058 56495\nf 56057 56495 56494\nf 56058 56059 56496\nf 56058 56496 56495\nf 56059 56060 56497\nf 56059 56497 56496\nf 56060 56061 56498\nf 56060 56498 56497\nf 56061 56062 56499\nf 56061 56499 56498\nf 56062 56063 56500\nf 56062 56500 56499\nf 56063 56064 56501\nf 56063 56501 56500\nf 56064 56065 56502\nf 56064 56502 56501\nf 56065 56066 56503\nf 56065 56503 56502\nf 56066 56067 56504\nf 56066 56504 56503\nf 56067 56068 56505\nf 56067 56505 56504\nf 56068 56069 56506\nf 56068 56506 56505\nf 56069 56070 56507\nf 56069 56507 56506\nf 56070 56071 56508\nf 56070 56508 56507\nf 56071 56072 56509\nf 56071 56509 56508\nf 56072 56073 56510\nf 56072 56510 56509\nf 56073 56074 56511\nf 56073 56511 56510\nf 56074 56075 56512\nf 56074 56512 56511\nf 56075 56076 56513\nf 56075 56513 56512\nf 56076 56077 56514\nf 56076 56514 56513\nf 56077 56078 56515\nf 56077 56515 56514\nf 56078 56079 56516\nf 56078 56516 56515\nf 56079 56080 56517\nf 56079 56517 56516\nf 56080 56081 56518\nf 56080 56518 56517\nf 56081 56082 56519\nf 56081 56519 56518\nf 56082 56083 56520\nf 56082 56520 56519\nf 56083 56084 56521\nf 56083 56521 56520\nf 56084 56085 56522\nf 56084 56522 56521\nf 56085 56086 56523\nf 56085 56523 56522\nf 56086 56087 56524\nf 56086 56524 56523\nf 56087 56088 56525\nf 56087 56525 56524\nf 56088 56089 56526\nf 56088 56526 56525\nf 56089 56090 56527\nf 56089 56527 56526\nf 56090 56091 56528\nf 56090 56528 56527\nf 56091 56092 56529\nf 56091 56529 56528\nf 56092 56093 56530\nf 56092 56530 56529\nf 56093 56094 56531\nf 56093 56531 56530\nf 56094 56095 56532\nf 56094 56532 56531\nf 56095 56096 56533\nf 56095 56533 56532\nf 56096 56097 56534\nf 56096 56534 56533\nf 56097 56098 56535\nf 56097 56535 56534\nf 56098 56099 56536\nf 56098 56536 56535\nf 56099 56100 56537\nf 56099 56537 56536\nf 56100 56101 56538\nf 56100 56538 56537\nf 56101 56102 56539\nf 56101 56539 56538\nf 56102 56103 56540\nf 56102 56540 56539\nf 56103 56104 56541\nf 56103 56541 56540\nf 56104 56105 56542\nf 56104 56542 56541\nf 56105 56106 56543\nf 56105 56543 56542\nf 56106 56107 56544\nf 56106 56544 56543\nf 56107 56108 56545\nf 56107 56545 56544\nf 56108 56110 56546\nf 56108 56546 56545\nf 56109 56547 56110\nf 56110 56547 56548\nf 56110 56548 56546\nf 56111 56113 56551\nf 56111 56551 56549\nf 56112 56463 56550\nf 56112 56550 56114\nf 56113 56116 56554\nf 56113 56554 56551\nf 56114 56550 56552\nf 56114 56552 56553\nf 56114 56553 56115\nf 56115 56553 56118\nf 56116 56117 56554\nf 56117 56119 56558\nf 56117 56555 56554\nf 56117 56558 56555\nf 56118 56553 56556\nf 56118 56556 56121\nf 56119 56120 56558\nf 56120 56122 56561\nf 56120 56559 56558\nf 56120 56561 56559\nf 56121 56556 56560\nf 56121 56560 56124\nf 56122 56123 56561\nf 56123 56133 56572\nf 56123 56562 56561\nf 56123 56572 56562\nf 56124 56560 56563\nf 56124 56563 56564\nf 56124 56564 56125\nf 56125 56564 56565\nf 56125 56565 56126\nf 56126 56565 56135\nf 56127 56218 56657\nf 56127 56566 56567\nf 56127 56567 56128\nf 56127 56657 56566\nf 56128 56567 56568\nf 56128 56568 56129\nf 56129 56568 56569\nf 56129 56569 56130\nf 56130 56569 56570\nf 56130 56570 56131\nf 56131 56570 56571\nf 56131 56571 56132\nf 56132 56571 56573\nf 56132 56573 56134\nf 56133 56134 56572\nf 56134 56573 56572\nf 56135 56565 56574\nf 56135 56574 56575\nf 56135 56575 56136\nf 56136 56575 56576\nf 56136 56576 56137\nf 56137 56576 56220\nf 56138 56226 56666\nf 56138 56577 56578\nf 56138 56578 56139\nf 56138 56666 56577\nf 56139 56578 56579\nf 56139 56579 56140\nf 56140 56579 56580\nf 56140 56580 56141\nf 56141 56580 56581\nf 56141 56581 56142\nf 56142 56581 56582\nf 56142 56582 56143\nf 56143 56582 56583\nf 56143 56583 56144\nf 56144 56583 56584\nf 56144 56584 56145\nf 56145 56584 56585\nf 56145 56585 56146\nf 56146 56585 56586\nf 56146 56586 56147\nf 56147 56586 56587\nf 56147 56587 56148\nf 56148 56587 56588\nf 56148 56588 56149\nf 56149 56588 56589\nf 56149 56589 56150\nf 56150 56589 56590\nf 56150 56590 56151\nf 56151 56590 56591\nf 56151 56591 56152\nf 56152 56591 56592\nf 56152 56592 56153\nf 56153 56592 56593\nf 56153 56593 56154\nf 56154 56593 56594\nf 56154 56594 56155\nf 56155 56594 56595\nf 56155 56595 56156\nf 56156 56595 56596\nf 56156 56596 56157\nf 56157 56596 56597\nf 56157 56597 56158\nf 56158 56597 56598\nf 56158 56598 56159\nf 56159 56598 56599\nf 56159 56599 56160\nf 56160 56599 56600\nf 56160 56600 56161\nf 56161 56600 56601\nf 56161 56601 56162\nf 56162 56601 56602\nf 56162 56602 56163\nf 56163 56602 56603\nf 56163 56603 56164\nf 56164 56603 56604\nf 56164 56604 56165\nf 56165 56604 56605\nf 56165 56605 56166\nf 56166 56605 56606\nf 56166 56606 56167\nf 56167 56606 56607\nf 56167 56607 56168\nf 56168 56607 56608\nf 56168 56608 56169\nf 56169 56608 56609\nf 56169 56609 56170\nf 56170 56609 56610\nf 56170 56610 56171\nf 56171 56610 56611\nf 56171 56611 56172\nf 56172 56611 56612\nf 56172 56612 56173\nf 56173 56612 56613\nf 56173 56613 56174\nf 56174 56613 56614\nf 56174 56614 56175\nf 56175 56614 56615\nf 56175 56615 56176\nf 56176 56615 56616\nf 56176 56616 56177\nf 56177 56616 56617\nf 56177 56617 56178\nf 56178 56617 56618\nf 56178 56618 56179\nf 56179 56618 56619\nf 56179 56619 56180\nf 56180 56619 56620\nf 56180 56620 56181\nf 56181 56620 56621\nf 56181 56621 56182\nf 56182 56621 56622\nf 56182 56622 56183\nf 56183 56622 56623\nf 56183 56623 56184\nf 56184 56623 56624\nf 56184 56624 56185\nf 56185 56624 56625\nf 56185 56625 56186\nf 56186 56625 56626\nf 56186 56626 56187\nf 56187 56626 56627\nf 56187 56627 56188\nf 56188 56627 56628\nf 56188 56628 56189\nf 56189 56628 56629\nf 56189 56629 56190\nf 56190 56629 56630\nf 56190 56630 56191\nf 56191 56630 56631\nf 56191 56631 56192\nf 56192 56631 56632\nf 56192 56632 56193\nf 56193 56632 56633\nf 56193 56633 56194\nf 56194 56633 56634\nf 56194 56634 56195\nf 56195 56634 56635\nf 56195 56635 56196\nf 56196 56635 56636\nf 56196 56636 56197\nf 56197 56636 56637\nf 56197 56637 56198\nf 56198 56637 56638\nf 56198 56638 56199\nf 56199 56638 56639\nf 56199 56639 56200\nf 56200 56639 56640\nf 56200 56640 56201\nf 56201 56640 56641\nf 56201 56641 56202\nf 56202 56641 56642\nf 56202 56642 56203\nf 56203 56642 56643\nf 56203 56643 56204\nf 56204 56643 56644\nf 56204 56644 56205\nf 56205 56644 56645\nf 56205 56645 56206\nf 56206 56645 56646\nf 56206 56646 56207\nf 56207 56646 56647\nf 56207 56647 56208\nf 56208 56647 56648\nf 56208 56648 56209\nf 56209 56648 56649\nf 56209 56649 56210\nf 56210 56649 56650\nf 56210 56650 56211\nf 56211 56650 56651\nf 56211 56651 56212\nf 56212 56651 56652\nf 56212 56652 56213\nf 56213 56652 56653\nf 56213 56653 56214\nf 56214 56653 56654\nf 56214 56654 56215\nf 56215 56654 56655\nf 56215 56655 56216\nf 56216 56655 56656\nf 56216 56656 56217\nf 56217 56656 56658\nf 56217 56658 56219\nf 56218 56219 56657\nf 56219 56658 56657\nf 56220 56576 56660\nf 56220 56660 56661\nf 56220 56661 56221\nf 56221 56661 56662\nf 56221 56662 56222\nf 56222 56662 56663\nf 56222 56663 56223\nf 56223 56663 56664\nf 56223 56664 56224\nf 56224 56664 56665\nf 56224 56665 56225\nf 56225 56665 56667\nf 56225 56667 56227\nf 56226 56227 56666\nf 56227 56667 56666\nf 56228 56229 56668\nf 56228 56668 56671\nf 56228 56671 56231\nf 56229 56230 56669\nf 56229 56669 56668\nf 56230 56233 56670\nf 56230 56670 56669\nf 56231 56671 56232\nf 56232 56671 56672\nf 56232 56672 56676\nf 56232 56676 56235\nf 56233 56234 56674\nf 56233 56673 56670\nf 56233 56674 56673\nf 56234 56236 56674\nf 56235 56676 56238\nf 56236 56237 56678\nf 56236 56677 56674\nf 56236 56678 56677\nf 56237 56239 56678\nf 56238 56676 56680\nf 56238 56680 56240\nf 56239 56243 56684\nf 56239 56682 56678\nf 56239 56684 56682\nf 56240 56242 56241\nf 56240 56680 56242\nf 56241 56242 56683\nf 56241 56683 56244\nf 56242 56680 56681\nf 56242 56681 56683\nf 56243 56245 56686\nf 56243 56686 56684\nf 56244 56683 56685\nf 56244 56685 56247\nf 56245 56246 56687\nf 56245 56687 56686\nf 56246 56248 56687\nf 56247 56685 56688\nf 56247 56688 56249\nf 56248 56250 56691\nf 56248 56689 56687\nf 56248 56691 56689\nf 56249 56688 56690\nf 56249 56690 56251\nf 56250 56252 56693\nf 56250 56693 56691\nf 56251 56690 56692\nf 56251 56692 56253\nf 56252 56254 56695\nf 56252 56695 56693\nf 56253 56692 56694\nf 56253 56694 56255\nf 56254 56256 56697\nf 56254 56697 56695\nf 56255 56694 56696\nf 56255 56696 56257\nf 56256 56258 56699\nf 56256 56699 56697\nf 56257 56696 56698\nf 56257 56698 56259\nf 56258 56260 56701\nf 56258 56701 56699\nf 56259 56698 56700\nf 56259 56700 56261\nf 56260 56262 56703\nf 56260 56703 56701\nf 56261 56700 56702\nf 56261 56702 56263\nf 56262 56264 56705\nf 56262 56705 56703\nf 56263 56702 56704\nf 56263 56704 56266\nf 56264 56265 56705\nf 56265 56268 56709\nf 56265 56706 56705\nf 56265 56709 56706\nf 56266 56704 56707\nf 56266 56707 56708\nf 56266 56708 56267\nf 56267 56708 56269\nf 56268 56270 56712\nf 56268 56712 56709\nf 56269 56708 56711\nf 56269 56711 56271\nf 56270 56273 56715\nf 56270 56715 56712\nf 56271 56711 56713\nf 56271 56713 56714\nf 56271 56714 56272\nf 56272 56714 56275\nf 56273 56274 56715\nf 56274 56277 56718\nf 56274 56716 56715\nf 56274 56718 56716\nf 56275 56280 56276\nf 56275 56714 56717\nf 56275 56717 56720\nf 56275 56720 56280\nf 56276 56280 56279\nf 56277 56278 56718\nf 56278 56282 56723\nf 56278 56719 56718\nf 56278 56723 56719\nf 56279 56280 56721\nf 56279 56721 56281\nf 56280 56720 56721\nf 56281 56721 56722\nf 56281 56722 56724\nf 56281 56724 56283\nf 56282 56283 56723\nf 56283 56724 56723\nf 56284 56288 56286\nf 56284 56289 56727\nf 56284 56726 56288\nf 56284 56727 56726\nf 56285 56287 56730\nf 56285 56730 56732\nf 56285 56732 56290\nf 56286 56288 56287\nf 56287 56288 56729\nf 56287 56729 56730\nf 56288 56726 56729\nf 56289 56291 56733\nf 56289 56731 56727\nf 56289 56733 56731\nf 56290 56732 56293\nf 56291 56292 56734\nf 56291 56734 56733\nf 56292 56295 56734\nf 56293 56732 56736\nf 56293 56736 56294\nf 56294 56736 56737\nf 56294 56737 56739\nf 56294 56739 56296\nf 56295 56297 56740\nf 56295 56738 56734\nf 56295 56740 56738\nf 56296 56739 56298\nf 56297 56299 56742\nf 56297 56742 56740\nf 56298 56739 56741\nf 56298 56741 56300\nf 56299 56301 56742\nf 56300 56741 56744\nf 56300 56744 56304\nf 56301 56302 56303\nf 56301 56303 56743\nf 56301 56743 56742\nf 56302 56305 56303\nf 56303 56305 56745\nf 56303 56745 56743\nf 56304 56744 56746\nf 56304 56746 56307\nf 56305 56306 56749\nf 56305 56747 56745\nf 56305 56749 56747\nf 56306 56308 56309\nf 56306 56309 56749\nf 56307 56746 56748\nf 56307 56748 56310\nf 56308 56311 56309\nf 56309 56311 56312\nf 56309 56312 56751\nf 56309 56751 56749\nf 56310 56748 56750\nf 56310 56750 56313\nf 56311 56314 56754\nf 56311 56754 56312\nf 56312 56752 56751\nf 56312 56754 56752\nf 56313 56750 56753\nf 56313 56753 56315\nf 56314 56316 56757\nf 56314 56757 56754\nf 56315 56753 56756\nf 56315 56756 56317\nf 56316 56318 56759\nf 56316 56759 56757\nf 56317 56756 56758\nf 56317 56758 56319\nf 56318 56320 56761\nf 56318 56761 56759\nf 56319 56758 56760\nf 56319 56760 56321\nf 56320 56322 56764\nf 56320 56764 56761\nf 56321 56760 56762\nf 56321 56762 56323\nf 56322 56324 56766\nf 56322 56766 56764\nf 56323 56762 56765\nf 56323 56765 56326\nf 56324 56325 56766\nf 56325 56327 56769\nf 56325 56767 56766\nf 56325 56769 56767\nf 56326 56765 56768\nf 56326 56768 56328\nf 56327 56329 56771\nf 56327 56771 56769\nf 56328 56768 56770\nf 56328 56770 56331\nf 56329 56330 56771\nf 56330 56332 56774\nf 56330 56772 56771\nf 56330 56774 56772\nf 56331 56770 56773\nf 56331 56773 56333\nf 56332 56335 56774\nf 56333 56773 56776\nf 56333 56776 56338\nf 56334 56339 56780\nf 56334 56778 56336\nf 56334 56780 56778\nf 56335 56336 56337\nf 56335 56337 56774\nf 56336 56777 56337\nf 56336 56778 56777\nf 56337 56775 56774\nf 56337 56777 56775\nf 56338 56776 56779\nf 56338 56779 56781\nf 56338 56781 56340\nf 56339 56340 56780\nf 56340 56781 56780\nf 56341 56342 56782\nf 56341 56782 56790\nf 56341 56790 56350\nf 56342 56343 56783\nf 56342 56783 56782\nf 56343 56344 56784\nf 56343 56784 56783\nf 56344 56345 56785\nf 56344 56785 56784\nf 56345 56346 56786\nf 56345 56786 56785\nf 56346 56347 56787\nf 56346 56787 56786\nf 56347 56348 56788\nf 56347 56788 56787\nf 56348 56352 56353\nf 56348 56353 56788\nf 56349 56351 56789\nf 56349 56789 56799\nf 56349 56799 56356\nf 56350 56790 56351\nf 56351 56790 56791\nf 56351 56791 56789\nf 56352 56354 56795\nf 56352 56795 56353\nf 56353 56793 56788\nf 56353 56795 56793\nf 56354 56355 56796\nf 56354 56796 56795\nf 56355 56358 56797\nf 56355 56797 56796\nf 56356 56799 56357\nf 56357 56363 56361\nf 56357 56798 56363\nf 56357 56799 56800\nf 56357 56800 56798\nf 56358 56359 56804\nf 56358 56802 56797\nf 56358 56804 56802\nf 56359 56360 56804\nf 56360 56364 56365\nf 56360 56365 56804\nf 56361 56363 56362\nf 56362 56363 56805\nf 56362 56805 56367\nf 56363 56798 56805\nf 56364 56366 56808\nf 56364 56808 56365\nf 56365 56807 56804\nf 56365 56808 56807\nf 56366 56368 56369\nf 56366 56369 56810\nf 56366 56810 56808\nf 56367 56805 56809\nf 56367 56809 56370\nf 56368 56373 56814\nf 56368 56811 56369\nf 56368 56814 56811\nf 56369 56811 56810\nf 56370 56809 56812\nf 56370 56812 56813\nf 56370 56813 56371\nf 56371 56813 56372\nf 56372 56376 56375\nf 56372 56813 56376\nf 56373 56374 56814\nf 56374 56384 56830\nf 56374 56815 56814\nf 56374 56830 56815\nf 56375 56376 56818\nf 56375 56818 56377\nf 56376 56813 56817\nf 56376 56817 56818\nf 56377 56818 56820\nf 56377 56820 56821\nf 56377 56821 56378\nf 56378 56821 56822\nf 56378 56822 56379\nf 56379 56822 56823\nf 56379 56823 56380\nf 56380 56823 56824\nf 56380 56824 56381\nf 56381 56824 56825\nf 56381 56825 56382\nf 56382 56825 56826\nf 56382 56826 56383\nf 56383 56826 56827\nf 56383 56827 56386\nf 56384 56385 56830\nf 56385 56394 56396\nf 56385 56396 56829\nf 56385 56829 56831\nf 56385 56831 56830\nf 56386 56388 56387\nf 56386 56827 56388\nf 56387 56388 56834\nf 56387 56834 56389\nf 56388 56827 56833\nf 56388 56833 56834\nf 56389 56834 56836\nf 56389 56836 56390\nf 56390 56836 56839\nf 56390 56839 56391\nf 56391 56839 56392\nf 56392 56393 56395\nf 56392 56838 56393\nf 56392 56839 56838\nf 56393 56396 56395\nf 56393 56828 56829\nf 56393 56829 56396\nf 56393 56838 56828\nf 56394 56395 56396\nf 56397 56398 56841\nf 56397 56841 56848\nf 56397 56848 56404\nf 56398 56399 56842\nf 56398 56842 56841\nf 56399 56400 56843\nf 56399 56843 56842\nf 56400 56406 56844\nf 56400 56844 56843\nf 56401 56402 56845\nf 56401 56845 56852\nf 56401 56852 56408\nf 56402 56403 56846\nf 56402 56846 56845\nf 56403 56410 56847\nf 56403 56847 56846\nf 56404 56848 56856\nf 56404 56856 56405\nf 56405 56413 56412\nf 56405 56856 56413\nf 56406 56407 56851\nf 56406 56850 56844\nf 56406 56851 56850\nf 56407 56414 56851\nf 56408 56852 56409\nf 56409 56852 56853\nf 56409 56853 56860\nf 56409 56860 56415\nf 56410 56411 56855\nf 56410 56854 56847\nf 56410 56855 56854\nf 56411 56416 56855\nf 56412 56413 56862\nf 56412 56862 56417\nf 56413 56856 56857\nf 56413 56857 56862\nf 56414 56418 56858\nf 56414 56858 56851\nf 56415 56860 56421\nf 56416 56422 56865\nf 56416 56861 56855\nf 56416 56865 56861\nf 56417 56862 56424\nf 56418 56419 56420\nf 56418 56420 56859\nf 56418 56859 56858\nf 56419 56425 56420\nf 56420 56425 56863\nf 56420 56863 56859\nf 56421 56860 56864\nf 56421 56864 56426\nf 56422 56423 56866\nf 56422 56866 56865\nf 56423 56427 56866\nf 56424 56862 56868\nf 56424 56868 56428\nf 56425 56429 56873\nf 56425 56869 56863\nf 56425 56873 56869\nf 56426 56864 56870\nf 56426 56870 56430\nf 56427 56431 56875\nf 56427 56871 56866\nf 56427 56875 56871\nf 56428 56868 56872\nf 56428 56872 56432\nf 56429 56433 56877\nf 56429 56877 56873\nf 56430 56870 56874\nf 56430 56874 56434\nf 56431 56436 56880\nf 56431 56880 56875\nf 56432 56872 56876\nf 56432 56876 56437\nf 56433 56438 56882\nf 56433 56882 56877\nf 56434 56874 56878\nf 56434 56878 56435\nf 56435 56878 56879\nf 56435 56879 56884\nf 56435 56884 56439\nf 56436 56440 56885\nf 56436 56885 56880\nf 56437 56876 56881\nf 56437 56881 56441\nf 56438 56442 56887\nf 56438 56887 56882\nf 56439 56884 56443\nf 56440 56444 56890\nf 56440 56890 56885\nf 56441 56881 56886\nf 56441 56886 56445\nf 56442 56447 56894\nf 56442 56894 56887\nf 56443 56884 56889\nf 56443 56889 56448\nf 56444 56450 56897\nf 56444 56897 56890\nf 56445 56886 56891\nf 56445 56891 56446\nf 56446 56891 56892\nf 56446 56892 56901\nf 56446 56901 56452\nf 56447 56453 56902\nf 56447 56902 56894\nf 56448 56889 56895\nf 56448 56895 56896\nf 56448 56896 56449\nf 56449 56896 56454\nf 56450 56451 56898\nf 56450 56898 56897\nf 56451 56455 56900\nf 56451 56900 56898\nf 56452 56901 56460\nf 56453 56462 56909\nf 56453 56909 56902\nf 56454 56896 56903\nf 56454 56903 56463\nf 56455 56456 56457\nf 56455 56457 56900\nf 56456 56458 56905\nf 56456 56905 56457\nf 56457 56904 56900\nf 56457 56905 56904\nf 56458 56459 56905\nf 56459 56464 56906\nf 56459 56906 56905\nf 56460 56901 56907\nf 56460 56907 56461\nf 56461 56907 56908\nf 56461 56908 56994\nf 56461 56994 56547\nf 56462 56549 56996\nf 56462 56996 56909\nf 56463 56903 56910\nf 56463 56910 56550\nf 56464 56465 56912\nf 56464 56911 56906\nf 56464 56912 56911\nf 56465 56466 56912\nf 56466 56467 56913\nf 56466 56913 56912\nf 56467 56468 56914\nf 56467 56914 56913\nf 56468 56469 56915\nf 56468 56915 56914\nf 56469 56470 56916\nf 56469 56916 56915\nf 56470 56471 56917\nf 56470 56917 56916\nf 56471 56472 56918\nf 56471 56918 56917\nf 56472 56473 56919\nf 56472 56919 56918\nf 56473 56474 56920\nf 56473 56920 56919\nf 56474 56475 56921\nf 56474 56921 56920\nf 56475 56476 56922\nf 56475 56922 56921\nf 56476 56477 56923\nf 56476 56923 56922\nf 56477 56478 56924\nf 56477 56924 56923\nf 56478 56479 56925\nf 56478 56925 56924\nf 56479 56480 56926\nf 56479 56926 56925\nf 56480 56481 56927\nf 56480 56927 56926\nf 56481 56482 56928\nf 56481 56928 56927\nf 56482 56483 56929\nf 56482 56929 56928\nf 56483 56484 56930\nf 56483 56930 56929\nf 56484 56485 56931\nf 56484 56931 56930\nf 56485 56486 56932\nf 56485 56932 56931\nf 56486 56487 56933\nf 56486 56933 56932\nf 56487 56488 56934\nf 56487 56934 56933\nf 56488 56489 56935\nf 56488 56935 56934\nf 56489 56490 56936\nf 56489 56936 56935\nf 56490 56491 56937\nf 56490 56937 56936\nf 56491 56492 56938\nf 56491 56938 56937\nf 56492 56493 56939\nf 56492 56939 56938\nf 56493 56494 56940\nf 56493 56940 56939\nf 56494 56495 56941\nf 56494 56941 56940\nf 56495 56496 56942\nf 56495 56942 56941\nf 56496 56497 56943\nf 56496 56943 56942\nf 56497 56498 56944\nf 56497 56944 56943\nf 56498 56499 56945\nf 56498 56945 56944\nf 56499 56500 56946\nf 56499 56946 56945\nf 56500 56501 56947\nf 56500 56947 56946\nf 56501 56502 56948\nf 56501 56948 56947\nf 56502 56503 56949\nf 56502 56949 56948\nf 56503 56504 56950\nf 56503 56950 56949\nf 56504 56505 56951\nf 56504 56951 56950\nf 56505 56506 56952\nf 56505 56952 56951\nf 56506 56507 56953\nf 56506 56953 56952\nf 56507 56508 56954\nf 56507 56954 56953\nf 56508 56509 56955\nf 56508 56955 56954\nf 56509 56510 56956\nf 56509 56956 56955\nf 56510 56511 56957\nf 56510 56957 56956\nf 56511 56512 56958\nf 56511 56958 56957\nf 56512 56513 56959\nf 56512 56959 56958\nf 56513 56514 56960\nf 56513 56960 56959\nf 56514 56515 56961\nf 56514 56961 56960\nf 56515 56516 56962\nf 56515 56962 56961\nf 56516 56517 56963\nf 56516 56963 56962\nf 56517 56518 56964\nf 56517 56964 56963\nf 56518 56519 56965\nf 56518 56965 56964\nf 56519 56520 56966\nf 56519 56966 56965\nf 56520 56521 56967\nf 56520 56967 56966\nf 56521 56522 56968\nf 56521 56968 56967\nf 56522 56523 56969\nf 56522 56969 56968\nf 56523 56524 56970\nf 56523 56970 56969\nf 56524 56525 56971\nf 56524 56971 56970\nf 56525 56526 56972\nf 56525 56972 56971\nf 56526 56527 56973\nf 56526 56973 56972\nf 56527 56528 56974\nf 56527 56974 56973\nf 56528 56529 56975\nf 56528 56975 56974\nf 56529 56530 56976\nf 56529 56976 56975\nf 56530 56531 56977\nf 56530 56977 56976\nf 56531 56532 56978\nf 56531 56978 56977\nf 56532 56533 56979\nf 56532 56979 56978\nf 56533 56534 56980\nf 56533 56980 56979\nf 56534 56535 56981\nf 56534 56981 56980\nf 56535 56536 56982\nf 56535 56982 56981\nf 56536 56537 56983\nf 56536 56983 56982\nf 56537 56538 56984\nf 56537 56984 56983\nf 56538 56539 56985\nf 56538 56985 56984\nf 56539 56540 56986\nf 56539 56986 56985\nf 56540 56541 56987\nf 56540 56987 56986\nf 56541 56542 56988\nf 56541 56988 56987\nf 56542 56543 56989\nf 56542 56989 56988\nf 56543 56544 56990\nf 56543 56990 56989\nf 56544 56545 56991\nf 56544 56991 56990\nf 56545 56546 56992\nf 56545 56992 56991\nf 56546 56548 56993\nf 56546 56993 56992\nf 56547 56994 56548\nf 56548 56994 56995\nf 56548 56995 56993\nf 56549 56551 56998\nf 56549 56998 56996\nf 56550 56910 56997\nf 56550 56997 56552\nf 56551 56554 57000\nf 56551 57000 56998\nf 56552 56557 56553\nf 56552 56997 56999\nf 56552 56999 57002\nf 56552 57002 56557\nf 56553 56557 56556\nf 56554 56555 57000\nf 56555 56558 57004\nf 56555 57001 57000\nf 56555 57004 57001\nf 56556 56557 57003\nf 56556 57003 57006\nf 56556 57006 56560\nf 56557 57002 57003\nf 56558 56559 57004\nf 56559 56561 57007\nf 56559 57005 57004\nf 56559 57007 57005\nf 56560 57006 56563\nf 56561 56562 57007\nf 56562 56572 57019\nf 56562 57008 57007\nf 56562 57019 57008\nf 56563 57006 57009\nf 56563 57009 57010\nf 56563 57010 56564\nf 56564 57010 57011\nf 56564 57011 56565\nf 56565 57011 56574\nf 56566 56657 56659\nf 56566 56659 57012\nf 56566 57012 57013\nf 56566 57013 57014\nf 56566 57014 56567\nf 56567 57014 57015\nf 56567 57015 56568\nf 56568 57015 57016\nf 56568 57016 56569\nf 56569 57016 57017\nf 56569 57017 56570\nf 56570 57017 57018\nf 56570 57018 56571\nf 56571 57018 57020\nf 56571 57020 56573\nf 56572 56573 57019\nf 56573 57020 57019\nf 56574 57011 57021\nf 56574 57021 57022\nf 56574 57022 56575\nf 56575 57022 57023\nf 56575 57023 56576\nf 56576 57023 56660\nf 56577 56666 57112\nf 56577 57024 57025\nf 56577 57025 56578\nf 56577 57112 57024\nf 56578 57025 57026\nf 56578 57026 56579\nf 56579 57026 57027\nf 56579 57027 56580\nf 56580 57027 57028\nf 56580 57028 56581\nf 56581 57028 57029\nf 56581 57029 56582\nf 56582 57029 57030\nf 56582 57030 56583\nf 56583 57030 57031\nf 56583 57031 56584\nf 56584 57031 57032\nf 56584 57032 56585\nf 56585 57032 57033\nf 56585 57033 56586\nf 56586 57033 57034\nf 56586 57034 56587\nf 56587 57034 57035\nf 56587 57035 56588\nf 56588 57035 57036\nf 56588 57036 56589\nf 56589 57036 57037\nf 56589 57037 56590\nf 56590 57037 57038\nf 56590 57038 56591\nf 56591 57038 57039\nf 56591 57039 56592\nf 56592 57039 57040\nf 56592 57040 56593\nf 56593 57040 57041\nf 56593 57041 56594\nf 56594 57041 57042\nf 56594 57042 56595\nf 56595 57042 57043\nf 56595 57043 56596\nf 56596 57043 57044\nf 56596 57044 56597\nf 56597 57044 57045\nf 56597 57045 56598\nf 56598 57045 57046\nf 56598 57046 56599\nf 56599 57046 57047\nf 56599 57047 56600\nf 56600 57047 57048\nf 56600 57048 56601\nf 56601 57048 57049\nf 56601 57049 56602\nf 56602 57049 57050\nf 56602 57050 56603\nf 56603 57050 57051\nf 56603 57051 56604\nf 56604 57051 57052\nf 56604 57052 56605\nf 56605 57052 57053\nf 56605 57053 56606\nf 56606 57053 57054\nf 56606 57054 56607\nf 56607 57054 57055\nf 56607 57055 56608\nf 56608 57055 57056\nf 56608 57056 56609\nf 56609 57056 57057\nf 56609 57057 56610\nf 56610 57057 57058\nf 56610 57058 56611\nf 56611 57058 57059\nf 56611 57059 56612\nf 56612 57059 57060\nf 56612 57060 56613\nf 56613 57060 57061\nf 56613 57061 56614\nf 56614 57061 57062\nf 56614 57062 56615\nf 56615 57062 57063\nf 56615 57063 56616\nf 56616 57063 57064\nf 56616 57064 56617\nf 56617 57064 57065\nf 56617 57065 56618\nf 56618 57065 57066\nf 56618 57066 56619\nf 56619 57066 57067\nf 56619 57067 56620\nf 56620 57067 57068\nf 56620 57068 56621\nf 56621 57068 57069\nf 56621 57069 56622\nf 56622 57069 57070\nf 56622 57070 56623\nf 56623 57070 57071\nf 56623 57071 56624\nf 56624 57071 57072\nf 56624 57072 56625\nf 56625 57072 57073\nf 56625 57073 56626\nf 56626 57073 57074\nf 56626 57074 56627\nf 56627 57074 57075\nf 56627 57075 56628\nf 56628 57075 57076\nf 56628 57076 56629\nf 56629 57076 57077\nf 56629 57077 56630\nf 56630 57077 57078\nf 56630 57078 56631\nf 56631 57078 57079\nf 56631 57079 56632\nf 56632 57079 57080\nf 56632 57080 56633\nf 56633 57080 57081\nf 56633 57081 56634\nf 56634 57081 57082\nf 56634 57082 56635\nf 56635 57082 57083\nf 56635 57083 56636\nf 56636 57083 57084\nf 56636 57084 56637\nf 56637 57084 57085\nf 56637 57085 56638\nf 56638 57085 57086\nf 56638 57086 56639\nf 56639 57086 57087\nf 56639 57087 56640\nf 56640 57087 57088\nf 56640 57088 56641\nf 56641 57088 57089\nf 56641 57089 56642\nf 56642 57089 57090\nf 56642 57090 56643\nf 56643 57090 57091\nf 56643 57091 56644\nf 56644 57091 57092\nf 56644 57092 56645\nf 56645 57092 57093\nf 56645 57093 56646\nf 56646 57093 57094\nf 56646 57094 56647\nf 56647 57094 57095\nf 56647 57095 56648\nf 56648 57095 57096\nf 56648 57096 56649\nf 56649 57096 57097\nf 56649 57097 56650\nf 56650 57097 57098\nf 56650 57098 56651\nf 56651 57098 57099\nf 56651 57099 56652\nf 56652 57099 57100\nf 56652 57100 56653\nf 56653 57100 57101\nf 56653 57101 56654\nf 56654 57101 57102\nf 56654 57102 56655\nf 56655 57102 57104\nf 56655 57104 56656\nf 56656 57104 56658\nf 56657 56658 56659\nf 56658 57103 56659\nf 56658 57104 57103\nf 56659 57103 57012\nf 56660 57023 57106\nf 56660 57106 57107\nf 56660 57107 56661\nf 56661 57107 57108\nf 56661 57108 56662\nf 56662 57108 57109\nf 56662 57109 56663\nf 56663 57109 57110\nf 56663 57110 56664\nf 56664 57110 57111\nf 56664 57111 56665\nf 56665 57111 57113\nf 56665 57113 56667\nf 56666 56667 57112\nf 56667 57113 57112\nf 56668 56669 57116\nf 56668 57116 57123\nf 56668 57123 56671\nf 56669 56670 57117\nf 56669 57117 57116\nf 56670 56673 57121\nf 56670 57119 57117\nf 56670 57121 57119\nf 56671 57123 56672\nf 56672 57123 57124\nf 56672 57124 57128\nf 56672 57128 56676\nf 56673 56674 56675\nf 56673 56675 57121\nf 56674 56677 56679\nf 56674 56679 57126\nf 56674 57126 56675\nf 56675 57125 57121\nf 56675 57126 57125\nf 56676 57128 56680\nf 56677 56678 56679\nf 56678 56682 56679\nf 56679 56682 57129\nf 56679 57129 57126\nf 56680 57128 57130\nf 56680 57130 56681\nf 56681 57130 57131\nf 56681 57131 57133\nf 56681 57133 56683\nf 56682 56684 57134\nf 56682 57132 57129\nf 56682 57134 57132\nf 56683 57133 56685\nf 56684 56686 57137\nf 56684 57137 57134\nf 56685 57133 57136\nf 56685 57136 56688\nf 56686 56687 57138\nf 56686 57138 57137\nf 56687 56689 57138\nf 56688 57136 57140\nf 56688 57140 56690\nf 56689 56691 57143\nf 56689 57141 57138\nf 56689 57143 57141\nf 56690 57140 57142\nf 56690 57142 56692\nf 56691 56693 57145\nf 56691 57145 57143\nf 56692 57142 57144\nf 56692 57144 56694\nf 56693 56695 57147\nf 56693 57147 57145\nf 56694 57144 57146\nf 56694 57146 56696\nf 56695 56697 57149\nf 56695 57149 57147\nf 56696 57146 57148\nf 56696 57148 56698\nf 56697 56699 57151\nf 56697 57151 57149\nf 56698 57148 57150\nf 56698 57150 56700\nf 56699 56701 57153\nf 56699 57153 57151\nf 56700 57150 57152\nf 56700 57152 56702\nf 56701 56703 57155\nf 56701 57155 57153\nf 56702 57152 57154\nf 56702 57154 56704\nf 56703 56705 57157\nf 56703 57157 57155\nf 56704 57154 57156\nf 56704 57156 56707\nf 56705 56706 57160\nf 56705 57160 57157\nf 56706 56709 56710\nf 56706 56710 57160\nf 56707 57156 57158\nf 56707 57158 57159\nf 56707 57159 56708\nf 56708 57159 56711\nf 56709 56712 57164\nf 56709 57164 56710\nf 56710 57161 57160\nf 56710 57164 57161\nf 56711 57159 57163\nf 56711 57163 56713\nf 56712 56715 57167\nf 56712 57167 57164\nf 56713 57163 57165\nf 56713 57165 57166\nf 56713 57166 56714\nf 56714 57166 56717\nf 56715 56716 57167\nf 56716 56718 57170\nf 56716 57168 57167\nf 56716 57170 57168\nf 56717 57166 57169\nf 56717 57169 56720\nf 56718 56719 57170\nf 56719 56723 57174\nf 56719 57171 57170\nf 56719 57174 57171\nf 56720 57169 57172\nf 56720 57172 57173\nf 56720 57173 56721\nf 56721 57173 56722\nf 56722 56725 57179\nf 56722 57173 56725\nf 56722 57175 56724\nf 56722 57179 57175\nf 56723 56724 57174\nf 56724 57175 57174\nf 56725 57173 57177\nf 56725 57177 57180\nf 56725 57180 57179\nf 56726 56727 57188\nf 56726 57188 57191\nf 56726 57191 56729\nf 56727 56728 57187\nf 56727 56731 56728\nf 56727 57187 57188\nf 56728 56731 57190\nf 56728 57185 57187\nf 56728 57190 57185\nf 56729 57191 56730\nf 56730 57191 57192\nf 56730 57192 57196\nf 56730 57196 56732\nf 56731 56733 57193\nf 56731 57193 57190\nf 56732 57196 56736\nf 56733 56734 56735\nf 56733 56735 57194\nf 56733 57194 57193\nf 56734 56738 56735\nf 56735 56738 57197\nf 56735 57197 57194\nf 56736 57196 57198\nf 56736 57198 56737\nf 56737 57198 57199\nf 56737 57199 57202\nf 56737 57202 56739\nf 56738 56740 57203\nf 56738 57201 57197\nf 56738 57203 57201\nf 56739 57202 56741\nf 56740 56742 57205\nf 56740 57205 57203\nf 56741 57202 57204\nf 56741 57204 56744\nf 56742 56743 57206\nf 56742 57206 57205\nf 56743 56745 57206\nf 56744 57204 57208\nf 56744 57208 56746\nf 56745 56747 57211\nf 56745 57209 57206\nf 56745 57211 57209\nf 56746 57208 57210\nf 56746 57210 56748\nf 56747 56749 57213\nf 56747 57213 57211\nf 56748 57210 57212\nf 56748 57212 56750\nf 56749 56751 57216\nf 56749 57216 57213\nf 56750 57212 57214\nf 56750 57214 56753\nf 56751 56752 57219\nf 56751 57219 57216\nf 56752 56754 56755\nf 56752 56755 57219\nf 56753 57214 57217\nf 56753 57217 56756\nf 56754 56757 57223\nf 56754 57223 56755\nf 56755 57220 57219\nf 56755 57223 57220\nf 56756 57217 57221\nf 56756 57221 56758\nf 56757 56759 57227\nf 56757 57227 57223\nf 56758 57221 57225\nf 56758 57225 56760\nf 56759 56761 57231\nf 56759 57231 57227\nf 56760 57225 57228\nf 56760 57228 56762\nf 56761 56764 57234\nf 56761 57234 57231\nf 56762 56763 57233\nf 56762 57228 56763\nf 56762 57233 57235\nf 56762 57235 56765\nf 56763 57228 57229\nf 56763 57229 57232\nf 56763 57232 57233\nf 56764 56766 57237\nf 56764 57237 57234\nf 56765 57235 56768\nf 56766 56767 57237\nf 56767 56769 57241\nf 56767 57238 57237\nf 56767 57241 57238\nf 56768 57235 57239\nf 56768 57239 56770\nf 56769 56771 57243\nf 56769 57243 57241\nf 56770 57239 57242\nf 56770 57242 56773\nf 56771 56772 57243\nf 56772 56774 57246\nf 56772 57244 57243\nf 56772 57246 57244\nf 56773 57242 57245\nf 56773 57245 56776\nf 56774 56775 57246\nf 56775 56777 57249\nf 56775 57247 57246\nf 56775 57249 57247\nf 56776 57245 57248\nf 56776 57248 56779\nf 56777 56778 57249\nf 56778 56780 57252\nf 56778 57250 57249\nf 56778 57252 57250\nf 56779 57248 57251\nf 56779 57251 57253\nf 56779 57253 56781\nf 56780 56781 57252\nf 56781 57253 57252\nf 56782 56783 57254\nf 56782 56792 56790\nf 56782 57254 57260\nf 56782 57260 56792\nf 56783 56784 57254\nf 56784 56785 57255\nf 56784 57255 57254\nf 56785 56786 57256\nf 56785 57256 57255\nf 56786 56787 57257\nf 56786 57257 57256\nf 56787 56788 57258\nf 56787 57258 57257\nf 56788 56793 56794\nf 56788 56794 57258\nf 56789 56791 57259\nf 56789 56801 56799\nf 56789 57259 57270\nf 56789 57270 56801\nf 56790 56792 56791\nf 56791 56792 57261\nf 56791 57261 57259\nf 56792 57260 57261\nf 56793 56795 57266\nf 56793 57266 56794\nf 56794 57264 57258\nf 56794 57266 57264\nf 56795 56796 57267\nf 56795 57267 57266\nf 56796 56797 57268\nf 56796 57268 57267\nf 56797 56802 56803\nf 56797 56803 57268\nf 56798 56800 57269\nf 56798 56806 56805\nf 56798 57269 57276\nf 56798 57276 56806\nf 56799 56801 56800\nf 56800 56801 57271\nf 56800 57271 57269\nf 56801 57270 57271\nf 56802 56804 57274\nf 56802 57274 56803\nf 56803 57272 57268\nf 56803 57274 57272\nf 56804 56807 57275\nf 56804 57275 57274\nf 56805 56806 57281\nf 56805 57281 56809\nf 56806 57276 57277\nf 56806 57277 57281\nf 56807 56808 57280\nf 56807 57278 57275\nf 56807 57280 57278\nf 56808 56810 57280\nf 56809 57281 56812\nf 56810 56811 56816\nf 56810 56816 57287\nf 56810 57282 57280\nf 56810 57287 57282\nf 56811 56814 56816\nf 56812 57281 57284\nf 56812 57284 57285\nf 56812 57285 56813\nf 56813 57285 57286\nf 56813 57286 56817\nf 56814 56815 56816\nf 56815 56830 56832\nf 56815 56832 57288\nf 56815 57288 56816\nf 56816 57288 57287\nf 56817 56819 56818\nf 56817 57286 56819\nf 56818 56819 57290\nf 56818 57290 56820\nf 56819 57286 57289\nf 56819 57289 57290\nf 56820 57290 57291\nf 56820 57291 56821\nf 56821 57291 57292\nf 56821 57292 56822\nf 56822 57292 57293\nf 56822 57293 56823\nf 56823 57293 57294\nf 56823 57294 56824\nf 56824 57294 57295\nf 56824 57295 56825\nf 56825 57295 57296\nf 56825 57296 56826\nf 56826 57296 57297\nf 56826 57297 56827\nf 56827 57297 57298\nf 56827 57298 56833\nf 56828 56838 56840\nf 56828 56840 57300\nf 56828 57300 57301\nf 56828 57301 57303\nf 56828 57303 56829\nf 56829 57303 56831\nf 56830 56831 56832\nf 56831 57302 56832\nf 56831 57303 57302\nf 56832 57302 57288\nf 56833 56835 56834\nf 56833 57298 56835\nf 56834 56835 56836\nf 56835 56837 56836\nf 56835 57298 57299\nf 56835 57299 56837\nf 56836 56837 56839\nf 56837 56840 56839\nf 56837 57299 57300\nf 56837 57300 56840\nf 56838 56839 56840\nf 56841 56842 57304\nf 56841 56849 56848\nf 56841 57304 57310\nf 56841 57310 56849\nf 56842 56843 57304\nf 56843 56844 57305\nf 56843 57305 57304\nf 56844 56850 57306\nf 56844 57306 57305\nf 56845 56846 57307\nf 56845 57307 57314\nf 56845 57314 56852\nf 56846 56847 57308\nf 56846 57308 57307\nf 56847 56854 57309\nf 56847 57309 57308\nf 56848 56849 57318\nf 56848 57318 56856\nf 56849 57310 57311\nf 56849 57311 57318\nf 56850 56851 57313\nf 56850 57312 57306\nf 56850 57313 57312\nf 56851 56858 57313\nf 56852 57314 56853\nf 56853 57314 57315\nf 56853 57315 57322\nf 56853 57322 56860\nf 56854 56855 57317\nf 56854 57316 57309\nf 56854 57317 57316\nf 56855 56861 57317\nf 56856 57318 56857\nf 56857 57318 57319\nf 56857 57319 57325\nf 56857 57325 56862\nf 56858 56859 57321\nf 56858 57320 57313\nf 56858 57321 57320\nf 56859 56863 57321\nf 56860 57322 56864\nf 56861 56865 57323\nf 56861 57323 57317\nf 56862 57325 56868\nf 56863 56869 57330\nf 56863 57326 57321\nf 56863 57330 57326\nf 56864 57322 57327\nf 56864 57327 56870\nf 56865 56866 56867\nf 56865 56867 57324\nf 56865 57324 57323\nf 56866 56871 56867\nf 56867 56871 57328\nf 56867 57328 57324\nf 56868 57325 57329\nf 56868 57329 56872\nf 56869 56873 57334\nf 56869 57334 57330\nf 56870 57327 57331\nf 56870 57331 56874\nf 56871 56875 57336\nf 56871 57332 57328\nf 56871 57336 57332\nf 56872 57329 57333\nf 56872 57333 56876\nf 56873 56877 57338\nf 56873 57338 57334\nf 56874 57331 57335\nf 56874 57335 56878\nf 56875 56880 57343\nf 56875 57343 57336\nf 56876 57333 57337\nf 56876 57337 56881\nf 56877 56882 57338\nf 56878 57335 57341\nf 56878 57341 56879\nf 56879 57341 57342\nf 56879 57342 57346\nf 56879 57346 56884\nf 56880 56885 57347\nf 56880 57347 57343\nf 56881 57337 57344\nf 56881 57344 56886\nf 56882 56883 57339\nf 56882 56887 56883\nf 56882 57339 57338\nf 56883 56887 56888\nf 56883 56888 57350\nf 56883 57345 57339\nf 56883 57350 57345\nf 56884 57346 56889\nf 56885 56890 57353\nf 56885 57353 57347\nf 56886 57344 57348\nf 56886 57348 56891\nf 56887 56894 57356\nf 56887 57356 56888\nf 56888 57351 57350\nf 56888 57356 57351\nf 56889 57346 57352\nf 56889 57352 56895\nf 56890 56897 57353\nf 56891 56893 56892\nf 56891 57348 56893\nf 56892 56893 57355\nf 56892 57355 56901\nf 56893 57348 57349\nf 56893 57349 57355\nf 56894 56902 57362\nf 56894 57362 57356\nf 56895 57352 57357\nf 56895 57357 57358\nf 56895 57358 56896\nf 56896 57358 56903\nf 56897 56898 56899\nf 56897 56899 57354\nf 56897 57354 57353\nf 56898 56900 57360\nf 56898 57360 56899\nf 56899 57359 57354\nf 56899 57360 57359\nf 56900 56904 57360\nf 56901 57355 57361\nf 56901 57361 56907\nf 56902 56909 57370\nf 56902 57370 57362\nf 56903 57358 57363\nf 56903 57363 56910\nf 56904 56905 57365\nf 56904 57364 57360\nf 56904 57365 57364\nf 56905 56906 57365\nf 56906 56911 57367\nf 56906 57367 57365\nf 56907 57361 57368\nf 56907 57368 56908\nf 56908 57368 57369\nf 56908 57369 57456\nf 56908 57456 56994\nf 56909 56996 57458\nf 56909 57458 57370\nf 56910 57363 57371\nf 56910 57371 56997\nf 56911 56912 57373\nf 56911 57372 57367\nf 56911 57373 57372\nf 56912 56913 57373\nf 56913 56914 57375\nf 56913 57375 57373\nf 56914 56915 57376\nf 56914 57376 57375\nf 56915 56916 57377\nf 56915 57377 57376\nf 56916 56917 57378\nf 56916 57378 57377\nf 56917 56918 57379\nf 56917 57379 57378\nf 56918 56919 57380\nf 56918 57380 57379\nf 56919 56920 57381\nf 56919 57381 57380\nf 56920 56921 57382\nf 56920 57382 57381\nf 56921 56922 57383\nf 56921 57383 57382\nf 56922 56923 57384\nf 56922 57384 57383\nf 56923 56924 57385\nf 56923 57385 57384\nf 56924 56925 57386\nf 56924 57386 57385\nf 56925 56926 57387\nf 56925 57387 57386\nf 56926 56927 57388\nf 56926 57388 57387\nf 56927 56928 57389\nf 56927 57389 57388\nf 56928 56929 57390\nf 56928 57390 57389\nf 56929 56930 57391\nf 56929 57391 57390\nf 56930 56931 57392\nf 56930 57392 57391\nf 56931 56932 57393\nf 56931 57393 57392\nf 56932 56933 57394\nf 56932 57394 57393\nf 56933 56934 57395\nf 56933 57395 57394\nf 56934 56935 57396\nf 56934 57396 57395\nf 56935 56936 57397\nf 56935 57397 57396\nf 56936 56937 57398\nf 56936 57398 57397\nf 56937 56938 57399\nf 56937 57399 57398\nf 56938 56939 57400\nf 56938 57400 57399\nf 56939 56940 57401\nf 56939 57401 57400\nf 56940 56941 57402\nf 56940 57402 57401\nf 56941 56942 57403\nf 56941 57403 57402\nf 56942 56943 57404\nf 56942 57404 57403\nf 56943 56944 57405\nf 56943 57405 57404\nf 56944 56945 57406\nf 56944 57406 57405\nf 56945 56946 57407\nf 56945 57407 57406\nf 56946 56947 57408\nf 56946 57408 57407\nf 56947 56948 57409\nf 56947 57409 57408\nf 56948 56949 57410\nf 56948 57410 57409\nf 56949 56950 57411\nf 56949 57411 57410\nf 56950 56951 57412\nf 56950 57412 57411\nf 56951 56952 57413\nf 56951 57413 57412\nf 56952 56953 57414\nf 56952 57414 57413\nf 56953 56954 57415\nf 56953 57415 57414\nf 56954 56955 57416\nf 56954 57416 57415\nf 56955 56956 57417\nf 56955 57417 57416\nf 56956 56957 57418\nf 56956 57418 57417\nf 56957 56958 57419\nf 56957 57419 57418\nf 56958 56959 57420\nf 56958 57420 57419\nf 56959 56960 57421\nf 56959 57421 57420\nf 56960 56961 57422\nf 56960 57422 57421\nf 56961 56962 57423\nf 56961 57423 57422\nf 56962 56963 57424\nf 56962 57424 57423\nf 56963 56964 57425\nf 56963 57425 57424\nf 56964 56965 57426\nf 56964 57426 57425\nf 56965 56966 57427\nf 56965 57427 57426\nf 56966 56967 57428\nf 56966 57428 57427\nf 56967 56968 57429\nf 56967 57429 57428\nf 56968 56969 57430\nf 56968 57430 57429\nf 56969 56970 57431\nf 56969 57431 57430\nf 56970 56971 57432\nf 56970 57432 57431\nf 56971 56972 57433\nf 56971 57433 57432\nf 56972 56973 57434\nf 56972 57434 57433\nf 56973 56974 57435\nf 56973 57435 57434\nf 56974 56975 57436\nf 56974 57436 57435\nf 56975 56976 57437\nf 56975 57437 57436\nf 56976 56977 57438\nf 56976 57438 57437\nf 56977 56978 57439\nf 56977 57439 57438\nf 56978 56979 57440\nf 56978 57440 57439\nf 56979 56980 57441\nf 56979 57441 57440\nf 56980 56981 57442\nf 56980 57442 57441\nf 56981 56982 57443\nf 56981 57443 57442\nf 56982 56983 57444\nf 56982 57444 57443\nf 56983 56984 57445\nf 56983 57445 57444\nf 56984 56985 57446\nf 56984 57446 57445\nf 56985 56986 57447\nf 56985 57447 57446\nf 56986 56987 57448\nf 56986 57448 57447\nf 56987 56988 57449\nf 56987 57449 57448\nf 56988 56989 57450\nf 56988 57450 57449\nf 56989 56990 57451\nf 56989 57451 57450\nf 56990 56991 57452\nf 56990 57452 57451\nf 56991 56992 57453\nf 56991 57453 57452\nf 56992 56993 57454\nf 56992 57454 57453\nf 56993 56995 57455\nf 56993 57455 57454\nf 56994 57456 56995\nf 56995 57456 57457\nf 56995 57457 57455\nf 56996 56998 57460\nf 56996 57460 57458\nf 56997 57371 57459\nf 56997 57459 56999\nf 56998 57000 57462\nf 56998 57462 57460\nf 56999 57459 57461\nf 56999 57461 57002\nf 57000 57001 57462\nf 57001 57004 57466\nf 57001 57463 57462\nf 57001 57466 57463\nf 57002 57461 57464\nf 57002 57464 57465\nf 57002 57465 57003\nf 57003 57465 57006\nf 57004 57005 57466\nf 57005 57007 57469\nf 57005 57467 57466\nf 57005 57469 57467\nf 57006 57465 57468\nf 57006 57468 57009\nf 57007 57008 57469\nf 57008 57019 57482\nf 57008 57470 57469\nf 57008 57482 57470\nf 57009 57468 57471\nf 57009 57471 57472\nf 57009 57472 57010\nf 57010 57472 57473\nf 57010 57473 57011\nf 57011 57473 57021\nf 57012 57103 57105\nf 57012 57105 57474\nf 57012 57474 57475\nf 57012 57475 57476\nf 57012 57476 57013\nf 57013 57476 57477\nf 57013 57477 57014\nf 57014 57477 57478\nf 57014 57478 57015\nf 57015 57478 57479\nf 57015 57479 57016\nf 57016 57479 57480\nf 57016 57480 57017\nf 57017 57480 57481\nf 57017 57481 57018\nf 57018 57481 57483\nf 57018 57483 57020\nf 57019 57020 57482\nf 57020 57483 57482\nf 57021 57473 57484\nf 57021 57484 57485\nf 57021 57485 57022\nf 57022 57485 57486\nf 57022 57486 57023\nf 57023 57486 57106\nf 57024 57112 57114\nf 57024 57114 57573\nf 57024 57487 57025\nf 57024 57573 57487\nf 57025 57487 57488\nf 57025 57488 57026\nf 57026 57488 57489\nf 57026 57489 57027\nf 57027 57489 57490\nf 57027 57490 57028\nf 57028 57490 57491\nf 57028 57491 57029\nf 57029 57491 57492\nf 57029 57492 57030\nf 57030 57492 57493\nf 57030 57493 57031\nf 57031 57493 57494\nf 57031 57494 57032\nf 57032 57494 57495\nf 57032 57495 57033\nf 57033 57495 57496\nf 57033 57496 57034\nf 57034 57496 57497\nf 57034 57497 57035\nf 57035 57497 57498\nf 57035 57498 57036\nf 57036 57498 57499\nf 57036 57499 57037\nf 57037 57499 57500\nf 57037 57500 57038\nf 57038 57500 57501\nf 57038 57501 57039\nf 57039 57501 57502\nf 57039 57502 57040\nf 57040 57502 57503\nf 57040 57503 57041\nf 57041 57503 57504\nf 57041 57504 57042\nf 57042 57504 57505\nf 57042 57505 57043\nf 57043 57505 57506\nf 57043 57506 57044\nf 57044 57506 57507\nf 57044 57507 57045\nf 57045 57507 57508\nf 57045 57508 57046\nf 57046 57508 57509\nf 57046 57509 57047\nf 57047 57509 57510\nf 57047 57510 57048\nf 57048 57510 57511\nf 57048 57511 57049\nf 57049 57511 57512\nf 57049 57512 57050\nf 57050 57512 57513\nf 57050 57513 57051\nf 57051 57513 57514\nf 57051 57514 57052\nf 57052 57514 57515\nf 57052 57515 57053\nf 57053 57515 57516\nf 57053 57516 57054\nf 57054 57516 57517\nf 57054 57517 57055\nf 57055 57517 57518\nf 57055 57518 57056\nf 57056 57518 57519\nf 57056 57519 57057\nf 57057 57519 57520\nf 57057 57520 57058\nf 57058 57520 57521\nf 57058 57521 57059\nf 57059 57521 57522\nf 57059 57522 57060\nf 57060 57522 57523\nf 57060 57523 57061\nf 57061 57523 57524\nf 57061 57524 57062\nf 57062 57524 57525\nf 57062 57525 57063\nf 57063 57525 57526\nf 57063 57526 57064\nf 57064 57526 57527\nf 57064 57527 57065\nf 57065 57527 57528\nf 57065 57528 57066\nf 57066 57528 57529\nf 57066 57529 57067\nf 57067 57529 57530\nf 57067 57530 57068\nf 57068 57530 57531\nf 57068 57531 57069\nf 57069 57531 57532\nf 57069 57532 57070\nf 57070 57532 57533\nf 57070 57533 57071\nf 57071 57533 57534\nf 57071 57534 57072\nf 57072 57534 57535\nf 57072 57535 57073\nf 57073 57535 57536\nf 57073 57536 57074\nf 57074 57536 57537\nf 57074 57537 57075\nf 57075 57537 57538\nf 57075 57538 57076\nf 57076 57538 57539\nf 57076 57539 57077\nf 57077 57539 57540\nf 57077 57540 57078\nf 57078 57540 57541\nf 57078 57541 57079\nf 57079 57541 57542\nf 57079 57542 57080\nf 57080 57542 57543\nf 57080 57543 57081\nf 57081 57543 57544\nf 57081 57544 57082\nf 57082 57544 57545\nf 57082 57545 57083\nf 57083 57545 57546\nf 57083 57546 57084\nf 57084 57546 57547\nf 57084 57547 57085\nf 57085 57547 57548\nf 57085 57548 57086\nf 57086 57548 57549\nf 57086 57549 57087\nf 57087 57549 57550\nf 57087 57550 57088\nf 57088 57550 57551\nf 57088 57551 57089\nf 57089 57551 57552\nf 57089 57552 57090\nf 57090 57552 57553\nf 57090 57553 57091\nf 57091 57553 57554\nf 57091 57554 57092\nf 57092 57554 57555\nf 57092 57555 57093\nf 57093 57555 57556\nf 57093 57556 57094\nf 57094 57556 57557\nf 57094 57557 57095\nf 57095 57557 57558\nf 57095 57558 57096\nf 57096 57558 57559\nf 57096 57559 57097\nf 57097 57559 57560\nf 57097 57560 57098\nf 57098 57560 57561\nf 57098 57561 57099\nf 57099 57561 57562\nf 57099 57562 57100\nf 57100 57562 57563\nf 57100 57563 57101\nf 57101 57563 57565\nf 57101 57565 57102\nf 57102 57565 57104\nf 57103 57104 57105\nf 57104 57564 57105\nf 57104 57565 57564\nf 57105 57564 57474\nf 57106 57486 57567\nf 57106 57567 57568\nf 57106 57568 57107\nf 57107 57568 57569\nf 57107 57569 57108\nf 57108 57569 57109\nf 57109 57115 57577\nf 57109 57569 57115\nf 57109 57570 57110\nf 57109 57577 57570\nf 57110 57570 57571\nf 57110 57571 57111\nf 57111 57571 57572\nf 57111 57572 57113\nf 57112 57113 57114\nf 57113 57572 57574\nf 57113 57574 57114\nf 57114 57574 57573\nf 57115 57569 57575\nf 57115 57575 57578\nf 57115 57578 57577\nf 57116 57117 57587\nf 57116 57587 57592\nf 57116 57592 57123\nf 57117 57118 57586\nf 57117 57119 57118\nf 57117 57586 57587\nf 57118 57119 57120\nf 57118 57120 57582\nf 57118 57580 57586\nf 57118 57582 57580\nf 57119 57121 57120\nf 57120 57121 57122\nf 57120 57122 57584\nf 57120 57584 57582\nf 57121 57125 57127\nf 57121 57127 57590\nf 57121 57590 57122\nf 57122 57589 57584\nf 57122 57590 57589\nf 57123 57592 57124\nf 57124 57592 57593\nf 57124 57593 57596\nf 57124 57596 57128\nf 57125 57126 57127\nf 57126 57129 57127\nf 57127 57129 57595\nf 57127 57595 57590\nf 57128 57596 57130\nf 57129 57132 57601\nf 57129 57597 57595\nf 57129 57601 57597\nf 57130 57596 57599\nf 57130 57599 57131\nf 57131 57599 57600\nf 57131 57600 57604\nf 57131 57604 57133\nf 57132 57134 57601\nf 57133 57604 57136\nf 57134 57135 57602\nf 57134 57137 57135\nf 57134 57602 57601\nf 57135 57137 57139\nf 57135 57139 57607\nf 57135 57605 57602\nf 57135 57607 57605\nf 57136 57604 57606\nf 57136 57606 57140\nf 57137 57138 57139\nf 57138 57141 57139\nf 57139 57141 57607\nf 57140 57606 57608\nf 57140 57608 57142\nf 57141 57143 57611\nf 57141 57609 57607\nf 57141 57611 57609\nf 57142 57608 57610\nf 57142 57610 57144\nf 57143 57145 57613\nf 57143 57613 57611\nf 57144 57610 57612\nf 57144 57612 57146\nf 57145 57147 57615\nf 57145 57615 57613\nf 57146 57612 57614\nf 57146 57614 57148\nf 57147 57149 57617\nf 57147 57617 57615\nf 57148 57614 57616\nf 57148 57616 57150\nf 57149 57151 57619\nf 57149 57619 57617\nf 57150 57616 57618\nf 57150 57618 57152\nf 57151 57153 57621\nf 57151 57621 57619\nf 57152 57618 57620\nf 57152 57620 57154\nf 57153 57155 57623\nf 57153 57623 57621\nf 57154 57620 57622\nf 57154 57622 57156\nf 57155 57157 57625\nf 57155 57625 57623\nf 57156 57622 57624\nf 57156 57624 57158\nf 57157 57160 57625\nf 57158 57624 57627\nf 57158 57627 57628\nf 57158 57628 57159\nf 57159 57628 57163\nf 57160 57161 57162\nf 57160 57162 57625\nf 57161 57164 57629\nf 57161 57629 57162\nf 57162 57626 57625\nf 57162 57629 57626\nf 57163 57628 57631\nf 57163 57631 57165\nf 57164 57167 57635\nf 57164 57632 57629\nf 57164 57635 57632\nf 57165 57631 57633\nf 57165 57633 57634\nf 57165 57634 57166\nf 57166 57634 57169\nf 57167 57168 57635\nf 57168 57170 57639\nf 57168 57636 57635\nf 57168 57639 57636\nf 57169 57634 57637\nf 57169 57637 57172\nf 57170 57171 57641\nf 57170 57641 57639\nf 57171 57174 57176\nf 57171 57176 57641\nf 57172 57178 57173\nf 57172 57637 57640\nf 57172 57640 57643\nf 57172 57643 57178\nf 57173 57178 57177\nf 57174 57175 57176\nf 57175 57179 57181\nf 57175 57181 57176\nf 57176 57181 57642\nf 57176 57642 57641\nf 57177 57178 57180\nf 57178 57643 57644\nf 57178 57644 57180\nf 57179 57180 57181\nf 57180 57182 57181\nf 57180 57644 57182\nf 57181 57182 57646\nf 57181 57645 57642\nf 57181 57646 57645\nf 57182 57644 57647\nf 57182 57647 57650\nf 57182 57649 57646\nf 57182 57650 57649\nf 57183 57184 57665\nf 57183 57656 57659\nf 57183 57659 57184\nf 57183 57661 57656\nf 57183 57665 57661\nf 57184 57186 57670\nf 57184 57659 57663\nf 57184 57663 57186\nf 57184 57670 57665\nf 57185 57186 57667\nf 57185 57190 57186\nf 57185 57667 57668\nf 57185 57668 57187\nf 57186 57190 57670\nf 57186 57663 57667\nf 57187 57189 57188\nf 57187 57668 57189\nf 57188 57189 57672\nf 57188 57672 57191\nf 57189 57668 57672\nf 57190 57193 57673\nf 57190 57673 57670\nf 57191 57672 57676\nf 57191 57676 57192\nf 57192 57676 57677\nf 57192 57677 57680\nf 57192 57680 57196\nf 57193 57194 57195\nf 57193 57195 57674\nf 57193 57674 57673\nf 57194 57197 57195\nf 57195 57197 57679\nf 57195 57679 57674\nf 57196 57680 57198\nf 57197 57201 57685\nf 57197 57682 57679\nf 57197 57685 57682\nf 57198 57200 57199\nf 57198 57680 57200\nf 57199 57200 57684\nf 57199 57684 57202\nf 57200 57680 57681\nf 57200 57681 57684\nf 57201 57203 57688\nf 57201 57688 57685\nf 57202 57684 57687\nf 57202 57687 57204\nf 57203 57205 57688\nf 57204 57687 57691\nf 57204 57691 57208\nf 57205 57206 57207\nf 57205 57207 57689\nf 57205 57689 57688\nf 57206 57209 57207\nf 57207 57209 57692\nf 57207 57692 57689\nf 57208 57691 57693\nf 57208 57693 57210\nf 57209 57211 57697\nf 57209 57694 57692\nf 57209 57697 57694\nf 57210 57693 57695\nf 57210 57695 57212\nf 57211 57213 57701\nf 57211 57701 57697\nf 57212 57695 57698\nf 57212 57698 57214\nf 57213 57216 57703\nf 57213 57703 57701\nf 57214 57215 57218\nf 57214 57218 57217\nf 57214 57698 57215\nf 57215 57698 57699\nf 57215 57699 57702\nf 57215 57702 57218\nf 57216 57219 57705\nf 57216 57705 57703\nf 57217 57218 57222\nf 57217 57222 57221\nf 57218 57702 57704\nf 57218 57704 57222\nf 57219 57220 57707\nf 57219 57707 57705\nf 57220 57223 57224\nf 57220 57224 57707\nf 57221 57222 57226\nf 57221 57226 57225\nf 57222 57704 57706\nf 57222 57706 57226\nf 57223 57227 57710\nf 57223 57710 57224\nf 57224 57708 57707\nf 57224 57710 57708\nf 57225 57226 57230\nf 57225 57230 57228\nf 57226 57706 57709\nf 57226 57709 57230\nf 57227 57231 57713\nf 57227 57713 57710\nf 57228 57230 57229\nf 57229 57230 57712\nf 57229 57712 57232\nf 57230 57709 57712\nf 57231 57234 57715\nf 57231 57715 57713\nf 57232 57236 57233\nf 57232 57712 57714\nf 57232 57714 57716\nf 57232 57716 57236\nf 57233 57236 57235\nf 57234 57237 57717\nf 57234 57717 57715\nf 57235 57236 57240\nf 57235 57240 57239\nf 57236 57716 57240\nf 57237 57238 57717\nf 57238 57241 57721\nf 57238 57718 57717\nf 57238 57721 57718\nf 57239 57240 57720\nf 57239 57720 57723\nf 57239 57723 57242\nf 57240 57716 57719\nf 57240 57719 57720\nf 57241 57243 57725\nf 57241 57725 57721\nf 57242 57723 57245\nf 57243 57244 57725\nf 57244 57246 57728\nf 57244 57726 57725\nf 57244 57728 57726\nf 57245 57723 57727\nf 57245 57727 57248\nf 57246 57247 57728\nf 57247 57249 57732\nf 57247 57729 57728\nf 57247 57732 57729\nf 57248 57727 57731\nf 57248 57731 57251\nf 57249 57250 57732\nf 57250 57252 57736\nf 57250 57733 57732\nf 57250 57736 57733\nf 57251 57731 57735\nf 57251 57735 57737\nf 57251 57737 57253\nf 57252 57253 57736\nf 57253 57737 57736\nf 57254 57255 57740\nf 57254 57262 57260\nf 57254 57740 57744\nf 57254 57744 57262\nf 57255 57256 57740\nf 57256 57257 57741\nf 57256 57741 57740\nf 57257 57258 57265\nf 57257 57263 57741\nf 57257 57265 57263\nf 57258 57264 57265\nf 57259 57261 57742\nf 57259 57742 57753\nf 57259 57753 57270\nf 57260 57262 57261\nf 57261 57262 57745\nf 57261 57743 57742\nf 57261 57745 57743\nf 57262 57744 57745\nf 57263 57265 57748\nf 57263 57747 57741\nf 57263 57748 57747\nf 57264 57266 57749\nf 57264 57749 57265\nf 57265 57749 57748\nf 57266 57267 57750\nf 57266 57750 57749\nf 57267 57268 57751\nf 57267 57751 57750\nf 57268 57272 57273\nf 57268 57273 57751\nf 57269 57271 57752\nf 57269 57752 57758\nf 57269 57758 57276\nf 57270 57753 57271\nf 57271 57753 57754\nf 57271 57754 57752\nf 57272 57274 57756\nf 57272 57756 57273\nf 57273 57755 57751\nf 57273 57756 57755\nf 57274 57275 57757\nf 57274 57757 57756\nf 57275 57278 57279\nf 57275 57279 57757\nf 57276 57758 57277\nf 57277 57758 57759\nf 57277 57759 57763\nf 57277 57763 57281\nf 57278 57280 57762\nf 57278 57762 57279\nf 57279 57761 57757\nf 57279 57762 57761\nf 57280 57282 57283\nf 57280 57283 57765\nf 57280 57765 57762\nf 57281 57763 57284\nf 57282 57287 57771\nf 57282 57766 57283\nf 57282 57771 57766\nf 57283 57766 57765\nf 57284 57763 57767\nf 57284 57767 57768\nf 57284 57768 57285\nf 57285 57768 57770\nf 57285 57770 57286\nf 57286 57770 57289\nf 57287 57288 57771\nf 57288 57302 57786\nf 57288 57772 57771\nf 57288 57786 57772\nf 57289 57770 57773\nf 57289 57773 57774\nf 57289 57774 57290\nf 57290 57774 57775\nf 57290 57775 57291\nf 57291 57775 57776\nf 57291 57776 57292\nf 57292 57776 57777\nf 57292 57777 57293\nf 57293 57777 57778\nf 57293 57778 57294\nf 57294 57778 57779\nf 57294 57779 57295\nf 57295 57779 57780\nf 57295 57780 57296\nf 57296 57780 57781\nf 57296 57781 57297\nf 57297 57781 57782\nf 57297 57782 57298\nf 57298 57782 57783\nf 57298 57783 57299\nf 57299 57783 57784\nf 57299 57784 57300\nf 57300 57784 57785\nf 57300 57785 57301\nf 57301 57785 57787\nf 57301 57787 57303\nf 57302 57303 57786\nf 57303 57787 57786\nf 57304 57305 57791\nf 57304 57791 57797\nf 57304 57797 57310\nf 57305 57306 57792\nf 57305 57792 57791\nf 57306 57312 57793\nf 57306 57793 57792\nf 57307 57308 57794\nf 57307 57794 57802\nf 57307 57802 57314\nf 57308 57309 57795\nf 57308 57795 57794\nf 57309 57316 57796\nf 57309 57796 57795\nf 57310 57797 57311\nf 57311 57797 57798\nf 57311 57798 57806\nf 57311 57806 57318\nf 57312 57313 57800\nf 57312 57799 57793\nf 57312 57800 57799\nf 57313 57320 57800\nf 57314 57802 57315\nf 57315 57802 57803\nf 57315 57803 57811\nf 57315 57811 57322\nf 57316 57317 57805\nf 57316 57804 57796\nf 57316 57805 57804\nf 57317 57323 57805\nf 57318 57806 57319\nf 57319 57806 57807\nf 57319 57807 57814\nf 57319 57814 57325\nf 57320 57321 57809\nf 57320 57808 57800\nf 57320 57809 57808\nf 57321 57326 57809\nf 57322 57811 57327\nf 57323 57324 57813\nf 57323 57812 57805\nf 57323 57813 57812\nf 57324 57328 57813\nf 57325 57814 57329\nf 57326 57330 57819\nf 57326 57815 57809\nf 57326 57819 57815\nf 57327 57811 57816\nf 57327 57816 57331\nf 57328 57332 57821\nf 57328 57817 57813\nf 57328 57821 57817\nf 57329 57814 57818\nf 57329 57818 57333\nf 57330 57334 57823\nf 57330 57823 57819\nf 57331 57816 57820\nf 57331 57820 57335\nf 57332 57336 57827\nf 57332 57827 57821\nf 57333 57818 57822\nf 57333 57822 57337\nf 57334 57338 57823\nf 57335 57820 57826\nf 57335 57826 57341\nf 57336 57343 57832\nf 57336 57832 57827\nf 57337 57822 57828\nf 57337 57828 57344\nf 57338 57339 57340\nf 57338 57340 57824\nf 57338 57824 57823\nf 57339 57345 57340\nf 57340 57345 57829\nf 57340 57829 57824\nf 57341 57826 57830\nf 57341 57830 57342\nf 57342 57830 57831\nf 57342 57831 57835\nf 57342 57835 57346\nf 57343 57347 57836\nf 57343 57836 57832\nf 57344 57828 57833\nf 57344 57833 57348\nf 57345 57350 57839\nf 57345 57834 57829\nf 57345 57839 57834\nf 57346 57835 57352\nf 57347 57353 57842\nf 57347 57842 57836\nf 57348 57833 57837\nf 57348 57837 57349\nf 57349 57837 57838\nf 57349 57838 57845\nf 57349 57845 57355\nf 57350 57351 57839\nf 57351 57356 57846\nf 57351 57840 57839\nf 57351 57846 57840\nf 57352 57835 57841\nf 57352 57841 57357\nf 57353 57354 57843\nf 57353 57843 57842\nf 57354 57359 57843\nf 57355 57845 57361\nf 57356 57362 57855\nf 57356 57855 57846\nf 57357 57841 57848\nf 57357 57848 57849\nf 57357 57849 57358\nf 57358 57849 57363\nf 57359 57360 57851\nf 57359 57850 57843\nf 57359 57851 57850\nf 57360 57364 57853\nf 57360 57853 57851\nf 57361 57845 57854\nf 57361 57854 57368\nf 57362 57370 57863\nf 57362 57863 57855\nf 57363 57849 57856\nf 57363 57856 57371\nf 57364 57365 57366\nf 57364 57366 57853\nf 57365 57367 57859\nf 57365 57859 57366\nf 57366 57858 57853\nf 57366 57859 57858\nf 57367 57372 57860\nf 57367 57860 57859\nf 57368 57854 57861\nf 57368 57861 57369\nf 57369 57861 57862\nf 57369 57862 57947\nf 57369 57947 57456\nf 57370 57458 57950\nf 57370 57950 57863\nf 57371 57856 57864\nf 57371 57864 57459\nf 57372 57373 57374\nf 57372 57374 57860\nf 57373 57375 57866\nf 57373 57866 57374\nf 57374 57865 57860\nf 57374 57866 57865\nf 57375 57376 57866\nf 57376 57377 57867\nf 57376 57867 57866\nf 57377 57378 57868\nf 57377 57868 57867\nf 57378 57379 57869\nf 57378 57869 57868\nf 57379 57380 57870\nf 57379 57870 57869\nf 57380 57381 57871\nf 57380 57871 57870\nf 57381 57382 57872\nf 57381 57872 57871\nf 57382 57383 57873\nf 57382 57873 57872\nf 57383 57384 57874\nf 57383 57874 57873\nf 57384 57385 57875\nf 57384 57875 57874\nf 57385 57386 57876\nf 57385 57876 57875\nf 57386 57387 57877\nf 57386 57877 57876\nf 57387 57388 57878\nf 57387 57878 57877\nf 57388 57389 57879\nf 57388 57879 57878\nf 57389 57390 57880\nf 57389 57880 57879\nf 57390 57391 57881\nf 57390 57881 57880\nf 57391 57392 57882\nf 57391 57882 57881\nf 57392 57393 57883\nf 57392 57883 57882\nf 57393 57394 57884\nf 57393 57884 57883\nf 57394 57395 57885\nf 57394 57885 57884\nf 57395 57396 57886\nf 57395 57886 57885\nf 57396 57397 57887\nf 57396 57887 57886\nf 57397 57398 57888\nf 57397 57888 57887\nf 57398 57399 57889\nf 57398 57889 57888\nf 57399 57400 57890\nf 57399 57890 57889\nf 57400 57401 57891\nf 57400 57891 57890\nf 57401 57402 57892\nf 57401 57892 57891\nf 57402 57403 57893\nf 57402 57893 57892\nf 57403 57404 57894\nf 57403 57894 57893\nf 57404 57405 57895\nf 57404 57895 57894\nf 57405 57406 57896\nf 57405 57896 57895\nf 57406 57407 57897\nf 57406 57897 57896\nf 57407 57408 57898\nf 57407 57898 57897\nf 57408 57409 57899\nf 57408 57899 57898\nf 57409 57410 57900\nf 57409 57900 57899\nf 57410 57411 57901\nf 57410 57901 57900\nf 57411 57412 57902\nf 57411 57902 57901\nf 57412 57413 57903\nf 57412 57903 57902\nf 57413 57414 57904\nf 57413 57904 57903\nf 57414 57415 57905\nf 57414 57905 57904\nf 57415 57416 57906\nf 57415 57906 57905\nf 57416 57417 57907\nf 57416 57907 57906\nf 57417 57418 57908\nf 57417 57908 57907\nf 57418 57419 57909\nf 57418 57909 57908\nf 57419 57420 57910\nf 57419 57910 57909\nf 57420 57421 57911\nf 57420 57911 57910\nf 57421 57422 57912\nf 57421 57912 57911\nf 57422 57423 57913\nf 57422 57913 57912\nf 57423 57424 57914\nf 57423 57914 57913\nf 57424 57425 57915\nf 57424 57915 57914\nf 57425 57426 57916\nf 57425 57916 57915\nf 57426 57427 57917\nf 57426 57917 57916\nf 57427 57428 57918\nf 57427 57918 57917\nf 57428 57429 57919\nf 57428 57919 57918\nf 57429 57430 57920\nf 57429 57920 57919\nf 57430 57431 57921\nf 57430 57921 57920\nf 57431 57432 57922\nf 57431 57922 57921\nf 57432 57433 57923\nf 57432 57923 57922\nf 57433 57434 57924\nf 57433 57924 57923\nf 57434 57435 57925\nf 57434 57925 57924\nf 57435 57436 57926\nf 57435 57926 57925\nf 57436 57437 57927\nf 57436 57927 57926\nf 57437 57438 57928\nf 57437 57928 57927\nf 57438 57439 57929\nf 57438 57929 57928\nf 57439 57440 57930\nf 57439 57930 57929\nf 57440 57441 57931\nf 57440 57931 57930\nf 57441 57442 57932\nf 57441 57932 57931\nf 57442 57443 57933\nf 57442 57933 57932\nf 57443 57444 57934\nf 57443 57934 57933\nf 57444 57445 57935\nf 57444 57935 57934\nf 57445 57446 57936\nf 57445 57936 57935\nf 57446 57447 57937\nf 57446 57937 57936\nf 57447 57448 57938\nf 57447 57938 57937\nf 57448 57449 57939\nf 57448 57939 57938\nf 57449 57450 57940\nf 57449 57940 57939\nf 57450 57451 57941\nf 57450 57941 57940\nf 57451 57452 57942\nf 57451 57942 57941\nf 57452 57453 57943\nf 57452 57943 57942\nf 57453 57454 57944\nf 57453 57944 57943\nf 57454 57455 57945\nf 57454 57945 57944\nf 57455 57457 57946\nf 57455 57946 57945\nf 57456 57947 57457\nf 57457 57947 57948\nf 57457 57948 57946\nf 57458 57460 57952\nf 57458 57952 57950\nf 57459 57864 57951\nf 57459 57951 57461\nf 57460 57462 57954\nf 57460 57954 57952\nf 57461 57951 57953\nf 57461 57953 57464\nf 57462 57463 57954\nf 57463 57466 57958\nf 57463 57955 57954\nf 57463 57958 57955\nf 57464 57953 57956\nf 57464 57956 57957\nf 57464 57957 57465\nf 57465 57957 57468\nf 57466 57467 57958\nf 57467 57469 57962\nf 57467 57959 57958\nf 57467 57962 57959\nf 57468 57957 57960\nf 57468 57960 57471\nf 57469 57470 57962\nf 57470 57482 57976\nf 57470 57963 57962\nf 57470 57976 57963\nf 57471 57960 57964\nf 57471 57964 57965\nf 57471 57965 57472\nf 57472 57965 57966\nf 57472 57966 57473\nf 57473 57966 57484\nf 57474 57564 57566\nf 57474 57566 57967\nf 57474 57967 57968\nf 57474 57968 57969\nf 57474 57969 57475\nf 57475 57969 57970\nf 57475 57970 57476\nf 57476 57970 57971\nf 57476 57971 57477\nf 57477 57971 57972\nf 57477 57972 57478\nf 57478 57972 57973\nf 57478 57973 57479\nf 57479 57973 57974\nf 57479 57974 57480\nf 57480 57974 57975\nf 57480 57975 57481\nf 57481 57975 57977\nf 57481 57977 57483\nf 57482 57483 57976\nf 57483 57977 57976\nf 57484 57966 57978\nf 57484 57978 57979\nf 57484 57979 57485\nf 57485 57979 57980\nf 57485 57980 57486\nf 57486 57980 57567\nf 57487 57573 58063\nf 57487 57981 57982\nf 57487 57982 57488\nf 57487 58063 57981\nf 57488 57982 57983\nf 57488 57983 57489\nf 57489 57983 57984\nf 57489 57984 57490\nf 57490 57984 57985\nf 57490 57985 57491\nf 57491 57985 57986\nf 57491 57986 57492\nf 57492 57986 57987\nf 57492 57987 57493\nf 57493 57987 57988\nf 57493 57988 57494\nf 57494 57988 57989\nf 57494 57989 57495\nf 57495 57989 57990\nf 57495 57990 57496\nf 57496 57990 57991\nf 57496 57991 57497\nf 57497 57991 57992\nf 57497 57992 57498\nf 57498 57992 57993\nf 57498 57993 57499\nf 57499 57993 57994\nf 57499 57994 57500\nf 57500 57994 57995\nf 57500 57995 57501\nf 57501 57995 57996\nf 57501 57996 57502\nf 57502 57996 57997\nf 57502 57997 57503\nf 57503 57997 57998\nf 57503 57998 57504\nf 57504 57998 57999\nf 57504 57999 57505\nf 57505 57999 58000\nf 57505 58000 57506\nf 57506 58000 58001\nf 57506 58001 57507\nf 57507 58001 58002\nf 57507 58002 57508\nf 57508 58002 58003\nf 57508 58003 57509\nf 57509 58003 58004\nf 57509 58004 57510\nf 57510 58004 58005\nf 57510 58005 57511\nf 57511 58005 58006\nf 57511 58006 57512\nf 57512 58006 58007\nf 57512 58007 57513\nf 57513 58007 58008\nf 57513 58008 57514\nf 57514 58008 58009\nf 57514 58009 57515\nf 57515 58009 58010\nf 57515 58010 57516\nf 57516 58010 58011\nf 57516 58011 57517\nf 57517 58011 58012\nf 57517 58012 57518\nf 57518 58012 58013\nf 57518 58013 57519\nf 57519 58013 58014\nf 57519 58014 57520\nf 57520 58014 58015\nf 57520 58015 57521\nf 57521 58015 58016\nf 57521 58016 57522\nf 57522 58016 58017\nf 57522 58017 57523\nf 57523 58017 58018\nf 57523 58018 57524\nf 57524 58018 58019\nf 57524 58019 57525\nf 57525 58019 58020\nf 57525 58020 57526\nf 57526 58020 58021\nf 57526 58021 57527\nf 57527 58021 58022\nf 57527 58022 57528\nf 57528 58022 58023\nf 57528 58023 57529\nf 57529 58023 58024\nf 57529 58024 57530\nf 57530 58024 58025\nf 57530 58025 57531\nf 57531 58025 58026\nf 57531 58026 57532\nf 57532 58026 58027\nf 57532 58027 57533\nf 57533 58027 58028\nf 57533 58028 57534\nf 57534 58028 58029\nf 57534 58029 57535\nf 57535 58029 58030\nf 57535 58030 57536\nf 57536 58030 58031\nf 57536 58031 57537\nf 57537 58031 58032\nf 57537 58032 57538\nf 57538 58032 58033\nf 57538 58033 57539\nf 57539 58033 58034\nf 57539 58034 57540\nf 57540 58034 58035\nf 57540 58035 57541\nf 57541 58035 58036\nf 57541 58036 57542\nf 57542 58036 58037\nf 57542 58037 57543\nf 57543 58037 58038\nf 57543 58038 57544\nf 57544 58038 58039\nf 57544 58039 57545\nf 57545 58039 58040\nf 57545 58040 57546\nf 57546 58040 58041\nf 57546 58041 57547\nf 57547 58041 58042\nf 57547 58042 57548\nf 57548 58042 58043\nf 57548 58043 57549\nf 57549 58043 58044\nf 57549 58044 57550\nf 57550 58044 58045\nf 57550 58045 57551\nf 57551 58045 58046\nf 57551 58046 57552\nf 57552 58046 58047\nf 57552 58047 57553\nf 57553 58047 58048\nf 57553 58048 57554\nf 57554 58048 58049\nf 57554 58049 57555\nf 57555 58049 58050\nf 57555 58050 57556\nf 57556 58050 58051\nf 57556 58051 57557\nf 57557 58051 58052\nf 57557 58052 57558\nf 57558 58052 58053\nf 57558 58053 57559\nf 57559 58053 58054\nf 57559 58054 57560\nf 57560 58054 58055\nf 57560 58055 57561\nf 57561 58055 58056\nf 57561 58056 57562\nf 57562 58056 58058\nf 57562 58058 57563\nf 57563 58058 57565\nf 57564 57565 57566\nf 57565 58057 57566\nf 57565 58058 58057\nf 57566 58057 57967\nf 57567 57980 58059\nf 57567 58059 58060\nf 57567 58060 57568\nf 57568 58060 57569\nf 57569 57576 57575\nf 57569 58060 57576\nf 57570 57577 57579\nf 57570 57579 58070\nf 57570 58061 57571\nf 57570 58070 58061\nf 57571 58061 58062\nf 57571 58062 57572\nf 57572 58062 58064\nf 57572 58064 57574\nf 57573 57574 58063\nf 57574 58064 58063\nf 57575 57576 58068\nf 57575 58068 57578\nf 57576 58060 58066\nf 57576 58066 58068\nf 57577 57578 57579\nf 57578 58068 58069\nf 57578 58069 58071\nf 57578 58071 57579\nf 57579 58071 58070\nf 57580 57581 58078\nf 57580 57582 57581\nf 57580 58078 58079\nf 57580 58079 57586\nf 57581 57582 57583\nf 57581 57583 58074\nf 57581 58072 58078\nf 57581 58074 58072\nf 57582 57584 57583\nf 57583 57584 57585\nf 57583 57585 58076\nf 57583 58076 58074\nf 57584 57589 57591\nf 57584 57591 58082\nf 57584 58082 57585\nf 57585 58081 58076\nf 57585 58082 58081\nf 57586 57588 57587\nf 57586 58079 57588\nf 57587 57588 58084\nf 57587 58084 58085\nf 57587 58085 57592\nf 57588 58079 58084\nf 57589 57590 57591\nf 57590 57595 57591\nf 57591 57595 58086\nf 57591 58086 58082\nf 57592 57594 57593\nf 57592 58085 57594\nf 57593 57594 58087\nf 57593 58087 57596\nf 57594 58085 58087\nf 57595 57597 58088\nf 57595 58088 58086\nf 57596 58087 58091\nf 57596 58091 57599\nf 57597 57598 58089\nf 57597 57601 57598\nf 57597 58089 58088\nf 57598 57601 57603\nf 57598 57603 58095\nf 57598 58092 58089\nf 57598 58095 58092\nf 57599 58091 58093\nf 57599 58093 57600\nf 57600 58093 58094\nf 57600 58094 58096\nf 57600 58096 57604\nf 57601 57602 57603\nf 57602 57605 57603\nf 57603 57605 58095\nf 57604 58096 57606\nf 57605 57607 58100\nf 57605 58098 58095\nf 57605 58100 58098\nf 57606 58096 58099\nf 57606 58099 57608\nf 57607 57609 58102\nf 57607 58102 58100\nf 57608 58099 58101\nf 57608 58101 57610\nf 57609 57611 58104\nf 57609 58104 58102\nf 57610 58101 58103\nf 57610 58103 57612\nf 57611 57613 58106\nf 57611 58106 58104\nf 57612 58103 58105\nf 57612 58105 57614\nf 57613 57615 58108\nf 57613 58108 58106\nf 57614 58105 58107\nf 57614 58107 57616\nf 57615 57617 58110\nf 57615 58110 58108\nf 57616 58107 58109\nf 57616 58109 57618\nf 57617 57619 58112\nf 57617 58112 58110\nf 57618 58109 58111\nf 57618 58111 57620\nf 57619 57621 58114\nf 57619 58114 58112\nf 57620 58111 58113\nf 57620 58113 57622\nf 57621 57623 58116\nf 57621 58116 58114\nf 57622 58113 58115\nf 57622 58115 57624\nf 57623 57625 58118\nf 57623 58118 58116\nf 57624 58115 58117\nf 57624 58117 57627\nf 57625 57626 58122\nf 57625 58122 58118\nf 57626 57629 57630\nf 57626 57630 58122\nf 57627 58117 58119\nf 57627 58119 58120\nf 57627 58120 57628\nf 57628 58120 57631\nf 57629 57632 58125\nf 57629 58125 57630\nf 57630 58123 58122\nf 57630 58125 58123\nf 57631 58120 58124\nf 57631 58124 57633\nf 57632 57635 58127\nf 57632 58127 58125\nf 57633 57638 57634\nf 57633 58124 58126\nf 57633 58126 58129\nf 57633 58129 57638\nf 57634 57638 57637\nf 57635 57636 58127\nf 57636 57639 58131\nf 57636 58128 58127\nf 57636 58131 58128\nf 57637 57638 58130\nf 57637 58130 58133\nf 57637 58133 57640\nf 57638 58129 58130\nf 57639 57641 58134\nf 57639 58134 58131\nf 57640 58133 57643\nf 57641 57642 58134\nf 57642 57645 58137\nf 57642 58135 58134\nf 57642 58137 58135\nf 57643 57648 57644\nf 57643 58133 58136\nf 57643 58136 58139\nf 57643 58139 57648\nf 57644 57648 57647\nf 57645 57646 58141\nf 57645 58141 58137\nf 57646 57649 57651\nf 57646 57651 58141\nf 57647 57648 57650\nf 57648 58139 58140\nf 57648 58140 57650\nf 57649 57650 57651\nf 57650 57652 57651\nf 57650 58140 57652\nf 57651 57652 58142\nf 57651 58142 58141\nf 57652 58140 58143\nf 57652 58143 58146\nf 57652 58145 58142\nf 57652 58146 58145\nf 57653 57654 57655\nf 57653 57655 58162\nf 57653 58153 58156\nf 57653 58156 57654\nf 57653 58159 58153\nf 57653 58162 58159\nf 57654 57657 57658\nf 57654 57658 57655\nf 57654 58156 58157\nf 57654 58157 58160\nf 57654 58160 57657\nf 57655 57658 58166\nf 57655 58166 58162\nf 57656 57657 58163\nf 57656 57661 57657\nf 57656 58163 58164\nf 57656 58164 57659\nf 57657 57661 57662\nf 57657 57662 57658\nf 57657 58160 58163\nf 57658 57662 58168\nf 57658 58168 58166\nf 57659 57660 57664\nf 57659 57664 57663\nf 57659 58164 57660\nf 57660 58164 58167\nf 57660 58167 57664\nf 57661 57665 57662\nf 57662 57665 57666\nf 57662 57666 58170\nf 57662 58170 58168\nf 57663 57664 57669\nf 57663 57669 57667\nf 57664 58167 58169\nf 57664 58169 57669\nf 57665 57670 57666\nf 57666 57670 57671\nf 57666 57671 58173\nf 57666 58173 58170\nf 57667 57669 57668\nf 57668 57669 58171\nf 57668 58171 57672\nf 57669 58169 58171\nf 57670 57673 57671\nf 57671 57673 57675\nf 57671 57675 58177\nf 57671 58177 58173\nf 57672 58171 58174\nf 57672 58174 57676\nf 57673 57674 57675\nf 57674 57679 57675\nf 57675 57679 58177\nf 57676 57678 57677\nf 57676 58174 57678\nf 57677 57678 58178\nf 57677 58178 57680\nf 57678 58174 58175\nf 57678 58175 58178\nf 57679 57682 58179\nf 57679 58179 58177\nf 57680 58178 58182\nf 57680 58182 57681\nf 57681 58182 58183\nf 57681 58183 58185\nf 57681 58185 57684\nf 57682 57683 58180\nf 57682 57685 57683\nf 57682 58180 58179\nf 57683 57685 57686\nf 57683 57686 58186\nf 57683 58184 58180\nf 57683 58186 58184\nf 57684 58185 57687\nf 57685 57688 57686\nf 57686 57688 57690\nf 57686 57690 58188\nf 57686 58188 58186\nf 57687 58185 58187\nf 57687 58187 57691\nf 57688 57689 57690\nf 57689 57692 57690\nf 57690 57692 58188\nf 57691 58187 58189\nf 57691 58189 57693\nf 57692 57694 58194\nf 57692 58190 58188\nf 57692 58194 58190\nf 57693 58189 58191\nf 57693 58191 57695\nf 57694 57697 58196\nf 57694 58196 58194\nf 57695 57696 57700\nf 57695 57700 57698\nf 57695 58191 57696\nf 57696 58191 58192\nf 57696 58192 58195\nf 57696 58195 57700\nf 57697 57701 58198\nf 57697 58198 58196\nf 57698 57700 57699\nf 57699 57700 58197\nf 57699 58197 57702\nf 57700 58195 58197\nf 57701 57703 58200\nf 57701 58200 58198\nf 57702 58197 58199\nf 57702 58199 57704\nf 57703 57705 58202\nf 57703 58202 58200\nf 57704 58199 58201\nf 57704 58201 57706\nf 57705 57707 58204\nf 57705 58204 58202\nf 57706 58201 58203\nf 57706 58203 57709\nf 57707 57708 58206\nf 57707 58206 58204\nf 57708 57710 57711\nf 57708 57711 58206\nf 57709 58203 58205\nf 57709 58205 57712\nf 57710 57713 58209\nf 57710 58209 57711\nf 57711 58207 58206\nf 57711 58209 58207\nf 57712 58205 58208\nf 57712 58208 57714\nf 57713 57715 58212\nf 57713 58212 58209\nf 57714 58208 58211\nf 57714 58211 57716\nf 57715 57717 58215\nf 57715 58215 58212\nf 57716 58211 58214\nf 57716 58214 57719\nf 57717 57718 58217\nf 57717 58217 58215\nf 57718 57721 57722\nf 57718 57722 58217\nf 57719 57724 57720\nf 57719 58214 58216\nf 57719 58216 58219\nf 57719 58219 57724\nf 57720 57724 57723\nf 57721 57725 58221\nf 57721 58221 57722\nf 57722 58218 58217\nf 57722 58221 58218\nf 57723 57724 58220\nf 57723 58220 58223\nf 57723 58223 57727\nf 57724 58219 58220\nf 57725 57726 58224\nf 57725 58224 58221\nf 57726 57728 57730\nf 57726 57730 58224\nf 57727 58223 57731\nf 57728 57729 57730\nf 57729 57732 57734\nf 57729 57734 57730\nf 57730 57734 58225\nf 57730 58225 58224\nf 57731 58223 58226\nf 57731 58226 57735\nf 57732 57733 57734\nf 57733 57736 57738\nf 57733 57738 57734\nf 57734 57738 58228\nf 57734 58227 58225\nf 57734 58228 58227\nf 57735 57739 57737\nf 57735 58226 58229\nf 57735 58229 58233\nf 57735 58233 57739\nf 57736 57737 57738\nf 57737 57739 57738\nf 57738 57739 58231\nf 57738 58230 58228\nf 57738 58231 58230\nf 57739 58233 58235\nf 57739 58234 58231\nf 57739 58235 58234\nf 57740 57741 58242\nf 57740 57746 57744\nf 57740 58241 57746\nf 57740 58242 58241\nf 57741 57747 58243\nf 57741 58243 58242\nf 57742 57743 58244\nf 57742 58244 58254\nf 57742 58254 57753\nf 57743 57745 58246\nf 57743 58246 58244\nf 57744 57746 57745\nf 57745 57746 58245\nf 57745 58245 58246\nf 57746 58241 58245\nf 57747 57748 58249\nf 57747 58248 58243\nf 57747 58249 58248\nf 57748 57749 58249\nf 57749 57750 58251\nf 57749 58251 58249\nf 57750 57751 58252\nf 57750 58252 58251\nf 57751 57755 58253\nf 57751 58253 58252\nf 57752 57754 58255\nf 57752 57760 57758\nf 57752 58255 58260\nf 57752 58260 57760\nf 57753 58254 57754\nf 57754 58254 58255\nf 57755 57756 58258\nf 57755 58257 58253\nf 57755 58258 58257\nf 57756 57757 58258\nf 57757 57761 58259\nf 57757 58259 58258\nf 57758 57760 57759\nf 57759 57760 58261\nf 57759 57764 57763\nf 57759 58261 57764\nf 57760 58260 58261\nf 57761 57762 58264\nf 57761 58263 58259\nf 57761 58264 58263\nf 57762 57765 58264\nf 57763 57764 57767\nf 57764 57769 57767\nf 57764 58261 58265\nf 57764 58265 58269\nf 57764 58269 57769\nf 57765 57766 58268\nf 57765 58267 58264\nf 57765 58268 58267\nf 57766 57771 58268\nf 57767 57769 57768\nf 57768 57769 58271\nf 57768 58271 57770\nf 57769 58269 58271\nf 57770 58271 57773\nf 57771 57772 58272\nf 57771 58272 58268\nf 57772 57786 58284\nf 57772 58273 58272\nf 57772 58284 58273\nf 57773 58271 58274\nf 57773 58274 58275\nf 57773 58275 57774\nf 57774 58275 58276\nf 57774 58276 57775\nf 57775 58276 58277\nf 57775 58277 57776\nf 57776 58277 58278\nf 57776 58278 57777\nf 57777 58278 58279\nf 57777 58279 57778\nf 57778 58279 58280\nf 57778 58280 57779\nf 57779 58280 58281\nf 57779 58281 57780\nf 57780 58281 57781\nf 57781 57788 57789\nf 57781 57789 57782\nf 57781 58281 57788\nf 57782 57789 57790\nf 57782 57790 57783\nf 57783 57790 58295\nf 57783 58282 57784\nf 57783 58295 58282\nf 57784 58282 58283\nf 57784 58283 57785\nf 57785 58283 58285\nf 57785 58285 57787\nf 57786 57787 58284\nf 57787 58285 58284\nf 57788 58281 58291\nf 57788 58291 58293\nf 57788 58293 57789\nf 57789 58293 58294\nf 57789 58294 57790\nf 57790 58294 58296\nf 57790 58296 58295\nf 57791 57792 58298\nf 57791 58298 58307\nf 57791 58307 57797\nf 57792 57793 58299\nf 57792 58299 58298\nf 57793 57799 58301\nf 57793 58300 58299\nf 57793 58301 58300\nf 57794 57795 58302\nf 57794 58302 58312\nf 57794 58312 57802\nf 57795 57796 58304\nf 57795 58304 58302\nf 57796 57804 58306\nf 57796 58306 58304\nf 57797 58307 57798\nf 57798 58307 58308\nf 57798 58308 58318\nf 57798 58318 57806\nf 57799 57800 57801\nf 57799 57801 58301\nf 57800 57808 57810\nf 57800 57810 58311\nf 57800 58311 57801\nf 57801 58310 58301\nf 57801 58311 58310\nf 57802 58312 57803\nf 57803 58312 58313\nf 57803 58313 58321\nf 57803 58321 57811\nf 57804 57805 58316\nf 57804 58315 58306\nf 57804 58316 58315\nf 57805 57812 58316\nf 57806 58318 57807\nf 57807 58318 58319\nf 57807 58319 58325\nf 57807 58325 57814\nf 57808 57809 57810\nf 57809 57815 57810\nf 57810 57815 58320\nf 57810 58320 58311\nf 57811 58321 57816\nf 57812 57813 58323\nf 57812 58322 58316\nf 57812 58323 58322\nf 57813 57817 58323\nf 57814 58325 57818\nf 57815 57819 58330\nf 57815 58326 58320\nf 57815 58330 58326\nf 57816 58321 58327\nf 57816 58327 57820\nf 57817 57821 58334\nf 57817 58328 58323\nf 57817 58334 58328\nf 57818 58325 58329\nf 57818 58329 57822\nf 57819 57823 58330\nf 57820 58327 58333\nf 57820 58333 57826\nf 57821 57827 58338\nf 57821 58338 58334\nf 57822 58329 58335\nf 57822 58335 57828\nf 57823 57824 57825\nf 57823 57825 58331\nf 57823 58331 58330\nf 57824 57829 57825\nf 57825 57829 58336\nf 57825 58336 58331\nf 57826 58333 58337\nf 57826 58337 57830\nf 57827 57832 58343\nf 57827 58343 58338\nf 57828 58335 58339\nf 57828 58339 57833\nf 57829 57834 58345\nf 57829 58340 58336\nf 57829 58345 58340\nf 57830 58337 58341\nf 57830 58341 57831\nf 57831 58341 58342\nf 57831 58342 58346\nf 57831 58346 57835\nf 57832 57836 58347\nf 57832 58347 58343\nf 57833 58339 58344\nf 57833 58344 57837\nf 57834 57839 58353\nf 57834 58353 58345\nf 57835 58346 57841\nf 57836 57842 58347\nf 57837 58344 58350\nf 57837 58350 57838\nf 57838 58350 58351\nf 57838 58351 58357\nf 57838 58357 57845\nf 57839 57840 58358\nf 57839 58358 58353\nf 57840 57846 57847\nf 57840 57847 58358\nf 57841 58346 58354\nf 57841 58354 57848\nf 57842 57843 57844\nf 57842 57844 58348\nf 57842 58348 58347\nf 57843 57850 57852\nf 57843 57852 58356\nf 57843 58356 57844\nf 57844 58355 58348\nf 57844 58356 58355\nf 57845 58357 57854\nf 57846 57855 58364\nf 57846 58364 57847\nf 57847 58359 58358\nf 57847 58364 58359\nf 57848 57857 57849\nf 57848 58354 58360\nf 57848 58360 58365\nf 57848 58365 57857\nf 57849 57857 57856\nf 57850 57851 57852\nf 57851 57853 58362\nf 57851 58362 57852\nf 57852 58361 58356\nf 57852 58362 58361\nf 57853 57858 58362\nf 57854 58357 58363\nf 57854 58363 57861\nf 57855 57863 58374\nf 57855 58374 58364\nf 57856 57857 58366\nf 57856 58366 58375\nf 57856 58375 57864\nf 57857 58365 58366\nf 57858 57859 58368\nf 57858 58367 58362\nf 57858 58368 58367\nf 57859 57860 58368\nf 57860 57865 58369\nf 57860 58369 58368\nf 57861 58363 58371\nf 57861 58371 57862\nf 57862 57949 57947\nf 57862 58370 57949\nf 57862 58371 58372\nf 57862 58372 58370\nf 57863 57950 58459\nf 57863 58459 58374\nf 57864 58375 57951\nf 57865 57866 58377\nf 57865 58376 58369\nf 57865 58377 58376\nf 57866 57867 58377\nf 57867 57868 58378\nf 57867 58378 58377\nf 57868 57869 58379\nf 57868 58379 58378\nf 57869 57870 58380\nf 57869 58380 58379\nf 57870 57871 58381\nf 57870 58381 58380\nf 57871 57872 58382\nf 57871 58382 58381\nf 57872 57873 58383\nf 57872 58383 58382\nf 57873 57874 58384\nf 57873 58384 58383\nf 57874 57875 58385\nf 57874 58385 58384\nf 57875 57876 58386\nf 57875 58386 58385\nf 57876 57877 58387\nf 57876 58387 58386\nf 57877 57878 58388\nf 57877 58388 58387\nf 57878 57879 58389\nf 57878 58389 58388\nf 57879 57880 58390\nf 57879 58390 58389\nf 57880 57881 58391\nf 57880 58391 58390\nf 57881 57882 58392\nf 57881 58392 58391\nf 57882 57883 58393\nf 57882 58393 58392\nf 57883 57884 58394\nf 57883 58394 58393\nf 57884 57885 58395\nf 57884 58395 58394\nf 57885 57886 58396\nf 57885 58396 58395\nf 57886 57887 58397\nf 57886 58397 58396\nf 57887 57888 58398\nf 57887 58398 58397\nf 57888 57889 58399\nf 57888 58399 58398\nf 57889 57890 58400\nf 57889 58400 58399\nf 57890 57891 58401\nf 57890 58401 58400\nf 57891 57892 58402\nf 57891 58402 58401\nf 57892 57893 58403\nf 57892 58403 58402\nf 57893 57894 58404\nf 57893 58404 58403\nf 57894 57895 58405\nf 57894 58405 58404\nf 57895 57896 58406\nf 57895 58406 58405\nf 57896 57897 58407\nf 57896 58407 58406\nf 57897 57898 58408\nf 57897 58408 58407\nf 57898 57899 58409\nf 57898 58409 58408\nf 57899 57900 58410\nf 57899 58410 58409\nf 57900 57901 58411\nf 57900 58411 58410\nf 57901 57902 58412\nf 57901 58412 58411\nf 57902 57903 58413\nf 57902 58413 58412\nf 57903 57904 58414\nf 57903 58414 58413\nf 57904 57905 58415\nf 57904 58415 58414\nf 57905 57906 58416\nf 57905 58416 58415\nf 57906 57907 58417\nf 57906 58417 58416\nf 57907 57908 58418\nf 57907 58418 58417\nf 57908 57909 58419\nf 57908 58419 58418\nf 57909 57910 58420\nf 57909 58420 58419\nf 57910 57911 58421\nf 57910 58421 58420\nf 57911 57912 58422\nf 57911 58422 58421\nf 57912 57913 58423\nf 57912 58423 58422\nf 57913 57914 58424\nf 57913 58424 58423\nf 57914 57915 58425\nf 57914 58425 58424\nf 57915 57916 58426\nf 57915 58426 58425\nf 57916 57917 58427\nf 57916 58427 58426\nf 57917 57918 58428\nf 57917 58428 58427\nf 57918 57919 58429\nf 57918 58429 58428\nf 57919 57920 58430\nf 57919 58430 58429\nf 57920 57921 58431\nf 57920 58431 58430\nf 57921 57922 58432\nf 57921 58432 58431\nf 57922 57923 58433\nf 57922 58433 58432\nf 57923 57924 58434\nf 57923 58434 58433\nf 57924 57925 58435\nf 57924 58435 58434\nf 57925 57926 58436\nf 57925 58436 58435\nf 57926 57927 58437\nf 57926 58437 58436\nf 57927 57928 58438\nf 57927 58438 58437\nf 57928 57929 58439\nf 57928 58439 58438\nf 57929 57930 58440\nf 57929 58440 58439\nf 57930 57931 58441\nf 57930 58441 58440\nf 57931 57932 58442\nf 57931 58442 58441\nf 57932 57933 58443\nf 57932 58443 58442\nf 57933 57934 58444\nf 57933 58444 58443\nf 57934 57935 58445\nf 57934 58445 58444\nf 57935 57936 58446\nf 57935 58446 58445\nf 57936 57937 58447\nf 57936 58447 58446\nf 57937 57938 58448\nf 57937 58448 58447\nf 57938 57939 58449\nf 57938 58449 58448\nf 57939 57940 58450\nf 57939 58450 58449\nf 57940 57941 58451\nf 57940 58451 58450\nf 57941 57942 58452\nf 57941 58452 58451\nf 57942 57943 58453\nf 57942 58453 58452\nf 57943 57944 58454\nf 57943 58454 58453\nf 57944 57945 58455\nf 57944 58455 58454\nf 57945 57946 58456\nf 57945 58456 58455\nf 57946 57948 58458\nf 57946 58458 58456\nf 57947 57949 57948\nf 57948 57949 58457\nf 57948 58457 58458\nf 57949 58370 58457\nf 57950 57952 58461\nf 57950 58461 58459\nf 57951 58375 58460\nf 57951 58460 57953\nf 57952 57954 58463\nf 57952 58463 58461\nf 57953 58460 58462\nf 57953 58462 57956\nf 57954 57955 58463\nf 57955 57958 58466\nf 57955 58464 58463\nf 57955 58466 58464\nf 57956 57961 57957\nf 57956 58462 58465\nf 57956 58465 58468\nf 57956 58468 57961\nf 57957 57961 57960\nf 57958 57959 58466\nf 57959 57962 58470\nf 57959 58467 58466\nf 57959 58470 58467\nf 57960 57961 58469\nf 57960 58469 58472\nf 57960 58472 57964\nf 57961 58468 58469\nf 57962 57963 58470\nf 57963 57976 58484\nf 57963 58471 58470\nf 57963 58484 58471\nf 57964 58472 58473\nf 57964 58473 57965\nf 57965 58473 58474\nf 57965 58474 57966\nf 57966 58474 57978\nf 57967 58057 58564\nf 57967 58475 58476\nf 57967 58476 57968\nf 57967 58564 58475\nf 57968 58476 58477\nf 57968 58477 57969\nf 57969 58477 58478\nf 57969 58478 57970\nf 57970 58478 58479\nf 57970 58479 57971\nf 57971 58479 58480\nf 57971 58480 57972\nf 57972 58480 58481\nf 57972 58481 57973\nf 57973 58481 58482\nf 57973 58482 57974\nf 57974 58482 58483\nf 57974 58483 57975\nf 57975 58483 58485\nf 57975 58485 57977\nf 57976 57977 58484\nf 57977 58485 58484\nf 57978 58474 58486\nf 57978 58486 58487\nf 57978 58487 57979\nf 57979 58487 58488\nf 57979 58488 57980\nf 57980 58488 58059\nf 57981 58063 58065\nf 57981 58065 58570\nf 57981 58489 57982\nf 57981 58570 58489\nf 57982 58489 58490\nf 57982 58490 57983\nf 57983 58490 58491\nf 57983 58491 57984\nf 57984 58491 58492\nf 57984 58492 57985\nf 57985 58492 58493\nf 57985 58493 57986\nf 57986 58493 58494\nf 57986 58494 57987\nf 57987 58494 58495\nf 57987 58495 57988\nf 57988 58495 58496\nf 57988 58496 57989\nf 57989 58496 58497\nf 57989 58497 57990\nf 57990 58497 58498\nf 57990 58498 57991\nf 57991 58498 58499\nf 57991 58499 57992\nf 57992 58499 58500\nf 57992 58500 57993\nf 57993 58500 58501\nf 57993 58501 57994\nf 57994 58501 58502\nf 57994 58502 57995\nf 57995 58502 58503\nf 57995 58503 57996\nf 57996 58503 58504\nf 57996 58504 57997\nf 57997 58504 58505\nf 57997 58505 57998\nf 57998 58505 58506\nf 57998 58506 57999\nf 57999 58506 58507\nf 57999 58507 58000\nf 58000 58507 58508\nf 58000 58508 58001\nf 58001 58508 58509\nf 58001 58509 58002\nf 58002 58509 58510\nf 58002 58510 58003\nf 58003 58510 58511\nf 58003 58511 58004\nf 58004 58511 58512\nf 58004 58512 58005\nf 58005 58512 58513\nf 58005 58513 58006\nf 58006 58513 58514\nf 58006 58514 58007\nf 58007 58514 58515\nf 58007 58515 58008\nf 58008 58515 58516\nf 58008 58516 58009\nf 58009 58516 58517\nf 58009 58517 58010\nf 58010 58517 58518\nf 58010 58518 58011\nf 58011 58518 58519\nf 58011 58519 58012\nf 58012 58519 58520\nf 58012 58520 58013\nf 58013 58520 58521\nf 58013 58521 58014\nf 58014 58521 58522\nf 58014 58522 58015\nf 58015 58522 58523\nf 58015 58523 58016\nf 58016 58523 58524\nf 58016 58524 58017\nf 58017 58524 58525\nf 58017 58525 58018\nf 58018 58525 58526\nf 58018 58526 58019\nf 58019 58526 58527\nf 58019 58527 58020\nf 58020 58527 58528\nf 58020 58528 58021\nf 58021 58528 58529\nf 58021 58529 58022\nf 58022 58529 58530\nf 58022 58530 58023\nf 58023 58530 58531\nf 58023 58531 58024\nf 58024 58531 58532\nf 58024 58532 58025\nf 58025 58532 58533\nf 58025 58533 58026\nf 58026 58533 58534\nf 58026 58534 58027\nf 58027 58534 58535\nf 58027 58535 58028\nf 58028 58535 58536\nf 58028 58536 58029\nf 58029 58536 58537\nf 58029 58537 58030\nf 58030 58537 58538\nf 58030 58538 58031\nf 58031 58538 58539\nf 58031 58539 58032\nf 58032 58539 58540\nf 58032 58540 58033\nf 58033 58540 58541\nf 58033 58541 58034\nf 58034 58541 58542\nf 58034 58542 58035\nf 58035 58542 58543\nf 58035 58543 58036\nf 58036 58543 58544\nf 58036 58544 58037\nf 58037 58544 58545\nf 58037 58545 58038\nf 58038 58545 58546\nf 58038 58546 58039\nf 58039 58546 58547\nf 58039 58547 58040\nf 58040 58547 58548\nf 58040 58548 58041\nf 58041 58548 58549\nf 58041 58549 58042\nf 58042 58549 58550\nf 58042 58550 58043\nf 58043 58550 58551\nf 58043 58551 58044\nf 58044 58551 58552\nf 58044 58552 58045\nf 58045 58552 58553\nf 58045 58553 58046\nf 58046 58553 58554\nf 58046 58554 58047\nf 58047 58554 58555\nf 58047 58555 58048\nf 58048 58555 58556\nf 58048 58556 58049\nf 58049 58556 58557\nf 58049 58557 58050\nf 58050 58557 58558\nf 58050 58558 58051\nf 58051 58558 58559\nf 58051 58559 58052\nf 58052 58559 58560\nf 58052 58560 58053\nf 58053 58560 58561\nf 58053 58561 58054\nf 58054 58561 58562\nf 58054 58562 58055\nf 58055 58562 58563\nf 58055 58563 58056\nf 58056 58563 58565\nf 58056 58565 58058\nf 58057 58058 58564\nf 58058 58565 58564\nf 58059 58067 58060\nf 58059 58488 58566\nf 58059 58566 58573\nf 58059 58573 58067\nf 58060 58067 58066\nf 58061 58070 58577\nf 58061 58567 58568\nf 58061 58568 58062\nf 58061 58577 58567\nf 58062 58568 58569\nf 58062 58569 58064\nf 58063 58064 58065\nf 58064 58569 58571\nf 58064 58571 58065\nf 58065 58571 58570\nf 58066 58067 58574\nf 58066 58574 58068\nf 58067 58573 58574\nf 58068 58574 58575\nf 58068 58575 58576\nf 58068 58576 58069\nf 58069 58576 58578\nf 58069 58578 58071\nf 58070 58071 58577\nf 58071 58578 58577\nf 58072 58073 58596\nf 58072 58074 58073\nf 58072 58596 58597\nf 58072 58597 58078\nf 58073 58074 58075\nf 58073 58075 58590\nf 58073 58588 58596\nf 58073 58590 58588\nf 58074 58076 58075\nf 58075 58076 58077\nf 58075 58077 58592\nf 58075 58592 58590\nf 58076 58081 58083\nf 58076 58083 58600\nf 58076 58600 58077\nf 58077 58599 58592\nf 58077 58600 58599\nf 58078 58080 58079\nf 58078 58597 58080\nf 58079 58080 58603\nf 58079 58603 58084\nf 58080 58597 58603\nf 58081 58082 58083\nf 58082 58086 58083\nf 58083 58086 58604\nf 58083 58604 58600\nf 58084 58603 58606\nf 58084 58606 58085\nf 58085 58606 58607\nf 58085 58607 58611\nf 58085 58611 58087\nf 58086 58088 58608\nf 58086 58608 58604\nf 58087 58611 58091\nf 58088 58089 58090\nf 58088 58090 58609\nf 58088 58609 58608\nf 58089 58092 58090\nf 58090 58092 58613\nf 58090 58613 58609\nf 58091 58611 58614\nf 58091 58614 58093\nf 58092 58095 58617\nf 58092 58615 58613\nf 58092 58617 58615\nf 58093 58614 58616\nf 58093 58616 58618\nf 58093 58618 58094\nf 58094 58097 58096\nf 58094 58618 58097\nf 58095 58098 58620\nf 58095 58620 58617\nf 58096 58097 58621\nf 58096 58621 58099\nf 58097 58618 58619\nf 58097 58619 58621\nf 58098 58100 58622\nf 58098 58622 58620\nf 58099 58621 58101\nf 58100 58102 58624\nf 58100 58624 58622\nf 58101 58621 58623\nf 58101 58623 58103\nf 58102 58104 58627\nf 58102 58627 58624\nf 58103 58623 58626\nf 58103 58626 58105\nf 58104 58106 58630\nf 58104 58630 58627\nf 58105 58626 58629\nf 58105 58629 58107\nf 58106 58108 58633\nf 58106 58633 58630\nf 58107 58629 58632\nf 58107 58632 58109\nf 58108 58110 58636\nf 58108 58636 58633\nf 58109 58632 58635\nf 58109 58635 58111\nf 58110 58112 58639\nf 58110 58639 58636\nf 58111 58635 58638\nf 58111 58638 58113\nf 58112 58114 58641\nf 58112 58641 58639\nf 58113 58638 58640\nf 58113 58640 58115\nf 58114 58116 58643\nf 58114 58643 58641\nf 58115 58640 58642\nf 58115 58642 58117\nf 58116 58118 58646\nf 58116 58646 58643\nf 58117 58642 58644\nf 58117 58644 58119\nf 58118 58122 58648\nf 58118 58648 58646\nf 58119 58121 58120\nf 58119 58644 58645\nf 58119 58645 58121\nf 58120 58121 58124\nf 58121 58645 58647\nf 58121 58647 58124\nf 58122 58123 58648\nf 58123 58125 58651\nf 58123 58649 58648\nf 58123 58651 58649\nf 58124 58647 58650\nf 58124 58650 58126\nf 58125 58127 58654\nf 58125 58654 58651\nf 58126 58650 58653\nf 58126 58653 58129\nf 58127 58128 58657\nf 58127 58657 58654\nf 58128 58131 58132\nf 58128 58132 58657\nf 58129 58653 58655\nf 58129 58655 58656\nf 58129 58656 58130\nf 58130 58656 58133\nf 58131 58134 58660\nf 58131 58660 58132\nf 58132 58658 58657\nf 58132 58660 58658\nf 58133 58656 58659\nf 58133 58659 58136\nf 58134 58135 58663\nf 58134 58663 58660\nf 58135 58137 58138\nf 58135 58138 58663\nf 58136 58659 58662\nf 58136 58662 58139\nf 58137 58141 58666\nf 58137 58666 58138\nf 58138 58664 58663\nf 58138 58666 58664\nf 58139 58144 58140\nf 58139 58662 58665\nf 58139 58665 58668\nf 58139 58668 58144\nf 58140 58144 58143\nf 58141 58142 58670\nf 58141 58670 58666\nf 58142 58145 58147\nf 58142 58147 58670\nf 58143 58144 58146\nf 58144 58668 58669\nf 58144 58669 58146\nf 58145 58146 58147\nf 58146 58148 58147\nf 58146 58669 58148\nf 58147 58148 58149\nf 58147 58149 58675\nf 58147 58675 58670\nf 58148 58669 58672\nf 58148 58672 58674\nf 58148 58674 58149\nf 58149 58674 58676\nf 58149 58676 58675\nf 58150 58151 58731\nf 58150 58721 58724\nf 58150 58724 58151\nf 58150 58726 58721\nf 58150 58731 58726\nf 58151 58152 58154\nf 58151 58154 58736\nf 58151 58724 58728\nf 58151 58728 58152\nf 58151 58736 58731\nf 58152 58155 58158\nf 58152 58158 58154\nf 58152 58728 58729\nf 58152 58729 58733\nf 58152 58733 58155\nf 58153 58154 58158\nf 58153 58158 58156\nf 58153 58159 58154\nf 58154 58159 58736\nf 58155 58161 58158\nf 58155 58733 58734\nf 58155 58734 58738\nf 58155 58738 58161\nf 58156 58158 58157\nf 58157 58158 58161\nf 58157 58161 58160\nf 58159 58162 58742\nf 58159 58739 58736\nf 58159 58742 58739\nf 58160 58161 58165\nf 58160 58165 58163\nf 58161 58738 58741\nf 58161 58741 58165\nf 58162 58166 58746\nf 58162 58746 58742\nf 58163 58165 58164\nf 58164 58165 58744\nf 58164 58744 58167\nf 58165 58741 58744\nf 58166 58168 58750\nf 58166 58750 58746\nf 58167 58744 58748\nf 58167 58748 58169\nf 58168 58170 58755\nf 58168 58755 58750\nf 58169 58748 58752\nf 58169 58752 58171\nf 58170 58173 58757\nf 58170 58757 58755\nf 58171 58172 58176\nf 58171 58176 58174\nf 58171 58752 58172\nf 58172 58752 58753\nf 58172 58753 58756\nf 58172 58756 58176\nf 58173 58177 58759\nf 58173 58759 58757\nf 58174 58176 58175\nf 58175 58176 58758\nf 58175 58758 58178\nf 58176 58756 58758\nf 58177 58179 58759\nf 58178 58758 58762\nf 58178 58762 58182\nf 58179 58180 58181\nf 58179 58181 58760\nf 58179 58760 58759\nf 58180 58184 58181\nf 58181 58184 58763\nf 58181 58763 58760\nf 58182 58762 58764\nf 58182 58764 58183\nf 58183 58764 58765\nf 58183 58765 58768\nf 58183 58768 58185\nf 58184 58186 58769\nf 58184 58767 58763\nf 58184 58769 58767\nf 58185 58768 58187\nf 58186 58188 58772\nf 58186 58772 58769\nf 58187 58768 58770\nf 58187 58770 58189\nf 58188 58190 58776\nf 58188 58776 58772\nf 58189 58770 58773\nf 58189 58773 58191\nf 58190 58194 58778\nf 58190 58778 58776\nf 58191 58193 58192\nf 58191 58773 58193\nf 58192 58193 58777\nf 58192 58777 58195\nf 58193 58773 58774\nf 58193 58774 58777\nf 58194 58196 58780\nf 58194 58780 58778\nf 58195 58777 58779\nf 58195 58779 58197\nf 58196 58198 58782\nf 58196 58782 58780\nf 58197 58779 58781\nf 58197 58781 58199\nf 58198 58200 58784\nf 58198 58784 58782\nf 58199 58781 58783\nf 58199 58783 58201\nf 58200 58202 58786\nf 58200 58786 58784\nf 58201 58783 58785\nf 58201 58785 58203\nf 58202 58204 58788\nf 58202 58788 58786\nf 58203 58785 58787\nf 58203 58787 58205\nf 58204 58206 58790\nf 58204 58790 58788\nf 58205 58787 58789\nf 58205 58789 58208\nf 58206 58207 58792\nf 58206 58792 58790\nf 58207 58209 58210\nf 58207 58210 58792\nf 58208 58789 58791\nf 58208 58791 58211\nf 58209 58212 58210\nf 58210 58212 58213\nf 58210 58213 58794\nf 58210 58794 58792\nf 58211 58791 58793\nf 58211 58793 58214\nf 58212 58215 58797\nf 58212 58797 58213\nf 58213 58795 58794\nf 58213 58797 58795\nf 58214 58793 58796\nf 58214 58796 58216\nf 58215 58217 58800\nf 58215 58800 58797\nf 58216 58796 58799\nf 58216 58799 58219\nf 58217 58218 58803\nf 58217 58803 58800\nf 58218 58221 58222\nf 58218 58222 58803\nf 58219 58799 58801\nf 58219 58801 58802\nf 58219 58802 58220\nf 58220 58802 58223\nf 58221 58224 58806\nf 58221 58806 58222\nf 58222 58804 58803\nf 58222 58806 58804\nf 58223 58802 58805\nf 58223 58805 58226\nf 58224 58225 58806\nf 58225 58227 58810\nf 58225 58807 58806\nf 58225 58810 58807\nf 58226 58805 58809\nf 58226 58809 58229\nf 58227 58228 58813\nf 58227 58813 58810\nf 58228 58230 58232\nf 58228 58232 58813\nf 58229 58809 58812\nf 58229 58812 58233\nf 58230 58231 58232\nf 58231 58234 58236\nf 58231 58236 58232\nf 58232 58236 58814\nf 58232 58814 58813\nf 58233 58237 58235\nf 58233 58812 58815\nf 58233 58815 58819\nf 58233 58819 58237\nf 58234 58235 58236\nf 58235 58237 58236\nf 58236 58237 58238\nf 58236 58238 58822\nf 58236 58817 58814\nf 58236 58822 58817\nf 58237 58239 58240\nf 58237 58240 58238\nf 58237 58819 58239\nf 58238 58240 58826\nf 58238 58823 58822\nf 58238 58826 58823\nf 58239 58819 58820\nf 58239 58820 58824\nf 58239 58824 58825\nf 58239 58825 58240\nf 58240 58825 58827\nf 58240 58827 58826\nf 58241 58242 58836\nf 58241 58247 58245\nf 58241 58834 58247\nf 58241 58836 58834\nf 58242 58243 58838\nf 58242 58838 58836\nf 58243 58248 58841\nf 58243 58840 58838\nf 58243 58841 58840\nf 58244 58246 58845\nf 58244 58256 58254\nf 58244 58842 58256\nf 58244 58845 58842\nf 58245 58247 58246\nf 58246 58247 58844\nf 58246 58844 58845\nf 58247 58834 58844\nf 58248 58249 58250\nf 58248 58250 58841\nf 58249 58251 58848\nf 58249 58848 58250\nf 58250 58847 58841\nf 58250 58848 58847\nf 58251 58252 58848\nf 58252 58253 58850\nf 58252 58850 58848\nf 58253 58257 58852\nf 58253 58852 58850\nf 58254 58256 58255\nf 58255 58256 58853\nf 58255 58853 58854\nf 58255 58854 58260\nf 58256 58842 58853\nf 58257 58258 58857\nf 58257 58856 58852\nf 58257 58857 58856\nf 58258 58259 58857\nf 58259 58263 58859\nf 58259 58859 58857\nf 58260 58262 58261\nf 58260 58854 58262\nf 58261 58262 58861\nf 58261 58861 58862\nf 58261 58862 58265\nf 58262 58854 58861\nf 58263 58264 58865\nf 58263 58864 58859\nf 58263 58865 58864\nf 58264 58267 58865\nf 58265 58266 58270\nf 58265 58270 58269\nf 58265 58862 58266\nf 58266 58862 58867\nf 58266 58867 58270\nf 58267 58268 58870\nf 58267 58869 58865\nf 58267 58870 58869\nf 58268 58272 58870\nf 58269 58270 58874\nf 58269 58874 58271\nf 58270 58867 58872\nf 58270 58872 58874\nf 58271 58874 58875\nf 58271 58875 58274\nf 58272 58273 58876\nf 58272 58876 58870\nf 58273 58284 58884\nf 58273 58877 58876\nf 58273 58884 58877\nf 58274 58875 58880\nf 58274 58880 58882\nf 58274 58882 58275\nf 58275 58882 58276\nf 58276 58286 58287\nf 58276 58287 58277\nf 58276 58882 58286\nf 58277 58287 58288\nf 58277 58288 58278\nf 58278 58288 58289\nf 58278 58289 58279\nf 58279 58289 58290\nf 58279 58290 58280\nf 58280 58290 58292\nf 58280 58292 58281\nf 58281 58292 58291\nf 58282 58295 58297\nf 58282 58297 58899\nf 58282 58883 58283\nf 58282 58899 58883\nf 58283 58883 58885\nf 58283 58885 58285\nf 58284 58285 58884\nf 58285 58885 58884\nf 58286 58882 58888\nf 58286 58888 58890\nf 58286 58890 58287\nf 58287 58890 58891\nf 58287 58891 58288\nf 58288 58891 58892\nf 58288 58892 58289\nf 58289 58892 58893\nf 58289 58893 58290\nf 58290 58893 58894\nf 58290 58894 58292\nf 58291 58292 58895\nf 58291 58895 58293\nf 58292 58894 58895\nf 58293 58895 58896\nf 58293 58896 58897\nf 58293 58897 58294\nf 58294 58897 58898\nf 58294 58898 58296\nf 58295 58296 58297\nf 58296 58898 58900\nf 58296 58900 58297\nf 58297 58900 58899\nf 58298 58299 58906\nf 58298 58309 58307\nf 58298 58905 58309\nf 58298 58906 58905\nf 58299 58300 58907\nf 58299 58907 58906\nf 58300 58301 58908\nf 58300 58908 58907\nf 58301 58310 58909\nf 58301 58909 58908\nf 58302 58303 58910\nf 58302 58304 58303\nf 58302 58910 58911\nf 58302 58911 58312\nf 58303 58304 58305\nf 58303 58305 58904\nf 58303 58903 58910\nf 58303 58904 58903\nf 58304 58306 58914\nf 58304 58914 58305\nf 58305 58913 58904\nf 58305 58914 58913\nf 58306 58315 58916\nf 58306 58916 58914\nf 58307 58309 58308\nf 58308 58309 58917\nf 58308 58917 58318\nf 58309 58905 58917\nf 58310 58311 58919\nf 58310 58918 58909\nf 58310 58919 58918\nf 58311 58320 58919\nf 58312 58314 58313\nf 58312 58911 58314\nf 58313 58314 58921\nf 58313 58921 58321\nf 58314 58911 58921\nf 58315 58316 58317\nf 58315 58317 58916\nf 58316 58322 58324\nf 58316 58324 58923\nf 58316 58923 58317\nf 58317 58922 58916\nf 58317 58923 58922\nf 58318 58917 58925\nf 58318 58925 58319\nf 58319 58925 58926\nf 58319 58926 58931\nf 58319 58931 58325\nf 58320 58326 58932\nf 58320 58928 58919\nf 58320 58932 58928\nf 58321 58921 58929\nf 58321 58929 58327\nf 58322 58323 58324\nf 58323 58328 58324\nf 58324 58328 58930\nf 58324 58930 58923\nf 58325 58931 58329\nf 58326 58330 58932\nf 58327 58929 58935\nf 58327 58935 58333\nf 58328 58334 58941\nf 58328 58936 58930\nf 58328 58941 58936\nf 58329 58931 58937\nf 58329 58937 58335\nf 58330 58331 58332\nf 58330 58332 58933\nf 58330 58933 58932\nf 58331 58336 58332\nf 58332 58336 58939\nf 58332 58939 58933\nf 58333 58935 58940\nf 58333 58940 58337\nf 58334 58338 58946\nf 58334 58946 58941\nf 58335 58937 58942\nf 58335 58942 58339\nf 58336 58340 58950\nf 58336 58944 58939\nf 58336 58950 58944\nf 58337 58940 58945\nf 58337 58945 58341\nf 58338 58343 58954\nf 58338 58954 58946\nf 58339 58942 58948\nf 58339 58948 58344\nf 58340 58345 58960\nf 58340 58960 58950\nf 58341 58945 58951\nf 58341 58951 58342\nf 58342 58951 58952\nf 58342 58952 58961\nf 58342 58961 58346\nf 58343 58347 58954\nf 58344 58948 58957\nf 58344 58957 58350\nf 58345 58353 58964\nf 58345 58964 58960\nf 58346 58961 58354\nf 58347 58348 58349\nf 58347 58349 58955\nf 58347 58955 58954\nf 58348 58355 58349\nf 58349 58355 58962\nf 58349 58962 58955\nf 58350 58352 58351\nf 58350 58957 58352\nf 58351 58352 58963\nf 58351 58963 58357\nf 58352 58957 58958\nf 58352 58958 58963\nf 58353 58358 58970\nf 58353 58970 58964\nf 58354 58961 58965\nf 58354 58965 58360\nf 58355 58356 58967\nf 58355 58966 58962\nf 58355 58967 58966\nf 58356 58361 58967\nf 58357 58963 58969\nf 58357 58969 58363\nf 58358 58359 58970\nf 58359 58364 58977\nf 58359 58971 58970\nf 58359 58977 58971\nf 58360 58965 58972\nf 58360 58972 58365\nf 58361 58362 58974\nf 58361 58973 58967\nf 58361 58974 58973\nf 58362 58367 58974\nf 58363 58969 58975\nf 58363 58975 58371\nf 58364 58374 58986\nf 58364 58986 58977\nf 58365 58972 58978\nf 58365 58978 58979\nf 58365 58979 58366\nf 58366 58979 58375\nf 58367 58368 58981\nf 58367 58980 58974\nf 58367 58981 58980\nf 58368 58369 58981\nf 58369 58376 58983\nf 58369 58983 58981\nf 58370 58372 58985\nf 58370 58985 59070\nf 58370 59070 58457\nf 58371 58373 58372\nf 58371 58975 58373\nf 58372 58373 58984\nf 58372 58984 58985\nf 58373 58975 58976\nf 58373 58976 58984\nf 58374 58459 59073\nf 58374 59073 58986\nf 58375 58979 58987\nf 58375 58987 58460\nf 58376 58377 58990\nf 58376 58989 58983\nf 58376 58990 58989\nf 58377 58378 58990\nf 58378 58379 58991\nf 58378 58991 58990\nf 58379 58380 58992\nf 58379 58992 58991\nf 58380 58381 58993\nf 58380 58993 58992\nf 58381 58382 58994\nf 58381 58994 58993\nf 58382 58383 58995\nf 58382 58995 58994\nf 58383 58384 58996\nf 58383 58996 58995\nf 58384 58385 58997\nf 58384 58997 58996\nf 58385 58386 58998\nf 58385 58998 58997\nf 58386 58387 58999\nf 58386 58999 58998\nf 58387 58388 59000\nf 58387 59000 58999\nf 58388 58389 59001\nf 58388 59001 59000\nf 58389 58390 59002\nf 58389 59002 59001\nf 58390 58391 59003\nf 58390 59003 59002\nf 58391 58392 59004\nf 58391 59004 59003\nf 58392 58393 59005\nf 58392 59005 59004\nf 58393 58394 59006\nf 58393 59006 59005\nf 58394 58395 59007\nf 58394 59007 59006\nf 58395 58396 59008\nf 58395 59008 59007\nf 58396 58397 59009\nf 58396 59009 59008\nf 58397 58398 59010\nf 58397 59010 59009\nf 58398 58399 59011\nf 58398 59011 59010\nf 58399 58400 59012\nf 58399 59012 59011\nf 58400 58401 59013\nf 58400 59013 59012\nf 58401 58402 59014\nf 58401 59014 59013\nf 58402 58403 59015\nf 58402 59015 59014\nf 58403 58404 59016\nf 58403 59016 59015\nf 58404 58405 59017\nf 58404 59017 59016\nf 58405 58406 59018\nf 58405 59018 59017\nf 58406 58407 59019\nf 58406 59019 59018\nf 58407 58408 59020\nf 58407 59020 59019\nf 58408 58409 59021\nf 58408 59021 59020\nf 58409 58410 59022\nf 58409 59022 59021\nf 58410 58411 59023\nf 58410 59023 59022\nf 58411 58412 59024\nf 58411 59024 59023\nf 58412 58413 59025\nf 58412 59025 59024\nf 58413 58414 59026\nf 58413 59026 59025\nf 58414 58415 59027\nf 58414 59027 59026\nf 58415 58416 59028\nf 58415 59028 59027\nf 58416 58417 59029\nf 58416 59029 59028\nf 58417 58418 59030\nf 58417 59030 59029\nf 58418 58419 59031\nf 58418 59031 59030\nf 58419 58420 59032\nf 58419 59032 59031\nf 58420 58421 59033\nf 58420 59033 59032\nf 58421 58422 59034\nf 58421 59034 59033\nf 58422 58423 59035\nf 58422 59035 59034\nf 58423 58424 59036\nf 58423 59036 59035\nf 58424 58425 59037\nf 58424 59037 59036\nf 58425 58426 59038\nf 58425 59038 59037\nf 58426 58427 59039\nf 58426 59039 59038\nf 58427 58428 59040\nf 58427 59040 59039\nf 58428 58429 59041\nf 58428 59041 59040\nf 58429 58430 59042\nf 58429 59042 59041\nf 58430 58431 59043\nf 58430 59043 59042\nf 58431 58432 59044\nf 58431 59044 59043\nf 58432 58433 59045\nf 58432 59045 59044\nf 58433 58434 59046\nf 58433 59046 59045\nf 58434 58435 59047\nf 58434 59047 59046\nf 58435 58436 59048\nf 58435 59048 59047\nf 58436 58437 59049\nf 58436 59049 59048\nf 58437 58438 59050\nf 58437 59050 59049\nf 58438 58439 59051\nf 58438 59051 59050\nf 58439 58440 59052\nf 58439 59052 59051\nf 58440 58441 59053\nf 58440 59053 59052\nf 58441 58442 59054\nf 58441 59054 59053\nf 58442 58443 59055\nf 58442 59055 59054\nf 58443 58444 59056\nf 58443 59056 59055\nf 58444 58445 59057\nf 58444 59057 59056\nf 58445 58446 59058\nf 58445 59058 59057\nf 58446 58447 59059\nf 58446 59059 59058\nf 58447 58448 59060\nf 58447 59060 59059\nf 58448 58449 59061\nf 58448 59061 59060\nf 58449 58450 59062\nf 58449 59062 59061\nf 58450 58451 59063\nf 58450 59063 59062\nf 58451 58452 59064\nf 58451 59064 59063\nf 58452 58453 59065\nf 58452 59065 59064\nf 58453 58454 59066\nf 58453 59066 59065\nf 58454 58455 59067\nf 58454 59067 59066\nf 58455 58456 59068\nf 58455 59068 59067\nf 58456 58458 59069\nf 58456 59069 59068\nf 58457 59070 58458\nf 58458 59070 59071\nf 58458 59071 59069\nf 58459 58461 59075\nf 58459 59075 59073\nf 58460 58987 59074\nf 58460 59074 58462\nf 58461 58463 59077\nf 58461 59077 59075\nf 58462 59074 59076\nf 58462 59076 58465\nf 58463 58464 59077\nf 58464 58466 59080\nf 58464 59078 59077\nf 58464 59080 59078\nf 58465 59076 59079\nf 58465 59079 58468\nf 58466 58467 59080\nf 58467 58470 59084\nf 58467 59081 59080\nf 58467 59084 59081\nf 58468 59079 59082\nf 58468 59082 59083\nf 58468 59083 58469\nf 58469 59083 58472\nf 58470 58471 59084\nf 58471 58484 59098\nf 58471 59085 59084\nf 58471 59098 59085\nf 58472 59083 59086\nf 58472 59086 59087\nf 58472 59087 58473\nf 58473 59087 59088\nf 58473 59088 58474\nf 58474 59088 58486\nf 58475 58564 59179\nf 58475 59089 59090\nf 58475 59090 58476\nf 58475 59179 59089\nf 58476 59090 59091\nf 58476 59091 58477\nf 58477 59091 59092\nf 58477 59092 58478\nf 58478 59092 59093\nf 58478 59093 58479\nf 58479 59093 59094\nf 58479 59094 58480\nf 58480 59094 59095\nf 58480 59095 58481\nf 58481 59095 59096\nf 58481 59096 58482\nf 58482 59096 59097\nf 58482 59097 58483\nf 58483 59097 59099\nf 58483 59099 58485\nf 58484 58485 59098\nf 58485 59099 59098\nf 58486 59088 59101\nf 58486 59101 59103\nf 58486 59103 58487\nf 58487 59103 59104\nf 58487 59104 58488\nf 58488 59104 58566\nf 58489 58570 58572\nf 58489 58572 59187\nf 58489 59105 58490\nf 58489 59187 59105\nf 58490 59105 59106\nf 58490 59106 58491\nf 58491 59106 59107\nf 58491 59107 58492\nf 58492 59107 59108\nf 58492 59108 58493\nf 58493 59108 59109\nf 58493 59109 58494\nf 58494 59109 59110\nf 58494 59110 58495\nf 58495 59110 59111\nf 58495 59111 58496\nf 58496 59111 59112\nf 58496 59112 58497\nf 58497 59112 59113\nf 58497 59113 58498\nf 58498 59113 59114\nf 58498 59114 58499\nf 58499 59114 59115\nf 58499 59115 58500\nf 58500 59115 59116\nf 58500 59116 58501\nf 58501 59116 59117\nf 58501 59117 58502\nf 58502 59117 59118\nf 58502 59118 58503\nf 58503 59118 59119\nf 58503 59119 58504\nf 58504 59119 59120\nf 58504 59120 58505\nf 58505 59120 59121\nf 58505 59121 58506\nf 58506 59121 59122\nf 58506 59122 58507\nf 58507 59122 59123\nf 58507 59123 58508\nf 58508 59123 59124\nf 58508 59124 58509\nf 58509 59124 59125\nf 58509 59125 58510\nf 58510 59125 59126\nf 58510 59126 58511\nf 58511 59126 59127\nf 58511 59127 58512\nf 58512 59127 59128\nf 58512 59128 58513\nf 58513 59128 59129\nf 58513 59129 58514\nf 58514 59129 59130\nf 58514 59130 58515\nf 58515 59130 59131\nf 58515 59131 58516\nf 58516 59131 59132\nf 58516 59132 58517\nf 58517 59132 59133\nf 58517 59133 58518\nf 58518 59133 59134\nf 58518 59134 58519\nf 58519 59134 59135\nf 58519 59135 58520\nf 58520 59135 59136\nf 58520 59136 58521\nf 58521 59136 59137\nf 58521 59137 58522\nf 58522 59137 59138\nf 58522 59138 58523\nf 58523 59138 59139\nf 58523 59139 58524\nf 58524 59139 59140\nf 58524 59140 58525\nf 58525 59140 59141\nf 58525 59141 58526\nf 58526 59141 59142\nf 58526 59142 58527\nf 58527 59142 59143\nf 58527 59143 58528\nf 58528 59143 59144\nf 58528 59144 58529\nf 58529 59144 59145\nf 58529 59145 58530\nf 58530 59145 59146\nf 58530 59146 58531\nf 58531 59146 59147\nf 58531 59147 58532\nf 58532 59147 59148\nf 58532 59148 58533\nf 58533 59148 59149\nf 58533 59149 58534\nf 58534 59149 59150\nf 58534 59150 58535\nf 58535 59150 59151\nf 58535 59151 58536\nf 58536 59151 59152\nf 58536 59152 58537\nf 58537 59152 59153\nf 58537 59153 58538\nf 58538 59153 59154\nf 58538 59154 58539\nf 58539 59154 59155\nf 58539 59155 58540\nf 58540 59155 59156\nf 58540 59156 58541\nf 58541 59156 59157\nf 58541 59157 58542\nf 58542 59157 59158\nf 58542 59158 58543\nf 58543 59158 59159\nf 58543 59159 58544\nf 58544 59159 59160\nf 58544 59160 58545\nf 58545 59160 59161\nf 58545 59161 58546\nf 58546 59161 59162\nf 58546 59162 58547\nf 58547 59162 59163\nf 58547 59163 58548\nf 58548 59163 59164\nf 58548 59164 58549\nf 58549 59164 59165\nf 58549 59165 58550\nf 58550 59165 59166\nf 58550 59166 58551\nf 58551 59166 59167\nf 58551 59167 58552\nf 58552 59167 59168\nf 58552 59168 58553\nf 58553 59168 59169\nf 58553 59169 58554\nf 58554 59169 59170\nf 58554 59170 58555\nf 58555 59170 59171\nf 58555 59171 58556\nf 58556 59171 59172\nf 58556 59172 58557\nf 58557 59172 59173\nf 58557 59173 58558\nf 58558 59173 59174\nf 58558 59174 58559\nf 58559 59174 59175\nf 58559 59175 58560\nf 58560 59175 59176\nf 58560 59176 58561\nf 58561 59176 59177\nf 58561 59177 58562\nf 58562 59177 59178\nf 58562 59178 58563\nf 58563 59178 59180\nf 58563 59180 58565\nf 58564 58565 59179\nf 58565 59180 59179\nf 58566 59104 59182\nf 58566 59182 58573\nf 58567 58577 58579\nf 58567 58579 59194\nf 58567 59184 58568\nf 58567 59194 59184\nf 58568 59184 59185\nf 58568 59185 58569\nf 58569 59185 59186\nf 58569 59186 58571\nf 58570 58571 58572\nf 58571 59186 59188\nf 58571 59188 58572\nf 58572 59188 59187\nf 58573 59182 59190\nf 58573 59190 59191\nf 58573 59191 58574\nf 58574 59191 59192\nf 58574 59192 58575\nf 58575 59192 58576\nf 58576 58580 59199\nf 58576 59192 58580\nf 58576 59193 58578\nf 58576 59199 59193\nf 58577 58578 58579\nf 58578 59193 59195\nf 58578 59195 58579\nf 58579 59195 59194\nf 58580 59192 59197\nf 58580 59197 59200\nf 58580 59200 59199\nf 58581 58582 59211\nf 58581 58584 58585\nf 58581 58585 58586\nf 58581 58586 58582\nf 58581 59209 59216\nf 58581 59211 59209\nf 58581 59216 58584\nf 58582 58583 59213\nf 58582 58586 58587\nf 58582 58587 58583\nf 58582 59213 59211\nf 58583 58587 59224\nf 58583 59219 59213\nf 58583 59224 59219\nf 58584 58589 58591\nf 58584 58591 58593\nf 58584 58593 58585\nf 58584 59216 59217\nf 58584 59217 59221\nf 58584 59221 58589\nf 58585 58593 58594\nf 58585 58594 58586\nf 58586 58594 58595\nf 58586 58595 58587\nf 58587 58595 59228\nf 58587 59228 59224\nf 58588 58589 59226\nf 58588 58590 58589\nf 58588 59226 59227\nf 58588 59227 58596\nf 58589 58590 58591\nf 58589 59221 59222\nf 58589 59222 59226\nf 58590 58592 58591\nf 58591 58592 58593\nf 58592 58599 58593\nf 58593 58599 58601\nf 58593 58601 58594\nf 58594 58601 58602\nf 58594 58602 58595\nf 58595 58602 59231\nf 58595 59231 59228\nf 58596 58598 58597\nf 58596 59227 58598\nf 58597 58598 59230\nf 58597 59230 58603\nf 58598 59227 59230\nf 58599 58600 58601\nf 58600 58604 58601\nf 58601 58604 58605\nf 58601 58605 58602\nf 58602 58605 59234\nf 58602 59234 59231\nf 58603 59230 59233\nf 58603 59233 58606\nf 58604 58608 58605\nf 58605 58608 58610\nf 58605 58610 59237\nf 58605 59237 59234\nf 58606 59233 59236\nf 58606 59236 59239\nf 58606 59239 58607\nf 58607 58612 58611\nf 58607 59239 58612\nf 58608 58609 58610\nf 58609 58613 58610\nf 58610 58613 59237\nf 58611 58612 59243\nf 58611 59243 58614\nf 58612 59239 59240\nf 58612 59240 59243\nf 58613 58615 59245\nf 58613 59241 59237\nf 58613 59245 59241\nf 58614 59243 58616\nf 58615 58617 59248\nf 58615 59248 59245\nf 58616 59243 59247\nf 58616 59247 58618\nf 58617 58620 59252\nf 58617 59252 59248\nf 58618 59247 59250\nf 58618 59250 58619\nf 58619 59250 59251\nf 58619 59251 59254\nf 58619 59254 58621\nf 58620 58622 59256\nf 58620 59256 59252\nf 58621 59254 58623\nf 58622 58624 59256\nf 58623 59254 59259\nf 58623 59259 58626\nf 58624 58625 59257\nf 58624 58627 58625\nf 58624 59257 59256\nf 58625 58627 58628\nf 58625 58628 59262\nf 58625 59260 59257\nf 58625 59262 59260\nf 58626 59259 59261\nf 58626 59261 58629\nf 58627 58630 58628\nf 58628 58630 58631\nf 58628 58631 59264\nf 58628 59264 59262\nf 58629 59261 59263\nf 58629 59263 58632\nf 58630 58633 58631\nf 58631 58633 58634\nf 58631 58634 59266\nf 58631 59266 59264\nf 58632 59263 59265\nf 58632 59265 58635\nf 58633 58636 58634\nf 58634 58636 58637\nf 58634 58637 59268\nf 58634 59268 59266\nf 58635 59265 59267\nf 58635 59267 58638\nf 58636 58639 59271\nf 58636 59271 58637\nf 58637 59269 59268\nf 58637 59271 59269\nf 58638 59267 59270\nf 58638 59270 58640\nf 58639 58641 59274\nf 58639 59274 59271\nf 58640 59270 59273\nf 58640 59273 58642\nf 58641 58643 59277\nf 58641 59277 59274\nf 58642 59273 59276\nf 58642 59276 58644\nf 58643 58646 59281\nf 58643 59281 59277\nf 58644 59276 59279\nf 58644 59279 59280\nf 58644 59280 58645\nf 58645 59280 58647\nf 58646 58648 59283\nf 58646 59283 59281\nf 58647 59280 59282\nf 58647 59282 58650\nf 58648 58649 59285\nf 58648 59285 59283\nf 58649 58651 58652\nf 58649 58652 59285\nf 58650 59282 59284\nf 58650 59284 58653\nf 58651 58654 59288\nf 58651 59288 58652\nf 58652 59286 59285\nf 58652 59288 59286\nf 58653 59284 59287\nf 58653 59287 58655\nf 58654 58657 59292\nf 58654 59292 59288\nf 58655 59287 59290\nf 58655 59290 59291\nf 58655 59291 58656\nf 58656 59291 58659\nf 58657 58658 59295\nf 58657 59295 59292\nf 58658 58660 58661\nf 58658 58661 59295\nf 58659 59291 59293\nf 58659 59293 58662\nf 58660 58663 59299\nf 58660 59299 58661\nf 58661 59296 59295\nf 58661 59299 59296\nf 58662 59293 59297\nf 58662 59297 58665\nf 58663 58664 59303\nf 58663 59303 59299\nf 58664 58666 58667\nf 58664 58667 59303\nf 58665 59297 59301\nf 58665 59301 58668\nf 58666 58670 58667\nf 58667 58670 58671\nf 58667 58671 59306\nf 58667 59306 59303\nf 58668 58673 58669\nf 58668 59301 59305\nf 58668 59305 59308\nf 58668 59308 58673\nf 58669 58673 58672\nf 58670 58675 58671\nf 58671 58675 58677\nf 58671 58677 59309\nf 58671 59309 59306\nf 58672 58673 58679\nf 58672 58679 58674\nf 58673 58678 58679\nf 58673 59308 58678\nf 58674 58679 58680\nf 58674 58680 58676\nf 58675 58676 58677\nf 58676 58680 58677\nf 58677 58680 58681\nf 58677 58681 59313\nf 58677 59313 59309\nf 58678 58682 58679\nf 58678 59308 59311\nf 58678 59311 59312\nf 58678 59312 58682\nf 58679 58682 58683\nf 58679 58683 58680\nf 58680 58683 58684\nf 58680 58684 58681\nf 58681 58684 59317\nf 58681 59317 59313\nf 58682 58685 58686\nf 58682 58686 58683\nf 58682 59312 59315\nf 58682 59315 58685\nf 58683 58686 58687\nf 58683 58687 58684\nf 58684 58687 59321\nf 58684 59321 59317\nf 58685 58688 58689\nf 58685 58689 58686\nf 58685 59315 59319\nf 58685 59319 58688\nf 58686 58689 58687\nf 58687 58689 59326\nf 58687 59322 59321\nf 58687 59326 59322\nf 58688 59319 59323\nf 58688 59323 59325\nf 58688 59325 58689\nf 58689 59325 59327\nf 58689 59327 59326\nf 58690 58691 59346\nf 58690 58692 58693\nf 58690 58693 58691\nf 58690 59344 59348\nf 58690 59346 59344\nf 58690 59348 58692\nf 58691 58693 59353\nf 58691 59350 59346\nf 58691 59353 59350\nf 58692 58694 58695\nf 58692 58695 58693\nf 58692 59348 59351\nf 58692 59351 58694\nf 58693 58695 59356\nf 58693 59356 59353\nf 58694 58696 58697\nf 58694 58697 58695\nf 58694 59351 59354\nf 58694 59354 58696\nf 58695 58697 59359\nf 58695 59359 59356\nf 58696 58698 58699\nf 58696 58699 58697\nf 58696 59354 59357\nf 58696 59357 58698\nf 58697 58699 59363\nf 58697 59363 59359\nf 58698 58700 58701\nf 58698 58701 58702\nf 58698 58702 58699\nf 58698 59357 59360\nf 58698 59360 58700\nf 58699 58702 59365\nf 58699 59365 59363\nf 58700 58703 58704\nf 58700 58704 58701\nf 58700 59360 59361\nf 58700 59361 59364\nf 58700 59364 58703\nf 58701 58704 58705\nf 58701 58705 58702\nf 58702 58705 59367\nf 58702 59367 59365\nf 58703 58706 58707\nf 58703 58707 58704\nf 58703 59364 59366\nf 58703 59366 58706\nf 58704 58707 58708\nf 58704 58708 58705\nf 58705 58708 59369\nf 58705 59369 59367\nf 58706 58709 58710\nf 58706 58710 58707\nf 58706 59366 59368\nf 58706 59368 58709\nf 58707 58710 58708\nf 58708 58710 59373\nf 58708 59370 59369\nf 58708 59373 59370\nf 58709 58711 58710\nf 58709 59368 59371\nf 58709 59371 59372\nf 58709 59372 58711\nf 58710 58711 59378\nf 58710 59378 59373\nf 58711 58712 58713\nf 58711 58713 59381\nf 58711 59372 59375\nf 58711 59375 58712\nf 58711 59381 59378\nf 58712 58714 58715\nf 58712 58715 58713\nf 58712 59375 59376\nf 58712 59376 59380\nf 58712 59380 58714\nf 58713 58715 59384\nf 58713 59384 59381\nf 58714 58716 58717\nf 58714 58717 58715\nf 58714 59380 59383\nf 58714 59383 58716\nf 58715 58717 59388\nf 58715 59388 59384\nf 58716 58718 58719\nf 58716 58719 58717\nf 58716 59383 59386\nf 58716 59386 58718\nf 58717 58719 59393\nf 58717 59393 59388\nf 58718 58720 58722\nf 58718 58722 58723\nf 58718 58723 58719\nf 58718 59386 59390\nf 58718 59390 58720\nf 58719 58723 59396\nf 58719 59396 59393\nf 58720 58725 58722\nf 58720 59390 59391\nf 58720 59391 59395\nf 58720 59395 58725\nf 58721 58722 58725\nf 58721 58725 58724\nf 58721 58726 58722\nf 58722 58726 58727\nf 58722 58727 58723\nf 58723 58727 59399\nf 58723 59399 59396\nf 58724 58725 58730\nf 58724 58730 58728\nf 58725 59395 59398\nf 58725 59398 58730\nf 58726 58731 58727\nf 58727 58731 58732\nf 58727 58732 59403\nf 58727 59403 59399\nf 58728 58730 58729\nf 58729 58730 59400\nf 58729 59400 59401\nf 58729 59401 58733\nf 58730 59398 59400\nf 58731 58736 58732\nf 58732 58736 58737\nf 58732 58737 59405\nf 58732 59405 59403\nf 58733 58735 58734\nf 58733 59401 58735\nf 58734 58735 59404\nf 58734 59404 58738\nf 58735 59401 59404\nf 58736 58739 58737\nf 58737 58739 58740\nf 58737 58740 59407\nf 58737 59407 59405\nf 58738 59404 59406\nf 58738 59406 58741\nf 58739 58742 58740\nf 58740 58742 58743\nf 58740 58743 59411\nf 58740 59411 59407\nf 58741 59406 59408\nf 58741 59408 58744\nf 58742 58746 58743\nf 58743 58746 58747\nf 58743 58747 59413\nf 58743 59413 59411\nf 58744 58745 58749\nf 58744 58749 58748\nf 58744 59408 58745\nf 58745 59408 59409\nf 58745 59409 59412\nf 58745 59412 58749\nf 58746 58750 58747\nf 58747 58750 58751\nf 58747 58751 59415\nf 58747 59415 59413\nf 58748 58749 58754\nf 58748 58754 58752\nf 58749 59412 59414\nf 58749 59414 58754\nf 58750 58755 59418\nf 58750 59418 58751\nf 58751 59416 59415\nf 58751 59418 59416\nf 58752 58754 58753\nf 58753 58754 59417\nf 58753 59417 58756\nf 58754 59414 59417\nf 58755 58757 59421\nf 58755 59421 59418\nf 58756 59417 59420\nf 58756 59420 58758\nf 58757 58759 59421\nf 58758 59420 59424\nf 58758 59424 58762\nf 58759 58760 58761\nf 58759 58761 59422\nf 58759 59422 59421\nf 58760 58763 58761\nf 58761 58763 59426\nf 58761 59426 59422\nf 58762 59424 59427\nf 58762 59427 58764\nf 58763 58767 59433\nf 58763 59430 59426\nf 58763 59433 59430\nf 58764 58766 58765\nf 58764 59427 58766\nf 58765 58766 59432\nf 58765 59432 58768\nf 58766 59427 59428\nf 58766 59428 59432\nf 58767 58769 59438\nf 58767 59438 59433\nf 58768 59432 59435\nf 58768 59435 58770\nf 58769 58772 59441\nf 58769 59441 59438\nf 58770 58771 58775\nf 58770 58775 58773\nf 58770 59435 58771\nf 58771 59435 59436\nf 58771 59436 59440\nf 58771 59440 58775\nf 58772 58776 59444\nf 58772 59444 59441\nf 58773 58775 58774\nf 58774 58775 59443\nf 58774 59443 58777\nf 58775 59440 59443\nf 58776 58778 59447\nf 58776 59447 59444\nf 58777 59443 59446\nf 58777 59446 58779\nf 58778 58780 59450\nf 58778 59450 59447\nf 58779 59446 59449\nf 58779 59449 58781\nf 58780 58782 59453\nf 58780 59453 59450\nf 58781 59449 59452\nf 58781 59452 58783\nf 58782 58784 59456\nf 58782 59456 59453\nf 58783 59452 59455\nf 58783 59455 58785\nf 58784 58786 59459\nf 58784 59459 59456\nf 58785 59455 59458\nf 58785 59458 58787\nf 58786 58788 59462\nf 58786 59462 59459\nf 58787 59458 59461\nf 58787 59461 58789\nf 58788 58790 59465\nf 58788 59465 59462\nf 58789 59461 59464\nf 58789 59464 58791\nf 58790 58792 59467\nf 58790 59467 59465\nf 58791 59464 59466\nf 58791 59466 58793\nf 58792 58794 59469\nf 58792 59469 59467\nf 58793 59466 59468\nf 58793 59468 58796\nf 58794 58795 59471\nf 58794 59471 59469\nf 58795 58797 58798\nf 58795 58798 59471\nf 58796 59468 59470\nf 58796 59470 58799\nf 58797 58800 59474\nf 58797 59474 58798\nf 58798 59472 59471\nf 58798 59474 59472\nf 58799 59470 59473\nf 58799 59473 58801\nf 58800 58803 59478\nf 58800 59478 59474\nf 58801 59473 59476\nf 58801 59476 59477\nf 58801 59477 58802\nf 58802 59477 58805\nf 58803 58804 59481\nf 58803 59481 59478\nf 58804 58806 58808\nf 58804 58808 59481\nf 58805 59477 59479\nf 58805 59479 58809\nf 58806 58807 58808\nf 58807 58810 58811\nf 58807 58811 58808\nf 58808 58811 59482\nf 58808 59482 59481\nf 58809 59479 59483\nf 58809 59483 58812\nf 58810 58813 59491\nf 58810 59491 58811\nf 58811 59485 59482\nf 58811 59486 59485\nf 58811 59491 59486\nf 58812 59483 59488\nf 58812 59488 58815\nf 58813 58814 59494\nf 58813 59494 59491\nf 58814 58817 58818\nf 58814 58818 59494\nf 58815 58816 58821\nf 58815 58821 58819\nf 58815 59488 58816\nf 58816 59488 59489\nf 58816 59489 59493\nf 58816 59493 58821\nf 58817 58822 59497\nf 58817 59497 58818\nf 58818 59495 59494\nf 58818 59497 59495\nf 58819 58821 58820\nf 58820 58821 59496\nf 58820 59496 58824\nf 58821 59493 59496\nf 58822 58823 59500\nf 58822 59500 59497\nf 58823 58826 58828\nf 58823 58828 59500\nf 58824 58829 58825\nf 58824 59496 59499\nf 58824 59499 59502\nf 58824 59502 58829\nf 58825 58829 58830\nf 58825 58830 58827\nf 58826 58827 58828\nf 58827 58830 58828\nf 58828 58830 58831\nf 58828 58831 59503\nf 58828 59503 59500\nf 58829 58832 58833\nf 58829 58833 58830\nf 58829 59502 58832\nf 58830 58833 58831\nf 58831 58833 59507\nf 58831 59504 59503\nf 58831 59507 59504\nf 58832 59502 59505\nf 58832 59505 59506\nf 58832 59506 58833\nf 58833 59506 59508\nf 58833 59508 59507\nf 58834 58835 59517\nf 58834 58836 58835\nf 58834 59517 59518\nf 58834 59518 58844\nf 58835 58836 58837\nf 58835 58837 59514\nf 58835 59513 59517\nf 58835 59514 59513\nf 58836 58838 58837\nf 58837 58838 58839\nf 58837 58839 59515\nf 58837 59515 59514\nf 58838 58840 59521\nf 58838 59521 58839\nf 58839 59520 59515\nf 58839 59521 59520\nf 58840 58841 59521\nf 58841 58847 59524\nf 58841 59523 59521\nf 58841 59524 59523\nf 58842 58843 59527\nf 58842 58845 58843\nf 58842 59527 59528\nf 58842 59528 58853\nf 58843 58845 58846\nf 58843 58846 59518\nf 58843 59516 59527\nf 58843 59518 59516\nf 58844 58846 58845\nf 58844 59518 58846\nf 58847 58848 58849\nf 58847 58849 59524\nf 58848 58850 58849\nf 58849 58850 58851\nf 58849 58851 59525\nf 58849 59525 59524\nf 58850 58852 59531\nf 58850 59531 58851\nf 58851 59530 59525\nf 58851 59531 59530\nf 58852 58856 59533\nf 58852 59533 59531\nf 58853 58855 58854\nf 58853 59528 58855\nf 58854 58855 59536\nf 58854 59536 59537\nf 58854 59537 58861\nf 58855 59528 59536\nf 58856 58857 58858\nf 58856 58858 59533\nf 58857 58859 59540\nf 58857 59540 58858\nf 58858 59539 59533\nf 58858 59540 59539\nf 58859 58864 59542\nf 58859 59542 59540\nf 58860 58863 59537\nf 58860 58868 58863\nf 58860 59534 59543\nf 58860 59537 59534\nf 58860 59543 58868\nf 58861 58863 58862\nf 58861 59537 58863\nf 58862 58863 58868\nf 58862 58868 58867\nf 58864 58865 58866\nf 58864 58866 59542\nf 58865 58869 58871\nf 58865 58871 59546\nf 58865 59546 58866\nf 58866 59545 59542\nf 58866 59546 59545\nf 58867 58868 58873\nf 58867 58873 58872\nf 58868 59543 59550\nf 58868 59550 58873\nf 58869 58870 58871\nf 58870 58876 58878\nf 58870 58878 59553\nf 58870 59553 58871\nf 58871 59552 59546\nf 58871 59553 59552\nf 58872 58873 58874\nf 58873 59550 59558\nf 58873 59558 59560\nf 58873 59560 58874\nf 58874 58879 58881\nf 58874 58881 58875\nf 58874 59560 58879\nf 58875 58881 58880\nf 58876 58877 58878\nf 58877 58884 58886\nf 58877 58886 58878\nf 58878 58886 58887\nf 58878 58887 59572\nf 58878 59561 59553\nf 58878 59572 59561\nf 58879 59560 59567\nf 58879 59567 59569\nf 58879 59569 58881\nf 58880 58881 58882\nf 58881 59569 59570\nf 58881 59570 58882\nf 58882 58889 58888\nf 58882 59570 58889\nf 58883 58899 58901\nf 58883 58901 58902\nf 58883 58902 58885\nf 58884 58885 58886\nf 58885 58902 58886\nf 58886 58902 59571\nf 58886 59571 58887\nf 58887 59571 59573\nf 58887 59573 59572\nf 58888 58889 59580\nf 58888 59580 58890\nf 58889 59570 59578\nf 58889 59578 59580\nf 58890 59580 59581\nf 58890 59581 59582\nf 58890 59582 58891\nf 58891 59582 59583\nf 58891 59583 58892\nf 58892 59583 59584\nf 58892 59584 58893\nf 58893 59584 59585\nf 58893 59585 58894\nf 58894 59585 59586\nf 58894 59586 58895\nf 58895 59586 59587\nf 58895 59587 58896\nf 58896 59587 59588\nf 58896 59588 58897\nf 58897 59588 59589\nf 58897 59589 58898\nf 58898 59589 59590\nf 58898 59590 58900\nf 58899 58900 58901\nf 58900 59590 59591\nf 58900 59591 58901\nf 58901 59591 58902\nf 58902 59591 59593\nf 58902 59592 59571\nf 58902 59593 59592\nf 58903 58904 59612\nf 58903 58912 58910\nf 58903 59611 58912\nf 58903 59612 59611\nf 58904 58913 59616\nf 58904 59614 59612\nf 58904 59616 59614\nf 58905 58906 59618\nf 58905 59618 59636\nf 58905 59636 58917\nf 58906 58907 59620\nf 58906 59620 59618\nf 58907 58908 59622\nf 58907 59622 59620\nf 58908 58909 59624\nf 58908 59624 59622\nf 58909 58918 59628\nf 58909 59626 59624\nf 58909 59628 59626\nf 58910 58912 58911\nf 58911 58912 59630\nf 58911 59630 58921\nf 58912 59611 59630\nf 58913 58914 58915\nf 58913 58915 59616\nf 58914 58916 59632\nf 58914 59632 58915\nf 58915 59631 59616\nf 58915 59632 59631\nf 58916 58922 59634\nf 58916 59634 59632\nf 58917 59636 58925\nf 58918 58919 58920\nf 58918 58920 59628\nf 58919 58928 58920\nf 58920 58928 59639\nf 58920 59639 59628\nf 58921 59630 59641\nf 58921 59641 58929\nf 58922 58923 58924\nf 58922 58924 59634\nf 58923 58930 58924\nf 58924 58930 59642\nf 58924 59642 59634\nf 58925 58927 58926\nf 58925 59636 58927\nf 58926 58927 59643\nf 58926 59643 58931\nf 58927 59636 59637\nf 58927 59637 59643\nf 58928 58932 59645\nf 58928 59645 59639\nf 58929 59641 59648\nf 58929 59648 58935\nf 58930 58936 59655\nf 58930 59649 59642\nf 58930 59655 59649\nf 58931 59643 59650\nf 58931 59650 58937\nf 58932 58933 58934\nf 58932 58934 59646\nf 58932 59646 59645\nf 58933 58939 58934\nf 58934 58939 59653\nf 58934 59653 59646\nf 58935 59648 59654\nf 58935 59654 58940\nf 58936 58941 59660\nf 58936 59660 59655\nf 58937 58938 58943\nf 58937 58943 58942\nf 58937 59650 58938\nf 58938 59650 59651\nf 58938 59651 59657\nf 58938 59657 58943\nf 58939 58944 59665\nf 58939 59658 59653\nf 58939 59665 59658\nf 58940 59654 59659\nf 58940 59659 58945\nf 58941 58946 59660\nf 58942 58943 58949\nf 58942 58949 58948\nf 58943 59657 59663\nf 58943 59663 58949\nf 58944 58950 59670\nf 58944 59670 59665\nf 58945 59659 59666\nf 58945 59666 58951\nf 58946 58947 59661\nf 58946 58954 58947\nf 58946 59661 59660\nf 58947 58954 58956\nf 58947 58956 59672\nf 58947 59668 59661\nf 58947 59672 59668\nf 58948 58949 58959\nf 58948 58959 58957\nf 58949 59663 59669\nf 58949 59669 58959\nf 58950 58960 59674\nf 58950 59674 59670\nf 58951 58953 58952\nf 58951 59666 58953\nf 58952 58953 59671\nf 58952 59671 58961\nf 58953 59666 59667\nf 58953 59667 59671\nf 58954 58955 58956\nf 58955 58962 58956\nf 58956 58962 59672\nf 58957 58959 58958\nf 58958 58959 59673\nf 58958 59673 58963\nf 58959 59669 59673\nf 58960 58964 59680\nf 58960 59680 59674\nf 58961 59671 59675\nf 58961 59675 58965\nf 58962 58966 59676\nf 58962 59676 59672\nf 58963 59673 59679\nf 58963 59679 58969\nf 58964 58970 59684\nf 58964 59684 59680\nf 58965 59675 59681\nf 58965 59681 58972\nf 58966 58967 58968\nf 58966 58968 59677\nf 58966 59677 59676\nf 58967 58973 58968\nf 58968 58973 59682\nf 58968 59682 59677\nf 58969 59679 59683\nf 58969 59683 58975\nf 58970 58971 59684\nf 58971 58977 59695\nf 58971 59685 59684\nf 58971 59695 59685\nf 58972 59681 59687\nf 58972 59687 58978\nf 58973 58974 59689\nf 58973 59688 59682\nf 58973 59689 59688\nf 58974 58980 59691\nf 58974 59691 59689\nf 58975 59683 59692\nf 58975 59692 58976\nf 58976 59692 59693\nf 58976 59693 59700\nf 58976 59700 58984\nf 58977 58986 59703\nf 58977 59703 59695\nf 58978 58988 58979\nf 58978 59687 59696\nf 58978 59696 59704\nf 58978 59704 58988\nf 58979 58988 58987\nf 58980 58981 58982\nf 58980 58982 59691\nf 58981 58983 59698\nf 58981 59698 58982\nf 58982 59697 59691\nf 58982 59698 59697\nf 58983 58989 59698\nf 58984 59700 58985\nf 58985 59072 59070\nf 58985 59699 59072\nf 58985 59700 59701\nf 58985 59701 59699\nf 58986 59073 59789\nf 58986 59789 59703\nf 58987 58988 59705\nf 58987 59705 59790\nf 58987 59790 59074\nf 58988 59704 59705\nf 58989 58990 59707\nf 58989 59706 59698\nf 58989 59707 59706\nf 58990 58991 59707\nf 58991 58992 59709\nf 58991 59709 59707\nf 58992 58993 59710\nf 58992 59710 59709\nf 58993 58994 59711\nf 58993 59711 59710\nf 58994 58995 59712\nf 58994 59712 59711\nf 58995 58996 59713\nf 58995 59713 59712\nf 58996 58997 59714\nf 58996 59714 59713\nf 58997 58998 59715\nf 58997 59715 59714\nf 58998 58999 59716\nf 58998 59716 59715\nf 58999 59000 59717\nf 58999 59717 59716\nf 59000 59001 59718\nf 59000 59718 59717\nf 59001 59002 59719\nf 59001 59719 59718\nf 59002 59003 59720\nf 59002 59720 59719\nf 59003 59004 59721\nf 59003 59721 59720\nf 59004 59005 59722\nf 59004 59722 59721\nf 59005 59006 59723\nf 59005 59723 59722\nf 59006 59007 59724\nf 59006 59724 59723\nf 59007 59008 59725\nf 59007 59725 59724\nf 59008 59009 59726\nf 59008 59726 59725\nf 59009 59010 59727\nf 59009 59727 59726\nf 59010 59011 59728\nf 59010 59728 59727\nf 59011 59012 59729\nf 59011 59729 59728\nf 59012 59013 59730\nf 59012 59730 59729\nf 59013 59014 59731\nf 59013 59731 59730\nf 59014 59015 59732\nf 59014 59732 59731\nf 59015 59016 59733\nf 59015 59733 59732\nf 59016 59017 59734\nf 59016 59734 59733\nf 59017 59018 59735\nf 59017 59735 59734\nf 59018 59019 59736\nf 59018 59736 59735\nf 59019 59020 59737\nf 59019 59737 59736\nf 59020 59021 59738\nf 59020 59738 59737\nf 59021 59022 59739\nf 59021 59739 59738\nf 59022 59023 59740\nf 59022 59740 59739\nf 59023 59024 59741\nf 59023 59741 59740\nf 59024 59025 59742\nf 59024 59742 59741\nf 59025 59026 59743\nf 59025 59743 59742\nf 59026 59027 59744\nf 59026 59744 59743\nf 59027 59028 59745\nf 59027 59745 59744\nf 59028 59029 59746\nf 59028 59746 59745\nf 59029 59030 59747\nf 59029 59747 59746\nf 59030 59031 59748\nf 59030 59748 59747\nf 59031 59032 59749\nf 59031 59749 59748\nf 59032 59033 59750\nf 59032 59750 59749\nf 59033 59034 59751\nf 59033 59751 59750\nf 59034 59035 59752\nf 59034 59752 59751\nf 59035 59036 59753\nf 59035 59753 59752\nf 59036 59037 59754\nf 59036 59754 59753\nf 59037 59038 59755\nf 59037 59755 59754\nf 59038 59039 59756\nf 59038 59756 59755\nf 59039 59040 59757\nf 59039 59757 59756\nf 59040 59041 59758\nf 59040 59758 59757\nf 59041 59042 59759\nf 59041 59759 59758\nf 59042 59043 59760\nf 59042 59760 59759\nf 59043 59044 59761\nf 59043 59761 59760\nf 59044 59045 59762\nf 59044 59762 59761\nf 59045 59046 59763\nf 59045 59763 59762\nf 59046 59047 59764\nf 59046 59764 59763\nf 59047 59048 59765\nf 59047 59765 59764\nf 59048 59049 59766\nf 59048 59766 59765\nf 59049 59050 59767\nf 59049 59767 59766\nf 59050 59051 59768\nf 59050 59768 59767\nf 59051 59052 59769\nf 59051 59769 59768\nf 59052 59053 59770\nf 59052 59770 59769\nf 59053 59054 59771\nf 59053 59771 59770\nf 59054 59055 59772\nf 59054 59772 59771\nf 59055 59056 59773\nf 59055 59773 59772\nf 59056 59057 59774\nf 59056 59774 59773\nf 59057 59058 59775\nf 59057 59775 59774\nf 59058 59059 59776\nf 59058 59776 59775\nf 59059 59060 59777\nf 59059 59777 59776\nf 59060 59061 59778\nf 59060 59778 59777\nf 59061 59062 59779\nf 59061 59779 59778\nf 59062 59063 59780\nf 59062 59780 59779\nf 59063 59064 59781\nf 59063 59781 59780\nf 59064 59065 59782\nf 59064 59782 59781\nf 59065 59066 59783\nf 59065 59783 59782\nf 59066 59067 59784\nf 59066 59784 59783\nf 59067 59068 59785\nf 59067 59785 59784\nf 59068 59069 59786\nf 59068 59786 59785\nf 59069 59071 59788\nf 59069 59788 59786\nf 59070 59072 59071\nf 59071 59072 59787\nf 59071 59787 59788\nf 59072 59699 59787\nf 59073 59075 59792\nf 59073 59792 59789\nf 59074 59790 59076\nf 59075 59077 59794\nf 59075 59794 59792\nf 59076 59790 59793\nf 59076 59793 59079\nf 59077 59078 59794\nf 59078 59080 59797\nf 59078 59795 59794\nf 59078 59797 59795\nf 59079 59793 59796\nf 59079 59796 59082\nf 59080 59081 59797\nf 59081 59084 59801\nf 59081 59798 59797\nf 59081 59801 59798\nf 59082 59796 59799\nf 59082 59799 59800\nf 59082 59800 59083\nf 59083 59800 59086\nf 59084 59085 59801\nf 59085 59098 59815\nf 59085 59802 59801\nf 59085 59815 59802\nf 59086 59100 59087\nf 59086 59800 59803\nf 59086 59803 59817\nf 59086 59817 59100\nf 59087 59100 59102\nf 59087 59102 59088\nf 59088 59102 59101\nf 59089 59179 59181\nf 59089 59181 59805\nf 59089 59805 59806\nf 59089 59806 59807\nf 59089 59807 59090\nf 59090 59807 59808\nf 59090 59808 59091\nf 59091 59808 59809\nf 59091 59809 59092\nf 59092 59809 59810\nf 59092 59810 59093\nf 59093 59810 59811\nf 59093 59811 59094\nf 59094 59811 59812\nf 59094 59812 59095\nf 59095 59812 59813\nf 59095 59813 59096\nf 59096 59813 59814\nf 59096 59814 59097\nf 59097 59814 59816\nf 59097 59816 59099\nf 59098 59099 59815\nf 59099 59816 59815\nf 59100 59817 59819\nf 59100 59819 59102\nf 59101 59102 59820\nf 59101 59820 59103\nf 59102 59819 59820\nf 59103 59820 59821\nf 59103 59821 59104\nf 59104 59183 59182\nf 59104 59821 59183\nf 59105 59187 59189\nf 59105 59189 59822\nf 59105 59822 59823\nf 59105 59823 59824\nf 59105 59824 59106\nf 59106 59824 59825\nf 59106 59825 59107\nf 59107 59825 59826\nf 59107 59826 59108\nf 59108 59826 59827\nf 59108 59827 59109\nf 59109 59827 59828\nf 59109 59828 59110\nf 59110 59828 59829\nf 59110 59829 59111\nf 59111 59829 59830\nf 59111 59830 59112\nf 59112 59830 59831\nf 59112 59831 59113\nf 59113 59831 59832\nf 59113 59832 59114\nf 59114 59832 59833\nf 59114 59833 59115\nf 59115 59833 59834\nf 59115 59834 59116\nf 59116 59834 59835\nf 59116 59835 59117\nf 59117 59835 59836\nf 59117 59836 59118\nf 59118 59836 59837\nf 59118 59837 59119\nf 59119 59837 59838\nf 59119 59838 59120\nf 59120 59838 59839\nf 59120 59839 59121\nf 59121 59839 59840\nf 59121 59840 59122\nf 59122 59840 59841\nf 59122 59841 59123\nf 59123 59841 59842\nf 59123 59842 59124\nf 59124 59842 59843\nf 59124 59843 59125\nf 59125 59843 59844\nf 59125 59844 59126\nf 59126 59844 59845\nf 59126 59845 59127\nf 59127 59845 59846\nf 59127 59846 59128\nf 59128 59846 59847\nf 59128 59847 59129\nf 59129 59847 59848\nf 59129 59848 59130\nf 59130 59848 59849\nf 59130 59849 59131\nf 59131 59849 59850\nf 59131 59850 59132\nf 59132 59850 59851\nf 59132 59851 59133\nf 59133 59851 59852\nf 59133 59852 59134\nf 59134 59852 59853\nf 59134 59853 59135\nf 59135 59853 59854\nf 59135 59854 59136\nf 59136 59854 59855\nf 59136 59855 59137\nf 59137 59855 59856\nf 59137 59856 59138\nf 59138 59856 59857\nf 59138 59857 59139\nf 59139 59857 59858\nf 59139 59858 59140\nf 59140 59858 59859\nf 59140 59859 59141\nf 59141 59859 59860\nf 59141 59860 59142\nf 59142 59860 59861\nf 59142 59861 59143\nf 59143 59861 59862\nf 59143 59862 59144\nf 59144 59862 59863\nf 59144 59863 59145\nf 59145 59863 59864\nf 59145 59864 59146\nf 59146 59864 59865\nf 59146 59865 59147\nf 59147 59865 59866\nf 59147 59866 59148\nf 59148 59866 59867\nf 59148 59867 59149\nf 59149 59867 59868\nf 59149 59868 59150\nf 59150 59868 59869\nf 59150 59869 59151\nf 59151 59869 59870\nf 59151 59870 59152\nf 59152 59870 59871\nf 59152 59871 59153\nf 59153 59871 59872\nf 59153 59872 59154\nf 59154 59872 59873\nf 59154 59873 59155\nf 59155 59873 59874\nf 59155 59874 59156\nf 59156 59874 59875\nf 59156 59875 59157\nf 59157 59875 59876\nf 59157 59876 59158\nf 59158 59876 59877\nf 59158 59877 59159\nf 59159 59877 59878\nf 59159 59878 59160\nf 59160 59878 59879\nf 59160 59879 59161\nf 59161 59879 59880\nf 59161 59880 59162\nf 59162 59880 59881\nf 59162 59881 59163\nf 59163 59881 59882\nf 59163 59882 59164\nf 59164 59882 59883\nf 59164 59883 59165\nf 59165 59883 59884\nf 59165 59884 59166\nf 59166 59884 59885\nf 59166 59885 59167\nf 59167 59885 59886\nf 59167 59886 59168\nf 59168 59886 59887\nf 59168 59887 59169\nf 59169 59887 59888\nf 59169 59888 59170\nf 59170 59888 59889\nf 59170 59889 59171\nf 59171 59889 59890\nf 59171 59890 59172\nf 59172 59890 59891\nf 59172 59891 59173\nf 59173 59891 59892\nf 59173 59892 59174\nf 59174 59892 59893\nf 59174 59893 59175\nf 59175 59893 59894\nf 59175 59894 59176\nf 59176 59894 59895\nf 59176 59895 59177\nf 59177 59895 59897\nf 59177 59897 59178\nf 59178 59897 59180\nf 59179 59180 59181\nf 59180 59896 59181\nf 59180 59897 59896\nf 59181 59896 59805\nf 59182 59183 59902\nf 59182 59902 59907\nf 59182 59907 59190\nf 59183 59821 59901\nf 59183 59901 59902\nf 59184 59194 59909\nf 59184 59903 59904\nf 59184 59904 59185\nf 59184 59909 59903\nf 59185 59904 59906\nf 59185 59906 59186\nf 59186 59906 59188\nf 59187 59188 59189\nf 59188 59905 59189\nf 59188 59906 59905\nf 59189 59905 59822\nf 59190 59196 59191\nf 59190 59907 59911\nf 59190 59911 59196\nf 59191 59196 59198\nf 59191 59198 59192\nf 59192 59198 59197\nf 59193 59199 59201\nf 59193 59201 59913\nf 59193 59910 59195\nf 59193 59913 59910\nf 59194 59195 59909\nf 59195 59910 59909\nf 59196 59202 59203\nf 59196 59203 59198\nf 59196 59911 59202\nf 59197 59198 59200\nf 59198 59203 59917\nf 59198 59917 59200\nf 59199 59200 59201\nf 59200 59912 59914\nf 59200 59914 59201\nf 59200 59917 59912\nf 59201 59914 59913\nf 59202 59204 59205\nf 59202 59205 59203\nf 59202 59911 59916\nf 59202 59916 59204\nf 59203 59205 59206\nf 59203 59206 59918\nf 59203 59918 59917\nf 59204 59208 59210\nf 59204 59210 59212\nf 59204 59212 59205\nf 59204 59916 59922\nf 59204 59922 59208\nf 59205 59212 59214\nf 59205 59214 59206\nf 59206 59207 59920\nf 59206 59214 59215\nf 59206 59215 59207\nf 59206 59920 59918\nf 59207 59215 59928\nf 59207 59925 59920\nf 59207 59928 59925\nf 59208 59218 59210\nf 59208 59922 59923\nf 59208 59923 59926\nf 59208 59926 59218\nf 59209 59210 59218\nf 59209 59211 59210\nf 59209 59218 59216\nf 59210 59211 59212\nf 59211 59213 59212\nf 59212 59213 59214\nf 59213 59219 59214\nf 59214 59219 59220\nf 59214 59220 59215\nf 59215 59220 59932\nf 59215 59932 59928\nf 59216 59218 59217\nf 59217 59218 59929\nf 59217 59929 59930\nf 59217 59930 59221\nf 59218 59926 59929\nf 59219 59224 59220\nf 59220 59224 59225\nf 59220 59225 59934\nf 59220 59934 59932\nf 59221 59223 59222\nf 59221 59930 59223\nf 59222 59223 59933\nf 59222 59933 59226\nf 59223 59930 59933\nf 59224 59228 59225\nf 59225 59228 59229\nf 59225 59229 59938\nf 59225 59938 59934\nf 59226 59933 59935\nf 59226 59935 59227\nf 59227 59935 59936\nf 59227 59936 59939\nf 59227 59939 59230\nf 59228 59231 59229\nf 59229 59231 59232\nf 59229 59232 59940\nf 59229 59940 59938\nf 59230 59939 59233\nf 59231 59234 59232\nf 59232 59234 59235\nf 59232 59235 59943\nf 59232 59943 59940\nf 59233 59939 59942\nf 59233 59942 59236\nf 59234 59237 59235\nf 59235 59237 59238\nf 59235 59238 59945\nf 59235 59945 59943\nf 59236 59942 59944\nf 59236 59944 59239\nf 59237 59241 59238\nf 59238 59241 59242\nf 59238 59242 59947\nf 59238 59947 59945\nf 59239 59944 59946\nf 59239 59946 59948\nf 59239 59948 59240\nf 59240 59244 59243\nf 59240 59948 59244\nf 59241 59245 59242\nf 59242 59245 59246\nf 59242 59246 59951\nf 59242 59951 59947\nf 59243 59244 59952\nf 59243 59952 59247\nf 59244 59948 59949\nf 59244 59949 59952\nf 59245 59248 59246\nf 59246 59248 59249\nf 59246 59249 59953\nf 59246 59953 59951\nf 59247 59952 59250\nf 59248 59252 59249\nf 59249 59252 59253\nf 59249 59253 59956\nf 59249 59956 59953\nf 59250 59952 59954\nf 59250 59954 59957\nf 59250 59957 59251\nf 59251 59255 59254\nf 59251 59957 59255\nf 59252 59256 59253\nf 59253 59256 59258\nf 59253 59258 59960\nf 59253 59960 59956\nf 59254 59255 59961\nf 59254 59961 59259\nf 59255 59957 59958\nf 59255 59958 59961\nf 59256 59257 59258\nf 59257 59260 59258\nf 59258 59260 59960\nf 59259 59961 59261\nf 59260 59262 59964\nf 59260 59962 59960\nf 59260 59964 59962\nf 59261 59961 59963\nf 59261 59963 59263\nf 59262 59264 59966\nf 59262 59966 59964\nf 59263 59963 59965\nf 59263 59965 59265\nf 59264 59266 59968\nf 59264 59968 59966\nf 59265 59965 59967\nf 59265 59967 59267\nf 59266 59268 59970\nf 59266 59970 59968\nf 59267 59967 59969\nf 59267 59969 59270\nf 59268 59269 59972\nf 59268 59972 59970\nf 59269 59271 59272\nf 59269 59272 59972\nf 59270 59969 59971\nf 59270 59971 59273\nf 59271 59274 59272\nf 59272 59274 59275\nf 59272 59275 59974\nf 59272 59974 59972\nf 59273 59971 59973\nf 59273 59973 59276\nf 59274 59277 59275\nf 59275 59277 59278\nf 59275 59278 59976\nf 59275 59976 59974\nf 59276 59973 59975\nf 59276 59975 59279\nf 59277 59281 59980\nf 59277 59980 59278\nf 59278 59977 59976\nf 59278 59980 59977\nf 59279 59975 59978\nf 59279 59978 59979\nf 59279 59979 59280\nf 59280 59979 59282\nf 59281 59283 59984\nf 59281 59984 59980\nf 59282 59979 59982\nf 59282 59982 59284\nf 59283 59285 59986\nf 59283 59986 59984\nf 59284 59982 59985\nf 59284 59985 59287\nf 59285 59286 59988\nf 59285 59988 59986\nf 59286 59288 59289\nf 59286 59289 59988\nf 59287 59985 59987\nf 59287 59987 59290\nf 59288 59292 59991\nf 59288 59991 59289\nf 59289 59989 59988\nf 59289 59991 59989\nf 59290 59294 59291\nf 59290 59987 59990\nf 59290 59990 59993\nf 59290 59993 59294\nf 59291 59294 59293\nf 59292 59295 59994\nf 59292 59994 59991\nf 59293 59294 59298\nf 59293 59298 59297\nf 59294 59993 59298\nf 59295 59296 59997\nf 59295 59997 59994\nf 59296 59299 59300\nf 59296 59300 59997\nf 59297 59298 59302\nf 59297 59302 59301\nf 59298 59993 59996\nf 59298 59996 59302\nf 59299 59303 59300\nf 59300 59303 59304\nf 59300 59304 60001\nf 59300 60001 59997\nf 59301 59302 60000\nf 59301 60000 60002\nf 59301 60002 59305\nf 59302 59996 59999\nf 59302 59999 60000\nf 59303 59306 59304\nf 59304 59306 59307\nf 59304 59307 60004\nf 59304 60004 60001\nf 59305 60002 59308\nf 59306 59309 59307\nf 59307 59309 59310\nf 59307 59310 60007\nf 59307 60007 60004\nf 59308 60002 60005\nf 59308 60005 59311\nf 59309 59313 59310\nf 59310 59313 59314\nf 59310 59314 60010\nf 59310 60010 60007\nf 59311 59316 59312\nf 59311 60005 60008\nf 59311 60008 60011\nf 59311 60011 59316\nf 59312 59316 59315\nf 59313 59317 59314\nf 59314 59317 59318\nf 59314 59318 60013\nf 59314 60013 60010\nf 59315 59316 59320\nf 59315 59320 59319\nf 59316 60011 59320\nf 59317 59321 60017\nf 59317 60017 59318\nf 59318 60014 60013\nf 59318 60017 60014\nf 59319 59320 59324\nf 59319 59324 59323\nf 59320 60011 60015\nf 59320 60015 59324\nf 59321 59322 60020\nf 59321 60020 60017\nf 59322 59326 59328\nf 59322 59328 60020\nf 59323 59324 59330\nf 59323 59330 59325\nf 59324 59329 59330\nf 59324 60015 60019\nf 59324 60019 59329\nf 59325 59330 59331\nf 59325 59331 59327\nf 59326 59327 59328\nf 59327 59331 59328\nf 59328 59331 59332\nf 59328 59332 60024\nf 59328 60024 60020\nf 59329 59333 59330\nf 59329 60019 60022\nf 59329 60022 60023\nf 59329 60023 59333\nf 59330 59333 59334\nf 59330 59334 59331\nf 59331 59334 59332\nf 59332 59334 60029\nf 59332 60025 60024\nf 59332 60029 60025\nf 59333 59335 59336\nf 59333 59336 59334\nf 59333 60023 60027\nf 59333 60027 59335\nf 59334 59336 60034\nf 59334 60034 60029\nf 59335 59337 59338\nf 59335 59338 59339\nf 59335 59339 59336\nf 59335 60027 60031\nf 59335 60031 59337\nf 59336 59339 60037\nf 59336 60037 60034\nf 59337 59340 59341\nf 59337 59341 59338\nf 59337 60031 60032\nf 59337 60032 60036\nf 59337 60036 59340\nf 59338 59341 59342\nf 59338 59342 59339\nf 59339 59342 60040\nf 59339 60040 60037\nf 59340 59343 59345\nf 59340 59345 59341\nf 59340 60036 60039\nf 59340 60039 59343\nf 59341 59345 59347\nf 59341 59347 59342\nf 59342 59347 60043\nf 59342 60043 60040\nf 59343 59349 59345\nf 59343 60039 60042\nf 59343 60042 59349\nf 59344 59345 59349\nf 59344 59346 59345\nf 59344 59349 59348\nf 59345 59346 59347\nf 59346 59350 59347\nf 59347 59350 60043\nf 59348 59349 59352\nf 59348 59352 59351\nf 59349 60042 60045\nf 59349 60045 59352\nf 59350 59353 60049\nf 59350 60046 60043\nf 59350 60049 60046\nf 59351 59352 59355\nf 59351 59355 59354\nf 59352 60045 60048\nf 59352 60048 59355\nf 59353 59356 60052\nf 59353 60052 60049\nf 59354 59355 59358\nf 59354 59358 59357\nf 59355 60048 60051\nf 59355 60051 59358\nf 59356 59359 60055\nf 59356 60055 60052\nf 59357 59358 59362\nf 59357 59362 59360\nf 59358 60051 60054\nf 59358 60054 59362\nf 59359 59363 60058\nf 59359 60058 60055\nf 59360 59362 59361\nf 59361 59362 60057\nf 59361 60057 59364\nf 59362 60054 60057\nf 59363 59365 60061\nf 59363 60061 60058\nf 59364 60057 60060\nf 59364 60060 59366\nf 59365 59367 60065\nf 59365 60065 60061\nf 59366 60060 60063\nf 59366 60063 59368\nf 59367 59369 60069\nf 59367 60069 60065\nf 59368 60063 60067\nf 59368 60067 59371\nf 59369 59370 60073\nf 59369 60073 60069\nf 59370 59373 59374\nf 59370 59374 60073\nf 59371 59377 59372\nf 59371 60067 60071\nf 59371 60071 60075\nf 59371 60075 59377\nf 59372 59377 59375\nf 59373 59378 59374\nf 59374 59378 59379\nf 59374 59379 60077\nf 59374 60077 60073\nf 59375 59377 59376\nf 59376 59377 60075\nf 59376 60075 59380\nf 59378 59381 59379\nf 59379 59381 59382\nf 59379 59382 60081\nf 59379 60081 60077\nf 59380 60075 60079\nf 59380 60079 59383\nf 59381 59384 59382\nf 59382 59384 59385\nf 59382 59385 60085\nf 59382 60085 60081\nf 59383 60079 60082\nf 59383 60082 59386\nf 59384 59388 59385\nf 59385 59388 59389\nf 59385 59389 60087\nf 59385 60087 60085\nf 59386 59387 59392\nf 59386 59392 59390\nf 59386 60082 59387\nf 59387 60082 60083\nf 59387 60083 60086\nf 59387 60086 59392\nf 59388 59393 59389\nf 59389 59393 59394\nf 59389 59394 60089\nf 59389 60089 60087\nf 59390 59392 59391\nf 59391 59392 60088\nf 59391 60088 59395\nf 59392 60086 60088\nf 59393 59396 59394\nf 59394 59396 59397\nf 59394 59397 60092\nf 59394 60092 60089\nf 59395 60088 60090\nf 59395 60090 59398\nf 59396 59399 60097\nf 59396 60097 59397\nf 59397 60093 60092\nf 59397 60097 60093\nf 59398 60090 60094\nf 59398 60094 59400\nf 59399 59403 60100\nf 59399 60100 60097\nf 59400 59402 59401\nf 59400 60094 59402\nf 59401 59402 60099\nf 59401 60099 59404\nf 59402 60094 60095\nf 59402 60095 60099\nf 59403 59405 60103\nf 59403 60103 60100\nf 59404 60099 60102\nf 59404 60102 59406\nf 59405 59407 60108\nf 59405 60108 60103\nf 59406 60102 60105\nf 59406 60105 59408\nf 59407 59411 60111\nf 59407 60111 60108\nf 59408 59410 59409\nf 59408 60105 59410\nf 59409 59410 60110\nf 59409 60110 59412\nf 59410 60105 60106\nf 59410 60106 60110\nf 59411 59413 60114\nf 59411 60114 60111\nf 59412 60110 60113\nf 59412 60113 59414\nf 59413 59415 60117\nf 59413 60117 60114\nf 59414 60113 60116\nf 59414 60116 59417\nf 59415 59416 60120\nf 59415 60120 60117\nf 59416 59418 59419\nf 59416 59419 60120\nf 59417 60116 60119\nf 59417 60119 59420\nf 59418 59421 59419\nf 59419 59421 59423\nf 59419 59423 60125\nf 59419 60125 60120\nf 59420 60119 60122\nf 59420 60122 59424\nf 59421 59422 59423\nf 59422 59426 59423\nf 59423 59426 60125\nf 59424 59425 59429\nf 59424 59429 59427\nf 59424 60122 59425\nf 59425 60122 60123\nf 59425 60123 60127\nf 59425 60127 59429\nf 59426 59430 60128\nf 59426 60128 60125\nf 59427 59429 59428\nf 59428 59429 60131\nf 59428 60131 59432\nf 59429 60127 60131\nf 59430 59431 60129\nf 59430 59433 59431\nf 59430 60129 60128\nf 59431 59433 59434\nf 59431 59434 60137\nf 59431 60132 60129\nf 59431 60137 60132\nf 59432 60131 60134\nf 59432 60134 59435\nf 59433 59438 59434\nf 59434 59438 59439\nf 59434 59439 60140\nf 59434 60140 60137\nf 59435 59437 59436\nf 59435 60134 59437\nf 59436 59437 60139\nf 59436 60139 59440\nf 59437 60134 60135\nf 59437 60135 60139\nf 59438 59441 59439\nf 59439 59441 59442\nf 59439 59442 60143\nf 59439 60143 60140\nf 59440 60139 60142\nf 59440 60142 59443\nf 59441 59444 59442\nf 59442 59444 59445\nf 59442 59445 60145\nf 59442 60145 60143\nf 59443 60142 60144\nf 59443 60144 59446\nf 59444 59447 59445\nf 59445 59447 59448\nf 59445 59448 60148\nf 59445 60148 60145\nf 59446 60144 60146\nf 59446 60146 59449\nf 59447 59450 59448\nf 59448 59450 59451\nf 59448 59451 60151\nf 59448 60151 60148\nf 59449 60146 60149\nf 59449 60149 59452\nf 59450 59453 59451\nf 59451 59453 59454\nf 59451 59454 60154\nf 59451 60154 60151\nf 59452 60149 60152\nf 59452 60152 59455\nf 59453 59456 59454\nf 59454 59456 59457\nf 59454 59457 60157\nf 59454 60157 60154\nf 59455 60152 60155\nf 59455 60155 59458\nf 59456 59459 59457\nf 59457 59459 59460\nf 59457 59460 60160\nf 59457 60160 60157\nf 59458 60155 60158\nf 59458 60158 59461\nf 59459 59462 59460\nf 59460 59462 59463\nf 59460 59463 60163\nf 59460 60163 60160\nf 59461 60158 60161\nf 59461 60161 59464\nf 59462 59465 60167\nf 59462 60167 59463\nf 59463 60164 60163\nf 59463 60167 60164\nf 59464 60161 60165\nf 59464 60165 59466\nf 59465 59467 60171\nf 59465 60171 60167\nf 59466 60165 60169\nf 59466 60169 59468\nf 59467 59469 60175\nf 59467 60175 60171\nf 59468 60169 60173\nf 59468 60173 59470\nf 59469 59471 60178\nf 59469 60178 60175\nf 59470 60173 60177\nf 59470 60177 59473\nf 59471 59472 60180\nf 59471 60180 60178\nf 59472 59474 59475\nf 59472 59475 60180\nf 59473 60177 60179\nf 59473 60179 59476\nf 59474 59478 60183\nf 59474 60183 59475\nf 59475 60181 60180\nf 59475 60183 60181\nf 59476 59480 59477\nf 59476 60179 60182\nf 59476 60182 60185\nf 59476 60185 59480\nf 59477 59480 59479\nf 59478 59481 60186\nf 59478 60186 60183\nf 59479 59480 59484\nf 59479 59484 59483\nf 59480 60185 59484\nf 59481 59482 60188\nf 59481 60188 60186\nf 59482 59485 59487\nf 59482 59487 60188\nf 59483 59484 59490\nf 59483 59490 59488\nf 59484 60185 60187\nf 59484 60187 59490\nf 59485 59486 59487\nf 59486 59491 59492\nf 59486 59492 59487\nf 59487 59492 60189\nf 59487 60189 60188\nf 59488 59490 59489\nf 59489 59490 60190\nf 59489 60190 59493\nf 59490 60187 60190\nf 59491 59494 60195\nf 59491 60195 59492\nf 59492 60191 60189\nf 59492 60192 60191\nf 59492 60195 60192\nf 59493 60190 60194\nf 59493 60194 59496\nf 59494 59495 60198\nf 59494 60198 60195\nf 59495 59497 59498\nf 59495 59498 60198\nf 59496 60194 60197\nf 59496 60197 59499\nf 59497 59500 59498\nf 59498 59500 59501\nf 59498 59501 60201\nf 59498 60201 60198\nf 59499 60197 60200\nf 59499 60200 59502\nf 59500 59503 60205\nf 59500 60205 59501\nf 59501 60202 60201\nf 59501 60205 60202\nf 59502 60200 60203\nf 59502 60203 59505\nf 59503 59504 60205\nf 59504 59507 60211\nf 59504 60206 60205\nf 59504 60211 60206\nf 59505 59510 59506\nf 59505 60203 60208\nf 59505 60208 59510\nf 59506 59510 59511\nf 59506 59511 59508\nf 59507 59508 60215\nf 59507 60215 60211\nf 59508 59511 60215\nf 59509 59510 60209\nf 59509 59512 59510\nf 59509 60209 60213\nf 59509 60213 60214\nf 59509 60214 59512\nf 59510 59512 59511\nf 59510 60208 60209\nf 59511 59512 60219\nf 59511 60216 60215\nf 59511 60219 60216\nf 59512 60214 60217\nf 59512 60217 60220\nf 59512 60220 60219\nf 59513 59514 60274\nf 59513 59519 59517\nf 59513 60273 59519\nf 59513 60274 60273\nf 59514 59515 60275\nf 59514 60275 60274\nf 59515 59520 60277\nf 59515 60276 60275\nf 59515 60277 60276\nf 59516 59518 60283\nf 59516 59529 59527\nf 59516 60280 59529\nf 59516 60283 60280\nf 59517 59519 59518\nf 59518 59519 60282\nf 59518 60282 60283\nf 59519 60273 60282\nf 59520 59521 59522\nf 59520 59522 60277\nf 59521 59523 60286\nf 59521 60286 59522\nf 59522 60285 60277\nf 59522 60286 60285\nf 59523 59524 60286\nf 59524 59525 60288\nf 59524 60288 60286\nf 59525 59530 60290\nf 59525 60289 60288\nf 59525 60290 60289\nf 59526 59529 60280\nf 59526 59535 59538\nf 59526 59538 59529\nf 59526 60278 60293\nf 59526 60280 60278\nf 59526 60293 59535\nf 59527 59529 59528\nf 59528 59529 59538\nf 59528 59538 59536\nf 59530 59531 59532\nf 59530 59532 60290\nf 59531 59533 60297\nf 59531 60297 59532\nf 59532 60296 60290\nf 59532 60297 60296\nf 59533 59539 60299\nf 59533 60299 60297\nf 59534 59535 60305\nf 59534 59537 59535\nf 59534 60305 60306\nf 59534 60306 59543\nf 59535 59537 59538\nf 59535 60293 60294\nf 59535 60294 60305\nf 59536 59538 59537\nf 59539 59540 59541\nf 59539 59541 60299\nf 59540 59542 60309\nf 59540 60309 59541\nf 59541 60308 60299\nf 59541 60309 60308\nf 59542 59545 60311\nf 59542 60311 60309\nf 59543 59544 59551\nf 59543 59551 59550\nf 59543 60306 59544\nf 59544 59549 59551\nf 59544 60306 60322\nf 59544 60322 59549\nf 59545 59546 59547\nf 59545 59547 60311\nf 59546 59552 59547\nf 59547 59548 60313\nf 59547 59552 59554\nf 59547 59554 59548\nf 59547 60313 60311\nf 59548 59554 59555\nf 59548 59555 60326\nf 59548 60325 60313\nf 59548 60326 60325\nf 59549 59557 59559\nf 59549 59559 59551\nf 59549 60322 60323\nf 59549 60323 60343\nf 59549 60343 59557\nf 59550 59551 59559\nf 59550 59559 59558\nf 59552 59553 59554\nf 59553 59561 59554\nf 59554 59561 59562\nf 59554 59562 59555\nf 59555 59556 60328\nf 59555 59562 59563\nf 59555 59563 59556\nf 59555 60328 60326\nf 59556 59563 59564\nf 59556 59564 60346\nf 59556 60345 60328\nf 59556 60346 60345\nf 59557 60343 60367\nf 59557 60367 60369\nf 59557 60369 59559\nf 59558 59559 59560\nf 59559 60369 60370\nf 59559 60370 59560\nf 59560 59568 59567\nf 59560 60370 59568\nf 59561 59572 59562\nf 59562 59572 59574\nf 59562 59574 59575\nf 59562 59575 59563\nf 59563 59575 59576\nf 59563 59576 59564\nf 59564 59565 60348\nf 59564 59576 59577\nf 59564 59577 59565\nf 59564 60348 60346\nf 59565 59566 60350\nf 59565 59577 59566\nf 59565 60350 60348\nf 59566 59577 60389\nf 59566 60371 60350\nf 59566 60372 60371\nf 59566 60389 60372\nf 59567 59568 60386\nf 59567 60386 59569\nf 59568 60370 60384\nf 59568 60384 60386\nf 59569 60386 60387\nf 59569 60387 59570\nf 59570 59579 59578\nf 59570 60387 59579\nf 59571 59592 59594\nf 59571 59594 59595\nf 59571 59595 59573\nf 59572 59573 59574\nf 59573 59595 59574\nf 59574 59595 59596\nf 59574 59596 59597\nf 59574 59597 59575\nf 59575 59597 59576\nf 59576 59597 60408\nf 59576 60388 59577\nf 59576 60408 60388\nf 59577 60388 60390\nf 59577 60390 60389\nf 59578 59579 60404\nf 59578 60404 59580\nf 59579 60387 60402\nf 59579 60402 60404\nf 59580 60404 60405\nf 59580 60405 59581\nf 59581 59598 59599\nf 59581 59599 59582\nf 59581 60405 59598\nf 59582 59599 59600\nf 59582 59600 59583\nf 59583 59600 59601\nf 59583 59601 59584\nf 59584 59601 59602\nf 59584 59602 59585\nf 59585 59602 59603\nf 59585 59603 59586\nf 59586 59603 59604\nf 59586 59604 59587\nf 59587 59604 59605\nf 59587 59605 59588\nf 59588 59605 59606\nf 59588 59606 59589\nf 59589 59606 59607\nf 59589 59607 59590\nf 59590 59607 59608\nf 59590 59608 59591\nf 59591 59608 59609\nf 59591 59609 59593\nf 59592 59593 59594\nf 59593 59609 59594\nf 59594 59609 59610\nf 59594 59610 59595\nf 59595 59610 60433\nf 59595 60406 59596\nf 59595 60433 60406\nf 59596 60406 60407\nf 59596 60407 59597\nf 59597 60407 60409\nf 59597 60409 60408\nf 59598 60405 60419\nf 59598 60419 60421\nf 59598 60421 59599\nf 59599 60421 60422\nf 59599 60422 59600\nf 59600 60422 60423\nf 59600 60423 59601\nf 59601 60423 60424\nf 59601 60424 59602\nf 59602 60424 60425\nf 59602 60425 59603\nf 59603 60425 60426\nf 59603 60426 59604\nf 59604 60426 60427\nf 59604 60427 59605\nf 59605 60427 60428\nf 59605 60428 59606\nf 59606 60428 60429\nf 59606 60429 59607\nf 59607 60429 60430\nf 59607 60430 59608\nf 59608 60430 60431\nf 59608 60431 59609\nf 59609 60431 60432\nf 59609 60432 59610\nf 59610 60432 60434\nf 59610 60434 60433\nf 59611 59612 60492\nf 59611 60492 60505\nf 59611 60505 59630\nf 59612 59613 60491\nf 59612 59614 59613\nf 59612 60491 60492\nf 59613 59614 59615\nf 59613 59615 60474\nf 59613 60472 60491\nf 59613 60474 60472\nf 59614 59616 59615\nf 59615 59616 59617\nf 59615 59617 60476\nf 59615 60476 60474\nf 59616 59631 59633\nf 59616 59633 60495\nf 59616 60495 59617\nf 59617 60494 60476\nf 59617 60495 60494\nf 59618 59619 60499\nf 59618 59620 59619\nf 59618 60499 60500\nf 59618 60500 59636\nf 59619 59620 59621\nf 59619 59621 60481\nf 59619 60479 60499\nf 59619 60481 60479\nf 59620 59622 59621\nf 59621 59622 59623\nf 59621 59623 60483\nf 59621 60483 60481\nf 59622 59624 59623\nf 59623 59624 59625\nf 59623 59625 60485\nf 59623 60485 60483\nf 59624 59626 59625\nf 59625 59626 59627\nf 59625 59627 60487\nf 59625 60487 60485\nf 59626 59628 59627\nf 59627 59628 59629\nf 59627 59629 60489\nf 59627 60489 60487\nf 59628 59639 59640\nf 59628 59640 60503\nf 59628 60503 59629\nf 59629 60502 60489\nf 59629 60503 60502\nf 59630 60505 59641\nf 59631 59632 59633\nf 59632 59634 60507\nf 59632 60507 59633\nf 59633 60506 60495\nf 59633 60507 60506\nf 59634 59642 60507\nf 59635 59638 60500\nf 59635 59644 59638\nf 59635 60497 60509\nf 59635 60500 60497\nf 59635 60509 59644\nf 59636 59638 59637\nf 59636 60500 59638\nf 59637 59638 59644\nf 59637 59644 59643\nf 59639 59645 59640\nf 59640 59645 59647\nf 59640 59647 60517\nf 59640 60511 60503\nf 59640 60517 60511\nf 59641 60505 60512\nf 59641 60512 59648\nf 59642 59649 60519\nf 59642 60513 60507\nf 59642 60519 60513\nf 59643 59644 59652\nf 59643 59652 59650\nf 59644 60509 60515\nf 59644 60515 59652\nf 59645 59646 59647\nf 59646 59653 59647\nf 59647 59653 60517\nf 59648 60512 60518\nf 59648 60518 59654\nf 59649 59655 60519\nf 59650 59652 59651\nf 59651 59652 60523\nf 59651 60523 59657\nf 59652 60515 60523\nf 59653 59658 60532\nf 59653 60525 60517\nf 59653 60532 60525\nf 59654 60518 60526\nf 59654 60526 59659\nf 59655 59656 60520\nf 59655 59660 59656\nf 59655 60520 60519\nf 59656 59660 59662\nf 59656 59662 60534\nf 59656 60527 60520\nf 59656 60534 60527\nf 59657 60523 60529\nf 59657 60529 59663\nf 59658 59665 60538\nf 59658 60538 60532\nf 59659 60526 60533\nf 59659 60533 59666\nf 59660 59661 59662\nf 59661 59668 59662\nf 59662 59668 60534\nf 59663 59664 60537\nf 59663 60529 59664\nf 59663 60537 60544\nf 59663 60544 59669\nf 59664 60529 60530\nf 59664 60530 60535\nf 59664 60535 60537\nf 59665 59670 60546\nf 59665 60546 60538\nf 59666 60533 60539\nf 59666 60539 59667\nf 59667 60539 60540\nf 59667 60540 60547\nf 59667 60547 59671\nf 59668 59672 60548\nf 59668 60542 60534\nf 59668 60548 60542\nf 59669 60544 59673\nf 59670 59674 60554\nf 59670 60554 60546\nf 59671 60547 59675\nf 59672 59676 60548\nf 59673 60544 60552\nf 59673 60552 59679\nf 59674 59680 60560\nf 59674 60560 60554\nf 59675 60547 60555\nf 59675 60555 59681\nf 59676 59677 59678\nf 59676 59678 60549\nf 59676 60549 60548\nf 59677 59682 59678\nf 59678 59682 60556\nf 59678 60556 60549\nf 59679 60552 60558\nf 59679 60558 59683\nf 59680 59684 60560\nf 59681 60555 60562\nf 59681 60562 59687\nf 59682 59688 60563\nf 59682 60563 60556\nf 59683 60558 60567\nf 59683 60567 59692\nf 59684 59685 59686\nf 59684 59686 60560\nf 59685 59695 60570\nf 59685 60570 59686\nf 59686 60561 60560\nf 59686 60570 60561\nf 59687 60562 60571\nf 59687 60571 59696\nf 59688 59689 59690\nf 59688 59690 60564\nf 59688 60564 60563\nf 59689 59691 60573\nf 59689 60573 59690\nf 59690 60572 60564\nf 59690 60573 60572\nf 59691 59697 60573\nf 59692 59694 59693\nf 59692 60567 59694\nf 59693 59694 60574\nf 59693 60574 60575\nf 59693 60575 59700\nf 59694 60567 60568\nf 59694 60568 60574\nf 59695 59703 60585\nf 59695 60577 60570\nf 59695 60585 60577\nf 59696 60571 60578\nf 59696 60578 59704\nf 59697 59698 60580\nf 59697 60579 60573\nf 59697 60580 60579\nf 59698 59706 60581\nf 59698 60581 60580\nf 59699 59701 60583\nf 59699 60583 60666\nf 59699 60666 59787\nf 59700 59702 59701\nf 59700 60575 59702\nf 59701 59702 60582\nf 59701 60582 60583\nf 59702 60575 60582\nf 59703 59789 60669\nf 59703 60669 60585\nf 59704 59791 59705\nf 59704 60578 60586\nf 59704 60586 60670\nf 59704 60670 59791\nf 59705 59791 59790\nf 59706 59707 59708\nf 59706 59708 60581\nf 59707 59709 60588\nf 59707 60588 59708\nf 59708 60587 60581\nf 59708 60588 60587\nf 59709 59710 60588\nf 59710 59711 60589\nf 59710 60589 60588\nf 59711 59712 60590\nf 59711 60590 60589\nf 59712 59713 60591\nf 59712 60591 60590\nf 59713 59714 60592\nf 59713 60592 60591\nf 59714 59715 60593\nf 59714 60593 60592\nf 59715 59716 60594\nf 59715 60594 60593\nf 59716 59717 60595\nf 59716 60595 60594\nf 59717 59718 60596\nf 59717 60596 60595\nf 59718 59719 60597\nf 59718 60597 60596\nf 59719 59720 60598\nf 59719 60598 60597\nf 59720 59721 60599\nf 59720 60599 60598\nf 59721 59722 60600\nf 59721 60600 60599\nf 59722 59723 60601\nf 59722 60601 60600\nf 59723 59724 60602\nf 59723 60602 60601\nf 59724 59725 60603\nf 59724 60603 60602\nf 59725 59726 60604\nf 59725 60604 60603\nf 59726 59727 60605\nf 59726 60605 60604\nf 59727 59728 60606\nf 59727 60606 60605\nf 59728 59729 60607\nf 59728 60607 60606\nf 59729 59730 60608\nf 59729 60608 60607\nf 59730 59731 60609\nf 59730 60609 60608\nf 59731 59732 60610\nf 59731 60610 60609\nf 59732 59733 60611\nf 59732 60611 60610\nf 59733 59734 60612\nf 59733 60612 60611\nf 59734 59735 60613\nf 59734 60613 60612\nf 59735 59736 60614\nf 59735 60614 60613\nf 59736 59737 60615\nf 59736 60615 60614\nf 59737 59738 60616\nf 59737 60616 60615\nf 59738 59739 60617\nf 59738 60617 60616\nf 59739 59740 60618\nf 59739 60618 60617\nf 59740 59741 60619\nf 59740 60619 60618\nf 59741 59742 60620\nf 59741 60620 60619\nf 59742 59743 60621\nf 59742 60621 60620\nf 59743 59744 60622\nf 59743 60622 60621\nf 59744 59745 60623\nf 59744 60623 60622\nf 59745 59746 60624\nf 59745 60624 60623\nf 59746 59747 60625\nf 59746 60625 60624\nf 59747 59748 60626\nf 59747 60626 60625\nf 59748 59749 60627\nf 59748 60627 60626\nf 59749 59750 60628\nf 59749 60628 60627\nf 59750 59751 60629\nf 59750 60629 60628\nf 59751 59752 60630\nf 59751 60630 60629\nf 59752 59753 60631\nf 59752 60631 60630\nf 59753 59754 60632\nf 59753 60632 60631\nf 59754 59755 60633\nf 59754 60633 60632\nf 59755 59756 60634\nf 59755 60634 60633\nf 59756 59757 60635\nf 59756 60635 60634\nf 59757 59758 60636\nf 59757 60636 60635\nf 59758 59759 60637\nf 59758 60637 60636\nf 59759 59760 60638\nf 59759 60638 60637\nf 59760 59761 60639\nf 59760 60639 60638\nf 59761 59762 60640\nf 59761 60640 60639\nf 59762 59763 60641\nf 59762 60641 60640\nf 59763 59764 60642\nf 59763 60642 60641\nf 59764 59765 60643\nf 59764 60643 60642\nf 59765 59766 60644\nf 59765 60644 60643\nf 59766 59767 60645\nf 59766 60645 60644\nf 59767 59768 60646\nf 59767 60646 60645\nf 59768 59769 60647\nf 59768 60647 60646\nf 59769 59770 60648\nf 59769 60648 60647\nf 59770 59771 60649\nf 59770 60649 60648\nf 59771 59772 60650\nf 59771 60650 60649\nf 59772 59773 60651\nf 59772 60651 60650\nf 59773 59774 60652\nf 59773 60652 60651\nf 59774 59775 60653\nf 59774 60653 60652\nf 59775 59776 60654\nf 59775 60654 60653\nf 59776 59777 60655\nf 59776 60655 60654\nf 59777 59778 60656\nf 59777 60656 60655\nf 59778 59779 60657\nf 59778 60657 60656\nf 59779 59780 60658\nf 59779 60658 60657\nf 59780 59781 60659\nf 59780 60659 60658\nf 59781 59782 60660\nf 59781 60660 60659\nf 59782 59783 60661\nf 59782 60661 60660\nf 59783 59784 60662\nf 59783 60662 60661\nf 59784 59785 60663\nf 59784 60663 60662\nf 59785 59786 60664\nf 59785 60664 60663\nf 59786 59788 60665\nf 59786 60665 60664\nf 59787 60666 59788\nf 59788 60666 60667\nf 59788 60667 60665\nf 59789 59792 60672\nf 59789 60672 60669\nf 59790 59791 60671\nf 59790 60671 60673\nf 59790 60673 59793\nf 59791 60670 60671\nf 59792 59794 60675\nf 59792 60675 60672\nf 59793 60673 59796\nf 59794 59795 60675\nf 59795 59797 60679\nf 59795 60676 60675\nf 59795 60679 60676\nf 59796 60673 60677\nf 59796 60677 59799\nf 59797 59798 60679\nf 59798 59801 60682\nf 59798 60680 60679\nf 59798 60682 60680\nf 59799 59804 59800\nf 59799 60677 60681\nf 59799 60681 60684\nf 59799 60684 59804\nf 59800 59804 59803\nf 59801 59802 60682\nf 59802 59815 60695\nf 59802 60683 60682\nf 59802 60695 60683\nf 59803 59804 59818\nf 59803 59818 59817\nf 59804 60684 59818\nf 59805 59896 60773\nf 59805 60685 60686\nf 59805 60686 59806\nf 59805 60773 60685\nf 59806 60686 60687\nf 59806 60687 59807\nf 59807 60687 60688\nf 59807 60688 59808\nf 59808 60688 60689\nf 59808 60689 59809\nf 59809 60689 60690\nf 59809 60690 59810\nf 59810 60690 60691\nf 59810 60691 59811\nf 59811 60691 60692\nf 59811 60692 59812\nf 59812 60692 60693\nf 59812 60693 59813\nf 59813 60693 60694\nf 59813 60694 59814\nf 59814 60694 60696\nf 59814 60696 59816\nf 59815 59816 60695\nf 59816 60696 60695\nf 59817 59818 59899\nf 59817 59899 59819\nf 59818 59898 59899\nf 59818 60684 60697\nf 59818 60697 59898\nf 59819 59899 59900\nf 59819 59900 59820\nf 59820 59900 60778\nf 59820 60698 59821\nf 59820 60778 60698\nf 59821 60698 59901\nf 59822 59905 60784\nf 59822 60699 60700\nf 59822 60700 59823\nf 59822 60784 60699\nf 59823 60700 60701\nf 59823 60701 59824\nf 59824 60701 60702\nf 59824 60702 59825\nf 59825 60702 60703\nf 59825 60703 59826\nf 59826 60703 60704\nf 59826 60704 59827\nf 59827 60704 60705\nf 59827 60705 59828\nf 59828 60705 60706\nf 59828 60706 59829\nf 59829 60706 60707\nf 59829 60707 59830\nf 59830 60707 60708\nf 59830 60708 59831\nf 59831 60708 60709\nf 59831 60709 59832\nf 59832 60709 60710\nf 59832 60710 59833\nf 59833 60710 60711\nf 59833 60711 59834\nf 59834 60711 60712\nf 59834 60712 59835\nf 59835 60712 60713\nf 59835 60713 59836\nf 59836 60713 60714\nf 59836 60714 59837\nf 59837 60714 60715\nf 59837 60715 59838\nf 59838 60715 60716\nf 59838 60716 59839\nf 59839 60716 60717\nf 59839 60717 59840\nf 59840 60717 60718\nf 59840 60718 59841\nf 59841 60718 60719\nf 59841 60719 59842\nf 59842 60719 60720\nf 59842 60720 59843\nf 59843 60720 60721\nf 59843 60721 59844\nf 59844 60721 60722\nf 59844 60722 59845\nf 59845 60722 60723\nf 59845 60723 59846\nf 59846 60723 60724\nf 59846 60724 59847\nf 59847 60724 60725\nf 59847 60725 59848\nf 59848 60725 60726\nf 59848 60726 59849\nf 59849 60726 60727\nf 59849 60727 59850\nf 59850 60727 60728\nf 59850 60728 59851\nf 59851 60728 60729\nf 59851 60729 59852\nf 59852 60729 60730\nf 59852 60730 59853\nf 59853 60730 60731\nf 59853 60731 59854\nf 59854 60731 60732\nf 59854 60732 59855\nf 59855 60732 60733\nf 59855 60733 59856\nf 59856 60733 60734\nf 59856 60734 59857\nf 59857 60734 60735\nf 59857 60735 59858\nf 59858 60735 60736\nf 59858 60736 59859\nf 59859 60736 60737\nf 59859 60737 59860\nf 59860 60737 60738\nf 59860 60738 59861\nf 59861 60738 60739\nf 59861 60739 59862\nf 59862 60739 60740\nf 59862 60740 59863\nf 59863 60740 60741\nf 59863 60741 59864\nf 59864 60741 60742\nf 59864 60742 59865\nf 59865 60742 60743\nf 59865 60743 59866\nf 59866 60743 60744\nf 59866 60744 59867\nf 59867 60744 60745\nf 59867 60745 59868\nf 59868 60745 60746\nf 59868 60746 59869\nf 59869 60746 60747\nf 59869 60747 59870\nf 59870 60747 60748\nf 59870 60748 59871\nf 59871 60748 60749\nf 59871 60749 59872\nf 59872 60749 60750\nf 59872 60750 59873\nf 59873 60750 60751\nf 59873 60751 59874\nf 59874 60751 60752\nf 59874 60752 59875\nf 59875 60752 60753\nf 59875 60753 59876\nf 59876 60753 60754\nf 59876 60754 59877\nf 59877 60754 60755\nf 59877 60755 59878\nf 59878 60755 60756\nf 59878 60756 59879\nf 59879 60756 60757\nf 59879 60757 59880\nf 59880 60757 60758\nf 59880 60758 59881\nf 59881 60758 60759\nf 59881 60759 59882\nf 59882 60759 60760\nf 59882 60760 59883\nf 59883 60760 60761\nf 59883 60761 59884\nf 59884 60761 60762\nf 59884 60762 59885\nf 59885 60762 60763\nf 59885 60763 59886\nf 59886 60763 60764\nf 59886 60764 59887\nf 59887 60764 60765\nf 59887 60765 59888\nf 59888 60765 60766\nf 59888 60766 59889\nf 59889 60766 60767\nf 59889 60767 59890\nf 59890 60767 60768\nf 59890 60768 59891\nf 59891 60768 60769\nf 59891 60769 59892\nf 59892 60769 60770\nf 59892 60770 59893\nf 59893 60770 60771\nf 59893 60771 59894\nf 59894 60771 60772\nf 59894 60772 59895\nf 59895 60772 60774\nf 59895 60774 59897\nf 59896 59897 60773\nf 59897 60774 60773\nf 59898 60697 60775\nf 59898 60775 60776\nf 59898 60776 59899\nf 59899 60776 60777\nf 59899 60777 59900\nf 59900 60777 60779\nf 59900 60779 60778\nf 59901 59908 59902\nf 59901 60698 60780\nf 59901 60780 60789\nf 59901 60789 59908\nf 59902 59908 59907\nf 59903 59909 60792\nf 59903 60782 60783\nf 59903 60783 59904\nf 59903 60792 60782\nf 59904 60783 60785\nf 59904 60785 59906\nf 59905 59906 60784\nf 59906 60785 60784\nf 59907 59908 60791\nf 59907 60791 60798\nf 59907 60798 59911\nf 59908 60789 60791\nf 59909 59910 60800\nf 59909 60800 60792\nf 59910 59913 59915\nf 59910 59915 60800\nf 59911 60798 59916\nf 59912 59917 59919\nf 59912 59919 59921\nf 59912 59921 59914\nf 59913 59914 59915\nf 59914 59921 59915\nf 59915 59921 60801\nf 59915 60801 60800\nf 59916 60798 60806\nf 59916 60806 59922\nf 59917 59918 59919\nf 59918 59920 59919\nf 59919 59920 59921\nf 59920 59925 59921\nf 59921 59925 60809\nf 59921 60809 60801\nf 59922 59924 59923\nf 59922 60806 59924\nf 59923 59924 60813\nf 59923 60813 60814\nf 59923 60814 59926\nf 59924 60806 60807\nf 59924 60807 60813\nf 59925 59928 60821\nf 59925 60816 60809\nf 59925 60821 60816\nf 59926 59927 59931\nf 59926 59931 59929\nf 59926 60814 59927\nf 59927 60814 60819\nf 59927 60819 59931\nf 59928 59932 60827\nf 59928 60827 60821\nf 59929 59931 59930\nf 59930 59931 60825\nf 59930 60825 59933\nf 59931 60819 60825\nf 59932 59934 60834\nf 59932 60834 60827\nf 59933 60825 60831\nf 59933 60831 59935\nf 59934 59938 60839\nf 59934 60839 60834\nf 59935 59937 59936\nf 59935 60831 59937\nf 59936 59937 60837\nf 59936 60837 59939\nf 59937 60831 60832\nf 59937 60832 60837\nf 59938 59940 60839\nf 59939 60837 60843\nf 59939 60843 59942\nf 59940 59941 60840\nf 59940 59943 60850\nf 59940 60840 60839\nf 59940 60850 59941\nf 59941 60845 60840\nf 59941 60846 60845\nf 59941 60850 60846\nf 59942 60843 60848\nf 59942 60848 59944\nf 59943 59945 60855\nf 59943 60855 60850\nf 59944 60848 60853\nf 59944 60853 59946\nf 59945 59947 60861\nf 59945 60861 60855\nf 59946 60853 60858\nf 59946 60858 59948\nf 59947 59951 60865\nf 59947 60865 60861\nf 59948 59950 59949\nf 59948 60858 59950\nf 59949 59950 60863\nf 59949 60863 59952\nf 59950 60858 60859\nf 59950 60859 60863\nf 59951 59953 60870\nf 59951 60870 60865\nf 59952 60863 60867\nf 59952 60867 59954\nf 59953 59956 60873\nf 59953 60873 60870\nf 59954 59955 59959\nf 59954 59959 59957\nf 59954 60867 59955\nf 59955 60867 60868\nf 59955 60868 60871\nf 59955 60871 59959\nf 59956 59960 60876\nf 59956 60876 60873\nf 59957 59959 59958\nf 59958 59959 60874\nf 59958 60874 59961\nf 59959 60871 60874\nf 59960 59962 60879\nf 59960 60879 60876\nf 59961 60874 60877\nf 59961 60877 59963\nf 59962 59964 60882\nf 59962 60882 60879\nf 59963 60877 60880\nf 59963 60880 59965\nf 59964 59966 60885\nf 59964 60885 60882\nf 59965 60880 60883\nf 59965 60883 59967\nf 59966 59968 60889\nf 59966 60889 60885\nf 59967 60883 60887\nf 59967 60887 59969\nf 59968 59970 60893\nf 59968 60893 60889\nf 59969 60887 60891\nf 59969 60891 59971\nf 59970 59972 60896\nf 59970 60896 60893\nf 59971 60891 60894\nf 59971 60894 59973\nf 59972 59974 60898\nf 59972 60898 60896\nf 59973 60894 60897\nf 59973 60897 59975\nf 59974 59976 60900\nf 59974 60900 60898\nf 59975 60897 60899\nf 59975 60899 59978\nf 59976 59977 60902\nf 59976 60902 60900\nf 59977 59980 59981\nf 59977 59981 60902\nf 59978 59983 59979\nf 59978 60899 60901\nf 59978 60901 60904\nf 59978 60904 59983\nf 59979 59983 59982\nf 59980 59984 60906\nf 59980 60906 59981\nf 59981 60903 60902\nf 59981 60906 60903\nf 59982 59983 60905\nf 59982 60905 60908\nf 59982 60908 59985\nf 59983 60904 60905\nf 59984 59986 60910\nf 59984 60910 60906\nf 59985 60908 59987\nf 59986 59988 60914\nf 59986 60914 60910\nf 59987 60908 60912\nf 59987 60912 59990\nf 59988 59989 60918\nf 59988 60918 60914\nf 59989 59991 59992\nf 59989 59992 60918\nf 59990 60912 60916\nf 59990 60916 59993\nf 59991 59994 59992\nf 59992 59994 59995\nf 59992 59995 60921\nf 59992 60921 60918\nf 59993 60916 60919\nf 59993 60919 59996\nf 59994 59997 59995\nf 59995 59997 59998\nf 59995 59998 60924\nf 59995 60924 60921\nf 59996 60919 60922\nf 59996 60922 59999\nf 59997 60001 60928\nf 59997 60928 59998\nf 59998 60925 60924\nf 59998 60928 60925\nf 59999 60003 60000\nf 59999 60922 60926\nf 59999 60926 60930\nf 59999 60930 60003\nf 60000 60003 60002\nf 60001 60004 60932\nf 60001 60932 60928\nf 60002 60003 60006\nf 60002 60006 60005\nf 60003 60930 60006\nf 60004 60007 60936\nf 60004 60936 60932\nf 60005 60006 60009\nf 60005 60009 60008\nf 60006 60930 60934\nf 60006 60934 60009\nf 60007 60010 60940\nf 60007 60940 60936\nf 60008 60009 60012\nf 60008 60012 60011\nf 60009 60934 60938\nf 60009 60938 60012\nf 60010 60013 60944\nf 60010 60944 60940\nf 60011 60012 60016\nf 60011 60016 60015\nf 60012 60938 60942\nf 60012 60942 60016\nf 60013 60014 60949\nf 60013 60949 60944\nf 60014 60017 60018\nf 60014 60018 60949\nf 60015 60016 60948\nf 60015 60948 60951\nf 60015 60951 60019\nf 60016 60942 60946\nf 60016 60946 60948\nf 60017 60020 60018\nf 60018 60020 60021\nf 60018 60021 60953\nf 60018 60953 60949\nf 60019 60951 60022\nf 60020 60024 60021\nf 60021 60024 60026\nf 60021 60026 60956\nf 60021 60956 60953\nf 60022 60028 60023\nf 60022 60951 60954\nf 60022 60954 60959\nf 60022 60959 60028\nf 60023 60028 60027\nf 60024 60025 60026\nf 60025 60029 60030\nf 60025 60030 60026\nf 60026 60030 60957\nf 60026 60957 60956\nf 60027 60028 60033\nf 60027 60033 60031\nf 60028 60959 60033\nf 60029 60034 60030\nf 60030 60034 60035\nf 60030 60035 60966\nf 60030 60961 60957\nf 60030 60966 60961\nf 60031 60033 60032\nf 60032 60033 60964\nf 60032 60964 60036\nf 60033 60959 60964\nf 60034 60037 60035\nf 60035 60037 60038\nf 60035 60038 60971\nf 60035 60971 60966\nf 60036 60964 60969\nf 60036 60969 60039\nf 60037 60040 60038\nf 60038 60040 60041\nf 60038 60041 60976\nf 60038 60976 60971\nf 60039 60969 60974\nf 60039 60974 60042\nf 60040 60043 60041\nf 60041 60043 60044\nf 60041 60044 60981\nf 60041 60981 60976\nf 60042 60974 60979\nf 60042 60979 60045\nf 60043 60046 60044\nf 60044 60046 60047\nf 60044 60047 60986\nf 60044 60986 60981\nf 60045 60979 60984\nf 60045 60984 60048\nf 60046 60049 60047\nf 60047 60049 60050\nf 60047 60050 60991\nf 60047 60991 60986\nf 60048 60984 60989\nf 60048 60989 60051\nf 60049 60052 60050\nf 60050 60052 60053\nf 60050 60053 60996\nf 60050 60996 60991\nf 60051 60989 60994\nf 60051 60994 60054\nf 60052 60055 60053\nf 60053 60055 60056\nf 60053 60056 61001\nf 60053 61001 60996\nf 60054 60994 60999\nf 60054 60999 60057\nf 60055 60058 60056\nf 60056 60058 60059\nf 60056 60059 61006\nf 60056 61006 61001\nf 60057 60999 61004\nf 60057 61004 60060\nf 60058 60061 60059\nf 60059 60061 60062\nf 60059 60062 61012\nf 60059 61012 61006\nf 60060 61004 61009\nf 60060 61009 60063\nf 60061 60065 60062\nf 60062 60065 60066\nf 60062 60066 61016\nf 60062 61016 61012\nf 60063 60064 60068\nf 60063 60068 60067\nf 60063 61009 60064\nf 60064 61009 61010\nf 60064 61010 61014\nf 60064 61014 60068\nf 60065 60069 60066\nf 60066 60069 60070\nf 60066 60070 61019\nf 60066 61019 61016\nf 60067 60068 60072\nf 60067 60072 60071\nf 60068 61014 61017\nf 60068 61017 60072\nf 60069 60073 60070\nf 60070 60073 60074\nf 60070 60074 61022\nf 60070 61022 61019\nf 60071 60072 60076\nf 60071 60076 60075\nf 60072 61017 61020\nf 60072 61020 60076\nf 60073 60077 60074\nf 60074 60077 60078\nf 60074 60078 61026\nf 60074 61026 61022\nf 60075 60076 60080\nf 60075 60080 60079\nf 60076 61020 61024\nf 60076 61024 60080\nf 60077 60081 61031\nf 60077 61031 60078\nf 60078 61027 61026\nf 60078 61031 61027\nf 60079 60080 60084\nf 60079 60084 60082\nf 60080 61024 61029\nf 60080 61029 60084\nf 60081 60085 61036\nf 60081 61036 61031\nf 60082 60084 60083\nf 60083 60084 61034\nf 60083 61034 60086\nf 60084 61029 61034\nf 60085 60087 61041\nf 60085 61041 61036\nf 60086 61034 61039\nf 60086 61039 60088\nf 60087 60089 61047\nf 60087 61047 61041\nf 60088 61039 61044\nf 60088 61044 60090\nf 60089 60092 61051\nf 60089 61051 61047\nf 60090 60091 60096\nf 60090 60096 60094\nf 60090 61044 60091\nf 60091 61044 61045\nf 60091 61045 61049\nf 60091 61049 60096\nf 60092 60093 61055\nf 60092 61055 61051\nf 60093 60097 60098\nf 60093 60098 61055\nf 60094 60096 60095\nf 60095 60096 61053\nf 60095 61053 60099\nf 60096 61049 61053\nf 60097 60100 60098\nf 60098 60100 60101\nf 60098 60101 61059\nf 60098 61059 61055\nf 60099 61053 61057\nf 60099 61057 60102\nf 60100 60103 60101\nf 60101 60103 60104\nf 60101 60104 61064\nf 60101 61064 61059\nf 60102 61057 61061\nf 60102 61061 60105\nf 60103 60108 60104\nf 60104 60108 60109\nf 60104 60109 61068\nf 60104 61068 61064\nf 60105 60107 60106\nf 60105 61061 60107\nf 60106 60107 61066\nf 60106 61066 60110\nf 60107 61061 61062\nf 60107 61062 61066\nf 60108 60111 60109\nf 60109 60111 60112\nf 60109 60112 61072\nf 60109 61072 61068\nf 60110 61066 61070\nf 60110 61070 60113\nf 60111 60114 60112\nf 60112 60114 60115\nf 60112 60115 61076\nf 60112 61076 61072\nf 60113 61070 61074\nf 60113 61074 60116\nf 60114 60117 60115\nf 60115 60117 60118\nf 60115 60118 61080\nf 60115 61080 61076\nf 60116 61074 61078\nf 60116 61078 60119\nf 60117 60120 60118\nf 60118 60120 60121\nf 60118 60121 61085\nf 60118 61085 61080\nf 60119 61078 61082\nf 60119 61082 60122\nf 60120 60125 60121\nf 60121 60125 60126\nf 60121 60126 61088\nf 60121 61088 61085\nf 60122 60124 60123\nf 60122 61082 60124\nf 60123 60124 61087\nf 60123 61087 60127\nf 60124 61082 61083\nf 60124 61083 61087\nf 60125 60128 60126\nf 60126 60128 60130\nf 60126 60130 61092\nf 60126 61092 61088\nf 60127 61087 61090\nf 60127 61090 60131\nf 60128 60129 60130\nf 60129 60132 60133\nf 60129 60133 61093\nf 60129 61093 60130\nf 60130 61093 61092\nf 60131 61090 61095\nf 60131 61095 60134\nf 60132 60137 60133\nf 60133 60137 60138\nf 60133 60138 61100\nf 60133 61098 61093\nf 60133 61100 61098\nf 60134 60136 60135\nf 60134 61095 60136\nf 60135 60136 61099\nf 60135 61099 60139\nf 60136 61095 61096\nf 60136 61096 61099\nf 60137 60140 60138\nf 60138 60140 60141\nf 60138 60141 61103\nf 60138 61103 61100\nf 60139 61099 61101\nf 60139 61101 60142\nf 60140 60143 61107\nf 60140 61107 60141\nf 60141 61104 61103\nf 60141 61107 61104\nf 60142 61101 61105\nf 60142 61105 60144\nf 60143 60145 61112\nf 60143 61112 61107\nf 60144 61105 61109\nf 60144 61109 60146\nf 60145 60148 61115\nf 60145 61115 61112\nf 60146 60147 60150\nf 60146 60150 60149\nf 60146 61109 60147\nf 60147 61109 61110\nf 60147 61110 61114\nf 60147 61114 60150\nf 60148 60151 61118\nf 60148 61118 61115\nf 60149 60150 60153\nf 60149 60153 60152\nf 60150 61114 61117\nf 60150 61117 60153\nf 60151 60154 61120\nf 60151 61120 61118\nf 60152 60153 60156\nf 60152 60156 60155\nf 60153 61117 61119\nf 60153 61119 60156\nf 60154 60157 61122\nf 60154 61122 61120\nf 60155 60156 60159\nf 60155 60159 60158\nf 60156 61119 61121\nf 60156 61121 60159\nf 60157 60160 61124\nf 60157 61124 61122\nf 60158 60159 60162\nf 60158 60162 60161\nf 60159 61121 61123\nf 60159 61123 60162\nf 60160 60163 61126\nf 60160 61126 61124\nf 60161 60162 60166\nf 60161 60166 60165\nf 60162 61123 61125\nf 60162 61125 60166\nf 60163 60164 61128\nf 60163 61128 61126\nf 60164 60167 60168\nf 60164 60168 61128\nf 60165 60166 60170\nf 60165 60170 60169\nf 60166 61125 61127\nf 60166 61127 60170\nf 60167 60171 60168\nf 60168 60171 60172\nf 60168 60172 61130\nf 60168 61130 61128\nf 60169 60170 60174\nf 60169 60174 60173\nf 60170 61127 61129\nf 60170 61129 60174\nf 60171 60175 60172\nf 60172 60175 60176\nf 60172 60176 61133\nf 60172 61133 61130\nf 60173 60174 61132\nf 60173 61132 61135\nf 60173 61135 60177\nf 60174 61129 61131\nf 60174 61131 61132\nf 60175 60178 61137\nf 60175 61137 60176\nf 60176 61134 61133\nf 60176 61137 61134\nf 60177 61135 60179\nf 60178 60180 61141\nf 60178 61141 61137\nf 60179 61135 61139\nf 60179 61139 60182\nf 60180 60181 61144\nf 60180 61144 61141\nf 60181 60183 60184\nf 60181 60184 61144\nf 60182 61139 61142\nf 60182 61142 60185\nf 60183 60186 61147\nf 60183 61147 60184\nf 60184 61145 61144\nf 60184 61147 61145\nf 60185 61142 61146\nf 60185 61146 60187\nf 60186 60188 61150\nf 60186 61150 61147\nf 60187 61146 61149\nf 60187 61149 60190\nf 60188 60189 61152\nf 60188 61152 61150\nf 60189 60191 60193\nf 60189 60193 61152\nf 60190 61149 61151\nf 60190 61151 60194\nf 60191 60192 60193\nf 60192 60195 60196\nf 60192 60196 60193\nf 60193 60196 61153\nf 60193 61153 61152\nf 60194 61151 61154\nf 60194 61154 60197\nf 60195 60198 60196\nf 60196 60198 60199\nf 60196 60199 61160\nf 60196 61156 61153\nf 60196 61160 61156\nf 60197 61154 61158\nf 60197 61158 60200\nf 60198 60201 61165\nf 60198 61165 60199\nf 60199 61161 61160\nf 60199 61165 61161\nf 60200 61158 61162\nf 60200 61162 60203\nf 60201 60202 61168\nf 60201 61168 61165\nf 60202 60205 60207\nf 60202 60207 61168\nf 60203 60204 60210\nf 60203 60210 60208\nf 60203 61162 60204\nf 60204 61162 61163\nf 60204 61163 61167\nf 60204 61167 60210\nf 60205 60206 60207\nf 60206 60211 60212\nf 60206 60212 60207\nf 60207 60212 61169\nf 60207 61169 61168\nf 60208 60210 60209\nf 60209 60210 61170\nf 60209 61170 60213\nf 60210 61167 61170\nf 60211 60215 61175\nf 60211 61175 60212\nf 60212 61171 61169\nf 60212 61172 61171\nf 60212 61175 61172\nf 60213 60218 60214\nf 60213 61170 61174\nf 60213 61174 61177\nf 60213 61177 60218\nf 60214 60218 60217\nf 60215 60216 61180\nf 60215 61180 61175\nf 60216 60219 60221\nf 60216 60221 61180\nf 60217 60218 61178\nf 60217 61178 60220\nf 60218 61177 61178\nf 60219 60220 60221\nf 60220 61178 61179\nf 60220 61179 61181\nf 60220 61181 60221\nf 60221 61181 61180\nf 60222 60223 61221\nf 60222 60227 60228\nf 60222 60228 60229\nf 60222 60229 60223\nf 60222 61219 61244\nf 60222 61221 61219\nf 60222 61244 60227\nf 60223 60224 61223\nf 60223 60229 60230\nf 60223 60230 60224\nf 60223 61223 61221\nf 60224 60225 61225\nf 60224 60230 60231\nf 60224 60231 60225\nf 60224 61225 61223\nf 60225 60231 60232\nf 60225 60232 61248\nf 60225 61247 61225\nf 60225 61248 61247\nf 60226 60227 61245\nf 60226 60233 60234\nf 60226 60234 60227\nf 60226 61242 61264\nf 60226 61245 61242\nf 60226 61264 60233\nf 60227 60234 60235\nf 60227 60235 60228\nf 60227 61244 61245\nf 60228 60235 60229\nf 60229 60235 61284\nf 60229 60236 60230\nf 60229 61266 60236\nf 60229 61284 61266\nf 60230 60236 60237\nf 60230 60237 60231\nf 60231 60237 60238\nf 60231 60238 60232\nf 60232 60238 61287\nf 60232 61267 61248\nf 60232 61287 61267\nf 60233 60239 60240\nf 60233 60240 60241\nf 60233 60241 60234\nf 60233 61264 61281\nf 60233 61281 60239\nf 60234 60241 60242\nf 60234 60242 60235\nf 60235 60242 61302\nf 60235 61302 61284\nf 60236 60243 60244\nf 60236 60244 60237\nf 60236 61266 61285\nf 60236 61285 60243\nf 60237 60244 60245\nf 60237 60245 60238\nf 60238 60245 61305\nf 60238 61305 61287\nf 60239 60246 60247\nf 60239 60247 60240\nf 60239 61281 61282\nf 60239 61282 61301\nf 60239 61301 60246\nf 60240 60247 60248\nf 60240 60248 60241\nf 60241 60248 60249\nf 60241 60249 60242\nf 60242 60249 61321\nf 60242 61321 61302\nf 60243 60250 60251\nf 60243 60251 60244\nf 60243 61285 61303\nf 60243 61303 60250\nf 60244 60251 60252\nf 60244 60252 60245\nf 60245 60252 61325\nf 60245 61325 61305\nf 60246 60253 60247\nf 60246 61301 61319\nf 60246 61319 61320\nf 60246 61320 60253\nf 60247 60253 60254\nf 60247 60254 60248\nf 60248 60254 60255\nf 60248 60255 60249\nf 60249 60255 61343\nf 60249 61343 61321\nf 60250 60256 60251\nf 60250 61303 61322\nf 60250 61322 61324\nf 60250 61324 60256\nf 60251 60256 60252\nf 60252 60256 61347\nf 60252 61326 61325\nf 60252 61347 61326\nf 60253 60257 60258\nf 60253 60258 60254\nf 60253 61320 61341\nf 60253 61341 60257\nf 60254 60258 60259\nf 60254 60259 60255\nf 60255 60259 61365\nf 60255 61365 61343\nf 60256 61324 61345\nf 60256 61345 61348\nf 60256 61348 61347\nf 60257 60260 60261\nf 60257 60261 60258\nf 60257 61341 61363\nf 60257 61363 60260\nf 60258 60261 60262\nf 60258 60262 60259\nf 60259 60262 60263\nf 60259 60263 61366\nf 60259 61366 61365\nf 60260 60264 60265\nf 60260 60265 60261\nf 60260 61363 61384\nf 60260 61384 60264\nf 60261 60265 60266\nf 60261 60266 60262\nf 60262 60266 60263\nf 60263 60266 61405\nf 60263 61386 61366\nf 60263 61387 61386\nf 60263 61405 61387\nf 60264 60267 60268\nf 60264 60268 60265\nf 60264 61384 61403\nf 60264 61403 60267\nf 60265 60268 60269\nf 60265 60269 60266\nf 60266 60269 61423\nf 60266 61423 61405\nf 60267 60270 60268\nf 60267 61403 61420\nf 60267 61420 61422\nf 60267 61422 60270\nf 60268 60270 60271\nf 60268 60271 60269\nf 60269 60271 61437\nf 60269 61437 61423\nf 60270 60272 60271\nf 60270 61422 61435\nf 60270 61435 60272\nf 60271 60272 61447\nf 60271 61438 61437\nf 60271 61447 61438\nf 60272 61435 61445\nf 60272 61445 61448\nf 60272 61448 61447\nf 60273 60274 61514\nf 60273 60284 60282\nf 60273 61513 60284\nf 60273 61514 61513\nf 60274 60275 61515\nf 60274 61515 61514\nf 60275 60276 61516\nf 60275 61516 61515\nf 60276 60277 61517\nf 60276 61517 61516\nf 60277 60285 61519\nf 60277 61518 61517\nf 60277 61519 61518\nf 60278 60279 61533\nf 60278 60280 60279\nf 60278 61533 61534\nf 60278 61534 60293\nf 60279 60280 60281\nf 60279 60281 61512\nf 60279 61511 61533\nf 60279 61512 61511\nf 60280 60283 60281\nf 60281 60283 60284\nf 60281 60284 61513\nf 60281 61513 61512\nf 60282 60284 60283\nf 60285 60286 60287\nf 60285 60287 61519\nf 60286 60288 61537\nf 60286 61537 60287\nf 60287 61536 61519\nf 60287 61537 61536\nf 60288 60289 61537\nf 60289 60290 61539\nf 60289 61539 61537\nf 60290 60296 61541\nf 60290 61540 61539\nf 60290 61541 61540\nf 60291 60292 61531\nf 60291 60303 60304\nf 60291 60304 60307\nf 60291 60307 60292\nf 60291 61530 61558\nf 60291 61531 61530\nf 60291 61558 60303\nf 60292 60295 61534\nf 60292 60307 60295\nf 60292 61534 61531\nf 60293 60295 60294\nf 60293 61534 60295\nf 60294 60295 60307\nf 60294 60307 60305\nf 60296 60297 60298\nf 60296 60298 61541\nf 60297 60299 61562\nf 60297 61562 60298\nf 60298 61561 61541\nf 60298 61562 61561\nf 60299 60308 61564\nf 60299 61564 61562\nf 60300 60301 61550\nf 60300 60315 60316\nf 60300 60316 60317\nf 60300 60317 60301\nf 60300 61548 61572\nf 60300 61550 61548\nf 60300 61572 60315\nf 60301 60302 61552\nf 60301 60317 60318\nf 60301 60318 60302\nf 60301 61552 61550\nf 60302 60318 60319\nf 60302 60319 61576\nf 60302 61575 61552\nf 60302 61576 61575\nf 60303 60320 60321\nf 60303 60321 60324\nf 60303 60324 60304\nf 60303 61558 61559\nf 60303 61559 61583\nf 60303 61583 60320\nf 60304 60324 60307\nf 60305 60307 60306\nf 60306 60307 60324\nf 60306 60324 60322\nf 60308 60309 60310\nf 60308 60310 61564\nf 60309 60311 60310\nf 60310 60311 60312\nf 60310 60312 61565\nf 60310 61565 61564\nf 60311 60313 60312\nf 60312 60313 60314\nf 60312 60314 61566\nf 60312 61566 61565\nf 60313 60325 60327\nf 60313 60327 61587\nf 60313 61587 60314\nf 60314 61586 61566\nf 60314 61587 61586\nf 60315 60335 60336\nf 60315 60336 60337\nf 60315 60337 60316\nf 60315 61572 61573\nf 60315 61573 61606\nf 60315 61606 60335\nf 60316 60337 60338\nf 60316 60338 60317\nf 60317 60338 60339\nf 60317 60339 60318\nf 60318 60339 60340\nf 60318 60340 60319\nf 60319 60340 61641\nf 60319 61609 61576\nf 60319 61641 61609\nf 60320 60341 60342\nf 60320 60342 60344\nf 60320 60344 60321\nf 60320 61583 61584\nf 60320 61584 61618\nf 60320 61618 60341\nf 60321 60344 60324\nf 60322 60324 60323\nf 60323 60324 60344\nf 60323 60344 60343\nf 60325 60326 60327\nf 60326 60328 60327\nf 60327 60328 60329\nf 60327 60329 61589\nf 60327 61589 61587\nf 60328 60345 60329\nf 60329 60330 61591\nf 60329 60345 60347\nf 60329 60347 60330\nf 60329 61591 61589\nf 60330 60331 61593\nf 60330 60347 60349\nf 60330 60349 60331\nf 60330 61593 61591\nf 60331 60332 61595\nf 60331 60349 60351\nf 60331 60351 60332\nf 60331 61595 61593\nf 60332 60333 61597\nf 60332 60351 60352\nf 60332 60352 60333\nf 60332 61597 61595\nf 60333 60334 61599\nf 60333 60352 60353\nf 60333 60353 60334\nf 60333 61599 61597\nf 60334 60353 60354\nf 60334 60354 61622\nf 60334 61621 61599\nf 60334 61622 61621\nf 60335 60359 60360\nf 60335 60360 60336\nf 60335 61606 61607\nf 60335 61607 61639\nf 60335 61639 60359\nf 60336 60360 60361\nf 60336 60361 60337\nf 60337 60361 60362\nf 60337 60362 60338\nf 60338 60362 60363\nf 60338 60363 60339\nf 60339 60363 60364\nf 60339 60364 60340\nf 60340 60364 61675\nf 60340 61675 61641\nf 60341 60365 60366\nf 60341 60366 60342\nf 60341 61618 61619\nf 60341 61619 61650\nf 60341 61650 60365\nf 60342 60366 60368\nf 60342 60368 60344\nf 60343 60344 60368\nf 60343 60368 60367\nf 60345 60346 60347\nf 60346 60348 60347\nf 60347 60348 60349\nf 60348 60350 60349\nf 60349 60350 60351\nf 60350 60371 60351\nf 60351 60371 60373\nf 60351 60373 60352\nf 60352 60373 60374\nf 60352 60374 60353\nf 60353 60374 60375\nf 60353 60375 60354\nf 60354 60355 61624\nf 60354 60375 60376\nf 60354 60376 60355\nf 60354 61624 61622\nf 60355 60356 61626\nf 60355 60376 60377\nf 60355 60377 60356\nf 60355 61626 61624\nf 60356 60357 61628\nf 60356 60377 60378\nf 60356 60378 60357\nf 60356 61628 61626\nf 60357 60358 61630\nf 60357 60378 60379\nf 60357 60379 60358\nf 60357 61630 61628\nf 60358 60379 60380\nf 60358 60380 61653\nf 60358 61652 61630\nf 60358 61653 61652\nf 60359 61639 61668\nf 60359 61668 61670\nf 60359 61670 60360\nf 60360 61670 61671\nf 60360 61671 60361\nf 60361 61671 61672\nf 60361 61672 60362\nf 60362 61672 61673\nf 60362 61673 60363\nf 60363 61673 61674\nf 60363 61674 60364\nf 60364 61674 61676\nf 60364 61676 61675\nf 60365 61650 61683\nf 60365 61683 61685\nf 60365 61685 60366\nf 60366 60382 60368\nf 60366 61685 61686\nf 60366 61686 60382\nf 60367 60368 60383\nf 60367 60383 60369\nf 60368 60382 60383\nf 60369 60383 60385\nf 60369 60385 60370\nf 60370 60385 60384\nf 60371 60372 60373\nf 60372 60389 60391\nf 60372 60391 60373\nf 60373 60391 60392\nf 60373 60392 60393\nf 60373 60393 60374\nf 60374 60393 60394\nf 60374 60394 60375\nf 60375 60394 60395\nf 60375 60395 60376\nf 60376 60395 60396\nf 60376 60396 60377\nf 60377 60396 60397\nf 60377 60397 60378\nf 60378 60397 60398\nf 60378 60398 60379\nf 60379 60398 60399\nf 60379 60399 60380\nf 60380 60381 61655\nf 60380 60399 60381\nf 60380 61655 61653\nf 60381 60399 61720\nf 60381 61687 61655\nf 60381 61688 61687\nf 60381 61720 61688\nf 60382 61686 61713\nf 60382 61713 61715\nf 60382 61715 60383\nf 60383 60400 60385\nf 60383 61715 61716\nf 60383 61716 60400\nf 60384 60385 60401\nf 60384 60401 60386\nf 60385 60400 60401\nf 60386 60401 60403\nf 60386 60403 60387\nf 60387 60403 60402\nf 60388 60408 60410\nf 60388 60410 60411\nf 60388 60411 60390\nf 60389 60390 60391\nf 60390 60411 60391\nf 60391 60411 60412\nf 60391 60412 60413\nf 60391 60413 60392\nf 60392 60413 60414\nf 60392 60414 60393\nf 60393 60414 60415\nf 60393 60415 60394\nf 60394 60415 60416\nf 60394 60416 60395\nf 60395 60416 60396\nf 60396 60416 61750\nf 60396 61717 60397\nf 60396 61750 61717\nf 60397 61717 61718\nf 60397 61718 60398\nf 60398 61718 61719\nf 60398 61719 60399\nf 60399 61719 61721\nf 60399 61721 61720\nf 60400 61716 61742\nf 60400 61742 61744\nf 60400 61744 60401\nf 60401 60417 60403\nf 60401 61744 61745\nf 60401 61745 60417\nf 60402 60403 60418\nf 60402 60418 60404\nf 60403 60417 60418\nf 60404 60418 60420\nf 60404 60420 60405\nf 60405 60420 60419\nf 60406 60433 60435\nf 60406 60435 60436\nf 60406 60436 60407\nf 60407 60436 60437\nf 60407 60437 60409\nf 60408 60409 60410\nf 60409 60437 60410\nf 60410 60437 60438\nf 60410 60438 60439\nf 60410 60439 60411\nf 60411 60439 60412\nf 60412 60439 61793\nf 60412 61746 60413\nf 60412 61793 61746\nf 60413 61746 61747\nf 60413 61747 60414\nf 60414 61747 61748\nf 60414 61748 60415\nf 60415 61748 61749\nf 60415 61749 60416\nf 60416 61749 61751\nf 60416 61751 61750\nf 60417 61745 61771\nf 60417 61771 61773\nf 60417 61773 60418\nf 60418 61773 61774\nf 60418 61774 60420\nf 60419 60420 61775\nf 60419 61775 60421\nf 60420 61774 61775\nf 60421 61775 61776\nf 60421 61776 61777\nf 60421 61777 60422\nf 60422 61777 61778\nf 60422 61778 60423\nf 60423 61778 61779\nf 60423 61779 60424\nf 60424 61779 61780\nf 60424 61780 60425\nf 60425 61780 61781\nf 60425 61781 60426\nf 60426 61781 61782\nf 60426 61782 60427\nf 60427 61782 61783\nf 60427 61783 60428\nf 60428 61783 61784\nf 60428 61784 60429\nf 60429 61784 61785\nf 60429 61785 60430\nf 60430 61785 61786\nf 60430 61786 60431\nf 60431 61786 61787\nf 60431 61787 60432\nf 60432 61787 61788\nf 60432 61788 60434\nf 60433 60434 60435\nf 60434 61788 61789\nf 60434 61789 60435\nf 60435 61789 60436\nf 60436 61789 61790\nf 60436 61790 60437\nf 60437 61790 61791\nf 60437 61791 60438\nf 60438 61791 61792\nf 60438 61792 60439\nf 60439 61792 61794\nf 60439 61794 61793\nf 60440 60441 62271\nf 60440 60442 60443\nf 60440 60443 60441\nf 60440 62269 62291\nf 60440 62271 62269\nf 60440 62291 60442\nf 60441 60443 60444\nf 60441 60444 62294\nf 60441 62293 62271\nf 60441 62294 62293\nf 60442 60445 60446\nf 60442 60446 60443\nf 60442 62291 62313\nf 60442 62313 60445\nf 60443 60446 60447\nf 60443 60447 60444\nf 60444 60447 62335\nf 60444 62315 62294\nf 60444 62335 62315\nf 60445 60448 60449\nf 60445 60449 60446\nf 60445 62313 62333\nf 60445 62333 60448\nf 60446 60449 60450\nf 60446 60450 60447\nf 60447 60450 60451\nf 60447 60451 62336\nf 60447 62336 62335\nf 60448 60452 60453\nf 60448 60453 60449\nf 60448 62333 62354\nf 60448 62354 60452\nf 60449 60453 60454\nf 60449 60454 60450\nf 60450 60454 60455\nf 60450 60455 60451\nf 60451 60455 62377\nf 60451 62356 62336\nf 60451 62377 62356\nf 60452 60456 60453\nf 60452 62354 62374\nf 60452 62374 62376\nf 60452 62376 60456\nf 60453 60456 60457\nf 60453 60457 60454\nf 60454 60457 60455\nf 60455 60457 62400\nf 60455 62378 62377\nf 60455 62400 62378\nf 60456 62376 62397\nf 60456 62397 62399\nf 60456 62399 60457\nf 60457 62399 62401\nf 60457 62401 62400\nf 60458 60463 60464\nf 60458 60464 62642\nf 60458 62606 62624\nf 60458 62624 60463\nf 60458 62627 62606\nf 60458 62642 62627\nf 60459 60460 62616\nf 60459 60465 60466\nf 60459 60466 60467\nf 60459 60467 60460\nf 60459 62614 62633\nf 60459 62616 62614\nf 60459 62633 60465\nf 60460 60461 62618\nf 60460 60467 60468\nf 60460 60468 60461\nf 60460 62618 62616\nf 60461 60462 62620\nf 60461 60468 60469\nf 60461 60469 60462\nf 60461 62620 62618\nf 60462 60469 60470\nf 60462 60470 62637\nf 60462 62636 62620\nf 60462 62637 62636\nf 60463 60471 60473\nf 60463 60473 60475\nf 60463 60475 60464\nf 60463 62624 62625\nf 60463 62625 62639\nf 60463 62639 60471\nf 60464 60475 60477\nf 60464 60477 62643\nf 60464 62643 62642\nf 60465 60478 60480\nf 60465 60480 60482\nf 60465 60482 60466\nf 60465 62633 62634\nf 60465 62634 62649\nf 60465 62649 60478\nf 60466 60482 60484\nf 60466 60484 60467\nf 60467 60484 60486\nf 60467 60486 60468\nf 60468 60486 60488\nf 60468 60488 60469\nf 60469 60488 60490\nf 60469 60490 60470\nf 60470 60490 62663\nf 60470 62652 62637\nf 60470 62663 62652\nf 60471 60493 60473\nf 60471 62639 62640\nf 60471 62640 62653\nf 60471 62653 60493\nf 60472 60473 60493\nf 60472 60474 60473\nf 60472 60493 60491\nf 60473 60474 60475\nf 60474 60476 60475\nf 60475 60476 60477\nf 60476 60494 60496\nf 60476 60496 62655\nf 60476 62655 60477\nf 60477 62654 62643\nf 60477 62655 62654\nf 60478 60498 60501\nf 60478 60501 60480\nf 60478 62649 62650\nf 60478 62650 62660\nf 60478 62660 60498\nf 60479 60480 60501\nf 60479 60481 60480\nf 60479 60501 60499\nf 60480 60481 60482\nf 60481 60483 60482\nf 60482 60483 60484\nf 60483 60485 60484\nf 60484 60485 60486\nf 60485 60487 60486\nf 60486 60487 60488\nf 60487 60489 60488\nf 60488 60489 60490\nf 60489 60502 60504\nf 60489 60504 62664\nf 60489 62664 60490\nf 60490 62664 62663\nf 60491 60493 60492\nf 60492 60493 62666\nf 60492 62666 60505\nf 60493 62653 62666\nf 60494 60495 60496\nf 60495 60506 60508\nf 60495 60508 62669\nf 60495 62669 60496\nf 60496 62668 62655\nf 60496 62669 62668\nf 60497 60498 62672\nf 60497 60500 60498\nf 60497 62672 62673\nf 60497 62673 60509\nf 60498 60500 60501\nf 60498 62660 62661\nf 60498 62661 62672\nf 60499 60501 60500\nf 60502 60503 60504\nf 60503 60511 60504\nf 60504 60511 62675\nf 60504 62675 62664\nf 60505 62666 62676\nf 60505 62676 60512\nf 60506 60507 60508\nf 60507 60513 60514\nf 60507 60514 62679\nf 60507 62679 60508\nf 60508 62678 62669\nf 60508 62679 62678\nf 60509 60510 60516\nf 60509 60516 60515\nf 60509 62673 60510\nf 60510 62673 62682\nf 60510 62682 60516\nf 60511 60517 62692\nf 60511 62684 62675\nf 60511 62692 62684\nf 60512 62676 62685\nf 60512 62685 60518\nf 60513 60519 60514\nf 60514 60519 60521\nf 60514 60521 62695\nf 60514 62687 62679\nf 60514 62695 62687\nf 60515 60516 60524\nf 60515 60524 60523\nf 60516 60522 60524\nf 60516 62682 62689\nf 60516 62689 60522\nf 60517 60525 62698\nf 60517 62698 62692\nf 60518 62685 62693\nf 60518 62693 60526\nf 60519 60520 60521\nf 60520 60527 60521\nf 60521 60527 62695\nf 60522 60528 60531\nf 60522 60531 60524\nf 60522 62689 62690\nf 60522 62690 62696\nf 60522 62696 60528\nf 60523 60524 60531\nf 60523 60531 60529\nf 60525 60532 62704\nf 60525 62704 62698\nf 60526 62693 62699\nf 60526 62699 60533\nf 60527 60534 62708\nf 60527 62701 62695\nf 60527 62708 62701\nf 60528 60536 60531\nf 60528 62696 62702\nf 60528 62702 60536\nf 60529 60531 60530\nf 60530 60531 60536\nf 60530 60536 60535\nf 60532 60538 62712\nf 60532 62712 62704\nf 60533 62699 62705\nf 60533 62705 60539\nf 60534 60542 62714\nf 60534 62714 62708\nf 60535 60536 60545\nf 60535 60545 60537\nf 60536 60543 60545\nf 60536 62702 62710\nf 60536 62710 60543\nf 60537 60545 60544\nf 60538 60546 62719\nf 60538 62719 62712\nf 60539 60541 60540\nf 60539 62705 60541\nf 60540 60541 62713\nf 60540 62713 60547\nf 60541 62705 62706\nf 60541 62706 62713\nf 60542 60548 62714\nf 60543 60551 60553\nf 60543 60553 60545\nf 60543 62710 62717\nf 60543 62717 60551\nf 60544 60545 60553\nf 60544 60553 60552\nf 60546 60554 62724\nf 60546 62724 62719\nf 60547 62713 62720\nf 60547 62720 60555\nf 60548 60549 60550\nf 60548 60550 62715\nf 60548 62715 62714\nf 60549 60556 60550\nf 60550 60556 62721\nf 60550 62721 62715\nf 60551 60557 60559\nf 60551 60559 60553\nf 60551 62717 62722\nf 60551 62722 60557\nf 60552 60553 60559\nf 60552 60559 60558\nf 60554 60560 62731\nf 60554 62731 62724\nf 60555 62720 62725\nf 60555 62725 60562\nf 60556 60563 62726\nf 60556 62726 62721\nf 60557 60566 60569\nf 60557 60569 60559\nf 60557 62722 62729\nf 60557 62729 60566\nf 60558 60559 60569\nf 60558 60569 60567\nf 60560 60561 62731\nf 60561 60570 62737\nf 60561 62732 62731\nf 60561 62737 62732\nf 60562 62725 62733\nf 60562 62733 60571\nf 60563 60564 60565\nf 60563 60565 62727\nf 60563 62727 62726\nf 60564 60572 60565\nf 60565 60572 62734\nf 60565 62734 62727\nf 60566 60576 60569\nf 60566 62729 62735\nf 60566 62735 60576\nf 60567 60569 60568\nf 60568 60569 60576\nf 60568 60576 60574\nf 60570 60577 62746\nf 60570 62746 62737\nf 60571 62733 62739\nf 60571 62739 60578\nf 60572 60573 62741\nf 60572 62740 62734\nf 60572 62741 62740\nf 60573 60579 62741\nf 60574 60576 60575\nf 60575 60576 62743\nf 60575 62743 62744\nf 60575 62744 60582\nf 60576 62735 62743\nf 60577 60585 62756\nf 60577 62756 62746\nf 60578 62739 62748\nf 60578 62748 60586\nf 60579 60580 62750\nf 60579 62749 62741\nf 60579 62750 62749\nf 60580 60581 62750\nf 60581 60587 62752\nf 60581 62752 62750\nf 60582 60584 60583\nf 60582 62744 60584\nf 60583 60584 62753\nf 60583 62753 62754\nf 60583 62754 60666\nf 60584 62744 62753\nf 60585 60669 62841\nf 60585 62841 62756\nf 60586 62748 62758\nf 60586 62758 60670\nf 60587 60588 62760\nf 60587 62759 62752\nf 60587 62760 62759\nf 60588 60589 62760\nf 60589 60590 62762\nf 60589 62762 62760\nf 60590 60591 62763\nf 60590 62763 62762\nf 60591 60592 62764\nf 60591 62764 62763\nf 60592 60593 62765\nf 60592 62765 62764\nf 60593 60594 62766\nf 60593 62766 62765\nf 60594 60595 62767\nf 60594 62767 62766\nf 60595 60596 62768\nf 60595 62768 62767\nf 60596 60597 62769\nf 60596 62769 62768\nf 60597 60598 62770\nf 60597 62770 62769\nf 60598 60599 62771\nf 60598 62771 62770\nf 60599 60600 62772\nf 60599 62772 62771\nf 60600 60601 62773\nf 60600 62773 62772\nf 60601 60602 62774\nf 60601 62774 62773\nf 60602 60603 62775\nf 60602 62775 62774\nf 60603 60604 62776\nf 60603 62776 62775\nf 60604 60605 62777\nf 60604 62777 62776\nf 60605 60606 62778\nf 60605 62778 62777\nf 60606 60607 62779\nf 60606 62779 62778\nf 60607 60608 62780\nf 60607 62780 62779\nf 60608 60609 62781\nf 60608 62781 62780\nf 60609 60610 62782\nf 60609 62782 62781\nf 60610 60611 62783\nf 60610 62783 62782\nf 60611 60612 62784\nf 60611 62784 62783\nf 60612 60613 62785\nf 60612 62785 62784\nf 60613 60614 62786\nf 60613 62786 62785\nf 60614 60615 62787\nf 60614 62787 62786\nf 60615 60616 62788\nf 60615 62788 62787\nf 60616 60617 62789\nf 60616 62789 62788\nf 60617 60618 62790\nf 60617 62790 62789\nf 60618 60619 62791\nf 60618 62791 62790\nf 60619 60620 62792\nf 60619 62792 62791\nf 60620 60621 62793\nf 60620 62793 62792\nf 60621 60622 62794\nf 60621 62794 62793\nf 60622 60623 62795\nf 60622 62795 62794\nf 60623 60624 62796\nf 60623 62796 62795\nf 60624 60625 62797\nf 60624 62797 62796\nf 60625 60626 62798\nf 60625 62798 62797\nf 60626 60627 62799\nf 60626 62799 62798\nf 60627 60628 62800\nf 60627 62800 62799\nf 60628 60629 62801\nf 60628 62801 62800\nf 60629 60630 62802\nf 60629 62802 62801\nf 60630 60631 62803\nf 60630 62803 62802\nf 60631 60632 62804\nf 60631 62804 62803\nf 60632 60633 62805\nf 60632 62805 62804\nf 60633 60634 62806\nf 60633 62806 62805\nf 60634 60635 62807\nf 60634 62807 62806\nf 60635 60636 62808\nf 60635 62808 62807\nf 60636 60637 62809\nf 60636 62809 62808\nf 60637 60638 62810\nf 60637 62810 62809\nf 60638 60639 62811\nf 60638 62811 62810\nf 60639 60640 62812\nf 60639 62812 62811\nf 60640 60641 62813\nf 60640 62813 62812\nf 60641 60642 62814\nf 60641 62814 62813\nf 60642 60643 62815\nf 60642 62815 62814\nf 60643 60644 62816\nf 60643 62816 62815\nf 60644 60645 62817\nf 60644 62817 62816\nf 60645 60646 62818\nf 60645 62818 62817\nf 60646 60647 62819\nf 60646 62819 62818\nf 60647 60648 62820\nf 60647 62820 62819\nf 60648 60649 62821\nf 60648 62821 62820\nf 60649 60650 62822\nf 60649 62822 62821\nf 60650 60651 62823\nf 60650 62823 62822\nf 60651 60652 62824\nf 60651 62824 62823\nf 60652 60653 62825\nf 60652 62825 62824\nf 60653 60654 62826\nf 60653 62826 62825\nf 60654 60655 62827\nf 60654 62827 62826\nf 60655 60656 62828\nf 60655 62828 62827\nf 60656 60657 62829\nf 60656 62829 62828\nf 60657 60658 62830\nf 60657 62830 62829\nf 60658 60659 62831\nf 60658 62831 62830\nf 60659 60660 62832\nf 60659 62832 62831\nf 60660 60661 62833\nf 60660 62833 62832\nf 60661 60662 62834\nf 60661 62834 62833\nf 60662 60663 62835\nf 60662 62835 62834\nf 60663 60664 62836\nf 60663 62836 62835\nf 60664 60665 62837\nf 60664 62837 62836\nf 60665 60667 62839\nf 60665 62839 62837\nf 60666 60668 60667\nf 60666 62754 60668\nf 60667 60668 62838\nf 60667 62838 62839\nf 60668 62754 62838\nf 60669 60672 62844\nf 60669 62844 62841\nf 60670 60674 60671\nf 60670 62758 62843\nf 60670 62843 62845\nf 60670 62845 60674\nf 60671 60674 60673\nf 60672 60675 62846\nf 60672 62846 62844\nf 60673 60674 60678\nf 60673 60678 60677\nf 60674 62845 60678\nf 60675 60676 62846\nf 60676 60679 62850\nf 60676 62847 62846\nf 60676 62850 62847\nf 60677 60678 62849\nf 60677 62849 62852\nf 60677 62852 60681\nf 60678 62845 62848\nf 60678 62848 62849\nf 60679 60680 62850\nf 60680 60682 62854\nf 60680 62851 62850\nf 60680 62854 62851\nf 60681 62852 60684\nf 60682 60683 62854\nf 60683 60695 62867\nf 60683 62855 62854\nf 60683 62867 62855\nf 60684 62852 62856\nf 60684 62856 60697\nf 60685 60773 62944\nf 60685 62857 62858\nf 60685 62858 60686\nf 60685 62944 62857\nf 60686 62858 62859\nf 60686 62859 60687\nf 60687 62859 62860\nf 60687 62860 60688\nf 60688 62860 62861\nf 60688 62861 60689\nf 60689 62861 62862\nf 60689 62862 60690\nf 60690 62862 62863\nf 60690 62863 60691\nf 60691 62863 62864\nf 60691 62864 60692\nf 60692 62864 62865\nf 60692 62865 60693\nf 60693 62865 62866\nf 60693 62866 60694\nf 60694 62866 62868\nf 60694 62868 60696\nf 60695 60696 62867\nf 60696 62868 62867\nf 60697 62856 62869\nf 60697 62869 60775\nf 60698 60778 60781\nf 60698 60781 60780\nf 60699 60784 62949\nf 60699 62870 62871\nf 60699 62871 60700\nf 60699 62949 62870\nf 60700 62871 62872\nf 60700 62872 60701\nf 60701 62872 62873\nf 60701 62873 60702\nf 60702 62873 62874\nf 60702 62874 60703\nf 60703 62874 62875\nf 60703 62875 60704\nf 60704 62875 62876\nf 60704 62876 60705\nf 60705 62876 62877\nf 60705 62877 60706\nf 60706 62877 62878\nf 60706 62878 60707\nf 60707 62878 62879\nf 60707 62879 60708\nf 60708 62879 62880\nf 60708 62880 60709\nf 60709 62880 62881\nf 60709 62881 60710\nf 60710 62881 62882\nf 60710 62882 60711\nf 60711 62882 62883\nf 60711 62883 60712\nf 60712 62883 62884\nf 60712 62884 60713\nf 60713 62884 62885\nf 60713 62885 60714\nf 60714 62885 62886\nf 60714 62886 60715\nf 60715 62886 62887\nf 60715 62887 60716\nf 60716 62887 62888\nf 60716 62888 60717\nf 60717 62888 62889\nf 60717 62889 60718\nf 60718 62889 62890\nf 60718 62890 60719\nf 60719 62890 62891\nf 60719 62891 60720\nf 60720 62891 62892\nf 60720 62892 60721\nf 60721 62892 62893\nf 60721 62893 60722\nf 60722 62893 62894\nf 60722 62894 60723\nf 60723 62894 62895\nf 60723 62895 60724\nf 60724 62895 62896\nf 60724 62896 60725\nf 60725 62896 62897\nf 60725 62897 60726\nf 60726 62897 62898\nf 60726 62898 60727\nf 60727 62898 62899\nf 60727 62899 60728\nf 60728 62899 62900\nf 60728 62900 60729\nf 60729 62900 62901\nf 60729 62901 60730\nf 60730 62901 62902\nf 60730 62902 60731\nf 60731 62902 62903\nf 60731 62903 60732\nf 60732 62903 62904\nf 60732 62904 60733\nf 60733 62904 62905\nf 60733 62905 60734\nf 60734 62905 62906\nf 60734 62906 60735\nf 60735 62906 62907\nf 60735 62907 60736\nf 60736 62907 62908\nf 60736 62908 60737\nf 60737 62908 62909\nf 60737 62909 60738\nf 60738 62909 62910\nf 60738 62910 60739\nf 60739 62910 62911\nf 60739 62911 60740\nf 60740 62911 62912\nf 60740 62912 60741\nf 60741 62912 62913\nf 60741 62913 60742\nf 60742 62913 62914\nf 60742 62914 60743\nf 60743 62914 62915\nf 60743 62915 60744\nf 60744 62915 62916\nf 60744 62916 60745\nf 60745 62916 62917\nf 60745 62917 60746\nf 60746 62917 62918\nf 60746 62918 60747\nf 60747 62918 62919\nf 60747 62919 60748\nf 60748 62919 62920\nf 60748 62920 60749\nf 60749 62920 62921\nf 60749 62921 60750\nf 60750 62921 62922\nf 60750 62922 60751\nf 60751 62922 62923\nf 60751 62923 60752\nf 60752 62923 62924\nf 60752 62924 60753\nf 60753 62924 62925\nf 60753 62925 60754\nf 60754 62925 62926\nf 60754 62926 60755\nf 60755 62926 62927\nf 60755 62927 60756\nf 60756 62927 62928\nf 60756 62928 60757\nf 60757 62928 62929\nf 60757 62929 60758\nf 60758 62929 62930\nf 60758 62930 60759\nf 60759 62930 62931\nf 60759 62931 60760\nf 60760 62931 62932\nf 60760 62932 60761\nf 60761 62932 62933\nf 60761 62933 60762\nf 60762 62933 62934\nf 60762 62934 60763\nf 60763 62934 62935\nf 60763 62935 60764\nf 60764 62935 62936\nf 60764 62936 60765\nf 60765 62936 62937\nf 60765 62937 60766\nf 60766 62937 62938\nf 60766 62938 60767\nf 60767 62938 62939\nf 60767 62939 60768\nf 60768 62939 62940\nf 60768 62940 60769\nf 60769 62940 62941\nf 60769 62941 60770\nf 60770 62941 62942\nf 60770 62942 60771\nf 60771 62942 62943\nf 60771 62943 60772\nf 60772 62943 62945\nf 60772 62945 60774\nf 60773 60774 62944\nf 60774 62945 62944\nf 60775 60786 60776\nf 60775 62869 62947\nf 60775 62947 62952\nf 60775 62952 60786\nf 60776 60786 60787\nf 60776 60787 60777\nf 60777 60787 60788\nf 60777 60788 60779\nf 60778 60779 60781\nf 60779 60788 60781\nf 60780 60781 60790\nf 60780 60790 60789\nf 60781 60788 60790\nf 60782 60792 60793\nf 60782 60793 62953\nf 60782 62948 60783\nf 60782 62953 62948\nf 60783 62948 62950\nf 60783 62950 60785\nf 60784 60785 62949\nf 60785 62950 62949\nf 60786 60794 60795\nf 60786 60795 60787\nf 60786 62952 60794\nf 60787 60795 60796\nf 60787 60796 60788\nf 60788 60796 60797\nf 60788 60797 60790\nf 60789 60790 60799\nf 60789 60799 60791\nf 60790 60797 60799\nf 60791 60799 60798\nf 60792 60800 62957\nf 60792 62957 60793\nf 60793 62954 62953\nf 60793 62957 62954\nf 60794 60802 60803\nf 60794 60803 60795\nf 60794 62952 62956\nf 60794 62956 60802\nf 60795 60803 60804\nf 60795 60804 60796\nf 60796 60804 60805\nf 60796 60805 60797\nf 60797 60805 60808\nf 60797 60808 60799\nf 60798 60799 60808\nf 60798 60808 60806\nf 60800 60801 62957\nf 60801 60809 62960\nf 60801 62958 62957\nf 60801 62960 62958\nf 60802 60810 60811\nf 60802 60811 60803\nf 60802 62956 62959\nf 60802 62959 60810\nf 60803 60811 60812\nf 60803 60812 60804\nf 60804 60812 60815\nf 60804 60815 60805\nf 60805 60815 60808\nf 60806 60808 60807\nf 60807 60808 60815\nf 60807 60815 60813\nf 60809 60816 62963\nf 60809 62963 62960\nf 60810 60817 60818\nf 60810 60818 60811\nf 60810 62959 62962\nf 60810 62962 60817\nf 60811 60818 60820\nf 60811 60820 60812\nf 60812 60820 60815\nf 60813 60815 60814\nf 60814 60815 60820\nf 60814 60820 60819\nf 60816 60821 62963\nf 60817 60823 60824\nf 60817 60824 60818\nf 60817 62962 62966\nf 60817 62966 60823\nf 60818 60824 60826\nf 60818 60826 60820\nf 60819 60820 60826\nf 60819 60826 60825\nf 60821 60822 62964\nf 60821 60827 60822\nf 60821 62964 62963\nf 60822 60827 60828\nf 60822 60828 62969\nf 60822 62967 62964\nf 60822 62969 62967\nf 60823 60829 60830\nf 60823 60830 60824\nf 60823 62966 62968\nf 60823 62968 60829\nf 60824 60830 60833\nf 60824 60833 60826\nf 60825 60826 60833\nf 60825 60833 60831\nf 60827 60834 60828\nf 60828 60834 60835\nf 60828 60835 62972\nf 60828 62972 62969\nf 60829 60836 60838\nf 60829 60838 60830\nf 60829 62968 62970\nf 60829 62970 60836\nf 60830 60838 60833\nf 60831 60833 60832\nf 60832 60833 60838\nf 60832 60838 60837\nf 60834 60839 60835\nf 60835 60839 60841\nf 60835 60841 62975\nf 60835 62975 62972\nf 60836 60842 60844\nf 60836 60844 60838\nf 60836 62970 62973\nf 60836 62973 60842\nf 60837 60838 60844\nf 60837 60844 60843\nf 60839 60840 60841\nf 60840 60845 60841\nf 60841 60845 62975\nf 60842 60847 60849\nf 60842 60849 60844\nf 60842 62973 62976\nf 60842 62976 60847\nf 60843 60844 60849\nf 60843 60849 60848\nf 60845 60846 62981\nf 60845 62978 62975\nf 60845 62981 62978\nf 60846 60850 60851\nf 60846 60851 62981\nf 60847 60852 60854\nf 60847 60854 60849\nf 60847 62976 62979\nf 60847 62979 60852\nf 60848 60849 60854\nf 60848 60854 60853\nf 60850 60855 60851\nf 60851 60855 60856\nf 60851 60856 62984\nf 60851 62984 62981\nf 60852 60857 60860\nf 60852 60860 60854\nf 60852 62979 62982\nf 60852 62982 60857\nf 60853 60854 60860\nf 60853 60860 60858\nf 60855 60861 60856\nf 60856 60861 60862\nf 60856 60862 62987\nf 60856 62987 62984\nf 60857 60864 60860\nf 60857 62982 62985\nf 60857 62985 60864\nf 60858 60860 60859\nf 60859 60860 60864\nf 60859 60864 60863\nf 60861 60865 60862\nf 60862 60865 60866\nf 60862 60866 62990\nf 60862 62990 62987\nf 60863 60864 60869\nf 60863 60869 60867\nf 60864 62985 62988\nf 60864 62988 60869\nf 60865 60870 62995\nf 60865 62995 60866\nf 60866 62991 62990\nf 60866 62995 62991\nf 60867 60869 60868\nf 60868 60869 62992\nf 60868 62992 62993\nf 60868 62993 60871\nf 60869 62988 62992\nf 60870 60873 62998\nf 60870 62998 62995\nf 60871 60872 60875\nf 60871 60875 60874\nf 60871 62993 60872\nf 60872 62993 62997\nf 60872 62997 60875\nf 60873 60876 63001\nf 60873 63001 62998\nf 60874 60875 60878\nf 60874 60878 60877\nf 60875 62997 63000\nf 60875 63000 60878\nf 60876 60879 63004\nf 60876 63004 63001\nf 60877 60878 60881\nf 60877 60881 60880\nf 60878 63000 63003\nf 60878 63003 60881\nf 60879 60882 63007\nf 60879 63007 63004\nf 60880 60881 60884\nf 60880 60884 60883\nf 60881 63003 63006\nf 60881 63006 60884\nf 60882 60885 63007\nf 60883 60884 60888\nf 60883 60888 60887\nf 60884 63006 63010\nf 60884 63010 60888\nf 60885 60886 63008\nf 60885 60889 60886\nf 60885 63008 63007\nf 60886 60889 60890\nf 60886 60890 63015\nf 60886 63012 63008\nf 60886 63015 63012\nf 60887 60888 60892\nf 60887 60892 60891\nf 60888 63010 63013\nf 60888 63013 60892\nf 60889 60893 63018\nf 60889 63018 60890\nf 60890 63016 63015\nf 60890 63018 63016\nf 60891 60892 60895\nf 60891 60895 60894\nf 60892 63013 63017\nf 60892 63017 60895\nf 60893 60896 63022\nf 60893 63022 63018\nf 60894 60895 63021\nf 60894 63021 63024\nf 60894 63024 60897\nf 60895 63017 63020\nf 60895 63020 63021\nf 60896 60898 63026\nf 60896 63026 63022\nf 60897 63024 60899\nf 60898 60900 63030\nf 60898 63030 63026\nf 60899 63024 63028\nf 60899 63028 60901\nf 60900 60902 63033\nf 60900 63033 63030\nf 60901 63028 63031\nf 60901 63031 60904\nf 60902 60903 63036\nf 60902 63036 63033\nf 60903 60906 60907\nf 60903 60907 63036\nf 60904 60909 60905\nf 60904 63031 63034\nf 60904 63034 63037\nf 60904 63037 60909\nf 60905 60909 60908\nf 60906 60910 60907\nf 60907 60910 60911\nf 60907 60911 63039\nf 60907 63039 63036\nf 60908 60909 60913\nf 60908 60913 60912\nf 60909 63037 60913\nf 60910 60914 60911\nf 60911 60914 60915\nf 60911 60915 63042\nf 60911 63042 63039\nf 60912 60913 60917\nf 60912 60917 60916\nf 60913 63037 63040\nf 60913 63040 60917\nf 60914 60918 63046\nf 60914 63046 60915\nf 60915 63043 63042\nf 60915 63046 63043\nf 60916 60917 60920\nf 60916 60920 60919\nf 60917 63040 63044\nf 60917 63044 60920\nf 60918 60921 63050\nf 60918 63050 63046\nf 60919 60920 60923\nf 60919 60923 60922\nf 60920 63044 63048\nf 60920 63048 60923\nf 60921 60924 63054\nf 60921 63054 63050\nf 60922 60923 60927\nf 60922 60927 60926\nf 60923 63048 63052\nf 60923 63052 60927\nf 60924 60925 63058\nf 60924 63058 63054\nf 60925 60928 60929\nf 60925 60929 63058\nf 60926 60927 60931\nf 60926 60931 60930\nf 60927 63052 63056\nf 60927 63056 60931\nf 60928 60932 60929\nf 60929 60932 60933\nf 60929 60933 63062\nf 60929 63062 63058\nf 60930 60931 60935\nf 60930 60935 60934\nf 60931 63056 63060\nf 60931 63060 60935\nf 60932 60936 60933\nf 60933 60936 60937\nf 60933 60937 63065\nf 60933 63065 63062\nf 60934 60935 60939\nf 60934 60939 60938\nf 60935 63060 63063\nf 60935 63063 60939\nf 60936 60940 60937\nf 60937 60940 60941\nf 60937 60941 63068\nf 60937 63068 63065\nf 60938 60939 60943\nf 60938 60943 60942\nf 60939 63063 63066\nf 60939 63066 60943\nf 60940 60944 60941\nf 60941 60944 60945\nf 60941 60945 63071\nf 60941 63071 63068\nf 60942 60943 60947\nf 60942 60947 60946\nf 60943 63066 63069\nf 60943 63069 60947\nf 60944 60949 60945\nf 60945 60949 60950\nf 60945 60950 63075\nf 60945 63075 63071\nf 60946 60947 60948\nf 60947 63069 63072\nf 60947 63072 63074\nf 60947 63074 60948\nf 60948 60952 60951\nf 60948 63074 60952\nf 60949 60953 63080\nf 60949 63080 60950\nf 60950 63076 63075\nf 60950 63080 63076\nf 60951 60952 60955\nf 60951 60955 60954\nf 60952 63074 63078\nf 60952 63078 60955\nf 60953 60956 63086\nf 60953 63086 63080\nf 60954 60955 60960\nf 60954 60960 60959\nf 60955 60958 60960\nf 60955 63078 63083\nf 60955 63083 60958\nf 60956 60957 63090\nf 60956 63090 63086\nf 60957 60961 60962\nf 60957 60962 63090\nf 60958 60963 60965\nf 60958 60965 60960\nf 60958 63083 63084\nf 60958 63084 63088\nf 60958 63088 60963\nf 60959 60960 60965\nf 60959 60965 60964\nf 60961 60966 60962\nf 60962 60966 60967\nf 60962 60967 63094\nf 60962 63094 63090\nf 60963 60968 60970\nf 60963 60970 60965\nf 60963 63088 63092\nf 60963 63092 60968\nf 60964 60965 60970\nf 60964 60970 60969\nf 60966 60971 60967\nf 60967 60971 60972\nf 60967 60972 63098\nf 60967 63098 63094\nf 60968 60973 60975\nf 60968 60975 60970\nf 60968 63092 63096\nf 60968 63096 60973\nf 60969 60970 60975\nf 60969 60975 60974\nf 60971 60976 60972\nf 60972 60976 60977\nf 60972 60977 63102\nf 60972 63102 63098\nf 60973 60978 60980\nf 60973 60980 60975\nf 60973 63096 63100\nf 60973 63100 60978\nf 60974 60975 60980\nf 60974 60980 60979\nf 60976 60981 60977\nf 60977 60981 60982\nf 60977 60982 63106\nf 60977 63106 63102\nf 60978 60983 60985\nf 60978 60985 60980\nf 60978 63100 63104\nf 60978 63104 60983\nf 60979 60980 60985\nf 60979 60985 60984\nf 60981 60986 60982\nf 60982 60986 60987\nf 60982 60987 63110\nf 60982 63110 63106\nf 60983 60988 60990\nf 60983 60990 60985\nf 60983 63104 63108\nf 60983 63108 60988\nf 60984 60985 60990\nf 60984 60990 60989\nf 60986 60991 60987\nf 60987 60991 60992\nf 60987 60992 63114\nf 60987 63114 63110\nf 60988 60993 60995\nf 60988 60995 60990\nf 60988 63108 63112\nf 60988 63112 60993\nf 60989 60990 60995\nf 60989 60995 60994\nf 60991 60996 60992\nf 60992 60996 60997\nf 60992 60997 63118\nf 60992 63118 63114\nf 60993 60998 61000\nf 60993 61000 60995\nf 60993 63112 63116\nf 60993 63116 60998\nf 60994 60995 61000\nf 60994 61000 60999\nf 60996 61001 60997\nf 60997 61001 61002\nf 60997 61002 63122\nf 60997 63122 63118\nf 60998 61003 61005\nf 60998 61005 61000\nf 60998 63116 63120\nf 60998 63120 61003\nf 60999 61000 61005\nf 60999 61005 61004\nf 61001 61006 61002\nf 61002 61006 61007\nf 61002 61007 63127\nf 61002 63127 63122\nf 61003 61008 61011\nf 61003 61011 61005\nf 61003 63120 63125\nf 61003 63125 61008\nf 61004 61005 61011\nf 61004 61011 61009\nf 61006 61012 61007\nf 61007 61012 61013\nf 61007 61013 63131\nf 61007 63131 63127\nf 61008 61015 61011\nf 61008 63125 63129\nf 61008 63129 61015\nf 61009 61011 61010\nf 61010 61011 61015\nf 61010 61015 61014\nf 61012 61016 63136\nf 61012 63136 61013\nf 61013 63132 63131\nf 61013 63136 63132\nf 61014 61015 61018\nf 61014 61018 61017\nf 61015 63129 63134\nf 61015 63134 61018\nf 61016 61019 63140\nf 61016 63140 63136\nf 61017 61018 61021\nf 61017 61021 61020\nf 61018 63134 63138\nf 61018 63138 61021\nf 61019 61022 63145\nf 61019 63145 63140\nf 61020 61021 61025\nf 61020 61025 61024\nf 61021 61023 61025\nf 61021 63138 63142\nf 61021 63142 61023\nf 61022 61026 63149\nf 61022 63149 63145\nf 61023 61028 61030\nf 61023 61030 61025\nf 61023 63142 63143\nf 61023 63143 63147\nf 61023 63147 61028\nf 61024 61025 61030\nf 61024 61030 61029\nf 61026 61027 63153\nf 61026 63153 63149\nf 61027 61031 61032\nf 61027 61032 63153\nf 61028 61033 61035\nf 61028 61035 61030\nf 61028 63147 63151\nf 61028 63151 61033\nf 61029 61030 61035\nf 61029 61035 61034\nf 61031 61036 61032\nf 61032 61036 61037\nf 61032 61037 63157\nf 61032 63157 63153\nf 61033 61038 61040\nf 61033 61040 61035\nf 61033 63151 63155\nf 61033 63155 61038\nf 61034 61035 61040\nf 61034 61040 61039\nf 61036 61041 61037\nf 61037 61041 61042\nf 61037 61042 63161\nf 61037 63161 63157\nf 61038 61043 61046\nf 61038 61046 61040\nf 61038 63155 63159\nf 61038 63159 61043\nf 61039 61040 61046\nf 61039 61046 61044\nf 61041 61047 61042\nf 61042 61047 61048\nf 61042 61048 63165\nf 61042 63165 63161\nf 61043 61050 61046\nf 61043 63159 63163\nf 61043 63163 61050\nf 61044 61046 61045\nf 61045 61046 61050\nf 61045 61050 61049\nf 61047 61051 61048\nf 61048 61051 61052\nf 61048 61052 63169\nf 61048 63169 63165\nf 61049 61050 61054\nf 61049 61054 61053\nf 61050 63163 63167\nf 61050 63167 61054\nf 61051 61055 61052\nf 61052 61055 61056\nf 61052 61056 63173\nf 61052 63173 63169\nf 61053 61054 61058\nf 61053 61058 61057\nf 61054 63167 63171\nf 61054 63171 61058\nf 61055 61059 61056\nf 61056 61059 61060\nf 61056 61060 63177\nf 61056 63177 63173\nf 61057 61058 61063\nf 61057 61063 61061\nf 61058 63171 63175\nf 61058 63175 61063\nf 61059 61064 61060\nf 61060 61064 61065\nf 61060 61065 63181\nf 61060 63181 63177\nf 61061 61063 61062\nf 61062 61063 63178\nf 61062 63178 63179\nf 61062 63179 61066\nf 61063 63175 63178\nf 61064 61068 61065\nf 61065 61068 61069\nf 61065 61069 63184\nf 61065 63184 63181\nf 61066 61067 61071\nf 61066 61071 61070\nf 61066 63179 61067\nf 61067 63179 63182\nf 61067 63182 61071\nf 61068 61072 61069\nf 61069 61072 61073\nf 61069 61073 63187\nf 61069 63187 63184\nf 61070 61071 61075\nf 61070 61075 61074\nf 61071 63182 63185\nf 61071 63185 61075\nf 61072 61076 61073\nf 61073 61076 61077\nf 61073 61077 63190\nf 61073 63190 63187\nf 61074 61075 61079\nf 61074 61079 61078\nf 61075 63185 63188\nf 61075 63188 61079\nf 61076 61080 61077\nf 61077 61080 61081\nf 61077 61081 63193\nf 61077 63193 63190\nf 61078 61079 61084\nf 61078 61084 61082\nf 61079 63188 63191\nf 61079 63191 61084\nf 61080 61085 61081\nf 61081 61085 61086\nf 61081 61086 63196\nf 61081 63196 63193\nf 61082 61084 61083\nf 61083 61084 63194\nf 61083 63194 61087\nf 61084 63191 63194\nf 61085 61088 61086\nf 61086 61088 61089\nf 61086 61089 63200\nf 61086 63200 63196\nf 61087 63194 63197\nf 61087 63197 61090\nf 61088 61092 61089\nf 61089 61092 61094\nf 61089 61094 63202\nf 61089 63202 63200\nf 61090 61091 61097\nf 61090 61097 61095\nf 61090 63197 61091\nf 61091 63197 63198\nf 61091 63198 63201\nf 61091 63201 61097\nf 61092 61093 61094\nf 61093 61098 61094\nf 61094 61098 63202\nf 61095 61097 61096\nf 61096 61097 63203\nf 61096 63203 61099\nf 61097 63201 63203\nf 61098 61100 63209\nf 61098 63205 63202\nf 61098 63209 63205\nf 61099 63203 63206\nf 61099 63206 61101\nf 61100 61103 63211\nf 61100 63211 63209\nf 61101 61102 61106\nf 61101 61106 61105\nf 61101 63206 61102\nf 61102 63206 63207\nf 61102 63207 63210\nf 61102 63210 61106\nf 61103 61104 63213\nf 61103 63213 63211\nf 61104 61107 61108\nf 61104 61108 63213\nf 61105 61106 61111\nf 61105 61111 61109\nf 61106 63210 63212\nf 61106 63212 61111\nf 61107 61112 61108\nf 61108 61112 61113\nf 61108 61113 63215\nf 61108 63215 63213\nf 61109 61111 61110\nf 61110 61111 63214\nf 61110 63214 61114\nf 61111 63212 63214\nf 61112 61115 61113\nf 61113 61115 61116\nf 61113 61116 63217\nf 61113 63217 63215\nf 61114 63214 63216\nf 61114 63216 61117\nf 61115 61118 63221\nf 61115 63221 61116\nf 61116 63218 63217\nf 61116 63221 63218\nf 61117 63216 63219\nf 61117 63219 61119\nf 61118 61120 63225\nf 61118 63225 63221\nf 61119 63219 63223\nf 61119 63223 61121\nf 61120 61122 63229\nf 61120 63229 63225\nf 61121 63223 63227\nf 61121 63227 61123\nf 61122 61124 63232\nf 61122 63232 63229\nf 61123 63227 63230\nf 61123 63230 61125\nf 61124 61126 63235\nf 61124 63235 63232\nf 61125 63230 63233\nf 61125 63233 61127\nf 61126 61128 63238\nf 61126 63238 63235\nf 61127 63233 63236\nf 61127 63236 61129\nf 61128 61130 63241\nf 61128 63241 63238\nf 61129 63236 63239\nf 61129 63239 61131\nf 61130 61133 63243\nf 61130 63243 63241\nf 61131 61136 61132\nf 61131 63239 63242\nf 61131 63242 63244\nf 61131 63244 61136\nf 61132 61136 61135\nf 61133 61134 63245\nf 61133 63245 63243\nf 61134 61137 61138\nf 61134 61138 63245\nf 61135 61136 61140\nf 61135 61140 61139\nf 61136 63244 61140\nf 61137 61141 63248\nf 61137 63248 61138\nf 61138 63246 63245\nf 61138 63248 63246\nf 61139 61140 61143\nf 61139 61143 61142\nf 61140 63244 63247\nf 61140 63247 61143\nf 61141 61144 63252\nf 61141 63252 63248\nf 61142 61143 63251\nf 61142 63251 63253\nf 61142 63253 61146\nf 61143 63247 63250\nf 61143 63250 63251\nf 61144 61145 63255\nf 61144 63255 63252\nf 61145 61147 61148\nf 61145 61148 63255\nf 61146 63253 61149\nf 61147 61150 63259\nf 61147 63259 61148\nf 61148 63256 63255\nf 61148 63259 63256\nf 61149 63253 63257\nf 61149 63257 61151\nf 61150 61152 63264\nf 61150 63264 63259\nf 61151 63257 63261\nf 61151 63261 61154\nf 61152 61153 63266\nf 61152 63266 63264\nf 61153 61156 61157\nf 61153 61157 63266\nf 61154 61155 61159\nf 61154 61159 61158\nf 61154 63261 61155\nf 61155 63261 63262\nf 61155 63262 63265\nf 61155 63265 61159\nf 61156 61160 63269\nf 61156 63269 61157\nf 61157 63267 63266\nf 61157 63269 63267\nf 61158 61159 61164\nf 61158 61164 61162\nf 61159 63265 63268\nf 61159 63268 61164\nf 61160 61161 63272\nf 61160 63272 63269\nf 61161 61165 61166\nf 61161 61166 63272\nf 61162 61164 61163\nf 61163 61164 63271\nf 61163 63271 61167\nf 61164 63268 63271\nf 61165 61168 63275\nf 61165 63275 61166\nf 61166 63273 63272\nf 61166 63275 63273\nf 61167 63271 63274\nf 61167 63274 61170\nf 61168 61169 63278\nf 61168 63278 63275\nf 61169 61171 61173\nf 61169 61173 63278\nf 61170 63274 63277\nf 61170 63277 61174\nf 61171 61172 61173\nf 61172 61175 61176\nf 61172 61176 61173\nf 61173 61176 63279\nf 61173 63279 63278\nf 61174 63277 63280\nf 61174 63280 61177\nf 61175 61180 63287\nf 61175 63287 61176\nf 61176 63282 63279\nf 61176 63283 63282\nf 61176 63287 63283\nf 61177 63280 63284\nf 61177 63284 63286\nf 61177 63286 61178\nf 61178 63286 61179\nf 61179 61182 61183\nf 61179 61183 61181\nf 61179 63286 61182\nf 61180 61181 63292\nf 61180 63292 63287\nf 61181 61183 63292\nf 61182 63286 63289\nf 61182 63289 63291\nf 61182 63291 61183\nf 61183 63291 63293\nf 61183 63293 63292\nf 61184 61185 63296\nf 61184 61190 61191\nf 61184 61191 61192\nf 61184 61192 61185\nf 61184 63295 63302\nf 61184 63296 63295\nf 61184 63302 61190\nf 61185 61186 63297\nf 61185 61192 61193\nf 61185 61193 61186\nf 61185 63297 63296\nf 61186 61193 61194\nf 61186 61194 63306\nf 61186 63305 63297\nf 61186 63306 63305\nf 61187 61188 63299\nf 61187 61196 61197\nf 61187 61197 61198\nf 61187 61198 61188\nf 61187 63298 63312\nf 61187 63299 63298\nf 61187 63312 61196\nf 61188 61198 61199\nf 61188 61199 63316\nf 61188 63315 63299\nf 61188 63316 63315\nf 61189 61190 63303\nf 61189 61201 61202\nf 61189 61202 61203\nf 61189 61203 61190\nf 61189 63300 63322\nf 61189 63303 63300\nf 61189 63322 61201\nf 61190 61203 61204\nf 61190 61204 61191\nf 61190 63302 63303\nf 61191 61204 61205\nf 61191 61205 61192\nf 61192 61205 61206\nf 61192 61206 61193\nf 61193 61206 61207\nf 61193 61207 61194\nf 61194 61195 63308\nf 61194 61207 61208\nf 61194 61208 61195\nf 61194 63308 63306\nf 61195 61208 61209\nf 61195 61209 63326\nf 61195 63325 63308\nf 61195 63326 63325\nf 61196 61210 61211\nf 61196 61211 61212\nf 61196 61212 61197\nf 61196 63312 63313\nf 61196 63313 63329\nf 61196 63329 61210\nf 61197 61212 61213\nf 61197 61213 61198\nf 61198 61213 61214\nf 61198 61214 61199\nf 61199 61214 61215\nf 61199 61215 63333\nf 61199 63332 63316\nf 61199 63333 63332\nf 61200 61201 63323\nf 61200 61216 61217\nf 61200 61217 61201\nf 61200 63320 63338\nf 61200 63323 63320\nf 61200 63338 61216\nf 61201 61217 61218\nf 61201 61218 61202\nf 61201 63322 63323\nf 61202 61218 61220\nf 61202 61220 61203\nf 61203 61220 61222\nf 61203 61222 61204\nf 61204 61222 61224\nf 61204 61224 61205\nf 61205 61224 61226\nf 61205 61226 61206\nf 61206 61226 61227\nf 61206 61227 61207\nf 61207 61227 61228\nf 61207 61228 61208\nf 61208 61228 61229\nf 61208 61229 61209\nf 61209 61229 61230\nf 61209 61230 63341\nf 61209 63340 63326\nf 61209 63341 63340\nf 61210 61231 61232\nf 61210 61232 61233\nf 61210 61233 61211\nf 61210 63329 63330\nf 61210 63330 63343\nf 61210 63343 61231\nf 61211 61233 61234\nf 61211 61234 61212\nf 61212 61234 61235\nf 61212 61235 61213\nf 61213 61235 61236\nf 61213 61236 61214\nf 61214 61236 61237\nf 61214 61237 61215\nf 61215 61237 61238\nf 61215 61238 63347\nf 61215 63346 63333\nf 61215 63347 63346\nf 61216 61240 61241\nf 61216 61241 61243\nf 61216 61243 61217\nf 61216 63338 63354\nf 61216 63354 61240\nf 61217 61243 61246\nf 61217 61246 61218\nf 61218 61246 61220\nf 61219 61220 61246\nf 61219 61221 61220\nf 61219 61246 61244\nf 61220 61221 61222\nf 61221 61223 61222\nf 61222 61223 61224\nf 61223 61225 61224\nf 61224 61225 61226\nf 61225 61247 61226\nf 61226 61247 61249\nf 61226 61249 61227\nf 61227 61249 61250\nf 61227 61250 61228\nf 61228 61250 61251\nf 61228 61251 61229\nf 61229 61251 61252\nf 61229 61252 61230\nf 61230 61252 63366\nf 61230 63357 63341\nf 61230 63366 63357\nf 61231 61253 61254\nf 61231 61254 61232\nf 61231 63343 63344\nf 61231 63344 63358\nf 61231 63358 61253\nf 61232 61254 61255\nf 61232 61255 61233\nf 61233 61255 61256\nf 61233 61256 61234\nf 61234 61256 61257\nf 61234 61257 61235\nf 61235 61257 61258\nf 61235 61258 61236\nf 61236 61258 61259\nf 61236 61259 61237\nf 61237 61259 61260\nf 61237 61260 61238\nf 61238 61239 63349\nf 61238 61260 61261\nf 61238 61261 61239\nf 61238 63349 63347\nf 61239 61261 61262\nf 61239 61262 63361\nf 61239 63360 63349\nf 61239 63361 63360\nf 61240 61263 61265\nf 61240 61265 61241\nf 61240 63354 63355\nf 61240 63355 63365\nf 61240 63365 61263\nf 61241 61265 61243\nf 61242 61243 61265\nf 61242 61245 61243\nf 61242 61265 61264\nf 61243 61245 61246\nf 61244 61246 61245\nf 61247 61248 61249\nf 61248 61267 61249\nf 61249 61267 61268\nf 61249 61268 61250\nf 61250 61268 61269\nf 61250 61269 61251\nf 61251 61269 61270\nf 61251 61270 61252\nf 61252 61270 63375\nf 61252 63375 63366\nf 61253 61271 61272\nf 61253 61272 61254\nf 61253 63358 63368\nf 61253 63368 61271\nf 61254 61272 61273\nf 61254 61273 61255\nf 61255 61273 61274\nf 61255 61274 61256\nf 61256 61274 61275\nf 61256 61275 61257\nf 61257 61275 61276\nf 61257 61276 61258\nf 61258 61276 61277\nf 61258 61277 61259\nf 61259 61277 61278\nf 61259 61278 61260\nf 61260 61278 61279\nf 61260 61279 61261\nf 61261 61279 61280\nf 61261 61280 61262\nf 61262 61280 63379\nf 61262 63370 63361\nf 61262 63379 63370\nf 61263 61283 61265\nf 61263 63365 63373\nf 61263 63373 63374\nf 61263 63374 61283\nf 61264 61265 61283\nf 61264 61283 61281\nf 61266 61284 61286\nf 61266 61286 61285\nf 61267 61287 61268\nf 61268 61287 61288\nf 61268 61288 61289\nf 61268 61289 61269\nf 61269 61289 61290\nf 61269 61290 61270\nf 61270 61290 63384\nf 61270 63384 63375\nf 61271 61291 61292\nf 61271 61292 61272\nf 61271 63368 63377\nf 61271 63377 61291\nf 61272 61292 61293\nf 61272 61293 61273\nf 61273 61293 61294\nf 61273 61294 61274\nf 61274 61294 61295\nf 61274 61295 61275\nf 61275 61295 61296\nf 61275 61296 61276\nf 61276 61296 61297\nf 61276 61297 61277\nf 61277 61297 61298\nf 61277 61298 61278\nf 61278 61298 61299\nf 61278 61299 61279\nf 61279 61299 61300\nf 61279 61300 61280\nf 61280 61300 63388\nf 61280 63388 63379\nf 61281 61283 61282\nf 61282 61283 63382\nf 61282 63382 61301\nf 61283 63374 63382\nf 61284 61302 61286\nf 61285 61286 61304\nf 61285 61304 61303\nf 61286 61302 61304\nf 61287 61305 61288\nf 61288 61305 61306\nf 61288 61306 61307\nf 61288 61307 61289\nf 61289 61307 61308\nf 61289 61308 61290\nf 61290 61308 63393\nf 61290 63393 63384\nf 61291 61309 61310\nf 61291 61310 61292\nf 61291 63377 63386\nf 61291 63386 61309\nf 61292 61310 61311\nf 61292 61311 61293\nf 61293 61311 61312\nf 61293 61312 61294\nf 61294 61312 61313\nf 61294 61313 61295\nf 61295 61313 61314\nf 61295 61314 61296\nf 61296 61314 61315\nf 61296 61315 61297\nf 61297 61315 61316\nf 61297 61316 61298\nf 61298 61316 61317\nf 61298 61317 61299\nf 61299 61317 61318\nf 61299 61318 61300\nf 61300 61318 63397\nf 61300 63397 63388\nf 61301 63382 63391\nf 61301 63391 61319\nf 61302 61321 61304\nf 61303 61304 61323\nf 61303 61323 61322\nf 61304 61321 61323\nf 61305 61325 61306\nf 61306 61325 61327\nf 61306 61327 61328\nf 61306 61328 61307\nf 61307 61328 61329\nf 61307 61329 61308\nf 61308 61329 63403\nf 61308 63403 63393\nf 61309 61330 61331\nf 61309 61331 61310\nf 61309 63386 63395\nf 61309 63395 61330\nf 61310 61331 61332\nf 61310 61332 61311\nf 61311 61332 61333\nf 61311 61333 61312\nf 61312 61333 61334\nf 61312 61334 61313\nf 61313 61334 61335\nf 61313 61335 61314\nf 61314 61335 61336\nf 61314 61336 61315\nf 61315 61336 61337\nf 61315 61337 61316\nf 61316 61337 61338\nf 61316 61338 61317\nf 61317 61338 61339\nf 61317 61339 61318\nf 61318 61339 61340\nf 61318 61340 63398\nf 61318 63398 63397\nf 61319 61342 61320\nf 61319 63391 63401\nf 61319 63401 63411\nf 61319 63411 61342\nf 61320 61342 61341\nf 61321 61343 61323\nf 61322 61323 61346\nf 61322 61346 61324\nf 61323 61343 61344\nf 61323 61344 61346\nf 61324 61346 61345\nf 61325 61326 61327\nf 61326 61347 61349\nf 61326 61349 61327\nf 61327 61349 61350\nf 61327 61350 61351\nf 61327 61351 61328\nf 61328 61351 61352\nf 61328 61352 61329\nf 61329 61352 63413\nf 61329 63413 63403\nf 61330 61353 61331\nf 61330 63395 63405\nf 61330 63405 63407\nf 61330 63407 61353\nf 61331 61353 61354\nf 61331 61354 61332\nf 61332 61354 61355\nf 61332 61355 61333\nf 61333 61355 61356\nf 61333 61356 61334\nf 61334 61356 61357\nf 61334 61357 61335\nf 61335 61357 61358\nf 61335 61358 61336\nf 61336 61358 61359\nf 61336 61359 61337\nf 61337 61359 61360\nf 61337 61360 61338\nf 61338 61360 61361\nf 61338 61361 61339\nf 61339 61361 61362\nf 61339 61362 61340\nf 61340 61362 63418\nf 61340 63408 63398\nf 61340 63418 63408\nf 61341 61342 61364\nf 61341 61364 61363\nf 61342 63411 61364\nf 61343 61365 61344\nf 61344 61365 61367\nf 61344 61367 61368\nf 61344 61368 61346\nf 61345 61346 61369\nf 61345 61369 61348\nf 61346 61368 61369\nf 61347 61348 61349\nf 61348 61369 61349\nf 61349 61369 61370\nf 61349 61370 61371\nf 61349 61371 61350\nf 61350 61371 61372\nf 61350 61372 61351\nf 61351 61372 61373\nf 61351 61373 61352\nf 61352 61373 63422\nf 61352 63422 63413\nf 61353 61374 61375\nf 61353 61375 61354\nf 61353 63407 63416\nf 61353 63416 61374\nf 61354 61375 61376\nf 61354 61376 61355\nf 61355 61376 61377\nf 61355 61377 61356\nf 61356 61377 61378\nf 61356 61378 61357\nf 61357 61378 61379\nf 61357 61379 61358\nf 61358 61379 61380\nf 61358 61380 61359\nf 61359 61380 61381\nf 61359 61381 61360\nf 61360 61381 61382\nf 61360 61382 61361\nf 61361 61382 61383\nf 61361 61383 61362\nf 61362 61383 63428\nf 61362 63428 63418\nf 61363 61364 61385\nf 61363 61385 61384\nf 61364 63411 63421\nf 61364 63421 61385\nf 61365 61366 61367\nf 61366 61386 61367\nf 61367 61386 61388\nf 61367 61388 61368\nf 61368 61388 61389\nf 61368 61389 61369\nf 61369 61389 61390\nf 61369 61390 61370\nf 61370 61390 61391\nf 61370 61391 61371\nf 61371 61391 61392\nf 61371 61392 61372\nf 61372 61392 61393\nf 61372 61393 61373\nf 61373 61393 63432\nf 61373 63432 63422\nf 61374 61394 61375\nf 61374 63416 63425\nf 61374 63425 63427\nf 61374 63427 61394\nf 61375 61394 61395\nf 61375 61395 61376\nf 61376 61395 61396\nf 61376 61396 61377\nf 61377 61396 61397\nf 61377 61397 61378\nf 61378 61397 61398\nf 61378 61398 61379\nf 61379 61398 61399\nf 61379 61399 61380\nf 61380 61399 61400\nf 61380 61400 61381\nf 61381 61400 61401\nf 61381 61401 61382\nf 61382 61401 61402\nf 61382 61402 61383\nf 61383 61402 63440\nf 61383 63440 63428\nf 61384 61385 61404\nf 61384 61404 61403\nf 61385 63421 63431\nf 61385 63431 61404\nf 61386 61387 61388\nf 61387 61405 61406\nf 61387 61406 61388\nf 61388 61406 61407\nf 61388 61407 61408\nf 61388 61408 61389\nf 61389 61408 61409\nf 61389 61409 61390\nf 61390 61409 61410\nf 61390 61410 61391\nf 61391 61410 61411\nf 61391 61411 61392\nf 61392 61411 61393\nf 61393 61411 63444\nf 61393 63433 63432\nf 61393 63444 63433\nf 61394 61412 61395\nf 61394 63427 63437\nf 61394 63437 63439\nf 61394 63439 61412\nf 61395 61412 61413\nf 61395 61413 61396\nf 61396 61413 61414\nf 61396 61414 61397\nf 61397 61414 61415\nf 61397 61415 61398\nf 61398 61415 61416\nf 61398 61416 61399\nf 61399 61416 61417\nf 61399 61417 61400\nf 61400 61417 61418\nf 61400 61418 61401\nf 61401 61418 61419\nf 61401 61419 61402\nf 61402 61419 63455\nf 61402 63455 63440\nf 61403 61404 61421\nf 61403 61421 61420\nf 61404 63431 63443\nf 61404 63443 61421\nf 61405 61423 61406\nf 61406 61423 61424\nf 61406 61424 61425\nf 61406 61425 61407\nf 61407 61425 61426\nf 61407 61426 61408\nf 61408 61426 61427\nf 61408 61427 61409\nf 61409 61427 61428\nf 61409 61428 61410\nf 61410 61428 61429\nf 61410 61429 61411\nf 61411 61429 63459\nf 61411 63459 63444\nf 61412 61430 61413\nf 61412 63439 63450\nf 61412 63450 63452\nf 61412 63452 61430\nf 61413 61430 61431\nf 61413 61431 61414\nf 61414 61431 61432\nf 61414 61432 61415\nf 61415 61432 61433\nf 61415 61433 61416\nf 61416 61433 61417\nf 61417 61433 63470\nf 61417 63453 61418\nf 61417 63470 63453\nf 61418 63453 63454\nf 61418 63454 61419\nf 61419 63454 63456\nf 61419 63456 63455\nf 61420 61421 61436\nf 61420 61436 61422\nf 61421 61434 61436\nf 61421 63443 63458\nf 61421 63458 61434\nf 61422 61436 61435\nf 61423 61437 61424\nf 61424 61437 61439\nf 61424 61439 61440\nf 61424 61440 61425\nf 61425 61440 61441\nf 61425 61441 61426\nf 61426 61441 61442\nf 61426 61442 61427\nf 61427 61442 61443\nf 61427 61443 61428\nf 61428 61443 61444\nf 61428 61444 61429\nf 61429 61444 63478\nf 61429 63478 63459\nf 61430 63452 63465\nf 61430 63465 63467\nf 61430 63467 61431\nf 61431 63467 63468\nf 61431 63468 61432\nf 61432 63468 63469\nf 61432 63469 61433\nf 61433 63469 63471\nf 61433 63471 63470\nf 61434 61446 61436\nf 61434 63458 63476\nf 61434 63476 63477\nf 61434 63477 61446\nf 61435 61436 61446\nf 61435 61446 61445\nf 61437 61438 61439\nf 61438 61447 61449\nf 61438 61449 61439\nf 61439 61449 61450\nf 61439 61450 61451\nf 61439 61451 61440\nf 61440 61451 61452\nf 61440 61452 61441\nf 61441 61452 61453\nf 61441 61453 61442\nf 61442 61453 61454\nf 61442 61454 61443\nf 61443 61454 61444\nf 61444 61454 63496\nf 61444 63479 63478\nf 61444 63496 63479\nf 61445 61446 61456\nf 61445 61456 61448\nf 61446 61455 61456\nf 61446 63477 63494\nf 61446 63494 61455\nf 61447 61448 61449\nf 61448 61456 61449\nf 61449 61456 61457\nf 61449 61457 61458\nf 61449 61458 61450\nf 61450 61458 61459\nf 61450 61459 61451\nf 61451 61459 61460\nf 61451 61460 61452\nf 61452 61460 61461\nf 61452 61461 61453\nf 61453 61461 61462\nf 61453 61462 61454\nf 61454 61462 63513\nf 61454 63513 63496\nf 61455 61463 61464\nf 61455 61464 61456\nf 61455 63494 63511\nf 61455 63511 61463\nf 61456 61464 61465\nf 61456 61465 61457\nf 61457 61465 61466\nf 61457 61466 61458\nf 61458 61466 61467\nf 61458 61467 61459\nf 61459 61467 61468\nf 61459 61468 61460\nf 61460 61468 61469\nf 61460 61469 61461\nf 61461 61469 61470\nf 61461 61470 61462\nf 61462 61470 63530\nf 61462 63530 63513\nf 61463 61471 61472\nf 61463 61472 61464\nf 61463 63511 63528\nf 61463 63528 61471\nf 61464 61472 61473\nf 61464 61473 61465\nf 61465 61473 61474\nf 61465 61474 61466\nf 61466 61474 61475\nf 61466 61475 61467\nf 61467 61475 61476\nf 61467 61476 61468\nf 61468 61476 61477\nf 61468 61477 61469\nf 61469 61477 61478\nf 61469 61478 61470\nf 61470 61478 63546\nf 61470 63546 63530\nf 61471 61479 61480\nf 61471 61480 61472\nf 61471 63528 63544\nf 61471 63544 61479\nf 61472 61480 61481\nf 61472 61481 61473\nf 61473 61481 61482\nf 61473 61482 61474\nf 61474 61482 61483\nf 61474 61483 61475\nf 61475 61483 61484\nf 61475 61484 61476\nf 61476 61484 61485\nf 61476 61485 61477\nf 61477 61485 61486\nf 61477 61486 61478\nf 61478 61486 63562\nf 61478 63562 63546\nf 61479 61487 61488\nf 61479 61488 61480\nf 61479 63544 63560\nf 61479 63560 61487\nf 61480 61488 61489\nf 61480 61489 61481\nf 61481 61489 61490\nf 61481 61490 61482\nf 61482 61490 61491\nf 61482 61491 61483\nf 61483 61491 61492\nf 61483 61492 61484\nf 61484 61492 61493\nf 61484 61493 61485\nf 61485 61493 61494\nf 61485 61494 61486\nf 61486 61494 63578\nf 61486 63578 63562\nf 61487 61495 61496\nf 61487 61496 61488\nf 61487 63560 63576\nf 61487 63576 61495\nf 61488 61496 61497\nf 61488 61497 61489\nf 61489 61497 61498\nf 61489 61498 61490\nf 61490 61498 61499\nf 61490 61499 61491\nf 61491 61499 61500\nf 61491 61500 61492\nf 61492 61500 61501\nf 61492 61501 61493\nf 61493 61501 61502\nf 61493 61502 61494\nf 61494 61502 63594\nf 61494 63594 63578\nf 61495 61503 61504\nf 61495 61504 61496\nf 61495 63576 63592\nf 61495 63592 61503\nf 61496 61504 61505\nf 61496 61505 61497\nf 61497 61505 61506\nf 61497 61506 61498\nf 61498 61506 61507\nf 61498 61507 61499\nf 61499 61507 61508\nf 61499 61508 61500\nf 61500 61508 61509\nf 61500 61509 61501\nf 61501 61509 61510\nf 61501 61510 61502\nf 61502 61510 63609\nf 61502 63609 63594\nf 61503 61520 61521\nf 61503 61521 61504\nf 61503 63592 63607\nf 61503 63607 61520\nf 61504 61521 61522\nf 61504 61522 61505\nf 61505 61522 61523\nf 61505 61523 61506\nf 61506 61523 61524\nf 61506 61524 61507\nf 61507 61524 61525\nf 61507 61525 61508\nf 61508 61525 61526\nf 61508 61526 61509\nf 61509 61526 61527\nf 61509 61527 61510\nf 61510 61527 61528\nf 61510 61528 63610\nf 61510 63610 63609\nf 61511 61512 63617\nf 61511 61535 61533\nf 61511 63616 61535\nf 61511 63617 63616\nf 61512 61513 63618\nf 61512 63618 63617\nf 61513 61514 63619\nf 61513 63619 63618\nf 61514 61515 63620\nf 61514 63620 63619\nf 61515 61516 63621\nf 61515 63621 63620\nf 61516 61517 63622\nf 61516 63622 63621\nf 61517 61518 63623\nf 61517 63623 63622\nf 61518 61519 63624\nf 61518 63624 63623\nf 61519 61536 63626\nf 61519 63625 63624\nf 61519 63626 63625\nf 61520 61542 61521\nf 61520 63607 63638\nf 61520 63638 63640\nf 61520 63640 61542\nf 61521 61542 61543\nf 61521 61543 61522\nf 61522 61543 61544\nf 61522 61544 61523\nf 61523 61544 61545\nf 61523 61545 61524\nf 61524 61545 61546\nf 61524 61546 61525\nf 61525 61546 61547\nf 61525 61547 61526\nf 61526 61547 61549\nf 61526 61549 61527\nf 61527 61549 61551\nf 61527 61551 61528\nf 61528 61529 63612\nf 61528 61551 61553\nf 61528 61553 61529\nf 61528 63612 63610\nf 61529 61553 61554\nf 61529 61554 63642\nf 61529 63641 63612\nf 61529 63642 63641\nf 61530 61531 63653\nf 61530 61560 61558\nf 61530 63650 61560\nf 61530 63653 63650\nf 61531 61532 63652\nf 61531 61534 61532\nf 61531 63652 63653\nf 61532 61534 61535\nf 61532 61535 63616\nf 61532 63615 63652\nf 61532 63616 63615\nf 61533 61535 61534\nf 61536 61537 61538\nf 61536 61538 63626\nf 61537 61539 63656\nf 61537 63656 61538\nf 61538 63655 63626\nf 61538 63656 63655\nf 61539 61540 63656\nf 61540 61541 63658\nf 61540 63658 63656\nf 61541 61561 63660\nf 61541 63659 63658\nf 61541 63660 63659\nf 61542 61567 61568\nf 61542 61568 61543\nf 61542 63640 63673\nf 61542 63673 61567\nf 61543 61568 61569\nf 61543 61569 61544\nf 61544 61569 61570\nf 61544 61570 61545\nf 61545 61570 61571\nf 61545 61571 61546\nf 61546 61571 61574\nf 61546 61574 61547\nf 61547 61574 61549\nf 61548 61549 61574\nf 61548 61550 61549\nf 61548 61574 61572\nf 61549 61550 61551\nf 61550 61552 61551\nf 61551 61552 61553\nf 61552 61575 61553\nf 61553 61575 61577\nf 61553 61577 61554\nf 61554 61577 61578\nf 61554 61578 63676\nf 61554 63675 63642\nf 61554 63676 63675\nf 61555 61556 63646\nf 61555 61580 61581\nf 61555 61581 61582\nf 61555 61582 61556\nf 61555 63645 63692\nf 61555 63646 63645\nf 61555 63692 61580\nf 61556 61557 63648\nf 61556 61582 61585\nf 61556 61585 61557\nf 61556 63648 63646\nf 61557 61560 63650\nf 61557 61585 61560\nf 61557 63650 63648\nf 61558 61560 61559\nf 61559 61560 61585\nf 61559 61585 61583\nf 61561 61562 61563\nf 61561 61563 63660\nf 61562 61564 63696\nf 61562 63696 61563\nf 61563 63695 63660\nf 61563 63696 63695\nf 61564 61565 63696\nf 61565 61566 63698\nf 61565 63698 63696\nf 61566 61586 63702\nf 61566 63700 63698\nf 61566 63702 63700\nf 61567 61602 61603\nf 61567 61603 61568\nf 61567 63673 63732\nf 61567 63732 61602\nf 61568 61603 61604\nf 61568 61604 61569\nf 61569 61604 61605\nf 61569 61605 61570\nf 61570 61605 61608\nf 61570 61608 61571\nf 61571 61608 61574\nf 61572 61574 61573\nf 61573 61574 61608\nf 61573 61608 61606\nf 61575 61576 61577\nf 61576 61609 61577\nf 61577 61609 61610\nf 61577 61610 61578\nf 61578 61610 61611\nf 61578 61611 63735\nf 61578 63734 63676\nf 61578 63735 63734\nf 61579 61580 63693\nf 61579 61614 61615\nf 61579 61615 61616\nf 61579 61616 61580\nf 61579 63690 63754\nf 61579 63693 63690\nf 61579 63754 61614\nf 61580 61616 61617\nf 61580 61617 61581\nf 61580 63692 63693\nf 61581 61617 61620\nf 61581 61620 61582\nf 61582 61620 61585\nf 61583 61585 61584\nf 61584 61585 61620\nf 61584 61620 61618\nf 61586 61587 61588\nf 61586 61588 63702\nf 61587 61589 61588\nf 61588 61589 61590\nf 61588 61590 63704\nf 61588 63704 63702\nf 61589 61591 61590\nf 61590 61591 61592\nf 61590 61592 63705\nf 61590 63705 63704\nf 61591 61593 61592\nf 61592 61593 61594\nf 61592 61594 63706\nf 61592 63706 63705\nf 61593 61595 61594\nf 61594 61595 61596\nf 61594 61596 63708\nf 61594 63708 63706\nf 61595 61597 61596\nf 61596 61597 61598\nf 61596 61598 63710\nf 61596 63710 63708\nf 61597 61599 61598\nf 61598 61599 61600\nf 61598 61600 63712\nf 61598 63712 63710\nf 61599 61621 61600\nf 61600 61601 63713\nf 61600 61621 61623\nf 61600 61623 61601\nf 61600 63713 63712\nf 61601 61623 61625\nf 61601 61625 63758\nf 61601 63757 63713\nf 61601 63758 63757\nf 61602 61636 61637\nf 61602 61637 61603\nf 61602 63732 63792\nf 61602 63792 61636\nf 61603 61637 61638\nf 61603 61638 61604\nf 61604 61638 61640\nf 61604 61640 61605\nf 61605 61640 61608\nf 61606 61608 61607\nf 61607 61608 61640\nf 61607 61640 61639\nf 61609 61641 61610\nf 61610 61641 61642\nf 61610 61642 61643\nf 61610 61643 61611\nf 61611 61612 63737\nf 61611 61643 61644\nf 61611 61644 61612\nf 61611 63737 63735\nf 61612 61644 61645\nf 61612 61645 63795\nf 61612 63794 63737\nf 61612 63795 63794\nf 61613 61614 63755\nf 61613 61646 61647\nf 61613 61647 61614\nf 61613 63752 63808\nf 61613 63755 63752\nf 61613 63808 61646\nf 61614 61647 61648\nf 61614 61648 61615\nf 61614 63754 63755\nf 61615 61648 61649\nf 61615 61649 61616\nf 61616 61649 61651\nf 61616 61651 61617\nf 61617 61651 61620\nf 61618 61620 61619\nf 61619 61620 61651\nf 61619 61651 61650\nf 61621 61622 61623\nf 61622 61624 61623\nf 61623 61624 61625\nf 61624 61626 61625\nf 61625 61626 61627\nf 61625 61627 63760\nf 61625 63760 63758\nf 61626 61628 61627\nf 61627 61628 61629\nf 61627 61629 63762\nf 61627 63762 63760\nf 61628 61630 61629\nf 61629 61630 61631\nf 61629 61631 63764\nf 61629 63764 63762\nf 61630 61652 61631\nf 61631 61632 63766\nf 61631 61652 61654\nf 61631 61654 61632\nf 61631 63766 63764\nf 61632 61633 63768\nf 61632 61654 61656\nf 61632 61656 61633\nf 61632 63768 63766\nf 61633 61634 63770\nf 61633 61656 61657\nf 61633 61657 61634\nf 61633 63770 63768\nf 61634 61657 61658\nf 61634 61658 63811\nf 61634 63810 63770\nf 61634 63811 63810\nf 61635 61661 61662\nf 61635 61662 61663\nf 61635 61663 63831\nf 61635 63783 63827\nf 61635 63827 61661\nf 61635 63830 63783\nf 61635 63831 63830\nf 61636 61664 61665\nf 61636 61665 61666\nf 61636 61666 61637\nf 61636 63792 63839\nf 61636 63839 61664\nf 61637 61666 61667\nf 61637 61667 61638\nf 61638 61667 61669\nf 61638 61669 61640\nf 61639 61640 61669\nf 61639 61669 61668\nf 61641 61675 61642\nf 61642 61675 61677\nf 61642 61677 61678\nf 61642 61678 61643\nf 61643 61678 61679\nf 61643 61679 61644\nf 61644 61679 61645\nf 61645 61679 63894\nf 61645 63842 63795\nf 61645 63843 63842\nf 61645 63894 63843\nf 61646 61680 61647\nf 61646 63808 63855\nf 61646 63855 63857\nf 61646 63857 61680\nf 61647 61680 61681\nf 61647 61681 61648\nf 61648 61681 61682\nf 61648 61682 61649\nf 61649 61682 61684\nf 61649 61684 61651\nf 61650 61651 61684\nf 61650 61684 61683\nf 61652 61653 61654\nf 61653 61655 61654\nf 61654 61655 61656\nf 61655 61687 61656\nf 61656 61687 61689\nf 61656 61689 61657\nf 61657 61689 61690\nf 61657 61690 61658\nf 61658 61659 63813\nf 61658 61690 61691\nf 61658 61691 61659\nf 61658 63813 63811\nf 61659 61660 63815\nf 61659 61691 61692\nf 61659 61692 61660\nf 61659 63815 63813\nf 61660 61692 61693\nf 61660 61693 63859\nf 61660 63858 63815\nf 61660 63859 63858\nf 61661 61694 61695\nf 61661 61695 61696\nf 61661 61696 61662\nf 61661 63827 63828\nf 61661 63828 63881\nf 61661 63881 61694\nf 61662 61696 61697\nf 61662 61697 61663\nf 61663 61697 61698\nf 61663 61698 63885\nf 61663 63884 63831\nf 61663 63885 63884\nf 61664 61699 61700\nf 61664 61700 61665\nf 61664 63839 63840\nf 61664 63840 63891\nf 61664 63891 61699\nf 61665 61700 61701\nf 61665 61701 61666\nf 61666 61701 61702\nf 61666 61702 61667\nf 61667 61702 61703\nf 61667 61703 61669\nf 61668 61669 61704\nf 61668 61704 61670\nf 61669 61703 61704\nf 61670 61704 61705\nf 61670 61705 61671\nf 61671 61705 61706\nf 61671 61706 61672\nf 61672 61706 61707\nf 61672 61707 61673\nf 61673 61707 61708\nf 61673 61708 61674\nf 61674 61708 61709\nf 61674 61709 61676\nf 61675 61676 61677\nf 61676 61709 61677\nf 61677 61709 61710\nf 61677 61710 61678\nf 61678 61710 63948\nf 61678 63893 61679\nf 61678 63948 63893\nf 61679 63893 63895\nf 61679 63895 63894\nf 61680 63857 63909\nf 61680 63909 63911\nf 61680 63911 61681\nf 61681 63911 63912\nf 61681 63912 61682\nf 61682 61711 61684\nf 61682 63912 63913\nf 61682 63913 61711\nf 61683 61684 61712\nf 61683 61712 61685\nf 61684 61711 61712\nf 61685 61712 61714\nf 61685 61714 61686\nf 61686 61714 61713\nf 61687 61688 61689\nf 61688 61720 61722\nf 61688 61722 61689\nf 61689 61722 61723\nf 61689 61723 61724\nf 61689 61724 61690\nf 61690 61724 61725\nf 61690 61725 61691\nf 61691 61725 61692\nf 61692 61725 63964\nf 61692 63914 61693\nf 61692 63964 63914\nf 61693 63914 63916\nf 61693 63915 63859\nf 61693 63916 63915\nf 61694 61726 61695\nf 61694 63881 63882\nf 61694 63882 63937\nf 61694 63937 63939\nf 61694 63939 61726\nf 61695 61726 61727\nf 61695 61727 61696\nf 61696 61727 61728\nf 61696 61728 61697\nf 61697 61728 61698\nf 61698 61728 63983\nf 61698 63940 63885\nf 61698 63941 63940\nf 61698 63983 63941\nf 61699 61729 61730\nf 61699 61730 61700\nf 61699 63891 63946\nf 61699 63946 61729\nf 61700 61730 61731\nf 61700 61731 61701\nf 61701 61731 61732\nf 61701 61732 61702\nf 61702 61732 61733\nf 61702 61733 61703\nf 61703 61733 61734\nf 61703 61734 61704\nf 61704 61734 61735\nf 61704 61735 61705\nf 61705 61735 61736\nf 61705 61736 61706\nf 61706 61736 61737\nf 61706 61737 61707\nf 61707 61737 61738\nf 61707 61738 61708\nf 61708 61738 61739\nf 61708 61739 61709\nf 61709 61739 61710\nf 61710 61739 63992\nf 61710 63949 63948\nf 61710 63992 63949\nf 61711 63913 63959\nf 61711 63959 63961\nf 61711 63961 61712\nf 61712 61740 61714\nf 61712 63961 63962\nf 61712 63962 61740\nf 61713 61714 61741\nf 61713 61741 61715\nf 61714 61740 61741\nf 61715 61741 61743\nf 61715 61743 61716\nf 61716 61743 61742\nf 61717 61750 61752\nf 61717 61752 61753\nf 61717 61753 61718\nf 61718 61753 61754\nf 61718 61754 61719\nf 61719 61754 61755\nf 61719 61755 61721\nf 61720 61721 61722\nf 61721 61755 61722\nf 61722 61755 61756\nf 61722 61756 61757\nf 61722 61757 61723\nf 61723 61757 61724\nf 61724 61757 64005\nf 61724 63963 61725\nf 61724 64005 63963\nf 61725 63963 63965\nf 61725 63965 63964\nf 61726 61758 61727\nf 61726 63939 63980\nf 61726 63980 63982\nf 61726 63982 61758\nf 61727 61758 61728\nf 61728 61758 64019\nf 61728 63984 63983\nf 61728 64019 63984\nf 61729 61759 61760\nf 61729 61760 61730\nf 61729 63946 63990\nf 61729 63990 61759\nf 61730 61760 61761\nf 61730 61761 61731\nf 61731 61761 61762\nf 61731 61762 61732\nf 61732 61762 61763\nf 61732 61763 61733\nf 61733 61763 61764\nf 61733 61764 61734\nf 61734 61764 61765\nf 61734 61765 61735\nf 61735 61765 61766\nf 61735 61766 61736\nf 61736 61766 61767\nf 61736 61767 61737\nf 61737 61767 61768\nf 61737 61768 61738\nf 61738 61768 61739\nf 61739 61768 64029\nf 61739 63993 63992\nf 61739 64029 63993\nf 61740 63962 64000\nf 61740 64000 64002\nf 61740 64002 61741\nf 61741 61769 61743\nf 61741 64002 64003\nf 61741 64003 61769\nf 61742 61743 61770\nf 61742 61770 61744\nf 61743 61769 61770\nf 61744 61770 61772\nf 61744 61772 61745\nf 61745 61772 61771\nf 61746 61793 61795\nf 61746 61795 61796\nf 61746 61796 61747\nf 61747 61796 61797\nf 61747 61797 61748\nf 61748 61797 61798\nf 61748 61798 61749\nf 61749 61798 61799\nf 61749 61799 61751\nf 61750 61751 61752\nf 61751 61799 61752\nf 61752 61799 61800\nf 61752 61800 61801\nf 61752 61801 61753\nf 61753 61801 61802\nf 61753 61802 61754\nf 61754 61802 61803\nf 61754 61803 61755\nf 61755 61803 61756\nf 61756 61803 64049\nf 61756 64004 61757\nf 61756 64049 64004\nf 61757 64004 64006\nf 61757 64006 64005\nf 61758 63982 64017\nf 61758 64017 64020\nf 61758 64020 64019\nf 61759 61804 61805\nf 61759 61805 61760\nf 61759 63990 64027\nf 61759 64027 61804\nf 61760 61805 61806\nf 61760 61806 61761\nf 61761 61806 61807\nf 61761 61807 61762\nf 61762 61807 61808\nf 61762 61808 61763\nf 61763 61808 61809\nf 61763 61809 61764\nf 61764 61809 61810\nf 61764 61810 61765\nf 61765 61810 61811\nf 61765 61811 61766\nf 61766 61811 61812\nf 61766 61812 61767\nf 61767 61812 61768\nf 61768 61812 64071\nf 61768 64030 64029\nf 61768 64071 64030\nf 61769 64003 64034\nf 61769 64034 64036\nf 61769 64036 61770\nf 61770 64036 64037\nf 61770 64037 61772\nf 61771 61772 64038\nf 61771 64038 61773\nf 61772 64037 64038\nf 61773 64038 64039\nf 61773 64039 64040\nf 61773 64040 61774\nf 61774 64040 61775\nf 61775 61813 61814\nf 61775 61814 61776\nf 61775 64040 61813\nf 61776 61814 61815\nf 61776 61815 61777\nf 61777 61815 61816\nf 61777 61816 61778\nf 61778 61816 61817\nf 61778 61817 61779\nf 61779 61817 61818\nf 61779 61818 61780\nf 61780 61818 61819\nf 61780 61819 61781\nf 61781 61819 61820\nf 61781 61820 61782\nf 61782 61820 61821\nf 61782 61821 61783\nf 61783 61821 61822\nf 61783 61822 61784\nf 61784 61822 61823\nf 61784 61823 61785\nf 61785 61823 61824\nf 61785 61824 61786\nf 61786 61824 61825\nf 61786 61825 61787\nf 61787 61825 61826\nf 61787 61826 61788\nf 61788 61826 61827\nf 61788 61827 61789\nf 61789 61827 61828\nf 61789 61828 61790\nf 61790 61828 61829\nf 61790 61829 61791\nf 61791 61829 61830\nf 61791 61830 61792\nf 61792 61830 61831\nf 61792 61831 61794\nf 61793 61794 61795\nf 61794 61831 61795\nf 61795 61831 64041\nf 61795 64041 61796\nf 61796 64041 64042\nf 61796 64042 61797\nf 61797 64042 64043\nf 61797 64043 61798\nf 61798 64043 64044\nf 61798 64044 61799\nf 61799 64044 64045\nf 61799 64045 61800\nf 61800 64045 64046\nf 61800 64046 61801\nf 61801 64046 64047\nf 61801 64047 61802\nf 61802 64047 64048\nf 61802 64048 61803\nf 61803 64048 64050\nf 61803 64050 64049\nf 61804 61832 61833\nf 61804 61833 61805\nf 61804 64027 64069\nf 61804 64069 61832\nf 61805 61833 61834\nf 61805 61834 61806\nf 61806 61834 61835\nf 61806 61835 61807\nf 61807 61835 61836\nf 61807 61836 61808\nf 61808 61836 61837\nf 61808 61837 61809\nf 61809 61837 61838\nf 61809 61838 61810\nf 61810 61838 61839\nf 61810 61839 61811\nf 61811 61839 61812\nf 61812 61839 64124\nf 61812 64072 64071\nf 61812 64124 64072\nf 61813 64040 64077\nf 61813 64077 64079\nf 61813 64079 61814\nf 61814 64079 64080\nf 61814 64080 61815\nf 61815 64080 64081\nf 61815 64081 61816\nf 61816 64081 64082\nf 61816 64082 61817\nf 61817 64082 64083\nf 61817 64083 61818\nf 61818 64083 64084\nf 61818 64084 61819\nf 61819 64084 64085\nf 61819 64085 61820\nf 61820 64085 64086\nf 61820 64086 61821\nf 61821 64086 64087\nf 61821 64087 61822\nf 61822 64087 64088\nf 61822 64088 61823\nf 61823 64088 64089\nf 61823 64089 61824\nf 61824 64089 64090\nf 61824 64090 61825\nf 61825 64090 64091\nf 61825 64091 61826\nf 61826 64091 64092\nf 61826 64092 61827\nf 61827 64092 64093\nf 61827 64093 61828\nf 61828 64093 64094\nf 61828 64094 61829\nf 61829 64094 64095\nf 61829 64095 61830\nf 61830 64095 64096\nf 61830 64096 61831\nf 61831 64096 64098\nf 61831 64097 64041\nf 61831 64098 64097\nf 61832 61840 61841\nf 61832 61841 61833\nf 61832 64069 64122\nf 61832 64122 61840\nf 61833 61841 61842\nf 61833 61842 61834\nf 61834 61842 61843\nf 61834 61843 61835\nf 61835 61843 61844\nf 61835 61844 61836\nf 61836 61844 61845\nf 61836 61845 61837\nf 61837 61845 61846\nf 61837 61846 61838\nf 61838 61846 61847\nf 61838 61847 61839\nf 61839 61847 64150\nf 61839 64150 64124\nf 61840 61848 61849\nf 61840 61849 61841\nf 61840 64122 64148\nf 61840 64148 61848\nf 61841 61849 61850\nf 61841 61850 61842\nf 61842 61850 61851\nf 61842 61851 61843\nf 61843 61851 61852\nf 61843 61852 61844\nf 61844 61852 61853\nf 61844 61853 61845\nf 61845 61853 61854\nf 61845 61854 61846\nf 61846 61854 61855\nf 61846 61855 61847\nf 61847 61855 64169\nf 61847 64169 64150\nf 61848 61856 61857\nf 61848 61857 61849\nf 61848 64148 64167\nf 61848 64167 61856\nf 61849 61857 61858\nf 61849 61858 61850\nf 61850 61858 61859\nf 61850 61859 61851\nf 61851 61859 61860\nf 61851 61860 61852\nf 61852 61860 61861\nf 61852 61861 61853\nf 61853 61861 61862\nf 61853 61862 61854\nf 61854 61862 61863\nf 61854 61863 61855\nf 61855 61863 64190\nf 61855 64190 64169\nf 61856 61866 61867\nf 61856 61867 61857\nf 61856 64167 64188\nf 61856 64188 61866\nf 61857 61867 61868\nf 61857 61868 61858\nf 61858 61868 61869\nf 61858 61869 61859\nf 61859 61869 61870\nf 61859 61870 61860\nf 61860 61870 61871\nf 61860 61871 61861\nf 61861 61871 61872\nf 61861 61872 61862\nf 61862 61872 61873\nf 61862 61873 61863\nf 61863 61873 64209\nf 61863 64209 64190\nf 61864 61865 64179\nf 61864 61874 61875\nf 61864 61875 61876\nf 61864 61876 61865\nf 61864 64177 64196\nf 61864 64179 64177\nf 61864 64196 61874\nf 61865 61876 64216\nf 61865 64199 64179\nf 61865 64216 64199\nf 61866 61877 61878\nf 61866 61878 61867\nf 61866 64188 64207\nf 61866 64207 61877\nf 61867 61878 61879\nf 61867 61879 61868\nf 61868 61879 61880\nf 61868 61880 61869\nf 61869 61880 61881\nf 61869 61881 61870\nf 61870 61881 61882\nf 61870 61882 61871\nf 61871 61882 61883\nf 61871 61883 61872\nf 61872 61883 61884\nf 61872 61884 61873\nf 61873 61884 64227\nf 61873 64227 64209\nf 61874 61885 61886\nf 61874 61886 61875\nf 61874 64196 64197\nf 61874 64197 64214\nf 61874 64214 61885\nf 61875 61886 61887\nf 61875 61887 61876\nf 61876 61887 61888\nf 61876 61888 64217\nf 61876 64217 64216\nf 61877 61889 61890\nf 61877 61890 61878\nf 61877 64207 64225\nf 61877 64225 61889\nf 61878 61890 61891\nf 61878 61891 61879\nf 61879 61891 61892\nf 61879 61892 61880\nf 61880 61892 61893\nf 61880 61893 61881\nf 61881 61893 61894\nf 61881 61894 61882\nf 61882 61894 61895\nf 61882 61895 61883\nf 61883 61895 61896\nf 61883 61896 61884\nf 61884 61896 64244\nf 61884 64244 64227\nf 61885 61897 61886\nf 61885 64214 64232\nf 61885 64232 64234\nf 61885 64234 61897\nf 61886 61897 61898\nf 61886 61898 61887\nf 61887 61898 61899\nf 61887 61899 61888\nf 61888 61899 64252\nf 61888 64235 64217\nf 61888 64252 64235\nf 61889 61900 61901\nf 61889 61901 61890\nf 61889 64225 64242\nf 61889 64242 61900\nf 61890 61901 61902\nf 61890 61902 61891\nf 61891 61902 61903\nf 61891 61903 61892\nf 61892 61903 61904\nf 61892 61904 61893\nf 61893 61904 61905\nf 61893 61905 61894\nf 61894 61905 61906\nf 61894 61906 61895\nf 61895 61906 61907\nf 61895 61907 61896\nf 61896 61907 64262\nf 61896 64262 64244\nf 61897 61908 61909\nf 61897 61909 61898\nf 61897 64234 64250\nf 61897 64250 61908\nf 61898 61909 61910\nf 61898 61910 61899\nf 61899 61910 61911\nf 61899 61911 64253\nf 61899 64253 64252\nf 61900 61912 61913\nf 61900 61913 61901\nf 61900 64242 64260\nf 61900 64260 61912\nf 61901 61913 61914\nf 61901 61914 61902\nf 61902 61914 61915\nf 61902 61915 61903\nf 61903 61915 61916\nf 61903 61916 61904\nf 61904 61916 61917\nf 61904 61917 61905\nf 61905 61917 61918\nf 61905 61918 61906\nf 61906 61918 61919\nf 61906 61919 61907\nf 61907 61919 64278\nf 61907 64278 64262\nf 61908 61920 61921\nf 61908 61921 61909\nf 61908 64250 64268\nf 61908 64268 61920\nf 61909 61921 61922\nf 61909 61922 61910\nf 61910 61922 61923\nf 61910 61923 61911\nf 61911 61923 64287\nf 61911 64270 64253\nf 61911 64287 64270\nf 61912 61924 61925\nf 61912 61925 61913\nf 61912 64260 64276\nf 61912 64276 61924\nf 61913 61925 61926\nf 61913 61926 61914\nf 61914 61926 61927\nf 61914 61927 61915\nf 61915 61927 61928\nf 61915 61928 61916\nf 61916 61928 61929\nf 61916 61929 61917\nf 61917 61929 61930\nf 61917 61930 61918\nf 61918 61930 61931\nf 61918 61931 61919\nf 61919 61931 61932\nf 61919 61932 64279\nf 61919 64279 64278\nf 61920 61933 61934\nf 61920 61934 61921\nf 61920 64268 64285\nf 61920 64285 61933\nf 61921 61934 61935\nf 61921 61935 61922\nf 61922 61935 61936\nf 61922 61936 61923\nf 61923 61936 64302\nf 61923 64302 64287\nf 61924 61937 61938\nf 61924 61938 61925\nf 61924 64276 64293\nf 61924 64293 61937\nf 61925 61938 61939\nf 61925 61939 61926\nf 61926 61939 61940\nf 61926 61940 61927\nf 61927 61940 61941\nf 61927 61941 61928\nf 61928 61941 61942\nf 61928 61942 61929\nf 61929 61942 61943\nf 61929 61943 61930\nf 61930 61943 61944\nf 61930 61944 61931\nf 61931 61944 61945\nf 61931 61945 61932\nf 61932 61945 64310\nf 61932 64294 64279\nf 61932 64310 64294\nf 61933 61946 61947\nf 61933 61947 61934\nf 61933 64285 64300\nf 61933 64300 61946\nf 61934 61947 61948\nf 61934 61948 61935\nf 61935 61948 61949\nf 61935 61949 61936\nf 61936 61949 61950\nf 61936 61950 64303\nf 61936 64303 64302\nf 61937 61951 61952\nf 61937 61952 61938\nf 61937 64293 64309\nf 61937 64309 61951\nf 61938 61952 61953\nf 61938 61953 61939\nf 61939 61953 61954\nf 61939 61954 61940\nf 61940 61954 61955\nf 61940 61955 61941\nf 61941 61955 61956\nf 61941 61956 61942\nf 61942 61956 61957\nf 61942 61957 61943\nf 61943 61957 61958\nf 61943 61958 61944\nf 61944 61958 61959\nf 61944 61959 61945\nf 61945 61959 61960\nf 61945 61960 64311\nf 61945 64311 64310\nf 61946 61961 61962\nf 61946 61962 61963\nf 61946 61963 61947\nf 61946 64300 64317\nf 61946 64317 61961\nf 61947 61963 61964\nf 61947 61964 61948\nf 61948 61964 61965\nf 61948 61965 61949\nf 61949 61965 61966\nf 61949 61966 61950\nf 61950 61966 64332\nf 61950 64320 64303\nf 61950 64332 64320\nf 61951 61967 61968\nf 61951 61968 61952\nf 61951 64309 64325\nf 61951 64325 61967\nf 61952 61968 61969\nf 61952 61969 61953\nf 61953 61969 61970\nf 61953 61970 61954\nf 61954 61970 61971\nf 61954 61971 61955\nf 61955 61971 61972\nf 61955 61972 61956\nf 61956 61972 61973\nf 61956 61973 61957\nf 61957 61973 61974\nf 61957 61974 61958\nf 61958 61974 61975\nf 61958 61975 61959\nf 61959 61975 61976\nf 61959 61976 61960\nf 61960 61976 64339\nf 61960 64326 64311\nf 61960 64339 64326\nf 61961 61977 61978\nf 61961 61978 61962\nf 61961 64317 64318\nf 61961 64318 64330\nf 61961 64330 61977\nf 61962 61978 61979\nf 61962 61979 61963\nf 61963 61979 61980\nf 61963 61980 61964\nf 61964 61980 61981\nf 61964 61981 61965\nf 61965 61981 61982\nf 61965 61982 61966\nf 61966 61982 64347\nf 61966 64347 64332\nf 61967 61983 61968\nf 61967 64325 64337\nf 61967 64337 64338\nf 61967 64338 61983\nf 61968 61983 61984\nf 61968 61984 61969\nf 61969 61984 61985\nf 61969 61985 61970\nf 61970 61985 61986\nf 61970 61986 61971\nf 61971 61986 61987\nf 61971 61987 61972\nf 61972 61987 61988\nf 61972 61988 61973\nf 61973 61988 61989\nf 61973 61989 61974\nf 61974 61989 61990\nf 61974 61990 61975\nf 61975 61990 61991\nf 61975 61991 61976\nf 61976 61991 61992\nf 61976 61992 64340\nf 61976 64340 64339\nf 61977 61993 61994\nf 61977 61994 61995\nf 61977 61995 61978\nf 61977 64330 64344\nf 61977 64344 61993\nf 61978 61995 61996\nf 61978 61996 61979\nf 61979 61996 61997\nf 61979 61997 61980\nf 61980 61997 61998\nf 61980 61998 61981\nf 61981 61998 61982\nf 61982 61998 64360\nf 61982 64348 64347\nf 61982 64360 64348\nf 61983 61999 62000\nf 61983 62000 61984\nf 61983 64338 64353\nf 61983 64353 61999\nf 61984 62000 62001\nf 61984 62001 61985\nf 61985 62001 62002\nf 61985 62002 61986\nf 61986 62002 62003\nf 61986 62003 61987\nf 61987 62003 62004\nf 61987 62004 61988\nf 61988 62004 62005\nf 61988 62005 61989\nf 61989 62005 62006\nf 61989 62006 61990\nf 61990 62006 62007\nf 61990 62007 61991\nf 61991 62007 62008\nf 61991 62008 61992\nf 61992 62008 64368\nf 61992 64355 64340\nf 61992 64368 64355\nf 61993 62009 62010\nf 61993 62010 61994\nf 61993 64344 64345\nf 61993 64345 64358\nf 61993 64358 62009\nf 61994 62010 62011\nf 61994 62011 61995\nf 61995 62011 62012\nf 61995 62012 61996\nf 61996 62012 62013\nf 61996 62013 61997\nf 61997 62013 62014\nf 61997 62014 61998\nf 61998 62014 64374\nf 61998 64374 64360\nf 61999 62015 62016\nf 61999 62016 62000\nf 61999 64353 64366\nf 61999 64366 62015\nf 62000 62016 62017\nf 62000 62017 62001\nf 62001 62017 62018\nf 62001 62018 62002\nf 62002 62018 62019\nf 62002 62019 62003\nf 62003 62019 62020\nf 62003 62020 62004\nf 62004 62020 62021\nf 62004 62021 62005\nf 62005 62021 62022\nf 62005 62022 62006\nf 62006 62022 62023\nf 62006 62023 62007\nf 62007 62023 62024\nf 62007 62024 62008\nf 62008 62024 64383\nf 62008 64383 64368\nf 62009 62025 62026\nf 62009 62026 62010\nf 62009 64358 64372\nf 62009 64372 62025\nf 62010 62026 62027\nf 62010 62027 62011\nf 62011 62027 62028\nf 62011 62028 62012\nf 62012 62028 62029\nf 62012 62029 62013\nf 62013 62029 62030\nf 62013 62030 62014\nf 62014 62030 62031\nf 62014 62031 64375\nf 62014 64375 64374\nf 62015 62032 62033\nf 62015 62033 62016\nf 62015 64366 64381\nf 62015 64381 62032\nf 62016 62033 62034\nf 62016 62034 62017\nf 62017 62034 62035\nf 62017 62035 62018\nf 62018 62035 62036\nf 62018 62036 62019\nf 62019 62036 62037\nf 62019 62037 62020\nf 62020 62037 62038\nf 62020 62038 62021\nf 62021 62038 62039\nf 62021 62039 62022\nf 62022 62039 62040\nf 62022 62040 62023\nf 62023 62040 62041\nf 62023 62041 62024\nf 62024 62041 64397\nf 62024 64397 64383\nf 62025 62042 62043\nf 62025 62043 62044\nf 62025 62044 62026\nf 62025 64372 64387\nf 62025 64387 62042\nf 62026 62044 62045\nf 62026 62045 62027\nf 62027 62045 62046\nf 62027 62046 62028\nf 62028 62046 62047\nf 62028 62047 62029\nf 62029 62047 62048\nf 62029 62048 62030\nf 62030 62048 62049\nf 62030 62049 62031\nf 62031 62049 64402\nf 62031 64390 64375\nf 62031 64402 64390\nf 62032 62050 62051\nf 62032 62051 62033\nf 62032 64381 64395\nf 62032 64395 62050\nf 62033 62051 62052\nf 62033 62052 62034\nf 62034 62052 62053\nf 62034 62053 62035\nf 62035 62053 62054\nf 62035 62054 62036\nf 62036 62054 62055\nf 62036 62055 62037\nf 62037 62055 62056\nf 62037 62056 62038\nf 62038 62056 62057\nf 62038 62057 62039\nf 62039 62057 62058\nf 62039 62058 62040\nf 62040 62058 62059\nf 62040 62059 62041\nf 62041 62059 64409\nf 62041 64409 64397\nf 62042 62060 62061\nf 62042 62061 62043\nf 62042 64387 64388\nf 62042 64388 64400\nf 62042 64400 62060\nf 62043 62061 62062\nf 62043 62062 62044\nf 62044 62062 62063\nf 62044 62063 62045\nf 62045 62063 62064\nf 62045 62064 62046\nf 62046 62064 62065\nf 62046 62065 62047\nf 62047 62065 62066\nf 62047 62066 62048\nf 62048 62066 62067\nf 62048 62067 62049\nf 62049 62067 64414\nf 62049 64414 64402\nf 62050 62068 62069\nf 62050 62069 62051\nf 62050 64395 64407\nf 62050 64407 62068\nf 62051 62069 62070\nf 62051 62070 62052\nf 62052 62070 62071\nf 62052 62071 62053\nf 62053 62071 62072\nf 62053 62072 62054\nf 62054 62072 62073\nf 62054 62073 62055\nf 62055 62073 62074\nf 62055 62074 62056\nf 62056 62074 62075\nf 62056 62075 62057\nf 62057 62075 62076\nf 62057 62076 62058\nf 62058 62076 62077\nf 62058 62077 62059\nf 62059 62077 64421\nf 62059 64421 64409\nf 62060 62078 62079\nf 62060 62079 62061\nf 62060 64400 64412\nf 62060 64412 62078\nf 62061 62079 62080\nf 62061 62080 62062\nf 62062 62080 62081\nf 62062 62081 62063\nf 62063 62081 62082\nf 62063 62082 62064\nf 62064 62082 62083\nf 62064 62083 62065\nf 62065 62083 62084\nf 62065 62084 62066\nf 62066 62084 62085\nf 62066 62085 62067\nf 62067 62085 64427\nf 62067 64427 64414\nf 62068 62086 62069\nf 62068 64407 64419\nf 62068 64419 64420\nf 62068 64420 62086\nf 62069 62086 62087\nf 62069 62087 62070\nf 62070 62087 62088\nf 62070 62088 62071\nf 62071 62088 62089\nf 62071 62089 62072\nf 62072 62089 62090\nf 62072 62090 62073\nf 62073 62090 62091\nf 62073 62091 62074\nf 62074 62091 62092\nf 62074 62092 62075\nf 62075 62092 62093\nf 62075 62093 62076\nf 62076 62093 62094\nf 62076 62094 62077\nf 62077 62094 62095\nf 62077 62095 64422\nf 62077 64422 64421\nf 62078 62096 62097\nf 62078 62097 62079\nf 62078 64412 64425\nf 62078 64425 62096\nf 62079 62097 62098\nf 62079 62098 62080\nf 62080 62098 62099\nf 62080 62099 62081\nf 62081 62099 62100\nf 62081 62100 62082\nf 62082 62100 62101\nf 62082 62101 62083\nf 62083 62101 62102\nf 62083 62102 62084\nf 62084 62102 62103\nf 62084 62103 62085\nf 62085 62103 64438\nf 62085 64438 64427\nf 62086 62104 62105\nf 62086 62105 62087\nf 62086 64420 64432\nf 62086 64432 62104\nf 62087 62105 62106\nf 62087 62106 62088\nf 62088 62106 62107\nf 62088 62107 62089\nf 62089 62107 62108\nf 62089 62108 62090\nf 62090 62108 62109\nf 62090 62109 62091\nf 62091 62109 62110\nf 62091 62110 62092\nf 62092 62110 62111\nf 62092 62111 62093\nf 62093 62111 62112\nf 62093 62112 62094\nf 62094 62112 62113\nf 62094 62113 62095\nf 62095 62113 64445\nf 62095 64434 64422\nf 62095 64445 64434\nf 62096 62114 62115\nf 62096 62115 62097\nf 62096 64425 64436\nf 62096 64436 62114\nf 62097 62115 62116\nf 62097 62116 62098\nf 62098 62116 62117\nf 62098 62117 62099\nf 62099 62117 62118\nf 62099 62118 62100\nf 62100 62118 62119\nf 62100 62119 62101\nf 62101 62119 62120\nf 62101 62120 62102\nf 62102 62120 62121\nf 62102 62121 62103\nf 62103 62121 64449\nf 62103 64449 64438\nf 62104 62122 62123\nf 62104 62123 62105\nf 62104 64432 64443\nf 62104 64443 62122\nf 62105 62123 62124\nf 62105 62124 62106\nf 62106 62124 62125\nf 62106 62125 62107\nf 62107 62125 62126\nf 62107 62126 62108\nf 62108 62126 62127\nf 62108 62127 62109\nf 62109 62127 62128\nf 62109 62128 62110\nf 62110 62128 62129\nf 62110 62129 62111\nf 62111 62129 62130\nf 62111 62130 62112\nf 62112 62130 62131\nf 62112 62131 62113\nf 62113 62131 64457\nf 62113 64457 64445\nf 62114 62132 62133\nf 62114 62133 62115\nf 62114 64436 64447\nf 62114 64447 62132\nf 62115 62133 62134\nf 62115 62134 62116\nf 62116 62134 62135\nf 62116 62135 62117\nf 62117 62135 62136\nf 62117 62136 62118\nf 62118 62136 62137\nf 62118 62137 62119\nf 62119 62137 62138\nf 62119 62138 62120\nf 62120 62138 62121\nf 62121 62138 64461\nf 62121 64450 64449\nf 62121 64461 64450\nf 62122 62139 62140\nf 62122 62140 62123\nf 62122 64443 64455\nf 62122 64455 62139\nf 62123 62140 62141\nf 62123 62141 62124\nf 62124 62141 62142\nf 62124 62142 62125\nf 62125 62142 62143\nf 62125 62143 62126\nf 62126 62143 62144\nf 62126 62144 62127\nf 62127 62144 62145\nf 62127 62145 62128\nf 62128 62145 62146\nf 62128 62146 62129\nf 62129 62146 62147\nf 62129 62147 62130\nf 62130 62147 62148\nf 62130 62148 62131\nf 62131 62148 64469\nf 62131 64469 64457\nf 62132 62149 62150\nf 62132 62150 62133\nf 62132 64447 64459\nf 62132 64459 62149\nf 62133 62150 62151\nf 62133 62151 62134\nf 62134 62151 62152\nf 62134 62152 62135\nf 62135 62152 62153\nf 62135 62153 62136\nf 62136 62153 62154\nf 62136 62154 62137\nf 62137 62154 62155\nf 62137 62155 62138\nf 62138 62155 64473\nf 62138 64473 64461\nf 62139 62156 62157\nf 62139 62157 62140\nf 62139 64455 64467\nf 62139 64467 62156\nf 62140 62157 62158\nf 62140 62158 62141\nf 62141 62158 62159\nf 62141 62159 62142\nf 62142 62159 62160\nf 62142 62160 62143\nf 62143 62160 62161\nf 62143 62161 62144\nf 62144 62161 62162\nf 62144 62162 62145\nf 62145 62162 62163\nf 62145 62163 62146\nf 62146 62163 62164\nf 62146 62164 62147\nf 62147 62164 62165\nf 62147 62165 62148\nf 62148 62165 64481\nf 62148 64481 64469\nf 62149 62166 62167\nf 62149 62167 62150\nf 62149 64459 64471\nf 62149 64471 62166\nf 62150 62167 62168\nf 62150 62168 62151\nf 62151 62168 62169\nf 62151 62169 62152\nf 62152 62169 62170\nf 62152 62170 62153\nf 62153 62170 62171\nf 62153 62171 62154\nf 62154 62171 62172\nf 62154 62172 62155\nf 62155 62172 64485\nf 62155 64485 64473\nf 62156 62173 62174\nf 62156 62174 62157\nf 62156 64467 64479\nf 62156 64479 62173\nf 62157 62174 62175\nf 62157 62175 62158\nf 62158 62175 62176\nf 62158 62176 62159\nf 62159 62176 62177\nf 62159 62177 62160\nf 62160 62177 62178\nf 62160 62178 62161\nf 62161 62178 62179\nf 62161 62179 62162\nf 62162 62179 62180\nf 62162 62180 62163\nf 62163 62180 62181\nf 62163 62181 62164\nf 62164 62181 62182\nf 62164 62182 62165\nf 62165 62182 64493\nf 62165 64493 64481\nf 62166 62183 62184\nf 62166 62184 62167\nf 62166 64471 64483\nf 62166 64483 62183\nf 62167 62184 62185\nf 62167 62185 62168\nf 62168 62185 62186\nf 62168 62186 62169\nf 62169 62186 62187\nf 62169 62187 62170\nf 62170 62187 62188\nf 62170 62188 62171\nf 62171 62188 62189\nf 62171 62189 62172\nf 62172 62189 64497\nf 62172 64497 64485\nf 62173 62190 62191\nf 62173 62191 62174\nf 62173 64479 64491\nf 62173 64491 62190\nf 62174 62191 62192\nf 62174 62192 62175\nf 62175 62192 62193\nf 62175 62193 62176\nf 62176 62193 62194\nf 62176 62194 62177\nf 62177 62194 62195\nf 62177 62195 62178\nf 62178 62195 62196\nf 62178 62196 62179\nf 62179 62196 62197\nf 62179 62197 62180\nf 62180 62197 62198\nf 62180 62198 62181\nf 62181 62198 62199\nf 62181 62199 62182\nf 62182 62199 64505\nf 62182 64505 64493\nf 62183 62200 62201\nf 62183 62201 62184\nf 62183 64483 64495\nf 62183 64495 62200\nf 62184 62201 62202\nf 62184 62202 62185\nf 62185 62202 62203\nf 62185 62203 62186\nf 62186 62203 62204\nf 62186 62204 62187\nf 62187 62204 62205\nf 62187 62205 62188\nf 62188 62205 62206\nf 62188 62206 62189\nf 62189 62206 64509\nf 62189 64509 64497\nf 62190 62207 62208\nf 62190 62208 62191\nf 62190 64491 64503\nf 62190 64503 62207\nf 62191 62208 62209\nf 62191 62209 62192\nf 62192 62209 62210\nf 62192 62210 62193\nf 62193 62210 62211\nf 62193 62211 62194\nf 62194 62211 62212\nf 62194 62212 62195\nf 62195 62212 62213\nf 62195 62213 62196\nf 62196 62213 62214\nf 62196 62214 62197\nf 62197 62214 62215\nf 62197 62215 62198\nf 62198 62215 62216\nf 62198 62216 62199\nf 62199 62216 64518\nf 62199 64518 64505\nf 62200 62217 62218\nf 62200 62218 62201\nf 62200 64495 64507\nf 62200 64507 62217\nf 62201 62218 62219\nf 62201 62219 62202\nf 62202 62219 62220\nf 62202 62220 62203\nf 62203 62220 62221\nf 62203 62221 62204\nf 62204 62221 62222\nf 62204 62222 62205\nf 62205 62222 62223\nf 62205 62223 62206\nf 62206 62223 62224\nf 62206 62224 64510\nf 62206 64510 64509\nf 62207 62225 62226\nf 62207 62226 62208\nf 62207 64503 64516\nf 62207 64516 62225\nf 62208 62226 62227\nf 62208 62227 62209\nf 62209 62227 62228\nf 62209 62228 62210\nf 62210 62228 62229\nf 62210 62229 62211\nf 62211 62229 62230\nf 62211 62230 62212\nf 62212 62230 62231\nf 62212 62231 62213\nf 62213 62231 62232\nf 62213 62232 62214\nf 62214 62232 62233\nf 62214 62233 62215\nf 62215 62233 62234\nf 62215 62234 62216\nf 62216 62234 64530\nf 62216 64530 64518\nf 62217 62235 62236\nf 62217 62236 62218\nf 62217 64507 64520\nf 62217 64520 62235\nf 62218 62236 62237\nf 62218 62237 62219\nf 62219 62237 62238\nf 62219 62238 62220\nf 62220 62238 62239\nf 62220 62239 62221\nf 62221 62239 62240\nf 62221 62240 62222\nf 62222 62240 62241\nf 62222 62241 62223\nf 62223 62241 62242\nf 62223 62242 62224\nf 62224 62242 64534\nf 62224 64522 64510\nf 62224 64534 64522\nf 62225 62244 62245\nf 62225 62245 62226\nf 62225 64516 64528\nf 62225 64528 62244\nf 62226 62245 62246\nf 62226 62246 62227\nf 62227 62246 62247\nf 62227 62247 62228\nf 62228 62247 62248\nf 62228 62248 62229\nf 62229 62248 62249\nf 62229 62249 62230\nf 62230 62249 62250\nf 62230 62250 62231\nf 62231 62250 62251\nf 62231 62251 62232\nf 62232 62251 62252\nf 62232 62252 62233\nf 62233 62252 62253\nf 62233 62253 62234\nf 62234 62253 64543\nf 62234 64543 64530\nf 62235 62254 62255\nf 62235 62255 62236\nf 62235 64520 64532\nf 62235 64532 62254\nf 62236 62255 62256\nf 62236 62256 62237\nf 62237 62256 62257\nf 62237 62257 62238\nf 62238 62257 62258\nf 62238 62258 62239\nf 62239 62258 62259\nf 62239 62259 62240\nf 62240 62259 62260\nf 62240 62260 62241\nf 62241 62260 62261\nf 62241 62261 62242\nf 62242 62261 64547\nf 62242 64547 64534\nf 62243 62262 62263\nf 62243 62263 64551\nf 62243 64525 64536\nf 62243 64536 62262\nf 62243 64539 64525\nf 62243 64551 64539\nf 62244 62264 62265\nf 62244 62265 62245\nf 62244 64528 64541\nf 62244 64541 62264\nf 62245 62265 62266\nf 62245 62266 62246\nf 62246 62266 62267\nf 62246 62267 62247\nf 62247 62267 62268\nf 62247 62268 62248\nf 62248 62268 62270\nf 62248 62270 62249\nf 62249 62270 62272\nf 62249 62272 62250\nf 62250 62272 62273\nf 62250 62273 62251\nf 62251 62273 62274\nf 62251 62274 62252\nf 62252 62274 62275\nf 62252 62275 62253\nf 62253 62275 64555\nf 62253 64555 64543\nf 62254 62276 62277\nf 62254 62277 62255\nf 62254 64532 64545\nf 62254 64545 62276\nf 62255 62277 62278\nf 62255 62278 62256\nf 62256 62278 62279\nf 62256 62279 62257\nf 62257 62279 62280\nf 62257 62280 62258\nf 62258 62280 62281\nf 62258 62281 62259\nf 62259 62281 62282\nf 62259 62282 62260\nf 62260 62282 62283\nf 62260 62283 62261\nf 62261 62283 62284\nf 62261 62284 64549\nf 62261 64549 64547\nf 62262 62284 62285\nf 62262 62285 62286\nf 62262 62286 62263\nf 62262 64536 64537\nf 62262 64537 64548\nf 62262 64548 62284\nf 62263 62286 64559\nf 62263 64559 64551\nf 62264 62287 62288\nf 62264 62288 62265\nf 62264 64541 64553\nf 62264 64553 62287\nf 62265 62288 62289\nf 62265 62289 62266\nf 62266 62289 62290\nf 62266 62290 62267\nf 62267 62290 62292\nf 62267 62292 62268\nf 62268 62292 62270\nf 62269 62270 62292\nf 62269 62271 62270\nf 62269 62292 62291\nf 62270 62271 62272\nf 62271 62293 62272\nf 62272 62293 62295\nf 62272 62295 62273\nf 62273 62295 62296\nf 62273 62296 62274\nf 62274 62296 62297\nf 62274 62297 62275\nf 62275 62297 64563\nf 62275 64563 64555\nf 62276 62298 62299\nf 62276 62299 62277\nf 62276 64545 64557\nf 62276 64557 62298\nf 62277 62299 62300\nf 62277 62300 62278\nf 62278 62300 62301\nf 62278 62301 62279\nf 62279 62301 62302\nf 62279 62302 62280\nf 62280 62302 62303\nf 62280 62303 62281\nf 62281 62303 62304\nf 62281 62304 62282\nf 62282 62304 62305\nf 62282 62305 62283\nf 62283 62305 62306\nf 62283 62306 62284\nf 62284 62306 62307\nf 62284 62307 62285\nf 62284 64548 64549\nf 62285 62307 62308\nf 62285 62308 62286\nf 62286 62308 64567\nf 62286 64567 64559\nf 62287 62309 62310\nf 62287 62310 62288\nf 62287 64553 64561\nf 62287 64561 62309\nf 62288 62310 62311\nf 62288 62311 62289\nf 62289 62311 62312\nf 62289 62312 62290\nf 62290 62312 62314\nf 62290 62314 62292\nf 62291 62292 62314\nf 62291 62314 62313\nf 62293 62294 62295\nf 62294 62315 62295\nf 62295 62315 62316\nf 62295 62316 62296\nf 62296 62316 62317\nf 62296 62317 62297\nf 62297 62317 64572\nf 62297 64572 64563\nf 62298 62318 62319\nf 62298 62319 62299\nf 62298 64557 64565\nf 62298 64565 62318\nf 62299 62319 62320\nf 62299 62320 62300\nf 62300 62320 62321\nf 62300 62321 62301\nf 62301 62321 62322\nf 62301 62322 62302\nf 62302 62322 62323\nf 62302 62323 62303\nf 62303 62323 62324\nf 62303 62324 62304\nf 62304 62324 62325\nf 62304 62325 62305\nf 62305 62325 62326\nf 62305 62326 62306\nf 62306 62326 62327\nf 62306 62327 62307\nf 62307 62327 62328\nf 62307 62328 62308\nf 62308 62328 64577\nf 62308 64577 64567\nf 62309 62329 62330\nf 62309 62330 62310\nf 62309 64561 64570\nf 62309 64570 62329\nf 62310 62330 62331\nf 62310 62331 62311\nf 62311 62331 62332\nf 62311 62332 62312\nf 62312 62332 62334\nf 62312 62334 62314\nf 62313 62314 62334\nf 62313 62334 62333\nf 62315 62335 62316\nf 62316 62335 62337\nf 62316 62337 62338\nf 62316 62338 62317\nf 62317 62338 64583\nf 62317 64583 64572\nf 62318 62339 62319\nf 62318 64565 64574\nf 62318 64574 64576\nf 62318 64576 62339\nf 62319 62339 62340\nf 62319 62340 62320\nf 62320 62340 62341\nf 62320 62341 62321\nf 62321 62341 62342\nf 62321 62342 62322\nf 62322 62342 62343\nf 62322 62343 62323\nf 62323 62343 62344\nf 62323 62344 62324\nf 62324 62344 62345\nf 62324 62345 62325\nf 62325 62345 62346\nf 62325 62346 62326\nf 62326 62346 62347\nf 62326 62347 62327\nf 62327 62347 62348\nf 62327 62348 62328\nf 62328 62348 62349\nf 62328 62349 64578\nf 62328 64578 64577\nf 62329 62350 62351\nf 62329 62351 62330\nf 62329 64570 64581\nf 62329 64581 62350\nf 62330 62351 62352\nf 62330 62352 62331\nf 62331 62352 62353\nf 62331 62353 62332\nf 62332 62353 62355\nf 62332 62355 62334\nf 62333 62334 62355\nf 62333 62355 62354\nf 62335 62336 62337\nf 62336 62356 62337\nf 62337 62356 62357\nf 62337 62357 62338\nf 62338 62357 62358\nf 62338 62358 64584\nf 62338 64584 64583\nf 62339 62359 62360\nf 62339 62360 62340\nf 62339 64576 64587\nf 62339 64587 62359\nf 62340 62360 62361\nf 62340 62361 62341\nf 62341 62361 62362\nf 62341 62362 62342\nf 62342 62362 62363\nf 62342 62363 62343\nf 62343 62363 62364\nf 62343 62364 62344\nf 62344 62364 62365\nf 62344 62365 62345\nf 62345 62365 62366\nf 62345 62366 62346\nf 62346 62366 62367\nf 62346 62367 62347\nf 62347 62367 62368\nf 62347 62368 62348\nf 62348 62368 62369\nf 62348 62369 62349\nf 62349 62369 64596\nf 62349 64589 64578\nf 62349 64596 64589\nf 62350 62370 62371\nf 62350 62371 62351\nf 62350 64581 64591\nf 62350 64591 62370\nf 62351 62371 62372\nf 62351 62372 62352\nf 62352 62372 62373\nf 62352 62373 62353\nf 62353 62373 62375\nf 62353 62375 62355\nf 62354 62355 62375\nf 62354 62375 62374\nf 62356 62377 62357\nf 62357 62377 62379\nf 62357 62379 62380\nf 62357 62380 62358\nf 62358 62380 64600\nf 62358 64593 64584\nf 62358 64600 64593\nf 62359 62381 62382\nf 62359 62382 62360\nf 62359 64587 64594\nf 62359 64594 62381\nf 62360 62382 62383\nf 62360 62383 62361\nf 62361 62383 62384\nf 62361 62384 62362\nf 62362 62384 62385\nf 62362 62385 62363\nf 62363 62385 62386\nf 62363 62386 62364\nf 62364 62386 62387\nf 62364 62387 62365\nf 62365 62387 62388\nf 62365 62388 62366\nf 62366 62388 62389\nf 62366 62389 62367\nf 62367 62389 62390\nf 62367 62390 62368\nf 62368 62390 62391\nf 62368 62391 62369\nf 62369 62391 64603\nf 62369 64603 64596\nf 62370 62392 62393\nf 62370 62393 62371\nf 62370 64591 64598\nf 62370 64598 62392\nf 62371 62393 62394\nf 62371 62394 62372\nf 62372 62394 62395\nf 62372 62395 62373\nf 62373 62395 62396\nf 62373 62396 62375\nf 62374 62375 62398\nf 62374 62398 62376\nf 62375 62396 62398\nf 62376 62398 62397\nf 62377 62378 62379\nf 62378 62400 62402\nf 62378 62402 62379\nf 62379 62402 62403\nf 62379 62403 62404\nf 62379 62404 62380\nf 62380 62404 64607\nf 62380 64607 64600\nf 62381 62405 62406\nf 62381 62406 62382\nf 62381 64594 64601\nf 62381 64601 62405\nf 62382 62406 62407\nf 62382 62407 62383\nf 62383 62407 62408\nf 62383 62408 62384\nf 62384 62408 62409\nf 62384 62409 62385\nf 62385 62409 62410\nf 62385 62410 62386\nf 62386 62410 62411\nf 62386 62411 62387\nf 62387 62411 62412\nf 62387 62412 62388\nf 62388 62412 62413\nf 62388 62413 62389\nf 62389 62413 62414\nf 62389 62414 62390\nf 62390 62414 62415\nf 62390 62415 62391\nf 62391 62415 64611\nf 62391 64611 64603\nf 62392 62416 62417\nf 62392 62417 62393\nf 62392 64598 64605\nf 62392 64605 62416\nf 62393 62417 62418\nf 62393 62418 62394\nf 62394 62418 62419\nf 62394 62419 62395\nf 62395 62419 62420\nf 62395 62420 62396\nf 62396 62420 62421\nf 62396 62421 62398\nf 62397 62398 62422\nf 62397 62422 62399\nf 62398 62421 62422\nf 62399 62422 62423\nf 62399 62423 62401\nf 62400 62401 62402\nf 62401 62423 62402\nf 62402 62423 62424\nf 62402 62424 62425\nf 62402 62425 62403\nf 62403 62425 62404\nf 62404 62425 64614\nf 62404 64608 64607\nf 62404 64614 64608\nf 62405 62426 62427\nf 62405 62427 62406\nf 62405 64601 64609\nf 62405 64609 62426\nf 62406 62427 62428\nf 62406 62428 62407\nf 62407 62428 62429\nf 62407 62429 62408\nf 62408 62429 62430\nf 62408 62430 62409\nf 62409 62430 62431\nf 62409 62431 62410\nf 62410 62431 62432\nf 62410 62432 62411\nf 62411 62432 62433\nf 62411 62433 62412\nf 62412 62433 62434\nf 62412 62434 62413\nf 62413 62434 62435\nf 62413 62435 62414\nf 62414 62435 62436\nf 62414 62436 62415\nf 62415 62436 64618\nf 62415 64618 64611\nf 62416 62437 62438\nf 62416 62438 62417\nf 62416 64605 64613\nf 62416 64613 62437\nf 62417 62438 62439\nf 62417 62439 62418\nf 62418 62439 62440\nf 62418 62440 62419\nf 62419 62440 62441\nf 62419 62441 62420\nf 62420 62441 62442\nf 62420 62442 62421\nf 62421 62442 62443\nf 62421 62443 62422\nf 62422 62443 62444\nf 62422 62444 62423\nf 62423 62444 62445\nf 62423 62445 62424\nf 62424 62445 62446\nf 62424 62446 62425\nf 62425 62446 64622\nf 62425 64622 64614\nf 62426 62447 62448\nf 62426 62448 62427\nf 62426 64609 64616\nf 62426 64616 62447\nf 62427 62448 62449\nf 62427 62449 62428\nf 62428 62449 62450\nf 62428 62450 62429\nf 62429 62450 62451\nf 62429 62451 62430\nf 62430 62451 62452\nf 62430 62452 62431\nf 62431 62452 62453\nf 62431 62453 62432\nf 62432 62453 62454\nf 62432 62454 62433\nf 62433 62454 62455\nf 62433 62455 62434\nf 62434 62455 62456\nf 62434 62456 62435\nf 62435 62456 62457\nf 62435 62457 62436\nf 62436 62457 64626\nf 62436 64626 64618\nf 62437 62458 62438\nf 62437 64613 64620\nf 62437 64620 64621\nf 62437 64621 62458\nf 62438 62458 62459\nf 62438 62459 62439\nf 62439 62459 62460\nf 62439 62460 62440\nf 62440 62460 62461\nf 62440 62461 62441\nf 62441 62461 62462\nf 62441 62462 62442\nf 62442 62462 62463\nf 62442 62463 62443\nf 62443 62463 62464\nf 62443 62464 62444\nf 62444 62464 62465\nf 62444 62465 62445\nf 62445 62465 62466\nf 62445 62466 62446\nf 62446 62466 64629\nf 62446 64629 64622\nf 62447 62467 62468\nf 62447 62468 62448\nf 62447 64616 64624\nf 62447 64624 62467\nf 62448 62468 62469\nf 62448 62469 62449\nf 62449 62469 62470\nf 62449 62470 62450\nf 62450 62470 62471\nf 62450 62471 62451\nf 62451 62471 62472\nf 62451 62472 62452\nf 62452 62472 62473\nf 62452 62473 62453\nf 62453 62473 62474\nf 62453 62474 62454\nf 62454 62474 62475\nf 62454 62475 62455\nf 62455 62475 62476\nf 62455 62476 62456\nf 62456 62476 62477\nf 62456 62477 62457\nf 62457 62477 64634\nf 62457 64634 64626\nf 62458 62478 62479\nf 62458 62479 62459\nf 62458 64621 64627\nf 62458 64627 62478\nf 62459 62479 62480\nf 62459 62480 62460\nf 62460 62480 62481\nf 62460 62481 62461\nf 62461 62481 62482\nf 62461 62482 62462\nf 62462 62482 62483\nf 62462 62483 62463\nf 62463 62483 62484\nf 62463 62484 62464\nf 62464 62484 62485\nf 62464 62485 62465\nf 62465 62485 62466\nf 62466 62485 64637\nf 62466 64630 64629\nf 62466 64637 64630\nf 62467 62486 62487\nf 62467 62487 62468\nf 62467 64624 64632\nf 62467 64632 62486\nf 62468 62487 62488\nf 62468 62488 62469\nf 62469 62488 62489\nf 62469 62489 62470\nf 62470 62489 62490\nf 62470 62490 62471\nf 62471 62490 62491\nf 62471 62491 62472\nf 62472 62491 62492\nf 62472 62492 62473\nf 62473 62492 62493\nf 62473 62493 62474\nf 62474 62493 62494\nf 62474 62494 62475\nf 62475 62494 62495\nf 62475 62495 62476\nf 62476 62495 62496\nf 62476 62496 62477\nf 62477 62496 64643\nf 62477 64643 64634\nf 62478 62497 62498\nf 62478 62498 62479\nf 62478 64627 64635\nf 62478 64635 62497\nf 62479 62498 62499\nf 62479 62499 62480\nf 62480 62499 62500\nf 62480 62500 62481\nf 62481 62500 62501\nf 62481 62501 62482\nf 62482 62501 62502\nf 62482 62502 62483\nf 62483 62502 62503\nf 62483 62503 62484\nf 62484 62503 62504\nf 62484 62504 62485\nf 62485 62504 64647\nf 62485 64647 64637\nf 62486 62505 62487\nf 62486 64632 64640\nf 62486 64640 64642\nf 62486 64642 62505\nf 62487 62505 62506\nf 62487 62506 62488\nf 62488 62506 62507\nf 62488 62507 62489\nf 62489 62507 62508\nf 62489 62508 62490\nf 62490 62508 62509\nf 62490 62509 62491\nf 62491 62509 62510\nf 62491 62510 62492\nf 62492 62510 62511\nf 62492 62511 62493\nf 62493 62511 62512\nf 62493 62512 62494\nf 62494 62512 62513\nf 62494 62513 62495\nf 62495 62513 62514\nf 62495 62514 62496\nf 62496 62514 64654\nf 62496 64654 64643\nf 62497 62515 62516\nf 62497 62516 62498\nf 62497 64635 64645\nf 62497 64645 62515\nf 62498 62516 62517\nf 62498 62517 62499\nf 62499 62517 62518\nf 62499 62518 62500\nf 62500 62518 62519\nf 62500 62519 62501\nf 62501 62519 62520\nf 62501 62520 62502\nf 62502 62520 62521\nf 62502 62521 62503\nf 62503 62521 62504\nf 62504 62521 64657\nf 62504 64648 64647\nf 62504 64657 64648\nf 62505 62522 62523\nf 62505 62523 62506\nf 62505 64642 64652\nf 62505 64652 62522\nf 62506 62523 62524\nf 62506 62524 62507\nf 62507 62524 62525\nf 62507 62525 62508\nf 62508 62525 62526\nf 62508 62526 62509\nf 62509 62526 62527\nf 62509 62527 62510\nf 62510 62527 62528\nf 62510 62528 62511\nf 62511 62528 62529\nf 62511 62529 62512\nf 62512 62529 62530\nf 62512 62530 62513\nf 62513 62530 62531\nf 62513 62531 62514\nf 62514 62531 64663\nf 62514 64663 64654\nf 62515 62532 62533\nf 62515 62533 62516\nf 62515 64645 64655\nf 62515 64655 62532\nf 62516 62533 62534\nf 62516 62534 62517\nf 62517 62534 62535\nf 62517 62535 62518\nf 62518 62535 62536\nf 62518 62536 62519\nf 62519 62536 62537\nf 62519 62537 62520\nf 62520 62537 62538\nf 62520 62538 62521\nf 62521 62538 64666\nf 62521 64666 64657\nf 62522 62539 62540\nf 62522 62540 62523\nf 62522 64652 64661\nf 62522 64661 62539\nf 62523 62540 62541\nf 62523 62541 62524\nf 62524 62541 62542\nf 62524 62542 62525\nf 62525 62542 62543\nf 62525 62543 62526\nf 62526 62543 62544\nf 62526 62544 62527\nf 62527 62544 62545\nf 62527 62545 62528\nf 62528 62545 62546\nf 62528 62546 62529\nf 62529 62546 62547\nf 62529 62547 62530\nf 62530 62547 62548\nf 62530 62548 62531\nf 62531 62548 64674\nf 62531 64674 64663\nf 62532 62549 62550\nf 62532 62550 62533\nf 62532 64655 64664\nf 62532 64664 62549\nf 62533 62550 62551\nf 62533 62551 62534\nf 62534 62551 62552\nf 62534 62552 62535\nf 62535 62552 62553\nf 62535 62553 62536\nf 62536 62553 62554\nf 62536 62554 62537\nf 62537 62554 62538\nf 62538 62554 64678\nf 62538 64667 64666\nf 62538 64678 64667\nf 62539 62555 62540\nf 62539 64661 64671\nf 62539 64671 64673\nf 62539 64673 62555\nf 62540 62555 62556\nf 62540 62556 62541\nf 62541 62556 62557\nf 62541 62557 62542\nf 62542 62557 62558\nf 62542 62558 62543\nf 62543 62558 62559\nf 62543 62559 62544\nf 62544 62559 62560\nf 62544 62560 62545\nf 62545 62560 62561\nf 62545 62561 62546\nf 62546 62561 62562\nf 62546 62562 62547\nf 62547 62562 62548\nf 62548 62562 64687\nf 62548 64675 64674\nf 62548 64687 64675\nf 62549 62563 62564\nf 62549 62564 62550\nf 62549 64664 64676\nf 62549 64676 62563\nf 62550 62564 62565\nf 62550 62565 62551\nf 62551 62565 62566\nf 62551 62566 62552\nf 62552 62566 62567\nf 62552 62567 62553\nf 62553 62567 62568\nf 62553 62568 62554\nf 62554 62568 64691\nf 62554 64691 64678\nf 62555 62569 62556\nf 62555 64673 64684\nf 62555 64684 64686\nf 62555 64686 62569\nf 62556 62569 62570\nf 62556 62570 62557\nf 62557 62570 62571\nf 62557 62571 62558\nf 62558 62571 62572\nf 62558 62572 62559\nf 62559 62572 62573\nf 62559 62573 62560\nf 62560 62573 62574\nf 62560 62574 62561\nf 62561 62574 62575\nf 62561 62575 62562\nf 62562 62575 64701\nf 62562 64701 64687\nf 62563 62576 62577\nf 62563 62577 62564\nf 62563 64676 64689\nf 62563 64689 62576\nf 62564 62577 62578\nf 62564 62578 62565\nf 62565 62578 62579\nf 62565 62579 62566\nf 62566 62579 62580\nf 62566 62580 62567\nf 62567 62580 62581\nf 62567 62581 62568\nf 62568 62581 64705\nf 62568 64705 64691\nf 62569 62582 62583\nf 62569 62583 62584\nf 62569 62584 62570\nf 62569 64686 64698\nf 62569 64698 62582\nf 62570 62584 62585\nf 62570 62585 62571\nf 62571 62585 62586\nf 62571 62586 62572\nf 62572 62586 62587\nf 62572 62587 62573\nf 62573 62587 62588\nf 62573 62588 62574\nf 62574 62588 62589\nf 62574 62589 62575\nf 62575 62589 64712\nf 62575 64712 64701\nf 62576 62590 62591\nf 62576 62591 62577\nf 62576 64689 64703\nf 62576 64703 62590\nf 62577 62591 62592\nf 62577 62592 62578\nf 62578 62592 62593\nf 62578 62593 62579\nf 62579 62593 62594\nf 62579 62594 62580\nf 62580 62594 62595\nf 62580 62595 62581\nf 62581 62595 64716\nf 62581 64716 64705\nf 62582 62596 62597\nf 62582 62597 62583\nf 62582 64698 64699\nf 62582 64699 64710\nf 62582 64710 62596\nf 62583 62597 62598\nf 62583 62598 62584\nf 62584 62598 62599\nf 62584 62599 62585\nf 62585 62599 62600\nf 62585 62600 62586\nf 62586 62600 62601\nf 62586 62601 62587\nf 62587 62601 62602\nf 62587 62602 62588\nf 62588 62602 62603\nf 62588 62603 62589\nf 62589 62603 64724\nf 62589 64724 64712\nf 62590 62604 62605\nf 62590 62605 62591\nf 62590 64703 64714\nf 62590 64714 62604\nf 62591 62605 62607\nf 62591 62607 62592\nf 62592 62607 62608\nf 62592 62608 62593\nf 62593 62608 62609\nf 62593 62609 62594\nf 62594 62609 62595\nf 62595 62609 64729\nf 62595 64717 64716\nf 62595 64729 64717\nf 62596 62610 62611\nf 62596 62611 62597\nf 62596 64710 64722\nf 62596 64722 62610\nf 62597 62611 62612\nf 62597 62612 62598\nf 62598 62612 62613\nf 62598 62613 62599\nf 62599 62613 62615\nf 62599 62615 62600\nf 62600 62615 62617\nf 62600 62617 62601\nf 62601 62617 62619\nf 62601 62619 62602\nf 62602 62619 62621\nf 62602 62621 62603\nf 62603 62621 62622\nf 62603 62622 64725\nf 62603 64725 64724\nf 62604 62623 62626\nf 62604 62626 62605\nf 62604 64714 64727\nf 62604 64727 62623\nf 62605 62626 62607\nf 62606 62607 62626\nf 62606 62626 62624\nf 62606 62627 62607\nf 62607 62627 62628\nf 62607 62628 62608\nf 62608 62628 62629\nf 62608 62629 62609\nf 62609 62629 64740\nf 62609 64740 64729\nf 62610 62630 62631\nf 62610 62631 62611\nf 62610 64722 64735\nf 62610 64735 62630\nf 62611 62631 62632\nf 62611 62632 62612\nf 62612 62632 62635\nf 62612 62635 62613\nf 62613 62635 62615\nf 62614 62615 62635\nf 62614 62616 62615\nf 62614 62635 62633\nf 62615 62616 62617\nf 62616 62618 62617\nf 62617 62618 62619\nf 62618 62620 62619\nf 62619 62620 62621\nf 62620 62636 62621\nf 62621 62636 62638\nf 62621 62638 62622\nf 62622 62638 64748\nf 62622 64737 64725\nf 62622 64748 64737\nf 62623 62641 62626\nf 62623 64727 64738\nf 62623 64738 62641\nf 62624 62626 62625\nf 62625 62626 62641\nf 62625 62641 62639\nf 62627 62642 62628\nf 62628 62642 62644\nf 62628 62644 62645\nf 62628 62645 62629\nf 62629 62645 64751\nf 62629 64751 64740\nf 62630 62646 62647\nf 62630 62647 62648\nf 62630 62648 62631\nf 62630 64735 64745\nf 62630 64745 62646\nf 62631 62648 62651\nf 62631 62651 62632\nf 62632 62651 62635\nf 62633 62635 62634\nf 62634 62635 62651\nf 62634 62651 62649\nf 62636 62637 62638\nf 62637 62652 62638\nf 62638 62652 64748\nf 62639 62641 62640\nf 62640 62641 64749\nf 62640 64749 62653\nf 62641 64738 64749\nf 62642 62643 62644\nf 62643 62654 62644\nf 62644 62654 62656\nf 62644 62656 62645\nf 62645 62656 62657\nf 62645 62657 64752\nf 62645 64752 64751\nf 62646 62658 62659\nf 62646 62659 62647\nf 62646 64745 64746\nf 62646 64746 64756\nf 62646 64756 62658\nf 62647 62659 62662\nf 62647 62662 62648\nf 62648 62662 62651\nf 62649 62651 62650\nf 62650 62651 62662\nf 62650 62662 62660\nf 62652 62663 64758\nf 62652 64758 64748\nf 62653 64749 64761\nf 62653 64761 62666\nf 62654 62655 62656\nf 62655 62668 62656\nf 62656 62668 62670\nf 62656 62670 62657\nf 62657 62670 64771\nf 62657 64764 64752\nf 62657 64771 64764\nf 62658 62671 62674\nf 62658 62674 62659\nf 62658 64756 64767\nf 62658 64767 62671\nf 62659 62674 62662\nf 62660 62662 62661\nf 62661 62662 62674\nf 62661 62674 62672\nf 62663 62664 62665\nf 62663 62665 64759\nf 62663 64759 64758\nf 62664 62675 62665\nf 62665 62675 64769\nf 62665 64769 64759\nf 62666 62667 62677\nf 62666 62677 62676\nf 62666 64761 62667\nf 62667 64761 64762\nf 62667 64762 64770\nf 62667 64770 62677\nf 62668 62669 62670\nf 62669 62678 62680\nf 62669 62680 64772\nf 62669 64772 62670\nf 62670 64772 64771\nf 62671 62681 62683\nf 62671 62683 62674\nf 62671 64767 64776\nf 62671 64776 62681\nf 62672 62674 62673\nf 62673 62674 62683\nf 62673 62683 62682\nf 62675 62684 64786\nf 62675 64779 64769\nf 62675 64786 64779\nf 62676 62677 62686\nf 62676 62686 62685\nf 62677 64770 64780\nf 62677 64780 62686\nf 62678 62679 62680\nf 62679 62687 62680\nf 62680 62687 64781\nf 62680 64781 64772\nf 62681 62688 62691\nf 62681 62691 62683\nf 62681 64776 64777\nf 62681 64777 64784\nf 62681 64784 62688\nf 62682 62683 62691\nf 62682 62691 62689\nf 62684 62692 64793\nf 62684 64793 64786\nf 62685 62686 62694\nf 62685 62694 62693\nf 62686 64780 64787\nf 62686 64787 62694\nf 62687 62695 64795\nf 62687 64788 64781\nf 62687 64795 64788\nf 62688 62697 62691\nf 62688 64784 64791\nf 62688 64791 62697\nf 62689 62691 62690\nf 62690 62691 62697\nf 62690 62697 62696\nf 62692 62698 64800\nf 62692 64800 64793\nf 62693 62694 62700\nf 62693 62700 62699\nf 62694 64787 64794\nf 62694 64794 62700\nf 62695 62701 64802\nf 62695 64802 64795\nf 62696 62697 62703\nf 62696 62703 62702\nf 62697 64791 64798\nf 62697 64798 62703\nf 62698 62704 64809\nf 62698 64809 64800\nf 62699 62700 62707\nf 62699 62707 62705\nf 62700 64794 64801\nf 62700 64801 62707\nf 62701 62708 64802\nf 62702 62703 62711\nf 62702 62711 62710\nf 62703 64798 64807\nf 62703 64807 62711\nf 62704 62712 64816\nf 62704 64816 64809\nf 62705 62707 62706\nf 62706 62707 64810\nf 62706 64810 62713\nf 62707 64801 64810\nf 62708 62709 64803\nf 62708 62714 62709\nf 62708 64803 64802\nf 62709 62714 62716\nf 62709 62716 64818\nf 62709 64811 64803\nf 62709 64818 64811\nf 62710 62711 62718\nf 62710 62718 62717\nf 62711 64807 64814\nf 62711 64814 62718\nf 62712 62719 64823\nf 62712 64823 64816\nf 62713 64810 64817\nf 62713 64817 62720\nf 62714 62715 62716\nf 62715 62721 62716\nf 62716 62721 64818\nf 62717 62718 62723\nf 62717 62723 62722\nf 62718 64814 64821\nf 62718 64821 62723\nf 62719 62724 64832\nf 62719 64832 64823\nf 62720 64817 64824\nf 62720 64824 62725\nf 62721 62726 64825\nf 62721 64825 64818\nf 62722 62723 62730\nf 62722 62730 62729\nf 62723 64821 64830\nf 62723 64830 62730\nf 62724 62731 64839\nf 62724 64839 64832\nf 62725 64824 64833\nf 62725 64833 62733\nf 62726 62727 62728\nf 62726 62728 64826\nf 62726 64826 64825\nf 62727 62734 62728\nf 62728 62734 64834\nf 62728 64834 64826\nf 62729 62730 62736\nf 62729 62736 62735\nf 62730 64830 64837\nf 62730 64837 62736\nf 62731 62732 64848\nf 62731 64848 64839\nf 62732 62737 62738\nf 62732 62738 64848\nf 62733 64833 64840\nf 62733 64840 62739\nf 62734 62740 64841\nf 62734 64841 64834\nf 62735 62736 62745\nf 62735 62745 62743\nf 62736 64837 64846\nf 62736 64846 62745\nf 62737 62746 62738\nf 62738 62746 62747\nf 62738 62747 64857\nf 62738 64857 64848\nf 62739 64840 64849\nf 62739 64849 62748\nf 62740 62741 62742\nf 62740 62742 64842\nf 62740 64842 64841\nf 62741 62749 62751\nf 62741 62751 64851\nf 62741 64851 62742\nf 62742 64850 64842\nf 62742 64851 64850\nf 62743 62745 62744\nf 62744 62745 64854\nf 62744 64854 64855\nf 62744 64855 62753\nf 62745 64846 64854\nf 62746 62756 62747\nf 62747 62756 62757\nf 62747 62757 64869\nf 62747 64869 64857\nf 62748 64849 64858\nf 62748 64858 62758\nf 62749 62750 62751\nf 62750 62752 64860\nf 62750 64860 62751\nf 62751 64859 64851\nf 62751 64860 64859\nf 62752 62759 64862\nf 62752 64862 64860\nf 62753 62755 62754\nf 62753 64855 62755\nf 62754 62755 64866\nf 62754 64866 64867\nf 62754 64867 62838\nf 62755 64855 64866\nf 62756 62841 62757\nf 62757 62841 62842\nf 62757 62842 65006\nf 62757 65006 64869\nf 62758 64858 64870\nf 62758 64870 62843\nf 62759 62760 62761\nf 62759 62761 64862\nf 62760 62762 64872\nf 62760 64872 62761\nf 62761 64871 64862\nf 62761 64872 64871\nf 62762 62763 64872\nf 62763 62764 64874\nf 62763 64874 64872\nf 62764 62765 64876\nf 62764 64876 64874\nf 62765 62766 64878\nf 62765 64878 64876\nf 62766 62767 64879\nf 62766 64879 64878\nf 62767 62768 64880\nf 62767 64880 64879\nf 62768 62769 64881\nf 62768 64881 64880\nf 62769 62770 64882\nf 62769 64882 64881\nf 62770 62771 64883\nf 62770 64883 64882\nf 62771 62772 64884\nf 62771 64884 64883\nf 62772 62773 64885\nf 62772 64885 64884\nf 62773 62774 64886\nf 62773 64886 64885\nf 62774 62775 64887\nf 62774 64887 64886\nf 62775 62776 64888\nf 62775 64888 64887\nf 62776 62777 64889\nf 62776 64889 64888\nf 62777 62778 64890\nf 62777 64890 64889\nf 62778 62779 64891\nf 62778 64891 64890\nf 62779 62780 64892\nf 62779 64892 64891\nf 62780 62781 64893\nf 62780 64893 64892\nf 62781 62782 64894\nf 62781 64894 64893\nf 62782 62783 64895\nf 62782 64895 64894\nf 62783 62784 64896\nf 62783 64896 64895\nf 62784 62785 64897\nf 62784 64897 64896\nf 62785 62786 64899\nf 62785 64899 64897\nf 62786 62787 64901\nf 62786 64901 64899\nf 62787 62788 64903\nf 62787 64903 64901\nf 62788 62789 64905\nf 62788 64905 64903\nf 62789 62790 64907\nf 62789 64907 64905\nf 62790 62791 64909\nf 62790 64909 64907\nf 62791 62792 64911\nf 62791 64911 64909\nf 62792 62793 64913\nf 62792 64913 64911\nf 62793 62794 64915\nf 62793 64915 64913\nf 62794 62795 64917\nf 62794 64917 64915\nf 62795 62796 64919\nf 62795 64919 64917\nf 62796 62797 64921\nf 62796 64921 64919\nf 62797 62798 64923\nf 62797 64923 64921\nf 62798 62799 64925\nf 62798 64925 64923\nf 62799 62800 64927\nf 62799 64927 64925\nf 62800 62801 64929\nf 62800 64929 64927\nf 62801 62802 64931\nf 62801 64931 64929\nf 62802 62803 64933\nf 62802 64933 64931\nf 62803 62804 64935\nf 62803 64935 64933\nf 62804 62805 64937\nf 62804 64937 64935\nf 62805 62806 64939\nf 62805 64939 64937\nf 62806 62807 64941\nf 62806 64941 64939\nf 62807 62808 64943\nf 62807 64943 64941\nf 62808 62809 64945\nf 62808 64945 64943\nf 62809 62810 64947\nf 62809 64947 64945\nf 62810 62811 64949\nf 62810 64949 64947\nf 62811 62812 64951\nf 62811 64951 64949\nf 62812 62813 64953\nf 62812 64953 64951\nf 62813 62814 64955\nf 62813 64955 64953\nf 62814 62815 64957\nf 62814 64957 64955\nf 62815 62816 64959\nf 62815 64959 64957\nf 62816 62817 64961\nf 62816 64961 64959\nf 62817 62818 64963\nf 62817 64963 64961\nf 62818 62819 64965\nf 62818 64965 64963\nf 62819 62820 64967\nf 62819 64967 64965\nf 62820 62821 64969\nf 62820 64969 64967\nf 62821 62822 64971\nf 62821 64971 64969\nf 62822 62823 64973\nf 62822 64973 64971\nf 62823 62824 64975\nf 62823 64975 64973\nf 62824 62825 64977\nf 62824 64977 64975\nf 62825 62826 64979\nf 62825 64979 64977\nf 62826 62827 64981\nf 62826 64981 64979\nf 62827 62828 64983\nf 62827 64983 64981\nf 62828 62829 64985\nf 62828 64985 64983\nf 62829 62830 64987\nf 62829 64987 64985\nf 62830 62831 64989\nf 62830 64989 64987\nf 62831 62832 64991\nf 62831 64991 64989\nf 62832 62833 64993\nf 62832 64993 64991\nf 62833 62834 64995\nf 62833 64995 64993\nf 62834 62835 64997\nf 62834 64997 64995\nf 62835 62836 64999\nf 62835 64999 64997\nf 62836 62837 65001\nf 62836 65001 64999\nf 62837 62839 65004\nf 62837 65004 65001\nf 62838 62840 62839\nf 62838 64867 62840\nf 62839 62840 65003\nf 62839 65003 65004\nf 62840 64867 65003\nf 62841 62844 65009\nf 62841 65009 62842\nf 62842 65007 65006\nf 62842 65009 65007\nf 62843 64870 65008\nf 62843 65008 62845\nf 62844 62846 65011\nf 62844 65011 65009\nf 62845 65008 65010\nf 62845 65010 62848\nf 62846 62847 65011\nf 62847 62850 65014\nf 62847 65012 65011\nf 62847 65014 65012\nf 62848 62853 62849\nf 62848 65010 65013\nf 62848 65013 65017\nf 62848 65017 62853\nf 62849 62853 62852\nf 62850 62851 65014\nf 62851 62854 65019\nf 62851 65015 65014\nf 62851 65019 65015\nf 62852 62853 65018\nf 62852 65018 65022\nf 62852 65022 62856\nf 62853 65017 65018\nf 62854 62855 65019\nf 62855 62867 65035\nf 62855 65020 65019\nf 62855 65035 65020\nf 62856 65022 62869\nf 62857 62944 62946\nf 62857 62946 65024\nf 62857 65024 65025\nf 62857 65025 65026\nf 62857 65026 62858\nf 62858 65026 65027\nf 62858 65027 62859\nf 62859 65027 65028\nf 62859 65028 62860\nf 62860 65028 65029\nf 62860 65029 62861\nf 62861 65029 65030\nf 62861 65030 62862\nf 62862 65030 65031\nf 62862 65031 62863\nf 62863 65031 65032\nf 62863 65032 62864\nf 62864 65032 65033\nf 62864 65033 62865\nf 62865 65033 65034\nf 62865 65034 62866\nf 62866 65034 65036\nf 62866 65036 62868\nf 62867 62868 65035\nf 62868 65036 65035\nf 62869 65022 65037\nf 62869 65037 62947\nf 62870 62949 62951\nf 62870 62951 65039\nf 62870 65039 65040\nf 62870 65040 65041\nf 62870 65041 62871\nf 62871 65041 65042\nf 62871 65042 62872\nf 62872 65042 65043\nf 62872 65043 62873\nf 62873 65043 65044\nf 62873 65044 62874\nf 62874 65044 65045\nf 62874 65045 62875\nf 62875 65045 65046\nf 62875 65046 62876\nf 62876 65046 65047\nf 62876 65047 62877\nf 62877 65047 65048\nf 62877 65048 62878\nf 62878 65048 65049\nf 62878 65049 62879\nf 62879 65049 65050\nf 62879 65050 62880\nf 62880 65050 65051\nf 62880 65051 62881\nf 62881 65051 65052\nf 62881 65052 62882\nf 62882 65052 65053\nf 62882 65053 62883\nf 62883 65053 65054\nf 62883 65054 62884\nf 62884 65054 65055\nf 62884 65055 62885\nf 62885 65055 65056\nf 62885 65056 62886\nf 62886 65056 65057\nf 62886 65057 62887\nf 62887 65057 65058\nf 62887 65058 62888\nf 62888 65058 65059\nf 62888 65059 62889\nf 62889 65059 65060\nf 62889 65060 62890\nf 62890 65060 65061\nf 62890 65061 62891\nf 62891 65061 65062\nf 62891 65062 62892\nf 62892 65062 65063\nf 62892 65063 62893\nf 62893 65063 65064\nf 62893 65064 62894\nf 62894 65064 65065\nf 62894 65065 62895\nf 62895 65065 65066\nf 62895 65066 62896\nf 62896 65066 65067\nf 62896 65067 62897\nf 62897 65067 65068\nf 62897 65068 62898\nf 62898 65068 65069\nf 62898 65069 62899\nf 62899 65069 65070\nf 62899 65070 62900\nf 62900 65070 65071\nf 62900 65071 62901\nf 62901 65071 65072\nf 62901 65072 62902\nf 62902 65072 65073\nf 62902 65073 62903\nf 62903 65073 65074\nf 62903 65074 62904\nf 62904 65074 65075\nf 62904 65075 62905\nf 62905 65075 65076\nf 62905 65076 62906\nf 62906 65076 65077\nf 62906 65077 62907\nf 62907 65077 65078\nf 62907 65078 62908\nf 62908 65078 65079\nf 62908 65079 62909\nf 62909 65079 65080\nf 62909 65080 62910\nf 62910 65080 65081\nf 62910 65081 62911\nf 62911 65081 65082\nf 62911 65082 62912\nf 62912 65082 65083\nf 62912 65083 62913\nf 62913 65083 65084\nf 62913 65084 62914\nf 62914 65084 65085\nf 62914 65085 62915\nf 62915 65085 65086\nf 62915 65086 62916\nf 62916 65086 65087\nf 62916 65087 62917\nf 62917 65087 65088\nf 62917 65088 62918\nf 62918 65088 65089\nf 62918 65089 62919\nf 62919 65089 65090\nf 62919 65090 62920\nf 62920 65090 65091\nf 62920 65091 62921\nf 62921 65091 65092\nf 62921 65092 62922\nf 62922 65092 65093\nf 62922 65093 62923\nf 62923 65093 65094\nf 62923 65094 62924\nf 62924 65094 65095\nf 62924 65095 62925\nf 62925 65095 65096\nf 62925 65096 62926\nf 62926 65096 65097\nf 62926 65097 62927\nf 62927 65097 65098\nf 62927 65098 62928\nf 62928 65098 65099\nf 62928 65099 62929\nf 62929 65099 65100\nf 62929 65100 62930\nf 62930 65100 65101\nf 62930 65101 62931\nf 62931 65101 65102\nf 62931 65102 62932\nf 62932 65102 65103\nf 62932 65103 62933\nf 62933 65103 65104\nf 62933 65104 62934\nf 62934 65104 65105\nf 62934 65105 62935\nf 62935 65105 65106\nf 62935 65106 62936\nf 62936 65106 65107\nf 62936 65107 62937\nf 62937 65107 65108\nf 62937 65108 62938\nf 62938 65108 65109\nf 62938 65109 62939\nf 62939 65109 65110\nf 62939 65110 62940\nf 62940 65110 65111\nf 62940 65111 62941\nf 62941 65111 65112\nf 62941 65112 62942\nf 62942 65112 65114\nf 62942 65114 62943\nf 62943 65114 62945\nf 62944 62945 62946\nf 62945 65113 62946\nf 62945 65114 65113\nf 62946 65113 65024\nf 62947 65037 65116\nf 62947 65116 62952\nf 62948 62953 62955\nf 62948 62955 65118\nf 62948 65118 65120\nf 62948 65120 62950\nf 62949 62950 62951\nf 62950 65119 62951\nf 62950 65120 65119\nf 62951 65119 65039\nf 62952 65116 65121\nf 62952 65121 62956\nf 62953 62954 62955\nf 62954 62957 65123\nf 62954 65123 62955\nf 62955 65123 65118\nf 62956 65121 65124\nf 62956 65124 62959\nf 62957 62958 65129\nf 62957 65126 65123\nf 62957 65129 65126\nf 62958 62960 62961\nf 62958 62961 65129\nf 62959 65124 65127\nf 62959 65127 62962\nf 62960 62963 62961\nf 62961 62963 62965\nf 62961 62965 65132\nf 62961 65132 65129\nf 62962 65127 65130\nf 62962 65130 62966\nf 62963 62964 62965\nf 62964 62967 62965\nf 62965 62967 65132\nf 62966 65130 65133\nf 62966 65133 62968\nf 62967 62969 65139\nf 62967 65135 65132\nf 62967 65139 65135\nf 62968 65133 65136\nf 62968 65136 62970\nf 62969 62972 65141\nf 62969 65141 65139\nf 62970 62971 62974\nf 62970 62974 62973\nf 62970 65136 62971\nf 62971 65136 65137\nf 62971 65137 65140\nf 62971 65140 62974\nf 62972 62975 65143\nf 62972 65143 65141\nf 62973 62974 62977\nf 62973 62977 62976\nf 62974 65140 65142\nf 62974 65142 62977\nf 62975 62978 65145\nf 62975 65145 65143\nf 62976 62977 62980\nf 62976 62980 62979\nf 62977 65142 65144\nf 62977 65144 62980\nf 62978 62981 65147\nf 62978 65147 65145\nf 62979 62980 62983\nf 62979 62983 62982\nf 62980 65144 65146\nf 62980 65146 62983\nf 62981 62984 65149\nf 62981 65149 65147\nf 62982 62983 62986\nf 62982 62986 62985\nf 62983 65146 65148\nf 62983 65148 62986\nf 62984 62987 65151\nf 62984 65151 65149\nf 62985 62986 62989\nf 62985 62989 62988\nf 62986 65148 65150\nf 62986 65150 62989\nf 62987 62990 65153\nf 62987 65153 65151\nf 62988 62989 62994\nf 62988 62994 62992\nf 62989 65150 65152\nf 62989 65152 62994\nf 62990 62991 65155\nf 62990 65155 65153\nf 62991 62995 62996\nf 62991 62996 65155\nf 62992 62994 62993\nf 62993 62994 65154\nf 62993 65154 62997\nf 62994 65152 65154\nf 62995 62998 62996\nf 62996 62998 62999\nf 62996 62999 65158\nf 62996 65158 65155\nf 62997 65154 65156\nf 62997 65156 63000\nf 62998 63001 62999\nf 62999 63001 63002\nf 62999 63002 65161\nf 62999 65161 65158\nf 63000 65156 65159\nf 63000 65159 63003\nf 63001 63004 63002\nf 63002 63004 63005\nf 63002 63005 65164\nf 63002 65164 65161\nf 63003 65159 65162\nf 63003 65162 63006\nf 63004 63007 63005\nf 63005 63007 63009\nf 63005 63009 65168\nf 63005 65168 65164\nf 63006 65162 65165\nf 63006 65165 63010\nf 63007 63008 63009\nf 63008 63012 63009\nf 63009 63012 65168\nf 63010 63011 63014\nf 63010 63014 63013\nf 63010 65165 63011\nf 63011 65165 65166\nf 63011 65166 65169\nf 63011 65169 63014\nf 63012 63015 65173\nf 63012 65170 65168\nf 63012 65173 65170\nf 63013 63014 65172\nf 63013 65172 65174\nf 63013 65174 63017\nf 63014 65169 65171\nf 63014 65171 65172\nf 63015 63016 65176\nf 63015 65176 65173\nf 63016 63018 63019\nf 63016 63019 65176\nf 63017 65174 63020\nf 63018 63022 63019\nf 63019 63022 63023\nf 63019 63023 65179\nf 63019 65179 65176\nf 63020 63025 63021\nf 63020 65174 65177\nf 63020 65177 65180\nf 63020 65180 63025\nf 63021 63025 63024\nf 63022 63026 63023\nf 63023 63026 63027\nf 63023 63027 65182\nf 63023 65182 65179\nf 63024 63025 63029\nf 63024 63029 63028\nf 63025 65180 63029\nf 63026 63030 65186\nf 63026 65186 63027\nf 63027 65183 65182\nf 63027 65186 65183\nf 63028 63029 63032\nf 63028 63032 63031\nf 63029 65180 65184\nf 63029 65184 63032\nf 63030 63033 65190\nf 63030 65190 65186\nf 63031 63032 63035\nf 63031 63035 63034\nf 63032 65184 65188\nf 63032 65188 63035\nf 63033 63036 65193\nf 63033 65193 65190\nf 63034 63035 63038\nf 63034 63038 63037\nf 63035 65188 65191\nf 63035 65191 63038\nf 63036 63039 65195\nf 63036 65195 65193\nf 63037 63038 63041\nf 63037 63041 63040\nf 63038 65191 65194\nf 63038 65194 63041\nf 63039 63042 65197\nf 63039 65197 65195\nf 63040 63041 63045\nf 63040 63045 63044\nf 63041 65194 65196\nf 63041 65196 63045\nf 63042 63043 65199\nf 63042 65199 65197\nf 63043 63046 63047\nf 63043 63047 65199\nf 63044 63045 63049\nf 63044 63049 63048\nf 63045 65196 65198\nf 63045 65198 63049\nf 63046 63050 63047\nf 63047 63050 63051\nf 63047 63051 65201\nf 63047 65201 65199\nf 63048 63049 63053\nf 63048 63053 63052\nf 63049 65198 65200\nf 63049 65200 63053\nf 63050 63054 63051\nf 63051 63054 63055\nf 63051 63055 65203\nf 63051 65203 65201\nf 63052 63053 63057\nf 63052 63057 63056\nf 63053 65200 65202\nf 63053 65202 63057\nf 63054 63058 63055\nf 63055 63058 63059\nf 63055 63059 65205\nf 63055 65205 65203\nf 63056 63057 63061\nf 63056 63061 63060\nf 63057 65202 65204\nf 63057 65204 63061\nf 63058 63062 65209\nf 63058 65209 63059\nf 63059 65206 65205\nf 63059 65209 65206\nf 63060 63061 63064\nf 63060 63064 63063\nf 63061 65204 65207\nf 63061 65207 63064\nf 63062 63065 65213\nf 63062 65213 65209\nf 63063 63064 63067\nf 63063 63067 63066\nf 63064 65207 65211\nf 63064 65211 63067\nf 63065 63068 65217\nf 63065 65217 65213\nf 63066 63067 63070\nf 63066 63070 63069\nf 63067 65211 65215\nf 63067 65215 63070\nf 63068 63071 65220\nf 63068 65220 65217\nf 63069 63070 63073\nf 63069 63073 63072\nf 63070 65215 65218\nf 63070 65218 63073\nf 63071 63075 65223\nf 63071 65223 65220\nf 63072 63073 63079\nf 63072 63079 63074\nf 63073 63077 63079\nf 63073 65218 65221\nf 63073 65221 63077\nf 63074 63079 63078\nf 63075 63076 65226\nf 63075 65226 65223\nf 63076 63080 63081\nf 63076 63081 65226\nf 63077 63082 63085\nf 63077 63085 63079\nf 63077 65221 65224\nf 63077 65224 63082\nf 63078 63079 63085\nf 63078 63085 63083\nf 63080 63086 63081\nf 63081 63086 63087\nf 63081 63087 65229\nf 63081 65229 65226\nf 63082 63089 63085\nf 63082 65224 65227\nf 63082 65227 63089\nf 63083 63085 63084\nf 63084 63085 63089\nf 63084 63089 63088\nf 63086 63090 63087\nf 63087 63090 63091\nf 63087 63091 65232\nf 63087 65232 65229\nf 63088 63089 63093\nf 63088 63093 63092\nf 63089 65227 65230\nf 63089 65230 63093\nf 63090 63094 63091\nf 63091 63094 63095\nf 63091 63095 65235\nf 63091 65235 65232\nf 63092 63093 63097\nf 63092 63097 63096\nf 63093 65230 65233\nf 63093 65233 63097\nf 63094 63098 63095\nf 63095 63098 63099\nf 63095 63099 65238\nf 63095 65238 65235\nf 63096 63097 63101\nf 63096 63101 63100\nf 63097 65233 65236\nf 63097 65236 63101\nf 63098 63102 63099\nf 63099 63102 63103\nf 63099 63103 65241\nf 63099 65241 65238\nf 63100 63101 63105\nf 63100 63105 63104\nf 63101 65236 65239\nf 63101 65239 63105\nf 63102 63106 63103\nf 63103 63106 63107\nf 63103 63107 65244\nf 63103 65244 65241\nf 63104 63105 63109\nf 63104 63109 63108\nf 63105 65239 65242\nf 63105 65242 63109\nf 63106 63110 63107\nf 63107 63110 63111\nf 63107 63111 65247\nf 63107 65247 65244\nf 63108 63109 63113\nf 63108 63113 63112\nf 63109 65242 65245\nf 63109 65245 63113\nf 63110 63114 63111\nf 63111 63114 63115\nf 63111 63115 65250\nf 63111 65250 65247\nf 63112 63113 63117\nf 63112 63117 63116\nf 63113 65245 65248\nf 63113 65248 63117\nf 63114 63118 63115\nf 63115 63118 63119\nf 63115 63119 65253\nf 63115 65253 65250\nf 63116 63117 63121\nf 63116 63121 63120\nf 63117 65248 65251\nf 63117 65251 63121\nf 63118 63122 63119\nf 63119 63122 63123\nf 63119 63123 65257\nf 63119 65257 65253\nf 63120 63121 63126\nf 63120 63126 63125\nf 63121 63124 63126\nf 63121 65251 65254\nf 63121 65254 63124\nf 63122 63127 65260\nf 63122 65260 63123\nf 63123 65258 65257\nf 63123 65260 65258\nf 63124 63128 63130\nf 63124 63130 63126\nf 63124 65254 65255\nf 63124 65255 65259\nf 63124 65259 63128\nf 63125 63126 63130\nf 63125 63130 63129\nf 63127 63131 65263\nf 63127 65263 65260\nf 63128 63133 63135\nf 63128 63135 63130\nf 63128 65259 65262\nf 63128 65262 63133\nf 63129 63130 63135\nf 63129 63135 63134\nf 63131 63132 65267\nf 63131 65267 65263\nf 63132 63136 63137\nf 63132 63137 65267\nf 63133 63139 63135\nf 63133 65262 65265\nf 63133 65265 65266\nf 63133 65266 63139\nf 63134 63135 63139\nf 63134 63139 63138\nf 63136 63140 63137\nf 63137 63140 63141\nf 63137 63141 65271\nf 63137 65271 65267\nf 63138 63139 63144\nf 63138 63144 63142\nf 63139 65266 65269\nf 63139 65269 63144\nf 63140 63145 63141\nf 63141 63145 63146\nf 63141 63146 65276\nf 63141 65276 65271\nf 63142 63144 63143\nf 63143 63144 65273\nf 63143 65273 65274\nf 63143 65274 63147\nf 63144 65269 65273\nf 63145 63149 63146\nf 63146 63149 63150\nf 63146 63150 65279\nf 63146 65279 65276\nf 63147 63148 63152\nf 63147 63152 63151\nf 63147 65274 63148\nf 63148 65274 65277\nf 63148 65277 63152\nf 63149 63153 63150\nf 63150 63153 63154\nf 63150 63154 65282\nf 63150 65282 65279\nf 63151 63152 63156\nf 63151 63156 63155\nf 63152 65277 65280\nf 63152 65280 63156\nf 63153 63157 63154\nf 63154 63157 63158\nf 63154 63158 65285\nf 63154 65285 65282\nf 63155 63156 63160\nf 63155 63160 63159\nf 63156 65280 65283\nf 63156 65283 63160\nf 63157 63161 63158\nf 63158 63161 63162\nf 63158 63162 65288\nf 63158 65288 65285\nf 63159 63160 63164\nf 63159 63164 63163\nf 63160 65283 65286\nf 63160 65286 63164\nf 63161 63165 63162\nf 63162 63165 63166\nf 63162 63166 65291\nf 63162 65291 65288\nf 63163 63164 63168\nf 63163 63168 63167\nf 63164 65286 65289\nf 63164 65289 63168\nf 63165 63169 63166\nf 63166 63169 63170\nf 63166 63170 65294\nf 63166 65294 65291\nf 63167 63168 63172\nf 63167 63172 63171\nf 63168 65289 65292\nf 63168 65292 63172\nf 63169 63173 63170\nf 63170 63173 63174\nf 63170 63174 65297\nf 63170 65297 65294\nf 63171 63172 63176\nf 63171 63176 63175\nf 63172 65292 65295\nf 63172 65295 63176\nf 63173 63177 65301\nf 63173 65301 63174\nf 63174 65298 65297\nf 63174 65301 65298\nf 63175 63176 63180\nf 63175 63180 63178\nf 63176 65295 65299\nf 63176 65299 63180\nf 63177 63181 65306\nf 63177 65306 65301\nf 63178 63180 63179\nf 63179 63180 65303\nf 63179 65303 65304\nf 63179 65304 63182\nf 63180 65299 65303\nf 63181 63184 65310\nf 63181 65310 65306\nf 63182 63183 63186\nf 63182 63186 63185\nf 63182 65304 63183\nf 63183 65304 65308\nf 63183 65308 63186\nf 63184 63187 65314\nf 63184 65314 65310\nf 63185 63186 63189\nf 63185 63189 63188\nf 63186 65308 65312\nf 63186 65312 63189\nf 63187 63190 65318\nf 63187 65318 65314\nf 63188 63189 63192\nf 63188 63192 63191\nf 63189 65312 65316\nf 63189 65316 63192\nf 63190 63193 65321\nf 63190 65321 65318\nf 63191 63192 63195\nf 63191 63195 63194\nf 63192 65316 65319\nf 63192 65319 63195\nf 63193 63196 65324\nf 63193 65324 65321\nf 63194 63195 63199\nf 63194 63199 63197\nf 63195 65319 65322\nf 63195 65322 63199\nf 63196 63200 65327\nf 63196 65327 65324\nf 63197 63199 63198\nf 63198 63199 65325\nf 63198 65325 63201\nf 63199 65322 65325\nf 63200 63202 65331\nf 63200 65331 65327\nf 63201 65325 65328\nf 63201 65328 63203\nf 63202 63205 65333\nf 63202 65333 65331\nf 63203 63204 63208\nf 63203 63208 63206\nf 63203 65328 63204\nf 63204 65328 65329\nf 63204 65329 65332\nf 63204 65332 63208\nf 63205 63209 65335\nf 63205 65335 65333\nf 63206 63208 63207\nf 63207 63208 65334\nf 63207 65334 63210\nf 63208 65332 65334\nf 63209 63211 65337\nf 63209 65337 65335\nf 63210 65334 65336\nf 63210 65336 63212\nf 63211 63213 65340\nf 63211 65340 65337\nf 63212 65336 65338\nf 63212 65338 63214\nf 63213 63215 65343\nf 63213 65343 65340\nf 63214 65338 65341\nf 63214 65341 63216\nf 63215 63217 65347\nf 63215 65347 65343\nf 63216 65341 65344\nf 63216 65344 63219\nf 63217 63218 65349\nf 63217 65349 65347\nf 63218 63221 63222\nf 63218 63222 65349\nf 63219 63220 63224\nf 63219 63224 63223\nf 63219 65344 63220\nf 63220 65344 65345\nf 63220 65345 65348\nf 63220 65348 63224\nf 63221 63225 63222\nf 63222 63225 63226\nf 63222 63226 65351\nf 63222 65351 65349\nf 63223 63224 63228\nf 63223 63228 63227\nf 63224 65348 65350\nf 63224 65350 63228\nf 63225 63229 65354\nf 63225 65354 63226\nf 63226 65352 65351\nf 63226 65354 65352\nf 63227 63228 63231\nf 63227 63231 63230\nf 63228 65350 65353\nf 63228 65353 63231\nf 63229 63232 65357\nf 63229 65357 65354\nf 63230 63231 63234\nf 63230 63234 63233\nf 63231 65353 65356\nf 63231 65356 63234\nf 63232 63235 65359\nf 63232 65359 65357\nf 63233 63234 63237\nf 63233 63237 63236\nf 63234 65356 65358\nf 63234 65358 63237\nf 63235 63238 65361\nf 63235 65361 65359\nf 63236 63237 63240\nf 63236 63240 63239\nf 63237 65358 65360\nf 63237 65360 63240\nf 63238 63241 65364\nf 63238 65364 65361\nf 63239 63240 65363\nf 63239 65363 65365\nf 63239 65365 63242\nf 63240 65360 65362\nf 63240 65362 65363\nf 63241 63243 65367\nf 63241 65367 65364\nf 63242 65365 63244\nf 63243 63245 65370\nf 63243 65370 65367\nf 63244 65365 65368\nf 63244 65368 63247\nf 63245 63246 65373\nf 63245 65373 65370\nf 63246 63248 63249\nf 63246 63249 65373\nf 63247 65368 65371\nf 63247 65371 63250\nf 63248 63252 65376\nf 63248 65376 63249\nf 63249 65374 65373\nf 63249 65376 65374\nf 63250 63254 63251\nf 63250 65371 65375\nf 63250 65375 65378\nf 63250 65378 63254\nf 63251 63254 63253\nf 63252 63255 65379\nf 63252 65379 65376\nf 63253 63254 63258\nf 63253 63258 63257\nf 63254 65378 63258\nf 63255 63256 65381\nf 63255 65381 65379\nf 63256 63259 63260\nf 63256 63260 65381\nf 63257 63258 63263\nf 63257 63263 63261\nf 63258 65378 65380\nf 63258 65380 63263\nf 63259 63264 65385\nf 63259 65385 63260\nf 63260 65382 65381\nf 63260 65385 65382\nf 63261 63263 63262\nf 63262 63263 65383\nf 63262 65383 63265\nf 63263 65380 65383\nf 63264 63266 65389\nf 63264 65389 65385\nf 63265 65383 65387\nf 63265 65387 63268\nf 63266 63267 65392\nf 63266 65392 65389\nf 63267 63269 63270\nf 63267 63270 65392\nf 63268 65387 65390\nf 63268 65390 63271\nf 63269 63272 65396\nf 63269 65396 63270\nf 63270 65393 65392\nf 63270 65396 65393\nf 63271 65390 65394\nf 63271 65394 63274\nf 63272 63273 65399\nf 63272 65399 65396\nf 63273 63275 63276\nf 63273 63276 65399\nf 63274 65394 65397\nf 63274 65397 63277\nf 63275 63278 65404\nf 63275 65404 63276\nf 63276 65400 65399\nf 63276 65404 65400\nf 63277 65397 65401\nf 63277 65401 63280\nf 63278 63279 65404\nf 63279 63282 65407\nf 63279 65405 65404\nf 63279 65407 65405\nf 63280 63281 63285\nf 63280 63285 63284\nf 63280 65401 63281\nf 63281 65401 65402\nf 63281 65402 65406\nf 63281 65406 63285\nf 63282 63283 65411\nf 63282 65411 65407\nf 63283 63287 63288\nf 63283 63288 65411\nf 63284 63285 63286\nf 63285 65406 65409\nf 63285 65409 65410\nf 63285 65410 63286\nf 63286 63290 63289\nf 63286 65410 63290\nf 63287 63292 65417\nf 63287 65417 63288\nf 63288 65412 65411\nf 63288 65417 65412\nf 63289 63290 65415\nf 63289 65415 63291\nf 63290 65410 65413\nf 63290 65413 65415\nf 63291 65415 65416\nf 63291 65416 63293\nf 63292 63293 65421\nf 63292 65421 65417\nf 63293 63294 65421\nf 63293 65416 63294\nf 63294 65416 65419\nf 63294 65419 65422\nf 63294 65422 65421\nf 63295 63296 65427\nf 63295 63304 63302\nf 63295 65426 63304\nf 63295 65427 65426\nf 63296 63297 65428\nf 63296 65428 65427\nf 63297 63305 65430\nf 63297 65429 65428\nf 63297 65430 65429\nf 63298 63299 65435\nf 63298 63314 63312\nf 63298 65434 63314\nf 63298 65435 65434\nf 63299 63315 65438\nf 63299 65437 65435\nf 63299 65438 65437\nf 63300 63301 65442\nf 63300 63303 63301\nf 63300 65442 65443\nf 63300 65443 63322\nf 63301 63303 63304\nf 63301 63304 65426\nf 63301 65425 65442\nf 63301 65426 65425\nf 63302 63304 63303\nf 63305 63306 63307\nf 63305 63307 65430\nf 63306 63308 63307\nf 63307 63308 63309\nf 63307 63309 65431\nf 63307 65431 65430\nf 63308 63325 63309\nf 63309 63310 65432\nf 63309 63325 63327\nf 63309 63327 63310\nf 63309 65432 65431\nf 63310 63327 65458\nf 63310 65445 65432\nf 63310 65458 65445\nf 63311 63314 65434\nf 63311 63328 63331\nf 63311 63331 63314\nf 63311 65433 65447\nf 63311 65434 65433\nf 63311 65447 63328\nf 63312 63314 63313\nf 63313 63314 63331\nf 63313 63331 63329\nf 63315 63316 63317\nf 63315 63317 65438\nf 63316 63332 63317\nf 63317 63318 65439\nf 63317 63332 63334\nf 63317 63334 63318\nf 63317 65439 65438\nf 63318 63319 65440\nf 63318 63334 63335\nf 63318 63335 63319\nf 63318 65440 65439\nf 63319 63335 63336\nf 63319 63336 65451\nf 63319 65450 65440\nf 63319 65451 65450\nf 63320 63321 65455\nf 63320 63323 63321\nf 63320 65455 65456\nf 63320 65456 63338\nf 63321 63323 63324\nf 63321 63324 65443\nf 63321 65441 65455\nf 63321 65443 65441\nf 63322 63324 63323\nf 63322 65443 63324\nf 63325 63326 63327\nf 63326 63340 63342\nf 63326 63342 65459\nf 63326 65459 63327\nf 63327 65459 65458\nf 63328 63345 63331\nf 63328 65447 65448\nf 63328 65448 65461\nf 63328 65461 63345\nf 63329 63331 63330\nf 63330 63331 63345\nf 63330 63345 63343\nf 63332 63333 63334\nf 63333 63346 63334\nf 63334 63346 63348\nf 63334 63348 63335\nf 63335 63348 63350\nf 63335 63350 63336\nf 63336 63337 65453\nf 63336 63350 63351\nf 63336 63351 63337\nf 63336 65453 65451\nf 63337 63351 63352\nf 63337 63352 65463\nf 63337 65462 65453\nf 63337 65463 65462\nf 63338 63339 63356\nf 63338 63356 63354\nf 63338 65456 63339\nf 63339 65456 65467\nf 63339 65467 63356\nf 63340 63341 63342\nf 63341 63357 63342\nf 63342 63357 65468\nf 63342 65468 65459\nf 63343 63345 63344\nf 63344 63345 65470\nf 63344 65470 65471\nf 63344 65471 63358\nf 63345 65461 65470\nf 63346 63347 63348\nf 63347 63349 63348\nf 63348 63349 63350\nf 63349 63360 63350\nf 63350 63360 63362\nf 63350 63362 63351\nf 63351 63362 63363\nf 63351 63363 63352\nf 63352 63353 65465\nf 63352 63363 63364\nf 63352 63364 63353\nf 63352 65465 65463\nf 63353 63364 65480\nf 63353 65473 65465\nf 63353 65480 65473\nf 63354 63356 63355\nf 63355 63356 65475\nf 63355 65475 63365\nf 63356 65467 65475\nf 63357 63366 65476\nf 63357 65476 65468\nf 63358 63359 63369\nf 63358 63369 63368\nf 63358 65471 63359\nf 63359 65471 65479\nf 63359 65479 63369\nf 63360 63361 63362\nf 63361 63370 63362\nf 63362 63370 63371\nf 63362 63371 63363\nf 63363 63371 63372\nf 63363 63372 63364\nf 63364 63372 65486\nf 63364 65486 65480\nf 63365 65475 65482\nf 63365 65482 63373\nf 63366 63367 65477\nf 63366 63375 63367\nf 63366 65477 65476\nf 63367 63375 63376\nf 63367 63376 65489\nf 63367 65483 65477\nf 63367 65489 65483\nf 63368 63369 63378\nf 63368 63378 63377\nf 63369 65479 65484\nf 63369 65484 63378\nf 63370 63379 63371\nf 63371 63379 63380\nf 63371 63380 63381\nf 63371 63381 63372\nf 63372 63381 65492\nf 63372 65492 65486\nf 63373 63383 63374\nf 63373 65482 65488\nf 63373 65488 65494\nf 63373 65494 63383\nf 63374 63383 63382\nf 63375 63384 63376\nf 63376 63384 63385\nf 63376 63385 65495\nf 63376 65495 65489\nf 63377 63378 63387\nf 63377 63387 63386\nf 63378 65484 65490\nf 63378 65490 63387\nf 63379 63388 63380\nf 63380 63388 63389\nf 63380 63389 63390\nf 63380 63390 63381\nf 63381 63390 65499\nf 63381 65499 65492\nf 63382 63383 63392\nf 63382 63392 63391\nf 63383 65494 63392\nf 63384 63393 63385\nf 63385 63393 63394\nf 63385 63394 65502\nf 63385 65502 65495\nf 63386 63387 63396\nf 63386 63396 63395\nf 63387 65490 65497\nf 63387 65497 63396\nf 63388 63397 63389\nf 63389 63397 63399\nf 63389 63399 63400\nf 63389 63400 63390\nf 63390 63400 65506\nf 63390 65506 65499\nf 63391 63392 63402\nf 63391 63402 63401\nf 63392 65494 65501\nf 63392 65501 63402\nf 63393 63403 63394\nf 63394 63403 63404\nf 63394 63404 65510\nf 63394 65510 65502\nf 63395 63396 63406\nf 63395 63406 63405\nf 63396 65497 65504\nf 63396 65504 63406\nf 63397 63398 63399\nf 63398 63408 63399\nf 63399 63408 63409\nf 63399 63409 63400\nf 63400 63409 63410\nf 63400 63410 65507\nf 63400 65507 65506\nf 63401 63402 63412\nf 63401 63412 63411\nf 63402 65501 65509\nf 63402 65509 63412\nf 63403 63413 63404\nf 63404 63413 63414\nf 63404 63414 65517\nf 63404 65517 65510\nf 63405 63406 63417\nf 63405 63417 63407\nf 63406 63415 63417\nf 63406 65504 65512\nf 63406 65512 63415\nf 63407 63417 63416\nf 63408 63418 63409\nf 63409 63418 63419\nf 63409 63419 63420\nf 63409 63420 63410\nf 63410 63420 65521\nf 63410 65514 65507\nf 63410 65521 65514\nf 63411 63412 65516\nf 63411 65516 65522\nf 63411 65522 63421\nf 63412 65509 65515\nf 63412 65515 65516\nf 63413 63422 63414\nf 63414 63422 63423\nf 63414 63423 65524\nf 63414 65524 65517\nf 63415 63424 63426\nf 63415 63426 63417\nf 63415 65512 65519\nf 63415 65519 63424\nf 63416 63417 63426\nf 63416 63426 63425\nf 63418 63428 63419\nf 63419 63428 63429\nf 63419 63429 63430\nf 63419 63430 63420\nf 63420 63430 65528\nf 63420 65528 65521\nf 63421 65522 63431\nf 63422 63432 63423\nf 63423 63432 63434\nf 63423 63434 65530\nf 63423 65530 65524\nf 63424 63435 63436\nf 63424 63436 63426\nf 63424 65519 65526\nf 63424 65526 63435\nf 63425 63426 63438\nf 63425 63438 63427\nf 63426 63436 63438\nf 63427 63438 63437\nf 63428 63440 63429\nf 63429 63440 63441\nf 63429 63441 63442\nf 63429 63442 63430\nf 63430 63442 65534\nf 63430 65534 65528\nf 63431 65522 65529\nf 63431 65529 63443\nf 63432 63433 63434\nf 63433 63444 63445\nf 63433 63445 63434\nf 63434 63445 63446\nf 63434 63446 65537\nf 63434 65537 65530\nf 63435 63447 63448\nf 63435 63448 63436\nf 63435 65526 65532\nf 63435 65532 63447\nf 63436 63448 63449\nf 63436 63449 63438\nf 63437 63438 63451\nf 63437 63451 63439\nf 63438 63449 63451\nf 63439 63451 63450\nf 63440 63455 63441\nf 63441 63455 63457\nf 63441 63457 63442\nf 63442 63457 65542\nf 63442 65535 65534\nf 63442 65542 65535\nf 63443 65529 65536\nf 63443 65536 63458\nf 63444 63459 63445\nf 63445 63459 63460\nf 63445 63460 63461\nf 63445 63461 63446\nf 63446 63461 65545\nf 63446 65545 65537\nf 63447 63462 63448\nf 63447 65532 65539\nf 63447 65539 65541\nf 63447 65541 63462\nf 63448 63462 63463\nf 63448 63463 63449\nf 63449 63463 63464\nf 63449 63464 63451\nf 63450 63451 63466\nf 63450 63466 63452\nf 63451 63464 63466\nf 63452 63466 63465\nf 63453 63470 63472\nf 63453 63472 63473\nf 63453 63473 63454\nf 63454 63473 63474\nf 63454 63474 63456\nf 63455 63456 63457\nf 63456 63474 63457\nf 63457 63474 63475\nf 63457 63475 65550\nf 63457 65550 65542\nf 63458 65536 65544\nf 63458 65544 63476\nf 63459 63478 63460\nf 63460 63478 63480\nf 63460 63480 63481\nf 63460 63481 63461\nf 63461 63481 65553\nf 63461 65553 65545\nf 63462 63482 63483\nf 63462 63483 63463\nf 63462 65541 65548\nf 63462 65548 63482\nf 63463 63483 63484\nf 63463 63484 63464\nf 63464 63484 63485\nf 63464 63485 63466\nf 63465 63466 63486\nf 63465 63486 63467\nf 63466 63485 63486\nf 63467 63486 63487\nf 63467 63487 63468\nf 63468 63487 63488\nf 63468 63488 63469\nf 63469 63488 63489\nf 63469 63489 63471\nf 63470 63471 63472\nf 63471 63489 63472\nf 63472 63489 63490\nf 63472 63490 63491\nf 63472 63491 63473\nf 63473 63491 63492\nf 63473 63492 63474\nf 63474 63492 63493\nf 63474 63493 63475\nf 63475 63493 65558\nf 63475 65558 65550\nf 63476 63495 63477\nf 63476 65544 65552\nf 63476 65552 65560\nf 63476 65560 63495\nf 63477 63495 63494\nf 63478 63479 63480\nf 63479 63496 63497\nf 63479 63497 63480\nf 63480 63497 63498\nf 63480 63498 63481\nf 63481 63498 65561\nf 63481 65554 65553\nf 63481 65561 65554\nf 63482 63499 63500\nf 63482 63500 63483\nf 63482 65548 65556\nf 63482 65556 63499\nf 63483 63500 63501\nf 63483 63501 63484\nf 63484 63501 63502\nf 63484 63502 63485\nf 63485 63502 63503\nf 63485 63503 63486\nf 63486 63503 63504\nf 63486 63504 63487\nf 63487 63504 63505\nf 63487 63505 63488\nf 63488 63505 63506\nf 63488 63506 63489\nf 63489 63506 63507\nf 63489 63507 63490\nf 63490 63507 63508\nf 63490 63508 63491\nf 63491 63508 63509\nf 63491 63509 63492\nf 63492 63509 63510\nf 63492 63510 63493\nf 63493 63510 65566\nf 63493 65566 65558\nf 63494 63495 63512\nf 63494 63512 63511\nf 63495 65560 63512\nf 63496 63513 63497\nf 63497 63513 63514\nf 63497 63514 63515\nf 63497 63515 63498\nf 63498 63515 65569\nf 63498 65569 65561\nf 63499 63516 63517\nf 63499 63517 63500\nf 63499 65556 65564\nf 63499 65564 63516\nf 63500 63517 63518\nf 63500 63518 63501\nf 63501 63518 63519\nf 63501 63519 63502\nf 63502 63519 63520\nf 63502 63520 63503\nf 63503 63520 63521\nf 63503 63521 63504\nf 63504 63521 63522\nf 63504 63522 63505\nf 63505 63522 63523\nf 63505 63523 63506\nf 63506 63523 63524\nf 63506 63524 63507\nf 63507 63524 63525\nf 63507 63525 63508\nf 63508 63525 63526\nf 63508 63526 63509\nf 63509 63526 63527\nf 63509 63527 63510\nf 63510 63527 65575\nf 63510 65575 65566\nf 63511 63512 63529\nf 63511 63529 63528\nf 63512 65560 65568\nf 63512 65568 63529\nf 63513 63530 63514\nf 63514 63530 63531\nf 63514 63531 63532\nf 63514 63532 63515\nf 63515 63532 65578\nf 63515 65578 65569\nf 63516 63533 63517\nf 63516 65564 65572\nf 63516 65572 65574\nf 63516 65574 63533\nf 63517 63533 63534\nf 63517 63534 63518\nf 63518 63534 63535\nf 63518 63535 63519\nf 63519 63535 63536\nf 63519 63536 63520\nf 63520 63536 63537\nf 63520 63537 63521\nf 63521 63537 63538\nf 63521 63538 63522\nf 63522 63538 63539\nf 63522 63539 63523\nf 63523 63539 63540\nf 63523 63540 63524\nf 63524 63540 63541\nf 63524 63541 63525\nf 63525 63541 63542\nf 63525 63542 63526\nf 63526 63542 63543\nf 63526 63543 63527\nf 63527 63543 65584\nf 63527 65584 65575\nf 63528 63529 63545\nf 63528 63545 63544\nf 63529 65568 65577\nf 63529 65577 63545\nf 63530 63546 63531\nf 63531 63546 63547\nf 63531 63547 63548\nf 63531 63548 63532\nf 63532 63548 65587\nf 63532 65587 65578\nf 63533 63549 63550\nf 63533 63550 63534\nf 63533 65574 65582\nf 63533 65582 63549\nf 63534 63550 63551\nf 63534 63551 63535\nf 63535 63551 63552\nf 63535 63552 63536\nf 63536 63552 63553\nf 63536 63553 63537\nf 63537 63553 63554\nf 63537 63554 63538\nf 63538 63554 63555\nf 63538 63555 63539\nf 63539 63555 63556\nf 63539 63556 63540\nf 63540 63556 63557\nf 63540 63557 63541\nf 63541 63557 63558\nf 63541 63558 63542\nf 63542 63558 63559\nf 63542 63559 63543\nf 63543 63559 65593\nf 63543 65593 65584\nf 63544 63545 63561\nf 63544 63561 63560\nf 63545 65577 65586\nf 63545 65586 63561\nf 63546 63562 63547\nf 63547 63562 63563\nf 63547 63563 63564\nf 63547 63564 63548\nf 63548 63564 65595\nf 63548 65595 65587\nf 63549 63565 63566\nf 63549 63566 63550\nf 63549 65582 65591\nf 63549 65591 63565\nf 63550 63566 63567\nf 63550 63567 63551\nf 63551 63567 63568\nf 63551 63568 63552\nf 63552 63568 63569\nf 63552 63569 63553\nf 63553 63569 63570\nf 63553 63570 63554\nf 63554 63570 63571\nf 63554 63571 63555\nf 63555 63571 63572\nf 63555 63572 63556\nf 63556 63572 63573\nf 63556 63573 63557\nf 63557 63573 63574\nf 63557 63574 63558\nf 63558 63574 63575\nf 63558 63575 63559\nf 63559 63575 65601\nf 63559 65601 65593\nf 63560 63561 63577\nf 63560 63577 63576\nf 63561 65586 65594\nf 63561 65594 63577\nf 63562 63578 63563\nf 63563 63578 63579\nf 63563 63579 63580\nf 63563 63580 63564\nf 63564 63580 65603\nf 63564 65603 65595\nf 63565 63581 63582\nf 63565 63582 63566\nf 63565 65591 65599\nf 63565 65599 63581\nf 63566 63582 63583\nf 63566 63583 63567\nf 63567 63583 63584\nf 63567 63584 63568\nf 63568 63584 63585\nf 63568 63585 63569\nf 63569 63585 63586\nf 63569 63586 63570\nf 63570 63586 63587\nf 63570 63587 63571\nf 63571 63587 63588\nf 63571 63588 63572\nf 63572 63588 63589\nf 63572 63589 63573\nf 63573 63589 63590\nf 63573 63590 63574\nf 63574 63590 63591\nf 63574 63591 63575\nf 63575 63591 65609\nf 63575 65609 65601\nf 63576 63577 63593\nf 63576 63593 63592\nf 63577 65594 65602\nf 63577 65602 63593\nf 63578 63594 63579\nf 63579 63594 63595\nf 63579 63595 63596\nf 63579 63596 63580\nf 63580 63596 65612\nf 63580 65612 65603\nf 63581 63597 63598\nf 63581 63598 63582\nf 63581 65599 65607\nf 63581 65607 63597\nf 63582 63598 63599\nf 63582 63599 63583\nf 63583 63599 63600\nf 63583 63600 63584\nf 63584 63600 63601\nf 63584 63601 63585\nf 63585 63601 63602\nf 63585 63602 63586\nf 63586 63602 63603\nf 63586 63603 63587\nf 63587 63603 63604\nf 63587 63604 63588\nf 63588 63604 63605\nf 63588 63605 63589\nf 63589 63605 63606\nf 63589 63606 63590\nf 63590 63606 63591\nf 63591 63606 65620\nf 63591 65610 65609\nf 63591 65620 65610\nf 63592 63593 63608\nf 63592 63608 63607\nf 63593 65602 65611\nf 63593 65611 63608\nf 63594 63609 63595\nf 63595 63609 63611\nf 63595 63611 63613\nf 63595 63613 63596\nf 63596 63613 63614\nf 63596 63614 65613\nf 63596 65613 65612\nf 63597 63627 63628\nf 63597 63628 63629\nf 63597 63629 63598\nf 63597 65607 65617\nf 63597 65617 63627\nf 63598 63629 63630\nf 63598 63630 63599\nf 63599 63630 63631\nf 63599 63631 63600\nf 63600 63631 63632\nf 63600 63632 63601\nf 63601 63632 63633\nf 63601 63633 63602\nf 63602 63633 63634\nf 63602 63634 63603\nf 63603 63634 63635\nf 63603 63635 63604\nf 63604 63635 63636\nf 63604 63636 63605\nf 63605 63636 63637\nf 63605 63637 63606\nf 63606 63637 65649\nf 63606 65649 65620\nf 63607 63608 63639\nf 63607 63639 63638\nf 63608 65611 65622\nf 63608 65622 63639\nf 63609 63610 63611\nf 63610 63612 63611\nf 63611 63612 63613\nf 63612 63641 63613\nf 63613 63641 63643\nf 63613 63643 63614\nf 63614 63643 63644\nf 63614 63644 65624\nf 63614 65623 65613\nf 63614 65624 65623\nf 63615 63616 65631\nf 63615 63654 63652\nf 63615 65630 63654\nf 63615 65631 65630\nf 63616 63617 65632\nf 63616 65632 65631\nf 63617 63618 65633\nf 63617 65633 65632\nf 63618 63619 65634\nf 63618 65634 65633\nf 63619 63620 65635\nf 63619 65635 65634\nf 63620 63621 65637\nf 63620 65637 65635\nf 63621 63622 65639\nf 63621 65639 65637\nf 63622 63623 65641\nf 63622 65641 65639\nf 63623 63624 65642\nf 63623 65642 65641\nf 63624 63625 65643\nf 63624 65643 65642\nf 63625 63626 65644\nf 63625 65644 65643\nf 63626 63655 65646\nf 63626 65645 65644\nf 63626 65646 65645\nf 63627 63661 63662\nf 63627 63662 63628\nf 63627 65617 65618\nf 63627 65618 65647\nf 63627 65647 63661\nf 63628 63662 63663\nf 63628 63663 63629\nf 63629 63663 63664\nf 63629 63664 63630\nf 63630 63664 63665\nf 63630 63665 63631\nf 63631 63665 63666\nf 63631 63666 63632\nf 63632 63666 63667\nf 63632 63667 63633\nf 63633 63667 63668\nf 63633 63668 63634\nf 63634 63668 63669\nf 63634 63669 63635\nf 63635 63669 63670\nf 63635 63670 63636\nf 63636 63670 63671\nf 63636 63671 63637\nf 63637 63671 65706\nf 63637 65706 65649\nf 63638 63639 63674\nf 63638 63674 63640\nf 63639 63672 63674\nf 63639 65622 65651\nf 63639 65651 63672\nf 63640 63674 63673\nf 63641 63642 63643\nf 63642 63675 63643\nf 63643 63675 63677\nf 63643 63677 63644\nf 63644 63677 63678\nf 63644 63678 65653\nf 63644 65652 65624\nf 63644 65653 65652\nf 63645 63646 65678\nf 63645 63694 63692\nf 63645 65676 63694\nf 63645 65678 65676\nf 63646 63647 65677\nf 63646 63648 63647\nf 63646 65677 65678\nf 63647 63648 63649\nf 63647 63649 65628\nf 63647 65627 65677\nf 63647 65628 65627\nf 63648 63650 63649\nf 63649 63650 63651\nf 63649 63651 65629\nf 63649 65629 65628\nf 63650 63653 63651\nf 63651 63653 63654\nf 63651 63654 65630\nf 63651 65630 65629\nf 63652 63654 63653\nf 63655 63656 63657\nf 63655 63657 65646\nf 63656 63658 65681\nf 63656 65681 63657\nf 63657 65680 65646\nf 63657 65681 65680\nf 63658 63659 65681\nf 63659 63660 65683\nf 63659 65683 65681\nf 63660 63695 65685\nf 63660 65684 65683\nf 63660 65685 65684\nf 63661 63720 63721\nf 63661 63721 63662\nf 63661 65647 65704\nf 63661 65704 63720\nf 63662 63721 63722\nf 63662 63722 63663\nf 63663 63722 63723\nf 63663 63723 63664\nf 63664 63723 63724\nf 63664 63724 63665\nf 63665 63724 63725\nf 63665 63725 63666\nf 63666 63725 63726\nf 63666 63726 63667\nf 63667 63726 63727\nf 63667 63727 63668\nf 63668 63727 63728\nf 63668 63728 63669\nf 63669 63728 63729\nf 63669 63729 63670\nf 63670 63729 63730\nf 63670 63730 63671\nf 63671 63730 65768\nf 63671 65768 65706\nf 63672 63731 63733\nf 63672 63733 63674\nf 63672 65651 65708\nf 63672 65708 63731\nf 63673 63674 63733\nf 63673 63733 63732\nf 63675 63676 63677\nf 63676 63734 63677\nf 63677 63734 63736\nf 63677 63736 63678\nf 63678 63679 65655\nf 63678 63736 63738\nf 63678 63738 63679\nf 63678 65655 65653\nf 63679 63680 65657\nf 63679 63738 63739\nf 63679 63739 63680\nf 63679 65657 65655\nf 63680 63681 65659\nf 63680 63739 63740\nf 63680 63740 63681\nf 63680 65659 65657\nf 63681 63740 63741\nf 63681 63741 65710\nf 63681 65709 65659\nf 63681 65710 65709\nf 63682 63683 65665\nf 63682 63744 63745\nf 63682 63745 63746\nf 63682 63746 63683\nf 63682 65663 65716\nf 63682 65665 65663\nf 63682 65716 63744\nf 63683 63684 65667\nf 63683 63746 63747\nf 63683 63747 63684\nf 63683 65667 65665\nf 63684 63685 65669\nf 63684 63747 63748\nf 63684 63748 63685\nf 63684 65669 65667\nf 63685 63686 65671\nf 63685 63748 63749\nf 63685 63749 63686\nf 63685 65671 65669\nf 63686 63749 63750\nf 63686 63750 65721\nf 63686 65719 65671\nf 63686 65721 65719\nf 63687 63688 65673\nf 63687 63750 63751\nf 63687 63751 63753\nf 63687 63753 63688\nf 63687 65672 65720\nf 63687 65673 65672\nf 63687 65720 63750\nf 63688 63689 65674\nf 63688 63753 63756\nf 63688 63756 63689\nf 63688 65674 65673\nf 63689 63691 65675\nf 63689 63756 63691\nf 63689 65675 65674\nf 63690 63691 63756\nf 63690 63693 63691\nf 63690 63756 63754\nf 63691 63693 63694\nf 63691 63694 65676\nf 63691 65676 65675\nf 63692 63694 63693\nf 63695 63696 63697\nf 63695 63697 65685\nf 63696 63698 63697\nf 63697 63698 63699\nf 63697 63699 65686\nf 63697 65686 65685\nf 63698 63700 63699\nf 63699 63700 63701\nf 63699 63701 65687\nf 63699 65687 65686\nf 63700 63702 63701\nf 63701 63702 63703\nf 63701 63703 65688\nf 63701 65688 65687\nf 63702 63704 65724\nf 63702 65724 63703\nf 63703 65723 65688\nf 63703 65724 65723\nf 63704 63705 65724\nf 63705 63706 65727\nf 63705 65727 65724\nf 63706 63707 65726\nf 63706 63708 63707\nf 63706 65726 65727\nf 63707 63708 63709\nf 63707 63709 65690\nf 63707 65689 65726\nf 63707 65690 65689\nf 63708 63710 63709\nf 63709 63710 63711\nf 63709 63711 65691\nf 63709 65691 65690\nf 63710 63712 65730\nf 63710 65730 63711\nf 63711 65729 65691\nf 63711 65730 65729\nf 63712 63713 65730\nf 63713 63757 65735\nf 63713 65732 65730\nf 63713 65735 65732\nf 63714 63759 63761\nf 63714 63761 63763\nf 63714 63763 65738\nf 63714 65692 65734\nf 63714 65734 63759\nf 63714 65737 65692\nf 63714 65738 65737\nf 63715 63716 65694\nf 63715 63767 63769\nf 63715 63769 63771\nf 63715 63771 63716\nf 63715 65693 65742\nf 63715 65694 65693\nf 63715 65742 63767\nf 63716 63717 65695\nf 63716 63771 63772\nf 63716 63772 63717\nf 63716 65695 65694\nf 63717 63718 65696\nf 63717 63772 63773\nf 63717 63773 63718\nf 63717 65696 65695\nf 63718 63719 65698\nf 63718 63773 63774\nf 63718 63774 63719\nf 63718 65698 65696\nf 63719 63774 63775\nf 63719 63775 65746\nf 63719 65745 65698\nf 63719 65746 65745\nf 63720 63779 63780\nf 63720 63780 63721\nf 63720 65704 65766\nf 63720 65766 63779\nf 63721 63780 63781\nf 63721 63781 63722\nf 63722 63781 63782\nf 63722 63782 63723\nf 63723 63782 63784\nf 63723 63784 63724\nf 63724 63784 63785\nf 63724 63785 63725\nf 63725 63785 63786\nf 63725 63786 63726\nf 63726 63786 63787\nf 63726 63787 63727\nf 63727 63787 63788\nf 63727 63788 63728\nf 63728 63788 63789\nf 63728 63789 63729\nf 63729 63789 63790\nf 63729 63790 63730\nf 63730 63790 65792\nf 63730 65792 65768\nf 63731 63791 63793\nf 63731 63793 63733\nf 63731 65708 65770\nf 63731 65770 63791\nf 63732 63733 63793\nf 63732 63793 63792\nf 63734 63735 63736\nf 63735 63737 63736\nf 63736 63737 63738\nf 63737 63794 63738\nf 63738 63794 63796\nf 63738 63796 63739\nf 63739 63796 63797\nf 63739 63797 63740\nf 63740 63797 63798\nf 63740 63798 63741\nf 63741 63742 65712\nf 63741 63798 63799\nf 63741 63799 63742\nf 63741 65712 65710\nf 63742 63743 65714\nf 63742 63799 63800\nf 63742 63800 63743\nf 63742 65714 65712\nf 63743 63744 65717\nf 63743 63800 63801\nf 63743 63801 63744\nf 63743 65717 65714\nf 63744 63801 63802\nf 63744 63802 63745\nf 63744 65716 65717\nf 63745 63802 63803\nf 63745 63803 63746\nf 63746 63803 63804\nf 63746 63804 63747\nf 63747 63804 63805\nf 63747 63805 63748\nf 63748 63805 63806\nf 63748 63806 63749\nf 63749 63806 63807\nf 63749 63807 63750\nf 63750 63807 63809\nf 63750 63809 63751\nf 63750 65720 65721\nf 63751 63809 63753\nf 63752 63753 63809\nf 63752 63755 63753\nf 63752 63809 63808\nf 63753 63755 63756\nf 63754 63756 63755\nf 63757 63758 63759\nf 63757 63759 65735\nf 63758 63760 63759\nf 63759 63760 63761\nf 63759 65734 65735\nf 63760 63762 63761\nf 63761 63762 63763\nf 63762 63764 63763\nf 63763 63764 63765\nf 63763 63765 65740\nf 63763 65740 65738\nf 63764 63766 63765\nf 63765 63766 63767\nf 63765 63767 65743\nf 63765 65743 65740\nf 63766 63768 63767\nf 63767 63768 63769\nf 63767 65742 65743\nf 63768 63770 63769\nf 63769 63770 63771\nf 63770 63810 63771\nf 63771 63810 63812\nf 63771 63812 63772\nf 63772 63812 63814\nf 63772 63814 63773\nf 63773 63814 63816\nf 63773 63816 63774\nf 63774 63816 63817\nf 63774 63817 63775\nf 63775 63776 65748\nf 63775 63817 63818\nf 63775 63818 63776\nf 63775 65748 65746\nf 63776 63777 65750\nf 63776 63818 63819\nf 63776 63819 63777\nf 63776 65750 65748\nf 63777 63778 65752\nf 63777 63819 63820\nf 63777 63820 63778\nf 63777 65752 65750\nf 63778 63820 63821\nf 63778 63821 65772\nf 63778 65771 65752\nf 63778 65772 65771\nf 63779 63823 63824\nf 63779 63824 63825\nf 63779 63825 63780\nf 63779 65766 65789\nf 63779 65789 63823\nf 63780 63825 63826\nf 63780 63826 63781\nf 63781 63826 63829\nf 63781 63829 63782\nf 63782 63829 63784\nf 63783 63784 63829\nf 63783 63829 63827\nf 63783 63830 63784\nf 63784 63830 63832\nf 63784 63832 63785\nf 63785 63832 63833\nf 63785 63833 63786\nf 63786 63833 63834\nf 63786 63834 63787\nf 63787 63834 63835\nf 63787 63835 63788\nf 63788 63835 63836\nf 63788 63836 63789\nf 63789 63836 63837\nf 63789 63837 63790\nf 63790 63837 65822\nf 63790 65822 65792\nf 63791 63838 63841\nf 63791 63841 63793\nf 63791 65770 65794\nf 63791 65794 63838\nf 63792 63793 63841\nf 63792 63841 63839\nf 63794 63795 63796\nf 63795 63842 63796\nf 63796 63842 63844\nf 63796 63844 63797\nf 63797 63844 63845\nf 63797 63845 63798\nf 63798 63845 63846\nf 63798 63846 63799\nf 63799 63846 63847\nf 63799 63847 63800\nf 63800 63847 63848\nf 63800 63848 63801\nf 63801 63848 63849\nf 63801 63849 63802\nf 63802 63849 63850\nf 63802 63850 63803\nf 63803 63850 63851\nf 63803 63851 63804\nf 63804 63851 63852\nf 63804 63852 63805\nf 63805 63852 63853\nf 63805 63853 63806\nf 63806 63853 63854\nf 63806 63854 63807\nf 63807 63854 63856\nf 63807 63856 63809\nf 63808 63809 63856\nf 63808 63856 63855\nf 63810 63811 63812\nf 63811 63813 63812\nf 63812 63813 63814\nf 63813 63815 63814\nf 63814 63815 63816\nf 63815 63858 63816\nf 63816 63858 63860\nf 63816 63860 63817\nf 63817 63860 63861\nf 63817 63861 63818\nf 63818 63861 63862\nf 63818 63862 63819\nf 63819 63862 63863\nf 63819 63863 63820\nf 63820 63863 63864\nf 63820 63864 63821\nf 63821 63864 63865\nf 63821 63865 65796\nf 63821 65795 65772\nf 63821 65796 65795\nf 63822 63823 65790\nf 63822 63876 63877\nf 63822 63877 63878\nf 63822 63878 63823\nf 63822 65787 65819\nf 63822 65790 65787\nf 63822 65819 63876\nf 63823 63878 63879\nf 63823 63879 63824\nf 63823 65789 65790\nf 63824 63879 63880\nf 63824 63880 63825\nf 63825 63880 63883\nf 63825 63883 63826\nf 63826 63883 63829\nf 63827 63829 63828\nf 63828 63829 63883\nf 63828 63883 63881\nf 63830 63831 63832\nf 63831 63884 63832\nf 63832 63884 63886\nf 63832 63886 63833\nf 63833 63886 63887\nf 63833 63887 63834\nf 63834 63887 63888\nf 63834 63888 63835\nf 63835 63888 63889\nf 63835 63889 63836\nf 63836 63889 63890\nf 63836 63890 63837\nf 63837 63890 65829\nf 63837 65829 65822\nf 63838 63892 63841\nf 63838 65794 65824\nf 63838 65824 63892\nf 63839 63841 63840\nf 63840 63841 63892\nf 63840 63892 63891\nf 63842 63843 63844\nf 63843 63894 63896\nf 63843 63896 63844\nf 63844 63896 63897\nf 63844 63897 63898\nf 63844 63898 63845\nf 63845 63898 63899\nf 63845 63899 63846\nf 63846 63899 63900\nf 63846 63900 63847\nf 63847 63900 63901\nf 63847 63901 63848\nf 63848 63901 63902\nf 63848 63902 63849\nf 63849 63902 63903\nf 63849 63903 63850\nf 63850 63903 63904\nf 63850 63904 63851\nf 63851 63904 63905\nf 63851 63905 63852\nf 63852 63905 63906\nf 63852 63906 63853\nf 63853 63906 63907\nf 63853 63907 63854\nf 63854 63907 63908\nf 63854 63908 63856\nf 63855 63856 63910\nf 63855 63910 63857\nf 63856 63908 63910\nf 63857 63910 63909\nf 63858 63859 63860\nf 63859 63915 63860\nf 63860 63915 63917\nf 63860 63917 63861\nf 63861 63917 63918\nf 63861 63918 63862\nf 63862 63918 63919\nf 63862 63919 63863\nf 63863 63919 63920\nf 63863 63920 63864\nf 63864 63920 63921\nf 63864 63921 63865\nf 63865 63866 65798\nf 63865 63921 63922\nf 63865 63922 63866\nf 63865 65798 65796\nf 63866 63867 65800\nf 63866 63922 63923\nf 63866 63923 63867\nf 63866 65800 65798\nf 63867 63923 63924\nf 63867 63924 65827\nf 63867 65825 65800\nf 63867 65827 65825\nf 63868 63869 65805\nf 63868 63924 63925\nf 63868 63925 63926\nf 63868 63926 63869\nf 63868 65803 65826\nf 63868 65805 65803\nf 63868 65826 63924\nf 63869 63870 65807\nf 63869 63926 63927\nf 63869 63927 63870\nf 63869 65807 65805\nf 63870 63871 65809\nf 63870 63927 63928\nf 63870 63928 63871\nf 63870 65809 65807\nf 63871 63872 65811\nf 63871 63928 63929\nf 63871 63929 63872\nf 63871 65811 65809\nf 63872 63873 65813\nf 63872 63929 63930\nf 63872 63930 63873\nf 63872 65813 65811\nf 63873 63874 65815\nf 63873 63930 63931\nf 63873 63931 63874\nf 63873 65815 65813\nf 63874 63875 65817\nf 63874 63931 63932\nf 63874 63932 63875\nf 63874 65817 65815\nf 63875 63876 65820\nf 63875 63932 63933\nf 63875 63933 63876\nf 63875 65820 65817\nf 63876 63933 63934\nf 63876 63934 63877\nf 63876 65819 65820\nf 63877 63934 63935\nf 63877 63935 63878\nf 63878 63935 63936\nf 63878 63936 63879\nf 63879 63936 63938\nf 63879 63938 63880\nf 63880 63938 63883\nf 63881 63883 63882\nf 63882 63883 63938\nf 63882 63938 63937\nf 63884 63885 63886\nf 63885 63940 63886\nf 63886 63940 63942\nf 63886 63942 63887\nf 63887 63942 63943\nf 63887 63943 63888\nf 63888 63943 63944\nf 63888 63944 63889\nf 63889 63944 63945\nf 63889 63945 63890\nf 63890 63945 65850\nf 63890 65850 65829\nf 63891 63892 63947\nf 63891 63947 63946\nf 63892 65824 65831\nf 63892 65831 63947\nf 63893 63948 63950\nf 63893 63950 63951\nf 63893 63951 63895\nf 63894 63895 63896\nf 63895 63951 63896\nf 63896 63951 63952\nf 63896 63952 63953\nf 63896 63953 63897\nf 63897 63953 63954\nf 63897 63954 63898\nf 63898 63954 63899\nf 63899 63954 65855\nf 63899 65832 63900\nf 63899 65855 65832\nf 63900 65832 65833\nf 63900 65833 63901\nf 63901 65833 65834\nf 63901 65834 63902\nf 63902 65834 65835\nf 63902 65835 63903\nf 63903 65835 65836\nf 63903 65836 63904\nf 63904 65836 65837\nf 63904 65837 63905\nf 63905 65837 65838\nf 63905 65838 63906\nf 63906 65838 65839\nf 63906 65839 63907\nf 63907 63955 63908\nf 63907 65839 65840\nf 63907 65840 63955\nf 63908 63955 63956\nf 63908 63956 63910\nf 63909 63910 63957\nf 63909 63957 63911\nf 63910 63956 63957\nf 63911 63957 63958\nf 63911 63958 63912\nf 63912 63958 63960\nf 63912 63960 63913\nf 63913 63960 63959\nf 63914 63964 63966\nf 63914 63966 63967\nf 63914 63967 63916\nf 63915 63916 63917\nf 63916 63967 63917\nf 63917 63967 63968\nf 63917 63968 63969\nf 63917 63969 63918\nf 63918 63969 63970\nf 63918 63970 63919\nf 63919 63970 63971\nf 63919 63971 63920\nf 63920 63971 63921\nf 63921 63971 65872\nf 63921 65841 63922\nf 63921 65872 65841\nf 63922 65841 65842\nf 63922 65842 63923\nf 63923 65842 65843\nf 63923 65843 63924\nf 63924 65826 65827\nf 63924 65843 65844\nf 63924 65844 63925\nf 63925 65844 65845\nf 63925 65845 63926\nf 63926 65845 65846\nf 63926 65846 63927\nf 63927 65846 65847\nf 63927 65847 63928\nf 63928 65847 65848\nf 63928 65848 63929\nf 63929 63972 63930\nf 63929 65848 65849\nf 63929 65849 63972\nf 63930 63972 63973\nf 63930 63973 63931\nf 63931 63973 63974\nf 63931 63974 63932\nf 63932 63974 63975\nf 63932 63975 63933\nf 63933 63975 63976\nf 63933 63976 63934\nf 63934 63976 63977\nf 63934 63977 63935\nf 63935 63977 63978\nf 63935 63978 63936\nf 63936 63978 63979\nf 63936 63979 63938\nf 63937 63938 63981\nf 63937 63981 63939\nf 63938 63979 63981\nf 63939 63981 63980\nf 63940 63941 63942\nf 63941 63983 63985\nf 63941 63985 63942\nf 63942 63985 63986\nf 63942 63986 63987\nf 63942 63987 63943\nf 63943 63987 63988\nf 63943 63988 63944\nf 63944 63988 63989\nf 63944 63989 63945\nf 63945 63989 65888\nf 63945 65888 65850\nf 63946 63947 63991\nf 63946 63991 63990\nf 63947 65831 65852\nf 63947 65852 63991\nf 63948 63949 63950\nf 63949 63992 63994\nf 63949 63994 63950\nf 63950 63994 63995\nf 63950 63995 63996\nf 63950 63996 63951\nf 63951 63996 63952\nf 63952 63996 65892\nf 63952 65853 63953\nf 63952 65892 65853\nf 63953 65853 65854\nf 63953 65854 63954\nf 63954 65854 65856\nf 63954 65856 65855\nf 63955 65840 65865\nf 63955 65865 65867\nf 63955 65867 63956\nf 63956 65867 65868\nf 63956 65868 63957\nf 63957 63997 63958\nf 63957 65868 65869\nf 63957 65869 63997\nf 63958 63997 63998\nf 63958 63998 63960\nf 63959 63960 63999\nf 63959 63999 63961\nf 63960 63998 63999\nf 63961 63999 64001\nf 63961 64001 63962\nf 63962 64001 64000\nf 63963 64005 64007\nf 63963 64007 64008\nf 63963 64008 63965\nf 63964 63965 63966\nf 63965 64008 63966\nf 63966 64008 64009\nf 63966 64009 64010\nf 63966 64010 63967\nf 63967 64010 64011\nf 63967 64011 63968\nf 63968 64011 63969\nf 63969 64011 65912\nf 63969 65870 63970\nf 63969 65912 65870\nf 63970 65870 65871\nf 63970 65871 63971\nf 63971 65871 65873\nf 63971 65873 65872\nf 63972 65849 65882\nf 63972 65882 65884\nf 63972 65884 63973\nf 63973 65884 65885\nf 63973 65885 63974\nf 63974 65885 65886\nf 63974 65886 63975\nf 63975 64012 63976\nf 63975 65886 65887\nf 63975 65887 64012\nf 63976 64012 64013\nf 63976 64013 63977\nf 63977 64013 64014\nf 63977 64014 63978\nf 63978 64014 64015\nf 63978 64015 63979\nf 63979 64015 64016\nf 63979 64016 63981\nf 63980 63981 64018\nf 63980 64018 63982\nf 63981 64016 64018\nf 63982 64018 64017\nf 63983 63984 63985\nf 63984 64019 64021\nf 63984 64021 63985\nf 63985 64021 64022\nf 63985 64022 64023\nf 63985 64023 63986\nf 63986 64023 64024\nf 63986 64024 63987\nf 63987 64024 64025\nf 63987 64025 63988\nf 63988 64025 64026\nf 63988 64026 63989\nf 63989 64026 65932\nf 63989 65932 65888\nf 63990 63991 64028\nf 63990 64028 64027\nf 63991 65852 65890\nf 63991 65890 64028\nf 63992 63993 63994\nf 63993 64029 64031\nf 63993 64031 63994\nf 63994 64031 64032\nf 63994 64032 63995\nf 63995 64032 65936\nf 63995 65891 63996\nf 63995 65936 65891\nf 63996 65891 65893\nf 63996 65893 65892\nf 63997 65869 65905\nf 63997 65905 65907\nf 63997 65907 63998\nf 63998 65907 65908\nf 63998 65908 63999\nf 63999 65908 65909\nf 63999 65909 64001\nf 64000 64001 64002\nf 64001 65909 65910\nf 64001 65910 64002\nf 64002 64033 64035\nf 64002 64035 64003\nf 64002 65910 64033\nf 64003 64035 64034\nf 64004 64049 64051\nf 64004 64051 64052\nf 64004 64052 64006\nf 64005 64006 64007\nf 64006 64052 64007\nf 64007 64052 64053\nf 64007 64053 64054\nf 64007 64054 64008\nf 64008 64054 64055\nf 64008 64055 64009\nf 64009 64055 64010\nf 64010 64055 65953\nf 64010 65911 64011\nf 64010 65953 65911\nf 64011 65911 65913\nf 64011 65913 65912\nf 64012 64056 64013\nf 64012 65887 65929\nf 64012 65929 65931\nf 64012 65931 64056\nf 64013 64056 64057\nf 64013 64057 64014\nf 64014 64057 64058\nf 64014 64058 64015\nf 64015 64058 64059\nf 64015 64059 64016\nf 64016 64059 64060\nf 64016 64060 64018\nf 64017 64018 64061\nf 64017 64061 64020\nf 64018 64060 64061\nf 64019 64020 64021\nf 64020 64061 64021\nf 64021 64061 64062\nf 64021 64062 64063\nf 64021 64063 64022\nf 64022 64063 64064\nf 64022 64064 64023\nf 64023 64064 64065\nf 64023 64065 64024\nf 64024 64065 64066\nf 64024 64066 64025\nf 64025 64066 64067\nf 64025 64067 64026\nf 64026 64067 64068\nf 64026 64068 65933\nf 64026 65933 65932\nf 64027 64028 64070\nf 64027 64070 64069\nf 64028 65890 65935\nf 64028 65935 64070\nf 64029 64030 64031\nf 64030 64071 64073\nf 64030 64073 64031\nf 64031 64073 64074\nf 64031 64074 64032\nf 64032 64074 65972\nf 64032 65937 65936\nf 64032 65972 65937\nf 64033 65910 65944\nf 64033 65944 65946\nf 64033 65946 64035\nf 64034 64035 65947\nf 64034 65947 64036\nf 64035 65946 65947\nf 64036 65947 65948\nf 64036 65948 65949\nf 64036 65949 64037\nf 64037 65949 64038\nf 64038 64075 64076\nf 64038 64076 64039\nf 64038 65949 64075\nf 64039 64076 64078\nf 64039 64078 64040\nf 64040 64078 64077\nf 64041 64097 64099\nf 64041 64099 64100\nf 64041 64100 64042\nf 64042 64100 64101\nf 64042 64101 64043\nf 64043 64101 64102\nf 64043 64102 64044\nf 64044 64102 64103\nf 64044 64103 64045\nf 64045 64103 64104\nf 64045 64104 64046\nf 64046 64104 64105\nf 64046 64105 64047\nf 64047 64105 64106\nf 64047 64106 64048\nf 64048 64106 64107\nf 64048 64107 64050\nf 64049 64050 64051\nf 64050 64107 64051\nf 64051 64107 64108\nf 64051 64108 64052\nf 64052 64108 66004\nf 64052 65950 64053\nf 64052 66004 65950\nf 64053 65950 65951\nf 64053 65951 64054\nf 64054 65951 65952\nf 64054 65952 64055\nf 64055 65952 65954\nf 64055 65954 65953\nf 64056 64109 64110\nf 64056 64110 64057\nf 64056 65931 65968\nf 64056 65968 64109\nf 64057 64110 64111\nf 64057 64111 64058\nf 64058 64111 64112\nf 64058 64112 64059\nf 64059 64112 64113\nf 64059 64113 64060\nf 64060 64113 64114\nf 64060 64114 64061\nf 64061 64114 64115\nf 64061 64115 64062\nf 64062 64115 64116\nf 64062 64116 64063\nf 64063 64116 64117\nf 64063 64117 64064\nf 64064 64117 64118\nf 64064 64118 64065\nf 64065 64118 64119\nf 64065 64119 64066\nf 64066 64119 64120\nf 64066 64120 64067\nf 64067 64120 64121\nf 64067 64121 64068\nf 64068 64121 66015\nf 64068 65970 65933\nf 64068 66015 65970\nf 64069 64070 64123\nf 64069 64123 64122\nf 64070 65935 65971\nf 64070 65971 64123\nf 64071 64072 64073\nf 64072 64124 64125\nf 64072 64125 64073\nf 64073 64125 64126\nf 64073 64126 64127\nf 64073 64127 64074\nf 64074 64127 66017\nf 64074 66017 65972\nf 64075 65949 65978\nf 64075 65978 65980\nf 64075 65980 64076\nf 64076 65980 65981\nf 64076 65981 64078\nf 64077 64078 65982\nf 64077 65982 64079\nf 64078 65981 65982\nf 64079 65982 65983\nf 64079 65983 65984\nf 64079 65984 64080\nf 64080 65984 64081\nf 64081 64128 64129\nf 64081 64129 64082\nf 64081 65984 64128\nf 64082 64129 64130\nf 64082 64130 64083\nf 64083 64130 64131\nf 64083 64131 64084\nf 64084 64131 64132\nf 64084 64132 64085\nf 64085 64132 66028\nf 64085 65985 64086\nf 64085 66028 65985\nf 64086 65985 65986\nf 64086 65986 64087\nf 64087 65986 64088\nf 64088 64133 64134\nf 64088 64134 64089\nf 64088 65986 64133\nf 64089 64134 66034\nf 64089 65987 64090\nf 64089 66034 65987\nf 64090 65987 65988\nf 64090 65988 64091\nf 64091 65988 65989\nf 64091 65989 64092\nf 64092 65989 65990\nf 64092 65990 64093\nf 64093 65990 65991\nf 64093 65991 64094\nf 64094 65991 65992\nf 64094 65992 64095\nf 64095 65992 65993\nf 64095 65993 64096\nf 64096 65993 65994\nf 64096 65994 64098\nf 64097 64098 64099\nf 64098 65994 65995\nf 64098 65995 64099\nf 64099 65995 64100\nf 64100 65995 65996\nf 64100 65996 64101\nf 64101 65996 65997\nf 64101 65997 64102\nf 64102 65997 65998\nf 64102 65998 64103\nf 64103 65998 65999\nf 64103 65999 64104\nf 64104 65999 66000\nf 64104 66000 64105\nf 64105 66000 66001\nf 64105 66001 64106\nf 64106 66001 66002\nf 64106 66002 64107\nf 64107 66002 66003\nf 64107 66003 64108\nf 64108 66003 66005\nf 64108 66005 66004\nf 64109 64135 64136\nf 64109 64136 64110\nf 64109 65968 66013\nf 64109 66013 64135\nf 64110 64136 64137\nf 64110 64137 64111\nf 64111 64137 64138\nf 64111 64138 64112\nf 64112 64138 64139\nf 64112 64139 64113\nf 64113 64139 64140\nf 64113 64140 64114\nf 64114 64140 64141\nf 64114 64141 64115\nf 64115 64141 64142\nf 64115 64142 64116\nf 64116 64142 64143\nf 64116 64143 64117\nf 64117 64143 64144\nf 64117 64144 64118\nf 64118 64144 64145\nf 64118 64145 64119\nf 64119 64145 64146\nf 64119 64146 64120\nf 64120 64146 64147\nf 64120 64147 64121\nf 64121 64147 66047\nf 64121 66047 66015\nf 64122 64123 64149\nf 64122 64149 64148\nf 64123 65971 66016\nf 64123 66016 64149\nf 64124 64150 64125\nf 64125 64150 64151\nf 64125 64151 64152\nf 64125 64152 64126\nf 64126 64152 64153\nf 64126 64153 64127\nf 64127 64153 66050\nf 64127 66050 66017\nf 64128 65984 66022\nf 64128 66022 66024\nf 64128 66024 64129\nf 64129 66024 66025\nf 64129 66025 64130\nf 64130 66025 66026\nf 64130 66026 64131\nf 64131 66026 66027\nf 64131 66027 64132\nf 64132 66027 66029\nf 64132 66029 66028\nf 64133 65986 66031\nf 64133 66031 66033\nf 64133 66033 64134\nf 64134 66033 66035\nf 64134 66035 66034\nf 64135 64154 64155\nf 64135 64155 64136\nf 64135 66013 66045\nf 64135 66045 64154\nf 64136 64155 64156\nf 64136 64156 64137\nf 64137 64156 64157\nf 64137 64157 64138\nf 64138 64157 64158\nf 64138 64158 64139\nf 64139 64158 64159\nf 64139 64159 64140\nf 64140 64159 64160\nf 64140 64160 64141\nf 64141 64160 64161\nf 64141 64161 64142\nf 64142 64161 64162\nf 64142 64162 64143\nf 64143 64162 64163\nf 64143 64163 64144\nf 64144 64163 64164\nf 64144 64164 64145\nf 64145 64164 64165\nf 64145 64165 64146\nf 64146 64165 64166\nf 64146 64166 64147\nf 64147 64166 66054\nf 64147 66054 66047\nf 64148 64149 64168\nf 64148 64168 64167\nf 64149 66016 66049\nf 64149 66049 64168\nf 64150 64169 64151\nf 64151 64169 64170\nf 64151 64170 64171\nf 64151 64171 64152\nf 64152 64171 64172\nf 64152 64172 64153\nf 64153 64172 66056\nf 64153 66056 66050\nf 64154 64173 64174\nf 64154 64174 64155\nf 64154 66045 66052\nf 64154 66052 64173\nf 64155 64174 64175\nf 64155 64175 64156\nf 64156 64175 64176\nf 64156 64176 64157\nf 64157 64176 64178\nf 64157 64178 64158\nf 64158 64178 64180\nf 64158 64180 64159\nf 64159 64180 64181\nf 64159 64181 64160\nf 64160 64181 64182\nf 64160 64182 64161\nf 64161 64182 64183\nf 64161 64183 64162\nf 64162 64183 64184\nf 64162 64184 64163\nf 64163 64184 64185\nf 64163 64185 64164\nf 64164 64185 64186\nf 64164 64186 64165\nf 64165 64186 64187\nf 64165 64187 64166\nf 64166 64187 66061\nf 64166 66061 66054\nf 64167 64168 64189\nf 64167 64189 64188\nf 64168 66049 66055\nf 64168 66055 64189\nf 64169 64190 64170\nf 64170 64190 64191\nf 64170 64191 64192\nf 64170 64192 64171\nf 64171 64192 64193\nf 64171 64193 64172\nf 64172 64193 66063\nf 64172 66063 66056\nf 64173 64194 64174\nf 64173 66052 66058\nf 64173 66058 66060\nf 64173 66060 64194\nf 64174 64194 64195\nf 64174 64195 64175\nf 64175 64195 64198\nf 64175 64198 64176\nf 64176 64198 64178\nf 64177 64178 64198\nf 64177 64179 64178\nf 64177 64198 64196\nf 64178 64179 64180\nf 64179 64199 64180\nf 64180 64199 64200\nf 64180 64200 64181\nf 64181 64200 64201\nf 64181 64201 64182\nf 64182 64201 64202\nf 64182 64202 64183\nf 64183 64202 64203\nf 64183 64203 64184\nf 64184 64203 64204\nf 64184 64204 64185\nf 64185 64204 64205\nf 64185 64205 64186\nf 64186 64205 64206\nf 64186 64206 64187\nf 64187 64206 66068\nf 64187 66068 66061\nf 64188 64189 64208\nf 64188 64208 64207\nf 64189 66055 66062\nf 64189 66062 64208\nf 64190 64209 64191\nf 64191 64209 64210\nf 64191 64210 64211\nf 64191 64211 64192\nf 64192 64211 64212\nf 64192 64212 64193\nf 64193 64212 66071\nf 64193 66071 66063\nf 64194 64213 64215\nf 64194 64215 64195\nf 64194 66060 66066\nf 64194 66066 64213\nf 64195 64215 64198\nf 64196 64198 64197\nf 64197 64198 64215\nf 64197 64215 64214\nf 64199 64216 64200\nf 64200 64216 64218\nf 64200 64218 64219\nf 64200 64219 64201\nf 64201 64219 64220\nf 64201 64220 64202\nf 64202 64220 64221\nf 64202 64221 64203\nf 64203 64221 64222\nf 64203 64222 64204\nf 64204 64222 64223\nf 64204 64223 64205\nf 64205 64223 64224\nf 64205 64224 64206\nf 64206 64224 66077\nf 64206 66077 66068\nf 64207 64208 64226\nf 64207 64226 64225\nf 64208 66062 66070\nf 64208 66070 64226\nf 64209 64227 64210\nf 64210 64227 64228\nf 64210 64228 64229\nf 64210 64229 64211\nf 64211 64229 64230\nf 64211 64230 64212\nf 64212 64230 66080\nf 64212 66080 66071\nf 64213 64231 64233\nf 64213 64233 64215\nf 64213 66066 66075\nf 64213 66075 64231\nf 64214 64215 64233\nf 64214 64233 64232\nf 64216 64217 64218\nf 64217 64235 64218\nf 64218 64235 64236\nf 64218 64236 64219\nf 64219 64236 64237\nf 64219 64237 64220\nf 64220 64237 64238\nf 64220 64238 64221\nf 64221 64238 64239\nf 64221 64239 64222\nf 64222 64239 64240\nf 64222 64240 64223\nf 64223 64240 64241\nf 64223 64241 64224\nf 64224 64241 66085\nf 64224 66085 66077\nf 64225 64226 64243\nf 64225 64243 64242\nf 64226 66070 66079\nf 64226 66079 64243\nf 64227 64244 64228\nf 64228 64244 64245\nf 64228 64245 64246\nf 64228 64246 64229\nf 64229 64246 64247\nf 64229 64247 64230\nf 64230 64247 66088\nf 64230 66088 66080\nf 64231 64248 64249\nf 64231 64249 64233\nf 64231 66075 66083\nf 64231 66083 64248\nf 64232 64233 64251\nf 64232 64251 64234\nf 64233 64249 64251\nf 64234 64251 64250\nf 64235 64252 64236\nf 64236 64252 64254\nf 64236 64254 64255\nf 64236 64255 64237\nf 64237 64255 64256\nf 64237 64256 64238\nf 64238 64256 64257\nf 64238 64257 64239\nf 64239 64257 64258\nf 64239 64258 64240\nf 64240 64258 64259\nf 64240 64259 64241\nf 64241 64259 66093\nf 64241 66093 66085\nf 64242 64243 64261\nf 64242 64261 64260\nf 64243 66079 66087\nf 64243 66087 64261\nf 64244 64262 64245\nf 64245 64262 64263\nf 64245 64263 64264\nf 64245 64264 64246\nf 64246 64264 64265\nf 64246 64265 64247\nf 64247 64265 66096\nf 64247 66096 66088\nf 64248 64266 64267\nf 64248 64267 64249\nf 64248 66083 66091\nf 64248 66091 64266\nf 64249 64267 64269\nf 64249 64269 64251\nf 64250 64251 64269\nf 64250 64269 64268\nf 64252 64253 64254\nf 64253 64270 64254\nf 64254 64270 64271\nf 64254 64271 64255\nf 64255 64271 64272\nf 64255 64272 64256\nf 64256 64272 64273\nf 64256 64273 64257\nf 64257 64273 64274\nf 64257 64274 64258\nf 64258 64274 64275\nf 64258 64275 64259\nf 64259 64275 66101\nf 64259 66101 66093\nf 64260 64261 64277\nf 64260 64277 64276\nf 64261 66087 66095\nf 64261 66095 64277\nf 64262 64278 64263\nf 64263 64278 64280\nf 64263 64280 64281\nf 64263 64281 64264\nf 64264 64281 64282\nf 64264 64282 64265\nf 64265 64282 66105\nf 64265 66105 66096\nf 64266 64283 64284\nf 64266 64284 64267\nf 64266 66091 66099\nf 64266 66099 64283\nf 64267 64284 64286\nf 64267 64286 64269\nf 64268 64269 64286\nf 64268 64286 64285\nf 64270 64287 64271\nf 64271 64287 64288\nf 64271 64288 64289\nf 64271 64289 64272\nf 64272 64289 64290\nf 64272 64290 64273\nf 64273 64290 64291\nf 64273 64291 64274\nf 64274 64291 64292\nf 64274 64292 64275\nf 64275 64292 66111\nf 64275 66111 66101\nf 64276 64277 66104\nf 64276 66104 66113\nf 64276 66113 64293\nf 64277 66095 66103\nf 64277 66103 66104\nf 64278 64279 64280\nf 64279 64294 64280\nf 64280 64294 64295\nf 64280 64295 64281\nf 64281 64295 64296\nf 64281 64296 64282\nf 64282 64296 64297\nf 64282 64297 66106\nf 64282 66106 66105\nf 64283 64298 64299\nf 64283 64299 64284\nf 64283 66099 66109\nf 64283 66109 64298\nf 64284 64299 64301\nf 64284 64301 64286\nf 64285 64286 64301\nf 64285 64301 64300\nf 64287 64302 64288\nf 64288 64302 64304\nf 64288 64304 64305\nf 64288 64305 64289\nf 64289 64305 64306\nf 64289 64306 64290\nf 64290 64306 64307\nf 64290 64307 64291\nf 64291 64307 64308\nf 64291 64308 64292\nf 64292 64308 66119\nf 64292 66119 66111\nf 64293 66113 64309\nf 64294 64310 64295\nf 64295 64310 64312\nf 64295 64312 64313\nf 64295 64313 64296\nf 64296 64313 64314\nf 64296 64314 64297\nf 64297 64314 66123\nf 64297 66115 66106\nf 64297 66123 66115\nf 64298 64315 64316\nf 64298 64316 64299\nf 64298 66109 66117\nf 64298 66117 64315\nf 64299 64316 64319\nf 64299 64319 64301\nf 64300 64301 64319\nf 64300 64319 64317\nf 64302 64303 64304\nf 64303 64320 64304\nf 64304 64320 64321\nf 64304 64321 64305\nf 64305 64321 64322\nf 64305 64322 64306\nf 64306 64322 64323\nf 64306 64323 64307\nf 64307 64323 64324\nf 64307 64324 64308\nf 64308 64324 66127\nf 64308 66127 66119\nf 64309 66113 66121\nf 64309 66121 64325\nf 64310 64311 64312\nf 64311 64326 64312\nf 64312 64326 64327\nf 64312 64327 64313\nf 64313 64327 64328\nf 64313 64328 64314\nf 64314 64328 66130\nf 64314 66130 66123\nf 64315 64329 64331\nf 64315 64331 64316\nf 64315 66117 66125\nf 64315 66125 64329\nf 64316 64331 64319\nf 64317 64319 64318\nf 64318 64319 64331\nf 64318 64331 64330\nf 64320 64332 64321\nf 64321 64332 64333\nf 64321 64333 64334\nf 64321 64334 64322\nf 64322 64334 64335\nf 64322 64335 64323\nf 64323 64335 64336\nf 64323 64336 64324\nf 64324 64336 66134\nf 64324 66134 66127\nf 64325 66121 66129\nf 64325 66129 64337\nf 64326 64339 64327\nf 64327 64339 64341\nf 64327 64341 64342\nf 64327 64342 64328\nf 64328 64342 66137\nf 64328 66137 66130\nf 64329 64343 64346\nf 64329 64346 64331\nf 64329 66125 66132\nf 64329 66132 64343\nf 64330 64331 64346\nf 64330 64346 64344\nf 64332 64347 64333\nf 64333 64347 64349\nf 64333 64349 64350\nf 64333 64350 64334\nf 64334 64350 64351\nf 64334 64351 64335\nf 64335 64351 64352\nf 64335 64352 64336\nf 64336 64352 66142\nf 64336 66142 66134\nf 64337 64354 64338\nf 64337 66129 66136\nf 64337 66136 66144\nf 64337 66144 64354\nf 64338 64354 64353\nf 64339 64340 64341\nf 64340 64355 64341\nf 64341 64355 64356\nf 64341 64356 64342\nf 64342 64356 66145\nf 64342 66145 66137\nf 64343 64357 64359\nf 64343 64359 64346\nf 64343 66132 66139\nf 64343 66139 64357\nf 64344 64346 64345\nf 64345 64346 64359\nf 64345 64359 64358\nf 64347 64348 64349\nf 64348 64360 64361\nf 64348 64361 64349\nf 64349 64361 64362\nf 64349 64362 64363\nf 64349 64363 64350\nf 64350 64363 64364\nf 64350 64364 64351\nf 64351 64364 64365\nf 64351 64365 64352\nf 64352 64365 66149\nf 64352 66149 66142\nf 64353 64354 64367\nf 64353 64367 64366\nf 64354 66144 64367\nf 64355 64368 64356\nf 64356 64368 64369\nf 64356 64369 64370\nf 64356 64370 66146\nf 64356 66146 66145\nf 64357 64371 64373\nf 64357 64373 64359\nf 64357 66139 66140\nf 64357 66140 66148\nf 64357 66148 64371\nf 64358 64359 64373\nf 64358 64373 64372\nf 64360 64374 64361\nf 64361 64374 64376\nf 64361 64376 64377\nf 64361 64377 64362\nf 64362 64377 64378\nf 64362 64378 64363\nf 64363 64378 64379\nf 64363 64379 64364\nf 64364 64379 64380\nf 64364 64380 64365\nf 64365 64380 66154\nf 64365 66154 66149\nf 64366 64367 64382\nf 64366 64382 64381\nf 64367 66144 66151\nf 64367 66151 64382\nf 64368 64383 64369\nf 64369 64383 64384\nf 64369 64384 64385\nf 64369 64385 64370\nf 64370 64385 66157\nf 64370 66152 66146\nf 64370 66157 66152\nf 64371 64386 64389\nf 64371 64389 64373\nf 64371 66148 66153\nf 64371 66153 64386\nf 64372 64373 64389\nf 64372 64389 64387\nf 64374 64375 64376\nf 64375 64390 64376\nf 64376 64390 64391\nf 64376 64391 64377\nf 64377 64391 64392\nf 64377 64392 64378\nf 64378 64392 64393\nf 64378 64393 64379\nf 64379 64393 64394\nf 64379 64394 64380\nf 64380 64394 66159\nf 64380 66159 66154\nf 64381 64382 64396\nf 64381 64396 64395\nf 64382 66151 66156\nf 64382 66156 64396\nf 64383 64397 64384\nf 64384 64397 64398\nf 64384 64398 64399\nf 64384 64399 64385\nf 64385 64399 66162\nf 64385 66162 66157\nf 64386 64401 64389\nf 64386 66153 66158\nf 64386 66158 64401\nf 64387 64389 64388\nf 64388 64389 64401\nf 64388 64401 64400\nf 64390 64402 64391\nf 64391 64402 64403\nf 64391 64403 64404\nf 64391 64404 64392\nf 64392 64404 64405\nf 64392 64405 64393\nf 64393 64405 64406\nf 64393 64406 64394\nf 64394 64406 66164\nf 64394 66164 66159\nf 64395 64396 64408\nf 64395 64408 64407\nf 64396 66156 66161\nf 64396 66161 64408\nf 64397 64409 64398\nf 64398 64409 64410\nf 64398 64410 64411\nf 64398 64411 64399\nf 64399 64411 66168\nf 64399 66168 66162\nf 64400 64401 64413\nf 64400 64413 64412\nf 64401 66158 66163\nf 64401 66163 64413\nf 64402 64414 64403\nf 64403 64414 64415\nf 64403 64415 64416\nf 64403 64416 64404\nf 64404 64416 64417\nf 64404 64417 64405\nf 64405 64417 64418\nf 64405 64418 64406\nf 64406 64418 66170\nf 64406 66170 66164\nf 64407 64408 66167\nf 64407 66167 66172\nf 64407 66172 64419\nf 64408 66161 66166\nf 64408 66166 66167\nf 64409 64421 64410\nf 64410 64421 64423\nf 64410 64423 64424\nf 64410 64424 64411\nf 64411 64424 66174\nf 64411 66174 66168\nf 64412 64413 64426\nf 64412 64426 64425\nf 64413 66163 66169\nf 64413 66169 64426\nf 64414 64427 64415\nf 64415 64427 64428\nf 64415 64428 64429\nf 64415 64429 64416\nf 64416 64429 64430\nf 64416 64430 64417\nf 64417 64430 64431\nf 64417 64431 64418\nf 64418 64431 66177\nf 64418 66177 66170\nf 64419 64433 64420\nf 64419 66172 66179\nf 64419 66179 64433\nf 64420 64433 64432\nf 64421 64422 64423\nf 64422 64434 64423\nf 64423 64434 64435\nf 64423 64435 64424\nf 64424 64435 66181\nf 64424 66181 66174\nf 64425 64426 64437\nf 64425 64437 64436\nf 64426 66169 66175\nf 64426 66175 64437\nf 64427 64438 64428\nf 64428 64438 64439\nf 64428 64439 64440\nf 64428 64440 64429\nf 64429 64440 64441\nf 64429 64441 64430\nf 64430 64441 64442\nf 64430 64442 64431\nf 64431 64442 66184\nf 64431 66184 66177\nf 64432 64433 64444\nf 64432 64444 64443\nf 64433 66179 64444\nf 64434 64445 64435\nf 64435 64445 64446\nf 64435 64446 66188\nf 64435 66188 66181\nf 64436 64437 64448\nf 64436 64448 64447\nf 64437 66175 66182\nf 64437 66182 64448\nf 64438 64449 64439\nf 64439 64449 64451\nf 64439 64451 64452\nf 64439 64452 64440\nf 64440 64452 64453\nf 64440 64453 64441\nf 64441 64453 64454\nf 64441 64454 64442\nf 64442 64454 66190\nf 64442 66190 66184\nf 64443 64444 64456\nf 64443 64456 64455\nf 64444 66179 66186\nf 64444 66186 64456\nf 64445 64457 64446\nf 64446 64457 64458\nf 64446 64458 66194\nf 64446 66194 66188\nf 64447 64448 64460\nf 64447 64460 64459\nf 64448 66182 66189\nf 64448 66189 64460\nf 64449 64450 64451\nf 64450 64461 64462\nf 64450 64462 64451\nf 64451 64462 64463\nf 64451 64463 64464\nf 64451 64464 64452\nf 64452 64464 64465\nf 64452 64465 64453\nf 64453 64465 64466\nf 64453 64466 64454\nf 64454 64466 66196\nf 64454 66196 66190\nf 64455 64456 64468\nf 64455 64468 64467\nf 64456 66186 66192\nf 64456 66192 64468\nf 64457 64469 64458\nf 64458 64469 64470\nf 64458 64470 66199\nf 64458 66199 66194\nf 64459 64460 64472\nf 64459 64472 64471\nf 64460 66189 66195\nf 64460 66195 64472\nf 64461 64473 64462\nf 64462 64473 64474\nf 64462 64474 64475\nf 64462 64475 64463\nf 64463 64475 64476\nf 64463 64476 64464\nf 64464 64476 64477\nf 64464 64477 64465\nf 64465 64477 64478\nf 64465 64478 64466\nf 64466 64478 66201\nf 64466 66201 66196\nf 64467 64468 64480\nf 64467 64480 64479\nf 64468 66192 66198\nf 64468 66198 64480\nf 64469 64481 64470\nf 64470 64481 64482\nf 64470 64482 66204\nf 64470 66204 66199\nf 64471 64472 64484\nf 64471 64484 64483\nf 64472 66195 66200\nf 64472 66200 64484\nf 64473 64485 64474\nf 64474 64485 64486\nf 64474 64486 64487\nf 64474 64487 64475\nf 64475 64487 64488\nf 64475 64488 64476\nf 64476 64488 64489\nf 64476 64489 64477\nf 64477 64489 64490\nf 64477 64490 64478\nf 64478 64490 66206\nf 64478 66206 66201\nf 64479 64480 64492\nf 64479 64492 64491\nf 64480 66198 66203\nf 64480 66203 64492\nf 64481 64493 64482\nf 64482 64493 64494\nf 64482 64494 66209\nf 64482 66209 66204\nf 64483 64484 64496\nf 64483 64496 64495\nf 64484 66200 66205\nf 64484 66205 64496\nf 64485 64497 64486\nf 64486 64497 64498\nf 64486 64498 64499\nf 64486 64499 64487\nf 64487 64499 64500\nf 64487 64500 64488\nf 64488 64500 64501\nf 64488 64501 64489\nf 64489 64501 64502\nf 64489 64502 64490\nf 64490 64502 66211\nf 64490 66211 66206\nf 64491 64492 64504\nf 64491 64504 64503\nf 64492 66203 66208\nf 64492 66208 64504\nf 64493 64505 64494\nf 64494 64505 64506\nf 64494 64506 66214\nf 64494 66214 66209\nf 64495 64496 64508\nf 64495 64508 64507\nf 64496 66205 66210\nf 64496 66210 64508\nf 64497 64509 64498\nf 64498 64509 64511\nf 64498 64511 64512\nf 64498 64512 64499\nf 64499 64512 64513\nf 64499 64513 64500\nf 64500 64513 64514\nf 64500 64514 64501\nf 64501 64514 64515\nf 64501 64515 64502\nf 64502 64515 66216\nf 64502 66216 66211\nf 64503 64504 64517\nf 64503 64517 64516\nf 64504 66208 66213\nf 64504 66213 64517\nf 64505 64518 64506\nf 64506 64518 64519\nf 64506 64519 66219\nf 64506 66219 66214\nf 64507 64508 64521\nf 64507 64521 64520\nf 64508 66210 66215\nf 64508 66215 64521\nf 64509 64510 64511\nf 64510 64522 64511\nf 64511 64522 64523\nf 64511 64523 64512\nf 64512 64523 64524\nf 64512 64524 64513\nf 64513 64524 64526\nf 64513 64526 64514\nf 64514 64526 64527\nf 64514 64527 64515\nf 64515 64527 66221\nf 64515 66221 66216\nf 64516 64517 64529\nf 64516 64529 64528\nf 64517 66213 66218\nf 64517 66218 64529\nf 64518 64530 64519\nf 64519 64530 64531\nf 64519 64531 66224\nf 64519 66224 66219\nf 64520 64521 64533\nf 64520 64533 64532\nf 64521 66215 66220\nf 64521 66220 64533\nf 64522 64534 64523\nf 64523 64534 64535\nf 64523 64535 64538\nf 64523 64538 64524\nf 64524 64538 64526\nf 64525 64526 64538\nf 64525 64538 64536\nf 64525 64539 64526\nf 64526 64539 64540\nf 64526 64540 64527\nf 64527 64540 66226\nf 64527 66226 66221\nf 64528 64529 64542\nf 64528 64542 64541\nf 64529 66218 66223\nf 64529 66223 64542\nf 64530 64543 64531\nf 64531 64543 64544\nf 64531 64544 66229\nf 64531 66229 66224\nf 64532 64533 64546\nf 64532 64546 64545\nf 64533 66220 66225\nf 64533 66225 64546\nf 64534 64547 64535\nf 64535 64547 64550\nf 64535 64550 64538\nf 64536 64538 64537\nf 64537 64538 64550\nf 64537 64550 64548\nf 64539 64551 64540\nf 64540 64551 64552\nf 64540 64552 66231\nf 64540 66231 66226\nf 64541 64542 64554\nf 64541 64554 64553\nf 64542 66223 66228\nf 64542 66228 64554\nf 64543 64555 64544\nf 64544 64555 64556\nf 64544 64556 66234\nf 64544 66234 66229\nf 64545 64546 64558\nf 64545 64558 64557\nf 64546 66225 66230\nf 64546 66230 64558\nf 64547 64549 64550\nf 64548 64550 64549\nf 64551 64559 64552\nf 64552 64559 64560\nf 64552 64560 66236\nf 64552 66236 66231\nf 64553 64554 64562\nf 64553 64562 64561\nf 64554 66228 66233\nf 64554 66233 64562\nf 64555 64563 64556\nf 64556 64563 64564\nf 64556 64564 66240\nf 64556 66240 66234\nf 64557 64558 64566\nf 64557 64566 64565\nf 64558 66230 66235\nf 64558 66235 64566\nf 64559 64567 64560\nf 64560 64567 64568\nf 64560 64568 64569\nf 64560 64569 66237\nf 64560 66237 66236\nf 64561 64562 64571\nf 64561 64571 64570\nf 64562 66233 66239\nf 64562 66239 64571\nf 64563 64572 64564\nf 64564 64572 64573\nf 64564 64573 66244\nf 64564 66244 66240\nf 64565 64566 64575\nf 64565 64575 64574\nf 64566 66235 66241\nf 64566 66241 64575\nf 64567 64577 64568\nf 64568 64577 64579\nf 64568 64579 64580\nf 64568 64580 64569\nf 64569 64580 66246\nf 64569 66242 66237\nf 64569 66246 66242\nf 64570 64571 64582\nf 64570 64582 64581\nf 64571 66239 66243\nf 64571 66243 64582\nf 64572 64583 64573\nf 64573 64583 64585\nf 64573 64585 66248\nf 64573 66248 66244\nf 64574 64575 64588\nf 64574 64588 64576\nf 64575 64586 64588\nf 64575 66241 66245\nf 64575 66245 64586\nf 64576 64588 64587\nf 64577 64578 64579\nf 64578 64589 64579\nf 64579 64589 64590\nf 64579 64590 64580\nf 64580 64590 66251\nf 64580 66251 66246\nf 64581 64582 64592\nf 64581 64592 64591\nf 64582 66243 66247\nf 64582 66247 64592\nf 64583 64584 64585\nf 64584 64593 64585\nf 64585 64593 66248\nf 64586 64595 64588\nf 64586 66245 66249\nf 64586 66249 66250\nf 64586 66250 64595\nf 64587 64588 64595\nf 64587 64595 64594\nf 64589 64596 64590\nf 64590 64596 64597\nf 64590 64597 66256\nf 64590 66256 66251\nf 64591 64592 64599\nf 64591 64599 64598\nf 64592 66247 66252\nf 64592 66252 64599\nf 64593 64600 66258\nf 64593 66253 66248\nf 64593 66258 66253\nf 64594 64595 64602\nf 64594 64602 64601\nf 64595 66250 66254\nf 64595 66254 64602\nf 64596 64603 64597\nf 64597 64603 64604\nf 64597 64604 66261\nf 64597 66261 66256\nf 64598 64599 64606\nf 64598 64606 64605\nf 64599 66252 66257\nf 64599 66257 64606\nf 64600 64607 66264\nf 64600 66264 66258\nf 64601 64602 64610\nf 64601 64610 64609\nf 64602 66254 66259\nf 64602 66259 64610\nf 64603 64611 64604\nf 64604 64611 64612\nf 64604 64612 66267\nf 64604 66267 66261\nf 64605 64606 66263\nf 64605 66263 66268\nf 64605 66268 64613\nf 64606 66257 66262\nf 64606 66262 66263\nf 64607 64608 66270\nf 64607 66270 66264\nf 64608 64614 64615\nf 64608 64615 66270\nf 64609 64610 64617\nf 64609 64617 64616\nf 64610 66259 66265\nf 64610 66265 64617\nf 64611 64618 64612\nf 64612 64618 64619\nf 64612 64619 66273\nf 64612 66273 66267\nf 64613 66268 64620\nf 64614 64622 64615\nf 64615 64622 64623\nf 64615 64623 66277\nf 64615 66277 66270\nf 64616 64617 64625\nf 64616 64625 64624\nf 64617 66265 66271\nf 64617 66271 64625\nf 64618 64626 66280\nf 64618 66280 64619\nf 64619 66274 66273\nf 64619 66280 66274\nf 64620 64628 64621\nf 64620 66268 66275\nf 64620 66275 66282\nf 64620 66282 64628\nf 64621 64628 64627\nf 64622 64629 64623\nf 64623 64629 64631\nf 64623 64631 66284\nf 64623 66284 66277\nf 64624 64625 64633\nf 64624 64633 64632\nf 64625 66271 66278\nf 64625 66278 64633\nf 64626 64634 66287\nf 64626 66287 66280\nf 64627 64628 64636\nf 64627 64636 64635\nf 64628 66282 64636\nf 64629 64630 64631\nf 64630 64637 64638\nf 64630 64638 64631\nf 64631 64638 64639\nf 64631 64639 66292\nf 64631 66292 66284\nf 64632 64633 64641\nf 64632 64641 64640\nf 64633 66278 66285\nf 64633 66285 64641\nf 64634 64643 66287\nf 64635 64636 64646\nf 64635 64646 64645\nf 64636 66282 66290\nf 64636 66290 64646\nf 64637 64647 64638\nf 64638 64647 64649\nf 64638 64649 64650\nf 64638 64650 64639\nf 64639 64650 66298\nf 64639 66298 66292\nf 64640 64641 64653\nf 64640 64653 64642\nf 64641 64651 64653\nf 64641 66285 66293\nf 64641 66293 64651\nf 64642 64653 64652\nf 64643 64644 66288\nf 64643 64654 66302\nf 64643 66288 66287\nf 64643 66302 64644\nf 64644 66295 66288\nf 64644 66296 66295\nf 64644 66302 66296\nf 64645 64646 64656\nf 64645 64656 64655\nf 64646 66290 66297\nf 64646 66297 64656\nf 64647 64648 64649\nf 64648 64657 64658\nf 64648 64658 64649\nf 64649 64658 64659\nf 64649 64659 64650\nf 64650 64659 66305\nf 64650 66299 66298\nf 64650 66305 66299\nf 64651 64660 64662\nf 64651 64662 64653\nf 64651 66293 66300\nf 64651 66300 64660\nf 64652 64653 64662\nf 64652 64662 64661\nf 64654 64663 66309\nf 64654 66309 66302\nf 64655 64656 64665\nf 64655 64665 64664\nf 64656 66297 66304\nf 64656 66304 64665\nf 64657 64666 64658\nf 64658 64666 64668\nf 64658 64668 64669\nf 64658 64669 64659\nf 64659 64669 66312\nf 64659 66312 66305\nf 64660 64670 64672\nf 64660 64672 64662\nf 64660 66300 66307\nf 64660 66307 64670\nf 64661 64662 64672\nf 64661 64672 64671\nf 64663 64674 66316\nf 64663 66316 66309\nf 64664 64665 64677\nf 64664 64677 64676\nf 64665 66304 66311\nf 64665 66311 64677\nf 64666 64667 64668\nf 64667 64678 64679\nf 64667 64679 64668\nf 64668 64679 64680\nf 64668 64680 64681\nf 64668 64681 64669\nf 64669 64681 66318\nf 64669 66318 66312\nf 64670 64682 64683\nf 64670 64683 64672\nf 64670 66307 66314\nf 64670 66314 64682\nf 64671 64672 64685\nf 64671 64685 64673\nf 64672 64683 64685\nf 64673 64685 64684\nf 64674 64675 66322\nf 64674 66322 66316\nf 64675 64687 64688\nf 64675 64688 66322\nf 64676 64677 64690\nf 64676 64690 64689\nf 64677 66311 66317\nf 64677 66317 64690\nf 64678 64691 64679\nf 64679 64691 64692\nf 64679 64692 64693\nf 64679 64693 64680\nf 64680 64693 64694\nf 64680 64694 64681\nf 64681 64694 66324\nf 64681 66324 66318\nf 64682 64695 64696\nf 64682 64696 64683\nf 64682 66314 66320\nf 64682 66320 64695\nf 64683 64696 64697\nf 64683 64697 64685\nf 64684 64685 64700\nf 64684 64700 64686\nf 64685 64697 64700\nf 64686 64700 64698\nf 64687 64701 64688\nf 64688 64701 64702\nf 64688 64702 66329\nf 64688 66329 66322\nf 64689 64690 64704\nf 64689 64704 64703\nf 64690 66317 66323\nf 64690 66323 64704\nf 64691 64705 64692\nf 64692 64705 64706\nf 64692 64706 64707\nf 64692 64707 64693\nf 64693 64707 64694\nf 64694 64707 66331\nf 64694 66325 66324\nf 64694 66331 66325\nf 64695 64708 64709\nf 64695 64709 64696\nf 64695 66320 66327\nf 64695 66327 64708\nf 64696 64709 64711\nf 64696 64711 64697\nf 64697 64711 64700\nf 64698 64700 64699\nf 64699 64700 64711\nf 64699 64711 64710\nf 64701 64712 64702\nf 64702 64712 64713\nf 64702 64713 66336\nf 64702 66336 66329\nf 64703 64704 64715\nf 64703 64715 64714\nf 64704 66323 66330\nf 64704 66330 64715\nf 64705 64716 64706\nf 64706 64716 64718\nf 64706 64718 64719\nf 64706 64719 64707\nf 64707 64719 66338\nf 64707 66338 66331\nf 64708 64720 64721\nf 64708 64721 64709\nf 64708 66327 66334\nf 64708 66334 64720\nf 64709 64721 64723\nf 64709 64723 64711\nf 64710 64711 64723\nf 64710 64723 64722\nf 64712 64724 64713\nf 64713 64724 64726\nf 64713 64726 66342\nf 64713 66342 66336\nf 64714 64715 64728\nf 64714 64728 64727\nf 64715 66330 66337\nf 64715 66337 64728\nf 64716 64717 64718\nf 64717 64729 64730\nf 64717 64730 64718\nf 64718 64730 64731\nf 64718 64731 64732\nf 64718 64732 64719\nf 64719 64732 66344\nf 64719 66344 66338\nf 64720 64733 64734\nf 64720 64734 64721\nf 64720 66334 66340\nf 64720 66340 64733\nf 64721 64734 64736\nf 64721 64736 64723\nf 64722 64723 64736\nf 64722 64736 64735\nf 64724 64725 64726\nf 64725 64737 64726\nf 64726 64737 66342\nf 64727 64728 64739\nf 64727 64739 64738\nf 64728 66337 66343\nf 64728 66343 64739\nf 64729 64740 64730\nf 64730 64740 64741\nf 64730 64741 64742\nf 64730 64742 64731\nf 64731 64742 64732\nf 64732 64742 66351\nf 64732 66345 66344\nf 64732 66351 66345\nf 64733 64743 64744\nf 64733 64744 64734\nf 64733 66340 66347\nf 64733 66347 64743\nf 64734 64744 64747\nf 64734 64747 64736\nf 64735 64736 64747\nf 64735 64747 64745\nf 64737 64748 66356\nf 64737 66349 66342\nf 64737 66356 66349\nf 64738 64739 64750\nf 64738 64750 64749\nf 64739 66343 66350\nf 64739 66350 64750\nf 64740 64751 64741\nf 64741 64751 64753\nf 64741 64753 64754\nf 64741 64754 64742\nf 64742 64754 66359\nf 64742 66359 66351\nf 64743 64755 64757\nf 64743 64757 64744\nf 64743 66347 66354\nf 64743 66354 64755\nf 64744 64757 64747\nf 64745 64747 64746\nf 64746 64747 64757\nf 64746 64757 64756\nf 64748 64758 66356\nf 64749 64750 64763\nf 64749 64763 64761\nf 64750 66350 66358\nf 64750 66358 64763\nf 64751 64752 64753\nf 64752 64764 64753\nf 64753 64764 64765\nf 64753 64765 64754\nf 64754 64765 66366\nf 64754 66366 66359\nf 64755 64766 64768\nf 64755 64768 64757\nf 64755 66354 66362\nf 64755 66362 64766\nf 64756 64757 64768\nf 64756 64768 64767\nf 64758 64759 64760\nf 64758 64760 66357\nf 64758 66357 66356\nf 64759 64769 64760\nf 64760 64769 66364\nf 64760 66364 66357\nf 64761 64763 64762\nf 64762 64763 66365\nf 64762 66365 64770\nf 64763 66358 66365\nf 64764 64771 64765\nf 64765 64771 64773\nf 64765 64773 64774\nf 64765 64774 66367\nf 64765 66367 66366\nf 64766 64775 64778\nf 64766 64778 64768\nf 64766 66362 66371\nf 64766 66371 64775\nf 64767 64768 64778\nf 64767 64778 64776\nf 64769 64779 66382\nf 64769 66373 66364\nf 64769 66382 66373\nf 64770 66365 66374\nf 64770 66374 64780\nf 64771 64772 64773\nf 64772 64781 64773\nf 64773 64781 64782\nf 64773 64782 64774\nf 64774 64782 66384\nf 64774 66375 66367\nf 64774 66384 66375\nf 64775 64783 64785\nf 64775 64785 64778\nf 64775 66371 66379\nf 64775 66379 64783\nf 64776 64778 64777\nf 64777 64778 64785\nf 64777 64785 64784\nf 64779 64786 66389\nf 64779 66389 66382\nf 64780 66374 66383\nf 64780 66383 64787\nf 64781 64788 64782\nf 64782 64788 64789\nf 64782 64789 66391\nf 64782 66391 66384\nf 64783 64790 64792\nf 64783 64792 64785\nf 64783 66379 66380\nf 64783 66380 66387\nf 64783 66387 64790\nf 64784 64785 64792\nf 64784 64792 64791\nf 64786 64793 66411\nf 64786 66411 66389\nf 64787 66383 66390\nf 64787 66390 64794\nf 64788 64795 64789\nf 64789 64795 64796\nf 64789 64796 66413\nf 64789 66413 66391\nf 64790 64797 64799\nf 64790 64799 64792\nf 64790 66387 66409\nf 64790 66409 64797\nf 64791 64792 64799\nf 64791 64799 64798\nf 64793 64800 66448\nf 64793 66448 66411\nf 64794 66390 66412\nf 64794 66412 64801\nf 64795 64802 64796\nf 64796 64802 64804\nf 64796 64804 64805\nf 64796 64805 66414\nf 64796 66414 66413\nf 64797 64806 64808\nf 64797 64808 64799\nf 64797 66409 66446\nf 64797 66446 64806\nf 64798 64799 64808\nf 64798 64808 64807\nf 64800 64809 66500\nf 64800 66500 66448\nf 64801 66412 66449\nf 64801 66449 64810\nf 64802 64803 64804\nf 64803 64811 64804\nf 64804 64811 64812\nf 64804 64812 64805\nf 64805 64812 66502\nf 64805 66450 66414\nf 64805 66502 66450\nf 64806 64813 64815\nf 64806 64815 64808\nf 64806 66446 66498\nf 64806 66498 64813\nf 64807 64808 64815\nf 64807 64815 64814\nf 64809 64816 66554\nf 64809 66554 66500\nf 64810 66449 66501\nf 64810 66501 64817\nf 64811 64818 64812\nf 64812 64818 64819\nf 64812 64819 66556\nf 64812 66556 66502\nf 64813 64820 64822\nf 64813 64822 64815\nf 64813 66498 66552\nf 64813 66552 64820\nf 64814 64815 64822\nf 64814 64822 64821\nf 64816 64823 66618\nf 64816 66618 66554\nf 64817 66501 66555\nf 64817 66555 64824\nf 64818 64825 64819\nf 64819 64825 64827\nf 64819 64827 64828\nf 64819 64828 66557\nf 64819 66557 66556\nf 64820 64829 64831\nf 64820 64831 64822\nf 64820 66552 66616\nf 64820 66616 64829\nf 64821 64822 64831\nf 64821 64831 64830\nf 64823 64832 66684\nf 64823 66684 66618\nf 64824 66555 66619\nf 64824 66619 64833\nf 64825 64826 64827\nf 64826 64834 64827\nf 64827 64834 64835\nf 64827 64835 64828\nf 64828 64835 66686\nf 64828 66620 66557\nf 64828 66686 66620\nf 64829 64836 64838\nf 64829 64838 64831\nf 64829 66616 66682\nf 64829 66682 64836\nf 64830 64831 64838\nf 64830 64838 64837\nf 64832 64839 66755\nf 64832 66755 66684\nf 64833 66619 66685\nf 64833 66685 64840\nf 64834 64841 64835\nf 64835 64841 64843\nf 64835 64843 64844\nf 64835 64844 66687\nf 64835 66687 66686\nf 64836 64845 64847\nf 64836 64847 64838\nf 64836 66682 66753\nf 64836 66753 64845\nf 64837 64838 64847\nf 64837 64847 64846\nf 64839 64848 66835\nf 64839 66835 66755\nf 64840 66685 66756\nf 64840 66756 64849\nf 64841 64842 64843\nf 64842 64850 64843\nf 64843 64850 64852\nf 64843 64852 64844\nf 64844 64852 66837\nf 64844 66757 66687\nf 64844 66837 66757\nf 64845 64853 64856\nf 64845 64856 64847\nf 64845 66753 66833\nf 64845 66833 64853\nf 64846 64847 64856\nf 64846 64856 64854\nf 64848 64857 66921\nf 64848 66921 66835\nf 64849 66756 66836\nf 64849 66836 64858\nf 64850 64851 64852\nf 64851 64859 64861\nf 64851 64861 66838\nf 64851 66838 64852\nf 64852 66838 66837\nf 64853 64865 64868\nf 64853 64868 64856\nf 64853 66833 66918\nf 64853 66918 64865\nf 64854 64856 64855\nf 64855 64856 64868\nf 64855 64868 64866\nf 64857 64869 67054\nf 64857 67054 66921\nf 64858 66836 66922\nf 64858 66922 64870\nf 64859 64860 64861\nf 64860 64862 64861\nf 64861 64862 64863\nf 64861 64863 66840\nf 64861 66840 66838\nf 64862 64871 64873\nf 64862 64873 66924\nf 64862 66924 64863\nf 64863 66923 66840\nf 64863 66924 66923\nf 64864 64865 66919\nf 64864 65000 65002\nf 64864 65002 65005\nf 64864 65005 64865\nf 64864 66916 67051\nf 64864 66919 66916\nf 64864 67051 65000\nf 64865 65005 64868\nf 64865 66918 66919\nf 64866 64868 64867\nf 64867 64868 65005\nf 64867 65005 65003\nf 64869 65006 67096\nf 64869 67096 67054\nf 64870 66922 67055\nf 64870 67055 65008\nf 64871 64872 64873\nf 64872 64874 64873\nf 64873 64874 64875\nf 64873 64875 66926\nf 64873 66926 66924\nf 64874 64876 64875\nf 64875 64876 64877\nf 64875 64877 66928\nf 64875 66928 66926\nf 64876 64878 67057\nf 64876 67057 64877\nf 64877 67056 66928\nf 64877 67057 67056\nf 64878 64879 67057\nf 64879 64880 67059\nf 64879 67059 67057\nf 64880 64881 67061\nf 64880 67061 67059\nf 64881 64882 67063\nf 64881 67063 67061\nf 64882 64883 67065\nf 64882 67065 67063\nf 64883 64884 67067\nf 64883 67067 67065\nf 64884 64885 67069\nf 64884 67069 67067\nf 64885 64886 67071\nf 64885 67071 67069\nf 64886 64887 67073\nf 64886 67073 67071\nf 64887 64888 67075\nf 64887 67075 67073\nf 64888 64889 67077\nf 64888 67077 67075\nf 64889 64890 67079\nf 64889 67079 67077\nf 64890 64891 67081\nf 64890 67081 67079\nf 64891 64892 67083\nf 64891 67083 67081\nf 64892 64893 67085\nf 64892 67085 67083\nf 64893 64894 67087\nf 64893 67087 67085\nf 64894 64895 67089\nf 64894 67089 67087\nf 64895 64896 67091\nf 64895 67091 67089\nf 64896 64897 67094\nf 64896 67094 67091\nf 64897 64898 67093\nf 64897 64899 64898\nf 64897 67093 67094\nf 64898 64899 64900\nf 64898 64900 66951\nf 64898 66949 67093\nf 64898 66951 66949\nf 64899 64901 64900\nf 64900 64901 64902\nf 64900 64902 66953\nf 64900 66953 66951\nf 64901 64903 64902\nf 64902 64903 64904\nf 64902 64904 66955\nf 64902 66955 66953\nf 64903 64905 64904\nf 64904 64905 64906\nf 64904 64906 66957\nf 64904 66957 66955\nf 64905 64907 64906\nf 64906 64907 64908\nf 64906 64908 66959\nf 64906 66959 66957\nf 64907 64909 64908\nf 64908 64909 64910\nf 64908 64910 66961\nf 64908 66961 66959\nf 64909 64911 64910\nf 64910 64911 64912\nf 64910 64912 66963\nf 64910 66963 66961\nf 64911 64913 64912\nf 64912 64913 64914\nf 64912 64914 66965\nf 64912 66965 66963\nf 64913 64915 64914\nf 64914 64915 64916\nf 64914 64916 66967\nf 64914 66967 66965\nf 64915 64917 64916\nf 64916 64917 64918\nf 64916 64918 66969\nf 64916 66969 66967\nf 64917 64919 64918\nf 64918 64919 64920\nf 64918 64920 66971\nf 64918 66971 66969\nf 64919 64921 64920\nf 64920 64921 64922\nf 64920 64922 66973\nf 64920 66973 66971\nf 64921 64923 64922\nf 64922 64923 64924\nf 64922 64924 66975\nf 64922 66975 66973\nf 64923 64925 64924\nf 64924 64925 64926\nf 64924 64926 66977\nf 64924 66977 66975\nf 64925 64927 64926\nf 64926 64927 64928\nf 64926 64928 66979\nf 64926 66979 66977\nf 64927 64929 64928\nf 64928 64929 64930\nf 64928 64930 66981\nf 64928 66981 66979\nf 64929 64931 64930\nf 64930 64931 64932\nf 64930 64932 66983\nf 64930 66983 66981\nf 64931 64933 64932\nf 64932 64933 64934\nf 64932 64934 66985\nf 64932 66985 66983\nf 64933 64935 64934\nf 64934 64935 64936\nf 64934 64936 66987\nf 64934 66987 66985\nf 64935 64937 64936\nf 64936 64937 64938\nf 64936 64938 66989\nf 64936 66989 66987\nf 64937 64939 64938\nf 64938 64939 64940\nf 64938 64940 66991\nf 64938 66991 66989\nf 64939 64941 64940\nf 64940 64941 64942\nf 64940 64942 66993\nf 64940 66993 66991\nf 64941 64943 64942\nf 64942 64943 64944\nf 64942 64944 66995\nf 64942 66995 66993\nf 64943 64945 64944\nf 64944 64945 64946\nf 64944 64946 66997\nf 64944 66997 66995\nf 64945 64947 64946\nf 64946 64947 64948\nf 64946 64948 66999\nf 64946 66999 66997\nf 64947 64949 64948\nf 64948 64949 64950\nf 64948 64950 67001\nf 64948 67001 66999\nf 64949 64951 64950\nf 64950 64951 64952\nf 64950 64952 67003\nf 64950 67003 67001\nf 64951 64953 64952\nf 64952 64953 64954\nf 64952 64954 67005\nf 64952 67005 67003\nf 64953 64955 64954\nf 64954 64955 64956\nf 64954 64956 67007\nf 64954 67007 67005\nf 64955 64957 64956\nf 64956 64957 64958\nf 64956 64958 67009\nf 64956 67009 67007\nf 64957 64959 64958\nf 64958 64959 64960\nf 64958 64960 67011\nf 64958 67011 67009\nf 64959 64961 64960\nf 64960 64961 64962\nf 64960 64962 67013\nf 64960 67013 67011\nf 64961 64963 64962\nf 64962 64963 64964\nf 64962 64964 67015\nf 64962 67015 67013\nf 64963 64965 64964\nf 64964 64965 64966\nf 64964 64966 67017\nf 64964 67017 67015\nf 64965 64967 64966\nf 64966 64967 64968\nf 64966 64968 67019\nf 64966 67019 67017\nf 64967 64969 64968\nf 64968 64969 64970\nf 64968 64970 67021\nf 64968 67021 67019\nf 64969 64971 64970\nf 64970 64971 64972\nf 64970 64972 67023\nf 64970 67023 67021\nf 64971 64973 64972\nf 64972 64973 64974\nf 64972 64974 67025\nf 64972 67025 67023\nf 64973 64975 64974\nf 64974 64975 64976\nf 64974 64976 67027\nf 64974 67027 67025\nf 64975 64977 64976\nf 64976 64977 64978\nf 64976 64978 67029\nf 64976 67029 67027\nf 64977 64979 64978\nf 64978 64979 64980\nf 64978 64980 67031\nf 64978 67031 67029\nf 64979 64981 64980\nf 64980 64981 64982\nf 64980 64982 67033\nf 64980 67033 67031\nf 64981 64983 64982\nf 64982 64983 64984\nf 64982 64984 67035\nf 64982 67035 67033\nf 64983 64985 64984\nf 64984 64985 64986\nf 64984 64986 67037\nf 64984 67037 67035\nf 64985 64987 64986\nf 64986 64987 64988\nf 64986 64988 67039\nf 64986 67039 67037\nf 64987 64989 64988\nf 64988 64989 64990\nf 64988 64990 67041\nf 64988 67041 67039\nf 64989 64991 64990\nf 64990 64991 64992\nf 64990 64992 67043\nf 64990 67043 67041\nf 64991 64993 64992\nf 64992 64993 64994\nf 64992 64994 67045\nf 64992 67045 67043\nf 64993 64995 64994\nf 64994 64995 64996\nf 64994 64996 67047\nf 64994 67047 67045\nf 64995 64997 64996\nf 64996 64997 64998\nf 64996 64998 67049\nf 64996 67049 67047\nf 64997 64999 64998\nf 64998 64999 65000\nf 64998 65000 67052\nf 64998 67052 67049\nf 64999 65001 65000\nf 65000 65001 65002\nf 65000 67051 67052\nf 65001 65004 65002\nf 65002 65004 65005\nf 65003 65005 65004\nf 65006 65007 67096\nf 65007 65009 67099\nf 65007 67097 67096\nf 65007 67099 67097\nf 65008 67055 67098\nf 65008 67098 65010\nf 65009 65011 67102\nf 65009 67102 67099\nf 65010 67098 67101\nf 65010 67101 65013\nf 65011 65012 67104\nf 65011 67104 67102\nf 65012 65014 65016\nf 65012 65016 67104\nf 65013 67101 67103\nf 65013 67103 65017\nf 65014 65015 65016\nf 65015 65019 65021\nf 65015 65021 65016\nf 65016 65021 67105\nf 65016 67105 67104\nf 65017 65023 65018\nf 65017 67103 67106\nf 65017 67106 67110\nf 65017 67110 65023\nf 65018 65023 65022\nf 65019 65020 65021\nf 65020 65035 67123\nf 65020 67107 67109\nf 65020 67109 65021\nf 65020 67123 67107\nf 65021 67108 67105\nf 65021 67109 67108\nf 65022 65023 65038\nf 65022 65038 65037\nf 65023 67110 65038\nf 65024 65113 65115\nf 65024 65115 67111\nf 65024 67111 67112\nf 65024 67112 67113\nf 65024 67113 65025\nf 65025 67113 67114\nf 65025 67114 65026\nf 65026 67114 67115\nf 65026 67115 65027\nf 65027 67115 67116\nf 65027 67116 65028\nf 65028 67116 67117\nf 65028 67117 65029\nf 65029 67117 67118\nf 65029 67118 65030\nf 65030 67118 67119\nf 65030 67119 65031\nf 65031 67119 67120\nf 65031 67120 65032\nf 65032 67120 67121\nf 65032 67121 65033\nf 65033 67121 67122\nf 65033 67122 65034\nf 65034 67122 67124\nf 65034 67124 65036\nf 65035 65036 67123\nf 65036 67124 67123\nf 65037 65038 65117\nf 65037 65117 65116\nf 65038 67110 67125\nf 65038 67125 65117\nf 65039 65119 67240\nf 65039 67126 67127\nf 65039 67127 65040\nf 65039 67240 67126\nf 65040 67127 67128\nf 65040 67128 65041\nf 65041 67128 67129\nf 65041 67129 65042\nf 65042 67129 67130\nf 65042 67130 65043\nf 65043 67130 67131\nf 65043 67131 65044\nf 65044 67131 67132\nf 65044 67132 65045\nf 65045 67132 67133\nf 65045 67133 65046\nf 65046 67133 67134\nf 65046 67134 65047\nf 65047 67134 67135\nf 65047 67135 65048\nf 65048 67135 67136\nf 65048 67136 65049\nf 65049 67136 67137\nf 65049 67137 65050\nf 65050 67137 67138\nf 65050 67138 65051\nf 65051 67138 67139\nf 65051 67139 65052\nf 65052 67139 67140\nf 65052 67140 65053\nf 65053 67140 67141\nf 65053 67141 65054\nf 65054 67141 67142\nf 65054 67142 65055\nf 65055 67142 67143\nf 65055 67143 65056\nf 65056 67143 67144\nf 65056 67144 65057\nf 65057 67144 67145\nf 65057 67145 65058\nf 65058 67145 67146\nf 65058 67146 65059\nf 65059 67146 67147\nf 65059 67147 65060\nf 65060 67147 67148\nf 65060 67148 65061\nf 65061 67148 67149\nf 65061 67149 65062\nf 65062 67149 67150\nf 65062 67150 65063\nf 65063 67150 67151\nf 65063 67151 65064\nf 65064 67151 67152\nf 65064 67152 65065\nf 65065 67152 67153\nf 65065 67153 65066\nf 65066 67153 67154\nf 65066 67154 65067\nf 65067 67154 67155\nf 65067 67155 65068\nf 65068 67155 67156\nf 65068 67156 65069\nf 65069 67156 67157\nf 65069 67157 65070\nf 65070 67157 67158\nf 65070 67158 65071\nf 65071 67158 67159\nf 65071 67159 65072\nf 65072 67159 67160\nf 65072 67160 65073\nf 65073 67160 67161\nf 65073 67161 65074\nf 65074 67161 67162\nf 65074 67162 65075\nf 65075 67162 67163\nf 65075 67163 65076\nf 65076 67163 67165\nf 65076 67165 65077\nf 65077 67165 67167\nf 65077 67167 65078\nf 65078 67167 67169\nf 65078 67169 65079\nf 65079 67169 67171\nf 65079 67171 65080\nf 65080 67171 67173\nf 65080 67173 65081\nf 65081 67173 67175\nf 65081 67175 65082\nf 65082 67175 67177\nf 65082 67177 65083\nf 65083 67177 67179\nf 65083 67179 65084\nf 65084 67179 67181\nf 65084 67181 65085\nf 65085 67181 67183\nf 65085 67183 65086\nf 65086 67183 67185\nf 65086 67185 65087\nf 65087 67185 67187\nf 65087 67187 65088\nf 65088 67187 67189\nf 65088 67189 65089\nf 65089 67189 67191\nf 65089 67191 65090\nf 65090 67191 67193\nf 65090 67193 65091\nf 65091 67193 67195\nf 65091 67195 65092\nf 65092 67195 67197\nf 65092 67197 65093\nf 65093 67197 67199\nf 65093 67199 65094\nf 65094 67199 67201\nf 65094 67201 65095\nf 65095 67201 67203\nf 65095 67203 65096\nf 65096 67203 67205\nf 65096 67205 65097\nf 65097 67205 67207\nf 65097 67207 65098\nf 65098 67207 67209\nf 65098 67209 65099\nf 65099 67209 67211\nf 65099 67211 65100\nf 65100 67211 67213\nf 65100 67213 65101\nf 65101 67213 67215\nf 65101 67215 65102\nf 65102 67215 67217\nf 65102 67217 65103\nf 65103 67217 67219\nf 65103 67219 65104\nf 65104 67219 67221\nf 65104 67221 65105\nf 65105 67221 67223\nf 65105 67223 65106\nf 65106 67223 67225\nf 65106 67225 65107\nf 65107 67225 67227\nf 65107 67227 65108\nf 65108 67227 67229\nf 65108 67229 65109\nf 65109 67229 67231\nf 65109 67231 65110\nf 65110 67231 67233\nf 65110 67233 65111\nf 65111 67233 67236\nf 65111 67236 65112\nf 65112 67236 65114\nf 65113 65114 65115\nf 65114 67235 65115\nf 65114 67236 67235\nf 65115 67235 67111\nf 65116 65117 65122\nf 65116 65122 65121\nf 65117 67125 67238\nf 65117 67238 65122\nf 65118 65123 67243\nf 65118 67239 67241\nf 65118 67241 65120\nf 65118 67243 67239\nf 65119 65120 67240\nf 65120 67241 67240\nf 65121 65122 65125\nf 65121 65125 65124\nf 65122 67238 67242\nf 65122 67242 65125\nf 65123 65126 67246\nf 65123 67246 67243\nf 65124 65125 65128\nf 65124 65128 65127\nf 65125 67242 67245\nf 65125 67245 65128\nf 65126 65129 67248\nf 65126 67248 67246\nf 65127 65128 65131\nf 65127 65131 65130\nf 65128 67245 67247\nf 65128 67247 65131\nf 65129 65132 67250\nf 65129 67250 67248\nf 65130 65131 65134\nf 65130 65134 65133\nf 65131 67247 67249\nf 65131 67249 65134\nf 65132 65135 67252\nf 65132 67252 67250\nf 65133 65134 65138\nf 65133 65138 65136\nf 65134 67249 67251\nf 65134 67251 65138\nf 65135 65139 67254\nf 65135 67254 67252\nf 65136 65138 65137\nf 65137 65138 67253\nf 65137 67253 65140\nf 65138 67251 67253\nf 65139 65141 67256\nf 65139 67256 67254\nf 65140 67253 67255\nf 65140 67255 65142\nf 65141 65143 67258\nf 65141 67258 67256\nf 65142 67255 67257\nf 65142 67257 65144\nf 65143 65145 67260\nf 65143 67260 67258\nf 65144 67257 67259\nf 65144 67259 65146\nf 65145 65147 67262\nf 65145 67262 67260\nf 65146 67259 67261\nf 65146 67261 65148\nf 65147 65149 67264\nf 65147 67264 67262\nf 65148 67261 67263\nf 65148 67263 65150\nf 65149 65151 67267\nf 65149 67267 67264\nf 65150 67263 67265\nf 65150 67265 65152\nf 65151 65153 67270\nf 65151 67270 67267\nf 65152 67265 67268\nf 65152 67268 65154\nf 65153 65155 67274\nf 65153 67274 67270\nf 65154 67268 67271\nf 65154 67271 65156\nf 65155 65158 67276\nf 65155 67276 67274\nf 65156 65157 65160\nf 65156 65160 65159\nf 65156 67271 65157\nf 65157 67271 67272\nf 65157 67272 67275\nf 65157 67275 65160\nf 65158 65161 67278\nf 65158 67278 67276\nf 65159 65160 65163\nf 65159 65163 65162\nf 65160 67275 67277\nf 65160 67277 65163\nf 65161 65164 67280\nf 65161 67280 67278\nf 65162 65163 65167\nf 65162 65167 65165\nf 65163 67277 67279\nf 65163 67279 65167\nf 65164 65168 67282\nf 65164 67282 67280\nf 65165 65167 65166\nf 65166 65167 67281\nf 65166 67281 65169\nf 65167 67279 67281\nf 65168 65170 67284\nf 65168 67284 67282\nf 65169 67281 67283\nf 65169 67283 65171\nf 65170 65173 67286\nf 65170 67286 67284\nf 65171 65175 65172\nf 65171 67283 67285\nf 65171 67285 67287\nf 65171 67287 65175\nf 65172 65175 65174\nf 65173 65176 67288\nf 65173 67288 67286\nf 65174 65175 65178\nf 65174 65178 65177\nf 65175 67287 65178\nf 65176 65179 67290\nf 65176 67290 67288\nf 65177 65178 65181\nf 65177 65181 65180\nf 65178 67287 67289\nf 65178 67289 65181\nf 65179 65182 67292\nf 65179 67292 67290\nf 65180 65181 65185\nf 65180 65185 65184\nf 65181 67289 67291\nf 65181 67291 65185\nf 65182 65183 67294\nf 65182 67294 67292\nf 65183 65186 65187\nf 65183 65187 67294\nf 65184 65185 65189\nf 65184 65189 65188\nf 65185 67291 67293\nf 65185 67293 65189\nf 65186 65190 67297\nf 65186 67297 65187\nf 65187 67295 67294\nf 65187 67297 67295\nf 65188 65189 65192\nf 65188 65192 65191\nf 65189 67293 67296\nf 65189 67296 65192\nf 65190 65193 67301\nf 65190 67301 67297\nf 65191 65192 67300\nf 65191 67300 67302\nf 65191 67302 65194\nf 65192 67296 67299\nf 65192 67299 67300\nf 65193 65195 67304\nf 65193 67304 67301\nf 65194 67302 65196\nf 65195 65197 67307\nf 65195 67307 67304\nf 65196 67302 67305\nf 65196 67305 65198\nf 65197 65199 67310\nf 65197 67310 67307\nf 65198 67305 67308\nf 65198 67308 65200\nf 65199 65201 67313\nf 65199 67313 67310\nf 65200 67308 67311\nf 65200 67311 65202\nf 65201 65203 67316\nf 65201 67316 67313\nf 65202 67311 67314\nf 65202 67314 65204\nf 65203 65205 67320\nf 65203 67320 67316\nf 65204 67314 67317\nf 65204 67317 65207\nf 65205 65206 67322\nf 65205 67322 67320\nf 65206 65209 65210\nf 65206 65210 67322\nf 65207 65208 65212\nf 65207 65212 65211\nf 65207 67317 65208\nf 65208 67317 67318\nf 65208 67318 67321\nf 65208 67321 65212\nf 65209 65213 65210\nf 65210 65213 65214\nf 65210 65214 67324\nf 65210 67324 67322\nf 65211 65212 65216\nf 65211 65216 65215\nf 65212 67321 67323\nf 65212 67323 65216\nf 65213 65217 67327\nf 65213 67327 65214\nf 65214 67325 67324\nf 65214 67327 67325\nf 65215 65216 65219\nf 65215 65219 65218\nf 65216 67323 67326\nf 65216 67326 65219\nf 65217 65220 67330\nf 65217 67330 67327\nf 65218 65219 65222\nf 65218 65222 65221\nf 65219 67326 67329\nf 65219 67329 65222\nf 65220 65223 67332\nf 65220 67332 67330\nf 65221 65222 65225\nf 65221 65225 65224\nf 65222 67329 67331\nf 65222 67331 65225\nf 65223 65226 67334\nf 65223 67334 67332\nf 65224 65225 65228\nf 65224 65228 65227\nf 65225 67331 67333\nf 65225 67333 65228\nf 65226 65229 67336\nf 65226 67336 67334\nf 65227 65228 65231\nf 65227 65231 65230\nf 65228 67333 67335\nf 65228 67335 65231\nf 65229 65232 67338\nf 65229 67338 67336\nf 65230 65231 65234\nf 65230 65234 65233\nf 65231 67335 67337\nf 65231 67337 65234\nf 65232 65235 67341\nf 65232 67341 67338\nf 65233 65234 65237\nf 65233 65237 65236\nf 65234 67337 67339\nf 65234 67339 65237\nf 65235 65238 67344\nf 65235 67344 67341\nf 65236 65237 65240\nf 65236 65240 65239\nf 65237 67339 67342\nf 65237 67342 65240\nf 65238 65241 67347\nf 65238 67347 67344\nf 65239 65240 65243\nf 65239 65243 65242\nf 65240 67342 67345\nf 65240 67345 65243\nf 65241 65244 67350\nf 65241 67350 67347\nf 65242 65243 65246\nf 65242 65246 65245\nf 65243 67345 67348\nf 65243 67348 65246\nf 65244 65247 67353\nf 65244 67353 67350\nf 65245 65246 65249\nf 65245 65249 65248\nf 65246 67348 67351\nf 65246 67351 65249\nf 65247 65250 67356\nf 65247 67356 67353\nf 65248 65249 65252\nf 65248 65252 65251\nf 65249 67351 67354\nf 65249 67354 65252\nf 65250 65253 67359\nf 65250 67359 67356\nf 65251 65252 65256\nf 65251 65256 65254\nf 65252 67354 67357\nf 65252 67357 65256\nf 65253 65257 67362\nf 65253 67362 67359\nf 65254 65256 65255\nf 65255 65256 67360\nf 65255 67360 65259\nf 65256 67357 67360\nf 65257 65258 67365\nf 65257 67365 67362\nf 65258 65260 65261\nf 65258 65261 67365\nf 65259 67360 67363\nf 65259 67363 65262\nf 65260 65263 65261\nf 65261 65263 65264\nf 65261 65264 67368\nf 65261 67368 67365\nf 65262 67363 67366\nf 65262 67366 65265\nf 65263 65267 65264\nf 65264 65267 65268\nf 65264 65268 67371\nf 65264 67371 67368\nf 65265 65270 65266\nf 65265 67366 67369\nf 65265 67369 67372\nf 65265 67372 65270\nf 65266 65270 65269\nf 65267 65271 65268\nf 65268 65271 65272\nf 65268 65272 67374\nf 65268 67374 67371\nf 65269 65270 65275\nf 65269 65275 65273\nf 65270 67372 65275\nf 65271 65276 67379\nf 65271 67379 65272\nf 65272 67375 67374\nf 65272 67379 67375\nf 65273 65275 65274\nf 65274 65275 67376\nf 65274 67376 67377\nf 65274 67377 65277\nf 65275 67372 67376\nf 65276 65279 67382\nf 65276 67382 67379\nf 65277 65278 65281\nf 65277 65281 65280\nf 65277 67377 65278\nf 65278 67377 67381\nf 65278 67381 65281\nf 65279 65282 67385\nf 65279 67385 67382\nf 65280 65281 65284\nf 65280 65284 65283\nf 65281 67381 67384\nf 65281 67384 65284\nf 65282 65285 67389\nf 65282 67389 67385\nf 65283 65284 65287\nf 65283 65287 65286\nf 65284 67384 67387\nf 65284 67387 65287\nf 65285 65288 67393\nf 65285 67393 67389\nf 65286 65287 65290\nf 65286 65290 65289\nf 65287 67387 67391\nf 65287 67391 65290\nf 65288 65291 67397\nf 65288 67397 67393\nf 65289 65290 65293\nf 65289 65293 65292\nf 65290 67391 67395\nf 65290 67395 65293\nf 65291 65294 67400\nf 65291 67400 67397\nf 65292 65293 65296\nf 65292 65296 65295\nf 65293 67395 67398\nf 65293 67398 65296\nf 65294 65297 67403\nf 65294 67403 67400\nf 65295 65296 65300\nf 65295 65300 65299\nf 65296 67398 67401\nf 65296 67401 65300\nf 65297 65298 67406\nf 65297 67406 67403\nf 65298 65301 65302\nf 65298 65302 67406\nf 65299 65300 65305\nf 65299 65305 65303\nf 65300 67401 67404\nf 65300 67404 65305\nf 65301 65306 65302\nf 65302 65306 65307\nf 65302 65307 67410\nf 65302 67410 67406\nf 65303 65305 65304\nf 65304 65305 67407\nf 65304 67407 67408\nf 65304 67408 65308\nf 65305 67404 67407\nf 65306 65310 65307\nf 65307 65310 65311\nf 65307 65311 67412\nf 65307 67412 67410\nf 65308 65309 65313\nf 65308 65313 65312\nf 65308 67408 65309\nf 65309 67408 67411\nf 65309 67411 65313\nf 65310 65314 65311\nf 65311 65314 65315\nf 65311 65315 67414\nf 65311 67414 67412\nf 65312 65313 65317\nf 65312 65317 65316\nf 65313 67411 67413\nf 65313 67413 65317\nf 65314 65318 67417\nf 65314 67417 65315\nf 65315 67415 67414\nf 65315 67417 67415\nf 65316 65317 65320\nf 65316 65320 65319\nf 65317 67413 67416\nf 65317 67416 65320\nf 65318 65321 67420\nf 65318 67420 67417\nf 65319 65320 65323\nf 65319 65323 65322\nf 65320 67416 67419\nf 65320 67419 65323\nf 65321 65324 67423\nf 65321 67423 67420\nf 65322 65323 65326\nf 65322 65326 65325\nf 65323 67419 67422\nf 65323 67422 65326\nf 65324 65327 67426\nf 65324 67426 67423\nf 65325 65326 65330\nf 65325 65330 65328\nf 65326 67422 67425\nf 65326 67425 65330\nf 65327 65331 67430\nf 65327 67430 67426\nf 65328 65330 65329\nf 65329 65330 67428\nf 65329 67428 65332\nf 65330 67425 67428\nf 65331 65333 67434\nf 65331 67434 67430\nf 65332 67428 67432\nf 65332 67432 65334\nf 65333 65335 67438\nf 65333 67438 67434\nf 65334 67432 67436\nf 65334 67436 65336\nf 65335 65337 67442\nf 65335 67442 67438\nf 65336 67436 67439\nf 65336 67439 65338\nf 65337 65340 67444\nf 65337 67444 67442\nf 65338 65339 65342\nf 65338 65342 65341\nf 65338 67439 65339\nf 65339 67439 67440\nf 65339 67440 67443\nf 65339 67443 65342\nf 65340 65343 67446\nf 65340 67446 67444\nf 65341 65342 65346\nf 65341 65346 65344\nf 65342 67443 67445\nf 65342 67445 65346\nf 65343 65347 67448\nf 65343 67448 67446\nf 65344 65346 65345\nf 65345 65346 67447\nf 65345 67447 65348\nf 65346 67445 67447\nf 65347 65349 67450\nf 65347 67450 67448\nf 65348 67447 67449\nf 65348 67449 65350\nf 65349 65351 67452\nf 65349 67452 67450\nf 65350 67449 67451\nf 65350 67451 65353\nf 65351 65352 67455\nf 65351 67455 67452\nf 65352 65354 65355\nf 65352 65355 67455\nf 65353 67451 67453\nf 65353 67453 65356\nf 65354 65357 67459\nf 65354 67459 65355\nf 65355 67456 67455\nf 65355 67459 67456\nf 65356 67453 67457\nf 65356 67457 65358\nf 65357 65359 67463\nf 65357 67463 67459\nf 65358 67457 67461\nf 65358 67461 65360\nf 65359 65361 67466\nf 65359 67466 67463\nf 65360 67461 67464\nf 65360 67464 65362\nf 65361 65364 67469\nf 65361 67469 67466\nf 65362 65366 65363\nf 65362 67464 67467\nf 65362 67467 67470\nf 65362 67470 65366\nf 65363 65366 65365\nf 65364 65367 67471\nf 65364 67471 67469\nf 65365 65366 65369\nf 65365 65369 65368\nf 65366 67470 65369\nf 65367 65370 67473\nf 65367 67473 67471\nf 65368 65369 65372\nf 65368 65372 65371\nf 65369 67470 67472\nf 65369 67472 65372\nf 65370 65373 67476\nf 65370 67476 67473\nf 65371 65372 67475\nf 65371 67475 67477\nf 65371 67477 65375\nf 65372 67472 67474\nf 65372 67474 67475\nf 65373 65374 67479\nf 65373 67479 67476\nf 65374 65376 65377\nf 65374 65377 67479\nf 65375 67477 65378\nf 65376 65379 67483\nf 65376 67483 65377\nf 65377 67480 67479\nf 65377 67483 67480\nf 65378 67477 67481\nf 65378 67481 65380\nf 65379 65381 67488\nf 65379 67488 67483\nf 65380 67481 67485\nf 65380 67485 65383\nf 65381 65382 67491\nf 65381 67491 67488\nf 65382 65385 65386\nf 65382 65386 67491\nf 65383 65384 65388\nf 65383 65388 65387\nf 65383 67485 65384\nf 65384 67485 67486\nf 65384 67486 67490\nf 65384 67490 65388\nf 65385 65389 67494\nf 65385 67494 65386\nf 65386 67492 67491\nf 65386 67494 67492\nf 65387 65388 65391\nf 65387 65391 65390\nf 65388 67490 67493\nf 65388 67493 65391\nf 65389 65392 67497\nf 65389 67497 67494\nf 65390 65391 65395\nf 65390 65395 65394\nf 65391 67493 67496\nf 65391 67496 65395\nf 65392 65393 67497\nf 65393 65396 67500\nf 65393 67498 67497\nf 65393 67500 67498\nf 65394 65395 65398\nf 65394 65398 65397\nf 65395 67496 67499\nf 65395 67499 65398\nf 65396 65399 67502\nf 65396 67502 67500\nf 65397 65398 65403\nf 65397 65403 65401\nf 65398 67499 67501\nf 65398 67501 65403\nf 65399 65400 67502\nf 65400 65404 67506\nf 65400 67503 67502\nf 65400 67506 67503\nf 65401 65403 65402\nf 65402 65403 67504\nf 65402 67504 65406\nf 65403 67501 67504\nf 65404 65405 67509\nf 65404 67509 67506\nf 65405 65407 65408\nf 65405 65408 67509\nf 65406 67504 67507\nf 65406 67507 65409\nf 65407 65411 67513\nf 65407 67513 65408\nf 65408 67510 67509\nf 65408 67513 67510\nf 65409 65414 65410\nf 65409 67507 67511\nf 65409 67511 67515\nf 65409 67515 65414\nf 65410 65414 65413\nf 65411 65412 67518\nf 65411 67518 67513\nf 65412 65417 65418\nf 65412 65418 67518\nf 65413 65414 67516\nf 65413 67516 65415\nf 65414 67515 67516\nf 65415 67516 67517\nf 65415 67517 65416\nf 65416 65420 65419\nf 65416 67517 65420\nf 65417 65421 65418\nf 65418 65421 65423\nf 65418 65423 67523\nf 65418 67523 67518\nf 65419 65420 65422\nf 65420 67517 67520\nf 65420 67520 67522\nf 65420 67522 65422\nf 65421 65422 65423\nf 65422 65424 65423\nf 65422 67522 65424\nf 65423 65424 67524\nf 65423 67524 67523\nf 65424 67522 67525\nf 65424 67525 67528\nf 65424 67527 67524\nf 65424 67528 67527\nf 65425 65426 67532\nf 65425 65444 65442\nf 65425 67531 65444\nf 65425 67532 67531\nf 65426 65427 67533\nf 65426 67533 67532\nf 65427 65428 67534\nf 65427 67534 67533\nf 65428 65429 67535\nf 65428 67535 67534\nf 65429 65430 67537\nf 65429 67537 67535\nf 65430 65431 67539\nf 65430 67539 67537\nf 65431 65432 67541\nf 65431 67541 67539\nf 65432 65445 67543\nf 65432 67542 67541\nf 65432 67543 67542\nf 65433 65434 67545\nf 65433 65449 65447\nf 65433 67544 65449\nf 65433 67545 67544\nf 65434 65435 67547\nf 65434 67547 67545\nf 65435 65436 67546\nf 65435 65437 67549\nf 65435 67546 67547\nf 65435 67549 65436\nf 65436 67530 67546\nf 65436 67548 67530\nf 65436 67549 67548\nf 65437 65438 67549\nf 65438 65439 67551\nf 65438 67551 67549\nf 65439 65440 67553\nf 65439 67553 67551\nf 65440 65450 67556\nf 65440 67555 67553\nf 65440 67556 67555\nf 65441 65443 67560\nf 65441 65457 65455\nf 65441 67558 65457\nf 65441 67560 67558\nf 65442 65444 65443\nf 65443 65444 67559\nf 65443 67559 67560\nf 65444 67531 67559\nf 65445 65446 67543\nf 65445 65458 65446\nf 65446 65458 65460\nf 65446 65460 67569\nf 65446 67562 67543\nf 65446 67569 67562\nf 65447 65449 65448\nf 65448 65449 67563\nf 65448 67563 65461\nf 65449 67544 67563\nf 65450 65451 65452\nf 65450 65452 67556\nf 65451 65453 65452\nf 65452 65453 65454\nf 65452 65454 67557\nf 65452 67557 67556\nf 65453 65462 65464\nf 65453 65464 67565\nf 65453 67565 65454\nf 65454 67564 67557\nf 65454 67565 67564\nf 65455 65457 65456\nf 65456 65457 67568\nf 65456 67568 65467\nf 65457 67558 67568\nf 65458 65459 65460\nf 65459 65468 65469\nf 65459 65469 67570\nf 65459 67570 65460\nf 65460 67570 67569\nf 65461 67563 67572\nf 65461 67572 65470\nf 65462 65463 65464\nf 65463 65465 65464\nf 65464 65465 65466\nf 65464 65466 67567\nf 65464 67567 67565\nf 65465 65473 65474\nf 65465 65474 67576\nf 65465 67576 65466\nf 65466 67575 67567\nf 65466 67576 67575\nf 65467 67568 67578\nf 65467 67578 65475\nf 65468 65476 65469\nf 65469 65476 65478\nf 65469 65478 67583\nf 65469 67579 67570\nf 65469 67583 67579\nf 65470 65472 65471\nf 65470 67572 65472\nf 65471 65472 67580\nf 65471 67580 65479\nf 65472 67572 67573\nf 65472 67573 67580\nf 65473 65480 65474\nf 65474 65480 65481\nf 65474 65481 67587\nf 65474 67581 67576\nf 65474 67587 67581\nf 65475 67578 67582\nf 65475 67582 65482\nf 65476 65477 65478\nf 65477 65483 65478\nf 65478 65483 67583\nf 65479 67580 67584\nf 65479 67584 65484\nf 65480 65486 65481\nf 65481 65486 65487\nf 65481 65487 67592\nf 65481 67592 67587\nf 65482 67582 67588\nf 65482 67588 65488\nf 65483 65489 67594\nf 65483 67589 67583\nf 65483 67594 67589\nf 65484 65485 65491\nf 65484 65491 65490\nf 65484 67584 65485\nf 65485 67584 67585\nf 65485 67585 67591\nf 65485 67591 65491\nf 65486 65492 65487\nf 65487 65492 65493\nf 65487 65493 67598\nf 65487 67598 67592\nf 65488 67588 67593\nf 65488 67593 65494\nf 65489 65495 67594\nf 65490 65491 65498\nf 65490 65498 65497\nf 65491 67591 67597\nf 65491 67597 65498\nf 65492 65499 65493\nf 65493 65499 65500\nf 65493 65500 67602\nf 65493 67602 67598\nf 65494 67593 67599\nf 65494 67599 65501\nf 65495 65496 67595\nf 65495 65502 65496\nf 65495 67595 67594\nf 65496 65502 65503\nf 65496 65503 67604\nf 65496 67600 67595\nf 65496 67604 67600\nf 65497 65498 65505\nf 65497 65505 65504\nf 65498 67597 67601\nf 65498 67601 65505\nf 65499 65506 65500\nf 65500 65506 65508\nf 65500 65508 67606\nf 65500 67606 67602\nf 65501 67599 67603\nf 65501 67603 65509\nf 65502 65510 65503\nf 65503 65510 65511\nf 65503 65511 67608\nf 65503 67608 67604\nf 65504 65505 65513\nf 65504 65513 65512\nf 65505 67601 67605\nf 65505 67605 65513\nf 65506 65507 65508\nf 65507 65514 65508\nf 65508 65514 67606\nf 65509 67603 67607\nf 65509 67607 65515\nf 65510 65517 65511\nf 65511 65517 65518\nf 65511 65518 67612\nf 65511 67612 67608\nf 65512 65513 65520\nf 65512 65520 65519\nf 65513 67605 67609\nf 65513 67609 65520\nf 65514 65521 67614\nf 65514 67610 67606\nf 65514 67614 67610\nf 65515 65523 65516\nf 65515 67607 67611\nf 65515 67611 67615\nf 65515 67615 65523\nf 65516 65523 65522\nf 65517 65524 65518\nf 65518 65524 65525\nf 65518 65525 67617\nf 65518 67617 67612\nf 65519 65520 65527\nf 65519 65527 65526\nf 65520 67609 67613\nf 65520 67613 65527\nf 65521 65528 67619\nf 65521 67619 67614\nf 65522 65523 67616\nf 65522 67616 67620\nf 65522 67620 65529\nf 65523 67615 67616\nf 65524 65530 65525\nf 65525 65530 65531\nf 65525 65531 67622\nf 65525 67622 67617\nf 65526 65527 65533\nf 65526 65533 65532\nf 65527 67613 67618\nf 65527 67618 65533\nf 65528 65534 67625\nf 65528 67625 67619\nf 65529 67620 65536\nf 65530 65537 65531\nf 65531 65537 65538\nf 65531 65538 67627\nf 65531 67627 67622\nf 65532 65533 65540\nf 65532 65540 65539\nf 65533 67618 67624\nf 65533 67624 65540\nf 65534 65535 67630\nf 65534 67630 67625\nf 65535 65542 65543\nf 65535 65543 67630\nf 65536 67620 67626\nf 65536 67626 65544\nf 65537 65545 65538\nf 65538 65545 65546\nf 65538 65546 67632\nf 65538 67632 67627\nf 65539 65540 65549\nf 65539 65549 65541\nf 65540 65547 65549\nf 65540 67624 67629\nf 65540 67629 65547\nf 65541 65549 65548\nf 65542 65550 65543\nf 65543 65550 65551\nf 65543 65551 67636\nf 65543 67636 67630\nf 65544 67626 67631\nf 65544 67631 65552\nf 65545 65553 65546\nf 65546 65553 65555\nf 65546 65555 67638\nf 65546 67638 67632\nf 65547 65557 65549\nf 65547 67629 67634\nf 65547 67634 67635\nf 65547 67635 65557\nf 65548 65549 65557\nf 65548 65557 65556\nf 65550 65558 65551\nf 65551 65558 65559\nf 65551 65559 67642\nf 65551 67642 67636\nf 65552 67631 67637\nf 65552 67637 65560\nf 65553 65554 65555\nf 65554 65561 65562\nf 65554 65562 65555\nf 65555 65562 65563\nf 65555 65563 67644\nf 65555 67644 67638\nf 65556 65557 65565\nf 65556 65565 65564\nf 65557 67635 67640\nf 65557 67640 65565\nf 65558 65566 65559\nf 65559 65566 65567\nf 65559 65567 67648\nf 65559 67648 67642\nf 65560 67637 67643\nf 65560 67643 65568\nf 65561 65569 65562\nf 65562 65569 65570\nf 65562 65570 65571\nf 65562 65571 65563\nf 65563 65571 67650\nf 65563 67650 67644\nf 65564 65565 65573\nf 65564 65573 65572\nf 65565 67640 67646\nf 65565 67646 65573\nf 65566 65575 65567\nf 65567 65575 65576\nf 65567 65576 67654\nf 65567 67654 67648\nf 65568 67643 67649\nf 65568 67649 65577\nf 65569 65578 65570\nf 65570 65578 65579\nf 65570 65579 65580\nf 65570 65580 65571\nf 65571 65580 67656\nf 65571 67656 67650\nf 65572 65573 65583\nf 65572 65583 65574\nf 65573 65581 65583\nf 65573 67646 67652\nf 65573 67652 65581\nf 65574 65583 65582\nf 65575 65584 65576\nf 65576 65584 65585\nf 65576 65585 67660\nf 65576 67660 67654\nf 65577 67649 67655\nf 65577 67655 65586\nf 65578 65587 65579\nf 65579 65587 65588\nf 65579 65588 65589\nf 65579 65589 65580\nf 65580 65589 67663\nf 65580 67663 67656\nf 65581 65590 65592\nf 65581 65592 65583\nf 65581 67652 67658\nf 65581 67658 65590\nf 65582 65583 65592\nf 65582 65592 65591\nf 65584 65593 67667\nf 65584 67667 65585\nf 65585 67661 67660\nf 65585 67667 67661\nf 65586 67655 67662\nf 65586 67662 65594\nf 65587 65595 65588\nf 65588 65595 65596\nf 65588 65596 65597\nf 65588 65597 65589\nf 65589 65597 67670\nf 65589 67670 67663\nf 65590 65598 65600\nf 65590 65600 65592\nf 65590 67658 67665\nf 65590 67665 65598\nf 65591 65592 65600\nf 65591 65600 65599\nf 65593 65601 67674\nf 65593 67674 67667\nf 65594 67662 67669\nf 65594 67669 65602\nf 65595 65603 65596\nf 65596 65603 65604\nf 65596 65604 65605\nf 65596 65605 65597\nf 65597 65605 67677\nf 65597 67677 67670\nf 65598 65606 65608\nf 65598 65608 65600\nf 65598 67665 67672\nf 65598 67672 65606\nf 65599 65600 65608\nf 65599 65608 65607\nf 65601 65609 67681\nf 65601 67681 67674\nf 65602 67669 67676\nf 65602 67676 65611\nf 65603 65612 65604\nf 65604 65612 65614\nf 65604 65614 65615\nf 65604 65615 65605\nf 65605 65615 67684\nf 65605 67684 67677\nf 65606 65616 65619\nf 65606 65619 65608\nf 65606 67672 67679\nf 65606 67679 65616\nf 65607 65608 65619\nf 65607 65619 65617\nf 65609 65610 67694\nf 65609 67694 67681\nf 65610 65620 65621\nf 65610 65621 67694\nf 65611 67676 67683\nf 65611 67683 65622\nf 65612 65613 65614\nf 65613 65623 65614\nf 65614 65623 65625\nf 65614 65625 65615\nf 65615 65625 65626\nf 65615 65626 67685\nf 65615 67685 67684\nf 65616 65648 65619\nf 65616 67679 67692\nf 65616 67692 65648\nf 65617 65619 65618\nf 65618 65619 65648\nf 65618 65648 65647\nf 65620 65649 65621\nf 65621 65649 65650\nf 65621 65650 67740\nf 65621 67740 67694\nf 65622 67683 67696\nf 65622 67696 65651\nf 65623 65624 65625\nf 65624 65652 65625\nf 65625 65652 65654\nf 65625 65654 65626\nf 65626 65654 65656\nf 65626 65656 67698\nf 65626 67697 67685\nf 65626 67698 67697\nf 65627 65628 67712\nf 65627 65679 65677\nf 65627 67711 65679\nf 65627 67712 67711\nf 65628 65629 67713\nf 65628 67713 67712\nf 65629 65630 67714\nf 65629 67714 67713\nf 65630 65631 67715\nf 65630 67715 67714\nf 65631 65632 67716\nf 65631 67716 67715\nf 65632 65633 67717\nf 65632 67717 67716\nf 65633 65634 67718\nf 65633 67718 67717\nf 65634 65635 67720\nf 65634 67720 67718\nf 65635 65636 67719\nf 65635 65637 65636\nf 65635 67719 67720\nf 65636 65637 65638\nf 65636 65638 67689\nf 65636 67688 67719\nf 65636 67689 67688\nf 65637 65639 65638\nf 65638 65639 65640\nf 65638 65640 67690\nf 65638 67690 67689\nf 65639 65641 67722\nf 65639 67722 65640\nf 65640 67721 67690\nf 65640 67722 67721\nf 65641 65642 67722\nf 65642 65643 67724\nf 65642 67724 67722\nf 65643 65644 67725\nf 65643 67725 67724\nf 65644 65645 67726\nf 65644 67726 67725\nf 65645 65646 67727\nf 65645 67727 67726\nf 65646 65680 67729\nf 65646 67728 67727\nf 65646 67729 67728\nf 65647 65648 65705\nf 65647 65705 65704\nf 65648 65703 65705\nf 65648 67692 67737\nf 65648 67737 65703\nf 65649 65706 65650\nf 65650 65706 65707\nf 65650 65707 67824\nf 65650 67824 67740\nf 65651 67696 67742\nf 65651 67742 65708\nf 65652 65653 65654\nf 65653 65655 65654\nf 65654 65655 65656\nf 65655 65657 65656\nf 65656 65657 65658\nf 65656 65658 67700\nf 65656 67700 67698\nf 65657 65659 65658\nf 65658 65659 65660\nf 65658 65660 67702\nf 65658 67702 67700\nf 65659 65709 65660\nf 65660 65661 67704\nf 65660 65709 65711\nf 65660 65711 65661\nf 65660 67704 67702\nf 65661 65711 65713\nf 65661 65713 67744\nf 65661 67743 67704\nf 65661 67744 67743\nf 65662 65664 67707\nf 65662 65715 65718\nf 65662 65718 65664\nf 65662 67706 67746\nf 65662 67707 67706\nf 65662 67746 65715\nf 65663 65664 65718\nf 65663 65665 65664\nf 65663 65718 65716\nf 65664 65665 65666\nf 65664 65666 67708\nf 65664 67708 67707\nf 65665 65667 65666\nf 65666 65667 65668\nf 65666 65668 67709\nf 65666 67709 67708\nf 65667 65669 65668\nf 65668 65669 65670\nf 65668 65670 67710\nf 65668 67710 67709\nf 65669 65671 67750\nf 65669 67750 65670\nf 65670 67749 67710\nf 65670 67750 67749\nf 65671 65719 67751\nf 65671 67751 67750\nf 65672 65673 67752\nf 65672 65722 65720\nf 65672 67751 65722\nf 65672 67752 67751\nf 65673 65674 67753\nf 65673 67753 67752\nf 65674 65675 67754\nf 65674 67754 67753\nf 65675 65676 67755\nf 65675 67755 67754\nf 65676 65678 67757\nf 65676 67757 67755\nf 65677 65679 65678\nf 65678 65679 67756\nf 65678 67756 67757\nf 65679 67711 67756\nf 65680 65681 65682\nf 65680 65682 67729\nf 65681 65683 67760\nf 65681 67760 65682\nf 65682 67759 67729\nf 65682 67760 67759\nf 65683 65684 67760\nf 65684 65685 67762\nf 65684 67762 67760\nf 65685 65686 67764\nf 65685 67764 67762\nf 65686 65687 67765\nf 65686 67765 67764\nf 65687 65688 67766\nf 65687 67766 67765\nf 65688 65723 67768\nf 65688 67767 67766\nf 65688 67768 67767\nf 65689 65690 67770\nf 65689 65728 65726\nf 65689 67769 65728\nf 65689 67770 67769\nf 65690 65691 67771\nf 65690 67771 67770\nf 65691 65729 67774\nf 65691 67772 67771\nf 65691 67774 67772\nf 65692 65736 65734\nf 65692 65737 67782\nf 65692 67778 65736\nf 65692 67780 67778\nf 65692 67782 67780\nf 65693 65694 67788\nf 65693 65744 65742\nf 65693 67786 65744\nf 65693 67788 67786\nf 65694 65695 67790\nf 65694 67790 67788\nf 65695 65696 67793\nf 65695 67793 67790\nf 65696 65697 67792\nf 65696 65698 65697\nf 65696 67792 67793\nf 65697 65698 65699\nf 65697 65699 67731\nf 65697 67730 67792\nf 65697 67731 67730\nf 65698 65745 65699\nf 65699 65700 67732\nf 65699 65745 65747\nf 65699 65747 65700\nf 65699 67732 67731\nf 65700 65701 67733\nf 65700 65747 65749\nf 65700 65749 65701\nf 65700 67733 67732\nf 65701 65702 67734\nf 65701 65749 65751\nf 65701 65751 65702\nf 65701 67734 67733\nf 65702 65751 65753\nf 65702 65753 67796\nf 65702 67795 67734\nf 65702 67796 67795\nf 65703 65764 65765\nf 65703 65765 65767\nf 65703 65767 65705\nf 65703 67737 67738\nf 65703 67738 67821\nf 65703 67821 65764\nf 65704 65705 65767\nf 65704 65767 65766\nf 65706 65768 65707\nf 65707 65768 65769\nf 65707 65769 67835\nf 65707 67835 67824\nf 65708 67742 67826\nf 65708 67826 65770\nf 65709 65710 65711\nf 65710 65712 65711\nf 65711 65712 65713\nf 65712 65714 65713\nf 65713 65714 65715\nf 65713 65715 67747\nf 65713 67747 67744\nf 65714 65717 65715\nf 65715 65717 65718\nf 65715 67746 67747\nf 65716 65718 65717\nf 65719 65721 65722\nf 65719 65722 67751\nf 65720 65722 65721\nf 65723 65724 65725\nf 65723 65725 67768\nf 65724 65727 65725\nf 65725 65727 65728\nf 65725 65728 67769\nf 65725 67769 67768\nf 65726 65728 65727\nf 65729 65730 65731\nf 65729 65731 67774\nf 65730 65732 65731\nf 65731 65732 65733\nf 65731 65733 67776\nf 65731 67776 67774\nf 65732 65735 65733\nf 65733 65735 65736\nf 65733 65736 67778\nf 65733 67778 67776\nf 65734 65736 65735\nf 65737 65738 65739\nf 65737 65739 67782\nf 65738 65740 65739\nf 65739 65740 65741\nf 65739 65741 67784\nf 65739 67784 67782\nf 65740 65743 65741\nf 65741 65743 65744\nf 65741 65744 67786\nf 65741 67786 67784\nf 65742 65744 65743\nf 65745 65746 65747\nf 65746 65748 65747\nf 65747 65748 65749\nf 65748 65750 65749\nf 65749 65750 65751\nf 65750 65752 65751\nf 65751 65752 65753\nf 65752 65771 65753\nf 65753 65754 67798\nf 65753 65771 65773\nf 65753 65773 65754\nf 65753 67798 67796\nf 65754 65755 67800\nf 65754 65773 65774\nf 65754 65774 65755\nf 65754 67800 67798\nf 65755 65756 67802\nf 65755 65774 65775\nf 65755 65775 65756\nf 65755 67802 67800\nf 65756 65757 67804\nf 65756 65775 65776\nf 65756 65776 65757\nf 65756 67804 67802\nf 65757 65758 67806\nf 65757 65776 65777\nf 65757 65777 65758\nf 65757 67806 67804\nf 65758 65759 67808\nf 65758 65777 65778\nf 65758 65778 65759\nf 65758 67808 67806\nf 65759 65760 67810\nf 65759 65778 65779\nf 65759 65779 65760\nf 65759 67810 67808\nf 65760 65761 67812\nf 65760 65779 65780\nf 65760 65780 65761\nf 65760 67812 67810\nf 65761 65762 67814\nf 65761 65780 65781\nf 65761 65781 65762\nf 65761 67814 67812\nf 65762 65781 65782\nf 65762 65782 67828\nf 65762 67827 67814\nf 65762 67828 67827\nf 65763 65764 67822\nf 65763 65784 65785\nf 65763 65785 65786\nf 65763 65786 65764\nf 65763 67819 67832\nf 65763 67822 67819\nf 65763 67832 65784\nf 65764 65786 65788\nf 65764 65788 65765\nf 65764 67821 67822\nf 65765 65788 65791\nf 65765 65791 65767\nf 65766 65767 65791\nf 65766 65791 65789\nf 65768 65792 65769\nf 65769 65792 65793\nf 65769 65793 67838\nf 65769 67838 67835\nf 65770 67826 67837\nf 65770 67837 65794\nf 65771 65772 65773\nf 65772 65795 65773\nf 65773 65795 65797\nf 65773 65797 65774\nf 65774 65797 65799\nf 65774 65799 65775\nf 65775 65799 65801\nf 65775 65801 65776\nf 65776 65801 65802\nf 65776 65802 65777\nf 65777 65802 65804\nf 65777 65804 65778\nf 65778 65804 65806\nf 65778 65806 65779\nf 65779 65806 65808\nf 65779 65808 65780\nf 65780 65808 65810\nf 65780 65810 65781\nf 65781 65810 65812\nf 65781 65812 65782\nf 65782 65783 67830\nf 65782 65812 65814\nf 65782 65814 65783\nf 65782 67830 67828\nf 65783 65784 67833\nf 65783 65814 65816\nf 65783 65816 65784\nf 65783 67833 67830\nf 65784 65816 65818\nf 65784 65818 65785\nf 65784 67832 67833\nf 65785 65818 65821\nf 65785 65821 65786\nf 65786 65821 65788\nf 65787 65788 65821\nf 65787 65790 65788\nf 65787 65821 65819\nf 65788 65790 65791\nf 65789 65791 65790\nf 65792 65822 65793\nf 65793 65822 65823\nf 65793 65823 67841\nf 65793 67841 67838\nf 65794 67837 67840\nf 65794 67840 65824\nf 65795 65796 65797\nf 65796 65798 65797\nf 65797 65798 65799\nf 65798 65800 65799\nf 65799 65800 65801\nf 65800 65825 65801\nf 65801 65825 65828\nf 65801 65828 65802\nf 65802 65828 65804\nf 65803 65804 65828\nf 65803 65805 65804\nf 65803 65828 65826\nf 65804 65805 65806\nf 65805 65807 65806\nf 65806 65807 65808\nf 65807 65809 65808\nf 65808 65809 65810\nf 65809 65811 65810\nf 65810 65811 65812\nf 65811 65813 65812\nf 65812 65813 65814\nf 65813 65815 65814\nf 65814 65815 65816\nf 65815 65817 65816\nf 65816 65817 65818\nf 65817 65820 65818\nf 65818 65820 65821\nf 65819 65821 65820\nf 65822 65829 65823\nf 65823 65829 65830\nf 65823 65830 67844\nf 65823 67844 67841\nf 65824 67840 67843\nf 65824 67843 65831\nf 65825 65827 65828\nf 65826 65828 65827\nf 65829 65850 65830\nf 65830 65850 65851\nf 65830 65851 67847\nf 65830 67847 67844\nf 65831 67843 67846\nf 65831 67846 65852\nf 65832 65855 65857\nf 65832 65857 65858\nf 65832 65858 65833\nf 65833 65858 65859\nf 65833 65859 65834\nf 65834 65859 65860\nf 65834 65860 65835\nf 65835 65860 65861\nf 65835 65861 65836\nf 65836 65861 65862\nf 65836 65862 65837\nf 65837 65862 65863\nf 65837 65863 65838\nf 65838 65863 65864\nf 65838 65864 65839\nf 65839 65864 65866\nf 65839 65866 65840\nf 65840 65866 65865\nf 65841 65872 65874\nf 65841 65874 65875\nf 65841 65875 65842\nf 65842 65875 65876\nf 65842 65876 65843\nf 65843 65876 65877\nf 65843 65877 65844\nf 65844 65877 65878\nf 65844 65878 65845\nf 65845 65878 65879\nf 65845 65879 65846\nf 65846 65879 65880\nf 65846 65880 65847\nf 65847 65880 65881\nf 65847 65881 65848\nf 65848 65881 65883\nf 65848 65883 65849\nf 65849 65883 65882\nf 65850 65888 65851\nf 65851 65888 65889\nf 65851 65889 67853\nf 65851 67853 67847\nf 65852 67846 67849\nf 65852 67849 65890\nf 65853 65892 65894\nf 65853 65894 65895\nf 65853 65895 65854\nf 65854 65895 65896\nf 65854 65896 65856\nf 65855 65856 65857\nf 65856 65896 65857\nf 65857 65896 65897\nf 65857 65897 65898\nf 65857 65898 65858\nf 65858 65898 65899\nf 65858 65899 65859\nf 65859 65899 65900\nf 65859 65900 65860\nf 65860 65900 65901\nf 65860 65901 65861\nf 65861 65901 65902\nf 65861 65902 65862\nf 65862 65902 65903\nf 65862 65903 65863\nf 65863 65903 65864\nf 65864 65903 67862\nf 65864 67850 65866\nf 65864 67862 67850\nf 65865 65866 67851\nf 65865 67851 65867\nf 65866 67850 67851\nf 65867 67851 67852\nf 65867 67852 65868\nf 65868 65904 65906\nf 65868 65906 65869\nf 65868 67852 65904\nf 65869 65906 65905\nf 65870 65912 65914\nf 65870 65914 65915\nf 65870 65915 65871\nf 65871 65915 65916\nf 65871 65916 65873\nf 65872 65873 65874\nf 65873 65916 65874\nf 65874 65916 65917\nf 65874 65917 65918\nf 65874 65918 65875\nf 65875 65918 65919\nf 65875 65919 65876\nf 65876 65919 65920\nf 65876 65920 65877\nf 65877 65920 65921\nf 65877 65921 65878\nf 65878 65921 65922\nf 65878 65922 65879\nf 65879 65922 65923\nf 65879 65923 65880\nf 65880 65923 65924\nf 65880 65924 65881\nf 65881 65924 65925\nf 65881 65925 65883\nf 65882 65883 65926\nf 65882 65926 65884\nf 65883 65925 65926\nf 65884 65926 65927\nf 65884 65927 65885\nf 65885 65927 65928\nf 65885 65928 65886\nf 65886 65928 65930\nf 65886 65930 65887\nf 65887 65930 65929\nf 65888 65932 65889\nf 65889 65932 65934\nf 65889 65934 67877\nf 65889 67877 67853\nf 65890 67849 67855\nf 65890 67855 65935\nf 65891 65936 65938\nf 65891 65938 65939\nf 65891 65939 65893\nf 65892 65893 65894\nf 65893 65939 65894\nf 65894 65939 65940\nf 65894 65940 65941\nf 65894 65941 65895\nf 65895 65941 65942\nf 65895 65942 65896\nf 65896 65942 65897\nf 65897 65942 67881\nf 65897 67856 65898\nf 65897 67881 67856\nf 65898 67856 67857\nf 65898 67857 65899\nf 65899 67857 67858\nf 65899 67858 65900\nf 65900 67858 67859\nf 65900 67859 65901\nf 65901 67859 67860\nf 65901 67860 65902\nf 65902 67860 67861\nf 65902 67861 65903\nf 65903 67861 67863\nf 65903 67863 67862\nf 65904 67852 67866\nf 65904 67866 67868\nf 65904 67868 65906\nf 65905 65906 67869\nf 65905 67869 65907\nf 65906 67868 67869\nf 65907 67869 67870\nf 65907 67870 67871\nf 65907 67871 65908\nf 65908 67871 65909\nf 65909 65943 65945\nf 65909 65945 65910\nf 65909 67871 65943\nf 65910 65945 65944\nf 65911 65953 65955\nf 65911 65955 65956\nf 65911 65956 65913\nf 65912 65913 65914\nf 65913 65956 65914\nf 65914 65956 65957\nf 65914 65957 65958\nf 65914 65958 65915\nf 65915 65958 65959\nf 65915 65959 65916\nf 65916 65959 65960\nf 65916 65960 65917\nf 65917 65960 65961\nf 65917 65961 65918\nf 65918 65961 65919\nf 65919 65961 67901\nf 65919 67872 65920\nf 65919 67901 67872\nf 65920 67872 67873\nf 65920 67873 65921\nf 65921 67873 67874\nf 65921 67874 65922\nf 65922 67874 67875\nf 65922 67875 65923\nf 65923 65962 65924\nf 65923 67875 67876\nf 65923 67876 65962\nf 65924 65962 65963\nf 65924 65963 65925\nf 65925 65963 65964\nf 65925 65964 65926\nf 65926 65964 65965\nf 65926 65965 65927\nf 65927 65965 65966\nf 65927 65966 65928\nf 65928 65966 65967\nf 65928 65967 65930\nf 65929 65930 65969\nf 65929 65969 65931\nf 65930 65967 65969\nf 65931 65969 65968\nf 65932 65933 65934\nf 65933 65970 65934\nf 65934 65970 67877\nf 65935 67855 67879\nf 65935 67879 65971\nf 65936 65937 65938\nf 65937 65972 65973\nf 65937 65973 65938\nf 65938 65973 65974\nf 65938 65974 65975\nf 65938 65975 65939\nf 65939 65975 65976\nf 65939 65976 65940\nf 65940 65976 65941\nf 65941 65976 67917\nf 65941 67880 65942\nf 65941 67917 67880\nf 65942 67880 67882\nf 65942 67882 67881\nf 65943 67871 67890\nf 65943 67890 67892\nf 65943 67892 65945\nf 65944 65945 67893\nf 65944 67893 65946\nf 65945 67892 67893\nf 65946 67893 67894\nf 65946 67894 67895\nf 65946 67895 65947\nf 65947 67895 65948\nf 65948 65977 65979\nf 65948 65979 65949\nf 65948 67895 65977\nf 65949 65979 65978\nf 65950 66004 66006\nf 65950 66006 66007\nf 65950 66007 65951\nf 65951 66007 66008\nf 65951 66008 65952\nf 65952 66008 66009\nf 65952 66009 65954\nf 65953 65954 65955\nf 65954 66009 65955\nf 65955 66009 66010\nf 65955 66010 65956\nf 65956 66010 67945\nf 65956 67896 65957\nf 65956 67945 67896\nf 65957 67896 67897\nf 65957 67897 65958\nf 65958 67897 67898\nf 65958 67898 65959\nf 65959 67898 67899\nf 65959 67899 65960\nf 65960 67899 67900\nf 65960 67900 65961\nf 65961 67900 67902\nf 65961 67902 67901\nf 65962 67876 67907\nf 65962 67907 67909\nf 65962 67909 65963\nf 65963 67909 67910\nf 65963 67910 65964\nf 65964 67910 67911\nf 65964 67911 65965\nf 65965 66011 65966\nf 65965 67911 67912\nf 65965 67912 66011\nf 65966 66011 66012\nf 65966 66012 65967\nf 65967 66012 66014\nf 65967 66014 65969\nf 65968 65969 66014\nf 65968 66014 66013\nf 65970 66015 67957\nf 65970 67913 67877\nf 65970 67957 67913\nf 65971 67879 67915\nf 65971 67915 66016\nf 65972 66017 65973\nf 65973 66017 66018\nf 65973 66018 66019\nf 65973 66019 65974\nf 65974 66019 65975\nf 65975 66019 67961\nf 65975 67916 65976\nf 65975 67961 67916\nf 65976 67916 67918\nf 65976 67918 67917\nf 65977 67895 67925\nf 65977 67925 67927\nf 65977 67927 65979\nf 65978 65979 67928\nf 65978 67928 65980\nf 65979 67927 67928\nf 65980 67928 67929\nf 65980 67929 67930\nf 65980 67930 65981\nf 65981 67930 65982\nf 65982 66020 66021\nf 65982 66021 65983\nf 65982 67930 66020\nf 65983 66021 66023\nf 65983 66023 65984\nf 65984 66023 66022\nf 65985 66028 66030\nf 65985 66030 66032\nf 65985 66032 65986\nf 65986 66032 66031\nf 65987 66034 66036\nf 65987 66036 66037\nf 65987 66037 65988\nf 65988 66037 66038\nf 65988 66038 65989\nf 65989 66038 66039\nf 65989 66039 65990\nf 65990 66039 66040\nf 65990 66040 65991\nf 65991 66040 66041\nf 65991 66041 65992\nf 65992 66041 66042\nf 65992 66042 65993\nf 65993 66042 66043\nf 65993 66043 65994\nf 65994 66043 67987\nf 65994 67931 65995\nf 65994 67987 67931\nf 65995 67931 67932\nf 65995 67932 65996\nf 65996 67932 67933\nf 65996 67933 65997\nf 65997 67933 67934\nf 65997 67934 65998\nf 65998 67934 67935\nf 65998 67935 65999\nf 65999 67935 67936\nf 65999 67936 66000\nf 66000 67936 67937\nf 66000 67937 66001\nf 66001 67937 67938\nf 66001 67938 66002\nf 66002 67938 67939\nf 66002 67939 66003\nf 66003 67939 67940\nf 66003 67940 66005\nf 66004 66005 66006\nf 66005 67940 67941\nf 66005 67941 66006\nf 66006 67941 66007\nf 66007 67941 67942\nf 66007 67942 66008\nf 66008 67942 67943\nf 66008 67943 66009\nf 66009 67943 67944\nf 66009 67944 66010\nf 66010 67944 67946\nf 66010 67946 67945\nf 66011 66044 66012\nf 66011 67912 67954\nf 66011 67954 67956\nf 66011 67956 66044\nf 66012 66044 66046\nf 66012 66046 66014\nf 66013 66014 66046\nf 66013 66046 66045\nf 66015 66047 67957\nf 66016 67915 67960\nf 66016 67960 66049\nf 66017 66050 66018\nf 66018 66050 66051\nf 66018 66051 66019\nf 66019 66051 68000\nf 66019 67962 67961\nf 66019 68000 67962\nf 66020 67930 67966\nf 66020 67966 67968\nf 66020 67968 66021\nf 66021 67968 67969\nf 66021 67969 66023\nf 66022 66023 67970\nf 66022 67970 66024\nf 66023 67969 67970\nf 66024 67970 67971\nf 66024 67971 67972\nf 66024 67972 66025\nf 66025 67972 67973\nf 66025 67973 66026\nf 66026 67973 67974\nf 66026 67974 66027\nf 66027 67974 67975\nf 66027 67975 66029\nf 66028 66029 66030\nf 66029 67975 67976\nf 66029 67976 66030\nf 66030 67976 66032\nf 66031 66032 67977\nf 66031 67977 66033\nf 66032 67976 67977\nf 66033 67977 67978\nf 66033 67978 67979\nf 66033 67979 66035\nf 66034 66035 66036\nf 66035 67979 67980\nf 66035 67980 66036\nf 66036 67980 66037\nf 66037 67980 67981\nf 66037 67981 66038\nf 66038 67981 67982\nf 66038 67982 66039\nf 66039 67982 67983\nf 66039 67983 66040\nf 66040 67983 67984\nf 66040 67984 66041\nf 66041 67984 67985\nf 66041 67985 66042\nf 66042 67985 67986\nf 66042 67986 66043\nf 66043 67986 67988\nf 66043 67988 67987\nf 66044 66053 66046\nf 66044 67956 67994\nf 66044 67994 67996\nf 66044 67996 66053\nf 66045 66046 66053\nf 66045 66053 66052\nf 66047 66048 67958\nf 66047 66054 68006\nf 66047 67958 67957\nf 66047 68006 66048\nf 66048 67997 67958\nf 66048 67998 67997\nf 66048 68006 67998\nf 66049 67960 67999\nf 66049 67999 66055\nf 66050 66056 66051\nf 66051 66056 66057\nf 66051 66057 68009\nf 66051 68009 68000\nf 66052 66053 66059\nf 66052 66059 66058\nf 66053 67996 68004\nf 66053 68004 66059\nf 66054 66061 68014\nf 66054 68014 68006\nf 66055 67999 68008\nf 66055 68008 66062\nf 66056 66063 66057\nf 66057 66063 66064\nf 66057 66064 68018\nf 66057 68018 68009\nf 66058 66059 66067\nf 66058 66067 66060\nf 66059 66065 66067\nf 66059 68004 68012\nf 66059 68012 66065\nf 66060 66067 66066\nf 66061 66068 68014\nf 66062 68008 68017\nf 66062 68017 66070\nf 66063 66071 66064\nf 66064 66071 66072\nf 66064 66072 66073\nf 66064 66073 68019\nf 66064 68019 68018\nf 66065 66074 66076\nf 66065 66076 66067\nf 66065 68012 68022\nf 66065 68022 66074\nf 66066 66067 66076\nf 66066 66076 66075\nf 66068 66069 68015\nf 66068 66077 66069\nf 66068 68015 68014\nf 66069 66077 66078\nf 66069 66078 68029\nf 66069 68023 68015\nf 66069 68029 68023\nf 66070 68017 68024\nf 66070 68024 66079\nf 66071 66080 66072\nf 66072 66080 66081\nf 66072 66081 66082\nf 66072 66082 66073\nf 66073 66082 68031\nf 66073 68025 68019\nf 66073 68031 68025\nf 66074 66084 66076\nf 66074 68022 68027\nf 66074 68027 68028\nf 66074 68028 66084\nf 66075 66076 66084\nf 66075 66084 66083\nf 66077 66085 66078\nf 66078 66085 66086\nf 66078 66086 68034\nf 66078 68034 68029\nf 66079 68024 68030\nf 66079 68030 66087\nf 66080 66088 66081\nf 66081 66088 66089\nf 66081 66089 66090\nf 66081 66090 66082\nf 66082 66090 68036\nf 66082 68036 68031\nf 66083 66084 66092\nf 66083 66092 66091\nf 66084 68028 68032\nf 66084 68032 66092\nf 66085 66093 66086\nf 66086 66093 66094\nf 66086 66094 68039\nf 66086 68039 68034\nf 66087 68030 68035\nf 66087 68035 66095\nf 66088 66096 66089\nf 66089 66096 66097\nf 66089 66097 66098\nf 66089 66098 66090\nf 66090 66098 68041\nf 66090 68041 68036\nf 66091 66092 66100\nf 66091 66100 66099\nf 66092 68032 68037\nf 66092 68037 66100\nf 66093 66101 66094\nf 66094 66101 66102\nf 66094 66102 68043\nf 66094 68043 68039\nf 66095 68035 68040\nf 66095 68040 66103\nf 66096 66105 66097\nf 66097 66105 66107\nf 66097 66107 66108\nf 66097 66108 66098\nf 66098 66108 68045\nf 66098 68045 68041\nf 66099 66100 66110\nf 66099 66110 66109\nf 66100 68037 68042\nf 66100 68042 66110\nf 66101 66111 66102\nf 66102 66111 66112\nf 66102 66112 68047\nf 66102 68047 68043\nf 66103 66114 66104\nf 66103 68040 68044\nf 66103 68044 68048\nf 66103 68048 66114\nf 66104 66114 66113\nf 66105 66106 66107\nf 66106 66115 66107\nf 66107 66115 66116\nf 66107 66116 66108\nf 66108 66116 68049\nf 66108 68049 68045\nf 66109 66110 66118\nf 66109 66118 66117\nf 66110 68042 68046\nf 66110 68046 66118\nf 66111 66119 66112\nf 66112 66119 66120\nf 66112 66120 68051\nf 66112 68051 68047\nf 66113 66114 66122\nf 66113 66122 66121\nf 66114 68048 66122\nf 66115 66123 66116\nf 66116 66123 66124\nf 66116 66124 68054\nf 66116 68054 68049\nf 66117 66118 66126\nf 66117 66126 66125\nf 66118 68046 68050\nf 66118 68050 66126\nf 66119 66127 66120\nf 66120 66127 66128\nf 66120 66128 68056\nf 66120 68056 68051\nf 66121 66122 68053\nf 66121 68053 68057\nf 66121 68057 66129\nf 66122 68048 68052\nf 66122 68052 68053\nf 66123 66130 66124\nf 66124 66130 66131\nf 66124 66131 68059\nf 66124 68059 68054\nf 66125 66126 66133\nf 66125 66133 66132\nf 66126 68050 68055\nf 66126 68055 66133\nf 66127 66134 66128\nf 66128 66134 66135\nf 66128 66135 68062\nf 66128 68062 68056\nf 66129 68057 66136\nf 66130 66137 66131\nf 66131 66137 66138\nf 66131 66138 68064\nf 66131 68064 68059\nf 66132 66133 66141\nf 66132 66141 66139\nf 66133 68055 68060\nf 66133 68060 66141\nf 66134 66142 66135\nf 66135 66142 66143\nf 66135 66143 68067\nf 66135 68067 68062\nf 66136 68057 68063\nf 66136 68063 66144\nf 66137 66145 66138\nf 66138 66145 66147\nf 66138 66147 68069\nf 66138 68069 68064\nf 66139 66141 66140\nf 66140 66141 68065\nf 66140 68065 66148\nf 66141 68060 68065\nf 66142 66149 66143\nf 66143 66149 66150\nf 66143 66150 68072\nf 66143 68072 68067\nf 66144 68063 68068\nf 66144 68068 66151\nf 66145 66146 66147\nf 66146 66152 66147\nf 66147 66152 68069\nf 66148 68065 68070\nf 66148 68070 66153\nf 66149 66154 66150\nf 66150 66154 66155\nf 66150 66155 68077\nf 66150 68077 68072\nf 66151 68068 68073\nf 66151 68073 66156\nf 66152 66157 68079\nf 66152 68074 68069\nf 66152 68079 68074\nf 66153 68070 68075\nf 66153 68075 66158\nf 66154 66159 66155\nf 66155 66159 66160\nf 66155 66160 68082\nf 66155 68082 68077\nf 66156 68073 68078\nf 66156 68078 66161\nf 66157 66162 68084\nf 66157 68084 68079\nf 66158 68075 68080\nf 66158 68080 66163\nf 66159 66164 66160\nf 66160 66164 66165\nf 66160 66165 68087\nf 66160 68087 68082\nf 66161 68078 68083\nf 66161 68083 66166\nf 66162 66168 68089\nf 66162 68089 68084\nf 66163 68080 68085\nf 66163 68085 66169\nf 66164 66170 66165\nf 66165 66170 66171\nf 66165 66171 68093\nf 66165 68093 68087\nf 66166 66173 66167\nf 66166 68083 68088\nf 66166 68088 68094\nf 66166 68094 66173\nf 66167 66173 66172\nf 66168 66174 68095\nf 66168 68095 68089\nf 66169 68085 68090\nf 66169 68090 66175\nf 66170 66177 66171\nf 66171 66177 66178\nf 66171 66178 68097\nf 66171 68097 68093\nf 66172 66173 66180\nf 66172 66180 66179\nf 66173 68094 66180\nf 66174 66181 68099\nf 66174 68099 68095\nf 66175 66176 66183\nf 66175 66183 66182\nf 66175 68090 66176\nf 66176 68090 68091\nf 66176 68091 68096\nf 66176 68096 66183\nf 66177 66184 66178\nf 66178 66184 66185\nf 66178 66185 68102\nf 66178 68102 68097\nf 66179 66180 66187\nf 66179 66187 66186\nf 66180 68094 68098\nf 66180 68098 66187\nf 66181 66188 68104\nf 66181 68104 68099\nf 66182 66183 68101\nf 66182 68101 68105\nf 66182 68105 66189\nf 66183 68096 68100\nf 66183 68100 68101\nf 66184 66190 66185\nf 66185 66190 66191\nf 66185 66191 68107\nf 66185 68107 68102\nf 66186 66187 66193\nf 66186 66193 66192\nf 66187 68098 68103\nf 66187 68103 66193\nf 66188 66194 68110\nf 66188 68110 68104\nf 66189 68105 66195\nf 66190 66196 66191\nf 66191 66196 66197\nf 66191 66197 68113\nf 66191 68113 68107\nf 66192 66193 68109\nf 66192 68109 68114\nf 66192 68114 66198\nf 66193 68103 68108\nf 66193 68108 68109\nf 66194 66199 68116\nf 66194 68116 68110\nf 66195 68105 68111\nf 66195 68111 66200\nf 66196 66201 66197\nf 66197 66201 66202\nf 66197 66202 68118\nf 66197 68118 68113\nf 66198 68114 66203\nf 66199 66204 68121\nf 66199 68121 68116\nf 66200 68111 68117\nf 66200 68117 66205\nf 66201 66206 66202\nf 66202 66206 66207\nf 66202 66207 68123\nf 66202 68123 68118\nf 66203 68114 68119\nf 66203 68119 66208\nf 66204 66209 68126\nf 66204 68126 68121\nf 66205 68117 68122\nf 66205 68122 66210\nf 66206 66211 66207\nf 66207 66211 66212\nf 66207 66212 68128\nf 66207 68128 68123\nf 66208 68119 68124\nf 66208 68124 66213\nf 66209 66214 68131\nf 66209 68131 68126\nf 66210 68122 68127\nf 66210 68127 66215\nf 66211 66216 66212\nf 66212 66216 66217\nf 66212 66217 68133\nf 66212 68133 68128\nf 66213 68124 68129\nf 66213 68129 66218\nf 66214 66219 68135\nf 66214 68135 68131\nf 66215 68127 68132\nf 66215 68132 66220\nf 66216 66221 66217\nf 66217 66221 66222\nf 66217 66222 68137\nf 66217 68137 68133\nf 66218 68129 68134\nf 66218 68134 66223\nf 66219 66224 68139\nf 66219 68139 68135\nf 66220 68132 68136\nf 66220 68136 66225\nf 66221 66226 66222\nf 66222 66226 66227\nf 66222 66227 68141\nf 66222 68141 68137\nf 66223 68134 68138\nf 66223 68138 66228\nf 66224 66229 68143\nf 66224 68143 68139\nf 66225 68136 68140\nf 66225 68140 66230\nf 66226 66231 66227\nf 66227 66231 66232\nf 66227 66232 68145\nf 66227 68145 68141\nf 66228 68138 68142\nf 66228 68142 66233\nf 66229 66234 68147\nf 66229 68147 68143\nf 66230 68140 68144\nf 66230 68144 66235\nf 66231 66236 66232\nf 66232 66236 66238\nf 66232 66238 68149\nf 66232 68149 68145\nf 66233 68142 68146\nf 66233 68146 66239\nf 66234 66240 68151\nf 66234 68151 68147\nf 66235 68144 68148\nf 66235 68148 66241\nf 66236 66237 66238\nf 66237 66242 66238\nf 66238 66242 68149\nf 66239 68146 68150\nf 66239 68150 66243\nf 66240 66244 68155\nf 66240 68155 68151\nf 66241 68148 68152\nf 66241 68152 66245\nf 66242 66246 68157\nf 66242 68153 68149\nf 66242 68157 68153\nf 66243 68150 68154\nf 66243 68154 66247\nf 66244 66248 68159\nf 66244 68159 68155\nf 66245 68152 68156\nf 66245 68156 66249\nf 66246 66251 68161\nf 66246 68161 68157\nf 66247 68154 68158\nf 66247 68158 66252\nf 66248 66253 68163\nf 66248 68163 68159\nf 66249 66255 66250\nf 66249 68156 68160\nf 66249 68160 68164\nf 66249 68164 66255\nf 66250 66255 66254\nf 66251 66256 68165\nf 66251 68165 68161\nf 66252 68158 68162\nf 66252 68162 66257\nf 66253 66258 68167\nf 66253 68167 68163\nf 66254 66255 66260\nf 66254 66260 66259\nf 66255 68164 66260\nf 66256 66261 68169\nf 66256 68169 68165\nf 66257 68162 68166\nf 66257 68166 66262\nf 66258 66264 68171\nf 66258 68171 68167\nf 66259 66260 66266\nf 66259 66266 66265\nf 66260 68164 68168\nf 66260 68168 66266\nf 66261 66267 68173\nf 66261 68173 68169\nf 66262 66269 66263\nf 66262 68166 68170\nf 66262 68170 68174\nf 66262 68174 66269\nf 66263 66269 66268\nf 66264 66270 68175\nf 66264 68175 68171\nf 66265 66266 66272\nf 66265 66272 66271\nf 66266 68168 68172\nf 66266 68172 66272\nf 66267 66273 68177\nf 66267 68177 68173\nf 66268 66269 66276\nf 66268 66276 66275\nf 66269 68174 66276\nf 66270 66277 68179\nf 66270 68179 68175\nf 66271 66272 66279\nf 66271 66279 66278\nf 66272 68172 68176\nf 66272 68176 66279\nf 66273 66274 68181\nf 66273 68181 68177\nf 66274 66280 66281\nf 66274 66281 68181\nf 66275 66276 66283\nf 66275 66283 66282\nf 66276 68174 68178\nf 66276 68178 66283\nf 66277 66284 68183\nf 66277 68183 68179\nf 66278 66279 66286\nf 66278 66286 66285\nf 66279 68176 68180\nf 66279 68180 66286\nf 66280 66287 66281\nf 66281 66287 66289\nf 66281 66289 68185\nf 66281 68185 68181\nf 66282 66283 66291\nf 66282 66291 66290\nf 66283 68178 68182\nf 66283 68182 66291\nf 66284 66292 68188\nf 66284 68188 68183\nf 66285 66286 66294\nf 66285 66294 66293\nf 66286 68180 68184\nf 66286 68184 66294\nf 66287 66288 66289\nf 66288 66295 66289\nf 66289 66295 68185\nf 66290 66291 68187\nf 66290 68187 68191\nf 66290 68191 66297\nf 66291 68182 68186\nf 66291 68186 68187\nf 66292 66298 68193\nf 66292 68193 68188\nf 66293 66294 66301\nf 66293 66301 66300\nf 66294 68184 68189\nf 66294 68189 66301\nf 66295 66296 68195\nf 66295 68190 68185\nf 66295 68195 68190\nf 66296 66302 66303\nf 66296 66303 68195\nf 66297 68191 66304\nf 66298 66299 68198\nf 66298 68198 68193\nf 66299 66305 66306\nf 66299 66306 68198\nf 66300 66301 66308\nf 66300 66308 66307\nf 66301 68189 68194\nf 66301 68194 66308\nf 66302 66309 66303\nf 66303 66309 66310\nf 66303 66310 68200\nf 66303 68200 68195\nf 66304 68191 68196\nf 66304 68196 66311\nf 66305 66312 66306\nf 66306 66312 66313\nf 66306 66313 68204\nf 66306 68204 68198\nf 66307 66308 66315\nf 66307 66315 66314\nf 66308 68194 68199\nf 66308 68199 66315\nf 66309 66316 68206\nf 66309 68206 66310\nf 66310 68201 68200\nf 66310 68206 68201\nf 66311 68196 68202\nf 66311 68202 66317\nf 66312 66318 66313\nf 66313 66318 66319\nf 66313 66319 68209\nf 66313 68209 68204\nf 66314 66315 66321\nf 66314 66321 66320\nf 66315 68199 68205\nf 66315 68205 66321\nf 66316 66322 68211\nf 66316 68211 68206\nf 66317 68202 68208\nf 66317 68208 66323\nf 66318 66324 66319\nf 66319 66324 66326\nf 66319 66326 68213\nf 66319 68213 68209\nf 66320 66321 66328\nf 66320 66328 66327\nf 66321 68205 68210\nf 66321 68210 66328\nf 66322 66329 68215\nf 66322 68215 68211\nf 66323 68208 68212\nf 66323 68212 66330\nf 66324 66325 66326\nf 66325 66331 66332\nf 66325 66332 66326\nf 66326 66332 66333\nf 66326 66333 68217\nf 66326 68217 68213\nf 66327 66328 66335\nf 66327 66335 66334\nf 66328 68210 68214\nf 66328 68214 66335\nf 66329 66336 68220\nf 66329 68220 68215\nf 66330 68212 68216\nf 66330 68216 66337\nf 66331 66338 66332\nf 66332 66338 66339\nf 66332 66339 66333\nf 66333 66339 68222\nf 66333 68218 68217\nf 66333 68222 68218\nf 66334 66335 66341\nf 66334 66341 66340\nf 66335 68214 68219\nf 66335 68219 66341\nf 66336 66342 68226\nf 66336 68226 68220\nf 66337 68216 68221\nf 66337 68221 66343\nf 66338 66344 66339\nf 66339 66344 66346\nf 66339 66346 68228\nf 66339 68228 68222\nf 66340 66341 66348\nf 66340 66348 66347\nf 66341 68219 68224\nf 66341 68224 66348\nf 66342 66349 68233\nf 66342 68233 68226\nf 66343 68221 68227\nf 66343 68227 66350\nf 66344 66345 66346\nf 66345 66351 66352\nf 66345 66352 66346\nf 66346 66352 66353\nf 66346 66353 68235\nf 66346 68235 68228\nf 66347 66348 66355\nf 66347 66355 66354\nf 66348 68224 68231\nf 66348 68231 66355\nf 66349 66356 68240\nf 66349 68240 68233\nf 66350 68227 68234\nf 66350 68234 66358\nf 66351 66359 66352\nf 66352 66359 66360\nf 66352 66360 66361\nf 66352 66361 66353\nf 66353 66361 68243\nf 66353 68243 68235\nf 66354 66355 66363\nf 66354 66363 66362\nf 66355 68231 68238\nf 66355 68238 66363\nf 66356 66357 68241\nf 66356 68241 68240\nf 66357 66364 68241\nf 66358 68234 68242\nf 66358 68242 66365\nf 66359 66366 66360\nf 66360 66366 66368\nf 66360 66368 66369\nf 66360 66369 66361\nf 66361 66369 68252\nf 66361 68252 68243\nf 66362 66363 66372\nf 66362 66372 66371\nf 66363 66370 66372\nf 66363 68238 68247\nf 66363 68247 66370\nf 66364 66373 68259\nf 66364 68250 68241\nf 66364 68259 68250\nf 66365 68242 68251\nf 66365 68251 66374\nf 66366 66367 66368\nf 66367 66375 66368\nf 66368 66375 66376\nf 66368 66376 66369\nf 66369 66376 66377\nf 66369 66377 68253\nf 66369 68253 68252\nf 66370 66378 66381\nf 66370 66381 66372\nf 66370 68247 68248\nf 66370 68248 68257\nf 66370 68257 66378\nf 66371 66372 66381\nf 66371 66381 66379\nf 66373 66382 68270\nf 66373 68270 68259\nf 66374 68251 68260\nf 66374 68260 66383\nf 66375 66384 66376\nf 66376 66384 66385\nf 66376 66385 66386\nf 66376 66386 66377\nf 66377 66386 68272\nf 66377 68261 68253\nf 66377 68272 68261\nf 66378 66388 66381\nf 66378 68257 68268\nf 66378 68268 66388\nf 66379 66381 66380\nf 66380 66381 66388\nf 66380 66388 66387\nf 66382 66389 68355\nf 66382 68355 68270\nf 66383 68260 68271\nf 66383 68271 66390\nf 66384 66391 66385\nf 66385 66391 66392\nf 66385 66392 66393\nf 66385 66393 66386\nf 66386 66393 66394\nf 66386 66394 68273\nf 66386 68273 68272\nf 66387 66388 66410\nf 66387 66410 66409\nf 66388 66408 66410\nf 66388 68268 68352\nf 66388 68352 66408\nf 66389 66411 68438\nf 66389 68438 68355\nf 66390 68271 68356\nf 66390 68356 66412\nf 66391 66413 66392\nf 66392 66413 66415\nf 66392 66415 66416\nf 66392 66416 66393\nf 66393 66416 66417\nf 66393 66417 66394\nf 66394 66417 66418\nf 66394 66418 68358\nf 66394 68357 68273\nf 66394 68358 68357\nf 66395 66396 68302\nf 66395 66420 66421\nf 66395 66421 66422\nf 66395 66422 66396\nf 66395 68300 68384\nf 66395 68302 68300\nf 66395 68384 66420\nf 66396 66397 68304\nf 66396 66422 66423\nf 66396 66423 66397\nf 66396 68304 68302\nf 66397 66398 68306\nf 66397 66423 66424\nf 66397 66424 66398\nf 66397 68306 68304\nf 66398 66399 68308\nf 66398 66424 66425\nf 66398 66425 66399\nf 66398 68308 68306\nf 66399 66400 68310\nf 66399 66425 66426\nf 66399 66426 66400\nf 66399 68310 68308\nf 66400 66401 68312\nf 66400 66426 66427\nf 66400 66427 66401\nf 66400 68312 68310\nf 66401 66402 68314\nf 66401 66427 66428\nf 66401 66428 66402\nf 66401 68314 68312\nf 66402 66403 68316\nf 66402 66428 66429\nf 66402 66429 66403\nf 66402 68316 68314\nf 66403 66404 68318\nf 66403 66429 66430\nf 66403 66430 66404\nf 66403 68318 68316\nf 66404 66405 68320\nf 66404 66430 66431\nf 66404 66431 66405\nf 66404 68320 68318\nf 66405 66406 68322\nf 66405 66431 66432\nf 66405 66432 66406\nf 66405 68322 68320\nf 66406 66407 68324\nf 66406 66432 66433\nf 66406 66433 66407\nf 66406 68324 68322\nf 66407 66433 66434\nf 66407 66434 68388\nf 66407 68387 68324\nf 66407 68388 68387\nf 66408 66445 66447\nf 66408 66447 66410\nf 66408 68352 68353\nf 66408 68353 68436\nf 66408 68436 66445\nf 66409 66410 66447\nf 66409 66447 66446\nf 66411 66448 68510\nf 66411 68510 68438\nf 66412 68356 68439\nf 66412 68439 66449\nf 66413 66414 66415\nf 66414 66450 66415\nf 66415 66450 66451\nf 66415 66451 66416\nf 66416 66451 66452\nf 66416 66452 66417\nf 66417 66452 66453\nf 66417 66453 66418\nf 66418 66453 66454\nf 66418 66454 68441\nf 66418 68440 68358\nf 66418 68441 68440\nf 66419 66420 68385\nf 66419 66462 66463\nf 66419 66463 66464\nf 66419 66464 66420\nf 66419 68382 68470\nf 66419 68385 68382\nf 66419 68470 66462\nf 66420 66464 66465\nf 66420 66465 66421\nf 66420 68384 68385\nf 66421 66465 66466\nf 66421 66466 66422\nf 66422 66466 66467\nf 66422 66467 66423\nf 66423 66467 66468\nf 66423 66468 66424\nf 66424 66468 66469\nf 66424 66469 66425\nf 66425 66469 66470\nf 66425 66470 66426\nf 66426 66470 66471\nf 66426 66471 66427\nf 66427 66471 66472\nf 66427 66472 66428\nf 66428 66472 66473\nf 66428 66473 66429\nf 66429 66473 66474\nf 66429 66474 66430\nf 66430 66474 66475\nf 66430 66475 66431\nf 66431 66475 66476\nf 66431 66476 66432\nf 66432 66476 66477\nf 66432 66477 66433\nf 66433 66477 66478\nf 66433 66478 66434\nf 66434 66435 68390\nf 66434 66478 66479\nf 66434 66479 66435\nf 66434 68390 68388\nf 66435 66436 68392\nf 66435 66479 66480\nf 66435 66480 66436\nf 66435 68392 68390\nf 66436 66437 68394\nf 66436 66480 66481\nf 66436 66481 66437\nf 66436 68394 68392\nf 66437 66438 68396\nf 66437 66481 66482\nf 66437 66482 66438\nf 66437 68396 68394\nf 66438 66439 68398\nf 66438 66482 66483\nf 66438 66483 66439\nf 66438 68398 68396\nf 66439 66440 68400\nf 66439 66483 66484\nf 66439 66484 66440\nf 66439 68400 68398\nf 66440 66441 68402\nf 66440 66484 66485\nf 66440 66485 66441\nf 66440 68402 68400\nf 66441 66442 68404\nf 66441 66485 66486\nf 66441 66486 66442\nf 66441 68404 68402\nf 66442 66443 68406\nf 66442 66486 66487\nf 66442 66487 66443\nf 66442 68406 68404\nf 66443 66444 68408\nf 66443 66487 66488\nf 66443 66488 66444\nf 66443 68408 68406\nf 66444 66488 66489\nf 66444 66489 68474\nf 66444 68473 68408\nf 66444 68474 68473\nf 66445 66496 66497\nf 66445 66497 66499\nf 66445 66499 66447\nf 66445 68436 68507\nf 66445 68507 66496\nf 66446 66447 66499\nf 66446 66499 66498\nf 66448 66500 68550\nf 66448 68550 68510\nf 66449 68439 68511\nf 66449 68511 66501\nf 66450 66502 66451\nf 66451 66502 66503\nf 66451 66503 66504\nf 66451 66504 66452\nf 66452 66504 66505\nf 66452 66505 66453\nf 66453 66505 66506\nf 66453 66506 66454\nf 66454 66455 68443\nf 66454 66506 66507\nf 66454 66507 66455\nf 66454 68443 68441\nf 66455 66456 68445\nf 66455 66507 66508\nf 66455 66508 66456\nf 66455 68445 68443\nf 66456 66457 68447\nf 66456 66508 66509\nf 66456 66509 66457\nf 66456 68447 68445\nf 66457 66458 68449\nf 66457 66509 66510\nf 66457 66510 66458\nf 66457 68449 68447\nf 66458 66459 68451\nf 66458 66510 66511\nf 66458 66511 66459\nf 66458 68451 68449\nf 66459 66511 66512\nf 66459 66512 68513\nf 66459 68512 68451\nf 66459 68513 68512\nf 66460 66461 68468\nf 66460 66513 66514\nf 66460 66514 66515\nf 66460 66515 66461\nf 66460 68466 68526\nf 66460 68468 68466\nf 66460 68526 66513\nf 66461 66462 68471\nf 66461 66515 66516\nf 66461 66516 66462\nf 66461 68471 68468\nf 66462 66516 66517\nf 66462 66517 66463\nf 66462 68470 68471\nf 66463 66517 66518\nf 66463 66518 66464\nf 66464 66518 66519\nf 66464 66519 66465\nf 66465 66519 66520\nf 66465 66520 66466\nf 66466 66520 66521\nf 66466 66521 66467\nf 66467 66521 66522\nf 66467 66522 66468\nf 66468 66522 66523\nf 66468 66523 66469\nf 66469 66523 66524\nf 66469 66524 66470\nf 66470 66524 66525\nf 66470 66525 66471\nf 66471 66525 66526\nf 66471 66526 66472\nf 66472 66526 66527\nf 66472 66527 66473\nf 66473 66527 66528\nf 66473 66528 66474\nf 66474 66528 66529\nf 66474 66529 66475\nf 66475 66529 66530\nf 66475 66530 66476\nf 66476 66530 66531\nf 66476 66531 66477\nf 66477 66531 66532\nf 66477 66532 66478\nf 66478 66532 66533\nf 66478 66533 66479\nf 66479 66533 66534\nf 66479 66534 66480\nf 66480 66534 66535\nf 66480 66535 66481\nf 66481 66535 66536\nf 66481 66536 66482\nf 66482 66536 66537\nf 66482 66537 66483\nf 66483 66537 66538\nf 66483 66538 66484\nf 66484 66538 66539\nf 66484 66539 66485\nf 66485 66539 66540\nf 66485 66540 66486\nf 66486 66540 66541\nf 66486 66541 66487\nf 66487 66541 66542\nf 66487 66542 66488\nf 66488 66542 66543\nf 66488 66543 66489\nf 66489 66490 68476\nf 66489 66543 66544\nf 66489 66544 66490\nf 66489 68476 68474\nf 66490 66491 68478\nf 66490 66544 66545\nf 66490 66545 66491\nf 66490 68478 68476\nf 66491 66492 68480\nf 66491 66545 66546\nf 66491 66546 66492\nf 66491 68480 68478\nf 66492 66493 68482\nf 66492 66546 66547\nf 66492 66547 66493\nf 66492 68482 68480\nf 66493 66494 68484\nf 66493 66547 66548\nf 66493 66548 66494\nf 66493 68484 68482\nf 66494 66495 68486\nf 66494 66548 66549\nf 66494 66549 66495\nf 66494 68486 68484\nf 66495 66549 68574\nf 66495 68529 68486\nf 66495 68574 68529\nf 66496 66550 66551\nf 66496 66551 66497\nf 66496 68507 68508\nf 66496 68508 68548\nf 66496 68548 66550\nf 66497 66551 66553\nf 66497 66553 66499\nf 66498 66499 66553\nf 66498 66553 66552\nf 66500 66554 68595\nf 66500 68595 68550\nf 66501 68511 68551\nf 66501 68551 66555\nf 66502 66556 66503\nf 66503 66556 66558\nf 66503 66558 66559\nf 66503 66559 66504\nf 66504 66559 66560\nf 66504 66560 66505\nf 66505 66560 66561\nf 66505 66561 66506\nf 66506 66561 66562\nf 66506 66562 66507\nf 66507 66562 66563\nf 66507 66563 66508\nf 66508 66563 66564\nf 66508 66564 66509\nf 66509 66564 66565\nf 66509 66565 66510\nf 66510 66565 66566\nf 66510 66566 66511\nf 66511 66566 66567\nf 66511 66567 66512\nf 66512 66567 66568\nf 66512 66568 68553\nf 66512 68552 68513\nf 66512 68553 68552\nf 66513 66576 66577\nf 66513 66577 66578\nf 66513 66578 66514\nf 66513 68526 68527\nf 66513 68527 68571\nf 66513 68571 66576\nf 66514 66578 66579\nf 66514 66579 66515\nf 66515 66579 66580\nf 66515 66580 66516\nf 66516 66580 66581\nf 66516 66581 66517\nf 66517 66581 66582\nf 66517 66582 66518\nf 66518 66582 66583\nf 66518 66583 66519\nf 66519 66583 66584\nf 66519 66584 66520\nf 66520 66584 66585\nf 66520 66585 66521\nf 66521 66585 66586\nf 66521 66586 66522\nf 66522 66586 66587\nf 66522 66587 66523\nf 66523 66587 66588\nf 66523 66588 66524\nf 66524 66588 66589\nf 66524 66589 66525\nf 66525 66589 66590\nf 66525 66590 66526\nf 66526 66590 66591\nf 66526 66591 66527\nf 66527 66591 66592\nf 66527 66592 66528\nf 66528 66592 66593\nf 66528 66593 66529\nf 66529 66593 66594\nf 66529 66594 66530\nf 66530 66594 66595\nf 66530 66595 66531\nf 66531 66595 66596\nf 66531 66596 66532\nf 66532 66596 66597\nf 66532 66597 66533\nf 66533 66597 66598\nf 66533 66598 66534\nf 66534 66598 66599\nf 66534 66599 66535\nf 66535 66599 66600\nf 66535 66600 66536\nf 66536 66600 66601\nf 66536 66601 66537\nf 66537 66601 66602\nf 66537 66602 66538\nf 66538 66602 66603\nf 66538 66603 66539\nf 66539 66603 66604\nf 66539 66604 66540\nf 66540 66604 66605\nf 66540 66605 66541\nf 66541 66605 66606\nf 66541 66606 66542\nf 66542 66606 66607\nf 66542 66607 66543\nf 66543 66607 66608\nf 66543 66608 66544\nf 66544 66608 66609\nf 66544 66609 66545\nf 66545 66609 66610\nf 66545 66610 66546\nf 66546 66610 66611\nf 66546 66611 66547\nf 66547 66611 66612\nf 66547 66612 66548\nf 66548 66612 66613\nf 66548 66613 66549\nf 66549 66613 68604\nf 66549 68604 68574\nf 66550 66614 66615\nf 66550 66615 66551\nf 66550 68548 68593\nf 66550 68593 66614\nf 66551 66615 66617\nf 66551 66617 66553\nf 66552 66553 66617\nf 66552 66617 66616\nf 66554 66618 68627\nf 66554 68627 68595\nf 66555 68551 68596\nf 66555 68596 66619\nf 66556 66557 66558\nf 66557 66620 66558\nf 66558 66620 66621\nf 66558 66621 66559\nf 66559 66621 66622\nf 66559 66622 66560\nf 66560 66622 66623\nf 66560 66623 66561\nf 66561 66623 66624\nf 66561 66624 66562\nf 66562 66624 66625\nf 66562 66625 66563\nf 66563 66625 66626\nf 66563 66626 66564\nf 66564 66626 66627\nf 66564 66627 66565\nf 66565 66627 66628\nf 66565 66628 66566\nf 66566 66628 66629\nf 66566 66629 66567\nf 66567 66629 66630\nf 66567 66630 66568\nf 66568 66569 68555\nf 66568 66630 66631\nf 66568 66631 66569\nf 66568 68555 68553\nf 66569 66570 68557\nf 66569 66631 66632\nf 66569 66632 66570\nf 66569 68557 68555\nf 66570 66571 68559\nf 66570 66632 66633\nf 66570 66633 66571\nf 66570 68559 68557\nf 66571 66633 66634\nf 66571 66634 68599\nf 66571 68598 68559\nf 66571 68599 68598\nf 66572 66573 68565\nf 66572 66635 66636\nf 66572 66636 66637\nf 66572 66637 66573\nf 66572 68563 68601\nf 66572 68565 68563\nf 66572 68601 66635\nf 66573 66574 68567\nf 66573 66637 66638\nf 66573 66638 66574\nf 66573 68567 68565\nf 66574 66575 68569\nf 66574 66638 66639\nf 66574 66639 66575\nf 66574 68569 68567\nf 66575 66576 68572\nf 66575 66639 66640\nf 66575 66640 66576\nf 66575 68572 68569\nf 66576 66640 66641\nf 66576 66641 66577\nf 66576 68571 68572\nf 66577 66641 66642\nf 66577 66642 66578\nf 66578 66642 66643\nf 66578 66643 66579\nf 66579 66643 66644\nf 66579 66644 66580\nf 66580 66644 66645\nf 66580 66645 66581\nf 66581 66645 66646\nf 66581 66646 66582\nf 66582 66646 66647\nf 66582 66647 66583\nf 66583 66647 66648\nf 66583 66648 66584\nf 66584 66648 66649\nf 66584 66649 66585\nf 66585 66649 66650\nf 66585 66650 66586\nf 66586 66650 66651\nf 66586 66651 66587\nf 66587 66651 66652\nf 66587 66652 66588\nf 66588 66652 66653\nf 66588 66653 66589\nf 66589 66653 66654\nf 66589 66654 66590\nf 66590 66654 66655\nf 66590 66655 66591\nf 66591 66655 66656\nf 66591 66656 66592\nf 66592 66656 66657\nf 66592 66657 66593\nf 66593 66657 66658\nf 66593 66658 66594\nf 66594 66658 66659\nf 66594 66659 66595\nf 66595 66659 66660\nf 66595 66660 66596\nf 66596 66660 66661\nf 66596 66661 66597\nf 66597 66661 66662\nf 66597 66662 66598\nf 66598 66662 66663\nf 66598 66663 66599\nf 66599 66663 66664\nf 66599 66664 66600\nf 66600 66664 66665\nf 66600 66665 66601\nf 66601 66665 66666\nf 66601 66666 66602\nf 66602 66666 66667\nf 66602 66667 66603\nf 66603 66667 66668\nf 66603 66668 66604\nf 66604 66668 66669\nf 66604 66669 66605\nf 66605 66669 66670\nf 66605 66670 66606\nf 66606 66670 66671\nf 66606 66671 66607\nf 66607 66671 66672\nf 66607 66672 66608\nf 66608 66672 66673\nf 66608 66673 66609\nf 66609 66673 66674\nf 66609 66674 66610\nf 66610 66674 66675\nf 66610 66675 66611\nf 66611 66675 66676\nf 66611 66676 66612\nf 66612 66676 66677\nf 66612 66677 66613\nf 66613 66677 66678\nf 66613 66678 68605\nf 66613 68605 68604\nf 66614 66679 66680\nf 66614 66680 66681\nf 66614 66681 66615\nf 66614 68593 68624\nf 66614 68624 66679\nf 66615 66681 66683\nf 66615 66683 66617\nf 66616 66617 66683\nf 66616 66683 66682\nf 66618 66684 68653\nf 66618 68653 68627\nf 66619 68596 68628\nf 66619 68628 66685\nf 66620 66686 66621\nf 66621 66686 66688\nf 66621 66688 66689\nf 66621 66689 66622\nf 66622 66689 66690\nf 66622 66690 66623\nf 66623 66690 66691\nf 66623 66691 66624\nf 66624 66691 66692\nf 66624 66692 66625\nf 66625 66692 66693\nf 66625 66693 66626\nf 66626 66693 66694\nf 66626 66694 66627\nf 66627 66694 66695\nf 66627 66695 66628\nf 66628 66695 66696\nf 66628 66696 66629\nf 66629 66696 66697\nf 66629 66697 66630\nf 66630 66697 66698\nf 66630 66698 66631\nf 66631 66698 66699\nf 66631 66699 66632\nf 66632 66699 66700\nf 66632 66700 66633\nf 66633 66700 66701\nf 66633 66701 66634\nf 66634 66635 68602\nf 66634 66701 66702\nf 66634 66702 66635\nf 66634 68602 68599\nf 66635 66702 66703\nf 66635 66703 66636\nf 66635 68601 68602\nf 66636 66703 66704\nf 66636 66704 66637\nf 66637 66704 66705\nf 66637 66705 66638\nf 66638 66705 66706\nf 66638 66706 66639\nf 66639 66706 66707\nf 66639 66707 66640\nf 66640 66707 66708\nf 66640 66708 66641\nf 66641 66708 66709\nf 66641 66709 66642\nf 66642 66709 66710\nf 66642 66710 66643\nf 66643 66710 66711\nf 66643 66711 66644\nf 66644 66711 66712\nf 66644 66712 66645\nf 66645 66712 66713\nf 66645 66713 66646\nf 66646 66713 66714\nf 66646 66714 66647\nf 66647 66714 66715\nf 66647 66715 66648\nf 66648 66715 66716\nf 66648 66716 66649\nf 66649 66716 66717\nf 66649 66717 66650\nf 66650 66717 66718\nf 66650 66718 66651\nf 66651 66718 66719\nf 66651 66719 66652\nf 66652 66719 66720\nf 66652 66720 66653\nf 66653 66720 66721\nf 66653 66721 66654\nf 66654 66721 66722\nf 66654 66722 66655\nf 66655 66722 66723\nf 66655 66723 66656\nf 66656 66723 66724\nf 66656 66724 66657\nf 66657 66724 66725\nf 66657 66725 66658\nf 66658 66725 66726\nf 66658 66726 66659\nf 66659 66726 66727\nf 66659 66727 66660\nf 66660 66727 66728\nf 66660 66728 66661\nf 66661 66728 66729\nf 66661 66729 66662\nf 66662 66729 66730\nf 66662 66730 66663\nf 66663 66730 66731\nf 66663 66731 66664\nf 66664 66731 66732\nf 66664 66732 66665\nf 66665 66732 66733\nf 66665 66733 66666\nf 66666 66733 66734\nf 66666 66734 66667\nf 66667 66734 66735\nf 66667 66735 66668\nf 66668 66735 66736\nf 66668 66736 66669\nf 66669 66736 66737\nf 66669 66737 66670\nf 66670 66737 66738\nf 66670 66738 66671\nf 66671 66738 66739\nf 66671 66739 66672\nf 66672 66739 66740\nf 66672 66740 66673\nf 66673 66740 66741\nf 66673 66741 66674\nf 66674 66741 66742\nf 66674 66742 66675\nf 66675 66742 66743\nf 66675 66743 66676\nf 66676 66743 66744\nf 66676 66744 66677\nf 66677 66744 66745\nf 66677 66745 66678\nf 66678 66745 66746\nf 66678 66746 68631\nf 66678 68630 68605\nf 66678 68631 68630\nf 66679 66749 66750\nf 66679 66750 66751\nf 66679 66751 66680\nf 66679 68624 68625\nf 66679 68625 68650\nf 66679 68650 66749\nf 66680 66751 66752\nf 66680 66752 66681\nf 66681 66752 66754\nf 66681 66754 66683\nf 66682 66683 66754\nf 66682 66754 66753\nf 66684 66755 68682\nf 66684 68682 68653\nf 66685 68628 68654\nf 66685 68654 66756\nf 66686 66687 66688\nf 66687 66757 66688\nf 66688 66757 66758\nf 66688 66758 66689\nf 66689 66758 66759\nf 66689 66759 66690\nf 66690 66759 66760\nf 66690 66760 66691\nf 66691 66760 66761\nf 66691 66761 66692\nf 66692 66761 66762\nf 66692 66762 66693\nf 66693 66762 66763\nf 66693 66763 66694\nf 66694 66763 66764\nf 66694 66764 66695\nf 66695 66764 66765\nf 66695 66765 66696\nf 66696 66765 66766\nf 66696 66766 66697\nf 66697 66766 66767\nf 66697 66767 66698\nf 66698 66767 66768\nf 66698 66768 66699\nf 66699 66768 66769\nf 66699 66769 66700\nf 66700 66769 66770\nf 66700 66770 66701\nf 66701 66770 66771\nf 66701 66771 66702\nf 66702 66771 66772\nf 66702 66772 66703\nf 66703 66772 66773\nf 66703 66773 66704\nf 66704 66773 66774\nf 66704 66774 66705\nf 66705 66774 66775\nf 66705 66775 66706\nf 66706 66775 66776\nf 66706 66776 66707\nf 66707 66776 66777\nf 66707 66777 66708\nf 66708 66777 66778\nf 66708 66778 66709\nf 66709 66778 66779\nf 66709 66779 66710\nf 66710 66779 66780\nf 66710 66780 66711\nf 66711 66780 66781\nf 66711 66781 66712\nf 66712 66781 66782\nf 66712 66782 66713\nf 66713 66782 66783\nf 66713 66783 66714\nf 66714 66783 66784\nf 66714 66784 66715\nf 66715 66784 66785\nf 66715 66785 66716\nf 66716 66785 66786\nf 66716 66786 66717\nf 66717 66786 66787\nf 66717 66787 66718\nf 66718 66787 66788\nf 66718 66788 66719\nf 66719 66788 66789\nf 66719 66789 66720\nf 66720 66789 66790\nf 66720 66790 66721\nf 66721 66790 66791\nf 66721 66791 66722\nf 66722 66791 66792\nf 66722 66792 66723\nf 66723 66792 66793\nf 66723 66793 66724\nf 66724 66793 66794\nf 66724 66794 66725\nf 66725 66794 66795\nf 66725 66795 66726\nf 66726 66795 66796\nf 66726 66796 66727\nf 66727 66796 66797\nf 66727 66797 66728\nf 66728 66797 66798\nf 66728 66798 66729\nf 66729 66798 66799\nf 66729 66799 66730\nf 66730 66799 66800\nf 66730 66800 66731\nf 66731 66800 66801\nf 66731 66801 66732\nf 66732 66801 66802\nf 66732 66802 66733\nf 66733 66802 66803\nf 66733 66803 66734\nf 66734 66803 66804\nf 66734 66804 66735\nf 66735 66804 66805\nf 66735 66805 66736\nf 66736 66805 66806\nf 66736 66806 66737\nf 66737 66806 66807\nf 66737 66807 66738\nf 66738 66807 66808\nf 66738 66808 66739\nf 66739 66808 66809\nf 66739 66809 66740\nf 66740 66809 66810\nf 66740 66810 66741\nf 66741 66810 66811\nf 66741 66811 66742\nf 66742 66811 66812\nf 66742 66812 66743\nf 66743 66812 66813\nf 66743 66813 66744\nf 66744 66813 66814\nf 66744 66814 66745\nf 66745 66814 66815\nf 66745 66815 66746\nf 66746 66747 68633\nf 66746 66815 66816\nf 66746 66816 66747\nf 66746 68633 68631\nf 66747 66748 68635\nf 66747 66816 66817\nf 66747 66817 66748\nf 66747 68635 68633\nf 66748 66817 66818\nf 66748 66818 68657\nf 66748 68656 68635\nf 66748 68657 68656\nf 66749 66828 66829\nf 66749 66829 66830\nf 66749 66830 66750\nf 66749 68650 68651\nf 66749 68651 68679\nf 66749 68679 66828\nf 66750 66830 66831\nf 66750 66831 66751\nf 66751 66831 66832\nf 66751 66832 66752\nf 66752 66832 66834\nf 66752 66834 66754\nf 66753 66754 66834\nf 66753 66834 66833\nf 66755 66835 68690\nf 66755 68690 68682\nf 66756 68654 68683\nf 66756 68683 66836\nf 66757 66837 66758\nf 66758 66837 66839\nf 66758 66839 66841\nf 66758 66841 66759\nf 66759 66841 66842\nf 66759 66842 66760\nf 66760 66842 66843\nf 66760 66843 66761\nf 66761 66843 66844\nf 66761 66844 66762\nf 66762 66844 66845\nf 66762 66845 66763\nf 66763 66845 66846\nf 66763 66846 66764\nf 66764 66846 66847\nf 66764 66847 66765\nf 66765 66847 66848\nf 66765 66848 66766\nf 66766 66848 66849\nf 66766 66849 66767\nf 66767 66849 66850\nf 66767 66850 66768\nf 66768 66850 66851\nf 66768 66851 66769\nf 66769 66851 66852\nf 66769 66852 66770\nf 66770 66852 66853\nf 66770 66853 66771\nf 66771 66853 66854\nf 66771 66854 66772\nf 66772 66854 66855\nf 66772 66855 66773\nf 66773 66855 66856\nf 66773 66856 66774\nf 66774 66856 66857\nf 66774 66857 66775\nf 66775 66857 66858\nf 66775 66858 66776\nf 66776 66858 66859\nf 66776 66859 66777\nf 66777 66859 66860\nf 66777 66860 66778\nf 66778 66860 66861\nf 66778 66861 66779\nf 66779 66861 66862\nf 66779 66862 66780\nf 66780 66862 66863\nf 66780 66863 66781\nf 66781 66863 66864\nf 66781 66864 66782\nf 66782 66864 66865\nf 66782 66865 66783\nf 66783 66865 66866\nf 66783 66866 66784\nf 66784 66866 66867\nf 66784 66867 66785\nf 66785 66867 66868\nf 66785 66868 66786\nf 66786 66868 66869\nf 66786 66869 66787\nf 66787 66869 66870\nf 66787 66870 66788\nf 66788 66870 66871\nf 66788 66871 66789\nf 66789 66871 66872\nf 66789 66872 66790\nf 66790 66872 66873\nf 66790 66873 66791\nf 66791 66873 66874\nf 66791 66874 66792\nf 66792 66874 66875\nf 66792 66875 66793\nf 66793 66875 66876\nf 66793 66876 66794\nf 66794 66876 66877\nf 66794 66877 66795\nf 66795 66877 66878\nf 66795 66878 66796\nf 66796 66878 66879\nf 66796 66879 66797\nf 66797 66879 66880\nf 66797 66880 66798\nf 66798 66880 66881\nf 66798 66881 66799\nf 66799 66881 66882\nf 66799 66882 66800\nf 66800 66882 66883\nf 66800 66883 66801\nf 66801 66883 66884\nf 66801 66884 66802\nf 66802 66884 66885\nf 66802 66885 66803\nf 66803 66885 66886\nf 66803 66886 66804\nf 66804 66886 66887\nf 66804 66887 66805\nf 66805 66887 66888\nf 66805 66888 66806\nf 66806 66888 66889\nf 66806 66889 66807\nf 66807 66889 66890\nf 66807 66890 66808\nf 66808 66890 66891\nf 66808 66891 66809\nf 66809 66891 66892\nf 66809 66892 66810\nf 66810 66892 66893\nf 66810 66893 66811\nf 66811 66893 66894\nf 66811 66894 66812\nf 66812 66894 66895\nf 66812 66895 66813\nf 66813 66895 66896\nf 66813 66896 66814\nf 66814 66896 66897\nf 66814 66897 66815\nf 66815 66897 66898\nf 66815 66898 66816\nf 66816 66898 66899\nf 66816 66899 66817\nf 66817 66899 66900\nf 66817 66900 66818\nf 66818 66819 68659\nf 66818 66900 66901\nf 66818 66901 66819\nf 66818 68659 68657\nf 66819 66820 68661\nf 66819 66901 66902\nf 66819 66902 66820\nf 66819 68661 68659\nf 66820 66821 68663\nf 66820 66902 66903\nf 66820 66903 66821\nf 66820 68663 68661\nf 66821 66822 68665\nf 66821 66903 66904\nf 66821 66904 66822\nf 66821 68665 68663\nf 66822 66823 68667\nf 66822 66904 66905\nf 66822 66905 66823\nf 66822 68667 68665\nf 66823 66824 68669\nf 66823 66905 66906\nf 66823 66906 66824\nf 66823 68669 68667\nf 66824 66825 68671\nf 66824 66906 66907\nf 66824 66907 66825\nf 66824 68671 68669\nf 66825 66826 68673\nf 66825 66907 66908\nf 66825 66908 66826\nf 66825 68673 68671\nf 66826 66908 66909\nf 66826 66909 68685\nf 66826 68684 68673\nf 66826 68685 68684\nf 66827 66828 68680\nf 66827 66910 66911\nf 66827 66911 66912\nf 66827 66912 66828\nf 66827 68677 68687\nf 66827 68680 68677\nf 66827 68687 66910\nf 66828 66912 66913\nf 66828 66913 66829\nf 66828 68679 68680\nf 66829 66913 66914\nf 66829 66914 66830\nf 66830 66914 66915\nf 66830 66915 66831\nf 66831 66915 66917\nf 66831 66917 66832\nf 66832 66917 66920\nf 66832 66920 66834\nf 66833 66834 66920\nf 66833 66920 66918\nf 66835 66921 68692\nf 66835 68692 68690\nf 66836 68683 68691\nf 66836 68691 66922\nf 66837 66838 66839\nf 66838 66840 66839\nf 66839 66840 66841\nf 66840 66923 66841\nf 66841 66923 66925\nf 66841 66925 66842\nf 66842 66925 66927\nf 66842 66927 66843\nf 66843 66927 66929\nf 66843 66929 66844\nf 66844 66929 66930\nf 66844 66930 66845\nf 66845 66930 66931\nf 66845 66931 66846\nf 66846 66931 66932\nf 66846 66932 66847\nf 66847 66932 66933\nf 66847 66933 66848\nf 66848 66933 66934\nf 66848 66934 66849\nf 66849 66934 66935\nf 66849 66935 66850\nf 66850 66935 66936\nf 66850 66936 66851\nf 66851 66936 66937\nf 66851 66937 66852\nf 66852 66937 66938\nf 66852 66938 66853\nf 66853 66938 66939\nf 66853 66939 66854\nf 66854 66939 66940\nf 66854 66940 66855\nf 66855 66940 66941\nf 66855 66941 66856\nf 66856 66941 66942\nf 66856 66942 66857\nf 66857 66942 66943\nf 66857 66943 66858\nf 66858 66943 66944\nf 66858 66944 66859\nf 66859 66944 66945\nf 66859 66945 66860\nf 66860 66945 66946\nf 66860 66946 66861\nf 66861 66946 66947\nf 66861 66947 66862\nf 66862 66947 66948\nf 66862 66948 66863\nf 66863 66948 66950\nf 66863 66950 66864\nf 66864 66950 66952\nf 66864 66952 66865\nf 66865 66952 66954\nf 66865 66954 66866\nf 66866 66954 66956\nf 66866 66956 66867\nf 66867 66956 66958\nf 66867 66958 66868\nf 66868 66958 66960\nf 66868 66960 66869\nf 66869 66960 66962\nf 66869 66962 66870\nf 66870 66962 66964\nf 66870 66964 66871\nf 66871 66964 66966\nf 66871 66966 66872\nf 66872 66966 66968\nf 66872 66968 66873\nf 66873 66968 66970\nf 66873 66970 66874\nf 66874 66970 66972\nf 66874 66972 66875\nf 66875 66972 66974\nf 66875 66974 66876\nf 66876 66974 66976\nf 66876 66976 66877\nf 66877 66976 66978\nf 66877 66978 66878\nf 66878 66978 66980\nf 66878 66980 66879\nf 66879 66980 66982\nf 66879 66982 66880\nf 66880 66982 66984\nf 66880 66984 66881\nf 66881 66984 66986\nf 66881 66986 66882\nf 66882 66986 66988\nf 66882 66988 66883\nf 66883 66988 66990\nf 66883 66990 66884\nf 66884 66990 66992\nf 66884 66992 66885\nf 66885 66992 66994\nf 66885 66994 66886\nf 66886 66994 66996\nf 66886 66996 66887\nf 66887 66996 66998\nf 66887 66998 66888\nf 66888 66998 67000\nf 66888 67000 66889\nf 66889 67000 67002\nf 66889 67002 66890\nf 66890 67002 67004\nf 66890 67004 66891\nf 66891 67004 67006\nf 66891 67006 66892\nf 66892 67006 67008\nf 66892 67008 66893\nf 66893 67008 67010\nf 66893 67010 66894\nf 66894 67010 67012\nf 66894 67012 66895\nf 66895 67012 67014\nf 66895 67014 66896\nf 66896 67014 67016\nf 66896 67016 66897\nf 66897 67016 67018\nf 66897 67018 66898\nf 66898 67018 67020\nf 66898 67020 66899\nf 66899 67020 67022\nf 66899 67022 66900\nf 66900 67022 67024\nf 66900 67024 66901\nf 66901 67024 67026\nf 66901 67026 66902\nf 66902 67026 67028\nf 66902 67028 66903\nf 66903 67028 67030\nf 66903 67030 66904\nf 66904 67030 67032\nf 66904 67032 66905\nf 66905 67032 67034\nf 66905 67034 66906\nf 66906 67034 67036\nf 66906 67036 66907\nf 66907 67036 67038\nf 66907 67038 66908\nf 66908 67038 67040\nf 66908 67040 66909\nf 66909 66910 68688\nf 66909 67040 67042\nf 66909 67042 66910\nf 66909 68688 68685\nf 66910 67042 67044\nf 66910 67044 66911\nf 66910 68687 68688\nf 66911 67044 67046\nf 66911 67046 66912\nf 66912 67046 67048\nf 66912 67048 66913\nf 66913 67048 67050\nf 66913 67050 66914\nf 66914 67050 67053\nf 66914 67053 66915\nf 66915 67053 66917\nf 66916 66917 67053\nf 66916 66919 66917\nf 66916 67053 67051\nf 66917 66919 66920\nf 66918 66920 66919\nf 66921 67054 68694\nf 66921 68694 68692\nf 66922 68691 68693\nf 66922 68693 67055\nf 66923 66924 66925\nf 66924 66926 66925\nf 66925 66926 66927\nf 66926 66928 66927\nf 66927 66928 66929\nf 66928 67056 66929\nf 66929 67056 67058\nf 66929 67058 66930\nf 66930 67058 67060\nf 66930 67060 66931\nf 66931 67060 67062\nf 66931 67062 66932\nf 66932 67062 67064\nf 66932 67064 66933\nf 66933 67064 67066\nf 66933 67066 66934\nf 66934 67066 67068\nf 66934 67068 66935\nf 66935 67068 67070\nf 66935 67070 66936\nf 66936 67070 67072\nf 66936 67072 66937\nf 66937 67072 67074\nf 66937 67074 66938\nf 66938 67074 67076\nf 66938 67076 66939\nf 66939 67076 67078\nf 66939 67078 66940\nf 66940 67078 67080\nf 66940 67080 66941\nf 66941 67080 67082\nf 66941 67082 66942\nf 66942 67082 67084\nf 66942 67084 66943\nf 66943 67084 67086\nf 66943 67086 66944\nf 66944 67086 67088\nf 66944 67088 66945\nf 66945 67088 67090\nf 66945 67090 66946\nf 66946 67090 67092\nf 66946 67092 66947\nf 66947 67092 67095\nf 66947 67095 66948\nf 66948 67095 66950\nf 66949 66950 67095\nf 66949 66951 66950\nf 66949 67095 67093\nf 66950 66951 66952\nf 66951 66953 66952\nf 66952 66953 66954\nf 66953 66955 66954\nf 66954 66955 66956\nf 66955 66957 66956\nf 66956 66957 66958\nf 66957 66959 66958\nf 66958 66959 66960\nf 66959 66961 66960\nf 66960 66961 66962\nf 66961 66963 66962\nf 66962 66963 66964\nf 66963 66965 66964\nf 66964 66965 66966\nf 66965 66967 66966\nf 66966 66967 66968\nf 66967 66969 66968\nf 66968 66969 66970\nf 66969 66971 66970\nf 66970 66971 66972\nf 66971 66973 66972\nf 66972 66973 66974\nf 66973 66975 66974\nf 66974 66975 66976\nf 66975 66977 66976\nf 66976 66977 66978\nf 66977 66979 66978\nf 66978 66979 66980\nf 66979 66981 66980\nf 66980 66981 66982\nf 66981 66983 66982\nf 66982 66983 66984\nf 66983 66985 66984\nf 66984 66985 66986\nf 66985 66987 66986\nf 66986 66987 66988\nf 66987 66989 66988\nf 66988 66989 66990\nf 66989 66991 66990\nf 66990 66991 66992\nf 66991 66993 66992\nf 66992 66993 66994\nf 66993 66995 66994\nf 66994 66995 66996\nf 66995 66997 66996\nf 66996 66997 66998\nf 66997 66999 66998\nf 66998 66999 67000\nf 66999 67001 67000\nf 67000 67001 67002\nf 67001 67003 67002\nf 67002 67003 67004\nf 67003 67005 67004\nf 67004 67005 67006\nf 67005 67007 67006\nf 67006 67007 67008\nf 67007 67009 67008\nf 67008 67009 67010\nf 67009 67011 67010\nf 67010 67011 67012\nf 67011 67013 67012\nf 67012 67013 67014\nf 67013 67015 67014\nf 67014 67015 67016\nf 67015 67017 67016\nf 67016 67017 67018\nf 67017 67019 67018\nf 67018 67019 67020\nf 67019 67021 67020\nf 67020 67021 67022\nf 67021 67023 67022\nf 67022 67023 67024\nf 67023 67025 67024\nf 67024 67025 67026\nf 67025 67027 67026\nf 67026 67027 67028\nf 67027 67029 67028\nf 67028 67029 67030\nf 67029 67031 67030\nf 67030 67031 67032\nf 67031 67033 67032\nf 67032 67033 67034\nf 67033 67035 67034\nf 67034 67035 67036\nf 67035 67037 67036\nf 67036 67037 67038\nf 67037 67039 67038\nf 67038 67039 67040\nf 67039 67041 67040\nf 67040 67041 67042\nf 67041 67043 67042\nf 67042 67043 67044\nf 67043 67045 67044\nf 67044 67045 67046\nf 67045 67047 67046\nf 67046 67047 67048\nf 67047 67049 67048\nf 67048 67049 67050\nf 67049 67052 67050\nf 67050 67052 67053\nf 67051 67053 67052\nf 67054 67096 68696\nf 67054 68696 68694\nf 67055 68693 68695\nf 67055 68695 67098\nf 67056 67057 67058\nf 67057 67059 67058\nf 67058 67059 67060\nf 67059 67061 67060\nf 67060 67061 67062\nf 67061 67063 67062\nf 67062 67063 67064\nf 67063 67065 67064\nf 67064 67065 67066\nf 67065 67067 67066\nf 67066 67067 67068\nf 67067 67069 67068\nf 67068 67069 67070\nf 67069 67071 67070\nf 67070 67071 67072\nf 67071 67073 67072\nf 67072 67073 67074\nf 67073 67075 67074\nf 67074 67075 67076\nf 67075 67077 67076\nf 67076 67077 67078\nf 67077 67079 67078\nf 67078 67079 67080\nf 67079 67081 67080\nf 67080 67081 67082\nf 67081 67083 67082\nf 67082 67083 67084\nf 67083 67085 67084\nf 67084 67085 67086\nf 67085 67087 67086\nf 67086 67087 67088\nf 67087 67089 67088\nf 67088 67089 67090\nf 67089 67091 67090\nf 67090 67091 67092\nf 67091 67094 67092\nf 67092 67094 67095\nf 67093 67095 67094\nf 67096 67097 68698\nf 67096 68698 68696\nf 67097 67099 67100\nf 67097 67100 68698\nf 67098 68695 68697\nf 67098 68697 67101\nf 67099 67102 68701\nf 67099 68701 67100\nf 67100 68699 68698\nf 67100 68701 68699\nf 67101 68697 68700\nf 67101 68700 67103\nf 67102 67104 68704\nf 67102 68704 68701\nf 67103 68700 68703\nf 67103 68703 67106\nf 67104 67105 68704\nf 67105 67108 68708\nf 67105 68705 68704\nf 67105 68708 68705\nf 67106 68703 68706\nf 67106 68706 67110\nf 67107 67123 68760\nf 67107 68707 68709\nf 67107 68709 67109\nf 67107 68760 68707\nf 67108 67109 68708\nf 67109 68709 68708\nf 67110 68706 68710\nf 67110 68710 67125\nf 67111 67235 67237\nf 67111 67237 68747\nf 67111 68747 68748\nf 67111 68748 68749\nf 67111 68749 67112\nf 67112 68749 68750\nf 67112 68750 67113\nf 67113 68750 68751\nf 67113 68751 67114\nf 67114 68751 68752\nf 67114 68752 67115\nf 67115 68752 68753\nf 67115 68753 67116\nf 67116 68753 68754\nf 67116 68754 67117\nf 67117 68754 68755\nf 67117 68755 67118\nf 67118 68755 68756\nf 67118 68756 67119\nf 67119 68756 68757\nf 67119 68757 67120\nf 67120 68757 68758\nf 67120 68758 67121\nf 67121 68758 68759\nf 67121 68759 67122\nf 67122 68759 68761\nf 67122 68761 67124\nf 67123 67124 68760\nf 67124 68761 68760\nf 67125 68710 68762\nf 67125 68762 67238\nf 67126 67240 68809\nf 67126 68763 68764\nf 67126 68764 67127\nf 67126 68809 68763\nf 67127 68764 68765\nf 67127 68765 67128\nf 67128 68765 68766\nf 67128 68766 67129\nf 67129 68766 68767\nf 67129 68767 67130\nf 67130 68767 68768\nf 67130 68768 67131\nf 67131 68768 68769\nf 67131 68769 67132\nf 67132 68769 68770\nf 67132 68770 67133\nf 67133 68770 68771\nf 67133 68771 67134\nf 67134 68771 68772\nf 67134 68772 67135\nf 67135 68772 68773\nf 67135 68773 67136\nf 67136 68773 68774\nf 67136 68774 67137\nf 67137 68774 68775\nf 67137 68775 67138\nf 67138 68775 68776\nf 67138 68776 67139\nf 67139 68776 68777\nf 67139 68777 67140\nf 67140 68777 68778\nf 67140 68778 67141\nf 67141 68778 68779\nf 67141 68779 67142\nf 67142 68779 68780\nf 67142 68780 67143\nf 67143 68780 68781\nf 67143 68781 67144\nf 67144 68781 68782\nf 67144 68782 67145\nf 67145 68782 68783\nf 67145 68783 67146\nf 67146 68783 68784\nf 67146 68784 67147\nf 67147 68784 68785\nf 67147 68785 67148\nf 67148 68785 68786\nf 67148 68786 67149\nf 67149 68786 68787\nf 67149 68787 67150\nf 67150 68787 68788\nf 67150 68788 67151\nf 67151 68788 68789\nf 67151 68789 67152\nf 67152 68789 68790\nf 67152 68790 67153\nf 67153 68790 68791\nf 67153 68791 67154\nf 67154 68791 68792\nf 67154 68792 67155\nf 67155 68792 68793\nf 67155 68793 67156\nf 67156 68793 68795\nf 67156 68795 67157\nf 67157 68795 68797\nf 67157 68797 67158\nf 67158 68797 68799\nf 67158 68799 67159\nf 67159 68799 68801\nf 67159 68801 67160\nf 67160 68801 68803\nf 67160 68803 67161\nf 67161 68803 68806\nf 67161 68806 67162\nf 67162 68806 67163\nf 67163 67164 67165\nf 67163 68805 67164\nf 67163 68806 68805\nf 67164 67166 67165\nf 67164 68711 68712\nf 67164 68712 67166\nf 67164 68805 68711\nf 67165 67166 67167\nf 67166 67168 67167\nf 67166 68712 68713\nf 67166 68713 67168\nf 67167 67168 67169\nf 67168 67170 67169\nf 67168 68713 68714\nf 67168 68714 67170\nf 67169 67170 67171\nf 67170 67172 67171\nf 67170 68714 68715\nf 67170 68715 67172\nf 67171 67172 67173\nf 67172 67174 67173\nf 67172 68715 68716\nf 67172 68716 67174\nf 67173 67174 67175\nf 67174 67176 67175\nf 67174 68716 68717\nf 67174 68717 67176\nf 67175 67176 67177\nf 67176 67178 67177\nf 67176 68717 68718\nf 67176 68718 67178\nf 67177 67178 67179\nf 67178 67180 67179\nf 67178 68718 68719\nf 67178 68719 67180\nf 67179 67180 67181\nf 67180 67182 67181\nf 67180 68719 68720\nf 67180 68720 67182\nf 67181 67182 67183\nf 67182 67184 67183\nf 67182 68720 68721\nf 67182 68721 67184\nf 67183 67184 67185\nf 67184 67186 67185\nf 67184 68721 68722\nf 67184 68722 67186\nf 67185 67186 67187\nf 67186 67188 67187\nf 67186 68722 68723\nf 67186 68723 67188\nf 67187 67188 67189\nf 67188 67190 67189\nf 67188 68723 68724\nf 67188 68724 67190\nf 67189 67190 67191\nf 67190 67192 67191\nf 67190 68724 68725\nf 67190 68725 67192\nf 67191 67192 67193\nf 67192 67194 67193\nf 67192 68725 68726\nf 67192 68726 67194\nf 67193 67194 67195\nf 67194 67196 67195\nf 67194 68726 68727\nf 67194 68727 67196\nf 67195 67196 67197\nf 67196 67198 67197\nf 67196 68727 68728\nf 67196 68728 67198\nf 67197 67198 67199\nf 67198 67200 67199\nf 67198 68728 68729\nf 67198 68729 67200\nf 67199 67200 67201\nf 67200 67202 67201\nf 67200 68729 68730\nf 67200 68730 67202\nf 67201 67202 67203\nf 67202 67204 67203\nf 67202 68730 68731\nf 67202 68731 67204\nf 67203 67204 67205\nf 67204 67206 67205\nf 67204 68731 68732\nf 67204 68732 67206\nf 67205 67206 67207\nf 67206 67208 67207\nf 67206 68732 68733\nf 67206 68733 67208\nf 67207 67208 67209\nf 67208 67210 67209\nf 67208 68733 68734\nf 67208 68734 67210\nf 67209 67210 67211\nf 67210 67212 67211\nf 67210 68734 68735\nf 67210 68735 67212\nf 67211 67212 67213\nf 67212 67214 67213\nf 67212 68735 68736\nf 67212 68736 67214\nf 67213 67214 67215\nf 67214 67216 67215\nf 67214 68736 68737\nf 67214 68737 67216\nf 67215 67216 67217\nf 67216 67218 67217\nf 67216 68737 68738\nf 67216 68738 67218\nf 67217 67218 67219\nf 67218 67220 67219\nf 67218 68738 68739\nf 67218 68739 67220\nf 67219 67220 67221\nf 67220 67222 67221\nf 67220 68739 68740\nf 67220 68740 67222\nf 67221 67222 67223\nf 67222 67224 67223\nf 67222 68740 68741\nf 67222 68741 67224\nf 67223 67224 67225\nf 67224 67226 67225\nf 67224 68741 68742\nf 67224 68742 67226\nf 67225 67226 67227\nf 67226 67228 67227\nf 67226 68742 68743\nf 67226 68743 67228\nf 67227 67228 67229\nf 67228 67230 67229\nf 67228 68743 68744\nf 67228 68744 67230\nf 67229 67230 67231\nf 67230 67232 67231\nf 67230 68744 68745\nf 67230 68745 67232\nf 67231 67232 67233\nf 67232 67234 67233\nf 67232 68745 68746\nf 67232 68746 67234\nf 67233 67234 67236\nf 67234 67237 67236\nf 67234 68746 68747\nf 67234 68747 67237\nf 67235 67236 67237\nf 67238 68762 68808\nf 67238 68808 67242\nf 67239 67243 67244\nf 67239 67244 68813\nf 67239 68810 67241\nf 67239 68813 68810\nf 67240 67241 68809\nf 67241 68810 68809\nf 67242 68808 68812\nf 67242 68812 67245\nf 67243 67246 68816\nf 67243 68816 67244\nf 67244 68814 68813\nf 67244 68816 68814\nf 67245 68812 68815\nf 67245 68815 67247\nf 67246 67248 68818\nf 67246 68818 68816\nf 67247 68815 68817\nf 67247 68817 67249\nf 67248 67250 68820\nf 67248 68820 68818\nf 67249 68817 68819\nf 67249 68819 67251\nf 67250 67252 68822\nf 67250 68822 68820\nf 67251 68819 68821\nf 67251 68821 67253\nf 67252 67254 68824\nf 67252 68824 68822\nf 67253 68821 68823\nf 67253 68823 67255\nf 67254 67256 68826\nf 67254 68826 68824\nf 67255 68823 68825\nf 67255 68825 67257\nf 67256 67258 68828\nf 67256 68828 68826\nf 67257 68825 68827\nf 67257 68827 67259\nf 67258 67260 68831\nf 67258 68831 68828\nf 67259 68827 68829\nf 67259 68829 67261\nf 67260 67262 68834\nf 67260 68834 68831\nf 67261 68829 68832\nf 67261 68832 67263\nf 67262 67264 68838\nf 67262 68838 68834\nf 67263 68832 68835\nf 67263 68835 67265\nf 67264 67267 68840\nf 67264 68840 68838\nf 67265 67266 67269\nf 67265 67269 67268\nf 67265 68835 67266\nf 67266 68835 68836\nf 67266 68836 68839\nf 67266 68839 67269\nf 67267 67270 68842\nf 67267 68842 68840\nf 67268 67269 67273\nf 67268 67273 67271\nf 67269 68839 68841\nf 67269 68841 67273\nf 67270 67274 68844\nf 67270 68844 68842\nf 67271 67273 67272\nf 67272 67273 68843\nf 67272 68843 67275\nf 67273 68841 68843\nf 67274 67276 68846\nf 67274 68846 68844\nf 67275 68843 68845\nf 67275 68845 67277\nf 67276 67278 68848\nf 67276 68848 68846\nf 67277 68845 68847\nf 67277 68847 67279\nf 67278 67280 68850\nf 67278 68850 68848\nf 67279 68847 68849\nf 67279 68849 67281\nf 67280 67282 68853\nf 67280 68853 68850\nf 67281 68849 68851\nf 67281 68851 67283\nf 67282 67284 68856\nf 67282 68856 68853\nf 67283 68851 68854\nf 67283 68854 67285\nf 67284 67286 68859\nf 67284 68859 68856\nf 67285 68854 68857\nf 67285 68857 67287\nf 67286 67288 68862\nf 67286 68862 68859\nf 67287 68857 68860\nf 67287 68860 67289\nf 67288 67290 68865\nf 67288 68865 68862\nf 67289 68860 68863\nf 67289 68863 67291\nf 67290 67292 68867\nf 67290 68867 68865\nf 67291 68863 68866\nf 67291 68866 67293\nf 67292 67294 68869\nf 67292 68869 68867\nf 67293 68866 68868\nf 67293 68868 67296\nf 67294 67295 68871\nf 67294 68871 68869\nf 67295 67297 67298\nf 67295 67298 68871\nf 67296 68868 68870\nf 67296 68870 67299\nf 67297 67301 68874\nf 67297 68874 67298\nf 67298 68872 68871\nf 67298 68874 68872\nf 67299 67303 67300\nf 67299 68870 68873\nf 67299 68873 68876\nf 67299 68876 67303\nf 67300 67303 67302\nf 67301 67304 68877\nf 67301 68877 68874\nf 67302 67303 67306\nf 67302 67306 67305\nf 67303 68876 67306\nf 67304 67307 68881\nf 67304 68881 68877\nf 67305 67306 67309\nf 67305 67309 67308\nf 67306 68876 68879\nf 67306 68879 67309\nf 67307 67310 68885\nf 67307 68885 68881\nf 67308 67309 67312\nf 67308 67312 67311\nf 67309 68879 68883\nf 67309 68883 67312\nf 67310 67313 68888\nf 67310 68888 68885\nf 67311 67312 67315\nf 67311 67315 67314\nf 67312 68883 68886\nf 67312 68886 67315\nf 67313 67316 68891\nf 67313 68891 68888\nf 67314 67315 67319\nf 67314 67319 67317\nf 67315 68886 68889\nf 67315 68889 67319\nf 67316 67320 68894\nf 67316 68894 68891\nf 67317 67319 67318\nf 67318 67319 68892\nf 67318 68892 67321\nf 67319 68889 68892\nf 67320 67322 68897\nf 67320 68897 68894\nf 67321 68892 68895\nf 67321 68895 67323\nf 67322 67324 68900\nf 67322 68900 68897\nf 67323 68895 68898\nf 67323 68898 67326\nf 67324 67325 68903\nf 67324 68903 68900\nf 67325 67327 67328\nf 67325 67328 68903\nf 67326 68898 68901\nf 67326 68901 67329\nf 67327 67330 68907\nf 67327 68907 67328\nf 67328 68904 68903\nf 67328 68907 68904\nf 67329 68901 68905\nf 67329 68905 67331\nf 67330 67332 68911\nf 67330 68911 68907\nf 67331 68905 68909\nf 67331 68909 67333\nf 67332 67334 68915\nf 67332 68915 68911\nf 67333 68909 68913\nf 67333 68913 67335\nf 67334 67336 68919\nf 67334 68919 68915\nf 67335 68913 68917\nf 67335 68917 67337\nf 67336 67338 68924\nf 67336 68924 68919\nf 67337 68917 68921\nf 67337 68921 67339\nf 67338 67341 68927\nf 67338 68927 68924\nf 67339 67340 67343\nf 67339 67343 67342\nf 67339 68921 67340\nf 67340 68921 68922\nf 67340 68922 68926\nf 67340 68926 67343\nf 67341 67344 68930\nf 67341 68930 68927\nf 67342 67343 67346\nf 67342 67346 67345\nf 67343 68926 68929\nf 67343 68929 67346\nf 67344 67347 68933\nf 67344 68933 68930\nf 67345 67346 67349\nf 67345 67349 67348\nf 67346 68929 68932\nf 67346 68932 67349\nf 67347 67350 68936\nf 67347 68936 68933\nf 67348 67349 67352\nf 67348 67352 67351\nf 67349 68932 68935\nf 67349 68935 67352\nf 67350 67353 68939\nf 67350 68939 68936\nf 67351 67352 67355\nf 67351 67355 67354\nf 67352 68935 68938\nf 67352 68938 67355\nf 67353 67356 68941\nf 67353 68941 68939\nf 67354 67355 67358\nf 67354 67358 67357\nf 67355 68938 68940\nf 67355 68940 67358\nf 67356 67359 68943\nf 67356 68943 68941\nf 67357 67358 67361\nf 67357 67361 67360\nf 67358 68940 68942\nf 67358 68942 67361\nf 67359 67362 68946\nf 67359 68946 68943\nf 67360 67361 67364\nf 67360 67364 67363\nf 67361 68942 68944\nf 67361 68944 67364\nf 67362 67365 68949\nf 67362 68949 68946\nf 67363 67364 67367\nf 67363 67367 67366\nf 67364 68944 68947\nf 67364 68947 67367\nf 67365 67368 68952\nf 67365 68952 68949\nf 67366 67367 67370\nf 67366 67370 67369\nf 67367 68947 68950\nf 67367 68950 67370\nf 67368 67371 68955\nf 67368 68955 68952\nf 67369 67370 67373\nf 67369 67373 67372\nf 67370 68950 68953\nf 67370 68953 67373\nf 67371 67374 68958\nf 67371 68958 68955\nf 67372 67373 67378\nf 67372 67378 67376\nf 67373 68953 68956\nf 67373 68956 67378\nf 67374 67375 68961\nf 67374 68961 68958\nf 67375 67379 67380\nf 67375 67380 68961\nf 67376 67378 67377\nf 67377 67378 68959\nf 67377 68959 67381\nf 67378 68956 68959\nf 67379 67382 67380\nf 67380 67382 67383\nf 67380 67383 68964\nf 67380 68964 68961\nf 67381 68959 68962\nf 67381 68962 67384\nf 67382 67385 67383\nf 67383 67385 67386\nf 67383 67386 68968\nf 67383 68968 68964\nf 67384 68962 68965\nf 67384 68965 67387\nf 67385 67389 67386\nf 67386 67389 67390\nf 67386 67390 68970\nf 67386 68970 68968\nf 67387 67388 67392\nf 67387 67392 67391\nf 67387 68965 67388\nf 67388 68965 68966\nf 67388 68966 68969\nf 67388 68969 67392\nf 67389 67393 67390\nf 67390 67393 67394\nf 67390 67394 68972\nf 67390 68972 68970\nf 67391 67392 67396\nf 67391 67396 67395\nf 67392 68969 68971\nf 67392 68971 67396\nf 67393 67397 68975\nf 67393 68975 67394\nf 67394 68973 68972\nf 67394 68975 68973\nf 67395 67396 67399\nf 67395 67399 67398\nf 67396 68971 68974\nf 67396 68974 67399\nf 67397 67400 68978\nf 67397 68978 68975\nf 67398 67399 67402\nf 67398 67402 67401\nf 67399 68974 68977\nf 67399 68977 67402\nf 67400 67403 68981\nf 67400 68981 68978\nf 67401 67402 67405\nf 67401 67405 67404\nf 67402 68977 68980\nf 67402 68980 67405\nf 67403 67406 68985\nf 67403 68985 68981\nf 67404 67405 67409\nf 67404 67409 67407\nf 67405 68980 68983\nf 67405 68983 67409\nf 67406 67410 68988\nf 67406 68988 68985\nf 67407 67409 67408\nf 67408 67409 68986\nf 67408 68986 67411\nf 67409 68983 68986\nf 67410 67412 68991\nf 67410 68991 68988\nf 67411 68986 68989\nf 67411 68989 67413\nf 67412 67414 68994\nf 67412 68994 68991\nf 67413 68989 68992\nf 67413 68992 67416\nf 67414 67415 68997\nf 67414 68997 68994\nf 67415 67417 67418\nf 67415 67418 68997\nf 67416 68992 68995\nf 67416 68995 67419\nf 67417 67420 67418\nf 67418 67420 67421\nf 67418 67421 69000\nf 67418 69000 68997\nf 67419 68995 68998\nf 67419 68998 67422\nf 67420 67423 67421\nf 67421 67423 67424\nf 67421 67424 69003\nf 67421 69003 69000\nf 67422 68998 69001\nf 67422 69001 67425\nf 67423 67426 67424\nf 67424 67426 67427\nf 67424 67427 69007\nf 67424 69007 69003\nf 67425 69001 69004\nf 67425 69004 67428\nf 67426 67430 67427\nf 67427 67430 67431\nf 67427 67431 69009\nf 67427 69009 69007\nf 67428 67429 67433\nf 67428 67433 67432\nf 67428 69004 67429\nf 67429 69004 69005\nf 67429 69005 69008\nf 67429 69008 67433\nf 67430 67434 67431\nf 67431 67434 67435\nf 67431 67435 69011\nf 67431 69011 69009\nf 67432 67433 67437\nf 67432 67437 67436\nf 67433 69008 69010\nf 67433 69010 67437\nf 67434 67438 69014\nf 67434 69014 67435\nf 67435 69012 69011\nf 67435 69014 69012\nf 67436 67437 67441\nf 67436 67441 67439\nf 67437 69010 69013\nf 67437 69013 67441\nf 67438 67442 69017\nf 67438 69017 69014\nf 67439 67441 67440\nf 67440 67441 69016\nf 67440 69016 67443\nf 67441 69013 69016\nf 67442 67444 69019\nf 67442 69019 69017\nf 67443 69016 69018\nf 67443 69018 67445\nf 67444 67446 69022\nf 67444 69022 69019\nf 67445 69018 69020\nf 67445 69020 67447\nf 67446 67448 69025\nf 67446 69025 69022\nf 67447 69020 69023\nf 67447 69023 67449\nf 67448 67450 69028\nf 67448 69028 69025\nf 67449 69023 69026\nf 67449 69026 67451\nf 67450 67452 69032\nf 67450 69032 69028\nf 67451 69026 69029\nf 67451 69029 67453\nf 67452 67455 69034\nf 67452 69034 69032\nf 67453 67454 67458\nf 67453 67458 67457\nf 67453 69029 67454\nf 67454 69029 69030\nf 67454 69030 69033\nf 67454 69033 67458\nf 67455 67456 69036\nf 67455 69036 69034\nf 67456 67459 67460\nf 67456 67460 69036\nf 67457 67458 67462\nf 67457 67462 67461\nf 67458 69033 69035\nf 67458 69035 67462\nf 67459 67463 69039\nf 67459 69039 67460\nf 67460 69037 69036\nf 67460 69039 69037\nf 67461 67462 67465\nf 67461 67465 67464\nf 67462 69035 69038\nf 67462 69038 67465\nf 67463 67466 69042\nf 67463 69042 69039\nf 67464 67465 67468\nf 67464 67468 67467\nf 67465 69038 69041\nf 67465 69041 67468\nf 67466 67469 69046\nf 67466 69046 69042\nf 67467 67468 69045\nf 67467 69045 69047\nf 67467 69047 67470\nf 67468 69041 69044\nf 67468 69044 69045\nf 67469 67471 69049\nf 67469 69049 69046\nf 67470 69047 67472\nf 67471 67473 69052\nf 67471 69052 69049\nf 67472 69047 69050\nf 67472 69050 67474\nf 67473 67476 69055\nf 67473 69055 69052\nf 67474 67478 67475\nf 67474 69050 69053\nf 67474 69053 69056\nf 67474 69056 67478\nf 67475 67478 67477\nf 67476 67479 69057\nf 67476 69057 69055\nf 67477 67478 67482\nf 67477 67482 67481\nf 67478 69056 67482\nf 67479 67480 69059\nf 67479 69059 69057\nf 67480 67483 67484\nf 67480 67484 69059\nf 67481 67482 67487\nf 67481 67487 67485\nf 67482 69056 69058\nf 67482 69058 67487\nf 67483 67488 67484\nf 67484 67488 67489\nf 67484 67489 69062\nf 67484 69062 69059\nf 67485 67487 67486\nf 67486 67487 69060\nf 67486 69060 67490\nf 67487 69058 69060\nf 67488 67491 69066\nf 67488 69066 67489\nf 67489 69063 69062\nf 67489 69066 69063\nf 67490 69060 69064\nf 67490 69064 67493\nf 67491 67492 69069\nf 67491 69069 69066\nf 67492 67494 67495\nf 67492 67495 69069\nf 67493 69064 69067\nf 67493 69067 67496\nf 67494 67497 69073\nf 67494 69073 67495\nf 67495 69070 69069\nf 67495 69073 69070\nf 67496 69067 69071\nf 67496 69071 67499\nf 67497 67498 69073\nf 67498 67500 69077\nf 67498 69074 69073\nf 67498 69077 69074\nf 67499 69071 69075\nf 67499 69075 67501\nf 67500 67502 69082\nf 67500 69082 69077\nf 67501 69075 69079\nf 67501 69079 67504\nf 67502 67503 69082\nf 67503 67506 69085\nf 67503 69083 69082\nf 67503 69085 69083\nf 67504 67505 67508\nf 67504 67508 67507\nf 67504 69079 67505\nf 67505 69079 69080\nf 67505 69080 69084\nf 67505 69084 67508\nf 67506 67509 69088\nf 67506 69088 69085\nf 67507 67508 67512\nf 67507 67512 67511\nf 67508 69084 69087\nf 67508 69087 67512\nf 67509 67510 69091\nf 67509 69091 69088\nf 67510 67513 67514\nf 67510 67514 69091\nf 67511 67512 69090\nf 67511 69090 69093\nf 67511 69093 67515\nf 67512 69087 69089\nf 67512 69089 69090\nf 67513 67518 69095\nf 67513 69095 67514\nf 67514 69092 69091\nf 67514 69095 69092\nf 67515 67519 67516\nf 67515 69093 69097\nf 67515 69097 67519\nf 67516 67519 67521\nf 67516 67521 67517\nf 67517 67521 67520\nf 67518 67523 69100\nf 67518 69100 69095\nf 67519 69097 69098\nf 67519 69098 67521\nf 67520 67521 67522\nf 67521 69098 69099\nf 67521 69099 67522\nf 67522 67526 67525\nf 67522 69099 67526\nf 67523 67524 69105\nf 67523 69105 69100\nf 67524 67527 67529\nf 67524 67529 69105\nf 67525 67526 69103\nf 67525 69103 67528\nf 67526 69099 69101\nf 67526 69101 69103\nf 67527 67528 67529\nf 67528 69103 69104\nf 67528 69104 69106\nf 67528 69106 67529\nf 67529 69106 69105\nf 67530 67548 69114\nf 67530 69113 69130\nf 67530 69114 69113\nf 67530 69130 67546\nf 67531 67532 69118\nf 67531 67561 67559\nf 67531 69117 67561\nf 67531 69118 69117\nf 67532 67533 69119\nf 67532 69119 69118\nf 67533 67534 69120\nf 67533 69120 69119\nf 67534 67535 69122\nf 67534 69122 69120\nf 67535 67536 69121\nf 67535 67537 67536\nf 67535 69121 69122\nf 67536 67537 67538\nf 67536 67538 69111\nf 67536 69110 69121\nf 67536 69111 69110\nf 67537 67539 67538\nf 67538 67539 67540\nf 67538 67540 69112\nf 67538 69112 69111\nf 67539 67541 69125\nf 67539 69125 67540\nf 67540 69124 69112\nf 67540 69125 69124\nf 67541 67542 69125\nf 67542 67543 69126\nf 67542 69126 69125\nf 67543 67562 69127\nf 67543 69127 69126\nf 67544 67545 69128\nf 67544 69128 69142\nf 67544 69142 67563\nf 67545 67547 69129\nf 67545 69129 69128\nf 67546 69130 67547\nf 67547 69130 69131\nf 67547 69131 69129\nf 67548 67549 67550\nf 67548 67550 69114\nf 67549 67551 67550\nf 67550 67551 67552\nf 67550 67552 69115\nf 67550 69115 69114\nf 67551 67553 67552\nf 67552 67553 67554\nf 67552 67554 69116\nf 67552 69116 69115\nf 67553 67555 69133\nf 67553 69133 67554\nf 67554 69132 69116\nf 67554 69133 69132\nf 67555 67556 69133\nf 67556 67557 69135\nf 67556 69135 69133\nf 67557 67564 69137\nf 67557 69136 69135\nf 67557 69137 69136\nf 67558 67560 69139\nf 67558 69139 69147\nf 67558 69147 67568\nf 67559 67561 67560\nf 67560 67561 69138\nf 67560 69138 69139\nf 67561 69117 69138\nf 67562 67569 69140\nf 67562 69140 69127\nf 67563 69142 67572\nf 67564 67565 67566\nf 67564 67566 69137\nf 67565 67567 69145\nf 67565 69145 67566\nf 67566 69144 69137\nf 67566 69145 69144\nf 67567 67575 69146\nf 67567 69146 69145\nf 67568 69147 67578\nf 67569 67570 67571\nf 67569 67571 69141\nf 67569 69141 69140\nf 67570 67579 67571\nf 67571 67579 69148\nf 67571 69148 69141\nf 67572 67574 67573\nf 67572 69142 67574\nf 67573 67574 69149\nf 67573 69149 67580\nf 67574 69142 69143\nf 67574 69143 69149\nf 67575 67576 67577\nf 67575 67577 69146\nf 67576 67581 67577\nf 67577 67581 69150\nf 67577 69150 69146\nf 67578 69147 69151\nf 67578 69151 67582\nf 67579 67583 69157\nf 67579 69152 69148\nf 67579 69157 69152\nf 67580 69149 69153\nf 67580 69153 67584\nf 67581 67587 69160\nf 67581 69155 69150\nf 67581 69160 69155\nf 67582 69151 69156\nf 67582 69156 67588\nf 67583 67589 69157\nf 67584 67586 67585\nf 67584 69153 67586\nf 67585 67586 69159\nf 67585 69159 67591\nf 67586 69153 69154\nf 67586 69154 69159\nf 67587 67592 69164\nf 67587 69164 69160\nf 67588 69156 69161\nf 67588 69161 67593\nf 67589 67590 69158\nf 67589 67594 67590\nf 67589 69158 69157\nf 67590 67594 67596\nf 67590 67596 69166\nf 67590 69162 69158\nf 67590 69166 69162\nf 67591 69159 69163\nf 67591 69163 67597\nf 67592 67598 69168\nf 67592 69168 69164\nf 67593 69161 69165\nf 67593 69165 67599\nf 67594 67595 67596\nf 67595 67600 67596\nf 67596 67600 69166\nf 67597 69163 69167\nf 67597 69167 67601\nf 67598 67602 69172\nf 67598 69172 69168\nf 67599 69165 69169\nf 67599 69169 67603\nf 67600 67604 69174\nf 67600 69170 69166\nf 67600 69174 69170\nf 67601 69167 69171\nf 67601 69171 67605\nf 67602 67606 69176\nf 67602 69176 69172\nf 67603 69169 69173\nf 67603 69173 67607\nf 67604 67608 69178\nf 67604 69178 69174\nf 67605 69171 69175\nf 67605 69175 67609\nf 67606 67610 69180\nf 67606 69180 69176\nf 67607 69173 69177\nf 67607 69177 67611\nf 67608 67612 69182\nf 67608 69182 69178\nf 67609 69175 69179\nf 67609 69179 67613\nf 67610 67614 69185\nf 67610 69185 69180\nf 67611 69177 69181\nf 67611 69181 67615\nf 67612 67617 69187\nf 67612 69187 69182\nf 67613 69179 69184\nf 67613 69184 67618\nf 67614 67619 69191\nf 67614 69191 69185\nf 67615 67621 67616\nf 67615 69181 69186\nf 67615 69186 69192\nf 67615 69192 67621\nf 67616 67621 67620\nf 67617 67622 69187\nf 67618 69184 69190\nf 67618 69190 67624\nf 67619 67625 69196\nf 67619 69196 69191\nf 67620 67621 69193\nf 67620 69193 69197\nf 67620 69197 67626\nf 67621 69192 69193\nf 67622 67623 69188\nf 67622 67627 67623\nf 67622 69188 69187\nf 67623 67627 67628\nf 67623 67628 69198\nf 67623 69194 69188\nf 67623 69198 69194\nf 67624 69190 69195\nf 67624 69195 67629\nf 67625 67630 69200\nf 67625 69200 69196\nf 67626 69197 67631\nf 67627 67632 67628\nf 67628 67632 67633\nf 67628 67633 69202\nf 67628 69202 69198\nf 67629 69195 69199\nf 67629 69199 67634\nf 67630 67636 69204\nf 67630 69204 69200\nf 67631 69197 69201\nf 67631 69201 67637\nf 67632 67638 67633\nf 67633 67638 67639\nf 67633 67639 69206\nf 67633 69206 69202\nf 67634 67641 67635\nf 67634 69199 69203\nf 67634 69203 69207\nf 67634 69207 67641\nf 67635 67641 67640\nf 67636 67642 69208\nf 67636 69208 69204\nf 67637 69201 69205\nf 67637 69205 67643\nf 67638 67644 67639\nf 67639 67644 67645\nf 67639 67645 69210\nf 67639 69210 69206\nf 67640 67641 67647\nf 67640 67647 67646\nf 67641 69207 67647\nf 67642 67648 69212\nf 67642 69212 69208\nf 67643 69205 69209\nf 67643 69209 67649\nf 67644 67650 67645\nf 67645 67650 67651\nf 67645 67651 69214\nf 67645 69214 69210\nf 67646 67647 67653\nf 67646 67653 67652\nf 67647 69207 69211\nf 67647 69211 67653\nf 67648 67654 69216\nf 67648 69216 69212\nf 67649 69209 69213\nf 67649 69213 67655\nf 67650 67656 67651\nf 67651 67656 67657\nf 67651 67657 69218\nf 67651 69218 69214\nf 67652 67653 67659\nf 67652 67659 67658\nf 67653 69211 69215\nf 67653 69215 67659\nf 67654 67660 69220\nf 67654 69220 69216\nf 67655 69213 69217\nf 67655 69217 67662\nf 67656 67663 67657\nf 67657 67663 67664\nf 67657 67664 69222\nf 67657 69222 69218\nf 67658 67659 67666\nf 67658 67666 67665\nf 67659 69215 69219\nf 67659 69219 67666\nf 67660 67661 69225\nf 67660 69225 69220\nf 67661 67667 67668\nf 67661 67668 69225\nf 67662 69217 69221\nf 67662 69221 67669\nf 67663 67670 67664\nf 67664 67670 67671\nf 67664 67671 69227\nf 67664 69227 69222\nf 67665 67666 67673\nf 67665 67673 67672\nf 67666 69219 69223\nf 67666 69223 67673\nf 67667 67674 67668\nf 67668 67674 67675\nf 67668 67675 69230\nf 67668 69230 69225\nf 67669 69221 69226\nf 67669 69226 67676\nf 67670 67677 67671\nf 67671 67677 67678\nf 67671 67678 69232\nf 67671 69232 69227\nf 67672 67673 67680\nf 67672 67680 67679\nf 67673 69223 69228\nf 67673 69228 67680\nf 67674 67681 67675\nf 67675 67681 67682\nf 67675 67682 69237\nf 67675 69237 69230\nf 67676 69226 69231\nf 67676 69231 67683\nf 67677 67684 67678\nf 67678 67684 67686\nf 67678 67686 67687\nf 67678 67687 69233\nf 67678 69233 69232\nf 67679 67680 67693\nf 67679 67693 67692\nf 67680 67691 67693\nf 67680 69228 69234\nf 67680 69234 67691\nf 67681 67694 67682\nf 67682 67694 67695\nf 67682 67695 69251\nf 67682 69251 69237\nf 67683 69231 69238\nf 67683 69238 67696\nf 67684 67685 67686\nf 67685 67697 67686\nf 67686 67697 67699\nf 67686 67699 67687\nf 67687 67699 67701\nf 67687 67701 69240\nf 67687 69239 69233\nf 67687 69240 69239\nf 67688 67689 69244\nf 67688 69244 69269\nf 67688 69269 67719\nf 67689 67690 69245\nf 67689 69245 69244\nf 67690 67721 69247\nf 67690 69246 69245\nf 67690 69247 69246\nf 67691 67735 67736\nf 67691 67736 67739\nf 67691 67739 67693\nf 67691 69234 69235\nf 67691 69235 69248\nf 67691 69248 67735\nf 67692 67693 67739\nf 67692 67739 67737\nf 67694 67740 67695\nf 67695 67740 67741\nf 67695 67741 69313\nf 67695 69313 69251\nf 67696 69238 69252\nf 67696 69252 67742\nf 67697 67698 67699\nf 67698 67700 67699\nf 67699 67700 67701\nf 67700 67702 67701\nf 67701 67702 67703\nf 67701 67703 69242\nf 67701 69242 69240\nf 67702 67704 67703\nf 67703 67704 67705\nf 67703 67705 69243\nf 67703 69243 69242\nf 67704 67743 67745\nf 67704 67745 69254\nf 67704 69254 67705\nf 67705 69253 69243\nf 67705 69254 69253\nf 67706 67707 69257\nf 67706 67748 67746\nf 67706 69256 67748\nf 67706 69257 69256\nf 67707 67708 69258\nf 67707 69258 69257\nf 67708 67709 69259\nf 67708 69259 69258\nf 67709 67710 69260\nf 67709 69260 69259\nf 67710 67749 69261\nf 67710 69261 69260\nf 67711 67712 69262\nf 67711 67758 67756\nf 67711 69262 69323\nf 67711 69323 67758\nf 67712 67713 69262\nf 67713 67714 69263\nf 67713 69263 69262\nf 67714 67715 69264\nf 67714 69264 69263\nf 67715 67716 69265\nf 67715 69265 69264\nf 67716 67717 69266\nf 67716 69266 69265\nf 67717 67718 69267\nf 67717 69267 69266\nf 67718 67720 69268\nf 67718 69268 69267\nf 67719 69269 67720\nf 67720 69269 69270\nf 67720 69270 69268\nf 67721 67722 67723\nf 67721 67723 69247\nf 67722 67724 69272\nf 67722 69272 67723\nf 67723 69271 69247\nf 67723 69272 69271\nf 67724 67725 69272\nf 67725 67726 69274\nf 67725 69274 69272\nf 67726 67727 69275\nf 67726 69275 69274\nf 67727 67728 69276\nf 67727 69276 69275\nf 67728 67729 69277\nf 67728 69277 69276\nf 67729 67759 69279\nf 67729 69278 69277\nf 67729 69279 69278\nf 67730 67731 69292\nf 67730 67794 67792\nf 67730 69291 67794\nf 67730 69292 69291\nf 67731 67732 69293\nf 67731 69293 69292\nf 67732 67733 69294\nf 67732 69294 69293\nf 67733 67734 69295\nf 67733 69295 69294\nf 67734 67795 69297\nf 67734 69296 69295\nf 67734 69297 69296\nf 67735 67818 67820\nf 67735 67820 67823\nf 67735 67823 67736\nf 67735 69248 69249\nf 67735 69249 69310\nf 67735 69310 67818\nf 67736 67823 67739\nf 67737 67739 67738\nf 67738 67739 67823\nf 67738 67823 67821\nf 67740 67824 67741\nf 67741 67824 67825\nf 67741 67825 69344\nf 67741 69344 69313\nf 67742 69252 69314\nf 67742 69314 67826\nf 67743 67744 67745\nf 67744 67747 67745\nf 67745 67747 67748\nf 67745 67748 69256\nf 67745 69256 69254\nf 67746 67748 67747\nf 67749 67750 69316\nf 67749 69315 69261\nf 67749 69316 69315\nf 67750 67751 69316\nf 67751 67752 69317\nf 67751 69317 69316\nf 67752 67753 69318\nf 67752 69318 69317\nf 67753 67754 69319\nf 67753 69319 69318\nf 67754 67755 69320\nf 67754 69320 69319\nf 67755 67757 69321\nf 67755 69321 69320\nf 67756 67758 67757\nf 67757 67758 69324\nf 67757 69322 69321\nf 67757 69324 69322\nf 67758 69323 69324\nf 67759 67760 67761\nf 67759 67761 69279\nf 67760 67762 67761\nf 67761 67762 67763\nf 67761 67763 69280\nf 67761 69280 69279\nf 67762 67764 69327\nf 67762 69327 67763\nf 67763 69326 69280\nf 67763 69327 69326\nf 67764 67765 69327\nf 67765 67766 69329\nf 67765 69329 69327\nf 67766 67767 69331\nf 67766 69331 69329\nf 67767 67768 69333\nf 67767 69333 69331\nf 67768 67769 69335\nf 67768 69335 69333\nf 67769 67770 69337\nf 67769 69337 69335\nf 67770 67771 69339\nf 67770 69339 69337\nf 67771 67772 69342\nf 67771 69342 69339\nf 67772 67773 69341\nf 67772 67774 67773\nf 67772 69341 69342\nf 67773 67774 67775\nf 67773 67775 69282\nf 67773 69281 69341\nf 67773 69282 69281\nf 67774 67776 67775\nf 67775 67776 67777\nf 67775 67777 69283\nf 67775 69283 69282\nf 67776 67778 67777\nf 67777 67778 67779\nf 67777 67779 69284\nf 67777 69284 69283\nf 67778 67780 67779\nf 67779 67780 67781\nf 67779 67781 69285\nf 67779 69285 69284\nf 67780 67782 67781\nf 67781 67782 67783\nf 67781 67783 69286\nf 67781 69286 69285\nf 67782 67784 67783\nf 67783 67784 67785\nf 67783 67785 69287\nf 67783 69287 69286\nf 67784 67786 67785\nf 67785 67786 67787\nf 67785 67787 69288\nf 67785 69288 69287\nf 67786 67788 67787\nf 67787 67788 67789\nf 67787 67789 69289\nf 67787 69289 69288\nf 67788 67790 67789\nf 67789 67790 67791\nf 67789 67791 69290\nf 67789 69290 69289\nf 67790 67793 67791\nf 67791 67793 67794\nf 67791 67794 69291\nf 67791 69291 69290\nf 67792 67794 67793\nf 67795 67796 67797\nf 67795 67797 69297\nf 67796 67798 67797\nf 67797 67798 67799\nf 67797 67799 69298\nf 67797 69298 69297\nf 67798 67800 67799\nf 67799 67800 67801\nf 67799 67801 69299\nf 67799 69299 69298\nf 67800 67802 67801\nf 67801 67802 67803\nf 67801 67803 69300\nf 67801 69300 69299\nf 67802 67804 67803\nf 67803 67804 67805\nf 67803 67805 69301\nf 67803 69301 69300\nf 67804 67806 67805\nf 67805 67806 67807\nf 67805 67807 69302\nf 67805 69302 69301\nf 67806 67808 67807\nf 67807 67808 67809\nf 67807 67809 69303\nf 67807 69303 69302\nf 67808 67810 67809\nf 67809 67810 67811\nf 67809 67811 69304\nf 67809 69304 69303\nf 67810 67812 67811\nf 67811 67812 67813\nf 67811 67813 69305\nf 67811 69305 69304\nf 67812 67814 67813\nf 67813 67814 67815\nf 67813 67815 69306\nf 67813 69306 69305\nf 67814 67827 67815\nf 67815 67816 69307\nf 67815 67827 67829\nf 67815 67829 67816\nf 67815 69307 69306\nf 67816 67817 69308\nf 67816 67829 67831\nf 67816 67831 67817\nf 67816 69308 69307\nf 67817 67818 69311\nf 67817 67831 67834\nf 67817 67834 67818\nf 67817 69311 69308\nf 67818 67834 67820\nf 67818 69310 69311\nf 67819 67820 67834\nf 67819 67822 67820\nf 67819 67834 67832\nf 67820 67822 67823\nf 67821 67823 67822\nf 67824 67835 67825\nf 67825 67835 67836\nf 67825 67836 69346\nf 67825 69346 69344\nf 67826 69314 69345\nf 67826 69345 67837\nf 67827 67828 67829\nf 67828 67830 67829\nf 67829 67830 67831\nf 67830 67833 67831\nf 67831 67833 67834\nf 67832 67834 67833\nf 67835 67838 67836\nf 67836 67838 67839\nf 67836 67839 69348\nf 67836 69348 69346\nf 67837 69345 69347\nf 67837 69347 67840\nf 67838 67841 67839\nf 67839 67841 67842\nf 67839 67842 69350\nf 67839 69350 69348\nf 67840 69347 69349\nf 67840 69349 67843\nf 67841 67844 67842\nf 67842 67844 67845\nf 67842 67845 69352\nf 67842 69352 69350\nf 67843 69349 69351\nf 67843 69351 67846\nf 67844 67847 67845\nf 67845 67847 67848\nf 67845 67848 69354\nf 67845 69354 69352\nf 67846 69351 69353\nf 67846 69353 67849\nf 67847 67853 67848\nf 67848 67853 67854\nf 67848 67854 69356\nf 67848 69356 69354\nf 67849 69353 69355\nf 67849 69355 67855\nf 67850 67862 67864\nf 67850 67864 67865\nf 67850 67865 67851\nf 67851 67865 67867\nf 67851 67867 67852\nf 67852 67867 67866\nf 67853 67877 67854\nf 67854 67877 67878\nf 67854 67878 69364\nf 67854 69364 69356\nf 67855 69355 69357\nf 67855 69357 67879\nf 67856 67881 67883\nf 67856 67883 67884\nf 67856 67884 67857\nf 67857 67884 67885\nf 67857 67885 67858\nf 67858 67885 67886\nf 67858 67886 67859\nf 67859 67886 67887\nf 67859 67887 67860\nf 67860 67887 67888\nf 67860 67888 67861\nf 67861 67888 69368\nf 67861 69358 67863\nf 67861 69368 69358\nf 67862 67863 67864\nf 67863 69358 69359\nf 67863 69359 67864\nf 67864 69359 67865\nf 67865 69359 69360\nf 67865 69360 67867\nf 67866 67867 69361\nf 67866 69361 67868\nf 67867 69360 69361\nf 67868 69361 69362\nf 67868 69362 69363\nf 67868 69363 67869\nf 67869 69363 67870\nf 67870 67889 67891\nf 67870 67891 67871\nf 67870 69363 67889\nf 67871 67891 67890\nf 67872 67901 67903\nf 67872 67903 67904\nf 67872 67904 67873\nf 67873 67904 67905\nf 67873 67905 67874\nf 67874 67905 67906\nf 67874 67906 67875\nf 67875 67906 67908\nf 67875 67908 67876\nf 67876 67908 67907\nf 67877 67913 67878\nf 67878 67913 67914\nf 67878 67914 69385\nf 67878 69385 69364\nf 67879 69357 69365\nf 67879 69365 67915\nf 67880 67917 67919\nf 67880 67919 67920\nf 67880 67920 67882\nf 67881 67882 67883\nf 67882 67920 67883\nf 67883 67920 67921\nf 67883 67921 67922\nf 67883 67922 67884\nf 67884 67922 67923\nf 67884 67923 67885\nf 67885 67923 67886\nf 67886 67923 69390\nf 67886 69366 67887\nf 67886 69390 69366\nf 67887 69366 69367\nf 67887 69367 67888\nf 67888 69367 69369\nf 67888 69369 69368\nf 67889 69363 69372\nf 67889 69372 69374\nf 67889 69374 67891\nf 67890 67891 69375\nf 67890 69375 67892\nf 67891 69374 69375\nf 67892 69375 69376\nf 67892 69376 69377\nf 67892 69377 67893\nf 67893 69377 67894\nf 67894 67924 67926\nf 67894 67926 67895\nf 67894 69377 67924\nf 67895 67926 67925\nf 67896 67945 67947\nf 67896 67947 67948\nf 67896 67948 67897\nf 67897 67948 67949\nf 67897 67949 67898\nf 67898 67949 69414\nf 67898 69378 67899\nf 67898 69414 69378\nf 67899 69378 69379\nf 67899 69379 67900\nf 67900 69379 69380\nf 67900 69380 67902\nf 67901 67902 67903\nf 67902 69380 69381\nf 67902 69381 67903\nf 67903 69381 67904\nf 67904 69381 69382\nf 67904 69382 67905\nf 67905 69382 69383\nf 67905 69383 67906\nf 67906 67950 67908\nf 67906 69383 69384\nf 67906 69384 67950\nf 67907 67908 67951\nf 67907 67951 67909\nf 67908 67950 67951\nf 67909 67951 67952\nf 67909 67952 67910\nf 67910 67952 67953\nf 67910 67953 67911\nf 67911 67953 67955\nf 67911 67955 67912\nf 67912 67955 67954\nf 67913 67957 67914\nf 67914 67957 67959\nf 67914 67959 69421\nf 67914 69421 69385\nf 67915 69365 69386\nf 67915 69386 67960\nf 67916 67961 67963\nf 67916 67963 67964\nf 67916 67964 67918\nf 67917 67918 67919\nf 67918 67964 67919\nf 67919 67964 67965\nf 67919 67965 67920\nf 67920 67965 69424\nf 67920 69387 67921\nf 67920 69424 69387\nf 67921 69387 69388\nf 67921 69388 67922\nf 67922 69388 69389\nf 67922 69389 67923\nf 67923 69389 69391\nf 67923 69391 69390\nf 67924 69377 69394\nf 67924 69394 69396\nf 67924 69396 67926\nf 67925 67926 69397\nf 67925 69397 67927\nf 67926 69396 69397\nf 67927 69397 69398\nf 67927 69398 69399\nf 67927 69399 67928\nf 67928 69399 69400\nf 67928 69400 67929\nf 67929 69400 67930\nf 67930 67967 67966\nf 67930 69400 67967\nf 67931 67987 67989\nf 67931 67989 67990\nf 67931 67990 67932\nf 67932 67990 67991\nf 67932 67991 67933\nf 67933 67991 67992\nf 67933 67992 67934\nf 67934 67992 69454\nf 67934 69401 67935\nf 67934 69454 69401\nf 67935 69401 69402\nf 67935 69402 67936\nf 67936 69402 69403\nf 67936 69403 67937\nf 67937 69403 69404\nf 67937 69404 67938\nf 67938 69404 69405\nf 67938 69405 67939\nf 67939 69405 69406\nf 67939 69406 67940\nf 67940 69406 69407\nf 67940 69407 67941\nf 67941 69407 69408\nf 67941 69408 67942\nf 67942 69408 69409\nf 67942 69409 67943\nf 67943 69409 69410\nf 67943 69410 67944\nf 67944 69410 69411\nf 67944 69411 67946\nf 67945 67946 67947\nf 67946 69411 69412\nf 67946 69412 67947\nf 67947 69412 67948\nf 67948 69412 69413\nf 67948 69413 67949\nf 67949 69413 69415\nf 67949 69415 69414\nf 67950 69384 69416\nf 67950 69416 69417\nf 67950 69417 67951\nf 67951 69417 69418\nf 67951 69418 67952\nf 67952 69418 69419\nf 67952 69419 67953\nf 67953 67993 67955\nf 67953 69419 69420\nf 67953 69420 67993\nf 67954 67955 67995\nf 67954 67995 67956\nf 67955 67993 67995\nf 67956 67995 67994\nf 67957 67958 67959\nf 67958 67997 67959\nf 67959 67997 69421\nf 67960 69386 69422\nf 67960 69422 67999\nf 67961 67962 67963\nf 67962 68000 68001\nf 67962 68001 67963\nf 67963 68001 68002\nf 67963 68002 67964\nf 67964 68002 69461\nf 67964 69423 67965\nf 67964 69461 69423\nf 67965 69423 69425\nf 67965 69425 69424\nf 67966 67967 69428\nf 67966 69428 67968\nf 67967 69400 69426\nf 67967 69426 69428\nf 67968 69428 69429\nf 67968 69429 69430\nf 67968 69430 67969\nf 67969 69430 69431\nf 67969 69431 67970\nf 67970 69431 69432\nf 67970 69432 67971\nf 67971 69432 69433\nf 67971 69433 67972\nf 67972 69433 69434\nf 67972 69434 67973\nf 67973 69434 69435\nf 67973 69435 67974\nf 67974 69435 69436\nf 67974 69436 67975\nf 67975 69436 69437\nf 67975 69437 67976\nf 67976 69437 69438\nf 67976 69438 67977\nf 67977 69438 69439\nf 67977 69439 67978\nf 67978 69439 69440\nf 67978 69440 67979\nf 67979 69440 69441\nf 67979 69441 67980\nf 67980 69441 69442\nf 67980 69442 67981\nf 67981 69442 69443\nf 67981 69443 67982\nf 67982 69443 69444\nf 67982 69444 67983\nf 67983 69444 69445\nf 67983 69445 67984\nf 67984 69445 69446\nf 67984 69446 67985\nf 67985 69446 69447\nf 67985 69447 67986\nf 67986 69447 69448\nf 67986 69448 67988\nf 67987 67988 67989\nf 67988 69448 69449\nf 67988 69449 67989\nf 67989 69449 67990\nf 67990 69449 69450\nf 67990 69450 67991\nf 67991 69450 69452\nf 67991 69452 67992\nf 67992 69452 69455\nf 67992 69455 69454\nf 67993 68003 67995\nf 67993 69420 69457\nf 67993 69457 69458\nf 67993 69458 68003\nf 67994 67995 68005\nf 67994 68005 67996\nf 67995 68003 68005\nf 67996 68005 68004\nf 67997 67998 69465\nf 67997 69459 69421\nf 67997 69465 69459\nf 67998 68006 68007\nf 67998 68007 69465\nf 67999 69422 69460\nf 67999 69460 68008\nf 68000 68009 68001\nf 68001 68009 68010\nf 68001 68010 68011\nf 68001 68011 68002\nf 68002 68011 69467\nf 68002 69467 69461\nf 68003 68013 68005\nf 68003 69458 69463\nf 68003 69463 69464\nf 68003 69464 68013\nf 68004 68005 68013\nf 68004 68013 68012\nf 68006 68014 68007\nf 68007 68014 68016\nf 68007 68016 69470\nf 68007 69470 69465\nf 68008 69460 69466\nf 68008 69466 68017\nf 68009 68018 68010\nf 68010 68018 68020\nf 68010 68020 68021\nf 68010 68021 68011\nf 68011 68021 69472\nf 68011 69472 69467\nf 68012 68013 69469\nf 68012 69469 69473\nf 68012 69473 68022\nf 68013 69464 69468\nf 68013 69468 69469\nf 68014 68015 68016\nf 68015 68023 68016\nf 68016 68023 69470\nf 68017 69466 69471\nf 68017 69471 68024\nf 68018 68019 68020\nf 68019 68025 68020\nf 68020 68025 68026\nf 68020 68026 68021\nf 68021 68026 69477\nf 68021 69477 69472\nf 68022 69473 68027\nf 68023 68029 69480\nf 68023 69475 69470\nf 68023 69480 69475\nf 68024 69471 69476\nf 68024 69476 68030\nf 68025 68031 69482\nf 68025 69482 68026\nf 68026 69478 69477\nf 68026 69482 69478\nf 68027 68033 68028\nf 68027 69473 69479\nf 68027 69479 69484\nf 68027 69484 68033\nf 68028 68033 68032\nf 68029 68034 69485\nf 68029 69485 69480\nf 68030 69476 69481\nf 68030 69481 68035\nf 68031 68036 69487\nf 68031 69487 69482\nf 68032 68033 68038\nf 68032 68038 68037\nf 68033 69484 68038\nf 68034 68039 69490\nf 68034 69490 69485\nf 68035 69481 69486\nf 68035 69486 68040\nf 68036 68041 69492\nf 68036 69492 69487\nf 68037 68038 69489\nf 68037 69489 69493\nf 68037 69493 68042\nf 68038 69484 69488\nf 68038 69488 69489\nf 68039 68043 69495\nf 68039 69495 69490\nf 68040 69486 69491\nf 68040 69491 68044\nf 68041 68045 69497\nf 68041 69497 69492\nf 68042 69493 68046\nf 68043 68047 69500\nf 68043 69500 69495\nf 68044 69491 69496\nf 68044 69496 68048\nf 68045 68049 69502\nf 68045 69502 69497\nf 68046 69493 69498\nf 68046 69498 68050\nf 68047 68051 69505\nf 68047 69505 69500\nf 68048 69496 69501\nf 68048 69501 68052\nf 68049 68054 69507\nf 68049 69507 69502\nf 68050 69498 69503\nf 68050 69503 68055\nf 68051 68056 69511\nf 68051 69511 69505\nf 68052 68058 68053\nf 68052 69501 69506\nf 68052 69506 69512\nf 68052 69512 68058\nf 68053 68058 68057\nf 68054 68059 69514\nf 68054 69514 69507\nf 68055 69503 69508\nf 68055 69508 68060\nf 68056 68062 69516\nf 68056 69516 69511\nf 68057 68058 69513\nf 68057 69513 69517\nf 68057 69517 68063\nf 68058 69512 69513\nf 68059 68064 69518\nf 68059 69518 69514\nf 68060 68061 68066\nf 68060 68066 68065\nf 68060 69508 68061\nf 68061 69508 69509\nf 68061 69509 69515\nf 68061 69515 68066\nf 68062 68067 69520\nf 68062 69520 69516\nf 68063 69517 68068\nf 68064 68069 69522\nf 68064 69522 69518\nf 68065 68066 68071\nf 68065 68071 68070\nf 68066 69515 69519\nf 68066 69519 68071\nf 68067 68072 69524\nf 68067 69524 69520\nf 68068 69517 69521\nf 68068 69521 68073\nf 68069 68074 69526\nf 68069 69526 69522\nf 68070 68071 68076\nf 68070 68076 68075\nf 68071 69519 69523\nf 68071 69523 68076\nf 68072 68077 69528\nf 68072 69528 69524\nf 68073 69521 69525\nf 68073 69525 68078\nf 68074 68079 69530\nf 68074 69530 69526\nf 68075 68076 68081\nf 68075 68081 68080\nf 68076 69523 69527\nf 68076 69527 68081\nf 68077 68082 69532\nf 68077 69532 69528\nf 68078 69525 69529\nf 68078 69529 68083\nf 68079 68084 69534\nf 68079 69534 69530\nf 68080 68081 68086\nf 68080 68086 68085\nf 68081 69527 69531\nf 68081 69531 68086\nf 68082 68087 69536\nf 68082 69536 69532\nf 68083 69529 69533\nf 68083 69533 68088\nf 68084 68089 69538\nf 68084 69538 69534\nf 68085 68086 68092\nf 68085 68092 68090\nf 68086 69531 69535\nf 68086 69535 68092\nf 68087 68093 69540\nf 68087 69540 69536\nf 68088 69533 69537\nf 68088 69537 68094\nf 68089 68095 69542\nf 68089 69542 69538\nf 68090 68092 68091\nf 68091 68092 69539\nf 68091 69539 68096\nf 68092 69535 69539\nf 68093 68097 69544\nf 68093 69544 69540\nf 68094 69537 69541\nf 68094 69541 68098\nf 68095 68099 69546\nf 68095 69546 69542\nf 68096 69539 69543\nf 68096 69543 68100\nf 68097 68102 69548\nf 68097 69548 69544\nf 68098 69541 69545\nf 68098 69545 68103\nf 68099 68104 69550\nf 68099 69550 69546\nf 68100 68106 68101\nf 68100 69543 69547\nf 68100 69547 69551\nf 68100 69551 68106\nf 68101 68106 68105\nf 68102 68107 69552\nf 68102 69552 69548\nf 68103 69545 69549\nf 68103 69549 68108\nf 68104 68110 69554\nf 68104 69554 69550\nf 68105 68106 68112\nf 68105 68112 68111\nf 68106 69551 68112\nf 68107 68113 69557\nf 68107 69557 69552\nf 68108 68115 68109\nf 68108 69549 69553\nf 68108 69553 69558\nf 68108 69558 68115\nf 68109 68115 68114\nf 68110 68116 69559\nf 68110 69559 69554\nf 68111 68112 69556\nf 68111 69556 69560\nf 68111 69560 68117\nf 68112 69551 69555\nf 68112 69555 69556\nf 68113 68118 69562\nf 68113 69562 69557\nf 68114 68115 68120\nf 68114 68120 68119\nf 68115 69558 68120\nf 68116 68121 69564\nf 68116 69564 69559\nf 68117 69560 68122\nf 68118 68123 69566\nf 68118 69566 69562\nf 68119 68120 68125\nf 68119 68125 68124\nf 68120 69558 69563\nf 68120 69563 68125\nf 68121 68126 69568\nf 68121 69568 69564\nf 68122 69560 69565\nf 68122 69565 68127\nf 68123 68128 69570\nf 68123 69570 69566\nf 68124 68125 68130\nf 68124 68130 68129\nf 68125 69563 69567\nf 68125 69567 68130\nf 68126 68131 69573\nf 68126 69573 69568\nf 68127 69565 69569\nf 68127 69569 68132\nf 68128 68133 69575\nf 68128 69575 69570\nf 68129 68130 69572\nf 68129 69572 69576\nf 68129 69576 68134\nf 68130 69567 69571\nf 68130 69571 69572\nf 68131 68135 69577\nf 68131 69577 69573\nf 68132 69569 69574\nf 68132 69574 68136\nf 68133 68137 69579\nf 68133 69579 69575\nf 68134 69576 68138\nf 68135 68139 69581\nf 68135 69581 69577\nf 68136 69574 69578\nf 68136 69578 68140\nf 68137 68141 69583\nf 68137 69583 69579\nf 68138 69576 69580\nf 68138 69580 68142\nf 68139 68143 69585\nf 68139 69585 69581\nf 68140 69578 69582\nf 68140 69582 68144\nf 68141 68145 69587\nf 68141 69587 69583\nf 68142 69580 69584\nf 68142 69584 68146\nf 68143 68147 69589\nf 68143 69589 69585\nf 68144 69582 69586\nf 68144 69586 68148\nf 68145 68149 69591\nf 68145 69591 69587\nf 68146 69584 69588\nf 68146 69588 68150\nf 68147 68151 69593\nf 68147 69593 69589\nf 68148 69586 69590\nf 68148 69590 68152\nf 68149 68153 69595\nf 68149 69595 69591\nf 68150 69588 69592\nf 68150 69592 68154\nf 68151 68155 69597\nf 68151 69597 69593\nf 68152 69590 69594\nf 68152 69594 68156\nf 68153 68157 69599\nf 68153 69599 69595\nf 68154 69592 69596\nf 68154 69596 68158\nf 68155 68159 69601\nf 68155 69601 69597\nf 68156 69594 69598\nf 68156 69598 68160\nf 68157 68161 69603\nf 68157 69603 69599\nf 68158 69596 69600\nf 68158 69600 68162\nf 68159 68163 69605\nf 68159 69605 69601\nf 68160 69598 69602\nf 68160 69602 68164\nf 68161 68165 69607\nf 68161 69607 69603\nf 68162 69600 69604\nf 68162 69604 68166\nf 68163 68167 69609\nf 68163 69609 69605\nf 68164 69602 69606\nf 68164 69606 68168\nf 68165 68169 69611\nf 68165 69611 69607\nf 68166 69604 69608\nf 68166 69608 68170\nf 68167 68171 69613\nf 68167 69613 69609\nf 68168 69606 69610\nf 68168 69610 68172\nf 68169 68173 69615\nf 68169 69615 69611\nf 68170 69608 69612\nf 68170 69612 68174\nf 68171 68175 69617\nf 68171 69617 69613\nf 68172 69610 69614\nf 68172 69614 68176\nf 68173 68177 69619\nf 68173 69619 69615\nf 68174 69612 69616\nf 68174 69616 68178\nf 68175 68179 69621\nf 68175 69621 69617\nf 68176 69614 69618\nf 68176 69618 68180\nf 68177 68181 69623\nf 68177 69623 69619\nf 68178 69616 69620\nf 68178 69620 68182\nf 68179 68183 69625\nf 68179 69625 69621\nf 68180 69618 69622\nf 68180 69622 68184\nf 68181 68185 69627\nf 68181 69627 69623\nf 68182 69620 69624\nf 68182 69624 68186\nf 68183 68188 69629\nf 68183 69629 69625\nf 68184 69622 69626\nf 68184 69626 68189\nf 68185 68190 69631\nf 68185 69631 69627\nf 68186 68192 68187\nf 68186 69624 69628\nf 68186 69628 69632\nf 68186 69632 68192\nf 68187 68192 68191\nf 68188 68193 69633\nf 68188 69633 69629\nf 68189 69626 69630\nf 68189 69630 68194\nf 68190 68195 69635\nf 68190 69635 69631\nf 68191 68192 68197\nf 68191 68197 68196\nf 68192 69632 68197\nf 68193 68198 69637\nf 68193 69637 69633\nf 68194 69630 69634\nf 68194 69634 68199\nf 68195 68200 69639\nf 68195 69639 69635\nf 68196 68197 68203\nf 68196 68203 68202\nf 68197 69632 69636\nf 68197 69636 68203\nf 68198 68204 69642\nf 68198 69642 69637\nf 68199 69634 69638\nf 68199 69638 68205\nf 68200 68201 69644\nf 68200 69644 69639\nf 68201 68206 68207\nf 68201 68207 69644\nf 68202 68203 69641\nf 68202 69641 69646\nf 68202 69646 68208\nf 68203 69636 69640\nf 68203 69640 69641\nf 68204 68209 69648\nf 68204 69648 69642\nf 68205 69638 69643\nf 68205 69643 68210\nf 68206 68211 69650\nf 68206 69650 68207\nf 68207 69645 69644\nf 68207 69650 69645\nf 68208 69646 68212\nf 68209 68213 69653\nf 68209 69653 69648\nf 68210 69643 69649\nf 68210 69649 68214\nf 68211 68215 69655\nf 68211 69655 69650\nf 68212 69646 69651\nf 68212 69651 68216\nf 68213 68217 69658\nf 68213 69658 69653\nf 68214 69649 69654\nf 68214 69654 68219\nf 68215 68220 69663\nf 68215 69663 69655\nf 68216 69651 69656\nf 68216 69656 68221\nf 68217 68218 69665\nf 68217 69665 69658\nf 68218 68222 68223\nf 68218 68223 69665\nf 68219 69654 69660\nf 68219 69660 68224\nf 68220 68226 69669\nf 68220 69669 69663\nf 68221 69656 69664\nf 68221 69664 68227\nf 68222 68228 68223\nf 68223 68228 68229\nf 68223 68229 68230\nf 68223 68230 69666\nf 68223 69666 69665\nf 68224 68225 68232\nf 68224 68232 68231\nf 68224 69660 68225\nf 68225 69660 69661\nf 68225 69661 69668\nf 68225 69668 68232\nf 68226 68233 69673\nf 68226 69673 69669\nf 68227 69664 69670\nf 68227 69670 68234\nf 68228 68235 68229\nf 68229 68235 68236\nf 68229 68236 68237\nf 68229 68237 68230\nf 68230 68237 69675\nf 68230 69671 69666\nf 68230 69675 69671\nf 68231 68232 68239\nf 68231 68239 68238\nf 68232 69668 69672\nf 68232 69672 68239\nf 68233 68240 69678\nf 68233 69678 69673\nf 68234 69670 69674\nf 68234 69674 68242\nf 68235 68243 68236\nf 68236 68243 68244\nf 68236 68244 68245\nf 68236 68245 68237\nf 68237 68245 69681\nf 68237 69681 69675\nf 68238 68239 68249\nf 68238 68249 68247\nf 68239 68246 68249\nf 68239 69672 69676\nf 68239 69676 68246\nf 68240 68241 69679\nf 68240 69679 69678\nf 68241 68250 69679\nf 68242 69674 69680\nf 68242 69680 68251\nf 68243 68252 68244\nf 68244 68252 68254\nf 68244 68254 68255\nf 68244 68255 68245\nf 68245 68255 68256\nf 68245 68256 69682\nf 68245 69682 69681\nf 68246 68258 68249\nf 68246 69676 69677\nf 68246 69677 69684\nf 68246 69684 68258\nf 68247 68249 68248\nf 68248 68249 68258\nf 68248 68258 68257\nf 68250 68259 69695\nf 68250 69685 69679\nf 68250 69695 69685\nf 68251 69680 69686\nf 68251 69686 68260\nf 68252 68253 68254\nf 68253 68261 68254\nf 68254 68261 68262\nf 68254 68262 68255\nf 68255 68262 68263\nf 68255 68263 68256\nf 68256 68263 68264\nf 68256 68264 69689\nf 68256 69688 69682\nf 68256 69689 69688\nf 68257 68258 68269\nf 68257 68269 68268\nf 68258 68267 68269\nf 68258 69684 69693\nf 68258 69693 68267\nf 68259 68270 69764\nf 68259 69764 69695\nf 68260 69686 69696\nf 68260 69696 68271\nf 68261 68272 68262\nf 68262 68272 68274\nf 68262 68274 68275\nf 68262 68275 68263\nf 68263 68275 68276\nf 68263 68276 68264\nf 68264 68265 69691\nf 68264 68276 68277\nf 68264 68277 68265\nf 68264 69691 69689\nf 68265 68266 69692\nf 68265 68277 68278\nf 68265 68278 68266\nf 68265 69692 69691\nf 68266 68278 68279\nf 68266 68279 69699\nf 68266 69698 69692\nf 68266 69699 69698\nf 68267 68350 68351\nf 68267 68351 68354\nf 68267 68354 68269\nf 68267 69693 69694\nf 68267 69694 69761\nf 68267 69761 68350\nf 68268 68269 68354\nf 68268 68354 68352\nf 68270 68355 69793\nf 68270 69793 69764\nf 68271 69696 69765\nf 68271 69765 68356\nf 68272 68273 68274\nf 68273 68357 68274\nf 68274 68357 68359\nf 68274 68359 68275\nf 68275 68359 68360\nf 68275 68360 68276\nf 68276 68360 68361\nf 68276 68361 68277\nf 68277 68361 68362\nf 68277 68362 68278\nf 68278 68362 68363\nf 68278 68363 68279\nf 68279 68280 69701\nf 68279 68363 68364\nf 68279 68364 68280\nf 68279 69701 69699\nf 68280 68281 69703\nf 68280 68364 68365\nf 68280 68365 68281\nf 68280 69703 69701\nf 68281 68282 69705\nf 68281 68365 68366\nf 68281 68366 68282\nf 68281 69705 69703\nf 68282 68283 69706\nf 68282 68366 68367\nf 68282 68367 68283\nf 68282 69706 69705\nf 68283 68284 69707\nf 68283 68367 68368\nf 68283 68368 68284\nf 68283 69707 69706\nf 68284 68285 69708\nf 68284 68368 68369\nf 68284 68369 68285\nf 68284 69708 69707\nf 68285 68286 69709\nf 68285 68369 68370\nf 68285 68370 68286\nf 68285 69709 69708\nf 68286 68287 69710\nf 68286 68370 68371\nf 68286 68371 68287\nf 68286 69710 69709\nf 68287 68288 69711\nf 68287 68371 68372\nf 68287 68372 68288\nf 68287 69711 69710\nf 68288 68289 69712\nf 68288 68372 68373\nf 68288 68373 68289\nf 68288 69712 69711\nf 68289 68290 69713\nf 68289 68373 68374\nf 68289 68374 68290\nf 68289 69713 69712\nf 68290 68291 69714\nf 68290 68374 68375\nf 68290 68375 68291\nf 68290 69714 69713\nf 68291 68292 69715\nf 68291 68375 68376\nf 68291 68376 68292\nf 68291 69715 69714\nf 68292 68293 69716\nf 68292 68376 68377\nf 68292 68377 68293\nf 68292 69716 69715\nf 68293 68294 69717\nf 68293 68377 68378\nf 68293 68378 68294\nf 68293 69717 69716\nf 68294 68295 69718\nf 68294 68378 68379\nf 68294 68379 68295\nf 68294 69718 69717\nf 68295 68296 69719\nf 68295 68379 68380\nf 68295 68380 68296\nf 68295 69719 69718\nf 68296 68297 69720\nf 68296 68380 68381\nf 68296 68381 68297\nf 68296 69720 69719\nf 68297 68298 69721\nf 68297 68381 68383\nf 68297 68383 68298\nf 68297 69721 69720\nf 68298 68299 69722\nf 68298 68383 68386\nf 68298 68386 68299\nf 68298 69722 69721\nf 68299 68301 69723\nf 68299 68386 68301\nf 68299 69723 69722\nf 68300 68301 68386\nf 68300 68302 68301\nf 68300 68386 68384\nf 68301 68302 68303\nf 68301 68303 69724\nf 68301 69724 69723\nf 68302 68304 68303\nf 68303 68304 68305\nf 68303 68305 69725\nf 68303 69725 69724\nf 68304 68306 68305\nf 68305 68306 68307\nf 68305 68307 69726\nf 68305 69726 69725\nf 68306 68308 68307\nf 68307 68308 68309\nf 68307 68309 69727\nf 68307 69727 69726\nf 68308 68310 68309\nf 68309 68310 68311\nf 68309 68311 69728\nf 68309 69728 69727\nf 68310 68312 68311\nf 68311 68312 68313\nf 68311 68313 69729\nf 68311 69729 69728\nf 68312 68314 68313\nf 68313 68314 68315\nf 68313 68315 69730\nf 68313 69730 69729\nf 68314 68316 68315\nf 68315 68316 68317\nf 68315 68317 69731\nf 68315 69731 69730\nf 68316 68318 68317\nf 68317 68318 68319\nf 68317 68319 69732\nf 68317 69732 69731\nf 68318 68320 68319\nf 68319 68320 68321\nf 68319 68321 69733\nf 68319 69733 69732\nf 68320 68322 68321\nf 68321 68322 68323\nf 68321 68323 69734\nf 68321 69734 69733\nf 68322 68324 68323\nf 68323 68324 68325\nf 68323 68325 69735\nf 68323 69735 69734\nf 68324 68387 68325\nf 68325 68326 69736\nf 68325 68387 68389\nf 68325 68389 68326\nf 68325 69736 69735\nf 68326 68327 69737\nf 68326 68389 68391\nf 68326 68391 68327\nf 68326 69737 69736\nf 68327 68328 69738\nf 68327 68391 68393\nf 68327 68393 68328\nf 68327 69738 69737\nf 68328 68329 69739\nf 68328 68393 68395\nf 68328 68395 68329\nf 68328 69739 69738\nf 68329 68330 69740\nf 68329 68395 68397\nf 68329 68397 68330\nf 68329 69740 69739\nf 68330 68331 69741\nf 68330 68397 68399\nf 68330 68399 68331\nf 68330 69741 69740\nf 68331 68332 69742\nf 68331 68399 68401\nf 68331 68401 68332\nf 68331 69742 69741\nf 68332 68333 69743\nf 68332 68401 68403\nf 68332 68403 68333\nf 68332 69743 69742\nf 68333 68334 69744\nf 68333 68403 68405\nf 68333 68405 68334\nf 68333 69744 69743\nf 68334 68335 69745\nf 68334 68405 68407\nf 68334 68407 68335\nf 68334 69745 69744\nf 68335 68336 69746\nf 68335 68407 68409\nf 68335 68409 68336\nf 68335 69746 69745\nf 68336 68337 69747\nf 68336 68409 68410\nf 68336 68410 68337\nf 68336 69747 69746\nf 68337 68338 69748\nf 68337 68410 68411\nf 68337 68411 68338\nf 68337 69748 69747\nf 68338 68339 69749\nf 68338 68411 68412\nf 68338 68412 68339\nf 68338 69749 69748\nf 68339 68340 69750\nf 68339 68412 68413\nf 68339 68413 68340\nf 68339 69750 69749\nf 68340 68341 69751\nf 68340 68413 68414\nf 68340 68414 68341\nf 68340 69751 69750\nf 68341 68342 69752\nf 68341 68414 68415\nf 68341 68415 68342\nf 68341 69752 69751\nf 68342 68343 69753\nf 68342 68415 68416\nf 68342 68416 68343\nf 68342 69753 69752\nf 68343 68344 69754\nf 68343 68416 68417\nf 68343 68417 68344\nf 68343 69754 69753\nf 68344 68345 69755\nf 68344 68417 68418\nf 68344 68418 68345\nf 68344 69755 69754\nf 68345 68346 69756\nf 68345 68418 68419\nf 68345 68419 68346\nf 68345 69756 69755\nf 68346 68419 68420\nf 68346 68420 69768\nf 68346 69767 69756\nf 68346 69768 69767\nf 68347 68348 69758\nf 68347 68431 68432\nf 68347 68432 68433\nf 68347 68433 68348\nf 68347 69757 69790\nf 68347 69758 69757\nf 68347 69790 68431\nf 68348 68349 69759\nf 68348 68433 68434\nf 68348 68434 68349\nf 68348 69759 69758\nf 68349 68350 69762\nf 68349 68434 68435\nf 68349 68435 68350\nf 68349 69762 69759\nf 68350 68435 68437\nf 68350 68437 68351\nf 68350 69761 69762\nf 68351 68437 68354\nf 68352 68354 68353\nf 68353 68354 68437\nf 68353 68437 68436\nf 68355 68438 69796\nf 68355 69796 69793\nf 68356 69765 69794\nf 68356 69794 68439\nf 68357 68358 68359\nf 68358 68440 68359\nf 68359 68440 68442\nf 68359 68442 68360\nf 68360 68442 68444\nf 68360 68444 68361\nf 68361 68444 68446\nf 68361 68446 68362\nf 68362 68446 68448\nf 68362 68448 68363\nf 68363 68448 68450\nf 68363 68450 68364\nf 68364 68450 68452\nf 68364 68452 68365\nf 68365 68452 68453\nf 68365 68453 68366\nf 68366 68453 68454\nf 68366 68454 68367\nf 68367 68454 68455\nf 68367 68455 68368\nf 68368 68455 68456\nf 68368 68456 68369\nf 68369 68456 68457\nf 68369 68457 68370\nf 68370 68457 68458\nf 68370 68458 68371\nf 68371 68458 68459\nf 68371 68459 68372\nf 68372 68459 68460\nf 68372 68460 68373\nf 68373 68460 68461\nf 68373 68461 68374\nf 68374 68461 68462\nf 68374 68462 68375\nf 68375 68462 68463\nf 68375 68463 68376\nf 68376 68463 68464\nf 68376 68464 68377\nf 68377 68464 68465\nf 68377 68465 68378\nf 68378 68465 68467\nf 68378 68467 68379\nf 68379 68467 68469\nf 68379 68469 68380\nf 68380 68469 68472\nf 68380 68472 68381\nf 68381 68472 68383\nf 68382 68383 68472\nf 68382 68385 68383\nf 68382 68472 68470\nf 68383 68385 68386\nf 68384 68386 68385\nf 68387 68388 68389\nf 68388 68390 68389\nf 68389 68390 68391\nf 68390 68392 68391\nf 68391 68392 68393\nf 68392 68394 68393\nf 68393 68394 68395\nf 68394 68396 68395\nf 68395 68396 68397\nf 68396 68398 68397\nf 68397 68398 68399\nf 68398 68400 68399\nf 68399 68400 68401\nf 68400 68402 68401\nf 68401 68402 68403\nf 68402 68404 68403\nf 68403 68404 68405\nf 68404 68406 68405\nf 68405 68406 68407\nf 68406 68408 68407\nf 68407 68408 68409\nf 68408 68473 68409\nf 68409 68473 68475\nf 68409 68475 68410\nf 68410 68475 68477\nf 68410 68477 68411\nf 68411 68477 68479\nf 68411 68479 68412\nf 68412 68479 68481\nf 68412 68481 68413\nf 68413 68481 68483\nf 68413 68483 68414\nf 68414 68483 68485\nf 68414 68485 68415\nf 68415 68485 68487\nf 68415 68487 68416\nf 68416 68487 68488\nf 68416 68488 68417\nf 68417 68488 68489\nf 68417 68489 68418\nf 68418 68489 68490\nf 68418 68490 68419\nf 68419 68490 68491\nf 68419 68491 68420\nf 68420 68421 69770\nf 68420 68491 68492\nf 68420 68492 68421\nf 68420 69770 69768\nf 68421 68422 69772\nf 68421 68492 68493\nf 68421 68493 68422\nf 68421 69772 69770\nf 68422 68423 69774\nf 68422 68493 68494\nf 68422 68494 68423\nf 68422 69774 69772\nf 68423 68424 69776\nf 68423 68494 68495\nf 68423 68495 68424\nf 68423 69776 69774\nf 68424 68425 69778\nf 68424 68495 68496\nf 68424 68496 68425\nf 68424 69778 69776\nf 68425 68426 69780\nf 68425 68496 68497\nf 68425 68497 68426\nf 68425 69780 69778\nf 68426 68427 69782\nf 68426 68497 68498\nf 68426 68498 68427\nf 68426 69782 69780\nf 68427 68428 69784\nf 68427 68498 68499\nf 68427 68499 68428\nf 68427 69784 69782\nf 68428 68429 69786\nf 68428 68499 68500\nf 68428 68500 68429\nf 68428 69786 69784\nf 68429 68430 69788\nf 68429 68500 68501\nf 68429 68501 68430\nf 68429 69788 69786\nf 68430 68431 69791\nf 68430 68501 68502\nf 68430 68502 68431\nf 68430 69791 69788\nf 68431 68502 68503\nf 68431 68503 68432\nf 68431 69790 69791\nf 68432 68503 68504\nf 68432 68504 68433\nf 68433 68504 68505\nf 68433 68505 68434\nf 68434 68505 68506\nf 68434 68506 68435\nf 68435 68506 68509\nf 68435 68509 68437\nf 68436 68437 68509\nf 68436 68509 68507\nf 68438 68510 69799\nf 68438 69799 69796\nf 68439 69794 69797\nf 68439 69797 68511\nf 68440 68441 68442\nf 68441 68443 68442\nf 68442 68443 68444\nf 68443 68445 68444\nf 68444 68445 68446\nf 68445 68447 68446\nf 68446 68447 68448\nf 68447 68449 68448\nf 68448 68449 68450\nf 68449 68451 68450\nf 68450 68451 68452\nf 68451 68512 68452\nf 68452 68512 68514\nf 68452 68514 68453\nf 68453 68514 68515\nf 68453 68515 68454\nf 68454 68515 68516\nf 68454 68516 68455\nf 68455 68516 68517\nf 68455 68517 68456\nf 68456 68517 68518\nf 68456 68518 68457\nf 68457 68518 68519\nf 68457 68519 68458\nf 68458 68519 68520\nf 68458 68520 68459\nf 68459 68520 68521\nf 68459 68521 68460\nf 68460 68521 68522\nf 68460 68522 68461\nf 68461 68522 68523\nf 68461 68523 68462\nf 68462 68523 68524\nf 68462 68524 68463\nf 68463 68524 68525\nf 68463 68525 68464\nf 68464 68525 68528\nf 68464 68528 68465\nf 68465 68528 68467\nf 68466 68467 68528\nf 68466 68468 68467\nf 68466 68528 68526\nf 68467 68468 68469\nf 68468 68471 68469\nf 68469 68471 68472\nf 68470 68472 68471\nf 68473 68474 68475\nf 68474 68476 68475\nf 68475 68476 68477\nf 68476 68478 68477\nf 68477 68478 68479\nf 68478 68480 68479\nf 68479 68480 68481\nf 68480 68482 68481\nf 68481 68482 68483\nf 68482 68484 68483\nf 68483 68484 68485\nf 68484 68486 68485\nf 68485 68486 68487\nf 68486 68529 68487\nf 68487 68529 68530\nf 68487 68530 68488\nf 68488 68530 68531\nf 68488 68531 68489\nf 68489 68531 68532\nf 68489 68532 68490\nf 68490 68532 68533\nf 68490 68533 68491\nf 68491 68533 68534\nf 68491 68534 68492\nf 68492 68534 68535\nf 68492 68535 68493\nf 68493 68535 68536\nf 68493 68536 68494\nf 68494 68536 68537\nf 68494 68537 68495\nf 68495 68537 68538\nf 68495 68538 68496\nf 68496 68538 68539\nf 68496 68539 68497\nf 68497 68539 68540\nf 68497 68540 68498\nf 68498 68540 68541\nf 68498 68541 68499\nf 68499 68541 68542\nf 68499 68542 68500\nf 68500 68542 68543\nf 68500 68543 68501\nf 68501 68543 68544\nf 68501 68544 68502\nf 68502 68544 68545\nf 68502 68545 68503\nf 68503 68545 68546\nf 68503 68546 68504\nf 68504 68546 68547\nf 68504 68547 68505\nf 68505 68547 68549\nf 68505 68549 68506\nf 68506 68549 68509\nf 68507 68509 68508\nf 68508 68509 68549\nf 68508 68549 68548\nf 68510 68550 69802\nf 68510 69802 69799\nf 68511 69797 69800\nf 68511 69800 68551\nf 68512 68513 68514\nf 68513 68552 68514\nf 68514 68552 68554\nf 68514 68554 68515\nf 68515 68554 68556\nf 68515 68556 68516\nf 68516 68556 68558\nf 68516 68558 68517\nf 68517 68558 68560\nf 68517 68560 68518\nf 68518 68560 68561\nf 68518 68561 68519\nf 68519 68561 68562\nf 68519 68562 68520\nf 68520 68562 68564\nf 68520 68564 68521\nf 68521 68564 68566\nf 68521 68566 68522\nf 68522 68566 68568\nf 68522 68568 68523\nf 68523 68568 68570\nf 68523 68570 68524\nf 68524 68570 68573\nf 68524 68573 68525\nf 68525 68573 68528\nf 68526 68528 68527\nf 68527 68528 68573\nf 68527 68573 68571\nf 68529 68574 68530\nf 68530 68574 68575\nf 68530 68575 68576\nf 68530 68576 68531\nf 68531 68576 68577\nf 68531 68577 68532\nf 68532 68577 68578\nf 68532 68578 68533\nf 68533 68578 68579\nf 68533 68579 68534\nf 68534 68579 68580\nf 68534 68580 68535\nf 68535 68580 68581\nf 68535 68581 68536\nf 68536 68581 68582\nf 68536 68582 68537\nf 68537 68582 68583\nf 68537 68583 68538\nf 68538 68583 68584\nf 68538 68584 68539\nf 68539 68584 68585\nf 68539 68585 68540\nf 68540 68585 68586\nf 68540 68586 68541\nf 68541 68586 68587\nf 68541 68587 68542\nf 68542 68587 68588\nf 68542 68588 68543\nf 68543 68588 68589\nf 68543 68589 68544\nf 68544 68589 68590\nf 68544 68590 68545\nf 68545 68590 68591\nf 68545 68591 68546\nf 68546 68591 68592\nf 68546 68592 68547\nf 68547 68592 68594\nf 68547 68594 68549\nf 68548 68549 68594\nf 68548 68594 68593\nf 68550 68595 69806\nf 68550 69806 69802\nf 68551 69800 69803\nf 68551 69803 68596\nf 68552 68553 68554\nf 68553 68555 68554\nf 68554 68555 68556\nf 68555 68557 68556\nf 68556 68557 68558\nf 68557 68559 68558\nf 68558 68559 68560\nf 68559 68598 68560\nf 68560 68598 68600\nf 68560 68600 68561\nf 68561 68600 68603\nf 68561 68603 68562\nf 68562 68603 68564\nf 68563 68564 68603\nf 68563 68565 68564\nf 68563 68603 68601\nf 68564 68565 68566\nf 68565 68567 68566\nf 68566 68567 68568\nf 68567 68569 68568\nf 68568 68569 68570\nf 68569 68572 68570\nf 68570 68572 68573\nf 68571 68573 68572\nf 68574 68604 68575\nf 68575 68604 68606\nf 68575 68606 68607\nf 68575 68607 68576\nf 68576 68607 68608\nf 68576 68608 68577\nf 68577 68608 68609\nf 68577 68609 68578\nf 68578 68609 68610\nf 68578 68610 68579\nf 68579 68610 68611\nf 68579 68611 68580\nf 68580 68611 68612\nf 68580 68612 68581\nf 68581 68612 68613\nf 68581 68613 68582\nf 68582 68613 68614\nf 68582 68614 68583\nf 68583 68614 68615\nf 68583 68615 68584\nf 68584 68615 68616\nf 68584 68616 68585\nf 68585 68616 68617\nf 68585 68617 68586\nf 68586 68617 68618\nf 68586 68618 68587\nf 68587 68618 68619\nf 68587 68619 68588\nf 68588 68619 68620\nf 68588 68620 68589\nf 68589 68620 68621\nf 68589 68621 68590\nf 68590 68621 68622\nf 68590 68622 68591\nf 68591 68622 68623\nf 68591 68623 68592\nf 68592 68623 68626\nf 68592 68626 68594\nf 68593 68594 68626\nf 68593 68626 68624\nf 68595 68627 69808\nf 68595 69808 69806\nf 68596 68597 68629\nf 68596 68629 68628\nf 68596 69803 68597\nf 68597 69803 69804\nf 68597 69804 69807\nf 68597 69807 68629\nf 68598 68599 68600\nf 68599 68602 68600\nf 68600 68602 68603\nf 68601 68603 68602\nf 68604 68605 68606\nf 68605 68630 68606\nf 68606 68630 68632\nf 68606 68632 68607\nf 68607 68632 68634\nf 68607 68634 68608\nf 68608 68634 68636\nf 68608 68636 68609\nf 68609 68636 68637\nf 68609 68637 68610\nf 68610 68637 68638\nf 68610 68638 68611\nf 68611 68638 68639\nf 68611 68639 68612\nf 68612 68639 68640\nf 68612 68640 68613\nf 68613 68640 68641\nf 68613 68641 68614\nf 68614 68641 68642\nf 68614 68642 68615\nf 68615 68642 68643\nf 68615 68643 68616\nf 68616 68643 68644\nf 68616 68644 68617\nf 68617 68644 68645\nf 68617 68645 68618\nf 68618 68645 68646\nf 68618 68646 68619\nf 68619 68646 68647\nf 68619 68647 68620\nf 68620 68647 68648\nf 68620 68648 68621\nf 68621 68648 68649\nf 68621 68649 68622\nf 68622 68649 68652\nf 68622 68652 68623\nf 68623 68652 68626\nf 68624 68626 68625\nf 68625 68626 68652\nf 68625 68652 68650\nf 68627 68653 69810\nf 68627 69810 69808\nf 68628 68629 68655\nf 68628 68655 68654\nf 68629 69807 69809\nf 68629 69809 68655\nf 68630 68631 68632\nf 68631 68633 68632\nf 68632 68633 68634\nf 68633 68635 68634\nf 68634 68635 68636\nf 68635 68656 68636\nf 68636 68656 68658\nf 68636 68658 68637\nf 68637 68658 68660\nf 68637 68660 68638\nf 68638 68660 68662\nf 68638 68662 68639\nf 68639 68662 68664\nf 68639 68664 68640\nf 68640 68664 68666\nf 68640 68666 68641\nf 68641 68666 68668\nf 68641 68668 68642\nf 68642 68668 68670\nf 68642 68670 68643\nf 68643 68670 68672\nf 68643 68672 68644\nf 68644 68672 68674\nf 68644 68674 68645\nf 68645 68674 68675\nf 68645 68675 68646\nf 68646 68675 68676\nf 68646 68676 68647\nf 68647 68676 68678\nf 68647 68678 68648\nf 68648 68678 68681\nf 68648 68681 68649\nf 68649 68681 68652\nf 68650 68652 68651\nf 68651 68652 68681\nf 68651 68681 68679\nf 68653 68682 69813\nf 68653 69813 69810\nf 68654 68655 69812\nf 68654 69812 69814\nf 68654 69814 68683\nf 68655 69809 69811\nf 68655 69811 69812\nf 68656 68657 68658\nf 68657 68659 68658\nf 68658 68659 68660\nf 68659 68661 68660\nf 68660 68661 68662\nf 68661 68663 68662\nf 68662 68663 68664\nf 68663 68665 68664\nf 68664 68665 68666\nf 68665 68667 68666\nf 68666 68667 68668\nf 68667 68669 68668\nf 68668 68669 68670\nf 68669 68671 68670\nf 68670 68671 68672\nf 68671 68673 68672\nf 68672 68673 68674\nf 68673 68684 68674\nf 68674 68684 68686\nf 68674 68686 68675\nf 68675 68686 68689\nf 68675 68689 68676\nf 68676 68689 68678\nf 68677 68678 68689\nf 68677 68680 68678\nf 68677 68689 68687\nf 68678 68680 68681\nf 68679 68681 68680\nf 68682 68690 69816\nf 68682 69816 69813\nf 68683 69814 68691\nf 68684 68685 68686\nf 68685 68688 68686\nf 68686 68688 68689\nf 68687 68689 68688\nf 68690 68692 69818\nf 68690 69818 69816\nf 68691 69814 69817\nf 68691 69817 68693\nf 68692 68694 69820\nf 68692 69820 69818\nf 68693 69817 69819\nf 68693 69819 68695\nf 68694 68696 69822\nf 68694 69822 69820\nf 68695 69819 69821\nf 68695 69821 68697\nf 68696 68698 69824\nf 68696 69824 69822\nf 68697 69821 69823\nf 68697 69823 68700\nf 68698 68699 69826\nf 68698 69826 69824\nf 68699 68701 68702\nf 68699 68702 69826\nf 68700 69823 69825\nf 68700 69825 68703\nf 68701 68704 69829\nf 68701 69829 68702\nf 68702 69827 69826\nf 68702 69829 69827\nf 68703 69825 69828\nf 68703 69828 68706\nf 68704 68705 69829\nf 68705 68708 69833\nf 68705 69830 69829\nf 68705 69833 69830\nf 68706 69828 69831\nf 68706 69831 68710\nf 68707 68760 69892\nf 68707 69832 69834\nf 68707 69834 68709\nf 68707 69892 69832\nf 68708 68709 69833\nf 68709 69834 69833\nf 68710 69831 69835\nf 68710 69835 68762\nf 68711 68805 68807\nf 68711 68807 69842\nf 68711 69842 69843\nf 68711 69843 69844\nf 68711 69844 68712\nf 68712 69844 69845\nf 68712 69845 68713\nf 68713 69845 69846\nf 68713 69846 68714\nf 68714 69846 69847\nf 68714 69847 68715\nf 68715 69847 69848\nf 68715 69848 68716\nf 68716 69848 69849\nf 68716 69849 68717\nf 68717 69849 69850\nf 68717 69850 68718\nf 68718 69850 69851\nf 68718 69851 68719\nf 68719 69851 69852\nf 68719 69852 68720\nf 68720 69852 69853\nf 68720 69853 68721\nf 68721 69853 69854\nf 68721 69854 68722\nf 68722 69854 69855\nf 68722 69855 68723\nf 68723 69855 69856\nf 68723 69856 68724\nf 68724 69856 69857\nf 68724 69857 68725\nf 68725 69857 69858\nf 68725 69858 68726\nf 68726 69858 69859\nf 68726 69859 68727\nf 68727 69859 69860\nf 68727 69860 68728\nf 68728 69860 69861\nf 68728 69861 68729\nf 68729 69861 69862\nf 68729 69862 68730\nf 68730 69862 69863\nf 68730 69863 68731\nf 68731 69863 69864\nf 68731 69864 68732\nf 68732 69864 69865\nf 68732 69865 68733\nf 68733 69865 69866\nf 68733 69866 68734\nf 68734 69866 69867\nf 68734 69867 68735\nf 68735 69867 69868\nf 68735 69868 68736\nf 68736 69868 69869\nf 68736 69869 68737\nf 68737 69869 69870\nf 68737 69870 68738\nf 68738 69870 69871\nf 68738 69871 68739\nf 68739 69871 69872\nf 68739 69872 68740\nf 68740 69872 69873\nf 68740 69873 68741\nf 68741 69873 69874\nf 68741 69874 68742\nf 68742 69874 69875\nf 68742 69875 68743\nf 68743 69875 69876\nf 68743 69876 68744\nf 68744 69876 69877\nf 68744 69877 68745\nf 68745 69877 69878\nf 68745 69878 68746\nf 68746 69878 69879\nf 68746 69879 68747\nf 68747 69879 69880\nf 68747 69880 68748\nf 68748 69880 69881\nf 68748 69881 68749\nf 68749 69881 69882\nf 68749 69882 68750\nf 68750 69882 69883\nf 68750 69883 68751\nf 68751 69883 69884\nf 68751 69884 68752\nf 68752 69884 69885\nf 68752 69885 68753\nf 68753 69885 69886\nf 68753 69886 68754\nf 68754 69886 69887\nf 68754 69887 68755\nf 68755 69887 69888\nf 68755 69888 68756\nf 68756 69888 69889\nf 68756 69889 68757\nf 68757 69889 69890\nf 68757 69890 68758\nf 68758 69890 69891\nf 68758 69891 68759\nf 68759 69891 69893\nf 68759 69893 68761\nf 68760 68761 69892\nf 68761 69893 69892\nf 68762 69835 69895\nf 68762 69895 68808\nf 68763 68809 68811\nf 68763 68811 69939\nf 68763 69896 68764\nf 68763 69939 69896\nf 68764 69896 69897\nf 68764 69897 68765\nf 68765 69897 69898\nf 68765 69898 68766\nf 68766 69898 69899\nf 68766 69899 68767\nf 68767 69899 69900\nf 68767 69900 68768\nf 68768 69900 69901\nf 68768 69901 68769\nf 68769 69901 69902\nf 68769 69902 68770\nf 68770 69902 69903\nf 68770 69903 68771\nf 68771 69903 69904\nf 68771 69904 68772\nf 68772 69904 69905\nf 68772 69905 68773\nf 68773 69905 69906\nf 68773 69906 68774\nf 68774 69906 69907\nf 68774 69907 68775\nf 68775 69907 69908\nf 68775 69908 68776\nf 68776 69908 69909\nf 68776 69909 68777\nf 68777 69909 69910\nf 68777 69910 68778\nf 68778 69910 69911\nf 68778 69911 68779\nf 68779 69911 69912\nf 68779 69912 68780\nf 68780 69912 69913\nf 68780 69913 68781\nf 68781 69913 69914\nf 68781 69914 68782\nf 68782 69914 69916\nf 68782 69916 68783\nf 68783 69916 69918\nf 68783 69918 68784\nf 68784 69918 69920\nf 68784 69920 68785\nf 68785 69920 69922\nf 68785 69922 68786\nf 68786 69922 69924\nf 68786 69924 68787\nf 68787 69924 69926\nf 68787 69926 68788\nf 68788 69926 69928\nf 68788 69928 68789\nf 68789 69928 69930\nf 68789 69930 68790\nf 68790 69930 69932\nf 68790 69932 68791\nf 68791 69932 69935\nf 68791 69935 68792\nf 68792 69935 68793\nf 68793 68794 68795\nf 68793 69934 68794\nf 68793 69935 69934\nf 68794 68796 68795\nf 68794 69836 69837\nf 68794 69837 68796\nf 68794 69934 69836\nf 68795 68796 68797\nf 68796 68798 68797\nf 68796 69837 69838\nf 68796 69838 68798\nf 68797 68798 68799\nf 68798 68800 68799\nf 68798 69838 69839\nf 68798 69839 68800\nf 68799 68800 68801\nf 68800 68802 68801\nf 68800 69839 69840\nf 68800 69840 68802\nf 68801 68802 68803\nf 68802 68804 68803\nf 68802 69840 69841\nf 68802 69841 68804\nf 68803 68804 68806\nf 68804 68807 68806\nf 68804 69841 69842\nf 68804 69842 68807\nf 68805 68806 68807\nf 68808 69895 69937\nf 68808 69937 68812\nf 68809 68810 68811\nf 68810 68813 69942\nf 68810 69938 69940\nf 68810 69940 68811\nf 68810 69942 69938\nf 68811 69940 69939\nf 68812 69937 69941\nf 68812 69941 68815\nf 68813 68814 69942\nf 68814 68816 69946\nf 68814 69943 69942\nf 68814 69946 69943\nf 68815 69941 69944\nf 68815 69944 68817\nf 68816 68818 69950\nf 68816 69950 69946\nf 68817 69944 69948\nf 68817 69948 68819\nf 68818 68820 69953\nf 68818 69953 69950\nf 68819 69948 69951\nf 68819 69951 68821\nf 68820 68822 69956\nf 68820 69956 69953\nf 68821 69951 69954\nf 68821 69954 68823\nf 68822 68824 69959\nf 68822 69959 69956\nf 68823 69954 69957\nf 68823 69957 68825\nf 68824 68826 69962\nf 68824 69962 69959\nf 68825 69957 69960\nf 68825 69960 68827\nf 68826 68828 69966\nf 68826 69966 69962\nf 68827 69960 69963\nf 68827 69963 68829\nf 68828 68831 69968\nf 68828 69968 69966\nf 68829 68830 68833\nf 68829 68833 68832\nf 68829 69963 68830\nf 68830 69963 69964\nf 68830 69964 69967\nf 68830 69967 68833\nf 68831 68834 69970\nf 68831 69970 69968\nf 68832 68833 68837\nf 68832 68837 68835\nf 68833 69967 69969\nf 68833 69969 68837\nf 68834 68838 69972\nf 68834 69972 69970\nf 68835 68837 68836\nf 68836 68837 69971\nf 68836 69971 68839\nf 68837 69969 69971\nf 68838 68840 69974\nf 68838 69974 69972\nf 68839 69971 69973\nf 68839 69973 68841\nf 68840 68842 69976\nf 68840 69976 69974\nf 68841 69973 69975\nf 68841 69975 68843\nf 68842 68844 69978\nf 68842 69978 69976\nf 68843 69975 69977\nf 68843 69977 68845\nf 68844 68846 69981\nf 68844 69981 69978\nf 68845 69977 69979\nf 68845 69979 68847\nf 68846 68848 69984\nf 68846 69984 69981\nf 68847 69979 69982\nf 68847 69982 68849\nf 68848 68850 69988\nf 68848 69988 69984\nf 68849 69982 69985\nf 68849 69985 68851\nf 68850 68853 69990\nf 68850 69990 69988\nf 68851 68852 68855\nf 68851 68855 68854\nf 68851 69985 68852\nf 68852 69985 69986\nf 68852 69986 69989\nf 68852 69989 68855\nf 68853 68856 69992\nf 68853 69992 69990\nf 68854 68855 68858\nf 68854 68858 68857\nf 68855 69989 69991\nf 68855 69991 68858\nf 68856 68859 69994\nf 68856 69994 69992\nf 68857 68858 68861\nf 68857 68861 68860\nf 68858 69991 69993\nf 68858 69993 68861\nf 68859 68862 69996\nf 68859 69996 69994\nf 68860 68861 68864\nf 68860 68864 68863\nf 68861 69993 69995\nf 68861 69995 68864\nf 68862 68865 69999\nf 68862 69999 69996\nf 68863 68864 69998\nf 68863 69998 70000\nf 68863 70000 68866\nf 68864 69995 69997\nf 68864 69997 69998\nf 68865 68867 70002\nf 68865 70002 69999\nf 68866 70000 68868\nf 68867 68869 70005\nf 68867 70005 70002\nf 68868 70000 70003\nf 68868 70003 68870\nf 68869 68871 70008\nf 68869 70008 70005\nf 68870 70003 70006\nf 68870 70006 68873\nf 68871 68872 70011\nf 68871 70011 70008\nf 68872 68874 68875\nf 68872 68875 70011\nf 68873 70006 70009\nf 68873 70009 68876\nf 68874 68877 68875\nf 68875 68877 68878\nf 68875 68878 70015\nf 68875 70015 70011\nf 68876 70009 70012\nf 68876 70012 68879\nf 68877 68881 68878\nf 68878 68881 68882\nf 68878 68882 70017\nf 68878 70017 70015\nf 68879 68880 68884\nf 68879 68884 68883\nf 68879 70012 68880\nf 68880 70012 70013\nf 68880 70013 70016\nf 68880 70016 68884\nf 68881 68885 70020\nf 68881 70020 68882\nf 68882 70018 70017\nf 68882 70020 70018\nf 68883 68884 68887\nf 68883 68887 68886\nf 68884 70016 70019\nf 68884 70019 68887\nf 68885 68888 70023\nf 68885 70023 70020\nf 68886 68887 68890\nf 68886 68890 68889\nf 68887 70019 70022\nf 68887 70022 68890\nf 68888 68891 70025\nf 68888 70025 70023\nf 68889 68890 68893\nf 68889 68893 68892\nf 68890 70022 70024\nf 68890 70024 68893\nf 68891 68894 70027\nf 68891 70027 70025\nf 68892 68893 68896\nf 68892 68896 68895\nf 68893 70024 70026\nf 68893 70026 68896\nf 68894 68897 70029\nf 68894 70029 70027\nf 68895 68896 68899\nf 68895 68899 68898\nf 68896 70026 70028\nf 68896 70028 68899\nf 68897 68900 70031\nf 68897 70031 70029\nf 68898 68899 68902\nf 68898 68902 68901\nf 68899 70028 70030\nf 68899 70030 68902\nf 68900 68903 70033\nf 68900 70033 70031\nf 68901 68902 68906\nf 68901 68906 68905\nf 68902 70030 70032\nf 68902 70032 68906\nf 68903 68904 70035\nf 68903 70035 70033\nf 68904 68907 68908\nf 68904 68908 70035\nf 68905 68906 68910\nf 68905 68910 68909\nf 68906 70032 70034\nf 68906 70034 68910\nf 68907 68911 68908\nf 68908 68911 68912\nf 68908 68912 70037\nf 68908 70037 70035\nf 68909 68910 68914\nf 68909 68914 68913\nf 68910 70034 70036\nf 68910 70036 68914\nf 68911 68915 68912\nf 68912 68915 68916\nf 68912 68916 70040\nf 68912 70040 70037\nf 68913 68914 68918\nf 68913 68918 68917\nf 68914 70036 70038\nf 68914 70038 68918\nf 68915 68919 68916\nf 68916 68919 68920\nf 68916 68920 70043\nf 68916 70043 70040\nf 68917 68918 68923\nf 68917 68923 68921\nf 68918 70038 70041\nf 68918 70041 68923\nf 68919 68924 68920\nf 68920 68924 68925\nf 68920 68925 70046\nf 68920 70046 70043\nf 68921 68923 68922\nf 68922 68923 70044\nf 68922 70044 68926\nf 68923 70041 70044\nf 68924 68927 68925\nf 68925 68927 68928\nf 68925 68928 70049\nf 68925 70049 70046\nf 68926 70044 70047\nf 68926 70047 68929\nf 68927 68930 68928\nf 68928 68930 68931\nf 68928 68931 70052\nf 68928 70052 70049\nf 68929 70047 70050\nf 68929 70050 68932\nf 68930 68933 68931\nf 68931 68933 68934\nf 68931 68934 70055\nf 68931 70055 70052\nf 68932 70050 70053\nf 68932 70053 68935\nf 68933 68936 68934\nf 68934 68936 68937\nf 68934 68937 70058\nf 68934 70058 70055\nf 68935 70053 70056\nf 68935 70056 68938\nf 68936 68939 70062\nf 68936 70062 68937\nf 68937 70059 70058\nf 68937 70062 70059\nf 68938 70056 70060\nf 68938 70060 68940\nf 68939 68941 70066\nf 68939 70066 70062\nf 68940 70060 70064\nf 68940 70064 68942\nf 68941 68943 70071\nf 68941 70071 70066\nf 68942 70064 70068\nf 68942 70068 68944\nf 68943 68946 70074\nf 68943 70074 70071\nf 68944 68945 68948\nf 68944 68948 68947\nf 68944 70068 68945\nf 68945 70068 70069\nf 68945 70069 70073\nf 68945 70073 68948\nf 68946 68949 70077\nf 68946 70077 70074\nf 68947 68948 68951\nf 68947 68951 68950\nf 68948 70073 70076\nf 68948 70076 68951\nf 68949 68952 70080\nf 68949 70080 70077\nf 68950 68951 68954\nf 68950 68954 68953\nf 68951 70076 70079\nf 68951 70079 68954\nf 68952 68955 70083\nf 68952 70083 70080\nf 68953 68954 68957\nf 68953 68957 68956\nf 68954 70079 70082\nf 68954 70082 68957\nf 68955 68958 70086\nf 68955 70086 70083\nf 68956 68957 68960\nf 68956 68960 68959\nf 68957 70082 70085\nf 68957 70085 68960\nf 68958 68961 70089\nf 68958 70089 70086\nf 68959 68960 68963\nf 68959 68963 68962\nf 68960 70085 70088\nf 68960 70088 68963\nf 68961 68964 70091\nf 68961 70091 70089\nf 68962 68963 68967\nf 68962 68967 68965\nf 68963 70088 70090\nf 68963 70090 68967\nf 68964 68968 70093\nf 68964 70093 70091\nf 68965 68967 68966\nf 68966 68967 70092\nf 68966 70092 68969\nf 68967 70090 70092\nf 68968 68970 70096\nf 68968 70096 70093\nf 68969 70092 70094\nf 68969 70094 68971\nf 68970 68972 70099\nf 68970 70099 70096\nf 68971 70094 70097\nf 68971 70097 68974\nf 68972 68973 70102\nf 68972 70102 70099\nf 68973 68975 68976\nf 68973 68976 70102\nf 68974 70097 70100\nf 68974 70100 68977\nf 68975 68978 68976\nf 68976 68978 68979\nf 68976 68979 70105\nf 68976 70105 70102\nf 68977 70100 70103\nf 68977 70103 68980\nf 68978 68981 68979\nf 68979 68981 68982\nf 68979 68982 70109\nf 68979 70109 70105\nf 68980 70103 70106\nf 68980 70106 68983\nf 68981 68985 70112\nf 68981 70112 68982\nf 68982 70110 70109\nf 68982 70112 70110\nf 68983 68984 68987\nf 68983 68987 68986\nf 68983 70106 68984\nf 68984 70106 70107\nf 68984 70107 70111\nf 68984 70111 68987\nf 68985 68988 70115\nf 68985 70115 70112\nf 68986 68987 68990\nf 68986 68990 68989\nf 68987 70111 70114\nf 68987 70114 68990\nf 68988 68991 70118\nf 68988 70118 70115\nf 68989 68990 68993\nf 68989 68993 68992\nf 68990 70114 70117\nf 68990 70117 68993\nf 68991 68994 70121\nf 68991 70121 70118\nf 68992 68993 68996\nf 68992 68996 68995\nf 68993 70117 70120\nf 68993 70120 68996\nf 68994 68997 70124\nf 68994 70124 70121\nf 68995 68996 68999\nf 68995 68999 68998\nf 68996 70120 70123\nf 68996 70123 68999\nf 68997 69000 70126\nf 68997 70126 70124\nf 68998 68999 69002\nf 68998 69002 69001\nf 68999 70123 70125\nf 68999 70125 69002\nf 69000 69003 70128\nf 69000 70128 70126\nf 69001 69002 69006\nf 69001 69006 69004\nf 69002 70125 70127\nf 69002 70127 69006\nf 69003 69007 70130\nf 69003 70130 70128\nf 69004 69006 69005\nf 69005 69006 70129\nf 69005 70129 69008\nf 69006 70127 70129\nf 69007 69009 70132\nf 69007 70132 70130\nf 69008 70129 70131\nf 69008 70131 69010\nf 69009 69011 70135\nf 69009 70135 70132\nf 69010 70131 70133\nf 69010 70133 69013\nf 69011 69012 70138\nf 69011 70138 70135\nf 69012 69014 69015\nf 69012 69015 70138\nf 69013 70133 70136\nf 69013 70136 69016\nf 69014 69017 70142\nf 69014 70142 69015\nf 69015 70139 70138\nf 69015 70142 70139\nf 69016 70136 70140\nf 69016 70140 69018\nf 69017 69019 70147\nf 69017 70147 70142\nf 69018 70140 70144\nf 69018 70144 69020\nf 69019 69022 70150\nf 69019 70150 70147\nf 69020 69021 69024\nf 69020 69024 69023\nf 69020 70144 69021\nf 69021 70144 70145\nf 69021 70145 70149\nf 69021 70149 69024\nf 69022 69025 70152\nf 69022 70152 70150\nf 69023 69024 69027\nf 69023 69027 69026\nf 69024 70149 70151\nf 69024 70151 69027\nf 69025 69028 70154\nf 69025 70154 70152\nf 69026 69027 69031\nf 69026 69031 69029\nf 69027 70151 70153\nf 69027 70153 69031\nf 69028 69032 70156\nf 69028 70156 70154\nf 69029 69031 69030\nf 69030 69031 70155\nf 69030 70155 69033\nf 69031 70153 70155\nf 69032 69034 70158\nf 69032 70158 70156\nf 69033 70155 70157\nf 69033 70157 69035\nf 69034 69036 70160\nf 69034 70160 70158\nf 69035 70157 70159\nf 69035 70159 69038\nf 69036 69037 70162\nf 69036 70162 70160\nf 69037 69039 69040\nf 69037 69040 70162\nf 69038 70159 70161\nf 69038 70161 69041\nf 69039 69042 69040\nf 69040 69042 69043\nf 69040 69043 70164\nf 69040 70164 70162\nf 69041 70161 70163\nf 69041 70163 69044\nf 69042 69046 70167\nf 69042 70167 69043\nf 69043 70165 70164\nf 69043 70167 70165\nf 69044 69048 69045\nf 69044 70163 70166\nf 69044 70166 70169\nf 69044 70169 69048\nf 69045 69048 69047\nf 69046 69049 70170\nf 69046 70170 70167\nf 69047 69048 69051\nf 69047 69051 69050\nf 69048 70169 69051\nf 69049 69052 70172\nf 69049 70172 70170\nf 69050 69051 69054\nf 69050 69054 69053\nf 69051 70169 70171\nf 69051 70171 69054\nf 69052 69055 70175\nf 69052 70175 70172\nf 69053 69054 70174\nf 69053 70174 70176\nf 69053 70176 69056\nf 69054 70171 70173\nf 69054 70173 70174\nf 69055 69057 70178\nf 69055 70178 70175\nf 69056 70176 69058\nf 69057 69059 70182\nf 69057 70182 70178\nf 69058 70176 70179\nf 69058 70179 69060\nf 69059 69062 70184\nf 69059 70184 70182\nf 69060 69061 69065\nf 69060 69065 69064\nf 69060 70179 69061\nf 69061 70179 70180\nf 69061 70180 70183\nf 69061 70183 69065\nf 69062 69063 70184\nf 69063 69066 70187\nf 69063 70185 70184\nf 69063 70187 70185\nf 69064 69065 69068\nf 69064 69068 69067\nf 69065 70183 70186\nf 69065 70186 69068\nf 69066 69069 70189\nf 69066 70189 70187\nf 69067 69068 69072\nf 69067 69072 69071\nf 69068 70186 70188\nf 69068 70188 69072\nf 69069 69070 70189\nf 69070 69073 70192\nf 69070 70190 70189\nf 69070 70192 70190\nf 69071 69072 69076\nf 69071 69076 69075\nf 69072 70188 70191\nf 69072 70191 69076\nf 69073 69074 70194\nf 69073 70194 70192\nf 69074 69077 69078\nf 69074 69078 70194\nf 69075 69076 69081\nf 69075 69081 69079\nf 69076 70191 70193\nf 69076 70193 69081\nf 69077 69082 70198\nf 69077 70198 69078\nf 69078 70195 70194\nf 69078 70198 70195\nf 69079 69081 69080\nf 69080 69081 70196\nf 69080 70196 69084\nf 69081 70193 70196\nf 69082 69083 70201\nf 69082 70201 70198\nf 69083 69085 69086\nf 69083 69086 70201\nf 69084 70196 70199\nf 69084 70199 69087\nf 69085 69088 70205\nf 69085 70205 69086\nf 69086 70202 70201\nf 69086 70205 70202\nf 69087 70199 70203\nf 69087 70203 69089\nf 69088 69091 70207\nf 69088 70207 70205\nf 69089 69094 69090\nf 69089 70203 70206\nf 69089 70206 70208\nf 69089 70208 69094\nf 69090 69094 69093\nf 69091 69092 70210\nf 69091 70210 70207\nf 69092 69095 69096\nf 69092 69096 70210\nf 69093 69094 70209\nf 69093 70209 70212\nf 69093 70212 69097\nf 69094 70208 70209\nf 69095 69100 70215\nf 69095 70215 69096\nf 69096 70211 70210\nf 69096 70215 70211\nf 69097 70212 70214\nf 69097 70214 69098\nf 69098 70214 69099\nf 69099 69102 69101\nf 69099 70214 69102\nf 69100 69105 70220\nf 69100 70220 70215\nf 69101 69102 69103\nf 69102 70214 70217\nf 69102 70217 70219\nf 69102 70219 69103\nf 69103 69107 69108\nf 69103 69108 69104\nf 69103 70219 69107\nf 69104 69108 69109\nf 69104 69109 69106\nf 69105 69106 70225\nf 69105 70225 70220\nf 69106 69109 70225\nf 69107 70219 70222\nf 69107 70222 70223\nf 69107 70223 69108\nf 69108 70223 70224\nf 69108 70224 69109\nf 69109 70224 70226\nf 69109 70226 70225\nf 69110 69111 70228\nf 69110 69123 69121\nf 69110 70227 69123\nf 69110 70228 70227\nf 69111 69112 70229\nf 69111 70229 70228\nf 69112 69124 70230\nf 69112 70230 70229\nf 69113 69114 70231\nf 69113 70231 70249\nf 69113 70249 69130\nf 69114 69115 70232\nf 69114 70232 70231\nf 69115 69116 70233\nf 69115 70233 70232\nf 69116 69132 70235\nf 69116 70234 70233\nf 69116 70235 70234\nf 69117 69118 70236\nf 69117 70236 70256\nf 69117 70256 69138\nf 69118 69119 70237\nf 69118 70237 70236\nf 69119 69120 70238\nf 69119 70238 70237\nf 69120 69122 70240\nf 69120 70240 70238\nf 69121 69123 69122\nf 69122 69123 70239\nf 69122 70239 70240\nf 69123 70227 70239\nf 69124 69125 70244\nf 69124 70242 70230\nf 69124 70244 70242\nf 69125 69126 70244\nf 69126 69127 70245\nf 69126 70245 70244\nf 69127 69140 70246\nf 69127 70246 70245\nf 69128 69129 70247\nf 69128 70247 70260\nf 69128 70260 69142\nf 69129 69131 70248\nf 69129 70248 70247\nf 69130 70249 69131\nf 69131 70249 70250\nf 69131 70250 70248\nf 69132 69133 69134\nf 69132 69134 70235\nf 69133 69135 70252\nf 69133 70252 69134\nf 69134 70251 70235\nf 69134 70252 70251\nf 69135 69136 70252\nf 69136 69137 70254\nf 69136 70254 70252\nf 69137 69144 70255\nf 69137 70255 70254\nf 69138 70256 69139\nf 69139 70256 70257\nf 69139 70257 70266\nf 69139 70266 69147\nf 69140 69141 70259\nf 69140 70258 70246\nf 69140 70259 70258\nf 69141 69148 70259\nf 69142 70260 69143\nf 69143 70260 70261\nf 69143 70261 70268\nf 69143 70268 69149\nf 69144 69145 70263\nf 69144 70262 70255\nf 69144 70263 70262\nf 69145 69146 70263\nf 69146 69150 70265\nf 69146 70265 70263\nf 69147 70266 69151\nf 69148 69152 70271\nf 69148 70267 70259\nf 69148 70271 70267\nf 69149 70268 69153\nf 69150 69155 70274\nf 69150 70269 70265\nf 69150 70274 70269\nf 69151 70266 70270\nf 69151 70270 69156\nf 69152 69157 70276\nf 69152 70276 70271\nf 69153 70268 70272\nf 69153 70272 69154\nf 69154 70272 70273\nf 69154 70273 70279\nf 69154 70279 69159\nf 69155 69160 70280\nf 69155 70280 70274\nf 69156 70270 70275\nf 69156 70275 69161\nf 69157 69158 70277\nf 69157 70277 70276\nf 69158 69162 70277\nf 69159 70279 69163\nf 69160 69164 70285\nf 69160 70285 70280\nf 69161 70275 70282\nf 69161 70282 69165\nf 69162 69166 70288\nf 69162 70283 70277\nf 69162 70288 70283\nf 69163 70279 70284\nf 69163 70284 69167\nf 69164 69168 70290\nf 69164 70290 70285\nf 69165 70282 70287\nf 69165 70287 69169\nf 69166 69170 70292\nf 69166 70292 70288\nf 69167 70284 70289\nf 69167 70289 69171\nf 69168 69172 70294\nf 69168 70294 70290\nf 69169 70287 70291\nf 69169 70291 69173\nf 69170 69174 70296\nf 69170 70296 70292\nf 69171 70289 70293\nf 69171 70293 69175\nf 69172 69176 70298\nf 69172 70298 70294\nf 69173 70291 70295\nf 69173 70295 69177\nf 69174 69178 70300\nf 69174 70300 70296\nf 69175 70293 70297\nf 69175 70297 69179\nf 69176 69180 70304\nf 69176 70304 70298\nf 69177 70295 70299\nf 69177 70299 69181\nf 69178 69182 70300\nf 69179 70297 70303\nf 69179 70303 69184\nf 69180 69185 70308\nf 69180 70308 70304\nf 69181 70299 70305\nf 69181 70305 69186\nf 69182 69183 70301\nf 69182 69187 69183\nf 69182 70301 70300\nf 69183 69187 69189\nf 69183 69189 70310\nf 69183 70306 70301\nf 69183 70310 70306\nf 69184 70303 70307\nf 69184 70307 69190\nf 69185 69191 70312\nf 69185 70312 70308\nf 69186 70305 70309\nf 69186 70309 69192\nf 69187 69188 69189\nf 69188 69194 69189\nf 69189 69194 70310\nf 69190 70307 70311\nf 69190 70311 69195\nf 69191 69196 70317\nf 69191 70317 70312\nf 69192 70309 70313\nf 69192 70313 70314\nf 69192 70314 69193\nf 69193 70314 69197\nf 69194 69198 70319\nf 69194 70315 70310\nf 69194 70319 70315\nf 69195 70311 70316\nf 69195 70316 69199\nf 69196 69200 70321\nf 69196 70321 70317\nf 69197 70314 70318\nf 69197 70318 69201\nf 69198 69202 70323\nf 69198 70323 70319\nf 69199 70316 70320\nf 69199 70320 69203\nf 69200 69204 70326\nf 69200 70326 70321\nf 69201 70318 70322\nf 69201 70322 69205\nf 69202 69206 70328\nf 69202 70328 70323\nf 69203 70320 70324\nf 69203 70324 69207\nf 69204 69208 70331\nf 69204 70331 70326\nf 69205 70322 70327\nf 69205 70327 69209\nf 69206 69210 70333\nf 69206 70333 70328\nf 69207 70324 70329\nf 69207 70329 69211\nf 69208 69212 70336\nf 69208 70336 70331\nf 69209 70327 70332\nf 69209 70332 69213\nf 69210 69214 70338\nf 69210 70338 70333\nf 69211 70329 70334\nf 69211 70334 69215\nf 69212 69216 70341\nf 69212 70341 70336\nf 69213 70332 70337\nf 69213 70337 69217\nf 69214 69218 70343\nf 69214 70343 70338\nf 69215 70334 70339\nf 69215 70339 69219\nf 69216 69220 70348\nf 69216 70348 70341\nf 69217 70337 70342\nf 69217 70342 69221\nf 69218 69222 70350\nf 69218 70350 70343\nf 69219 70339 70345\nf 69219 70345 69223\nf 69220 69225 70353\nf 69220 70353 70348\nf 69221 70342 70349\nf 69221 70349 69226\nf 69222 69227 70355\nf 69222 70355 70350\nf 69223 69224 69229\nf 69223 69229 69228\nf 69223 70345 69224\nf 69224 70345 70346\nf 69224 70346 70352\nf 69224 70352 69229\nf 69225 69230 70358\nf 69225 70358 70353\nf 69226 70349 70354\nf 69226 70354 69231\nf 69227 69232 70360\nf 69227 70360 70355\nf 69228 69229 69236\nf 69228 69236 69234\nf 69229 70352 70357\nf 69229 70357 69236\nf 69230 69237 70366\nf 69230 70366 70358\nf 69231 70354 70359\nf 69231 70359 69238\nf 69232 69233 70361\nf 69232 70361 70360\nf 69233 69239 70363\nf 69233 70363 70361\nf 69234 69236 69235\nf 69235 69236 70364\nf 69235 70364 70365\nf 69235 70365 69248\nf 69236 70357 70364\nf 69237 69251 70380\nf 69237 70380 70366\nf 69238 70359 70367\nf 69238 70367 69252\nf 69239 69240 69241\nf 69239 69241 70363\nf 69240 69242 70369\nf 69240 70369 69241\nf 69241 70368 70363\nf 69241 70369 70368\nf 69242 69243 70369\nf 69243 69253 70371\nf 69243 70370 70369\nf 69243 70371 70370\nf 69244 69245 70372\nf 69244 70372 70397\nf 69244 70397 69269\nf 69245 69246 70373\nf 69245 70373 70372\nf 69246 69247 70374\nf 69246 70374 70373\nf 69247 69271 70376\nf 69247 70375 70374\nf 69247 70376 70375\nf 69248 69250 69249\nf 69248 70365 69250\nf 69249 69250 70378\nf 69249 70378 70379\nf 69249 70379 69310\nf 69250 70365 70378\nf 69251 69313 70444\nf 69251 70444 70380\nf 69252 70367 70381\nf 69252 70381 69314\nf 69253 69254 69255\nf 69253 69255 70371\nf 69254 69256 70383\nf 69254 70383 69255\nf 69255 70382 70371\nf 69255 70383 70382\nf 69256 69257 70383\nf 69257 69258 70384\nf 69257 70384 70383\nf 69258 69259 70385\nf 69258 70385 70384\nf 69259 69260 70386\nf 69259 70386 70385\nf 69260 69261 70387\nf 69260 70387 70386\nf 69261 69315 70388\nf 69261 70388 70387\nf 69262 69263 70390\nf 69262 69325 69323\nf 69262 70389 69325\nf 69262 70390 70389\nf 69263 69264 70391\nf 69263 70391 70390\nf 69264 69265 70392\nf 69264 70392 70391\nf 69265 69266 70393\nf 69265 70393 70392\nf 69266 69267 70394\nf 69266 70394 70393\nf 69267 69268 70395\nf 69267 70395 70394\nf 69268 69270 70396\nf 69268 70396 70395\nf 69269 70397 69270\nf 69270 70397 70398\nf 69270 70398 70396\nf 69271 69272 69273\nf 69271 69273 70376\nf 69272 69274 70400\nf 69272 70400 69273\nf 69273 70399 70376\nf 69273 70400 70399\nf 69274 69275 70400\nf 69275 69276 70401\nf 69275 70401 70400\nf 69276 69277 70402\nf 69276 70402 70401\nf 69277 69278 70403\nf 69277 70403 70402\nf 69278 69279 70404\nf 69278 70404 70403\nf 69279 69280 70405\nf 69279 70405 70404\nf 69280 69326 70407\nf 69280 70406 70405\nf 69280 70407 70406\nf 69281 69282 70415\nf 69281 69343 69341\nf 69281 70414 69343\nf 69281 70415 70414\nf 69282 69283 70416\nf 69282 70416 70415\nf 69283 69284 70417\nf 69283 70417 70416\nf 69284 69285 70418\nf 69284 70418 70417\nf 69285 69286 70419\nf 69285 70419 70418\nf 69286 69287 70420\nf 69286 70420 70419\nf 69287 69288 70421\nf 69287 70421 70420\nf 69288 69289 70422\nf 69288 70422 70421\nf 69289 69290 70423\nf 69289 70423 70422\nf 69290 69291 70424\nf 69290 70424 70423\nf 69291 69292 70425\nf 69291 70425 70424\nf 69292 69293 70426\nf 69292 70426 70425\nf 69293 69294 70427\nf 69293 70427 70426\nf 69294 69295 70428\nf 69294 70428 70427\nf 69295 69296 70429\nf 69295 70429 70428\nf 69296 69297 70430\nf 69296 70430 70429\nf 69297 69298 70431\nf 69297 70431 70430\nf 69298 69299 70432\nf 69298 70432 70431\nf 69299 69300 70433\nf 69299 70433 70432\nf 69300 69301 70434\nf 69300 70434 70433\nf 69301 69302 70435\nf 69301 70435 70434\nf 69302 69303 70436\nf 69302 70436 70435\nf 69303 69304 70437\nf 69303 70437 70436\nf 69304 69305 70438\nf 69304 70438 70437\nf 69305 69306 70439\nf 69305 70439 70438\nf 69306 69307 70440\nf 69306 70440 70439\nf 69307 69308 70442\nf 69307 70442 70440\nf 69308 69309 70441\nf 69308 69311 69309\nf 69308 70441 70442\nf 69309 69311 69312\nf 69309 69312 70379\nf 69309 70377 70441\nf 69309 70379 70377\nf 69310 69312 69311\nf 69310 70379 69312\nf 69313 69344 70456\nf 69313 70456 70444\nf 69314 70381 70445\nf 69314 70445 69345\nf 69315 69316 70447\nf 69315 70446 70388\nf 69315 70447 70446\nf 69316 69317 70447\nf 69317 69318 70448\nf 69317 70448 70447\nf 69318 69319 70449\nf 69318 70449 70448\nf 69319 69320 70450\nf 69319 70450 70449\nf 69320 69321 70451\nf 69320 70451 70450\nf 69321 69322 70452\nf 69321 70452 70451\nf 69322 69324 70454\nf 69322 70454 70452\nf 69323 69325 69324\nf 69324 69325 70453\nf 69324 70453 70454\nf 69325 70389 70453\nf 69326 69327 69328\nf 69326 69328 70407\nf 69327 69329 69328\nf 69328 69329 69330\nf 69328 69330 70408\nf 69328 70408 70407\nf 69329 69331 69330\nf 69330 69331 69332\nf 69330 69332 70409\nf 69330 70409 70408\nf 69331 69333 69332\nf 69332 69333 69334\nf 69332 69334 70410\nf 69332 70410 70409\nf 69333 69335 69334\nf 69334 69335 69336\nf 69334 69336 70411\nf 69334 70411 70410\nf 69335 69337 69336\nf 69336 69337 69338\nf 69336 69338 70412\nf 69336 70412 70411\nf 69337 69339 69338\nf 69338 69339 69340\nf 69338 69340 70413\nf 69338 70413 70412\nf 69339 69342 69340\nf 69340 69342 69343\nf 69340 69343 70414\nf 69340 70414 70413\nf 69341 69343 69342\nf 69344 69346 70458\nf 69344 70458 70456\nf 69345 70445 70457\nf 69345 70457 69347\nf 69346 69348 70460\nf 69346 70460 70458\nf 69347 70457 70459\nf 69347 70459 69349\nf 69348 69350 70462\nf 69348 70462 70460\nf 69349 70459 70461\nf 69349 70461 69351\nf 69350 69352 70464\nf 69350 70464 70462\nf 69351 70461 70463\nf 69351 70463 69353\nf 69352 69354 70466\nf 69352 70466 70464\nf 69353 70463 70465\nf 69353 70465 69355\nf 69354 69356 70468\nf 69354 70468 70466\nf 69355 70465 70467\nf 69355 70467 69357\nf 69356 69364 70473\nf 69356 70473 70468\nf 69357 70467 70469\nf 69357 70469 69365\nf 69358 69368 69370\nf 69358 69370 70476\nf 69358 70470 69359\nf 69358 70476 70470\nf 69359 70470 70471\nf 69359 70471 69360\nf 69360 70471 70472\nf 69360 70472 69361\nf 69361 70472 69362\nf 69362 69371 69373\nf 69362 69373 69363\nf 69362 70472 69371\nf 69363 69373 69372\nf 69364 69385 70492\nf 69364 70492 70473\nf 69365 70469 70474\nf 69365 70474 69386\nf 69366 69390 69392\nf 69366 69392 69393\nf 69366 69393 69367\nf 69367 69393 70499\nf 69367 70475 69369\nf 69367 70499 70475\nf 69368 69369 69370\nf 69369 70475 70477\nf 69369 70477 69370\nf 69370 70477 70476\nf 69371 70472 70478\nf 69371 70478 70480\nf 69371 70480 69373\nf 69372 69373 70481\nf 69372 70481 69374\nf 69373 70480 70481\nf 69374 70481 70482\nf 69374 70482 70483\nf 69374 70483 69375\nf 69375 70483 70484\nf 69375 70484 69376\nf 69376 70484 69377\nf 69377 69395 69394\nf 69377 70484 69395\nf 69378 69414 70524\nf 69378 70485 70486\nf 69378 70486 69379\nf 69378 70524 70485\nf 69379 70486 70487\nf 69379 70487 69380\nf 69380 70487 70488\nf 69380 70488 69381\nf 69381 70488 70489\nf 69381 70489 69382\nf 69382 70489 70490\nf 69382 70490 69383\nf 69383 70490 70491\nf 69383 70491 69384\nf 69384 70491 69416\nf 69385 69421 70532\nf 69385 70532 70492\nf 69386 70474 70493\nf 69386 70493 69422\nf 69387 69424 70534\nf 69387 70494 70495\nf 69387 70495 69388\nf 69387 70534 70494\nf 69388 70495 70496\nf 69388 70496 69389\nf 69389 70496 70497\nf 69389 70497 69391\nf 69390 69391 69392\nf 69391 70497 70498\nf 69391 70498 69392\nf 69392 70498 69393\nf 69393 70498 70500\nf 69393 70500 70499\nf 69394 69395 70503\nf 69394 70503 69396\nf 69395 70484 70501\nf 69395 70501 70503\nf 69396 70503 70504\nf 69396 70504 70505\nf 69396 70505 69397\nf 69397 70505 70506\nf 69397 70506 69398\nf 69398 70506 70507\nf 69398 70507 69399\nf 69399 70507 69400\nf 69400 69427 69426\nf 69400 70507 69427\nf 69401 69454 69456\nf 69401 69456 70510\nf 69401 70510 70511\nf 69401 70511 70512\nf 69401 70512 69402\nf 69402 70512 70513\nf 69402 70513 69403\nf 69403 70513 70514\nf 69403 70514 69404\nf 69404 70514 70515\nf 69404 70515 69405\nf 69405 70515 70516\nf 69405 70516 69406\nf 69406 70516 70517\nf 69406 70517 69407\nf 69407 70517 70518\nf 69407 70518 69408\nf 69408 70518 70519\nf 69408 70519 69409\nf 69409 70519 70520\nf 69409 70520 69410\nf 69410 70520 70521\nf 69410 70521 69411\nf 69411 70521 70522\nf 69411 70522 69412\nf 69412 70522 70523\nf 69412 70523 69413\nf 69413 70523 70525\nf 69413 70525 69415\nf 69414 69415 70524\nf 69415 70525 70524\nf 69416 70491 70526\nf 69416 70526 70527\nf 69416 70527 69417\nf 69417 70527 70529\nf 69417 70529 69418\nf 69418 70529 70530\nf 69418 70530 69419\nf 69419 70530 70531\nf 69419 70531 69420\nf 69420 70531 69457\nf 69421 69459 70577\nf 69421 70577 70532\nf 69422 70493 70533\nf 69422 70533 69460\nf 69423 69461 69462\nf 69423 69462 70579\nf 69423 70535 69425\nf 69423 70579 70535\nf 69424 69425 70534\nf 69425 70535 70534\nf 69426 69427 70538\nf 69426 70538 69428\nf 69427 70507 70537\nf 69427 70537 70538\nf 69428 70538 70539\nf 69428 70539 70540\nf 69428 70540 69429\nf 69429 70540 70541\nf 69429 70541 69430\nf 69430 70541 70542\nf 69430 70542 69431\nf 69431 70542 70543\nf 69431 70543 69432\nf 69432 70543 70544\nf 69432 70544 69433\nf 69433 70544 70545\nf 69433 70545 69434\nf 69434 70545 70546\nf 69434 70546 69435\nf 69435 70546 70547\nf 69435 70547 69436\nf 69436 70547 70548\nf 69436 70548 69437\nf 69437 70548 70550\nf 69437 70550 69438\nf 69438 70550 70552\nf 69438 70552 69439\nf 69439 70552 70554\nf 69439 70554 69440\nf 69440 70554 70556\nf 69440 70556 69441\nf 69441 70556 70558\nf 69441 70558 69442\nf 69442 70558 70560\nf 69442 70560 69443\nf 69443 70560 70562\nf 69443 70562 69444\nf 69444 70562 70564\nf 69444 70564 69445\nf 69445 70564 70566\nf 69445 70566 69446\nf 69446 70566 70568\nf 69446 70568 69447\nf 69447 70568 70570\nf 69447 70570 69448\nf 69448 70570 70573\nf 69448 70573 69449\nf 69449 70573 69450\nf 69450 69451 69452\nf 69450 70572 69451\nf 69450 70573 70572\nf 69451 69453 69452\nf 69451 70508 70509\nf 69451 70509 69453\nf 69451 70572 70508\nf 69452 69453 69455\nf 69453 69456 69455\nf 69453 70509 70510\nf 69453 70510 69456\nf 69454 69455 69456\nf 69457 70531 70575\nf 69457 70575 70576\nf 69457 70576 69458\nf 69458 70576 69463\nf 69459 69465 70585\nf 69459 70585 70577\nf 69460 70533 70578\nf 69460 70578 69466\nf 69461 69467 70587\nf 69461 70587 69462\nf 69462 70580 70579\nf 69462 70587 70580\nf 69463 70576 70582\nf 69463 70582 70583\nf 69463 70583 69464\nf 69464 70583 69468\nf 69465 69470 70589\nf 69465 70589 70585\nf 69466 70578 70586\nf 69466 70586 69471\nf 69467 69472 70591\nf 69467 70591 70587\nf 69468 69474 69469\nf 69468 70583 70588\nf 69468 70588 70592\nf 69468 70592 69474\nf 69469 69474 69473\nf 69470 69475 70594\nf 69470 70594 70589\nf 69471 70586 70590\nf 69471 70590 69476\nf 69472 69477 70596\nf 69472 70596 70591\nf 69473 69474 70593\nf 69473 70593 70597\nf 69473 70597 69479\nf 69474 70592 70593\nf 69475 69480 70598\nf 69475 70598 70594\nf 69476 70590 70595\nf 69476 70595 69481\nf 69477 69478 70600\nf 69477 70600 70596\nf 69478 69482 69483\nf 69478 69483 70600\nf 69479 70597 69484\nf 69480 69485 70603\nf 69480 70603 70598\nf 69481 70595 70599\nf 69481 70599 69486\nf 69482 69487 70605\nf 69482 70605 69483\nf 69483 70601 70600\nf 69483 70605 70601\nf 69484 70597 70602\nf 69484 70602 69488\nf 69485 69490 70608\nf 69485 70608 70603\nf 69486 70599 70604\nf 69486 70604 69491\nf 69487 69492 70610\nf 69487 70610 70605\nf 69488 69494 69489\nf 69488 70602 70607\nf 69488 70607 70612\nf 69488 70612 69494\nf 69489 69494 69493\nf 69490 69495 70613\nf 69490 70613 70608\nf 69491 70604 70609\nf 69491 70609 69496\nf 69492 69497 70615\nf 69492 70615 70610\nf 69493 69494 69499\nf 69493 69499 69498\nf 69494 70612 69499\nf 69495 69500 70618\nf 69495 70618 70613\nf 69496 70609 70614\nf 69496 70614 69501\nf 69497 69502 70620\nf 69497 70620 70615\nf 69498 69499 69504\nf 69498 69504 69503\nf 69499 70612 70617\nf 69499 70617 69504\nf 69500 69505 70623\nf 69500 70623 70618\nf 69501 70614 70619\nf 69501 70619 69506\nf 69502 69507 70625\nf 69502 70625 70620\nf 69503 69504 69510\nf 69503 69510 69508\nf 69504 70617 70622\nf 69504 70622 69510\nf 69505 69511 70628\nf 69505 70628 70623\nf 69506 70619 70624\nf 69506 70624 69512\nf 69507 69514 70631\nf 69507 70631 70625\nf 69508 69510 69509\nf 69509 69510 70627\nf 69509 70627 69515\nf 69510 70622 70627\nf 69511 69516 70634\nf 69511 70634 70628\nf 69512 70624 70629\nf 69512 70629 70630\nf 69512 70630 69513\nf 69513 70630 69517\nf 69514 69518 70636\nf 69514 70636 70631\nf 69515 70627 70633\nf 69515 70633 69519\nf 69516 69520 70639\nf 69516 70639 70634\nf 69517 70630 70635\nf 69517 70635 69521\nf 69518 69522 70641\nf 69518 70641 70636\nf 69519 70633 70638\nf 69519 70638 69523\nf 69520 69524 70644\nf 69520 70644 70639\nf 69521 70635 70640\nf 69521 70640 69525\nf 69522 69526 70646\nf 69522 70646 70641\nf 69523 70638 70643\nf 69523 70643 69527\nf 69524 69528 70648\nf 69524 70648 70644\nf 69525 70640 70645\nf 69525 70645 69529\nf 69526 69530 70650\nf 69526 70650 70646\nf 69527 70643 70647\nf 69527 70647 69531\nf 69528 69532 70652\nf 69528 70652 70648\nf 69529 70645 70649\nf 69529 70649 69533\nf 69530 69534 70654\nf 69530 70654 70650\nf 69531 70647 70651\nf 69531 70651 69535\nf 69532 69536 70656\nf 69532 70656 70652\nf 69533 70649 70653\nf 69533 70653 69537\nf 69534 69538 70658\nf 69534 70658 70654\nf 69535 70651 70655\nf 69535 70655 69539\nf 69536 69540 70660\nf 69536 70660 70656\nf 69537 70653 70657\nf 69537 70657 69541\nf 69538 69542 70662\nf 69538 70662 70658\nf 69539 70655 70659\nf 69539 70659 69543\nf 69540 69544 70664\nf 69540 70664 70660\nf 69541 70657 70661\nf 69541 70661 69545\nf 69542 69546 70666\nf 69542 70666 70662\nf 69543 70659 70663\nf 69543 70663 69547\nf 69544 69548 70668\nf 69544 70668 70664\nf 69545 70661 70665\nf 69545 70665 69549\nf 69546 69550 70670\nf 69546 70670 70666\nf 69547 70663 70667\nf 69547 70667 69551\nf 69548 69552 70673\nf 69548 70673 70668\nf 69549 70665 70669\nf 69549 70669 69553\nf 69550 69554 70675\nf 69550 70675 70670\nf 69551 70667 70671\nf 69551 70671 69555\nf 69552 69557 70678\nf 69552 70678 70673\nf 69553 70669 70674\nf 69553 70674 69558\nf 69554 69559 70680\nf 69554 70680 70675\nf 69555 69561 69556\nf 69555 70671 70676\nf 69555 70676 70681\nf 69555 70681 69561\nf 69556 69561 69560\nf 69557 69562 70684\nf 69557 70684 70678\nf 69558 70674 70679\nf 69558 70679 69563\nf 69559 69564 70686\nf 69559 70686 70680\nf 69560 69561 70682\nf 69560 70682 70687\nf 69560 70687 69565\nf 69561 70681 70682\nf 69562 69566 70688\nf 69562 70688 70684\nf 69563 70679 70685\nf 69563 70685 69567\nf 69564 69568 70690\nf 69564 70690 70686\nf 69565 70687 69569\nf 69566 69570 70692\nf 69566 70692 70688\nf 69567 70685 70689\nf 69567 70689 69571\nf 69568 69573 70695\nf 69568 70695 70690\nf 69569 70687 70691\nf 69569 70691 69574\nf 69570 69575 70697\nf 69570 70697 70692\nf 69571 70689 70693\nf 69571 70693 70694\nf 69571 70694 69572\nf 69572 70694 69576\nf 69573 69577 70699\nf 69573 70699 70695\nf 69574 70691 70696\nf 69574 70696 69578\nf 69575 69579 70701\nf 69575 70701 70697\nf 69576 70694 70698\nf 69576 70698 69580\nf 69577 69581 70703\nf 69577 70703 70699\nf 69578 70696 70700\nf 69578 70700 69582\nf 69579 69583 70705\nf 69579 70705 70701\nf 69580 70698 70702\nf 69580 70702 69584\nf 69581 69585 70707\nf 69581 70707 70703\nf 69582 70700 70704\nf 69582 70704 69586\nf 69583 69587 70709\nf 69583 70709 70705\nf 69584 70702 70706\nf 69584 70706 69588\nf 69585 69589 70711\nf 69585 70711 70707\nf 69586 70704 70708\nf 69586 70708 69590\nf 69587 69591 70713\nf 69587 70713 70709\nf 69588 70706 70710\nf 69588 70710 69592\nf 69589 69593 70715\nf 69589 70715 70711\nf 69590 70708 70712\nf 69590 70712 69594\nf 69591 69595 70717\nf 69591 70717 70713\nf 69592 70710 70714\nf 69592 70714 69596\nf 69593 69597 70719\nf 69593 70719 70715\nf 69594 70712 70716\nf 69594 70716 69598\nf 69595 69599 70721\nf 69595 70721 70717\nf 69596 70714 70718\nf 69596 70718 69600\nf 69597 69601 70723\nf 69597 70723 70719\nf 69598 70716 70720\nf 69598 70720 69602\nf 69599 69603 70725\nf 69599 70725 70721\nf 69600 70718 70722\nf 69600 70722 69604\nf 69601 69605 70727\nf 69601 70727 70723\nf 69602 70720 70724\nf 69602 70724 69606\nf 69603 69607 70729\nf 69603 70729 70725\nf 69604 70722 70726\nf 69604 70726 69608\nf 69605 69609 70731\nf 69605 70731 70727\nf 69606 70724 70728\nf 69606 70728 69610\nf 69607 69611 70733\nf 69607 70733 70729\nf 69608 70726 70730\nf 69608 70730 69612\nf 69609 69613 70735\nf 69609 70735 70731\nf 69610 70728 70732\nf 69610 70732 69614\nf 69611 69615 70737\nf 69611 70737 70733\nf 69612 70730 70734\nf 69612 70734 69616\nf 69613 69617 70739\nf 69613 70739 70735\nf 69614 70732 70736\nf 69614 70736 69618\nf 69615 69619 70741\nf 69615 70741 70737\nf 69616 70734 70738\nf 69616 70738 69620\nf 69617 69621 70743\nf 69617 70743 70739\nf 69618 70736 70740\nf 69618 70740 69622\nf 69619 69623 70745\nf 69619 70745 70741\nf 69620 70738 70742\nf 69620 70742 69624\nf 69621 69625 70747\nf 69621 70747 70743\nf 69622 70740 70744\nf 69622 70744 69626\nf 69623 69627 70749\nf 69623 70749 70745\nf 69624 70742 70746\nf 69624 70746 69628\nf 69625 69629 70751\nf 69625 70751 70747\nf 69626 70744 70748\nf 69626 70748 69630\nf 69627 69631 70753\nf 69627 70753 70749\nf 69628 70746 70750\nf 69628 70750 69632\nf 69629 69633 70755\nf 69629 70755 70751\nf 69630 70748 70752\nf 69630 70752 69634\nf 69631 69635 70757\nf 69631 70757 70753\nf 69632 70750 70754\nf 69632 70754 69636\nf 69633 69637 70759\nf 69633 70759 70755\nf 69634 70752 70756\nf 69634 70756 69638\nf 69635 69639 70761\nf 69635 70761 70757\nf 69636 70754 70758\nf 69636 70758 69640\nf 69637 69642 70763\nf 69637 70763 70759\nf 69638 70756 70760\nf 69638 70760 69643\nf 69639 69644 70766\nf 69639 70766 70761\nf 69640 69647 69641\nf 69640 70758 70762\nf 69640 70762 70768\nf 69640 70768 69647\nf 69641 69647 69646\nf 69642 69648 70769\nf 69642 70769 70763\nf 69643 70760 70765\nf 69643 70765 69649\nf 69644 69645 70766\nf 69645 69650 70772\nf 69645 70767 70766\nf 69645 70772 70767\nf 69646 69647 69652\nf 69646 69652 69651\nf 69647 70768 69652\nf 69648 69653 70775\nf 69648 70775 70769\nf 69649 70765 70771\nf 69649 70771 69654\nf 69650 69655 70780\nf 69650 70780 70772\nf 69651 69652 69657\nf 69651 69657 69656\nf 69652 70768 70774\nf 69652 70774 69657\nf 69653 69658 70775\nf 69654 70771 70778\nf 69654 70778 69660\nf 69655 69663 70786\nf 69655 70786 70780\nf 69656 69657 70783\nf 69656 70783 70787\nf 69656 70787 69664\nf 69657 70774 70782\nf 69657 70782 70783\nf 69658 69659 70776\nf 69658 69665 69659\nf 69658 70776 70775\nf 69659 69665 69667\nf 69659 69667 70788\nf 69659 70784 70776\nf 69659 70788 70784\nf 69660 69662 69661\nf 69660 70778 69662\nf 69661 69662 70785\nf 69661 70785 69668\nf 69662 70778 70779\nf 69662 70779 70785\nf 69663 69669 70790\nf 69663 70790 70786\nf 69664 70787 69670\nf 69665 69666 69667\nf 69666 69671 69667\nf 69667 69671 70788\nf 69668 70785 70789\nf 69668 70789 69672\nf 69669 69673 70794\nf 69669 70794 70790\nf 69670 70787 70791\nf 69670 70791 69674\nf 69671 69675 70796\nf 69671 70792 70788\nf 69671 70796 70792\nf 69672 70789 70793\nf 69672 70793 69676\nf 69673 69678 70801\nf 69673 70801 70794\nf 69674 70791 70795\nf 69674 70795 69680\nf 69675 69681 70796\nf 69676 70793 70798\nf 69676 70798 69677\nf 69677 70798 70799\nf 69677 70799 70808\nf 69677 70808 69684\nf 69678 69679 70802\nf 69678 70802 70801\nf 69679 69685 70802\nf 69680 70795 70803\nf 69680 70803 69686\nf 69681 69682 69683\nf 69681 69683 70797\nf 69681 70797 70796\nf 69682 69688 69690\nf 69682 69690 70807\nf 69682 70807 69683\nf 69683 70806 70797\nf 69683 70807 70806\nf 69684 70808 69693\nf 69685 69695 70821\nf 69685 70809 70802\nf 69685 70821 70809\nf 69686 69687 69697\nf 69686 69697 69696\nf 69686 70803 69687\nf 69687 70803 70804\nf 69687 70804 70810\nf 69687 70810 69697\nf 69688 69689 69690\nf 69689 69691 70812\nf 69689 70812 69690\nf 69690 70811 70807\nf 69690 70812 70811\nf 69691 69692 70812\nf 69692 69698 70814\nf 69692 70813 70812\nf 69692 70814 70813\nf 69693 70808 70819\nf 69693 70819 69694\nf 69694 69763 69761\nf 69694 70818 69763\nf 69694 70819 70820\nf 69694 70820 70818\nf 69695 69764 70891\nf 69695 70891 70821\nf 69696 69697 69766\nf 69696 69766 69765\nf 69697 70810 70822\nf 69697 70822 69766\nf 69698 69699 69700\nf 69698 69700 70814\nf 69699 69701 69700\nf 69700 69701 69702\nf 69700 69702 70815\nf 69700 70815 70814\nf 69701 69703 69702\nf 69702 69703 69704\nf 69702 69704 70816\nf 69702 70816 70815\nf 69703 69705 70824\nf 69703 70824 69704\nf 69704 70823 70816\nf 69704 70824 70823\nf 69705 69706 70824\nf 69706 69707 70825\nf 69706 70825 70824\nf 69707 69708 70826\nf 69707 70826 70825\nf 69708 69709 70827\nf 69708 70827 70826\nf 69709 69710 70828\nf 69709 70828 70827\nf 69710 69711 70829\nf 69710 70829 70828\nf 69711 69712 70830\nf 69711 70830 70829\nf 69712 69713 70831\nf 69712 70831 70830\nf 69713 69714 70832\nf 69713 70832 70831\nf 69714 69715 70833\nf 69714 70833 70832\nf 69715 69716 70834\nf 69715 70834 70833\nf 69716 69717 70835\nf 69716 70835 70834\nf 69717 69718 70836\nf 69717 70836 70835\nf 69718 69719 70837\nf 69718 70837 70836\nf 69719 69720 70838\nf 69719 70838 70837\nf 69720 69721 70839\nf 69720 70839 70838\nf 69721 69722 70840\nf 69721 70840 70839\nf 69722 69723 70841\nf 69722 70841 70840\nf 69723 69724 70842\nf 69723 70842 70841\nf 69724 69725 70843\nf 69724 70843 70842\nf 69725 69726 70844\nf 69725 70844 70843\nf 69726 69727 70845\nf 69726 70845 70844\nf 69727 69728 70846\nf 69727 70846 70845\nf 69728 69729 70847\nf 69728 70847 70846\nf 69729 69730 70848\nf 69729 70848 70847\nf 69730 69731 70849\nf 69730 70849 70848\nf 69731 69732 70850\nf 69731 70850 70849\nf 69732 69733 70851\nf 69732 70851 70850\nf 69733 69734 70852\nf 69733 70852 70851\nf 69734 69735 70853\nf 69734 70853 70852\nf 69735 69736 70854\nf 69735 70854 70853\nf 69736 69737 70855\nf 69736 70855 70854\nf 69737 69738 70856\nf 69737 70856 70855\nf 69738 69739 70857\nf 69738 70857 70856\nf 69739 69740 70858\nf 69739 70858 70857\nf 69740 69741 70859\nf 69740 70859 70858\nf 69741 69742 70860\nf 69741 70860 70859\nf 69742 69743 70861\nf 69742 70861 70860\nf 69743 69744 70862\nf 69743 70862 70861\nf 69744 69745 70863\nf 69744 70863 70862\nf 69745 69746 70864\nf 69745 70864 70863\nf 69746 69747 70865\nf 69746 70865 70864\nf 69747 69748 70866\nf 69747 70866 70865\nf 69748 69749 70867\nf 69748 70867 70866\nf 69749 69750 70868\nf 69749 70868 70867\nf 69750 69751 70869\nf 69750 70869 70868\nf 69751 69752 70870\nf 69751 70870 70869\nf 69752 69753 70871\nf 69752 70871 70870\nf 69753 69754 70872\nf 69753 70872 70871\nf 69754 69755 70873\nf 69754 70873 70872\nf 69755 69756 70874\nf 69755 70874 70873\nf 69756 69767 70876\nf 69756 70875 70874\nf 69756 70876 70875\nf 69757 69758 70888\nf 69757 69792 69790\nf 69757 70887 69792\nf 69757 70888 70887\nf 69758 69759 70890\nf 69758 70890 70888\nf 69759 69760 70889\nf 69759 69762 69760\nf 69759 70889 70890\nf 69760 69762 69763\nf 69760 69763 70818\nf 69760 70817 70889\nf 69760 70818 70817\nf 69761 69763 69762\nf 69764 69793 70893\nf 69764 70893 70891\nf 69765 69766 69795\nf 69765 69795 69794\nf 69766 70822 70892\nf 69766 70892 69795\nf 69767 69768 69769\nf 69767 69769 70876\nf 69768 69770 69769\nf 69769 69770 69771\nf 69769 69771 70877\nf 69769 70877 70876\nf 69770 69772 69771\nf 69771 69772 69773\nf 69771 69773 70878\nf 69771 70878 70877\nf 69772 69774 69773\nf 69773 69774 69775\nf 69773 69775 70879\nf 69773 70879 70878\nf 69774 69776 69775\nf 69775 69776 69777\nf 69775 69777 70880\nf 69775 70880 70879\nf 69776 69778 69777\nf 69777 69778 69779\nf 69777 69779 70881\nf 69777 70881 70880\nf 69778 69780 69779\nf 69779 69780 69781\nf 69779 69781 70882\nf 69779 70882 70881\nf 69780 69782 69781\nf 69781 69782 69783\nf 69781 69783 70883\nf 69781 70883 70882\nf 69782 69784 69783\nf 69783 69784 69785\nf 69783 69785 70884\nf 69783 70884 70883\nf 69784 69786 69785\nf 69785 69786 69787\nf 69785 69787 70885\nf 69785 70885 70884\nf 69786 69788 69787\nf 69787 69788 69789\nf 69787 69789 70886\nf 69787 70886 70885\nf 69788 69791 69789\nf 69789 69791 69792\nf 69789 69792 70887\nf 69789 70887 70886\nf 69790 69792 69791\nf 69793 69796 70895\nf 69793 70895 70893\nf 69794 69795 69798\nf 69794 69798 69797\nf 69795 70892 70894\nf 69795 70894 69798\nf 69796 69799 70897\nf 69796 70897 70895\nf 69797 69798 69801\nf 69797 69801 69800\nf 69798 70894 70896\nf 69798 70896 69801\nf 69799 69802 70899\nf 69799 70899 70897\nf 69800 69801 69805\nf 69800 69805 69803\nf 69801 70896 70898\nf 69801 70898 69805\nf 69802 69806 70901\nf 69802 70901 70899\nf 69803 69805 69804\nf 69804 69805 70900\nf 69804 70900 69807\nf 69805 70898 70900\nf 69806 69808 70903\nf 69806 70903 70901\nf 69807 70900 70902\nf 69807 70902 69809\nf 69808 69810 70905\nf 69808 70905 70903\nf 69809 70902 70904\nf 69809 70904 69811\nf 69810 69813 70907\nf 69810 70907 70905\nf 69811 69815 69812\nf 69811 70904 70906\nf 69811 70906 70908\nf 69811 70908 69815\nf 69812 69815 69814\nf 69813 69816 70910\nf 69813 70910 70907\nf 69814 69815 70909\nf 69814 70909 70911\nf 69814 70911 69817\nf 69815 70908 70909\nf 69816 69818 70913\nf 69816 70913 70910\nf 69817 70911 69819\nf 69818 69820 70916\nf 69818 70916 70913\nf 69819 70911 70914\nf 69819 70914 69821\nf 69820 69822 70919\nf 69820 70919 70916\nf 69821 70914 70917\nf 69821 70917 69823\nf 69822 69824 70922\nf 69822 70922 70919\nf 69823 70917 70920\nf 69823 70920 69825\nf 69824 69826 70925\nf 69824 70925 70922\nf 69825 70920 70923\nf 69825 70923 69828\nf 69826 69827 70925\nf 69827 69829 70929\nf 69827 70926 70925\nf 69827 70929 70926\nf 69828 70923 70927\nf 69828 70927 69831\nf 69829 69830 70929\nf 69830 69833 70932\nf 69830 70930 70929\nf 69830 70932 70930\nf 69831 70927 70931\nf 69831 70931 69835\nf 69832 69892 69894\nf 69832 69894 71003\nf 69832 70933 69834\nf 69832 71003 70933\nf 69833 69834 70932\nf 69834 70933 70932\nf 69835 70931 70934\nf 69835 70934 69895\nf 69836 69934 69936\nf 69836 69936 70945\nf 69836 70945 70946\nf 69836 70946 70947\nf 69836 70947 69837\nf 69837 70947 70948\nf 69837 70948 69838\nf 69838 70948 70949\nf 69838 70949 69839\nf 69839 70949 70950\nf 69839 70950 69840\nf 69840 70950 70951\nf 69840 70951 69841\nf 69841 70951 70952\nf 69841 70952 69842\nf 69842 70952 70953\nf 69842 70953 69843\nf 69843 70953 70954\nf 69843 70954 69844\nf 69844 70954 70955\nf 69844 70955 69845\nf 69845 70955 70956\nf 69845 70956 69846\nf 69846 70956 70957\nf 69846 70957 69847\nf 69847 70957 70958\nf 69847 70958 69848\nf 69848 70958 70959\nf 69848 70959 69849\nf 69849 70959 70960\nf 69849 70960 69850\nf 69850 70960 70961\nf 69850 70961 69851\nf 69851 70961 70962\nf 69851 70962 69852\nf 69852 70962 70963\nf 69852 70963 69853\nf 69853 70963 70964\nf 69853 70964 69854\nf 69854 70964 70965\nf 69854 70965 69855\nf 69855 70965 70966\nf 69855 70966 69856\nf 69856 70966 70967\nf 69856 70967 69857\nf 69857 70967 70968\nf 69857 70968 69858\nf 69858 70968 70969\nf 69858 70969 69859\nf 69859 70969 70970\nf 69859 70970 69860\nf 69860 70970 70971\nf 69860 70971 69861\nf 69861 70971 70972\nf 69861 70972 69862\nf 69862 70972 70973\nf 69862 70973 69863\nf 69863 70973 70974\nf 69863 70974 69864\nf 69864 70974 70975\nf 69864 70975 69865\nf 69865 70975 70976\nf 69865 70976 69866\nf 69866 70976 70977\nf 69866 70977 69867\nf 69867 70977 70978\nf 69867 70978 69868\nf 69868 70978 70979\nf 69868 70979 69869\nf 69869 70979 70980\nf 69869 70980 69870\nf 69870 70980 70981\nf 69870 70981 69871\nf 69871 70981 70982\nf 69871 70982 69872\nf 69872 70982 70983\nf 69872 70983 69873\nf 69873 70983 70984\nf 69873 70984 69874\nf 69874 70984 70985\nf 69874 70985 69875\nf 69875 70985 70986\nf 69875 70986 69876\nf 69876 70986 70987\nf 69876 70987 69877\nf 69877 70987 70988\nf 69877 70988 69878\nf 69878 70988 70989\nf 69878 70989 69879\nf 69879 70989 70990\nf 69879 70990 69880\nf 69880 70990 70991\nf 69880 70991 69881\nf 69881 70991 70992\nf 69881 70992 69882\nf 69882 70992 70993\nf 69882 70993 69883\nf 69883 70993 70994\nf 69883 70994 69884\nf 69884 70994 70995\nf 69884 70995 69885\nf 69885 70995 70996\nf 69885 70996 69886\nf 69886 70996 70997\nf 69886 70997 69887\nf 69887 70997 70998\nf 69887 70998 69888\nf 69888 70998 70999\nf 69888 70999 69889\nf 69889 70999 71000\nf 69889 71000 69890\nf 69890 71000 71001\nf 69890 71001 69891\nf 69891 71001 71002\nf 69891 71002 69893\nf 69892 69893 69894\nf 69893 71002 71004\nf 69893 71004 69894\nf 69894 71004 71003\nf 69895 70934 71005\nf 69895 71005 69937\nf 69896 69939 71038\nf 69896 71006 71007\nf 69896 71007 69897\nf 69896 71038 71006\nf 69897 71007 71008\nf 69897 71008 69898\nf 69898 71008 71009\nf 69898 71009 69899\nf 69899 71009 71010\nf 69899 71010 69900\nf 69900 71010 71011\nf 69900 71011 69901\nf 69901 71011 71012\nf 69901 71012 69902\nf 69902 71012 71013\nf 69902 71013 69903\nf 69903 71013 71014\nf 69903 71014 69904\nf 69904 71014 71015\nf 69904 71015 69905\nf 69905 71015 71016\nf 69905 71016 69906\nf 69906 71016 71017\nf 69906 71017 69907\nf 69907 71017 71018\nf 69907 71018 69908\nf 69908 71018 71019\nf 69908 71019 69909\nf 69909 71019 71020\nf 69909 71020 69910\nf 69910 71020 71021\nf 69910 71021 69911\nf 69911 71021 71023\nf 69911 71023 69912\nf 69912 71023 71026\nf 69912 71026 69913\nf 69913 71026 69914\nf 69914 69915 69916\nf 69914 71025 69915\nf 69914 71026 71025\nf 69915 69917 69916\nf 69915 70935 70936\nf 69915 70936 69917\nf 69915 71025 70935\nf 69916 69917 69918\nf 69917 69919 69918\nf 69917 70936 70937\nf 69917 70937 69919\nf 69918 69919 69920\nf 69919 69921 69920\nf 69919 70937 70938\nf 69919 70938 69921\nf 69920 69921 69922\nf 69921 69923 69922\nf 69921 70938 70939\nf 69921 70939 69923\nf 69922 69923 69924\nf 69923 69925 69924\nf 69923 70939 70940\nf 69923 70940 69925\nf 69924 69925 69926\nf 69925 69927 69926\nf 69925 70940 70941\nf 69925 70941 69927\nf 69926 69927 69928\nf 69927 69929 69928\nf 69927 70941 70942\nf 69927 70942 69929\nf 69928 69929 69930\nf 69929 69931 69930\nf 69929 70942 70943\nf 69929 70943 69931\nf 69930 69931 69932\nf 69931 69933 69932\nf 69931 70943 70944\nf 69931 70944 69933\nf 69932 69933 69935\nf 69933 69936 69935\nf 69933 70944 70945\nf 69933 70945 69936\nf 69934 69935 69936\nf 69937 71005 71035\nf 69937 71035 69941\nf 69938 69942 71043\nf 69938 71037 71039\nf 69938 71039 69940\nf 69938 71043 71037\nf 69939 69940 71038\nf 69940 71039 71038\nf 69941 71035 71040\nf 69941 71040 69944\nf 69942 69943 71045\nf 69942 71045 71043\nf 69943 69946 69947\nf 69943 69947 71045\nf 69944 69945 69949\nf 69944 69949 69948\nf 69944 71040 69945\nf 69945 71040 71041\nf 69945 71041 71044\nf 69945 71044 69949\nf 69946 69950 71049\nf 69946 71049 69947\nf 69947 71046 71045\nf 69947 71049 71046\nf 69948 69949 69952\nf 69948 69952 69951\nf 69949 71044 71048\nf 69949 71048 69952\nf 69950 69953 71051\nf 69950 71051 71049\nf 69951 69952 69955\nf 69951 69955 69954\nf 69952 71048 71050\nf 69952 71050 69955\nf 69953 69956 71053\nf 69953 71053 71051\nf 69954 69955 69958\nf 69954 69958 69957\nf 69955 71050 71052\nf 69955 71052 69958\nf 69956 69959 71055\nf 69956 71055 71053\nf 69957 69958 69961\nf 69957 69961 69960\nf 69958 71052 71054\nf 69958 71054 69961\nf 69959 69962 71057\nf 69959 71057 71055\nf 69960 69961 69965\nf 69960 69965 69963\nf 69961 71054 71056\nf 69961 71056 69965\nf 69962 69966 71059\nf 69962 71059 71057\nf 69963 69965 69964\nf 69964 69965 71058\nf 69964 71058 69967\nf 69965 71056 71058\nf 69966 69968 71061\nf 69966 71061 71059\nf 69967 71058 71060\nf 69967 71060 69969\nf 69968 69970 71063\nf 69968 71063 71061\nf 69969 71060 71062\nf 69969 71062 69971\nf 69970 69972 71065\nf 69970 71065 71063\nf 69971 71062 71064\nf 69971 71064 69973\nf 69972 69974 71067\nf 69972 71067 71065\nf 69973 71064 71066\nf 69973 71066 69975\nf 69974 69976 71069\nf 69974 71069 71067\nf 69975 71066 71068\nf 69975 71068 69977\nf 69976 69978 71073\nf 69976 71073 71069\nf 69977 71068 71070\nf 69977 71070 69979\nf 69978 69981 71075\nf 69978 71075 71073\nf 69979 69980 69983\nf 69979 69983 69982\nf 69979 71070 69980\nf 69980 71070 71071\nf 69980 71071 71074\nf 69980 71074 69983\nf 69981 69984 71077\nf 69981 71077 71075\nf 69982 69983 69987\nf 69982 69987 69985\nf 69983 71074 71076\nf 69983 71076 69987\nf 69984 69988 71079\nf 69984 71079 71077\nf 69985 69987 69986\nf 69986 69987 71078\nf 69986 71078 69989\nf 69987 71076 71078\nf 69988 69990 71081\nf 69988 71081 71079\nf 69989 71078 71080\nf 69989 71080 69991\nf 69990 69992 71083\nf 69990 71083 71081\nf 69991 71080 71082\nf 69991 71082 69993\nf 69992 69994 71085\nf 69992 71085 71083\nf 69993 71082 71084\nf 69993 71084 69995\nf 69994 69996 71087\nf 69994 71087 71085\nf 69995 71084 71086\nf 69995 71086 69997\nf 69996 69999 71089\nf 69996 71089 71087\nf 69997 70001 69998\nf 69997 71086 71088\nf 69997 71088 71090\nf 69997 71090 70001\nf 69998 70001 70000\nf 69999 70002 71091\nf 69999 71091 71089\nf 70000 70001 70004\nf 70000 70004 70003\nf 70001 71090 70004\nf 70002 70005 71093\nf 70002 71093 71091\nf 70003 70004 70007\nf 70003 70007 70006\nf 70004 71090 71092\nf 70004 71092 70007\nf 70005 70008 71095\nf 70005 71095 71093\nf 70006 70007 70010\nf 70006 70010 70009\nf 70007 71092 71094\nf 70007 71094 70010\nf 70008 70011 71097\nf 70008 71097 71095\nf 70009 70010 70014\nf 70009 70014 70012\nf 70010 71094 71096\nf 70010 71096 70014\nf 70011 70015 71099\nf 70011 71099 71097\nf 70012 70014 70013\nf 70013 70014 71098\nf 70013 71098 70016\nf 70014 71096 71098\nf 70015 70017 71101\nf 70015 71101 71099\nf 70016 71098 71100\nf 70016 71100 70019\nf 70017 70018 71104\nf 70017 71104 71101\nf 70018 70020 70021\nf 70018 70021 71104\nf 70019 71100 71103\nf 70019 71103 70022\nf 70020 70023 71109\nf 70020 71109 70021\nf 70021 71105 71104\nf 70021 71109 71105\nf 70022 71103 71107\nf 70022 71107 70024\nf 70023 70025 71112\nf 70023 71112 71109\nf 70024 71107 71110\nf 70024 71110 70026\nf 70025 70027 71115\nf 70025 71115 71112\nf 70026 71110 71113\nf 70026 71113 70028\nf 70027 70029 71118\nf 70027 71118 71115\nf 70028 71113 71116\nf 70028 71116 70030\nf 70029 70031 71121\nf 70029 71121 71118\nf 70030 71116 71119\nf 70030 71119 70032\nf 70031 70033 71124\nf 70031 71124 71121\nf 70032 71119 71122\nf 70032 71122 70034\nf 70033 70035 71127\nf 70033 71127 71124\nf 70034 71122 71125\nf 70034 71125 70036\nf 70035 70037 71131\nf 70035 71131 71127\nf 70036 71125 71128\nf 70036 71128 70038\nf 70037 70040 71133\nf 70037 71133 71131\nf 70038 70039 70042\nf 70038 70042 70041\nf 70038 71128 70039\nf 70039 71128 71129\nf 70039 71129 71132\nf 70039 71132 70042\nf 70040 70043 71135\nf 70040 71135 71133\nf 70041 70042 70045\nf 70041 70045 70044\nf 70042 71132 71134\nf 70042 71134 70045\nf 70043 70046 71137\nf 70043 71137 71135\nf 70044 70045 70048\nf 70044 70048 70047\nf 70045 71134 71136\nf 70045 71136 70048\nf 70046 70049 71139\nf 70046 71139 71137\nf 70047 70048 70051\nf 70047 70051 70050\nf 70048 71136 71138\nf 70048 71138 70051\nf 70049 70052 71141\nf 70049 71141 71139\nf 70050 70051 70054\nf 70050 70054 70053\nf 70051 71138 71140\nf 70051 71140 70054\nf 70052 70055 71143\nf 70052 71143 71141\nf 70053 70054 70057\nf 70053 70057 70056\nf 70054 71140 71142\nf 70054 71142 70057\nf 70055 70058 71145\nf 70055 71145 71143\nf 70056 70057 70061\nf 70056 70061 70060\nf 70057 71142 71144\nf 70057 71144 70061\nf 70058 70059 71147\nf 70058 71147 71145\nf 70059 70062 70063\nf 70059 70063 71147\nf 70060 70061 70065\nf 70060 70065 70064\nf 70061 71144 71146\nf 70061 71146 70065\nf 70062 70066 70063\nf 70063 70066 70067\nf 70063 70067 71149\nf 70063 71149 71147\nf 70064 70065 70070\nf 70064 70070 70068\nf 70065 71146 71148\nf 70065 71148 70070\nf 70066 70071 70067\nf 70067 70071 70072\nf 70067 70072 71151\nf 70067 71151 71149\nf 70068 70070 70069\nf 70069 70070 71150\nf 70069 71150 70073\nf 70070 71148 71150\nf 70071 70074 70072\nf 70072 70074 70075\nf 70072 70075 71153\nf 70072 71153 71151\nf 70073 71150 71152\nf 70073 71152 70076\nf 70074 70077 70075\nf 70075 70077 70078\nf 70075 70078 71156\nf 70075 71156 71153\nf 70076 71152 71154\nf 70076 71154 70079\nf 70077 70080 70078\nf 70078 70080 70081\nf 70078 70081 71159\nf 70078 71159 71156\nf 70079 71154 71157\nf 70079 71157 70082\nf 70080 70083 70081\nf 70081 70083 70084\nf 70081 70084 71162\nf 70081 71162 71159\nf 70082 71157 71160\nf 70082 71160 70085\nf 70083 70086 70084\nf 70084 70086 70087\nf 70084 70087 71165\nf 70084 71165 71162\nf 70085 71160 71163\nf 70085 71163 70088\nf 70086 70089 71169\nf 70086 71169 70087\nf 70087 71166 71165\nf 70087 71169 71166\nf 70088 71163 71167\nf 70088 71167 70090\nf 70089 70091 71173\nf 70089 71173 71169\nf 70090 71167 71171\nf 70090 71171 70092\nf 70091 70093 71178\nf 70091 71178 71173\nf 70092 71171 71175\nf 70092 71175 70094\nf 70093 70096 71180\nf 70093 71180 71178\nf 70094 70095 70098\nf 70094 70098 70097\nf 70094 71175 70095\nf 70095 71175 71176\nf 70095 71176 71179\nf 70095 71179 70098\nf 70096 70099 71182\nf 70096 71182 71180\nf 70097 70098 70101\nf 70097 70101 70100\nf 70098 71179 71181\nf 70098 71181 70101\nf 70099 70102 71184\nf 70099 71184 71182\nf 70100 70101 70104\nf 70100 70104 70103\nf 70101 71181 71183\nf 70101 71183 70104\nf 70102 70105 71186\nf 70102 71186 71184\nf 70103 70104 70108\nf 70103 70108 70106\nf 70104 71183 71185\nf 70104 71185 70108\nf 70105 70109 71188\nf 70105 71188 71186\nf 70106 70108 70107\nf 70107 70108 71187\nf 70107 71187 70111\nf 70108 71185 71187\nf 70109 70110 71190\nf 70109 71190 71188\nf 70110 70112 70113\nf 70110 70113 71190\nf 70111 71187 71189\nf 70111 71189 70114\nf 70112 70115 70113\nf 70113 70115 70116\nf 70113 70116 71193\nf 70113 71193 71190\nf 70114 71189 71191\nf 70114 71191 70117\nf 70115 70118 70116\nf 70116 70118 70119\nf 70116 70119 71196\nf 70116 71196 71193\nf 70117 71191 71194\nf 70117 71194 70120\nf 70118 70121 70119\nf 70119 70121 70122\nf 70119 70122 71199\nf 70119 71199 71196\nf 70120 71194 71197\nf 70120 71197 70123\nf 70121 70124 71203\nf 70121 71203 70122\nf 70122 71200 71199\nf 70122 71203 71200\nf 70123 71197 71201\nf 70123 71201 70125\nf 70124 70126 71207\nf 70124 71207 71203\nf 70125 71201 71205\nf 70125 71205 70127\nf 70126 70128 71211\nf 70126 71211 71207\nf 70127 71205 71209\nf 70127 71209 70129\nf 70128 70130 71214\nf 70128 71214 71211\nf 70129 71209 71212\nf 70129 71212 70131\nf 70130 70132 71218\nf 70130 71218 71214\nf 70131 71212 71215\nf 70131 71215 70133\nf 70132 70135 71220\nf 70132 71220 71218\nf 70133 70134 70137\nf 70133 70137 70136\nf 70133 71215 70134\nf 70134 71215 71216\nf 70134 71216 71219\nf 70134 71219 70137\nf 70135 70138 71222\nf 70135 71222 71220\nf 70136 70137 70141\nf 70136 70141 70140\nf 70137 71219 71221\nf 70137 71221 70141\nf 70138 70139 71224\nf 70138 71224 71222\nf 70139 70142 70143\nf 70139 70143 71224\nf 70140 70141 70146\nf 70140 70146 70144\nf 70141 71221 71223\nf 70141 71223 70146\nf 70142 70147 70143\nf 70143 70147 70148\nf 70143 70148 71226\nf 70143 71226 71224\nf 70144 70146 70145\nf 70145 70146 71225\nf 70145 71225 70149\nf 70146 71223 71225\nf 70147 70150 71229\nf 70147 71229 70148\nf 70148 71227 71226\nf 70148 71229 71227\nf 70149 71225 71228\nf 70149 71228 70151\nf 70150 70152 71232\nf 70150 71232 71229\nf 70151 71228 71231\nf 70151 71231 70153\nf 70152 70154 71235\nf 70152 71235 71232\nf 70153 71231 71234\nf 70153 71234 70155\nf 70154 70156 71237\nf 70154 71237 71235\nf 70155 71234 71236\nf 70155 71236 70157\nf 70156 70158 71239\nf 70156 71239 71237\nf 70157 71236 71238\nf 70157 71238 70159\nf 70158 70160 71242\nf 70158 71242 71239\nf 70159 71238 71240\nf 70159 71240 70161\nf 70160 70162 71245\nf 70160 71245 71242\nf 70161 71240 71243\nf 70161 71243 70163\nf 70162 70164 71248\nf 70162 71248 71245\nf 70163 71243 71246\nf 70163 71246 70166\nf 70164 70165 71251\nf 70164 71251 71248\nf 70165 70167 70168\nf 70165 70168 71251\nf 70166 71246 71249\nf 70166 71249 70169\nf 70167 70170 71255\nf 70167 71255 70168\nf 70168 71252 71251\nf 70168 71255 71252\nf 70169 71249 71253\nf 70169 71253 70171\nf 70170 70172 71257\nf 70170 71257 71255\nf 70171 71253 71256\nf 70171 71256 70173\nf 70172 70175 71259\nf 70172 71259 71257\nf 70173 70177 70174\nf 70173 71256 71258\nf 70173 71258 71260\nf 70173 71260 70177\nf 70174 70177 70176\nf 70175 70178 71261\nf 70175 71261 71259\nf 70176 70177 70181\nf 70176 70181 70179\nf 70177 71260 70181\nf 70178 70182 71263\nf 70178 71263 71261\nf 70179 70181 70180\nf 70180 70181 71262\nf 70180 71262 70183\nf 70181 71260 71262\nf 70182 70184 71265\nf 70182 71265 71263\nf 70183 71262 71264\nf 70183 71264 70186\nf 70184 70185 71265\nf 70185 70187 71268\nf 70185 71266 71265\nf 70185 71268 71266\nf 70186 71264 71267\nf 70186 71267 70188\nf 70187 70189 71270\nf 70187 71270 71268\nf 70188 71267 71269\nf 70188 71269 70191\nf 70189 70190 71270\nf 70190 70192 71274\nf 70190 71271 71270\nf 70190 71274 71271\nf 70191 71269 71272\nf 70191 71272 70193\nf 70192 70194 71278\nf 70192 71278 71274\nf 70193 71272 71275\nf 70193 71275 70196\nf 70194 70195 71278\nf 70195 70198 71281\nf 70195 71279 71278\nf 70195 71281 71279\nf 70196 70197 70200\nf 70196 70200 70199\nf 70196 71275 70197\nf 70197 71275 71276\nf 70197 71276 71280\nf 70197 71280 70200\nf 70198 70201 71283\nf 70198 71283 71281\nf 70199 70200 70204\nf 70199 70204 70203\nf 70200 71280 71282\nf 70200 71282 70204\nf 70201 70202 71283\nf 70202 70205 71287\nf 70202 71284 71283\nf 70202 71287 71284\nf 70203 70204 71286\nf 70203 71286 71289\nf 70203 71289 70206\nf 70204 71282 71285\nf 70204 71285 71286\nf 70205 70207 71291\nf 70205 71291 71287\nf 70206 71289 70208\nf 70207 70210 71293\nf 70207 71293 71291\nf 70208 70213 70209\nf 70208 71289 71292\nf 70208 71292 71294\nf 70208 71294 70213\nf 70209 70213 70212\nf 70210 70211 71296\nf 70210 71296 71293\nf 70211 70215 70216\nf 70211 70216 71296\nf 70212 70213 70214\nf 70213 71294 71295\nf 70213 71295 70214\nf 70214 70218 70217\nf 70214 71295 70218\nf 70215 70220 70216\nf 70216 70220 70221\nf 70216 70221 71300\nf 70216 71300 71296\nf 70217 70218 71298\nf 70217 71298 70219\nf 70218 71295 71297\nf 70218 71297 71298\nf 70219 71298 71299\nf 70219 71299 70222\nf 70220 70225 71305\nf 70220 71305 70221\nf 70221 71301 71300\nf 70221 71305 71301\nf 70222 71299 71302\nf 70222 71302 71303\nf 70222 71303 70223\nf 70223 71303 71304\nf 70223 71304 70224\nf 70224 71304 71306\nf 70224 71306 70226\nf 70225 70226 71305\nf 70226 71306 71305\nf 70227 70228 71308\nf 70227 70241 70239\nf 70227 71307 70241\nf 70227 71308 71307\nf 70228 70229 71309\nf 70228 71309 71308\nf 70229 70230 71310\nf 70229 71310 71309\nf 70230 70242 70243\nf 70230 70243 71310\nf 70231 70232 71311\nf 70231 71311 71330\nf 70231 71330 70249\nf 70232 70233 71312\nf 70232 71312 71311\nf 70233 70234 71313\nf 70233 71313 71312\nf 70234 70235 71314\nf 70234 71314 71313\nf 70235 70251 71316\nf 70235 71315 71314\nf 70235 71316 71315\nf 70236 70237 71317\nf 70236 71317 71337\nf 70236 71337 70256\nf 70237 70238 71318\nf 70237 71318 71317\nf 70238 70240 71320\nf 70238 71320 71318\nf 70239 70241 70240\nf 70240 70241 71319\nf 70240 71319 71320\nf 70241 71307 71319\nf 70242 70244 71324\nf 70242 71324 70243\nf 70243 71322 71310\nf 70243 71324 71322\nf 70244 70245 71325\nf 70244 71325 71324\nf 70245 70246 71326\nf 70245 71326 71325\nf 70246 70258 71327\nf 70246 71327 71326\nf 70247 70248 71328\nf 70247 71328 71343\nf 70247 71343 70260\nf 70248 70250 71329\nf 70248 71329 71328\nf 70249 71330 70250\nf 70250 71330 71331\nf 70250 71331 71329\nf 70251 70252 70253\nf 70251 70253 71316\nf 70252 70254 71333\nf 70252 71333 70253\nf 70253 71332 71316\nf 70253 71333 71332\nf 70254 70255 71333\nf 70255 70262 71336\nf 70255 71335 71333\nf 70255 71336 71335\nf 70256 71337 70257\nf 70257 71337 71338\nf 70257 71338 71348\nf 70257 71348 70266\nf 70258 70259 71342\nf 70258 71340 71327\nf 70258 71342 71340\nf 70259 70267 71342\nf 70260 71343 70261\nf 70261 71343 71344\nf 70261 71344 71351\nf 70261 71351 70268\nf 70262 70263 70264\nf 70262 70264 71336\nf 70263 70265 71346\nf 70263 71346 70264\nf 70264 71345 71336\nf 70264 71346 71345\nf 70265 70269 71346\nf 70266 71348 70270\nf 70267 70271 71354\nf 70267 71349 71342\nf 70267 71354 71349\nf 70268 71351 70272\nf 70269 70274 71358\nf 70269 71352 71346\nf 70269 71358 71352\nf 70270 71348 71353\nf 70270 71353 70275\nf 70271 70276 71354\nf 70272 71351 71356\nf 70272 71356 70273\nf 70273 71356 71357\nf 70273 71357 71363\nf 70273 71363 70279\nf 70274 70280 71358\nf 70275 71353 71360\nf 70275 71360 70282\nf 70276 70277 70278\nf 70276 70278 71355\nf 70276 71355 71354\nf 70277 70283 70278\nf 70278 70283 71361\nf 70278 71361 71355\nf 70279 71363 70284\nf 70280 70281 71359\nf 70280 70285 70281\nf 70280 71359 71358\nf 70281 70285 70286\nf 70281 70286 71368\nf 70281 71364 71359\nf 70281 71368 71364\nf 70282 71360 71365\nf 70282 71365 70287\nf 70283 70288 71371\nf 70283 71366 71361\nf 70283 71371 71366\nf 70284 71363 71367\nf 70284 71367 70289\nf 70285 70290 71373\nf 70285 71373 70286\nf 70286 71369 71368\nf 70286 71373 71369\nf 70287 71365 71370\nf 70287 71370 70291\nf 70288 70292 71376\nf 70288 71376 71371\nf 70289 71367 71372\nf 70289 71372 70293\nf 70290 70294 71378\nf 70290 71378 71373\nf 70291 71370 71375\nf 70291 71375 70295\nf 70292 70296 71380\nf 70292 71380 71376\nf 70293 71372 71377\nf 70293 71377 70297\nf 70294 70298 71383\nf 70294 71383 71378\nf 70295 71375 71379\nf 70295 71379 70299\nf 70296 70300 71380\nf 70297 71377 71382\nf 70297 71382 70303\nf 70298 70304 71387\nf 70298 71387 71383\nf 70299 71379 71384\nf 70299 71384 70305\nf 70300 70301 70302\nf 70300 70302 71381\nf 70300 71381 71380\nf 70301 70306 70302\nf 70302 70306 71385\nf 70302 71385 71381\nf 70303 71382 71386\nf 70303 71386 70307\nf 70304 70308 71391\nf 70304 71391 71387\nf 70305 71384 71388\nf 70305 71388 70309\nf 70306 70310 71393\nf 70306 71389 71385\nf 70306 71393 71389\nf 70307 71386 71390\nf 70307 71390 70311\nf 70308 70312 71395\nf 70308 71395 71391\nf 70309 71388 71392\nf 70309 71392 70313\nf 70310 70315 71398\nf 70310 71398 71393\nf 70311 71390 71394\nf 70311 71394 70316\nf 70312 70317 71401\nf 70312 71401 71395\nf 70313 71392 71396\nf 70313 71396 71397\nf 70313 71397 70314\nf 70314 71397 70318\nf 70315 70319 71403\nf 70315 71403 71398\nf 70316 71394 71399\nf 70316 71399 70320\nf 70317 70321 71407\nf 70317 71407 71401\nf 70318 71397 71402\nf 70318 71402 70322\nf 70319 70323 71409\nf 70319 71409 71403\nf 70320 71399 71404\nf 70320 71404 70324\nf 70321 70326 71411\nf 70321 71411 71407\nf 70322 71402 71408\nf 70322 71408 70327\nf 70323 70328 71413\nf 70323 71413 71409\nf 70324 70325 70330\nf 70324 70330 70329\nf 70324 71404 70325\nf 70325 71404 71405\nf 70325 71405 71410\nf 70325 71410 70330\nf 70326 70331 71416\nf 70326 71416 71411\nf 70327 71408 71412\nf 70327 71412 70332\nf 70328 70333 71418\nf 70328 71418 71413\nf 70329 70330 70335\nf 70329 70335 70334\nf 70330 71410 71415\nf 70330 71415 70335\nf 70331 70336 71421\nf 70331 71421 71416\nf 70332 71412 71417\nf 70332 71417 70337\nf 70333 70338 71423\nf 70333 71423 71418\nf 70334 70335 70340\nf 70334 70340 70339\nf 70335 71415 71420\nf 70335 71420 70340\nf 70336 70341 71427\nf 70336 71427 71421\nf 70337 71417 71422\nf 70337 71422 70342\nf 70338 70343 71423\nf 70339 70340 70347\nf 70339 70347 70345\nf 70340 71420 71426\nf 70340 71426 70347\nf 70341 70348 71431\nf 70341 71431 71427\nf 70342 71422 71428\nf 70342 71428 70349\nf 70343 70344 71424\nf 70343 70350 70344\nf 70343 71424 71423\nf 70344 70350 70351\nf 70344 70351 71433\nf 70344 71429 71424\nf 70344 71433 71429\nf 70345 70347 70346\nf 70346 70347 71430\nf 70346 71430 70352\nf 70347 71426 71430\nf 70348 70353 71435\nf 70348 71435 71431\nf 70349 71428 71432\nf 70349 71432 70354\nf 70350 70355 70351\nf 70351 70355 70356\nf 70351 70356 71437\nf 70351 71437 71433\nf 70352 71430 71434\nf 70352 71434 70357\nf 70353 70358 71439\nf 70353 71439 71435\nf 70354 71432 71436\nf 70354 71436 70359\nf 70355 70360 70356\nf 70356 70360 70362\nf 70356 70362 71441\nf 70356 71441 71437\nf 70357 71434 71438\nf 70357 71438 70364\nf 70358 70366 71445\nf 70358 71445 71439\nf 70359 71436 71440\nf 70359 71440 70367\nf 70360 70361 70362\nf 70361 70363 71442\nf 70361 71442 70362\nf 70362 71442 71441\nf 70363 70368 71442\nf 70364 71438 71443\nf 70364 71443 70365\nf 70365 71443 71444\nf 70365 71444 71459\nf 70365 71459 70378\nf 70366 70380 71461\nf 70366 71461 71445\nf 70367 71440 71446\nf 70367 71446 70381\nf 70368 70369 71449\nf 70368 71447 71442\nf 70368 71449 71447\nf 70369 70370 71449\nf 70370 70371 71450\nf 70370 71450 71449\nf 70371 70382 71451\nf 70371 71451 71450\nf 70372 70373 71452\nf 70372 71452 71479\nf 70372 71479 70397\nf 70373 70374 71453\nf 70373 71453 71452\nf 70374 70375 71454\nf 70374 71454 71453\nf 70375 70376 71455\nf 70375 71455 71454\nf 70376 70399 71456\nf 70376 71456 71455\nf 70377 70379 71458\nf 70377 70443 70441\nf 70377 71457 70443\nf 70377 71458 71457\nf 70378 71459 70379\nf 70379 71459 71460\nf 70379 71460 71458\nf 70380 70444 71526\nf 70380 71526 71461\nf 70381 71446 71462\nf 70381 71462 70445\nf 70382 70383 71464\nf 70382 71463 71451\nf 70382 71464 71463\nf 70383 70384 71464\nf 70384 70385 71465\nf 70384 71465 71464\nf 70385 70386 71466\nf 70385 71466 71465\nf 70386 70387 71467\nf 70386 71467 71466\nf 70387 70388 71468\nf 70387 71468 71467\nf 70388 70446 71469\nf 70388 71469 71468\nf 70389 70390 71471\nf 70389 70455 70453\nf 70389 71470 70455\nf 70389 71471 71470\nf 70390 70391 71472\nf 70390 71472 71471\nf 70391 70392 71473\nf 70391 71473 71472\nf 70392 70393 71474\nf 70392 71474 71473\nf 70393 70394 71475\nf 70393 71475 71474\nf 70394 70395 71476\nf 70394 71476 71475\nf 70395 70396 71477\nf 70395 71477 71476\nf 70396 70398 71478\nf 70396 71478 71477\nf 70397 71479 70398\nf 70398 71479 71480\nf 70398 71480 71478\nf 70399 70400 71484\nf 70399 71482 71456\nf 70399 71484 71482\nf 70400 70401 71484\nf 70401 70402 71485\nf 70401 71485 71484\nf 70402 70403 71486\nf 70402 71486 71485\nf 70403 70404 71487\nf 70403 71487 71486\nf 70404 70405 71488\nf 70404 71488 71487\nf 70405 70406 71489\nf 70405 71489 71488\nf 70406 70407 71490\nf 70406 71490 71489\nf 70407 70408 71491\nf 70407 71491 71490\nf 70408 70409 71492\nf 70408 71492 71491\nf 70409 70410 71493\nf 70409 71493 71492\nf 70410 70411 71494\nf 70410 71494 71493\nf 70411 70412 71495\nf 70411 71495 71494\nf 70412 70413 71496\nf 70412 71496 71495\nf 70413 70414 71497\nf 70413 71497 71496\nf 70414 70415 71498\nf 70414 71498 71497\nf 70415 70416 71499\nf 70415 71499 71498\nf 70416 70417 71500\nf 70416 71500 71499\nf 70417 70418 71501\nf 70417 71501 71500\nf 70418 70419 71502\nf 70418 71502 71501\nf 70419 70420 71503\nf 70419 71503 71502\nf 70420 70421 71504\nf 70420 71504 71503\nf 70421 70422 71505\nf 70421 71505 71504\nf 70422 70423 71506\nf 70422 71506 71505\nf 70423 70424 71507\nf 70423 71507 71506\nf 70424 70425 71508\nf 70424 71508 71507\nf 70425 70426 71509\nf 70425 71509 71508\nf 70426 70427 71510\nf 70426 71510 71509\nf 70427 70428 71511\nf 70427 71511 71510\nf 70428 70429 71512\nf 70428 71512 71511\nf 70429 70430 71513\nf 70429 71513 71512\nf 70430 70431 71514\nf 70430 71514 71513\nf 70431 70432 71515\nf 70431 71515 71514\nf 70432 70433 71516\nf 70432 71516 71515\nf 70433 70434 71517\nf 70433 71517 71516\nf 70434 70435 71518\nf 70434 71518 71517\nf 70435 70436 71519\nf 70435 71519 71518\nf 70436 70437 71520\nf 70436 71520 71519\nf 70437 70438 71521\nf 70437 71521 71520\nf 70438 70439 71522\nf 70438 71522 71521\nf 70439 70440 71523\nf 70439 71523 71522\nf 70440 70442 71525\nf 70440 71525 71523\nf 70441 70443 70442\nf 70442 70443 71524\nf 70442 71524 71525\nf 70443 71457 71524\nf 70444 70456 71536\nf 70444 71536 71526\nf 70445 71462 71527\nf 70445 71527 70457\nf 70446 70447 71529\nf 70446 71528 71469\nf 70446 71529 71528\nf 70447 70448 71529\nf 70448 70449 71530\nf 70448 71530 71529\nf 70449 70450 71531\nf 70449 71531 71530\nf 70450 70451 71532\nf 70450 71532 71531\nf 70451 70452 71533\nf 70451 71533 71532\nf 70452 70454 71535\nf 70452 71535 71533\nf 70453 70455 70454\nf 70454 70455 71534\nf 70454 71534 71535\nf 70455 71470 71534\nf 70456 70458 71538\nf 70456 71538 71536\nf 70457 71527 71537\nf 70457 71537 70459\nf 70458 70460 71540\nf 70458 71540 71538\nf 70459 71537 71539\nf 70459 71539 70461\nf 70460 70462 71542\nf 70460 71542 71540\nf 70461 71539 71541\nf 70461 71541 70463\nf 70462 70464 71544\nf 70462 71544 71542\nf 70463 71541 71543\nf 70463 71543 70465\nf 70464 70466 71546\nf 70464 71546 71544\nf 70465 71543 71545\nf 70465 71545 70467\nf 70466 70468 71548\nf 70466 71548 71546\nf 70467 71545 71547\nf 70467 71547 70469\nf 70468 70473 71552\nf 70468 71552 71548\nf 70469 71547 71549\nf 70469 71549 70474\nf 70470 70476 71555\nf 70470 71550 71551\nf 70470 71551 70471\nf 70470 71555 71550\nf 70471 71551 70472\nf 70472 70479 70478\nf 70472 71551 70479\nf 70473 70492 71573\nf 70473 71573 71552\nf 70474 71549 71553\nf 70474 71553 70493\nf 70475 70499 71583\nf 70475 71554 71556\nf 70475 71556 70477\nf 70475 71583 71554\nf 70476 70477 71555\nf 70477 71556 71555\nf 70478 70479 71558\nf 70478 71558 70480\nf 70479 71551 71557\nf 70479 71557 71558\nf 70480 71558 71559\nf 70480 71559 71560\nf 70480 71560 70481\nf 70481 71560 71561\nf 70481 71561 70482\nf 70482 71561 71562\nf 70482 71562 70483\nf 70483 71562 70484\nf 70484 70502 70501\nf 70484 71562 70502\nf 70485 70524 71633\nf 70485 71563 71564\nf 70485 71564 70486\nf 70485 71633 71563\nf 70486 71564 71565\nf 70486 71565 70487\nf 70487 71565 71566\nf 70487 71566 70488\nf 70488 71566 71567\nf 70488 71567 70489\nf 70489 71567 71569\nf 70489 71569 70490\nf 70490 71569 71571\nf 70490 71571 70491\nf 70491 71571 71572\nf 70491 71572 70526\nf 70492 70532 71643\nf 70492 71643 71573\nf 70493 71553 71574\nf 70493 71574 70533\nf 70494 70534 70536\nf 70494 70536 71575\nf 70494 71575 71576\nf 70494 71576 71577\nf 70494 71577 70495\nf 70495 71577 71579\nf 70495 71579 70496\nf 70496 71579 71581\nf 70496 71581 70497\nf 70497 71581 71582\nf 70497 71582 70498\nf 70498 71582 71584\nf 70498 71584 70500\nf 70499 70500 71583\nf 70500 71584 71583\nf 70501 70502 71587\nf 70501 71587 70503\nf 70502 71562 71586\nf 70502 71586 71587\nf 70503 71587 71588\nf 70503 71588 71589\nf 70503 71589 70504\nf 70504 71589 71590\nf 70504 71590 70505\nf 70505 71590 71591\nf 70505 71591 70506\nf 70506 71591 71592\nf 70506 71592 70507\nf 70507 71592 70537\nf 70508 70572 70574\nf 70508 70574 71605\nf 70508 71605 71606\nf 70508 71606 71607\nf 70508 71607 70509\nf 70509 71607 71608\nf 70509 71608 70510\nf 70510 71608 71609\nf 70510 71609 70511\nf 70511 71609 71611\nf 70511 71611 70512\nf 70512 71611 71613\nf 70512 71613 70513\nf 70513 71613 71614\nf 70513 71614 70514\nf 70514 71614 71615\nf 70514 71615 70515\nf 70515 71615 71617\nf 70515 71617 70516\nf 70516 71617 71619\nf 70516 71619 70517\nf 70517 71619 71621\nf 70517 71621 70518\nf 70518 71621 71623\nf 70518 71623 70519\nf 70519 71623 71625\nf 70519 71625 70520\nf 70520 71625 71627\nf 70520 71627 70521\nf 70521 71627 71629\nf 70521 71629 70522\nf 70522 71629 71631\nf 70522 71631 70523\nf 70523 71631 71634\nf 70523 71634 70525\nf 70524 70525 71633\nf 70525 71634 71633\nf 70526 70528 70527\nf 70526 71572 70528\nf 70527 70528 71637\nf 70527 71637 70529\nf 70528 71572 71636\nf 70528 71636 71637\nf 70529 71637 71639\nf 70529 71639 70530\nf 70530 71639 71641\nf 70530 71641 70531\nf 70531 71641 70575\nf 70532 70577 71668\nf 70532 71668 71643\nf 70533 71574 71644\nf 70533 71644 70578\nf 70534 70535 70536\nf 70535 70579 70581\nf 70535 70581 71646\nf 70535 71646 70536\nf 70536 71645 71575\nf 70536 71646 71645\nf 70537 71592 71647\nf 70537 71647 71648\nf 70537 71648 70538\nf 70538 71648 71650\nf 70538 71650 70539\nf 70539 71650 71651\nf 70539 71651 70540\nf 70540 71651 71652\nf 70540 71652 70541\nf 70541 71652 71653\nf 70541 71653 70542\nf 70542 71653 71654\nf 70542 71654 70543\nf 70543 71654 71655\nf 70543 71655 70544\nf 70544 71655 71657\nf 70544 71657 70545\nf 70545 71657 71659\nf 70545 71659 70546\nf 70546 71659 71662\nf 70546 71662 70547\nf 70547 71662 70548\nf 70548 70549 70550\nf 70548 71661 70549\nf 70548 71662 71661\nf 70549 70551 70550\nf 70549 71593 71594\nf 70549 71594 70551\nf 70549 71661 71593\nf 70550 70551 70552\nf 70551 70553 70552\nf 70551 71594 71595\nf 70551 71595 70553\nf 70552 70553 70554\nf 70553 70555 70554\nf 70553 71595 71596\nf 70553 71596 70555\nf 70554 70555 70556\nf 70555 70557 70556\nf 70555 71596 71597\nf 70555 71597 70557\nf 70556 70557 70558\nf 70557 70559 70558\nf 70557 71597 71598\nf 70557 71598 70559\nf 70558 70559 70560\nf 70559 70561 70560\nf 70559 71598 71599\nf 70559 71599 70561\nf 70560 70561 70562\nf 70561 70563 70562\nf 70561 71599 71600\nf 70561 71600 70563\nf 70562 70563 70564\nf 70563 70565 70564\nf 70563 71600 71601\nf 70563 71601 70565\nf 70564 70565 70566\nf 70565 70567 70566\nf 70565 71601 71602\nf 70565 71602 70567\nf 70566 70567 70568\nf 70567 70569 70568\nf 70567 71602 71603\nf 70567 71603 70569\nf 70568 70569 70570\nf 70569 70571 70570\nf 70569 71603 71604\nf 70569 71604 70571\nf 70570 70571 70573\nf 70571 70574 70573\nf 70571 71604 71605\nf 70571 71605 70574\nf 70572 70573 70574\nf 70575 71641 71664\nf 70575 71664 71665\nf 70575 71665 70576\nf 70576 71665 71667\nf 70576 71667 70582\nf 70577 70585 71672\nf 70577 71672 71668\nf 70578 71644 71669\nf 70578 71669 70586\nf 70579 70580 70581\nf 70580 70587 71670\nf 70580 71670 70581\nf 70581 71670 71646\nf 70582 70584 70583\nf 70582 71667 70584\nf 70583 70584 70588\nf 70584 71667 71671\nf 70584 71671 70588\nf 70585 70589 71676\nf 70585 71676 71672\nf 70586 71669 71673\nf 70586 71673 70590\nf 70587 70591 71678\nf 70587 71674 71670\nf 70587 71678 71674\nf 70588 71671 71675\nf 70588 71675 70592\nf 70589 70594 71681\nf 70589 71681 71676\nf 70590 71673 71677\nf 70590 71677 70595\nf 70591 70596 71683\nf 70591 71683 71678\nf 70592 71675 71679\nf 70592 71679 71680\nf 70592 71680 70593\nf 70593 71680 70597\nf 70594 70598 71685\nf 70594 71685 71681\nf 70595 71677 71682\nf 70595 71682 70599\nf 70596 70600 71687\nf 70596 71687 71683\nf 70597 71680 71684\nf 70597 71684 70602\nf 70598 70603 71689\nf 70598 71689 71685\nf 70599 71682 71686\nf 70599 71686 70604\nf 70600 70601 71691\nf 70600 71691 71687\nf 70601 70605 70606\nf 70601 70606 71691\nf 70602 71684 71688\nf 70602 71688 70607\nf 70603 70608 71693\nf 70603 71693 71689\nf 70604 71686 71690\nf 70604 71690 70609\nf 70605 70610 70606\nf 70606 70610 70611\nf 70606 70611 71695\nf 70606 71695 71691\nf 70607 71688 71692\nf 70607 71692 70612\nf 70608 70613 71697\nf 70608 71697 71693\nf 70609 71690 71694\nf 70609 71694 70614\nf 70610 70615 70611\nf 70611 70615 70616\nf 70611 70616 71700\nf 70611 71700 71695\nf 70612 71692 71696\nf 70612 71696 70617\nf 70613 70618 71702\nf 70613 71702 71697\nf 70614 71694 71699\nf 70614 71699 70619\nf 70615 70620 70616\nf 70616 70620 70621\nf 70616 70621 71704\nf 70616 71704 71700\nf 70617 71696 71701\nf 70617 71701 70622\nf 70618 70623 71706\nf 70618 71706 71702\nf 70619 71699 71703\nf 70619 71703 70624\nf 70620 70625 70621\nf 70621 70625 70626\nf 70621 70626 71708\nf 70621 71708 71704\nf 70622 71701 71705\nf 70622 71705 70627\nf 70623 70628 71710\nf 70623 71710 71706\nf 70624 71703 71707\nf 70624 71707 70629\nf 70625 70631 70626\nf 70626 70631 70632\nf 70626 70632 71713\nf 70626 71713 71708\nf 70627 71705 71709\nf 70627 71709 70633\nf 70628 70634 71715\nf 70628 71715 71710\nf 70629 71707 71711\nf 70629 71711 71712\nf 70629 71712 70630\nf 70630 71712 70635\nf 70631 70636 70632\nf 70632 70636 70637\nf 70632 70637 71718\nf 70632 71718 71713\nf 70633 71709 71714\nf 70633 71714 70638\nf 70634 70639 71720\nf 70634 71720 71715\nf 70635 71712 71716\nf 70635 71716 70640\nf 70636 70641 70637\nf 70637 70641 70642\nf 70637 70642 71722\nf 70637 71722 71718\nf 70638 71714 71719\nf 70638 71719 70643\nf 70639 70644 71725\nf 70639 71725 71720\nf 70640 71716 71721\nf 70640 71721 70645\nf 70641 70646 71727\nf 70641 71727 70642\nf 70642 71723 71722\nf 70642 71727 71723\nf 70643 71719 71724\nf 70643 71724 70647\nf 70644 70648 71730\nf 70644 71730 71725\nf 70645 71721 71726\nf 70645 71726 70649\nf 70646 70650 71732\nf 70646 71732 71727\nf 70647 71724 71729\nf 70647 71729 70651\nf 70648 70652 71735\nf 70648 71735 71730\nf 70649 71726 71731\nf 70649 71731 70653\nf 70650 70654 71737\nf 70650 71737 71732\nf 70651 71729 71734\nf 70651 71734 70655\nf 70652 70656 71740\nf 70652 71740 71735\nf 70653 71731 71736\nf 70653 71736 70657\nf 70654 70658 71742\nf 70654 71742 71737\nf 70655 71734 71739\nf 70655 71739 70659\nf 70656 70660 71744\nf 70656 71744 71740\nf 70657 71736 71741\nf 70657 71741 70661\nf 70658 70662 71746\nf 70658 71746 71742\nf 70659 71739 71743\nf 70659 71743 70663\nf 70660 70664 71748\nf 70660 71748 71744\nf 70661 71741 71745\nf 70661 71745 70665\nf 70662 70666 71750\nf 70662 71750 71746\nf 70663 71743 71747\nf 70663 71747 70667\nf 70664 70668 71754\nf 70664 71754 71748\nf 70665 71745 71749\nf 70665 71749 70669\nf 70666 70670 71756\nf 70666 71756 71750\nf 70667 71747 71751\nf 70667 71751 70671\nf 70668 70673 71758\nf 70668 71758 71754\nf 70669 71749 71755\nf 70669 71755 70674\nf 70670 70675 71760\nf 70670 71760 71756\nf 70671 70672 70676\nf 70671 71751 71752\nf 70671 71752 70672\nf 70672 70677 70676\nf 70672 71752 71757\nf 70672 71757 71761\nf 70672 71761 70677\nf 70673 70678 71762\nf 70673 71762 71758\nf 70674 71755 71759\nf 70674 71759 70679\nf 70675 70680 71764\nf 70675 71764 71760\nf 70676 70677 70681\nf 70677 70683 70681\nf 70677 71761 71765\nf 70677 71765 70683\nf 70678 70684 71766\nf 70678 71766 71762\nf 70679 71759 71763\nf 70679 71763 70685\nf 70680 70686 71768\nf 70680 71768 71764\nf 70681 70683 70682\nf 70682 70683 70687\nf 70683 71765 70687\nf 70684 70688 71770\nf 70684 71770 71766\nf 70685 71763 71767\nf 70685 71767 70689\nf 70686 70690 71772\nf 70686 71772 71768\nf 70687 71765 71769\nf 70687 71769 70691\nf 70688 70692 71774\nf 70688 71774 71770\nf 70689 71767 71771\nf 70689 71771 70693\nf 70690 70695 71777\nf 70690 71777 71772\nf 70691 71769 71773\nf 70691 71773 70696\nf 70692 70697 71779\nf 70692 71779 71774\nf 70693 71771 71775\nf 70693 71775 71776\nf 70693 71776 70694\nf 70694 71776 70698\nf 70695 70699 71782\nf 70695 71782 71777\nf 70696 71773 71778\nf 70696 71778 70700\nf 70697 70701 71784\nf 70697 71784 71779\nf 70698 71776 71780\nf 70698 71780 70702\nf 70699 70703 71786\nf 70699 71786 71782\nf 70700 71778 71783\nf 70700 71783 70704\nf 70701 70705 71788\nf 70701 71788 71784\nf 70702 71780 71785\nf 70702 71785 70706\nf 70703 70707 71790\nf 70703 71790 71786\nf 70704 71783 71787\nf 70704 71787 70708\nf 70705 70709 71792\nf 70705 71792 71788\nf 70706 71785 71789\nf 70706 71789 70710\nf 70707 70711 71794\nf 70707 71794 71790\nf 70708 71787 71791\nf 70708 71791 70712\nf 70709 70713 71796\nf 70709 71796 71792\nf 70710 71789 71793\nf 70710 71793 70714\nf 70711 70715 71798\nf 70711 71798 71794\nf 70712 71791 71795\nf 70712 71795 70716\nf 70713 70717 71800\nf 70713 71800 71796\nf 70714 71793 71797\nf 70714 71797 70718\nf 70715 70719 71802\nf 70715 71802 71798\nf 70716 71795 71799\nf 70716 71799 70720\nf 70717 70721 71804\nf 70717 71804 71800\nf 70718 71797 71801\nf 70718 71801 70722\nf 70719 70723 71806\nf 70719 71806 71802\nf 70720 71799 71803\nf 70720 71803 70724\nf 70721 70725 71808\nf 70721 71808 71804\nf 70722 71801 71805\nf 70722 71805 70726\nf 70723 70727 71810\nf 70723 71810 71806\nf 70724 71803 71807\nf 70724 71807 70728\nf 70725 70729 71812\nf 70725 71812 71808\nf 70726 71805 71809\nf 70726 71809 70730\nf 70727 70731 71814\nf 70727 71814 71810\nf 70728 71807 71811\nf 70728 71811 70732\nf 70729 70733 71817\nf 70729 71817 71812\nf 70730 71809 71813\nf 70730 71813 70734\nf 70731 70735 71819\nf 70731 71819 71814\nf 70732 71811 71816\nf 70732 71816 70736\nf 70733 70737 71822\nf 70733 71822 71817\nf 70734 71813 71818\nf 70734 71818 70738\nf 70735 70739 71824\nf 70735 71824 71819\nf 70736 71816 71821\nf 70736 71821 70740\nf 70737 70741 71826\nf 70737 71826 71822\nf 70738 71818 71823\nf 70738 71823 70742\nf 70739 70743 71828\nf 70739 71828 71824\nf 70740 71821 71825\nf 70740 71825 70744\nf 70741 70745 71830\nf 70741 71830 71826\nf 70742 71823 71827\nf 70742 71827 70746\nf 70743 70747 71832\nf 70743 71832 71828\nf 70744 71825 71829\nf 70744 71829 70748\nf 70745 70749 71834\nf 70745 71834 71830\nf 70746 71827 71831\nf 70746 71831 70750\nf 70747 70751 71836\nf 70747 71836 71832\nf 70748 71829 71833\nf 70748 71833 70752\nf 70749 70753 71839\nf 70749 71839 71834\nf 70750 71831 71835\nf 70750 71835 70754\nf 70751 70755 71841\nf 70751 71841 71836\nf 70752 71833 71838\nf 70752 71838 70756\nf 70753 70757 71844\nf 70753 71844 71839\nf 70754 71835 71840\nf 70754 71840 70758\nf 70755 70759 71846\nf 70755 71846 71841\nf 70756 71838 71843\nf 70756 71843 70760\nf 70757 70761 71850\nf 70757 71850 71844\nf 70758 71840 71845\nf 70758 71845 70762\nf 70759 70763 71846\nf 70760 71843 71849\nf 70760 71849 70765\nf 70761 70766 71854\nf 70761 71854 71850\nf 70762 71845 71851\nf 70762 71851 70768\nf 70763 70764 71847\nf 70763 70769 70764\nf 70763 71847 71846\nf 70764 70769 70770\nf 70764 70770 71856\nf 70764 71852 71847\nf 70764 71856 71852\nf 70765 71849 71853\nf 70765 71853 70771\nf 70766 70767 71858\nf 70766 71858 71854\nf 70767 70772 70773\nf 70767 70773 71858\nf 70768 71851 71855\nf 70768 71855 70774\nf 70769 70775 70770\nf 70770 70775 70777\nf 70770 70777 71860\nf 70770 71860 71856\nf 70771 71853 71857\nf 70771 71857 70778\nf 70772 70780 70773\nf 70773 70780 70781\nf 70773 70781 71863\nf 70773 71863 71858\nf 70774 71855 71859\nf 70774 71859 70782\nf 70775 70776 70777\nf 70776 70784 70777\nf 70777 70784 71860\nf 70778 71857 71861\nf 70778 71861 70779\nf 70779 71861 71862\nf 70779 71862 71868\nf 70779 71868 70785\nf 70780 70786 71869\nf 70780 71869 70781\nf 70781 71864 71863\nf 70781 71869 71864\nf 70782 71859 71865\nf 70782 71865 71866\nf 70782 71866 70783\nf 70783 71866 70787\nf 70784 70788 71873\nf 70784 71867 71860\nf 70784 71873 71867\nf 70785 71868 70789\nf 70786 70790 71875\nf 70786 71875 71869\nf 70787 71866 71871\nf 70787 71871 70791\nf 70788 70792 71878\nf 70788 71878 71873\nf 70789 71868 71874\nf 70789 71874 70793\nf 70790 70794 71881\nf 70790 71881 71875\nf 70791 71871 71876\nf 70791 71876 70795\nf 70792 70796 71885\nf 70792 71885 71878\nf 70793 71874 71879\nf 70793 71879 70798\nf 70794 70801 71889\nf 70794 71889 71881\nf 70795 71876 71882\nf 70795 71882 70803\nf 70796 70797 71886\nf 70796 71886 71885\nf 70797 70806 71886\nf 70798 70800 70799\nf 70798 71879 70800\nf 70799 70800 71888\nf 70799 71888 70808\nf 70800 71879 71880\nf 70800 71880 71888\nf 70801 70802 71890\nf 70801 71890 71889\nf 70802 70809 71890\nf 70803 70805 70804\nf 70803 71882 70805\nf 70804 70805 71891\nf 70804 71891 70810\nf 70805 71882 71883\nf 70805 71883 71891\nf 70806 70807 71893\nf 70806 71892 71886\nf 70806 71893 71892\nf 70807 70811 71893\nf 70808 71888 71894\nf 70808 71894 70819\nf 70809 70821 71907\nf 70809 71895 71890\nf 70809 71907 71895\nf 70810 71891 71896\nf 70810 71896 70822\nf 70811 70812 71898\nf 70811 71897 71893\nf 70811 71898 71897\nf 70812 70813 71898\nf 70813 70814 71899\nf 70813 71899 71898\nf 70814 70815 71900\nf 70814 71900 71899\nf 70815 70816 71901\nf 70815 71901 71900\nf 70816 70823 71902\nf 70816 71902 71901\nf 70817 70818 71903\nf 70817 71903 71978\nf 70817 71978 70889\nf 70818 70820 71904\nf 70818 71904 71903\nf 70819 71894 71905\nf 70819 71905 70820\nf 70820 71905 71906\nf 70820 71906 71904\nf 70821 70891 71981\nf 70821 71981 71907\nf 70822 71896 71908\nf 70822 71908 70892\nf 70823 70824 71913\nf 70823 71911 71902\nf 70823 71913 71911\nf 70824 70825 71913\nf 70825 70826 71914\nf 70825 71914 71913\nf 70826 70827 71915\nf 70826 71915 71914\nf 70827 70828 71916\nf 70827 71916 71915\nf 70828 70829 71917\nf 70828 71917 71916\nf 70829 70830 71918\nf 70829 71918 71917\nf 70830 70831 71919\nf 70830 71919 71918\nf 70831 70832 71920\nf 70831 71920 71919\nf 70832 70833 71921\nf 70832 71921 71920\nf 70833 70834 71922\nf 70833 71922 71921\nf 70834 70835 71923\nf 70834 71923 71922\nf 70835 70836 71924\nf 70835 71924 71923\nf 70836 70837 71925\nf 70836 71925 71924\nf 70837 70838 71926\nf 70837 71926 71925\nf 70838 70839 71927\nf 70838 71927 71926\nf 70839 70840 71928\nf 70839 71928 71927\nf 70840 70841 71929\nf 70840 71929 71928\nf 70841 70842 71930\nf 70841 71930 71929\nf 70842 70843 71931\nf 70842 71931 71930\nf 70843 70844 71932\nf 70843 71932 71931\nf 70844 70845 71933\nf 70844 71933 71932\nf 70845 70846 71934\nf 70845 71934 71933\nf 70846 70847 71935\nf 70846 71935 71934\nf 70847 70848 71936\nf 70847 71936 71935\nf 70848 70849 71937\nf 70848 71937 71936\nf 70849 70850 71938\nf 70849 71938 71937\nf 70850 70851 71939\nf 70850 71939 71938\nf 70851 70852 71940\nf 70851 71940 71939\nf 70852 70853 71941\nf 70852 71941 71940\nf 70853 70854 71942\nf 70853 71942 71941\nf 70854 70855 71943\nf 70854 71943 71942\nf 70855 70856 71944\nf 70855 71944 71943\nf 70856 70857 71945\nf 70856 71945 71944\nf 70857 70858 71946\nf 70857 71946 71945\nf 70858 70859 71947\nf 70858 71947 71946\nf 70859 70860 71948\nf 70859 71948 71947\nf 70860 70861 71949\nf 70860 71949 71948\nf 70861 70862 71950\nf 70861 71950 71949\nf 70862 70863 71951\nf 70862 71951 71950\nf 70863 70864 71952\nf 70863 71952 71951\nf 70864 70865 71953\nf 70864 71953 71952\nf 70865 70866 71954\nf 70865 71954 71953\nf 70866 70867 71955\nf 70866 71955 71954\nf 70867 70868 71956\nf 70867 71956 71955\nf 70868 70869 71957\nf 70868 71957 71956\nf 70869 70870 71958\nf 70869 71958 71957\nf 70870 70871 71959\nf 70870 71959 71958\nf 70871 70872 71960\nf 70871 71960 71959\nf 70872 70873 71961\nf 70872 71961 71960\nf 70873 70874 71962\nf 70873 71962 71961\nf 70874 70875 71963\nf 70874 71963 71962\nf 70875 70876 71964\nf 70875 71964 71963\nf 70876 70877 71965\nf 70876 71965 71964\nf 70877 70878 71966\nf 70877 71966 71965\nf 70878 70879 71967\nf 70878 71967 71966\nf 70879 70880 71968\nf 70879 71968 71967\nf 70880 70881 71969\nf 70880 71969 71968\nf 70881 70882 71970\nf 70881 71970 71969\nf 70882 70883 71971\nf 70882 71971 71970\nf 70883 70884 71972\nf 70883 71972 71971\nf 70884 70885 71973\nf 70884 71973 71972\nf 70885 70886 71974\nf 70885 71974 71973\nf 70886 70887 71975\nf 70886 71975 71974\nf 70887 70888 71976\nf 70887 71976 71975\nf 70888 70890 71977\nf 70888 71977 71976\nf 70889 71978 70890\nf 70890 71978 71979\nf 70890 71979 71977\nf 70891 70893 71983\nf 70891 71983 71981\nf 70892 71908 71982\nf 70892 71982 70894\nf 70893 70895 71985\nf 70893 71985 71983\nf 70894 71982 71984\nf 70894 71984 70896\nf 70895 70897 71987\nf 70895 71987 71985\nf 70896 71984 71986\nf 70896 71986 70898\nf 70897 70899 71989\nf 70897 71989 71987\nf 70898 71986 71988\nf 70898 71988 70900\nf 70899 70901 71991\nf 70899 71991 71989\nf 70900 71988 71990\nf 70900 71990 70902\nf 70901 70903 71993\nf 70901 71993 71991\nf 70902 71990 71992\nf 70902 71992 70904\nf 70903 70905 71995\nf 70903 71995 71993\nf 70904 71992 71994\nf 70904 71994 70906\nf 70905 70907 71997\nf 70905 71997 71995\nf 70906 71994 71996\nf 70906 71996 70908\nf 70907 70910 71999\nf 70907 71999 71997\nf 70908 70912 70909\nf 70908 71996 71998\nf 70908 71998 72000\nf 70908 72000 70912\nf 70909 70912 70911\nf 70910 70913 72001\nf 70910 72001 71999\nf 70911 70912 70915\nf 70911 70915 70914\nf 70912 72000 70915\nf 70913 70916 72003\nf 70913 72003 72001\nf 70914 70915 70918\nf 70914 70918 70917\nf 70915 72000 72002\nf 70915 72002 70918\nf 70916 70919 72005\nf 70916 72005 72003\nf 70917 70918 70921\nf 70917 70921 70920\nf 70918 72002 72004\nf 70918 72004 70921\nf 70919 70922 72007\nf 70919 72007 72005\nf 70920 70921 70924\nf 70920 70924 70923\nf 70921 72004 72006\nf 70921 72006 70924\nf 70922 70925 72009\nf 70922 72009 72007\nf 70923 70924 70928\nf 70923 70928 70927\nf 70924 72006 72008\nf 70924 72008 70928\nf 70925 70926 72009\nf 70926 70929 72014\nf 70926 72010 72009\nf 70926 72014 72010\nf 70927 70928 72013\nf 70927 72013 72016\nf 70927 72016 70931\nf 70928 72008 72012\nf 70928 72012 72013\nf 70929 70930 72014\nf 70930 70932 72018\nf 70930 72015 72014\nf 70930 72018 72015\nf 70931 72016 70934\nf 70932 70933 72018\nf 70933 71003 72086\nf 70933 72019 72018\nf 70933 72086 72019\nf 70934 72016 72020\nf 70934 72020 71005\nf 70935 71025 71027\nf 70935 71027 72024\nf 70935 72024 72025\nf 70935 72025 72026\nf 70935 72026 70936\nf 70936 72026 72027\nf 70936 72027 70937\nf 70937 72027 72028\nf 70937 72028 70938\nf 70938 72028 72029\nf 70938 72029 70939\nf 70939 72029 72030\nf 70939 72030 70940\nf 70940 72030 72031\nf 70940 72031 70941\nf 70941 72031 72032\nf 70941 72032 70942\nf 70942 72032 72033\nf 70942 72033 70943\nf 70943 72033 72034\nf 70943 72034 70944\nf 70944 72034 72035\nf 70944 72035 70945\nf 70945 72035 72036\nf 70945 72036 70946\nf 70946 72036 72037\nf 70946 72037 70947\nf 70947 72037 72038\nf 70947 72038 70948\nf 70948 72038 72039\nf 70948 72039 70949\nf 70949 72039 72040\nf 70949 72040 70950\nf 70950 72040 72041\nf 70950 72041 70951\nf 70951 72041 72042\nf 70951 72042 70952\nf 70952 72042 72043\nf 70952 72043 70953\nf 70953 72043 72044\nf 70953 72044 70954\nf 70954 72044 72045\nf 70954 72045 70955\nf 70955 72045 72046\nf 70955 72046 70956\nf 70956 72046 72047\nf 70956 72047 70957\nf 70957 72047 72048\nf 70957 72048 70958\nf 70958 72048 72049\nf 70958 72049 70959\nf 70959 72049 72050\nf 70959 72050 70960\nf 70960 72050 72051\nf 70960 72051 70961\nf 70961 72051 72052\nf 70961 72052 70962\nf 70962 72052 72053\nf 70962 72053 70963\nf 70963 72053 70964\nf 70964 71028 71029\nf 70964 71029 70965\nf 70964 72053 71028\nf 70965 71029 71030\nf 70965 71030 70966\nf 70966 71030 71031\nf 70966 71031 70967\nf 70967 71031 71032\nf 70967 71032 70968\nf 70968 71032 71033\nf 70968 71033 70969\nf 70969 71033 71034\nf 70969 71034 70970\nf 70970 71034 72134\nf 70970 72054 70971\nf 70970 72134 72054\nf 70971 72054 72055\nf 70971 72055 70972\nf 70972 72055 72056\nf 70972 72056 70973\nf 70973 72056 72057\nf 70973 72057 70974\nf 70974 72057 72058\nf 70974 72058 70975\nf 70975 72058 72059\nf 70975 72059 70976\nf 70976 72059 72060\nf 70976 72060 70977\nf 70977 72060 72061\nf 70977 72061 70978\nf 70978 72061 72062\nf 70978 72062 70979\nf 70979 72062 72063\nf 70979 72063 70980\nf 70980 72063 72064\nf 70980 72064 70981\nf 70981 72064 72065\nf 70981 72065 70982\nf 70982 72065 72066\nf 70982 72066 70983\nf 70983 72066 72067\nf 70983 72067 70984\nf 70984 72067 72068\nf 70984 72068 70985\nf 70985 72068 72069\nf 70985 72069 70986\nf 70986 72069 72070\nf 70986 72070 70987\nf 70987 72070 72071\nf 70987 72071 70988\nf 70988 72071 72072\nf 70988 72072 70989\nf 70989 72072 72073\nf 70989 72073 70990\nf 70990 72073 72074\nf 70990 72074 70991\nf 70991 72074 72075\nf 70991 72075 70992\nf 70992 72075 72076\nf 70992 72076 70993\nf 70993 72076 72077\nf 70993 72077 70994\nf 70994 72077 72078\nf 70994 72078 70995\nf 70995 72078 72079\nf 70995 72079 70996\nf 70996 72079 72080\nf 70996 72080 70997\nf 70997 72080 72081\nf 70997 72081 70998\nf 70998 72081 72082\nf 70998 72082 70999\nf 70999 72082 72083\nf 70999 72083 71000\nf 71000 72083 72084\nf 71000 72084 71001\nf 71001 72084 72085\nf 71001 72085 71002\nf 71002 72085 72087\nf 71002 72087 71004\nf 71003 71004 72086\nf 71004 72087 72086\nf 71005 72020 72089\nf 71005 72089 71035\nf 71006 71038 72139\nf 71006 72092 72093\nf 71006 72093 71007\nf 71006 72139 72092\nf 71007 72093 72094\nf 71007 72094 71008\nf 71008 72094 72096\nf 71008 72096 71009\nf 71009 72096 72098\nf 71009 72098 71010\nf 71010 72098 72100\nf 71010 72100 71011\nf 71011 72100 72102\nf 71011 72102 71012\nf 71012 72102 72104\nf 71012 72104 71013\nf 71013 72104 72106\nf 71013 72106 71014\nf 71014 72106 72108\nf 71014 72108 71015\nf 71015 72108 72110\nf 71015 72110 71016\nf 71016 72110 72112\nf 71016 72112 71017\nf 71017 72112 72114\nf 71017 72114 71018\nf 71018 72114 72116\nf 71018 72116 71019\nf 71019 72116 72119\nf 71019 72119 71020\nf 71020 72119 71021\nf 71021 71022 71023\nf 71021 72118 71022\nf 71021 72119 72118\nf 71022 71024 71023\nf 71022 72022 72023\nf 71022 72023 71024\nf 71022 72118 72022\nf 71023 71024 71026\nf 71024 71027 71026\nf 71024 72023 72024\nf 71024 72024 71027\nf 71025 71026 71027\nf 71028 72053 72121\nf 71028 72121 72122\nf 71028 72122 71029\nf 71029 72122 72124\nf 71029 72124 71030\nf 71030 72124 72126\nf 71030 72126 71031\nf 71031 72126 72128\nf 71031 72128 71032\nf 71032 72128 72130\nf 71032 72130 71033\nf 71033 72130 72132\nf 71033 72132 71034\nf 71034 72132 72135\nf 71034 72135 72134\nf 71035 71036 71042\nf 71035 71042 71040\nf 71035 72089 71036\nf 71036 72089 72090\nf 71036 72090 72137\nf 71036 72137 71042\nf 71037 71043 72143\nf 71037 72138 72140\nf 71037 72140 71039\nf 71037 72143 72138\nf 71038 71039 72139\nf 71039 72140 72139\nf 71040 71042 71041\nf 71041 71042 72142\nf 71041 72142 71044\nf 71042 72137 72142\nf 71043 71045 72143\nf 71044 72142 72145\nf 71044 72145 71048\nf 71045 71046 71047\nf 71045 71047 72143\nf 71046 71049 72146\nf 71046 72146 71047\nf 71047 72144 72143\nf 71047 72146 72144\nf 71048 72145 72147\nf 71048 72147 71050\nf 71049 71051 72150\nf 71049 72148 72146\nf 71049 72150 72148\nf 71050 72147 72149\nf 71050 72149 71052\nf 71051 71053 72152\nf 71051 72152 72150\nf 71052 72149 72151\nf 71052 72151 71054\nf 71053 71055 72154\nf 71053 72154 72152\nf 71054 72151 72153\nf 71054 72153 71056\nf 71055 71057 72156\nf 71055 72156 72154\nf 71056 72153 72155\nf 71056 72155 71058\nf 71057 71059 72158\nf 71057 72158 72156\nf 71058 72155 72157\nf 71058 72157 71060\nf 71059 71061 72160\nf 71059 72160 72158\nf 71060 72157 72159\nf 71060 72159 71062\nf 71061 71063 72162\nf 71061 72162 72160\nf 71062 72159 72161\nf 71062 72161 71064\nf 71063 71065 72164\nf 71063 72164 72162\nf 71064 72161 72163\nf 71064 72163 71066\nf 71065 71067 72166\nf 71065 72166 72164\nf 71066 72163 72165\nf 71066 72165 71068\nf 71067 71069 72170\nf 71067 72170 72166\nf 71068 72165 72167\nf 71068 72167 71070\nf 71069 71073 72172\nf 71069 72172 72170\nf 71070 71072 71071\nf 71070 72167 71072\nf 71071 71072 72171\nf 71071 72171 71074\nf 71072 72167 72168\nf 71072 72168 72171\nf 71073 71075 72174\nf 71073 72174 72172\nf 71074 72171 72173\nf 71074 72173 71076\nf 71075 71077 72176\nf 71075 72176 72174\nf 71076 72173 72175\nf 71076 72175 71078\nf 71077 71079 72178\nf 71077 72178 72176\nf 71078 72175 72177\nf 71078 72177 71080\nf 71079 71081 72180\nf 71079 72180 72178\nf 71080 72177 72179\nf 71080 72179 71082\nf 71081 71083 72182\nf 71081 72182 72180\nf 71082 72179 72181\nf 71082 72181 71084\nf 71083 71085 72184\nf 71083 72184 72182\nf 71084 72181 72183\nf 71084 72183 71086\nf 71085 71087 72186\nf 71085 72186 72184\nf 71086 72183 72185\nf 71086 72185 71088\nf 71087 71089 72188\nf 71087 72188 72186\nf 71088 72185 72187\nf 71088 72187 71090\nf 71089 71091 72190\nf 71089 72190 72188\nf 71090 72187 72189\nf 71090 72189 71092\nf 71091 71093 72192\nf 71091 72192 72190\nf 71092 72189 72191\nf 71092 72191 71094\nf 71093 71095 72194\nf 71093 72194 72192\nf 71094 72191 72193\nf 71094 72193 71096\nf 71095 71097 72197\nf 71095 72197 72194\nf 71096 72193 72196\nf 71096 72196 71098\nf 71097 71099 72200\nf 71097 72200 72197\nf 71098 72196 72199\nf 71098 72199 71100\nf 71099 71101 72200\nf 71100 72199 72203\nf 71100 72203 71103\nf 71101 71102 72200\nf 71101 71104 71106\nf 71101 71106 71102\nf 71102 71106 72205\nf 71102 72201 72200\nf 71102 72205 72201\nf 71103 72203 72206\nf 71103 72206 71107\nf 71104 71105 71106\nf 71105 71109 72209\nf 71105 72209 71106\nf 71106 72209 72205\nf 71107 71108 71111\nf 71107 71111 71110\nf 71107 72206 71108\nf 71108 72206 72207\nf 71108 72207 72210\nf 71108 72210 71111\nf 71109 71112 72213\nf 71109 72211 72209\nf 71109 72213 72211\nf 71110 71111 71114\nf 71110 71114 71113\nf 71111 72210 72212\nf 71111 72212 71114\nf 71112 71115 72215\nf 71112 72215 72213\nf 71113 71114 71117\nf 71113 71117 71116\nf 71114 72212 72214\nf 71114 72214 71117\nf 71115 71118 72217\nf 71115 72217 72215\nf 71116 71117 71120\nf 71116 71120 71119\nf 71117 72214 72216\nf 71117 72216 71120\nf 71118 71121 72219\nf 71118 72219 72217\nf 71119 71120 71123\nf 71119 71123 71122\nf 71120 72216 72218\nf 71120 72218 71123\nf 71121 71124 72221\nf 71121 72221 72219\nf 71122 71123 71126\nf 71122 71126 71125\nf 71123 72218 72220\nf 71123 72220 71126\nf 71124 71127 72223\nf 71124 72223 72221\nf 71125 71126 71130\nf 71125 71130 71128\nf 71126 72220 72222\nf 71126 72222 71130\nf 71127 71131 72225\nf 71127 72225 72223\nf 71128 71130 71129\nf 71129 71130 72224\nf 71129 72224 71132\nf 71130 72222 72224\nf 71131 71133 72227\nf 71131 72227 72225\nf 71132 72224 72226\nf 71132 72226 71134\nf 71133 71135 72229\nf 71133 72229 72227\nf 71134 72226 72228\nf 71134 72228 71136\nf 71135 71137 72231\nf 71135 72231 72229\nf 71136 72228 72230\nf 71136 72230 71138\nf 71137 71139 72233\nf 71137 72233 72231\nf 71138 72230 72232\nf 71138 72232 71140\nf 71139 71141 72235\nf 71139 72235 72233\nf 71140 72232 72234\nf 71140 72234 71142\nf 71141 71143 72237\nf 71141 72237 72235\nf 71142 72234 72236\nf 71142 72236 71144\nf 71143 71145 72239\nf 71143 72239 72237\nf 71144 72236 72238\nf 71144 72238 71146\nf 71145 71147 72241\nf 71145 72241 72239\nf 71146 72238 72240\nf 71146 72240 71148\nf 71147 71149 72244\nf 71147 72244 72241\nf 71148 72240 72243\nf 71148 72243 71150\nf 71149 71151 72247\nf 71149 72247 72244\nf 71150 72243 72246\nf 71150 72246 71152\nf 71151 71153 72252\nf 71151 72252 72247\nf 71152 72246 72249\nf 71152 72249 71154\nf 71153 71156 72255\nf 71153 72255 72252\nf 71154 71155 71158\nf 71154 71158 71157\nf 71154 72249 71155\nf 71155 72249 72250\nf 71155 72250 72254\nf 71155 72254 71158\nf 71156 71159 72258\nf 71156 72258 72255\nf 71157 71158 71161\nf 71157 71161 71160\nf 71158 72254 72257\nf 71158 72257 71161\nf 71159 71162 72261\nf 71159 72261 72258\nf 71160 71161 71164\nf 71160 71164 71163\nf 71161 72257 72260\nf 71161 72260 71164\nf 71162 71165 72264\nf 71162 72264 72261\nf 71163 71164 71168\nf 71163 71168 71167\nf 71164 72260 72263\nf 71164 72263 71168\nf 71165 71166 72267\nf 71165 72267 72264\nf 71166 71169 71170\nf 71166 71170 72267\nf 71167 71168 71172\nf 71167 71172 71171\nf 71168 72263 72266\nf 71168 72266 71172\nf 71169 71173 71170\nf 71170 71173 71174\nf 71170 71174 72270\nf 71170 72270 72267\nf 71171 71172 71177\nf 71171 71177 71175\nf 71172 72266 72269\nf 71172 72269 71177\nf 71173 71178 72274\nf 71173 72274 71174\nf 71174 72271 72270\nf 71174 72274 72271\nf 71175 71177 71176\nf 71176 71177 72273\nf 71176 72273 71179\nf 71177 72269 72273\nf 71178 71180 72276\nf 71178 72276 72274\nf 71179 72273 72275\nf 71179 72275 71181\nf 71180 71182 72278\nf 71180 72278 72276\nf 71181 72275 72277\nf 71181 72277 71183\nf 71182 71184 72280\nf 71182 72280 72278\nf 71183 72277 72279\nf 71183 72279 71185\nf 71184 71186 72283\nf 71184 72283 72280\nf 71185 72279 72281\nf 71185 72281 71187\nf 71186 71188 72286\nf 71186 72286 72283\nf 71187 72281 72284\nf 71187 72284 71189\nf 71188 71190 72290\nf 71188 72290 72286\nf 71189 72284 72287\nf 71189 72287 71191\nf 71190 71193 72292\nf 71190 72292 72290\nf 71191 71192 71195\nf 71191 71195 71194\nf 71191 72287 71192\nf 71192 72287 72288\nf 71192 72288 72291\nf 71192 72291 71195\nf 71193 71196 72294\nf 71193 72294 72292\nf 71194 71195 71198\nf 71194 71198 71197\nf 71195 72291 72293\nf 71195 72293 71198\nf 71196 71199 72296\nf 71196 72296 72294\nf 71197 71198 71202\nf 71197 71202 71201\nf 71198 72293 72295\nf 71198 72295 71202\nf 71199 71200 72298\nf 71199 72298 72296\nf 71200 71203 71204\nf 71200 71204 72298\nf 71201 71202 71206\nf 71201 71206 71205\nf 71202 72295 72297\nf 71202 72297 71206\nf 71203 71207 71204\nf 71204 71207 71208\nf 71204 71208 72301\nf 71204 72301 72298\nf 71205 71206 71210\nf 71205 71210 71209\nf 71206 72297 72300\nf 71206 72300 71210\nf 71207 71211 72305\nf 71207 72305 71208\nf 71208 72302 72301\nf 71208 72305 72302\nf 71209 71210 71213\nf 71209 71213 71212\nf 71210 72300 72304\nf 71210 72304 71213\nf 71211 71214 72307\nf 71211 72307 72305\nf 71212 71213 71217\nf 71212 71217 71215\nf 71213 72304 72306\nf 71213 72306 71217\nf 71214 71218 72309\nf 71214 72309 72307\nf 71215 71217 71216\nf 71216 71217 72308\nf 71216 72308 71219\nf 71217 72306 72308\nf 71218 71220 72311\nf 71218 72311 72309\nf 71219 72308 72310\nf 71219 72310 71221\nf 71220 71222 72313\nf 71220 72313 72311\nf 71221 72310 72312\nf 71221 72312 71223\nf 71222 71224 72316\nf 71222 72316 72313\nf 71223 72312 72314\nf 71223 72314 71225\nf 71224 71226 72318\nf 71224 72318 72316\nf 71225 72314 72317\nf 71225 72317 71228\nf 71226 71227 72320\nf 71226 72320 72318\nf 71227 71229 71230\nf 71227 71230 72320\nf 71228 72317 72319\nf 71228 72319 71231\nf 71229 71232 71230\nf 71230 71232 71233\nf 71230 71233 72324\nf 71230 72324 72320\nf 71231 72319 72322\nf 71231 72322 71234\nf 71232 71235 72329\nf 71232 72329 71233\nf 71233 72325 72324\nf 71233 72329 72325\nf 71234 72322 72327\nf 71234 72327 71236\nf 71235 71237 72332\nf 71235 72332 72329\nf 71236 72327 72330\nf 71236 72330 71238\nf 71237 71239 72336\nf 71237 72336 72332\nf 71238 72330 72333\nf 71238 72333 71240\nf 71239 71242 72338\nf 71239 72338 72336\nf 71240 71241 71244\nf 71240 71244 71243\nf 71240 72333 71241\nf 71241 72333 72334\nf 71241 72334 72337\nf 71241 72337 71244\nf 71242 71245 72340\nf 71242 72340 72338\nf 71243 71244 71247\nf 71243 71247 71246\nf 71244 72337 72339\nf 71244 72339 71247\nf 71245 71248 72342\nf 71245 72342 72340\nf 71246 71247 71250\nf 71246 71250 71249\nf 71247 72339 72341\nf 71247 72341 71250\nf 71248 71251 72344\nf 71248 72344 72342\nf 71249 71250 71254\nf 71249 71254 71253\nf 71250 72341 72343\nf 71250 72343 71254\nf 71251 71252 72344\nf 71252 71255 72348\nf 71252 72345 72344\nf 71252 72348 72345\nf 71253 71254 72347\nf 71253 72347 72349\nf 71253 72349 71256\nf 71254 72343 72346\nf 71254 72346 72347\nf 71255 71257 72351\nf 71255 72351 72348\nf 71256 72349 71258\nf 71257 71259 72354\nf 71257 72354 72351\nf 71258 72349 72352\nf 71258 72352 71260\nf 71259 71261 72356\nf 71259 72356 72354\nf 71260 72352 72355\nf 71260 72355 71262\nf 71261 71263 72358\nf 71261 72358 72356\nf 71262 72355 72357\nf 71262 72357 71264\nf 71263 71265 72360\nf 71263 72360 72358\nf 71264 72357 72359\nf 71264 72359 71267\nf 71265 71266 72360\nf 71266 71268 72363\nf 71266 72361 72360\nf 71266 72363 72361\nf 71267 72359 72362\nf 71267 72362 71269\nf 71268 71270 72367\nf 71268 72367 72363\nf 71269 72362 72364\nf 71269 72364 71272\nf 71270 71271 72367\nf 71271 71274 72370\nf 71271 72368 72367\nf 71271 72370 72368\nf 71272 71273 71277\nf 71272 71277 71275\nf 71272 72364 71273\nf 71273 72364 72365\nf 71273 72365 72369\nf 71273 72369 71277\nf 71274 71278 72372\nf 71274 72372 72370\nf 71275 71277 71276\nf 71276 71277 72371\nf 71276 72371 71280\nf 71277 72369 72371\nf 71278 71279 72372\nf 71279 71281 72375\nf 71279 72373 72372\nf 71279 72375 72373\nf 71280 72371 72374\nf 71280 72374 71282\nf 71281 71283 72378\nf 71281 72378 72375\nf 71282 72374 72377\nf 71282 72377 71285\nf 71283 71284 72380\nf 71283 72380 72378\nf 71284 71287 71288\nf 71284 71288 72380\nf 71285 71290 71286\nf 71285 72377 72379\nf 71285 72379 72382\nf 71285 72382 71290\nf 71286 71290 71289\nf 71287 71291 72384\nf 71287 72384 71288\nf 71288 72381 72380\nf 71288 72384 72381\nf 71289 71290 72383\nf 71289 72383 72385\nf 71289 72385 71292\nf 71290 72382 72383\nf 71291 71293 72386\nf 71291 72386 72384\nf 71292 72385 71294\nf 71293 71296 72389\nf 71293 72389 72386\nf 71294 72385 72387\nf 71294 72387 72388\nf 71294 72388 71295\nf 71295 72388 71297\nf 71296 71300 72393\nf 71296 72393 72389\nf 71297 72388 72390\nf 71297 72390 72391\nf 71297 72391 71298\nf 71298 72391 72392\nf 71298 72392 71299\nf 71299 72392 71302\nf 71300 71301 72393\nf 71301 71305 72398\nf 71301 72394 72393\nf 71301 72398 72394\nf 71302 72392 72395\nf 71302 72395 72396\nf 71302 72396 71303\nf 71303 72396 72397\nf 71303 72397 71304\nf 71304 72397 72399\nf 71304 72399 71306\nf 71305 71306 72398\nf 71306 72399 72398\nf 71307 71308 72401\nf 71307 71321 71319\nf 71307 72400 71321\nf 71307 72401 72400\nf 71308 71309 72402\nf 71308 72402 72401\nf 71309 71310 72403\nf 71309 72403 72402\nf 71310 71322 71323\nf 71310 71323 72403\nf 71311 71312 72404\nf 71311 72404 72424\nf 71311 72424 71330\nf 71312 71313 72405\nf 71312 72405 72404\nf 71313 71314 72406\nf 71313 72406 72405\nf 71314 71315 72407\nf 71314 72407 72406\nf 71315 71316 72408\nf 71315 72408 72407\nf 71316 71332 72410\nf 71316 72409 72408\nf 71316 72410 72409\nf 71317 71318 72412\nf 71317 71339 71337\nf 71317 72411 71339\nf 71317 72412 72411\nf 71318 71320 72414\nf 71318 72414 72412\nf 71319 71321 71320\nf 71320 71321 72413\nf 71320 72413 72414\nf 71321 72400 72413\nf 71322 71324 72418\nf 71322 72418 71323\nf 71323 72416 72403\nf 71323 72418 72416\nf 71324 71325 72419\nf 71324 72419 72418\nf 71325 71326 72420\nf 71325 72420 72419\nf 71326 71327 72421\nf 71326 72421 72420\nf 71327 71340 71341\nf 71327 71341 72421\nf 71328 71329 72422\nf 71328 72422 72435\nf 71328 72435 71343\nf 71329 71331 72423\nf 71329 72423 72422\nf 71330 72424 71331\nf 71331 72424 72425\nf 71331 72425 72423\nf 71332 71333 71334\nf 71332 71334 72410\nf 71333 71335 72428\nf 71333 72428 71334\nf 71334 72427 72410\nf 71334 72428 72427\nf 71335 71336 72428\nf 71336 71345 72430\nf 71336 72429 72428\nf 71336 72430 72429\nf 71337 71339 71338\nf 71338 71339 72431\nf 71338 72431 71348\nf 71339 72411 72431\nf 71340 71342 72434\nf 71340 72434 71341\nf 71341 72432 72421\nf 71341 72434 72432\nf 71342 71349 71350\nf 71342 71350 72440\nf 71342 72440 72434\nf 71343 72435 71344\nf 71344 72435 72436\nf 71344 72436 72443\nf 71344 72443 71351\nf 71345 71346 71347\nf 71345 71347 72430\nf 71346 71352 71347\nf 71347 71352 72437\nf 71347 72437 72430\nf 71348 72431 72439\nf 71348 72439 71353\nf 71349 71354 72447\nf 71349 72442 71350\nf 71349 72447 72442\nf 71350 72442 72440\nf 71351 72443 71356\nf 71352 71358 72451\nf 71352 72445 72437\nf 71352 72451 72445\nf 71353 72439 72446\nf 71353 72446 71360\nf 71354 71355 71362\nf 71354 71362 72454\nf 71354 72454 72447\nf 71355 71361 71362\nf 71356 72443 72449\nf 71356 72449 71357\nf 71357 72449 72450\nf 71357 72450 72456\nf 71357 72456 71363\nf 71358 71359 72452\nf 71358 72452 72451\nf 71359 71364 72452\nf 71360 72446 72453\nf 71360 72453 71365\nf 71361 71366 72460\nf 71361 72455 71362\nf 71361 72460 72455\nf 71362 72455 72454\nf 71363 72456 71367\nf 71364 71368 72462\nf 71364 72457 72452\nf 71364 72462 72457\nf 71365 72453 72459\nf 71365 72459 71370\nf 71366 71371 72465\nf 71366 72465 72460\nf 71367 72456 72461\nf 71367 72461 71372\nf 71368 71369 72467\nf 71368 72467 72462\nf 71369 71373 71374\nf 71369 71374 72467\nf 71370 72459 72464\nf 71370 72464 71375\nf 71371 71376 72471\nf 71371 72471 72465\nf 71372 72461 72466\nf 71372 72466 71377\nf 71373 71378 72473\nf 71373 72473 71374\nf 71374 72468 72467\nf 71374 72473 72468\nf 71375 72464 72470\nf 71375 72470 71379\nf 71376 71380 72475\nf 71376 72475 72471\nf 71377 72466 72472\nf 71377 72472 71382\nf 71378 71383 72478\nf 71378 72478 72473\nf 71379 72470 72474\nf 71379 72474 71384\nf 71380 71381 72476\nf 71380 72476 72475\nf 71381 71385 72476\nf 71382 72472 72477\nf 71382 72477 71386\nf 71383 71387 72482\nf 71383 72482 72478\nf 71384 72474 72479\nf 71384 72479 71388\nf 71385 71389 72484\nf 71385 72480 72476\nf 71385 72484 72480\nf 71386 72477 72481\nf 71386 72481 71390\nf 71387 71391 72486\nf 71387 72486 72482\nf 71388 72479 72483\nf 71388 72483 71392\nf 71389 71393 72488\nf 71389 72488 72484\nf 71390 72481 72485\nf 71390 72485 71394\nf 71391 71395 72491\nf 71391 72491 72486\nf 71392 72483 72487\nf 71392 72487 71396\nf 71393 71398 72495\nf 71393 72495 72488\nf 71394 72485 72489\nf 71394 72489 71399\nf 71395 71401 72498\nf 71395 72498 72491\nf 71396 72487 72492\nf 71396 72492 72493\nf 71396 72493 71397\nf 71397 72493 71402\nf 71398 71403 72500\nf 71398 72500 72495\nf 71399 71400 71406\nf 71399 71406 71404\nf 71399 72489 71400\nf 71400 72489 72490\nf 71400 72490 72496\nf 71400 72496 71406\nf 71401 71407 72502\nf 71401 72502 72498\nf 71402 72493 72499\nf 71402 72499 71408\nf 71403 71409 72504\nf 71403 72504 72500\nf 71404 71406 71405\nf 71405 71406 72501\nf 71405 72501 71410\nf 71406 72496 72501\nf 71407 71411 72507\nf 71407 72507 72502\nf 71408 72499 72503\nf 71408 72503 71412\nf 71409 71413 72504\nf 71410 72501 72506\nf 71410 72506 71415\nf 71411 71416 72512\nf 71411 72512 72507\nf 71412 72503 72508\nf 71412 72508 71417\nf 71413 71414 72505\nf 71413 71418 71414\nf 71413 72505 72504\nf 71414 71418 71419\nf 71414 71419 72514\nf 71414 72509 72505\nf 71414 72514 72509\nf 71415 72506 72511\nf 71415 72511 71420\nf 71416 71421 72517\nf 71416 72517 72512\nf 71417 72508 72513\nf 71417 72513 71422\nf 71418 71423 71419\nf 71419 71423 71425\nf 71419 71425 72519\nf 71419 72519 72514\nf 71420 72511 72516\nf 71420 72516 71426\nf 71421 71427 72521\nf 71421 72521 72517\nf 71422 72513 72518\nf 71422 72518 71428\nf 71423 71424 71425\nf 71424 71429 71425\nf 71425 71429 72519\nf 71426 72516 72520\nf 71426 72520 71430\nf 71427 71431 72525\nf 71427 72525 72521\nf 71428 72518 72522\nf 71428 72522 71432\nf 71429 71433 72527\nf 71429 72523 72519\nf 71429 72527 72523\nf 71430 72520 72524\nf 71430 72524 71434\nf 71431 71435 72529\nf 71431 72529 72525\nf 71432 72522 72526\nf 71432 72526 71436\nf 71433 71437 72531\nf 71433 72531 72527\nf 71434 72524 72528\nf 71434 72528 71438\nf 71435 71439 72533\nf 71435 72533 72529\nf 71436 72526 72530\nf 71436 72530 71440\nf 71437 71441 72535\nf 71437 72535 72531\nf 71438 72528 72532\nf 71438 72532 71443\nf 71439 71445 72538\nf 71439 72538 72533\nf 71440 72530 72534\nf 71440 72534 71446\nf 71441 71442 71448\nf 71441 71448 72540\nf 71441 72540 72535\nf 71442 71447 71448\nf 71443 72532 72536\nf 71443 72536 71444\nf 71444 72536 72537\nf 71444 72537 72550\nf 71444 72550 71459\nf 71445 71461 72552\nf 71445 72552 72538\nf 71446 72534 72539\nf 71446 72539 71462\nf 71447 71449 72541\nf 71447 72541 71448\nf 71448 72541 72540\nf 71449 71450 72542\nf 71449 72542 72541\nf 71450 71451 72543\nf 71450 72543 72542\nf 71451 71463 72544\nf 71451 72544 72543\nf 71452 71453 72545\nf 71452 71481 71479\nf 71452 72545 72574\nf 71452 72574 71481\nf 71453 71454 72545\nf 71454 71455 72546\nf 71454 72546 72545\nf 71455 71456 72547\nf 71455 72547 72546\nf 71456 71482 71483\nf 71456 71483 72547\nf 71457 71458 72548\nf 71457 72548 72621\nf 71457 72621 71524\nf 71458 71460 72549\nf 71458 72549 72548\nf 71459 72550 71460\nf 71460 72550 72551\nf 71460 72551 72549\nf 71461 71526 72624\nf 71461 72624 72552\nf 71462 72539 72553\nf 71462 72553 71527\nf 71463 71464 72558\nf 71463 72556 72544\nf 71463 72558 72556\nf 71464 71465 72558\nf 71465 71466 72559\nf 71465 72559 72558\nf 71466 71467 72560\nf 71466 72560 72559\nf 71467 71468 72561\nf 71467 72561 72560\nf 71468 71469 72562\nf 71468 72562 72561\nf 71469 71528 72563\nf 71469 72563 72562\nf 71470 71471 72564\nf 71470 72564 72633\nf 71470 72633 71534\nf 71471 71472 72565\nf 71471 72565 72564\nf 71472 71473 72566\nf 71472 72566 72565\nf 71473 71474 72567\nf 71473 72567 72566\nf 71474 71475 72568\nf 71474 72568 72567\nf 71475 71476 72569\nf 71475 72569 72568\nf 71476 71477 72570\nf 71476 72570 72569\nf 71477 71478 72571\nf 71477 72571 72570\nf 71478 71480 72572\nf 71478 72572 72571\nf 71479 71481 71480\nf 71480 71481 72575\nf 71480 72573 72572\nf 71480 72575 72573\nf 71481 72574 72575\nf 71482 71484 72580\nf 71482 72580 71483\nf 71483 72578 72547\nf 71483 72580 72578\nf 71484 71485 72581\nf 71484 72581 72580\nf 71485 71486 72582\nf 71485 72582 72581\nf 71486 71487 72583\nf 71486 72583 72582\nf 71487 71488 72584\nf 71487 72584 72583\nf 71488 71489 72585\nf 71488 72585 72584\nf 71489 71490 72586\nf 71489 72586 72585\nf 71490 71491 72587\nf 71490 72587 72586\nf 71491 71492 72588\nf 71491 72588 72587\nf 71492 71493 72589\nf 71492 72589 72588\nf 71493 71494 72590\nf 71493 72590 72589\nf 71494 71495 72591\nf 71494 72591 72590\nf 71495 71496 72592\nf 71495 72592 72591\nf 71496 71497 72593\nf 71496 72593 72592\nf 71497 71498 72594\nf 71497 72594 72593\nf 71498 71499 72595\nf 71498 72595 72594\nf 71499 71500 72596\nf 71499 72596 72595\nf 71500 71501 72597\nf 71500 72597 72596\nf 71501 71502 72598\nf 71501 72598 72597\nf 71502 71503 72599\nf 71502 72599 72598\nf 71503 71504 72600\nf 71503 72600 72599\nf 71504 71505 72601\nf 71504 72601 72600\nf 71505 71506 72602\nf 71505 72602 72601\nf 71506 71507 72603\nf 71506 72603 72602\nf 71507 71508 72604\nf 71507 72604 72603\nf 71508 71509 72605\nf 71508 72605 72604\nf 71509 71510 72606\nf 71509 72606 72605\nf 71510 71511 72607\nf 71510 72607 72606\nf 71511 71512 72608\nf 71511 72608 72607\nf 71512 71513 72609\nf 71512 72609 72608\nf 71513 71514 72610\nf 71513 72610 72609\nf 71514 71515 72611\nf 71514 72611 72610\nf 71515 71516 72612\nf 71515 72612 72611\nf 71516 71517 72613\nf 71516 72613 72612\nf 71517 71518 72614\nf 71517 72614 72613\nf 71518 71519 72615\nf 71518 72615 72614\nf 71519 71520 72616\nf 71519 72616 72615\nf 71520 71521 72617\nf 71520 72617 72616\nf 71521 71522 72618\nf 71521 72618 72617\nf 71522 71523 72619\nf 71522 72619 72618\nf 71523 71525 72620\nf 71523 72620 72619\nf 71524 72621 71525\nf 71525 72621 72622\nf 71525 72622 72620\nf 71526 71536 72648\nf 71526 72648 72624\nf 71527 72553 72625\nf 71527 72625 71537\nf 71528 71529 72628\nf 71528 72626 72563\nf 71528 72628 72626\nf 71529 71530 72628\nf 71530 71531 72629\nf 71530 72629 72628\nf 71531 71532 72630\nf 71531 72630 72629\nf 71532 71533 72631\nf 71532 72631 72630\nf 71533 71535 72632\nf 71533 72632 72631\nf 71534 72633 71535\nf 71535 72633 72634\nf 71535 72634 72632\nf 71536 71538 72650\nf 71536 72650 72648\nf 71537 72625 72649\nf 71537 72649 71539\nf 71538 71540 72652\nf 71538 72652 72650\nf 71539 72649 72651\nf 71539 72651 71541\nf 71540 71542 72654\nf 71540 72654 72652\nf 71541 72651 72653\nf 71541 72653 71543\nf 71542 71544 72656\nf 71542 72656 72654\nf 71543 72653 72655\nf 71543 72655 71545\nf 71544 71546 72658\nf 71544 72658 72656\nf 71545 72655 72657\nf 71545 72657 71547\nf 71546 71548 72660\nf 71546 72660 72658\nf 71547 72657 72659\nf 71547 72659 71549\nf 71548 71552 72666\nf 71548 72666 72660\nf 71549 72659 72661\nf 71549 72661 71553\nf 71550 71555 72672\nf 71550 72662 72663\nf 71550 72663 71551\nf 71550 72672 72662\nf 71551 72663 71557\nf 71552 71573 72710\nf 71552 72710 72666\nf 71553 72661 72667\nf 71553 72667 71574\nf 71554 71583 71585\nf 71554 71585 72670\nf 71554 72670 72671\nf 71554 72671 72673\nf 71554 72673 71556\nf 71555 71556 72672\nf 71556 72673 72672\nf 71557 72663 72674\nf 71557 72674 72675\nf 71557 72675 71558\nf 71558 72675 72677\nf 71558 72677 71559\nf 71559 72677 72679\nf 71559 72679 71560\nf 71560 72679 72680\nf 71560 72680 71561\nf 71561 72680 72681\nf 71561 72681 71562\nf 71562 72681 71586\nf 71563 71633 71635\nf 71563 71635 72693\nf 71563 72693 72694\nf 71563 72694 72696\nf 71563 72696 71564\nf 71564 72696 72698\nf 71564 72698 71565\nf 71565 72698 72701\nf 71565 72701 71566\nf 71566 72701 71567\nf 71567 71568 71569\nf 71567 72700 71568\nf 71567 72701 72700\nf 71568 71570 71569\nf 71568 72664 72665\nf 71568 72665 71570\nf 71568 72700 72664\nf 71569 71570 72704\nf 71569 72704 71571\nf 71570 72665 72703\nf 71570 72703 72704\nf 71571 72704 72706\nf 71571 72706 71572\nf 71572 72706 72707\nf 71572 72707 71636\nf 71573 71643 72777\nf 71573 72777 72710\nf 71574 72667 72711\nf 71574 72711 71644\nf 71575 71645 72779\nf 71575 72713 72716\nf 71575 72716 71576\nf 71575 72779 72713\nf 71576 72716 71577\nf 71577 71578 71579\nf 71577 72715 71578\nf 71577 72716 72715\nf 71578 71580 71579\nf 71578 72668 72669\nf 71578 72669 71580\nf 71578 72715 72668\nf 71579 71580 72719\nf 71579 72719 71581\nf 71580 72669 72718\nf 71580 72718 72719\nf 71581 72719 72722\nf 71581 72722 71582\nf 71582 72722 71584\nf 71583 71584 71585\nf 71584 72721 71585\nf 71584 72722 72721\nf 71585 72721 72670\nf 71586 72681 72724\nf 71586 72724 72725\nf 71586 72725 71587\nf 71587 72725 72727\nf 71587 72727 71588\nf 71588 72727 72729\nf 71588 72729 71589\nf 71589 72729 72730\nf 71589 72730 71590\nf 71590 72730 72731\nf 71590 72731 71591\nf 71591 72731 72732\nf 71591 72732 71592\nf 71592 72732 72733\nf 71592 72733 71647\nf 71593 71661 71663\nf 71593 71663 72737\nf 71593 72737 72738\nf 71593 72738 72739\nf 71593 72739 71594\nf 71594 72739 72740\nf 71594 72740 71595\nf 71595 72740 72741\nf 71595 72741 71596\nf 71596 72741 72743\nf 71596 72743 71597\nf 71597 72743 72745\nf 71597 72745 71598\nf 71598 72745 72747\nf 71598 72747 71599\nf 71599 72747 72749\nf 71599 72749 71600\nf 71600 72749 72751\nf 71600 72751 71601\nf 71601 72751 72753\nf 71601 72753 71602\nf 71602 72753 72755\nf 71602 72755 71603\nf 71603 72755 72757\nf 71603 72757 71604\nf 71604 72757 72759\nf 71604 72759 71605\nf 71605 72759 72761\nf 71605 72761 71606\nf 71606 72761 72763\nf 71606 72763 71607\nf 71607 72763 72766\nf 71607 72766 71608\nf 71608 72766 71609\nf 71609 71610 71611\nf 71609 72765 71610\nf 71609 72766 72765\nf 71610 71612 71611\nf 71610 72682 72683\nf 71610 72683 71612\nf 71610 72765 72682\nf 71611 71612 72769\nf 71611 72769 71613\nf 71612 72683 72768\nf 71612 72768 72769\nf 71613 72769 72772\nf 71613 72772 71614\nf 71614 72772 71615\nf 71615 71616 71617\nf 71615 72771 71616\nf 71615 72772 72771\nf 71616 71618 71617\nf 71616 72684 72685\nf 71616 72685 71618\nf 71616 72771 72684\nf 71617 71618 71619\nf 71618 71620 71619\nf 71618 72685 72686\nf 71618 72686 71620\nf 71619 71620 71621\nf 71620 71622 71621\nf 71620 72686 72687\nf 71620 72687 71622\nf 71621 71622 71623\nf 71622 71624 71623\nf 71622 72687 72688\nf 71622 72688 71624\nf 71623 71624 71625\nf 71624 71626 71625\nf 71624 72688 72689\nf 71624 72689 71626\nf 71625 71626 71627\nf 71626 71628 71627\nf 71626 72689 72690\nf 71626 72690 71628\nf 71627 71628 71629\nf 71628 71630 71629\nf 71628 72690 72691\nf 71628 72691 71630\nf 71629 71630 71631\nf 71630 71632 71631\nf 71630 72691 72692\nf 71630 72692 71632\nf 71631 71632 71634\nf 71632 71635 71634\nf 71632 72692 72693\nf 71632 72693 71635\nf 71633 71634 71635\nf 71636 71638 71637\nf 71636 72707 71638\nf 71637 71638 71639\nf 71638 71640 71639\nf 71638 72707 72708\nf 71638 72708 71640\nf 71639 71640 71641\nf 71640 71642 71641\nf 71640 72708 72709\nf 71640 72709 71642\nf 71641 71642 71666\nf 71641 71666 71664\nf 71642 72709 72774\nf 71642 72774 72775\nf 71642 72775 71666\nf 71643 71668 72797\nf 71643 72797 72777\nf 71644 72711 72778\nf 71644 72778 71669\nf 71645 71646 72779\nf 71646 71670 72799\nf 71646 72780 72779\nf 71646 72799 72780\nf 71647 71649 71648\nf 71647 72733 71649\nf 71648 71649 72783\nf 71648 72783 71650\nf 71649 72733 72782\nf 71649 72782 72783\nf 71650 72783 72785\nf 71650 72785 71651\nf 71651 72785 72787\nf 71651 72787 71652\nf 71652 72787 72789\nf 71652 72789 71653\nf 71653 72789 72792\nf 71653 72792 71654\nf 71654 72792 71655\nf 71655 71656 71657\nf 71655 72791 71656\nf 71655 72792 72791\nf 71656 71658 71657\nf 71656 72734 72735\nf 71656 72735 71658\nf 71656 72791 72734\nf 71657 71658 71659\nf 71658 71660 71659\nf 71658 72735 72736\nf 71658 72736 71660\nf 71659 71660 71662\nf 71660 71663 71662\nf 71660 72736 72737\nf 71660 72737 71663\nf 71661 71662 71663\nf 71664 71666 71665\nf 71665 71666 72795\nf 71665 72795 71667\nf 71666 72775 72794\nf 71666 72794 72795\nf 71667 72795 71671\nf 71668 71672 72802\nf 71668 72802 72797\nf 71669 72778 72798\nf 71669 72798 71673\nf 71670 71674 72804\nf 71670 72804 72799\nf 71671 72795 72800\nf 71671 72800 71675\nf 71672 71676 72807\nf 71672 72807 72802\nf 71673 72798 72803\nf 71673 72803 71677\nf 71674 71678 72809\nf 71674 72809 72804\nf 71675 72800 72805\nf 71675 72805 71679\nf 71676 71681 72813\nf 71676 72813 72807\nf 71677 72803 72808\nf 71677 72808 71682\nf 71678 71683 72815\nf 71678 72815 72809\nf 71679 72805 72810\nf 71679 72810 72811\nf 71679 72811 71680\nf 71680 72811 71684\nf 71681 71685 72817\nf 71681 72817 72813\nf 71682 72808 72814\nf 71682 72814 71686\nf 71683 71687 72819\nf 71683 72819 72815\nf 71684 72811 72816\nf 71684 72816 71688\nf 71685 71689 72821\nf 71685 72821 72817\nf 71686 72814 72818\nf 71686 72818 71690\nf 71687 71691 72823\nf 71687 72823 72819\nf 71688 72816 72820\nf 71688 72820 71692\nf 71689 71693 72825\nf 71689 72825 72821\nf 71690 72818 72822\nf 71690 72822 71694\nf 71691 71695 72828\nf 71691 72828 72823\nf 71692 72820 72824\nf 71692 72824 71696\nf 71693 71697 72825\nf 71694 72822 72827\nf 71694 72827 71699\nf 71695 71700 72834\nf 71695 72834 72828\nf 71696 72824 72830\nf 71696 72830 71701\nf 71697 71698 72826\nf 71697 71702 72837\nf 71697 72826 72825\nf 71697 72837 71698\nf 71698 72831 72826\nf 71698 72832 72831\nf 71698 72837 72832\nf 71699 72827 72833\nf 71699 72833 71703\nf 71700 71704 72840\nf 71700 72840 72834\nf 71701 72830 72836\nf 71701 72836 71705\nf 71702 71706 72843\nf 71702 72843 72837\nf 71703 72833 72839\nf 71703 72839 71707\nf 71704 71708 72846\nf 71704 72846 72840\nf 71705 72836 72842\nf 71705 72842 71709\nf 71706 71710 72849\nf 71706 72849 72843\nf 71707 72839 72845\nf 71707 72845 71711\nf 71708 71713 72852\nf 71708 72852 72846\nf 71709 72842 72848\nf 71709 72848 71714\nf 71710 71715 72855\nf 71710 72855 72849\nf 71711 71717 71712\nf 71711 72845 72851\nf 71711 72851 72857\nf 71711 72857 71717\nf 71712 71717 71716\nf 71713 71718 72859\nf 71713 72859 72852\nf 71714 72848 72854\nf 71714 72854 71719\nf 71715 71720 72862\nf 71715 72862 72855\nf 71716 71717 72858\nf 71716 72858 72863\nf 71716 72863 71721\nf 71717 72857 72858\nf 71718 71722 72864\nf 71718 72864 72859\nf 71719 72854 72861\nf 71719 72861 71724\nf 71720 71725 72867\nf 71720 72867 72862\nf 71721 72863 71726\nf 71722 71723 72869\nf 71722 72869 72864\nf 71723 71727 71728\nf 71723 71728 72869\nf 71724 72861 72866\nf 71724 72866 71729\nf 71725 71730 72872\nf 71725 72872 72867\nf 71726 72863 72868\nf 71726 72868 71731\nf 71727 71732 71728\nf 71728 71732 71733\nf 71728 71733 72874\nf 71728 72874 72869\nf 71729 72866 72871\nf 71729 72871 71734\nf 71730 71735 72877\nf 71730 72877 72872\nf 71731 72868 72873\nf 71731 72873 71736\nf 71732 71737 71733\nf 71733 71737 71738\nf 71733 71738 72879\nf 71733 72879 72874\nf 71734 72871 72876\nf 71734 72876 71739\nf 71735 71740 72883\nf 71735 72883 72877\nf 71736 72873 72878\nf 71736 72878 71741\nf 71737 71742 72885\nf 71737 72885 71738\nf 71738 72880 72879\nf 71738 72885 72880\nf 71739 72876 72882\nf 71739 72882 71743\nf 71740 71744 72888\nf 71740 72888 72883\nf 71741 72878 72884\nf 71741 72884 71745\nf 71742 71746 72890\nf 71742 72890 72885\nf 71743 72882 72886\nf 71743 72886 71747\nf 71744 71748 72894\nf 71744 72894 72888\nf 71745 72884 72889\nf 71745 72889 71749\nf 71746 71750 72896\nf 71746 72896 72890\nf 71747 72886 72891\nf 71747 72891 71751\nf 71748 71754 72898\nf 71748 72898 72894\nf 71749 72889 72895\nf 71749 72895 71755\nf 71750 71756 72900\nf 71750 72900 72896\nf 71751 71753 71752\nf 71751 72891 72892\nf 71751 72892 71753\nf 71752 71753 71757\nf 71753 72892 72897\nf 71753 72897 71757\nf 71754 71758 72902\nf 71754 72902 72898\nf 71755 72895 72899\nf 71755 72899 71759\nf 71756 71760 72904\nf 71756 72904 72900\nf 71757 72897 72901\nf 71757 72901 71761\nf 71758 71762 72906\nf 71758 72906 72902\nf 71759 72899 72903\nf 71759 72903 71763\nf 71760 71764 72908\nf 71760 72908 72904\nf 71761 72901 72905\nf 71761 72905 71765\nf 71762 71766 72910\nf 71762 72910 72906\nf 71763 72903 72907\nf 71763 72907 71767\nf 71764 71768 72912\nf 71764 72912 72908\nf 71765 72905 72909\nf 71765 72909 71769\nf 71766 71770 72914\nf 71766 72914 72910\nf 71767 72907 72911\nf 71767 72911 71771\nf 71768 71772 72916\nf 71768 72916 72912\nf 71769 72909 72913\nf 71769 72913 71773\nf 71770 71774 72918\nf 71770 72918 72914\nf 71771 72911 72915\nf 71771 72915 71775\nf 71772 71777 72920\nf 71772 72920 72916\nf 71773 72913 72917\nf 71773 72917 71778\nf 71774 71779 72922\nf 71774 72922 72918\nf 71775 71781 71776\nf 71775 72915 72919\nf 71775 72919 72923\nf 71775 72923 71781\nf 71776 71781 71780\nf 71777 71782 72925\nf 71777 72925 72920\nf 71778 72917 72921\nf 71778 72921 71783\nf 71779 71784 72927\nf 71779 72927 72922\nf 71780 71781 72924\nf 71780 72924 72928\nf 71780 72928 71785\nf 71781 72923 72924\nf 71782 71786 72930\nf 71782 72930 72925\nf 71783 72921 72926\nf 71783 72926 71787\nf 71784 71788 72932\nf 71784 72932 72927\nf 71785 72928 71789\nf 71786 71790 72935\nf 71786 72935 72930\nf 71787 72926 72931\nf 71787 72931 71791\nf 71788 71792 72937\nf 71788 72937 72932\nf 71789 72928 72933\nf 71789 72933 71793\nf 71790 71794 72939\nf 71790 72939 72935\nf 71791 72931 72936\nf 71791 72936 71795\nf 71792 71796 72941\nf 71792 72941 72937\nf 71793 72933 72938\nf 71793 72938 71797\nf 71794 71798 72943\nf 71794 72943 72939\nf 71795 72936 72940\nf 71795 72940 71799\nf 71796 71800 72945\nf 71796 72945 72941\nf 71797 72938 72942\nf 71797 72942 71801\nf 71798 71802 72947\nf 71798 72947 72943\nf 71799 72940 72944\nf 71799 72944 71803\nf 71800 71804 72949\nf 71800 72949 72945\nf 71801 72942 72946\nf 71801 72946 71805\nf 71802 71806 72951\nf 71802 72951 72947\nf 71803 72944 72948\nf 71803 72948 71807\nf 71804 71808 72953\nf 71804 72953 72949\nf 71805 72946 72950\nf 71805 72950 71809\nf 71806 71810 72955\nf 71806 72955 72951\nf 71807 72948 72952\nf 71807 72952 71811\nf 71808 71812 72958\nf 71808 72958 72953\nf 71809 72950 72954\nf 71809 72954 71813\nf 71810 71814 72955\nf 71811 72952 72957\nf 71811 72957 71816\nf 71812 71817 72964\nf 71812 72964 72958\nf 71813 72954 72959\nf 71813 72959 71818\nf 71814 71815 72956\nf 71814 71819 71815\nf 71814 72956 72955\nf 71815 71819 71820\nf 71815 71820 72967\nf 71815 72961 72956\nf 71815 72967 72961\nf 71816 72957 72963\nf 71816 72963 71821\nf 71817 71822 72971\nf 71817 72971 72964\nf 71818 72959 72965\nf 71818 72965 71823\nf 71819 71824 72973\nf 71819 72973 71820\nf 71820 72968 72967\nf 71820 72973 72968\nf 71821 72963 72970\nf 71821 72970 71825\nf 71822 71826 72975\nf 71822 72975 72971\nf 71823 72965 72972\nf 71823 72972 71827\nf 71824 71828 72977\nf 71824 72977 72973\nf 71825 72970 72974\nf 71825 72974 71829\nf 71826 71830 72979\nf 71826 72979 72975\nf 71827 72972 72976\nf 71827 72976 71831\nf 71828 71832 72981\nf 71828 72981 72977\nf 71829 72974 72978\nf 71829 72978 71833\nf 71830 71834 72984\nf 71830 72984 72979\nf 71831 72976 72980\nf 71831 72980 71835\nf 71832 71836 72981\nf 71833 72978 72983\nf 71833 72983 71838\nf 71834 71839 72988\nf 71834 72988 72984\nf 71835 72980 72985\nf 71835 72985 71840\nf 71836 71837 72982\nf 71836 71841 71837\nf 71836 72982 72981\nf 71837 71841 71842\nf 71837 71842 72990\nf 71837 72986 72982\nf 71837 72990 72986\nf 71838 72983 72987\nf 71838 72987 71843\nf 71839 71844 72992\nf 71839 72992 72988\nf 71840 72985 72989\nf 71840 72989 71845\nf 71841 71846 71842\nf 71842 71846 71848\nf 71842 71848 72994\nf 71842 72994 72990\nf 71843 72987 72991\nf 71843 72991 71849\nf 71844 71850 72996\nf 71844 72996 72992\nf 71845 72989 72993\nf 71845 72993 71851\nf 71846 71847 71848\nf 71847 71852 71848\nf 71848 71852 72994\nf 71849 72991 72995\nf 71849 72995 71853\nf 71850 71854 73000\nf 71850 73000 72996\nf 71851 72993 72997\nf 71851 72997 71855\nf 71852 71856 73002\nf 71852 72998 72994\nf 71852 73002 72998\nf 71853 72995 72999\nf 71853 72999 71857\nf 71854 71858 73004\nf 71854 73004 73000\nf 71855 72997 73001\nf 71855 73001 71859\nf 71856 71860 73006\nf 71856 73006 73002\nf 71857 72999 73003\nf 71857 73003 71861\nf 71858 71863 73009\nf 71858 73009 73004\nf 71859 73001 73005\nf 71859 73005 71865\nf 71860 71867 73012\nf 71860 73012 73006\nf 71861 73003 73007\nf 71861 73007 71862\nf 71862 73007 73008\nf 71862 73008 73013\nf 71862 73013 71868\nf 71863 71864 73015\nf 71863 73015 73009\nf 71864 71869 71870\nf 71864 71870 73015\nf 71865 71872 71866\nf 71865 73005 73011\nf 71865 73011 73018\nf 71865 73018 71872\nf 71866 71872 71871\nf 71867 71873 73019\nf 71867 73019 73012\nf 71868 73013 71874\nf 71869 71875 73022\nf 71869 73022 71870\nf 71870 73016 73015\nf 71870 73022 73016\nf 71871 71872 71877\nf 71871 71877 71876\nf 71872 73018 71877\nf 71873 71878 73024\nf 71873 73024 73019\nf 71874 73013 73020\nf 71874 73020 71879\nf 71875 71881 73028\nf 71875 73028 73022\nf 71876 71877 71884\nf 71876 71884 71882\nf 71877 73018 73023\nf 71877 73023 71884\nf 71878 71885 73024\nf 71879 73020 73026\nf 71879 73026 71880\nf 71880 73026 73027\nf 71880 73027 73032\nf 71880 73032 71888\nf 71881 71889 73034\nf 71881 73034 73028\nf 71882 71884 71883\nf 71883 71884 73029\nf 71883 73029 71891\nf 71884 73023 73029\nf 71885 71886 71887\nf 71885 71887 73025\nf 71885 73025 73024\nf 71886 71892 71887\nf 71887 71892 73030\nf 71887 73030 73025\nf 71888 73032 71894\nf 71889 71890 73035\nf 71889 73035 73034\nf 71890 71895 73035\nf 71891 73029 73037\nf 71891 73037 71896\nf 71892 71893 73039\nf 71892 73038 73030\nf 71892 73039 73038\nf 71893 71897 73039\nf 71894 73032 73040\nf 71894 73040 71905\nf 71895 71907 73051\nf 71895 73042 73035\nf 71895 73051 73042\nf 71896 73037 73043\nf 71896 73043 71908\nf 71897 71898 73046\nf 71897 73044 73039\nf 71897 73046 73044\nf 71898 71899 73046\nf 71899 71900 73047\nf 71899 73047 73046\nf 71900 71901 71910\nf 71900 71909 73047\nf 71900 71910 71909\nf 71901 71902 71912\nf 71901 71912 71910\nf 71902 71911 71912\nf 71903 71904 73048\nf 71903 71980 71978\nf 71903 73048 73125\nf 71903 73125 71980\nf 71904 71906 73048\nf 71905 73040 73049\nf 71905 73049 71906\nf 71906 73049 73050\nf 71906 73050 73048\nf 71907 71981 73129\nf 71907 73129 73051\nf 71908 73043 73052\nf 71908 73052 71982\nf 71909 71910 73056\nf 71909 73054 73047\nf 71909 73056 73054\nf 71910 71912 73057\nf 71910 73057 73056\nf 71911 71913 73058\nf 71911 73058 71912\nf 71912 73058 73057\nf 71913 71914 73059\nf 71913 73059 73058\nf 71914 71915 73060\nf 71914 73060 73059\nf 71915 71916 73061\nf 71915 73061 73060\nf 71916 71917 73062\nf 71916 73062 73061\nf 71917 71918 73063\nf 71917 73063 73062\nf 71918 71919 73064\nf 71918 73064 73063\nf 71919 71920 73065\nf 71919 73065 73064\nf 71920 71921 73066\nf 71920 73066 73065\nf 71921 71922 73067\nf 71921 73067 73066\nf 71922 71923 73068\nf 71922 73068 73067\nf 71923 71924 73069\nf 71923 73069 73068\nf 71924 71925 73070\nf 71924 73070 73069\nf 71925 71926 73071\nf 71925 73071 73070\nf 71926 71927 73072\nf 71926 73072 73071\nf 71927 71928 73073\nf 71927 73073 73072\nf 71928 71929 73074\nf 71928 73074 73073\nf 71929 71930 73075\nf 71929 73075 73074\nf 71930 71931 73076\nf 71930 73076 73075\nf 71931 71932 73077\nf 71931 73077 73076\nf 71932 71933 73078\nf 71932 73078 73077\nf 71933 71934 73079\nf 71933 73079 73078\nf 71934 71935 73080\nf 71934 73080 73079\nf 71935 71936 73081\nf 71935 73081 73080\nf 71936 71937 73082\nf 71936 73082 73081\nf 71937 71938 73083\nf 71937 73083 73082\nf 71938 71939 73084\nf 71938 73084 73083\nf 71939 71940 73085\nf 71939 73085 73084\nf 71940 71941 73086\nf 71940 73086 73085\nf 71941 71942 73087\nf 71941 73087 73086\nf 71942 71943 73088\nf 71942 73088 73087\nf 71943 71944 73089\nf 71943 73089 73088\nf 71944 71945 73090\nf 71944 73090 73089\nf 71945 71946 73091\nf 71945 73091 73090\nf 71946 71947 73092\nf 71946 73092 73091\nf 71947 71948 73093\nf 71947 73093 73092\nf 71948 71949 73094\nf 71948 73094 73093\nf 71949 71950 73095\nf 71949 73095 73094\nf 71950 71951 73096\nf 71950 73096 73095\nf 71951 71952 73097\nf 71951 73097 73096\nf 71952 71953 73098\nf 71952 73098 73097\nf 71953 71954 73099\nf 71953 73099 73098\nf 71954 71955 73100\nf 71954 73100 73099\nf 71955 71956 73101\nf 71955 73101 73100\nf 71956 71957 73102\nf 71956 73102 73101\nf 71957 71958 73103\nf 71957 73103 73102\nf 71958 71959 73104\nf 71958 73104 73103\nf 71959 71960 73105\nf 71959 73105 73104\nf 71960 71961 73106\nf 71960 73106 73105\nf 71961 71962 73107\nf 71961 73107 73106\nf 71962 71963 73108\nf 71962 73108 73107\nf 71963 71964 73109\nf 71963 73109 73108\nf 71964 71965 73110\nf 71964 73110 73109\nf 71965 71966 73111\nf 71965 73111 73110\nf 71966 71967 73112\nf 71966 73112 73111\nf 71967 71968 73113\nf 71967 73113 73112\nf 71968 71969 73114\nf 71968 73114 73113\nf 71969 71970 73115\nf 71969 73115 73114\nf 71970 71971 73116\nf 71970 73116 73115\nf 71971 71972 73117\nf 71971 73117 73116\nf 71972 71973 73118\nf 71972 73118 73117\nf 71973 71974 73119\nf 71973 73119 73118\nf 71974 71975 73120\nf 71974 73120 73119\nf 71975 71976 73121\nf 71975 73121 73120\nf 71976 71977 73122\nf 71976 73122 73121\nf 71977 71979 73123\nf 71977 73123 73122\nf 71978 71980 71979\nf 71979 71980 73126\nf 71979 73124 73123\nf 71979 73126 73124\nf 71980 73125 73126\nf 71981 71983 73179\nf 71981 73179 73129\nf 71982 73052 73130\nf 71982 73130 71984\nf 71983 71985 73181\nf 71983 73181 73179\nf 71984 73130 73180\nf 71984 73180 71986\nf 71985 71987 73183\nf 71985 73183 73181\nf 71986 73180 73182\nf 71986 73182 71988\nf 71987 71989 73185\nf 71987 73185 73183\nf 71988 73182 73184\nf 71988 73184 71990\nf 71989 71991 73187\nf 71989 73187 73185\nf 71990 73184 73186\nf 71990 73186 71992\nf 71991 71993 73189\nf 71991 73189 73187\nf 71992 73186 73188\nf 71992 73188 71994\nf 71993 71995 73191\nf 71993 73191 73189\nf 71994 73188 73190\nf 71994 73190 71996\nf 71995 71997 73193\nf 71995 73193 73191\nf 71996 73190 73192\nf 71996 73192 71998\nf 71997 71999 73195\nf 71997 73195 73193\nf 71998 73192 73194\nf 71998 73194 72000\nf 71999 72001 73197\nf 71999 73197 73195\nf 72000 73194 73196\nf 72000 73196 72002\nf 72001 72003 73199\nf 72001 73199 73197\nf 72002 73196 73198\nf 72002 73198 72004\nf 72003 72005 73201\nf 72003 73201 73199\nf 72004 73198 73200\nf 72004 73200 72006\nf 72005 72007 73203\nf 72005 73203 73201\nf 72006 73200 73202\nf 72006 73202 72008\nf 72007 72009 73203\nf 72008 73202 73206\nf 72008 73206 72012\nf 72009 72010 72011\nf 72009 72011 73203\nf 72010 72014 73207\nf 72010 73207 72011\nf 72011 73204 73203\nf 72011 73207 73204\nf 72012 72017 72013\nf 72012 73206 73208\nf 72012 73208 73212\nf 72012 73212 72017\nf 72013 72017 72016\nf 72014 72015 73209\nf 72014 73209 73207\nf 72015 72018 73214\nf 72015 73210 73209\nf 72015 73214 73210\nf 72016 72017 72021\nf 72016 72021 72020\nf 72017 73212 72021\nf 72018 72019 73214\nf 72019 72086 72088\nf 72019 72088 73213\nf 72019 73213 73215\nf 72019 73215 73214\nf 72020 72021 72091\nf 72020 72091 72089\nf 72021 73212 73217\nf 72021 73217 72091\nf 72022 72118 72120\nf 72022 72120 73232\nf 72022 73232 73234\nf 72022 73234 73236\nf 72022 73236 72023\nf 72023 73236 73238\nf 72023 73238 72024\nf 72024 73238 73240\nf 72024 73240 72025\nf 72025 73240 73242\nf 72025 73242 72026\nf 72026 73242 73244\nf 72026 73244 72027\nf 72027 73244 73246\nf 72027 73246 72028\nf 72028 73246 73248\nf 72028 73248 72029\nf 72029 73248 73250\nf 72029 73250 72030\nf 72030 73250 73252\nf 72030 73252 72031\nf 72031 73252 73254\nf 72031 73254 72032\nf 72032 73254 73256\nf 72032 73256 72033\nf 72033 73256 73258\nf 72033 73258 72034\nf 72034 73258 73260\nf 72034 73260 72035\nf 72035 73260 73262\nf 72035 73262 72036\nf 72036 73262 73264\nf 72036 73264 72037\nf 72037 73264 73266\nf 72037 73266 72038\nf 72038 73266 73268\nf 72038 73268 72039\nf 72039 73268 73270\nf 72039 73270 72040\nf 72040 73270 73272\nf 72040 73272 72041\nf 72041 73272 73274\nf 72041 73274 72042\nf 72042 73274 73276\nf 72042 73276 72043\nf 72043 73276 73278\nf 72043 73278 72044\nf 72044 73278 73280\nf 72044 73280 72045\nf 72045 73280 73282\nf 72045 73282 72046\nf 72046 73282 73284\nf 72046 73284 72047\nf 72047 73284 73286\nf 72047 73286 72048\nf 72048 73286 73288\nf 72048 73288 72049\nf 72049 73288 73290\nf 72049 73290 72050\nf 72050 73290 73292\nf 72050 73292 72051\nf 72051 73292 73294\nf 72051 73294 72052\nf 72052 73294 73296\nf 72052 73296 72053\nf 72053 73296 73298\nf 72053 73298 72121\nf 72054 72134 72136\nf 72054 72136 73310\nf 72054 73310 73312\nf 72054 73312 73314\nf 72054 73314 72055\nf 72055 73314 73316\nf 72055 73316 72056\nf 72056 73316 73318\nf 72056 73318 72057\nf 72057 73318 73320\nf 72057 73320 72058\nf 72058 73320 73322\nf 72058 73322 72059\nf 72059 73322 73324\nf 72059 73324 72060\nf 72060 73324 73326\nf 72060 73326 72061\nf 72061 73326 73328\nf 72061 73328 72062\nf 72062 73328 73330\nf 72062 73330 72063\nf 72063 73330 73332\nf 72063 73332 72064\nf 72064 73332 73334\nf 72064 73334 72065\nf 72065 73334 73336\nf 72065 73336 72066\nf 72066 73336 73338\nf 72066 73338 72067\nf 72067 73338 73340\nf 72067 73340 72068\nf 72068 73340 73342\nf 72068 73342 72069\nf 72069 73342 73344\nf 72069 73344 72070\nf 72070 73344 73346\nf 72070 73346 72071\nf 72071 73346 73348\nf 72071 73348 72072\nf 72072 73348 73350\nf 72072 73350 72073\nf 72073 73350 73352\nf 72073 73352 72074\nf 72074 73352 73354\nf 72074 73354 72075\nf 72075 73354 73356\nf 72075 73356 72076\nf 72076 73356 73358\nf 72076 73358 72077\nf 72077 73358 73360\nf 72077 73360 72078\nf 72078 73360 73362\nf 72078 73362 72079\nf 72079 73362 73364\nf 72079 73364 72080\nf 72080 73364 73366\nf 72080 73366 72081\nf 72081 73366 73368\nf 72081 73368 72082\nf 72082 73368 73370\nf 72082 73370 72083\nf 72083 73370 73372\nf 72083 73372 72084\nf 72084 73372 73375\nf 72084 73375 72085\nf 72085 73375 72087\nf 72086 72087 72088\nf 72087 73374 72088\nf 72087 73375 73374\nf 72088 73374 73213\nf 72089 72091 72090\nf 72090 72091 73377\nf 72090 73377 72137\nf 72091 73217 73377\nf 72092 72139 72141\nf 72092 72141 73378\nf 72092 73378 73379\nf 72092 73379 73382\nf 72092 73382 72093\nf 72093 73382 72094\nf 72094 72095 72096\nf 72094 73381 72095\nf 72094 73382 73381\nf 72095 72097 72096\nf 72095 73218 73219\nf 72095 73219 72097\nf 72095 73381 73218\nf 72096 72097 72098\nf 72097 72099 72098\nf 72097 73219 73220\nf 72097 73220 72099\nf 72098 72099 72100\nf 72099 72101 72100\nf 72099 73220 73221\nf 72099 73221 72101\nf 72100 72101 72102\nf 72101 72103 72102\nf 72101 73221 73222\nf 72101 73222 72103\nf 72102 72103 72104\nf 72103 72105 72104\nf 72103 73222 73223\nf 72103 73223 72105\nf 72104 72105 72106\nf 72105 72107 72106\nf 72105 73223 73224\nf 72105 73224 72107\nf 72106 72107 72108\nf 72107 72109 72108\nf 72107 73224 73225\nf 72107 73225 72109\nf 72108 72109 72110\nf 72109 72111 72110\nf 72109 73225 73226\nf 72109 73226 72111\nf 72110 72111 72112\nf 72111 72113 72112\nf 72111 73226 73227\nf 72111 73227 72113\nf 72112 72113 72114\nf 72113 72115 72114\nf 72113 73227 73228\nf 72113 73228 72115\nf 72114 72115 72116\nf 72115 72117 72116\nf 72115 73228 73230\nf 72115 73230 72117\nf 72116 72117 72119\nf 72117 72120 72119\nf 72117 73230 73232\nf 72117 73232 72120\nf 72118 72119 72120\nf 72121 72123 72122\nf 72121 73298 72123\nf 72122 72123 72124\nf 72123 72125 72124\nf 72123 73298 73300\nf 72123 73300 72125\nf 72124 72125 72126\nf 72125 72127 72126\nf 72125 73300 73302\nf 72125 73302 72127\nf 72126 72127 72128\nf 72127 72129 72128\nf 72127 73302 73304\nf 72127 73304 72129\nf 72128 72129 72130\nf 72129 72131 72130\nf 72129 73304 73306\nf 72129 73306 72131\nf 72130 72131 72132\nf 72131 72133 72132\nf 72131 73306 73308\nf 72131 73308 72133\nf 72132 72133 72135\nf 72133 72136 72135\nf 72133 73308 73310\nf 72133 73310 72136\nf 72134 72135 72136\nf 72137 73377 73384\nf 72137 73384 72142\nf 72138 72143 73389\nf 72138 73386 72140\nf 72138 73389 73386\nf 72139 72140 72141\nf 72140 73385 72141\nf 72140 73386 73385\nf 72141 73385 73378\nf 72142 73384 73388\nf 72142 73388 72145\nf 72143 72144 73389\nf 72144 72146 73393\nf 72144 73390 73389\nf 72144 73393 73390\nf 72145 73388 73392\nf 72145 73392 72147\nf 72146 72148 73395\nf 72146 73395 73393\nf 72147 73392 73394\nf 72147 73394 72149\nf 72148 72150 73397\nf 72148 73397 73395\nf 72149 73394 73396\nf 72149 73396 72151\nf 72150 72152 73399\nf 72150 73399 73397\nf 72151 73396 73398\nf 72151 73398 72153\nf 72152 72154 73401\nf 72152 73401 73399\nf 72153 73398 73400\nf 72153 73400 72155\nf 72154 72156 73403\nf 72154 73403 73401\nf 72155 73400 73402\nf 72155 73402 72157\nf 72156 72158 73405\nf 72156 73405 73403\nf 72157 73402 73404\nf 72157 73404 72159\nf 72158 72160 73407\nf 72158 73407 73405\nf 72159 73404 73406\nf 72159 73406 72161\nf 72160 72162 73410\nf 72160 73410 73407\nf 72161 73406 73408\nf 72161 73408 72163\nf 72162 72164 73413\nf 72162 73413 73410\nf 72163 73408 73411\nf 72163 73411 72165\nf 72164 72166 73417\nf 72164 73417 73413\nf 72165 73411 73414\nf 72165 73414 72167\nf 72166 72170 73419\nf 72166 73419 73417\nf 72167 72169 72168\nf 72167 73414 72169\nf 72168 72169 73418\nf 72168 73418 72171\nf 72169 73414 73415\nf 72169 73415 73418\nf 72170 72172 73421\nf 72170 73421 73419\nf 72171 73418 73420\nf 72171 73420 72173\nf 72172 72174 73423\nf 72172 73423 73421\nf 72173 73420 73422\nf 72173 73422 72175\nf 72174 72176 73425\nf 72174 73425 73423\nf 72175 73422 73424\nf 72175 73424 72177\nf 72176 72178 73427\nf 72176 73427 73425\nf 72177 73424 73426\nf 72177 73426 72179\nf 72178 72180 73429\nf 72178 73429 73427\nf 72179 73426 73428\nf 72179 73428 72181\nf 72180 72182 73431\nf 72180 73431 73429\nf 72181 73428 73430\nf 72181 73430 72183\nf 72182 72184 73433\nf 72182 73433 73431\nf 72183 73430 73432\nf 72183 73432 72185\nf 72184 72186 73435\nf 72184 73435 73433\nf 72185 73432 73434\nf 72185 73434 72187\nf 72186 72188 73437\nf 72186 73437 73435\nf 72187 73434 73436\nf 72187 73436 72189\nf 72188 72190 73439\nf 72188 73439 73437\nf 72189 73436 73438\nf 72189 73438 72191\nf 72190 72192 73441\nf 72190 73441 73439\nf 72191 73438 73440\nf 72191 73440 72193\nf 72192 72194 73441\nf 72193 73440 73444\nf 72193 73444 72196\nf 72194 72195 73441\nf 72194 72197 72198\nf 72194 72198 72195\nf 72195 72198 73445\nf 72195 73442 73441\nf 72195 73445 73442\nf 72196 73444 73446\nf 72196 73446 72199\nf 72197 72200 72202\nf 72197 72202 72198\nf 72198 72202 73447\nf 72198 73447 73445\nf 72199 73446 73448\nf 72199 73448 72203\nf 72200 72201 72202\nf 72201 72205 73450\nf 72201 73450 72202\nf 72202 73450 73447\nf 72203 72204 72208\nf 72203 72208 72206\nf 72203 73448 72204\nf 72204 73448 73449\nf 72204 73449 73451\nf 72204 73451 72208\nf 72205 72209 73455\nf 72205 73453 73450\nf 72205 73455 73453\nf 72206 72208 72207\nf 72207 72208 73454\nf 72207 73454 72210\nf 72208 73451 73454\nf 72209 72211 73457\nf 72209 73457 73455\nf 72210 73454 73456\nf 72210 73456 72212\nf 72211 72213 73459\nf 72211 73459 73457\nf 72212 73456 73458\nf 72212 73458 72214\nf 72213 72215 73461\nf 72213 73461 73459\nf 72214 73458 73460\nf 72214 73460 72216\nf 72215 72217 73463\nf 72215 73463 73461\nf 72216 73460 73462\nf 72216 73462 72218\nf 72217 72219 73465\nf 72217 73465 73463\nf 72218 73462 73464\nf 72218 73464 72220\nf 72219 72221 73468\nf 72219 73468 73465\nf 72220 73464 73467\nf 72220 73467 72222\nf 72221 72223 73471\nf 72221 73471 73468\nf 72222 73467 73470\nf 72222 73470 72224\nf 72223 72225 73474\nf 72223 73474 73471\nf 72224 73470 73473\nf 72224 73473 72226\nf 72225 72227 73477\nf 72225 73477 73474\nf 72226 73473 73476\nf 72226 73476 72228\nf 72227 72229 73480\nf 72227 73480 73477\nf 72228 73476 73479\nf 72228 73479 72230\nf 72229 72231 73483\nf 72229 73483 73480\nf 72230 73479 73482\nf 72230 73482 72232\nf 72231 72233 73486\nf 72231 73486 73483\nf 72232 73482 73485\nf 72232 73485 72234\nf 72233 72235 73489\nf 72233 73489 73486\nf 72234 73485 73488\nf 72234 73488 72236\nf 72235 72237 73492\nf 72235 73492 73489\nf 72236 73488 73491\nf 72236 73491 72238\nf 72237 72239 73495\nf 72237 73495 73492\nf 72238 73491 73494\nf 72238 73494 72240\nf 72239 72241 73495\nf 72240 73494 73498\nf 72240 73498 72243\nf 72241 72242 73495\nf 72241 72244 72245\nf 72241 72245 72242\nf 72242 72245 73499\nf 72242 73496 73495\nf 72242 73499 73496\nf 72243 73498 73500\nf 72243 73500 72246\nf 72244 72247 72248\nf 72244 72248 72245\nf 72245 72248 73501\nf 72245 73501 73499\nf 72246 73500 73502\nf 72246 73502 72249\nf 72247 72252 72253\nf 72247 72253 72248\nf 72248 72253 73504\nf 72248 73504 73501\nf 72249 72251 72250\nf 72249 73502 72251\nf 72250 72251 73505\nf 72250 73505 72254\nf 72251 73502 73503\nf 72251 73503 73505\nf 72252 72255 72256\nf 72252 72256 72253\nf 72253 72256 73507\nf 72253 73507 73504\nf 72254 73505 73508\nf 72254 73508 72257\nf 72255 72258 72259\nf 72255 72259 72256\nf 72256 72259 73509\nf 72256 73509 73507\nf 72257 73508 73510\nf 72257 73510 72260\nf 72258 72261 72262\nf 72258 72262 72259\nf 72259 72262 73511\nf 72259 73511 73509\nf 72260 73510 73512\nf 72260 73512 72263\nf 72261 72264 72265\nf 72261 72265 72262\nf 72262 72265 73513\nf 72262 73513 73511\nf 72263 73512 73514\nf 72263 73514 72266\nf 72264 72267 72268\nf 72264 72268 72265\nf 72265 72268 73515\nf 72265 73515 73513\nf 72266 73514 73516\nf 72266 73516 72269\nf 72267 72270 72272\nf 72267 72272 72268\nf 72268 72272 73517\nf 72268 73517 73515\nf 72269 73516 73518\nf 72269 73518 72273\nf 72270 72271 72272\nf 72271 72274 73519\nf 72271 73519 72272\nf 72272 73519 73517\nf 72273 73518 73520\nf 72273 73520 72275\nf 72274 72276 73523\nf 72274 73521 73519\nf 72274 73523 73521\nf 72275 73520 73522\nf 72275 73522 72277\nf 72276 72278 73525\nf 72276 73525 73523\nf 72277 73522 73524\nf 72277 73524 72279\nf 72278 72280 73528\nf 72278 73528 73525\nf 72279 73524 73526\nf 72279 73526 72281\nf 72280 72283 73530\nf 72280 73530 73528\nf 72281 72282 72285\nf 72281 72285 72284\nf 72281 73526 72282\nf 72282 73526 73527\nf 72282 73527 73529\nf 72282 73529 72285\nf 72283 72286 73532\nf 72283 73532 73530\nf 72284 72285 72289\nf 72284 72289 72287\nf 72285 73529 73531\nf 72285 73531 72289\nf 72286 72290 73534\nf 72286 73534 73532\nf 72287 72289 72288\nf 72288 72289 73533\nf 72288 73533 72291\nf 72289 73531 73533\nf 72290 72292 73536\nf 72290 73536 73534\nf 72291 73533 73535\nf 72291 73535 72293\nf 72292 72294 73539\nf 72292 73539 73536\nf 72293 73535 73538\nf 72293 73538 72295\nf 72294 72296 73542\nf 72294 73542 73539\nf 72295 73538 73541\nf 72295 73541 72297\nf 72296 72298 73542\nf 72297 73541 73545\nf 72297 73545 72300\nf 72298 72299 73542\nf 72298 72301 72303\nf 72298 72303 72299\nf 72299 72303 73546\nf 72299 73543 73542\nf 72299 73546 73543\nf 72300 73545 73547\nf 72300 73547 72304\nf 72301 72302 72303\nf 72302 72305 73548\nf 72302 73548 72303\nf 72303 73548 73546\nf 72304 73547 73549\nf 72304 73549 72306\nf 72305 72307 73552\nf 72305 73550 73548\nf 72305 73552 73550\nf 72306 73549 73551\nf 72306 73551 72308\nf 72307 72309 73554\nf 72307 73554 73552\nf 72308 73551 73553\nf 72308 73553 72310\nf 72309 72311 73557\nf 72309 73557 73554\nf 72310 73553 73555\nf 72310 73555 72312\nf 72311 72313 73560\nf 72311 73560 73557\nf 72312 73555 73558\nf 72312 73558 72314\nf 72313 72316 73564\nf 72313 73564 73560\nf 72314 72315 73562\nf 72314 73558 72315\nf 72314 73562 73565\nf 72314 73565 72317\nf 72315 73558 73559\nf 72315 73559 73561\nf 72315 73561 73562\nf 72316 72318 73566\nf 72316 73566 73564\nf 72317 73565 72319\nf 72318 72320 73566\nf 72319 73565 73569\nf 72319 73569 72322\nf 72320 72321 73566\nf 72320 72324 72326\nf 72320 72326 72321\nf 72321 72326 73571\nf 72321 73567 73566\nf 72321 73571 73567\nf 72322 72323 72328\nf 72322 72328 72327\nf 72322 73569 72323\nf 72323 73569 73570\nf 72323 73570 73572\nf 72323 73572 72328\nf 72324 72325 72326\nf 72325 72329 73574\nf 72325 73574 72326\nf 72326 73574 73571\nf 72327 72328 72331\nf 72327 72331 72330\nf 72328 73572 73575\nf 72328 73575 72331\nf 72329 72332 73580\nf 72329 73577 73574\nf 72329 73580 73577\nf 72330 72331 72335\nf 72330 72335 72333\nf 72331 73575 73578\nf 72331 73578 72335\nf 72332 72336 73583\nf 72332 73583 73580\nf 72333 72335 72334\nf 72334 72335 73581\nf 72334 73581 72337\nf 72335 73578 73581\nf 72336 72338 73586\nf 72336 73586 73583\nf 72337 73581 73584\nf 72337 73584 72339\nf 72338 72340 73589\nf 72338 73589 73586\nf 72339 73584 73587\nf 72339 73587 72341\nf 72340 72342 73592\nf 72340 73592 73589\nf 72341 73587 73590\nf 72341 73590 72343\nf 72342 72344 73594\nf 72342 73594 73592\nf 72343 73590 73593\nf 72343 73593 72346\nf 72344 72345 73594\nf 72345 72348 73598\nf 72345 73595 73594\nf 72345 73598 73595\nf 72346 72350 72347\nf 72346 73593 73597\nf 72346 73597 73599\nf 72346 73599 72350\nf 72347 72350 72349\nf 72348 72351 73600\nf 72348 73600 73598\nf 72349 72350 72353\nf 72349 72353 72352\nf 72350 73599 72353\nf 72351 72354 73604\nf 72351 73604 73600\nf 72352 72353 73602\nf 72352 73602 73605\nf 72352 73605 72355\nf 72353 73599 73601\nf 72353 73601 73602\nf 72354 72356 73606\nf 72354 73606 73604\nf 72355 73605 72357\nf 72356 72358 73608\nf 72356 73608 73606\nf 72357 73605 73607\nf 72357 73607 72359\nf 72358 72360 73611\nf 72358 73611 73608\nf 72359 73607 73610\nf 72359 73610 72362\nf 72360 72361 73611\nf 72361 72363 73616\nf 72361 73612 73611\nf 72361 73616 73612\nf 72362 73610 73614\nf 72362 73614 72364\nf 72363 72367 73618\nf 72363 73618 73616\nf 72364 72366 72365\nf 72364 73614 72366\nf 72365 72366 73617\nf 72365 73617 72369\nf 72366 73614 73615\nf 72366 73615 73617\nf 72367 72368 73618\nf 72368 72370 73621\nf 72368 73619 73618\nf 72368 73621 73619\nf 72369 73617 73620\nf 72369 73620 72371\nf 72370 72372 73623\nf 72370 73623 73621\nf 72371 73620 73622\nf 72371 73622 72374\nf 72372 72373 73625\nf 72372 73625 73623\nf 72373 72375 72376\nf 72373 72376 73625\nf 72374 73622 73624\nf 72374 73624 72377\nf 72375 72378 73628\nf 72375 73628 72376\nf 72376 73626 73625\nf 72376 73628 73626\nf 72377 73624 73627\nf 72377 73627 72379\nf 72378 72380 73630\nf 72378 73630 73628\nf 72379 73627 73629\nf 72379 73629 72382\nf 72380 72381 73630\nf 72381 72384 73634\nf 72381 73631 73630\nf 72381 73634 73631\nf 72382 73629 73632\nf 72382 73632 73633\nf 72382 73633 72383\nf 72383 73633 72385\nf 72384 72386 73637\nf 72384 73637 73634\nf 72385 73633 73636\nf 72385 73636 72387\nf 72386 72389 73641\nf 72386 73641 73637\nf 72387 73636 73638\nf 72387 73638 73639\nf 72387 73639 72388\nf 72388 73639 72390\nf 72389 72393 73646\nf 72389 73646 73641\nf 72390 73639 73642\nf 72390 73642 73643\nf 72390 73643 72391\nf 72391 73643 73645\nf 72391 73645 72392\nf 72392 73645 72395\nf 72393 72394 73646\nf 72394 72398 73652\nf 72394 73647 73646\nf 72394 73652 73647\nf 72395 73645 73648\nf 72395 73648 73649\nf 72395 73649 72396\nf 72396 73649 73651\nf 72396 73651 72397\nf 72397 73651 73653\nf 72397 73653 72399\nf 72398 72399 73652\nf 72399 73653 73652\nf 72400 72401 73654\nf 72400 73654 73666\nf 72400 73666 72413\nf 72401 72402 73655\nf 72401 73655 73654\nf 72402 72403 72417\nf 72402 72415 73655\nf 72402 72417 72415\nf 72403 72416 72417\nf 72404 72405 73657\nf 72404 72426 72424\nf 72404 73656 72426\nf 72404 73657 73656\nf 72405 72406 73658\nf 72405 73658 73657\nf 72406 72407 73659\nf 72406 73659 73658\nf 72407 72408 73660\nf 72407 73660 73659\nf 72408 72409 73661\nf 72408 73661 73660\nf 72409 72410 73662\nf 72409 73662 73661\nf 72410 72427 73663\nf 72410 73663 73662\nf 72411 72412 73664\nf 72411 73664 73684\nf 72411 73684 72431\nf 72412 72414 73665\nf 72412 73665 73664\nf 72413 73666 72414\nf 72414 73666 73667\nf 72414 73667 73665\nf 72415 72417 73671\nf 72415 73669 73655\nf 72415 73671 73669\nf 72416 72418 73672\nf 72416 73672 72417\nf 72417 73672 73671\nf 72418 72419 73673\nf 72418 73673 73672\nf 72419 72420 73674\nf 72419 73674 73673\nf 72420 72421 73675\nf 72420 73675 73674\nf 72421 72432 72433\nf 72421 72433 73675\nf 72422 72423 73676\nf 72422 73676 73690\nf 72422 73690 72435\nf 72423 72425 73678\nf 72423 73678 73676\nf 72424 72426 72425\nf 72425 72426 73677\nf 72425 73677 73678\nf 72426 73656 73677\nf 72427 72428 73682\nf 72427 73680 73663\nf 72427 73682 73680\nf 72428 72429 73682\nf 72429 72430 73683\nf 72429 73683 73682\nf 72430 72437 72438\nf 72430 72438 73683\nf 72431 73684 72439\nf 72432 72434 73689\nf 72432 73689 72433\nf 72433 73687 73675\nf 72433 73689 73687\nf 72434 72440 72441\nf 72434 72441 73695\nf 72434 73695 73689\nf 72435 73690 73698\nf 72435 73698 72436\nf 72436 72444 72443\nf 72436 73698 72444\nf 72437 72445 73700\nf 72437 73692 72438\nf 72437 73700 73692\nf 72438 73691 73683\nf 72438 73692 73691\nf 72439 73684 73693\nf 72439 73693 72446\nf 72440 72442 73697\nf 72440 73697 72441\nf 72441 73697 73695\nf 72442 72447 72448\nf 72442 72448 73702\nf 72442 73702 73697\nf 72443 72444 73705\nf 72443 73705 72449\nf 72444 73698 73699\nf 72444 73699 73705\nf 72445 72451 73707\nf 72445 73707 73700\nf 72446 73693 73701\nf 72446 73701 72453\nf 72447 72454 73709\nf 72447 73704 72448\nf 72447 73709 73704\nf 72448 73704 73702\nf 72449 73705 72450\nf 72450 73705 73706\nf 72450 73706 73712\nf 72450 73712 72456\nf 72451 72452 72458\nf 72451 72458 73714\nf 72451 73714 73707\nf 72452 72457 72458\nf 72453 73701 73708\nf 72453 73708 72459\nf 72454 72455 73711\nf 72454 73711 73709\nf 72455 72460 73711\nf 72456 73712 72461\nf 72457 72462 72463\nf 72457 72463 72458\nf 72458 72463 73714\nf 72459 73708 73715\nf 72459 73715 72464\nf 72460 72465 73722\nf 72460 73716 73711\nf 72460 73722 73716\nf 72461 73712 73718\nf 72461 73718 72466\nf 72462 72467 72469\nf 72462 72469 72463\nf 72463 72469 73720\nf 72463 73720 73714\nf 72464 73715 73721\nf 72464 73721 72470\nf 72465 72471 73727\nf 72465 73727 73722\nf 72466 73718 73724\nf 72466 73724 72472\nf 72467 72468 72469\nf 72468 72473 73725\nf 72468 73725 72469\nf 72469 73725 73720\nf 72470 73721 73726\nf 72470 73726 72474\nf 72471 72475 73731\nf 72471 73731 73727\nf 72472 73724 73728\nf 72472 73728 72477\nf 72473 72478 73734\nf 72473 73729 73725\nf 72473 73734 73729\nf 72474 73726 73730\nf 72474 73730 72479\nf 72475 72476 73732\nf 72475 73732 73731\nf 72476 72480 73732\nf 72477 73728 73733\nf 72477 73733 72481\nf 72478 72482 73739\nf 72478 73739 73734\nf 72479 73730 73735\nf 72479 73735 72483\nf 72480 72484 73741\nf 72480 73736 73732\nf 72480 73741 73736\nf 72481 73733 73738\nf 72481 73738 72485\nf 72482 72486 73744\nf 72482 73744 73739\nf 72483 73735 73740\nf 72483 73740 72487\nf 72484 72488 73748\nf 72484 73748 73741\nf 72485 73738 73743\nf 72485 73743 72489\nf 72486 72491 73751\nf 72486 73751 73744\nf 72487 73740 73745\nf 72487 73745 72492\nf 72488 72495 73753\nf 72488 73753 73748\nf 72489 73743 73750\nf 72489 73750 73755\nf 72489 73755 72490\nf 72490 72497 72496\nf 72490 73755 72497\nf 72491 72498 73757\nf 72491 73757 73751\nf 72492 72494 72493\nf 72492 73745 73746\nf 72492 73746 72494\nf 72493 72494 72499\nf 72494 73746 73752\nf 72494 73752 72499\nf 72495 72500 73759\nf 72495 73759 73753\nf 72496 72497 73761\nf 72496 73761 72501\nf 72497 73755 73756\nf 72497 73756 73761\nf 72498 72502 73763\nf 72498 73763 73757\nf 72499 73752 73758\nf 72499 73758 72503\nf 72500 72504 73765\nf 72500 73765 73759\nf 72501 73761 72506\nf 72502 72507 73768\nf 72502 73768 73763\nf 72503 73758 73764\nf 72503 73764 72508\nf 72504 72505 72510\nf 72504 72510 73770\nf 72504 73770 73765\nf 72505 72509 72510\nf 72506 73761 73766\nf 72506 73766 72511\nf 72507 72512 73773\nf 72507 73773 73768\nf 72508 73764 73769\nf 72508 73769 72513\nf 72509 72514 72515\nf 72509 72515 72510\nf 72510 72515 73770\nf 72511 73766 73771\nf 72511 73771 72516\nf 72512 72517 73779\nf 72512 73779 73773\nf 72513 73769 73774\nf 72513 73774 72518\nf 72514 72519 73781\nf 72514 73776 72515\nf 72514 73781 73776\nf 72515 73775 73770\nf 72515 73776 73775\nf 72516 73771 73777\nf 72516 73777 72520\nf 72517 72521 73785\nf 72517 73785 73779\nf 72518 73774 73780\nf 72518 73780 72522\nf 72519 72523 73787\nf 72519 73787 73781\nf 72520 73777 73783\nf 72520 73783 72524\nf 72521 72525 73791\nf 72521 73791 73785\nf 72522 73780 73786\nf 72522 73786 72526\nf 72523 72527 73794\nf 72523 73794 73787\nf 72524 73783 73789\nf 72524 73789 72528\nf 72525 72529 73798\nf 72525 73798 73791\nf 72526 73786 73792\nf 72526 73792 72530\nf 72527 72531 73801\nf 72527 73801 73794\nf 72528 73789 73796\nf 72528 73796 72532\nf 72529 72533 73805\nf 72529 73805 73798\nf 72530 73792 73799\nf 72530 73799 72534\nf 72531 72535 73808\nf 72531 73808 73801\nf 72532 73796 73803\nf 72532 73803 72536\nf 72533 72538 73812\nf 72533 73812 73805\nf 72534 73799 73806\nf 72534 73806 72539\nf 72535 72540 73815\nf 72535 73815 73808\nf 72536 73803 73810\nf 72536 73810 72537\nf 72537 73810 73811\nf 72537 73811 73819\nf 72537 73819 72550\nf 72538 72552 73822\nf 72538 73822 73812\nf 72539 73806 73813\nf 72539 73813 72553\nf 72540 72541 73817\nf 72540 73817 73815\nf 72541 72542 73817\nf 72542 72543 72555\nf 72542 72554 73817\nf 72542 72555 72554\nf 72543 72544 72557\nf 72543 72557 72555\nf 72544 72556 72557\nf 72545 72546 72577\nf 72545 72576 72574\nf 72545 72577 72576\nf 72546 72547 72579\nf 72546 72579 72577\nf 72547 72578 72579\nf 72548 72549 73818\nf 72548 72623 72621\nf 72548 73818 73879\nf 72548 73879 72623\nf 72549 72551 73818\nf 72550 73819 72551\nf 72551 73819 73820\nf 72551 73820 73818\nf 72552 72624 73884\nf 72552 73884 73822\nf 72553 73813 73823\nf 72553 73823 72625\nf 72554 72555 73828\nf 72554 73826 73817\nf 72554 73828 73826\nf 72555 72557 73829\nf 72555 73829 73828\nf 72556 72558 73830\nf 72556 73830 72557\nf 72557 73830 73829\nf 72558 72559 73831\nf 72558 73831 73830\nf 72559 72560 73832\nf 72559 73832 73831\nf 72560 72561 73833\nf 72560 73833 73832\nf 72561 72562 73834\nf 72561 73834 73833\nf 72562 72563 73835\nf 72562 73835 73834\nf 72563 72626 72627\nf 72563 72627 73835\nf 72564 72565 72636\nf 72564 72635 72633\nf 72564 72636 72635\nf 72565 72566 72637\nf 72565 72637 72636\nf 72566 72567 72638\nf 72566 72638 72637\nf 72567 72568 73836\nf 72567 73836 73908\nf 72567 73908 72638\nf 72568 72569 73836\nf 72569 72570 73837\nf 72569 73837 73836\nf 72570 72571 73838\nf 72570 73838 73837\nf 72571 72572 73839\nf 72571 73839 73838\nf 72572 72573 73840\nf 72572 73840 73839\nf 72573 72575 73841\nf 72573 73841 73840\nf 72574 72576 72575\nf 72575 72576 73843\nf 72575 73842 73841\nf 72575 73843 73842\nf 72576 72577 73843\nf 72577 72579 73844\nf 72577 73844 73843\nf 72578 72580 73845\nf 72578 73845 72579\nf 72579 73845 73844\nf 72580 72581 73846\nf 72580 73846 73845\nf 72581 72582 73847\nf 72581 73847 73846\nf 72582 72583 73848\nf 72582 73848 73847\nf 72583 72584 73849\nf 72583 73849 73848\nf 72584 72585 73850\nf 72584 73850 73849\nf 72585 72586 73851\nf 72585 73851 73850\nf 72586 72587 73852\nf 72586 73852 73851\nf 72587 72588 73853\nf 72587 73853 73852\nf 72588 72589 72640\nf 72588 72639 73853\nf 72588 72640 72639\nf 72589 72590 72641\nf 72589 72641 72640\nf 72590 72591 72642\nf 72590 72642 72641\nf 72591 72592 72643\nf 72591 72643 72642\nf 72592 72593 72644\nf 72592 72644 72643\nf 72593 72594 72645\nf 72593 72645 72644\nf 72594 72595 72646\nf 72594 72646 72645\nf 72595 72596 72647\nf 72595 72647 72646\nf 72596 72597 73854\nf 72596 73854 73934\nf 72596 73934 72647\nf 72597 72598 73854\nf 72598 72599 73855\nf 72598 73855 73854\nf 72599 72600 73856\nf 72599 73856 73855\nf 72600 72601 73857\nf 72600 73857 73856\nf 72601 72602 73858\nf 72601 73858 73857\nf 72602 72603 73859\nf 72602 73859 73858\nf 72603 72604 73860\nf 72603 73860 73859\nf 72604 72605 73861\nf 72604 73861 73860\nf 72605 72606 73862\nf 72605 73862 73861\nf 72606 72607 73863\nf 72606 73863 73862\nf 72607 72608 73864\nf 72607 73864 73863\nf 72608 72609 73865\nf 72608 73865 73864\nf 72609 72610 73866\nf 72609 73866 73865\nf 72610 72611 73867\nf 72610 73867 73866\nf 72611 72612 73868\nf 72611 73868 73867\nf 72612 72613 73869\nf 72612 73869 73868\nf 72613 72614 73870\nf 72613 73870 73869\nf 72614 72615 73871\nf 72614 73871 73870\nf 72615 72616 73872\nf 72615 73872 73871\nf 72616 72617 73873\nf 72616 73873 73872\nf 72617 72618 73874\nf 72617 73874 73873\nf 72618 72619 73875\nf 72618 73875 73874\nf 72619 72620 73876\nf 72619 73876 73875\nf 72620 72622 73877\nf 72620 73877 73876\nf 72621 72623 72622\nf 72622 72623 73880\nf 72622 73878 73877\nf 72622 73880 73878\nf 72623 73879 73880\nf 72624 72648 73960\nf 72624 73960 73884\nf 72625 73823 73885\nf 72625 73885 72649\nf 72626 72628 73898\nf 72626 73898 72627\nf 72627 73896 73835\nf 72627 73898 73896\nf 72628 72629 73899\nf 72628 73899 73898\nf 72629 72630 73900\nf 72629 73900 73899\nf 72630 72631 73901\nf 72630 73901 73900\nf 72631 72632 73902\nf 72631 73902 73901\nf 72632 72634 73903\nf 72632 73903 73902\nf 72633 72635 72634\nf 72634 72635 73905\nf 72634 73904 73903\nf 72634 73905 73904\nf 72635 72636 73905\nf 72636 72637 73906\nf 72636 73906 73905\nf 72637 72638 73907\nf 72637 73907 73906\nf 72638 73908 73909\nf 72638 73909 73907\nf 72639 72640 73926\nf 72639 73924 73853\nf 72639 73926 73924\nf 72640 72641 73927\nf 72640 73927 73926\nf 72641 72642 73928\nf 72641 73928 73927\nf 72642 72643 73929\nf 72642 73929 73928\nf 72643 72644 73930\nf 72643 73930 73929\nf 72644 72645 73931\nf 72644 73931 73930\nf 72645 72646 73932\nf 72645 73932 73931\nf 72646 72647 73933\nf 72646 73933 73932\nf 72647 73934 73935\nf 72647 73935 73933\nf 72648 72650 73968\nf 72648 73968 73960\nf 72649 73885 73961\nf 72649 73961 72651\nf 72650 72652 73970\nf 72650 73970 73968\nf 72651 73961 73969\nf 72651 73969 72653\nf 72652 72654 73972\nf 72652 73972 73970\nf 72653 73969 73971\nf 72653 73971 72655\nf 72654 72656 73974\nf 72654 73974 73972\nf 72655 73971 73973\nf 72655 73973 72657\nf 72656 72658 73976\nf 72656 73976 73974\nf 72657 73973 73975\nf 72657 73975 72659\nf 72658 72660 73978\nf 72658 73978 73976\nf 72659 73975 73977\nf 72659 73977 72661\nf 72660 72666 74002\nf 72660 74002 73978\nf 72661 73977 73979\nf 72661 73979 72667\nf 72662 72672 74023\nf 72662 73981 73983\nf 72662 73983 72663\nf 72662 74023 73981\nf 72663 73983 73985\nf 72663 73985 72674\nf 72664 72700 72702\nf 72664 72702 73994\nf 72664 73994 73996\nf 72664 73996 73998\nf 72664 73998 72665\nf 72665 73998 74000\nf 72665 74000 72703\nf 72666 72710 74106\nf 72666 74106 74002\nf 72667 73979 74003\nf 72667 74003 72711\nf 72668 72715 72717\nf 72668 72717 74009\nf 72668 74009 74011\nf 72668 74011 74013\nf 72668 74013 72669\nf 72669 74013 74015\nf 72669 74015 72718\nf 72670 72721 72723\nf 72670 72723 74017\nf 72670 74017 74019\nf 72670 74019 74021\nf 72670 74021 72671\nf 72671 74021 74024\nf 72671 74024 72673\nf 72672 72673 74023\nf 72673 74024 74023\nf 72674 72676 72675\nf 72674 73985 72676\nf 72675 72676 72677\nf 72676 72678 72677\nf 72676 73985 73987\nf 72676 73987 72678\nf 72677 72678 74027\nf 72677 74027 72679\nf 72678 73987 74026\nf 72678 74026 74027\nf 72679 74027 74029\nf 72679 74029 72680\nf 72680 74029 74031\nf 72680 74031 72681\nf 72681 74031 74033\nf 72681 74033 72724\nf 72682 72765 72767\nf 72682 72767 74063\nf 72682 74063 74065\nf 72682 74065 74067\nf 72682 74067 72683\nf 72683 74067 74069\nf 72683 74069 72768\nf 72684 72771 72773\nf 72684 72773 74071\nf 72684 74071 74073\nf 72684 74073 74075\nf 72684 74075 72685\nf 72685 74075 74077\nf 72685 74077 72686\nf 72686 74077 74079\nf 72686 74079 72687\nf 72687 74079 74081\nf 72687 74081 72688\nf 72688 74081 74083\nf 72688 74083 72689\nf 72689 74083 74085\nf 72689 74085 72690\nf 72690 74085 74087\nf 72690 74087 72691\nf 72691 74087 74089\nf 72691 74089 72692\nf 72692 74089 74092\nf 72692 74092 72693\nf 72693 74092 72694\nf 72694 72695 72696\nf 72694 74091 72695\nf 72694 74092 74091\nf 72695 72697 72696\nf 72695 73988 73990\nf 72695 73990 72697\nf 72695 74091 73988\nf 72696 72697 72698\nf 72697 72699 72698\nf 72697 73990 73992\nf 72697 73992 72699\nf 72698 72699 72701\nf 72699 72702 72701\nf 72699 73992 73994\nf 72699 73994 72702\nf 72700 72701 72702\nf 72703 72705 72704\nf 72703 74000 72705\nf 72704 72705 74095\nf 72704 74095 72706\nf 72705 74000 74094\nf 72705 74094 74095\nf 72706 74095 74097\nf 72706 74097 72707\nf 72707 74097 74099\nf 72707 74099 72708\nf 72708 74099 74101\nf 72708 74101 72709\nf 72709 74101 74103\nf 72709 74103 72774\nf 72710 72777 74149\nf 72710 74149 74106\nf 72711 74003 74107\nf 72711 74107 72778\nf 72712 72714 72781\nf 72712 72781 74108\nf 72712 74005 74007\nf 72712 74007 72714\nf 72712 74108 74005\nf 72713 72714 72716\nf 72713 72779 72781\nf 72713 72781 72714\nf 72714 72717 72716\nf 72714 74007 74009\nf 72714 74009 72717\nf 72715 72716 72717\nf 72718 72720 72719\nf 72718 74015 72720\nf 72719 72720 72722\nf 72720 72723 72722\nf 72720 74015 74017\nf 72720 74017 72723\nf 72721 72722 72723\nf 72724 72726 72725\nf 72724 74033 72726\nf 72725 72726 72727\nf 72726 72728 72727\nf 72726 74033 74034\nf 72726 74034 72728\nf 72727 72728 74111\nf 72727 74111 72729\nf 72728 74034 74110\nf 72728 74110 74111\nf 72729 74111 74113\nf 72729 74113 72730\nf 72730 74113 74115\nf 72730 74115 72731\nf 72731 74115 74117\nf 72731 74117 72732\nf 72732 74117 74119\nf 72732 74119 72733\nf 72733 74119 74121\nf 72733 74121 72782\nf 72734 72791 72793\nf 72734 72793 74129\nf 72734 74129 74131\nf 72734 74131 74133\nf 72734 74133 72735\nf 72735 74133 74135\nf 72735 74135 72736\nf 72736 74135 74137\nf 72736 74137 72737\nf 72737 74137 74139\nf 72737 74139 72738\nf 72738 74139 74141\nf 72738 74141 72739\nf 72739 74141 74144\nf 72739 74144 72740\nf 72740 74144 72741\nf 72741 72742 72743\nf 72741 74143 72742\nf 72741 74144 74143\nf 72742 72744 72743\nf 72742 74039 74041\nf 72742 74041 72744\nf 72742 74143 74039\nf 72743 72744 72745\nf 72744 72746 72745\nf 72744 74041 74043\nf 72744 74043 72746\nf 72745 72746 72747\nf 72746 72748 72747\nf 72746 74043 74045\nf 72746 74045 72748\nf 72747 72748 72749\nf 72748 72750 72749\nf 72748 74045 74047\nf 72748 74047 72750\nf 72749 72750 72751\nf 72750 72752 72751\nf 72750 74047 74049\nf 72750 74049 72752\nf 72751 72752 72753\nf 72752 72754 72753\nf 72752 74049 74051\nf 72752 74051 72754\nf 72753 72754 72755\nf 72754 72756 72755\nf 72754 74051 74053\nf 72754 74053 72756\nf 72755 72756 72757\nf 72756 72758 72757\nf 72756 74053 74055\nf 72756 74055 72758\nf 72757 72758 72759\nf 72758 72760 72759\nf 72758 74055 74057\nf 72758 74057 72760\nf 72759 72760 72761\nf 72760 72762 72761\nf 72760 74057 74059\nf 72760 74059 72762\nf 72761 72762 72763\nf 72762 72764 72763\nf 72762 74059 74061\nf 72762 74061 72764\nf 72763 72764 72766\nf 72764 72767 72766\nf 72764 74061 74063\nf 72764 74063 72767\nf 72765 72766 72767\nf 72768 72770 72769\nf 72768 74069 72770\nf 72769 72770 72772\nf 72770 72773 72772\nf 72770 74069 74071\nf 72770 74071 72773\nf 72771 72772 72773\nf 72774 72776 72775\nf 72774 74103 72776\nf 72775 72776 72796\nf 72775 72796 72794\nf 72776 74103 74146\nf 72776 74146 74147\nf 72776 74147 72796\nf 72777 72797 74156\nf 72777 74156 74149\nf 72778 74107 74150\nf 72778 74150 72798\nf 72779 72780 72781\nf 72780 72799 74151\nf 72780 74151 72781\nf 72781 74151 74108\nf 72782 72784 72783\nf 72782 74121 72784\nf 72783 72784 72785\nf 72784 72786 72785\nf 72784 74121 74123\nf 72784 74123 72786\nf 72785 72786 72787\nf 72786 72788 72787\nf 72786 74123 74125\nf 72786 74125 72788\nf 72787 72788 72789\nf 72788 72790 72789\nf 72788 74125 74127\nf 72788 74127 72790\nf 72789 72790 72792\nf 72790 72793 72792\nf 72790 74127 74129\nf 72790 74129 72793\nf 72791 72792 72793\nf 72794 72796 72795\nf 72795 72796 72801\nf 72795 72801 72800\nf 72796 74147 74153\nf 72796 74153 74154\nf 72796 74154 72801\nf 72797 72802 74161\nf 72797 74161 74156\nf 72798 74150 74157\nf 72798 74157 72803\nf 72799 72804 74163\nf 72799 74158 74151\nf 72799 74163 74158\nf 72800 72801 72805\nf 72801 72806 72805\nf 72801 74154 74160\nf 72801 74160 74165\nf 72801 74165 72806\nf 72802 72807 74166\nf 72802 74166 74161\nf 72803 74157 74162\nf 72803 74162 72808\nf 72804 72809 74168\nf 72804 74168 74163\nf 72805 72806 72810\nf 72806 72812 72810\nf 72806 74165 74170\nf 72806 74170 72812\nf 72807 72813 74171\nf 72807 74171 74166\nf 72808 74162 74167\nf 72808 74167 72814\nf 72809 72815 74173\nf 72809 74173 74168\nf 72810 72812 72811\nf 72811 72812 72816\nf 72812 74170 72816\nf 72813 72817 74177\nf 72813 74177 74171\nf 72814 74167 74172\nf 72814 74172 72818\nf 72815 72819 74179\nf 72815 74179 74173\nf 72816 74170 74175\nf 72816 74175 72820\nf 72817 72821 74183\nf 72817 74183 74177\nf 72818 74172 74178\nf 72818 74178 72822\nf 72819 72823 74185\nf 72819 74185 74179\nf 72820 74175 74181\nf 72820 74181 72824\nf 72821 72825 74190\nf 72821 74190 74183\nf 72822 74178 74184\nf 72822 74184 72827\nf 72823 72828 74185\nf 72824 74181 74188\nf 72824 74188 72830\nf 72825 72826 74191\nf 72825 74191 74190\nf 72826 72831 74191\nf 72827 74184 74192\nf 72827 74192 72833\nf 72828 72829 74185\nf 72828 72834 72835\nf 72828 72835 72829\nf 72829 72835 74193\nf 72829 74186 74185\nf 72829 74193 74186\nf 72830 74188 74194\nf 72830 74194 72836\nf 72831 72832 74202\nf 72831 74196 74191\nf 72831 74202 74196\nf 72832 72837 72838\nf 72832 72838 74202\nf 72833 74192 74197\nf 72833 74197 72839\nf 72834 72840 72841\nf 72834 72841 72835\nf 72835 72841 74198\nf 72835 74198 74193\nf 72836 74194 74200\nf 72836 74200 72842\nf 72837 72843 72838\nf 72838 72843 72844\nf 72838 72844 74208\nf 72838 74208 74202\nf 72839 74197 74203\nf 72839 74203 72845\nf 72840 72846 72847\nf 72840 72847 72841\nf 72841 72847 74204\nf 72841 74204 74198\nf 72842 74200 74206\nf 72842 74206 72848\nf 72843 72849 72844\nf 72844 72849 72850\nf 72844 72850 74213\nf 72844 74213 74208\nf 72845 74203 74209\nf 72845 74209 72851\nf 72846 72852 72853\nf 72846 72853 72847\nf 72847 72853 74210\nf 72847 74210 74204\nf 72848 74206 74211\nf 72848 74211 72854\nf 72849 72855 72850\nf 72850 72855 72856\nf 72850 72856 74219\nf 72850 74219 74213\nf 72851 74209 74214\nf 72851 74214 72857\nf 72852 72859 72860\nf 72852 72860 72853\nf 72853 72860 74216\nf 72853 74216 74210\nf 72854 74211 74217\nf 72854 74217 72861\nf 72855 72862 74227\nf 72855 74227 72856\nf 72856 74220 74219\nf 72856 74227 74220\nf 72857 74214 74221\nf 72857 74221 74222\nf 72857 74222 72858\nf 72858 74222 72863\nf 72859 72864 72865\nf 72859 72865 72860\nf 72860 72865 74224\nf 72860 74224 74216\nf 72861 74217 74225\nf 72861 74225 72866\nf 72862 72867 74233\nf 72862 74233 74227\nf 72863 74222 74229\nf 72863 74229 72868\nf 72864 72869 72870\nf 72864 72870 72865\nf 72865 72870 74230\nf 72865 74230 74224\nf 72866 74225 74231\nf 72866 74231 72871\nf 72867 72872 74239\nf 72867 74239 74233\nf 72868 74229 74235\nf 72868 74235 72873\nf 72869 72874 72875\nf 72869 72875 72870\nf 72870 72875 74236\nf 72870 74236 74230\nf 72871 74231 74237\nf 72871 74237 72876\nf 72872 72877 74246\nf 72872 74246 74239\nf 72873 74235 74241\nf 72873 74241 72878\nf 72874 72879 72881\nf 72874 72881 72875\nf 72875 72881 74242\nf 72875 74242 74236\nf 72876 74237 74244\nf 72876 74244 72882\nf 72877 72883 74254\nf 72877 74254 74246\nf 72878 74241 74248\nf 72878 74248 72884\nf 72879 72880 72881\nf 72880 72885 74249\nf 72880 74249 72881\nf 72881 74249 74242\nf 72882 74244 74251\nf 72882 74251 72886\nf 72883 72888 74260\nf 72883 74260 74254\nf 72884 74248 74256\nf 72884 74256 72889\nf 72885 72890 74263\nf 72885 74257 74249\nf 72885 74263 74257\nf 72886 72887 72891\nf 72886 74251 74252\nf 72886 74252 72887\nf 72887 72893 72891\nf 72887 74252 74259\nf 72887 74259 74265\nf 72887 74265 72893\nf 72888 72894 74266\nf 72888 74266 74260\nf 72889 74256 74262\nf 72889 74262 72895\nf 72890 72896 74269\nf 72890 74269 74263\nf 72891 72893 72892\nf 72892 72893 72897\nf 72893 74265 72897\nf 72894 72898 74272\nf 72894 74272 74266\nf 72895 74262 74268\nf 72895 74268 72899\nf 72896 72900 74275\nf 72896 74275 74269\nf 72897 74265 74271\nf 72897 74271 72901\nf 72898 72902 74277\nf 72898 74277 74272\nf 72899 74268 74274\nf 72899 74274 72903\nf 72900 72904 74280\nf 72900 74280 74275\nf 72901 74271 74276\nf 72901 74276 72905\nf 72902 72906 74282\nf 72902 74282 74277\nf 72903 74274 74279\nf 72903 74279 72907\nf 72904 72908 74284\nf 72904 74284 74280\nf 72905 74276 74281\nf 72905 74281 72909\nf 72906 72910 74286\nf 72906 74286 74282\nf 72907 74279 74283\nf 72907 74283 72911\nf 72908 72912 74288\nf 72908 74288 74284\nf 72909 74281 74285\nf 72909 74285 72913\nf 72910 72914 74290\nf 72910 74290 74286\nf 72911 74283 74287\nf 72911 74287 72915\nf 72912 72916 74292\nf 72912 74292 74288\nf 72913 74285 74289\nf 72913 74289 72917\nf 72914 72918 74294\nf 72914 74294 74290\nf 72915 74287 74291\nf 72915 74291 72919\nf 72916 72920 74296\nf 72916 74296 74292\nf 72917 74289 74293\nf 72917 74293 72921\nf 72918 72922 74298\nf 72918 74298 74294\nf 72919 74291 74295\nf 72919 74295 72923\nf 72920 72925 74300\nf 72920 74300 74296\nf 72921 74293 74297\nf 72921 74297 72926\nf 72922 72927 74302\nf 72922 74302 74298\nf 72923 72929 72924\nf 72923 74295 74299\nf 72923 74299 74303\nf 72923 74303 72929\nf 72924 72929 72928\nf 72925 72930 74304\nf 72925 74304 74300\nf 72926 74297 74301\nf 72926 74301 72931\nf 72927 72932 74306\nf 72927 74306 74302\nf 72928 72929 72934\nf 72928 72934 72933\nf 72929 74303 72934\nf 72930 72935 74309\nf 72930 74309 74304\nf 72931 74301 74305\nf 72931 74305 72936\nf 72932 72937 74311\nf 72932 74311 74306\nf 72933 72934 74308\nf 72933 74308 74312\nf 72933 74312 72938\nf 72934 74303 74307\nf 72934 74307 74308\nf 72935 72939 74314\nf 72935 74314 74309\nf 72936 74305 74310\nf 72936 74310 72940\nf 72937 72941 74316\nf 72937 74316 74311\nf 72938 74312 72942\nf 72939 72943 74318\nf 72939 74318 74314\nf 72940 74310 74315\nf 72940 74315 72944\nf 72941 72945 74320\nf 72941 74320 74316\nf 72942 74312 74317\nf 72942 74317 72946\nf 72943 72947 74322\nf 72943 74322 74318\nf 72944 74315 74319\nf 72944 74319 72948\nf 72945 72949 74324\nf 72945 74324 74320\nf 72946 74317 74321\nf 72946 74321 72950\nf 72947 72951 74327\nf 72947 74327 74322\nf 72948 74319 74323\nf 72948 74323 72952\nf 72949 72953 74329\nf 72949 74329 74324\nf 72950 74321 74325\nf 72950 74325 72954\nf 72951 72955 74333\nf 72951 74333 74327\nf 72952 74323 74328\nf 72952 74328 72957\nf 72953 72958 74335\nf 72953 74335 74329\nf 72954 74325 74330\nf 72954 74330 72959\nf 72955 72956 72962\nf 72955 72962 74337\nf 72955 74337 74333\nf 72956 72961 72962\nf 72957 74328 74334\nf 72957 74334 72963\nf 72958 72964 74339\nf 72958 74339 74335\nf 72959 72960 72966\nf 72959 72966 72965\nf 72959 74330 72960\nf 72960 74330 74331\nf 72960 74331 74336\nf 72960 74336 72966\nf 72961 72967 72969\nf 72961 72969 72962\nf 72962 72969 74337\nf 72963 74334 74338\nf 72963 74338 72970\nf 72964 72971 74344\nf 72964 74344 74339\nf 72965 72966 74341\nf 72965 74341 74345\nf 72965 74345 72972\nf 72966 74336 74340\nf 72966 74340 74341\nf 72967 72968 72969\nf 72968 72973 74342\nf 72968 74342 72969\nf 72969 74342 74337\nf 72970 74338 74343\nf 72970 74343 72974\nf 72971 72975 74348\nf 72971 74348 74344\nf 72972 74345 72976\nf 72973 72977 74350\nf 72973 74346 74342\nf 72973 74350 74346\nf 72974 74343 74347\nf 72974 74347 72978\nf 72975 72979 74352\nf 72975 74352 74348\nf 72976 74345 74349\nf 72976 74349 72980\nf 72977 72981 74354\nf 72977 74354 74350\nf 72978 74347 74351\nf 72978 74351 72983\nf 72979 72984 74357\nf 72979 74357 74352\nf 72980 74349 74353\nf 72980 74353 72985\nf 72981 72982 74355\nf 72981 74355 74354\nf 72982 72986 74355\nf 72983 74351 74356\nf 72983 74356 72987\nf 72984 72988 74362\nf 72984 74362 74357\nf 72985 74353 74358\nf 72985 74358 72989\nf 72986 72990 74364\nf 72986 74359 74355\nf 72986 74364 74359\nf 72987 74356 74361\nf 72987 74361 72991\nf 72988 72992 74367\nf 72988 74367 74362\nf 72989 74358 74363\nf 72989 74363 72993\nf 72990 72994 74369\nf 72990 74369 74364\nf 72991 74361 74366\nf 72991 74366 72995\nf 72992 72996 74372\nf 72992 74372 74367\nf 72993 74363 74368\nf 72993 74368 72997\nf 72994 72998 74374\nf 72994 74374 74369\nf 72995 74366 74371\nf 72995 74371 72999\nf 72996 73000 74377\nf 72996 74377 74372\nf 72997 74368 74373\nf 72997 74373 73001\nf 72998 73002 74379\nf 72998 74379 74374\nf 72999 74371 74376\nf 72999 74376 73003\nf 73000 73004 74382\nf 73000 74382 74377\nf 73001 74373 74378\nf 73001 74378 73005\nf 73002 73006 74385\nf 73002 74385 74379\nf 73003 74376 74381\nf 73003 74381 73007\nf 73004 73009 74382\nf 73005 74378 74384\nf 73005 74384 73011\nf 73006 73012 74391\nf 73006 74391 74385\nf 73007 74381 74387\nf 73007 74387 74393\nf 73007 74393 73008\nf 73008 73014 73013\nf 73008 74393 73014\nf 73009 73010 74382\nf 73009 73015 73017\nf 73009 73017 73010\nf 73010 73017 74388\nf 73010 74383 74382\nf 73010 74388 74383\nf 73011 74384 74390\nf 73011 74390 73018\nf 73012 73019 74397\nf 73012 74397 74391\nf 73013 73014 73020\nf 73014 73021 73020\nf 73014 74393 74399\nf 73014 74399 73021\nf 73015 73016 73017\nf 73016 73022 74394\nf 73016 74394 73017\nf 73017 74394 74388\nf 73018 74390 74396\nf 73018 74396 73023\nf 73019 73024 74404\nf 73019 74404 74397\nf 73020 73021 74406\nf 73020 74406 73026\nf 73021 74399 74400\nf 73021 74400 74406\nf 73022 73028 74408\nf 73022 74401 74394\nf 73022 74408 74401\nf 73023 74396 74403\nf 73023 74403 73029\nf 73024 73025 73031\nf 73024 73031 74412\nf 73024 74412 74404\nf 73025 73030 73031\nf 73026 74406 74415\nf 73026 74415 73027\nf 73027 73033 73032\nf 73027 74415 73033\nf 73028 73034 74408\nf 73029 74403 74411\nf 73029 74411 73037\nf 73030 73038 74419\nf 73030 74414 73031\nf 73030 74419 74414\nf 73031 74414 74412\nf 73032 73033 73040\nf 73033 73041 73040\nf 73033 74415 74421\nf 73033 74421 73041\nf 73034 73035 73036\nf 73034 73036 74409\nf 73034 74409 74408\nf 73035 73042 73036\nf 73036 73042 74417\nf 73036 74417 74409\nf 73037 74411 74418\nf 73037 74418 73043\nf 73038 73039 73045\nf 73038 73045 74425\nf 73038 74425 74419\nf 73039 73044 73045\nf 73040 73041 74428\nf 73040 74428 73049\nf 73041 74421 74422\nf 73041 74422 74428\nf 73042 73051 74430\nf 73042 74423 74417\nf 73042 74430 74423\nf 73043 74418 74424\nf 73043 74424 73052\nf 73044 73046 74427\nf 73044 74427 73045\nf 73045 74427 74425\nf 73046 73047 73055\nf 73046 73053 74432\nf 73046 73055 73053\nf 73046 74432 74427\nf 73047 73054 73055\nf 73048 73050 73128\nf 73048 73127 73125\nf 73048 73128 73127\nf 73049 74428 74459\nf 73049 74459 73050\nf 73050 74459 73128\nf 73051 73129 74462\nf 73051 74462 74430\nf 73052 74424 74431\nf 73052 74431 73130\nf 73053 73055 74434\nf 73053 74434 74432\nf 73054 73056 74435\nf 73054 74435 73055\nf 73055 74435 74434\nf 73056 73057 74436\nf 73056 74436 74435\nf 73057 73058 74437\nf 73057 74437 74436\nf 73058 73059 74438\nf 73058 74438 74437\nf 73059 73060 74439\nf 73059 74439 74438\nf 73060 73061 73132\nf 73060 73131 74439\nf 73060 73132 73131\nf 73061 73062 73133\nf 73061 73133 73132\nf 73062 73063 73134\nf 73062 73134 73133\nf 73063 73064 73135\nf 73063 73135 73134\nf 73064 73065 73136\nf 73064 73136 73135\nf 73065 73066 73137\nf 73065 73137 73136\nf 73066 73067 73138\nf 73066 73138 73137\nf 73067 73068 73139\nf 73067 73139 73138\nf 73068 73069 73140\nf 73068 73140 73139\nf 73069 73070 73141\nf 73069 73141 73140\nf 73070 73071 73142\nf 73070 73142 73141\nf 73071 73072 73143\nf 73071 73143 73142\nf 73072 73073 73144\nf 73072 73144 73143\nf 73073 73074 73145\nf 73073 73145 73144\nf 73074 73075 73146\nf 73074 73146 73145\nf 73075 73076 73147\nf 73075 73147 73146\nf 73076 73077 73148\nf 73076 73148 73147\nf 73077 73078 73149\nf 73077 73149 73148\nf 73078 73079 73150\nf 73078 73150 73149\nf 73079 73080 73151\nf 73079 73151 73150\nf 73080 73081 73152\nf 73080 73152 73151\nf 73081 73082 73153\nf 73081 73153 73152\nf 73082 73083 73154\nf 73082 73154 73153\nf 73083 73084 73155\nf 73083 73155 73154\nf 73084 73085 73156\nf 73084 73156 73155\nf 73085 73086 73157\nf 73085 73157 73156\nf 73086 73087 73158\nf 73086 73158 73157\nf 73087 73088 73159\nf 73087 73159 73158\nf 73088 73089 73160\nf 73088 73160 73159\nf 73089 73090 74440\nf 73089 74440 74501\nf 73089 74501 73160\nf 73090 73091 74440\nf 73091 73092 74441\nf 73091 74441 74440\nf 73092 73093 74442\nf 73092 74442 74441\nf 73093 73094 74443\nf 73093 74443 74442\nf 73094 73095 74444\nf 73094 74444 74443\nf 73095 73096 74445\nf 73095 74445 74444\nf 73096 73097 74446\nf 73096 74446 74445\nf 73097 73098 74447\nf 73097 74447 74446\nf 73098 73099 74448\nf 73098 74448 74447\nf 73099 73100 74449\nf 73099 74449 74448\nf 73100 73101 74450\nf 73100 74450 74449\nf 73101 73102 74451\nf 73101 74451 74450\nf 73102 73103 74452\nf 73102 74452 74451\nf 73103 73104 74453\nf 73103 74453 74452\nf 73104 73105 74454\nf 73104 74454 74453\nf 73105 73106 74455\nf 73105 74455 74454\nf 73106 73107 74456\nf 73106 74456 74455\nf 73107 73108 74457\nf 73107 74457 74456\nf 73108 73109 73162\nf 73108 73161 74457\nf 73108 73162 73161\nf 73109 73110 73163\nf 73109 73163 73162\nf 73110 73111 73164\nf 73110 73164 73163\nf 73111 73112 73165\nf 73111 73165 73164\nf 73112 73113 73166\nf 73112 73166 73165\nf 73113 73114 73167\nf 73113 73167 73166\nf 73114 73115 73168\nf 73114 73168 73167\nf 73115 73116 73169\nf 73115 73169 73168\nf 73116 73117 73170\nf 73116 73170 73169\nf 73117 73118 73171\nf 73117 73171 73170\nf 73118 73119 73172\nf 73118 73172 73171\nf 73119 73120 73173\nf 73119 73173 73172\nf 73120 73121 73174\nf 73120 73174 73173\nf 73121 73122 73175\nf 73121 73175 73174\nf 73122 73123 73176\nf 73122 73176 73175\nf 73123 73124 73177\nf 73123 73177 73176\nf 73124 73126 73178\nf 73124 73178 73177\nf 73125 73127 73126\nf 73126 73127 74458\nf 73126 74458 73178\nf 73127 73128 74458\nf 73128 74459 74460\nf 73128 74460 74458\nf 73129 73179 74543\nf 73129 74543 74462\nf 73130 74431 74463\nf 73130 74463 73180\nf 73131 73132 74472\nf 73131 74470 74439\nf 73131 74472 74470\nf 73132 73133 74473\nf 73132 74473 74472\nf 73133 73134 74474\nf 73133 74474 74473\nf 73134 73135 74475\nf 73134 74475 74474\nf 73135 73136 74476\nf 73135 74476 74475\nf 73136 73137 74477\nf 73136 74477 74476\nf 73137 73138 74478\nf 73137 74478 74477\nf 73138 73139 74479\nf 73138 74479 74478\nf 73139 73140 74480\nf 73139 74480 74479\nf 73140 73141 74481\nf 73140 74481 74480\nf 73141 73142 74482\nf 73141 74482 74481\nf 73142 73143 74483\nf 73142 74483 74482\nf 73143 73144 74484\nf 73143 74484 74483\nf 73144 73145 74485\nf 73144 74485 74484\nf 73145 73146 74486\nf 73145 74486 74485\nf 73146 73147 74487\nf 73146 74487 74486\nf 73147 73148 74488\nf 73147 74488 74487\nf 73148 73149 74489\nf 73148 74489 74488\nf 73149 73150 74490\nf 73149 74490 74489\nf 73150 73151 74491\nf 73150 74491 74490\nf 73151 73152 74492\nf 73151 74492 74491\nf 73152 73153 74493\nf 73152 74493 74492\nf 73153 73154 74494\nf 73153 74494 74493\nf 73154 73155 74495\nf 73154 74495 74494\nf 73155 73156 74496\nf 73155 74496 74495\nf 73156 73157 74497\nf 73156 74497 74496\nf 73157 73158 74498\nf 73157 74498 74497\nf 73158 73159 74499\nf 73158 74499 74498\nf 73159 73160 74500\nf 73159 74500 74499\nf 73160 74501 74502\nf 73160 74502 74500\nf 73161 73162 74522\nf 73161 74520 74457\nf 73161 74522 74520\nf 73162 73163 74523\nf 73162 74523 74522\nf 73163 73164 74524\nf 73163 74524 74523\nf 73164 73165 74525\nf 73164 74525 74524\nf 73165 73166 74526\nf 73165 74526 74525\nf 73166 73167 74527\nf 73166 74527 74526\nf 73167 73168 74528\nf 73167 74528 74527\nf 73168 73169 74529\nf 73168 74529 74528\nf 73169 73170 74530\nf 73169 74530 74529\nf 73170 73171 74531\nf 73170 74531 74530\nf 73171 73172 74532\nf 73171 74532 74531\nf 73172 73173 74533\nf 73172 74533 74532\nf 73173 73174 74534\nf 73173 74534 74533\nf 73174 73175 74535\nf 73174 74535 74534\nf 73175 73176 74536\nf 73175 74536 74535\nf 73176 73177 74537\nf 73176 74537 74536\nf 73177 73178 74538\nf 73177 74538 74537\nf 73178 74458 74539\nf 73178 74539 74540\nf 73178 74540 74538\nf 73179 73181 74620\nf 73179 74620 74543\nf 73180 74463 74544\nf 73180 74544 73182\nf 73181 73183 74656\nf 73181 74656 74620\nf 73182 74544 74621\nf 73182 74621 73184\nf 73183 73185 74658\nf 73183 74658 74656\nf 73184 74621 74657\nf 73184 74657 73186\nf 73185 73187 74660\nf 73185 74660 74658\nf 73186 74657 74659\nf 73186 74659 73188\nf 73187 73189 74662\nf 73187 74662 74660\nf 73188 74659 74661\nf 73188 74661 73190\nf 73189 73191 74665\nf 73189 74665 74662\nf 73190 74661 74664\nf 73190 74664 73192\nf 73191 73193 74668\nf 73191 74668 74665\nf 73192 74664 74667\nf 73192 74667 73194\nf 73193 73195 74671\nf 73193 74671 74668\nf 73194 74667 74670\nf 73194 74670 73196\nf 73195 73197 74674\nf 73195 74674 74671\nf 73196 74670 74673\nf 73196 74673 73198\nf 73197 73199 74677\nf 73197 74677 74674\nf 73198 74673 74676\nf 73198 74676 73200\nf 73199 73201 74701\nf 73199 74701 74677\nf 73200 74676 74679\nf 73200 74679 73202\nf 73201 73203 74701\nf 73202 74679 74704\nf 73202 74704 73206\nf 73203 73204 73205\nf 73203 73205 74701\nf 73204 73207 74734\nf 73204 74734 73205\nf 73205 74702 74701\nf 73205 74734 74702\nf 73206 74704 74735\nf 73206 74735 73208\nf 73207 73209 74798\nf 73207 74798 74734\nf 73208 74735 74801\nf 73208 74801 73212\nf 73209 73210 73211\nf 73209 73211 74798\nf 73210 73214 73216\nf 73210 73216 74876\nf 73210 74876 73211\nf 73211 74799 74798\nf 73211 74875 74799\nf 73211 74876 74875\nf 73212 74801 74878\nf 73212 74878 73217\nf 73213 73374 73376\nf 73213 73376 75035\nf 73213 75035 75038\nf 73213 75038 73215\nf 73214 73215 73216\nf 73215 75037 73216\nf 73215 75038 75037\nf 73216 75037 74876\nf 73217 74878 75040\nf 73217 75040 73377\nf 73218 73381 73383\nf 73218 73383 75044\nf 73218 75044 75046\nf 73218 75046 75048\nf 73218 75048 73219\nf 73219 75048 75050\nf 73219 75050 73220\nf 73220 75050 75052\nf 73220 75052 73221\nf 73221 75052 75054\nf 73221 75054 73222\nf 73222 75054 75056\nf 73222 75056 73223\nf 73223 75056 75058\nf 73223 75058 73224\nf 73224 75058 75060\nf 73224 75060 73225\nf 73225 75060 75062\nf 73225 75062 73226\nf 73226 75062 75065\nf 73226 75065 73227\nf 73227 75065 73228\nf 73228 73229 73230\nf 73228 75064 73229\nf 73228 75065 75064\nf 73229 73231 73230\nf 73229 74889 74891\nf 73229 74891 73231\nf 73229 75064 74889\nf 73230 73231 73232\nf 73231 73233 73232\nf 73231 74891 74893\nf 73231 74893 73233\nf 73232 73233 73234\nf 73233 73235 73234\nf 73233 74893 74895\nf 73233 74895 73235\nf 73234 73235 73236\nf 73235 73237 73236\nf 73235 74895 74897\nf 73235 74897 73237\nf 73236 73237 73238\nf 73237 73239 73238\nf 73237 74897 74899\nf 73237 74899 73239\nf 73238 73239 73240\nf 73239 73241 73240\nf 73239 74899 74901\nf 73239 74901 73241\nf 73240 73241 73242\nf 73241 73243 73242\nf 73241 74901 74903\nf 73241 74903 73243\nf 73242 73243 73244\nf 73243 73245 73244\nf 73243 74903 74905\nf 73243 74905 73245\nf 73244 73245 73246\nf 73245 73247 73246\nf 73245 74905 74907\nf 73245 74907 73247\nf 73246 73247 73248\nf 73247 73249 73248\nf 73247 74907 74909\nf 73247 74909 73249\nf 73248 73249 73250\nf 73249 73251 73250\nf 73249 74909 74911\nf 73249 74911 73251\nf 73250 73251 73252\nf 73251 73253 73252\nf 73251 74911 74913\nf 73251 74913 73253\nf 73252 73253 73254\nf 73253 73255 73254\nf 73253 74913 74915\nf 73253 74915 73255\nf 73254 73255 73256\nf 73255 73257 73256\nf 73255 74915 74917\nf 73255 74917 73257\nf 73256 73257 73258\nf 73257 73259 73258\nf 73257 74917 74919\nf 73257 74919 73259\nf 73258 73259 73260\nf 73259 73261 73260\nf 73259 74919 74921\nf 73259 74921 73261\nf 73260 73261 73262\nf 73261 73263 73262\nf 73261 74921 74923\nf 73261 74923 73263\nf 73262 73263 73264\nf 73263 73265 73264\nf 73263 74923 74925\nf 73263 74925 73265\nf 73264 73265 73266\nf 73265 73267 73266\nf 73265 74925 74927\nf 73265 74927 73267\nf 73266 73267 73268\nf 73267 73269 73268\nf 73267 74927 74929\nf 73267 74929 73269\nf 73268 73269 73270\nf 73269 73271 73270\nf 73269 74929 74931\nf 73269 74931 73271\nf 73270 73271 73272\nf 73271 73273 73272\nf 73271 74931 74933\nf 73271 74933 73273\nf 73272 73273 73274\nf 73273 73275 73274\nf 73273 74933 74935\nf 73273 74935 73275\nf 73274 73275 73276\nf 73275 73277 73276\nf 73275 74935 74937\nf 73275 74937 73277\nf 73276 73277 73278\nf 73277 73279 73278\nf 73277 74937 74939\nf 73277 74939 73279\nf 73278 73279 73280\nf 73279 73281 73280\nf 73279 74939 74941\nf 73279 74941 73281\nf 73280 73281 73282\nf 73281 73283 73282\nf 73281 74941 74943\nf 73281 74943 73283\nf 73282 73283 73284\nf 73283 73285 73284\nf 73283 74943 74945\nf 73283 74945 73285\nf 73284 73285 73286\nf 73285 73287 73286\nf 73285 74945 74947\nf 73285 74947 73287\nf 73286 73287 73288\nf 73287 73289 73288\nf 73287 74947 74949\nf 73287 74949 73289\nf 73288 73289 73290\nf 73289 73291 73290\nf 73289 74949 74951\nf 73289 74951 73291\nf 73290 73291 73292\nf 73291 73293 73292\nf 73291 74951 74953\nf 73291 74953 73293\nf 73292 73293 73294\nf 73293 73295 73294\nf 73293 74953 74955\nf 73293 74955 73295\nf 73294 73295 73296\nf 73295 73297 73296\nf 73295 74955 74957\nf 73295 74957 73297\nf 73296 73297 73298\nf 73297 73299 73298\nf 73297 74957 74959\nf 73297 74959 73299\nf 73298 73299 73300\nf 73299 73301 73300\nf 73299 74959 74961\nf 73299 74961 73301\nf 73300 73301 73302\nf 73301 73303 73302\nf 73301 74961 74963\nf 73301 74963 73303\nf 73302 73303 73304\nf 73303 73305 73304\nf 73303 74963 74965\nf 73303 74965 73305\nf 73304 73305 73306\nf 73305 73307 73306\nf 73305 74965 74967\nf 73305 74967 73307\nf 73306 73307 73308\nf 73307 73309 73308\nf 73307 74967 74969\nf 73307 74969 73309\nf 73308 73309 73310\nf 73309 73311 73310\nf 73309 74969 74971\nf 73309 74971 73311\nf 73310 73311 73312\nf 73311 73313 73312\nf 73311 74971 74973\nf 73311 74973 73313\nf 73312 73313 73314\nf 73313 73315 73314\nf 73313 74973 74975\nf 73313 74975 73315\nf 73314 73315 73316\nf 73315 73317 73316\nf 73315 74975 74977\nf 73315 74977 73317\nf 73316 73317 73318\nf 73317 73319 73318\nf 73317 74977 74979\nf 73317 74979 73319\nf 73318 73319 73320\nf 73319 73321 73320\nf 73319 74979 74981\nf 73319 74981 73321\nf 73320 73321 73322\nf 73321 73323 73322\nf 73321 74981 74983\nf 73321 74983 73323\nf 73322 73323 73324\nf 73323 73325 73324\nf 73323 74983 74985\nf 73323 74985 73325\nf 73324 73325 73326\nf 73325 73327 73326\nf 73325 74985 74987\nf 73325 74987 73327\nf 73326 73327 73328\nf 73327 73329 73328\nf 73327 74987 74989\nf 73327 74989 73329\nf 73328 73329 73330\nf 73329 73331 73330\nf 73329 74989 74991\nf 73329 74991 73331\nf 73330 73331 73332\nf 73331 73333 73332\nf 73331 74991 74993\nf 73331 74993 73333\nf 73332 73333 73334\nf 73333 73335 73334\nf 73333 74993 74995\nf 73333 74995 73335\nf 73334 73335 73336\nf 73335 73337 73336\nf 73335 74995 74997\nf 73335 74997 73337\nf 73336 73337 73338\nf 73337 73339 73338\nf 73337 74997 74999\nf 73337 74999 73339\nf 73338 73339 73340\nf 73339 73341 73340\nf 73339 74999 75001\nf 73339 75001 73341\nf 73340 73341 73342\nf 73341 73343 73342\nf 73341 75001 75003\nf 73341 75003 73343\nf 73342 73343 73344\nf 73343 73345 73344\nf 73343 75003 75005\nf 73343 75005 73345\nf 73344 73345 73346\nf 73345 73347 73346\nf 73345 75005 75007\nf 73345 75007 73347\nf 73346 73347 73348\nf 73347 73349 73348\nf 73347 75007 75009\nf 73347 75009 73349\nf 73348 73349 73350\nf 73349 73351 73350\nf 73349 75009 75011\nf 73349 75011 73351\nf 73350 73351 73352\nf 73351 73353 73352\nf 73351 75011 75013\nf 73351 75013 73353\nf 73352 73353 73354\nf 73353 73355 73354\nf 73353 75013 75015\nf 73353 75015 73355\nf 73354 73355 73356\nf 73355 73357 73356\nf 73355 75015 75017\nf 73355 75017 73357\nf 73356 73357 73358\nf 73357 73359 73358\nf 73357 75017 75019\nf 73357 75019 73359\nf 73358 73359 73360\nf 73359 73361 73360\nf 73359 75019 75021\nf 73359 75021 73361\nf 73360 73361 73362\nf 73361 73363 73362\nf 73361 75021 75023\nf 73361 75023 73363\nf 73362 73363 73364\nf 73363 73365 73364\nf 73363 75023 75025\nf 73363 75025 73365\nf 73364 73365 73366\nf 73365 73367 73366\nf 73365 75025 75027\nf 73365 75027 73367\nf 73366 73367 73368\nf 73367 73369 73368\nf 73367 75027 75029\nf 73367 75029 73369\nf 73368 73369 73370\nf 73369 73371 73370\nf 73369 75029 75031\nf 73369 75031 73371\nf 73370 73371 73372\nf 73371 73373 73372\nf 73371 75031 75033\nf 73371 75033 73373\nf 73372 73373 73375\nf 73373 73376 73375\nf 73373 75033 75035\nf 73373 75035 73376\nf 73374 73375 73376\nf 73377 75040 75067\nf 73377 75067 73384\nf 73378 73385 73387\nf 73378 73387 75069\nf 73378 75069 75072\nf 73378 75072 73379\nf 73379 73380 73382\nf 73379 75071 73380\nf 73379 75072 75071\nf 73380 73383 73382\nf 73380 75042 75044\nf 73380 75044 73383\nf 73380 75071 75042\nf 73381 73382 73383\nf 73384 75067 75074\nf 73384 75074 73388\nf 73385 73386 73387\nf 73386 73389 73391\nf 73386 73391 75076\nf 73386 75076 73387\nf 73387 75075 75069\nf 73387 75076 75075\nf 73388 75074 75078\nf 73388 75078 73392\nf 73389 73390 73391\nf 73390 73393 75079\nf 73390 75079 73391\nf 73391 75079 75076\nf 73392 75078 75081\nf 73392 75081 73394\nf 73393 73395 75085\nf 73393 75082 75079\nf 73393 75085 75082\nf 73394 75081 75084\nf 73394 75084 73396\nf 73395 73397 75088\nf 73395 75088 75085\nf 73396 75084 75087\nf 73396 75087 73398\nf 73397 73399 75092\nf 73397 75092 75088\nf 73398 75087 75090\nf 73398 75090 73400\nf 73399 73401 75096\nf 73399 75096 75092\nf 73400 75090 75094\nf 73400 75094 73402\nf 73401 73403 75100\nf 73401 75100 75096\nf 73402 75094 75098\nf 73402 75098 73404\nf 73403 73405 75103\nf 73403 75103 75100\nf 73404 75098 75102\nf 73404 75102 73406\nf 73405 73407 75107\nf 73405 75107 75103\nf 73406 75102 75105\nf 73406 75105 73408\nf 73407 73410 75111\nf 73407 75111 75107\nf 73408 73409 73412\nf 73408 73412 73411\nf 73408 75105 73409\nf 73409 75105 75106\nf 73409 75106 75109\nf 73409 75109 73412\nf 73410 73413 75114\nf 73410 75114 75111\nf 73411 73412 73416\nf 73411 73416 73414\nf 73412 75109 75113\nf 73412 75113 73416\nf 73413 73417 75117\nf 73413 75117 75114\nf 73414 73416 73415\nf 73415 73416 75116\nf 73415 75116 73418\nf 73416 75113 75116\nf 73417 73419 75120\nf 73417 75120 75117\nf 73418 75116 75119\nf 73418 75119 73420\nf 73419 73421 75123\nf 73419 75123 75120\nf 73420 75119 75122\nf 73420 75122 73422\nf 73421 73423 75126\nf 73421 75126 75123\nf 73422 75122 75125\nf 73422 75125 73424\nf 73423 73425 75129\nf 73423 75129 75126\nf 73424 75125 75128\nf 73424 75128 73426\nf 73425 73427 75132\nf 73425 75132 75129\nf 73426 75128 75131\nf 73426 75131 73428\nf 73427 73429 75135\nf 73427 75135 75132\nf 73428 75131 75134\nf 73428 75134 73430\nf 73429 73431 75138\nf 73429 75138 75135\nf 73430 75134 75137\nf 73430 75137 73432\nf 73431 73433 75141\nf 73431 75141 75138\nf 73432 75137 75140\nf 73432 75140 73434\nf 73433 73435 75144\nf 73433 75144 75141\nf 73434 75140 75143\nf 73434 75143 73436\nf 73435 73437 75147\nf 73435 75147 75144\nf 73436 75143 75146\nf 73436 75146 73438\nf 73437 73439 75150\nf 73437 75150 75147\nf 73438 75146 75149\nf 73438 75149 73440\nf 73439 73441 75150\nf 73440 75149 75153\nf 73440 75153 73444\nf 73441 73442 73443\nf 73441 73443 75150\nf 73442 73445 75154\nf 73442 75154 73443\nf 73443 75151 75150\nf 73443 75154 75151\nf 73444 75153 75156\nf 73444 75156 73446\nf 73445 73447 75160\nf 73445 75157 75154\nf 73445 75160 75157\nf 73446 75156 75159\nf 73446 75159 73448\nf 73447 73450 75163\nf 73447 75163 75160\nf 73448 75159 75162\nf 73448 75162 75165\nf 73448 75165 73449\nf 73449 73452 73451\nf 73449 75165 73452\nf 73450 73453 75167\nf 73450 75167 75163\nf 73451 73452 75169\nf 73451 75169 73454\nf 73452 75165 75166\nf 73452 75166 75169\nf 73453 73455 75171\nf 73453 75171 75167\nf 73454 75169 73456\nf 73455 73457 75175\nf 73455 75175 75171\nf 73456 75169 75173\nf 73456 75173 73458\nf 73457 73459 75179\nf 73457 75179 75175\nf 73458 75173 75177\nf 73458 75177 73460\nf 73459 73461 75183\nf 73459 75183 75179\nf 73460 75177 75181\nf 73460 75181 73462\nf 73461 73463 75187\nf 73461 75187 75183\nf 73462 75181 75185\nf 73462 75185 73464\nf 73463 73465 75187\nf 73464 75185 75190\nf 73464 75190 73467\nf 73465 73466 75187\nf 73465 73468 73469\nf 73465 73469 73466\nf 73466 73469 75192\nf 73466 75188 75187\nf 73466 75192 75188\nf 73467 75190 75193\nf 73467 75193 73470\nf 73468 73471 73472\nf 73468 73472 73469\nf 73469 73472 75194\nf 73469 75194 75192\nf 73470 75193 75195\nf 73470 75195 73473\nf 73471 73474 73475\nf 73471 73475 73472\nf 73472 73475 75196\nf 73472 75196 75194\nf 73473 75195 75197\nf 73473 75197 73476\nf 73474 73477 73478\nf 73474 73478 73475\nf 73475 73478 75198\nf 73475 75198 75196\nf 73476 75197 75199\nf 73476 75199 73479\nf 73477 73480 73481\nf 73477 73481 73478\nf 73478 73481 75200\nf 73478 75200 75198\nf 73479 75199 75201\nf 73479 75201 73482\nf 73480 73483 73484\nf 73480 73484 73481\nf 73481 73484 75202\nf 73481 75202 75200\nf 73482 75201 75203\nf 73482 75203 73485\nf 73483 73486 73487\nf 73483 73487 73484\nf 73484 73487 75204\nf 73484 75204 75202\nf 73485 75203 75205\nf 73485 75205 73488\nf 73486 73489 73490\nf 73486 73490 73487\nf 73487 73490 75206\nf 73487 75206 75204\nf 73488 75205 75207\nf 73488 75207 73491\nf 73489 73492 73493\nf 73489 73493 73490\nf 73490 73493 75208\nf 73490 75208 75206\nf 73491 75207 75209\nf 73491 75209 73494\nf 73492 73495 73497\nf 73492 73497 73493\nf 73493 73497 75210\nf 73493 75210 75208\nf 73494 75209 75211\nf 73494 75211 73498\nf 73495 73496 73497\nf 73496 73499 75212\nf 73496 75212 73497\nf 73497 75212 75210\nf 73498 75211 75213\nf 73498 75213 73500\nf 73499 73501 75216\nf 73499 75214 75212\nf 73499 75216 75214\nf 73500 75213 75215\nf 73500 75215 73502\nf 73501 73504 75218\nf 73501 75218 75216\nf 73502 75215 75217\nf 73502 75217 75219\nf 73502 75219 73503\nf 73503 73506 73505\nf 73503 75219 73506\nf 73504 73507 75221\nf 73504 75221 75218\nf 73505 73506 75222\nf 73505 75222 73508\nf 73506 75219 75220\nf 73506 75220 75222\nf 73507 73509 75224\nf 73507 75224 75221\nf 73508 75222 73510\nf 73509 73511 75227\nf 73509 75227 75224\nf 73510 75222 75225\nf 73510 75225 73512\nf 73511 73513 75230\nf 73511 75230 75227\nf 73512 75225 75228\nf 73512 75228 73514\nf 73513 73515 75233\nf 73513 75233 75230\nf 73514 75228 75231\nf 73514 75231 73516\nf 73515 73517 75236\nf 73515 75236 75233\nf 73516 75231 75235\nf 73516 75235 73518\nf 73517 73519 75239\nf 73517 75239 75236\nf 73518 75235 75238\nf 73518 75238 73520\nf 73519 73521 75242\nf 73519 75242 75239\nf 73520 75238 75241\nf 73520 75241 73522\nf 73521 73523 75245\nf 73521 75245 75242\nf 73522 75241 75244\nf 73522 75244 73524\nf 73523 73525 75248\nf 73523 75248 75245\nf 73524 75244 75247\nf 73524 75247 73526\nf 73525 73528 75252\nf 73525 75252 75248\nf 73526 75247 75250\nf 73526 75250 73527\nf 73527 75250 75251\nf 73527 75251 75254\nf 73527 75254 73529\nf 73528 73530 75256\nf 73528 75256 75252\nf 73529 75254 73531\nf 73530 73532 75260\nf 73530 75260 75256\nf 73531 75254 75258\nf 73531 75258 73533\nf 73532 73534 75263\nf 73532 75263 75260\nf 73533 75258 75262\nf 73533 75262 73535\nf 73534 73536 75263\nf 73535 75262 75266\nf 73535 75266 73538\nf 73536 73537 75263\nf 73536 73539 73540\nf 73536 73540 73537\nf 73537 73540 75267\nf 73537 75264 75263\nf 73537 75267 75264\nf 73538 75266 75268\nf 73538 75268 73541\nf 73539 73542 73544\nf 73539 73544 73540\nf 73540 73544 75269\nf 73540 75269 75267\nf 73541 75268 75270\nf 73541 75270 73545\nf 73542 73543 73544\nf 73543 73546 75271\nf 73543 75271 73544\nf 73544 75271 75269\nf 73545 75270 75272\nf 73545 75272 73547\nf 73546 73548 75275\nf 73546 75273 75271\nf 73546 75275 75273\nf 73547 75272 75274\nf 73547 75274 73549\nf 73548 73550 75277\nf 73548 75277 75275\nf 73549 75274 75276\nf 73549 75276 73551\nf 73550 73552 75280\nf 73550 75280 75277\nf 73551 75276 75279\nf 73551 75279 73553\nf 73552 73554 75284\nf 73552 75284 75280\nf 73553 75279 75282\nf 73553 75282 73555\nf 73554 73557 75289\nf 73554 75289 75284\nf 73555 73556 75287\nf 73555 75282 73556\nf 73555 75287 75291\nf 73555 75291 73558\nf 73556 75282 75283\nf 73556 75283 75286\nf 73556 75286 75287\nf 73557 73560 75292\nf 73557 75292 75289\nf 73558 75291 75294\nf 73558 75294 73559\nf 73559 73563 73561\nf 73559 75294 73563\nf 73560 73564 75295\nf 73560 75295 75292\nf 73561 73563 73562\nf 73562 73563 73565\nf 73563 75294 73565\nf 73564 73566 75295\nf 73565 75294 75298\nf 73565 75298 73569\nf 73566 73567 73568\nf 73566 73568 75295\nf 73567 73571 75299\nf 73567 75299 73568\nf 73568 75296 75295\nf 73568 75299 75296\nf 73569 75298 75300\nf 73569 75300 75302\nf 73569 75302 73570\nf 73570 73573 73572\nf 73570 75302 73573\nf 73571 73574 75303\nf 73571 75301 75299\nf 73571 75303 75301\nf 73572 73573 73575\nf 73573 73576 73575\nf 73573 75302 75304\nf 73573 75304 73576\nf 73574 73577 75305\nf 73574 75305 75303\nf 73575 73576 73578\nf 73576 73579 73578\nf 73576 75304 75306\nf 73576 75306 73579\nf 73577 73580 75307\nf 73577 75307 75305\nf 73578 73579 73581\nf 73579 73582 73581\nf 73579 75306 75309\nf 73579 75309 73582\nf 73580 73583 75310\nf 73580 75310 75307\nf 73581 73582 73584\nf 73582 73585 73584\nf 73582 75309 75312\nf 73582 75312 73585\nf 73583 73586 75313\nf 73583 75313 75310\nf 73584 73585 73587\nf 73585 73588 73587\nf 73585 75312 75315\nf 73585 75315 73588\nf 73586 73589 75316\nf 73586 75316 75313\nf 73587 73588 73590\nf 73588 73591 73590\nf 73588 75315 75318\nf 73588 75318 73591\nf 73589 73592 75320\nf 73589 75320 75316\nf 73590 73591 75323\nf 73590 75323 73593\nf 73591 75318 75319\nf 73591 75319 75323\nf 73592 73594 75320\nf 73593 75323 73597\nf 73594 73595 73596\nf 73594 73596 75320\nf 73595 73598 75325\nf 73595 75325 73596\nf 73596 75321 75320\nf 73596 75325 75321\nf 73597 75323 75326\nf 73597 75326 73599\nf 73598 73600 75332\nf 73598 75328 75325\nf 73598 75332 75328\nf 73599 75326 75329\nf 73599 75329 73601\nf 73600 73604 75334\nf 73600 75334 75332\nf 73601 73603 73602\nf 73601 75329 75330\nf 73601 75330 73603\nf 73602 73603 73605\nf 73603 75330 75333\nf 73603 75333 73605\nf 73604 73606 75337\nf 73604 75337 75334\nf 73605 75333 75336\nf 73605 75336 73607\nf 73606 73608 75337\nf 73607 75336 75340\nf 73607 75340 73610\nf 73608 73609 75337\nf 73608 73611 73613\nf 73608 73613 73609\nf 73609 73613 75341\nf 73609 75338 75337\nf 73609 75341 75338\nf 73610 75340 75342\nf 73610 75342 73614\nf 73611 73612 73613\nf 73612 73616 75343\nf 73612 75343 73613\nf 73613 75343 75341\nf 73614 75342 75344\nf 73614 75344 73615\nf 73615 75344 75345\nf 73615 75345 75347\nf 73615 75347 73617\nf 73616 73618 75349\nf 73616 75346 75343\nf 73616 75349 75346\nf 73617 75347 73620\nf 73618 73619 75349\nf 73619 73621 75354\nf 73619 75350 75349\nf 73619 75354 75350\nf 73620 75347 75352\nf 73620 75352 73622\nf 73621 73623 75357\nf 73621 75357 75354\nf 73622 75352 75355\nf 73622 75355 73624\nf 73623 73625 75360\nf 73623 75360 75357\nf 73624 75355 75358\nf 73624 75358 73627\nf 73625 73626 75360\nf 73626 73628 75363\nf 73626 75361 75360\nf 73626 75363 75361\nf 73627 75358 75362\nf 73627 75362 73629\nf 73628 73630 75366\nf 73628 75366 75363\nf 73629 75362 75364\nf 73629 75364 73632\nf 73630 73631 75371\nf 73630 75371 75366\nf 73631 73634 73635\nf 73631 73635 75371\nf 73632 75364 75367\nf 73632 75367 75368\nf 73632 75368 73633\nf 73633 75368 73636\nf 73634 73637 75377\nf 73634 75377 73635\nf 73635 75372 75371\nf 73635 75377 75372\nf 73636 75368 75374\nf 73636 75374 73638\nf 73637 73641 75381\nf 73637 75381 75377\nf 73638 73640 73639\nf 73638 75374 75375\nf 73638 75375 73640\nf 73639 73640 73644\nf 73639 73644 73642\nf 73640 75375 75378\nf 73640 75378 75379\nf 73640 75379 73644\nf 73641 73646 75386\nf 73641 75386 75381\nf 73642 73644 73643\nf 73643 73644 75383\nf 73643 75383 73645\nf 73644 75379 75382\nf 73644 75382 75383\nf 73645 75383 75385\nf 73645 75385 73648\nf 73646 73647 75386\nf 73647 73652 75392\nf 73647 75387 75386\nf 73647 75392 75387\nf 73648 73650 73649\nf 73648 75385 73650\nf 73649 73650 75390\nf 73649 75390 73651\nf 73650 75385 75389\nf 73650 75389 75390\nf 73651 75390 75393\nf 73651 75393 73653\nf 73652 73653 75392\nf 73653 75393 75392\nf 73654 73655 73670\nf 73654 73668 73666\nf 73654 73670 73668\nf 73655 73669 73670\nf 73656 73657 75395\nf 73656 75395 75409\nf 73656 75409 73677\nf 73657 73658 75396\nf 73657 75396 75395\nf 73658 73659 75397\nf 73658 75397 75396\nf 73659 73660 75398\nf 73659 75398 75397\nf 73660 73661 75399\nf 73660 75399 75398\nf 73661 73662 75400\nf 73661 75400 75399\nf 73662 73663 73681\nf 73662 73679 75400\nf 73662 73681 73679\nf 73663 73680 73681\nf 73664 73665 75401\nf 73664 73685 73684\nf 73664 75401 75422\nf 73664 75422 73685\nf 73665 73667 75401\nf 73666 73668 73667\nf 73667 73668 75403\nf 73667 75402 75401\nf 73667 75403 75402\nf 73668 73670 75403\nf 73669 73671 75404\nf 73669 75404 73670\nf 73670 75404 75403\nf 73671 73672 75405\nf 73671 75405 75404\nf 73672 73673 75406\nf 73672 75406 75405\nf 73673 73674 75407\nf 73673 75407 75406\nf 73674 73675 73688\nf 73674 73686 75407\nf 73674 73688 73686\nf 73675 73687 73688\nf 73676 73678 75408\nf 73676 75408 75433\nf 73676 75433 73690\nf 73677 75409 73678\nf 73678 75409 75410\nf 73678 75410 75408\nf 73679 73681 75418\nf 73679 75416 75400\nf 73679 75418 75416\nf 73680 73682 75419\nf 73680 75419 73681\nf 73681 75419 75418\nf 73682 73683 75420\nf 73682 75420 75419\nf 73683 73691 75421\nf 73683 75421 75420\nf 73684 73685 75440\nf 73684 75440 73693\nf 73685 75422 75423\nf 73685 75423 75440\nf 73686 73688 73694\nf 73686 73694 75432\nf 73686 75430 75407\nf 73686 75432 75430\nf 73687 73689 73696\nf 73687 73696 73688\nf 73688 73696 73694\nf 73689 73695 73696\nf 73690 75433 73698\nf 73691 73692 75439\nf 73691 75437 75421\nf 73691 75439 75437\nf 73692 73700 75439\nf 73693 75440 73701\nf 73694 73696 75451\nf 73694 75449 75432\nf 73694 75451 75449\nf 73695 73697 75452\nf 73695 75452 73696\nf 73696 75452 75451\nf 73697 73702 73703\nf 73697 73703 75464\nf 73697 75464 75452\nf 73698 75433 75453\nf 73698 75453 73699\nf 73699 75453 75454\nf 73699 75454 75467\nf 73699 75467 73705\nf 73700 73707 75469\nf 73700 75455 75439\nf 73700 75469 75455\nf 73701 75440 75457\nf 73701 75457 73708\nf 73702 73704 75466\nf 73702 75466 73703\nf 73703 75466 75464\nf 73704 73709 73710\nf 73704 73710 75476\nf 73704 75476 75466\nf 73705 75467 75479\nf 73705 75479 73706\nf 73706 73713 73712\nf 73706 75479 73713\nf 73707 73714 75481\nf 73707 75481 75469\nf 73708 75457 75471\nf 73708 75471 73715\nf 73709 73711 75478\nf 73709 75478 73710\nf 73710 75478 75476\nf 73711 73716 73717\nf 73711 73717 75488\nf 73711 75488 75478\nf 73712 73713 73718\nf 73713 73719 73718\nf 73713 75479 75490\nf 73713 75490 73719\nf 73714 73720 75492\nf 73714 75492 75481\nf 73715 75471 75483\nf 73715 75483 73721\nf 73716 73722 73723\nf 73716 73723 73717\nf 73717 73723 75488\nf 73718 73719 75501\nf 73718 75501 73724\nf 73719 75490 75491\nf 73719 75491 75501\nf 73720 73725 75503\nf 73720 75503 75492\nf 73721 75483 75494\nf 73721 75494 73726\nf 73722 73727 75510\nf 73722 75500 73723\nf 73722 75510 75500\nf 73723 75498 75488\nf 73723 75500 75498\nf 73724 75501 73728\nf 73725 73729 75514\nf 73725 75514 75503\nf 73726 75494 75505\nf 73726 75505 73730\nf 73727 73731 75521\nf 73727 75521 75510\nf 73728 75501 75512\nf 73728 75512 73733\nf 73729 73734 75525\nf 73729 75525 75514\nf 73730 75505 75516\nf 73730 75516 73735\nf 73731 73732 73737\nf 73731 73737 75532\nf 73731 75532 75521\nf 73732 73736 73737\nf 73733 75512 75523\nf 73733 75523 73738\nf 73734 73739 75536\nf 73734 75536 75525\nf 73735 75516 75527\nf 73735 75527 73740\nf 73736 73741 73742\nf 73736 73742 73737\nf 73737 73742 75532\nf 73738 75523 75534\nf 73738 75534 73743\nf 73739 73744 75547\nf 73739 75547 75536\nf 73740 75527 75538\nf 73740 75538 73745\nf 73741 73748 73749\nf 73741 73749 73742\nf 73742 73749 75543\nf 73742 75543 75532\nf 73743 75534 75545\nf 73743 75545 73750\nf 73744 73751 75556\nf 73744 75556 75547\nf 73745 73747 73746\nf 73745 75538 75539\nf 73745 75539 73747\nf 73746 73747 73752\nf 73747 75539 75549\nf 73747 75549 73752\nf 73748 73753 73754\nf 73748 73754 73749\nf 73749 73754 75552\nf 73749 75552 75543\nf 73750 75545 75554\nf 73750 75554 73755\nf 73751 73757 75565\nf 73751 75565 75556\nf 73752 75549 75558\nf 73752 75558 73758\nf 73753 73759 73760\nf 73753 73760 73754\nf 73754 73760 75561\nf 73754 75561 75552\nf 73755 75554 75563\nf 73755 75563 75572\nf 73755 75572 73756\nf 73756 73762 73761\nf 73756 75572 73762\nf 73757 73763 75574\nf 73757 75574 75565\nf 73758 75558 75566\nf 73758 75566 73764\nf 73759 73765 75579\nf 73759 75571 73760\nf 73759 75579 75571\nf 73760 75569 75561\nf 73760 75571 75569\nf 73761 73762 73766\nf 73762 73767 73766\nf 73762 75572 75581\nf 73762 75581 73767\nf 73763 73768 75583\nf 73763 75583 75574\nf 73764 75566 75575\nf 73764 75575 73769\nf 73765 73770 75589\nf 73765 75589 75579\nf 73766 73767 73771\nf 73767 73772 73771\nf 73767 75581 75591\nf 73767 75591 73772\nf 73768 73773 75593\nf 73768 75593 75583\nf 73769 75575 75584\nf 73769 75584 73774\nf 73770 73775 75598\nf 73770 75598 75589\nf 73771 73772 73777\nf 73772 73778 73777\nf 73772 75591 75600\nf 73772 75600 73778\nf 73773 73779 75602\nf 73773 75602 75593\nf 73774 75584 75594\nf 73774 75594 73780\nf 73775 73776 73782\nf 73775 73782 75607\nf 73775 75607 75598\nf 73776 73781 73782\nf 73777 73778 73783\nf 73778 73784 73783\nf 73778 75600 75609\nf 73778 75609 73784\nf 73779 73785 75611\nf 73779 75611 75602\nf 73780 75594 75603\nf 73780 75603 73786\nf 73781 73787 73788\nf 73781 73788 73782\nf 73782 73788 75607\nf 73783 73784 73789\nf 73784 73790 73789\nf 73784 75609 75621\nf 73784 75621 73790\nf 73785 73791 75623\nf 73785 75623 75611\nf 73786 75603 75613\nf 73786 75613 73792\nf 73787 73794 73795\nf 73787 73795 73788\nf 73788 73793 75618\nf 73788 73795 73793\nf 73788 75618 75607\nf 73789 73790 73796\nf 73790 73797 73796\nf 73790 75621 75631\nf 73790 75631 73797\nf 73791 73798 75633\nf 73791 75633 75623\nf 73792 75613 75625\nf 73792 75625 73799\nf 73793 73795 73800\nf 73793 73800 75629\nf 73793 75619 75618\nf 73793 75629 75619\nf 73794 73801 73802\nf 73794 73802 73795\nf 73795 73802 73800\nf 73796 73797 73803\nf 73797 73804 73803\nf 73797 75631 75641\nf 73797 75641 73804\nf 73798 73805 75644\nf 73798 75644 75633\nf 73799 75625 75635\nf 73799 75635 73806\nf 73800 73802 73807\nf 73800 73807 75639\nf 73800 75639 75629\nf 73801 73808 73809\nf 73801 73809 73802\nf 73802 73809 73807\nf 73803 73804 75652\nf 73803 75652 73810\nf 73804 75641 75642\nf 73804 75642 75652\nf 73805 73812 75655\nf 73805 75655 75644\nf 73806 75635 75646\nf 73806 75646 73813\nf 73807 73809 73814\nf 73807 73814 75650\nf 73807 75650 75639\nf 73808 73815 73816\nf 73808 73816 73809\nf 73809 73816 73814\nf 73810 75652 75662\nf 73810 75662 73811\nf 73811 73821 73819\nf 73811 75662 73821\nf 73812 73822 75665\nf 73812 75665 75655\nf 73813 75646 75657\nf 73813 75657 73823\nf 73814 73816 73824\nf 73814 73824 75660\nf 73814 75660 75650\nf 73815 73817 73827\nf 73815 73827 73816\nf 73816 73825 73824\nf 73816 73827 73825\nf 73817 73826 73827\nf 73818 73820 73882\nf 73818 73881 73879\nf 73818 73882 73881\nf 73819 73821 73820\nf 73820 73821 73882\nf 73821 73883 73882\nf 73821 75662 75680\nf 73821 75680 73883\nf 73822 73884 75684\nf 73822 75684 75665\nf 73823 75657 75667\nf 73823 75667 73885\nf 73824 73825 73886\nf 73824 73886 75671\nf 73824 75671 75660\nf 73825 73827 73887\nf 73825 73887 73886\nf 73826 73828 73889\nf 73826 73889 73827\nf 73827 73888 73887\nf 73827 73889 73888\nf 73828 73829 73890\nf 73828 73890 73889\nf 73829 73830 73891\nf 73829 73891 73890\nf 73830 73831 73892\nf 73830 73892 73891\nf 73831 73832 73893\nf 73831 73893 73892\nf 73832 73833 73894\nf 73832 73894 73893\nf 73833 73834 73895\nf 73833 73895 73894\nf 73834 73835 73897\nf 73834 73897 73895\nf 73835 73896 73897\nf 73836 73837 73911\nf 73836 73910 73908\nf 73836 73911 73910\nf 73837 73838 73912\nf 73837 73912 73911\nf 73838 73839 73913\nf 73838 73913 73912\nf 73839 73840 73914\nf 73839 73914 73913\nf 73840 73841 73915\nf 73840 73915 73914\nf 73841 73842 75673\nf 73841 75673 75713\nf 73841 75713 73915\nf 73842 73843 75673\nf 73843 73844 75674\nf 73843 75674 75673\nf 73844 73845 75675\nf 73844 75675 75674\nf 73845 73846 73917\nf 73845 73916 75675\nf 73845 73917 73916\nf 73846 73847 73918\nf 73846 73918 73917\nf 73847 73848 73919\nf 73847 73919 73918\nf 73848 73849 73920\nf 73848 73920 73919\nf 73849 73850 73921\nf 73849 73921 73920\nf 73850 73851 73922\nf 73850 73922 73921\nf 73851 73852 73923\nf 73851 73923 73922\nf 73852 73853 73925\nf 73852 73925 73923\nf 73853 73924 73925\nf 73854 73855 73937\nf 73854 73936 73934\nf 73854 73937 73936\nf 73855 73856 73938\nf 73855 73938 73937\nf 73856 73857 73939\nf 73856 73939 73938\nf 73857 73858 73940\nf 73857 73940 73939\nf 73858 73859 73941\nf 73858 73941 73940\nf 73859 73860 73942\nf 73859 73942 73941\nf 73860 73861 73943\nf 73860 73943 73942\nf 73861 73862 73944\nf 73861 73944 73943\nf 73862 73863 73945\nf 73862 73945 73944\nf 73863 73864 73946\nf 73863 73946 73945\nf 73864 73865 73947\nf 73864 73947 73946\nf 73865 73866 73948\nf 73865 73948 73947\nf 73866 73867 73949\nf 73866 73949 73948\nf 73867 73868 73950\nf 73867 73950 73949\nf 73868 73869 73951\nf 73868 73951 73950\nf 73869 73870 73952\nf 73869 73952 73951\nf 73870 73871 73953\nf 73870 73953 73952\nf 73871 73872 73954\nf 73871 73954 73953\nf 73872 73873 73955\nf 73872 73955 73954\nf 73873 73874 73956\nf 73873 73956 73955\nf 73874 73875 73957\nf 73874 73957 73956\nf 73875 73876 73958\nf 73875 73958 73957\nf 73876 73877 73959\nf 73876 73959 73958\nf 73877 73878 75676\nf 73877 75676 75760\nf 73877 75760 73959\nf 73878 73880 75676\nf 73879 73881 73880\nf 73880 73881 75678\nf 73880 75677 75676\nf 73880 75678 75677\nf 73881 73882 75678\nf 73882 73883 75679\nf 73882 75679 75678\nf 73883 75680 75681\nf 73883 75681 75679\nf 73884 73960 75769\nf 73884 75769 75684\nf 73885 75667 75686\nf 73885 75686 73961\nf 73886 73887 75692\nf 73886 75690 75671\nf 73886 75692 75690\nf 73887 73888 75693\nf 73887 75693 75692\nf 73888 73889 75694\nf 73888 75694 75693\nf 73889 73890 75695\nf 73889 75695 75694\nf 73890 73891 75696\nf 73890 75696 75695\nf 73891 73892 75697\nf 73891 75697 75696\nf 73892 73893 75698\nf 73892 75698 75697\nf 73893 73894 75699\nf 73893 75699 75698\nf 73894 73895 75700\nf 73894 75700 75699\nf 73895 73897 75701\nf 73895 75701 75700\nf 73896 73898 75702\nf 73896 75702 73897\nf 73897 75702 75701\nf 73898 73899 75703\nf 73898 75703 75702\nf 73899 73900 73963\nf 73899 73962 75703\nf 73899 73963 73962\nf 73900 73901 73964\nf 73900 73964 73963\nf 73901 73902 73965\nf 73901 73965 73964\nf 73902 73903 73966\nf 73902 73966 73965\nf 73903 73904 73967\nf 73903 73967 73966\nf 73904 73905 75704\nf 73904 75704 75793\nf 73904 75793 73967\nf 73905 73906 75704\nf 73906 73907 75705\nf 73906 75705 75704\nf 73907 73909 75706\nf 73907 75706 75705\nf 73908 73910 73909\nf 73909 73910 75708\nf 73909 75707 75706\nf 73909 75708 75707\nf 73910 73911 75708\nf 73911 73912 75709\nf 73911 75709 75708\nf 73912 73913 75710\nf 73912 75710 75709\nf 73913 73914 75711\nf 73913 75711 75710\nf 73914 73915 75712\nf 73914 75712 75711\nf 73915 75713 75714\nf 73915 75714 75712\nf 73916 73917 75719\nf 73916 75717 75675\nf 73916 75719 75717\nf 73917 73918 75720\nf 73917 75720 75719\nf 73918 73919 75721\nf 73918 75721 75720\nf 73919 73920 75722\nf 73919 75722 75721\nf 73920 73921 75723\nf 73920 75723 75722\nf 73921 73922 75724\nf 73921 75724 75723\nf 73922 73923 75725\nf 73922 75725 75724\nf 73923 73925 75726\nf 73923 75726 75725\nf 73924 73926 75727\nf 73924 75727 73925\nf 73925 75727 75726\nf 73926 73927 75728\nf 73926 75728 75727\nf 73927 73928 75729\nf 73927 75729 75728\nf 73928 73929 75730\nf 73928 75730 75729\nf 73929 73930 75731\nf 73929 75731 75730\nf 73930 73931 75732\nf 73930 75732 75731\nf 73931 73932 75733\nf 73931 75733 75732\nf 73932 73933 75734\nf 73932 75734 75733\nf 73933 73935 75735\nf 73933 75735 75734\nf 73934 73936 73935\nf 73935 73936 75737\nf 73935 75736 75735\nf 73935 75737 75736\nf 73936 73937 75737\nf 73937 73938 75738\nf 73937 75738 75737\nf 73938 73939 75739\nf 73938 75739 75738\nf 73939 73940 75740\nf 73939 75740 75739\nf 73940 73941 75741\nf 73940 75741 75740\nf 73941 73942 75742\nf 73941 75742 75741\nf 73942 73943 75743\nf 73942 75743 75742\nf 73943 73944 75744\nf 73943 75744 75743\nf 73944 73945 75745\nf 73944 75745 75744\nf 73945 73946 75746\nf 73945 75746 75745\nf 73946 73947 75747\nf 73946 75747 75746\nf 73947 73948 75748\nf 73947 75748 75747\nf 73948 73949 75749\nf 73948 75749 75748\nf 73949 73950 75750\nf 73949 75750 75749\nf 73950 73951 75751\nf 73950 75751 75750\nf 73951 73952 75752\nf 73951 75752 75751\nf 73952 73953 75753\nf 73952 75753 75752\nf 73953 73954 75754\nf 73953 75754 75753\nf 73954 73955 75755\nf 73954 75755 75754\nf 73955 73956 75756\nf 73955 75756 75755\nf 73956 73957 75757\nf 73956 75757 75756\nf 73957 73958 75758\nf 73957 75758 75757\nf 73958 73959 75759\nf 73958 75759 75758\nf 73959 75760 75761\nf 73959 75761 75759\nf 73960 73968 75856\nf 73960 75856 75769\nf 73961 75686 75771\nf 73961 75771 73969\nf 73962 73963 75788\nf 73962 75786 75703\nf 73962 75788 75786\nf 73963 73964 75789\nf 73963 75789 75788\nf 73964 73965 75790\nf 73964 75790 75789\nf 73965 73966 75791\nf 73965 75791 75790\nf 73966 73967 75792\nf 73966 75792 75791\nf 73967 75793 75794\nf 73967 75794 75792\nf 73968 73970 75933\nf 73968 75933 75856\nf 73969 75771 75858\nf 73969 75858 73971\nf 73970 73972 75964\nf 73970 75964 75933\nf 73971 75858 75935\nf 73971 75935 73973\nf 73972 73974 75974\nf 73972 75974 75964\nf 73973 75935 75966\nf 73973 75966 73975\nf 73974 73976 75984\nf 73974 75984 75974\nf 73975 75966 75976\nf 73975 75976 73977\nf 73976 73978 76050\nf 73976 76050 75984\nf 73977 75976 75986\nf 73977 75986 73979\nf 73978 74002 76169\nf 73978 76169 76050\nf 73979 75986 76052\nf 73979 76052 74003\nf 73980 74006 76058\nf 73980 74008 74006\nf 73980 74010 74008\nf 73980 75992 76061\nf 73980 76058 75992\nf 73980 76061 76062\nf 73980 76062 74010\nf 73981 73982 73983\nf 73981 74023 74025\nf 73981 74025 76077\nf 73981 76077 73982\nf 73982 73984 73983\nf 73982 76002 76004\nf 73982 76004 73984\nf 73982 76076 76002\nf 73982 76077 76076\nf 73983 73984 73985\nf 73984 73986 73985\nf 73984 76004 76006\nf 73984 76006 73986\nf 73985 73986 76080\nf 73985 76080 73987\nf 73986 76006 76079\nf 73986 76079 76080\nf 73987 76080 76082\nf 73987 76082 74026\nf 73988 73989 73990\nf 73988 74091 74093\nf 73988 74093 76153\nf 73988 76153 73989\nf 73989 73991 73990\nf 73989 76030 76032\nf 73989 76032 73991\nf 73989 76152 76030\nf 73989 76153 76152\nf 73990 73991 73992\nf 73991 73993 73992\nf 73991 76032 76034\nf 73991 76034 73993\nf 73992 73993 73994\nf 73993 73995 73994\nf 73993 76034 76036\nf 73993 76036 73995\nf 73994 73995 73996\nf 73995 73997 73996\nf 73995 76036 76038\nf 73995 76038 73997\nf 73996 73997 73998\nf 73997 73999 73998\nf 73997 76038 76040\nf 73997 76040 73999\nf 73998 73999 74000\nf 73999 74001 74000\nf 73999 76040 76042\nf 73999 76042 74001\nf 74000 74001 74096\nf 74000 74096 74094\nf 74001 76042 76155\nf 74001 76155 76156\nf 74001 76156 74096\nf 74002 74106 76211\nf 74002 76211 76169\nf 74003 76052 76171\nf 74003 76171 74107\nf 74004 74006 74109\nf 74004 74109 76174\nf 74004 76056 76059\nf 74004 76059 74006\nf 74004 76174 76056\nf 74005 74006 74007\nf 74005 74108 74109\nf 74005 74109 74006\nf 74006 74008 74007\nf 74006 76059 76058\nf 74007 74008 74009\nf 74008 74010 74009\nf 74009 74010 74011\nf 74010 74012 74011\nf 74010 76062 76064\nf 74010 76064 74012\nf 74011 74012 74013\nf 74012 74014 74013\nf 74012 76064 76066\nf 74012 76066 74014\nf 74013 74014 74015\nf 74014 74016 74015\nf 74014 76066 76068\nf 74014 76068 74016\nf 74015 74016 74017\nf 74016 74018 74017\nf 74016 76068 76070\nf 74016 76070 74018\nf 74017 74018 74019\nf 74018 74020 74019\nf 74018 76070 76072\nf 74018 76072 74020\nf 74019 74020 74021\nf 74020 74022 74021\nf 74020 76072 76074\nf 74020 76074 74022\nf 74021 74022 74024\nf 74022 74025 74024\nf 74022 76074 76077\nf 74022 76077 74025\nf 74023 74024 74025\nf 74026 74028 74027\nf 74026 76082 74028\nf 74027 74028 74029\nf 74028 74030 74029\nf 74028 76082 76084\nf 74028 76084 74030\nf 74029 74030 74031\nf 74030 74032 74031\nf 74030 76084 76086\nf 74030 76086 74032\nf 74031 74032 76177\nf 74031 76177 74033\nf 74032 76086 76176\nf 74032 76176 76177\nf 74033 76177 76179\nf 74033 76179 74034\nf 74034 76179 76181\nf 74034 76181 74110\nf 74035 74036 74138\nf 74035 74136 76205\nf 74035 74138 74136\nf 74035 76092 76094\nf 74035 76094 74036\nf 74035 76205 76092\nf 74036 74037 74140\nf 74036 74140 74138\nf 74036 76094 76096\nf 74036 76096 74037\nf 74037 74038 74142\nf 74037 74142 74140\nf 74037 76096 76098\nf 74037 76098 74038\nf 74038 74040 74145\nf 74038 74145 74142\nf 74038 76098 76100\nf 74038 76100 74040\nf 74039 74040 74041\nf 74039 74143 74145\nf 74039 74145 74040\nf 74040 74042 74041\nf 74040 76100 76102\nf 74040 76102 74042\nf 74041 74042 74043\nf 74042 74044 74043\nf 74042 76102 76104\nf 74042 76104 74044\nf 74043 74044 74045\nf 74044 74046 74045\nf 74044 76104 76106\nf 74044 76106 74046\nf 74045 74046 74047\nf 74046 74048 74047\nf 74046 76106 76108\nf 74046 76108 74048\nf 74047 74048 74049\nf 74048 74050 74049\nf 74048 76108 76110\nf 74048 76110 74050\nf 74049 74050 74051\nf 74050 74052 74051\nf 74050 76110 76112\nf 74050 76112 74052\nf 74051 74052 74053\nf 74052 74054 74053\nf 74052 76112 76114\nf 74052 76114 74054\nf 74053 74054 74055\nf 74054 74056 74055\nf 74054 76114 76116\nf 74054 76116 74056\nf 74055 74056 74057\nf 74056 74058 74057\nf 74056 76116 76118\nf 74056 76118 74058\nf 74057 74058 74059\nf 74058 74060 74059\nf 74058 76118 76120\nf 74058 76120 74060\nf 74059 74060 74061\nf 74060 74062 74061\nf 74060 76120 76122\nf 74060 76122 74062\nf 74061 74062 74063\nf 74062 74064 74063\nf 74062 76122 76124\nf 74062 76124 74064\nf 74063 74064 74065\nf 74064 74066 74065\nf 74064 76124 76126\nf 74064 76126 74066\nf 74065 74066 74067\nf 74066 74068 74067\nf 74066 76126 76128\nf 74066 76128 74068\nf 74067 74068 74069\nf 74068 74070 74069\nf 74068 76128 76130\nf 74068 76130 74070\nf 74069 74070 74071\nf 74070 74072 74071\nf 74070 76130 76132\nf 74070 76132 74072\nf 74071 74072 74073\nf 74072 74074 74073\nf 74072 76132 76134\nf 74072 76134 74074\nf 74073 74074 74075\nf 74074 74076 74075\nf 74074 76134 76136\nf 74074 76136 74076\nf 74075 74076 74077\nf 74076 74078 74077\nf 74076 76136 76138\nf 74076 76138 74078\nf 74077 74078 74079\nf 74078 74080 74079\nf 74078 76138 76140\nf 74078 76140 74080\nf 74079 74080 74081\nf 74080 74082 74081\nf 74080 76140 76142\nf 74080 76142 74082\nf 74081 74082 74083\nf 74082 74084 74083\nf 74082 76142 76144\nf 74082 76144 74084\nf 74083 74084 74085\nf 74084 74086 74085\nf 74084 76144 76146\nf 74084 76146 74086\nf 74085 74086 74087\nf 74086 74088 74087\nf 74086 76146 76148\nf 74086 76148 74088\nf 74087 74088 74089\nf 74088 74090 74089\nf 74088 76148 76150\nf 74088 76150 74090\nf 74089 74090 74092\nf 74090 74093 74092\nf 74090 76150 76153\nf 74090 76153 74093\nf 74091 74092 74093\nf 74094 74096 74095\nf 74095 74096 74097\nf 74096 74098 74097\nf 74096 76156 76158\nf 74096 76158 74098\nf 74097 74098 74099\nf 74098 74100 74099\nf 74098 76158 76160\nf 74098 76160 74100\nf 74099 74100 74101\nf 74100 74102 74101\nf 74100 76160 76162\nf 74100 76162 74102\nf 74101 74102 74103\nf 74102 74104 74103\nf 74102 76162 76164\nf 74102 76164 74104\nf 74103 74104 74146\nf 74104 74105 74148\nf 74104 74148 74146\nf 74104 76164 76166\nf 74104 76166 74105\nf 74105 76166 76208\nf 74105 76208 76218\nf 74105 76218 74148\nf 74106 74149 76222\nf 74106 76222 76211\nf 74107 76171 76213\nf 74107 76213 74150\nf 74108 74151 74152\nf 74108 74152 74109\nf 74109 74152 76216\nf 74109 76216 76174\nf 74110 74112 74111\nf 74110 76181 74112\nf 74111 74112 74113\nf 74112 74114 74113\nf 74112 76181 76183\nf 74112 76183 74114\nf 74113 74114 74115\nf 74114 74116 74115\nf 74114 76183 76185\nf 74114 76185 74116\nf 74115 74116 74117\nf 74116 74118 74117\nf 74116 76185 76187\nf 74116 76187 74118\nf 74117 74118 74119\nf 74118 74120 74119\nf 74118 76187 76189\nf 74118 76189 74120\nf 74119 74120 74121\nf 74120 74122 74121\nf 74120 76189 76191\nf 74120 76191 74122\nf 74121 74122 74123\nf 74122 74124 74123\nf 74122 76191 76193\nf 74122 76193 74124\nf 74123 74124 74125\nf 74124 74126 74125\nf 74124 76193 76195\nf 74124 76195 74126\nf 74125 74126 74127\nf 74126 74128 74127\nf 74126 76195 76197\nf 74126 76197 74128\nf 74127 74128 74129\nf 74128 74130 74129\nf 74128 76197 76199\nf 74128 76199 74130\nf 74129 74130 74131\nf 74130 74132 74131\nf 74130 76199 76201\nf 74130 76201 74132\nf 74131 74132 74133\nf 74132 74134 74133\nf 74132 76201 76203\nf 74132 76203 74134\nf 74133 74134 74135\nf 74134 74136 74135\nf 74134 76203 76206\nf 74134 76206 74136\nf 74135 74136 74137\nf 74136 74138 74137\nf 74136 76206 76205\nf 74137 74138 74139\nf 74138 74140 74139\nf 74139 74140 74141\nf 74140 74142 74141\nf 74141 74142 74144\nf 74142 74145 74144\nf 74143 74144 74145\nf 74146 74148 74147\nf 74147 74148 74155\nf 74147 74155 74153\nf 74148 76218 76219\nf 74148 76219 74155\nf 74149 74156 76232\nf 74149 76232 76222\nf 74150 76213 76224\nf 74150 76224 74157\nf 74151 74158 74159\nf 74151 74159 74152\nf 74152 74159 76228\nf 74152 76228 76216\nf 74153 74155 74154\nf 74154 74155 74160\nf 74155 76219 76230\nf 74155 76230 74160\nf 74156 74161 76243\nf 74156 76243 76232\nf 74157 76224 76234\nf 74157 76234 74162\nf 74158 74163 74164\nf 74158 74164 74159\nf 74159 74164 76238\nf 74159 76238 76228\nf 74160 76230 76240\nf 74160 76240 74165\nf 74161 74166 76254\nf 74161 76254 76243\nf 74162 76234 76245\nf 74162 76245 74167\nf 74163 74168 74169\nf 74163 74169 74164\nf 74164 74169 76249\nf 74164 76249 76238\nf 74165 76240 76251\nf 74165 76251 74170\nf 74166 74171 76265\nf 74166 76265 76254\nf 74167 76245 76255\nf 74167 76255 74172\nf 74168 74173 74174\nf 74168 74174 74169\nf 74169 74174 76259\nf 74169 76259 76249\nf 74170 76251 76261\nf 74170 76261 74175\nf 74171 74177 76274\nf 74171 76274 76265\nf 74172 76255 76266\nf 74172 76266 74178\nf 74173 74179 74180\nf 74173 74180 74174\nf 74174 74180 76270\nf 74174 76270 76259\nf 74175 74176 74181\nf 74175 76261 76262\nf 74175 76262 74176\nf 74176 74182 74181\nf 74176 76262 76272\nf 74176 76272 76281\nf 74176 76281 74182\nf 74177 74183 76283\nf 74177 76283 76274\nf 74178 76266 76275\nf 74178 76275 74184\nf 74179 74185 74187\nf 74179 74187 74180\nf 74180 74187 76279\nf 74180 76279 76270\nf 74181 74182 74188\nf 74182 74189 74188\nf 74182 76281 76290\nf 74182 76290 74189\nf 74183 74190 76292\nf 74183 76292 76283\nf 74184 76275 76284\nf 74184 76284 74192\nf 74185 74186 74187\nf 74186 74193 76288\nf 74186 76288 74187\nf 74187 76288 76279\nf 74188 74189 74194\nf 74189 74195 74194\nf 74189 76290 76301\nf 74189 76301 74195\nf 74190 74191 76293\nf 74190 76293 76292\nf 74191 74196 76293\nf 74192 76284 76294\nf 74192 76294 74197\nf 74193 74198 76298\nf 74193 76298 76288\nf 74194 74195 74200\nf 74195 74201 74200\nf 74195 76301 76310\nf 74195 76310 74201\nf 74196 74202 76312\nf 74196 76303 76293\nf 74196 76312 76303\nf 74197 76294 76305\nf 74197 76305 74203\nf 74198 74199 76298\nf 74198 74204 74205\nf 74198 74205 74199\nf 74199 74205 76308\nf 74199 76299 76298\nf 74199 76308 76299\nf 74200 74201 74206\nf 74201 74207 74206\nf 74201 76310 76320\nf 74201 76320 74207\nf 74202 74208 76322\nf 74202 76322 76312\nf 74203 76305 76314\nf 74203 76314 74209\nf 74204 74210 76329\nf 74204 76319 74205\nf 74204 76329 76319\nf 74205 76317 76308\nf 74205 76319 76317\nf 74206 74207 74211\nf 74207 74212 74211\nf 74207 76320 76331\nf 74207 76331 74212\nf 74208 74213 76333\nf 74208 76333 76322\nf 74209 76314 76324\nf 74209 76324 74214\nf 74210 74216 76338\nf 74210 76338 76329\nf 74211 74212 74217\nf 74212 74218 74217\nf 74212 76331 76340\nf 74212 76340 74218\nf 74213 74219 76342\nf 74213 76342 76333\nf 74214 74215 74221\nf 74214 76324 76325\nf 74214 76325 74215\nf 74215 74223 74221\nf 74215 76325 76335\nf 74215 76335 76344\nf 74215 76344 74223\nf 74216 74224 76348\nf 74216 76348 76338\nf 74217 74218 74225\nf 74218 74226 74225\nf 74218 76340 76350\nf 74218 76350 74226\nf 74219 74220 76352\nf 74219 76352 76342\nf 74220 74227 74228\nf 74220 74228 76352\nf 74221 74223 74222\nf 74222 74223 74229\nf 74223 76344 74229\nf 74224 74230 76358\nf 74224 76358 76348\nf 74225 74226 74231\nf 74226 74232 74231\nf 74226 76350 76360\nf 74226 76360 74232\nf 74227 74233 74228\nf 74228 74233 74234\nf 74228 74234 76362\nf 74228 76362 76352\nf 74229 76344 76354\nf 74229 76354 74235\nf 74230 74236 76368\nf 74230 76368 76358\nf 74231 74232 74237\nf 74232 74238 74237\nf 74232 76360 76371\nf 74232 76371 74238\nf 74233 74239 74234\nf 74234 74239 74240\nf 74234 74240 76373\nf 74234 76373 76362\nf 74235 76354 76364\nf 74235 76364 74241\nf 74236 74242 76368\nf 74237 74238 74244\nf 74238 74245 74244\nf 74238 76371 76380\nf 74238 76380 74245\nf 74239 74246 74240\nf 74240 74246 74247\nf 74240 74247 76382\nf 74240 76382 76373\nf 74241 76364 76375\nf 74241 76375 74248\nf 74242 74243 76368\nf 74242 74249 74250\nf 74242 74250 74243\nf 74243 74250 76378\nf 74243 76369 76368\nf 74243 76378 76369\nf 74244 74245 74251\nf 74245 74253 74251\nf 74245 76380 76389\nf 74245 76389 74253\nf 74246 74254 74247\nf 74247 74254 74255\nf 74247 74255 76391\nf 74247 76391 76382\nf 74248 76375 76384\nf 74248 76384 74256\nf 74249 74257 74258\nf 74249 74258 74250\nf 74250 74258 76387\nf 74250 76387 76378\nf 74251 74253 74252\nf 74252 74253 74259\nf 74253 76389 74259\nf 74254 74260 74255\nf 74255 74260 74261\nf 74255 74261 76400\nf 74255 76400 76391\nf 74256 76384 76393\nf 74256 76393 74262\nf 74257 74263 74264\nf 74257 74264 74258\nf 74258 74264 76396\nf 74258 76396 76387\nf 74259 76389 76398\nf 74259 76398 74265\nf 74260 74266 74261\nf 74261 74266 74267\nf 74261 74267 76409\nf 74261 76409 76400\nf 74262 76393 76402\nf 74262 76402 74268\nf 74263 74269 74270\nf 74263 74270 74264\nf 74264 74270 76405\nf 74264 76405 76396\nf 74265 76398 76407\nf 74265 76407 74271\nf 74266 74272 74267\nf 74267 74272 74273\nf 74267 74273 76419\nf 74267 76419 76409\nf 74268 76402 76411\nf 74268 76411 74274\nf 74269 74275 76424\nf 74269 76416 74270\nf 74269 76424 76416\nf 74270 76414 76405\nf 74270 76416 76414\nf 74271 76407 76417\nf 74271 76417 74276\nf 74272 74277 74273\nf 74273 74277 74278\nf 74273 74278 76428\nf 74273 76428 76419\nf 74274 76411 76421\nf 74274 76421 74279\nf 74275 74280 76434\nf 74275 76434 76424\nf 74276 76417 76426\nf 74276 76426 74281\nf 74277 74282 76438\nf 74277 76438 74278\nf 74278 76429 76428\nf 74278 76438 76429\nf 74279 76421 76431\nf 74279 76431 74283\nf 74280 74284 76442\nf 74280 76442 76434\nf 74281 76426 76436\nf 74281 76436 74285\nf 74282 74286 76446\nf 74282 76446 76438\nf 74283 76431 76439\nf 74283 76439 74287\nf 74284 74288 76450\nf 74284 76450 76442\nf 74285 76436 76444\nf 74285 76444 74289\nf 74286 74290 76454\nf 74286 76454 76446\nf 74287 76439 76447\nf 74287 76447 74291\nf 74288 74292 76459\nf 74288 76459 76450\nf 74289 76444 76452\nf 74289 76452 74293\nf 74290 74294 76463\nf 74290 76463 76454\nf 74291 76447 76456\nf 74291 76456 74295\nf 74292 74296 76468\nf 74292 76468 76459\nf 74293 76452 76461\nf 74293 76461 74297\nf 74294 74298 76472\nf 74294 76472 76463\nf 74295 76456 76465\nf 74295 76465 74299\nf 74296 74300 76476\nf 74296 76476 76468\nf 74297 76461 76470\nf 74297 76470 74301\nf 74298 74302 76480\nf 74298 76480 76472\nf 74299 76465 76474\nf 74299 76474 74303\nf 74300 74304 76484\nf 74300 76484 76476\nf 74301 76470 76478\nf 74301 76478 74305\nf 74302 74306 76488\nf 74302 76488 76480\nf 74303 76474 76482\nf 74303 76482 74307\nf 74304 74309 76492\nf 74304 76492 76484\nf 74305 76478 76486\nf 74305 76486 74310\nf 74306 74311 76496\nf 74306 76496 76488\nf 74307 74313 74308\nf 74307 76482 76490\nf 74307 76490 76498\nf 74307 76498 74313\nf 74308 74313 74312\nf 74309 74314 76501\nf 74309 76501 76492\nf 74310 76486 76494\nf 74310 76494 74315\nf 74311 74316 76505\nf 74311 76505 76496\nf 74312 74313 76499\nf 74312 76499 76507\nf 74312 76507 74317\nf 74313 76498 76499\nf 74314 74318 76508\nf 74314 76508 76501\nf 74315 76494 76503\nf 74315 76503 74319\nf 74316 74320 76512\nf 74316 76512 76505\nf 74317 76507 74321\nf 74318 74322 76517\nf 74318 76517 76508\nf 74319 76503 76510\nf 74319 76510 74323\nf 74320 74324 76521\nf 74320 76521 76512\nf 74321 76507 76514\nf 74321 76514 74325\nf 74322 74327 76526\nf 74322 76526 76517\nf 74323 76510 76519\nf 74323 76519 74328\nf 74324 74329 76530\nf 74324 76530 76521\nf 74325 74326 74332\nf 74325 74332 74330\nf 74325 76514 74326\nf 74326 76514 76515\nf 74326 76515 76523\nf 74326 76523 74332\nf 74327 74333 76535\nf 74327 76535 76526\nf 74328 76519 76528\nf 74328 76528 74334\nf 74329 74335 76539\nf 74329 76539 76530\nf 74330 74332 74331\nf 74331 74332 76532\nf 74331 76532 74336\nf 74332 76523 76532\nf 74333 74337 76544\nf 74333 76544 76535\nf 74334 76528 76537\nf 74334 76537 74338\nf 74335 74339 76548\nf 74335 76548 76539\nf 74336 76532 76541\nf 74336 76541 74340\nf 74337 74342 76553\nf 74337 76553 76544\nf 74338 76537 76546\nf 74338 76546 74343\nf 74339 74344 76557\nf 74339 76557 76548\nf 74340 76541 76549\nf 74340 76549 76550\nf 74340 76550 74341\nf 74341 76550 74345\nf 74342 74346 76560\nf 74342 76560 76553\nf 74343 76546 76555\nf 74343 76555 74347\nf 74344 74348 76564\nf 74344 76564 76557\nf 74345 76550 76558\nf 74345 76558 74349\nf 74346 74350 76567\nf 74346 76567 76560\nf 74347 76555 76562\nf 74347 76562 74351\nf 74348 74352 76571\nf 74348 76571 76564\nf 74349 76558 76565\nf 74349 76565 74353\nf 74350 74354 76574\nf 74350 76574 76567\nf 74351 76562 76569\nf 74351 76569 74356\nf 74352 74357 76578\nf 74352 76578 76571\nf 74353 76565 76572\nf 74353 76572 74358\nf 74354 74355 74360\nf 74354 74360 76581\nf 74354 76581 76574\nf 74355 74359 74360\nf 74356 76569 76576\nf 74356 76576 74361\nf 74357 74362 76585\nf 74357 76585 76578\nf 74358 76572 76579\nf 74358 76579 74363\nf 74359 74364 74365\nf 74359 74365 74360\nf 74360 74365 76581\nf 74361 76576 76583\nf 74361 76583 74366\nf 74362 74367 76592\nf 74362 76592 76585\nf 74363 76579 76586\nf 74363 76586 74368\nf 74364 74369 74370\nf 74364 74370 74365\nf 74365 74370 76588\nf 74365 76588 76581\nf 74366 76583 76590\nf 74366 76590 74371\nf 74367 74372 76600\nf 74367 76600 76592\nf 74368 76586 76593\nf 74368 76593 74373\nf 74369 74374 74375\nf 74369 74375 74370\nf 74370 74375 76596\nf 74370 76596 76588\nf 74371 76590 76598\nf 74371 76598 74376\nf 74372 74377 76608\nf 74372 76608 76600\nf 74373 76593 76601\nf 74373 76601 74378\nf 74374 74379 74380\nf 74374 74380 74375\nf 74375 74380 76604\nf 74375 76604 76596\nf 74376 76598 76606\nf 74376 76606 74381\nf 74377 74382 76616\nf 74377 76616 76608\nf 74378 76601 76609\nf 74378 76609 74384\nf 74379 74385 74386\nf 74379 74386 74380\nf 74380 74386 76612\nf 74380 76612 76604\nf 74381 76606 76614\nf 74381 76614 74387\nf 74382 74383 76625\nf 74382 76625 76616\nf 74383 74388 74389\nf 74383 74389 76625\nf 74384 76609 76618\nf 74384 76618 74390\nf 74385 74391 74392\nf 74385 74392 74386\nf 74386 74392 76621\nf 74386 76621 76612\nf 74387 76614 76623\nf 74387 76623 74393\nf 74388 74394 74389\nf 74389 74394 74395\nf 74389 74395 76634\nf 74389 76634 76625\nf 74390 76618 76627\nf 74390 76627 74396\nf 74391 74397 74398\nf 74391 74398 74392\nf 74392 74398 76630\nf 74392 76630 76621\nf 74393 76623 76632\nf 74393 76632 74399\nf 74394 74401 74395\nf 74395 74401 74402\nf 74395 74402 76643\nf 74395 76643 76634\nf 74396 76627 76636\nf 74396 76636 74403\nf 74397 74404 74405\nf 74397 74405 74398\nf 74398 74405 76639\nf 74398 76639 76630\nf 74399 76632 76641\nf 74399 76641 76650\nf 74399 76650 74400\nf 74400 74407 74406\nf 74400 76650 74407\nf 74401 74408 74402\nf 74402 74408 74410\nf 74402 74410 76652\nf 74402 76652 76643\nf 74403 76636 76645\nf 74403 76645 74411\nf 74404 74412 74413\nf 74404 74413 74405\nf 74405 74413 76648\nf 74405 76648 76639\nf 74406 74407 74415\nf 74407 74416 74415\nf 74407 76650 76660\nf 74407 76660 74416\nf 74408 74409 74410\nf 74409 74417 74410\nf 74410 74417 76652\nf 74411 76645 76654\nf 74411 76654 74418\nf 74412 74414 76659\nf 74412 76659 74413\nf 74413 76657 76648\nf 74413 76659 76657\nf 74414 74419 74420\nf 74414 74420 76669\nf 74414 76669 76659\nf 74415 74416 76671\nf 74415 76671 74421\nf 74416 76660 76661\nf 74416 76661 76671\nf 74417 74423 76674\nf 74417 76663 76652\nf 74417 76674 76663\nf 74418 76654 76665\nf 74418 76665 74424\nf 74419 74425 74426\nf 74419 74426 74420\nf 74420 74426 76669\nf 74421 76671 76683\nf 74421 76683 74422\nf 74422 74429 74428\nf 74422 76683 74429\nf 74423 74430 76686\nf 74423 76686 76674\nf 74424 76665 76676\nf 74424 76676 74431\nf 74425 74427 76682\nf 74425 76682 74426\nf 74426 76680 76669\nf 74426 76682 76680\nf 74427 74432 74433\nf 74427 74433 76691\nf 74427 76691 76682\nf 74428 74429 74459\nf 74429 74461 74459\nf 74429 76683 76693\nf 74429 76693 74461\nf 74430 74462 76698\nf 74430 76698 76686\nf 74431 76676 76687\nf 74431 76687 74463\nf 74432 74434 74465\nf 74432 74465 74433\nf 74433 74464 76691\nf 74433 74465 74464\nf 74434 74435 74466\nf 74434 74466 74465\nf 74435 74436 74467\nf 74435 74467 74466\nf 74436 74437 74468\nf 74436 74468 74467\nf 74437 74438 74469\nf 74437 74469 74468\nf 74438 74439 74471\nf 74438 74471 74469\nf 74439 74470 74471\nf 74440 74441 74504\nf 74440 74503 74501\nf 74440 74504 74503\nf 74441 74442 74505\nf 74441 74505 74504\nf 74442 74443 74506\nf 74442 74506 74505\nf 74443 74444 74507\nf 74443 74507 74506\nf 74444 74445 74508\nf 74444 74508 74507\nf 74445 74446 74509\nf 74445 74509 74508\nf 74446 74447 74510\nf 74446 74510 74509\nf 74447 74448 74511\nf 74447 74511 74510\nf 74448 74449 74512\nf 74448 74512 74511\nf 74449 74450 74513\nf 74449 74513 74512\nf 74450 74451 74514\nf 74450 74514 74513\nf 74451 74452 74515\nf 74451 74515 74514\nf 74452 74453 74516\nf 74452 74516 74515\nf 74453 74454 74517\nf 74453 74517 74516\nf 74454 74455 74518\nf 74454 74518 74517\nf 74455 74456 74519\nf 74455 74519 74518\nf 74456 74457 74521\nf 74456 74521 74519\nf 74457 74520 74521\nf 74458 74460 74542\nf 74458 74541 74539\nf 74458 74542 74541\nf 74459 74461 74460\nf 74460 74461 76694\nf 74460 76694 74542\nf 74461 76693 76694\nf 74462 74543 76709\nf 74462 76709 76698\nf 74463 76687 76699\nf 74463 76699 74544\nf 74464 74465 74545\nf 74464 74545 76703\nf 74464 76703 76691\nf 74465 74466 74546\nf 74465 74546 74545\nf 74466 74467 74547\nf 74466 74547 74546\nf 74467 74468 74548\nf 74467 74548 74547\nf 74468 74469 74549\nf 74468 74549 74548\nf 74469 74471 74550\nf 74469 74550 74549\nf 74470 74472 74552\nf 74470 74552 74471\nf 74471 74551 74550\nf 74471 74552 74551\nf 74472 74473 74553\nf 74472 74553 74552\nf 74473 74474 74554\nf 74473 74554 74553\nf 74474 74475 74555\nf 74474 74555 74554\nf 74475 74476 74556\nf 74475 74556 74555\nf 74476 74477 74557\nf 74476 74557 74556\nf 74477 74478 74558\nf 74477 74558 74557\nf 74478 74479 74559\nf 74478 74559 74558\nf 74479 74480 74560\nf 74479 74560 74559\nf 74480 74481 74561\nf 74480 74561 74560\nf 74481 74482 74562\nf 74481 74562 74561\nf 74482 74483 74563\nf 74482 74563 74562\nf 74483 74484 74564\nf 74483 74564 74563\nf 74484 74485 74565\nf 74484 74565 74564\nf 74485 74486 74566\nf 74485 74566 74565\nf 74486 74487 74567\nf 74486 74567 74566\nf 74487 74488 74568\nf 74487 74568 74567\nf 74488 74489 74569\nf 74488 74569 74568\nf 74489 74490 74570\nf 74489 74570 74569\nf 74490 74491 74571\nf 74490 74571 74570\nf 74491 74492 74572\nf 74491 74572 74571\nf 74492 74493 74573\nf 74492 74573 74572\nf 74493 74494 74574\nf 74493 74574 74573\nf 74494 74495 74575\nf 74494 74575 74574\nf 74495 74496 74576\nf 74495 74576 74575\nf 74496 74497 74577\nf 74496 74577 74576\nf 74497 74498 74578\nf 74497 74578 74577\nf 74498 74499 74579\nf 74498 74579 74578\nf 74499 74500 74580\nf 74499 74580 74579\nf 74500 74502 74581\nf 74500 74581 74580\nf 74501 74503 74502\nf 74502 74503 74581\nf 74503 74504 74582\nf 74503 74582 74581\nf 74504 74505 74583\nf 74504 74583 74582\nf 74505 74506 74584\nf 74505 74584 74583\nf 74506 74507 74585\nf 74506 74585 74584\nf 74507 74508 74586\nf 74507 74586 74585\nf 74508 74509 74587\nf 74508 74587 74586\nf 74509 74510 74588\nf 74509 74588 74587\nf 74510 74511 74589\nf 74510 74589 74588\nf 74511 74512 74590\nf 74511 74590 74589\nf 74512 74513 74591\nf 74512 74591 74590\nf 74513 74514 74592\nf 74513 74592 74591\nf 74514 74515 74593\nf 74514 74593 74592\nf 74515 74516 74594\nf 74515 74594 74593\nf 74516 74517 74595\nf 74516 74595 74594\nf 74517 74518 74596\nf 74517 74596 74595\nf 74518 74519 74597\nf 74518 74597 74596\nf 74519 74521 74598\nf 74519 74598 74597\nf 74520 74522 74600\nf 74520 74600 74521\nf 74521 74599 74598\nf 74521 74600 74599\nf 74522 74523 74601\nf 74522 74601 74600\nf 74523 74524 74602\nf 74523 74602 74601\nf 74524 74525 74603\nf 74524 74603 74602\nf 74525 74526 74604\nf 74525 74604 74603\nf 74526 74527 74605\nf 74526 74605 74604\nf 74527 74528 74606\nf 74527 74606 74605\nf 74528 74529 74607\nf 74528 74607 74606\nf 74529 74530 74608\nf 74529 74608 74607\nf 74530 74531 74609\nf 74530 74609 74608\nf 74531 74532 74610\nf 74531 74610 74609\nf 74532 74533 74611\nf 74532 74611 74610\nf 74533 74534 74612\nf 74533 74612 74611\nf 74534 74535 74613\nf 74534 74613 74612\nf 74535 74536 74614\nf 74535 74614 74613\nf 74536 74537 74615\nf 74536 74615 74614\nf 74537 74538 74616\nf 74537 74616 74615\nf 74538 74540 74617\nf 74538 74617 74616\nf 74539 74541 74540\nf 74540 74541 74617\nf 74541 74542 74618\nf 74541 74618 74617\nf 74542 74619 74618\nf 74542 76694 76705\nf 74542 76705 76756\nf 74542 76756 74619\nf 74543 74620 76761\nf 74543 76761 76709\nf 74544 76699 76710\nf 74544 76710 74621\nf 74545 74546 76716\nf 74545 76714 76703\nf 74545 76716 76714\nf 74546 74547 76717\nf 74546 76717 76716\nf 74547 74548 76718\nf 74547 76718 76717\nf 74548 74549 76719\nf 74548 76719 76718\nf 74549 74550 76720\nf 74549 76720 76719\nf 74550 74551 76721\nf 74550 76721 76720\nf 74551 74552 76722\nf 74551 76722 76721\nf 74552 74553 76723\nf 74552 76723 76722\nf 74553 74554 76724\nf 74553 76724 76723\nf 74554 74555 76725\nf 74554 76725 76724\nf 74555 74556 76726\nf 74555 76726 76725\nf 74556 74557 76727\nf 74556 76727 76726\nf 74557 74558 74622\nf 74557 74622 76728\nf 74557 76728 76727\nf 74558 74559 74622\nf 74559 74560 74623\nf 74559 74623 74622\nf 74560 74561 74624\nf 74560 74624 74623\nf 74561 74562 74625\nf 74561 74625 74624\nf 74562 74563 74626\nf 74562 74626 74625\nf 74563 74564 74627\nf 74563 74627 74626\nf 74564 74565 74628\nf 74564 74628 74627\nf 74565 74566 74629\nf 74565 74629 74628\nf 74566 74567 74630\nf 74566 74630 74629\nf 74567 74568 74631\nf 74567 74631 74630\nf 74568 74569 74632\nf 74568 74632 74631\nf 74569 74570 74633\nf 74569 74633 74632\nf 74570 74571 74634\nf 74570 74634 74633\nf 74571 74572 74635\nf 74571 74635 74634\nf 74572 74573 74636\nf 74572 74636 74635\nf 74573 74574 74637\nf 74573 74637 74636\nf 74574 74575 74638\nf 74574 74638 74637\nf 74575 74576 74639\nf 74575 74639 74638\nf 74576 74577 74640\nf 74576 74640 74639\nf 74577 74578 74641\nf 74577 74641 74640\nf 74578 74579 74642\nf 74578 74642 74641\nf 74579 74580 74643\nf 74579 74643 74642\nf 74580 74581 74644\nf 74580 74644 74643\nf 74581 74582 74645\nf 74581 74645 74644\nf 74582 74583 74646\nf 74582 74646 74645\nf 74583 74584 76729\nf 74583 76729 76805\nf 74583 76805 74646\nf 74584 74585 76730\nf 74584 76730 76729\nf 74585 74586 76731\nf 74585 76731 76730\nf 74586 74587 76732\nf 74586 76732 76731\nf 74587 74588 76733\nf 74587 76733 76732\nf 74588 74589 76734\nf 74588 76734 76733\nf 74589 74590 76735\nf 74589 76735 76734\nf 74590 74591 76736\nf 74590 76736 76735\nf 74591 74592 76737\nf 74591 76737 76736\nf 74592 74593 76738\nf 74592 76738 76737\nf 74593 74594 76739\nf 74593 76739 76738\nf 74594 74595 76740\nf 74594 76740 76739\nf 74595 74596 76741\nf 74595 76741 76740\nf 74596 74597 76742\nf 74596 76742 76741\nf 74597 74598 76743\nf 74597 76743 76742\nf 74598 74599 76744\nf 74598 76744 76743\nf 74599 74600 76745\nf 74599 76745 76744\nf 74600 74601 76746\nf 74600 76746 76745\nf 74601 74602 76747\nf 74601 76747 76746\nf 74602 74603 74647\nf 74602 74647 76748\nf 74602 76748 76747\nf 74603 74604 74647\nf 74604 74605 74648\nf 74604 74648 74647\nf 74605 74606 74649\nf 74605 74649 74648\nf 74606 74607 74650\nf 74606 74650 74649\nf 74607 74608 74651\nf 74607 74651 74650\nf 74608 74609 74652\nf 74608 74652 74651\nf 74609 74610 76749\nf 74609 76749 76833\nf 74609 76833 74652\nf 74610 74611 76750\nf 74610 76750 76749\nf 74611 74612 76751\nf 74611 76751 76750\nf 74612 74613 76752\nf 74612 76752 76751\nf 74613 74614 76753\nf 74613 76753 76752\nf 74614 74615 74653\nf 74614 74653 76754\nf 74614 76754 76753\nf 74615 74616 74653\nf 74616 74617 74654\nf 74616 74654 74653\nf 74617 74618 74655\nf 74617 74655 74654\nf 74618 74619 76755\nf 74618 76755 76844\nf 74618 76844 74655\nf 74619 76756 76757\nf 74619 76757 76755\nf 74620 74656 76850\nf 74620 76850 76761\nf 74621 76710 76762\nf 74621 76762 74657\nf 74622 74623 76781\nf 74622 76779 76728\nf 74622 76781 76779\nf 74623 74624 76782\nf 74623 76782 76781\nf 74624 74625 76783\nf 74624 76783 76782\nf 74625 74626 76784\nf 74625 76784 76783\nf 74626 74627 76785\nf 74626 76785 76784\nf 74627 74628 76786\nf 74627 76786 76785\nf 74628 74629 76787\nf 74628 76787 76786\nf 74629 74630 76788\nf 74629 76788 76787\nf 74630 74631 76789\nf 74630 76789 76788\nf 74631 74632 76790\nf 74631 76790 76789\nf 74632 74633 76791\nf 74632 76791 76790\nf 74633 74634 76792\nf 74633 76792 76791\nf 74634 74635 76793\nf 74634 76793 76792\nf 74635 74636 76794\nf 74635 76794 76793\nf 74636 74637 76795\nf 74636 76795 76794\nf 74637 74638 76796\nf 74637 76796 76795\nf 74638 74639 76797\nf 74638 76797 76796\nf 74639 74640 76798\nf 74639 76798 76797\nf 74640 74641 76799\nf 74640 76799 76798\nf 74641 74642 76800\nf 74641 76800 76799\nf 74642 74643 76801\nf 74642 76801 76800\nf 74643 74644 76802\nf 74643 76802 76801\nf 74644 74645 76803\nf 74644 76803 76802\nf 74645 74646 76804\nf 74645 76804 76803\nf 74646 76805 76806\nf 74646 76806 76804\nf 74647 74648 76828\nf 74647 76826 76748\nf 74647 76828 76826\nf 74648 74649 76829\nf 74648 76829 76828\nf 74649 74650 76830\nf 74649 76830 76829\nf 74650 74651 76831\nf 74650 76831 76830\nf 74651 74652 76832\nf 74651 76832 76831\nf 74652 76833 76834\nf 74652 76834 76832\nf 74653 74654 76842\nf 74653 76840 76754\nf 74653 76842 76840\nf 74654 74655 76843\nf 74654 76843 76842\nf 74655 76844 76845\nf 74655 76845 76843\nf 74656 74658 76933\nf 74656 76933 76850\nf 74657 76762 76851\nf 74657 76851 74659\nf 74658 74660 77018\nf 74658 77018 76933\nf 74659 76851 76935\nf 74659 76935 74661\nf 74660 74662 77018\nf 74661 76935 77021\nf 74661 77021 74664\nf 74662 74663 77018\nf 74662 74665 74666\nf 74662 74666 74663\nf 74663 74666 77105\nf 74663 77019 77018\nf 74663 77105 77019\nf 74664 77021 77106\nf 74664 77106 74667\nf 74665 74668 74669\nf 74665 74669 74666\nf 74666 74669 77195\nf 74666 77195 77105\nf 74667 77106 77197\nf 74667 77197 74670\nf 74668 74671 74672\nf 74668 74672 74669\nf 74669 74672 77290\nf 74669 77290 77195\nf 74670 77197 77292\nf 74670 77292 74673\nf 74671 74674 74675\nf 74671 74675 74672\nf 74672 74675 77386\nf 74672 77386 77290\nf 74673 77292 77388\nf 74673 77388 74676\nf 74674 74677 74678\nf 74674 74678 74675\nf 74675 74678 77483\nf 74675 77483 77386\nf 74676 77388 77485\nf 74676 77485 74679\nf 74677 74701 74703\nf 74677 74703 74678\nf 74678 74703 77601\nf 74678 77601 77483\nf 74679 77485 77603\nf 74679 77603 74704\nf 74680 74681 74712\nf 74680 74711 77665\nf 74680 74712 74711\nf 74680 77543 77545\nf 74680 77545 74681\nf 74680 77665 77543\nf 74681 74682 74713\nf 74681 74713 74712\nf 74681 77545 77547\nf 74681 77547 74682\nf 74682 74683 74714\nf 74682 74714 74713\nf 74682 77547 77549\nf 74682 77549 74683\nf 74683 74684 74715\nf 74683 74715 74714\nf 74683 77549 77551\nf 74683 77551 74684\nf 74684 74685 74716\nf 74684 74716 74715\nf 74684 77551 77553\nf 74684 77553 74685\nf 74685 74686 74717\nf 74685 74717 74716\nf 74685 77553 77555\nf 74685 77555 74686\nf 74686 74687 74718\nf 74686 74718 74717\nf 74686 77555 77557\nf 74686 77557 74687\nf 74687 74688 74719\nf 74687 74719 74718\nf 74687 77557 77559\nf 74687 77559 74688\nf 74688 74689 74720\nf 74688 74720 74719\nf 74688 77559 77561\nf 74688 77561 74689\nf 74689 74690 74721\nf 74689 74721 74720\nf 74689 77561 77563\nf 74689 77563 74690\nf 74690 74691 74722\nf 74690 74722 74721\nf 74690 77563 77565\nf 74690 77565 74691\nf 74691 74692 74723\nf 74691 74723 74722\nf 74691 77565 77567\nf 74691 77567 74692\nf 74692 74693 74724\nf 74692 74724 74723\nf 74692 77567 77569\nf 74692 77569 74693\nf 74693 74694 74725\nf 74693 74725 74724\nf 74693 77569 77571\nf 74693 77571 74694\nf 74694 74695 74726\nf 74694 74726 74725\nf 74694 77571 77573\nf 74694 77573 74695\nf 74695 74696 74727\nf 74695 74727 74726\nf 74695 77573 77575\nf 74695 77575 74696\nf 74696 74697 74728\nf 74696 74728 74727\nf 74696 77575 77577\nf 74696 77577 74697\nf 74697 74698 74729\nf 74697 74729 74728\nf 74697 77577 77579\nf 74697 77579 74698\nf 74698 74699 74730\nf 74698 74730 74729\nf 74698 77579 77581\nf 74698 77581 74699\nf 74699 74700 74731\nf 74699 74731 74730\nf 74699 77581 77583\nf 74699 77583 74700\nf 74700 74732 74731\nf 74700 74733 74732\nf 74700 77583 77668\nf 74700 77668 77669\nf 74700 77669 74733\nf 74701 74702 74703\nf 74702 74734 77686\nf 74702 77686 74703\nf 74703 77686 77601\nf 74704 77603 77688\nf 74704 77688 74735\nf 74705 74706 74768\nf 74705 74767 77768\nf 74705 74768 74767\nf 74705 77653 77655\nf 74705 77655 74706\nf 74705 77768 77653\nf 74706 74707 74769\nf 74706 74769 74768\nf 74706 77655 77657\nf 74706 77657 74707\nf 74707 74708 74770\nf 74707 74770 74769\nf 74707 77657 77659\nf 74707 77659 74708\nf 74708 74709 74771\nf 74708 74771 74770\nf 74708 77659 77661\nf 74708 77661 74709\nf 74709 74710 74772\nf 74709 74772 74771\nf 74709 77661 77663\nf 74709 77663 74710\nf 74710 74711 74773\nf 74710 74773 74772\nf 74710 77663 77666\nf 74710 77666 74711\nf 74711 74712 74774\nf 74711 74774 74773\nf 74711 77666 77665\nf 74712 74713 74775\nf 74712 74775 74774\nf 74713 74714 74776\nf 74713 74776 74775\nf 74714 74715 74777\nf 74714 74777 74776\nf 74715 74716 74778\nf 74715 74778 74777\nf 74716 74717 74779\nf 74716 74779 74778\nf 74717 74718 74780\nf 74717 74780 74779\nf 74718 74719 74781\nf 74718 74781 74780\nf 74719 74720 74782\nf 74719 74782 74781\nf 74720 74721 74783\nf 74720 74783 74782\nf 74721 74722 74784\nf 74721 74784 74783\nf 74722 74723 74785\nf 74722 74785 74784\nf 74723 74724 74786\nf 74723 74786 74785\nf 74724 74725 74787\nf 74724 74787 74786\nf 74725 74726 74788\nf 74725 74788 74787\nf 74726 74727 74789\nf 74726 74789 74788\nf 74727 74728 74790\nf 74727 74790 74789\nf 74728 74729 74791\nf 74728 74791 74790\nf 74729 74730 74792\nf 74729 74792 74791\nf 74730 74731 74793\nf 74730 74793 74792\nf 74731 74732 74794\nf 74731 74794 74793\nf 74732 74733 74795\nf 74732 74795 74794\nf 74733 74796 74795\nf 74733 74797 74796\nf 74733 77669 77771\nf 74733 77771 77772\nf 74733 77772 74797\nf 74734 74798 77788\nf 74734 77788 77686\nf 74735 77688 77791\nf 74735 77791 74801\nf 74736 74737 74806\nf 74736 74805 77808\nf 74736 74806 74805\nf 74736 77703 77705\nf 74736 77705 74737\nf 74736 77808 77703\nf 74737 74738 74807\nf 74737 74807 74806\nf 74737 77705 77707\nf 74737 77707 74738\nf 74738 74739 74808\nf 74738 74808 74807\nf 74738 77707 77709\nf 74738 77709 74739\nf 74739 74740 74809\nf 74739 74809 74808\nf 74739 77709 77711\nf 74739 77711 74740\nf 74740 74741 74810\nf 74740 74810 74809\nf 74740 77711 77713\nf 74740 77713 74741\nf 74741 74742 74811\nf 74741 74811 74810\nf 74741 77713 77715\nf 74741 77715 74742\nf 74742 74743 74812\nf 74742 74812 74811\nf 74742 77715 77717\nf 74742 77717 74743\nf 74743 74744 74813\nf 74743 74813 74812\nf 74743 77717 77719\nf 74743 77719 74744\nf 74744 74745 74814\nf 74744 74814 74813\nf 74744 77719 77721\nf 74744 77721 74745\nf 74745 74746 74815\nf 74745 74815 74814\nf 74745 77721 77723\nf 74745 77723 74746\nf 74746 74747 74816\nf 74746 74816 74815\nf 74746 77723 77725\nf 74746 77725 74747\nf 74747 74748 74817\nf 74747 74817 74816\nf 74747 77725 77727\nf 74747 77727 74748\nf 74748 74749 74818\nf 74748 74818 74817\nf 74748 77727 77729\nf 74748 77729 74749\nf 74749 74750 74819\nf 74749 74819 74818\nf 74749 77729 77731\nf 74749 77731 74750\nf 74750 74751 74820\nf 74750 74820 74819\nf 74750 77731 77733\nf 74750 77733 74751\nf 74751 74752 74821\nf 74751 74821 74820\nf 74751 77733 77735\nf 74751 77735 74752\nf 74752 74822 74821\nf 74752 74823 74822\nf 74752 77735 77811\nf 74752 77811 77812\nf 74752 77812 74823\nf 74753 74754 74826\nf 74753 74825 77816\nf 74753 74826 74825\nf 74753 77740 77742\nf 74753 77742 74754\nf 74753 77816 77740\nf 74754 74755 74827\nf 74754 74827 74826\nf 74754 77742 77744\nf 74754 77744 74755\nf 74755 74756 74828\nf 74755 74828 74827\nf 74755 77744 77746\nf 74755 77746 74756\nf 74756 74757 74829\nf 74756 74829 74828\nf 74756 77746 77748\nf 74756 77748 74757\nf 74757 74758 74830\nf 74757 74830 74829\nf 74757 77748 77750\nf 74757 77750 74758\nf 74758 74759 74831\nf 74758 74831 74830\nf 74758 77750 77752\nf 74758 77752 74759\nf 74759 74760 74832\nf 74759 74832 74831\nf 74759 77752 77754\nf 74759 77754 74760\nf 74760 74761 74833\nf 74760 74833 74832\nf 74760 77754 77756\nf 74760 77756 74761\nf 74761 74762 74834\nf 74761 74834 74833\nf 74761 77756 77758\nf 74761 77758 74762\nf 74762 74763 74835\nf 74762 74835 74834\nf 74762 77758 77760\nf 74762 77760 74763\nf 74763 74764 74836\nf 74763 74836 74835\nf 74763 77760 77762\nf 74763 77762 74764\nf 74764 74765 74837\nf 74764 74837 74836\nf 74764 77762 77764\nf 74764 77764 74765\nf 74765 74766 74838\nf 74765 74838 74837\nf 74765 77764 77766\nf 74765 77766 74766\nf 74766 74767 74839\nf 74766 74839 74838\nf 74766 77766 77769\nf 74766 77769 74767\nf 74767 74768 74840\nf 74767 74840 74839\nf 74767 77769 77768\nf 74768 74769 74841\nf 74768 74841 74840\nf 74769 74770 74842\nf 74769 74842 74841\nf 74770 74771 74843\nf 74770 74843 74842\nf 74771 74772 74844\nf 74771 74844 74843\nf 74772 74773 74845\nf 74772 74845 74844\nf 74773 74774 74846\nf 74773 74846 74845\nf 74774 74775 74847\nf 74774 74847 74846\nf 74775 74776 74848\nf 74775 74848 74847\nf 74776 74777 74849\nf 74776 74849 74848\nf 74777 74778 74850\nf 74777 74850 74849\nf 74778 74779 74851\nf 74778 74851 74850\nf 74779 74780 74852\nf 74779 74852 74851\nf 74780 74781 74853\nf 74780 74853 74852\nf 74781 74782 74854\nf 74781 74854 74853\nf 74782 74783 74855\nf 74782 74855 74854\nf 74783 74784 74856\nf 74783 74856 74855\nf 74784 74785 74857\nf 74784 74857 74856\nf 74785 74786 74858\nf 74785 74858 74857\nf 74786 74787 74859\nf 74786 74859 74858\nf 74787 74788 74860\nf 74787 74860 74859\nf 74788 74789 74861\nf 74788 74861 74860\nf 74789 74790 74862\nf 74789 74862 74861\nf 74790 74791 74863\nf 74790 74863 74862\nf 74791 74792 74864\nf 74791 74864 74863\nf 74792 74793 74865\nf 74792 74865 74864\nf 74793 74794 74866\nf 74793 74866 74865\nf 74794 74795 74867\nf 74794 74867 74866\nf 74795 74796 74868\nf 74795 74868 74867\nf 74796 74797 74869\nf 74796 74869 74868\nf 74797 74870 74869\nf 74797 74871 74870\nf 74797 77772 77819\nf 74797 77819 77820\nf 74797 77820 74871\nf 74798 74799 74800\nf 74798 74800 77788\nf 74799 74875 74877\nf 74799 74877 77838\nf 74799 77838 74800\nf 74800 77789 77788\nf 74800 77837 77789\nf 74800 77838 77837\nf 74801 77791 77840\nf 74801 77840 74878\nf 74802 74803 74882\nf 74802 74881 77852\nf 74802 74882 74881\nf 74802 77802 77804\nf 74802 77804 74803\nf 74802 77852 77802\nf 74803 74804 74883\nf 74803 74883 74882\nf 74803 77804 77806\nf 74803 77806 74804\nf 74804 74805 74884\nf 74804 74884 74883\nf 74804 77806 77809\nf 74804 77809 74805\nf 74805 74806 74885\nf 74805 74885 74884\nf 74805 77809 77808\nf 74806 74807 74886\nf 74806 74886 74885\nf 74807 74808 74887\nf 74807 74887 74886\nf 74808 74809 74888\nf 74808 74888 74887\nf 74809 74810 74890\nf 74809 74890 74888\nf 74810 74811 74892\nf 74810 74892 74890\nf 74811 74812 74894\nf 74811 74894 74892\nf 74812 74813 74896\nf 74812 74896 74894\nf 74813 74814 74898\nf 74813 74898 74896\nf 74814 74815 74900\nf 74814 74900 74898\nf 74815 74816 74902\nf 74815 74902 74900\nf 74816 74817 74904\nf 74816 74904 74902\nf 74817 74818 74906\nf 74817 74906 74904\nf 74818 74819 74908\nf 74818 74908 74906\nf 74819 74820 74910\nf 74819 74910 74908\nf 74820 74821 74912\nf 74820 74912 74910\nf 74821 74822 74914\nf 74821 74914 74912\nf 74822 74823 74916\nf 74822 74916 74914\nf 74823 74824 74918\nf 74823 74918 74916\nf 74823 77812 77814\nf 74823 77814 74824\nf 74824 74825 74920\nf 74824 74920 74918\nf 74824 77814 77817\nf 74824 77817 74825\nf 74825 74826 74922\nf 74825 74922 74920\nf 74825 77817 77816\nf 74826 74827 74924\nf 74826 74924 74922\nf 74827 74828 74926\nf 74827 74926 74924\nf 74828 74829 74928\nf 74828 74928 74926\nf 74829 74830 74930\nf 74829 74930 74928\nf 74830 74831 74932\nf 74830 74932 74930\nf 74831 74832 74934\nf 74831 74934 74932\nf 74832 74833 74936\nf 74832 74936 74934\nf 74833 74834 74938\nf 74833 74938 74936\nf 74834 74835 74940\nf 74834 74940 74938\nf 74835 74836 74942\nf 74835 74942 74940\nf 74836 74837 74944\nf 74836 74944 74942\nf 74837 74838 74946\nf 74837 74946 74944\nf 74838 74839 74948\nf 74838 74948 74946\nf 74839 74840 74950\nf 74839 74950 74948\nf 74840 74841 74952\nf 74840 74952 74950\nf 74841 74842 74954\nf 74841 74954 74952\nf 74842 74843 74956\nf 74842 74956 74954\nf 74843 74844 74958\nf 74843 74958 74956\nf 74844 74845 74960\nf 74844 74960 74958\nf 74845 74846 74962\nf 74845 74962 74960\nf 74846 74847 74964\nf 74846 74964 74962\nf 74847 74848 74966\nf 74847 74966 74964\nf 74848 74849 74968\nf 74848 74968 74966\nf 74849 74850 74970\nf 74849 74970 74968\nf 74850 74851 74972\nf 74850 74972 74970\nf 74851 74852 74974\nf 74851 74974 74972\nf 74852 74853 74976\nf 74852 74976 74974\nf 74853 74854 74978\nf 74853 74978 74976\nf 74854 74855 74980\nf 74854 74980 74978\nf 74855 74856 74982\nf 74855 74982 74980\nf 74856 74857 74984\nf 74856 74984 74982\nf 74857 74858 74986\nf 74857 74986 74984\nf 74858 74859 74988\nf 74858 74988 74986\nf 74859 74860 74990\nf 74859 74990 74988\nf 74860 74861 74992\nf 74860 74992 74990\nf 74861 74862 74994\nf 74861 74994 74992\nf 74862 74863 74996\nf 74862 74996 74994\nf 74863 74864 74998\nf 74863 74998 74996\nf 74864 74865 75000\nf 74864 75000 74998\nf 74865 74866 75002\nf 74865 75002 75000\nf 74866 74867 75004\nf 74866 75004 75002\nf 74867 74868 75006\nf 74867 75006 75004\nf 74868 74869 75008\nf 74868 75008 75006\nf 74869 74870 75010\nf 74869 75010 75008\nf 74870 74871 75012\nf 74870 75012 75010\nf 74871 74872 75014\nf 74871 75014 75012\nf 74871 77820 77822\nf 74871 77822 74872\nf 74872 74873 75016\nf 74872 75016 75014\nf 74872 77822 77824\nf 74872 77824 74873\nf 74873 75018 75016\nf 74873 75020 75018\nf 74873 77824 77855\nf 74873 77855 77856\nf 74873 77856 75020\nf 74874 74877 75039\nf 74874 75036 77872\nf 74874 75039 75036\nf 74874 77835 77838\nf 74874 77838 74877\nf 74874 77872 77835\nf 74875 74876 74877\nf 74876 75037 75039\nf 74876 75039 74877\nf 74878 77840 77875\nf 74878 77875 75040\nf 74879 74880 75047\nf 74879 75045 77884\nf 74879 75047 75045\nf 74879 77848 77850\nf 74879 77850 74880\nf 74879 77884 77848\nf 74880 74881 75049\nf 74880 75049 75047\nf 74880 77850 77853\nf 74880 77853 74881\nf 74881 74882 75051\nf 74881 75051 75049\nf 74881 77853 77852\nf 74882 74883 75053\nf 74882 75053 75051\nf 74883 74884 75055\nf 74883 75055 75053\nf 74884 74885 75057\nf 74884 75057 75055\nf 74885 74886 75059\nf 74885 75059 75057\nf 74886 74887 75061\nf 74886 75061 75059\nf 74887 74888 75063\nf 74887 75063 75061\nf 74888 74890 75066\nf 74888 75066 75063\nf 74889 74890 74891\nf 74889 75064 75066\nf 74889 75066 74890\nf 74890 74892 74891\nf 74891 74892 74893\nf 74892 74894 74893\nf 74893 74894 74895\nf 74894 74896 74895\nf 74895 74896 74897\nf 74896 74898 74897\nf 74897 74898 74899\nf 74898 74900 74899\nf 74899 74900 74901\nf 74900 74902 74901\nf 74901 74902 74903\nf 74902 74904 74903\nf 74903 74904 74905\nf 74904 74906 74905\nf 74905 74906 74907\nf 74906 74908 74907\nf 74907 74908 74909\nf 74908 74910 74909\nf 74909 74910 74911\nf 74910 74912 74911\nf 74911 74912 74913\nf 74912 74914 74913\nf 74913 74914 74915\nf 74914 74916 74915\nf 74915 74916 74917\nf 74916 74918 74917\nf 74917 74918 74919\nf 74918 74920 74919\nf 74919 74920 74921\nf 74920 74922 74921\nf 74921 74922 74923\nf 74922 74924 74923\nf 74923 74924 74925\nf 74924 74926 74925\nf 74925 74926 74927\nf 74926 74928 74927\nf 74927 74928 74929\nf 74928 74930 74929\nf 74929 74930 74931\nf 74930 74932 74931\nf 74931 74932 74933\nf 74932 74934 74933\nf 74933 74934 74935\nf 74934 74936 74935\nf 74935 74936 74937\nf 74936 74938 74937\nf 74937 74938 74939\nf 74938 74940 74939\nf 74939 74940 74941\nf 74940 74942 74941\nf 74941 74942 74943\nf 74942 74944 74943\nf 74943 74944 74945\nf 74944 74946 74945\nf 74945 74946 74947\nf 74946 74948 74947\nf 74947 74948 74949\nf 74948 74950 74949\nf 74949 74950 74951\nf 74950 74952 74951\nf 74951 74952 74953\nf 74952 74954 74953\nf 74953 74954 74955\nf 74954 74956 74955\nf 74955 74956 74957\nf 74956 74958 74957\nf 74957 74958 74959\nf 74958 74960 74959\nf 74959 74960 74961\nf 74960 74962 74961\nf 74961 74962 74963\nf 74962 74964 74963\nf 74963 74964 74965\nf 74964 74966 74965\nf 74965 74966 74967\nf 74966 74968 74967\nf 74967 74968 74969\nf 74968 74970 74969\nf 74969 74970 74971\nf 74970 74972 74971\nf 74971 74972 74973\nf 74972 74974 74973\nf 74973 74974 74975\nf 74974 74976 74975\nf 74975 74976 74977\nf 74976 74978 74977\nf 74977 74978 74979\nf 74978 74980 74979\nf 74979 74980 74981\nf 74980 74982 74981\nf 74981 74982 74983\nf 74982 74984 74983\nf 74983 74984 74985\nf 74984 74986 74985\nf 74985 74986 74987\nf 74986 74988 74987\nf 74987 74988 74989\nf 74988 74990 74989\nf 74989 74990 74991\nf 74990 74992 74991\nf 74991 74992 74993\nf 74992 74994 74993\nf 74993 74994 74995\nf 74994 74996 74995\nf 74995 74996 74997\nf 74996 74998 74997\nf 74997 74998 74999\nf 74998 75000 74999\nf 74999 75000 75001\nf 75000 75002 75001\nf 75001 75002 75003\nf 75002 75004 75003\nf 75003 75004 75005\nf 75004 75006 75005\nf 75005 75006 75007\nf 75006 75008 75007\nf 75007 75008 75009\nf 75008 75010 75009\nf 75009 75010 75011\nf 75010 75012 75011\nf 75011 75012 75013\nf 75012 75014 75013\nf 75013 75014 75015\nf 75014 75016 75015\nf 75015 75016 75017\nf 75016 75018 75017\nf 75017 75018 75019\nf 75018 75020 75019\nf 75019 75020 75021\nf 75020 75022 75021\nf 75020 77856 77858\nf 75020 77858 75022\nf 75021 75022 75023\nf 75022 75024 75023\nf 75022 77858 77860\nf 75022 77860 75024\nf 75023 75024 75025\nf 75024 75026 75025\nf 75024 77860 77862\nf 75024 77862 75026\nf 75025 75026 75027\nf 75026 75028 75027\nf 75026 77862 77864\nf 75026 77864 75028\nf 75027 75028 75029\nf 75028 75030 75029\nf 75028 77864 77866\nf 75028 77866 75030\nf 75029 75030 75031\nf 75030 75032 75031\nf 75030 77866 77868\nf 75030 77868 75032\nf 75031 75032 75033\nf 75032 75034 75033\nf 75032 77868 77870\nf 75032 77870 75034\nf 75033 75034 75035\nf 75034 75036 75035\nf 75034 77870 77873\nf 75034 77873 75036\nf 75035 75036 75038\nf 75036 75039 75038\nf 75036 77873 77872\nf 75037 75038 75039\nf 75040 77875 77887\nf 75040 77887 75067\nf 75041 75043 75073\nf 75041 75070 77893\nf 75041 75073 75070\nf 75041 77880 77882\nf 75041 77882 75043\nf 75041 77893 77880\nf 75042 75043 75044\nf 75042 75071 75073\nf 75042 75073 75043\nf 75043 75045 75044\nf 75043 77882 77885\nf 75043 77885 75045\nf 75044 75045 75046\nf 75045 75047 75046\nf 75045 77885 77884\nf 75046 75047 75048\nf 75047 75049 75048\nf 75048 75049 75050\nf 75049 75051 75050\nf 75050 75051 75052\nf 75051 75053 75052\nf 75052 75053 75054\nf 75053 75055 75054\nf 75054 75055 75056\nf 75055 75057 75056\nf 75056 75057 75058\nf 75057 75059 75058\nf 75058 75059 75060\nf 75059 75061 75060\nf 75060 75061 75062\nf 75061 75063 75062\nf 75062 75063 75065\nf 75063 75066 75065\nf 75064 75065 75066\nf 75067 77887 77896\nf 75067 77896 75074\nf 75068 75070 75077\nf 75068 75077 77900\nf 75068 77891 77894\nf 75068 77894 75070\nf 75068 77900 77891\nf 75069 75070 75072\nf 75069 75075 75077\nf 75069 75077 75070\nf 75070 75073 75072\nf 75070 77894 77893\nf 75071 75072 75073\nf 75074 77896 77902\nf 75074 77902 75078\nf 75075 75076 75077\nf 75076 75079 75080\nf 75076 75080 77908\nf 75076 77908 75077\nf 75077 77907 77900\nf 75077 77908 77907\nf 75078 77902 77910\nf 75078 77910 75081\nf 75079 75082 75083\nf 75079 75083 75080\nf 75080 75083 77914\nf 75080 77914 77908\nf 75081 77910 77916\nf 75081 77916 75084\nf 75082 75085 75086\nf 75082 75086 75083\nf 75083 75086 77919\nf 75083 77919 77914\nf 75084 77916 77921\nf 75084 77921 75087\nf 75085 75088 75089\nf 75085 75089 75086\nf 75086 75089 77923\nf 75086 77923 77919\nf 75087 77921 77925\nf 75087 77925 75090\nf 75088 75092 75093\nf 75088 75093 75089\nf 75089 75093 77928\nf 75089 77928 77923\nf 75090 75091 75095\nf 75090 75095 75094\nf 75090 77925 75091\nf 75091 77925 77926\nf 75091 77926 77930\nf 75091 77930 75095\nf 75092 75096 75097\nf 75092 75097 75093\nf 75093 75097 77933\nf 75093 77933 77928\nf 75094 75095 75099\nf 75094 75099 75098\nf 75095 77930 77935\nf 75095 77935 75099\nf 75096 75100 75101\nf 75096 75101 75097\nf 75097 75101 77938\nf 75097 77938 77933\nf 75098 75099 77941\nf 75098 77941 77945\nf 75098 77945 75102\nf 75099 77935 77940\nf 75099 77940 77941\nf 75100 75103 75104\nf 75100 75104 75101\nf 75101 75104 77943\nf 75101 77943 77938\nf 75102 77945 75105\nf 75103 75107 75108\nf 75103 75108 75104\nf 75104 75108 77946\nf 75104 77946 77943\nf 75105 77945 77948\nf 75105 77948 77951\nf 75105 77951 75106\nf 75106 75110 75109\nf 75106 77951 75110\nf 75107 75111 75112\nf 75107 75112 75108\nf 75108 75112 77949\nf 75108 77949 77946\nf 75109 75110 77955\nf 75109 77955 75113\nf 75110 77951 77952\nf 75110 77952 77955\nf 75111 75114 75115\nf 75111 75115 75112\nf 75112 75115 77953\nf 75112 77953 77949\nf 75113 77955 75116\nf 75114 75117 75118\nf 75114 75118 75115\nf 75115 75118 77957\nf 75115 77957 77953\nf 75116 77955 77959\nf 75116 77959 75119\nf 75117 75120 75121\nf 75117 75121 75118\nf 75118 75121 77961\nf 75118 77961 77957\nf 75119 77959 77963\nf 75119 77963 75122\nf 75120 75123 75124\nf 75120 75124 75121\nf 75121 75124 77965\nf 75121 77965 77961\nf 75122 77963 77967\nf 75122 77967 75125\nf 75123 75126 75127\nf 75123 75127 75124\nf 75124 75127 77969\nf 75124 77969 77965\nf 75125 77967 77971\nf 75125 77971 75128\nf 75126 75129 75130\nf 75126 75130 75127\nf 75127 75130 77973\nf 75127 77973 77969\nf 75128 77971 77975\nf 75128 77975 75131\nf 75129 75132 75133\nf 75129 75133 75130\nf 75130 75133 77977\nf 75130 77977 77973\nf 75131 77975 77979\nf 75131 77979 75134\nf 75132 75135 75136\nf 75132 75136 75133\nf 75133 75136 77981\nf 75133 77981 77977\nf 75134 77979 77983\nf 75134 77983 75137\nf 75135 75138 75139\nf 75135 75139 75136\nf 75136 75139 77985\nf 75136 77985 77981\nf 75137 77983 77987\nf 75137 77987 75140\nf 75138 75141 75142\nf 75138 75142 75139\nf 75139 75142 77989\nf 75139 77989 77985\nf 75140 77987 77991\nf 75140 77991 75143\nf 75141 75144 75145\nf 75141 75145 75142\nf 75142 75145 77993\nf 75142 77993 77989\nf 75143 77991 77995\nf 75143 77995 75146\nf 75144 75147 75148\nf 75144 75148 75145\nf 75145 75148 77997\nf 75145 77997 77993\nf 75146 77995 77999\nf 75146 77999 75149\nf 75147 75150 75152\nf 75147 75152 75148\nf 75148 75152 78002\nf 75148 78002 77997\nf 75149 77999 78004\nf 75149 78004 75153\nf 75150 75151 75152\nf 75151 75154 75155\nf 75151 75155 78008\nf 75151 78008 75152\nf 75152 78007 78002\nf 75152 78008 78007\nf 75153 78004 78010\nf 75153 78010 75156\nf 75154 75157 75158\nf 75154 75158 75155\nf 75155 75158 78012\nf 75155 78012 78008\nf 75156 78010 78014\nf 75156 78014 75159\nf 75157 75160 75161\nf 75157 75161 75158\nf 75158 75161 78015\nf 75158 78015 78012\nf 75159 78014 78017\nf 75159 78017 75162\nf 75160 75163 75164\nf 75160 75164 75161\nf 75161 75164 78018\nf 75161 78018 78015\nf 75162 78017 78020\nf 75162 78020 75165\nf 75163 75167 75168\nf 75163 75168 75164\nf 75164 75168 78021\nf 75164 78021 78018\nf 75165 78020 78023\nf 75165 78023 78026\nf 75165 78026 75166\nf 75166 75170 75169\nf 75166 78026 75170\nf 75167 75171 75172\nf 75167 75172 75168\nf 75168 75172 78024\nf 75168 78024 78021\nf 75169 75170 75173\nf 75170 75174 75173\nf 75170 78026 78029\nf 75170 78029 75174\nf 75171 75175 75176\nf 75171 75176 75172\nf 75172 75176 78027\nf 75172 78027 78024\nf 75173 75174 75177\nf 75174 75178 75177\nf 75174 78029 78032\nf 75174 78032 75178\nf 75175 75179 75180\nf 75175 75180 75176\nf 75176 75180 78030\nf 75176 78030 78027\nf 75177 75178 75181\nf 75178 75182 75181\nf 75178 78032 78035\nf 75178 78035 75182\nf 75179 75183 75184\nf 75179 75184 75180\nf 75180 75184 78033\nf 75180 78033 78030\nf 75181 75182 75185\nf 75182 75186 75185\nf 75182 78035 78038\nf 75182 78038 75186\nf 75183 75187 75189\nf 75183 75189 75184\nf 75184 75189 78036\nf 75184 78036 78033\nf 75185 75186 75190\nf 75186 75191 75190\nf 75186 78038 78041\nf 75186 78041 75191\nf 75187 75188 75189\nf 75188 75192 78039\nf 75188 78039 75189\nf 75189 78039 78036\nf 75190 75191 78046\nf 75190 78046 75193\nf 75191 78041 78042\nf 75191 78042 78046\nf 75192 75194 78049\nf 75192 78044 78039\nf 75192 78049 78044\nf 75193 78046 75195\nf 75194 75196 78054\nf 75194 78054 78049\nf 75195 78046 78051\nf 75195 78051 75197\nf 75196 75198 78059\nf 75196 78059 78054\nf 75197 78051 78056\nf 75197 78056 75199\nf 75198 75200 78064\nf 75198 78064 78059\nf 75199 78056 78061\nf 75199 78061 75201\nf 75200 75202 78069\nf 75200 78069 78064\nf 75201 78061 78066\nf 75201 78066 75203\nf 75202 75204 78074\nf 75202 78074 78069\nf 75203 78066 78071\nf 75203 78071 75205\nf 75204 75206 78079\nf 75204 78079 78074\nf 75205 78071 78076\nf 75205 78076 75207\nf 75206 75208 78084\nf 75206 78084 78079\nf 75207 78076 78081\nf 75207 78081 75209\nf 75208 75210 78089\nf 75208 78089 78084\nf 75209 78081 78086\nf 75209 78086 75211\nf 75210 75212 78094\nf 75210 78094 78089\nf 75211 78086 78091\nf 75211 78091 75213\nf 75212 75214 78099\nf 75212 78099 78094\nf 75213 78091 78096\nf 75213 78096 75215\nf 75214 75216 78104\nf 75214 78104 78099\nf 75215 78096 78101\nf 75215 78101 75217\nf 75216 75218 78109\nf 75216 78109 78104\nf 75217 78101 78106\nf 75217 78106 75219\nf 75218 75221 78114\nf 75218 78114 78109\nf 75219 78106 78111\nf 75219 78111 78116\nf 75219 78116 75220\nf 75220 75223 75222\nf 75220 78116 75223\nf 75221 75224 78119\nf 75221 78119 78114\nf 75222 75223 75225\nf 75223 75226 75225\nf 75223 78116 78121\nf 75223 78121 75226\nf 75224 75227 78123\nf 75224 78123 78119\nf 75225 75226 75228\nf 75226 75229 75228\nf 75226 78121 78125\nf 75226 78125 75229\nf 75227 75230 78127\nf 75227 78127 78123\nf 75228 75229 75231\nf 75229 75232 75231\nf 75229 78125 78130\nf 75229 78130 75232\nf 75230 75233 78127\nf 75231 75232 78135\nf 75231 78135 75235\nf 75232 78130 78131\nf 75232 78131 78135\nf 75233 75234 78127\nf 75233 75236 75237\nf 75233 75237 75234\nf 75234 75237 78133\nf 75234 78128 78127\nf 75234 78133 78128\nf 75235 78135 75238\nf 75236 75239 75240\nf 75236 75240 75237\nf 75237 75240 78138\nf 75237 78138 78133\nf 75238 78135 78140\nf 75238 78140 75241\nf 75239 75242 75243\nf 75239 75243 75240\nf 75240 75243 78143\nf 75240 78143 78138\nf 75241 78140 78145\nf 75241 78145 75244\nf 75242 75245 75246\nf 75242 75246 75243\nf 75243 75246 78148\nf 75243 78148 78143\nf 75244 78145 78150\nf 75244 78150 75247\nf 75245 75248 75249\nf 75245 75249 75246\nf 75246 75249 78153\nf 75246 78153 78148\nf 75247 78150 78155\nf 75247 78155 75250\nf 75248 75252 75253\nf 75248 75253 75249\nf 75249 75253 78157\nf 75249 78157 78153\nf 75250 78155 78159\nf 75250 78159 78163\nf 75250 78163 75251\nf 75251 75255 75254\nf 75251 78163 75255\nf 75252 75256 75257\nf 75252 75257 75253\nf 75253 75257 78161\nf 75253 78161 78157\nf 75254 75255 75258\nf 75255 75259 75258\nf 75255 78163 78167\nf 75255 78167 75259\nf 75256 75260 75261\nf 75256 75261 75257\nf 75257 75261 78165\nf 75257 78165 78161\nf 75258 75259 78172\nf 75258 78172 75262\nf 75259 78167 78168\nf 75259 78168 78172\nf 75260 75263 75265\nf 75260 75265 75261\nf 75261 75265 78170\nf 75261 78170 78165\nf 75262 78172 75266\nf 75263 75264 75265\nf 75264 75267 78175\nf 75264 78175 75265\nf 75265 78175 78170\nf 75266 78172 78177\nf 75266 78177 75268\nf 75267 75269 78185\nf 75267 78180 78175\nf 75267 78185 78180\nf 75268 78177 78182\nf 75268 78182 75270\nf 75269 75271 78190\nf 75269 78190 78185\nf 75270 78182 78187\nf 75270 78187 75272\nf 75271 75273 78195\nf 75271 78195 78190\nf 75272 78187 78192\nf 75272 78192 75274\nf 75273 75275 78199\nf 75273 78199 78195\nf 75274 78192 78197\nf 75274 78197 75276\nf 75275 75277 78199\nf 75276 78197 78202\nf 75276 78202 75279\nf 75277 75278 78199\nf 75277 75280 75281\nf 75277 75281 75278\nf 75278 75281 78203\nf 75278 78200 78199\nf 75278 78203 78200\nf 75279 78202 78205\nf 75279 78205 75282\nf 75280 75284 75285\nf 75280 75285 75281\nf 75281 75285 78207\nf 75281 78207 78203\nf 75282 78205 78209\nf 75282 78209 78213\nf 75282 78213 75283\nf 75283 75288 75286\nf 75283 78213 75288\nf 75284 75289 75290\nf 75284 75290 75285\nf 75285 75290 78211\nf 75285 78211 78207\nf 75286 75288 75287\nf 75287 75288 75291\nf 75288 78213 75291\nf 75289 75292 75293\nf 75289 75293 75290\nf 75290 75293 78215\nf 75290 78215 78211\nf 75291 78213 78217\nf 75291 78217 75294\nf 75292 75295 75297\nf 75292 75297 75293\nf 75293 75297 78219\nf 75293 78219 78215\nf 75294 78217 78221\nf 75294 78221 75298\nf 75295 75296 75297\nf 75296 75299 78223\nf 75296 78223 75297\nf 75297 78223 78219\nf 75298 78221 78225\nf 75298 78225 75300\nf 75299 75301 78231\nf 75299 78227 78223\nf 75299 78231 78227\nf 75300 78225 78229\nf 75300 78229 75302\nf 75301 75303 78235\nf 75301 78235 78231\nf 75302 78229 78233\nf 75302 78233 75304\nf 75303 75305 78240\nf 75303 78240 78235\nf 75304 78233 78237\nf 75304 78237 75306\nf 75305 75307 78240\nf 75306 78237 78243\nf 75306 78243 75309\nf 75307 75308 78240\nf 75307 75310 75311\nf 75307 75311 75308\nf 75308 75311 78245\nf 75308 78241 78240\nf 75308 78245 78241\nf 75309 78243 78247\nf 75309 78247 75312\nf 75310 75313 75314\nf 75310 75314 75311\nf 75311 75314 78249\nf 75311 78249 78245\nf 75312 78247 78251\nf 75312 78251 75315\nf 75313 75316 75317\nf 75313 75317 75314\nf 75314 75317 78253\nf 75314 78253 78249\nf 75315 78251 78255\nf 75315 78255 75318\nf 75316 75320 75322\nf 75316 75322 75317\nf 75317 75322 78257\nf 75317 78257 78253\nf 75318 78255 78259\nf 75318 78259 78263\nf 75318 78263 75319\nf 75319 75324 75323\nf 75319 78263 75324\nf 75320 75321 75322\nf 75321 75325 78261\nf 75321 78261 75322\nf 75322 78261 78257\nf 75323 75324 75326\nf 75324 75327 75326\nf 75324 78263 78267\nf 75324 78267 75327\nf 75325 75328 78269\nf 75325 78265 78261\nf 75325 78269 78265\nf 75326 75327 75329\nf 75327 75331 75329\nf 75327 78267 78271\nf 75327 78271 75331\nf 75328 75332 78274\nf 75328 78274 78269\nf 75329 75331 75330\nf 75330 75331 75333\nf 75331 78271 75333\nf 75332 75334 78274\nf 75333 78271 78277\nf 75333 78277 75336\nf 75334 75335 78274\nf 75334 75337 75339\nf 75334 75339 75335\nf 75335 75339 78279\nf 75335 78275 78274\nf 75335 78279 78275\nf 75336 78277 78281\nf 75336 78281 75340\nf 75337 75338 75339\nf 75338 75341 78283\nf 75338 78283 75339\nf 75339 78283 78279\nf 75340 78281 78285\nf 75340 78285 75342\nf 75341 75343 78290\nf 75341 78286 78283\nf 75341 78290 78286\nf 75342 78285 78288\nf 75342 78288 75344\nf 75343 75346 78294\nf 75343 78294 78290\nf 75344 78288 78292\nf 75344 78292 78297\nf 75344 78297 75345\nf 75345 75348 75347\nf 75345 78297 75348\nf 75346 75349 78294\nf 75347 75348 75352\nf 75348 75353 75352\nf 75348 78297 78301\nf 75348 78301 75353\nf 75349 75350 75351\nf 75349 75351 78294\nf 75350 75354 78299\nf 75350 78299 75351\nf 75351 78295 78294\nf 75351 78299 78295\nf 75352 75353 75355\nf 75353 75356 75355\nf 75353 78301 78305\nf 75353 78305 75356\nf 75354 75357 78308\nf 75354 78303 78299\nf 75354 78308 78303\nf 75355 75356 75358\nf 75356 75359 75358\nf 75356 78305 78310\nf 75356 78310 75359\nf 75357 75360 78316\nf 75357 78316 78308\nf 75358 75359 78319\nf 75358 78319 75362\nf 75359 78310 78311\nf 75359 78311 78319\nf 75360 75361 78316\nf 75361 75363 78325\nf 75361 78317 78316\nf 75361 78325 78317\nf 75362 78319 75364\nf 75363 75366 78333\nf 75363 78333 78325\nf 75364 75365 75367\nf 75364 78319 78320\nf 75364 78320 75365\nf 75365 75369 75367\nf 75365 75370 75369\nf 75365 78320 78327\nf 75365 78327 78328\nf 75365 78328 75370\nf 75366 75371 78333\nf 75367 75369 75368\nf 75368 75369 75374\nf 75369 75370 75376\nf 75369 75376 75374\nf 75370 78328 78336\nf 75370 78336 78343\nf 75370 78343 75376\nf 75371 75372 75373\nf 75371 75373 78333\nf 75372 75377 78341\nf 75372 78341 75373\nf 75373 78334 78333\nf 75373 78341 78334\nf 75374 75376 75375\nf 75375 75376 75380\nf 75375 75380 75378\nf 75376 78343 78344\nf 75376 78344 75380\nf 75377 75381 78358\nf 75377 78350 78341\nf 75377 78358 78350\nf 75378 75380 75379\nf 75379 75380 75384\nf 75379 75384 75382\nf 75380 78344 78352\nf 75380 78352 78353\nf 75380 78353 75384\nf 75381 75386 78358\nf 75382 75384 75383\nf 75383 75384 78362\nf 75383 78362 75385\nf 75384 78353 78361\nf 75384 78361 78362\nf 75385 78362 78364\nf 75385 78364 75389\nf 75386 75387 75388\nf 75386 75388 78358\nf 75387 75392 75394\nf 75387 75394 78367\nf 75387 78367 75388\nf 75388 78359 78358\nf 75388 78366 78359\nf 75388 78367 78366\nf 75389 75391 75390\nf 75389 78364 75391\nf 75390 75391 75393\nf 75391 75394 75393\nf 75391 78364 78367\nf 75391 78367 75394\nf 75392 75393 75394\nf 75395 75396 75412\nf 75395 75411 75409\nf 75395 75412 75411\nf 75396 75397 75413\nf 75396 75413 75412\nf 75397 75398 75414\nf 75397 75414 75413\nf 75398 75399 75415\nf 75398 75415 75414\nf 75399 75400 75417\nf 75399 75417 75415\nf 75400 75416 75417\nf 75401 75402 75425\nf 75401 75424 75422\nf 75401 75425 75424\nf 75402 75403 75426\nf 75402 75426 75425\nf 75403 75404 75427\nf 75403 75427 75426\nf 75404 75405 75428\nf 75404 75428 75427\nf 75405 75406 75429\nf 75405 75429 75428\nf 75406 75407 75431\nf 75406 75431 75429\nf 75407 75430 75431\nf 75408 75410 78369\nf 75408 75434 75433\nf 75408 78369 78377\nf 75408 78377 75434\nf 75409 75411 75410\nf 75410 75411 78370\nf 75410 78370 78369\nf 75411 75412 78370\nf 75412 75413 78371\nf 75412 78371 78370\nf 75413 75414 78372\nf 75413 78372 78371\nf 75414 75415 78373\nf 75414 78373 78372\nf 75415 75417 78374\nf 75415 78374 78373\nf 75416 75418 78375\nf 75416 78375 75417\nf 75417 78375 78374\nf 75418 75419 78376\nf 75418 78376 78375\nf 75419 75420 75436\nf 75419 75435 78376\nf 75419 75436 75435\nf 75420 75421 75438\nf 75420 75438 75436\nf 75421 75437 75438\nf 75422 75424 75423\nf 75423 75424 75441\nf 75423 75441 75440\nf 75424 75425 75442\nf 75424 75442 75441\nf 75425 75426 75443\nf 75425 75443 75442\nf 75426 75427 75444\nf 75426 75444 75443\nf 75427 75428 75445\nf 75427 75445 75444\nf 75428 75429 75446\nf 75428 75446 75445\nf 75429 75431 75447\nf 75429 75447 75446\nf 75430 75432 75450\nf 75430 75450 75431\nf 75431 75448 75447\nf 75431 75450 75448\nf 75432 75449 75450\nf 75433 75434 78395\nf 75433 78395 75453\nf 75434 78377 78378\nf 75434 78378 78395\nf 75435 75436 78388\nf 75435 78386 78376\nf 75435 78388 78386\nf 75436 75438 78389\nf 75436 78389 78388\nf 75437 75439 78390\nf 75437 78390 75438\nf 75438 78390 78389\nf 75439 75455 75456\nf 75439 75456 78407\nf 75439 78407 78390\nf 75440 75441 75457\nf 75441 75442 75458\nf 75441 75458 75457\nf 75442 75443 75459\nf 75442 75459 75458\nf 75443 75444 75460\nf 75443 75460 75459\nf 75444 75445 78391\nf 75444 78391 78409\nf 75444 78409 75460\nf 75445 75446 78392\nf 75445 78392 78391\nf 75446 75447 78393\nf 75446 78393 78392\nf 75447 75448 75461\nf 75447 75461 78394\nf 75447 78394 78393\nf 75448 75450 75461\nf 75449 75451 75463\nf 75449 75463 75450\nf 75450 75462 75461\nf 75450 75463 75462\nf 75451 75452 75465\nf 75451 75465 75463\nf 75452 75464 75465\nf 75453 78395 78418\nf 75453 78418 75454\nf 75454 75468 75467\nf 75454 78418 75468\nf 75455 75469 75470\nf 75455 75470 75456\nf 75456 75470 78407\nf 75457 75458 75471\nf 75458 75459 75472\nf 75458 75472 75471\nf 75459 75460 75473\nf 75459 75473 75472\nf 75460 78409 78410\nf 75460 78410 78430\nf 75460 78430 75473\nf 75461 75462 78416\nf 75461 78414 78394\nf 75461 78416 78414\nf 75462 75463 75474\nf 75462 75474 78417\nf 75462 78417 78416\nf 75463 75465 75474\nf 75464 75466 75477\nf 75464 75477 75465\nf 75465 75475 75474\nf 75465 75477 75475\nf 75466 75476 75477\nf 75467 75468 75479\nf 75468 75480 75479\nf 75468 78418 78440\nf 75468 78440 75480\nf 75469 75481 75482\nf 75469 75482 75470\nf 75470 75482 78428\nf 75470 78428 78407\nf 75471 75472 75483\nf 75472 75473 75484\nf 75472 75484 75483\nf 75473 75485 75484\nf 75473 78430 78453\nf 75473 78453 75485\nf 75474 75475 75486\nf 75474 75486 78439\nf 75474 78437 78417\nf 75474 78439 78437\nf 75475 75477 75486\nf 75476 75478 75489\nf 75476 75489 75477\nf 75477 75487 75486\nf 75477 75489 75487\nf 75478 75488 75489\nf 75479 75480 78464\nf 75479 78464 75490\nf 75480 78440 78441\nf 75480 78441 78464\nf 75481 75492 75493\nf 75481 75493 75482\nf 75482 75493 78451\nf 75482 78451 78428\nf 75483 75484 75494\nf 75484 75485 75495\nf 75484 75495 75494\nf 75485 75496 75495\nf 75485 78453 78476\nf 75485 78476 75496\nf 75486 75487 75497\nf 75486 75497 78463\nf 75486 78461 78439\nf 75486 78463 78461\nf 75487 75489 75497\nf 75488 75498 75499\nf 75488 75499 75489\nf 75489 75499 75497\nf 75490 78464 78487\nf 75490 78487 75491\nf 75491 75502 75501\nf 75491 78487 75502\nf 75492 75503 75504\nf 75492 75504 75493\nf 75493 75504 78474\nf 75493 78474 78451\nf 75494 75495 75505\nf 75495 75496 75506\nf 75495 75506 75505\nf 75496 75507 75506\nf 75496 78476 78499\nf 75496 78499 75507\nf 75497 75499 75508\nf 75497 75508 78485\nf 75497 78485 78463\nf 75498 75500 75511\nf 75498 75511 75499\nf 75499 75509 75508\nf 75499 75511 75509\nf 75500 75510 75511\nf 75501 75502 75512\nf 75502 75513 75512\nf 75502 78487 78510\nf 75502 78510 75513\nf 75503 75514 75515\nf 75503 75515 75504\nf 75504 75515 78497\nf 75504 78497 78474\nf 75505 75506 75516\nf 75506 75507 75517\nf 75506 75517 75516\nf 75507 75518 75517\nf 75507 78499 78522\nf 75507 78522 75518\nf 75508 75509 75519\nf 75508 75519 78508\nf 75508 78508 78485\nf 75509 75511 75520\nf 75509 75520 75519\nf 75510 75521 75522\nf 75510 75522 75511\nf 75511 75522 75520\nf 75512 75513 75523\nf 75513 75524 75523\nf 75513 78510 78533\nf 75513 78533 75524\nf 75514 75525 75526\nf 75514 75526 75515\nf 75515 75526 78520\nf 75515 78520 78497\nf 75516 75517 75527\nf 75517 75518 75528\nf 75517 75528 75527\nf 75518 75529 75528\nf 75518 78522 78545\nf 75518 78545 75529\nf 75519 75520 75530\nf 75519 75530 78531\nf 75519 78531 78508\nf 75520 75522 75531\nf 75520 75531 75530\nf 75521 75532 75533\nf 75521 75533 75522\nf 75522 75533 75531\nf 75523 75524 75534\nf 75524 75535 75534\nf 75524 78533 78557\nf 75524 78557 75535\nf 75525 75536 75537\nf 75525 75537 75526\nf 75526 75537 78543\nf 75526 78543 78520\nf 75527 75528 75538\nf 75528 75529 75540\nf 75528 75540 75538\nf 75529 75541 75540\nf 75529 78545 78569\nf 75529 78569 75541\nf 75530 75531 75542\nf 75530 75542 78556\nf 75530 78554 78531\nf 75530 78556 78554\nf 75531 75533 75542\nf 75532 75543 75544\nf 75532 75544 75533\nf 75533 75544 75542\nf 75534 75535 75545\nf 75535 75546 75545\nf 75535 78557 78581\nf 75535 78581 75546\nf 75536 75547 75548\nf 75536 75548 75537\nf 75537 75548 78567\nf 75537 78567 78543\nf 75538 75540 75539\nf 75539 75540 75549\nf 75540 75541 75550\nf 75540 75550 75549\nf 75541 78569 78594\nf 75541 78594 75550\nf 75542 75544 75551\nf 75542 75551 78579\nf 75542 78579 78556\nf 75543 75552 75553\nf 75543 75553 75544\nf 75544 75553 75551\nf 75545 75546 75554\nf 75546 75555 75554\nf 75546 78581 78606\nf 75546 78606 75555\nf 75547 75556 75557\nf 75547 75557 75548\nf 75548 75557 78592\nf 75548 78592 78567\nf 75549 75550 75558\nf 75550 75559 75558\nf 75550 78594 78620\nf 75550 78620 75559\nf 75551 75553 75560\nf 75551 75560 78604\nf 75551 78604 78579\nf 75552 75561 75562\nf 75552 75562 75553\nf 75553 75562 75560\nf 75554 75555 75563\nf 75555 75564 75563\nf 75555 78606 78632\nf 75555 78632 75564\nf 75556 75565 78643\nf 75556 78619 75557\nf 75556 78643 78619\nf 75557 78617 78592\nf 75557 78619 78617\nf 75558 75559 75566\nf 75559 75567 75566\nf 75559 78620 78645\nf 75559 78645 75567\nf 75560 75562 75568\nf 75560 75568 78630\nf 75560 78630 78604\nf 75561 75569 75570\nf 75561 75570 75562\nf 75562 75570 75568\nf 75563 75564 75572\nf 75564 75573 75572\nf 75564 78632 78657\nf 75564 78657 75573\nf 75565 75574 78668\nf 75565 78668 78643\nf 75566 75567 75575\nf 75567 75576 75575\nf 75567 78645 78670\nf 75567 78670 75576\nf 75568 75570 75577\nf 75568 75577 78655\nf 75568 78655 78630\nf 75569 75571 75580\nf 75569 75580 75570\nf 75570 75578 75577\nf 75570 75580 75578\nf 75571 75579 75580\nf 75572 75573 75581\nf 75573 75582 75581\nf 75573 78657 78683\nf 75573 78683 75582\nf 75574 75583 78694\nf 75574 78694 78668\nf 75575 75576 75584\nf 75576 75585 75584\nf 75576 75586 75585\nf 75576 78670 78671\nf 75576 78671 75586\nf 75577 75578 75587\nf 75577 75587 78681\nf 75577 78681 78655\nf 75578 75580 75588\nf 75578 75588 75587\nf 75579 75589 75590\nf 75579 75590 75580\nf 75580 75590 75588\nf 75581 75582 75591\nf 75582 75592 75591\nf 75582 78683 78708\nf 75582 78708 75592\nf 75583 75593 78719\nf 75583 78719 78694\nf 75584 75585 75594\nf 75585 75586 75595\nf 75585 75595 75594\nf 75586 78671 78696\nf 75586 78696 78697\nf 75586 78697 78721\nf 75586 78721 75595\nf 75587 75588 75596\nf 75587 75596 78706\nf 75587 78706 78681\nf 75588 75590 75597\nf 75588 75597 75596\nf 75589 75598 75599\nf 75589 75599 75590\nf 75590 75599 75597\nf 75591 75592 75600\nf 75592 75601 75600\nf 75592 78708 78733\nf 75592 78733 75601\nf 75593 75602 78744\nf 75593 78744 78719\nf 75594 75595 75603\nf 75595 75604 75603\nf 75595 78721 78747\nf 75595 78747 75604\nf 75596 75597 75605\nf 75596 75605 78731\nf 75596 78731 78706\nf 75597 75599 75606\nf 75597 75606 75605\nf 75598 75607 75608\nf 75598 75608 75599\nf 75599 75608 75606\nf 75600 75601 75609\nf 75601 75610 75609\nf 75601 78733 78760\nf 75601 78760 75610\nf 75602 75611 78744\nf 75603 75604 75613\nf 75604 75614 75613\nf 75604 75615 75614\nf 75604 78747 78748\nf 75604 78748 75615\nf 75605 75606 75616\nf 75605 75616 78758\nf 75605 78758 78731\nf 75606 75608 75617\nf 75606 75617 75616\nf 75607 75618 75620\nf 75607 75620 75608\nf 75608 75620 75617\nf 75609 75610 75621\nf 75610 75622 75621\nf 75610 78760 78783\nf 75610 78783 75622\nf 75611 75612 78744\nf 75611 75623 75624\nf 75611 75624 75612\nf 75612 75624 78770\nf 75612 78745 78744\nf 75612 78770 78745\nf 75613 75614 75625\nf 75614 75615 75626\nf 75614 75626 75625\nf 75615 75627 75626\nf 75615 78748 78772\nf 75615 78772 78796\nf 75615 78796 75627\nf 75616 75617 75628\nf 75616 75628 78781\nf 75616 78781 78758\nf 75617 75620 75630\nf 75617 75630 75628\nf 75618 75619 75620\nf 75619 75629 75630\nf 75619 75630 75620\nf 75621 75622 75631\nf 75622 75632 75631\nf 75622 78783 78807\nf 75622 78807 75632\nf 75623 75633 75634\nf 75623 75634 75624\nf 75624 75634 78794\nf 75624 78794 78770\nf 75625 75626 75635\nf 75626 75627 75636\nf 75626 75636 75635\nf 75627 75637 75636\nf 75627 78796 78820\nf 75627 78820 75637\nf 75628 75630 75638\nf 75628 75638 78805\nf 75628 78805 78781\nf 75629 75639 75640\nf 75629 75640 75630\nf 75630 75640 75638\nf 75631 75632 75641\nf 75632 75643 75641\nf 75632 78807 78831\nf 75632 78831 75643\nf 75633 75644 75645\nf 75633 75645 75634\nf 75634 75645 78818\nf 75634 78818 78794\nf 75635 75636 75646\nf 75636 75637 75647\nf 75636 75647 75646\nf 75637 75648 75647\nf 75637 78820 78843\nf 75637 78843 75648\nf 75638 75640 75649\nf 75638 75649 78829\nf 75638 78829 78805\nf 75639 75650 75651\nf 75639 75651 75640\nf 75640 75651 75649\nf 75641 75643 75642\nf 75642 75643 75653\nf 75642 75653 75652\nf 75643 75654 75653\nf 75643 78831 78855\nf 75643 78855 75654\nf 75644 75655 75656\nf 75644 75656 75645\nf 75645 75656 78841\nf 75645 78841 78818\nf 75646 75647 75657\nf 75647 75648 75658\nf 75647 75658 75657\nf 75648 78843 78844\nf 75648 78844 78867\nf 75648 78867 75658\nf 75649 75651 75659\nf 75649 75659 78853\nf 75649 78853 78829\nf 75650 75660 75661\nf 75650 75661 75651\nf 75651 75661 75659\nf 75652 75653 75662\nf 75653 75654 75663\nf 75653 75663 75662\nf 75654 75664 75663\nf 75654 78855 78880\nf 75654 78880 75664\nf 75655 75665 75666\nf 75655 75666 75656\nf 75656 75666 78865\nf 75656 78865 78841\nf 75657 75658 75667\nf 75658 75668 75667\nf 75658 78867 78892\nf 75658 78892 75668\nf 75659 75661 75670\nf 75659 75669 78877\nf 75659 75670 75669\nf 75659 78877 78853\nf 75660 75671 75672\nf 75660 75672 75661\nf 75661 75672 75670\nf 75662 75663 75680\nf 75663 75664 75682\nf 75663 75682 75680\nf 75664 75683 75682\nf 75664 78880 78903\nf 75664 78903 75683\nf 75665 75684 75685\nf 75665 75685 75666\nf 75666 75685 78890\nf 75666 78890 78865\nf 75667 75668 75686\nf 75668 75687 75686\nf 75668 78892 78915\nf 75668 78915 75687\nf 75669 75670 75688\nf 75669 75688 78901\nf 75669 78878 78877\nf 75669 78901 78878\nf 75670 75672 75689\nf 75670 75689 75688\nf 75671 75690 75691\nf 75671 75691 75672\nf 75672 75691 75689\nf 75673 75674 75716\nf 75673 75715 75713\nf 75673 75716 75715\nf 75674 75675 75718\nf 75674 75718 75716\nf 75675 75717 75718\nf 75676 75677 75763\nf 75676 75762 75760\nf 75676 75763 75762\nf 75677 75678 75764\nf 75677 75764 75763\nf 75678 75679 75765\nf 75678 75765 75764\nf 75679 75681 75766\nf 75679 75766 75765\nf 75680 75682 75681\nf 75681 75682 75766\nf 75682 75683 75767\nf 75682 75767 75766\nf 75683 75768 75767\nf 75683 78903 78927\nf 75683 78927 75768\nf 75684 75769 75770\nf 75684 75770 75685\nf 75685 75770 78913\nf 75685 78913 78890\nf 75686 75687 75771\nf 75687 75772 75771\nf 75687 78915 78939\nf 75687 78939 75772\nf 75688 75689 75773\nf 75688 75773 78926\nf 75688 78924 78901\nf 75688 78926 78924\nf 75689 75691 75773\nf 75690 75692 75775\nf 75690 75775 75691\nf 75691 75774 75773\nf 75691 75775 75774\nf 75692 75693 75776\nf 75692 75776 75775\nf 75693 75694 75777\nf 75693 75777 75776\nf 75694 75695 75778\nf 75694 75778 75777\nf 75695 75696 75779\nf 75695 75779 75778\nf 75696 75697 75780\nf 75696 75780 75779\nf 75697 75698 75781\nf 75697 75781 75780\nf 75698 75699 75782\nf 75698 75782 75781\nf 75699 75700 75783\nf 75699 75783 75782\nf 75700 75701 75784\nf 75700 75784 75783\nf 75701 75702 75785\nf 75701 75785 75784\nf 75702 75703 75787\nf 75702 75787 75785\nf 75703 75786 75787\nf 75704 75705 75796\nf 75704 75795 75793\nf 75704 75796 75795\nf 75705 75706 75797\nf 75705 75797 75796\nf 75706 75707 75798\nf 75706 75798 75797\nf 75707 75708 75799\nf 75707 75799 75798\nf 75708 75709 75800\nf 75708 75800 75799\nf 75709 75710 75801\nf 75709 75801 75800\nf 75710 75711 75802\nf 75710 75802 75801\nf 75711 75712 75803\nf 75711 75803 75802\nf 75712 75714 75804\nf 75712 75804 75803\nf 75713 75715 75714\nf 75714 75715 75804\nf 75715 75716 75805\nf 75715 75805 75804\nf 75716 75718 75806\nf 75716 75806 75805\nf 75717 75719 75808\nf 75717 75808 75718\nf 75718 75807 75806\nf 75718 75808 75807\nf 75719 75720 75809\nf 75719 75809 75808\nf 75720 75721 75810\nf 75720 75810 75809\nf 75721 75722 75811\nf 75721 75811 75810\nf 75722 75723 75812\nf 75722 75812 75811\nf 75723 75724 75813\nf 75723 75813 75812\nf 75724 75725 75814\nf 75724 75814 75813\nf 75725 75726 75815\nf 75725 75815 75814\nf 75726 75727 75816\nf 75726 75816 75815\nf 75727 75728 75817\nf 75727 75817 75816\nf 75728 75729 75818\nf 75728 75818 75817\nf 75729 75730 75819\nf 75729 75819 75818\nf 75730 75731 75820\nf 75730 75820 75819\nf 75731 75732 75821\nf 75731 75821 75820\nf 75732 75733 75822\nf 75732 75822 75821\nf 75733 75734 75823\nf 75733 75823 75822\nf 75734 75735 75824\nf 75734 75824 75823\nf 75735 75736 75825\nf 75735 75825 75824\nf 75736 75737 75826\nf 75736 75826 75825\nf 75737 75738 75827\nf 75737 75827 75826\nf 75738 75739 75828\nf 75738 75828 75827\nf 75739 75740 75829\nf 75739 75829 75828\nf 75740 75741 75830\nf 75740 75830 75829\nf 75741 75742 75831\nf 75741 75831 75830\nf 75742 75743 75832\nf 75742 75832 75831\nf 75743 75744 75833\nf 75743 75833 75832\nf 75744 75745 75834\nf 75744 75834 75833\nf 75745 75746 75835\nf 75745 75835 75834\nf 75746 75747 75836\nf 75746 75836 75835\nf 75747 75748 75837\nf 75747 75837 75836\nf 75748 75749 75838\nf 75748 75838 75837\nf 75749 75750 75839\nf 75749 75839 75838\nf 75750 75751 75840\nf 75750 75840 75839\nf 75751 75752 75841\nf 75751 75841 75840\nf 75752 75753 75842\nf 75752 75842 75841\nf 75753 75754 75843\nf 75753 75843 75842\nf 75754 75755 75844\nf 75754 75844 75843\nf 75755 75756 75845\nf 75755 75845 75844\nf 75756 75757 75846\nf 75756 75846 75845\nf 75757 75758 75847\nf 75757 75847 75846\nf 75758 75759 75848\nf 75758 75848 75847\nf 75759 75761 75849\nf 75759 75849 75848\nf 75760 75762 75761\nf 75761 75762 75849\nf 75762 75763 75850\nf 75762 75850 75849\nf 75763 75764 75851\nf 75763 75851 75850\nf 75764 75765 75852\nf 75764 75852 75851\nf 75765 75766 75853\nf 75765 75853 75852\nf 75766 75767 75854\nf 75766 75854 75853\nf 75767 75768 75855\nf 75767 75855 75854\nf 75768 78927 78928\nf 75768 78928 78959\nf 75768 78959 75855\nf 75769 75856 75857\nf 75769 75857 75770\nf 75770 75857 78937\nf 75770 78937 78913\nf 75771 75772 75858\nf 75772 75859 75858\nf 75772 78939 78971\nf 75772 78971 75859\nf 75773 75774 75860\nf 75773 75860 78949\nf 75773 78949 78926\nf 75774 75775 75861\nf 75774 75861 75860\nf 75775 75776 75862\nf 75775 75862 75861\nf 75776 75777 75863\nf 75776 75863 75862\nf 75777 75778 75864\nf 75777 75864 75863\nf 75778 75779 75865\nf 75778 75865 75864\nf 75779 75780 75866\nf 75779 75866 75865\nf 75780 75781 75867\nf 75780 75867 75866\nf 75781 75782 75868\nf 75781 75868 75867\nf 75782 75783 75869\nf 75782 75869 75868\nf 75783 75784 75870\nf 75783 75870 75869\nf 75784 75785 75871\nf 75784 75871 75870\nf 75785 75787 75872\nf 75785 75872 75871\nf 75786 75788 75874\nf 75786 75874 75787\nf 75787 75873 75872\nf 75787 75874 75873\nf 75788 75789 75875\nf 75788 75875 75874\nf 75789 75790 75876\nf 75789 75876 75875\nf 75790 75791 75877\nf 75790 75877 75876\nf 75791 75792 75878\nf 75791 75878 75877\nf 75792 75794 75879\nf 75792 75879 75878\nf 75793 75795 75794\nf 75794 75795 75879\nf 75795 75796 75880\nf 75795 75880 75879\nf 75796 75797 75881\nf 75796 75881 75880\nf 75797 75798 75882\nf 75797 75882 75881\nf 75798 75799 75883\nf 75798 75883 75882\nf 75799 75800 75884\nf 75799 75884 75883\nf 75800 75801 75885\nf 75800 75885 75884\nf 75801 75802 75886\nf 75801 75886 75885\nf 75802 75803 75887\nf 75802 75887 75886\nf 75803 75804 78951\nf 75803 78951 78994\nf 75803 78994 75887\nf 75804 75805 78952\nf 75804 78952 78951\nf 75805 75806 78953\nf 75805 78953 78952\nf 75806 75807 78954\nf 75806 78954 78953\nf 75807 75808 78955\nf 75807 78955 78954\nf 75808 75809 78956\nf 75808 78956 78955\nf 75809 75810 78957\nf 75809 78957 78956\nf 75810 75811 75888\nf 75810 75888 78958\nf 75810 78958 78957\nf 75811 75812 75888\nf 75812 75813 75889\nf 75812 75889 75888\nf 75813 75814 75890\nf 75813 75890 75889\nf 75814 75815 75891\nf 75814 75891 75890\nf 75815 75816 75892\nf 75815 75892 75891\nf 75816 75817 75893\nf 75816 75893 75892\nf 75817 75818 75894\nf 75817 75894 75893\nf 75818 75819 75895\nf 75818 75895 75894\nf 75819 75820 75896\nf 75819 75896 75895\nf 75820 75821 75897\nf 75820 75897 75896\nf 75821 75822 75898\nf 75821 75898 75897\nf 75822 75823 75899\nf 75822 75899 75898\nf 75823 75824 75900\nf 75823 75900 75899\nf 75824 75825 75901\nf 75824 75901 75900\nf 75825 75826 75902\nf 75825 75902 75901\nf 75826 75827 75903\nf 75826 75903 75902\nf 75827 75828 75904\nf 75827 75904 75903\nf 75828 75829 75905\nf 75828 75905 75904\nf 75829 75830 75906\nf 75829 75906 75905\nf 75830 75831 75907\nf 75830 75907 75906\nf 75831 75832 75908\nf 75831 75908 75907\nf 75832 75833 75909\nf 75832 75909 75908\nf 75833 75834 75910\nf 75833 75910 75909\nf 75834 75835 75911\nf 75834 75911 75910\nf 75835 75836 75912\nf 75835 75912 75911\nf 75836 75837 75913\nf 75836 75913 75912\nf 75837 75838 75914\nf 75837 75914 75913\nf 75838 75839 75915\nf 75838 75915 75914\nf 75839 75840 75916\nf 75839 75916 75915\nf 75840 75841 75917\nf 75840 75917 75916\nf 75841 75842 75918\nf 75841 75918 75917\nf 75842 75843 75919\nf 75842 75919 75918\nf 75843 75844 75920\nf 75843 75920 75919\nf 75844 75845 75921\nf 75844 75921 75920\nf 75845 75846 75922\nf 75845 75922 75921\nf 75846 75847 75923\nf 75846 75923 75922\nf 75847 75848 75924\nf 75847 75924 75923\nf 75848 75849 75925\nf 75848 75925 75924\nf 75849 75850 75926\nf 75849 75926 75925\nf 75850 75851 75927\nf 75850 75927 75926\nf 75851 75852 75928\nf 75851 75928 75927\nf 75852 75853 75929\nf 75852 75929 75928\nf 75853 75854 75930\nf 75853 75930 75929\nf 75854 75855 75931\nf 75854 75931 75930\nf 75855 75932 75931\nf 75855 78959 79038\nf 75855 79038 75932\nf 75856 75933 75934\nf 75856 75934 75857\nf 75857 75934 78969\nf 75857 78969 78937\nf 75858 75859 75935\nf 75859 75936 75935\nf 75859 78971 79052\nf 75859 79052 75936\nf 75860 75861 75937\nf 75860 75937 78981\nf 75860 78981 78949\nf 75861 75862 75938\nf 75861 75938 75937\nf 75862 75863 75939\nf 75862 75939 75938\nf 75863 75864 75940\nf 75863 75940 75939\nf 75864 75865 75941\nf 75864 75941 75940\nf 75865 75866 75942\nf 75865 75942 75941\nf 75866 75867 75943\nf 75866 75943 75942\nf 75867 75868 75944\nf 75867 75944 75943\nf 75868 75869 75945\nf 75868 75945 75944\nf 75869 75870 75946\nf 75869 75946 75945\nf 75870 75871 75947\nf 75870 75947 75946\nf 75871 75872 75948\nf 75871 75948 75947\nf 75872 75873 78983\nf 75872 78983 79069\nf 75872 79069 75948\nf 75873 75874 75949\nf 75873 75949 78984\nf 75873 78984 78983\nf 75874 75875 75949\nf 75875 75876 75950\nf 75875 75950 75949\nf 75876 75877 75951\nf 75876 75951 75950\nf 75877 75878 75952\nf 75877 75952 75951\nf 75878 75879 78985\nf 75878 78985 79077\nf 75878 79077 75952\nf 75879 75880 78986\nf 75879 78986 78985\nf 75880 75881 78987\nf 75880 78987 78986\nf 75881 75882 78988\nf 75881 78988 78987\nf 75882 75883 78989\nf 75882 78989 78988\nf 75883 75884 78990\nf 75883 78990 78989\nf 75884 75885 78991\nf 75884 78991 78990\nf 75885 75886 78992\nf 75885 78992 78991\nf 75886 75887 78993\nf 75886 78993 78992\nf 75887 78994 78995\nf 75887 78995 78993\nf 75888 75889 79005\nf 75888 79003 78958\nf 75888 79005 79003\nf 75889 75890 79006\nf 75889 79006 79005\nf 75890 75891 79007\nf 75890 79007 79006\nf 75891 75892 79008\nf 75891 79008 79007\nf 75892 75893 79009\nf 75892 79009 79008\nf 75893 75894 79010\nf 75893 79010 79009\nf 75894 75895 79011\nf 75894 79011 79010\nf 75895 75896 79012\nf 75895 79012 79011\nf 75896 75897 79013\nf 75896 79013 79012\nf 75897 75898 79014\nf 75897 79014 79013\nf 75898 75899 79015\nf 75898 79015 79014\nf 75899 75900 75953\nf 75899 75953 79016\nf 75899 79016 79015\nf 75900 75901 75953\nf 75901 75902 75954\nf 75901 75954 75953\nf 75902 75903 75955\nf 75902 75955 75954\nf 75903 75904 75956\nf 75903 75956 75955\nf 75904 75905 75957\nf 75904 75957 75956\nf 75905 75906 75958\nf 75905 75958 75957\nf 75906 75907 75959\nf 75906 75959 75958\nf 75907 75908 75960\nf 75907 75960 75959\nf 75908 75909 75961\nf 75908 75961 75960\nf 75909 75910 75962\nf 75909 75962 75961\nf 75910 75911 79017\nf 75910 79017 79119\nf 75910 79119 75962\nf 75911 75912 79018\nf 75911 79018 79017\nf 75912 75913 79019\nf 75912 79019 79018\nf 75913 75914 79020\nf 75913 79020 79019\nf 75914 75915 79021\nf 75914 79021 79020\nf 75915 75916 79022\nf 75915 79022 79021\nf 75916 75917 79023\nf 75916 79023 79022\nf 75917 75918 79024\nf 75917 79024 79023\nf 75918 75919 79025\nf 75918 79025 79024\nf 75919 75920 79026\nf 75919 79026 79025\nf 75920 75921 79027\nf 75920 79027 79026\nf 75921 75922 79028\nf 75921 79028 79027\nf 75922 75923 79029\nf 75922 79029 79028\nf 75923 75924 79030\nf 75923 79030 79029\nf 75924 75925 79031\nf 75924 79031 79030\nf 75925 75926 79032\nf 75925 79032 79031\nf 75926 75927 79033\nf 75926 79033 79032\nf 75927 75928 79034\nf 75927 79034 79033\nf 75928 75929 79035\nf 75928 79035 79034\nf 75929 75930 79036\nf 75929 79036 79035\nf 75930 75931 75963\nf 75930 75963 79037\nf 75930 79037 79036\nf 75931 75932 75963\nf 75932 79038 79039\nf 75932 79039 79143\nf 75932 79143 75963\nf 75933 75964 75965\nf 75933 75965 75934\nf 75934 75965 79050\nf 75934 79050 78969\nf 75935 75936 75966\nf 75936 75967 75966\nf 75936 79052 79158\nf 75936 79158 75967\nf 75937 75938 75968\nf 75937 75968 79064\nf 75937 79062 78981\nf 75937 79064 79062\nf 75938 75939 75968\nf 75939 75940 75969\nf 75939 75969 75968\nf 75940 75941 75970\nf 75940 75970 75969\nf 75941 75942 75971\nf 75941 75971 75970\nf 75942 75943 75972\nf 75942 75972 75971\nf 75943 75944 75973\nf 75943 75973 75972\nf 75944 75945 79065\nf 75944 79065 79171\nf 75944 79171 75973\nf 75945 75946 79066\nf 75945 79066 79065\nf 75946 75947 79067\nf 75946 79067 79066\nf 75947 75948 79068\nf 75947 79068 79067\nf 75948 79069 79070\nf 75948 79070 79068\nf 75949 75950 79074\nf 75949 79072 78984\nf 75949 79074 79072\nf 75950 75951 79075\nf 75950 79075 79074\nf 75951 75952 79076\nf 75951 79076 79075\nf 75952 79077 79078\nf 75952 79078 79076\nf 75953 75954 79110\nf 75953 79108 79016\nf 75953 79110 79108\nf 75954 75955 79111\nf 75954 79111 79110\nf 75955 75956 79112\nf 75955 79112 79111\nf 75956 75957 79113\nf 75956 79113 79112\nf 75957 75958 79114\nf 75957 79114 79113\nf 75958 75959 79115\nf 75958 79115 79114\nf 75959 75960 79116\nf 75959 79116 79115\nf 75960 75961 79117\nf 75960 79117 79116\nf 75961 75962 79118\nf 75961 79118 79117\nf 75962 79119 79120\nf 75962 79120 79118\nf 75963 79141 79037\nf 75963 79143 79144\nf 75963 79144 79141\nf 75964 75974 75975\nf 75964 75975 75965\nf 75965 75975 79156\nf 75965 79156 79050\nf 75966 75967 75976\nf 75967 75977 75976\nf 75967 79158 79259\nf 75967 79259 75977\nf 75968 75969 75978\nf 75968 75978 79169\nf 75968 79169 79064\nf 75969 75970 75979\nf 75969 75979 75978\nf 75970 75971 75980\nf 75970 75980 75979\nf 75971 75972 75981\nf 75971 75981 75980\nf 75972 75973 75982\nf 75972 75982 75981\nf 75973 75983 75982\nf 75973 79171 79272\nf 75973 79272 75983\nf 75974 75984 75985\nf 75974 75985 75975\nf 75975 75985 79257\nf 75975 79257 79156\nf 75976 75977 75986\nf 75977 75987 75986\nf 75977 79259 79405\nf 75977 79405 75987\nf 75978 75979 75988\nf 75978 75988 79270\nf 75978 79270 79169\nf 75979 75980 75989\nf 75979 75989 75988\nf 75980 75981 75990\nf 75980 75990 75989\nf 75981 75982 75991\nf 75981 75991 75990\nf 75982 75983 75993\nf 75982 75993 75991\nf 75983 75994 75993\nf 75983 75995 75994\nf 75983 79272 79273\nf 75983 79273 75995\nf 75984 76050 76051\nf 75984 76051 75985\nf 75985 76051 79403\nf 75985 79403 79257\nf 75986 75987 76052\nf 75987 76053 76052\nf 75987 79405 79481\nf 75987 79481 76053\nf 75988 75989 76054\nf 75988 76054 79416\nf 75988 79416 79270\nf 75989 75990 76055\nf 75989 76055 76054\nf 75990 75991 76057\nf 75990 76057 76055\nf 75991 75993 76060\nf 75991 76060 76057\nf 75992 75993 76061\nf 75992 76058 76060\nf 75992 76060 75993\nf 75993 75994 76063\nf 75993 76063 76061\nf 75994 75995 76063\nf 75995 75996 76065\nf 75995 76065 76063\nf 75995 79273 79275\nf 75995 79275 75996\nf 75996 75997 76067\nf 75996 76067 76065\nf 75996 79275 79277\nf 75996 79277 75997\nf 75997 75998 76069\nf 75997 76069 76067\nf 75997 79277 79279\nf 75997 79279 75998\nf 75998 75999 76071\nf 75998 76071 76069\nf 75998 79279 79281\nf 75998 79281 75999\nf 75999 76000 76073\nf 75999 76073 76071\nf 75999 79281 79283\nf 75999 79283 76000\nf 76000 76001 76075\nf 76000 76075 76073\nf 76000 79283 79285\nf 76000 79285 76001\nf 76001 76003 76078\nf 76001 76078 76075\nf 76001 79285 79287\nf 76001 79287 76003\nf 76002 76003 76004\nf 76002 76076 76078\nf 76002 76078 76003\nf 76003 76005 76004\nf 76003 79287 79289\nf 76003 79289 76005\nf 76004 76005 76006\nf 76005 76007 76006\nf 76005 79289 79291\nf 76005 79291 76007\nf 76006 76007 76079\nf 76007 76008 76081\nf 76007 76081 76079\nf 76007 79291 79293\nf 76007 79293 76008\nf 76008 76083 76081\nf 76008 79293 79418\nf 76008 79418 79419\nf 76008 79419 76083\nf 76009 76010 76113\nf 76009 76111 79462\nf 76009 76113 76111\nf 76009 79323 79325\nf 76009 79325 76010\nf 76009 79462 79323\nf 76010 76011 76115\nf 76010 76115 76113\nf 76010 79325 79327\nf 76010 79327 76011\nf 76011 76012 76117\nf 76011 76117 76115\nf 76011 79327 79329\nf 76011 79329 76012\nf 76012 76013 76119\nf 76012 76119 76117\nf 76012 79329 79331\nf 76012 79331 76013\nf 76013 76014 76121\nf 76013 76121 76119\nf 76013 79331 79333\nf 76013 79333 76014\nf 76014 76015 76123\nf 76014 76123 76121\nf 76014 79333 79335\nf 76014 79335 76015\nf 76015 76016 76125\nf 76015 76125 76123\nf 76015 79335 79337\nf 76015 79337 76016\nf 76016 76017 76127\nf 76016 76127 76125\nf 76016 79337 79339\nf 76016 79339 76017\nf 76017 76018 76129\nf 76017 76129 76127\nf 76017 79339 79341\nf 76017 79341 76018\nf 76018 76019 76131\nf 76018 76131 76129\nf 76018 79341 79343\nf 76018 79343 76019\nf 76019 76020 76133\nf 76019 76133 76131\nf 76019 79343 79345\nf 76019 79345 76020\nf 76020 76021 76135\nf 76020 76135 76133\nf 76020 79345 79347\nf 76020 79347 76021\nf 76021 76022 76137\nf 76021 76137 76135\nf 76021 79347 79349\nf 76021 79349 76022\nf 76022 76023 76139\nf 76022 76139 76137\nf 76022 79349 79351\nf 76022 79351 76023\nf 76023 76024 76141\nf 76023 76141 76139\nf 76023 79351 79353\nf 76023 79353 76024\nf 76024 76025 76143\nf 76024 76143 76141\nf 76024 79353 79355\nf 76024 79355 76025\nf 76025 76026 76145\nf 76025 76145 76143\nf 76025 79355 79357\nf 76025 79357 76026\nf 76026 76027 76147\nf 76026 76147 76145\nf 76026 79357 79359\nf 76026 79359 76027\nf 76027 76028 76149\nf 76027 76149 76147\nf 76027 79359 79361\nf 76027 79361 76028\nf 76028 76029 76151\nf 76028 76151 76149\nf 76028 79361 79363\nf 76028 79363 76029\nf 76029 76031 76154\nf 76029 76154 76151\nf 76029 79363 79365\nf 76029 79365 76031\nf 76030 76031 76032\nf 76030 76152 76154\nf 76030 76154 76031\nf 76031 76033 76032\nf 76031 79365 79367\nf 76031 79367 76033\nf 76032 76033 76034\nf 76033 76035 76034\nf 76033 79367 79369\nf 76033 79369 76035\nf 76034 76035 76036\nf 76035 76037 76036\nf 76035 79369 79371\nf 76035 79371 76037\nf 76036 76037 76038\nf 76037 76039 76038\nf 76037 79371 79373\nf 76037 79373 76039\nf 76038 76039 76040\nf 76039 76041 76040\nf 76039 79373 79375\nf 76039 79375 76041\nf 76040 76041 76042\nf 76041 76043 76042\nf 76041 79375 79377\nf 76041 79377 76043\nf 76042 76043 76155\nf 76043 76044 76157\nf 76043 76157 76155\nf 76043 79377 79379\nf 76043 79379 76044\nf 76044 76045 76157\nf 76044 79379 79381\nf 76044 79381 76045\nf 76045 76046 76159\nf 76045 76159 76157\nf 76045 79381 79383\nf 76045 79383 76046\nf 76046 76047 76161\nf 76046 76161 76159\nf 76046 79383 79385\nf 76046 79385 76047\nf 76047 76048 76163\nf 76047 76163 76161\nf 76047 79385 79387\nf 76047 79387 76048\nf 76048 76049 76165\nf 76048 76165 76163\nf 76048 79387 79389\nf 76048 79389 76049\nf 76049 76167 76165\nf 76049 76168 76167\nf 76049 79389 79465\nf 76049 79465 79466\nf 76049 79466 76168\nf 76050 76169 76170\nf 76050 76170 76051\nf 76051 76170 79479\nf 76051 79479 79403\nf 76052 76053 76171\nf 76053 76172 76171\nf 76053 79481 79535\nf 76053 79535 76172\nf 76054 76055 76173\nf 76054 76173 79492\nf 76054 79492 79416\nf 76055 76057 76175\nf 76055 76175 76173\nf 76056 76057 76059\nf 76056 76174 76175\nf 76056 76175 76057\nf 76057 76060 76059\nf 76058 76059 76060\nf 76061 76063 76062\nf 76062 76063 76064\nf 76063 76065 76064\nf 76064 76065 76066\nf 76065 76067 76066\nf 76066 76067 76068\nf 76067 76069 76068\nf 76068 76069 76070\nf 76069 76071 76070\nf 76070 76071 76072\nf 76071 76073 76072\nf 76072 76073 76074\nf 76073 76075 76074\nf 76074 76075 76077\nf 76075 76078 76077\nf 76076 76077 76078\nf 76079 76081 76080\nf 76080 76081 76082\nf 76081 76083 76082\nf 76082 76083 76084\nf 76083 76085 76084\nf 76083 79419 79421\nf 76083 79421 76085\nf 76084 76085 76086\nf 76085 76087 76086\nf 76085 79421 79423\nf 76085 79423 76087\nf 76086 76087 76176\nf 76087 76088 76178\nf 76087 76178 76176\nf 76087 79423 79425\nf 76087 79425 76088\nf 76088 76180 76178\nf 76088 79425 79494\nf 76088 79494 79495\nf 76088 79495 76180\nf 76089 76090 76202\nf 76089 76200 79515\nf 76089 76202 76200\nf 76089 79438 79440\nf 76089 79440 76090\nf 76089 79515 79438\nf 76090 76091 76204\nf 76090 76204 76202\nf 76090 79440 79442\nf 76090 79442 76091\nf 76091 76093 76207\nf 76091 76207 76204\nf 76091 79442 79444\nf 76091 79444 76093\nf 76092 76093 76094\nf 76092 76205 76207\nf 76092 76207 76093\nf 76093 76095 76094\nf 76093 79444 79446\nf 76093 79446 76095\nf 76094 76095 76096\nf 76095 76097 76096\nf 76095 79446 79448\nf 76095 79448 76097\nf 76096 76097 76098\nf 76097 76099 76098\nf 76097 79448 79450\nf 76097 79450 76099\nf 76098 76099 76100\nf 76099 76101 76100\nf 76099 79450 79452\nf 76099 79452 76101\nf 76100 76101 76102\nf 76101 76103 76102\nf 76101 79452 79454\nf 76101 79454 76103\nf 76102 76103 76104\nf 76103 76105 76104\nf 76103 79454 79456\nf 76103 79456 76105\nf 76104 76105 76106\nf 76105 76107 76106\nf 76105 79456 79458\nf 76105 79458 76107\nf 76106 76107 76108\nf 76107 76109 76108\nf 76107 79458 79460\nf 76107 79460 76109\nf 76108 76109 76110\nf 76109 76111 76110\nf 76109 79460 79463\nf 76109 79463 76111\nf 76110 76111 76112\nf 76111 76113 76112\nf 76111 79463 79462\nf 76112 76113 76114\nf 76113 76115 76114\nf 76114 76115 76116\nf 76115 76117 76116\nf 76116 76117 76118\nf 76117 76119 76118\nf 76118 76119 76120\nf 76119 76121 76120\nf 76120 76121 76122\nf 76121 76123 76122\nf 76122 76123 76124\nf 76123 76125 76124\nf 76124 76125 76126\nf 76125 76127 76126\nf 76126 76127 76128\nf 76127 76129 76128\nf 76128 76129 76130\nf 76129 76131 76130\nf 76130 76131 76132\nf 76131 76133 76132\nf 76132 76133 76134\nf 76133 76135 76134\nf 76134 76135 76136\nf 76135 76137 76136\nf 76136 76137 76138\nf 76137 76139 76138\nf 76138 76139 76140\nf 76139 76141 76140\nf 76140 76141 76142\nf 76141 76143 76142\nf 76142 76143 76144\nf 76143 76145 76144\nf 76144 76145 76146\nf 76145 76147 76146\nf 76146 76147 76148\nf 76147 76149 76148\nf 76148 76149 76150\nf 76149 76151 76150\nf 76150 76151 76153\nf 76151 76154 76153\nf 76152 76153 76154\nf 76155 76157 76156\nf 76156 76157 76158\nf 76157 76159 76158\nf 76158 76159 76160\nf 76159 76161 76160\nf 76160 76161 76162\nf 76161 76163 76162\nf 76162 76163 76164\nf 76163 76165 76164\nf 76164 76165 76166\nf 76165 76167 76166\nf 76166 76167 76208\nf 76167 76168 76209\nf 76167 76209 76208\nf 76168 76210 76209\nf 76168 79466 79518\nf 76168 79518 79519\nf 76168 79519 76210\nf 76169 76211 76212\nf 76169 76212 76170\nf 76170 76212 79533\nf 76170 79533 79479\nf 76171 76172 76213\nf 76172 76214 76213\nf 76172 79535 79563\nf 76172 79563 76214\nf 76173 76175 76215\nf 76173 76215 79546\nf 76173 79546 79492\nf 76174 76216 76217\nf 76174 76217 76175\nf 76175 76217 76215\nf 76176 76178 76177\nf 76177 76178 76179\nf 76178 76180 76179\nf 76179 76180 76181\nf 76180 76182 76181\nf 76180 79495 79497\nf 76180 79497 76182\nf 76181 76182 76183\nf 76182 76184 76183\nf 76182 79497 79499\nf 76182 79499 76184\nf 76183 76184 76185\nf 76184 76186 76185\nf 76184 79499 79501\nf 76184 79501 76186\nf 76185 76186 76187\nf 76186 76188 76187\nf 76186 79501 79503\nf 76186 79503 76188\nf 76187 76188 76189\nf 76188 76190 76189\nf 76188 79503 79505\nf 76188 79505 76190\nf 76189 76190 76191\nf 76190 76192 76191\nf 76190 79505 79507\nf 76190 79507 76192\nf 76191 76192 76193\nf 76192 76194 76193\nf 76192 79507 79509\nf 76192 79509 76194\nf 76193 76194 76195\nf 76194 76196 76195\nf 76194 79509 79511\nf 76194 79511 76196\nf 76195 76196 76197\nf 76196 76198 76197\nf 76196 79511 79513\nf 76196 79513 76198\nf 76197 76198 76199\nf 76198 76200 76199\nf 76198 79513 79516\nf 76198 79516 76200\nf 76199 76200 76201\nf 76200 76202 76201\nf 76200 79516 79515\nf 76201 76202 76203\nf 76202 76204 76203\nf 76203 76204 76206\nf 76204 76207 76206\nf 76205 76206 76207\nf 76208 76209 76218\nf 76209 76210 76220\nf 76209 76220 76218\nf 76210 76221 76220\nf 76210 79519 79548\nf 76210 79548 79577\nf 76210 79577 76221\nf 76211 76222 76223\nf 76211 76223 76212\nf 76212 76223 79561\nf 76212 79561 79533\nf 76213 76214 76224\nf 76214 76225 76224\nf 76214 79563 79592\nf 76214 79592 76225\nf 76215 76217 76227\nf 76215 76226 79574\nf 76215 76227 76226\nf 76215 79574 79546\nf 76216 76228 76229\nf 76216 76229 76217\nf 76217 76229 76227\nf 76218 76220 76219\nf 76219 76220 76230\nf 76220 76221 76231\nf 76220 76231 76230\nf 76221 79577 79604\nf 76221 79604 76231\nf 76222 76232 76233\nf 76222 76233 76223\nf 76223 76233 79590\nf 76223 79590 79561\nf 76224 76225 76234\nf 76225 76235 76234\nf 76225 79592 79620\nf 76225 79620 76235\nf 76226 76227 76236\nf 76226 76236 79602\nf 76226 79575 79574\nf 76226 79602 79575\nf 76227 76229 76237\nf 76227 76237 76236\nf 76228 76238 76239\nf 76228 76239 76229\nf 76229 76239 76237\nf 76230 76231 76240\nf 76231 76241 76240\nf 76231 76242 76241\nf 76231 79604 79605\nf 76231 79605 76242\nf 76232 76243 76244\nf 76232 76244 76233\nf 76233 76244 79618\nf 76233 79618 79590\nf 76234 76235 76245\nf 76235 76246 76245\nf 76235 79620 79647\nf 76235 79647 76246\nf 76236 76237 76247\nf 76236 76247 79630\nf 76236 79630 79602\nf 76237 76239 76248\nf 76237 76248 76247\nf 76238 76249 76250\nf 76238 76250 76239\nf 76239 76250 76248\nf 76240 76241 76251\nf 76241 76242 76252\nf 76241 76252 76251\nf 76242 76253 76252\nf 76242 79605 79632\nf 76242 79632 79659\nf 76242 79659 76253\nf 76243 76254 79672\nf 76243 79646 76244\nf 76243 79672 79646\nf 76244 79644 79618\nf 76244 79646 79644\nf 76245 76246 76255\nf 76246 76256 76255\nf 76246 79647 79674\nf 76246 79674 76256\nf 76247 76248 76257\nf 76247 76257 79657\nf 76247 79657 79630\nf 76248 76250 76258\nf 76248 76258 76257\nf 76249 76259 76260\nf 76249 76260 76250\nf 76250 76260 76258\nf 76251 76252 76261\nf 76252 76253 76263\nf 76252 76263 76261\nf 76253 76264 76263\nf 76253 79659 79686\nf 76253 79686 76264\nf 76254 76265 79699\nf 76254 79699 79672\nf 76255 76256 76266\nf 76256 76267 76266\nf 76256 79674 79701\nf 76256 79701 76267\nf 76257 76258 76268\nf 76257 76268 79684\nf 76257 79684 79657\nf 76258 76260 76269\nf 76258 76269 76268\nf 76259 76270 76271\nf 76259 76271 76260\nf 76260 76271 76269\nf 76261 76263 76262\nf 76262 76263 76272\nf 76263 76264 76273\nf 76263 76273 76272\nf 76264 79686 79713\nf 76264 79713 76273\nf 76265 76274 79726\nf 76265 79726 79699\nf 76266 76267 76275\nf 76267 76276 76275\nf 76267 79701 79728\nf 76267 79728 76276\nf 76268 76269 76277\nf 76268 76277 79711\nf 76268 79711 79684\nf 76269 76271 76278\nf 76269 76278 76277\nf 76270 76279 76280\nf 76270 76280 76271\nf 76271 76280 76278\nf 76272 76273 76281\nf 76273 76282 76281\nf 76273 79713 79740\nf 76273 79740 76282\nf 76274 76283 79753\nf 76274 79753 79726\nf 76275 76276 76284\nf 76276 76285 76284\nf 76276 79728 79755\nf 76276 79755 76285\nf 76277 76278 76286\nf 76277 76286 79738\nf 76277 79738 79711\nf 76278 76280 76287\nf 76278 76287 76286\nf 76279 76288 76289\nf 76279 76289 76280\nf 76280 76289 76287\nf 76281 76282 76290\nf 76282 76291 76290\nf 76282 79740 79767\nf 76282 79767 76291\nf 76283 76292 79780\nf 76283 79780 79753\nf 76284 76285 76294\nf 76285 76295 76294\nf 76285 79755 79782\nf 76285 79782 76295\nf 76286 76287 76296\nf 76286 76296 79765\nf 76286 79765 79738\nf 76287 76289 76297\nf 76287 76297 76296\nf 76288 76298 76300\nf 76288 76300 76289\nf 76289 76300 76297\nf 76290 76291 76301\nf 76291 76302 76301\nf 76291 79767 79794\nf 76291 79794 76302\nf 76292 76293 76304\nf 76292 76304 79807\nf 76292 79807 79780\nf 76293 76303 76304\nf 76294 76295 76305\nf 76295 76306 76305\nf 76295 79782 79809\nf 76295 79809 76306\nf 76296 76297 76307\nf 76296 76307 79792\nf 76296 79792 79765\nf 76297 76300 76309\nf 76297 76309 76307\nf 76298 76299 76300\nf 76299 76308 76309\nf 76299 76309 76300\nf 76301 76302 76310\nf 76302 76311 76310\nf 76302 79794 79821\nf 76302 79821 76311\nf 76303 76312 76313\nf 76303 76313 76304\nf 76304 76313 79807\nf 76305 76306 76314\nf 76306 76315 76314\nf 76306 79809 79836\nf 76306 79836 76315\nf 76307 76309 76316\nf 76307 76316 79819\nf 76307 79819 79792\nf 76308 76317 76318\nf 76308 76318 76309\nf 76309 76318 76316\nf 76310 76311 76320\nf 76311 76321 76320\nf 76311 79821 79848\nf 76311 79848 76321\nf 76312 76322 76323\nf 76312 76323 76313\nf 76313 76323 79834\nf 76313 79834 79807\nf 76314 76315 76324\nf 76315 76326 76324\nf 76315 79836 79863\nf 76315 79863 76326\nf 76316 76318 76327\nf 76316 76327 79846\nf 76316 79846 79819\nf 76317 76319 76330\nf 76317 76330 76318\nf 76318 76328 76327\nf 76318 76330 76328\nf 76319 76329 76330\nf 76320 76321 76331\nf 76321 76332 76331\nf 76321 79848 79875\nf 76321 79875 76332\nf 76322 76333 76334\nf 76322 76334 76323\nf 76323 76334 79861\nf 76323 79861 79834\nf 76324 76326 76325\nf 76325 76326 76335\nf 76326 79863 76335\nf 76327 76328 76336\nf 76327 76336 79873\nf 76327 79873 79846\nf 76328 76330 76337\nf 76328 76337 76336\nf 76329 76338 76339\nf 76329 76339 76330\nf 76330 76339 76337\nf 76331 76332 76340\nf 76332 76341 76340\nf 76332 79875 79903\nf 76332 79903 76341\nf 76333 76342 76343\nf 76333 76343 76334\nf 76334 76343 79888\nf 76334 79888 79861\nf 76335 79863 79890\nf 76335 79890 76344\nf 76336 76337 76346\nf 76336 76346 79901\nf 76336 79901 79873\nf 76337 76339 76347\nf 76337 76347 76346\nf 76338 76348 76349\nf 76338 76349 76339\nf 76339 76349 76347\nf 76340 76341 76350\nf 76341 76351 76350\nf 76341 79903 79929\nf 76341 79929 76351\nf 76342 76352 76353\nf 76342 76353 76343\nf 76343 76353 79916\nf 76343 79916 79888\nf 76344 76345 76354\nf 76344 79890 79891\nf 76344 79891 76345\nf 76345 76355 76354\nf 76345 79891 79918\nf 76345 79918 79944\nf 76345 79944 76355\nf 76346 76347 76356\nf 76346 76356 79927\nf 76346 79927 79901\nf 76347 76349 76357\nf 76347 76357 76356\nf 76348 76358 76359\nf 76348 76359 76349\nf 76349 76359 76357\nf 76350 76351 76360\nf 76351 76361 76360\nf 76351 79929 79955\nf 76351 79955 76361\nf 76352 76362 76363\nf 76352 76363 76353\nf 76353 76363 79942\nf 76353 79942 79916\nf 76354 76355 76364\nf 76355 76365 76364\nf 76355 79944 79970\nf 76355 79970 76365\nf 76356 76357 76366\nf 76356 76366 79953\nf 76356 79953 79927\nf 76357 76359 76367\nf 76357 76367 76366\nf 76358 76368 76370\nf 76358 76370 76359\nf 76359 76370 76367\nf 76360 76361 76371\nf 76361 76372 76371\nf 76361 79955 79981\nf 76361 79981 76372\nf 76362 76373 76374\nf 76362 76374 76363\nf 76363 76374 79968\nf 76363 79968 79942\nf 76364 76365 76375\nf 76365 76376 76375\nf 76365 79970 79996\nf 76365 79996 76376\nf 76366 76367 76377\nf 76366 76377 79979\nf 76366 79979 79953\nf 76367 76370 76379\nf 76367 76379 76377\nf 76368 76369 76370\nf 76369 76378 76379\nf 76369 76379 76370\nf 76371 76372 76380\nf 76372 76381 76380\nf 76372 79981 80007\nf 76372 80007 76381\nf 76373 76382 76383\nf 76373 76383 76374\nf 76374 76383 79994\nf 76374 79994 79968\nf 76375 76376 76384\nf 76376 76385 76384\nf 76376 79996 80022\nf 76376 80022 76385\nf 76377 76379 76386\nf 76377 76386 80005\nf 76377 80005 79979\nf 76378 76387 76388\nf 76378 76388 76379\nf 76379 76388 76386\nf 76380 76381 76389\nf 76381 76390 76389\nf 76381 80007 80033\nf 76381 80033 76390\nf 76382 76391 76392\nf 76382 76392 76383\nf 76383 76392 80020\nf 76383 80020 79994\nf 76384 76385 76393\nf 76385 76394 76393\nf 76385 80022 80048\nf 76385 80048 76394\nf 76386 76388 76395\nf 76386 76395 80031\nf 76386 80031 80005\nf 76387 76396 76397\nf 76387 76397 76388\nf 76388 76397 76395\nf 76389 76390 76398\nf 76390 76399 76398\nf 76390 80033 80059\nf 76390 80059 76399\nf 76391 76400 76401\nf 76391 76401 76392\nf 76392 76401 80046\nf 76392 80046 80020\nf 76393 76394 76402\nf 76394 76403 76402\nf 76394 80048 80074\nf 76394 80074 76403\nf 76395 76397 76404\nf 76395 76404 80057\nf 76395 80057 80031\nf 76396 76405 76406\nf 76396 76406 76397\nf 76397 76406 76404\nf 76398 76399 76407\nf 76399 76408 76407\nf 76399 80059 80085\nf 76399 80085 76408\nf 76400 76409 76410\nf 76400 76410 76401\nf 76401 76410 80072\nf 76401 80072 80046\nf 76402 76403 76411\nf 76403 76412 76411\nf 76403 80074 80100\nf 76403 80100 76412\nf 76404 76406 76413\nf 76404 76413 80083\nf 76404 80083 80057\nf 76405 76414 76415\nf 76405 76415 76406\nf 76406 76415 76413\nf 76407 76408 76417\nf 76408 76418 76417\nf 76408 80085 80112\nf 76408 80112 76418\nf 76409 76419 76420\nf 76409 76420 76410\nf 76410 76420 80098\nf 76410 80098 80072\nf 76411 76412 76421\nf 76412 76422 76421\nf 76412 80100 80127\nf 76412 80127 76422\nf 76413 76415 76423\nf 76413 76423 80111\nf 76413 80109 80083\nf 76413 80111 80109\nf 76414 76416 76425\nf 76414 76425 76415\nf 76415 76425 76423\nf 76416 76424 76425\nf 76417 76418 76426\nf 76418 76427 76426\nf 76418 80112 80139\nf 76418 80139 76427\nf 76419 76428 76430\nf 76419 76430 76420\nf 76420 76430 80125\nf 76420 80125 80098\nf 76421 76422 76431\nf 76422 76432 76431\nf 76422 80127 80154\nf 76422 80154 76432\nf 76423 76425 76433\nf 76423 76433 80137\nf 76423 80137 80111\nf 76424 76434 76435\nf 76424 76435 76425\nf 76425 76435 76433\nf 76426 76427 76436\nf 76427 76437 76436\nf 76427 80139 80166\nf 76427 80166 76437\nf 76428 76429 76430\nf 76429 76438 80152\nf 76429 80152 76430\nf 76430 80152 80125\nf 76431 76432 76439\nf 76432 76440 76439\nf 76432 80154 80181\nf 76432 80181 76440\nf 76433 76435 76441\nf 76433 76441 80164\nf 76433 80164 80137\nf 76434 76442 76443\nf 76434 76443 76435\nf 76435 76443 76441\nf 76436 76437 76444\nf 76437 76445 76444\nf 76437 80166 80193\nf 76437 80193 76445\nf 76438 76446 80206\nf 76438 80179 80152\nf 76438 80206 80179\nf 76439 76440 76447\nf 76440 76448 76447\nf 76440 80181 80209\nf 76440 80209 76448\nf 76441 76443 76449\nf 76441 76449 80191\nf 76441 80191 80164\nf 76442 76450 76451\nf 76442 76451 76443\nf 76443 76451 76449\nf 76444 76445 76452\nf 76445 76453 76452\nf 76445 80193 80221\nf 76445 80221 76453\nf 76446 76454 80206\nf 76447 76448 76456\nf 76448 76457 76456\nf 76448 80209 80235\nf 76448 80235 76457\nf 76449 76451 76458\nf 76449 76458 80219\nf 76449 80219 80191\nf 76450 76459 76460\nf 76450 76460 76451\nf 76451 76460 76458\nf 76452 76453 76461\nf 76453 76462 76461\nf 76453 80221 80247\nf 76453 80247 76462\nf 76454 76455 80206\nf 76454 76463 76464\nf 76454 76464 76455\nf 76455 76464 80233\nf 76455 80207 80206\nf 76455 80233 80207\nf 76456 76457 76465\nf 76457 76466 76465\nf 76457 80235 80261\nf 76457 80261 76466\nf 76458 76460 76467\nf 76458 76467 80245\nf 76458 80245 80219\nf 76459 76468 76469\nf 76459 76469 76460\nf 76460 76469 76467\nf 76461 76462 76470\nf 76462 76471 76470\nf 76462 80247 80274\nf 76462 80274 76471\nf 76463 76472 76473\nf 76463 76473 76464\nf 76464 76473 80259\nf 76464 80259 80233\nf 76465 76466 76474\nf 76466 76475 76474\nf 76466 80261 80288\nf 76466 80288 76475\nf 76467 76469 76477\nf 76467 76477 80273\nf 76467 80271 80245\nf 76467 80273 80271\nf 76468 76476 76477\nf 76468 76477 76469\nf 76470 76471 76478\nf 76471 76479 76478\nf 76471 80274 80301\nf 76471 80301 76479\nf 76472 76480 76481\nf 76472 76481 76473\nf 76473 76481 80286\nf 76473 80286 80259\nf 76474 76475 76482\nf 76475 76483 76482\nf 76475 80288 80315\nf 76475 80315 76483\nf 76476 76484 76485\nf 76476 76485 76477\nf 76477 76485 80299\nf 76477 80299 80273\nf 76478 76479 76486\nf 76479 76487 76486\nf 76479 80301 80328\nf 76479 80328 76487\nf 76480 76488 76489\nf 76480 76489 76481\nf 76481 76489 80313\nf 76481 80313 80286\nf 76482 76483 76490\nf 76483 76491 76490\nf 76483 80315 80342\nf 76483 80342 76491\nf 76484 76492 76493\nf 76484 76493 76485\nf 76485 76493 80326\nf 76485 80326 80299\nf 76486 76487 76494\nf 76487 76495 76494\nf 76487 80328 80355\nf 76487 80355 76495\nf 76488 76496 76497\nf 76488 76497 76489\nf 76489 76497 80340\nf 76489 80340 80313\nf 76490 76491 76498\nf 76491 76500 76498\nf 76491 80342 80369\nf 76491 80369 76500\nf 76492 76501 76502\nf 76492 76502 76493\nf 76493 76502 80353\nf 76493 80353 80326\nf 76494 76495 76503\nf 76495 76504 76503\nf 76495 80355 80382\nf 76495 80382 76504\nf 76496 76505 76506\nf 76496 76506 76497\nf 76497 76506 80367\nf 76497 80367 80340\nf 76498 76500 76499\nf 76499 76500 76507\nf 76500 80369 76507\nf 76501 76508 76509\nf 76501 76509 76502\nf 76502 76509 80380\nf 76502 80380 80353\nf 76503 76504 76510\nf 76504 76511 76510\nf 76504 80382 80410\nf 76504 80410 76511\nf 76505 76512 76513\nf 76505 76513 76506\nf 76506 76513 80394\nf 76506 80394 80367\nf 76507 80369 80396\nf 76507 80396 76514\nf 76508 76517 76518\nf 76508 76518 76509\nf 76509 76516 80407\nf 76509 76518 76516\nf 76509 80407 80380\nf 76510 76511 76519\nf 76511 76520 76519\nf 76511 80410 80436\nf 76511 80436 76520\nf 76512 76521 76522\nf 76512 76522 76513\nf 76513 76522 80422\nf 76513 80422 80394\nf 76514 80396 80424\nf 76514 80424 80450\nf 76514 80450 76515\nf 76515 76524 76523\nf 76515 80450 76524\nf 76516 76518 76525\nf 76516 76525 80434\nf 76516 80408 80407\nf 76516 80434 80408\nf 76517 76526 76527\nf 76517 76527 76518\nf 76518 76527 76525\nf 76519 76520 76528\nf 76520 76529 76528\nf 76520 80436 80462\nf 76520 80462 76529\nf 76521 76530 76531\nf 76521 76531 76522\nf 76522 76531 80448\nf 76522 80448 80422\nf 76523 76524 76532\nf 76524 76533 76532\nf 76524 80450 80476\nf 76524 80476 76533\nf 76525 76527 76534\nf 76525 76534 80460\nf 76525 80460 80434\nf 76526 76535 76536\nf 76526 76536 76527\nf 76527 76536 76534\nf 76528 76529 76537\nf 76529 76538 76537\nf 76529 80462 80488\nf 76529 80488 76538\nf 76530 76539 76540\nf 76530 76540 76531\nf 76531 76540 80474\nf 76531 80474 80448\nf 76532 76533 76541\nf 76533 76542 76541\nf 76533 80476 80503\nf 76533 80503 76542\nf 76534 76536 76543\nf 76534 76543 80486\nf 76534 80486 80460\nf 76535 76544 76545\nf 76535 76545 76536\nf 76536 76545 76543\nf 76537 76538 76546\nf 76538 76547 76546\nf 76538 80488 80515\nf 76538 80515 76547\nf 76539 76548 80528\nf 76539 80502 76540\nf 76539 80528 80502\nf 76540 80500 80474\nf 76540 80502 80500\nf 76541 76542 76549\nf 76542 76551 76549\nf 76542 80503 80530\nf 76542 80530 76551\nf 76543 76545 76552\nf 76543 76552 80513\nf 76543 80513 80486\nf 76544 76553 76554\nf 76544 76554 76545\nf 76545 76554 76552\nf 76546 76547 76555\nf 76547 76556 76555\nf 76547 80515 80542\nf 76547 80542 76556\nf 76548 76557 80555\nf 76548 80555 80528\nf 76549 76551 76550\nf 76550 76551 76558\nf 76551 80530 76558\nf 76552 76554 76559\nf 76552 76559 80540\nf 76552 80540 80513\nf 76553 76560 76561\nf 76553 76561 76554\nf 76554 76561 76559\nf 76555 76556 76562\nf 76556 76563 76562\nf 76556 80542 80569\nf 76556 80569 76563\nf 76557 76564 80582\nf 76557 80582 80555\nf 76558 80530 80557\nf 76558 80557 76565\nf 76559 76561 76566\nf 76559 76566 80567\nf 76559 80567 80540\nf 76560 76567 76568\nf 76560 76568 76561\nf 76561 76568 76566\nf 76562 76563 76569\nf 76563 76570 76569\nf 76563 80569 80596\nf 76563 80596 76570\nf 76564 76571 80609\nf 76564 80609 80582\nf 76565 80557 80584\nf 76565 80584 76572\nf 76566 76568 76573\nf 76566 76573 80594\nf 76566 80594 80567\nf 76567 76574 76575\nf 76567 76575 76568\nf 76568 76575 76573\nf 76569 76570 76576\nf 76570 76577 76576\nf 76570 80596 80623\nf 76570 80623 76577\nf 76571 76578 80636\nf 76571 80636 80609\nf 76572 80584 80611\nf 76572 80611 76579\nf 76573 76575 76580\nf 76573 76580 80621\nf 76573 80621 80594\nf 76574 76581 76582\nf 76574 76582 76575\nf 76575 76582 76580\nf 76576 76577 76583\nf 76577 76584 76583\nf 76577 80623 80650\nf 76577 80650 76584\nf 76578 76585 80662\nf 76578 80662 80636\nf 76579 80611 80638\nf 76579 80638 76586\nf 76580 76582 76587\nf 76580 76587 80648\nf 76580 80648 80621\nf 76581 76588 76589\nf 76581 76589 76582\nf 76582 76589 76587\nf 76583 76584 76590\nf 76584 76591 76590\nf 76584 80650 80676\nf 76584 80676 76591\nf 76585 76592 80687\nf 76585 80687 80662\nf 76586 80638 80664\nf 76586 80664 76593\nf 76587 76589 76595\nf 76587 76595 80674\nf 76587 80674 80648\nf 76588 76596 76597\nf 76588 76597 76589\nf 76589 76597 76595\nf 76590 76591 76598\nf 76591 76599 76598\nf 76591 80676 80699\nf 76591 80699 76599\nf 76592 76600 80710\nf 76592 80710 80687\nf 76593 76594 76601\nf 76593 80664 80665\nf 76593 80665 76594\nf 76594 76602 76601\nf 76594 80665 80689\nf 76594 80689 80712\nf 76594 80712 76602\nf 76595 76597 76603\nf 76595 76603 80697\nf 76595 80697 80674\nf 76596 76604 76605\nf 76596 76605 76597\nf 76597 76605 76603\nf 76598 76599 76606\nf 76599 76607 76606\nf 76599 80699 80722\nf 76599 80722 76607\nf 76600 76608 80735\nf 76600 80735 80710\nf 76601 76602 76609\nf 76602 76610 76609\nf 76602 80712 80738\nf 76602 80738 76610\nf 76603 76605 76611\nf 76603 76611 80720\nf 76603 80720 80697\nf 76604 76612 76613\nf 76604 76613 76605\nf 76605 76613 76611\nf 76606 76607 76614\nf 76607 76615 76614\nf 76607 80722 80748\nf 76607 80748 76615\nf 76608 76616 80735\nf 76609 76610 76618\nf 76610 76619 76618\nf 76610 80738 80762\nf 76610 80762 76619\nf 76611 76613 76620\nf 76611 76620 80746\nf 76611 80746 80720\nf 76612 76621 76622\nf 76612 76622 76613\nf 76613 76622 76620\nf 76614 76615 76623\nf 76615 76624 76623\nf 76615 80748 80773\nf 76615 80773 76624\nf 76616 76617 80735\nf 76616 76625 76626\nf 76616 76626 76617\nf 76617 76626 80760\nf 76617 80736 80735\nf 76617 80760 80736\nf 76618 76619 76627\nf 76619 76628 76627\nf 76619 80762 80787\nf 76619 80787 76628\nf 76620 76622 76629\nf 76620 76629 80771\nf 76620 80771 80746\nf 76621 76630 76631\nf 76621 76631 76622\nf 76622 76631 76629\nf 76623 76624 76632\nf 76624 76633 76632\nf 76624 80773 80798\nf 76624 80798 76633\nf 76625 76634 76635\nf 76625 76635 76626\nf 76626 76635 80785\nf 76626 80785 80760\nf 76627 76628 76636\nf 76628 76637 76636\nf 76628 80787 80812\nf 76628 80812 76637\nf 76629 76631 76638\nf 76629 76638 80796\nf 76629 80796 80771\nf 76630 76639 76640\nf 76630 76640 76631\nf 76631 76640 76638\nf 76632 76633 76641\nf 76633 76642 76641\nf 76633 80798 80823\nf 76633 80823 76642\nf 76634 76643 76644\nf 76634 76644 76635\nf 76635 76644 80810\nf 76635 80810 80785\nf 76636 76637 76645\nf 76637 76646 76645\nf 76637 80812 80837\nf 76637 80837 76646\nf 76638 76640 76647\nf 76638 76647 80821\nf 76638 80821 80796\nf 76639 76648 76649\nf 76639 76649 76640\nf 76640 76649 76647\nf 76641 76642 76650\nf 76642 76651 76650\nf 76642 80823 80848\nf 76642 80848 76651\nf 76643 76652 76653\nf 76643 76653 76644\nf 76644 76653 80835\nf 76644 80835 80810\nf 76645 76646 76654\nf 76646 76655 76654\nf 76646 80837 80862\nf 76646 80862 76655\nf 76647 76649 76656\nf 76647 76656 80846\nf 76647 80846 80821\nf 76648 76657 76658\nf 76648 76658 76649\nf 76649 76658 76656\nf 76650 76651 76660\nf 76651 76662 76660\nf 76651 80848 80873\nf 76651 80873 76662\nf 76652 76663 76664\nf 76652 76664 76653\nf 76653 76664 80860\nf 76653 80860 80835\nf 76654 76655 76665\nf 76655 76666 76665\nf 76655 80862 80887\nf 76655 80887 76666\nf 76656 76658 76667\nf 76656 76667 80871\nf 76656 80871 80846\nf 76657 76659 76670\nf 76657 76670 76658\nf 76658 76668 76667\nf 76658 76670 76668\nf 76659 76669 76670\nf 76660 76662 76661\nf 76661 76662 76672\nf 76661 76672 76671\nf 76662 76673 76672\nf 76662 80873 80898\nf 76662 80898 76673\nf 76663 76674 76675\nf 76663 76675 76664\nf 76664 76675 80885\nf 76664 80885 80860\nf 76665 76666 76676\nf 76666 76677 76676\nf 76666 80887 80913\nf 76666 80913 76677\nf 76667 76668 76678\nf 76667 76678 80896\nf 76667 80896 80871\nf 76668 76670 76679\nf 76668 76679 76678\nf 76669 76680 76681\nf 76669 76681 76670\nf 76670 76681 76679\nf 76671 76672 76683\nf 76672 76673 76684\nf 76672 76684 76683\nf 76673 76685 76684\nf 76673 80898 80925\nf 76673 80925 76685\nf 76674 76686 80939\nf 76674 80912 76675\nf 76674 80939 80912\nf 76675 80910 80885\nf 76675 80912 80910\nf 76676 76677 76687\nf 76677 76688 76687\nf 76677 80913 80941\nf 76677 80941 76688\nf 76678 76679 76689\nf 76678 76689 80924\nf 76678 80922 80896\nf 76678 80924 80922\nf 76679 76681 76689\nf 76680 76682 76692\nf 76680 76692 76681\nf 76681 76690 76689\nf 76681 76692 76690\nf 76682 76691 76692\nf 76683 76684 76693\nf 76684 76685 76695\nf 76684 76695 76693\nf 76685 76696 76695\nf 76685 76697 76696\nf 76685 80925 80926\nf 76685 80926 76697\nf 76686 76698 80966\nf 76686 80966 80939\nf 76687 76688 76699\nf 76688 76700 76699\nf 76688 80941 80968\nf 76688 80968 76700\nf 76689 76690 76701\nf 76689 76701 80951\nf 76689 80951 80924\nf 76690 76692 76702\nf 76690 76702 76701\nf 76691 76703 76704\nf 76691 76704 76692\nf 76692 76704 76702\nf 76693 76695 76694\nf 76694 76695 76706\nf 76694 76706 76705\nf 76695 76696 76707\nf 76695 76707 76706\nf 76696 76697 76708\nf 76696 76708 76707\nf 76697 80926 80953\nf 76697 80953 80954\nf 76697 80954 80980\nf 76697 80980 76708\nf 76698 76709 80993\nf 76698 80993 80966\nf 76699 76700 76710\nf 76700 76711 76710\nf 76700 80968 80995\nf 76700 80995 76711\nf 76701 76702 76712\nf 76701 76712 80978\nf 76701 80978 80951\nf 76702 76704 76713\nf 76702 76713 76712\nf 76703 76714 76715\nf 76703 76715 76704\nf 76704 76715 76713\nf 76705 76706 76756\nf 76706 76707 76758\nf 76706 76758 76756\nf 76707 76708 76759\nf 76707 76759 76758\nf 76708 76760 76759\nf 76708 80980 81007\nf 76708 81007 76760\nf 76709 76761 81021\nf 76709 81021 80993\nf 76710 76711 76762\nf 76711 76763 76762\nf 76711 80995 81023\nf 76711 81023 76763\nf 76712 76713 76764\nf 76712 76764 81005\nf 76712 81005 80978\nf 76713 76715 76765\nf 76713 76765 76764\nf 76714 76716 76767\nf 76714 76767 76715\nf 76715 76766 76765\nf 76715 76767 76766\nf 76716 76717 76768\nf 76716 76768 76767\nf 76717 76718 76769\nf 76717 76769 76768\nf 76718 76719 76770\nf 76718 76770 76769\nf 76719 76720 76771\nf 76719 76771 76770\nf 76720 76721 76772\nf 76720 76772 76771\nf 76721 76722 76773\nf 76721 76773 76772\nf 76722 76723 76774\nf 76722 76774 76773\nf 76723 76724 76775\nf 76723 76775 76774\nf 76724 76725 76776\nf 76724 76776 76775\nf 76725 76726 76777\nf 76725 76777 76776\nf 76726 76727 76778\nf 76726 76778 76777\nf 76727 76728 76780\nf 76727 76780 76778\nf 76728 76779 76780\nf 76729 76730 76808\nf 76729 76807 76805\nf 76729 76808 76807\nf 76730 76731 76809\nf 76730 76809 76808\nf 76731 76732 76810\nf 76731 76810 76809\nf 76732 76733 76811\nf 76732 76811 76810\nf 76733 76734 76812\nf 76733 76812 76811\nf 76734 76735 76813\nf 76734 76813 76812\nf 76735 76736 76814\nf 76735 76814 76813\nf 76736 76737 76815\nf 76736 76815 76814\nf 76737 76738 76816\nf 76737 76816 76815\nf 76738 76739 76817\nf 76738 76817 76816\nf 76739 76740 76818\nf 76739 76818 76817\nf 76740 76741 76819\nf 76740 76819 76818\nf 76741 76742 76820\nf 76741 76820 76819\nf 76742 76743 76821\nf 76742 76821 76820\nf 76743 76744 76822\nf 76743 76822 76821\nf 76744 76745 76823\nf 76744 76823 76822\nf 76745 76746 76824\nf 76745 76824 76823\nf 76746 76747 76825\nf 76746 76825 76824\nf 76747 76748 76827\nf 76747 76827 76825\nf 76748 76826 76827\nf 76749 76750 76836\nf 76749 76835 76833\nf 76749 76836 76835\nf 76750 76751 76837\nf 76750 76837 76836\nf 76751 76752 76838\nf 76751 76838 76837\nf 76752 76753 76839\nf 76752 76839 76838\nf 76753 76754 76841\nf 76753 76841 76839\nf 76754 76840 76841\nf 76755 76757 76847\nf 76755 76846 76844\nf 76755 76847 76846\nf 76756 76758 76757\nf 76757 76758 76847\nf 76758 76759 76848\nf 76758 76848 76847\nf 76759 76760 76849\nf 76759 76849 76848\nf 76760 81007 81008\nf 76760 81008 81035\nf 76760 81035 76849\nf 76761 76850 81049\nf 76761 81049 81021\nf 76762 76763 76851\nf 76763 76852 76851\nf 76763 81023 81052\nf 76763 81052 76852\nf 76764 76765 76853\nf 76764 76853 81033\nf 76764 81033 81005\nf 76765 76766 76854\nf 76765 76854 76853\nf 76766 76767 76855\nf 76766 76855 76854\nf 76767 76768 76856\nf 76767 76856 76855\nf 76768 76769 76857\nf 76768 76857 76856\nf 76769 76770 76858\nf 76769 76858 76857\nf 76770 76771 76859\nf 76770 76859 76858\nf 76771 76772 76860\nf 76771 76860 76859\nf 76772 76773 76861\nf 76772 76861 76860\nf 76773 76774 76862\nf 76773 76862 76861\nf 76774 76775 76863\nf 76774 76863 76862\nf 76775 76776 76864\nf 76775 76864 76863\nf 76776 76777 76865\nf 76776 76865 76864\nf 76777 76778 76866\nf 76777 76866 76865\nf 76778 76780 76867\nf 76778 76867 76866\nf 76779 76781 76869\nf 76779 76869 76780\nf 76780 76868 76867\nf 76780 76869 76868\nf 76781 76782 76870\nf 76781 76870 76869\nf 76782 76783 76871\nf 76782 76871 76870\nf 76783 76784 76872\nf 76783 76872 76871\nf 76784 76785 76873\nf 76784 76873 76872\nf 76785 76786 76874\nf 76785 76874 76873\nf 76786 76787 76875\nf 76786 76875 76874\nf 76787 76788 76876\nf 76787 76876 76875\nf 76788 76789 76877\nf 76788 76877 76876\nf 76789 76790 76878\nf 76789 76878 76877\nf 76790 76791 76879\nf 76790 76879 76878\nf 76791 76792 76880\nf 76791 76880 76879\nf 76792 76793 76881\nf 76792 76881 76880\nf 76793 76794 76882\nf 76793 76882 76881\nf 76794 76795 76883\nf 76794 76883 76882\nf 76795 76796 76884\nf 76795 76884 76883\nf 76796 76797 76885\nf 76796 76885 76884\nf 76797 76798 76886\nf 76797 76886 76885\nf 76798 76799 76887\nf 76798 76887 76886\nf 76799 76800 76888\nf 76799 76888 76887\nf 76800 76801 76889\nf 76800 76889 76888\nf 76801 76802 76890\nf 76801 76890 76889\nf 76802 76803 76891\nf 76802 76891 76890\nf 76803 76804 76892\nf 76803 76892 76891\nf 76804 76806 76893\nf 76804 76893 76892\nf 76805 76807 76806\nf 76806 76807 76893\nf 76807 76808 76894\nf 76807 76894 76893\nf 76808 76809 76895\nf 76808 76895 76894\nf 76809 76810 76896\nf 76809 76896 76895\nf 76810 76811 76897\nf 76810 76897 76896\nf 76811 76812 76898\nf 76811 76898 76897\nf 76812 76813 76899\nf 76812 76899 76898\nf 76813 76814 76900\nf 76813 76900 76899\nf 76814 76815 76901\nf 76814 76901 76900\nf 76815 76816 76902\nf 76815 76902 76901\nf 76816 76817 76903\nf 76816 76903 76902\nf 76817 76818 76904\nf 76817 76904 76903\nf 76818 76819 76905\nf 76818 76905 76904\nf 76819 76820 76906\nf 76819 76906 76905\nf 76820 76821 76907\nf 76820 76907 76906\nf 76821 76822 76908\nf 76821 76908 76907\nf 76822 76823 76909\nf 76822 76909 76908\nf 76823 76824 76910\nf 76823 76910 76909\nf 76824 76825 76911\nf 76824 76911 76910\nf 76825 76827 76912\nf 76825 76912 76911\nf 76826 76828 76914\nf 76826 76914 76827\nf 76827 76913 76912\nf 76827 76914 76913\nf 76828 76829 76915\nf 76828 76915 76914\nf 76829 76830 76916\nf 76829 76916 76915\nf 76830 76831 76917\nf 76830 76917 76916\nf 76831 76832 76918\nf 76831 76918 76917\nf 76832 76834 76919\nf 76832 76919 76918\nf 76833 76835 76834\nf 76834 76835 76919\nf 76835 76836 76920\nf 76835 76920 76919\nf 76836 76837 76921\nf 76836 76921 76920\nf 76837 76838 76922\nf 76837 76922 76921\nf 76838 76839 76923\nf 76838 76923 76922\nf 76839 76841 76924\nf 76839 76924 76923\nf 76840 76842 76926\nf 76840 76926 76841\nf 76841 76925 76924\nf 76841 76926 76925\nf 76842 76843 76927\nf 76842 76927 76926\nf 76843 76845 76928\nf 76843 76928 76927\nf 76844 76846 76845\nf 76845 76846 76928\nf 76846 76847 76929\nf 76846 76929 76928\nf 76847 76848 76930\nf 76847 76930 76929\nf 76848 76849 76931\nf 76848 76931 76930\nf 76849 76932 76931\nf 76849 81035 81064\nf 76849 81064 76932\nf 76850 76933 81049\nf 76851 76852 76935\nf 76852 76936 76935\nf 76852 81052 81080\nf 76852 81080 76936\nf 76853 76854 76937\nf 76853 76937 81062\nf 76853 81062 81033\nf 76854 76855 76938\nf 76854 76938 76937\nf 76855 76856 76939\nf 76855 76939 76938\nf 76856 76857 76940\nf 76856 76940 76939\nf 76857 76858 76941\nf 76857 76941 76940\nf 76858 76859 76942\nf 76858 76942 76941\nf 76859 76860 76943\nf 76859 76943 76942\nf 76860 76861 76944\nf 76860 76944 76943\nf 76861 76862 76945\nf 76861 76945 76944\nf 76862 76863 76946\nf 76862 76946 76945\nf 76863 76864 76947\nf 76863 76947 76946\nf 76864 76865 76948\nf 76864 76948 76947\nf 76865 76866 76949\nf 76865 76949 76948\nf 76866 76867 76950\nf 76866 76950 76949\nf 76867 76868 76951\nf 76867 76951 76950\nf 76868 76869 76952\nf 76868 76952 76951\nf 76869 76870 76953\nf 76869 76953 76952\nf 76870 76871 76954\nf 76870 76954 76953\nf 76871 76872 76955\nf 76871 76955 76954\nf 76872 76873 76956\nf 76872 76956 76955\nf 76873 76874 76957\nf 76873 76957 76956\nf 76874 76875 76958\nf 76874 76958 76957\nf 76875 76876 76959\nf 76875 76959 76958\nf 76876 76877 76960\nf 76876 76960 76959\nf 76877 76878 76961\nf 76877 76961 76960\nf 76878 76879 76962\nf 76878 76962 76961\nf 76879 76880 76963\nf 76879 76963 76962\nf 76880 76881 76964\nf 76880 76964 76963\nf 76881 76882 76965\nf 76881 76965 76964\nf 76882 76883 76966\nf 76882 76966 76965\nf 76883 76884 76967\nf 76883 76967 76966\nf 76884 76885 76968\nf 76884 76968 76967\nf 76885 76886 76969\nf 76885 76969 76968\nf 76886 76887 76970\nf 76886 76970 76969\nf 76887 76888 76971\nf 76887 76971 76970\nf 76888 76889 76972\nf 76888 76972 76971\nf 76889 76890 76973\nf 76889 76973 76972\nf 76890 76891 76974\nf 76890 76974 76973\nf 76891 76892 76975\nf 76891 76975 76974\nf 76892 76893 76976\nf 76892 76976 76975\nf 76893 76894 76977\nf 76893 76977 76976\nf 76894 76895 76978\nf 76894 76978 76977\nf 76895 76896 76979\nf 76895 76979 76978\nf 76896 76897 76980\nf 76896 76980 76979\nf 76897 76898 76981\nf 76897 76981 76980\nf 76898 76899 76982\nf 76898 76982 76981\nf 76899 76900 76983\nf 76899 76983 76982\nf 76900 76901 76984\nf 76900 76984 76983\nf 76901 76902 76985\nf 76901 76985 76984\nf 76902 76903 76986\nf 76902 76986 76985\nf 76903 76904 76987\nf 76903 76987 76986\nf 76904 76905 76988\nf 76904 76988 76987\nf 76905 76906 76989\nf 76905 76989 76988\nf 76906 76907 76990\nf 76906 76990 76989\nf 76907 76908 76991\nf 76907 76991 76990\nf 76908 76909 76992\nf 76908 76992 76991\nf 76909 76910 76993\nf 76909 76993 76992\nf 76910 76911 76994\nf 76910 76994 76993\nf 76911 76912 76995\nf 76911 76995 76994\nf 76912 76913 76996\nf 76912 76996 76995\nf 76913 76914 76997\nf 76913 76997 76996\nf 76914 76915 76998\nf 76914 76998 76997\nf 76915 76916 76999\nf 76915 76999 76998\nf 76916 76917 77000\nf 76916 77000 76999\nf 76917 76918 77001\nf 76917 77001 77000\nf 76918 76919 77002\nf 76918 77002 77001\nf 76919 76920 77003\nf 76919 77003 77002\nf 76920 76921 77004\nf 76920 77004 77003\nf 76921 76922 77005\nf 76921 77005 77004\nf 76922 76923 77006\nf 76922 77006 77005\nf 76923 76924 77007\nf 76923 77007 77006\nf 76924 76925 77008\nf 76924 77008 77007\nf 76925 76926 77009\nf 76925 77009 77008\nf 76926 76927 77010\nf 76926 77010 77009\nf 76927 76928 77011\nf 76927 77011 77010\nf 76928 76929 77012\nf 76928 77012 77011\nf 76929 76930 77013\nf 76929 77013 77012\nf 76930 76931 77014\nf 76930 77014 77013\nf 76931 76932 77015\nf 76931 77015 77014\nf 76932 77016 77015\nf 76932 77017 77016\nf 76932 81064 81065\nf 76932 81065 77017\nf 76933 76934 81049\nf 76933 77018 77020\nf 76933 77020 76934\nf 76934 77020 81078\nf 76934 81050 81049\nf 76934 81078 81050\nf 76935 76936 77021\nf 76936 77022 77021\nf 76936 81080 81107\nf 76936 81107 77022\nf 76937 76938 77023\nf 76937 77023 81090\nf 76937 81090 81062\nf 76938 76939 77024\nf 76938 77024 77023\nf 76939 76940 77025\nf 76939 77025 77024\nf 76940 76941 77026\nf 76940 77026 77025\nf 76941 76942 77027\nf 76941 77027 77026\nf 76942 76943 77028\nf 76942 77028 77027\nf 76943 76944 77029\nf 76943 77029 77028\nf 76944 76945 77030\nf 76944 77030 77029\nf 76945 76946 77031\nf 76945 77031 77030\nf 76946 76947 77032\nf 76946 77032 77031\nf 76947 76948 77033\nf 76947 77033 77032\nf 76948 76949 77034\nf 76948 77034 77033\nf 76949 76950 77035\nf 76949 77035 77034\nf 76950 76951 77036\nf 76950 77036 77035\nf 76951 76952 77037\nf 76951 77037 77036\nf 76952 76953 77038\nf 76952 77038 77037\nf 76953 76954 77039\nf 76953 77039 77038\nf 76954 76955 77040\nf 76954 77040 77039\nf 76955 76956 77041\nf 76955 77041 77040\nf 76956 76957 77042\nf 76956 77042 77041\nf 76957 76958 77043\nf 76957 77043 77042\nf 76958 76959 77044\nf 76958 77044 77043\nf 76959 76960 77045\nf 76959 77045 77044\nf 76960 76961 77046\nf 76960 77046 77045\nf 76961 76962 77047\nf 76961 77047 77046\nf 76962 76963 77048\nf 76962 77048 77047\nf 76963 76964 77049\nf 76963 77049 77048\nf 76964 76965 77050\nf 76964 77050 77049\nf 76965 76966 77051\nf 76965 77051 77050\nf 76966 76967 77052\nf 76966 77052 77051\nf 76967 76968 77053\nf 76967 77053 77052\nf 76968 76969 77054\nf 76968 77054 77053\nf 76969 76970 77055\nf 76969 77055 77054\nf 76970 76971 77056\nf 76970 77056 77055\nf 76971 76972 77057\nf 76971 77057 77056\nf 76972 76973 77058\nf 76972 77058 77057\nf 76973 76974 77059\nf 76973 77059 77058\nf 76974 76975 77060\nf 76974 77060 77059\nf 76975 76976 77061\nf 76975 77061 77060\nf 76976 76977 77062\nf 76976 77062 77061\nf 76977 76978 77063\nf 76977 77063 77062\nf 76978 76979 77064\nf 76978 77064 77063\nf 76979 76980 77065\nf 76979 77065 77064\nf 76980 76981 77066\nf 76980 77066 77065\nf 76981 76982 77067\nf 76981 77067 77066\nf 76982 76983 77068\nf 76982 77068 77067\nf 76983 76984 77069\nf 76983 77069 77068\nf 76984 76985 77070\nf 76984 77070 77069\nf 76985 76986 77071\nf 76985 77071 77070\nf 76986 76987 77072\nf 76986 77072 77071\nf 76987 76988 77073\nf 76987 77073 77072\nf 76988 76989 77074\nf 76988 77074 77073\nf 76989 76990 77075\nf 76989 77075 77074\nf 76990 76991 77076\nf 76990 77076 77075\nf 76991 76992 77077\nf 76991 77077 77076\nf 76992 76993 77078\nf 76992 77078 77077\nf 76993 76994 77079\nf 76993 77079 77078\nf 76994 76995 77080\nf 76994 77080 77079\nf 76995 76996 77081\nf 76995 77081 77080\nf 76996 76997 77082\nf 76996 77082 77081\nf 76997 76998 77083\nf 76997 77083 77082\nf 76998 76999 77084\nf 76998 77084 77083\nf 76999 77000 77085\nf 76999 77085 77084\nf 77000 77001 77086\nf 77000 77086 77085\nf 77001 77002 77087\nf 77001 77087 77086\nf 77002 77003 77088\nf 77002 77088 77087\nf 77003 77004 77089\nf 77003 77089 77088\nf 77004 77005 77090\nf 77004 77090 77089\nf 77005 77006 77091\nf 77005 77091 77090\nf 77006 77007 77092\nf 77006 77092 77091\nf 77007 77008 77093\nf 77007 77093 77092\nf 77008 77009 77094\nf 77008 77094 77093\nf 77009 77010 77095\nf 77009 77095 77094\nf 77010 77011 77096\nf 77010 77096 77095\nf 77011 77012 77097\nf 77011 77097 77096\nf 77012 77013 77098\nf 77012 77098 77097\nf 77013 77014 77099\nf 77013 77099 77098\nf 77014 77015 77100\nf 77014 77100 77099\nf 77015 77016 77101\nf 77015 77101 77100\nf 77016 77017 77102\nf 77016 77102 77101\nf 77017 77103 77102\nf 77017 77104 77103\nf 77017 81065 81092\nf 77017 81092 81093\nf 77017 81093 77104\nf 77018 77019 77020\nf 77019 77105 81105\nf 77019 81105 77020\nf 77020 81105 81078\nf 77021 77022 77106\nf 77022 77107 77106\nf 77022 81107 81138\nf 77022 81138 77107\nf 77023 77024 77108\nf 77023 77108 81117\nf 77023 81117 81090\nf 77024 77025 77109\nf 77024 77109 77108\nf 77025 77026 77110\nf 77025 77110 77109\nf 77026 77027 77111\nf 77026 77111 77110\nf 77027 77028 77112\nf 77027 77112 77111\nf 77028 77029 77113\nf 77028 77113 77112\nf 77029 77030 77114\nf 77029 77114 77113\nf 77030 77031 77115\nf 77030 77115 77114\nf 77031 77032 77116\nf 77031 77116 77115\nf 77032 77033 77117\nf 77032 77117 77116\nf 77033 77034 77118\nf 77033 77118 77117\nf 77034 77035 77119\nf 77034 77119 77118\nf 77035 77036 77120\nf 77035 77120 77119\nf 77036 77037 77121\nf 77036 77121 77120\nf 77037 77038 77122\nf 77037 77122 77121\nf 77038 77039 77123\nf 77038 77123 77122\nf 77039 77040 77124\nf 77039 77124 77123\nf 77040 77041 77125\nf 77040 77125 77124\nf 77041 77042 77126\nf 77041 77126 77125\nf 77042 77043 77127\nf 77042 77127 77126\nf 77043 77044 77128\nf 77043 77128 77127\nf 77044 77045 77129\nf 77044 77129 77128\nf 77045 77046 77130\nf 77045 77130 77129\nf 77046 77047 77131\nf 77046 77131 77130\nf 77047 77048 77132\nf 77047 77132 77131\nf 77048 77049 77133\nf 77048 77133 77132\nf 77049 77050 77134\nf 77049 77134 77133\nf 77050 77051 77135\nf 77050 77135 77134\nf 77051 77052 77136\nf 77051 77136 77135\nf 77052 77053 77137\nf 77052 77137 77136\nf 77053 77054 77138\nf 77053 77138 77137\nf 77054 77055 77139\nf 77054 77139 77138\nf 77055 77056 77140\nf 77055 77140 77139\nf 77056 77057 77141\nf 77056 77141 77140\nf 77057 77058 77142\nf 77057 77142 77141\nf 77058 77059 77143\nf 77058 77143 77142\nf 77059 77060 77144\nf 77059 77144 77143\nf 77060 77061 77145\nf 77060 77145 77144\nf 77061 77062 77146\nf 77061 77146 77145\nf 77062 77063 77147\nf 77062 77147 77146\nf 77063 77064 77148\nf 77063 77148 77147\nf 77064 77065 77149\nf 77064 77149 77148\nf 77065 77066 77150\nf 77065 77150 77149\nf 77066 77067 77151\nf 77066 77151 77150\nf 77067 77068 77152\nf 77067 77152 77151\nf 77068 77069 77153\nf 77068 77153 77152\nf 77069 77070 77154\nf 77069 77154 77153\nf 77070 77071 77155\nf 77070 77155 77154\nf 77071 77072 77156\nf 77071 77156 77155\nf 77072 77073 77157\nf 77072 77157 77156\nf 77073 77074 77158\nf 77073 77158 77157\nf 77074 77075 77159\nf 77074 77159 77158\nf 77075 77076 77160\nf 77075 77160 77159\nf 77076 77077 77161\nf 77076 77161 77160\nf 77077 77078 77162\nf 77077 77162 77161\nf 77078 77079 77163\nf 77078 77163 77162\nf 77079 77080 77164\nf 77079 77164 77163\nf 77080 77081 77165\nf 77080 77165 77164\nf 77081 77082 77166\nf 77081 77166 77165\nf 77082 77083 77167\nf 77082 77167 77166\nf 77083 77084 77168\nf 77083 77168 77167\nf 77084 77085 77169\nf 77084 77169 77168\nf 77085 77086 77170\nf 77085 77170 77169\nf 77086 77087 77171\nf 77086 77171 77170\nf 77087 77088 77172\nf 77087 77172 77171\nf 77088 77089 77173\nf 77088 77173 77172\nf 77089 77090 77174\nf 77089 77174 77173\nf 77090 77091 77175\nf 77090 77175 77174\nf 77091 77092 77176\nf 77091 77176 77175\nf 77092 77093 77177\nf 77092 77177 77176\nf 77093 77094 77178\nf 77093 77178 77177\nf 77094 77095 77179\nf 77094 77179 77178\nf 77095 77096 77180\nf 77095 77180 77179\nf 77096 77097 77181\nf 77096 77181 77180\nf 77097 77098 77182\nf 77097 77182 77181\nf 77098 77099 77183\nf 77098 77183 77182\nf 77099 77100 77184\nf 77099 77184 77183\nf 77100 77101 77185\nf 77100 77185 77184\nf 77101 77102 77186\nf 77101 77186 77185\nf 77102 77103 77187\nf 77102 77187 77186\nf 77103 77104 77188\nf 77103 77188 77187\nf 77104 77189 77188\nf 77104 77190 77189\nf 77104 81093 81119\nf 77104 81119 81120\nf 77104 81120 77190\nf 77105 77195 81135\nf 77105 81135 81105\nf 77106 77107 77197\nf 77107 77198 77197\nf 77107 77199 77198\nf 77107 81138 81139\nf 77107 81139 77199\nf 77108 77109 77200\nf 77108 77200 81149\nf 77108 81149 81117\nf 77109 77110 77201\nf 77109 77201 77200\nf 77110 77111 77202\nf 77110 77202 77201\nf 77111 77112 77203\nf 77111 77203 77202\nf 77112 77113 77204\nf 77112 77204 77203\nf 77113 77114 77205\nf 77113 77205 77204\nf 77114 77115 77206\nf 77114 77206 77205\nf 77115 77116 77207\nf 77115 77207 77206\nf 77116 77117 77208\nf 77116 77208 77207\nf 77117 77118 77209\nf 77117 77209 77208\nf 77118 77119 77210\nf 77118 77210 77209\nf 77119 77120 77211\nf 77119 77211 77210\nf 77120 77121 77212\nf 77120 77212 77211\nf 77121 77122 77213\nf 77121 77213 77212\nf 77122 77123 77214\nf 77122 77214 77213\nf 77123 77124 77215\nf 77123 77215 77214\nf 77124 77125 77216\nf 77124 77216 77215\nf 77125 77126 77217\nf 77125 77217 77216\nf 77126 77127 77218\nf 77126 77218 77217\nf 77127 77128 77219\nf 77127 77219 77218\nf 77128 77129 77220\nf 77128 77220 77219\nf 77129 77130 77221\nf 77129 77221 77220\nf 77130 77131 77222\nf 77130 77222 77221\nf 77131 77132 77223\nf 77131 77223 77222\nf 77132 77133 77224\nf 77132 77224 77223\nf 77133 77134 77225\nf 77133 77225 77224\nf 77134 77135 77226\nf 77134 77226 77225\nf 77135 77136 77227\nf 77135 77227 77226\nf 77136 77137 77228\nf 77136 77228 77227\nf 77137 77138 77229\nf 77137 77229 77228\nf 77138 77139 77230\nf 77138 77230 77229\nf 77139 77140 77231\nf 77139 77231 77230\nf 77140 77141 77232\nf 77140 77232 77231\nf 77141 77142 77233\nf 77141 77233 77232\nf 77142 77143 77234\nf 77142 77234 77233\nf 77143 77144 77235\nf 77143 77235 77234\nf 77144 77145 77236\nf 77144 77236 77235\nf 77145 77146 77237\nf 77145 77237 77236\nf 77146 77147 77238\nf 77146 77238 77237\nf 77147 77148 77239\nf 77147 77239 77238\nf 77148 77149 77240\nf 77148 77240 77239\nf 77149 77150 77241\nf 77149 77241 77240\nf 77150 77151 77242\nf 77150 77242 77241\nf 77151 77152 77243\nf 77151 77243 77242\nf 77152 77153 77244\nf 77152 77244 77243\nf 77153 77154 77245\nf 77153 77245 77244\nf 77154 77155 77246\nf 77154 77246 77245\nf 77155 77156 77247\nf 77155 77247 77246\nf 77156 77157 77248\nf 77156 77248 77247\nf 77157 77158 77249\nf 77157 77249 77248\nf 77158 77159 77250\nf 77158 77250 77249\nf 77159 77160 77251\nf 77159 77251 77250\nf 77160 77161 77252\nf 77160 77252 77251\nf 77161 77162 77253\nf 77161 77253 77252\nf 77162 77163 77254\nf 77162 77254 77253\nf 77163 77164 77255\nf 77163 77255 77254\nf 77164 77165 77256\nf 77164 77256 77255\nf 77165 77166 77257\nf 77165 77257 77256\nf 77166 77167 77258\nf 77166 77258 77257\nf 77167 77168 77259\nf 77167 77259 77258\nf 77168 77169 77260\nf 77168 77260 77259\nf 77169 77170 77261\nf 77169 77261 77260\nf 77170 77171 77262\nf 77170 77262 77261\nf 77171 77172 77263\nf 77171 77263 77262\nf 77172 77173 77264\nf 77172 77264 77263\nf 77173 77174 77265\nf 77173 77265 77264\nf 77174 77175 77266\nf 77174 77266 77265\nf 77175 77176 77267\nf 77175 77267 77266\nf 77176 77177 77268\nf 77176 77268 77267\nf 77177 77178 77269\nf 77177 77269 77268\nf 77178 77179 77270\nf 77178 77270 77269\nf 77179 77180 77271\nf 77179 77271 77270\nf 77180 77181 77272\nf 77180 77272 77271\nf 77181 77182 77273\nf 77181 77273 77272\nf 77182 77183 77274\nf 77182 77274 77273\nf 77183 77184 77275\nf 77183 77275 77274\nf 77184 77185 77276\nf 77184 77276 77275\nf 77185 77186 77277\nf 77185 77277 77276\nf 77186 77187 77278\nf 77186 77278 77277\nf 77187 77188 77279\nf 77187 77279 77278\nf 77188 77189 77280\nf 77188 77280 77279\nf 77189 77190 77281\nf 77189 77281 77280\nf 77190 77191 77282\nf 77190 77282 77281\nf 77190 81120 81122\nf 77190 81122 77191\nf 77191 77192 77283\nf 77191 77283 77282\nf 77191 81122 81124\nf 77191 81124 77192\nf 77192 77193 77284\nf 77192 77284 77283\nf 77192 81124 81126\nf 77192 81126 77193\nf 77193 77194 77285\nf 77193 77285 77284\nf 77193 81126 81128\nf 77193 81128 77194\nf 77194 77286 77285\nf 77194 77287 77286\nf 77194 81128 81151\nf 77194 81151 81152\nf 77194 81152 77287\nf 77195 77196 81135\nf 77195 77290 77291\nf 77195 77291 77196\nf 77196 77291 81159\nf 77196 81136 81135\nf 77196 81159 81136\nf 77197 77198 77292\nf 77198 77199 77293\nf 77198 77293 77292\nf 77199 77294 77293\nf 77199 81139 81161\nf 77199 81161 81177\nf 77199 81177 77294\nf 77200 77201 77295\nf 77200 77295 81170\nf 77200 81170 81149\nf 77201 77202 77296\nf 77201 77296 77295\nf 77202 77203 77297\nf 77202 77297 77296\nf 77203 77204 77298\nf 77203 77298 77297\nf 77204 77205 77299\nf 77204 77299 77298\nf 77205 77206 77300\nf 77205 77300 77299\nf 77206 77207 77301\nf 77206 77301 77300\nf 77207 77208 77302\nf 77207 77302 77301\nf 77208 77209 77303\nf 77208 77303 77302\nf 77209 77210 77304\nf 77209 77304 77303\nf 77210 77211 77305\nf 77210 77305 77304\nf 77211 77212 77306\nf 77211 77306 77305\nf 77212 77213 77307\nf 77212 77307 77306\nf 77213 77214 77308\nf 77213 77308 77307\nf 77214 77215 77309\nf 77214 77309 77308\nf 77215 77216 77310\nf 77215 77310 77309\nf 77216 77217 77311\nf 77216 77311 77310\nf 77217 77218 77312\nf 77217 77312 77311\nf 77218 77219 77313\nf 77218 77313 77312\nf 77219 77220 77314\nf 77219 77314 77313\nf 77220 77221 77315\nf 77220 77315 77314\nf 77221 77222 77316\nf 77221 77316 77315\nf 77222 77223 77317\nf 77222 77317 77316\nf 77223 77224 77318\nf 77223 77318 77317\nf 77224 77225 77319\nf 77224 77319 77318\nf 77225 77226 77320\nf 77225 77320 77319\nf 77226 77227 77321\nf 77226 77321 77320\nf 77227 77228 77322\nf 77227 77322 77321\nf 77228 77229 77323\nf 77228 77323 77322\nf 77229 77230 77324\nf 77229 77324 77323\nf 77230 77231 77325\nf 77230 77325 77324\nf 77231 77232 77326\nf 77231 77326 77325\nf 77232 77233 77327\nf 77232 77327 77326\nf 77233 77234 77328\nf 77233 77328 77327\nf 77234 77235 77329\nf 77234 77329 77328\nf 77235 77236 77330\nf 77235 77330 77329\nf 77236 77237 77331\nf 77236 77331 77330\nf 77237 77238 77332\nf 77237 77332 77331\nf 77238 77239 77333\nf 77238 77333 77332\nf 77239 77240 77334\nf 77239 77334 77333\nf 77240 77241 77335\nf 77240 77335 77334\nf 77241 77242 77336\nf 77241 77336 77335\nf 77242 77243 77337\nf 77242 77337 77336\nf 77243 77244 77338\nf 77243 77338 77337\nf 77244 77245 77339\nf 77244 77339 77338\nf 77245 77246 77340\nf 77245 77340 77339\nf 77246 77247 77341\nf 77246 77341 77340\nf 77247 77248 77342\nf 77247 77342 77341\nf 77248 77249 77343\nf 77248 77343 77342\nf 77249 77250 77344\nf 77249 77344 77343\nf 77250 77251 77345\nf 77250 77345 77344\nf 77251 77252 77346\nf 77251 77346 77345\nf 77252 77253 77347\nf 77252 77347 77346\nf 77253 77254 77348\nf 77253 77348 77347\nf 77254 77255 77349\nf 77254 77349 77348\nf 77255 77256 77350\nf 77255 77350 77349\nf 77256 77257 77351\nf 77256 77351 77350\nf 77257 77258 77352\nf 77257 77352 77351\nf 77258 77259 77353\nf 77258 77353 77352\nf 77259 77260 77354\nf 77259 77354 77353\nf 77260 77261 77355\nf 77260 77355 77354\nf 77261 77262 77356\nf 77261 77356 77355\nf 77262 77263 77357\nf 77262 77357 77356\nf 77263 77264 77358\nf 77263 77358 77357\nf 77264 77265 77359\nf 77264 77359 77358\nf 77265 77266 77360\nf 77265 77360 77359\nf 77266 77267 77361\nf 77266 77361 77360\nf 77267 77268 77362\nf 77267 77362 77361\nf 77268 77269 77363\nf 77268 77363 77362\nf 77269 77270 77364\nf 77269 77364 77363\nf 77270 77271 77365\nf 77270 77365 77364\nf 77271 77272 77366\nf 77271 77366 77365\nf 77272 77273 77367\nf 77272 77367 77366\nf 77273 77274 77368\nf 77273 77368 77367\nf 77274 77275 77369\nf 77274 77369 77368\nf 77275 77276 77370\nf 77275 77370 77369\nf 77276 77277 77371\nf 77276 77371 77370\nf 77277 77278 77372\nf 77277 77372 77371\nf 77278 77279 77373\nf 77278 77373 77372\nf 77279 77280 77374\nf 77279 77374 77373\nf 77280 77281 77375\nf 77280 77375 77374\nf 77281 77282 77376\nf 77281 77376 77375\nf 77282 77283 77377\nf 77282 77377 77376\nf 77283 77284 77378\nf 77283 77378 77377\nf 77284 77285 77379\nf 77284 77379 77378\nf 77285 77286 77380\nf 77285 77380 77379\nf 77286 77287 77381\nf 77286 77381 77380\nf 77287 77288 77382\nf 77287 77382 77381\nf 77287 81152 81154\nf 77287 81154 77288\nf 77288 77289 77383\nf 77288 77383 77382\nf 77288 81154 81156\nf 77288 81156 77289\nf 77289 77384 77383\nf 77289 81156 81172\nf 77289 81172 81189\nf 77289 81189 77384\nf 77290 77386 77387\nf 77290 77387 77291\nf 77291 77385 81174\nf 77291 77387 77385\nf 77291 81174 81159\nf 77292 77293 77388\nf 77293 77294 77389\nf 77293 77389 77388\nf 77294 77390 77389\nf 77294 81177 81192\nf 77294 81192 77390\nf 77295 77296 77392\nf 77295 77391 81186\nf 77295 77392 77391\nf 77295 81186 81170\nf 77296 77297 77393\nf 77296 77393 77392\nf 77297 77298 77394\nf 77297 77394 77393\nf 77298 77299 77395\nf 77298 77395 77394\nf 77299 77300 77396\nf 77299 77396 77395\nf 77300 77301 77397\nf 77300 77397 77396\nf 77301 77302 77398\nf 77301 77398 77397\nf 77302 77303 77399\nf 77302 77399 77398\nf 77303 77304 77400\nf 77303 77400 77399\nf 77304 77305 77401\nf 77304 77401 77400\nf 77305 77306 77402\nf 77305 77402 77401\nf 77306 77307 77403\nf 77306 77403 77402\nf 77307 77308 77404\nf 77307 77404 77403\nf 77308 77309 77405\nf 77308 77405 77404\nf 77309 77310 77406\nf 77309 77406 77405\nf 77310 77311 77407\nf 77310 77407 77406\nf 77311 77312 77408\nf 77311 77408 77407\nf 77312 77313 77409\nf 77312 77409 77408\nf 77313 77314 77410\nf 77313 77410 77409\nf 77314 77315 77411\nf 77314 77411 77410\nf 77315 77316 77412\nf 77315 77412 77411\nf 77316 77317 77413\nf 77316 77413 77412\nf 77317 77318 77414\nf 77317 77414 77413\nf 77318 77319 77415\nf 77318 77415 77414\nf 77319 77320 77416\nf 77319 77416 77415\nf 77320 77321 77417\nf 77320 77417 77416\nf 77321 77322 77418\nf 77321 77418 77417\nf 77322 77323 77419\nf 77322 77419 77418\nf 77323 77324 77420\nf 77323 77420 77419\nf 77324 77325 77421\nf 77324 77421 77420\nf 77325 77326 77422\nf 77325 77422 77421\nf 77326 77327 77423\nf 77326 77423 77422\nf 77327 77328 77424\nf 77327 77424 77423\nf 77328 77329 77425\nf 77328 77425 77424\nf 77329 77330 77426\nf 77329 77426 77425\nf 77330 77331 77427\nf 77330 77427 77426\nf 77331 77332 77428\nf 77331 77428 77427\nf 77332 77333 77429\nf 77332 77429 77428\nf 77333 77334 77430\nf 77333 77430 77429\nf 77334 77335 77431\nf 77334 77431 77430\nf 77335 77336 77432\nf 77335 77432 77431\nf 77336 77337 77433\nf 77336 77433 77432\nf 77337 77338 77434\nf 77337 77434 77433\nf 77338 77339 77435\nf 77338 77435 77434\nf 77339 77340 77436\nf 77339 77436 77435\nf 77340 77341 77437\nf 77340 77437 77436\nf 77341 77342 77438\nf 77341 77438 77437\nf 77342 77343 77439\nf 77342 77439 77438\nf 77343 77344 77440\nf 77343 77440 77439\nf 77344 77345 77441\nf 77344 77441 77440\nf 77345 77346 77442\nf 77345 77442 77441\nf 77346 77347 77443\nf 77346 77443 77442\nf 77347 77348 77444\nf 77347 77444 77443\nf 77348 77349 77445\nf 77348 77445 77444\nf 77349 77350 77446\nf 77349 77446 77445\nf 77350 77351 77447\nf 77350 77447 77446\nf 77351 77352 77448\nf 77351 77448 77447\nf 77352 77353 77449\nf 77352 77449 77448\nf 77353 77354 77450\nf 77353 77450 77449\nf 77354 77355 77451\nf 77354 77451 77450\nf 77355 77356 77452\nf 77355 77452 77451\nf 77356 77357 77453\nf 77356 77453 77452\nf 77357 77358 77454\nf 77357 77454 77453\nf 77358 77359 77455\nf 77358 77455 77454\nf 77359 77360 77456\nf 77359 77456 77455\nf 77360 77361 77457\nf 77360 77457 77456\nf 77361 77362 77458\nf 77361 77458 77457\nf 77362 77363 77459\nf 77362 77459 77458\nf 77363 77364 77460\nf 77363 77460 77459\nf 77364 77365 77461\nf 77364 77461 77460\nf 77365 77366 77462\nf 77365 77462 77461\nf 77366 77367 77463\nf 77366 77463 77462\nf 77367 77368 77464\nf 77367 77464 77463\nf 77368 77369 77465\nf 77368 77465 77464\nf 77369 77370 77466\nf 77369 77466 77465\nf 77370 77371 77467\nf 77370 77467 77466\nf 77371 77372 77468\nf 77371 77468 77467\nf 77372 77373 77469\nf 77372 77469 77468\nf 77373 77374 77470\nf 77373 77470 77469\nf 77374 77375 77471\nf 77374 77471 77470\nf 77375 77376 77472\nf 77375 77472 77471\nf 77376 77377 77473\nf 77376 77473 77472\nf 77377 77378 77474\nf 77377 77474 77473\nf 77378 77379 77475\nf 77378 77475 77474\nf 77379 77380 77476\nf 77379 77476 77475\nf 77380 77381 77477\nf 77380 77477 77476\nf 77381 77382 77478\nf 77381 77478 77477\nf 77382 77383 77479\nf 77382 77479 77478\nf 77383 77384 77480\nf 77383 77480 77479\nf 77384 77481 77480\nf 77384 81189 81203\nf 77384 81203 77481\nf 77385 77387 77482\nf 77385 77482 81190\nf 77385 81175 81174\nf 77385 81190 81175\nf 77386 77483 77484\nf 77386 77484 77387\nf 77387 77484 77482\nf 77388 77389 77485\nf 77389 77390 77486\nf 77389 77486 77485\nf 77390 77487 77486\nf 77390 81192 81207\nf 77390 81207 77487\nf 77391 77392 77488\nf 77391 77488 81202\nf 77391 81187 81186\nf 77391 81200 81187\nf 77391 81202 81200\nf 77392 77393 77488\nf 77393 77394 77489\nf 77393 77489 77488\nf 77394 77395 77490\nf 77394 77490 77489\nf 77395 77396 77491\nf 77395 77491 77490\nf 77396 77397 77492\nf 77396 77492 77491\nf 77397 77398 77493\nf 77397 77493 77492\nf 77398 77399 77494\nf 77398 77494 77493\nf 77399 77400 77495\nf 77399 77495 77494\nf 77400 77401 77496\nf 77400 77496 77495\nf 77401 77402 77497\nf 77401 77497 77496\nf 77402 77403 77498\nf 77402 77498 77497\nf 77403 77404 77499\nf 77403 77499 77498\nf 77404 77405 77500\nf 77404 77500 77499\nf 77405 77406 77501\nf 77405 77501 77500\nf 77406 77407 77502\nf 77406 77502 77501\nf 77407 77408 77503\nf 77407 77503 77502\nf 77408 77409 77504\nf 77408 77504 77503\nf 77409 77410 77505\nf 77409 77505 77504\nf 77410 77411 77506\nf 77410 77506 77505\nf 77411 77412 77507\nf 77411 77507 77506\nf 77412 77413 77508\nf 77412 77508 77507\nf 77413 77414 77509\nf 77413 77509 77508\nf 77414 77415 77510\nf 77414 77510 77509\nf 77415 77416 77511\nf 77415 77511 77510\nf 77416 77417 77512\nf 77416 77512 77511\nf 77417 77418 77513\nf 77417 77513 77512\nf 77418 77419 77514\nf 77418 77514 77513\nf 77419 77420 77515\nf 77419 77515 77514\nf 77420 77421 77516\nf 77420 77516 77515\nf 77421 77422 77517\nf 77421 77517 77516\nf 77422 77423 77518\nf 77422 77518 77517\nf 77423 77424 77519\nf 77423 77519 77518\nf 77424 77425 77520\nf 77424 77520 77519\nf 77425 77426 77521\nf 77425 77521 77520\nf 77426 77427 77522\nf 77426 77522 77521\nf 77427 77428 77523\nf 77427 77523 77522\nf 77428 77429 77524\nf 77428 77524 77523\nf 77429 77430 77525\nf 77429 77525 77524\nf 77430 77431 77526\nf 77430 77526 77525\nf 77431 77432 77527\nf 77431 77527 77526\nf 77432 77433 77528\nf 77432 77528 77527\nf 77433 77434 77529\nf 77433 77529 77528\nf 77434 77435 77530\nf 77434 77530 77529\nf 77435 77436 77531\nf 77435 77531 77530\nf 77436 77437 77532\nf 77436 77532 77531\nf 77437 77438 77533\nf 77437 77533 77532\nf 77438 77439 77534\nf 77438 77534 77533\nf 77439 77440 77535\nf 77439 77535 77534\nf 77440 77441 77536\nf 77440 77536 77535\nf 77441 77442 77537\nf 77441 77537 77536\nf 77442 77443 77538\nf 77442 77538 77537\nf 77443 77444 77539\nf 77443 77539 77538\nf 77444 77445 77540\nf 77444 77540 77539\nf 77445 77446 77541\nf 77445 77541 77540\nf 77446 77447 77542\nf 77446 77542 77541\nf 77447 77448 77544\nf 77447 77544 77542\nf 77448 77449 77546\nf 77448 77546 77544\nf 77449 77450 77548\nf 77449 77548 77546\nf 77450 77451 77550\nf 77450 77550 77548\nf 77451 77452 77552\nf 77451 77552 77550\nf 77452 77453 77554\nf 77452 77554 77552\nf 77453 77454 77556\nf 77453 77556 77554\nf 77454 77455 77558\nf 77454 77558 77556\nf 77455 77456 77560\nf 77455 77560 77558\nf 77456 77457 77562\nf 77456 77562 77560\nf 77457 77458 77564\nf 77457 77564 77562\nf 77458 77459 77566\nf 77458 77566 77564\nf 77459 77460 77568\nf 77459 77568 77566\nf 77460 77461 77570\nf 77460 77570 77568\nf 77461 77462 77572\nf 77461 77572 77570\nf 77462 77463 77574\nf 77462 77574 77572\nf 77463 77464 77576\nf 77463 77576 77574\nf 77464 77465 77578\nf 77464 77578 77576\nf 77465 77466 77580\nf 77465 77580 77578\nf 77466 77467 77582\nf 77466 77582 77580\nf 77467 77468 77584\nf 77467 77584 77582\nf 77468 77469 77585\nf 77468 77585 77584\nf 77469 77470 77586\nf 77469 77586 77585\nf 77470 77471 77587\nf 77470 77587 77586\nf 77471 77472 77588\nf 77471 77588 77587\nf 77472 77473 77589\nf 77472 77589 77588\nf 77473 77474 77590\nf 77473 77590 77589\nf 77474 77475 77591\nf 77474 77591 77590\nf 77475 77476 77592\nf 77475 77592 77591\nf 77476 77477 77593\nf 77476 77593 77592\nf 77477 77478 77594\nf 77477 77594 77593\nf 77478 77479 77595\nf 77478 77595 77594\nf 77479 77480 77596\nf 77479 77596 77595\nf 77480 77481 77597\nf 77480 77597 77596\nf 77481 77598 77597\nf 77481 77599 77598\nf 77481 81203 81205\nf 77481 81205 77599\nf 77482 77484 77600\nf 77482 77599 81204\nf 77482 77600 77599\nf 77482 81204 81190\nf 77483 77601 77602\nf 77483 77602 77484\nf 77484 77602 77600\nf 77485 77486 77603\nf 77486 77487 77604\nf 77486 77604 77603\nf 77487 81207 81208\nf 77487 81208 81219\nf 77487 81219 77604\nf 77488 77489 77605\nf 77488 77605 81217\nf 77488 81217 81202\nf 77489 77490 77606\nf 77489 77606 77605\nf 77490 77491 77607\nf 77490 77607 77606\nf 77491 77492 77608\nf 77491 77608 77607\nf 77492 77493 77609\nf 77492 77609 77608\nf 77493 77494 77610\nf 77493 77610 77609\nf 77494 77495 77611\nf 77494 77611 77610\nf 77495 77496 77612\nf 77495 77612 77611\nf 77496 77497 77613\nf 77496 77613 77612\nf 77497 77498 77614\nf 77497 77614 77613\nf 77498 77499 77615\nf 77498 77615 77614\nf 77499 77500 77616\nf 77499 77616 77615\nf 77500 77501 77617\nf 77500 77617 77616\nf 77501 77502 77618\nf 77501 77618 77617\nf 77502 77503 77619\nf 77502 77619 77618\nf 77503 77504 77620\nf 77503 77620 77619\nf 77504 77505 77621\nf 77504 77621 77620\nf 77505 77506 77622\nf 77505 77622 77621\nf 77506 77507 77623\nf 77506 77623 77622\nf 77507 77508 77624\nf 77507 77624 77623\nf 77508 77509 77625\nf 77508 77625 77624\nf 77509 77510 77626\nf 77509 77626 77625\nf 77510 77511 77627\nf 77510 77627 77626\nf 77511 77512 77628\nf 77511 77628 77627\nf 77512 77513 77629\nf 77512 77629 77628\nf 77513 77514 77630\nf 77513 77630 77629\nf 77514 77515 77631\nf 77514 77631 77630\nf 77515 77516 77632\nf 77515 77632 77631\nf 77516 77517 77633\nf 77516 77633 77632\nf 77517 77518 77634\nf 77517 77634 77633\nf 77518 77519 77635\nf 77518 77635 77634\nf 77519 77520 77636\nf 77519 77636 77635\nf 77520 77521 77637\nf 77520 77637 77636\nf 77521 77522 77638\nf 77521 77638 77637\nf 77522 77523 77639\nf 77522 77639 77638\nf 77523 77524 77640\nf 77523 77640 77639\nf 77524 77525 77641\nf 77524 77641 77640\nf 77525 77526 77642\nf 77525 77642 77641\nf 77526 77527 77643\nf 77526 77643 77642\nf 77527 77528 77644\nf 77527 77644 77643\nf 77528 77529 77645\nf 77528 77645 77644\nf 77529 77530 77646\nf 77529 77646 77645\nf 77530 77531 77647\nf 77530 77647 77646\nf 77531 77532 77648\nf 77531 77648 77647\nf 77532 77533 77649\nf 77532 77649 77648\nf 77533 77534 77650\nf 77533 77650 77649\nf 77534 77535 77651\nf 77534 77651 77650\nf 77535 77536 77652\nf 77535 77652 77651\nf 77536 77537 77654\nf 77536 77654 77652\nf 77537 77538 77656\nf 77537 77656 77654\nf 77538 77539 77658\nf 77538 77658 77656\nf 77539 77540 77660\nf 77539 77660 77658\nf 77540 77541 77662\nf 77540 77662 77660\nf 77541 77542 77664\nf 77541 77664 77662\nf 77542 77544 77667\nf 77542 77667 77664\nf 77543 77544 77545\nf 77543 77665 77667\nf 77543 77667 77544\nf 77544 77546 77545\nf 77545 77546 77547\nf 77546 77548 77547\nf 77547 77548 77549\nf 77548 77550 77549\nf 77549 77550 77551\nf 77550 77552 77551\nf 77551 77552 77553\nf 77552 77554 77553\nf 77553 77554 77555\nf 77554 77556 77555\nf 77555 77556 77557\nf 77556 77558 77557\nf 77557 77558 77559\nf 77558 77560 77559\nf 77559 77560 77561\nf 77560 77562 77561\nf 77561 77562 77563\nf 77562 77564 77563\nf 77563 77564 77565\nf 77564 77566 77565\nf 77565 77566 77567\nf 77566 77568 77567\nf 77567 77568 77569\nf 77568 77570 77569\nf 77569 77570 77571\nf 77570 77572 77571\nf 77571 77572 77573\nf 77572 77574 77573\nf 77573 77574 77575\nf 77574 77576 77575\nf 77575 77576 77577\nf 77576 77578 77577\nf 77577 77578 77579\nf 77578 77580 77579\nf 77579 77580 77581\nf 77580 77582 77581\nf 77581 77582 77583\nf 77582 77584 77583\nf 77583 77584 77668\nf 77584 77585 77670\nf 77584 77670 77668\nf 77585 77586 77670\nf 77586 77587 77671\nf 77586 77671 77670\nf 77587 77588 77672\nf 77587 77672 77671\nf 77588 77589 77673\nf 77588 77673 77672\nf 77589 77590 77674\nf 77589 77674 77673\nf 77590 77591 77675\nf 77590 77675 77674\nf 77591 77592 77676\nf 77591 77676 77675\nf 77592 77593 77677\nf 77592 77677 77676\nf 77593 77594 77678\nf 77593 77678 77677\nf 77594 77595 77679\nf 77594 77679 77678\nf 77595 77596 77680\nf 77595 77680 77679\nf 77596 77597 77681\nf 77596 77681 77680\nf 77597 77598 77682\nf 77597 77682 77681\nf 77598 77599 77683\nf 77598 77683 77682\nf 77599 77600 77684\nf 77599 77684 77683\nf 77599 81205 81204\nf 77600 77602 77685\nf 77600 77685 77684\nf 77601 77686 77687\nf 77601 77687 77602\nf 77602 77687 77685\nf 77603 77604 77688\nf 77604 77689 77688\nf 77604 81219 81231\nf 77604 81231 77689\nf 77605 77606 77690\nf 77605 77690 81229\nf 77605 81229 81217\nf 77606 77607 77691\nf 77606 77691 77690\nf 77607 77608 77692\nf 77607 77692 77691\nf 77608 77609 77693\nf 77608 77693 77692\nf 77609 77610 77694\nf 77609 77694 77693\nf 77610 77611 77695\nf 77610 77695 77694\nf 77611 77612 77696\nf 77611 77696 77695\nf 77612 77613 77697\nf 77612 77697 77696\nf 77613 77614 77698\nf 77613 77698 77697\nf 77614 77615 77699\nf 77614 77699 77698\nf 77615 77616 77700\nf 77615 77700 77699\nf 77616 77617 77701\nf 77616 77701 77700\nf 77617 77618 77702\nf 77617 77702 77701\nf 77618 77619 77704\nf 77618 77704 77702\nf 77619 77620 77706\nf 77619 77706 77704\nf 77620 77621 77708\nf 77620 77708 77706\nf 77621 77622 77710\nf 77621 77710 77708\nf 77622 77623 77712\nf 77622 77712 77710\nf 77623 77624 77714\nf 77623 77714 77712\nf 77624 77625 77716\nf 77624 77716 77714\nf 77625 77626 77718\nf 77625 77718 77716\nf 77626 77627 77720\nf 77626 77720 77718\nf 77627 77628 77722\nf 77627 77722 77720\nf 77628 77629 77724\nf 77628 77724 77722\nf 77629 77630 77726\nf 77629 77726 77724\nf 77630 77631 77728\nf 77630 77728 77726\nf 77631 77632 77730\nf 77631 77730 77728\nf 77632 77633 77732\nf 77632 77732 77730\nf 77633 77634 77734\nf 77633 77734 77732\nf 77634 77635 77736\nf 77634 77736 77734\nf 77635 77636 77737\nf 77635 77737 77736\nf 77636 77637 77738\nf 77636 77738 77737\nf 77637 77638 77739\nf 77637 77739 77738\nf 77638 77639 77741\nf 77638 77741 77739\nf 77639 77640 77743\nf 77639 77743 77741\nf 77640 77641 77745\nf 77640 77745 77743\nf 77641 77642 77747\nf 77641 77747 77745\nf 77642 77643 77749\nf 77642 77749 77747\nf 77643 77644 77751\nf 77643 77751 77749\nf 77644 77645 77753\nf 77644 77753 77751\nf 77645 77646 77755\nf 77645 77755 77753\nf 77646 77647 77757\nf 77646 77757 77755\nf 77647 77648 77759\nf 77647 77759 77757\nf 77648 77649 77761\nf 77648 77761 77759\nf 77649 77650 77763\nf 77649 77763 77761\nf 77650 77651 77765\nf 77650 77765 77763\nf 77651 77652 77767\nf 77651 77767 77765\nf 77652 77654 77770\nf 77652 77770 77767\nf 77653 77654 77655\nf 77653 77768 77770\nf 77653 77770 77654\nf 77654 77656 77655\nf 77655 77656 77657\nf 77656 77658 77657\nf 77657 77658 77659\nf 77658 77660 77659\nf 77659 77660 77661\nf 77660 77662 77661\nf 77661 77662 77663\nf 77662 77664 77663\nf 77663 77664 77666\nf 77664 77667 77666\nf 77665 77666 77667\nf 77668 77670 77669\nf 77669 77670 77771\nf 77670 77671 77773\nf 77670 77773 77771\nf 77671 77672 77773\nf 77672 77673 77774\nf 77672 77774 77773\nf 77673 77674 77775\nf 77673 77775 77774\nf 77674 77675 77776\nf 77674 77776 77775\nf 77675 77676 77777\nf 77675 77777 77776\nf 77676 77677 77778\nf 77676 77778 77777\nf 77677 77678 77779\nf 77677 77779 77778\nf 77678 77679 77780\nf 77678 77780 77779\nf 77679 77680 77781\nf 77679 77781 77780\nf 77680 77681 77782\nf 77680 77782 77781\nf 77681 77682 77783\nf 77681 77783 77782\nf 77682 77683 77784\nf 77682 77784 77783\nf 77683 77684 77785\nf 77683 77785 77784\nf 77684 77685 77786\nf 77684 77786 77785\nf 77685 77687 77787\nf 77685 77787 77786\nf 77686 77788 77790\nf 77686 77790 77687\nf 77687 77790 77787\nf 77688 77689 77791\nf 77689 77792 77791\nf 77689 81231 81243\nf 77689 81243 77792\nf 77690 77691 77793\nf 77690 77793 81241\nf 77690 81241 81229\nf 77691 77692 77794\nf 77691 77794 77793\nf 77692 77693 77795\nf 77692 77795 77794\nf 77693 77694 77796\nf 77693 77796 77795\nf 77694 77695 77797\nf 77694 77797 77796\nf 77695 77696 77798\nf 77695 77798 77797\nf 77696 77697 77799\nf 77696 77799 77798\nf 77697 77698 77800\nf 77697 77800 77799\nf 77698 77699 77801\nf 77698 77801 77800\nf 77699 77700 77803\nf 77699 77803 77801\nf 77700 77701 77805\nf 77700 77805 77803\nf 77701 77702 77807\nf 77701 77807 77805\nf 77702 77704 77810\nf 77702 77810 77807\nf 77703 77704 77705\nf 77703 77808 77810\nf 77703 77810 77704\nf 77704 77706 77705\nf 77705 77706 77707\nf 77706 77708 77707\nf 77707 77708 77709\nf 77708 77710 77709\nf 77709 77710 77711\nf 77710 77712 77711\nf 77711 77712 77713\nf 77712 77714 77713\nf 77713 77714 77715\nf 77714 77716 77715\nf 77715 77716 77717\nf 77716 77718 77717\nf 77717 77718 77719\nf 77718 77720 77719\nf 77719 77720 77721\nf 77720 77722 77721\nf 77721 77722 77723\nf 77722 77724 77723\nf 77723 77724 77725\nf 77724 77726 77725\nf 77725 77726 77727\nf 77726 77728 77727\nf 77727 77728 77729\nf 77728 77730 77729\nf 77729 77730 77731\nf 77730 77732 77731\nf 77731 77732 77733\nf 77732 77734 77733\nf 77733 77734 77735\nf 77734 77736 77735\nf 77735 77736 77811\nf 77736 77737 77813\nf 77736 77813 77811\nf 77737 77738 77813\nf 77738 77739 77815\nf 77738 77815 77813\nf 77739 77741 77818\nf 77739 77818 77815\nf 77740 77741 77742\nf 77740 77816 77818\nf 77740 77818 77741\nf 77741 77743 77742\nf 77742 77743 77744\nf 77743 77745 77744\nf 77744 77745 77746\nf 77745 77747 77746\nf 77746 77747 77748\nf 77747 77749 77748\nf 77748 77749 77750\nf 77749 77751 77750\nf 77750 77751 77752\nf 77751 77753 77752\nf 77752 77753 77754\nf 77753 77755 77754\nf 77754 77755 77756\nf 77755 77757 77756\nf 77756 77757 77758\nf 77757 77759 77758\nf 77758 77759 77760\nf 77759 77761 77760\nf 77760 77761 77762\nf 77761 77763 77762\nf 77762 77763 77764\nf 77763 77765 77764\nf 77764 77765 77766\nf 77765 77767 77766\nf 77766 77767 77769\nf 77767 77770 77769\nf 77768 77769 77770\nf 77771 77773 77772\nf 77772 77773 77819\nf 77773 77774 77821\nf 77773 77821 77819\nf 77774 77775 77821\nf 77775 77776 77823\nf 77775 77823 77821\nf 77776 77777 77825\nf 77776 77825 77823\nf 77777 77778 77826\nf 77777 77826 77825\nf 77778 77779 77827\nf 77778 77827 77826\nf 77779 77780 77828\nf 77779 77828 77827\nf 77780 77781 77829\nf 77780 77829 77828\nf 77781 77782 77830\nf 77781 77830 77829\nf 77782 77783 77831\nf 77782 77831 77830\nf 77783 77784 77832\nf 77783 77832 77831\nf 77784 77785 77833\nf 77784 77833 77832\nf 77785 77786 77834\nf 77785 77834 77833\nf 77786 77787 77836\nf 77786 77836 77834\nf 77787 77790 77839\nf 77787 77839 77836\nf 77788 77789 77790\nf 77789 77837 77839\nf 77789 77839 77790\nf 77791 77792 81257\nf 77791 81257 77840\nf 77792 81243 81244\nf 77792 81244 81257\nf 77793 77794 77842\nf 77793 77841 81254\nf 77793 77842 77841\nf 77793 81254 81241\nf 77794 77795 77843\nf 77794 77843 77842\nf 77795 77796 77844\nf 77795 77844 77843\nf 77796 77797 77845\nf 77796 77845 77844\nf 77797 77798 77846\nf 77797 77846 77845\nf 77798 77799 77847\nf 77798 77847 77846\nf 77799 77800 77849\nf 77799 77849 77847\nf 77800 77801 77851\nf 77800 77851 77849\nf 77801 77803 77854\nf 77801 77854 77851\nf 77802 77803 77804\nf 77802 77852 77854\nf 77802 77854 77803\nf 77803 77805 77804\nf 77804 77805 77806\nf 77805 77807 77806\nf 77806 77807 77809\nf 77807 77810 77809\nf 77808 77809 77810\nf 77811 77813 77812\nf 77812 77813 77814\nf 77813 77815 77814\nf 77814 77815 77817\nf 77815 77818 77817\nf 77816 77817 77818\nf 77819 77821 77820\nf 77820 77821 77822\nf 77821 77823 77822\nf 77822 77823 77824\nf 77823 77825 77824\nf 77824 77825 77855\nf 77825 77826 77857\nf 77825 77857 77855\nf 77826 77827 77857\nf 77827 77828 77859\nf 77827 77859 77857\nf 77828 77829 77861\nf 77828 77861 77859\nf 77829 77830 77863\nf 77829 77863 77861\nf 77830 77831 77865\nf 77830 77865 77863\nf 77831 77832 77867\nf 77831 77867 77865\nf 77832 77833 77869\nf 77832 77869 77867\nf 77833 77834 77871\nf 77833 77871 77869\nf 77834 77836 77874\nf 77834 77874 77871\nf 77835 77836 77838\nf 77835 77872 77874\nf 77835 77874 77836\nf 77836 77839 77838\nf 77837 77838 77839\nf 77840 81257 77875\nf 77841 77842 77876\nf 77841 77876 81267\nf 77841 81255 81254\nf 77841 81267 81255\nf 77842 77843 77877\nf 77842 77877 77876\nf 77843 77844 77878\nf 77843 77878 77877\nf 77844 77845 77879\nf 77844 77879 77878\nf 77845 77846 77881\nf 77845 77881 77879\nf 77846 77847 77883\nf 77846 77883 77881\nf 77847 77849 77886\nf 77847 77886 77883\nf 77848 77849 77850\nf 77848 77884 77886\nf 77848 77886 77849\nf 77849 77851 77850\nf 77850 77851 77853\nf 77851 77854 77853\nf 77852 77853 77854\nf 77855 77857 77856\nf 77856 77857 77858\nf 77857 77859 77858\nf 77858 77859 77860\nf 77859 77861 77860\nf 77860 77861 77862\nf 77861 77863 77862\nf 77862 77863 77864\nf 77863 77865 77864\nf 77864 77865 77866\nf 77865 77867 77866\nf 77866 77867 77868\nf 77867 77869 77868\nf 77868 77869 77870\nf 77869 77871 77870\nf 77870 77871 77873\nf 77871 77874 77873\nf 77872 77873 77874\nf 77875 81257 81269\nf 77875 81269 77887\nf 77876 77877 77889\nf 77876 77888 81279\nf 77876 77889 77888\nf 77876 81279 81267\nf 77877 77878 77890\nf 77877 77890 77889\nf 77878 77879 77892\nf 77878 77892 77890\nf 77879 77881 77895\nf 77879 77895 77892\nf 77880 77881 77882\nf 77880 77893 77895\nf 77880 77895 77881\nf 77881 77883 77882\nf 77882 77883 77885\nf 77883 77886 77885\nf 77884 77885 77886\nf 77887 81269 81282\nf 77887 81282 77896\nf 77888 77889 77898\nf 77888 77897 81291\nf 77888 77898 77897\nf 77888 81280 81279\nf 77888 81291 81280\nf 77889 77890 77899\nf 77889 77899 77898\nf 77890 77892 77901\nf 77890 77901 77899\nf 77891 77892 77894\nf 77891 77900 77901\nf 77891 77901 77892\nf 77892 77895 77894\nf 77893 77894 77895\nf 77896 81282 81294\nf 77896 81294 77902\nf 77897 77898 77904\nf 77897 77903 81302\nf 77897 77904 77903\nf 77897 81292 81291\nf 77897 81302 81292\nf 77898 77899 77905\nf 77898 77905 77904\nf 77899 77901 77906\nf 77899 77906 77905\nf 77900 77907 77909\nf 77900 77909 77901\nf 77901 77909 77906\nf 77902 81294 81305\nf 77902 81305 77910\nf 77903 77904 77911\nf 77903 77911 81312\nf 77903 81303 81302\nf 77903 81312 81303\nf 77904 77905 77912\nf 77904 77912 77911\nf 77905 77906 77913\nf 77905 77913 77912\nf 77906 77909 77915\nf 77906 77915 77913\nf 77907 77908 77909\nf 77908 77914 77915\nf 77908 77915 77909\nf 77910 81305 81314\nf 77910 81314 77916\nf 77911 77912 77917\nf 77911 77917 81323\nf 77911 81321 81312\nf 77911 81323 81321\nf 77912 77913 77917\nf 77913 77915 77918\nf 77913 77918 77917\nf 77914 77919 77920\nf 77914 77920 77915\nf 77915 77920 77918\nf 77916 81314 81324\nf 77916 81324 77921\nf 77917 77918 77922\nf 77917 77922 81334\nf 77917 81332 81323\nf 77917 81334 81332\nf 77918 77920 77922\nf 77919 77923 77924\nf 77919 77924 77920\nf 77920 77924 77922\nf 77921 81324 81335\nf 77921 81335 77925\nf 77922 77924 77927\nf 77922 77927 81344\nf 77922 81344 81334\nf 77923 77928 77929\nf 77923 77929 77924\nf 77924 77929 77927\nf 77925 81335 81346\nf 77925 81346 81357\nf 77925 81357 77926\nf 77926 77931 77930\nf 77926 81357 77931\nf 77927 77929 77932\nf 77927 77932 81355\nf 77927 81355 81344\nf 77928 77933 77934\nf 77928 77934 77929\nf 77929 77934 77932\nf 77930 77931 77935\nf 77931 77936 77935\nf 77931 81357 81368\nf 77931 81368 77936\nf 77932 77934 77937\nf 77932 77937 81366\nf 77932 81366 81355\nf 77933 77938 77939\nf 77933 77939 77934\nf 77934 77939 77937\nf 77935 77936 77940\nf 77936 77942 77940\nf 77936 81368 81380\nf 77936 81380 77942\nf 77937 77939 77944\nf 77937 77944 81379\nf 77937 81377 81366\nf 77937 81379 81377\nf 77938 77943 77944\nf 77938 77944 77939\nf 77940 77942 77941\nf 77941 77942 77945\nf 77942 81380 77945\nf 77943 77946 77947\nf 77943 77947 77944\nf 77944 77947 81390\nf 77944 81390 81379\nf 77945 81380 81392\nf 77945 81392 77948\nf 77946 77949 77950\nf 77946 77950 77947\nf 77947 77950 81402\nf 77947 81402 81390\nf 77948 81392 81404\nf 77948 81404 77951\nf 77949 77953 77954\nf 77949 77954 77950\nf 77950 77954 81414\nf 77950 81414 81402\nf 77951 81404 81416\nf 77951 81416 81428\nf 77951 81428 77952\nf 77952 77956 77955\nf 77952 81428 77956\nf 77953 77957 77958\nf 77953 77958 77954\nf 77954 77958 81426\nf 77954 81426 81414\nf 77955 77956 77959\nf 77956 77960 77959\nf 77956 81428 81440\nf 77956 81440 77960\nf 77957 77961 77962\nf 77957 77962 77958\nf 77958 77962 81438\nf 77958 81438 81426\nf 77959 77960 77963\nf 77960 77964 77963\nf 77960 81440 81452\nf 77960 81452 77964\nf 77961 77965 77966\nf 77961 77966 77962\nf 77962 77966 81450\nf 77962 81450 81438\nf 77963 77964 77967\nf 77964 77968 77967\nf 77964 81452 81464\nf 77964 81464 77968\nf 77965 77969 77970\nf 77965 77970 77966\nf 77966 77970 81462\nf 77966 81462 81450\nf 77967 77968 77971\nf 77968 77972 77971\nf 77968 81464 81476\nf 77968 81476 77972\nf 77969 77973 77974\nf 77969 77974 77970\nf 77970 77974 81474\nf 77970 81474 81462\nf 77971 77972 77975\nf 77972 77976 77975\nf 77972 81476 81488\nf 77972 81488 77976\nf 77973 77977 77978\nf 77973 77978 77974\nf 77974 77978 81486\nf 77974 81486 81474\nf 77975 77976 77979\nf 77976 77980 77979\nf 77976 81488 81500\nf 77976 81500 77980\nf 77977 77981 77982\nf 77977 77982 77978\nf 77978 77982 81498\nf 77978 81498 81486\nf 77979 77980 77983\nf 77980 77984 77983\nf 77980 81500 81512\nf 77980 81512 77984\nf 77981 77985 77986\nf 77981 77986 77982\nf 77982 77986 81510\nf 77982 81510 81498\nf 77983 77984 77987\nf 77984 77988 77987\nf 77984 81512 81524\nf 77984 81524 77988\nf 77985 77989 77990\nf 77985 77990 77986\nf 77986 77990 81522\nf 77986 81522 81510\nf 77987 77988 77991\nf 77988 77992 77991\nf 77988 81524 81536\nf 77988 81536 77992\nf 77989 77993 77994\nf 77989 77994 77990\nf 77990 77994 81534\nf 77990 81534 81522\nf 77991 77992 77995\nf 77992 77996 77995\nf 77992 81536 81548\nf 77992 81548 77996\nf 77993 77997 77998\nf 77993 77998 77994\nf 77994 77998 81546\nf 77994 81546 81534\nf 77995 77996 77999\nf 77996 78000 77999\nf 77996 81548 81561\nf 77996 81561 78000\nf 77997 78002 78003\nf 77997 78003 77998\nf 77998 78001 81558\nf 77998 78003 78001\nf 77998 81558 81546\nf 77999 78000 78004\nf 78000 78005 78004\nf 78000 81561 81572\nf 78000 81572 78005\nf 78001 78003 78006\nf 78001 78006 81570\nf 78001 81559 81558\nf 78001 81570 81559\nf 78002 78007 78009\nf 78002 78009 78003\nf 78003 78009 78006\nf 78004 78005 78010\nf 78005 78011 78010\nf 78005 81572 81583\nf 78005 81583 78011\nf 78006 78009 78013\nf 78006 78013 81581\nf 78006 81581 81570\nf 78007 78008 78009\nf 78008 78012 78013\nf 78008 78013 78009\nf 78010 78011 81595\nf 78010 81595 78014\nf 78011 81583 81584\nf 78011 81584 81595\nf 78012 78015 78016\nf 78012 78016 78013\nf 78013 78016 81593\nf 78013 81593 81581\nf 78014 81595 78017\nf 78015 78018 78019\nf 78015 78019 78016\nf 78016 78019 81605\nf 78016 81605 81593\nf 78017 81595 81607\nf 78017 81607 78020\nf 78018 78021 78022\nf 78018 78022 78019\nf 78019 78022 81617\nf 78019 81617 81605\nf 78020 81607 81619\nf 78020 81619 78023\nf 78021 78024 78025\nf 78021 78025 78022\nf 78022 78025 81629\nf 78022 81629 81617\nf 78023 81619 81631\nf 78023 81631 78026\nf 78024 78027 78028\nf 78024 78028 78025\nf 78025 78028 81641\nf 78025 81641 81629\nf 78026 81631 81643\nf 78026 81643 78029\nf 78027 78030 78031\nf 78027 78031 78028\nf 78028 78031 81653\nf 78028 81653 81641\nf 78029 81643 81655\nf 78029 81655 78032\nf 78030 78033 78034\nf 78030 78034 78031\nf 78031 78034 81665\nf 78031 81665 81653\nf 78032 81655 81667\nf 78032 81667 78035\nf 78033 78036 78037\nf 78033 78037 78034\nf 78034 78037 81677\nf 78034 81677 81665\nf 78035 81667 81679\nf 78035 81679 78038\nf 78036 78039 78040\nf 78036 78040 78037\nf 78037 78040 81689\nf 78037 81689 81677\nf 78038 81679 81691\nf 78038 81691 78041\nf 78039 78044 78045\nf 78039 78045 78040\nf 78040 78043 81701\nf 78040 78045 78043\nf 78040 81701 81689\nf 78041 81691 81704\nf 78041 81704 81715\nf 78041 81715 78042\nf 78042 78047 78046\nf 78042 81715 78047\nf 78043 78045 78048\nf 78043 78048 81713\nf 78043 81702 81701\nf 78043 81713 81702\nf 78044 78049 78050\nf 78044 78050 78045\nf 78045 78050 78048\nf 78046 78047 78051\nf 78047 78052 78051\nf 78047 81715 81726\nf 78047 81726 78052\nf 78048 78050 78053\nf 78048 78053 81724\nf 78048 81724 81713\nf 78049 78054 78055\nf 78049 78055 78050\nf 78050 78055 78053\nf 78051 78052 78056\nf 78052 78057 78056\nf 78052 81726 81737\nf 78052 81737 78057\nf 78053 78055 78058\nf 78053 78058 81735\nf 78053 81735 81724\nf 78054 78059 78060\nf 78054 78060 78055\nf 78055 78060 78058\nf 78056 78057 78061\nf 78057 78062 78061\nf 78057 81737 81748\nf 78057 81748 78062\nf 78058 78060 78063\nf 78058 78063 81746\nf 78058 81746 81735\nf 78059 78064 78065\nf 78059 78065 78060\nf 78060 78065 78063\nf 78061 78062 78066\nf 78062 78067 78066\nf 78062 81748 81759\nf 78062 81759 78067\nf 78063 78065 78068\nf 78063 78068 81757\nf 78063 81757 81746\nf 78064 78069 78070\nf 78064 78070 78065\nf 78065 78070 78068\nf 78066 78067 78071\nf 78067 78072 78071\nf 78067 81759 81770\nf 78067 81770 78072\nf 78068 78070 78073\nf 78068 78073 81768\nf 78068 81768 81757\nf 78069 78074 78075\nf 78069 78075 78070\nf 78070 78075 78073\nf 78071 78072 78076\nf 78072 78077 78076\nf 78072 81770 81781\nf 78072 81781 78077\nf 78073 78075 78078\nf 78073 78078 81779\nf 78073 81779 81768\nf 78074 78079 78080\nf 78074 78080 78075\nf 78075 78080 78078\nf 78076 78077 78081\nf 78077 78082 78081\nf 78077 81781 81792\nf 78077 81792 78082\nf 78078 78080 78083\nf 78078 78083 81790\nf 78078 81790 81779\nf 78079 78084 78085\nf 78079 78085 78080\nf 78080 78085 78083\nf 78081 78082 78086\nf 78082 78087 78086\nf 78082 81792 81803\nf 78082 81803 78087\nf 78083 78085 78088\nf 78083 78088 81801\nf 78083 81801 81790\nf 78084 78089 78090\nf 78084 78090 78085\nf 78085 78090 78088\nf 78086 78087 78091\nf 78087 78092 78091\nf 78087 81803 81814\nf 78087 81814 78092\nf 78088 78090 78093\nf 78088 78093 81812\nf 78088 81812 81801\nf 78089 78094 78095\nf 78089 78095 78090\nf 78090 78095 78093\nf 78091 78092 78096\nf 78092 78097 78096\nf 78092 81814 81825\nf 78092 81825 78097\nf 78093 78095 78098\nf 78093 78098 81823\nf 78093 81823 81812\nf 78094 78099 78100\nf 78094 78100 78095\nf 78095 78100 78098\nf 78096 78097 78101\nf 78097 78102 78101\nf 78097 81825 81836\nf 78097 81836 78102\nf 78098 78100 78103\nf 78098 78103 81834\nf 78098 81834 81823\nf 78099 78104 78105\nf 78099 78105 78100\nf 78100 78105 78103\nf 78101 78102 78106\nf 78102 78107 78106\nf 78102 81836 81847\nf 78102 81847 78107\nf 78103 78105 78108\nf 78103 78108 81845\nf 78103 81845 81834\nf 78104 78109 78110\nf 78104 78110 78105\nf 78105 78110 78108\nf 78106 78107 78111\nf 78107 78112 78111\nf 78107 81847 81858\nf 78107 81858 78112\nf 78108 78110 78113\nf 78108 78113 81856\nf 78108 81856 81845\nf 78109 78114 78115\nf 78109 78115 78110\nf 78110 78115 78113\nf 78111 78112 78116\nf 78112 78117 78116\nf 78112 81858 81869\nf 78112 81869 78117\nf 78113 78115 78118\nf 78113 78118 81867\nf 78113 81867 81856\nf 78114 78119 78120\nf 78114 78120 78115\nf 78115 78120 78118\nf 78116 78117 81881\nf 78116 81881 78121\nf 78117 81869 81870\nf 78117 81870 81881\nf 78118 78120 78122\nf 78118 78122 81879\nf 78118 81879 81867\nf 78119 78123 78124\nf 78119 78124 78120\nf 78120 78124 78122\nf 78121 81881 78125\nf 78122 78124 78126\nf 78122 78126 81891\nf 78122 81891 81879\nf 78123 78127 78129\nf 78123 78129 78124\nf 78124 78129 78126\nf 78125 81881 81893\nf 78125 81893 78130\nf 78126 78129 78134\nf 78126 78132 81903\nf 78126 78134 78132\nf 78126 81903 81891\nf 78127 78128 78129\nf 78128 78133 78134\nf 78128 78134 78129\nf 78130 81893 81906\nf 78130 81906 81917\nf 78130 81917 78131\nf 78131 78136 78135\nf 78131 81917 78136\nf 78132 78134 78137\nf 78132 78137 81915\nf 78132 81904 81903\nf 78132 81915 81904\nf 78133 78138 78139\nf 78133 78139 78134\nf 78134 78139 78137\nf 78135 78136 78140\nf 78136 78141 78140\nf 78136 81917 81928\nf 78136 81928 78141\nf 78137 78139 78142\nf 78137 78142 81926\nf 78137 81926 81915\nf 78138 78143 78144\nf 78138 78144 78139\nf 78139 78144 78142\nf 78140 78141 78145\nf 78141 78146 78145\nf 78141 81928 81939\nf 78141 81939 78146\nf 78142 78144 78147\nf 78142 78147 81937\nf 78142 81937 81926\nf 78143 78148 78149\nf 78143 78149 78144\nf 78144 78149 78147\nf 78145 78146 78150\nf 78146 78151 78150\nf 78146 81939 81950\nf 78146 81950 78151\nf 78147 78149 78152\nf 78147 78152 81948\nf 78147 81948 81937\nf 78148 78153 78154\nf 78148 78154 78149\nf 78149 78154 78152\nf 78150 78151 81962\nf 78150 81962 78155\nf 78151 81950 81951\nf 78151 81951 81962\nf 78152 78154 78156\nf 78152 78156 81960\nf 78152 81960 81948\nf 78153 78157 78158\nf 78153 78158 78154\nf 78154 78158 78156\nf 78155 81962 78159\nf 78156 78158 78160\nf 78156 78160 81972\nf 78156 81972 81960\nf 78157 78161 78162\nf 78157 78162 78158\nf 78158 78162 78160\nf 78159 81962 81974\nf 78159 81974 78163\nf 78160 78162 78164\nf 78160 78164 81984\nf 78160 81984 81972\nf 78161 78165 78166\nf 78161 78166 78162\nf 78162 78166 78164\nf 78163 81974 81986\nf 78163 81986 78167\nf 78164 78166 78169\nf 78164 78169 81996\nf 78164 81996 81984\nf 78165 78170 78171\nf 78165 78171 78166\nf 78166 78171 78169\nf 78167 81986 81998\nf 78167 81998 82009\nf 78167 82009 78168\nf 78168 78173 78172\nf 78168 82009 78173\nf 78169 78171 78174\nf 78169 78174 82007\nf 78169 82007 81996\nf 78170 78175 78176\nf 78170 78176 78171\nf 78171 78176 78174\nf 78172 78173 78177\nf 78173 78178 78177\nf 78173 82009 82020\nf 78173 82020 78178\nf 78174 78176 78179\nf 78174 78179 82018\nf 78174 82018 82007\nf 78175 78180 78181\nf 78175 78181 78176\nf 78176 78181 78179\nf 78177 78178 78182\nf 78178 78183 78182\nf 78178 82020 82031\nf 78178 82031 78183\nf 78179 78181 78184\nf 78179 78184 82029\nf 78179 82029 82018\nf 78180 78185 78186\nf 78180 78186 78181\nf 78181 78186 78184\nf 78182 78183 78187\nf 78183 78188 78187\nf 78183 82031 82042\nf 78183 82042 78188\nf 78184 78186 78189\nf 78184 78189 82040\nf 78184 82040 82029\nf 78185 78190 78191\nf 78185 78191 78186\nf 78186 78191 78189\nf 78187 78188 78192\nf 78188 78193 78192\nf 78188 82042 82054\nf 78188 82054 78193\nf 78189 78191 78194\nf 78189 78194 82052\nf 78189 82052 82040\nf 78190 78195 78196\nf 78190 78196 78191\nf 78191 78196 78194\nf 78192 78193 82067\nf 78192 82067 78197\nf 78193 82054 82055\nf 78193 82055 82067\nf 78194 78196 78198\nf 78194 78198 82065\nf 78194 82065 82052\nf 78195 78199 78201\nf 78195 78201 78196\nf 78196 78201 78198\nf 78197 82067 78202\nf 78198 78201 78204\nf 78198 78204 82078\nf 78198 82078 82065\nf 78199 78200 78201\nf 78200 78203 78204\nf 78200 78204 78201\nf 78202 82067 82080\nf 78202 82080 78205\nf 78203 78207 78208\nf 78203 78208 78204\nf 78204 78206 82091\nf 78204 78208 78206\nf 78204 82091 82078\nf 78205 82080 82094\nf 78205 82094 78209\nf 78206 78208 78210\nf 78206 78210 82104\nf 78206 82092 82091\nf 78206 82104 82092\nf 78207 78211 78212\nf 78207 78212 78208\nf 78208 78212 78210\nf 78209 82094 82106\nf 78209 82106 78213\nf 78210 78212 78214\nf 78210 78214 82116\nf 78210 82116 82104\nf 78211 78215 78216\nf 78211 78216 78212\nf 78212 78216 78214\nf 78213 82106 82118\nf 78213 82118 78217\nf 78214 78216 78218\nf 78214 78218 82128\nf 78214 82128 82116\nf 78215 78219 78220\nf 78215 78220 78216\nf 78216 78220 78218\nf 78217 82118 82130\nf 78217 82130 78221\nf 78218 78220 78222\nf 78218 78222 82140\nf 78218 82140 82128\nf 78219 78223 78224\nf 78219 78224 78220\nf 78220 78224 78222\nf 78221 82130 82142\nf 78221 82142 78225\nf 78222 78224 78226\nf 78222 78226 82152\nf 78222 82152 82140\nf 78223 78227 78228\nf 78223 78228 78224\nf 78224 78228 78226\nf 78225 82142 82154\nf 78225 82154 78229\nf 78226 78228 78230\nf 78226 78230 82164\nf 78226 82164 82152\nf 78227 78231 78232\nf 78227 78232 78228\nf 78228 78232 78230\nf 78229 82154 82166\nf 78229 82166 78233\nf 78230 78232 78234\nf 78230 78234 82176\nf 78230 82176 82164\nf 78231 78235 78236\nf 78231 78236 78232\nf 78232 78236 78234\nf 78233 82166 82178\nf 78233 82178 78237\nf 78234 78236 78239\nf 78234 78238 82188\nf 78234 78239 78238\nf 78234 82188 82176\nf 78235 78240 78242\nf 78235 78242 78236\nf 78236 78242 78239\nf 78237 82178 82191\nf 78237 82191 78243\nf 78238 78239 78244\nf 78238 78244 82200\nf 78238 82189 82188\nf 78238 82200 82189\nf 78239 78242 78246\nf 78239 78246 78244\nf 78240 78241 78242\nf 78241 78245 78246\nf 78241 78246 78242\nf 78243 82191 82202\nf 78243 82202 78247\nf 78244 78246 78248\nf 78244 78248 82211\nf 78244 82211 82200\nf 78245 78249 78250\nf 78245 78250 78246\nf 78246 78250 78248\nf 78247 82202 82213\nf 78247 82213 78251\nf 78248 78250 78252\nf 78248 78252 82222\nf 78248 82222 82211\nf 78249 78253 78254\nf 78249 78254 78250\nf 78250 78254 78252\nf 78251 82213 82224\nf 78251 82224 78255\nf 78252 78254 78256\nf 78252 78256 82233\nf 78252 82233 82222\nf 78253 78257 78258\nf 78253 78258 78254\nf 78254 78258 78256\nf 78255 82224 82235\nf 78255 82235 78259\nf 78256 78258 78260\nf 78256 78260 82244\nf 78256 82244 82233\nf 78257 78261 78262\nf 78257 78262 78258\nf 78258 78262 78260\nf 78259 82235 82246\nf 78259 82246 78263\nf 78260 78262 78264\nf 78260 78264 82255\nf 78260 82255 82244\nf 78261 78265 78266\nf 78261 78266 78262\nf 78262 78266 78264\nf 78263 82246 82257\nf 78263 82257 78267\nf 78264 78266 78268\nf 78264 78268 82266\nf 78264 82266 82255\nf 78265 78269 78270\nf 78265 78270 78266\nf 78266 78270 78268\nf 78267 82257 82268\nf 78267 82268 78271\nf 78268 78270 78273\nf 78268 78272 82277\nf 78268 78273 78272\nf 78268 82277 82266\nf 78269 78274 78276\nf 78269 78276 78270\nf 78270 78276 78273\nf 78271 82268 82280\nf 78271 82280 78277\nf 78272 78273 78278\nf 78272 78278 82288\nf 78272 82278 82277\nf 78272 82288 82278\nf 78273 78276 78280\nf 78273 78280 78278\nf 78274 78275 78276\nf 78275 78279 78280\nf 78275 78280 78276\nf 78277 82280 82290\nf 78277 82290 78281\nf 78278 78280 78282\nf 78278 78282 82298\nf 78278 82298 82288\nf 78279 78283 78284\nf 78279 78284 78280\nf 78280 78284 78282\nf 78281 82290 82300\nf 78281 82300 78285\nf 78282 78284 78287\nf 78282 78287 82310\nf 78282 82308 82298\nf 78282 82310 82308\nf 78283 78286 78287\nf 78283 78287 78284\nf 78285 82300 82311\nf 78285 82311 78288\nf 78286 78290 78291\nf 78286 78291 78287\nf 78287 78291 82321\nf 78287 82321 82310\nf 78288 78289 78292\nf 78288 82311 82312\nf 78288 82312 78289\nf 78289 78293 78292\nf 78289 82312 82323\nf 78289 82323 82333\nf 78289 82333 78293\nf 78290 78294 78296\nf 78290 78296 78291\nf 78291 78296 82331\nf 78291 82331 82321\nf 78292 78293 78297\nf 78293 78298 78297\nf 78293 82333 82344\nf 78293 82344 78298\nf 78294 78295 78296\nf 78295 78299 78300\nf 78295 78300 82342\nf 78295 82342 78296\nf 78296 82341 82331\nf 78296 82342 82341\nf 78297 78298 78301\nf 78298 78302 78301\nf 78298 82344 82353\nf 78298 82353 78302\nf 78299 78303 78304\nf 78299 78304 78300\nf 78300 78304 82351\nf 78300 82351 82342\nf 78301 78302 78305\nf 78302 78306 78305\nf 78302 78307 78306\nf 78302 82353 82354\nf 78302 82354 78307\nf 78303 78308 78309\nf 78303 78309 78304\nf 78304 78309 82361\nf 78304 82361 82351\nf 78305 78306 78310\nf 78306 78307 78312\nf 78306 78312 78310\nf 78307 78313 78312\nf 78307 78314 78313\nf 78307 82354 82363\nf 78307 82363 82364\nf 78307 82364 78314\nf 78308 78316 78318\nf 78308 78318 78309\nf 78309 78315 82370\nf 78309 78318 78315\nf 78309 82370 82361\nf 78310 78312 78311\nf 78311 78312 78321\nf 78311 78321 78319\nf 78312 78313 78322\nf 78312 78322 78321\nf 78313 78314 78323\nf 78313 78323 78322\nf 78314 78324 78323\nf 78314 82364 82373\nf 78314 82373 82379\nf 78314 82379 78324\nf 78315 78318 78326\nf 78315 78326 82377\nf 78315 82371 82370\nf 78315 82377 82371\nf 78316 78317 78318\nf 78317 78325 78326\nf 78317 78326 78318\nf 78319 78321 78320\nf 78320 78321 78327\nf 78321 78322 78329\nf 78321 78329 78327\nf 78322 78323 78329\nf 78323 78324 78330\nf 78323 78330 78329\nf 78324 78331 78330\nf 78324 82379 82386\nf 78324 82386 78331\nf 78325 78333 78335\nf 78325 78335 78326\nf 78326 78332 82383\nf 78326 78335 78332\nf 78326 82383 82377\nf 78327 78329 78328\nf 78328 78329 78336\nf 78329 78330 78337\nf 78329 78337 78336\nf 78330 78331 78337\nf 78331 78338 78337\nf 78331 78339 78338\nf 78331 82386 82387\nf 78331 82387 78339\nf 78332 78335 78342\nf 78332 78340 82390\nf 78332 78342 78340\nf 78332 82384 82383\nf 78332 82390 82384\nf 78333 78334 78335\nf 78334 78341 78342\nf 78334 78342 78335\nf 78336 78337 78343\nf 78337 78338 78345\nf 78337 78345 78343\nf 78338 78339 78346\nf 78338 78346 78345\nf 78339 78347 78346\nf 78339 78348 78347\nf 78339 82387 82393\nf 78339 82393 82395\nf 78339 82395 78348\nf 78340 78342 78349\nf 78340 78348 82394\nf 78340 78349 78348\nf 78340 82391 82390\nf 78340 82394 82391\nf 78341 78350 78351\nf 78341 78351 78342\nf 78342 78351 78349\nf 78343 78345 78344\nf 78344 78345 78352\nf 78345 78346 78354\nf 78345 78354 78352\nf 78346 78347 78354\nf 78347 78348 78355\nf 78347 78355 78354\nf 78348 78349 78356\nf 78348 78356 78355\nf 78348 82395 82394\nf 78349 78351 78357\nf 78349 78357 78356\nf 78350 78358 78360\nf 78350 78360 78351\nf 78351 78360 78357\nf 78352 78354 78353\nf 78353 78354 78361\nf 78354 78355 78363\nf 78354 78363 78361\nf 78355 78356 78363\nf 78356 78357 78365\nf 78356 78365 78363\nf 78357 78360 78368\nf 78357 78368 78365\nf 78358 78359 78360\nf 78359 78366 78368\nf 78359 78368 78360\nf 78361 78363 78362\nf 78362 78363 78364\nf 78363 78365 78364\nf 78364 78365 78367\nf 78365 78368 78367\nf 78366 78367 78368\nf 78369 78370 78380\nf 78369 78379 78377\nf 78369 78380 78379\nf 78370 78371 78381\nf 78370 78381 78380\nf 78371 78372 78382\nf 78371 78382 78381\nf 78372 78373 78383\nf 78372 78383 78382\nf 78373 78374 78384\nf 78373 78384 78383\nf 78374 78375 78385\nf 78374 78385 78384\nf 78375 78376 78387\nf 78375 78387 78385\nf 78376 78386 78387\nf 78377 78379 78378\nf 78378 78379 78396\nf 78378 78396 78395\nf 78379 78380 78397\nf 78379 78397 78396\nf 78380 78381 78398\nf 78380 78398 78397\nf 78381 78382 78399\nf 78381 78399 78398\nf 78382 78383 78400\nf 78382 78400 78399\nf 78383 78384 78401\nf 78383 78401 78400\nf 78384 78385 78402\nf 78384 78402 78401\nf 78385 78387 78403\nf 78385 78403 78402\nf 78386 78388 78405\nf 78386 78405 78387\nf 78387 78404 78403\nf 78387 78405 78404\nf 78388 78389 78406\nf 78388 78406 78405\nf 78389 78390 78408\nf 78389 78408 78406\nf 78390 78407 78408\nf 78391 78392 78412\nf 78391 78411 78409\nf 78391 78412 78411\nf 78392 78393 78413\nf 78392 78413 78412\nf 78393 78394 78415\nf 78393 78415 78413\nf 78394 78414 78415\nf 78395 78396 78418\nf 78396 78397 78419\nf 78396 78419 78418\nf 78397 78398 78420\nf 78397 78420 78419\nf 78398 78399 82397\nf 78398 82397 82399\nf 78398 82399 78420\nf 78399 78400 78421\nf 78399 78421 82398\nf 78399 82398 82397\nf 78400 78401 78421\nf 78401 78402 78422\nf 78401 78422 78421\nf 78402 78403 78423\nf 78402 78423 78422\nf 78403 78404 78424\nf 78403 78424 78423\nf 78404 78405 78425\nf 78404 78425 78424\nf 78405 78406 78426\nf 78405 78426 78425\nf 78406 78408 78427\nf 78406 78427 78426\nf 78407 78428 78429\nf 78407 78429 78408\nf 78408 78429 78427\nf 78409 78411 78410\nf 78410 78411 78431\nf 78410 78431 78430\nf 78411 78412 78432\nf 78411 78432 78431\nf 78412 78413 78433\nf 78412 78433 78432\nf 78413 78415 78434\nf 78413 78434 78433\nf 78414 78416 78436\nf 78414 78436 78415\nf 78415 78435 78434\nf 78415 78436 78435\nf 78416 78417 78438\nf 78416 78438 78436\nf 78417 78437 78438\nf 78418 78419 78440\nf 78419 78420 78442\nf 78419 78442 78440\nf 78420 78443 78442\nf 78420 82399 82403\nf 78420 82403 78443\nf 78421 78422 78444\nf 78421 78444 82401\nf 78421 82401 82398\nf 78422 78423 78445\nf 78422 78445 78444\nf 78423 78424 78446\nf 78423 78446 78445\nf 78424 78425 78447\nf 78424 78447 78446\nf 78425 78426 78448\nf 78425 78448 78447\nf 78426 78427 78449\nf 78426 78449 78448\nf 78427 78429 78450\nf 78427 78450 78449\nf 78428 78451 78452\nf 78428 78452 78429\nf 78429 78452 78450\nf 78430 78431 78453\nf 78431 78432 78454\nf 78431 78454 78453\nf 78432 78433 78455\nf 78432 78455 78454\nf 78433 78434 78456\nf 78433 78456 78455\nf 78434 78435 78457\nf 78434 78457 78456\nf 78435 78436 78458\nf 78435 78458 78457\nf 78436 78438 78459\nf 78436 78459 78458\nf 78437 78439 78462\nf 78437 78462 78438\nf 78438 78460 78459\nf 78438 78462 78460\nf 78439 78461 78462\nf 78440 78442 78441\nf 78441 78442 78465\nf 78441 78465 78464\nf 78442 78443 78466\nf 78442 78466 78465\nf 78443 82403 82404\nf 78443 82404 82408\nf 78443 82408 78466\nf 78444 78445 78467\nf 78444 78467 82406\nf 78444 82406 82401\nf 78445 78446 78468\nf 78445 78468 78467\nf 78446 78447 78469\nf 78446 78469 78468\nf 78447 78448 78470\nf 78447 78470 78469\nf 78448 78449 78471\nf 78448 78471 78470\nf 78449 78450 78472\nf 78449 78472 78471\nf 78450 78452 78473\nf 78450 78473 78472\nf 78451 78474 78475\nf 78451 78475 78452\nf 78452 78475 78473\nf 78453 78454 78476\nf 78454 78455 78477\nf 78454 78477 78476\nf 78455 78456 78478\nf 78455 78478 78477\nf 78456 78457 78479\nf 78456 78479 78478\nf 78457 78458 78480\nf 78457 78480 78479\nf 78458 78459 78481\nf 78458 78481 78480\nf 78459 78460 78482\nf 78459 78482 78481\nf 78460 78462 78483\nf 78460 78483 78482\nf 78461 78463 78486\nf 78461 78486 78462\nf 78462 78484 78483\nf 78462 78486 78484\nf 78463 78485 78486\nf 78464 78465 78487\nf 78465 78466 78488\nf 78465 78488 78487\nf 78466 78489 78488\nf 78466 82408 82413\nf 78466 82413 78489\nf 78467 78468 78490\nf 78467 78490 82411\nf 78467 82411 82406\nf 78468 78469 78491\nf 78468 78491 78490\nf 78469 78470 78492\nf 78469 78492 78491\nf 78470 78471 78493\nf 78470 78493 78492\nf 78471 78472 78494\nf 78471 78494 78493\nf 78472 78473 78495\nf 78472 78495 78494\nf 78473 78475 78496\nf 78473 78496 78495\nf 78474 78497 78498\nf 78474 78498 78475\nf 78475 78498 78496\nf 78476 78477 78499\nf 78477 78478 78500\nf 78477 78500 78499\nf 78478 78479 78501\nf 78478 78501 78500\nf 78479 78480 78502\nf 78479 78502 78501\nf 78480 78481 78503\nf 78480 78503 78502\nf 78481 78482 78504\nf 78481 78504 78503\nf 78482 78483 78505\nf 78482 78505 78504\nf 78483 78484 78506\nf 78483 78506 78505\nf 78484 78486 78507\nf 78484 78507 78506\nf 78485 78508 78509\nf 78485 78509 78486\nf 78486 78509 78507\nf 78487 78488 78510\nf 78488 78489 78511\nf 78488 78511 78510\nf 78489 78512 78511\nf 78489 82413 82418\nf 78489 82418 78512\nf 78490 78491 78513\nf 78490 78513 82416\nf 78490 82416 82411\nf 78491 78492 78514\nf 78491 78514 78513\nf 78492 78493 78515\nf 78492 78515 78514\nf 78493 78494 78516\nf 78493 78516 78515\nf 78494 78495 78517\nf 78494 78517 78516\nf 78495 78496 78518\nf 78495 78518 78517\nf 78496 78498 78519\nf 78496 78519 78518\nf 78497 78520 78521\nf 78497 78521 78498\nf 78498 78521 78519\nf 78499 78500 78522\nf 78500 78501 78523\nf 78500 78523 78522\nf 78501 78502 78524\nf 78501 78524 78523\nf 78502 78503 78525\nf 78502 78525 78524\nf 78503 78504 78526\nf 78503 78526 78525\nf 78504 78505 78527\nf 78504 78527 78526\nf 78505 78506 78528\nf 78505 78528 78527\nf 78506 78507 78529\nf 78506 78529 78528\nf 78507 78509 78530\nf 78507 78530 78529\nf 78508 78531 78532\nf 78508 78532 78509\nf 78509 78532 78530\nf 78510 78511 78533\nf 78511 78512 78534\nf 78511 78534 78533\nf 78512 78535 78534\nf 78512 82418 82423\nf 78512 82423 78535\nf 78513 78514 78536\nf 78513 78536 82421\nf 78513 82421 82416\nf 78514 78515 78537\nf 78514 78537 78536\nf 78515 78516 78538\nf 78515 78538 78537\nf 78516 78517 78539\nf 78516 78539 78538\nf 78517 78518 78540\nf 78517 78540 78539\nf 78518 78519 78541\nf 78518 78541 78540\nf 78519 78521 78542\nf 78519 78542 78541\nf 78520 78543 78544\nf 78520 78544 78521\nf 78521 78544 78542\nf 78522 78523 78545\nf 78523 78524 78546\nf 78523 78546 78545\nf 78524 78525 78547\nf 78524 78547 78546\nf 78525 78526 78548\nf 78525 78548 78547\nf 78526 78527 78549\nf 78526 78549 78548\nf 78527 78528 78550\nf 78527 78550 78549\nf 78528 78529 78551\nf 78528 78551 78550\nf 78529 78530 78552\nf 78529 78552 78551\nf 78530 78532 78553\nf 78530 78553 78552\nf 78531 78554 78555\nf 78531 78555 78532\nf 78532 78555 78553\nf 78533 78534 78557\nf 78534 78535 78558\nf 78534 78558 78557\nf 78535 78559 78558\nf 78535 82423 82428\nf 78535 82428 78559\nf 78536 78537 78560\nf 78536 78560 82426\nf 78536 82426 82421\nf 78537 78538 78561\nf 78537 78561 78560\nf 78538 78539 78562\nf 78538 78562 78561\nf 78539 78540 78563\nf 78539 78563 78562\nf 78540 78541 78564\nf 78540 78564 78563\nf 78541 78542 78565\nf 78541 78565 78564\nf 78542 78544 78566\nf 78542 78566 78565\nf 78543 78567 78568\nf 78543 78568 78544\nf 78544 78568 78566\nf 78545 78546 78569\nf 78546 78547 78570\nf 78546 78570 78569\nf 78547 78548 78571\nf 78547 78571 78570\nf 78548 78549 78572\nf 78548 78572 78571\nf 78549 78550 78573\nf 78549 78573 78572\nf 78550 78551 78574\nf 78550 78574 78573\nf 78551 78552 78575\nf 78551 78575 78574\nf 78552 78553 78576\nf 78552 78576 78575\nf 78553 78555 78577\nf 78553 78577 78576\nf 78554 78556 78580\nf 78554 78580 78555\nf 78555 78578 78577\nf 78555 78580 78578\nf 78556 78579 78580\nf 78557 78558 78581\nf 78558 78559 78582\nf 78558 78582 78581\nf 78559 78583 78582\nf 78559 78584 78583\nf 78559 82428 82429\nf 78559 82429 78584\nf 78560 78561 78585\nf 78560 78585 82432\nf 78560 82432 82426\nf 78561 78562 78586\nf 78561 78586 78585\nf 78562 78563 78587\nf 78562 78587 78586\nf 78563 78564 78588\nf 78563 78588 78587\nf 78564 78565 78589\nf 78564 78589 78588\nf 78565 78566 78590\nf 78565 78590 78589\nf 78566 78568 78591\nf 78566 78591 78590\nf 78567 78592 78593\nf 78567 78593 78568\nf 78568 78593 78591\nf 78569 78570 78594\nf 78570 78571 78595\nf 78570 78595 78594\nf 78571 78572 78596\nf 78571 78596 78595\nf 78572 78573 78597\nf 78572 78597 78596\nf 78573 78574 78598\nf 78573 78598 78597\nf 78574 78575 78599\nf 78574 78599 78598\nf 78575 78576 78600\nf 78575 78600 78599\nf 78576 78577 78601\nf 78576 78601 78600\nf 78577 78578 78602\nf 78577 78602 78601\nf 78578 78580 78603\nf 78578 78603 78602\nf 78579 78604 78605\nf 78579 78605 78580\nf 78580 78605 78603\nf 78581 78582 78606\nf 78582 78583 78607\nf 78582 78607 78606\nf 78583 78584 78608\nf 78583 78608 78607\nf 78584 78609 78608\nf 78584 82429 82434\nf 78584 82434 82438\nf 78584 82438 78609\nf 78585 78586 78610\nf 78585 78610 82436\nf 78585 82436 82432\nf 78586 78587 78611\nf 78586 78611 78610\nf 78587 78588 78612\nf 78587 78612 78611\nf 78588 78589 78613\nf 78588 78613 78612\nf 78589 78590 78614\nf 78589 78614 78613\nf 78590 78591 78615\nf 78590 78615 78614\nf 78591 78593 78616\nf 78591 78616 78615\nf 78592 78617 78618\nf 78592 78618 78593\nf 78593 78618 78616\nf 78594 78595 78620\nf 78595 78596 78621\nf 78595 78621 78620\nf 78596 78597 78622\nf 78596 78622 78621\nf 78597 78598 78623\nf 78597 78623 78622\nf 78598 78599 78624\nf 78598 78624 78623\nf 78599 78600 78625\nf 78599 78625 78624\nf 78600 78601 78626\nf 78600 78626 78625\nf 78601 78602 78627\nf 78601 78627 78626\nf 78602 78603 78628\nf 78602 78628 78627\nf 78603 78605 78629\nf 78603 78629 78628\nf 78604 78630 78631\nf 78604 78631 78605\nf 78605 78631 78629\nf 78606 78607 78632\nf 78607 78608 78633\nf 78607 78633 78632\nf 78608 78609 78634\nf 78608 78634 78633\nf 78609 78635 78634\nf 78609 82438 82443\nf 78609 82443 78635\nf 78610 78611 78636\nf 78610 78636 82442\nf 78610 82440 82436\nf 78610 82442 82440\nf 78611 78612 78636\nf 78612 78613 78637\nf 78612 78637 78636\nf 78613 78614 78638\nf 78613 78638 78637\nf 78614 78615 78639\nf 78614 78639 78638\nf 78615 78616 78640\nf 78615 78640 78639\nf 78616 78618 78641\nf 78616 78641 78640\nf 78617 78619 78644\nf 78617 78644 78618\nf 78618 78642 78641\nf 78618 78644 78642\nf 78619 78643 78644\nf 78620 78621 78645\nf 78621 78622 78646\nf 78621 78646 78645\nf 78622 78623 78647\nf 78622 78647 78646\nf 78623 78624 78648\nf 78623 78648 78647\nf 78624 78625 78649\nf 78624 78649 78648\nf 78625 78626 78650\nf 78625 78650 78649\nf 78626 78627 78651\nf 78626 78651 78650\nf 78627 78628 78652\nf 78627 78652 78651\nf 78628 78629 78653\nf 78628 78653 78652\nf 78629 78631 78654\nf 78629 78654 78653\nf 78630 78655 78656\nf 78630 78656 78631\nf 78631 78656 78654\nf 78632 78633 78657\nf 78633 78634 78658\nf 78633 78658 78657\nf 78634 78635 78659\nf 78634 78659 78658\nf 78635 78660 78659\nf 78635 82443 82448\nf 78635 82448 78660\nf 78636 78637 78661\nf 78636 78661 82446\nf 78636 82446 82442\nf 78637 78638 78662\nf 78637 78662 78661\nf 78638 78639 78663\nf 78638 78663 78662\nf 78639 78640 78664\nf 78639 78664 78663\nf 78640 78641 78665\nf 78640 78665 78664\nf 78641 78642 78666\nf 78641 78666 78665\nf 78642 78644 78667\nf 78642 78667 78666\nf 78643 78668 78669\nf 78643 78669 78644\nf 78644 78669 78667\nf 78645 78646 78670\nf 78646 78647 78672\nf 78646 78672 78670\nf 78647 78648 78673\nf 78647 78673 78672\nf 78648 78649 78674\nf 78648 78674 78673\nf 78649 78650 78675\nf 78649 78675 78674\nf 78650 78651 78676\nf 78650 78676 78675\nf 78651 78652 78677\nf 78651 78677 78676\nf 78652 78653 78678\nf 78652 78678 78677\nf 78653 78654 78679\nf 78653 78679 78678\nf 78654 78656 78680\nf 78654 78680 78679\nf 78655 78681 78682\nf 78655 78682 78656\nf 78656 78682 78680\nf 78657 78658 78683\nf 78658 78659 78684\nf 78658 78684 78683\nf 78659 78660 78685\nf 78659 78685 78684\nf 78660 78686 78685\nf 78660 82448 82453\nf 78660 82453 78686\nf 78661 78662 78687\nf 78661 78687 82451\nf 78661 82451 82446\nf 78662 78663 78688\nf 78662 78688 78687\nf 78663 78664 78689\nf 78663 78689 78688\nf 78664 78665 78690\nf 78664 78690 78689\nf 78665 78666 78691\nf 78665 78691 78690\nf 78666 78667 78692\nf 78666 78692 78691\nf 78667 78669 78693\nf 78667 78693 78692\nf 78668 78694 78695\nf 78668 78695 78669\nf 78669 78695 78693\nf 78670 78672 78671\nf 78671 78672 78696\nf 78672 78673 78698\nf 78672 78698 78696\nf 78673 78674 78698\nf 78674 78675 78699\nf 78674 78699 78698\nf 78675 78676 78700\nf 78675 78700 78699\nf 78676 78677 78701\nf 78676 78701 78700\nf 78677 78678 78702\nf 78677 78702 78701\nf 78678 78679 78703\nf 78678 78703 78702\nf 78679 78680 78704\nf 78679 78704 78703\nf 78680 78682 78705\nf 78680 78705 78704\nf 78681 78706 78707\nf 78681 78707 78682\nf 78682 78707 78705\nf 78683 78684 78708\nf 78684 78685 78709\nf 78684 78709 78708\nf 78685 78686 78710\nf 78685 78710 78709\nf 78686 78711 78710\nf 78686 82453 82458\nf 78686 82458 78711\nf 78687 78688 78712\nf 78687 78712 82456\nf 78687 82456 82451\nf 78688 78689 78713\nf 78688 78713 78712\nf 78689 78690 78714\nf 78689 78714 78713\nf 78690 78691 78715\nf 78690 78715 78714\nf 78691 78692 78716\nf 78691 78716 78715\nf 78692 78693 78717\nf 78692 78717 78716\nf 78693 78695 78718\nf 78693 78718 78717\nf 78694 78719 78720\nf 78694 78720 78695\nf 78695 78720 78718\nf 78696 78698 78697\nf 78697 78698 78722\nf 78697 78722 78721\nf 78698 78699 78723\nf 78698 78723 78722\nf 78699 78700 78724\nf 78699 78724 78723\nf 78700 78701 78725\nf 78700 78725 78724\nf 78701 78702 78726\nf 78701 78726 78725\nf 78702 78703 78727\nf 78702 78727 78726\nf 78703 78704 78728\nf 78703 78728 78727\nf 78704 78705 78729\nf 78704 78729 78728\nf 78705 78707 78730\nf 78705 78730 78729\nf 78706 78731 78732\nf 78706 78732 78707\nf 78707 78732 78730\nf 78708 78709 78733\nf 78709 78710 78734\nf 78709 78734 78733\nf 78710 78711 78735\nf 78710 78735 78734\nf 78711 78736 78735\nf 78711 82458 82463\nf 78711 82463 78736\nf 78712 78713 78737\nf 78712 78737 82461\nf 78712 82461 82456\nf 78713 78714 78738\nf 78713 78738 78737\nf 78714 78715 78739\nf 78714 78739 78738\nf 78715 78716 78740\nf 78715 78740 78739\nf 78716 78717 78741\nf 78716 78741 78740\nf 78717 78718 78742\nf 78717 78742 78741\nf 78718 78720 78743\nf 78718 78743 78742\nf 78719 78744 78746\nf 78719 78746 78720\nf 78720 78746 78743\nf 78721 78722 78747\nf 78722 78723 78749\nf 78722 78749 78747\nf 78723 78724 78750\nf 78723 78750 78749\nf 78724 78725 78751\nf 78724 78751 78750\nf 78725 78726 78752\nf 78725 78752 78751\nf 78726 78727 78753\nf 78726 78753 78752\nf 78727 78728 78754\nf 78727 78754 78753\nf 78728 78729 78755\nf 78728 78755 78754\nf 78729 78730 78756\nf 78729 78756 78755\nf 78730 78732 78757\nf 78730 78757 78756\nf 78731 78758 78759\nf 78731 78759 78732\nf 78732 78759 78757\nf 78733 78734 78760\nf 78734 78735 78761\nf 78734 78761 78760\nf 78735 78736 78762\nf 78735 78762 78761\nf 78736 78763 78762\nf 78736 82463 82468\nf 78736 82468 78763\nf 78737 78738 78764\nf 78737 78764 82466\nf 78737 82466 82461\nf 78738 78739 78765\nf 78738 78765 78764\nf 78739 78740 78766\nf 78739 78766 78765\nf 78740 78741 78767\nf 78740 78767 78766\nf 78741 78742 78768\nf 78741 78768 78767\nf 78742 78743 78769\nf 78742 78769 78768\nf 78743 78746 78771\nf 78743 78771 78769\nf 78744 78745 78746\nf 78745 78770 78771\nf 78745 78771 78746\nf 78747 78749 78748\nf 78748 78749 78772\nf 78749 78750 78773\nf 78749 78773 78772\nf 78750 78751 78773\nf 78751 78752 78774\nf 78751 78774 78773\nf 78752 78753 78775\nf 78752 78775 78774\nf 78753 78754 78776\nf 78753 78776 78775\nf 78754 78755 78777\nf 78754 78777 78776\nf 78755 78756 78778\nf 78755 78778 78777\nf 78756 78757 78779\nf 78756 78779 78778\nf 78757 78759 78780\nf 78757 78780 78779\nf 78758 78781 78782\nf 78758 78782 78759\nf 78759 78782 78780\nf 78760 78761 78783\nf 78761 78762 78784\nf 78761 78784 78783\nf 78762 78763 78785\nf 78762 78785 78784\nf 78763 78786 78785\nf 78763 82468 82474\nf 78763 82474 78786\nf 78764 78765 78788\nf 78764 78787 82471\nf 78764 78788 78787\nf 78764 82471 82466\nf 78765 78766 78789\nf 78765 78789 78788\nf 78766 78767 78790\nf 78766 78790 78789\nf 78767 78768 78791\nf 78767 78791 78790\nf 78768 78769 78792\nf 78768 78792 78791\nf 78769 78771 78793\nf 78769 78793 78792\nf 78770 78794 78795\nf 78770 78795 78771\nf 78771 78795 78793\nf 78772 78773 78796\nf 78773 78774 78797\nf 78773 78797 78796\nf 78774 78775 78798\nf 78774 78798 78797\nf 78775 78776 78799\nf 78775 78799 78798\nf 78776 78777 78800\nf 78776 78800 78799\nf 78777 78778 78801\nf 78777 78801 78800\nf 78778 78779 78802\nf 78778 78802 78801\nf 78779 78780 78803\nf 78779 78803 78802\nf 78780 78782 78804\nf 78780 78804 78803\nf 78781 78805 78806\nf 78781 78806 78782\nf 78782 78806 78804\nf 78783 78784 78807\nf 78784 78785 78808\nf 78784 78808 78807\nf 78785 78786 78809\nf 78785 78809 78808\nf 78786 78810 78809\nf 78786 82474 82478\nf 78786 82478 78810\nf 78787 78788 78811\nf 78787 78811 82476\nf 78787 82472 82471\nf 78787 82476 82472\nf 78788 78789 78812\nf 78788 78812 78811\nf 78789 78790 78813\nf 78789 78813 78812\nf 78790 78791 78814\nf 78790 78814 78813\nf 78791 78792 78815\nf 78791 78815 78814\nf 78792 78793 78816\nf 78792 78816 78815\nf 78793 78795 78817\nf 78793 78817 78816\nf 78794 78818 78819\nf 78794 78819 78795\nf 78795 78819 78817\nf 78796 78797 78820\nf 78797 78798 78821\nf 78797 78821 78820\nf 78798 78799 78822\nf 78798 78822 78821\nf 78799 78800 78823\nf 78799 78823 78822\nf 78800 78801 78824\nf 78800 78824 78823\nf 78801 78802 78825\nf 78801 78825 78824\nf 78802 78803 78826\nf 78802 78826 78825\nf 78803 78804 78827\nf 78803 78827 78826\nf 78804 78806 78828\nf 78804 78828 78827\nf 78805 78829 78830\nf 78805 78830 78806\nf 78806 78830 78828\nf 78807 78808 78831\nf 78808 78809 78832\nf 78808 78832 78831\nf 78809 78810 78833\nf 78809 78833 78832\nf 78810 82478 82479\nf 78810 82479 82483\nf 78810 82483 78833\nf 78811 78812 78834\nf 78811 78834 82481\nf 78811 82481 82476\nf 78812 78813 78835\nf 78812 78835 78834\nf 78813 78814 78836\nf 78813 78836 78835\nf 78814 78815 78837\nf 78814 78837 78836\nf 78815 78816 78838\nf 78815 78838 78837\nf 78816 78817 78839\nf 78816 78839 78838\nf 78817 78819 78840\nf 78817 78840 78839\nf 78818 78841 78842\nf 78818 78842 78819\nf 78819 78842 78840\nf 78820 78821 78843\nf 78821 78822 78845\nf 78821 78845 78843\nf 78822 78823 78846\nf 78822 78846 78845\nf 78823 78824 78847\nf 78823 78847 78846\nf 78824 78825 78848\nf 78824 78848 78847\nf 78825 78826 78849\nf 78825 78849 78848\nf 78826 78827 78850\nf 78826 78850 78849\nf 78827 78828 78851\nf 78827 78851 78850\nf 78828 78830 78852\nf 78828 78852 78851\nf 78829 78853 78854\nf 78829 78854 78830\nf 78830 78854 78852\nf 78831 78832 78855\nf 78832 78833 78856\nf 78832 78856 78855\nf 78833 78857 78856\nf 78833 82483 82488\nf 78833 82488 78857\nf 78834 78835 78858\nf 78834 78858 82486\nf 78834 82486 82481\nf 78835 78836 78859\nf 78835 78859 78858\nf 78836 78837 78860\nf 78836 78860 78859\nf 78837 78838 78861\nf 78837 78861 78860\nf 78838 78839 78862\nf 78838 78862 78861\nf 78839 78840 78863\nf 78839 78863 78862\nf 78840 78842 78864\nf 78840 78864 78863\nf 78841 78865 78866\nf 78841 78866 78842\nf 78842 78866 78864\nf 78843 78845 78844\nf 78844 78845 78868\nf 78844 78868 78867\nf 78845 78846 78869\nf 78845 78869 78868\nf 78846 78847 78870\nf 78846 78870 78869\nf 78847 78848 78871\nf 78847 78871 78870\nf 78848 78849 78872\nf 78848 78872 78871\nf 78849 78850 78873\nf 78849 78873 78872\nf 78850 78851 78874\nf 78850 78874 78873\nf 78851 78852 78875\nf 78851 78875 78874\nf 78852 78854 78876\nf 78852 78876 78875\nf 78853 78877 78879\nf 78853 78879 78854\nf 78854 78879 78876\nf 78855 78856 78880\nf 78856 78857 78881\nf 78856 78881 78880\nf 78857 78882 78881\nf 78857 82488 82493\nf 78857 82493 78882\nf 78858 78859 78883\nf 78858 78883 82491\nf 78858 82491 82486\nf 78859 78860 78884\nf 78859 78884 78883\nf 78860 78861 78885\nf 78860 78885 78884\nf 78861 78862 78886\nf 78861 78886 78885\nf 78862 78863 78887\nf 78862 78887 78886\nf 78863 78864 78888\nf 78863 78888 78887\nf 78864 78866 78889\nf 78864 78889 78888\nf 78865 78890 78891\nf 78865 78891 78866\nf 78866 78891 78889\nf 78867 78868 78892\nf 78868 78869 78893\nf 78868 78893 78892\nf 78869 78870 78894\nf 78869 78894 78893\nf 78870 78871 78895\nf 78870 78895 78894\nf 78871 78872 78896\nf 78871 78896 78895\nf 78872 78873 78897\nf 78872 78897 78896\nf 78873 78874 78898\nf 78873 78898 78897\nf 78874 78875 78899\nf 78874 78899 78898\nf 78875 78876 78900\nf 78875 78900 78899\nf 78876 78879 78902\nf 78876 78902 78900\nf 78877 78878 78879\nf 78878 78901 78902\nf 78878 78902 78879\nf 78880 78881 78903\nf 78881 78882 78904\nf 78881 78904 78903\nf 78882 78905 78904\nf 78882 82493 82498\nf 78882 82498 78905\nf 78883 78884 78906\nf 78883 78906 82496\nf 78883 82496 82491\nf 78884 78885 78907\nf 78884 78907 78906\nf 78885 78886 78908\nf 78885 78908 78907\nf 78886 78887 78909\nf 78886 78909 78908\nf 78887 78888 78910\nf 78887 78910 78909\nf 78888 78889 78911\nf 78888 78911 78910\nf 78889 78891 78912\nf 78889 78912 78911\nf 78890 78913 78914\nf 78890 78914 78891\nf 78891 78914 78912\nf 78892 78893 78915\nf 78893 78894 78916\nf 78893 78916 78915\nf 78894 78895 78917\nf 78894 78917 78916\nf 78895 78896 78918\nf 78895 78918 78917\nf 78896 78897 78919\nf 78896 78919 78918\nf 78897 78898 78920\nf 78897 78920 78919\nf 78898 78899 78921\nf 78898 78921 78920\nf 78899 78900 78922\nf 78899 78922 78921\nf 78900 78902 78923\nf 78900 78923 78922\nf 78901 78924 78925\nf 78901 78925 78902\nf 78902 78925 78923\nf 78903 78904 78927\nf 78904 78905 78929\nf 78904 78929 78927\nf 78905 78930 78929\nf 78905 82498 82504\nf 78905 82504 78930\nf 78906 78907 78931\nf 78906 78931 82503\nf 78906 82501 82496\nf 78906 82503 82501\nf 78907 78908 78931\nf 78908 78909 78932\nf 78908 78932 78931\nf 78909 78910 78933\nf 78909 78933 78932\nf 78910 78911 78934\nf 78910 78934 78933\nf 78911 78912 78935\nf 78911 78935 78934\nf 78912 78914 78936\nf 78912 78936 78935\nf 78913 78937 78938\nf 78913 78938 78914\nf 78914 78938 78936\nf 78915 78916 78939\nf 78916 78917 78940\nf 78916 78940 78939\nf 78917 78918 78941\nf 78917 78941 78940\nf 78918 78919 78942\nf 78918 78942 78941\nf 78919 78920 78943\nf 78919 78943 78942\nf 78920 78921 78944\nf 78920 78944 78943\nf 78921 78922 78945\nf 78921 78945 78944\nf 78922 78923 78946\nf 78922 78946 78945\nf 78923 78925 78947\nf 78923 78947 78946\nf 78924 78926 78950\nf 78924 78950 78925\nf 78925 78948 78947\nf 78925 78950 78948\nf 78926 78949 78950\nf 78927 78929 78928\nf 78928 78929 78960\nf 78928 78960 78959\nf 78929 78930 78961\nf 78929 78961 78960\nf 78930 78962 78961\nf 78930 82504 82510\nf 78930 82510 78962\nf 78931 78932 78963\nf 78931 78963 82508\nf 78931 82508 82503\nf 78932 78933 78964\nf 78932 78964 78963\nf 78933 78934 78965\nf 78933 78965 78964\nf 78934 78935 78966\nf 78934 78966 78965\nf 78935 78936 78967\nf 78935 78967 78966\nf 78936 78938 78968\nf 78936 78968 78967\nf 78937 78969 78970\nf 78937 78970 78938\nf 78938 78970 78968\nf 78939 78940 78971\nf 78940 78941 78972\nf 78940 78972 78971\nf 78941 78942 78973\nf 78941 78973 78972\nf 78942 78943 78974\nf 78942 78974 78973\nf 78943 78944 78975\nf 78943 78975 78974\nf 78944 78945 78976\nf 78944 78976 78975\nf 78945 78946 78977\nf 78945 78977 78976\nf 78946 78947 78978\nf 78946 78978 78977\nf 78947 78948 78979\nf 78947 78979 78978\nf 78948 78950 78980\nf 78948 78980 78979\nf 78949 78981 78982\nf 78949 78982 78950\nf 78950 78982 78980\nf 78951 78952 78997\nf 78951 78996 78994\nf 78951 78997 78996\nf 78952 78953 78998\nf 78952 78998 78997\nf 78953 78954 78999\nf 78953 78999 78998\nf 78954 78955 79000\nf 78954 79000 78999\nf 78955 78956 79001\nf 78955 79001 79000\nf 78956 78957 79002\nf 78956 79002 79001\nf 78957 78958 79004\nf 78957 79004 79002\nf 78958 79003 79004\nf 78959 78960 79038\nf 78960 78961 79040\nf 78960 79040 79038\nf 78961 78962 79041\nf 78961 79041 79040\nf 78962 79042 79041\nf 78962 79043 79042\nf 78962 82510 82511\nf 78962 82511 79043\nf 78963 78964 79044\nf 78963 79044 82515\nf 78963 82515 82508\nf 78964 78965 79045\nf 78964 79045 79044\nf 78965 78966 79046\nf 78965 79046 79045\nf 78966 78967 79047\nf 78966 79047 79046\nf 78967 78968 79048\nf 78967 79048 79047\nf 78968 78970 79049\nf 78968 79049 79048\nf 78969 79050 79051\nf 78969 79051 78970\nf 78970 79051 79049\nf 78971 78972 79052\nf 78972 78973 79053\nf 78972 79053 79052\nf 78973 78974 79054\nf 78973 79054 79053\nf 78974 78975 79055\nf 78974 79055 79054\nf 78975 78976 79056\nf 78975 79056 79055\nf 78976 78977 79057\nf 78976 79057 79056\nf 78977 78978 79058\nf 78977 79058 79057\nf 78978 78979 79059\nf 78978 79059 79058\nf 78979 78980 79060\nf 78979 79060 79059\nf 78980 78982 79061\nf 78980 79061 79060\nf 78981 79062 79063\nf 78981 79063 78982\nf 78982 79063 79061\nf 78983 78984 79073\nf 78983 79071 79069\nf 78983 79073 79071\nf 78984 79072 79073\nf 78985 78986 79080\nf 78985 79079 79077\nf 78985 79080 79079\nf 78986 78987 79081\nf 78986 79081 79080\nf 78987 78988 79082\nf 78987 79082 79081\nf 78988 78989 79083\nf 78988 79083 79082\nf 78989 78990 79084\nf 78989 79084 79083\nf 78990 78991 79085\nf 78990 79085 79084\nf 78991 78992 79086\nf 78991 79086 79085\nf 78992 78993 79087\nf 78992 79087 79086\nf 78993 78995 79088\nf 78993 79088 79087\nf 78994 78996 78995\nf 78995 78996 79088\nf 78996 78997 79089\nf 78996 79089 79088\nf 78997 78998 79090\nf 78997 79090 79089\nf 78998 78999 79091\nf 78998 79091 79090\nf 78999 79000 79092\nf 78999 79092 79091\nf 79000 79001 79093\nf 79000 79093 79092\nf 79001 79002 79094\nf 79001 79094 79093\nf 79002 79004 79095\nf 79002 79095 79094\nf 79003 79005 79097\nf 79003 79097 79004\nf 79004 79096 79095\nf 79004 79097 79096\nf 79005 79006 79098\nf 79005 79098 79097\nf 79006 79007 79099\nf 79006 79099 79098\nf 79007 79008 79100\nf 79007 79100 79099\nf 79008 79009 79101\nf 79008 79101 79100\nf 79009 79010 79102\nf 79009 79102 79101\nf 79010 79011 79103\nf 79010 79103 79102\nf 79011 79012 79104\nf 79011 79104 79103\nf 79012 79013 79105\nf 79012 79105 79104\nf 79013 79014 79106\nf 79013 79106 79105\nf 79014 79015 79107\nf 79014 79107 79106\nf 79015 79016 79109\nf 79015 79109 79107\nf 79016 79108 79109\nf 79017 79018 79122\nf 79017 79121 79119\nf 79017 79122 79121\nf 79018 79019 79123\nf 79018 79123 79122\nf 79019 79020 79124\nf 79019 79124 79123\nf 79020 79021 79125\nf 79020 79125 79124\nf 79021 79022 79126\nf 79021 79126 79125\nf 79022 79023 79127\nf 79022 79127 79126\nf 79023 79024 79128\nf 79023 79128 79127\nf 79024 79025 79129\nf 79024 79129 79128\nf 79025 79026 79130\nf 79025 79130 79129\nf 79026 79027 79131\nf 79026 79131 79130\nf 79027 79028 79132\nf 79027 79132 79131\nf 79028 79029 79133\nf 79028 79133 79132\nf 79029 79030 79134\nf 79029 79134 79133\nf 79030 79031 79135\nf 79030 79135 79134\nf 79031 79032 79136\nf 79031 79136 79135\nf 79032 79033 79137\nf 79032 79137 79136\nf 79033 79034 79138\nf 79033 79138 79137\nf 79034 79035 79139\nf 79034 79139 79138\nf 79035 79036 79140\nf 79035 79140 79139\nf 79036 79037 79142\nf 79036 79142 79140\nf 79037 79141 79142\nf 79038 79040 79039\nf 79039 79040 79145\nf 79039 79145 79143\nf 79040 79041 79146\nf 79040 79146 79145\nf 79041 79042 79147\nf 79041 79147 79146\nf 79042 79043 79148\nf 79042 79148 79147\nf 79043 79149 79148\nf 79043 82511 82517\nf 79043 82517 82522\nf 79043 82522 79149\nf 79044 79045 79150\nf 79044 79150 82520\nf 79044 82520 82515\nf 79045 79046 79151\nf 79045 79151 79150\nf 79046 79047 79152\nf 79046 79152 79151\nf 79047 79048 79153\nf 79047 79153 79152\nf 79048 79049 79154\nf 79048 79154 79153\nf 79049 79051 79155\nf 79049 79155 79154\nf 79050 79156 79157\nf 79050 79157 79051\nf 79051 79157 79155\nf 79052 79053 79158\nf 79053 79054 79159\nf 79053 79159 79158\nf 79054 79055 79160\nf 79054 79160 79159\nf 79055 79056 79161\nf 79055 79161 79160\nf 79056 79057 79162\nf 79056 79162 79161\nf 79057 79058 79163\nf 79057 79163 79162\nf 79058 79059 79164\nf 79058 79164 79163\nf 79059 79060 79165\nf 79059 79165 79164\nf 79060 79061 79166\nf 79060 79166 79165\nf 79061 79063 79167\nf 79061 79167 79166\nf 79062 79064 79170\nf 79062 79170 79063\nf 79063 79168 79167\nf 79063 79170 79168\nf 79064 79169 79170\nf 79065 79066 79173\nf 79065 79172 79171\nf 79065 79173 79172\nf 79066 79067 79174\nf 79066 79174 79173\nf 79067 79068 79175\nf 79067 79175 79174\nf 79068 79070 79176\nf 79068 79176 79175\nf 79069 79071 79070\nf 79070 79071 79176\nf 79071 79073 79177\nf 79071 79177 79176\nf 79072 79074 79179\nf 79072 79179 79073\nf 79073 79178 79177\nf 79073 79179 79178\nf 79074 79075 79180\nf 79074 79180 79179\nf 79075 79076 79181\nf 79075 79181 79180\nf 79076 79078 79182\nf 79076 79182 79181\nf 79077 79079 79078\nf 79078 79079 79182\nf 79079 79080 79183\nf 79079 79183 79182\nf 79080 79081 79184\nf 79080 79184 79183\nf 79081 79082 79185\nf 79081 79185 79184\nf 79082 79083 79186\nf 79082 79186 79185\nf 79083 79084 79187\nf 79083 79187 79186\nf 79084 79085 79188\nf 79084 79188 79187\nf 79085 79086 79189\nf 79085 79189 79188\nf 79086 79087 79190\nf 79086 79190 79189\nf 79087 79088 79191\nf 79087 79191 79190\nf 79088 79089 79192\nf 79088 79192 79191\nf 79089 79090 79193\nf 79089 79193 79192\nf 79090 79091 79194\nf 79090 79194 79193\nf 79091 79092 79195\nf 79091 79195 79194\nf 79092 79093 79196\nf 79092 79196 79195\nf 79093 79094 79197\nf 79093 79197 79196\nf 79094 79095 79198\nf 79094 79198 79197\nf 79095 79096 79199\nf 79095 79199 79198\nf 79096 79097 79200\nf 79096 79200 79199\nf 79097 79098 79201\nf 79097 79201 79200\nf 79098 79099 79202\nf 79098 79202 79201\nf 79099 79100 79203\nf 79099 79203 79202\nf 79100 79101 79204\nf 79100 79204 79203\nf 79101 79102 79205\nf 79101 79205 79204\nf 79102 79103 79206\nf 79102 79206 79205\nf 79103 79104 79207\nf 79103 79207 79206\nf 79104 79105 79208\nf 79104 79208 79207\nf 79105 79106 79209\nf 79105 79209 79208\nf 79106 79107 79210\nf 79106 79210 79209\nf 79107 79109 79211\nf 79107 79211 79210\nf 79108 79110 79213\nf 79108 79213 79109\nf 79109 79212 79211\nf 79109 79213 79212\nf 79110 79111 79214\nf 79110 79214 79213\nf 79111 79112 79215\nf 79111 79215 79214\nf 79112 79113 79216\nf 79112 79216 79215\nf 79113 79114 79217\nf 79113 79217 79216\nf 79114 79115 79218\nf 79114 79218 79217\nf 79115 79116 79219\nf 79115 79219 79218\nf 79116 79117 79220\nf 79116 79220 79219\nf 79117 79118 79221\nf 79117 79221 79220\nf 79118 79120 79222\nf 79118 79222 79221\nf 79119 79121 79120\nf 79120 79121 79222\nf 79121 79122 79223\nf 79121 79223 79222\nf 79122 79123 79224\nf 79122 79224 79223\nf 79123 79124 79225\nf 79123 79225 79224\nf 79124 79125 79226\nf 79124 79226 79225\nf 79125 79126 79227\nf 79125 79227 79226\nf 79126 79127 79228\nf 79126 79228 79227\nf 79127 79128 79229\nf 79127 79229 79228\nf 79128 79129 79230\nf 79128 79230 79229\nf 79129 79130 79231\nf 79129 79231 79230\nf 79130 79131 79232\nf 79130 79232 79231\nf 79131 79132 79233\nf 79131 79233 79232\nf 79132 79133 79234\nf 79132 79234 79233\nf 79133 79134 79235\nf 79133 79235 79234\nf 79134 79135 79236\nf 79134 79236 79235\nf 79135 79136 79237\nf 79135 79237 79236\nf 79136 79137 79238\nf 79136 79238 79237\nf 79137 79138 79239\nf 79137 79239 79238\nf 79138 79139 79240\nf 79138 79240 79239\nf 79139 79140 79241\nf 79139 79241 79240\nf 79140 79142 79242\nf 79140 79242 79241\nf 79141 79144 79244\nf 79141 79244 79142\nf 79142 79243 79242\nf 79142 79244 79243\nf 79143 79145 79144\nf 79144 79145 79244\nf 79145 79146 79245\nf 79145 79245 79244\nf 79146 79147 79246\nf 79146 79246 79245\nf 79147 79148 79247\nf 79147 79247 79246\nf 79148 79149 79248\nf 79148 79248 79247\nf 79149 79249 79248\nf 79149 82522 82528\nf 79149 82528 79249\nf 79150 79151 79251\nf 79150 79250 82525\nf 79150 79251 79250\nf 79150 82525 82520\nf 79151 79152 79252\nf 79151 79252 79251\nf 79152 79153 79253\nf 79152 79253 79252\nf 79153 79154 79254\nf 79153 79254 79253\nf 79154 79155 79255\nf 79154 79255 79254\nf 79155 79157 79256\nf 79155 79256 79255\nf 79156 79257 79258\nf 79156 79258 79157\nf 79157 79258 79256\nf 79158 79159 79259\nf 79159 79160 79260\nf 79159 79260 79259\nf 79160 79161 79261\nf 79160 79261 79260\nf 79161 79162 79262\nf 79161 79262 79261\nf 79162 79163 79263\nf 79162 79263 79262\nf 79163 79164 79264\nf 79163 79264 79263\nf 79164 79165 79265\nf 79164 79265 79264\nf 79165 79166 79266\nf 79165 79266 79265\nf 79166 79167 79267\nf 79166 79267 79266\nf 79167 79168 79268\nf 79167 79268 79267\nf 79168 79170 79269\nf 79168 79269 79268\nf 79169 79270 79271\nf 79169 79271 79170\nf 79170 79271 79269\nf 79171 79172 79272\nf 79172 79173 79274\nf 79172 79274 79272\nf 79173 79174 79276\nf 79173 79276 79274\nf 79174 79175 79278\nf 79174 79278 79276\nf 79175 79176 79280\nf 79175 79280 79278\nf 79176 79177 79282\nf 79176 79282 79280\nf 79177 79178 79284\nf 79177 79284 79282\nf 79178 79179 79286\nf 79178 79286 79284\nf 79179 79180 79288\nf 79179 79288 79286\nf 79180 79181 79290\nf 79180 79290 79288\nf 79181 79182 79292\nf 79181 79292 79290\nf 79182 79183 79294\nf 79182 79294 79292\nf 79183 79184 79295\nf 79183 79295 79294\nf 79184 79185 79296\nf 79184 79296 79295\nf 79185 79186 79297\nf 79185 79297 79296\nf 79186 79187 79298\nf 79186 79298 79297\nf 79187 79188 79299\nf 79187 79299 79298\nf 79188 79189 79300\nf 79188 79300 79299\nf 79189 79190 79301\nf 79189 79301 79300\nf 79190 79191 79302\nf 79190 79302 79301\nf 79191 79192 79303\nf 79191 79303 79302\nf 79192 79193 79304\nf 79192 79304 79303\nf 79193 79194 79305\nf 79193 79305 79304\nf 79194 79195 79306\nf 79194 79306 79305\nf 79195 79196 79307\nf 79195 79307 79306\nf 79196 79197 79308\nf 79196 79308 79307\nf 79197 79198 79309\nf 79197 79309 79308\nf 79198 79199 79310\nf 79198 79310 79309\nf 79199 79200 79311\nf 79199 79311 79310\nf 79200 79201 79312\nf 79200 79312 79311\nf 79201 79202 79313\nf 79201 79313 79312\nf 79202 79203 79314\nf 79202 79314 79313\nf 79203 79204 79315\nf 79203 79315 79314\nf 79204 79205 79316\nf 79204 79316 79315\nf 79205 79206 79317\nf 79205 79317 79316\nf 79206 79207 79318\nf 79206 79318 79317\nf 79207 79208 79319\nf 79207 79319 79318\nf 79208 79209 79320\nf 79208 79320 79319\nf 79209 79210 79321\nf 79209 79321 79320\nf 79210 79211 79322\nf 79210 79322 79321\nf 79211 79212 79324\nf 79211 79324 79322\nf 79212 79213 79326\nf 79212 79326 79324\nf 79213 79214 79328\nf 79213 79328 79326\nf 79214 79215 79330\nf 79214 79330 79328\nf 79215 79216 79332\nf 79215 79332 79330\nf 79216 79217 79334\nf 79216 79334 79332\nf 79217 79218 79336\nf 79217 79336 79334\nf 79218 79219 79338\nf 79218 79338 79336\nf 79219 79220 79340\nf 79219 79340 79338\nf 79220 79221 79342\nf 79220 79342 79340\nf 79221 79222 79344\nf 79221 79344 79342\nf 79222 79223 79346\nf 79222 79346 79344\nf 79223 79224 79348\nf 79223 79348 79346\nf 79224 79225 79350\nf 79224 79350 79348\nf 79225 79226 79352\nf 79225 79352 79350\nf 79226 79227 79354\nf 79226 79354 79352\nf 79227 79228 79356\nf 79227 79356 79354\nf 79228 79229 79358\nf 79228 79358 79356\nf 79229 79230 79360\nf 79229 79360 79358\nf 79230 79231 79362\nf 79230 79362 79360\nf 79231 79232 79364\nf 79231 79364 79362\nf 79232 79233 79366\nf 79232 79366 79364\nf 79233 79234 79368\nf 79233 79368 79366\nf 79234 79235 79370\nf 79234 79370 79368\nf 79235 79236 79372\nf 79235 79372 79370\nf 79236 79237 79374\nf 79236 79374 79372\nf 79237 79238 79376\nf 79237 79376 79374\nf 79238 79239 79378\nf 79238 79378 79376\nf 79239 79240 79380\nf 79239 79380 79378\nf 79240 79241 79382\nf 79240 79382 79380\nf 79241 79242 79384\nf 79241 79384 79382\nf 79242 79243 79386\nf 79242 79386 79384\nf 79243 79244 79388\nf 79243 79388 79386\nf 79244 79245 79390\nf 79244 79390 79388\nf 79245 79246 79391\nf 79245 79391 79390\nf 79246 79247 79392\nf 79246 79392 79391\nf 79247 79248 79393\nf 79247 79393 79392\nf 79248 79249 79394\nf 79248 79394 79393\nf 79249 79395 79394\nf 79249 82528 82532\nf 79249 82532 79395\nf 79250 79251 79396\nf 79250 79396 82530\nf 79250 82526 82525\nf 79250 82530 82526\nf 79251 79252 79397\nf 79251 79397 79396\nf 79252 79253 79398\nf 79252 79398 79397\nf 79253 79254 79399\nf 79253 79399 79398\nf 79254 79255 79400\nf 79254 79400 79399\nf 79255 79256 79401\nf 79255 79401 79400\nf 79256 79258 79402\nf 79256 79402 79401\nf 79257 79403 79404\nf 79257 79404 79258\nf 79258 79404 79402\nf 79259 79260 79405\nf 79260 79261 79406\nf 79260 79406 79405\nf 79261 79262 79407\nf 79261 79407 79406\nf 79262 79263 79408\nf 79262 79408 79407\nf 79263 79264 79409\nf 79263 79409 79408\nf 79264 79265 79410\nf 79264 79410 79409\nf 79265 79266 79411\nf 79265 79411 79410\nf 79266 79267 79412\nf 79266 79412 79411\nf 79267 79268 79413\nf 79267 79413 79412\nf 79268 79269 79414\nf 79268 79414 79413\nf 79269 79271 79415\nf 79269 79415 79414\nf 79270 79416 79417\nf 79270 79417 79271\nf 79271 79417 79415\nf 79272 79274 79273\nf 79273 79274 79275\nf 79274 79276 79275\nf 79275 79276 79277\nf 79276 79278 79277\nf 79277 79278 79279\nf 79278 79280 79279\nf 79279 79280 79281\nf 79280 79282 79281\nf 79281 79282 79283\nf 79282 79284 79283\nf 79283 79284 79285\nf 79284 79286 79285\nf 79285 79286 79287\nf 79286 79288 79287\nf 79287 79288 79289\nf 79288 79290 79289\nf 79289 79290 79291\nf 79290 79292 79291\nf 79291 79292 79293\nf 79292 79294 79293\nf 79293 79294 79418\nf 79294 79295 79420\nf 79294 79420 79418\nf 79295 79296 79420\nf 79296 79297 79422\nf 79296 79422 79420\nf 79297 79298 79424\nf 79297 79424 79422\nf 79298 79299 79426\nf 79298 79426 79424\nf 79299 79300 79427\nf 79299 79427 79426\nf 79300 79301 79428\nf 79300 79428 79427\nf 79301 79302 79429\nf 79301 79429 79428\nf 79302 79303 79430\nf 79302 79430 79429\nf 79303 79304 79431\nf 79303 79431 79430\nf 79304 79305 79432\nf 79304 79432 79431\nf 79305 79306 79433\nf 79305 79433 79432\nf 79306 79307 79434\nf 79306 79434 79433\nf 79307 79308 79435\nf 79307 79435 79434\nf 79308 79309 79436\nf 79308 79436 79435\nf 79309 79310 79437\nf 79309 79437 79436\nf 79310 79311 79439\nf 79310 79439 79437\nf 79311 79312 79441\nf 79311 79441 79439\nf 79312 79313 79443\nf 79312 79443 79441\nf 79313 79314 79445\nf 79313 79445 79443\nf 79314 79315 79447\nf 79314 79447 79445\nf 79315 79316 79449\nf 79315 79449 79447\nf 79316 79317 79451\nf 79316 79451 79449\nf 79317 79318 79453\nf 79317 79453 79451\nf 79318 79319 79455\nf 79318 79455 79453\nf 79319 79320 79457\nf 79319 79457 79455\nf 79320 79321 79459\nf 79320 79459 79457\nf 79321 79322 79461\nf 79321 79461 79459\nf 79322 79324 79464\nf 79322 79464 79461\nf 79323 79324 79325\nf 79323 79462 79464\nf 79323 79464 79324\nf 79324 79326 79325\nf 79325 79326 79327\nf 79326 79328 79327\nf 79327 79328 79329\nf 79328 79330 79329\nf 79329 79330 79331\nf 79330 79332 79331\nf 79331 79332 79333\nf 79332 79334 79333\nf 79333 79334 79335\nf 79334 79336 79335\nf 79335 79336 79337\nf 79336 79338 79337\nf 79337 79338 79339\nf 79338 79340 79339\nf 79339 79340 79341\nf 79340 79342 79341\nf 79341 79342 79343\nf 79342 79344 79343\nf 79343 79344 79345\nf 79344 79346 79345\nf 79345 79346 79347\nf 79346 79348 79347\nf 79347 79348 79349\nf 79348 79350 79349\nf 79349 79350 79351\nf 79350 79352 79351\nf 79351 79352 79353\nf 79352 79354 79353\nf 79353 79354 79355\nf 79354 79356 79355\nf 79355 79356 79357\nf 79356 79358 79357\nf 79357 79358 79359\nf 79358 79360 79359\nf 79359 79360 79361\nf 79360 79362 79361\nf 79361 79362 79363\nf 79362 79364 79363\nf 79363 79364 79365\nf 79364 79366 79365\nf 79365 79366 79367\nf 79366 79368 79367\nf 79367 79368 79369\nf 79368 79370 79369\nf 79369 79370 79371\nf 79370 79372 79371\nf 79371 79372 79373\nf 79372 79374 79373\nf 79373 79374 79375\nf 79374 79376 79375\nf 79375 79376 79377\nf 79376 79378 79377\nf 79377 79378 79379\nf 79378 79380 79379\nf 79379 79380 79381\nf 79380 79382 79381\nf 79381 79382 79383\nf 79382 79384 79383\nf 79383 79384 79385\nf 79384 79386 79385\nf 79385 79386 79387\nf 79386 79388 79387\nf 79387 79388 79389\nf 79388 79390 79389\nf 79389 79390 79465\nf 79390 79391 79467\nf 79390 79467 79465\nf 79391 79392 79467\nf 79392 79393 79468\nf 79392 79468 79467\nf 79393 79394 79469\nf 79393 79469 79468\nf 79394 79395 79470\nf 79394 79470 79469\nf 79395 79471 79470\nf 79395 82532 82536\nf 79395 82536 79471\nf 79396 79397 79472\nf 79396 79472 82534\nf 79396 82534 82530\nf 79397 79398 79473\nf 79397 79473 79472\nf 79398 79399 79474\nf 79398 79474 79473\nf 79399 79400 79475\nf 79399 79475 79474\nf 79400 79401 79476\nf 79400 79476 79475\nf 79401 79402 79477\nf 79401 79477 79476\nf 79402 79404 79478\nf 79402 79478 79477\nf 79403 79479 79480\nf 79403 79480 79404\nf 79404 79480 79478\nf 79405 79406 79481\nf 79406 79407 79482\nf 79406 79482 79481\nf 79407 79408 79483\nf 79407 79483 79482\nf 79408 79409 79484\nf 79408 79484 79483\nf 79409 79410 79485\nf 79409 79485 79484\nf 79410 79411 79486\nf 79410 79486 79485\nf 79411 79412 79487\nf 79411 79487 79486\nf 79412 79413 79488\nf 79412 79488 79487\nf 79413 79414 79489\nf 79413 79489 79488\nf 79414 79415 79490\nf 79414 79490 79489\nf 79415 79417 79491\nf 79415 79491 79490\nf 79416 79492 79493\nf 79416 79493 79417\nf 79417 79493 79491\nf 79418 79420 79419\nf 79419 79420 79421\nf 79420 79422 79421\nf 79421 79422 79423\nf 79422 79424 79423\nf 79423 79424 79425\nf 79424 79426 79425\nf 79425 79426 79494\nf 79426 79427 79496\nf 79426 79496 79494\nf 79427 79428 79496\nf 79428 79429 79498\nf 79428 79498 79496\nf 79429 79430 79500\nf 79429 79500 79498\nf 79430 79431 79502\nf 79430 79502 79500\nf 79431 79432 79504\nf 79431 79504 79502\nf 79432 79433 79506\nf 79432 79506 79504\nf 79433 79434 79508\nf 79433 79508 79506\nf 79434 79435 79510\nf 79434 79510 79508\nf 79435 79436 79512\nf 79435 79512 79510\nf 79436 79437 79514\nf 79436 79514 79512\nf 79437 79439 79517\nf 79437 79517 79514\nf 79438 79439 79440\nf 79438 79515 79517\nf 79438 79517 79439\nf 79439 79441 79440\nf 79440 79441 79442\nf 79441 79443 79442\nf 79442 79443 79444\nf 79443 79445 79444\nf 79444 79445 79446\nf 79445 79447 79446\nf 79446 79447 79448\nf 79447 79449 79448\nf 79448 79449 79450\nf 79449 79451 79450\nf 79450 79451 79452\nf 79451 79453 79452\nf 79452 79453 79454\nf 79453 79455 79454\nf 79454 79455 79456\nf 79455 79457 79456\nf 79456 79457 79458\nf 79457 79459 79458\nf 79458 79459 79460\nf 79459 79461 79460\nf 79460 79461 79463\nf 79461 79464 79463\nf 79462 79463 79464\nf 79465 79467 79466\nf 79466 79467 79518\nf 79467 79468 79520\nf 79467 79520 79518\nf 79468 79469 79520\nf 79469 79470 79521\nf 79469 79521 79520\nf 79470 79471 79522\nf 79470 79522 79521\nf 79471 79523 79522\nf 79471 79524 79523\nf 79471 82536 82537\nf 79471 82537 79524\nf 79472 79473 79526\nf 79472 79525 82539\nf 79472 79526 79525\nf 79472 82539 82534\nf 79473 79474 79527\nf 79473 79527 79526\nf 79474 79475 79528\nf 79474 79528 79527\nf 79475 79476 79529\nf 79475 79529 79528\nf 79476 79477 79530\nf 79476 79530 79529\nf 79477 79478 79531\nf 79477 79531 79530\nf 79478 79480 79532\nf 79478 79532 79531\nf 79479 79533 79534\nf 79479 79534 79480\nf 79480 79534 79532\nf 79481 79482 79535\nf 79482 79483 79536\nf 79482 79536 79535\nf 79483 79484 79537\nf 79483 79537 79536\nf 79484 79485 79538\nf 79484 79538 79537\nf 79485 79486 79539\nf 79485 79539 79538\nf 79486 79487 79540\nf 79486 79540 79539\nf 79487 79488 79541\nf 79487 79541 79540\nf 79488 79489 79542\nf 79488 79542 79541\nf 79489 79490 79543\nf 79489 79543 79542\nf 79490 79491 79544\nf 79490 79544 79543\nf 79491 79493 79545\nf 79491 79545 79544\nf 79492 79546 79547\nf 79492 79547 79493\nf 79493 79547 79545\nf 79494 79496 79495\nf 79495 79496 79497\nf 79496 79498 79497\nf 79497 79498 79499\nf 79498 79500 79499\nf 79499 79500 79501\nf 79500 79502 79501\nf 79501 79502 79503\nf 79502 79504 79503\nf 79503 79504 79505\nf 79504 79506 79505\nf 79505 79506 79507\nf 79506 79508 79507\nf 79507 79508 79509\nf 79508 79510 79509\nf 79509 79510 79511\nf 79510 79512 79511\nf 79511 79512 79513\nf 79512 79514 79513\nf 79513 79514 79516\nf 79514 79517 79516\nf 79515 79516 79517\nf 79518 79520 79519\nf 79519 79520 79548\nf 79520 79521 79549\nf 79520 79549 79548\nf 79521 79522 79549\nf 79522 79523 79550\nf 79522 79550 79549\nf 79523 79524 79551\nf 79523 79551 79550\nf 79524 79525 79552\nf 79524 79552 79551\nf 79524 82537 82540\nf 79524 82540 79525\nf 79525 79526 79553\nf 79525 79553 79552\nf 79525 82540 82539\nf 79526 79527 79554\nf 79526 79554 79553\nf 79527 79528 79555\nf 79527 79555 79554\nf 79528 79529 79556\nf 79528 79556 79555\nf 79529 79530 79557\nf 79529 79557 79556\nf 79530 79531 79558\nf 79530 79558 79557\nf 79531 79532 79559\nf 79531 79559 79558\nf 79532 79534 79560\nf 79532 79560 79559\nf 79533 79561 79562\nf 79533 79562 79534\nf 79534 79562 79560\nf 79535 79536 79563\nf 79536 79537 79564\nf 79536 79564 79563\nf 79537 79538 79565\nf 79537 79565 79564\nf 79538 79539 79566\nf 79538 79566 79565\nf 79539 79540 79567\nf 79539 79567 79566\nf 79540 79541 79568\nf 79540 79568 79567\nf 79541 79542 79569\nf 79541 79569 79568\nf 79542 79543 79570\nf 79542 79570 79569\nf 79543 79544 79571\nf 79543 79571 79570\nf 79544 79545 79572\nf 79544 79572 79571\nf 79545 79547 79573\nf 79545 79573 79572\nf 79546 79574 79576\nf 79546 79576 79547\nf 79547 79576 79573\nf 79548 79549 79577\nf 79549 79550 79578\nf 79549 79578 79577\nf 79550 79551 79579\nf 79550 79579 79578\nf 79551 79552 79580\nf 79551 79580 79579\nf 79552 79553 79581\nf 79552 79581 79580\nf 79553 79554 79582\nf 79553 79582 79581\nf 79554 79555 79583\nf 79554 79583 79582\nf 79555 79556 79584\nf 79555 79584 79583\nf 79556 79557 79585\nf 79556 79585 79584\nf 79557 79558 79586\nf 79557 79586 79585\nf 79558 79559 79587\nf 79558 79587 79586\nf 79559 79560 79588\nf 79559 79588 79587\nf 79560 79562 79589\nf 79560 79589 79588\nf 79561 79590 79591\nf 79561 79591 79562\nf 79562 79591 79589\nf 79563 79564 79592\nf 79564 79565 79593\nf 79564 79593 79592\nf 79565 79566 79594\nf 79565 79594 79593\nf 79566 79567 79595\nf 79566 79595 79594\nf 79567 79568 79596\nf 79567 79596 79595\nf 79568 79569 79597\nf 79568 79597 79596\nf 79569 79570 79598\nf 79569 79598 79597\nf 79570 79571 79599\nf 79570 79599 79598\nf 79571 79572 79600\nf 79571 79600 79599\nf 79572 79573 79601\nf 79572 79601 79600\nf 79573 79576 79603\nf 79573 79603 79601\nf 79574 79575 79576\nf 79575 79602 79603\nf 79575 79603 79576\nf 79577 79578 79604\nf 79578 79579 79606\nf 79578 79606 79604\nf 79579 79580 79607\nf 79579 79607 79606\nf 79580 79581 79608\nf 79580 79608 79607\nf 79581 79582 79609\nf 79581 79609 79608\nf 79582 79583 79610\nf 79582 79610 79609\nf 79583 79584 79611\nf 79583 79611 79610\nf 79584 79585 79612\nf 79584 79612 79611\nf 79585 79586 79613\nf 79585 79613 79612\nf 79586 79587 79614\nf 79586 79614 79613\nf 79587 79588 79615\nf 79587 79615 79614\nf 79588 79589 79616\nf 79588 79616 79615\nf 79589 79591 79617\nf 79589 79617 79616\nf 79590 79618 79619\nf 79590 79619 79591\nf 79591 79619 79617\nf 79592 79593 79620\nf 79593 79594 79621\nf 79593 79621 79620\nf 79594 79595 79622\nf 79594 79622 79621\nf 79595 79596 79623\nf 79595 79623 79622\nf 79596 79597 79624\nf 79596 79624 79623\nf 79597 79598 79625\nf 79597 79625 79624\nf 79598 79599 79626\nf 79598 79626 79625\nf 79599 79600 79627\nf 79599 79627 79626\nf 79600 79601 79628\nf 79600 79628 79627\nf 79601 79603 79629\nf 79601 79629 79628\nf 79602 79630 79631\nf 79602 79631 79603\nf 79603 79631 79629\nf 79604 79606 79605\nf 79605 79606 79632\nf 79606 79607 79633\nf 79606 79633 79632\nf 79607 79608 79633\nf 79608 79609 79634\nf 79608 79634 79633\nf 79609 79610 79635\nf 79609 79635 79634\nf 79610 79611 79636\nf 79610 79636 79635\nf 79611 79612 79637\nf 79611 79637 79636\nf 79612 79613 79638\nf 79612 79638 79637\nf 79613 79614 79639\nf 79613 79639 79638\nf 79614 79615 79640\nf 79614 79640 79639\nf 79615 79616 79641\nf 79615 79641 79640\nf 79616 79617 79642\nf 79616 79642 79641\nf 79617 79619 79643\nf 79617 79643 79642\nf 79618 79644 79645\nf 79618 79645 79619\nf 79619 79645 79643\nf 79620 79621 79647\nf 79621 79622 79648\nf 79621 79648 79647\nf 79622 79623 79649\nf 79622 79649 79648\nf 79623 79624 79650\nf 79623 79650 79649\nf 79624 79625 79651\nf 79624 79651 79650\nf 79625 79626 79652\nf 79625 79652 79651\nf 79626 79627 79653\nf 79626 79653 79652\nf 79627 79628 79654\nf 79627 79654 79653\nf 79628 79629 79655\nf 79628 79655 79654\nf 79629 79631 79656\nf 79629 79656 79655\nf 79630 79657 79658\nf 79630 79658 79631\nf 79631 79658 79656\nf 79632 79633 79659\nf 79633 79634 79660\nf 79633 79660 79659\nf 79634 79635 79661\nf 79634 79661 79660\nf 79635 79636 79662\nf 79635 79662 79661\nf 79636 79637 79663\nf 79636 79663 79662\nf 79637 79638 79664\nf 79637 79664 79663\nf 79638 79639 79665\nf 79638 79665 79664\nf 79639 79640 79666\nf 79639 79666 79665\nf 79640 79641 79667\nf 79640 79667 79666\nf 79641 79642 79668\nf 79641 79668 79667\nf 79642 79643 79669\nf 79642 79669 79668\nf 79643 79645 79670\nf 79643 79670 79669\nf 79644 79646 79673\nf 79644 79673 79645\nf 79645 79671 79670\nf 79645 79673 79671\nf 79646 79672 79673\nf 79647 79648 79674\nf 79648 79649 79675\nf 79648 79675 79674\nf 79649 79650 79676\nf 79649 79676 79675\nf 79650 79651 79677\nf 79650 79677 79676\nf 79651 79652 79678\nf 79651 79678 79677\nf 79652 79653 79679\nf 79652 79679 79678\nf 79653 79654 79680\nf 79653 79680 79679\nf 79654 79655 79681\nf 79654 79681 79680\nf 79655 79656 79682\nf 79655 79682 79681\nf 79656 79658 79683\nf 79656 79683 79682\nf 79657 79684 79685\nf 79657 79685 79658\nf 79658 79685 79683\nf 79659 79660 79686\nf 79660 79661 79687\nf 79660 79687 79686\nf 79661 79662 79688\nf 79661 79688 79687\nf 79662 79663 79689\nf 79662 79689 79688\nf 79663 79664 79690\nf 79663 79690 79689\nf 79664 79665 79691\nf 79664 79691 79690\nf 79665 79666 79692\nf 79665 79692 79691\nf 79666 79667 79693\nf 79666 79693 79692\nf 79667 79668 79694\nf 79667 79694 79693\nf 79668 79669 79695\nf 79668 79695 79694\nf 79669 79670 79696\nf 79669 79696 79695\nf 79670 79671 79697\nf 79670 79697 79696\nf 79671 79673 79698\nf 79671 79698 79697\nf 79672 79699 79700\nf 79672 79700 79673\nf 79673 79700 79698\nf 79674 79675 79701\nf 79675 79676 79702\nf 79675 79702 79701\nf 79676 79677 79703\nf 79676 79703 79702\nf 79677 79678 79704\nf 79677 79704 79703\nf 79678 79679 79705\nf 79678 79705 79704\nf 79679 79680 79706\nf 79679 79706 79705\nf 79680 79681 79707\nf 79680 79707 79706\nf 79681 79682 79708\nf 79681 79708 79707\nf 79682 79683 79709\nf 79682 79709 79708\nf 79683 79685 79710\nf 79683 79710 79709\nf 79684 79711 79712\nf 79684 79712 79685\nf 79685 79712 79710\nf 79686 79687 79713\nf 79687 79688 79714\nf 79687 79714 79713\nf 79688 79689 79715\nf 79688 79715 79714\nf 79689 79690 79716\nf 79689 79716 79715\nf 79690 79691 79717\nf 79690 79717 79716\nf 79691 79692 79718\nf 79691 79718 79717\nf 79692 79693 79719\nf 79692 79719 79718\nf 79693 79694 79720\nf 79693 79720 79719\nf 79694 79695 79721\nf 79694 79721 79720\nf 79695 79696 79722\nf 79695 79722 79721\nf 79696 79697 79723\nf 79696 79723 79722\nf 79697 79698 79724\nf 79697 79724 79723\nf 79698 79700 79725\nf 79698 79725 79724\nf 79699 79726 79727\nf 79699 79727 79700\nf 79700 79727 79725\nf 79701 79702 79728\nf 79702 79703 79729\nf 79702 79729 79728\nf 79703 79704 79730\nf 79703 79730 79729\nf 79704 79705 79731\nf 79704 79731 79730\nf 79705 79706 79732\nf 79705 79732 79731\nf 79706 79707 79733\nf 79706 79733 79732\nf 79707 79708 79734\nf 79707 79734 79733\nf 79708 79709 79735\nf 79708 79735 79734\nf 79709 79710 79736\nf 79709 79736 79735\nf 79710 79712 79737\nf 79710 79737 79736\nf 79711 79738 79739\nf 79711 79739 79712\nf 79712 79739 79737\nf 79713 79714 79740\nf 79714 79715 79741\nf 79714 79741 79740\nf 79715 79716 79742\nf 79715 79742 79741\nf 79716 79717 79743\nf 79716 79743 79742\nf 79717 79718 79744\nf 79717 79744 79743\nf 79718 79719 79745\nf 79718 79745 79744\nf 79719 79720 79746\nf 79719 79746 79745\nf 79720 79721 79747\nf 79720 79747 79746\nf 79721 79722 79748\nf 79721 79748 79747\nf 79722 79723 79749\nf 79722 79749 79748\nf 79723 79724 79750\nf 79723 79750 79749\nf 79724 79725 79751\nf 79724 79751 79750\nf 79725 79727 79752\nf 79725 79752 79751\nf 79726 79753 79754\nf 79726 79754 79727\nf 79727 79754 79752\nf 79728 79729 79755\nf 79729 79730 79756\nf 79729 79756 79755\nf 79730 79731 79757\nf 79730 79757 79756\nf 79731 79732 79758\nf 79731 79758 79757\nf 79732 79733 79759\nf 79732 79759 79758\nf 79733 79734 79760\nf 79733 79760 79759\nf 79734 79735 79761\nf 79734 79761 79760\nf 79735 79736 79762\nf 79735 79762 79761\nf 79736 79737 79763\nf 79736 79763 79762\nf 79737 79739 79764\nf 79737 79764 79763\nf 79738 79765 79766\nf 79738 79766 79739\nf 79739 79766 79764\nf 79740 79741 79767\nf 79741 79742 79768\nf 79741 79768 79767\nf 79742 79743 79769\nf 79742 79769 79768\nf 79743 79744 79770\nf 79743 79770 79769\nf 79744 79745 79771\nf 79744 79771 79770\nf 79745 79746 79772\nf 79745 79772 79771\nf 79746 79747 79773\nf 79746 79773 79772\nf 79747 79748 79774\nf 79747 79774 79773\nf 79748 79749 79775\nf 79748 79775 79774\nf 79749 79750 79776\nf 79749 79776 79775\nf 79750 79751 79777\nf 79750 79777 79776\nf 79751 79752 79778\nf 79751 79778 79777\nf 79752 79754 79779\nf 79752 79779 79778\nf 79753 79780 79781\nf 79753 79781 79754\nf 79754 79781 79779\nf 79755 79756 79782\nf 79756 79757 79783\nf 79756 79783 79782\nf 79757 79758 79784\nf 79757 79784 79783\nf 79758 79759 79785\nf 79758 79785 79784\nf 79759 79760 79786\nf 79759 79786 79785\nf 79760 79761 79787\nf 79760 79787 79786\nf 79761 79762 79788\nf 79761 79788 79787\nf 79762 79763 79789\nf 79762 79789 79788\nf 79763 79764 79790\nf 79763 79790 79789\nf 79764 79766 79791\nf 79764 79791 79790\nf 79765 79792 79793\nf 79765 79793 79766\nf 79766 79793 79791\nf 79767 79768 79794\nf 79768 79769 79795\nf 79768 79795 79794\nf 79769 79770 79796\nf 79769 79796 79795\nf 79770 79771 79797\nf 79770 79797 79796\nf 79771 79772 79798\nf 79771 79798 79797\nf 79772 79773 79799\nf 79772 79799 79798\nf 79773 79774 79800\nf 79773 79800 79799\nf 79774 79775 79801\nf 79774 79801 79800\nf 79775 79776 79802\nf 79775 79802 79801\nf 79776 79777 79803\nf 79776 79803 79802\nf 79777 79778 79804\nf 79777 79804 79803\nf 79778 79779 79805\nf 79778 79805 79804\nf 79779 79781 79806\nf 79779 79806 79805\nf 79780 79807 79808\nf 79780 79808 79781\nf 79781 79808 79806\nf 79782 79783 79809\nf 79783 79784 79810\nf 79783 79810 79809\nf 79784 79785 79811\nf 79784 79811 79810\nf 79785 79786 79812\nf 79785 79812 79811\nf 79786 79787 79813\nf 79786 79813 79812\nf 79787 79788 79814\nf 79787 79814 79813\nf 79788 79789 79815\nf 79788 79815 79814\nf 79789 79790 79816\nf 79789 79816 79815\nf 79790 79791 79817\nf 79790 79817 79816\nf 79791 79793 79818\nf 79791 79818 79817\nf 79792 79819 79820\nf 79792 79820 79793\nf 79793 79820 79818\nf 79794 79795 79821\nf 79795 79796 79822\nf 79795 79822 79821\nf 79796 79797 79823\nf 79796 79823 79822\nf 79797 79798 79824\nf 79797 79824 79823\nf 79798 79799 79825\nf 79798 79825 79824\nf 79799 79800 79826\nf 79799 79826 79825\nf 79800 79801 79827\nf 79800 79827 79826\nf 79801 79802 79828\nf 79801 79828 79827\nf 79802 79803 79829\nf 79802 79829 79828\nf 79803 79804 79830\nf 79803 79830 79829\nf 79804 79805 79831\nf 79804 79831 79830\nf 79805 79806 79832\nf 79805 79832 79831\nf 79806 79808 79833\nf 79806 79833 79832\nf 79807 79834 79835\nf 79807 79835 79808\nf 79808 79835 79833\nf 79809 79810 79836\nf 79810 79811 79837\nf 79810 79837 79836\nf 79811 79812 79838\nf 79811 79838 79837\nf 79812 79813 79839\nf 79812 79839 79838\nf 79813 79814 79840\nf 79813 79840 79839\nf 79814 79815 79841\nf 79814 79841 79840\nf 79815 79816 79842\nf 79815 79842 79841\nf 79816 79817 79843\nf 79816 79843 79842\nf 79817 79818 79844\nf 79817 79844 79843\nf 79818 79820 79845\nf 79818 79845 79844\nf 79819 79846 79847\nf 79819 79847 79820\nf 79820 79847 79845\nf 79821 79822 79848\nf 79822 79823 79849\nf 79822 79849 79848\nf 79823 79824 79850\nf 79823 79850 79849\nf 79824 79825 79851\nf 79824 79851 79850\nf 79825 79826 79852\nf 79825 79852 79851\nf 79826 79827 79853\nf 79826 79853 79852\nf 79827 79828 79854\nf 79827 79854 79853\nf 79828 79829 79855\nf 79828 79855 79854\nf 79829 79830 79856\nf 79829 79856 79855\nf 79830 79831 79857\nf 79830 79857 79856\nf 79831 79832 79858\nf 79831 79858 79857\nf 79832 79833 79859\nf 79832 79859 79858\nf 79833 79835 79860\nf 79833 79860 79859\nf 79834 79861 79862\nf 79834 79862 79835\nf 79835 79862 79860\nf 79836 79837 79863\nf 79837 79838 79864\nf 79837 79864 79863\nf 79838 79839 79865\nf 79838 79865 79864\nf 79839 79840 79866\nf 79839 79866 79865\nf 79840 79841 79867\nf 79840 79867 79866\nf 79841 79842 79868\nf 79841 79868 79867\nf 79842 79843 79869\nf 79842 79869 79868\nf 79843 79844 79870\nf 79843 79870 79869\nf 79844 79845 79871\nf 79844 79871 79870\nf 79845 79847 79872\nf 79845 79872 79871\nf 79846 79873 79874\nf 79846 79874 79847\nf 79847 79874 79872\nf 79848 79849 79875\nf 79849 79850 79876\nf 79849 79876 79875\nf 79850 79851 79877\nf 79850 79877 79876\nf 79851 79852 79878\nf 79851 79878 79877\nf 79852 79853 79879\nf 79852 79879 79878\nf 79853 79854 79880\nf 79853 79880 79879\nf 79854 79855 79881\nf 79854 79881 79880\nf 79855 79856 79882\nf 79855 79882 79881\nf 79856 79857 79883\nf 79856 79883 79882\nf 79857 79858 79884\nf 79857 79884 79883\nf 79858 79859 79885\nf 79858 79885 79884\nf 79859 79860 79886\nf 79859 79886 79885\nf 79860 79862 79887\nf 79860 79887 79886\nf 79861 79888 79889\nf 79861 79889 79862\nf 79862 79889 79887\nf 79863 79864 79890\nf 79864 79865 79892\nf 79864 79892 79890\nf 79865 79866 79893\nf 79865 79893 79892\nf 79866 79867 79894\nf 79866 79894 79893\nf 79867 79868 79895\nf 79867 79895 79894\nf 79868 79869 79896\nf 79868 79896 79895\nf 79869 79870 79897\nf 79869 79897 79896\nf 79870 79871 79898\nf 79870 79898 79897\nf 79871 79872 79899\nf 79871 79899 79898\nf 79872 79874 79900\nf 79872 79900 79899\nf 79873 79901 79902\nf 79873 79902 79874\nf 79874 79902 79900\nf 79875 79876 79903\nf 79876 79877 79904\nf 79876 79904 79903\nf 79877 79878 79905\nf 79877 79905 79904\nf 79878 79879 79906\nf 79878 79906 79905\nf 79879 79880 79907\nf 79879 79907 79906\nf 79880 79881 79908\nf 79880 79908 79907\nf 79881 79882 79909\nf 79881 79909 79908\nf 79882 79883 79910\nf 79882 79910 79909\nf 79883 79884 79911\nf 79883 79911 79910\nf 79884 79885 79912\nf 79884 79912 79911\nf 79885 79886 79913\nf 79885 79913 79912\nf 79886 79887 79914\nf 79886 79914 79913\nf 79887 79889 79915\nf 79887 79915 79914\nf 79888 79916 79917\nf 79888 79917 79889\nf 79889 79917 79915\nf 79890 79892 79891\nf 79891 79892 79918\nf 79892 79893 79919\nf 79892 79919 79918\nf 79893 79894 79919\nf 79894 79895 79920\nf 79894 79920 79919\nf 79895 79896 79921\nf 79895 79921 79920\nf 79896 79897 79922\nf 79896 79922 79921\nf 79897 79898 79923\nf 79897 79923 79922\nf 79898 79899 79924\nf 79898 79924 79923\nf 79899 79900 79925\nf 79899 79925 79924\nf 79900 79902 79926\nf 79900 79926 79925\nf 79901 79927 79928\nf 79901 79928 79902\nf 79902 79928 79926\nf 79903 79904 79929\nf 79904 79905 79930\nf 79904 79930 79929\nf 79905 79906 79931\nf 79905 79931 79930\nf 79906 79907 79932\nf 79906 79932 79931\nf 79907 79908 79933\nf 79907 79933 79932\nf 79908 79909 79934\nf 79908 79934 79933\nf 79909 79910 79935\nf 79909 79935 79934\nf 79910 79911 79936\nf 79910 79936 79935\nf 79911 79912 79937\nf 79911 79937 79936\nf 79912 79913 79938\nf 79912 79938 79937\nf 79913 79914 79939\nf 79913 79939 79938\nf 79914 79915 79940\nf 79914 79940 79939\nf 79915 79917 79941\nf 79915 79941 79940\nf 79916 79942 79943\nf 79916 79943 79917\nf 79917 79943 79941\nf 79918 79919 79944\nf 79919 79920 79945\nf 79919 79945 79944\nf 79920 79921 79946\nf 79920 79946 79945\nf 79921 79922 79947\nf 79921 79947 79946\nf 79922 79923 79948\nf 79922 79948 79947\nf 79923 79924 79949\nf 79923 79949 79948\nf 79924 79925 79950\nf 79924 79950 79949\nf 79925 79926 79951\nf 79925 79951 79950\nf 79926 79928 79952\nf 79926 79952 79951\nf 79927 79953 79954\nf 79927 79954 79928\nf 79928 79954 79952\nf 79929 79930 79955\nf 79930 79931 79956\nf 79930 79956 79955\nf 79931 79932 79957\nf 79931 79957 79956\nf 79932 79933 79958\nf 79932 79958 79957\nf 79933 79934 79959\nf 79933 79959 79958\nf 79934 79935 79960\nf 79934 79960 79959\nf 79935 79936 79961\nf 79935 79961 79960\nf 79936 79937 79962\nf 79936 79962 79961\nf 79937 79938 79963\nf 79937 79963 79962\nf 79938 79939 79964\nf 79938 79964 79963\nf 79939 79940 79965\nf 79939 79965 79964\nf 79940 79941 79966\nf 79940 79966 79965\nf 79941 79943 79967\nf 79941 79967 79966\nf 79942 79968 79969\nf 79942 79969 79943\nf 79943 79969 79967\nf 79944 79945 79970\nf 79945 79946 79971\nf 79945 79971 79970\nf 79946 79947 79972\nf 79946 79972 79971\nf 79947 79948 79973\nf 79947 79973 79972\nf 79948 79949 79974\nf 79948 79974 79973\nf 79949 79950 79975\nf 79949 79975 79974\nf 79950 79951 79976\nf 79950 79976 79975\nf 79951 79952 79977\nf 79951 79977 79976\nf 79952 79954 79978\nf 79952 79978 79977\nf 79953 79979 79980\nf 79953 79980 79954\nf 79954 79980 79978\nf 79955 79956 79981\nf 79956 79957 79982\nf 79956 79982 79981\nf 79957 79958 79983\nf 79957 79983 79982\nf 79958 79959 79984\nf 79958 79984 79983\nf 79959 79960 79985\nf 79959 79985 79984\nf 79960 79961 79986\nf 79960 79986 79985\nf 79961 79962 79987\nf 79961 79987 79986\nf 79962 79963 79988\nf 79962 79988 79987\nf 79963 79964 79989\nf 79963 79989 79988\nf 79964 79965 79990\nf 79964 79990 79989\nf 79965 79966 79991\nf 79965 79991 79990\nf 79966 79967 79992\nf 79966 79992 79991\nf 79967 79969 79993\nf 79967 79993 79992\nf 79968 79994 79995\nf 79968 79995 79969\nf 79969 79995 79993\nf 79970 79971 79996\nf 79971 79972 79997\nf 79971 79997 79996\nf 79972 79973 79998\nf 79972 79998 79997\nf 79973 79974 79999\nf 79973 79999 79998\nf 79974 79975 80000\nf 79974 80000 79999\nf 79975 79976 80001\nf 79975 80001 80000\nf 79976 79977 80002\nf 79976 80002 80001\nf 79977 79978 80003\nf 79977 80003 80002\nf 79978 79980 80004\nf 79978 80004 80003\nf 79979 80005 80006\nf 79979 80006 79980\nf 79980 80006 80004\nf 79981 79982 80007\nf 79982 79983 80008\nf 79982 80008 80007\nf 79983 79984 80009\nf 79983 80009 80008\nf 79984 79985 80010\nf 79984 80010 80009\nf 79985 79986 80011\nf 79985 80011 80010\nf 79986 79987 80012\nf 79986 80012 80011\nf 79987 79988 80013\nf 79987 80013 80012\nf 79988 79989 80014\nf 79988 80014 80013\nf 79989 79990 80015\nf 79989 80015 80014\nf 79990 79991 80016\nf 79990 80016 80015\nf 79991 79992 80017\nf 79991 80017 80016\nf 79992 79993 80018\nf 79992 80018 80017\nf 79993 79995 80019\nf 79993 80019 80018\nf 79994 80020 80021\nf 79994 80021 79995\nf 79995 80021 80019\nf 79996 79997 80022\nf 79997 79998 80023\nf 79997 80023 80022\nf 79998 79999 80024\nf 79998 80024 80023\nf 79999 80000 80025\nf 79999 80025 80024\nf 80000 80001 80026\nf 80000 80026 80025\nf 80001 80002 80027\nf 80001 80027 80026\nf 80002 80003 80028\nf 80002 80028 80027\nf 80003 80004 80029\nf 80003 80029 80028\nf 80004 80006 80030\nf 80004 80030 80029\nf 80005 80031 80032\nf 80005 80032 80006\nf 80006 80032 80030\nf 80007 80008 80033\nf 80008 80009 80034\nf 80008 80034 80033\nf 80009 80010 80035\nf 80009 80035 80034\nf 80010 80011 80036\nf 80010 80036 80035\nf 80011 80012 80037\nf 80011 80037 80036\nf 80012 80013 80038\nf 80012 80038 80037\nf 80013 80014 80039\nf 80013 80039 80038\nf 80014 80015 80040\nf 80014 80040 80039\nf 80015 80016 80041\nf 80015 80041 80040\nf 80016 80017 80042\nf 80016 80042 80041\nf 80017 80018 80043\nf 80017 80043 80042\nf 80018 80019 80044\nf 80018 80044 80043\nf 80019 80021 80045\nf 80019 80045 80044\nf 80020 80046 80047\nf 80020 80047 80021\nf 80021 80047 80045\nf 80022 80023 80048\nf 80023 80024 80049\nf 80023 80049 80048\nf 80024 80025 80050\nf 80024 80050 80049\nf 80025 80026 80051\nf 80025 80051 80050\nf 80026 80027 80052\nf 80026 80052 80051\nf 80027 80028 80053\nf 80027 80053 80052\nf 80028 80029 80054\nf 80028 80054 80053\nf 80029 80030 80055\nf 80029 80055 80054\nf 80030 80032 80056\nf 80030 80056 80055\nf 80031 80057 80058\nf 80031 80058 80032\nf 80032 80058 80056\nf 80033 80034 80059\nf 80034 80035 80060\nf 80034 80060 80059\nf 80035 80036 80061\nf 80035 80061 80060\nf 80036 80037 80062\nf 80036 80062 80061\nf 80037 80038 80063\nf 80037 80063 80062\nf 80038 80039 80064\nf 80038 80064 80063\nf 80039 80040 80065\nf 80039 80065 80064\nf 80040 80041 80066\nf 80040 80066 80065\nf 80041 80042 80067\nf 80041 80067 80066\nf 80042 80043 80068\nf 80042 80068 80067\nf 80043 80044 80069\nf 80043 80069 80068\nf 80044 80045 80070\nf 80044 80070 80069\nf 80045 80047 80071\nf 80045 80071 80070\nf 80046 80072 80073\nf 80046 80073 80047\nf 80047 80073 80071\nf 80048 80049 80074\nf 80049 80050 80075\nf 80049 80075 80074\nf 80050 80051 80076\nf 80050 80076 80075\nf 80051 80052 80077\nf 80051 80077 80076\nf 80052 80053 80078\nf 80052 80078 80077\nf 80053 80054 80079\nf 80053 80079 80078\nf 80054 80055 80080\nf 80054 80080 80079\nf 80055 80056 80081\nf 80055 80081 80080\nf 80056 80058 80082\nf 80056 80082 80081\nf 80057 80083 80084\nf 80057 80084 80058\nf 80058 80084 80082\nf 80059 80060 80085\nf 80060 80061 80086\nf 80060 80086 80085\nf 80061 80062 80087\nf 80061 80087 80086\nf 80062 80063 80088\nf 80062 80088 80087\nf 80063 80064 80089\nf 80063 80089 80088\nf 80064 80065 80090\nf 80064 80090 80089\nf 80065 80066 80091\nf 80065 80091 80090\nf 80066 80067 80092\nf 80066 80092 80091\nf 80067 80068 80093\nf 80067 80093 80092\nf 80068 80069 80094\nf 80068 80094 80093\nf 80069 80070 80095\nf 80069 80095 80094\nf 80070 80071 80096\nf 80070 80096 80095\nf 80071 80073 80097\nf 80071 80097 80096\nf 80072 80098 80099\nf 80072 80099 80073\nf 80073 80099 80097\nf 80074 80075 80100\nf 80075 80076 80101\nf 80075 80101 80100\nf 80076 80077 80102\nf 80076 80102 80101\nf 80077 80078 80103\nf 80077 80103 80102\nf 80078 80079 80104\nf 80078 80104 80103\nf 80079 80080 80105\nf 80079 80105 80104\nf 80080 80081 80106\nf 80080 80106 80105\nf 80081 80082 80107\nf 80081 80107 80106\nf 80082 80084 80108\nf 80082 80108 80107\nf 80083 80109 80110\nf 80083 80110 80084\nf 80084 80110 80108\nf 80085 80086 80112\nf 80086 80087 80113\nf 80086 80113 80112\nf 80087 80088 80114\nf 80087 80114 80113\nf 80088 80089 80115\nf 80088 80115 80114\nf 80089 80090 80116\nf 80089 80116 80115\nf 80090 80091 80117\nf 80090 80117 80116\nf 80091 80092 80118\nf 80091 80118 80117\nf 80092 80093 80119\nf 80092 80119 80118\nf 80093 80094 80120\nf 80093 80120 80119\nf 80094 80095 80121\nf 80094 80121 80120\nf 80095 80096 80122\nf 80095 80122 80121\nf 80096 80097 80123\nf 80096 80123 80122\nf 80097 80099 80124\nf 80097 80124 80123\nf 80098 80125 80126\nf 80098 80126 80099\nf 80099 80126 80124\nf 80100 80101 80127\nf 80101 80102 80128\nf 80101 80128 80127\nf 80102 80103 80129\nf 80102 80129 80128\nf 80103 80104 80130\nf 80103 80130 80129\nf 80104 80105 80131\nf 80104 80131 80130\nf 80105 80106 80132\nf 80105 80132 80131\nf 80106 80107 80133\nf 80106 80133 80132\nf 80107 80108 80134\nf 80107 80134 80133\nf 80108 80110 80135\nf 80108 80135 80134\nf 80109 80111 80138\nf 80109 80138 80110\nf 80110 80136 80135\nf 80110 80138 80136\nf 80111 80137 80138\nf 80112 80113 80139\nf 80113 80114 80140\nf 80113 80140 80139\nf 80114 80115 80141\nf 80114 80141 80140\nf 80115 80116 80142\nf 80115 80142 80141\nf 80116 80117 80143\nf 80116 80143 80142\nf 80117 80118 80144\nf 80117 80144 80143\nf 80118 80119 80145\nf 80118 80145 80144\nf 80119 80120 80146\nf 80119 80146 80145\nf 80120 80121 80147\nf 80120 80147 80146\nf 80121 80122 80148\nf 80121 80148 80147\nf 80122 80123 80149\nf 80122 80149 80148\nf 80123 80124 80150\nf 80123 80150 80149\nf 80124 80126 80151\nf 80124 80151 80150\nf 80125 80152 80153\nf 80125 80153 80126\nf 80126 80153 80151\nf 80127 80128 80154\nf 80128 80129 80155\nf 80128 80155 80154\nf 80129 80130 80156\nf 80129 80156 80155\nf 80130 80131 80157\nf 80130 80157 80156\nf 80131 80132 80158\nf 80131 80158 80157\nf 80132 80133 80159\nf 80132 80159 80158\nf 80133 80134 80160\nf 80133 80160 80159\nf 80134 80135 80161\nf 80134 80161 80160\nf 80135 80136 80162\nf 80135 80162 80161\nf 80136 80138 80163\nf 80136 80163 80162\nf 80137 80164 80165\nf 80137 80165 80138\nf 80138 80165 80163\nf 80139 80140 80166\nf 80140 80141 80167\nf 80140 80167 80166\nf 80141 80142 80168\nf 80141 80168 80167\nf 80142 80143 80169\nf 80142 80169 80168\nf 80143 80144 80170\nf 80143 80170 80169\nf 80144 80145 80171\nf 80144 80171 80170\nf 80145 80146 80172\nf 80145 80172 80171\nf 80146 80147 80173\nf 80146 80173 80172\nf 80147 80148 80174\nf 80147 80174 80173\nf 80148 80149 80175\nf 80148 80175 80174\nf 80149 80150 80176\nf 80149 80176 80175\nf 80150 80151 80177\nf 80150 80177 80176\nf 80151 80153 80178\nf 80151 80178 80177\nf 80152 80179 80180\nf 80152 80180 80153\nf 80153 80180 80178\nf 80154 80155 80181\nf 80155 80156 80182\nf 80155 80182 80181\nf 80156 80157 80183\nf 80156 80183 80182\nf 80157 80158 80184\nf 80157 80184 80183\nf 80158 80159 80185\nf 80158 80185 80184\nf 80159 80160 80186\nf 80159 80186 80185\nf 80160 80161 80187\nf 80160 80187 80186\nf 80161 80162 80188\nf 80161 80188 80187\nf 80162 80163 80189\nf 80162 80189 80188\nf 80163 80165 80190\nf 80163 80190 80189\nf 80164 80191 80192\nf 80164 80192 80165\nf 80165 80192 80190\nf 80166 80167 80193\nf 80167 80168 80194\nf 80167 80194 80193\nf 80168 80169 80195\nf 80168 80195 80194\nf 80169 80170 80196\nf 80169 80196 80195\nf 80170 80171 80197\nf 80170 80197 80196\nf 80171 80172 80198\nf 80171 80198 80197\nf 80172 80173 80199\nf 80172 80199 80198\nf 80173 80174 80200\nf 80173 80200 80199\nf 80174 80175 80201\nf 80174 80201 80200\nf 80175 80176 80202\nf 80175 80202 80201\nf 80176 80177 80203\nf 80176 80203 80202\nf 80177 80178 80204\nf 80177 80204 80203\nf 80178 80180 80205\nf 80178 80205 80204\nf 80179 80206 80208\nf 80179 80208 80180\nf 80180 80208 80205\nf 80181 80182 80209\nf 80182 80183 80210\nf 80182 80210 80209\nf 80183 80184 80211\nf 80183 80211 80210\nf 80184 80185 80212\nf 80184 80212 80211\nf 80185 80186 80213\nf 80185 80213 80212\nf 80186 80187 80214\nf 80186 80214 80213\nf 80187 80188 80215\nf 80187 80215 80214\nf 80188 80189 80216\nf 80188 80216 80215\nf 80189 80190 80217\nf 80189 80217 80216\nf 80190 80192 80218\nf 80190 80218 80217\nf 80191 80219 80220\nf 80191 80220 80192\nf 80192 80220 80218\nf 80193 80194 80221\nf 80194 80195 80222\nf 80194 80222 80221\nf 80195 80196 80223\nf 80195 80223 80222\nf 80196 80197 80224\nf 80196 80224 80223\nf 80197 80198 80225\nf 80197 80225 80224\nf 80198 80199 80226\nf 80198 80226 80225\nf 80199 80200 80227\nf 80199 80227 80226\nf 80200 80201 80228\nf 80200 80228 80227\nf 80201 80202 80229\nf 80201 80229 80228\nf 80202 80203 80230\nf 80202 80230 80229\nf 80203 80204 80231\nf 80203 80231 80230\nf 80204 80205 80232\nf 80204 80232 80231\nf 80205 80208 80234\nf 80205 80234 80232\nf 80206 80207 80208\nf 80207 80233 80234\nf 80207 80234 80208\nf 80209 80210 80235\nf 80210 80211 80236\nf 80210 80236 80235\nf 80211 80212 80237\nf 80211 80237 80236\nf 80212 80213 80238\nf 80212 80238 80237\nf 80213 80214 80239\nf 80213 80239 80238\nf 80214 80215 80240\nf 80214 80240 80239\nf 80215 80216 80241\nf 80215 80241 80240\nf 80216 80217 80242\nf 80216 80242 80241\nf 80217 80218 80243\nf 80217 80243 80242\nf 80218 80220 80244\nf 80218 80244 80243\nf 80219 80245 80246\nf 80219 80246 80220\nf 80220 80246 80244\nf 80221 80222 80247\nf 80222 80223 80248\nf 80222 80248 80247\nf 80223 80224 80249\nf 80223 80249 80248\nf 80224 80225 80250\nf 80224 80250 80249\nf 80225 80226 80251\nf 80225 80251 80250\nf 80226 80227 80252\nf 80226 80252 80251\nf 80227 80228 80253\nf 80227 80253 80252\nf 80228 80229 80254\nf 80228 80254 80253\nf 80229 80230 80255\nf 80229 80255 80254\nf 80230 80231 80256\nf 80230 80256 80255\nf 80231 80232 80257\nf 80231 80257 80256\nf 80232 80234 80258\nf 80232 80258 80257\nf 80233 80259 80260\nf 80233 80260 80234\nf 80234 80260 80258\nf 80235 80236 80261\nf 80236 80237 80262\nf 80236 80262 80261\nf 80237 80238 80263\nf 80237 80263 80262\nf 80238 80239 80264\nf 80238 80264 80263\nf 80239 80240 80265\nf 80239 80265 80264\nf 80240 80241 80266\nf 80240 80266 80265\nf 80241 80242 80267\nf 80241 80267 80266\nf 80242 80243 80268\nf 80242 80268 80267\nf 80243 80244 80269\nf 80243 80269 80268\nf 80244 80246 80270\nf 80244 80270 80269\nf 80245 80271 80272\nf 80245 80272 80246\nf 80246 80272 80270\nf 80247 80248 80274\nf 80248 80249 80275\nf 80248 80275 80274\nf 80249 80250 80276\nf 80249 80276 80275\nf 80250 80251 80277\nf 80250 80277 80276\nf 80251 80252 80278\nf 80251 80278 80277\nf 80252 80253 80279\nf 80252 80279 80278\nf 80253 80254 80280\nf 80253 80280 80279\nf 80254 80255 80281\nf 80254 80281 80280\nf 80255 80256 80282\nf 80255 80282 80281\nf 80256 80257 80283\nf 80256 80283 80282\nf 80257 80258 80284\nf 80257 80284 80283\nf 80258 80260 80285\nf 80258 80285 80284\nf 80259 80286 80287\nf 80259 80287 80260\nf 80260 80287 80285\nf 80261 80262 80288\nf 80262 80263 80289\nf 80262 80289 80288\nf 80263 80264 80290\nf 80263 80290 80289\nf 80264 80265 80291\nf 80264 80291 80290\nf 80265 80266 80292\nf 80265 80292 80291\nf 80266 80267 80293\nf 80266 80293 80292\nf 80267 80268 80294\nf 80267 80294 80293\nf 80268 80269 80295\nf 80268 80295 80294\nf 80269 80270 80296\nf 80269 80296 80295\nf 80270 80272 80297\nf 80270 80297 80296\nf 80271 80273 80300\nf 80271 80300 80272\nf 80272 80298 80297\nf 80272 80300 80298\nf 80273 80299 80300\nf 80274 80275 80301\nf 80275 80276 80302\nf 80275 80302 80301\nf 80276 80277 80303\nf 80276 80303 80302\nf 80277 80278 80304\nf 80277 80304 80303\nf 80278 80279 80305\nf 80278 80305 80304\nf 80279 80280 80306\nf 80279 80306 80305\nf 80280 80281 80307\nf 80280 80307 80306\nf 80281 80282 80308\nf 80281 80308 80307\nf 80282 80283 80309\nf 80282 80309 80308\nf 80283 80284 80310\nf 80283 80310 80309\nf 80284 80285 80311\nf 80284 80311 80310\nf 80285 80287 80312\nf 80285 80312 80311\nf 80286 80313 80314\nf 80286 80314 80287\nf 80287 80314 80312\nf 80288 80289 80315\nf 80289 80290 80316\nf 80289 80316 80315\nf 80290 80291 80317\nf 80290 80317 80316\nf 80291 80292 80318\nf 80291 80318 80317\nf 80292 80293 80319\nf 80292 80319 80318\nf 80293 80294 80320\nf 80293 80320 80319\nf 80294 80295 80321\nf 80294 80321 80320\nf 80295 80296 80322\nf 80295 80322 80321\nf 80296 80297 80323\nf 80296 80323 80322\nf 80297 80298 80324\nf 80297 80324 80323\nf 80298 80300 80325\nf 80298 80325 80324\nf 80299 80326 80327\nf 80299 80327 80300\nf 80300 80327 80325\nf 80301 80302 80328\nf 80302 80303 80329\nf 80302 80329 80328\nf 80303 80304 80330\nf 80303 80330 80329\nf 80304 80305 80331\nf 80304 80331 80330\nf 80305 80306 80332\nf 80305 80332 80331\nf 80306 80307 80333\nf 80306 80333 80332\nf 80307 80308 80334\nf 80307 80334 80333\nf 80308 80309 80335\nf 80308 80335 80334\nf 80309 80310 80336\nf 80309 80336 80335\nf 80310 80311 80337\nf 80310 80337 80336\nf 80311 80312 80338\nf 80311 80338 80337\nf 80312 80314 80339\nf 80312 80339 80338\nf 80313 80340 80341\nf 80313 80341 80314\nf 80314 80341 80339\nf 80315 80316 80342\nf 80316 80317 80343\nf 80316 80343 80342\nf 80317 80318 80344\nf 80317 80344 80343\nf 80318 80319 80345\nf 80318 80345 80344\nf 80319 80320 80346\nf 80319 80346 80345\nf 80320 80321 80347\nf 80320 80347 80346\nf 80321 80322 80348\nf 80321 80348 80347\nf 80322 80323 80349\nf 80322 80349 80348\nf 80323 80324 80350\nf 80323 80350 80349\nf 80324 80325 80351\nf 80324 80351 80350\nf 80325 80327 80352\nf 80325 80352 80351\nf 80326 80353 80354\nf 80326 80354 80327\nf 80327 80354 80352\nf 80328 80329 80355\nf 80329 80330 80356\nf 80329 80356 80355\nf 80330 80331 80357\nf 80330 80357 80356\nf 80331 80332 80358\nf 80331 80358 80357\nf 80332 80333 80359\nf 80332 80359 80358\nf 80333 80334 80360\nf 80333 80360 80359\nf 80334 80335 80361\nf 80334 80361 80360\nf 80335 80336 80362\nf 80335 80362 80361\nf 80336 80337 80363\nf 80336 80363 80362\nf 80337 80338 80364\nf 80337 80364 80363\nf 80338 80339 80365\nf 80338 80365 80364\nf 80339 80341 80366\nf 80339 80366 80365\nf 80340 80367 80368\nf 80340 80368 80341\nf 80341 80368 80366\nf 80342 80343 80369\nf 80343 80344 80370\nf 80343 80370 80369\nf 80344 80345 80371\nf 80344 80371 80370\nf 80345 80346 80372\nf 80345 80372 80371\nf 80346 80347 80373\nf 80346 80373 80372\nf 80347 80348 80374\nf 80347 80374 80373\nf 80348 80349 80375\nf 80348 80375 80374\nf 80349 80350 80376\nf 80349 80376 80375\nf 80350 80351 80377\nf 80350 80377 80376\nf 80351 80352 80378\nf 80351 80378 80377\nf 80352 80354 80379\nf 80352 80379 80378\nf 80353 80380 80381\nf 80353 80381 80354\nf 80354 80381 80379\nf 80355 80356 80382\nf 80356 80357 80383\nf 80356 80383 80382\nf 80357 80358 80384\nf 80357 80384 80383\nf 80358 80359 80385\nf 80358 80385 80384\nf 80359 80360 80386\nf 80359 80386 80385\nf 80360 80361 80387\nf 80360 80387 80386\nf 80361 80362 80388\nf 80361 80388 80387\nf 80362 80363 80389\nf 80362 80389 80388\nf 80363 80364 80390\nf 80363 80390 80389\nf 80364 80365 80391\nf 80364 80391 80390\nf 80365 80366 80392\nf 80365 80392 80391\nf 80366 80368 80393\nf 80366 80393 80392\nf 80367 80394 80395\nf 80367 80395 80368\nf 80368 80395 80393\nf 80369 80370 80396\nf 80370 80371 80397\nf 80370 80397 80396\nf 80371 80372 80398\nf 80371 80398 80397\nf 80372 80373 80399\nf 80372 80399 80398\nf 80373 80374 80400\nf 80373 80400 80399\nf 80374 80375 80401\nf 80374 80401 80400\nf 80375 80376 80402\nf 80375 80402 80401\nf 80376 80377 80403\nf 80376 80403 80402\nf 80377 80378 80404\nf 80377 80404 80403\nf 80378 80379 80405\nf 80378 80405 80404\nf 80379 80381 80406\nf 80379 80406 80405\nf 80380 80407 80409\nf 80380 80409 80381\nf 80381 80409 80406\nf 80382 80383 80410\nf 80383 80384 80411\nf 80383 80411 80410\nf 80384 80385 80412\nf 80384 80412 80411\nf 80385 80386 80413\nf 80385 80413 80412\nf 80386 80387 80414\nf 80386 80414 80413\nf 80387 80388 80415\nf 80387 80415 80414\nf 80388 80389 80416\nf 80388 80416 80415\nf 80389 80390 80417\nf 80389 80417 80416\nf 80390 80391 80418\nf 80390 80418 80417\nf 80391 80392 80419\nf 80391 80419 80418\nf 80392 80393 80420\nf 80392 80420 80419\nf 80393 80395 80421\nf 80393 80421 80420\nf 80394 80422 80423\nf 80394 80423 80395\nf 80395 80423 80421\nf 80396 80397 80424\nf 80397 80398 80425\nf 80397 80425 80424\nf 80398 80399 80426\nf 80398 80426 80425\nf 80399 80400 80427\nf 80399 80427 80426\nf 80400 80401 80428\nf 80400 80428 80427\nf 80401 80402 80429\nf 80401 80429 80428\nf 80402 80403 80430\nf 80402 80430 80429\nf 80403 80404 80431\nf 80403 80431 80430\nf 80404 80405 80432\nf 80404 80432 80431\nf 80405 80406 80433\nf 80405 80433 80432\nf 80406 80409 80435\nf 80406 80435 80433\nf 80407 80408 80409\nf 80408 80434 80435\nf 80408 80435 80409\nf 80410 80411 80436\nf 80411 80412 80437\nf 80411 80437 80436\nf 80412 80413 80438\nf 80412 80438 80437\nf 80413 80414 80439\nf 80413 80439 80438\nf 80414 80415 80440\nf 80414 80440 80439\nf 80415 80416 80441\nf 80415 80441 80440\nf 80416 80417 80442\nf 80416 80442 80441\nf 80417 80418 80443\nf 80417 80443 80442\nf 80418 80419 80444\nf 80418 80444 80443\nf 80419 80420 80445\nf 80419 80445 80444\nf 80420 80421 80446\nf 80420 80446 80445\nf 80421 80423 80447\nf 80421 80447 80446\nf 80422 80448 80449\nf 80422 80449 80423\nf 80423 80449 80447\nf 80424 80425 80450\nf 80425 80426 80451\nf 80425 80451 80450\nf 80426 80427 80452\nf 80426 80452 80451\nf 80427 80428 80453\nf 80427 80453 80452\nf 80428 80429 80454\nf 80428 80454 80453\nf 80429 80430 80455\nf 80429 80455 80454\nf 80430 80431 80456\nf 80430 80456 80455\nf 80431 80432 80457\nf 80431 80457 80456\nf 80432 80433 80458\nf 80432 80458 80457\nf 80433 80435 80459\nf 80433 80459 80458\nf 80434 80460 80461\nf 80434 80461 80435\nf 80435 80461 80459\nf 80436 80437 80462\nf 80437 80438 80463\nf 80437 80463 80462\nf 80438 80439 80464\nf 80438 80464 80463\nf 80439 80440 80465\nf 80439 80465 80464\nf 80440 80441 80466\nf 80440 80466 80465\nf 80441 80442 80467\nf 80441 80467 80466\nf 80442 80443 80468\nf 80442 80468 80467\nf 80443 80444 80469\nf 80443 80469 80468\nf 80444 80445 80470\nf 80444 80470 80469\nf 80445 80446 80471\nf 80445 80471 80470\nf 80446 80447 80472\nf 80446 80472 80471\nf 80447 80449 80473\nf 80447 80473 80472\nf 80448 80474 80475\nf 80448 80475 80449\nf 80449 80475 80473\nf 80450 80451 80476\nf 80451 80452 80477\nf 80451 80477 80476\nf 80452 80453 80478\nf 80452 80478 80477\nf 80453 80454 80479\nf 80453 80479 80478\nf 80454 80455 80480\nf 80454 80480 80479\nf 80455 80456 80481\nf 80455 80481 80480\nf 80456 80457 80482\nf 80456 80482 80481\nf 80457 80458 80483\nf 80457 80483 80482\nf 80458 80459 80484\nf 80458 80484 80483\nf 80459 80461 80485\nf 80459 80485 80484\nf 80460 80486 80487\nf 80460 80487 80461\nf 80461 80487 80485\nf 80462 80463 80488\nf 80463 80464 80489\nf 80463 80489 80488\nf 80464 80465 80490\nf 80464 80490 80489\nf 80465 80466 80491\nf 80465 80491 80490\nf 80466 80467 80492\nf 80466 80492 80491\nf 80467 80468 80493\nf 80467 80493 80492\nf 80468 80469 80494\nf 80468 80494 80493\nf 80469 80470 80495\nf 80469 80495 80494\nf 80470 80471 80496\nf 80470 80496 80495\nf 80471 80472 80497\nf 80471 80497 80496\nf 80472 80473 80498\nf 80472 80498 80497\nf 80473 80475 80499\nf 80473 80499 80498\nf 80474 80500 80501\nf 80474 80501 80475\nf 80475 80501 80499\nf 80476 80477 80503\nf 80477 80478 80504\nf 80477 80504 80503\nf 80478 80479 80505\nf 80478 80505 80504\nf 80479 80480 80506\nf 80479 80506 80505\nf 80480 80481 80507\nf 80480 80507 80506\nf 80481 80482 80508\nf 80481 80508 80507\nf 80482 80483 80509\nf 80482 80509 80508\nf 80483 80484 80510\nf 80483 80510 80509\nf 80484 80485 80511\nf 80484 80511 80510\nf 80485 80487 80512\nf 80485 80512 80511\nf 80486 80513 80514\nf 80486 80514 80487\nf 80487 80514 80512\nf 80488 80489 80515\nf 80489 80490 80516\nf 80489 80516 80515\nf 80490 80491 80517\nf 80490 80517 80516\nf 80491 80492 80518\nf 80491 80518 80517\nf 80492 80493 80519\nf 80492 80519 80518\nf 80493 80494 80520\nf 80493 80520 80519\nf 80494 80495 80521\nf 80494 80521 80520\nf 80495 80496 80522\nf 80495 80522 80521\nf 80496 80497 80523\nf 80496 80523 80522\nf 80497 80498 80524\nf 80497 80524 80523\nf 80498 80499 80525\nf 80498 80525 80524\nf 80499 80501 80526\nf 80499 80526 80525\nf 80500 80502 80529\nf 80500 80529 80501\nf 80501 80527 80526\nf 80501 80529 80527\nf 80502 80528 80529\nf 80503 80504 80530\nf 80504 80505 80531\nf 80504 80531 80530\nf 80505 80506 80532\nf 80505 80532 80531\nf 80506 80507 80533\nf 80506 80533 80532\nf 80507 80508 80534\nf 80507 80534 80533\nf 80508 80509 80535\nf 80508 80535 80534\nf 80509 80510 80536\nf 80509 80536 80535\nf 80510 80511 80537\nf 80510 80537 80536\nf 80511 80512 80538\nf 80511 80538 80537\nf 80512 80514 80539\nf 80512 80539 80538\nf 80513 80540 80541\nf 80513 80541 80514\nf 80514 80541 80539\nf 80515 80516 80542\nf 80516 80517 80543\nf 80516 80543 80542\nf 80517 80518 80544\nf 80517 80544 80543\nf 80518 80519 80545\nf 80518 80545 80544\nf 80519 80520 80546\nf 80519 80546 80545\nf 80520 80521 80547\nf 80520 80547 80546\nf 80521 80522 80548\nf 80521 80548 80547\nf 80522 80523 80549\nf 80522 80549 80548\nf 80523 80524 80550\nf 80523 80550 80549\nf 80524 80525 80551\nf 80524 80551 80550\nf 80525 80526 80552\nf 80525 80552 80551\nf 80526 80527 80553\nf 80526 80553 80552\nf 80527 80529 80554\nf 80527 80554 80553\nf 80528 80555 80556\nf 80528 80556 80529\nf 80529 80556 80554\nf 80530 80531 80557\nf 80531 80532 80558\nf 80531 80558 80557\nf 80532 80533 80559\nf 80532 80559 80558\nf 80533 80534 80560\nf 80533 80560 80559\nf 80534 80535 80561\nf 80534 80561 80560\nf 80535 80536 80562\nf 80535 80562 80561\nf 80536 80537 80563\nf 80536 80563 80562\nf 80537 80538 80564\nf 80537 80564 80563\nf 80538 80539 80565\nf 80538 80565 80564\nf 80539 80541 80566\nf 80539 80566 80565\nf 80540 80567 80568\nf 80540 80568 80541\nf 80541 80568 80566\nf 80542 80543 80569\nf 80543 80544 80570\nf 80543 80570 80569\nf 80544 80545 80571\nf 80544 80571 80570\nf 80545 80546 80572\nf 80545 80572 80571\nf 80546 80547 80573\nf 80546 80573 80572\nf 80547 80548 80574\nf 80547 80574 80573\nf 80548 80549 80575\nf 80548 80575 80574\nf 80549 80550 80576\nf 80549 80576 80575\nf 80550 80551 80577\nf 80550 80577 80576\nf 80551 80552 80578\nf 80551 80578 80577\nf 80552 80553 80579\nf 80552 80579 80578\nf 80553 80554 80580\nf 80553 80580 80579\nf 80554 80556 80581\nf 80554 80581 80580\nf 80555 80582 80583\nf 80555 80583 80556\nf 80556 80583 80581\nf 80557 80558 80584\nf 80558 80559 80585\nf 80558 80585 80584\nf 80559 80560 80586\nf 80559 80586 80585\nf 80560 80561 80587\nf 80560 80587 80586\nf 80561 80562 80588\nf 80561 80588 80587\nf 80562 80563 80589\nf 80562 80589 80588\nf 80563 80564 80590\nf 80563 80590 80589\nf 80564 80565 80591\nf 80564 80591 80590\nf 80565 80566 80592\nf 80565 80592 80591\nf 80566 80568 80593\nf 80566 80593 80592\nf 80567 80594 80595\nf 80567 80595 80568\nf 80568 80595 80593\nf 80569 80570 80596\nf 80570 80571 80597\nf 80570 80597 80596\nf 80571 80572 80598\nf 80571 80598 80597\nf 80572 80573 80599\nf 80572 80599 80598\nf 80573 80574 80600\nf 80573 80600 80599\nf 80574 80575 80601\nf 80574 80601 80600\nf 80575 80576 80602\nf 80575 80602 80601\nf 80576 80577 80603\nf 80576 80603 80602\nf 80577 80578 80604\nf 80577 80604 80603\nf 80578 80579 80605\nf 80578 80605 80604\nf 80579 80580 80606\nf 80579 80606 80605\nf 80580 80581 80607\nf 80580 80607 80606\nf 80581 80583 80608\nf 80581 80608 80607\nf 80582 80609 80610\nf 80582 80610 80583\nf 80583 80610 80608\nf 80584 80585 80611\nf 80585 80586 80612\nf 80585 80612 80611\nf 80586 80587 80613\nf 80586 80613 80612\nf 80587 80588 80614\nf 80587 80614 80613\nf 80588 80589 80615\nf 80588 80615 80614\nf 80589 80590 80616\nf 80589 80616 80615\nf 80590 80591 80617\nf 80590 80617 80616\nf 80591 80592 80618\nf 80591 80618 80617\nf 80592 80593 80619\nf 80592 80619 80618\nf 80593 80595 80620\nf 80593 80620 80619\nf 80594 80621 80622\nf 80594 80622 80595\nf 80595 80622 80620\nf 80596 80597 80623\nf 80597 80598 80624\nf 80597 80624 80623\nf 80598 80599 80625\nf 80598 80625 80624\nf 80599 80600 80626\nf 80599 80626 80625\nf 80600 80601 80627\nf 80600 80627 80626\nf 80601 80602 80628\nf 80601 80628 80627\nf 80602 80603 80629\nf 80602 80629 80628\nf 80603 80604 80630\nf 80603 80630 80629\nf 80604 80605 80631\nf 80604 80631 80630\nf 80605 80606 80632\nf 80605 80632 80631\nf 80606 80607 80633\nf 80606 80633 80632\nf 80607 80608 80634\nf 80607 80634 80633\nf 80608 80610 80635\nf 80608 80635 80634\nf 80609 80636 80637\nf 80609 80637 80610\nf 80610 80637 80635\nf 80611 80612 80638\nf 80612 80613 80639\nf 80612 80639 80638\nf 80613 80614 80640\nf 80613 80640 80639\nf 80614 80615 80641\nf 80614 80641 80640\nf 80615 80616 80642\nf 80615 80642 80641\nf 80616 80617 80643\nf 80616 80643 80642\nf 80617 80618 80644\nf 80617 80644 80643\nf 80618 80619 80645\nf 80618 80645 80644\nf 80619 80620 80646\nf 80619 80646 80645\nf 80620 80622 80647\nf 80620 80647 80646\nf 80621 80648 80649\nf 80621 80649 80622\nf 80622 80649 80647\nf 80623 80624 80650\nf 80624 80625 80651\nf 80624 80651 80650\nf 80625 80626 80652\nf 80625 80652 80651\nf 80626 80627 80653\nf 80626 80653 80652\nf 80627 80628 80654\nf 80627 80654 80653\nf 80628 80629 80655\nf 80628 80655 80654\nf 80629 80630 80656\nf 80629 80656 80655\nf 80630 80631 80657\nf 80630 80657 80656\nf 80631 80632 80658\nf 80631 80658 82542\nf 80631 82542 82544\nf 80631 82544 80657\nf 80632 80633 80658\nf 80633 80634 80659\nf 80633 80659 80658\nf 80634 80635 80660\nf 80634 80660 80659\nf 80635 80637 80661\nf 80635 80661 80660\nf 80636 80662 80663\nf 80636 80663 80637\nf 80637 80663 80661\nf 80638 80639 80664\nf 80639 80640 80666\nf 80639 80666 80664\nf 80640 80641 80667\nf 80640 80667 80666\nf 80641 80642 80668\nf 80641 80668 80667\nf 80642 80643 80669\nf 80642 80669 82543\nf 80642 82543 82548\nf 80642 82548 80668\nf 80643 80644 80669\nf 80644 80645 80670\nf 80644 80670 80669\nf 80645 80646 80671\nf 80645 80671 80670\nf 80646 80647 80672\nf 80646 80672 80671\nf 80647 80649 80673\nf 80647 80673 80672\nf 80648 80674 80675\nf 80648 80675 80649\nf 80649 80675 80673\nf 80650 80651 80676\nf 80651 80652 80677\nf 80651 80677 80676\nf 80652 80653 80678\nf 80652 80678 80677\nf 80653 80654 80679\nf 80653 80679 80678\nf 80654 80655 80680\nf 80654 80680 80679\nf 80655 80656 80681\nf 80655 80681 80680\nf 80656 80657 80682\nf 80656 80682 80681\nf 80657 80683 80682\nf 80657 82544 82551\nf 80657 82551 80683\nf 80658 80659 80684\nf 80658 80684 82547\nf 80658 82545 82542\nf 80658 82547 82545\nf 80659 80660 80684\nf 80660 80661 80685\nf 80660 80685 80684\nf 80661 80663 80686\nf 80661 80686 80685\nf 80662 80687 80688\nf 80662 80688 80663\nf 80663 80688 80686\nf 80664 80666 80665\nf 80665 80666 80689\nf 80666 80667 80690\nf 80666 80690 80689\nf 80667 80668 80690\nf 80668 80691 80690\nf 80668 82548 82555\nf 80668 82555 80691\nf 80669 80670 80692\nf 80669 80692 82549\nf 80669 82549 82543\nf 80670 80671 80693\nf 80670 80693 80692\nf 80671 80672 80694\nf 80671 80694 80693\nf 80672 80673 80695\nf 80672 80695 80694\nf 80673 80675 80696\nf 80673 80696 80695\nf 80674 80697 80698\nf 80674 80698 80675\nf 80675 80698 80696\nf 80676 80677 80699\nf 80677 80678 80700\nf 80677 80700 80699\nf 80678 80679 80701\nf 80678 80701 80700\nf 80679 80680 80702\nf 80679 80702 80701\nf 80680 80681 80703\nf 80680 80703 80702\nf 80681 80682 80704\nf 80681 80704 80703\nf 80682 80683 80705\nf 80682 80705 80704\nf 80683 80706 80705\nf 80683 82551 82558\nf 80683 82558 80706\nf 80684 80685 80707\nf 80684 80707 82553\nf 80684 82553 82547\nf 80685 80686 80708\nf 80685 80708 80707\nf 80686 80688 80709\nf 80686 80709 80708\nf 80687 80710 80711\nf 80687 80711 80688\nf 80688 80711 80709\nf 80689 80690 80712\nf 80690 80691 80713\nf 80690 80713 80712\nf 80691 80714 80713\nf 80691 82555 82564\nf 80691 82564 80714\nf 80692 80693 80715\nf 80692 80715 82556\nf 80692 82556 82549\nf 80693 80694 80716\nf 80693 80716 80715\nf 80694 80695 80717\nf 80694 80717 80716\nf 80695 80696 80718\nf 80695 80718 80717\nf 80696 80698 80719\nf 80696 80719 80718\nf 80697 80720 80721\nf 80697 80721 80698\nf 80698 80721 80719\nf 80699 80700 80722\nf 80700 80701 80723\nf 80700 80723 80722\nf 80701 80702 80724\nf 80701 80724 80723\nf 80702 80703 80725\nf 80702 80725 80724\nf 80703 80704 80726\nf 80703 80726 80725\nf 80704 80705 80727\nf 80704 80727 80726\nf 80705 80706 80728\nf 80705 80728 80727\nf 80706 80729 80728\nf 80706 80730 80729\nf 80706 82558 82559\nf 80706 82559 80730\nf 80707 80708 80732\nf 80707 80731 82561\nf 80707 80732 80731\nf 80707 82561 82553\nf 80708 80709 80733\nf 80708 80733 80732\nf 80709 80711 80734\nf 80709 80734 80733\nf 80710 80735 80737\nf 80710 80737 80711\nf 80711 80737 80734\nf 80712 80713 80738\nf 80713 80714 80739\nf 80713 80739 80738\nf 80714 80740 80739\nf 80714 82564 82567\nf 80714 82567 80740\nf 80715 80716 80741\nf 80715 80741 82565\nf 80715 82565 82556\nf 80716 80717 80742\nf 80716 80742 80741\nf 80717 80718 80743\nf 80717 80743 80742\nf 80718 80719 80744\nf 80718 80744 80743\nf 80719 80721 80745\nf 80719 80745 80744\nf 80720 80746 80747\nf 80720 80747 80721\nf 80721 80747 80745\nf 80722 80723 80748\nf 80723 80724 80749\nf 80723 80749 80748\nf 80724 80725 80750\nf 80724 80750 80749\nf 80725 80726 80751\nf 80725 80751 80750\nf 80726 80727 80752\nf 80726 80752 80751\nf 80727 80728 80753\nf 80727 80753 80752\nf 80728 80729 80754\nf 80728 80754 80753\nf 80729 80730 80755\nf 80729 80755 80754\nf 80730 80731 80756\nf 80730 80756 80755\nf 80730 82559 82562\nf 80730 82562 80731\nf 80731 80732 80757\nf 80731 80757 80756\nf 80731 82562 82561\nf 80732 80733 80758\nf 80732 80758 80757\nf 80733 80734 80759\nf 80733 80759 80758\nf 80734 80737 80761\nf 80734 80761 80759\nf 80735 80736 80737\nf 80736 80760 80761\nf 80736 80761 80737\nf 80738 80739 80762\nf 80739 80740 80763\nf 80739 80763 80762\nf 80740 80764 80763\nf 80740 80765 80764\nf 80740 82567 82569\nf 80740 82569 80765\nf 80741 80742 80766\nf 80741 80765 82568\nf 80741 80766 80765\nf 80741 82568 82565\nf 80742 80743 80767\nf 80742 80767 80766\nf 80743 80744 80768\nf 80743 80768 80767\nf 80744 80745 80769\nf 80744 80769 80768\nf 80745 80747 80770\nf 80745 80770 80769\nf 80746 80771 80772\nf 80746 80772 80747\nf 80747 80772 80770\nf 80748 80749 80773\nf 80749 80750 80774\nf 80749 80774 80773\nf 80750 80751 80775\nf 80750 80775 80774\nf 80751 80752 80776\nf 80751 80776 80775\nf 80752 80753 80777\nf 80752 80777 80776\nf 80753 80754 80778\nf 80753 80778 80777\nf 80754 80755 80779\nf 80754 80779 80778\nf 80755 80756 80780\nf 80755 80780 80779\nf 80756 80757 80781\nf 80756 80781 80780\nf 80757 80758 80782\nf 80757 80782 80781\nf 80758 80759 80783\nf 80758 80783 80782\nf 80759 80761 80784\nf 80759 80784 80783\nf 80760 80785 80786\nf 80760 80786 80761\nf 80761 80786 80784\nf 80762 80763 80787\nf 80763 80764 80788\nf 80763 80788 80787\nf 80764 80765 80789\nf 80764 80789 80788\nf 80765 80766 80790\nf 80765 80790 80789\nf 80765 82569 82568\nf 80766 80767 80791\nf 80766 80791 80790\nf 80767 80768 80792\nf 80767 80792 80791\nf 80768 80769 80793\nf 80768 80793 80792\nf 80769 80770 80794\nf 80769 80794 80793\nf 80770 80772 80795\nf 80770 80795 80794\nf 80771 80796 80797\nf 80771 80797 80772\nf 80772 80797 80795\nf 80773 80774 80798\nf 80774 80775 80799\nf 80774 80799 80798\nf 80775 80776 80800\nf 80775 80800 80799\nf 80776 80777 80801\nf 80776 80801 80800\nf 80777 80778 80802\nf 80777 80802 80801\nf 80778 80779 80803\nf 80778 80803 80802\nf 80779 80780 80804\nf 80779 80804 80803\nf 80780 80781 80805\nf 80780 80805 80804\nf 80781 80782 80806\nf 80781 80806 80805\nf 80782 80783 80807\nf 80782 80807 80806\nf 80783 80784 80808\nf 80783 80808 80807\nf 80784 80786 80809\nf 80784 80809 80808\nf 80785 80810 80811\nf 80785 80811 80786\nf 80786 80811 80809\nf 80787 80788 80812\nf 80788 80789 80813\nf 80788 80813 80812\nf 80789 80790 80814\nf 80789 80814 80813\nf 80790 80791 80815\nf 80790 80815 80814\nf 80791 80792 80816\nf 80791 80816 80815\nf 80792 80793 80817\nf 80792 80817 80816\nf 80793 80794 80818\nf 80793 80818 80817\nf 80794 80795 80819\nf 80794 80819 80818\nf 80795 80797 80820\nf 80795 80820 80819\nf 80796 80821 80822\nf 80796 80822 80797\nf 80797 80822 80820\nf 80798 80799 80823\nf 80799 80800 80824\nf 80799 80824 80823\nf 80800 80801 80825\nf 80800 80825 80824\nf 80801 80802 80826\nf 80801 80826 80825\nf 80802 80803 80827\nf 80802 80827 80826\nf 80803 80804 80828\nf 80803 80828 80827\nf 80804 80805 80829\nf 80804 80829 80828\nf 80805 80806 80830\nf 80805 80830 80829\nf 80806 80807 80831\nf 80806 80831 80830\nf 80807 80808 80832\nf 80807 80832 80831\nf 80808 80809 80833\nf 80808 80833 80832\nf 80809 80811 80834\nf 80809 80834 80833\nf 80810 80835 80836\nf 80810 80836 80811\nf 80811 80836 80834\nf 80812 80813 80837\nf 80813 80814 80838\nf 80813 80838 80837\nf 80814 80815 80839\nf 80814 80839 80838\nf 80815 80816 80840\nf 80815 80840 80839\nf 80816 80817 80841\nf 80816 80841 80840\nf 80817 80818 80842\nf 80817 80842 80841\nf 80818 80819 80843\nf 80818 80843 80842\nf 80819 80820 80844\nf 80819 80844 80843\nf 80820 80822 80845\nf 80820 80845 80844\nf 80821 80846 80847\nf 80821 80847 80822\nf 80822 80847 80845\nf 80823 80824 80848\nf 80824 80825 80849\nf 80824 80849 80848\nf 80825 80826 80850\nf 80825 80850 80849\nf 80826 80827 80851\nf 80826 80851 80850\nf 80827 80828 80852\nf 80827 80852 80851\nf 80828 80829 80853\nf 80828 80853 80852\nf 80829 80830 80854\nf 80829 80854 80853\nf 80830 80831 80855\nf 80830 80855 80854\nf 80831 80832 80856\nf 80831 80856 80855\nf 80832 80833 80857\nf 80832 80857 80856\nf 80833 80834 80858\nf 80833 80858 80857\nf 80834 80836 80859\nf 80834 80859 80858\nf 80835 80860 80861\nf 80835 80861 80836\nf 80836 80861 80859\nf 80837 80838 80862\nf 80838 80839 80863\nf 80838 80863 80862\nf 80839 80840 80864\nf 80839 80864 80863\nf 80840 80841 80865\nf 80840 80865 80864\nf 80841 80842 80866\nf 80841 80866 80865\nf 80842 80843 80867\nf 80842 80867 80866\nf 80843 80844 80868\nf 80843 80868 80867\nf 80844 80845 80869\nf 80844 80869 80868\nf 80845 80847 80870\nf 80845 80870 80869\nf 80846 80871 80872\nf 80846 80872 80847\nf 80847 80872 80870\nf 80848 80849 80873\nf 80849 80850 80874\nf 80849 80874 80873\nf 80850 80851 80875\nf 80850 80875 80874\nf 80851 80852 80876\nf 80851 80876 80875\nf 80852 80853 80877\nf 80852 80877 80876\nf 80853 80854 80878\nf 80853 80878 80877\nf 80854 80855 80879\nf 80854 80879 80878\nf 80855 80856 80880\nf 80855 80880 80879\nf 80856 80857 80881\nf 80856 80881 80880\nf 80857 80858 80882\nf 80857 80882 80881\nf 80858 80859 80883\nf 80858 80883 80882\nf 80859 80861 80884\nf 80859 80884 80883\nf 80860 80885 80886\nf 80860 80886 80861\nf 80861 80886 80884\nf 80862 80863 80887\nf 80863 80864 80888\nf 80863 80888 80887\nf 80864 80865 80889\nf 80864 80889 80888\nf 80865 80866 80890\nf 80865 80890 80889\nf 80866 80867 80891\nf 80866 80891 80890\nf 80867 80868 80892\nf 80867 80892 80891\nf 80868 80869 80893\nf 80868 80893 80892\nf 80869 80870 80894\nf 80869 80894 80893\nf 80870 80872 80895\nf 80870 80895 80894\nf 80871 80896 80897\nf 80871 80897 80872\nf 80872 80897 80895\nf 80873 80874 80898\nf 80874 80875 80899\nf 80874 80899 80898\nf 80875 80876 80900\nf 80875 80900 80899\nf 80876 80877 80901\nf 80876 80901 80900\nf 80877 80878 80902\nf 80877 80902 80901\nf 80878 80879 80903\nf 80878 80903 80902\nf 80879 80880 80904\nf 80879 80904 80903\nf 80880 80881 80905\nf 80880 80905 80904\nf 80881 80882 80906\nf 80881 80906 80905\nf 80882 80883 80907\nf 80882 80907 80906\nf 80883 80884 80908\nf 80883 80908 80907\nf 80884 80886 80909\nf 80884 80909 80908\nf 80885 80910 80911\nf 80885 80911 80886\nf 80886 80911 80909\nf 80887 80888 80913\nf 80888 80889 80914\nf 80888 80914 80913\nf 80889 80890 80915\nf 80889 80915 80914\nf 80890 80891 80916\nf 80890 80916 80915\nf 80891 80892 80917\nf 80891 80917 80916\nf 80892 80893 80918\nf 80892 80918 80917\nf 80893 80894 80919\nf 80893 80919 80918\nf 80894 80895 80920\nf 80894 80920 80919\nf 80895 80897 80921\nf 80895 80921 80920\nf 80896 80922 80923\nf 80896 80923 80897\nf 80897 80923 80921\nf 80898 80899 80925\nf 80899 80900 80927\nf 80899 80927 80925\nf 80900 80901 80928\nf 80900 80928 80927\nf 80901 80902 80929\nf 80901 80929 80928\nf 80902 80903 80930\nf 80902 80930 80929\nf 80903 80904 80931\nf 80903 80931 80930\nf 80904 80905 80932\nf 80904 80932 80931\nf 80905 80906 80933\nf 80905 80933 80932\nf 80906 80907 80934\nf 80906 80934 80933\nf 80907 80908 80935\nf 80907 80935 80934\nf 80908 80909 80936\nf 80908 80936 80935\nf 80909 80911 80937\nf 80909 80937 80936\nf 80910 80912 80940\nf 80910 80940 80911\nf 80911 80938 80937\nf 80911 80940 80938\nf 80912 80939 80940\nf 80913 80914 80941\nf 80914 80915 80942\nf 80914 80942 80941\nf 80915 80916 80943\nf 80915 80943 80942\nf 80916 80917 80944\nf 80916 80944 80943\nf 80917 80918 80945\nf 80917 80945 80944\nf 80918 80919 80946\nf 80918 80946 80945\nf 80919 80920 80947\nf 80919 80947 80946\nf 80920 80921 80948\nf 80920 80948 80947\nf 80921 80923 80949\nf 80921 80949 80948\nf 80922 80924 80952\nf 80922 80952 80923\nf 80923 80950 80949\nf 80923 80952 80950\nf 80924 80951 80952\nf 80925 80927 80926\nf 80926 80927 80953\nf 80927 80928 80955\nf 80927 80955 80953\nf 80928 80929 80955\nf 80929 80930 80956\nf 80929 80956 80955\nf 80930 80931 80957\nf 80930 80957 80956\nf 80931 80932 80958\nf 80931 80958 80957\nf 80932 80933 80959\nf 80932 80959 80958\nf 80933 80934 80960\nf 80933 80960 80959\nf 80934 80935 80961\nf 80934 80961 80960\nf 80935 80936 80962\nf 80935 80962 80961\nf 80936 80937 80963\nf 80936 80963 80962\nf 80937 80938 80964\nf 80937 80964 80963\nf 80938 80940 80965\nf 80938 80965 80964\nf 80939 80966 80967\nf 80939 80967 80940\nf 80940 80967 80965\nf 80941 80942 80968\nf 80942 80943 80969\nf 80942 80969 80968\nf 80943 80944 80970\nf 80943 80970 80969\nf 80944 80945 80971\nf 80944 80971 80970\nf 80945 80946 80972\nf 80945 80972 80971\nf 80946 80947 80973\nf 80946 80973 80972\nf 80947 80948 80974\nf 80947 80974 80973\nf 80948 80949 80975\nf 80948 80975 80974\nf 80949 80950 80976\nf 80949 80976 80975\nf 80950 80952 80977\nf 80950 80977 80976\nf 80951 80978 80979\nf 80951 80979 80952\nf 80952 80979 80977\nf 80953 80955 80954\nf 80954 80955 80981\nf 80954 80981 80980\nf 80955 80956 80982\nf 80955 80982 80981\nf 80956 80957 80983\nf 80956 80983 80982\nf 80957 80958 80984\nf 80957 80984 80983\nf 80958 80959 80985\nf 80958 80985 80984\nf 80959 80960 80986\nf 80959 80986 80985\nf 80960 80961 80987\nf 80960 80987 80986\nf 80961 80962 80988\nf 80961 80988 80987\nf 80962 80963 80989\nf 80962 80989 80988\nf 80963 80964 80990\nf 80963 80990 80989\nf 80964 80965 80991\nf 80964 80991 80990\nf 80965 80967 80992\nf 80965 80992 80991\nf 80966 80993 80994\nf 80966 80994 80967\nf 80967 80994 80992\nf 80968 80969 80995\nf 80969 80970 80996\nf 80969 80996 80995\nf 80970 80971 80997\nf 80970 80997 80996\nf 80971 80972 80998\nf 80971 80998 80997\nf 80972 80973 80999\nf 80972 80999 80998\nf 80973 80974 81000\nf 80973 81000 80999\nf 80974 80975 81001\nf 80974 81001 81000\nf 80975 80976 81002\nf 80975 81002 81001\nf 80976 80977 81003\nf 80976 81003 81002\nf 80977 80979 81004\nf 80977 81004 81003\nf 80978 81005 81006\nf 80978 81006 80979\nf 80979 81006 81004\nf 80980 80981 81007\nf 80981 80982 81009\nf 80981 81009 81007\nf 80982 80983 81010\nf 80982 81010 81009\nf 80983 80984 81011\nf 80983 81011 81010\nf 80984 80985 81012\nf 80984 81012 81011\nf 80985 80986 81013\nf 80985 81013 81012\nf 80986 80987 81014\nf 80986 81014 81013\nf 80987 80988 81015\nf 80987 81015 81014\nf 80988 80989 81016\nf 80988 81016 81015\nf 80989 80990 81017\nf 80989 81017 81016\nf 80990 80991 81018\nf 80990 81018 81017\nf 80991 80992 81019\nf 80991 81019 81018\nf 80992 80994 81020\nf 80992 81020 81019\nf 80993 81021 81022\nf 80993 81022 80994\nf 80994 81022 81020\nf 80995 80996 81023\nf 80996 80997 81024\nf 80996 81024 81023\nf 80997 80998 81025\nf 80997 81025 81024\nf 80998 80999 81026\nf 80998 81026 81025\nf 80999 81000 81027\nf 80999 81027 81026\nf 81000 81001 81028\nf 81000 81028 81027\nf 81001 81002 81029\nf 81001 81029 81028\nf 81002 81003 81030\nf 81002 81030 81029\nf 81003 81004 81031\nf 81003 81031 81030\nf 81004 81006 81032\nf 81004 81032 81031\nf 81005 81033 81034\nf 81005 81034 81006\nf 81006 81034 81032\nf 81007 81009 81008\nf 81008 81009 81036\nf 81008 81036 81035\nf 81009 81010 81037\nf 81009 81037 81036\nf 81010 81011 81038\nf 81010 81038 81037\nf 81011 81012 81039\nf 81011 81039 81038\nf 81012 81013 81040\nf 81012 81040 81039\nf 81013 81014 81041\nf 81013 81041 81040\nf 81014 81015 81042\nf 81014 81042 81041\nf 81015 81016 81043\nf 81015 81043 81042\nf 81016 81017 81044\nf 81016 81044 81043\nf 81017 81018 81045\nf 81017 81045 81044\nf 81018 81019 81046\nf 81018 81046 81045\nf 81019 81020 81047\nf 81019 81047 81046\nf 81020 81022 81048\nf 81020 81048 81047\nf 81021 81049 81051\nf 81021 81051 81022\nf 81022 81051 81048\nf 81023 81024 81052\nf 81024 81025 81053\nf 81024 81053 81052\nf 81025 81026 81054\nf 81025 81054 81053\nf 81026 81027 81055\nf 81026 81055 81054\nf 81027 81028 81056\nf 81027 81056 81055\nf 81028 81029 81057\nf 81028 81057 81056\nf 81029 81030 81058\nf 81029 81058 81057\nf 81030 81031 81059\nf 81030 81059 81058\nf 81031 81032 81060\nf 81031 81060 81059\nf 81032 81034 81061\nf 81032 81061 81060\nf 81033 81062 81063\nf 81033 81063 81034\nf 81034 81063 81061\nf 81035 81036 81064\nf 81036 81037 81066\nf 81036 81066 81064\nf 81037 81038 81067\nf 81037 81067 81066\nf 81038 81039 81068\nf 81038 81068 81067\nf 81039 81040 81069\nf 81039 81069 81068\nf 81040 81041 81070\nf 81040 81070 81069\nf 81041 81042 81071\nf 81041 81071 81070\nf 81042 81043 81072\nf 81042 81072 81071\nf 81043 81044 81073\nf 81043 81073 81072\nf 81044 81045 81074\nf 81044 81074 81073\nf 81045 81046 81075\nf 81045 81075 81074\nf 81046 81047 81076\nf 81046 81076 81075\nf 81047 81048 81077\nf 81047 81077 81076\nf 81048 81051 81079\nf 81048 81079 81077\nf 81049 81050 81051\nf 81050 81078 81079\nf 81050 81079 81051\nf 81052 81053 81080\nf 81053 81054 81081\nf 81053 81081 81080\nf 81054 81055 81082\nf 81054 81082 81081\nf 81055 81056 81083\nf 81055 81083 81082\nf 81056 81057 81084\nf 81056 81084 81083\nf 81057 81058 81085\nf 81057 81085 81084\nf 81058 81059 81086\nf 81058 81086 81085\nf 81059 81060 81087\nf 81059 81087 81086\nf 81060 81061 81088\nf 81060 81088 81087\nf 81061 81063 81089\nf 81061 81089 81088\nf 81062 81090 81091\nf 81062 81091 81063\nf 81063 81091 81089\nf 81064 81066 81065\nf 81065 81066 81092\nf 81066 81067 81094\nf 81066 81094 81092\nf 81067 81068 81094\nf 81068 81069 81095\nf 81068 81095 81094\nf 81069 81070 81096\nf 81069 81096 81095\nf 81070 81071 81097\nf 81070 81097 81096\nf 81071 81072 81098\nf 81071 81098 81097\nf 81072 81073 81099\nf 81072 81099 81098\nf 81073 81074 81100\nf 81073 81100 81099\nf 81074 81075 81101\nf 81074 81101 81100\nf 81075 81076 81102\nf 81075 81102 81101\nf 81076 81077 81103\nf 81076 81103 81102\nf 81077 81079 81104\nf 81077 81104 81103\nf 81078 81105 81106\nf 81078 81106 81079\nf 81079 81106 81104\nf 81080 81081 81107\nf 81081 81082 81108\nf 81081 81108 81107\nf 81082 81083 81109\nf 81082 81109 81108\nf 81083 81084 81110\nf 81083 81110 81109\nf 81084 81085 81111\nf 81084 81111 81110\nf 81085 81086 81112\nf 81085 81112 81111\nf 81086 81087 81113\nf 81086 81113 81112\nf 81087 81088 81114\nf 81087 81114 81113\nf 81088 81089 81115\nf 81088 81115 81114\nf 81089 81091 81116\nf 81089 81116 81115\nf 81090 81117 81118\nf 81090 81118 81091\nf 81091 81118 81116\nf 81092 81094 81093\nf 81093 81094 81119\nf 81094 81095 81121\nf 81094 81121 81119\nf 81095 81096 81121\nf 81096 81097 81123\nf 81096 81123 81121\nf 81097 81098 81125\nf 81097 81125 81123\nf 81098 81099 81127\nf 81098 81127 81125\nf 81099 81100 81129\nf 81099 81129 81127\nf 81100 81101 81130\nf 81100 81130 81129\nf 81101 81102 81131\nf 81101 81131 81130\nf 81102 81103 81132\nf 81102 81132 81131\nf 81103 81104 81133\nf 81103 81133 81132\nf 81104 81106 81134\nf 81104 81134 81133\nf 81105 81135 81137\nf 81105 81137 81106\nf 81106 81137 81134\nf 81107 81108 81138\nf 81108 81109 81140\nf 81108 81140 81138\nf 81109 81110 81141\nf 81109 81141 81140\nf 81110 81111 81142\nf 81110 81142 81141\nf 81111 81112 81143\nf 81111 81143 81142\nf 81112 81113 81144\nf 81112 81144 81143\nf 81113 81114 81145\nf 81113 81145 81144\nf 81114 81115 81146\nf 81114 81146 81145\nf 81115 81116 81147\nf 81115 81147 81146\nf 81116 81118 81148\nf 81116 81148 81147\nf 81117 81149 81150\nf 81117 81150 81118\nf 81118 81150 81148\nf 81119 81121 81120\nf 81120 81121 81122\nf 81121 81123 81122\nf 81122 81123 81124\nf 81123 81125 81124\nf 81124 81125 81126\nf 81125 81127 81126\nf 81126 81127 81128\nf 81127 81129 81128\nf 81128 81129 81151\nf 81129 81130 81153\nf 81129 81153 81151\nf 81130 81131 81153\nf 81131 81132 81155\nf 81131 81155 81153\nf 81132 81133 81157\nf 81132 81157 81155\nf 81133 81134 81158\nf 81133 81158 81157\nf 81134 81137 81160\nf 81134 81160 81158\nf 81135 81136 81137\nf 81136 81159 81160\nf 81136 81160 81137\nf 81138 81140 81139\nf 81139 81140 81161\nf 81140 81141 81162\nf 81140 81162 81161\nf 81141 81142 81162\nf 81142 81143 81163\nf 81142 81163 81162\nf 81143 81144 81164\nf 81143 81164 81163\nf 81144 81145 81165\nf 81144 81165 81164\nf 81145 81146 81166\nf 81145 81166 81165\nf 81146 81147 81167\nf 81146 81167 81166\nf 81147 81148 81168\nf 81147 81168 81167\nf 81148 81150 81169\nf 81148 81169 81168\nf 81149 81170 81171\nf 81149 81171 81150\nf 81150 81171 81169\nf 81151 81153 81152\nf 81152 81153 81154\nf 81153 81155 81154\nf 81154 81155 81156\nf 81155 81157 81156\nf 81156 81157 81172\nf 81157 81158 81173\nf 81157 81173 81172\nf 81158 81160 81173\nf 81159 81174 81176\nf 81159 81176 81160\nf 81160 81176 81173\nf 81161 81162 81177\nf 81162 81163 81178\nf 81162 81178 81177\nf 81163 81164 81179\nf 81163 81179 81178\nf 81164 81165 81180\nf 81164 81180 81179\nf 81165 81166 81181\nf 81165 81181 81180\nf 81166 81167 81182\nf 81166 81182 81181\nf 81167 81168 81183\nf 81167 81183 81182\nf 81168 81169 81184\nf 81168 81184 81183\nf 81169 81171 81185\nf 81169 81185 81184\nf 81170 81186 81188\nf 81170 81188 81171\nf 81171 81188 81185\nf 81172 81173 81189\nf 81173 81176 81191\nf 81173 81191 81189\nf 81174 81175 81176\nf 81175 81190 81191\nf 81175 81191 81176\nf 81177 81178 81192\nf 81178 81179 81193\nf 81178 81193 81192\nf 81179 81180 81194\nf 81179 81194 81193\nf 81180 81181 81195\nf 81180 81195 81194\nf 81181 81182 81196\nf 81181 81196 81195\nf 81182 81183 81197\nf 81182 81197 81196\nf 81183 81184 81198\nf 81183 81198 81197\nf 81184 81185 81199\nf 81184 81199 81198\nf 81185 81188 81201\nf 81185 81201 81199\nf 81186 81187 81188\nf 81187 81200 81201\nf 81187 81201 81188\nf 81189 81191 81203\nf 81190 81204 81206\nf 81190 81206 81191\nf 81191 81206 81203\nf 81192 81193 81207\nf 81193 81194 81209\nf 81193 81209 81207\nf 81194 81195 81210\nf 81194 81210 81209\nf 81195 81196 81211\nf 81195 81211 81210\nf 81196 81197 81212\nf 81196 81212 81211\nf 81197 81198 81213\nf 81197 81213 81212\nf 81198 81199 81214\nf 81198 81214 81213\nf 81199 81201 81215\nf 81199 81215 81214\nf 81200 81202 81218\nf 81200 81218 81201\nf 81201 81216 81215\nf 81201 81218 81216\nf 81202 81217 81218\nf 81203 81206 81205\nf 81204 81205 81206\nf 81207 81209 81208\nf 81208 81209 81220\nf 81208 81220 81219\nf 81209 81210 81221\nf 81209 81221 81220\nf 81210 81211 81222\nf 81210 81222 81221\nf 81211 81212 81223\nf 81211 81223 81222\nf 81212 81213 81224\nf 81212 81224 81223\nf 81213 81214 81225\nf 81213 81225 81224\nf 81214 81215 81226\nf 81214 81226 81225\nf 81215 81216 81227\nf 81215 81227 81226\nf 81216 81218 81228\nf 81216 81228 81227\nf 81217 81229 81230\nf 81217 81230 81218\nf 81218 81230 81228\nf 81219 81220 81231\nf 81220 81221 81232\nf 81220 81232 81231\nf 81221 81222 81233\nf 81221 81233 81232\nf 81222 81223 81234\nf 81222 81234 81233\nf 81223 81224 81235\nf 81223 81235 81234\nf 81224 81225 81236\nf 81224 81236 81235\nf 81225 81226 81237\nf 81225 81237 81236\nf 81226 81227 81238\nf 81226 81238 81237\nf 81227 81228 81239\nf 81227 81239 81238\nf 81228 81230 81240\nf 81228 81240 81239\nf 81229 81241 81242\nf 81229 81242 81230\nf 81230 81242 81240\nf 81231 81232 81243\nf 81232 81233 81245\nf 81232 81245 81243\nf 81233 81234 81246\nf 81233 81246 81245\nf 81234 81235 81247\nf 81234 81247 81246\nf 81235 81236 81248\nf 81235 81248 81247\nf 81236 81237 81249\nf 81236 81249 81248\nf 81237 81238 81250\nf 81237 81250 81249\nf 81238 81239 81251\nf 81238 81251 81250\nf 81239 81240 81252\nf 81239 81252 81251\nf 81240 81242 81253\nf 81240 81253 81252\nf 81241 81254 81256\nf 81241 81256 81242\nf 81242 81256 81253\nf 81243 81245 81244\nf 81244 81245 81258\nf 81244 81258 81257\nf 81245 81246 81259\nf 81245 81259 81258\nf 81246 81247 81260\nf 81246 81260 81259\nf 81247 81248 81261\nf 81247 81261 81260\nf 81248 81249 81262\nf 81248 81262 81261\nf 81249 81250 81263\nf 81249 81263 81262\nf 81250 81251 81264\nf 81250 81264 81263\nf 81251 81252 81265\nf 81251 81265 81264\nf 81252 81253 81266\nf 81252 81266 81265\nf 81253 81256 81268\nf 81253 81268 81266\nf 81254 81255 81256\nf 81255 81267 81268\nf 81255 81268 81256\nf 81257 81258 81269\nf 81258 81259 81270\nf 81258 81270 81269\nf 81259 81260 81271\nf 81259 81271 81270\nf 81260 81261 81272\nf 81260 81272 81271\nf 81261 81262 81273\nf 81261 81273 81272\nf 81262 81263 81274\nf 81262 81274 81273\nf 81263 81264 81275\nf 81263 81275 81274\nf 81264 81265 81276\nf 81264 81276 81275\nf 81265 81266 81277\nf 81265 81277 81276\nf 81266 81268 81278\nf 81266 81278 81277\nf 81267 81279 81281\nf 81267 81281 81268\nf 81268 81281 81278\nf 81269 81270 81282\nf 81270 81271 81283\nf 81270 81283 81282\nf 81271 81272 81284\nf 81271 81284 81283\nf 81272 81273 81285\nf 81272 81285 81284\nf 81273 81274 81286\nf 81273 81286 81285\nf 81274 81275 81287\nf 81274 81287 81286\nf 81275 81276 81288\nf 81275 81288 81287\nf 81276 81277 81289\nf 81276 81289 81288\nf 81277 81278 81290\nf 81277 81290 81289\nf 81278 81281 81293\nf 81278 81293 81290\nf 81279 81280 81281\nf 81280 81291 81293\nf 81280 81293 81281\nf 81282 81283 81294\nf 81283 81284 81295\nf 81283 81295 81294\nf 81284 81285 81296\nf 81284 81296 81295\nf 81285 81286 81297\nf 81285 81297 81296\nf 81286 81287 81298\nf 81286 81298 81297\nf 81287 81288 81299\nf 81287 81299 81298\nf 81288 81289 81300\nf 81288 81300 81299\nf 81289 81290 81301\nf 81289 81301 81300\nf 81290 81293 81304\nf 81290 81304 81301\nf 81291 81292 81293\nf 81292 81302 81304\nf 81292 81304 81293\nf 81294 81295 81305\nf 81295 81296 81306\nf 81295 81306 81305\nf 81296 81297 81307\nf 81296 81307 81306\nf 81297 81298 81308\nf 81297 81308 81307\nf 81298 81299 81309\nf 81298 81309 81308\nf 81299 81300 81310\nf 81299 81310 81309\nf 81300 81301 81311\nf 81300 81311 81310\nf 81301 81304 81313\nf 81301 81313 81311\nf 81302 81303 81304\nf 81303 81312 81313\nf 81303 81313 81304\nf 81305 81306 81314\nf 81306 81307 81315\nf 81306 81315 81314\nf 81307 81308 81316\nf 81307 81316 81315\nf 81308 81309 81317\nf 81308 81317 81316\nf 81309 81310 81318\nf 81309 81318 81317\nf 81310 81311 81319\nf 81310 81319 81318\nf 81311 81313 81320\nf 81311 81320 81319\nf 81312 81321 81322\nf 81312 81322 81313\nf 81313 81322 81320\nf 81314 81315 81324\nf 81315 81316 81325\nf 81315 81325 81324\nf 81316 81317 81326\nf 81316 81326 81325\nf 81317 81318 81327\nf 81317 81327 81326\nf 81318 81319 81328\nf 81318 81328 81327\nf 81319 81320 81329\nf 81319 81329 81328\nf 81320 81322 81330\nf 81320 81330 81329\nf 81321 81323 81333\nf 81321 81333 81322\nf 81322 81331 81330\nf 81322 81333 81331\nf 81323 81332 81333\nf 81324 81325 81335\nf 81325 81326 81336\nf 81325 81336 81335\nf 81326 81327 81337\nf 81326 81337 81336\nf 81327 81328 81338\nf 81327 81338 81337\nf 81328 81329 81339\nf 81328 81339 81338\nf 81329 81330 81340\nf 81329 81340 81339\nf 81330 81331 81341\nf 81330 81341 81340\nf 81331 81333 81342\nf 81331 81342 81341\nf 81332 81334 81345\nf 81332 81345 81333\nf 81333 81343 81342\nf 81333 81345 81343\nf 81334 81344 81345\nf 81335 81336 81346\nf 81336 81337 81347\nf 81336 81347 81346\nf 81337 81338 81348\nf 81337 81348 81347\nf 81338 81339 81349\nf 81338 81349 81348\nf 81339 81340 81350\nf 81339 81350 81349\nf 81340 81341 81351\nf 81340 81351 81350\nf 81341 81342 81352\nf 81341 81352 81351\nf 81342 81343 81353\nf 81342 81353 81352\nf 81343 81345 81354\nf 81343 81354 81353\nf 81344 81355 81356\nf 81344 81356 81345\nf 81345 81356 81354\nf 81346 81347 81357\nf 81347 81348 81358\nf 81347 81358 81357\nf 81348 81349 81359\nf 81348 81359 81358\nf 81349 81350 81360\nf 81349 81360 81359\nf 81350 81351 81361\nf 81350 81361 81360\nf 81351 81352 81362\nf 81351 81362 81361\nf 81352 81353 81363\nf 81352 81363 81362\nf 81353 81354 81364\nf 81353 81364 81363\nf 81354 81356 81365\nf 81354 81365 81364\nf 81355 81366 81367\nf 81355 81367 81356\nf 81356 81367 81365\nf 81357 81358 81368\nf 81358 81359 81369\nf 81358 81369 81368\nf 81359 81360 81370\nf 81359 81370 81369\nf 81360 81361 81371\nf 81360 81371 81370\nf 81361 81362 81372\nf 81361 81372 81371\nf 81362 81363 81373\nf 81362 81373 81372\nf 81363 81364 81374\nf 81363 81374 81373\nf 81364 81365 81375\nf 81364 81375 81374\nf 81365 81367 81376\nf 81365 81376 81375\nf 81366 81377 81378\nf 81366 81378 81367\nf 81367 81378 81376\nf 81368 81369 81380\nf 81369 81370 81381\nf 81369 81381 81380\nf 81370 81371 81382\nf 81370 81382 81381\nf 81371 81372 81383\nf 81371 81383 81382\nf 81372 81373 81384\nf 81372 81384 81383\nf 81373 81374 81385\nf 81373 81385 81384\nf 81374 81375 81386\nf 81374 81386 81385\nf 81375 81376 81387\nf 81375 81387 81386\nf 81376 81378 81388\nf 81376 81388 81387\nf 81377 81379 81391\nf 81377 81391 81378\nf 81378 81389 81388\nf 81378 81391 81389\nf 81379 81390 81391\nf 81380 81381 81392\nf 81381 81382 81393\nf 81381 81393 81392\nf 81382 81383 81394\nf 81382 81394 81393\nf 81383 81384 81395\nf 81383 81395 81394\nf 81384 81385 81396\nf 81384 81396 81395\nf 81385 81386 81397\nf 81385 81397 81396\nf 81386 81387 81398\nf 81386 81398 81397\nf 81387 81388 81399\nf 81387 81399 81398\nf 81388 81389 81400\nf 81388 81400 81399\nf 81389 81391 81401\nf 81389 81401 81400\nf 81390 81402 81403\nf 81390 81403 81391\nf 81391 81403 81401\nf 81392 81393 81404\nf 81393 81394 81405\nf 81393 81405 81404\nf 81394 81395 81406\nf 81394 81406 81405\nf 81395 81396 81407\nf 81395 81407 81406\nf 81396 81397 81408\nf 81396 81408 81407\nf 81397 81398 81409\nf 81397 81409 81408\nf 81398 81399 81410\nf 81398 81410 81409\nf 81399 81400 81411\nf 81399 81411 81410\nf 81400 81401 81412\nf 81400 81412 81411\nf 81401 81403 81413\nf 81401 81413 81412\nf 81402 81414 81415\nf 81402 81415 81403\nf 81403 81415 81413\nf 81404 81405 81416\nf 81405 81406 81417\nf 81405 81417 81416\nf 81406 81407 81418\nf 81406 81418 81417\nf 81407 81408 81419\nf 81407 81419 81418\nf 81408 81409 81420\nf 81408 81420 81419\nf 81409 81410 81421\nf 81409 81421 81420\nf 81410 81411 81422\nf 81410 81422 81421\nf 81411 81412 81423\nf 81411 81423 81422\nf 81412 81413 81424\nf 81412 81424 81423\nf 81413 81415 81425\nf 81413 81425 81424\nf 81414 81426 81427\nf 81414 81427 81415\nf 81415 81427 81425\nf 81416 81417 81428\nf 81417 81418 81429\nf 81417 81429 81428\nf 81418 81419 81430\nf 81418 81430 81429\nf 81419 81420 81431\nf 81419 81431 81430\nf 81420 81421 81432\nf 81420 81432 81431\nf 81421 81422 81433\nf 81421 81433 81432\nf 81422 81423 81434\nf 81422 81434 81433\nf 81423 81424 81435\nf 81423 81435 81434\nf 81424 81425 81436\nf 81424 81436 81435\nf 81425 81427 81437\nf 81425 81437 81436\nf 81426 81438 81439\nf 81426 81439 81427\nf 81427 81439 81437\nf 81428 81429 81440\nf 81429 81430 81441\nf 81429 81441 81440\nf 81430 81431 81442\nf 81430 81442 81441\nf 81431 81432 81443\nf 81431 81443 81442\nf 81432 81433 81444\nf 81432 81444 81443\nf 81433 81434 81445\nf 81433 81445 81444\nf 81434 81435 81446\nf 81434 81446 81445\nf 81435 81436 81447\nf 81435 81447 81446\nf 81436 81437 81448\nf 81436 81448 81447\nf 81437 81439 81449\nf 81437 81449 81448\nf 81438 81450 81451\nf 81438 81451 81439\nf 81439 81451 81449\nf 81440 81441 81452\nf 81441 81442 81453\nf 81441 81453 81452\nf 81442 81443 81454\nf 81442 81454 81453\nf 81443 81444 81455\nf 81443 81455 81454\nf 81444 81445 81456\nf 81444 81456 81455\nf 81445 81446 81457\nf 81445 81457 81456\nf 81446 81447 81458\nf 81446 81458 81457\nf 81447 81448 81459\nf 81447 81459 81458\nf 81448 81449 81460\nf 81448 81460 81459\nf 81449 81451 81461\nf 81449 81461 81460\nf 81450 81462 81463\nf 81450 81463 81451\nf 81451 81463 81461\nf 81452 81453 81464\nf 81453 81454 81465\nf 81453 81465 81464\nf 81454 81455 81466\nf 81454 81466 81465\nf 81455 81456 81467\nf 81455 81467 81466\nf 81456 81457 81468\nf 81456 81468 81467\nf 81457 81458 81469\nf 81457 81469 81468\nf 81458 81459 81470\nf 81458 81470 81469\nf 81459 81460 81471\nf 81459 81471 81470\nf 81460 81461 81472\nf 81460 81472 81471\nf 81461 81463 81473\nf 81461 81473 81472\nf 81462 81474 81475\nf 81462 81475 81463\nf 81463 81475 81473\nf 81464 81465 81476\nf 81465 81466 81477\nf 81465 81477 81476\nf 81466 81467 81478\nf 81466 81478 81477\nf 81467 81468 81479\nf 81467 81479 81478\nf 81468 81469 81480\nf 81468 81480 81479\nf 81469 81470 81481\nf 81469 81481 81480\nf 81470 81471 81482\nf 81470 81482 81481\nf 81471 81472 81483\nf 81471 81483 81482\nf 81472 81473 81484\nf 81472 81484 81483\nf 81473 81475 81485\nf 81473 81485 81484\nf 81474 81486 81487\nf 81474 81487 81475\nf 81475 81487 81485\nf 81476 81477 81488\nf 81477 81478 81489\nf 81477 81489 81488\nf 81478 81479 81490\nf 81478 81490 81489\nf 81479 81480 81491\nf 81479 81491 81490\nf 81480 81481 81492\nf 81480 81492 81491\nf 81481 81482 81493\nf 81481 81493 81492\nf 81482 81483 81494\nf 81482 81494 81493\nf 81483 81484 81495\nf 81483 81495 81494\nf 81484 81485 81496\nf 81484 81496 81495\nf 81485 81487 81497\nf 81485 81497 81496\nf 81486 81498 81499\nf 81486 81499 81487\nf 81487 81499 81497\nf 81488 81489 81500\nf 81489 81490 81501\nf 81489 81501 81500\nf 81490 81491 81502\nf 81490 81502 81501\nf 81491 81492 81503\nf 81491 81503 81502\nf 81492 81493 81504\nf 81492 81504 81503\nf 81493 81494 81505\nf 81493 81505 81504\nf 81494 81495 81506\nf 81494 81506 81505\nf 81495 81496 81507\nf 81495 81507 81506\nf 81496 81497 81508\nf 81496 81508 81507\nf 81497 81499 81509\nf 81497 81509 81508\nf 81498 81510 81511\nf 81498 81511 81499\nf 81499 81511 81509\nf 81500 81501 81512\nf 81501 81502 81513\nf 81501 81513 81512\nf 81502 81503 81514\nf 81502 81514 81513\nf 81503 81504 81515\nf 81503 81515 81514\nf 81504 81505 81516\nf 81504 81516 81515\nf 81505 81506 81517\nf 81505 81517 81516\nf 81506 81507 81518\nf 81506 81518 81517\nf 81507 81508 81519\nf 81507 81519 81518\nf 81508 81509 81520\nf 81508 81520 81519\nf 81509 81511 81521\nf 81509 81521 81520\nf 81510 81522 81523\nf 81510 81523 81511\nf 81511 81523 81521\nf 81512 81513 81524\nf 81513 81514 81525\nf 81513 81525 81524\nf 81514 81515 81526\nf 81514 81526 81525\nf 81515 81516 81527\nf 81515 81527 81526\nf 81516 81517 81528\nf 81516 81528 81527\nf 81517 81518 81529\nf 81517 81529 81528\nf 81518 81519 81530\nf 81518 81530 81529\nf 81519 81520 81531\nf 81519 81531 81530\nf 81520 81521 81532\nf 81520 81532 81531\nf 81521 81523 81533\nf 81521 81533 81532\nf 81522 81534 81535\nf 81522 81535 81523\nf 81523 81535 81533\nf 81524 81525 81536\nf 81525 81526 81537\nf 81525 81537 81536\nf 81526 81527 81538\nf 81526 81538 81537\nf 81527 81528 81539\nf 81527 81539 81538\nf 81528 81529 81540\nf 81528 81540 81539\nf 81529 81530 81541\nf 81529 81541 81540\nf 81530 81531 81542\nf 81530 81542 81541\nf 81531 81532 81543\nf 81531 81543 81542\nf 81532 81533 81544\nf 81532 81544 81543\nf 81533 81535 81545\nf 81533 81545 81544\nf 81534 81546 81547\nf 81534 81547 81535\nf 81535 81547 81545\nf 81536 81537 81548\nf 81537 81538 81549\nf 81537 81549 81548\nf 81538 81539 81550\nf 81538 81550 81549\nf 81539 81540 81551\nf 81539 81551 81550\nf 81540 81541 81552\nf 81540 81552 81551\nf 81541 81542 81553\nf 81541 81553 81552\nf 81542 81543 81554\nf 81542 81554 81553\nf 81543 81544 81555\nf 81543 81555 81554\nf 81544 81545 81556\nf 81544 81556 81555\nf 81545 81547 81557\nf 81545 81557 81556\nf 81546 81558 81560\nf 81546 81560 81547\nf 81547 81560 81557\nf 81548 81549 81561\nf 81549 81550 81562\nf 81549 81562 81561\nf 81550 81551 81563\nf 81550 81563 81562\nf 81551 81552 81564\nf 81551 81564 81563\nf 81552 81553 81565\nf 81552 81565 81564\nf 81553 81554 81566\nf 81553 81566 81565\nf 81554 81555 81567\nf 81554 81567 81566\nf 81555 81556 81568\nf 81555 81568 81567\nf 81556 81557 81569\nf 81556 81569 81568\nf 81557 81560 81571\nf 81557 81571 81569\nf 81558 81559 81560\nf 81559 81570 81571\nf 81559 81571 81560\nf 81561 81562 81572\nf 81562 81563 81573\nf 81562 81573 81572\nf 81563 81564 81574\nf 81563 81574 81573\nf 81564 81565 81575\nf 81564 81575 81574\nf 81565 81566 81576\nf 81565 81576 81575\nf 81566 81567 81577\nf 81566 81577 81576\nf 81567 81568 81578\nf 81567 81578 81577\nf 81568 81569 81579\nf 81568 81579 81578\nf 81569 81571 81580\nf 81569 81580 81579\nf 81570 81581 81582\nf 81570 81582 81571\nf 81571 81582 81580\nf 81572 81573 81583\nf 81573 81574 81585\nf 81573 81585 81583\nf 81574 81575 81586\nf 81574 81586 81585\nf 81575 81576 81587\nf 81575 81587 81586\nf 81576 81577 81588\nf 81576 81588 81587\nf 81577 81578 81589\nf 81577 81589 81588\nf 81578 81579 81590\nf 81578 81590 81589\nf 81579 81580 81591\nf 81579 81591 81590\nf 81580 81582 81592\nf 81580 81592 81591\nf 81581 81593 81594\nf 81581 81594 81582\nf 81582 81594 81592\nf 81583 81585 81584\nf 81584 81585 81596\nf 81584 81596 81595\nf 81585 81586 81597\nf 81585 81597 81596\nf 81586 81587 81598\nf 81586 81598 81597\nf 81587 81588 81599\nf 81587 81599 81598\nf 81588 81589 81600\nf 81588 81600 81599\nf 81589 81590 81601\nf 81589 81601 81600\nf 81590 81591 81602\nf 81590 81602 81601\nf 81591 81592 81603\nf 81591 81603 81602\nf 81592 81594 81604\nf 81592 81604 81603\nf 81593 81605 81606\nf 81593 81606 81594\nf 81594 81606 81604\nf 81595 81596 81607\nf 81596 81597 81608\nf 81596 81608 81607\nf 81597 81598 81609\nf 81597 81609 81608\nf 81598 81599 81610\nf 81598 81610 81609\nf 81599 81600 81611\nf 81599 81611 81610\nf 81600 81601 81612\nf 81600 81612 81611\nf 81601 81602 81613\nf 81601 81613 81612\nf 81602 81603 81614\nf 81602 81614 81613\nf 81603 81604 81615\nf 81603 81615 81614\nf 81604 81606 81616\nf 81604 81616 81615\nf 81605 81617 81618\nf 81605 81618 81606\nf 81606 81618 81616\nf 81607 81608 81619\nf 81608 81609 81620\nf 81608 81620 81619\nf 81609 81610 81621\nf 81609 81621 81620\nf 81610 81611 81622\nf 81610 81622 81621\nf 81611 81612 81623\nf 81611 81623 81622\nf 81612 81613 81624\nf 81612 81624 81623\nf 81613 81614 81625\nf 81613 81625 81624\nf 81614 81615 81626\nf 81614 81626 81625\nf 81615 81616 81627\nf 81615 81627 81626\nf 81616 81618 81628\nf 81616 81628 81627\nf 81617 81629 81630\nf 81617 81630 81618\nf 81618 81630 81628\nf 81619 81620 81631\nf 81620 81621 81632\nf 81620 81632 81631\nf 81621 81622 81633\nf 81621 81633 81632\nf 81622 81623 81634\nf 81622 81634 81633\nf 81623 81624 81635\nf 81623 81635 81634\nf 81624 81625 81636\nf 81624 81636 81635\nf 81625 81626 81637\nf 81625 81637 81636\nf 81626 81627 81638\nf 81626 81638 81637\nf 81627 81628 81639\nf 81627 81639 81638\nf 81628 81630 81640\nf 81628 81640 81639\nf 81629 81641 81642\nf 81629 81642 81630\nf 81630 81642 81640\nf 81631 81632 81643\nf 81632 81633 81644\nf 81632 81644 81643\nf 81633 81634 81645\nf 81633 81645 81644\nf 81634 81635 81646\nf 81634 81646 81645\nf 81635 81636 81647\nf 81635 81647 81646\nf 81636 81637 81648\nf 81636 81648 81647\nf 81637 81638 81649\nf 81637 81649 81648\nf 81638 81639 81650\nf 81638 81650 81649\nf 81639 81640 81651\nf 81639 81651 81650\nf 81640 81642 81652\nf 81640 81652 81651\nf 81641 81653 81654\nf 81641 81654 81642\nf 81642 81654 81652\nf 81643 81644 81655\nf 81644 81645 81656\nf 81644 81656 81655\nf 81645 81646 81657\nf 81645 81657 81656\nf 81646 81647 81658\nf 81646 81658 81657\nf 81647 81648 81659\nf 81647 81659 81658\nf 81648 81649 81660\nf 81648 81660 81659\nf 81649 81650 81661\nf 81649 81661 81660\nf 81650 81651 81662\nf 81650 81662 81661\nf 81651 81652 81663\nf 81651 81663 81662\nf 81652 81654 81664\nf 81652 81664 81663\nf 81653 81665 81666\nf 81653 81666 81654\nf 81654 81666 81664\nf 81655 81656 81667\nf 81656 81657 81668\nf 81656 81668 81667\nf 81657 81658 81669\nf 81657 81669 81668\nf 81658 81659 81670\nf 81658 81670 81669\nf 81659 81660 81671\nf 81659 81671 81670\nf 81660 81661 81672\nf 81660 81672 81671\nf 81661 81662 81673\nf 81661 81673 81672\nf 81662 81663 81674\nf 81662 81674 81673\nf 81663 81664 81675\nf 81663 81675 81674\nf 81664 81666 81676\nf 81664 81676 81675\nf 81665 81677 81678\nf 81665 81678 81666\nf 81666 81678 81676\nf 81667 81668 81679\nf 81668 81669 81680\nf 81668 81680 81679\nf 81669 81670 81681\nf 81669 81681 81680\nf 81670 81671 81682\nf 81670 81682 81681\nf 81671 81672 81683\nf 81671 81683 81682\nf 81672 81673 81684\nf 81672 81684 81683\nf 81673 81674 81685\nf 81673 81685 81684\nf 81674 81675 81686\nf 81674 81686 81685\nf 81675 81676 81687\nf 81675 81687 81686\nf 81676 81678 81688\nf 81676 81688 81687\nf 81677 81689 81690\nf 81677 81690 81678\nf 81678 81690 81688\nf 81679 81680 81691\nf 81680 81681 81692\nf 81680 81692 81691\nf 81681 81682 81693\nf 81681 81693 81692\nf 81682 81683 81694\nf 81682 81694 81693\nf 81683 81684 81695\nf 81683 81695 81694\nf 81684 81685 81696\nf 81684 81696 81695\nf 81685 81686 81697\nf 81685 81697 81696\nf 81686 81687 81698\nf 81686 81698 81697\nf 81687 81688 81699\nf 81687 81699 81698\nf 81688 81690 81700\nf 81688 81700 81699\nf 81689 81701 81703\nf 81689 81703 81690\nf 81690 81703 81700\nf 81691 81692 81704\nf 81692 81693 81705\nf 81692 81705 81704\nf 81693 81694 81706\nf 81693 81706 81705\nf 81694 81695 81707\nf 81694 81707 81706\nf 81695 81696 81708\nf 81695 81708 81707\nf 81696 81697 81709\nf 81696 81709 81708\nf 81697 81698 81710\nf 81697 81710 81709\nf 81698 81699 81711\nf 81698 81711 81710\nf 81699 81700 81712\nf 81699 81712 81711\nf 81700 81703 81714\nf 81700 81714 81712\nf 81701 81702 81703\nf 81702 81713 81714\nf 81702 81714 81703\nf 81704 81705 81715\nf 81705 81706 81716\nf 81705 81716 81715\nf 81706 81707 81717\nf 81706 81717 81716\nf 81707 81708 81718\nf 81707 81718 81717\nf 81708 81709 81719\nf 81708 81719 81718\nf 81709 81710 81720\nf 81709 81720 81719\nf 81710 81711 81721\nf 81710 81721 81720\nf 81711 81712 81722\nf 81711 81722 81721\nf 81712 81714 81723\nf 81712 81723 81722\nf 81713 81724 81725\nf 81713 81725 81714\nf 81714 81725 81723\nf 81715 81716 81726\nf 81716 81717 81727\nf 81716 81727 81726\nf 81717 81718 81728\nf 81717 81728 81727\nf 81718 81719 81729\nf 81718 81729 81728\nf 81719 81720 81730\nf 81719 81730 81729\nf 81720 81721 81731\nf 81720 81731 81730\nf 81721 81722 81732\nf 81721 81732 81731\nf 81722 81723 81733\nf 81722 81733 81732\nf 81723 81725 81734\nf 81723 81734 81733\nf 81724 81735 81736\nf 81724 81736 81725\nf 81725 81736 81734\nf 81726 81727 81737\nf 81727 81728 81738\nf 81727 81738 81737\nf 81728 81729 81739\nf 81728 81739 81738\nf 81729 81730 81740\nf 81729 81740 81739\nf 81730 81731 81741\nf 81730 81741 81740\nf 81731 81732 81742\nf 81731 81742 81741\nf 81732 81733 81743\nf 81732 81743 81742\nf 81733 81734 81744\nf 81733 81744 81743\nf 81734 81736 81745\nf 81734 81745 81744\nf 81735 81746 81747\nf 81735 81747 81736\nf 81736 81747 81745\nf 81737 81738 81748\nf 81738 81739 81749\nf 81738 81749 81748\nf 81739 81740 81750\nf 81739 81750 81749\nf 81740 81741 81751\nf 81740 81751 81750\nf 81741 81742 81752\nf 81741 81752 81751\nf 81742 81743 81753\nf 81742 81753 81752\nf 81743 81744 81754\nf 81743 81754 81753\nf 81744 81745 81755\nf 81744 81755 81754\nf 81745 81747 81756\nf 81745 81756 81755\nf 81746 81757 81758\nf 81746 81758 81747\nf 81747 81758 81756\nf 81748 81749 81759\nf 81749 81750 81760\nf 81749 81760 81759\nf 81750 81751 81761\nf 81750 81761 81760\nf 81751 81752 81762\nf 81751 81762 81761\nf 81752 81753 81763\nf 81752 81763 81762\nf 81753 81754 81764\nf 81753 81764 81763\nf 81754 81755 81765\nf 81754 81765 81764\nf 81755 81756 81766\nf 81755 81766 81765\nf 81756 81758 81767\nf 81756 81767 81766\nf 81757 81768 81769\nf 81757 81769 81758\nf 81758 81769 81767\nf 81759 81760 81770\nf 81760 81761 81771\nf 81760 81771 81770\nf 81761 81762 81772\nf 81761 81772 81771\nf 81762 81763 81773\nf 81762 81773 81772\nf 81763 81764 81774\nf 81763 81774 81773\nf 81764 81765 81775\nf 81764 81775 81774\nf 81765 81766 81776\nf 81765 81776 81775\nf 81766 81767 81777\nf 81766 81777 81776\nf 81767 81769 81778\nf 81767 81778 81777\nf 81768 81779 81780\nf 81768 81780 81769\nf 81769 81780 81778\nf 81770 81771 81781\nf 81771 81772 81782\nf 81771 81782 81781\nf 81772 81773 81783\nf 81772 81783 81782\nf 81773 81774 81784\nf 81773 81784 81783\nf 81774 81775 81785\nf 81774 81785 81784\nf 81775 81776 81786\nf 81775 81786 81785\nf 81776 81777 81787\nf 81776 81787 81786\nf 81777 81778 81788\nf 81777 81788 81787\nf 81778 81780 81789\nf 81778 81789 81788\nf 81779 81790 81791\nf 81779 81791 81780\nf 81780 81791 81789\nf 81781 81782 81792\nf 81782 81783 81793\nf 81782 81793 81792\nf 81783 81784 81794\nf 81783 81794 81793\nf 81784 81785 81795\nf 81784 81795 81794\nf 81785 81786 81796\nf 81785 81796 81795\nf 81786 81787 81797\nf 81786 81797 81796\nf 81787 81788 81798\nf 81787 81798 81797\nf 81788 81789 81799\nf 81788 81799 81798\nf 81789 81791 81800\nf 81789 81800 81799\nf 81790 81801 81802\nf 81790 81802 81791\nf 81791 81802 81800\nf 81792 81793 81803\nf 81793 81794 81804\nf 81793 81804 81803\nf 81794 81795 81805\nf 81794 81805 81804\nf 81795 81796 81806\nf 81795 81806 81805\nf 81796 81797 81807\nf 81796 81807 81806\nf 81797 81798 81808\nf 81797 81808 81807\nf 81798 81799 81809\nf 81798 81809 81808\nf 81799 81800 81810\nf 81799 81810 81809\nf 81800 81802 81811\nf 81800 81811 81810\nf 81801 81812 81813\nf 81801 81813 81802\nf 81802 81813 81811\nf 81803 81804 81814\nf 81804 81805 81815\nf 81804 81815 81814\nf 81805 81806 81816\nf 81805 81816 81815\nf 81806 81807 81817\nf 81806 81817 81816\nf 81807 81808 81818\nf 81807 81818 81817\nf 81808 81809 81819\nf 81808 81819 81818\nf 81809 81810 81820\nf 81809 81820 81819\nf 81810 81811 81821\nf 81810 81821 81820\nf 81811 81813 81822\nf 81811 81822 81821\nf 81812 81823 81824\nf 81812 81824 81813\nf 81813 81824 81822\nf 81814 81815 81825\nf 81815 81816 81826\nf 81815 81826 81825\nf 81816 81817 81827\nf 81816 81827 81826\nf 81817 81818 81828\nf 81817 81828 81827\nf 81818 81819 81829\nf 81818 81829 81828\nf 81819 81820 81830\nf 81819 81830 81829\nf 81820 81821 81831\nf 81820 81831 81830\nf 81821 81822 81832\nf 81821 81832 81831\nf 81822 81824 81833\nf 81822 81833 81832\nf 81823 81834 81835\nf 81823 81835 81824\nf 81824 81835 81833\nf 81825 81826 81836\nf 81826 81827 81837\nf 81826 81837 81836\nf 81827 81828 81838\nf 81827 81838 81837\nf 81828 81829 81839\nf 81828 81839 81838\nf 81829 81830 81840\nf 81829 81840 81839\nf 81830 81831 81841\nf 81830 81841 81840\nf 81831 81832 81842\nf 81831 81842 81841\nf 81832 81833 81843\nf 81832 81843 81842\nf 81833 81835 81844\nf 81833 81844 81843\nf 81834 81845 81846\nf 81834 81846 81835\nf 81835 81846 81844\nf 81836 81837 81847\nf 81837 81838 81848\nf 81837 81848 81847\nf 81838 81839 81849\nf 81838 81849 81848\nf 81839 81840 81850\nf 81839 81850 81849\nf 81840 81841 81851\nf 81840 81851 81850\nf 81841 81842 81852\nf 81841 81852 81851\nf 81842 81843 81853\nf 81842 81853 81852\nf 81843 81844 81854\nf 81843 81854 81853\nf 81844 81846 81855\nf 81844 81855 81854\nf 81845 81856 81857\nf 81845 81857 81846\nf 81846 81857 81855\nf 81847 81848 81858\nf 81848 81849 81859\nf 81848 81859 81858\nf 81849 81850 81860\nf 81849 81860 81859\nf 81850 81851 81861\nf 81850 81861 81860\nf 81851 81852 81862\nf 81851 81862 81861\nf 81852 81853 81863\nf 81852 81863 81862\nf 81853 81854 81864\nf 81853 81864 81863\nf 81854 81855 81865\nf 81854 81865 81864\nf 81855 81857 81866\nf 81855 81866 81865\nf 81856 81867 81868\nf 81856 81868 81857\nf 81857 81868 81866\nf 81858 81859 81869\nf 81859 81860 81871\nf 81859 81871 81869\nf 81860 81861 81872\nf 81860 81872 81871\nf 81861 81862 81873\nf 81861 81873 81872\nf 81862 81863 81874\nf 81862 81874 81873\nf 81863 81864 81875\nf 81863 81875 81874\nf 81864 81865 81876\nf 81864 81876 81875\nf 81865 81866 81877\nf 81865 81877 81876\nf 81866 81868 81878\nf 81866 81878 81877\nf 81867 81879 81880\nf 81867 81880 81868\nf 81868 81880 81878\nf 81869 81871 81870\nf 81870 81871 81882\nf 81870 81882 81881\nf 81871 81872 81883\nf 81871 81883 81882\nf 81872 81873 81884\nf 81872 81884 81883\nf 81873 81874 81885\nf 81873 81885 81884\nf 81874 81875 81886\nf 81874 81886 81885\nf 81875 81876 81887\nf 81875 81887 81886\nf 81876 81877 81888\nf 81876 81888 81887\nf 81877 81878 81889\nf 81877 81889 81888\nf 81878 81880 81890\nf 81878 81890 81889\nf 81879 81891 81892\nf 81879 81892 81880\nf 81880 81892 81890\nf 81881 81882 81893\nf 81882 81883 81894\nf 81882 81894 81893\nf 81883 81884 81895\nf 81883 81895 81894\nf 81884 81885 81896\nf 81884 81896 81895\nf 81885 81886 81897\nf 81885 81897 81896\nf 81886 81887 81898\nf 81886 81898 81897\nf 81887 81888 81899\nf 81887 81899 81898\nf 81888 81889 81900\nf 81888 81900 81899\nf 81889 81890 81901\nf 81889 81901 81900\nf 81890 81892 81902\nf 81890 81902 81901\nf 81891 81903 81905\nf 81891 81905 81892\nf 81892 81905 81902\nf 81893 81894 81906\nf 81894 81895 81907\nf 81894 81907 81906\nf 81895 81896 81908\nf 81895 81908 81907\nf 81896 81897 81909\nf 81896 81909 81908\nf 81897 81898 81910\nf 81897 81910 81909\nf 81898 81899 81911\nf 81898 81911 81910\nf 81899 81900 81912\nf 81899 81912 81911\nf 81900 81901 81913\nf 81900 81913 81912\nf 81901 81902 81914\nf 81901 81914 81913\nf 81902 81905 81916\nf 81902 81916 81914\nf 81903 81904 81905\nf 81904 81915 81916\nf 81904 81916 81905\nf 81906 81907 81917\nf 81907 81908 81918\nf 81907 81918 81917\nf 81908 81909 81919\nf 81908 81919 81918\nf 81909 81910 81920\nf 81909 81920 81919\nf 81910 81911 81921\nf 81910 81921 81920\nf 81911 81912 81922\nf 81911 81922 81921\nf 81912 81913 81923\nf 81912 81923 81922\nf 81913 81914 81924\nf 81913 81924 81923\nf 81914 81916 81925\nf 81914 81925 81924\nf 81915 81926 81927\nf 81915 81927 81916\nf 81916 81927 81925\nf 81917 81918 81928\nf 81918 81919 81929\nf 81918 81929 81928\nf 81919 81920 81930\nf 81919 81930 81929\nf 81920 81921 81931\nf 81920 81931 81930\nf 81921 81922 81932\nf 81921 81932 81931\nf 81922 81923 81933\nf 81922 81933 81932\nf 81923 81924 81934\nf 81923 81934 81933\nf 81924 81925 81935\nf 81924 81935 81934\nf 81925 81927 81936\nf 81925 81936 81935\nf 81926 81937 81938\nf 81926 81938 81927\nf 81927 81938 81936\nf 81928 81929 81939\nf 81929 81930 81940\nf 81929 81940 81939\nf 81930 81931 81941\nf 81930 81941 81940\nf 81931 81932 81942\nf 81931 81942 81941\nf 81932 81933 81943\nf 81932 81943 81942\nf 81933 81934 81944\nf 81933 81944 81943\nf 81934 81935 81945\nf 81934 81945 81944\nf 81935 81936 81946\nf 81935 81946 81945\nf 81936 81938 81947\nf 81936 81947 81946\nf 81937 81948 81949\nf 81937 81949 81938\nf 81938 81949 81947\nf 81939 81940 81950\nf 81940 81941 81952\nf 81940 81952 81950\nf 81941 81942 81953\nf 81941 81953 81952\nf 81942 81943 81954\nf 81942 81954 81953\nf 81943 81944 81955\nf 81943 81955 81954\nf 81944 81945 81956\nf 81944 81956 81955\nf 81945 81946 81957\nf 81945 81957 81956\nf 81946 81947 81958\nf 81946 81958 81957\nf 81947 81949 81959\nf 81947 81959 81958\nf 81948 81960 81961\nf 81948 81961 81949\nf 81949 81961 81959\nf 81950 81952 81951\nf 81951 81952 81963\nf 81951 81963 81962\nf 81952 81953 81964\nf 81952 81964 81963\nf 81953 81954 81965\nf 81953 81965 81964\nf 81954 81955 81966\nf 81954 81966 81965\nf 81955 81956 81967\nf 81955 81967 81966\nf 81956 81957 81968\nf 81956 81968 81967\nf 81957 81958 81969\nf 81957 81969 81968\nf 81958 81959 81970\nf 81958 81970 81969\nf 81959 81961 81971\nf 81959 81971 81970\nf 81960 81972 81973\nf 81960 81973 81961\nf 81961 81973 81971\nf 81962 81963 81974\nf 81963 81964 81975\nf 81963 81975 81974\nf 81964 81965 81976\nf 81964 81976 81975\nf 81965 81966 81977\nf 81965 81977 81976\nf 81966 81967 81978\nf 81966 81978 81977\nf 81967 81968 81979\nf 81967 81979 81978\nf 81968 81969 81980\nf 81968 81980 81979\nf 81969 81970 81981\nf 81969 81981 81980\nf 81970 81971 81982\nf 81970 81982 81981\nf 81971 81973 81983\nf 81971 81983 81982\nf 81972 81984 81985\nf 81972 81985 81973\nf 81973 81985 81983\nf 81974 81975 81986\nf 81975 81976 81987\nf 81975 81987 81986\nf 81976 81977 81988\nf 81976 81988 81987\nf 81977 81978 81989\nf 81977 81989 81988\nf 81978 81979 81990\nf 81978 81990 81989\nf 81979 81980 81991\nf 81979 81991 81990\nf 81980 81981 81992\nf 81980 81992 81991\nf 81981 81982 81993\nf 81981 81993 81992\nf 81982 81983 81994\nf 81982 81994 81993\nf 81983 81985 81995\nf 81983 81995 81994\nf 81984 81996 81997\nf 81984 81997 81985\nf 81985 81997 81995\nf 81986 81987 81998\nf 81987 81988 81999\nf 81987 81999 81998\nf 81988 81989 82000\nf 81988 82000 81999\nf 81989 81990 82001\nf 81989 82001 82571\nf 81989 82571 82572\nf 81989 82572 82000\nf 81990 81991 82001\nf 81991 81992 82002\nf 81991 82002 82001\nf 81992 81993 82003\nf 81992 82003 82002\nf 81993 81994 82004\nf 81993 82004 82003\nf 81994 81995 82005\nf 81994 82005 82004\nf 81995 81997 82006\nf 81995 82006 82005\nf 81996 82007 82008\nf 81996 82008 81997\nf 81997 82008 82006\nf 81998 81999 82009\nf 81999 82000 82010\nf 81999 82010 82009\nf 82000 82011 82010\nf 82000 82572 82575\nf 82000 82575 82011\nf 82001 82002 82012\nf 82001 82012 82573\nf 82001 82573 82571\nf 82002 82003 82013\nf 82002 82013 82012\nf 82003 82004 82014\nf 82003 82014 82013\nf 82004 82005 82015\nf 82004 82015 82014\nf 82005 82006 82016\nf 82005 82016 82015\nf 82006 82008 82017\nf 82006 82017 82016\nf 82007 82018 82019\nf 82007 82019 82008\nf 82008 82019 82017\nf 82009 82010 82020\nf 82010 82011 82021\nf 82010 82021 82020\nf 82011 82022 82021\nf 82011 82575 82578\nf 82011 82578 82022\nf 82012 82013 82023\nf 82012 82023 82576\nf 82012 82576 82573\nf 82013 82014 82024\nf 82013 82024 82023\nf 82014 82015 82025\nf 82014 82025 82024\nf 82015 82016 82026\nf 82015 82026 82025\nf 82016 82017 82027\nf 82016 82027 82026\nf 82017 82019 82028\nf 82017 82028 82027\nf 82018 82029 82030\nf 82018 82030 82019\nf 82019 82030 82028\nf 82020 82021 82031\nf 82021 82022 82032\nf 82021 82032 82031\nf 82022 82033 82032\nf 82022 82578 82581\nf 82022 82581 82033\nf 82023 82024 82034\nf 82023 82034 82579\nf 82023 82579 82576\nf 82024 82025 82035\nf 82024 82035 82034\nf 82025 82026 82036\nf 82025 82036 82035\nf 82026 82027 82037\nf 82026 82037 82036\nf 82027 82028 82038\nf 82027 82038 82037\nf 82028 82030 82039\nf 82028 82039 82038\nf 82029 82040 82041\nf 82029 82041 82030\nf 82030 82041 82039\nf 82031 82032 82042\nf 82032 82033 82043\nf 82032 82043 82042\nf 82033 82044 82043\nf 82033 82045 82044\nf 82033 82581 82583\nf 82033 82583 82045\nf 82034 82035 82046\nf 82034 82045 82582\nf 82034 82046 82045\nf 82034 82582 82579\nf 82035 82036 82047\nf 82035 82047 82046\nf 82036 82037 82048\nf 82036 82048 82047\nf 82037 82038 82049\nf 82037 82049 82048\nf 82038 82039 82050\nf 82038 82050 82049\nf 82039 82041 82051\nf 82039 82051 82050\nf 82040 82052 82053\nf 82040 82053 82041\nf 82041 82053 82051\nf 82042 82043 82054\nf 82043 82044 82056\nf 82043 82056 82054\nf 82044 82045 82057\nf 82044 82057 82056\nf 82045 82046 82058\nf 82045 82058 82057\nf 82045 82583 82582\nf 82046 82047 82059\nf 82046 82059 82058\nf 82047 82048 82060\nf 82047 82060 82059\nf 82048 82049 82061\nf 82048 82061 82060\nf 82049 82050 82062\nf 82049 82062 82061\nf 82050 82051 82063\nf 82050 82063 82062\nf 82051 82053 82064\nf 82051 82064 82063\nf 82052 82065 82066\nf 82052 82066 82053\nf 82053 82066 82064\nf 82054 82056 82055\nf 82055 82056 82068\nf 82055 82068 82067\nf 82056 82057 82069\nf 82056 82069 82068\nf 82057 82058 82070\nf 82057 82070 82069\nf 82058 82059 82071\nf 82058 82071 82070\nf 82059 82060 82072\nf 82059 82072 82071\nf 82060 82061 82073\nf 82060 82073 82072\nf 82061 82062 82074\nf 82061 82074 82073\nf 82062 82063 82075\nf 82062 82075 82074\nf 82063 82064 82076\nf 82063 82076 82075\nf 82064 82066 82077\nf 82064 82077 82076\nf 82065 82078 82079\nf 82065 82079 82066\nf 82066 82079 82077\nf 82067 82068 82080\nf 82068 82069 82081\nf 82068 82081 82080\nf 82069 82070 82082\nf 82069 82082 82081\nf 82070 82071 82083\nf 82070 82083 82082\nf 82071 82072 82084\nf 82071 82084 82083\nf 82072 82073 82085\nf 82072 82085 82084\nf 82073 82074 82086\nf 82073 82086 82085\nf 82074 82075 82087\nf 82074 82087 82086\nf 82075 82076 82088\nf 82075 82088 82087\nf 82076 82077 82089\nf 82076 82089 82088\nf 82077 82079 82090\nf 82077 82090 82089\nf 82078 82091 82093\nf 82078 82093 82079\nf 82079 82093 82090\nf 82080 82081 82094\nf 82081 82082 82095\nf 82081 82095 82094\nf 82082 82083 82096\nf 82082 82096 82095\nf 82083 82084 82097\nf 82083 82097 82096\nf 82084 82085 82098\nf 82084 82098 82097\nf 82085 82086 82099\nf 82085 82099 82098\nf 82086 82087 82100\nf 82086 82100 82099\nf 82087 82088 82101\nf 82087 82101 82100\nf 82088 82089 82102\nf 82088 82102 82101\nf 82089 82090 82103\nf 82089 82103 82102\nf 82090 82093 82105\nf 82090 82105 82103\nf 82091 82092 82093\nf 82092 82104 82105\nf 82092 82105 82093\nf 82094 82095 82106\nf 82095 82096 82107\nf 82095 82107 82106\nf 82096 82097 82108\nf 82096 82108 82107\nf 82097 82098 82109\nf 82097 82109 82108\nf 82098 82099 82110\nf 82098 82110 82109\nf 82099 82100 82111\nf 82099 82111 82110\nf 82100 82101 82112\nf 82100 82112 82111\nf 82101 82102 82113\nf 82101 82113 82112\nf 82102 82103 82114\nf 82102 82114 82113\nf 82103 82105 82115\nf 82103 82115 82114\nf 82104 82116 82117\nf 82104 82117 82105\nf 82105 82117 82115\nf 82106 82107 82118\nf 82107 82108 82119\nf 82107 82119 82118\nf 82108 82109 82120\nf 82108 82120 82119\nf 82109 82110 82121\nf 82109 82121 82120\nf 82110 82111 82122\nf 82110 82122 82121\nf 82111 82112 82123\nf 82111 82123 82122\nf 82112 82113 82124\nf 82112 82124 82123\nf 82113 82114 82125\nf 82113 82125 82124\nf 82114 82115 82126\nf 82114 82126 82125\nf 82115 82117 82127\nf 82115 82127 82126\nf 82116 82128 82129\nf 82116 82129 82117\nf 82117 82129 82127\nf 82118 82119 82130\nf 82119 82120 82131\nf 82119 82131 82130\nf 82120 82121 82132\nf 82120 82132 82131\nf 82121 82122 82133\nf 82121 82133 82132\nf 82122 82123 82134\nf 82122 82134 82133\nf 82123 82124 82135\nf 82123 82135 82134\nf 82124 82125 82136\nf 82124 82136 82135\nf 82125 82126 82137\nf 82125 82137 82136\nf 82126 82127 82138\nf 82126 82138 82137\nf 82127 82129 82139\nf 82127 82139 82138\nf 82128 82140 82141\nf 82128 82141 82129\nf 82129 82141 82139\nf 82130 82131 82142\nf 82131 82132 82143\nf 82131 82143 82142\nf 82132 82133 82144\nf 82132 82144 82143\nf 82133 82134 82145\nf 82133 82145 82144\nf 82134 82135 82146\nf 82134 82146 82145\nf 82135 82136 82147\nf 82135 82147 82146\nf 82136 82137 82148\nf 82136 82148 82147\nf 82137 82138 82149\nf 82137 82149 82148\nf 82138 82139 82150\nf 82138 82150 82149\nf 82139 82141 82151\nf 82139 82151 82150\nf 82140 82152 82153\nf 82140 82153 82141\nf 82141 82153 82151\nf 82142 82143 82154\nf 82143 82144 82155\nf 82143 82155 82154\nf 82144 82145 82156\nf 82144 82156 82155\nf 82145 82146 82157\nf 82145 82157 82156\nf 82146 82147 82158\nf 82146 82158 82157\nf 82147 82148 82159\nf 82147 82159 82158\nf 82148 82149 82160\nf 82148 82160 82159\nf 82149 82150 82161\nf 82149 82161 82160\nf 82150 82151 82162\nf 82150 82162 82161\nf 82151 82153 82163\nf 82151 82163 82162\nf 82152 82164 82165\nf 82152 82165 82153\nf 82153 82165 82163\nf 82154 82155 82166\nf 82155 82156 82167\nf 82155 82167 82166\nf 82156 82157 82168\nf 82156 82168 82167\nf 82157 82158 82169\nf 82157 82169 82168\nf 82158 82159 82170\nf 82158 82170 82169\nf 82159 82160 82171\nf 82159 82171 82170\nf 82160 82161 82172\nf 82160 82172 82171\nf 82161 82162 82173\nf 82161 82173 82172\nf 82162 82163 82174\nf 82162 82174 82173\nf 82163 82165 82175\nf 82163 82175 82174\nf 82164 82176 82177\nf 82164 82177 82165\nf 82165 82177 82175\nf 82166 82167 82178\nf 82167 82168 82179\nf 82167 82179 82178\nf 82168 82169 82180\nf 82168 82180 82179\nf 82169 82170 82181\nf 82169 82181 82180\nf 82170 82171 82182\nf 82170 82182 82181\nf 82171 82172 82183\nf 82171 82183 82182\nf 82172 82173 82184\nf 82172 82184 82183\nf 82173 82174 82185\nf 82173 82185 82184\nf 82174 82175 82186\nf 82174 82186 82185\nf 82175 82177 82187\nf 82175 82187 82186\nf 82176 82188 82190\nf 82176 82190 82177\nf 82177 82190 82187\nf 82178 82179 82191\nf 82179 82180 82192\nf 82179 82192 82191\nf 82180 82181 82193\nf 82180 82193 82192\nf 82181 82182 82194\nf 82181 82194 82193\nf 82182 82183 82195\nf 82182 82195 82194\nf 82183 82184 82196\nf 82183 82196 82195\nf 82184 82185 82197\nf 82184 82197 82196\nf 82185 82186 82198\nf 82185 82198 82197\nf 82186 82187 82199\nf 82186 82199 82198\nf 82187 82190 82201\nf 82187 82201 82199\nf 82188 82189 82190\nf 82189 82200 82201\nf 82189 82201 82190\nf 82191 82192 82202\nf 82192 82193 82203\nf 82192 82203 82202\nf 82193 82194 82204\nf 82193 82204 82203\nf 82194 82195 82205\nf 82194 82205 82204\nf 82195 82196 82206\nf 82195 82206 82205\nf 82196 82197 82207\nf 82196 82207 82206\nf 82197 82198 82208\nf 82197 82208 82207\nf 82198 82199 82209\nf 82198 82209 82208\nf 82199 82201 82210\nf 82199 82210 82209\nf 82200 82211 82212\nf 82200 82212 82201\nf 82201 82212 82210\nf 82202 82203 82213\nf 82203 82204 82214\nf 82203 82214 82213\nf 82204 82205 82215\nf 82204 82215 82214\nf 82205 82206 82216\nf 82205 82216 82215\nf 82206 82207 82217\nf 82206 82217 82216\nf 82207 82208 82218\nf 82207 82218 82217\nf 82208 82209 82219\nf 82208 82219 82218\nf 82209 82210 82220\nf 82209 82220 82219\nf 82210 82212 82221\nf 82210 82221 82220\nf 82211 82222 82223\nf 82211 82223 82212\nf 82212 82223 82221\nf 82213 82214 82224\nf 82214 82215 82225\nf 82214 82225 82224\nf 82215 82216 82226\nf 82215 82226 82225\nf 82216 82217 82227\nf 82216 82227 82226\nf 82217 82218 82228\nf 82217 82228 82227\nf 82218 82219 82229\nf 82218 82229 82228\nf 82219 82220 82230\nf 82219 82230 82229\nf 82220 82221 82231\nf 82220 82231 82230\nf 82221 82223 82232\nf 82221 82232 82231\nf 82222 82233 82234\nf 82222 82234 82223\nf 82223 82234 82232\nf 82224 82225 82235\nf 82225 82226 82236\nf 82225 82236 82235\nf 82226 82227 82237\nf 82226 82237 82236\nf 82227 82228 82238\nf 82227 82238 82237\nf 82228 82229 82239\nf 82228 82239 82238\nf 82229 82230 82240\nf 82229 82240 82239\nf 82230 82231 82241\nf 82230 82241 82240\nf 82231 82232 82242\nf 82231 82242 82241\nf 82232 82234 82243\nf 82232 82243 82242\nf 82233 82244 82245\nf 82233 82245 82234\nf 82234 82245 82243\nf 82235 82236 82246\nf 82236 82237 82247\nf 82236 82247 82246\nf 82237 82238 82248\nf 82237 82248 82247\nf 82238 82239 82249\nf 82238 82249 82248\nf 82239 82240 82250\nf 82239 82250 82249\nf 82240 82241 82251\nf 82240 82251 82250\nf 82241 82242 82252\nf 82241 82252 82251\nf 82242 82243 82253\nf 82242 82253 82252\nf 82243 82245 82254\nf 82243 82254 82253\nf 82244 82255 82256\nf 82244 82256 82245\nf 82245 82256 82254\nf 82246 82247 82257\nf 82247 82248 82258\nf 82247 82258 82257\nf 82248 82249 82259\nf 82248 82259 82258\nf 82249 82250 82260\nf 82249 82260 82259\nf 82250 82251 82261\nf 82250 82261 82260\nf 82251 82252 82262\nf 82251 82262 82261\nf 82252 82253 82263\nf 82252 82263 82262\nf 82253 82254 82264\nf 82253 82264 82263\nf 82254 82256 82265\nf 82254 82265 82264\nf 82255 82266 82267\nf 82255 82267 82256\nf 82256 82267 82265\nf 82257 82258 82268\nf 82258 82259 82269\nf 82258 82269 82268\nf 82259 82260 82270\nf 82259 82270 82269\nf 82260 82261 82271\nf 82260 82271 82270\nf 82261 82262 82272\nf 82261 82272 82271\nf 82262 82263 82273\nf 82262 82273 82272\nf 82263 82264 82274\nf 82263 82274 82273\nf 82264 82265 82275\nf 82264 82275 82274\nf 82265 82267 82276\nf 82265 82276 82275\nf 82266 82277 82279\nf 82266 82279 82267\nf 82267 82279 82276\nf 82268 82269 82280\nf 82269 82270 82281\nf 82269 82281 82280\nf 82270 82271 82282\nf 82270 82282 82281\nf 82271 82272 82283\nf 82271 82283 82282\nf 82272 82273 82284\nf 82272 82284 82283\nf 82273 82274 82285\nf 82273 82285 82284\nf 82274 82275 82286\nf 82274 82286 82285\nf 82275 82276 82287\nf 82275 82287 82286\nf 82276 82279 82289\nf 82276 82289 82287\nf 82277 82278 82279\nf 82278 82288 82289\nf 82278 82289 82279\nf 82280 82281 82290\nf 82281 82282 82291\nf 82281 82291 82290\nf 82282 82283 82292\nf 82282 82292 82291\nf 82283 82284 82293\nf 82283 82293 82292\nf 82284 82285 82294\nf 82284 82294 82293\nf 82285 82286 82295\nf 82285 82295 82294\nf 82286 82287 82296\nf 82286 82296 82295\nf 82287 82289 82297\nf 82287 82297 82296\nf 82288 82298 82299\nf 82288 82299 82289\nf 82289 82299 82297\nf 82290 82291 82300\nf 82291 82292 82301\nf 82291 82301 82300\nf 82292 82293 82302\nf 82292 82302 82301\nf 82293 82294 82303\nf 82293 82303 82302\nf 82294 82295 82304\nf 82294 82304 82303\nf 82295 82296 82305\nf 82295 82305 82304\nf 82296 82297 82306\nf 82296 82306 82305\nf 82297 82299 82307\nf 82297 82307 82306\nf 82298 82308 82309\nf 82298 82309 82299\nf 82299 82309 82307\nf 82300 82301 82311\nf 82301 82302 82313\nf 82301 82313 82311\nf 82302 82303 82314\nf 82302 82314 82313\nf 82303 82304 82315\nf 82303 82315 82314\nf 82304 82305 82316\nf 82304 82316 82315\nf 82305 82306 82317\nf 82305 82317 82316\nf 82306 82307 82318\nf 82306 82318 82317\nf 82307 82309 82319\nf 82307 82319 82318\nf 82308 82310 82322\nf 82308 82322 82309\nf 82309 82320 82319\nf 82309 82322 82320\nf 82310 82321 82322\nf 82311 82313 82312\nf 82312 82313 82323\nf 82313 82314 82324\nf 82313 82324 82323\nf 82314 82315 82324\nf 82315 82316 82325\nf 82315 82325 82324\nf 82316 82317 82326\nf 82316 82326 82325\nf 82317 82318 82327\nf 82317 82327 82326\nf 82318 82319 82328\nf 82318 82328 82327\nf 82319 82320 82329\nf 82319 82329 82328\nf 82320 82322 82330\nf 82320 82330 82329\nf 82321 82331 82332\nf 82321 82332 82322\nf 82322 82332 82330\nf 82323 82324 82333\nf 82324 82325 82334\nf 82324 82334 82333\nf 82325 82326 82335\nf 82325 82335 82334\nf 82326 82327 82336\nf 82326 82336 82335\nf 82327 82328 82337\nf 82327 82337 82336\nf 82328 82329 82338\nf 82328 82338 82337\nf 82329 82330 82339\nf 82329 82339 82338\nf 82330 82332 82340\nf 82330 82340 82339\nf 82331 82341 82343\nf 82331 82343 82332\nf 82332 82343 82340\nf 82333 82334 82344\nf 82334 82335 82345\nf 82334 82345 82344\nf 82335 82336 82346\nf 82335 82346 82345\nf 82336 82337 82347\nf 82336 82347 82346\nf 82337 82338 82348\nf 82337 82348 82347\nf 82338 82339 82349\nf 82338 82349 82348\nf 82339 82340 82350\nf 82339 82350 82349\nf 82340 82343 82352\nf 82340 82352 82350\nf 82341 82342 82343\nf 82342 82351 82352\nf 82342 82352 82343\nf 82344 82345 82353\nf 82345 82346 82355\nf 82345 82355 82353\nf 82346 82347 82356\nf 82346 82356 82355\nf 82347 82348 82357\nf 82347 82357 82356\nf 82348 82349 82358\nf 82348 82358 82357\nf 82349 82350 82359\nf 82349 82359 82358\nf 82350 82352 82360\nf 82350 82360 82359\nf 82351 82361 82362\nf 82351 82362 82352\nf 82352 82362 82360\nf 82353 82355 82354\nf 82354 82355 82363\nf 82355 82356 82365\nf 82355 82365 82363\nf 82356 82357 82365\nf 82357 82358 82366\nf 82357 82366 82365\nf 82358 82359 82367\nf 82358 82367 82366\nf 82359 82360 82368\nf 82359 82368 82367\nf 82360 82362 82369\nf 82360 82369 82368\nf 82361 82370 82372\nf 82361 82372 82362\nf 82362 82372 82369\nf 82363 82365 82364\nf 82364 82365 82373\nf 82365 82366 82374\nf 82365 82374 82373\nf 82366 82367 82374\nf 82367 82368 82375\nf 82367 82375 82374\nf 82368 82369 82376\nf 82368 82376 82375\nf 82369 82372 82378\nf 82369 82378 82376\nf 82370 82371 82372\nf 82371 82377 82378\nf 82371 82378 82372\nf 82373 82374 82379\nf 82374 82375 82380\nf 82374 82380 82379\nf 82375 82376 82381\nf 82375 82381 82380\nf 82376 82378 82382\nf 82376 82382 82381\nf 82377 82383 82385\nf 82377 82385 82378\nf 82378 82385 82382\nf 82379 82380 82386\nf 82380 82381 82388\nf 82380 82388 82386\nf 82381 82382 82389\nf 82381 82389 82388\nf 82382 82385 82392\nf 82382 82392 82389\nf 82383 82384 82385\nf 82384 82390 82392\nf 82384 82392 82385\nf 82386 82388 82387\nf 82387 82388 82393\nf 82388 82389 82396\nf 82388 82396 82393\nf 82389 82392 82396\nf 82390 82391 82392\nf 82391 82394 82396\nf 82391 82396 82392\nf 82393 82396 82395\nf 82394 82395 82396\nf 82397 82398 82402\nf 82397 82400 82399\nf 82397 82402 82400\nf 82398 82401 82402\nf 82399 82400 82403\nf 82400 82402 82405\nf 82400 82405 82403\nf 82401 82406 82407\nf 82401 82407 82402\nf 82402 82407 82405\nf 82403 82405 82404\nf 82404 82405 82409\nf 82404 82409 82408\nf 82405 82407 82410\nf 82405 82410 82409\nf 82406 82411 82412\nf 82406 82412 82407\nf 82407 82412 82410\nf 82408 82409 82413\nf 82409 82410 82414\nf 82409 82414 82413\nf 82410 82412 82415\nf 82410 82415 82414\nf 82411 82416 82417\nf 82411 82417 82412\nf 82412 82417 82415\nf 82413 82414 82418\nf 82414 82415 82419\nf 82414 82419 82418\nf 82415 82417 82420\nf 82415 82420 82419\nf 82416 82421 82422\nf 82416 82422 82417\nf 82417 82422 82420\nf 82418 82419 82423\nf 82419 82420 82424\nf 82419 82424 82423\nf 82420 82422 82425\nf 82420 82425 82424\nf 82421 82426 82427\nf 82421 82427 82422\nf 82422 82427 82425\nf 82423 82424 82428\nf 82424 82425 82430\nf 82424 82430 82428\nf 82425 82427 82431\nf 82425 82431 82430\nf 82426 82432 82433\nf 82426 82433 82427\nf 82427 82433 82431\nf 82428 82430 82429\nf 82429 82430 82434\nf 82430 82431 82435\nf 82430 82435 82434\nf 82431 82433 82435\nf 82432 82436 82437\nf 82432 82437 82433\nf 82433 82437 82435\nf 82434 82435 82438\nf 82435 82437 82439\nf 82435 82439 82438\nf 82436 82440 82441\nf 82436 82441 82437\nf 82437 82441 82439\nf 82438 82439 82443\nf 82439 82441 82444\nf 82439 82444 82443\nf 82440 82442 82447\nf 82440 82447 82441\nf 82441 82445 82444\nf 82441 82447 82445\nf 82442 82446 82447\nf 82443 82444 82448\nf 82444 82445 82449\nf 82444 82449 82448\nf 82445 82447 82450\nf 82445 82450 82449\nf 82446 82451 82452\nf 82446 82452 82447\nf 82447 82452 82450\nf 82448 82449 82453\nf 82449 82450 82454\nf 82449 82454 82453\nf 82450 82452 82455\nf 82450 82455 82454\nf 82451 82456 82457\nf 82451 82457 82452\nf 82452 82457 82455\nf 82453 82454 82458\nf 82454 82455 82459\nf 82454 82459 82458\nf 82455 82457 82460\nf 82455 82460 82459\nf 82456 82461 82462\nf 82456 82462 82457\nf 82457 82462 82460\nf 82458 82459 82463\nf 82459 82460 82464\nf 82459 82464 82463\nf 82460 82462 82465\nf 82460 82465 82464\nf 82461 82466 82467\nf 82461 82467 82462\nf 82462 82467 82465\nf 82463 82464 82468\nf 82464 82465 82469\nf 82464 82469 82468\nf 82465 82467 82470\nf 82465 82470 82469\nf 82466 82471 82473\nf 82466 82473 82467\nf 82467 82473 82470\nf 82468 82469 82474\nf 82469 82470 82475\nf 82469 82475 82474\nf 82470 82473 82477\nf 82470 82477 82475\nf 82471 82472 82473\nf 82472 82476 82477\nf 82472 82477 82473\nf 82474 82475 82478\nf 82475 82477 82480\nf 82475 82480 82478\nf 82476 82481 82482\nf 82476 82482 82477\nf 82477 82482 82480\nf 82478 82480 82479\nf 82479 82480 82484\nf 82479 82484 82483\nf 82480 82482 82485\nf 82480 82485 82484\nf 82481 82486 82487\nf 82481 82487 82482\nf 82482 82487 82485\nf 82483 82484 82488\nf 82484 82485 82489\nf 82484 82489 82488\nf 82485 82487 82490\nf 82485 82490 82489\nf 82486 82491 82492\nf 82486 82492 82487\nf 82487 82492 82490\nf 82488 82489 82493\nf 82489 82490 82494\nf 82489 82494 82493\nf 82490 82492 82495\nf 82490 82495 82494\nf 82491 82496 82497\nf 82491 82497 82492\nf 82492 82497 82495\nf 82493 82494 82498\nf 82494 82495 82499\nf 82494 82499 82498\nf 82495 82497 82500\nf 82495 82500 82499\nf 82496 82501 82502\nf 82496 82502 82497\nf 82497 82502 82500\nf 82498 82499 82504\nf 82499 82500 82505\nf 82499 82505 82504\nf 82500 82502 82506\nf 82500 82506 82505\nf 82501 82503 82509\nf 82501 82509 82502\nf 82502 82507 82506\nf 82502 82509 82507\nf 82503 82508 82509\nf 82504 82505 82510\nf 82505 82506 82512\nf 82505 82512 82510\nf 82506 82507 82513\nf 82506 82513 82512\nf 82507 82509 82514\nf 82507 82514 82513\nf 82508 82515 82516\nf 82508 82516 82509\nf 82509 82516 82514\nf 82510 82512 82511\nf 82511 82512 82517\nf 82512 82513 82518\nf 82512 82518 82517\nf 82513 82514 82518\nf 82514 82516 82519\nf 82514 82519 82518\nf 82515 82520 82521\nf 82515 82521 82516\nf 82516 82521 82519\nf 82517 82518 82522\nf 82518 82519 82523\nf 82518 82523 82522\nf 82519 82521 82524\nf 82519 82524 82523\nf 82520 82525 82527\nf 82520 82527 82521\nf 82521 82527 82524\nf 82522 82523 82528\nf 82523 82524 82529\nf 82523 82529 82528\nf 82524 82527 82531\nf 82524 82531 82529\nf 82525 82526 82527\nf 82526 82530 82531\nf 82526 82531 82527\nf 82528 82529 82532\nf 82529 82531 82533\nf 82529 82533 82532\nf 82530 82534 82535\nf 82530 82535 82531\nf 82531 82535 82533\nf 82532 82533 82536\nf 82533 82535 82538\nf 82533 82538 82536\nf 82534 82539 82541\nf 82534 82541 82535\nf 82535 82541 82538\nf 82536 82538 82537\nf 82537 82538 82540\nf 82538 82541 82540\nf 82539 82540 82541\nf 82542 82545 82546\nf 82542 82546 82544\nf 82543 82549 82550\nf 82543 82550 82548\nf 82544 82546 82551\nf 82545 82547 82554\nf 82545 82554 82546\nf 82546 82552 82551\nf 82546 82554 82552\nf 82547 82553 82554\nf 82548 82550 82555\nf 82549 82556 82557\nf 82549 82557 82550\nf 82550 82557 82555\nf 82551 82552 82558\nf 82552 82554 82560\nf 82552 82560 82558\nf 82553 82561 82563\nf 82553 82563 82554\nf 82554 82563 82560\nf 82555 82557 82564\nf 82556 82565 82566\nf 82556 82566 82557\nf 82557 82566 82564\nf 82558 82560 82559\nf 82559 82560 82562\nf 82560 82563 82562\nf 82561 82562 82563\nf 82564 82566 82567\nf 82565 82568 82570\nf 82565 82570 82566\nf 82566 82570 82567\nf 82567 82570 82569\nf 82568 82569 82570\nf 82571 82573 82574\nf 82571 82574 82572\nf 82572 82574 82575\nf 82573 82576 82577\nf 82573 82577 82574\nf 82574 82577 82575\nf 82575 82577 82578\nf 82576 82579 82580\nf 82576 82580 82577\nf 82577 82580 82578\nf 82578 82580 82581\nf 82579 82582 82584\nf 82579 82584 82580\nf 82580 82584 82581\nf 82581 82584 82583\nf 82582 82583 82584\n"
  },
  {
    "path": "isosurface/LIB_PATH",
    "content": "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./isosurface/:/home/xharlie/dev/isosurface/tbb/tbb2018_20180822oss/lib/intel64/gcc4.7:/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64:/usr/local/lib64:/usr/local/lib:/usr/local/cuda/lib64\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/CHANGES",
    "content": "------------------------------------------------------------------------\nThe list of most significant changes made over time in Parallel STL.\n\nParallel STL 20180619 release\nPSTL_VERSION == 106\n\nFeatures / APIs:\n\n- More algorithms support parallel and vector execution policies:\n    adjacent_difference, partition, reverse, reverse_copy, rotate_copy,\n    stable_partition.\n- More algorithms support parallel execution policies:\n    inplace_merge, partial_sort_copy.\n- Split algorithm declarations and implementation by files.\n    (by Thomas Rodgers).\n- CMake support - Preview Feature\n    (by Amit Prakash Ambasta and Henry Schreiner)\n\n------------------------------------------------------------------------\nParallel STL release within Intel(R) Parallel Studio XE 2018 Update 3\nPSTL_VERSION == 105\n\nFeatures / APIs:\n\n- More algorithms support parallel and vector execution policies:\n    is_partitioned, lexicographical_compare, swap_ranges.\n- Added specialization of parallel_transform_scan pattern for better\n    performance with floating point types.\n- Arranged iterator types in public interface according to the standard\n    (by Thomas Rodgers).\n\nBugs fixed:\n\n- Fixed an error in parallel version of partial_sort algorithm.\n- Fixed an error in equal algorithm connected with values comparison.\n\n------------------------------------------------------------------------\nParallel STL 20180329 release\nPSTL_VERSION == 104\n\nFeatures / APIs:\n\n- More algorithms support parallel and vector execution policies:\n    find_first_of, is_heap, is_heap_until, replace, replace_if.\n- More algorithms support vector execution policies:\n    remove, remove_if.\n- More algorithms support parallel execution policies:\n    partial_sort.\n\n------------------------------------------------------------------------\nParallel STL release within Intel(R) Parallel Studio XE 2018 Update 2\nPSTL_VERSION == 103\n\nFeatures / APIs:\n\n- More algorithms support parallel and/or vector execution policies:\n    find_end, merge, search, search_n\n\n------------------------------------------------------------------------\nParallel STL 20171127 release\nPSTL_VERSION == 102\n\nFeatures / APIs:\n\n- Added Parallel STL version macros:\n    PSTL_VERSION, PSTL_VERSION_MAJOR, PSTL_VERSION_MINOR.\n- More algorithms support parallel and vector execution policies:\n    move, partition_copy, mismatch.\n- More algorithms support parallel execution policies:\n    min_element, max_element, minmax_element.\n\n------------------------------------------------------------------------\nParallel STL release within Intel(R) Parallel Studio XE 2018 Update 1\n\nFeatures / APIs:\n\n- More algorithms support parallel and vector execution policies:\n    destroy, destroy_n, uninitialized_copy, uninitialized_copy_n,\n    uninitialized_default_construct, uninitialized_default_construct_n,\n    uninitialized_fill, uninitialized_fill_n, uninitialized_move,\n    uninitialized_move_n, uninitialized_value_construct,\n    uninitialized_value_construct_n.\n- Improved performance in find_end and search algorithms.\n- Added macro PSTL_USE_NONTEMPORAL_STORES that can improve performance\n    of copy, copy_n, fill, fill_n, generate, generate_n algorithms with\n    unseq and par_unseq policies; by default the macro is not defined.\n\nBugs fixed:\n\n- Fixed transform_inclusive_scan to correctly process the first element.\n- Fixed compile time error in sort algorithm when used with zip_iterator\n    and some other custom iterator types.\n- Fixed several algorithms to allow use of non-const functors.\n\n------------------------------------------------------------------------\nParallel STL release within Intel(R) Parallel Studio XE 2018\n\nFeatures / APIs:\n\n- Aligned the implementation with the draft N4659 of the C++ standard.\n    In particular, inner_product no longer supports execution policies.\n- reduce and transform_reduce support unseq and par_unseq execution\n    policies if std::plus<> is used for reduction.\n- Added counting_iterator and zip_iterator to support advanced use cases.\n   To use, include pstl/iterators.h header file.\n- Added macro PSTL_USE_PARALLEL_POLICIES to control usage of parallel\n    execution policies (par, par_unseq); by default these are enabled.\n\nExamples:\n\n- Added dot_product and convex_hull samples to demonstrate Parallel STL\n    usage.\n\n------------------------------------------------------------------------\nParallel STL beta update release\n\nFeatures / APIs:\n\n- sequenced_policy is supported by all C++17 algorithms.\n- Added other execution policies support for inner_product algorithm.\n\n------------------------------------------------------------------------\nParallel STL beta initial release\n\nFeatures / APIs:\n\n- Implemented C++17 execution policies: sequenced_policy,\n    parallel_policy, parallel_unsequenced_policy.\n- Implemented unsequenced_policy based on the ISO C++ working group\n    paper P0076R3.\n- sequenced_policy is supported by all except a few C++17 algorithms.\n- Other execution policies are supported by the following algorithms:\n    adjacent_find, all_of, any_of, copy, copy_if, copy_n, count,\n    count_if, equal, exclusive_scan, fill, fill_n, find, find_if,\n    find_if_not, for_each, for_each_n, generate, generate_n,\n    inclusive_scan, none_of, is_sorted, is_sorted_until, reduce,\n    remove_copy, remove_copy_if, sort, stable_sort, transform,\n    transform_exclusive_scan, transform_inclusive_scan,\n    transform_reduce, unique_copy.\n\nDocumentation:\n\n- Initial set of documents: Getting Started Guide, Release Notes.\n\nExamples:\n\n- Added gamma_correction sample to demonstrate Parallel STL usage.\n\n------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/CMakeLists.txt",
    "content": "# Copyright (c) 2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ncmake_minimum_required(VERSION 3.1)\n\nset(PARALLELSTL_VERSION_FILE \"include/pstl/internal/pstl_config.h\")\nfile(STRINGS \"${PARALLELSTL_VERSION_FILE}\" PARALLELSTL_VERSION_SOURCE REGEX \"#define PSTL_VERSION .*$\")\nstring(REGEX MATCH \"#define PSTL_VERSION (.*)$\" PARALLELSTL_VERSION_SOURCE \"${PARALLELSTL_VERSION_SOURCE}\")\nmath(EXPR VERSION_MAJOR \"${PARALLELSTL_VERSION_SOURCE} / 100\")\nmath(EXPR VERSION_MINOR \"${PARALLELSTL_VERSION_SOURCE} % 100\")\n\nproject(ParallelSTL VERSION ${VERSION_MAJOR}.${VERSION_MINOR} LANGUAGES CXX)\n\noption(PARALLELSTL_USE_PARALLEL_POLICIES \"Enable parallel policies\" ON)\nset(PARALLELSTL_BACKEND \"tbb\" CACHE STRING \"Threading backend; defaults to TBB\")\n\ninclude(CMakePackageConfigHelpers)\n\nadd_library(ParallelSTL INTERFACE)\nadd_library(pstl::ParallelSTL ALIAS ParallelSTL)\n\nif (PARALLELSTL_USE_PARALLEL_POLICIES)\n    if (PARALLELSTL_BACKEND STREQUAL \"tbb\")\n        find_package(TBB 2018 REQUIRED tbb)\n        message(STATUS \"Parallel STL uses TBB ${TBB_VERSION} (interface version: ${TBB_INTERFACE_VERSION})\")\n        target_link_libraries(ParallelSTL INTERFACE TBB::tbb)\n    else()\n        if (TARGET ${PARALLELSTL_BACKEND})\n            target_link_libraries(ParallelSTL INTERFACE ${PARALLELSTL_BACKEND})\n        else()\n            find_package(${PARALLELSTL_BACKEND} REQUIRED)\n            target_link_libraries(ParallelSTL INTERFACE ${${PARALLELSTL_BACKEND}_IMPORTED_TARGETS})\n        endif()\n    endif()\nelse()\n    target_add_definitions(ParallelSTL INTERFACE PSTL_USE_PARALLEL_POLICIES=0)\nendif()\n\ntarget_include_directories(ParallelSTL\n    INTERFACE\n    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>\n    $<INSTALL_INTERFACE:include>)\n\nwrite_basic_package_version_file(\n    ${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfigVersion.cmake\n    VERSION ${PROJECT_VERSION}\n    COMPATIBILITY AnyNewerVersion)\n\nconfigure_file(\n    ParallelSTLConfig.cmake.in\n    ${CMAKE_CURRENT_BINARY_DIR}/ParallelSTLConfig.cmake\n    @ONLY)\n\nexport(TARGETS ParallelSTL NAMESPACE pstl:: FILE ParallelSTLTargets.cmake)\nexport(PACKAGE ParallelSTL)\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/ParallelSTLConfig.cmake.in",
    "content": "# Copyright (c) 2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ninclude(CMakeFindDependencyMacro)\n\nset(PARALLELSTL_BACKEND \"@PARALLELSTL_BACKEND@\")\n\nif(PARALLELSTL_BACKEND STREQUAL \"tbb\")\n    find_dependency(TBB 2018 REQUIRED tbb)\nendif()\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/ParallelSTLTargets.cmake\")\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/bin/pstlvars.csh",
    "content": "#!/bin/csh\n#\n# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Parsing script arguments\n# Arg1 represents target architecture. Its possible values are 'ia32' or 'intel64',\n# default value equals to the value of $COMPILERVARS_ARCHITECTURE environment variable.\n\nset PSTL_TARGET_ARCH=\"\"\n\nif ($?COMPILERVARS_ARCHITECTURE) then\n    set PSTL_TARGET_ARCH=\"$COMPILERVARS_ARCHITECTURE\"\nendif\n\nif (\"$1\" != \"\") then\n    set PSTL_TARGET_ARCH=\"$1\"\nendif\n\nif (\"$PSTL_TARGET_ARCH\" != \"\") then\n    if (\"$PSTL_TARGET_ARCH\" != \"ia32\" && \"$PSTL_TARGET_ARCH\" != \"intel64\") then\n        echo \"ERROR: Unknown switch '$PSTL_TARGET_ARCH'. Accepted values: ia32, intel64\"\n        set PSTL_TARGET_ARCH=\"\"\n        exit 1\n    endif\nelse\n    echo \"ERROR: Architecture is not defined. Accepted values: ia32, intel64\"\n    exit 1\nendif\n\n\n# Arg2 represents PSTLROOT detection method. Its possible value is 'auto_pstlroot'. In which case\n# the environment variable PSTLROOT is detected automatically by using the script directory path.\nif (\"$2\" == \"auto_pstlroot\") then\n    set sourced=($_)\n    if (\"$sourced\" != '') then # if the script was sourced\n        set script_name=`readlink -f $sourced[2]`\n    else # if the script was run => \"$_\" is empty\n        set script_name=`readlink -f $0`\n    endif\n    set script_dir=`dirname $script_name`\n    setenv PSTLROOT \"$script_dir/..\"\nelse\n    setenv PSTLROOT \"SUBSTITUTE_INSTALL_DIR_HERE\"\nendif\n\nif ( -e $PSTLROOT/../tbb/bin/tbbvars.csh ) then\n   source $PSTLROOT/../tbb/bin/tbbvars.csh $PSTL_TARGET_ARCH;\nendif\n\nif (! $?CPATH) then\n    setenv CPATH \"${PSTLROOT}/include\"\nelse\n    setenv CPATH \"${PSTLROOT}/include:$CPATH\"\nendif\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/bin/pstlvars.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Parsing script arguments\n# Arg1 represents target architecture. Its possible values are 'ia32' or 'intel64',\n# default value equals to the value of $COMPILERVARS_ARCHITECTURE environment variable.\n\nPSTL_TARGET_ARCH=\n\nif [ -n \"${COMPILERVARS_ARCHITECTURE}\" ]; then\n    PSTL_TARGET_ARCH=$COMPILERVARS_ARCHITECTURE\nfi\n\nif [ -n \"$1\" ]; then\n    PSTL_TARGET_ARCH=$1\nfi\n\nif [ -n \"${PSTL_TARGET_ARCH}\" ]; then\n    if [ \"$PSTL_TARGET_ARCH\" != \"ia32\" -a \"$PSTL_TARGET_ARCH\" != \"intel64\" ]; then\n        echo \"ERROR: Unknown switch '$PSTL_TARGET_ARCH'. Accepted values: ia32, intel64\"\n        PSTL_TARGET_ARCH=\n        return 1;\n    fi\nelse\n    echo \"ERROR: Architecture is not defined. Accepted values: ia32, intel64\"\n    return 1;\nfi\n\n# Arg2 represents PSTLROOT detection method. Its possible value is 'auto_pstlroot'. In which case\n# the environment variable PSTLROOT is detected automatically by using the script directory path.\nPSTLROOT=SUBSTITUTE_INSTALL_DIR_HERE\nif [ -n \"${BASH_SOURCE}\" ]; then\n    if [ \"$2\" = \"auto_pstlroot\" ]; then\n       PSTLROOT=$(cd $(dirname ${BASH_SOURCE}) && pwd -P)/..\n    fi\nfi\nexport PSTLROOT\n\nif [ -e $PSTLROOT/../tbb/bin/tbbvars.sh ]; then\n   . $PSTLROOT/../tbb/bin/tbbvars.sh $PSTL_TARGET_ARCH\nfi\n\nif [ -z \"${CPATH}\" ]; then\n    CPATH=\"${PSTLROOT}/include\"; export CPATH\nelse\n    CPATH=\"${PSTLROOT}/include:$CPATH\"; export CPATH\nfi\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeCache.txt",
    "content": "# This is the CMakeCache file.\n# For build in directory: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build\n# It was generated by CMake: /usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake\n# You can edit this file to change values found and used by cmake.\n# If you do not want to change any of the values, simply exit the editor.\n# If you do want to change a value, simply edit, save, and exit the editor.\n# The syntax for the file is as follows:\n# KEY:TYPE=VALUE\n# KEY is the name of a variable in the cache.\n# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.\n# VALUE is the current value for the KEY.\n\n########################\n# EXTERNAL cache entries\n########################\n\n//Path to a program.\nCMAKE_AR:FILEPATH=/usr/bin/ar\n\n//Choose the type of build, options are: None Debug Release RelWithDebInfo\n// MinSizeRel ...\nCMAKE_BUILD_TYPE:STRING=\n\n//Enable/Disable color output during build.\nCMAKE_COLOR_MAKEFILE:BOOL=ON\n\n//CXX compiler\nCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++\n\n//A wrapper around 'ar' adding the appropriate '--plugin' option\n// for the GCC compiler\nCMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-5\n\n//A wrapper around 'ranlib' adding the appropriate '--plugin' option\n// for the GCC compiler\nCMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-5\n\n//Flags used by the CXX compiler during all build types.\nCMAKE_CXX_FLAGS:STRING=\n\n//Flags used by the CXX compiler during DEBUG builds.\nCMAKE_CXX_FLAGS_DEBUG:STRING=-g\n\n//Flags used by the CXX compiler during MINSIZEREL builds.\nCMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG\n\n//Flags used by the CXX compiler during RELEASE builds.\nCMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG\n\n//Flags used by the CXX compiler during RELWITHDEBINFO builds.\nCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG\n\n//Flags used by the linker during all build types.\nCMAKE_EXE_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during DEBUG builds.\nCMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during MINSIZEREL builds.\nCMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during RELEASE builds.\nCMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during RELWITHDEBINFO builds.\nCMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Enable/Disable output of compile commands during generation.\nCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF\n\n//Install path prefix, prepended onto install directories.\nCMAKE_INSTALL_PREFIX:PATH=/usr/local\n\n//Path to a program.\nCMAKE_LINKER:FILEPATH=/usr/bin/ld\n\n//Path to a program.\nCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make\n\n//Flags used by the linker during the creation of modules during\n// all build types.\nCMAKE_MODULE_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during the creation of modules during\n// DEBUG builds.\nCMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during the creation of modules during\n// MINSIZEREL builds.\nCMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during the creation of modules during\n// RELEASE builds.\nCMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during the creation of modules during\n// RELWITHDEBINFO builds.\nCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Path to a program.\nCMAKE_NM:FILEPATH=/usr/bin/nm\n\n//Path to a program.\nCMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy\n\n//Path to a program.\nCMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump\n\n//Value Computed by CMake\nCMAKE_PROJECT_NAME:STATIC=ParallelSTL\n\n//Value Computed by CMake\nCMAKE_PROJECT_VERSION:STATIC=1.6\n\n//Value Computed by CMake\nCMAKE_PROJECT_VERSION_MAJOR:STATIC=1\n\n//Value Computed by CMake\nCMAKE_PROJECT_VERSION_MINOR:STATIC=6\n\n//Value Computed by CMake\nCMAKE_PROJECT_VERSION_PATCH:STATIC=\n\n//Value Computed by CMake\nCMAKE_PROJECT_VERSION_TWEAK:STATIC=\n\n//Path to a program.\nCMAKE_RANLIB:FILEPATH=/usr/bin/ranlib\n\n//Flags used by the linker during the creation of shared libraries\n// during all build types.\nCMAKE_SHARED_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during the creation of shared libraries\n// during DEBUG builds.\nCMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during the creation of shared libraries\n// during MINSIZEREL builds.\nCMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during the creation of shared libraries\n// during RELEASE builds.\nCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during the creation of shared libraries\n// during RELWITHDEBINFO builds.\nCMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//If set, runtime paths are not added when installing shared libraries,\n// but are added when building.\nCMAKE_SKIP_INSTALL_RPATH:BOOL=NO\n\n//If set, runtime paths are not added when using shared libraries.\nCMAKE_SKIP_RPATH:BOOL=NO\n\n//Flags used by the linker during the creation of static libraries\n// during all build types.\nCMAKE_STATIC_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during the creation of static libraries\n// during DEBUG builds.\nCMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during the creation of static libraries\n// during MINSIZEREL builds.\nCMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during the creation of static libraries\n// during RELEASE builds.\nCMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during the creation of static libraries\n// during RELWITHDEBINFO builds.\nCMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Path to a program.\nCMAKE_STRIP:FILEPATH=/usr/bin/strip\n\n//If this value is on, makefiles will be generated without the\n// .SILENT directive, and all commands will be echoed to the console\n// during the make.  This is useful for debugging only. With Visual\n// Studio IDE projects all commands are done without /nologo.\nCMAKE_VERBOSE_MAKEFILE:BOOL=FALSE\n\n//Threading backend; defaults to TBB\nPARALLELSTL_BACKEND:STRING=tbb\n\n//Enable parallel policies\nPARALLELSTL_USE_PARALLEL_POLICIES:BOOL=ON\n\n//Value Computed by CMake\nParallelSTL_BINARY_DIR:STATIC=/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build\n\n//Value Computed by CMake\nParallelSTL_SOURCE_DIR:STATIC=/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss\n\n//The directory containing a CMake configuration file for TBB.\nTBB_DIR:PATH=TBB_DIR-NOTFOUND\n\n\n########################\n# INTERNAL cache entries\n########################\n\n//ADVANCED property for variable: CMAKE_AR\nCMAKE_AR-ADVANCED:INTERNAL=1\n//This is the directory where this CMakeCache.txt was created\nCMAKE_CACHEFILE_DIR:INTERNAL=/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build\n//Major version of cmake used to create the current loaded cache\nCMAKE_CACHE_MAJOR_VERSION:INTERNAL=3\n//Minor version of cmake used to create the current loaded cache\nCMAKE_CACHE_MINOR_VERSION:INTERNAL=12\n//Patch version of cmake used to create the current loaded cache\nCMAKE_CACHE_PATCH_VERSION:INTERNAL=0\n//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE\nCMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1\n//Path to CMake executable.\nCMAKE_COMMAND:INTERNAL=/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake\n//Path to cpack program executable.\nCMAKE_CPACK_COMMAND:INTERNAL=/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cpack\n//Path to ctest program executable.\nCMAKE_CTEST_COMMAND:INTERNAL=/usr/local/lib/python2.7/dist-packages/cmake/data/bin/ctest\n//ADVANCED property for variable: CMAKE_CXX_COMPILER\nCMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR\nCMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB\nCMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS\nCMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG\nCMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL\nCMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE\nCMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO\nCMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//Executable file format\nCMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS\nCMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG\nCMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL\nCMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE\nCMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS\nCMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1\n//Name of external makefile project generator.\nCMAKE_EXTRA_GENERATOR:INTERNAL=\n//Name of generator.\nCMAKE_GENERATOR:INTERNAL=Unix Makefiles\n//Generator instance identifier.\nCMAKE_GENERATOR_INSTANCE:INTERNAL=\n//Name of generator platform.\nCMAKE_GENERATOR_PLATFORM:INTERNAL=\n//Name of generator toolset.\nCMAKE_GENERATOR_TOOLSET:INTERNAL=\n//Source directory with the top level CMakeLists.txt file for this\n// project\nCMAKE_HOME_DIRECTORY:INTERNAL=/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss\n//Install .so files without execute permission.\nCMAKE_INSTALL_SO_NO_EXE:INTERNAL=1\n//ADVANCED property for variable: CMAKE_LINKER\nCMAKE_LINKER-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MAKE_PROGRAM\nCMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS\nCMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG\nCMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL\nCMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE\nCMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_NM\nCMAKE_NM-ADVANCED:INTERNAL=1\n//number of local generators\nCMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1\n//ADVANCED property for variable: CMAKE_OBJCOPY\nCMAKE_OBJCOPY-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_OBJDUMP\nCMAKE_OBJDUMP-ADVANCED:INTERNAL=1\n//Platform information initialized\nCMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_RANLIB\nCMAKE_RANLIB-ADVANCED:INTERNAL=1\n//Path to CMake installation.\nCMAKE_ROOT:INTERNAL=/usr/local/lib/python2.7/dist-packages/cmake/data/share/cmake-3.12\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS\nCMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG\nCMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL\nCMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE\nCMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH\nCMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SKIP_RPATH\nCMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS\nCMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG\nCMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL\nCMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE\nCMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STRIP\nCMAKE_STRIP-ADVANCED:INTERNAL=1\n//uname command\nCMAKE_UNAME:INTERNAL=/bin/uname\n//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE\nCMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1\n\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/3.12.0/CMakeCXXCompiler.cmake",
    "content": "set(CMAKE_CXX_COMPILER \"/usr/bin/c++\")\nset(CMAKE_CXX_COMPILER_ARG1 \"\")\nset(CMAKE_CXX_COMPILER_ID \"GNU\")\nset(CMAKE_CXX_COMPILER_VERSION \"5.4.0\")\nset(CMAKE_CXX_COMPILER_VERSION_INTERNAL \"\")\nset(CMAKE_CXX_COMPILER_WRAPPER \"\")\nset(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT \"98\")\nset(CMAKE_CXX_COMPILE_FEATURES \"cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17\")\nset(CMAKE_CXX98_COMPILE_FEATURES \"cxx_std_98;cxx_template_template_parameters\")\nset(CMAKE_CXX11_COMPILE_FEATURES \"cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates\")\nset(CMAKE_CXX14_COMPILE_FEATURES \"cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates\")\nset(CMAKE_CXX17_COMPILE_FEATURES \"cxx_std_17\")\nset(CMAKE_CXX20_COMPILE_FEATURES \"\")\n\nset(CMAKE_CXX_PLATFORM_ID \"Linux\")\nset(CMAKE_CXX_SIMULATE_ID \"\")\nset(CMAKE_CXX_SIMULATE_VERSION \"\")\n\n\n\nset(CMAKE_AR \"/usr/bin/ar\")\nset(CMAKE_CXX_COMPILER_AR \"/usr/bin/gcc-ar-5\")\nset(CMAKE_RANLIB \"/usr/bin/ranlib\")\nset(CMAKE_CXX_COMPILER_RANLIB \"/usr/bin/gcc-ranlib-5\")\nset(CMAKE_LINKER \"/usr/bin/ld\")\nset(CMAKE_COMPILER_IS_GNUCXX 1)\nset(CMAKE_CXX_COMPILER_LOADED 1)\nset(CMAKE_CXX_COMPILER_WORKS TRUE)\nset(CMAKE_CXX_ABI_COMPILED TRUE)\nset(CMAKE_COMPILER_IS_MINGW )\nset(CMAKE_COMPILER_IS_CYGWIN )\nif(CMAKE_COMPILER_IS_CYGWIN)\n  set(CYGWIN 1)\n  set(UNIX 1)\nendif()\n\nset(CMAKE_CXX_COMPILER_ENV_VAR \"CXX\")\n\nif(CMAKE_COMPILER_IS_MINGW)\n  set(MINGW 1)\nendif()\nset(CMAKE_CXX_COMPILER_ID_RUN 1)\nset(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)\nset(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP)\nset(CMAKE_CXX_LINKER_PREFERENCE 30)\nset(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)\n\n# Save compiler ABI information.\nset(CMAKE_CXX_SIZEOF_DATA_PTR \"8\")\nset(CMAKE_CXX_COMPILER_ABI \"ELF\")\nset(CMAKE_CXX_LIBRARY_ARCHITECTURE \"x86_64-linux-gnu\")\n\nif(CMAKE_CXX_SIZEOF_DATA_PTR)\n  set(CMAKE_SIZEOF_VOID_P \"${CMAKE_CXX_SIZEOF_DATA_PTR}\")\nendif()\n\nif(CMAKE_CXX_COMPILER_ABI)\n  set(CMAKE_INTERNAL_PLATFORM_ABI \"${CMAKE_CXX_COMPILER_ABI}\")\nendif()\n\nif(CMAKE_CXX_LIBRARY_ARCHITECTURE)\n  set(CMAKE_LIBRARY_ARCHITECTURE \"x86_64-linux-gnu\")\nendif()\n\nset(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX \"\")\nif(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)\n  set(CMAKE_CL_SHOWINCLUDES_PREFIX \"${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}\")\nendif()\n\n\n\n\n\nset(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES \"stdc++;m;gcc_s;gcc;c;gcc_s;gcc\")\nset(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES \"/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib\")\nset(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES \"\")\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/3.12.0/CMakeSystem.cmake",
    "content": "set(CMAKE_HOST_SYSTEM \"Linux-4.4.0-87-generic\")\nset(CMAKE_HOST_SYSTEM_NAME \"Linux\")\nset(CMAKE_HOST_SYSTEM_VERSION \"4.4.0-87-generic\")\nset(CMAKE_HOST_SYSTEM_PROCESSOR \"x86_64\")\n\n\n\nset(CMAKE_SYSTEM \"Linux-4.4.0-87-generic\")\nset(CMAKE_SYSTEM_NAME \"Linux\")\nset(CMAKE_SYSTEM_VERSION \"4.4.0-87-generic\")\nset(CMAKE_SYSTEM_PROCESSOR \"x86_64\")\n\nset(CMAKE_CROSSCOMPILING \"FALSE\")\n\nset(CMAKE_SYSTEM_LOADED 1)\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/3.12.0/CompilerIdCXX/CMakeCXXCompilerId.cpp",
    "content": "/* This source file must have a .cpp extension so that all C++ compilers\n   recognize the extension without flags.  Borland does not know .cxx for\n   example.  */\n#ifndef __cplusplus\n# error \"A C compiler has been selected for C++.\"\n#endif\n\n\n/* Version number components: V=Version, R=Revision, P=Patch\n   Version date components:   YYYY=Year, MM=Month,   DD=Day  */\n\n#if defined(__COMO__)\n# define COMPILER_ID \"Comeau\"\n  /* __COMO_VERSION__ = VRR */\n# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)\n# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)\n\n#elif defined(__INTEL_COMPILER) || defined(__ICC)\n# define COMPILER_ID \"Intel\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n  /* __INTEL_COMPILER = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)\n# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)\n# if defined(__INTEL_COMPILER_UPDATE)\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)\n# else\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)\n# endif\n# if defined(__INTEL_COMPILER_BUILD_DATE)\n  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */\n#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)\n# endif\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__PATHCC__)\n# define COMPILER_ID \"PathScale\"\n# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)\n# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)\n# if defined(__PATHCC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)\n# endif\n\n#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)\n# define COMPILER_ID \"Embarcadero\"\n# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)\n# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)\n# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)\n\n#elif defined(__BORLANDC__)\n# define COMPILER_ID \"Borland\"\n  /* __BORLANDC__ = 0xVRR */\n# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)\n# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)\n\n#elif defined(__WATCOMC__) && __WATCOMC__ < 1200\n# define COMPILER_ID \"Watcom\"\n   /* __WATCOMC__ = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__WATCOMC__)\n# define COMPILER_ID \"OpenWatcom\"\n   /* __WATCOMC__ = VVRP + 1100 */\n# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__SUNPRO_CC)\n# define COMPILER_ID \"SunPro\"\n# if __SUNPRO_CC >= 0x5100\n   /* __SUNPRO_CC = 0xVRRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)\n# else\n   /* __SUNPRO_CC = 0xVRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)\n# endif\n\n#elif defined(__HP_aCC)\n# define COMPILER_ID \"HP\"\n  /* __HP_aCC = VVRRPP */\n# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)\n# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)\n# define COMPILER_VERSION_PATCH DEC(__HP_aCC     % 100)\n\n#elif defined(__DECCXX)\n# define COMPILER_ID \"Compaq\"\n  /* __DECCXX_VER = VVRRTPPPP */\n# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)\n# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000  % 100)\n# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER         % 10000)\n\n#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)\n# define COMPILER_ID \"zOS\"\n# if defined(__ibmxl__)\n#  define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)\n#  define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)\n#  define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)\n#  define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)\n# else\n   /* __IBMCPP__ = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n#  define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n# endif\n\n\n#elif defined(__ibmxl__) || (defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800)\n# define COMPILER_ID \"XL\"\n# if defined(__ibmxl__)\n#  define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)\n#  define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)\n#  define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)\n#  define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)\n# else\n   /* __IBMCPP__ = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n#  define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n# endif\n\n\n#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800\n# define COMPILER_ID \"VisualAge\"\n# if defined(__ibmxl__)\n#  define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)\n#  define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)\n#  define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)\n#  define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)\n# else\n   /* __IBMCPP__ = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n#  define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n# endif\n\n\n#elif defined(__PGI)\n# define COMPILER_ID \"PGI\"\n# define COMPILER_VERSION_MAJOR DEC(__PGIC__)\n# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)\n# if defined(__PGIC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)\n# endif\n\n#elif defined(_CRAYC)\n# define COMPILER_ID \"Cray\"\n# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)\n# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)\n\n#elif defined(__TI_COMPILER_VERSION__)\n# define COMPILER_ID \"TI\"\n  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */\n# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)\n# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)\n# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)\n\n#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)\n# define COMPILER_ID \"Fujitsu\"\n\n#elif defined(__SCO_VERSION__)\n# define COMPILER_ID \"SCO\"\n\n#elif defined(__clang__) && defined(__apple_build_version__)\n# define COMPILER_ID \"AppleClang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)\n\n#elif defined(__clang__)\n# define COMPILER_ID \"Clang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__GNUC__) || defined(__GNUG__)\n# define COMPILER_ID \"GNU\"\n# if defined(__GNUC__)\n#  define COMPILER_VERSION_MAJOR DEC(__GNUC__)\n# else\n#  define COMPILER_VERSION_MAJOR DEC(__GNUG__)\n# endif\n# if defined(__GNUC_MINOR__)\n#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)\n# endif\n# if defined(__GNUC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)\n# endif\n\n#elif defined(_MSC_VER)\n# define COMPILER_ID \"MSVC\"\n  /* _MSC_VER = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)\n# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)\n# if defined(_MSC_FULL_VER)\n#  if _MSC_VER >= 1400\n    /* _MSC_FULL_VER = VVRRPPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)\n#  else\n    /* _MSC_FULL_VER = VVRRPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)\n#  endif\n# endif\n# if defined(_MSC_BUILD)\n#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)\n# endif\n\n#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)\n# define COMPILER_ID \"ADSP\"\n#if defined(__VISUALDSPVERSION__)\n  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */\n# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)\n# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)\n# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)\n#endif\n\n#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)\n# define COMPILER_ID \"IAR\"\n# if defined(__VER__)\n#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)\n#  define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)\n#  define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)\n#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)\n# endif\n\n#elif defined(__ARMCC_VERSION)\n# define COMPILER_ID \"ARMCC\"\n#if __ARMCC_VERSION >= 1000000\n  /* __ARMCC_VERSION = VRRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)\n#else\n  /* __ARMCC_VERSION = VRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)\n#endif\n\n\n#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)\n# define COMPILER_ID \"MIPSpro\"\n# if defined(_SGI_COMPILER_VERSION)\n  /* _SGI_COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION    % 10)\n# else\n  /* _COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION    % 10)\n# endif\n\n\n/* These compilers are either not known or too old to define an\n  identification macro.  Try to identify the platform and guess that\n  it is the native compiler.  */\n#elif defined(__sgi)\n# define COMPILER_ID \"MIPSpro\"\n\n#elif defined(__hpux) || defined(__hpua)\n# define COMPILER_ID \"HP\"\n\n#else /* unknown compiler */\n# define COMPILER_ID \"\"\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_compiler = \"INFO\" \":\" \"compiler[\" COMPILER_ID \"]\";\n#ifdef SIMULATE_ID\nchar const* info_simulate = \"INFO\" \":\" \"simulate[\" SIMULATE_ID \"]\";\n#endif\n\n#ifdef __QNXNTO__\nchar const* qnxnto = \"INFO\" \":\" \"qnxnto[]\";\n#endif\n\n#if defined(__CRAYXE) || defined(__CRAYXC)\nchar const *info_cray = \"INFO\" \":\" \"compiler_wrapper[CrayPrgEnv]\";\n#endif\n\n#define STRINGIFY_HELPER(X) #X\n#define STRINGIFY(X) STRINGIFY_HELPER(X)\n\n/* Identify known platforms by name.  */\n#if defined(__linux) || defined(__linux__) || defined(linux)\n# define PLATFORM_ID \"Linux\"\n\n#elif defined(__CYGWIN__)\n# define PLATFORM_ID \"Cygwin\"\n\n#elif defined(__MINGW32__)\n# define PLATFORM_ID \"MinGW\"\n\n#elif defined(__APPLE__)\n# define PLATFORM_ID \"Darwin\"\n\n#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\n# define PLATFORM_ID \"Windows\"\n\n#elif defined(__FreeBSD__) || defined(__FreeBSD)\n# define PLATFORM_ID \"FreeBSD\"\n\n#elif defined(__NetBSD__) || defined(__NetBSD)\n# define PLATFORM_ID \"NetBSD\"\n\n#elif defined(__OpenBSD__) || defined(__OPENBSD)\n# define PLATFORM_ID \"OpenBSD\"\n\n#elif defined(__sun) || defined(sun)\n# define PLATFORM_ID \"SunOS\"\n\n#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)\n# define PLATFORM_ID \"AIX\"\n\n#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)\n# define PLATFORM_ID \"IRIX\"\n\n#elif defined(__hpux) || defined(__hpux__)\n# define PLATFORM_ID \"HP-UX\"\n\n#elif defined(__HAIKU__)\n# define PLATFORM_ID \"Haiku\"\n\n#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)\n# define PLATFORM_ID \"BeOS\"\n\n#elif defined(__QNX__) || defined(__QNXNTO__)\n# define PLATFORM_ID \"QNX\"\n\n#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)\n# define PLATFORM_ID \"Tru64\"\n\n#elif defined(__riscos) || defined(__riscos__)\n# define PLATFORM_ID \"RISCos\"\n\n#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)\n# define PLATFORM_ID \"SINIX\"\n\n#elif defined(__UNIX_SV__)\n# define PLATFORM_ID \"UNIX_SV\"\n\n#elif defined(__bsdos__)\n# define PLATFORM_ID \"BSDOS\"\n\n#elif defined(_MPRAS) || defined(MPRAS)\n# define PLATFORM_ID \"MP-RAS\"\n\n#elif defined(__osf) || defined(__osf__)\n# define PLATFORM_ID \"OSF1\"\n\n#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)\n# define PLATFORM_ID \"SCO_SV\"\n\n#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)\n# define PLATFORM_ID \"ULTRIX\"\n\n#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)\n# define PLATFORM_ID \"Xenix\"\n\n#elif defined(__WATCOMC__)\n# if defined(__LINUX__)\n#  define PLATFORM_ID \"Linux\"\n\n# elif defined(__DOS__)\n#  define PLATFORM_ID \"DOS\"\n\n# elif defined(__OS2__)\n#  define PLATFORM_ID \"OS2\"\n\n# elif defined(__WINDOWS__)\n#  define PLATFORM_ID \"Windows3x\"\n\n# else /* unknown platform */\n#  define PLATFORM_ID\n# endif\n\n#else /* unknown platform */\n# define PLATFORM_ID\n\n#endif\n\n/* For windows compilers MSVC and Intel we can determine\n   the architecture of the compiler being used.  This is because\n   the compilers do not have flags that can change the architecture,\n   but rather depend on which compiler is being used\n*/\n#if defined(_WIN32) && defined(_MSC_VER)\n# if defined(_M_IA64)\n#  define ARCHITECTURE_ID \"IA64\"\n\n# elif defined(_M_X64) || defined(_M_AMD64)\n#  define ARCHITECTURE_ID \"x64\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# elif defined(_M_ARM64)\n#  define ARCHITECTURE_ID \"ARM64\"\n\n# elif defined(_M_ARM)\n#  if _M_ARM == 4\n#   define ARCHITECTURE_ID \"ARMV4I\"\n#  elif _M_ARM == 5\n#   define ARCHITECTURE_ID \"ARMV5I\"\n#  else\n#   define ARCHITECTURE_ID \"ARMV\" STRINGIFY(_M_ARM)\n#  endif\n\n# elif defined(_M_MIPS)\n#  define ARCHITECTURE_ID \"MIPS\"\n\n# elif defined(_M_SH)\n#  define ARCHITECTURE_ID \"SHx\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#elif defined(__WATCOMC__)\n# if defined(_M_I86)\n#  define ARCHITECTURE_ID \"I86\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)\n# if defined(__ICCARM__)\n#  define ARCHITECTURE_ID \"ARM\"\n\n# elif defined(__ICCAVR__)\n#  define ARCHITECTURE_ID \"AVR\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n#else\n#  define ARCHITECTURE_ID\n#endif\n\n/* Convert integer to decimal digit literals.  */\n#define DEC(n)                   \\\n  ('0' + (((n) / 10000000)%10)), \\\n  ('0' + (((n) / 1000000)%10)),  \\\n  ('0' + (((n) / 100000)%10)),   \\\n  ('0' + (((n) / 10000)%10)),    \\\n  ('0' + (((n) / 1000)%10)),     \\\n  ('0' + (((n) / 100)%10)),      \\\n  ('0' + (((n) / 10)%10)),       \\\n  ('0' +  ((n) % 10))\n\n/* Convert integer to hex digit literals.  */\n#define HEX(n)             \\\n  ('0' + ((n)>>28 & 0xF)), \\\n  ('0' + ((n)>>24 & 0xF)), \\\n  ('0' + ((n)>>20 & 0xF)), \\\n  ('0' + ((n)>>16 & 0xF)), \\\n  ('0' + ((n)>>12 & 0xF)), \\\n  ('0' + ((n)>>8  & 0xF)), \\\n  ('0' + ((n)>>4  & 0xF)), \\\n  ('0' + ((n)     & 0xF))\n\n/* Construct a string literal encoding the version number components. */\n#ifdef COMPILER_VERSION_MAJOR\nchar const info_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',\n  COMPILER_VERSION_MAJOR,\n# ifdef COMPILER_VERSION_MINOR\n  '.', COMPILER_VERSION_MINOR,\n#  ifdef COMPILER_VERSION_PATCH\n   '.', COMPILER_VERSION_PATCH,\n#   ifdef COMPILER_VERSION_TWEAK\n    '.', COMPILER_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct a string literal encoding the internal version number. */\n#ifdef COMPILER_VERSION_INTERNAL\nchar const info_version_internal[] = {\n  'I', 'N', 'F', 'O', ':',\n  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',\n  'i','n','t','e','r','n','a','l','[',\n  COMPILER_VERSION_INTERNAL,']','\\0'};\n#endif\n\n/* Construct a string literal encoding the version number components. */\n#ifdef SIMULATE_VERSION_MAJOR\nchar const info_simulate_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',\n  SIMULATE_VERSION_MAJOR,\n# ifdef SIMULATE_VERSION_MINOR\n  '.', SIMULATE_VERSION_MINOR,\n#  ifdef SIMULATE_VERSION_PATCH\n   '.', SIMULATE_VERSION_PATCH,\n#   ifdef SIMULATE_VERSION_TWEAK\n    '.', SIMULATE_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_platform = \"INFO\" \":\" \"platform[\" PLATFORM_ID \"]\";\nchar const* info_arch = \"INFO\" \":\" \"arch[\" ARCHITECTURE_ID \"]\";\n\n\n\n\n#if defined(_MSC_VER) && defined(_MSVC_LANG)\n#define CXX_STD _MSVC_LANG\n#else\n#define CXX_STD __cplusplus\n#endif\n\nconst char* info_language_dialect_default = \"INFO\" \":\" \"dialect_default[\"\n#if CXX_STD > 201703L\n  \"20\"\n#elif CXX_STD >= 201703L\n  \"17\"\n#elif CXX_STD >= 201402L\n  \"14\"\n#elif CXX_STD >= 201103L\n  \"11\"\n#else\n  \"98\"\n#endif\n\"]\";\n\n/*--------------------------------------------------------------------------*/\n\nint main(int argc, char* argv[])\n{\n  int require = 0;\n  require += info_compiler[argc];\n  require += info_platform[argc];\n#ifdef COMPILER_VERSION_MAJOR\n  require += info_version[argc];\n#endif\n#ifdef COMPILER_VERSION_INTERNAL\n  require += info_version_internal[argc];\n#endif\n#ifdef SIMULATE_ID\n  require += info_simulate[argc];\n#endif\n#ifdef SIMULATE_VERSION_MAJOR\n  require += info_simulate_version[argc];\n#endif\n#if defined(__CRAYXE) || defined(__CRAYXC)\n  require += info_cray[argc];\n#endif\n  require += info_language_dialect_default[argc];\n  (void)argv;\n  return require;\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeOutput.log",
    "content": "The system is: Linux - 4.4.0-87-generic - x86_64\nCompiling the CXX compiler identification source file \"CMakeCXXCompilerId.cpp\" succeeded.\nCompiler: /usr/bin/c++ \nBuild flags: \nId flags:  \n\nThe output was:\n0\n\n\nCompilation of the CXX compiler identification source \"CMakeCXXCompilerId.cpp\" produced \"a.out\"\n\nThe CXX compiler identification is GNU, found in \"/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/3.12.0/CompilerIdCXX/a.out\"\n\nDetermining if the CXX compiler works passed with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_6dd42/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_6dd42.dir/build.make CMakeFiles/cmTC_6dd42.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_6dd42.dir/testCXXCompiler.cxx.o\n/usr/bin/c++     -o CMakeFiles/cmTC_6dd42.dir/testCXXCompiler.cxx.o -c /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx\nLinking CXX executable cmTC_6dd42\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6dd42.dir/link.txt --verbose=1\n/usr/bin/c++       -rdynamic CMakeFiles/cmTC_6dd42.dir/testCXXCompiler.cxx.o  -o cmTC_6dd42 \nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\nDetecting CXX compiler ABI info compiled with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_cb236/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_cb236.dir/build.make CMakeFiles/cmTC_cb236.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o\n/usr/bin/c++     -o CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/lib/python2.7/dist-packages/cmake/data/share/cmake-3.12/Modules/CMakeCXXCompilerABI.cpp\nLinking CXX executable cmTC_cb236\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cb236.dir/link.txt --verbose=1\n/usr/bin/c++      -v -rdynamic CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_cb236 \nUsing built-in specs.\nCOLLECT_GCC=/usr/bin/c++\nCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper\nTarget: x86_64-linux-gnu\nConfigured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu\nThread model: posix\ngcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) \nCOMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/\nLIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/\nCOLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_cb236' '-shared-libgcc' '-mtune=generic' '-march=x86-64'\n /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpuPWyn.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_cb236 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o\nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\nParsed CXX implicit link information from above output:\n  link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]\n  ignore line: [Change Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp]\n  ignore line: []\n  ignore line: [Run Build Command:\"/usr/bin/make\" \"cmTC_cb236/fast\"]\n  ignore line: [/usr/bin/make -f CMakeFiles/cmTC_cb236.dir/build.make CMakeFiles/cmTC_cb236.dir/build]\n  ignore line: [make[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp']\n  ignore line: [Building CXX object CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o]\n  ignore line: [/usr/bin/c++     -o CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/lib/python2.7/dist-packages/cmake/data/share/cmake-3.12/Modules/CMakeCXXCompilerABI.cpp]\n  ignore line: [Linking CXX executable cmTC_cb236]\n  ignore line: [/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cb236.dir/link.txt --verbose=1]\n  ignore line: [/usr/bin/c++      -v -rdynamic CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_cb236 ]\n  ignore line: [Using built-in specs.]\n  ignore line: [COLLECT_GCC=/usr/bin/c++]\n  ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper]\n  ignore line: [Target: x86_64-linux-gnu]\n  ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]\n  ignore line: [Thread model: posix]\n  ignore line: [gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ]\n  ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/]\n  ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/]\n  ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_cb236' '-shared-libgcc' '-mtune=generic' '-march=x86-64']\n  link line: [ /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpuPWyn.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_cb236 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o]\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/collect2] ==> ignore\n    arg [-plugin] ==> ignore\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so] ==> ignore\n    arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] ==> ignore\n    arg [-plugin-opt=-fresolution=/tmp/ccpuPWyn.res] ==> ignore\n    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore\n    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore\n    arg [-plugin-opt=-pass-through=-lc] ==> ignore\n    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore\n    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore\n    arg [--sysroot=/] ==> ignore\n    arg [--build-id] ==> ignore\n    arg [--eh-frame-hdr] ==> ignore\n    arg [-m] ==> ignore\n    arg [elf_x86_64] ==> ignore\n    arg [--hash-style=gnu] ==> ignore\n    arg [--as-needed] ==> ignore\n    arg [-export-dynamic] ==> ignore\n    arg [-dynamic-linker] ==> ignore\n    arg [/lib64/ld-linux-x86-64.so.2] ==> ignore\n    arg [-zrelro] ==> ignore\n    arg [-o] ==> ignore\n    arg [cmTC_cb236] ==> ignore\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o] ==> ignore\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o] ==> ignore\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o] ==> ignore\n    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5]\n    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu]\n    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib]\n    arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]\n    arg [-L/lib/../lib] ==> dir [/lib/../lib]\n    arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]\n    arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]\n    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..]\n    arg [CMakeFiles/cmTC_cb236.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore\n    arg [-lstdc++] ==> lib [stdc++]\n    arg [-lm] ==> lib [m]\n    arg [-lgcc_s] ==> lib [gcc_s]\n    arg [-lgcc] ==> lib [gcc]\n    arg [-lc] ==> lib [c]\n    arg [-lgcc_s] ==> lib [gcc_s]\n    arg [-lgcc] ==> lib [gcc]\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o] ==> ignore\n    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] ==> ignore\n  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5] ==> [/usr/lib/gcc/x86_64-linux-gnu/5]\n  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]\n  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> [/usr/lib]\n  collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]\n  collapse library dir [/lib/../lib] ==> [/lib]\n  collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]\n  collapse library dir [/usr/lib/../lib] ==> [/usr/lib]\n  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> [/usr/lib]\n  implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]\n  implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]\n  implicit fwks: []\n\n\n\n\nDetecting CXX [-std=c++1z] compiler features compiled with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_adfde/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_adfde.dir/build.make CMakeFiles/cmTC_adfde.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_adfde.dir/feature_tests.cxx.o\n/usr/bin/c++    -std=c++1z -o CMakeFiles/cmTC_adfde.dir/feature_tests.cxx.o -c /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_adfde\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_adfde.dir/link.txt --verbose=1\n/usr/bin/c++       -rdynamic CMakeFiles/cmTC_adfde.dir/feature_tests.cxx.o  -o cmTC_adfde \nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\n    Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:1cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:1cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:1cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:1cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:1cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:1cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:1cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:1cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:1cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:1cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++14] compiler features compiled with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_78533/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_78533.dir/build.make CMakeFiles/cmTC_78533.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_78533.dir/feature_tests.cxx.o\n/usr/bin/c++    -std=c++14 -o CMakeFiles/cmTC_78533.dir/feature_tests.cxx.o -c /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_78533\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_78533.dir/link.txt --verbose=1\n/usr/bin/c++       -rdynamic CMakeFiles/cmTC_78533.dir/feature_tests.cxx.o  -o cmTC_78533 \nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\n    Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:1cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:1cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:1cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:1cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:1cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:1cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:1cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:1cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:1cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:1cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++11] compiler features compiled with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_ffc28/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_ffc28.dir/build.make CMakeFiles/cmTC_ffc28.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_ffc28.dir/feature_tests.cxx.o\n/usr/bin/c++    -std=c++11 -o CMakeFiles/cmTC_ffc28.dir/feature_tests.cxx.o -c /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_ffc28\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ffc28.dir/link.txt --verbose=1\n/usr/bin/c++       -rdynamic CMakeFiles/cmTC_ffc28.dir/feature_tests.cxx.o  -o cmTC_ffc28 \nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\n    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:0cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:0cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:0cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:0cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:0cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:0cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:0cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:0cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:0cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++98] compiler features compiled with the following output:\nChange Dir: /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_73e67/fast\"\n/usr/bin/make -f CMakeFiles/cmTC_73e67.dir/build.make CMakeFiles/cmTC_73e67.dir/build\nmake[1]: Entering directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\nBuilding CXX object CMakeFiles/cmTC_73e67.dir/feature_tests.cxx.o\n/usr/bin/c++    -std=c++98 -o CMakeFiles/cmTC_73e67.dir/feature_tests.cxx.o -c /media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_73e67\n/usr/local/lib/python2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/cmTC_73e67.dir/link.txt --verbose=1\n/usr/bin/c++       -rdynamic CMakeFiles/cmTC_73e67.dir/feature_tests.cxx.o  -o cmTC_73e67 \nmake[1]: Leaving directory '/media/ssd/projects/Deformation/Packages/isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/CMakeTmp'\n\n\n    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:0cxx_alias_templates\n    Feature record: CXX_FEATURE:0cxx_alignas\n    Feature record: CXX_FEATURE:0cxx_alignof\n    Feature record: CXX_FEATURE:0cxx_attributes\n    Feature record: CXX_FEATURE:0cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:0cxx_auto_type\n    Feature record: CXX_FEATURE:0cxx_binary_literals\n    Feature record: CXX_FEATURE:0cxx_constexpr\n    Feature record: CXX_FEATURE:0cxx_contextual_conversions\n    Feature record: CXX_FEATURE:0cxx_decltype\n    Feature record: CXX_FEATURE:0cxx_decltype_auto\n    Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:0cxx_default_function_template_args\n    Feature record: CXX_FEATURE:0cxx_defaulted_functions\n    Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:0cxx_delegating_constructors\n    Feature record: CXX_FEATURE:0cxx_deleted_functions\n    Feature record: CXX_FEATURE:0cxx_digit_separators\n    Feature record: CXX_FEATURE:0cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:0cxx_explicit_conversions\n    Feature record: CXX_FEATURE:0cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:0cxx_extern_templates\n    Feature record: CXX_FEATURE:0cxx_final\n    Feature record: CXX_FEATURE:0cxx_func_identifier\n    Feature record: CXX_FEATURE:0cxx_generalized_initializers\n    Feature record: CXX_FEATURE:0cxx_generic_lambdas\n    Feature record: CXX_FEATURE:0cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:0cxx_inline_namespaces\n    Feature record: CXX_FEATURE:0cxx_lambdas\n    Feature record: CXX_FEATURE:0cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:0cxx_local_type_template_args\n    Feature record: CXX_FEATURE:0cxx_long_long_type\n    Feature record: CXX_FEATURE:0cxx_noexcept\n    Feature record: CXX_FEATURE:0cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:0cxx_nullptr\n    Feature record: CXX_FEATURE:0cxx_override\n    Feature record: CXX_FEATURE:0cxx_range_for\n    Feature record: CXX_FEATURE:0cxx_raw_string_literals\n    Feature record: CXX_FEATURE:0cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:0cxx_return_type_deduction\n    Feature record: CXX_FEATURE:0cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:0cxx_rvalue_references\n    Feature record: CXX_FEATURE:0cxx_sizeof_member\n    Feature record: CXX_FEATURE:0cxx_static_assert\n    Feature record: CXX_FEATURE:0cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:0cxx_thread_local\n    Feature record: CXX_FEATURE:0cxx_trailing_return_types\n    Feature record: CXX_FEATURE:0cxx_unicode_literals\n    Feature record: CXX_FEATURE:0cxx_uniform_initialization\n    Feature record: CXX_FEATURE:0cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:0cxx_user_literals\n    Feature record: CXX_FEATURE:0cxx_variable_templates\n    Feature record: CXX_FEATURE:0cxx_variadic_macros\n    Feature record: CXX_FEATURE:0cxx_variadic_templates\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/cmake.check_cache",
    "content": "# This file is generated by cmake for dependency checking of the CMakeCache.txt file\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/build/CMakeFiles/feature_tests.cxx",
    "content": "\n  const char features[] = {\"\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_aggregate_default_initializers\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alias_templates\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alignas\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alignof\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_attributes\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_attribute_deprecated\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_auto_type\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_binary_literals\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_constexpr\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_contextual_conversions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype_auto\\n\"\n\"CXX_FEATURE:\"\n#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype_incomplete_return_types\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_default_function_template_args\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_defaulted_functions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_defaulted_move_initializers\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_delegating_constructors\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_deleted_functions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_digit_separators\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_enum_forward_declarations\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_explicit_conversions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_extended_friend_declarations\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_extern_templates\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_final\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_func_identifier\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_generalized_initializers\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_generic_lambdas\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_inheriting_constructors\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_inline_namespaces\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_lambdas\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_lambda_init_captures\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_local_type_template_args\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_long_long_type\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_noexcept\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_nonstatic_member_init\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_nullptr\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_override\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_range_for\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_raw_string_literals\\n\"\n\"CXX_FEATURE:\"\n#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_reference_qualified_functions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_relaxed_constexpr\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_return_type_deduction\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_right_angle_brackets\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_rvalue_references\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_sizeof_member\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_static_assert\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_strong_enums\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_template_template_parameters\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_thread_local\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_trailing_return_types\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_unicode_literals\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_uniform_initialization\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_unrestricted_unions\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_user_literals\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variable_templates\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variadic_macros\\n\"\n\"CXX_FEATURE:\"\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variadic_templates\\n\"\n\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/doc/Release_Notes.txt",
    "content": "------------------------------------------------------------------------\n                           Parallel STL \n------------------------------------------------------------------------\n\nSystem Requirements\n-------------------\n\nParallel STL is available as a part of Intel(R) Parallel Studio XE 2018\n    and Intel(R) System Studio 2018.\n\n    Parallel STL distributions are validated and officially supported\nfor the hardware, software, operating systems and compilers listed here.\n\nHardware - Recommended\n\n    Microsoft* Windows* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    Linux* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    macOS* Systems\n        Intel(R) Core(TM) processor family\n    Android* Systems\n        Intel(R) Atom(TM) processor family\n\nHardware - Supported\n\n    Intel(R) Pentium(R) 4 processor family\n    Intel(R) Xeon Phi(TM) coprocessor\n    Intel(R) Atom(TM) processor family\n    Non Intel(R) processors compatible with the above processors\n\nSoftware - Minimum Requirements\n\n    Supported operating system (see below)\n    Supported compiler (see below)\n\nSoftware - Recommended\n\n    Intel(R) Parallel Studio XE 2017, 2018\n    Intel(R) System Studio 2017, 2018\n\nSoftware - Supported Operating Systems\n\n    Systems with Microsoft* Windows* operating systems\n        Microsoft* Windows* 10\n        Microsoft* Windows* 8.1\n        Microsoft* Windows* 7 SP1\n        Microsoft* Windows* Server 2016\n        Microsoft* Windows* Server 2012 R2\n        Microsoft* Windows* Server 2008 R2 SP1\n        Windows* Embedded 10\n        Windows* Embedded 8.1\n    Systems with Linux* operating systems\n        CentOS 7.1\n        Debian* 8, 9\n        Fedora* 24, 25, 26\n        Red Hat* Enterprise Linux* 7\n        SuSE* Linux* Enterprise Server 12\n        Ubuntu* 14.04 LTS, 16.04 LTS, 17.04\n        Yocto 2.2, 2.3\n    Systems with OS X* and macOS* operating systems\n        OS X* 10.10, 10.11\n        macOS* 10.12, 10.13\n    Systems with Android* operating systems\n        Android* 5.x, 6.x, 7.x, 8.x\n\nSoftware - Supported Compilers\n\n    Intel(R) C++ Compiler 16, 17 and 18 version\n        Note: Using Intel C++ Compiler 18.0 might result\n        in better performance for many of Parallel STL algorithms,\n        comparing to previous compiler versions.\n    Microsoft* Visual C++ 14.0 (Microsoft* Visual Studio* 2015,\n        Windows* OS only)\n    Microsoft* Visual C++ 14.1 (Microsoft* Visual Studio* 2017,\n        Windows* OS only)\n    Microsoft* Windows* Software Development Kit for Windows* 10\n    For each supported Linux* operating system, the standard gcc\n        version provided with that operating system is supported\n            GNU Compilers (gcc) 4.8 - 7.1\n    Clang* 3.3 - 3.8\n    Xcode* 6.3 - 9.1\n    Android* NDK r13 - r16\n\nKnown Issues or limitations\n\n    unseq and par_unseq policies only have effect with compilers that\n        support '#pragma omp simd' or '#pragma simd'\n    Parallel and vector execution is only supported for a subset of\n        algorithms if random access iterators are provided, while for\n        the rest execution will remain serial.\n    Depending on a compiler, zip_iterator may not work with\n        unseq and par_unseq policies.\n\n------------------------------------------------------------------------\n\nIntel, the Intel logo, Intel Core, Intel Atom, Xeon, Intel Xeon Phi,\nand Pentium are trademarks of Intel Corporation in the U.S. and/or\nother countries.\n\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/convex_hull/Makefile",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=convex_hull.exe\nARGS=\n\nCXXFLAGS += -D__PSTL_USE_TBB -std=c++11\n\n# Set by default icc as C++ compiler if it's present\nifneq (,$(shell which icc 2>/dev/null))\nCXX = icc\nendif # which icc\n\nifeq ($(CXX),icc)\nCXXFLAGS += -qopenmp-simd\nifneq (, $(filter $(target), mic))\nCXXFLAGS += -mmic\nelse\nCXXFLAGS += -xHOST\nendif # target is mic or host?\nendif # icc?\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG=1 $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run: test\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/convex_hull/convex_hull.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains the Parallel STL-based implementation of quickhull algorithm.\n    Quickhull algorithm description:\n    1. Initial phase\n      1) Find two points that guaranteed to belong to the convex hull. Min and max points in X can be used for it.\n      2) Divide the initial set of points in two subsets by the line formed by two points from previous step.\n         This subset will be processed recursively.\n\n    2. Iteration Phase\n      1) Divide current subset by dividing line [p1,p2] into right and left subsets.\n      2) New point (p) of the convex hull is found as farthest point of right subset from the dividing line.\n      3) If the right subset has more than 1 point, repeat the iteration phase with the right subset and dividing lines [p1,p] and [p,p2].\n\n    The implementation based on std::copy_if, std::max_element and std::minmax_element algorithms of Parallel STL.\n    Each of the algorithms use par_unseq policy. In order to get effect of the policy usage problem size should be big enough.\n    By default problem size was set as 5M points. With point set with less than 500K points par_unseq policy could be inefficient.\n    Correctness of the convex hull is checked by std::any_of algorithm with counting iterators.\n*/\n\n#include <chrono>\n#include <vector>\n#include <fstream>\n#include <pstl/algorithm>\n#include <pstl/numeric>\n#include <pstl/execution>\n#include <pstl/iterators.h>\n\n#include \"utils.h\"\n\ntypedef util::point<double> point_t;\ntypedef std::vector< point_t > pointVec_t;\nconst size_t grain_size = 500000;\n\ntemplate<typename Policy, typename Iterator>\nvoid find_hull_points(Policy exec, Iterator first, Iterator last, pointVec_t &H, point_t p1, point_t p2);\n\n//Iteration Phase based on the divide and conquer technique\ntemplate<typename Policy, typename Iterator>\nvoid divide_and_conquer(Policy exec, Iterator first, Iterator last, pointVec_t &H, point_t p1, point_t fp, point_t p2) {\n    pointVec_t H1;\n    //decomposes the work and combines the results\n    if (first - last > grain_size){ //for small set size parallel policy could be inefficient\n        find_hull_points(exec, first, last, H, p1, fp);\n        find_hull_points(exec, first, last, H1, fp, p2);\n    }\n    else {\n        find_hull_points(pstl::execution::unseq, first, last, H, p1, fp);\n        find_hull_points(pstl::execution::unseq, first, last, H1, fp, p2);\n    }\n    H.insert(H.end(), H1.cbegin(), H1.cend());\n}\n\n//Find points of the convex hull on right sides of the segments [p1, p2]\ntemplate<typename Policy, typename Iterator>\nvoid find_hull_points(Policy exec, Iterator first, Iterator last, pointVec_t &H, point_t p1, point_t p2) {\n\n    pointVec_t P_reduced(last - first);\n\n    //Find points from the range [first, last-1] that are on the right side of the segment [p1,p2]\n    Iterator end = std::copy_if(exec, first, last, P_reduced.begin(),\n        [&p1, &p2](const point_t& pnt) {\n        return cross_product(p1, p2, pnt) > 0;\n    });\n\n    if ((end - P_reduced.cbegin()) < 2) {\n        //Add points into the hull\n        H.push_back(p1);\n        H.insert(H.end(), P_reduced.cbegin(), end);\n    }\n    else {\n        //Find the farthest point from the segment [p1,p1], it will be in the convex hull\n        auto far_point = *std::max_element(exec, P_reduced.cbegin(), end,\n            [&p1, &p2](const point_t & pnt1, const point_t & pnt2) {\n            double how_far1 = cross_product(p1, p2, pnt1);\n            double how_far2 = cross_product(p1, p2, pnt2);\n            return how_far1 == how_far2 ? pnt1 < pnt2 : how_far1 < how_far2;\n        });\n\n        //Repeat for segments [p1, far_point] and [far_point, p2] with points from [P_reduced.cbegin(), end-1]\n        divide_and_conquer(exec, P_reduced.cbegin(), end, H, p1, far_point, p2);\n    }\n}\n\n//Quickhull algorithm\n//The algorihm based on the divide and conquer technique\nvoid quickhull(const pointVec_t &points, pointVec_t &hull) {\n    if (points.size() < 2) {\n        hull.insert(hull.end(), points.cbegin(), points.cend());\n        return;\n    }\n    //Find left and right most points, they will be in the convex hull\n    auto minmaxx = std::minmax_element(pstl::execution::par_unseq, points.cbegin(), points.cend());\n\n    pointVec_t H;\n    point_t p1 = *minmaxx.first;\n    point_t p2 = *minmaxx.second;\n    //Divide the set of points into two subsets, which will be processed recursively\n    divide_and_conquer(pstl::execution::par_unseq, points.cbegin(), points.cend(), hull, p1, p2, p1);\n}\n\n// Check if a polygon is convex\nbool is_convex(const pointVec_t & points) {\n    return std::all_of(pstl::execution::par_unseq,\n        pstl::counting_iterator<size_t>(size_t(0)),\n        pstl::counting_iterator<size_t>(points.size()),\n        [&points](size_t i) {\n            point_t p0(points[i]);\n            point_t p1(points[(i + 1) % points.size()]);\n            point_t p2(points[(i + 2) % points.size()]);\n            return (cross_product(p0, p1, p2) < 0);\n    });\n}\n\nint main(int argc, char* argv[]) {\n\n    const size_t numberOfPoints = 5000000;\n    const std::string output_file(\"ConvexHull.csv\");\n\n    pointVec_t points(numberOfPoints);\n    pointVec_t hull;\n\n    //initialize set of points\n    std::generate(pstl::execution::par, points.begin(), points.end(), util::random_point<double>);\n    std::cout << \"Points were initialized. Number of the points \" << points.size() << std::endl;\n\n    using ms = std::chrono::milliseconds;\n\n    auto tm_start = std::chrono::high_resolution_clock::now();\n    //execution of the quickhull algorithm\n    quickhull(points, hull);\n    auto tm_end = std::chrono::high_resolution_clock::now();\n\n    std::cout << \"Computational time \" << std::chrono::duration_cast<ms> (tm_end - tm_start).count() << \"ms\"\n        << \"  Points in the hull: \" << hull.size() << \"  The convex hull is \" << (is_convex(hull) ? \"correct\" : \"incorrect\") << std::endl;\n\n    //writing the results\n    std::ofstream fout(output_file);\n    if (fout.is_open()) {\n        for (auto p : hull)\n            fout << p << std::endl;\n        std::cout << \"The convex hull has been stored to a file \" << output_file << std::endl;\n    }\n    else {\n        std::cout << \"Cannot open a file \" << output_file << \" to store result\" << std::endl;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/convex_hull/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Parallel STL. Convex hull sample</title>\n</head>\n<body>\n\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Parallel STL.<br>convex_hull sample</h1>\n\t</div>\n\n\t<p>\n\t\tThis example demonstrates computing the convex_hull of a set of points on the plane based on the quickhull algorithm.\n\t\tSee <a href=\"https://en.wikipedia.org/wiki/Quickhull\">https://en.wikipedia.org/wiki/Quickhull</a> for more information.\n\t<br><br>\n\t\tThe example generates a set of random 2D points by <code>std::generate</code>. Then performs the quickhull algorithm on it.\n\t\tLeft and right most points are found by <code>std::minmax_element</code>.\n\t\tOn each step points on the right side of oriented line are copied by <code>std::copy_if</code> and the farthest point is found by <code>std::max_element</code>.\n\t\tCorrectness of the convex hull is checked by <code>std::any_of</code> algorithm with counting iterators.\n\t\tThe output of the example application is a CSV file with points of the convex hull.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up-to-date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/parallel-stl-release-notes\">release notes</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"convex_hull.cpp\">convex_hull.cpp</a>\n\t\t\t\t<dd>Implementation of the quickhull algorithm based on Parallel STL.\n\t\t\t\t<dt><a href=\"utils.h\">utils.h</a>\n\t\t\t\t<dd>Utility code: template <code>point</code>, random points generator.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains a Microsoft* Visual Studio* IDE workspace for building and running the example (Windows* OS systems only).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n       <div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>To use Parallel STL, set up the environment by calling the <i><code>pstlvars</code></i> script (if you use a command line) or set the <code>%PSTLROOT%</code> \n                        \tenvironment variable pointing to the <code>&lt;pstl_installdir&gt;</code> folder (in Microsoft* Visual Studio* IDE on Windows* OS)\n\t\t\t\tand add the <code>&lt;pstl_installdir&gt;/pstl/include</code> folder to the compiler include paths.\n                        </p>\n\t\t\t<p>Use the <a href=\"Makefile\">Makefile</a> to build the example on the command line.</p>\n\t\t\t<p>Use the <a href=\"msvs/convex_hull.sln\">msvs/convex_hull.sln</a> project file to build the example in the Microsoft* Visual Studio* IDE (Windows* systems only).</p>\n\t\t</div>\n\t</div>\n\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>convex_hull</tt> or <tt>convex_hull.exe</tt>\n                <dd>Outputs the result convex hull <tt>ConvexHull.csv</tt>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2017, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/convex_hull/utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <random>\n#include <string>\n#include <iostream>\n\nnamespace util {\n\n    template <typename T>\n    struct point {\n        T x;\n        T y;\n        point() {}\n        point(T xx, T yy) : x(xx), y(yy) {}\n        point(const point& p) : x(p.x), y(p.y) {}\n\n        bool operator ==(const point &p2) const {\n            return (this->x == p2.x && this->y == p2.y);\n        }\n        bool operator !=(const point &p2) const {\n            return !(*(this) == p2);\n        }\n        bool operator < (const point & p2) const {\n            return (this->x == p2.x ? this->y < p2.y : this->x < p2.x);\n        }\n    };\n\n    template <typename T>\n    T cross_product(const point<T>& start, const point<T>& end1, const point<T>& end2) {\n        return ((end1.x - start.x)*(end2.y - start.y) - (end2.x - start.x)*(end1.y - start.y));\n    }\n\n    template <typename T>\n    std::ostream& operator <<(std::ostream& ostr, point<T> _p) {\n        return ostr << _p.x << ',' << _p.y;\n    }\n\n    template <typename T>\n    std::istream& operator >>(std::istream& istr, point<T> _p) {\n        return istr >> _p.x >> _p.y;\n    }\n\n    // The variable is declared out of the scope of random_point() to avoid code generation issues with some compilers\n    thread_local static std::default_random_engine rd;\n\n    template <typename T>\n    point<T> random_point() {\n        const int rand_max = 10000;\n        std::uniform_int_distribution<int> dist(-rand_max, rand_max);\n        T x = dist(rd);\n        T y = dist(rd);\n        const double r = x*x + y*y;\n        if (r > rand_max) {\n            x /= r;\n            y /= r;\n        }\n        return point<T>(x, y);\n    }\n\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/dot_product/Makefile",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=dot_product.exe\nARGS=\n\nCXXFLAGS += -D__PSTL_USE_TBB -std=c++11\n\n# Set by default icc as C++ compiler if it's present\nifneq (,$(shell which icc 2>/dev/null))\nCXX = icc\nendif # which icc\n\nifeq ($(CXX),icc)\nCXXFLAGS += -qopenmp-simd\nifneq (, $(filter $(target), mic))\nCXXFLAGS += -mmic\nelse\nCXXFLAGS += -xHOST\nendif # target is mic or host?\nendif # icc?\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG=1 $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run: test\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/dot_product/dot_product.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains the implementation of dot product based on std::transform_reduce\n*/\n\n#include <vector>\n#include <random>\n#include <iostream>\n#include <pstl/algorithm>\n#include <pstl/numeric>\n#include <pstl/execution>\n\ndouble random_number_generator() {\n    // usage of thread local random engines allows running the generator in concurrent mode\n    thread_local static std::default_random_engine rd;\n    std::uniform_real_distribution<double> dist(0, 1);\n    return dist(rd);\n}\n\nint main(int argc, char* argv[]) {\n\n    const size_t size = 10000000;\n\n    std::vector<double> v1(size), v2(size);\n\n    //initialize vectors with random numbers\n    std::generate(pstl::execution::par, v1.begin(), v1.end(), random_number_generator);\n    std::generate(pstl::execution::par, v2.begin(), v2.end(), random_number_generator);\n\n    //the dot product calculation\n    double res = std::transform_reduce(pstl::execution::par_unseq, v1.cbegin(), v1.cend(), v2.cbegin(), .0,\n        std::plus<double>(), std::multiplies<double>());\n\n    std::cout << \"The dot product is: \" << res << std::endl;\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/dot_product/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td,\n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Parallel STL. Dot product sample</title>\n</head>\n<body>\n\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Parallel STL.<br>Dot_product sample</h1>\n\t</div>\n\n\t<p>\n\t\tThis example demonstrates computing the dot product of two vectors.\n\t\tSee <a href=\"https://en.wikipedia.org/wiki/Dot_product\">Dot_product</a> for more information.\n\t<br><br>\n\t\tThe example computes a dot product (<code>std::transform_reduce</code>) of a couple of vectors filled randomly by floating numbers (<code>std::generate</code>).\n                The output of the example is the dot product of the couple of vectors.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up-to-date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/parallel-stl-release-notes\">release notes</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"dot_product.cpp\">dot_product.cpp</a>\n\t\t\t\t<dd>Implementation of the dot product based on Parallel STL.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains a Microsoft* Visual Studio* IDE workspace for building and running the example (Windows* OS systems only).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n       <div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>To use Parallel STL, set up the environment by calling the <i><code>pstlvars</code></i> script (if you use a command line) or set the <code>%PSTLROOT%</code> \n                        \tenvironment variable pointing to the <code>&lt;pstl_installdir&gt;</code> folder (in Microsoft* Visual Studio* IDE on Windows* OS)\n\t\t\t\tand add the <code>&lt;pstl_installdir&gt;/pstl/include</code> folder to the compiler include paths.\n\t\t\t</p>\n\t\t\t<p>Use the <a href=\"Makefile\">Makefile</a> to build the example on the command line.</p>\n\t\t\t<p>Use the <a href=\"msvs/dot_product.sln\">msvs/dot_product.sln</a> project file to build the example in the Microsoft* Visual Studio* IDE (Windows* systems only).</p>\n\t\t</div>\n\t</div>\n\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>dot_product</tt> or <tt>dot_product.exe</tt>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others.\n\t\t\t\t<br>&copy; 2017, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/gamma_correction/Makefile",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=gamma_correction.exe\nARGS=\n\nCXXFLAGS += -D__PSTL_USE_TBB -std=c++11\n\n# Set by default icc as C++ compiler if it's present\nifneq (,$(shell which icc 2>/dev/null))\nCXX = icc\nendif # which icc\n\nifeq ($(CXX),icc)\nCXXFLAGS += -qopenmp-simd\nifneq (, $(filter $(target), mic))\nCXXFLAGS += -mmic\nelse\nCXXFLAGS += -xHOST\nendif # target is mic or host?\nendif # icc?\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG=1 $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run: test\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/gamma_correction/gamma_correction.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <cmath>\n#include <cassert>\n\n#include \"pstl/algorithm\"\n#include \"pstl/execution\"\n#include \"utils.h\"\n\n//! fractal class\nclass fractal {\npublic:\n    //! Constructor\n    fractal(int x, int y): my_size{x, y} {}\n    //! One pixel calculation routine\n    double calcOnePixel(int x, int y);\n\nprivate:\n    //! Size of the fractal area\n    const int my_size[2];\n    //! Fractal properties\n    double cx = -0.7436;\n    const double cy = 0.1319;\n    const double magn = 2000000.0;\n    const int max_iter = 1000;\n};\n\ndouble fractal::calcOnePixel(int x0, int y0) {\n    double fx0 = double(x0) - double(my_size[0]) / 2;\n    double fy0 = double(y0) - double(my_size[1]) / 2;\n    fx0 = fx0 / magn + cx;\n    fy0 = fy0 / magn + cy;\n\n    double res = 0, x = 0, y = 0;\n    for(int iter = 0; x*x + y*y <= 4 && iter < max_iter; ++iter) {\n        const double val = x*x - y*y + fx0;\n        y = 2*x*y + fy0, x = val;\n        res += exp(-sqrt(x*x+y*y));\n    }\n\n    return res;\n}\n\ntemplate<typename Rows>\nvoid applyGamma(Rows& image, double g) {\n    typedef decltype(image[0]) Row;\n    typedef decltype(image[0][0]) Pixel;\n    const int w = image[1] - image[0];\n\n    //execution STL algorithms with execution policies - pstl::execution::par and pstl::execution::unseq\n    std::for_each(pstl::execution::par, image.begin(), image.end(), [g, w](Row& r) {\n        std::transform(pstl::execution::unseq, r, r+w, r, [g](Pixel& p) {\n            double v = 0.3*p.bgra[2] + 0.59*p.bgra[1] + 0.11*p.bgra[0]; //RGB Luminance value\n            assert(v > 0);\n            double res = pow(v, g);\n            if(res > 255)\n                res = 255;\n            return image::pixel(res, res, res);\n        });\n    });\n}\n\nint main(int argc, char* argv[]) {\n\n    //create a fractal image\n    image img(800, 800);\n    fractal fr(img.width(), img.height());\n    img.fill([&fr](int x, int y) { return fr.calcOnePixel(x, y); });\n    img.write(\"image_1.bmp\");\n\n    //apply gamma\n    applyGamma(img.rows(), 1.1);\n\n    //write result to disk\n    img.write(\"image_1_gamma.bmp\");\n    std::cout<<\"done\"<<std::endl;\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/gamma_correction/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Parallel STL. Gamma_correction sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Parallel STL.<br>Gamma_correction sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis example demonstrates <i>gamma correction</i> &mdash; a nonlinear operation used to encode and decode the luminance of each image pixel.\n\t\tSee <a href=\"https://en.wikipedia.org/wiki/Gamma_correction\">https://en.wikipedia.org/wiki/Gamma_correction</a> for more information.\n\t<br><br>\n\t\tThe example creates a fractal image in memory and performs gamma correction on it.\n\t\tThe output of the example application is a BMP image with corrected luminance.\n\t<br><br>\n\t\tThis example uses C++11 lambda expressions. Specifying a compiler option such as <code>-std=c++11</code> or similar might be necessary in order to build the example.\n\t\tFor more information, please refer to the documentation for the compiler you use.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up-to-date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/parallel-stl-release-notes\">release notes</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"gamma_correction.cpp\">gamma_correction.cpp</a>\n\t\t\t\t<dd>Implementation of the gamma correction algorithm based on Parallel STL.\n\t\t\t\t<dt><a href=\"utils.cpp\">utils.cpp</a>\n\t\t\t\t<dd>Utility code (class <code>image</code>) to write an image to disk as a BMP file.\n\t\t\t\t<dt><a href=\"utils.h\">utils.h</a>\n\t\t\t\t<dd>Declaration of the <code>image</code> class.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains a Microsoft* Visual Studio* IDE workspace for building and running the example (Windows* OS systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a> \n\t\t\t\t<dd>Contains a Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n       <div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>To use Parallel STL, set up the environment by calling the <i><code>pstlvars</code></i> script (if you use a command line) or set the <code>%PSTLROOT%</code> \n\t\t\t\tenvironment variable pointing to the <code>&lt;pstl_installdir&gt;</code> folder (in Microsoft* Visual Studio* IDE on Windows* OS)\n\t\t\t\tand add the <code>&lt;pstl_installdir&gt;/pstl/include</code> folder to the compiler include paths.\n\t\t\t</p>\n\t\t\t<p>Use the <a href=\"Makefile\">Makefile</a> to build the example on the command line.</p>\n\t\t\t<p>Use the <a href=\"msvs/gamma_correction.sln\">msvs/gamma_correction.sln</a> project file to build the example in the Microsoft* Visual Studio* IDE (Windows* systems only).</p>\n\t\t</div>\n\t</div> \n\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>gamma_correction</tt> or <tt>gamma_correction.exe</tt>\n                <dd>Outputs the original fractal image <tt>image_1.bmp</tt> and the fractal image with corrected luminance <tt>image_1_gamma.bmp</tt>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2017, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/gamma_correction/utils.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <fstream>\n#include <vector>\n#include <cassert>\n#include \"utils.h\"\n\nvoid image::reset(int w, int h) {\n\n    if(w <= 0 || h <= 0) {\n        std::cout << \"Warning: Invalid image size.\\n\";\n        return;\n    }\n\n    my_width = w, my_height = h;\n\n    //reset raw data\n    my_data.resize(my_width*my_height);\n    my_rows.resize(my_height);\n\n    //reset rows\n    for(int i = 0; i < my_rows.size(); ++i)\n        my_rows[i] = &my_data[0]+i*my_width;\n\n    my_padSize = (4-(w*sizeof(my_data[0]))%4)%4;\n    int sizeData = w*h*sizeof(my_data[0]) + h*my_padSize;\n    int sizeAll = sizeData + sizeof(file) + sizeof(info);\n\n    //BITMAPFILEHEADER\n    file.sizeRest = 14;\n    file.type = 0x4d42; //same as 'BM' in ASCII\n    file.size = sizeAll;\n    file.reserved = 0;\n    file.offBits = 54;\n\n    //BITMAPINFOHEADER\n    info.size = 40;\n    info.width = w;\n    info.height = h;\n    info.planes = 1;\n    info.bitCount = 32;\n    info.compression = 0;\n    info.sizeImage = sizeData;\n    info.yPelsPerMeter = 0;\n    info.xPelsPerMeter = 0;\n    info.clrUsed = 0;\n    info.clrImportant = 0;\n}\n\nimage::image(int w, int h) {\n    reset(w, h);\n}\n\nvoid image::fill(std::uint8_t r, std::uint8_t g, std::uint8_t b, int x, int y) {\n    if(my_data.empty())\n        return;\n\n    assert(my_data.size() == my_width*my_height);\n    assert(my_rows.size() == my_height);\n\n    if(x < 0 && y < 0) //fill whole image\n        std::fill(my_data.begin(), my_data.end(), pixel(b, g, r));\n    else {\n        auto& bgra = my_data[my_width*x + y].bgra;\n        bgra[3] = 0, bgra[2] = r, bgra[1] = g, bgra[0] = b;\n    }\n}\n\nvoid image::write(const char* fname) const {\n\n    if(my_data.empty()) {\n        std::cout << \"Warning: An image is empty.\\n\";\n        return;\n    }\n\n    assert(my_width > 0 && my_height > 0);\n\n    std::ofstream stream(fname);\n\n    assert(file.sizeRest == sizeof(file)-sizeof(file.sizeRest));\n    stream.write((char*)&file.type, file.sizeRest);\n\n    assert(info.size == sizeof(info));\n    stream.write((char*)&info, info.size);\n\n    assert(info.sizeImage == my_data.size() * sizeof(my_data[0]));\n    stream.write((char*)my_data[0].bgra, my_data.size()*sizeof(my_data[0]));\n}\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/examples/gamma_correction/utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <vector>\n#include <algorithm>\n\nclass image {\npublic:\n    union pixel {\n        std::uint8_t bgra[4];\n        std::uint32_t value;\n        pixel() {}\n        template <typename T> pixel(T b, T g, T r) {\n            bgra[0] = (std::uint8_t)b, bgra[1] = (std::uint8_t)g, bgra[2] = (std::uint8_t)r, bgra[3] = 0;\n        }\n    };\npublic:\n    image(int w = 1920, int h = 1080);\n\n    int width() const { return my_width; }\n    int height() const { return my_height; }\n\n    void write(const char* fname) const;\n    void fill(std::uint8_t r, std::uint8_t g, std::uint8_t b, int x = -1, int y = -1);\n\n    template <typename F>\n    void fill(F f) {\n\n        if(my_data.empty())\n            reset(my_width, my_height);\n\n        int i = -1;\n        int w = this->my_width;\n        std::for_each(my_data.begin(), my_data.end(), [&i, w, f](image::pixel& p) {\n            ++i;\n            int x = i / w, y = i % w;\n            auto val = f(x, y);\n            if(val > 255)\n                val = 255;\n            p = image::pixel(val, val, val);\n        });\n    }\n\n    std::vector<pixel*>& rows() { return my_rows; }\n\nprivate:\n    void reset(int w, int h);\n\nprivate:\n    //don't allow copying\n    image(const image&);\n    void operator=(const image&);\n\nprivate:\n    int my_width;\n    int my_height;\n    int my_padSize;\n\n    std::vector<pixel> my_data; //raw raster data\n    std::vector<pixel*> my_rows;\n\n    //data structures 'file' and 'info' are using to store an image as BMP file\n    //for more details see https://en.wikipedia.org/wiki/BMP_file_format\n    using BITMAPFILEHEADER = struct {\n        std::uint16_t sizeRest; // field is not from specification,\n                            // was added for alignemt. store size of rest of the fields\n        std::uint16_t type;\n        std::uint32_t size;\n        std::uint32_t reserved;\n        std::uint32_t offBits;\n    };\n    BITMAPFILEHEADER file;\n\n    using BITMAPINFOHEADER = struct {\n        std::uint32_t size;\n        std::int32_t width;\n        std::int32_t height;\n        std::uint16_t planes;\n        std::uint16_t bitCount;\n        std::uint32_t compression;\n        std::uint32_t sizeImage;\n        std::int32_t xPelsPerMeter;\n        std::int32_t yPelsPerMeter;\n        std::uint32_t clrUsed;\n        std::uint32_t clrImportant;\n    };\n    BITMAPINFOHEADER info;\n};\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/algorithm",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_algorithm\n#define __PSTL_algorithm\n\n#include \"internal/pstl_config.h\"\n\n#if __PSTL_EXECUTION_POLICIES_DEFINED\n// If <execution> has already been included, pull in implementations\n#include \"internal/glue_algorithm_impl.h\"\n#else\n// Otherwise just pull in forward declarations\n#include \"internal/glue_algorithm_defs.h\"\n#define __PSTL_ALGORITHM_FORWARD_DECLARED 1\n#endif\n\n#endif /* __PSTL_algorithm */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/execution",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_execution\n#define __PSTL_execution\n\n#include \"internal/pstl_config.h\"\n#include \"internal/execution_defs.h\"\n\n#define __PSTL_EXECUTION_POLICIES_DEFINED 1\n\n#if __PSTL_ALGORITHM_FORWARD_DECLARED\n    #include \"internal/glue_algorithm_impl.h\"\n#endif\n\n#if __PSTL_MEMORY_FORWARD_DECLARED\n    #include \"internal/glue_memory_impl.h\"\n#endif\n\n#if __PSTL_NUMERIC_FORWARD_DECLARED\n    #include \"internal/glue_numeric_impl.h\"\n#endif\n\n#if __PSTL_CPP17_EXECUTION_POLICIES_PRESENT\n    __PSTL_PRAGMA_MESSAGE_POLICIES(\"The <Parallel STL> execution policies are defined in the namespace pstl::execution\")\n#else\n    #include \"internal/glue_execution_defs.h\"\n    __PSTL_PRAGMA_MESSAGE_POLICIES(\"The <Parallel STL> execution policies are injected into the standard namespace std::execution\")\n#endif\n\n#endif /* __PSTL_execution */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/algorithm_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_algorithm_impl_H\n#define __PSTL_algorithm_impl_H\n\n#include <iterator>\n#include <type_traits>\n#include <utility>\n#include <functional>\n#include <algorithm>\n\n#include \"execution_impl.h\"\n#include \"memory_impl.h\"\n#include \"unseq_backend_simd.h\"\n#include \"bricks_impl.h\"\n\n#if __PSTL_USE_PAR_POLICIES\n    #include \"parallel_backend.h\"\n#endif\n#include \"parallel_impl.h\"\n\nnamespace pstl {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// any_of\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator, class Pred>\nbool brick_any_of( const InputIterator first, const InputIterator last, Pred pred, /*is_vector=*/std::false_type ) noexcept {\n    return std::any_of(first,last,pred);\n};\n\ntemplate<class InputIterator, class Pred>\nbool brick_any_of( const InputIterator first, const InputIterator last, Pred pred, /*is_vector=*/std::true_type ) noexcept {\n    return unseq_backend::simd_or( first, last-first, pred );\n};\n\n\ntemplate<class InputIterator, class Pred, class IsVector>\nbool pattern_any_of( InputIterator first, InputIterator last, Pred pred, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_any_of(first,last,pred,is_vector);\n}\n\ntemplate<class InputIterator, class Pred, class IsVector>\nbool pattern_any_of( InputIterator first, InputIterator last, Pred pred, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        return internal::parallel_or( first, last,\n            [pred, is_vector](InputIterator i, InputIterator j) {return brick_any_of(i, j, pred, is_vector);} );\n    });\n}\n\n\n// [alg.foreach]\n// for_each_n with no policy\n\ntemplate<class InputIterator, class Size, class Function>\nInputIterator for_each_n_it_serial(InputIterator first, Size n, Function f) {\n    for(; n > 0; ++first, --n)\n        f(first);\n    return first;\n}\n\n//------------------------------------------------------------------------\n// walk1 (pseudo)\n//\n// walk1 evaluates f(x) for each dereferenced value x drawn from [first,last)\n//------------------------------------------------------------------------\ntemplate<class Iterator, class Function>\nvoid brick_walk1( Iterator first, Iterator last, Function f, /*vector=*/std::false_type ) noexcept {\n    std::for_each(first, last, f);\n}\n\ntemplate<class Iterator, class Function>\nvoid brick_walk1( Iterator first, Iterator last, Function f, /*vector=*/std::true_type ) noexcept {\n    unseq_backend::simd_walk_1(first, last-first, f);\n}\n\n\ntemplate<class Iterator, class Function, class IsVector>\nvoid pattern_walk1( Iterator first, Iterator last, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    brick_walk1( first, last, f, is_vector );\n}\n\ntemplate<class Iterator, class Function, class IsVector>\nvoid pattern_walk1( Iterator first, Iterator last, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    except_handler([=]() {\n        par_backend::parallel_for( first, last, [f,is_vector](Iterator i, Iterator j) {\n            brick_walk1(i,j,f,is_vector);\n        });\n    });\n}\n\ntemplate<class Iterator, class Brick>\nvoid pattern_walk_brick( Iterator first, Iterator last, Brick brick, /*parallel=*/std::false_type ) noexcept {\n    brick(first, last);\n}\n\ntemplate<class Iterator, class Brick>\nvoid pattern_walk_brick( Iterator first, Iterator last, Brick brick, /*parallel=*/std::true_type ) {\n    except_handler([=]() {\n        par_backend::parallel_for( first, last, [brick](Iterator i, Iterator j) {\n            brick(i,j);\n        });\n    });\n}\n\n\n//------------------------------------------------------------------------\n// it_walk1 (pseudo)\n//\n// it_walk1 evaluates f(it) for each iterator it drawn from [first,last)\n//------------------------------------------------------------------------\ntemplate<class Iterator, class Function>\nvoid brick_it_walk1( Iterator first, Iterator last, Function f, /*vector=*/std::false_type ) noexcept {\n    for(; first!=last; ++first )\n        f(first);\n}\n\ntemplate<class Iterator, class Function>\nvoid brick_it_walk1( Iterator first, Iterator last, Function f, /*vector=*/std::true_type ) noexcept {\n    unseq_backend::simd_it_walk_1(first, last-first, f);\n}\n\ntemplate<class Iterator, class Function, class IsVector>\nvoid pattern_it_walk1( Iterator first, Iterator last, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    brick_it_walk1( first, last, f, is_vector );\n}\n\ntemplate<class Iterator, class Function, class IsVector>\nvoid pattern_it_walk1( Iterator first, Iterator last, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    except_handler([=]() {\n        par_backend::parallel_for( first, last, [f,is_vector](Iterator i, Iterator j) {\n            brick_it_walk1(i,j,f,is_vector);\n        });\n    });\n}\n\n//------------------------------------------------------------------------\n// walk1_n\n//------------------------------------------------------------------------\ntemplate<class InputIterator, class Size, class Function>\nInputIterator brick_walk1_n(InputIterator first, Size n, Function f, /*IsVectorTag=*/std::false_type ) {\n    return for_each_n_it_serial(first, n, [&f](InputIterator it) { f(*it); }); // calling serial version\n}\n\ntemplate<class RandomAccessIterator, class DifferenceType, class Function>\nRandomAccessIterator brick_walk1_n( RandomAccessIterator first, DifferenceType n, Function f, /*vectorTag=*/std::true_type ) noexcept {\n    return unseq_backend::simd_walk_1(first, n, f);\n}\n\ntemplate<class InputIterator, class Size, class Function, class IsVector>\nInputIterator pattern_walk1_n( InputIterator first, Size n, Function f, IsVector is_vector, /*is_parallel=*/std::false_type ) noexcept {\n    return brick_walk1_n(first, n, f, is_vector);\n}\n\ntemplate<class RandomAccessIterator, class Size, class Function, class IsVector>\nRandomAccessIterator pattern_walk1_n( RandomAccessIterator first, Size n, Function f, IsVector is_vector, /*is_parallel=*/std::true_type ) {\n    pattern_walk1(first, first + n, f, is_vector, std::true_type());\n    return first + n;\n}\n\ntemplate<class InputIterator, class Size, class Brick>\nInputIterator pattern_walk_brick_n( InputIterator first, Size n, Brick brick, /*is_parallel=*/std::false_type ) noexcept {\n    return brick(first, n);\n}\n\ntemplate<class RandomAccessIterator, class Size, class Brick>\nRandomAccessIterator pattern_walk_brick_n( RandomAccessIterator first, Size n, Brick brick, /*is_parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(first, first + n, [brick](RandomAccessIterator i, RandomAccessIterator j) {\n            brick(i, j-i);\n        });\n        return first + n;\n    });\n}\n\n\n\ntemplate<class InputIterator, class Size, class Function>\nInputIterator brick_it_walk1_n(InputIterator first, Size n, Function f, /*IsVectorTag=*/std::false_type ) {\n    return for_each_n_it_serial(first, n, f); // calling serial version\n}\n\ntemplate<class RandomAccessIterator, class DifferenceType, class Function>\nRandomAccessIterator brick_it_walk1_n( RandomAccessIterator first, DifferenceType n, Function f, /*vectorTag=*/std::true_type ) noexcept {\n    return unseq_backend::simd_it_walk_1(first, n, f);\n}\n\ntemplate<class InputIterator, class Size, class Function, class IsVector>\nInputIterator pattern_it_walk1_n( InputIterator first, Size n, Function f, IsVector is_vector, /*is_parallel=*/std::false_type ) noexcept {\n    return brick_it_walk1_n(first, n, f, is_vector);\n}\n\ntemplate<class RandomAccessIterator, class Size, class Function, class IsVector>\nRandomAccessIterator pattern_it_walk1_n( RandomAccessIterator first, Size n, Function f, IsVector is_vector, /*is_parallel=*/std::true_type ) {\n    pattern_it_walk1(first, first + n, f, is_vector, std::true_type());\n    return first + n;\n}\n\n//------------------------------------------------------------------------\n// walk2 (pseudo)\n//\n// walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...)\n//------------------------------------------------------------------------\ntemplate<class Iterator1, class Iterator2, class Function>\nIterator2 brick_walk2( Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, /*vector=*/std::false_type ) noexcept {\n    for(; first1!=last1; ++first1, ++first2 )\n        f(*first1, *first2);\n    return first2;\n}\n\ntemplate<class Iterator1, class Iterator2, class Function>\nIterator2 brick_walk2( Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_walk_2(first1, last1-first1, first2, f);\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function>\nIterator2 brick_walk2_n( Iterator1 first1, Size n, Iterator2 first2, Function f, /*vector=*/std::false_type ) noexcept {\n    for(; n > 0; --n, ++first1, ++first2 )\n        f(*first1, *first2);\n    return first2;\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function>\nIterator2 brick_walk2_n(Iterator1 first1, Size n, Iterator2 first2, Function f, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_walk_2(first1, n, first2, f);\n}\n\n\n\ntemplate<class Iterator1, class Iterator2, class Function, class IsVector>\nIterator2 pattern_walk2( Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_walk2(first1,last1,first2,f,is_vector);\n}\n\ntemplate<class Iterator1, class Iterator2, class Function, class IsVector>\nIterator2 pattern_walk2(Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(\n            first1, last1,\n            [f,first1,first2,is_vector](Iterator1 i, Iterator1 j) {\n                brick_walk2(i,j,first2+(i-first1),f,is_vector);\n            }\n        );\n        return first2+(last1-first1);\n    });\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function, class IsVector>\nIterator2 pattern_walk2_n( Iterator1 first1, Size n, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_walk2_n(first1, n, first2, f, is_vector);\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function, class IsVector>\nIterator2 pattern_walk2_n(Iterator1 first1, Size n, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return pattern_walk2(first1, first1 + n, first2, f, is_vector, std::true_type());\n}\n\ntemplate<class Iterator1, class Iterator2, class Brick>\nIterator2 pattern_walk2_brick( Iterator1 first1, Iterator1 last1, Iterator2 first2, Brick brick, /*parallel=*/std::false_type ) noexcept {\n    return brick(first1,last1,first2);\n}\n\ntemplate<class Iterator1, class Iterator2, class Brick>\nIterator2 pattern_walk2_brick(Iterator1 first1, Iterator1 last1, Iterator2 first2, Brick brick, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(\n            first1, last1,\n            [first1,first2, brick](Iterator1 i, Iterator1 j) {\n                brick(i,j,first2+(i-first1));\n            }\n        );\n        return first2+(last1-first1);\n    });\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Brick>\nIterator2 pattern_walk2_brick_n(Iterator1 first1, Size n, Iterator2 first2, Brick brick, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(\n            first1, first1+n,\n            [first1,first2, brick](Iterator1 i, Iterator1 j) {\n                brick(i, j-i, first2+(i-first1));\n            }\n        );\n        return first2 + n;\n    });\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Brick>\nIterator2 pattern_walk2_brick_n( Iterator1 first1, Size n, Iterator2 first2, Brick brick, /*parallel=*/std::false_type ) noexcept {\n    return brick(first1, n, first2);\n}\n\n\n//------------------------------------------------------------------------\n// it_walk2 (pseudo)\n//\n// it_walk2 evaluates f(it1, it2) for iterators (it1, it2) drawn from [first1,last1) and [first2,...)\n//------------------------------------------------------------------------\ntemplate<class Iterator1, class Iterator2, class Function, class IsVector>\nIterator2 pattern_it_walk2( Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_it_walk2(first1,last1,first2,f,is_vector);\n}\n\ntemplate<class Iterator1, class Iterator2, class Function, class IsVector>\nIterator2 pattern_it_walk2(Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(\n            first1, last1,\n            [f,first1,first2,is_vector](Iterator1 i, Iterator1 j) {\n                brick_it_walk2(i,j,first2+(i-first1),f,is_vector);\n            }\n        );\n        return first2+(last1-first1);\n    });\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function, class IsVector>\nIterator2 pattern_it_walk2_n( Iterator1 first1, Size n, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_it_walk2_n(first1, n, first2, f, is_vector);\n}\n\ntemplate<class Iterator1, class Size, class Iterator2, class Function, class IsVector>\nIterator2 pattern_it_walk2_n(Iterator1 first1, Size n, Iterator2 first2, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return pattern_it_walk2(first1, first1 + n, first2, f, is_vector, std::true_type());\n}\n\n//------------------------------------------------------------------------\n// walk3 (pseudo)\n//\n// walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...)\n//------------------------------------------------------------------------\ntemplate<class Iterator1, class Iterator2, class Iterator3, class Function>\nIterator3 brick_walk3( Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator3 first3, Function f, /*vector=*/std::false_type ) noexcept {\n    for(; first1!=last1; ++first1, ++first2, ++first3 )\n        f(*first1, *first2, *first3);\n    return first3;\n}\n\ntemplate<class Iterator1, class Iterator2, class Iterator3, class Function>\nIterator3 brick_walk3( Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator3 first3, Function f, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_walk_3(first1, last1-first1, first2, first3, f);\n}\n\n\ntemplate<class Iterator1, class Iterator2, class Iterator3, class Function, class IsVector>\nIterator3 pattern_walk3( Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator3 first3, Function f, IsVector is_vector, /*parallel=*/std::false_type ) noexcept {\n    return brick_walk3(first1, last1, first2, first3, f, is_vector);\n}\n\ntemplate<class Iterator1, class Iterator2, class Iterator3, class Function, class IsVector>\nIterator3 pattern_walk3(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator3 first3, Function f, IsVector is_vector, /*parallel=*/std::true_type ) {\n    return except_handler([=]() {\n        par_backend::parallel_for(\n            first1, last1,\n            [f, first1, first2, first3, is_vector](Iterator1 i, Iterator1 j) {\n            brick_walk3(i, j, first2+(i-first1), first3+(i-first1), f, is_vector);\n        });\n        return first3+(last1-first1);\n    });\n}\n\n\n//------------------------------------------------------------------------\n// equal\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class BinaryPredicate>\nbool brick_equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate p, /* IsVector = */ std::false_type) noexcept {\n    return std::equal(first1, last1, first2, p);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class BinaryPredicate>\nbool brick_equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate p, /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_first(first1, last1 - first1, first2, not_pred<BinaryPredicate>(p)).first == last1;\n}\n\ntemplate<class InputIterator1, class InputIterator2, class BinaryPredicate, class IsVector>\nbool pattern_equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate p, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_equal(first1, last1, first2, p, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class BinaryPredicate, class IsVector>\nbool pattern_equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate p, IsVector vec, /*is_parallel=*/std::true_type) {\n    return except_handler([=]() {\n        return !internal::parallel_or(first1, last1,\n            [first1, first2, p, vec](InputIterator1 i, InputIterator1 j) {return !brick_equal(i, j,\n                first2 + (i - first1), p, vec); });\n    });\n}\n\n//------------------------------------------------------------------------\n// find_if\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator, class Predicate>\nForwardIterator brick_find_if(ForwardIterator first, ForwardIterator last, Predicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::find_if(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class Predicate>\nForwardIterator brick_find_if(ForwardIterator first, ForwardIterator last, Predicate pred, /*is_vector=*/std::true_type) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator>::difference_type size_type;\n    return unseq_backend::simd_first(first, size_type(0), last - first,\n        [&pred](ForwardIterator it, size_type i) {return pred(it[i]); });\n}\n\ntemplate<class ForwardIterator, class Predicate, class IsVector>\nForwardIterator pattern_find_if(ForwardIterator first, ForwardIterator last, Predicate pred, IsVector is_vector, /*is_parallel=*/std::false_type ) noexcept {\n    return brick_find_if(first,last,pred,is_vector);\n}\n\ntemplate<class ForwardIterator, class Predicate, class IsVector>\nForwardIterator pattern_find_if(ForwardIterator first, ForwardIterator last, Predicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    return except_handler([=]() {\n        return internal::parallel_find(first, last, [pred, is_vector](ForwardIterator i, ForwardIterator j) {\n            return brick_find_if(i, j, pred, is_vector);\n        },\n        std::less<typename std::iterator_traits<ForwardIterator>::difference_type>(), /*is_first=*/true);\n    });\n}\n\n//------------------------------------------------------------------------\n// find_end\n//------------------------------------------------------------------------\n\n// find the first occurrence of the subsequence [s_first, s_last)\n//   or the  last occurrence of the subsequence in the range [first, last)\n// b_first determines what occurrence we want to find (first or last)\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 find_subrange(ForwardIterator1 first, ForwardIterator1 last,\n    ForwardIterator1 global_last, ForwardIterator2 s_first, ForwardIterator2 s_last,\n    BinaryPredicate pred, bool b_first, IsVector is_vector) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator2>::value_type value_type;\n    auto  n2 = s_last - s_first;\n    if (n2 < 1) {\n        return b_first ? first : last;\n    }\n\n    auto  n1 = global_last - first;\n    if (n1 < n2) {\n        return last;\n    }\n\n    auto cur = last;\n    while (first != last && (global_last - first >= n2)) {\n        // find position of *s_first in [first, last) (it can be start of subsequence)\n        first = brick_find_if(first, last,\n            equal_value_by_pred<value_type, BinaryPredicate>(*s_first, pred), is_vector);\n\n        // if position that was found previously is the start of subsequence\n        // then we can exit the loop (b_first == true) or keep the position\n        // (b_first == false)\n        if (first != last && (global_last - first >= n2) &&\n            brick_equal(s_first + 1, s_last, first + 1, pred, is_vector)) {\n            if (b_first) {\n                return first;\n            }\n            else {\n                cur = first;\n            }\n        }\n        else if (first == last) {\n            break;\n        }\n        else {}\n\n        // in case of b_first == false we try to find new start position\n        // for the next subsequence\n        ++first;\n    }\n    return cur;\n}\n\ntemplate<class ForwardIterator, class Size, class T, class BinaryPredicate, class IsVector>\nForwardIterator find_subrange(ForwardIterator first, ForwardIterator last,\n    ForwardIterator global_last, Size count, const T& value,\n    BinaryPredicate pred, IsVector is_vector) noexcept {\n    if (global_last - first < count || count < 1) {\n        return last; // According to the standard last shall be returned when count < 1\n    }\n\n    auto n = global_last - first;\n    auto unary_pred = equal_value_by_pred<T, BinaryPredicate>(value, pred);\n    while (first != last && (global_last - first >= count)) {\n        first = brick_find_if(first, last, unary_pred, is_vector);\n\n        // check that all of elements in [first+1, first+count) equal to value\n        if (first != last && (global_last - first >= count) &&\n            !brick_any_of(first + 1, first + count, not_pred<decltype(unary_pred)>(unary_pred), is_vector)) {\n                return first;\n        }\n        else if (first == last) {\n            break;\n        }\n        else {\n            ++first;\n        }\n    }\n    return last;\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_find_end(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::find_end(first, last, s_first, s_last, pred);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_find_end(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    return find_subrange(first, last, last, s_first, s_last, pred, false, std::true_type());\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_find_end(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_find_end(first, last, s_first, s_last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_find_end(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (last - first == s_last - s_first) {\n        const bool res = pattern_equal(first, last, s_first, pred, is_vector, std::true_type());\n        return res ? first : last;\n    }\n    else {\n        return except_handler([=]() {\n            return internal::parallel_find(first, last, [first, last, s_first, s_last, pred, is_vector](ForwardIterator1 i, ForwardIterator1 j) {\n                return find_subrange(i, j, last, s_first, s_last, pred, false, is_vector);\n            },\n            std::greater<typename std::iterator_traits<ForwardIterator1>::difference_type>(), /*is_first=*/false);\n        });\n    }\n}\n\n//------------------------------------------------------------------------\n// find_first_of\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_find_first_of(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::find_first_of(first, last, s_first, s_last, pred);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_find_first_of(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_find_first_of(first, last, s_first, s_last, pred);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_find_first_of(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_find_first_of(first, last, s_first, s_last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_find_first_of(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    return except_handler([=]() {\n        return internal::parallel_find(first, last, [s_first, s_last, pred, is_vector](ForwardIterator1 i, ForwardIterator1 j) {\n            return brick_find_first_of(i, j, s_first, s_last, pred, is_vector);\n        },\n        std::less<typename std::iterator_traits<ForwardIterator1>::difference_type>(), /*is_first=*/true);\n    });\n}\n\n//------------------------------------------------------------------------\n// search\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_search(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    return std::search(first, last, s_first, s_last, pred);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 brick_search(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, /*vector=*/std::true_type) noexcept {\n    return find_subrange(first, last, last, s_first, s_last, pred, true, std::true_type());\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_search(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_search(first, last, s_first, s_last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate, class IsVector>\nForwardIterator1 pattern_search(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (last - first == s_last - s_first) {\n        const bool res = pattern_equal(first, last, s_first, pred, is_vector, std::true_type());\n        return res ? first : last;\n    }\n    else {\n        return except_handler([=]() {\n            return internal::parallel_find(first, last, [last, s_first, s_last, pred, is_vector](ForwardIterator1 i, ForwardIterator1 j) {\n                return find_subrange(i, j, last, s_first, s_last, pred, true, is_vector);\n            },\n            std::less<typename std::iterator_traits<ForwardIterator1>::difference_type>(), /*is_first=*/true);\n        });\n    }\n}\n\n//------------------------------------------------------------------------\n// search_n\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator, class Size, class T, class BinaryPredicate>\nForwardIterator brick_search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    return std::search_n(first, last, count, value, pred);\n}\n\ntemplate<class ForwardIterator, class Size, class T, class BinaryPredicate>\nForwardIterator brick_search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred, /*vector=*/std::true_type) noexcept {\n    return find_subrange(first, last, last, count, value, pred, std::true_type());\n}\n\ntemplate<class ForwardIterator, class Size, class T, class BinaryPredicate, class IsVector>\nForwardIterator pattern_search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_search_n(first, last, count, value, pred, is_vector);\n}\n\ntemplate<class ForwardIterator, class Size, class T, class BinaryPredicate, class IsVector>\nForwardIterator pattern_search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (last - first == count) {\n        const bool result = !pattern_any_of(first, last,\n            [&value, &pred](const T& val) {return !pred(val, value); },\n            is_vector, /*is_parallel*/ std::true_type());\n        return result ? first : last;\n    }\n    else {\n        return except_handler([first, last, count, &value, pred, is_vector]() {\n            return internal::parallel_find(first, last, [last, count, &value, pred, is_vector](ForwardIterator i, ForwardIterator j) {\n                return find_subrange(i, j, last, count, value, pred, is_vector);\n            },\n            std::less<typename std::iterator_traits<ForwardIterator>::difference_type>(), /*is_first=*/true);\n        });\n    }\n}\n\n\n//------------------------------------------------------------------------\n// copy_n\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator, class Size, class OutputIterator>\nOutputIterator brick_copy_n(InputIterator first, Size n, OutputIterator result, /*vector=*/std::false_type) noexcept {\n    return std::copy_n(first, n, result);\n}\n\ntemplate<class InputIterator, class Size, class OutputIterator>\nOutputIterator brick_copy_n(InputIterator first, Size n, OutputIterator result, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_assign(first, n, result,\n        [](InputIterator first, OutputIterator result) {\n            *result = *first;\n    });\n}\n\n//------------------------------------------------------------------------\n// copy\n//------------------------------------------------------------------------\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_copy(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::false_type) noexcept {\n    return std::copy(first, last, result);\n}\n\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_copy(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_assign(first, last - first, result,\n        [](InputIterator first, OutputIterator result) {\n            *result = *first;\n    });\n}\n\n//------------------------------------------------------------------------\n// move\n//------------------------------------------------------------------------\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_move(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::false_type) noexcept {\n    return std::move(first, last, result);\n}\n\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_move(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_assign(first, last - first, result,\n        [](InputIterator first, OutputIterator result) {\n            *result = std::move(*first);\n        });\n}\n\n//------------------------------------------------------------------------\n// swap_ranges\n//------------------------------------------------------------------------\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_swap_ranges(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::false_type) noexcept {\n    return std::swap_ranges(first, last, result);\n}\n\ntemplate<class InputIterator, class OutputIterator>\nOutputIterator brick_swap_ranges(InputIterator first, InputIterator last, OutputIterator result, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_assign(first, last - first, result, std::iter_swap<InputIterator, OutputIterator>);\n}\n\n//------------------------------------------------------------------------\n// copy_if\n//------------------------------------------------------------------------\ntemplate<class InputIterator, class OutputIterator, class UnaryPredicate>\nOutputIterator brick_copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    return std::copy_if(first, last, result, pred);\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryPredicate>\nOutputIterator brick_copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred, /*vector=*/std::true_type) noexcept {\n#if (__PSTL_MONOTONIC_PRESENT)\n    return unseq_backend::simd_copy_if(first, last-first, result, pred);\n#else\n    return std::copy_if(first, last, result, pred);\n#endif\n}\n\n// TODO: Try to use transform_reduce for combining brick_copy_if_phase1 on IsVector.\ntemplate<class DifferenceType, class InputIterator, class UnaryPredicate>\nstd::pair<DifferenceType, DifferenceType> brick_calc_mask_1(\n    InputIterator first, InputIterator last, bool* __restrict mask, UnaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    auto count_true  = DifferenceType(0);\n    auto count_false = DifferenceType(0);\n    auto size = std::distance(first, last);\n\n    for (; first != last; ++first, ++mask) {\n        *mask = pred(*first);\n        if (*mask) {\n            ++count_true;\n        }\n    }\n    return std::make_pair(count_true, size - count_true);\n}\n\ntemplate<class DifferenceType, class InputIterator, class UnaryPredicate>\nstd::pair<DifferenceType, DifferenceType> brick_calc_mask_1(\n    InputIterator first, InputIterator last, bool* __restrict mask, UnaryPredicate pred, /*vector=*/std::true_type) noexcept {\n    auto result = unseq_backend::simd_calc_mask_1(first, last - first, mask, pred);\n    return std::make_pair(result, (last - first) - result);\n}\n\ntemplate<class InputIterator, class OutputIterator>\nvoid brick_copy_by_mask(InputIterator first, InputIterator last, OutputIterator result, bool* mask, /*vector=*/std::false_type) noexcept {\n    for (; first != last; ++first, ++mask) {\n        if (*mask) {\n            *result = *first;\n            ++result;\n        }\n    }\n}\n\ntemplate<class InputIterator, class OutputIterator>\nvoid brick_copy_by_mask(InputIterator first, InputIterator last, OutputIterator result, bool* __restrict mask, /*vector=*/std::true_type) noexcept {\n#if (__PSTL_MONOTONIC_PRESENT)\n    unseq_backend::simd_copy_by_mask(first, last - first, result, mask);\n#else\n    brick_copy_by_mask(first, last, result, mask, std::false_type());\n#endif\n\n}\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2>\nvoid brick_partition_by_mask(InputIterator first, InputIterator last, OutputIterator1 out_true,\n    OutputIterator2 out_false, bool* mask, /*vector=*/std::false_type) noexcept {\n    for (; first != last; ++first, ++mask) {\n        if (*mask) {\n            *out_true = *first;\n            ++out_true;\n        }\n        else {\n            *out_false = *first;\n            ++out_false;\n        }\n    }\n}\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2>\nvoid brick_partition_by_mask(InputIterator first, InputIterator last, OutputIterator1 out_true,\n    OutputIterator2 out_false, bool* mask, /*vector=*/std::true_type) noexcept {\n#if (__PSTL_MONOTONIC_PRESENT)\n    unseq_backend::simd_partition_by_mask(first, last - first, out_true, out_false, mask);\n#else\n    brick_partition_by_mask(first, last, out_true, out_false, mask, std::false_type());\n#endif\n\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryPredicate, class IsVector>\nOutputIterator pattern_copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred, IsVector is_vector, /*parallel=*/std::false_type) noexcept {\n    return brick_copy_if(first, last, result, pred, is_vector);\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryPredicate, class IsVector>\nOutputIterator pattern_copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred, IsVector is_vector, /*parallel=*/std::true_type) {\n    typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;\n    const difference_type n = last-first;\n    if( difference_type(1) < n ) {\n        par_backend::buffer<bool> mask_buf(n);\n        if( mask_buf ) {\n            return except_handler([n, first, last, result, is_vector, pred, &mask_buf]() {\n                bool* mask = mask_buf.get();\n                difference_type m;\n                par_backend::parallel_strict_scan( n, difference_type(0),\n                    [=](difference_type i, difference_type len) {                               // Reduce\n                        return brick_calc_mask_1<difference_type>(first+i, first+(i+len),\n                                                                 mask + i,\n                                                                 pred,\n                                                                 is_vector).first;\n                    },\n                    std::plus<difference_type>(),                                               // Combine\n                    [=](difference_type i, difference_type len, difference_type initial) {      // Scan\n                        brick_copy_by_mask(first+i, first+(i+len),\n                                                            result+initial,\n                                                            mask + i,\n                                                            is_vector);\n                    },\n                    [&m](difference_type total) {m=total;});\n                return result + m;\n            });\n        }\n    }\n    // Out of memory or trivial sequence - use serial algorithm\n    return brick_copy_if(first, last, result, pred, is_vector);\n}\n\n//------------------------------------------------------------------------\n// unique\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class BinaryPredicate>\nForwardIterator brick_unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::unique(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class BinaryPredicate>\nForwardIterator brick_unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::unique(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class BinaryPredicate, class IsVector>\nForwardIterator pattern_unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_unique(first, last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator, class BinaryPredicate, class IsVector>\nForwardIterator pattern_unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_unique(first, last, pred, is_vector);\n}\n\n//------------------------------------------------------------------------\n// unique_copy\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator, class OutputIterator, class BinaryPredicate>\nOutputIterator brick_unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    return std::unique_copy(first, last, result, pred);\n}\n\ntemplate<class InputIterator, class OutputIterator, class BinaryPredicate>\nOutputIterator brick_unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred, /*vector=*/std::true_type) noexcept {\n#if (__PSTL_MONOTONIC_PRESENT)\n    return unseq_backend::simd_unique_copy(first, last-first, result, pred);\n#else\n    return std::unique_copy(first, last, result, pred);\n#endif\n}\n\ntemplate<class InputIterator, class OutputIterator, class BinaryPredicate, class IsVector>\nOutputIterator pattern_unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred, IsVector is_vector, /*parallel=*/std::false_type) noexcept {\n    return brick_unique_copy(first, last, result, pred, is_vector);\n}\n\ntemplate<class DifferenceType, class InputIterator, class BinaryPredicate>\nDifferenceType brick_calc_mask_2(InputIterator first, InputIterator last, bool* __restrict mask, BinaryPredicate pred, /*vector=*/std::false_type) noexcept {\n    DifferenceType count = 0;\n    for (; first != last; ++first, ++mask) {\n        *mask = !pred(*first, *(first-1));\n        count += *mask;\n    }\n    return count;\n}\n\ntemplate<class DifferenceType, class InputIterator, class BinaryPredicate>\nDifferenceType brick_calc_mask_2(InputIterator first, InputIterator last, bool* __restrict mask, BinaryPredicate pred, /*vector=*/std::true_type) noexcept {\n    return unseq_backend::simd_calc_mask_2(first, last-first, mask, pred);\n}\n\ntemplate<class InputIterator, class OutputIterator, class BinaryPredicate, class IsVector>\nOutputIterator pattern_unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred, IsVector is_vector, /*parallel=*/std::true_type) {\n    typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;\n    const difference_type n = last-first;\n    if( difference_type(2)<n ) {\n        par_backend::buffer<bool> mask_buf(n);\n        if( difference_type(2)<n && mask_buf ) {\n            return except_handler([n, first, result, pred, is_vector, &mask_buf]() {\n                bool* mask = mask_buf.get();\n                difference_type m;\n                par_backend::parallel_strict_scan( n, difference_type(0),\n                    [=](difference_type i, difference_type len) -> difference_type {          // Reduce\n                        difference_type extra = 0;\n                        if( i==0 ) {\n                            // Special boundary case\n                            mask[i] = true;\n                            if( --len==0 ) return 1;\n                            ++i;\n                            ++extra;\n                        }\n                        return brick_calc_mask_2<difference_type>(\n                            first+i, first+(i+len),\n                            mask + i,\n                            pred,\n                            is_vector) + extra;\n                    },\n                    std::plus<difference_type>(),                                               // Combine\n                    [=](difference_type i, difference_type len, difference_type initial) {      // Scan\n                        // Phase 2 is same as for pattern_copy_if\n                        brick_copy_by_mask(\n                            first+i, first+(i+len),\n                            result+initial,\n                            mask + i,\n                            is_vector);\n                    },\n                    [&m](difference_type total) {m=total;});\n                return result + m;\n            });\n        }\n    }\n    // Out of memory or trivial sequence - use serial algorithm\n    return brick_unique_copy(first, last, result, pred, is_vector);\n}\n\n//------------------------------------------------------------------------\n// reverse\n//------------------------------------------------------------------------\n\ntemplate<class BidirectionalIterator>\nvoid brick_reverse(BidirectionalIterator first, BidirectionalIterator last, /*is_vector=*/std::false_type) noexcept {\n    std::reverse(first, last);\n}\n\ntemplate<class BidirectionalIterator>\nvoid brick_reverse(BidirectionalIterator first, BidirectionalIterator last, /*is_vector=*/std::true_type) noexcept {\n    const auto n = (last - first) - 1;\n    unseq_backend::simd_it_walk_1(first, (last - first) / 2, [n, first](BidirectionalIterator in) {\n        using std::swap;\n        std::iter_swap(in, first + (n - (in - first)));\n    });\n}\n\n// this brick is called in parallel version, so we can use iterator arithmetic\ntemplate<class BidirectionalIterator>\nvoid brick_reverse(BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator d_first, /*is_vector=*/std::false_type) noexcept {\n    using std::swap;\n    for (; first != last; --last, ++d_first) {\n        std::iter_swap(last - 1, d_first);\n    }\n}\n\n// this brick is called in parallel version, so we can use iterator arithmetic\ntemplate<class BidirectionalIterator>\nvoid brick_reverse(BidirectionalIterator first, BidirectionalIterator last,\nBidirectionalIterator d_first, /*is_vector=*/std::true_type) noexcept {\n    const auto n = (last - first) - 1;\n    unseq_backend::simd_it_walk_1(first, last - first, [n, first, d_first](BidirectionalIterator in) {\n        using std::swap;\n        std::iter_swap(in, d_first + (n - (in - first)));\n    });\n}\n\ntemplate<class BidirectionalIterator, class IsVector>\nvoid pattern_reverse(BidirectionalIterator first, BidirectionalIterator last, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    brick_reverse(first, last, is_vector);\n}\n\ntemplate<class BidirectionalIterator, class IsVector>\nvoid pattern_reverse(BidirectionalIterator first, BidirectionalIterator last, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    par_backend::parallel_for(first, first + (last - first) / 2, [is_vector, first, last](BidirectionalIterator inner_first, BidirectionalIterator inner_last) {\n        brick_reverse(inner_first, inner_last, last - (inner_last - first), is_vector);\n    });\n}\n\n//------------------------------------------------------------------------\n// reverse_copy\n//------------------------------------------------------------------------\n\ntemplate<class BidirectionalIterator, class ForwardIterator>\nForwardIterator brick_reverse_copy(BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first, /*is_vector=*/std::false_type) noexcept {\n    return std::reverse_copy(first, last, d_first);\n}\n\ntemplate<class BidirectionalIterator, class ForwardIterator>\nForwardIterator brick_reverse_copy(BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first, /*is_vector=*/std::true_type) noexcept {\n    unseq_backend::simd_it_walk_2(first, last - first, d_first, [first, last](BidirectionalIterator in, ForwardIterator out) {\n        *out = *(last - ((in - first) + 1));\n    });\n    return d_first + (last - first);\n}\n\ntemplate<class BidirectionalIterator, class ForwardIterator, class IsVector>\nForwardIterator pattern_reverse_copy(BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n  return brick_reverse_copy(first, last, d_first, is_vector);\n}\n\ntemplate<class BidirectionalIterator, class ForwardIterator, class IsVector>\nForwardIterator pattern_reverse_copy(BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    auto len = last - first;\n    par_backend::parallel_for(first, last, [is_vector, first, len, d_first] (BidirectionalIterator inner_first, BidirectionalIterator inner_last) {\n        brick_reverse_copy(inner_first, inner_last, d_first + (len - (inner_last - first)), is_vector);\n    });\n  return d_first + len;\n}\n\n//------------------------------------------------------------------------\n// rotate\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator>\nForwardIterator brick_rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last, /*is_vector=*/std::false_type) noexcept {\n#if __PSTL_CPP11_STD_ROTATE_BROKEN\n    std::rotate(first, middle, last);\n    return std::next(first, std::distance(middle, last));\n#else\n    return std::rotate(first, middle, last);\n#endif\n}\n\ntemplate<class ForwardIterator>\nForwardIterator brick_rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return brick_rotate(first, middle, last, std::false_type());\n}\n\ntemplate<class ForwardIterator, class IsVector>\nForwardIterator pattern_rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_rotate(first, middle, last, is_vector);\n}\n\ntemplate<class ForwardIterator, class IsVector>\nForwardIterator pattern_rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_rotate(first, middle, last, is_vector);\n}\n\n//------------------------------------------------------------------------\n// rotate_copy\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class OutputIterator>\nOutputIterator brick_rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result, /*is_vector=*/std::false_type) noexcept {\n    return std::rotate_copy(first, middle, last, result);\n}\n\ntemplate<class ForwardIterator, class OutputIterator>\nOutputIterator brick_rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result, /*is_vector=*/std::true_type) noexcept {\n    OutputIterator temp = brick_copy(middle, last, result, std::true_type());\n    return brick_copy(first, middle, temp, std::true_type());\n}\n\ntemplate<class ForwardIterator, class OutputIterator, class IsVector>\nOutputIterator pattern_rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_rotate_copy(first, middle, last, result, is_vector);\n}\n\ntemplate<class ForwardIterator, class OutputIterator, class IsVector>\nOutputIterator pattern_rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    par_backend::parallel_for(first, last, [first, last, middle, result, is_vector](ForwardIterator b, ForwardIterator e) {\n        if (b > middle) {\n            brick_copy(b, e, result + (b - middle), is_vector);\n        }\n        else {\n            OutputIterator new_result = result + ((last - middle) + (b - first));\n            if (e < middle) {\n                brick_copy(b, e, new_result, is_vector);\n            }\n            else {\n                brick_copy(b, middle, new_result, is_vector);\n                brick_copy(middle, e, result, is_vector);\n            }\n        }\n    });\n    return result + (last - first);\n}\n\n//------------------------------------------------------------------------\n// is_partitioned\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nbool brick_is_partitioned(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::is_partitioned(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nbool brick_is_partitioned(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator>::difference_type size_type;\n    if (first == last) {\n        return true;\n    }\n    else {\n        ForwardIterator result = unseq_backend::simd_first(first, size_type(0), last - first,\n            [&pred](ForwardIterator it, size_type i) {return !pred(it[i]); });\n        if (result == last) {\n            return true;\n        }\n        else {\n            ++result;\n            return !unseq_backend::simd_or(result, last - result, pred);\n        }\n    }\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nbool pattern_is_partitioned(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_is_partitioned(first, last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nbool pattern_is_partitioned(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (first == last) {\n        return true;\n    }\n    else {\n        return except_handler([=, &pred]() {\n            typedef typename std::iterator_traits<ForwardIterator>::difference_type size_type;\n\n            // State of current range:\n            // broken     - current range is not partitioned by pred\n            // all_true   - all elements in current range satisfy pred\n            // all_false  - all elements in current range don't satisfy pred\n            // true_false - elements satisfy pred are placed before elements that don't satisfy pred\n            enum reduce_type { not_init = -1, broken, all_true, all_false, true_false };\n            reduce_type init = not_init;\n\n            // Array with states that we'll have when state from the left branch is merged with state from the right branch.\n            // State is calculated by formula: new_state = table[left_state * 4 + right_state]\n            reduce_type table[] = {\n                broken, broken,   broken,     broken,\n                broken, all_true, true_false, true_false,\n                broken, broken,   all_false,  broken,\n                broken, broken,   true_false, broken };\n\n            init = par_backend::parallel_reduce(first, last, init,\n                [first, &pred, &table, is_vector](ForwardIterator i, ForwardIterator j, reduce_type value)->reduce_type {\n                    if (value == broken) {\n                        return broken;\n                    }\n                    reduce_type res = not_init;\n                    // if first element satisfy pred\n                    if (pred(*i)) {\n                        // find first element that don't satisfy pred\n                        ForwardIterator x = brick_find_if(i + 1, j, not_pred<UnaryPredicate>(pred), is_vector);\n                        if (x != j) {\n                            // find first element after \"x\" that satisfy pred\n                            ForwardIterator y = brick_find_if(x + 1, j, pred, is_vector);\n                            // if it was found then range isn't partitioned by pred\n                            if (y != j) {\n                                return broken;\n                            }\n                            else {\n                                res = true_false;\n                            }\n                        }\n                        else {\n                            res = all_true;\n                        }\n                    }\n                    else { // if first element doesn't satisfy pred\n                        // then we should find the first element that satisfy pred.\n                        // If we found it then range isn't partitioned by pred\n                        if (brick_find_if(i + 1, j, pred, is_vector) != j) {\n                            return broken;\n                        }\n                        else {\n                            res = all_false;\n                        }\n                    }\n                    // if we have value from left range then we should calculate the result\n                    return (value == -1) ? res : table[value * 4 + res];\n                },\n\n                [&table](reduce_type val1, reduce_type val2)->reduce_type {\n                    if (val1 == broken || val2 == broken) {\n                        return broken;\n                    }\n                    // calculate the result for new big range\n                    return table[val1 * 4 + val2];\n            });\n            return init != broken;\n        });\n    }\n}\n\n//------------------------------------------------------------------------\n// partition\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nForwardIterator brick_partition(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::partition(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nForwardIterator brick_partition(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::partition(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nForwardIterator pattern_partition(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_partition(first, last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nForwardIterator pattern_partition(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n\n    // partitioned range: elements before pivot satisfy pred (true part),\n    //                    elements after pivot don't satisfy pred (false part)\n    struct PartitionRange {\n        ForwardIterator begin;\n        ForwardIterator pivot;\n        ForwardIterator end;\n    };\n\n    return except_handler([=]() {\n        PartitionRange init{ last, last, last };\n\n        // lambda for merging two partitioned ranges to one partitioned range\n        auto reductor = [first, is_vector](PartitionRange val1, PartitionRange val2)->PartitionRange {\n            ForwardIterator new_pivot;\n            auto size1 = val1.end - val1.pivot;\n            auto size2 = val2.pivot - val2.begin;\n\n            // if all elements in left range satisfy pred then we can move new pivot to pivot of right range\n            if (val1.end == val1.pivot) {\n                new_pivot = val2.pivot;\n            }\n            // if true part of right range greater than false part of left range\n            // then we should swap the false part of left range and last part of true part of right range\n            else if (size2 > size1) {\n                par_backend::parallel_for(\n                    val1.pivot, val1.pivot + size1,\n                    [val1, val2, size1, is_vector](ForwardIterator i, ForwardIterator j) {\n                        brick_swap_ranges(i, j, (val2.pivot - size1) + (i - val1.pivot), is_vector);\n                    }\n                );\n                new_pivot = val2.pivot - size1;\n            }\n            // else we should swap the first part of false part of left range and true part of right range\n            else {\n                par_backend::parallel_for(\n                    val1.pivot, val1.pivot + size2,\n                    [val1, val2, is_vector](ForwardIterator i, ForwardIterator j) {\n                    brick_swap_ranges(i, j, val2.begin + (i - val1.pivot), is_vector);\n                }\n                );\n                new_pivot = val1.pivot + size2;\n            }\n            return { val2.begin - (val1.end - val1.begin), new_pivot, val2.end };\n        };\n\n        PartitionRange result = par_backend::parallel_reduce(first, last, init,\n            [first, &pred, is_vector, reductor](ForwardIterator i, ForwardIterator j, PartitionRange value)->PartitionRange {\n                //1. serial partition\n                ForwardIterator pivot = brick_partition(i, j, pred, is_vector);\n\n                // 2. merging of two ranges (left and right respectively)\n                return reductor(value, { i, pivot, j });\n            },\n            reductor\n        );\n        return result.pivot;\n    });\n}\n\n//------------------------------------------------------------------------\n// stable_partition\n//------------------------------------------------------------------------\n\ntemplate<class BidirectionalIterator, class UnaryPredicate>\nBidirectionalIterator brick_stable_partition(BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::stable_partition(first, last, pred);\n}\n\ntemplate<class BidirectionalIterator, class UnaryPredicate>\nBidirectionalIterator brick_stable_partition(BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::stable_partition(first, last, pred);\n}\n\ntemplate<class BidirectionalIterator, class UnaryPredicate, class IsVector>\nBidirectionalIterator pattern_stable_partition(BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallelization=*/std::false_type) noexcept {\n    return brick_stable_partition(first, last, pred, is_vector);\n}\n\ntemplate<class BidirectionalIterator, class UnaryPredicate, class IsVector>\nBidirectionalIterator pattern_stable_partition(BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallelization=*/std::true_type) noexcept {\n    // partitioned range: elements before pivot satisfy pred (true part),\n    //                    elements after pivot don't satisfy pred (false part)\n    struct PartitionRange {\n        BidirectionalIterator begin;\n        BidirectionalIterator pivot;\n        BidirectionalIterator end;\n    };\n    typedef typename std::iterator_traits<BidirectionalIterator>::value_type T;\n\n    return except_handler([=]() {\n        PartitionRange init{ last, last, last };\n\n        // lambda for merging two partitioned ranges to one partitioned range\n        auto reductor = [first, is_vector, pred](PartitionRange val1, PartitionRange val2)->PartitionRange {\n            BidirectionalIterator new_pivot;\n            auto size1 = val1.end - val1.pivot;\n            auto size2 = val2.pivot - val2.begin;\n\n            // if all elements in left range satisfy pred then we can move new pivot to pivot of right range\n            if (val1.end == val1.pivot) {\n                new_pivot = val2.pivot;\n            }\n            // if true part of right range greater than false part of left range\n            // then we should swap the false part of left range and last part of true part of right range\n            else {\n                brick_rotate(val1.pivot, val2.begin, val2.pivot, is_vector);\n                new_pivot = val2.pivot - size1;\n            }\n            return { val2.begin - (val1.end - val1.begin), new_pivot, val2.end };\n        };\n\n        PartitionRange result = par_backend::parallel_reduce(first, last, init,\n            [first, &pred, is_vector, reductor](BidirectionalIterator i, BidirectionalIterator j, PartitionRange value)->PartitionRange {\n                //1. serial stable_partition\n                BidirectionalIterator pivot = brick_stable_partition(i, j, pred, is_vector);\n\n                // 2. merging of two ranges (left and right respectively)\n                return reductor(value, { i, pivot, j });\n            },\n            reductor);\n        return result.pivot;\n    });\n}\n\n//------------------------------------------------------------------------\n// partition_copy\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2, class UnaryPredicate>\nstd::pair<OutputIterator1, OutputIterator2>\nbrick_partition_copy(InputIterator first, InputIterator last, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate pred, /*is_vector=*/std::false_type) noexcept {\n    return std::partition_copy(first, last, out_true, out_false, pred);\n}\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2, class UnaryPredicate>\nstd::pair<OutputIterator1, OutputIterator2>\nbrick_partition_copy(InputIterator first, InputIterator last, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate pred, /*is_vector=*/std::true_type) noexcept {\n#if (__PSTL_MONOTONIC_PRESENT)\n    return unseq_backend::simd_partition_copy(first, last - first, out_true, out_false, pred);\n#else\n    return std::partition_copy(first, last, out_true, out_false, pred);\n#endif\n}\n\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2, class UnaryPredicate, class IsVector>\nstd::pair<OutputIterator1, OutputIterator2>\npattern_partition_copy(InputIterator first, InputIterator last, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate pred, IsVector is_vector,/*is_parallelization=*/std::false_type) noexcept {\n    return brick_partition_copy(first, last, out_true, out_false, pred, is_vector);\n}\n\ntemplate<class InputIterator, class OutputIterator1, class OutputIterator2, class UnaryPredicate, class IsVector>\nstd::pair<OutputIterator1, OutputIterator2>\npattern_partition_copy(InputIterator first, InputIterator last, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate pred, IsVector is_vector, /*is_parallelization=*/std::true_type) noexcept {\n    typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;\n    typedef std::pair<difference_type, difference_type> return_type;\n    const difference_type n = last - first;\n    if (difference_type(1) < n) {\n        par_backend::buffer<bool> mask_buf(n);\n        if (mask_buf) {\n            return except_handler([n, first, last, out_true, out_false, is_vector, pred, &mask_buf]() {\n                bool* mask = mask_buf.get();\n                return_type m;\n                par_backend::parallel_strict_scan(n, std::make_pair(difference_type(0), difference_type(0)),\n                    [=](difference_type i, difference_type len) {                             // Reduce\n                    return brick_calc_mask_1<difference_type>(first + i, first + (i + len),\n                        mask + i,\n                        pred,\n                        is_vector);\n                    },\n                    [](const return_type& x, const return_type& y)-> return_type {\n                        return std::make_pair(x.first + y.first, x.second + y.second);\n                    },                                                                        // Combine\n                    [=](difference_type i, difference_type len, return_type initial) {        // Scan\n                        brick_partition_by_mask(first + i, first + (i + len),\n                            out_true + initial.first,\n                            out_false + initial.second,\n                            mask + i,\n                            is_vector);\n                    },\n                    [&m](const return_type& total) {m = total;}\n                );\n                return std::make_pair(out_true + m.first, out_false + m.second);\n            });\n        }\n    }\n    // Out of memory or trivial sequence - use serial algorithm\n    return brick_partition_copy(first, last, out_true, out_false, pred, is_vector);\n}\n\n//------------------------------------------------------------------------\n// sort\n//------------------------------------------------------------------------\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector, class IsMoveConstructible>\nvoid pattern_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp, IsVector /*is_vector*/, /*is_parallel=*/std::false_type, IsMoveConstructible) noexcept {\n    std::sort(first, last, comp);\n}\n\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp, IsVector /*is_vector*/, /*is_parallel=*/std::true_type, /*is_move_constructible=*/std::true_type ) {\n    except_handler([=]() {\n        par_backend::parallel_stable_sort(first, last, comp,\n            [](RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n            std::sort(first, last, comp);\n        },\n        last - first);\n    });\n}\n\n//------------------------------------------------------------------------\n// stable_sort\n//------------------------------------------------------------------------\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp, IsVector /*is_vector*/, /*is_parallel=*/std::false_type) noexcept {\n    std::stable_sort(first, last, comp);\n}\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp, IsVector /*is_vector*/, /*is_parallel=*/std::true_type) {\n    except_handler([=]() {\n        par_backend::parallel_stable_sort(first, last, comp,\n            [](RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n            std::stable_sort(first, last, comp);\n        });\n    });\n}\n\n//------------------------------------------------------------------------\n// partial_sort\n//------------------------------------------------------------------------\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp, IsVector, /*is_parallel=*/std::false_type) noexcept {\n    std::partial_sort(first, middle, last, comp);\n}\n\ntemplate <class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp, IsVector, /*is_parallel=*/std::true_type) noexcept {\n    const auto n = middle - first;\n    except_handler([=]() {\n        par_backend::parallel_stable_sort(first, last, comp,\n            [n](RandomAccessIterator begin, RandomAccessIterator end, Compare comp) {\n            if(n < end - begin)\n                std::partial_sort(begin, begin + n, end, comp);\n            else\n                std::sort(begin, end, comp);\n        },\n        n);\n    });\n}\n\n//------------------------------------------------------------------------\n// partial_sort_copy\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class RandomAccessIterator, class Compare, class IsVector>\nRandomAccessIterator pattern_partial_sort_copy(ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last, Compare comp, IsVector, /*is_parallel=*/std::false_type) noexcept {\n    return std::partial_sort_copy(first, last, d_first, d_last, comp);\n}\n\ntemplate<class ForwardIterator, class RandomAccessIterator, class Compare, class IsVector>\nRandomAccessIterator pattern_partial_sort_copy(ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (last == first || d_last == d_first) {\n        return d_first;\n    }\n    auto n1 =   last -   first;\n    auto n2 = d_last - d_first;\n    return except_handler([=]() {\n        if (n2 >= n1) {\n            par_backend::parallel_stable_sort(d_first, d_first + n1, comp,\n                [n1, first, d_first, is_vector](RandomAccessIterator i, RandomAccessIterator j, Compare comp) {\n                ForwardIterator i1 = first + (i - d_first);\n                ForwardIterator j1 = first + (j - d_first);\n\n                // 1. Copy elements from input to output\n#if !__PSTL_ICC_18_OMP_SIMD_BROKEN\n                brick_copy(i1, j1, i, is_vector);\n#else\n                std::copy(i1, j1, i);\n#endif\n                // 2. Sort elements in output sequence\n                std::sort(i, j, comp);\n            },\n            n1);\n            return d_first + n1;\n        }\n        else {\n            typedef typename std::iterator_traits<ForwardIterator>::value_type T1;\n            typedef typename std::iterator_traits<RandomAccessIterator>::value_type T2;\n            par_backend::buffer<T1> buf(n1);\n            if (buf) {\n                T1* r = buf.get();\n\n                par_backend::parallel_stable_sort(r, r+n1, comp,\n                    [n2, first, r](T1* i, T1* j, Compare comp) {\n                    ForwardIterator it = first + (i - r);\n\n                    // 1. Copy elements from input to raw memory\n                    for (T1* k=i; k != j; ++k, ++it) {\n                        ::new (k) T2(*it);\n                    }\n\n                    // 2. Sort elements in temporary buffer\n                    if (n2 < j - i)\n                        std::partial_sort(i, i + n2, j, comp);\n                    else\n                        std::sort(i, j, comp);\n                },\n                n2);\n\n                // 3. Move elements from temporary buffer to output\n                par_backend::parallel_for(r, r + n2,\n                    [r, d_first, is_vector](T1* i, T1* j) {\n                    brick_move(i, j, d_first + (i - r), is_vector);\n                });\n                return d_first + n2;\n            }\n            return std::partial_sort_copy(first, last, d_first, d_last, comp);\n        }\n    });\n}\n\n//------------------------------------------------------------------------\n// count\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator, class Predicate>\ntypename std::iterator_traits<ForwardIterator>::difference_type\nbrick_count(ForwardIterator first, ForwardIterator last, Predicate pred, /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_count(first, last-first, pred);\n}\n\ntemplate<class ForwardIterator, class Predicate>\ntypename std::iterator_traits<ForwardIterator>::difference_type\nbrick_count(ForwardIterator first, ForwardIterator last, Predicate pred, /* is_vector = */ std::false_type) noexcept {\n    return std::count_if(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class Predicate, class IsVector>\ntypename std::iterator_traits<ForwardIterator>::difference_type\npattern_count(ForwardIterator first, ForwardIterator last, Predicate pred, /* is_parallel */ std::false_type, IsVector vec) noexcept {\n    return brick_count(first, last, pred, vec);\n}\n\ntemplate<class ForwardIterator, class Predicate, class IsVector>\ntypename std::iterator_traits<ForwardIterator>::difference_type\npattern_count(ForwardIterator first, ForwardIterator last, Predicate pred, /* is_parallel */ std::true_type, IsVector vec) {\n    typedef typename std::iterator_traits<ForwardIterator>::difference_type size_type;\n    return except_handler([=]() {\n        return par_backend::parallel_reduce(first, last, size_type(0),\n            [pred, vec](ForwardIterator begin, ForwardIterator end, size_type value)->size_type {\n            return value + brick_count(begin, end, pred, vec);\n            },\n            std::plus<size_type>()\n        );\n    });\n}\n\n//------------------------------------------------------------------------\n// adjacent_find\n//------------------------------------------------------------------------\ntemplate<class ForwardIt, class BinaryPredicate>\nForwardIt brick_adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate pred, /* IsVector = */ std::true_type, bool or_semantic) noexcept {\n    return unseq_backend::simd_adjacent_find(first, last, pred, or_semantic);\n}\n\ntemplate<class ForwardIt, class BinaryPredicate>\nForwardIt brick_adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate pred, /* IsVector = */ std::false_type, bool or_semantic) noexcept {\n    return std::adjacent_find(first, last, pred);\n}\n\ntemplate<class ForwardIt, class BinaryPredicate, class IsVector>\nForwardIt pattern_adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate pred, /* is_parallel */ std::false_type, IsVector vec, bool or_semantic) noexcept {\n    return brick_adjacent_find(first, last, pred, vec, or_semantic);\n}\n\ntemplate<class ForwardIt, class BinaryPredicate, class IsVector>\nForwardIt pattern_adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate pred, /* is_parallel */ std::true_type, IsVector vec, bool or_semantic) {\n    if (last - first < 2)\n        return last;\n\n    return except_handler([=]() {\n        return par_backend::parallel_reduce(first, last, last,\n            [last, pred, vec, or_semantic](ForwardIt begin, ForwardIt end, ForwardIt value)->ForwardIt {\n\n            // TODO: investigate performance benefits from the use of shared variable for the result,\n            // checking (compare_and_swap idiom) its value at first.\n            if (or_semantic && value < last) {//found\n                return value;\n            }\n\n            if (value > begin) {\n                // modify end to check the predicate on the boundary values;\n                // TODO: to use a custom range with boundaries overlapping\n                // TODO: investigate what if we remove \"if\" below and run algorithm on range [first, last-1)\n                // then check the pair [last-1, last)\n                if (end != last)\n                    ++end;\n\n                //correct the global result iterator if the \"brick\" returns a local \"last\"\n                const ForwardIt res = brick_adjacent_find(begin, end, pred, vec, or_semantic);\n                if (res < end)\n                    value = res;\n            }\n            return value;\n        },\n            [](ForwardIt x, ForwardIt y)->ForwardIt { return x < y ? x : y; } //reduce a value\n        );\n    });\n}\n\n//------------------------------------------------------------------------\n// nth_element\n//------------------------------------------------------------------------\n\ntemplate<class RandomAccessIterator, class Compare>\nvoid brick_nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    std::nth_element(first, nth, last, comp);\n}\n\ntemplate<class RandomAccessIterator, class Compare>\nvoid brick_nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp, /* is_vector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    std::nth_element(first, nth, last, comp);\n}\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    brick_nth_element(first, nth, last, comp, is_vector);\n}\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nvoid pattern_nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    brick_nth_element(first, nth, last, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// fill, fill_n\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator, class T>\nvoid brick_fill(ForwardIterator first, ForwardIterator last, const T& value, /* is_vector = */ std::true_type) noexcept {\n    unseq_backend::simd_fill_n(first, last-first, value);\n}\n\ntemplate<class ForwardIterator, class T>\nvoid brick_fill(ForwardIterator first, ForwardIterator last, const T& value, /* is_vector = */std::false_type) noexcept {\n    std::fill(first, last, value);\n}\n\ntemplate<class ForwardIterator, class T, class IsVector>\nvoid pattern_fill(ForwardIterator first, ForwardIterator last, const T& value, /*is_parallel=*/std::false_type, IsVector vec) noexcept {\n    brick_fill(first, last, value, vec);\n}\n\ntemplate<class ForwardIterator, class T, class IsVector>\nForwardIterator pattern_fill(ForwardIterator first, ForwardIterator last, const T& value, /*is_parallel=*/std::true_type, IsVector vec) {\n    return except_handler([first, last, &value, vec]() {\n        par_backend::parallel_for(first, last, [&value, vec](ForwardIterator begin, ForwardIterator end) {\n            brick_fill(begin, end, value, vec); });\n        return last;\n    });\n}\n\ntemplate<class OutputIterator, class Size, class T>\nOutputIterator brick_fill_n(OutputIterator first, Size count, const T& value, /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_fill_n(first, count, value);\n}\n\ntemplate<class OutputIterator, class Size, class T>\nOutputIterator brick_fill_n(OutputIterator first, Size count, const T& value, /* is_vector = */ std::false_type) noexcept {\n    return std::fill_n(first, count, value);\n}\n\ntemplate<class OutputIterator, class Size, class T, class IsVector>\nOutputIterator pattern_fill_n(OutputIterator first, Size count, const T& value, /*is_parallel=*/std::false_type, IsVector vec) noexcept {\n    return brick_fill_n(first, count, value, vec);\n}\n\ntemplate<class OutputIterator, class Size, class T, class IsVector>\nOutputIterator pattern_fill_n(OutputIterator first, Size count, const T& value, /*is_parallel=*/std::true_type, IsVector vec) {\n    return pattern_fill(first, first + count, value, std::true_type(), vec);\n}\n\n//------------------------------------------------------------------------\n// generate, generate_n\n//------------------------------------------------------------------------\ntemplate<class ForwardIterator, class Generator>\nvoid brick_generate(ForwardIterator first, ForwardIterator last, Generator g, /* is_vector = */ std::true_type) noexcept {\n    unseq_backend::simd_generate_n(first, last-first, g);\n}\n\ntemplate<class ForwardIterator, class Generator>\nvoid brick_generate(ForwardIterator first, ForwardIterator last, Generator g, /* is_vector = */std::false_type) noexcept {\n    std::generate(first, last, g);\n}\n\ntemplate<class ForwardIterator, class Generator, class IsVector>\nvoid pattern_generate(ForwardIterator first, ForwardIterator last, Generator g, /*is_parallel=*/std::false_type, IsVector vec) noexcept {\n    brick_generate(first, last, g, vec);\n}\n\ntemplate<class ForwardIterator, class Generator, class IsVector>\nForwardIterator pattern_generate(ForwardIterator first, ForwardIterator last, Generator g, /*is_parallel=*/std::true_type, IsVector vec) {\n    return except_handler([=]() {\n        par_backend::parallel_for(first, last, [g, vec](ForwardIterator begin, ForwardIterator end) {\n            brick_generate(begin, end, g, vec); });\n        return last;\n    });\n}\n\ntemplate<class OutputIterator, class Size, class Generator>\nOutputIterator brick_generate_n(OutputIterator first, Size count, Generator g, /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_generate_n(first, count, g);\n}\n\ntemplate<class OutputIterator, class Size, class Generator>\nOutputIterator brick_generate_n(OutputIterator first, Size count, Generator g, /* is_vector = */ std::false_type) noexcept {\n    return std::generate_n(first, count, g);\n}\n\ntemplate<class OutputIterator, class Size, class Generator, class IsVector>\nOutputIterator pattern_generate_n(OutputIterator first, Size count, Generator g, /*is_parallel=*/std::false_type, IsVector vec) noexcept {\n    return brick_generate_n(first, count, g, vec);\n}\n\ntemplate<class OutputIterator, class Size, class Generator, class IsVector>\nOutputIterator pattern_generate_n(OutputIterator first, Size count, Generator g, /*is_parallel=*/std::true_type, IsVector vec) {\n    return pattern_generate(first, first + count, g, std::true_type(), vec);\n}\n\n//------------------------------------------------------------------------\n// remove\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nForwardIterator brick_remove_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /* is_vector = */ std::false_type) noexcept {\n    return std::remove_if(first, last, pred);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate>\nForwardIterator brick_remove_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_remove_if(first, last - first, pred);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nForwardIterator pattern_remove_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel*/ std::false_type) noexcept {\n    return brick_remove_if(first, last, pred, is_vector);\n}\n\ntemplate<class ForwardIterator, class UnaryPredicate, class IsVector>\nForwardIterator pattern_remove_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred, IsVector is_vector, /*is_parallel*/ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_remove_if(first, last, pred, is_vector);\n}\n\n//------------------------------------------------------------------------\n// merge\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator d_first, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    return std::merge(first1, last1, first2, last2, d_first, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator d_first, Compare comp, /* is_vector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::merge(first1, last1, first2, last2, d_first, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator d_first, Compare comp, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_merge(first1, last1, first2, last2, d_first, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator d_first, Compare comp, IsVector is_vector, /* is_parallel = */ std::true_type) noexcept {\n    except_handler([=]() {\n        par_backend::parallel_merge(first1, last1, first2, last2, d_first, comp,\n            [is_vector](InputIterator1 f1, InputIterator1 l1, InputIterator2 f2, InputIterator2 l2, OutputIterator f3, Compare comp) {return brick_merge(f1, l1, f2, l2, f3, comp, is_vector); });\n    });\n    return d_first + (last1 - first1) + (last2 - first2);\n}\n\n//------------------------------------------------------------------------\n// inplace_merge\n//------------------------------------------------------------------------\n\ntemplate<class BidirectionalIterator, class Compare>\nvoid brick_inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    std::inplace_merge(first, middle, last, comp);\n}\n\ntemplate<class BidirectionalIterator, class Compare>\nvoid brick_inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp, /* is_vector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\")\n    std::inplace_merge(first, middle, last, comp);\n}\n\ntemplate<class BidirectionalIterator, class Compare, class IsVector>\nvoid pattern_inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    brick_inplace_merge(first, middle, last, comp, is_vector);\n}\n\ntemplate<class BidirectionalIterator, class Compare, class IsVector>\nvoid pattern_inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    if (first == last || first == middle || middle == last) {\n        return;\n    }\n    typedef typename std::iterator_traits<BidirectionalIterator>::value_type T;\n    auto n = last - first;\n    par_backend::buffer<T> buf(n);\n    if (buf) {\n        T* r = buf.get();\n        except_handler([=]() {\n            auto move_values = [](BidirectionalIterator x, T* z) {invoke_if_else(std::is_trivial<T>(),\n                [&]() {*z = std::move(*x); },\n                [&]() {::new (internal::reduce_to_ptr(z)) T(std::move(*x)); }\n            ); };\n\n            auto move_sequences = [](BidirectionalIterator first1, BidirectionalIterator last1, T* first2) {\n                return brick_uninitialized_move(first1, last1, first2, IsVector()); };\n\n            par_backend::parallel_merge(first, middle, middle, last, r, comp,\n                [n, comp, move_values, move_sequences](BidirectionalIterator f1, BidirectionalIterator l1, BidirectionalIterator f2, BidirectionalIterator l2, T* f3,\n                    Compare comp) {\n                auto func = par_backend::serial_move_merge<decltype(move_values), decltype(move_sequences)>(n, move_values, move_sequences);\n                func(f1, l1, f2, l2, f3, comp);\n                return f3 + (l1 - f1) + (l2 - f2);\n            });\n            par_backend::parallel_for(r, r + n,\n                [r, first, is_vector](T* i, T* j) {\n                brick_move(i, j, first + (i - r), is_vector);\n            });\n        });\n    }\n    else {\n        std::inplace_merge(first, middle, last, comp);\n    }\n}\n\n//------------------------------------------------------------------------\n// includes\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class Compare>\nbool brick_includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp, /* IsVector = */ std::false_type) noexcept {\n    return std::includes(first1, last1, first2, last2, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class Compare>\nbool brick_includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp, /* IsVector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\")\n        return std::includes(first1, last1, first2, last2, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class Compare, class IsVector>\nbool pattern_includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_includes(first1, last1, first2, last2, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class Compare, class IsVector>\nbool pattern_includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_includes(first1, last1, first2, last2, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// set_union\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::false_type) noexcept {\n    return std::set_union(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,\n    InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::set_union(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_set_union(first1, last1, first2, last2, result, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_set_union(first1, last1, first2, last2, result, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// set_intersection\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::false_type) noexcept {\n    return std::set_intersection(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::set_intersection(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_set_intersection(first1, last1, first2, last2, result, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_set_intersection(first1, last1, first2, last2, result, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// set_difference\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::false_type) noexcept {\n    return std::set_difference(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::set_difference(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_set_difference(first1, last1, first2, last2, result, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_set_difference(first1, last1, first2, last2, result, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// set_symmetric_difference\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp,/*is_vector=*/std::false_type) noexcept {\n    return std::set_symmetric_difference(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>\nOutputIterator brick_set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, /*is_vector=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::set_symmetric_difference(first1, last1, first2, last2, result, comp);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_set_symmetric_difference(first1, last1, first2, last2, result, comp, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class OutputIterator, class Compare, class IsVector>\nOutputIterator pattern_set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp, IsVector is_vector, /*is_parallel=*/std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Parallel algorithm unimplemented, redirected to serial\");\n    return brick_set_symmetric_difference(first1, last1, first2, last2, result, comp, is_vector);\n}\n\n//------------------------------------------------------------------------\n// is_heap_until\n//------------------------------------------------------------------------\n\ntemplate<class RandomAccessIterator, class Compare>\nRandomAccessIterator brick_is_heap_until(RandomAccessIterator first, RandomAccessIterator last, Compare comp,\n    /* is_vector = */ std::false_type) noexcept {\n    return std::is_heap_until(first, last, comp);\n}\n\ntemplate<class RandomAccessIterator, class Compare>\nRandomAccessIterator brick_is_heap_until(RandomAccessIterator first, RandomAccessIterator last, Compare comp,\n    /* is_vector = */ std::true_type) noexcept {\n    if (last - first < 2)\n        return last;\n    typedef typename std::iterator_traits<RandomAccessIterator>::difference_type size_type;\n    return unseq_backend::simd_first(first, size_type(0), last - first,\n        [&comp](RandomAccessIterator it, size_type i) {return comp(it[(i - 1) / 2], it[i]); });\n}\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nRandomAccessIterator pattern_is_heap_until(RandomAccessIterator first, RandomAccessIterator last, Compare comp,\n    IsVector vec, /* is_parallel = */ std::false_type) noexcept {\n    return brick_is_heap_until(first, last, comp, vec);\n}\n\ntemplate<class RandomAccessIterator, class DifferenceType, class Compare>\nRandomAccessIterator is_heap_until_local(RandomAccessIterator first, DifferenceType begin, DifferenceType end, Compare comp,\n    /* is_vector = */ std::false_type) noexcept {\n    DifferenceType i = begin;\n    for (; i < end; ++i) {\n        if (comp(first[(i - 1) / 2], first[i])) {\n            break;\n        }\n    }\n    return first + i;\n}\n\ntemplate<class RandomAccessIterator, class DifferenceType, class Compare>\nRandomAccessIterator is_heap_until_local(RandomAccessIterator first, DifferenceType begin, DifferenceType end, Compare comp,\n    /* is_vector = */ std::true_type) noexcept {\n    return unseq_backend::simd_first(first, begin, end,\n        [&comp](RandomAccessIterator it, DifferenceType i) {return comp(it[(i - 1) / 2], it[i]); });\n}\n\ntemplate<class RandomAccessIterator, class Compare, class IsVector>\nRandomAccessIterator pattern_is_heap_until(RandomAccessIterator first, RandomAccessIterator last, Compare comp,\n    IsVector vec, /* is_parallel = */ std::true_type) noexcept {\n    if (last - first < 2)\n        return last;\n\n    return except_handler([=]() {\n        return internal::parallel_find(first, last, [first, last, comp, vec](RandomAccessIterator i, RandomAccessIterator j) {\n            return is_heap_until_local(first, i - first, j - first, comp, vec);\n        },\n        std::less<typename std::iterator_traits<RandomAccessIterator>::difference_type>(), /*is_first=*/true);\n\n    });\n\n}\n\n//------------------------------------------------------------------------\n// min_element\n//------------------------------------------------------------------------\n\ntemplate <typename ForwardIterator, typename Compare>\nForwardIterator brick_min_element(ForwardIterator first, ForwardIterator last, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    return std::min_element(first, last, comp);\n}\n\ntemplate <typename ForwardIterator, typename Compare>\nForwardIterator brick_min_element(ForwardIterator first, ForwardIterator last, Compare comp, /* is_vector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::min_element(first, last, comp);\n}\n\ntemplate <typename ForwardIterator, typename Compare, typename IsVector>\nForwardIterator pattern_min_element(ForwardIterator first, ForwardIterator last, Compare comp, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_min_element(first, last, comp, is_vector);\n}\n\ntemplate <typename ForwardIterator, typename Compare, typename IsVector>\nForwardIterator pattern_min_element(ForwardIterator first, ForwardIterator last, Compare comp, IsVector is_vector, /* is_parallel = */ std::true_type) noexcept {\n    if(first == last)\n        return last;\n\n    return except_handler([=]() {\n        return par_backend::parallel_reduce(\n            first + 1, last, first,\n            [=](ForwardIterator begin, ForwardIterator end, ForwardIterator init) -> ForwardIterator {\n                const ForwardIterator subresult = brick_min_element(begin, end, comp, is_vector);\n                return cmp_iterators_by_values(init, subresult, comp);\n            },\n            [=](ForwardIterator it1, ForwardIterator it2) -> ForwardIterator {\n                return cmp_iterators_by_values(it1, it2, comp);\n            }\n        );\n    });\n}\n\n//------------------------------------------------------------------------\n// minmax_element\n//------------------------------------------------------------------------\n\ntemplate <typename ForwardIterator, typename Compare>\nstd::pair<ForwardIterator, ForwardIterator> brick_minmax_element(ForwardIterator first, ForwardIterator last, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    return std::minmax_element(first, last, comp);\n}\n\ntemplate <typename ForwardIterator, typename Compare>\nstd::pair<ForwardIterator, ForwardIterator> brick_minmax_element(ForwardIterator first, ForwardIterator last, Compare comp, /* is_vector = */ std::true_type) noexcept {\n    __PSTL_PRAGMA_MESSAGE(\"Vectorized algorithm unimplemented, redirected to serial\");\n    return std::minmax_element(first, last, comp);\n}\n\ntemplate <typename ForwardIterator, typename Compare, typename IsVector>\nstd::pair<ForwardIterator, ForwardIterator> pattern_minmax_element(ForwardIterator first, ForwardIterator last, Compare comp, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_minmax_element(first, last, comp, is_vector);\n}\n\ntemplate <typename ForwardIterator, typename Compare, typename IsVector>\nstd::pair<ForwardIterator, ForwardIterator> pattern_minmax_element(ForwardIterator first, ForwardIterator last, Compare comp, IsVector is_vector, /* is_parallel = */ std::true_type) noexcept {\n    if(first == last)\n        return std::make_pair(first, first);\n\n    return except_handler([=]() {\n        typedef std::pair<ForwardIterator, ForwardIterator> result_t;\n\n        return par_backend::parallel_reduce(\n            first + 1, last, std::make_pair(first, first),\n            [=](ForwardIterator begin, ForwardIterator end, result_t init) -> result_t {\n                const result_t subresult = brick_minmax_element(begin, end, comp, is_vector);\n                return std::make_pair(cmp_iterators_by_values(subresult.first, init.first, comp), cmp_iterators_by_values(init.second, subresult.second, not_pred<Compare>(comp)));\n            },\n            [=](result_t p1, result_t p2) -> result_t {\n                return std::make_pair(cmp_iterators_by_values(p1.first, p2.first, comp), cmp_iterators_by_values(p2.second, p1.second, not_pred<Compare>(comp)));\n            }\n        );\n    });\n}\n\n//------------------------------------------------------------------------\n// mismatch\n//------------------------------------------------------------------------\ntemplate<class InputIterator1, class InputIterator2, class BinaryPredicate>\nstd::pair<InputIterator1, InputIterator2> mismatch_serial(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred) {\n#if __PSTL_CPP14_2RANGE_MISMATCH_EQUAL_PRESENT\n    return std::mismatch(first1, last1, first2, last2, pred);\n#else\n    for (; first1 != last1 && first2 != last2 && pred(*first1, *first2); ++first1,++first2){ }\n    return std::make_pair(first1, first2);\n#endif\n}\n\ntemplate <class InputIterator1, class InputIterator2, class Predicate>\nstd::pair<InputIterator1, InputIterator2> brick_mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Predicate pred, /* is_vector = */ std::false_type) noexcept {\n    return mismatch_serial(first1, last1, first2, last2, pred);\n}\n\ntemplate <class InputIterator1, class InputIterator2, class Predicate>\nstd::pair<InputIterator1, InputIterator2> brick_mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Predicate pred, /* is_vector = */ std::true_type) noexcept {\n    auto n = std::min(last1 - first1, last2 - first2);\n    return unseq_backend::simd_first(first1, n, first2, not_pred<Predicate>(pred));\n}\n\ntemplate <class InputIterator1, class InputIterator2, class Predicate, class IsVector>\nstd::pair<InputIterator1, InputIterator2> pattern_mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Predicate pred, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_mismatch(first1, last1, first2, last2, pred, is_vector);\n}\n\ntemplate <class InputIterator1, class InputIterator2, class Predicate, class IsVector>\nstd::pair<InputIterator1, InputIterator2> pattern_mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Predicate pred, IsVector is_vector, /* is_parallel = */ std::true_type) noexcept {\n    return except_handler([=]() {\n        auto n = std::min(last1 - first1, last2 - first2);\n        auto result = internal::parallel_find(first1, first1 + n, [first1, first2, pred, is_vector](InputIterator1 i, InputIterator1 j) {\n            return brick_mismatch(i, j, first2 + (i - first1), first2 + (j - first1), pred, is_vector).first;\n        },\n        std::less<typename std::iterator_traits<InputIterator1>::difference_type>(), /*is_first=*/true);\n        return std::make_pair(result, first2 + (result - first1));\n    });\n}\n\n//------------------------------------------------------------------------\n// lexicographical_compare\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class Compare>\nbool brick_lexicographical_compare(ForwardIterator1 first1, ForwardIterator1 last1,\n    ForwardIterator2 first2, ForwardIterator2 last2, Compare comp, /* is_vector = */ std::false_type) noexcept {\n    return std::lexicographical_compare(first1, last1, first2, last2, comp);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class Compare>\nbool brick_lexicographical_compare(ForwardIterator1 first1, ForwardIterator1 last1,\n    ForwardIterator2 first2, ForwardIterator2 last2, Compare comp, /* is_vector = */ std::true_type) noexcept {\n\n    if (first2 == last2) { // if second sequence is empty\n        return false;\n    }\n    else if (first1 == last1) { // if first sequence is empty\n        return true;\n    }\n    else {\n        typedef typename std::iterator_traits<ForwardIterator1>::reference ref_type1;\n        typedef typename std::iterator_traits<ForwardIterator2>::reference ref_type2;\n        --last1;\n        --last2;\n        auto n = std::min(last1 - first1, last2 - first2);\n        std::pair<ForwardIterator1, ForwardIterator2> result = unseq_backend::simd_first(first1, n, first2,\n            [comp](const ref_type1 x, const ref_type2 y)mutable {return comp(x, y) || comp(y, x); });\n\n        if (result.first == last1 && result.second != last2) { // if first sequence shorter than second\n            return !comp(*result.second, *result.first);;\n        }\n        else { // if second sequence shorter than first or both have the same number of elements\n            return comp(*result.first, *result.second);\n        }\n    }\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class Compare, class IsVector>\nbool pattern_lexicographical_compare(ForwardIterator1 first1, ForwardIterator1 last1,\n    ForwardIterator2 first2, ForwardIterator2 last2, Compare comp, IsVector is_vector, /* is_parallel = */ std::false_type) noexcept {\n    return brick_lexicographical_compare(first1, last1, first2, last2, comp, is_vector);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class Compare, class IsVector>\nbool pattern_lexicographical_compare(ForwardIterator1 first1, ForwardIterator1 last1,\n    ForwardIterator2 first2, ForwardIterator2 last2, Compare comp, IsVector is_vector, /* is_parallel = */ std::true_type) noexcept {\n\n    if (first2 == last2) { // if second sequence is empty\n        return false;\n    }\n    else if (first1 == last1) { // if first sequence is empty\n        return true;\n    }\n    else {\n        typedef typename std::iterator_traits<ForwardIterator1>::reference ref_type1;\n        typedef typename std::iterator_traits<ForwardIterator2>::reference ref_type2;\n        --last1;\n        --last2;\n        auto n = std::min(last1 - first1, last2 - first2);\n        auto result = internal::parallel_find(first1, first1 + n, [first1, first2, &comp, is_vector](ForwardIterator1 i, ForwardIterator1 j) {\n            return brick_mismatch(i, j, first2 + (i - first1), first2 + (j - first1),\n                [&comp](const ref_type1 x, const ref_type2 y) {return !comp(x, y) && !comp(y, x); }, is_vector).first;\n        },\n        std::less<typename std::iterator_traits<ForwardIterator1>::difference_type>(), /*is_first=*/true);\n\n        if (result == last1 && first2 + (result - first1) != last2) { // if first sequence shorter than second\n            return !comp(*(first2 + (result - first1)), *result);\n        }\n        else { // if second sequence shorter than first or both have the same number of elements\n            return comp(*result, *(first2 + (result - first1)));\n        }\n    }\n}\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_algorithm_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/bricks_impl.h",
    "content": "/*\r\n    Copyright (c) 2017-2018 Intel Corporation\r\n\r\n    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n    you may not use this file except in compliance with the License.\r\n    You may obtain a copy of the License at\r\n\r\n        http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n    Unless required by applicable law or agreed to in writing, software\r\n    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n    See the License for the specific language governing permissions and\r\n    limitations under the License.\r\n\r\n\r\n\r\n\r\n*/\r\n\r\n#ifndef __PSTL_bricks_impl_H\r\n#define __PSTL_bricks_impl_H\r\n\r\nnamespace pstl {\r\nnamespace internal {\r\n\r\ntemplate<class Iterator1, class Iterator2, class Function>\r\nIterator2 brick_it_walk2(Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, /*vector=*/std::false_type) noexcept {\r\n    for (; first1 != last1; ++first1, ++first2)\r\n        f(first1, first2);\r\n    return first2;\r\n}\r\n\r\ntemplate<class Iterator1, class Iterator2, class Function>\r\nIterator2 brick_it_walk2(Iterator1 first1, Iterator1 last1, Iterator2 first2, Function f, /*vector=*/std::true_type) noexcept {\r\n    return unseq_backend::simd_it_walk_2(first1, last1 - first1, first2, f);\r\n}\r\n\r\ntemplate<class Iterator1, class Size, class Iterator2, class Function>\r\nIterator2 brick_it_walk2_n(Iterator1 first1, Size n, Iterator2 first2, Function f, /*vector=*/std::false_type) noexcept {\r\n    for (; n > 0; --n, ++first1, ++first2)\r\n        f(first1, first2);\r\n    return first2;\r\n}\r\n\r\ntemplate<class Iterator1, class Size, class Iterator2, class Function>\r\nIterator2 brick_it_walk2_n(Iterator1 first1, Size n, Iterator2 first2, Function f, /*vector=*/std::true_type) noexcept {\r\n    return unseq_backend::simd_it_walk_2(first1, n, first2, f);\r\n}\r\n\r\n} // namespace internal\r\n} // namespace pstl\r\n\r\n#endif /* __PSTL_bricks_impl_H */\r\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/execution_defs.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_execution_policy_defs_H\n#define __PSTL_execution_policy_defs_H\n\n#include <type_traits>\n\nnamespace pstl {\nnamespace execution {\ninline namespace v1 {\n\n// 2.4, Sequential execution policy\nclass sequenced_policy {\npublic:\n    // For internal use only\n    static constexpr std::false_type __allow_unsequenced() {return std::false_type{};}\n    static constexpr std::false_type __allow_vector() {return std::false_type{};}\n    static constexpr std::false_type __allow_parallel() {return std::false_type{};}\n};\n\n#if __PSTL_USE_PAR_POLICIES\n// 2.5, Parallel execution policy\nclass parallel_policy {\npublic:\n    // For internal use only\n    static constexpr std::false_type __allow_unsequenced() {return std::false_type{};}\n    static constexpr std::false_type __allow_vector() {return std::false_type{};}\n    static constexpr std::true_type __allow_parallel() {return std::true_type{};}\n};\n\n// 2.6, Parallel+Vector execution policy\nclass parallel_unsequenced_policy {\npublic:\n    // For internal use only\n    static constexpr std::true_type __allow_unsequenced() {return std::true_type{};}\n    static constexpr std::true_type __allow_vector() {return std::true_type{};}\n    static constexpr std::true_type __allow_parallel() {return std::true_type{};}\n};\n#endif\n\nclass unsequenced_policy {\npublic:\n    // For internal use only\n    static constexpr std::true_type __allow_unsequenced() {return std::true_type{};}\n    static constexpr std::true_type __allow_vector() {return std::true_type{};}\n    static constexpr std::false_type __allow_parallel() {return std::false_type{};}\n};\n\n\n// 2.8, Execution policy objects\nconstexpr sequenced_policy seq{};\n#if __PSTL_USE_PAR_POLICIES\nconstexpr parallel_policy par{};\nconstexpr parallel_unsequenced_policy par_unseq{};\n#endif\nconstexpr unsequenced_policy unseq{};\n\n// 2.3, Execution policy type trait\ntemplate<class T> struct is_execution_policy: std::false_type {};\n\ntemplate<> struct is_execution_policy<sequenced_policy     >: std::true_type {};\n#if __PSTL_USE_PAR_POLICIES\ntemplate<> struct is_execution_policy<parallel_policy       >: std::true_type {};\ntemplate<> struct is_execution_policy<parallel_unsequenced_policy>: std::true_type {};\n#endif\ntemplate<> struct is_execution_policy<unsequenced_policy    >: std::true_type {};\n\n#if __PSTL_CPP14_VARIABLE_TEMPLATES_PRESENT\ntemplate<class T> constexpr bool is_execution_policy_v = is_execution_policy<T>::value;\n#endif\n\n} // namespace v1\n} // namespace execution\n\nnamespace internal {\n    template<class ExecPolicy, class T> using enable_if_execution_policy = typename std::enable_if<\n      pstl::execution::is_execution_policy<typename std::decay<ExecPolicy>::type>::value, T>::type;\n} // namespace internal\n\n} // namespace pstl\n\n#endif /* __PSTL_execution_policy_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/execution_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_execution_impl_H\n#define __PSTL_execution_impl_H\n\n#include <iterator>\n#include <type_traits>\n\n#include \"execution_defs.h\"\n\nnamespace pstl {\nnamespace internal {\n\nusing namespace pstl::execution;\n\n/* predicate */\n\ntemplate<typename T>\n    std::false_type lazy_and( T, std::false_type ) { return std::false_type{}; };\n\ntemplate<typename T>\n    inline T lazy_and( T a, std::true_type ) { return a; }\n\ntemplate<typename T>\n    std::true_type lazy_or( T, std::true_type ) { return std::true_type{}; };\n\ntemplate<typename T>\n    inline T lazy_or( T a, std::false_type ) { return a; }\n\n/* iterator */\ntemplate<typename iterator_type, typename... other_iterator_types>\nstruct is_random_access_iterator {\n    static constexpr bool value =\n        is_random_access_iterator<iterator_type>::value &&\n        is_random_access_iterator<other_iterator_types...>::value;\n    typedef std::integral_constant<bool, value> type;\n};\n\ntemplate<typename iterator_type>\nstruct is_random_access_iterator<iterator_type>\n    : std::is_same<typename std::iterator_traits<iterator_type>::iterator_category,\n                   std::random_access_iterator_tag> {\n};\n\n/* policy */\ntemplate<typename Policy>\nstruct policy_traits {};\n\ntemplate <>\nstruct policy_traits<sequenced_policy> {\n    typedef std::false_type allow_parallel;\n    typedef std::false_type allow_unsequenced;\n    typedef std::false_type allow_vector;\n};\n\ntemplate <>\nstruct policy_traits<unsequenced_policy> {\n    typedef std::false_type allow_parallel;\n    typedef std::true_type  allow_unsequenced;\n    typedef std::true_type  allow_vector;\n};\n\n\n#if __PSTL_USE_PAR_POLICIES\ntemplate <>\nstruct policy_traits<parallel_policy> {\n    typedef std::true_type  allow_parallel;\n    typedef std::false_type allow_unsequenced;\n    typedef std::false_type allow_vector;\n};\n\ntemplate <>\nstruct policy_traits<parallel_unsequenced_policy> {\n    typedef std::true_type allow_parallel;\n    typedef std::true_type allow_unsequenced;\n    typedef std::true_type allow_vector;\n};\n#endif\n\ntemplate<typename ExecutionPolicy> using collector_t =\n    typename policy_traits<typename std::decay<ExecutionPolicy>::type>::collector_type;\n\ntemplate<typename ExecutionPolicy> using allow_vector =\n    typename internal::policy_traits<typename std::decay<ExecutionPolicy>::type>::allow_vector;\n\ntemplate<typename ExecutionPolicy> using allow_unsequenced =\n    typename internal::policy_traits<typename std::decay<ExecutionPolicy>::type>::allow_unsequenced;\n\ntemplate<typename ExecutionPolicy> using allow_parallel =\n    typename internal::policy_traits<typename std::decay<ExecutionPolicy>::type>::allow_parallel;\n\n\ntemplate<typename ExecutionPolicy, typename... iterator_types>\nauto is_vectorization_preferred(ExecutionPolicy&& exec) ->\ndecltype(lazy_and( exec.__allow_vector(), typename is_random_access_iterator<iterator_types...>::type()))\n{\n    return lazy_and( exec.__allow_vector(), typename is_random_access_iterator<iterator_types...>::type() );\n}\n\ntemplate<typename ExecutionPolicy, typename... iterator_types>\nauto is_parallelization_preferred(ExecutionPolicy&& exec) ->\ndecltype(lazy_and( exec.__allow_parallel(), typename is_random_access_iterator<iterator_types...>::type()))\n{\n    return lazy_and( exec.__allow_parallel(), typename is_random_access_iterator<iterator_types...>::type() );\n}\n\ntemplate<typename policy, typename... iterator_types>\nstruct prefer_unsequenced_tag {\n    static constexpr bool value =\n        allow_unsequenced<policy>::value && is_random_access_iterator<iterator_types...>::value;\n    typedef std::integral_constant<bool, value> type;\n};\n\ntemplate<typename policy, typename... iterator_types>\nstruct prefer_parallel_tag {\n    static constexpr bool value =\n        allow_parallel<policy>::value && is_random_access_iterator<iterator_types...>::value;\n    typedef std::integral_constant<bool, value> type;\n};\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_execution_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_algorithm_defs.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_algorithm_defs_H\n#define __PSTL_glue_algorithm_defs_H\n\n#include <functional>\n\n#include \"execution_defs.h\"\n\nnamespace std {\n\n// [alg.any_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nany_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);\n\n// [alg.all_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Pred>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nall_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Pred pred);\n\n// [alg.none_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nnone_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);\n\n// [alg.foreach]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Function>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nfor_each(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Function f);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class Function>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfor_each_n(ExecutionPolicy&& exec, ForwardIterator first, Size n, Function f);\n\n// [alg.find]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind_if_not(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value);\n\n// [alg.find.end]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_end(ExecutionPolicy &&exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last,\n         BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_end(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last);\n\n// [alg.find_first_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_first_of(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last,\n              BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_first_of(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last);\n\n// [alg.adjacent_find]\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nadjacent_find(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nadjacent_find(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, BinaryPredicate pred);\n\n// [alg.count]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::difference_type>\ncount(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::difference_type>\ncount_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);\n\n// [alg.search]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nsearch(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last,\n       BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nsearch(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nsearch_n(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nsearch_n(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Size count, const T& value);\n\n// [alg.copy]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class Size, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy_n(ExecutionPolicy&& exec, ForwardIterator1 first, Size n, ForwardIterator2 result);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy_if(ExecutionPolicy&& exec,\n        ForwardIterator1 first, ForwardIterator1 last,\n        ForwardIterator2 result, Predicate pred);\n\n// [alg.swap]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nswap_ranges(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);\n\n// [alg.transform]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform( ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, UnaryOperation op );\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator>\ntransform(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator result,\n          BinaryOperation op);\n\n// [alg.replace]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreplace_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred, const T& new_value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreplace(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryPredicate, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nreplace_copy_if(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, UnaryPredicate pred,\n                const T& new_value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nreplace_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, const T& old_value,\n             const T& new_value);\n\n// [alg.fill]\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nfill( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value );\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfill_n( ExecutionPolicy&& exec, ForwardIterator first, Size count, const T& value );\n\n// [alg.generate]\ntemplate< class ExecutionPolicy, class ForwardIterator, class Generator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ngenerate( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Generator g );\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Size, class Generator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\ngenerate_n( ExecutionPolicy&& exec, ForwardIterator first, Size count, Generator g );\n\n// [alg.remove]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nremove_copy_if(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, Predicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nremove_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, const T& value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nremove_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nremove(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value);\n\n// [alg.unique]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nunique(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nunique(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nunique_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nunique_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result);\n\n// [alg.reverse]\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreverse(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last);\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nreverse_copy(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first);\n\n// [alg.rotate]\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nrotate(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator middle, ForwardIterator last);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nrotate_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 middle, ForwardIterator1 last, ForwardIterator2 result);\n\n// [alg.partitions]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_partitioned(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\npartition(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, BidirectionalIterator>\nstable_partition(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class ForwardIterator1, class ForwardIterator2, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\npartition_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, ForwardIterator1 out_true, ForwardIterator2 out_false,\n               UnaryPredicate pred);\n\n// [alg.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nsort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nsort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last);\n\n// [stable.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nstable_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nstable_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last);\n\n// [mismatch]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n         BinaryPredicate pred);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, BinaryPredicate pred);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);\n\n// [alg.equal]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, BinaryPredicate p);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate p);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);\n\n// [alg.move]\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nmove(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first);\n\n// [partial.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\npartial_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\npartial_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last);\n\n// [partial.sort.copy]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\npartial_sort_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last,\n                  Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\npartial_sort_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last);\n\n// [is.sorted]\ntemplate<class ExecutionPolicy, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nis_sorted_until(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nis_sorted_until(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_sorted(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_sorted(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\n// [alg.nth.element]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nnth_element(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp);\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nnth_element(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);\n\n// [alg.merge]\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmerge(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n      ForwardIterator d_first, Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmerge(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n      ForwardIterator d_first);\n\ntemplate< class ExecutionPolicy, class BidirectionalIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ninplace_merge(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class BidirectionalIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ninplace_merge(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last);\n\n// [includes]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nincludes(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nincludes(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);\n\n// [set.union]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_union(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n          ForwardIterator result, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_union(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2,\n          ForwardIterator2 last2, ForwardIterator result);\n\n// [set.intersection]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_intersection(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n                 ForwardIterator result, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_intersection(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n                 ForwardIterator result);\n\n// [set.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n               ForwardIterator result, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n               ForwardIterator result);\n\n// [set.symmetric.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_symmetric_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n                         ForwardIterator result, Compare comp);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_symmetric_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n                         ForwardIterator result);\n\n// [is.heap]\ntemplate< class ExecutionPolicy, class RandomAccessIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\nis_heap_until(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\nis_heap_until(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last);\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_heap(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_heap(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last);\n\n// [alg.min.max]\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmin_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmin_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator, ForwardIterator>>\nminmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator, ForwardIterator>>\nminmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\n// [alg.lex.comparison]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nlexicographical_compare(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,\n                        Compare comp);\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nlexicographical_compare(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);\n\n} // namespace std\n\n#endif /* __PSTL_glue_algorithm_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_algorithm_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_algorithm_impl_H\n#define __PSTL_glue_algorithm_impl_H\n\n#include <functional>\n\n#include \"execution_defs.h\"\n#include \"utils.h\"\n#include \"algorithm_impl.h\"\n#include \"numeric_impl.h\"  /* count and count_if use pattern_transform_reduce */\n\nnamespace std {\n\n// [alg.any_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nany_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred) {\n    using namespace pstl::internal;\n    return pattern_any_of( first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec));\n}\n\n// [alg.all_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Pred>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nall_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Pred pred) {\n    return !any_of(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::not_pred<Pred>(pred));\n}\n\n// [alg.none_of]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nnone_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred) {\n    return !any_of( std::forward<ExecutionPolicy>(exec), first, last, pred );\n}\n\n// [alg.foreach]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Function>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nfor_each(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Function f) {\n    using namespace pstl::internal;\n    pattern_walk1(\n        first, last, f,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class Function>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfor_each_n(ExecutionPolicy&& exec, ForwardIterator first, Size n, Function f) {\n    using namespace pstl::internal;\n    return pattern_walk1_n(first, n, f,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec));\n}\n\n// [alg.find]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred) {\n    using namespace pstl::internal;\n    return pattern_find_if( first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind_if_not(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,\nPredicate pred) {\n    return find_if(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::not_pred<Predicate>(pred));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfind(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,\nconst T& value) {\n    return find_if(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::equal_value<T>(value));\n}\n\n// [alg.find.end]\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_end(ExecutionPolicy &&exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_find_end(first, last, s_first, s_last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_end(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last) {\n    return find_end(std::forward<ExecutionPolicy>(exec), first, last, s_first, s_last, pstl::internal::pstl_equal());\n}\n\n// [alg.find_first_of]\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_first_of(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_find_first_of(first, last, s_first, s_last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nfind_first_of(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last) {\n    return find_first_of(std::forward<ExecutionPolicy>(exec), first, last, s_first, s_last, pstl::internal::pstl_equal());\n}\n\n// [alg.adjacent_find]\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nadjacent_find(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    using namespace pstl::internal;\n    return pattern_adjacent_find(first, last, pstl::internal::pstl_equal(),\n       is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n       is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec), /*first_semantic*/ false);\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nadjacent_find(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_adjacent_find(first, last, pred,\n       is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n       is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec), /*first_semantic*/ false);\n}\n\n// [alg.count]\n\n// Implementation note: count and count_if call the pattern directly instead of calling std::transform_reduce\n// so that we do not have to include <numeric>.\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::difference_type>\ncount(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value) {\n    typedef typename iterator_traits<ForwardIterator>::reference value_type;\n    using namespace pstl::internal;\n    return pattern_count(first, last, [&value](const value_type x) {return value==x;},\n       is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n       is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::difference_type>\ncount_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred) {\n    using namespace pstl::internal;\n    return pattern_count(first, last, pred,\n       is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n       is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\n// [alg.search]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nsearch(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_search(first, last, s_first, s_last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator1>\nsearch(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last) {\n    return search(std::forward<ExecutionPolicy>(exec), first, last, s_first, s_last, pstl::internal::pstl_equal());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nsearch_n(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_search_n(first, last, count, value, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nsearch_n(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Size count, const T& value) {\n    return search_n(std::forward<ExecutionPolicy>(exec), first, last, count, value, pstl::internal::pstl_equal());\n}\n\n// [alg.copy]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result) {\n    using namespace pstl::internal;\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec);\n\n    return pattern_walk2_brick(first, last, result, [is_vector](ForwardIterator1 begin, ForwardIterator1 end, ForwardIterator2 res){\n        return brick_copy(begin, end, res, is_vector);\n    }, is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class Size, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy_n(ExecutionPolicy&& exec, ForwardIterator1 first, Size n, ForwardIterator2 result) {\n    using namespace pstl::internal;\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec);\n\n    return pattern_walk2_brick_n(first, n, result, [is_vector](ForwardIterator1 begin, Size sz, ForwardIterator2 res){\n        return brick_copy_n(begin, sz, res, is_vector);\n    }, is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ncopy_if(ExecutionPolicy&& exec,\n        ForwardIterator1 first, ForwardIterator1 last,\n        ForwardIterator2 result, Predicate pred) {\n    using namespace pstl::internal;\n    return pattern_copy_if(\n        first, last, result, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\n// [alg.swap]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nswap_ranges(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2) {\n    using namespace pstl::internal;\n    typedef typename iterator_traits<ForwardIterator1>::reference reference_type1;\n    typedef typename iterator_traits<ForwardIterator2>::reference reference_type2;\n    return pattern_walk2(first1, last1, first2,\n        [](reference_type1 x, reference_type2 y) {\n            using std::swap;\n            swap(x, y);\n        },\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\n// [alg.transform]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform( ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, UnaryOperation op ) {\n    typedef typename iterator_traits<ForwardIterator1>::reference input_type;\n    typedef typename iterator_traits<ForwardIterator2>::reference output_type;\n    using namespace pstl::internal;\n    return pattern_walk2(first, last, result,\n        [op](input_type x, output_type y ) mutable { y = op(x);},\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator>\ntransform( ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator result, BinaryOperation op ) {\n    typedef typename iterator_traits<ForwardIterator1>::reference input1_type;\n    typedef typename iterator_traits<ForwardIterator2>::reference input2_type;\n    typedef typename iterator_traits<ForwardIterator>::reference output_type;\n    using namespace pstl::internal;\n    return pattern_walk3(first1, last1, first2, result, [op](input1_type x, input2_type y, output_type z) mutable {z = op(x,y);},\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2,ForwardIterator>(exec));\n}\n\n// [alg.replace]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreplace_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred, const T& new_value) {\n    using namespace pstl::internal;\n    typedef typename iterator_traits<ForwardIterator>::reference element_type;\n    pattern_walk1(first, last, [&pred, &new_value] (element_type elem) {\n            if (pred(elem)) {\n                elem = new_value;\n            }\n        },\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreplace(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value) {\n    replace_if(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::equal_value<T>(old_value), new_value);\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryPredicate, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nreplace_copy_if(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, UnaryPredicate pred, const T& new_value) {\n    typedef typename iterator_traits<ForwardIterator1>::reference input_type;\n    typedef typename iterator_traits<ForwardIterator2>::reference output_type;\n    using namespace pstl::internal;\n    return pattern_walk2(\n        first, last, result,\n        [pred, &new_value](input_type x, output_type y) mutable { y = pred(x) ? new_value : x; },\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nreplace_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, const T& old_value, const T& new_value) {\n    return replace_copy_if(std::forward<ExecutionPolicy>(exec), first, last, result, pstl::internal::equal_value<T>(old_value), new_value);\n}\n\n// [alg.fill]\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nfill( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value ) {\n    using namespace pstl::internal;\n    pattern_fill(first, last, value,\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nfill_n( ExecutionPolicy&& exec, ForwardIterator first, Size count, const T& value ) {\n    if(count <= 0)\n        return first;\n\n    using namespace pstl::internal;\n    return pattern_fill_n(first, count, value,\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\n// [alg.generate]\ntemplate< class ExecutionPolicy, class ForwardIterator, class Generator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ngenerate( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Generator g ) {\n    using namespace pstl::internal;\n    pattern_generate(first, last, g,\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Size, class Generator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\ngenerate_n( ExecutionPolicy&& exec, ForwardIterator first, Size count, Generator g ) {\n    if(count <= 0)\n        return first;\n\n    using namespace pstl::internal;\n    return pattern_generate_n(first, count, g,\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\n// [alg.remove]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nremove_copy_if(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, Predicate pred) {\n    return copy_if( std::forward<ExecutionPolicy>(exec), first, last, result, pstl::internal::not_pred<Predicate>(pred));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nremove_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, const T& value) {\n    return copy_if( std::forward<ExecutionPolicy>(exec), first, last, result, pstl::internal::not_equal_value<T>(value));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nremove_if(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_remove_if(first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nremove(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value) {\n    return remove_if(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::equal_value<T>(value));\n}\n\n// [alg.unique]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nunique(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_unique(first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nunique(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    return unique(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::pstl_equal());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nunique_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_unique_copy(first, last, result, pred,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nunique_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result) {\n    return unique_copy(std::forward<ExecutionPolicy>(exec), first, last, result, pstl::internal::pstl_equal() );\n}\n\n// [alg.reverse]\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nreverse(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last) {\n    using namespace pstl::internal;\n    pattern_reverse(first, last,\n        is_vectorization_preferred<ExecutionPolicy, BidirectionalIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, BidirectionalIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nreverse_copy(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last, ForwardIterator d_first) {\n    using namespace pstl::internal;\n    return pattern_reverse_copy(first, last, d_first,\n        is_vectorization_preferred<ExecutionPolicy, BidirectionalIterator, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, BidirectionalIterator, ForwardIterator>(exec));\n}\n\n// [alg.rotate]\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nrotate(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator middle, ForwardIterator last) {\n    using namespace pstl::internal;\n    return pattern_rotate(first, middle, last,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nrotate_copy(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 middle, ForwardIterator1 last, ForwardIterator2 result) {\n    using namespace pstl::internal;\n    return pattern_rotate_copy(first, middle, last, result,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\n// [alg.partitions]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_partitioned(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_is_partitioned(first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\npartition(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, UnaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_partition(first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class BidirectionalIterator, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, BidirectionalIterator>\nstable_partition(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_stable_partition(first, last, pred,\n        is_vectorization_preferred<ExecutionPolicy, BidirectionalIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, BidirectionalIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class ForwardIterator1, class ForwardIterator2, class UnaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\npartition_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, ForwardIterator1 out_true, ForwardIterator2 out_false, UnaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_partition_copy(first, last, out_true, out_false, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator, ForwardIterator1, ForwardIterator2>(exec));\n}\n\n// [alg.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nsort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    using namespace pstl::internal;\n    return pattern_sort(first, last, comp,\n        is_vectorization_preferred<ExecutionPolicy,RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,RandomAccessIterator>(exec),\n        typename std::is_move_constructible<input_type>::type());\n}\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nsort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    sort(std::forward<ExecutionPolicy>(exec), first, last, std::less<input_type>());\n}\n\n// [stable.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nstable_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_stable_sort(first, last, comp,\n        is_vectorization_preferred<ExecutionPolicy,RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,RandomAccessIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nstable_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    stable_sort(std::forward<ExecutionPolicy>(exec), first, last, std::less<input_type>());\n}\n\n// [mismatch]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred) {\n    using namespace pstl::internal;\n    return pattern_mismatch(first1, last1, first2, last2, pred,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, BinaryPredicate pred) {\n    return mismatch(std::forward<ExecutionPolicy>(exec), first1, last1, first2, std::next(first2, std::distance(first1, last1)), pred);\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) {\n    return mismatch(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, pstl::internal::pstl_equal());\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator1, ForwardIterator2>>\nmismatch(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2) {\n    return mismatch(std::forward<ExecutionPolicy>(exec), first1, last1, first2, std::next(first2, std::distance(first1, last1)));\n}\n\n// [alg.equal]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, BinaryPredicate p) {\n    using namespace pstl::internal;\n    return pattern_equal(first1, last1, first2, p,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1>(exec)\n        );\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2) {\n    return equal(std::forward<ExecutionPolicy>(exec), first1, last1, first2, pstl::internal::pstl_equal());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate p) {\n    if ( std::distance(first1, last1) == std::distance(first2, last2) )\n        return std::equal(std::forward<ExecutionPolicy>(exec), first1, last1, first2, p);\n    else\n        return false;\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nequal(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) {\n    return equal(std::forward<ExecutionPolicy>(exec), first1, last1, first2, pstl::internal::pstl_equal());\n}\n\n// [alg.move]\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nmove(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first) {\n    using namespace pstl::internal;\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec);\n\n    return pattern_walk2_brick(first, last, d_first, [is_vector](ForwardIterator1 begin, ForwardIterator1 end, ForwardIterator2 res) {\n        return brick_move(begin, end, res, is_vector);\n    }, is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\n// [partial.sort]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\npartial_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp) {\n    using namespace pstl::internal;\n    pattern_partial_sort(first, middle, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, RandomAccessIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\npartial_sort(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    partial_sort(exec, first, middle, last, std::less<input_type>());\n}\n\n// [partial.sort.copy]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\npartial_sort_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_partial_sort_copy(first, last, d_first, d_last, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator, RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator, RandomAccessIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\npartial_sort_copy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, RandomAccessIterator d_first, RandomAccessIterator d_last) {\n    return partial_sort_copy(std::forward<ExecutionPolicy>(exec), first, last, d_first, d_last, pstl::internal::pstl_less());\n}\n\n// [is.sorted]\ntemplate<class ExecutionPolicy, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nis_sorted_until(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp) {\n    using namespace pstl::internal;\n    const ForwardIterator res = pattern_adjacent_find(first, last, pstl::internal::reorder_pred<Compare>(comp),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec), /*first_semantic*/ false);\n    return res==last ? last : std::next(res);\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nis_sorted_until(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type input_type;\n    return is_sorted_until(exec, first, last, std::less<input_type>());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_sorted(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_adjacent_find(first, last, reorder_pred<Compare>(comp),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec), /*or_semantic*/ true)==last;\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_sorted(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type input_type;\n    return is_sorted(exec, first, last, std::less<input_type>());\n}\n\n// [alg.nth.element]\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nnth_element(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp) {\n    using namespace pstl::internal;\n    pattern_nth_element(first, nth, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, RandomAccessIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class RandomAccessIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nnth_element(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    nth_element(exec, first, nth, last, std::less<input_type>());\n}\n\n// [alg.merge]\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmerge(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator d_first, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_merge(first1, last1, first2, last2, d_first, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmerge(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator d_first) {\n    return merge(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, d_first, pstl::internal::pstl_less());\n}\n\ntemplate< class ExecutionPolicy, class BidirectionalIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ninplace_merge(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp) {\n    using namespace pstl::internal;\n    pattern_inplace_merge(first, middle, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, BidirectionalIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, BidirectionalIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class BidirectionalIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ninplace_merge(ExecutionPolicy&& exec, BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last) {\n    typedef typename iterator_traits<BidirectionalIterator>::value_type input_type;\n    inplace_merge(exec, first, middle, last, std::less<input_type>());\n}\n\n// [includes]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nincludes(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_includes(first1, last1, first2, last2, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nincludes(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) {\n    return includes(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, pstl::internal::pstl_less());\n}\n\n// [set.union]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_union(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_set_union(first1, last1, first2, last2, result, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_union(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2,\n    ForwardIterator2 last2, ForwardIterator result) {\n    return set_union(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, result, pstl::internal::pstl_less());\n}\n\n// [set.intersection]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_intersection(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_set_intersection(first1, last1, first2, last2, result, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_intersection(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result) {\n    return set_intersection(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, result, pstl::internal::pstl_less());\n}\n\n// [set.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_set_difference(first1, last1, first2, last2, result, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result) {\n    return set_difference(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, result, pstl::internal::pstl_less());\n}\n\n// [set.symmetric.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator, class Compare>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_symmetric_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_set_symmetric_difference(first1, last1, first2, last2, result, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2, ForwardIterator>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nset_symmetric_difference(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, ForwardIterator result) {\n    return set_symmetric_difference(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, result, pstl::internal::pstl_less());\n}\n\n// [is.heap]\ntemplate< class ExecutionPolicy, class RandomAccessIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\nis_heap_until(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_is_heap_until(first, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, RandomAccessIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, RandomAccessIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, RandomAccessIterator>\nis_heap_until(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    return is_heap_until(std::forward<ExecutionPolicy>(exec), first, last, std::less<input_type>());\n}\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_heap(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last, Compare comp) {\n    return is_heap_until(std::forward<ExecutionPolicy>(exec), first, last, comp) == last;\n}\n\ntemplate< class ExecutionPolicy, class RandomAccessIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nis_heap(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) {\n    typedef typename iterator_traits<RandomAccessIterator>::value_type input_type;\n    return is_heap(std::forward<ExecutionPolicy>(exec), first, last, std::less<input_type>());\n}\n\n// [alg.min.max]\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmin_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_min_element(first, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmin_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type input_type;\n    return min_element(std::forward<ExecutionPolicy>(exec), first, last, std::less<input_type>());\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_min_element(first, last, pstl::internal::reorder_pred<Compare>(comp),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type input_type;\n    return min_element(std::forward<ExecutionPolicy>(exec), first, last, pstl::internal::reorder_pred<std::less<input_type> >(std::less<input_type>()));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator, ForwardIterator>>\nminmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_minmax_element(first, last, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, std::pair<ForwardIterator, ForwardIterator>>\nminmax_element(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    return minmax_element(std::forward<ExecutionPolicy>(exec), first, last, std::less<value_type>());\n}\n\n// [alg.lex.comparison]\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Compare >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nlexicographical_compare(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Compare comp) {\n    using namespace pstl::internal;\n    return pattern_lexicographical_compare(first1, last1, first2, last2, comp,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate< class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2 >\npstl::internal::enable_if_execution_policy<ExecutionPolicy, bool>\nlexicographical_compare(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) {\n    return lexicographical_compare(std::forward<ExecutionPolicy>(exec), first1, last1, first2, last2, pstl::internal::pstl_less());\n}\n\n} // namespace std\n\n#endif /* __PSTL_glue_algorithm_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_execution_defs.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_execution_defs_H\n#define __PSTL_glue_execution_defs_H\n\n#include <type_traits>\n\n#include \"execution_defs.h\"\n\nnamespace std {\n    // Type trait\n    using pstl::execution::is_execution_policy;\n#if __PSTL_CPP14_VARIABLE_TEMPLATES_PRESENT\n#if __INTEL_COMPILER\n    template<class T> constexpr bool is_execution_policy_v = is_execution_policy<T>::value;\n#else\n    using pstl::execution::is_execution_policy_v;\n#endif\n#endif\n\n    namespace execution {\n        // Standard C++ policy classes\n        using pstl::execution::sequenced_policy;\n#if __PSTL_USE_PAR_POLICIES\n        using pstl::execution::parallel_policy;\n        using pstl::execution::parallel_unsequenced_policy;\n#endif\n        // Standard predefined policy instances\n        using pstl::execution::seq;\n#if __PSTL_USE_PAR_POLICIES\n        using pstl::execution::par;\n        using pstl::execution::par_unseq;\n#endif\n        // Implementation-defined names\n        // Unsequenced policy is not yet standard, but for consistency\n        // we include it into namespace std::execution as well\n        using pstl::execution::unseq;\n        using pstl::execution::unsequenced_policy;\n    } // namespace execution\n} // namespace std\n\n#endif /* __PSTL_glue_execution_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_memory_defs.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_memory_defs_H\n#define __PSTL_glue_memory_defs_H\n\n#include \"execution_defs.h\"\n\nnamespace std {\n\n// [uninitialized.copy]\n\ntemplate<class ExecutionPolicy, class InputIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_copy(ExecutionPolicy&& exec, InputIterator first, InputIterator last, ForwardIterator result);\n\ntemplate<class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_copy_n(ExecutionPolicy&& exec, InputIterator first, Size n, ForwardIterator result);\n\n// [uninitialized.move]\n\ntemplate<class ExecutionPolicy, class InputIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_move(ExecutionPolicy&& exec, InputIterator first, InputIterator last, ForwardIterator result);\n\ntemplate<class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_move_n(ExecutionPolicy&& exec, InputIterator first, Size n, ForwardIterator result);\n\n// [uninitialized.fill]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_fill(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_fill_n(ExecutionPolicy&& exec, ForwardIterator first, Size n, const T& value);\n\n// [specialized.destroy]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ndestroy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\ndestroy_n(ExecutionPolicy&& exec, ForwardIterator first, Size n);\n\n// [uninitialized.construct.default]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_default_construct(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_default_construct_n(ExecutionPolicy&& exec, ForwardIterator first, Size n);\n\n// [uninitialized.construct.value]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_value_construct(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_value_construct_n(ExecutionPolicy&& exec, ForwardIterator first, Size n);\n\n} //  namespace std\n\n#endif /* __PSTL_glue_memory_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_memory_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_memory_impl_H\n#define __PSTL_glue_memory_impl_H\n\n#include \"utils.h\"\n#include \"algorithm_impl.h\"\n\nnamespace std {\n\n// [uninitialized.copy]\n\ntemplate<class ExecutionPolicy, class InputIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_copy(ExecutionPolicy&& exec, InputIterator first, InputIterator last, ForwardIterator result) {\n    typedef typename iterator_traits<InputIterator>::value_type value_type1;\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type2;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n\n    return invoke_if_else(std::integral_constant<bool, std::is_trivial<value_type1>::value && std::is_trivial<value_type2>::value>(),\n        [&]() { return pattern_walk2_brick(first, last, result, [is_vector](InputIterator begin, InputIterator end, ForwardIterator res)\n            { return brick_copy(begin, end, res, is_vector); }, is_parallel); },\n        [&]() { return pattern_it_walk2(first, last, result, [](InputIterator it1, ForwardIterator it2)\n            { ::new (reduce_to_ptr(it2)) value_type2(*it1); }, is_vector, is_parallel); }\n    );\n}\n\ntemplate<class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_copy_n(ExecutionPolicy&& exec, InputIterator first, Size n, ForwardIterator result) {\n    typedef typename iterator_traits<InputIterator>::value_type value_type1;\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type2;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n\n    return invoke_if_else(std::integral_constant<bool, std::is_trivial<value_type1>::value && std::is_trivial<value_type2>::value>(),\n        [&]() { return pattern_walk2_brick_n(first, n, result, [is_vector](InputIterator begin, Size sz, ForwardIterator res)\n            { return brick_copy_n(begin, sz, res, is_vector); }, is_parallel); },\n        [&]() { return pattern_it_walk2_n(first, n, result, [](InputIterator it1, ForwardIterator it2)\n            { ::new (reduce_to_ptr(it2)) value_type2(*it1); }, is_vector, is_parallel); }\n    );\n}\n\n// [uninitialized.move]\n\ntemplate<class ExecutionPolicy, class InputIterator, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_move(ExecutionPolicy&& exec, InputIterator first, InputIterator last, ForwardIterator result) {\n    typedef typename iterator_traits<InputIterator>::value_type value_type1;\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type2;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n\n    return invoke_if_else(std::integral_constant<bool, std::is_trivial<value_type1>::value && std::is_trivial<value_type2>::value>(),\n        [&]() { return pattern_walk2_brick(first, last, result, [is_vector](InputIterator begin, InputIterator end, ForwardIterator res)\n            { return brick_copy(begin, end, res, is_vector);}, is_parallel); },\n        [&]() { return pattern_it_walk2(first, last, result, [](InputIterator it1, ForwardIterator it2)\n            { ::new (reduce_to_ptr(it2)) value_type2(std::move(*it1)); }, is_vector, is_parallel); }\n        );\n}\n\ntemplate<class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_move_n(ExecutionPolicy&& exec, InputIterator first, Size n, ForwardIterator result) {\n    typedef typename iterator_traits<InputIterator>::value_type value_type1;\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type2;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, InputIterator, ForwardIterator>(exec);\n\n    return invoke_if_else(std::integral_constant<bool, std::is_trivial<value_type1>::value && std::is_trivial<value_type2>::value>(),\n        [&]() { return pattern_walk2_brick_n(first, n, result, [is_vector](InputIterator begin, Size sz, ForwardIterator res)\n            { return brick_copy_n(begin, sz, res, is_vector);}, is_parallel); },\n        [&]() { return pattern_it_walk2_n(first, n, result, [](InputIterator it1, ForwardIterator it2)\n            { ::new (reduce_to_ptr(it2)) value_type2(std::move(*it1)); }, is_vector, is_parallel); }\n        );\n}\n\n// [uninitialized.fill]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_fill(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, const T& value) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    invoke_if_else(std::is_arithmetic<value_type>(),\n        [&]() { pattern_walk_brick(first, last, [&value, &is_vector](ForwardIterator begin, ForwardIterator end)\n            { brick_fill(begin, end, value_type(value), is_vector);}, is_parallel); },\n        [&]() { pattern_it_walk1(first, last, [&value](ForwardIterator it)\n            { ::new (reduce_to_ptr(it)) value_type(value); }, is_vector, is_parallel); }\n        );\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class Size, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_fill_n(ExecutionPolicy&& exec, ForwardIterator first, Size n, const T& value) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    return invoke_if_else(std::is_arithmetic<value_type>(),\n        [&]() { return pattern_walk_brick_n(first, n, [&value, &is_vector](ForwardIterator begin, Size count)\n            { return brick_fill_n(begin, count, value_type(value), is_vector);}, is_parallel); },\n        [&]() { return pattern_it_walk1_n(first, n, [&value](ForwardIterator it)\n            { ::new (reduce_to_ptr(it)) value_type(value); }, is_vector, is_parallel); }\n        );\n}\n\n// [specialized.destroy]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\ndestroy(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    invoke_if_not(std::is_trivially_destructible<value_type>(),\n        [&]() { pattern_it_walk1(first, last, [](ForwardIterator it){ (*it).~value_type(); }, is_vector, is_parallel); }\n        );\n}\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\ndestroy_n(ExecutionPolicy&& exec, ForwardIterator first, Size n) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    return invoke_if_else(std::is_trivially_destructible<value_type>(),\n        [&]() { return std::next(first, n);},\n        [&]() { return pattern_it_walk1_n(first, n, [](ForwardIterator it){ (*it).~value_type(); }, is_vector, is_parallel); }\n        );\n}\n\n// [uninitialized.construct.default]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_default_construct(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    invoke_if_not(std::is_trivial<value_type>(),\n        [&]() { pattern_it_walk1(first, last, [](ForwardIterator it) { ::new (reduce_to_ptr(it)) value_type; }, is_vector, is_parallel); });\n}\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_default_construct_n(ExecutionPolicy&& exec, ForwardIterator first, Size n) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    return invoke_if_else(std::is_trivial<value_type>(),\n        [&]() { return std::next(first, n);},\n        [&]() { return pattern_it_walk1_n(first, n, [](ForwardIterator it)\n            { ::new (reduce_to_ptr(it)) value_type; }, is_vector, is_parallel); }\n        );\n}\n\n// [uninitialized.construct.value]\n\ntemplate <class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, void>\nuninitialized_value_construct(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    invoke_if_else(std::is_trivial<value_type>(),\n        [&]() { pattern_walk_brick(first, last, [is_vector](ForwardIterator begin, ForwardIterator end)\n            { brick_fill(begin, end, value_type(), is_vector);}, is_parallel); },\n        [&]() { pattern_it_walk1(first, last, [](ForwardIterator it)\n            { ::new (reduce_to_ptr(it)) value_type(); }, is_vector, is_parallel); }\n        );\n}\n\ntemplate <class ExecutionPolicy, class ForwardIterator, class Size>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator>\nuninitialized_value_construct_n(ExecutionPolicy&& exec, ForwardIterator first, Size n) {\n    typedef typename iterator_traits<ForwardIterator>::value_type value_type;\n    using namespace pstl::internal;\n\n    const auto is_parallel = is_parallelization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n    const auto is_vector = is_vectorization_preferred<ExecutionPolicy, ForwardIterator>(exec);\n\n    return invoke_if_else(std::is_trivial<value_type>(),\n        [&]() { return pattern_walk_brick_n(first, n, [is_vector](ForwardIterator begin, Size count)\n            { return brick_fill_n(begin, count, value_type(), is_vector);}, is_parallel); },\n        [&]() { return pattern_it_walk1_n(first, n, [](ForwardIterator it)\n            { ::new (reduce_to_ptr(it)) value_type(); }, is_vector, is_parallel); }\n        );\n}\n\n} // namespace std\n\n#endif /* __PSTL_glue_memory_imple_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_numeric_defs.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_numeric_defs_H\n#define __PSTL_glue_numeric_defs_H\n\n#include \"execution_defs.h\"\n\nnamespace std {\n\n// [reduce]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init, BinaryOperation binary_op);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init);\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::value_type>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);\n\ntemplate <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, T init);\n\ntemplate <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation1, class BinaryOperation2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, T init, BinaryOperation1 binary_op1,\n                 BinaryOperation2 binary_op2);\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T, class BinaryOperation, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op);\n\n// [exclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nexclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation>\nForwardIterator2 exclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init,\n                                BinaryOperation binary_op);\n\n// [inclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op, T init);\n\n// [transform.exclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_exclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init,\n                         BinaryOperation binary_op, UnaryOperation unary_op);\n\n// [transform.inclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class UnaryOperation, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_inclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op,\n                         UnaryOperation unary_op, T init);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_inclusive_scan(ExecutionPolicy&& exec,  ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op,\n                         UnaryOperation unary_op);\n\n// [adjacent.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nadjacent_difference(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op);\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nadjacent_difference(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first);\n\n} // namespace std\n\n#endif /* __PSTL_glue_numeric_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/glue_numeric_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_glue_numeric_impl_H\n#define __PSTL_glue_numeric_impl_H\n\n#include <functional>\n\n#include \"utils.h\"\n#include \"numeric_impl.h\"\n\nnamespace std {\n\n// [reduce]\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init, BinaryOperation binary_op) {\n    return transform_reduce(std::forward<ExecutionPolicy>(exec), first, last, init, binary_op, pstl::internal::no_op());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init) {\n    return transform_reduce(std::forward<ExecutionPolicy>(exec), first, last, init, std::plus<T>(), pstl::internal::no_op());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,typename iterator_traits<ForwardIterator>::value_type>\nreduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last) {\n    typedef typename iterator_traits<ForwardIterator>::value_type T;\n    return transform_reduce(std::forward<ExecutionPolicy>(exec), first, last, T{}, std::plus<T>(), pstl::internal::no_op());\n}\n\n// [transform.reduce]\n\ntemplate <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, T init) {\n    typedef typename iterator_traits<ForwardIterator1>::value_type input_type;\n    using namespace pstl::internal;\n    return pattern_transform_reduce(first1, last1, first2, init, std::plus<T>(), std::multiplies<input_type>(),\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation1, class BinaryOperation2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2) {\n    using namespace pstl::internal;\n    return pattern_transform_reduce(first1, last1, first2, init, binary_op1, binary_op2,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator, class T, class BinaryOperation, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,T>\ntransform_reduce(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op) {\n    using namespace pstl::internal;\n    return pattern_transform_reduce(first, last, init, binary_op, unary_op,\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator>(exec));\n}\n\n// [exclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\nexclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init) {\n    return transform_exclusive_scan(std::forward<ExecutionPolicy>(exec), first, last, result, init, std::plus<T>(), pstl::internal::no_op());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation>\nForwardIterator2 exclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init, BinaryOperation binary_op) {\n    return transform_exclusive_scan(std::forward<ExecutionPolicy>(exec), first, last, result, init, binary_op, pstl::internal::no_op());\n}\n\n// [inclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result) {\n    typedef typename iterator_traits<ForwardIterator1>::value_type input_type;\n    return transform_inclusive_scan(std::forward<ExecutionPolicy>(exec), first, last, result, std::plus<input_type>(), pstl::internal::no_op());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op) {\n    return transform_inclusive_scan(std::forward<ExecutionPolicy>(exec), first, last, result, binary_op, pstl::internal::no_op());\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ninclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op, T init) {\n    return transform_inclusive_scan(std::forward<ExecutionPolicy>(exec), first, last, result, binary_op, pstl::internal::no_op(), init);\n}\n\n// [transform.exclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T, class BinaryOperation, class UnaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_exclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, T init, BinaryOperation binary_op, UnaryOperation unary_op) {\n    using namespace pstl::internal;\n    return pattern_transform_scan(\n        first, last, result, unary_op, init, binary_op,\n        /*inclusive=*/std::false_type(),\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec));\n}\n\n// [transform.inclusive.scan]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class UnaryOperation, class T>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_inclusive_scan(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op, UnaryOperation unary_op, T init) {\n    using namespace pstl::internal;\n    return pattern_transform_scan(\n        first, last, result, unary_op, init, binary_op,\n        /*inclusive=*/std::true_type(),\n        is_vectorization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy,ForwardIterator1,ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy,ForwardIterator2>\ntransform_inclusive_scan(ExecutionPolicy&& exec,  ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, BinaryOperation binary_op, UnaryOperation unary_op) {\n    if( first!=last ) {\n        auto tmp = unary_op(*first);\n        *result = tmp;\n        return transform_inclusive_scan(std::forward<ExecutionPolicy>(exec), ++first, last, ++result, binary_op, unary_op, tmp);\n    } else {\n        return result;\n    }\n}\n\n// [adjacent.difference]\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nadjacent_difference(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op) {\n    using namespace pstl::internal;\n\n    if (first == last)\n        return d_first;\n\n    return pattern_adjacent_difference(first, last, d_first, op,\n        is_vectorization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec),\n        is_parallelization_preferred<ExecutionPolicy, ForwardIterator1, ForwardIterator2>(exec));\n}\n\ntemplate<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>\npstl::internal::enable_if_execution_policy<ExecutionPolicy, ForwardIterator2>\nadjacent_difference(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first) {\n    typedef typename iterator_traits<ForwardIterator1>::value_type value_type;\n    return adjacent_difference(std::forward<ExecutionPolicy>(exec), first, last, d_first, std::minus<value_type>());\n}\n\n} // namespace std\n\n#endif /* __PSTL_glue_numeric_impl_H_ */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/memory_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_memory_impl_H\n#define __PSTL_memory_impl_H\n\n#include <iterator>\n\n#include \"unseq_backend_simd.h\"\n\nnamespace pstl {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// uninitialized_move\n//------------------------------------------------------------------------\n\ntemplate<class InputIterator, class ForwardIterator>\nForwardIterator brick_uninitialized_move(InputIterator first, InputIterator last, ForwardIterator result, /*vector=*/std::false_type) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator>::value_type value_type2;\n    for (; first != last; ++first, ++result) {\n        ::new (reduce_to_ptr(result)) value_type2(std::move(*first));\n    }\n    return result;\n}\n\ntemplate<class InputIterator, class ForwardIterator>\nForwardIterator brick_uninitialized_move(InputIterator first, InputIterator last, ForwardIterator result, /*vector=*/std::true_type) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator>::value_type value_type2;\n    return unseq_backend::simd_it_walk_2(first, last - first, result,\n        [](InputIterator first1, ForwardIterator first2) {::new (reduce_to_ptr(first2)) value_type2(std::move(*first1));\n    });\n}\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_memory_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/numeric_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_numeric_impl_H\n#define __PSTL_numeric_impl_H\n\n#include <iterator>\n#include <type_traits>\n#include <numeric>\n\n#include \"pstl_config.h\"\n#include \"execution_impl.h\"\n#include \"unseq_backend_simd.h\"\n#include \"bricks_impl.h\"\n\n#if __PSTL_USE_PAR_POLICIES\n    #include \"parallel_backend.h\"\n#endif\n\nnamespace pstl {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// transform_reduce (version with two binary functions, according to draft N4659)\n//------------------------------------------------------------------------\n\ntemplate< class T, class BinaryOperation1, class IsArithmeticIsVector>\nstruct brick_transform_reduce_imp {\n\n    template<class InputIterator1, class InputIterator2, class BinaryOperation2>\n    T operator()(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2) noexcept {\n        return std::inner_product(first1, last1, first2, init, binary_op1, binary_op2);\n    }\n\n    template< class InputIterator, class UnaryOperation>\n    T operator()(InputIterator first, InputIterator last, T init, BinaryOperation1 binary_op, UnaryOperation unary_op) noexcept {\n        for (; first != last; ++first) {\n            init = binary_op(init, unary_op(*first));\n        }\n        return init;\n    }\n};\n\ntemplate< class T>\nstruct brick_transform_reduce_imp<T, std::plus<T>, /*IsArithmeticIsVector*/ std::true_type> {\n\n    template<class InputIterator1, class InputIterator2, class BinaryOperation2>\n    T operator()(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, std::plus<T>, BinaryOperation2 binary_op2) noexcept {\n        return unseq_backend::simd_transform_reduce(first1, last1-first1, first2, init, binary_op2);\n    }\n\n    template< class InputIterator, class UnaryOperation>\n    T operator()(InputIterator first, InputIterator last, T init, std::plus<T>, UnaryOperation unary_op) noexcept {\n        return unseq_backend::simd_transform_reduce(first, last-first, init, unary_op);\n    }\n};\n\ntemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>\nT brick_transform_reduce(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2, /*is_vector=*/std::true_type) noexcept {\n\n    return brick_transform_reduce_imp< T, BinaryOperation1, std::integral_constant<bool, std::is_arithmetic<T>::value> >()(first1, last1, first2, init, binary_op1, binary_op2);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>\nT brick_transform_reduce(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2, /*is_vector=*/std::false_type) noexcept {\n\n    return brick_transform_reduce_imp< T, BinaryOperation1, std::false_type >()(first1, last1, first2, init, binary_op1, binary_op2);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2, class IsVector>\nT pattern_transform_reduce(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_transform_reduce(first1, last1, first2, init, binary_op1, binary_op2, is_vector);\n}\n\ntemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2, class IsVector>\nT pattern_transform_reduce(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2, IsVector is_vector,  /*is_parallel=*/std::true_type) noexcept {\n    return except_handler([&]() {\n        return par_backend::parallel_transform_reduce(first1, last1,\n            [first1, first2, binary_op2](InputIterator1 i) mutable { return binary_op2(*i, *(first2 + (i - first1))); },\n            init,\n            binary_op1, // Combine\n            [first1, first2, binary_op1, binary_op2, is_vector](InputIterator1 i, InputIterator1 j, T init) -> T {\n            return brick_transform_reduce(i, j, first2 + (i - first1),\n                init, binary_op1, binary_op2, is_vector);\n        });\n    });\n}\n\n//------------------------------------------------------------------------\n// transform_reduce (version with unary and binary functions)\n//------------------------------------------------------------------------\n\ntemplate< class InputIterator, class T, class UnaryOperation, class BinaryOperation >\nT brick_transform_reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op, /*is_vector=*/std::true_type) noexcept {\n    return brick_transform_reduce_imp< T, BinaryOperation, std::integral_constant<bool, std::is_arithmetic<T>::value> >()(first, last, init, binary_op, unary_op);\n}\n\ntemplate< class InputIterator, class T, class BinaryOperation, class UnaryOperation >\nT brick_transform_reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op, /*is_vector=*/std::false_type) noexcept {\n\n    return brick_transform_reduce_imp< T, BinaryOperation, std::false_type >()(first, last, init, binary_op, unary_op);\n}\n\ntemplate<class InputIterator, class T, class BinaryOperation, class UnaryOperation, class IsVector>\nT pattern_transform_reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op, IsVector is_vector, /*is_parallel=*/std::false_type ) noexcept {\n    return brick_transform_reduce(first, last, init, binary_op, unary_op, is_vector);\n}\n\ntemplate<class InputIterator, class T, class BinaryOperation, class UnaryOperation, class IsVector>\nT pattern_transform_reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op, UnaryOperation unary_op, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    return except_handler([&]() {\n        return par_backend::parallel_transform_reduce(first, last,\n            [unary_op](InputIterator i) mutable {return unary_op(*i); },\n            init,\n            binary_op,\n            [unary_op, binary_op, is_vector](InputIterator i, InputIterator j, T init) {\n            return brick_transform_reduce(i, j, init, binary_op, unary_op, is_vector);\n        });\n    });\n}\n\n\n//------------------------------------------------------------------------\n// transform_exclusive_scan\n//\n// walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...)\n//------------------------------------------------------------------------\n\n// Exclusive form\ntemplate<class InputIterator, class OutputIterator, class UnaryOperation, class T, class BinaryOperation>\nstd::pair<OutputIterator,T> brick_transform_scan(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation unary_op, T init, BinaryOperation binary_op, /*Inclusive*/ std::false_type) noexcept {\n    for(; first!=last; ++first, ++result ) {\n        *result = init;\n__PSTL_PRAGMA_FORCEINLINE\n        init = binary_op(init,unary_op(*first));\n    }\n    return std::make_pair(result,init);\n}\n\n// Inclusive form\ntemplate<class InputIterator, class OutputIterator, class UnaryOperation, class T, class BinaryOperation>\nstd::pair<OutputIterator,T> brick_transform_scan(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation unary_op, T init, BinaryOperation binary_op, /*Inclusive*/std::true_type) noexcept {\n    for(; first!=last; ++first, ++result ) {\n__PSTL_PRAGMA_FORCEINLINE\n        init = binary_op(init,unary_op(*first));\n        *result = init;\n    }\n    return std::make_pair(result,init);\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryOperation, class T, class BinaryOperation, class Inclusive, class IsVector>\nOutputIterator pattern_transform_scan(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation unary_op, T init, BinaryOperation binary_op, Inclusive, IsVector is_vector, /*is_parallel=*/std::false_type ) noexcept {\n    return brick_transform_scan(first, last, result, unary_op, init, binary_op, Inclusive()).first;\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryOperation, class T, class BinaryOperation, class Inclusive, class IsVector>\ntypename std::enable_if<!std::is_floating_point<T>::value, OutputIterator>::type\npattern_transform_scan(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation unary_op, T init, BinaryOperation binary_op, Inclusive, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;\n\n    return except_handler([=]() {\n        par_backend::parallel_transform_scan(\n            last - first,\n            [first, unary_op](difference_type i) mutable {return unary_op(first[i]); },\n            init,\n            binary_op,\n            [first, unary_op, binary_op, is_vector](difference_type i, difference_type j, T init) {\n                return brick_transform_reduce(first + i, first + j, init, binary_op, unary_op, is_vector);\n            },\n            [first, unary_op, binary_op, result](difference_type i, difference_type j, T init) {\n                return brick_transform_scan(first + i, first + j, result + i, unary_op, init, binary_op, Inclusive()).second;\n            },\n            result);\n        return result + (last - first);\n    });\n}\n\ntemplate<class InputIterator, class OutputIterator, class UnaryOperation, class T, class BinaryOperation, class Inclusive, class IsVector>\ntypename std::enable_if<std::is_floating_point<T>::value, OutputIterator>::type\npattern_transform_scan(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation unary_op, T init, BinaryOperation binary_op, Inclusive, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;\n    difference_type n = last - first;\n\n    if (n <= 0) {\n        return result;\n    }\n    return except_handler([=, &binary_op]() {\n        par_backend::parallel_strict_scan(n, init,\n            [first, unary_op, binary_op, result](difference_type i, difference_type len) {\n                return brick_transform_scan(first + i, first + (i + len), result + i, unary_op, T{}, binary_op, Inclusive()).second;\n            },\n            binary_op,\n            [result, &binary_op](difference_type i, difference_type len, T initial) {\n                return *(std::transform(result + i, result + i + len, result + i,\n                    [&initial, &binary_op](const T& x) {\n__PSTL_PRAGMA_FORCEINLINE\n                        return binary_op(initial, x);\n            }) - 1);\n        },\n        [](T res) { });\n        return result + (last - first);\n    });\n}\n\n\n//------------------------------------------------------------------------\n// adjacent_difference\n//------------------------------------------------------------------------\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\nForwardIterator2 brick_adjacent_difference(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op, /*is_vector=*/std::false_type) noexcept {\n    return std::adjacent_difference(first, last, d_first, op);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryOperation>\nForwardIterator2 brick_adjacent_difference(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op, /*is_vector=*/std::true_type) noexcept {\n    assert(first != last);\n    typedef typename std::iterator_traits<ForwardIterator1>::value_type T;\n    T val(*first);\n    *d_first = val;\n    unseq_backend::simd_it_walk_2(first, (last - first) - 1, d_first + 1,\n        [&op](ForwardIterator1 in, ForwardIterator2 out) {\n            T val(op(*(in + 1), *in));\n            *out = val;\n        });\n    return d_first + (last - first);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class IsVector>\nForwardIterator2 pattern_adjacent_difference(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op, IsVector is_vector, /*is_parallel=*/std::false_type) noexcept {\n    return brick_adjacent_difference(first, last, d_first, op, is_vector);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class IsVector>\nForwardIterator2 pattern_adjacent_difference(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 d_first, BinaryOperation op, IsVector is_vector, /*is_parallel=*/std::true_type) {\n    assert(first != last);\n    typedef typename std::iterator_traits<ForwardIterator1>::value_type T;\n    T val(*first);\n    *d_first = val;\n    par_backend::parallel_for(first, last - 1, [&op, is_vector, d_first, first](ForwardIterator1 b, ForwardIterator1 e) {\n        ForwardIterator2 d_b = d_first + (b - first);\n        brick_it_walk2(b, e, d_b + 1, [&op](ForwardIterator1 in, ForwardIterator2 out) {\n            T val(op(*(in + 1), *in));\n            *out = val;\n        }, is_vector);\n    });\n    return d_first + (last - first);\n}\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_numeric_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/parallel_backend.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_parallel_backend_H\n#define __PSTL_parallel_backend_H\n\n#if __PSTL_PAR_BACKEND_TBB\n    #include \"parallel_backend_tbb.h\"\n#else\n    __PSTL_PRAGMA_MESSAGE(\"Parallel backend was not specified\");\n#endif\n\n#endif /* __PSTL_parallel_backend_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/parallel_backend_tbb.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_parallel_backend_tbb_H\n#define __PSTL_parallel_backend_tbb_H\n\n#include <cassert>\n\n#include \"parallel_backend_utils.h\"\n\n// Bring in minimal required subset of Intel TBB\n#include <tbb/blocked_range.h>\n#include <tbb/parallel_for.h>\n#include <tbb/parallel_reduce.h>\n#include <tbb/parallel_scan.h>\n#include <tbb/parallel_invoke.h>\n#include <tbb/task_arena.h>\n#include <tbb/tbb_allocator.h>\n\n#if TBB_INTERFACE_VERSION < 10000\n#error Intel(R) Threading Building Blocks 2018 is required; older versions are not supported.\n#endif\n\nnamespace pstl {\nnamespace par_backend {\n\n//! Raw memory buffer with automatic freeing and no exceptions.\n/** Some of our algorithms need to start with raw memory buffer,\nnot an initialize array, because initialization/destruction\nwould make the span be at least O(N). */\n// tbb::allocator can improve performance in some cases.\ntemplate<typename T>\nclass buffer {\n    tbb::tbb_allocator<T> allocator;\n    T* ptr;\n    const std::size_t buf_size;\n    buffer(const buffer&) = delete;\n    void operator=(const buffer&) = delete;\npublic:\n    //! Try to obtain buffer of given size to store objects of T type\n    buffer(std::size_t n) : allocator(), ptr(allocator.allocate(n)), buf_size(n) {}\n    //! True if buffer was successfully obtained, zero otherwise.\n    operator bool() const { return ptr != NULL; }\n    //! Return pointer to buffer, or  NULL if buffer could not be obtained.\n    T* get() const { return ptr; }\n    //! Destroy buffer\n    ~buffer() { allocator.deallocate(ptr, buf_size); }\n};\n\n// Wrapper for tbb::task\ninline void cancel_execution() {\n    tbb::task::self().group()->cancel_group_execution();\n}\n\n//------------------------------------------------------------------------\n// parallel_for\n//------------------------------------------------------------------------\n\ntemplate <class Index, class RealBody>\nclass parallel_for_body {\npublic:\n    parallel_for_body( const RealBody& body) : my_body( body ) { }\n    parallel_for_body(const parallel_for_body& body): my_body(body.my_body) { }\n    void operator()(const tbb::blocked_range<Index>& range) const {\n        my_body(range.begin(), range.end());\n    }\nprivate:\n    RealBody my_body;\n};\n\n//! Evaluation of brick f[i,j) for each subrange [i,j) of [first,last)\n// wrapper over tbb::parallel_for\ntemplate<class Index, class F>\nvoid parallel_for(Index first, Index last, F f) {\n    tbb::this_task_arena::isolate([=]() {\n        tbb::parallel_for(tbb::blocked_range<Index>(first, last), parallel_for_body<Index, F>(f));\n    });\n}\n\n//! Evaluation of brick f[i,j) for each subrange [i,j) of [first,last)\n// wrapper over tbb::parallel_reduce\ntemplate<class Value, class Index, typename RealBody, typename Reduction>\nValue parallel_reduce(Index first, Index last, const Value& identity, const RealBody& real_body, const Reduction& reduction) {\n    return tbb::this_task_arena::isolate([first, last, &identity, &real_body, &reduction]()->Value {\n        return tbb::parallel_reduce(tbb::blocked_range<Index>(first, last), identity,\n            [real_body](const tbb::blocked_range<Index>& r, const Value& value)-> Value {\n            return real_body(r.begin(), r.end(), value);\n        },\n        reduction);\n    });\n}\n\n//------------------------------------------------------------------------\n// parallel_transform_reduce\n//\n// Notation:\n//      r(i,j,init) returns reduction of init with reduction over [i,j)\n//      u(i) returns f(i,i+1,identity) for a hypothetical left identity element of r\n//      c(x,y) combines values x and y that were the result of r or u\n//------------------------------------------------------------------------\n\ntemplate<class Index, class U, class T, class C, class R>\nstruct par_trans_red_body {\n    alignas(T) char sum_storage[sizeof(T)]; // Holds generalized non-commutative sum when has_sum==true\n    R brick_reduce;                 // Most likely to have non-empty layout\n    U u;\n    C combine;\n    bool has_sum;             // Put last to minimize size of class\n    T& sum() {\n        __TBB_ASSERT(has_sum, \"sum expected\");\n        return *(T*)sum_storage;\n    }\n    par_trans_red_body( U u_, T init, C c_, R r_) :\n        brick_reduce(r_),\n        u(u_),\n        combine(c_),\n        has_sum(true) {\n        new(sum_storage) T(init);\n    }\n    par_trans_red_body( par_trans_red_body& left, tbb::split ) :\n        brick_reduce(left.brick_reduce),\n        u(left.u),\n        combine(left.combine),\n        has_sum(false)\n    {}\n    ~par_trans_red_body() {\n        // 17.6.5.12 tells us to not worry about catching exceptions from destructors.\n        if( has_sum )\n            sum().~T();\n    }\n    void join(par_trans_red_body& rhs) {\n        sum() = combine(sum(), rhs.sum());\n    }\n    void operator()(const tbb::blocked_range<Index>& range) {\n        Index i = range.begin();\n        Index j = range.end();\n        if(!has_sum) {\n        __TBB_ASSERT(range.size() > 1,\"there should be at least 2 elements\");\n            new(&sum_storage) T(combine(u(i), u(i+1))); // The condition i+1 < j is provided by the grain size of 3\n            has_sum = true;\n            std::advance(i,2);\n            if(i==j)\n                return;\n        }\n        sum() = brick_reduce(i, j, sum());\n    }\n};\n\ntemplate<class Index, class U, class T, class C, class R>\nT parallel_transform_reduce( Index first, Index last, U u, T init, C combine, R brick_reduce) {\n    par_trans_red_body<Index, U, T, C, R> body(u, init, combine, brick_reduce);\n    // The grain size of 3 is used in order to provide mininum 2 elements for each body\n    tbb::this_task_arena::isolate([first, last, &body]() {\n        tbb::parallel_reduce(tbb::blocked_range<Index>(first, last, 3), body);\n    });\n    return body.sum();\n}\n\n//------------------------------------------------------------------------\n// parallel_scan\n//------------------------------------------------------------------------\n\ntemplate <class Index, class U, class T, class C, class R, class S>\nclass trans_scan_body {\n    alignas(T) char sum_storage[sizeof(T)]; // Holds generalized non-commutative sum when has_sum==true\n    R brick_reduce;                 // Most likely to have non-empty layout\n    U u;\n    C combine;\n    S brick_scan;\n    bool has_sum;             // Put last to minimize size of class\npublic:\n    trans_scan_body(U u_, T init, C combine_, R reduce_, S brick_scan_) :\n        brick_reduce(reduce_),\n        u(u_),\n        combine(combine_),\n        brick_scan(brick_scan_),\n        has_sum(true) {\n        new(sum_storage) T(init);\n    }\n\n    trans_scan_body( trans_scan_body& b, tbb::split ) :\n        brick_reduce(b.brick_reduce),\n        u(b.u),\n        combine(b.combine),\n        brick_scan(b.brick_scan),\n        has_sum(false) {}\n\n    ~trans_scan_body() {\n        // 17.6.5.12 tells us to not worry about catching exceptions from destructors.\n        if( has_sum )\n            sum().~T();\n    }\n\n    T& sum() const {\n        __TBB_ASSERT(has_sum,\"sum expected\");\n        return *(T*)sum_storage;\n    }\n\n    void operator()(const tbb::blocked_range<Index>& range, tbb::pre_scan_tag) {\n        Index i = range.begin();\n        Index j = range.end();\n        if(!has_sum) {\n            new(&sum_storage) T(u(i));\n            has_sum = true;\n            ++i;\n            if(i==j)\n                return;\n        }\n        sum() = brick_reduce(i, j, sum());\n    }\n\n    void operator()(const tbb::blocked_range<Index>& range, tbb::final_scan_tag) {\n        sum() = brick_scan(range.begin(), range.end(), sum());\n    }\n\n    void reverse_join(trans_scan_body& a) {\n        if(has_sum) {\n            sum() = combine(a.sum(), sum());\n        }\n        else {\n            new(&sum_storage) T(a.sum());\n            has_sum = true;\n        }\n    }\n\n    void assign(trans_scan_body& b) {\n        sum() = b.sum();\n    }\n};\n\ntemplate<typename Index>\nIndex split(Index m) {\n    Index k = 1;\n    while( 2*k<m ) k*=2;\n    return k;\n}\n\n//------------------------------------------------------------------------\n// parallel_strict_scan\n//------------------------------------------------------------------------\n\n\ntemplate<typename Index, typename T, typename R, typename C>\nvoid upsweep(Index i, Index m, Index tilesize, T* r, Index lastsize, R reduce, C combine) {\n    if (m == 1)\n        r[0] = reduce(i*tilesize, lastsize);\n    else {\n        Index k = split(m);\n        tbb::parallel_invoke(\n            [=] {upsweep(i, k, tilesize, r, tilesize, reduce, combine); },\n            [=] {upsweep(i + k, m - k, tilesize, r + k, lastsize, reduce, combine); }\n        );\n        if (m == 2 * k)\n            r[m - 1] = combine(r[k - 1], r[m - 1]);\n    }\n}\n\ntemplate<typename Index, typename T, typename C, typename S>\nvoid downsweep(Index i, Index m, Index tilesize, T* r, Index lastsize, T initial, C combine, S scan) {\n    if (m == 1)\n        scan(i*tilesize, lastsize, initial);\n    else {\n        const Index k = split(m);\n        tbb::parallel_invoke(\n            [=] {downsweep(i, k, tilesize, r, tilesize, initial, combine, scan); },\n            // Assumes that combine never throws.\n            [=, &combine] {downsweep(i + k, m - k, tilesize, r + k, lastsize, combine(initial, r[k - 1]), combine, scan); }\n        );\n    }\n}\n\n// Adapted from Intel(R) Cilk(TM) version from cilkpub.\n// Let i:len denote a counted interval of length n starting at i.  s denotes a generalized-sum value.\n// Expected actions of the functors are:\n//     reduce(i,len) -> s  -- return reduction value of i:len.\n//     combine(s1,s2) -> s -- return merged sum\n//     apex(s) -- do any processing necessary between reduce and scan.\n//     scan(i,len,initial) -- perform scan over i:len starting with initial.\n// The initial range 0:n is partitioned into consecutive subranges.\n// reduce and scan are each called exactly once per subrange.\n// Thus callers can rely upon side effects in reduce.\n// combine must not throw an exception.\n// apex is called exactly once, after all calls to reduce and before all calls to scan.\n// For example, it's useful for allocating a buffer used by scan but whose size is the sum of all reduction values.\n// T must have a trivial constructor and destructor.\ntemplate<typename Index, typename T, typename R, typename C, typename S, typename A>\nvoid parallel_strict_scan(Index n, T initial, R reduce, C combine, S scan, A apex) {\n    tbb::this_task_arena::isolate([=, &combine]() {\n        if (n > 1) {\n            Index p = tbb::this_task_arena::max_concurrency();\n            const Index slack = 4;\n            Index tilesize = (n - 1) / (slack*p) + 1;\n            Index m = (n - 1) / tilesize;\n            buffer<T> buf(m + 1);\n            if (buf) {\n                T* r = buf.get();\n                upsweep(Index(0), Index(m + 1), tilesize, r, n - m*tilesize, reduce, combine);\n                // When apex is a no-op and combine has no side effects, a good optimizer\n                // should be able to eliminate all code between here and apex.\n                // Alternatively, provide a default value for apex that can be\n                // recognized by metaprogramming that conditionlly executes the following.\n                size_t k = m + 1;\n                T t = r[k - 1];\n                while ((k &= k - 1))\n                    t = combine(r[k - 1], t);\n                apex(combine(initial, t));\n                downsweep(Index(0), Index(m + 1), tilesize, r, n - m*tilesize, initial, combine, scan);\n                return;\n            }\n        }\n        // Fewer than 2 elements in sequence, or out of memory.  Handle has single block.\n        T sum = initial;\n        if (n)\n            sum = combine(sum, reduce(Index(0), n));\n        apex(sum);\n        if (n)\n            scan(Index(0), n, initial);\n    });\n}\n\ntemplate<typename Index, typename U, typename T, typename C, typename R, typename S, typename OutputIterator>\nT parallel_transform_scan(Index n, U u, T init, C combine, R brick_reduce, S brick_scan, OutputIterator) {\n    if (n <= 0) {\n        return init;\n    }\n\n    trans_scan_body<Index, U, T, C, R, S> body(u, init, combine, brick_reduce, brick_scan);\n    auto range = tbb::blocked_range<Index>(0, n);\n    tbb::this_task_arena::isolate([range, &body]() {\n        tbb::parallel_scan(range, body);\n    });\n    return body.sum();\n}\n\n//------------------------------------------------------------------------\n// parallel_stable_sort\n//------------------------------------------------------------------------\n\n//------------------------------------------------------------------------\n// stable_sort utilities\n//\n// These are used by parallel implementations but do not depend on them.\n//------------------------------------------------------------------------\n\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2, typename RandomAccessIterator3, typename Compare, typename Cleanup, typename LeafMerge>\nclass merge_task: public tbb::task {\n    /*override*/tbb::task* execute();\n    RandomAccessIterator1 xs, xe;\n    RandomAccessIterator2 ys, ye;\n    RandomAccessIterator3 zs;\n    Compare comp;\n    Cleanup cleanup;\n    LeafMerge leaf_merge;\npublic:\n    merge_task( RandomAccessIterator1 xs_, RandomAccessIterator1 xe_,\n                RandomAccessIterator2 ys_, RandomAccessIterator2 ye_,\n                RandomAccessIterator3 zs_,\n                Compare comp_, Cleanup cleanup_, LeafMerge leaf_merge_) :\n        xs(xs_), xe(xe_), ys(ys_), ye(ye_), zs(zs_), comp(comp_), cleanup(cleanup_), leaf_merge(leaf_merge_)\n    {}\n};\n\nconst size_t MERGE_CUT_OFF = 2000;\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2, typename RandomAccessIterator3, typename Compare, typename Cleanup, typename LeafMerge>\ntbb::task* merge_task<RandomAccessIterator1, RandomAccessIterator2, RandomAccessIterator3, Compare, Cleanup, LeafMerge>::execute() {\n    const auto n = (xe-xs) + (ye-ys);\n    if(n <= MERGE_CUT_OFF) {\n        leaf_merge(xs, xe, ys, ye, zs, comp);\n\n        //we clean the buffer one time on last step of the sort\n        cleanup(xs, xe);\n        cleanup(ys, ye);\n        return NULL;\n    }\n    else {\n        RandomAccessIterator1 xm;\n        RandomAccessIterator2 ym;\n        if(xe-xs < ye-ys) {\n            ym = ys+(ye-ys)/2;\n            xm = std::upper_bound(xs, xe, *ym, comp);\n        }\n        else {\n            xm = xs+(xe-xs)/2;\n            ym = std::lower_bound(ys, ye, *xm, comp);\n        }\n        const RandomAccessIterator3 zm = zs + ((xm-xs) + (ym-ys));\n        tbb::task* right = new(allocate_additional_child_of(*parent()))\n            merge_task(xm, xe, ym, ye, zm, comp, cleanup, leaf_merge);\n        spawn(*right);\n        recycle_as_continuation();\n        xe = xm;\n        ye = ym;\n    }\n    return this;\n}\n\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2, typename Compare, typename LeafSort>\nclass stable_sort_task : public tbb::task {\n    /*override*/tbb::task* execute();\n    RandomAccessIterator1 xs, xe;\n    RandomAccessIterator2 zs;\n    Compare comp;\n    LeafSort leaf_sort;\n    int32_t inplace;\n    std::size_t nsort;\npublic:\n    stable_sort_task(RandomAccessIterator1 xs_, RandomAccessIterator1 xe_, RandomAccessIterator2 zs_, int32_t inplace_, Compare comp_, LeafSort leaf_sort_, std::size_t n) :\n        xs(xs_), xe(xe_), zs(zs_), inplace(inplace_), comp(comp_), leaf_sort(leaf_sort_), nsort(n)\n    {}\n};\n\n//! Binary operator that does nothing\nstruct binary_no_op {\n    template<typename T>\n    void operator()(T, T) {}\n};\n\nconst size_t STABLE_SORT_CUT_OFF = 500;\n\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2, typename Compare, typename LeafSort>\ntbb::task* stable_sort_task<RandomAccessIterator1, RandomAccessIterator2, Compare, LeafSort>::execute() {\n    const auto n = xe - xs;\n    const auto nmerge = nsort > 0 ? nsort : n;\n    if (n <= STABLE_SORT_CUT_OFF) {\n        leaf_sort(xs, xe, comp);\n        if (inplace != 2)\n            init_buf(xs, xe, zs, inplace == 0);\n        return NULL;\n    }\n    else {\n        const RandomAccessIterator1 xm = xs + n / 2;\n        const RandomAccessIterator2 zm = zs + (xm - xs);\n        const RandomAccessIterator2 ze = zs + n;\n        task* m;\n        auto move_values = [](RandomAccessIterator2 x, RandomAccessIterator1 z) {*z = std::move(*x); };\n        auto move_sequences = [](RandomAccessIterator2 first1, RandomAccessIterator2 last1, RandomAccessIterator1 first2) {return std::move(first1, last1, first2); };\n        if (inplace == 2)\n            m = new (allocate_continuation()) merge_task<RandomAccessIterator2, RandomAccessIterator2, RandomAccessIterator1, Compare, serial_destroy, serial_move_merge<decltype(move_values), decltype(move_sequences)>>(zs, zm, zm, ze, xs, comp, serial_destroy(), serial_move_merge<decltype(move_values), decltype(move_sequences)>(nmerge, move_values, move_sequences));\n        else if (inplace)\n            m = new (allocate_continuation()) merge_task<RandomAccessIterator2, RandomAccessIterator2, RandomAccessIterator1, Compare, binary_no_op, serial_move_merge<decltype(move_values), decltype(move_sequences)>>(zs, zm, zm, ze, xs, comp, binary_no_op(), serial_move_merge<decltype(move_values), decltype(move_sequences)>(nmerge, move_values, move_sequences));\n        else {\n            auto move_values = [](RandomAccessIterator1 x, RandomAccessIterator2 z) {*z = std::move(*x); };\n            auto move_sequences = [](RandomAccessIterator1 first1, RandomAccessIterator1 last1, RandomAccessIterator2 first2) {return std::move(first1, last1, first2); };\n            m = new (allocate_continuation()) merge_task<RandomAccessIterator1, RandomAccessIterator1, RandomAccessIterator2, Compare, binary_no_op, serial_move_merge<decltype(move_values), decltype(move_sequences)>>(xs, xm, xm, xe, zs, comp, binary_no_op(), serial_move_merge<decltype(move_values), decltype(move_sequences)>(nmerge, move_values, move_sequences));\n        }\n        m->set_ref_count(2);\n        task* right = new(m->allocate_child()) stable_sort_task(xm, xe, zm, !inplace, comp, leaf_sort, nmerge);\n        spawn(*right);\n        recycle_as_child_of(*m);\n        xe = xm;\n        inplace = !inplace;\n    }\n    return this;\n}\n\ntemplate<typename RandomAccessIterator, typename Compare, typename LeafSort>\nvoid parallel_stable_sort(RandomAccessIterator xs, RandomAccessIterator xe, Compare comp, LeafSort leaf_sort, std::size_t nsort = 0) {\n    tbb::this_task_arena::isolate([=, &nsort]() {\n        //sorting based on task tree and parallel merge\n        typedef typename std::iterator_traits<RandomAccessIterator>::value_type T;\n        const auto n = xe - xs;\n        if (nsort == 0)\n            nsort = n;\n\n        if (n > STABLE_SORT_CUT_OFF) {\n            assert(nsort > 0 && nsort <= n);\n            buffer<T> buf(n);\n            if (buf) {\n                using tbb::task;\n                typedef typename std::iterator_traits<RandomAccessIterator>::value_type T;\n                task::spawn_root_and_wait(*new(task::allocate_root()) stable_sort_task<RandomAccessIterator, T*, Compare, LeafSort>(xs, xe, (T*)buf.get(), 2, comp, leaf_sort, nsort));\n                return;\n            }\n        }\n        // Not enough memory available or sort too small - fall back on serial sort\n        leaf_sort(xs, xe, comp);\n    });\n}\n\n//------------------------------------------------------------------------\n// parallel_merge\n//------------------------------------------------------------------------\n\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2, typename RandomAccessIterator3, typename Compare, typename LeafMerge>\nvoid parallel_merge(RandomAccessIterator1 xs, RandomAccessIterator1 xe, RandomAccessIterator2 ys, RandomAccessIterator2 ye, RandomAccessIterator3 zs, Compare comp, LeafMerge leaf_merge) {\n    if ((xe - xs) + (ye - ys) <= MERGE_CUT_OFF) {\n        // Fall back on serial merge\n        leaf_merge(xs, xe, ys, ye, zs, comp);\n    }\n    else {\n        tbb::this_task_arena::isolate([=]() {\n            using tbb::task;\n            task::spawn_root_and_wait(*new(task::allocate_root()) merge_task<RandomAccessIterator1, RandomAccessIterator2, RandomAccessIterator3, Compare, binary_no_op, LeafMerge>(xs, xe, ys, ye, zs, comp, binary_no_op(), leaf_merge));\n        });\n    }\n}\n\n} // namespace par_backend\n} // namespace pstl\n\n#endif /* __PSTL_parallel_backend_tbb_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/parallel_backend_utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_parallel_backend_utils_H\n#define __PSTL_parallel_backend_utils_H\n\n#include <iterator>\n#include <utility>\n#include \"utils.h\"\n\nnamespace pstl {\nnamespace par_backend {\n\n//! Destroy sequence [xs,xe)\nstruct serial_destroy {\n    template<typename RandomAccessIterator>\n    void operator()(RandomAccessIterator zs, RandomAccessIterator ze) {\n        typedef typename std::iterator_traits<RandomAccessIterator>::value_type T;\n        while (zs != ze) {\n            --ze;\n            (*ze).~T();\n        }\n    }\n};\n\n//! Merge sequences [xs,xe) and [ys,ye) to output sequence [zs,(xe-xs)+(ye-ys)), using std::move\ntemplate<class MoveValues, class MoveSequences>\nstruct serial_move_merge {\n    const std::size_t my_nmerge;\n    MoveValues move_values;\n    MoveSequences move_sequences;\n\n    explicit serial_move_merge(std::size_t nmerge, MoveValues move_values_, MoveSequences move_sequences_)\n        : my_nmerge(nmerge), move_values(move_values_), move_sequences(move_sequences_) {}\n    template<class RandomAccessIterator1, class RandomAccessIterator2, class RandomAccessIterator3, class Compare>\n    void operator()(RandomAccessIterator1 xs, RandomAccessIterator1 xe, RandomAccessIterator2 ys, RandomAccessIterator2 ye, RandomAccessIterator3 zs, Compare comp) {\n        auto n = my_nmerge;\n        assert(n > 0);\n        if (xs != xe) {\n            if (ys != ye) {\n                for (;;) {\n                    if (comp(*ys, *xs)) {\n                        move_values(ys, zs);\n                        ++zs, --n;\n                        if (++ys == ye) {\n                            break;\n                        }\n                        else if (n == 0) {\n                            zs = move_sequences(ys, ye, zs);\n                            break;\n                        }\n                        else {}\n                    }\n                    else {\n                        move_values(xs, zs);\n                        ++zs, --n;\n                        if (++xs == xe) {\n                            move_sequences(ys, ye, zs);\n                            return;\n                        }\n                        else if (n == 0) {\n                            zs = move_sequences(xs, xe, zs);\n                            move_sequences(ys, ye, zs);\n                            return;\n                        }\n                        else {}\n                    }\n                }\n            }\n            ys = xs;\n            ye = xe;\n        }\n        move_sequences(ys, ye, zs);\n    }\n};\n\ntemplate<typename RandomAccessIterator1, typename RandomAccessIterator2>\nvoid init_buf(RandomAccessIterator1 xs, RandomAccessIterator1 xe, RandomAccessIterator2 zs, bool bMove) {\n    const RandomAccessIterator2 ze = zs + (xe - xs);\n    typedef typename std::iterator_traits<RandomAccessIterator2>::value_type T;\n    if (bMove) {\n        // Initialize the temporary buffer and move keys to it.\n        for (; zs != ze; ++xs, ++zs)\n            new(&*zs) T(std::move(*xs));\n    }\n    else {\n        // Initialize the temporary buffer\n        for (; zs != ze; ++zs)\n            new(&*zs) T;\n    }\n}\n\ntemplate<typename Buf>\nclass stack {\n    typedef typename std::iterator_traits<decltype(Buf(0).get())>::value_type T;\n    typedef typename std::iterator_traits<T*>::difference_type difference_type;\n\n    Buf my_buf;\n    T* my_ptr;\n    difference_type my_maxsize;\n\n    stack(const stack&) = delete;\n    void operator=(const stack&) = delete;\npublic:\n    stack(difference_type max_size): my_buf(max_size), my_maxsize(max_size) { my_ptr = my_buf.get(); }\n    ~stack() {\n        assert(size() <= my_maxsize);\n        while(!empty())\n            pop();\n    }\n\n    const Buf& buffer() const { return my_buf; }\n    size_t size() const {\n        assert(my_ptr - my_buf.get() <= my_maxsize);\n        assert(my_ptr - my_buf.get() >= 0);\n        return my_ptr - my_buf.get();\n    }\n    bool empty() const { assert(my_ptr >= my_buf.get()); return my_ptr == my_buf.get();}\n    void push(const T& v) {\n        assert(size() < my_maxsize);\n        new (my_ptr) T(v); ++my_ptr;\n    }\n    const T& top() const { return *(my_ptr-1); }\n    void pop() {\n        assert(my_ptr > my_buf.get());\n        --my_ptr; (*my_ptr).~T();\n    }\n};\n\n} // namespace par_backend\n} // namespace pstl\n\n#endif /* __PSTL_parallel_backend_utils_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/parallel_impl.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_parallel_impl_H\n#define __PSTL_parallel_impl_H\n\n#include <atomic>\n// This header defines the minimum set of parallel routines required to support Parallel STL,\n// implemented on top of Intel(R) Threading Building Blocks (Intel(R) TBB) library\n\nnamespace pstl {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// parallel_find\n//-----------------------------------------------------------------------\n/** Return extremum value returned by brick f[i,j) for subranges [i,j) of [first,last)\nEach f[i,j) must return a value in [i,j). */\ntemplate<class Index, class Brick, class Compare>\nIndex parallel_find(Index first, Index last, Brick f, Compare comp, bool b_first) {\n    typedef typename std::iterator_traits<Index>::difference_type difference_type;\n    const difference_type n = last - first;\n    difference_type initial_dist = b_first ? n : -1;\n    std::atomic<difference_type> extremum(initial_dist);\n    // TODO: find out what is better here: parallel_for or parallel_reduce\n    par_backend::parallel_for(first, last, [comp, f, first, &extremum](Index i, Index j) {\n        // See \"Reducing Contention Through Priority Updates\", PPoPP '13, for discussion of\n        // why using a shared variable scales fairly well in this situation.\n        if (comp(i - first, extremum)) {\n            Index res = f(i, j);\n            // If not 'last' returned then we found what we want so put this to extremum\n            if (res != j) {\n                const difference_type k = res - first;\n                for (difference_type old = extremum; comp(k, old); old = extremum) {\n                    extremum.compare_exchange_weak(old, k);\n                }\n            }\n        }\n    });\n    return extremum != initial_dist ? first + extremum : last;\n}\n\n//------------------------------------------------------------------------\n// parallel_or\n//------------------------------------------------------------------------\n//! Return true if brick f[i,j) returns true for some subrange [i,j) of [first,last)\ntemplate<class Index, class Brick>\nbool parallel_or(Index first, Index last, Brick f) {\n    std::atomic<bool> found(false);\n    par_backend::parallel_for(first, last, [f, &found](Index i, Index j) {\n        if (!found.load(std::memory_order_relaxed) && f(i, j)) {\n            found.store(true, std::memory_order_relaxed);\n            par_backend::cancel_execution();\n        }\n    });\n    return found;\n}\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_parallel_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/pstl_config.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_config_H\n#define __PSTL_config_H\n\n#define PSTL_VERSION 106\n#define PSTL_VERSION_MAJOR (PSTL_VERSION/100)\n#define PSTL_VERSION_MINOR (PSTL_VERSION - PSTL_VERSION_MAJOR * 100)\n\n// Check the user-defined macro for parallel policies\n#if defined(PSTL_USE_PARALLEL_POLICIES)\n#undef __PSTL_USE_PAR_POLICIES\n#define __PSTL_USE_PAR_POLICIES PSTL_USE_PARALLEL_POLICIES\n// Check the internal macro for parallel policies\n#elif !defined(__PSTL_USE_PAR_POLICIES)\n#define __PSTL_USE_PAR_POLICIES 1\n#endif\n\n#if __PSTL_USE_PAR_POLICIES\n#if !defined(__PSTL_PAR_BACKEND_TBB)\n#define __PSTL_PAR_BACKEND_TBB 1\n#endif\n#else\n#undef __PSTL_PAR_BACKEND_TBB\n#endif\n\n// Portability \"#pragma\" definition\n#ifdef _MSC_VER\n#define __PSTL_PRAGMA(x) __pragma(x)\n#else\n#define __PSTL_PRAGMA(x) _Pragma (#x)\n#endif\n\n#define __PSTL_STRING_AUX(x) #x\n#define __PSTL_STRING(x) __PSTL_STRING_AUX(x)\n#define __PSTL_STRING_CONCAT(x, y) x#y\n\n// note that when ICC or Clang is in use, __PSTL_GCC_VERSION might not fully match\n// the actual GCC version on the system.\n#define __PSTL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n\n#if __clang__\n    // according to clang documentation, version can be vendor specific\n    #define __PSTL_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)\n#endif\n\n// Enable SIMD for compilers that support OpenMP 4.0\n#if (_OPENMP >= 201307) || (__INTEL_COMPILER >= 1600) || (__PSTL_GCC_VERSION >= 40900)\n#define __PSTL_PRAGMA_SIMD __PSTL_PRAGMA(omp simd)\n#define __PSTL_PRAGMA_SIMD_REDUCTION(PRM) __PSTL_PRAGMA(omp simd reduction(PRM))\n#elif !defined(_MSC_VER) //#pragma simd\n#define __PSTL_PRAGMA_SIMD __PSTL_PRAGMA(simd)\n#define __PSTL_PRAGMA_SIMD_REDUCTION(PRM) __PSTL_PRAGMA(simd reduction(PRM))\n#else //no simd\n#define __PSTL_PRAGMA_SIMD\n#define __PSTL_PRAGMA_SIMD_REDUCTION(PRM)\n#endif //Enable SIMD\n\n#if (__INTEL_COMPILER)\n#define __PSTL_PRAGMA_FORCEINLINE __PSTL_PRAGMA(forceinline)\n#else\n#define __PSTL_PRAGMA_FORCEINLINE\n#endif\n\n// Should be defined to 1 for environments with a vendor implementation of C++17 execution policies\n#define __PSTL_CPP17_EXECUTION_POLICIES_PRESENT (_MSC_VER >= 1912)\n\n#define __PSTL_CPP14_2RANGE_MISMATCH_EQUAL_PRESENT (_MSC_VER >= 1900 || __cplusplus >= 201300L || __cpp_lib_robust_nonmodifying_seq_ops == 201304)\n#define __PSTL_CPP14_MAKE_REVERSE_ITERATOR_PRESENT (_MSC_VER >= 1900 || __cplusplus >= 201402L || __cpp_lib_make_reverse_iterator == 201402)\n#define __PSTL_CPP14_INTEGER_SEQUENCE_PRESENT (_MSC_VER >= 1900 || __cplusplus >= 201402L)\n#define __PSTL_CPP14_VARIABLE_TEMPLATES_PRESENT \\\n    (!__INTEL_COMPILER || __INTEL_COMPILER >= 1700) && (_MSC_FULL_VER >= 190023918 || __cplusplus >= 201402L)\n\n#define __PSTL_EARLYEXIT_PRESENT  (__INTEL_COMPILER >= 1800)\n#define __PSTL_MONOTONIC_PRESENT (__INTEL_COMPILER >= 1800)\n\n#if __PSTL_EARLYEXIT_PRESENT\n#define __PSTL_PRAGMA_SIMD_EARLYEXIT __PSTL_PRAGMA(omp simd early_exit)\n#else\n#define __PSTL_PRAGMA_SIMD_EARLYEXIT\n#endif\n\n#if __PSTL_MONOTONIC_PRESENT\n#define __PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(PRM) __PSTL_PRAGMA(omp ordered simd monotonic(PRM))\n#define __PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(PRM1, PRM2) __PSTL_PRAGMA(omp ordered simd monotonic(PRM1, PRM2))\n#else\n#define __PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(PRM)\n#define __PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(PRM1, PRM2)\n#endif\n\n#if (__INTEL_COMPILER >= 1600)\n#define __PSTL_PRAGMA_VECTOR_UNALIGNED __PSTL_PRAGMA(vector unaligned)\n#else\n#define __PSTL_PRAGMA_VECTOR_UNALIGNED\n#endif\n\n// Check the user-defined macro to use non-temporal stores\n#if defined(PSTL_USE_NONTEMPORAL_STORES) && (__INTEL_COMPILER >= 1600)\n#define __PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED __PSTL_PRAGMA(vector nontemporal)\n#else\n#define __PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED\n#endif\n\n#if _MSC_VER || __INTEL_COMPILER //the preprocessors don't type a message location\n#define __PSTL_PRAGMA_LOCATION __FILE__ \":\" __PSTL_STRING(__LINE__) \": [Parallel STL message]: \"\n#else\n#define __PSTL_PRAGMA_LOCATION \" [Parallel STL message]: \"\n#endif\n\n\n#define __PSTL_PRAGMA_MESSAGE_IMPL(x) __PSTL_PRAGMA(message(__PSTL_STRING_CONCAT(__PSTL_PRAGMA_LOCATION, x)))\n#define __PSTL_PRAGMA_MESSAGE_POLICIES(x) __PSTL_PRAGMA_MESSAGE_IMPL(x)\n\n//Too many warnings in output, switched off\n#define __PSTL_PRAGMA_MESSAGE(x)\n\n#define __PSTL_CPP11_STD_ROTATE_BROKEN ((__GLIBCXX__ && __GLIBCXX__ < 20150716) || (_MSC_VER && _MSC_VER < 1800))\n\n#define __PSTL_ICC_18_OMP_SIMD_BROKEN (__INTEL_COMPILER == 1800)\n\n#endif /* __PSTL_config_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/unseq_backend_simd.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_unseq_backend_simd_H\n#define __PSTL_unseq_backend_simd_H\n\n#include <algorithm> //for std::min\n#include <type_traits>\n\n#include \"pstl_config.h\"\n#include \"utils.h\"\n\n// This header defines the minimum set of vector routines required\n// to support parallel STL.\nnamespace pstl {\nnamespace unseq_backend {\n\ntemplate<class Iterator, class DifferenceType, class Function>\nIterator simd_walk_1(Iterator first, DifferenceType n, Function f) noexcept {\n__PSTL_PRAGMA_SIMD\n    for(DifferenceType i = 0; i < n; ++i)\n        f(first[i]);\n\n    return first + n;\n}\n\ntemplate<class Iterator1, class DifferenceType, class Iterator2, class Function>\nIterator2 simd_walk_2(Iterator1 first1, DifferenceType n, Iterator2 first2, Function f) noexcept {\n__PSTL_PRAGMA_SIMD\n    for(DifferenceType i = 0; i < n; ++i)\n        f(first1[i], first2[i]);\n    return first2 + n;\n}\n\ntemplate<class Iterator1, class DifferenceType, class Iterator2, class Iterator3, class Function>\nIterator3 simd_walk_3(Iterator1 first1, DifferenceType n, Iterator2 first2, Iterator3 first3, Function f) noexcept {\n__PSTL_PRAGMA_SIMD\n    for(DifferenceType i = 0; i < n; ++i)\n        f(first1[i], first2[i], first3[i]);\n    return first3 + n;\n}\n\n// TODO: check whether simd_first() can be used here\ntemplate<class Index, class DifferenceType, class Pred>\nbool simd_or(Index first, DifferenceType n, Pred pred) noexcept {\n#if __PSTL_EARLYEXIT_PRESENT\n    DifferenceType i;\n__PSTL_PRAGMA_VECTOR_UNALIGNED\n__PSTL_PRAGMA_SIMD_EARLYEXIT\n    for(i = 0; i < n; ++i)\n        if(pred(first[i]))\n            break;\n    return i < n;\n#else\n    DifferenceType block_size = std::min<DifferenceType>(4, n);\n    const Index last = first + n;\n    while ( last != first ) {\n        int32_t flag = 1;\n__PSTL_PRAGMA_SIMD_REDUCTION(&:flag)\n        for ( DifferenceType i = 0; i < block_size; ++i )\n            if ( pred(*(first + i)) )\n                flag = 0;\n        if ( !flag )\n            return true;\n\n        first += block_size;\n        if ( last - first >= block_size << 1 ) {\n            // Double the block size.  Any unnecessary iterations can be amortized against work done so far.\n            block_size <<= 1;\n        }\n        else {\n            block_size = last - first;\n        }\n    }\n    return false;\n#endif\n}\n\ntemplate<class Index, class DifferenceType, class Compare>\nIndex simd_first(Index first, DifferenceType begin, DifferenceType end, Compare comp) noexcept {\n#if __PSTL_EARLYEXIT_PRESENT\n    DifferenceType i = begin;\n__PSTL_PRAGMA_VECTOR_UNALIGNED // Do not generate peel loop part\n__PSTL_PRAGMA_SIMD_EARLYEXIT\n    for (; i < end; ++i) {\n        if (comp(first, i)) {\n            break;\n        }\n    }\n    return first + i;\n#else\n    // Experiments show good block sizes like this\n    const DifferenceType block_size = 8;\n    alignas(64) DifferenceType lane[block_size] = { 0 };\n    while (end - begin >= block_size) {\n        DifferenceType found = 0;\n__PSTL_PRAGMA_VECTOR_UNALIGNED // Do not generate peel loop part\n__PSTL_PRAGMA_SIMD_REDUCTION(| :found)\n        for (DifferenceType i = begin; i < begin + block_size; ++i) {\n            const DifferenceType t = comp(first, i);\n            lane[i - begin] = t;\n            found |= t;\n        }\n        if (found) {\n            DifferenceType i;\n            // This will vectorize\n            for (i = 0; i < block_size; ++i) {\n                if (lane[i]) {\n                    break;\n                }\n            }\n            return first + begin + i;\n        }\n        begin += block_size;\n    }\n\n    //Keep remainder scalar\n    while (begin != end) {\n        if (comp(first, begin)) {\n            return first + begin;\n        }\n        ++begin;\n    }\n    return first + end;\n#endif //__PSTL_EARLYEXIT_PRESENT\n}\n\ntemplate<class Index1, class DifferenceType, class Index2, class Pred>\nstd::pair<Index1, Index2> simd_first(Index1 first1, DifferenceType n, Index2 first2, Pred pred) noexcept {\n#if __PSTL_EARLYEXIT_PRESENT\n    DifferenceType i = 0;\n__PSTL_PRAGMA_VECTOR_UNALIGNED\n__PSTL_PRAGMA_SIMD_EARLYEXIT\n    for(;i < n; ++i)\n        if(pred(first1[i], first2[i]))\n            break;\n    return std::make_pair(first1 + i, first2 + i);\n#else\n    const Index1 last1 = first1 + n;\n    const Index2 last2 = first2 + n;\n    // Experiments show good block sizes like this\n    const DifferenceType block_size = 8;\n    alignas(64) DifferenceType lane[block_size] = {0};\n    while ( last1 - first1 >= block_size ) {\n        DifferenceType found = 0;\n        DifferenceType i;\n__PSTL_PRAGMA_VECTOR_UNALIGNED // Do not generate peel loop part\n__PSTL_PRAGMA_SIMD_REDUCTION(|:found)\n        for ( i = 0; i < block_size; ++i ) {\n            const DifferenceType t = pred(first1[i], first2[i]);\n            lane[i] = t;\n            found |= t;\n        }\n        if ( found ) {\n            DifferenceType i;\n            // This will vectorize\n            for ( i = 0; i < block_size; ++i ) {\n                if ( lane[i] ) break;\n            }\n            return std::make_pair(first1 + i, first2 + i);\n        }\n        first1 += block_size;\n        first2 += block_size;\n    }\n\n    //Keep remainder scalar\n    for(; last1 != first1; ++first1, ++first2)\n        if ( pred(*(first1), *(first2)) )\n            return std::make_pair(first1, first2);\n\n    return std::make_pair(last1, last2);\n#endif //__PSTL_EARLYEXIT_PRESENT\n}\n\ntemplate<class Index, class DifferenceType, class Pred>\nDifferenceType simd_count(Index first, DifferenceType n, Pred pred) noexcept {\n    DifferenceType count = 0;\n__PSTL_PRAGMA_SIMD_REDUCTION(+:count)\n    for (DifferenceType i = 0; i < n; ++i)\n        if (pred(*(first + i)))\n            ++count;\n\n    return count;\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator, class BinaryPredicate>\nOutputIterator simd_unique_copy(InputIterator first, DifferenceType n, OutputIterator result, BinaryPredicate pred) noexcept {\n    if (n == 0)\n        return result;\n\n    DifferenceType cnt = 1;\n    result[0] = first[0];\n\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 1; i < n; ++i) {\n__PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(cnt:1)\n        if (!pred(first[i], first[i - 1])) {\n            result[cnt] = first[i];\n            ++cnt;\n        }\n    }\n    return result + cnt;\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator, class Assigner>\nOutputIterator simd_assign(InputIterator first, DifferenceType n, OutputIterator result, Assigner assigner) noexcept {\n__PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i)\n        assigner(first + i, result + i);\n    return result + n;\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator, class UnaryPredicate>\nOutputIterator simd_copy_if(InputIterator first, DifferenceType n, OutputIterator result, UnaryPredicate pred) noexcept {\n    DifferenceType cnt = 0;\n\n__PSTL_PRAGMA_SIMD\n    for(DifferenceType i = 0; i < n; ++i) {\n__PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(cnt:1)\n        if(pred(first[i])) {\n            result[cnt] = first[i];\n            ++cnt;\n        }\n    }\n    return result + cnt;\n}\n\ntemplate<class InputIterator, class DifferenceType, class BinaryPredicate>\nDifferenceType simd_calc_mask_2(InputIterator first, DifferenceType n, bool* __restrict mask, BinaryPredicate pred) noexcept {\n    DifferenceType count = 0;\n\n__PSTL_PRAGMA_SIMD_REDUCTION(+:count)\n    for (DifferenceType i = 0; i < n; ++i) {\n        mask[i] = !pred(first[i], first[i - 1]);\n        count += mask[i];\n    }\n    return count;\n}\n\ntemplate<class InputIterator, class DifferenceType, class UnaryPredicate>\nDifferenceType simd_calc_mask_1(InputIterator first, DifferenceType n, bool* __restrict mask, UnaryPredicate pred) noexcept {\n    DifferenceType count = 0;\n\n__PSTL_PRAGMA_SIMD_REDUCTION(+:count)\n    for (DifferenceType i = 0; i < n; ++i) {\n        mask[i] = pred(first[i]);\n        count += mask[i];\n    }\n    return count;\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator>\nvoid simd_copy_by_mask(InputIterator first, DifferenceType n, OutputIterator result, bool* __restrict mask) noexcept {\n    DifferenceType cnt = 0;\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i) {\n__PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(cnt:1)\n        if (mask[i]) {\n            result[cnt] = first[i];\n            ++cnt;\n        }\n    }\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator1, class OutputIterator2>\nvoid simd_partition_by_mask(InputIterator first, DifferenceType n, OutputIterator1 out_true, OutputIterator2 out_false, bool* mask) noexcept {\n    DifferenceType cnt_true = 0, cnt_false = 0;\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i) {\n__PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(cnt_true:1, cnt_false:1)\n        if (mask[i]) {\n            out_true[cnt_true] = first[i];\n            ++cnt_true;\n        }\n        else {\n            out_false[cnt_false] = first[i];\n            ++cnt_false;\n        }\n    }\n}\n\ntemplate<class Index, class DifferenceType, class T>\nIndex simd_fill_n(Index first, DifferenceType n, const T& value) noexcept {\n__PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i)\n        first[i] = value;\n    return first + n;\n}\n\ntemplate<class Index, class DifferenceType, class Generator>\nIndex simd_generate_n(Index first, DifferenceType size, Generator g) noexcept {\n__PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < size; ++i)\n        first[i] = g();\n    return first + size;\n}\n\ntemplate<class Index, class BinaryPredicate>\nIndex simd_adjacent_find(Index first, Index last, BinaryPredicate pred, bool or_semantic) noexcept {\n    if(last - first < 2)\n        return last;\n\n    typedef typename std::iterator_traits<Index>::difference_type difference_type;\n    difference_type i = 0;\n\n#if __PSTL_EARLYEXIT_PRESENT\n    //Some compiler versions fail to compile the following loop when iterators are used. Indices are used instead\n    const difference_type n = last-first-1;\n__PSTL_PRAGMA_VECTOR_UNALIGNED\n__PSTL_PRAGMA_SIMD_EARLYEXIT\n    for(; i < n; ++i)\n        if(pred(first[i], first[i+1]))\n            break;\n\n    return i < n ? first + i : last;\n#else\n    // Experiments show good block sizes like this\n    //TODO: to consider tuning block_size for various data types\n    const difference_type block_size = 8;\n    alignas(64) difference_type lane[block_size] = {0};\n    while ( last - first >= block_size ) {\n        difference_type found = 0;\n__PSTL_PRAGMA_VECTOR_UNALIGNED // Do not generate peel loop part\n__PSTL_PRAGMA_SIMD_REDUCTION(|:found)\n        for ( i = 0; i < block_size-1; ++i ) {\n            //TODO: to improve SIMD vectorization\n            const difference_type t = pred(*(first + i), *(first + i + 1));\n            lane[i] = t;\n            found |= t;\n        }\n\n        //Process a pair of elements on a boundary of a data block\n        if(first + block_size < last && pred(*(first + i), *(first + i + 1)))\n            lane[i] = found = 1;\n\n        if ( found ) {\n            if(or_semantic)\n                return first;\n\n            // This will vectorize\n            for ( i = 0; i < block_size; ++i )\n                if ( lane[i] ) break;\n            return first + i; //As far as found is true a result (lane[i] is true) is guaranteed\n        }\n        first += block_size;\n    }\n    //Process the rest elements\n    for (; last - first > 1; ++first)\n        if(pred(*first, *(first+1)))\n            return first;\n\n    return last;\n#endif\n}\n\ntemplate<typename InputIterator1, typename DifferenceType, typename InputIterator2, typename T, typename BinaryOperation>\nT simd_transform_reduce(InputIterator1 first1, DifferenceType n, InputIterator2 first2, T init, BinaryOperation binary_op) noexcept {\n__PSTL_PRAGMA_SIMD_REDUCTION(+:init)\n    for(DifferenceType i = 0; i < n; ++i)\n        init += binary_op(first1[i], first2[i]);\n    return init;\n};\n\ntemplate<typename InputIterator, typename DifferenceType, typename T, typename UnaryOperation>\nT simd_transform_reduce(InputIterator first, DifferenceType n, T init, UnaryOperation unary_op) noexcept {\n__PSTL_PRAGMA_SIMD_REDUCTION(+:init)\n    for(DifferenceType i = 0; i < n; ++i)\n        init += unary_op(first[i]);\n    return init;\n};\n\ntemplate<class Iterator, class DifferenceType, class Function>\nIterator simd_it_walk_1(Iterator first, DifferenceType n, Function f) noexcept {\n__PSTL_PRAGMA_SIMD\n    for(DifferenceType i = 0; i < n; ++i)\n        f(first + i);\n\n    return first + n;\n}\n\ntemplate<class Iterator1, class DifferenceType, class Iterator2, class Function>\nIterator2 simd_it_walk_2(Iterator1 first1, DifferenceType n, Iterator2 first2, Function f) noexcept {\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i)\n        f(first1 + i, first2 + i);\n    return first2 + n;\n}\n\ntemplate<class InputIterator, class DifferenceType, class OutputIterator1, class OutputIterator2, class UnaryPredicate>\nstd::pair<OutputIterator1, OutputIterator2>\nsimd_partition_copy(InputIterator first, DifferenceType n, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate pred) noexcept {\n    DifferenceType cnt_true = 0, cnt_false = 0;\n\n__PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 0; i < n; ++i) {\n__PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC_2ARGS(cnt_true:1, cnt_false : 1)\n        if (pred(first[i])) {\n            out_true[cnt_true] = first[i];\n            ++cnt_true;\n        }\n        else {\n            out_false[cnt_false] = first[i];\n            ++cnt_false;\n        }\n    }\n    return std::make_pair(out_true + cnt_true, out_false + cnt_false);\n}\n\ntemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\nForwardIterator1 simd_find_first_of(ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 s_first, ForwardIterator2 s_last, BinaryPredicate pred) noexcept {\n    typedef typename std::iterator_traits<ForwardIterator1>::difference_type difference_type;\n\n    const difference_type n1 = last - first;\n    const difference_type n2 = s_last - s_first;\n    if (n1 == 0 || n2 == 0) {\n        return last; // according to the standard\n    }\n\n    // Common case\n    // If first sequence larger than second then we'll run simd_first with parameters of first sequence.\n    // Otherwise, vice versa.\n    if (n1 < n2)\n    {\n        for (; first != last; ++first) {\n            if (simd_or(s_first, n2,\n                internal::equal_value_by_pred<decltype(*first), BinaryPredicate>(*first, pred))) {\n                return first;\n            }\n        }\n    }\n    else {\n        for (; s_first != s_last; ++s_first) {\n            const auto result = simd_first(first, difference_type(0), n1,\n                [s_first, &pred](ForwardIterator1 it, difference_type i) {return pred(it[i], *s_first); });\n            if (result != last) {\n                return result;\n            }\n        }\n    }\n    return last;\n}\n\ntemplate<class ForwardIterator, class DifferenceType, class UnaryPredicate>\nForwardIterator simd_remove_if(ForwardIterator first, DifferenceType n, UnaryPredicate pred) noexcept {\n    // find first element we need to remove\n    auto current = simd_first(first, DifferenceType(0), n, [&pred](ForwardIterator it, DifferenceType i) {return pred(it[i]); });\n    n -= current - first;\n\n    // if we have in sequence only one element that pred(current[1]) != false we can exit the function\n    if (n < 2) {\n        return current;\n    }\n\n#if __PSTL_MONOTONIC_PRESENT\n    DifferenceType cnt = 0;\n    __PSTL_PRAGMA_SIMD\n    for (DifferenceType i = 1; i < n; ++i) {\n        __PSTL_PRAGMA_SIMD_ORDERED_MONOTONIC(cnt:1)\n        if (!pred(current[i])) {\n            current[cnt] = std::move(current[i]);\n            ++cnt;\n        }\n    }\n    return current + cnt;\n#else\n    return std::remove_if(current, current + n, pred);\n#endif\n}\n} // namespace unseq_backend\n} // namespace pstl\n\n#endif /* __PSTL_unseq_backend_simd_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/internal/utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_utils_H\n#define __PSTL_utils_H\n\n#include <new>\n#include <iterator>\n\nnamespace pstl {\nnamespace internal {\n\ntemplate<typename F>\ntypename std::result_of<F()>::type except_handler(F f) {\n    try {\n        return f();\n    }\n    catch(const std::bad_alloc&) {\n        throw; // re-throw bad_alloc according to 25.2.4.1 [algorithms.parallel.exceptions]\n    }\n    catch(...) {\n        std::terminate(); // Good bye according to 25.2.4.2 [algorithms.parallel.exceptions]\n    }\n}\n\ntemplate<typename F>\nvoid invoke_if(std::true_type, F f) {\n    f();\n}\n\ntemplate<typename F>\nvoid invoke_if(std::false_type, F f) {}\n\ntemplate<typename F>\nvoid invoke_if_not(std::false_type, F f) {\n    f();\n}\n\ntemplate<typename F>\nvoid invoke_if_not(std::true_type, F f) {}\n\ntemplate<typename F1, typename F2>\ntypename std::result_of<F1()>::type invoke_if_else(std::true_type, F1 f1, F2 f2) {\n    return f1();\n}\n\ntemplate<typename F1, typename F2>\ntypename std::result_of<F2()>::type invoke_if_else(std::false_type, F1 f1, F2 f2) {\n    return f2();\n}\n\ntemplate<typename Iterator>\ntypename std::iterator_traits<Iterator>::pointer reduce_to_ptr(Iterator it) {\n    return std::addressof(*it);\n}\n\n//! Unary operator that returns reference to its argument.\nstruct no_op {\n    template<typename T>\n    T& operator()(T& a) const { return a; }\n};\n\n//! Logical negation of a predicate\ntemplate<typename Pred>\nclass not_pred {\n    Pred pred;\npublic:\n    explicit not_pred( Pred pred_ ) : pred(pred_) {}\n\n    template<typename ... Args>\n    bool operator()( Args&& ... args ) { return !pred(std::forward<Args>(args)...); }\n};\n\ntemplate<typename Pred>\nclass reorder_pred {\n    Pred pred;\npublic:\n    explicit reorder_pred( Pred pred_ ) : pred(pred_) {}\n\n    template<typename T>\n    bool operator()(T&& a, T&& b) { return pred(std::forward<T>(b), std::forward<T>(a)); }\n};\n\n//! \"==\" comparison.\n/** Not called \"equal\" to avoid (possibly unfounded) concerns about accidental invocation via\n    argument-dependent name lookup by code expecting to find the usual std::equal. */\nclass pstl_equal {\npublic:\n    explicit pstl_equal() {}\n\n    template<typename X, typename Y>\n    bool operator()( X&& x, Y&& y ) const { return std::forward<X>(x)==std::forward<Y>(y); }\n};\n\n//! \"<\" comparison.\nclass pstl_less {\npublic:\n    explicit pstl_less() {}\n\n    template<typename X, typename Y>\n    bool operator()(X&& x, Y&& y) const { return std::forward<X>(x) < std::forward<Y>(y); }\n};\n\n//! Like a polymorphic lambda for pred(...,value)\ntemplate<typename T, typename Predicate>\nclass equal_value_by_pred {\n    const T& value;\n    Predicate pred;\npublic:\n    equal_value_by_pred(const T& value_, Predicate pred_) : value(value_), pred(pred_) {}\n\n    template<typename Arg>\n    bool operator()(Arg&& arg) { return pred(std::forward<Arg>(arg), value); }\n};\n\n//! Like a polymorphic lambda for ==value\ntemplate<typename T>\nclass equal_value {\n    const T& value;\npublic:\n    explicit equal_value( const T& value_ ) : value(value_) {}\n\n    template<typename Arg>\n    bool operator()( Arg&& arg ) const { return std::forward<Arg>(arg)==value; }\n};\n\n//! Logical negation of ==value\ntemplate<typename T>\nclass not_equal_value {\n    const T& value;\npublic:\n    explicit not_equal_value( const T& value_ ) : value(value_) {}\n\n    template<typename Arg>\n    bool operator()( Arg&& arg ) const { return !(std::forward<Arg>(arg)==value); }\n};\n\ntemplate <typename ForwardIterator, typename Compare>\nForwardIterator cmp_iterators_by_values(ForwardIterator a, ForwardIterator b, Compare comp) {\n    if(a < b) { // we should return closer iterator\n        return comp(*b, *a) ? b : a;\n    } else {\n        return comp(*a, *b) ? a : b;\n    }\n}\n\n} // namespace internal\n} // namespace pstl\n\n#endif /* __PSTL_utils_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/iterators.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_iterators_H\n#define __PSTL_iterators_H\n\n#include <iterator>\n#include <tuple>\n#include <cassert>\n\n#if __PSTL_CPP14_INTEGER_SEQUENCE_PRESENT\n\n#include <utility>\nnamespace pstl {\n    namespace internal {\n        using std::index_sequence;\n        using std::make_index_sequence;\n    } //internal\n}//namespace pstl\n\n#else //std::integer_sequence is not present\nnamespace pstl {\n    namespace internal {\ntemplate<std::size_t... S> class index_sequence {};\ntemplate<std::size_t N, std::size_t... S>\nstruct make_index_sequence_impl : make_index_sequence_impl < N - 1, N - 1, S... > {};\ntemplate<std::size_t... S>\nstruct make_index_sequence_impl <0, S...> {\n    typedef index_sequence<S...> type;\n};\ntemplate<std::size_t N> struct make_index_sequence: internal::make_index_sequence_impl<N>::type {};\n} //internal\n}//namespace pstl\n#endif\n\nnamespace pstl {\nnamespace internal {\n\ntemplate<size_t N>\nstruct tuple_util {\n    template<typename TupleType, typename DifferenceType>\n    static void increment(TupleType& it, DifferenceType forward) {\n        std::get<N-1>(it) += forward;\n        tuple_util<N-1>::increment(it, forward);\n    }\n    template<typename TupleType, typename DifferenceType>\n    static bool check_sync(const TupleType& it1, const TupleType& it2, DifferenceType val) {\n        if(std::get<N-1>(it1) - std::get<N-1>(it2) != val)\n            return false;\n        return tuple_util<N-1>::check_sync(it1, it2, val);\n    }\n};\n\ntemplate<>\nstruct tuple_util<0> {\n    template<typename TupleType, typename DifferenceType>\n    static void increment(TupleType&, DifferenceType) {}\n    template<typename TupleType, typename DifferenceType>\n    static bool check_sync(const TupleType&, const TupleType&, DifferenceType) { return true;}\n};\n\ntemplate <typename TupleReturnType>\nstruct make_references {\n    template <typename TupleType, std::size_t... Is>\n    TupleReturnType operator()(const TupleType& t, pstl::internal::index_sequence<Is...>) {\n        return std::tie((*std::get<Is>(t))...);\n    }\n};\n\n} //namespace internal\n\ntemplate <typename IntType>\nclass counting_iterator {\npublic:\n    typedef typename std::make_signed<IntType>::type difference_type;\n    typedef IntType value_type;\n    typedef const IntType* pointer;\n    typedef const IntType& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    explicit counting_iterator(IntType init): my_counter(init) { static_assert(std::is_integral<IntType>::value, \"Integer required.\"); }\n\n    reference operator*() const { return my_counter; }\n    value_type operator[](difference_type i) const { return *(*this + i); }\n\n    difference_type operator-(const counting_iterator& it) const { return my_counter - it.my_counter; }\n\n    counting_iterator& operator+=(difference_type forward) { my_counter += forward; return *this; }\n    counting_iterator& operator-=(difference_type backward) { return *this += -backward; }\n    counting_iterator& operator++() { return *this += 1; }\n    counting_iterator& operator--() { return *this -= 1; }\n\n    counting_iterator operator++(int) {\n        counting_iterator it(*this);\n        ++(*this);\n        return it;\n    }\n    counting_iterator operator--(int) {\n        counting_iterator it(*this);\n        --(*this);\n        return it;\n    }\n\n    counting_iterator operator-(difference_type backward) const { return counting_iterator(my_counter - backward); }\n    counting_iterator operator+(difference_type forward) const { return counting_iterator(my_counter + forward); }\n    friend counting_iterator operator+(difference_type forward, const counting_iterator it) { return it + forward; }\n\n    bool operator==(const counting_iterator& it) const { return *this - it == 0; }\n    bool operator!=(const counting_iterator& it) const { return !(*this == it); }\n    bool operator<(const counting_iterator& it) const {return *this - it < 0; }\n    bool operator>(const counting_iterator& it) const { return it < *this; }\n    bool operator<=(const counting_iterator& it) const { return !(*this > it); }\n    bool operator>=(const counting_iterator& it) const { return !(*this < it); }\n\nprivate:\n    IntType my_counter;\n};\n\ntemplate <typename... Types>\nclass zip_iterator {\n    static const std::size_t num_types = sizeof...(Types);\n    typedef typename std::tuple<Types...> it_types;\npublic:\n    typedef typename std::make_signed<std::size_t>::type difference_type;\n    typedef std::tuple<typename std::iterator_traits<Types>::value_type...> value_type;\n    typedef std::tuple<typename std::iterator_traits<Types>::reference...> reference;\n    typedef std::tuple<typename std::iterator_traits<Types>::pointer...> pointer;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    explicit zip_iterator(Types... args): my_it(std::make_tuple(args...)) {}\n\n    reference operator*() {\n        return internal::make_references<reference>()(my_it, pstl::internal::make_index_sequence<num_types>());\n    }\n    reference operator[](difference_type i) const { return *(*this + i); }\n\n    difference_type operator-(const zip_iterator<Types...>& it) const {\n        assert((internal::tuple_util<num_types>::check_sync(my_it, it.my_it, std::get<0>(my_it) - std::get<0>(it.my_it))));\n        return std::get<0>(my_it) - std::get<0>(it.my_it);\n    }\n\n    zip_iterator& operator+=(difference_type forward) {\n        internal::tuple_util<num_types>::increment(my_it, forward);\n        return *this;\n    }\n    zip_iterator& operator-=(difference_type backward) { return *this += -backward; }\n    zip_iterator& operator++() { return *this += 1; }\n    zip_iterator& operator--() { return *this -= 1; }\n\n    zip_iterator operator++(int) {\n        zip_iterator it(*this);\n        ++(*this);\n        return it;\n    }\n    zip_iterator operator--(int) {\n        zip_iterator it(*this);\n        --(*this);\n        return it;\n    }\n\n    zip_iterator operator-(difference_type backward) const {\n        zip_iterator<Types...> it(*this);\n        return it -= backward;\n    }\n    zip_iterator operator+(difference_type forward) const {\n        zip_iterator<Types...> it(*this);\n        return it += forward;\n    }\n    friend zip_iterator operator+(difference_type forward, const zip_iterator<Types...>& it) { return it + forward; }\n\n    bool operator==(const zip_iterator<Types...>& it) const {\n        assert((internal::tuple_util<num_types>::check_sync(my_it, it.my_it, *this - it)));\n        return *this - it == 0;\n    }\n    bool operator!=(const zip_iterator<Types...>& it) const { return !(*this == it); }\n    bool operator<(const zip_iterator<Types...>& it) const { return *this - it < 0; }\n    bool operator>(const zip_iterator<Types...>& it) const { return it < *this; }\n    bool operator<=(const zip_iterator<Types...>& it) const { return !(*this > it); }\n    bool operator>=(const zip_iterator<Types...>& it) const { return !(*this < it); }\n\nprivate:\n    it_types my_it;\n};\n\ntemplate<typename... T>\nzip_iterator<T...> make_zip_iterator(T... args) { return zip_iterator<T...>(args...); }\n\n} //namespace pstl\n\n#endif /* __PSTL_iterators_H */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/memory",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_memory\n#define __PSTL_memory\n\n#include \"internal/pstl_config.h\"\n\n#if __PSTL_EXECUTION_POLICIES_DEFINED\n// If <execution> has already been included, pull in implementations\n#include \"internal/glue_memory_impl.h\"\n#else\n// Otherwise just pull in forward declarations\n#include \"internal/glue_memory_defs.h\"\n#define __PSTL_MEMORY_FORWARD_DECLARED 1\n#endif\n\n#endif /* __PSTL_memory */\n"
  },
  {
    "path": "isosurface/tbb/pstl2018_20180822oss/include/pstl/numeric",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __PSTL_numeric\n#define __PSTL_numeric\n\n#include \"internal/pstl_config.h\"\n\n#if __PSTL_EXECUTION_POLICIES_DEFINED\n// If <execution> has already been included, pull in implementations\n#include \"internal/glue_numeric_impl.h\"\n#else\n// Otherwise just pull in forward declarations\n#include \"internal/glue_numeric_defs.h\"\n#define __PSTL_NUMERIC_FORWARD_DECLARED 1\n#endif\n\n#endif /* __PSTL_numeric */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/.gitattributes",
    "content": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files you want to always be normalized and converted\n# to native line endings on checkout.\n*.c text\n*.h text\n*.cpp text\n*.def text\n*.rc text\n*.i text\n*.sh text\n*.csh text\n*.mk text\n*.java text\n*.csv text\n*.lst text\n*.asm text\n*.cfg text\n*.css text\n*.inc text\n*.js text\n*.rb text\n*.strings text\n*.txt text\n*export.lst text\n*.xml text\n*.py text\n*.md text\n*.classpath text\n*.cproject text\n*.project text\n*.properties text\n*.java text\n*.gradle text\n\n# Declare files that will always have CRLF line endings on checkout.\n*.sln text eol=crlf\n*.bat text eol=crlf\n\n# Denote all files that are truly binary and should not be modified.\n*.png binary\n*.jpg binary\n*.ico binary\n*.spir binary\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/.gitignore",
    "content": "# Ignore the debug and release directories created with Makefile builds #\n#########################################################################\nbuild/*_debug/\nbuild/*_release/\n\n# Compiled source #\n###################\n*.com\n*.class\n*.dll\n*.lib\n*.pdb\n*.exe\n*.o\n*.so\n*.so.1\n*.so.2\n*.dylib\n*.a\n*.obj\n*.pyc\n\n*.orig\n*.raw\n*.sample\n*.slo\n*.swp\n*.config\n*.la\n*.lai\n*.lo\n*.nhdr\n*.nii.gz\n*.nrrd\n\n# Packages #\n############\n# it's better to unpack these files and commit the raw source\n# git has its own built in compression methods\n*.7z\n*.dmg\n*.gz\n*.iso\n*.jar\n*.rar\n*.tar\n*.tgz\n*.zip\n\n# Logs and databases #\n######################\n*.log\n*.sql\n*.sqlite\n\n# OS generated files #\n######################\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db\n\n# IDE generated files #\n######################\n/.ninja_deps\n/.ninja_log\n/build.ninja\n/rules.ninja\n*~\n.emacs.desktop\n\n# Build system generated files #\n################################\nCMakeCache.txt\nCMakeFiles/\n\n# Other #\n#########\n.clang_complete\n.idea\n.svn\ncrash*\n*.tmp\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/CHANGES",
    "content": "------------------------------------------------------------------------\nThe list of most significant changes made over time in\nIntel(R) Threading Building Blocks (Intel(R) TBB).\n\nIntel TBB 2018 Update 6\nTBB_INTERFACE_VERSION == 10006\n\nChanges (w.r.t. Intel TBB 2018 Update 5):\n\nBugs fixed:\n\n- Fixed an issue with dynamic memory allocation replacement on Windows*\n    occurred for some versions of ucrtbase.dll.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 5\nTBB_INTERFACE_VERSION == 10005\n\nChanges (w.r.t. Intel TBB 2018 Update 4):\n\nPreview Features:\n\n- Added user event tracing API for Intel(R) VTune(TM) Amplifier and\n    Flow Graph Analyzer.\n\nBugs fixed:\n\n- Fixed the memory allocator to properly support transparent huge pages.\n- Removed dynamic exception specifications in tbbmalloc_proxy for C++11\n    and later (https://github.com/01org/tbb/issues/41).\n- Added -flifetime-dse=1 option when building with GCC on macOS*\n    (https://github.com/01org/tbb/issues/60).\n\nOpen-source contributions integrated:\n\n- Added ARMv8 support by Siddhesh Poyarekar.\n- Avoid GCC warnings for clearing an object of non-trivial type\n    (https://github.com/01org/tbb/issues/54) by Daniel Arndt.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 4\nTBB_INTERFACE_VERSION == 10004\n\nChanges (w.r.t. Intel TBB 2018 Update 3):\n\nPreview Features:\n\n- Improved support for Flow Graph Analyzer and Intel(R) VTune(TM)\n    Amplifier in the task scheduler and generic parallel algorithms.\n- Default device set for opencl_node now includes all the devices from\n    the first available OpenCL* platform.\n- Added lightweight policy for functional nodes in the flow graph. It\n    indicates that the node body has little work and should, if possible,\n    be executed immediately upon receiving a message, avoiding task\n    scheduling overhead.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 3\nTBB_INTERFACE_VERSION == 10003\n\nChanges (w.r.t. Intel TBB 2018 Update 2):\n\nPreview Features:\n\n- Added template class blocked_rangeNd for a generic multi-dimensional\n    range (requires C++11). Inspired by a contribution from Jeff Hammond.\n\nBugs fixed:\n\n- Fixed a crash with dynamic memory allocation replacement on\n    Windows* for applications using system() function.\n- Fixed parallel_deterministic_reduce to split range correctly when used\n     with static_partitioner.\n- Fixed a synchronization issue in task_group::run_and_wait() which\n    caused a simultaneous call to task_group::wait() to return\n    prematurely.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 2\nTBB_INTERFACE_VERSION == 10002\n\nChanges (w.r.t. Intel TBB 2018 Update 1):\n\n- Added support for Android* NDK r16, macOS* 10.13, Fedora* 26.\n- Binaries for Universal Windows Driver (vc14_uwd) now link with static\n    Microsoft* runtime libraries, and are only available in commercial\n    releases.\n- Extended flow graph documentation with more code samples.\n\nPreview Features:\n\n- Added a Python* module for multi-processing computations in numeric\n    Python* libraries.\n\nBugs fixed:\n\n- Fixed constructors of concurrent_hash_map to be exception-safe.\n- Fixed auto-initialization in the main thread to be cleaned up at\n    shutdown.\n- Fixed a crash when tbbmalloc_proxy is used together with dbghelp.\n- Fixed static_partitioner to assign tasks properly in case of nested\n    parallelism.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 1\nTBB_INTERFACE_VERSION == 10001\n\nChanges (w.r.t. Intel TBB 2018):\n\n- Added lambda-friendly overloads for parallel_scan.\n- Added support of static and simple partitioners in\n    parallel_deterministic_reduce.\n\nPreview Features:\n\n- Added initial support for Flow Graph Analyzer to parallel_for.\n- Added reservation support in overwrite_node and write_once_node.\n\nBugs fixed:\n\n- Fixed a potential deadlock scenario in the flow graph that affected\n    Intel TBB 2018.\n\n------------------------------------------------------------------------\nIntel TBB 2018\nTBB_INTERFACE_VERSION == 10000\n\nChanges (w.r.t. Intel TBB 2017 Update 7):\n\n- Introduced Parallel STL, an implementation of the C++ standard\n    library algorithms with support for execution policies. For more\n    information, see Getting Started with Parallel STL\n    (https://software.intel.com/en-us/get-started-with-pstl).\n- this_task_arena::isolate() function is now a fully supported feature.\n- this_task_arena::isolate() function and task_arena::execute() method\n    were extended to pass on the value returned by the executed functor\n    (requires C++11).\n- task_arena::enqueue() and task_group::run() methods extended to accept\n    move-only functors.\n- A flow graph now spawns all tasks into the same task arena,\n    and waiting for graph completion also happens in that arena.\n- Improved support for Flow Graph Analyzer in async_node, opencl_node,\n    and composite_node.\n- Added support for Android* NDK r15, r15b.\n- Added support for Universal Windows Platform.\n- Increased minimally supported version of macOS*\n    (MACOSX_DEPLOYMENT_TARGET) to 10.11.\n\nChanges affecting backward compatibility:\n\n- Internal layout changes in some flow graph classes;\n- Several undocumented methods are removed from class graph,\n    including set_active() and is_active().\n- Due to incompatible changes, the namespace version is updated\n    for the flow graph; recompilation is recommended for all\n    binaries that use the flow graph classes.\n\nPreview Features:\n\n- opencl_node can be used with any graph object; class opencl_graph\n    is removed.\n- graph::wait_for_all() now automatically waits for all not yet consumed\n    async_msg objects.\n- Improved concurrent_lru_cache::handle_object to support C++11 move\n    semantics, default construction, and conversion to bool.\n\nBugs fixed:\n\n- Fixed a bug preventing use of streaming_node and opencl_node with\n    Clang; inspired by a contribution from Francisco Facioni.\n- Fixed this_task_arena::isolate() function to work correctly with\n    parallel_invoke and parallel_do algorithms.\n- Fixed a memory leak in composite_node.\n- Fixed an assertion failure in debug tbbmalloc binaries when\n    TBBMALLOC_CLEAN_ALL_BUFFERS is used.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 8\nTBB_INTERFACE_VERSION == 9108\n\nChanges (w.r.t. Intel TBB 2017 Update 7):\n\nBugs fixed:\n\n- Fixed an assertion failure in debug tbbmalloc binaries when\n    TBBMALLOC_CLEAN_ALL_BUFFERS is used.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 7\nTBB_INTERFACE_VERSION == 9107\n\nChanges (w.r.t. Intel TBB 2017 Update 6):\n\n- In the huge pages mode, the memory allocator now is also able to use\n    transparent huge pages.\n\nPreview Features:\n\n- Added support for Intel TBB integration into CMake-aware\n    projects, with valuable guidance and feedback provided by Brad King\n    (Kitware).\n\nBugs fixed:\n\n- Fixed scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, 0)\n    to process memory left after exited threads.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 6\nTBB_INTERFACE_VERSION == 9106\n\nChanges (w.r.t. Intel TBB 2017 Update 5):\n\n- Added support for Android* NDK r14.\n\nPreview Features:\n\n- Added a blocking terminate extension to the task_scheduler_init class\n    that allows an object to wait for termination of worker threads.\n\nBugs fixed:\n\n- Fixed compilation and testing issues with MinGW (GCC 6).\n- Fixed compilation with /std:c++latest option of VS 2017\n    (https://github.com/01org/tbb/issues/13).\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 5\nTBB_INTERFACE_VERSION == 9105\n\nChanges (w.r.t. Intel TBB 2017 Update 4):\n\n- Added support for Microsoft* Visual Studio* 2017.\n- Added graph/matmult example to demonstrate support for compute offload\n    to Intel(R) Graphics Technology in the flow graph API.\n- The \"compiler\" build option now allows to specify a full path to the\n    compiler.\n\nChanges affecting backward compatibility:\n\n- Constructors for many classes, including graph nodes, concurrent\n    containers, thread-local containers, etc., are declared explicit and\n    cannot be used for implicit conversions anymore.\n\nBugs fixed:\n\n- Added a workaround for bug 16657 in the GNU C Library (glibc)\n    affecting the debug version of tbb::mutex.\n- Fixed a crash in pool_identify() called for an object allocated in\n    another thread.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 4\nTBB_INTERFACE_VERSION == 9104\n\nChanges (w.r.t. Intel TBB 2017 Update 3):\n\n- Added support for C++11 move semantics in parallel_do.\n- Added support for FreeBSD* 11.\n\nChanges affecting backward compatibility:\n\n- Minimal compiler versions required for support of C++11 move semantics\n    raised to GCC 4.5, VS 2012, and Intel(R) C++ Compiler 14.0.\n\nBugs fixed:\n\n- The workaround for crashes in the library compiled with GCC 6\n    (-flifetime-dse=1) was extended to Windows*.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 3\nTBB_INTERFACE_VERSION == 9103\n\nChanges (w.r.t. Intel TBB 2017 Update 2):\n\n- Added support for Android* 7.0 and Android* NDK r13, r13b.\n\nPreview Features:\n\n- Added template class gfx_factory to the flow graph API. It implements\n    the Factory concept for streaming_node to offload computations to\n    Intel(R) processor graphics.\n\nBugs fixed:\n\n- Fixed a possible deadlock caused by missed wakeup signals in\n    task_arena::execute().\n\nOpen-source contributions integrated:\n\n- A build fix for Linux* s390x platform by Jerry J.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 2\nTBB_INTERFACE_VERSION == 9102\n\nChanges (w.r.t. Intel TBB 2017 Update 1):\n\n- Removed the long-outdated support for Xbox* consoles.\n\nBugs fixed:\n\n- Fixed the issue with task_arena::execute() not being processed when\n    the calling thread cannot join the arena.\n- Fixed dynamic memory allocation replacement failure on macOS* 10.12.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 1\nTBB_INTERFACE_VERSION == 9101\n\nChanges (w.r.t. Intel TBB 2017):\n\nBugs fixed:\n\n- Fixed dynamic memory allocation replacement failures on Windows* 10\n    Anniversary Update.\n- Fixed emplace() method of concurrent unordered containers to not\n    require a copy constructor.\n\n------------------------------------------------------------------------\nIntel TBB 2017\nTBB_INTERFACE_VERSION == 9100\n\nChanges (w.r.t. Intel TBB 4.4 Update 5):\n\n- static_partitioner class is now a fully supported feature.\n- async_node class is now a fully supported feature.\n- Improved dynamic memory allocation replacement on Windows* OS to skip\n    DLLs for which replacement cannot be done, instead of aborting.\n- Intel TBB no longer performs dynamic memory allocation replacement\n    for Microsoft* Visual Studio* 2008.\n- For 64-bit platforms, quadrupled the worst-case limit on the amount\n    of memory the Intel TBB allocator can handle.\n- Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU\n    libstdc++ when it cannot be properly recognized, e.g. when used\n    with Clang on Linux* OS. Inspired by a contribution from David A.\n- Added graph/stereo example to demostrate tbb::flow::async_msg.\n- Removed a few cases of excessive user data copying in the flow graph.\n- Reworked split_node to eliminate unnecessary overheads.\n- Added support for C++11 move semantics to the argument of\n    tbb::parallel_do_feeder::add() method.\n- Added C++11 move constructor and assignment operator to\n    tbb::combinable template class.\n- Added tbb::this_task_arena::max_concurrency() function and\n    max_concurrency() method of class task_arena returning the maximal\n    number of threads that can work inside an arena.\n- Deprecated tbb::task_arena::current_thread_index() static method;\n    use tbb::this_task_arena::current_thread_index() function instead.\n- All examples for commercial version of library moved online:\n    https://software.intel.com/en-us/product-code-samples. Examples are\n    available as a standalone package or as a part of Intel(R) Parallel\n    Studio XE or Intel(R) System Studio Online Samples packages.\n\nChanges affecting backward compatibility:\n\n- Renamed following methods and types in async_node class:\n    Old                   New\n    async_gateway_type => gateway_type\n    async_gateway()    => gateway()\n    async_try_put()    => try_put()\n    async_reserve()    => reserve_wait()\n    async_commit()     => release_wait()\n- Internal layout of some flow graph nodes has changed; recompilation\n    is recommended for all binaries that use the flow graph.\n\nPreview Features:\n\n- Added template class streaming_node to the flow graph API. It allows\n    a flow graph to offload computations to other devices through\n    streaming or offloading APIs.\n- Template class opencl_node reimplemented as a specialization of\n    streaming_node that works with OpenCL*.\n- Added tbb::this_task_arena::isolate() function to isolate execution\n    of a group of tasks or an algorithm from other tasks submitted\n    to the scheduler.\n\nBugs fixed:\n\n- Added a workaround for GCC bug #62258 in std::rethrow_exception()\n    to prevent possible problems in case of exception propagation.\n- Fixed parallel_scan to provide correct result if the initial value\n    of an accumulator is not the operation identity value.\n- Fixed a memory corruption in the memory allocator when it meets\n    internal limits.\n- Fixed the memory allocator on 64-bit platforms to align memory\n    to 16 bytes by default for all allocations bigger than 8 bytes.\n- As a workaround for crashes in the Intel TBB library compiled with\n    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.\n- Fixed a race in the flow graph implementation.\n\nOpen-source contributions integrated:\n\n- Enabling use of C++11 'override' keyword by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 6\nTBB_INTERFACE_VERSION == 9006\n\nChanges (w.r.t. Intel TBB 4.4 Update 5):\n\n- For 64-bit platforms, quadrupled the worst-case limit on the amount\n    of memory the Intel TBB allocator can handle.\n\nBugs fixed:\n\n- Fixed a memory corruption in the memory allocator when it meets\n    internal limits.\n- Fixed the memory allocator on 64-bit platforms to align memory\n    to 16 bytes by default for all allocations bigger than 8 bytes.\n- Fixed parallel_scan to provide correct result if the initial value\n    of an accumulator is not the operation identity value.\n- As a workaround for crashes in the Intel TBB library compiled with\n    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 5\nTBB_INTERFACE_VERSION == 9005\n\nChanges (w.r.t. Intel TBB 4.4 Update 4):\n\n- Modified graph/fgbzip2 example to remove unnecessary data queuing.\n\nPreview Features:\n\n- Added a Python* module which is able to replace Python's thread pool\n    class with the implementation based on Intel TBB task scheduler.\n\nBugs fixed:\n\n- Fixed the implementation of 64-bit tbb::atomic for IA-32 architecture\n    to work correctly with GCC 5.2 in C++11/14 mode.\n- Fixed a possible crash when tasks with affinity (e.g. specified via\n    affinity_partitioner) are used simultaneously with task priority\n    changes.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 4\nTBB_INTERFACE_VERSION == 9004\n\nChanges (w.r.t. Intel TBB 4.4 Update 3):\n\n- Removed a few cases of excessive user data copying in the flow graph.\n- Improved robustness of concurrent_bounded_queue::abort() in case of\n    simultaneous push and pop operations.\n\nPreview Features:\n\n- Added tbb::flow::async_msg, a special message type to support\n    communications between the flow graph and external asynchronous\n    activities.\n- async_node modified to support use with C++03 compilers.\n\nBugs fixed:\n\n- Fixed a bug in dynamic memory allocation replacement for Windows* OS.\n- Fixed excessive memory consumption on Linux* OS caused by enabling\n    zero-copy realloc.\n- Fixed performance regression on Intel(R) Xeon Phi(tm) coprocessor with\n    auto_partitioner.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 3\nTBB_INTERFACE_VERSION == 9003\n\nChanges (w.r.t. Intel TBB 4.4 Update 2):\n\n- Modified parallel_sort to not require a default constructor for values\n    and to use iter_swap() for value swapping.\n- Added support for creating or initializing a task_arena instance that\n    is connected to the arena currently used by the thread.\n- graph/binpack example modified to use multifunction_node.\n- For performance analysis, use Intel(R) VTune(TM) Amplifier XE 2015\n    and higher; older versions are no longer supported.\n- Improved support for compilation with disabled RTTI, by omitting its use\n    in auxiliary code, such as assertions. However some functionality,\n    particularly the flow graph, does not work if RTTI is disabled.\n- The tachyon example for Android* can be built using Android Studio 1.5\n    and higher with experimental Gradle plugin 0.4.0.\n\nPreview Features:\n\n- Added class opencl_subbufer that allows using OpenCL* sub-buffer\n    objects with opencl_node.\n- Class global_control supports the value of 1 for\n    max_allowed_parallelism.\n\nBugs fixed:\n\n- Fixed a race causing \"TBB Warning: setaffinity syscall failed\" message.\n- Fixed a compilation issue on OS X* with Intel(R) C++ Compiler 15.0.\n- Fixed a bug in queuing_rw_mutex::downgrade() that could temporarily\n    block new readers.\n- Fixed speculative_spin_rw_mutex to stop using the lazy subscription\n    technique due to its known flaws.\n- Fixed memory leaks in the tool support code.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 2\nTBB_INTERFACE_VERSION == 9002\n\nChanges (w.r.t. Intel TBB 4.4 Update 1):\n\n- Improved interoperability with Intel(R) OpenMP RTL (libiomp) on Linux:\n    OpenMP affinity settings do not affect the default number of threads\n    used in the task scheduler. Intel(R) C++ Compiler 16.0 Update 1\n    or later is required.\n- Added a new flow graph example with different implementations of the\n    Cholesky Factorization algorithm.\n\nPreview Features:\n\n- Added template class opencl_node to the flow graph API. It allows a\n    flow graph to offload computations to OpenCL* devices.\n- Extended join_node to use type-specified message keys. It simplifies\n    the API of the node by obtaining message keys via functions\n    associated with the message type (instead of node ports).\n- Added static_partitioner that minimizes overhead of parallel_for and\n    parallel_reduce for well-balanced workloads.\n- Improved template class async_node in the flow graph API to support\n    user settable concurrency limits.\n\nBugs fixed:\n\n- Fixed a possible crash in the GUI layer for library examples on Linux.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 1\nTBB_INTERFACE_VERSION == 9001\n\nChanges (w.r.t. Intel TBB 4.4):\n\n- Added support for Microsoft* Visual Studio* 2015.\n- Intel TBB no longer performs dynamic replacement of memory allocation\n    functions for Microsoft Visual Studio 2005 and earlier versions.\n- For GCC 4.7 and higher, the intrinsics-based platform isolation layer\n    uses __atomic_* built-ins instead of the legacy __sync_* ones.\n    This change is inspired by a contribution from Mathieu Malaterre.\n- Improvements in task_arena:\n    Several application threads may join a task_arena and execute tasks\n    simultaneously. The amount of concurrency reserved for application\n    threads at task_arena construction can be set to any value between\n    0 and the arena concurrency limit.\n- The fractal example was modified to demonstrate class task_arena\n    and moved to examples/task_arena/fractal.\n\nBugs fixed:\n\n- Fixed a deadlock during destruction of task_scheduler_init objects\n    when one of destructors is set to wait for worker threads.\n- Added a workaround for a possible crash on OS X* when dynamic memory\n    allocator replacement (libtbbmalloc_proxy) is used and memory is\n    released during application startup.\n- Usage of mutable functors with task_group::run_and_wait() and\n    task_arena::enqueue() is disabled. An attempt to pass a functor\n    which operator()() is not const will produce compilation errors.\n- Makefiles and environment scripts now properly recognize GCC 5.0 and\n    higher.\n\nOpen-source contributions integrated:\n\n- Improved performance of parallel_for_each for inputs allowing random\n    access, by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.4\nTBB_INTERFACE_VERSION == 9000\n\nChanges (w.r.t. Intel TBB 4.3 Update 6):\n\n- The following features are now fully supported:\n    tbb::flow::composite_node;\n    additional policies of tbb::flow::graph_node::reset().\n- Platform abstraction layer for Windows* OS updated to use compiler\n    intrinsics for most atomic operations.\n- The tbb/compat/thread header updated to automatically include\n    C++11 <thread> where available.\n- Fixes and refactoring in the task scheduler and class task_arena.\n- Added key_matching policy to tbb::flow::join_node, which removes\n    the restriction on the type that can be compared-against.\n- For tag_matching join_node, tag_value is redefined to be 64 bits\n    wide on all architectures.\n- Expanded the documentation for the flow graph with details about\n    node semantics and behavior.\n- Added dynamic replacement of C11 standard function aligned_alloc()\n    under Linux* OS.\n- Added C++11 move constructors and assignment operators to\n    tbb::enumerable_thread_specific container.\n- Added hashing support for tbb::tbb_thread::id.\n- On OS X*, binaries that depend on libstdc++ are not provided anymore.\n    In the makefiles, libc++ is now used by default; for building with\n    libstdc++, specify stdlib=libstdc++ in the make command line.\n\nPreview Features:\n\n- Added a new example, graph/fgbzip2, that shows usage of\n    tbb::flow::async_node.\n- Modification to the low-level API for memory pools:\n    added a function for finding a memory pool by an object allocated\n    from that pool.\n- tbb::memory_pool now does not request memory till the first allocation\n    from the pool.\n\nChanges affecting backward compatibility:\n\n- Internal layout of flow graph nodes has changed; recompilation is\n    recommended for all binaries that use the flow graph.\n- Resetting a tbb::flow::source_node will immediately activate it,\n    unless it was created in inactive state.\n\nBugs fixed:\n\n- Failure at creation of a memory pool will not cause process\n    termination anymore.\n\nOpen-source contributions integrated:\n\n- Supported building TBB with Clang on AArch64 with use of built-in\n    intrinsics by David A.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 6\nTBB_INTERFACE_VERSION == 8006\n\nChanges (w.r.t. Intel TBB 4.3 Update 5):\n\n- Supported zero-copy realloc for objects >1MB under Linux* via\n    mremap system call.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent_hash_map container.\n- install_name is set to @rpath/<library name> on OS X*.\n\nPreview Features:\n\n- Added template class async_node to the flow graph API. It allows a\n    flow graph to communicate with an external activity managed by\n    the user or another runtime.\n- Improved speed of flow::graph::reset() clearing graph edges.\n    rf_extract flag has been renamed rf_clear_edges.\n- extract() method of graph nodes now takes no arguments.\n\nBugs fixed:\n\n- concurrent_unordered_{set,map} behaves correctly for degenerate\n    hashes.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 5\nTBB_INTERFACE_VERSION == 8005\n\nChanges (w.r.t. Intel TBB 4.3 Update 4):\n\n- Added add_ref_count() method of class tbb::task.\n\nPreview Features:\n\n- Added class global_control for application-wide control of allowed\n    parallelism and thread stack size.\n- memory_pool_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Exceptions thrown for by memory pool constructors changed from\n    std::bad_alloc to std::invalid_argument and std::runtime_error.\n\nBugs fixed:\n\n- scalable_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n- A new scheduler created right after destruction of the previous one\n    might be unable to modify the number of worker threads.\n\nOpen-source contributions integrated:\n\n- (Added but not enabled) push_front() method of class tbb::task_list\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 4\nTBB_INTERFACE_VERSION == 8004\n\nChanges (w.r.t. Intel TBB 4.3 Update 3):\n\n- Added a C++11 variadic constructor for enumerable_thread_specific.\n    The arguments from this constructor are used to construct\n    thread-local values.\n- Improved exception safety for enumerable_thread_specific.\n- Added documentation for tbb::flow::tagged_msg class and\n    tbb::flow::output_port function.\n- Fixed build errors for systems that do not support dynamic linking.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent unordered containers.\n\nPreview Features:\n\n- Interface-breaking change: typedefs changed for node predecessor and\n    successor lists, affecting copy_predecessors and copy_successors\n    methods.\n- Added template class composite_node to the flow graph API. It packages\n    a subgraph to represent it as a first-class flow graph node.\n- make_edge and remove_edge now accept multiport nodes as arguments,\n    automatically using the node port with index 0 for an edge.\n\nOpen-source contributions integrated:\n\n- Draft code for enumerable_thread_specific constructor with multiple\n    arguments (see above) by Adrien Guinet.\n- Fix for GCC invocation on IBM* Blue Gene*\n    by Jeff Hammond and Raf Schietekat.\n- Extended testing with smart pointers for Clang & libc++\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 3\nTBB_INTERFACE_VERSION == 8003\n\nChanges (w.r.t. Intel TBB 4.3 Update 2):\n\n- Move constructor and assignment operator were added to unique_lock.\n\nPreview Features:\n\n- Time overhead for memory pool destruction was reduced.\n\nOpen-source contributions integrated:\n\n- Build error fix for iOS* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 2\nTBB_INTERFACE_VERSION == 8002\n\nChanges (w.r.t. Intel TBB 4.3 Update 1):\n\n- Binary files for 64-bit Android* applications were added as part of the\n    Linux* OS package.\n- Exact exception propagation is enabled for Intel C++ Compiler on OS X*.\n- concurrent_vector::shrink_to_fit was optimized for types that support\n    C++11 move semantics.\n\nBugs fixed:\n\n- Fixed concurrent unordered containers to insert elements much faster\n    in debug mode.\n- Fixed concurrent priority queue to support types that do not have\n    copy constructors.\n- Fixed enumerable_thread_specific to forbid copying from an instance\n    with a different value type.\n\nOpen-source contributions integrated:\n\n- Support for PathScale* EKOPath* Compiler by Erik Lindahl.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 1\nTBB_INTERFACE_VERSION == 8001\n\nChanges (w.r.t. Intel TBB 4.3):\n\n- The ability to split blocked_ranges in a proportion, used by\n    affinity_partitioner since version 4.2 Update 4, became a formal\n    extension of the Range concept.\n- More checks for an incorrect address to release added to the debug\n    version of the memory allocator.\n- Different kind of solutions for each TBB example were merged.\n\nPreview Features:\n\n- Task priorities are re-enabled in preview binaries.\n\nBugs fixed:\n\n- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is\n    used in multiple compilation units.\n- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04.\n- Fixed a crash in memory release after dynamic replacement of the\n    OS X* memory allocator.\n- Fixed incorrect indexing of arrays in seismic example.\n- Fixed a data race in lazy initialization of task_arena.\n\nOpen-source contributions integrated:\n\n- Fix for dumping information about gcc and clang compiler versions\n    by Misty De Meo.\n\n------------------------------------------------------------------------\nIntel TBB 4.3\nTBB_INTERFACE_VERSION == 8000\n\nChanges (w.r.t. Intel TBB 4.2 Update 5):\n\n- The following features are now fully supported: flow::indexer_node,\n    task_arena, speculative_spin_rw_mutex.\n- Compatibility with C++11 standard improved for tbb/compat/thread\n    and tbb::mutex.\n- C++11 move constructors have been added to concurrent_queue and\n    concurrent_bounded_queue.\n- C++11 move constructors and assignment operators have been added to\n    concurrent_vector, concurrent_hash_map, concurrent_priority_queue,\n    concurrent_unordered_{set,multiset,map,multimap}.\n- C++11 move-aware emplace/push/pop methods have been added to\n    concurrent_vector, concurrent_queue, concurrent_bounded_queue,\n    concurrent_priority_queue.\n- Methods to insert a C++11 initializer list have been added:\n    concurrent_vector::grow_by(), concurrent_hash_map::insert(),\n    concurrent_unordered_{set,multiset,map,multimap}::insert().\n- Testing for compatibility of containers with some C++11 standard\n    library types has been added.\n- Dynamic replacement of standard memory allocation routines has been\n    added for OS X*.\n- Microsoft* Visual Studio* projects for Intel TBB examples updated\n    to VS 2010.\n- For open-source packages, debugging information (line numbers) in\n    precompiled binaries now matches the source code.\n- Debug information was added to release builds for OS X*, Solaris*,\n    FreeBSD* operating systems and MinGW*.\n- Various improvements in documentation, debug diagnostics and examples.\n\nPreview Features:\n\n- Additional actions on reset of graphs, and extraction of individual\n    nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES).\n- Support for an arbitrary number of arguments in parallel_invoke\n   (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE).\n\nChanges affecting backward compatibility:\n\n- For compatibility with C++11 standard, copy and move constructors and\n    assignment operators are disabled for all mutex classes. To allow\n    the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro.\n- flow::sequencer_node rejects messages with repeating sequence numbers.\n- Changed internal interface between tbbmalloc and tbbmalloc_proxy.\n- Following deprecated functionality has been removed:\n    old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS;\n    no-op depth-related methods in class task;\n    tbb::deprecated::concurrent_queue;\n    deprecated variants of concurrent_vector methods.\n- register_successor() and remove_successor() are deprecated as methods\n    to add and remove edges in flow::graph; use make_edge() and\n    remove_edge() instead.\n\nBugs fixed:\n\n- Fixed incorrect scalable_msize() implementation for aligned objects.\n- Flow graph buffering nodes now destroy their copy of forwarded items.\n- Multiple fixes in task_arena implementation, including for:\n    inconsistent task scheduler state inside executed functions;\n    incorrect floating-point settings and exception propagation;\n    possible stalls in concurrent invocations of execute().\n- Fixed floating-point settings propagation when the same instance of\n    task_group_context is used in different arenas.\n- Fixed compilation error in pipeline.h with Intel Compiler on OS X*.\n- Added missed headers for individual components to tbb.h.\n\nOpen-source contributions integrated:\n\n- Range interface addition to parallel_do, parallel_for_each and\n    parallel_sort by Stephan Dollberg.\n- Variadic template implementation of parallel_invoke\n    by Kizza George Mbidde (see Preview Features).\n- Improvement in Seismic example for MacBook Pro* with Retina* display\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 5\nTBB_INTERFACE_VERSION == 7005\n\nChanges (w.r.t. Intel TBB 4.2 Update 4):\n\n- The second template argument of class aligned_space<T,N> now is set\n    to 1 by default.\n\nPreview Features:\n\n- Better support for exception safety, task priorities and floating\n    point settings in class task_arena.\n- task_arena::current_slot() has been renamed to\n    task_arena::current_thread_index().\n\nBugs fixed:\n\n- Task priority change possibly ignored by a worker thread entering\n    a nested parallel construct.\n- Memory leaks inside the task scheduler when running on\n    Intel(R) Xeon Phi(tm) coprocessor.\n\nOpen-source contributions integrated:\n\n- Improved detection of X Window support for Intel TBB examples\n    and other feedback by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 4\nTBB_INTERFACE_VERSION == 7004\n\nChanges (w.r.t. Intel TBB 4.2 Update 3):\n\n- Added possibility to specify floating-point settings at invocation\n    of most parallel algorithms (including flow::graph) via\n    task_group_context.\n- Added dynamic replacement of malloc_usable_size() under\n    Linux*/Android* and dlmalloc_usable_size() under Android*.\n- Added new methods to concurrent_vector:\n    grow_by() that appends a sequence between two given iterators;\n    grow_to_at_least() that initializes new elements with a given value.\n- Improved affinity_partitioner for better performance on balanced\n    workloads.\n- Improvements in the task scheduler, including better scalability\n    when threads search for a task arena, and better diagnostics.\n- Improved allocation performance for workloads that do intensive\n    allocation/releasing of same-size objects larger than ~8KB from\n    multiple threads.\n- Exception support is enabled by default for 32-bit MinGW compilers.\n- The tachyon example for Android* can be built for all targets\n    supported by the installed NDK.\n- Added Windows Store* version of the tachyon example.\n- GettingStarted/sub_string_finder example ported to offload execution\n    on Windows* for Intel(R) Many Integrated Core Architecture.\n\nPreview Features:\n\n- Removed task_scheduler_observer::on_scheduler_leaving() callback.\n- Added task_scheduler_observer::may_sleep() callback.\n- The CPF or_node has been renamed indexer_node. The input to\n    indexer_node is now a list of types. The output of indexer_node is\n    a tagged_msg type composed of a tag and a value. For indexer_node,\n    the tag is a size_t.\n\nBugs fixed:\n\n- Fixed data races in preview extensions of task_scheduler_observer.\n- Added noexcept(false) for destructor of task_group_base to avoid\n    crash on cancellation of structured task group in C++11.\n\nOpen-source contributions integrated:\n\n- Improved concurrency detection for BG/Q, and other improvements\n    by Raf Schietekat.\n- Fix for crashes in enumerable_thread_specific in case if a contained\n    object is too big to be constructed on the stack by Adrien Guinet.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 3\nTBB_INTERFACE_VERSION == 7003\n\nChanges (w.r.t. Intel TBB 4.2 Update 2):\n\n- Added support for Microsoft* Visual Studio* 2013.\n- Improved Microsoft* PPL-compatible form of parallel_for for better\n    support of auto-vectorization.\n- Added a new example for cancellation and reset in the flow graph:\n    Kohonen self-organizing map (examples/graph/som).\n- Various improvements in source code, tests, and makefiles.\n\nBugs fixed:\n\n- Added dynamic replacement of _aligned_msize() previously missed.\n- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling\n    exception if the specified task handle is already scheduled.\n\nOpen-source contributions integrated:\n\n- A fix for ARM* processors by Steve Capper.\n- Improvements in std::swap calls by Robert Maynard.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 2\nTBB_INTERFACE_VERSION == 7002\n\nChanges (w.r.t. Intel TBB 4.2 Update 1):\n\n- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview.\n- Added a test for compatibility of TBB containers with C++11\n    range-based for loop.\n\nChanges affecting backward compatibility:\n\n- Internal layout changed for class tbb::flow::limiter_node.\n\nPreview Features:\n\n- Added speculative_spin_rw_mutex, a read-write lock class which uses\n    Intel(R) Transactional Synchronization Extensions.\n\nBugs fixed:\n\n- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs\n    no longer require explicit linking with librt and libpthread.\n\nOpen-source contributions integrated:\n\n- Fixes for ARM* processors by Steve Capper, Leif Lindholm\n    and Steven Noonan.\n- Support for Clang on Linux by Raf Schietekat.\n- Typo correction in scheduler.cpp by Julien Schueller.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 1\nTBB_INTERFACE_VERSION == 7001\n\nChanges (w.r.t. Intel TBB 4.2):\n\n- Added project files for Microsoft* Visual Studio* 2010.\n- Initial support of Microsoft* Visual Studio* 2013 Preview.\n- Enable C++11 features available in Intel(R) C++ Compiler 14.0.\n- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, <size>) can be\n    used to urge releasing memory from tbbmalloc internal buffers when\n    the given limit is exceeded.\n\nPreview Features:\n\n- Class task_arena no longer requires linking with a preview library,\n    though still remains a community preview feature.\n- The method task_arena::wait_until_empty() is removed.\n- The method task_arena::current_slot() now returns -1 if\n    the task scheduler is not initialized in the thread.\n\nChanges affecting backward compatibility:\n\n- Because of changes in internal layout of graph nodes, the namespace\n    interface number of flow::graph has been incremented from 6 to 7.\n\nBugs fixed:\n\n- Fixed a race in lazy initialization of task_arena.\n- Fixed flow::graph::reset() to prevent situations where tasks would be\n    spawned in the process of resetting the graph to its initial state.\n- Fixed decrement bug in limiter_node.\n- Fixed a race in arc deletion in the flow graph.\n\nOpen-source contributions integrated:\n\n- Improved support for IBM* Blue Gene* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2\nTBB_INTERFACE_VERSION == 7000\n\nChanges (w.r.t. Intel TBB 4.1 Update 4):\n\n- Added speculative_spin_mutex, which uses Intel(R) Transactional\n    Synchronization Extensions when they are supported by hardware.\n- Binary files linked with libc++ (the C++ standard library in Clang)\n    were added on OS X*.\n- For OS X* exact exception propagation is supported with Clang;\n    it requires use of libc++ and corresponding Intel TBB binaries.\n- Support for C++11 initializer lists in constructor and assigment\n    has been added to concurrent_hash_map, concurrent_unordered_set,\n    concurrent_unordered_multiset, concurrent_unordered_map,\n    concurrent_unordered_multimap.\n- The memory allocator may now clean its per-thread memory caches\n    when it cannot get more memory.\n- Added the scalable_allocation_command() function for on-demand\n    cleaning of internal memory caches.\n- Reduced the time overhead for freeing memory objects smaller than ~8K.\n- Simplified linking with the debug library for applications that use\n    Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors.\n    See an example in\n    examples/GettingStarted/sub_string_finder/Makefile.\n- Various improvements in source code, scripts and makefiles.\n\nChanges affecting backward compatibility:\n\n- tbb::flow::graph has been modified to spawn its tasks;\n    the old behaviour (task enqueuing) is deprecated. This change may\n    impact applications that expected a flow graph to make progress\n    without calling wait_for_all(), which is no longer guaranteed. See\n    the documentation for more details.\n- Changed the return values of the scalable_allocation_mode() function.\n\nBugs fixed:\n\n- Fixed a leak of parallel_reduce body objects when execution is\n    cancelled or an exception is thrown, as suggested by Darcy Harrison.\n- Fixed a race in the task scheduler which can lower the effective\n    priority despite the existence of higher priority tasks.\n- On Linux an error during destruction of the internal thread local\n    storage no longer results in an exception.\n\nOpen-source contributions integrated:\n\n- Fixed task_group_context state propagation to unrelated context trees\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 4\nTBB_INTERFACE_VERSION == 6105\n\nChanges (w.r.t. Intel TBB 4.1 Update 3):\n\n- Use /volatile:iso option with VS 2012 to disable extended\n    semantics for volatile variables.\n- Various improvements in affinity_partitioner, scheduler,\n    tests, examples, makefiles.\n- Concurrent_priority_queue class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>).\n\nBugs fixed:\n\n- Fixed more possible stalls in concurrent invocations of\n    task_arena::execute(), especially waiting for enqueued tasks.\n- Fixed requested number of workers for task_arena(P,0).\n- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in\n    case of using task_arena::enqueue() from a terminating thread.\n\nOpen-source contributions integrated:\n\n- Type fixes, cleanups, and code beautification by Raf Schietekat.\n- Improvements in atomic operations for big endian platforms\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 3\nTBB_INTERFACE_VERSION == 6103\n\nChanges (w.r.t. Intel TBB 4.1 Update 2):\n\n- Binary files for Android* applications were added to the Linux* OS\n    package.\n- Binary files for Windows Store* applications were added to the\n    Windows* OS package.\n- Exact exception propagation (exception_ptr) support on Linux OS is\n    now turned on by default for GCC 4.4 and higher.\n- Stopped implicit use of large memory pages by tbbmalloc (Linux-only).\n    Now use of large pages must be explicitly enabled with\n    scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES\n    environment variable.\n\nCommunity Preview Features:\n\n- Extended class task_arena constructor and method initialize() to\n    allow some concurrency to be reserved strictly for application\n    threads.\n- New methods terminate() and is_active() were added to class\n    task_arena.\n\nBugs fixed:\n\n- Fixed initialization of hashing helper constant in the hash\n    containers.\n- Fixed possible stalls in concurrent invocations of\n    task_arena::execute() when no worker thread is available to make\n    progress.\n- Fixed incorrect calculation of hardware concurrency in the presence\n    of inactive processor groups, particularly on systems running\n    Windows* 8 and Windows* Server 2012.\n\nOpen-source contributions integrated:\n\n- The fix for the GUI examples on OS X* systems by Raf Schietekat.\n- Moved some power-of-2 calculations to functions to improve readability\n    by Raf Schietekat.\n- C++11/Clang support improvements by arcata.\n- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara\n    (ARM).\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 2\nTBB_INTERFACE_VERSION == 6102\n\nChanges (w.r.t. Intel TBB 4.1 Update 1):\n\n- Objects up to 128 MB are now cached by the tbbmalloc. Previously\n    the threshold was 8MB. Objects larger than 128 MB are still\n    processed by direct OS calls.\n- concurrent_unordered_multiset and concurrent_unordered_multimap\n    have been added, based on Microsoft* PPL prototype.\n- Ability to value-initialize a tbb::atomic<T> variable on construction\n    in C++11, with const expressions properly supported.\n\nCommunity Preview Features:\n\n- Added a possibility to wait until all worker threads terminate.\n    This is necessary before calling fork() from an application.\n\nBugs fixed:\n\n- Fixed data race in tbbmalloc that might lead to memory leaks\n    for large object allocations.\n- Fixed task_arena::enqueue() to use task_group_context of target arena.\n- Improved implementation of 64 bit atomics on ia32.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 1\nTBB_INTERFACE_VERSION == 6101\n\nChanges (w.r.t. Intel TBB 4.1):\n\n- concurrent_vector class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>)\n- Added implementation of the platform isolation layer based on\n    Intel compiler atomic built-ins; it is supposed to work on\n    any platform supported by compiler version 12.1 and newer.\n- Using GetNativeSystemInfo() instead of GetSystemInfo() to support\n    more than 32 processors for 32-bit applications under WOW64.\n- The following form of parallel_for:\n    parallel_for(first, last, [step,] f[, context]) now accepts an\n    optional partitioner parameter after the function f.\n\nBackward-incompatible API changes:\n\n- The library no longer injects tuple in to namespace std.\n    In previous releases, tuple was injected into namespace std by\n    flow_graph.h when std::tuple was not available.  In this release,\n    flow_graph.h now uses tbb::flow::tuple.  On platforms where\n    std::tuple is available, tbb::flow::tuple is typedef'ed to\n    std::tuple.  On all other platforms, tbb::flow::tuple provides\n    a subset of the functionality defined by std::tuple. Users of\n    flow_graph.h may need to change their uses of std::tuple to\n    tbb::flow::tuple to ensure compatibility with non-C++11 compliant\n    compilers.\n\nBugs fixed:\n\n- Fixed local observer to be able to override propagated CPU state and\n    to provide correct value of task_arena::current_slot() in callbacks.\n\n------------------------------------------------------------------------\nIntel TBB 4.1\nTBB_INTERFACE_VERSION == 6100\n\nChanges (w.r.t. Intel TBB 4.0 Update 5):\n\n- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB\n    on Microsoft* Windows*.\n- parallel_deterministic_reduce template function is fully supported.\n- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC\n    and Intel(R) Compiler.\n- C++11 std::make_exception_ptr is used where available, instead of\n    std::copy_exception from earlier C++0x implementations.\n- Improvements in the TBB allocator to reduce extra memory consumption.\n- Partial refactoring of the task scheduler data structures.\n- TBB examples allow more flexible specification of the thread number,\n    including arithmetic and geometric progression.\n\nBugs fixed:\n\n- On Linux & OS X*, pre-built TBB binaries do not yet support exact\n    exception propagation via C++11 exception_ptr. To prevent run time\n    errors, by default TBB headers disable exact exception propagation\n    even if the C++ implementation provides exception_ptr.\n\nCommunity Preview Features:\n\n- Added: class task_arena, for work submission by multiple application\n    threads with thread-independent control of concurrency level.\n- Added: task_scheduler_observer can be created as local to a master\n    thread, to observe threads that work on behalf of that master.\n    Local observers may have new on_scheduler_leaving() callback.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 5\nTBB_INTERFACE_VERSION == 6005\n\nChanges (w.r.t. Intel TBB 4.0 Update 4):\n\n- Parallel pipeline optimization (directly storing small objects in the\n    interstage data buffers) limited to trivially-copyable types for\n    C++11 and a short list of types for earlier compilers.\n- _VARIADIC_MAX switch is honored for TBB tuple implementation\n    and flow::graph nodes based on tuple.\n- Support of Cocoa framework was added to the GUI examples on OS X*\n    systems.\n\nBugs fixed:\n\n- Fixed a tv_nsec overflow bug in condition_variable::wait_for.\n- Fixed execution order of enqueued tasks with different priorities.\n- Fixed a bug with task priority changes causing lack of progress\n    for fire-and-forget tasks when TBB was initialized to use 1 thread.\n- Fixed duplicate symbol problem when linking multiple compilation\n    units that include flow_graph.h on VC 10.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 4\nTBB_INTERFACE_VERSION == 6004\n\nChanges (w.r.t. Intel TBB 4.0 Update 3):\n\n- The TBB memory allocator transparently supports large pages on Linux.\n- A new flow_graph example, logic_sim, was added.\n- Support for DirectX* 9 was added to GUI examples.\n\nCommunity Preview Features:\n\n- Added: aggregator, a new concurrency control mechanism.\n\nBugs fixed:\n\n- The abort operation on concurrent_bounded_queue now leaves the queue\n    in a reusable state. If a bad_alloc or bad_last_alloc exception is\n    thrown while the queue is recovering from an abort, that exception\n    will be reported instead of user_abort on the thread on which it\n    occurred, and the queue will not be reusable.\n- Steal limiting heuristic fixed to avoid premature stealing disabling\n    when large amount of __thread data is allocated on thread stack.\n- Fixed a low-probability leak of arenas in the task scheduler.\n- In STL-compatible allocator classes, the method construct() was fixed\n    to comply with C++11 requirements.\n- Fixed a bug that prevented creation of fixed-size memory pools\n    smaller than 2M.\n- Significantly reduced the amount of warnings from various compilers.\n\nOpen-source contributions integrated:\n\n- Multiple improvements by Raf Schietekat.\n- Basic support for Clang on OS X* by Blas Rodriguez Somoza.\n- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza\n    and Edward Lam.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 3\nTBB_INTERFACE_VERSION == 6003\n\nChanges (w.r.t. Intel TBB 4.0 Update 2):\n\n- Modifications to the low-level API for memory pools:\n    added support for aligned allocations;\n    pool policies reworked to allow backward-compatible extensions;\n    added a policy to not return memory space till destruction;\n    pool_reset() does not return memory space anymore.\n- Class tbb::flow::graph_iterator added to iterate over all nodes\n    registered with a graph instance.\n- multioutput_function_node has been renamed multifunction_node.\n    multifunction_node and split_node are now fully-supported features.\n- For the tagged join node, the policy for try_put of an item with\n    already existing tag has been defined: the item will be rejected.\n- Matching the behavior on Windows, on other platforms the optional\n    shared libraries (libtbbmalloc, libirml) now are also searched\n    only in the directory where libtbb is located.\n- The platform isolation layer based on GCC built-ins is extended.\n\nBackward-incompatible API changes:\n\n- a graph reference parameter is now required to be passed to the\n    constructors of the following flow graph nodes: overwrite_node,\n    write_once_node, broadcast_node, and the CPF or_node.\n- the following tbb::flow node methods and typedefs have been renamed:\n       Old                             New\n    join_node and or_node:\n       inputs()                 ->     input_ports()\n       input_ports_tuple_type   ->     input_ports_type\n    multifunction_node and split_node:\n       ports_type               ->     output_ports_type\n\nBugs fixed:\n\n- Not all logical processors were utilized on systems with more than\n    64 cores split by Windows into several processor groups.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 6002\n\nChanges (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):\n\n- concurrent_bounded_queue now has an abort() operation that releases\n    threads involved in pending push or pop operations. The released\n    threads will receive a tbb::user_abort exception.\n- Added Community Preview Feature:  concurrent_lru_cache container,\n    a concurrent implementation of LRU (least-recently-used) cache.\n\nBugs fixed:\n\n- fixed a race condition in the TBB scalable allocator.\n- concurrent_queue counter wraparound bug was fixed, which occurred when\n    the number of push and pop operations exceeded ~>4 billion on IA32.\n- fixed races in the TBB scheduler that could put workers asleep too\n    early, especially in presence of affinitized tasks.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 4.0 commercial-aligned release):\n\n- Memory leaks fixed in binpack example.\n- Improvements and fixes in the TBB allocator.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000\n\nChanges (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release):\n\n- concurrent_priority_queue is now a fully supported feature.\n    Capacity control methods were removed.\n- Flow graph is now a fully supported feature.\n- A new memory backend has been implemented in the TBB allocator.\n    It can reuse freed memory for both small and large objects, and\n    returns unused memory blocks to the OS more actively.\n- Improved partitioning algorithms for parallel_for and parallel_reduce\n    to better handle load imbalance.\n- The convex_hull example has been refactored for reproducible\n    performance results.\n- The major interface version has changed from 5 to 6.\n    Deprecated interfaces might be removed in future releases.\n\nCommunity Preview Features:\n\n- Added: serial subset, i.e. sequential implementations of TBB generic\n    algorithms (currently, only provided for parallel_for).\n- Preview of new flow graph nodes:\n    or_node (accepts multiple inputs, forwards each input separately\n      to all successors),\n    split_node (accepts tuples, and forwards each element of a tuple\n      to a corresponding successor), and\n    multioutput_function_node (accepts one input, and passes the input\n    and a tuple of output ports to the function body to support outputs\n    to multiple successors).\n- Added: memory pools for more control on memory source, grouping,\n    and collective deallocation.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 8 commercial-aligned release\nTBB_INTERFACE_VERSION == 5008\n\nChanges (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release):\n\n- Task priorities become an official feature of TBB,\n    not community preview as before.\n- Atomics API extended, and implementation refactored.\n- Added task::set_parent() method.\n- Added concurrent_unordered_set container.\n\nOpen-source contributions integrated:\n\n- PowerPC support by Raf Schietekat.\n- Fix of potential task pool overrun and other improvements\n    in the task scheduler by Raf Schietekat.\n- Fix in parallel_for_each to work with std::set in Visual* C++ 2010.\n\nCommunity Preview Features:\n\n- Graph community preview feature was renamed to flow graph.\n    Multiple improvements in the implementation.\n    Binpack example was added for the feature.\n- A number of improvements to concurrent_priority_queue.\n    Shortpath example was added for the feature.\n- TBB runtime loaded functionality was added (Windows*-only).\n    It allows to specify which versions of TBB should be used,\n    as well as to set directories for the library search.\n- parallel_deterministic_reduce template function was added.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 7 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):\n\n- Added implementation of the platform isolation layer based on\n    GCC atomic built-ins; it is supposed to work on any platform\n    where GCC has these built-ins.\n\nCommunity Preview Features:\n\n- Graph's dining_philosophers example added.\n- A number of improvements to graph and concurrent_priority_queue.\n\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 6 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006\n\nChanges (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release):\n\n- Added Community Preview feature: task and task group priority, and\n    Fractal example demonstrating it.\n- parallel_pipeline optimized for data items of small and large sizes.\n- Graph's join_node is now parametrized with a tuple of up to 10 types.\n- Improved performance of concurrent_priority_queue.\n\nOpen-source contributions integrated:\n\n- Initial NetBSD support by Aleksej Saushev.\n\nBugs fixed:\n\n- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime\n    library, and a crash caused by invoking the interoperability layer\n    after one of the libraries was unloaded.\n- Data race that could result in concurrent_unordered_map structure\n    corruption after call to clear() method.\n- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel\n    compiler on Linux.\n- Inconsistency of exception propagation mode possible when application\n    built with Microsoft* Visual Studio* 2008 or earlier uses TBB built\n    with Microsoft* Visual Studio* 2010.\n- Affinitizing master thread to a subset of available CPUs after TBB\n    scheduler was initialized tied all worker threads to the same CPUs.\n- Method is_stolen_task() always returned 'false' for affinitized tasks.\n- write_once_node and overwrite_node did not immediately send buffered\n    items to successors\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 5 commercial-aligned release\nTBB_INTERFACE_VERSION == 5005\n\nChanges (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release):\n\n- Added Community Preview feature: graph.\n- Added automatic propagation of master thread FPU settings to\n    TBB worker threads.\n- Added a public function to perform a sequentially consistent full\n    memory fence: tbb::atomic_fence() in tbb/atomic.h.\n\nBugs fixed:\n\n- Data race that could result in scheduler data structures corruption\n    when using fire-and-forget tasks.\n- Potential referencing of destroyed concurrent_hash_map element after\n    using erase(accessor&A) method with A acquired as const_accessor.\n- Fixed a correctness bug in the convex hull example.\n\nOpen-source contributions integrated:\n\n- Patch for calls to internal::atomic_do_once() by Andrey Semashev.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 5004\n\nChanges (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):\n\n- Added Community Preview feature: concurrent_priority_queue.\n- Fixed library loading to avoid possibility for remote code execution,\n    see http://www.microsoft.com/technet/security/advisory/2269637.mspx.\n- Added support of more than 64 cores for appropriate Microsoft*\n    Windows* versions. For more details, see\n    http://msdn.microsoft.com/en-us/library/dd405503.aspx.\n- Default number of worker threads is adjusted in accordance with\n    process affinity mask.\n\nBugs fixed:\n\n- Calls of scalable_* functions from inside the allocator library\n    caused issues if the functions were overridden by another module.\n- A crash occurred if methods run() and wait() were called concurrently\n    for an empty tbb::task_group (1736).\n- The tachyon example exhibited build problems associated with\n    bug 554339 on Microsoft* Visual Studio* 2010. Project files were\n    modified as a partial workaround to overcome the problem. See\n    http://connect.microsoft.com/VisualStudio/feedback/details/554339.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 5003\n\nChanges (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release):\n\n- cache_aligned_allocator class reworked to use scalable_aligned_malloc.\n- Improved performance of count() and equal_range() methods\n    in concurrent_unordered_map.\n- Improved implementation of 64-bit atomic loads and stores on 32-bit\n    platforms, including compilation with VC 7.1.\n- Added implementation of atomic operations on top of OSAtomic API\n    provided by OS X*.\n- Removed gratuitous try/catch blocks surrounding thread function calls\n  in tbb_thread.\n- Xcode* projects were added for sudoku and game_of_life examples.\n- Xcode* projects were updated to work without TBB framework.\n\nBugs fixed:\n\n- Fixed a data race in task scheduler destruction that on rare occasion\n    could result in memory corruption.\n- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).\n\nOpen-source contributions integrated:\n\n- MinGW-64 basic support by brsomoza (partially).\n- Patch for atomic.h by Andrey Semashev.\n- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.\n- Various improvements by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 5002\n\nChanges (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release):\n\n- Destructor of tbb::task_group class throws missing_wait exception\n    if there are tasks running when it is invoked.\n- Interoperability layer with Intel Cilk Plus runtime library added\n    to protect TBB TLS in case of nested usage with Intel Cilk Plus.\n- Compilation fix for dependent template names in concurrent_queue.\n- Memory allocator code refactored to ease development and maintenance.\n\nBugs fixed:\n\n- Improved interoperability with other Intel software tools on Linux in\n    case of dynamic replacement of memory allocator (1700)\n- Fixed install issues that prevented installation on\n    Mac OS* X 10.6.4 (1711).\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 commercial-aligned release):\n\n- Decreased memory fragmentation by allocations bigger than 8K.\n- Lazily allocate worker threads, to avoid creating unnecessary stacks.\n\nBugs fixed:\n\n- TBB allocator used much more memory than malloc (1703) - see above.\n- Deadlocks happened in some specific initialization scenarios\n    of the TBB allocator (1701, 1704).\n- Regression in enumerable_thread_specific: excessive requirements\n    for object constructors.\n- A bug in construction of parallel_pipeline filters when body instance\n    was a temporary object.\n- Incorrect usage of memory fences on PowerPC and XBOX360 platforms.\n- A subtle issue in task group context binding that could result\n    in cancellation signal being missed by nested task groups.\n- Incorrect construction of concurrent_unordered_map if specified\n    number of buckets is not power of two.\n- Broken count() and equal_range() of concurrent_unordered_map.\n- Return type of postfix form of operator++ for hash map's iterators.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- All open-source-release changes down to TBB 2.2 U3 below\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20100406 open-source release\n\nChanges (w.r.t. 20100310 open-source release):\n\n- Added support for Microsoft* Visual Studio* 2010, including binaries.\n- Added a PDF file with recommended Design Patterns for TBB.\n- Added parallel_pipeline function and companion classes and functions\n    that provide a strongly typed lambda-friendly pipeline interface.\n- Reworked enumerable_thread_specific to use a custom implementation of\n    hash map that is more efficient for ETS usage models.\n- Added example for class task_group; see examples/task_group/sudoku.\n- Removed two examples, as they were long outdated and superceded:\n    pipeline/text_filter (use pipeline/square);\n    parallel_while/parallel_preorder (use parallel_do/parallel_preorder).\n- PDF documentation updated.\n- Other fixes and changes in code, tests, and examples.\n\nBugs fixed:\n\n- Eliminated build errors with MinGW32.\n- Fixed post-build step and other issues in VS projects for examples.\n- Fixed discrepancy between scalable_realloc and scalable_msize that\n    caused crashes with malloc replacement on Windows.\n\n------------------------------------------------------------------------\n20100310 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- Version macros changed in anticipation of a future release.\n- Directory structure aligned with Intel(R) C++ Compiler;\n    now TBB binaries reside in <arch>/<os_key>/[bin|lib]\n    (in TBB 2.x, it was [bin|lib]/<arch>/<os_key>).\n- Visual Studio projects changed for examples: instead of separate set\n    of files for each VS version, now there is single 'msvs' directory\n    that contains workspaces for MS C++ compiler (<example>_cl.sln) and\n    Intel C++ compiler (<example>_icl.sln). Works with VS 2005 and above.\n- The name versioning scheme for backward compatibility was improved;\n    now compatibility-breaking changes are done in a separate namespace.\n- Added concurrent_unordered_map implementation based on a prototype\n    developed in Microsoft for a future version of PPL.\n- Added PPL-compatible writer-preference RW lock (reader_writer_lock).\n- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names\n    implemented in TBB into namespace std.\n- Added almost-C++0x-compatible std::condition_variable, plus a bunch\n    of other C++0x classes required by condition_variable.\n- With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread.\n- task.cpp was split into several translation units to structure\n    TBB scheduler sources layout. Static data layout and library\n    initialization logic were also updated.\n- TBB scheduler reworked to prevent master threads from stealing\n    work belonging to other masters.\n- Class task was extended with enqueue() method, and slightly changed\n    semantics of methods spawn() and destroy(). For exact semantics,\n    refer to TBB Reference manual.\n- task_group_context now allows for destruction by non-owner threads.\n- Added TBB_USE_EXCEPTIONS macro to control use of exceptions in TBB\n    headers. It turns off (i.e. sets to 0) automatically if specified\n    compiler options disable exception handling.\n- TBB is enabled to run on top of Microsoft's Concurrency Runtime\n    on Windows* 7 (via our worker dispatcher known as RML).\n- Removed old unused busy-waiting code in concurrent_queue.\n- Described the advanced build & test options in src/index.html.\n- Warning level for GCC raised with -Wextra and a few other options.\n- Multiple fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- Xbox support by Roman Lut (Deep Shadows), though further changes are\n    required to make it working; e.g. post-2.1 entry points are missing.\n- \"Eventcount\" by Dmitry Vyukov evolved into concurrent_monitor,\n    an internal class used in the implementation of concurrent_queue.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 4003\n\nChanges (w.r.t. Intel TBB 2.2 Update 2 commercial-aligned release):\n\n- PDF documentation updated.\n\nBugs fixed:\n\n- concurrent_hash_map compatibility issue exposed on Linux in case\n    two versions of the container were used by different modules.\n- enforce 16 byte stack alignment for consistence with GCC; required\n    to work correctly with 128-bit variables processed by SSE.\n- construct() methods of allocator classes now use global operator new.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4002\n\nChanges (w.r.t. Intel TBB 2.2 Update 1 commercial-aligned release):\n\n- parallel_invoke and parallel_for_each now take function objects\n    by const reference, not by value.\n- Building TBB with /MT is supported, to avoid dependency on particular\n    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT\n    are located in vc_mt directory.\n- Class critical_section introduced.\n- Improvements in exception support: new exception classes introduced,\n    all exceptions are thrown via an out-of-line internal method.\n- Improvements and fixes in the TBB allocator and malloc replacement,\n    including robust memory identification, and more reliable dynamic\n    function substitution on Windows*.\n- Method swap() added to class tbb_thread.\n- Methods rehash() and bucket_count() added to concurrent_hash_map.\n- Added support for Visual Studio* 2010 Beta2. No special binaries\n    provided, but CRT-independent DLLs (vc_mt) should work.\n- Other fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- The fix to build 32-bit TBB on Mac OS* X 10.6.\n- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of\n    earlier work by Raf Schietekat.\n\nBugs fixed:\n\n- 159 - TBB build for PowerPC* running Mac OS* X.\n- 160 - IBM* Java segfault if used with TBB allocator.\n- crash in concurrent_queue<char> (1616).\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 4001\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Documentation was updated.\n- TBB scheduler auto-initialization now covers all possible use cases.\n- concurrent_queue: made argument types of sizeof used in paddings\n  consistent with those actually used.\n- Memory allocator was improved: supported corner case of user's malloc\n    calling scalable_malloc (non-Windows), corrected processing of\n    memory allocation requests during tbb memory allocator startup\n    (Linux).\n- Windows malloc replacement has got better support for static objects.\n- In pipeline setups that do not allow actual parallelism, execution\n    by a single thread is guaranteed, idle spinning eliminated, and\n    performance improved.\n- RML refactoring and clean-up.\n- New constructor for concurrent_hash_map allows reserving space for\n    a number of items.\n- Operator delete() added to the TBB exception classes.\n- Lambda support was improved in parallel_reduce.\n- gcc 4.3 warnings were fixed for concurrent_queue.\n- Fixed possible initialization deadlock in modules using TBB entities\n    during construction of global static objects.\n- Copy constructor in concurrent_hash_map was fixed.\n- Fixed a couple of rare crashes in the scheduler possible before\n    in very specific use cases.\n- Fixed a rare crash in the TBB allocator running out of memory.\n- New tests were implemented, including test_lambda.cpp that checks\n    support for lambda expressions.\n- A few other small changes in code, tests, and documentation.\n\n------------------------------------------------------------------------\n20090809 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Fixed known exception safety issues in concurrent_vector.\n- Better concurrency of simultaneous grow requests in concurrent_vector.\n- TBB allocator further improves performance of large object allocation.\n- Problem with source of text relocations was fixed on Linux\n- Fixed bugs related to malloc replacement under Windows\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4000\n\nChanges (w.r.t. Intel TBB 2.1 U4 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Architecture folders renamed from em64t to intel64 and from itanium\n    to ia64.\n- Major Interface version changed from 3 to 4. Deprecated interfaces\n    might be removed in future releases.\n- Parallel algorithms that use partitioners have switched to use\n    the auto_partitioner by default.\n- Improved memory allocator performance for allocations bigger than 8K.\n- Added new thread-bound filters functionality for pipeline.\n- New implementation of concurrent_hash_map that improves performance\n    significantly.\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\n20090511 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Basic support for MinGW32 development kit.\n- Added tbb::zero_allocator class that initializes memory with zeros.\n    It can be used as an adaptor to any STL-compatible allocator class.\n- Added tbb::parallel_for_each template function as alias to parallel_do.\n- Added more overloads for tbb::parallel_for.\n- Added support for exact exception propagation (can only be used with\n    compilers that support C++0x std::exception_ptr).\n- tbb::atomic template class can be used with enumerations.\n- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended\n    with explicit lock/unlock methods.\n- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector\n    to provide space allocation guarantees. More methods added for\n    compatibility with std::vector, including some from C++0x.\n- Preview of a lambda-friendly interface for low-level use of tasks.\n- scalable_msize function added to the scalable allocator (Windows only).\n- Rationalized internal auxiliary functions for spin-waiting and backoff.\n- Several tests undergo decent refactoring.\n\nChanges affecting backward compatibility:\n\n- Improvements in concurrent_queue, including limited API changes.\n    The previous version is deprecated; its functionality is accessible\n    via methods of the new tbb::concurrent_bounded_queue class.\n- grow* and push_back methods of concurrent_vector changed to return\n    iterators; old semantics is deprecated.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 3016\n\nChanges (w.r.t. Intel TBB 2.1 U3 commercial-aligned release):\n\n- Added tests for aligned memory allocations and malloc replacement.\n- Several improvements for better bundling with Intel(R) C++ Compiler.\n- A few other small changes in code and documentaion.\n\nBugs fixed:\n\n- 150 - request to build TBB examples with debug info in release mode.\n- backward compatibility issue with concurrent_queue on Windows.\n- dependency on VS 2005 SP1 runtime libraries removed.\n- compilation of GUI examples under Xcode* 3.1 (1577).\n- On Windows, TBB allocator classes can be instantiated with const types\n    for compatibility with MS implementation of STL containers (1566).\n\n------------------------------------------------------------------------\n20090313 open-source release\n\nChanges (w.r.t. 20081109 open-source release):\n\n- Includes all changes introduced in TBB 2.1 Update 2 & Update 3\n    commercial-aligned releases (see below for details).\n- Added tbb::parallel_invoke template function. It runs up to 10\n    user-defined functions in parallel and waits for them to complete.\n- Added a special library providing ability to replace the standard\n    memory allocation routines in Microsoft* C/C++ RTL (malloc/free,\n    global new/delete, etc.) with the TBB memory allocator.\n    Usage details are described in include/tbb/tbbmalloc_proxy.h file.\n- Task scheduler switched to use new implementation of its core\n    functionality (deque based task pool, new structure of arena slots).\n- Preview of Microsoft* Visual Studio* 2005 project files for\n    building the library is available in build/vsproject folder.\n- Added tests for aligned memory allocations and malloc replacement.\n- Added parallel_for/game_of_life.net example (for Windows only)\n    showing TBB usage in a .NET application.\n- A number of other fixes and improvements to code, tests, makefiles,\n    examples and documents.\n\nBugs fixed:\n\n- The same list as in TBB 2.1 Update 4 right above.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 3015\n\nChanges (w.r.t. Intel TBB 2.1 U2 commercial-aligned release):\n\n- Added support for aligned allocations to the TBB memory allocator.\n- Added a special library to use with LD_PRELOAD on Linux* in order to\n    replace the standard memory allocation routines in C/C++ with the\n    TBB memory allocator.\n- Added null_mutex and null_rw_mutex: no-op classes interface-compliant\n    to other TBB mutexes.\n- Improved performance of parallel_sort, to close most of the serial gap\n    with std::sort, and beat it on 2 and more cores.\n- A few other small changes.\n\nBugs fixed:\n\n- the problem where parallel_for hanged after exception throw\n    if affinity_partitioner was used (1556).\n- get rid of VS warnings about mbstowcs deprecation (1560),\n    as well as some other warnings.\n- operator== for concurrent_vector::iterator fixed to work correctly\n    with different vector instances.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 3014\n\nChanges (w.r.t. Intel TBB 2.1 U1 commercial-aligned release):\n\n- Incorporates all open-source-release changes down to TBB 2.1 U1,\n    except for:\n    - 20081019 addition of enumerable_thread_specific;\n- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;\n    warnings found on this level were cleaned or suppressed.\n- Added TBB_runtime_interface_version API function.\n- Added new example: pipeline/square.\n- Added exception handling and cancellation support\n    for parallel_do and pipeline.\n- Added copy constructor and [begin,end) constructor to concurrent_queue.\n- Added some support for beta version of Intel(R) Parallel Amplifier.\n- Added scripts to set environment for cross-compilation of 32-bit\n    applications on 64-bit Linux with Intel(R) C++ Compiler.\n- Fixed semantics of concurrent_vector::clear() to not deallocate\n    internal arrays. Fixed compact() to perform such deallocation later.\n- Fixed the issue with atomic<T*> when T is incomplete type.\n- Improved support for PowerPC* Macintosh*, including the fix\n    for a bug in masked compare-and-swap reported by a customer.\n- As usual, a number of other improvements everywhere.\n\n------------------------------------------------------------------------\n20081109 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added new serial out of order filter for tbb::pipeline.\n- Fixed the issue with atomic<T*>::operator= reported at the forum.\n- Fixed the issue with using tbb::task::self() in task destructor\n    reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n- Changes in the memory allocator were partially integrated.\n\n------------------------------------------------------------------------\n20081019 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced enumerable_thread_specific<T>.  This new class provides a\n    wrapper around native thread local storage as well as iterators and\n    ranges for accessing the thread local copies (1533).\n- Improved support for Intel(R) Threading Analysis Tools\n    on Intel(R) 64 architecture.\n- Dependency from Microsoft* CRT was integrated to the libraries using\n    manifests, to avoid issues if called from code that uses different\n    version of Visual C++* runtime than the library.\n- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,\n    TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n\n- linker optimization: /incremental:no .\n\n------------------------------------------------------------------------\n20080925 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.\n- Improved support for lambda functions.\n- Fixed more concurrent_queue issues reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3013\n\nChanges (w.r.t. Intel TBB 2.1 commercial-aligned release):\n\n- Fixed small memory leak in the memory allocator.\n- Incorporates all open-source-release changes since TBB 2.1,\n    except for:\n    - 20080825 changes for parallel_do;\n\n------------------------------------------------------------------------\n20080825 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added exception handling and cancellation support for parallel_do.\n- Added default HashCompare template argument for concurrent_hash_map.\n- Fixed concurrent_queue.clear() issues due to incorrect assumption\n    about clear() being private method.\n- Added the possibility to use TBB in applications that change\n    default calling conventions (Windows* only).\n- Many improvements to code, tests, examples, makefiles and documents.\n\nBugs fixed:\n\n- 120, 130 - memset declaration missed in concurrent_hash_map.h\n\n------------------------------------------------------------------------\n20080724 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Inline assembly for atomic operations improved for gcc 4.3\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\n20080709 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- operator=() was added to the tbb_thread class according to\n    the current working draft for std::thread.\n- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.\n\nBugs fixed:\n\n- 127 - concurrent_hash_map::range fixed to split correctly.\n\nOpen-source contributions integrated:\n\n- fix_set_midpoint.diff by jyasskin\n- SPARC* support in makefiles by Raf Schietekat\n\n------------------------------------------------------------------------\n20080622 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a hang that rarely happened on Linux\n    during deinitialization of the TBB scheduler.\n- Improved support for Intel(R) Thread Checker.\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3011\n\nChanges (w.r.t. Intel TBB 2.0 U3 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0 below,\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20080605 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Explicit control of exported symbols by version scripts added on Linux.\n- Interfaces polished for exception handling & algorithm cancellation.\n- Cache behavior improvements in the scalable allocator.\n- Improvements in text_filter, polygon_overlay, and other examples.\n- A lot of other stability improvements in code, tests, and makefiles.\n- First release where binary packages include headers/docs/examples, so\n    binary packages are now self-sufficient for using TBB.\n\nOpen-source contributions integrated:\n\n- atomics patch (partially).\n- tick_count warning patch.\n\nBugs fixed:\n\n- 118 - fix for boost compatibility.\n- 123 - fix for tbb_machine.h.\n\n------------------------------------------------------------------------\n20080512 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a problem with backward binary compatibility\n    of debug Linux builds.\n- Sun* Studio* support added.\n- soname support added on Linux via linker script. To restore backward\n    binary compatibility, *.so -> *.so.2 softlinks should be created.\n- concurrent_hash_map improvements - added few new forms of insert()\n    method and fixed precondition and guarantees of erase() methods.\n    Added runtime warning reporting about bad hash function used for\n    the container. Various improvements for performance and concurrency.\n- Cancellation mechanism reworked so that it does not hurt scalability.\n- Algorithm parallel_do reworked. Requirement for Body::argument_type\n    definition removed, and work item argument type can be arbitrarily\n    cv-qualified.\n- polygon_overlay example added.\n- A few more improvements to code, tests, examples and Makefiles.\n\nOpen-source contributions integrated:\n\n- Soname support patch for Bugzilla #112.\n\nBugs fixed:\n\n- 112 - fix for soname support.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)\n\nCorresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U2 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U2.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- A few more small bug fixes from open-source releases below.\n\n------------------------------------------------------------------------\n20080408 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- count_strings example reworked: new word generator implemented, hash\n    function replaced, and tbb_allocator is used with std::string class.\n- Static methods of spin_rw_mutex were replaced by normal member\n    functions, and the class name was versioned.\n- tacheon example was renamed to tachyon.\n- Improved support for Intel(R) Thread Checker.\n- A few more minor improvements.\n\nOpen-source contributions integrated:\n\n- Two sets of Sun patches for IA Solaris support.\n\n------------------------------------------------------------------------\n20080402 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Exception handling and cancellation support for tasks and algorithms\n    fully enabled.\n- Exception safety guaranties defined and fixed for all concurrent\n    containers.\n- User-defined memory allocator support added to all concurrent\n    containers.\n- Performance improvement of concurrent_hash_map, spin_rw_mutex.\n- Critical fix for a rare race condition during scheduler\n    initialization/de-initialization.\n- New methods added for concurrent containers to be closer to STL,\n    as well as automatic filters removal from pipeline\n    and __TBB_AtomicAND function.\n- The volatile keyword dropped from where it is not really needed.\n- A few more minor improvements.\n\n------------------------------------------------------------------------\n20080319 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for gcc version 4.3 was added.\n- tbb_thread class, near compatible with std::thread expected in C++0x,\n    was added.\n\nBugs fixed:\n\n- 116 - fix for compilation issues with gcc version 4.2.1.\n- 120 - fix for compilation issues with gcc version 4.3.\n\n------------------------------------------------------------------------\n20080311 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- An enumerator added for pipeline filter types (serial vs. parallel).\n- New task_scheduler_observer class introduced, to observe when\n    threads start and finish interacting with the TBB task scheduler.\n- task_scheduler_init reverted to not use internal versioned class;\n    binary compatibility guaranteed with stable releases only.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\n20080304 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support, previously kept under a macro,\n    now fully legalized.\n- Work-in-progress on cache_aligned_allocator improvements.\n- Pipeline really supports parallel input stage; it's no more serialized.\n- Various improvements to code, tests, examples and Makefiles.\n\nBugs fixed:\n\n- 119 - fix for scalable_malloc sometimes failing to return a big block.\n- TR575 - fixed a deadlock occurring on Windows in startup/shutdown\n    under some conditions.\n\n------------------------------------------------------------------------\n20080226 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced tbb_allocator to select between standard allocator and\n    tbb::scalable_allocator when available.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- Improved performance of concurrent_hash_map by using tbb_allocator.\n- Improved support for Intel(R) Thread Checker.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)\n\nCorresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U1.\n- Add support for Microsoft* Visual Studio* 2008, including binary\n    libraries and VS2008 projects for examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Enhancements to Doxygen-readable comments in source code.\n- A few more small bug fixes from open-source releases below.\n\nBugs fixed:\n\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080207 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Improvements and minor fixes in VS2008 projects for examples.\n- Improvements in code for gating worker threads that wait for work,\n  previously consolidated under #if IMPROVED_GATING, now legalized.\n- Cosmetic changes in code, examples, tests.\n\nBugs fixed:\n\n- 113 - Iterators and ranges should be convertible to their const\n    counterparts.\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080122 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Updated examples/parallel_for/seismic to improve the visuals and to\n    use the affinity_partitioner (20071127 and forward) for better\n    performance.\n- Minor improvements to unittests and performance tests.\n\n------------------------------------------------------------------------\n20080115 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Cleanup, simplifications and enhancements to the Makefiles for\n    building the libraries (see build/index.html for high-level\n    changes) and the examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Engineering work-in-progress on exception safety/support.\n- Engineering work-in-progress on affinity_partitioner for\n    parallel_reduce.\n- Engineering work-in-progress on improved gating for worker threads\n    (idle workers now block in the OS instead of spinning).\n- Enhancements to Doxygen-readable comments in source code.\n\nBugs fixed:\n\n- 102 - Support for parallel build with gmake -j\n- 114 - /Wp64 build warning on Windows*.\n\n------------------------------------------------------------------------\n20071218 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Full support for Microsoft* Visual Studio* 2008 in open-source.\n    Binaries for vc9/ will be available in future stable releases.\n- New recursive_mutex class.\n- Full support for 32-bit PowerMac including export files for builds.\n- Improvements to parallel_do.\n\n------------------------------------------------------------------------\n20071206 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for Microsoft* Visual Studio* 2008 in building libraries\n    from source as well as in vc9/ projects for examples.\n- Small fixes to the affinity_partitioner first introduced in 20071127.\n- Small fixes to the thread-stack size hook first introduced in 20071127.\n- Engineering work in progress on concurrent_vector.\n- Engineering work in progress on exception behavior.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20071127 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support (affinity partitioner) first appears.\n- More work on concurrent_vector.\n- New parallel_do algorithm (function-style version of parallel while)\n    and parallel_do/parallel_preorder example.\n- New task_scheduler_init() hooks for getting default_num_threads() and\n    for setting thread stack size.\n- Support for weak memory consistency models in the code base.\n- Futex usage in the task scheduler (Linux).\n- Started adding 32-bit PowerMac support.\n- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler\n    version.\n- TBB libraries added to link line automatically on Microsoft Windows*\n    systems via #pragma comment linker directives.\n\nOpen-source contributions integrated:\n\n- FreeBSD platform support patches.\n- AIX weak memory model patch.\n\nBugs fixed:\n\n- 108 - Removed broken affinity.h reference.\n- 101 - Does not build on Debian Lenny (replaced arch with uname -m).\n\n------------------------------------------------------------------------\n20071030 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- More work on concurrent_vector.\n- Better support for building with -Wall -Werror (or not) as desired.\n- A few fixes to eliminate extraneous warnings.\n- Begin introduction of versioning hooks so that the internal/API\n    version is tracked via TBB_INTERFACE_VERSION.  The newest binary\n    libraries should always work with previously-compiled code when-\n    ever possible.\n- Engineering work in progress on using futex inside the mutexes (Linux).\n- Engineering work in progress on exception behavior.\n- Engineering work in progress on a new parallel_do algorithm.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20070927 open-source release\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Minor update to TBB 2.0 U1 below.\n- Begin introduction of new concurrent_vector interfaces not released\n    with TBB 2.0 U1.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)\n\nCorresponds to commercial 014 (for Linux*, 016) packages.\n\nChanges (w.r.t. Intel TBB 2.0 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0\n    below, were incorporated into this release.\n- Made a number of changes to the officially supported OS list:\n    Added Linux* OSs:\n\tAsianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,\n\tTurbo Linux* 11, Ubuntu* 7.04;\n    Dropped Linux* OSs:\n\tAsianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,\n\tMandriva/Mandrake* 10.1, Miracle Linux* 4.0,\n\tRed Flag* DC Server 5.0;\n    Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and\n\tforward) are now supported.\n- Commercial installers on Linux* fixed to recommend the correct\n    binaries to use in more cases, with less unnecessary warnings.\n- Changes to eliminate spurious build warnings.\n\nOpen-source contributions integrated:\n\n- Two small header guard macro patches; it also fixed bug #94.\n- New blocked_range3d class.\n\nBugs fixed:\n\n- 93 - Removed misleading comments in task.h.\n- 94 - See above.\n\n------------------------------------------------------------------------\n20070815 open-source release\n\nChanges:\n\n- Changes to eliminate spurious build warnings.\n- Engineering work in progress on concurrent_vector allocator behavior.\n- Added hooks to use the Intel(R) compiler code coverage tools.\n\nOpen-source contributions integrated:\n\n- Mac OS* X build warning patch.\n\nBugs fixed:\n\n- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are\n    installed.\n\n------------------------------------------------------------------------\n20070719 open-source release\n\nChanges:\n\n- Minor update to TBB 2.0 commercial-aligned release below.\n- Changes to eliminate spurious build warnings.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 commercial-aligned release (package 010, July 19, 2007)\n\nCorresponds to commercial 010 (for Linux*, 012) packages.\n\n- TBB open-source debut release.\n\n------------------------------------------------------------------------\nIntel TBB 1.1 commercial release (April 10, 2007)\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- auto_partitioner which offered an automatic alternative to specifying\n    a grain size parameter to estimate the best granularity for tasks.\n- The release was added to the Intel(R) C++ Compiler 10.0 Pro.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 2 commercial release\n\nChanges (w.r.t. Intel TBB 1.0 Update 1 commercial release):\n\n- Mac OS* X 64-bit support added.\n- Source packages for commercial releases introduced.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 1 commercial-aligned release\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- Fix for critical package issue on Mac OS* X.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 commercial release (August 29, 2006)\n\nChanges (w.r.t. Intel TBB 1.0 beta commercial release):\n\n- New namespace (and compatibility headers for old namespace).\n    Namespaces are tbb and tbb::internal and all classes are in the\n    underscore_style not the WindowsStyle.\n- New class: scalable_allocator (and cache_aligned_allocator using that\n    if it exists).\n- Added parallel_for/tacheon example.\n- Removed C-style casts from headers for better C++ compliance.\n- Bug fixes.\n- Documentation improvements.\n- Improved performance of the concurrent_hash_map class.\n- Upgraded parallel_sort() to support STL-style random-access iterators\n    instead of just pointers.\n- The Windows vs7_1 directories renamed to vs7.1 in examples.\n- New class: spin version of reader-writer lock.\n- Added push_back() interface to concurrent_vector().\n\n------------------------------------------------------------------------\nIntel TBB 1.0 beta commercial release\n\nInitial release.\n\nFeatures / APIs:\n\n- Concurrent containers: ConcurrentHashTable, ConcurrentVector,\n    ConcurrentQueue.\n- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan,\n    ParallelWhile, Pipeline, ParallelSort.\n- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D\n- Task scheduler with multi-master support.\n- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap.\n- Locks: spin, reader-writer, queuing, OS-wrapper.\n- Memory allocation: STL-style memory allocator that avoids false\n    sharing.\n- Timers.\n\nTools Support:\n- Intel(R) Thread Checker 3.0.\n- Intel(R) Thread Profiler 3.0.\n\nDocumentation:\n- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,\n    Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf.\n- Class hierarchy HTML pages (Doxygen).\n- Tree of index.html pages for navigating the installed package, esp.\n    for the examples.\n\nExamples:\n- One for each of these TBB features: ConcurrentHashTable, ParallelFor,\n    ParallelReduce, ParallelWhile, Pipeline, Task.\n- Live copies of examples from Getting_Started.pdf.\n- TestAll example that exercises every class and header in the package\n    (i.e., a \"liveness test\").\n- Compilers: see Release_Notes.txt.\n- APIs: OpenMP, WinThreads, Pthreads.\n\nPackaging:\n- Package for Windows installs IA-32 and EM64T bits.\n- Package for Linux installs IA-32, EM64T and IPF bits.\n- Package for Mac OS* X installs IA-32 bits.\n- All packages support Intel(R) software setup assistant (ISSA) and\n    install-time FLEXlm license checking.\n- ISSA support allows license file to be specified directly in case of\n    no Internet connection or problems with IRC or serial #s.\n- Linux installer allows root or non-root, RPM or non-RPM installs.\n- FLEXlm license servers (for those who need floating/counted licenses)\n    are provided separately on Intel(R) Premier.\n\n------------------------------------------------------------------------\nIntel, the Intel logo, Xeon, Intel Xeon Phi, and Cilk are registered\ntrademarks or trademarks of Intel Corporation or its subsidiaries in\nthe United States and other countries.\n\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ntbb_root?=.\ninclude $(tbb_root)/build/common.inc\n.PHONY: default all tbb tbbmalloc tbbproxy test examples\n\n#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.ver\n#According to documentation, recursively invoked make commands can process their targets in parallel\n.NOTPARALLEL: tbb tbbmalloc tbbproxy\n\ndefault: tbb tbbmalloc $(if $(use_proxy),tbbproxy)\n\nall: tbb tbbmalloc tbbproxy test examples\n\ntbb: mkdir\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbb cfg=debug\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbb cfg=release\n\ntbbmalloc: mkdir\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc\n\ntbbproxy: mkdir\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy\n\ntest: tbb tbbmalloc $(if $(use_proxy),tbbproxy)\n\t-$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test\n\t-$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.test cfg=debug\n\t-$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test\n\t-$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.test cfg=release\n\nrml: mkdir\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.rml cfg=release\n\nexamples: tbb tbbmalloc\n\t$(MAKE) -C examples -r -f Makefile tbb_root=.. release test\n\npython: tbb\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/Makefile install\n\n.PHONY: clean clean_examples mkdir info\n\nclean: clean_examples\n\t$(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL))\n\t$(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL))\n\t$(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL))\n\t$(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL))\n\t@echo clean done\n\nclean_examples:\n\t$(shell $(MAKE) -s -i -r -C examples -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))\n\nmkdir:\n\t$(shell $(MD) \"$(work_dir)_release\" >$(NUL) 2>$(NUL))\n\t$(shell $(MD) \"$(work_dir)_debug\" >$(NUL) 2>$(NUL))\n\t@echo Created $(work_dir)_release and ..._debug directories\n\ninfo:\n\t@echo OS: $(tbb_os)\n\t@echo arch=$(arch)\n\t@echo compiler=$(compiler)\n\t@echo runtime=$(runtime)\n\t@echo tbb_build_prefix=$(tbb_build_prefix)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/README",
    "content": "Intel(R) Threading Building Blocks - README\n\nSee index.html for directions and documentation.\n\nIf source is present (./Makefile and src/ directories),\ntype 'gmake' in this directory to build and test.\n\nSee examples/index.html for runnable examples and directions.\n\nSee http://threadingbuildingblocks.org for full documentation\nand software information.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/README.md",
    "content": "# Threading Building Blocks 2018 Update 6\n[![Stable release](https://img.shields.io/badge/version-2018_U6-green.svg)](https://github.com/01org/tbb/releases/tag/2018_U6)\n[![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](LICENSE)\n\nThreading Building Blocks (TBB) lets you easily write parallel C++ programs that take\nfull advantage of multicore performance, that are portable, composable and have future-proof scalability.\n\n## Release Information\nHere are the latest [Changes](CHANGES) and [Release Notes](doc/Release_Notes.txt) (contains system requirements and known issues).\n\nSince [2018 U5](https://github.com/01org/tbb/releases/tag/2018_U5) TBB binary packages include [Parallel STL](https://github.com/intel/parallelstl) as a high-level component.\n\n## Documentation\n* TBB [tutorial](https://software.intel.com/en-us/tbb-tutorial)\n* TBB general documentation: [stable](https://software.intel.com/en-us/tbb-documentation)\nand [latest](https://www.threadingbuildingblocks.org/docs/help/index.htm)\n\n## Support\nPlease report issues and suggestions via\n[GitHub issues](https://github.com/01org/tbb/issues) or start a topic on the\n[TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/).\n\n## How to Contribute\nPlease, read the instructions on the official [TBB open source site](https://www.threadingbuildingblocks.org/submit-contribution).\n\n## Engineering team contacts\n* [E-mail us.](mailto:inteltbbdevelopers@intel.com)\n\n------------------------------------------------------------------------\nIntel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.\n\n\\* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/AIX.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nDYLIB_KEY = -shared\nLIBDL = -ldl\n\nCPLUS = g++ \nCONLY = gcc\nLIB_LINK_FLAGS = -shared\nLIBS = -lpthread -ldl \nC_FLAGS = $(CPLUS_FLAGS) -x c\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = -O2 -DUSE_PTHREAD -pthread\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD -pthread\nendif\n\nASM=\nASM_FLAGS=\n\nTBB_ASM.OBJ=\n\nifeq (powerpc,$(arch))\n    CPLUS_FLAGS    += -maix64 -Wl,-G\n    LIB_LINK_FLAGS += -maix64 -Wl,-b64 -Wl,-brtl -Wl,-G\nendif \n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\n\nASSEMBLY_SOURCE=ibm_aix51\nifeq (powerpc,$(arch))\n    TBB_ASM.OBJ = atomic_support.o\nendif\n\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/AIX.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifndef arch\n        arch:=$(shell uname -p)\n        export arch\nendif\n\nifndef runtime\n        gcc_version:=$(shell gcc -dumpversion)\n        os_version:=$(shell uname -r)\n        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')\n        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)\nendif\n\nnative_compiler := gcc\nexport compiler ?= gcc\ndebugger ?= gdb\n\nCMD=$(SHELL) -c\nCWD=$(shell pwd)\nRM?=rm -f\nRD?=rmdir\nMD?=mkdir -p\nNUL= /dev/null\nSLASH=/\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_aix.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh\n\nifdef LIBPATH\n        export LIBPATH := .:$(LIBPATH)\nelse\n        export LIBPATH := .\nendif\n\n####### Build settings ########################################################\n\nOBJ = o\nDLL = so\n\nTBB.LST =\nTBB.DEF =\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nTEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/FreeBSD.clang.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor -Wno-dangling-else\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL =\n\nCPLUS = clang++\nCONLY = clang\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\nLIBS += -lpthread -lrt\nLINK_FLAGS = -Wl,-rpath-link=. -Wl,-rpath=. -rdynamic\nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD\nendif\n\nifneq (,$(stdlib))\n    CPLUS_FLAGS    += -stdlib=$(stdlib)\n    LIB_LINK_FLAGS += -stdlib=$(stdlib)\nendif\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32 -march=pentium4\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (bg,$(arch))\n    CPLUS = bgclang++\n    CONLY = bgclang\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/FreeBSD.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nDYLIB_KEY = -shared\nWARNING_SUPPRESS = -Wno-parentheses\n\nCPLUS = g++ \nCONLY = gcc\nLIB_LINK_FLAGS = -shared\nLIBS = -lpthread \nC_FLAGS = $(CPLUS_FLAGS)\n\n# gcc 6.0 and later have -flifetime-dse option that controls\n# elimination of stores done outside the object lifetime\nifneq (,$(shell gcc -dumpversion | egrep  \"^([6-9])\"))\n    # keep pre-contruction stores for zero initialization\n    DSE_KEY = -flifetime-dse=1\nendif\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD\nendif\n\nASM=\nASM_FLAGS=\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (ia64,$(arch))\n# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables\n    CPLUS_FLAGS += $(PIC_KEY)\nendif \n\nifeq (intel64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif \n\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif \n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASSEMBLY_SOURCE=$(arch)-gas\nifeq (ia64,$(arch))\n    ASM=as\n    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o\n    MALLOC_ASM.OBJ = atomic_support.o lock_byte.o pause.o\nendif \n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/FreeBSD.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifndef arch\n        ifeq ($(shell uname -m),i386)\n                export arch:=ia32\n        endif\n        ifeq ($(shell uname -m),ia64)\n                export arch:=ia64\n        endif\n        ifeq ($(shell uname -m),amd64)\n                export arch:=intel64\n        endif\nendif\n\nifndef runtime\n        clang_version:=$(shell clang -v 2>&1 | grep version | sed \"s/.*version \\([0-9]*\\.[0-9]*\\).*/\\1/\")\n        os_version:=$(shell uname -r)\n        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')\n        export runtime:=cc$(clang_version)_kernel$(os_kernel_version)\nendif\n\nnative_compiler := clang\nexport compiler ?= clang\ndebugger ?= gdb\n\nCMD=$(SHELL) -c\nCWD=$(shell pwd)\nRM?=rm -f\nRD?=rmdir\nMD?=mkdir -p\nNUL= /dev/null\nSLASH=/\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh\n\nifdef LD_LIBRARY_PATH\n        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)\nelse\n        export LD_LIBRARY_PATH := .\nendif\n\n####### Build settings ########################################################\n\nOBJ = o\nDLL = so\nLIBEXT=so\n\nTBB.LST =\nTBB.DEF =\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nTEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/Makefile.rml",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TODO: investigate why version_string.ver is not complete when $(RML_SERVER.OBJ) is being compiled.\n.NOTPARALLEL:\n\ntbb_root ?= $(TBBROOT)\nBUILDING_PHASE=1\nTEST_RESOURCE = $(RML.RES)\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,_$(cfg))\n\nifeq (android,$(target))\n$(error \"RML is not supported on Android\")\nendif\n\n# default target\ndefault_rml: rml rml_test\n\nRML_ROOT ?= $(tbb_root)/src/rml\nRML_SERVER_ROOT = $(RML_ROOT)/server\n\nVPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)\nVPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test $(tbb_root)/src/test\n\ninclude $(tbb_root)/build/common_rules.inc\n\n#--------------------------------------------------------------------------\n# Define rules for making the RML server shared library and client objects.\n#--------------------------------------------------------------------------\n\n# Object files that make up RML server\nRML_SERVER.OBJ = rml_server.$(OBJ)\n\n# Object files that RML clients need\nRML_TBB_CLIENT.OBJ ?= rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ)\nRML_OMP_CLIENT.OBJ ?= rml_omp.$(OBJ) omp_dynamic_link.$(OBJ)\n\nRML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)\nifeq (windows,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ))\nendif\nifeq (linux,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))\nendif\n\nRML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) semaphore_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nTBB_DEP_NON_RML_TEST?= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nifeq ($(cfg),debug)\nRML_TBB_DEP+= spin_mutex_rml.$(OBJ)\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)\nelse\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ)\nendif\nLIBS += $(LIBDL)\n\nINCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).\nT_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)\n\nifeq ($(rml_wcrm),1)\nCPLUS_FLAGS+=/DRML_USE_WCRM\nendif\n\n# Suppress superfluous warnings for RML compilation\nR_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \\\n\t\t $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1\n\n%.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\nifeq (linux,$(tbb_os))\nomp_dynamic_link.$(OBJ): CPLUS_FLAGS+=-fno-exceptions\nendif\n\ntbb_misc_rml.$(OBJ) $(RML_SERVER.OBJ): version_string.ver\n\nRML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)\n\n$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\n$(RML_TEST.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<\n\nifneq (,$(RML.DEF))\nrml.def: $(RML.DEF)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@\n\nLIB_LINK_FLAGS += $(EXPORT_KEY)rml.def\n$(RML.DLL): rml.def\nendif\n\n$(RML.DLL): CPLUS_FLAGS += $(SDL_FLAGS)\n$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)\n$(RML.DLL): $(RML_TBB_DEP) $(RML_SERVER.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ)\n\t$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML_SERVER.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)\n\nifneq (,$(RML_NO_VERSION.DLL))\n$(RML_NO_VERSION.DLL):\n\techo \"INPUT ($(RML.DLL))\" > $(RML_NO_VERSION.DLL)\nendif\n\nrml: $(RML.DLL) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)\n\n#------------------------------------------------------\n# End of rules for making the RML server shared library\n#------------------------------------------------------\n\n#------------------------------------------------------\n# Define rules for making the RML unit tests\n#------------------------------------------------------\n\nadd_debug=$(basename $(1))_debug$(suffix $(1))\ncross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))\n\nRML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT)\nRML_CUSTOM_TESTS = test_rml_tbb.$(TEST_EXT) test_rml_omp.$(TEST_EXT) test_rml_mixed.$(TEST_EXT) test_rml_omp_c_linkage.$(TEST_EXT)\n\ntest_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\ntest_rml_omp.$(TEST_EXT): test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\ntest_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\nrml_omp_stub.$(OBJ): rml_omp_stub.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $<\n\ntest_rml_omp_c_linkage.$(TEST_EXT): test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ)\n\t$(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ) $(LIBS) $(LINK_FLAGS)\n\n$(RML_TESTS): %.$(TEST_EXT): %.$(OBJ) $(TBB_DEP_NON_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\n### run_cmd is usually empty\nrml_test: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RML_CUSTOM_TESTS)\n\t$(run_cmd) ./test_job_automaton.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_thread_monitor.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_rml_tbb.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_rml_omp.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_rml_mixed.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_rml_omp_c_linkage.$(TEST_EXT) $(args)\n\n#------------------------------------------------------\n# End of rules for making the TBBMalloc unit tests\n#------------------------------------------------------\n\n# Include automatically generated dependencies\n-include *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/Makefile.tbb",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Define rules for making the TBB shared library.\n#------------------------------------------------------------------------------\n\ntbb_root ?= \"$(TBBROOT)\"\nBUILDING_PHASE=1\ninclude $(tbb_root)/build/common.inc\nCPLUS_FLAGS += $(SDL_FLAGS)\nDEBUG_SUFFIX=$(findstring _debug,_$(cfg))\n\n#------------------------------------------------------------\n# Define static pattern rules dealing with .cpp source files\n#------------------------------------------------------------\n$(warning CONFIG: cfg=$(cfg) arch=$(arch) compiler=$(compiler) target=$(target) runtime=$(runtime))\n\ndefault_tbb: $(TBB.DLL)\n.PHONY: default_tbb tbbvars clean\n.PRECIOUS: %.$(OBJ)\n\nVPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/rml/client\n\nCPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBB_BUILD=1\n\n# Object files (that were compiled from C++ code) that gmake up TBB\nTBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \\\n\t\tconcurrent_queue.$(OBJ) \\\n\t\tconcurrent_vector.$(OBJ) \\\n\t\tdynamic_link.$(OBJ) \\\n\t\titt_notify.$(OBJ) \\\n\t\tcache_aligned_allocator.$(OBJ) \\\n\t\tpipeline.$(OBJ) \\\n\t\tqueuing_mutex.$(OBJ) \\\n\t\tqueuing_rw_mutex.$(OBJ) \\\n\t\treader_writer_lock.$(OBJ) \\\n\t\tspin_rw_mutex.$(OBJ) \\\n\t\tx86_rtm_rw_mutex.$(OBJ) \\\n\t\tspin_mutex.$(OBJ) \\\n\t\tcritical_section.$(OBJ) \\\n\t\tmutex.$(OBJ) \\\n\t\trecursive_mutex.$(OBJ) \\\n\t\tcondition_variable.$(OBJ) \\\n\t\ttbb_thread.$(OBJ) \\\n\t\tconcurrent_monitor.$(OBJ) \\\n\t\tsemaphore.$(OBJ) \\\n\t\tprivate_server.$(OBJ) \\\n\t\trml_tbb.$(OBJ) \\\n\t\ttbb_misc.$(OBJ) \\\n\t\ttbb_misc_ex.$(OBJ) \\\n\t\ttask.$(OBJ) \\\n\t\ttask_group_context.$(OBJ) \\\n\t\tgovernor.$(OBJ) \\\n\t\tmarket.$(OBJ) \\\n\t\tarena.$(OBJ) \\\n\t\tscheduler.$(OBJ) \\\n\t\tobserver_proxy.$(OBJ) \\\n\t\ttbb_statistics.$(OBJ) \\\n\t\ttbb_main.$(OBJ)\n\n# OLD/Legacy object files for backward binary compatibility\nifeq (,$(findstring $(DEFINE_KEY)TBB_NO_LEGACY,$(CPLUS_FLAGS)))\nTBB_CPLUS_OLD.OBJ = \\\n\t\tconcurrent_vector_v2.$(OBJ) \\\n\t\tconcurrent_queue_v2.$(OBJ) \\\n\t\tspin_rw_mutex_v2.$(OBJ) \\\n\t\ttask_v2.$(OBJ)\nendif\n\n# Object files that gmake up TBB (TBB_ASM.OBJ is platform-specific)\nTBB.OBJ = $(TBB_CPLUS.OBJ) $(TBB_CPLUS_OLD.OBJ) $(TBB_ASM.OBJ)\n\n# Suppress superfluous warnings for TBB compilation\nWARNING_KEY += $(WARNING_SUPPRESS)\n\ninclude $(tbb_root)/build/common_rules.inc\n\nifneq (,$(TBB.DEF))\ntbb.def: $(TBB.DEF) $(TBB.LST)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@\n\nLIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def\n$(TBB.DLL): tbb.def\nendif\n\ntbbvars.sh:\n\t$(MAKE_TBBVARS)\n\n$(TBB.DLL): BUILDING_LIBRARY = $(TBB.DLL)\n$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars.sh $(TBB_NO_VERSION.DLL)\n\t$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(TBB.DLL) $(TBB.OBJ) $(TBB.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)\n\nifneq (,$(TBB_NO_VERSION.DLL))\n$(TBB_NO_VERSION.DLL):\n\techo \"INPUT ($(TBB.DLL))\" > $(TBB_NO_VERSION.DLL)\nendif\n\n#clean:\n#\t$(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9] *.ver\n\n# Include automatically generated dependencies\n-include *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/Makefile.tbbmalloc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# default target\ndefault_malloc: malloc malloc_test\n\ntbb_root ?= $(TBBROOT)\nBUILDING_PHASE=1\nTEST_RESOURCE = $(MALLOC.RES)\nTESTFILE=tbbmalloc\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))\n\nMALLOC_ROOT ?= $(tbb_root)/src/tbbmalloc\nMALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT)\n\nVPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test\nVPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)\n\nCPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1)\n\nTEST_SUFFIXES=proxy\nTEST_PREREQUISITE+=$(MALLOC.LIB)\nLINK_FILES+=$(LINK_MALLOC.LIB)\ninclude $(tbb_root)/build/common_rules.inc\n\nORIG_CPLUS_FLAGS:=$(CPLUS_FLAGS)\nORIG_INCLUDES:=$(INCLUDES)\nORIG_LINK_MALLOC.LIB:=$(LINK_MALLOC.LIB)\n\n#------------------------------------------------------\n# Define rules for making the TBBMalloc shared library.\n#------------------------------------------------------\n\n# Object files that make up TBBMalloc\nMALLOC_CPLUS.OBJ = backend.$(OBJ) large_objects.$(OBJ) backref.$(OBJ)  tbbmalloc.$(OBJ)\nMALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) itt_notify_malloc.$(OBJ) frontend.$(OBJ)\nPROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ)\nM_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBBMALLOC_BUILD=1\nM_INCLUDES := $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)\n\n# Suppress superfluous warnings for TBBMalloc compilation\n$(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)\n# Suppress superfluous warnings for TBBMalloc proxy compilation\n$(PROXY.OBJ): CPLUS_FLAGS += $(WARNING_SUPPRESS)\n\nfrontend.$(OBJ): frontend.cpp version_string.ver\n\t$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<\n\n$(PROXY.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<\n\n$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $<\n\nitt_notify_malloc.$(OBJ): itt_notify.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $<\n\nMALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)\nPROXY_LINK_FLAGS = $(LIB_LINK_FLAGS)\n\nifneq (,$(MALLOC.DEF))\ntbbmalloc.def: $(MALLOC.DEF)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@\n\nMALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def\n$(MALLOC.DLL): tbbmalloc.def\nendif\n\n$(MALLOC.DLL) $(MALLOCPROXY.DLL): CPLUS_FLAGS += $(SDL_FLAGS)\n$(MALLOC.DLL) $(MALLOCPROXY.DLL): M_CPLUS_FLAGS += $(SDL_FLAGS)\n$(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)\n$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)\n\t$(subst $(CPLUS),$(CONLY),$(LIB_LINK_CMD)) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)\n\nifneq (,$(MALLOCPROXY.DEF))\ntbbmallocproxy.def: $(MALLOCPROXY.DEF)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@\n\nPROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def\n$(MALLOCPROXY.DLL): tbbmallocproxy.def\nendif\n\nifneq (,$(MALLOCPROXY.DLL))\n$(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL)\n$(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL) $(MALLOC.RES)\n\t$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS)\nendif\n\nifneq (,$(MALLOC_NO_VERSION.DLL))\n$(MALLOC_NO_VERSION.DLL):\n\techo \"INPUT ($(MALLOC.DLL))\" > $(MALLOC_NO_VERSION.DLL)\nendif\n\nifneq (,$(MALLOCPROXY_NO_VERSION.DLL))\n$(MALLOCPROXY_NO_VERSION.DLL):\n\techo \"INPUT ($(MALLOCPROXY.DLL))\" > $(MALLOCPROXY_NO_VERSION.DLL)\nendif\n\nmalloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL)\n\nmalloc_dll: $(MALLOC.DLL)\n\nmalloc_proxy_dll: $(MALLOCPROXY.DLL)\n\n.PHONY: malloc malloc_dll malloc_proxy_dll\n\n#------------------------------------------------------\n# End of rules for making the TBBMalloc shared library\n#------------------------------------------------------\n\n#------------------------------------------------------\n# Define rules for making the TBBMalloc unit tests\n#------------------------------------------------------\n\n# --------- The list of TBBMalloc unit tests ----------\nMALLOC_TESTS = test_ScalableAllocator.$(TEST_EXT) \\\n               test_ScalableAllocator_STL.$(TEST_EXT) \\\n               test_malloc_compliance.$(TEST_EXT) \\\n               test_malloc_regression.$(TEST_EXT) \\\n               test_malloc_init_shutdown.$(TEST_EXT) \\\n               test_malloc_pools.$(TEST_EXT) \\\n               test_malloc_pure_c.$(TEST_EXT) \\\n               test_malloc_whitebox.$(TEST_EXT) \\\n               test_malloc_used_by_lib.$(TEST_EXT) \\\n               test_malloc_lib_unload.$(TEST_EXT)\nifneq (,$(MALLOCPROXY.DLL))\nMALLOC_TESTS += test_malloc_overload.$(TEST_EXT) \\\n                test_malloc_overload_proxy.$(TEST_EXT) \\\n                test_malloc_atexit.$(TEST_EXT)\nendif\n# -----------------------------------------------------\n\n# ------------ Set test specific variables ------------\n# TODO: implement accurate warning suppression for tests to unify with Makefile.test.\n$(MALLOC_TESTS): CPLUS_FLAGS += $(TEST_WARNING_KEY) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1)\n$(MALLOC_TESTS): M_CPLUS_FLAGS += $(TEST_WARNING_KEY) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1)\n$(MALLOC_TESTS): INCLUDES += $(INCLUDE_TEST_HEADERS)\n$(MALLOC_TESTS): M_INCLUDES += $(INCLUDE_TEST_HEADERS)\n\nifeq (windows.gcc,$(tbb_os).$(compiler))\ntest_malloc_overload.$(TEST_EXT): LIBS += $(MALLOCPROXY.LIB)\nendif\n\nMALLOC_M_CPLUS_TESTS =    test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \\\n        test_malloc_used_by_lib.$(TEST_EXT)\nMALLOC_NO_LIB_TESTS =     test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \\\n        test_malloc_used_by_lib.$(TEST_EXT) test_malloc_overload.$(TEST_EXT)\nMALLOC_LINK_PROXY_TESTS = test_malloc_overload_proxy.$(TEST_EXT)\nMALLOC_ADD_DLL_TESTS =    test_malloc_lib_unload.$(TEST_EXT) test_malloc_used_by_lib.$(TEST_EXT) \\\n        test_malloc_atexit.$(TEST_EXT)\n\n$(MALLOC_M_CPLUS_TESTS): CPLUS_FLAGS=$(M_CPLUS_FLAGS)\n$(MALLOC_M_CPLUS_TESTS): INCLUDES=$(M_INCLUDES)\n$(MALLOC_NO_LIB_TESTS): LINK_MALLOC.LIB=\n$(MALLOC_NO_LIB_TESTS): LINK_FLAGS+=$(LIBDL)\n$(MALLOC_LINK_PROXY_TESTS): LINK_MALLOC.LIB=$(LINK_MALLOCPROXY.LIB)\nifneq (,$(DYLIB_KEY))\n$(MALLOC_ADD_DLL_TESTS): %.$(TEST_EXT): %_dll.$(DLL)\n$(MALLOC_ADD_DLL_TESTS): TEST_LIBS+=$(@:.$(TEST_EXT)=_dll.$(LIBEXT))\nendif\n\n# test_malloc_pure_c is intended to be compiled by CONLY\n# compiler. Hence cannot include any C++-compiler options.\n# TODO: separate C and C++ compiler options (i.e. C_FLAGS and CPLUS_FLAGS).\ntest_malloc_pure_c.$(TEST_EXT): CPLUS_FLAGS := $(subst -Woverloaded-virtual,,$(CPLUS_FLAGS))\ntest_malloc_pure_c.$(TEST_EXT): CPLUS_FLAGS := $(subst -Wnon-virtual-dtor,,$(CPLUS_FLAGS))\n\ntest_malloc_over%.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))\ntest_malloc_over%.$(TEST_EXT): INCLUDES=$(M_INCLUDES)\ntest_malloc_overload_proxy.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)\n\ntest_malloc_atexit_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))\ntest_malloc_atexit.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))\ntest_malloc_atexit.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)\n# on Ubuntu 11.10 linker called with --as-needed, so dependency on libtbbmalloc_proxy\n# is not created, and malloc overload via linking with -ltbbmalloc_proxy is not working.\n# Overcome with --no-as-needed.\nifeq (linux.gcc,$(tbb_os).$(compiler))\ntest_malloc_atexit.$(TEST_EXT): MALLOCPROXY.LIB := -Wl,--no-as-needed $(MALLOCPROXY.LIB)\nendif\n# The test isn't added to MALLOC_LINK_PROXY_TESTS, because we need both\n# tbbmalloc and proxy libs. For platforms other than Android it's enough\n# to modify LINK_MALLOC.LIB for TEST_EXT target only. But under Android build\n# of DLL and TEST_EXT can be requested independently, so there is no chance\n# to set LINK_MALLOC.LIB in TEST_EXT build rule, and affect DLL build.\ntest_malloc_atexit.$(TEST_EXT): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB)\ntest_malloc_atexit_dll.$(DLL): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB)\n\ntest_malloc_whitebox.$(TEST_EXT): $(MALLOC_ASM.OBJ) version_string.ver\ntest_malloc_whitebox.$(TEST_EXT): INCLUDES+=$(INCLUDE_KEY).\ntest_malloc_whitebox.$(TEST_EXT): LINK_FILES+=$(MALLOC_ASM.OBJ)\n\n# Some _dll targets need to restore variables since they are changed by parent\n# target-specific rule of its .exe targets\ntest_malloc_lib_unload_dll.$(DLL): CPLUS_FLAGS=$(ORIG_CPLUS_FLAGS) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1)\ntest_malloc_lib_unload_dll.$(DLL): INCLUDES=$(ORIG_INCLUDES) $(INCLUDE_TEST_HEADERS)\n\ntest_malloc_used_by_lib_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/LD,$(M_CPLUS_FLAGS))\ntest_malloc_used_by_lib_dll.$(DLL): LINK_FILES+=$(ORIG_LINK_MALLOC.LIB)\ntest_malloc_used_by_lib_dll.$(DLL): LIBDL=\n# -----------------------------------------------------\n\n# ---- The list of TBBMalloc test running commands ----\n# run_cmd is usually empty\nmalloc_test: $(MALLOC.DLL) malloc_test_no_depends\n\nmalloc_test_no_depends: $(TEST_PREREQUISITE) $(MALLOC_TESTS)\n\t$(run_cmd) ./test_malloc_pools.$(TEST_EXT) $(args) 1:4\nifneq (,$(MALLOCPROXY.DLL))\n\t$(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args)\n\t$(run_cmd) $(TEST_LAUNCHER) -l $(MALLOCPROXY.DLL) ./test_malloc_overload.$(TEST_EXT) $(args)\n\t$(run_cmd) $(TEST_LAUNCHER) ./test_malloc_overload_proxy.$(TEST_EXT) $(args)\nendif\n\t$(run_cmd) $(TEST_LAUNCHER) ./test_malloc_lib_unload.$(TEST_EXT) $(args)\n\t$(run_cmd) $(TEST_LAUNCHER) ./test_malloc_used_by_lib.$(TEST_EXT)\n\t$(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) $(args) 1:4\n\t$(run_cmd) $(TEST_LAUNCHER) -u ./test_malloc_compliance.$(TEST_EXT) $(args) 1:4\n\t$(run_cmd) ./test_ScalableAllocator.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_malloc_regression.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_malloc_init_shutdown.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_malloc_pure_c.$(TEST_EXT) $(args)\n# -----------------------------------------------------\n\n#------------------------------------------------------\n# End of rules for making the TBBMalloc unit tests\n#------------------------------------------------------\n\n# Include automatically generated dependencies\n-include *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/Makefile.tbbproxy",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# default target\ndefault_tbbproxy: tbbproxy tbbproxy_test\n\ntbb_root ?= $(TBBROOT)\nBUILDING_PHASE=1\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,_$(cfg))\n\nPROXY_ROOT ?= $(tbb_root)/src/tbbproxy\nPROXY_SOURCE_ROOT ?= $(PROXY_ROOT)\n\nVPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test\nVPATH += $(PROXY_ROOT) $(PROXY_SOURCE_ROOT)\n\nCPLUS_FLAGS += $(DEFINE_KEY)__TBB_DLL_NAME=$(TBB.DLL)\nCPLUS_FLAGS += $(DEFINE_KEY)__TBB_LST=$(TBB.LST)\nCPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir))\nCPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY)\n\ninclude $(tbb_root)/build/common_rules.inc\n\n#------------------------------------------------------\n# Define rules for making the TBB Proxy static library.\n#------------------------------------------------------\n\n# Object files that make up TBB Proxy\nPROXY_CPLUS.OBJ = tbbproxy.$(OBJ)\nPROXY_ASM.OBJ   = tbbproxy-asm.$(OBJ)\nPROXY.OBJ := $(PROXY_CPLUS.OBJ) $(PROXY_ASM.OBJ)\n\n# Not using intrinsics prevents undesired dependence on ICL libraries (e.g. libirc).\n# Not using default libs prevents link issues caused by different CRT versions in tbbproxy and in an app.\n$(PROXY.OBJ): CPLUS_FLAGS += $(DEFINE_KEY)ARCH_$(arch) $(DEFINE_KEY)OS_$(tbb_os) $(NOINTRINSIC_KEY) $(NODEFAULTLIB_KEY)\n\n$(PROXY_CPLUS.OBJ): CPLUS_FLAGS+=$(if $(filter windows.%cl,$(tbb_os).$(compiler)),/Fdtbbproxy$(DEBUG_SUFFIX).pdb)\n$(PROXY_CPLUS.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $<\n\n$(PROXY.LIB): $(PROXY.OBJ)\n\t$(AR) $(AR_FLAGS) $(AR_OUTPUT_KEY)$@ $^\n\n.PRECIOUS : %.$(ASMEXT)\ntbbproxy-asm.$(ASMEXT) : tbbproxy-$(tbb_os).$(ASMEXT) $(TBB.LST) $(TBB-OBJECTS.LST)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(INCLUDES) $(CPLUS_FLAGS) $(DEFINE_KEY)__TBB_BUILD=1 > $@\n\n.PHONY: tbbproxy\nifeq (windows,$(tbb_os))\ntbbproxy: $(PROXY.LIB)\nelse\ntbbproxy:\nendif\n\n#------------------------------------------------------\n# End of rules for making the TBB Proxy static library\n#------------------------------------------------------\n\n#------------------------------------------------------\n# Define rules for making the TBB Proxy unit tests\n#------------------------------------------------------\n\nadd_debug=$(basename $(1))_debug$(suffix $(1))\ncross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))\n\nPROXY_LIB        = $(call cross_suffix,$(PROXY.LIB))\nPROXY_TESTS_SRCS = test_runtime_loader.cpp\nPROXY_TESTS_OBJS = $(PROXY_TESTS_SRCS:.cpp=.$(OBJ))\nPROXY_TESTS_EXES = $(PROXY_TESTS_OBJS:.$(OBJ)=.$(TEST_EXT))\n\n# Run rules.\n.PHONY: tbbproxy_test\nifeq (windows,$(tbb_os))\ntbbproxy_test: $(call cross_suffix,$(PROXY.LIB)) $(TEST_PREREQUISITE) $(PROXY_TESTS_EXES)\n\t$(run_cmd) ./test_runtime_loader.$(TEST_EXT) $(args)\nelse\ntbbproxy_test:\nendif\n\n# Link rules.\n$(PROXY_TESTS_EXES): %.$(TEST_EXT): %.$(OBJ) $(PROXY_LIB)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(PROXY_LIB) $(LIBS) $(LIBDL) $(LINK_FLAGS)\n\n# Compilation rules.\n$(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(OUTPUT_KEY)$@ $<\n\n#------------------------------------------------------\n# End of rules for making the TBB Proxy unit tests\n#------------------------------------------------------\n\n# Include automatically generated dependencies\n-include *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/Makefile.test",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Define rules for making the TBB tests.\n#------------------------------------------------------------------------------\n.PHONY: default test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old clean\n\ndefault: test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old\n\ntbb_root ?= $(TBBROOT)\nBUILDING_PHASE=1\nTEST_RESOURCE = $(TBB.RES)\nTESTFILE=test\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))\n\n#------------------------------------------------------------\n# Define static pattern rules dealing with .cpp source files\n#------------------------------------------------------------\n\nVPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/rml/client $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf\nCPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1) \\\n               $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1) \\\n               $(if $(LINK_TBB.LIB),$(DEFINE_KEY)TEST_USES_TBB=1)\n\nTEST_PREREQUISITE+=$(TBB.LIB)\nLINK_FILES+=$(LINK_TBB.LIB)\n\nifdef use_proxy\n    USE_PROXY_FLAG = $(DEFINE_KEY)HARNESS_USE_RUNTIME_LOADER\n    CPLUS_FLAGS += $(USE_PROXY_FLAG)\n    LINK_TBB.LIB = $(PROXY.LIB)\n    LIBS += $(LIBDL)\nendif\n\nTEST_SUFFIXES=secondary compiler_builtins pic\ninclude $(tbb_root)/build/common_rules.inc\n\n# Rules for the tests, which use TBB in a dynamically loadable library\ntest_model_plugin.$(TEST_EXT): LINK_TBB.LIB =\ntest_model_plugin.$(TEST_EXT): CPLUS_FLAGS := $(CPLUS_FLAGS:$(USE_PROXY_FLAG)=)\ntest_model_plugin.$(TEST_EXT): LIBS += $(LIBDL)\nifneq (,$(DYLIB_KEY))\ntest_model_plugin.$(TEST_EXT): test_model_plugin_dll.$(DLL)\nendif\n\n# tbb_misc.$(OBJ) has to be specified here (instead of harness_inject_scheduler.h) because it carries dependency on version_string.ver\nSCHEDULER_DEPENDENCIES = $(TBB_ASM.OBJ) tbb_misc.$(OBJ)\n\n# These executables don't depend on the TBB library, but include core .cpp files directly\nSCHEDULER_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \\\n    test_task_assertions.$(TEST_EXT) \\\n    test_fast_random.$(TEST_EXT) \\\n    test_global_control_whitebox.$(TEST_EXT) \\\n    test_concurrent_queue_whitebox.$(TEST_EXT)\n\n# Necessary to locate version_string.ver referenced from directly included tbb_misc.cpp\nINCLUDES += $(INCLUDE_KEY). $(INCLUDE_TEST_HEADERS)\n\n$(SCHEDULER_DIRECTLY_INCLUDED): CPLUS_FLAGS += $(DSE_KEY)\n$(SCHEDULER_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)\n$(SCHEDULER_DIRECTLY_INCLUDED): LIBS += $(LIBDL)\n#tbb.lib must not be linked to scheduler white box tests in order to not violate ODR\n$(SCHEDULER_DIRECTLY_INCLUDED): LINK_TBB.LIB =\n$(SCHEDULER_DIRECTLY_INCLUDED): LINK_FILES += $(SCHEDULER_DEPENDENCIES)\n$(SCHEDULER_DIRECTLY_INCLUDED): $(SCHEDULER_DEPENDENCIES)\n\n# test_tbb_header detects \"multiple definition\" linker error using the test that covers the whole library\nTWICE_LINKED_TESTS = test_tbb_header.$(TEST_EXT) \\\n                     test_concurrent_unordered_set.$(TEST_EXT)\n\n%_secondary.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_SECONDARY=1\n\n# Detecting \"multiple definition\" linker error using the test that covers the whole library\n$(TWICE_LINKED_TESTS): %.$(TEST_EXT): %.$(OBJ) %_secondary.$(OBJ)\n$(TWICE_LINKED_TESTS): LINK_FILES+=$(@:.$(TEST_EXT)=_secondary.$(OBJ))\n\n# Checks that TBB works correctly in position independent code\n%_pic.$(OBJ): CPLUS_FLAGS+=$(PIC_KEY)\n%_pic.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_PIC=1\n\n# Test of generic gcc port and icc intrinsics port\n%_compiler_builtins.$(TEST_EXT): LINK_TBB.LIB =\n%_compiler_builtins.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_BUILTINS=1 $(DEFINE_KEY)TBB_USE_ASSERT=0\n\n# dynamic_link tests don't depend on the TBB library\ntest_dynamic_link%.$(TEST_EXT): LINK_TBB.LIB =\ntest_dynamic_link.$(TEST_EXT): LIBS += $(LIBDL)\n\n# Resolving issue with the number of sections that an object file can contain\nifneq (,$(BIGOBJ_KEY))\nTEST_BIGOBJ = test_opencl_node.$(TEST_EXT)      \\\n    test_atomic.$(TEST_EXT)                     \\\n    test_concurrent_unordered_set.$(TEST_EXT)   \\\n    test_concurrent_unordered_map.$(TEST_EXT)   \\\n    test_join_node_key_matching.$(TEST_EXT)     \\\n    test_join_node_msg_key_matching.$(TEST_EXT) \\\n    test_join_node.$(TEST_EXT)\n$(TEST_BIGOBJ): override CXXFLAGS += $(BIGOBJ_KEY)\nendif\n\n# TODO: remove repetition of .$(TEST_EXT) in the list bellow\n# The main list of TBB tests\nTEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \\\n\ttest_global_control.$(TEST_EXT)              \\\n\ttest_tbb_fork.$(TEST_EXT)                    \\\n\ttest_assembly_compiler_builtins.$(TEST_EXT)  \\\n\ttest_aligned_space.$(TEST_EXT)               \\\n\ttest_atomic.$(TEST_EXT)                      \\\n\ttest_atomic_pic.$(TEST_EXT)                  \\\n\ttest_atomic_compiler_builtins.$(TEST_EXT)    \\\n\ttest_blocked_range.$(TEST_EXT)               \\\n\ttest_blocked_range2d.$(TEST_EXT)             \\\n\ttest_blocked_range3d.$(TEST_EXT)             \\\n\ttest_blocked_rangeNd.$(TEST_EXT)             \\\n\ttest_concurrent_queue.$(TEST_EXT)            \\\n\ttest_concurrent_vector.$(TEST_EXT)           \\\n\ttest_concurrent_unordered_set.$(TEST_EXT)    \\\n\ttest_concurrent_unordered_map.$(TEST_EXT)    \\\n\ttest_concurrent_hash_map.$(TEST_EXT)         \\\n\ttest_enumerable_thread_specific.$(TEST_EXT)  \\\n\ttest_handle_perror.$(TEST_EXT)               \\\n\ttest_halt.$(TEST_EXT)                        \\\n\ttest_model_plugin.$(TEST_EXT)                \\\n\ttest_mutex.$(TEST_EXT)                       \\\n\ttest_mutex_native_threads.$(TEST_EXT)        \\\n\ttest_rwm_upgrade_downgrade.$(TEST_EXT)       \\\n\ttest_cache_aligned_allocator.$(TEST_EXT)     \\\n\ttest_cache_aligned_allocator_STL.$(TEST_EXT) \\\n\ttest_parallel_for.$(TEST_EXT)                \\\n\ttest_parallel_reduce.$(TEST_EXT)             \\\n\ttest_parallel_sort.$(TEST_EXT)               \\\n\ttest_parallel_scan.$(TEST_EXT)               \\\n\ttest_parallel_while.$(TEST_EXT)              \\\n\ttest_parallel_do.$(TEST_EXT)                 \\\n\ttest_pipeline.$(TEST_EXT)                    \\\n\ttest_pipeline_with_tbf.$(TEST_EXT)           \\\n\ttest_parallel_pipeline.$(TEST_EXT)           \\\n\ttest_lambda.$(TEST_EXT)                      \\\n\ttest_task_scheduler_init.$(TEST_EXT)         \\\n\ttest_task_scheduler_observer.$(TEST_EXT)     \\\n\ttest_task.$(TEST_EXT)                        \\\n\ttest_tbb_thread.$(TEST_EXT)                  \\\n\ttest_std_thread.$(TEST_EXT)                  \\\n\ttest_tick_count.$(TEST_EXT)                  \\\n\ttest_inits_loop.$(TEST_EXT)                  \\\n\ttest_yield.$(TEST_EXT)                       \\\n\ttest_eh_tasks.$(TEST_EXT)                    \\\n\ttest_eh_algorithms.$(TEST_EXT)               \\\n\ttest_eh_flow_graph.$(TEST_EXT)               \\\n\ttest_parallel_invoke.$(TEST_EXT)             \\\n\ttest_task_group.$(TEST_EXT)                  \\\n\ttest_ittnotify.$(TEST_EXT)                   \\\n\ttest_parallel_for_each.$(TEST_EXT)           \\\n\ttest_tbb_header.$(TEST_EXT)                  \\\n\ttest_combinable.$(TEST_EXT)                  \\\n\ttest_task_auto_init.$(TEST_EXT)              \\\n\ttest_task_arena.$(TEST_EXT)                  \\\n\ttest_concurrent_monitor.$(TEST_EXT)          \\\n\ttest_semaphore.$(TEST_EXT)                   \\\n\ttest_critical_section.$(TEST_EXT)            \\\n\ttest_reader_writer_lock.$(TEST_EXT)          \\\n\ttest_tbb_condition_variable.$(TEST_EXT)      \\\n\ttest_intrusive_list.$(TEST_EXT)              \\\n\ttest_concurrent_priority_queue.$(TEST_EXT)   \\\n\ttest_task_priority.$(TEST_EXT)               \\\n\ttest_task_enqueue.$(TEST_EXT)                \\\n\ttest_task_steal_limit.$(TEST_EXT)            \\\n\ttest_hw_concurrency.$(TEST_EXT)              \\\n\ttest_fp.$(TEST_EXT)                          \\\n\ttest_tuple.$(TEST_EXT)                       \\\n\ttest_flow_graph.$(TEST_EXT)                  \\\n\ttest_broadcast_node.$(TEST_EXT)              \\\n\ttest_continue_node.$(TEST_EXT)               \\\n\ttest_function_node.$(TEST_EXT)               \\\n\ttest_limiter_node.$(TEST_EXT)                \\\n\ttest_join_node.$(TEST_EXT)                   \\\n\ttest_join_node_key_matching.$(TEST_EXT)      \\\n\ttest_join_node_msg_key_matching.$(TEST_EXT)  \\\n\ttest_buffer_node.$(TEST_EXT)                 \\\n\ttest_queue_node.$(TEST_EXT)                  \\\n\ttest_priority_queue_node.$(TEST_EXT)         \\\n\ttest_sequencer_node.$(TEST_EXT)              \\\n\ttest_source_node.$(TEST_EXT)                 \\\n\ttest_overwrite_node.$(TEST_EXT)              \\\n\ttest_write_once_node.$(TEST_EXT)             \\\n\ttest_indexer_node.$(TEST_EXT)                \\\n\ttest_multifunction_node.$(TEST_EXT)          \\\n\ttest_split_node.$(TEST_EXT)                  \\\n\ttest_static_assert.$(TEST_EXT)               \\\n\ttest_aggregator.$(TEST_EXT)                  \\\n\ttest_concurrent_lru_cache.$(TEST_EXT)        \\\n\ttest_examples_common_utility.$(TEST_EXT)     \\\n\ttest_dynamic_link.$(TEST_EXT)                \\\n\ttest_parallel_for_vectorization.$(TEST_EXT)  \\\n\ttest_tagged_msg.$(TEST_EXT)                  \\\n\ttest_partitioner_whitebox.$(TEST_EXT)        \\\n\ttest_flow_graph_whitebox.$(TEST_EXT)         \\\n\ttest_composite_node.$(TEST_EXT)              \\\n\ttest_async_node.$(TEST_EXT)                  \\\n\ttest_async_msg.$(TEST_EXT)                   \\\n\ttest_tbb_version.$(TEST_EXT)                 # insert new files right above\n\n# These tests depend on other technologies\nTEST_TBB_SPECIAL.EXE = test_openmp.$(TEST_EXT) \\\n    test_cilk_interop.$(TEST_EXT)              \\\n    test_gfx_factory.$(TEST_EXT)               \\\n    test_opencl_node.$(TEST_EXT)\n\n# skip mode_plugin for now\nskip_tests += test_model_plugin\n\nifdef OPENMP_FLAG\ntest_openmp.$(TEST_EXT): CPLUS_FLAGS += $(OPENMP_FLAG)\n\ntest_tbb_openmp: $(TEST_PREREQUISITE) test_openmp.$(TEST_EXT)\n\t$(run_cmd) ./test_openmp.$(TEST_EXT) 1:4\nelse\ntest_tbb_openmp:\n\t@echo \"OpenMP is not available\"\nendif\n\nifdef CILK_AVAILABLE\n# Workaround on cilkrts linkage known issue (see Intel(R) C++ Composer XE 2011 Release Notes)\n# The issue reveals itself if a version of binutils is prior to 2.17\nifeq (linux_icc,$(tbb_os)_$(compiler))\ntest_cilk_interop.$(TEST_EXT): LIBS += -lcilkrts\ntest_gfx_factory.$(TEST_EXT): LIBS += -lcilkrts\nendif\ntest_tbb_cilk: test_cilk_interop.$(TEST_EXT)\n\t$(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args)\nelse\ntest_tbb_cilk:\n\t@echo \"Intel(R) Cilk(TM) Plus is not available\"\nendif\n\ntest_opencl_node.$(TEST_EXT): LIBS += $(OPENCL.LIB)\n\n$(TEST_TBB_PLAIN.EXE) $(TEST_TBB_SPECIAL.EXE): WARNING_KEY += $(TEST_WARNING_KEY)\n\n# Run tests that are in SCHEDULER_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE but not in skip_tests (which is specified by user)\nTESTS_TO_RUN := $(filter-out $(addsuffix .$(TEST_EXT),$(skip_tests)),$(TEST_TBB_PLAIN.EXE) $(SCHEDULER_DIRECTLY_INCLUDED))\n\n# This definition intentionally consists of two blank lines\ndefine eol\n\n\nendef\n\n# First build the targets, then run them\n# Form a list of commands separated with end of line\n# Note that usually run_cmd is empty, and tests run directly\n\ntest_tbb_plain: $(TEST_PREREQUISITE) $(TESTS_TO_RUN)\n\t$(foreach test, $(TESTS_TO_RUN), $(run_cmd) ./$(test) $(args) $(eol))\n\n\n# For deprecated files, we don't mind warnings etc., thus compilation rules are most relaxed\nCPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)__TBB_TEST_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) $(INCLUDE_KEY)$(tbb_root)/src/test\nTEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ) test_task_scheduler_observer_v3.$(OBJ) \n\n$(TEST_TBB_OLD.OBJ): CPLUS_FLAGS := $(CPLUS_FLAGS_DEPRECATED)\n\nTEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ))\n\nifeq (,$(NO_LEGACY_TESTS))\ntest_tbb_old: $(TEST_PREREQUISITE) $(TEST_TBB_OLD.EXE)\n\t$(run_cmd) ./test_concurrent_vector_v2.$(TEST_EXT) $(args) 1:4\n\t$(run_cmd) ./test_concurrent_queue_v2.$(TEST_EXT) $(args) 1:4\n\t$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 1\n\t$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 2\n\t$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 4\n\t$(run_cmd) ./test_task_scheduler_observer_v3.$(TEST_EXT) $(args) 1:4\nelse\ntest_tbb_old:\n\t@echo Legacy tests skipped\nendif\n\nifneq (,$(codecov))\ncodecov_gen:\n\tprofmerge\n\tcodecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt\nendif\n\ntime_%: time_%.$(TEST_EXT) $(TEST_PREREQUISITE)\n\t$(run_cmd) ./$< $(args)\n\n\n# for some reason, \"perf_%.$(TEST_EXT): perf_dll.$(DLL)\" does not work TODO: find out how to apply pattern here\nperf_sched.$(TEST_EXT): perf_dll.$(DLL)\nperf_%.$(TEST_EXT): TEST_LIBS = perf_dll.$(LIBEXT)\nperf_%: perf_%.$(TEST_EXT) $(TEST_PREREQUISITE)\n\t$(run_cmd) ./$< $(args)\n\nclean_%:\n\t$(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d *.ver\n\nclean:\n\t$(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9] *.ver\n\n# Include automatically generated dependencies\n-include *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/SunOS.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nLIBDL = -ldl\n\nCPLUS = g++ \nCONLY = gcc\nLIB_LINK_FLAGS = -shared\nLIBS = -lpthread -lrt -ldl \nC_FLAGS = $(CPLUS_FLAGS) -x c\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD\nendif\n\nASM=\nASM_FLAGS=\n\nTBB_ASM.OBJ=\n\nifeq (ia64,$(arch))\n# Position-independent code (PIC) is a must for IA-64\n    CPLUS_FLAGS += $(PIC_KEY)\nendif \n\nifeq (intel64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif \n\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif \n\n# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)\nifeq (sparc,$(arch))\n    CPLUS_FLAGS    += -mcpu=v9 -m64\n    LIB_LINK_FLAGS += -mcpu=v9 -m64\nendif \n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASSEMBLY_SOURCE=$(arch)-gas\nifeq (ia64,$(arch))\n    ASM=ias\n    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o\nendif \n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/SunOS.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifndef arch\n        arch:=$(shell uname -p)\n        ifeq ($(arch),i386)\n            ifeq ($(shell isainfo -b),64)\n                arch:=intel64\n            else\n                arch:=ia32\n            endif\n        endif\n        export arch\n# For non-IA systems running Sun OS, 'arch' will contain whatever is printed by uname -p.\n# In particular, for SPARC architecture it will contain \"sparc\".\nendif\n\nifndef runtime\n        gcc_version:=$(shell gcc -dumpversion)\n        os_version:=$(shell uname -r)\n        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')\n        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)\nendif\n\nifeq ($(arch),sparc)\n        native_compiler := gcc\n        export compiler ?= gcc\nelse\n        native_compiler := suncc\n        export compiler ?= suncc\nendif\n# debugger ?= gdb\n\nCMD=$(SHELL) -c\nCWD=$(shell pwd)\nRM?=rm -f\nRD?=rmdir\nMD?=mkdir -p\nNUL= /dev/null\nSLASH=/\nMAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh\n\nifdef LD_LIBRARY_PATH\n        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)\nelse\n        export LD_LIBRARY_PATH := .\nendif\n\n####### Build settings ########################################################\n\nOBJ = o\nDLL = so\nLIBEXT=so\n\nTBB.LST =\nTBB.DEF =\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\n\nTEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/SunOS.suncc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -xMMD -errtags\nPREPROC_ONLY = -E -xMMD\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -KPIC\nDYLIB_KEY = -G\nLIBDL = -ldl\n# WARNING_AS_ERROR_KEY = -errwarn=%all\nWARNING_AS_ERROR_KEY = Warning as error\n# Supported Solaris Studio* 12.2 and above, remove ',inlasmpnu' in the line below to build by compiler prior Solaris Studio* 12.2 \nWARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,inlasmpnu\ntbb_strict=0\n\nCPLUS = CC\nCONLY = cc\n\nOPENMP_FLAG = -xopenmp\nLIB_LINK_FLAGS = -G -R . -M$(tbb_root)/build/suncc.map.pause\nLINK_FLAGS += -M$(tbb_root)/build/suncc.map.pause\nLIBS = -lpthread -lrt -R .\nC_FLAGS = $(CPLUS_FLAGS)\n\n#TODO: the $(stdlib) instead of hard-wiring STLPort \nifeq ($(cfg), release)\n        CPLUS_FLAGS = -mt -xO2 -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -mt -DTBB_USE_DEBUG -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)\nendif\n\nASM=\nASM_FLAGS=\n\nTBB_ASM.OBJ=\n\nifeq (intel64,$(arch))\n    CPLUS_FLAGS += -m64\n    ASM_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif \n\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif \n\n# TODO: verify whether -m64 implies V9 on relevant Sun Studio versions\n#       (those that handle gcc assembler syntax)\nifeq (sparc,$(arch))\n    CPLUS_FLAGS    += -m64\n    LIB_LINK_FLAGS += -m64\nendif \n\nexport TBB_CUSTOM_VARS_SH=export CXXFLAGS=\"-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause\"\nexport TBB_CUSTOM_VARS_CSH=setenv CXXFLAGS \"-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause\"\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASSEMBLY_SOURCE=$(arch)-fbe\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\nM_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)\nM_CPLUS_FLAGS = $(CPLUS_FLAGS)\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.clang.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nSDL_FLAGS = -fPIE -fPIC -fstack-protector -Wformat -Wformat-security\nTEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra\n\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = $(TARGET_CXX)\nCONLY = $(TARGET_CC)\n\n# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now\n\n# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly\nPIE_FLAG = -pie\nifeq ($(APP_PIE), false)\n    PIE_FLAG=\nendif\n\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic \nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n    SDL_FLAGS += -D_FORTIFY_SOURCE=2\n    CPLUS_FLAGS = -O2\nendif\nifeq ($(cfg), debug)\n    CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H\n\nifneq (,$(findstring $(arch),ia32 intel64))\n    CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY\nendif\n\nifeq (0, $(dynamic_load))\n     CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0\nendif\n\n# Paths to the NDK prebuilt tools and libraries\nifneq (,$(findstring $(ndk_version),r16 r16b))\n    # Since Android* NDK r16 another sysroot and isystem paths have to be specified\n    CPLUS_FLAGS += --sysroot=$(NDK_ROOT)/sysroot -isystem $(NDK_ROOT)/sysroot/usr/include/$(TRIPLE) \n    # Android* version flag required since r16\n    CPLUS_FLAGS += -D__ANDROID_API__=$(API_LEVEL)\nelse\n    CPLUS_FLAGS += --sysroot=$(SYSROOT)\nendif\n\n# Library sysroot flag\nLIB_LINK_FLAGS += --sysroot=$(SYSROOT)\n# Flag for test executables\nLINK_FLAGS     += --sysroot=$(SYSROOT)\n\nLIBS           = -L$(CPLUS_LIB_PATH) -lc++_shared\nifeq (,$(findstring $(ndk_version),$(foreach v, 7 8 9 10 11,r$(v) r$(v)b r$(v)c r$(v)d r$(v)e)))\n    LIBS +=  -lc++abi\n    ifeq (arm,$(arch))\n        LIBS += -lunwind \n    endif\nendif\n\nifeq (arm,$(arch))\n    CPLUS_FLAGS += $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0\nendif\n\nCPLUS_FLAGS += $(TARGET_CFLAGS)\nLIB_LINK_FLAGS += $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -L$(CPLUS_LIB_PATH)\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nASM = $(tbb_tool_prefix)as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra\n\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = $(tbb_tool_prefix)g++\nCONLY = $(tbb_tool_prefix)gcc\n\n# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\n\n# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly\nPIE_FLAG = -pie\nifeq ($(APP_PIE), false)\n    PIE_FLAG=\nendif\n\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic \nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n    CPLUS_FLAGS = -O2\nendif\nifeq ($(cfg), debug)\n    CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H\n\nifneq (,$(findstring $(arch),ia32 intel64))\n    CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY\nendif\n\nifeq (0, $(dynamic_load))\n     CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0\nendif\n\n\n# Paths to the NDK prebuilt tools and libraries\nCPLUS_FLAGS    += --sysroot=$(SYSROOT)\nLIB_LINK_FLAGS += --sysroot=$(SYSROOT)\nLIBS           = -L$(CPLUS_LIB_PATH) -lgnustl_shared\n\nifeq (ia32,$(arch))\n    # TODO: Determine best setting of -march and add to CPLUS_FLAGS\n    CPLUS_FLAGS += -m32 \n    LIB_LINK_FLAGS += -m32\nelse ifeq (intel64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nelse ifeq (arm,$(arch))\n    CPLUS_FLAGS += -march=armv7-a $(DEFINE_KEY)TBB_USE_GCC_BUILTINS=1 $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0\nelse ifeq (arm64,$(arch))\n    CPLUS_FLAGS += -march=armv8-a\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nASM = $(tbb_tool_prefix)as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.icc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY =\nTEST_WARNING_KEY = -Wshadow -Woverloaded-virtual -Wextra\n\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = icpc\nCONLY = icc\n\n# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\n\n# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly\nPIE_FLAG = -pie\nifeq ($(APP_PIE), false)\n    PIE_FLAG=\nendif\n\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic \nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n    CPLUS_FLAGS = -O2\nendif\nifeq ($(cfg), debug)\n    CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H \n\nifneq (,$(findstring $(arch),ia32 intel64))\n    CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY\nendif\n\nifeq (0, $(dynamic_load))\n     CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0\nendif\n\n\n# Paths to the NDK prebuilt tools and libraries\nCPLUS_FLAGS    += --sysroot=$(SYSROOT)\nLIB_LINK_FLAGS += --sysroot=$(SYSROOT)\n# the -static-intel flag is to remove the need to copy Intel-specific libs to the device.\nLIBS           = -L$(CPLUS_LIB_PATH) -lgnustl_shared -static-intel\n\nifeq (ia32,$(arch))\n    # TODO: Determine best setting of -march and add to CPLUS_FLAGS\n    CPLUS_FLAGS += -m32 -march=pentium4 -falign-stack=maintain-16-byte\n    LIB_LINK_FLAGS += -m32\nelse\n    ifeq (intel64,$(arch))\n        CPLUS_FLAGS += -m64\n        LIB_LINK_FLAGS += -m64\n    endif\nendif\n\nifeq (arm,$(findstring arm,$(arch)))\n    $(error \"Unsupported architecture $(arch) for icc compiler\")\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nASM = $(tbb_tool_prefix)as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#\n# Extra gmake command-line parameters for use with Android:\n#\n#    dlopen_workaround:  Some OS versions need workaround for dlopen to avoid recursive calls.\n#\n\n####### Detections and Commands ###############################################\n\nifeq (android,$(findstring android,$(tbb_os)))\n    $(error TBB only supports cross-compilation for Android. Specify \"target=android\" instead.)\nendif\n\nifndef BUILDING_PHASE\n    ifneq (\"command line\",\"$(origin arch)\")\n        ifeq (icc,$(compiler))\n            export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')\n            ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))\n                export arch:=ia32\n            else ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))\n                export arch:=intel64\n            else\n                $(error \"No support for Android in $(COMPILER_VERSION)\")\n            endif\n\n        else\n            ifdef ANDROID_SERIAL\n                uname_m:=$(shell adb shell uname -m)\n                ifeq (i686,$(uname_m))\n                    export arch:=ia32\n                else\n                    export arch:=$(uname_m)\n                endif\n            endif\n        endif\n    endif\nendif\n\nifeq (\"$(arch)\",\"\")\n    $(error \"No target architecture specified and \\'ANDROID_SERIAL\\' environment variable specifying target device not set\")\nendif\n\n# Android platform only supported from TBB 4.1 forward\nNO_LEGACY_TESTS = 1\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.linux.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\n# Must set def_prefix according to target architecture detected above\nifeq (ia32,$(arch))\n    def_prefix = lin32\nendif\nifeq (arm,$(findstring arm,$(arch)))\n    def_prefix = lin32\nendif\nifeq (64,$(findstring 64,$(arch)))\n    def_prefix = lin64\nendif\n\nifdef ndk_version\n    $(warning \"NDK version $(ndk_version)\")\nelse\n    $(warning \"NDK version not set in environment, using \\'unknown\\' instead.\")\n    ndk_version:=unknown\nendif\n\nexport runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)\n\nAR = $(tbb_tool_prefix)ar\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver\n\n####### Build settings ########################################################\n\n# No SONAME_SUFFIX for Android allowed in library names\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nTBB_NO_VERSION.DLL=\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nMALLOC_NO_VERSION.DLL=\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def\nMALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\nMALLOCPROXY_NO_VERSION.DLL=\nMALLOCPROXY.LIB = $(MALLOCPROXY.DLL)\nLINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)\n\nTEST_LAUNCHER=\nrun_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.linux.launcher.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Usage:\n# android.linux.launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>\n#         where: -v enables verbose output\n#         where: -q enables quiet mode\n#         where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed)\n#         where: -r <repeats> specifies number of times to repeat execution\n#         where: -u is ignored on Android\n#         where: -l <library> specifies the library name to be assigned to LD_PRELOAD\n#\n# Libs and executable necessary for testing should be present in the current directory before running.\n# ANDROID_SERIAL must be set to the connected Android target device name for file transfer and test runs.\n# ANDROID_TEST_DIRECTORY may be set to the directory used for testing on the Android target device; otherwise, \n#                        the default directory used is \"/data/local/tmp/$(basename $PWD)\".\n# Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail.\n\ndo_cleanup() #\n{ #\n    adb pull $targetdir/events.txt events.txt > /dev/null 2>&1 #\n    # Remove target directory on the device\n    adb shell \"rm -r ${targetdir}; mkdir -p ${targetdir}\" > /dev/null 2>&1 #\n} #\ndo_trap_cleanup() #\n{ #\n    do_cleanup #\n    exit -1 #\n} #\nwhile getopts  \"qvsr:ul:\" flag #\ndo case $flag in #\n    s )  # Stress testing mode\n         echo Doing stress testing. Press Ctrl-C to terminate\n         run_env='stressed() { while $*; do :; done; }; ' #\n         run_prefix=\"stressed $run_prefix\" ;; #\n    r )  # Repeats test n times\n         run_env=\"repeated() { for i in $(seq -s ' ' 1 $OPTARG) ; do echo \\$i of $OPTARG:; \\$*; done; }; \" #\n         run_prefix=\"repeated $run_prefix\" ;; #\n    l )  # Additional library\n         ldpreload=\"$OPTARG \" ;; #\n    u )  # Stack limit\n         ;; # \n    q )  # Quiet mode, removes 'done' but prepends any other output by test name\n         OUTPUT='2>&1 | sed -e \"s/done//;/^[[:space:]]*$/d;s!^!$exename: !\"' ;; #\n    v )  # Verbose mode\n         SUPPRESS='' #\n         verbose=1 ;; #\nesac done #\nshift `expr $OPTIND - 1` #\n[ -z \"$OUTPUT\" ] && OUTPUT='| sed -e \"s/\\\\r$//\"' #\n[ $verbose ] || SUPPRESS='>/dev/null' #\n# Collect the executable name\nexename=$(basename $1) #\nshift #\n# Prepare the target directory on the device\ncurrentdir=$(basename $PWD) #\ntargetdir=${ANDROID_TEST_DIRECTORY:-/data/local/tmp/$currentdir} #\ndo_cleanup #\ntrap do_trap_cleanup INT  # if someone hits control-c, cleanup the device\n# Collect the list of files to transfer to the target device, starting with executable itself.\nfnamelist=\"$exename\" #\n# Add the C++ standard library from the NDK, which is required for all tests on Android.\nif [ ! -z \"${LIB_STL_ANDROID}\" ]; then #\n\tfnamelist=\"$fnamelist ${LIB_STL_ANDROID}\" #\nelse #\n\tfnamelist=\"$fnamelist libc++_shared.so\" #\nfi #\n# Find the TBB libraries and add them to the list.\n# Add TBB libraries from the current directory that contains libtbb* files\nfiles=\"$(ls libtbb* 2> /dev/null)\" #\n[ -z \"$files\" ] || fnamelist=\"$fnamelist $files\" #\n# Add any libraries built for specific tests.\nexeroot=${exename%\\.*} #\nfiles=\"$(ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)\" #\n[ -z \"$files\" ] || fnamelist=\"$fnamelist $files\" #\n# TODO: Add extra libraries from the Intel(R) Compiler for certain tests\n# found=$(echo $exename | egrep 'test_malloc_atexit\\|test_malloc_lib_unload' 2> /dev/null)\n# if [ ! -z $found ] ; then\n#     fnamelist=\"$fnamelist ${compiler_path_lib}/libimf.so  \\\n#                           ${compiler_path_lib}/libsvml.so \\\n#                           ${compiler_path_lib}/libintlc.so.5\"\n# fi\n\n# Transfer collected executable and library files to the target device.\ntransfers_ok=1 #\nfor fullname in $fnamelist; do { #\n    if [ -r $fullname ]; then { #\n        # Transfer the executable and libraries to top-level target directory\n        [ $verbose ] && echo -n \"Pushing $fullname: \" #\n        eval \"adb push $fullname ${targetdir}/$(basename $fullname) $SUPPRESS 2>&1\" #\n    }; else { #\n        echo \"Error: required file ${currentdir}/${fullname} for test $exename not available for transfer.\" #\n        transfers_ok=0 #\n    }; fi #\n}; done #\nif [ \"${transfers_ok}\" = \"0\" ]; then { #\n    do_cleanup #\n    exit -1 #\n}; fi #\n# Transfer input files used by example codes by scanning the executable argument list.\nfor fullname in \"$@\"; do { #\n    if [ -r $fullname ]; then { #\n        directory=$(dirname $fullname) #\n        filename=$(basename $fullname) #\n        # strip leading \".\" from fullname if present\n        if [ \"$directory\" = \"\\.\" ]; then { #\n            directory=\"\" #\n            fullname=$filename #\n        }; fi #\n        # Create the target directory to hold input file if necessary\n        if [ ! -z $directory ]; then { #\n            eval \"adb shell 'mkdir $directory' $SUPPRESS 2>&1\" #\n        }; fi #\n        # Transfer the input file to corresponding directory on target device\n        [ $verbose ] && echo -n \"Pushing $fullname: \" #\n        eval \"adb push $fullname ${targetdir}/$fullname $SUPPRESS 2>&1\" #\n    }; fi #\n}; done #\n# Set LD_PRELOAD if necessary\n[ -z \"$ldpreload\" ] || run_prefix=\"LD_PRELOAD='$ldpreload' $run_prefix\" #\n[ $verbose ] && echo Running $run_prefix ./$exename $* #\nrun_env=\"$run_env cd $targetdir; export LD_LIBRARY_PATH=.\" #\n[ -z \"$VIRTUAL_MACHINE\" ] || run_env=\"$run_env; export VIRTUAL_MACHINE=$VIRTUAL_MACHINE\" #\n# The return_code file is the best way found to return the status of the test execution when using adb shell.\neval 'adb shell \"$run_env; $run_prefix ./$exename $* || echo -n \\$? >error_code\"' \"${OUTPUT}\" #\n# Capture the return code string and remove the trailing \\r from the return_code file contents\nerr=`adb shell \"cat $targetdir/error_code 2>/dev/null\"` #\n[ -z $err ] || echo $exename: exited with error $err #\ndo_cleanup #\n# Return the exit code of the test.\nexit $err #\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.macos.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\n# Must set def_prefix according to target architecture detected above\nifeq (ia32,$(arch))\n    def_prefix = lin32\nendif\nifeq (arm,$(findstring arm,$(arch)))\n    def_prefix = lin32\nendif\nifeq (64,$(findstring 64,$(arch)))\n    def_prefix = lin64\nendif\n\nifdef ndk_version\n    $(warning \"NDK version $(ndk_version)\")\nelse\n    $(warning \"NDK version not set in environment, using \\'unknown\\' instead.\")\n    ndk_version:=unknown\nendif\n\nexport runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)\n\nAR = $(tbb_tool_prefix)ar\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver\n\n####### Build settings ########################################################\n\n# No SONAME_SUFFIX for Android allowed in library names\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nTBB_NO_VERSION.DLL=\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nMALLOC_NO_VERSION.DLL=\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def\nMALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\nMALLOCPROXY_NO_VERSION.DLL=\nMALLOCPROXY.LIB = $(MALLOCPROXY.DLL)\nLINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)\n\nTBB.RES =\nMALLOC.RES =\nRML.RES =\nTBB.MANIFEST =\nMALLOC.MANIFEST =\nRML.MANIFEST =\nOBJ = o\nDLL = so\n\nTEST_LAUNCHER=\nrun_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/android.windows.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\n# Must set def_prefix according to target architecture detected above\nifeq (ia32,$(arch))\n    def_prefix = lin32\nendif\nifeq (arm,$(findstring arm,$(arch)))\n    def_prefix = lin32\nendif\nifeq (64,$(findstring 64,$(arch)))\n    def_prefix = lin64\nendif\n\nifdef ndk_version\n    $(warning \"NDK version $(ndk_version)\")\nelse\n    $(warning \"NDK version not set in environment, using \\'unknown\\' instead.\")\n    ndk_version:=unknown\nendif\n\nexport runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version)\n\nAR = $(tbb_tool_prefix)ar\nMAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \\,/,$(tbb_root))/build/version_info_windows.js $(CONLY) $(arch) $(subst \\,/,\"$(VERSION_FLAGS)\") > version_string.ver\n\n####### Build settings ########################################################\n\n# No SONAME_SUFFIX for Android allowed in library names\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nTBB_NO_VERSION.DLL=\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nMALLOC_NO_VERSION.DLL=\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def\nMALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\nMALLOCPROXY_NO_VERSION.DLL=\nMALLOCPROXY.LIB = $(MALLOCPROXY.DLL)\n\nTBB.RES =\nMALLOC.RES =\nRML.RES =\nTBB.MANIFEST =\nMALLOC.MANIFEST =\nRML.MANIFEST =\nOBJ = o\nDLL = so\n\nTEST_LAUNCHER=\nrun_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)\nexport UNIXMODE = 1\n# Clang for Android* uses the INCLUDE variable (instead of CPATH)\nexport USE_INCLUDE_ENV = 1\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/big_iron.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Defines settings for building the TBB run-time as a static library.\n# Use these only on platforms where dynamic linking is impractical.\n#\n# IF YOU USE TBB AS A STATIC LIBRARY, YOU MUST GUARANTEE THAT ONLY ONE COPY OF \n# THE TBB RUN-TIME IS LINKED INTO AN APPLICATION!  LINKING IN MULTIPLE COPIES\n# OF THE TBB RUN-TIME, DIRECTLY OR INDIRECTLY, MAY CAUSE PROGRAM FAILURE!\n#------------------------------------------------------------------------------\n\n# Note that ITT_NOTIFY allows to selectively remove the definition of\n# DO_ITT_NOTIFY without sabotaging deferred expansion of CPLUS_FLAGS.\n# TODO: currently only in linux.{gcc,xl}.inc\n\n# Note that -pthread with xl gives \"1501-210 (W) command option t contains an incorrect subargument\";\n# multithreading is instead achieved by using the _r affix in the compiler name.\n# TODO: is -lpthread still relevant/needed with XL and _r affix?\n\n# Note that usage of dynamic (shared) libraries is disabled\n# (via -D__TBB_DYNAMIC_LOAD_ENABLED=0 and LIBDL emptied) primarily for performance.\n\n# OS specific settings =>\n    LIB_LINK_CMD = ar rcs\n    LIB_LINK_FLAGS =\n    LIB_LINK_LIBS =\n    LIB_OUTPUT_KEY =\n    DYLIB_KEY =\n    ifeq ($(tbb_os),linux)\n        ifeq ($(compiler),clang)\n            LIBS = -pthread -lrt\n        endif\n        ifeq ($(compiler),gcc)\n            LIBS = -pthread -lrt\n        endif\n        ifeq ($(compiler),xl)\n            LIBS = -lpthread -lrt\n        endif\n        LINK_FLAGS =\n    endif\n    override CXXFLAGS += -D__TBB_DYNAMIC_LOAD_ENABLED=0 -D__TBB_SOURCE_DIRECTLY_INCLUDED=1\n    ITT_NOTIFY =\n    DLL = a\n    LIBEXT = a\n    LIBPREF = lib\n    LIBDL =\n# <= OS specific settings\n\nTBB.DLL = $(LIBPREF)tbb$(DEBUG_SUFFIX).$(LIBEXT)\nLINK_TBB.LIB = $(TBB.DLL)\nTBB.LST =\nTBB.DEF =\nTBB_NO_VERSION.DLL =\n\nMALLOC.DLL = $(LIBPREF)tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)\nLINK_MALLOC.LIB = $(MALLOC.DLL)\nMALLOC.DEF =\nMALLOC_NO_VERSION.DLL =\nMALLOCPROXY.DLL =\nMALLOCPROXY.DEF =\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Provides unified tool for preparing TBB for packaging\n\nfrom __future__ import print_function\nimport os\nimport re\nimport sys\nimport shutil\nimport platform\nimport argparse\nfrom glob import glob\nfrom collections import OrderedDict\n\njp = os.path.join\nis_win = (platform.system() == 'Windows')\nis_lin = (platform.system() == 'Linux')\nis_mac = (platform.system() == 'Darwin')\n\ndefault_prefix = os.getenv('PREFIX', 'install_prefix')\nif is_win:\n    default_prefix = jp(default_prefix, 'Library') # conda-specific by default on Windows\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--tbbroot',       default='.', help='Take Intel TBB from here')\nparser.add_argument('--prefix',        default=default_prefix, help='Prefix')\nparser.add_argument('--prebuilt',      default=[],    action='append', help='Directories to find prebuilt files')\nparser.add_argument('--no-rebuild',    default=False, action='store_true', help='do not rebuild')\nparser.add_argument('--install',       default=False, action='store_true', help='install all')\nparser.add_argument('--install-libs',  default=False, action='store_true', help='install libs')\nparser.add_argument('--install-devel', default=False, action='store_true', help='install devel')\nparser.add_argument('--install-docs',  default=False, action='store_true', help='install docs')\nparser.add_argument('--install-python',default=False, action='store_true', help='install python module')\nparser.add_argument('--make-tool',     default='make', help='Use different make command instead')\nparser.add_argument('--copy-tool',     default=None, help='Use this command for copying ($ tool file dest-dir)')\nparser.add_argument('--build-args',    default=\"\", help='specify extra build args')\nparser.add_argument('--build-prefix',  default='local', help='build dir prefix')\nif is_win:\n    parser.add_argument('--msbuild',   default=False, action='store_true', help='Use msbuild')\n    parser.add_argument('--vs',          default=\"2012\", help='select VS version for build')\n    parser.add_argument('--vs-platform', default=\"x64\",  help='select VS platform for build')\nparser.add_argument('ignore', nargs='?', help=\"workaround conda-build issue #2512\")\n\nargs = parser.parse_args()\n\nif args.install:\n    args.install_libs  = True\n    args.install_devel = True\n    args.install_docs  = True\n    args.install_python= True\n\ndef custom_cp(src, dst):\n     assert os.system(' '.join([args.copy_tool, src, dst])) == 0\n\nif args.copy_tool:\n    install_cp = custom_cp # e.g. to use install -p -D -m 755 on Linux\nelse:\n    install_cp = shutil.copy\n\nbin_dir = jp(args.prefix, \"bin\")\nlib_dir = jp(args.prefix, \"lib\")\ninc_dir = jp(args.prefix, 'include')\ndoc_dir = jp(args.prefix, 'share', 'doc', 'tbb')\nif is_win:\n    os.environ[\"OS\"] = \"Windows_NT\" # make sure TBB will interpret it corretly\n    libext = '.dll'\n    libpref = ''\n    dll_dir = bin_dir\nelse:\n    libext = '.dylib' if is_mac else '.so.2'\n    libpref = 'lib'\n    dll_dir = lib_dir\n\ntbb_names = [\"tbb\", \"tbbmalloc\", \"tbbmalloc_proxy\"]\n\n##############################################################\n\ndef run_make(arg):\n    if os.system('%s -j %s'% (args.make_tool, arg)) != 0:\n       print(\"\\nBummer. Running serial build in order to recover the log and have a chance to fix the build\")\n       assert os.system('%s %s'% (args.make_tool, arg)) == 0\n\nos.chdir(args.tbbroot)\nif args.prebuilt:\n    release_dirs = sum([glob(d) for d in args.prebuilt], [])\n    print(\"Using pre-built files from \", release_dirs)\nelse:\n    if is_win and args.msbuild:\n        preview_release_dir = release_dir = jp(args.tbbroot, 'build', 'vs'+args.vs, args.vs_platform, 'Release')\n        if not args.no_rebuild or not os.path.isdir(release_dir):\n            assert os.system('msbuild /m /p:Platform=%s /p:Configuration=Release %s build/vs%s/makefile.sln'% \\\n                            (args.vs_platform, args.build_args, args.vs)) == 0\n        preview_debug_dir = debug_dir = jp(args.tbbroot, 'build', 'vs'+args.vs, args.vs_platform, 'Debug')\n        if not args.no_rebuild or not os.path.isdir(debug_dir):\n            assert os.system('msbuild /m /p:Platform=%s /p:Configuration=Debug %s build/vs%s/makefile.sln'% \\\n                            (args.vs_platform, args.build_args, args.vs)) == 0\n    else:\n        release_dir = jp(args.tbbroot, 'build', args.build_prefix+'_release')\n        debug_dir = jp(args.tbbroot, 'build', args.build_prefix+'_debug')\n        if not args.no_rebuild or not (os.path.isdir(release_dir) and os.path.isdir(debug_dir)):\n            run_make('tbb_build_prefix=%s %s'% (args.build_prefix, args.build_args))\n        preview_release_dir = jp(args.tbbroot, 'build', args.build_prefix+'_preview_release')\n        preview_debug_dir = jp(args.tbbroot, 'build', args.build_prefix+'_preview_debug')\n        if not args.no_rebuild or not (os.path.isdir(preview_release_dir) and os.path.isdir(preview_debug_dir)):\n            run_make('tbb_build_prefix=%s_preview %s tbb_cpf=1 tbb'% (args.build_prefix, args.build_args))\n    release_dirs = [release_dir, debug_dir, preview_release_dir, preview_debug_dir]\n\nfilemap = OrderedDict()\ndef append_files(names, dst, paths=release_dirs):\n    global filemap\n    files = sum([glob(jp(d, f)) for d in paths for f in names], [])\n    filemap.update(dict(zip(files, [dst]*len(files))))\n\n\nif args.install_libs:\n    append_files([libpref+f+libext for f in tbb_names], dll_dir)\n\nif args.install_devel:\n    dll_files = [libpref+f+'_debug'+libext for f in tbb_names]          # adding debug libraries\n    if not is_win or not args.msbuild:\n        dll_files += [libpref+\"tbb_preview\"+libext, libpref+\"tbb_preview_debug\"+libext]\n    if is_win:\n        dll_files += ['tbb*.pdb']                                       # copying debug info\n    if is_lin:\n        dll_files += ['libtbb*.so']                                     # copying linker scripts\n        # symlinks .so -> .so.2 should not be created instead\n        # since linking with -ltbb when using links can result in\n        # incorrect dependence upon unversioned .so files\n    append_files(dll_files, dll_dir)\n    if is_win:\n        append_files(['*.lib', '*.def'], lib_dir)                       # copying linker libs and defs\n    for rootdir, dirnames, filenames in os.walk(jp(args.tbbroot,'include')):\n        files = [f for f in filenames if not '.html' in f]\n        append_files(files, jp(inc_dir, rootdir.split('include')[1][1:]), paths=(rootdir,))\n\nif args.install_python: # RML part\n    irml_dir = jp(args.tbbroot, 'build', args.build_prefix+'_release')\n    run_make('-C src tbb_build_prefix=%s %s python_rml'% (args.build_prefix, args.build_args))\n    if is_lin:\n        append_files(['libirml.so.1'], dll_dir, paths=[irml_dir])\n\nif args.install_docs:\n    files = [\n            'CHANGES',\n            'LICENSE',\n            'README',\n            'README.md',\n            'Release_Notes.txt',\n            ]\n    append_files(files, doc_dir, paths=release_dirs+[jp(args.tbbroot, d) for d in ('.', 'doc')])\n\nfor f in filemap.keys():\n    assert os.path.exists(f)\n    assert os.path.isfile(f)\n\nif filemap:\n    print(\"Copying to prefix =\", args.prefix)\nfor f, dest in filemap.items():\n    if not os.path.isdir(dest):\n        os.makedirs(dest)\n    print(\"+ %s to $prefix%s\"%(f,dest.replace(args.prefix, '')))\n    install_cp(f, dest)\n\nif args.install_python: # Python part\n    paths = [os.path.abspath(d) for d in (args.prefix, irml_dir, lib_dir, inc_dir)]\n    os.environ[\"TBBROOT\"] = paths[0]\n    # all the paths must be relative to python/ directory or be absolute\n    assert os.system('python python/setup.py build -b%s build_ext -L%s:%s -I%s install -f'% \\\n        (paths[1], paths[2], paths[1], paths[3])) == 0 # add install location? windows needs pythnon/Library location separation\n\nprint(\"done\")\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/codecov.txt",
    "content": "src/tbb\nsrc/tbbmalloc\ninclude/tbb\nsrc/rml/server\nsrc/rml/client\nsrc/rml/include\nsource/malloc\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/common.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifndef tbb_os\n\n  # Windows sets environment variable OS; for other systems, ask uname\n  ifeq ($(OS),)\n    OS:=$(shell uname)\n    ifeq ($(OS),)\n      $(error \"Cannot detect operating system\")\n    endif\n    export tbb_os=$(OS)\n  endif\n\n  ifeq ($(OS), Windows_NT)\n    export tbb_os=windows\n  endif\n  ifeq ($(OS), Linux)\n    export tbb_os=linux\n  endif\n  ifeq ($(OS), Darwin)\n    export tbb_os=macos\n  endif\n\nendif # !tbb_os\n\nifeq (1,$(tbb_cpf))\n  export CPF_SUFFIX ?=_preview\nendif\n\nifeq (0,$(exceptions))\n# Inverse the value, for simplicity of use\n  export no_exceptions=1\nendif\n\nifdef cpp0x\n    $(warning \"Warning: deprecated cpp0x=$(cpp0x) is used, stdver must be used instead. Building in stdver=c++0x mode.\")\n    export stdver?=c++0x\n    override cpp0x=\nendif\n\nifneq (,$(stdver))\n    ifeq (,$(findstring ++, $(stdver)))\n        $(warning \"Warning: unexpected stdver=$(stdver) is used.\")\n    endif\n    CXX_STD_FLAGS=-std=$(stdver)\nendif\n\n# The requested option is added unconditionally.\n# If it is not supported, a compiler warning or error is expected.\n# Note that CXX_STD_FLAGS can be changed in <os>.<compiler>.inc.\nCXX_ONLY_FLAGS+=$(CXX_STD_FLAGS)\n\nifeq (,$(wildcard $(tbb_root)/build/$(tbb_os).inc))\n  $(error \"$(tbb_os)\" is not supported. Add build/$(tbb_os).inc file with os-specific settings )\nendif\n\n# detect arch and runtime versions, provide common host-specific definitions\ninclude $(tbb_root)/build/$(tbb_os).inc\n\nifeq ($(arch),)\n $(error Architecture not detected)\nendif\nifeq ($(runtime),)\n $(error Runtime version not detected)\nendif\n\n# process target-dependent compilation and testing configurations\nifdef target\n # optionally process target-dependent options for compilation and testing\n ifneq (,$(wildcard $(tbb_root)/build/$(target).inc))\n  include $(tbb_root)/build/$(target).inc\n endif\n\n # optionally process host-dependent environment for target-dependent compilation and testing\n ifneq (,$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc))\n  include $(tbb_root)/build/$(target).$(tbb_os).inc\n endif\n\n # insure at least one target-dependent configuration file was found for compilation and testing\n ifeq (,$(wildcard $(tbb_root)/build/$(target).inc)$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc))\n  $(error \"$(target)\" is not supported. Add build/$(target).inc or build/$(target).$(tbb_os).inc file)\n endif\nendif  #target\n\n# Support for running debug tests to release library and vice versa\nflip_cfg=$(subst _flipcfg,_release,$(subst _release,_debug,$(subst _debug,_flipcfg,$(1))))\ncross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1))\n# Setting default configuration to release\ncfg?=release\n\ncompiler_name=$(notdir $(compiler))\nifdef BUILDING_PHASE\n ifndef target\n  target:=$(tbb_os)\n endif\n # process host/target compiler-dependent build configuration\n ifeq (,$(wildcard $(tbb_root)/build/$(target).$(compiler_name).inc))\n  $(error \"$(compiler_name)\" is not supported on $(target). Add build/$(target).$(compiler_name).inc file with compiler-specific settings. )\n endif\n include $(tbb_root)/build/$(target).$(compiler_name).inc\nendif\n\nifneq ($(BUILDING_PHASE),1)\n # definitions for top-level Makefiles\n origin_build_dir:=$(origin tbb_build_dir)\n tbb_build_dir?=$(tbb_root)$(SLASH)build\n export tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler_name)_$(runtime)$(CPF_SUFFIX)\n work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)\nendif  # BUILDING_PHASE != 1\n\nifdef offload\n  extra_inc=$(offload).offload.inc\nendif\nifdef extra_inc\n ifneq (,$(wildcard $(tbb_root)/build/$(extra_inc)))\n  include $(tbb_root)/build/$(extra_inc)\n else\n  $(error specified build file: \"build/$(extra_inc)\" is not found. )\n endif\nendif\n\nifndef BUILDING_PHASE\n  work_dir:=$(work_dir)\n  # assign new value for tbb_root if path is not absolute (the filter keeps only /* paths)\n  ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)\n   full_tbb_root:=$(CURDIR)/$(tbb_root)\n   ifeq ($(origin_build_dir),undefined)\n   #relative path are needed here as a workaround to support whitespaces in path\n    override tbb_root:=../..\n   else\n    override tbb_root:=$(full_tbb_root)\n   endif\n  export tbb_root\n  endif\n endif # !BUILDING_PHASE\n\n.DELETE_ON_ERROR:    # Make will delete target if error occurred when building it.\n\n# MAKEOVERRIDES contains the command line variable definitions. Reseting it to\n# empty allows propogating all exported overridden variables to nested makes.\n# NOTEs:\n#   1. All variable set in command line are propagated to nested makes.\n#   2. All variables declared with the \"export\" keyword are propagated to\n#   nested makes.\n#   3. \"override\" allows changing variables set in command line. But it doesn't\n#   propagate new values to nested makes. For propagation, the \"export\" keyword\n#   should be used.\n#   4. gmake v3.80 doesn't support exporting of target-specific variables using\n#   the \"export\" keyword\nMAKEOVERRIDES =\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/common_rules.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nifeq ($(tbb_strict),1)\n  ifeq ($(WARNING_AS_ERROR_KEY),)\n    $(error WARNING_AS_ERROR_KEY is empty)\n  endif\n  # Do not remove line below!\n  WARNING_KEY += $(WARNING_AS_ERROR_KEY)\nendif\n\nifneq (,$(findstring s,$(MAKEFLAGS)))\n  override largs+=-q\nendif\nifneq (,$(repeat))\n  override largs+=-r $(repeat)\nendif\nifneq (,$(largs)$(run_prefix))\n  override run_cmd:=$(run_cmd) $(TEST_LAUNCHER)\n  TEST_LAUNCHER=\n  ifeq (,$(strip $(run_cmd)))\n    $(warning Test launcher is not defined for the platform, ignoring launcher arguments)\n  endif\nendif\n\nifndef TEST_EXT\n    TEST_EXT = exe\nendif\n\nINCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/src/rml/include $(INCLUDE_KEY)$(tbb_root)/include\n\nCPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS)\nifeq (1,$(tbb_cpf))\nCPLUS_FLAGS += $(DEFINE_KEY)__TBB_CPF_BUILD=1\nendif\nifeq (0,$(exceptions))\nCPLUS_FLAGS += $(DEFINE_KEY)TBB_USE_EXCEPTIONS=0\nendif\nLINK_FLAGS += $(LDFLAGS)\nLIB_LINK_FLAGS += $(LDFLAGS)\n\nLIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY)\nifeq ($(origin LIB_OUTPUT_KEY), undefined)\n    LIB_OUTPUT_KEY = $(OUTPUT_KEY)\nendif\nifeq ($(origin LIB_LINK_LIBS), undefined)\n    LIB_LINK_LIBS = $(LIBDL) $(LIBS)\nendif\n\n# Define C & C++ compilers according to platform defaults or CXX & CC environment variables\nifneq (,$(findstring environment, $(origin CXX)))\nCPLUS = $(CXX)\nendif\nCONLY ?= $(CPLUS)\nifneq (,$(findstring environment, $(origin CC)))\nCONLY = $(CC)\nendif\n\n# The most generic rules\n#$(1) - is the target pattern\ndefine make-cxx-obj\n$1: %.cpp\n\t$$(CPLUS) $$(OUTPUTOBJ_KEY)$$@ $$(COMPILE_ONLY) $$(CPLUS_FLAGS) $$(CXX_ONLY_FLAGS) $$(CXX_WARN_SUPPRESS) $$(INCLUDES) $$<\nendef\n\nTEST_AFFIXES_OBJS=$(addsuffix .$(OBJ),$(addprefix %_,$(TEST_SUFFIXES)) $(addsuffix _%,$(TEST_PREFIXES)))\n\n# Make will not process the same recipe for each test pattern (since the dependency on the same %.cpp)\n# thus the separated recipes should be provided\n$(foreach t,%.$(OBJ) $(TEST_AFFIXES_OBJS),$(eval $(call make-cxx-obj,$(t))))\n\n.PRECIOUS: %.$(OBJ) %.$(TEST_EXT) %.res $(TEST_AFFIXES_OBJS)\n\n# Rules for generating a test DLL\n%_dll.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<\n\n#$(1) - is the binary name\n#$(2) - is the input obj files and libraries\ndefine make-test-binary\n\t$(CPLUS) $(OUTPUT_KEY)$(strip $1) $(CPLUS_FLAGS) $(2) $(LIBS) $(LINK_FLAGS)\nendef \n\n# LINK_FILES the list of options to link test specific files (libraries and object files)\nLINK_FILES+=$(TEST_LIBS)\n# Rule for generating executable test\n%.$(TEST_EXT): %.$(OBJ) $(TEST_LIBS) $(TEST_PREREQUISITE) $(if $(use_proxy),$(PROXY.LIB))\n\t$(call make-test-binary,$@,$< $(LINK_FILES) $(PIE_FLAG))\n\n# Rules for generating a test DLL\n%_dll.$(DLL): LINK_FLAGS += $(PIC_KEY) $(DYLIB_KEY)\n%_dll.$(DLL): TEST_LIBS := $(subst %_dll.$(DLL),,$(TEST_LIBS))\n%_dll.$(DLL): %_dll.$(OBJ)\n\t$(call make-test-binary,$@,$< $(LINK_FILES))\n.PRECIOUS: %_dll.$(OBJ) %_dll.$(DLL)\n\n%.$(OBJ): %.c\n\t$(CONLY) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(C_FLAGS) $(INCLUDES) $<\n\n%.$(OBJ): %.asm\n\t$(ASM) $(ASM_FLAGS) $<\n\n%.$(OBJ): %.s\n\tcpp <$< | grep -v '^#' >$*.tmp\n\t$(ASM) $(ASM_FLAGS) -o $@ $*.tmp\n\n# Rule for generating .E file if needed for visual inspection\n# Note that ICL treats an argument after PREPROC_ONLY as a file to open,\n# so all uses of PREPROC_ONLY should be immediately followed by a file name\n%.E: %.cpp\n\t$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@\n\n# TODO Rule for generating .asm file if needed for visual inspection\n%.asm: %.cpp\n\t$(CPLUS) /c /FAs /Fa $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $<\n\n# TODO Rule for generating .s file if needed for visual inspection\n%.s: %.cpp\n\t$(CPLUS) -S $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $<\n\n# Customizations\n$(KNOWN_WARNINGS): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<\n\ntbb_misc.$(OBJ): version_string.ver\ntbb_misc.$(OBJ): INCLUDES+=$(INCLUDE_KEY).\n\ntbb_misc.E: tbb_misc.cpp version_string.ver\n\t$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@\n\n%.res: %.rc version_string.ver $(TBB.MANIFEST)\n\trc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<\n\n# TODO: add $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS) (in a separate line?) and remove useless $(INCLUDES)\nVERSION_FLAGS=$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES)\n\nifneq (,$(TBB.MANIFEST))\n$(TBB.MANIFEST):\n\tcmd /C \"echo #include ^<stdio.h^> >tbbmanifest.c\"\n\tcmd /C \"echo int main(){return 0;} >>tbbmanifest.c\"\n\tcl /nologo $(C_FLAGS) tbbmanifest.c\n\nversion_string.ver: $(TBB.MANIFEST)\n\t$(MAKE_VERSIONS)\n\tcmd /C \"echo #define TBB_MANIFEST 1 >> version_string.ver\"\n# TODO: fix parallel build by writing to a temporary file and rename it when complete\nelse\n# TODO: make version strings directly representative for all the libraries\nversion_string.ver:\n\t$(MAKE_VERSIONS)\nendif\n\ntest_% debug_%: test_%.$(TEST_EXT) $(TEST_PREREQUISITE)\n\t$(run_cmd) ./$< $(args)\nifneq (,$(codecov))\n\tprofmerge\n\tcodecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt\nendif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/detect.js",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\nfunction readAllFromFile(fname) {\n    var fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n    var file = null;\n    try {\n        file = fso.OpenTextFile(fname, 1, 0);\n        return (file.readAll());\n    } finally {\n        // Close the file in the finally section to guarantee that it will be closed in any case\n        // (if the exception is thrown or not).\n        file.Close();\n    }\n}\n\nfunction doWork() {\n    var WshShell = WScript.CreateObject(\"WScript.Shell\");\n\n    var tmpExec = WshShell.Run(\"cmd /c echo int main(){return 0;} >detect.c\", 0, true);\n\n    // The next block deals with GCC (MinGW)\n    if (WScript.Arguments.Count() > 1) {\n        var compilerPath = WScript.Arguments(1);\n        // The RegExp matches everything up to and including the last slash (it uses a greedy approach.)\n        var compilerName = compilerPath.replace(/^.*[\\/\\\\]/, \"\");\n        if (compilerName.match(/gcc/i) != null) {\n            if (WScript.Arguments(0) == \"/arch\") {\n                // Get predefined macros\n                tmpExec = WshShell.Run(\"cmd /C \" + compilerPath + \" -dM -E detect.c > detect.map\", 0, true);\n                var defs = readAllFromFile(\"detect.map\");\n                //detect target architecture\n                var intel64 = /x86_64|amd64/mgi;\n                var ia32 = /i386/mgi;\n                if (defs.match(intel64)) {\n                    WScript.Echo(\"intel64\");\n                } else if (defs.match(ia32)) {\n                    WScript.Echo(\"ia32\");\n                } else {\n                    WScript.Echo(\"unknown\");\n                }\n            } else {\n                tmpExec = WshShell.Exec(compilerPath + \" -dumpversion\");\n                var gccVersion = tmpExec.StdOut.ReadLine();\n                if (WScript.Arguments(0) == \"/runtime\") {\n                    WScript.Echo(\"mingw\" + gccVersion);\n                }\n                else if (WScript.Arguments(0) == \"/minversion\") {\n                    // Comparing strings, not numbers; will not work for two-digit versions\n                    if (gccVersion >= WScript.Arguments(2)) {\n                        WScript.Echo(\"ok\");\n                    } else {\n                        WScript.Echo(\"fail\");\n                    }\n                }\n            }\n            return;\n        }\n    }\n\n    //Compile binary\n    tmpExec = WshShell.Exec(\"cl /MD detect.c /link /MAP\");\n    while (tmpExec.Status == 0) {\n        WScript.Sleep(100);\n    }\n    //compiler banner that includes version and target arch was printed to stderr\n    var clVersion = tmpExec.StdErr.ReadAll();\n\n    if (WScript.Arguments(0) == \"/arch\") {\n        //detect target architecture\n        var intel64 = /AMD64|EM64T|x64/mgi;\n        var ia32 = /[80|\\s]x86/mgi;\n        var arm = /ARM/mgi;\n        if (clVersion.match(intel64)) {\n            WScript.Echo(\"intel64\");\n        } else if (clVersion.match(ia32)) {\n            WScript.Echo(\"ia32\");\n        } else if (clVersion.match(arm)) {\n            WScript.Echo(\"armv7\");\n        } else {\n            WScript.Echo(\"unknown\");\n        }\n        return;\n    }\n\n    if (WScript.Arguments(0) == \"/runtime\") {\n        //read map-file\n        var mapContext = readAllFromFile(\"detect.map\");\n        //detect runtime\n        var vc71 = /MSVCR71\\.DLL/mgi;\n        var vc80 = /MSVCR80\\.DLL/mgi;\n        var vc90 = /MSVCR90\\.DLL/mgi;\n        var vc100 = /MSVCR100\\.DLL/mgi;\n        var vc110 = /MSVCR110\\.DLL/mgi;\n        var vc120 = /MSVCR120\\.DLL/mgi;\n        var vc140 = /VCRUNTIME140\\.DLL/mgi;\n        var psdk = /MSVCRT\\.DLL/mgi;\n        if (mapContext.match(vc71)) {\n            WScript.Echo(\"vc7.1\");\n        } else if (mapContext.match(vc80)) {\n            WScript.Echo(\"vc8\");\n        } else if (mapContext.match(vc90)) {\n            WScript.Echo(\"vc9\");\n        } else if (mapContext.match(vc100)) {\n            WScript.Echo(\"vc10\");\n        } else if (mapContext.match(vc110)) {\n            WScript.Echo(\"vc11\");\n        } else if (mapContext.match(vc120)) {\n            WScript.Echo(\"vc12\");\n        } else if (mapContext.match(vc140)) {\n            if (WshShell.ExpandEnvironmentStrings(\"%VisualStudioVersion%\") == \"15.0\")\n                WScript.Echo(\"vc14.1\");\n            else\n                WScript.Echo(\"vc14\");\n        } else {\n            WScript.Echo(\"unknown\");\n        }\n        return;\n    }\n\n    if (WScript.Arguments(0) == \"/minversion\") {\n        var compilerVersion;\n        var compilerUpdate;\n        if (WScript.Arguments(1) == \"cl\") {\n            compilerVersion = clVersion.match(/Compiler Version ([0-9.]+)\\s/mi)[1];\n            // compilerVersion is in xx.xx.xxxxx.xx format, i.e. a string.\n            // It will compare well with major.minor versions where major has two digits,\n            // which is sufficient as the versions of interest start from 13 (for VC7).\n        } else if (WScript.Arguments(1) == \"icl\") {\n            // Get predefined ICL macros\n            tmpExec = WshShell.Run(\"cmd /C icl /QdM /E detect.c > detect.map\", 0, true);\n            var defs = readAllFromFile(\"detect.map\");\n            // In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor\n            compilerVersion = defs.match(/__INTEL_COMPILER[ \\t]*([0-9]+).*$/mi)[1] / 100;\n            compilerUpdate = defs.match(/__INTEL_COMPILER_UPDATE[ \\t]*([0-9]+).*$/mi)[1];\n            // compiler version is a number; it compares well with another major.minor\n            // version number, where major has one, two, and perhaps more digits (9.1, 11, etc).\n        }\n        var requestedVersion = WScript.Arguments(2);\n        var requestedUpdate = 0;\n        if (WScript.Arguments.Count() > 3)\n            requestedUpdate = WScript.Arguments(3);\n        if (compilerVersion < requestedVersion) {\n            WScript.Echo(\"fail\");\n        } else if (compilerVersion == requestedVersion && compilerUpdate < requestedUpdate) {\n            WScript.Echo(\"fail\");\n        } else {\n            WScript.Echo(\"ok\");\n        }\n        return;\n    }\n}\n\nfunction doClean() {\n    var fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n    // delete intermediate files\n    if (fso.FileExists(\"detect.c\"))\n        fso.DeleteFile(\"detect.c\", false);\n    if (fso.FileExists(\"detect.obj\"))\n        fso.DeleteFile(\"detect.obj\", false);\n    if (fso.FileExists(\"detect.map\"))\n        fso.DeleteFile(\"detect.map\", false);\n    if (fso.FileExists(\"detect.exe\"))\n        fso.DeleteFile(\"detect.exe\", false);\n    if (fso.FileExists(\"detect.exe.manifest\"))\n        fso.DeleteFile(\"detect.exe.manifest\", false);\n}\n\nif (WScript.Arguments.Count() > 0) {\n\n    try {\n        doWork();\n    } catch (error) {\n        WScript.Echo(\"unknown\");\n    }\n    doClean();\n\n} else {\n    WScript.Echo(\"Supported options:\\n\"\n                  + \"\\t/arch [compiler]\\n\"\n                  + \"\\t/runtime [compiler]\\n\"\n                  + \"\\t/minversion compiler version\");\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/generate_tbbvars.bat",
    "content": "@echo off\r\nREM\r\nREM Copyright (c) 2005-2018 Intel Corporation\r\nREM\r\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\r\nREM you may not use this file except in compliance with the License.\r\nREM You may obtain a copy of the License at\r\nREM\r\nREM     http://www.apache.org/licenses/LICENSE-2.0\r\nREM\r\nREM Unless required by applicable law or agreed to in writing, software\r\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\r\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nREM See the License for the specific language governing permissions and\r\nREM limitations under the License.\r\nREM\r\nREM\r\nREM\r\nREM\r\nREM\r\nsetlocal\r\nfor %%D in (\"%tbb_root%\") do set actual_root=%%~fD\r\nset fslash_root=%actual_root:\\=/%\r\nset bin_dir=%CD%\r\nset fslash_bin_dir=%bin_dir:\\=/%\r\nset _INCLUDE=INCLUDE& set _LIB=LIB\r\nif not x%UNIXMODE%==x set _INCLUDE=CPATH& set _LIB=LIBRARY_PATH\r\nif not x%USE_INCLUDE_ENV%==x set _INCLUDE=INCLUDE\r\n\r\necho Generating local tbbvars.bat\r\necho @echo off>tbbvars.bat\r\necho SET TBBROOT=%actual_root%>>tbbvars.bat\r\necho SET TBB_ARCH_PLATFORM=%arch%\\%runtime%>>tbbvars.bat\r\necho SET TBB_TARGET_ARCH=%arch%>>tbbvars.bat\r\necho SET %_INCLUDE%=%%TBBROOT%%\\include;%%%_INCLUDE%%%>>tbbvars.bat\r\necho SET %_LIB%=%bin_dir%;%%%_LIB%%%>>tbbvars.bat\r\necho SET PATH=%bin_dir%;%%PATH%%>>tbbvars.bat\r\nif not x%UNIXMODE%==x echo SET LD_LIBRARY_PATH=%bin_dir%;%%LD_LIBRARY_PATH%%>>tbbvars.bat\r\n\r\necho Generating local tbbvars.sh\r\necho #!/bin/sh>tbbvars.sh\r\necho export TBBROOT=\"%fslash_root%\">>tbbvars.sh\r\necho export TBB_ARCH_PLATFORM=\"%arch%\\%runtime%\">>tbbvars.sh\r\necho export TBB_TARGET_ARCH=\"%arch%\">>tbbvars.sh\r\necho export %_INCLUDE%=\"${TBBROOT}/include;$%_INCLUDE%\">>tbbvars.sh\r\necho export %_LIB%=\"%fslash_bin_dir%;$%_LIB%\">>tbbvars.sh\r\necho export PATH=\"%fslash_bin_dir%;$PATH\">>tbbvars.sh\r\nif not x%UNIXMODE%==x echo export LD_LIBRARY_PATH=\"%fslash_bin_dir%;$LD_LIBRARY_PATH\">>tbbvars.sh\r\n\r\necho Generating local tbbvars.csh\r\necho #!/bin/csh>tbbvars.csh\r\necho setenv TBBROOT \"%actual_root%\">>tbbvars.csh\r\necho setenv TBB_ARCH_PLATFORM \"%arch%\\%runtime%\">>tbbvars.csh\r\necho setenv TBB_TARGET_ARCH \"%arch%\">>tbbvars.csh\r\necho setenv %_INCLUDE% \"${TBBROOT}\\include;$%_INCLUDE%\">>tbbvars.csh\r\necho setenv %_LIB% \"%bin_dir%;$%_LIB%\">>tbbvars.csh\r\necho setenv PATH \"%bin_dir%;$PATH\">>tbbvars.csh\r\nif not x%UNIXMODE%==x echo setenv LD_LIBRARY_PATH \"%bin_dir%;$LD_LIBRARY_PATH\">>tbbvars.csh\r\n\r\nif not x%LIB_STL_ANDROID%==x (\r\nREM Workaround for copying Android* specific stl shared library to work folder\r\ncopy /Y \"%LIB_STL_ANDROID:/=\\%\" .\r\n)\r\n\r\nendlocal\r\nexit\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/generate_tbbvars.sh",
    "content": "#!/bin/bash\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate tbbvars.[c]sh scripts\nbin_dir=\"$PWD\"  # \ncd \"$tbb_root\"  # keep this comments here\ntbb_root=\"$PWD\" # to make it unsensible\ncd \"$bin_dir\"   # to EOL encoding\ncat >./tbbvars.sh <<EOF\n#!/bin/bash\nexport TBBROOT=\"${tbb_root}\" #\ntbb_bin=\"${bin_dir}\" #\nif [ -z \"\\$CPATH\" ]; then #\n    export CPATH=\"\\${TBBROOT}/include\" #\nelse #\n    export CPATH=\"\\${TBBROOT}/include:\\$CPATH\" #\nfi #\nif [ -z \"\\$${2}LIBRARY_PATH\" ]; then #\n    export ${2}LIBRARY_PATH=\"\\${tbb_bin}\" #\nelse #\n    export ${2}LIBRARY_PATH=\"\\${tbb_bin}:\\$${2}LIBRARY_PATH\" #\nfi #\nif [ -z \"\\$${1}LD_LIBRARY_PATH\" ]; then #\n    export ${1}LD_LIBRARY_PATH=\"\\${tbb_bin}\" #\nelse #\n    export ${1}LD_LIBRARY_PATH=\"\\${tbb_bin}:\\$${1}LD_LIBRARY_PATH\" #\nfi #\n${TBB_CUSTOM_VARS_SH} #\nEOF\ncat >./tbbvars.csh <<EOF\n#!/bin/csh\nsetenv TBBROOT \"${tbb_root}\" #\nsetenv tbb_bin \"${bin_dir}\" #\nif (! \\$?CPATH) then #\n    setenv CPATH \"\\${TBBROOT}/include\" #\nelse #\n    setenv CPATH \"\\${TBBROOT}/include:\\$CPATH\" #\nendif #\nif (! \\$?${2}LIBRARY_PATH) then #\n    setenv ${2}LIBRARY_PATH \"\\${tbb_bin}\" #\nelse #\n    setenv ${2}LIBRARY_PATH \"\\${tbb_bin}:\\$${2}LIBRARY_PATH\" #\nendif #\nif (! \\$?${1}LD_LIBRARY_PATH) then #\n    setenv ${1}LD_LIBRARY_PATH \"\\${tbb_bin}\" #\nelse #\n    setenv ${1}LD_LIBRARY_PATH \"\\${tbb_bin}:\\$${1}LD_LIBRARY_PATH\" #\nendif #\n${TBB_CUSTOM_VARS_CSH} #\nEOF\n# Workaround for copying Android* specific stl shared library to \".\"\nif [ ! -z \"${LIB_STL_ANDROID}\" ]; then #\n\tcp ${LIB_STL_ANDROID} . #\nfi #\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nThis directory contains the internal Makefile infrastructure for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\n<P>\nSee below for how to <A HREF=\"#build\">build</A> Intel TBB and how to <A HREF=\"#port\">port</A> Intel TBB\nto a new platform, operating system or architecture.\n</P>\n\n<H2>Files</H2>\nThe files here are not intended to be used directly.  See below for usage.\n<DL>\n<DT><A HREF=\"Makefile.tbb\">Makefile.tbb</A>\n<DD>Main Makefile to build the Intel TBB library.\n    Invoked via 'make tbb' from <A HREF=\"../Makefile\">top-level Makefile</A>.\n<DT><A HREF=\"Makefile.tbbmalloc\">Makefile.tbbmalloc</A>\n<DD>Main Makefile to build the Intel TBB scalable memory allocator library as well as its tests.\n    Invoked via 'make tbbmalloc' from <A HREF=\"../Makefile\">top-level Makefile</A>.\n<DT><A HREF=\"Makefile.test\">Makefile.test</A>\n<DD>Main Makefile to build and run the tests for the Intel TBB library.\n    Invoked via 'make test' from <A HREF=\"../Makefile\">top-level Makefile</A>.\n<DT><A HREF=\"common.inc\">common.inc</A>\n<DD>Main common included Makefile that includes OS-specific and compiler-specific Makefiles.\n<DT>&lt;os&gt;.inc\n<DD>OS-specific Makefile for a particular &lt;os&gt;.\n<DT>&lt;os&gt;.&lt;compiler&gt;.inc\n<DD>Compiler-specific Makefile for a particular &lt;os&gt; / &lt;compiler&gt; combination.\n<DT>*.sh\n<DD>Infrastructure utilities for Linux* OS, macOS*, and UNIX*-related operating systems.\n<DT>*.js, *.bat\n<DD>Infrastructure utilities for Windows* OS.\n</DL>\n\n<A NAME=\"build\"><H2>To Build</H2></A>\n<P>\nTo port Intel TBB to a new platform, operating system or architecture, see the <A HREF=\"#port\">porting directions</A> below.\n</P>\n\n<H3>Software prerequisites:</H3>\n<OL>\n<LI>C++ compiler for the platform, operating system and architecture of interest.\n    Either the native compiler for your system, or, optionally, the appropriate Intel&reg; C++ Compiler, may be used.\n<LI>GNU make utility. On Windows OS, if a UNIX* emulator is used to run GNU make,\n    it should be able to run Windows OS utilities and commands. On Linux OS, macOS, etc.,\n    shell commands issued by GNU make should execute in a Bourne or BASH compatible shell.\n    In the following examples, replace <TT>make</TT> with the correct GNU make command for\n    your system (for example, <TT>gmake</TT>). GNU make version 3.80 and more recent are supported.\n</OL>\n\n<P>\nIntel TBB libraries can be built by performing the following steps.\nOn systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI.\nOn systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries\n(Linux OS, macOS, and related systems) or whichever ABI is selected in the development environment (Windows OS).\n</P>\n<OL>\n<LI>Change to the <A HREF=\"../index.html\">top-level directory</A> of the installed software.\n<LI>If using the Intel&reg; C++ Compiler, make sure the appropriate compiler is available in your PATH\n    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).\n<LI>Invoke GNU make using no arguments, for example, <TT>make</TT>.\n</OL>\n\n<P>\nTo build Intel TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux OS, macOS,\nor related systems that support both 64-bit and 32-bit libraries), perform the following steps:\n</P>\n<OL>\n<LI>Change to the <A HREF=\"../index.html\">top-level directory</A> of the installed software.\n<LI>If using the Intel&reg; C++ Compiler, make sure the appropriate compiler is available in your PATH\n    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).\n<LI>Explicitly specify the architecture when invoking GNU make, e.g. <TT>make arch=ia32</TT>.\n</OL>\n\n<P>The default make target will build the release and debug versions of the Intel TBB library.</P>\n<P>Other targets are available in the top-level Makefile. You might find the following targets useful:\n<UL>\n<LI><TT>make test</TT> will build and run Intel TBB <A HREF=\"../src/test\">unit-tests</A>;\n<LI><TT>make examples</TT> will build and run Intel TBB <A HREF=\"../examples/index.html\">examples</A>. Available in the open-source version only.\nFor the commercial version, you can download Intel TBB Samples at the <a href=\"https://software.intel.com/en-us/product-code-samples?topic=20828\">Intel&reg; Software Product Samples and Tutorials</a> website;\n<LI><TT>make all</TT> will do all of the above. Available in the open-source version only.\n</UL>\nSee also the list of other targets below.\n</P>\n\n<P>\nBy default, the libraries will be built in sub-directories within the build/ directory.\nThe sub-directories are named according to the operating system, architecture, compiler and software environment used\n(the sub-directory names also distinguish release vs. debug libraries).  On Linux OS, the software environment comprises\nthe GCC, libc and kernel version used.  On macOS, the software environment comprises the GCC and OS version used.\nOn Windows OS, the software environment comprises the Microsoft* Visual Studio* version used.\nSee below for how to change the default build directory.\n</P>\n\n<P>\nTo perform different build and/or test operations, use the following steps.\n</P>\n<OL>\n<LI>Change to the <A HREF=\"../index.html\">top-level directory</A> of the installed software.\n<LI>If using the Intel&reg; C++ Compiler, make sure the appropriate compiler is available in your PATH\n    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).\n<LI>Invoke GNU make by using one or more of the following commands.\n    <DL>\n    <DT><TT>make</TT>\n    <DD>Default build.  Equivalent to <TT>make tbb tbbmalloc</TT>.\n    <DT><TT>make all</TT>\n    <DD>Equivalent to <TT>make tbb tbbmalloc test examples</TT>. Available in the open-source version only.\n    <DT><TT>cd src;make release</TT>\n    <DD>Build and test release libraries only.\n    <DT><TT>cd src;make debug</TT>\n    <DD>Build and test debug libraries only. \n    <DT><TT>make tbb</TT>\n    <DD>Make Intel TBB release and debug libraries.\n    <DT><TT>make tbbmalloc</TT>\n    <DD>Make Intel TBB scalable memory allocator libraries.\n    <DT><TT>make test</TT>\n    <DD>Compile and run unit-tests\n    <DT><TT>make examples</TT>\n    <DD>Build libraries and run all examples, like doing <TT>make debug clean release</TT> from <A HREF=\"../examples/Makefile\">the general example Makefile</A>.\n        Available in the open-source version only.\n    <DT><TT>make python</TT>\n    <DD>Build, install, and test Python* API for Intel TBB. See <A HREF=\"../python/index.html\">details here</A>.\n    <DT><TT>make compiler=<B>{</B>icl, icc, gcc, clang<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but use specified compilers instead of default, native compilers\n    <ol>\n        <li><tt><b> {</b>icl, icc<b>}</b> </tt> - to use Intel&reg; compilers (<tt>icl</tt> on Windows OS,  <tt>icc</tt>  on Linux OS or macOS). </li>\n        <li><tt>gcc</tt>  - to use g++ (e.g. MinGW on Windows OS)</li>\n        <li><tt>clang</tt> - to use Clang compiler</li>\n    </ol>\n    <DT><TT>make compiler=clang stdlib=libc++ <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but use <TT>libc++</TT> as a standard c++ library for clang.\n    <DT><TT>make stdver=<B>{</B>c++11, c++14, ...<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but additionally specify the version of the C++ standard or dialect to be used by\n      the compiler. The specified value of <TT>stdver</TT> will be used as a parameter to the appropriate\n      compiler option (such as <TT>-std</TT>); the behavior in case of unsupported value is compiler-specific.\n    <DT><TT>make target_app=<B>{</B>win8ui, uwp, uwd<B>}</B> [target_mode=store] <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but use API that is compliant with Universal Windows* applications. Use <TT>win8ui</TT> option, if you want to use Intel TBB in Windows* 8 Universal application, <TT>uwp</TT> in case of Windows* 10 Universal Windows application and <TT>uwd</TT> for the usage inside Universal Windows* driver.\n    <TT>target_mode=store</TT> is used to produce binaries that are compliant with Windows Store* application container. In later case they won't work with Intel TBB unit tests but work only with Windows Store* applications.\n    <DT><TT>ndk-build target=android <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but build libraries for Android* OS by Android NDK that should be installed. Makefiles were tested with revision 8.\n    <DT><TT>make arch=<B>{</B>ia32, intel64, ia64<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but build libraries for the selected ABI.\n        Might be useful for cross-compilation; ensure proper environment is set before running this command.\n    <DT><TT>make tbb_root=<B>{</B>(Intel TBB directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above; for use when invoking <TT>make</TT> from a directory other than the <A HREF=\"../index.html\">top-level directory</A>.\n    <DT><TT>make tbb_build_dir=<B>{</B>(build directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but place the built libraries in the specified directory, rather than in the default sub-directory within the build/ directory. This command might have troubles with the build in case the sources installed to the directory with spaces in the path.\n    <DT><TT>make tbb_build_prefix=<B>{</B>(build sub-directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory, rather than using the default sub-directory name.\n    <DT><TT>make tbb_cpf=1 <B>[</B>(above options or targets)<B>]</B></TT>\n    <DD>Build and run as above, but build and use libraries with the Community Preview Features enabled, rather than the default libraries.\n    <DT><TT>make <B>[</B>(above options)<B>]</B> clean</TT>\n    <DD>Remove any executables or intermediate files produced by the above commands.\n        Includes build directories, object files, libraries and test executables.\n    </DL>\n</OL>\n\n<A NAME=\"port\"><H2>To Port</H2></A>\n<P>\nThis section provides information on how to port Intel TBB to a new platform, operating system or architecture.\nA subset or a superset of these steps may be required for porting to a given platform.\n</P>\n\n<H4>To port the Intel TBB source code:</H4>\n<OL>\n<LI>If porting to a new architecture, create a file that describes the architecture-specific details for that architecture.\n    <UL>\n    <LI>Create a &lt;os&gt;_&lt;architecture&gt;.h file in the <A HREF=\"../include/tbb/machine\">include/tbb/machine</A> directory\n\tthat describes these details.\n\t<UL>\n\t<LI>The &lt;os&gt;_&lt;architecture&gt;.h is named after the operating system and architecture as recognized by\n\t    <A HREF=\"../include/tbb/tbb_machine.h\">include/tbb/tbb_machine.h</A> and the Makefile infrastructure.\n\t<LI>This file defines the implementations of synchronization operations, and also the\n\t    scheduler yield function, for the operating system and architecture.\n\t<LI>Several examples of &lt;os&gt;_&lt;architecture&gt;.h files can be found in the\n\t    <A HREF=\"../include/tbb/machine\">include/tbb/machine</A> directory.\n\t    <UL>\n\t    <LI>A minimal implementation defines the 4-byte and 8-byte compare-and-swap operations,\n\t\tand the scheduler yield function.  See <A HREF=\"../include/tbb/machine/mac_ppc.h\">include/tbb/machine/mac_ppc.h</A>\n\t\tfor an example of a minimal implementation.\n\t    <LI>More complex implementation examples can also be found in the\n\t\t<A HREF=\"../include/tbb/machine\">include/tbb/machine</A> directory\n\t\tthat implement all the individual variants of synchronization operations that Intel TBB uses.\n\t\tSuch implementations are more verbose but may achieve better performance on a given architecture.\n\t    <LI>In a given implementation, any synchronization operation that is not defined is implemented, by default,\n\t\tin terms of 4-byte or 8-byte compare-and-swap.  More operations can thus be added incrementally to increase\n\t\tthe performance of an implementation.\n\t    <LI>In most cases, synchronization operations are implemented as inline assembly code; examples also exist,\n\t\t(e.g., for Intel&reg; Itanium&reg; processors) that use out-of-line assembly code in *.s or *.asm files\n\t\t(see the assembly code sub-directories in the <A HREF=\"../src/tbb\">src/tbb</A> directory).\n\t    </UL>\n\t</UL>\n    <LI>Modify <A HREF=\"../include/tbb/tbb_machine.h\">include/tbb/tbb_machine.h</A>, if needed, to invoke the appropriate\n\t&lt;os&gt;_&lt;architecture&gt;.h file in the <A HREF=\"../include/tbb/machine\">include/tbb/machine</A> directory.\n    </UL>\n<LI>Add an implementation of DetectNumberOfWorkers() in <A HREF=\"../src/tbb/tbb_misc.h\">src/tbb/tbb_misc.h</A>,\n    that returns the number of cores found on the system in case it is not supported by the current implementation.  \n    This is used to determine the default number of threads for the Intel TBB task scheduler.\n<LI>Either properly define FillDynamicLinks for use in\n    <A HREF=\"../src/tbb/cache_aligned_allocator.cpp\">src/tbb/cache_aligned_allocator.cpp</A>,\n    or hardcode the allocator to be used.\n<LI>Additional types might be required in the union defined in\n    <A HREF=\"../include/tbb/aligned_space.h\">include/tbb/aligned_space.h</A>\n    to ensure proper alignment on your platform.\n<LI>Changes may be required in <A HREF=\"../include/tbb/tick_count.h\">include/tbb/tick_count.h</A>\n    for systems that do not provide gettimeofday.\n</OL>\n\n<H4>To port the Makefile infrastructure:</H4>\nModify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed.\nSee the Makefile infrastructure files for examples.\n<OL>\n<LI>The <A HREF=\"../Makefile\">top-level Makefile</A> includes <A HREF=\"common.inc\">common.inc</A> to determine the operating system.\n    <UL>\n    <LI>To add a new operating system, add the appropriate test to <A HREF=\"common.inc\">common.inc</A>, and create the needed &lt;os&gt;.inc and &lt;os&gt;.&lt;compiler&gt;.inc files (see below).\n    </UL>\n<LI>The &lt;os&gt;.inc file makes OS-specific settings for a particular operating systems.\n    <UL>\n    <LI>For example, <A HREF=\"linux.inc\">linux.inc</A> makes settings specific to Linux operating systems.\n    <LI>This file performs OS-dependent tests to determine the specific platform and/or architecture, and sets other platform-dependent values.\n    <LI>Add a new &lt;os&gt;.inc file for each new operating system added.\n    </UL>\n<LI>The &lt;os&gt;.&lt;compiler&gt;.inc file makes compiler-specific settings for a particular\n    &lt;os&gt; / &lt;compiler&gt; combination.\n    <UL>\n    <LI>For example, <A HREF=\"linux.gcc.inc\">linux.gcc.inc</A> makes specific settings for using GCC on Linux OS, and <A HREF=\"linux.icc.inc\">linux.icc.inc</A> makes specific settings for using the Intel&reg; C++ compiler on Linux OS.\n    <LI>This file sets particular compiler, assembler and linker options required when using a particular &lt;os&gt; / &lt;compiler&gt; combination.\n    <LI>Add a new &lt;os&gt;.&lt;compiler&gt;.inc file for each new &lt;os&gt; / &lt;compiler&gt; combination added.\n    </UL>\n</OL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<P></P>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel, the Intel logo and Itanium are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/ios.clang.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ninclude $(tbb_root)/build/macos.clang.inc\n\nCPLUS_FLAGS += -miphoneos-version-min=8.0\nLINK_FLAGS += -miphoneos-version-min=8.0\nLIB_LINK_FLAGS += -miphoneos-version-min=8.0\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/ios.macos.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifneq ($(arch),$(filter $(arch),ia32 intel64 armv7 armv7s arm64))\n  $(error $(arch) is unknown architecture. Known arhitechtures are ia32 intel64 armv7 armv7s arm64)\nendif\n\n# If target is ios but arch is ia32/intel64 then build for 32/64 simulator!\nifeq (,$(SDKROOT))\n  ifeq ($(arch),$(filter $(arch),ia32 intel64))\n    export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneSimulator.*' 2>/dev/null)\n  else\n    export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneOS.*' 2>/dev/null)\n  endif\nendif\nifeq (,$(SDKROOT))\n  $(error iOS* SDK not found)\nendif\n\nios_version:=$(shell echo $(SDKROOT) | sed -e \"s/.*[a-z,A-Z]\\(.*\\).sdk/\\1/\")\nruntime:=cc$(clang_version)_ios$(ios_version)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.clang.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor -Wno-dangling-else\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = clang++\nCONLY = clang\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\nLIBS += -lpthread -lrt\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic\nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD\nendif\n\nifneq (,$(stdlib))\n    CPLUS_FLAGS    += -stdlib=$(stdlib)\n    LIB_LINK_FLAGS += -stdlib=$(stdlib)\nendif\n\nifneq (,$(gcc_version))\n    # TODO: do not assume that GCC minor and patchlevel versions are always single-digit.\n    CPLUS_FLAGS += -DTBB_USE_GLIBCXX_VERSION=$(subst .,0,$(gcc_version))\nendif\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32 -march=pentium4\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (bg,$(arch))\n    CPLUS = bgclang++\n    CONLY = bgclang\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor\n\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = g++\nCONLY = gcc\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\nLIBS += -lpthread -lrt\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic\nC_FLAGS = $(CPLUS_FLAGS)\n\n# gcc 4.2 and higher support OpenMP\nifneq (,$(shell gcc -dumpversion | egrep  \"^(4\\.[2-9]|[5-9])\"))\n    OPENMP_FLAG = -fopenmp\nendif\n\n# gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them\nifneq (,$(shell gcc -dumpversion | egrep  \"^(4\\.[8-9]|[5-9])\"))\n    RTM_KEY = -mrtm\nendif\n\n# gcc 4.0 and later have -Wextra that is used by some our customers.\nifneq (,$(shell gcc -dumpversion | egrep  \"^([4-9])\"))\n    TEST_WARNING_KEY += -Wextra\nendif\n\n# gcc 5.0 and later have -Wsuggest-override option\n# enable it via a pre-included header in order to limit to C++11 and above\nifneq (,$(shell gcc -dumpversion | egrep  \"^([5-9])\"))\n    INCLUDE_TEST_HEADERS = -include $(tbb_root)/src/test/harness_preload.h\nendif\n\n# gcc 6.0 and later have -flifetime-dse option that controls\n# elimination of stores done outside the object lifetime\nifneq (,$(shell gcc -dumpversion | egrep  \"^([6-9])\"))\n    # keep pre-contruction stores for zero initialization\n    DSE_KEY = -flifetime-dse=1\nendif\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD\nendif\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (ia64,$(arch))\n# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables\n    CPLUS_FLAGS += $(PIC_KEY)\nendif\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64 $(RTM_KEY)\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32 -march=pentium4 $(RTM_KEY)\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (bg,$(arch))\n    CPLUS = $(firstword $(notdir $(shell which powerpc{64,32,}-bg{z..a}-linux-g++ 2>/dev/null)))\n    CONLY = $(firstword $(notdir $(shell which powerpc{64,32,}-bg{z..a}-linux-gcc 2>/dev/null)))\nendif\n\n# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)\nifeq (sparc,$(arch))\n    CPLUS_FLAGS    += -mcpu=v9 -m64\n    LIB_LINK_FLAGS += -mcpu=v9 -m64\nendif\n\n# automatically generate \"IT\" instructions when compiling for Thumb ISA\nifeq (armv7,$(arch))\n    CPLUS_FLAGS    += -Wa,-mimplicit-it=thumb\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\nifeq (ia64,$(arch))\n    ASM_FLAGS += -xexplicit\n    TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o\n    MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o log2.o\nendif\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.icc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -w1\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nNOINTRINSIC_KEY = -fno-builtin\nLIBDL = -ldl\nifneq (,$(shell icc -dumpversion | egrep \"1[2-9]\\.\"))\nSDL_FLAGS = -fstack-protector -Wformat -Wformat-security\nendif\n\nCPLUS = icpc\nCONLY = icc\n\nITT_NOTIFY = -DDO_ITT_NOTIFY\nifeq (release,$(cfg))\nSDL_FLAGS += -D_FORTIFY_SOURCE=2\nCPLUS_FLAGS = $(ITT_NOTIFY) -O2 -g -DUSE_PTHREAD\nelse\nCPLUS_FLAGS = $(ITT_NOTIFY) -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG\nendif\n\nLIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now\nLIBS += -lpthread -lrt\nLINK_FLAGS = -rdynamic\nC_FLAGS = $(CPLUS_FLAGS)\n\nifneq (,$(shell icc -dumpversion | egrep  \"^1[6-9]\\.\"))\nOPENMP_FLAG = -qopenmp\nelse\nOPENMP_FLAG = -openmp\nendif\n\n# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus\nifneq (,$(shell icc -dumpversion | egrep  \"^1[2-9]\\.\"))\n    CILK_AVAILABLE = yes\nendif\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32 -falign-stack=maintain-16-byte\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ia64,$(arch))\n    ITT_NOTIFY =\n# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables\n# strict-ansi does not work with <signal.h> on RHEL 4 AS\n    CPLUS_FLAGS += $(PIC_KEY) $(if $(findstring cc3.,$(runtime)),-ansi,-strict-ansi)\nelse\n# For ICC 16 and older, in std=c++14 mode -strict-ansi does not work with GNU C++ library headers\n# egrep returns 0 or 1, compare it in concatenation\n    CPLUS_FLAGS += $(if $(findstring c++14_1,$(stdver)_$(shell icc -dumpversion| egrep -c \"^1[1-6]\\.\")),-ansi,-strict-ansi)\nendif\n\nifneq (,$(codecov))\n# no tool support for code coverage, need profile data generation\n    ITT_NOTIFY = -prof-gen=srcpos\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\nifeq (ia64,$(arch))\n    ASM_FLAGS += -xexplicit\n    TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o\n    MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o log2.o\nendif\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\nifeq (icc,$(compiler))\n  export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')\n  ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))\n    export arch:=ia32\n  else\n    ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))\n      export arch:=intel64\n    else\n      ifneq (,$(findstring IA-64, $(COMPILER_VERSION)))\n        export arch:=ia64\n      endif\n    endif\n  endif\n  ifeq (,$(arch))\n    $(warning \"Unknown Intel compiler\")\n  endif\nendif\n\nifndef arch\n        uname_m:=$(shell uname -m)\n        ifeq ($(uname_m),i686)\n                export arch:=ia32\n        endif\n        ifeq ($(uname_m),ia64)\n                export arch:=ia64\n        endif\n        ifeq ($(uname_m),x86_64)\n                export arch:=intel64\n        endif\n        ifeq ($(uname_m),sparc64)\n                export arch:=sparc\n        endif\n        ifeq ($(uname_m),armv7l)\n                export arch:=armv7\n        endif\n        ifndef arch\n                export arch:=$(uname_m)\n        endif\nendif\n\nifndef runtime\n        export gcc_version:=$(shell gcc -dumpversion)\n        os_version:=$(shell uname -r)\n        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')\n        export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //')\n        os_glibc_version:=$(shell echo \"$(os_glibc_version_full)\" | sed -e '2,$$d' -e 's/-.*$$//')\n        export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version)\nendif\n\nnative_compiler := gcc\nexport compiler ?= gcc\ndebugger ?= gdb\n\nCMD=sh -c\nCWD=$(shell pwd)\nCP=cp\nRM?=rm -f\nRD?=rmdir\nMD?=mkdir -p\nNUL= /dev/null\nSLASH=/\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh\n\nifdef LD_LIBRARY_PATH\n        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)\nelse\n        export LD_LIBRARY_PATH := .\nendif\n\n####### Build settings ########################################################\n\nOBJ = o\nDLL = so\nMALLOC_DLL?=$(DLL)\nLIBEXT = so\nSONAME_SUFFIX =$(shell grep TBB_COMPATIBLE_INTERFACE_VERSION $(tbb_root)/include/tbb/tbb_stddef.h | egrep -o [0-9.]+)\n\nifeq ($(arch),ia64)\n        def_prefix = lin64ipf\nendif\nifneq (,$(findstring $(arch),sparc s390x))\n        def_prefix = lin64\nendif\nifeq ($(arch),armv7)\n        def_prefix = lin32\nendif\nifeq (,$(def_prefix))\n    ifeq (64,$(findstring 64,$(arch)))\n            def_prefix = lin64\n    else\n            def_prefix = lin32\n    endif\nendif\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\n\nTBB.DLL = $(TBB_NO_VERSION.DLL).$(SONAME_SUFFIX)\nTBB.LIB = $(TBB.DLL)\nTBB_NO_VERSION.DLL=libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nLINK_TBB.LIB = $(TBB_NO_VERSION.DLL)\n\nMALLOC_NO_VERSION.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(MALLOC_DLL)\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = $(MALLOC_NO_VERSION.DLL).$(SONAME_SUFFIX)\nMALLOC.LIB = $(MALLOC_NO_VERSION.DLL)\nLINK_MALLOC.LIB = $(MALLOC_NO_VERSION.DLL)\n\nMALLOCPROXY_NO_VERSION.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\nMALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def\nMALLOCPROXY.DLL = $(MALLOCPROXY_NO_VERSION.DLL).$(SONAME_SUFFIX)\nMALLOCPROXY.LIB = $(MALLOCPROXY_NO_VERSION.DLL)\nLINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)\n\nRML_NO_VERSION.DLL = libirml$(DEBUG_SUFFIX).$(DLL)\nRML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def\nRML.DLL = $(RML_NO_VERSION.DLL).1\nRML.LIB = $(RML_NO_VERSION.DLL)\n\nTEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n\nOPENCL.LIB = -lOpenCL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.pathcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra\n\nWARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = pathCC\nCONLY = pathcc\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\nLIBS += -lstl -lpthread -lrt\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic\nC_FLAGS = $(CPLUS_FLAGS)\n\nOPENMP_FLAG = -openmp\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD\nendif\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32 -march=pentium4\n    LIB_LINK_FLAGS += -m32\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += --64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += --32\nendif\nifeq ($(cfg),debug)\n    ASM_FLAGS += -g\nendif\n\nASSEMBLY_SOURCE=$(arch)-gas\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/linux.xl.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\nCOMPILE_ONLY = -c\nPREPROC_ONLY = -E -qsourcetype=c\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -qpic\nWARNING_AS_ERROR_KEY = -qhalt=w\nWARNING_KEY =\nTEST_WARNING_KEY =\n\nWARNING_SUPPRESS =\nDYLIB_KEY = -qmkshrobj\nEXPORT_KEY = -Wl,--version-script,\nLIBDL = -ldl\n\nCPLUS = xlc++_r\nCONLY = xlc_r\nLIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)\nLIBS = -lpthread -lrt\nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -DUSE_PTHREAD\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD\nendif\n\n# Adding directly to CPLUS_FLAGS instead of to WARNING_SUPPRESS because otherwise it would not be used in several tests (why not?).\n# Suppress warnings like:\n# - \"1500-029: (W) WARNING: subprogram [...] could not be inlined into [...].\"\n# - \"1501-201: (W) Maximum number of common component diagnostics, 10  has been exceeded.\"\n#     see http://www-01.ibm.com/support/docview.wss?uid=swg1LI72843\n#     it seems that the internal compiler error that would ensue has now been avoided, making the condition harmless\n# - \"1540-0198 (W) The omitted keyword \"private\" is assumed for base class \"no_copy\".\"\n# - \"1540-0822 (W) The name \"__FUNCTION__\" must not be defined as a macro.\"\nCPLUS_FLAGS += -qsuppress=1500-029:1501-201:1540-0198:1540-0822\n\nASM=\nASM_FLAGS=\n\nTBB_ASM.OBJ=\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -q64\n    LIB_LINK_FLAGS += -q64\nendif\n\n# TODO: equivalent for -march=pentium4 in CPLUS_FLAGS\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -q32 -qarch=pentium4\n    LIB_LINK_FLAGS += -q32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -q64\n    LIB_LINK_FLAGS += -q64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -q32\n    LIB_LINK_FLAGS += -q32\nendif\n\nifeq (bg,$(arch))\n    CPLUS = bgxlC_r\n    CONLY = bgxlc_r\nendif\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n# Suppress innumerable warnings like \"1540-1088 (W) The exception specification is being ignored.\"\n# Suppress             warnings like \"1540-1090 (I) The destructor of \"lock\" might not be called.\"\n# TODO: aren't these warnings an indication that -qnoeh might not be appropriate?\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -qnortti -qnoeh -qsuppress=1540-1088:1540-1090\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/macos.clang.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCPLUS = clang++\nCONLY = clang\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor\nWARNING_SUPPRESS = -Wno-non-virtual-dtor -Wno-dangling-else\nDYLIB_KEY = -dynamiclib\nEXPORT_KEY = -Wl,-exported_symbols_list,\nLIBDL = -ldl\n\nLIBS = -lpthread\nLINK_FLAGS =\nLIB_LINK_FLAGS = -dynamiclib -install_name @rpath/$(BUILDING_LIBRARY)\nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq ($(cfg), release)\n    CPLUS_FLAGS = -g -O2\nelse\n    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += -DUSE_PTHREAD $(ITT_NOTIFY)\n\n# For Clang, we add the option to support RTM intrinsics *iff* xtest is found in <immintrin.h>\nifneq (,$(shell grep xtest `echo \"\\#include<immintrin.h>\" | clang -E -M - 2>&1 | grep immintrin.h` 2>/dev/null))\n    RTM_KEY = -mrtm\nendif\n\nifneq (,$(stdlib))\n    CPLUS_FLAGS    += -stdlib=$(stdlib)\n    LIB_LINK_FLAGS += -stdlib=$(stdlib)\nendif\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64 $(RTM_KEY)\n    LINK_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32 $(RTM_KEY)\n    LINK_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -arch ppc64\n    LINK_FLAGS += -arch ppc64\n    LIB_LINK_FLAGS += -arch ppc64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -arch ppc\n    LINK_FLAGS += -arch ppc\n    LIB_LINK_FLAGS += -arch ppc\nendif\n\nifeq ($(arch),$(filter $(arch),armv7 armv7s arm64))\n    CPLUS_FLAGS += -arch $(arch)\n    LINK_FLAGS += -arch $(arch)\n    LIB_LINK_FLAGS += -arch $(arch)\nendif\n\nifdef SDKROOT\n    CPLUS_FLAGS += -isysroot $(SDKROOT)\n    LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/\n    LIB_LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\n\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += -arch x86_64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += -arch i386\nendif\nifeq ($(cfg), debug)\n    ASM_FLAGS += -g\nendif\n\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/macos.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCPLUS = g++\nCONLY = gcc\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor\nWARNING_SUPPRESS = -Wno-non-virtual-dtor\nDYLIB_KEY = -dynamiclib\nEXPORT_KEY = -Wl,-exported_symbols_list,\nLIBDL = -ldl\n\nLIBS = -lpthread\nLINK_FLAGS =\nLIB_LINK_FLAGS = -dynamiclib -install_name @rpath/$(BUILDING_LIBRARY)\nC_FLAGS = $(CPLUS_FLAGS)\n\n# gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them\nifneq (,$(shell gcc -dumpversion | egrep  \"^(4\\.[8-9]|[5-9])\"))\n    RTM_KEY = -mrtm\nendif\n\n# gcc 5.0 and later have -Wsuggest-override option\n# enable it via a pre-included header in order to limit to C++11 and above\nifneq (,$(shell gcc -dumpversion | egrep  \"^([5-9])\"))\n    INCLUDE_TEST_HEADERS = -include $(tbb_root)/src/test/harness_preload.h\nendif\n\n# gcc 6.0 and later have -flifetime-dse option that controls\n# elimination of stores done outside the object lifetime\nifneq (,$(shell gcc -dumpversion | egrep  \"^([6-9])\"))\n    # keep pre-contruction stores for zero initialization\n    DSE_KEY = -flifetime-dse=1\nendif\n\nifeq ($(cfg), release)\n    CPLUS_FLAGS = -g -O2\nelse\n    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += -DUSE_PTHREAD $(ITT_NOTIFY)\n\nifeq (intel64,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m64\n    LINK_FLAGS += -m64\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    ITT_NOTIFY = -DDO_ITT_NOTIFY\n    CPLUS_FLAGS += -m32\n    LINK_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\nendif\n\nifeq (ppc64,$(arch))\n    CPLUS_FLAGS += -arch ppc64\n    LINK_FLAGS += -arch ppc64\n    LIB_LINK_FLAGS += -arch ppc64\nendif\n\nifeq (ppc32,$(arch))\n    CPLUS_FLAGS += -arch ppc\n    LINK_FLAGS += -arch ppc\n    LIB_LINK_FLAGS += -arch ppc\nendif\n\nifeq (armv7,$(arch))\n    CPLUS_FLAGS += -arch armv7\n    LINK_FLAGS += -arch armv7\n    LIB_LINK_FLAGS += -arch armv7\nendif\n\nifdef SDKROOT\n    CPLUS_FLAGS += -isysroot $(SDKROOT)\n    LIB_LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\n\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += -arch x86_64\nendif\nifeq (ia32,$(arch))\n    ASM_FLAGS += -arch i386\nendif\nifeq ($(cfg), debug)\n    ASM_FLAGS += -g\nendif\n\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/macos.icc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCPLUS = icpc\nCONLY = icc\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -w1\nifneq (,$(shell icc -dumpversion | egrep \"1[2-9]\\.\"))\nSDL_FLAGS = -fstack-protector -Wformat -Wformat-security\nendif\n\nDYLIB_KEY = -dynamiclib\nEXPORT_KEY = -Wl,-exported_symbols_list,\nLIBDL = -ldl\n\nLIBS = -lpthread\nLINK_FLAGS =\nLIB_LINK_FLAGS = -dynamiclib -static-intel -install_name @rpath/$(BUILDING_LIBRARY)\nC_FLAGS = $(CPLUS_FLAGS)\n\nifneq (,$(shell icc -dumpversion | egrep  \"^1[6-9]\\.\"))\nOPENMP_FLAG = -qopenmp\nelse\nOPENMP_FLAG = -openmp\nendif\n\n# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus\nifneq (,$(shell icc -dumpversion | egrep  \"^1[2-9]\\.\"))\n    CILK_AVAILABLE = yes\nendif\n\nifeq ($(cfg), release)\n    SDL_FLAGS += -D_FORTIFY_SOURCE=2\n    CPLUS_FLAGS = -g -O2 -fno-omit-frame-pointer\nelse\n    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG\nendif\n\nITT_NOTIFY = -DDO_ITT_NOTIFY\nCPLUS_FLAGS += -DUSE_PTHREAD $(ITT_NOTIFY)\n\nifneq (,$(codecov))\n    CPLUS_FLAGS += -prof-gen=srcpos\nendif\n\n# ICC 14.0 and higher support usage of libc++, clang standard library\nMACOSX_DEPLOYMENT_TARGET ?= 10.11\nifneq (,$(shell icc -dumpversion | egrep  \"^1[4-9]\\.\"))\nifneq (,$(stdlib))\n    CPLUS_FLAGS    += -stdlib=$(stdlib) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)\n    LIB_LINK_FLAGS += -stdlib=$(stdlib) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)\nendif\nendif\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\n\nASM = as\nifeq (intel64,$(arch))\n    ASM_FLAGS += -arch x86_64\nendif\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32\n    LINK_FLAGS += -m32\n    LIB_LINK_FLAGS += -m32\n    ASM_FLAGS += -arch i386\nendif\nifeq ($(cfg), debug)\n    ASM_FLAGS += -g\nendif\n\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/macos.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n####### Detections and Commands ###############################################\n\nifeq (icc,$(compiler))\n  export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')\n  ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION)))\n    export arch:=ia32\n  else\n    ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION)))\n      export arch:=intel64\n    endif\n  endif\n  ifeq (,$(arch))\n    $(warning \"Unknown Intel compiler\")\n  endif\nendif\n\nifndef arch\n ifeq ($(shell /usr/sbin/sysctl -n hw.machine),Power Macintosh)\n   ifeq ($(shell /usr/sbin/sysctl -n hw.optional.64bitops),1)\n     export arch:=ppc64\n   else\n     export arch:=ppc32\n   endif\n else\n   ifeq ($(shell /usr/sbin/sysctl -n hw.optional.x86_64 2>/dev/null),1)\n     export arch:=intel64\n   else\n     export arch:=ia32\n   endif\n endif\nendif\n\nifndef runtime\n  clang_version:=$(shell clang -v 2>&1 >/dev/null | grep version | sed -e \"s/.*version \\(.*[0-9]\\) .*/\\1/\")\n  ifndef os_version\n    os_version:=$(shell /usr/bin/sw_vers -productVersion)\n  endif\n  export runtime:=cc$(clang_version)_os$(os_version)\nendif\n\nnative_compiler := clang\nexport compiler ?= clang\ndebugger ?= lldb\n\nexport stdlib ?= libc++\n\nCMD=$(SHELL) -c\nCWD=$(shell pwd)\nRM?=rm -f\nRD?=rmdir\nMD?=mkdir -p\nNUL= /dev/null\nSLASH=/\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh DY\n\nifdef DYLD_LIBRARY_PATH\n        export DYLD_LIBRARY_PATH := .:$(DYLD_LIBRARY_PATH)\nelse\n        export DYLD_LIBRARY_PATH := .\nendif\n\n####### Build settings ########################################################\n\nOBJ=o\nDLL=dylib\nMALLOC_DLL?=$(DLL)\nLIBEXT=dylib\n\ndef_prefix = $(if $(findstring 64,$(arch)),mac64,mac32)\n\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\nTBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = $(TBB.DLL)\nLINK_TBB.LIB = $(TBB.LIB)\n\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(MALLOC_DLL)\nMALLOC.LIB = $(MALLOC.DLL)\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(MALLOC_DLL)\nMALLOCPROXY.LIB = $(MALLOCPROXY.DLL)\nLINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)\n\nTEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n\nOPENCL.LIB = -framework OpenCL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/mic.icc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY = -fPIC\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -w1\nDYLIB_KEY = -shared -Wl,-soname=$@\nEXPORT_KEY = -Wl,--version-script,\nNOINTRINSIC_KEY = -fno-builtin\nLIBDL = -ldl\nSDL_FLAGS = -fstack-protector -Wformat -Wformat-security\nCPLUS = icpc\nCONLY = icc\n\nifeq (release,$(cfg))\n    SDL_FLAGS += -D_FORTIFY_SOURCE=2\n    CPLUS_FLAGS = -O2 -g -DUSE_PTHREAD\nelse\n    CPLUS_FLAGS = -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG\nendif\n\nifneq (,$(codecov))\n    CPLUS_FLAGS += -prof-gen=srcpos\nendif\n\nifneq (,$(shell icc -dumpversion | egrep  \"^1[6-9]\\.\"))\nOPENMP_FLAG = -qopenmp\nelse\nOPENMP_FLAG = -openmp\nendif\n\nLIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now\nLIBS += -lpthread -lrt\nC_FLAGS = $(CPLUS_FLAGS)\nCILK_AVAILABLE = yes\n\nTBB_ASM.OBJ=\nMALLOC_ASM.OBJ=\n\nCPLUS_FLAGS += -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0 -qopt-streaming-stores never\nCPLUS += -mmic\nCONLY += -mmic\nLINK_FLAGS = -Wl,-rpath-link=. -rdynamic\n# Tell the icc to not link against libcilk*. Otherwise icc tries to link and emits a warning message.\nLIB_LINK_FLAGS += -no-intel-extensions\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/mic.linux.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifeq ($(tbb_os),mic)\n  $(error MIC supports only cross-compilation.  Specify \"target=mic\" instead.)\nendif\n\nifneq ($(BUILDING_PHASE),1)\n  # The same build prefix should be used in offload.inc\n  ifeq (,$(tbb_build_prefix))\n    tbb_build_prefix=mic_icc$(CPF_SUFFIX)\n  endif\n  # For examples\n  mic_tbb_build_prefix=$(tbb_build_prefix)\nendif\n\nMAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver\nMAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh MIC_ MIC_\ndef_prefix=lin64\n\nTEST_LAUNCHER=\nrun_cmd ?= bash $(tbb_root)/build/mic.linux.launcher.sh $(largs)\n\n# detects whether examples are being built.\nifeq ($(BUILDING_PHASE),0)\n export UI = con\n export x64 = 64\nendif # examples\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/mic.linux.launcher.sh",
    "content": "#!/bin/bash\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Usage:\n# mic.linux.launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>\n#         where: -v enables verbose output\n#         where: -q enables quiet mode\n#         where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed)\n#         where: -r <repeats> specifies number of times to repeat execution\n#         where: -u limits stack size\n#         where: -l <library> specifies the library name to be assigned to LD_PRELOAD\n#\n# Libs and executable necessary for testing should be present in the current directory before running.\n# Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail.\n#\ntrap 'echo Error at line $LINENO while executing \"$BASH_COMMAND\"' ERR #\ntrap 'echo -e \"\\n*** Interrupted ***\" && exit 1' SIGINT SIGQUIT #\n# Process the optional arguments if present\nwhile getopts  \"qvsr:ul:\" flag #\ndo case $flag in #\n    s )  # Stress testing mode\n         echo Doing stress testing. Press Ctrl-C to terminate\n         run_env='stressed() { while $*; do :; done; };' #\n         run_prefix=\"stressed $run_prefix\" ;; #\n    r )  # Repeats test n times\n         run_env=\"repeated() { for i in \\$(seq 1 $OPTARG); do echo \\$i of $OPTARG:; \\$*; done; };\" #\n         run_prefix=\"repeated $run_prefix\" ;; #\n    l )  # Additional library\n         ldd_list+=\"$OPTARG \" #\n         run_prefix+=\" LD_PRELOAD=$OPTARG\" ;; #\n    u )  # Set stack limit\n         run_prefix=\"ulimit -s 10240; $run_prefix\" ;; # \n    q )  # Quiet mode, removes 'done' but prepends any other output by test name\n         SUPPRESS='>/dev/null' #\n         verbose=1 ;; # TODO: implement a better quiet mode\n    v )  # Verbose mode\n         verbose=1 ;; #\nesac done #\nshift `expr $OPTIND - 1` #\n[ $verbose ] || SUPPRESS='>/dev/null' #\n#\n# Collect the executable name\nfexename=\"$1\" #\nexename=`basename $1` #\nshift #\n#\n: ${MICDEV:=mic0} #\nRSH=\"sudo ssh $MICDEV\" #\nRCP=\"sudo scp\" #\ncurrentdir=$PWD #\n#\n# Prepare the target directory on the device\ntargetdir=\"`$RSH mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`\" #\n# Prepare the temporary directory on the host\nhostdir=\"`mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`\" #\n#\nfunction copy_files { #\n    [ $verbose ] && echo Going to copy $* #\n    eval \"cp $* $hostdir/ $SUPPRESS 2>/dev/null || exit \\$?\" #\n    eval \"$RCP $hostdir/* $MICDEV:$targetdir/ $SUPPRESS 2>/dev/null || exit \\$?\" #\n    eval \"rm $hostdir/* $SUPPRESS 2>/dev/null || exit \\$?\" #\n} # copy files\n#\nfunction clean_all() { #\n    eval \"$RSH rm -fr $targetdir $SUPPRESS\" ||: #\n    eval \"rm -fr $hostdir $SUPPRESS\" ||: #\n} # clean all temporary files\n#\nfunction kill_interrupt() { #\n    echo -e \"\\n*** Killing remote $exename ***\" && $RSH \"killall $exename\" #\n    clean_all #\n} # kill target process\n#\ntrap 'clean_all' SIGINT SIGQUIT # trap keyboard interrupt (control-c)\n#\n# Transfer the test executable file and its auxiliary libraries (named as {test}_dll.so) to the target device.\ncopy_files $fexename `ls ${exename%\\.*}*.so 2>/dev/null ||:` #\n#\n# Collect all dependencies of the test and its auxiliary libraries to transfer them to the target device.\nldd_list+=\"libtbbmalloc*.so* libirml*.so* `$RSH ldd $targetdir/\\* | grep = | cut -d= -f1 2>/dev/null`\" #\nfnamelist=\"\" #\n#\n# Find the libraries and add them to the list.\n# For example, go through MIC_LD_LIBRARY_PATH and add TBB libraries from the first\n# directory that contains tbb files\nmic_dir_list=`echo .:$MIC_LD_LIBRARY_PATH | tr : \" \"` #\n[ $verbose ] && echo Searching libraries in $mic_dir_list\nfor name in $ldd_list; do # adds the first matched name in specified dirs\n    found=\"`find -L $mic_dir_list -name $name -a -readable -print -quit 2>/dev/null` \"||: #\n    [ $verbose ] && echo File $name: $found\n    fnamelist+=$found\ndone #\n#\n# Remove extra spaces.\nfnamelist=`echo $fnamelist` #\n# Transfer collected executable and library files to the target device.\n[ -n \"$fnamelist\" ] && copy_files $fnamelist\n#\n# Transfer input files used by example codes by scanning the executable argument list.\nargfiles= #\nargs= #\nfor arg in \"$@\"; do #\n  if [ -r $arg ]; then #\n    argfiles+=\"$arg \" #\n    args+=\"$(basename $arg) \" #\n  else #\n    args+=\"$arg \" #\n  fi #\ndone #\n[ -n \"$argfiles\" ] && copy_files $argfiles #\n#\n# Get the list of transferred files\ntestfiles=\"`$RSH find $targetdir/ -type f | tr '\\n' ' ' 2>/dev/null`\" #\n#\n[ $verbose ] && echo Running $run_prefix ./$exename $args #\n# Run the test on the target device\ntrap 'kill_interrupt' SIGINT SIGQUIT # trap keyboard interrupt (control-c)\ntrap - ERR #\nrun_env+=\"cd $targetdir; export LD_LIBRARY_PATH=.:\\$LD_LIBRARY_PATH;\" #\n$RSH \"$run_env $run_prefix ./$exename $args\" #\n#\n# Delete the test files and get the list of output files\noutfiles=`$RSH rm $testfiles 2>/dev/null; find $targetdir/ -type f 2>/dev/null` ||: #\nif [ -n \"$outfiles\" ]; then #\n    for outfile in $outfiles; do #\n        filename=$(basename $outfile) #\n        subdir=$(dirname $outfile) #\n        subdir=\"${subdir#$targetdir}\" #\n        [ -n $subdir ] subdir=$subdir/ #\n        # Create directories on host\n        [ ! -d \"$hostdir/$subdir\" ] && mkdir -p \"$hostdir/$subdir\" #\n        [ ! -d \"$currentdir/$subdir\" ] && mkdir -p \"$currentdir/$subdir\" #\n        # Copy the output file to the temporary directory on host\n        eval \"$RCP -r '$MICDEV:${outfile#}' '$hostdir/$subdir$filename' $SUPPRESS 2>&1 || exit \\$?\" #\n        # Copy the output file from the temporary directory to the current directory\n        eval \"cp '$hostdir/$subdir$filename' '$currentdir/$subdir$filename' $SUPPRESS 2>&1 || exit \\$?\" #\n    done #\nfi #\n#\n# Clean up temporary directories\nclean_all\n#\n# Return the exit code of the test.\nexit $? #\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/mic.offload.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifneq (mic,$(offload))\n  $(error File mic.offload.inc should not be included directly. Use offload=mic instead.)\nendif\nifneq (icc,$(compiler))\n  $(error Only Intel(R) Compiler is supported for MIC offload compilation)\nendif\n\n# The same build prefix should be used in mic.linux.inc\nmic_tbb_build_prefix=mic_icc$(CPF_SUFFIX)\nMIC_OFFLOAD_NATIVE_PATH?=../$(mic_tbb_build_prefix)_$(cfg)\n\nifdef BUILDING_PHASE\n  ifeq ($(BUILDING_PHASE),1)\n    # Tests\n    export MIC_OFFLOAD_NATIVE_PATH\n    LINK_TBB_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(TBB.LIB)\n    LINK_TBB.LIB=-qoffload-option,mic,ld,\"$(LINK_TBB_NATIVE.LIB)\" $(TBB.LIB)\n    LINK_MALLOC_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOC.DLL)\n    LINK_MALLOC.LIB=-qoffload-option,mic,ld,\"$(LINK_MALLOC_NATIVE.LIB)\" $(MALLOC.LIB)\n    LINK_MALLOCPROXY_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOCPROXY.DLL)\n    LINK_MALLOCPROXY.LIB=-qoffload-option,mic,ld,\"$(LINK_MALLOCPROXY_NATIVE.LIB)\" $(MALLOCPROXY.LIB)\n\n    # Export extensions for test_launcher\n    export DLL\n    export TEST_EXT=offload.exe\n    OBJ=offload.o\n\n    # Do not use -Werror because it is too strict for the early offload compiler.\n    # Need to set anything because WARNING_AS_ERROR_KEY should not be empty.\n    # Treat #2426 as a warning. Print errors only.\n    tbb_strict=0\n    WARNING_AS_ERROR_KEY = Warning as error\n    WARNING_KEY = -diag-warning 2426 -w0\n\n    CXX_MIC_STUFF = -qoffload-attribute-target=mic -D__TBB_MIC_OFFLOAD=1 -qoffload-option,mic,compiler,\"-D__TBB_MIC_OFFLOAD=1 $(CXX_MIC_NATIVE_STUFF)\"\n    CXX_MIC_NATIVE_STUFF = -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0\n    CPLUS_FLAGS += $(CXX_MIC_STUFF)\n\n    # Some tests require that an executable exports its symbols.\n    LINK_FLAGS += -qoffload-option,mic,ld,\"--export-dynamic\"\n\n    # libcoi_device.so is needed for COIProcessProxyFlush used in Harness.\n    LINK_FLAGS += -qoffload-option,mic,ld,\"-lcoi_device\"\n\n    # DSO-linking semantics forces linking libpthread and librt to a test.\n    LINK_FLAGS += -qoffload-option,mic,ld,\"-lpthread -lrt\"\n\n    .PHONY: FORCE\n    FORCE:\n\n    $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL): FORCE\n\t@$(MAKE) --no-print-directory -C \"$(MIC_OFFLOAD_NATIVE_PATH)\" target=mic offload= -f$(tbb_root)/build/Makefile.$(TESTFILE) $*_dll.$(DLL)\n    %_dll.$(DLL): $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL) FORCE\n\t@$(MAKE) --no-print-directory offload= -f$(tbb_root)/build/Makefile.$(TESTFILE) $*_dll.$(DLL)\n\n    .PRECIOUS: $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL)\n\n    %.$(TEST_EXT): LINK_FILES+=-qoffload-option,mic,ld,\"$(addprefix $(MIC_OFFLOAD_NATIVE_PATH)/,$(TEST_LIBS))\"\n\n    TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)\n\n    ifdef MIC_LD_LIBRARY_PATH\n      export MIC_LD_LIBRARY_PATH := $(MIC_OFFLOAD_NATIVE_PATH):$(MIC_LD_LIBRARY_PATH)\n    else\n      export MIC_LD_LIBRARY_PATH := $(MIC_OFFLOAD_NATIVE_PATH)\n    endif\n  else\n    # Examples\n    export UI = con\n    export x64 = 64\n  endif\nelse\n  # Libraries\n  LIB_TARGETS = tbb tbbmalloc tbbproxy rml\n  addsuffixes = $(foreach suff,$(1),$(addsuffix $(suff),$(2)))\n\n  .PHONY: $(call addsuffixes, _debug _release _debug_mic _release_mic,$(LIB_TARGETS))\n\n  # The dependence on *_debug and *_release targets unifies the offload support\n  # for top-level Makefile and src/Makefile\n  $(LIB_TARGETS): %: %_release %_debug\n\n  # \"override offload=\" suppresses the \"offload\" variable value for nested makes\n  $(LIB_TARGETS) $(call addsuffixes, _debug _release,$(LIB_TARGETS)): override offload=\n  # Apply overriding for library builds\n  export offload\n  export tbb_build_prefix\n  # Add the dependency on target libraries\n  $(call addsuffixes, _debug _release,$(LIB_TARGETS)): %: %_mic\n\n  # tbb_build_prefix should be overridden since we want to restart make in \"clear\" environment\n  $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): override tbb_build_prefix=\n  $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): %_mic:\n\t@$(MAKE) --no-print-directory -C \"$(full_tbb_root)/src\" $* target=mic tbb_root=..\n\n  mic_clean: override tbb_build_prefix=\n  mic_clean:\n\t@$(MAKE) --no-print-directory -C \"$(full_tbb_root)/src\" clean offload= target=mic tbb_root=..\n  clean: mic_clean\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/suncc.map.pause",
    "content": "hwcap_1 = OVERRIDE;"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/test_launcher.bat",
    "content": "@echo off\r\nREM\r\nREM Copyright (c) 2005-2018 Intel Corporation\r\nREM\r\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\r\nREM you may not use this file except in compliance with the License.\r\nREM You may obtain a copy of the License at\r\nREM\r\nREM     http://www.apache.org/licenses/LICENSE-2.0\r\nREM\r\nREM Unless required by applicable law or agreed to in writing, software\r\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\r\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nREM See the License for the specific language governing permissions and\r\nREM limitations under the License.\r\nREM\r\nREM\r\nREM\r\nREM\r\nREM\r\n\r\nset cmd_line=\r\nif DEFINED run_prefix set cmd_line=%run_prefix%\r\n:while\r\nif NOT \"%1\"==\"\" (\r\n    REM Verbose mode\r\n    if \"%1\"==\"-v\" (\r\n        set verbose=yes\r\n        GOTO continue\r\n    )\r\n    REM Silent mode of 'make' requires additional support for associating\r\n    REM of test output with the test name. Verbose mode is the simplest way\r\n    if \"%1\"==\"-q\" (\r\n        set verbose=yes\r\n        GOTO continue\r\n    )\r\n    REM Run in stress mode\r\n    if \"%1\"==\"-s\" (\r\n        echo Doing stress testing. Press Ctrl-C to terminate\r\n        set stress=yes\r\n        GOTO continue\r\n    )\r\n    REM Repeat execution specified number of times\r\n    if \"%1\"==\"-r\" (\r\n        set repeat=%2\r\n        SHIFT\r\n        GOTO continue\r\n    )\r\n    REM no LD_PRELOAD under Windows\r\n    REM but run the test to check \"#pragma comment\" construction\r\n    if \"%1\"==\"-l\" (\r\n        REM The command line may specify -l with empty dll name,\r\n        REM e.g. \"test_launcher.bat -l  app.exe\". If the dll name is\r\n        REM empty then %2 contains the application name and the SHIFT\r\n        REM operation is not necessary.\r\n        if exist \"%3\" SHIFT\r\n        GOTO continue\r\n    )\r\n    REM no need to setup up stack size under Windows\r\n    if \"%1\"==\"-u\" GOTO continue\r\n    set cmd_line=%cmd_line% %1\r\n:continue\r\n    SHIFT\r\n    GOTO while\r\n)\r\nset cmd_line=%cmd_line:./=.\\%\r\nif DEFINED verbose echo Running %cmd_line%\r\nif DEFINED stress set cmd_line=%cmd_line% ^& IF NOT ERRORLEVEL 1 GOTO stress\r\n:stress\r\nif DEFINED repeat (\r\n    for /L %%i in (1,1,%repeat%) do echo %%i of %repeat%: & %cmd_line%\r\n) else (\r\n    %cmd_line%\r\n)\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/test_launcher.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Usage:\n# test_launcher.sh [-v] [-q] [-s] [-r <repeats>] [-u] [-l <library>] <executable> <arg1> <arg2> <argN>\n#         where: -v enables verbose output\n#         where: -q enables quiet mode\n#         where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed)\n#         where: -r <repeats> specifies number of times to repeat execution\n#         where: -u limits stack size\n#         where: -l <library> specifies the library name to be assigned to LD_PRELOAD\n\nwhile getopts  \"qvsr:ul:\" flag #\ndo case $flag in #\n    s )  # Stress testing mode\n         run_prefix=\"stressed $run_prefix\" ;; #\n    r )  # Repeats test n times\n         repeat=$OPTARG #\n         run_prefix=\"repeated $run_prefix\" ;; #\n    l )  if [ `uname` = 'Linux' ] ; then #\n             LD_PRELOAD=$OPTARG #\n         elif [ `uname` = 'Darwin' ] ; then #\n             DYLD_INSERT_LIBRARIES=$OPTARG #\n         else #\n             echo 'skip' #\n             exit #\n         fi ;; #\n    u )  # Set stack limit\n         ulimit -s 10240 ;; #\n    q )  # Quiet mode, removes 'done' but prepends any other output by test name\n         OUTPUT='2>&1 | sed -e \"s/done//;/^[[:space:]]*$/d;s!^!$1: !\"' ;; #\n    v )  # Verbose mode\n         verbose=1 ;; #\nesac done #\nshift `expr $OPTIND - 1` #\nif [ $MIC_OFFLOAD_NATIVE_PATH ] ; then #\n    LIB_NAME=${1/%.$TEST_EXT/_dll.$DLL} #\n    if [ -f \"$MIC_OFFLOAD_NATIVE_PATH/$LIB_NAME\" ]; then #\n       [ -z \"$MIC_CARD\" ] && MIC_CARD=mic0 #\n        TMPDIR_HOST=`mktemp -d /tmp/tbbtestXXXXXX` #\n        TMPDIR_MIC=`sudo ssh $MIC_CARD mktemp -d /tmp/tbbtestXXXXXX` #\n        sudo ssh $MIC_CARD \"chmod +x $TMPDIR_MIC\" #\n        # Test specific library may depend on libtbbmalloc*\n        cp \"$MIC_OFFLOAD_NATIVE_PATH/$LIB_NAME\" \"$MIC_OFFLOAD_NATIVE_PATH\"/libtbbmalloc* \"$TMPDIR_HOST\" >/dev/null 2>/dev/null #\n        sudo scp \"$TMPDIR_HOST\"/* $MIC_CARD:\"$TMPDIR_MIC\" >/dev/null 2>/dev/null #\n\n        LD_LIBRARY_PATH=$TMPDIR_MIC:$LD_LIBRARY_PATH #\n        export LD_LIBRARY_PATH #\n    fi #\nfi #\nstressed() { echo Doing stress testing. Press Ctrl-C to terminate #\n    while :; do $*; done;#\n} #\nrepeated() { #\n    i=0; while [ \"$i\" -lt $repeat ]; do i=`expr $i + 1`; echo $i of $repeat:; $*; done #\n} #\n# DYLD_LIBRARY_PATH can be purged on OS X 10.11, set it again\nif [ `uname` = 'Darwin' -a -z \"$DYLD_LIBRARY_PATH\" ] ; then #\n    DYLD_LIBRARY_PATH=. #\n    export DYLD_LIBRARY_PATH #\nfi #\n# Run the command line passed via parameters\n[ $verbose ] && echo Running $run_prefix $* #\nif [ -n \"$LD_PRELOAD\" ] ; then #\n    export LD_PRELOAD #\nelif [ -n \"$DYLD_INSERT_LIBRARIES\" ] ; then #\n    export DYLD_INSERT_LIBRARIES #\nfi #\nexec 4>&1 # extracting exit code of the first command in pipeline needs duplicated stdout\n# custom redirection needs eval, otherwise shell cannot parse it\nerr=`eval '( $run_prefix $* || echo \\$? >&3; )' ${OUTPUT} 3>&1 >&4` #\n[ -z \"$err\" ] || echo $1: exited with error $err #\nif [ $MIC_OFFLOAD_NATIVE_PATH ] ; then #\n    sudo ssh $MIC_CARD rm -fr \"$TMPDIR_MIC\" >/dev/null 2>/dev/null #\n    rm -fr \"$TMPDIR_HOST\" >/dev/null 2>/dev/null #\nfi #\nexit $err #\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_aix.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate version info string\necho \"#define __TBB_VERSION_STRINGS(N) \\\\\"\necho '#N\": BUILD_HOST'\"\\t\\t\"`hostname -s`\" (\"`uname -m`\")\"'\" ENDL \\'\n# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out\necho '#N\": BUILD_OS'\"\\t\\t\"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/[\"\\\\\\\\]//g'`'\" ENDL \\'\necho '#N\": BUILD_KERNEL'\"\\t\"`uname -srv`'\" ENDL \\'\necho '#N\": BUILD_GCC'\"\\t\\t\"`g++ --version </dev/null 2>&1 | grep 'g++'`'\" ENDL \\'\n[ -z \"$COMPILER_VERSION\" ] || echo '#N\": BUILD_COMPILER'\"\\t\"$COMPILER_VERSION'\" ENDL \\'\necho '#N\": BUILD_LIBC'\"\\t\"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'\" ENDL \\'\necho '#N\": BUILD_LD'\"\\t\\t\"`ld -v 2>&1 | grep 'version'`'\" ENDL \\'\necho '#N\": BUILD_TARGET'\"\\t$arch on $runtime\"'\" ENDL \\'\necho '#N\": BUILD_COMMAND'\"\\t\"$*'\" ENDL \\'\necho \"\"\necho \"#define __TBB_DATETIME \\\"\"`date -u`\"\\\"\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_android.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate version info string\necho \"#define __TBB_VERSION_STRINGS(N) \\\\\"\necho '#N\": BUILD_HOST'\"\\t\\t\"`hostname -s`\" (\"`uname -m`\")\"'\" ENDL \\'\n# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out\necho '#N\": BUILD_OS'\"\\t\\t\"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/[\"\\\\\\\\]//g'`'\" ENDL \\'\necho '#N\": BUILD_TARGET_CXX'\"\\t\"`$TARGET_CXX --version | head -n1`'\" ENDL \\'\n[ -z \"$COMPILER_VERSION\" ] || echo '#N\": BUILD_COMPILER'\"\\t\"$COMPILER_VERSION'\" ENDL \\'\n[ -z \"$ndk_version\" ] || echo '#N\": BUILD_NDK'\"\\t\\t$ndk_version\"'\" ENDL \\'\necho '#N\": BUILD_LD'\"\\t\\t\"`${tbb_tool_prefix}ld -v 2>&1 | grep 'ld'`'\" ENDL \\'\necho '#N\": BUILD_TARGET'\"\\t$arch on $runtime\"'\" ENDL \\'\necho '#N\": BUILD_COMMAND'\"\\t\"$*'\" ENDL \\'\necho \"\"\necho \"#define __TBB_DATETIME \\\"\"`date -u`\"\\\"\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_linux.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate version info string\necho \"#define __TBB_VERSION_STRINGS(N) \\\\\"\necho '#N\": BUILD_HOST'\"\\t\\t\"`hostname -s`\" (\"`uname -m`\")\"'\" ENDL \\'\n# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out\necho '#N\": BUILD_OS'\"\\t\\t\"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/[\"\\\\\\\\]//g'`'\" ENDL \\'\necho '#N\": BUILD_KERNEL'\"\\t\"`uname -srv`'\" ENDL \\'\necho '#N\": BUILD_GCC'\"\\t\\t\"`g++ --version </dev/null 2>&1 | grep 'g++'`'\" ENDL \\'\n[ -z \"$COMPILER_VERSION\" ] || echo '#N\": BUILD_COMPILER'\"\\t\"$COMPILER_VERSION'\" ENDL \\'\necho '#N\": BUILD_LIBC'\"\\t\"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'\" ENDL \\'\necho '#N\": BUILD_LD'\"\\t\\t\"`ld -v 2>&1 | grep 'version'`'\" ENDL \\'\necho '#N\": BUILD_TARGET'\"\\t$arch on $runtime\"'\" ENDL \\'\necho '#N\": BUILD_COMMAND'\"\\t\"$*'\" ENDL \\'\necho \"\"\necho \"#define __TBB_DATETIME \\\"\"`date -u`\"\\\"\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_macos.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate version info string\necho \"#define __TBB_VERSION_STRINGS(N) \\\\\"\necho '#N\": BUILD_HOST'\"\\t\\t\"`hostname -s`\" (\"`arch`\")\"'\" ENDL \\'\necho '#N\": BUILD_OS'\"\\t\\t\"`sw_vers -productName`\" version \"`sw_vers -productVersion`'\" ENDL \\'\necho '#N\": BUILD_KERNEL'\"\\t\"`uname -v`'\" ENDL \\'\necho '#N\": BUILD_CLANG'\"\\t\"`clang --version </dev/null 2>&1 | grep 'version '`'\" ENDL \\'\necho '#N\": BUILD_XCODE'\"\\t\"`xcodebuild -version </dev/null 2>&1 | grep 'Xcode'`'\" ENDL \\'\n[ -z \"$COMPILER_VERSION\" ] || echo '#N\": BUILD_COMPILER'\"\\t\"$COMPILER_VERSION'\" ENDL \\'\necho '#N\": BUILD_TARGET'\"\\t$arch on $runtime\"'\" ENDL \\'\necho '#N\": BUILD_COMMAND'\"\\t\"$*'\" ENDL \\'\necho \"\"\necho \"#define __TBB_DATETIME \\\"\"`date -u`\"\\\"\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_sunos.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Script used to generate version info string\necho \"#define __TBB_VERSION_STRINGS(N) \\\\\"\necho '#N\": BUILD_HOST'\"\\t\"`hostname`\" (\"`arch`\")\"'\" ENDL \\'\necho '#N\": BUILD_OS'\"\\t\\t\"`uname`'\" ENDL \\'\necho '#N\": BUILD_KERNEL'\"\\t\"`uname -srv`'\" ENDL \\'\necho '#N\": BUILD_SUNCC'\"\\t\"`CC -V </dev/null 2>&1 | grep 'C++'`'\" ENDL \\'\n[ -z \"$COMPILER_VERSION\" ] || echo '#N\": BUILD_COMPILER'\"\\t\"$COMPILER_VERSION'\" ENDL \\'\necho '#N\": BUILD_TARGET'\"\\t$arch on $runtime\"'\" ENDL \\'\necho '#N\": BUILD_COMMAND'\"\\t\"$*'\" ENDL \\'\necho \"\"\necho \"#define __TBB_DATETIME \\\"\"`date -u`\"\\\"\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/version_info_windows.js",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\nvar WshShell = WScript.CreateObject(\"WScript.Shell\");\n\nvar tmpExec;\n\nWScript.Echo(\"#define __TBB_VERSION_STRINGS(N) \\\\\");\n\n//Getting BUILD_HOST\nWScript.echo( \"#N \\\": BUILD_HOST\\\\t\\\\t\" + \n              WshShell.ExpandEnvironmentStrings(\"%COMPUTERNAME%\") +\n              \"\\\" ENDL \\\\\" );\n\n//Getting BUILD_OS\ntmpExec = WshShell.Exec(\"cmd /c ver\");\nwhile ( tmpExec.Status == 0 ) {\n    WScript.Sleep(100);\n}\ntmpExec.StdOut.ReadLine();\n\nWScript.echo( \"#N \\\": BUILD_OS\\\\t\\\\t\" + \n              tmpExec.StdOut.ReadLine() +\n              \"\\\" ENDL \\\\\" );\n\nif ( WScript.Arguments(0).toLowerCase().match(\"gcc\") ) {\n    tmpExec = WshShell.Exec(WScript.Arguments(0) + \" --version\");\n    WScript.echo( \"#N \\\": BUILD_GCC\\\\t\\\\t\" + \n                  tmpExec.StdOut.ReadLine() + \n                  \"\\\" ENDL \\\\\" );\n\n} else if ( WScript.Arguments(0).toLowerCase().match(\"clang\") ) {\n    tmpExec = WshShell.Exec(WScript.Arguments(0) + \" --version\");\n    WScript.echo( \"#N \\\": BUILD_CLANG\\\\t\" + \n                  tmpExec.StdOut.ReadLine() + \n                  \"\\\" ENDL \\\\\" );\n\n} else { // MS / Intel compilers\n    //Getting BUILD_CL\n    tmpExec = WshShell.Exec(\"cmd /c echo #define 0 0>empty.cpp\");\n    tmpExec = WshShell.Exec(\"cl -c empty.cpp \");\n    while ( tmpExec.Status == 0 ) {\n        WScript.Sleep(100);\n    }\n    var clVersion = tmpExec.StdErr.ReadLine();\n    WScript.echo( \"#N \\\": BUILD_CL\\\\t\\\\t\" + \n                  clVersion +\n                  \"\\\" ENDL \\\\\" );\n\n    //Getting BUILD_COMPILER\n    if ( WScript.Arguments(0).toLowerCase().match(\"icl\") ) {\n        tmpExec = WshShell.Exec(\"icl -c empty.cpp \");\n        while ( tmpExec.Status == 0 ) {\n            WScript.Sleep(100);\n        }\n        WScript.echo( \"#N \\\": BUILD_COMPILER\\\\t\" + \n                      tmpExec.StdErr.ReadLine() + \n                      \"\\\" ENDL \\\\\" );\n    } else {\n        WScript.echo( \"#N \\\": BUILD_COMPILER\\\\t\\\\t\" + \n                      clVersion +\n                      \"\\\" ENDL \\\\\" );\n    }\n    tmpExec = WshShell.Exec(\"cmd /c del /F /Q empty.obj empty.cpp\");\n}\n\n//Getting BUILD_TARGET\nWScript.echo( \"#N \\\": BUILD_TARGET\\\\t\" + \n              WScript.Arguments(1) + \n              \"\\\" ENDL \\\\\" );\n\n//Getting BUILD_COMMAND\nWScript.echo( \"#N \\\": BUILD_COMMAND\\\\t\" + WScript.Arguments(2) + \"\\\" ENDL\" );\n\n//Getting __TBB_DATETIME and __TBB_VERSION_YMD\nvar date = new Date();\nWScript.echo( \"#define __TBB_DATETIME \\\"\" + date.toUTCString() + \"\\\"\" );\nWScript.echo( \"#define __TBB_VERSION_YMD \" + date.getUTCFullYear() + \", \" + \n              (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):(\"0\"+(date.getUTCMonth()+1))) + \n              (date.getUTCDate() > 9 ? date.getUTCDate():(\"0\"+date.getUTCDate())) );\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nThis directory contains the Visual Studio* 2013 solution to build Intel&reg; Threading Building Blocks.\n\n\n<H2>Files</H2>\n<DL>\n<DT><A HREF=\"makefile.sln\">makefile.sln</A>\n<DD>Solution file.</DD>\n<DT><A HREF=\"tbb.vcxproj\">tbb.vcxproj</A>\n<DD>Library project file.</DD>\n<DT><A HREF=\"tbbmalloc.vcxproj\">tbbmalloc.vcxproj</A>\n<DD>Scalable allocator library project file.</DD>\n<DT><A HREF=\"tbbmalloc_proxy.vcxproj\">tbbmalloc_proxy.vcxproj</A>\n<DD>Standard allocator replacement project file. </DD>\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<P></P>\nCopyright &copy; 2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel and the Intel logo are trademarks of Intel Corporation\nor its subsidiaries in the U.S. and/or other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/makefile.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{8898CE0B-0BFB-45AE-AA71-83735ED2510D}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\tindex.html = index.html\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tbb\", \"tbb.vcxproj\", \"{F62787DD-1327-448B-9818-030062BCFAA5}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tbbmalloc\", \"tbbmalloc.vcxproj\", \"{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tbbmalloc_proxy\", \"tbbmalloc_proxy.vcxproj\", \"{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug-MT|Win32 = Debug-MT|Win32\r\n\t\tDebug-MT|x64 = Debug-MT|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease-MT|Win32 = Release-MT|Win32\r\n\t\tRelease-MT|x64 = Release-MT|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.Build.0 = Debug-MT|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.ActiveCfg = Debug-MT|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.Build.0 = Debug-MT|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.ActiveCfg = Release-MT|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.Build.0 = Release-MT|Win32\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64\r\n\t\t{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.Build.0 = Debug-MT|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.ActiveCfg = Debug-MT|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.Build.0 = Debug-MT|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.ActiveCfg = Release-MT|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.Build.0 = Release-MT|Win32\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.ActiveCfg = Release-MT|x64\r\n\t\t{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.Build.0 = Release-MT|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.Build.0 = Debug-MT|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.ActiveCfg = Debug-MT|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.Build.0 = Debug-MT|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.ActiveCfg = Release-MT|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.Build.0 = Release-MT|Win32\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.ActiveCfg = Release-MT|x64\r\n\t\t{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.Build.0 = Release-MT|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/tbb.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug-MT|Win32\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug-MT|x64\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|Win32\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|x64\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{F62787DD-1327-448B-9818-030062BCFAA5}</ProjectGuid>\n    <RootNamespace>tbb</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(ProjectName)_debug</TargetName>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions>  /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions>  /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions>  /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions>  /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:\"$(IntDir)tbb.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbb.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <MASM Include=\"..\\..\\src\\tbb\\ia32-masm\\atomic_support.asm\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </MASM>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\intel64-masm\\atomic_support.asm\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n    </CustomBuild>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\intel64-masm\\intel64_misc.asm\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">building intel64_misc.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">building intel64_misc.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">building intel64_misc.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">building intel64_misc.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n    </CustomBuild>\n    <MASM Include=\"..\\..\\src\\tbb\\ia32-masm\\itsx.asm\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </MASM>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\intel64-masm\\itsx.asm\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">building itsx.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">building itsx.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">building itsx.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">building itsx.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n    </CustomBuild>\n    <MASM Include=\"..\\..\\src\\tbb\\ia32-masm\\lock_byte.asm\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">/coff /Zi</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/coff /Zi</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">/coff /Zi</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">true</ExcludedFromBuild>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/coff</AdditionalOptions>\n      <UseSafeExceptionHandlers Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</UseSafeExceptionHandlers>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </MASM>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\win32-tbb-export.def\">\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n    </CustomBuild>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\win64-tbb-export.def\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">generating tbb.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;\"$(IntDir)tbb.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)tbb.def;%(Outputs)</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\src\\tbb\\concurrent_hash_map.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\concurrent_queue.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\concurrent_vector.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\dynamic_link.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\itt_notify.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\cache_aligned_allocator.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\pipeline.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\queuing_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\queuing_rw_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\reader_writer_lock.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\spin_rw_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\x86_rtm_rw_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\spin_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\critical_section.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\recursive_mutex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\condition_variable.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\tbb_thread.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\concurrent_monitor.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\semaphore.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\private_server.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\rml\\client\\rml_tbb.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\tbb_misc.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\tbb_misc_ex.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\task.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\task_group_context.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\governor.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\market.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\arena.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\scheduler.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\observer_proxy.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\tbb_statistics.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\tbb_main.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\old\\concurrent_vector_v2.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\old\\concurrent_queue_v2.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\old\\spin_rw_mutex_v2.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\old\\task_v2.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\tbb\\internal\\_concurrent_queue_impl.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\_tbb_windef.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\aligned_space.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\atomic.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range2d.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range3d.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_rangeNd.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\cache_aligned_allocator.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\combinable.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_hash_map.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\concurrent_monitor.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_priority_queue.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_queue.h\" />\n    <ClInclude Include=\"..\\..\\src\\old\\concurrent_queue_v2.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_vector.h\" />\n    <ClInclude Include=\"..\\..\\src\\old\\concurrent_vector_v2.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\critical_section.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\dynamic_link.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\enumerable_thread_specific.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\gate.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_allocator.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_assert.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_bad_expr.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_barrier.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_concurrency_tracker.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_cpu.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_eh.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_iterator.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_m128.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_memory.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\harness_report.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\ibm_aix51.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\itt_notify.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\linux_common.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\linux_ia32.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\linux_ia64.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\linux_intel64.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\mac_ppc.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\null_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\null_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_do.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_for.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_for_each.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_invoke.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_reduce.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_scan.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_sort.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_while.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\partitioner.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\pipeline.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\compat\\ppl.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\queuing_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\queuing_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\reader_writer_lock.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\recursive_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\scalable_allocator.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\semaphore.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\spin_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\spin_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\src\\old\\spin_rw_mutex_v2.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_group.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_scheduler_init.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_scheduler_observer.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_allocator.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\tbb_assert_impl.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_config.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_exception.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_machine.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\tbb_misc.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_profiling.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_stddef.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_thread.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\tbb_version.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbbmalloc_proxy.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\test_allocator.h\" />\n    <ClInclude Include=\"..\\..\\src\\test\\test_allocator_STL.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tick_count.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbb\\tls.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\windows_ia32.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\windows_intel64.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"..\\..\\src\\tbb\\tbb_resource.rc\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n    </ResourceCompile>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.targets\" />\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/tbbmalloc.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug-MT|Win32\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug-MT|x64\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|Win32\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|x64\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}</ProjectGuid>\n    <RootNamespace>tbbmalloc</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(ProjectName)_debug</TargetName>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <MinimalRebuild>false</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <MinimalRebuild>false</MinimalRebuild>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I.</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:\"$(IntDir)tbbmalloc.def\" %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"..\\..\\src\\tbb\\intel64-masm\\atomic_support.asm\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">building atomic_support.obj</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">ml64 /Fo\"$(IntDir)%(FileName).obj\"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)%(FileName).obj;%(Outputs)</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"..\\..\\src\\tbbmalloc\\win32-tbbmalloc-export.def\">\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n    </CustomBuild>\n    <CustomBuild Include=\"..\\..\\src\\tbbmalloc\\win64-tbbmalloc-export.def\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">generating tbbmalloc.def file</Message>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 &gt;\"$(IntDir)tbbmalloc.def\"\n</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(IntDir)tbbmalloc.def;%(Outputs)</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\backend.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\large_objects.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\backref.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\tbbmalloc.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbb\\itt_notify.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\frontend.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\include\\tbb\\internal\\_concurrent_queue_impl.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\_tbb_windef.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\aligned_space.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\atomic.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range2d.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_range3d.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\blocked_rangeNd.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\cache_aligned_allocator.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\combinable.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_hash_map.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_queue.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\concurrent_vector.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\critical_section.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\Customize.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\enumerable_thread_specific.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\LifoList.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\MapMemory.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\null_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\null_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_do.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_for.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_for_each.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_invoke.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_reduce.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_scan.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_sort.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\parallel_while.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\partitioner.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\pipeline.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\proxy.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\queuing_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\queuing_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\recursive_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\scalable_allocator.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\spin_mutex.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\spin_rw_mutex.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\Statistics.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_group.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_scheduler_init.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\task_scheduler_observer.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_allocator.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_config.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_exception.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\tbb_function_replacement.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_machine.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_profiling.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_stddef.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_thread.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbb_version.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbbmalloc_proxy.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tick_count.h\" />\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\TypeDefinitions.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\windows_ia32.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\machine\\windows_intel64.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"..\\..\\src\\tbbmalloc\\tbbmalloc.rc\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"tbb.vcxproj\">\n      <Project>{f62787dd-1327-448b-9818-030062bcfaa5}</Project>\n      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.targets\" />\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/tbbmalloc_proxy.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug-MT|Win32\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug-MT|x64\">\n      <Configuration>Debug-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|Win32\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release-MT|x64\">\n      <Configuration>Release-MT</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}</ProjectGuid>\n    <RootNamespace>tbbmalloc_proxy</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>NotSet</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(ProjectName)_debug</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">$(ProjectName)_debug</TargetName>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <MinimalRebuild>false</MinimalRebuild>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <MinimalRebuild>true</MinimalRebuild>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <MinimalRebuild>false</MinimalRebuild>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <ShowIncludes>false</ShowIncludes>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy_debug.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">\n    <ClCompile>\n      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO   %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions> /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc</AdditionalOptions>\n      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>\n      </ExceptionHandling>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level4</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalOptions>/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions)</AdditionalOptions>\n      <OutputFile>$(OutDir)tbbmalloc_proxy.dll</OutputFile>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\..\\src\\tbbmalloc\\tbb_function_replacement.h\" />\n    <ClInclude Include=\"..\\..\\include\\tbb\\tbbmalloc_proxy.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"..\\..\\src\\tbbmalloc\\tbbmalloc.rc\">\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release-MT|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalOptions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions)</AdditionalOptions>\n    </ResourceCompile>\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\proxy.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tbbmalloc\\tbb_function_replacement.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"tbbmalloc.vcxproj\">\n      <Project>{b15f131e-328a-4d42-adc2-9ff4ca6306d8}</Project>\n      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.targets\" />\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/vs2013/version_string.ver",
    "content": "#define __TBB_VERSION_STRINGS(N) \"Empty\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/windows.cl.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Define compiler-specific variables.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting compiler flags.\n#------------------------------------------------------------------------------\nCPLUS = cl /nologo\nLINK_FLAGS = /link /nologo\nLIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DYNAMICBASE /NXCOMPAT\n\nifneq (,$(stdver))\n    CXX_STD_FLAGS = /std:$(stdver)\nendif\n\nifeq ($(arch), ia32)\n    LIB_LINK_FLAGS += /SAFESEH\nendif\n\nifeq ($(runtime), vc_mt)\n    MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)\nelse\n    MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)\nendif\nEH_FLAGS = $(if $(no_exceptions),/EHs-,/EHsc /GR)\n\n# UWD binaries have to use static CRT linkage\nifeq ($(target_app), uwd)\n    MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)\nendif\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB)\n        ASM_FLAGS =\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB)\n        ASM_FLAGS = /DUSE_FRAME_POINTER\nendif\n\nZW_KEY = /ZW:nostdlib\n\n# These flags are general for Windows* universal applications\nifneq (,$(target_app))\n    CPLUS_FLAGS += $(ZW_KEY) /D \"_UNICODE\" /D \"UNICODE\" /D \"WINAPI_FAMILY=WINAPI_FAMILY_APP\"\nendif\n\nifeq ($(target_app), win8ui)\n        _WIN32_WINNT = 0x0602\nelse ifneq (,$(filter $(target_app),uwp uwd))\n        _WIN32_WINNT = 0x0A00\n        LIB_LINK_FLAGS += /NODEFAULTLIB:kernel32.lib OneCore.lib\nelse\n        CPLUS_FLAGS += /DDO_ITT_NOTIFY\nendif\nifeq ($(target_mode), store)\n#       it is necessary to source vcvars with 'store' argument in production\n        LIB_LINK_FLAGS += /APPCONTAINER\nendif\n\nCPLUS_FLAGS += /GS\n\nCOMPILE_ONLY = /c\nPREPROC_ONLY = /TP /EP\nINCLUDE_KEY = /I\nDEFINE_KEY = /D\nOUTPUT_KEY = /Fe\nOUTPUTOBJ_KEY = /Fo\nWARNING_AS_ERROR_KEY = /WX\nWARNING_SUPPRESS = $(if $(no_exceptions),/wd4530 /wd4577)\nBIGOBJ_KEY = /bigobj\n\nifeq ($(runtime),vc7.1)\n        WARNING_KEY = /W3\nelse\n        WARNING_KEY = /W4\n        OPENMP_FLAG = /openmp\nendif\n\nDYLIB_KEY = /DLL\nEXPORT_KEY = /DEF:\nNODEFAULTLIB_KEY = /Zl\nNOINTRINSIC_KEY = /Oi-\n\nINCLUDE_TEST_HEADERS = /FI$(tbb_root)/src/test/harness_preload.h\n\nifeq ($(runtime),vc8)\n        WARNING_KEY += /Wp64\n        CPLUS_FLAGS += /D_USE_RTM_VERSION\nendif\n\n# Since VS2012, VC++ provides /volatile option to control semantics of volatile variables.\n# We want to use strict ISO semantics in the library and tests\nifeq (ok,$(call detect_js,/minversion cl 17))\n        CPLUS_FLAGS += /volatile:iso\nendif\n\n# Since VS2013, VC++ uses the same .pdb file for different sources so we need\n# to add /FS (Force Synchronous PDB Writes)\nifeq (ok,$(call detect_js,/minversion cl 18))\n        CPLUS_FLAGS += /FS\nendif\n\nCPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \\\n        /D_WIN32_WINNT=$(_WIN32_WINNT)\nC_FLAGS = $(subst $(ZW_KEY),,$(subst $(EH_FLAGS),,$(CPLUS_FLAGS)))\n\n#------------------------------------------------------------------------------\n# End of setting compiler flags.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASSEMBLY_SOURCE=$(arch)-masm\nifeq (intel64,$(arch))\n    ASM=ml64 /nologo\n    ASM_FLAGS += /DEM64T=1 /c /Zi\n    TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj itsx.obj\n    MALLOC_ASM.OBJ = atomic_support.obj\nelse\nifeq (armv7,$(arch))\n    ASM=\n    TBB_ASM.OBJ= \nelse\n    ASM=ml /nologo\n    ASM_FLAGS += /c /coff /Zi /safeseh\n    TBB_ASM.OBJ = atomic_support.obj lock_byte.obj itsx.obj\nendif\nendif\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\nM_CPLUS_FLAGS = $(CPLUS_FLAGS)\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# End of define compiler-specific variables.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/windows.gcc.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Overriding settings from windows.inc\n#------------------------------------------------------------------------------\n\nSLASH= $(strip \\)\nOBJ = o\nLIBEXT = dll # MinGW allows linking with DLLs directly\n\nTBB.RES =\nMALLOC.RES =\nRML.RES =\nTBB.MANIFEST =\nMALLOC.MANIFEST =\nRML.MANIFEST =\n\nifeq (ia32,$(arch))\n    TBB.LST = $(tbb_root)/src/tbb/lin32-tbb-export.lst\nelse\n    TBB.LST = $(tbb_root)/src/tbb/win64-gcc-tbb-export.lst\nendif\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-gcc-tbbmalloc-export.def\nRML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def\n\nLINK_TBB.LIB = $(TBB.LIB)\n# no TBB proxy for the configuration\nPROXY.LIB =\n\n#------------------------------------------------------------------------------\n# End of overridden settings\n#------------------------------------------------------------------------------\n# Compiler-specific variables\n#------------------------------------------------------------------------------\n\nCPLUS = g++\nCOMPILE_ONLY = -c -MMD\nPREPROC_ONLY = -E -x c++\nINCLUDE_KEY = -I\nDEFINE_KEY = -D\nOUTPUT_KEY = -o #\nOUTPUTOBJ_KEY = -o #\nPIC_KEY =\nWARNING_AS_ERROR_KEY = -Werror\nWARNING_KEY = -Wall\nTEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wno-uninitialized\nWARNING_SUPPRESS = -Wno-parentheses -Wno-uninitialized -Wno-non-virtual-dtor\nDYLIB_KEY = -shared\nLIBDL =\nEXPORT_KEY = -Wl,--version-script,\nLIBS = -lpsapi\nBIGOBJ_KEY = -Wa,-mbig-obj\n\n#------------------------------------------------------------------------------\n# End of compiler-specific variables\n#------------------------------------------------------------------------------\n# Command lines\n#------------------------------------------------------------------------------\n\nLINK_FLAGS = -Wl,--enable-auto-import\nLIB_LINK_FLAGS = $(DYLIB_KEY)\n\n# gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them\nifeq (ok,$(call detect_js,/minversion gcc 4.8))\n    RTM_KEY = -mrtm\nendif\n\n# gcc 6.0 and later have -flifetime-dse option that controls\n# elimination of stores done outside the object lifetime\nifeq (ok,$(call detect_js,/minversion gcc 6.0))\n    # keep pre-contruction stores for zero initialization\n    DSE_KEY = -flifetime-dse=1\nendif\n\nifeq ($(cfg), release)\n        CPLUS_FLAGS = -g -O2\nendif\nifeq ($(cfg), debug)\n        CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG\nendif\n\nCPLUS_FLAGS += -DUSE_WINTHREAD\nCPLUS_FLAGS += -D_WIN32_WINNT=$(_WIN32_WINNT)\n\n# MinGW specific\nCPLUS_FLAGS += -DMINGW_HAS_SECURE_API=1 -D__MSVCRT_VERSION__=0x0700 -msse -mthreads\n\nCONLY = gcc\ndebugger = gdb\nC_FLAGS = $(CPLUS_FLAGS)\n\nifeq (intel64,$(arch))\n    CPLUS_FLAGS += -m64 $(RTM_KEY)\n    LIB_LINK_FLAGS += -m64\nendif\n\nifeq (ia32,$(arch))\n    CPLUS_FLAGS += -m32 -march=i686 $(RTM_KEY)\n    LIB_LINK_FLAGS += -m32\nendif\n\n# For examples\nexport UNIXMODE = 1\n\n#------------------------------------------------------------------------------\n# End of command lines\n#------------------------------------------------------------------------------\n# Setting assembler data\n#------------------------------------------------------------------------------\n\nASM=\nASM_FLAGS=\nTBB_ASM.OBJ=\nASSEMBLY_SOURCE=$(arch)-gas\n\n#------------------------------------------------------------------------------\n# End of setting assembler data\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data\n#------------------------------------------------------------------------------\n\nM_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions\n\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/windows.icl.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#------------------------------------------------------------------------------\n# Define compiler-specific variables.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting default configuration to release.\n#------------------------------------------------------------------------------\ncfg ?= release\n#------------------------------------------------------------------------------\n# End of setting default configuration to release.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting compiler flags.\n#------------------------------------------------------------------------------\nCPLUS = icl /nologo $(VCCOMPAT_FLAG)\nLINK_FLAGS = /link /nologo\nLIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DYNAMICBASE /NXCOMPAT\n\nifeq ($(arch), ia32)\n    LIB_LINK_FLAGS += /SAFESEH\nendif\n\nifneq (,$(stdver))\n    CXX_STD_FLAGS = /Qstd=$(stdver)\nendif\n\n# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus\nifeq (ok,$(call detect_js,/minversion icl 12))\n    CILK_AVAILABLE = yes\nendif\n\n# ICC 17.0.4 and higher provide support for VS2017\nifeq (ok,$(call detect_js,/minversion icl 17 4))\n    VS2017_SUPPORT = yes\nendif\n\nifeq ($(runtime), vc_mt)\n    MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)\nelse\n    MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)\nendif\nEH_FLAGS = $(if $(no_exceptions),/EHs-,/EHsc /GR)\n\nifeq ($(cfg), release)\n    CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB)\n    ASM_FLAGS =\nendif\nifeq ($(cfg), debug)\n    CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB)\n    ASM_FLAGS = /DUSE_FRAME_POINTER\nendif\nCPLUS_FLAGS += /GS\n\nCOMPILE_ONLY = /c /QMMD\n# PREPROC_ONLY should really use /TP which applies to all files in the command line.\n# But with /TP, ICL does not preprocess *.def files.\nPREPROC_ONLY = /EP /Tp\nINCLUDE_KEY = /I\nDEFINE_KEY = /D\nOUTPUT_KEY = /Fe\nOUTPUTOBJ_KEY = /Fo\nWARNING_AS_ERROR_KEY = /WX\nWARNING_KEY = /W3\nWARNING_SUPPRESS = $(if $(no_exceptions),/wd583)\nDYLIB_KEY = /DLL\nEXPORT_KEY = /DEF:\nNODEFAULTLIB_KEY = /Zl\nNOINTRINSIC_KEY = /Oi-\nBIGOBJ_KEY = /bigobj\nINCLUDE_TEST_HEADERS = /FI$(tbb_root)/src/test/harness_preload.h\n\n\nifneq (,$(codecov))\n    CPLUS_FLAGS += /Qprof-genx\nelse\n    CPLUS_FLAGS += /DDO_ITT_NOTIFY\nendif\n\nOPENMP_FLAG = /Qopenmp\nCPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \\\n               /D_WIN32_WINNT=$(_WIN32_WINNT)\n\nifeq ($(runtime),vc8)\n    CPLUS_FLAGS += /D_USE_RTM_VERSION\nendif\n\n\nC_FLAGS = $(subst $(EH_FLAGS),,$(CPLUS_FLAGS))\n\nVCVERSION:=$(runtime)\nVCCOMPAT_FLAG ?= $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc_mt, $(VCVERSION)),/Qvc10)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc9, $(VCVERSION)),/Qvc9)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc10, $(VCVERSION)),/Qvc10)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc11, $(VCVERSION)),/Qvc11)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        VCCOMPAT_FLAG := $(if $(findstring vc12, $(VCVERSION)),/Qvc12)\nendif\nifeq ($(VCCOMPAT_FLAG),)\n    VCCOMPAT_FLAG := $(if $(findstring vc14, $(VCVERSION)),/Qvc14)\n    ifeq ($(VS2017_SUPPORT),yes)\n        ifneq (,$(findstring vc14.1, $(VCVERSION)))\n            VCCOMPAT_FLAG := /Qvc14.1\n        endif\n    endif\nendif\nifeq ($(VCCOMPAT_FLAG),)\n        $(error VC version not detected correctly: $(VCVERSION) )\nendif\nexport VCCOMPAT_FLAG\n\n#------------------------------------------------------------------------------\n# End of setting compiler flags.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting assembler data.\n#------------------------------------------------------------------------------\nASSEMBLY_SOURCE=$(arch)-masm\nifeq (intel64,$(arch))\n    ASM=ml64 /nologo\n    ASM_FLAGS += /DEM64T=1 /c /Zi\n    TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj itsx.obj\n    MALLOC_ASM.OBJ = atomic_support.obj\nelse\n    ASM=ml /nologo\n    ASM_FLAGS += /c /coff /Zi /safeseh\n    TBB_ASM.OBJ = atomic_support.obj lock_byte.obj itsx.obj\nendif\n#------------------------------------------------------------------------------\n# End of setting assembler data.\n#------------------------------------------------------------------------------\n\n\n#------------------------------------------------------------------------------\n# Setting tbbmalloc data.\n#------------------------------------------------------------------------------\nM_CPLUS_FLAGS = $(CPLUS_FLAGS)\n#------------------------------------------------------------------------------\n# End of setting tbbmalloc data.\n#------------------------------------------------------------------------------\n\n#------------------------------------------------------------------------------\n# End of define compiler-specific variables.\n#------------------------------------------------------------------------------\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/build/windows.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nexport SHELL = cmd\n\nifdef tbb_build_dir\n  test_dir:=$(tbb_build_dir)\nelse\n  test_dir:=.\nendif\n\n# A convenience wrapper for calls to detect.js.\n# $(1) is the full command line for the script, e.g. /minversion icl 12\ndetect_js = $(shell cmd /C \"cscript /nologo /E:jscript $(tbb_root)/build/detect.js $(1)\")\n\n# TODO give an error if archs doesn't match\nifndef arch\n  export arch:=$(call detect_js, /arch $(compiler))\nendif\n\nifndef runtime\n  export runtime:=$(call detect_js, /runtime $(compiler))\nendif\n\nnative_compiler := cl\nexport compiler ?= cl\ndebugger ?= devenv /debugexe\n\nCMD=cmd /C\nCWD=$(shell cmd /C echo %CD%)\nRM=cmd /C del /Q /F\nRD=cmd /C rmdir\nMD=cmd /c mkdir\nSLASH=\\\\\nNUL = nul\n\nAR=lib\nAR_OUTPUT_KEY=/out:\nAR_FLAGS=/nologo /nodefaultlib\n\nOBJ = obj\nDLL = dll\nLIBEXT = lib\nASMEXT = asm\n\ndef_prefix = $(if $(findstring intel64,$(arch)),win64,win32)\n\n# Target Windows version. Do not increase beyond 0x0502 without prior discussion!\n# Used as the value for macro definition option in windows.cl.inc etc.\n# For tests, we need at least Windows XP SP2 for sake of enabling stack backtraces.\n_WIN32_WINNT=0x0502\n\nTBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst\nTBB.DEF = $(TBB.LST:.lst=.def)\nTBB.DLL = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)\nTBB.LIB = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(LIBEXT)\nTBB.RES = tbb_resource.res\n# On Windows, we use #pragma comment to set the proper TBB lib to link with.\n# But for cross-configuration testing, need to link explicitly.\n# Tests use this variable to detect dependency on TBB binary, so have to be non-empty. \nLINK_TBB.LIB = $(if $(crosstest),$(TBB.LIB),$(DEFINE_KEY)__TBB_IMPLICITLY_LINKED)\nTBB.MANIFEST =\nifneq ($(filter vc8 vc9,$(runtime)),)\n    TBB.MANIFEST = tbbmanifest.exe.manifest\nendif\n\nMALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def\nMALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL)\nMALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)\nMALLOC.RES = tbbmalloc.res\nMALLOC.MANIFEST =\nifneq ($(filter vc8 vc9,$(runtime)),)\nMALLOC.MANIFEST = tbbmanifest.exe.manifest\nendif\nLINK_MALLOC.LIB = $(MALLOC.LIB)\n\nMALLOCPROXY.DLL = tbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)\nMALLOCPROXY.LIB = tbbmalloc_proxy$(DEBUG_SUFFIX).$(LIBEXT)\nLINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)\n\nPROXY.LIB = tbbproxy$(DEBUG_SUFFIX).$(LIBEXT)\n\nRML.DEF = $(RML_SERVER_ROOT)/$(def_prefix)-rml-export.def\nRML.DLL = irml$(DEBUG_SUFFIX).$(DLL)\nRML.LIB = irml$(DEBUG_SUFFIX).$(LIBEXT)\nRML.RES = irml.res\nifneq ($(filter vc8 vc9,$(runtime)),)\nRML.MANIFEST = tbbmanifest.exe.manifest\nendif\n\nMAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \\,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \\,/,\"$(VERSION_FLAGS)\") > version_string.ver\nMAKE_TBBVARS  = cmd /C \"$(subst /,\\,$(tbb_root))\\build\\generate_tbbvars.bat\"\n\nTEST_LAUNCHER = $(subst /,\\,$(tbb_root))\\build\\test_launcher.bat $(largs)\n\nOPENCL.LIB = OpenCL.$(LIBEXT)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/README.rst",
    "content": ".. contents::\n\nIntroduction\n------------\nMany developers use CMake to manage their development projects, so the Intel(R) Threading Building Blocks (Intel(R) TBB)\nteam created the set of CMake modules to simplify integration of the Intel TBB library into a CMake project.\nThe modules are available starting from Intel TBB 2017 U7 in `<tbb_root>/cmake <https://github.com/01org/tbb/tree/tbb_2017/cmake>`_.\n\nAbout Intel TBB\n^^^^^^^^^^^^^^^\nIntel TBB is a library that supports scalable parallel programming using standard ISO C++ code. It does not require special languages or compilers. It is designed to promote scalable data parallel programming. Additionally, it fully supports nested parallelism, so you can build larger parallel components from smaller parallel components. To use the library, you specify tasks, not threads, and let the library map tasks onto threads in an efficient manner.\n\nMany of the library interfaces employ generic programming, in which interfaces are defined by requirements on types and not specific types. The C++ Standard Template Library (STL) is an example of generic programming. Generic programming enables Intel TBB to be flexible yet efficient. The generic interfaces enable you to customize components to your specific needs.\n\nThe net result is that Intel TBB enables you to specify parallelism far more conveniently than using raw threads, and at the same time can improve performance.\n\nReferences\n^^^^^^^^^^\n* `Official Intel TBB open source site <https://www.threadingbuildingblocks.org/>`_\n* `Official GitHub repository <https://github.com/01org/tbb>`_\n\nEngineering team contacts\n^^^^^^^^^^^^^^^^^^^^^^^^^\nThe Intel TBB team is very interested in convenient integration of the Intel TBB library into customer projects. These CMake modules were created to provide such a possibility for CMake projects using a simple but powerful interface. We hope you will try these modules and we are looking forward to receiving your feedback!\n\nE-mail us: `inteltbbdevelopers@intel.com <mailto:inteltbbdevelopers@intel.com>`_.\n\nVisit our `forum <https://software.intel.com/en-us/forums/intel-threading-building-blocks/>`_.\n\nRelease Notes\n-------------\n* Minimum supported CMake version: ``3.0.0``.\n* Intel TBB versioning via `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ has restricted functionality: compatibility of update numbers (as well as interface versions) is not checked. Supported versioning: ``find_package(TBB <major>.<minor> ...)``. Intel TBB interface version can be obtained in the customer project via the ``TBB_INTERFACE_VERSION`` variable.\n\nUse cases of Intel TBB integration into CMake-aware projects\n------------------------------------------------------------\nThere are two types of Intel TBB packages:\n * Binary packages with pre-built binaries for Windows* OS, Linux* OS and macOS*. They are available on the releases page of the Github repository: https://github.com/01org/tbb/releases. The main purpose of the binary package integration is the ability to build Intel TBB header files and binaries into your CMake-aware project.\n * A source package is also available to download from the release page via the \"Source code\" link. In addition, it can be cloned from the repository by ``git clone https://github.com/01org/tbb.git``. The main purpose of the source package integration is to allow you to do a custom build of the Intel TBB library from the source files and then build that into your CMake-aware project.\n\nThere are four types of CMake modules that can be used to integrate Intel TBB: `TBBConfig`, `TBBGet`, `TBBMakeConfig` and `TBBBuild`. See `Technical documentation for CMake modules`_ section for additional details.\n\nBinary package integration\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe following use case is valid for packages starting from Intel TBB 2017 U7:\n\n* Download package manually and make integration.\n\n Pre-condition: Location of TBBConfig.cmake is available via ``TBB_DIR`` or ``CMAKE_PREFIX_PATH`` contains path to Intel TBB root.\n\n CMake code for integration:\n\n  .. code:: cmake\n\n   find_package(TBB <options>)\n\nThe following use case is valid for all Intel TBB 2017 packages.\n\n* Download package using TBBGet_ and make integration.\n\n Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)\n   tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\nSource package integration\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n* Build Intel TBB from existing source files using TBBBuild_ and make integration.\n\n Pre-condition: Intel TBB source code is available via <tbb_root> and Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)\n   tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\n* Download Intel TBB source files using TBBGet_, build it using TBBBuild_ and make integration.\n\n Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)\n   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)\n   tbb_get(TBB_ROOT tbb_root SOURCE_CODE)\n   tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\nTutorials: Intel TBB integration using CMake\n--------------------------------------------\nBinary Intel TBB integration to the sub_string_finder sample (Windows* OS)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn this example, we will integrate binary Intel TBB package into the sub_string_finder sample on Windows* OS (Microsoft* Visual Studio).\nThis example is also applicable for other platforms with slight changes.\nPlace holders <version> and <date> should be replaced with the actual values for the Intel TBB package being used. The example is written for `CMake 3.7.1`.\n\nPrecondition:\n  * `Microsoft* Visual Studio 11` or higher.\n  * `CMake 3.0.0` or higher.\n\n#. Download the latest binary package for Windows from `this page <https://github.com/01org/tbb/releases/latest>`_ and unpack it to the directory ``C:\\demo_tbb_cmake``.\n#. In the directory ``C:\\demo_tbb_cmake\\tbb<version>_<date>oss\\examples\\GettingStarted\\sub_string_finder`` create ``CMakeLists.txt`` file with the following content:\n    .. code:: cmake\n\n        cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)\n\n        project(sub_string_finder CXX)\n        add_executable(sub_string_finder sub_string_finder.cpp)\n\n        # find_package will search for available TBBConfig using variables CMAKE_PREFIX_PATH and TBB_DIR.\n        find_package(TBB REQUIRED tbb)\n\n        # Link Intel TBB imported targets to the executable;\n        # \"TBB::tbb\" can be used instead of \"${TBB_IMPORTED_TARGETS}\".\n        target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})\n#. Run CMake GUI and:\n    * Fill the following fields (you can use the buttons ``Browse Source...`` and ``Browse Build...`` accordingly)\n\n     * Where is the source code: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder``\n     * Where to build the binaries: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build``\n\n    * Add new cache entry using button ``Add Entry`` to let CMake know where to search for TBBConfig:\n\n     * Name: ``CMAKE_PREFIX_PATH``\n     * Type: ``PATH``\n     * Value: ``C:/demo_tbb_cmake/tbb<version>_<date>oss``\n\n    * Push the button ``Generate`` and choose a proper generator for your Microsoft* Visual Studio version.\n#. Now you can open the generated solution ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build/sub_string_finder.sln`` in your Microsoft* Visual Studio and build it.\n\nSource code integration of Intel TBB to the sub_string_finder sample (Linux* OS)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn this example, we will build Intel TBB from source code with enabled Community Preview Features and link the sub_string_finder sample with the built library.\nThis example is also applicable for other platforms with slight changes.\n\nPrecondition:\n  * `CMake 3.0.0` or higher.\n  * `Git` (to clone the Intel TBB repository from GitHub)\n\n#. Create the directory ``~/demo_tbb_cmake``, go to the created directory and clone the Intel TBB repository there:\n    ``mkdir ~/demo_tbb_cmake ; cd ~/demo_tbb_cmake ; git clone https://github.com/01org/tbb.git``\n#. In the directory ``~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder`` create ``CMakeLists.txt`` file with following content:\n    .. code:: cmake\n\n     cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)\n\n     project(sub_string_finder CXX)\n     add_executable(sub_string_finder sub_string_finder.cpp)\n\n     include(${TBB_ROOT}/cmake/TBBBuild.cmake)\n\n     # Build Intel TBB with enabled Community Preview Features (CPF).\n     tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1)\n\n     find_package(TBB REQUIRED tbb_preview)\n\n     # Link Intel TBB imported targets to the executable;\n     # \"TBB::tbb_preview\" can be used instead of \"${TBB_IMPORTED_TARGETS}\".\n     target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})\n#. Create a build directory for the sub_string_finder sample to perform build out of source, go to the created directory\n    ``mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build ; cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build``\n#. Run CMake to prepare Makefile for the sub_string_finder sample and provide Intel TBB location (root) where to perform build:\n    ``cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..``\n#. Make an executable and run it:\n    ``make ; ./sub_string_finder``\n\nTechnical documentation for CMake modules\n-----------------------------------------\nTBBConfig\n^^^^^^^^^\n\nConfiguration module for ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library.\n\nHow to use this module in your CMake project:\n #. Add location of Intel TBB (root) to `CMAKE_PREFIX_PATH <https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html>`_\n    or specify location of TBBConfig.cmake in ``TBB_DIR``.\n #. Use `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ to configure Intel TBB.\n #. Use provided variables and/or imported targets (described below) to work with Intel TBB.\n\nIntel TBB components can be passed to `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_\nafter keyword ``COMPONENTS`` or ``REQUIRED``.\nUse basic names of components (``tbb``, ``tbbmalloc``, ``tbb_preview``, etc.).\n\nIf components are not specified then default are used: ``tbb``, ``tbbmalloc`` and ``tbbmalloc_proxy``.\n\nIf ``tbbmalloc_proxy`` is requested, ``tbbmalloc`` component will also be added and set as dependency for ``tbbmalloc_proxy``.\n\nTBBConfig creates `imported targets <https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#imported-targets>`_ as\nshared libraries using the following format: ``TBB::<component>`` (for example, ``TBB::tbb``, ``TBB::tbbmalloc``).\n\nVariables set during Intel TBB configuration:\n\n=========================  ================================================\n         Variable                            Description\n=========================  ================================================\n``TBB_FOUND``              Intel TBB library is found\n``TBB_<component>_FOUND``  specific Intel TBB component is found\n``TBB_IMPORTED_TARGETS``   all created Intel TBB imported targets\n``TBB_VERSION``            Intel TBB version (format: ``<major>.<minor>``)\n``TBB_INTERFACE_VERSION``  Intel TBB interface version\n=========================  ================================================\n\nTBBGet\n^^^^^^\n\nModule for getting ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from `GitHub <https://github.com/01org/tbb>`_.\n\nProvides the following functions:\n ``tbb_get(TBB_ROOT <variable> [RELEASE_TAG <release_tag>|LATEST] [SAVE_TO <path>] [SYSTEM_NAME Linux|Windows|Darwin] [CONFIG_DIR <variable> | SOURCE_CODE])``\n  downloads Intel TBB from GitHub and creates TBBConfig for the downloaded binary package if there is no TBBConfig.\n\n  ====================================  ====================================\n                     Parameter                       Description\n  ====================================  ====================================\n  ``TBB_ROOT <variable>``               a variable to save Intel TBB root in, ``<variable>-NOTFOUND`` will be provided in case ``tbb_get`` is unsuccessful\n  ``RELEASE_TAG <release_tag>|LATEST``  Intel TBB release tag to be downloaded (for example, ``2017_U6``), ``LATEST`` is used by default\n  ``SAVE_TO <path>``                    path to location at which to unpack downloaded Intel TBB, ``${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded`` is used by default\n  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name to download a binary package for,\n                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default\n  ``CONFIG_DIR <variable>``             a variable to save location of TBBConfig.cmake and TBBConfigVersion.cmake. Ignored if ``SOURCE_CODE`` specified\n  ``SOURCE_CODE``                       flag to get Intel TBB source code (instead of binary package)\n  ====================================  ====================================\n\nTBBMakeConfig\n^^^^^^^^^^^^^\n\nModule for making TBBConfig in ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` binary package.\n\nThis module is to be used for packages that do not have TBBConfig.\n\nProvides the following functions:\n ``tbb_make_config(TBB_ROOT <path> CONFIG_DIR <variable> [SYSTEM_NAME Linux|Windows|Darwin])``\n  creates CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) for Intel TBB binary package.\n\n  ====================================  ====================================\n                     Parameter                       Description\n  ====================================  ====================================\n  ``TBB_ROOT <variable>``               path to Intel TBB root\n  ``CONFIG_DIR <variable>``             a variable to store location of the created configuration files\n  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name of the binary Intel TBB package,\n                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default\n  ====================================  ====================================\n\nTBBBuild\n^^^^^^^^\n\nModule for building ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from the source code.\n\nProvides the following functions:\n ``tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR <variable> [MAKE_ARGS <custom_make_arguments>])``\n  builds Intel TBB from source code using the ``Makefile``, creates and provides the location of the CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) .\n\n  =====================================  ====================================\n                Parameter                             Description\n  =====================================  ====================================\n  ``TBB_ROOT <variable>``                path to Intel TBB root\n  ``CONFIG_DIR <variable>``              a variable to store location of the created configuration files,\n                                         ``<variable>-NOTFOUND`` will be provided in case ``tbb_build`` is unsuccessful\n  ``MAKE_ARGS <custom_make_arguments>``  custom arguments to be passed to ``make`` tool.\n\n                                         The following arguments are always passed with automatically detected values to\n                                         ``make`` tool if they are not redefined in ``<custom_make_arguments>``:\n\n                                           - ``compiler=<compiler>``\n                                           - ``tbb_build_dir=<tbb_build_dir>``\n                                           - ``tbb_build_prefix=<tbb_build_prefix>``\n                                           - ``-j<n>``\n  =====================================  ====================================\n\n\n------------\n\nIntel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.\n\n``*`` Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/TBBBuild.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#\n# Usage:\n#  include(TBBBuild.cmake)\n#  tbb_build(ROOT <tbb_root> MAKE_ARGS <arg1> [... <argN>])\n#  find_package(TBB <options>)\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\n##\n# Builds Intel TBB.\n#\n# Parameters:\n#  TBB_ROOT   <directory> - path to Intel TBB root directory (with sources);\n#  MAKE_ARGS  <list>      - user-defined arguments to be passed to make-tool;\n#  CONFIG_DIR <variable>  - store location of the created TBBConfig if the build was ok, store <variable>-NOTFOUND otherwise.\n#\nfunction(tbb_build)\n    # NOTE: internal function are used to hide them from user.\n\n    ##\n    # Provides arguments for make-command to build Intel TBB.\n    #\n    # Following arguments are provided automatically if they are not defined by user:\n    #  compiler=<value>\n    #  tbb_build_dir=<value>\n    #  tbb_build_prefix=<value>\n    #  -j<n>\n    #\n    # Parameters:\n    #  USER_DEFINED_ARGS <list> - list of user-defined arguments;\n    #  RESULT <variable> - resulting list of 'make' arguments.\n    #\n    function(tbb_get_make_args)\n        set(oneValueArgs RESULT)\n        set(multiValueArgs USER_DEFINED_ARGS)\n        cmake_parse_arguments(tbb_GMA \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n        set(result ${tbb_GMA_USER_DEFINED_ARGS})\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"compiler=\")\n            # TODO: add other supported compilers.\n            if (CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\")\n                set(compiler gcc)\n            elseif (CMAKE_CXX_COMPILER_ID STREQUAL \"Intel\")\n                set(compiler icc)\n                if (CMAKE_SYSTEM_NAME MATCHES \"Windows\")\n                    set(compiler icl)\n                endif()\n            elseif (MSVC)\n                set(compiler cl)\n            elseif (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n                set(compiler clang)\n            endif()\n\n            set(result \"compiler=${compiler}\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"tbb_build_dir=\")\n            set(result \"tbb_build_dir=${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"tbb_build_prefix=\")\n            set(result \"tbb_build_prefix=tbb_cmake_build_subdir\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"(;|^) *\\\\-j[0-9]* *(;|$)\")\n            include(ProcessorCount)\n            ProcessorCount(num_of_cores)\n            if (NOT num_of_cores EQUAL 0)\n                set(result \"-j${num_of_cores}\" ${result})\n            endif()\n        endif()\n\n        if (CMAKE_SYSTEM_NAME MATCHES \"Android\")\n            set(result target=android ${result})\n        endif()\n\n        set(${tbb_GMA_RESULT} ${result} PARENT_SCOPE)\n    endfunction()\n\n    ##\n    # Provides release and debug directories basing on 'make' arguments.\n    #\n    # Following 'make' arguments are parsed: tbb_build_dir, tbb_build_prefix\n    #\n    # Parameters:\n    #  MAKE_ARGS   <list>     - 'make' arguments (tbb_build_dir and tbb_build_prefix are required)\n    #  RELEASE_DIR <variable> - store normalized (CMake) path to release directory\n    #  DEBUG_DIR   <variable> - store normalized (CMake) path to debug directory\n    #\n    function(tbb_get_build_paths_from_make_args)\n        set(oneValueArgs RELEASE_DIR DEBUG_DIR)\n        set(multiValueArgs MAKE_ARGS)\n        cmake_parse_arguments(tbb_GBPFMA \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n        foreach(arg ${tbb_GBPFMA_MAKE_ARGS})\n            if (arg MATCHES \"tbb_build_dir=\")\n                string(REPLACE \"tbb_build_dir=\" \"\" tbb_build_dir \"${arg}\")\n            elseif (arg MATCHES \"tbb_build_prefix=\")\n                string(REPLACE \"tbb_build_prefix=\" \"\" tbb_build_prefix \"${arg}\")\n            endif()\n        endforeach()\n\n        set(tbb_release_dir \"${tbb_build_dir}/${tbb_build_prefix}_release\")\n        set(tbb_debug_dir \"${tbb_build_dir}/${tbb_build_prefix}_debug\")\n\n        file(TO_CMAKE_PATH \"${tbb_release_dir}\" tbb_release_dir)\n        file(TO_CMAKE_PATH \"${tbb_debug_dir}\" tbb_debug_dir)\n\n        set(${tbb_GBPFMA_RELEASE_DIR} ${tbb_release_dir} PARENT_SCOPE)\n        set(${tbb_GBPFMA_DEBUG_DIR} ${tbb_debug_dir} PARENT_SCOPE)\n    endfunction()\n\n    # -------------------- #\n    # Function entry point #\n    # -------------------- #\n    set(oneValueArgs TBB_ROOT CONFIG_DIR)\n    set(multiValueArgs MAKE_ARGS)\n    cmake_parse_arguments(tbb_build \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    if (NOT EXISTS \"${tbb_build_TBB_ROOT}/Makefile\" OR NOT EXISTS \"${tbb_build_TBB_ROOT}/src\")\n        message(STATUS \"Intel TBB can not be built: Makefile or src directory was not found in ${tbb_build_TBB_ROOT}\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    set(make_tool_name make)\n    if (CMAKE_SYSTEM_NAME MATCHES \"Windows\")\n        set(make_tool_name gmake)\n    elseif (CMAKE_SYSTEM_NAME MATCHES \"Android\")\n        set(make_tool_name ndk-build)\n    endif()\n\n    find_program(TBB_MAKE_TOOL ${make_tool_name} DOC \"Make-tool to build Intel TBB.\")\n    mark_as_advanced(TBB_MAKE_TOOL)\n\n    if (NOT TBB_MAKE_TOOL)\n        message(STATUS \"Intel TBB can not be built: required make-tool (${make_tool_name}) was not found\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    tbb_get_make_args(USER_DEFINED_ARGS ${tbb_build_MAKE_ARGS} RESULT tbb_make_args)\n\n    set(tbb_build_cmd ${TBB_MAKE_TOOL} ${tbb_make_args})\n\n    string(REPLACE \";\" \" \" tbb_build_cmd_str \"${tbb_build_cmd}\")\n    message(STATUS \"Building Intel TBB: ${tbb_build_cmd_str}\")\n    execute_process(COMMAND ${tbb_build_cmd}\n                    WORKING_DIRECTORY ${tbb_build_TBB_ROOT}\n                    RESULT_VARIABLE tbb_build_result\n                    ERROR_VARIABLE tbb_build_error_output\n                    OUTPUT_QUIET)\n\n    if (NOT tbb_build_result EQUAL 0)\n        message(STATUS \"Building is unsuccessful (${tbb_build_result}): ${tbb_build_error_output}\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    tbb_get_build_paths_from_make_args(MAKE_ARGS ${tbb_make_args}\n                                       RELEASE_DIR tbb_release_dir\n                                       DEBUG_DIR tbb_debug_dir)\n\n    include(${_tbb_cmake_module_path}/TBBMakeConfig.cmake)\n    tbb_make_config(TBB_ROOT ${tbb_build_TBB_ROOT}\n                    SYSTEM_NAME ${CMAKE_SYSTEM_NAME}\n                    CONFIG_DIR tbb_config_dir\n                    CONFIG_FOR_SOURCE\n                    TBB_RELEASE_DIR ${tbb_release_dir}\n                    TBB_DEBUG_DIR ${tbb_debug_dir})\n\n    set(${tbb_build_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/TBBGet.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\n##\n# Downloads file.\n#\n# Parameters:\n#  URL     <url>      - URL to download data from;\n#  SAVE_AS <filename> - filename there to save downloaded data;\n#  INFO    <string>   - text description of content to be downloaded;\n#                       will be printed as message in format is \"Downloading <INFO>: <URL>;\n#  FORCE              - option to delete local file from SAVE_AS if it exists;\n#\nfunction(_tbb_download_file)\n    set(options FORCE)\n    set(oneValueArgs URL RELEASE SAVE_AS INFO)\n    cmake_parse_arguments(tbb_df \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    if (tbb_df_FORCE AND EXISTS \"${tbb_df_SAVE_AS}\")\n        file(REMOVE ${tbb_df_SAVE_AS})\n    endif()\n\n    if (NOT EXISTS \"${tbb_df_SAVE_AS}\")\n        set(_show_progress)\n        if (TBB_DOWNLOADING_PROGRESS)\n            set(_show_progress SHOW_PROGRESS)\n        endif()\n\n        message(STATUS \"Downloading ${tbb_df_INFO}: ${tbb_df_URL}\")\n        file(DOWNLOAD ${tbb_df_URL} ${tbb_df_SAVE_AS} ${_show_progress} STATUS download_status)\n\n        list(GET download_status 0 download_status_num)\n        if (NOT download_status_num EQUAL 0)\n            message(STATUS \"Unsuccessful downloading: ${download_status}\")\n            file(REMOVE ${tbb_df_SAVE_AS})\n            return()\n        endif()\n    else()\n        message(STATUS \"Needed file was found locally ${tbb_df_SAVE_AS}. Remove it if you still want to download a new one\")\n    endif()\nendfunction()\n\n##\n# Checks if specified Intel TBB release is available on GitHub.\n#\n# tbb_check_git_release(<release> <result>)\n# Parameters:\n#  <release_tag> - release to be checked;\n#  <result>  - store result (TRUE/FALSE).\n#\nfunction(_tbb_check_git_release_tag _tbb_release_tag _tbb_release_tag_avail)\n    if (_tbb_release_tag STREQUAL LATEST)\n        set(${_tbb_release_tag_avail} TRUE PARENT_SCOPE)\n        return()\n    endif()\n\n    set(tbb_releases_file \"${CMAKE_CURRENT_BINARY_DIR}/tbb_releases.json\")\n\n    _tbb_download_file(URL     \"${tbb_github_api}/releases\"\n                       SAVE_AS ${tbb_releases_file}\n                       INFO    \"information from GitHub about Intel TBB releases\"\n                       FORCE)\n\n    if (NOT EXISTS \"${tbb_releases_file}\")\n        set(${_tbb_release_tag_avail} FALSE PARENT_SCOPE)\n        return()\n    endif()\n\n    file(READ ${tbb_releases_file} tbb_releases)\n\n    string(REPLACE \"\\\"\" \"\" tbb_releases ${tbb_releases})\n    string(REGEX MATCHALL \"tag_name: *([A-Za-z0-9_\\\\.]+)\" tbb_releases ${tbb_releases})\n\n    set(_release_available FALSE)\n    foreach(tbb_rel ${tbb_releases})\n        string(REGEX REPLACE \"tag_name: *\" \"\" tbb_rel_cut ${tbb_rel})\n        list(REMOVE_ITEM tbb_releases ${tbb_rel})\n        list(APPEND tbb_releases ${tbb_rel_cut})\n        if (_tbb_release_tag STREQUAL tbb_rel_cut)\n            set(_release_available TRUE)\n            break()\n        endif()\n    endforeach()\n\n    if (NOT _release_available)\n        string(REPLACE \";\" \", \" tbb_releases_str \"${tbb_releases}\")\n        message(STATUS \"Requested release tag ${_tbb_release_tag} is not available. Available Intel TBB release tags: ${tbb_releases_str}\")\n    endif()\n\n    set(${_tbb_release_tag_avail} ${_release_available} PARENT_SCOPE)\nendfunction()\n\n##\n# Compares two Intel TBB releases and provides result\n# TRUE if the first release is less than the second, FALSE otherwise.\n#\n# tbb_is_release_less(<rel1> <rel2> <result>)\n#\nfunction(_tbb_is_release_less rel1 rel2 result)\n    # Convert release to numeric representation to compare it using \"if\" with VERSION_LESS.\n    string(REGEX REPLACE \"[A-Za-z]\" \"\" rel1 \"${rel1}\")\n    string(REPLACE \"_\" \".\" rel1 \"${rel1}\")\n    string(REGEX REPLACE \"[A-Za-z]\" \"\" rel2 \"${rel2}\")\n    string(REPLACE \"_\" \".\" rel2 \"${rel2}\")\n\n    if (${rel1} VERSION_LESS ${rel2})\n        set(${result} TRUE PARENT_SCOPE)\n        return()\n    endif()\n\n    set(${result} FALSE PARENT_SCOPE)\nendfunction()\n\n##\n# Finds exact URL to download Intel TBB basing on provided parameters.\n#\n# Usage:\n#  _tbb_get_url(URL <var_to_save_url> RELEASE_TAG <release_tag|LATEST> OS <os> [SOURCE_CODE])\n#\nfunction(_tbb_get_url)\n    set(oneValueArgs URL RELEASE_TAG OS)\n    set(options SOURCE_CODE)\n    cmake_parse_arguments(tbb_get_url \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_github_api \"https://api.github.com/repos/01org/tbb\")\n\n    _tbb_check_git_release_tag(${tbb_get_url_RELEASE_TAG} tbb_release_available)\n    if (NOT tbb_release_available)\n        set(${tbb_download_FULL_PATH} ${tbb_download_FULL_PATH}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)\n        set(tbb_rel_info_api_url \"${tbb_github_api}/releases/latest\")\n    else()\n        set(tbb_rel_info_api_url \"${tbb_github_api}/releases/tags/${tbb_get_url_RELEASE_TAG}\")\n    endif()\n\n    set(tbb_release_info_file \"${CMAKE_CURRENT_BINARY_DIR}/tbb_${tbb_get_url_RELEASE_TAG}_info.json\")\n\n    _tbb_download_file(URL     ${tbb_rel_info_api_url}\n                       SAVE_AS ${tbb_release_info_file}\n                       INFO    \"information from GitHub about packages for Intel TBB ${tbb_get_url_RELEASE_TAG}\"\n                       FORCE)\n\n    if (NOT EXISTS \"${tbb_release_info_file}\")\n        set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    file(STRINGS ${tbb_release_info_file} tbb_release_info)\n\n    if (tbb_get_url_SOURCE_CODE)\n        # Find name of the latest release to get link to source archive.\n        if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)\n            string(REPLACE \"\\\"\" \"\" tbb_release_info ${tbb_release_info})\n            string(REGEX REPLACE \".*tag_name: *([A-Za-z0-9_\\\\.]+).*\" \"\\\\1\" tbb_get_url_RELEASE_TAG \"${tbb_release_info}\")\n        endif()\n\n        set(${tbb_get_url_URL} \"https://github.com/01org/tbb/archive/${tbb_get_url_RELEASE_TAG}.tar.gz\" PARENT_SCOPE)\n    else()\n        if (tbb_get_url_OS MATCHES \"Linux\")\n            set(tbb_lib_archive_suffix lin.tgz)\n        elseif (tbb_get_url_OS MATCHES \"Windows\")\n            set(tbb_lib_archive_suffix win.zip)\n        elseif (tbb_get_url_OS MATCHES \"Darwin\")\n            set(tbb_lib_archive_suffix mac.tgz)\n\n            # Since 2017_U4 release archive for Apple has suffix \"mac.tgz\" instead of \"osx.tgz\".\n            if (NOT tbb_get_url_RELEASE_TAG STREQUAL \"LATEST\")\n                _tbb_is_release_less(${tbb_get_url_RELEASE_TAG} 2017_U4 release_less)\n                if (release_less)\n                    set(tbb_lib_archive_suffix osx.tgz)\n                endif()\n            endif()\n        elseif (tbb_get_url_OS MATCHES \"Android\")\n            set(tbb_lib_archive_suffix and.tgz)\n        else()\n            message(STATUS \"Currently prebuilt Intel TBB is not available for your OS (${tbb_get_url_OS})\")\n            set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)\n            return()\n        endif()\n\n        string(REGEX REPLACE \".*(https.*oss_${tbb_lib_archive_suffix}).*\" \"\\\\1\" tbb_bin_url \"${tbb_release_info}\")\n\n        set(${tbb_get_url_URL} ${tbb_bin_url} PARENT_SCOPE)\n    endif()\nendfunction()\n\nfunction(tbb_get)\n    set(oneValueArgs RELEASE_TAG SYSTEM_NAME SAVE_TO TBB_ROOT CONFIG_DIR)\n    set(options SOURCE_CODE)\n    cmake_parse_arguments(tbb_get \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_os ${CMAKE_SYSTEM_NAME})\n    if (tbb_get_SYSTEM_NAME)\n        set(tbb_os ${tbb_get_SYSTEM_NAME})\n    endif()\n\n    set(tbb_release_tag LATEST)\n    if (tbb_get_RELEASE_TAG)\n        set(tbb_release_tag ${tbb_get_RELEASE_TAG})\n    endif()\n\n    set(tbb_save_to ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded)\n    if (tbb_get_SAVE_TO)\n        set(tbb_save_to ${tbb_get_SAVE_TO})\n    endif()\n\n    if (tbb_get_SOURCE_CODE)\n        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os} SOURCE_CODE)\n    else()\n        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os})\n    endif()\n\n    if (NOT tbb_url)\n        message(STATUS \"URL to download Intel TBB has not been found\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(filename ${tbb_url} NAME)\n    set(local_file \"${CMAKE_CURRENT_BINARY_DIR}/${filename}\")\n\n    _tbb_download_file(URL     ${tbb_url}\n                       SAVE_AS ${local_file}\n                       INFO    \"Intel TBB library\")\n\n    if (NOT EXISTS \"${local_file}\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(subdir_name ${filename} NAME_WE)\n    file(MAKE_DIRECTORY ${tbb_save_to}/${subdir_name})\n    if (NOT EXISTS \"${tbb_save_to}/${subdir_name}\")\n        message(STATUS \"${tbb_save_to}/${subdir_name} can not be created\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    message(STATUS \"Unpacking ${local_file} to ${tbb_save_to}/${subdir_name}\")\n    execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${local_file}\n                    WORKING_DIRECTORY ${tbb_save_to}/${subdir_name}\n                    RESULT_VARIABLE unpacking_result)\n\n    if (NOT unpacking_result EQUAL 0)\n        message(STATUS \"Unsuccessful unpacking: ${unpacking_result}\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    file(GLOB_RECURSE tbb_h ${tbb_save_to}/${subdir_name}/*/include/tbb/tbb.h)\n    list(GET tbb_h 0 tbb_h)\n\n    if (NOT EXISTS \"${tbb_h}\")\n        message(STATUS \"tbb/tbb.h has not been found in the downloaded package\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(tbb_root \"${tbb_h}\" PATH)\n    get_filename_component(tbb_root \"${tbb_root}\" PATH)\n    get_filename_component(tbb_root \"${tbb_root}\" PATH)\n\n    if (NOT tbb_get_SOURCE_CODE)\n        set(tbb_config_dir ${tbb_root}/cmake)\n\n        if (NOT EXISTS \"${tbb_config_dir}\")\n            tbb_make_config(TBB_ROOT ${tbb_root} CONFIG_DIR tbb_config_dir)\n        endif()\n\n        set(${tbb_get_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\n    endif()\n\n    set(${tbb_get_TBB_ROOT} ${tbb_root} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/TBBMakeConfig.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#\n# Usage:\n#   include(TBBMakeConfig.cmake)\n#   tbb_make_config(TBB_ROOT <tbb_root> SYSTEM_NAME <system_name> CONFIG_DIR <var_to_store_config_dir> [SAVE_TO] [CONFIG_FOR_SOURCE TBB_RELEASE_DIR <tbb_release_dir> TBB_DEBUG_DIR <tbb_debug_dir>])\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\nfunction(tbb_make_config)\n    set(oneValueArgs TBB_ROOT SYSTEM_NAME CONFIG_DIR SAVE_TO TBB_RELEASE_DIR TBB_DEBUG_DIR)\n    set(options CONFIG_FOR_SOURCE)\n    cmake_parse_arguments(tbb_MK \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_system_name ${CMAKE_SYSTEM_NAME})\n    if (tbb_MK_SYSTEM_NAME)\n        set(tbb_system_name ${tbb_MK_SYSTEM_NAME})\n    endif()\n\n    set(tbb_config_dir ${tbb_MK_TBB_ROOT}/cmake)\n    if (tbb_MK_SAVE_TO)\n        set(tbb_config_dir ${tbb_MK_SAVE_TO})\n    endif()\n\n    file(MAKE_DIRECTORY ${tbb_config_dir})\n\n    set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy)\n\n    if (tbb_MK_CONFIG_FOR_SOURCE)\n        set(TBB_RELEASE_DIR ${tbb_MK_TBB_RELEASE_DIR})\n        set(TBB_DEBUG_DIR ${tbb_MK_TBB_DEBUG_DIR})\n    endif()\n\n    if (tbb_system_name STREQUAL \"Linux\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \"ia32\")\n        set(TBB_X64_SUBDIR \"intel64\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"so.2\")\n\n        # Note: multiline variable\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"if (CMAKE_CXX_COMPILER_LOADED)\n    set(_tbb_compiler_id \\${CMAKE_CXX_COMPILER_ID})\n    set(_tbb_compiler_ver \\${CMAKE_CXX_COMPILER_VERSION})\nelseif (CMAKE_C_COMPILER_LOADED)\n    set(_tbb_compiler_id \\${CMAKE_C_COMPILER_ID})\n    set(_tbb_compiler_ver \\${CMAKE_C_COMPILER_VERSION})\nendif()\n\n# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory.\nif (NOT _tbb_compiler_id STREQUAL \\\"GNU\\\")\n    execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET)\n    string(REGEX REPLACE \\\".*gcc.*([0-9]+\\\\\\\\.[0-9]+)\\\\\\\\.[0-9]+.*\\\" \\\"\\\\\\\\1\\\" _tbb_compiler_ver \\\"\\${_tbb_gcc_ver_output}\\\")\n    if (NOT _tbb_compiler_ver)\n        message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only environment with available 'gcc'\\\")\n    endif()\n    unset(_tbb_gcc_ver_output)\nendif()\n\nset(_tbb_compiler_subdir gcc4.1)\nforeach (_tbb_gcc_version 4.1 4.4 4.7)\n    if (NOT _tbb_compiler_ver VERSION_LESS \\${_tbb_gcc_version})\n        set(_tbb_compiler_subdir gcc\\${_tbb_gcc_version})\n    endif()\nendforeach()\n\nunset(_tbb_compiler_id)\nunset(_tbb_compiler_ver)\")\n\n    elseif (tbb_system_name STREQUAL \"Windows\")\n        set(TBB_SHARED_LIB_DIR \"bin\")\n        set(TBB_X32_SUBDIR \"ia32\")\n        set(TBB_X64_SUBDIR \"intel64\")\n        set(TBB_LIB_PREFIX \"\")\n        set(TBB_LIB_EXT \"dll\")\n\n        # Note: multiline variable\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"if (NOT MSVC)\n    message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only in the project with MSVC\\\")\nendif()\n\n# Detect the most relevant MSVC subdirectory\nset(_tbb_msvc_1700_subdir vc11)\nset(_tbb_msvc_1800_subdir vc12)\nset(_tbb_msvc_1900_subdir vc14)\nset(_tbb_msvc_ver \\${MSVC_VERSION})\nif (MSVC_VERSION VERSION_LESS 1700)\n    message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only in the project with MSVC version 1700 (vc11) or higher\\\")\nelseif (MSVC_VERSION VERSION_GREATER 1900)\n    set(_tbb_msvc_ver 1900)\nendif()\nset(_tbb_compiler_subdir \\${_tbb_msvc_\\${_tbb_msvc_ver}_subdir})\nunset(_tbb_msvc_1700_subdir)\nunset(_tbb_msvc_1800_subdir)\nunset(_tbb_msvc_1900_subdir)\n\nif (WINDOWS_STORE)\n    set(_tbb_compiler_subdir \\${_tbb_compiler_subdir}_ui)\nendif()\")\n\n        if (tbb_MK_CONFIG_FOR_SOURCE)\n            set(TBB_IMPLIB_RELEASE \"\\nIMPORTED_IMPLIB_RELEASE \\\"${tbb_MK_TBB_RELEASE_DIR}/\\${_tbb_component}.lib\\\"\")\n            set(TBB_IMPLIB_DEBUG \"\\nIMPORTED_IMPLIB_DEBUG \\\"${tbb_MK_TBB_DEBUG_DIR}/\\${_tbb_component}_debug.lib\\\"\")\n        else()\n            # Note: multiline variable\n            set(TBB_IMPLIB \"\n                              IMPORTED_IMPLIB_RELEASE       \\\"\\${_tbb_root}/lib/\\${_tbb_arch_subdir}/\\${_tbb_compiler_subdir}/\\${_tbb_component}.lib\\\"\n                              IMPORTED_IMPLIB_DEBUG         \\\"\\${_tbb_root}/lib/\\${_tbb_arch_subdir}/\\${_tbb_compiler_subdir}/\\${_tbb_component}_debug.lib\\\"\")\n        endif()\n\n        # Note: multiline variable\n        # tbb/internal/_tbb_windef.h (included via tbb/tbb_stddef.h) does implicit linkage of some .lib files, use a special define to avoid it\n        set(TBB_COMPILE_DEFINITIONS \"\n                              INTERFACE_COMPILE_DEFINITIONS \\\"__TBB_NO_IMPLICIT_LINKAGE=1\\\"\")\n    elseif (tbb_system_name STREQUAL \"Darwin\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \".\")\n        set(TBB_X64_SUBDIR \".\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"dylib\")\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"set(_tbb_compiler_subdir .)\")\n    elseif (tbb_system_name STREQUAL \"Android\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \".\")\n        set(TBB_X64_SUBDIR \"x86_64\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"so\")\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"set(_tbb_compiler_subdir .)\")\n    else()\n        message(FATAL_ERROR \"Unsupported OS name: ${tbb_system_name}\")\n    endif()\n\n    file(READ \"${tbb_MK_TBB_ROOT}/include/tbb/tbb_stddef.h\" _tbb_stddef)\n    string(REGEX REPLACE \".*#define TBB_VERSION_MAJOR ([0-9]+).*\" \"\\\\1\" _tbb_ver_major \"${_tbb_stddef}\")\n    string(REGEX REPLACE \".*#define TBB_VERSION_MINOR ([0-9]+).*\" \"\\\\1\" _tbb_ver_minor \"${_tbb_stddef}\")\n    string(REGEX REPLACE \".*#define TBB_INTERFACE_VERSION ([0-9]+).*\" \"\\\\1\" TBB_INTERFACE_VERSION \"${_tbb_stddef}\")\n    set(TBB_VERSION \"${_tbb_ver_major}.${_tbb_ver_minor}\")\n\n    if (tbb_MK_CONFIG_FOR_SOURCE)\n        set(_tbb_config_template TBBConfigForSource.cmake.in)\n    else()\n        set(_tbb_config_template TBBConfig.cmake.in)\n    endif()\n    configure_file(${_tbb_cmake_module_path}/templates/${_tbb_config_template}   ${tbb_config_dir}/TBBConfig.cmake @ONLY)\n    configure_file(${_tbb_cmake_module_path}/templates/TBBConfigVersion.cmake.in ${tbb_config_dir}/TBBConfigVersion.cmake @ONLY)\n\n    set(${tbb_MK_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/tbb_config_generator.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nfunction(tbb_conf_gen_print_help)\n    message(\"Usage: cmake -DTBB_ROOT=<tbb_root> -DTBB_OS=Linux|Windows|Darwin [-DSAVE_TO=<path>] -P tbb_config_generator.cmake\")\nendfunction()\n\nif (NOT DEFINED TBB_ROOT)\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"Required parameter TBB_ROOT is not defined\")\nendif()\n\nif (NOT EXISTS \"${TBB_ROOT}\")\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"TBB_ROOT=${TBB_ROOT} does not exist\")\nendif()\n\nif (NOT DEFINED TBB_OS)\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"Required parameter TBB_OS is not defined\")\nendif()\n\nif (DEFINED SAVE_TO)\n    set(tbb_conf_gen_save_to_param SAVE_TO ${SAVE_TO})\nendif()\n\ninclude(${CMAKE_CURRENT_LIST_DIR}/TBBMakeConfig.cmake)\ntbb_make_config(TBB_ROOT ${TBB_ROOT} CONFIG_DIR tbb_config_dir SYSTEM_NAME ${TBB_OS} ${tbb_conf_gen_save_to_param})\n\nmessage(STATUS \"TBBConfig files were created in ${tbb_config_dir}\")\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/templates/TBBConfig.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.\n# Handling of TBB_VERSION is in TBBConfigVersion.cmake.\n\nif (NOT TBB_FIND_COMPONENTS)\n    set(TBB_FIND_COMPONENTS \"@TBB_DEFAULT_COMPONENTS@\")\n    foreach (_tbb_component ${TBB_FIND_COMPONENTS})\n        set(TBB_FIND_REQUIRED_${_tbb_component} 1)\n    endforeach()\nendif()\n\n# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc\nlist(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)\nif (NOT _tbbmalloc_proxy_ix EQUAL -1)\n    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)\n    if (_tbbmalloc_ix EQUAL -1)\n        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)\n        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})\n    endif()\nendif()\n\nset(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)\n\nget_filename_component(_tbb_root \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_tbb_root \"${_tbb_root}\" PATH)\n\nset(_tbb_x32_subdir @TBB_X32_SUBDIR@)\nset(_tbb_x64_subdir @TBB_X64_SUBDIR@)\n\nif (CMAKE_SIZEOF_VOID_P EQUAL 8)\n    set(_tbb_arch_subdir ${_tbb_x64_subdir})\nelse()\n    set(_tbb_arch_subdir ${_tbb_x32_subdir})\nendif()\n\n@TBB_CHOOSE_COMPILER_SUBDIR@\n\nget_filename_component(_tbb_lib_path \"${_tbb_root}/@TBB_SHARED_LIB_DIR@/${_tbb_arch_subdir}/${_tbb_compiler_subdir}\" ABSOLUTE)\n\nforeach (_tbb_component ${TBB_FIND_COMPONENTS})\n    set(_tbb_release_lib \"${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@\")\n    set(_tbb_debug_lib \"${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@\")\n\n    if (EXISTS \"${_tbb_release_lib}\" AND EXISTS \"${_tbb_debug_lib}\")\n        add_library(TBB::${_tbb_component} SHARED IMPORTED)\n        set_target_properties(TBB::${_tbb_component} PROPERTIES\n                              IMPORTED_CONFIGURATIONS \"RELEASE;DEBUG\"\n                              IMPORTED_LOCATION_RELEASE     \"${_tbb_release_lib}\"\n                              IMPORTED_LOCATION_DEBUG       \"${_tbb_debug_lib}\"\n                              INTERFACE_INCLUDE_DIRECTORIES \"${_tbb_root}/include\"@TBB_IMPLIB@@TBB_COMPILE_DEFINITIONS@)\n\n        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc\n        if (_tbb_component STREQUAL tbbmalloc_proxy)\n            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)\n        endif()\n\n        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})\n        set(TBB_${_tbb_component}_FOUND 1)\n    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})\n        message(FATAL_ERROR \"Missed required Intel TBB component: ${_tbb_component}\")\n    endif()\nendforeach()\n\nunset(_tbb_x32_subdir)\nunset(_tbb_x64_subdir)\nunset(_tbb_arch_subdir)\nunset(_tbb_compiler_subdir)\nunset(_tbbmalloc_proxy_ix)\nunset(_tbbmalloc_ix)\nunset(_tbb_lib_path)\nunset(_tbb_release_lib)\nunset(_tbb_debug_lib)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/templates/TBBConfigForSource.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.\n# Handling of TBB_VERSION is in TBBConfigVersion.cmake.\n\nif (NOT TBB_FIND_COMPONENTS)\n    set(TBB_FIND_COMPONENTS \"@TBB_DEFAULT_COMPONENTS@\")\n    foreach (_tbb_component ${TBB_FIND_COMPONENTS})\n        set(TBB_FIND_REQUIRED_${_tbb_component} 1)\n    endforeach()\nendif()\n\n# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc\nlist(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)\nif (NOT _tbbmalloc_proxy_ix EQUAL -1)\n    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)\n    if (_tbbmalloc_ix EQUAL -1)\n        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)\n        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})\n    endif()\nendif()\n\nset(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)\n\nget_filename_component(_tbb_root \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_tbb_root \"${_tbb_root}\" PATH)\n\nforeach (_tbb_component ${TBB_FIND_COMPONENTS})\n    set(_tbb_release_lib \"@TBB_RELEASE_DIR@/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@\")\n    set(_tbb_debug_lib \"@TBB_DEBUG_DIR@/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@\")\n\n    if (EXISTS \"${_tbb_release_lib}\" OR EXISTS \"${_tbb_debug_lib}\")\n        add_library(TBB::${_tbb_component} SHARED IMPORTED)\n        set_target_properties(TBB::${_tbb_component} PROPERTIES\n                              INTERFACE_INCLUDE_DIRECTORIES \"${_tbb_root}/include\"@TBB_COMPILE_DEFINITIONS@)\n\n\n        if (EXISTS \"${_tbb_release_lib}\")\n            set_target_properties(TBB::${_tbb_component} PROPERTIES\n                                  IMPORTED_LOCATION_RELEASE \"${_tbb_release_lib}\"@TBB_IMPLIB_RELEASE@)\n            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)\n        endif()\n\n        if (EXISTS \"${_tbb_debug_lib}\")\n            set_target_properties(TBB::${_tbb_component} PROPERTIES\n                                  IMPORTED_LOCATION_DEBUG \"${_tbb_debug_lib}\"@TBB_IMPLIB_DEBUG@)\n            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)\n        endif()\n\n        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc\n        if (_tbb_component STREQUAL tbbmalloc_proxy)\n            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)\n        endif()\n\n        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})\n        set(TBB_${_tbb_component}_FOUND 1)\n    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})\n        message(FATAL_ERROR \"Missed required Intel TBB component: ${_tbb_component}\")\n    endif()\nendforeach()\n\nunset(_tbbmalloc_proxy_ix)\nunset(_tbbmalloc_ix)\nunset(_tbb_lib_path)\nunset(_tbb_release_lib)\nunset(_tbb_debug_lib)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/cmake/templates/TBBConfigVersion.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nset(PACKAGE_VERSION @TBB_VERSION@)\n\nif (\"${PACKAGE_VERSION}\" VERSION_LESS \"${PACKAGE_FIND_VERSION}\")\n    set(PACKAGE_VERSION_COMPATIBLE FALSE)\nelse()\n    set(PACKAGE_VERSION_COMPATIBLE TRUE)\n    if (\"${PACKAGE_VERSION}\" VERSION_EQUAL \"${PACKAGE_FIND_VERSION}\")\n        set(PACKAGE_VERSION_EXACT TRUE)\n    endif()\nendif()\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/Release_Notes.txt",
    "content": "------------------------------------------------------------------------\nIntel(R) Threading Building Blocks - Release Notes\n                   Version 2018\n------------------------------------------------------------------------\n\n\nSystem Requirements\n-------------------\n\nIntel(R) Threading Building Blocks (Intel(R) TBB) is available\ncommercially (see http://software.intel.com/en-us/intel-tbb) as a\nbinary distribution, and in open source, in both source and binary\nforms (see http://threadingbuildingblocks.org).\n\nWhen built from source, Intel(R) TBB is intended to be highly portable\nand so supports a wide variety of operating systems and platforms (see\nhttp://threadingbuildingblocks.org for more details).\n\nBinary distributions, including commercial distributions, are validated\nand officially supported for the hardware, software, operating systems\nand compilers listed here.\n\nHardware - Recommended\n\n    Microsoft* Windows* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    Linux* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    macOS* Systems\n        Intel(R) Core(TM) processor family\n    Android* Systems\n        Intel(R) Atom(TM) processor family\n\nHardware - Supported\n\n    Intel(R) Pentium(R) 4 processor family\n    Intel(R) Xeon Phi(TM) coprocessor\n    Intel(R) Atom(TM) processor family\n    Non Intel(R) processors compatible with the above processors\n\nSoftware - Minimum Requirements\n\n    Supported operating system (see below)\n    Supported compiler (see below)\n\nSoftware - Recommended\n\n    Intel(R) Parallel Studio XE 2017, 2018\n    Intel(R) System Studio 2017, 2018\n\nSoftware - Supported Operating Systems\n\n    Systems with Microsoft* Windows* operating systems\n        Microsoft* Windows* 10\n        Microsoft* Windows* 8.1\n        Microsoft* Windows* 7 SP1\n        Microsoft* Windows* Server 2016\n        Microsoft* Windows* Server 2012 R2\n        Microsoft* Windows* Server 2008 R2 SP1\n        Windows* Embedded 10\n        Windows* Embedded 8.1\n    Systems with Linux* operating systems\n        CentOS 7.1\n        Debian* 8, 9\n        Fedora* 24, 25, 26\n        Intel(R) Cluster Ready\n        Red Hat* Enterprise Linux* 6, 7\n        SuSE* Linux* Enterprise Server 11, 12\n        Ubuntu* 14.04 LTS, 16.04 LTS, 17.04\n        WindRiver* Linux 8, 9\n        Yocto 2.2, 2.3\n    Systems with OS X* or macOS* operating systems\n        OS X* 10.10, 10.11\n        macOS* 10.12, 10.13\n    Systems with Android* operating systems\n        Android* 5.x, 6.x, 7.x, 8.x\n\nSoftware - Supported Compilers\n\n    Intel(R) C++ Compiler 16, 17 and 18 version\n    Microsoft* Visual C++ 12.0 (Microsoft* Visual Studio* 2013,\n        Windows* OS only)\n    Microsoft* Visual C++ 14.0 (Microsoft* Visual Studio* 2015,\n        Windows* OS only)\n    Microsoft* Visual C++ 14.1 (Microsoft* Visual Studio* 2017,\n        Windows* OS only)\n    Microsoft* Windows* Software Development Kit for Windows* 8.1\n    Microsoft* Windows* Software Development Kit for Windows* 10\n    For each supported Linux* operating system, the standard gcc\n        version provided with that operating system is supported\n            GNU Compilers (gcc) 4.1 - 7.1\n            GNU C Library (glibc) version 2.4 - 2.19\n    Xcode* 6.3 - 9.1\n    Android* NDK r10e - r16\n\nSoftware - Supported Performance Analysis Tools\n\n    Intel(R) VTune(TM) Amplifier XE 2017, 2018.\n    Intel(R) Inspector XE 2017, 2018.\n    Intel(R) Advisor XE 2017, 2018.\n\nKnown Issues\n------------\n\nBelow is the list of known issues in this release of\nIntel(R) Threading Building Blocks (Intel(R) TBB).\nSee the \"Known Issues\" appendix in the Intel(R) TBB Developer\nReference for notes applicable to multiple releases of Intel(R) TBB.\n\nLibrary Issues\n\n    - If you build Intel(R) TBB from sources with GCC 6, specify\n        the -flifetime-dse=1 option to prevent crashes at runtime,\n        or use Intel(R) TBB makefiles that automatically set this option.\n\n    - The current implementation of gfx_factory does not allow memory\n        buffer objects to be used concurrently. As a result, several\n        streaming nodes customized with gfx_factory cannot be connected\n        with each other directly.\n\n------------------------------------------------------------------------\n(C) 2018 Intel Corporation\n\nIntel, the Intel logo, Intel Core, Intel Atom, Xeon, Intel Xeon Phi and\nPentium are trademarks of Intel Corporation in the U.S. and/or other\ncountries.\n\n* Other names and brands may be claimed as the property of others.\n\nThird Party and Open Source Licenses\n\nContent of some examples or binaries may be covered by various open-source\nlicenses. See the index.html file in each respective folder for details.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00002.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on range concept</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on range concept </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>R</code> implementing the concept of range must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">R::R( <span class=\"keyword\">const</span> R&amp; ); </div>\n</div><!-- fragment --> Copy constructor</li>\n<li><div class=\"fragment\"><div class=\"line\">R::~R(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> R::is_divisible() <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> True if range can be partitioned into two subranges</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> R::empty() <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> True if range is empty</li>\n<li><div class=\"fragment\"><div class=\"line\">R::R( R&amp; r, split ); </div>\n</div><!-- fragment --> Split range <code>r</code> into two subranges. </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00004.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_for body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_for body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_for body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( <span class=\"keyword\">const</span> Body&amp; ); </div>\n</div><!-- fragment --> Copy constructor</li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( Range&amp; r ) <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> Function call operator applying the body to range <code>r</code>. </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00006.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_reduce body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_reduce body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_reduce body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( Body&amp;, split ); </div>\n</div><!-- fragment --> Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> </li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( Range&amp; r ); </div>\n</div><!-- fragment --> Function call operator applying body to range <code>r</code> and accumulating the result</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::join( Body&amp; b ); </div>\n</div><!-- fragment --> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00008.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_reduce anonymous function objects (lambda functions) </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>TO BE DOCUMENTED </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00010.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_scan body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_scan body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_scan body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( Body&amp;, split ); </div>\n</div><!-- fragment --> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately</li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( <span class=\"keyword\">const</span> Range&amp; r, pre_scan_tag ); </div>\n</div><!-- fragment --> Preprocess iterations for range <code>r</code> </li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( <span class=\"keyword\">const</span> Range&amp; r, final_scan_tag ); </div>\n</div><!-- fragment --> Do final processing for iterations of range <code>r</code> </li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::reverse_join( Body&amp; a ); </div>\n</div><!-- fragment --> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00012.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on iterators for parallel_sort</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on iterators for parallel_sort </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Requirements on the iterator type <code>It</code> and its value type <code>T</code> for <code>parallel_sort:</code> </p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> iter_swap( It a, It b ) </div>\n</div><!-- fragment --> Swaps the values of the elements the given iterators <code>a</code> and <code>b</code> are pointing to. <code>It</code> should be a random access iterator.</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> Compare::operator()( <span class=\"keyword\">const</span> T&amp; x, <span class=\"keyword\">const</span> T&amp; y ) </div>\n</div><!-- fragment --> True if x comes before y; </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00014.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>TBB concepts</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">TBB concepts </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).</p>\n<p>All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class=\"el\" href=\"a00002.html\">ranges</a>), while other ones must always be implemented by the user.</p>\n<p>TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:</p>\n<ul>\n<li><a class=\"el\" href=\"a00002.html\">Requirements on range concept</a></li>\n<li>parallel_do_body_req</li>\n<li><a class=\"el\" href=\"a00004.html\">Requirements on parallel_for body</a></li>\n<li><a class=\"el\" href=\"a00006.html\">Requirements on parallel_reduce body</a></li>\n<li><a class=\"el\" href=\"a00010.html\">Requirements on parallel_scan body</a></li>\n<li><a class=\"el\" href=\"a00012.html\">Requirements on iterators for parallel_sort</a> </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00016.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>__TBB_malloc_proxy_caller Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"a00278.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">__TBB_malloc_proxy_caller Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbbmalloc_proxy.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00017.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00017.html\">accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00377.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allows write access to elements and combines data access, locking, and garbage collection.  \n <a href=\"a00017.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00017.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\">\n<area href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \" alt=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor\" shape=\"rect\" coords=\"0,56,488,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a850178bbdcdbc4cf5955cab37eb8c42c\"></a>\ntypedef <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">value_type</a></td></tr>\n<tr class=\"memdesc:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa8ca5aef4ee14b7eddb64767b8cd5fda\"></a>\ntypedef const <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a></td></tr>\n<tr class=\"memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4e03905a33fbdafdb99113cc68d2bd4b\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab04f73bd4a4ca7df0dc91a7b4d66f987\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6299b523d2ae8e2613f1bc160ca99b85\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if result is empty. <br/></td></tr>\n<tr class=\"separator:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18390cb369369d72bdf7c867755b5190\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a> ()</td></tr>\n<tr class=\"memdesc:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to null. <br/></td></tr>\n<tr class=\"separator:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8adf04e33e7c8c876ba849f26807713a\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28fa9b9e6c35d7e80217e69a7afe1ee5\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b26d22d228cf0d8678c9b346c63752c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create empty result. <br/></td></tr>\n<tr class=\"separator:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc0c85a146c912b9a0f94a7695957c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy result after releasing the underlying reference. <br/></td></tr>\n<tr class=\"separator:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05b74d408d8cd7773f7b5edfef97da1b\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_writer</b> ()</td></tr>\n<tr class=\"separator:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9b96f45483ddbff95a95e8e666a8f28\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_node</b></td></tr>\n<tr class=\"separator:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5034084f595666b47734f99a6eaefa9f\"></a>\nhashcode_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash</b></td></tr>\n<tr class=\"separator:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</h3>\n\n<p>Allows write access to elements and combines data access, locking, and garbage collection. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00018.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00378.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a28b496c90f07e4557a6dfa5a8dd3f4e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28b496c90f07e4557a6dfa5a8dd3f4e1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a28b496c90f07e4557a6dfa5a8dd3f4e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00019.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00019.html\">aggregator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00397.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Basic aggregator interface.  \n <a href=\"a00019.html#details\">More...</a></p>\n\n<p><code>#include &lt;aggregator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00019.png\" usemap=\"#tbb::interface6::aggregator_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_map\" name=\"tbb::interface6::aggregator_map\">\n<area href=\"a00020.html\" alt=\"tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;\" shape=\"rect\" coords=\"0,0,335,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Body &gt; </td></tr>\n<tr class=\"memitem:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">execute</a> (const Body &amp;b)</td></tr>\n<tr class=\"memdesc:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.  <a href=\"#aa7cc924b6f0d17578d61fd9002f59f84\">More...</a><br/></td></tr>\n<tr class=\"separator:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Basic aggregator interface. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa7cc924b6f0d17578d61fd9002f59f84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::aggregator::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>BASIC INTERFACE: Enter a function for exclusive execution by the aggregator. </p>\n<p>The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00020.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator_ext&lt; handler_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00396.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_ext&lt; handler_type &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Aggregator base class and expert interface.  \n <a href=\"a00020.html#details\">More...</a></p>\n\n<p><code>#include &lt;aggregator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator_ext&lt; handler_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00020.png\" usemap=\"#tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\" name=\"tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8ae120a21264cc1ea0a9cfafaa0634e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ae120a21264cc1ea0a9cfafaa0634e4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_ext</b> (const handler_type &amp;h)</td></tr>\n<tr class=\"separator:a8ae120a21264cc1ea0a9cfafaa0634e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *op)</td></tr>\n<tr class=\"memdesc:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href=\"#ae55b16ec6af204aa00d6a716fccec9f7\">More...</a><br/></td></tr>\n<tr class=\"separator:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:ad376e5c31d10e885f33964592aa629d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> &amp;op)</td></tr>\n<tr class=\"separator:ad376e5c31d10e885f33964592aa629d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename handler_type&gt;<br/>\nclass tbb::interface6::aggregator_ext&lt; handler_type &gt;</h3>\n\n<p>Aggregator base class and expert interface. </p>\n<p>An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad376e5c31d10e885f33964592aa629d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename handler_type&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext</a>&lt; handler_type &gt;::execute_impl </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>op</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae55b16ec6af204aa00d6a716fccec9f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename handler_type&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext</a>&lt; handler_type &gt;::process </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td>\n          <td class=\"paramname\"><em>op</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. </p>\n<p>Details of user-made operations must be handled by user-provided handler </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00021.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator_operation Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00395.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_operation Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator_operation:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00021.png\" usemap=\"#tbb::interface6::aggregator_operation_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_operation_map\" name=\"tbb::interface6::aggregator_operation_map\">\n<area href=\"a00033.html\" alt=\"tbb::interface6::internal::basic_operation_base\" shape=\"rect\" coords=\"0,56,289,80\"/>\n<area href=\"a00032.html\" alt=\"tbb::interface6::internal::basic_operation&lt; Body &gt;\" shape=\"rect\" coords=\"0,112,289,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7f6e7d315f893b1b66d06ffdad12038e\"></a>\ntemplate&lt;typename handler_type &gt; </td></tr>\n<tr class=\"memitem:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>aggregator_ext</b></td></tr>\n<tr class=\"separator:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ac7edadfe74f475783f3b429904e7010a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::aggregator_operation::finish </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Call finish when done handling this operation. </p>\n<p>The operation will be released to its originating thread, and possibly deleted. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00022.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::aligned_space&lt; T, N &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00280.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::aligned_space&lt; T, N &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Block of space aligned sufficiently to construct an array T with N elements.  \n <a href=\"a00022.html#details\">More...</a></p>\n\n<p><code>#include &lt;aligned_space.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aefcd343548f92c6e738febedf1d75f74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aefcd343548f92c6e738febedf1d75f74\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">begin</a> () const </td></tr>\n<tr class=\"memdesc:aefcd343548f92c6e738febedf1d75f74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to beginning of array. <br/></td></tr>\n<tr class=\"separator:aefcd343548f92c6e738febedf1d75f74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2ec5fe3a8f1641884358740766fde34\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">end</a> () const </td></tr>\n<tr class=\"memdesc:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to one past last element in array. <br/></td></tr>\n<tr class=\"separator:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, size_t N = 1&gt;<br/>\nclass tbb::aligned_space&lt; T, N &gt;</h3>\n\n<p>Block of space aligned sufficiently to construct an array T with N elements. </p>\n<p>The elements are not constructed or destroyed by this class. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>aligned_space.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00023.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00023.html\">async_helpers</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00365.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9a483310f1b2e6cfd952906124a09ebb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a483310f1b2e6cfd952906124a09ebb\"></a>\ntypedef <a class=\"el\" href=\"a00025.html\">async_msg</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_type</b></td></tr>\n<tr class=\"separator:a9a483310f1b2e6cfd952906124a09ebb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcefe402ace161e17c974ae2dd3b458a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcefe402ace161e17c974ae2dd3b458a\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:abcefe402ace161e17c974ae2dd3b458a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a2236321141eea81b8367f8786f62c656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2236321141eea81b8367f8786f62c656\"></a>\nstatic const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:a2236321141eea81b8367f8786f62c656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4b81efe81c177c1fb61142c1655a340\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4b81efe81c177c1fb61142c1655a340\"></a>\nstatic void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (T &amp;t)</td></tr>\n<tr class=\"separator:ac4b81efe81c177c1fb61142c1655a340\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac43a4547e19a30fb2156eb7e59f22c61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac43a4547e19a30fb2156eb7e59f22c61\"></a>\nstatic const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (const void *p)</td></tr>\n<tr class=\"separator:ac43a4547e19a30fb2156eb7e59f22c61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70bb7b481e7b4786edf07881b7114b09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a70bb7b481e7b4786edf07881b7114b09\"></a>\nstatic T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (void *p)</td></tr>\n<tr class=\"separator:a70bb7b481e7b4786edf07881b7114b09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8737716155b1acede28ae85dc00edaef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8737716155b1acede28ae85dc00edaef\"></a>\nstatic task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper_impl</b> (<a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt; *const this_recv, const void *p, bool is_async)</td></tr>\n<tr class=\"separator:a8737716155b1acede28ae85dc00edaef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a77c7b633889eff6fbf768a09515c8cfe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a77c7b633889eff6fbf768a09515c8cfe\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_async_type</b> = false</td></tr>\n<tr class=\"separator:a77c7b633889eff6fbf768a09515c8cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00024.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00024.html\">async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00366.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a087d75662143ef3819379262e52fb1a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a087d75662143ef3819379262e52fb1a9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_type</b></td></tr>\n<tr class=\"separator:a087d75662143ef3819379262e52fb1a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99b3ba7bf9185ece5fc65a014e26e048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99b3ba7bf9185ece5fc65a014e26e048\"></a>\ntypedef T::async_msg_data_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a99b3ba7bf9185ece5fc65a014e26e048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:af303cbf389e29ff0de60ee6d824c07e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af303cbf389e29ff0de60ee6d824c07e5\"></a>\nstatic const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:af303cbf389e29ff0de60ee6d824c07e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24cfe0e9b862f04412c6174b6f9f3b69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24cfe0e9b862f04412c6174b6f9f3b69\"></a>\nstatic void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (T &amp;t)</td></tr>\n<tr class=\"separator:a24cfe0e9b862f04412c6174b6f9f3b69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff46d0962be22746402cf3a2a4a4e8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff46d0962be22746402cf3a2a4a4e8ea\"></a>\nstatic const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (const void *p)</td></tr>\n<tr class=\"separator:aff46d0962be22746402cf3a2a4a4e8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a448f6a16e2831f45d959628bd6296a7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a448f6a16e2831f45d959628bd6296a7c\"></a>\nstatic T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (void *p)</td></tr>\n<tr class=\"separator:a448f6a16e2831f45d959628bd6296a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afaba573c1bf66e75146ef561767576eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afaba573c1bf66e75146ef561767576eb\"></a>\nstatic task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper_impl</b> (<a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt; *const this_recv, const void *p, bool is_async)</td></tr>\n<tr class=\"separator:afaba573c1bf66e75146ef561767576eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:aef518cf077f5d7658c49e81bf451cd2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef518cf077f5d7658c49e81bf451cd2b\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_async_type</b> = true</td></tr>\n<tr class=\"separator:aef518cf077f5d7658c49e81bf451cd2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00025.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::async_msg&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00025.html\">async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::async_msg&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::async_msg&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00025.png\" usemap=\"#tbb::flow::interface10::async_msg&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::async_msg&lt; T &gt;_map\" name=\"tbb::flow::interface10::async_msg&lt; T &gt;_map\">\n<area href=\"a00102.html\" alt=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,56,326,80\"/>\n</map>\n </div></div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00026.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_storage&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00026.html\">async_storage</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_storage&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00027.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::atomic&lt; T &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00027.html\">atomic</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00281.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; T &gt; Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Primary template for atomic.  \n <a href=\"a00027.html#details\">More...</a></p>\n\n<p><code>#include &lt;atomic.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::atomic&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00027.png\" usemap=\"#tbb::atomic&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::atomic&lt; T &gt;_map\" name=\"tbb::atomic&lt; T &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8624826901f5a3267853386bf880bd88\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8624826901f5a3267853386bf880bd88\"></a>\nconstexpr&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic</b> (T arg)</td></tr>\n<tr class=\"separator:a8624826901f5a3267853386bf880bd88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5942feb81281f810edddc61a48dd7a39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5942feb81281f810edddc61a48dd7a39\"></a>\nT&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (T rhs)</td></tr>\n<tr class=\"separator:a5942feb81281f810edddc61a48dd7a39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d65b6cae3bd11c79a8e51e25055be52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d65b6cae3bd11c79a8e51e25055be52\"></a>\n<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a7d65b6cae3bd11c79a8e51e25055be52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nstruct tbb::atomic&lt; T &gt;</h3>\n\n<p>Primary template for atomic. </p>\n<p>See the Reference for details. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>atomic.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00028.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::atomic&lt; void * &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00028.html\">atomic< void * ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00282.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; void * &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  \n <a href=\"a00028.html#details\">More...</a></p>\n\n<p><code>#include &lt;atomic.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::atomic&lt; void * &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00028.png\" usemap=\"#tbb::atomic&lt; void * &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::atomic&lt; void * &gt;_map\" name=\"tbb::atomic&lt; void * &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a744970055554db56a922b83dd1125dcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a744970055554db56a922b83dd1125dcf\"></a>\nconstexpr&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic</b> (void *arg)</td></tr>\n<tr class=\"separator:a744970055554db56a922b83dd1125dcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3da2906b224154d9961054f07b2e310b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3da2906b224154d9961054f07b2e310b\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (void *rhs)</td></tr>\n<tr class=\"separator:a3da2906b224154d9961054f07b2e310b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8cb22d05fe655337f6129dc8f3ab6783\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8cb22d05fe655337f6129dc8f3ab6783\"></a>\n<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; void * &gt; &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; void * &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a8cb22d05fe655337f6129dc8f3ab6783\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nstruct tbb::atomic&lt; void * &gt;</h3>\n\n<p>Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>atomic.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00029.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface7::task_arena::attach Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00029.html\">attach</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena::attach Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Tag class used to indicate the \"attaching\" constructor.  \n <a href=\"a00029.html#details\">More...</a></p>\n\n<p><code>#include &lt;task_arena.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Tag class used to indicate the \"attaching\" constructor. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>task_arena.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00030.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::bad_last_alloc Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00333.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::bad_last_alloc Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for concurrent containers.  \n <a href=\"a00030.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::bad_last_alloc:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00030.png\" usemap=\"#tbb::bad_last_alloc_map\" alt=\"\"/>\n  <map id=\"tbb::bad_last_alloc_map\" name=\"tbb::bad_last_alloc_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad26fe8a6bd71e097ab339f3d3895d07c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad26fe8a6bd71e097ab339f3d3895d07c\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:ad26fe8a6bd71e097ab339f3d3895d07c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for concurrent containers. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00031.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_handler Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00031.html\">basic_handler</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00413.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_handler Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afb0dec67968e9abdabb5a0e3ec8064a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb0dec67968e9abdabb5a0e3ec8064a4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *op_list) const </td></tr>\n<tr class=\"separator:afb0dec67968e9abdabb5a0e3ec8064a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00032.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_operation&lt; Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00032.html\">basic_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00412.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation&lt; Body &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::internal::basic_operation&lt; Body &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00032.png\" usemap=\"#tbb::interface6::internal::basic_operation&lt; Body &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::internal::basic_operation&lt; Body &gt;_map\" name=\"tbb::interface6::internal::basic_operation&lt; Body &gt;_map\">\n<area href=\"a00033.html\" alt=\"tbb::interface6::internal::basic_operation_base\" shape=\"rect\" coords=\"0,56,289,80\"/>\n<area href=\"a00021.html\" alt=\"tbb::interface6::aggregator_operation\" shape=\"rect\" coords=\"0,0,289,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:adf48b2339f7de2f002c24c8951a03057\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf48b2339f7de2f002c24c8951a03057\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>basic_operation</b> (const Body &amp;b)</td></tr>\n<tr class=\"separator:adf48b2339f7de2f002c24c8951a03057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00033.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_operation_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00411.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation_base Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::internal::basic_operation_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00033.png\" usemap=\"#tbb::interface6::internal::basic_operation_base_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::internal::basic_operation_base_map\" name=\"tbb::interface6::internal::basic_operation_base_map\">\n<area href=\"a00021.html\" alt=\"tbb::interface6::aggregator_operation\" shape=\"rect\" coords=\"0,0,289,24\"/>\n<area href=\"a00032.html\" alt=\"tbb::interface6::internal::basic_operation&lt; Body &gt;\" shape=\"rect\" coords=\"0,112,289,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afe66260da7455bea5b701a3d8a537ba7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afe66260da7455bea5b701a3d8a537ba7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>basic_handler</b></td></tr>\n<tr class=\"separator:afe66260da7455bea5b701a3d8a537ba7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00034.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range&lt; Value &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00283.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range&lt; Value &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A range over which to iterate.  \n <a href=\"a00034.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad56ca70af46acf8870b4970d8a809791\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef Value&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a></td></tr>\n<tr class=\"memdesc:ad56ca70af46acf8870b4970d8a809791\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of a value.  <a href=\"#ad56ca70af46acf8870b4970d8a809791\">More...</a><br/></td></tr>\n<tr class=\"separator:ad56ca70af46acf8870b4970d8a809791\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a89b300cecd9d617e4ee801c786756e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a89b300cecd9d617e4ee801c786756e55\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a></td></tr>\n<tr class=\"memdesc:a89b300cecd9d617e4ee801c786756e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of a range. <br/></td></tr>\n<tr class=\"separator:a89b300cecd9d617e4ee801c786756e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">blocked_range</a> ()</td></tr>\n<tr class=\"memdesc:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct range with default-constructed values for begin, end, and grainsize.  <a href=\"#aad176ab2cbd0bd73c3c2065761af3ccc\">More...</a><br/></td></tr>\n<tr class=\"separator:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49a97576004711b7159170fcaf488e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a97576004711b7159170fcaf488e4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a49a97576004711b7159170fcaf488e4e\">blocked_range</a> (Value begin_, Value end_, <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> grainsize_=1)</td></tr>\n<tr class=\"memdesc:a49a97576004711b7159170fcaf488e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct range over half-open interval [begin,end), with the given grainsize. <br/></td></tr>\n<tr class=\"separator:a49a97576004711b7159170fcaf488e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae225fa10454b0fa33533dfb56f5060a2\"></a>\n<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">begin</a> () const </td></tr>\n<tr class=\"memdesc:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Beginning of range. <br/></td></tr>\n<tr class=\"separator:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99f829599d3e51b181a30b4cd57b06c6\"></a>\n<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">end</a> () const </td></tr>\n<tr class=\"memdesc:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">One past last value in range. <br/></td></tr>\n<tr class=\"separator:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a347ef8caa40edca3b7f475f182281140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">size</a> () const </td></tr>\n<tr class=\"memdesc:a347ef8caa40edca3b7f475f182281140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Size of the range.  <a href=\"#a347ef8caa40edca3b7f475f182281140\">More...</a><br/></td></tr>\n<tr class=\"separator:a347ef8caa40edca3b7f475f182281140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab408f3cf90c85fa9203df5641a2f9bb1\"></a>\n<a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">grainsize</a> () const </td></tr>\n<tr class=\"memdesc:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The grain size for this range. <br/></td></tr>\n<tr class=\"separator:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59dec03416b3fefbf69600f798177710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59dec03416b3fefbf69600f798177710\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a59dec03416b3fefbf69600f798177710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:a59dec03416b3fefbf69600f798177710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible.  <a href=\"#ad90ad1db0d4d9a301ef1c9e17712e8a0\">More...</a><br/></td></tr>\n<tr class=\"separator:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75cae12286f4d5492970ea630a9783b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">blocked_range</a> (<a class=\"el\" href=\"a00034.html\">blocked_range</a> &amp;r, split)</td></tr>\n<tr class=\"memdesc:a75cae12286f4d5492970ea630a9783b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Split range.  <a href=\"#a75cae12286f4d5492970ea630a9783b9\">More...</a><br/></td></tr>\n<tr class=\"separator:a75cae12286f4d5492970ea630a9783b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a1f53fbb10b8b04a515f382704b00ed14\">blocked_range</a> (<a class=\"el\" href=\"a00034.html\">blocked_range</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"memdesc:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Split range.  <a href=\"#a1f53fbb10b8b04a515f382704b00ed14\">More...</a><br/></td></tr>\n<tr class=\"separator:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:ae2b0210e2468092b408123adeb54b01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2b0210e2468092b408123adeb54b01c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:ae2b0210e2468092b408123adeb54b01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:ae2b0210e2468092b408123adeb54b01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa504612e6c1ba07b8846bcd323847680\"></a>\ntemplate&lt;typename RowValue , typename ColValue &gt; </td></tr>\n<tr class=\"memitem:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_range2d</b></td></tr>\n<tr class=\"separator:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a83f67fe3b421dbaeee9040aae730d5e8\"></a>\ntemplate&lt;typename RowValue , typename ColValue , typename PageValue &gt; </td></tr>\n<tr class=\"memitem:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_range3d</b></td></tr>\n<tr class=\"separator:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a873fd9208a42597b138e780a32b83381\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a873fd9208a42597b138e780a32b83381\"></a>\ntemplate&lt;typename DimValue , unsigned int N, typename &gt; </td></tr>\n<tr class=\"memitem:a873fd9208a42597b138e780a32b83381\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::blocked_rangeNd_impl</b></td></tr>\n<tr class=\"separator:a873fd9208a42597b138e780a32b83381\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Value&gt;<br/>\nclass tbb::blocked_range&lt; Value &gt;</h3>\n\n<p>A range over which to iterate. </p>\n</div><h2 class=\"groupheader\">Member Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ad56ca70af46acf8870b4970d8a809791\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef Value <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type of a value. </p>\n<p>Called a const_iterator for sake of algorithms that need to treat a <a class=\"el\" href=\"a00034.html\" title=\"A range over which to iterate. \">blocked_range</a> as an STL container. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"aad176ab2cbd0bd73c3c2065761af3ccc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct range with default-constructed values for begin, end, and grainsize. </p>\n<p>Requires that Value have a default constructor. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a75cae12286f4d5492970ea630a9783b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; Value &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">split&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Split range. </p>\n<p>The new Range *this has the second part, the old range r has the first part. Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a> or !is_divisible(). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1f53fbb10b8b04a515f382704b00ed14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; Value &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">proportional_split &amp;&#160;</td>\n          <td class=\"paramname\"><em>proportion</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Split range. </p>\n<p>The new Range *this has the second part split according to specified proportion, the old range r has the first part. Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a> or !is_divisible(). </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad90ad1db0d4d9a301ef1c9e17712e8a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::is_divisible </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if range is divisible. </p>\n<p>Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;::is_divisible()</a>, and <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;::is_divisible()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a347ef8caa40edca3b7f475f182281140\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Size of the range. </p>\n<p>Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; I &gt;::is_divisible()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00035.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00284.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A 2-dimensional range that models the Range concept.  \n <a href=\"a00035.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range2d.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ada609b296a9af0591cc34761b8538100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada609b296a9af0591cc34761b8538100\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; RowValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a></td></tr>\n<tr class=\"memdesc:ada609b296a9af0591cc34761b8538100\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of an iteration range. <br/></td></tr>\n<tr class=\"separator:ada609b296a9af0591cc34761b8538100\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9820ed2f2560633d18bf35cece8b6493\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9820ed2f2560633d18bf35cece8b6493\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; ColValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>col_range_type</b></td></tr>\n<tr class=\"separator:a9820ed2f2560633d18bf35cece8b6493\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5aa4e2c389c4b833937fcad66efe2b6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5aa4e2c389c4b833937fcad66efe2b6a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">col_range_type::size_type</a> col_grainsize)</td></tr>\n<tr class=\"separator:a5aa4e2c389c4b833937fcad66efe2b6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf45f93921022437fdcb500585768a5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf45f93921022437fdcb500585768a5e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>\n<tr class=\"separator:aaf45f93921022437fdcb500585768a5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5805972c8c41b2681d286f9c9771cf52\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac84c6cc2ff8b0974ffa719fed804f586\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible into two pieces. <br/></td></tr>\n<tr class=\"separator:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0e752d01b661b01c9a473473bea43fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0e752d01b661b01c9a473473bea43fc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (<a class=\"el\" href=\"a00035.html\">blocked_range2d</a> &amp;r, split)</td></tr>\n<tr class=\"separator:af0e752d01b661b01c9a473473bea43fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ebbf0fa580c0553ec2e3c5997b9799c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ebbf0fa580c0553ec2e3c5997b9799c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (<a class=\"el\" href=\"a00035.html\">blocked_range2d</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"separator:a9ebbf0fa580c0553ec2e3c5997b9799c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f7299e74c40df57dee2433c07ce65ae\"></a>\nconst <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">rows</a> () const </td></tr>\n<tr class=\"memdesc:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The rows of the iteration space. <br/></td></tr>\n<tr class=\"separator:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3bccfaf90126b285491096f78ca9473\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af3bccfaf90126b285491096f78ca9473\"></a>\nconst <a class=\"el\" href=\"a00034.html\">col_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">cols</a> () const </td></tr>\n<tr class=\"memdesc:af3bccfaf90126b285491096f78ca9473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The columns of the iteration space. <br/></td></tr>\n<tr class=\"separator:af3bccfaf90126b285491096f78ca9473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:aa0519760654368000f7ebc87d9bfe898\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0519760654368000f7ebc87d9bfe898\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:aa0519760654368000f7ebc87d9bfe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:aa0519760654368000f7ebc87d9bfe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename RowValue, typename ColValue = RowValue&gt;<br/>\nclass tbb::blocked_range2d&lt; RowValue, ColValue &gt;</h3>\n\n<p>A 2-dimensional range that models the Range concept. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range2d.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00036.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00285.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A 3-dimensional range that models the Range concept.  \n <a href=\"a00036.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range3d.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8cdc866378a12ce198da870d0439676f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8cdc866378a12ce198da870d0439676f\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; PageValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a></td></tr>\n<tr class=\"memdesc:a8cdc866378a12ce198da870d0439676f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of an iteration range. <br/></td></tr>\n<tr class=\"separator:a8cdc866378a12ce198da870d0439676f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe15e1e06f47809a477272f733a8abf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe15e1e06f47809a477272f733a8abf8\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; RowValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>row_range_type</b></td></tr>\n<tr class=\"separator:abe15e1e06f47809a477272f733a8abf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3bffd5ffb14ad9897b1a9bf22980768\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3bffd5ffb14ad9897b1a9bf22980768\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; ColValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>col_range_type</b></td></tr>\n<tr class=\"separator:ab3bffd5ffb14ad9897b1a9bf22980768\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa5159e07e2d601319eece538edb8add0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa5159e07e2d601319eece538edb8add0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>\n<tr class=\"separator:aa5159e07e2d601319eece538edb8add0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a671a22033260fa02734c5a1113dcf1ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a671a22033260fa02734c5a1113dcf1ac\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">col_range_type::size_type</a> col_grainsize)</td></tr>\n<tr class=\"separator:a671a22033260fa02734c5a1113dcf1ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea992e0cd3d105f964a633b1a0a1a05f\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fce6bcae6269c37623c3a2cdbb8bcf0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible into two pieces. <br/></td></tr>\n<tr class=\"separator:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a788ebedfb4a2eaa4bee11c2c967e0768\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a788ebedfb4a2eaa4bee11c2c967e0768\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (<a class=\"el\" href=\"a00036.html\">blocked_range3d</a> &amp;r, split)</td></tr>\n<tr class=\"separator:a788ebedfb4a2eaa4bee11c2c967e0768\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e5fdb794ec7bfc5f21a59ddd466d8e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e5fdb794ec7bfc5f21a59ddd466d8e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (<a class=\"el\" href=\"a00036.html\">blocked_range3d</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"separator:a0e5fdb794ec7bfc5f21a59ddd466d8e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b794fd53ba92106aeafa4eed85731d4\"></a>\nconst <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">pages</a> () const </td></tr>\n<tr class=\"memdesc:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The pages of the iteration space. <br/></td></tr>\n<tr class=\"separator:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeac1def585af81467573f30ebb42cb4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeac1def585af81467573f30ebb42cb4f\"></a>\nconst <a class=\"el\" href=\"a00034.html\">row_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">rows</a> () const </td></tr>\n<tr class=\"memdesc:aeac1def585af81467573f30ebb42cb4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The rows of the iteration space. <br/></td></tr>\n<tr class=\"separator:aeac1def585af81467573f30ebb42cb4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a308d7089a1d53ff26770a7040ed817cd\"></a>\nconst <a class=\"el\" href=\"a00034.html\">col_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">cols</a> () const </td></tr>\n<tr class=\"memdesc:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The columns of the iteration space. <br/></td></tr>\n<tr class=\"separator:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5940c1bd6ba0e8184ef83dea0ae56884\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue&gt;<br/>\nclass tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</h3>\n\n<p>A 3-dimensional range that models the Range concept. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range3d.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00037.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00038.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl< Value, N, index_sequence< Is...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00416.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a5011dca34818237ef9dec22973ca3e36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5011dca34818237ef9dec22973ca3e36\"></a>\nusing&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">value_type</a> = Value</td></tr>\n<tr class=\"memdesc:a5011dca34818237ef9dec22973ca3e36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of a value. <br/></td></tr>\n<tr class=\"separator:a5011dca34818237ef9dec22973ca3e36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab95cb7c03dc5a1e600105e3ac019287b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">blocked_rangeNd_impl</a> (const <a class=\"el\" href=\"a00034.html\">dim_type_helper</a>&lt; Is &gt; &amp;...args)</td></tr>\n<tr class=\"memdesc:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs N-dimensional range over N half-open intervals each represented as tbb::blocked_range&lt;Value&gt;. <br/></td></tr>\n<tr class=\"separator:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeae30e80615d71a369e449748e5f841d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeae30e80615d71a369e449748e5f841d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd_impl</b> (<a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> &amp;r, proportional_split proportion)</td></tr>\n<tr class=\"separator:aeae30e80615d71a369e449748e5f841d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af177d8e969525bd79cd2616b941d8c57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af177d8e969525bd79cd2616b941d8c57\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd_impl</b> (<a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> &amp;r, split proportion)</td></tr>\n<tr class=\"separator:af177d8e969525bd79cd2616b941d8c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_rangeNd.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00039.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00039.html\">broadcast_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00040.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00379.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket  \n <a href=\"a00040.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00040.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab8dc51ef88ff53cc6cc4e40e2c2818eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8dc51ef88ff53cc6cc4e40e2c2818eb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>bucket_accessor</b> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>\n<tr class=\"separator:ab8dc51ef88ff53cc6cc4e40e2c2818eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d7d8f3d101bb18056b8e5d4d2c8b079\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">acquire</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>\n<tr class=\"memdesc:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br/></td></tr>\n<tr class=\"separator:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa8167e2961330435fd23eb92127805c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa8167e2961330435fd23eb92127805c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">is_writer</a> ()</td></tr>\n<tr class=\"memdesc:aaa8167e2961330435fd23eb92127805c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">check whether bucket is locked for write <br/></td></tr>\n<tr class=\"separator:aaa8167e2961330435fd23eb92127805c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a16e714a5e77dbf8daf81973df30722d4\"></a>\nbucket *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">operator()</a> ()</td></tr>\n<tr class=\"memdesc:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">get bucket pointer <br/></td></tr>\n<tr class=\"separator:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</h3>\n\n<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00041.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00286.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00041.html#details\">More...</a></p>\n\n<p><code>#include &lt;cache_aligned_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00123.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a7aba3042b0a1c934879d5299f0c20e7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7aba3042b0a1c934879d5299f0c20e7e\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a7aba3042b0a1c934879d5299f0c20e7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fabbb51a8fd7b270b94fc4d9548847b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6fabbb51a8fd7b270b94fc4d9548847b\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a6fabbb51a8fd7b270b94fc4d9548847b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a35edf40f1bb3418f61e7d33c9f796824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35edf40f1bb3418f61e7d33c9f796824\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a35edf40f1bb3418f61e7d33c9f796824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9f2f6c7ca74e1f3968d838eec2c4dcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9f2f6c7ca74e1f3968d838eec2c4dcb\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:ac9f2f6c7ca74e1f3968d838eec2c4dcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af50d27e385aea41dbb8a9cd0734f1c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af50d27e385aea41dbb8a9cd0734f1c84\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:af50d27e385aea41dbb8a9cd0734f1c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a51eed827a49fd636d1d6c73908f9635b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a51eed827a49fd636d1d6c73908f9635b\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a51eed827a49fd636d1d6c73908f9635b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8bf47c52cdeee1bc0dcd410cc97faeec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8bf47c52cdeee1bc0dcd410cc97faeec\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a8bf47c52cdeee1bc0dcd410cc97faeec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a11b1921251262137671599e99fbe8d4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a11b1921251262137671599e99fbe8d4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cache_aligned_allocator</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a11b1921251262137671599e99fbe8d4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab5a78cc56dcc0851117b3c88bb3af16a\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>cache_aligned_allocator</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39aa68042abff22210f801eab98f6dfa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39aa68042abff22210f801eab98f6dfa\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a39aa68042abff22210f801eab98f6dfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bd8fe0e5de894404c8b868b37a0fe53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bd8fe0e5de894404c8b868b37a0fe53\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:a5bd8fe0e5de894404c8b868b37a0fe53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99d05096f80877849cb31d80247e0f85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99d05096f80877849cb31d80247e0f85\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">allocate</a> (size_type n, const void *hint=0)</td></tr>\n<tr class=\"memdesc:a99d05096f80877849cb31d80247e0f85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects, starting on a cache/sector line. <br/></td></tr>\n<tr class=\"separator:a99d05096f80877849cb31d80247e0f85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f7310e046c4b6b8618864de8e27a471\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free block of memory that starts on a cache line. <br/></td></tr>\n<tr class=\"separator:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b945b3180ea3dfe16dfa048f4591c6d\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab316f80a66b991801b4ec4ea88b852d9\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5b39984a3eee60e5bf0f10ef609dc4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5b39984a3eee60e5bf0f10ef609dc4c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:ac5b39984a3eee60e5bf0f10ef609dc4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5086d395a952eb13eb7d72bb0cb26937\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5086d395a952eb13eb7d72bb0cb26937\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a5086d395a952eb13eb7d72bb0cb26937\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af2fd054d055403d4ea669fd3af661cc8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::cache_aligned_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00042.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00288.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00042.html#details\">More...</a></p>\n\n<p><code>#include &lt;cache_aligned_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a630325567e2ede3937a0d2e0f2da6a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a630325567e2ede3937a0d2e0f2da6a3f\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a630325567e2ede3937a0d2e0f2da6a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36f63efa0a37d205705b9d5944432864\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a36f63efa0a37d205705b9d5944432864\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a36f63efa0a37d205705b9d5944432864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af7f973d0bb12319600505cf9c1fb35b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af7f973d0bb12319600505cf9c1fb35b0\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:af7f973d0bb12319600505cf9c1fb35b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::cache_aligned_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00043.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00380.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b242f28514cb0e4fb2e462c8fead03e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b242f28514cb0e4fb2e462c8fead03e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call_clear_on_leave</b> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *a_ch_map)</td></tr>\n<tr class=\"separator:a4b242f28514cb0e4fb2e462c8fead03e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e56acf6cbc5a9bc38018a8640050054\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e56acf6cbc5a9bc38018a8640050054\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>dismiss</b> ()</td></tr>\n<tr class=\"separator:a0e56acf6cbc5a9bc38018a8640050054\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a22e1559dccd2fd4345ca0ff389c6ad29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a22e1559dccd2fd4345ca0ff389c6ad29\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_ch_map</b></td></tr>\n<tr class=\"separator:a22e1559dccd2fd4345ca0ff389c6ad29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00044.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::callback&lt; Callback, T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00044.html\">callback</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00354.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback&lt; Callback, T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::callback&lt; Callback, T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00044.png\" usemap=\"#tbb::flow::interface10::callback&lt; Callback, T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::callback&lt; Callback, T &gt;_map\" name=\"tbb::flow::interface10::callback&lt; Callback, T &gt;_map\">\n<area href=\"a00045.html\" alt=\"tbb::flow::interface10::callback_base\" shape=\"rect\" coords=\"0,56,270,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4dc2b032a93148fd48a7034532328e18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4dc2b032a93148fd48a7034532328e18\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>callback</b> (Callback c, const T &amp;t)</td></tr>\n<tr class=\"separator:a4dc2b032a93148fd48a7034532328e18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0b459c3cb4e56835c06434ee769c156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0b459c3cb4e56835c06434ee769c156\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call</b> () __TBB_override</td></tr>\n<tr class=\"separator:aa0b459c3cb4e56835c06434ee769c156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00045.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::callback_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00045.html\">callback_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00353.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback_base Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::callback_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00045.png\" usemap=\"#tbb::flow::interface10::callback_base_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::callback_base_map\" name=\"tbb::flow::interface10::callback_base_map\">\n<area href=\"a00044.html\" alt=\"tbb::flow::interface10::callback&lt; Callback, T &gt;\" shape=\"rect\" coords=\"0,112,270,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad46b9f76e7c7f26d23698935bb6d7f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad46b9f76e7c7f26d23698935bb6d7f39\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call</b> ()=0</td></tr>\n<tr class=\"separator:ad46b9f76e7c7f26d23698935bb6d7f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00046.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::captured_exception Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00339.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::captured_exception Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This class is used by TBB to propagate information about unhandled exceptions into the root thread.  \n <a href=\"a00046.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::captured_exception:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00046.png\" usemap=\"#tbb::captured_exception_map\" alt=\"\"/>\n  <map id=\"tbb::captured_exception_map\" name=\"tbb::captured_exception_map\">\n<area href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\" alt=\"tbb::tbb_exception\" shape=\"rect\" coords=\"0,56,146,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a56f6c51b6d4f8ce31669457ff8f0c07f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56f6c51b6d4f8ce31669457ff8f0c07f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>captured_exception</b> (const <a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a56f6c51b6d4f8ce31669457ff8f0c07f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3d72662db6a2badffa95a649a6c0bdd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3d72662db6a2badffa95a649a6c0bdd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>captured_exception</b> (const char *name_, const char *info)</td></tr>\n<tr class=\"separator:ab3d72662db6a2badffa95a649a6c0bdd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78a66603238d40da9ec6a750b6a2425c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a78a66603238d40da9ec6a750b6a2425c\"></a>\n<a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a78a66603238d40da9ec6a750b6a2425c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00046.html\">captured_exception</a> <br class=\"typebreak\"/>\n*__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">move</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a3b75205c631b51a00faf98c9e107f78a\">More...</a><br/></td></tr>\n<tr class=\"separator:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">destroy</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#abfc1220a6f9da0361082a3f3ad80cdc9\">More...</a><br/></td></tr>\n<tr class=\"separator:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">throw_self</a> () __TBB_override</td></tr>\n<tr class=\"memdesc:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#a6df0d3a1943ca6f84a9a9aca25e9633d\">More...</a><br/></td></tr>\n<tr class=\"separator:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a543e1a18c9a3f3b093c8c2bd927a6d12\"></a>\nconst char *__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e9d36a304dd7e49906754a0cb72da2e\"></a>\nconst char *__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">what</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa72deb29316e8c08700f7e6afa4a48e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa72deb29316e8c08700f7e6afa4a48e8\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set</b> (const char *<a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a>, const char *info)  throw ()</td></tr>\n<tr class=\"separator:aa72deb29316e8c08700f7e6afa4a48e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b160c0fc5d2fab90df2be96ea14088a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b160c0fc5d2fab90df2be96ea14088a\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()  throw ()</td></tr>\n<tr class=\"separator:a0b160c0fc5d2fab90df2be96ea14088a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00169\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00169')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>This class is used by TBB to propagate information about unhandled exceptions into the root thread. </p>\n<p>Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. </p>\n<dl class=\"section see\"><dt>See Also</dt><dd><a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> </dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"abfc1220a6f9da0361082a3f3ad80cdc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3b75205c631b51a00faf98c9e107f78a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00046.html\">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6df0d3a1943ca6f84a9a9aca25e9633d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::captured_exception::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00047.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::combinable&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00047.html\">combinable</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00290.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::combinable&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Thread-local storage with optional reduction.  \n <a href=\"a00047.html#details\">More...</a></p>\n\n<p><code>#include &lt;combinable.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab3c539d5731faaafd81979b207a4fa1f\"></a>\ntemplate&lt;typename finit &gt; </td></tr>\n<tr class=\"memitem:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combinable</b> (finit _finit)</td></tr>\n<tr class=\"separator:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a52f00cf262d768048db72ab73c8f3ca4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">~combinable</a> ()</td></tr>\n<tr class=\"memdesc:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destructor <br/></td></tr>\n<tr class=\"separator:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a376f44cba71450fc18ccddaad61b76cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a376f44cba71450fc18ccddaad61b76cc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable</b> (const <a class=\"el\" href=\"a00047.html\">combinable</a> &amp;other)</td></tr>\n<tr class=\"separator:a376f44cba71450fc18ccddaad61b76cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae227b3906cd4ee6e5e2e5e840a3ff8e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae227b3906cd4ee6e5e2e5e840a3ff8e6\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable</b> (<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:ae227b3906cd4ee6e5e2e5e840a3ff8e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab011fbe2f0600900b6e1b9760d82aead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab011fbe2f0600900b6e1b9760d82aead\"></a>\n<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00047.html\">combinable</a> &amp;other)</td></tr>\n<tr class=\"separator:ab011fbe2f0600900b6e1b9760d82aead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a780f6aeeed80b1c974f22c76907df8c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a780f6aeeed80b1c974f22c76907df8c9\"></a>\n<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:a780f6aeeed80b1c974f22c76907df8c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ecfe80161a59f04ffd9676e79701de6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ecfe80161a59f04ffd9676e79701de6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a8ecfe80161a59f04ffd9676e79701de6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae47f982dbd396d225f0f546e60690d42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae47f982dbd396d225f0f546e60690d42\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local</b> ()</td></tr>\n<tr class=\"separator:ae47f982dbd396d225f0f546e60690d42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2433d2b3b53b9979d0b3bb2a175abc9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2433d2b3b53b9979d0b3bb2a175abc9b\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local</b> (bool &amp;exists)</td></tr>\n<tr class=\"separator:a2433d2b3b53b9979d0b3bb2a175abc9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3d564f6d480e0c7fe8e756d1de1cf0e2\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aadadee714004d977f0e95a479bfb80ac\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine_each</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::combinable&lt; T &gt;</h3>\n\n<p>Thread-local storage with optional reduction. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>combinable.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00048.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00048.html\">concrete_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00049.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00291.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A high-performance thread-safe blocking concurrent bounded queue.  \n <a href=\"a00049.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_queue.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_bounded_queue&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00049.png\" usemap=\"#tbb::concurrent_bounded_queue&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_bounded_queue&lt; T, A &gt;_map\" name=\"tbb::concurrent_bounded_queue&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6eb564625fef03dd9a5881d5d4e52f9f\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">value_type</a></td></tr>\n<tr class=\"memdesc:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbfceb845de1c770e2b56409f09b0364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbfceb845de1c770e2b56409f09b0364\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a></td></tr>\n<tr class=\"memdesc:acbfceb845de1c770e2b56409f09b0364\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:acbfceb845de1c770e2b56409f09b0364\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fa4002bcd265d9d3ed305e3b686f1da\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">reference</a></td></tr>\n<tr class=\"memdesc:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af838e520ce0db2c22369748c019b11cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af838e520ce0db2c22369748c019b11cb\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">const_reference</a></td></tr>\n<tr class=\"memdesc:af838e520ce0db2c22369748c019b11cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:af838e520ce0db2c22369748c019b11cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef std::ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a></td></tr>\n<tr class=\"memdesc:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue.  <a href=\"#ae73fa352d781bdb9d01bfb77f2a8bc28\">More...</a><br/></td></tr>\n<tr class=\"separator:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72725361e050c5a981035a20ef1b773e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72725361e050c5a981035a20ef1b773e\"></a>\ntypedef std::ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">difference_type</a></td></tr>\n<tr class=\"memdesc:a72725361e050c5a981035a20ef1b773e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:a72725361e050c5a981035a20ef1b773e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42dfb71b1e4bdc0da3c1217d0d40ddd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a42dfb71b1e4bdc0da3c1217d0d40ddd5\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a42dfb71b1e4bdc0da3c1217d0d40ddd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18049841284051e18b854692bd04602c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18049841284051e18b854692bd04602c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a>, <br class=\"typebreak\"/>\nconst T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a18049841284051e18b854692bd04602c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85f8a800cae02b601f36ad7a655a0126\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a85f8a800cae02b601f36ad7a655a0126\">concurrent_bounded_queue</a> (const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty queue. <br/></td></tr>\n<tr class=\"separator:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad6fd2353d64c2c31d074cd99df58c02\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#aad6fd2353d64c2c31d074cd99df58c02\">concurrent_bounded_queue</a> (const <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;src, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a228b9d3bf3158a9379748894a93fbe55\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">concurrent_bounded_queue</a> (<a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructors. <br/></td></tr>\n<tr class=\"separator:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed0303dafc38c5088ae62ac023fffb4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed0303dafc38c5088ae62ac023fffb4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_bounded_queue</b> (<a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"separator:aed0303dafc38c5088ae62ac023fffb4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afcfdc998e106fdb7b2dfa5df880cd9cf\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#afcfdc998e106fdb7b2dfa5df880cd9cf\">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1291bf6837ecfb8836c24dde5dd80b5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">~concurrent_bounded_queue</a> ()</td></tr>\n<tr class=\"memdesc:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy queue. <br/></td></tr>\n<tr class=\"separator:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae5e9051772bbc93b2ccb8fd0a98a21f5\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a62a03e9c185562254ecb4104f38c106d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a62a03e9c185562254ecb4104f38c106d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">push</a> (T &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:a62a03e9c185562254ecb4104f38c106d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:a62a03e9c185562254ecb4104f38c106d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab9009e8a1bdf70623f6480681bb6b56a\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">pop</a> (T &amp;destination)</td></tr>\n<tr class=\"memdesc:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dequeue item from head of queue.  <a href=\"#a87926c31967a918ce80690a9ed5d6fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77a755d94cabf5208905d10d5b57419c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a77a755d94cabf5208905d10d5b57419c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">abort</a> ()</td></tr>\n<tr class=\"memdesc:a77a755d94cabf5208905d10d5b57419c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Abort all pending queue operations. <br/></td></tr>\n<tr class=\"separator:a77a755d94cabf5208905d10d5b57419c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03d93a240841a21788396bebd71c51bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a03d93a240841a21788396bebd71c51bd\">try_push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:a03d93a240841a21788396bebd71c51bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue if queue is not already full.  <a href=\"#a03d93a240841a21788396bebd71c51bd\">More...</a><br/></td></tr>\n<tr class=\"separator:a03d93a240841a21788396bebd71c51bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">try_push</a> (T &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move an item at tail of queue if queue is not already full.  <a href=\"#a93f35e9d9381629e0a2993f9fdd96d92\">More...</a><br/></td></tr>\n<tr class=\"separator:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0a4351eb8c93b6b2d9feaff0c7088ee8\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">try_pop</a> (T &amp;destination)</td></tr>\n<tr class=\"memdesc:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attempt to dequeue an item from head of queue.  <a href=\"#a3086cb4dcdeee245ef5cf34f72fb3e10\">More...</a><br/></td></tr>\n<tr class=\"separator:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">size</a> () const </td></tr>\n<tr class=\"memdesc:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return number of pushes minus number of pops.  <a href=\"#a9d6c20fd8c193c12b6a7b0c3101fd966\">More...</a><br/></td></tr>\n<tr class=\"separator:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8c59578f28c5fb4718b0eff43776e879\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Equivalent to <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\" title=\"Return number of pushes minus number of pops. \">size()</a>&lt;=0. <br/></td></tr>\n<tr class=\"separator:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a526487063242569685af8c8d778d39e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a526487063242569685af8c8d778d39e0\"></a>\n<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">capacity</a> () const </td></tr>\n<tr class=\"memdesc:a526487063242569685af8c8d778d39e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of allowed elements. <br/></td></tr>\n<tr class=\"separator:a526487063242569685af8c8d778d39e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a768699675813575eec08c1f43afda395\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">set_capacity</a> (<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> new_capacity)</td></tr>\n<tr class=\"memdesc:a768699675813575eec08c1f43afda395\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set the capacity.  <a href=\"#a768699675813575eec08c1f43afda395\">More...</a><br/></td></tr>\n<tr class=\"separator:a768699675813575eec08c1f43afda395\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeba11bbcd368a7a3a6e6e2dd3082c9c\"></a>\n<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a246be3920e079ea4847933f106baa98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a246be3920e079ea4847933f106baa98f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a246be3920e079ea4847933f106baa98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">clear the queue. not thread-safe. <br/></td></tr>\n<tr class=\"separator:a246be3920e079ea4847933f106baa98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0c931eaa1ddc30025e49d06cc383703\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac0c931eaa1ddc30025e49d06cc383703\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> ()</td></tr>\n<tr class=\"separator:ac0c931eaa1ddc30025e49d06cc383703\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a634cece9742cbaba56ba6f7777568e4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a634cece9742cbaba56ba6f7777568e4c\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> ()</td></tr>\n<tr class=\"separator:a634cece9742cbaba56ba6f7777568e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ed2f8130fd679e89327cb292fb25510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2ed2f8130fd679e89327cb292fb25510\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> () const </td></tr>\n<tr class=\"separator:a2ed2f8130fd679e89327cb292fb25510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a873d62f59fd79959c0204f5fb44c774d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a873d62f59fd79959c0204f5fb44c774d\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> () const </td></tr>\n<tr class=\"separator:a873d62f59fd79959c0204f5fb44c774d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1f5eec0de2e660ea5372d19393f0920b\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concurrent_queue_iterator</b></td></tr>\n<tr class=\"separator:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::concurrent_bounded_queue&lt; T, A &gt;</h3>\n\n<p>A high-performance thread-safe blocking concurrent bounded queue. </p>\n<p>This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>\n</div><h2 class=\"groupheader\">Member Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ae73fa352d781bdb9d01bfb77f2a8bc28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef std::ptrdiff_t <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Integral type for representing size of the queue. </p>\n<p>Note that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a87926c31967a918ce80690a9ed5d6fa8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>destination</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Dequeue item from head of queue. </p>\n<p>Block until an item becomes available, and then dequeue it. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a768699675813575eec08c1f43afda395\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::set_capacity </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td>\n          <td class=\"paramname\"><em>new_capacity</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set the capacity. </p>\n<p>Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9d6c20fd8c193c12b6a7b0c3101fd966\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Return number of pushes minus number of pops. </p>\n<p>Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\" title=\"Maximum number of allowed elements. \">capacity()</a> if there are push operations in flight. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3086cb4dcdeee245ef5cf34f72fb3e10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>destination</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attempt to dequeue an item from head of queue. </p>\n<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a03d93a240841a21788396bebd71c51bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_push </td>\n          <td>(</td>\n          <td class=\"paramtype\">const T &amp;&#160;</td>\n          <td class=\"paramname\"><em>source</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enqueue an item at tail of queue if queue is not already full. </p>\n<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a93f35e9d9381629e0a2993f9fdd96d92\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_push </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>source</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move an item at tail of queue if queue is not already full. </p>\n<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00050.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00376.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Unordered map from Key to T.  \n <a href=\"a00050.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00050.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows write access to elements and combines data access, locking, and garbage collection.  <a href=\"a00017.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href=\"a00040.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Combines data access, locking, and garbage collection.  <a href=\"a00061.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">node</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a73476eabf0605a4a17e33eca379b567c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73476eabf0605a4a17e33eca379b567c\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a73476eabf0605a4a17e33eca379b567c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09f82b7e1255cd4a7ab13f694f04e0a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a09f82b7e1255cd4a7ab13f694f04e0a2\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a09f82b7e1255cd4a7ab13f694f04e0a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10da770ec791fd8f3bddbf19d852b2f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10da770ec791fd8f3bddbf19d852b2f6\"></a>\ntypedef std::pair&lt; const Key, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a10da770ec791fd8f3bddbf19d852b2f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4346b898af1007960c70b1d5a12b3dda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4346b898af1007960c70b1d5a12b3dda\"></a>\ntypedef hash_map_base::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a4346b898af1007960c70b1d5a12b3dda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae6344f41fc1b2aae8b310442f609db0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae6344f41fc1b2aae8b310442f609db0\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:aae6344f41fc1b2aae8b310442f609db0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8fca882f67e98d54a675c9b75db3cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af8fca882f67e98d54a675c9b75db3cc0\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:af8fca882f67e98d54a675c9b75db3cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acaf14214618545aa7e0aa59a3af4a6bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acaf14214618545aa7e0aa59a3af4a6bd\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:acaf14214618545aa7e0aa59a3af4a6bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5064777ff7c17e294d74ca60f96f28db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5064777ff7c17e294d74ca60f96f28db\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a5064777ff7c17e294d74ca60f96f28db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6291ee6059597aac8f59dc8fd5558036\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6291ee6059597aac8f59dc8fd5558036\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a6291ee6059597aac8f59dc8fd5558036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6af7bf91f1cbd859aef1ffc6197b41a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae6af7bf91f1cbd859aef1ffc6197b41a\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a>, <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:ae6af7bf91f1cbd859aef1ffc6197b41a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af416067eaf691c88e6b73bf3b3323f66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af416067eaf691c88e6b73bf3b3323f66\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a>, const <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:af416067eaf691c88e6b73bf3b3323f66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69508e67134dd5282b89e1847e71c31b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69508e67134dd5282b89e1847e71c31b\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_range<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a69508e67134dd5282b89e1847e71c31b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b9d06751969eacda84b01582e4aa1d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b9d06751969eacda84b01582e4aa1d2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_range<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a0b9d06751969eacda84b01582e4aa1d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85c266c1560f7faa64772d349d0280a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85c266c1560f7faa64772d349d0280a4\"></a>\ntypedef Allocator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a85c266c1560f7faa64772d349d0280a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa3a9767b525144a2afb69ed125714c53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3a9767b525144a2afb69ed125714c53\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">concurrent_hash_map</a> (const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aa3a9767b525144a2afb69ed125714c53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table. <br/></td></tr>\n<tr class=\"separator:aa3a9767b525144a2afb69ed125714c53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae76e1252b56b107685f8746e0f6a1f4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aae76e1252b56b107685f8746e0f6a1f4\">concurrent_hash_map</a> (size_type n, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>\n<tr class=\"separator:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a73b86f9a5e9836b38713e56c546654\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8a73b86f9a5e9836b38713e56c546654\">concurrent_hash_map</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2bd04845683b15a590913a72a19fa3dc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2bd04845683b15a590913a72a19fa3dc\">concurrent_hash_map</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"memdesc:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad642e497153df5669e6454acef095675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad642e497153df5669e6454acef095675\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad642e497153df5669e6454acef095675\">concurrent_hash_map</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table, const allocator_type &amp;a)</td></tr>\n<tr class=\"memdesc:ad642e497153df5669e6454acef095675\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:ad642e497153df5669e6454acef095675\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad56fc19d656099d49051f3c363cefc89\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad56fc19d656099d49051f3c363cefc89\">concurrent_hash_map</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:ad56fc19d656099d49051f3c363cefc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with copying iteration range and given allocator instance. <br/></td></tr>\n<tr class=\"separator:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57149f90060b033b1f2493f2a88ef291\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a57149f90060b033b1f2493f2a88ef291\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a57149f90060b033b1f2493f2a88ef291\">concurrent_hash_map</a> (std::initializer_list&lt; value_type &gt; il, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a57149f90060b033b1f2493f2a88ef291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>\n<tr class=\"separator:a57149f90060b033b1f2493f2a88ef291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63e01b1f79c287ae0257ccfd483fd90a\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">operator=</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table)</td></tr>\n<tr class=\"memdesc:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92b506ceed93d1c25979948961054380\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a92b506ceed93d1c25979948961054380\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">operator=</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"memdesc:a92b506ceed93d1c25979948961054380\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move Assignment. <br/></td></tr>\n<tr class=\"separator:a92b506ceed93d1c25979948961054380\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aac73665b1a55e3de7332f36598488252\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aac73665b1a55e3de7332f36598488252\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">operator=</a> (std::initializer_list&lt; value_type &gt; il)</td></tr>\n<tr class=\"memdesc:aac73665b1a55e3de7332f36598488252\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:aac73665b1a55e3de7332f36598488252\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf1fa9470c605731063e5949f0418eb7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">rehash</a> (size_type n=0)</td></tr>\n<tr class=\"memdesc:adf1fa9470c605731063e5949f0418eb7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rehashes and optionally resizes the whole table.  <a href=\"#adf1fa9470c605731063e5949f0418eb7\">More...</a><br/></td></tr>\n<tr class=\"separator:adf1fa9470c605731063e5949f0418eb7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8295bc260b5e4df883fef11574b84c6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear table. <br/></td></tr>\n<tr class=\"separator:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ce9ab8c954bf6979c2c57d10fd8a8ed\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">~concurrent_hash_map</a> ()</td></tr>\n<tr class=\"memdesc:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear table and destroy it. <br/></td></tr>\n<tr class=\"separator:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10dc8d8b91878b211c12a3e6b1bb38bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10dc8d8b91878b211c12a3e6b1bb38bb\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range</b> (size_type grainsize=1)</td></tr>\n<tr class=\"separator:a10dc8d8b91878b211c12a3e6b1bb38bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8698274a4ffb94bb0468c387ffdc2e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8698274a4ffb94bb0468c387ffdc2e56\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range</b> (size_type grainsize=1) const </td></tr>\n<tr class=\"separator:a8698274a4ffb94bb0468c387ffdc2e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a38b7d6443502ee9f4c2374d34ea8d742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a38b7d6443502ee9f4c2374d34ea8d742\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a38b7d6443502ee9f4c2374d34ea8d742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa85633d3fc7494f49728b4064db59f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa85633d3fc7494f49728b4064db59f6\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:afa85633d3fc7494f49728b4064db59f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46aa6dc98653a88d410d0cfddd514f0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46aa6dc98653a88d410d0cfddd514f0d\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a46aa6dc98653a88d410d0cfddd514f0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ed8cd11a3a5c400d9bc11492d136dfd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0ed8cd11a3a5c400d9bc11492d136dfd\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a0ed8cd11a3a5c400d9bc11492d136dfd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01a1c3032bb193a5c4f37425adbe306c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01a1c3032bb193a5c4f37425adbe306c\"></a>\nstd::pair&lt; iterator, iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>equal_range</b> (const Key &amp;key)</td></tr>\n<tr class=\"separator:a01a1c3032bb193a5c4f37425adbe306c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af368c8d8f49a9a74706c9ed11f8fd7e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af368c8d8f49a9a74706c9ed11f8fd7e4\"></a>\nstd::pair&lt; const_iterator, <br class=\"typebreak\"/>\nconst_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>equal_range</b> (const Key &amp;key) const </td></tr>\n<tr class=\"separator:af368c8d8f49a9a74706c9ed11f8fd7e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2ce6da7cd62bc7425f0a29498332ab4\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">size</a> () const </td></tr>\n<tr class=\"memdesc:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of items in table. <br/></td></tr>\n<tr class=\"separator:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e05f2a1ca3accfb4252d7ee82d1e990\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\" title=\"Number of items in table. \">size()</a>==0. <br/></td></tr>\n<tr class=\"separator:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea0a0e5220a0dcb67da57d0280d36005\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">max_size</a> () const </td></tr>\n<tr class=\"memdesc:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upper bound on size. <br/></td></tr>\n<tr class=\"separator:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa067a2a4db1d96f38555369a89deee64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa067a2a4db1d96f38555369a89deee64\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">bucket_count</a> () const </td></tr>\n<tr class=\"memdesc:aa067a2a4db1d96f38555369a89deee64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the current number of buckets. <br/></td></tr>\n<tr class=\"separator:aa067a2a4db1d96f38555369a89deee64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a121865c574f8ae5cae69ed3d6b7e0511\"></a>\nallocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c8edf603bc776a6c84c007702c1808e\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">swap</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table)</td></tr>\n<tr class=\"memdesc:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">swap two instances. Iterators are invalidated <br/></td></tr>\n<tr class=\"separator:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac375d3884bf9c80efe56117757c822e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac375d3884bf9c80efe56117757c822e7\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">count</a> (const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:ac375d3884bf9c80efe56117757c822e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return count of items (0 or 1) <br/></td></tr>\n<tr class=\"separator:ac375d3884bf9c80efe56117757c822e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">find</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find item and acquire a read lock on the item.  <a href=\"#a27a3f296dc170ae25f8e3fd9efa93cff\">More...</a><br/></td></tr>\n<tr class=\"separator:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b61799e2018381b5ee4b78752a41483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a6b61799e2018381b5ee4b78752a41483\">find</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a6b61799e2018381b5ee4b78752a41483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find item and acquire a write lock on the item.  <a href=\"#a6b61799e2018381b5ee4b78752a41483\">More...</a><br/></td></tr>\n<tr class=\"separator:a6b61799e2018381b5ee4b78752a41483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item (if not already present) and acquire a read lock on the item.  <a href=\"#aaebb10a9e9dcb24e63860caa745a281d\">More...</a><br/></td></tr>\n<tr class=\"separator:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a766c6033c203e8f342501d85a7cf3405\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a766c6033c203e8f342501d85a7cf3405\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a766c6033c203e8f342501d85a7cf3405\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item (if not already present) and acquire a write lock on the item.  <a href=\"#a766c6033c203e8f342501d85a7cf3405\">More...</a><br/></td></tr>\n<tr class=\"separator:a766c6033c203e8f342501d85a7cf3405\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#ae0b420cdb752e749790c8a7daa15c3c2\">More...</a><br/></td></tr>\n<tr class=\"separator:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2047214e041b7674c3b83e204d0d6c6a\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a2047214e041b7674c3b83e204d0d6c6a\">More...</a><br/></td></tr>\n<tr class=\"separator:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8e39501f9edb3210504c9c4ca05384b7\">insert</a> (const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#a8e39501f9edb3210504c9c4ca05384b7\">More...</a><br/></td></tr>\n<tr class=\"separator:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a446910c1ca4818bdb00f4ffa91b9108a\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#a446910c1ca4818bdb00f4ffa91b9108a\">More...</a><br/></td></tr>\n<tr class=\"separator:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50c929e78ecfa36986c8821287665a70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a50c929e78ecfa36986c8821287665a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a50c929e78ecfa36986c8821287665a70\">More...</a><br/></td></tr>\n<tr class=\"separator:a50c929e78ecfa36986c8821287665a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">insert</a> (value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">More...</a><br/></td></tr>\n<tr class=\"separator:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">emplace</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#a382178ea2f00f69096c91bcf76ae7913\">More...</a><br/></td></tr>\n<tr class=\"separator:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a17e51c8864282c35aa4d23f22909cc4a\">emplace</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a17e51c8864282c35aa4d23f22909cc4a\">More...</a><br/></td></tr>\n<tr class=\"separator:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">emplace</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#acbe1d0f3a87786a83a7021af2ef52ee0\">More...</a><br/></td></tr>\n<tr class=\"separator:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab84dfd77316252cbf39c7ae89e365a00\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ab84dfd77316252cbf39c7ae89e365a00\">insert</a> (I first, I last)</td></tr>\n<tr class=\"memdesc:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert range [first, last) <br/></td></tr>\n<tr class=\"separator:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a580fdba266e87106ad41470479f641d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a580fdba266e87106ad41470479f641d6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a580fdba266e87106ad41470479f641d6\">insert</a> (std::initializer_list&lt; value_type &gt; il)</td></tr>\n<tr class=\"memdesc:a580fdba266e87106ad41470479f641d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert initializer list. <br/></td></tr>\n<tr class=\"separator:a580fdba266e87106ad41470479f641d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5144122dbb946d933b94a92117543b33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5144122dbb946d933b94a92117543b33\">erase</a> (const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a5144122dbb946d933b94a92117543b33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item.  <a href=\"#a5144122dbb946d933b94a92117543b33\">More...</a><br/></td></tr>\n<tr class=\"separator:a5144122dbb946d933b94a92117543b33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">erase</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item by <a class=\"el\" href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \">const_accessor</a>.  <a href=\"#a2ec6f95ed9beda9d32df56cdd45c1842\">More...</a><br/></td></tr>\n<tr class=\"separator:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">erase</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item by accessor.  <a href=\"#a3ed0fbcc6cfd4db8242e100355ac1fa5\">More...</a><br/></td></tr>\n<tr class=\"separator:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a81dddc5d509f7f074d84d9c38e83efb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a81dddc5d509f7f074d84d9c38e83efb9\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; <a class=\"el\" href=\"a00098.html\">node</a> &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node_allocator_type</b></td></tr>\n<tr class=\"separator:a81dddc5d509f7f074d84d9c38e83efb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:aed0e0def29516d9ee7aab2192727b69b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed0e0def29516d9ee7aab2192727b69b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>delete_node</b> (node_base *n)</td></tr>\n<tr class=\"separator:aed0e0def29516d9ee7aab2192727b69b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae44a70417f9674a2169f9a1fd437a3bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae44a70417f9674a2169f9a1fd437a3bd\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>search_bucket</b> (const key_type &amp;key, bucket *b) const </td></tr>\n<tr class=\"separator:ae44a70417f9674a2169f9a1fd437a3bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b57e036f82bc2b1ef1ede41b02d46b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b57e036f82bc2b1ef1ede41b02d46b5\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>\n<tr class=\"separator:a1b57e036f82bc2b1ef1ede41b02d46b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a319cf46fb9cf9a88aab6c0a20c98b3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">lookup</a> (bool op_insert, const Key &amp;key, const T *t, <a class=\"el\" href=\"a00061.html\">const_accessor</a> *result, bool write, <a class=\"el\" href=\"a00098.html\">node</a> *(*allocate_node)(node_allocator_type &amp;, const Key &amp;, const T *), <a class=\"el\" href=\"a00098.html\">node</a> *tmp_n=0)</td></tr>\n<tr class=\"memdesc:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert or find item and optionally acquire a lock on the item. <br/></td></tr>\n<tr class=\"separator:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6204ad5c57618556931e4c90e1938d1e\"></a>\ntemplate&lt;typename Accessor &gt; </td></tr>\n<tr class=\"memitem:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>generic_move_insert</b> (Accessor &amp;&amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a81c0a242bf8d4a210d74d551dbc61c18\"></a>\ntemplate&lt;typename Accessor , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>generic_emplace</b> (Accessor &amp;&amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6fec452b31b8f0e185dc2de64b7128b2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">exclude</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">delete item by accessor <br/></td></tr>\n<tr class=\"separator:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8603f5288db63ec35a16844427e97e42\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8603f5288db63ec35a16844427e97e42\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a8603f5288db63ec35a16844427e97e42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::pair&lt; I, I &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">internal_equal_range</a> (const Key &amp;key, I end) const </td></tr>\n<tr class=\"memdesc:a8603f5288db63ec35a16844427e97e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true) <br/></td></tr>\n<tr class=\"separator:a8603f5288db63ec35a16844427e97e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0bc3593f82b3b4f9839fc051780212ab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">internal_copy</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;source)</td></tr>\n<tr class=\"memdesc:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy \"source\" to *this, where *this must start out empty. <br/></td></tr>\n<tr class=\"separator:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76750c61ad670e130850148543f67147\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a76750c61ad670e130850148543f67147\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a76750c61ad670e130850148543f67147\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_copy</b> (I first, I last, size_type reserve_size)</td></tr>\n<tr class=\"separator:a76750c61ad670e130850148543f67147\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">internal_fast_find</a> (const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href=\"#acbb5b18c097fb32f264b7b5fe8d9fdd4\">More...</a><br/></td></tr>\n<tr class=\"separator:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:aa220373171ca2feccb74c23823c6329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa220373171ca2feccb74c23823c6329f\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_copy_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *t)</td></tr>\n<tr class=\"separator:aa220373171ca2feccb74c23823c6329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59416689b95d20f4d69e43a23aa4f300\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59416689b95d20f4d69e43a23aa4f300\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_move_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *t)</td></tr>\n<tr class=\"separator:a59416689b95d20f4d69e43a23aa4f300\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8e8388c1d433042b67d3cc12181189c3\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>allocate_node_emplace_construct</b> (node_allocator_type &amp;allocator, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f92f68816357df14d30650b29ab94cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f92f68816357df14d30650b29ab94cb\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_default_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *)</td></tr>\n<tr class=\"separator:a1f92f68816357df14d30650b29ab94cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a684cc0d3eb4b6ba8b88a14189c40bb20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a684cc0d3eb4b6ba8b88a14189c40bb20\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>do_not_allocate_node</b> (node_allocator_type &amp;, const Key &amp;, const T *)</td></tr>\n<tr class=\"separator:a684cc0d3eb4b6ba8b88a14189c40bb20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a2f3f082b2719a9e3c3c15a51a9564202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2f3f082b2719a9e3c3c15a51a9564202\"></a>\nnode_allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_allocator</b></td></tr>\n<tr class=\"separator:a2f3f082b2719a9e3c3c15a51a9564202\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae67c3c723768e7e396104f84577f7240\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67c3c723768e7e396104f84577f7240\"></a>\nHashCompare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ae67c3c723768e7e396104f84577f7240\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0ecadabdc31088d7bace5a0b6e5ee3f9\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::hash_map_iterator</b></td></tr>\n<tr class=\"separator:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad49112156111ee1b85be9f4b89e410ca\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::hash_map_range</b></td></tr>\n<tr class=\"separator:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584bf754a8408612d4bfd33a3eafd80d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a584bf754a8408612d4bfd33a3eafd80d\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_accessor</b></td></tr>\n<tr class=\"separator:a584bf754a8408612d4bfd33a3eafd80d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e234c756e22e65a3c99771fdeb67d7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e234c756e22e65a3c99771fdeb67d7a\"></a>\n<a class=\"el\" href=\"a00061.html\">const_accessor</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor_location</b> (<a class=\"el\" href=\"a00018.html\">accessor_not_used</a> const &amp;)</td></tr>\n<tr class=\"separator:a6e234c756e22e65a3c99771fdeb67d7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0216633e60539f42cf9d645d3f3b7117\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0216633e60539f42cf9d645d3f3b7117\"></a>\n<a class=\"el\" href=\"a00061.html\">const_accessor</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor_location</b> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;a)</td></tr>\n<tr class=\"separator:a0216633e60539f42cf9d645d3f3b7117\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa491682f70c12a8c7f783a427791ce4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa491682f70c12a8c7f783a427791ce4\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00017.html\">accessor</a> const &amp;)</td></tr>\n<tr class=\"separator:afa491682f70c12a8c7f783a427791ce4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34c835f5e1b689d1fbbff61519c0ef5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34c835f5e1b689d1fbbff61519c0ef5f\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> const &amp;)</td></tr>\n<tr class=\"separator:a34c835f5e1b689d1fbbff61519c0ef5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b4bdfdc062d155dc1ace8cc18acc8d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b4bdfdc062d155dc1ace8cc18acc8d6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00018.html\">accessor_not_used</a> const &amp;)</td></tr>\n<tr class=\"separator:a7b4bdfdc062d155dc1ace8cc18acc8d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</h3>\n\n<p>Unordered map from Key to T. </p>\n<pre class=\"fragment\">concurrent_hash_map is associative container with concurrent access.\n</pre><dl class=\"section user\"><dt>Compatibility</dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>\n<dl class=\"section user\"><dt>Exception Safety</dt><dd><ul>\n<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li>\n<li>If exception happens during <a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\" title=\"Insert item (if not already present) and acquire a read lock on the item. \">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li>\n<li>If exception happens during <a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\" title=\"Assignment. \">operator=()</a> operation, the container can have a part of source items, and methods <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\" title=\"Number of items in table. \">size()</a> and <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\" title=\"True if size()==0. \">empty()</a> can return wrong results.</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.1</dt><dd><ul>\n<li>Replaced internal algorithm and data structure. Patent is pending.</li>\n<li>Added buckets number argument for constructor</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.0</dt><dd><ul>\n<li>Fixed exception-safety</li>\n<li>Added template argument for allocator</li>\n<li>Added allocator argument in constructors</li>\n<li>Added constructor from a range of iterators</li>\n<li>Added several new overloaded <a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\" title=\"Insert item (if not already present) and acquire a read lock on the item. \">insert()</a> methods</li>\n<li>Added <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\" title=\"return allocator object \">get_allocator()</a></li>\n<li>Added <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\" title=\"swap two instances. Iterators are invalidated \">swap()</a></li>\n<li>Added <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\" title=\"Return count of items (0 or 1) \">count()</a></li>\n<li>Added overloaded <a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\" title=\"Erase item by accessor. \">erase(accessor &amp;)</a> and <a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\" title=\"Erase item by const_accessor. \">erase(const_accessor&amp;)</a></li>\n<li>Added equal_range() [const]</li>\n<li>Added [const_]pointer, [const_]reference, and allocator_type types</li>\n<li>Added global functions: operator==(), operator!=(), and <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\" title=\"swap two instances. Iterators are invalidated \">swap()</a> </li>\n</ul>\n</dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a382178ea2f00f69096c91bcf76ae7913\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a17e51c8864282c35aa4d23f22909cc4a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acbe1d0f3a87786a83a7021af2ef52ee0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5144122dbb946d933b94a92117543b33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Erase item. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n<p>References <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor::is_writer()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2ec6f95ed9beda9d32df56cdd45c1842\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item_accessor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Erase item by <a class=\"el\" href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \">const_accessor</a>. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3ed0fbcc6cfd4db8242e100355ac1fa5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item_accessor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Erase item by accessor. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a27a3f296dc170ae25f8e3fd9efa93cff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::find </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Find item and acquire a read lock on the item. </p>\n<p>Return true if item is found, false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6b61799e2018381b5ee4b78752a41483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::find </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Find item and acquire a write lock on the item. </p>\n<p>Return true if item is found, false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaebb10a9e9dcb24e63860caa745a281d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item (if not already present) and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a766c6033c203e8f342501d85a7cf3405\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item (if not already present) and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae0b420cdb752e749790c8a7daa15c3c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2047214e041b7674c3b83e204d0d6c6a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8e39501f9edb3210504c9c4ca05384b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a446910c1ca4818bdb00f4ffa91b9108a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a50c929e78ecfa36986c8821287665a70\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5d3da283d2e74c7ff0ecb0dfd4d371fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acbb5b18c097fb32f264b7b5fe8d9fdd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const_pointer <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::internal_fast_find </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Fast find when no concurrent erasure is used. For internal use inside TBB only! </p>\n<p>Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adf1fa9470c605731063e5949f0418eb7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::rehash </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em> = <code>0</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rehashes and optionally resizes the whole table. </p>\n<p>Useful to optimize performance before or after concurrent operations. Also enables using of <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\" title=\"Find item and acquire a read lock on the item. \">find()</a> and <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\" title=\"Return count of items (0 or 1) \">count()</a> concurrent methods in serial context. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00051.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00398.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00051.png\" usemap=\"#tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\" name=\"tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac498dc4d73a75cbc0d50a15622f06e13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac498dc4d73a75cbc0d50a15622f06e13\"></a>\ntypedef handle_object&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>handle</b></td></tr>\n<tr class=\"separator:ac498dc4d73a75cbc0d50a15622f06e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad4c0b512bb4ad5109eaae1519ba06d98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4c0b512bb4ad5109eaae1519ba06d98\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_lru_cache</b> (value_function_type f, std::size_t number_of_lru_history_items)</td></tr>\n<tr class=\"separator:ad4c0b512bb4ad5109eaae1519ba06d98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a632c3911a55cfda997acce279c471ec3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a632c3911a55cfda997acce279c471ec3\"></a>\nhandle_object&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (key_type k)</td></tr>\n<tr class=\"separator:a632c3911a55cfda997acce279c471ec3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ab9fb998ff3f90c4dc7cefd09f8ff1365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab9fb998ff3f90c4dc7cefd09f8ff1365\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::internal::aggregating_functor&lt; self_type, aggregated_operation_type &gt;</b></td></tr>\n<tr class=\"separator:ab9fb998ff3f90c4dc7cefd09f8ff1365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_lru_cache.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00052.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00383.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Concurrent priority queue.  \n <a href=\"a00052.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_priority_queue.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c75d97ae429019363ab6fd1a872512e\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a></td></tr>\n<tr class=\"memdesc:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4b7ed2ddc8ec6cc910f935c9d299c7a\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a></td></tr>\n<tr class=\"memdesc:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0bd617fe8e4657777e86f0ae15d8094f\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a></td></tr>\n<tr class=\"memdesc:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d3da9b47ec58e1c09e3550f702edcfc\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a></td></tr>\n<tr class=\"memdesc:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue. <br/></td></tr>\n<tr class=\"separator:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae010b1fa9c0942504737228474b51a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae010b1fa9c0942504737228474b51a0b\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">difference_type</a></td></tr>\n<tr class=\"memdesc:ae010b1fa9c0942504737228474b51a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:ae010b1fa9c0942504737228474b51a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1d2cebf242fa83d88eebdc3ad6891fb1\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a></td></tr>\n<tr class=\"memdesc:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a405be01bac4048f214797c287e2571a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a405be01bac4048f214797c287e2571a1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a405be01bac4048f214797c287e2571a1\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a405be01bac4048f214797c287e2571a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00052.html\" title=\"Concurrent priority queue. \">concurrent_priority_queue</a> with default capacity. <br/></td></tr>\n<tr class=\"separator:a405be01bac4048f214797c287e2571a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a43c3917ea8a19cf1fec947e29ad4ff3e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a43c3917ea8a19cf1fec947e29ad4ff3e\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> init_capacity, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00052.html\" title=\"Concurrent priority queue. \">concurrent_priority_queue</a> with init_sz capacity. <br/></td></tr>\n<tr class=\"separator:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0cebee26cc0d00d4dcbb1c74e08029f7\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a0cebee26cc0d00d4dcbb1c74e08029f7\">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa8ac175143e12db29a014674a392b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa8ac175143e12db29a014674a392b38\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aaa8ac175143e12db29a014674a392b38\">concurrent_priority_queue</a> (std::initializer_list&lt; T &gt; init_list, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:aaa8ac175143e12db29a014674a392b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from std::initializer_list. <br/></td></tr>\n<tr class=\"separator:aaa8ac175143e12db29a014674a392b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a332d26234f9c37a6b7ba269c648815d0\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src)</td></tr>\n<tr class=\"memdesc:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor.  <a href=\"#a332d26234f9c37a6b7ba269c648815d0\">More...</a><br/></td></tr>\n<tr class=\"separator:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa52cea369b6630699ee78cc42622be9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aa52cea369b6630699ee78cc42622be9d\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"memdesc:aa52cea369b6630699ee78cc42622be9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor with specific allocator.  <a href=\"#aa52cea369b6630699ee78cc42622be9d\">More...</a><br/></td></tr>\n<tr class=\"separator:aa52cea369b6630699ee78cc42622be9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">operator=</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src)</td></tr>\n<tr class=\"memdesc:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment operator.  <a href=\"#ac0c3f41b10f04547f3438517c40cf8a5\">More...</a><br/></td></tr>\n<tr class=\"separator:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae9ac965bbac3933c7db89f512adfcbcb\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor.  <a href=\"#ae9ac965bbac3933c7db89f512adfcbcb\">More...</a><br/></td></tr>\n<tr class=\"separator:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"memdesc:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor with specific allocator.  <a href=\"#a14dd20a4673f77cff3eb6f269a888016\">More...</a><br/></td></tr>\n<tr class=\"separator:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">operator=</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move assignment operator.  <a href=\"#a9b21bd56aff8c412c5fcdd0d88b48c98\">More...</a><br/></td></tr>\n<tr class=\"separator:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac64c7b627708f0d6b2e5421fb0d49150\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac64c7b627708f0d6b2e5421fb0d49150\">assign</a> (InputIterator begin, InputIterator end)</td></tr>\n<tr class=\"memdesc:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign the queue from [begin,end) range, not thread-safe. <br/></td></tr>\n<tr class=\"separator:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1b3a945aac5a17c85d56756cc6aa3d1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">assign</a> (std::initializer_list&lt; T &gt; il)</td></tr>\n<tr class=\"memdesc:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign the queue from std::initializer_list, not thread-safe. <br/></td></tr>\n<tr class=\"separator:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7eaa05dcb74604e45e0e2c55e1e456e9\"></a>\n<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">operator=</a> (std::initializer_list&lt; T &gt; il)</td></tr>\n<tr class=\"memdesc:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign from std::initializer_list, not thread-safe. <br/></td></tr>\n<tr class=\"separator:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if empty, false otherwise.  <a href=\"#a8dec2dd0e8b22af14f1753eaef1bf5eb\">More...</a><br/></td></tr>\n<tr class=\"separator:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">size</a> () const </td></tr>\n<tr class=\"memdesc:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the current number of elements contained in the queue.  <a href=\"#a7d86ba200474b51ec99a6b917429c6bb\">More...</a><br/></td></tr>\n<tr class=\"separator:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">push</a> (<a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a> elem)</td></tr>\n<tr class=\"memdesc:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href=\"#a1bfa0e7269b3407d6bb5c706264d2406\">More...</a><br/></td></tr>\n<tr class=\"separator:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">push</a> (<a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> &amp;&amp;elem)</td></tr>\n<tr class=\"memdesc:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href=\"#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">More...</a><br/></td></tr>\n<tr class=\"separator:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">emplace</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new element using args as the arguments for its construction and pushes it onto the queue */.  <a href=\"#a278d208cd92e5aeccc9c7f6fc192e3ce\">More...</a><br/></td></tr>\n<tr class=\"separator:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">try_pop</a> (<a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a> elem)</td></tr>\n<tr class=\"memdesc:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a reference to and removes highest priority element.  <a href=\"#a954177b09e184cf3db47f1b180a7ef5e\">More...</a><br/></td></tr>\n<tr class=\"separator:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2459166998a4103880d603b237c429e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a2459166998a4103880d603b237c429e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear the queue; not thread-safe.  <a href=\"#a2459166998a4103880d603b237c429e6\">More...</a><br/></td></tr>\n<tr class=\"separator:a2459166998a4103880d603b237c429e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">swap</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;q)</td></tr>\n<tr class=\"memdesc:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Swap this queue with another; not thread-safe.  <a href=\"#aa6ee6d356e538b67a7cb4e242e6e36c9\">More...</a><br/></td></tr>\n<tr class=\"separator:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a312e88e51246da4c516d35abbb30721a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a312e88e51246da4c516d35abbb30721a\"></a>\n<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a312e88e51246da4c516d35abbb30721a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return allocator object. <br/></td></tr>\n<tr class=\"separator:a312e88e51246da4c516d35abbb30721a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename Compare = std::less&lt;T&gt;, typename A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</h3>\n\n<p>Concurrent priority queue. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a332d26234f9c37a6b7ba269c648815d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Copy constructor. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa52cea369b6630699ee78cc42622be9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Copy constructor with specific allocator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae9ac965bbac3933c7db89f512adfcbcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move constructor. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a14dd20a4673f77cff3eb6f269a888016\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move constructor with specific allocator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a2459166998a4103880d603b237c429e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::clear </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clear the queue; not thread-safe. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a278d208cd92e5aeccc9c7f6fc192e3ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Constructs a new element using args as the arguments for its construction and pushes it onto the queue */. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8dec2dd0e8b22af14f1753eaef1bf5eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::empty </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if empty, false otherwise. </p>\n<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac0c3f41b10f04547f3438517c40cf8a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&amp; <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::operator= </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Assignment operator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9b21bd56aff8c412c5fcdd0d88b48c98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&amp; <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::operator= </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move assignment operator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1bfa0e7269b3407d6bb5c706264d2406\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::push </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a>&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a72ff26945c61b4ce3ce7ca0f9b9aaa48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::push </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7d86ba200474b51ec99a6b917429c6bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns the current number of elements contained in the queue. </p>\n<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa6ee6d356e538b67a7cb4e242e6e36c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::swap </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Swap this queue with another; not thread-safe. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a954177b09e184cf3db47f1b180a7ef5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a>&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a reference to and removes highest priority element. </p>\n<p>If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00053.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>strict_ppl</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00430.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A high-performance thread-safe non-blocking concurrent queue.  \n <a href=\"a00053.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_queue.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::strict_ppl::concurrent_queue&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00053.png\" usemap=\"#tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\" name=\"tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeeee93a7ac2eecc80bbf3e857e900538\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">value_type</a></td></tr>\n<tr class=\"memdesc:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab26ddf11b15d61ac87e6c1ae67af92a2\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">reference</a></td></tr>\n<tr class=\"memdesc:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a478c2b7f763b2e821e01cc14e13baf4c\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">const_reference</a></td></tr>\n<tr class=\"memdesc:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f883e49afea16293ba92da779981bb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f883e49afea16293ba92da779981bb8\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a></td></tr>\n<tr class=\"memdesc:a9f883e49afea16293ba92da779981bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue. <br/></td></tr>\n<tr class=\"separator:a9f883e49afea16293ba92da779981bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63b42d83a9ed13fc6741e0b4388b0e96\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">difference_type</a></td></tr>\n<tr class=\"memdesc:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbdd1a5bd034358fb0774b322a66b1ed\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a></td></tr>\n<tr class=\"memdesc:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1361aa7fd454fe593609be740ab8a4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1361aa7fd454fe593609be740ab8a4c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00053.html\">concurrent_queue</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:ab1361aa7fd454fe593609be740ab8a4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a674e375edf0a3463ae1cec5d6158593d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a674e375edf0a3463ae1cec5d6158593d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00053.html\">concurrent_queue</a>, const T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a674e375edf0a3463ae1cec5d6158593d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49b2e16902577cd3174355be0fa684e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b2e16902577cd3174355be0fa684e5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">concurrent_queue</a> (const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a49b2e16902577cd3174355be0fa684e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty queue. <br/></td></tr>\n<tr class=\"separator:a49b2e16902577cd3174355be0fa684e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a43ac953152e60815c09fe4a4d4a623a9\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a43ac953152e60815c09fe4a4d4a623a9\">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae918807d098d5d5b41cc6d606fa2e7a1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ae918807d098d5d5b41cc6d606fa2e7a1\">concurrent_queue</a> (const <a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;src, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc04574f4d7d41fd5cad779508394740\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc04574f4d7d41fd5cad779508394740\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#acc04574f4d7d41fd5cad779508394740\">concurrent_queue</a> (<a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:acc04574f4d7d41fd5cad779508394740\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructors. <br/></td></tr>\n<tr class=\"separator:acc04574f4d7d41fd5cad779508394740\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a22f35cb396178d494a3756d5700e2865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a22f35cb396178d494a3756d5700e2865\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_queue</b> (<a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"separator:a22f35cb396178d494a3756d5700e2865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0056b242f280f5e25332ce998f9f670\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0056b242f280f5e25332ce998f9f670\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">~concurrent_queue</a> ()</td></tr>\n<tr class=\"memdesc:aa0056b242f280f5e25332ce998f9f670\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy queue. <br/></td></tr>\n<tr class=\"separator:aa0056b242f280f5e25332ce998f9f670\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9330ca6590980d80ef7b1ea3613a699a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a40f743f7eb92bb709cb7feb86d340885\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a40f743f7eb92bb709cb7feb86d340885\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>push</b> (T &amp;&amp;source)</td></tr>\n<tr class=\"separator:a40f743f7eb92bb709cb7feb86d340885\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4647d9bf5fd03b0850ada381916e9728\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">try_pop</a> (T &amp;result)</td></tr>\n<tr class=\"memdesc:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attempt to dequeue an item from head of queue.  <a href=\"#aabb1acef18196fa11ed7db8e046c3943\">More...</a><br/></td></tr>\n<tr class=\"separator:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad4b253ba595637b0b146eb6565556f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad4b253ba595637b0b146eb6565556f2\"></a>\n<a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">unsafe_size</a> () const </td></tr>\n<tr class=\"memdesc:aad4b253ba595637b0b146eb6565556f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the number of items in the queue; thread unsafe. <br/></td></tr>\n<tr class=\"separator:aad4b253ba595637b0b146eb6565556f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeda3156929d0c250faed7b807ca6ab0e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Equivalent to size()==0. <br/></td></tr>\n<tr class=\"separator:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3384818fb6350a494d5ec62445e59ee\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear the queue. not thread-safe. <br/></td></tr>\n<tr class=\"separator:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f2b39f350281590b86db906eca6c480\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f2b39f350281590b86db906eca6c480\"></a>\n<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a7f2b39f350281590b86db906eca6c480\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return allocator object. <br/></td></tr>\n<tr class=\"separator:a7f2b39f350281590b86db906eca6c480\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6658faeae3c10135a553fedadddde239\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6658faeae3c10135a553fedadddde239\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> ()</td></tr>\n<tr class=\"separator:a6658faeae3c10135a553fedadddde239\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa7593de5e76006ed3adef4d060f0009c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa7593de5e76006ed3adef4d060f0009c\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> ()</td></tr>\n<tr class=\"separator:aa7593de5e76006ed3adef4d060f0009c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f84b37020f4267f17c7e91acfc0c446\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f84b37020f4267f17c7e91acfc0c446\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> () const </td></tr>\n<tr class=\"separator:a0f84b37020f4267f17c7e91acfc0c446\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a118a79d7e20cdbd807fa7fccc2a5b848\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a118a79d7e20cdbd807fa7fccc2a5b848\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> () const </td></tr>\n<tr class=\"separator:a118a79d7e20cdbd807fa7fccc2a5b848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1f5eec0de2e660ea5372d19393f0920b\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concurrent_queue_iterator</b></td></tr>\n<tr class=\"separator:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</h3>\n\n<p>A high-performance thread-safe non-blocking concurrent queue. </p>\n<p>Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aabb1acef18196fa11ed7db8e046c3943\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue</a>&lt; T, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attempt to dequeue an item from head of queue. </p>\n<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00054.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00385.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00054.png\" usemap=\"#tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a35d2ace709769b7059e8f8b2a144f8b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35d2ace709769b7059e8f8b2a144f8b9\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a35d2ace709769b7059e8f8b2a144f8b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9260034417dde6b3810347c5e347a9f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9260034417dde6b3810347c5e347a9f8\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a9260034417dde6b3810347c5e347a9f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ece8ff3de51bc415d8fc1338f793cbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ece8ff3de51bc415d8fc1338f793cbf\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a8ece8ff3de51bc415d8fc1338f793cbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afeef87b046af352e20cd92e56c0fcf34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afeef87b046af352e20cd92e56c0fcf34\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:afeef87b046af352e20cd92e56c0fcf34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21f5f2fbf3b1f721051c6b4c5fa2a735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21f5f2fbf3b1f721051c6b4c5fa2a735\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a21f5f2fbf3b1f721051c6b4c5fa2a735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa15c94df26d89ef38daa7516df5e0729\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa15c94df26d89ef38daa7516df5e0729\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:aa15c94df26d89ef38daa7516df5e0729\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1acd4ab50584a9dc55712e0e113583e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1acd4ab50584a9dc55712e0e113583e2\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a1acd4ab50584a9dc55712e0e113583e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e29fb2f75cdec0746afdbed0b9c5451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e29fb2f75cdec0746afdbed0b9c5451\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a7e29fb2f75cdec0746afdbed0b9c5451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5d26f7002e7810e4c02890a1d7bdc41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5d26f7002e7810e4c02890a1d7bdc41\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:ab5d26f7002e7810e4c02890a1d7bdc41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01e118e1e0bfe57083d8f76f4f848d2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01e118e1e0bfe57083d8f76f4f848d2b\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a01e118e1e0bfe57083d8f76f4f848d2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad1072935f6765abe3ec1b04f24f80deb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1072935f6765abe3ec1b04f24f80deb\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:ad1072935f6765abe3ec1b04f24f80deb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae31360122b604d6735b12fc027f10924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae31360122b604d6735b12fc027f10924\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ae31360122b604d6735b12fc027f10924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f903f0ca898b0aa80e3a6b921b8f21a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f903f0ca898b0aa80e3a6b921b8f21a\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a0f903f0ca898b0aa80e3a6b921b8f21a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a267aff808d10aa0c437fd9261286467e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a267aff808d10aa0c437fd9261286467e\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a267aff808d10aa0c437fd9261286467e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c2d1a61d1e6ed09fb3df14270d61a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5c2d1a61d1e6ed09fb3df14270d61a01\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a5c2d1a61d1e6ed09fb3df14270d61a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a744c0cf93efb5a134d6ddfb3a5fb75d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a744c0cf93efb5a134d6ddfb3a5fb75d3\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a744c0cf93efb5a134d6ddfb3a5fb75d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5df36261f0e5a1aea64235702fdacb62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5df36261f0e5a1aea64235702fdacb62\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:a5df36261f0e5a1aea64235702fdacb62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aeeabd4bffe47ad7a300ae896c06dc46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeeabd4bffe47ad7a300ae896c06dc46c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:aeeabd4bffe47ad7a300ae896c06dc46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad0e15127e237c29c923db83fb509f624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad0e15127e237c29c923db83fb509f624\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ad0e15127e237c29c923db83fb509f624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab494f2ac22495884f64985fba6ade501\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab494f2ac22495884f64985fba6ade501\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:ab494f2ac22495884f64985fba6ade501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:ab494f2ac22495884f64985fba6ade501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a788a7225915574c1a349abc0f1f653c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a788a7225915574c1a349abc0f1f653c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">concurrent_unordered_map</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a788a7225915574c1a349abc0f1f653c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a788a7225915574c1a349abc0f1f653c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1593b0f93256736d163cfbcc23c7de26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1593b0f93256736d163cfbcc23c7de26\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table)</td></tr>\n<tr class=\"separator:a1593b0f93256736d163cfbcc23c7de26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47b4eec40fac7fb8b6a8023758c1a34c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47b4eec40fac7fb8b6a8023758c1a34c\"></a>\n<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table)</td></tr>\n<tr class=\"separator:a47b4eec40fac7fb8b6a8023758c1a34c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a53dcf022c4bd65f438b377a23a9c1bae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a53dcf022c4bd65f438b377a23a9c1bae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a53dcf022c4bd65f438b377a23a9c1bae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73f8e707280b4e55a9ead393fbb012c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73f8e707280b4e55a9ead393fbb012c8\"></a>\n<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a73f8e707280b4e55a9ead393fbb012c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab22288d418827a312aee4191bb6a7f11\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab22288d418827a312aee4191bb6a7f11\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ab22288d418827a312aee4191bb6a7f11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e1cce13f9fa458a616b424c84790c25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2e1cce13f9fa458a616b424c84790c25\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a2e1cce13f9fa458a616b424c84790c25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae49177d89c80434a30aa346201abb986\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae49177d89c80434a30aa346201abb986\"></a>\nmapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (const key_type &amp;key)</td></tr>\n<tr class=\"separator:ae49177d89c80434a30aa346201abb986\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2e1ccbd986686ef2e93c880a965e861\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af2e1ccbd986686ef2e93c880a965e861\"></a>\nmapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>at</b> (const key_type &amp;key)</td></tr>\n<tr class=\"separator:af2e1ccbd986686ef2e93c880a965e861\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a54173c11cd3bc91b491b3f83375868e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a54173c11cd3bc91b491b3f83375868e4\"></a>\nconst mapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>at</b> (const key_type &amp;key) const </td></tr>\n<tr class=\"separator:a54173c11cd3bc91b491b3f83375868e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00055.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00384.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a3a4d3aae580451e86649ce3a3ae38894\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>allow_multimapping</b> = Allow_multimapping\n }</td></tr>\n<tr class=\"separator:a3a4d3aae580451e86649ce3a3ae38894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0c77b12f17473e24cda4b60b38e847fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0c77b12f17473e24cda4b60b38e847fd\"></a>\ntypedef std::pair&lt; const Key, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a0c77b12f17473e24cda4b60b38e847fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a133cf0868239271387488f6067ce56ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a133cf0868239271387488f6067ce56ee\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a133cf0868239271387488f6067ce56ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdf65dc261abb44bd733ebab0f54f01b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afdf65dc261abb44bd733ebab0f54f01b\"></a>\ntypedef Hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hash_compare</b></td></tr>\n<tr class=\"separator:afdf65dc261abb44bd733ebab0f54f01b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5f015ac2f9770d8cd69d0656447b66ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f015ac2f9770d8cd69d0656447b66ac\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; value_type &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a5f015ac2f9770d8cd69d0656447b66ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:ae9e1e3147bd444fb77c544ef7ecb5bef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9e1e3147bd444fb77c544ef7ecb5bef\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map_traits</b> (const hash_compare &amp;hc)</td></tr>\n<tr class=\"separator:ae9e1e3147bd444fb77c544ef7ecb5bef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a561f2cf05060387c8282ad57f5c816ca\"></a>\ntemplate&lt;class Type1 , class Type2 &gt; </td></tr>\n<tr class=\"memitem:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static const Key &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>get_key</b> (const std::pair&lt; Type1, Type2 &gt; &amp;value)</td></tr>\n<tr class=\"separator:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ad8f108aa7fc21e9e38050a9d56e691b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad8f108aa7fc21e9e38050a9d56e691b7\"></a>\nhash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ad8f108aa7fc21e9e38050a9d56e691b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00056.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00386.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00056.png\" usemap=\"#tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a13c740f45a112984c9a0c6d0d0a1a4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a13c740f45a112984c9a0c6d0d0a1a4d8\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a13c740f45a112984c9a0c6d0d0a1a4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b89d9eeca4d1c194433b40671da2bf2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b89d9eeca4d1c194433b40671da2bf2\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a1b89d9eeca4d1c194433b40671da2bf2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a627d86449ed7299d1baa4b09b6dd93f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a627d86449ed7299d1baa4b09b6dd93f6\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a627d86449ed7299d1baa4b09b6dd93f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8485b8d61b666ac6ddd81e1d4b286d5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8485b8d61b666ac6ddd81e1d4b286d5e\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:a8485b8d61b666ac6ddd81e1d4b286d5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72a124e1c8c64499677e58171a7b9383\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72a124e1c8c64499677e58171a7b9383\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a72a124e1c8c64499677e58171a7b9383\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ecb30201df0bd885fbba309b2392bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ecb30201df0bd885fbba309b2392bd4\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:a6ecb30201df0bd885fbba309b2392bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaeeee0c045e0003b85f60a6851d1d827\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeeee0c045e0003b85f60a6851d1d827\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:aaeeee0c045e0003b85f60a6851d1d827\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a029187ffe49ae876f41dfca39fe6f288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a029187ffe49ae876f41dfca39fe6f288\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a029187ffe49ae876f41dfca39fe6f288\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55c029b4a58d1201e08ef5ba14fc0a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a55c029b4a58d1201e08ef5ba14fc0a66\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a55c029b4a58d1201e08ef5ba14fc0a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4613be39e17bc83cf85d3b90a13fa09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4613be39e17bc83cf85d3b90a13fa09\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:ac4613be39e17bc83cf85d3b90a13fa09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b9ef2bc9a8574b16ef678e838ff4e96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b9ef2bc9a8574b16ef678e838ff4e96\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a0b9ef2bc9a8574b16ef678e838ff4e96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49038d8ed5f392bce440d7906b39ee53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49038d8ed5f392bce440d7906b39ee53\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a49038d8ed5f392bce440d7906b39ee53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a517a0b94b44d429f7f23b6d9f5366b36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a517a0b94b44d429f7f23b6d9f5366b36\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a517a0b94b44d429f7f23b6d9f5366b36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a494392b2f3400393ae2696a70e2411f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a494392b2f3400393ae2696a70e2411f4\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a494392b2f3400393ae2696a70e2411f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2460242ba39d70a0473eac4ee62b898c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2460242ba39d70a0473eac4ee62b898c\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a2460242ba39d70a0473eac4ee62b898c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75ad2607efde410d591002203deb65e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a75ad2607efde410d591002203deb65e6\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a75ad2607efde410d591002203deb65e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7647068dd628f35d3e3f7ed161b3fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7647068dd628f35d3e3f7ed161b3fc0\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:ab7647068dd628f35d3e3f7ed161b3fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4ea5780bcc8664253e2180987bc775d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ea5780bcc8664253e2180987bc775d0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a4ea5780bcc8664253e2180987bc775d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2fe78524a0f0cd268194cf2461e3ab0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2fe78524a0f0cd268194cf2461e3ab0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ae2fe78524a0f0cd268194cf2461e3ab0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a174ad09d37e0f648e06ded3abfa65bed\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5957d29e5fa9f8c53538de3f7a41ebc9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">concurrent_unordered_multimap</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aacf347cd41c61dd026e844fa9311130c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aacf347cd41c61dd026e844fa9311130c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table)</td></tr>\n<tr class=\"separator:aacf347cd41c61dd026e844fa9311130c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a58939ac30bfced4b6e2cf0377c1b7d71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a58939ac30bfced4b6e2cf0377c1b7d71\"></a>\n<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table)</td></tr>\n<tr class=\"separator:a58939ac30bfced4b6e2cf0377c1b7d71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac339429f4f36730ff3614cb7fcb257cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac339429f4f36730ff3614cb7fcb257cb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:ac339429f4f36730ff3614cb7fcb257cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e9a928751361cec49b26afa38018208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e9a928751361cec49b26afa38018208\"></a>\n<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a5e9a928751361cec49b26afa38018208\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a040b7c942e77cca30b0ab423ae7a2d87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a040b7c942e77cca30b0ab423ae7a2d87\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a040b7c942e77cca30b0ab423ae7a2d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34148bd7279ce189a6c0c26380df0a2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34148bd7279ce189a6c0c26380df0a2a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a34148bd7279ce189a6c0c26380df0a2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00057.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00389.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00057.png\" usemap=\"#tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:af1eb846a05a4e2d30a3ff7f66acad7c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1eb846a05a4e2d30a3ff7f66acad7c7\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:af1eb846a05a4e2d30a3ff7f66acad7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a559df68fc84a16b494a9638085c7379b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a559df68fc84a16b494a9638085c7379b\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a559df68fc84a16b494a9638085c7379b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada492d245619aac2683b57c9f52106c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada492d245619aac2683b57c9f52106c7\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:ada492d245619aac2683b57c9f52106c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6b0ed8e5a20690cc06644520d0e5ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6b0ed8e5a20690cc06644520d0e5ef3\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:ab6b0ed8e5a20690cc06644520d0e5ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3d8b36c79741c229cf9a5c9d93516b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3d8b36c79741c229cf9a5c9d93516b7\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:aa3d8b36c79741c229cf9a5c9d93516b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ec7f32ab51ebbfdb06d57ab8b17044b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ec7f32ab51ebbfdb06d57ab8b17044b\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:a8ec7f32ab51ebbfdb06d57ab8b17044b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f89a49912b58d42ddbb3f344b6304ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f89a49912b58d42ddbb3f344b6304ca\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a1f89a49912b58d42ddbb3f344b6304ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4ff41efe0ead5030b011c999dd748de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4ff41efe0ead5030b011c999dd748de\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:ad4ff41efe0ead5030b011c999dd748de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4327ff04c8a5dc7653b47763263b9f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4327ff04c8a5dc7653b47763263b9f9\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:ab4327ff04c8a5dc7653b47763263b9f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef5518b17cd9da59b9e6d9b9374f5245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef5518b17cd9da59b9e6d9b9374f5245\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:aef5518b17cd9da59b9e6d9b9374f5245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7084b7dd3f9b1df0ffdd520529e87f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7084b7dd3f9b1df0ffdd520529e87f3c\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a7084b7dd3f9b1df0ffdd520529e87f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad04d6c35ee079e8a49d38744c8f305b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad04d6c35ee079e8a49d38744c8f305b3\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ad04d6c35ee079e8a49d38744c8f305b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e9babf06dc79948bb787793a7cb0d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e9babf06dc79948bb787793a7cb0d37\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a6e9babf06dc79948bb787793a7cb0d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a229ae1c0786ea9509c66256fcf1c8f47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a229ae1c0786ea9509c66256fcf1c8f47\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a229ae1c0786ea9509c66256fcf1c8f47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69ed6ae85fe54e53b2804b61a6f30fa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69ed6ae85fe54e53b2804b61a6f30fa2\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a69ed6ae85fe54e53b2804b61a6f30fa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a532cdc67028e27231846b41bfd9a0e26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a532cdc67028e27231846b41bfd9a0e26\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a532cdc67028e27231846b41bfd9a0e26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4f42202dd9f2bc114c9411928431217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af4f42202dd9f2bc114c9411928431217\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:af4f42202dd9f2bc114c9411928431217\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afa7c1f095ac1f56c7811811aabe6b77c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa7c1f095ac1f56c7811811aabe6b77c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:afa7c1f095ac1f56c7811811aabe6b77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf8c095a7be6913dd96e22a6ce9af187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf8c095a7be6913dd96e22a6ce9af187\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:adf8c095a7be6913dd96e22a6ce9af187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2eede1ccad9975aac7acbffbd991e26c\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15631f048043195863c66bad6533bccb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15631f048043195863c66bad6533bccb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">concurrent_unordered_multiset</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a15631f048043195863c66bad6533bccb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a15631f048043195863c66bad6533bccb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3110fb1a6f8e2a3071d2acbe4b7b154b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3110fb1a6f8e2a3071d2acbe4b7b154b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table)</td></tr>\n<tr class=\"separator:a3110fb1a6f8e2a3071d2acbe4b7b154b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1fb116ee3fdf6c6c810fe21eb01e209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1fb116ee3fdf6c6c810fe21eb01e209\"></a>\n<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table)</td></tr>\n<tr class=\"separator:ac1fb116ee3fdf6c6c810fe21eb01e209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb435d8d31e95357c2f59656ec96dbbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb435d8d31e95357c2f59656ec96dbbb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:aeb435d8d31e95357c2f59656ec96dbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6c980c4bf29824a52610d94e6597b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6c980c4bf29824a52610d94e6597b28\"></a>\n<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:ab6c980c4bf29824a52610d94e6597b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa0a295004627bb5473b4371c6e20c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa0a295004627bb5473b4371c6e20c80\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:aaa0a295004627bb5473b4371c6e20c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a229089da66522fd4f3d77e9f57e19fbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a229089da66522fd4f3d77e9f57e19fbb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a229089da66522fd4f3d77e9f57e19fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00058.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00388.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00058.png\" usemap=\"#tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:afad91155e1803ee686e5f42637594e7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afad91155e1803ee686e5f42637594e7b\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:afad91155e1803ee686e5f42637594e7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a461fe414bf3ae73e7cc57e851ff592e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a461fe414bf3ae73e7cc57e851ff592e4\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a461fe414bf3ae73e7cc57e851ff592e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3a64703b55d07509d5c88810c2342ba5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3a64703b55d07509d5c88810c2342ba5\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a3a64703b55d07509d5c88810c2342ba5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6952de8a7ff93025c1065bb3e729da72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6952de8a7ff93025c1065bb3e729da72\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:a6952de8a7ff93025c1065bb3e729da72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a376a7355aa091fff6a30689141407acd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a376a7355aa091fff6a30689141407acd\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a376a7355aa091fff6a30689141407acd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc450473249e39658c46596d8252eef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc450473249e39658c46596d8252eef0\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:acc450473249e39658c46596d8252eef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2010e490e8bfb13d9b969ec2fd5e4de4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2010e490e8bfb13d9b969ec2fd5e4de4\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a2010e490e8bfb13d9b969ec2fd5e4de4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5a8c52d4a2b57b9b4b5d889e96d88f44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5a8c52d4a2b57b9b4b5d889e96d88f44\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a5a8c52d4a2b57b9b4b5d889e96d88f44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a281276279a33ef1c5dfba5c196118ae7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a281276279a33ef1c5dfba5c196118ae7\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a281276279a33ef1c5dfba5c196118ae7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aec3d473d0fa601d51f13efe605cd9862\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aec3d473d0fa601d51f13efe605cd9862\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:aec3d473d0fa601d51f13efe605cd9862\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7da53912d0deffca91618b73ed4995f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7da53912d0deffca91618b73ed4995f\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:ab7da53912d0deffca91618b73ed4995f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5808a50995fc228f114c3c93aeddf331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5808a50995fc228f114c3c93aeddf331\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a5808a50995fc228f114c3c93aeddf331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7aaed1937820a90cb657a824e1391c1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7aaed1937820a90cb657a824e1391c1f\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a7aaed1937820a90cb657a824e1391c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abb76557f1755f96dc2e78728cb231e57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abb76557f1755f96dc2e78728cb231e57\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:abb76557f1755f96dc2e78728cb231e57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a983d10264bc785a59b11dc94001e0042\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a983d10264bc785a59b11dc94001e0042\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a983d10264bc785a59b11dc94001e0042\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acb12b4b1df9a7108a5193b0d3bbfc677\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acb12b4b1df9a7108a5193b0d3bbfc677\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:acb12b4b1df9a7108a5193b0d3bbfc677\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af111bc738ee2a1b4b1cf2967a1252322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af111bc738ee2a1b4b1cf2967a1252322\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:af111bc738ee2a1b4b1cf2967a1252322\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aad5e3bd7fa156e5d8aa81a8ff560d84e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad5e3bd7fa156e5d8aa81a8ff560d84e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:aad5e3bd7fa156e5d8aa81a8ff560d84e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d307ae4ebb3e2d46b0a75713824d109\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2d307ae4ebb3e2d46b0a75713824d109\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a2d307ae4ebb3e2d46b0a75713824d109\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afd4bc55194c4473e81398d8456a5c68a\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f6d5ecff239ff13000848e925904fe7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">concurrent_unordered_set</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3c68d5286d6ca29fba2b38c59bdbc66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac3c68d5286d6ca29fba2b38c59bdbc66\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table)</td></tr>\n<tr class=\"separator:ac3c68d5286d6ca29fba2b38c59bdbc66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39097dddf99fd057919197b8293bd807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39097dddf99fd057919197b8293bd807\"></a>\n<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table)</td></tr>\n<tr class=\"separator:a39097dddf99fd057919197b8293bd807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9dde7a48af7449fde97d4449691207c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9dde7a48af7449fde97d4449691207c5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a9dde7a48af7449fde97d4449691207c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49ad03a5e20f90beac704325aaa6567f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49ad03a5e20f90beac704325aaa6567f\"></a>\n<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a49ad03a5e20f90beac704325aaa6567f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ef0de826333371f1e9cb33349b35baf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ef0de826333371f1e9cb33349b35baf\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a6ef0de826333371f1e9cb33349b35baf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecea62fe5c8beab0d7907dbc33ef583f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecea62fe5c8beab0d7907dbc33ef583f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:aecea62fe5c8beab0d7907dbc33ef583f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00059.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00387.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a10fca95c59a7c0542d2d6bc1b8306e1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>allow_multimapping</b> = Allow_multimapping\n }</td></tr>\n<tr class=\"separator:a10fca95c59a7c0542d2d6bc1b8306e1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a935ab6e249964c5a7e1caffd308bf008\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a935ab6e249964c5a7e1caffd308bf008\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a935ab6e249964c5a7e1caffd308bf008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b1d770b7db20b5d0d51af0b910aebb2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b1d770b7db20b5d0d51af0b910aebb2\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a8b1d770b7db20b5d0d51af0b910aebb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3c1ef314e63eb78db91ce99cb8617b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3c1ef314e63eb78db91ce99cb8617b87\"></a>\ntypedef Hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hash_compare</b></td></tr>\n<tr class=\"separator:a3c1ef314e63eb78db91ce99cb8617b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a453126bb05d3c798914cb91852e0b3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a453126bb05d3c798914cb91852e0b3a5\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; value_type &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a453126bb05d3c798914cb91852e0b3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a958c02e4dbd967575a9f03290bb0cad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a958c02e4dbd967575a9f03290bb0cad3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set_traits</b> (const hash_compare &amp;hc)</td></tr>\n<tr class=\"separator:a958c02e4dbd967575a9f03290bb0cad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a3f4bfe96ddb3db04d4701e06611fc73d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3f4bfe96ddb3db04d4701e06611fc73d\"></a>\nstatic const Key &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_key</b> (const value_type &amp;value)</td></tr>\n<tr class=\"separator:a3f4bfe96ddb3db04d4701e06611fc73d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ae134f56adf668d7bd31f7ee8fb36ead5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae134f56adf668d7bd31f7ee8fb36ead5\"></a>\nhash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ae134f56adf668d7bd31f7ee8fb36ead5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00060.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_vector&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00292.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Concurrent vector container.  \n <a href=\"a00060.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_vector.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_vector&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00060.png\" usemap=\"#tbb::concurrent_vector&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_vector&lt; T, A &gt;_map\" name=\"tbb::concurrent_vector&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ada098ff121699bfed7ae37e759eff93d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada098ff121699bfed7ae37e759eff93d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_vector_base_v3::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ada098ff121699bfed7ae37e759eff93d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7560567b5735c57159e55b12d20b6710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7560567b5735c57159e55b12d20b6710\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_base&lt; T, A &gt;<br class=\"typebreak\"/>\n::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a7560567b5735c57159e55b12d20b6710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf801a503d4e5fe739f53d7321dd2ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf801a503d4e5fe739f53d7321dd2ef\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a5cf801a503d4e5fe739f53d7321dd2ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bb52adb877d3b680dac5f0bd289700b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bb52adb877d3b680dac5f0bd289700b\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a1bb52adb877d3b680dac5f0bd289700b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a412441e93ad8656f96b14c5ecb9d817f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a412441e93ad8656f96b14c5ecb9d817f\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a412441e93ad8656f96b14c5ecb9d817f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ecbb1eb2c7264df9d58255ce211207c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ecbb1eb2c7264df9d58255ce211207c\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a5ecbb1eb2c7264df9d58255ce211207c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2c4f00678df69d2d11497e8dd6ed9cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2c4f00678df69d2d11497e8dd6ed9cf\"></a>\ntypedef T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:aa2c4f00678df69d2d11497e8dd6ed9cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa0d28eb686589cbaf4733ca0eabc071\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa0d28eb686589cbaf4733ca0eabc071\"></a>\ntypedef const T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:afa0d28eb686589cbaf4733ca0eabc071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4cee8eaee236867c0b6e87309380cb0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4cee8eaee236867c0b6e87309380cb0f\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::vector_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a4cee8eaee236867c0b6e87309380cb0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa9a55035528c055ae985db2a61c8b0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa9a55035528c055ae985db2a61c8b0b2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::vector_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>, const T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:aa9a55035528c055ae985db2a61c8b0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1623110816f9ef8f08e7bf6768aed273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1623110816f9ef8f08e7bf6768aed273\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reverse_iterator</b></td></tr>\n<tr class=\"separator:a1623110816f9ef8f08e7bf6768aed273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada43b048144c3814036da624d3bb8c58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada43b048144c3814036da624d3bb8c58\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reverse_iterator</b></td></tr>\n<tr class=\"separator:ada43b048144c3814036da624d3bb8c58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbeeef740ea402fa136ca3962fc0c307\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeeef740ea402fa136ca3962fc0c307\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; iterator, T, T &amp;, T * &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reverse_iterator</b></td></tr>\n<tr class=\"separator:adbeeef740ea402fa136ca3962fc0c307\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a705a54ffc90b914fc9c30d4177e8228a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a705a54ffc90b914fc9c30d4177e8228a\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; const_iterator, T, const T <br class=\"typebreak\"/>\n&amp;, const T * &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reverse_iterator</b></td></tr>\n<tr class=\"separator:a705a54ffc90b914fc9c30d4177e8228a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a443492ee9918c9e3372b5daca82314ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a443492ee9918c9e3372b5daca82314ca\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a443492ee9918c9e3372b5daca82314ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1312eb29abf7ca07aa365c727b7844e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1312eb29abf7ca07aa365c727b7844e3\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a1312eb29abf7ca07aa365c727b7844e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5bd95c2241653c760704a92b2c887a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bd95c2241653c760704a92b2c887a48\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">concurrent_vector</a> (const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a5bd95c2241653c760704a92b2c887a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty vector. <br/></td></tr>\n<tr class=\"separator:a5bd95c2241653c760704a92b2c887a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa25dccd2f65fbfa148e92d01a11c20ff\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa25dccd2f65fbfa148e92d01a11c20ff\">concurrent_vector</a> (std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03b5a0e9069b30dc4e2e5fc2f191ccb6\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6\">concurrent_vector</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copying constructor. <br/></td></tr>\n<tr class=\"separator:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aafb048cfda83d0e7803888ead76c06a9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aafb048cfda83d0e7803888ead76c06a9\">concurrent_vector</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef020f41f3017fecc43e70a22d3e0fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef020f41f3017fecc43e70a22d3e0fc0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_vector</b> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;source, const allocator_type &amp;a)</td></tr>\n<tr class=\"separator:aef020f41f3017fecc43e70a22d3e0fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abb0e376a31c3fdb91beaaa98441735f5\"></a>\ntemplate&lt;class M &gt; </td></tr>\n<tr class=\"memitem:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abb0e376a31c3fdb91beaaa98441735f5\">concurrent_vector</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copying constructor for vector with different allocator type. <br/></td></tr>\n<tr class=\"separator:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa898a39aad73711ceca70cd465dc0b4f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">concurrent_vector</a> (size_type n)</td></tr>\n<tr class=\"memdesc:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with initial size specified by argument n. <br/></td></tr>\n<tr class=\"separator:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a736c6e35f1df11625636968ea546e21f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a736c6e35f1df11625636968ea546e21f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a736c6e35f1df11625636968ea546e21f\">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a736c6e35f1df11625636968ea546e21f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br/></td></tr>\n<tr class=\"separator:a736c6e35f1df11625636968ea546e21f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae0d384ec56032d18f63e26960029d3ce\"></a>\ntemplate&lt;class I &gt; </td></tr>\n<tr class=\"memitem:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae0d384ec56032d18f63e26960029d3ce\">concurrent_vector</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with copying iteration range and given allocator instance. <br/></td></tr>\n<tr class=\"separator:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a920384aece0eb8beea3049956320ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a920384aece0eb8beea3049956320ec91\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">operator=</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector)</td></tr>\n<tr class=\"memdesc:a920384aece0eb8beea3049956320ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:a920384aece0eb8beea3049956320ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d26889a94203cdb5f5460fade7497c7\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0d26889a94203cdb5f5460fade7497c7\">operator=</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;other)</td></tr>\n<tr class=\"memdesc:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move assignment. <br/></td></tr>\n<tr class=\"separator:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1fe7f0b60bbf304890a9293a35e6819d\"></a>\ntemplate&lt;class M &gt; </td></tr>\n<tr class=\"memitem:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">operator=</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, M &gt; &amp;vector)</td></tr>\n<tr class=\"memdesc:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment for vector with different allocator type. <br/></td></tr>\n<tr class=\"separator:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8498a1335a3bbac2f4925a4e8d70cdb8\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">operator=</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"memdesc:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment for initializer_list. <br/></td></tr>\n<tr class=\"separator:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab89c2db5358048debdc282ff995caffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab89c2db5358048debdc282ff995caffb\">grow_by</a> (size_type delta)</td></tr>\n<tr class=\"memdesc:ab89c2db5358048debdc282ff995caffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Grow by \"delta\" elements.  <a href=\"#ab89c2db5358048debdc282ff995caffb\">More...</a><br/></td></tr>\n<tr class=\"separator:ab89c2db5358048debdc282ff995caffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">grow_by</a> (size_type delta, const_reference t)</td></tr>\n<tr class=\"memdesc:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Grow by \"delta\" elements using copying constructor.  <a href=\"#aa11fc991cda82cf93789fce31b37a16c\">More...</a><br/></td></tr>\n<tr class=\"separator:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#acfd74483ff523213b78f44fb914c8eb4\">grow_by</a> (I first, I last)</td></tr>\n<tr class=\"separator:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95f57f1529e0ebd1ca6bd2d60003fcab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a95f57f1529e0ebd1ca6bd2d60003fcab\">grow_by</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"separator:a95f57f1529e0ebd1ca6bd2d60003fcab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\">grow_to_at_least</a> (size_type n)</td></tr>\n<tr class=\"memdesc:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Append minimal sequence of elements such that <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>&gt;=n.  <a href=\"#ae9ef9895e88f9bf036b379035c18f035\">More...</a><br/></td></tr>\n<tr class=\"separator:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a422d9689ed72a5ef2b6b72f28e4143a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">grow_to_at_least</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"separator:a422d9689ed72a5ef2b6b72f28e4143a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad68d1675fedef232bfae35f200ba007d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad68d1675fedef232bfae35f200ba007d\">push_back</a> (const_reference item)</td></tr>\n<tr class=\"memdesc:ad68d1675fedef232bfae35f200ba007d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item.  <a href=\"#ad68d1675fedef232bfae35f200ba007d\">More...</a><br/></td></tr>\n<tr class=\"separator:ad68d1675fedef232bfae35f200ba007d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">push_back</a> (T &amp;&amp;item)</td></tr>\n<tr class=\"memdesc:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item, move-aware.  <a href=\"#ac29a9f08c0fac7c20786c7b8f4f0321a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">emplace_back</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item, create item \"in place\" with provided arguments.  <a href=\"#afae4c378515b89cc2b0a11c8cf1bcc50\">More...</a><br/></td></tr>\n<tr class=\"separator:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">operator[]</a> (size_type index)</td></tr>\n<tr class=\"memdesc:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get reference to element at given index.  <a href=\"#a3097cb46511504acfc9de7da5235f4a6\">More...</a><br/></td></tr>\n<tr class=\"separator:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abd6ca67f2f97fafca48395af2e693e73\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">operator[]</a> (size_type index) const </td></tr>\n<tr class=\"memdesc:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const reference to element at given index. <br/></td></tr>\n<tr class=\"separator:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a629a29eb21e528414b9d5c9becfe05cd\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">at</a> (size_type index)</td></tr>\n<tr class=\"memdesc:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get reference to element at given index. Throws exceptions on errors. <br/></td></tr>\n<tr class=\"separator:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">at</a> (size_type index) const </td></tr>\n<tr class=\"memdesc:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const reference to element at given index. Throws exceptions on errors. <br/></td></tr>\n<tr class=\"separator:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8201f65735edcc28aeec95b6e73d75b6\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">range</a> (size_t grainsize=1)</td></tr>\n<tr class=\"memdesc:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get range for iterating with parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8fcc32ec9ccb48c3327a88fe288c7538\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8fcc32ec9ccb48c3327a88fe288c7538\">range</a> (size_t grainsize=1) const </td></tr>\n<tr class=\"memdesc:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const range for iterating with parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a803268c16e3688ff4681251947d257c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a803268c16e3688ff4681251947d257c7\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">size</a> () const </td></tr>\n<tr class=\"memdesc:a803268c16e3688ff4681251947d257c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return size of vector. It may include elements under construction. <br/></td></tr>\n<tr class=\"separator:a803268c16e3688ff4681251947d257c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3f6774107e65642f73c0dcc9a962fe7\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return false if vector is not empty or has elements under construction at least. <br/></td></tr>\n<tr class=\"separator:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a96c2ae9dfedc24d62554feb627df76c3\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">capacity</a> () const </td></tr>\n<tr class=\"memdesc:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br/></td></tr>\n<tr class=\"separator:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b3284684328c58c0228c9a697ef3594\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">reserve</a> (size_type n)</td></tr>\n<tr class=\"memdesc:a0b3284684328c58c0228c9a697ef3594\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate enough space to grow to size n without having to allocate more memory later.  <a href=\"#a0b3284684328c58c0228c9a697ef3594\">More...</a><br/></td></tr>\n<tr class=\"separator:a0b3284684328c58c0228c9a697ef3594\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65e53a98a1e1fdb515fdc2b84e2314e8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\">resize</a> (size_type n)</td></tr>\n<tr class=\"memdesc:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resize the vector. Not thread-safe. <br/></td></tr>\n<tr class=\"separator:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a941917a8a840ff08ce8810ca9476ff46\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">resize</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"memdesc:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resize the vector, copy t for new elements. Not thread-safe. <br/></td></tr>\n<tr class=\"separator:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba805b5225ad3399550f78ea15e51e93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba805b5225ad3399550f78ea15e51e93\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">shrink_to_fit</a> ()</td></tr>\n<tr class=\"memdesc:aba805b5225ad3399550f78ea15e51e93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Optimize memory usage and fragmentation. <br/></td></tr>\n<tr class=\"separator:aba805b5225ad3399550f78ea15e51e93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0ec9c3ab3360e04bdaa5174956a3206d\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">max_size</a> () const </td></tr>\n<tr class=\"memdesc:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upper bound on argument to reserve. <br/></td></tr>\n<tr class=\"separator:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab55636c80368ad7d400f3200313fcf5f\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">begin</a> ()</td></tr>\n<tr class=\"memdesc:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start iterator <br/></td></tr>\n<tr class=\"separator:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad2c07653375e4a5f89c33b375eda610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad2c07653375e4a5f89c33b375eda610\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">end</a> ()</td></tr>\n<tr class=\"memdesc:aad2c07653375e4a5f89c33b375eda610\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end iterator <br/></td></tr>\n<tr class=\"separator:aad2c07653375e4a5f89c33b375eda610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3eb33d1b10a988a87cc708ceb08f3a9\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">begin</a> () const </td></tr>\n<tr class=\"memdesc:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start const iterator <br/></td></tr>\n<tr class=\"separator:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a4ad0795a19d94df24595e748f0b193\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a6a4ad0795a19d94df24595e748f0b193\">end</a> () const </td></tr>\n<tr class=\"memdesc:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7a1c5441fa480c07ef37d9206b6260cc\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">cbegin</a> () const </td></tr>\n<tr class=\"memdesc:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start const iterator <br/></td></tr>\n<tr class=\"separator:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ea80faf139feb54d6576c036e4ba898\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">cend</a> () const </td></tr>\n<tr class=\"memdesc:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a2f8dce0adcbef8e29273c23723a78e\"></a>\nreverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">rbegin</a> ()</td></tr>\n<tr class=\"memdesc:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start iterator <br/></td></tr>\n<tr class=\"separator:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a618f38279a370c18f73ea2c29ded9cb9\"></a>\nreverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">rend</a> ()</td></tr>\n<tr class=\"memdesc:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end iterator <br/></td></tr>\n<tr class=\"separator:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a976b0bed19de9ab93f78c10184a4e38f\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a976b0bed19de9ab93f78c10184a4e38f\">rbegin</a> () const </td></tr>\n<tr class=\"memdesc:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start const iterator <br/></td></tr>\n<tr class=\"separator:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abdb98e17cb65d9c445d7fd1e662c2699\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">rend</a> () const </td></tr>\n<tr class=\"memdesc:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end const iterator <br/></td></tr>\n<tr class=\"separator:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2627db4a7949522ea4727320b23a6348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2627db4a7949522ea4727320b23a6348\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">crbegin</a> () const </td></tr>\n<tr class=\"memdesc:a2627db4a7949522ea4727320b23a6348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start const iterator <br/></td></tr>\n<tr class=\"separator:a2627db4a7949522ea4727320b23a6348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad097225c529dbb24cc0e13a444ab4752\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">crend</a> () const </td></tr>\n<tr class=\"memdesc:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end const iterator <br/></td></tr>\n<tr class=\"separator:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9bfc6d733cf543280b691ed8d7b7908a\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">front</a> ()</td></tr>\n<tr class=\"memdesc:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the first item <br/></td></tr>\n<tr class=\"separator:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9067259572c2c41d014840d0f9d3cdce\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9067259572c2c41d014840d0f9d3cdce\">front</a> () const </td></tr>\n<tr class=\"memdesc:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the first item const <br/></td></tr>\n<tr class=\"separator:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaee3ddf1d05238a8a6887f6d824b76f8\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">back</a> ()</td></tr>\n<tr class=\"memdesc:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the last item <br/></td></tr>\n<tr class=\"separator:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf66eb1e82dbcb430d9926a23711c720\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#acf66eb1e82dbcb430d9926a23711c720\">back</a> () const </td></tr>\n<tr class=\"memdesc:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the last item const <br/></td></tr>\n<tr class=\"separator:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88b62a9614d3f2b59c9c7c1a2143fb1e\"></a>\nallocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a87355dce93d0882aa73333a35c9b367c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a87355dce93d0882aa73333a35c9b367c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">assign</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"memdesc:a87355dce93d0882aa73333a35c9b367c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assign n items by copying t item <br/></td></tr>\n<tr class=\"separator:a87355dce93d0882aa73333a35c9b367c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7bb5399a8499f88cf859eab39f0ed9e0\"></a>\ntemplate&lt;class I &gt; </td></tr>\n<tr class=\"memitem:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">assign</a> (I first, I last)</td></tr>\n<tr class=\"memdesc:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assign range [first, last) <br/></td></tr>\n<tr class=\"separator:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584d6cda5794441b19d4f02bde399dff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a584d6cda5794441b19d4f02bde399dff\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">assign</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"memdesc:a584d6cda5794441b19d4f02bde399dff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assigns an initializer list <br/></td></tr>\n<tr class=\"separator:a584d6cda5794441b19d4f02bde399dff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8603bd57324fb6b60ba006884c95279d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8603bd57324fb6b60ba006884c95279d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">swap</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector)</td></tr>\n<tr class=\"memdesc:a8603bd57324fb6b60ba006884c95279d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">swap two instances <br/></td></tr>\n<tr class=\"separator:a8603bd57324fb6b60ba006884c95279d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a526ba408fb3064ef846940d633b8f365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a526ba408fb3064ef846940d633b8f365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear container while keeping memory allocated.  <a href=\"#a526ba408fb3064ef846940d633b8f365\">More...</a><br/></td></tr>\n<tr class=\"separator:a526ba408fb3064ef846940d633b8f365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5bcaededc9a00e7aaecd6c262fd0b38\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">~concurrent_vector</a> ()</td></tr>\n<tr class=\"memdesc:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear and destroy vector. <br/></td></tr>\n<tr class=\"separator:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a675f1b62a651d350eb0d778a271e31e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a675f1b62a651d350eb0d778a271e31e5\"></a>\nconst <br class=\"typebreak\"/>\ninternal::concurrent_vector_base_v3 &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_vector_base</b> () const </td></tr>\n<tr class=\"separator:a675f1b62a651d350eb0d778a271e31e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a96e2626d160361d8c6f4193ca0c7a4dd\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>copy_range</b> (void *dst, const void *p_type_erased_iterator, size_type n)</td></tr>\n<tr class=\"separator:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a134b00c8dd9200b9e45fe81919c66b11\"></a>\ntemplate&lt;typename C , typename U &gt; </td></tr>\n<tr class=\"memitem:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::vector_iterator</b></td></tr>\n<tr class=\"separator:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::concurrent_vector&lt; T, A &gt;</h3>\n\n<p>Concurrent vector container. </p>\n<pre class=\"fragment\">concurrent_vector is a container having the following main properties:\n- It provides random indexed access to its elements. The index of the first element is 0.\n- It ensures safe concurrent growing its size (different threads can safely append new elements).\n- Adding new elements does not invalidate existing iterators and does not change indices of existing items.\n</pre><dl class=\"section user\"><dt>Compatibility</dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>\n<dl class=\"section user\"><dt>Exception Safety</dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>\n<li>Throwing an exception is forbidden for destructor of T.</li>\n<li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li>\n</ul>\nOtherwise, the program's behavior is undefined. </dd></dl>\n<dl class=\"section user\"><dt></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>\n<li>There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li>\n<li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li>\n<li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li>\n<li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\" title=\"Get reference to element at given index. Throws exceptions on errors. \">at()</a> method a C++ exception is thrown.</li>\n</ul>\nIf a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>\n<dl class=\"section user\"><dt>Fragmentation</dt><dd>Unlike an STL vector, a <a class=\"el\" href=\"a00060.html\" title=\"Concurrent vector container. \">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be optimized by method compact() that merges several smaller arrays into one solid.</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.1</dt><dd><ul>\n<li>Fixed guarantees of <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">concurrent_vector::size()</a> and <a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\" title=\"Append minimal sequence of elements such that size()&gt;=n. \">grow_to_at_least()</a> methods to assure elements are allocated.</li>\n<li>Methods <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\" title=\"end iterator \">end()</a>/rbegin()/back() are partly thread-safe since they use <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a> to get the end of vector</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\" title=\"Resize the vector. Not thread-safe. \">resize()</a> methods (not thread-safe)</li>\n<li>Added cbegin/cend/crbegin/crend methods</li>\n<li>Changed return type of methods grow* and push_back to iterator</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.0</dt><dd><ul>\n<li>Implemented exception-safety guarantees</li>\n<li>Added template argument for allocator</li>\n<li>Added allocator argument in constructors</li>\n<li>Faster index calculation</li>\n<li>First growth call specifies a number of segments to be merged in the first allocation.</li>\n<li>Fixed memory blow up for swarm of vector's instances of small size</li>\n<li>Added <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\" title=\"Grow by &quot;delta&quot; elements using copying constructor. \">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li>\n<li>Added STL-like constructors.</li>\n<li>Added operators ==, &lt; and derivatives</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\" title=\"Get reference to element at given index. Throws exceptions on errors. \">at()</a> method, approved for using after an exception was thrown inside the vector</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\" title=\"return allocator object \">get_allocator()</a> method.</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\" title=\"assign n items by copying t item \">assign()</a> methods</li>\n<li>Added compact() method to defragment first segments</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\" title=\"swap two instances \">swap()</a> method</li>\n<li><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\" title=\"Get range for iterating with parallel algorithms. \">range()</a> defaults on grainsize = 1 supporting auto grainsize algorithms. </li>\n</ul>\n</dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a526ba408fb3064ef846940d633b8f365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::clear </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clear container while keeping memory allocated. </p>\n<p>To free up the memory, use in conjunction with method compact(). Not thread safe </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afae4c378515b89cc2b0a11c8cf1bcc50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::emplace_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item, create item \"in place\" with provided arguments. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab89c2db5358048debdc282ff995caffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>delta</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Grow by \"delta\" elements. </p>\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa11fc991cda82cf93789fce31b37a16c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>delta</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>t</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Grow by \"delta\" elements using copying constructor. </p>\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acfd74483ff523213b78f44fb914c8eb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename I &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">I&#160;</td>\n          <td class=\"paramname\"><em>first</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">I&#160;</td>\n          <td class=\"paramname\"><em>last</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a95f57f1529e0ebd1ca6bd2d60003fcab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">std::initializer_list&lt; T &gt;&#160;</td>\n          <td class=\"paramname\"><em>init_list</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae9ef9895e88f9bf036b379035c18f035\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Append minimal sequence of elements such that <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>&gt;=n. </p>\n<p>The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a422d9689ed72a5ef2b6b72f28e4143a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>t</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Analogous to <a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\" title=\"Append minimal sequence of elements such that size()&gt;=n. \">grow_to_at_least( size_type n )</a> with exception that the new elements are initialized by copying of t instead of default construction. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3097cb46511504acfc9de7da5235f4a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">reference <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::operator[] </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>index</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Get reference to element at given index. </p>\n<p>This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index &lt; <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad68d1675fedef232bfae35f200ba007d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::push_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac29a9f08c0fac7c20786c7b8f4f0321a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::push_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item, move-aware. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0b3284684328c58c0228c9a697ef3594\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::reserve </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allocate enough space to grow to size n without having to allocate more memory later. </p>\n<p>Like most of the methods provided for STL compatibility, this method is <em>not</em> thread safe. The capacity afterwards may be bigger than the requested reservation. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_vector.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00061.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00381.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Combines data access, locking, and garbage collection.  \n <a href=\"a00061.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00061.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\">\n<area href=\"a00017.html\" title=\"Allows write access to elements and combines data access, locking, and garbage collection. \" alt=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor\" shape=\"rect\" coords=\"0,112,488,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa8ca5aef4ee14b7eddb64767b8cd5fda\"></a>\ntypedef const <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a></td></tr>\n<tr class=\"memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6299b523d2ae8e2613f1bc160ca99b85\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if result is empty. <br/></td></tr>\n<tr class=\"separator:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18390cb369369d72bdf7c867755b5190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18390cb369369d72bdf7c867755b5190\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a> ()</td></tr>\n<tr class=\"memdesc:a18390cb369369d72bdf7c867755b5190\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to null. <br/></td></tr>\n<tr class=\"separator:a18390cb369369d72bdf7c867755b5190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8adf04e33e7c8c876ba849f26807713a\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28fa9b9e6c35d7e80217e69a7afe1ee5\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b26d22d228cf0d8678c9b346c63752c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create empty result. <br/></td></tr>\n<tr class=\"separator:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc0c85a146c912b9a0f94a7695957c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy result after releasing the underlying reference. <br/></td></tr>\n<tr class=\"separator:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a05b74d408d8cd7773f7b5edfef97da1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05b74d408d8cd7773f7b5edfef97da1b\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_writer</b> ()</td></tr>\n<tr class=\"separator:a05b74d408d8cd7773f7b5edfef97da1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ac9b96f45483ddbff95a95e8e666a8f28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9b96f45483ddbff95a95e8e666a8f28\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_node</b></td></tr>\n<tr class=\"separator:ac9b96f45483ddbff95a95e8e666a8f28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5034084f595666b47734f99a6eaefa9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5034084f595666b47734f99a6eaefa9f\"></a>\nhashcode_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash</b></td></tr>\n<tr class=\"separator:a5034084f595666b47734f99a6eaefa9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a9a30829231c2a2f13cb12430992a0701\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a30829231c2a2f13cb12430992a0701\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b></td></tr>\n<tr class=\"separator:a9a30829231c2a2f13cb12430992a0701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1dfccf6cc719ff15006a2b05cf70dd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1dfccf6cc719ff15006a2b05cf70dd7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor</b></td></tr>\n<tr class=\"separator:ab1dfccf6cc719ff15006a2b05cf70dd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</h3>\n\n<p>Combines data access, locking, and garbage collection. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00062.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::continue_msg Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00062.html\">continue_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_msg Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>An empty class used for messages that mean \"I'm done\".  \n <a href=\"a00062.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>An empty class used for messages that mean \"I'm done\". </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00063.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::continue_receiver Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00345.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_receiver Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Base class for receivers of completion messages.  \n <a href=\"a00063.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::continue_receiver:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00063.png\" usemap=\"#tbb::flow::interface10::continue_receiver_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::continue_receiver_map\" name=\"tbb::flow::interface10::continue_receiver_map\">\n<area href=\"a00133.html\" alt=\"tbb::flow::interface10::receiver&lt; continue_msg &gt;\" shape=\"rect\" coords=\"0,56,283,80\"/>\n<area href=\"a00178.html\" alt=\"tbb::flow::interface10::internal::untyped_receiver\" shape=\"rect\" coords=\"0,0,283,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24e64153a8f1bf284d5d7ba980ac0866\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a></td></tr>\n<tr class=\"memdesc:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type. <br/></td></tr>\n<tr class=\"separator:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01d35fb1cb3e447929219ed6f61314ec\"></a>\ntypedef <a class=\"el\" href=\"a00133.html\">receiver</a>&lt; <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb2e17fdd70345d3291cb1eb9d37fa84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb2e17fdd70345d3291cb1eb9d37fa84\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:aeb2e17fdd70345d3291cb1eb9d37fa84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c34b0f5b4588b9edbc60b69e554ee85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c34b0f5b4588b9edbc60b69e554ee85\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a4c34b0f5b4588b9edbc60b69e554ee85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ed56cc8468b7e29c39c04dcb1b59f9b inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ed56cc8468b7e29c39c04dcb1b59f9b\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a8ed56cc8468b7e29c39c04dcb1b59f9b inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abca607a1fa7f7ad0d55d374e4416fe7e\"></a>\ntypedef <a class=\"el\" href=\"a00153.html\">sender</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affeefcd8a802c09194c27555188a95a2 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affeefcd8a802c09194c27555188a95a2\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:affeefcd8a802c09194c27555188a95a2 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e5331f73255893c402e844eba978578 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e5331f73255893c402e844eba978578\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a7e5331f73255893c402e844eba978578 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6525c867f797a1feb9b77b5bb39f155f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">continue_receiver</a> (int number_of_predecessors=0)</td></tr>\n<tr class=\"memdesc:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr class=\"separator:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac860c7f19e8aaf7c26128b05920afa96\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">continue_receiver</a> (const <a class=\"el\" href=\"a00063.html\">continue_receiver</a> &amp;src)</td></tr>\n<tr class=\"memdesc:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a74596e8e05663573189d7b6c66dfad7c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Increments the trigger threshold. <br/></td></tr>\n<tr class=\"separator:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decrements the trigger threshold.  <a href=\"#adb90a3427caad6c4ef6d3d590de988bc\">More...</a><br/></td></tr>\n<tr class=\"separator:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeca3f784d8d038f1d921de4462660864\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeca3f784d8d038f1d921de4462660864\"></a>\n<a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> () __TBB_override</td></tr>\n<tr class=\"separator:aeca3f784d8d038f1d921de4462660864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8bd80818067d300506d2414ad9d538ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8bd80818067d300506d2414ad9d538ba\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;s) __TBB_override</td></tr>\n<tr class=\"separator:a8bd80818067d300506d2414ad9d538ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af391292d8fc91b05a9463c9de5650eb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af391292d8fc91b05a9463c9de5650eb3\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;s) __TBB_override</td></tr>\n<tr class=\"separator:af391292d8fc91b05a9463c9de5650eb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aee2377550449825b0449968611cf04eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aee2377550449825b0449968611cf04eb\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;v) __TBB_override</td></tr>\n<tr class=\"separator:aee2377550449825b0449968611cf04eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20bd723b393799ecef6ea764296f6f81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20bd723b393799ecef6ea764296f6f81\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> () __TBB_override</td></tr>\n<tr class=\"separator:a20bd723b393799ecef6ea764296f6f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6545b1434a16ee261ed6c4ee7f9044a6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;::<a class=\"el\" href=\"a00062.html\">filtered_type</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4f0b65672f9c488e6c8e069e1afaebd inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4f0b65672f9c488e6c8e069e1afaebd\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put</b> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;::async_type &amp;t)</td></tr>\n<tr class=\"separator:ac4f0b65672f9c488e6c8e069e1afaebd inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9717a7ab9ad56f3210c08dbb320def77\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a> (const <a class=\"el\" href=\"a00062.html\">continue_msg</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2f3f8570b3fed4148baf16e72b04f38\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a> ()</td></tr>\n<tr class=\"memdesc:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a67ded0141aa65e09633d50421b1ffea8\"></a>\ntask *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task</a> (const <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d3c9bfbf36e9e743bb7f5954e061d49\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">reset_receiver</a> (reset_flags f) __TBB_override</td></tr>\n<tr class=\"memdesc:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">execute</a> ()=0</td></tr>\n<tr class=\"memdesc:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Does whatever should happen when the threshold is reached.  <a href=\"#a3efb5c784ac38993df3bbcee009add6a\">More...</a><br/></td></tr>\n<tr class=\"separator:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83eea0e877f085b052c5e2e759a80d9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83eea0e877f085b052c5e2e759a80d9e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> () __TBB_override</td></tr>\n<tr class=\"separator:a83eea0e877f085b052c5e2e759a80d9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:afa535fb621f3744149fb97da1d020503 inherit pro_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa535fb621f3744149fb97da1d020503\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:afa535fb621f3744149fb97da1d020503 inherit pro_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab54afb91692e9cfb10470c575e46ac0a inherit pro_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab54afb91692e9cfb10470c575e46ac0a\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:ab54afb91692e9cfb10470c575e46ac0a inherit pro_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ab7ecac3889ffd28178d06b1bcf0d32c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7ecac3889ffd28178d06b1bcf0d32c9\"></a>\n<a class=\"el\" href=\"a00070.html\">built_predecessors_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_built_predecessors</b></td></tr>\n<tr class=\"separator:ab7ecac3889ffd28178d06b1bcf0d32c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e2d98eca7c559c4d40b4deabbca20b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e2d98eca7c559c4d40b4deabbca20b5\"></a>\n<a class=\"el\" href=\"a00154.html\">spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_mutex</b></td></tr>\n<tr class=\"separator:a6e2d98eca7c559c4d40b4deabbca20b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5047ebc93e5fc6001d2e2dab649ba9f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5047ebc93e5fc6001d2e2dab649ba9f0\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_predecessor_count</b></td></tr>\n<tr class=\"separator:a5047ebc93e5fc6001d2e2dab649ba9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a243f873da0d37967f79f0214ac23ce16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a243f873da0d37967f79f0214ac23ce16\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_current_count</b></td></tr>\n<tr class=\"separator:a243f873da0d37967f79f0214ac23ce16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae4e90ceedd72a6089cf05f81db0bc4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae4e90ceedd72a6089cf05f81db0bc4c\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_initial_predecessor_count</b></td></tr>\n<tr class=\"separator:aae4e90ceedd72a6089cf05f81db0bc4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename R , typename B &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_put_task</b></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>limiter_node</b></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename TT , typename M &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Base class for receivers of completion messages. </p>\n<p>These receivers automatically reset, but cannot be explicitly waited on </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a3efb5c784ac38993df3bbcee009add6a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual task* tbb::flow::interface10::continue_receiver::execute </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Does whatever should happen when the threshold is reached. </p>\n<p>This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\" title=\"Put an item to the receiver. \">try_put()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adb90a3427caad6c4ef6d3d590de988bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::flow::interface10::continue_receiver::remove_predecessor </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Decrements the trigger threshold. </p>\n<p>Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00064.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::critical_section_v4 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00417.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::critical_section_v4:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00064.png\" usemap=\"#tbb::internal::critical_section_v4_map\" alt=\"\"/>\n  <map id=\"tbb::internal::critical_section_v4_map\" name=\"tbb::internal::critical_section_v4_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab661617ca865c4af0f34e07276f73c9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab661617ca865c4af0f34e07276f73c9e\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:ab661617ca865c4af0f34e07276f73c9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb1ccdfc59fdd3f5a3a8db17c56102e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb1ccdfc59fdd3f5a3a8db17c56102e8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>lock</b> ()</td></tr>\n<tr class=\"separator:afb1ccdfc59fdd3f5a3a8db17c56102e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbbd611ea04432e112b08e56251bc8b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbbd611ea04432e112b08e56251bc8b5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_lock</b> ()</td></tr>\n<tr class=\"separator:adbbd611ea04432e112b08e56251bc8b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a081d4eae71879fd7dcf2c4ca9ea7fb67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a081d4eae71879fd7dcf2c4ca9ea7fb67\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unlock</b> ()</td></tr>\n<tr class=\"separator:a081d4eae71879fd7dcf2c4ca9ea7fb67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a7a62f98ad578ec8ac01d88de55bd271c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7a62f98ad578ec8ac01d88de55bd271c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a7a62f98ad578ec8ac01d88de55bd271c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47f75eb62f02cbdee0d602dff38075e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47f75eb62f02cbdee0d602dff38075e9\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a47f75eb62f02cbdee0d602dff38075e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a12f986c4c554db133c2ae657acf2a496\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a12f986c4c554db133c2ae657acf2a496\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a12f986c4c554db133c2ae657acf2a496\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>critical_section.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00065.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_device_filter Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00370.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_filter Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab69d0762f7468fb4aca8aa9c279647c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab69d0762f7468fb4aca8aa9c279647c7\"></a>\n<a class=\"el\" href=\"a00106.html\">opencl_device_list</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;devices)</td></tr>\n<tr class=\"separator:ab69d0762f7468fb4aca8aa9c279647c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00066.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00369.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab6a7568e4dad182e2b9757e53e6dc30e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6a7568e4dad182e2b9757e53e6dc30e\"></a>\n<a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:ab6a7568e4dad182e2b9757e53e6dc30e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00067.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00371.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_info::default_opencl_factory:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00067.png\" usemap=\"#tbb::flow::interface10::opencl_info::default_opencl_factory_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_info::default_opencl_factory_map\" name=\"tbb::flow::interface10::opencl_info::default_opencl_factory_map\">\n<area href=\"a00107.html\" alt=\"tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;\" shape=\"rect\" coords=\"0,0,358,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a0c095d88947ac14555f550103fc074d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0c095d88947ac14555f550103fc074d9\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a0c095d88947ac14555f550103fc074d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> &gt;</td></tr>\n<tr class=\"separator:a0c095d88947ac14555f550103fc074d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00107\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00107')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14 inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f11e7a88d0f3cbd236d6a272a9c2d14\"></a>\nusing&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00107.html\">opencl_factory</a>&lt; default_device_filter &gt;&gt;</td></tr>\n<tr class=\"separator:a9f11e7a88d0f3cbd236d6a272a9c2d14 inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93525acca7352e5e06674f350a146d18 inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93525acca7352e5e06674f350a146d18\"></a>\ntypedef <a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_type</b></td></tr>\n<tr class=\"separator:a93525acca7352e5e06674f350a146d18 inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0915b7bee4b372111c2698bbac15577f inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0915b7bee4b372111c2698bbac15577f\"></a>\ntypedef kernel&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a0915b7bee4b372111c2698bbac15577f inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6838f796f49054a40f86d60bfdba7fb inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6838f796f49054a40f86d60bfdba7fb\"></a>\ntypedef <a class=\"el\" href=\"a00114.html\">opencl_range</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:aa6838f796f49054a40f86d60bfdba7fb inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aab6e65faffa5aa3e58dd54805424cefd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aab6e65faffa5aa3e58dd54805424cefd\"></a>\n<a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>default_factory</b> ()</td></tr>\n<tr class=\"separator:aab6e65faffa5aa3e58dd54805424cefd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_methods_a00107\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00107')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td></tr>\n<tr class=\"memitem:a083fe6b14159cc159862ec5ae3ba9835 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a083fe6b14159cc159862ec5ae3ba9835\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>init</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;device_list)</td></tr>\n<tr class=\"separator:a083fe6b14159cc159862ec5ae3ba9835 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99f0be9c0e4beab8c827fb267e035c8c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const kernel_type &amp;kernel, const <a class=\"el\" href=\"a00114.html\">range_type</a> &amp;work_size, Args &amp;...args)</td></tr>\n<tr class=\"separator:a99f0be9c0e4beab8c827fb267e035c8c inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae225724eca814f88041fc7ad3e067424\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, T &amp;t, Rest &amp;...args)</td></tr>\n<tr class=\"separator:ae225724eca814f88041fc7ad3e067424 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28f06cdb00ed4a1e457c2ada04ba06b4 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28f06cdb00ed4a1e457c2ada04ba06b4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>)</td></tr>\n<tr class=\"separator:a28f06cdb00ed4a1e457c2ada04ba06b4 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30d7b701d89615b0fc98a2e6af448dee\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, FinalizeFn fn, Args &amp;...args)</td></tr>\n<tr class=\"separator:a30d7b701d89615b0fc98a2e6af448dee inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc10f0ed4303bff542facde82142b283 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abc10f0ed4303bff542facde82142b283\"></a>\nconst <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>devices</b> ()</td></tr>\n<tr class=\"separator:abc10f0ed4303bff542facde82142b283 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00068.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory::device_type Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00068.html\">device_type</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::device_type Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00069.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00375.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b3ff6023818444a3a74c08c426e0f6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b3ff6023818444a3a74c08c426e0f6a\"></a>\n<a class=\"el\" href=\"a00068.html\">device_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (<a class=\"el\" href=\"a00082.html\">gfx_factory</a> &amp;)</td></tr>\n<tr class=\"separator:a4b3ff6023818444a3a74c08c426e0f6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00070.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::edge_container&lt; C &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00070.html\">edge_container</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00364.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::edge_container&lt; C &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a41bb4911e3531237e81d34f3dd5f4d45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a41bb4911e3531237e81d34f3dd5f4d45\"></a>\ntypedef std::list&lt; C <br class=\"typebreak\"/>\n*, <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator</a>&lt; C * &gt; &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>edge_list_type</b></td></tr>\n<tr class=\"separator:a41bb4911e3531237e81d34f3dd5f4d45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c4ece243e17e343d81cf4114cc06034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c4ece243e17e343d81cf4114cc06034\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>add_edge</b> (C &amp;s)</td></tr>\n<tr class=\"separator:a1c4ece243e17e343d81cf4114cc06034\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07fd404cc50c3519d506983622ff5b70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07fd404cc50c3519d506983622ff5b70\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>delete_edge</b> (C &amp;s)</td></tr>\n<tr class=\"separator:a07fd404cc50c3519d506983622ff5b70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05399c87d86ca67c1c966b7755c3be93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05399c87d86ca67c1c966b7755c3be93\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_edges</b> (edge_list_type &amp;v)</td></tr>\n<tr class=\"separator:a05399c87d86ca67c1c966b7755c3be93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b5b447f8180115f2e76a45785803177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b5b447f8180115f2e76a45785803177\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>edge_count</b> ()</td></tr>\n<tr class=\"separator:a3b5b447f8180115f2e76a45785803177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a870d3089574c9bab1c2046a292a42b30\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a870d3089574c9bab1c2046a292a42b30\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a870d3089574c9bab1c2046a292a42b30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091feefc1f4667b387586ead10b477c6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a091feefc1f4667b387586ead10b477c6\"></a>\ntemplate&lt;typename S &gt; </td></tr>\n<tr class=\"memitem:a091feefc1f4667b387586ead10b477c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>sender_extract</b> (S &amp;s)</td></tr>\n<tr class=\"separator:a091feefc1f4667b387586ead10b477c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a38a1f599419331fa0280c32affd9aa1f\"></a>\ntemplate&lt;typename R &gt; </td></tr>\n<tr class=\"memitem:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>receiver_extract</b> (R &amp;r)</td></tr>\n<tr class=\"separator:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00071.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li><li class=\"navelem\"><b>push_back_helper</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00071.html\">element_construction_guard</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00293.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00071.png\" usemap=\"#tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\" name=\"tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab4eaaf8394013e2af109f6228ab1bebe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4eaaf8394013e2af109f6228ab1bebe\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>element_construction_guard</b> (pointer an_element)</td></tr>\n<tr class=\"separator:ab4eaaf8394013e2af109f6228ab1bebe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adcc00c3764106ca035731a44b92238a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adcc00c3764106ca035731a44b92238a8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>dismiss</b> ()</td></tr>\n<tr class=\"separator:adcc00c3764106ca035731a44b92238a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:abdb5e90a894c8d1f19a1a0c53f8779e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abdb5e90a894c8d1f19a1a0c53f8779e8\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>element</b></td></tr>\n<tr class=\"separator:abdb5e90a894c8d1f19a1a0c53f8779e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_vector.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00072.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00399.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container.  \n <a href=\"a00072.html#details\">More...</a></p>\n\n<p><code>#include &lt;enumerable_thread_specific.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00072.png\" usemap=\"#tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\" name=\"tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad50ceae1b0e91d0fd31fe506e690692b\"></a>\ntypedef Allocator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">allocator_type</a></td></tr>\n<tr class=\"memdesc:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Basic types. <br/></td></tr>\n<tr class=\"separator:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a931b97e237cd2ed6eabe0d939bd141da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a931b97e237cd2ed6eabe0d939bd141da\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a931b97e237cd2ed6eabe0d939bd141da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353a42e7bdda1720b7150cca99cf730b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353a42e7bdda1720b7150cca99cf730b\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a353a42e7bdda1720b7150cca99cf730b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6c722a4b20fb6cae21316240b61d98d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6c722a4b20fb6cae21316240b61d98d2\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a6c722a4b20fb6cae21316240b61d98d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad88abc185701214e53e81973235ab6de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad88abc185701214e53e81973235ab6de\"></a>\ntypedef T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:ad88abc185701214e53e81973235ab6de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4aff438f46812452ab4a6f893df94fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4aff438f46812452ab4a6f893df94fc3\"></a>\ntypedef const T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a4aff438f46812452ab4a6f893df94fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a65e9cdc58e19d96b31b467c70c79122d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65e9cdc58e19d96b31b467c70c79122d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal_collection_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a65e9cdc58e19d96b31b467c70c79122d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b6f002367fa7ca2e3e245e76d91ea7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b6f002367fa7ca2e3e245e76d91ea7e\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal_collection_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a0b6f002367fa7ca2e3e245e76d91ea7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a713e97c954eef04e3fda62cf8c8bd63f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a713e97c954eef04e3fda62cf8c8bd63f\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::enumerable_thread_specific_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">internal_collection_type</a>, <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a713e97c954eef04e3fda62cf8c8bd63f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9dacd1e38e45ee787faafd3a71b23fc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9dacd1e38e45ee787faafd3a71b23fc2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::enumerable_thread_specific_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">internal_collection_type</a>, <br class=\"typebreak\"/>\nconst value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a9dacd1e38e45ee787faafd3a71b23fc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2200200e24eaf5ed6496ff3eaa6c4dcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2200200e24eaf5ed6496ff3eaa6c4dcc\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a2200200e24eaf5ed6496ff3eaa6c4dcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9877dc4e09dc6c625a86a463f56f180d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9877dc4e09dc6c625a86a463f56f180d\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a9877dc4e09dc6c625a86a463f56f180d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad95ccef01367c0b6d75f6f91f5bf5315\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">enumerable_thread_specific</a> ()</td></tr>\n<tr class=\"memdesc:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Each local instance of T is default constructed. <br/></td></tr>\n<tr class=\"separator:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aafd6049aa255826c712aaba778524a7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aafd6049aa255826c712aaba778524a7c\"></a>\ntemplate&lt;typename Finit#if __TBB_ETS_USE_CPP11, typename  = typename internal::enable_if&lt;internal::is_callable_no_args&lt;typename internal::strip&lt;Finit&gt;::type&gt;::value&gt;::type #endif&gt; </td></tr>\n<tr class=\"memitem:aafd6049aa255826c712aaba778524a7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aafd6049aa255826c712aaba778524a7c\">enumerable_thread_specific</a> (Finit finit)</td></tr>\n<tr class=\"memdesc:aafd6049aa255826c712aaba778524a7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br/></td></tr>\n<tr class=\"separator:aafd6049aa255826c712aaba778524a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f0249ee95fa56665da4b6984f3a685a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a6f0249ee95fa56665da4b6984f3a685a\">enumerable_thread_specific</a> (const T &amp;exemplar)</td></tr>\n<tr class=\"memdesc:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar. <br/></td></tr>\n<tr class=\"separator:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0db9450c25a0d0bc94bf8d77e51653d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0db9450c25a0d0bc94bf8d77e51653d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (T &amp;&amp;exemplar)</td></tr>\n<tr class=\"separator:a0db9450c25a0d0bc94bf8d77e51653d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa636348d57b1fc5127c7d642af51f6da\"></a>\ntemplate&lt;typename P1 , typename... P, typename  = typename internal::enable_if&lt;!internal::is_callable_no_args&lt;typename internal::strip&lt;P1&gt;::type&gt;::value                                                          &amp;&amp; !internal::is_compatible_ets&lt;T, typename internal::strip&lt;P1&gt;::type&gt;::value                                                          &amp;&amp; !internal::is_same_type&lt;T, typename internal::strip&lt;P1&gt;::type&gt;::value                                                         &gt;::type&gt; </td></tr>\n<tr class=\"memitem:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">enumerable_thread_specific</a> (P1 &amp;&amp;arg1, P &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Variadic constructor with initializer arguments. Each local instance of T is constructed by T(args...) <br/></td></tr>\n<tr class=\"separator:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ea8d717f770acb63efc406df52d4585\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ea8d717f770acb63efc406df52d4585\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">~enumerable_thread_specific</a> ()</td></tr>\n<tr class=\"memdesc:a6ea8d717f770acb63efc406df52d4585\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a6ea8d717f770acb63efc406df52d4585\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea846c6cbafbe2ff6bde6e8c2a2ee97e\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">local</a> ()</td></tr>\n<tr class=\"memdesc:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">returns reference to local, discarding exists <br/></td></tr>\n<tr class=\"separator:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abbbc24a5816dc163d5df057c5e7f379d\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">local</a> (bool &amp;exists)</td></tr>\n<tr class=\"memdesc:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns reference to calling thread's local copy, creating one if necessary. <br/></td></tr>\n<tr class=\"separator:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c33c5390783e17daf2b25d53ae919fb\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">size</a> () const </td></tr>\n<tr class=\"memdesc:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the number of local copies. <br/></td></tr>\n<tr class=\"separator:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adfa4b2e13e47ab825dc40c4f195d2bc5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">empty</a> () const </td></tr>\n<tr class=\"memdesc:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">true if there have been no local copies created <br/></td></tr>\n<tr class=\"separator:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a070d26debf1f65c83de13f64f91aefdc\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">begin</a> ()</td></tr>\n<tr class=\"memdesc:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">begin iterator <br/></td></tr>\n<tr class=\"separator:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad225e2e8a968b131bf05d72f5686b924\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">end</a> ()</td></tr>\n<tr class=\"memdesc:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end iterator <br/></td></tr>\n<tr class=\"separator:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa097383eb6f90e4a551830fc00b60b3a\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">begin</a> () const </td></tr>\n<tr class=\"memdesc:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">begin const iterator <br/></td></tr>\n<tr class=\"separator:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ed0248f10a7aa5045d2cda77dad9588\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">end</a> () const </td></tr>\n<tr class=\"memdesc:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac94dd896ed78df240da4a450defbca6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac94dd896ed78df240da4a450defbca6c\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ac94dd896ed78df240da4a450defbca6c\">range</a> (size_t grainsize=1)</td></tr>\n<tr class=\"memdesc:ac94dd896ed78df240da4a450defbca6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get range for parallel algorithms. <br/></td></tr>\n<tr class=\"separator:ac94dd896ed78df240da4a450defbca6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25b9153dfe994c8122a7f0227cffe793\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">range</a> (size_t grainsize=1) const </td></tr>\n<tr class=\"memdesc:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const range for parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85a0d8f088ef1ee07aeb2c0e944a4a5e\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys local copies. <br/></td></tr>\n<tr class=\"separator:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b614f913497b8dc168a8e6ea03eac48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6b614f913497b8dc168a8e6ea03eac48\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;other)</td></tr>\n<tr class=\"separator:a6b614f913497b8dc168a8e6ea03eac48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15960d5f730ea183a581730e912700c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a15960d5f730ea183a581730e912700c8\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a15960d5f730ea183a581730e912700c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;other)</td></tr>\n<tr class=\"separator:a15960d5f730ea183a581730e912700c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04038b049009e17c637cc62a175afa29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04038b049009e17c637cc62a175afa29\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:a04038b049009e17c637cc62a175afa29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a33e410c904bc378c66e8e6724ea16671\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;&amp;other)</td></tr>\n<tr class=\"separator:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7af8784cd0d0f04b3f9f50988b8f0885\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7af8784cd0d0f04b3f9f50988b8f0885\"></a>\n<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;other)</td></tr>\n<tr class=\"separator:a7af8784cd0d0f04b3f9f50988b8f0885\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a5e2cfddffa47dd0eb042cf6cbcea815f\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;other)</td></tr>\n<tr class=\"separator:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae01add07bc8d4fbda9db79f692c1ae8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae01add07bc8d4fbda9db79f692c1ae8b\"></a>\n<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:ae01add07bc8d4fbda9db79f692c1ae8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a324887df609279ad02d36b3b8e238729\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a324887df609279ad02d36b3b8e238729\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a324887df609279ad02d36b3b8e238729\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;&amp;other)</td></tr>\n<tr class=\"separator:a324887df609279ad02d36b3b8e238729\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae644ea36b776fdc698d87a60ef4a3179\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine_each</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a408a399f5d1ceaf6d0adc9451932a96a\"></a>\ntemplate&lt;typename U , typename A , ets_key_usage_type C&gt; </td></tr>\n<tr class=\"memitem:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b></td></tr>\n<tr class=\"separator:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename Allocator, ets_key_usage_type ETS_key_type&gt;<br/>\nclass tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</h3>\n\n<p>The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container. </p>\n<pre class=\"fragment\">enumerable_thread_specific has the following properties:\n- thread-local copies are lazily created, with default, exemplar or function initialization.\n- thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.\n- the contained objects need not have operator=() defined if combine is not used.\n- enumerable_thread_specific containers may be copy-constructed or assigned.\n- thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.\n- outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods\n</pre><dl class=\"section user\"><dt>Segmented iterator</dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>\n<dl class=\"section user\"><dt>combine and combine_each</dt><dd><ul>\n<li>Both methods are defined for <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a>.</li>\n<li>combine() requires the type T have operator=() defined.</li>\n<li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li>\n<li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li>\n</ul>\n</dd></dl>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>enumerable_thread_specific.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00073.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::profiling::interface10::event Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>profiling</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00073.html\">event</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00429.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::profiling::interface10::event Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a30cfa97e0e6a87a9872756e0309bf9e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30cfa97e0e6a87a9872756e0309bf9e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>event</b> (const std::string &amp;input)</td></tr>\n<tr class=\"separator:a30cfa97e0e6a87a9872756e0309bf9e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf2739e7b1b9d40255e8c53a52b93ce9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> ()</td></tr>\n<tr class=\"separator:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac74f3476fb9c31c0da70d23a0310e8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac74f3476fb9c31c0da70d23a0310e8ea\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>event</b> (const std::string &amp;)</td></tr>\n<tr class=\"separator:ac74f3476fb9c31c0da70d23a0310e8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf2739e7b1b9d40255e8c53a52b93ce9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> ()</td></tr>\n<tr class=\"separator:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a042ca8adf8c68c4c9355d03b30a6cd4a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a042ca8adf8c68c4c9355d03b30a6cd4a\"></a>\nstatic void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> (const std::string &amp;description)</td></tr>\n<tr class=\"separator:a042ca8adf8c68c4c9355d03b30a6cd4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4abc8ca3a9f40c9b088665f28b2b329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4abc8ca3a9f40c9b088665f28b2b329f\"></a>\nstatic void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> (const std::string &amp;)</td></tr>\n<tr class=\"separator:a4abc8ca3a9f40c9b088665f28b2b329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_profiling.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00074.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::filter Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00074.html\">filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-static-attribs\">Static Protected Attributes</a> &#124;\n<a href=\"a00304.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::filter Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A stage in a pipeline.  \n <a href=\"a00074.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::filter:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00074.png\" usemap=\"#tbb::filter_map\" alt=\"\"/>\n  <map id=\"tbb::filter_map\" name=\"tbb::filter_map\">\n<area href=\"a00172.html\" title=\"A stage in a pipeline served by a user thread. \" alt=\"tbb::thread_bound_filter\" shape=\"rect\" coords=\"0,112,145,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-attribs\"></a>\nStatic Protected Attributes</h2></td></tr>\n<tr class=\"memitem:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9dab2e01b0963b341ab04b59eec1475\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a> = 0x1</td></tr>\n<tr class=\"memdesc:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>\n<tr class=\"separator:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a> = 0x1&lt;&lt;4</td></tr>\n<tr class=\"memdesc:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4th bit distinguishes ordered vs unordered filters.  <a href=\"#a091fcf6abc79edfa5c8bf01f742e2392\">More...</a><br/></td></tr>\n<tr class=\"separator:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1382f216bd094064a18eb48ecc43c86b\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a> = 0x1&lt;&lt;5</td></tr>\n<tr class=\"memdesc:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>\n<tr class=\"separator:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6645ec56872b6ba2056dcaa467e292f7\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a> = 0x1&lt;&lt;6</td></tr>\n<tr class=\"memdesc:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">6th bit marks input filters emitting small objects <br/></td></tr>\n<tr class=\"separator:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td></tr>\n<tr class=\"memdesc:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">7th bit defines exception propagation mode expected by the application.  <a href=\"#aab9689e23a96c6c9bf1c8caae74d92ee\">More...</a><br/></td></tr>\n<tr class=\"separator:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A stage in a pipeline. </p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"aab9689e23a96c6c9bf1c8caae74d92ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char tbb::filter::exact_exception_propagation</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<b>Initial value:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\"><span class=\"preprocessor\">#if TBB_USE_CAPTURED_EXCEPTION</span></div>\n<div class=\"line\"><span class=\"preprocessor\">            0x0</span></div>\n</div><!-- fragment -->\n<p>7th bit defines exception propagation mode expected by the application. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a091fcf6abc79edfa5c8bf01f742e2392\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char tbb::filter::filter_is_out_of_order = 0x1&lt;&lt;4</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>4th bit distinguishes ordered vs unordered filters. </p>\n<p>The bit was not set for parallel filters in TBB 2.1 and earlier, but is_ordered() function always treats parallel filters as out of order. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00075.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::filter_t&lt; T, U &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00075.html\">filter_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00408.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::filter_t&lt; T, U &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Class representing a chain of type-safe pipeline filters.  \n <a href=\"a00075.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a291e76dc7ae92a66109a102904836b62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a291e76dc7ae92a66109a102904836b62\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filter_t</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T, U &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a291e76dc7ae92a66109a102904836b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a86c29832da3f4941254b8dce9e1ff6f0\"></a>\ntemplate&lt;typename Body &gt; </td></tr>\n<tr class=\"memitem:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>filter_t</b> (tbb::filter::mode mode, const Body &amp;body)</td></tr>\n<tr class=\"separator:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae765b59c54ca11f9cdb9f7f2c6c3bd68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae765b59c54ca11f9cdb9f7f2c6c3bd68\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T, U &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:ae765b59c54ca11f9cdb9f7f2c6c3bd68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a445602c2d364b5bbcd8cc9e0b7f37376\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a445602c2d364b5bbcd8cc9e0b7f37376\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a445602c2d364b5bbcd8cc9e0b7f37376\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a49b422a3c97d5dc848d177246de4c149\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b422a3c97d5dc848d177246de4c149\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_proxy</b></td></tr>\n<tr class=\"separator:a49b422a3c97d5dc848d177246de4c149\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21460fde704da22caa222778f5abb140\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a21460fde704da22caa222778f5abb140\"></a>\ntemplate&lt;typename T_ , typename U_ , typename Body &gt; </td></tr>\n<tr class=\"memitem:a21460fde704da22caa222778f5abb140\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, U_ &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">make_filter</a> (tbb::filter::mode, const Body &amp;)</td></tr>\n<tr class=\"memdesc:a21460fde704da22caa222778f5abb140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a filter to participate in parallel_pipeline. <br/></td></tr>\n<tr class=\"separator:a21460fde704da22caa222778f5abb140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa80730e1b71fa4266ca0d1dc12da6caa\"></a>\ntemplate&lt;typename T_ , typename V_ , typename U_ &gt; </td></tr>\n<tr class=\"memitem:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, U_ &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&amp;</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, V_ &gt; &amp;, const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; V_, U_ &gt; &amp;)</td></tr>\n<tr class=\"separator:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename U&gt;<br/>\nclass tbb::interface6::filter_t&lt; T, U &gt;</h3>\n\n<p>Class representing a chain of type-safe pipeline filters. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00076.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::final_scan_tag Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00302.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::final_scan_tag Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Used to indicate that the final scan is being performed.  \n <a href=\"a00076.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_scan.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c30c3fe5fb9ca6cf9c567dcda123610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c30c3fe5fb9ca6cf9c567dcda123610\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator bool</b> ()</td></tr>\n<tr class=\"separator:a1c30c3fe5fb9ca6cf9c567dcda123610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:add2b3159a444aad51e3cf7ffe4d1d636\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add2b3159a444aad51e3cf7ffe4d1d636\"></a>\nstatic bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_final_scan</b> ()</td></tr>\n<tr class=\"separator:add2b3159a444aad51e3cf7ffe4d1d636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Used to indicate that the final scan is being performed. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_scan.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00077.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::fixed_pool Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00406.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::fixed_pool Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::fixed_pool:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00077.png\" usemap=\"#tbb::interface6::fixed_pool_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::fixed_pool_map\" name=\"tbb::interface6::fixed_pool_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3811fe3d437ba2eefa926d52732491a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">fixed_pool</a> (void *buf, size_t size)</td></tr>\n<tr class=\"memdesc:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">construct pool with underlying allocator <br/></td></tr>\n<tr class=\"separator:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab854a85575e5c1e9c9f4d3eafcc28044\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">~fixed_pool</a> ()</td></tr>\n<tr class=\"memdesc:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destroy pool <br/></td></tr>\n<tr class=\"separator:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00078.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::flattened2d&lt; Container &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00078.html\">flattened2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00400.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flattened2d&lt; Container &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b84f8f2cc4499f49d17141eaedc99c0\"></a>\ntypedef conval_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a></td></tr>\n<tr class=\"memdesc:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Basic types. <br/></td></tr>\n<tr class=\"separator:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab0352636ee7434478866739224852d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab0352636ee7434478866739224852d32\"></a>\ntypedef <br class=\"typebreak\"/>\nconval_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:ab0352636ee7434478866739224852d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a426e0eab82833206df0dc36648419647\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a426e0eab82833206df0dc36648419647\"></a>\ntypedef conval_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a426e0eab82833206df0dc36648419647\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7070453b83df5930615d4307eb2f38b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7070453b83df5930615d4307eb2f38b5\"></a>\ntypedef conval_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a7070453b83df5930615d4307eb2f38b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92b8ef6b07970e3f973b3ece9d2a6201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a92b8ef6b07970e3f973b3ece9d2a6201\"></a>\ntypedef conval_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a92b8ef6b07970e3f973b3ece9d2a6201\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9715dae5bf107ca3530a8c5bea12739c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9715dae5bf107ca3530a8c5bea12739c\"></a>\ntypedef <br class=\"typebreak\"/>\nconval_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a9715dae5bf107ca3530a8c5bea12739c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14285cc70108c2f0bc417bb034484a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a14285cc70108c2f0bc417bb034484a0b\"></a>\ntypedef conval_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a14285cc70108c2f0bc417bb034484a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f67e5e005e394746b4c6d54a5c2748c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f67e5e005e394746b4c6d54a5c2748c\"></a>\ntypedef conval_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a4f67e5e005e394746b4c6d54a5c2748c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14b3602cf1c408c89015d7bf6bf59072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a14b3602cf1c408c89015d7bf6bf59072\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::segmented_iterator<br class=\"typebreak\"/>\n&lt; Container, value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a14b3602cf1c408c89015d7bf6bf59072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a295c0b8755120359595a1b1f7447bbc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a295c0b8755120359595a1b1f7447bbc8\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::segmented_iterator<br class=\"typebreak\"/>\n&lt; Container, const value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a295c0b8755120359595a1b1f7447bbc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a96d4bef4d78e9e04f43a4ce0855f2ec7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a96d4bef4d78e9e04f43a4ce0855f2ec7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flattened2d</b> (const Container &amp;c, typename Container::const_iterator b, typename Container::const_iterator e)</td></tr>\n<tr class=\"separator:a96d4bef4d78e9e04f43a4ce0855f2ec7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcc3a2e4b1eae8ef6ee1dfba8b030680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcc3a2e4b1eae8ef6ee1dfba8b030680\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flattened2d</b> (const Container &amp;c)</td></tr>\n<tr class=\"separator:abcc3a2e4b1eae8ef6ee1dfba8b030680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a783ca9408f58ca7f5df00bc1035ff6b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a783ca9408f58ca7f5df00bc1035ff6b2\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a783ca9408f58ca7f5df00bc1035ff6b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab722e1c2b58641d516cb98b0360b9734\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab722e1c2b58641d516cb98b0360b9734\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:ab722e1c2b58641d516cb98b0360b9734\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf0c0dff2b7b8530f06e6aa22b9a79ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf0c0dff2b7b8530f06e6aa22b9a79ea\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:acf0c0dff2b7b8530f06e6aa22b9a79ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b79fe79b6939327ab74628283974226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b79fe79b6939327ab74628283974226\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a5b79fe79b6939327ab74628283974226\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade48bc8ab723d06790e5d98365e8a4f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ade48bc8ab723d06790e5d98365e8a4f5\"></a>\n<a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ade48bc8ab723d06790e5d98365e8a4f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>enumerable_thread_specific.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00079.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::flow_control Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00079.html\">flow_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00407.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flow_control Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>input_filter control to signal end-of-input for parallel_pipeline  \n <a href=\"a00079.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a21a61b812ca97a6eb5549dab4b4ae490\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21a61b812ca97a6eb5549dab4b4ae490\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>stop</b> ()</td></tr>\n<tr class=\"separator:a21a61b812ca97a6eb5549dab4b4ae490\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae4743f434cefacb6650e3e736daf9392\"></a>\ntemplate&lt;typename T , typename U , typename Body &gt; </td></tr>\n<tr class=\"memitem:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concrete_filter</b></td></tr>\n<tr class=\"separator:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>input_filter control to signal end-of-input for parallel_pipeline </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00080.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_async_msg&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00373.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_async_msg&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface9::gfx_async_msg&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00080.png\" usemap=\"#tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\" name=\"tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a98cc30d2957b8a1a571d237d733d6ae4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98cc30d2957b8a1a571d237d733d6ae4\"></a>\ntypedef gfx_offload::task_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_id_type</b></td></tr>\n<tr class=\"separator:a98cc30d2957b8a1a571d237d733d6ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab32f15e9fc934c2e9bd7ea6766d0c5dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab32f15e9fc934c2e9bd7ea6766d0c5dd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_async_msg</b> (const T &amp;input_data)</td></tr>\n<tr class=\"separator:ab32f15e9fc934c2e9bd7ea6766d0c5dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8a27be7f50b5e6f5a43485d9212c87b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af8a27be7f50b5e6f5a43485d9212c87b\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()</td></tr>\n<tr class=\"separator:af8a27be7f50b5e6f5a43485d9212c87b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad1af996a1c91b974832c98fe7c88022a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1af996a1c91b974832c98fe7c88022a\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:ad1af996a1c91b974832c98fe7c88022a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93093df4f22379a96ec253fc22db1b42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93093df4f22379a96ec253fc22db1b42\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_task_id</b> (kernel_id_type id)</td></tr>\n<tr class=\"separator:a93093df4f22379a96ec253fc22db1b42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28a3c2a0b608b2dbc1cc012361c72357\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28a3c2a0b608b2dbc1cc012361c72357\"></a>\nkernel_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_id</b> () const </td></tr>\n<tr class=\"separator:a28a3c2a0b608b2dbc1cc012361c72357\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00081.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_buffer&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00372.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_buffer&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a201b594a833fcd334ca256d6fbbceaa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a201b594a833fcd334ca256d6fbbceaa2\"></a>\ntypedef std::vector&lt; T &gt;::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a201b594a833fcd334ca256d6fbbceaa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac35ff3055f507c9de417f1be90b801bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac35ff3055f507c9de417f1be90b801bf\"></a>\ntypedef std::vector&lt; T &gt;<br class=\"typebreak\"/>\n::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:ac35ff3055f507c9de417f1be90b801bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a458b3a7e4674b4f70405049bce00939c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a458b3a7e4674b4f70405049bce00939c\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a458b3a7e4674b4f70405049bce00939c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a008bcf0693109dcd376871bcff0378bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a008bcf0693109dcd376871bcff0378bd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_buffer</b> (size_type size)</td></tr>\n<tr class=\"separator:a008bcf0693109dcd376871bcff0378bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a919ae73a47d2ef2809fb65e10c9e0145\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a919ae73a47d2ef2809fb65e10c9e0145\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()</td></tr>\n<tr class=\"separator:a919ae73a47d2ef2809fb65e10c9e0145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17627787221944d6cc7154a2863582b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a17627787221944d6cc7154a2863582b2\"></a>\nconst T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a17627787221944d6cc7154a2863582b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7dd0d1242b09bd3532cc8953f8551d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad7dd0d1242b09bd3532cc8953f8551d1\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ad7dd0d1242b09bd3532cc8953f8551d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae3b0ac3d0426f0492806b2031e561352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3b0ac3d0426f0492806b2031e561352\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cbegin</b> () const </td></tr>\n<tr class=\"separator:ae3b0ac3d0426f0492806b2031e561352\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a11a2e545a8538312360d69d95ff07269\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a11a2e545a8538312360d69d95ff07269\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cend</b> () const </td></tr>\n<tr class=\"separator:a11a2e545a8538312360d69d95ff07269\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3637182841db17a6e7a56d819ddb94d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3637182841db17a6e7a56d819ddb94d2\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a3637182841db17a6e7a56d819ddb94d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28b98e880f24b77243ac8c4c22b63177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28b98e880f24b77243ac8c4c22b63177\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:a28b98e880f24b77243ac8c4c22b63177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a743acfba864a10b8dad3c119db735425\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a743acfba864a10b8dad3c119db735425\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (size_type pos)</td></tr>\n<tr class=\"separator:a743acfba864a10b8dad3c119db735425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2146f49b0d2f5d87b7b6721babcd42e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2146f49b0d2f5d87b7b6721babcd42e6\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (size_type pos) const </td></tr>\n<tr class=\"separator:a2146f49b0d2f5d87b7b6721babcd42e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00082.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00374.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">device_type</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad7170d237ab8e643a73adbe258527eca\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00080.html\">gfx_async_msg</a>&lt; T &gt;</td></tr>\n<tr class=\"separator:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c26133f572549b4730f33d951bfcccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9c26133f572549b4730f33d951bfcccf\"></a>\ntypedef func_wrapper&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a9c26133f572549b4730f33d951bfcccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a437863d05736e2fb9efead005bb009ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a437863d05736e2fb9efead005bb009ca\"></a>\ntypedef gfx_offload::task_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_id_type</b></td></tr>\n<tr class=\"separator:a437863d05736e2fb9efead005bb009ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ae67f4514754d58e524c30b6567f3829b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67f4514754d58e524c30b6567f3829b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_factory</b> (tbb::flow::graph &amp;g)</td></tr>\n<tr class=\"separator:ae67f4514754d58e524c30b6567f3829b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8ba5e88a76a43cd85e122d30e25761ce\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, Args &amp;...args)</td></tr>\n<tr class=\"separator:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad02cbeeadac99f4ebecfb849439a3eb6\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, const kernel_type &amp;kernel, Args &amp;...args)</td></tr>\n<tr class=\"separator:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae01ef652b38b2ef99729a39bd26eac5a\"></a>\ntemplate&lt;typename FinalizeFn , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, FinalizeFn fn, Args &amp;...)</td></tr>\n<tr class=\"separator:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00083.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface9::global_control Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00083.html\">global_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00415.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface9::global_control Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a04221b8e619bef332234db90d31f3e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parameter</b> { <b>max_allowed_parallelism</b>, \n<b>thread_stack_size</b>, \n<b>parameter_max</b>\n }</td></tr>\n<tr class=\"separator:a04221b8e619bef332234db90d31f3e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5375ee43ca415f20f3c1f47db5220302\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5375ee43ca415f20f3c1f47db5220302\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_control</b> (parameter p, size_t value)</td></tr>\n<tr class=\"separator:a5375ee43ca415f20f3c1f47db5220302\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a8451d931cfc205d896ca2da26fe123ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8451d931cfc205d896ca2da26fe123ff\"></a>\nstatic size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>active_value</b> (parameter p)</td></tr>\n<tr class=\"separator:a8451d931cfc205d896ca2da26fe123ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>global_control.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00084.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::graph_proxy Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00346.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::graph_proxy Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Pure virtual template classes that define interfaces for async communication.  \n <a href=\"a00084.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph_abstractions.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::graph_proxy:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00084.png\" usemap=\"#tbb::flow::interface10::graph_proxy_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::graph_proxy_map\" name=\"tbb::flow::interface10::graph_proxy_map\">\n<area href=\"a00134.html\" alt=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;\" shape=\"rect\" coords=\"0,56,287,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a9be5db28923f84cfc468d39139fb3\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>\n<tr class=\"separator:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4e11378739911c10db09ba71abe7c1a\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>\n<tr class=\"separator:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Pure virtual template classes that define interfaces for async communication. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_abstractions.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00085.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_thread_v3::id Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00085.html\">id</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00428.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3::id Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aa08381fcad9d2adc0bf8fb009ad38366\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa08381fcad9d2adc0bf8fb009ad38366\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread_v3</b></td></tr>\n<tr class=\"separator:aa08381fcad9d2adc0bf8fb009ad38366\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ffa9d9b2f7e18d73535b2879ba64ae0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ffa9d9b2f7e18d73535b2879ba64ae0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a1ffa9d9b2f7e18d73535b2879ba64ae0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3be52bbc6138f2d2180d89d588b5c404\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3be52bbc6138f2d2180d89d588b5c404\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator!=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a3be52bbc6138f2d2180d89d588b5c404\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cd4a67d579d3ea07557ce6a632bdff0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cd4a67d579d3ea07557ce6a632bdff0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&lt;</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a5cd4a67d579d3ea07557ce6a632bdff0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf358e695ce2c3bc64029bb69b6b7841\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf358e695ce2c3bc64029bb69b6b7841\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&lt;=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:aaf358e695ce2c3bc64029bb69b6b7841\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&gt;</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f559c30c06931effca0ee4a351d8fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f559c30c06931effca0ee4a351d8fff\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&gt;=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a9f559c30c06931effca0ee4a351d8fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8dcf9ef009469428dc3752f54240eb69\"></a>\ntemplate&lt;class charT , class traits &gt; </td></tr>\n<tr class=\"memitem:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::basic_ostream&lt; charT, <br class=\"typebreak\"/>\ntraits &gt; &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;&lt;</b> (std::basic_ostream&lt; charT, traits &gt; &amp;out, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> <a class=\"el\" href=\"a00085.html\">id</a>)</td></tr>\n<tr class=\"separator:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a77bf86c87119e219bb508d787d97da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a77bf86c87119e219bb508d787d97da\"></a>\n<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> <br class=\"typebreak\"/>\n__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_get_id_v3</b> ()</td></tr>\n<tr class=\"separator:a0a77bf86c87119e219bb508d787d97da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9245f821db4ab0e093ec5e7b7f02eb8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9245f821db4ab0e093ec5e7b7f02eb8b\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_hasher</b> (const <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> &amp;<a class=\"el\" href=\"a00085.html\">id</a>)</td></tr>\n<tr class=\"separator:a9245f821db4ab0e093ec5e7b7f02eb8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6fded011b60cda6876a33f68b2368ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af6fded011b60cda6876a33f68b2368ee\"></a>\n<a class=\"el\" href=\"a00085.html\">id</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic_compare_and_swap</b> (<a class=\"el\" href=\"a00085.html\">id</a> &amp;location, const <a class=\"el\" href=\"a00085.html\">id</a> &amp;value, const <a class=\"el\" href=\"a00085.html\">id</a> &amp;comparand)</td></tr>\n<tr class=\"separator:af6fded011b60cda6876a33f68b2368ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00086.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::improper_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00334.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::improper_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for PPL locks.  \n <a href=\"a00086.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::improper_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00086.png\" usemap=\"#tbb::improper_lock_map\" alt=\"\"/>\n  <map id=\"tbb::improper_lock_map\" name=\"tbb::improper_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a21c70e6c3868a93a7cd0e725d411da50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21c70e6c3868a93a7cd0e725d411da50\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a21c70e6c3868a93a7cd0e725d411da50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for PPL locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00087.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tick_count::interval_t Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00087.html\">interval_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00342.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count::interval_t Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Relative time interval.  \n <a href=\"a00087.html#details\">More...</a></p>\n\n<p><code>#include &lt;tick_count.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a95e3e14750bebafe719856176e2737db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a95e3e14750bebafe719856176e2737db\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">interval_t</a> ()</td></tr>\n<tr class=\"memdesc:a95e3e14750bebafe719856176e2737db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct a time interval representing zero time duration. <br/></td></tr>\n<tr class=\"separator:a95e3e14750bebafe719856176e2737db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73b462297173f6bffa15bc5a86c30ef4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">interval_t</a> (double sec)</td></tr>\n<tr class=\"memdesc:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct a time interval representing sec seconds time duration. <br/></td></tr>\n<tr class=\"separator:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe81446bbbb6b6e98d854b91acf47809\"></a>\ndouble&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">seconds</a> () const </td></tr>\n<tr class=\"memdesc:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the length of a time interval in seconds. <br/></td></tr>\n<tr class=\"separator:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19bf32f4541252daaa6b09fd33fa9177\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">operator+=</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i)</td></tr>\n<tr class=\"memdesc:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Accumulation operator. <br/></td></tr>\n<tr class=\"separator:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3394d9f3678e6a4c3d6e1be840fe2ff2\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">operator-=</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i)</td></tr>\n<tr class=\"memdesc:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtraction operator. <br/></td></tr>\n<tr class=\"separator:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a68e741a8f6e2384027e93d1f654ad100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a68e741a8f6e2384027e93d1f654ad100\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::tick_count</b></td></tr>\n<tr class=\"separator:a68e741a8f6e2384027e93d1f654ad100\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5ceaed3ebf5a0d41088a5bc7c8dc653\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the intervals from the tick_counts and subtract them. <br/></td></tr>\n<tr class=\"separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8910ee3b69f68eb905af787c273e9a8\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">operator+</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i, const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;j)</td></tr>\n<tr class=\"memdesc:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add two intervals. <br/></td></tr>\n<tr class=\"separator:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d11133daa9a7d3c903d070293278f8f\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">operator-</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i, const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;j)</td></tr>\n<tr class=\"memdesc:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtract two intervals. <br/></td></tr>\n<tr class=\"separator:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Relative time interval. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tick_count.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00088.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::invalid_multiple_scheduling Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00337.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::invalid_multiple_scheduling Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>.  \n <a href=\"a00088.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::invalid_multiple_scheduling:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00088.png\" usemap=\"#tbb::invalid_multiple_scheduling_map\" alt=\"\"/>\n  <map id=\"tbb::invalid_multiple_scheduling_map\" name=\"tbb::invalid_multiple_scheduling_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a602e4e959e7320daca2f31ea912a7538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a602e4e959e7320daca2f31ea912a7538\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a602e4e959e7320daca2f31ea912a7538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00089.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00089.html\">kernel</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00349.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00089.png\" usemap=\"#tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\" name=\"tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6033ba751776076bc4a1bb96943769ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6033ba751776076bc4a1bb96943769ac\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel</b> (const <a class=\"el\" href=\"a00089.html\">kernel</a> &amp;k)</td></tr>\n<tr class=\"separator:a6033ba751776076bc4a1bb96943769ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter_ &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00090.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::limiter_node&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00090.html\">limiter_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::limiter_node&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00091.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool&lt; Alloc &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00091.html\">memory_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00405.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool&lt; Alloc &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Thread-safe growable pool allocator for variable-size requests.  \n <a href=\"a00091.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::memory_pool&lt; Alloc &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00091.png\" usemap=\"#tbb::interface6::memory_pool&lt; Alloc &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::memory_pool&lt; Alloc &gt;_map\" name=\"tbb::interface6::memory_pool&lt; Alloc &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:af4c36829a159eac04d630ac5a99b9354\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af4c36829a159eac04d630ac5a99b9354\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">memory_pool</a> (const Alloc &amp;src=Alloc())</td></tr>\n<tr class=\"memdesc:af4c36829a159eac04d630ac5a99b9354\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">construct pool with underlying allocator <br/></td></tr>\n<tr class=\"separator:af4c36829a159eac04d630ac5a99b9354\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2c7645b39b7280b1b3cf393d05fbaf7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">~memory_pool</a> ()</td></tr>\n<tr class=\"memdesc:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destroy pool <br/></td></tr>\n<tr class=\"separator:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Alloc&gt;<br/>\nclass tbb::interface6::memory_pool&lt; Alloc &gt;</h3>\n\n<p>Thread-safe growable pool allocator for variable-size requests. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00092.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; T, P &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00401.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00092.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6202050e0edbded0b0534ea4be9547e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6202050e0edbded0b0534ea4be9547e0\"></a>\ntypedef <br class=\"typebreak\"/>\ntbb::internal::allocator_type<br class=\"typebreak\"/>\n&lt; T &gt;::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a6202050e0edbded0b0534ea4be9547e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07450f397df1af8096f31bfa8f2e1722\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07450f397df1af8096f31bfa8f2e1722\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a07450f397df1af8096f31bfa8f2e1722\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a972521ed466cc8140d386331a25e895a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a972521ed466cc8140d386331a25e895a\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a972521ed466cc8140d386331a25e895a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83b91759effc3a452fc565ac3bb45613\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83b91759effc3a452fc565ac3bb45613\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a83b91759effc3a452fc565ac3bb45613\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15abe537e2dad4132c956c08d9d0a27e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15abe537e2dad4132c956c08d9d0a27e\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a15abe537e2dad4132c956c08d9d0a27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac20767f3b7a8fcdc1aff0b0874245d3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac20767f3b7a8fcdc1aff0b0874245d3a\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ac20767f3b7a8fcdc1aff0b0874245d3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23267e855e2427b401b99ce4b547f83e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23267e855e2427b401b99ce4b547f83e\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a23267e855e2427b401b99ce4b547f83e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a384be31e682a3b86b5b11e635232c9c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a384be31e682a3b86b5b11e635232c9c5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (pool_type &amp;pool)  throw ()</td></tr>\n<tr class=\"separator:a384be31e682a3b86b5b11e635232c9c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2b4cf16b566e40ddb196c371e5ae96e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2b4cf16b566e40ddb196c371e5ae96e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:aa2b4cf16b566e40ddb196c371e5ae96e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad32ad8245399fbdb38a0a41e912d86d9\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, P &gt; &amp;src)  throw ()</td></tr>\n<tr class=\"separator:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55653a8c539901be6ca24a120a5d7b72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a55653a8c539901be6ca24a120a5d7b72\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a55653a8c539901be6ca24a120a5d7b72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a3e4236f6e1266f126dac557906ce2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a3e4236f6e1266f126dac557906ce2c\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:a8a3e4236f6e1266f126dac557906ce2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10b9888883a3dbd66e87c4a7f874ef28\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9fcf288f2d653972d1bdc0c65abebed4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2bded8e3fb2cec32b48771e7a1bbb838\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac51b34ef90ecabdd2e0483e25603a15b\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8be8f1b38d4b1b6bea2d83f611bf66e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8be8f1b38d4b1b6bea2d83f611bf66e7\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:a8be8f1b38d4b1b6bea2d83f611bf66e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affac76f7742c4d8ea6345e0aad82792a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affac76f7742c4d8ea6345e0aad82792a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:affac76f7742c4d8ea6345e0aad82792a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2223b6469f88aadc432a4b3f88728d0f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:aecd858782faee0fb5fa707671cfc49aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecd858782faee0fb5fa707671cfc49aa\"></a>\ntypedef P&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_type</b></td></tr>\n<tr class=\"separator:aecd858782faee0fb5fa707671cfc49aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a0fbd737811d556f1d2898d3722e85f32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fbd737811d556f1d2898d3722e85f32\"></a>\npool_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_pool</b></td></tr>\n<tr class=\"separator:a0fbd737811d556f1d2898d3722e85f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c34ee2e5a57845f050b507cc516a005\"></a>\ntemplate&lt;typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b></td></tr>\n<tr class=\"separator:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac8c26a64f4e012f2a9cf6035cf029905\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2f7230e5bc817e7512e18b5311b3371b\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename P = internal::pool_base&gt;<br/>\nclass tbb::interface6::memory_pool_allocator&lt; T, P &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00093.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; void, P &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00403.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00093.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00124.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa4a3be261ace6f19c3c40ef2503c4984\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4a3be261ace6f19c3c40ef2503c4984\"></a>\ntypedef P&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_type</b></td></tr>\n<tr class=\"separator:aa4a3be261ace6f19c3c40ef2503c4984\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb58c3e8f2e0a8f9152eae641ee420fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb58c3e8f2e0a8f9152eae641ee420fa\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:afb58c3e8f2e0a8f9152eae641ee420fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e53158493ed0d617460e8dd6534a525\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e53158493ed0d617460e8dd6534a525\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a5e53158493ed0d617460e8dd6534a525\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a676a2c2649d6ffc45466d94555d71df2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a676a2c2649d6ffc45466d94555d71df2\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a676a2c2649d6ffc45466d94555d71df2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8e697e2d03e8f69de1728409bec4f7b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8e697e2d03e8f69de1728409bec4f7b5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (pool_type &amp;pool)  throw ()</td></tr>\n<tr class=\"separator:a8e697e2d03e8f69de1728409bec4f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a001103c81ba25e645305f19a82db2e4a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a001103c81ba25e645305f19a82db2e4a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a001103c81ba25e645305f19a82db2e4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d3db3082c1fa40ccb3997626f61e61e\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, P &gt; &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a1e497d3d88dcb063ab6594eb4ad3dc35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e497d3d88dcb063ab6594eb4ad3dc35\"></a>\npool_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_pool</b></td></tr>\n<tr class=\"separator:a1e497d3d88dcb063ab6594eb4ad3dc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c34ee2e5a57845f050b507cc516a005\"></a>\ntemplate&lt;typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b></td></tr>\n<tr class=\"separator:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac8c26a64f4e012f2a9cf6035cf029905\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2f7230e5bc817e7512e18b5311b3371b\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename P&gt;<br/>\nclass tbb::interface6::memory_pool_allocator&lt; void, P &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00094.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>rml::MemPoolPolicy Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00246.html\">rml</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00279.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rml::MemPoolPolicy Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:afec5c1b4036a54bbae8678e469e5b2bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>TBBMALLOC_POOL_VERSION</b> = 1\n }</td></tr>\n<tr class=\"separator:afec5c1b4036a54bbae8678e469e5b2bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a73e485e36709acc04a9448eaa95bb666\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73e485e36709acc04a9448eaa95bb666\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolPolicy</b> (rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false)</td></tr>\n<tr class=\"separator:a73e485e36709acc04a9448eaa95bb666\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a0935ae38d632881a6d6cccb675cb6f27\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0935ae38d632881a6d6cccb675cb6f27\"></a>\nrawAllocType&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pAlloc</b></td></tr>\n<tr class=\"separator:a0935ae38d632881a6d6cccb675cb6f27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a221c0a53496a391c60d2f452fc9d76ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a221c0a53496a391c60d2f452fc9d76ae\"></a>\nrawFreeType&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pFree</b></td></tr>\n<tr class=\"separator:a221c0a53496a391c60d2f452fc9d76ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac91fffeccd1f4255bbb5719f25785bce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac91fffeccd1f4255bbb5719f25785bce\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>granularity</b></td></tr>\n<tr class=\"separator:ac91fffeccd1f4255bbb5719f25785bce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaea7ca6973332913c839073822352046\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaea7ca6973332913c839073822352046\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>version</b></td></tr>\n<tr class=\"separator:aaea7ca6973332913c839073822352046\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab00be5199577e8dd87f25c867a488aaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab00be5199577e8dd87f25c867a488aaf\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>fixedPool</b>: 1</td></tr>\n<tr class=\"separator:ab00be5199577e8dd87f25c867a488aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afc2ea43e020580853224fa430736d38a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afc2ea43e020580853224fa430736d38a\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>keepAllMemory</b>: 1</td></tr>\n<tr class=\"separator:afc2ea43e020580853224fa430736d38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe8bde7ec5c0f347f5c8e648c92c612\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe8bde7ec5c0f347f5c8e648c92c612\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reserved</b>: 30</td></tr>\n<tr class=\"separator:a2fe8bde7ec5c0f347f5c8e648c92c612\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00095.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::missing_wait Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00336.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::missing_wait Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>.  \n <a href=\"a00095.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::missing_wait:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00095.png\" usemap=\"#tbb::missing_wait_map\" alt=\"\"/>\n  <map id=\"tbb::missing_wait_map\" name=\"tbb::missing_wait_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a04602f54c8ae5d83a5410ebc0a5adf80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04602f54c8ae5d83a5410ebc0a5adf80\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a04602f54c8ae5d83a5410ebc0a5adf80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00096.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00340.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  \n <a href=\"a00096.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::movable_exception&lt; ExceptionData &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00096.png\" usemap=\"#tbb::movable_exception&lt; ExceptionData &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::movable_exception&lt; ExceptionData &gt;_map\" name=\"tbb::movable_exception&lt; ExceptionData &gt;_map\">\n<area href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\" alt=\"tbb::tbb_exception\" shape=\"rect\" coords=\"0,56,248,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a785b749022a1e6a7486d315b84bd37e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a785b749022a1e6a7486d315b84bd37e5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>movable_exception</b> (const ExceptionData &amp;data_)</td></tr>\n<tr class=\"separator:a785b749022a1e6a7486d315b84bd37e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7be7103edd861653baebbca5aeed5205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7be7103edd861653baebbca5aeed5205\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>movable_exception</b> (const <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a7be7103edd861653baebbca5aeed5205\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a35a4bf997b56ea221ae1bd9bb17cd33b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35a4bf997b56ea221ae1bd9bb17cd33b\"></a>\nconst <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a35a4bf997b56ea221ae1bd9bb17cd33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4eac52bc2a10d4bfcd74ad85c2853740\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4eac52bc2a10d4bfcd74ad85c2853740\"></a>\nExceptionData &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()  throw ()</td></tr>\n<tr class=\"separator:a4eac52bc2a10d4bfcd74ad85c2853740\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a394c11a07cfcd4977327f58362aa1439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a394c11a07cfcd4977327f58362aa1439\"></a>\nconst ExceptionData &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const   throw ()</td></tr>\n<tr class=\"separator:a394c11a07cfcd4977327f58362aa1439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae74fdea1aac39197bc1f5026dfd0a840\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">name</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59040b31c3147f7c77232a6cbc76ba05\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">what</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00096.html\">movable_exception</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">move</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a46eee42a3279007f48c9e8f11d074d16\">More...</a><br/></td></tr>\n<tr class=\"separator:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">destroy</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#aa4be7e2bf375edcb218fb5d7ed8e279b\">More...</a><br/></td></tr>\n<tr class=\"separator:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">throw_self</a> () __TBB_override</td></tr>\n<tr class=\"memdesc:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#a0e9ac8a4468eb0ff3b2bb246b806a10e\">More...</a><br/></td></tr>\n<tr class=\"separator:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00169\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00169')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:adba063da80054afe64d5268711084d9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adba063da80054afe64d5268711084d9b\"></a>\nExceptionData&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">my_exception_data</a></td></tr>\n<tr class=\"memdesc:adba063da80054afe64d5268711084d9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">User data. <br/></td></tr>\n<tr class=\"separator:adba063da80054afe64d5268711084d9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename ExceptionData&gt;<br/>\nclass tbb::movable_exception&lt; ExceptionData &gt;</h3>\n\n<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. </p>\n<p>Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). </p>\n<dl class=\"section see\"><dt>See Also</dt><dd><a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> </dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa4be7e2bf375edcb218fb5d7ed8e279b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a46eee42a3279007f48c9e8f11d074d16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00096.html\">movable_exception</a>* <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0e9ac8a4468eb0ff3b2bb246b806a10e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00097.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00294.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Wrapper around the platform's native lock.  \n <a href=\"a00097.html#details\">More...</a></p>\n\n<p><code>#include &lt;mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00097.png\" usemap=\"#tbb::mutex_map\" alt=\"\"/>\n  <map id=\"tbb::mutex_map\" name=\"tbb::mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00150.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad35737cbe356d6814f59abba680ab067\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>state_t</b> { <b>INITIALIZED</b> =0x1234, \n<b>DESTROYED</b> =0x789A, \n<b>HELD</b> =0x56CD\n }</td></tr>\n<tr class=\"separator:ad35737cbe356d6814f59abba680ab067\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abbe0cd12246121753ace00a5a12a90b0\"></a>\ntypedef LPCRITICAL_SECTION&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a></td></tr>\n<tr class=\"memdesc:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return native_handle. <br/></td></tr>\n<tr class=\"separator:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d992511dfc6f47295b10eb7fc0813d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d992511dfc6f47295b10eb7fc0813d4\"></a>\ntypedef pthread_mutex_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a0d992511dfc6f47295b10eb7fc0813d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1b280c954ffc8b8b3e63e4ee4144035\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">mutex</a> ()</td></tr>\n<tr class=\"memdesc:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95ff02ee699b34696001db4003c11a3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a95ff02ee699b34696001db4003c11a3a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a95ff02ee699b34696001db4003c11a3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a95ff02ee699b34696001db4003c11a3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a480283933106941125717499f9c5ad42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a480283933106941125717499f9c5ad42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a480283933106941125717499f9c5ad42\">More...</a><br/></td></tr>\n<tr class=\"separator:a480283933106941125717499f9c5ad42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a721eeae7ba16f8b92535f4534b583874\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a721eeae7ba16f8b92535f4534b583874\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:a721eeae7ba16f8b92535f4534b583874\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a721eeae7ba16f8b92535f4534b583874\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af69874d93822c905bdea0ab9e5ca5b89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af69874d93822c905bdea0ab9e5ca5b89\"></a>\n<a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:af69874d93822c905bdea0ab9e5ca5b89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0857c4596d7d5de09fe402ccd41d3e42\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">set_state</a> (state_t to)</td></tr>\n<tr class=\"memdesc:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set the internal state. <br/></td></tr>\n<tr class=\"separator:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a2677d672446faa842de9de38b3aff80a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2677d672446faa842de9de38b3aff80a\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a2677d672446faa842de9de38b3aff80a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf7e9e11c47cc869d219298232d6c0a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf7e9e11c47cc869d219298232d6c0a1\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:adf7e9e11c47cc869d219298232d6c0a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab729ebd784af412184653c4fa90468d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab729ebd784af412184653c4fa90468d0\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:ab729ebd784af412184653c4fa90468d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Wrapper around the platform's native lock. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a480283933106941125717499f9c5ad42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock::try_acquire()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00098.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00098.html\">node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00382.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00098.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ace61f7bd9d097375f6e33fea4758fbf9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ace61f7bd9d097375f6e33fea4758fbf9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key)</td></tr>\n<tr class=\"separator:ace61f7bd9d097375f6e33fea4758fbf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6755d387982f27a06d859811699e40b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6755d387982f27a06d859811699e40b7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key, const T &amp;t)</td></tr>\n<tr class=\"separator:a6755d387982f27a06d859811699e40b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61f7e6e835b09c4387fd0c8498fbf603\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61f7e6e835b09c4387fd0c8498fbf603\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key, T &amp;&amp;t)</td></tr>\n<tr class=\"separator:a61f7e6e835b09c4387fd0c8498fbf603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac28d72d857eccf6e7cc06a9ee146d416\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac28d72d857eccf6e7cc06a9ee146d416\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (value_type &amp;&amp;i)</td></tr>\n<tr class=\"separator:ac28d72d857eccf6e7cc06a9ee146d416\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7c083b7efff342469789f487e3561ec\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae7c083b7efff342469789f487e3561ec\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:ae7c083b7efff342469789f487e3561ec\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>node</b> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:ae7c083b7efff342469789f487e3561ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7a5d977900af48a359f428658e2876b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad7a5d977900af48a359f428658e2876b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (value_type &amp;i)</td></tr>\n<tr class=\"separator:ad7a5d977900af48a359f428658e2876b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbdc995156da4cf9b11561d006cf6821\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbdc995156da4cf9b11561d006cf6821\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const value_type &amp;i)</td></tr>\n<tr class=\"separator:acbdc995156da4cf9b11561d006cf6821\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15b3c8955eb1b104db439e9caf3737c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15b3c8955eb1b104db439e9caf3737c3\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t, node_allocator_type &amp;a)</td></tr>\n<tr class=\"separator:a15b3c8955eb1b104db439e9caf3737c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3115742612b79db574914741f2fff45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3115742612b79db574914741f2fff45\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr, node_allocator_type &amp;a)</td></tr>\n<tr class=\"separator:aa3115742612b79db574914741f2fff45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a6977520eaa2f1dee220f726c8a884b46\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6977520eaa2f1dee220f726c8a884b46\"></a>\nvalue_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>item</b></td></tr>\n<tr class=\"separator:a6977520eaa2f1dee220f726c8a884b46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00099.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00296.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A mutex which does nothing.  \n <a href=\"a00099.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00099.png\" usemap=\"#tbb::null_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::null_mutex_map\" name=\"tbb::null_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00145.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a20ed8301299d9ec166588401269d1788\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20ed8301299d9ec166588401269d1788\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a20ed8301299d9ec166588401269d1788\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49bd7f5da83382e39f898d06cbf0e23e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49bd7f5da83382e39f898d06cbf0e23e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:a49bd7f5da83382e39f898d06cbf0e23e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4684b268ff379a69cd1fe93718ee7fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4684b268ff379a69cd1fe93718ee7fc\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:ae4684b268ff379a69cd1fe93718ee7fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A mutex which does nothing. </p>\n<p>A <a class=\"el\" href=\"a00099.html\" title=\"A mutex which does nothing. \">null_mutex</a> does no operation and simulates success. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00100.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_rw_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00298.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A rw mutex which does nothing.  \n <a href=\"a00100.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_rw_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00100.png\" usemap=\"#tbb::null_rw_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::null_rw_mutex_map\" name=\"tbb::null_rw_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00151.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a2a676977ac67532f5f35f849ec7eac8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a676977ac67532f5f35f849ec7eac8c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:a2a676977ac67532f5f35f849ec7eac8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab153992db6e44aee96ce8c1b2d495c94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab153992db6e44aee96ce8c1b2d495c94\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:ab153992db6e44aee96ce8c1b2d495c94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8500b8a645b1c03221fd1fb4156fa78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8500b8a645b1c03221fd1fb4156fa78\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:ab8500b8a645b1c03221fd1fb4156fa78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A rw mutex which does nothing. </p>\n<p>A <a class=\"el\" href=\"a00100.html\" title=\"A rw mutex which does nothing. \">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00101.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::null_type Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00101.html\">null_type</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::null_type Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A generic null type.  \n <a href=\"a00101.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A generic null type. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00102.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00355.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00102.png\" usemap=\"#tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\">\n<area href=\"a00025.html\" alt=\"tbb::flow::interface10::async_msg&lt; T &gt;\" shape=\"rect\" coords=\"0,0,326,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa3c63f3f5da681da27e2aa133f8bffd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3c63f3f5da681da27e2aa133f8bffd2\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:aa3c63f3f5da681da27e2aa133f8bffd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aadd4b2e6518cf36405fd47ac87db7f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aadd4b2e6518cf36405fd47ac87db7f19\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const T &amp;data)</td></tr>\n<tr class=\"separator:aadd4b2e6518cf36405fd47ac87db7f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4371b06eb85a3abaf7ba0ca3d66bc5cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4371b06eb85a3abaf7ba0ca3d66bc5cc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const T &amp;data, cl_event event)</td></tr>\n<tr class=\"separator:a4371b06eb85a3abaf7ba0ca3d66bc5cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a163f1a440bcddf34dc8b06eb61b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a163f1a440bcddf34dc8b06eb61b21\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> (bool wait=true)</td></tr>\n<tr class=\"separator:ac8a163f1a440bcddf34dc8b06eb61b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae47837a584dc42f4c7bd44dad7708e9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae47837a584dc42f4c7bd44dad7708e9d\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> (bool wait=true) const </td></tr>\n<tr class=\"separator:ae47837a584dc42f4c7bd44dad7708e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46fe2dd1ef8547701e58e14a483e0de3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46fe2dd1ef8547701e58e14a483e0de3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;dmsg)</td></tr>\n<tr class=\"separator:a46fe2dd1ef8547701e58e14a483e0de3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa70010c232651e11ff07e88991717745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa70010c232651e11ff07e88991717745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;&amp;dmsg)</td></tr>\n<tr class=\"separator:aa70010c232651e11ff07e88991717745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a384293c9b08c51e87164e1e4fffbeddf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a384293c9b08c51e87164e1e4fffbeddf\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;dmsg)</td></tr>\n<tr class=\"separator:a384293c9b08c51e87164e1e4fffbeddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae07788102cdb52b24ffa3c60bf35b561\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae07788102cdb52b24ffa3c60bf35b561\"></a>\ncl_event const *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_event</b> () const </td></tr>\n<tr class=\"separator:ae07788102cdb52b24ffa3c60bf35b561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a030a92451783a9c07287983339b927d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a030a92451783a9c07287983339b927d4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_event</b> (cl_event e) const </td></tr>\n<tr class=\"separator:a030a92451783a9c07287983339b927d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93064e1bfa9bb387c650faa75401981a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93064e1bfa9bb387c650faa75401981a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear_event</b> () const </td></tr>\n<tr class=\"separator:a93064e1bfa9bb387c650faa75401981a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af267060e5a040c3db3c26ae16e088914\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af267060e5a040c3db3c26ae16e088914\"></a>\ntemplate&lt;typename Callback &gt; </td></tr>\n<tr class=\"memitem:af267060e5a040c3db3c26ae16e088914\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>register_callback</b> (Callback c) const </td></tr>\n<tr class=\"separator:af267060e5a040c3db3c26ae16e088914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator T &amp;</b> ()</td></tr>\n<tr class=\"separator:ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6c7c0102d601788ff6c54f34b066293\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae6c7c0102d601788ff6c54f34b066293\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator const T &amp;</b> () const </td></tr>\n<tr class=\"separator:ae6c7c0102d601788ff6c54f34b066293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a15d3b949f1ce48860a05fb3e0a537907\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15d3b949f1ce48860a05fb3e0a537907\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>finalize</b> () const __TBB_override</td></tr>\n<tr class=\"separator:a15d3b949f1ce48860a05fb3e0a537907\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00103.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00359.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00103.png\" usemap=\"#tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\">\n<area href=\"a00115.html\" alt=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,56,317,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a617261c096aa90e9ea0ca4a63225bc6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a617261c096aa90e9ea0ca4a63225bc6a\"></a>\ntypedef cl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object_type</b></td></tr>\n<tr class=\"separator:a617261c096aa90e9ea0ca4a63225bc6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a051eb49af1f1573b96bb425c13784219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a051eb49af1f1573b96bb425c13784219\"></a>\ntypedef <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object_type</b></td></tr>\n<tr class=\"separator:a051eb49af1f1573b96bb425c13784219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a918d4534226f0ae3639136953817e565\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a918d4534226f0ae3639136953817e565\"></a>\ntypedef Factory&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_factory_type</b></td></tr>\n<tr class=\"separator:a918d4534226f0ae3639136953817e565\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a42372f458b493d1c748ca01bb811d831\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>iterator</b> = T *</td></tr>\n<tr class=\"separator:a42372f458b493d1c748ca01bb811d831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad841d68e0d62385b7e3d6dbc3255c51f\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>access</b> () const </td></tr>\n<tr class=\"separator:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34e9721ad01f57bdb6cd7135cd681924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34e9721ad01f57bdb6cd7135cd681924\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a34e9721ad01f57bdb6cd7135cd681924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9adeb803f65739a617e7363eef2725fe\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2e2c887ab99d86b54b8bef14f21d4954\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a653086e25f39f175b5bf33f6767b5bf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a653086e25f39f175b5bf33f6767b5bf8\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a653086e25f39f175b5bf33f6767b5bf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb7b3759979dc6414687016028d59b61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adb7b3759979dc6414687016028d59b61\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (ptrdiff_t k)</td></tr>\n<tr class=\"separator:adb7b3759979dc6414687016028d59b61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a753e6325d84b7147ff73777c5938cdae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a753e6325d84b7147ff73777c5938cdae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (size_t size)</td></tr>\n<tr class=\"separator:a753e6325d84b7147ff73777c5938cdae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353f4d0793c6e494fe7182e368ee1123\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353f4d0793c6e494fe7182e368ee1123\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (Factory &amp;f, size_t size)</td></tr>\n<tr class=\"separator:a353f4d0793c6e494fe7182e368ee1123\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a860ba9221e7a5624e409153247cb16e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a860ba9221e7a5624e409153247cb16e5\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object</b> () const </td></tr>\n<tr class=\"separator:a860ba9221e7a5624e409153247cb16e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56871e2809e64ff842091611b3e7a5a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56871e2809e64ff842091611b3e7a5a4\"></a>\nconst <a class=\"el\" href=\"a00103.html\">opencl_buffer</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object</b> () const </td></tr>\n<tr class=\"separator:a56871e2809e64ff842091611b3e7a5a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac10f3ba6b90c0be794c810c8925898f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac10f3ba6b90c0be794c810c8925898f1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:ac10f3ba6b90c0be794c810c8925898f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d1916fe58794e9d5d2d22a8d3de4e19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d1916fe58794e9d5d2d22a8d3de4e19\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:a5d1916fe58794e9d5d2d22a8d3de4e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6adb29445e259b24bd7a40a1e0818f07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6adb29445e259b24bd7a40a1e0818f07\"></a>\n<a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a>&lt; T, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>\n<tr class=\"separator:a6adb29445e259b24bd7a40a1e0818f07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a518ac9631dff44b959b95caa4d9d69d8\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_subbuffer</b></td></tr>\n<tr class=\"separator:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e5bdf00651720250e564d13b624863c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4e5bdf00651720250e564d13b624863c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;lhs, const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a4e5bdf00651720250e564d13b624863c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00104.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00357.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00104.png\" usemap=\"#tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\">\n<area href=\"a00108.html\" alt=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;\" shape=\"rect\" coords=\"0,0,310,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9eb47e63b791c3a7303d39b11b07426c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9eb47e63b791c3a7303d39b11b07426c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b> (size_t size, Factory &amp;f)</td></tr>\n<tr class=\"separator:a9eb47e63b791c3a7303d39b11b07426c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3dd302f13fcf4d4d2991622994c889d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3dd302f13fcf4d4d2991622994c889d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b> (cl_mem m, size_t index, size_t size, Factory &amp;f)</td></tr>\n<tr class=\"separator:a3dd302f13fcf4d4d2991622994c889d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04b6504c149f284e8c023e85767d94af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04b6504c149f284e8c023e85767d94af\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a04b6504c149f284e8c023e85767d94af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e286d72cca9546685491ac801f22011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e286d72cca9546685491ac801f22011\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>map_memory</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt; &amp;dmsg) __TBB_override</td></tr>\n<tr class=\"separator:a5e286d72cca9546685491ac801f22011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00108\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00108')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td></tr>\n<tr class=\"memitem:a49b698e30ef6c1d61567b5b4a6154011 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b698e30ef6c1d61567b5b4a6154011\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_memory</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:a49b698e30ef6c1d61567b5b4a6154011 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc1f16b817e3e3447972755790dee9a inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc1f16b817e3e3447972755790dee9a\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_cl_mem</b> () const </td></tr>\n<tr class=\"separator:afbc1f16b817e3e3447972755790dee9a inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaddceaa2aca7b20a7b50211c197a13e4 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaddceaa2aca7b20a7b50211c197a13e4\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_host_ptr</b> ()</td></tr>\n<tr class=\"separator:aaddceaa2aca7b20a7b50211c197a13e4 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0253a1634ffe97391bd03bea316b9a96 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0253a1634ffe97391bd03bea316b9a96\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>factory</b> () const </td></tr>\n<tr class=\"separator:a0253a1634ffe97391bd03bea316b9a96 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a9939b7b7b075bf61bef86fe329637 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a9939b7b7b075bf61bef86fe329637\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const cl_event *e)</td></tr>\n<tr class=\"separator:ac8a9939b7b7b075bf61bef86fe329637 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02033b43f73ac54a43d583491c4dff10 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a02033b43f73ac54a43d583491c4dff10\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const cl_event *e)</td></tr>\n<tr class=\"separator:a02033b43f73ac54a43d583491c4dff10 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6560a38156dede308dcb1703a057c1b9\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer</b></td></tr>\n<tr class=\"separator:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_attribs_a00108\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00108')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td></tr>\n<tr class=\"memitem:ac31c58c66af5a41aef80409209a69ff8 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac31c58c66af5a41aef80409209a69ff8\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_cl_mem</b></td></tr>\n<tr class=\"separator:ac31c58c66af5a41aef80409209a69ff8 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fffcf5942aaa88ef5c9eb07f42402d5 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fffcf5942aaa88ef5c9eb07f42402d5\"></a>\n<a class=\"el\" href=\"a00027.html\">tbb::atomic</a><br class=\"typebreak\"/>\n&lt; opencl_device::device_id_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_curr_device_id</b></td></tr>\n<tr class=\"separator:a0fffcf5942aaa88ef5c9eb07f42402d5 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff8f9c238a49c19b3c4a05ff79641570 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff8f9c238a49c19b3c4a05ff79641570\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_host_ptr</b></td></tr>\n<tr class=\"separator:aff8f9c238a49c19b3c4a05ff79641570 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a519ad1b638e5208a03947f13da666d03 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a519ad1b638e5208a03947f13da666d03\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_factory</b></td></tr>\n<tr class=\"separator:a519ad1b638e5208a03947f13da666d03 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a9ed1f969879f90f00d8214ac1a236f inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a9ed1f969879f90f00d8214ac1a236f\"></a>\n<a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_lock</b></td></tr>\n<tr class=\"separator:a9a9ed1f969879f90f00d8214ac1a236f inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a179edb1d281d792a725312c41f40510d inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a179edb1d281d792a725312c41f40510d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event_present</b></td></tr>\n<tr class=\"separator:a179edb1d281d792a725312c41f40510d inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a806cf9699c54646ec18b2647c136eb6d inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a806cf9699c54646ec18b2647c136eb6d\"></a>\ncl_event&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event</b></td></tr>\n<tr class=\"separator:a806cf9699c54646ec18b2647c136eb6d inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00105.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_device Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00105.html\">opencl_device</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00351.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1ac9d90a9ffaec522789a4136e1dae17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">: device_id_type { <b>unknown</b> = device_id_type( -2 ), \n<b>host</b> = device_id_type( -1 )\n }</td></tr>\n<tr class=\"separator:a1ac9d90a9ffaec522789a4136e1dae17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e378c47a10a0bb6985ba9e75ac166fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e378c47a10a0bb6985ba9e75ac166fc\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_id_type</b></td></tr>\n<tr class=\"separator:a0e378c47a10a0bb6985ba9e75ac166fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device</b> (cl_device_id d_id)</td></tr>\n<tr class=\"separator:ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebf2866d260c9763d08cf10beb5d3730\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aebf2866d260c9763d08cf10beb5d3730\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device</b> (cl_device_id cl_d_id, device_id_type device_id)</td></tr>\n<tr class=\"separator:aebf2866d260c9763d08cf10beb5d3730\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59b59acd1418c07d04f49580bc793a35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59b59acd1418c07d04f49580bc793a35\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_profile</b> () const </td></tr>\n<tr class=\"separator:a59b59acd1418c07d04f49580bc793a35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad0202c850c0936628ed740839cccfb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad0202c850c0936628ed740839cccfb71\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_version</b> () const </td></tr>\n<tr class=\"separator:ad0202c850c0936628ed740839cccfb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a148f3ac5df2a2de33f74ba1f67ea3173\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a148f3ac5df2a2de33f74ba1f67ea3173\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_name</b> () const </td></tr>\n<tr class=\"separator:a148f3ac5df2a2de33f74ba1f67ea3173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a028a03c1bcd6bcc3dddfc1b4ff53ec76\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a028a03c1bcd6bcc3dddfc1b4ff53ec76\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_vendor</b> () const </td></tr>\n<tr class=\"separator:a028a03c1bcd6bcc3dddfc1b4ff53ec76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe3d3aeec9f54f073eaf49eff890e46a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe3d3aeec9f54f073eaf49eff890e46a\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_extensions</b> () const </td></tr>\n<tr class=\"separator:abe3d3aeec9f54f073eaf49eff890e46a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0f444a4a60b9cc7b53de34a1bdf73b4a\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>info</b> (cl_device_info i, T &amp;t) const </td></tr>\n<tr class=\"separator:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a710f43cd3e6b76fca52e7412d18ca637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a710f43cd3e6b76fca52e7412d18ca637\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>version</b> () const </td></tr>\n<tr class=\"separator:a710f43cd3e6b76fca52e7412d18ca637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad65f29cae883b26e433fdfc7f478a6fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad65f29cae883b26e433fdfc7f478a6fd\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>major_version</b> () const </td></tr>\n<tr class=\"separator:ad65f29cae883b26e433fdfc7f478a6fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88c2f6ed5bcccddbcf809fc3d8d47808\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88c2f6ed5bcccddbcf809fc3d8d47808\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>minor_version</b> () const </td></tr>\n<tr class=\"separator:a88c2f6ed5bcccddbcf809fc3d8d47808\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d4b1f62bedee57ec79c9dd105437ad7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d4b1f62bedee57ec79c9dd105437ad7\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>out_of_order_exec_mode_on_host_present</b> () const </td></tr>\n<tr class=\"separator:a7d4b1f62bedee57ec79c9dd105437ad7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72ff05d3420e9fe0094f3f5974b4b0a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72ff05d3420e9fe0094f3f5974b4b0a5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>out_of_order_exec_mode_on_device_present</b> () const </td></tr>\n<tr class=\"separator:a72ff05d3420e9fe0094f3f5974b4b0a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a621c8a568400eb84d5b26e9ebc6f433b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a621c8a568400eb84d5b26e9ebc6f433b\"></a>\nstd::array&lt; size_t, 3 &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>max_work_item_sizes</b> () const </td></tr>\n<tr class=\"separator:a621c8a568400eb84d5b26e9ebc6f433b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79b601e753b0ead6a8174c02aa4ca490\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a79b601e753b0ead6a8174c02aa4ca490\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>max_work_group_size</b> () const </td></tr>\n<tr class=\"separator:a79b601e753b0ead6a8174c02aa4ca490\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a4ae272f64808f9b62a8abc37a49215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a4ae272f64808f9b62a8abc37a49215\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_in_kernel_available</b> (const std::string &amp;k) const </td></tr>\n<tr class=\"separator:a8a4ae272f64808f9b62a8abc37a49215\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa654547f0b53f99cf6238a8c5dd6a2b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa654547f0b53f99cf6238a8c5dd6a2b4\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_in_kernels</b> () const </td></tr>\n<tr class=\"separator:aa654547f0b53f99cf6238a8c5dd6a2b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d16c58da69b81bbc6bc4e216115208e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d16c58da69b81bbc6bc4e216115208e\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>name</b> () const </td></tr>\n<tr class=\"separator:a8d16c58da69b81bbc6bc4e216115208e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7cf87806657f5a92f1320c923f84415d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7cf87806657f5a92f1320c923f84415d\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>available</b> () const </td></tr>\n<tr class=\"separator:a7cf87806657f5a92f1320c923f84415d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac100871628e92da33834b6ce989ff59f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac100871628e92da33834b6ce989ff59f\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compiler_available</b> () const </td></tr>\n<tr class=\"separator:ac100871628e92da33834b6ce989ff59f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af532566a5da4d9ac29cbd203473c4d2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af532566a5da4d9ac29cbd203473c4d2c\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>linker_available</b> () const </td></tr>\n<tr class=\"separator:af532566a5da4d9ac29cbd203473c4d2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a29b847db2ffd40f6783f9f6f3917c7d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a29b847db2ffd40f6783f9f6f3917c7d3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>extension_available</b> (const std::string &amp;ext) const </td></tr>\n<tr class=\"separator:a29b847db2ffd40f6783f9f6f3917c7d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>extensions</b> () const </td></tr>\n<tr class=\"separator:ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d390b48fa23fbec0bb17227f7e1aff6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d390b48fa23fbec0bb17227f7e1aff6\"></a>\ncl_device_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b> () const </td></tr>\n<tr class=\"separator:a3d390b48fa23fbec0bb17227f7e1aff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7cf740400af84346bc8216e5b66dad98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7cf740400af84346bc8216e5b66dad98\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>vendor</b> () const </td></tr>\n<tr class=\"separator:a7cf740400af84346bc8216e5b66dad98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0df74e8654df0f3137056d0e8897b1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0df74e8654df0f3137056d0e8897b1d\"></a>\ncl_uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address_bits</b> () const </td></tr>\n<tr class=\"separator:aa0df74e8654df0f3137056d0e8897b1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab0abb9fdd30077508fed78734e01f622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab0abb9fdd30077508fed78734e01f622\"></a>\ncl_device_id&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_id</b> () const </td></tr>\n<tr class=\"separator:ab0abb9fdd30077508fed78734e01f622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbeb17d503ad00deae784b19fb3860ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeb17d503ad00deae784b19fb3860ef\"></a>\ncl_command_queue&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>command_queue</b> () const </td></tr>\n<tr class=\"separator:adbeb17d503ad00deae784b19fb3860ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d57fd7f4f33c0fd4f6ed607863e1f57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d57fd7f4f33c0fd4f6ed607863e1f57\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_command_queue</b> (cl_command_queue cmd_queue)</td></tr>\n<tr class=\"separator:a8d57fd7f4f33c0fd4f6ed607863e1f57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9ed534cdc07f0bdd0f776468d6cc3ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9ed534cdc07f0bdd0f776468d6cc3ad\"></a>\ncl_platform_id&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_id</b> () const </td></tr>\n<tr class=\"separator:ac9ed534cdc07f0bdd0f776468d6cc3ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a563313182c8258bf25535dab83a3ca27\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_memory</b></td></tr>\n<tr class=\"separator:a563313182c8258bf25535dab83a3ca27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6560a38156dede308dcb1703a057c1b9\"></a>\ntemplate&lt;typename T , typename Factory &gt; </td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer</b></td></tr>\n<tr class=\"separator:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc0eaf33faca7708edf37103a3805da4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc0eaf33faca7708edf37103a3805da4\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> d1, <a class=\"el\" href=\"a00105.html\">opencl_device</a> d2)</td></tr>\n<tr class=\"separator:acc0eaf33faca7708edf37103a3805da4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00106.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_device_list Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00352.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device_list Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a75b3bfeffc2f97f63a02d6fc6c072328\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a75b3bfeffc2f97f63a02d6fc6c072328\"></a>\ntypedef container_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a75b3bfeffc2f97f63a02d6fc6c072328\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48bae7cd08dc3fc6711384fa0ffcbc56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a48bae7cd08dc3fc6711384fa0ffcbc56\"></a>\ntypedef <br class=\"typebreak\"/>\ncontainer_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a48bae7cd08dc3fc6711384fa0ffcbc56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a186c5fc190f0a570e13e646f5d2fd9c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a186c5fc190f0a570e13e646f5d2fd9c6\"></a>\ntypedef container_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a186c5fc190f0a570e13e646f5d2fd9c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a19e2ab162c113a7ede0f574b44d25516\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19e2ab162c113a7ede0f574b44d25516\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device_list</b> (std::initializer_list&lt; <a class=\"el\" href=\"a00105.html\">opencl_device</a> &gt; il)</td></tr>\n<tr class=\"separator:a19e2ab162c113a7ede0f574b44d25516\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5f2dcec269732a38f3f32cf2488ba3d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f2dcec269732a38f3f32cf2488ba3d2\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>add</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> d)</td></tr>\n<tr class=\"separator:a5f2dcec269732a38f3f32cf2488ba3d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae68d768313d70a68fcd8c72af3e3eb54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae68d768313d70a68fcd8c72af3e3eb54\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ae68d768313d70a68fcd8c72af3e3eb54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ef9ccaa28c5688caeb7afe73ead7b07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ef9ccaa28c5688caeb7afe73ead7b07\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>empty</b> () const </td></tr>\n<tr class=\"separator:a6ef9ccaa28c5688caeb7afe73ead7b07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:addec4ed607d1278273b0ca3372722c7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"addec4ed607d1278273b0ca3372722c7f\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:addec4ed607d1278273b0ca3372722c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc39a537e23b7265b5c432559074396\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4fc39a537e23b7265b5c432559074396\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:a4fc39a537e23b7265b5c432559074396\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae57cdf037269eb83dc2df130f5cf91dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae57cdf037269eb83dc2df130f5cf91dc\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:ae57cdf037269eb83dc2df130f5cf91dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1573ecfb7672aeab71b3c90d14aa09f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1573ecfb7672aeab71b3c90d14aa09f1\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a1573ecfb7672aeab71b3c90d14aa09f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af520860cbb1e78737f93a366f47f37d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af520860cbb1e78737f93a366f47f37d4\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cbegin</b> () const </td></tr>\n<tr class=\"separator:af520860cbb1e78737f93a366f47f37d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a712d456e2310603f9b94fd15857b19f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a712d456e2310603f9b94fd15857b19f9\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cend</b> () const </td></tr>\n<tr class=\"separator:a712d456e2310603f9b94fd15857b19f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00107.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00348.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">kernel</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9f11e7a88d0f3cbd236d6a272a9c2d14\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00107.html\">opencl_factory</a>&lt; DeviceFilter &gt;&gt;</td></tr>\n<tr class=\"separator:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93525acca7352e5e06674f350a146d18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93525acca7352e5e06674f350a146d18\"></a>\ntypedef <a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_type</b></td></tr>\n<tr class=\"separator:a93525acca7352e5e06674f350a146d18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0915b7bee4b372111c2698bbac15577f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0915b7bee4b372111c2698bbac15577f\"></a>\ntypedef <a class=\"el\" href=\"a00089.html\">kernel</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a0915b7bee4b372111c2698bbac15577f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6838f796f49054a40f86d60bfdba7fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6838f796f49054a40f86d60bfdba7fb\"></a>\ntypedef <a class=\"el\" href=\"a00114.html\">opencl_range</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:aa6838f796f49054a40f86d60bfdba7fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a083fe6b14159cc159862ec5ae3ba9835\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a083fe6b14159cc159862ec5ae3ba9835\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>init</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;device_list)</td></tr>\n<tr class=\"separator:a083fe6b14159cc159862ec5ae3ba9835\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a99f0be9c0e4beab8c827fb267e035c8c\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const <a class=\"el\" href=\"a00089.html\">kernel_type</a> &amp;<a class=\"el\" href=\"a00089.html\">kernel</a>, const <a class=\"el\" href=\"a00114.html\">range_type</a> &amp;work_size, Args &amp;...args)</td></tr>\n<tr class=\"separator:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae225724eca814f88041fc7ad3e067424\"></a>\ntemplate&lt;typename T , typename... Rest&gt; </td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, T &amp;t, Rest &amp;...args)</td></tr>\n<tr class=\"separator:ae225724eca814f88041fc7ad3e067424\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28f06cdb00ed4a1e457c2ada04ba06b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28f06cdb00ed4a1e457c2ada04ba06b4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>)</td></tr>\n<tr class=\"separator:a28f06cdb00ed4a1e457c2ada04ba06b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a30d7b701d89615b0fc98a2e6af448dee\"></a>\ntemplate&lt;typename FinalizeFn , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, FinalizeFn fn, Args &amp;...args)</td></tr>\n<tr class=\"separator:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc10f0ed4303bff542facde82142b283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abc10f0ed4303bff542facde82142b283\"></a>\nconst <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>devices</b> ()</td></tr>\n<tr class=\"separator:abc10f0ed4303bff542facde82142b283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af173b1e5b45e0a6f9f12e6db5f6d2250\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b></td></tr>\n<tr class=\"separator:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a563313182c8258bf25535dab83a3ca27\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_memory</b></td></tr>\n<tr class=\"separator:a563313182c8258bf25535dab83a3ca27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00108.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_memory&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00356.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_memory&lt; Factory &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_memory&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00108.png\" usemap=\"#tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\">\n<area href=\"a00104.html\" alt=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;\" shape=\"rect\" coords=\"0,56,310,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49b698e30ef6c1d61567b5b4a6154011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b698e30ef6c1d61567b5b4a6154011\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_memory</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:a49b698e30ef6c1d61567b5b4a6154011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc1f16b817e3e3447972755790dee9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc1f16b817e3e3447972755790dee9a\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_cl_mem</b> () const </td></tr>\n<tr class=\"separator:afbc1f16b817e3e3447972755790dee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaddceaa2aca7b20a7b50211c197a13e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaddceaa2aca7b20a7b50211c197a13e4\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_host_ptr</b> ()</td></tr>\n<tr class=\"separator:aaddceaa2aca7b20a7b50211c197a13e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0253a1634ffe97391bd03bea316b9a96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0253a1634ffe97391bd03bea316b9a96\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>factory</b> () const </td></tr>\n<tr class=\"separator:a0253a1634ffe97391bd03bea316b9a96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a9939b7b7b075bf61bef86fe329637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a9939b7b7b075bf61bef86fe329637\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const cl_event *e)</td></tr>\n<tr class=\"separator:ac8a9939b7b7b075bf61bef86fe329637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02033b43f73ac54a43d583491c4dff10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a02033b43f73ac54a43d583491c4dff10\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const cl_event *e)</td></tr>\n<tr class=\"separator:a02033b43f73ac54a43d583491c4dff10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2f2336197858e31b6c9ae7f166350c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2f2336197858e31b6c9ae7f166350c4\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>map_memory</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt; &amp;)=0</td></tr>\n<tr class=\"separator:ae2f2336197858e31b6c9ae7f166350c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ac31c58c66af5a41aef80409209a69ff8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac31c58c66af5a41aef80409209a69ff8\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_cl_mem</b></td></tr>\n<tr class=\"separator:ac31c58c66af5a41aef80409209a69ff8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fffcf5942aaa88ef5c9eb07f42402d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fffcf5942aaa88ef5c9eb07f42402d5\"></a>\n<a class=\"el\" href=\"a00027.html\">tbb::atomic</a><br class=\"typebreak\"/>\n&lt; opencl_device::device_id_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_curr_device_id</b></td></tr>\n<tr class=\"separator:a0fffcf5942aaa88ef5c9eb07f42402d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff8f9c238a49c19b3c4a05ff79641570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff8f9c238a49c19b3c4a05ff79641570\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_host_ptr</b></td></tr>\n<tr class=\"separator:aff8f9c238a49c19b3c4a05ff79641570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a519ad1b638e5208a03947f13da666d03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a519ad1b638e5208a03947f13da666d03\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_factory</b></td></tr>\n<tr class=\"separator:a519ad1b638e5208a03947f13da666d03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a9ed1f969879f90f00d8214ac1a236f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a9ed1f969879f90f00d8214ac1a236f\"></a>\n<a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_lock</b></td></tr>\n<tr class=\"separator:a9a9ed1f969879f90f00d8214ac1a236f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a179edb1d281d792a725312c41f40510d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a179edb1d281d792a725312c41f40510d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event_present</b></td></tr>\n<tr class=\"separator:a179edb1d281d792a725312c41f40510d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a806cf9699c54646ec18b2647c136eb6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a806cf9699c54646ec18b2647c136eb6d\"></a>\ncl_event&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event</b></td></tr>\n<tr class=\"separator:a806cf9699c54646ec18b2647c136eb6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00109.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; Args &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00109.html\">opencl_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; Args &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00110.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00110.html\">opencl_node< tuple< Ports...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00363.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00110.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\">\n<area href=\"a00109.html\" alt=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, queueing, opencl_info::default_opencl_factory &gt;\" shape=\"rect\" coords=\"0,0,589,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:af1d60f38b8a698e759f4cab8d73e553d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1d60f38b8a698e759f4cab8d73e553d\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:af1d60f38b8a698e759f4cab8d73e553d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0aa3821bfbc93eb7e14ccf593d957b3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0aa3821bfbc93eb7e14ccf593d957b3f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:a0aa3821bfbc93eb7e14ccf593d957b3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1e861e0b3c64867ad23c21e289ef3f85\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d)</td></tr>\n<tr class=\"separator:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00111.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00111.html\">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00362.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00111.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\">\n<area href=\"a00109.html\" alt=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, opencl_info::default_opencl_factory &gt;\" shape=\"rect\" coords=\"0,0,553,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a7e935e7ba97a2d0d9c2b5efe1b36086a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e935e7ba97a2d0d9c2b5efe1b36086a\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a7e935e7ba97a2d0d9c2b5efe1b36086a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a01e42b38b2605b5b0ea20e1442123b54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01e42b38b2605b5b0ea20e1442123b54\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:a01e42b38b2605b5b0ea20e1442123b54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a04f4c143fb2ed48e1917bf7af88cac9a\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d)</td></tr>\n<tr class=\"separator:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00112.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00112.html\">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00361.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00112.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a10d80c9707b89b8d3d96f0e7a7b11d35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10d80c9707b89b8d3d96f0e7a7b11d35\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a10d80c9707b89b8d3d96f0e7a7b11d35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aef536f96cdf0e008b87892a2523842b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef536f96cdf0e008b87892a2523842b0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:aef536f96cdf0e008b87892a2523842b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeac46cd85f792eaf66b33ee4e3691251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeac46cd85f792eaf66b33ee4e3691251\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, Factory &amp;f)</td></tr>\n<tr class=\"separator:aeac46cd85f792eaf66b33ee4e3691251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac9a8f3aaddd6830f2b823813cf5d6c2e\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d, Factory &amp;f)</td></tr>\n<tr class=\"separator:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00113.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_program&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00113.html\">opencl_program</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00350.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_program&lt; Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_program&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00113.png\" usemap=\"#tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8d3995abd89b7933f9155a71b468329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d3995abd89b7933f9155a71b468329f\"></a>\ntypedef Factory::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a8d3995abd89b7933f9155a71b468329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aba6fe821c084403ed21fc7ae20f6fe77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba6fe821c084403ed21fc7ae20f6fe77\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, opencl_program_type type, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:aba6fe821c084403ed21fc7ae20f6fe77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7ea8bee6439e9cd71aa017b2d80ad04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7ea8bee6439e9cd71aa017b2d80ad04\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, const char *program_name)</td></tr>\n<tr class=\"separator:ab7ea8bee6439e9cd71aa017b2d80ad04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab065ffc8d739872373e76f5fa2feddf1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab065ffc8d739872373e76f5fa2feddf1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:ab065ffc8d739872373e76f5fa2feddf1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d553a0a47923e9febbff7e2fcf527fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d553a0a47923e9febbff7e2fcf527fd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (opencl_program_type type, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:a5d553a0a47923e9febbff7e2fcf527fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a673eda1eee74b84795f1f54cad6a7c3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a673eda1eee74b84795f1f54cad6a7c3e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const char *program_name)</td></tr>\n<tr class=\"separator:a673eda1eee74b84795f1f54cad6a7c3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ff9429c5ae7799272dfb1d79adf055d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ff9429c5ae7799272dfb1d79adf055d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:a6ff9429c5ae7799272dfb1d79adf055d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a400e941b0e338907e001dc46dfdbf735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a400e941b0e338907e001dc46dfdbf735\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (opencl_program_type type)</td></tr>\n<tr class=\"separator:a400e941b0e338907e001dc46dfdbf735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abee242124a40c35771d4ec1135e86d15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abee242124a40c35771d4ec1135e86d15\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const <a class=\"el\" href=\"a00113.html\">opencl_program</a> &amp;src)</td></tr>\n<tr class=\"separator:abee242124a40c35771d4ec1135e86d15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a420dfd39624af3d089ac9589373ebb82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a420dfd39624af3d089ac9589373ebb82\"></a>\nkernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_kernel</b> (const std::string &amp;k) const </td></tr>\n<tr class=\"separator:a420dfd39624af3d089ac9589373ebb82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae5c7df2a18ff72b1c110470e8e28d8b7\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory&lt; DeviceFilter &gt;::kernel</b></td></tr>\n<tr class=\"separator:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00114.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_range Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00114.html\">opencl_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00360.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_range Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac096f58fdc32351a11d7bc3926ef5251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac096f58fdc32351a11d7bc3926ef5251\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_index_type</b></td></tr>\n<tr class=\"separator:ac096f58fdc32351a11d7bc3926ef5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a757f32424b3588cf9147b281d0bb2f55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a757f32424b3588cf9147b281d0bb2f55\"></a>\ntypedef std::array<br class=\"typebreak\"/>\n&lt; range_index_type, 3 &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>nd_range_type</b></td></tr>\n<tr class=\"separator:a757f32424b3588cf9147b281d0bb2f55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a24ad17ef536995e48d97364068dad332\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a24ad17ef536995e48d97364068dad332\"></a>\ntemplate&lt;typename G  = std::initializer_list&lt;int&gt;, typename L  = std::initializer_list&lt;int&gt;, typename  = typename std::enable_if&lt;!std::is_same&lt;typename std::decay&lt;G&gt;::type, opencl_range&gt;::value&gt;::type&gt; </td></tr>\n<tr class=\"memitem:a24ad17ef536995e48d97364068dad332\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_range</b> (G &amp;&amp;global_work=std::initializer_list&lt; int &gt;({0}), L &amp;&amp;local_work=std::initializer_list&lt; int &gt;({0, 0, 0}))</td></tr>\n<tr class=\"separator:a24ad17ef536995e48d97364068dad332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a191c3c9373afde6abd1819c164a10e69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a191c3c9373afde6abd1819c164a10e69\"></a>\nconst nd_range_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_range</b> () const </td></tr>\n<tr class=\"separator:a191c3c9373afde6abd1819c164a10e69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91080d6d64ece228c447980ca7b7d4a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91080d6d64ece228c447980ca7b7d4a5\"></a>\nconst nd_range_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_range</b> () const </td></tr>\n<tr class=\"separator:a91080d6d64ece228c447980ca7b7d4a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00115.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00358.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00115.png\" usemap=\"#tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\">\n<area href=\"a00103.html\" alt=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,0,317,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad6f2ce5cbe4c109adff30995abf8e653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad6f2ce5cbe4c109adff30995abf8e653\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_subbuffer</b> (const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;owner, size_t index, size_t size)</td></tr>\n<tr class=\"separator:ad6f2ce5cbe4c109adff30995abf8e653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00103\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00103')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad841d68e0d62385b7e3d6dbc3255c51f\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>access</b> () const </td></tr>\n<tr class=\"separator:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34e9721ad01f57bdb6cd7135cd681924 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34e9721ad01f57bdb6cd7135cd681924\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a34e9721ad01f57bdb6cd7135cd681924 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9adeb803f65739a617e7363eef2725fe\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2e2c887ab99d86b54b8bef14f21d4954\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a653086e25f39f175b5bf33f6767b5bf8 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a653086e25f39f175b5bf33f6767b5bf8\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a653086e25f39f175b5bf33f6767b5bf8 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb7b3759979dc6414687016028d59b61 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adb7b3759979dc6414687016028d59b61\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (ptrdiff_t k)</td></tr>\n<tr class=\"separator:adb7b3759979dc6414687016028d59b61 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a753e6325d84b7147ff73777c5938cdae inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a753e6325d84b7147ff73777c5938cdae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (size_t size)</td></tr>\n<tr class=\"separator:a753e6325d84b7147ff73777c5938cdae inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353f4d0793c6e494fe7182e368ee1123 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353f4d0793c6e494fe7182e368ee1123\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (Factory &amp;f, size_t size)</td></tr>\n<tr class=\"separator:a353f4d0793c6e494fe7182e368ee1123 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a860ba9221e7a5624e409153247cb16e5 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a860ba9221e7a5624e409153247cb16e5\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object</b> () const </td></tr>\n<tr class=\"separator:a860ba9221e7a5624e409153247cb16e5 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56871e2809e64ff842091611b3e7a5a4 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56871e2809e64ff842091611b3e7a5a4\"></a>\nconst <a class=\"el\" href=\"a00103.html\">opencl_buffer</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object</b> () const </td></tr>\n<tr class=\"separator:a56871e2809e64ff842091611b3e7a5a4 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac10f3ba6b90c0be794c810c8925898f1 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac10f3ba6b90c0be794c810c8925898f1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:ac10f3ba6b90c0be794c810c8925898f1 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d1916fe58794e9d5d2d22a8d3de4e19 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d1916fe58794e9d5d2d22a8d3de4e19\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:a5d1916fe58794e9d5d2d22a8d3de4e19 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6adb29445e259b24bd7a40a1e0818f07 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6adb29445e259b24bd7a40a1e0818f07\"></a>\n<a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a>&lt; T, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>\n<tr class=\"separator:a6adb29445e259b24bd7a40a1e0818f07 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00103\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00103')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td></tr>\n<tr class=\"memitem:a617261c096aa90e9ea0ca4a63225bc6a inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a617261c096aa90e9ea0ca4a63225bc6a\"></a>\ntypedef cl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object_type</b></td></tr>\n<tr class=\"separator:a617261c096aa90e9ea0ca4a63225bc6a inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a051eb49af1f1573b96bb425c13784219 inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a051eb49af1f1573b96bb425c13784219\"></a>\ntypedef <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object_type</b></td></tr>\n<tr class=\"separator:a051eb49af1f1573b96bb425c13784219 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a918d4534226f0ae3639136953817e565 inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a918d4534226f0ae3639136953817e565\"></a>\ntypedef Factory&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_factory_type</b></td></tr>\n<tr class=\"separator:a918d4534226f0ae3639136953817e565 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a42372f458b493d1c748ca01bb811d831\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>iterator</b> = T *</td></tr>\n<tr class=\"separator:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00116.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::parallel_while&lt; Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00303.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::parallel_while&lt; Body &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Parallel iteration over a stream, with optional addition of more work.  \n <a href=\"a00116.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_while.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::parallel_while&lt; Body &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00116.png\" usemap=\"#tbb::parallel_while&lt; Body &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::parallel_while&lt; Body &gt;_map\" name=\"tbb::parallel_while&lt; Body &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2442f019427e608d46801376267e44a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2442f019427e608d46801376267e44a8\"></a>\ntypedef Body::argument_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a></td></tr>\n<tr class=\"memdesc:a2442f019427e608d46801376267e44a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of items. <br/></td></tr>\n<tr class=\"separator:a2442f019427e608d46801376267e44a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a220a7307358aa36802c8754ea45ca385\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a220a7307358aa36802c8754ea45ca385\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">parallel_while</a> ()</td></tr>\n<tr class=\"memdesc:a220a7307358aa36802c8754ea45ca385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty non-running parallel while. <br/></td></tr>\n<tr class=\"separator:a220a7307358aa36802c8754ea45ca385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2fd559c8a38639fa1ba97a0d5639ca8\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">~parallel_while</a> ()</td></tr>\n<tr class=\"memdesc:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor cleans up data members before returning. <br/></td></tr>\n<tr class=\"separator:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20607ba5faa958144787d980aa850c16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Stream &gt; </td></tr>\n<tr class=\"memitem:a20607ba5faa958144787d980aa850c16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">run</a> (Stream &amp;stream, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:a20607ba5faa958144787d980aa850c16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Apply body.apply to each item in the stream.  <a href=\"#a20607ba5faa958144787d980aa850c16\">More...</a><br/></td></tr>\n<tr class=\"separator:a20607ba5faa958144787d980aa850c16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">add</a> (const <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> &amp;item)</td></tr>\n<tr class=\"memdesc:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a work item while running.  <a href=\"#a4861989d7f5e3111d264d4d6013e8fe1\">More...</a><br/></td></tr>\n<tr class=\"separator:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Body&gt;<br/>\nclass tbb::parallel_while&lt; Body &gt;</h3>\n\n<p>Parallel iteration over a stream, with optional addition of more work. </p>\n<p>The Body b has the requirement: <br/>\n \"b(v)\" <br/>\n \"b.argument_type\" <br/>\nwhere v is an argument_type </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a4861989d7f5e3111d264d4d6013e8fe1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00116.html\">tbb::parallel_while</a>&lt; Body &gt;::add </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Add a work item while running. </p>\n<p>Should be executed only by body.apply or a thread spawned therefrom. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a20607ba5faa958144787d980aa850c16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename Stream &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00116.html\">tbb::parallel_while</a>&lt; Body &gt;::run </td>\n          <td>(</td>\n          <td class=\"paramtype\">Stream &amp;&#160;</td>\n          <td class=\"paramname\"><em>stream</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Apply body.apply to each item in the stream. </p>\n<p>A Stream s has the requirements <br/>\n \"S::value_type\" <br/>\n \"s.pop_if_present(value) is convertible to bool </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>parallel_while.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00117.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::pipeline Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00117.html\">pipeline</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00306.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pipeline Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A processing pipeline that applies filters to items.  \n <a href=\"a00117.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afe7b7bd9b2617c2b69170675a478b2bd\"></a>\n__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">pipeline</a> ()</td></tr>\n<tr class=\"memdesc:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty pipeline. <br/></td></tr>\n<tr class=\"separator:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3a7b33217b3f3bb0682ec3a40fd2c39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">~pipeline</a> ()</td></tr>\n<tr class=\"separator:ac3a7b33217b3f3bb0682ec3a40fd2c39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8eb83014bd53b184e0ed50f120ca310b\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">add_filter</a> (<a class=\"el\" href=\"a00074.html\">filter</a> &amp;filter_)</td></tr>\n<tr class=\"memdesc:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add filter to end of pipeline. <br/></td></tr>\n<tr class=\"separator:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9ee9080cfc080c40a7ee7cb03a62637\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ac9ee9080cfc080c40a7ee7cb03a62637\">run</a> (size_t max_number_of_live_tokens)</td></tr>\n<tr class=\"memdesc:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Run the pipeline to completion. <br/></td></tr>\n<tr class=\"separator:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a270dba81f7dd9935be7f3d69db907ff4\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">run</a> (size_t max_number_of_live_tokens, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Run the pipeline to completion with user-supplied context. <br/></td></tr>\n<tr class=\"separator:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae53edbda1771eeaa254d78ae6100a762\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove all filters from the pipeline. <br/></td></tr>\n<tr class=\"separator:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a88bd11ed4d74f6de43a7d3b0bc05f2c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88bd11ed4d74f6de43a7d3b0bc05f2c3\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::stage_task</b></td></tr>\n<tr class=\"separator:a88bd11ed4d74f6de43a7d3b0bc05f2c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6f9dcf41617866d7bf0e72d8efc11e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6f9dcf41617866d7bf0e72d8efc11e7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_root_task</b></td></tr>\n<tr class=\"separator:aa6f9dcf41617866d7bf0e72d8efc11e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adcddbbe2df37193795a145ef8aac7954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adcddbbe2df37193795a145ef8aac7954\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filter</b></td></tr>\n<tr class=\"separator:adcddbbe2df37193795a145ef8aac7954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4463cf8612c362ee109224e45fad104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4463cf8612c362ee109224e45fad104\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_bound_filter</b></td></tr>\n<tr class=\"separator:ab4463cf8612c362ee109224e45fad104\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39b28579343dc2cdb67fe3fbffe731a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39b28579343dc2cdb67fe3fbffe731a8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_cleaner</b></td></tr>\n<tr class=\"separator:a39b28579343dc2cdb67fe3fbffe731a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0307e203ca37529138734040c3881a35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0307e203ca37529138734040c3881a35\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::interface6::internal::pipeline_proxy</b></td></tr>\n<tr class=\"separator:a0307e203ca37529138734040c3881a35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A processing pipeline that applies filters to items. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"ac3a7b33217b3f3bb0682ec3a40fd2c39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00118.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::pre_scan_tag Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00301.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pre_scan_tag Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Used to indicate that the initial scan is being performed.  \n <a href=\"a00118.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_scan.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ae0e7d5d6eb7a47654bb019f9ca6aea77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae0e7d5d6eb7a47654bb019f9ca6aea77\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator bool</b> ()</td></tr>\n<tr class=\"separator:ae0e7d5d6eb7a47654bb019f9ca6aea77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a1d71947e8273d28e01620f92a292be59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1d71947e8273d28e01620f92a292be59\"></a>\nstatic bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_final_scan</b> ()</td></tr>\n<tr class=\"separator:a1d71947e8273d28e01620f92a292be59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Used to indicate that the initial scan is being performed. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_scan.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00119.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00119.html\">predecessor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00120.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00307.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Queuing mutex with local-only spinning.  \n <a href=\"a00120.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00120.png\" usemap=\"#tbb::queuing_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_mutex_map\" name=\"tbb::queuing_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00142.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e58fce2062ae349a30b320b7fdc9155\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">queuing_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae475e98e804c75239748b293e7e0feff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae475e98e804c75239748b293e7e0feff\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:ae475e98e804c75239748b293e7e0feff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a504f3af8a939468f1514604c0941bc62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a504f3af8a939468f1514604c0941bc62\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a504f3af8a939468f1514604c0941bc62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47ad4cdac79581c01a66241e2e5c2c07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47ad4cdac79581c01a66241e2e5c2c07\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a47ad4cdac79581c01a66241e2e5c2c07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b4833b97208bd699cba061dfc3057cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b4833b97208bd699cba061dfc3057cc\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a5b4833b97208bd699cba061dfc3057cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Queuing mutex with local-only spinning. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00121.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_rw_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00309.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Queuing reader-writer mutex with local-only spinning.  \n <a href=\"a00121.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_rw_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00121.png\" usemap=\"#tbb::queuing_rw_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_rw_mutex_map\" name=\"tbb::queuing_rw_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00149.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23de1ac415b6f54b778c8fd6ec6073e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">queuing_rw_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67fe828d7e07222e7876ef9fd780fcc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">~queuing_rw_mutex</a> ()</td></tr>\n<tr class=\"memdesc:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br/></td></tr>\n<tr class=\"separator:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd032e7e13804cd4d1cd8fce60d773f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afd032e7e13804cd4d1cd8fce60d773f8\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:afd032e7e13804cd4d1cd8fce60d773f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:ae3dbfbf71bfa9c662a59688cd86bfbd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3dbfbf71bfa9c662a59688cd86bfbd7\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:ae3dbfbf71bfa9c662a59688cd86bfbd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae8c3ee1f5ab3af3954abeec1d165ea8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae8c3ee1f5ab3af3954abeec1d165ea8e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:ae8c3ee1f5ab3af3954abeec1d165ea8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4704d512922b4b5d21c97901f9f7abd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4704d512922b4b5d21c97901f9f7abd0\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a4704d512922b4b5d21c97901f9f7abd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Queuing reader-writer mutex with local-only spinning. </p>\n<p>Adapted from Krieger, Stumm, et al. pseudocode at <a href=\"http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93\">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a> </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00122.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00390.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Writer-preference reader-writer lock with local-only spinning on readers.  \n <a href=\"a00122.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00122.png\" usemap=\"#tbb::interface5::reader_writer_lock_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock_map\" name=\"tbb::interface5::reader_writer_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped lock pattern for write locks.  <a href=\"a00143.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped lock pattern for read locks.  <a href=\"a00152.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">status_t</a> { <b>waiting_nonblocking</b>, \n<b>waiting</b>, \n<b>active</b>, \n<b>invalid</b>\n }</td></tr>\n<tr class=\"memdesc:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Status type for nodes associated with lock instances.  <a href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">More...</a><br/></td></tr>\n<tr class=\"separator:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abceda6c50b0c36eacbef51f4682742f3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">reader_writer_lock</a> ()</td></tr>\n<tr class=\"memdesc:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a>. <br/></td></tr>\n<tr class=\"separator:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeee96b648c7b5ff6126c8a2e13ec7241\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">~reader_writer_lock</a> ()</td></tr>\n<tr class=\"memdesc:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructs a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> object. <br/></td></tr>\n<tr class=\"separator:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a> ()</td></tr>\n<tr class=\"memdesc:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write.  <a href=\"#af92eb949fc491af8f7e350869ea0a0d1\">More...</a><br/></td></tr>\n<tr class=\"separator:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write.  <a href=\"#a1739e842af52925a2d4a7e821b9b3b8d\">More...</a><br/></td></tr>\n<tr class=\"separator:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">lock_read</a> ()</td></tr>\n<tr class=\"memdesc:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read.  <a href=\"#a6fd4fcdf0e5c0425d1cc736d644f234f\">More...</a><br/></td></tr>\n<tr class=\"separator:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">try_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read.  <a href=\"#a9c7aa04e00202c9a1197cb6d870cabb4\">More...</a><br/></td></tr>\n<tr class=\"separator:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c55c4dbde63e950fdc843c9b01a174f\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a>. <br/></td></tr>\n<tr class=\"separator:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock_read</b></td></tr>\n<tr class=\"separator:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Writer-preference reader-writer lock with local-only spinning on readers. </p>\n<p>Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href=\"http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp\">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> </p>\n</div><h2 class=\"groupheader\">Member Enumeration Documentation</h2>\n<a class=\"anchor\" id=\"a29bbf9ca21c12b313d9fa5326feaf3ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock::status_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Status type for nodes associated with lock instances. </p>\n<p>waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.</p>\n<p>waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.</p>\n<p>active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion</p>\n<p>invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed</p>\n<p>The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.</p>\n<p>State diagram for <a class=\"el\" href=\"a00143.html\" title=\"The scoped lock pattern for write locks. \">scoped_lock</a> status:</p>\n<p>waiting -------&mdash;&gt; waiting_nonblocking | _____________/ | V V V active --------------&mdash;&gt; invalid</p>\n<p>State diagram for <a class=\"el\" href=\"a00152.html\" title=\"The scoped lock pattern for read locks. \">scoped_lock_read</a> status:</p>\n<p>waiting | V active --------------&mdash;&gt;invalid </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"af92eb949fc491af8f7e350869ea0a0d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write. </p>\n<p>If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class=\"el\" href=\"a00086.html\" title=\"Exception for PPL locks. \">improper_lock</a> The context tries to acquire a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> that it already has write ownership of. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6fd4fcdf0e5c0425d1cc736d644f234f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read. </p>\n<p>If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class=\"el\" href=\"a00086.html\" title=\"Exception for PPL locks. \">improper_lock</a> The context tries to acquire a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> that it already has write ownership of. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1739e842af52925a2d4a7e821b9b3b8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write. </p>\n<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\" title=\"Tries to acquire the reader_writer_lock for write. \">try_lock()</a> returns false. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9c7aa04e00202c9a1197cb6d870cabb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read. </p>\n<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00123.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00123.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00287.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1bb89d2224e26a9dfee7ef1adbac8b3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bb89d2224e26a9dfee7ef1adbac8b3d\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a1bb89d2224e26a9dfee7ef1adbac8b3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00124.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00124.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00404.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4a2190850873b9f2bc63c28dfd336dd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4a2190850873b9f2bc63c28dfd336dd9\"></a>\ntypedef <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a><br class=\"typebreak\"/>\n&lt; U, P &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a4a2190850873b9f2bc63c28dfd336dd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00125.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00125.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00289.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9a8756c2c1d9425bdf7490943ae0b189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a8756c2c1d9425bdf7490943ae0b189\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a9a8756c2c1d9425bdf7490943ae0b189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00126.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00126.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00314.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4f44c77105a911769353936a23b780a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f44c77105a911769353936a23b780a6\"></a>\ntypedef <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a4f44c77105a911769353936a23b780a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00127.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00127.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00316.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a37986044aa989f9c1f9edef6ab79435d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a37986044aa989f9c1f9edef6ab79435d\"></a>\ntypedef <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a37986044aa989f9c1f9edef6ab79435d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00128.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00128.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00328.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8f3c27dc0f43be2eafdfe8c6f222c44c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8f3c27dc0f43be2eafdfe8c6f222c44c\"></a>\ntypedef <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a8f3c27dc0f43be2eafdfe8c6f222c44c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00129.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00129.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00330.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aab450b73dbeb738f88700ac54ce04ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aab450b73dbeb738f88700ac54ce04ce9\"></a>\ntypedef <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U, <br class=\"typebreak\"/>\nAllocator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:aab450b73dbeb738f88700ac54ce04ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00130.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00130.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00332.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6a001a156c058ee1194ba55ce534a43e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a001a156c058ee1194ba55ce534a43e\"></a>\ntypedef <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U, <br class=\"typebreak\"/>\nAllocator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a6a001a156c058ee1194ba55ce534a43e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00131.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00131.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00326.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:adbeadd225df01e2cde9ffe5d92293671\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeadd225df01e2cde9ffe5d92293671\"></a>\ntypedef <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:adbeadd225df01e2cde9ffe5d92293671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00132.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00132.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00402.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1e9f9c6f0163df16980598fcafca665b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e9f9c6f0163df16980598fcafca665b\"></a>\ntypedef <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a><br class=\"typebreak\"/>\n&lt; U, P &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a1e9f9c6f0163df16980598fcafca665b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00133.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::receiver&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00133.html\">receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00344.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver&lt; T &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Pure virtual template class that defines a receiver of messages of type T.  \n <a href=\"a00133.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::receiver&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00133.png\" usemap=\"#tbb::flow::interface10::receiver&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::receiver&lt; T &gt;_map\" name=\"tbb::flow::interface10::receiver&lt; T &gt;_map\">\n<area href=\"a00178.html\" alt=\"tbb::flow::interface10::internal::untyped_receiver\" shape=\"rect\" coords=\"0,0,282,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ed56cc8468b7e29c39c04dcb1b59f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ed56cc8468b7e29c39c04dcb1b59f9b\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a8ed56cc8468b7e29c39c04dcb1b59f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abca607a1fa7f7ad0d55d374e4416fe7e\"></a>\ntypedef <a class=\"el\" href=\"a00153.html\">sender</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affeefcd8a802c09194c27555188a95a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affeefcd8a802c09194c27555188a95a2\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:affeefcd8a802c09194c27555188a95a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e5331f73255893c402e844eba978578\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e5331f73255893c402e844eba978578\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a7e5331f73255893c402e844eba978578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6545b1434a16ee261ed6c4ee7f9044a6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;::<a class=\"el\" href=\"a00062.html\">filtered_type</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4f0b65672f9c488e6c8e069e1afaebd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4f0b65672f9c488e6c8e069e1afaebd\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put</b> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;::async_type &amp;t)</td></tr>\n<tr class=\"separator:ac4f0b65672f9c488e6c8e069e1afaebd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2f3f8570b3fed4148baf16e72b04f38\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a> ()</td></tr>\n<tr class=\"memdesc:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9717a7ab9ad56f3210c08dbb320def77\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a> (const T &amp;t)</td></tr>\n<tr class=\"memdesc:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9e6f87b3c25f7d6b5d92226e36c0b830\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a predecessor to the node. <br/></td></tr>\n<tr class=\"separator:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3ce4335dd5d73823c6568f3dfd704f0\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove a predecessor from the node. <br/></td></tr>\n<tr class=\"separator:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a165adb1746f97516c459e96474427aca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a165adb1746f97516c459e96474427aca\"></a>\nvirtual <a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> ()=0</td></tr>\n<tr class=\"separator:a165adb1746f97516c459e96474427aca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17f59f569f953220cf104dcb2a195eae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a17f59f569f953220cf104dcb2a195eae\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a17f59f569f953220cf104dcb2a195eae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1549dbcb01fc1b0619fda4b6f77fa58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae1549dbcb01fc1b0619fda4b6f77fa58\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:ae1549dbcb01fc1b0619fda4b6f77fa58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a115d6316079c74764b7eb1eab6df6de9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a115d6316079c74764b7eb1eab6df6de9\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:a115d6316079c74764b7eb1eab6df6de9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a68b606e7803719a7117f1b4bc0063c50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a68b606e7803719a7117f1b4bc0063c50\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> ()=0</td></tr>\n<tr class=\"separator:a68b606e7803719a7117f1b4bc0063c50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:afa535fb621f3744149fb97da1d020503\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa535fb621f3744149fb97da1d020503\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:afa535fb621f3744149fb97da1d020503\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ef34fd20efbb9e5dcb18877c38881d6\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">try_put_task</a> (const T &amp;t)=0</td></tr>\n<tr class=\"memdesc:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ef34fd20efbb9e5dcb18877c38881d6\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task</b> (const T &amp;t)=0</td></tr>\n<tr class=\"separator:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab54afb91692e9cfb10470c575e46ac0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab54afb91692e9cfb10470c575e46ac0a\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:ab54afb91692e9cfb10470c575e46ac0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab2805ed9ad8baaa027676e024de59fb1\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>\n<tr class=\"memdesc:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59f3e796705b03165af16b42fd7f35dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59f3e796705b03165af16b42fd7f35dd\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> ()</td></tr>\n<tr class=\"separator:a59f3e796705b03165af16b42fd7f35dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::async_storage</b></td></tr>\n<tr class=\"separator:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac37955c25251d60e0279db6d239268a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac37955c25251d60e0279db6d239268a9\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:ac37955c25251d60e0279db6d239268a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">struct&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::async_helpers</b></td></tr>\n<tr class=\"separator:ac37955c25251d60e0279db6d239268a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename R , typename B &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">run_and_put_task</a></td></tr>\n<tr class=\"memdesc:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">limiter_node</a></td></tr>\n<tr class=\"memdesc:a05ec930a348f7eed564236d00edbda24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename TT , typename M &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af80b784f4606fcda66eb0059fdf6af07\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>proxy_dependency_receiver</b></td></tr>\n<tr class=\"separator:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::flow::interface10::receiver&lt; T &gt;</h3>\n\n<p>Pure virtual template class that defines a receiver of messages of type T. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00134.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::receiver_gateway&lt; Input &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00347.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver_gateway&lt; Input &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::receiver_gateway&lt; Input &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00134.png\" usemap=\"#tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\" name=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\">\n<area href=\"a00084.html\" title=\"Pure virtual template classes that define interfaces for async communication. \" alt=\"tbb::flow::interface10::graph_proxy\" shape=\"rect\" coords=\"0,0,287,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3a879651cc5c433929bd9c67e6b400ad\"></a>\ntypedef Input&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a></td></tr>\n<tr class=\"memdesc:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of inputing data into FG. <br/></td></tr>\n<tr class=\"separator:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2e65f3f68b97122cf16f81de057d5f0\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">try_put</a> (const <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a> &amp;)=0</td></tr>\n<tr class=\"memdesc:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Submit signal from an asynchronous activity to FG. <br/></td></tr>\n<tr class=\"separator:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00084\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00084')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td></tr>\n<tr class=\"memitem:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a9be5db28923f84cfc468d39139fb3\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>\n<tr class=\"separator:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4e11378739911c10db09ba71abe7c1a\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>\n<tr class=\"separator:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_abstractions.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00135.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::recursive_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00311.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Mutex that allows recursive mutex acquisition.  \n <a href=\"a00135.html#details\">More...</a></p>\n\n<p><code>#include &lt;recursive_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::recursive_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00135.png\" usemap=\"#tbb::recursive_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::recursive_mutex_map\" name=\"tbb::recursive_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00147.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d40334b0e26d5addfde5596e7f9aaec\"></a>\ntypedef LPCRITICAL_SECTION&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a></td></tr>\n<tr class=\"memdesc:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return native_handle. <br/></td></tr>\n<tr class=\"separator:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59f90e65656fec5a07e375c6e7cd39f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59f90e65656fec5a07e375c6e7cd39f3\"></a>\ntypedef pthread_mutex_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a59f90e65656fec5a07e375c6e7cd39f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47eb6e7e7ffa5d35341125792b17236b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">recursive_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adea997b45dc4a360f38d14bde9c991f2\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">lock</a> ()</td></tr>\n<tr class=\"memdesc:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b181d9aaa95444145222cfe206e8094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a8b181d9aaa95444145222cfe206e8094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a8b181d9aaa95444145222cfe206e8094\">More...</a><br/></td></tr>\n<tr class=\"separator:a8b181d9aaa95444145222cfe206e8094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af57e8d25e0e7614e98bcfa50bc9416c8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a050ca2a8d3b5c98f9d6c1252856436db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a050ca2a8d3b5c98f9d6c1252856436db\"></a>\n<a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:a050ca2a8d3b5c98f9d6c1252856436db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a668511b8520c41a342c038ba26ce70ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a668511b8520c41a342c038ba26ce70ff\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a668511b8520c41a342c038ba26ce70ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2817cf2c1a7875590548f49a834ca668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2817cf2c1a7875590548f49a834ca668\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:a2817cf2c1a7875590548f49a834ca668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcc4a830c307cb4d25311550a527fe4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcc4a830c307cb4d25311550a527fe4d\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:abcc4a830c307cb4d25311550a527fe4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Mutex that allows recursive mutex acquisition. </p>\n<p>Mutex that allows recursive mutex acquisition. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a8b181d9aaa95444145222cfe206e8094\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::recursive_mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock::try_acquire()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>recursive_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00136.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00136.html\">reservable_predecessor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00137.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00137.html\">round_robin_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00138.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::run_and_put_task&lt; R, B &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00138.html\">run_and_put_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00139.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::runtime_loader Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00409.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::runtime_loader Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Load TBB at runtime.  \n <a href=\"a00139.html#details\">More...</a></p>\n\n<p><code>#include &lt;runtime_loader.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::runtime_loader:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00139.png\" usemap=\"#tbb::interface6::runtime_loader_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::runtime_loader_map\" name=\"tbb::interface6::runtime_loader_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> { <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">em_status</a>, \n<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">em_throw</a>, \n<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>\n }</td></tr>\n<tr class=\"memdesc:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Error mode constants.  <a href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">More...</a><br/></td></tr>\n<tr class=\"separator:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> { <br/>\n&#160;&#160;<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">ec_ok</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">ec_bad_call</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">ec_bad_arg</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">ec_bad_lib</a>, \n<br/>\n&#160;&#160;<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">ec_bad_ver</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">ec_no_lib</a>\n<br/>\n }</td></tr>\n<tr class=\"memdesc:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Error codes.  <a href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">More...</a><br/></td></tr>\n<tr class=\"separator:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2f87eaf99564c705aa140f2eb8848eaa\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">runtime_loader</a> (<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> mode=<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>)</td></tr>\n<tr class=\"memdesc:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize object but do not load TBB. <br/></td></tr>\n<tr class=\"separator:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> mode=<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>)</td></tr>\n<tr class=\"memdesc:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize object and load TBB.  <a href=\"#a3e0932074d2f3ad04605e7e5da88c561\">More...</a><br/></td></tr>\n<tr class=\"separator:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3b96f53e165e3d692c3c36292ba0737\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">~runtime_loader</a> ()</td></tr>\n<tr class=\"memdesc:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy object. <br/></td></tr>\n<tr class=\"separator:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td></tr>\n<tr class=\"memdesc:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Load TBB.  <a href=\"#ae2949e9adcac56a2cb9864437be8e22e\">More...</a><br/></td></tr>\n<tr class=\"separator:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">status</a> ()</td></tr>\n<tr class=\"memdesc:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Report status.  <a href=\"#a85bf9ee021a2076a3ac7cfd70aae7345\">More...</a><br/></td></tr>\n<tr class=\"separator:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Load TBB at runtime. </p>\n<p><b>Usage:</b> </p>\n<p>In source code:</p>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &quot;tbb/runtime_loader.h&quot;</span></div>\n<div class=\"line\"></div>\n<div class=\"line\"><span class=\"keywordtype\">char</span> <span class=\"keyword\">const</span> * path[] = { <span class=\"stringliteral\">&quot;&lt;install dir&gt;/lib/ia32&quot;</span>, NULL };</div>\n<div class=\"line\">tbb::runtime_loader loader( path );</div>\n<div class=\"line\"></div>\n<div class=\"line\"><span class=\"comment\">// Now use TBB.</span></div>\n</div><!-- fragment --><p>Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).</p>\n<p>TBB library will be loaded at runtime from <code></code> &lt;install dir&gt;=\"\"&gt;/lib/ia32 directory.</p>\n<p><b>Attention:</b> </p>\n<p>All <code><a class=\"el\" href=\"a00139.html\" title=\"Load TBB at runtime. \">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications: </p>\n<pre class=\"fragment\">-   Only one TBB library can be loaded per module.\n\n-   If one object has already loaded TBB library, another object will not load TBB.\n    If the loaded TBB library is suitable for the second object, both will use TBB\n    cooperatively, otherwise the second object will report an error.\n\n-   \\c runtime_loader objects will not work (correctly) in parallel due to absence of\n    synchronization.</pre> </div><h2 class=\"groupheader\">Member Enumeration Documentation</h2>\n<a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader::error_code</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Error codes. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\"></a>ec_ok</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No errors. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\"></a>ec_bad_call</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid function call (e. g. <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\" title=\"Load TBB. \">load()</a> called when TBB is already loaded). </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\"></a>ec_bad_arg</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid argument passed. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\"></a>ec_bad_lib</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\"></a>ec_bad_ver</em>&nbsp;</td><td class=\"fielddoc\">\n<p>TBB found but version is not suitable. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\"></a>ec_no_lib</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No suitable TBB library found. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader::error_mode</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Error mode constants. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\"></a>em_status</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Save status of operation and continue. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\"></a>em_throw</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Throw an exception of tbb::runtime_loader::error_code type. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\"></a>em_abort</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Print message to <code>stderr</code> and call <code>abort()</code>. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a3e0932074d2f3ad04605e7e5da88c561\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::runtime_loader::runtime_loader </td>\n          <td>(</td>\n          <td class=\"paramtype\">char const *&#160;</td>\n          <td class=\"paramname\"><em>path</em>[], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_ver</em> = <code>INT_MAX</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a>&#160;</td>\n          <td class=\"paramname\"><em>mode</em> = <code><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initialize object and load TBB. </p>\n<p>See <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\" title=\"Load TBB. \">load()</a> for details.</p>\n<p>If error mode is <code>em_status</code>, call <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\" title=\"Report status. \">status()</a> to check whether TBB was loaded or not. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">path</td><td>List of directories to search TBB in. </td></tr>\n    <tr><td class=\"paramname\">min_ver</td><td>Minimal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">max_ver</td><td>Maximal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">mode</td><td>Error mode for this object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ae2949e9adcac56a2cb9864437be8e22e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> tbb::interface6::runtime_loader::load </td>\n          <td>(</td>\n          <td class=\"paramtype\">char const *&#160;</td>\n          <td class=\"paramname\"><em>path</em>[], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_ver</em> = <code>INT_MAX</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Load TBB. </p>\n<p>The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.</p>\n<p><b>Note:</b> </p>\n<p>For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>\".\"</code>), parent (<code>\"..\"</code>) or any other relative directory (like <code>\"lib\"</code> ). Use only absolute directory names (e. g. \"/usr/local/lib\").</p>\n<p>For the same security reasons, avoid using system default directories (<code>\"\"</code>) on Windows. (See <a href=\"http://www.microsoft.com/technet/security/advisory/2269637.mspx\">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)</p>\n<p>Neglecting these rules may cause your program to execute 3-rd party malicious code.</p>\n<p><b>Errors:</b> </p>\n<ul>\n<li><code>ec_bad_call</code> - TBB already loaded by this object.</li>\n<li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> &gt; <code>max_ver</code>.</li>\n<li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li>\n<li><code>ec_no_lib</code> - No suitable library found. </li>\n</ul>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">path</td><td>List of directories to search TBB in. </td></tr>\n    <tr><td class=\"paramname\">min_ver</td><td>Minimal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">max_ver</td><td>Maximal suitable version of TBB. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a85bf9ee021a2076a3ac7cfd70aae7345\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> tbb::interface6::runtime_loader::status </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Report status. </p>\n<p>If error mode is <code>em_status</code>, the function returns status of the last operation. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>runtime_loader.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00140.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00313.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00140.html#details\">More...</a></p>\n\n<p><code>#include &lt;scalable_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa9171ca5fc6dc349ae95a28cd16b504c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa9171ca5fc6dc349ae95a28cd16b504c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:aa9171ca5fc6dc349ae95a28cd16b504c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af5352e44d6bcde3d0bdf8368acd3c84c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af5352e44d6bcde3d0bdf8368acd3c84c\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:af5352e44d6bcde3d0bdf8368acd3c84c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9722dbf8015bed6319bc16996d45546f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9722dbf8015bed6319bc16996d45546f\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a9722dbf8015bed6319bc16996d45546f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3c8f5f07f47672c0c97fab799807728\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af3c8f5f07f47672c0c97fab799807728\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:af3c8f5f07f47672c0c97fab799807728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4de1dd8be241f945d464cbef0dd6c5b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4de1dd8be241f945d464cbef0dd6c5b8\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a4de1dd8be241f945d464cbef0dd6c5b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2376f6bacc6dcb3aa37f27a78681e89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2376f6bacc6dcb3aa37f27a78681e89\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ac2376f6bacc6dcb3aa37f27a78681e89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a751a0d5a410244226f62914cbde260ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a751a0d5a410244226f62914cbde260ff\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a751a0d5a410244226f62914cbde260ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a276a735dca4ba6abbe3b251d4c003ea7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a276a735dca4ba6abbe3b251d4c003ea7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scalable_allocator</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a276a735dca4ba6abbe3b251d4c003ea7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae680426a4dfbd51a7447d12354679c6e\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>scalable_allocator</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a647d824ce9396c3c4cb4450b0c2b7b3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a647d824ce9396c3c4cb4450b0c2b7b3c\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a647d824ce9396c3c4cb4450b0c2b7b3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab30cf9e0d0bef7ba8567edc6efb045e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab30cf9e0d0bef7ba8567edc6efb045e4\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:ab30cf9e0d0bef7ba8567edc6efb045e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf24945c12dc0586dfb1f8638daf7838\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0632b19f25e5d5f86f18b3101925f488\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afaa85d739b466699cf669116fd10d175\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afaa85d739b466699cf669116fd10d175\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:afaa85d739b466699cf669116fd10d175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:afaa85d739b466699cf669116fd10d175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0502de23b9ed7c1611703fe725cb4cd3\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>construct</b> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecd5a33086abab6860105ef9856e2786\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecd5a33086abab6860105ef9856e2786\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:aecd5a33086abab6860105ef9856e2786\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13115cd358c7be350dbeb5271181ae26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a13115cd358c7be350dbeb5271181ae26\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a13115cd358c7be350dbeb5271181ae26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac79ddb098880d8bde6097ac11f641188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac79ddb098880d8bde6097ac11f641188\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>destroy</b> (pointer p)</td></tr>\n<tr class=\"separator:ac79ddb098880d8bde6097ac11f641188\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::scalable_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00141.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00315.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00141.html#details\">More...</a></p>\n\n<p><code>#include &lt;scalable_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4220fdea504929811e9c083da3ec24cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4220fdea504929811e9c083da3ec24cd\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a4220fdea504929811e9c083da3ec24cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ae27d63cd7df1dc8d2a47c89aad8bba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2ae27d63cd7df1dc8d2a47c89aad8bba\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a2ae27d63cd7df1dc8d2a47c89aad8bba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a968aea700a5f30ad613a84a474b00ba4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a968aea700a5f30ad613a84a474b00ba4\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a968aea700a5f30ad613a84a474b00ba4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::scalable_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00142.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00308.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00142.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00142.png\" usemap=\"#tbb::queuing_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_mutex::scoped_lock_map\" name=\"tbb::queuing_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a0afe0107eb0aae613e726f67624d2fca\">More...</a><br/></td></tr>\n<tr class=\"separator:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa82d9da0dcfe5b21f1c08473f8223105\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">scoped_lock</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a469ec43836a8dd250ce0a22b02945630\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a469ec43836a8dd250ce0a22b02945630\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a469ec43836a8dd250ce0a22b02945630\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a469ec43836a8dd250ce0a22b02945630\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abf8aa7ccd48d54dcb53665700a17d02a\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">acquire</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4800ba9e743cd91f152036a6689b0e9\"></a>\nbool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">try_acquire</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>\n<tr class=\"separator:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa065e48b428b8d43e9bb931ba9e6f6c\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">release</a> ()</td></tr>\n<tr class=\"memdesc:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a0afe0107eb0aae613e726f67624d2fca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::queuing_mutex::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00143.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00391.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped lock pattern for write locks.  \n <a href=\"a00143.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00143.png\" usemap=\"#tbb::interface5::reader_writer_lock::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock::scoped_lock_map\" name=\"tbb::interface5::reader_writer_lock::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaed982d8c3f1e84298f9842063694f3c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">scoped_lock</a> (<a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> &amp;<a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>)</td></tr>\n<tr class=\"memdesc:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct with blocking attempt to acquire write lock on the passed-in lock. <br/></td></tr>\n<tr class=\"separator:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a41e77cf094ed30b0a9a39ee217c3653b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor, releases the write lock. <br/></td></tr>\n<tr class=\"separator:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bca00f4788ed8f635a8383a25a10ec8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bca00f4788ed8f635a8383a25a10ec8\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t s)</td></tr>\n<tr class=\"separator:a5bca00f4788ed8f635a8383a25a10ec8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3ef0de25ee6d7897198fcf09471bf24f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3ef0de25ee6d7897198fcf09471bf24f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *p)</td></tr>\n<tr class=\"separator:a3ef0de25ee6d7897198fcf09471bf24f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afb01bc2e211c782503ef5088003f120f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb01bc2e211c782503ef5088003f120f\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock</b></td></tr>\n<tr class=\"separator:afb01bc2e211c782503ef5088003f120f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped lock pattern for write locks. </p>\n<p>Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00144.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00320.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00144.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00144.png\" usemap=\"#tbb::spin_rw_mutex_v3::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::spin_rw_mutex_v3::scoped_lock_map\" name=\"tbb::spin_rw_mutex_v3::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a285b355121772c874a7ecaaf4d347224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a285b355121772c874a7ecaaf4d347224\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a285b355121772c874a7ecaaf4d347224\">More...</a><br/></td></tr>\n<tr class=\"separator:a285b355121772c874a7ecaaf4d347224\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a2e15358575f7651446bca13a5a2674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a2e15358575f7651446bca13a5a2674\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a0a2e15358575f7651446bca13a5a2674\">scoped_lock</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a0a2e15358575f7651446bca13a5a2674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a0a2e15358575f7651446bca13a5a2674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5c27ca2e0c9db960a9a7430082ff7edd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6d49df365396ab314e78ba07c6b96433\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6d49df365396ab314e78ba07c6b96433\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a6d49df365396ab314e78ba07c6b96433\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a6d49df365396ab314e78ba07c6b96433\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer</a> ()</td></tr>\n<tr class=\"memdesc:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upgrade reader to become a writer.  <a href=\"#afbe5de57eadc457518df7a1bb0d30c00\">More...</a><br/></td></tr>\n<tr class=\"separator:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99e279a995a51abfb87b865e886949f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99e279a995a51abfb87b865e886949f8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release</a> ()</td></tr>\n<tr class=\"memdesc:a99e279a995a51abfb87b865e886949f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a99e279a995a51abfb87b865e886949f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa693c05221d977856a98270a255fe5df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa693c05221d977856a98270a255fe5df\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader</a> ()</td></tr>\n<tr class=\"memdesc:aa693c05221d977856a98270a255fe5df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Downgrade writer to become a reader. <br/></td></tr>\n<tr class=\"separator:aa693c05221d977856a98270a255fe5df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf17ada91882fd70f139c503c0220f16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abf17ada91882fd70f139c503c0220f16\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:abf17ada91882fd70f139c503c0220f16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:abf17ada91882fd70f139c503c0220f16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d70c5a2348e30a6979bfbf677328dc4\"></a>\n<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">mutex</a></td></tr>\n<tr class=\"memdesc:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The pointer to the current mutex that is held, or NULL if no mutex is held. <br/></td></tr>\n<tr class=\"separator:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfd129dc5106ad1129ba803e67311050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a></td></tr>\n<tr class=\"memdesc:acfd129dc5106ad1129ba803e67311050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href=\"#acfd129dc5106ad1129ba803e67311050\">More...</a><br/></td></tr>\n<tr class=\"separator:acfd129dc5106ad1129ba803e67311050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ad3297bb1f91f2e12c4f3fb3e68f135bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3297bb1f91f2e12c4f3fb3e68f135bb\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b></td></tr>\n<tr class=\"separator:ad3297bb1f91f2e12c4f3fb3e68f135bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a285b355121772c874a7ecaaf4d347224\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"afbe5de57eadc457518df7a1bb0d30c00\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Upgrade reader to become a writer. </p>\n<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>\n\n<p>References <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"acfd129dc5106ad1129ba803e67311050\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::scoped_lock::is_writer</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. </p>\n<p>Not defined if not holding a lock. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire()</a>, <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader()</a>, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release()</a>, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire()</a>, and <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00145.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00297.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00145.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00145.png\" usemap=\"#tbb::null_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::null_mutex::scoped_lock_map\" name=\"tbb::null_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:af71834d1fc4c7406595e9df5b43ab7bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af71834d1fc4c7406595e9df5b43ab7bb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:af71834d1fc4c7406595e9df5b43ab7bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d541c92b1678a7dde6a45783a02160f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d541c92b1678a7dde6a45783a02160f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>acquire</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:a7d541c92b1678a7dde6a45783a02160f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5d4d5a4182091ea13fb5d38667f6449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5d4d5a4182091ea13fb5d38667f6449\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_acquire</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:ac5d4d5a4182091ea13fb5d38667f6449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21f848f83dfa6504381e3da4de7a9e00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21f848f83dfa6504381e3da4de7a9e00\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a21f848f83dfa6504381e3da4de7a9e00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00146.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::critical_section_v4::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00418.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::critical_section_v4::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00146.png\" usemap=\"#tbb::internal::critical_section_v4::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::internal::critical_section_v4::scoped_lock_map\" name=\"tbb::internal::critical_section_v4::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a3d2a294e9d790bdeba9ca3ff60e75d53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d2a294e9d790bdeba9ca3ff60e75d53\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00064.html\">critical_section_v4</a> &amp;lock_me)</td></tr>\n<tr class=\"separator:a3d2a294e9d790bdeba9ca3ff60e75d53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>critical_section.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00147.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::recursive_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00312.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00147.html#details\">More...</a></p>\n\n<p><code>#include &lt;recursive_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::recursive_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00147.png\" usemap=\"#tbb::recursive_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::recursive_mutex::scoped_lock_map\" name=\"tbb::recursive_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a9962a3932cfbd0d12cb197494f951b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab42cb541abb9647cac23b1db9a4db93d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#ab42cb541abb9647cac23b1db9a4db93d\">scoped_lock</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a90a966e19120aac99b36a3d6d04af1a2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5450ce6a5813f395afaa434384c6539\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5450ce6a5813f395afaa434384c6539\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">acquire</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ac5450ce6a5813f395afaa434384c6539\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ac5450ce6a5813f395afaa434384c6539\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a160bba506f4033980ddb69ab7a02c4fb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">try_acquire</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe3246ffc26bdb5a58f33ca513b6c0f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">release</a> ()</td></tr>\n<tr class=\"memdesc:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1bdb637fe5c9412323bf92846b40682e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bdb637fe5c9412323bf92846b40682e\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>recursive_mutex</b></td></tr>\n<tr class=\"separator:a1bdb637fe5c9412323bf92846b40682e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>recursive_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00148.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00318.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00148.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00148.png\" usemap=\"#tbb::spin_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::spin_mutex::scoped_lock_map\" name=\"tbb::spin_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4287be975cf2448c95f068b065c45107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4287be975cf2448c95f068b065c45107\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a4287be975cf2448c95f068b065c45107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct without acquiring a mutex. <br/></td></tr>\n<tr class=\"separator:a4287be975cf2448c95f068b065c45107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73f7381a9a112b9f5a856b1face525fb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a73f7381a9a112b9f5a856b1face525fb\">scoped_lock</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct and acquire lock on a mutex. <br/></td></tr>\n<tr class=\"separator:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7c702117f08ae82d034a98b3d5510ffc\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">acquire</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">try_acquire</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a76acbd67c74906f6ea33a1de6fd443ce\">More...</a><br/></td></tr>\n<tr class=\"separator:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e801b0c28fd8395fec400b96acc5c34\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">release</a> ()</td></tr>\n<tr class=\"memdesc:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9940d6e494466d9c53846ed347d79d83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9940d6e494466d9c53846ed347d79d83\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a9940d6e494466d9c53846ed347d79d83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy lock. If holding a lock, releases the lock first. <br/></td></tr>\n<tr class=\"separator:a9940d6e494466d9c53846ed347d79d83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:adf989c33fa5ee03e75925c2d0f86b89e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf989c33fa5ee03e75925c2d0f86b89e\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_mutex</b></td></tr>\n<tr class=\"separator:adf989c33fa5ee03e75925c2d0f86b89e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a76acbd67c74906f6ea33a1de6fd443ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_mutex::scoped_lock::try_acquire </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00149.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_rw_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00310.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00149.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_rw_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00149.png\" usemap=\"#tbb::queuing_rw_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_rw_mutex::scoped_lock_map\" name=\"tbb::queuing_rw_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a1ae3792726dcff8da1f2c5366fb2b754\">More...</a><br/></td></tr>\n<tr class=\"separator:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1b55ca1839c9c7c2cd779cd2dd9c474\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">scoped_lock</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cb16cc55f884bbbd5a69430c47b288f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4bf2fb86d6a418f9ea36474eb8893f9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">acquire</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4843d40dddc37c1aa3444e27d35d2433\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">try_acquire</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>\n<tr class=\"separator:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50fb02b77f02a01c74754d163157ec77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a50fb02b77f02a01c74754d163157ec77\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">release</a> ()</td></tr>\n<tr class=\"memdesc:a50fb02b77f02a01c74754d163157ec77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a50fb02b77f02a01c74754d163157ec77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">upgrade_to_writer</a> ()</td></tr>\n<tr class=\"memdesc:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upgrade reader to become a writer.  <a href=\"#ae0f28ecfbbc5f8b3024cd47048b72b5b\">More...</a><br/></td></tr>\n<tr class=\"separator:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0af63035147a3d8422f8c8d7b8d2629\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">downgrade_to_reader</a> ()</td></tr>\n<tr class=\"memdesc:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Downgrade writer to become a reader. <br/></td></tr>\n<tr class=\"separator:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a1ae3792726dcff8da1f2c5366fb2b754\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ae0f28ecfbbc5f8b3024cd47048b72b5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Upgrade reader to become a writer. </p>\n<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00150.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00295.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00150.html#details\">More...</a></p>\n\n<p><code>#include &lt;mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00150.png\" usemap=\"#tbb::mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::mutex::scoped_lock_map\" name=\"tbb::mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23122745ccd5fc2498fcbbd5ced09e06\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex. <br/></td></tr>\n<tr class=\"separator:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7c2074543443824790433d3d6c3fece\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7c2074543443824790433d3d6c3fece\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#ab7c2074543443824790433d3d6c3fece\">scoped_lock</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ab7c2074543443824790433d3d6c3fece\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab7c2074543443824790433d3d6c3fece\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a08c399ee0bb9762039b29e570ec46fe9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9fce3e2e9f592315dc9c1ada72ae5e3c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">acquire</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46f983371aa852d2427ce69f9a571f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46f983371aa852d2427ce69f9a571f78\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">try_acquire</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a46f983371aa852d2427ce69f9a571f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a46f983371aa852d2427ce69f9a571f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a1590281ccca912229a689d920fd78a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a1590281ccca912229a689d920fd78a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">release</a> ()</td></tr>\n<tr class=\"memdesc:a1a1590281ccca912229a689d920fd78a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a1a1590281ccca912229a689d920fd78a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6f4535025b9df015e1a7d35f4e2bbee7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f4535025b9df015e1a7d35f4e2bbee7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mutex</b></td></tr>\n<tr class=\"separator:a6f4535025b9df015e1a7d35f4e2bbee7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00151.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_rw_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00299.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00151.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_rw_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00151.png\" usemap=\"#tbb::null_rw_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::null_rw_mutex::scoped_lock_map\" name=\"tbb::null_rw_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b7f9a3976c7744a96e435e027c6262c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b7f9a3976c7744a96e435e027c6262c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:a4b7f9a3976c7744a96e435e027c6262c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a251d45c5c42ac6c6006d0463c2173bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a251d45c5c42ac6c6006d0463c2173bc8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>acquire</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:a251d45c5c42ac6c6006d0463c2173bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07ed8c0c225fec43b96dcec5b4d4380d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07ed8c0c225fec43b96dcec5b4d4380d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>upgrade_to_writer</b> ()</td></tr>\n<tr class=\"separator:a07ed8c0c225fec43b96dcec5b4d4380d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a899c14f8d077edd2fe7925bb82a94686\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a899c14f8d077edd2fe7925bb82a94686\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>downgrade_to_reader</b> ()</td></tr>\n<tr class=\"separator:a899c14f8d077edd2fe7925bb82a94686\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdb10af455fa8730b1a9bc8d5ca16c41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afdb10af455fa8730b1a9bc8d5ca16c41\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_acquire</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:afdb10af455fa8730b1a9bc8d5ca16c41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57d0613ea1614fe9c7daa0706e56efab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a57d0613ea1614fe9c7daa0706e56efab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a57d0613ea1614fe9c7daa0706e56efab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00152.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00392.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped lock pattern for read locks.  \n <a href=\"a00152.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock_read:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00152.png\" usemap=\"#tbb::interface5::reader_writer_lock::scoped_lock_read_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock::scoped_lock_read_map\" name=\"tbb::interface5::reader_writer_lock::scoped_lock_read_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9d3120a23016dabd4cc2683fa561ee5a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">scoped_lock_read</a> (<a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> &amp;<a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>)</td></tr>\n<tr class=\"memdesc:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct with blocking attempt to acquire read lock on the passed-in lock. <br/></td></tr>\n<tr class=\"separator:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf0e23fb4d3aeb6bde18d5d1236bd9d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">~scoped_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor, releases the read lock. <br/></td></tr>\n<tr class=\"separator:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9eb8c7a64912a1c74ea76a01a20a1621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9eb8c7a64912a1c74ea76a01a20a1621\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t s)</td></tr>\n<tr class=\"separator:a9eb8c7a64912a1c74ea76a01a20a1621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a6c15dfdbe1bc7a6648ed836ebd8de6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a6c15dfdbe1bc7a6648ed836ebd8de6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *p)</td></tr>\n<tr class=\"separator:a1a6c15dfdbe1bc7a6648ed836ebd8de6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afb01bc2e211c782503ef5088003f120f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb01bc2e211c782503ef5088003f120f\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock</b></td></tr>\n<tr class=\"separator:afb01bc2e211c782503ef5088003f120f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped lock pattern for read locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00153.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::sender&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00153.html\">sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00343.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::sender&lt; T &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Forward declaration section.  \n <a href=\"a00153.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::sender&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00153.png\" usemap=\"#tbb::flow::interface10::sender&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::sender&lt; T &gt;_map\" name=\"tbb::flow::interface10::sender&lt; T &gt;_map\">\n<area href=\"a00179.html\" alt=\"tbb::flow::interface10::internal::untyped_sender\" shape=\"rect\" coords=\"0,0,273,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20d6033fb4111199cf5e86b0bab955be\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a></td></tr>\n<tr class=\"memdesc:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The output type of this sender. <br/></td></tr>\n<tr class=\"separator:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c80af8f5073a43d576c8140e67cebf9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c80af8f5073a43d576c8140e67cebf9\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a4c80af8f5073a43d576c8140e67cebf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20d6033fb4111199cf5e86b0bab955be\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a></td></tr>\n<tr class=\"memdesc:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The output type of this sender. <br/></td></tr>\n<tr class=\"separator:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af40d268fffdc3c6b8bca87aa0c49c016\"></a>\ntypedef <a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">successor_type</a></td></tr>\n<tr class=\"memdesc:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fc0721b7adea4fc3eea480066fcaab1\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac200261e6534ca73fec6d3eb920e18c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac200261e6534ca73fec6d3eb920e18c2\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:ac200261e6534ca73fec6d3eb920e18c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00179\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00179')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"memitem:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abaf68da3fb70e918f608d49d19d21861\"></a>\ntypedef <a class=\"el\" href=\"a00178.html\">untyped_receiver</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a></td></tr>\n<tr class=\"memdesc:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa17d0e3c683db8ee91589546f00e74d3\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf9e1bebbdb2359b70e651d375f49be inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf9e1bebbdb2359b70e651d375f49be\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:a5cf9e1bebbdb2359b70e651d375f49be inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6881b9c5dc024a34ed72b0ffc567083a\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1006dd4583ea4049888c15810c8cb98f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad400086a57cb5efd351dbef833f208fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad400086a57cb5efd351dbef833f208fa\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">register_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:ad400086a57cb5efd351dbef833f208fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a new successor to this node. <br/></td></tr>\n<tr class=\"separator:ad400086a57cb5efd351dbef833f208fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a073d7519ae90412ace6cfda4f86dc0d7\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">remove_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Removes a successor from this node. <br/></td></tr>\n<tr class=\"separator:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6881b9c5dc024a34ed72b0ffc567083a\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1006dd4583ea4049888c15810c8cb98f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc1d83d8b2c81d3905e545b05373f5aa\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">try_release</a> ()</td></tr>\n<tr class=\"memdesc:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the reserved item. <br/></td></tr>\n<tr class=\"separator:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad394242fdfaef49f4be80dc3b113b92d\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">try_consume</a> ()</td></tr>\n<tr class=\"memdesc:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Consumes the reserved item. <br/></td></tr>\n<tr class=\"separator:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed19a0d1b36c31bc9421ee8c7aaed08e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed19a0d1b36c31bc9421ee8c7aaed08e\"></a>\nvirtual <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_successors</b> ()=0</td></tr>\n<tr class=\"separator:aed19a0d1b36c31bc9421ee8c7aaed08e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42bc3042f4bc13670a48b7f8316efd19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a42bc3042f4bc13670a48b7f8316efd19\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a42bc3042f4bc13670a48b7f8316efd19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d7c005f9cc4d3697b663216f886bfcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d7c005f9cc4d3697b663216f886bfcc\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a5d7c005f9cc4d3697b663216f886bfcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1d76bf33a62fe61b3798dc43ad5bc04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1d76bf33a62fe61b3798dc43ad5bc04\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_successors</b> (successor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:ab1d76bf33a62fe61b3798dc43ad5bc04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16f06fb1ae8e1dcdd4a5d7733e44a059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a16f06fb1ae8e1dcdd4a5d7733e44a059\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_count</b> ()=0</td></tr>\n<tr class=\"separator:a16f06fb1ae8e1dcdd4a5d7733e44a059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a1ff65ffb8cd89587e25d466e1bf656b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ff65ffb8cd89587e25d466e1bf656b3\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_get_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:a1ff65ffb8cd89587e25d466e1bf656b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a60e16b7b038edfbf3efba16eb74c095c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60e16b7b038edfbf3efba16eb74c095c\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_reserve_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:a60e16b7b038edfbf3efba16eb74c095c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00179\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00179')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a41064c305f60fb0431b914573b070615\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac92c0a8321811fe2a76310f423b7c2ef\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::flow::interface10::sender&lt; T &gt;</h3>\n\n<p>Forward declaration section. </p>\n<p>Pure virtual template class that defines a sender of messages of type T. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00154.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00317.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A lock that occupies a single byte.  \n <a href=\"a00154.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00154.png\" usemap=\"#tbb::spin_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::spin_mutex_map\" name=\"tbb::spin_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00148.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6c96196965bf7df426311d282ad3c378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">spin_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a6c96196965bf7df426311d282ad3c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired lock.  <a href=\"#a6c96196965bf7df426311d282ad3c378\">More...</a><br/></td></tr>\n<tr class=\"separator:a6c96196965bf7df426311d282ad3c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ec484f4df6ec5595ec821ef20bd6cd7\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct</a> ()</td></tr>\n<tr class=\"memdesc:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Internal constructor with ITT instrumentation. <br/></td></tr>\n<tr class=\"separator:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8957e40b0781192419d01d28e5205ec4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8957e40b0781192419d01d28e5205ec4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a8957e40b0781192419d01d28e5205ec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a8957e40b0781192419d01d28e5205ec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a003ffb196d22bf22ca22142338b7eeab\">More...</a><br/></td></tr>\n<tr class=\"separator:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adfcf8fe840aa73c08c2cadd570fd48fd\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a7c3354db4bd5cc81bccee9f249abb9e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7c3354db4bd5cc81bccee9f249abb9e8\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a7c3354db4bd5cc81bccee9f249abb9e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0cae048c5dc5deffe75464e4a3a2b752\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0cae048c5dc5deffe75464e4a3a2b752\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a0cae048c5dc5deffe75464e4a3a2b752\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad00ec9a97f34c9160300950b36deac3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad00ec9a97f34c9160300950b36deac3e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:ad00ec9a97f34c9160300950b36deac3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A lock that occupies a single byte. </p>\n<p>A <a class=\"el\" href=\"a00154.html\" title=\"A lock that occupies a single byte. \">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a6c96196965bf7df426311d282ad3c378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::spin_mutex::spin_mutex </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct unacquired lock. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n<p>References <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct()</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a003ffb196d22bf22ca22142338b7eeab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00155.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_rw_mutex_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#pro-static-attribs\">Static Protected Attributes</a> &#124;\n<a href=\"a00319.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3 Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  \n <a href=\"a00155.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_rw_mutex_v3:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00155.png\" usemap=\"#tbb::spin_rw_mutex_v3_map\" alt=\"\"/>\n  <map id=\"tbb::spin_rw_mutex_v3_map\" name=\"tbb::spin_rw_mutex_v3_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00144.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad30fc1ffa0a2b8134e177e02c5821d7f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">spin_rw_mutex_v3</a> ()</td></tr>\n<tr class=\"memdesc:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc7cf2e4b14d3a2a591a3552d74ba99d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">~spin_rw_mutex_v3</a> ()</td></tr>\n<tr class=\"memdesc:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor asserts if the mutex is acquired, i.e. state is zero. <br/></td></tr>\n<tr class=\"separator:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a51e207646300a4c242bb4aaa4e04e9b8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire writer lock. <br/></td></tr>\n<tr class=\"separator:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring writer lock (non-blocking)  <a href=\"#ab6ec20b1ec43a49c8c2908984e35b5e8\">More...</a><br/></td></tr>\n<tr class=\"separator:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab04321ed2cdf12ac5825c54591028fc0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0e3bb644e9021d0f80ee36b03f228e4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">lock_read</a> ()</td></tr>\n<tr class=\"memdesc:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire reader lock. <br/></td></tr>\n<tr class=\"separator:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">try_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring reader lock (non-blocking)  <a href=\"#ac932f65b0b66320688e7957ce9c3e2c1\">More...</a><br/></td></tr>\n<tr class=\"separator:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:addc8223faacc1bb2cc8626b609ab2c49\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"addc8223faacc1bb2cc8626b609ab2c49\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:addc8223faacc1bb2cc8626b609ab2c49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affd403f6e3822589e985a2c23505fbd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affd403f6e3822589e985a2c23505fbd1\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:affd403f6e3822589e985a2c23505fbd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a27adc7d791dfaa4a60638313b9d1c1f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a27adc7d791dfaa4a60638313b9d1c1f4\"></a>\ntypedef intptr_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>state_t</b></td></tr>\n<tr class=\"separator:a27adc7d791dfaa4a60638313b9d1c1f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">state</a></td></tr>\n<tr class=\"memdesc:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">State of lock.  <a href=\"#aa28625051072472ccd8a2b19405d6fb3\">More...</a><br/></td></tr>\n<tr class=\"separator:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-attribs\"></a>\nStatic Protected Attributes</h2></td></tr>\n<tr class=\"memitem:aaeec59dde09fe92be196ecddb480777b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeec59dde09fe92be196ecddb480777b\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>WRITER</b> = 1</td></tr>\n<tr class=\"separator:aaeec59dde09fe92be196ecddb480777b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b321914828e5e21baf24d58f32c66d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b321914828e5e21baf24d58f32c66d5\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>WRITER_PENDING</b> = 2</td></tr>\n<tr class=\"separator:a5b321914828e5e21baf24d58f32c66d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>READERS</b> = ~(WRITER | WRITER_PENDING)</td></tr>\n<tr class=\"separator:a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1386a2fa5979432e4a58b94e68db23f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1386a2fa5979432e4a58b94e68db23f\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ONE_READER</b> = 4</td></tr>\n<tr class=\"separator:af1386a2fa5979432e4a58b94e68db23f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a811c72bd7e5ad6a3a9161ee05e298c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a811c72bd7e5ad6a3a9161ee05e298c\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>BUSY</b> = WRITER | READERS</td></tr>\n<tr class=\"separator:a6a811c72bd7e5ad6a3a9161ee05e298c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ab6ec20b1ec43a49c8c2908984e35b5e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring writer lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac932f65b0b66320688e7957ce9c3e2c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::try_lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring reader lock (non-blocking) </p>\n<p>Return true if reader lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"aa28625051072472ccd8a2b19405d6fb3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">state_t tbb::spin_rw_mutex_v3::state</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>State of lock. </p>\n<p>Bit 0 = writer is holding lock Bit 1 = request by a writer to acquire lock (hint to readers to wait) Bit 2..N = number of readers holding lock </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock::release()</a>, and <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::structured_task_group Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00323.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::structured_task_group Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::structured_task_group:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00156.png\" usemap=\"#tbb::structured_task_group_map\" alt=\"\"/>\n  <map id=\"tbb::structured_task_group_map\" name=\"tbb::structured_task_group_map\">\n<area href=\"a00160.html\" alt=\"tbb::internal::task_group_base\" shape=\"rect\" coords=\"0,56,179,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab6812c9b682cec4b1a93da169b6fffc7\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0578ff577290a108d395ab29a0a04e04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0578ff577290a108d395ab29a0a04e04\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a0578ff577290a108d395ab29a0a04e04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00157.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::successor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00157.html\">successor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00158.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface7::task_arena Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00414.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;task_arena.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface7::task_arena:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00158.png\" usemap=\"#tbb::interface7::task_arena_map\" alt=\"\"/>\n  <map id=\"tbb::interface7::task_arena_map\" name=\"tbb::interface7::task_arena_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">attach</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tag class used to indicate the \"attaching\" constructor.  <a href=\"a00029.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">task_arena</a> (int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td></tr>\n<tr class=\"memdesc:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates <a class=\"el\" href=\"a00158.html\">task_arena</a> with certain concurrency limits.  <a href=\"#abe92eac81ca849b110de69e6efd0e5aa\">More...</a><br/></td></tr>\n<tr class=\"separator:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a70d122b3e6e4760c6053c5c230c715ef\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a70d122b3e6e4760c6053c5c230c715ef\">task_arena</a> (const <a class=\"el\" href=\"a00158.html\">task_arena</a> &amp;s)</td></tr>\n<tr class=\"memdesc:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copies settings from another <a class=\"el\" href=\"a00158.html\">task_arena</a>. <br/></td></tr>\n<tr class=\"separator:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a84dfcfd70fd08d383b8d4e8b96fa4a0d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d\">task_arena</a> (<a class=\"el\" href=\"a00029.html\">attach</a>)</td></tr>\n<tr class=\"memdesc:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an instance of <a class=\"el\" href=\"a00158.html\">task_arena</a> attached to the current arena of the thread. <br/></td></tr>\n<tr class=\"separator:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a955131a79f8dc5a0a5c9ffa66a7e7140\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">initialize</a> ()</td></tr>\n<tr class=\"memdesc:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forces allocation of the resources for the <a class=\"el\" href=\"a00158.html\">task_arena</a> as specified in constructor arguments. <br/></td></tr>\n<tr class=\"separator:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7986309715cf224f5320dc06ee7d335\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae7986309715cf224f5320dc06ee7d335\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ae7986309715cf224f5320dc06ee7d335\">initialize</a> (int max_concurrency_, unsigned reserved_for_masters=1)</td></tr>\n<tr class=\"memdesc:ae7986309715cf224f5320dc06ee7d335\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Overrides concurrency level and forces initialization of internal representation. <br/></td></tr>\n<tr class=\"separator:ae7986309715cf224f5320dc06ee7d335\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aace9ac1366eb3e0ec921da11699ba236\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">initialize</a> (<a class=\"el\" href=\"a00029.html\">attach</a>)</td></tr>\n<tr class=\"memdesc:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attaches this instance to the current arena of the thread. <br/></td></tr>\n<tr class=\"separator:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecb3eedeacfe8469a91c17525dae7fc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">terminate</a> ()</td></tr>\n<tr class=\"separator:aecb3eedeacfe8469a91c17525dae7fc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ff5a35a219953a4f3d99b833fa5f683\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">~task_arena</a> ()</td></tr>\n<tr class=\"separator:a9ff5a35a219953a4f3d99b833fa5f683\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad85856cefa30d42155a2b122b03efd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">is_active</a> () const </td></tr>\n<tr class=\"separator:ad85856cefa30d42155a2b122b03efd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab183022f20a7f622b581729e56c585a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ab183022f20a7f622b581729e56c585a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">enqueue</a> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:ab183022f20a7f622b581729e56c585a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8034275ed2fffa68f70484043b90d406\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8034275ed2fffa68f70484043b90d406\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8034275ed2fffa68f70484043b90d406\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enqueue</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a8034275ed2fffa68f70484043b90d406\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">enqueue</a> (F &amp;&amp;f, priority_t p)</td></tr>\n<tr class=\"separator:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734b8ce1d75d735736d0fd5b47a74092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a734b8ce1d75d735736d0fd5b47a74092\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enqueue</b> (const F &amp;f, priority_t p)</td></tr>\n<tr class=\"separator:a734b8ce1d75d735736d0fd5b47a74092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">internal::return_type_or_void<br class=\"typebreak\"/>\n&lt; F &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute</a> (F &amp;f)</td></tr>\n<tr class=\"separator:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">internal::return_type_or_void<br class=\"typebreak\"/>\n&lt; F &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">execute</a> (const F &amp;f)</td></tr>\n<tr class=\"separator:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07d87dff8c6116ee349684e10f754aeb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">debug_wait_until_empty</a> ()</td></tr>\n<tr class=\"separator:a07d87dff8c6116ee349684e10f754aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2977b0fba9253e6cab31570f4992c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2977b0fba9253e6cab31570f4992c998\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">max_concurrency</a> () const </td></tr>\n<tr class=\"memdesc:a2977b0fba9253e6cab31570f4992c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximal number of threads that can work inside the arena. <br/></td></tr>\n<tr class=\"separator:a2977b0fba9253e6cab31570f4992c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:af695a8aa3d2a4f498067c662e287dd8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">current_thread_index</a> ()</td></tr>\n<tr class=\"separator:af695a8aa3d2a4f498067c662e287dd8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6887d06dd0f104ab6c06fdddca4d2471\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6887d06dd0f104ab6c06fdddca4d2471\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>\n<tr class=\"separator:a6887d06dd0f104ab6c06fdddca4d2471\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a591c8245104c8eeade3e577df3951feb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a591c8245104c8eeade3e577df3951feb\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::this_task_arena::max_concurrency</b> ()</td></tr>\n<tr class=\"separator:a591c8245104c8eeade3e577df3951feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>1-to-1 proxy representation class of scheduler's arena Constructors set up settings only, real construction is deferred till the first method invocation Destructor only removes one of the references to the inner arena representation. Final destruction happens when all the references (and the work) are gone. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"abe92eac81ca849b110de69e6efd0e5aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface7::task_arena::task_arena </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_concurrency_</em> = <code>automatic</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned&#160;</td>\n          <td class=\"paramname\"><em>reserved_for_masters</em> = <code>1</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates <a class=\"el\" href=\"a00158.html\">task_arena</a> with certain concurrency limits. </p>\n<p>Sets up settings only, real construction is deferred till the first method invocation </p>\n<ul>\n<li>max_concurrency specifies total number of slots in arena where threads work </li>\n<li>reserved_for_masters specifies number of slots to be used by master threads only. Value of 1 is default and reflects behavior of implicit arenas. </li>\n</ul>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ff5a35a219953a4f3d99b833fa5f683\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface7::task_arena::~task_arena </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Removes the reference to the internal arena representation, and destroys the external object. Not thread safe wrt concurrent invocations of other methods. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"af695a8aa3d2a4f498067c662e287dd8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static int tbb::interface7::task_arena::current_thread_index </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns the index, aka slot number, of the calling thread in its current arena This method is deprecated and replaced with this_task_arena::current_thread_index() </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a07d87dff8c6116ee349684e10f754aeb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::debug_wait_until_empty </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Wait for all work in the arena to be completed Even submitted by other application threads Joins arena if/when possible (in the same way as <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute()</a>) </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab183022f20a7f622b581729e56c585a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::enqueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Enqueues a task into the arena to process a functor, and immediately returns. Does not require the calling thread to join the arena </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0c8d4caa8f2902cf06100cc926347bee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::enqueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">priority_t&#160;</td>\n          <td class=\"paramname\"><em>p</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Enqueues a task with priority p into the arena to process a functor f, and immediately returns. Does not require the calling thread to join the arena </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad6e39e1bd277960c1d1d3637e9ba3501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">internal::return_type_or_void&lt;F&gt;::type tbb::interface7::task_arena::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Joins the arena and executes a mutable functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ff5c301ba9f7121bb0ace48a8c387f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">internal::return_type_or_void&lt;F&gt;::type tbb::interface7::task_arena::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const F &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Joins the arena and executes a constant functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad85856cefa30d42155a2b122b03efd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::interface7::task_arena::is_active </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns true if the arena is active (initialized); false otherwise. The name was chosen to match a <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> method with the same semantics. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aecb3eedeacfe8469a91c17525dae7fc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::terminate </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Removes the reference to the internal arena representation. Not thread safe wrt concurrent invocations of other methods. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_arena.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00159.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_group Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00159.html\">task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00322.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_group:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00159.png\" usemap=\"#tbb::task_group_map\" alt=\"\"/>\n  <map id=\"tbb::task_group_map\" name=\"tbb::task_group_map\">\n<area href=\"a00160.html\" alt=\"tbb::internal::task_group_base\" shape=\"rect\" coords=\"0,56,179,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abe756667c1272f714ad388aa31f2d29e\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4ef4629d2e629237a87f8d600fb8b281\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6355cce7750b1367fb98924af151e8b2\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aeef1b473ff0edaf3f356722b13e877b0\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a543903ef748fd10eb864c27a2e8ac18b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00160.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_group_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00160.html\">task_group_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00420.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_group_base Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_group_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00160.png\" usemap=\"#tbb::internal::task_group_base_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_group_base_map\" name=\"tbb::internal::task_group_base_map\">\n<area href=\"a00156.html\" alt=\"tbb::structured_task_group\" shape=\"rect\" coords=\"0,112,179,136\"/>\n<area href=\"a00159.html\" alt=\"tbb::task_group\" shape=\"rect\" coords=\"189,112,368,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00161.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_group_context Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00300.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group_context Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;parallel_invoke.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a2c3cdbc6da08799d0d1ee48d8ccbb13b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c3cdbc6da08799d0d1ee48d8ccbb13b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_context</b> (tbb::internal::string_index)</td></tr>\n<tr class=\"separator:a2c3cdbc6da08799d0d1ee48d8ccbb13b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_invoke.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00162.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_handle&lt; F &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00162.html\">task_handle</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00321.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_handle&lt; F &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_handle&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00162.png\" usemap=\"#tbb::task_handle&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::task_handle&lt; F &gt;_map\" name=\"tbb::task_handle&lt; F &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1e213e12e1c2d789c22e56901b53b1d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e213e12e1c2d789c22e56901b53b1d2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a1e213e12e1c2d789c22e56901b53b1d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7afdf774a18e0b8e8ba8766015505889\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7afdf774a18e0b8e8ba8766015505889\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:a7afdf774a18e0b8e8ba8766015505889\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab09a19aa92286d48cc42d3e9cd60b5d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab09a19aa92286d48cc42d3e9cd60b5d8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> () const </td></tr>\n<tr class=\"separator:ab09a19aa92286d48cc42d3e9cd60b5d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a70a59090420eb9c76bd067b3ed3f1e72\"></a>\ntemplate&lt;typename _F &gt; </td></tr>\n<tr class=\"memitem:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::task_handle_task</b></td></tr>\n<tr class=\"separator:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe85fe1f158cb2a40cd7203854b9460a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe85fe1f158cb2a40cd7203854b9460a\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group</b></td></tr>\n<tr class=\"separator:abe85fe1f158cb2a40cd7203854b9460a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2913777f78e95f9ea09d788b12db6b62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2913777f78e95f9ea09d788b12db6b62\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>structured_task_group</b></td></tr>\n<tr class=\"separator:a2913777f78e95f9ea09d788b12db6b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00163.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_handle_task&lt; F &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00419.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_handle_task&lt; F &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_handle_task&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00163.png\" usemap=\"#tbb::internal::task_handle_task&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_handle_task&lt; F &gt;_map\" name=\"tbb::internal::task_handle_task&lt; F &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abcddb511967aa06d264ac6c06c4fb08b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcddb511967aa06d264ac6c06c4fb08b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle_task</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:abcddb511967aa06d264ac6c06c4fb08b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00164.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_scheduler_init Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00324.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_scheduler_init Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00276.html\">Task Scheduling</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Class delimiting the scope of task scheduler activity.  \n <a href=\"a00164.html#details\">More...</a></p>\n\n<p><code>#include &lt;task_scheduler_init.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_scheduler_init:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00164.png\" usemap=\"#tbb::task_scheduler_init_map\" alt=\"\"/>\n  <map id=\"tbb::task_scheduler_init_map\" name=\"tbb::task_scheduler_init_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a485028b867bffef5829209330e79e64c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">initialize</a> (int number_of_threads=<a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a>)</td></tr>\n<tr class=\"memdesc:a485028b867bffef5829209330e79e64c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Ensure that scheduler exists for this thread.  <a href=\"#a485028b867bffef5829209330e79e64c\">More...</a><br/></td></tr>\n<tr class=\"separator:a485028b867bffef5829209330e79e64c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a0f5294f74b123a646a1762c68d11e39a\">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>\n<tr class=\"memdesc:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The overloaded method with stack size parameter.  <a href=\"#a0f5294f74b123a646a1762c68d11e39a\">More...</a><br/></td></tr>\n<tr class=\"separator:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15d5dca7f79c5769bb96f674e4da0c04\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">terminate</a> ()</td></tr>\n<tr class=\"memdesc:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse of method initialize. <br/></td></tr>\n<tr class=\"separator:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae261cf6c54a3689ef4e2c079fe0f67d0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#ae261cf6c54a3689ef4e2c079fe0f67d0\">blocking_terminate</a> ()</td></tr>\n<tr class=\"memdesc:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\" title=\"Inverse of method initialize. \">terminate()</a> that waits for worker threads termination. Throws exception on error. <br/></td></tr>\n<tr class=\"separator:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2721ff874fb21f97b470d14a5ec151f3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">blocking_terminate</a> (const std::nothrow_t &amp;) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\" title=\"Inverse of method initialize. \">terminate()</a> that waits for worker threads termination. Returns false on error. <br/></td></tr>\n<tr class=\"separator:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b2657d9b7c39fede2d19507d0e94688\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init</a> (int number_of_threads=<a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>\n<tr class=\"memdesc:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Shorthand for default constructor followed by call to initialize(number_of_threads). <br/></td></tr>\n<tr class=\"separator:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20b121334ec39c1d91bd4fe9a51892b0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">~task_scheduler_init</a> ()</td></tr>\n<tr class=\"memdesc:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br/></td></tr>\n<tr class=\"separator:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed5505d7fed9d5493676aa15c176512c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed5505d7fed9d5493676aa15c176512c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">is_active</a> () const </td></tr>\n<tr class=\"memdesc:aed5505d7fed9d5493676aa15c176512c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if scheduler is active (initialized); false otherwise. <br/></td></tr>\n<tr class=\"separator:aed5505d7fed9d5493676aa15c176512c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">default_num_threads</a> ()</td></tr>\n<tr class=\"memdesc:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of threads TBB scheduler would create if initialized by default.  <a href=\"#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">More...</a><br/></td></tr>\n<tr class=\"separator:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a945886f5ef48300a8ebff2d077c166b1\"></a>\nstatic const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a> = -1</td></tr>\n<tr class=\"memdesc:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Typedef for number of threads that is automatic. <br/></td></tr>\n<tr class=\"separator:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0e49ff2f59a4e53c9c07897b57f084d\"></a>\nstatic const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">deferred</a> = -2</td></tr>\n<tr class=\"memdesc:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Argument to <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\" title=\"Ensure that scheduler exists for this thread. \">initialize()</a> or constructor that causes initialization to be deferred. <br/></td></tr>\n<tr class=\"separator:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Class delimiting the scope of task scheduler activity. </p>\n<p>A thread can construct a <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).</p>\n<p>This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.</p>\n<p>If a parallel construct is used without <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\" title=\"Ensure that scheduler exists for this thread. \">task_scheduler_init::initialize()</a>. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa0c0d46ec09bedc1ee876aa8aa87c3d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of threads TBB scheduler would create if initialized by default. </p>\n<p>Result returned by this method does not depend on whether the scheduler has already been initialized.</p>\n<p>Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state.</p>\n<p>Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>\n<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a485028b867bffef5829209330e79e64c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>number_of_threads</em> = <code><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a></code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Ensure that scheduler exists for this thread. </p>\n<p>A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.</p>\n<p>The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0f5294f74b123a646a1762c68d11e39a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>number_of_threads</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">stack_size_type&#160;</td>\n          <td class=\"paramname\"><em>thread_stack_size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The overloaded method with stack size parameter. </p>\n<p>Overloading is necessary to preserve ABI compatibility </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_init.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00165.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::task_scheduler_observer Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00410.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::task_scheduler_observer Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::task_scheduler_observer:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00165.png\" usemap=\"#tbb::interface6::task_scheduler_observer_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::task_scheduler_observer_map\" name=\"tbb::interface6::task_scheduler_observer_map\">\n<area href=\"a00166.html\" alt=\"tbb::internal::task_scheduler_observer_v3\" shape=\"rect\" coords=\"0,0,247,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>keep_awake</b> = false, \n<b>allow_sleep</b> = true\n }</td></tr>\n<tr class=\"memdesc:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return commands for <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\" title=\"The callback can be invoked by a worker thread before it goes to sleep. \">may_sleep()</a> <br/></td></tr>\n<tr class=\"separator:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">task_scheduler_observer</a> (bool local=false)</td></tr>\n<tr class=\"memdesc:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct local or global observer in inactive state (observation disabled).  <a href=\"#a89025b1e1d42e97d6fe114c0c331f730\">More...</a><br/></td></tr>\n<tr class=\"separator:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a36e7e0c466320029d5a3e50a573e04c1\">task_scheduler_observer</a> (task_arena &amp;a)</td></tr>\n<tr class=\"memdesc:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct local observer for a given arena in inactive state (observation disabled).  <a href=\"#a36e7e0c466320029d5a3e50a573e04c1\">More...</a><br/></td></tr>\n<tr class=\"separator:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ef3f1853439b46e5a9db7fd1c0f9116\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer</a> ()</td></tr>\n<tr class=\"separator:a9ef3f1853439b46e5a9db7fd1c0f9116\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#ad5b33790cea52c61e1fb004a8ed26365\">More...</a><br/></td></tr>\n<tr class=\"separator:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2390325945912ee7ce58cd9700664ea4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">may_sleep</a> ()</td></tr>\n<tr class=\"memdesc:a2390325945912ee7ce58cd9700664ea4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The callback can be invoked by a worker thread before it goes to sleep.  <a href=\"#a2390325945912ee7ce58cd9700664ea4\">More...</a><br/></td></tr>\n<tr class=\"separator:a2390325945912ee7ce58cd9700664ea4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00166\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00166')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td></tr>\n<tr class=\"memitem:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#a40209b347e3c82bb5bfda05941304309\">More...</a><br/></td></tr>\n<tr class=\"separator:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a31abaf256f7172f010cfb2259c7787bb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a> () const </td></tr>\n<tr class=\"memdesc:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if observation is enabled, false otherwise. <br/></td></tr>\n<tr class=\"separator:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25bffb05efaaab36bc58590969e29745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct observer with observation disabled. <br/></td></tr>\n<tr class=\"separator:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a> (bool)</td></tr>\n<tr class=\"memdesc:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Entry notification.  <a href=\"#af4282a27725fbe86052bb785bdd9c5d3\">More...</a><br/></td></tr>\n<tr class=\"separator:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a> (bool)</td></tr>\n<tr class=\"memdesc:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exit notification.  <a href=\"#a657e90f833568e217b807d0122fa7668\">More...</a><br/></td></tr>\n<tr class=\"separator:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a151e475ebba39172fcc13f43bed426cc\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor automatically switches observation off if it is enabled. <br/></td></tr>\n<tr class=\"separator:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a567691ababd2dee2c44d1d6d4b9b093a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a567691ababd2dee2c44d1d6d4b9b093a\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::task_scheduler_observer_v3</b></td></tr>\n<tr class=\"separator:a567691ababd2dee2c44d1d6d4b9b093a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae3fb165cd890fab10c1d09823dcb0ac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3fb165cd890fab10c1d09823dcb0ac9\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::observer_proxy</b></td></tr>\n<tr class=\"separator:ae3fb165cd890fab10c1d09823dcb0ac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d0d193bf27a1606466663c68e05e1b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d0d193bf27a1606466663c68e05e1b3\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::observer_list</b></td></tr>\n<tr class=\"separator:a5d0d193bf27a1606466663c68e05e1b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a89025b1e1d42e97d6fe114c0c331f730\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>local</em> = <code>false</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct local or global observer in inactive state (observation disabled). </p>\n<p>For a local observer entry/exit notifications are invoked whenever a worker thread joins/leaves the arena of the observer's owner thread. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. TODO: Obsolete. Global observer semantics is obsolete as it violates master thread isolation guarantees and is not composable. Thus the current default behavior of the constructor is obsolete too and will be changed in one of the future versions of the library. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a36e7e0c466320029d5a3e50a573e04c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramtype\">task_arena &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct local observer for a given arena in inactive state (observation disabled). </p>\n<p>entry/exit notifications are invoked whenever a thread joins/leaves arena. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ef3f1853439b46e5a9db7fd1c0f9116\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual tbb::interface6::task_scheduler_observer::~task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Destructor protects instance of the observer from concurrent notification. It is recommended to disable observation before destructor of a derived class starts, otherwise it can lead to concurrent notification callback on partly destroyed object </p>\n\n<p>References <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe()</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a2390325945912ee7ce58cd9700664ea4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool tbb::interface6::task_scheduler_observer::may_sleep </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>The callback can be invoked by a worker thread before it goes to sleep. </p>\n<p>If it returns false ('keep_awake'), the thread will keep spinning and looking for work. It will not be called for master threads. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad5b33790cea52c61e1fb004a8ed26365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::task_scheduler_observer::observe </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enable or disable observation. </p>\n<p>Warning: concurrent invocations of this method are not safe. Repeated calls with the same state are no-ops. </p>\n\n<p>References <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3::observe()</a>, and <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb::relaxed</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_observer.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00166.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_scheduler_observer_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00421.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_scheduler_observer_v3 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_scheduler_observer_v3:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00166.png\" usemap=\"#tbb::internal::task_scheduler_observer_v3_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_scheduler_observer_v3_map\" name=\"tbb::internal::task_scheduler_observer_v3_map\">\n<area href=\"a00165.html\" alt=\"tbb::interface6::task_scheduler_observer\" shape=\"rect\" coords=\"0,56,247,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a40209b347e3c82bb5bfda05941304309\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:a40209b347e3c82bb5bfda05941304309\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#a40209b347e3c82bb5bfda05941304309\">More...</a><br/></td></tr>\n<tr class=\"separator:a40209b347e3c82bb5bfda05941304309\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a31abaf256f7172f010cfb2259c7787bb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a> () const </td></tr>\n<tr class=\"memdesc:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if observation is enabled, false otherwise. <br/></td></tr>\n<tr class=\"separator:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25bffb05efaaab36bc58590969e29745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25bffb05efaaab36bc58590969e29745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a25bffb05efaaab36bc58590969e29745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct observer with observation disabled. <br/></td></tr>\n<tr class=\"separator:a25bffb05efaaab36bc58590969e29745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a> (bool)</td></tr>\n<tr class=\"memdesc:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Entry notification.  <a href=\"#af4282a27725fbe86052bb785bdd9c5d3\">More...</a><br/></td></tr>\n<tr class=\"separator:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a657e90f833568e217b807d0122fa7668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a> (bool)</td></tr>\n<tr class=\"memdesc:a657e90f833568e217b807d0122fa7668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exit notification.  <a href=\"#a657e90f833568e217b807d0122fa7668\">More...</a><br/></td></tr>\n<tr class=\"separator:a657e90f833568e217b807d0122fa7668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a151e475ebba39172fcc13f43bed426cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a151e475ebba39172fcc13f43bed426cc\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a151e475ebba39172fcc13f43bed426cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor automatically switches observation off if it is enabled. <br/></td></tr>\n<tr class=\"separator:a151e475ebba39172fcc13f43bed426cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a897b52f8da750f35b9b2ef410eae7181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a897b52f8da750f35b9b2ef410eae7181\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>observer_proxy</b></td></tr>\n<tr class=\"separator:a897b52f8da750f35b9b2ef410eae7181\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a232d1ae378b2c82f9788c5611429298b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a232d1ae378b2c82f9788c5611429298b\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>observer_list</b></td></tr>\n<tr class=\"separator:a232d1ae378b2c82f9788c5611429298b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad972d2c44eeed885d9df2b75e7231277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad972d2c44eeed885d9df2b75e7231277\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>interface6::task_scheduler_observer</b></td></tr>\n<tr class=\"separator:ad972d2c44eeed885d9df2b75e7231277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a40209b347e3c82bb5bfda05941304309\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::internal::task_scheduler_observer_v3::observe </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Enable or disable observation. </p>\n<p>For local observers the method can be used only when the current thread has the task scheduler initialized or is attached to an arena.</p>\n<p>Repeated calls with the same state are no-ops. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer::observe()</a>, and <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af4282a27725fbe86052bb785bdd9c5d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_entry </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Entry notification. </p>\n<p>Invoked from inside observe(true) call and whenever a worker enters the arena this observer is associated with. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.</p>\n<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a657e90f833568e217b807d0122fa7668\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_exit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Exit notification. </p>\n<p>Invoked from inside observe(false) call and whenever a worker leaves the arena this observer is associated with.</p>\n<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_observer.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00325.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00167.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a60463a571d5c20f7762112367261ad94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a> { <b>scalable</b>, \n<b>standard</b>\n }</td></tr>\n<tr class=\"memdesc:a60463a571d5c20f7762112367261ad94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specifies current allocator. <br/></td></tr>\n<tr class=\"separator:a60463a571d5c20f7762112367261ad94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a26be966de4164e37002247c2c2266df9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a26be966de4164e37002247c2c2266df9\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a26be966de4164e37002247c2c2266df9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a452a6c09408f425c9a005b5f2aad1761\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a452a6c09408f425c9a005b5f2aad1761\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a452a6c09408f425c9a005b5f2aad1761\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63122d559635096a2618aecd1ba6664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63122d559635096a2618aecd1ba6664b\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a63122d559635096a2618aecd1ba6664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24d98ce3ab908bc4b10d21dad6622364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24d98ce3ab908bc4b10d21dad6622364\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a24d98ce3ab908bc4b10d21dad6622364\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a812817d50e8df15df54998caec9892eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a812817d50e8df15df54998caec9892eb\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a812817d50e8df15df54998caec9892eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acba390757f664df03a15e933e3e34941\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acba390757f664df03a15e933e3e34941\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:acba390757f664df03a15e933e3e34941\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8371538bc959f41f342012e363564aed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8371538bc959f41f342012e363564aed\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_allocator</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a8371538bc959f41f342012e363564aed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9faff9ae2c2cd3ed2ca064b562224974\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb_allocator</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1370dbb1f06fed57273bddcae688255\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1370dbb1f06fed57273bddcae688255\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:ac1370dbb1f06fed57273bddcae688255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb9c91d548d4a5affe3ec1de1c1b9327\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb9c91d548d4a5affe3ec1de1c1b9327\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:afb9c91d548d4a5affe3ec1de1c1b9327\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afedd8a64eed9692083c708f419338e0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afedd8a64eed9692083c708f419338e0c\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:afedd8a64eed9692083c708f419338e0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:afedd8a64eed9692083c708f419338e0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28e333e0fff56dd53c20b82cfee430ab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a2676fb8a2f931961d373b88848c93e\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af54fa3029e33cebe5ba64a8538306fdf\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aefbb273663853a665e51dcfa053d12a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aefbb273663853a665e51dcfa053d12a0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:aefbb273663853a665e51dcfa053d12a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a694e266db657afba34ecb60111b2e2d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a694e266db657afba34ecb60111b2e2d3\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a694e266db657afba34ecb60111b2e2d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac7b1b393a8ff3399079328c0971c1996\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:aa4606cff0156ec4237c1571204851bfb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4606cff0156ec4237c1571204851bfb\"></a>\nstatic <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">allocator_type</a> ()</td></tr>\n<tr class=\"memdesc:aa4606cff0156ec4237c1571204851bfb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns current allocator. <br/></td></tr>\n<tr class=\"separator:aa4606cff0156ec4237c1571204851bfb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::tbb_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00168.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00327.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00168.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8fda536620d85d53caa82c45ffa49dd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8fda536620d85d53caa82c45ffa49dd8\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a8fda536620d85d53caa82c45ffa49dd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a401d3c91a38b09410a20fe69d4d9745d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a401d3c91a38b09410a20fe69d4d9745d\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a401d3c91a38b09410a20fe69d4d9745d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afef43ed21663982050fbae7b970e33f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afef43ed21663982050fbae7b970e33f6\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:afef43ed21663982050fbae7b970e33f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::tbb_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00169.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_exception Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00338.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_exception Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  \n <a href=\"a00169.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::tbb_exception:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00169.png\" usemap=\"#tbb::tbb_exception_map\" alt=\"\"/>\n  <map id=\"tbb::tbb_exception_map\" name=\"tbb::tbb_exception_map\">\n<area href=\"a00046.html\" title=\"This class is used by TBB to propagate information about unhandled exceptions into the root thread...\" alt=\"tbb::captured_exception\" shape=\"rect\" coords=\"0,112,248,136\"/>\n<area href=\"a00096.html\" title=\"Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...\" alt=\"tbb::movable_exception&lt; ExceptionData &gt;\" shape=\"rect\" coords=\"258,112,506,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual <a class=\"el\" href=\"a00169.html\">tbb_exception</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">move</a> ()=0  throw ()</td></tr>\n<tr class=\"memdesc:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a4bd4ba0d501021013d1473d21b020b69\">More...</a><br/></td></tr>\n<tr class=\"separator:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">destroy</a> ()=0  throw ()</td></tr>\n<tr class=\"memdesc:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#ad3bc09bf78c33f19a0bcdf882fdf9d41\">More...</a><br/></td></tr>\n<tr class=\"separator:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">throw_self</a> ()=0</td></tr>\n<tr class=\"memdesc:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#ae45c08d36c7ec7ae91785da3515a8828\">More...</a><br/></td></tr>\n<tr class=\"separator:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a282bb7dce5f157d044d14d50cd6ff35c\"></a>\nvirtual const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">name</a> () const =0  throw ()</td></tr>\n<tr class=\"memdesc:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6739787c42d80943e18913cce47f42f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6739787c42d80943e18913cce47f42f\"></a>\nvirtual const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">what</a> () const __TBB_override=0  throw ()</td></tr>\n<tr class=\"memdesc:aa6739787c42d80943e18913cce47f42f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:aa6739787c42d80943e18913cce47f42f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. </p>\n<p>If an unhandled exception of the type derived from <a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class=\"el\" href=\"a00161.html\">task_group_context</a> with the guilty algorithm/task (the one that threw the exception first).</p>\n<p>Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.</p>\n<p>NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the \"throw;\" operator.</p>\n<p>TBB provides two implementations of this interface: <a class=\"el\" href=\"a00046.html\" title=\"This class is used by TBB to propagate information about unhandled exceptions into the root thread...\">tbb::captured_exception</a> and template class <a class=\"el\" href=\"a00096.html\" title=\"Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...\">tbb::movable_exception</a>. See their declarations for more info. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad3bc09bf78c33f19a0bcdf882fdf9d41\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::tbb_exception::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4bd4ba0d501021013d1473d21b020b69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual <a class=\"el\" href=\"a00169.html\">tbb_exception</a>* tbb::tbb_exception::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6a973c37078afedf7d457ff4704bf8cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::tbb_exception::operator delete </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> operation on an exception thrown out of TBB scheduler.</p>\n<p>When overriding method <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae45c08d36c7ec7ae91785da3515a8828\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::tbb_exception::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00170.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_exception_ptr Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00422.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_exception_ptr Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception container that preserves the exact copy of the original exception.  \n <a href=\"a00170.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">destroy</a> ()  throw ()</td></tr>\n<tr class=\"memdesc:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys this objects.  <a href=\"#a38d3ca480e2758a67bcd7427b156daae\">More...</a><br/></td></tr>\n<tr class=\"separator:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1713aa9a6a3850049d34358397a8ed81\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">throw_self</a> ()</td></tr>\n<tr class=\"memdesc:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws the contained exception . <br/></td></tr>\n<tr class=\"separator:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a83d4cb04d89ed11b5e030fe4db2d5e5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83d4cb04d89ed11b5e030fe4db2d5e5f\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> ()</td></tr>\n<tr class=\"separator:a83d4cb04d89ed11b5e030fe4db2d5e5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae54ded5f55ad39805e6cb967fc710346\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae54ded5f55ad39805e6cb967fc710346\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> (const <a class=\"el\" href=\"a00169.html\">tbb_exception</a> &amp;tag)</td></tr>\n<tr class=\"separator:ae54ded5f55ad39805e6cb967fc710346\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abfbea91401d2594deb04ea331734171c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abfbea91401d2594deb04ea331734171c\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">allocate</a> (<a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"memdesc:abfbea91401d2594deb04ea331734171c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This overload uses move semantics (i.e. it empties src) <br/></td></tr>\n<tr class=\"separator:abfbea91401d2594deb04ea331734171c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception container that preserves the exact copy of the original exception. </p>\n<p>This class can be used only when the appropriate runtime support (mandated by C++11) is present </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a38d3ca480e2758a67bcd7427b156daae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::internal::tbb_exception_ptr::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Destroys this objects. </p>\n<p>Note that objects of this type can be created only by the allocate() method. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00171.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_thread_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00427.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Versioned thread class.  \n <a href=\"a00171.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_thread.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00085.html\">id</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:acf81b6411caec392fc62fdfbf72560ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf81b6411caec392fc62fdfbf72560ac\"></a>\ntypedef HANDLE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:acf81b6411caec392fc62fdfbf72560ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30e64e2a6bef43e2fd847e6c60a31207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30e64e2a6bef43e2fd847e6c60a31207\"></a>\ntypedef pthread_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a30e64e2a6bef43e2fd847e6c60a31207\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad9acae61c47fad5cf88869061ead3022\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad9acae61c47fad5cf88869061ead3022\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread_v3</b> (const <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;)</td></tr>\n<tr class=\"separator:ad9acae61c47fad5cf88869061ead3022\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15b84e454eb0179e010b90a88baa0933\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15b84e454eb0179e010b90a88baa0933\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb_thread_v3</a> () __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a15b84e454eb0179e010b90a88baa0933\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a thread object that does not represent a thread of execution. <br/></td></tr>\n<tr class=\"separator:a15b84e454eb0179e010b90a88baa0933\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9c5587ab76ca1aa98bae7fe69a459466\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a9c5587ab76ca1aa98bae7fe69a459466\">tbb_thread_v3</a> (F f)</td></tr>\n<tr class=\"memdesc:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f() in a new thread. <br/></td></tr>\n<tr class=\"separator:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a672a5367e687635c869926bf8a986296\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a672a5367e687635c869926bf8a986296\"></a>\ntemplate&lt;class F , class X &gt; </td></tr>\n<tr class=\"memitem:a672a5367e687635c869926bf8a986296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a672a5367e687635c869926bf8a986296\">tbb_thread_v3</a> (F f, X x)</td></tr>\n<tr class=\"memdesc:a672a5367e687635c869926bf8a986296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f(x) in a new thread. <br/></td></tr>\n<tr class=\"separator:a672a5367e687635c869926bf8a986296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac3f57678f2a289084a6d275f8f8fbc62\"></a>\ntemplate&lt;class F , class X , class Y &gt; </td></tr>\n<tr class=\"memitem:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#ac3f57678f2a289084a6d275f8f8fbc62\">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>\n<tr class=\"memdesc:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f(x,y) in a new thread. <br/></td></tr>\n<tr class=\"separator:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4f68564c30ee6f59bab29c3b3216623\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4f68564c30ee6f59bab29c3b3216623\"></a>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;x)</td></tr>\n<tr class=\"separator:aa4f68564c30ee6f59bab29c3b3216623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2e10af48f3f2482e9e7236f2e05714c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab2e10af48f3f2482e9e7236f2e05714c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ab2e10af48f3f2482e9e7236f2e05714c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ddee0e2030f8fa947fd93f403178104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ddee0e2030f8fa947fd93f403178104\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>joinable</b> () const __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a4ddee0e2030f8fa947fd93f403178104\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a044c8727c51e921b0cc43a6b057eb559\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">join</a> ()</td></tr>\n<tr class=\"memdesc:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The completion of the thread represented by *this happens before <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\" title=\"The completion of the thread represented by *this happens before join() returns. \">join()</a> returns. <br/></td></tr>\n<tr class=\"separator:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a80a31a41708872af5557b907f129b19b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a80a31a41708872af5557b907f129b19b\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">detach</a> ()</td></tr>\n<tr class=\"memdesc:a80a31a41708872af5557b907f129b19b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">When <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\" title=\"When detach() returns, *this no longer represents the possibly continuing thread of execution...\">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br/></td></tr>\n<tr class=\"separator:a80a31a41708872af5557b907f129b19b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae98915bfeccaa90d6f13add0ee1ab33a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae98915bfeccaa90d6f13add0ee1ab33a\"></a>\n<a class=\"el\" href=\"a00085.html\">id</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_id</b> () const __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ae98915bfeccaa90d6f13add0ee1ab33a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98e89e22e11fb6cab05f0f7839c79310\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98e89e22e11fb6cab05f0f7839c79310\"></a>\nnative_handle_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:a98e89e22e11fb6cab05f0f7839c79310\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static unsigned __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">hardware_concurrency</a> () __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The number of hardware thread contexts.  <a href=\"#a23d7a420709b2e2b29b42dea897bd8bc\">More...</a><br/></td></tr>\n<tr class=\"separator:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a7646cb0b0cc070a6dd962afbaaec3ec8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7646cb0b0cc070a6dd962afbaaec3ec8\"></a>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a>(<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> <br class=\"typebreak\"/>\n&amp;&amp;x) __TBB_NOEXCEPT(true) <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&amp;x) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a7646cb0b0cc070a6dd962afbaaec3ec8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a9b8a2643aa337c0ec7f68cc2797a10ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9b8a2643aa337c0ec7f68cc2797a10ba\"></a>\nvoid __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>move_v3</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t2)</td></tr>\n<tr class=\"separator:a9b8a2643aa337c0ec7f68cc2797a10ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a190e47ee761e8647e79cdd3cccff618c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a190e47ee761e8647e79cdd3cccff618c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::swap</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t2) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a190e47ee761e8647e79cdd3cccff618c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Versioned thread class. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a23d7a420709b2e2b29b42dea897bd8bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static unsigned __TBB_EXPORTED_FUNC tbb::internal::tbb_thread_v3::hardware_concurrency </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>The number of hardware thread contexts. </p>\n<p>Before TBB 3.0 U4 this methods returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>\n<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00172.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::thread_bound_filter Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00305.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::thread_bound_filter Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A stage in a pipeline served by a user thread.  \n <a href=\"a00172.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::thread_bound_filter:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00172.png\" usemap=\"#tbb::thread_bound_filter_map\" alt=\"\"/>\n  <map id=\"tbb::thread_bound_filter_map\" name=\"tbb::thread_bound_filter_map\">\n<area href=\"a00074.html\" title=\"A stage in a pipeline. \" alt=\"tbb::filter\" shape=\"rect\" coords=\"0,56,145,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2425d6944a22a57c906945df57290e9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>result_type</b> { <b>success</b>, \n<b>item_not_available</b>, \n<b>end_of_stream</b>\n }</td></tr>\n<tr class=\"separator:a2425d6944a22a57c906945df57290e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">result_type __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">try_process_item</a> ()</td></tr>\n<tr class=\"memdesc:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If a data item is available, invoke operator() on that item.  <a href=\"#a12cfa43c620066a8783529cc8519c6f9\">More...</a><br/></td></tr>\n<tr class=\"separator:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac99258407f382d84568a510075074fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">result_type __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">process_item</a> ()</td></tr>\n<tr class=\"memdesc:ac99258407f382d84568a510075074fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wait until a data item becomes available, and invoke operator() on that item.  <a href=\"#ac99258407f382d84568a510075074fc7\">More...</a><br/></td></tr>\n<tr class=\"separator:ac99258407f382d84568a510075074fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a5f236956f85f28c783127c949e902610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f236956f85f28c783127c949e902610\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_bound_filter</b> (mode filter_mode)</td></tr>\n<tr class=\"separator:a5f236956f85f28c783127c949e902610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_static_attribs_a00074\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_static_attribs_a00074')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Protected Attributes inherited from <a class=\"el\" href=\"a00074.html\">tbb::filter</a></td></tr>\n<tr class=\"memitem:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9dab2e01b0963b341ab04b59eec1475\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a> = 0x1</td></tr>\n<tr class=\"memdesc:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>\n<tr class=\"separator:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a> = 0x1&lt;&lt;4</td></tr>\n<tr class=\"memdesc:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4th bit distinguishes ordered vs unordered filters.  <a href=\"#a091fcf6abc79edfa5c8bf01f742e2392\">More...</a><br/></td></tr>\n<tr class=\"separator:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1382f216bd094064a18eb48ecc43c86b\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a> = 0x1&lt;&lt;5</td></tr>\n<tr class=\"memdesc:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>\n<tr class=\"separator:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6645ec56872b6ba2056dcaa467e292f7\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a> = 0x1&lt;&lt;6</td></tr>\n<tr class=\"memdesc:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">6th bit marks input filters emitting small objects <br/></td></tr>\n<tr class=\"separator:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td></tr>\n<tr class=\"memdesc:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">7th bit defines exception propagation mode expected by the application.  <a href=\"#aab9689e23a96c6c9bf1c8caae74d92ee\">More...</a><br/></td></tr>\n<tr class=\"separator:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A stage in a pipeline served by a user thread. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ac99258407f382d84568a510075074fc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Wait until a data item becomes available, and invoke operator() on that item. </p>\n<p>This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a12cfa43c620066a8783529cc8519c6f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>If a data item is available, invoke operator() on that item. </p>\n<p>This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00173.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_0&lt; F &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00424.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_0&lt; F &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_0&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00173.png\" usemap=\"#tbb::internal::thread_closure_0&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_0&lt; F &gt;_map\" name=\"tbb::internal::thread_closure_0&lt; F &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,214,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a538aa9db5b40cf64cdafc0af0649a7f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a538aa9db5b40cf64cdafc0af0649a7f2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_0</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a538aa9db5b40cf64cdafc0af0649a7f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b9e7370103f473212ccb10e65d676fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b9e7370103f473212ccb10e65d676fb\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>start_routine</b> (void *c)</td></tr>\n<tr class=\"separator:a4b9e7370103f473212ccb10e65d676fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:aff55f3266cccfbb2d296aa9b07239ce8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff55f3266cccfbb2d296aa9b07239ce8\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:aff55f3266cccfbb2d296aa9b07239ce8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00174.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_1&lt; F, X &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00425.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_1&lt; F, X &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Structure used to pass user function with 1 argument to thread.  \n <a href=\"a00174.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_thread.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_1&lt; F, X &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00174.png\" usemap=\"#tbb::internal::thread_closure_1&lt; F, X &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_1&lt; F, X &gt;_map\" name=\"tbb::internal::thread_closure_1&lt; F, X &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,232,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afef38584bcf65f3f71700cfec80b8b18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afef38584bcf65f3f71700cfec80b8b18\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_1</b> (const F &amp;f, const X &amp;x)</td></tr>\n<tr class=\"separator:afef38584bcf65f3f71700cfec80b8b18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a33d533b3301c45708c6252d040f855a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a33d533b3301c45708c6252d040f855a6\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">start_routine</a> (void *c)</td></tr>\n<tr class=\"memdesc:a33d533b3301c45708c6252d040f855a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>\n<tr class=\"separator:a33d533b3301c45708c6252d040f855a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a39a5a39b2a7513868944ffe7ffd89640\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39a5a39b2a7513868944ffe7ffd89640\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:a39a5a39b2a7513868944ffe7ffd89640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a607886c68ca8bdd984b9b4f6ec744dea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a607886c68ca8bdd984b9b4f6ec744dea\"></a>\nX&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg1</b></td></tr>\n<tr class=\"separator:a607886c68ca8bdd984b9b4f6ec744dea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;class F, class X&gt;<br/>\nstruct tbb::internal::thread_closure_1&lt; F, X &gt;</h3>\n\n<p>Structure used to pass user function with 1 argument to thread. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00175.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_2&lt; F, X, Y &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00426.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_2&lt; F, X, Y &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_2&lt; F, X, Y &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00175.png\" usemap=\"#tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\" name=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,250,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa5f65ba1d019063487f425021ca2ba59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa5f65ba1d019063487f425021ca2ba59\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_2</b> (const F &amp;f, const X &amp;x, const Y &amp;y)</td></tr>\n<tr class=\"separator:aa5f65ba1d019063487f425021ca2ba59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a29003179f98d768622c72b9ab5cfe8f6\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">start_routine</a> (void *c)</td></tr>\n<tr class=\"memdesc:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>\n<tr class=\"separator:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a247bf0a01f8a390031b71c9b85fb8b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a247bf0a01f8a390031b71c9b85fb8b24\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:a247bf0a01f8a390031b71c9b85fb8b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36f694b6dcc91c92b09d3deee24e4732\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a36f694b6dcc91c92b09d3deee24e4732\"></a>\nX&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg1</b></td></tr>\n<tr class=\"separator:a36f694b6dcc91c92b09d3deee24e4732\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47f0e53fc6b9026d9529a3bf1cc4fa72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47f0e53fc6b9026d9529a3bf1cc4fa72\"></a>\nY&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg2</b></td></tr>\n<tr class=\"separator:a47f0e53fc6b9026d9529a3bf1cc4fa72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00176.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_base Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00423.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_base Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00176.png\" usemap=\"#tbb::internal::thread_closure_base_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_base_map\" name=\"tbb::internal::thread_closure_base_map\">\n<area href=\"a00173.html\" alt=\"tbb::internal::thread_closure_0&lt; F &gt;\" shape=\"rect\" coords=\"0,56,250,80\"/>\n<area href=\"a00174.html\" title=\"Structure used to pass user function with 1 argument to thread. \" alt=\"tbb::internal::thread_closure_1&lt; F, X &gt;\" shape=\"rect\" coords=\"260,56,510,80\"/>\n<area href=\"a00175.html\" alt=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;\" shape=\"rect\" coords=\"520,56,770,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00177.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tick_count Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00341.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00275.html\">Timing</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Absolute timestamp.  \n <a href=\"a00177.html#details\">More...</a></p>\n\n<p><code>#include &lt;tick_count.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html\">interval_t</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Relative time interval.  <a href=\"a00087.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f1daa0b7a4feb800f802b4be1f1e497\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tick_count</a> ()</td></tr>\n<tr class=\"memdesc:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct an absolute timestamp initialized to zero. <br/></td></tr>\n<tr class=\"separator:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a74dcecde7431ff4591d7c46fc1d50d7e\"></a>\nstatic <a class=\"el\" href=\"a00177.html\">tick_count</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">now</a> ()</td></tr>\n<tr class=\"memdesc:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return current time. <br/></td></tr>\n<tr class=\"separator:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf6a0d91e7d40f7d68e0ad6b79350e58\"></a>\nstatic double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">resolution</a> ()</td></tr>\n<tr class=\"memdesc:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the resolution of the clock in seconds per tick. <br/></td></tr>\n<tr class=\"separator:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5ceaed3ebf5a0d41088a5bc7c8dc653\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtract two timestamps to get the time interval between. <br/></td></tr>\n<tr class=\"separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Absolute timestamp. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tick_count.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00178.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::untyped_receiver Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00368.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_receiver Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::internal::untyped_receiver:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00178.png\" usemap=\"#tbb::flow::interface10::internal::untyped_receiver_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::internal::untyped_receiver_map\" name=\"tbb::flow::interface10::internal::untyped_receiver_map\">\n<area href=\"a00133.html\" alt=\"tbb::flow::interface10::receiver&lt; continue_msg &gt;\" shape=\"rect\" coords=\"0,56,283,80\"/>\n<area href=\"a00133.html\" title=\"Pure virtual template class that defines a receiver of messages of type T. \" alt=\"tbb::flow::interface10::receiver&lt; T &gt;\" shape=\"rect\" coords=\"293,56,576,80\"/>\n<area href=\"a00063.html\" title=\"Base class for receivers of completion messages. \" alt=\"tbb::flow::interface10::continue_receiver\" shape=\"rect\" coords=\"0,112,283,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa804e9e4040859e05989e2297d2e7216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa804e9e4040859e05989e2297d2e7216\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:aa804e9e4040859e05989e2297d2e7216\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a predecessor to the node. <br/></td></tr>\n<tr class=\"separator:aa804e9e4040859e05989e2297d2e7216\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03e9c0578f5724dd82381777d3c6c799\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove a predecessor from the node. <br/></td></tr>\n<tr class=\"separator:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae8e692b6c073ec3407745a76f08abf43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae8e692b6c073ec3407745a76f08abf43\"></a>\nvirtual <a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> ()=0</td></tr>\n<tr class=\"separator:ae8e692b6c073ec3407745a76f08abf43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98fe810713f2bc391a1e4c038f4938df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98fe810713f2bc391a1e4c038f4938df\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a98fe810713f2bc391a1e4c038f4938df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25edabe194adb185ab2ceb9fce15f5c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25edabe194adb185ab2ceb9fce15f5c4\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a25edabe194adb185ab2ceb9fce15f5c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe633b68d3d89bcddaeb46e5311c1b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe633b68d3d89bcddaeb46e5311c1b1\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:a2fe633b68d3d89bcddaeb46e5311c1b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb29301785c66fb791427e2c7a40b47d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb29301785c66fb791427e2c7a40b47d\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> ()=0</td></tr>\n<tr class=\"separator:aeb29301785c66fb791427e2c7a40b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:add6c382a09c52cc1532caf73424ac4f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add6c382a09c52cc1532caf73424ac4f3\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:add6c382a09c52cc1532caf73424ac4f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4810a50f43ffde5761636ef40ad599eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4810a50f43ffde5761636ef40ad599eb\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:a4810a50f43ffde5761636ef40ad599eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a721fc420f0483e9c6b2d6fbad4ba5b20\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>\n<tr class=\"memdesc:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac560b27968e570096bdcc79a9ddf0aa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac560b27968e570096bdcc79a9ddf0aa2\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> ()</td></tr>\n<tr class=\"separator:ac560b27968e570096bdcc79a9ddf0aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_put_task</b></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>limiter_node</b></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af80b784f4606fcda66eb0059fdf6af07\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>proxy_dependency_receiver</b></td></tr>\n<tr class=\"separator:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00179.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::untyped_sender Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00367.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_sender Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::internal::untyped_sender:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00179.png\" usemap=\"#tbb::flow::interface10::internal::untyped_sender_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::internal::untyped_sender_map\" name=\"tbb::flow::interface10::internal::untyped_sender_map\">\n<area href=\"a00153.html\" title=\"Forward declaration section. \" alt=\"tbb::flow::interface10::sender&lt; T &gt;\" shape=\"rect\" coords=\"0,56,273,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:abaf68da3fb70e918f608d49d19d21861\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abaf68da3fb70e918f608d49d19d21861\"></a>\ntypedef <a class=\"el\" href=\"a00178.html\">untyped_receiver</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a></td></tr>\n<tr class=\"memdesc:abaf68da3fb70e918f608d49d19d21861\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:abaf68da3fb70e918f608d49d19d21861\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa17d0e3c683db8ee91589546f00e74d3\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf9e1bebbdb2359b70e651d375f49be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf9e1bebbdb2359b70e651d375f49be\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:a5cf9e1bebbdb2359b70e651d375f49be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac741e0b13af8918175b46e5b2aa0de06\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">register_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a new successor to this node. <br/></td></tr>\n<tr class=\"separator:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63f227b9cb89c86d9ab42c2c7f541321\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">remove_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Removes a successor from this node. <br/></td></tr>\n<tr class=\"separator:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7993fddebe9e449b8e71c4f7d402134d\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">try_release</a> ()</td></tr>\n<tr class=\"memdesc:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the reserved item. <br/></td></tr>\n<tr class=\"separator:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1339d605facfdeccbeb3486a6ed4bb28\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">try_consume</a> ()</td></tr>\n<tr class=\"memdesc:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Consumes the reserved item. <br/></td></tr>\n<tr class=\"separator:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a181d18c32dd12c8ee24f8b2d94a9ccbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a181d18c32dd12c8ee24f8b2d94a9ccbb\"></a>\nvirtual <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_successors</b> ()=0</td></tr>\n<tr class=\"separator:a181d18c32dd12c8ee24f8b2d94a9ccbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27ecc8dacffa726d87f8164acfbad34c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a27ecc8dacffa726d87f8164acfbad34c\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a27ecc8dacffa726d87f8164acfbad34c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f814545565252971e13ff957f179085\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f814545565252971e13ff957f179085\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a1f814545565252971e13ff957f179085\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeca51c7f32d3d8a95e01c7dee3bbbaf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeca51c7f32d3d8a95e01c7dee3bbbaf0\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_successors</b> (successor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:aeca51c7f32d3d8a95e01c7dee3bbbaf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3f082345d5b1f7109883a769f7cc9974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3f082345d5b1f7109883a769f7cc9974\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_count</b> ()=0</td></tr>\n<tr class=\"separator:a3f082345d5b1f7109883a769f7cc9974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a41064c305f60fb0431b914573b070615\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:a41064c305f60fb0431b914573b070615\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a41064c305f60fb0431b914573b070615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac92c0a8321811fe2a76310f423b7c2ef\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba6fcef2dff001f31b6a6296f4f5c16f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba6fcef2dff001f31b6a6296f4f5c16f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_get_wrapper</b> (void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:aba6fcef2dff001f31b6a6296f4f5c16f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa139dba68fa499db956741fd3b811f6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa139dba68fa499db956741fd3b811f6c\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_reserve_wrapper</b> (void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:aa139dba68fa499db956741fd3b811f6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3cdf409b9c27b036b9cb0fd9ae00a4a8\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::predecessor_cache</b></td></tr>\n<tr class=\"separator:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3175bd06b97cbe15f7135fa6e0960d19\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::reservable_predecessor_cache</b></td></tr>\n<tr class=\"separator:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00180.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00393.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25d9b19a018725ea8696ac4124a1780b\"></a>\ntypedef tbb::internal::true_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25d9b19a018725ea8696ac4124a1780b\"></a>\ntypedef tbb::internal::true_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00181.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor< T, false ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00394.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9e9ba0ae863e93a1e02e6a98d5ad4865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9e9ba0ae863e93a1e02e6a98d5ad4865\"></a>\ntypedef tbb::internal::false_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a9e9ba0ae863e93a1e02e6a98d5ad4865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00182.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::user_abort Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00182.html\">user_abort</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00335.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::user_abort Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for user-initiated abort.  \n <a href=\"a00182.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::user_abort:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00182.png\" usemap=\"#tbb::user_abort_map\" alt=\"\"/>\n  <map id=\"tbb::user_abort_map\" name=\"tbb::user_abort_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c748ebe62fc8bff1e194adcb21c5a8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c748ebe62fc8bff1e194adcb21c5a8a\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a1c748ebe62fc8bff1e194adcb21c5a8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for user-initiated abort. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00183.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00329.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00183.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::zero_allocator&lt; T, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00183.png\" usemap=\"#tbb::zero_allocator&lt; T, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::zero_allocator&lt; T, Allocator &gt;_map\" name=\"tbb::zero_allocator&lt; T, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00129.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a62f27899a40c4bfaa6ba4313ffc833ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a62f27899a40c4bfaa6ba4313ffc833ef\"></a>\ntypedef Allocator&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>base_allocator_type</b></td></tr>\n<tr class=\"separator:a62f27899a40c4bfaa6ba4313ffc833ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a906f5c2d47fff1bf4fd868a2441752d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a906f5c2d47fff1bf4fd868a2441752d1\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a906f5c2d47fff1bf4fd868a2441752d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb9458462ffca5d8734968862c9c4e6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb9458462ffca5d8734968862c9c4e6b\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:afb9458462ffca5d8734968862c9c4e6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2a08548bf83e153b40029de72738b60f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a08548bf83e153b40029de72738b60f\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a2a08548bf83e153b40029de72738b60f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0afb88e128fc595c62f24e34f445d834\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0afb88e128fc595c62f24e34f445d834\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a0afb88e128fc595c62f24e34f445d834\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28180fc12dc69c275983f6400526ba01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28180fc12dc69c275983f6400526ba01\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a28180fc12dc69c275983f6400526ba01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e741b3db82dfdce3f68cfd6d66901ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8e741b3db82dfdce3f68cfd6d66901ce\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a8e741b3db82dfdce3f68cfd6d66901ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba68dc670e813a0c5c7f06e262b66187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba68dc670e813a0c5c7f06e262b66187\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:aba68dc670e813a0c5c7f06e262b66187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9080a874dd20d0ca8e404683113990f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9080a874dd20d0ca8e404683113990f2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>zero_allocator</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a> &amp;a)  throw ()</td></tr>\n<tr class=\"separator:a9080a874dd20d0ca8e404683113990f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab417c217e597c6f412c5a630ba18bc32\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>zero_allocator</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U &gt; &amp;a)  throw ()</td></tr>\n<tr class=\"separator:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b9fe1273c2332e3c0b571d7bf1ba615\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b9fe1273c2332e3c0b571d7bf1ba615\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>\n<tr class=\"separator:a1b9fe1273c2332e3c0b571d7bf1ba615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, template&lt; typename X &gt; class Allocator = tbb_allocator&gt;<br/>\nclass tbb::zero_allocator&lt; T, Allocator &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00184.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00331.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00184.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::zero_allocator&lt; void, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00184.png\" usemap=\"#tbb::zero_allocator&lt; void, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::zero_allocator&lt; void, Allocator &gt;_map\" name=\"tbb::zero_allocator&lt; void, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00130.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad760fbbdefc95c096c94521316e9e091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad760fbbdefc95c096c94521316e9e091\"></a>\ntypedef Allocator&lt; void &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>base_allocator_type</b></td></tr>\n<tr class=\"separator:ad760fbbdefc95c096c94521316e9e091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a392c9d2f51594e7372e5e73e4bf805ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a392c9d2f51594e7372e5e73e4bf805ff\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a392c9d2f51594e7372e5e73e4bf805ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6c02215a540d3f5dd4cb4739bd05bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6c02215a540d3f5dd4cb4739bd05bcf\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:aa6c02215a540d3f5dd4cb4739bd05bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f2fa4e1a995d60f763595ef4b91dd9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f2fa4e1a995d60f763595ef4b91dd9a\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a0f2fa4e1a995d60f763595ef4b91dd9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;template&lt; typename T &gt; class Allocator&gt;<br/>\nclass tbb::zero_allocator&lt; void, Allocator &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00203.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>flow_graph.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">flow_graph.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The graph related classes and functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">tbb::flow::interface10::null_type</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A generic null type.  <a href=\"a00101.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">tbb::flow::interface10::continue_msg</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">An empty class used for messages that mean \"I'm done\".  <a href=\"a00062.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00090.html\">tbb::flow::interface10::limiter_node&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00138.html\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00157.html\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00039.html\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00136.html\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00025.html\">tbb::flow::interface10::async_msg&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">tbb::flow::interface10::internal::async_storage&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Base class for receivers of completion messages.  <a href=\"a00063.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrency</b> { <b>unlimited</b> = 0, \n<b>serial</b> = 1\n }</td></tr>\n<tr class=\"memdesc:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br/></td></tr>\n<tr class=\"separator:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a69076d97267af5d3009b43a8edad1342\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69076d97267af5d3009b43a8edad1342\"></a>\nstatic tbb::task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::flow::interface10::combine_tasks</b> (graph &amp;g, tbb::task *left, tbb::task *right)</td></tr>\n<tr class=\"separator:a69076d97267af5d3009b43a8edad1342\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a44f9db9a75974b985b424a8e3a06c1cc\"></a>\ntemplate&lt;typename K , typename T &gt; </td></tr>\n<tr class=\"memitem:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">K&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::flow::key_from_message</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The graph related classes and functions. </p>\n<p>There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applications. </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00208.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>memory_pool.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">memory_pool.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00092.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00093.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-safe growable pool allocator for variable-size requests.  <a href=\"a00091.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a21dc513d4407872bb3b257870c6d77b2\"></a>\ntemplate&lt;typename T , typename U , typename P &gt; </td></tr>\n<tr class=\"memitem:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::interface6::operator==</b> (const memory_pool_allocator&lt; T, P &gt; &amp;a, const memory_pool_allocator&lt; U, P &gt; &amp;b)</td></tr>\n<tr class=\"separator:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aed6a6d87d04444c2619b6f0136ab0702\"></a>\ntemplate&lt;typename T , typename U , typename P &gt; </td></tr>\n<tr class=\"memitem:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator&lt; T, P &gt; &amp;a, const memory_pool_allocator&lt; U, P &gt; &amp;b)</td></tr>\n<tr class=\"separator:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00227.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>scalable_allocator.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalable_allocator.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00246\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html\">rml</a></td></tr>\n<tr class=\"memdesc:a00246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae13d09a0a00d9cae537655207c8560a2\"></a>\ntypedef void *(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::rawAllocType</b> )(intptr_t pool_id, size_t &amp;bytes)</td></tr>\n<tr class=\"separator:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a44f982f3478d462e81a1300dd516cb8e\"></a>\ntypedef int(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>\n<tr class=\"separator:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:abd5aafe33a307bbbe334f0049e625cd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ScalableAllocationResult</b> { <br/>\n&#160;&#160;<b>TBBMALLOC_OK</b>, \n<b>TBBMALLOC_INVALID_PARAM</b>, \n<b>TBBMALLOC_UNSUPPORTED</b>, \n<b>TBBMALLOC_NO_MEMORY</b>, \n<br/>\n&#160;&#160;<b>TBBMALLOC_NO_EFFECT</b>\n<br/>\n }</td></tr>\n<tr class=\"separator:abd5aafe33a307bbbe334f0049e625cd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75085058c147f85d8897858363b6e99c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>AllocationModeParam</b> { <b>TBBMALLOC_USE_HUGE_PAGES</b>, \n<b>USE_HUGE_PAGES</b> = TBBMALLOC_USE_HUGE_PAGES, \n<b>TBBMALLOC_SET_SOFT_HEAP_LIMIT</b>\n }</td></tr>\n<tr class=\"separator:a75085058c147f85d8897858363b6e99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57dd71201713941030ef626baa8fa0eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ScalableAllocationCmd</b> { <b>TBBMALLOC_CLEAN_ALL_BUFFERS</b>, \n<b>TBBMALLOC_CLEAN_THREAD_BUFFERS</b>\n }</td></tr>\n<tr class=\"separator:a57dd71201713941030ef626baa8fa0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolError</b> { <br/>\n&#160;&#160;<b>POOL_OK</b> = TBBMALLOC_OK, \n<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, \n<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, \n<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, \n<br/>\n&#160;&#160;<b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT\n<br/>\n }</td></tr>\n<tr class=\"separator:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_malloc</a> (size_t size)</td></tr>\n<tr class=\"separator:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_realloc</a> (void *ptr, size_t size)</td></tr>\n<tr class=\"separator:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>\n<tr class=\"separator:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>\n<tr class=\"separator:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_aligned_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_msize</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>\n<tr class=\"separator:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocation_command</a> (int cmd, void *param)</td></tr>\n<tr class=\"separator:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a152cad3c009030ad9364bc1f3ff0c648\"></a>\nMemPoolError&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>\n<tr class=\"separator:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19a32c0a2ff3a0d8c3eeba0ac894f887\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e8b6e757a521a8f2a186b8577aefb98\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>\n<tr class=\"separator:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af9ac1381bacb2cbe1f4bca08e99dd2ee\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>\n<tr class=\"separator:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ac1e82af435d8bef5f7c21506c5f831\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61700754fe0ba9d761fab34ad51e3bc2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a06eff2efabb77248f880b86eecc08c6e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</td></tr>\n<tr class=\"separator:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab747521ef3669775b3310f5bc541919c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab747521ef3669775b3310f5bc541919c\"></a>\nMemoryPool *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_identify</b> (void *object)</td></tr>\n<tr class=\"separator:ab747521ef3669775b3310f5bc541919c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a17323bcd620e6e3e4091e2e5568f97d3\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::operator==</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af3fb987bb18adf8384db9c9713b81588\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::operator!=</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00246.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>rml Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rml Namespace Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The namespace rml contains components of low-level memory pool interface.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae13d09a0a00d9cae537655207c8560a2\"></a>\ntypedef void *(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rawAllocType</b> )(intptr_t pool_id, size_t &amp;bytes)</td></tr>\n<tr class=\"separator:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a44f982f3478d462e81a1300dd516cb8e\"></a>\ntypedef int(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>\n<tr class=\"separator:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolError</b> { <br/>\n&#160;&#160;<b>POOL_OK</b> = TBBMALLOC_OK, \n<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, \n<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, \n<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, \n<br/>\n&#160;&#160;<b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT\n<br/>\n }</td></tr>\n<tr class=\"separator:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a152cad3c009030ad9364bc1f3ff0c648\"></a>\nMemPoolError&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_create_v1</b> (intptr_t pool_id, const <a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a> *policy, rml::MemoryPool **pool)</td></tr>\n<tr class=\"separator:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19a32c0a2ff3a0d8c3eeba0ac894f887\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_destroy</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e8b6e757a521a8f2a186b8577aefb98\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>\n<tr class=\"separator:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af9ac1381bacb2cbe1f4bca08e99dd2ee\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>\n<tr class=\"separator:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ac1e82af435d8bef5f7c21506c5f831\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61700754fe0ba9d761fab34ad51e3bc2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_reset</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a06eff2efabb77248f880b86eecc08c6e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_free</b> (MemoryPool *memPool, void *object)</td></tr>\n<tr class=\"separator:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab747521ef3669775b3310f5bc541919c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab747521ef3669775b3310f5bc541919c\"></a>\nMemoryPool *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_identify</b> (void *object)</td></tr>\n<tr class=\"separator:ab747521ef3669775b3310f5bc541919c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The namespace rml contains components of low-level memory pool interface. </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00249.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Namespace Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The graph class.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Block of space aligned sufficiently to construct an array T with N elements.  <a href=\"a00022.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">atomic</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Primary template for atomic.  <a href=\"a00027.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00028.html\">atomic&lt; void * &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  <a href=\"a00028.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A range over which to iterate.  <a href=\"a00034.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 2-dimensional range that models the Range concept.  <a href=\"a00035.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 3-dimensional range that models the Range concept.  <a href=\"a00036.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00041.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00042.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">combinable</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-local storage with optional reduction.  <a href=\"a00047.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe blocking concurrent bounded queue.  <a href=\"a00049.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Concurrent vector container.  <a href=\"a00060.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrapper around the platform's native lock.  <a href=\"a00097.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A mutex which does nothing.  <a href=\"a00099.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A rw mutex which does nothing.  <a href=\"a00100.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the initial scan is being performed.  <a href=\"a00118.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the final scan is being performed.  <a href=\"a00076.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over a stream, with optional addition of more work.  <a href=\"a00116.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline.  <a href=\"a00074.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline served by a user thread.  <a href=\"a00172.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">pipeline</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A processing pipeline that applies filters to items.  <a href=\"a00117.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing mutex with local-only spinning.  <a href=\"a00120.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing reader-writer mutex with local-only spinning.  <a href=\"a00121.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mutex that allows recursive mutex acquisition.  <a href=\"a00135.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A lock that occupies a single byte.  <a href=\"a00154.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href=\"a00155.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00162.html\">task_handle</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00159.html\">task_group</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class delimiting the scope of task scheduler activity.  <a href=\"a00164.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00167.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">tbb_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00168.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00183.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">zero_allocator&lt; void, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00184.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for concurrent containers.  <a href=\"a00030.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for PPL locks.  <a href=\"a00086.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">user_abort</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for user-initiated abort.  <a href=\"a00182.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>.  <a href=\"a00095.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>.  <a href=\"a00088.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  <a href=\"a00169.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This class is used by TBB to propagate information about unhandled exceptions into the root thread.  <a href=\"a00046.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  <a href=\"a00096.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">tick_count</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Absolute timestamp.  <a href=\"a00177.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abd2b5f25b51182dd2826ecd4d46d98a9\"></a>\ntemplate&lt;typename Value , unsigned int N&gt; </td></tr>\n<tr class=\"memitem:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_rangeNd</b> = <a class=\"el\" href=\"a00037.html\">internal::blocked_rangeNd_impl</a>&lt; Value, N &gt;</td></tr>\n<tr class=\"separator:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a889d8f126388fdc24c597d195a4d7028\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a889d8f126388fdc24c597d195a4d7028\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00064.html\">internal::critical_section_v4</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>critical_section</b></td></tr>\n<tr class=\"separator:a889d8f126388fdc24c597d195a4d7028\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; interface7::internal::x86_eliding_mutex, <br class=\"typebreak\"/>\nfalse &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">speculative_spin_mutex</a></td></tr>\n<tr class=\"memdesc:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin mutex with speculative lock acquisition.  <a href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cc3d02744cab8ac389919806d47e417\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cc3d02744cab8ac389919806d47e417\"></a>\ntypedef <a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_rw_mutex</b></td></tr>\n<tr class=\"separator:a6cc3d02744cab8ac389919806d47e417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a268320974a3357e9609a2f98be5090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a268320974a3357e9609a2f98be5090\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>stack_size_type</b></td></tr>\n<tr class=\"separator:a1a268320974a3357e9609a2f98be5090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af58de4ab3200dd2bd621f052c6f677e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af58de4ab3200dd2bd621f052c6f677e4\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_observer</b></td></tr>\n<tr class=\"separator:af58de4ab3200dd2bd621f052c6f677e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7805ca254302ff88b566f7dcde7e56b0\"></a>\ntypedef <a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a></td></tr>\n<tr class=\"memdesc:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Users reference thread class by name tbb_thread. <br/></td></tr>\n<tr class=\"separator:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">memory_semantics</a> { <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">full_fence</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">acquire</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">release</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">relaxed</a>\n }</td></tr>\n<tr class=\"memdesc:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specifies memory semantics.  <a href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">More...</a><br/></td></tr>\n<tr class=\"separator:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, \n<b>ets_no_key</b>\n }</td></tr>\n<tr class=\"memdesc:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">enum for selecting between single key and key-per-instance versions <br/></td></tr>\n<tr class=\"separator:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4454db821441ca68bad263d82c40fb7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_status</b> { <b>not_complete</b>, \n<b>complete</b>, \n<b>canceled</b>\n }</td></tr>\n<tr class=\"separator:a4454db821441ca68bad263d82c40fb7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a5fefe7ed201b920d3fd6c390849c1ccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fefe7ed201b920d3fd6c390849c1ccf\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">__TBB_DECL_ATOMIC_ALT</a>(unsigned</td></tr>\n<tr class=\"separator:a5fefe7ed201b920d3fd6c390849c1ccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59425abdcb421136e9f5954cfb975e5f\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">__TBB_DECL_ATOMIC_ALT</a> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template&lt; typename T &gt; struct <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T * &gt;</td></tr>\n<tr class=\"memdesc:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specialization for atomic&lt;T*&gt; with arithmetic and operator-&gt;. <br/></td></tr>\n<tr class=\"separator:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aed82c77b389b208a1c27012a2fc0b5fd\"></a>\ntemplate&lt;memory_semantics M, typename T &gt; </td></tr>\n<tr class=\"memitem:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>load</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;a)</td></tr>\n<tr class=\"separator:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a219b97248f55c909aa3d84e43934b105\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a219b97248f55c909aa3d84e43934b105\"></a>\ntemplate&lt;memory_semantics M, typename T &gt; </td></tr>\n<tr class=\"memitem:a219b97248f55c909aa3d84e43934b105\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>store</b> (<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;a, T value)</td></tr>\n<tr class=\"separator:a219b97248f55c909aa3d84e43934b105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a49a6826cf4fb8845d26d8d1f1ad0b5fa\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afdaaf3f3248efc804c6f6fe35855704d\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1db9470dd2871cb7394ab262dca2051a\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A1 , typename A2 &gt; </td></tr>\n<tr class=\"memitem:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05667bcb12f763124fcda402d3720c6a\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A1 , typename A2 &gt; </td></tr>\n<tr class=\"memitem:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a16dc40ac2badc8b36b8cc70f92801b76\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </td></tr>\n<tr class=\"memitem:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>swap</b> (concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;a, concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;b)</td></tr>\n<tr class=\"separator:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a79ecee2d23f2486c03e720ab9e3ac36c\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab7258c4acabadf94d03dc62e29396ea0\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1523d0389a8cbda80c17ae4f45caa3a6\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78cfed58bfde865b68859beb54805019\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a78cfed58bfde865b68859beb54805019\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a78cfed58bfde865b68859beb54805019\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&gt;</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a78cfed58bfde865b68859beb54805019\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac6009f009cd331952d8944bcc9733375\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac6009f009cd331952d8944bcc9733375\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:ac6009f009cd331952d8944bcc9733375\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac6009f009cd331952d8944bcc9733375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa0d82e59919a1f2c7caa06d061b2480f\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&gt;=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4cd91084f08db8c2d23c6a0362e0c441\"></a>\ntemplate&lt;typename T , class A &gt; </td></tr>\n<tr class=\"memitem:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A &gt; &amp;a, <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A &gt; &amp;b)</td></tr>\n<tr class=\"separator:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a17323bcd620e6e3e4091e2e5568f97d3\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af3fb987bb18adf8384db9c9713b81588\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaef1698b222ba9312ab24dcdcd98bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaef1698b222ba9312ab24dcdcd98bbd8\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_current_task_group_canceling</b> ()</td></tr>\n<tr class=\"separator:aaef1698b222ba9312ab24dcdcd98bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef8de49be152674baa036585a6fdb3cd\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; typename <br class=\"typebreak\"/>\ninternal::strip&lt; F &gt;::type &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>make_task</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c291402bcc0ba9263cf08b76faf7a2c\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>make_task</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af1595d1bfc4f7be923c17b4ee5c556ae\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a82ff968904aaa1bb0e2152f590c47be6\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7bf465e2f6730e2cea0c9531bec9fb2f\"></a>\ntemplate&lt;typename T1 , template&lt; typename X1 &gt; class B1, typename T2 , template&lt; typename X2 &gt; class B2&gt; </td></tr>\n<tr class=\"memitem:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a606762cf7c614cb5a1631955938737cd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a606762cf7c614cb5a1631955938737cd\"></a>\ntemplate&lt;typename T1 , template&lt; typename X1 &gt; class B1, typename T2 , template&lt; typename X2 &gt; class B2&gt; </td></tr>\n<tr class=\"memitem:a606762cf7c614cb5a1631955938737cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a606762cf7c614cb5a1631955938737cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">TBB_runtime_interface_version</a> ()</td></tr>\n<tr class=\"memdesc:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The function returns the interface version of the TBB shared library being used.  <a href=\"#ade8a8bc300d5ef09d38cbfb8baff5cd2\">More...</a><br/></td></tr>\n<tr class=\"separator:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a467930903ce9b7c240c4ad8f0fb8ae3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a467930903ce9b7c240c4ad8f0fb8ae3d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a> &amp;t2) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a467930903ce9b7c240c4ad8f0fb8ae3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac41903d6b80e61bd6c605412e7820e08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac41903d6b80e61bd6c605412e7820e08\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>move</b> (<a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a> &amp;t1, <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a> &amp;t2)</td></tr>\n<tr class=\"separator:ac41903d6b80e61bd6c605412e7820e08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa037c1f149250d61cd2fad4541a5e6cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa037c1f149250d61cd2fad4541a5e6cb\"></a>\n<a class=\"el\" href=\"a00087.html\">tick_count::interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator-</b> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"separator:aa037c1f149250d61cd2fad4541a5e6cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_for</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00004.html\">parallel_for Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner.  <a href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner.  <a href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">More...</a><br/></td></tr>\n<tr class=\"separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad6c4b06f96ae33cefe78235841791902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner.  <a href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">More...</a><br/></td></tr>\n<tr class=\"separator:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner.  <a href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">More...</a><br/></td></tr>\n<tr class=\"separator:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner.  <a href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">parallel_for</a> (const Range &amp;range, const Body &amp;body, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga93a621202db94665144de38c0b09bdad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner and user-supplied context.  <a href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">More...</a><br/></td></tr>\n<tr class=\"separator:ga93a621202db94665144de38c0b09bdad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner and user-supplied context.  <a href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner and user-supplied context.  <a href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">More...</a><br/></td></tr>\n<tr class=\"separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_for_each</div></td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac9225af45fd0468843b3fc32608c71de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from [first, last) interval using user-supplied context.  <a href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">More...</a><br/></td></tr>\n<tr class=\"separator:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">parallel_for_each</a> (Range &amp;rng, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga72131543fd218b67dbb048b768d534e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from rng using user-supplied context.  <a href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">parallel_for_each</a> (const Range &amp;rng, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from const rng user-supplied context.  <a href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">More...</a><br/></td></tr>\n<tr class=\"separator:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga21c63dee10188196a2f0514afa81ff1f\"></a>\ntemplate&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga21c63dee10188196a2f0514afa81ff1f\">parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5868cd01f2126b139ab5809f64632db1\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5868cd01f2126b139ab5809f64632db1\">parallel_for_each</a> (Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b\">parallel_for_each</a> (const Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_invoke</div></td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F0 , typename F1 , typename... F&gt; </td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">parallel_invoke</a> (F0 &amp;&amp;f0, F1 &amp;&amp;f1, F &amp;&amp;...f)</td></tr>\n<tr class=\"memdesc:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga14459dcbcd631194df803b155a7f610b\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaaea3f3a8883128afb596a963e856277f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga74932e64ede5047387108fa45f1af96f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaefc1ba8f73cbdd094575f6db454fc6b5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga3f02dfbb94238b2cf2ef8f20844b03af\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad8c1220bbd59e3b8e7bbcdcfdda8047e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5ee83a66397ee0b15c77756cb5e5168e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1af92ebd06f6cdf5ee668b1fe62657bd\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga65846bc3b2f63ed1448b6cdfea9e1c80\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga6b1c36ece1d3950677dd01ef0863648c\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1)</td></tr>\n<tr class=\"separator:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa979656a4c207782b74800c6c42982f5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2)</td></tr>\n<tr class=\"separator:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga219cb8061b7cf5454c0bc4d67cff1e34\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3)</td></tr>\n<tr class=\"separator:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8319ee980cd7cfb03f12ffc2a5ea4895\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4)</td></tr>\n<tr class=\"separator:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga295daf6f7394fba29a979b914be09fc6\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5)</td></tr>\n<tr class=\"separator:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga7652a01622a2f28df1e0edf40b691190\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6)</td></tr>\n<tr class=\"separator:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gadd8826371866c58e41dee3546c35d2c8\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7)</td></tr>\n<tr class=\"separator:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaeca8b72507d67dd023dae728bdc89896\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8)</td></tr>\n<tr class=\"separator:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga17c9f95fac24b2b7b62f325f511ee7be\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9)</td></tr>\n<tr class=\"separator:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_reduce</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00006.html\">parallel_reduce Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">More...</a><br/></td></tr>\n<tr class=\"separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">More...</a><br/></td></tr>\n<tr class=\"separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">More...</a><br/></td></tr>\n<tr class=\"separator:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">More...</a><br/></td></tr>\n<tr class=\"separator:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">More...</a><br/></td></tr>\n<tr class=\"separator:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaa872944de4b5f753f74b874707bce379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa872944de4b5f753f74b874707bce379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">More...</a><br/></td></tr>\n<tr class=\"separator:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">More...</a><br/></td></tr>\n<tr class=\"separator:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf1c05004d0970bd199518f568779429a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1c05004d0970bd199518f568779429a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga24758356e0e29013807ab12127d06f7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_scan</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00010.html\">parallel_scan Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">More...</a><br/></td></tr>\n<tr class=\"separator:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join)</td></tr>\n<tr class=\"memdesc:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gadbc46558909fe3720e95a18241dda603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">More...</a><br/></td></tr>\n<tr class=\"separator:gadbc46558909fe3720e95a18241dda603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_sort</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00012.html\">iterators for parallel_sort</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator , typename Compare &gt; </td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) using the given comparator.  <a href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">More...</a><br/></td></tr>\n<tr class=\"separator:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator &gt; </td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>\n<tr class=\"memdesc:ga73b58ac9249f49587d0b081c152af551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">More...</a><br/></td></tr>\n<tr class=\"separator:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">parallel_sort</a> (Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng using the given comparator.  <a href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">More...</a><br/></td></tr>\n<tr class=\"separator:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">parallel_sort</a> (const Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga541b2fd91e88842a7b823161107779e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng using the given comparator.  <a href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">parallel_sort</a> (Range &amp;rng)</td></tr>\n<tr class=\"memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">parallel_sort</a> (const Range &amp;rng)</td></tr>\n<tr class=\"memdesc:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">parallel_sort</a> (T *begin, T *end)</td></tr>\n<tr class=\"memdesc:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>  <a href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The graph class. </p>\n<p>The namespace tbb contains all components of the library. </p>\n</div><h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb::memory_semantics</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Specifies memory semantics. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\"></a>full_fence</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Sequential consistency. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\"></a>acquire</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Acquire. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\"></a>release</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Release. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\"></a>relaxed</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No ordering. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ade8a8bc300d5ef09d38cbfb8baff5cd2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The function returns the interface version of the TBB shared library being used. </p>\n<p>The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00271.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Algorithms</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Algorithms</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A range over which to iterate.  <a href=\"a00034.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 2-dimensional range that models the Range concept.  <a href=\"a00035.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 3-dimensional range that models the Range concept.  <a href=\"a00036.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the initial scan is being performed.  <a href=\"a00118.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the final scan is being performed.  <a href=\"a00076.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over a stream, with optional addition of more work.  <a href=\"a00116.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline.  <a href=\"a00074.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline served by a user thread.  <a href=\"a00172.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A processing pipeline that applies filters to items.  <a href=\"a00117.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_for</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp020f371880777e82219a69f8a512e874\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00004.html\">parallel_for Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner.  <a href=\"#gaa8444c29dc4d2e527a1036717d109aef\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner.  <a href=\"#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">More...</a><br/></td></tr>\n<tr class=\"separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad6c4b06f96ae33cefe78235841791902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner.  <a href=\"#gad6c4b06f96ae33cefe78235841791902\">More...</a><br/></td></tr>\n<tr class=\"separator:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner.  <a href=\"#ga14ae8670bd55620f906aa06e073bd225\">More...</a><br/></td></tr>\n<tr class=\"separator:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner.  <a href=\"#gaf3d39e372d825bf54283b5ceafa90057\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga93a621202db94665144de38c0b09bdad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner and user-supplied context.  <a href=\"#ga93a621202db94665144de38c0b09bdad\">More...</a><br/></td></tr>\n<tr class=\"separator:ga93a621202db94665144de38c0b09bdad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner and user-supplied context.  <a href=\"#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href=\"#ga4c9935d8710a5cf786a92f3522ab2976\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner and user-supplied context.  <a href=\"#ga4bb3d8cf616632476ca923eb056ee07d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href=\"#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">More...</a><br/></td></tr>\n<tr class=\"separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_for_each</h2></td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac9225af45fd0468843b3fc32608c71de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from [first, last) interval using user-supplied context.  <a href=\"#gac9225af45fd0468843b3fc32608c71de\">More...</a><br/></td></tr>\n<tr class=\"separator:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">tbb::parallel_for_each</a> (Range &amp;rng, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga72131543fd218b67dbb048b768d534e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from rng using user-supplied context.  <a href=\"#ga72131543fd218b67dbb048b768d534e4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">tbb::parallel_for_each</a> (const Range &amp;rng, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from const rng user-supplied context.  <a href=\"#gad7d0702d16fbd7554584ab735eed39ba\">More...</a><br/></td></tr>\n<tr class=\"separator:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga21c63dee10188196a2f0514afa81ff1f\"></a>\ntemplate&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga21c63dee10188196a2f0514afa81ff1f\">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5868cd01f2126b139ab5809f64632db1\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5868cd01f2126b139ab5809f64632db1\">tbb::parallel_for_each</a> (Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b\">tbb::parallel_for_each</a> (const Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_invoke</h2></td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F0 , typename F1 , typename... F&gt; </td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb::parallel_invoke</a> (F0 &amp;&amp;f0, F1 &amp;&amp;f1, F &amp;&amp;...f)</td></tr>\n<tr class=\"memdesc:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href=\"#ga3c6fe4bf1076c82132e666fb545451cd\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga14459dcbcd631194df803b155a7f610b\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaaea3f3a8883128afb596a963e856277f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga74932e64ede5047387108fa45f1af96f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaefc1ba8f73cbdd094575f6db454fc6b5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga3f02dfbb94238b2cf2ef8f20844b03af\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad8c1220bbd59e3b8e7bbcdcfdda8047e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5ee83a66397ee0b15c77756cb5e5168e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1af92ebd06f6cdf5ee668b1fe62657bd\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga65846bc3b2f63ed1448b6cdfea9e1c80\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga6b1c36ece1d3950677dd01ef0863648c\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1)</td></tr>\n<tr class=\"separator:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa979656a4c207782b74800c6c42982f5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2)</td></tr>\n<tr class=\"separator:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga219cb8061b7cf5454c0bc4d67cff1e34\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3)</td></tr>\n<tr class=\"separator:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8319ee980cd7cfb03f12ffc2a5ea4895\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4)</td></tr>\n<tr class=\"separator:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga295daf6f7394fba29a979b914be09fc6\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5)</td></tr>\n<tr class=\"separator:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga7652a01622a2f28df1e0edf40b691190\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6)</td></tr>\n<tr class=\"separator:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gadd8826371866c58e41dee3546c35d2c8\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7)</td></tr>\n<tr class=\"separator:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaeca8b72507d67dd023dae728bdc89896\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8)</td></tr>\n<tr class=\"separator:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga17c9f95fac24b2b7b62f325f511ee7be\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9)</td></tr>\n<tr class=\"separator:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_reduce</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp949e4773fffd16cb2d32f76af48627d2\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00006.html\">parallel_reduce Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"#ga7b1ce9568e0a0efe1bd2d55677bc6687\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">More...</a><br/></td></tr>\n<tr class=\"separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"#ga3011e7266fb1e43d307060fe75be2c6e\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"#gaf15a4b0e2174dce3a12b70a89bbcdc63\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"#ga6e83e121490df24fa5893b14e68f5e2a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"#gac57281bea03450ccb2d098ee8c7ab697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"#ga5f3ebf50ab7f5e53fd936817c866f7be\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"#gaf049e6d185c38c2d9e153b0edd3a9015\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"#ga5df3f3a9618fd35931107819cb43fce6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"#ga1c9b66fa25cadee9ca3bff75a6609b05\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">More...</a><br/></td></tr>\n<tr class=\"separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"#ga56e6b6e2eee521f532c00d855280be69\">More...</a><br/></td></tr>\n<tr class=\"separator:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"#gac0d4eb5ab127b185a92720eff1136fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"#gac26c35d1983e7ac2ab003cc8e49dd7e6\">More...</a><br/></td></tr>\n<tr class=\"separator:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"#ga518ef2653004d60319bdfc1c6bce86b6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"#ga24ba50caf5a7c32cbd38912508cb69a4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"#ga1507205a91a8fd26bd7d9bbcb74ad98b\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"#ga367a8e77c4dac3f8764785afdc6c9299\">More...</a><br/></td></tr>\n<tr class=\"separator:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaa872944de4b5f753f74b874707bce379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"#gaa872944de4b5f753f74b874707bce379\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa872944de4b5f753f74b874707bce379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"#ga1b1907e38efdefdce193ff289e18e86a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"#ga361201f81b4ec7b86f81b579d2db647a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"#gadc5031d9c9fbab8160639f6ca1505cff\">More...</a><br/></td></tr>\n<tr class=\"separator:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"#ga8710b9baa5067e2391fca1026a5a2c03\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"#ga7f69e6a632acb51ed26a43ebd331f349\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"#gad9f444ac5712fe11053e9ce6b147640a\">More...</a><br/></td></tr>\n<tr class=\"separator:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf1c05004d0970bd199518f568779429a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"#gaf1c05004d0970bd199518f568779429a\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1c05004d0970bd199518f568779429a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"#ga69b4eea059a62cbbf409cbad02b70bfa\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga24758356e0e29013807ab12127d06f7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"#ga24758356e0e29013807ab12127d06f7d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"#gac3c66b6e36066e270e4d27ad41e33697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_scan</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrpea856f699c9d234ea9f5ed535b0b16bb\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00010.html\">parallel_scan Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"#gae7eaaf124471a6c603b28fc925e8fbbb\">More...</a><br/></td></tr>\n<tr class=\"separator:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"#ga7ddacf5e49f1bea9b67803f2d0f57531\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"#ga3548041731b7fa14f30f155541ceebb9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join)</td></tr>\n<tr class=\"memdesc:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"#ga7dd68a232bb3102788792fcf081a2ab6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gadbc46558909fe3720e95a18241dda603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"#gadbc46558909fe3720e95a18241dda603\">More...</a><br/></td></tr>\n<tr class=\"separator:gadbc46558909fe3720e95a18241dda603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"#ga6dda983975483bbc5dc95558c1ad3d88\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_sort</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp507087c4dcfb051fe7d24227c3a34024\"></a>See also requirements on <a class=\"el\" href=\"a00012.html\">iterators for parallel_sort</a>. </p>\n</td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator , typename Compare &gt; </td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) using the given comparator.  <a href=\"#gabdc90813499f91d3e32298cd6dc2fe45\">More...</a><br/></td></tr>\n<tr class=\"separator:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator &gt; </td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>\n<tr class=\"memdesc:ga73b58ac9249f49587d0b081c152af551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#ga73b58ac9249f49587d0b081c152af551\">More...</a><br/></td></tr>\n<tr class=\"separator:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">tbb::parallel_sort</a> (Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng using the given comparator.  <a href=\"#ga61ce8ba64868c5c15f9d98840193b9bf\">More...</a><br/></td></tr>\n<tr class=\"separator:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">tbb::parallel_sort</a> (const Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga541b2fd91e88842a7b823161107779e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng using the given comparator.  <a href=\"#ga541b2fd91e88842a7b823161107779e9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb::parallel_sort</a> (Range &amp;rng)</td></tr>\n<tr class=\"memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">tbb::parallel_sort</a> (const Range &amp;rng)</td></tr>\n<tr class=\"memdesc:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#ga60bbc3d7699f09618bd8b5114e4277cb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>\n<tr class=\"memdesc:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>  <a href=\"#ga8f176cdc232a6e5907456656a24983a8\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and default simple partitioner. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa872944de4b5f753f74b874707bce379\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b1907e38efdefdce193ff289e18e86a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and static partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga361201f81b4ec7b86f81b579d2db647a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc5031d9c9fbab8160639f6ca1505cff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8710b9baa5067e2391fca1026a5a2c03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, static partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f69e6a632acb51ed26a43ebd331f349\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and default simple partitioner. </p>\n<p>parallel_reduce overloads that work with anonymous function objects (see also <a class=\"el\" href=\"a00008.html\">requirements on parallel_reduce anonymous function objects</a>). </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9f444ac5712fe11053e9ce6b147640a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1c05004d0970bd199518f568779429a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and static partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga69b4eea059a62cbbf409cbad02b70bfa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24758356e0e29013807ab12127d06f7d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3c66b6e36066e270e4d27ad41e33697\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, static partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa8444c29dc4d2e527a1036717d109aef\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with default partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9722d2bc7e5edb4fae9f3b55268a1ecc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6c4b06f96ae33cefe78235841791902\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14ae8670bd55620f906aa06e073bd225\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3d39e372d825bf54283b5ceafa90057\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93a621202db94665144de38c0b09bdad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with default partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b7fab9d6ffe7a9345e9349a5a007bd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4c9935d8710a5cf786a92f3522ab2976\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bb3d8cf616632476ca923eb056ee07d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62b1a9ac304ba1eb4f87ab8cc18dd281\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9225af45fd0468843b3fc32608c71de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Iterator , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">Iterator&#160;</td>\n          <td class=\"paramname\"><em>first</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Iterator&#160;</td>\n          <td class=\"paramname\"><em>last</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from [first, last) interval using user-supplied context. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga72131543fd218b67dbb048b768d534e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from rng using user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7d0702d16fbd7554584ab735eed39ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from const rng user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c6fe4bf1076c82132e666fb545451cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F0 , typename F1 , typename... F&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_invoke </td>\n          <td>(</td>\n          <td class=\"paramtype\">F0 &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">F1 &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">F &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>f</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Executes a list of tasks in parallel and waits for all tasks to complete. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b1ce9568e0a0efe1bd2d55677bc6687\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and default partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebb92b593827f9c3f5e1f8ee2f7d5f82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3011e7266fb1e43d307060fe75be2c6e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf15a4b0e2174dce3a12b70a89bbcdc63\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e83e121490df24fa5893b14e68f5e2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac57281bea03450ccb2d098ee8c7ab697\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f3ebf50ab7f5e53fd936817c866f7be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf049e6d185c38c2d9e153b0edd3a9015\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5df3f3a9618fd35931107819cb43fce6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c9b66fa25cadee9ca3bff75a6609b05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and default partitioner. </p>\n<p>parallel_reduce overloads that work with anonymous function objects (see also <a class=\"el\" href=\"a00008.html\">requirements on parallel_reduce anonymous function objects</a>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b22fd1de0e8bbaf46587d3c63a1ed93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56e6b6e2eee521f532c00d855280be69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0d4eb5ab127b185a92720eff1136fa8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac26c35d1983e7ac2ab003cc8e49dd7e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga518ef2653004d60319bdfc1c6bce86b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24ba50caf5a7c32cbd38912508cb69a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1507205a91a8fd26bd7d9bbcb74ad98b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga367a8e77c4dac3f8764785afdc6c9299\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7eaaf124471a6c603b28fc925e8fbbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with default partitioner. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ddacf5e49f1bea9b67803f2d0f57531\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3548041731b7fa14f30f155541ceebb9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dd68a232bb3102788792fcf081a2ab6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with default partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbc46558909fe3720e95a18241dda603\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with simple_partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6dda983975483bbc5dc95558c1ad3d88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with auto_partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabdc90813499f91d3e32298cd6dc2fe45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename RandomAccessIterator , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>end</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in [begin,end) using the given comparator. </p>\n<p>The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73b58ac9249f49587d0b081c152af551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename RandomAccessIterator &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61ce8ba64868c5c15f9d98840193b9bf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in rng using the given comparator. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga541b2fd91e88842a7b823161107779e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in const rng using the given comparator. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1fb3ae3aab1213cb9bcf56e30c164bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60bbc3d7699f09618bd8b5114e4277cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f176cdc232a6e5907456656a24983a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">T *&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T *&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00272.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Containers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Containers</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-local storage with optional reduction.  <a href=\"a00047.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unordered map from Key to T.  <a href=\"a00050.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe non-blocking concurrent queue.  <a href=\"a00053.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe blocking concurrent bounded queue.  <a href=\"a00049.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Concurrent vector container.  <a href=\"a00060.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container.  <a href=\"a00072.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00273.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Memory Allocation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Memory Allocation</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Block of space aligned sufficiently to construct an array T with N elements.  <a href=\"a00022.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00041.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00042.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00092.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00093.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00167.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00168.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00183.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00184.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_malloc</a> (size_t size)</td></tr>\n<tr class=\"separator:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_realloc</a> (void *ptr, size_t size)</td></tr>\n<tr class=\"separator:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>\n<tr class=\"separator:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>\n<tr class=\"separator:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_aligned_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_msize</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>\n<tr class=\"separator:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocation_command</a> (int cmd, void *param)</td></tr>\n<tr class=\"separator:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad9aa7595581a7bc5be193d7e034c8f61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_FUNC scalable_aligned_free </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_free\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga903307de17bc1611515f8e6ae782a3d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_malloc\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07391c54330b2e4dd1743ae9c9c4f2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_realloc\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe5acd876b4d89bf89787c4e779c2518\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_allocation_command </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>cmd</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>param</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Call TBB allocator-specific commands. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f5029970f72ebbffee896c46a23958e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_allocation_mode </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>param</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">intptr_t&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Set TBB allocator-specific allocation modes. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b4ff39555cd9e929fce2958325cd8ea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_calloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>nobj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"calloc\" analogue complementing scalable_malloc. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ad3952b8c4dd7d293e02ae18fc37b84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_FUNC scalable_free </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"free\" analogue to discard a previously allocated piece of memory. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;::deallocate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a5bdc71439a70b20f2eadf6e1a489e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_malloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"malloc\" analogue to allocate block of memory of size bytes. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;::allocate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b718206e50acb6392b86e4877d98213\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t __TBB_EXPORTED_FUNC scalable_msize </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The analogue of <em>msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable</em>*, or 0 (zero) if ptr does not point to such a block. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf117b4994f719d539804da8dd115e28c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_posix_memalign </td>\n          <td>(</td>\n          <td class=\"paramtype\">void **&#160;</td>\n          <td class=\"paramname\"><em>memptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"posix_memalign\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40d6e0bc19cdfa3005b2b935c62077a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_realloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"realloc\" analogue complementing scalable_malloc. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00274.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Synchronization</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Synchronization</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Primary template for atomic.  <a href=\"a00027.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrapper around the platform's native lock.  <a href=\"a00097.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A mutex which does nothing.  <a href=\"a00099.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A rw mutex which does nothing.  <a href=\"a00100.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing mutex with local-only spinning.  <a href=\"a00120.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing reader-writer mutex with local-only spinning.  <a href=\"a00121.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Writer-preference reader-writer lock with local-only spinning on readers.  <a href=\"a00122.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mutex that allows recursive mutex acquisition.  <a href=\"a00135.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A lock that occupies a single byte.  <a href=\"a00154.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href=\"a00155.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; interface7::internal::x86_eliding_mutex, <br class=\"typebreak\"/>\nfalse &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb::speculative_spin_mutex</a></td></tr>\n<tr class=\"memdesc:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin mutex with speculative lock acquisition.  <a href=\"#ga69722571e9e4406693c4a1379f0b47eb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; tbb::interface8::internal::x86_rtm_rw_mutex, <br class=\"typebreak\"/>\ntrue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga97d0da95fd4f92af12de15e1a8b5c780\">tbb::interface8::speculative_spin_rw_mutex</a></td></tr>\n<tr class=\"memdesc:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin reader/writer mutex with speculative lock acquisition.  <a href=\"#ga97d0da95fd4f92af12de15e1a8b5c780\">More...</a><br/></td></tr>\n<tr class=\"separator:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga69722571e9e4406693c4a1379f0b47eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef interface7::internal::padded_mutex&lt; spin_mutex, false &gt; <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb::speculative_spin_mutex</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>A cross-platform spin mutex with speculative lock acquisition. </p>\n<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a <a class=\"el\" href=\"a00154.html\" title=\"A lock that occupies a single byte. \">spin_mutex</a>. It should be used for locking short critical sections where the lock is contended but the data it protects are not. If zero-initialized, the mutex is considered unheld. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97d0da95fd4f92af12de15e1a8b5c780\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef interface7::internal::padded_mutex&lt; <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex</a>, true &gt; <a class=\"el\" href=\"a00274.html#ga97d0da95fd4f92af12de15e1a8b5c780\">tbb::interface8::speculative_spin_rw_mutex</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>A cross-platform spin reader/writer mutex with speculative lock acquisition. </p>\n<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_rw_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00275.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Timing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Timing</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Absolute timestamp.  <a href=\"a00177.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00276.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Task Scheduling</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Task Scheduling</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class delimiting the scope of task scheduler activity.  <a href=\"a00164.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00278.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">__TBB_malloc_proxy_caller Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>__TBB_malloc_proxy_caller</b>() (defined in <a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00279.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00246.html\">rml</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rml::MemPoolPolicy Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>fixedPool</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>granularity</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>keepAllMemory</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>MemPoolPolicy</b>(rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false) (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pAlloc</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pFree</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reserved</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>TBBMALLOC_POOL_VERSION</b> enum value (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>version</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00280.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::aligned_space&lt; T, N &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00281.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00027.html\">atomic</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic</b>()=default (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>atomic</b>(T arg) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(T rhs) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const atomic&lt; T &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00282.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00028.html\">atomic< void * ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; void * &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic</b>()=default (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>atomic</b>(void *arg) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(void *rhs) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const atomic&lt; void * &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00283.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range&lt; Value &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">blocked_range</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a49a97576004711b7159170fcaf488e4e\">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">blocked_range</a>(blocked_range &amp;r, split)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a1f53fbb10b8b04a515f382704b00ed14\">blocked_range</a>(blocked_range &amp;r, proportional_split &amp;proportion)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">grainsize</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::blocked_rangeNd_impl</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00284.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range2d&lt; RowValue, ColValue &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range2d</b>(blocked_range2d &amp;r, split) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b>(blocked_range2d &amp;r, proportional_split &amp;proportion) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>col_range_type</b> typedef (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">cols</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">rows</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00285.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b>(blocked_range3d &amp;r, split) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range3d</b>(blocked_range3d &amp;r, proportional_split &amp;proportion) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>col_range_type</b> typedef (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">cols</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">pages</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>row_range_type</b> typedef (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">rows</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00286.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">allocate</a>(size_type n, const void *hint=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cache_aligned_allocator</b>() (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cache_aligned_allocator</b>(const cache_aligned_allocator &amp;) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cache_aligned_allocator</b>(const cache_aligned_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00287.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00123.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00288.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00289.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00125.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00290.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00047.html\">combinable</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::combinable&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combinable</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combinable</b>(finit _finit) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combinable</b>(const combinable &amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combinable</b>(combinable &amp;&amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combine</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>local</b>(bool &amp;exists) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const combinable &amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(combinable &amp;&amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">~combinable</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00291.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_bounded_queue&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">abort</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">capacity</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a85f8a800cae02b601f36ad7a655a0126\">concurrent_bounded_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#aad6fd2353d64c2c31d074cd99df58c02\">concurrent_bounded_queue</a>(const concurrent_bounded_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">concurrent_bounded_queue</a>(concurrent_bounded_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_bounded_queue</b>(concurrent_bounded_queue &amp;&amp;src, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#afcfdc998e106fdb7b2dfa5df880cd9cf\">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::concurrent_queue_iterator</b> (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">pop</a>(T &amp;destination)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">push</a>(T &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">set_capacity</a>(size_type new_capacity)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">try_pop</a>(T &amp;destination)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a03d93a240841a21788396bebd71c51bd\">try_push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">try_push</a>(T &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_begin</b>() (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_begin</b>() const  (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_end</b>() (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_end</b>() const  (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">~concurrent_bounded_queue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00292.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">assign</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">assign</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">assign</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">at</a>(size_type index)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">at</a>(size_type index) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">back</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#acf66eb1e82dbcb430d9926a23711c720\">back</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">capacity</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">cbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">cend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">concurrent_vector</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa25dccd2f65fbfa148e92d01a11c20ff\">concurrent_vector</a>(std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6\">concurrent_vector</a>(const concurrent_vector &amp;vector, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aafb048cfda83d0e7803888ead76c06a9\">concurrent_vector</a>(concurrent_vector &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_vector</b>(concurrent_vector &amp;&amp;source, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abb0e376a31c3fdb91beaaa98441735f5\">concurrent_vector</a>(const concurrent_vector&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">concurrent_vector</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a736c6e35f1df11625636968ea546e21f\">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae0d384ec56032d18f63e26960029d3ce\">concurrent_vector</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>copy_range</b>(void *dst, const void *p_type_erased_iterator, size_type n) (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">crbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">crend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">emplace_back</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">end</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a6a4ad0795a19d94df24595e748f0b193\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">front</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9067259572c2c41d014840d0f9d3cdce\">front</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab89c2db5358048debdc282ff995caffb\">grow_by</a>(size_type delta)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">grow_by</a>(size_type delta, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#acfd74483ff523213b78f44fb914c8eb4\">grow_by</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a95f57f1529e0ebd1ca6bd2d60003fcab\">grow_by</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\">grow_to_at_least</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">grow_to_at_least</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::vector_iterator</b> (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_vector_base</b>() const  (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">operator=</a>(const concurrent_vector &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0d26889a94203cdb5f5460fade7497c7\">operator=</a>(concurrent_vector &amp;&amp;other)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">operator=</a>(const concurrent_vector&lt; T, M &gt; &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">operator=</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">operator[]</a>(size_type index)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">operator[]</a>(size_type index) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad68d1675fedef232bfae35f200ba007d\">push_back</a>(const_reference item)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">push_back</a>(T &amp;&amp;item)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">range</a>(size_t grainsize=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8fcc32ec9ccb48c3327a88fe288c7538\">range</a>(size_t grainsize=1) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">rbegin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a976b0bed19de9ab93f78c10184a4e38f\">rbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">rend</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">rend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">reserve</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\">resize</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">resize</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">shrink_to_fit</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">swap</a>(concurrent_vector &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">~concurrent_vector</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00293.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li><li class=\"navelem\"><b>push_back_helper</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00071.html\">element_construction_guard</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>dismiss</b>() (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>element</b> (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>element_construction_guard</b>(pointer an_element) (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~element_construction_guard</b>() (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00294.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>DESTROYED</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>HELD</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>INITIALIZED</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">set_state</a>(state_t to)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>state_t</b> enum name (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~mutex</b>() (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00295.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">acquire</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>mutex</b> (defined in <a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#ab7c2074543443824790433d3d6c3fece\">scoped_lock</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">try_acquire</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00296.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>null_mutex</b>() (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00297.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>acquire</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_acquire</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00298.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>null_rw_mutex</b>() (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00299.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>downgrade_to_reader</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>upgrade_to_writer</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00300.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group_context Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group_context</b>(tbb::internal::string_index) (defined in <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00301.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pre_scan_tag Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_final_scan</b>() (defined in <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator bool</b>() (defined in <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00302.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::final_scan_tag Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_final_scan</b>() (defined in <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator bool</b>() (defined in <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00303.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::parallel_while&lt; Body &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">add</a>(const value_type &amp;item)</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">parallel_while</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">run</a>(Stream &amp;stream, const Body &amp;body)</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">~parallel_while</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00304.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00074.html\">filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00074.html\">tbb::filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00305.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::thread_bound_filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end_of_stream</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>item_not_available</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">process_item</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>result_type</b> enum name (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>success</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">try_process_item</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00306.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00117.html\">pipeline</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pipeline Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">add_filter</a>(filter &amp;filter_)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filter</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::pipeline_cleaner</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::pipeline_root_task</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::stage_task</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">pipeline</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ac9ee9080cfc080c40a7ee7cb03a62637\">run</a>(size_t max_number_of_live_tokens)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &amp;context)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_bound_filter</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">~pipeline</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00307.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">queuing_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00308.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">acquire</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">scoped_lock</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">try_acquire</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00309.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">queuing_rw_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">~queuing_rw_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00310.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">downgrade_to_reader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">scoped_lock</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">try_acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">upgrade_to_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00311.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">recursive_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~recursive_mutex</b>() (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00312.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">acquire</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>recursive_mutex</b> (defined in <a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#ab42cb541abb9647cac23b1db9a4db93d\">scoped_lock</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">try_acquire</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00313.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(U *p, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>destroy</b>(pointer p) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable_allocator</b>() (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scalable_allocator</b>(const scalable_allocator &amp;) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable_allocator</b>(const scalable_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00314.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00126.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00315.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00316.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00127.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00317.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">spin_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00318.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">acquire</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a73f7381a9a112b9f5a856b1face525fb\">scoped_lock</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>spin_mutex</b> (defined in <a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">try_acquire</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00319.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>BUSY</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>ONE_READER</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>READERS</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">spin_rw_mutex_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">state</a></td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>state_t</b> typedef (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">try_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>WRITER</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>WRITER_PENDING</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">~spin_rw_mutex_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00320.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a></td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">mutex</a></td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a0a2e15358575f7651446bca13a5a2674\">scoped_lock</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b> (defined in <a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00321.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00162.html\">task_handle</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_handle&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::task_handle_task</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator()</b>() const  (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>structured_task_group</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_handle</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_handle</b>(F &amp;&amp;f) (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00322.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00159.html\">task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run</b>(F &amp;&amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_wait</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run_and_wait</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group</b>() (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00323.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::structured_task_group Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_wait</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00324.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_scheduler_init Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a></td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#ae261cf6c54a3689ef4e2c079fe0f67d0\">blocking_terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">blocking_terminate</a>(const std::nothrow_t &amp;) __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">default_num_threads</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">deferred</a></td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">initialize</a>(int number_of_threads=automatic)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a0f5294f74b123a646a1762c68d11e39a\">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">is_active</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">~task_scheduler_init</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00325.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">allocator_type</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable</b> enum value (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>standard</b> enum value (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_allocator</b>() (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb_allocator</b>(const tbb_allocator &amp;) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_allocator</b>(const tbb_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00326.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00131.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00327.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00328.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00128.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00329.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>base_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>zero_allocator</b>() (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>zero_allocator</b>(const zero_allocator &amp;a) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>zero_allocator</b>(const zero_allocator&lt; U &gt; &amp;a) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00330.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00129.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00331.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>base_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00332.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00130.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00333.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::bad_last_alloc Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~bad_last_alloc</b>() __TBB_override (defined in <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00334.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::improper_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00335.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00182.html\">user_abort</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::user_abort Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00182.html\">tbb::user_abort</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00182.html\">tbb::user_abort</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00182.html\">tbb::user_abort</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00336.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::missing_wait Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00337.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::invalid_multiple_scheduling Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00338.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_exception Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">destroy</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">move</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">name</a>() const =0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">throw_self</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">what</a>() const __TBB_override=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00339.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::captured_exception Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>captured_exception</b>(const captured_exception &amp;src) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>captured_exception</b>(const char *name_, const char *info) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">destroy</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">move</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const captured_exception &amp;src) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set</b>(const char *name, const char *info) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">throw_self</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">what</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~captured_exception</b>() (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00340.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::movable_exception&lt; ExceptionData &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">destroy</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>movable_exception</b>(const ExceptionData &amp;data_) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>movable_exception</b>(const movable_exception &amp;src) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">move</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">my_exception_data</a></td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">name</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const movable_exception &amp;src) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">throw_self</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">what</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~movable_exception</b>() (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00341.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00177.html\">tbb::tick_count</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">now</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">resolution</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tick_count</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00342.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00087.html\">interval_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count::interval_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">interval_t</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">interval_t</a>(double sec)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">operator+</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">operator+=</a>(const interval_t &amp;i)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">operator-</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">operator-=</a>(const interval_t &amp;i)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">seconds</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::tick_count</b> (defined in <a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00343.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00153.html\">sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::sender&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_successors</b>()=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">built_successors_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_successors</b>(successor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">register_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">remove_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>successor_count</b>()=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>successor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">successor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">try_consume</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender::try_get</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_get_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">try_release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender::try_reserve</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_reserve_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~sender</b>() (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~untyped_sender</b>() (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00344.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00133.html\">receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::async_helpers</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::async_storage</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_continue_receiver</b>() (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">limiter_node</a> class</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_count</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>proxy_dependency_receiver</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">register_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">remove_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">run_and_put_task</a> class</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a>(const typename internal::async_helpers&lt; T &gt;::filtered_type &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put</b>(const typename internal::async_helpers&lt; T &gt;::async_type &amp;t) (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a>(const T &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver::try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">try_put_task</a>(const T &amp;t)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task</b>(const T &amp;t)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00345.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_receiver Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">continue_receiver</a>(int number_of_predecessors=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">continue_receiver</a>(const continue_receiver &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;v) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">execute</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;s) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;s) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_continue_receiver</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>limiter_node</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_built_predecessors</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_current_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_initial_predecessor_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_mutex</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_predecessor_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_count</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">register_predecessor</a>(predecessor_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">remove_predecessor</a>(predecessor_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">reset_receiver</a>(reset_flags f) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run_and_put_task</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a>(const typename internal::async_helpers&lt; continue_msg &gt;::filtered_type &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put</b>(const typename internal::async_helpers&lt; continue_msg &gt;::async_type &amp;t) (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a>(const continue_msg &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver::try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task</a>(const input_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00346.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::graph_proxy Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~graph_proxy</b>() (defined in <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00347.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver_gateway&lt; Input &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">try_put</a>(const input_type &amp;)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~graph_proxy</b>() (defined in <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00348.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>device_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>devices</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>init</b>(const opencl_device_list &amp;device_list) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer_impl</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(opencl_device device, T &amp;t, Rest &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_data</b>(opencl_device) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_kernel</b>(opencl_device device, const kernel_type &amp;kernel, const range_type &amp;work_size, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00349.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00089.html\">kernel</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel</b>(const kernel &amp;k) (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~kernel</b>() (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00350.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00113.html\">opencl_program</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_program&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_kernel</b>(const std::string &amp;k) const  (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory&lt; DeviceFilter &gt;::kernel</b> (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, opencl_program_type type, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, const char *program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(opencl_program_type type, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(const char *program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(opencl_program_type type) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(const opencl_program &amp;src) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00351.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00105.html\">opencl_device</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address_bits</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_in_kernel_available</b>(const std::string &amp;k) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_in_kernels</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>command_queue</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>compiler_available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>device_id</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>device_id_type</b> typedef (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>extension_available</b>(const std::string &amp;ext) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>extensions</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>host</b> enum value (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>info</b>(cl_device_info i, T &amp;t) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>linker_available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>major_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>max_work_group_size</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>max_work_item_sizes</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>minor_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>name</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device</b>() (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_device</b>(cl_device_id d_id) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device</b>(cl_device_id cl_d_id, device_id_type device_id) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>out_of_order_exec_mode_on_device_present</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>out_of_order_exec_mode_on_host_present</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_extensions</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_id</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_name</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_profile</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_vendor</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_command_queue</b>(cl_command_queue cmd_queue) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>type</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unknown</b> enum value (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>vendor</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00352.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device_list Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>add</b>(opencl_device d) (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cbegin</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cend</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>empty</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_device_list</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device_list</b>(std::initializer_list&lt; opencl_device &gt; il) (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00353.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00045.html\">callback_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call</b>()=0 (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~callback_base</b>() (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00354.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00044.html\">callback</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback&lt; Callback, T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call</b>() __TBB_override (defined in <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>callback</b>(Callback c, const T &amp;t) (defined in <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~callback_base</b>() (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00355.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear_event</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>(bool wait=true) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>(bool wait=true) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_event</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_async_msg</b>(const T &amp;data) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>(const T &amp;data, cl_event event) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_async_msg</b>(const opencl_async_msg &amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>(opencl_async_msg &amp;&amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator const T &amp;</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator T &amp;</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(const opencl_async_msg &amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>register_callback</b>(Callback c) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_event</b>(cl_event e) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_async_msg</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00356.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_memory&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>factory</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_cl_mem</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_host_ptr</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>map_memory</b>(opencl_device, opencl_async_msg&lt; void *, Factory &gt; &amp;)=0 (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_cl_mem</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_curr_device_id</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_factory</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_host_ptr</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_event</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_sending_event_present</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_lock</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>receive</b>(const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send</b>(opencl_device device, const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00357.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>factory</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_cl_mem</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_host_ptr</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>map_memory</b>(opencl_device device, opencl_async_msg&lt; void *, Factory &gt; &amp;dmsg) __TBB_override (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_cl_mem</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_curr_device_id</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_factory</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_host_ptr</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_event</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_sending_event_present</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_lock</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b> (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer_impl</b>(size_t size, Factory &amp;f) (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer_impl</b>(cl_mem m, size_t index, size_t size, Factory &amp;f) (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receive</b>(const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send</b>(opencl_device device, const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00358.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>access</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>() (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b>(size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>(Factory &amp;f, size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_subbuffer</b>() (defined in <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_subbuffer</b>(const opencl_buffer&lt; T, Factory &gt; &amp;owner, size_t index, size_t size) (defined in <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(ptrdiff_t k) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receive</b>(const opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send</b>(opencl_device device, opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00359.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>access</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>() (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b>(size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>(Factory &amp;f, size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_subbuffer</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(ptrdiff_t k) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>receive</b>(const opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send</b>(opencl_device device, opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00360.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00114.html\">opencl_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_range Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>global_range</b>() const  (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_range</b>() const  (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>nd_range_type</b> typedef (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_range</b>(G &amp;&amp;global_work=std::initializer_list&lt; int &gt;({0}), L &amp;&amp;local_work=std::initializer_list&lt; int &gt;({0, 0, 0})) (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_index_type</b> typedef (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00361.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00112.html\">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, Factory &amp;f) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d, Factory &amp;f) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00362.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00111.html\">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d) (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00363.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00110.html\">opencl_node< tuple< Ports...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d) (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00364.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00070.html\">edge_container</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::edge_container&lt; C &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>add_edge</b>(C &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_edges</b>(edge_list_type &amp;v) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>delete_edge</b>(C &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>edge_count</b>() (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>edge_list_type</b> typedef (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receiver_extract</b>(R &amp;r) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>sender_extract</b>(S &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00365.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00023.html\">async_helpers</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_type</b> typedef (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>from_void_ptr</b>(const void *p) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>from_void_ptr</b>(void *p) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_async_type</b> (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>to_void_ptr</b>(const T &amp;t) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>to_void_ptr</b>(T &amp;t) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper_impl</b>(receiver&lt; T &gt; *const this_recv, const void *p, bool is_async) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00366.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00024.html\">async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_type</b> typedef (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>from_void_ptr</b>(const void *p) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>from_void_ptr</b>(void *p) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_async_type</b> (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>to_void_ptr</b>(const T &amp;t) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>to_void_ptr</b>(T &amp;t) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper_impl</b>(receiver&lt; T &gt; *const this_recv, const void *p, bool is_async) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00367.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_sender Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_successors</b>()=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_successors</b>(successor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::predecessor_cache</b> (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::reservable_predecessor_cache</b> (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_add_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_delete_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">register_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">remove_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>successor_count</b>()=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>successor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">try_consume</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_get_wrapper</b>(void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">try_release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_reserve_wrapper</b>(void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~untyped_sender</b>() (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00368.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_receiver Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_continue_receiver</b>() (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>limiter_node</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_count</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>proxy_dependency_receiver</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">register_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">remove_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_put_task</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00369.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00370.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(const opencl_device_list &amp;devices) (defined in <a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00371.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_opencl_factory Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>default_factory</b> (defined in <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>device_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>devices</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>init</b>(const opencl_device_list &amp;device_list) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(opencl_device device, T &amp;t, Rest &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_data</b>(opencl_device) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_kernel</b>(opencl_device device, const kernel_type &amp;kernel, const range_type &amp;work_size, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00372.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_buffer&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cbegin</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cend</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>gfx_buffer</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_buffer</b>(size_type size) (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(size_type pos) (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(size_type pos) const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00373.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_async_msg&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_async_msg</b>() (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>gfx_async_msg</b>(const T &amp;input_data) (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_id_type</b> typedef (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>set_task_id</b>(kernel_id_type id) (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_id</b>() const  (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00374.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>(device_type, FinalizeFn fn, Args &amp;...) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_factory</b>(tbb::flow::graph &amp;g) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_id_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(device_type, Args &amp;...args) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_kernel</b>(device_type, const kernel_type &amp;kernel, Args &amp;...args) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00375.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::dummy_device_selector Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(gfx_factory &amp;) (defined in <a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00376.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>accessor_location</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>accessor_location</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate_node_copy_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *t) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate_node_default_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate_node_emplace_construct</b>(node_allocator_type &amp;allocator, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate_node_move_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *t) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">bucket_count</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">concurrent_hash_map</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aae76e1252b56b107685f8746e0f6a1f4\">concurrent_hash_map</a>(size_type n, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8a73b86f9a5e9836b38713e56c546654\">concurrent_hash_map</a>(const concurrent_hash_map &amp;table, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2bd04845683b15a590913a72a19fa3dc\">concurrent_hash_map</a>(concurrent_hash_map &amp;&amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad642e497153df5669e6454acef095675\">concurrent_hash_map</a>(concurrent_hash_map &amp;&amp;table, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad56fc19d656099d49051f3c363cefc89\">concurrent_hash_map</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a57149f90060b033b1f2493f2a88ef291\">concurrent_hash_map</a>(std::initializer_list&lt; value_type &gt; il, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_accessor</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">count</a>(const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>delete_node</b>(node_base *n) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>do_not_allocate_node</b>(node_allocator_type &amp;, const Key &amp;, const T *) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">emplace</a>(const_accessor &amp;result, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a17e51c8864282c35aa4d23f22909cc4a\">emplace</a>(accessor &amp;result, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">emplace</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>equal_range</b>(const Key &amp;key) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>equal_range</b>(const Key &amp;key) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5144122dbb946d933b94a92117543b33\">erase</a>(const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">erase</a>(const_accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">erase</a>(accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">exclude</a>(const_accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">find</a>(const_accessor &amp;result, const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a6b61799e2018381b5ee4b78752a41483\">find</a>(accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>generic_emplace</b>(Accessor &amp;&amp;result, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>generic_move_insert</b>(Accessor &amp;&amp;result, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\">insert</a>(const_accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a766c6033c203e8f342501d85a7cf3405\">insert</a>(accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">insert</a>(const_accessor &amp;result, const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2047214e041b7674c3b83e204d0d6c6a\">insert</a>(accessor &amp;result, const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8e39501f9edb3210504c9c4ca05384b7\">insert</a>(const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a446910c1ca4818bdb00f4ffa91b9108a\">insert</a>(const_accessor &amp;result, value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">insert</a>(accessor &amp;result, value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">insert</a>(value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ab84dfd77316252cbf39c7ae89e365a00\">insert</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a580fdba266e87106ad41470479f641d6\">insert</a>(std::initializer_list&lt; value_type &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::hash_map_iterator</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::hash_map_range</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">internal_copy</a>(const concurrent_hash_map &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_copy</b>(I first, I last, size_type reserve_size) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">internal_equal_range</a>(const Key &amp;key, I end) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">internal_fast_find</a>(const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">lookup</a>(bool op_insert, const Key &amp;key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &amp;, const Key &amp;, const T *), node *tmp_n=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_allocator</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">operator=</a>(const concurrent_hash_map &amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">operator=</a>(concurrent_hash_map &amp;&amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">operator=</a>(std::initializer_list&lt; value_type &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range</b>(size_type grainsize=1) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range</b>(size_type grainsize=1) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">rehash</a>(size_type n=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>search_bucket</b>(const key_type &amp;key, bucket *b) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">swap</a>(concurrent_hash_map &amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">~concurrent_hash_map</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00377.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00017.html\">accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_writer</b>() (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_node</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">operator*</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">operator-&gt;</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00378.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00379.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">is_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">operator()</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00380.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call_clear_on_leave</b>(concurrent_hash_map *a_ch_map) (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>dismiss</b>() (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_ch_map</b> (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~call_clear_on_leave</b>() (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00381.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>accessor</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_writer</b>() (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_node</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00382.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00098.html\">node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>item</b> (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const Key &amp;key) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(const Key &amp;key, const T &amp;t) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const Key &amp;key, T &amp;&amp;t) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(value_type &amp;&amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(value_type &amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const value_type &amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr, node_allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t, node_allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00383.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac64c7b627708f0d6b2e5421fb0d49150\">assign</a>(InputIterator begin, InputIterator end)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">assign</a>(std::initializer_list&lt; T &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a405be01bac4048f214797c287e2571a1\">concurrent_priority_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a43c3917ea8a19cf1fec947e29ad4ff3e\">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a0cebee26cc0d00d4dcbb1c74e08029f7\">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aaa8ac175143e12db29a014674a392b38\">concurrent_priority_queue</a>(std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a332d26234f9c37a6b7ba269c648815d0\">concurrent_priority_queue</a>(const concurrent_priority_queue &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aa52cea369b6630699ee78cc42622be9d\">concurrent_priority_queue</a>(const concurrent_priority_queue &amp;src, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae9ac965bbac3933c7db89f512adfcbcb\">concurrent_priority_queue</a>(concurrent_priority_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">concurrent_priority_queue</a>(concurrent_priority_queue &amp;&amp;src, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">emplace</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">operator=</a>(const concurrent_priority_queue &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">operator=</a>(concurrent_priority_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">operator=</a>(std::initializer_list&lt; T &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">push</a>(const_reference elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">push</a>(value_type &amp;&amp;elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">swap</a>(concurrent_priority_queue &amp;q)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">try_pop</a>(reference elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00384.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allow_multimapping</b> enum value (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map_traits</b>() (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map_traits</b>(const hash_compare &amp;hc) (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_key</b>(const std::pair&lt; Type1, Type2 &gt; &amp;value) (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>hash_compare</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00385.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>at</b>(const key_type &amp;key) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>at</b>(const key_type &amp;key) const  (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">concurrent_unordered_map</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(concurrent_unordered_map &amp;&amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(concurrent_unordered_map &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_map &amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_map &amp;&amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(const key_type &amp;key) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00386.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">concurrent_unordered_multimap</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &amp;&amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_multimap &amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_multimap &amp;&amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00387.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allow_multimapping</b> enum value (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set_traits</b>() (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set_traits</b>(const hash_compare &amp;hc) (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_key</b>(const value_type &amp;value) (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>hash_compare</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00388.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">concurrent_unordered_set</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(concurrent_unordered_set &amp;&amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(concurrent_unordered_set &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_set &amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_set &amp;&amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00389.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">concurrent_unordered_multiset</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &amp;&amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_multiset &amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_multiset &amp;&amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00390.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>active</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>invalid</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">reader_writer_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock_read</b> (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">status_t</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">try_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>waiting</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>waiting_nonblocking</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">~reader_writer_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00391.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *p) (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t s) (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reader_writer_lock</b> (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">scoped_lock</a>(reader_writer_lock &amp;lock)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00392.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock_read Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *p) (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t s) (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reader_writer_lock</b> (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">scoped_lock_read</a>(reader_writer_lock &amp;lock)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">~scoped_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00393.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00394.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor< T, false ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00395.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_operation Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_ext</b> (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00396.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_ext&lt; handler_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_ext</b>(const handler_type &amp;h) (defined in <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a>(aggregator_operation &amp;op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a>(aggregator_operation *op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00397.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00019.html\">aggregator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator</b>() (defined in <a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_ext</b>(const internal::basic_handler &amp;h) (defined in <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">execute</a>(const Body &amp;b)</td><td class=\"entry\"><a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a>(aggregator_operation &amp;op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a>(aggregator_operation *op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00398.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_lru_cache</b>(value_function_type f, std::size_t number_of_lru_history_items) (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>handle</b> typedef (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(key_type k) (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::internal::aggregating_functor&lt; self_type, aggregated_operation_type &gt;</b> (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00399.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combine</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">end</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b> (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">enumerable_thread_specific</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aafd6049aa255826c712aaba778524a7c\">enumerable_thread_specific</a>(Finit finit)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a6f0249ee95fa56665da4b6984f3a685a\">enumerable_thread_specific</a>(const T &amp;exemplar)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(T &amp;&amp;exemplar) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">enumerable_thread_specific</a>(P1 &amp;&amp;arg1, P &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(const enumerable_thread_specific &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enumerable_thread_specific</b>(const enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(enumerable_thread_specific &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enumerable_thread_specific</b>(enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">local</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">local</a>(bool &amp;exists)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const enumerable_thread_specific &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(const enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(enumerable_thread_specific &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ac94dd896ed78df240da4a450defbca6c\">range</a>(size_t grainsize=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">range</a>(size_t grainsize=1) const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">~enumerable_thread_specific</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00400.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00078.html\">flattened2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flattened2d&lt; Container &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>flattened2d</b>(const Container &amp;c, typename Container::const_iterator b, typename Container::const_iterator e) (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>flattened2d</b>(const Container &amp;c) (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00401.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(pool_type &amp;pool) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator &amp;src) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator&lt; U, P &gt; &amp;src) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_pool</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pool_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00402.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00132.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00403.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(pool_type &amp;pool) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator &amp;src) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator&lt; U, P &gt; &amp;src) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_pool</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pool_type</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00404.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00124.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00405.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00091.html\">memory_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool&lt; Alloc &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">memory_pool</a>(const Alloc &amp;src=Alloc())</td><td class=\"entry\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">~memory_pool</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00406.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::fixed_pool Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">fixed_pool</a>(void *buf, size_t size)</td><td class=\"entry\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">~fixed_pool</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00407.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00079.html\">flow_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flow_control Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::concrete_filter</b> (defined in <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>stop</b>() (defined in <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00408.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00075.html\">filter_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::filter_t&lt; T, U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filter_t</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filter_t</b>(const filter_t&lt; T, U &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filter_t</b>(tbb::filter::mode mode, const Body &amp;body) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::pipeline_proxy</b> (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">make_filter</a>(tbb::filter::mode, const Body &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&amp;</b> (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const filter_t&lt; T, U &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~filter_t</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00409.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::runtime_loader Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">ec_bad_arg</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">ec_bad_call</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">ec_bad_lib</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">ec_bad_ver</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">ec_no_lib</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">ec_ok</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">em_status</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">em_throw</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">runtime_loader</a>(error_mode mode=em_abort)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">status</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">~runtime_loader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00410.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::task_scheduler_observer Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allow_sleep</b> enum value (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::observer_list</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::observer_proxy</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::task_scheduler_observer_v3</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>keep_awake</b> enum value (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">may_sleep</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe</a>(bool state=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">task_scheduler_observer</a>(bool local=false)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a36e7e0c466320029d5a3e50a573e04c1\">task_scheduler_observer</a>(task_arena &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00411.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_handler</b> (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00412.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00032.html\">basic_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation&lt; Body &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_operation</b>(const Body &amp;b) (defined in <a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00413.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00031.html\">basic_handler</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_handler Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_handler</b>() (defined in <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator()</b>(aggregator_operation *op_list) const  (defined in <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00414.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">current_thread_index</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">debug_wait_until_empty</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">enqueue</a>(F &amp;&amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enqueue</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">enqueue</a>(F &amp;&amp;f, priority_t p)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enqueue</b>(const F &amp;f, priority_t p) (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute</a>(F &amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">execute</a>(const F &amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">initialize</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ae7986309715cf224f5320dc06ee7d335\">initialize</a>(int max_concurrency_, unsigned reserved_for_masters=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">initialize</a>(attach)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">is_active</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">max_concurrency</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">task_arena</a>(int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a70d122b3e6e4760c6053c5c230c715ef\">task_arena</a>(const task_arena &amp;s)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d\">task_arena</a>(attach)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::internal::task_scheduler_observer_v3</b> (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::this_task_arena::max_concurrency</b> (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">~task_arena</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00415.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00083.html\">global_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface9::global_control Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>active_value</b>(parameter p) (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>global_control</b>(parameter p, size_t value) (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>max_allowed_parallelism</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>parameter</b> enum name (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>parameter_max</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_stack_size</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~global_control</b>() (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00416.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl< Value, N, index_sequence< Is...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>()=delete (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">blocked_rangeNd_impl</a>(const dim_type_helper&lt; Is &gt; &amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>(blocked_rangeNd_impl &amp;r, proportional_split proportion) (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>(blocked_rangeNd_impl &amp;r, split proportion) (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00417.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>critical_section_v4</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>lock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_lock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unlock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~critical_section_v4</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00418.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>(critical_section_v4 &amp;lock_me) (defined in <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00419.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_handle_task&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_handle_task</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00420.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00160.html\">task_group_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_group_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00421.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_scheduler_observer_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>interface6::task_scheduler_observer</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a>(bool state=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>observer_list</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>observer_proxy</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00422.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_exception_ptr Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate</b>() (defined in <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate</b>(const tbb_exception &amp;tag) (defined in <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">allocate</a>(captured_exception &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">destroy</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">throw_self</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00423.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00424.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_0&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>start_routine</b>(void *c) (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_closure_0</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00425.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_1&lt; F, X &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>arg1</b> (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">start_routine</a>(void *c)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_closure_1</b>(const F &amp;f, const X &amp;x) (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00426.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_2&lt; F, X, Y &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>arg1</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>arg2</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">start_routine</a>(void *c)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_closure_2</b>(const F &amp;f, const X &amp;x, const Y &amp;y) (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00427.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">detach</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_id</b>() const __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">hardware_concurrency</a>() __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">join</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>joinable</b>() const __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>move_v3</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(tbb_thread_v3 &amp;x) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>swap</b>(tbb_thread_v3 &amp;t) __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::swap</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_thread_v3</b>(const tbb_thread_v3 &amp;) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb_thread_v3</a>() __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a9c5587ab76ca1aa98bae7fe69a459466\">tbb_thread_v3</a>(F f)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a672a5367e687635c869926bf8a986296\">tbb_thread_v3</a>(F f, X x)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#ac3f57678f2a289084a6d275f8f8fbc62\">tbb_thread_v3</a>(F f, X x, Y y)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_thread_v3</b>() (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00428.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00085.html\">id</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3::id Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic_compare_and_swap</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>id</b>() __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&lt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&lt;&lt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&lt;=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&gt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&gt;=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_hasher</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb_thread_v3</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_get_id_v3</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00429.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>profiling</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00073.html\">event</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::profiling::interface10::event Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emit</b>() (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>emit</b>(const std::string &amp;description) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emit</b>() (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>emit</b>(const std::string &amp;) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>event</b>(const std::string &amp;input) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>event</b>(const std::string &amp;) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/a00430.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>strict_ppl</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">concurrent_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a43ac953152e60815c09fe4a4d4a623a9\">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ae918807d098d5d5b41cc6d606fa2e7a1\">concurrent_queue</a>(const concurrent_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#acc04574f4d7d41fd5cad779508394740\">concurrent_queue</a>(concurrent_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_queue</b>(concurrent_queue &amp;&amp;src, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::concurrent_queue_iterator</b> (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>push</b>(T &amp;&amp;source) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">try_pop</a>(T &amp;result)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_begin</b>() (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_begin</b>() const  (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_end</b>() (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_end</b>() const  (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">unsafe_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">~concurrent_queue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span><span onclick=\"javascript:toggleLevel(4);\">4</span><span onclick=\"javascript:toggleLevel(5);\">5</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img id=\"arr_0_\" src=\"ftv2mnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00246.html\" target=\"_self\">rml</a></td><td class=\"desc\">The namespace rml contains components of low-level memory pool interface </td></tr>\n<tr id=\"row_0_0_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00094.html\" target=\"_self\">MemPoolPolicy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\" class=\"even\"><td class=\"entry\"><img id=\"arr_1_\" src=\"ftv2mnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00249.html\" target=\"_self\">tbb</a></td><td class=\"desc\">The graph class </td></tr>\n<tr id=\"row_1_0_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>flow</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface10</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00157.html\" target=\"_self\">successor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00039.html\" target=\"_self\">broadcast_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00137.html\" target=\"_self\">round_robin_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00119.html\" target=\"_self\">predecessor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00136.html\" target=\"_self\">reservable_predecessor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">edge_container</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00026.html\" target=\"_self\">async_storage</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00023.html\" target=\"_self\">async_helpers</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00024.html\" target=\"_self\">async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00179.html\" target=\"_self\">untyped_sender</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00178.html\" target=\"_self\">untyped_receiver</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>opencl_info</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00066.html\" target=\"_self\">default_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00065.html\" target=\"_self\">default_device_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00101.html\" target=\"_self\">null_type</a></td><td class=\"desc\">A generic null type </td></tr>\n<tr id=\"row_1_0_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00062.html\" target=\"_self\">continue_msg</a></td><td class=\"desc\">An empty class used for messages that mean \"I'm done\" </td></tr>\n<tr id=\"row_1_0_0_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00153.html\" target=\"_self\">sender</a></td><td class=\"desc\">Forward declaration section </td></tr>\n<tr id=\"row_1_0_0_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">receiver</a></td><td class=\"desc\">Pure virtual template class that defines a receiver of messages of type T </td></tr>\n<tr id=\"row_1_0_0_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00090.html\" target=\"_self\">limiter_node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00138.html\" target=\"_self\">run_and_put_task</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00025.html\" target=\"_self\">async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00063.html\" target=\"_self\">continue_receiver</a></td><td class=\"desc\">Base class for receivers of completion messages </td></tr>\n<tr id=\"row_1_0_0_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00084.html\" target=\"_self\">graph_proxy</a></td><td class=\"desc\">Pure virtual template classes that define interfaces for async communication </td></tr>\n<tr id=\"row_1_0_0_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00134.html\" target=\"_self\">receiver_gateway</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_12_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_12_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_12_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00089.html\" target=\"_self\">kernel</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00113.html\" target=\"_self\">opencl_program</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00105.html\" target=\"_self\">opencl_device</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00106.html\" target=\"_self\">opencl_device_list</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00045.html\" target=\"_self\">callback_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00044.html\" target=\"_self\">callback</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00102.html\" target=\"_self\">opencl_async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00108.html\" target=\"_self\">opencl_memory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00104.html\" target=\"_self\">opencl_buffer_impl</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00115.html\" target=\"_self\">opencl_subbuffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00103.html\" target=\"_self\">opencl_buffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00114.html\" target=\"_self\">opencl_range</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">opencl_node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00112.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00111.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00110.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_1_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface9</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00081.html\" target=\"_self\">gfx_buffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00080.html\" target=\"_self\">gfx_async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_1_2_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_1_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00082.html\" target=\"_self\">gfx_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00068.html\" target=\"_self\">device_type</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00069.html\" target=\"_self\">dummy_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface5</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00180.html\" target=\"_self\">use_element_copy_constructor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00181.html\" target=\"_self\">use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_1_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00050.html\" target=\"_self\">concurrent_hash_map</a></td><td class=\"desc\">Unordered map from Key to T </td></tr>\n<tr id=\"row_1_1_1_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00017.html\" target=\"_self\">accessor</a></td><td class=\"desc\">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_1_1_1_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00018.html\" target=\"_self\">accessor_not_used</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00040.html\" target=\"_self\">bucket_accessor</a></td><td class=\"desc\">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>\n<tr id=\"row_1_1_1_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00043.html\" target=\"_self\">call_clear_on_leave</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00061.html\" target=\"_self\">const_accessor</a></td><td class=\"desc\">Combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_1_1_1_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00098.html\" target=\"_self\">node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00052.html\" target=\"_self\">concurrent_priority_queue</a></td><td class=\"desc\">Concurrent priority queue </td></tr>\n<tr id=\"row_1_1_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00055.html\" target=\"_self\">concurrent_unordered_map_traits</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00054.html\" target=\"_self\">concurrent_unordered_map</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00056.html\" target=\"_self\">concurrent_unordered_multimap</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00059.html\" target=\"_self\">concurrent_unordered_set_traits</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00058.html\" target=\"_self\">concurrent_unordered_set</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_8_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00057.html\" target=\"_self\">concurrent_unordered_multiset</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_9_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_9_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_9_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00122.html\" target=\"_self\">reader_writer_lock</a></td><td class=\"desc\">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>\n<tr id=\"row_1_1_9_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00143.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped lock pattern for write locks </td></tr>\n<tr id=\"row_1_1_9_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00152.html\" target=\"_self\">scoped_lock_read</a></td><td class=\"desc\">The scoped lock pattern for read locks </td></tr>\n<tr id=\"row_1_2_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface6</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00033.html\" target=\"_self\">basic_operation_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">basic_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00031.html\" target=\"_self\">basic_handler</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00048.html\" target=\"_self\">concrete_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00021.html\" target=\"_self\">aggregator_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">aggregator_ext</a></td><td class=\"desc\">Aggregator base class and expert interface </td></tr>\n<tr id=\"row_1_2_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00019.html\" target=\"_self\">aggregator</a></td><td class=\"desc\">Basic aggregator interface </td></tr>\n<tr id=\"row_1_2_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00051.html\" target=\"_self\">concurrent_lru_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00072.html\" target=\"_self\">enumerable_thread_specific</a></td><td class=\"desc\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container </td></tr>\n<tr id=\"row_1_2_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00078.html\" target=\"_self\">flattened2d</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_7_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_7_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00092.html\" target=\"_self\">memory_pool_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_2_7_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00132.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_8_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_8_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00093.html\" target=\"_self\">memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_2_8_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00124.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00091.html\" target=\"_self\">memory_pool</a></td><td class=\"desc\">Thread-safe growable pool allocator for variable-size requests </td></tr>\n<tr id=\"row_1_2_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00077.html\" target=\"_self\">fixed_pool</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00079.html\" target=\"_self\">flow_control</a></td><td class=\"desc\">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>\n<tr id=\"row_1_2_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00075.html\" target=\"_self\">filter_t</a></td><td class=\"desc\">Class representing a chain of type-safe pipeline filters </td></tr>\n<tr id=\"row_1_2_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00139.html\" target=\"_self\">runtime_loader</a></td><td class=\"desc\">Load TBB at runtime </td></tr>\n<tr id=\"row_1_2_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00165.html\" target=\"_self\">task_scheduler_observer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_3_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface7</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_3_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_3_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00158.html\" target=\"_self\">task_arena</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00029.html\" target=\"_self\">attach</a></td><td class=\"desc\">Tag class used to indicate the \"attaching\" constructor </td></tr>\n<tr id=\"row_1_4_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_4_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_4_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface9</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_4_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00083.html\" target=\"_self\">global_control</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00037.html\" target=\"_self\">blocked_rangeNd_impl</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00038.html\" target=\"_self\">blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00064.html\" target=\"_self\">critical_section_v4</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_2_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00146.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00163.html\" target=\"_self\">task_handle_task</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00160.html\" target=\"_self\">task_group_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00166.html\" target=\"_self\">task_scheduler_observer_v3</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00170.html\" target=\"_self\">tbb_exception_ptr</a></td><td class=\"desc\">Exception container that preserves the exact copy of the original exception </td></tr>\n<tr id=\"row_1_5_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00176.html\" target=\"_self\">thread_closure_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_8_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00173.html\" target=\"_self\">thread_closure_0</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_9_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00174.html\" target=\"_self\">thread_closure_1</a></td><td class=\"desc\">Structure used to pass user function with 1 argument to thread </td></tr>\n<tr id=\"row_1_5_10_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00175.html\" target=\"_self\">thread_closure_2</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_11_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_11_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_11_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00171.html\" target=\"_self\">tbb_thread_v3</a></td><td class=\"desc\">Versioned thread class </td></tr>\n<tr id=\"row_1_5_11_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00085.html\" target=\"_self\">id</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_6_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_6_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>profiling</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_6_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_6_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface10</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00073.html\" target=\"_self\">event</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_7_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_7_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_7_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>strict_ppl</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_7_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00053.html\" target=\"_self\">concurrent_queue</a></td><td class=\"desc\">A high-performance thread-safe non-blocking concurrent queue </td></tr>\n<tr id=\"row_1_8_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00022.html\" target=\"_self\">aligned_space</a></td><td class=\"desc\">Block of space aligned sufficiently to construct an array T with N elements </td></tr>\n<tr id=\"row_1_9_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">atomic</a></td><td class=\"desc\">Primary template for atomic </td></tr>\n<tr id=\"row_1_10_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00028.html\" target=\"_self\">atomic&lt; void * &gt;</a></td><td class=\"desc\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt; </td></tr>\n<tr id=\"row_1_11_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">blocked_range</a></td><td class=\"desc\">A range over which to iterate </td></tr>\n<tr id=\"row_1_12_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00035.html\" target=\"_self\">blocked_range2d</a></td><td class=\"desc\">A 2-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_1_13_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00036.html\" target=\"_self\">blocked_range3d</a></td><td class=\"desc\">A 3-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_1_14_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_14_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_14_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00041.html\" target=\"_self\">cache_aligned_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_14_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00123.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_15_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_15_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_15_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00042.html\" target=\"_self\">cache_aligned_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_15_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00125.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_16_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00047.html\" target=\"_self\">combinable</a></td><td class=\"desc\">Thread-local storage with optional reduction </td></tr>\n<tr id=\"row_1_17_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00049.html\" target=\"_self\">concurrent_bounded_queue</a></td><td class=\"desc\">A high-performance thread-safe blocking concurrent bounded queue </td></tr>\n<tr id=\"row_1_18_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">concurrent_vector</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_1_19_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_19_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_19_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00097.html\" target=\"_self\">mutex</a></td><td class=\"desc\">Wrapper around the platform's native lock </td></tr>\n<tr id=\"row_1_19_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00150.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_20_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_20_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_20_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00099.html\" target=\"_self\">null_mutex</a></td><td class=\"desc\">A mutex which does nothing </td></tr>\n<tr id=\"row_1_20_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00145.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_21_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_21_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_21_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00100.html\" target=\"_self\">null_rw_mutex</a></td><td class=\"desc\">A rw mutex which does nothing </td></tr>\n<tr id=\"row_1_21_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00151.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_22_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00161.html\" target=\"_self\">task_group_context</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_23_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00118.html\" target=\"_self\">pre_scan_tag</a></td><td class=\"desc\">Used to indicate that the initial scan is being performed </td></tr>\n<tr id=\"row_1_24_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00076.html\" target=\"_self\">final_scan_tag</a></td><td class=\"desc\">Used to indicate that the final scan is being performed </td></tr>\n<tr id=\"row_1_25_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00116.html\" target=\"_self\">parallel_while</a></td><td class=\"desc\">Parallel iteration over a stream, with optional addition of more work </td></tr>\n<tr id=\"row_1_26_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00074.html\" target=\"_self\">filter</a></td><td class=\"desc\">A stage in a pipeline </td></tr>\n<tr id=\"row_1_27_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00172.html\" target=\"_self\">thread_bound_filter</a></td><td class=\"desc\">A stage in a pipeline served by a user thread </td></tr>\n<tr id=\"row_1_28_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00117.html\" target=\"_self\">pipeline</a></td><td class=\"desc\">A processing pipeline that applies filters to items </td></tr>\n<tr id=\"row_1_29_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_29_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_29_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00120.html\" target=\"_self\">queuing_mutex</a></td><td class=\"desc\">Queuing mutex with local-only spinning </td></tr>\n<tr id=\"row_1_29_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00142.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_30_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_30_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_30_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00121.html\" target=\"_self\">queuing_rw_mutex</a></td><td class=\"desc\">Queuing reader-writer mutex with local-only spinning </td></tr>\n<tr id=\"row_1_30_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00149.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_31_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_31_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_31_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00135.html\" target=\"_self\">recursive_mutex</a></td><td class=\"desc\">Mutex that allows recursive mutex acquisition </td></tr>\n<tr id=\"row_1_31_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00147.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_32_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_32_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_32_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00140.html\" target=\"_self\">scalable_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_32_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00126.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_33_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_33_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_33_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00141.html\" target=\"_self\">scalable_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_33_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00127.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_34_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_34_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_34_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00154.html\" target=\"_self\">spin_mutex</a></td><td class=\"desc\">A lock that occupies a single byte </td></tr>\n<tr id=\"row_1_34_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00148.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_35_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_35_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_35_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00155.html\" target=\"_self\">spin_rw_mutex_v3</a></td><td class=\"desc\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>\n<tr id=\"row_1_35_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00144.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_36_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00162.html\" target=\"_self\">task_handle</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_37_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00159.html\" target=\"_self\">task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_38_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00156.html\" target=\"_self\">structured_task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_39_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00164.html\" target=\"_self\">task_scheduler_init</a></td><td class=\"desc\">Class delimiting the scope of task scheduler activity </td></tr>\n<tr id=\"row_1_40_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_40_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_40_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00167.html\" target=\"_self\">tbb_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_40_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00131.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_41_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_41_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_41_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00168.html\" target=\"_self\">tbb_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_41_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00128.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_42_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_42_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_42_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00183.html\" target=\"_self\">zero_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_42_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00129.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_43_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_43_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_43_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00184.html\" target=\"_self\">zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_43_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00130.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_44_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00030.html\" target=\"_self\">bad_last_alloc</a></td><td class=\"desc\">Exception for concurrent containers </td></tr>\n<tr id=\"row_1_45_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00086.html\" target=\"_self\">improper_lock</a></td><td class=\"desc\">Exception for PPL locks </td></tr>\n<tr id=\"row_1_46_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00182.html\" target=\"_self\">user_abort</a></td><td class=\"desc\">Exception for user-initiated abort </td></tr>\n<tr id=\"row_1_47_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00095.html\" target=\"_self\">missing_wait</a></td><td class=\"desc\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a> </td></tr>\n<tr id=\"row_1_48_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00088.html\" target=\"_self\">invalid_multiple_scheduling</a></td><td class=\"desc\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a> </td></tr>\n<tr id=\"row_1_49_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00169.html\" target=\"_self\">tbb_exception</a></td><td class=\"desc\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>\n<tr id=\"row_1_50_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00046.html\" target=\"_self\">captured_exception</a></td><td class=\"desc\">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>\n<tr id=\"row_1_51_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00096.html\" target=\"_self\">movable_exception</a></td><td class=\"desc\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>\n<tr id=\"row_1_52_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_52_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_52_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00177.html\" target=\"_self\">tick_count</a></td><td class=\"desc\">Absolute timestamp </td></tr>\n<tr id=\"row_1_52_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00087.html\" target=\"_self\">interval_t</a></td><td class=\"desc\">Relative time interval </td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00016.html\" target=\"_self\">__TBB_malloc_proxy_caller</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Index</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_A\">A</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_B\">B</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_C\">C</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_D\">D</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_E\">E</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_F\">F</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_G\">G</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_I\">I</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_K\">K</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_L\">L</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_M\">M</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_N\">N</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_O\">O</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_P\">P</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Q\">Q</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_R\">R</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_S\">S</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_T\">T</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_U\">U</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Z\">Z</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter__\">_</a></div>\n<table style=\"margin: 10px; white-space: nowrap;\" align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_A\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;A&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00087.html\">tick_count::interval_t</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00119.html\">predecessor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00017.html\">concurrent_hash_map::accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_K\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;K&#160;&#160;</div></td></tr></table>\n</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_Q\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;Q&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00157.html\">successor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00018.html\">concurrent_hash_map::accessor_not_used</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_T\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;T&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00019.html\">aggregator</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00089.html\">opencl_factory::kernel</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_L\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;L&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00158.html\">task_arena</a> (tbb::interface7)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_R\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;R&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00159.html\">task_group</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00022.html\">aligned_space</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00061.html\">concurrent_hash_map::const_accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00090.html\">limiter_node</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00160.html\">task_group_base</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00023.html\">async_helpers</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00062.html\">continue_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_M\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;M&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00161.html\">task_group_context</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00024.html\">async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00132.html\">memory_pool_allocator::rebind</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00025.html\">async_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00091.html\">memory_pool</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00131.html\">tbb_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00026.html\">async_storage</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_D\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;D&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00130.html\">zero_allocator&lt; void, Allocator &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00027.html\">atomic</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator&lt; void, P &gt;</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00129.html\">zero_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a> (tbb::interface6)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00028.html\">atomic&lt; void * &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a> (<a class=\"el\" href=\"a00246.html\">rml</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00128.html\">tbb_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00029.html\">task_arena::attach</a> (tbb::interface7)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00095.html\">missing_wait</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00127.html\">scalable_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_B\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;B&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00096.html\">movable_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00126.html\">scalable_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00168.html\">tbb_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00068.html\">gfx_factory::device_type</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00097.html\">mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00125.html\">cache_aligned_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00069.html\">gfx_factory::dummy_device_selector</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_N\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;N&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00124.html\">memory_pool_allocator&lt; void, P &gt;::rebind</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00031.html\">basic_handler</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_E\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;E&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00123.html\">cache_aligned_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00032.html\">basic_operation</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00098.html\">concurrent_hash_map::node</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00133.html\">receiver</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00070.html\">edge_container</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00099.html\">null_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00034.html\">blocked_range</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00071.html\">concurrent_vector::push_back_helper::element_construction_guard</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00101.html\">null_type</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00136.html\">reservable_predecessor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00073.html\">event</a> (tbb::profiling::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_O\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;O&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00137.html\">round_robin_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> (tbb::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_F\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;F&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00138.html\">run_and_put_task</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00177.html\">tick_count</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a> (tbb::interface6)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_U\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;U&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00039.html\">broadcast_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00074.html\">filter</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_S\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;S&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00040.html\">concurrent_hash_map::bucket_accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_C\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;C&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00105.html\">opencl_device</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00141.html\">scalable_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a> (tbb::interface5::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00078.html\">flattened2d</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00151.html\">null_rw_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor&lt; T, false &gt;</a> (tbb::interface5::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00079.html\">flow_control</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00150.html\">mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00182.html\">user_abort</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00043.html\">concurrent_hash_map::call_clear_on_leave</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_G\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;G&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00109.html\">opencl_node</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00149.html\">queuing_rw_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_Z\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;Z&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00044.html\">callback</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00110.html\">opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00148.html\">spin_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00045.html\">callback_base</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00111.html\">opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00147.html\">recursive_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00046.html\">captured_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00112.html\">opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00146.html\">critical_section_v4::scoped_lock</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00184.html\">zero_allocator&lt; void, Allocator &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00047.html\">combinable</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00113.html\">opencl_program</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00145.html\">null_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter__\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;_&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00048.html\">concrete_filter</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00083.html\">global_control</a> (tbb::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00114.html\">opencl_range</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00144.html\">spin_rw_mutex_v3::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00143.html\">reader_writer_lock::scoped_lock</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_I\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;I&#160;&#160;</div></td></tr></table>\n</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_P\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;P&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00142.html\">queuing_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00152.html\">reader_writer_lock::scoped_lock_read</a> (tbb::interface5)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00116.html\">parallel_while</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00153.html\">sender</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a> (tbb::strict_ppl)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00086.html\">improper_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00117.html\">pipeline</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td></td><td></td><td></td><td></td><td></td></tr>\n</table>\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_A\">A</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_B\">B</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_C\">C</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_D\">D</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_E\">E</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_F\">F</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_G\">G</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_I\">I</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_K\">K</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_L\">L</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_M\">M</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_N\">N</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_O\">O</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_P\">P</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Q\">Q</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_R\">R</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_S\">S</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_T\">T</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_U\">U</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Z\">Z</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter__\">_</a></div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_b9976680b2be72d2d0b8fca1c31202a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/dir_63fb2cc293d133785b96e521fa051167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>include Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">include Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_87119f26c7695cbc270003e99bc7f49f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aligned_space.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00191\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00192\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cache_aligned_allocator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_hash_map.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_lru_cache.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_priority_queue.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_queue.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00199\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00200\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_vector.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>critical_section.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></td></tr>\n<tr class=\"memdesc:a00203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph related classes and functions. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00204\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flow_graph_abstractions.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flow_graph_opencl_node.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00206\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_factory.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_control.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>null_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00211\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>null_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00212\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_do.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_for.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00214\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_for_each.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_invoke.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_reduce.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_scan.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_sort.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_while.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>partitioner.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pipeline.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00222\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>queuing_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>queuing_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>recursive_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>runtime_loader.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00231\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_arena.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00233\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_init.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_observer.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00235\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00236\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_allocator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00237\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_config.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00238\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_disable_exceptions.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00239\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_exception.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00240\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_machine.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_profiling.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00242\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_stddef.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00243\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00244\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbbmalloc_proxy.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tick_count.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>1.0 Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">1.0 Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_63fb2cc293d133785b96e521fa051167\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.5 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tfont-size: 150%;\n}\n\n.title {\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #879ECB;\n\tcolor: #354C7B;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd, p.starttd {\n\tmargin-top: 2px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #C4CFE5;\n        background-color: #FBFCFD;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n        padding: 0px;\n        margin: 0px;\n\tbackground-color: #FBFCFD;\n\tborder: 1px solid #C4CFE5;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n        font-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n        white-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground-color: white;\n\tcolor: black;\n        margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 12px;\n\tmargin-right: 8px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n        white-space: nowrap;\n        vertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #DEE4F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #A8B8D9;\n        border-left: 1px solid #A8B8D9;\n        border-right: 1px solid #A8B8D9;\n        padding: 6px 0px 6px 0px;\n        color: #253555;\n        font-weight: bold;\n        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #A8B8D9;      \n        border-left: 1px solid #A8B8D9;      \n        border-right: 1px solid #A8B8D9; \n        padding: 6px 10px 2px 10px;\n        background-color: #FBFCFD;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFFFF;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n        background-color: #728DC1;\n        border-top:1px solid #5373B4;\n        border-left:1px solid #5373B4;\n        border-right:1px solid #C4CFE5;\n        border-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view when not used as main index */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n        margin: 0px;\n        padding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n        white-space: nowrap;\n        padding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n        width: 100%;\n        padding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #F7F8FB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n        cursor: pointer;\n        padding-left: 2px;\n        padding-right: 2px;\n\tcolor: #3D578C;\n}\n\ndiv.dynheader {\n        margin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n        margin-top: 4px;\n        margin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #283A5D;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#364D7C;\n        font-size: 8pt;\n}\n\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}       \n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n        background-image:url('nav_h.png');\n        background-repeat:repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin:  0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00C0E0;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n        font-weight: bold;\n        color: gray;\n        cursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/dynsections.js",
    "content": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n } \n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function(){ \n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.attr('src','ftv2folderopen.png');\n      a.attr('src','ftv2mnode.png');\n      $(this).show();\n    } else if (l==level+1) {\n      i.attr('src','ftv2folderclosed.png');\n      a.attr('src','ftv2pnode.png');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  //The clicked row\n  var currentRow = $('#row_'+id);\n  var currentRowImages = currentRow.find(\"img\");\n\n  //All rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  //Only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() {\n    var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n    return this.id.match(re);\n  });\n\n  //First row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    currentRowImages.filter(\"[id^=arr]\").attr('src', 'ftv2pnode.png');\n    currentRowImages.filter(\"[id^=img]\").attr('src', 'ftv2folderclosed.png');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide();\n  } else { //We are SHOWING\n    //All sub images\n    var childImages = childRows.find(\"img\");\n    var childImg = childImages.filter(\"[id^=img]\");\n    var childArr = childImages.filter(\"[id^=arr]\");\n\n    currentRow.find(\"[id^=arr]\").attr('src', 'ftv2mnode.png'); //open row\n    currentRow.find(\"[id^=img]\").attr('src', 'ftv2folderopen.png'); //open row\n    childImg.attr('src','ftv2folderclosed.png'); //children closed\n    childArr.attr('src','ftv2pnode.png'); //children closed\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">File List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented files with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00203.html\" target=\"_self\">flow_graph.h</a></td><td class=\"desc\">The graph related classes and functions </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00208.html\" target=\"_self\">memory_pool.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00227.html\" target=\"_self\">scalable_allocator.h</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>abort()\n: <a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>acquire()\n: <a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">tbb::spin_mutex::scoped_lock</a>\n</li>\n<li>add()\n: <a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>add_filter()\n: <a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">tbb::pipeline</a>\n</li>\n<li>allocate()\n: <a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">tbb::internal::tbb_exception_ptr</a>\n</li>\n<li>allocator_type\n: <a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>assign()\n: <a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>at()\n: <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>automatic\n: <a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">tbb::task_scheduler_init</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>back()\n: <a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>begin()\n: <a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>blocked_range()\n: <a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>blocked_rangeNd_impl()\n: <a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n</li>\n<li>blocking_terminate()\n: <a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">tbb::task_scheduler_init</a>\n</li>\n<li>bucket_count()\n: <a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>built_successors_type\n: <a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity()\n: <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cbegin()\n: <a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cend()\n: <a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>cols()\n: <a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>concurrent_priority_queue()\n: <a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_unordered_map()\n: <a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multimap()\n: <a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multiset()\n: <a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_set()\n: <a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>const_accessor()\n: <a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>const_iterator\n: <a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>const_reference\n: <a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>construct()\n: <a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n</li>\n<li>continue_receiver()\n: <a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>crbegin()\n: <a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>crend()\n: <a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>current_thread_index()\n: <a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">tbb::interface7::task_arena</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>deallocate()\n: <a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;</a>\n</li>\n<li>debug_wait_until_empty()\n: <a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">tbb::interface7::task_arena</a>\n</li>\n<li>default_num_threads()\n: <a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">tbb::task_scheduler_init</a>\n</li>\n<li>deferred\n: <a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">tbb::task_scheduler_init</a>\n</li>\n<li>destroy()\n: <a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">tbb::internal::tbb_exception_ptr</a>\n</li>\n<li>detach()\n: <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>difference_type\n: <a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>downgrade_to_reader()\n: <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">tbb::queuing_rw_mutex::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>ec_bad_arg\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_call\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_ver\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_no_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_ok\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_abort\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_status\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_throw\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">tbb::interface6::runtime_loader</a>\n</li>\n<li>emplace()\n: <a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>emplace_back()\n: <a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>empty()\n: <a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>end()\n: <a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>enqueue()\n: <a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">tbb::interface7::task_arena</a>\n</li>\n<li>enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>erase()\n: <a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>error_code\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader</a>\n</li>\n<li>error_mode\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader</a>\n</li>\n<li>exact_exception_propagation\n: <a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">tbb::filter</a>\n</li>\n<li>exclude()\n: <a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>execute()\n: <a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">tbb::interface6::aggregator</a>\n, <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">tbb::interface7::task_arena</a>\n</li>\n<li>execute_impl()\n: <a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>filter_is_bound\n: <a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">tbb::filter</a>\n</li>\n<li>filter_is_out_of_order\n: <a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">tbb::filter</a>\n</li>\n<li>filter_is_serial\n: <a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">tbb::filter</a>\n</li>\n<li>filter_may_emit_null\n: <a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">tbb::filter</a>\n</li>\n<li>find()\n: <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>finish()\n: <a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>fixed_pool()\n: <a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">tbb::interface6::fixed_pool</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>get_allocator()\n: <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>grainsize()\n: <a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>grow_by()\n: <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>grow_to_at_least()\n: <a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>initialize()\n: <a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">tbb::interface7::task_arena</a>\n</li>\n<li>input_type\n: <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>insert()\n: <a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_construct()\n: <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">tbb::spin_mutex</a>\n</li>\n<li>internal_copy()\n: <a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_equal_range()\n: <a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_fast_find()\n: <a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>interval_t()\n: <a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">tbb::tick_count::interval_t</a>\n</li>\n<li>is_active()\n: <a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">tbb::interface7::task_arena</a>\n</li>\n<li>is_divisible()\n: <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_observing()\n: <a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>is_splittable_in_proportion\n: <a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_writer()\n: <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x6a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_j\"></a>- j -</h3><ul>\n<li>join()\n: <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>limiter_node\n: <a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>load()\n: <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">tbb::interface6::runtime_loader</a>\n</li>\n<li>local()\n: <a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>lock()\n: <a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>lock_read()\n: <a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>lookup()\n: <a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>make_filter\n: <a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">tbb::interface6::filter_t&lt; T, U &gt;</a>\n</li>\n<li>malloc_type\n: <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>max_concurrency()\n: <a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">tbb::interface7::task_arena</a>\n</li>\n<li>max_size()\n: <a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n</li>\n<li>may_sleep()\n: <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>memory_pool()\n: <a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>move()\n: <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>\n</li>\n<li>mutex()\n: <a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>my_exception_data\n: <a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>name()\n: <a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>native_handle_type\n: <a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">tbb::recursive_mutex</a>\n</li>\n<li>now()\n: <a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">tbb::tick_count</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>observe()\n: <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3</a>\n, <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>on_scheduler_entry()\n: <a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>on_scheduler_exit()\n: <a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>operator delete()\n: <a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">tbb::tbb_exception</a>\n</li>\n<li>operator()()\n: <a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n<li>operator*()\n: <a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator+\n: <a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator+=()\n: <a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-\n: <a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count::interval_t</a>\n, <a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count</a>\n</li>\n<li>operator-=()\n: <a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-&gt;()\n: <a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator=()\n: <a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>operator[]()\n: <a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>output_type\n: <a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>page_range_type\n: <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>pages()\n: <a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>parallel_while()\n: <a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>pipeline()\n: <a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">tbb::pipeline</a>\n</li>\n<li>pop()\n: <a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>predecessor_type\n: <a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>process()\n: <a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n<li>process_item()\n: <a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">tbb::thread_bound_filter</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>push_back()\n: <a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>queuing_mutex()\n: <a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">tbb::queuing_mutex</a>\n</li>\n<li>queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">tbb::queuing_rw_mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>range()\n: <a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>rbegin()\n: <a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">tbb::recursive_mutex</a>\n</li>\n<li>reference\n: <a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>register_predecessor()\n: <a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>register_successor()\n: <a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n<li>rehash()\n: <a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>release()\n: <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>release_wait()\n: <a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>remove_predecessor()\n: <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>remove_successor()\n: <a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>rend()\n: <a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve()\n: <a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve_wait()\n: <a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>reset_receiver()\n: <a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n<li>resize()\n: <a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>resolution()\n: <a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">tbb::tick_count</a>\n</li>\n<li>row_range_type\n: <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>rows()\n: <a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>run()\n: <a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>run_and_put_task\n: <a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>runtime_loader()\n: <a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>seconds()\n: <a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">tbb::tick_count::interval_t</a>\n</li>\n<li>set_capacity()\n: <a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>set_state()\n: <a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">tbb::mutex</a>\n</li>\n<li>shrink_to_fit()\n: <a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>size_type\n: <a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">tbb::interface6::flattened2d&lt; Container &gt;</a>\n</li>\n<li>spin_mutex()\n: <a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">tbb::spin_mutex</a>\n</li>\n<li>spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>start()\n: <a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>start_routine()\n: <a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>\n, <a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>status()\n: <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">tbb::interface6::runtime_loader</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>successor_type\n: <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>swap()\n: <a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>task_arena()\n: <a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">tbb::interface7::task_arena</a>\n</li>\n<li>task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">tbb::task_scheduler_init</a>\n</li>\n<li>task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>tbb_thread_v3()\n: <a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>terminate()\n: <a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">tbb::task_scheduler_init</a>\n</li>\n<li>throw_self()\n: <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>\n</li>\n<li>tick_count()\n: <a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tbb::tick_count</a>\n</li>\n<li>try_acquire()\n: <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>try_consume()\n: <a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_get()\n: <a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">tbb::mutex</a>\n</li>\n<li>try_lock_read()\n: <a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>try_pop()\n: <a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_process_item()\n: <a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">tbb::thread_bound_filter</a>\n</li>\n<li>try_push()\n: <a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_put()\n: <a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>try_put_task()\n: <a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>try_release()\n: <a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_reserve()\n: <a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">tbb::recursive_mutex</a>\n</li>\n<li>unsafe_size()\n: <a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>upgrade_to_writer()\n: <a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value_type\n: <a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n, <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>what()\n: <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">tbb::captured_exception</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_0x7e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_0x7e\"></a>- ~ -</h3><ul>\n<li>~combinable()\n: <a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">tbb::combinable&lt; T &gt;</a>\n</li>\n<li>~concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>~concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>~const_accessor()\n: <a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>~enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>~fixed_pool()\n: <a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">tbb::interface6::fixed_pool</a>\n</li>\n<li>~memory_pool()\n: <a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>~parallel_while()\n: <a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>~pipeline()\n: <a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">tbb::pipeline</a>\n</li>\n<li>~queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">tbb::queuing_rw_mutex</a>\n</li>\n<li>~reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>~receiver()\n: <a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>~runtime_loader()\n: <a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">tbb::interface6::runtime_loader</a>\n</li>\n<li>~scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>~scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>~spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>~task_arena()\n: <a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">tbb::interface7::task_arena</a>\n</li>\n<li>~task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">tbb::task_scheduler_init</a>\n</li>\n<li>~task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>~task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>~untyped_receiver()\n: <a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Enumerations</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li class=\"current\"><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>error_code\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader</a>\n</li>\n<li>error_mode\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader</a>\n</li>\n<li>malloc_type\n: <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Enumerator</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>ec_bad_arg\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_call\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_ver\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_no_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_ok\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_abort\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_status\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_throw\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>abort()\n: <a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>acquire()\n: <a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">tbb::spin_mutex::scoped_lock</a>\n</li>\n<li>add()\n: <a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>add_filter()\n: <a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">tbb::pipeline</a>\n</li>\n<li>allocate()\n: <a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>allocator_type()\n: <a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>assign()\n: <a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>at()\n: <a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>back()\n: <a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>begin()\n: <a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>blocked_range()\n: <a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>blocked_rangeNd_impl()\n: <a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n</li>\n<li>blocking_terminate()\n: <a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">tbb::task_scheduler_init</a>\n</li>\n<li>bucket_count()\n: <a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity()\n: <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cbegin()\n: <a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cend()\n: <a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>cols()\n: <a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>concurrent_priority_queue()\n: <a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_unordered_map()\n: <a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multimap()\n: <a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multiset()\n: <a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_set()\n: <a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>const_accessor()\n: <a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>construct()\n: <a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n</li>\n<li>continue_receiver()\n: <a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>crbegin()\n: <a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>crend()\n: <a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>current_thread_index()\n: <a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">tbb::interface7::task_arena</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>deallocate()\n: <a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;</a>\n</li>\n<li>debug_wait_until_empty()\n: <a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">tbb::interface7::task_arena</a>\n</li>\n<li>default_num_threads()\n: <a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">tbb::task_scheduler_init</a>\n</li>\n<li>destroy()\n: <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>detach()\n: <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>downgrade_to_reader()\n: <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">tbb::queuing_rw_mutex::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>emplace()\n: <a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>emplace_back()\n: <a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>empty()\n: <a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>end()\n: <a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>enqueue()\n: <a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">tbb::interface7::task_arena</a>\n</li>\n<li>enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>erase()\n: <a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>exclude()\n: <a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>execute()\n: <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">tbb::interface6::aggregator</a>\n, <a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>execute_impl()\n: <a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>find()\n: <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>finish()\n: <a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>fixed_pool()\n: <a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">tbb::interface6::fixed_pool</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>get_allocator()\n: <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>grainsize()\n: <a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>grow_by()\n: <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>grow_to_at_least()\n: <a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>initialize()\n: <a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">tbb::interface7::task_arena</a>\n</li>\n<li>insert()\n: <a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_construct()\n: <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">tbb::spin_mutex</a>\n</li>\n<li>internal_copy()\n: <a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_equal_range()\n: <a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_fast_find()\n: <a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>interval_t()\n: <a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">tbb::tick_count::interval_t</a>\n</li>\n<li>is_active()\n: <a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">tbb::task_scheduler_init</a>\n</li>\n<li>is_divisible()\n: <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_observing()\n: <a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>is_writer()\n: <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x6a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_j\"></a>- j -</h3><ul>\n<li>join()\n: <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>load()\n: <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">tbb::interface6::runtime_loader</a>\n</li>\n<li>local()\n: <a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>lock()\n: <a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">tbb::recursive_mutex</a>\n</li>\n<li>lock_read()\n: <a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>lookup()\n: <a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>max_concurrency()\n: <a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">tbb::interface7::task_arena</a>\n</li>\n<li>max_size()\n: <a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>may_sleep()\n: <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>memory_pool()\n: <a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>move()\n: <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>\n</li>\n<li>mutex()\n: <a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">tbb::mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>name()\n: <a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>now()\n: <a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">tbb::tick_count</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>observe()\n: <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3</a>\n, <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>on_scheduler_entry()\n: <a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>on_scheduler_exit()\n: <a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>operator delete()\n: <a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">tbb::tbb_exception</a>\n</li>\n<li>operator()()\n: <a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n<li>operator*()\n: <a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator+=()\n: <a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-=()\n: <a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-&gt;()\n: <a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n</li>\n<li>operator=()\n: <a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>operator[]()\n: <a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>pages()\n: <a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>parallel_while()\n: <a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>pipeline()\n: <a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">tbb::pipeline</a>\n</li>\n<li>pop()\n: <a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>process()\n: <a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n<li>process_item()\n: <a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">tbb::thread_bound_filter</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>push_back()\n: <a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>queuing_mutex()\n: <a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">tbb::queuing_mutex</a>\n</li>\n<li>queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">tbb::queuing_rw_mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>range()\n: <a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>rbegin()\n: <a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">tbb::recursive_mutex</a>\n</li>\n<li>register_predecessor()\n: <a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>register_successor()\n: <a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>rehash()\n: <a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>release()\n: <a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>release_wait()\n: <a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>remove_predecessor()\n: <a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>remove_successor()\n: <a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n<li>rend()\n: <a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve()\n: <a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve_wait()\n: <a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>reset_receiver()\n: <a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>resize()\n: <a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>resolution()\n: <a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">tbb::tick_count</a>\n</li>\n<li>rows()\n: <a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>run()\n: <a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">tbb::pipeline</a>\n</li>\n<li>runtime_loader()\n: <a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>seconds()\n: <a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">tbb::tick_count::interval_t</a>\n</li>\n<li>set_capacity()\n: <a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>set_state()\n: <a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">tbb::mutex</a>\n</li>\n<li>shrink_to_fit()\n: <a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>spin_mutex()\n: <a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">tbb::spin_mutex</a>\n</li>\n<li>spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>start()\n: <a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>start_routine()\n: <a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>\n, <a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>\n</li>\n<li>status()\n: <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">tbb::interface6::runtime_loader</a>\n</li>\n<li>swap()\n: <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>task_arena()\n: <a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">tbb::interface7::task_arena</a>\n</li>\n<li>task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">tbb::task_scheduler_init</a>\n</li>\n<li>task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>tbb_thread_v3()\n: <a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>terminate()\n: <a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">tbb::task_scheduler_init</a>\n</li>\n<li>throw_self()\n: <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>\n</li>\n<li>tick_count()\n: <a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tbb::tick_count</a>\n</li>\n<li>try_acquire()\n: <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>try_consume()\n: <a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_get()\n: <a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">tbb::mutex</a>\n</li>\n<li>try_lock_read()\n: <a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>try_pop()\n: <a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_process_item()\n: <a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">tbb::thread_bound_filter</a>\n</li>\n<li>try_push()\n: <a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_put()\n: <a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>try_put_task()\n: <a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>try_release()\n: <a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_reserve()\n: <a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">tbb::recursive_mutex</a>\n</li>\n<li>unsafe_size()\n: <a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>upgrade_to_writer()\n: <a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>what()\n: <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">tbb::captured_exception</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_func_0x7e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_0x7e\"></a>- ~ -</h3><ul>\n<li>~combinable()\n: <a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">tbb::combinable&lt; T &gt;</a>\n</li>\n<li>~concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>~concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>~const_accessor()\n: <a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>~enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>~fixed_pool()\n: <a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">tbb::interface6::fixed_pool</a>\n</li>\n<li>~memory_pool()\n: <a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>~parallel_while()\n: <a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>~pipeline()\n: <a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">tbb::pipeline</a>\n</li>\n<li>~queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">tbb::queuing_rw_mutex</a>\n</li>\n<li>~reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>~receiver()\n: <a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>~runtime_loader()\n: <a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">tbb::interface6::runtime_loader</a>\n</li>\n<li>~scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>~scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>~spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>~task_arena()\n: <a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">tbb::interface7::task_arena</a>\n</li>\n<li>~task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">tbb::task_scheduler_init</a>\n</li>\n<li>~task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>~task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>~untyped_receiver()\n: <a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_rela.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Related Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li class=\"current\"><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>limiter_node\n: <a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>make_filter\n: <a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">tbb::interface6::filter_t&lt; T, U &gt;</a>\n</li>\n<li>operator+\n: <a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-\n: <a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count</a>\n, <a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">tbb::tick_count::interval_t</a>\n</li>\n<li>run_and_put_task\n: <a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Typedefs</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li class=\"current\"><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_a\"><span>a</span></a></li>\n      <li><a href=\"#index_b\"><span>b</span></a></li>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_d\"><span>d</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_n\"><span>n</span></a></li>\n      <li><a href=\"#index_o\"><span>o</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>allocator_type\n: <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>built_successors_type\n: <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>const_iterator\n: <a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>const_reference\n: <a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>difference_type\n: <a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>input_type\n: <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>native_handle_type\n: <a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">tbb::recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>output_type\n: <a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>page_range_type\n: <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>predecessor_type\n: <a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>reference\n: <a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>row_range_type\n: <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>size_type\n: <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">tbb::interface6::flattened2d&lt; Container &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>successor_type\n: <a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value_type\n: <a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n, <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/functions_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>automatic\n: <a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">tbb::task_scheduler_init</a>\n</li>\n<li>deferred\n: <a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">tbb::task_scheduler_init</a>\n</li>\n<li>exact_exception_propagation\n: <a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">tbb::filter</a>\n</li>\n<li>filter_is_bound\n: <a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">tbb::filter</a>\n</li>\n<li>filter_is_out_of_order\n: <a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">tbb::filter</a>\n</li>\n<li>filter_is_serial\n: <a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">tbb::filter</a>\n</li>\n<li>filter_may_emit_null\n: <a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">tbb::filter</a>\n</li>\n<li>is_splittable_in_proportion\n: <a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_writer\n: <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>mutex\n: <a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>my_exception_data\n: <a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">tbb::spin_rw_mutex_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented file members with links to the documentation:</div><ul>\n<li>scalable_aligned_free()\n: <a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_malloc()\n: <a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_realloc()\n: <a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_command()\n: <a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_mode()\n: <a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocator.h</a>\n</li>\n<li>scalable_calloc()\n: <a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_allocator.h</a>\n</li>\n<li>scalable_free()\n: <a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_allocator.h</a>\n</li>\n<li>scalable_malloc()\n: <a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_allocator.h</a>\n</li>\n<li>scalable_msize()\n: <a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_allocator.h</a>\n</li>\n<li>scalable_posix_memalign()\n: <a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_allocator.h</a>\n</li>\n<li>scalable_realloc()\n: <a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_allocator.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/globals_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"globals_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>scalable_aligned_free()\n: <a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_malloc()\n: <a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_realloc()\n: <a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_command()\n: <a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_mode()\n: <a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocator.h</a>\n</li>\n<li>scalable_calloc()\n: <a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_allocator.h</a>\n</li>\n<li>scalable_free()\n: <a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_allocator.h</a>\n</li>\n<li>scalable_malloc()\n: <a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_allocator.h</a>\n</li>\n<li>scalable_msize()\n: <a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_allocator.h</a>\n</li>\n<li>scalable_posix_memalign()\n: <a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_allocator.h</a>\n</li>\n<li>scalable_realloc()\n: <a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_allocator.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/hierarchy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Hierarchy</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Hierarchy</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00016.html\" target=\"_self\">__TBB_malloc_proxy_caller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00018.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img id=\"arr_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00021.html\" target=\"_self\">tbb::interface6::aggregator_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_2_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('2_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00033.html\" target=\"_self\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00022.html\" target=\"_self\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"desc\">Block of space aligned sufficiently to construct an array T with N elements </td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><img id=\"arr_4_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('4_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>Allocator</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00183.html\" target=\"_self\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_4_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00184.html\" target=\"_self\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><img id=\"arr_5_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('5_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>allocator_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; padded_element, padded_allocator_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00023.html\" target=\"_self\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00024.html\" target=\"_self\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><img id=\"arr_8_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('8_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00025.html\" target=\"_self\">tbb::flow::interface10::async_msg&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00102.html\" target=\"_self\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><img id=\"arr_9_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('9_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>async_msg</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00080.html\" target=\"_self\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00026.html\" target=\"_self\">tbb::flow::interface10::internal::async_storage&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><img id=\"arr_11_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('11_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>atomic_impl</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; internal::Token &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; intptr_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; state_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; status_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::flow::interface10::opencl_device::device_id_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface5::reader_writer_lock::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface5::reader_writer_lock::scoped_lock_read * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface6::aggregator_operation * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::queuing_mutex::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::queuing_rw_mutex::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; uintptr_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; T &gt;</a></td><td class=\"desc\">Primary template for atomic </td></tr>\n<tr id=\"row_11_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00028.html\" target=\"_self\">tbb::atomic&lt; void * &gt;</a></td><td class=\"desc\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt; </td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00029.html\" target=\"_self\">tbb::interface7::task_arena::attach</a></td><td class=\"desc\">Tag class used to indicate the \"attaching\" constructor </td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><img id=\"arr_13_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('13_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>bad_alloc</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00030.html\" target=\"_self\">tbb::bad_last_alloc</a></td><td class=\"desc\">Exception for concurrent containers </td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00031.html\" target=\"_self\">tbb::interface6::internal::basic_handler</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"desc\">A range over which to iterate </td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00035.html\" target=\"_self\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"desc\">A 2-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_17_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00036.html\" target=\"_self\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"desc\">A 3-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_18_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; ColValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_19_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; I &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_20_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; PageValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_21_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; RowValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_22_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00037.html\" target=\"_self\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_23_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00038.html\" target=\"_self\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_24_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00039.html\" target=\"_self\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_25_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00041.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_26_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00042.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_27_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00043.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_28_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00047.html\" target=\"_self\">tbb::combinable&lt; T &gt;</a></td><td class=\"desc\">Thread-local storage with optional reduction </td></tr>\n<tr id=\"row_29_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00048.html\" target=\"_self\">tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_30_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00052.html\" target=\"_self\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"desc\">Concurrent priority queue </td></tr>\n<tr id=\"row_31_\"><td class=\"entry\"><img id=\"arr_31_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('31_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_queue_base_v3</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_31_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00053.html\" target=\"_self\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"desc\">A high-performance thread-safe non-blocking concurrent queue </td></tr>\n<tr id=\"row_32_\" class=\"even\"><td class=\"entry\"><img id=\"arr_32_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('32_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_queue_base_v8</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_32_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00049.html\" target=\"_self\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"desc\">A high-performance thread-safe blocking concurrent bounded queue </td></tr>\n<tr id=\"row_33_\"><td class=\"entry\"><img id=\"arr_33_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('33_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_unordered_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00054.html\" target=\"_self\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00056.html\" target=\"_self\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00057.html\" target=\"_self\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00058.html\" target=\"_self\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_34_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00055.html\" target=\"_self\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_35_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00059.html\" target=\"_self\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_\" class=\"even\"><td class=\"entry\"><img id=\"arr_36_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('36_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_vector_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; padded_element, padded_allocator_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_37_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00062.html\" target=\"_self\">tbb::flow::interface10::continue_msg</a></td><td class=\"desc\">An empty class used for messages that mean \"I'm done\" </td></tr>\n<tr id=\"row_38_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00065.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_device_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_39_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00066.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_40_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00068.html\" target=\"_self\">tbb::flow::interface9::gfx_factory::device_type</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_41_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00069.html\" target=\"_self\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_42_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_43_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">tbb::flow::interface10::internal::edge_container&lt; predecessor_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_44_\" class=\"even\"><td class=\"entry\"><img id=\"arr_44_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('44_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>ets_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_44_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00072.html\" target=\"_self\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"desc\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container </td></tr>\n<tr id=\"row_45_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00073.html\" target=\"_self\">tbb::profiling::interface10::event</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_46_\" class=\"even\"><td class=\"entry\"><img id=\"arr_46_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('46_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>exception</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_46_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00086.html\" target=\"_self\">tbb::improper_lock</a></td><td class=\"desc\">Exception for PPL locks </td></tr>\n<tr id=\"row_46_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00088.html\" target=\"_self\">tbb::invalid_multiple_scheduling</a></td><td class=\"desc\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a> </td></tr>\n<tr id=\"row_46_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00095.html\" target=\"_self\">tbb::missing_wait</a></td><td class=\"desc\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a> </td></tr>\n<tr id=\"row_46_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_46_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('46_3_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00169.html\" target=\"_self\">tbb::tbb_exception</a></td><td class=\"desc\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>\n<tr id=\"row_46_3_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00046.html\" target=\"_self\">tbb::captured_exception</a></td><td class=\"desc\">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>\n<tr id=\"row_46_3_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00096.html\" target=\"_self\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"desc\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>\n<tr id=\"row_46_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00182.html\" target=\"_self\">tbb::user_abort</a></td><td class=\"desc\">Exception for user-initiated abort </td></tr>\n<tr id=\"row_47_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00075.html\" target=\"_self\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"desc\">Class representing a chain of type-safe pipeline filters </td></tr>\n<tr id=\"row_48_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00076.html\" target=\"_self\">tbb::final_scan_tag</a></td><td class=\"desc\">Used to indicate that the final scan is being performed </td></tr>\n<tr id=\"row_49_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00078.html\" target=\"_self\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_50_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00079.html\" target=\"_self\">tbb::interface6::flow_control</a></td><td class=\"desc\">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>\n<tr id=\"row_51_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00081.html\" target=\"_self\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_52_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00082.html\" target=\"_self\">tbb::flow::interface9::gfx_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_53_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00083.html\" target=\"_self\">tbb::interface9::global_control</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_54_\" class=\"even\"><td class=\"entry\"><img id=\"arr_54_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('54_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00084.html\" target=\"_self\">tbb::flow::interface10::graph_proxy</a></td><td class=\"desc\">Pure virtual template classes that define interfaces for async communication </td></tr>\n<tr id=\"row_54_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00134.html\" target=\"_self\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_55_\"><td class=\"entry\"><img id=\"arr_55_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('55_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>hash_map_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_55_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00050.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"desc\">Unordered map from Key to T </td></tr>\n<tr id=\"row_56_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00085.html\" target=\"_self\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_57_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00087.html\" target=\"_self\">tbb::tick_count::interval_t</a></td><td class=\"desc\">Relative time interval </td></tr>\n<tr id=\"row_58_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00090.html\" target=\"_self\">tbb::flow::interface10::limiter_node&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_59_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00092.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_60_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00093.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_61_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00094.html\" target=\"_self\">rml::MemPoolPolicy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_62_\" class=\"even\"><td class=\"entry\"><img id=\"arr_62_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('62_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>mutex_copy_deprecated_and_disabled</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_62_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00097.html\" target=\"_self\">tbb::mutex</a></td><td class=\"desc\">Wrapper around the platform's native lock </td></tr>\n<tr id=\"row_62_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00099.html\" target=\"_self\">tbb::null_mutex</a></td><td class=\"desc\">A mutex which does nothing </td></tr>\n<tr id=\"row_62_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00100.html\" target=\"_self\">tbb::null_rw_mutex</a></td><td class=\"desc\">A rw mutex which does nothing </td></tr>\n<tr id=\"row_62_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00120.html\" target=\"_self\">tbb::queuing_mutex</a></td><td class=\"desc\">Queuing mutex with local-only spinning </td></tr>\n<tr id=\"row_62_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00121.html\" target=\"_self\">tbb::queuing_rw_mutex</a></td><td class=\"desc\">Queuing reader-writer mutex with local-only spinning </td></tr>\n<tr id=\"row_62_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00135.html\" target=\"_self\">tbb::recursive_mutex</a></td><td class=\"desc\">Mutex that allows recursive mutex acquisition </td></tr>\n<tr id=\"row_62_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00154.html\" target=\"_self\">tbb::spin_mutex</a></td><td class=\"desc\">A lock that occupies a single byte </td></tr>\n<tr id=\"row_62_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00155.html\" target=\"_self\">tbb::spin_rw_mutex_v3</a></td><td class=\"desc\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>\n<tr id=\"row_63_\"><td class=\"entry\"><img id=\"arr_63_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('63_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_assign</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_63_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_\" class=\"even\"><td class=\"entry\"><img id=\"arr_64_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('64_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_assign</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00089.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00113.html\" target=\"_self\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00051.html\" target=\"_self\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00162.html\" target=\"_self\">tbb::task_handle&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_\"><td class=\"entry\"><img id=\"arr_65_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_copy</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00019.html\" target=\"_self\">tbb::interface6::aggregator</a></td><td class=\"desc\">Basic aggregator interface </td></tr>\n<tr id=\"row_65_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00071.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00074.html\" target=\"_self\">tbb::filter</a></td><td class=\"desc\">A stage in a pipeline </td></tr>\n<tr id=\"row_65_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00172.html\" target=\"_self\">tbb::thread_bound_filter</a></td><td class=\"desc\">A stage in a pipeline served by a user thread </td></tr>\n<tr id=\"row_65_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_3_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00045.html\" target=\"_self\">tbb::flow::interface10::callback_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_3_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00044.html\" target=\"_self\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00122.html\" target=\"_self\">tbb::interface5::reader_writer_lock</a></td><td class=\"desc\">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>\n<tr id=\"row_65_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00143.html\" target=\"_self\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"desc\">The scoped lock pattern for write locks </td></tr>\n<tr id=\"row_65_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00152.html\" target=\"_self\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"desc\">The scoped lock pattern for read locks </td></tr>\n<tr id=\"row_65_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"desc\">Aggregator base class and expert interface </td></tr>\n<tr id=\"row_65_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00139.html\" target=\"_self\">tbb::interface6::runtime_loader</a></td><td class=\"desc\">Load TBB at runtime </td></tr>\n<tr id=\"row_65_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00064.html\" target=\"_self\">tbb::internal::critical_section_v4</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00146.html\" target=\"_self\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_12_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_12_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00160.html\" target=\"_self\">tbb::internal::task_group_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00156.html\" target=\"_self\">tbb::structured_task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00159.html\" target=\"_self\">tbb::task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00150.html\" target=\"_self\">tbb::mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00145.html\" target=\"_self\">tbb::null_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00151.html\" target=\"_self\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00116.html\" target=\"_self\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"desc\">Parallel iteration over a stream, with optional addition of more work </td></tr>\n<tr id=\"row_65_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00142.html\" target=\"_self\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00149.html\" target=\"_self\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00147.html\" target=\"_self\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00148.html\" target=\"_self\">tbb::spin_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00144.html\" target=\"_self\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00164.html\" target=\"_self\">tbb::task_scheduler_init</a></td><td class=\"desc\">Class delimiting the scope of task scheduler activity </td></tr>\n<tr id=\"row_66_\" class=\"even\"><td class=\"entry\"><img id=\"arr_66_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('66_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>node_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_66_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00098.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_67_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00101.html\" target=\"_self\">tbb::flow::interface10::null_type</a></td><td class=\"desc\">A generic null type </td></tr>\n<tr id=\"row_68_\" class=\"even\"><td class=\"entry\"><img id=\"arr_68_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('68_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00103.html\" target=\"_self\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_68_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00115.html\" target=\"_self\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_69_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00105.html\" target=\"_self\">tbb::flow::interface10::opencl_device</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_70_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00106.html\" target=\"_self\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_71_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_72_\" class=\"even\"><td class=\"entry\"><img id=\"arr_72_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('72_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_72_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_73_\"><td class=\"entry\"><img id=\"arr_73_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('73_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00108.html\" target=\"_self\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_73_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00104.html\" target=\"_self\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_74_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; Args &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_75_\"><td class=\"entry\"><img id=\"arr_75_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('75_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, opencl_info::default_opencl_factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_75_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00111.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_76_\" class=\"even\"><td class=\"entry\"><img id=\"arr_76_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('76_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, queueing, opencl_info::default_opencl_factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_76_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00110.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_77_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00114.html\" target=\"_self\">tbb::flow::interface10::opencl_range</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_78_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00117.html\" target=\"_self\">tbb::pipeline</a></td><td class=\"desc\">A processing pipeline that applies filters to items </td></tr>\n<tr id=\"row_79_\"><td class=\"entry\"><img id=\"arr_79_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('79_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>pool_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_79_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00077.html\" target=\"_self\">tbb::interface6::fixed_pool</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_79_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00091.html\" target=\"_self\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"desc\">Thread-safe growable pool allocator for variable-size requests </td></tr>\n<tr id=\"row_80_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00118.html\" target=\"_self\">tbb::pre_scan_tag</a></td><td class=\"desc\">Used to indicate that the initial scan is being performed </td></tr>\n<tr id=\"row_81_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00119.html\" target=\"_self\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_82_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00123.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_83_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00124.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_84_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00125.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_85_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00126.html\" target=\"_self\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_86_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00127.html\" target=\"_self\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_87_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00128.html\" target=\"_self\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_88_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00129.html\" target=\"_self\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_89_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00130.html\" target=\"_self\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_90_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00131.html\" target=\"_self\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_91_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00132.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_92_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00136.html\" target=\"_self\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_93_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00137.html\" target=\"_self\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_94_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00138.html\" target=\"_self\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_95_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00140.html\" target=\"_self\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_96_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00141.html\" target=\"_self\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_97_\"><td class=\"entry\"><img id=\"arr_97_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('97_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>scoped_t</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_97_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_97_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('97_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00061.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"desc\">Combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_97_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00017.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"desc\">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_98_\" class=\"even\"><td class=\"entry\"><img id=\"arr_98_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('98_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>scoped_t</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_98_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00040.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"desc\">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>\n<tr id=\"row_99_\"><td class=\"entry\"><img id=\"arr_99_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('99_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>streaming_node</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_99_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00112.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_100_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00157.html\" target=\"_self\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_101_\"><td class=\"entry\"><img id=\"arr_101_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('101_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>task</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_101_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00163.html\" target=\"_self\">tbb::internal::task_handle_task&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_102_\" class=\"even\"><td class=\"entry\"><img id=\"arr_102_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('102_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>task_arena_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_102_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00158.html\" target=\"_self\">tbb::interface7::task_arena</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_103_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00161.html\" target=\"_self\">tbb::task_group_context</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_104_\" class=\"even\"><td class=\"entry\"><img id=\"arr_104_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('104_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00166.html\" target=\"_self\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_104_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00165.html\" target=\"_self\">tbb::interface6::task_scheduler_observer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_105_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00167.html\" target=\"_self\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_106_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00168.html\" target=\"_self\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_107_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00170.html\" target=\"_self\">tbb::internal::tbb_exception_ptr</a></td><td class=\"desc\">Exception container that preserves the exact copy of the original exception </td></tr>\n<tr id=\"row_108_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00171.html\" target=\"_self\">tbb::internal::tbb_thread_v3</a></td><td class=\"desc\">Versioned thread class </td></tr>\n<tr id=\"row_109_\"><td class=\"entry\"><img id=\"arr_109_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('109_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00176.html\" target=\"_self\">tbb::internal::thread_closure_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_109_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00173.html\" target=\"_self\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_109_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00174.html\" target=\"_self\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"desc\">Structure used to pass user function with 1 argument to thread </td></tr>\n<tr id=\"row_109_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00175.html\" target=\"_self\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_110_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00177.html\" target=\"_self\">tbb::tick_count</a></td><td class=\"desc\">Absolute timestamp </td></tr>\n<tr id=\"row_111_\"><td class=\"entry\"><img id=\"arr_111_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('111_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00178.html\" target=\"_self\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_111_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_111_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('111_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_111_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00063.html\" target=\"_self\">tbb::flow::interface10::continue_receiver</a></td><td class=\"desc\">Base class for receivers of completion messages </td></tr>\n<tr id=\"row_111_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"desc\">Pure virtual template class that defines a receiver of messages of type T </td></tr>\n<tr id=\"row_112_\" class=\"even\"><td class=\"entry\"><img id=\"arr_112_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('112_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00179.html\" target=\"_self\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_112_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00153.html\" target=\"_self\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"desc\">Forward declaration section </td></tr>\n<tr id=\"row_113_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00180.html\" target=\"_self\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_114_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00181.html\" target=\"_self\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Main Page</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Main Page </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Click the tabs above for information about the</p>\n<ul>\n<li><a href=\"./modules.html\">Modules</a> (groups of functionality) implemented by the library</li>\n<li><a href=\"./annotated.html\">Classes</a> provided by the library</li>\n<li><a href=\"./files.html\">Files</a> constituting the library.</li>\n</ul>\n<p>Please note that significant part of TBB functionality is implemented in the form of template functions, descriptions of which are not accessible on the <a href=\"./annotated.html\">Classes</a> tab. Use <a href=\"./modules.html\">Modules</a> or <a href=\"./namespacemembers.html\">Namespace/Namespace Members</a> tabs to find them.</p>\n<p>Additional pieces of information can be found here</p>\n<ul>\n<li><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))\n}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;\nif(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false\n}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1\n},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);\nax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;\nif(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)\n}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b\n})}})(window);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/modules.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Modules</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li class=\"current\"><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Modules</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all modules:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00271.html\" target=\"_self\">Algorithms</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00272.html\" target=\"_self\">Containers</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00273.html\" target=\"_self\">Memory Allocation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00274.html\" target=\"_self\">Synchronization</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00275.html\" target=\"_self\">Timing</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00276.html\" target=\"_self\">Task Scheduling</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespacemembers.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index__\"><span>_</span></a></li>\n      <li><a href=\"#index_a\"><span>a</span></a></li>\n      <li><a href=\"#index_e\"><span>e</span></a></li>\n      <li><a href=\"#index_f\"><span>f</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented namespace members with links to the namespaces they belong to:</div>\n\n<h3><a class=\"anchor\" id=\"index__\"></a>- _ -</h3><ul>\n<li>__TBB_DECL_ATOMIC_ALT()\n: <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>acquire\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>ets_key_usage_type\n: <a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>full_fence\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>memory_semantics\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>parallel_deterministic_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb</a>\n</li>\n<li>parallel_for()\n: <a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb</a>\n</li>\n<li>parallel_for_each()\n: <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb</a>\n</li>\n<li>parallel_invoke()\n: <a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb</a>\n</li>\n<li>parallel_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb</a>\n</li>\n<li>parallel_scan()\n: <a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb</a>\n</li>\n<li>parallel_sort()\n: <a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>relaxed\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb</a>\n</li>\n<li>release\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>speculative_spin_mutex\n: <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>TBB_runtime_interface_version()\n: <a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">tbb</a>\n</li>\n<li>tbb_thread\n: <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespacemembers_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>ets_key_usage_type\n: <a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">tbb</a>\n</li>\n<li>memory_semantics\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespacemembers_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>acquire\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">tbb</a>\n</li>\n<li>full_fence\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">tbb</a>\n</li>\n<li>relaxed\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb</a>\n</li>\n<li>release\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespacemembers_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index__\"><span>_</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index__\"></a>- _ -</h3><ul>\n<li>__TBB_DECL_ATOMIC_ALT()\n: <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>parallel_deterministic_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb</a>\n</li>\n<li>parallel_for()\n: <a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb</a>\n</li>\n<li>parallel_for_each()\n: <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb</a>\n</li>\n<li>parallel_invoke()\n: <a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb</a>\n</li>\n<li>parallel_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb</a>\n</li>\n<li>parallel_scan()\n: <a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb</a>\n</li>\n<li>parallel_sort()\n: <a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>TBB_runtime_interface_version()\n: <a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespacemembers_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>speculative_spin_mutex\n: <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb</a>\n</li>\n<li>tbb_thread\n: <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/namespaces.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Namespace List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented namespaces with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00246.html\" target=\"_self\">rml</a></td><td class=\"desc\">The namespace rml contains components of low-level memory pool interface </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00249.html\" target=\"_self\">tbb</a></td><td class=\"desc\">The graph class </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/pages.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Related Pages</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Related Pages</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all related documentation pages:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00008.html\" target=\"_self\">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/doc/html/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Getting Started Samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Getting Started Samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains the examples referenced by the Intel&reg; Threading Building Blocks <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a>.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sub_string_finder/readme.html\">sub_string_finder</a>\n\t\t\t\t<dd>Finds largest matching substrings.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=sub_string_finder_extended\nARGS=\nLIGHT_PROG=sub_string_finder\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifneq (,$(findstring mic, $(offload)))\noverride CXXFLAGS += -qoffload-arch=$(offload) -qopt-report-phase:offload -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -qoffload-option,mic,ld,\"-ltbb_debug\"\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\nifeq ($(offload),)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB) $(LIBS)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp $(TBBLIB) $(LIBS)\nendif\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB) $(LIBS)\n\ndebug: *.cpp\nifeq ($(offload),)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB_DEBUG) $(LIBS)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp  $(TBBLIB_DEBUG) $(LIBS)\nendif\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(LIGHT_PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs examples.\nPROG=sub_string_finder_extended\nARGS=\nLIGHT_PROG=sub_string_finder\n\n# The C++ compiler options\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\noffload1 = $(offload)+\nOFFLOADFLAGS1 = $(offload1:mic+=/Qoffload-arch=mic)\nOFFLOADFLAGS2 = $(OFFLOADFLAGS1:mic-avx512+=/Qoffload-arch=mic-avx512)\noffload2 = $(offload:mic-avx512=mic)\nOFFLOADFLAGS = $(OFFLOADFLAGS2:+=) $(offload2:mic=/D__TBB_MIC_OFFLOAD /Qdiag-disable:3335,3440,3441)\n\nMYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(OFFLOADFLAGS) $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nTBB_MIC_LIB = $(offload2:mic=/Qtbb)\nTBB_DEBUG_MIC_LIB = $(offload2:mic=/Qoffload-option,mic,link,\"-ltbb_debug\")\n\nall: release test\nrelease: compiler_check\n\t$(CXX) sub_string_finder.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe\n\t$(CXX) sub_string_finder_extended.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe\n\t$(CXX) sub_string_finder_pretty.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe\ndebug: compiler_check\n\t$(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe\n\t$(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe\n\t$(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe\nclean:\n\t@cmd.exe /C del sub_string_finder*.exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(LIGHT_PROG) $(ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"sub_string_finder\", \"sub_string_finder.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A2525}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"sub_string_finder_extended\", \"sub_string_finder_extended.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A2526}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"sub_string_finder_pretty\", \"sub_string_finder_pretty.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A2524}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>sub_string_finder</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2525}</ProjectGuid>\n    <RootNamespace>sub_string_finder</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\sub_string_finder.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>sub_string_finder_extended</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2526}</ProjectGuid>\n    <RootNamespace>sub_string_finder_extended</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\sub_string_finder_extended.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>sub_string_finder_pretty</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2524}</ProjectGuid>\n    <RootNamespace>sub_string_finder_pretty</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\sub_string_finder_pretty.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Sub_string_finder sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Sub_string_finder sample</h1>\n\t</div>\n\n\t<p>\n\t\tA simple example that uses the parallel_for template in a substring matching program.\n\t\tThe Intel&reg; Threading Building Blocks <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a> describes this example.\n\t<br><br>\n\t\tFor each position \n\t\tin a string, the program displays the length of the largest matching substring elsewhere in the string. \n\t\tThe program also displays the location of a largest match for each position.  Consider the string \"babba\" \n\t\tas an example. Starting at position 0, \"ba\" is the largest substring with a match elsewhere in the \n\t\tstring (position 3). \n\t<br><br>\n\t\tThe code located in the <a href=\"sub_string_finder_extended.cpp\">sub_string_finder_extended.cpp</a> file \n\t\tdemonstrates offload programming for Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sub_string_finder.cpp\">sub_string_finder.cpp</a>\n\t\t\t\t<dd>The example as it appears in the Getting Started Guide.\n\t\t\t\t<dt><a href=\"sub_string_finder_extended.cpp\">sub_string_finder_extended.cpp</a>\n\t\t\t\t<dd>An example similar to the one in the Getting Started Guide, but with an added sequential\n\t\t\t\t\timplementation, and with an offload region added that can be executed on Intel&reg; MIC Architecture based coprocessor.\n\t\t\t\t\tThe three implementations are timed, by using tick_count,\n\t\t\t\t\tand the speedup of the parallel version and \n\t\t\t\t\tthe speedup of the parallel version and, if applicable, the offload version is calculated and displayed.\n\t\t\t\t<dt><a href=\"sub_string_finder_pretty.cpp\">sub_string_finder_pretty.cpp</a>\n\t\t\t\t<dd>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>sub_string_finder</tt>\n\t\t\t\t<dd>Runs the example as it appears in the Getting Started Guide.\n\t\t\t\t<dt><tt>sub_string_finder_pretty</tt>\n\t\t\t\t<dd>Runs the similar example with more attractive printing of the results.\n\t\t\t\t<dt><tt>sub_string_finder_extended</tt>\n\t\t\t\t<dd>Runs the example extended with a sequential implementation and an offload region that can be executed on Intel&reg; MIC Architecture based coprocessor.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the <tt>sub_string_finder_pretty</tt> example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it, e.g., <tt>sub_string_finder_pretty</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n#include <vector>\n#include <algorithm>    //std::max\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic const std::size_t N = 23;\n\nclass SubStringFinder {\n    const std::string &str;\n    std::vector<std::size_t> &max_array;\n    std::vector<std::size_t> &pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t> &r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < str.size(); ++j) {\n                if (j != i) {\n                    std::size_t limit = str.size()-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k > max_size) {\n                            max_size = k;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n\n    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :\n        str(s), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n\n    std::vector<std::size_t> max(num_elem);\n    std::vector<std::size_t> pos(num_elem);\n\n    tbb::parallel_for( tbb::blocked_range<std::size_t>( 0, num_elem ),\n                SubStringFinder( to_scan, max, pos ) );\n\n    for (std::size_t i = 0; i < num_elem; ++i)\n        std::cout << \" \" << max[i] << \"(\" << pos[i] << \")\" << std::endl;\n\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include <iostream>\n#include <string>\n#include <vector>\n#include <algorithm>    //std::max\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n\nclass __declspec(target(mic)) SubStringFinder;\n#endif // __TBB_MIC_OFFLOAD\n\nstatic const std::size_t N = 22;\n\nvoid SerialSubStringFinder ( const std::string &str, std::vector<std::size_t> &max_array, std::vector<std::size_t> &pos_array ) {\n    for (std::size_t i = 0; i < str.size(); ++i) {\n        std::size_t max_size = 0, max_pos = 0;\n        for (std::size_t j = 0; j < str.size(); ++j)\n            if (j != i) {\n                std::size_t limit = str.size()-(std::max)(i,j);\n                for (std::size_t k = 0; k < limit; ++k) {\n                    if (str[i + k] != str[j + k])\n                        break;\n                    if (k > max_size) {\n                        max_size = k;\n                        max_pos = j;\n                    }\n                }\n            }\n        max_array[i] = max_size;\n        pos_array[i] = max_pos;\n    }\n}\n\nclass SubStringFinder {\n    const char *str;\n    const std::size_t len;\n    std::size_t *max_array;\n    std::size_t *pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < len; ++j) {\n                if (j != i) {\n                    std::size_t limit = len-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k > max_size) {\n                            max_size = k;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n    // We do not use std::vector for compatibility with offload execution\n    SubStringFinder( const char *s, const std::size_t s_len, std::size_t *m, std::size_t *p ) :\n        str(s), len(s_len), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    using namespace tbb;\n\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n\n    std::vector<std::size_t> max1(num_elem);\n    std::vector<std::size_t> pos1(num_elem);\n    std::vector<std::size_t> max2(num_elem);\n    std::vector<std::size_t> pos2(num_elem);\n\n    std::cout << \" Done building string.\" << std::endl;\n\n    tick_count serial_t0 = tick_count::now();\n    SerialSubStringFinder( to_scan, max2, pos2 );\n    tick_count serial_t1 = tick_count::now();\n    std::cout << \" Done with serial version.\" << std::endl;\n\n    tick_count parallel_t0 = tick_count::now();\n    parallel_for(blocked_range<std::size_t>(0, num_elem, 100),\n            SubStringFinder( to_scan.c_str(), num_elem, &max1[0], &pos1[0] ) );\n    tick_count parallel_t1 = tick_count::now();\n    std::cout << \" Done with parallel version.\" << std::endl;\n\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        if (max1[i] != max2[i] || pos1[i] != pos2[i]) {\n            std::cout << \"ERROR: Serial and Parallel Results are Different!\" << std::endl;\n            break;\n        }\n    }\n    std::cout << \" Done validating results.\" << std::endl;\n\n    std::cout << \"Serial version ran in \" << (serial_t1 - serial_t0).seconds() << \" seconds\" << std::endl\n              << \"Parallel version ran in \" <<  (parallel_t1 - parallel_t0).seconds() << \" seconds\" << std::endl\n              << \"Resulting in a speedup of \" << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << std::endl;\n\n#if __TBB_MIC_OFFLOAD\n    // Do offloadable version. Do the timing on host.\n\n    std::vector<std::size_t> max3(num_elem);\n    std::vector<std::size_t> pos3(num_elem);\n\n    std::size_t *max3_array = &max3[0];   // method data() for vector is not available in C++03\n    std::size_t *pos3_array = &pos3[0];\n    tick_count parallel_tt0 = tick_count::now();\n    const char *to_scan_str = to_scan.c_str();  // Offload the string as a char array.\n    #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3_array,pos3_array:length(num_elem))\n    {\n        parallel_for(blocked_range<std::size_t>(0, num_elem, 100),\n                SubStringFinder ( to_scan_str, num_elem, max3_array, pos3_array ) );\n    }\n    tick_count parallel_tt1 = tick_count::now();\n    std::cout << \" Done with offloadable version.\" << std::endl;\n\n    // Do validation of offloadable results on host.\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        if (max1[i] != max3[i] || pos1[i] != pos3[i]) {\n            std::cout << \"ERROR: Serial and Offloadable Results are Different!\" << std::endl;\n            break;\n        }\n    }\n    std::cout << \" Done validating offloadable results.\" << std::endl;\n\n    std::cout << \"Offloadable version ran in \" << (parallel_tt1 - parallel_tt0).seconds() << \" seconds\" << std::endl\n              << \"Resulting in a speedup of \" << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds()\n              << \" of offloadable version\" << std::endl;\n\n#endif // __TBB_MIC_OFFLOAD\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n#include <algorithm>\n#include <vector>\n#include <algorithm>    //std::max\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic const std::size_t N = 9;\n\nclass SubStringFinder {\n    const std::string &str;\n    std::vector<std::size_t> &max_array;\n    std::vector<std::size_t> &pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < str.size(); ++j) {\n                if (j != i) {\n                    std::size_t limit = str.size()-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k+1 > max_size) {\n                            max_size = k+1;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n\n    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :\n        str(s), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    using namespace tbb;\n\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n    std::cout << \"String to scan: \" << to_scan << std::endl;\n\n    std::vector<std::size_t> max( num_elem );\n    std::vector<std::size_t> pos( num_elem );\n\n    parallel_for( blocked_range<std::size_t>( 0, num_elem, 100 ),\n            SubStringFinder( to_scan, max, pos ) );\n\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        for (std::size_t j = 0; j < num_elem; ++j) {\n            if (j >= i && j < i + max[i])\n                std::cout << \"_\";\n            else\n                std::cout << \" \";\n        }\n        std::cout << std::endl << to_scan << std::endl;\n\n        for (std::size_t j = 0; j < num_elem; ++j) {\n            if (j >= pos[i] && j < pos[i] + max[i])\n                std::cout << \"*\";\n            else\n                std::cout << \" \";\n        }\n        std::cout << std::endl;\n    }\n\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sub_string_finder.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */; };\n\t\tA1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594140B8F1E2D00073279 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F5941D0B8F1F2D00073279 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n\t\tA1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_extended.cpp; path = ../sub_string_finder_extended.cpp; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594080B8F1D8E00073279 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594190B8F1F0900073279 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* sub_string_finder */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = sub_string_finder;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */,\n\t\t\t\tA1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */,\n\t\t\t\tA1F593A50B8F042A00073279 /* sub_string_finder.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* sub_string_finder */,\n\t\t\t\tA1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */,\n\t\t\t\tA1F5941B0B8F1F0900073279 /* sub_string_finder_extended */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* sub_string_finder */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"sub_string_finder\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = sub_string_finder;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = sub_string_finder;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* sub_string_finder */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tA1F594090B8F1D8E00073279 /* sub_string_finder_pretty */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget \"sub_string_finder_pretty\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA1F594070B8F1D8E00073279 /* Sources */,\n\t\t\t\tA1F594080B8F1D8E00073279 /* Frameworks */,\n\t\t\t\tA1F594140B8F1E2D00073279 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = sub_string_finder_pretty;\n\t\t\tproductName = sub_string_finder_pretty;\n\t\t\tproductReference = A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tA1F5941A0B8F1F0900073279 /* sub_string_finder_extended */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget \"sub_string_finder_extended\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA1F594180B8F1F0900073279 /* Sources */,\n\t\t\t\tA1F594190B8F1F0900073279 /* Frameworks */,\n\t\t\t\tA1F5941D0B8F1F2D00073279 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = sub_string_finder_extended;\n\t\t\tproductName = sub_string_finder_extended;\n\t\t\tproductReference = A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"sub_string_finder\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* sub_string_finder */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tA1F5941A0B8F1F0900073279 /* sub_string_finder_extended */,\n\t\t\t\tA1F594090B8F1D8E00073279 /* sub_string_finder_pretty */,\n\t\t\t\t8DD76F620486A84900D96B5E /* sub_string_finder */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594070B8F1D8E00073279 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594180B8F1F0900073279 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F5940D0B8F1DB600073279 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_pretty;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA1F5940E0B8F1DB600073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_pretty;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F5940F0B8F1DB600073279 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_pretty;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F594100B8F1DB600073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_pretty;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F594200B8F1F4E00073279 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_extended;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA1F594210B8F1F4E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_extended;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F594220B8F1F4E00073279 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_extended;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F594230B8F1F4E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = sub_string_finder_extended;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"sub_string_finder\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"sub_string_finder\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget \"sub_string_finder_pretty\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA1F5940D0B8F1DB600073279 /* Debug */,\n\t\t\t\tA1F5940E0B8F1DB600073279 /* Debug64 */,\n\t\t\t\tA1F5940F0B8F1DB600073279 /* Release */,\n\t\t\t\tA1F594100B8F1DB600073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget \"sub_string_finder_extended\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA1F594200B8F1F4E00073279 /* Debug */,\n\t\t\t\tA1F594210B8F1F4E00073279 /* Debug64 */,\n\t\t\t\tA1F594220B8F1F4E00073279 /* Release */,\n\t\t\t\tA1F594230B8F1F4E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# This file should be always located and called in $(tbb_root)/examples\n\n# Usage:\n#   make [all] [clean] [release] [debug] [test]\n#      executes specified targets for all examples.\n#   make {example's dir}/{target}\n#      calls specified example with specified target.\n#      For instance: make task/tree_sum/all\n\ntbb_root?=..\nBUILDING_PHASE:=0\ninclude ../build/common.inc\n\n#check, if tbb_root is not absolute path (the filter keeps only /* paths)\nifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)\n    # also changes related variables like work_dir\n    override tbb_root := $(CWD)$(SLASH)..\n    export TBBROOT := $(tbb_root)\nendif\n\noverride CXXFLAGS += $(CXX_STD_FLAGS)\n\n# give stdver priotity over autodetection\nifneq (,$(stdver))\n    CXX0XFLAGS=-std=$(stdver)\nendif\n# empty CXX0XFLAGS exported as well, to have control over C++ autodetection\nexport CXX0XFLAGS\n\nifeq ($(tbb_os),windows)\n    ifeq ($(UNIXMODE),1)\n        EXAMPLE_MAKEFILE = Makefile\n        EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))\n        ifeq ($(compiler),gcc)\n            override CXXFLAGS += -Wl,--enable-auto-import\n        endif\n        export CPATH := $(CPATH);$(tbb_root)/include\n        export LIBRARY_PATH := $(LIBRARY_PATH);$(work_dir)_release;$(work_dir)_debug\n        export RM = cmd /C del /Q /F\n    else\n        EXAMPLE_MAKEFILE = Makefile.windows\n        EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))\n        EXAMPLE_MAKEFILE := $(if $(EXAMPLES),Makefile.windows,Makefile)\n        export INCLUDE := $(tbb_root)$(SLASH)include;$(INCLUDE)\n        export LIB := $(work_dir)_release;$(work_dir)_debug;$(LIB)\n    endif\n    work_dir := $(subst /,$(SLASH),$(work_dir))\n    export PATH := $(work_dir)_release;$(work_dir)_debug;$(PATH)\n    export TBB_ARCH_PLATFORM = $(arch)\\$(runtime)\n    export TBB_TARGET_ARCH = $(arch)\nelse\n    EXAMPLE_MAKEFILE = Makefile\n    EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE))\n    # platform-specific settings\n    ifeq ($(arch),ia64)\n        override CXXFLAGS += $(PIC_KEY)\n    endif\n    ifneq ($(filter suncc gcc clang,$(compiler)),)\n        ifeq ($(compiler),suncc)\n            override CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,wbadinit\n        endif\n        ifeq ($(arch),intel64)\n            override CXXFLAGS += -m64\n        endif\n        ifeq ($(arch),ia32)\n            override CXXFLAGS += -m32\n        endif\n        ifeq ($(arch),ppc64)\n            override CXXFLAGS += -m64\n        endif\n        ifeq ($(arch),ppc32)\n            override CXXFLAGS += -m32\n        endif\n        ifeq ($(arch),sparc)\n            override CXXFLAGS += -mcpu=v9 -m64\n        endif\n    endif\n    ifeq ($(compiler),xl)\n        # -qsuppress=1540-0198 suppresses warnings like \"1540-0198 (W) The omitted keyword \"private\" is assumed for base class \"no_copy\".\"\n        # -qsuppress=1540-1401 suppresses warnings like \"1540-1401 (I) An unknown \"pragma ivdep\" is specified.\"\n        override CXXFLAGS += -I$(tbb_root)$(SLASH)include -qsuppress=1540-0198:1540-1401 -L$(work_dir)_release -L$(work_dir)_debug\n        ifeq ($(arch),intel64)\n            override CXXFLAGS += -q64\n        endif\n        ifeq ($(arch),ia32)\n            override CXXFLAGS += -q32\n        endif\n        ifeq ($(arch),ppc64)\n            override CXXFLAGS += -q64\n        endif\n        ifeq ($(arch),ppc32)\n            override CXXFLAGS += -q32\n        endif\n    endif\n    ifeq ($(tbb_os),macos)\n        export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug\n        override CXXFLAGS += -Wl,-rpath,$(work_dir)_release -Wl,-rpath,$(work_dir)_debug\n    else\n        export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug\n        ifeq ($(findstring mic,$(offload) $(target)),mic)\n            mic_path=$(tbb_build_dir)$(SLASH)$(mic_tbb_build_prefix)\n            export MIC_LIBRARY_PATH := $(mic_path)_release:$(mic_path)_debug:$(MIC_LIBRARY_PATH)\n            export MIC_LD_LIBRARY_PATH := $(mic_path)_release:$(mic_path)_debug:$(MIC_LD_LIBRARY_PATH)\n        else\n            # -L necessary for non-native compilers which don't search $LIBRARY_PATH\n            override CXXFLAGS += -L$(work_dir)_release -L$(work_dir)_debug\n        endif\n    endif\n    export LIBS\n    export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug\n    export CPATH := $(CPATH):$(tbb_root)/include\nendif\n\nexport CXXFLAGS\nCOMMON_TARGETS := all clean release debug test perf_build perf_run\n# list of directories of examples\nEXAMPLES_DIRS := $(foreach T,$(EXAMPLES),$(dir $(T)))\n# targets to explicitly call example have format: {example's dir}/{example's target}\nEXAMPLES_TARGETS := $(foreach T,$(COMMON_TARGETS),$(addsuffix $(T),$(EXAMPLES_DIRS)))\n\n.PHONY: $(COMMON_TARGETS) $(EXAMPLES_TARGETS)\n\n.DEFAULT: all\n\n# execute standard targets for all examples\n$(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS))\n\n# proxy rule for calling appropriate example\n$(EXAMPLES_TARGETS)::\n\t@echo ------------------------ $@ ------------------------\n\t-$(MAKE) -C $(@D)  -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX=\"$(CPLUS)\" $(if $(run_cmd),run_cmd=\"$(run_cmd)\",) $(if $(args),ARGS=\"$(args)\",)  $(if $(UI),UI=\"$(UI)\")\n\nprintenv:\nifeq ($(tbb_os),windows)\n\t@cmd /C set PATH\n\t@cmd /C set LIB\n\t@cmd /C set INCLUDE\nelse\n\t@env | grep PATH\nendif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/copy_libraries.bat",
    "content": "@echo off\r\nREM\r\nREM Copyright (c) 2005-2018 Intel Corporation\r\nREM\r\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\r\nREM you may not use this file except in compliance with the License.\r\nREM You may obtain a copy of the License at\r\nREM\r\nREM     http://www.apache.org/licenses/LICENSE-2.0\r\nREM\r\nREM Unless required by applicable law or agreed to in writing, software\r\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\r\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nREM See the License for the specific language governing permissions and\r\nREM limitations under the License.\r\nREM\r\nREM\r\nREM\r\nREM\r\nREM\r\n\r\n:: Getting parameters\r\nif (\"%1\") == (\"\") goto error0\r\nif (\"%2\") == (\"\") goto error0\r\nif (\"%3\") == (\"\") goto error0\r\nset arch=%1\r\nif (\"%2\") == (\"debug\") set postfix=_debug\r\nset output_dir=%3\r\n\r\n:: Optional 4th parameter to set install root\r\nif (\"%4\") NEQ (\"\") set TBBROOT=%4\r\n:: Actually we can set install root by ourselves\r\nif (\"%TBBROOT%\") == (\"\") set TBBROOT=%~d0%~p0..\\..\\\r\n\r\n:: Getting vs folders in case vc_mt binaries are not provided\r\n:: ordered from oldest to newest, so we end with newest available version\r\nif (\"%VS110COMNTOOLS%\") NEQ (\"\") set vc_dir=vc11\r\nif (\"%VS120COMNTOOLS%\") NEQ (\"\") set vc_dir=vc12\r\nif (\"%VS140COMNTOOLS%\") NEQ (\"\") set vc_dir=vc14\r\n:: To use Microsoft* Visual Studio* 2017 IDE, make sure the variable VS150COMNTOOLS is set in your IDE instance.\r\n:: If it is not, try running Microsoft Visual Studio 2017 from Microsoft* Developer Command Prompt* for VS 2017.\r\n:: For details, see https://developercommunity.visualstudio.com/content/problem/730/vs154-env-var-vs150comntools-missing-from-build-sy.html\r\nif (\"%VS150COMNTOOLS%\") NEQ (\"\") set vc_dir=vc14\r\n\r\n:: Are we standalone/oss or inside compiler?\r\nif exist \"%TBBROOT%\\bin\\%arch%\\%vc_dir%\\tbb%postfix%.dll\" set interim_path=bin\\%arch%\r\nif exist \"%TBBROOT%\\..\\redist\\%arch%\\tbb\\%vc_dir%\\tbb%postfix%.dll\" set interim_path=..\\redist\\%arch%\\tbb\r\nif (\"%interim_path%\") == (\"\") goto error1\r\n\r\n:: Do we provide vc_mt binaries?\r\nif exist \"%TBBROOT%\\%interim_path%\\vc_mt\\tbb%postfix%.dll\" set vc_dir=vc_mt\r\nif (\"%vc_dir%\") == (\"\") goto error2\r\n\r\n:: We know everything we wanted and there are no errors\r\n:: Copying binaries\r\n\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb%postfix%.dll\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb%postfix%.pdb\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbbmalloc%postfix%.dll\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbbmalloc%postfix%.pdb\" \"%output_dir%\"\r\nif exist \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb_preview%postfix%.dll\" copy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb_preview%postfix%.dll\" \"%output_dir%\"\r\nif exist \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb_preview%postfix%.pdb\" copy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb_preview%postfix%.pdb\" \"%output_dir%\"\r\n\r\ngoto end\r\n:error0\r\necho number of parameters not correct\r\nexit /B 1\r\n:error1\r\necho Could not determine path to TBB libraries\r\nexit /B 1\r\n:error2\r\necho Could not determine Visual Studio version\r\nexit /B 1\r\n\r\n:end\r\nexit /B 0\r\n\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/examples-common.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# detect if a compiler can support C++11\n# If CXX0XFLAGS already set, do not change it\nifneq (,$(findstring $(CXX), icc icpc clang++))\n    # every supported icc or clang is OK\n    CXX0XFLAGS ?= -std=c++0x\nelse\n    ifneq (,$(findstring $(CXX), g++ gcc))\n        ifneq (, $(strip $(shell $(CXX) -v 2>&1 | grep \"clang-\")))\n            # This is clang actually,\n            # every supported clang is OK\n            CXX0XFLAGS ?= -std=c++0x\n        else\n            # support of lambda started GCC 4.5\n            ifneq (, $(strip $(shell g++ -dumpversion | egrep \"^(4\\.[5-9]|[5-9])\")))\n               CXX0XFLAGS ?= -std=c++0x\n            endif\n        endif\n    endif\nendif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/Makefile.gmake",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# The C++ compiler\n#CXX=g++\n\n# detecting MS Windows (for MinGW support)\nifeq ($(OS), Windows_NT)\nRM = cmd /C del /Q /F\nRD = cmd /C rmdir\nUI = con\nEXE = $(NAME)$(SUFFIX).exe\n\nelse\nRM = rm -f\nRD = rmdir -r\n\n# detecting 64-bit platform\narch ?= $(shell uname -m)\n# Possible values of interest: intel64 x86_64 amd64 ia64 ppc64 sparc sparc64\nx64 ?= $(findstring 64,$(subst sparc,sparc64,$(arch)))\n\n# see https://wiki.debian.org/Multiarch/Tuples\nMULTIARCH = $(arch)\nifeq ($(arch),ia32)\nMULTIARCH = i386\nendif\nifeq ($(arch),intel64)\nMULTIARCH = x86_64\nendif\nifeq ($(arch),ppc32)\nMULTIARCH = powerpc\nendif\nifeq ($(arch),sparc)\nMULTIARCH = sparc64\nendif\nMULTIARCHTUPLE ?= $(MULTIARCH)-linux-gnu\n\n# detecting UI (\"mac\", \"x\" or \"con\")\nifeq ($(shell uname),Darwin)\n  UI ?= mac\nelse\n  UI ?= $(shell sh -c \"[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libX11.so ] && echo x\")\nendif\n\nifeq ($(UI),x)\n  EXE = $(NAME)$(SUFFIX)\n  UI_CXXFLAGS += -I/usr/X11R6/include\n  LIBS += -lpthread -L/usr/X11R6/lib$(x64) -lX11\n  # detect if libXext can be found\n  ifeq ($(shell sh -c \"[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libXext.so ] && echo 0\"),0)\n    LIBS += -lXext\n  else  # no libXext\n    UI_CXXFLAGS += -DX_NOSHMEM\n  endif # libXext\n\nelse # ! X\n  ifeq ($(UI),mac)\n    CXX_UI?=g++\n    LIBS += -framework OpenGL -framework Foundation -framework Cocoa\n    MACUISOURCES = ../../common/gui/xcode/tbbExample/OpenGLView.m ../../common/gui/xcode/tbbExample/main.m ../../common/gui/xcode/tbbExample/tbbAppDelegate.m \n    MACUIOBJS = OpenGLView.o main.o tbbAppDelegate.o\n    APPRES = $(NAME)$(SUFFIX).app/Contents/Resources\n    EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX)\n\n  else # ! macOS*\n\n    EXE = $(NAME)$(SUFFIX)\n    ifeq (,$(strip $(UI)))\n       UI = con\n       $(warning Note: no graphics output capability detected, building for console output.)\n    endif\n  endif # macOS\nendif # X\nendif # Windows vs. other\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/Makefile.win",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)\n\n# Base compile/link options\nMYCXXFLAGS = /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE /MP $(CXXFLAGS)\nMYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS)\nCXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG\nCXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG\n\n# Specify library directory for Direct X SDK\nDDLIB_DIR=$(DXSDK_DIR)\\lib\\$(XARCH:AMD64=x64)\n\n# Input and output files\n#SOURCE = v\n#RCNAME = specified externaly\n#EXE =    ^\n# defaults on XARCH = x86\nUISRC = ../../common/gui/$(UI)video.cpp\n\ndefault:\n\nbuild_echo:\n\t-@echo Building$(DEBUG) $(EXE) with UI=$(UI) XARCH=$(XARCH)\n\nbuild_one:\tbuild_echo build_$(UI)$(DEBUG)\n\nbuild_con: $(SOURCE) $(UISRC) compiler_check\n\t$(CXX) $(CXXFLAGS_NDEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /subsystem:console /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_con_debug: $(SOURCE) $(UISRC) compiler_check\n\t$(CXX) $(CXXFLAGS_DEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /debug /subsystem:console /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_gdi: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t$(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_gdi_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t$(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_d2d: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t-@echo Using DirectX SDK from \"$(DDLIB_DIR)\"\n\t$(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) /I \"$(DXSDK_DIR)\\include\" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:\"$(DDLIB_DIR)\" msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_d2d_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t-@echo Using DirectX SDK from \"$(DDLIB_DIR)\"\n\t$(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) /I \"$(DXSDK_DIR)\\include\" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:\"$(DDLIB_DIR)\" msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nmsvs/$(RCNAME).res:\n\trc /r msvs/$(RCNAME)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/convideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"video.h\"\n#include <cassert>\n#include <stdio.h>\n\nunsigned int *              g_pImg = 0;\nint                         g_sizex, g_sizey;\nstatic video *g_video = 0;\nstatic int g_fps = 0;\n\n#if _WIN32 || _WIN64\n\nstatic DWORD g_msec = 0;\n\n#ifdef _WINDOWS\nHINSTANCE video::win_hInstance = 0;\nint video::win_iCmdShow = 0;\nvoid video::win_set_class(WNDCLASSEX &wcex) { }\nvoid video::win_load_accelerators(int idc)  { }\n#endif //_WINDOWS\n\n#else\n#include <sched.h>\n#include <sys/time.h>\nstruct timeval g_time;\n#endif //_WIN32||_WIN64\n\n#define CALC_FPS_ENABLED ((WINAPI_FAMILY != WINAPI_FAMILY_APP) && (!__ANDROID__))\n\nvideo::video()\n    // OpenGL* RGBA byte order for little-endian CPU\n    : depth(24), red_shift(0), green_shift(8), blue_shift(16),\n      red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; updating = calc_fps = false;\n}\n\nbool video::init_window(int x, int y)\n{\n    g_sizex = x; g_sizey = y;\n    g_pImg = new unsigned int[x*y];\n    running = true;\n    return false;\n}\n\nbool video::init_console()\n{\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n#if CALC_FPS_ENABLED\n    if(calc_fps) {\n        double fps = g_fps;\n#if _WIN32 || _WIN64\n        fps /= (GetTickCount()-g_msec)/1000.0;\n#else\n        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);\n        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n#endif\n        printf(\"%s: %.1f fps\\n\", title, fps);\n    }\n#endif\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\n//! Count and display FPS count in titlebar\nbool video::next_frame()\n{\n#if CALC_FPS_ENABLED\n    if(calc_fps){\n        if(!g_fps) {\n#if _WIN32 || _WIN64\n            g_msec = GetTickCount();\n#else\n            struct timezone tz; gettimeofday(&g_time, &tz);\n#endif\n        }\n        g_fps++;\n    }\n#endif\n    return running;\n}\n\n//! Do standard loop\nvoid video::main_loop()\n{\n    on_process();\n}\n\n//! Change window title\nvoid video::show_title()\n{\n}\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update() {}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/d2dvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// common Windows parts\n#include \"winvideo.h\"\n\n// and another headers\n#include <cassert>\n#include <stdio.h>\n#include <dxsdkver.h>\n#if _DXSDK_PRODUCT_MAJOR < 9\n#error DXSDK Version 9 and above required.\n#endif\n#include <d2d1.h>\n#include <d2d1helper.h>\n#pragma comment(lib, \"d2d1.lib\")\n\nID2D1Factory *m_pD2DFactory;\nID2D1HwndRenderTarget *m_pRenderTarget;\nID2D1Bitmap *m_pBitmap;\nD2D1_SIZE_U bitmapSize;\n\nHANDLE g_hVSync;\n\n#include <DXErr.h>\n#pragma comment(lib, \"DxErr.lib\")\n\n//! Create a dialog box and tell the user what went wrong\nbool DisplayError(LPSTR lpstrErr, HRESULT hres)\n{\n    if(hres != S_OK){\n        static bool InError = false;\n        int retval = 0;\n        if (!InError)\n        {\n            InError = true;\n            const char *message = hres?DXGetErrorString(hres):0;\n            retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:\"Error!\", MB_OK|MB_ICONERROR);\n            InError = false;\n        }\n    }\n    return false;\n}\n\nvoid DrawBitmap()\n{\n    HRESULT hr = S_OK;\n    if (m_pRenderTarget) {\n        m_pRenderTarget->BeginDraw();\n        if (m_pBitmap)\n            hr = m_pBitmap->CopyFromMemory(NULL,(BYTE*)g_pImg, 4*g_sizex);\n        DisplayError( \"DrawBitmap error\", hr );\n        m_pRenderTarget->DrawBitmap(m_pBitmap);\n        m_pRenderTarget->EndDraw();\n    }\n    return;\n}\n\ninline void mouse(int k, LPARAM lParam)\n{\n    int x = (int)LOWORD(lParam);\n    int y = (int)HIWORD(lParam);\n    RECT rc;\n    GetClientRect(g_hAppWnd, &rc);\n    g_video->on_mouse( x*g_sizex/(rc.right - rc.left), y*g_sizey/(rc.bottom - rc.top), k );\n}\n\n//! Win event processing function\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\n{\n    switch (iMsg)\n    {\n        case WM_MOVE:\n            // Check to make sure our window exists before we tell it to repaint.\n            // This will fail the first time (while the window is being created).\n            if (hwnd) {\n                InvalidateRect(hwnd, NULL, FALSE);\n                UpdateWindow(hwnd);\n            }\n            return 0L;\n\n        case WM_SIZE:\n        case WM_PAINT:\n            if( g_video->running && g_video->updating ) {\n                DrawBitmap();\n                Sleep(0);\n            }\n            break;\n        // Process all mouse and keyboard events\n        case WM_LBUTTONDOWN:    mouse( 1, lParam ); break;\n        case WM_LBUTTONUP:      mouse(-1, lParam ); break;\n        case WM_RBUTTONDOWN:    mouse( 2, lParam ); break;\n        case WM_RBUTTONUP:      mouse(-2, lParam ); break;\n        case WM_MBUTTONDOWN:    mouse( 3, lParam ); break;\n        case WM_MBUTTONUP:      mouse(-3, lParam ); break;\n        case WM_CHAR:           g_video->on_key( (int)wParam); break;\n\n        // some useless stuff\n        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop\n        case WM_DISPLAYCHANGE:  return 0;\n\n        // Now, shut down the window...\n        case WM_DESTROY:        PostQuitMessage(0); return 0;\n    }\n    // call user defined proc, if exists\n    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);\n}\n\nbool video::init_window(int sizex, int sizey)\n{\n    assert(win_hInstance != 0);\n    g_sizex = sizex; g_sizey = sizey;\n    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false)) {\n        DisplayError(\"Unable to initialize the program's window.\");\n        return false;\n    }\n    ShowWindow(g_hAppWnd, SW_SHOW);\n    g_pImg = new unsigned int[sizex*sizey];\n\n    HRESULT hr = S_OK;\n\n    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);\n    // Create a Direct2D render target.\n    if (SUCCEEDED(hr) && !m_pRenderTarget){\n        RECT rc;\n        GetClientRect(g_hAppWnd, &rc);\n\n        bitmapSize = D2D1::SizeU(\n            rc.right - rc.left,\n            rc.bottom - rc.top\n            );\n\n        hr = m_pD2DFactory->CreateHwndRenderTarget(\n            D2D1::RenderTargetProperties(),\n            D2D1::HwndRenderTargetProperties(g_hAppWnd, bitmapSize),\n            &m_pRenderTarget\n            );\n        if (SUCCEEDED(hr) && !m_pBitmap){\n            D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(\n                DXGI_FORMAT_B8G8R8A8_UNORM,\n                D2D1_ALPHA_MODE_IGNORE\n                );\n            D2D1_BITMAP_PROPERTIES bitmapProperties;\n            bitmapProperties.pixelFormat = pixelFormat;\n            m_pRenderTarget->GetDpi( &bitmapProperties.dpiX, &bitmapProperties.dpiY );\n            m_pRenderTarget->CreateBitmap(bitmapSize,bitmapProperties,&m_pBitmap);\n            m_pRenderTarget->DrawBitmap(m_pBitmap);\n        }\n    }\n\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if (m_pBitmap) m_pBitmap->Release();\n    if (m_pRenderTarget) m_pRenderTarget->Release();\n    if (m_pD2DFactory) m_pD2DFactory->Release();\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\n//////////// drawing area constructor & destructor /////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(g_video->updating) {\n        RECT r;\n        r.left = start_x; r.right  = start_x + size_x;\n        r.top  = start_y; r.bottom = start_y + size_y;\n        InvalidateRect(g_hAppWnd, &r, false);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/dxcheck.bat",
    "content": "@echo off\r\nREM\r\nREM Copyright (c) 2005-2018 Intel Corporation\r\nREM\r\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\r\nREM you may not use this file except in compliance with the License.\r\nREM You may obtain a copy of the License at\r\nREM\r\nREM     http://www.apache.org/licenses/LICENSE-2.0\r\nREM\r\nREM Unless required by applicable law or agreed to in writing, software\r\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\r\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nREM See the License for the specific language governing permissions and\r\nREM limitations under the License.\r\nREM\r\nREM\r\nREM\r\nREM\r\nREM\r\nif \"%DXSDK_DIR%\"==\"\" goto error_no_DXSDK\r\ngoto end\r\n\r\n:error_no_DXSDK\r\necho DirectX SDK Check : error : This example requires the DirectX SDK.  Either (re)-install the DirectX SDK, or set the DXSDK_DIR environment variable to indicate where it is installed.\r\n\r\n:end\r\n\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/gdivideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// common Windows parts\n#include \"winvideo.h\"\n// include GDI+ headers\n#include <gdiplus.h>\n// and another headers\n#include <stdio.h>\n\n// tag linking library\n#pragma comment(lib, \"gdiplus.lib\")\n\n// global specific variables\nGdiplus::Bitmap *           g_pBitmap;           // main drawing bitmap\nULONG_PTR                   gdiplusToken;\nGdiplus::GdiplusStartupInput gdiplusStartupInput;// GDI+\n\n//! display system error\nbool DisplayError(LPSTR lpstrErr, HRESULT hres)\n{\n    static bool InError = false;\n    int retval = 0;\n    if (!InError)\n    {\n        InError = true;\n        LPCSTR lpMsgBuf;\n        if(!hres) hres = GetLastError();\n        FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n                               NULL, hres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );\n        retval = MessageBox(g_hAppWnd, lpstrErr, lpMsgBuf, MB_OK|MB_ICONERROR);\n        LocalFree( (HLOCAL)lpMsgBuf );\n        InError = false;\n    }\n    return false;\n}\n\n//! Win event processing function\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\n{\n    switch (iMsg)\n    {\n        case WM_MOVE:\n            // Check to make sure our window exists before we tell it to repaint.\n            // This will fail the first time (while the window is being created).\n            if (hwnd) {\n                InvalidateRect(hwnd, NULL, FALSE);\n                UpdateWindow(hwnd);\n            }\n            return 0L;\n\n        case WM_PAINT:\n            {\n                PAINTSTRUCT ps;\n                Gdiplus::Graphics graphics( BeginPaint(hwnd, &ps) );\n                // redraw just requested area. This call is as fast as simple DrawImage() call.\n                if(g_video->updating) graphics.DrawImage(g_pBitmap, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.left, ps.rcPaint.top,\n                                    ps.rcPaint.right, ps.rcPaint.bottom, Gdiplus::UnitPixel);\n                EndPaint(hwnd, &ps);\n            }\n            return 0L;\n\n        // Process all mouse and keyboard events\n        case WM_LBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 1); break;\n        case WM_LBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -1); break;\n        case WM_RBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 2); break;\n        case WM_RBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -2); break;\n        case WM_MBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 3); break;\n        case WM_MBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -3); break;\n        case WM_CHAR:           g_video->on_key( (int)wParam); break;\n\n        // some useless stuff\n        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop\n        case WM_DISPLAYCHANGE:  return 0;\n\n        // Now, shut down the window...\n        case WM_DESTROY:        PostQuitMessage(0); return 0;\n    }\n    // call user defined proc, if exists\n    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);\n}\n\n///////////// video functions ////////////////\n\nbool video::init_window(int sizex, int sizey)\n{\n    assert(win_hInstance != 0);\n    g_sizex = sizex; g_sizey = sizey;\n    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, true)) {\n        DisplayError(\"Unable to initialize the program's window.\");\n        return false;\n    }\n    ShowWindow(g_hAppWnd, SW_SHOW);\n    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);\n    g_pImg = new unsigned int[sizex*sizey];\n    g_pBitmap = new Gdiplus::Bitmap(g_sizex, g_sizey, 4*g_sizex, PixelFormat32bppRGB, (BYTE*)g_pImg );\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if(g_pBitmap) { delete g_pBitmap; g_pBitmap = 0; }\n    Gdiplus::GdiplusShutdown(gdiplusToken);\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\n//////////// drawing area constructor & destructor /////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(g_video->updating) {\n        RECT r;\n        r.left = start_x; r.right  = start_x + size_x;\n        r.top  = start_y; r.bottom = start_y + size_y;\n        InvalidateRect(g_hAppWnd, &r, false);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/macvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"video.h\"\n#include <cassert>\n#include <stdio.h>\n#include <iostream>\n#include <pthread.h>\n\nunsigned int* g_pImg = 0;\nint g_sizex=0, g_sizey=0;\nstatic video *g_video = 0;\nstatic int g_fps = 0;\nchar *window_title=NULL;\n#define WINDOW_TITLE_SIZE 256\nint cocoa_update=0;\n\n#include <sched.h>\n#include <sys/time.h>\nstruct timeval g_time;\n\nvideo::video()\n#if __TBB_IOS\n    : depth(24), red_shift(0), green_shift(8), blue_shift(16),\n    red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)\n#else\n    : depth(24), red_shift(16), green_shift(8), blue_shift(0),\n    red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)\n#endif\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; cocoa_update=1; updating = true; calc_fps = false;\n}\n\nbool video::init_window(int x, int y)\n{\n    g_sizex = x; g_sizey = y;\n    g_pImg = new unsigned int[x*y];\n    if( window_title==NULL )\n        window_title = (char*)malloc(WINDOW_TITLE_SIZE);\n    strncpy( window_title, title, WINDOW_TITLE_SIZE-1 );\n    running = true;\n    return true;\n}\n\nbool video::init_console()\n{\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if(calc_fps) {\n        double fps = g_fps;\n        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);\n        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n        printf(\"%s: %.1f fps\\n\", title, fps);\n    }\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\n//! Count and display FPS count in titlebar\nbool video::next_frame()\n{\n    if(calc_fps){\n        if(!g_fps) {\n            struct timezone tz; gettimeofday(&g_time, &tz);\n        }\n        g_fps++;\n    }\n    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);\n    double sec=((now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0));\n    if( sec>1 ){\n        if(calc_fps) {\n            memcpy(&g_time, &now_time, sizeof(g_time));\n            int fps;\n            fps = g_fps/sec;\n            cocoa_update = (int)updating;\n            snprintf(window_title,WINDOW_TITLE_SIZE, \"%s%s: %d fps\", title, updating?\"\":\" (no updating)\", int(fps));\n            g_fps=0;\n        }\n    }\n    return running;\n}\n\n\nvoid* thread_func(void*)\n{\n    g_video->on_process();\n    exit(EXIT_SUCCESS);\n}\n\nextern \"C\" void on_mouse_func(int x, int y, int k)\n{\n    g_video->on_mouse(x, y, k);\n    return;\n}\n\nextern \"C\" void on_key_func(int x)\n{\n    g_video->on_key(x);\n    return;\n}\n\nextern \"C\" int cocoa_main( int argc, char *argv[] );\n//! Do standard loop\nvoid video::main_loop()\n{\n    pthread_t handle;\n    pthread_attr_t attr;\n    pthread_attr_init(&attr);\n    pthread_create(&handle,&attr,&thread_func,(void*)NULL);\n    pthread_detach(handle);\n    cocoa_main( 0, NULL );\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(title)\n        strncpy( window_title, title, WINDOW_TITLE_SIZE );\n    return;\n}\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    //nothing to do, updating via timer in cocoa part.\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __VIDEO_H__\n#define __VIDEO_H__\n\n#include <cassert>\n#if _MSC_VER\n#include <stddef.h> // for uintptr_t\n#else\n#include <stdint.h> // for uintptr_t\n#endif\n#if _WIN32 || _WIN64\n#include <windows.h>\n#else\n#include <unistd.h>\n#endif\n\ntypedef unsigned int color_t;\ntypedef unsigned char colorcomp_t;\ntypedef signed char depth_t;\n\n//! Class for getting access to drawing memory\nclass drawing_memory\n{\n#ifdef __TBB_MIC_OFFLOAD\n    // The address is kept as uintptr_t since\n    // the compiler could not offload a pointer\n#endif\n    uintptr_t   my_address;\npublic:\n    depth_t     pixel_depth;\n    int         sizex, sizey;\n    //! Get drawing memory\n    inline char* get_address() const { return reinterpret_cast<char*>(my_address); }\n    //! Get drawing memory size\n    inline int get_size() const { return ((pixel_depth>16) ? 4:2) * sizex * sizey; }\n    //! Set drawing memory\n    inline void set_address(char *mem) { my_address = reinterpret_cast<uintptr_t>(mem); }\n\n    friend class drawing_area;\n    friend class video;\n};\n\n//! Simple proxy class for managing of different video systems\nclass video\n{\n    //! colorspace information\n    depth_t depth, red_shift, green_shift, blue_shift;\n    color_t red_mask, green_mask, blue_mask;\n    friend class drawing_area;\n\npublic:\n    //! Constructor\n    video();\n    //! Destructor\n    ~video();\n    //! member to set window name\n    const char *title;\n    //! true is enable to show fps\n    bool calc_fps;\n    //! if true: on windows fork processing thread for on_process(), on non-windows note that next_frame() is called concurrently.\n    bool threaded;\n    //! true while running within main_loop()\n    bool running;\n    //! if true, do gui updating\n    bool updating;\n    //! initialize graphical video system\n    bool init_window(int sizex, int sizey);\n    //! initialize console. returns true if console is available\n    bool init_console();\n    //! terminate video system\n    void terminate();\n    //! Do standard event & processing loop. Use threaded = true to separate event/updating loop from frame processing\n    void main_loop();\n    //! Process next frame\n    bool next_frame();\n    //! Change window title\n    void show_title();\n    //! translate RGB components into packed type\n    inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const;\n    //! Get drawing memory descriptor\n    inline drawing_memory get_drawing_memory() const;\n\n    //! code of the ESCape key\n    static const int esc_key = 27;\n    //! Mouse events handler.\n    virtual void on_mouse(int x, int y, int key) { }\n    //! Mouse events handler.\n    virtual void on_key(int key) { }\n    //! Main processing loop. Redefine with your own\n    virtual void on_process() { while(next_frame()); }\n\n#ifdef _WINDOWS\n    //! Windows specific members\n    //! if VIDEO_WINMAIN isn't defined then set this just before init() by arguments of WinMain\n    static HINSTANCE win_hInstance; static int win_iCmdShow;\n    //! optionally call it just before init() to set own. Use ascii strings convention\n    void win_set_class(WNDCLASSEX &);\n    //! load and set accelerator table from resources\n    void win_load_accelerators(int idc);\n#endif\n};\n\n//! Drawing class\nclass drawing_area\n{\n    const size_t base_index, max_index, index_stride;\n    const depth_t pixel_depth;\n    unsigned int * const ptr32;\n    size_t index;\npublic:\n    const int start_x, start_y, size_x, size_y;\n    //! constructors\n    drawing_area(int x, int y, int sizex, int sizey);\n    inline drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem);\n    //! destructor\n    inline ~drawing_area();\n    //! update the image\n    void update();\n    //! set current position. local_x could be bigger then size_x\n    inline void set_pos(int local_x, int local_y);\n    //! put pixel in current position with incremental address calculating to next right pixel\n    inline void put_pixel(color_t color);\n    //! draw pixel at position by packed color\n    void set_pixel(int localx, int localy, color_t color)\n        { set_pos(localx, localy); put_pixel(color); }\n};\n\nextern int g_sizex;\nextern int g_sizey;\nextern unsigned int *g_pImg;\n\ninline drawing_memory video::get_drawing_memory() const\n{\n    drawing_memory dmem;\n    dmem.pixel_depth = depth;\n    dmem.my_address = reinterpret_cast<uintptr_t>(g_pImg);\n    dmem.sizex = g_sizex;\n    dmem.sizey = g_sizey;\n    return dmem;\n}\n\ninline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const\n{\n    if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift\n        return (red<<16) | (green<<8) | blue;\n    else if(depth >= 24)\n        return\n#if __ANDROID__\n                // Setting Alpha to 0xFF\n                0xFF000000 |\n#endif\n                (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);\n    else if(depth > 0) {\n        depth_t bs = blue_shift, rs = red_shift;\n        if(blue_shift < 0) blue >>= -bs, bs = 0;\n        else /*red_shift < 0*/ red >>= -rs, rs = 0;\n        return ((red<<rs)&red_mask) | ((green<<green_shift)&green_mask) | ((blue<<bs)&blue_mask);\n    } else { // UYVY colorspace\n        unsigned y, u, v;\n        y = red * 77 + green * 150 + blue * 29; // sum(77+150+29=256) * max(=255):  limit->2^16\n        u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4\n        v = (2048 + (red << 3) - (y >> 5)) >> 4;\n        y = y >> 8;\n        return u | (y << 8) | (v << 16) | (y << 24);\n    }\n}\n\ninline drawing_area::drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem)\n    : base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex),\n    pixel_depth(dmem.pixel_depth), ptr32(reinterpret_cast<unsigned int*>(dmem.my_address)),\n    start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < dmem.sizex); assert(y < dmem.sizey);\n    assert(x+sizex <= dmem.sizex); assert(y+sizey <= dmem.sizey);\n\n    index = base_index; // current index\n}\n\ninline void drawing_area::set_pos(int local_x, int local_y)\n{\n    index = base_index + local_x + local_y*index_stride;\n}\n\ninline void drawing_area::put_pixel(color_t color)\n{\n    assert(index < max_index);\n    if(pixel_depth > 16) ptr32[index++] = color;\n    else if(pixel_depth > 0)\n        ((unsigned short*)ptr32)[index++] = (unsigned short)color;\n    else { // UYVY colorspace\n        if(index&1) color >>= 16;\n        ((unsigned short*)ptr32)[index++] = (unsigned short)color;\n    }\n}\n\ninline drawing_area::~drawing_area()\n{\n#if ! __TBB_DEFINE_MIC\n    update();\n#endif\n}\n\n#if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )\n#include <cstdlib>\n//! define WinMain for subsystem:windows.\n#ifdef VIDEO_WINMAIN_ARGS\nint main(int, char *[]);\n#else\nint main();\n#endif\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)\n{\n    video::win_hInstance = hInstance;  video::win_iCmdShow = iCmdShow;\n#ifdef VIDEO_WINMAIN_ARGS\n    return main(__argc, __argv);\n#else\n    return main();\n#endif\n}\n#endif\n\n#endif// __VIDEO_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/winvideo.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/////// Common internal implementation of Windows-specific stuff //////////////\n///////                  Must be the first included header       //////////////\n\n#ifndef __WINVIDEO_H__\n#define __WINVIDEO_H__\n\n#ifndef _CRT_SECURE_NO_DEPRECATE\n#define _CRT_SECURE_NO_DEPRECATE\n#endif\n// Check that the target Windows version has all API calls requried.\n#ifndef _WIN32_WINNT\n# define _WIN32_WINNT 0x0400\n#endif\n#if _WIN32_WINNT<0x0400\n# define YIELD_TO_THREAD() Sleep(0)\n#else\n# define YIELD_TO_THREAD() SwitchToThread()\n#endif\n#include \"video.h\"\n#include <fcntl.h>\n#include <io.h>\n#include <iostream>\n#include <fstream>\n\n#pragma comment(lib, \"gdi32.lib\")\n#pragma comment(lib, \"user32.lib\")\n\n// maximum mumber of lines the output console should have\nstatic const WORD MAX_CONSOLE_LINES = 500;\nconst COLORREF              RGBKEY = RGB(8, 8, 16); // at least 8 for 16-bit palette\nHWND                        g_hAppWnd;           // The program's window handle\nHANDLE                      g_handles[2] = {0,0};// thread and wake up event\nunsigned int *              g_pImg = 0;          // drawing memory\nint                         g_sizex, g_sizey;\nstatic video *              g_video = 0;\nWNDPROC                     g_pUserProc = 0;\nHINSTANCE                   video::win_hInstance = 0;\nint                         video::win_iCmdShow = 0;\nstatic WNDCLASSEX *         gWndClass = 0;\nstatic HACCEL               hAccelTable = 0;\nstatic DWORD                g_msec = 0;\nstatic int g_fps = 0, g_updates = 0, g_skips = 0;\n\nbool DisplayError(LPSTR lpstrErr, HRESULT hres = 0); // always returns false\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);\n\n//! Create window\nbool WinInit(HINSTANCE hInstance, int nCmdShow, WNDCLASSEX *uwc, const char *title, bool fixedsize)\n{\n    WNDCLASSEX wndclass;  // Our app's windows class\n    if(uwc) {\n        memcpy(&wndclass, uwc, sizeof(wndclass));\n        g_pUserProc = uwc->lpfnWndProc;\n    } else {\n        memset(&wndclass, 0, sizeof(wndclass));\n        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);\n        wndclass.lpszClassName = title;\n    }\n    wndclass.cbSize = sizeof(wndclass);\n    wndclass.hInstance = hInstance;\n    wndclass.lpfnWndProc = InternalWndProc;\n    wndclass.style |= CS_HREDRAW | CS_VREDRAW;\n    wndclass.hbrBackground = CreateSolidBrush(RGBKEY);\n\n    if( !RegisterClassExA(&wndclass) ) return false;\n    int xaddend = GetSystemMetrics(fixedsize?SM_CXFIXEDFRAME:SM_CXFRAME)*2;\n    int yaddend = GetSystemMetrics(fixedsize?SM_CYFIXEDFRAME:SM_CYFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);\n    if(wndclass.lpszMenuName) yaddend += GetSystemMetrics(SM_CYMENU);\n\n    // Setup the new window's physical parameters - and tell Windows to create it\n    g_hAppWnd = CreateWindowA(wndclass.lpszClassName,  // Window class name\n                             title,  // Window caption\n                             !fixedsize ? WS_OVERLAPPEDWINDOW :  // Window style\n                             WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,\n                             CW_USEDEFAULT,  // Initial x pos: use default placement\n                             0,              // Initial y pos: not used here\n                             g_sizex+xaddend,// Initial x size\n                             g_sizey+yaddend,// Initial y size\n                             NULL,      // parent window handle\n                             NULL,      // window menu handle\n                             hInstance, // program instance handle\n                             NULL);     // Creation parameters\n    return g_hAppWnd != NULL;\n}\n\n//! create console window with redirection\nstatic bool RedirectIOToConsole(void)\n{\n    int hConHandle; size_t lStdHandle;\n    CONSOLE_SCREEN_BUFFER_INFO coninfo;\n    FILE *fp;\n    // allocate a console for this app\n    AllocConsole();\n\n    // set the screen buffer to be big enough to let us scroll text\n    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);\n    coninfo.dwSize.Y = MAX_CONSOLE_LINES;\n    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);\n\n    // redirect unbuffered STDOUT to the console\n    lStdHandle = (size_t)GetStdHandle(STD_OUTPUT_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle <= 0) return false;\n    fp = _fdopen( hConHandle, \"w\" );\n    *stdout = *fp;\n    setvbuf( stdout, NULL, _IONBF, 0 );\n\n    // redirect unbuffered STDERR to the console\n    lStdHandle = (size_t)GetStdHandle(STD_ERROR_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle > 0) {\n        fp = _fdopen( hConHandle, \"w\" );\n        *stderr = *fp;\n        setvbuf( stderr, NULL, _IONBF, 0 );\n    }\n\n    // redirect unbuffered STDIN to the console\n    lStdHandle = (size_t)GetStdHandle(STD_INPUT_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle > 0) {\n        fp = _fdopen( hConHandle, \"r\" );\n        *stdin = *fp;\n        setvbuf( stdin, NULL, _IONBF, 0 );\n    }\n\n    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog\n    // point to console as well\n    std::ios::sync_with_stdio();\n    return true;\n}\n\n\nvideo::video()\n    : depth(24), red_shift(16), green_shift(8), blue_shift(0),\n      red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; running = threaded = calc_fps = false; updating = true;\n}\n\n//! optionally call it just before init() to set own\nvoid video::win_set_class(WNDCLASSEX &wcex)\n{\n    gWndClass = &wcex;\n}\n\nvoid video::win_load_accelerators(int idc)\n{\n    hAccelTable = LoadAccelerators(win_hInstance, MAKEINTRESOURCE(idc));\n}\n\nbool video::init_console()\n{\n    if(RedirectIOToConsole()) {\n        if(!g_pImg && g_sizex && g_sizey)\n            g_pImg = new unsigned int[g_sizex * g_sizey];\n        if(g_pImg) running = true;\n        return true;\n    }\n    return false;\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\nDWORD WINAPI thread_video(LPVOID lpParameter)\n{\n    video *v = (video*)lpParameter;\n    v->on_process();\n    return 0;\n}\n\nstatic bool loop_once(video *v)\n{\n    // screen update notify\n    if(int updates = g_updates) {\n        g_updates = 0;\n        if(g_video->updating) { g_skips += updates-1; g_fps++; }\n        else g_skips += updates;\n        UpdateWindow(g_hAppWnd);\n    }\n    // update fps\n    DWORD msec = GetTickCount();\n    if(v->calc_fps && msec >= g_msec+1000) {\n        double sec = (msec - g_msec)/1000.0;\n        char buffer[256], n = _snprintf(buffer, 128, \"%s: %d fps\", v->title, int(double(g_fps + g_skips)/sec));\n        if(g_skips) _snprintf(buffer+n, 128, \" - %d skipped = %d updates\", int(g_skips/sec), int(g_fps/sec));\n        SetWindowTextA(g_hAppWnd, buffer);\n        g_msec = msec; g_skips = g_fps = 0;\n    }\n    // event processing, including painting\n    MSG msg;\n    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){\n        if( msg.message == WM_QUIT ) { v->running = false; return false; }\n        if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) ){\n            TranslateMessage(&msg);\n            DispatchMessage(&msg);\n        }\n        return true; // try again\n    }\n    return false;\n}\n\n//! Do standard event loop\nvoid video::main_loop()\n{\n    // let Windows draw and unroll the window\n    InvalidateRect(g_hAppWnd, 0, false);\n    g_msec = GetTickCount(); // let's stay for 0,5 sec\n    while(g_msec + 500 > GetTickCount()) { loop_once(this); Sleep(1); }\n    g_msec = GetTickCount();\n    // now, start main process\n    if(threaded) {\n        g_handles[0] = CreateThread (\n            NULL,             // LPSECURITY_ATTRIBUTES security_attrs\n            0,                // SIZE_T stacksize\n            (LPTHREAD_START_ROUTINE) thread_video,\n            this,               // argument\n            0, 0);\n        if(!g_handles[0]) { DisplayError(\"Can't create thread\"); return; }\n        else // harmless race is possible here\n            g_handles[1] = CreateEvent(NULL, false, false, NULL);\n        while(running) {\n            while(loop_once(this));\n            YIELD_TO_THREAD(); // give time for processing when running on single CPU\n            DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE);\n            if(r == WAIT_OBJECT_0) break; // thread terminated\n        }\n        running = false;\n        if(WaitForSingleObject(g_handles[0], 3000) == WAIT_TIMEOUT){\n            // there was not enough time for graceful shutdown, killing the example with code 1.\n            exit(1);\n        }\n        if(g_handles[0]) CloseHandle(g_handles[0]);\n        if(g_handles[1]) CloseHandle(g_handles[1]);\n        g_handles[0] = g_handles[1] = 0;\n    }\n    else on_process();\n}\n\n//! Refresh screen picture\nbool video::next_frame()\n{\n    if(!running) return false;\n    g_updates++; // Fast but inaccurate counter. The data race here is benign.\n    if(!threaded) while(loop_once(this));\n    else if(g_handles[1]) {\n        SetEvent(g_handles[1]);\n        YIELD_TO_THREAD();\n    }\n    return true;\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(g_hAppWnd)\n        SetWindowTextA(g_hAppWnd, title);\n}\n\n#endif //__WINVIDEO_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/OpenGLView.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#import <Foundation/Foundation.h>\n\n#if TARGET_OS_IPHONE\n\n#import <UIKit/UIKit.h>\n#import \"OpenGLES/ES2/gl.h\"\n\n@interface OpenGLView : UIView {\n    NSTimer *timer;\n    CGRect imageRect;\n}\n\n@property (nonatomic, retain) NSTimer *timer;\n@property (nonatomic) CGRect imageRect;\n\n- (void) drawRect:(CGRect)rect;\n- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;\n\n@end\n\n#elif TARGET_OS_MAC\n\n#import <Foundation/Foundation.h>\n#import <Cocoa/Cocoa.h>\n\n@interface OpenGLView : NSOpenGLView{\n    NSTimer *timer;\n}\n\n@property (nonatomic,retain) NSTimer *timer;\n\n- (void) drawRect:(NSRect)start;\n- (void) mouseDown:(NSEvent *)theEvent;\n- (void) keyDown:(NSEvent *)theEvent;\n- (BOOL) acceptsFirstResponder;\n- (void) viewDidEndLiveResize;\n\n@end\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/OpenGLView.m",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#import <Foundation/Foundation.h>\n#import \"OpenGLView.h\"\n\n// defined in macvideo.cpp\nextern char* window_title;\nextern int cocoa_update;\nextern int g_sizex, g_sizey;\nextern unsigned int *g_pImg;\nvoid on_mouse_func(int x, int y, int k);\nvoid on_key_func(int x);\n\nbool initilized = false;\n\n#if TARGET_OS_IPHONE\n\n#import \"OpenGLES/ES2/gl.h\"\n\n@implementation OpenGLView\n\n@synthesize timer;\n@synthesize imageRect;\n\n- (void)drawRect:(CGRect)start\n{\n    if (initilized == false) {\n        NSLog(@\"INITIALIZE\");\n        timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];\n        imageRect = [[UIScreen mainScreen] bounds];\n        CGFloat full_height = imageRect.size.height;\n        const float ratio=(float)g_sizex/g_sizey;\n        imageRect.size.height=imageRect.size.width/ratio;\n        imageRect.origin.y=(full_height-imageRect.size.height)/2;\n        initilized = true;\n    }\n    \n    CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();\n    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, g_pImg, 4*g_sizex*g_sizey, NULL);\n    \n    CGImageRef inputImage = CGImageCreate(g_sizex, g_sizey, 8, 32, g_sizex * 4, colourSpace,(CGBitmapInfo)kCGImageAlphaNoneSkipLast, dataProvider, NULL, NO, kCGRenderingIntentDefault);\n    UIImage *image = [UIImage imageWithCGImage:inputImage];\n    \n    CGDataProviderRelease(dataProvider);\n    CGColorSpaceRelease(colourSpace);\n    CGImageRelease(inputImage);\n    \n    [image drawInRect:imageRect];\n\n}\n\n- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event\n{\n    CGPoint point = [[touches anyObject] locationInView:self];\n    const int x = point.x;\n    const int y = point.y;\n    if ( (y-imageRect.origin.y) > 0 && y < (imageRect.origin.y + imageRect.size.height ))\n    on_mouse_func( x*g_sizex/(imageRect.size.width), (y-imageRect.origin.y)*g_sizey/imageRect.size.height,1);\n    [self setNeedsDisplay];\n}\n\n-(void) update_window{\n    if( cocoa_update ) [self setNeedsDisplay];\n}\n\n@end\n\n#elif TARGET_OS_MAC\n\n#import <OpenGL/gl.h>\n\n@implementation OpenGLView\n\n@synthesize timer;\n\n- (void) drawRect:(NSRect)start\n{\n    if (initilized == false) {\n        NSLog(@\"INITIALIZE\");\n        timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];\n        initilized = true;\n    }\n    glWindowPos2i(0, (int)self.visibleRect.size.height);\n    glPixelZoom( (float)self.visibleRect.size.width /(float)g_sizex,\n                -(float)self.visibleRect.size.height/(float)g_sizey);\n    glDrawPixels(g_sizex, g_sizey, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, g_pImg);\n    glFlush();\n}\n\n-(void) update_window{\n    if( cocoa_update ) [self setNeedsDisplay:YES]; \n    if( window_title ) [_window setTitle:[NSString stringWithFormat:@\"%s\", window_title]];\n}\n\n-(void) keyDown:(NSEvent *)theEvent{\n    on_key_func([theEvent.characters characterAtIndex:0]);\n}\n\n-(void) mouseDown:(NSEvent *)theEvent{\n    // mouse event for seismic and fractal\n    NSPoint point= theEvent.locationInWindow;\n    const int x = (int)point.x;\n    const int y = (int)point.y;\n    NSRect rect = self.visibleRect;\n    on_mouse_func(x*g_sizex/(int)rect.size.width,((int)rect.size.height-y)*g_sizey/(int)rect.size.height,1);\n    [self setNeedsDisplay:YES];\n}\n\n- (BOOL) acceptsFirstResponder\n{\n    return YES;\n}\n\n- (void) rightMouseDown:(NSEvent *)theEvent\n{\n    return;\n}\n\n-(void) viewDidEndLiveResize\n{\n    NSRect rect = self.visibleRect;\n    const int x=(int)rect.size.width;\n    const int y=(int)rect.size.height;\n    [_window setTitle:[NSString stringWithFormat:@\"X=%d Y=%d\", x,y]];\n}\n\n@end\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/PkgInfo",
    "content": "APPL????"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"9060\" systemVersion=\"15B42\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\">\n    <dependencies>\n        <deployment identifier=\"macosx\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"9060\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"494\" id=\"495\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\"/>\n        <menu title=\"AMainMenu\" systemMenu=\"main\" id=\"29\">\n            <items>\n                <menuItem title=\"tbbExample\" id=\"56\">\n                    <menu key=\"submenu\" title=\"tbbExample\" systemMenu=\"apple\" id=\"57\">\n                        <items>\n                            <menuItem title=\"Quit tbbExample\" keyEquivalent=\"q\" id=\"136\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-3\" id=\"449\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n            </items>\n        </menu>\n        <window title=\"tbbExample\" allowsToolTipsWhenApplicationIsInactive=\"NO\" deferred=\"NO\" oneShot=\"NO\" releasedWhenClosed=\"NO\" showsToolbarButton=\"NO\" animationBehavior=\"default\" id=\"371\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n            <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n            <rect key=\"contentRect\" x=\"100\" y=\"100\" width=\"480\" height=\"360\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1280\" height=\"1002\"/>\n            <view key=\"contentView\" focusRingType=\"none\" horizontalHuggingPriority=\"1\" verticalHuggingPriority=\"9\" horizontalCompressionResistancePriority=\"1\" verticalCompressionResistancePriority=\"1\" id=\"372\" customClass=\"OpenGLView\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"360\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <animations/>\n            </view>\n        </window>\n        <customObject id=\"494\" customClass=\"tbbAppDelegate\">\n            <connections>\n                <outlet property=\"window\" destination=\"371\" id=\"532\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"420\" customClass=\"NSFontManager\"/>\n    </objects>\n</document>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/iOS.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"9060\" systemVersion=\"15B42\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" initialViewController=\"AKo-RD-jUr\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9051\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"aF8-QV-POo\">\n            <objects>\n                <viewController id=\"AKo-RD-jUr\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"SEe-ff-xUc\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"Cp9-IV-SKb\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"1aY-my-944\" customClass=\"OpenGLView\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <animations/>\n                        <color key=\"backgroundColor\" white=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"wcZ-9q-FxX\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"90\" y=\"88\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/main.m",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#import <Availability.h>\n#import <Foundation/Foundation.h>\n\n#if TARGET_OS_IPHONE\n\n#import <UIKit/UIKit.h>\n#import \"tbbAppDelegate.h\"\n\nvoid get_screen_resolution(int *x, int *y) {\n    // Getting landscape screen resolution in any case\n    CGRect imageRect = [[UIScreen mainScreen] bounds];\n    *x=imageRect.size.width>imageRect.size.height?imageRect.size.width:imageRect.size.height;\n    *y=imageRect.size.width<imageRect.size.height?imageRect.size.width:imageRect.size.height;\n    return;\n}\n\nint cocoa_main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([tbbAppDelegate class]));\n    }\n}\n\n#elif TARGET_OS_MAC\n\n#import <Cocoa/Cocoa.h>\n\nint cocoa_main(int argc, char *argv[])\n{\n    return NSApplicationMain(argc, (const char **)argv);\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n//  Created by Xcode* 4.3.2\n//\n\n#import <Foundation/Foundation.h>\n\n#if TARGET_OS_IPHONE\n\n#import <UIKit/UIKit.h>\n\n@interface tbbAppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n\n#elif TARGET_OS_MAC\n\n#import <Cocoa/Cocoa.h>\n\n@interface tbbAppDelegate : NSObject <NSApplicationDelegate>{\n    __unsafe_unretained NSWindow *_window;\n}\n\n@property (assign) IBOutlet NSWindow *window;\n\n- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender;\n\n@end\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#import \"tbbAppDelegate.h\"\n\n#if TARGET_OS_IPHONE\n\n@implementation tbbAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    return YES;\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    exit(EXIT_SUCCESS);\n}\n\n@end\n\n#elif TARGET_OS_MAC\n\n@implementation tbbAppDelegate\n\n@synthesize window = _window;\n\n//declared in macvideo.cpp file\nextern int g_sizex, g_sizey;\n\n- (void)applicationDidFinishLaunching:(NSNotification *)aNotification\n{\n    // Insert code here to initialize your application\n    NSRect windowSize;\n    windowSize.size.height = g_sizey;\n    windowSize.size.width = g_sizex;\n    windowSize.origin=_window.frame.origin;\n    [_window setFrame:windowSize display:YES];\n\n}\n\n- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender\n{\n    return YES;\n}\n\n@end\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>iOS</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>iOS</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string></string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.business</string>\n\t<key>LSEnvironment</key>\n\t<dict>\n\t\t<key>DYLD_LIBRARY_PATH</key>\n\t\t<string>Contents/Resources:.:../Resources:/tmp:$DYLD_LIBRARY_PATH</string>\n\t\t<key>LIBRARY_PATH</key>\n\t\t<string>Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH</string>\n\t</dict>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>${MACOSX_DEPLOYMENT_TARGET}</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright 2005-2018 Intel Corporation.  All Rights Reserved.</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Prefix header for all source files of the 'tbbExample' target in the 'tbbExample' project\n//\n\n#import <Availability.h>\n\n#if TARGET_OS_IPHONE\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n#endif\n#elif TARGET_OS_MAC\n#ifdef __OBJC__\n    #import <Cocoa/Cocoa.h>\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/gui/xvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Uncomment next line to disable shared memory features if you do not have libXext\n// (http://www.xfree86.org/current/mit-shm.html)\n//#define X_NOSHMEM\n\n// Note that it may happen that the build environment supports the shared-memory extension\n// (so there's no build-time reason to disable the relevant code by defining X_NOSHMEM),\n// but that using shared memory still fails at run time.\n// This situation will (ultimately) cause the error handler set by XSetErrorHandler()\n// to be invoked with XErrorEvent::minor_code==X_ShmAttach. The code below tries to make\n// such a determination at XShmAttach() time, which seems plausible, but unfortunately\n// it has also been observed in a specific environment that the error may be reported\n// at a later time instead, even after video::init_window() has returned.\n// It is not clear whether this may happen in that way in any environment where it might\n// depend on the kind of display, e.g., local vs. over \"ssh -X\", so #define'ing X_NOSHMEM\n// may not always be the appropriate solution, therefore an environment variable\n// has been introduced to disable shared memory at run time.\n// A diagnostic has been added to advise the user about possible workarounds.\n// X_ShmAttach macro was changed to 1 due to recent changes to X11/extensions/XShm.h header.\n\n#include \"video.h\"\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/keysym.h>\n#include <sys/time.h>\n#include <signal.h>\n#include <pthread.h>\n\n#ifndef X_NOSHMEM\n#include <errno.h>\n#include <X11/extensions/XShm.h>\n#include <sys/ipc.h>\n#include <sys/shm.h>\n\nstatic XShmSegmentInfo shmseginfo;\nstatic Pixmap pixmap = 0;\nstatic bool already_called_X_ShmAttach = false;\nstatic bool already_advised_about_NOSHMEM_workarounds = false;\nstatic const char* NOSHMEM_env_var_name = \"TBB_EXAMPLES_X_NOSHMEM\";\n#endif\nstatic char *display_name = NULL;\nstatic Display *dpy = NULL;\nstatic Screen *scrn;\nstatic Visual *vis;\nstatic Colormap cmap;\nstatic GC gc;\nstatic Window win, rootW;\nstatic int dispdepth = 0;\nstatic XGCValues xgcv;\nstatic XImage *ximage;\nstatic int x_error = 0;\nstatic int vidtype = 3;\nint g_sizex, g_sizey;\nstatic video *g_video = 0;\nunsigned int *g_pImg = 0;\nstatic int g_fps = 0;\nstruct timeval g_time;\nstatic pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;\nAtom _XA_WM_DELETE_WINDOW = 0;// like in Xatom.h\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\nvideo::video()\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; calc_fps = running = false; updating = true;\n}\n\ninline void mask2bits(unsigned int mask, unsigned int &save, depth_t &shift)\n{\n    save  = mask; if(!mask) { shift = dispdepth/3; return; }\n    shift = 0; while(!(mask&1)) ++shift, mask >>= 1;\n    int bits = 0; while(mask&1) ++bits,  mask >>= 1;\n    shift += bits - 8;\n}\n\nint xerr_handler(Display* dpy_, XErrorEvent *error)\n{\n    x_error = error->error_code;\n    if(g_video) g_video->running = false;\n#ifndef X_NOSHMEM\n    if (error->minor_code==1/*X_ShmAttach*/ && already_called_X_ShmAttach && !already_advised_about_NOSHMEM_workarounds)\n    {\n        char err[256]; XGetErrorText(dpy_, x_error, err, 255);\n        fprintf(stderr, \"Warning: Can't attach shared memory to display: %s (%d)\\n\", err, x_error);\n        fprintf(stderr, \"If you are seeing a black output window, try setting %s environment variable to 1\"\n                        \" to disable shared memory extensions (0 to re-enable, other values undefined),\"\n                        \" or rebuilding with X_NOSHMEM defined in \" __FILE__ \"\\n\", NOSHMEM_env_var_name);\n        already_advised_about_NOSHMEM_workarounds = true;\n    }\n#else\n    (void) dpy_; // warning prevention\n#endif\n    return 0;\n}\n\nbool video::init_window(int xsize, int ysize)\n{\n    { //enclose local variables before fail label\n    g_sizex = xsize; g_sizey = ysize;\n\n    // Open the display\n    if (!dpy) {\n        dpy = XOpenDisplay(display_name);\n        if (!dpy) {\n            fprintf(stderr, \"Can't open X11 display %s\\n\", XDisplayName(display_name));\n            goto fail;\n        }\n    }\n    int theScreen = DefaultScreen(dpy);\n    scrn = ScreenOfDisplay(dpy, theScreen);\n    dispdepth = DefaultDepth(dpy, theScreen);\n    XVisualInfo vinfo;\n    if (!( (dispdepth >= 15 && dispdepth <= 32 && XMatchVisualInfo(dpy, theScreen, dispdepth, TrueColor, &vinfo) )\n        || XMatchVisualInfo(dpy, theScreen, 24, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 32, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 16, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 15, TrueColor, &vinfo)\n        )) {\n        fprintf(stderr, \"Display has no appropriate True Color visual\\n\");\n        goto fail;\n    }\n    vis = vinfo.visual;\n    depth = dispdepth = vinfo.depth;\n    mask2bits(vinfo.red_mask, red_mask, red_shift);\n    mask2bits(vinfo.green_mask, green_mask, green_shift);\n    mask2bits(vinfo.blue_mask, blue_mask, blue_shift);\n    rootW = RootWindow(dpy, theScreen);\n    cmap = XCreateColormap(dpy, rootW, vis, AllocNone);\n    XSetWindowAttributes attrs;\n    attrs.backing_store = Always;\n    attrs.colormap = cmap;\n    attrs.event_mask = StructureNotifyMask|KeyPressMask|ButtonPressMask|ButtonReleaseMask;\n    attrs.background_pixel = BlackPixelOfScreen(scrn);\n    attrs.border_pixel = WhitePixelOfScreen(scrn);\n    win = XCreateWindow(dpy, rootW,\n        0, 0, xsize, ysize, 2,\n        dispdepth, InputOutput, vis,\n        CWBackingStore | CWColormap | CWEventMask |\n        CWBackPixel | CWBorderPixel,\n        &attrs);\n    if(!win) {\n        fprintf(stderr, \"Can't create the window\\n\");\n        goto fail;\n    }\n    XSizeHints sh;\n    sh.flags = PSize | PMinSize | PMaxSize;\n    sh.width = sh.min_width = sh.max_width = xsize;\n    sh.height = sh.min_height = sh.max_height = ysize;\n    XSetStandardProperties( dpy, win, g_video->title, g_video->title, None, NULL, 0, &sh );\n    _XA_WM_DELETE_WINDOW = XInternAtom(dpy, \"WM_DELETE_WINDOW\", false);\n    XSetWMProtocols(dpy, win, &_XA_WM_DELETE_WINDOW, 1);\n    gc = XCreateGC(dpy, win, 0L, &xgcv);\n    XMapRaised(dpy, win);\n    XFlush(dpy);\n#ifdef X_FULLSYNC\n    XSynchronize(dpy, true);\n#endif\n    XSetErrorHandler(xerr_handler);\n\n    int imgbytes = xsize*ysize*(dispdepth<=16?2:4);\n    const char *vidstr;\n#ifndef X_NOSHMEM\n    int major, minor, pixmaps;\n    if(XShmQueryExtension(dpy) &&\n       XShmQueryVersion(dpy, &major, &minor, &pixmaps))\n    { // Shared memory\n        if(NULL!=getenv(NOSHMEM_env_var_name) && 0!=strcmp(\"0\",getenv(NOSHMEM_env_var_name))) {\n            goto generic;\n        }\n        shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777);\n        if(shmseginfo.shmid < 0) {\n            fprintf(stderr, \"Warning: Can't get shared memory: %s\\n\", strerror(errno));\n            goto generic;\n        }\n        g_pImg = (unsigned int*)(shmseginfo.shmaddr = (char*)shmat(shmseginfo.shmid, 0, 0));\n        if(g_pImg == (unsigned int*)-1) {\n            fprintf(stderr, \"Warning: Can't attach to shared memory: %s\\n\", strerror(errno));\n            shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n            goto generic;\n        }\n        shmseginfo.readOnly = false;\n        if(!XShmAttach(dpy, &shmseginfo) || x_error) {\n            char err[256]; XGetErrorText(dpy, x_error, err, 255);\n            fprintf(stderr, \"Warning: Can't attach shared memory to display: %s (%d)\\n\", err, x_error);\n            shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n            goto generic;\n        }\n        already_called_X_ShmAttach = true;\n\n#ifndef X_NOSHMPIX\n        if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap)\n        { // Pixmaps\n            vidtype = 2; vidstr = \"X11 shared memory pixmap\";\n            pixmap = XShmCreatePixmap(dpy, win, (char*)g_pImg, &shmseginfo, xsize, ysize, dispdepth);\n            XSetWindowBackgroundPixmap(dpy, win, pixmap);\n        } else\n#endif//!X_NOSHMPIX\n        { // Standard\n            vidtype = 1; vidstr = \"X11 shared memory\";\n            ximage = XShmCreateImage(dpy, vis, dispdepth,\n                ZPixmap, 0, &shmseginfo, xsize, ysize);\n            if(!ximage) {\n                fprintf(stderr, \"Can't create the shared image\\n\");\n                goto fail;\n            }\n            assert(ximage->bytes_per_line == xsize*(dispdepth<=16?2:4));\n            ximage->data = shmseginfo.shmaddr;\n        }\n    } else\n#endif\n    {\n#ifndef X_NOSHMEM\ngeneric:\n#endif\n        vidtype = 0; vidstr = \"generic X11\";\n        g_pImg = new unsigned int[imgbytes/sizeof(int)];\n        ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize);\n        if(!ximage) {\n            fprintf(stderr, \"Can't create the image\\n\");\n            goto fail;\n        }\n    }\n    if( ximage ) {\n        // Note: It may be more efficient to adopt the server's byte order\n        //       and swap once per get_color() call instead of once per pixel.\n        const uint32_t probe = 0x03020100;\n        const bool big_endian = (((const char*)(&probe))[0]==0x03);\n        ximage->byte_order = big_endian ? MSBFirst : LSBFirst;\n    }\n    printf(\"Note: using %s with %s visual for %d-bit color depth\\n\", vidstr, vis==DefaultVisual(dpy, theScreen)?\"default\":\"non-default\", dispdepth);\n    running = true;\n    return true;\n    } // end of enclosing local variables\nfail:\n    terminate(); init_console();\n    return false;\n}\n\nbool video::init_console()\n{\n    if(!g_pImg && g_sizex && g_sizey) {\n        dispdepth = 24; red_shift = 16; vidtype = 3; // fake video\n        g_pImg = new unsigned int[g_sizex*g_sizey];\n        running = true;\n    }\n    return true;\n}\n\nvoid video::terminate()\n{\n    running = false;\n    if(dpy) {\n        vidtype = 3; // stop video\n        if(threaded) { pthread_mutex_lock(&g_mutex); pthread_mutex_unlock(&g_mutex); }\n        if(ximage) { XDestroyImage(ximage); ximage = 0; g_pImg = 0; } // it frees g_pImg for vidtype == 0\n#ifndef X_NOSHMEM\n        if(pixmap) XFreePixmap(dpy, pixmap);\n        if(shmseginfo.shmaddr) { XShmDetach(dpy, &shmseginfo); shmdt(shmseginfo.shmaddr); g_pImg = 0; }\n        if(shmseginfo.shmid >= 0) shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n#endif\n        if(gc) XFreeGC(dpy, gc);\n        if(win) XDestroyWindow(dpy, win);\n        XCloseDisplay(dpy); dpy = 0;\n    }\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; } // if was allocated for console mode\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n    g_video = 0;\n}\n\n//! Do standard event loop\nvoid video::main_loop()\n{\n    struct timezone tz; gettimeofday(&g_time, &tz);\n    on_process();\n}\n\n//! Check for pending events once\nbool video::next_frame()\n{\n    if(!running) return false;\n    //! try acquire mutex if threaded code, returns on failure\n    if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex))\n        return running;\n    //! Refresh screen picture\n    g_fps++;\n#ifndef X_NOSHMPIX\n    if(vidtype == 2 && updating) XClearWindow(dpy, win);\n#endif\n    while( XPending(dpy) ) {\n        XEvent report; XNextEvent(dpy, &report);\n        switch( report.type ) {\n            case ClientMessage:\n                if(report.xclient.format != 32 || report.xclient.data.l[0] != _XA_WM_DELETE_WINDOW) break;\n            case DestroyNotify:\n                running = false;\n            case KeyPress:\n                on_key( XLookupKeysym(&report.xkey, 0) ); break;\n            case ButtonPress:\n                on_mouse( report.xbutton.x, report.xbutton.y, report.xbutton.button ); break;\n            case ButtonRelease:\n                on_mouse( report.xbutton.x, report.xbutton.y, -report.xbutton.button ); break;\n        }\n    }\n    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);\n    double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n    if(sec > 1) {\n        memcpy(&g_time, &now_time, sizeof(g_time));\n        if(calc_fps) {\n            double fps = g_fps; g_fps = 0;\n            char buffer[256]; snprintf(buffer, 256, \"%s%s: %d fps\", title, updating?\"\":\" (no updating)\", int(fps/sec));\n            XStoreName(dpy, win, buffer);\n        }\n#ifndef X_FULLSYNC\n        XSync(dpy, false); // It is often better then using XSynchronize(dpy, true)\n#endif//X_FULLSYNC\n    }\n    if(threaded) pthread_mutex_unlock(&g_mutex);\n    return true;\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(vidtype < 3)\n        XStoreName(dpy, win, title);\n}\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(dispdepth), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(!g_video->updating) return;\n#ifndef X_NOSHMEM\n    switch(vidtype) {\n    case 0:\n#endif\n        pthread_mutex_lock(&g_mutex);\n        if(vidtype == 0) XPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y);\n        pthread_mutex_unlock(&g_mutex);\n#ifndef X_NOSHMEM\n        break;\n    case 1:\n        pthread_mutex_lock(&g_mutex);\n        if(vidtype == 1) XShmPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y, false);\n        pthread_mutex_unlock(&g_mutex);\n        break;\n    /*case 2: make it in next_frame(); break;*/\n    }\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Common source code for samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Common source code for samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains common code that is used in the Intel&reg; Threading Building Blocks (Intel&reg; TBB) samples.\n\t\t<br>\n\t\tThis code is not intended to be used directly. It is incorporated automatically by the examples that need it.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"gui/\">gui</a>\n\t\t\t\t<dd>\n\t\t\t\t\tGUI code for examples that have graphical user interfaces. Currently supports:\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>GDI+*, DirectDraw*, Direct2D* (Windows* systems)\n\t\t\t\t\t\t<li>OpenGL* (macOS* systems)\n\t\t\t\t\t\t<li>X window (Linux* or macOS* systems)\n\t\t\t\t\t</ul>\n\t\t\t\t\tSee the examples that use the GUI\n\t\t\t\t\t(<a href=\"../graph/stereo/readme.html\">stereo</a>,\n\t\t\t\t\t<a href=\"../parallel_for/tachyon/readme.html\">tachyon</a>, \n\t\t\t\t\t<a href=\"../parallel_for/seismic/readme.html\">seismic</a>,\n\t\t\t\t\t<a href=\"../task_arena/fractal/readme.html\">fractal</a>)\n\t\t\t\t\tfor more details.\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"utility/\">utility</a>\n\t\t\t\t<dd>Common driver and utility code for examples. Currently provides:\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>class FastRandom - a random number generator that uses linear congruental method\n\t\t\t\t\t\t\t(<a href=\"utility/fast_random.h\">fast_random.h</a>)\n\t\t\t\t\t\t<li>class thread_number_range - a class to specify the numbers of threads an example should use\n\t\t\t\t\t\t\t(<a href=\"utility/utility.h\">utility.h</a>)\n\t\t\t\t\t\t<li>support for command line interface - class cli_argument_pack and function parse_cli_arguments\n\t\t\t\t\t\t\t(<a href=\"utility/utility.h\">utility.h</a>)\n\t\t\t\t\t</ul>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Common information</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t<br>\n\t\t<div class=\"h4-alike\">Number of threads</div>\n\t\t\t<p>\n\t\t\t\tMost Intel TBB examples allow to specify <i>n-of-threads</i>, the set of thread numbers that should be used to run an example.\n\t\t\t\t<br>Usually, it is a range of the form <i>low[:high[:(+|*|#)S]]</i>, where <i>low</i> and optional <i>high</i>\n\t\t\t\tare non-negative integers or 'auto' for the default choice, and optional step expression <i>(+|*|#)S</i> \n\t\t\t\tspecifies how thread numbers are chosen within the range:\n\t\t\t\t<ul>\n\t\t\t\t\t<li>With <i>+/*</i>, the previous number is incremented/multiplied by <i>S</i>.\n\t\t\t\t\tE.g., expression '12:16:+1' means 12,13,14,15,16 threads, and '1:16:*2' means 1,2,4,8,16 threads.\n\t\t\t\t\t<li>With <i>#</i>, <i>S</i> is the desired number of steps between any subsequent powers of 2;\n\t\t\t\t\tit must be a power of 2 on its own, with most meaningful values being 2, 4, and 8. \n\t\t\t\t\tFor a given number of threads, the actual step value is computed as the quotient\n\t\t\t\t\tof the nearest smaller power of 2 divided by the number of steps, but is at least 1.\n\t\t\t\t\tE.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 threads;\n\t\t\t\t\tnote the step doubling at 8 and 16 to keep 4 steps between powers of 2.\n\t\t\t\t</ul>\n\t\t\t\tA default value for the number of threads can be customized in an example. If not customized, it is '1:auto:#4'.\n\t\t\t\tThe 'auto' parameter is substituted with a value returned by a specified function, which typically is\n\t\t\t\t<code>tbb::task_scheduler_init::default_num_threads()</code>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/toolset.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <PlatformToolset Condition=\"Exists('$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\Intel C++ Compiler 15.0 [Intel(R) System Studio]')\">Intel C++ Compiler 15.0 [Intel(R) System Studio]</PlatformToolset>\n    <PlatformToolset Condition=\"Exists('$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\Intel C++ Compiler XE 15.0')\">Intel C++ Compiler XE 15.0</PlatformToolset>\n    <PlatformToolset Condition=\"Exists('$(VCTargetsPath)\\Platforms\\$(Platform)\\PlatformToolsets\\Intel C++ Compiler 16.0')\">Intel C++ Compiler 16.0</PlatformToolset>\n    <UseIntelTBB Condition=\"'$(UseIntelTBB)' == ''\">true</UseIntelTBB>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/utility/fast_random.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FAST_RANDOM_H_\n#define FAST_RANDOM_H_\nnamespace utility{\n//------------------------------------------------------------------------\n// FastRandom\n//------------------------------------------------------------------------\n\nnamespace internal{\n    size_t GetPrime ( size_t seed );\n}\n\n//! A fast random number generator.\n/** Uses linear congruential method. */\nclass FastRandom {\n    size_t x, a;\npublic:\n    //! Get a random number.\n    unsigned short get() {\n        return get(x);\n    }\n        //! Get a random number for the given seed; update the seed for next use.\n    unsigned short get( size_t& seed ) {\n        unsigned short r = (unsigned short)(seed>>16);\n        seed = seed*a+1;\n        return r;\n    }\n    //! Construct a random number generator.\n    FastRandom( size_t seed ) {\n        x = seed*internal::GetPrime(seed);\n        a = internal::GetPrime(x);\n    }\n};\n}\n\nnamespace utility {\nnamespace internal{\n//! Table of primes used by fast random-number generator (FastRandom).\n    static const unsigned Primes[] = {\n        0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,\n        0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,\n        0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,\n        0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,\n        0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,\n        0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,\n        0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,\n        0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,\n        0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,\n        0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,\n        0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,\n        0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,\n        0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,\n        0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,\n        0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,\n        0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f\n    };\n    size_t GetPrime ( size_t seed ) {\n        return Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];\n    }\n}\n}\n\n#endif /* FAST_RANDOM_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/common/utility/utility.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef UTILITY_H_\n#define UTILITY_H_\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#include <exception>\n#include <cstdio>\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\n#include <utility>\n#include <string>\n#include <cstring>\n#include <vector>\n#include <map>\n#include <set>\n#include <algorithm>\n#include <sstream>\n#include <numeric>\n#include <stdexcept>\n#include <memory>\n#include <cassert>\n#include <iostream>\n#include <cstdlib>\n// TBB headers should not be used, as some examples may need to be built without TBB.\n\nnamespace utility{\n    namespace internal{\n\n#if (_MSC_VER >= 1600 || __cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__) \\\n    && (_CPPLIB_VER || _LIBCPP_VERSION || __GLIBCXX__ && _UNIQUE_PTR_H ) \\\n    && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1200 )\n    // std::unique_ptr is available, and compiler can use it\n    #define smart_ptr std::unique_ptr\n    using std::swap;\n#else\n    #if __INTEL_COMPILER && __GXX_EXPERIMENTAL_CXX0X__\n    // std::unique_ptr is unavailable, so suppress std::auto_prt<> deprecation warning\n    #pragma warning(disable: 1478)\n    #endif\n    #define smart_ptr std::auto_ptr\n    // in some C++ libraries, std::swap does not work with std::auto_ptr\n    template<typename T>\n    void swap( std::auto_ptr<T>& ptr1, std::auto_ptr<T>& ptr2 ) {\n        std::auto_ptr<T> tmp; tmp = ptr2; ptr2 = ptr1; ptr1 = tmp;\n    }\n#endif\n\n        //TODO: add tcs\n        template<class dest_type>\n        dest_type& string_to(std::string const& s, dest_type& result){\n            std::stringstream stream(s);\n            stream>>result;\n            if ((!stream)||(stream.fail())){\n                throw std::invalid_argument(\"error converting string '\"+std::string(s)+\"'\");\n            }\n            return result;\n        }\n\n        template<class dest_type>\n        dest_type string_to(std::string const& s){\n            dest_type result;\n            return string_to(s,result);\n        }\n\n        template<typename>\n        struct is_bool          { static bool value(){return false;}};\n        template<>\n        struct is_bool<bool>    { static bool value(){return true;}};\n\n        class type_base {\n            type_base& operator=(const type_base&);\n            public:\n            const std::string name;\n            const std::string description;\n\n            type_base (std::string a_name, std::string a_description) : name(a_name), description(a_description) {}\n            virtual void parse_and_store(const std::string & s) = 0;\n            virtual std::string value() const = 0;\n            virtual smart_ptr<type_base> clone() const = 0;\n            virtual ~type_base(){}\n        };\n        template <typename type>\n        class type_impl : public type_base {\n        private:\n            type_impl& operator=(const type_impl&);\n            typedef bool(*validating_function_type)(const type&);\n        private:\n            type & target;\n            validating_function_type validating_function;\n        public:\n            type_impl(std::string a_name, std::string a_description, type & a_target, validating_function_type a_validating_function = NULL)\n                : type_base (a_name,a_description), target(a_target),validating_function(a_validating_function)\n            {};\n            void parse_and_store (const std::string & s) /*override*/ {\n                try{\n                    const bool is_bool = internal::is_bool<type>::value();\n                    if (is_bool && s.empty()){\n                        //to avoid directly assigning true\n                        //(as it will impose additional layer of indirection)\n                        //so, simply pass it as string\n                        internal::string_to(\"1\",target);\n                    }else {\n                        internal::string_to(s,target);\n                    }\n                }catch(std::invalid_argument& e){\n                    std::stringstream str;\n                    str <<\"'\"<<s<<\"' is incorrect input for argument '\"<<name<<\"'\"\n                        <<\" (\"<<e.what()<<\")\";\n                    throw std::invalid_argument(str.str());\n                }\n                if (validating_function){\n                    if (!((validating_function)(target))){\n                        std::stringstream str;\n                        str <<\"'\"<<target<<\"' is invalid value for argument '\"<<name<<\"'\";\n                        throw std::invalid_argument(str.str());\n                    }\n                }\n            }\n            template <typename t>\n            static bool is_null_c_str(t&){return false;}\n            static bool is_null_c_str(char* s){return s==NULL;}\n            std::string value() const /*override*/ {\n                std::stringstream str;\n                if (!is_null_c_str(target))\n                    str<<target;\n                return str.str();\n            }\n            smart_ptr<type_base> clone() const /*override*/ {\n                return smart_ptr<type_base>(new type_impl(*this));\n            }\n        };\n\n        class argument{\n        private:\n            smart_ptr<type_base> p_type;\n            bool matched_;\n        public:\n            argument(argument const& other)\n                : p_type(other.p_type.get() ? (other.p_type->clone()).release() : NULL)\n                 ,matched_(other.matched_)\n            {}\n            argument& operator=(argument a){\n                this->swap(a);\n                return *this;\n            }\n            void swap(argument& other){\n                internal::swap(p_type, other.p_type);\n                std::swap(matched_,other.matched_);\n            }\n            template<class type>\n            argument(std::string a_name, std::string a_description, type& dest, bool(*a_validating_function)(const type&)= NULL)\n                :p_type(new type_impl<type>(a_name,a_description,dest,a_validating_function))\n                 ,matched_(false)\n            {}\n            std::string value()const{\n                return p_type->value();\n            }\n            std::string name()const{\n                return p_type->name;\n            }\n            std::string description() const{\n                return p_type->description;\n            }\n            void parse_and_store(const std::string & s){\n                p_type->parse_and_store(s);\n                matched_=true;\n            }\n            bool is_matched() const{return matched_;}\n        };\n    } // namespace internal\n\n    class cli_argument_pack{\n        typedef std::map<std::string,internal::argument> args_map_type;\n        typedef std::vector<std::string> args_display_order_type;\n        typedef std::vector<std::string> positional_arg_names_type;\n    private:\n        args_map_type args_map;\n        args_display_order_type args_display_order;\n        positional_arg_names_type positional_arg_names;\n        std::set<std::string> bool_args_names;\n    private:\n        void add_arg(internal::argument const& a){\n            std::pair<args_map_type::iterator, bool> result = args_map.insert(std::make_pair(a.name(),a));\n            if (!result.second){\n                throw std::invalid_argument(\"argument with name: '\"+a.name()+\"' already registered\");\n            }\n            args_display_order.push_back(a.name());\n        }\n    public:\n        template<typename type>\n        cli_argument_pack& arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){\n            internal::argument a(name,description,dest,validate);\n            add_arg(a);\n            if (internal::is_bool<type>::value()){\n                bool_args_names.insert(name);\n            }\n            return *this;\n        }\n\n        //Positional means that argument name can be omitted in actual CL\n        //only key to match values for parameters with\n        template<typename type>\n        cli_argument_pack& positional_arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){\n            internal::argument a(name,description,dest,validate);\n            add_arg(a);\n            if (internal::is_bool<type>::value()){\n                bool_args_names.insert(name);\n            }\n            positional_arg_names.push_back(name);\n            return *this;\n        }\n\n        void parse(std::size_t argc, char const* argv[]){\n            {\n                std::size_t current_positional_index=0;\n                for (std::size_t j=1;j<argc;j++){\n                    internal::argument* pa = NULL;\n                    std::string argument_value;\n\n                    const char * const begin=argv[j];\n                    const char * const end=begin+std::strlen(argv[j]);\n\n                    const char * const assign_sign = std::find(begin,end,'=');\n\n                    struct throw_unknown_parameter{ static void _(std::string const& location){\n                        throw std::invalid_argument(std::string(\"unknown parameter starting at:'\")+location+\"'\");\n                    }};\n                    //first try to interpret it like parameter=value string\n                    if (assign_sign!=end){\n                        std::string name_found = std::string(begin,assign_sign);\n                        args_map_type::iterator it = args_map.find(name_found );\n\n                        if(it!=args_map.end()){\n                            pa= &((*it).second);\n                            argument_value = std::string(assign_sign+1,end);\n                        }else {\n                            throw_unknown_parameter::_(argv[j]);\n                        }\n                    }\n                    //then see is it a named flag\n                    else{\n                        args_map_type::iterator it = args_map.find(argv[j] );\n                        if(it!=args_map.end()){\n                            pa= &((*it).second);\n                            argument_value = \"\";\n                        }\n                        //then try it as positional argument without name specified\n                        else if (current_positional_index < positional_arg_names.size()){\n                            std::stringstream str(argv[j]);\n                            args_map_type::iterator found_positional_arg = args_map.find(positional_arg_names.at(current_positional_index));\n                            //TODO: probably use of smarter assert would help here\n                            assert(found_positional_arg!=args_map.end()/*&&\"positional_arg_names and args_map are out of sync\"*/);\n                            if (found_positional_arg==args_map.end()){\n                                throw std::logic_error(\"positional_arg_names and args_map are out of sync\");\n                            }\n                            pa= &((*found_positional_arg).second);\n                            argument_value = argv[j];\n\n                            current_positional_index++;\n                        }else {\n                            //TODO: add tc to check\n                            throw_unknown_parameter::_(argv[j]);\n                        }\n                    }\n                    assert(pa);\n                    if (pa->is_matched()){\n                        throw std::invalid_argument(std::string(\"several values specified for: '\")+pa->name()+\"' argument\");\n                    }\n                    pa->parse_and_store(argument_value);\n                }\n            }\n        }\n        std::string usage_string(const std::string& binary_name)const{\n            std::string command_line_params;\n            std::string summary_description;\n\n            for (args_display_order_type::const_iterator it = args_display_order.begin();it!=args_display_order.end();++it){\n                const bool is_bool = (0!=bool_args_names.count((*it)));\n                args_map_type::const_iterator argument_it = args_map.find(*it);\n                //TODO: probably use of smarter assert would help here\n                assert(argument_it!=args_map.end()/*&&\"args_display_order and args_map are out of sync\"*/);\n                if (argument_it==args_map.end()){\n                    throw std::logic_error(\"args_display_order and args_map are out of sync\");\n                }\n                const internal::argument & a = (*argument_it).second;\n                command_line_params +=\" [\" + a.name() + (is_bool ?\"\":\"=value\")+ \"]\";\n                summary_description +=\" \" + a.name() + \" - \" + a.description() +\" (\"+a.value() +\")\" + \"\\n\";\n            }\n\n            std::string positional_arg_cl;\n            for (positional_arg_names_type::const_iterator it = positional_arg_names.begin();it!=positional_arg_names.end();++it){\n                positional_arg_cl +=\" [\"+(*it);\n            }\n            for (std::size_t i=0;i<positional_arg_names.size();++i){\n                positional_arg_cl+=\"]\";\n            }\n            command_line_params+=positional_arg_cl;\n            std::stringstream str;\n            using std::endl;\n            str << \" Program usage is:\" << endl\n                 << \" \" << binary_name << command_line_params\n                 << endl << endl\n                 << \" where:\" << endl\n                 << summary_description\n            ;\n            return str.str();\n        }\n    }; // class cli_argument_pack\n\n    namespace internal {\n        template<typename T>\n        bool is_power_of_2( T val ) {\n            size_t intval = size_t(val);\n            return (intval&(intval-1)) == size_t(0);\n        }\n        int step_function_plus(int previous, double step){\n            return static_cast<int>(previous+step);\n        }\n        int step_function_multiply(int previous, double multiply){\n            return static_cast<int>(previous*multiply);\n        }\n        // \"Power-of-2 ladder\": nsteps is the desired number of steps between any subsequent powers of 2.\n        // The actual step is the quotient of the nearest smaller power of 2 divided by that number (but at least 1).\n        // E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32\n        int step_function_power2_ladder(int previous, double nsteps){\n            int steps = int(nsteps);\n            assert( is_power_of_2(steps) );  // must be a power of 2\n            // The actual step is 1 until the value is twice as big as nsteps\n            if( previous < 2*steps )\n                return previous+1;\n            // calculate the previous power of 2\n            int prev_power2 = previous/2;                 // start with half the given value\n            int rshift = 1;                               // and with the shift of 1;\n            while( int shifted = prev_power2>>rshift ) {  // shift the value right; while the result is non-zero,\n                prev_power2 |= shifted;                   //   add the bits set in 'shifted';\n                rshift <<= 1;                             //   double the shift, as twice as many top bits are set;\n            }                                             // repeat.\n            ++prev_power2; // all low bits set; now it's just one less than the desired power of 2\n            assert( is_power_of_2(prev_power2) );\n            assert( (prev_power2<=previous)&&(2*prev_power2>previous) );\n            // The actual step value is the previous power of 2 divided by steps\n            return previous + (prev_power2/steps);\n        }\n        typedef int (* step_function_ptr_type)(int,double);\n\n        struct step_function_descriptor  {\n            char mnemonic;\n            step_function_ptr_type function;\n        public:\n            step_function_descriptor(char a_mnemonic, step_function_ptr_type a_function) : mnemonic(a_mnemonic), function(a_function) {}\n        private:\n            void operator=(step_function_descriptor  const&);\n        };\n        step_function_descriptor step_function_descriptors[] = {\n                step_function_descriptor('*',step_function_multiply),\n                step_function_descriptor('+',step_function_plus),\n                step_function_descriptor('#',step_function_power2_ladder)\n        };\n\n        template<typename T, size_t N>\n        inline size_t array_length(const T(&)[N])\n        {\n           return N;\n        }\n\n        struct thread_range_step {\n            step_function_ptr_type step_function;\n            double step_function_argument;\n\n            thread_range_step ( step_function_ptr_type step_function_, double step_function_argument_)\n                :step_function(step_function_),step_function_argument(step_function_argument_)\n            {\n                if (!step_function_)\n                    throw std::invalid_argument(\"step_function for thread range step should not be NULL\");\n            }\n            int operator()(int previous)const {\n                assert(0<=previous); // test 0<=first and loop discipline\n                const int ret = step_function(previous,step_function_argument);\n                assert(previous<ret);\n                return ret;\n            }\n            friend std::istream& operator>>(std::istream& input_stream, thread_range_step& step){\n                char function_char;\n                double function_argument;\n                input_stream >> function_char >> function_argument;\n                size_t i = 0;\n                while ((i<array_length(step_function_descriptors)) && (step_function_descriptors[i].mnemonic!=function_char)) ++i;\n                if (i >= array_length(step_function_descriptors)){\n                    throw std::invalid_argument(\"unknown step function mnemonic: \"+std::string(1,function_char));\n                } else if ((function_char=='#') && !is_power_of_2(function_argument)) {\n                    throw std::invalid_argument(\"the argument of # should be a power of 2\");\n                }\n                step.step_function = step_function_descriptors[i].function;\n                step.step_function_argument = function_argument;\n                return input_stream;\n            }\n        };\n    } // namespace internal\n\n    struct thread_number_range{\n        int (*auto_number_of_threads)();\n        int first; // 0<=first (0 can be used as a special value)\n        int last;  // first<=last\n\n        internal::thread_range_step step;\n\n        thread_number_range( int (*auto_number_of_threads_)(),int low_=1, int high_=-1\n                , internal::thread_range_step step_ =  internal::thread_range_step(internal::step_function_power2_ladder,4)\n        )\n            : auto_number_of_threads(auto_number_of_threads_), first(low_), last((high_>-1) ? high_ : auto_number_of_threads_())\n              ,step(step_)\n        {\n            if (first<0) {\n                throw std::invalid_argument(\"negative value not allowed\");\n            }\n            if (first>last) {\n                throw std::invalid_argument(\"decreasing sequence not allowed\");\n            }\n        }\n        friend std::istream& operator>>(std::istream& i, thread_number_range& range){\n            try{\n                std::string s;\n                i>>s;\n                struct string_to_number_of_threads{\n                    int auto_value;\n                    string_to_number_of_threads(int auto_value_):auto_value(auto_value_){}\n                    int operator()(const std::string & value)const{\n                        return (value==\"auto\")? auto_value : internal::string_to<int>(value);\n                    }\n                };\n                string_to_number_of_threads string_to_number_of_threads(range.auto_number_of_threads());\n                int low, high;\n                std::size_t colon = s.find(':');\n                if ( colon == std::string::npos ){\n                    low = high = string_to_number_of_threads(s);\n                } else {\n                    //it is a range\n                    std::size_t second_colon = s.find(':',colon+1);\n\n                    low  = string_to_number_of_threads(std::string(s, 0, colon)); //not copying the colon\n                    high = string_to_number_of_threads(std::string(s, colon+1, second_colon - (colon+1))); //not copying the colons\n                    if (second_colon != std::string::npos){\n                        internal::string_to(std::string(s,second_colon + 1),range.step);\n                    }\n                }\n                range = thread_number_range(range.auto_number_of_threads,low,high,range.step);\n            }catch(std::invalid_argument&){\n                i.setstate(std::ios::failbit);\n                throw;\n            }\n            return i;\n        }\n        friend std::ostream& operator<<(std::ostream& o, thread_number_range const& range){\n            using namespace internal;\n            size_t i = 0;\n            for (; i < array_length(step_function_descriptors) && step_function_descriptors[i].function != range.step.step_function; ++i ) {}\n            if (i >= array_length(step_function_descriptors)){\n                throw std::invalid_argument(\"unknown step function for thread range\");\n            }\n            o<<range.first<<\":\"<<range.last<<\":\"<<step_function_descriptors[i].mnemonic<<range.step.step_function_argument;\n            return o;\n        }\n    }; // struct thread_number_range\n    //TODO: fix unused warning here\n    //TODO: update the thread range description in the .html files\n    static const char* thread_number_range_desc=\"number of threads to use; a range of the form low[:high[:(+|*|#)step]],\"\n                                                \"\\n\\twhere low and optional high are non-negative integers or 'auto' for the default choice,\"\n                                                \"\\n\\tand optional step expression specifies how thread numbers are chosen within the range.\"\n                                                \"\\n\\tSee examples/common/index.html for detailed description.\"\n   ;\n\n    inline void report_elapsed_time(double seconds){\n        std::cout<<\"elapsed time : \"<<seconds<<\" seconds\"<<std::endl;\n    }\n\n    inline void report_skipped(){\n        std::cout<<\"skip\"<<std::endl;\n    }\n\n    inline void parse_cli_arguments(int argc, const char* argv[], utility::cli_argument_pack cli_pack){\n        bool show_help = false;\n        cli_pack.arg(show_help,\"-h\",\"show this message\");\n\n        bool invalid_input=false;\n        try {\n            cli_pack.parse(argc,argv);\n        }catch(std::exception& e){\n            std::cerr\n                    <<\"error occurred while parsing command line.\"<<std::endl\n                    <<\"error text: \"<<e.what()<<std::endl\n                    <<std::flush;\n            invalid_input =true;\n        }\n        if (show_help || invalid_input){\n            std::cout<<cli_pack.usage_string(argv[0])<<std::flush;\n            std::exit(0);\n        }\n\n    }\n    inline void parse_cli_arguments(int argc, char* argv[], utility::cli_argument_pack cli_pack){\n         parse_cli_arguments(argc, const_cast<const char**>(argv), cli_pack);\n    }\n}\n\n#endif /* UTILITY_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=count_strings\nARGS=\nPERF_RUN_ARGS=auto 10000000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:   release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\t\nperf_build: release\n\t\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Count_Strings\nARGS=\nPERF_RUN_ARGS=auto 10000000 silent\n\n# The C++ compiler options\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe \ndebug: compiler_check\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe \nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\nperf_build: release\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/count_strings.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Workaround for ICC 11.0 not finding __sync_fetch_and_add_4 on some of the Linux platforms.\n#if __linux__ && defined(__INTEL_COMPILER)\n#define __sync_fetch_and_add(ptr,addend) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(ptr)), addend)\n#endif\n#include <string>\n#include <cstring>\n#include <cctype>\n#include <cstdlib>\n#include <cstdio>\n#include \"tbb/concurrent_hash_map.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"../../common/utility/utility.h\"\n\n\n//! String type with scalable allocator.\n/** On platforms with non-scalable default memory allocators, the example scales \n    better if the string allocator is changed to tbb::tbb_allocator<char>. */\ntypedef std::basic_string<char,std::char_traits<char>,tbb::tbb_allocator<char> > MyString;\n\nusing namespace tbb;\nusing namespace std;\n\n//! Set to true to counts.\nstatic bool verbose = false;\nstatic bool silent = false;\n//! Problem size\nlong N = 1000000;\nconst int size_factor = 2;\n\n//! A concurrent hash table that maps strings to ints.\ntypedef concurrent_hash_map<MyString,int> StringTable;\n\n//! Function object for counting occurrences of strings.\nstruct Tally {\n    StringTable& table;\n    Tally( StringTable& table_ ) : table(table_) {}\n    void operator()( const blocked_range<MyString*> range ) const {\n        for( MyString* p=range.begin(); p!=range.end(); ++p ) {\n            StringTable::accessor a;\n            table.insert( a, *p );\n            a->second += 1;\n        }\n    }\n};\n\nstatic MyString* Data;\n\nstatic void CountOccurrences(int nthreads) {\n    StringTable table;\n\n    tick_count t0 = tick_count::now();\n    parallel_for( blocked_range<MyString*>( Data, Data+N, 1000 ), Tally(table) );\n    tick_count t1 = tick_count::now();\n\n    int n = 0;\n    for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) {\n        if( verbose && nthreads )\n            printf(\"%s %d\\n\",i->first.c_str(),i->second);\n        n += i->second;\n    }\n\n    if ( !silent ) printf(\"total = %d  unique = %u  time = %g\\n\", n, unsigned(table.size()), (t1-t0).seconds());\n}\n\n/// Generator of random words\n\nstruct Sound {\n    const char *chars;\n    int rates[3];// beginning, middle, ending\n};\nSound Vowels[] = {\n    {\"e\", {445,6220,1762}}, {\"a\", {704,5262,514}}, {\"i\", {402,5224,162}}, {\"o\", {248,3726,191}},\n    {\"u\", {155,1669,23}}, {\"y\", {4,400,989}}, {\"io\", {5,512,18}}, {\"ia\", {1,329,111}},\n    {\"ea\", {21,370,16}}, {\"ou\", {32,298,4}}, {\"ie\", {0,177,140}}, {\"ee\", {2,183,57}},\n    {\"ai\", {17,206,7}}, {\"oo\", {1,215,7}}, {\"au\", {40,111,2}}, {\"ua\", {0,102,4}},\n    {\"ui\", {0,104,1}}, {\"ei\", {6,94,3}}, {\"ue\", {0,67,28}}, {\"ay\", {1,42,52}},\n    {\"ey\", {1,14,80}}, {\"oa\", {5,84,3}}, {\"oi\", {2,81,1}}, {\"eo\", {1,71,5}},\n    {\"iou\", {0,61,0}}, {\"oe\", {2,46,9}}, {\"eu\", {12,43,0}}, {\"iu\", {0,45,0}},\n    {\"ya\", {12,19,5}}, {\"ae\", {7,18,10}}, {\"oy\", {0,10,13}}, {\"ye\", {8,7,7}},\n    {\"ion\", {0,0,20}}, {\"ing\", {0,0,20}}, {\"ium\", {0,0,10}}, {\"er\", {0,0,20}}\n};\nSound Consonants[] = {\n    {\"r\", {483,1414,1110}}, {\"n\", {312,1548,1114}}, {\"t\", {363,1653,251}}, {\"l\", {424,1341,489}},\n    {\"c\", {734,735,260}}, {\"m\", {732,785,161}}, {\"d\", {558,612,389}}, {\"s\", {574,570,405}},\n    {\"p\", {519,361,98}}, {\"b\", {528,356,30}}, {\"v\", {197,598,16}}, {\"ss\", {3,191,567}},\n    {\"g\", {285,430,42}}, {\"st\", {142,323,180}}, {\"h\", {470,89,30}}, {\"nt\", {0,350,231}},\n    {\"ng\", {0,117,442}}, {\"f\", {319,194,19}}, {\"ll\", {1,414,83}}, {\"w\", {249,131,64}},\n    {\"k\", {154,179,47}}, {\"nd\", {0,279,92}}, {\"bl\", {62,235,0}}, {\"z\", {35,223,16}},\n    {\"sh\", {112,69,79}}, {\"ch\", {139,95,25}}, {\"th\", {70,143,39}}, {\"tt\", {0,219,19}},\n    {\"tr\", {131,104,0}}, {\"pr\", {186,41,0}}, {\"nc\", {0,223,2}}, {\"j\", {184,32,1}},\n    {\"nn\", {0,188,20}}, {\"rt\", {0,148,51}}, {\"ct\", {0,160,29}}, {\"rr\", {0,182,3}},\n    {\"gr\", {98,87,0}}, {\"ck\", {0,92,86}}, {\"rd\", {0,81,88}}, {\"x\", {8,102,48}},\n    {\"ph\", {47,101,10}}, {\"br\", {115,43,0}}, {\"cr\", {92,60,0}}, {\"rm\", {0,131,18}},\n    {\"ns\", {0,124,18}}, {\"sp\", {81,55,4}}, {\"sm\", {25,29,85}}, {\"sc\", {53,83,1}},\n    {\"rn\", {0,100,30}}, {\"cl\", {78,42,0}}, {\"mm\", {0,116,0}}, {\"pp\", {0,114,2}},\n    {\"mp\", {0,99,14}}, {\"rs\", {0,96,16}}, /*{\"q\", {52,57,1}},*/ {\"rl\", {0,97,7}},\n    {\"rg\", {0,81,15}}, {\"pl\", {56,39,0}}, {\"sn\", {32,62,1}}, {\"str\", {38,56,0}},\n    {\"dr\", {47,44,0}}, {\"fl\", {77,13,1}}, {\"fr\", {77,11,0}}, {\"ld\", {0,47,38}},\n    {\"ff\", {0,62,20}}, {\"lt\", {0,61,19}}, {\"rb\", {0,75,4}}, {\"mb\", {0,72,7}},\n    {\"rc\", {0,76,1}}, {\"gg\", {0,74,1}}, {\"pt\", {1,56,10}}, {\"bb\", {0,64,1}},\n    {\"sl\", {48,17,0}}, {\"dd\", {0,59,2}}, {\"gn\", {3,50,4}}, {\"rk\", {0,30,28}},\n    {\"nk\", {0,35,20}}, {\"gl\", {40,14,0}}, {\"wh\", {45,6,0}}, {\"ntr\", {0,50,0}},\n    {\"rv\", {0,47,1}}, {\"ght\", {0,19,29}}, {\"sk\", {23,17,5}}, {\"nf\", {0,46,0}},\n    {\"cc\", {0,45,0}}, {\"ln\", {0,41,0}}, {\"sw\", {36,4,0}}, {\"rp\", {0,36,4}},\n    {\"dn\", {0,38,0}}, {\"ps\", {14,19,5}}, {\"nv\", {0,38,0}}, {\"tch\", {0,21,16}},\n    {\"nch\", {0,26,11}}, {\"lv\", {0,35,0}}, {\"wn\", {0,14,21}}, {\"rf\", {0,32,3}},\n    {\"lm\", {0,30,5}}, {\"dg\", {0,34,0}}, {\"ft\", {0,18,15}}, {\"scr\", {23,10,0}},\n    {\"rch\", {0,24,6}}, {\"rth\", {0,23,7}}, {\"rh\", {13,15,0}}, {\"mpl\", {0,29,0}},\n    {\"cs\", {0,1,27}}, {\"gh\", {4,10,13}}, {\"ls\", {0,23,3}}, {\"ndr\", {0,25,0}},\n    {\"tl\", {0,23,1}}, {\"ngl\", {0,25,0}}, {\"lk\", {0,15,9}}, {\"rw\", {0,23,0}},\n    {\"lb\", {0,23,1}}, {\"tw\", {15,8,0}}, /*{\"sq\", {15,8,0}},*/ {\"chr\", {18,4,0}},\n    {\"dl\", {0,23,0}}, {\"ctr\", {0,22,0}}, {\"nst\", {0,21,0}}, {\"lc\", {0,22,0}},\n    {\"sch\", {16,4,0}}, {\"ths\", {0,1,20}}, {\"nl\", {0,21,0}}, {\"lf\", {0,15,6}},\n    {\"ssn\", {0,20,0}}, {\"xt\", {0,18,1}}, {\"xp\", {0,20,0}}, {\"rst\", {0,15,5}},\n    {\"nh\", {0,19,0}}, {\"wr\", {14,5,0}}\n};\nconst int VowelsNumber = sizeof(Vowels)/sizeof(Sound);\nconst int ConsonantsNumber = sizeof(Consonants)/sizeof(Sound);\nint VowelsRatesSum[3] = {0,0,0}, ConsonantsRatesSum[3] = {0,0,0};\n\nint CountRateSum(Sound sounds[], const int num, const int part)\n{\n    int sum = 0;\n    for(int i = 0; i < num; i++)\n        sum += sounds[i].rates[part];\n    return sum;\n}\n\nconst char *GetLetters(int type, const int part)\n{\n    Sound *sounds; int rate, i = 0;\n    if(type & 1)\n        sounds = Vowels, rate = rand() % VowelsRatesSum[part];\n    else\n        sounds = Consonants, rate = rand() % ConsonantsRatesSum[part];\n    do {\n        rate -= sounds[i++].rates[part];\n    } while(rate > 0);\n    return sounds[--i].chars;\n}\n\nstatic void CreateData() {\n    for(int i = 0; i < 3; i++) {\n        ConsonantsRatesSum[i] = CountRateSum(Consonants, ConsonantsNumber, i);\n        VowelsRatesSum[i] = CountRateSum(Vowels, VowelsNumber, i);\n    }\n    for( int i=0; i<N; ++i ) {\n        int type = rand();\n        Data[i] = GetLetters(type++, 0);\n        for( int j = 0; j < type%size_factor; ++j )\n            Data[i] += GetLetters(type++, 1);\n        Data[i] += GetLetters(type, 2);\n    }\n    MyString planet = Data[12]; planet[0] = toupper(planet[0]);\n    MyString helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);\n    helloworld += \", \"+Data[1]+\" \"+Data[2]+\" \"+Data[3]+\" \"+Data[4]+\" \"+Data[5];\n    if ( !silent ) printf(\"Message from planet '%s': %s!\\nAnalyzing whole text...\\n\", planet.c_str(), helloworld.c_str());\n}\n\nint main( int argc, char* argv[] ) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n        srand(2);\n\n        //! Working threads count\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads,0);\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(N,\"n-of-strings\",\"number of strings\")\n            .arg(verbose,\"verbose\",\"verbose mode\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            );\n\n        if ( silent ) verbose = false;\n\n        Data = new MyString[N];\n        CreateData();\n\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p)) {\n                if ( !silent ) printf(\"threads = %d  \", p );\n                task_scheduler_init init( p );\n                CountOccurrences( p );\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and parallel version\n            { // serial run\n                if ( !silent ) printf(\"serial run   \");\n                task_scheduler_init init_serial(1);\n                CountOccurrences(1);\n            }\n            { // parallel run (number of threads is selected automatically)\n                if ( !silent ) printf(\"parallel run \");\n                task_scheduler_init init_parallel;\n                CountOccurrences(0);\n            }\n        }\n\n        delete[] Data;\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/msvs/count_strings.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"count_strings\", \"count_strings.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>count_strings</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252C}</ProjectGuid>\n    <RootNamespace>count_strings</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\" ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\count_strings.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Count_strings sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Count_strings sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe example counts the number of unique words in a text.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"count_strings.cpp\">count_strings.cpp</a>\n\t\t\t\t<dd>Source code for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\t\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). \n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only). \n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\t\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tGeneral build directions can be found <a href=\"../../index.html\">here</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>count_strings <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>count_strings [<i>n-of-threads</i>=value] [<i>n-of-strings</i>=value] [<i>verbose</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>count_strings [<i>n-of-threads</i> [<i>n-of-strings</i>]] [<i>verbose</i>] [<i>silent</i>] </tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-strings</i> is a number of strings.<br>\n\t\t\t\t\t<i>verbose</i> - enables printing of extra information during execution.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example.\n\t\t\t\t\t<br>Run it with a small number of strings and the desired number of threads, e.g., <tt>count_strings 2 10000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* count_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* count_strings.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* count_strings */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = count_strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* count_strings.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* count_strings */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* count_strings */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"count_strings\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = count_strings;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = count_strings;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* count_strings */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"count_strings\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* count_strings */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* count_strings */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* count_strings.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = count_strings;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = count_strings;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = count_strings;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = count_strings;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"count_strings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"count_strings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_hash_map/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on concurrent_hash_map container</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>concurrent_hash_map</code> container</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>concurrent_hash_map</code> container.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"count_strings/readme.html\">count_strings</a>\n\t\t\t\t<dd>Concurrently inserts strings into a <code>concurrent_hash_map</code> container.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on concurrent_priority_queue container</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>concurrent_priority_queue</code> container</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>concurrent_priority_queue</code> container.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"shortpath/readme.html\">shortpath</a>\n\t\t\t\t<dd>Solves the single source shortest path problem using a <code>concurrent_priority_queue</code> container.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=shortpath\nARGS=4 N=1000 start=0 end=999 verbose\nPERF_RUN_ARGS=auto N=1000 start=0 end=99 silent\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=shortpath\nARGS=4 N=1000 start=0 end=999 verbose\nPERF_RUN_ARGS=auto N=1000 start=0 end=99 silent\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease:\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@$(CXX) >nul 2>&1 || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"shortpath\", \"shortpath.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252A}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>shortpath</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>\n    <RootNamespace>shortpath</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\shortpath.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Shortpath sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Shortpath sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that solves the single source\n\t\tshortest path problem.\n\t<br><br>\n\t\tIt is parameterized by N, a number of nodes, and a start and end node in [0..N). \n\t\tA graph is generated with N nodes and some random number of connections between those nodes.\n\t\tA parallel algorithm based on A* is used to find the shortest path.\n\t<br><br>\n\t\tThis algorithm varies from serial A* in that it needs to add nodes back to\n\t\tthe open set when the g estimate (shortest path from start to the node) is improved, \n\t\teven if the node has already been \"visited\".  This is because nodes are added and removed \n\t\tfrom the open-set in parallel, resulting in some less optimal paths being explored.\n\t\tThe open-set is implemented with the concurrent_priority_queue.\n\t<br><br>\n\t\tNote that since we re-visit nodes, the <i>f</i> estimate (on which the priority queue is sorted)\n\t\tis not technically needed, so we could use this same parallel algorithm with just a concurrent_queue.\n\t\tHowever, keeping the <i>f</i> estimate and using <code>concurrent_priority_queue</code>\n\t\tresults in much better performance.\n\t<br><br>\n\t\tSilent mode prints run time only,\n\t\tregular mode prints the shortest path length, \n\t\tand verbose mode prints out the shortest path.\n\t<br><br>\n\t\tThe generated graph follows a pattern in which the closer two pairs of\n\t\tnode ids are together, the fewer hops there are in a typical path\n\t\tbetween those nodes. So, for example, the path between 5 and 7 likely\n\t\thas few hops whereas 14 to 78 has more and 0 to 9999 has even more,\n\t\tetc.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"shortpath.cpp\">shortpath.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains macOS* Xcode* workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>shortpath <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>shortpath [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>start</i>=value] [<i>end</i>=value] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print full path to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t\t<tt><i>N</i></tt> number of nodes in graph<br>\n\t\t\t\t\t<tt><i>start</i></tt> node to start path at<br>\n\t\t\t\t\t<tt><i>end</i></tt> node to end path at<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>shortpath&nbsp;4&nbsp;N=20&nbsp;start=0&nbsp;end=19</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/shortpath.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <vector>\n#include <math.h>\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_group.h\"\n#include \"tbb/concurrent_priority_queue.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"../../common/utility/utility.h\"\n#include \"../../common/utility/fast_random.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif /* _MSC_VER && _Wp64 */\n\nusing namespace std;\nusing namespace tbb;\n\nstruct point {\n    double x, y;\n    point() {}\n    point(double _x, double _y) : x(_x), y(_y) {}\n    point(const point& p) : x(p.x), y(p.y) {}\n};\n\ndouble get_distance(const point& p1, const point& p2) {\n    double xdiff=p1.x-p2.x, ydiff=p1.y-p2.y;\n    return sqrt(xdiff*xdiff + ydiff*ydiff);\n}\n\n// generates random points on 2D plane within a box of maxsize width & height\npoint generate_random_point(utility::FastRandom& mr) {\n    const size_t maxsize=500;\n    double x = (double)(mr.get() % maxsize);\n    double y = (double)(mr.get() % maxsize);\n    return point(x,y);\n}\n\n// weighted toss makes closer nodes (in the point vector) heavily connected\nbool die_toss(size_t a, size_t b, utility::FastRandom& mr) {\n    int node_diff = std::abs((int)(a-b));\n    // near nodes\n    if (node_diff < 16) return true;\n    // mid nodes\n    if (node_diff < 64) return ((int)mr.get() % 8 == 0);\n    // far nodes\n    if (node_diff < 512) return ((int)mr.get() % 16 == 0);\n    return false;\n}\n\ntypedef vector<point> point_set;\ntypedef size_t vertex_id;\ntypedef std::pair<vertex_id,double> vertex_rec;\ntypedef vector<vector<vertex_id> > edge_set;\n\nbool verbose = false;          // prints bin details and other diagnostics to screen\nbool silent = false;           // suppress all output except for time\nsize_t N = 1000;               // number of vertices\nsize_t src = 0;                // start of path\nsize_t dst = N-1;              // end of path\ndouble INF=100000.0;           // infinity\nsize_t grainsize = 16;         // number of vertices per task on average\nsize_t max_spawn;              // max tasks to spawn\ntbb::atomic<size_t> num_spawn;      // number of active tasks\n\npoint_set vertices;            // vertices\nedge_set edges;                // edges\nvector<vertex_id> predecessor; // for recreating path from src to dst\n\nvector<double> f_distance;     // estimated distances at particular vertex\nvector<double> g_distance;     // current shortest distances from src vertex\nspin_mutex    *locks;          // a lock for each vertex\ntask_group *sp_group;          // task group for tasks executing sub-problems\n\nclass compare_f {\npublic:\n    bool operator()(const vertex_rec& u, const vertex_rec& v) const {\n        return u.second>v.second;\n    }\n};\n\nconcurrent_priority_queue<vertex_rec, compare_f> open_set; // tentative vertices\n\nvoid shortpath_helper();\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass shortpath_helper_functor {\npublic:\n    shortpath_helper_functor() {};\n    void operator() () const { shortpath_helper(); }\n};\n#endif\n\nvoid shortpath() {\n    sp_group = new task_group;\n    g_distance[src] = 0.0; // src's distance from src is zero\n    f_distance[src] = get_distance(vertices[src], vertices[dst]); // estimate distance from src to dst\n    open_set.push(make_pair(src,f_distance[src])); // push src into open_set\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    sp_group->run([](){ shortpath_helper(); });\n#else\n    sp_group->run( shortpath_helper_functor() );\n#endif\n    sp_group->wait();\n    delete sp_group;\n}\n\nvoid shortpath_helper() {\n    vertex_rec u_rec;\n    while (open_set.try_pop(u_rec)) {\n        vertex_id u = u_rec.first;\n        if (u==dst) continue;\n        double f = u_rec.second;\n        double old_g_u = 0.0;\n        {\n            spin_mutex::scoped_lock l(locks[u]);\n            if (f > f_distance[u]) continue; // prune search space\n            old_g_u = g_distance[u];\n        }\n        for (size_t i=0; i<edges[u].size(); ++i) {\n            vertex_id v = edges[u][i];\n            double new_g_v = old_g_u + get_distance(vertices[u], vertices[v]);\n            double new_f_v = 0.0;\n            // the push flag lets us move some work out of the critical section below\n            bool push = false;\n            {\n                spin_mutex::scoped_lock l(locks[v]);\n                if (new_g_v < g_distance[v]) {\n                    predecessor[v] = u;\n                    g_distance[v] = new_g_v;\n                    new_f_v = f_distance[v] = g_distance[v] + get_distance(vertices[v], vertices[dst]);\n                    push = true;\n                }\n            }\n            if (push) {\n                open_set.push(make_pair(v,new_f_v));\n                size_t n_spawn = ++num_spawn;\n                if (n_spawn < max_spawn) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                    sp_group->run([]{ shortpath_helper(); });\n#else\n                    sp_group->run( shortpath_helper_functor() );\n#endif\n                }\n                else --num_spawn;\n            }\n        }\n    }\n    --num_spawn;\n}\n\nvoid make_path(vertex_id src, vertex_id dst, vector<vertex_id>& path) {\n    vertex_id at = predecessor[dst];\n    if (at == N) path.push_back(src);\n    else if (at == src) { path.push_back(src); path.push_back(dst); }\n    else { make_path(src, at, path); path.push_back(dst); }\n}\n\nvoid print_path() {\n    vector<vertex_id> path;\n    double path_length=0.0;\n    make_path(src, dst, path);\n    if (verbose) printf(\"\\n      \");\n    for (size_t i=0; i<path.size(); ++i) {\n        if (path[i] != dst) {\n            double seg_length = get_distance(vertices[path[i]], vertices[path[i+1]]);\n            if (verbose) printf(\"%6.1f       \", seg_length);\n            path_length += seg_length;\n        }\n        else if (verbose) printf(\"\\n\");\n    }\n    if (verbose) {\n        for (size_t i=0; i<path.size(); ++i) {\n            if (path[i] != dst) printf(\"(%4d)------>\", (int)path[i]);\n            else printf(\"(%4d)\\n\", (int)path[i]);\n        }\n    }\n    if (verbose) printf(\"Total distance = %5.1f\\n\", path_length);\n    else if (!silent) printf(\" %5.1f\\n\", path_length);\n}\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass gen_vertices {\npublic:\n    gen_vertices() {}\n    void operator() (blocked_range<size_t>& r) const {\n        utility::FastRandom my_random((unsigned int)r.begin());\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            vertices[i] = generate_random_point(my_random);\n        }\n    }\n};\n\nclass gen_edges {\npublic:\n    gen_edges() {}\n    void operator() (blocked_range<size_t>& r) const {\n        utility::FastRandom my_random((unsigned int)r.begin());\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            for (size_t j=0; j<i; ++j) {\n                if (die_toss(i, j, my_random))\n                    edges[i].push_back(j);\n            }\n        }\n    }\n};\n\nclass reset_vertices {\npublic:\n    reset_vertices() {}\n    void operator() (blocked_range<size_t>& r) const {\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            f_distance[i] = g_distance[i] = INF;\n            predecessor[i] = N;\n        }\n    }\n};\n#endif\n\nvoid InitializeGraph() {\n    task_scheduler_init init(get_default_num_threads());\n    vertices.resize(N);\n    edges.resize(N);\n    predecessor.resize(N);\n    g_distance.resize(N);\n    f_distance.resize(N);\n    locks = new spin_mutex[N];\n    if (verbose) printf(\"Generating vertices...\\n\");\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N,64),\n                 [&](blocked_range<size_t>& r) {\n                     utility::FastRandom my_random(r.begin());\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         vertices[i] = generate_random_point(my_random);\n                     }\n                 }, simple_partitioner());\n#else\n    parallel_for(blocked_range<size_t>(0,N,64), gen_vertices(), simple_partitioner());\n#endif\n    if (verbose) printf(\"Generating edges...\\n\");\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N,64),\n                 [&](blocked_range<size_t>& r) {\n                     utility::FastRandom my_random(r.begin());\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         for (size_t j=0; j<i; ++j) {\n                             if (die_toss(i, j, my_random))\n                                 edges[i].push_back(j);\n                         }\n                     }\n                 }, simple_partitioner());\n#else\n    parallel_for(blocked_range<size_t>(0,N,64), gen_edges(), simple_partitioner());\n#endif\n    for (size_t i=0; i<N; ++i) {\n        for (size_t j=0; j<edges[i].size(); ++j) {\n            vertex_id k = edges[i][j];\n            edges[k].push_back(i);\n        }\n    }\n    if (verbose) printf(\"Done.\\n\");\n}\n\nvoid ReleaseGraph() {\n    delete []locks;\n}\n\nvoid ResetGraph() {\n    task_scheduler_init init(get_default_num_threads());\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N),\n                 [&](blocked_range<size_t>& r) {\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         f_distance[i] = g_distance[i] = INF;\n                         predecessor[i] = N;\n                     }\n                 });\n#else\n    parallel_for(blocked_range<size_t>(0,N), reset_vertices());\n#endif\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n                                     .arg(N,\"N\",\"         number of vertices\")\n                                     .arg(src,\"start\",\"      start of path\")\n                                     .arg(dst,\"end\",\"        end of path\")\n        );\n        if (silent) verbose = false;  // make silent override verbose\n        else\n            printf(\"shortpath will run with %d vertices to find shortest path between vertices\"\n                   \" %d and %d using %d:%d threads.\\n\",\n                   (int)N, (int)src, (int)dst, (int)threads.first, (int)threads.last);\n\n        if (dst >= N) {\n            if (verbose)\n                printf(\"end value %d is invalid for %d vertices; correcting to %d\\n\", (int)dst, (int)N, (int)N-1);\n            dst = N-1;\n        }\n\n        num_spawn = 0;\n        max_spawn = N/grainsize;\n        tick_count t0, t1;\n        InitializeGraph();\n        for (int n_thr=threads.first; n_thr<=threads.last; n_thr=threads.step(n_thr)) {\n            ResetGraph();\n            task_scheduler_init init(n_thr);\n            t0 = tick_count::now();\n            shortpath();\n            t1 = tick_count::now();\n            if (!silent) {\n                if (predecessor[dst] != N) {\n                    printf(\"%d threads: [%6.6f] The shortest path from vertex %d to vertex %d is:\",\n                           (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);\n                    print_path();\n                }\n                else {\n                    printf(\"%d threads: [%6.6f] There is no path from vertex %d to vertex %d\\n\",\n                           (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);\n                }\n            } else\n                utility::report_elapsed_time((t1-t0).seconds());\n        }\n        ReleaseGraph();\n        return 0;\n    } catch(std::exception& e) {\n        cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };\n\t\t0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };\n\t\t61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4771A13CE199D0022F8F6 /* shortpath.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t61C4771A13CE199D0022F8F6 /* shortpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shortpath.cpp; path = ../shortpath.cpp; sourceTree = \"<group>\"; };\n\t\t8DD76F6C0486A84900D96B5E /* Shortpath */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Shortpath; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Shortpath */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Shortpath;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t61C4771A13CE199D0022F8F6 /* shortpath.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Shortpath */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0E8A7310136F4A4600453C80 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Shortpath */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Shortpath\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Shortpath;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Shortpath;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Shortpath */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"shortpath\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Shortpath */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Shortpath */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Shortpath;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Shortpath;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Shortpath;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Shortpath;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Shortpath\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"shortpath\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=binpack\nARGS=4 N=1000\nPERF_RUN_ARGS=auto N=1000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # which icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=binpack\nARGS= 4 N=1000\nPERF_RUN_ARGS=auto N=1000 silent\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease:\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@$(CXX) >nul 2>&1 || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/binpack.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n/* Bin-packing algorithm that attempts to use minimal number of bins B of\n   size V to contain N items of varying sizes. */\n\n#include <string>\n#include <iostream>\n#include <cmath>\n#include <vector>\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"../../common/utility/utility.h\"\n\nusing tbb::tick_count;\nusing tbb::task_scheduler_init;\nusing namespace tbb::flow;\n\ntypedef size_t size_type;             // to represent non-zero indices, capacities, etc.\ntypedef size_t value_type;            // the type of items we are attempting to pack into bins\ntypedef std::vector<value_type> bin;  // we use a simple vector to represent a bin\n// Our bin packers will be function nodes in the graph that take value_type items and\n// return a dummy value.  They will also implicitly send packed bins to the bin_buffer\n// node, and unused items back to the value_pool node:\ntypedef multifunction_node<value_type, tuple<value_type, bin>, rejecting> bin_packer;\n// Items are placed into a pool that all bin packers grab from, represent by a queue_node:\ntypedef queue_node<value_type> value_pool;\n// Packed bins are placed in this buffer waiting to be serially printed and/or accounted for:\ntypedef buffer_node<bin> bin_buffer;\n// Packed bins are taken from the_bin_buffer and processed by the_writer:\ntypedef function_node<bin, continue_msg, rejecting> bin_writer;\n// Items are injected into the graph when this node sends them to the_value_pool:\ntypedef source_node<value_type> value_source;\n\n// User-specified globals with default values\nsize_type V = 42;                // desired capacity for each bin\nsize_type N = 1000;              // number of elements to generate\nbool verbose = false;            // prints bin details and other diagnostics to screen\nbool silent = false;             // suppress all output except for time\nint num_bin_packers=-1;          // number of concurrent bin packers in operation; default is #threads;\n                                 // larger values can result in more bins at less than full capacity\nsize_type optimality=1;          // 1 (default) is highest the algorithm can obtain; larger numbers run faster\n\n// Calculated globals\nsize_type min_B;                 // lower bound on the optimal number of bins\nsize_type B;                     // the answer, i.e. number of bins used by the algorithm\nsize_type *input_array;          // stores randomly generated input values\nvalue_type item_sum;             // sum of all randomly generated input values\ntbb::atomic<value_type> packed_sum;   // sum of all values currently packed into all bins\ntbb::atomic<size_type> packed_items;  // number of values currently packed into all bins\ntbb::atomic<size_type> active_bins;   // number of active bin_packers\nbin_packer **bins;               // the array of bin packers\n\n// This class is the Body type for bin_packer\nclass bin_filler {\n    typedef bin_packer::output_ports_type ports_type;\n    bin my_bin;                   // the current bin that this bin_filler is packing\n    size_type my_used;            // capacity of bin used by current contents (not to be confused with my_bin.size())\n    size_type relax, relax_val;   // relaxation counter for determining when to settle for a non-full bin\n    bin_packer* my_bin_packer;    // ptr to the bin packer that this body object is associated with\n    size_type bin_index;          // index of the encapsulating bin packer in the global bins array\n    value_type looking_for;       // the minimum size of item this bin_packer will accept\n    value_pool* the_value_pool;   // the queue of incoming values\n    bool done;                    // flag to indicate that this binpacker has been deactivated\n public:\n    bin_filler(size_t bidx, value_pool* _q) :\n        my_used(0), relax(0), relax_val(0), my_bin_packer(NULL), bin_index(bidx), looking_for(V), the_value_pool(_q), done(false) {}\n    void operator()(const value_type& item, ports_type& p) {\n        if (!my_bin_packer) my_bin_packer = bins[bin_index];\n        if (done) get<0>(p).try_put(item); // this bin_packer is done packing items; put item back to pool\n        else if (item > V) { // signal that packed_sum has reached item_sum at some point\n            size_type remaining = active_bins--;\n            if (remaining == 1 && packed_sum == item_sum) { // this is the last bin and it has seen everything\n                // this bin_packer may not have seen everything, so stay active\n                if (my_used>0) get<1>(p).try_put(my_bin);\n                my_bin.clear();\n                my_used = 0;\n                looking_for = V;\n                ++active_bins;\n            }\n            else if (remaining == 1) { // this is the last bin, but there are remaining items\n                get<0>(p).try_put(V+1); // send out signal\n                ++active_bins;\n            }\n            else if (remaining > 1) { // this is not the last bin; deactivate\n                if (my_used < V/(1+optimality*.1)) { // this bin is ill-utilized; throw back items and deactivate\n                    packed_sum -= my_used;\n                    packed_items -= my_bin.size();\n                    for (size_type i=0; i<my_bin.size(); ++i)\n                        get<0>(p).try_put(my_bin[i]);\n                    the_value_pool->remove_successor(*my_bin_packer); // deactivate\n                    done = true;\n                    get<0>(p).try_put(V+1); // send out signal\n                }\n                else { // this bin is well-utilized; send out bin and deactivate\n                    the_value_pool->remove_successor(*my_bin_packer); // build no more bins\n                    done = true;\n                    if (my_used>0) get<1>(p).try_put(my_bin);\n                    get<0>(p).try_put(V+1); // send out signal\n                }\n            }\n        }\n        else if (item <= V-my_used && item >= looking_for) { // this item can be packed\n            my_bin.push_back(item);\n            my_used += item;\n            packed_sum += item;\n            ++packed_items;\n            looking_for = V-my_used;\n            relax = 0;\n            if (packed_sum == item_sum) {\n                get<0>(p).try_put(V+1); // send out signal\n            }\n            if (my_used == V) {\n                get<1>(p).try_put(my_bin);\n                my_bin.clear();\n                my_used = 0;\n                looking_for = V;\n            }\n        }\n        else { // this item can't be packed; relax constraints\n            ++relax;\n            if (relax >= (N-packed_items)/optimality) { // this bin_packer has looked through enough items\n                relax = 0;\n                --looking_for; // accept a wider range of items\n                if (looking_for == 0 && my_used < V/(1+optimality*.1) && my_used > 0 && active_bins > 1) {\n                    // this bin_packer is ill-utilized and can't find items; deactivate and throw back items\n                    size_type remaining = active_bins--;\n                    if (remaining > 1) { // not the last bin_packer\n                        the_value_pool->remove_successor(*my_bin_packer); // deactivate\n                        done = true;\n                    }\n                    else active_bins++; // can't deactivate last bin_packer\n                    packed_sum -= my_used;\n                    packed_items -= my_bin.size();\n                    for (size_type i=0; i<my_bin.size(); ++i)\n                        get<0>(p).try_put(my_bin[i]);\n                    my_bin.clear();\n                    my_used = 0;\n                }\n                else if (looking_for == 0 && (my_used >= V/(1+optimality*.1) || active_bins == 1)) {\n                    // this bin_packer can't find items but is well-utilized, so send it out and reset\n                    get<1>(p).try_put(my_bin);\n                    my_bin.clear();\n                    my_used = 0;\n                    looking_for = V;\n                }\n            }\n            get<0>(p).try_put(item); // put unused item back to pool\n        }\n    }\n};\n\n// source node uses this to send the values to the value_pool\nclass item_generator {\n    size_type counter;\npublic:\n    item_generator() : counter(0) {}\n    bool operator()(value_type& m) {\n        if (counter<N) {\n            m = input_array[counter];\n            ++counter;\n            return true;\n        }\n        return false;\n    }\n};\n\n// the terminal function_node uses this to gather stats and print bin information\nclass bin_printer {\n    value_type running_count;\n    size_type item_count;\n    value_type my_min, my_max;\n    double avg;\npublic:\n    bin_printer() : running_count(0), item_count(0), my_min(V), my_max(0), avg(0) {}\n    continue_msg operator()(bin b) {\n        value_type sum=0;\n        ++B;\n        if (verbose)\n            std::cout << \"[ \";\n        for (size_type i=0; i<b.size(); ++i) {\n            if (verbose)\n                std::cout << b[i] << \" \";\n            sum+=b[i];\n            ++item_count;\n        }\n        if (sum < my_min) my_min = sum;\n        if (sum > my_max) my_max = sum;\n        avg += sum;\n        running_count += sum;\n        if (verbose)\n        std::cout << \"]=\" << sum << \"; Done/Packed/Total cap: \" << running_count << \"/\" << packed_sum << \"/\" << item_sum\n             << \" items:\" << item_count << \"/\" << packed_items << \"/\" << N << \" B=\" << B << std::endl;\n        if (item_count == N) { // should be the last; print stats\n            avg = avg/(double)B;\n            if (!silent)\n                std::cout << \"SUMMARY: #Bins used: \" << B << \"; Avg size: \" << avg << \"; Max size: \" << my_max\n                     << \"; Min size: \" << my_min << \"\\n         Lower bound on optimal #bins: \" << min_B\n                     << \"; Start #bins: \" << num_bin_packers << std::endl;\n        }\n        return continue_msg();  // need to return something\n    }\n};\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n                                     .arg(N,\"N\",\"         number of values to pack\")\n                                     .arg(V,\"V\",\"         capacity of each bin\")\n                                     .arg(num_bin_packers,\"#packers\",\"  number of concurrent bin packers to use \"\n                                          \"(default=#threads)\")\n                                     .arg(optimality,\"optimality\",\"controls optimality of solution; 1 is highest, use\\n\"\n                                          \"              larger numbers for less optimal but faster solution\")\n        );\n\n        if (silent) verbose = false;  // make silent override verbose\n        // Generate random input data\n        srand(42);\n        input_array = new value_type[N];\n        item_sum = 0;\n        for (size_type i=0; i<N; ++i) {\n            input_array[i] = rand() % V + 1;  // generate items that fit in a bin\n            item_sum += input_array[i];\n        }\n        min_B = (item_sum % V) ? item_sum/V + 1 : item_sum/V;\n\n        tick_count start = tick_count::now();\n        for(int p = threads.first; p <= threads.last; p = threads.step(p)) {\n            task_scheduler_init init(p);\n            packed_sum = 0;\n            packed_items = 0;\n            B = 0;\n            if (num_bin_packers == -1) num_bin_packers = p;\n            active_bins = num_bin_packers;\n            if (!silent)\n                std::cout << \"binpack running with \" << item_sum << \" capacity over \" << N << \" items, optimality=\"\n                     << optimality << \", \" << num_bin_packers << \" bins of capacity=\" << V << \" on \" << p\n                     << \" threads.\\n\";\n            graph g;\n            value_source the_source(g, item_generator(), false);\n            value_pool the_value_pool(g);\n            make_edge(the_source, the_value_pool);\n            bin_buffer the_bin_buffer(g);\n            bins = new bin_packer*[num_bin_packers];\n            for (int i=0; i<num_bin_packers; ++i) {\n                bins[i] = new bin_packer(g, 1, bin_filler(i, &the_value_pool));\n                make_edge(the_value_pool, *(bins[i]));\n                make_edge(output_port<0>(*(bins[i])), the_value_pool);\n                make_edge(output_port<1>(*(bins[i])), the_bin_buffer);\n            }\n            bin_writer the_writer(g, 1, bin_printer());\n            make_edge(the_bin_buffer, the_writer);\n            the_source.activate();\n            g.wait_for_all();\n            for (int i=0; i<num_bin_packers; ++i) {\n                delete bins[i];\n            }\n            delete[] bins;\n        }\n        utility::report_elapsed_time((tick_count::now() - start).seconds());\n        delete[] input_array;\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/msvs/binpack.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"binpack\", \"binpack.vcxproj\", \"{C931C7A2-074E-4150-9E7A-39A03250411E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/msvs/binpack.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>binpack</ProjectName>\n    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>\n    <RootNamespace>binpack</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\binpack.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Binpack sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Binpack sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple tbb::flow example that performs \n\t\tbinpacking of N integer values into a near-optimal number of bins\n\t\tof capacity V.\n\t<br><br>\n\t\tIt features a source_node which passes randomly\n\t\tgenerated integer values of size&lt;=V to a queue_node. Multiple\n\t\tfunction_nodes set about taking values from this queue_node and \n\t\tpacking them into bins according to a best-fit policy. Items that\n\t\tcannot be made to fit are rejected and returned to the queue. When \n\t\ta bin is packed as well as it can be, it is passed to a buffer_node\n\t\twhere it waits to be picked up by another function_node.  This final\n\t\tfunction nodes gathers stats about the bin and optionally prints its\n\t\tcontents. When all bins are accounted for, it optionally prints a \n\t\tsummary of the quality of the bin-packing.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"binpack.cpp\">binpack.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>binpack <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>binpack [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>V</i>=value] [<i>#packers</i>=value] [<i>optimality</i>=value] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>] where low and optional high are non-negative integers, or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print diagnostic output to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t\t<tt><i>N</i></tt> number of values to pack<br>\n\t\t\t\t\t<tt><i>V</i></tt> capacity of each bin<br>\n\t\t\t\t\t<tt><i>#packers</i></tt> number of concurrent bin packers to use (default=#threads)<br>\n\t\t\t\t\t<tt><i>optimality</i></tt> controls optimality of solution; 1 is highest, use larger numbers for less optimal but faster solution<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>binpack&nbsp;4&nbsp;N=100</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };\n\t\t0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };\n\t\tA1F593A60B8F042A00073279 /* binpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* binpack.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t8DD76F6C0486A84900D96B5E /* Binpack */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Binpack; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* binpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = binpack.cpp; path = ../binpack.cpp; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Binpack */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Binpack;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* binpack.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Binpack */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0E8A7310136F4A4600453C80 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Binpack */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Binpack\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Binpack;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Binpack;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Binpack */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"binpack\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Binpack */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Binpack */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* binpack.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Binpack;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Binpack;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Binpack;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Binpack;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Binpack\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"binpack\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=cholesky\nARGS=4 2\n\n# The C++ compiler\nifneq (,$(shell which icpc 2>/dev/null))\nCXX=icpc\nendif # which icpc\n\nifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib  -Wl,-rpath,$(MKLROOT)/lib\n# MKL support\noverride MKL_LIBS += -lmkl_core -lmkl_sequential -lmkl_intel\nelse\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nendif\n# MKL support\noverride MKL_LIBS += -lmkl_rt\nendif\n\n# C++0x support\noverride CXXFLAGS += -std=c++0x\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2  -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(MKL_LIBS) $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(MKL_LIBS) $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Cholesky\nARGS=4 2\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _WIN32_WINNT=0x0501 $(CXXFLAGS)\nMYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\n# MKL support\nMKL_LIBS1 = $(TBB_TARGET_ARCH)\nMKL_LIBS2 = $(MKL_LIBS1:ia32=mkl_core.lib mkl_sequential.lib mkl_intel_c.lib)\nMKL_LIBS  = $(MKL_LIBS2:intel64=mkl_core.lib mkl_sequential.lib mkl_intel_lp64.lib)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/cholesky.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <string>\n#include <cstring>\n#include <cstdio>\n#include <cmath>\n#include <vector>\n#include <map>\n\n#include \"mkl_lapack.h\"\n#include \"mkl.h\"\n\n#include \"tbb/tbb_config.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n// Application command line arguments parsing\n#include \"../../common/utility/utility.h\"\n\n/************************************************************\n FORWARD DECLARATIONS\n************************************************************/\n\n/**********************************************\n Read or generate a positive-definite matrix\n -- reads from file if fname != NULL\n     -- sets n to matrix size\n     -- allocates and reads values in to A\n -- otherwise generates a matrix\n     -- uses n to determine size\n     -- allocates and generates values in to A\n**********************************************/\nvoid matrix_init( double * &A, int &n, const char *fname );\n\n/**********************************************\n Writes a lower triangular matrix to a file\n -- first line of file is n \n -- subsequently 1 row per line\n**********************************************/\nvoid matrix_write ( double *A, int n, const char *fname, bool is_triangular = false );\n\n/************************************************************\n GLOBAL VARIABLES\n************************************************************/\nbool g_benchmark_run = false;\nint g_num_tbb_threads = tbb::task_scheduler_init::default_num_threads();\nint g_n = -1, g_b = -1, g_num_trials = 1;\nchar *g_input_file_name = NULL;\nchar *g_output_prefix = NULL;\nstd::string g_alg_name;\n\n// Creates tiled array\nstatic double ***create_tile_array( double *A, int n, int b ) {\n    const int p = n/b;\n    double ***tile = (double ***)calloc( sizeof( double ** ), p );\n\n    for ( int j = 0; j < p; ++j ) {\n        tile[j] = (double **)calloc( sizeof( double * ), p );\n    }\n\n    for ( int j = 0; j < p; ++j ) {\n        for ( int i = 0; i < p; ++i ) {\n            double *temp_block = (double *)calloc( sizeof( double ), b*b );\n\n            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {\n                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {\n                    temp_block[T_j*b+T_i] = A[A_j*n+A_i];\n                }\n            }\n\n            tile[j][i] = temp_block;\n        }\n    }\n    return tile;\n}\n\nstatic void collapse_tile_array( double ***tile, double *A, int n, int b ) {\n    const int p = n/b;\n\n    for ( int j = 0; j < p; ++j ) {\n        for ( int i = 0; i < p; ++i ) {\n            double *temp_block = tile[j][i];\n\n            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {\n                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {\n                    A[A_j*n+A_i] = temp_block[T_j*b+T_i];\n                }\n            }\n\n            free( temp_block );\n            tile[j][i] = NULL;\n        }\n\n        free( tile[j] );\n    }\n\n    free( tile );\n}\n\n/************************************************************\n Helper base class: algorithm\n************************************************************/\nclass algorithm {\n\n    std::string name;\n    bool is_tiled;\n\n    bool check_if_valid( double *A0, double *C, double *A, int n ) {\n        char transa = 'n', transb = 't';\n        double alpha = 1;\n        double beta = 0;\n\n        for ( int i = 0; i < n; ++i ) {\n            for ( int j = i+1; j < n; ++j ) {\n                A0[j*n+i] = 0.;\n            }\n        }\n\n        dgemm ( &transa, &transb, &n, &n, &n, &alpha, A0, &n, A0, &n, &beta, C, &n );\n\n        for ( int j = 0; j < n; ++j ) {\n            for ( int i = 0; i < n; ++i ) {\n                const double epsilon = std::abs( A[j*n+i]*0.1 );\n\n                if ( std::abs( C[j*n+i] - A[j*n+i] ) > epsilon ) {\n                    printf( \"ERROR: %s did not validate at C(%d,%d) = %lf != A(%d,%d) = %lf\\n\",\n                        name.c_str(), i, j, C[j*n+i], i, j, A[j*n+i] );\n                    printf( \"ERROR: %g; %g < %g < %g\\n\", epsilon, A[j*n+i] - epsilon, C[j*n+i], A[j*n+i] + epsilon );\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\npublic:\n    algorithm( const std::string& alg_name, bool t ) : name(alg_name), is_tiled(t) {}\n\n    double operator() ( double *A, int n, int b, int trials ) {\n        tbb::tick_count t0, t1;\n        double elapsed_time = 0.0;\n        double *A0 = (double *)calloc( sizeof( double ), n*n );\n        double *C = (double *)calloc( sizeof( double ), n*n );\n\n        for ( int t = 0; t < trials+1; ++t ) {\n            if ( is_tiled ) {\n                double ***tile = create_tile_array( A, n, b );\n                t0 = tbb::tick_count::now();\n                func( tile, n, b );\n                t1 = tbb::tick_count::now();\n\n                collapse_tile_array( tile, A0, n, b );\n            }\n            else {\n                memcpy( A0, A, sizeof( double )*n*n );\n                t0 = tbb::tick_count::now();\n                func( A0, n, b );\n                t1 = tbb::tick_count::now();\n            }\n\n            if ( t ) elapsed_time += (t1-t0).seconds();\n\n            if( !g_benchmark_run && !check_if_valid( A0, C, A, n ) ) {\n                if ( g_output_prefix ) {\n                    std::string s( g_output_prefix );\n                    s += \"_\" + name + \".txt\";\n                    matrix_write( A0, g_n, s.c_str(), true );\n                    free( A0 );\n                    free( C );\n                    return 0.;\n                }\n            }\n        }\n\n        if ( g_output_prefix ) {\n            std::string s( g_output_prefix );\n            s += \"_\" + name + \".txt\";\n            matrix_write( A0, g_n, s.c_str(), true );\n        }\n\n        printf( \"%s %d %d %d %d %lf %lf\\n\", name.c_str(), g_num_tbb_threads, trials, n, b, elapsed_time, elapsed_time/trials );\n        free( A0 );\n        free( C );\n        return elapsed_time;\n    }\n\nprotected:\n    // Main algorithm body function must be defined in any direved class\n    virtual void func( void * ptr, int n, int b ) = 0;\n};\n\n/***********************************************************/\n\nstatic void call_dpotf2( double ***tile, int b, int k ) {\n    double *A_block = tile[k][k];\n    char uplo = 'l';\n    int info = 0;\n    dpotf2( &uplo, &b, A_block, &b, &info ); \n    return;\n}\n\nstatic void call_dtrsm( double ***tile, int b, int k, int j ) {\n    double *A_block = tile[k][j];\n    double *L_block = tile[k][k];\n    char uplo = 'l', side = 'r', transa = 't', diag = 'n';\n    double alpha = 1;\n    dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b );\n    return;\n}\n\nstatic void call_dsyr2k( double ***tile, int b, int k, int j, int i ) {\n    double *A_block = tile[i][j];\n    char transa = 'n', transb = 't';\n    char uplo = 'l';\n    double alpha = -1;\n    double beta = 1;\n\n    if ( i == j ) {   // Diagonal block\n        double *L_block = tile[k][i];\n        dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );\n    } else {   // Non-diagonal block\n        double *L2_block = tile[k][i];\n        double *L1_block = tile[k][j];\n        dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );\n    }\n    return;\n}\n\nclass algorithm_crout : public algorithm\n{\npublic:\n    algorithm_crout() : algorithm(\"crout_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        double ***tile = (double ***)ptr;\n        const int p = n/b;\n\n        for ( int k = 0; k < p; ++k ) {\n            call_dpotf2( tile, b, k );\n\n            for ( int j = k+1; j < p; ++j ) {\n                call_dtrsm( tile, b, k, j );\n\n                for ( int i = k+1; i <= j; ++i ) {\n                    call_dsyr2k( tile, b, k, j, i );\n                }\n            }\n        }\n    }\n};\n\nclass algorithm_dpotrf : public algorithm\n{\npublic:\n    algorithm_dpotrf() : algorithm(\"dpotrf_cholesky\", false) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int /* b */ ) {\n        double *A = (double *)ptr;\n        int lda = n;\n        int info = 0;\n        char uplo = 'l';\n        dpotrf( &uplo, &n, A, &lda, &info );\n    }\n};\n\n/************************************************************\n Begin data join graph based version of cholesky\n************************************************************/\n\ntypedef union {\n    char a[4];\n    size_t tag;\n} tag_t;\n\ntypedef double * tile_t;\n\ntypedef std::pair< tag_t, tile_t > tagged_tile_t;\ntypedef tbb::flow::tuple< tagged_tile_t > t1_t;\ntypedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t > t2_t;\ntypedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t, tagged_tile_t > t3_t;\n\ntypedef tbb::flow::multifunction_node< tagged_tile_t, t1_t > dpotf2_node_t;\ntypedef tbb::flow::multifunction_node< t2_t, t2_t > dtrsm_node_t;\ntypedef tbb::flow::multifunction_node< t3_t, t3_t > dsyr2k_node_t;\n\ntypedef tbb::flow::join_node< t2_t, tbb::flow::tag_matching > dtrsm_join_t;\ntypedef tbb::flow::join_node< t3_t, tbb::flow::tag_matching > dsyr2k_join_t;\n\nclass dpotf2_body {\n    int p;\n    int b;\npublic:\n    dpotf2_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const tagged_tile_t &in, dpotf2_node_t::output_ports_type &ports ) {\n        int k = in.first.a[0];\n        tile_t A_block = in.second;\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = k;\n        char uplo = 'l';\n        int info = 0;\n        dpotf2( &uplo, &b, A_block, &b, &info );\n\n        // Send to dtrsms in same column\n        // k == k  j == k \n        t.a[2] = k;\n        for ( int j = k+1; j < p; ++j ) {\n            t.a[1] = j;\n            tbb::flow::get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n    }\n};\n\nclass dtrsm_body {\n    int p;\n    int b;\npublic:\n    dtrsm_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const t2_t &in, dtrsm_node_t::output_ports_type &ports ) {\n        using tbb::flow::get;\n\n        tagged_tile_t in0 = get<0>( in );\n        tagged_tile_t in1 = get<1>( in );\n        int k = in0.first.a[0];\n        int j = in0.first.a[1];\n        tile_t L_block = in0.second;\n        tile_t A_block = in1.second;\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = k;\n        char uplo = 'l', side = 'r', transa = 't', diag = 'n';\n        double alpha = 1;\n        dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b);\n\n        // Send to rest of my row\n        t.a[1] = j;\n        for ( int i = k+1; i <= j; ++i ) {\n            t.a[2] = i;\n            get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n\n        // Send to transposed row\n        t.a[2] = j;\n        for ( int i = j; i < p; ++i ) {\n            t.a[1] = i;\n            get<1>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n    }\n};\n\nclass dsyr2k_body {\n    int p;\n    int b;\npublic:\n    dsyr2k_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const t3_t &in, dsyr2k_node_t::output_ports_type &ports ) {\n        using tbb::flow::get;\n\n        tag_t t;\n        t.tag = 0;\n        char transa = 'n', transb = 't';\n        char uplo = 'l';\n        double alpha = -1;\n        double beta = 1;\n\n        tagged_tile_t in0 = get<0>( in );\n        tagged_tile_t in1 = get<1>( in );\n        tagged_tile_t in2 = get<2>( in );\n        int k = in2.first.a[0];\n        int j = in2.first.a[1];\n        int i = in2.first.a[2];\n\n        tile_t A_block = in2.second; \n        if ( i == j ) {   // Diagonal block\n            tile_t L_block = in0.second;\n            dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );\n        } else {   // Non-diagonal block\n            tile_t L1_block = in0.second;\n            tile_t L2_block = in1.second;\n            dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );\n        }\n\n        // All outputs flow to next step\n        t.a[0] = k+1;\n        t.a[1] = j;\n        t.a[2] = i;\n        if ( k != p-1 && j == k+1 && i == k+1 ) {\n            get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n\n        if ( k < p-2 ) {\n            if ( i == k+1 && j > i ) {\n                t.a[0] = k+1;\n                t.a[1] = j;\n                get<1>( ports ).try_put( std::make_pair( t, A_block ) );\n            }\n\n            if ( j != k+1 && i != k+1 ) {\n                t.a[0] = k+1;\n                t.a[1] = j;\n                t.a[2] = i;\n                get<2>( ports ).try_put( std::make_pair( t, A_block ) );\n            }\n        }\n    }\n};\n\nstruct tagged_tile_to_size_t {\n    size_t operator()( const tagged_tile_t &t ) {\n        return t.first.tag;\n    }\n};\n\nclass algorithm_join : public algorithm\n{\npublic:\n    algorithm_join() : algorithm(\"data_join_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        using tbb::flow::unlimited;\n        using tbb::flow::output_port;\n        using tbb::flow::input_port;\n\n        double ***tile = (double ***)ptr;\n        const int p = n/b;\n        tbb::flow::graph g;\n\n        dpotf2_node_t dpotf2_node( g, unlimited, dpotf2_body(p, b) );\n        dtrsm_node_t dtrsm_node( g, unlimited, dtrsm_body(p, b) );\n        dsyr2k_node_t dsyr2k_node( g, unlimited, dsyr2k_body(p, b) );\n        dtrsm_join_t dtrsm_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t() );\n        dsyr2k_join_t dsyr2k_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t(), tagged_tile_to_size_t() );\n\n        make_edge( output_port<0>( dsyr2k_node ), dpotf2_node );\n\n        make_edge( output_port<0>( dpotf2_node ), input_port<0>( dtrsm_join ) );\n        make_edge( output_port<1>( dsyr2k_node ), input_port<1>( dtrsm_join ) );\n        make_edge( dtrsm_join, dtrsm_node );\n\n        make_edge( output_port<0>( dtrsm_node ), input_port<0>( dsyr2k_join ) );\n        make_edge( output_port<1>( dtrsm_node ), input_port<1>( dsyr2k_join ) );\n        make_edge( output_port<2>( dsyr2k_node ), input_port<2>( dsyr2k_join ) );\n        make_edge( dsyr2k_join, dsyr2k_node );\n\n        // Now we need to send out the tiles to their first nodes\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = 0;\n        t.a[1] = 0;\n        t.a[2] = 0;\n\n        // Send to feedback input of first dpotf2\n        // k == 0, j == 0, i == 0\n        dpotf2_node.try_put( std::make_pair( t, tile[0][0] ) );\n\n        // Send to feedback input (port 1) of each dtrsm\n        // k == 0, j == 1..p-1\n        for ( int j = 1; j < p; ++j ) {\n            t.a[1] = j;\n            input_port<1>( dtrsm_join ).try_put( std::make_pair( t, tile[0][j] ) );\n        }\n\n        // Send to feedback input (port 2) of each dsyr2k\n        // k == 0\n        for ( int i = 1; i < p; ++i ) {\n            t.a[2] = i;\n\n            for ( int j = i; j < p; ++j ) {\n                t.a[1] = j;\n                input_port<2>( dsyr2k_join ).try_put( std::make_pair( t, tile[i][j] ) );\n            }\n        }\n\n        g.wait_for_all();\n    }\n};\n\n/************************************************************\n End data join graph based version of cholesky\n************************************************************/\n\n/************************************************************\n Begin dependence graph based version of cholesky\n************************************************************/\n\ntypedef tbb::flow::continue_node< tbb::flow::continue_msg > continue_type;\ntypedef continue_type * continue_ptr_type;\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\n// Using helper functor classes (instead of built-in C++ 11 lambda functions)\nclass call_dpotf2_functor\n{\n    double ***tile;\n    int b, k;\npublic:\n    call_dpotf2_functor( double ***tile_, int b_, int k_ )\n        : tile(tile_), b(b_), k(k_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); }\n};\n\nclass call_dtrsm_functor\n{\n    double ***tile;\n    int b, k, j;\npublic:\n    call_dtrsm_functor( double ***tile_, int b_, int k_, int j_ )\n        : tile(tile_), b(b_), k(k_), j(j_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); }\n};\n\nclass call_dsyr2k_functor\n{\n    double ***tile;\n    int b, k, j, i;\npublic:\n    call_dsyr2k_functor( double ***tile_, int b_, int k_, int j_, int i_ )\n        : tile(tile_), b(b_), k(k_), j(j_), i(i_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); }\n};\n\n#endif // !__TBB_CPP11_LAMBDAS_PRESENT\n\nclass algorithm_depend : public algorithm\n{\npublic:\n    algorithm_depend() : algorithm(\"depend_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        double ***tile = (double ***)ptr;\n\n        const int p = n/b;\n        continue_ptr_type *c = new continue_ptr_type[p];\n        continue_ptr_type **t = new continue_ptr_type *[p];\n        continue_ptr_type ***u = new continue_ptr_type **[p];\n\n        tbb::flow::graph g;\n        for ( int k = p-1; k >= 0; --k ) {\n            c[k] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                [=]( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); } );\n#else\n                call_dpotf2_functor( tile, b, k ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n            t[k] = new continue_ptr_type[p];\n            u[k] = new continue_ptr_type *[p];\n\n            for ( int j = k+1; j < p; ++j ) {\n                t[k][j] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                    [=]( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); } );\n#else\n                    call_dtrsm_functor( tile, b, k, j ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n                make_edge( *c[k], *t[k][j] );\n                u[k][j] = new continue_ptr_type[p];\n\n                for ( int i = k+1; i <= j; ++i ) {\n                    u[k][j][i] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                        [=]( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); } );\n#else\n                        call_dsyr2k_functor( tile, b, k, j, i ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n\n                    if ( k < p-2 && k+1 != j && k+1 != i ) {\n                        make_edge( *u[k][j][i], *u[k+1][j][i] );\n                    }\n\n                    make_edge( *t[k][j], *u[k][j][i] );\n\n                    if ( i != j ) {\n                        make_edge( *t[k][i], *u[k][j][i] );\n                    }\n\n                    if ( k < p-2 && j > i && i == k+1 ) {\n                        make_edge( *u[k][j][i], *t[i][j] );\n                    }\n                }\n            }\n\n            if ( k != p-1 ) {\n                make_edge( *u[k][k+1][k+1], *c[k+1] );\n            }\n        }\n\n        c[0]->try_put( tbb::flow::continue_msg() );\n        g.wait_for_all();\n    }\n}; // class algorithm_depend\n\n/************************************************************\n End dependence graph based version of cholesky\n************************************************************/\n\nbool process_args( int argc, char *argv[] ) {\n    utility::parse_cli_arguments( argc, argv,\n        utility::cli_argument_pack()\n        //\"-h\" option for displaying help is present implicitly\n        .positional_arg( g_n, \"size\", \"the row/column size of NxN matrix (size <= 46000)\" )\n        .positional_arg( g_b, \"blocksize\", \"the block size; size must be a multiple of the blocksize\" )\n        .positional_arg( g_num_trials, \"num_trials\", \"the number of times to run each algorithm\" )\n        .positional_arg( g_output_prefix, \"output_prefix\",\n            \"if provided the prefix will be preappended to output files:\\n\"\n            \"                     output_prefix_posdef.txt\\n\"\n            \"                     output_prefix_X.txt; where X is the algorithm used\\n\"\n            \"                 if output_prefix is not provided, no output will be written\" )\n        .positional_arg( g_alg_name, \"algorithm\", \"name of the used algorithm - can be dpotrf, crout, depend or join\" )\n        .positional_arg( g_num_tbb_threads, \"num_tbb_threads\", \"number of started TBB threads\" )\n\n        .arg( g_input_file_name, \"input_file\", \"if provided it will be read to get the input matrix\" )\n        .arg( g_benchmark_run, \"-x\", \"skips all validation\" )\n    );\n\n    if ( g_n > 46000 ) {\n        printf( \"ERROR: invalid 'size' value (must be less or equal 46000): %d\\n\", g_n );\n        return false;\n    }\n\n    if ( g_n%g_b != 0 ) {\n        printf( \"ERROR: size %d must be a multiple of the blocksize %d\\n\", g_n, g_b );\n        return false;\n    }\n\n    if ( g_n/g_b > 256 ) {\n        // Because tile index size is 1 byte only in tag_t type\n        printf( \"ERROR: size / blocksize must be less or equal 256, but %d / %d = %d\\n\", g_n, g_b, g_n/g_b );\n        return false;\n    }\n\n    if ( g_b == -1 || (g_n == -1 && g_input_file_name == NULL) ) {\n        return false;\n    }\n\n    return true;\n}\n\nint main(int argc, char *argv[]) {\n    typedef std::map< std::string, algorithm * > algmap_t;\n    algmap_t algmap;\n\n    // Init algorithms\n    algmap.insert(std::pair<std::string, algorithm *>(\"dpotrf\", new algorithm_dpotrf));\n    algmap.insert(std::pair<std::string, algorithm *>(\"crout\", new algorithm_crout));\n    algmap.insert(std::pair<std::string, algorithm *>(\"depend\", new algorithm_depend));\n    algmap.insert(std::pair<std::string, algorithm *>(\"join\", new algorithm_join));\n\n    if ( !process_args( argc, argv ) ) {\n        printf( \"ERROR: Invalid arguments. Run: %s -h\\n\", argv[0] );\n        exit( 1 );\n    }\n\n    tbb::task_scheduler_init init( g_num_tbb_threads );\n    double *A = NULL;\n\n    // Read input matrix\n    matrix_init( A, g_n, g_input_file_name );\n\n    // Write input matrix if output_prefix is set and we didn't read from a file\n    if ( !g_input_file_name && g_output_prefix ) {\n        std::string s( g_output_prefix );\n        s += \"_posdef.txt\";\n        matrix_write( A, g_n, s.c_str() );\n    }\n\n    if ( g_alg_name.empty() ) {\n        for ( algmap_t::iterator i = algmap.begin(); i != algmap.end(); ++i ) {\n            algorithm* const alg = i->second;\n            (*alg)( A, g_n, g_b, g_num_trials );\n        }\n    }\n    else {\n        algmap_t::iterator alg_iter = algmap.find(g_alg_name);\n\n        if ( alg_iter != algmap.end() ) {\n            algorithm* const alg = alg_iter->second;\n            (*alg)( A, g_n, g_b, g_num_trials );\n        }\n        else {\n            printf( \"ERROR: Invalid algorithm name: %s\\n\", g_alg_name.c_str() );\n            exit( 2 );\n        }\n    }\n\n    free( A );\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/init.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <cassert>\n#include <cstring>\n#include <cstdlib>\n#include <mkl_cblas.h>\n\nstatic void posdef_gen( double * A, int n )\n{\n    /* Allocate memory for the matrix and its transpose */\n    double *L = (double *)calloc( sizeof( double ), n*n );\n    assert( L );\n\n    double *LT = (double *)calloc( sizeof( double ), n*n) ;\n    assert( LT );\n\n    memset( A, 0, sizeof( double )*n*n );\n\n    /* Generate a conditioned matrix and fill it with random numbers */\n    for ( int j = 0; j < n; ++j ) {\n        for ( int k = 0; k < j; ++k ) {\n            // The initial value has to be between [0,1].\n            L[k*n+j] = ( ( (j*k) / ((double)(j+1)) / ((double)(k+2)) * 2.0) - 1.0 ) / ((double)n);\n        }\n\n        L[j*n+j] = 1;\n    }\n\n    /* Compute transpose of the matrix */\n    for ( int i = 0; i < n; ++i ) {\n        for ( int j = 0; j < n; ++j ) {\n            LT[j*n+i] = L[i*n+j];\n        }\n    }\n    cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1, L, n, LT, n, 0, A, n );\n\n    free( L );\n    free( LT );\n}\n\n// Read the matrix from the input file\nvoid matrix_init( double * &A, int &n, const char *fname ) {\n    if( fname ) {\n        int i;\n        int j;\n        FILE *fp;\n\n        fp = fopen( fname, \"r\" );\n        if ( fp == NULL ) {\n            fprintf( stderr, \"\\nFile does not exist\\n\" );\n            exit( 0 );\n        }\n        if ( fscanf( fp, \"%d\", &n ) <= 0 ) {\n            fprintf( stderr,\"\\nCouldn't read n from %s\\n\", fname );\n            exit( 1 );\n        }\n        A = (double *)calloc( sizeof( double ), n*n );\n        for ( i = 0; i < n; ++i ) {\n            for ( j = 0; j <= i; ++j ) {\n                if( fscanf( fp, \"%lf \", &A[i*n+j] ) <= 0) {\n                    fprintf( stderr,\"\\nMatrix size incorrect %i %i\\n\", i, j );\n                    exit( 1 );\n                }\n                if ( i != j ) {\n                    A[j*n+i] = A[i*n+j];\n                }\n            }\n        }\n        fclose( fp );\n    } else {\n        A = (double *)calloc( sizeof( double ), n*n );\n        posdef_gen( A, n );\n    }\n}\n\n// write matrix to file\nvoid matrix_write ( double *A, int n, const char *fname, bool is_triangular = false )\n{\n    if( fname ) {\n        int i = 0;\n        int j = 0;\n        FILE *fp = NULL;\n\n        fp = fopen( fname, \"w\" );\n        if ( fp == NULL ) {\n            fprintf( stderr, \"\\nCould not open file %s for writing.\\n\", fname );\n            exit( 0 );\n        }\n        fprintf( fp, \"%d\\n\", n );\n        for ( i = 0; i < n; ++i) {\n            for ( j = 0; j <= i; ++j ) {\n                fprintf( fp, \"%lf \", A[j*n+i] );\n            }\n            if ( !is_triangular ) {\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", A[i*n+j] );\n                }\n            } else {\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", 0.0 );\n                }\n            } \n            fprintf( fp, \"\\n\" );\n        }\n        if ( is_triangular ) {\n            fprintf( fp, \"\\n\" );\n            for ( i = 0; i < n; ++i ) {\n                for ( j = 0; j < i; ++j ) {\n                    fprintf( fp, \"%lf \", 0.0 );\n                }\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", A[i*n+j] );\n                }\n                fprintf( fp, \"\\n\" );\n            }\n        }\n        fclose( fp );\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/msvs/cholesky.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"cholesky\", \"cholesky.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/msvs/cholesky.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>cholesky</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252E}</ProjectGuid>\n    <RootNamespace>cholesky</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(MKLROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <OpenMP>GenerateParallelCode</OpenMP>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(MKLROOT)\\lib\\ia32;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(MKLROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <OpenMP>GenerateParallelCode</OpenMP>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(MKLROOT)\\lib\\intel64;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(MKLROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <OpenMP>GenerateParallelCode</OpenMP>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(MKLROOT)\\lib\\ia32;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(MKLROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <OpenMP>GenerateParallelCode</OpenMP>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;mkl_rt.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(MKLROOT)\\lib\\intel64;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\cholesky.cpp\" />\n    <ClCompile Include=\"..\\init.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Cholesky sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Cholesky sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains an example of several versions of Cholesky Factorization algorithm. \n\t\t<br>\n\t\t<br><b>dpotrf</b>: An implementation that calls the Intel&reg; Math Kernel Library (Intel&reg; MKL) dpotrf function to directly perform the factorization.  This can be a serial implementation or threaded implementation depending on the version of the Intel MKL library that is linked against.\n\t\t<br>\n\t\t<br><b>crout</b>: A serial implementation that uses the Crout-Cholesky algorithm for factorization.  The same approach is parallelized for the other Intel&reg; Threading Building Blocks (Intel&reg; TBB) based approaches below.\n\t\t<br>\n\t\t<br><b>depend</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a dependence graph made solely of continue_node objects. This an inspector-executor approach, where a loop nest that is similar to the serial implementation is used to create an unrolled version of the computation.  Where the Intel MKL calls would have been made in the original serial implementation of Crout-Cholesky, instead nodes are created and these nodes are linked by edges to the other nodes that they are dependent upon.  The resulting graph is relatively large, with a node for each instance of each Intel MKL call.  For example, there are many nodes that call dtrsm; one for each invocation of dtrsm in the serial implementation.  The is very little overhead in message management for this version and so it is often the highest performing.\n\t\t<br>\n\t\t<br><b>join</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a data flow approach. This is a small, compact graph that passes tiles along its edges.  There is one node per type of Intel MKL call, plus join_nodes that combine the inputs required for each call.  So for example, there is only a single node that applies all calls to dtrsm.  This node is invoked when the tiles that hold the inputs and outputs for an invocation are matched together in the tag-matching join_node that precedes it.   The tag represents the iteration values of the i, j, k loops in the serial implementation at that invocation of the call. There is some overhead in message matching and forwarding, so it may not perform as well as the dependence graph implementation.\n\t\t<br>\n\t\t<br>This sample code requires a recent Intel TBB library (one that supports the flow graph). And also the Intel MKL library.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"cholesky.cpp\">cholesky.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"init.cpp\">init.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>Also, you need to source Intel MKL environment variables.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>cholesky [<i>size=value</i>] [<i>blocksize=value</i>] [<i>num_trials=value</i>] [<i>output_prefix=value</i>] [<i>algorithm=value</i>] [<i>num_tbb_threads=value</i>] [<i>input_file=value</i>] [<i>-x</i>] [<i>-h</i>] [<i>size</i> [<i>blocksize</i> [<i>num_trials</i> [<i>output_prefix</i> [<i>algorithm</i> [<i>num_tbb_threads</i>]]]]]]</tt>\n\t\t\t\t<dd>where:\n\t\t\t\t<br><tt><i>size</i></tt> - the row/column size of NxN matrix (size &lt;= 46000)\n\t\t\t\t<br><tt><i>blocksize</i></tt> - the block size; size must be a multiple of the blocksize\n\t\t\t\t<br><tt><i>num_trials</i></tt> - the number of times to run each algorithm\n\t\t\t\t<br><tt><i>output_prefix</i></tt> - if provided the prefix will be preappended to output files:\n\t\t\t\t\t\t\t\t\t <i>output_prefix_posdef.txt</i> and\n\t\t\t\t\t\t\t\t\t <i>output_prefix_X.txt</i>; where <i>X</i> is the algorithm used\n\t\t\t\t<br>if <tt><i>output_prefix</i></tt> is not provided, no output will be written\n\t\t\t\t<br><tt><i>algorithm</i></tt> - name of the used algorithm - can be dpotrf, crout, depend or join\n\t\t\t\t<br><tt><i>num_tbb_threads</i></tt> - number of started TBB threads\n\t\t\t\t<br><tt><i>input_file</i></tt> - if provided it will be read to get the input matrix\n\t\t\t\t<br><tt><i>-x</i></tt> - skips all validation\n\t\t\t\t<br><tt><i>-h</i></tt> - show this message\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Cholesky.cpp */; };\n\t\tA1F593A60B8F053A00073279 /* init.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F053A00073279 /* init.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* Cholesky */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Cholesky; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* Cholesky.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Cholesky.cpp; path = ../Cholesky.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593A50B8F053A00073279 /* init.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = init.cpp; path = ../init.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Cholesky */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Cholesky;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* Cholesky.cpp */,\n\t\t\t\tA1F593A50B8F053A00073279 /* init.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Cholesky */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Cholesky */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Cholesky\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Cholesky;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Cholesky;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Cholesky */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"cholesky\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Cholesky */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Cholesky */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */,\n\t\t\t\tA1F593A60B8F053A00073279 /* init.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Cholesky;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Cholesky;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Cholesky;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Cholesky;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Cholesky\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"Cholesky\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=dining_philosophers\nARGS= auto 5\nLIGHT_ARGS= auto 3\n\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: dining_philosophers.cpp\n\t$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug:  dining_philosophers.cpp\n\t$(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\trm -f $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=dining_philosophers\nARGS= auto 5\nLIGHT_ARGS= auto 3\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: \n\t$(CXX) ./dining_philosophers.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: \n\t$(CXX) ./dining_philosophers.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/dining_philosophers.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER\n    // Suppress \"decorated name length exceeded, name was truncated\" warning\n    #pragma warning (disable: 4503)\n#endif\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/spin_mutex.h\"\n#include <iostream>\n#include \"../../common/utility/utility.h\"\n#include <cstdlib>\n#include <cstdio>\n\n// Each philosopher is an object, and is invoked in the think() function_node, the\n// eat() function_node and forward() multifunction_node.\n//\n// The graph is constructed, and each think() function_node is started with a continue_msg.\n//\n// The philosopher will think, then gather two chopsticks, eat, place the chopsticks back,\n// and if they have not completed the required number of cycles, will start to think() again\n// by sending a continue_msg to their corresponding think() function_node.\n//\n// The reserving join has as its inputs the left and right chopstick queues an a queue\n// that stores the continue_msg emitted by the function_node after think()ing is done.\n// When all three inputs are available, a tuple of the inputs will be forwarded to the\n// eat() function_node.  The output of the eat() function_node is sent to the forward()\n// multifunction_node.\n\nconst tbb::tick_count::interval_t think_time(1.0);\nconst tbb::tick_count::interval_t eat_time(1.0);\nconst int num_times = 10;\n\ntbb::tick_count t0;\nbool verbose = false;\n\nconst char *names[] = { \"Archimedes\", \"Bakunin\", \"Confucius\", \"Democritus\", \"Euclid\"\n                      , \"Favorinus\", \"Geminus\", \"Heraclitus\", \"Ichthyas\", \"Jason of Nysa\",\n                          \"Kant\", \"Lavrov\", \"Metrocles\", \"Nausiphanes\", \"Onatas\", \"Phaedrus\",\n                          \"Quillot\", \"Russell\", \"Socrates\", \"Thales\", \"Udayana\",\n                          \"Vernadsky\", \"Wittgenstein\", \"Xenophilus\", \"Yen Yuan\", \"Zenodotus\"\n};\nconst int NumPhilosophers = sizeof(names) / sizeof(char*);\n\nstruct RunOptions {\n    utility::thread_number_range threads;\n    int number_of_philosophers;\n    bool silent;\n    RunOptions(utility::thread_number_range threads_, int number_of_philosophers_, bool silent_) :\n        threads(threads_), number_of_philosophers(number_of_philosophers_), silent(silent_) { }\n};\n\nRunOptions ParseCommandLine(int argc, char *argv[]) {\n    int auto_threads = tbb::task_scheduler_init::default_num_threads();\n    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads, auto_threads, auto_threads);\n    int nPhilosophers = 5;\n    bool verbose = false;\n    char charbuf[100];\n    std::sprintf(charbuf, \"%d\", NumPhilosophers);\n    std::string pCount = \"how many philosophers, from 2-\";\n    pCount += charbuf;\n\n    utility::cli_argument_pack cli_pack;\n    cli_pack.positional_arg(threads, \"n-of_threads\", utility::thread_number_range_desc)\n            .positional_arg(nPhilosophers, \"n-of-philosophers\", pCount)\n            .arg(verbose,\"verbose\",\"verbose output\");\n    utility::parse_cli_arguments(argc, argv, cli_pack);\n    if(nPhilosophers < 2 || nPhilosophers > NumPhilosophers) {\n        std::cout << \"Number of philosophers (\" << nPhilosophers << \") out of range [2:\" << NumPhilosophers << \"]\\n\";\n        std::cout << cli_pack.usage_string(argv[0]) << std::flush;\n        std::exit(1);\n    }\n    return RunOptions(threads, nPhilosophers,!verbose);\n}\n\n\ntbb::spin_mutex my_mutex;\n\nclass chopstick {};\n\nusing namespace tbb::flow;\n\ntypedef tbb::flow::tuple<continue_msg, chopstick, chopstick> join_output;\ntypedef join_node< join_output, reserving > join_node_type;\n\ntypedef function_node<continue_msg, continue_msg> think_node_type;\ntypedef function_node<join_output, continue_msg> eat_node_type;\ntypedef multifunction_node<continue_msg, join_output> forward_node_type;\n\nclass philosopher {\npublic:\n\n    philosopher( const char *name ) :\n        my_name(name), my_count(num_times) { }\n\n    ~philosopher() {\n    }\n\n    void check();\n    const char *name() const { return my_name; }\n\nprivate:\n\n    friend std::ostream& operator<<(std::ostream& o, philosopher const &p);\n\n    const char *my_name;\n    int my_count;\n\n    friend class think_node_body;\n    friend class eat_node_body;\n    friend class forward_node_body;\n\n    void think( );\n    void eat();\n    void forward( const continue_msg &in, forward_node_type::output_ports_type &out_ports );\n};\n\nstd::ostream& operator<<(std::ostream& o, philosopher const &p) {\n    o << \"< philosopher[\" << reinterpret_cast<uintptr_t>(const_cast<philosopher *>(&p)) << \"] \" << p.name()\n        << \", my_count=\" << p.my_count;\n    return o;\n}\n\nclass think_node_body {\n    philosopher& my_philosopher;\npublic:\n    think_node_body( philosopher &p ) : my_philosopher(p) { }\n    think_node_body( const think_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    continue_msg operator()( continue_msg /*m*/) {\n        my_philosopher.think();\n        return continue_msg();\n    }\n};\n\nclass eat_node_body {\n    philosopher &my_philosopher;\npublic:\n    eat_node_body( philosopher &p) : my_philosopher(p) {}\n    eat_node_body( const eat_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    continue_msg operator()(const join_output &in) {\n        my_philosopher.eat();\n        return continue_msg();\n    }\n};\n\nclass forward_node_body {\n    philosopher &my_philosopher;\npublic:\n    forward_node_body( philosopher &p) : my_philosopher(p) {}\n    forward_node_body( const forward_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    void operator()( const continue_msg &in, forward_node_type::output_ports_type &out) {\n        my_philosopher.forward( in, out);\n    }\n};\n\nvoid philosopher::check() {\n    if ( my_count != 0 ) {\n        std::printf(\"ERROR: philosopher %s still had to run %d more times\\n\", name(), my_count);\n        std::exit(1);\n    }\n}\n\nvoid philosopher::forward( const continue_msg &/*in*/, forward_node_type::output_ports_type &out_ports ) {\n    if(my_count < 0) abort();\n    --my_count;\n    (void)tbb::flow::get<1>(out_ports).try_put(chopstick());\n    (void)tbb::flow::get<2>(out_ports).try_put(chopstick());\n    if (my_count > 0) {\n        (void)tbb::flow::get<0>(out_ports).try_put(continue_msg());  //start thinking again\n    } else {\n        if(verbose) {\n            tbb::spin_mutex::scoped_lock lock(my_mutex);\n            std::printf(\"%s has left the building\\n\", name());\n        }\n    }\n}\n\nvoid philosopher::eat() {\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s eating\\n\", name());\n    }\n    tbb::this_tbb_thread::sleep(eat_time);\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s done eating\\n\", name());\n    }\n}\n\nvoid philosopher::think() {\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s thinking\\n\", name());\n    }\n    tbb::this_tbb_thread::sleep(think_time);\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s done thinking\\n\", name());\n    }\n}\n\ntypedef queue_node<continue_msg> thinking_done_type;\n\nint main(int argc, char *argv[]) {\n    try {\n        tbb::tick_count main_time = tbb::tick_count::now();\n        int num_threads;\n        int num_philosophers;\n\n        RunOptions options = ParseCommandLine(argc, argv);\n        num_philosophers = options.number_of_philosophers;\n        verbose = !options.silent;\n\n    for(num_threads = options.threads.first; num_threads <= options.threads.last; num_threads = options.threads.step(num_threads)) {\n\n        tbb::task_scheduler_init init(num_threads);\n\n            graph g;\n\n            if(verbose) std::cout << std::endl << num_philosophers << \" philosophers with \"\n                << num_threads << \" threads\" << std::endl << std::endl;\n            t0 = tbb::tick_count::now();\n\n            std::vector<queue_node<chopstick> > places(num_philosophers, queue_node<chopstick>(g));\n            std::vector<philosopher> philosophers;\n            philosophers.reserve(num_philosophers);\n            std::vector<think_node_type *> think_nodes;\n            think_nodes.reserve(num_philosophers);\n            std::vector<thinking_done_type> done_vector(num_philosophers, thinking_done_type(g));\n            std::vector<join_node_type> join_vector(num_philosophers,join_node_type(g));\n            std::vector<eat_node_type *> eat_nodes;\n            eat_nodes.reserve(num_philosophers);\n            std::vector<forward_node_type *> forward_nodes;\n            forward_nodes.reserve(num_philosophers);\n            for ( int i = 0; i < num_philosophers; ++i ) {\n                places[i].try_put(chopstick());\n                philosophers.push_back( philosopher( names[i] ) );  // allowed because of default generated assignment\n                if(verbose) {\n                    tbb::spin_mutex::scoped_lock lock(my_mutex);\n                    std::cout << \"Built philosopher \" << philosophers[i] << std::endl;\n                }\n                think_nodes.push_back(new think_node_type(g, unlimited, think_node_body(philosophers[i])));\n                eat_nodes.push_back( new eat_node_type(g, unlimited, eat_node_body(philosophers[i])));\n                forward_nodes.push_back( new forward_node_type(g, unlimited, forward_node_body(philosophers[i])));\n            }\n\n            // attach chopstick buffers and think function_nodes to joins\n            for(int i = 0; i < num_philosophers; ++i) {\n                make_edge( *think_nodes[i], done_vector[i] );\n                make_edge( done_vector[i], input_port<0>(join_vector[i]) );\n                make_edge( places[i], input_port<1>(join_vector[i]) ); // left chopstick\n                make_edge( places[(i+1) % num_philosophers], input_port<2>(join_vector[i]) ); // right chopstick\n                make_edge( join_vector[i], *eat_nodes[i] );\n                make_edge( *eat_nodes[i], *forward_nodes[i] );\n                make_edge( output_port<0>(*forward_nodes[i]), *think_nodes[i] );\n                make_edge( output_port<1>(*forward_nodes[i]), places[i] );\n                make_edge( output_port<2>(*forward_nodes[i]), places[(i+1) % num_philosophers] );\n            }\n\n            // start all the philosophers thinking\n            for(int i = 0; i < num_philosophers; ++i) think_nodes[i]->try_put(continue_msg());\n\n            g.wait_for_all();\n\n            tbb::tick_count t1 = tbb::tick_count::now();\n            if(verbose) std::cout << std::endl << num_philosophers << \" philosophers with \"\n                << num_threads << \" threads have taken \" << (t1-t0).seconds() << \"seconds\" << std::endl;\n\n            for ( int i = 0; i < num_philosophers; ++i ) philosophers[i].check();\n\n            for(int i = 0; i < num_philosophers; ++i) {\n                delete think_nodes[i];\n                delete eat_nodes[i];\n                delete forward_nodes[i];\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - main_time).seconds());\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/msvs/dining_philosophers.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"dining_philosophers\", \"dining_philosophers.vcxproj\", \"{3894D1D2-A574-4937-AD56-726758EFE5B7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3894D1D2-A574-4937-AD56-726758EFE5B7}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>dining_philosophers</ProjectName>\n    <ProjectGuid>{3894d1d2-a574-4937-ad56-726758efe5b7}</ProjectGuid>\n    <RootNamespace>dining_philosophers</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\dining_philosophers.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Dining_philosophers sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Dining_philosophers sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Dining Philosophers problem demonstrates tbb::flow and the use of the reserving join node to\n\t\tsolve the potential deadlock.\n\t<br><br>\n\t\tThis program runs some number of philosophers in parallel, each thinking and then waiting for chopsticks\n\t\tto be available before eating.  Eating and thinking are implemented with sleep().  The chopstick positions are represented by a queue_node with one item.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"dining_philosophers.cpp\">dining_philosophers.cpp</a>\n\t\t\t\t<dd>Source code for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* dining_philosophers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* dining_philosophers.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* dining_philosophers */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = dining_philosophers; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* dining_philosophers.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dining_philosophers.cpp; path = ../dining_philosophers.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* dining_philosophers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = dining_philosophers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* dining_philosophers.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* dining_philosophers */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* dining_philosophers */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"dining_philosophers\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = dining_philosophers;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = dining_philosophers;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* dining_philosophers */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"dining_philosophers\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* dining_philosophers */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* dining_philosophers */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* dining_philosophers.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = dining_philosophers;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = dining_philosophers;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = dining_philosophers;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = dining_philosophers;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"dining_philosophers\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"dining_philosophers\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\n\nrun_cmd=\nPROG=fgbzip2\nARGS=-b=9 -a=async_node $(PROG)\nPERF_RUN_ARGS=-b=9 -a=async_node $(PROG)\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt -lpthread\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall: release test\n\nrelease:\n\t$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug:\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d *.bz2\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nrun_cmd=\nPROG=fgbzip2\nARGS=-b=9 -a=async_node $(PROG).exe\nPERF_RUN_ARGS=-b=9 -a=async_node $(PROG).exe\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\n\nrelease:\n\t$(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest *.bz2\n\ntest:\n\t$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/blocksort.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Block sorting machinery                               ---*/\n/*---                                         blocksort.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n    The original source for this example:\n    This file is part of bzip2/libbzip2, a program and library for\n    lossless, block-sorting data compression.\n\n    bzip2/libbzip2 version 1.0.6 of 6 September 2010\n    Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n    This program, \"bzip2\", the associated library \"libbzip2\", and all\n    documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n    rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    2. The origin of this software must not be misrepresented; you must \n    not claim that you wrote the original software.  If you use this \n    software in a product, an acknowledgment in the product \n    documentation would be appreciated but is not required.\n\n    3. Altered source versions must be plainly marked as such, and must\n    not be misrepresented as being the original software.\n\n    4. The name of the author may not be used to endorse or promote \n    products derived from this software without specific prior written \n    permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n    GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n    Julian Seward, jseward@bzip.org\n    bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------*/\n/*--- Fallback O(N log(N)^2) sorting        ---*/\n/*--- algorithm, for repetitive blocks      ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic \n__inline__\nvoid fallbackSimpleSort ( UInt32* fmap, \n                          UInt32* eclass, \n                          Int32   lo, \n                          Int32   hi )\n{\n   Int32 i, j, tmp;\n   UInt32 ec_tmp;\n\n   if (lo == hi) return;\n\n   if (hi - lo > 3) {\n      for ( i = hi-4; i >= lo; i-- ) {\n         tmp = fmap[i];\n         ec_tmp = eclass[tmp];\n         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )\n            fmap[j-4] = fmap[j];\n         fmap[j-4] = tmp;\n      }\n   }\n\n   for ( i = hi-1; i >= lo; i-- ) {\n      tmp = fmap[i];\n      ec_tmp = eclass[tmp];\n      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )\n         fmap[j-1] = fmap[j];\n      fmap[j-1] = tmp;\n   }\n}\n\n\n/*---------------------------------------------*/\n#define fswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define fvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      fswap(fmap[yyp1], fmap[yyp2]);  \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\n\n#define fmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define fpush(lz,hz) { stackLo[sp] = lz; \\\n                       stackHi[sp] = hz; \\\n                       sp++; }\n\n#define fpop(lz,hz) { sp--;              \\\n                      lz = stackLo[sp];  \\\n                      hz = stackHi[sp]; }\n\n#define FALLBACK_QSORT_SMALL_THRESH 10\n#define FALLBACK_QSORT_STACK_SIZE   100\n\n\nstatic\nvoid fallbackQSort3 ( UInt32* fmap, \n                      UInt32* eclass,\n                      Int32   loSt, \n                      Int32   hiSt )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m;\n   Int32 sp, lo, hi;\n   UInt32 med, r, r3;\n   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];\n   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];\n\n   r = 0;\n\n   sp = 0;\n   fpush ( loSt, hiSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );\n\n      fpop ( lo, hi );\n      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {\n         fallbackSimpleSort ( fmap, eclass, lo, hi );\n         continue;\n      }\n\n      /* Random partitioning.  Median of 3 sometimes fails to\n         avoid bad cases.  Median of 9 seems to help but \n         looks rather expensive.  This too seems to work but\n         is cheaper.  Guidance for the magic constants \n         7621 and 32768 is taken from Sedgewick's algorithms\n         book, chapter 35.\n      */\n      r = ((r * 7621) + 1) % 32768;\n      r3 = r % 3;\n      if (r3 == 0) med = eclass[fmap[lo]]; else\n      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else\n                   med = eclass[fmap[hi]];\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (1) {\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unLo]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unLo], fmap[ltLo]); \n               ltLo++; unLo++; \n               continue; \n            };\n            if (n > 0) break;\n            unLo++;\n         }\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unHi]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unHi], fmap[gtHi]); \n               gtHi--; unHi--; \n               continue; \n            };\n            if (n < 0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"fallbackQSort3(2)\" );\n\n      if (gtHi < ltLo) continue;\n\n      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);\n      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      if (n - lo > hi - m) {\n         fpush ( lo, n );\n         fpush ( m, hi );\n      } else {\n         fpush ( m, hi );\n         fpush ( lo, n );\n      }\n   }\n}\n\n#undef fmin\n#undef fpush\n#undef fpop\n#undef fswap\n#undef fvswap\n#undef FALLBACK_QSORT_SMALL_THRESH\n#undef FALLBACK_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      eclass exists for [0 .. nblock-1]\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      All other areas of eclass destroyed\n      fmap [0 .. nblock-1] holds sorted order\n      bhtab [ 0 .. 2+(nblock/32) ] destroyed\n*/\n\n#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))\n#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))\n#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))\n#define      WORD_BH(zz)  bhtab[(zz) >> 5]\n#define UNALIGNED_BH(zz)  ((zz) & 0x01f)\n\nstatic\nvoid fallbackSort ( UInt32* fmap, \n                    UInt32* eclass, \n                    UInt32* bhtab,\n                    Int32   nblock,\n                    Int32   verb )\n{\n   Int32 ftab[257];\n   Int32 ftabCopy[256];\n   Int32 H, i, j, k, l, r, cc, cc1;\n   Int32 nNotDone;\n   Int32 nBhtab;\n   UChar* eclass8 = (UChar*)eclass;\n\n   /*--\n      Initial 1-char radix sort to generate\n      initial fmap and initial BH bits.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        bucket sorting ...\\n\" );\n   for (i = 0; i < 257;    i++) ftab[i] = 0;\n   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;\n   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];\n   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];\n\n   for (i = 0; i < nblock; i++) {\n      j = eclass8[i];\n      k = ftab[j] - 1;\n      ftab[j] = k;\n      fmap[k] = i;\n   }\n\n   nBhtab = 2 + (nblock / 32);\n   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;\n   for (i = 0; i < 256; i++) SET_BH(ftab[i]);\n\n   /*--\n      Inductively refine the buckets.  Kind-of an\n      \"exponential radix sort\" (!), inspired by the\n      Manber-Myers suffix array construction algorithm.\n   --*/\n\n   /*-- set sentinel bits for block-end detection --*/\n   for (i = 0; i < 32; i++) { \n      SET_BH(nblock + 2*i);\n      CLEAR_BH(nblock + 2*i + 1);\n   }\n\n   /*-- the log(N) loop --*/\n   H = 1;\n   while (1) {\n\n      if (verb >= 4) \n         VPrintf1 ( \"        depth %6d has \", H );\n\n      j = 0;\n      for (i = 0; i < nblock; i++) {\n         if (ISSET_BH(i)) j = i;\n         k = fmap[i] - H; if (k < 0) k += nblock;\n         eclass[k] = j;\n      }\n\n      nNotDone = 0;\n      r = -1;\n      while (1) {\n\n\t /*-- find the next non-singleton bucket --*/\n         k = r + 1;\n         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (ISSET_BH(k)) {\n            while (WORD_BH(k) == 0xffffffff) k += 32;\n            while (ISSET_BH(k)) k++;\n         }\n         l = k - 1;\n         if (l >= nblock) break;\n         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (!ISSET_BH(k)) {\n            while (WORD_BH(k) == 0x00000000) k += 32;\n            while (!ISSET_BH(k)) k++;\n         }\n         r = k - 1;\n         if (r >= nblock) break;\n\n         /*-- now [l, r] bracket current bucket --*/\n         if (r > l) {\n            nNotDone += (r - l + 1);\n            fallbackQSort3 ( fmap, eclass, l, r );\n\n            /*-- scan bucket and generate header bits-- */\n            cc = -1;\n            for (i = l; i <= r; i++) {\n               cc1 = eclass[fmap[i]];\n               if (cc != cc1) { SET_BH(i); cc = cc1; };\n            }\n         }\n      }\n\n      if (verb >= 4) \n         VPrintf1 ( \"%6d unresolved strings\\n\", nNotDone );\n\n      H *= 2;\n      if (H > nblock || nNotDone == 0) break;\n   }\n\n   /*-- \n      Reconstruct the original block in\n      eclass8 [0 .. nblock-1], since the\n      previous phase destroyed it.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        reconstructing block ...\\n\" );\n   j = 0;\n   for (i = 0; i < nblock; i++) {\n      while (ftabCopy[j] == 0) j++;\n      ftabCopy[j]--;\n      eclass8[fmap[i]] = (UChar)j;\n   }\n   AssertH ( j < 256, 1005 );\n}\n\n#undef       SET_BH\n#undef     CLEAR_BH\n#undef     ISSET_BH\n#undef      WORD_BH\n#undef UNALIGNED_BH\n\n\n/*---------------------------------------------*/\n/*--- The main, O(N^2 log(N)) sorting       ---*/\n/*--- algorithm.  Faster for \"normal\"       ---*/\n/*--- non-repetitive blocks.                ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic\n__inline__\nBool mainGtU ( UInt32  i1, \n               UInt32  i2,\n               UChar*  block, \n               UInt16* quadrant,\n               UInt32  nblock,\n               Int32*  budget )\n{\n   Int32  k;\n   UChar  c1, c2;\n   UInt16 s1, s2;\n\n   AssertD ( i1 != i2, \"mainGtU\" );\n   /* 1 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 2 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 3 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 4 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 5 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 6 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 7 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 8 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 9 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 10 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 11 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 12 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n\n   k = nblock + 8;\n\n   do {\n      /* 1 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 2 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 3 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 4 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 5 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 6 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 7 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 8 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n\n      if (i1 >= nblock) i1 -= nblock;\n      if (i2 >= nblock) i2 -= nblock;\n\n      k -= 8;\n      (*budget)--;\n   }\n      while (k >= 0);\n\n   return False;\n}\n\n\n/*---------------------------------------------*/\n/*--\n   Knuth's increments seem to work better\n   than Incerpi-Sedgewick here.  Possibly\n   because the number of elements to sort\n   is usually small, typically <= 20.\n--*/\nstatic\nInt32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,\n                   9841, 29524, 88573, 265720,\n                   797161, 2391484 };\n\nstatic\nvoid mainSimpleSort ( UInt32* ptr,\n                      UChar*  block,\n                      UInt16* quadrant,\n                      Int32   nblock,\n                      Int32   lo, \n                      Int32   hi, \n                      Int32   d,\n                      Int32*  budget )\n{\n   Int32 i, j, h, bigN, hp;\n   UInt32 v;\n\n   bigN = hi - lo + 1;\n   if (bigN < 2) return;\n\n   hp = 0;\n   while (incs[hp] < bigN) hp++;\n   hp--;\n\n   for (; hp >= 0; hp--) {\n      h = incs[hp];\n\n      i = lo + h;\n      while (True) {\n\n         /*-- copy 1 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 2 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 3 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         if (*budget < 0) return;\n      }\n   }\n}\n\n\n/*---------------------------------------------*/\n/*--\n   The following is an implementation of\n   an elegant 3-way quicksort for strings,\n   described in a paper \"Fast Algorithms for\n   Sorting and Searching Strings\", by Robert\n   Sedgewick and Jon L. Bentley.\n--*/\n\n#define mswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define mvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      mswap(ptr[yyp1], ptr[yyp2]);    \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\nstatic \n__inline__\nUChar mmed3 ( UChar a, UChar b, UChar c )\n{\n   UChar t;\n   if (a > b) { t = a; a = b; b = t; };\n   if (b > c) { \n      b = c;\n      if (a > b) b = a;\n   }\n   return b;\n}\n\n#define mmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define mpush(lz,hz,dz) { stackLo[sp] = lz; \\\n                          stackHi[sp] = hz; \\\n                          stackD [sp] = dz; \\\n                          sp++; }\n\n#define mpop(lz,hz,dz) { sp--;             \\\n                         lz = stackLo[sp]; \\\n                         hz = stackHi[sp]; \\\n                         dz = stackD [sp]; }\n\n\n#define mnextsize(az) (nextHi[az]-nextLo[az])\n\n#define mnextswap(az,bz)                                        \\\n   { Int32 tz;                                                  \\\n     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \\\n     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \\\n     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }\n\n\n#define MAIN_QSORT_SMALL_THRESH 20\n#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)\n#define MAIN_QSORT_STACK_SIZE 100\n\nstatic\nvoid mainQSort3 ( UInt32* ptr,\n                  UChar*  block,\n                  UInt16* quadrant,\n                  Int32   nblock,\n                  Int32   loSt, \n                  Int32   hiSt, \n                  Int32   dSt,\n                  Int32*  budget )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m, med;\n   Int32 sp, lo, hi, d;\n\n   Int32 stackLo[MAIN_QSORT_STACK_SIZE];\n   Int32 stackHi[MAIN_QSORT_STACK_SIZE];\n   Int32 stackD [MAIN_QSORT_STACK_SIZE];\n\n   Int32 nextLo[3];\n   Int32 nextHi[3];\n   Int32 nextD [3];\n\n   sp = 0;\n   mpush ( loSt, hiSt, dSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );\n\n      mpop ( lo, hi, d );\n      if (hi - lo < MAIN_QSORT_SMALL_THRESH || \n          d > MAIN_QSORT_DEPTH_THRESH) {\n         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );\n         if (*budget < 0) return;\n         continue;\n      }\n\n      med = (Int32) \n            mmed3 ( block[ptr[ lo         ]+d],\n                    block[ptr[ hi         ]+d],\n                    block[ptr[ (lo+hi)>>1 ]+d] );\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (True) {\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unLo]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unLo], ptr[ltLo]); \n               ltLo++; unLo++; continue; \n            };\n            if (n >  0) break;\n            unLo++;\n         }\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unHi]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unHi], ptr[gtHi]); \n               gtHi--; unHi--; continue; \n            };\n            if (n <  0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"mainQSort3(2)\" );\n\n      if (gtHi < ltLo) {\n         mpush(lo, hi, d+1 );\n         continue;\n      }\n\n      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);\n      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;\n      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;\n      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;\n\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n\n      AssertD (mnextsize(0) >= mnextsize(1), \"mainQSort3(8)\" );\n      AssertD (mnextsize(1) >= mnextsize(2), \"mainQSort3(9)\" );\n\n      mpush (nextLo[0], nextHi[0], nextD[0]);\n      mpush (nextLo[1], nextHi[1], nextD[1]);\n      mpush (nextLo[2], nextHi[2], nextD[2]);\n   }\n}\n\n#undef mswap\n#undef mvswap\n#undef mpush\n#undef mpop\n#undef mmin\n#undef mnextsize\n#undef mnextswap\n#undef MAIN_QSORT_SMALL_THRESH\n#undef MAIN_QSORT_DEPTH_THRESH\n#undef MAIN_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > N_OVERSHOOT\n      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      All other areas of block32 destroyed\n      ftab [0 .. 65536 ] destroyed\n      ptr [0 .. nblock-1] holds sorted order\n      if (*budget < 0), sorting was abandoned\n*/\n\n#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])\n#define SETMASK (1 << 21)\n#define CLEARMASK (~(SETMASK))\n\nstatic\nvoid mainSort ( UInt32* ptr, \n                UChar*  block,\n                UInt16* quadrant, \n                UInt32* ftab,\n                Int32   nblock,\n                Int32   verb,\n                Int32*  budget )\n{\n   Int32  i, j, k, ss, sb;\n   Int32  runningOrder[256];\n   Bool   bigDone[256];\n   Int32  copyStart[256];\n   Int32  copyEnd  [256];\n   UChar  c1;\n   Int32  numQSorted;\n   UInt16 s;\n   if (verb >= 4) VPrintf0 ( \"        main sort initialise ...\\n\" );\n\n   /*-- set up the 2-byte frequency table --*/\n   for (i = 65536; i >= 0; i--) ftab[i] = 0;\n\n   j = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n      quadrant[i-1] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);\n      ftab[j]++;\n      quadrant[i-2] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);\n      ftab[j]++;\n      quadrant[i-3] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);\n      ftab[j]++;\n   }\n   for (; i >= 0; i--) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n   }\n\n   /*-- (emphasises close relationship of block & quadrant) --*/\n   for (i = 0; i < BZ_N_OVERSHOOT; i++) {\n      block   [nblock+i] = block[i];\n      quadrant[nblock+i] = 0;\n   }\n\n   if (verb >= 4) VPrintf0 ( \"        bucket sorting ...\\n\" );\n\n   /*-- Complete the initial radix sort --*/\n   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];\n\n   s = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n      s = (s >> 8) | (block[i-1] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-1;\n      s = (s >> 8) | (block[i-2] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-2;\n      s = (s >> 8) | (block[i-3] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-3;\n   }\n   for (; i >= 0; i--) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n   }\n\n   /*--\n      Now ftab contains the first loc of every small bucket.\n      Calculate the running order, from smallest to largest\n      big bucket.\n   --*/\n   for (i = 0; i <= 255; i++) {\n      bigDone     [i] = False;\n      runningOrder[i] = i;\n   }\n\n   {\n      Int32 vv;\n      Int32 h = 1;\n      do h = 3 * h + 1; while (h <= 256);\n      do {\n         h = h / 3;\n         for (i = h; i <= 255; i++) {\n            vv = runningOrder[i];\n            j = i;\n            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {\n               runningOrder[j] = runningOrder[j-h];\n               j = j - h;\n               if (j <= (h - 1)) goto zero;\n            }\n            zero:\n            runningOrder[j] = vv;\n         }\n      } while (h != 1);\n   }\n\n   /*--\n      The main sorting loop.\n   --*/\n\n   numQSorted = 0;\n\n   for (i = 0; i <= 255; i++) {\n\n      /*--\n         Process big buckets, starting with the least full.\n         Basically this is a 3-step process in which we call\n         mainQSort3 to sort the small buckets [ss, j], but\n         also make a big effort to avoid the calls if we can.\n      --*/\n      ss = runningOrder[i];\n\n      /*--\n         Step 1:\n         Complete the big bucket [ss] by quicksorting\n         any unsorted small buckets [ss, j], for j != ss.  \n         Hopefully previous pointer-scanning phases have already\n         completed many of the small buckets [ss, j], so\n         we don't have to sort them at all.\n      --*/\n      for (j = 0; j <= 255; j++) {\n         if (j != ss) {\n            sb = (ss << 8) + j;\n            if ( ! (ftab[sb] & SETMASK) ) {\n               Int32 lo = ftab[sb]   & CLEARMASK;\n               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;\n               if (hi > lo) {\n                  if (verb >= 4)\n                     VPrintf4 ( \"        qsort [0x%x, 0x%x]   \"\n                                \"done %d   this %d\\n\",\n                                ss, j, numQSorted, hi - lo + 1 );\n                  mainQSort3 ( \n                     ptr, block, quadrant, nblock, \n                     lo, hi, BZ_N_RADIX, budget \n                  );   \n                  numQSorted += (hi - lo + 1);\n                  if (*budget < 0) return;\n               }\n            }\n            ftab[sb] |= SETMASK;\n         }\n      }\n\n      AssertH ( !bigDone[ss], 1006 );\n\n      /*--\n         Step 2:\n         Now scan this big bucket [ss] so as to synthesise the\n         sorted order for small buckets [t, ss] for all t,\n         including, magically, the bucket [ss,ss] too.\n         This will avoid doing Real Work in subsequent Step 1's.\n      --*/\n      {\n         for (j = 0; j <= 255; j++) {\n            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;\n            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;\n         }\n         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1])\n               ptr[ copyStart[c1]++ ] = k;\n         }\n         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1]) \n               ptr[ copyEnd[c1]-- ] = k;\n         }\n      }\n\n      AssertH ( (copyStart[ss]-1 == copyEnd[ss])\n                || \n                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.\n                   Necessity for this case is demonstrated by compressing \n                   a sequence of approximately 48.5 million of character \n                   251; 1.0.0/1.0.1 will then die here. */\n                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),\n                1007 )\n\n      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;\n\n      /*--\n         Step 3:\n         The [ss] big bucket is now done.  Record this fact,\n         and update the quadrant descriptors.  Remember to\n         update quadrants in the overshoot area too, if\n         necessary.  The \"if (i < 255)\" test merely skips\n         this updating for the last bucket processed, since\n         updating for the last bucket is pointless.\n\n         The quadrant array provides a way to incrementally\n         cache sort orderings, as they appear, so as to \n         make subsequent comparisons in fullGtU() complete\n         faster.  For repetitive blocks this makes a big\n         difference (but not big enough to be able to avoid\n         the fallback sorting mechanism, exponential radix sort).\n\n         The precise meaning is: at all times:\n\n            for 0 <= i < nblock and 0 <= j <= nblock\n\n            if block[i] != block[j], \n\n               then the relative values of quadrant[i] and \n                    quadrant[j] are meaningless.\n\n               else {\n                  if quadrant[i] < quadrant[j]\n                     then the string starting at i lexicographically\n                     precedes the string starting at j\n\n                  else if quadrant[i] > quadrant[j]\n                     then the string starting at j lexicographically\n                     precedes the string starting at i\n\n                  else\n                     the relative ordering of the strings starting\n                     at i and j has not yet been determined.\n               }\n      --*/\n      bigDone[ss] = True;\n\n      if (i < 255) {\n         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;\n         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;\n         Int32 shifts   = 0;\n\n         while ((bbSize >> shifts) > 65534) shifts++;\n\n         for (j = bbSize-1; j >= 0; j--) {\n            Int32 a2update     = ptr[bbStart + j];\n            UInt16 qVal        = (UInt16)(j >> shifts);\n            quadrant[a2update] = qVal;\n            if (a2update < BZ_N_OVERSHOOT)\n               quadrant[a2update + nblock] = qVal;\n         }\n         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );\n      }\n\n   }\n\n   if (verb >= 4)\n      VPrintf3 ( \"        %d pointers, %d sorted, %d scanned\\n\",\n                 nblock, numQSorted, nblock - numQSorted );\n}\n\n#undef BIGFREQ\n#undef SETMASK\n#undef CLEARMASK\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)arr2)  [0 .. nblock-1] holds block\n      arr1 exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)arr2) [0 .. nblock-1] holds block\n      All other areas of block destroyed\n      ftab [ 0 .. 65536 ] destroyed\n      arr1 [0 .. nblock-1] holds sorted order\n*/\nvoid BZ2_blockSort ( EState* s )\n{\n   UInt32* ptr    = s->ptr; \n   UChar*  block  = s->block;\n   UInt32* ftab   = s->ftab;\n   Int32   nblock = s->nblock;\n   Int32   verb   = s->verbosity;\n   Int32   wfact  = s->workFactor;\n   UInt16* quadrant;\n   Int32   budget;\n   Int32   budgetInit;\n   Int32   i;\n\n   if (nblock < 10000) {\n      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n   } else {\n      /* Calculate the location for quadrant, remembering to get\n         the alignment right.  Assumes that &(block[0]) is at least\n         2-byte aligned -- this should be ok since block is really\n         the first section of arr2.\n      */\n      i = nblock+BZ_N_OVERSHOOT;\n      if (i & 1) i++;\n      quadrant = (UInt16*)(&(block[i]));\n\n      /* (wfact-1) / 3 puts the default-factor-30\n         transition point at very roughly the same place as \n         with v0.1 and v0.9.0.  \n         Not that it particularly matters any more, since the\n         resulting compressed stream is now the same regardless\n         of whether or not we use the main sort or fallback sort.\n      */\n      if (wfact < 1  ) wfact = 1;\n      if (wfact > 100) wfact = 100;\n      budgetInit = nblock * ((wfact-1) / 3);\n      budget = budgetInit;\n\n      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );\n      if (verb >= 3) \n         VPrintf3 ( \"      %d work, %d block, ratio %5.2f\\n\",\n                    budgetInit - budget,\n                    nblock, \n                    (float)(budgetInit - budget) /\n                    (float)(nblock==0 ? 1 : nblock) ); \n      if (budget < 0) {\n         if (verb >= 2) \n            VPrintf0 ( \"    too repetitive; using fallback\"\n                       \" sorting algorithm\\n\" );\n         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n      }\n   }\n\n   s->origPtr = -1;\n   for (i = 0; i < s->nblock; i++)\n      if (ptr[i] == 0)\n         { s->origPtr = i; break; };\n\n   AssertH( s->origPtr != -1, 1003 );\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       blocksort.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/bzlib.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Library top-level functions.                          ---*/\n/*---                                             bzlib.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n/* CHANGES\n   0.9.0    -- original version.\n   0.9.0a/b -- no changes in this file.\n   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().\n     fixed bzWrite/bzRead to ignore zero-length requests.\n     fixed bzread to correctly handle read requests after EOF.\n     wrong parameter order in call to bzDecompressInit in\n     bzBuffToBuffDecompress.  Fixed.\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Compression stuff                           ---*/\n/*---------------------------------------------------*/\n\n\n/*---------------------------------------------------*/\n#ifndef BZ_NO_STDIO\nvoid BZ2_bz__AssertH__fail ( int errcode )\n{\n   fprintf(stderr, \n      \"\\n\\nbzip2/libbzip2: internal error number %d.\\n\"\n      \"This is a bug in bzip2/libbzip2, %s.\\n\"\n      \"Please report it to me at: jseward@bzip.org.  If this happened\\n\"\n      \"when you were using some program which uses libbzip2 as a\\n\"\n      \"component, you should also report this bug to the author(s)\\n\"\n      \"of that program.  Please make an effort to report this bug;\\n\"\n      \"timely and accurate bug reports eventually lead to higher\\n\"\n      \"quality software.  Thanks.  Julian Seward, 10 December 2007.\\n\\n\",\n      errcode,\n      BZ2_bzlibVersion()\n   );\n\n   if (errcode == 1007) {\n   fprintf(stderr,\n      \"\\n*** A special note about internal error number 1007 ***\\n\"\n      \"\\n\"\n      \"Experience suggests that a common cause of i.e. 1007\\n\"\n      \"is unreliable memory or other hardware.  The 1007 assertion\\n\"\n      \"just happens to cross-check the results of huge numbers of\\n\"\n      \"memory reads/writes, and so acts (unintendedly) as a stress\\n\"\n      \"test of your memory system.\\n\"\n      \"\\n\"\n      \"I suggest the following: try compressing the file again,\\n\"\n      \"possibly monitoring progress in detail with the -vv flag.\\n\"\n      \"\\n\"\n      \"* If the error cannot be reproduced, and/or happens at different\\n\"\n      \"  points in compression, you may have a flaky memory system.\\n\"\n      \"  Try a memory-test program.  I have used Memtest86\\n\"\n      \"  (www.memtest86.com).  At the time of writing it is free (GPLd).\\n\"\n      \"  Memtest86 tests memory much more thorougly than your BIOSs\\n\"\n      \"  power-on test, and may find failures that the BIOS doesn't.\\n\"\n      \"\\n\"\n      \"* If the error can be repeatably reproduced, this is a bug in\\n\"\n      \"  bzip2, and I would very much like to hear about it.  Please\\n\"\n      \"  let me know, and, ideally, save a copy of the file causing the\\n\"\n      \"  problem -- without which I will be unable to investigate it.\\n\"\n      \"\\n\"\n   );\n   }\n\n   exit(3);\n}\n#endif\n\n\n/*---------------------------------------------------*/\nstatic\nint bz_config_ok ( void )\n{\n   if (sizeof(int)   != 4) return 0;\n   if (sizeof(short) != 2) return 0;\n   if (sizeof(char)  != 1) return 0;\n   return 1;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid* default_bzalloc ( void* opaque, Int32 items, Int32 size )\n{\n   void* v = malloc ( items * size );\n   return v;\n}\n\nstatic\nvoid default_bzfree ( void* opaque, void* addr )\n{\n   if (addr != NULL) free ( addr );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid prepare_new_block ( EState* s )\n{\n   Int32 i;\n   s->nblock = 0;\n   s->numZ = 0;\n   s->state_out_pos = 0;\n   BZ_INITIALISE_CRC ( s->blockCRC );\n   for (i = 0; i < 256; i++) s->inUse[i] = False;\n   s->blockNo++;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid init_RL ( EState* s )\n{\n   s->state_in_ch  = 256;\n   s->state_in_len = 0;\n}\n\n\nstatic\nBool isempty_RL ( EState* s )\n{\n   if (s->state_in_ch < 256 && s->state_in_len > 0)\n      return False; else\n      return True;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressInit) \n                    ( bz_stream* strm, \n                     int        blockSize100k,\n                     int        verbosity,\n                     int        workFactor )\n{\n   Int32   n;\n   EState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL || \n       blockSize100k < 1 || blockSize100k > 9 ||\n       workFactor < 0 || workFactor > 250)\n     return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = (EState*)BZALLOC( sizeof(EState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm = strm;\n\n   s->arr1 = NULL;\n   s->arr2 = NULL;\n   s->ftab = NULL;\n\n   n       = 100000 * blockSize100k;\n   s->arr1 = (UInt32*)BZALLOC( n                  * sizeof(UInt32) );\n   s->arr2 = (UInt32*)BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );\n   s->ftab = (UInt32*)BZALLOC( 65537              * sizeof(UInt32) );\n\n   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {\n      if (s->arr1 != NULL) BZFREE(s->arr1);\n      if (s->arr2 != NULL) BZFREE(s->arr2);\n      if (s->ftab != NULL) BZFREE(s->ftab);\n      if (s       != NULL) BZFREE(s);\n      return BZ_MEM_ERROR;\n   }\n\n   s->blockNo           = 0;\n   s->state             = BZ_S_INPUT;\n   s->mode              = BZ_M_RUNNING;\n   s->combinedCRC       = 0;\n   s->blockSize100k     = blockSize100k;\n   s->nblockMAX         = 100000 * blockSize100k - 19;\n   s->verbosity         = verbosity;\n   s->workFactor        = workFactor;\n\n   s->block             = (UChar*)s->arr2;\n   s->mtfv              = (UInt16*)s->arr1;\n   s->zbits             = NULL;\n   s->ptr               = (UInt32*)s->arr1;\n\n   strm->state          = s;\n   strm->total_in_lo32  = 0;\n   strm->total_in_hi32  = 0;\n   strm->total_out_lo32 = 0;\n   strm->total_out_hi32 = 0;\n   init_RL ( s );\n   prepare_new_block ( s );\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid add_pair_to_block ( EState* s )\n{\n   Int32 i;\n   UChar ch = (UChar)(s->state_in_ch);\n   for (i = 0; i < s->state_in_len; i++) {\n      BZ_UPDATE_CRC( s->blockCRC, ch );\n   }\n   s->inUse[s->state_in_ch] = True;\n   switch (s->state_in_len) {\n      case 1:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 2:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 3:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      default:\n         s->inUse[s->state_in_len-4] = True;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = ((UChar)(s->state_in_len-4));\n         s->nblock++;\n         break;\n   }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid flush_RL ( EState* s )\n{\n   if (s->state_in_ch < 256) add_pair_to_block ( s );\n   init_RL ( s );\n}\n\n\n/*---------------------------------------------------*/\n#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \\\n{                                                 \\\n   UInt32 zchh = (UInt32)(zchh0);                 \\\n   /*-- fast track the common case --*/           \\\n   if (zchh != zs->state_in_ch &&                 \\\n       zs->state_in_len == 1) {                   \\\n      UChar ch = (UChar)(zs->state_in_ch);        \\\n      BZ_UPDATE_CRC( zs->blockCRC, ch );          \\\n      zs->inUse[zs->state_in_ch] = True;          \\\n      zs->block[zs->nblock] = (UChar)ch;          \\\n      zs->nblock++;                               \\\n      zs->state_in_ch = zchh;                     \\\n   }                                              \\\n   else                                           \\\n   /*-- general, uncommon cases --*/              \\\n   if (zchh != zs->state_in_ch ||                 \\\n      zs->state_in_len == 255) {                  \\\n      if (zs->state_in_ch < 256)                  \\\n         add_pair_to_block ( zs );                \\\n      zs->state_in_ch = zchh;                     \\\n      zs->state_in_len = 1;                       \\\n   } else {                                       \\\n      zs->state_in_len++;                         \\\n   }                                              \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_input_until_stop ( EState* s )\n{\n   Bool progress_in = False;\n\n   if (s->mode == BZ_M_RUNNING) {\n\n      /*-- fast track the common case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n      }\n\n   } else {\n\n      /*-- general, uncommon case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         /*-- flush/finish end? --*/\n         if (s->avail_in_expect == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n         s->avail_in_expect--;\n      }\n   }\n   return progress_in;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_output_until_stop ( EState* s )\n{\n   Bool progress_out = False;\n\n   while (True) {\n\n      /*-- no output space? --*/\n      if (s->strm->avail_out == 0) break;\n\n      /*-- block done? --*/\n      if (s->state_out_pos >= s->numZ) break;\n\n      progress_out = True;\n      *(s->strm->next_out) = s->zbits[s->state_out_pos];\n      s->state_out_pos++;\n      s->strm->avail_out--;\n      s->strm->next_out++;\n      s->strm->total_out_lo32++;\n      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n   }\n\n   return progress_out;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool handle_compress ( bz_stream* strm )\n{\n   Bool progress_in  = False;\n   Bool progress_out = False;\n   EState* s = (EState*)strm->state;\n   \n   while (True) {\n\n      if (s->state == BZ_S_OUTPUT) {\n         progress_out |= copy_output_until_stop ( s );\n         if (s->state_out_pos < s->numZ) break;\n         if (s->mode == BZ_M_FINISHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n         prepare_new_block ( s );\n         s->state = BZ_S_INPUT;\n         if (s->mode == BZ_M_FLUSHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n      }\n\n      if (s->state == BZ_S_INPUT) {\n         progress_in |= copy_input_until_stop ( s );\n         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {\n            flush_RL ( s );\n            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->nblock >= s->nblockMAX) {\n            BZ2_compressBlock ( s, False );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->strm->avail_in == 0) {\n            break;\n         }\n      }\n\n   }\n\n   return progress_in || progress_out;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )\n{\n   Bool progress;\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (EState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   preswitch:\n   switch (s->mode) {\n\n      case BZ_M_IDLE:\n         return BZ_SEQUENCE_ERROR;\n\n      case BZ_M_RUNNING:\n         if (action == BZ_RUN) {\n            progress = handle_compress ( strm );\n            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;\n         } \n         else\n\t if (action == BZ_FLUSH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FLUSHING;\n            goto preswitch;\n         }\n         else\n         if (action == BZ_FINISH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FINISHING;\n            goto preswitch;\n         }\n         else \n            return BZ_PARAM_ERROR;\n\n      case BZ_M_FLUSHING:\n         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;\n         s->mode = BZ_M_RUNNING;\n         return BZ_RUN_OK;\n\n      case BZ_M_FINISHING:\n         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (!progress) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FINISH_OK;\n         s->mode = BZ_M_IDLE;\n         return BZ_STREAM_END;\n   }\n   return BZ_OK; /*--not reached--*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )\n{\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (EState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->arr1 != NULL) BZFREE(s->arr1);\n   if (s->arr2 != NULL) BZFREE(s->arr2);\n   if (s->ftab != NULL) BZFREE(s->ftab);\n   BZFREE(strm->state);\n\n   strm->state = NULL;   \n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/*--- Decompression stuff                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressInit) \n                     ( bz_stream* strm, \n                       int        verbosity,\n                       int        small )\n{\n   DState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   if (small != 0 && small != 1) return BZ_PARAM_ERROR;\n   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;\n\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = (DState*)BZALLOC( sizeof(DState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm                  = strm;\n   strm->state              = s;\n   s->state                 = BZ_X_MAGIC_1;\n   s->bsLive                = 0;\n   s->bsBuff                = 0;\n   s->calculatedCombinedCRC = 0;\n   strm->total_in_lo32      = 0;\n   strm->total_in_hi32      = 0;\n   strm->total_out_lo32     = 0;\n   strm->total_out_hi32     = 0;\n   s->smallDecompress       = (Bool)small;\n   s->ll4                   = NULL;\n   s->ll16                  = NULL;\n   s->tt                    = NULL;\n   s->currBlockNo           = 0;\n   s->verbosity             = verbosity;\n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_FAST ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n\n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n               \n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      /* restore */\n      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;\n      UChar         c_state_out_ch       = s->state_out_ch;\n      Int32         c_state_out_len      = s->state_out_len;\n      Int32         c_nblock_used        = s->nblock_used;\n      Int32         c_k0                 = s->k0;\n      UInt32*       c_tt                 = s->tt;\n      UInt32        c_tPos               = s->tPos;\n      char*         cs_next_out          = s->strm->next_out;\n      unsigned int  cs_avail_out         = s->strm->avail_out;\n      Int32         ro_blockSize100k     = s->blockSize100k;\n      /* end restore */\n\n      UInt32       avail_out_INIT = cs_avail_out;\n      Int32        s_save_nblockPP = s->save_nblock+1;\n      unsigned int total_out_lo32_old;\n\n      while (True) {\n\n         /* try to finish existing run */\n         if (c_state_out_len > 0) {\n            while (True) {\n               if (cs_avail_out == 0) goto return_notr;\n               if (c_state_out_len == 1) break;\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               c_state_out_len--;\n               cs_next_out++;\n               cs_avail_out--;\n            }\n            s_state_out_len_eq_one:\n            {\n               if (cs_avail_out == 0) { \n                  c_state_out_len = 1; goto return_notr;\n               };\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               cs_next_out++;\n               cs_avail_out--;\n            }\n         }   \n         /* Only caused by corrupt data stream? */\n         if (c_nblock_used > s_save_nblockPP)\n            return True;\n\n         /* can a new run be started? */\n         if (c_nblock_used == s_save_nblockPP) {\n            c_state_out_len = 0; goto return_notr;\n         };   \n         c_state_out_ch = c_k0;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (k1 != c_k0) { \n            c_k0 = k1; goto s_state_out_len_eq_one; \n         };\n         if (c_nblock_used == s_save_nblockPP) \n            goto s_state_out_len_eq_one;\n   \n         c_state_out_len = 2;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         c_state_out_len = 3;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         c_state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST_C(c_k0); c_nblock_used++;\n      }\n\n      return_notr:\n      total_out_lo32_old = s->strm->total_out_lo32;\n      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);\n      if (s->strm->total_out_lo32 < total_out_lo32_old)\n         s->strm->total_out_hi32++;\n\n      /* save */\n      s->calculatedBlockCRC = c_calculatedBlockCRC;\n      s->state_out_ch       = c_state_out_ch;\n      s->state_out_len      = c_state_out_len;\n      s->nblock_used        = c_nblock_used;\n      s->k0                 = c_k0;\n      s->tt                 = c_tt;\n      s->tPos               = c_tPos;\n      s->strm->next_out     = cs_next_out;\n      s->strm->avail_out    = cs_avail_out;\n      /* end save */\n   }\n   return False;\n}\n\n\n\n/*---------------------------------------------------*/\nInt32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )\n{\n   Int32 nb, na, mid;\n   nb = 0;\n   na = 256;\n   do {\n      mid = (nb + na) >> 1;\n      if (indx >= cftab[mid]) nb = mid; else na = mid;\n   }\n   while (na - nb != 1);\n   return nb;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_SMALL ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); s->nblock_used++;\n      }\n\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompress) ( bz_stream *strm )\n{\n   Bool    corrupt;\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (DState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   while (True) {\n      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;\n      if (s->state == BZ_X_OUTPUT) {\n         if (s->smallDecompress)\n            corrupt = unRLE_obuf_to_output_SMALL ( s ); else\n            corrupt = unRLE_obuf_to_output_FAST  ( s );\n         if (corrupt) return BZ_DATA_ERROR;\n         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {\n            BZ_FINALISE_CRC ( s->calculatedBlockCRC );\n            if (s->verbosity >= 3) \n               VPrintf2 ( \" {0x%08x, 0x%08x}\", s->storedBlockCRC, \n                          s->calculatedBlockCRC );\n            if (s->verbosity >= 2) VPrintf0 ( \"]\" );\n            if (s->calculatedBlockCRC != s->storedBlockCRC)\n               return BZ_DATA_ERROR;\n            s->calculatedCombinedCRC \n               = (s->calculatedCombinedCRC << 1) | \n                    (s->calculatedCombinedCRC >> 31);\n            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;\n            s->state = BZ_X_BLKHDR_1;\n         } else {\n            return BZ_OK;\n         }\n      }\n      if (s->state >= BZ_X_MAGIC_1) {\n         Int32 r = BZ2_decompress ( s );\n         if (r == BZ_STREAM_END) {\n            if (s->verbosity >= 3)\n               VPrintf2 ( \"\\n    combined CRCs: stored = 0x%08x, computed = 0x%08x\", \n                          s->storedCombinedCRC, s->calculatedCombinedCRC );\n            if (s->calculatedCombinedCRC != s->storedCombinedCRC)\n               return BZ_DATA_ERROR;\n            return r;\n         }\n         if (s->state != BZ_X_OUTPUT) return r;\n      }\n   }\n\n   AssertH ( 0, 6001 );\n\n   return 0;  /*NOTREACHED*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )\n{\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (DState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->tt   != NULL) BZFREE(s->tt);\n   if (s->ll16 != NULL) BZFREE(s->ll16);\n   if (s->ll4  != NULL) BZFREE(s->ll4);\n\n   BZFREE(strm->state);\n   strm->state = NULL;\n\n   return BZ_OK;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n/*--- File I/O stuff                              ---*/\n/*---------------------------------------------------*/\n\n#define BZ_SETERR(eee)                    \\\n{                                         \\\n   if (bzerror != NULL) *bzerror = eee;   \\\n   if (bzf != NULL) bzf->lastErr = eee;   \\\n}\n\ntypedef \n   struct {\n      FILE*     handle;\n      Char      buf[BZ_MAX_UNUSED];\n      Int32     bufN;\n      Bool      writing;\n      bz_stream strm;\n      Int32     lastErr;\n      Bool      initialisedOk;\n   }\n   bzFile;\n\n\n/*---------------------------------------------*/\nstatic Bool myfeof ( FILE* f )\n{\n   Int32 c = fgetc ( f );\n   if (c == EOF) return True;\n   ungetc ( c, f );\n   return False;\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzWriteOpen) \n                    ( int*  bzerror,      \n                      FILE* f, \n                      int   blockSize100k, \n                      int   verbosity,\n                      int   workFactor )\n{\n   Int32   ret;\n   bzFile* bzf = NULL;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL ||\n       (blockSize100k < 1 || blockSize100k > 9) ||\n       (workFactor < 0 || workFactor > 250) ||\n       (verbosity < 0 || verbosity > 4))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = (bzFile*)malloc ( sizeof(bzFile) );\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n   bzf->initialisedOk = False;\n   bzf->bufN          = 0;\n   bzf->handle        = f;\n   bzf->writing       = True;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n\n   if (workFactor == 0) workFactor = 30;\n   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = 0;\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWrite)\n             ( int*    bzerror, \n               BZFILE* b, \n               void*   buf, \n               int     len )\n{\n   Int32 n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return; };\n\n   bzf->strm.avail_in = len;\n   bzf->strm.next_in  = (char*)buf;\n\n   while (True) {\n      bzf->strm.avail_out = BZ_MAX_UNUSED;\n      bzf->strm.next_out = bzf->buf;\n      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );\n      if (ret != BZ_RUN_OK)\n         { BZ_SETERR(ret); return; };\n\n      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n         n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                       n, bzf->handle );\n         if (n != n2 || ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return; };\n      }\n\n      if (bzf->strm.avail_in == 0)\n         { BZ_SETERR(BZ_OK); return; };\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWriteClose)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in,\n                    unsigned int* nbytes_out )\n{\n   BZ2_bzWriteClose64 ( bzerror, b, abandon, \n                        nbytes_in, NULL, nbytes_out, NULL );\n}\n\n\nvoid BZ_API(BZ2_bzWriteClose64)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in_lo32,\n                    unsigned int* nbytes_in_hi32,\n                    unsigned int* nbytes_out_lo32,\n                    unsigned int* nbytes_out_hi32 )\n{\n   Int32   n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;\n   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;\n   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;\n   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;\n\n   if ((!abandon) && bzf->lastErr == BZ_OK) {\n      while (True) {\n         bzf->strm.avail_out = BZ_MAX_UNUSED;\n         bzf->strm.next_out = bzf->buf;\n         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );\n         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)\n            { BZ_SETERR(ret); return; };\n\n         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n            n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                          n, bzf->handle );\n            if (n != n2 || ferror(bzf->handle))\n               { BZ_SETERR(BZ_IO_ERROR); return; };\n         }\n\n         if (ret == BZ_STREAM_END) break;\n      }\n   }\n\n   if ( !abandon && !ferror ( bzf->handle ) ) {\n      fflush ( bzf->handle );\n      if (ferror(bzf->handle))\n         { BZ_SETERR(BZ_IO_ERROR); return; };\n   }\n\n   if (nbytes_in_lo32 != NULL)\n      *nbytes_in_lo32 = bzf->strm.total_in_lo32;\n   if (nbytes_in_hi32 != NULL)\n      *nbytes_in_hi32 = bzf->strm.total_in_hi32;\n   if (nbytes_out_lo32 != NULL)\n      *nbytes_out_lo32 = bzf->strm.total_out_lo32;\n   if (nbytes_out_hi32 != NULL)\n      *nbytes_out_hi32 = bzf->strm.total_out_hi32;\n\n   BZ_SETERR(BZ_OK);\n   BZ2_bzCompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzReadOpen) \n                   ( int*  bzerror, \n                     FILE* f, \n                     int   verbosity,\n                     int   small,\n                     void* unused,\n                     int   nUnused )\n{\n   bzFile* bzf = NULL;\n   int     ret;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL || \n       (small != 0 && small != 1) ||\n       (verbosity < 0 || verbosity > 4) ||\n       (unused == NULL && nUnused != 0) ||\n       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = (bzFile*)malloc ( sizeof(bzFile) );\n   if (bzf == NULL) \n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n\n   bzf->initialisedOk = False;\n   bzf->handle        = f;\n   bzf->bufN          = 0;\n   bzf->writing       = False;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n   \n   while (nUnused > 0) {\n      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;\n      unused = ((void*)( 1 + ((UChar*)(unused))  ));\n      nUnused--;\n   }\n\n   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = bzf->bufN;\n   bzf->strm.next_in  = bzf->buf;\n\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )\n{\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n\n   if (bzf->initialisedOk)\n      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzRead) \n           ( int*    bzerror, \n             BZFILE* b, \n             void*   buf, \n             int     len )\n{\n   Int32   n, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return 0; };\n\n   bzf->strm.avail_out = len;\n   bzf->strm.next_out = (char*)buf;\n\n   while (True) {\n\n      if (ferror(bzf->handle)) \n         { BZ_SETERR(BZ_IO_ERROR); return 0; };\n\n      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {\n         n = fread ( bzf->buf, sizeof(UChar), \n                     BZ_MAX_UNUSED, bzf->handle );\n         if (ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return 0; };\n         bzf->bufN = n;\n         bzf->strm.avail_in = bzf->bufN;\n         bzf->strm.next_in = bzf->buf;\n      }\n\n      ret = BZ2_bzDecompress ( &(bzf->strm) );\n\n      if (ret != BZ_OK && ret != BZ_STREAM_END)\n         { BZ_SETERR(ret); return 0; };\n\n      if (ret == BZ_OK && myfeof(bzf->handle) && \n          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)\n         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };\n\n      if (ret == BZ_STREAM_END)\n         { BZ_SETERR(BZ_STREAM_END);\n           return len - bzf->strm.avail_out; };\n      if (bzf->strm.avail_out == 0)\n         { BZ_SETERR(BZ_OK); return len; };\n      \n   }\n\n   return 0; /*not reached*/\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadGetUnused) \n                     ( int*    bzerror, \n                       BZFILE* b, \n                       void**  unused, \n                       int*    nUnused )\n{\n   bzFile* bzf = (bzFile*)b;\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (bzf->lastErr != BZ_STREAM_END)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (unused == NULL || nUnused == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n\n   BZ_SETERR(BZ_OK);\n   *nUnused = bzf->strm.avail_in;\n   *unused = bzf->strm.next_in;\n}\n#endif\n\n\n/*---------------------------------------------------*/\n/*--- Misc convenience stuff                      ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffCompress) \n                         ( char*         dest, \n                           unsigned int* destLen,\n                           char*         source, \n                           unsigned int  sourceLen,\n                           int           blockSize100k, \n                           int           verbosity, \n                           int           workFactor )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       blockSize100k < 1 || blockSize100k > 9 ||\n       verbosity < 0 || verbosity > 4 ||\n       workFactor < 0 || workFactor > 250) \n      return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzCompressInit ( &strm, blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzCompress ( &strm, BZ_FINISH );\n   if (ret == BZ_FINISH_OK) goto output_overflow;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;   \n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow:\n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OUTBUFF_FULL;\n\n   errhandler:\n   BZ2_bzCompressEnd ( &strm );\n   return ret;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffDecompress) \n                           ( char*         dest, \n                             unsigned int* destLen,\n                             char*         source, \n                             unsigned int  sourceLen,\n                             int           small,\n                             int           verbosity )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       (small != 0 && small != 1) ||\n       verbosity < 0 || verbosity > 4) \n          return BZ_PARAM_ERROR;\n\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzDecompress ( &strm );\n   if (ret == BZ_OK) goto output_overflow_or_eof;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;\n   BZ2_bzDecompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow_or_eof:\n   if (strm.avail_out > 0) {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_UNEXPECTED_EOF;\n   } else {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_OUTBUFF_FULL;\n   };      \n\n   errhandler:\n   BZ2_bzDecompressEnd ( &strm );\n   return ret; \n}\n\n\n/*---------------------------------------------------*/\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\n/*--\n   return version like \"0.9.5d, 4-Sept-1999\".\n--*/\nconst char * BZ_API(BZ2_bzlibVersion)(void)\n{\n   return BZ_VERSION;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n\n#if defined(_WIN32) || defined(OS2) || defined(MSDOS)\n#   include <fcntl.h>\n#   include <io.h>\n#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)\n#else\n#   define SET_BINARY_MODE(file)\n#endif\nstatic\nBZFILE * bzopen_or_bzdopen\n               ( const char *path,   /* no use when bzdopen */\n                 int fd,             /* no use when bzdopen */\n                 const char *mode,\n                 int open_mode)      /* bzopen: 0, bzdopen:1 */\n{\n   int    bzerr;\n   char   unused[BZ_MAX_UNUSED];\n   int    blockSize100k = 9;\n   int    writing       = 0;\n   char   mode2[10]     = \"\";\n   FILE   *fp           = NULL;\n   BZFILE *bzfp         = NULL;\n   int    verbosity     = 0;\n   int    workFactor    = 30;\n   int    smallMode     = 0;\n   int    nUnused       = 0; \n\n   if (mode == NULL) return NULL;\n   while (*mode) {\n      switch (*mode) {\n      case 'r':\n         writing = 0; break;\n      case 'w':\n         writing = 1; break;\n      case 's':\n         smallMode = 1; break;\n      default:\n         if (isdigit((int)(*mode))) {\n            blockSize100k = *mode-BZ_HDR_0;\n         }\n      }\n      mode++;\n   }\n   strcat(mode2, writing ? \"w\" : \"r\" );\n   strcat(mode2,\"b\");   /* binary mode */\n\n   if (open_mode==0) {\n      if (path==NULL || strcmp(path,\"\")==0) {\n        fp = (writing ? stdout : stdin);\n        SET_BINARY_MODE(fp);\n      } else {\n        fp = fopen(path,mode2);\n      }\n   } else {\n#ifdef BZ_STRICT_ANSI\n      fp = NULL;\n#else\n      fp = fdopen(fd,mode2);\n#endif\n   }\n   if (fp == NULL) return NULL;\n\n   if (writing) {\n      /* Guard against total chaos and anarchy -- JRS */\n      if (blockSize100k < 1) blockSize100k = 1;\n      if (blockSize100k > 9) blockSize100k = 9; \n      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,\n                             verbosity,workFactor);\n   } else {\n      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,\n                            unused,nUnused);\n   }\n   if (bzfp == NULL) {\n      if (fp != stdin && fp != stdout) fclose(fp);\n      return NULL;\n   }\n   return bzfp;\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   open file for read or write.\n      ex) bzopen(\"file\",\"w9\")\n      case path=\"\" or NULL => use stdin or stdout.\n--*/\nBZFILE * BZ_API(BZ2_bzopen)\n               ( const char *path,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);\n}\n\n\n/*---------------------------------------------------*/\nBZFILE * BZ_API(BZ2_bzdopen)\n               ( int fd,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )\n{\n   int bzerr, nread;\n   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;\n   nread = BZ2_bzRead(&bzerr,b,buf,len);\n   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {\n      return nread;\n   } else {\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )\n{\n   int bzerr;\n\n   BZ2_bzWrite(&bzerr,b,buf,len);\n   if(bzerr == BZ_OK){\n      return len;\n   }else{\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzflush) (BZFILE *b)\n{\n   /* do nothing now... */\n   return 0;\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzclose) (BZFILE* b)\n{\n   int bzerr;\n   FILE *fp;\n   \n   if (b==NULL) {return;}\n   fp = ((bzFile *)b)->handle;\n   if(((bzFile*)b)->writing){\n      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);\n      if(bzerr != BZ_OK){\n         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);\n      }\n   }else{\n      BZ2_bzReadClose(&bzerr,b);\n   }\n   if(fp!=stdin && fp!=stdout){\n      fclose(fp);\n   }\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   return last error code \n--*/\nstatic const char *bzerrorstrings[] = {\n       \"OK\"\n      ,\"SEQUENCE_ERROR\"\n      ,\"PARAM_ERROR\"\n      ,\"MEM_ERROR\"\n      ,\"DATA_ERROR\"\n      ,\"DATA_ERROR_MAGIC\"\n      ,\"IO_ERROR\"\n      ,\"UNEXPECTED_EOF\"\n      ,\"OUTBUFF_FULL\"\n      ,\"CONFIG_ERROR\"\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n};\n\n\nconst char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)\n{\n   int err = ((bzFile *)b)->lastErr;\n\n   if(err>0) err = 0;\n   *errnum = err;\n   return bzerrorstrings[err*-1];\n}\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/bzlib.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Public header file for the library.                   ---*/\n/*---                                               bzlib.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_H\n#define _BZLIB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BZ_RUN               0\n#define BZ_FLUSH             1\n#define BZ_FINISH            2\n\n#define BZ_OK                0\n#define BZ_RUN_OK            1\n#define BZ_FLUSH_OK          2\n#define BZ_FINISH_OK         3\n#define BZ_STREAM_END        4\n#define BZ_SEQUENCE_ERROR    (-1)\n#define BZ_PARAM_ERROR       (-2)\n#define BZ_MEM_ERROR         (-3)\n#define BZ_DATA_ERROR        (-4)\n#define BZ_DATA_ERROR_MAGIC  (-5)\n#define BZ_IO_ERROR          (-6)\n#define BZ_UNEXPECTED_EOF    (-7)\n#define BZ_OUTBUFF_FULL      (-8)\n#define BZ_CONFIG_ERROR      (-9)\n\ntypedef \n   struct {\n      char *next_in;\n      unsigned int avail_in;\n      unsigned int total_in_lo32;\n      unsigned int total_in_hi32;\n\n      char *next_out;\n      unsigned int avail_out;\n      unsigned int total_out_lo32;\n      unsigned int total_out_hi32;\n\n      void *state;\n\n      void *(*bzalloc)(void *,int,int);\n      void (*bzfree)(void *,void *);\n      void *opaque;\n   } \n   bz_stream;\n\n\n#ifndef BZ_IMPORT\n#define BZ_EXPORT\n#endif\n\n#ifndef BZ_NO_STDIO\n/* Need a definitition for FILE */\n#include <stdio.h>\n#endif\n\n#ifdef _WIN32\n#   include <windows.h>\n#   ifdef small\n      /* windows.h define small to char */\n#      undef small\n#   endif\n#   ifdef BZ_EXPORT\n#   define BZ_API(func) WINAPI func\n#   define BZ_EXTERN extern\n#   else\n   /* import windows dll dynamically */\n#   define BZ_API(func) (WINAPI * func)\n#   define BZ_EXTERN\n#   endif\n#else\n#   define BZ_API(func) func\n#   define BZ_EXTERN extern\n#endif\n\n\n/*-- Core (low-level) library functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( \n      bz_stream* strm, \n      int        blockSize100k, \n      int        verbosity, \n      int        workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompress) ( \n      bz_stream* strm, \n      int action \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( \n      bz_stream *strm, \n      int       verbosity, \n      int       small\n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompress) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( \n      bz_stream *strm \n   );\n\n\n\n/*-- High(er) level library functions --*/\n\n#ifndef BZ_NO_STDIO\n#define BZ_MAX_UNUSED 5000\n\ntypedef void BZFILE;\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( \n      int*  bzerror,   \n      FILE* f, \n      int   verbosity, \n      int   small,\n      void* unused,    \n      int   nUnused \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadClose) ( \n      int*    bzerror, \n      BZFILE* b \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( \n      int*    bzerror, \n      BZFILE* b, \n      void**  unused,  \n      int*    nUnused \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzRead) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( \n      int*  bzerror,      \n      FILE* f, \n      int   blockSize100k, \n      int   verbosity, \n      int   workFactor \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWrite) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in, \n      unsigned int* nbytes_out \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in_lo32, \n      unsigned int* nbytes_in_hi32, \n      unsigned int* nbytes_out_lo32, \n      unsigned int* nbytes_out_hi32\n   );\n#endif\n\n\n/*-- Utility functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           blockSize100k, \n      int           verbosity, \n      int           workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           small, \n      int           verbosity \n   );\n\n\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n\nBZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (\n      void\n   );\n\n#ifndef BZ_NO_STDIO\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (\n      const char *path,\n      const char *mode\n   );\n\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (\n      int        fd,\n      const char *mode\n   );\n         \nBZ_EXTERN int BZ_API(BZ2_bzread) (\n      BZFILE* b, \n      void* buf, \n      int len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzwrite) (\n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzflush) (\n      BZFILE* b\n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzclose) (\n      BZFILE* b\n   );\n\nBZ_EXTERN const char * BZ_API(BZ2_bzerror) (\n      BZFILE *b, \n      int    *errnum\n   );\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/bzlib_private.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Private header file for the library.                  ---*/\n/*---                                       bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_PRIVATE_H\n#define _BZLIB_PRIVATE_H\n\n#include <stdlib.h>\n\n#ifndef BZ_NO_STDIO\n#include <stdio.h>\n#include <ctype.h>\n#include <string.h>\n#endif\n\n#include \"bzlib.h\"\n\n\n\n/*-- General stuff. --*/\n\n#define BZ_VERSION  \"1.0.6, 6-Sept-2010\"\n\ntypedef char            Char;\ntypedef unsigned char   Bool;\ntypedef unsigned char   UChar;\ntypedef int             Int32;\ntypedef unsigned int    UInt32;\ntypedef short           Int16;\ntypedef unsigned short  UInt16;\n\n#define True  ((Bool)1)\n#define False ((Bool)0)\n\n#ifndef __GNUC__\n#define __inline__  /* */\n#endif \n\n#ifndef BZ_NO_STDIO\n\nextern void BZ2_bz__AssertH__fail ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }\n\n#if BZ_DEBUG\n#define AssertD(cond,msg) \\\n   { if (!(cond)) {       \\\n      fprintf ( stderr,   \\\n        \"\\n\\nlibbzip2(debug build): internal error\\n\\t%s\\n\", msg );\\\n      exit(1); \\\n   }}\n#else\n#define AssertD(cond,msg) /* */\n#endif\n\n#define VPrintf0(zf) \\\n   fprintf(stderr,zf)\n#define VPrintf1(zf,za1) \\\n   fprintf(stderr,zf,za1)\n#define VPrintf2(zf,za1,za2) \\\n   fprintf(stderr,zf,za1,za2)\n#define VPrintf3(zf,za1,za2,za3) \\\n   fprintf(stderr,zf,za1,za2,za3)\n#define VPrintf4(zf,za1,za2,za3,za4) \\\n   fprintf(stderr,zf,za1,za2,za3,za4)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) \\\n   fprintf(stderr,zf,za1,za2,za3,za4,za5)\n\n#else\n\nextern void bz_internal_error ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) bz_internal_error ( errcode ); }\n#define AssertD(cond,msg)                do { } while (0)\n#define VPrintf0(zf)                     do { } while (0)\n#define VPrintf1(zf,za1)                 do { } while (0)\n#define VPrintf2(zf,za1,za2)             do { } while (0)\n#define VPrintf3(zf,za1,za2,za3)         do { } while (0)\n#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)\n\n#endif\n\n\n#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)\n#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))\n\n\n/*-- Header bytes. --*/\n\n#define BZ_HDR_B 0x42   /* 'B' */\n#define BZ_HDR_Z 0x5a   /* 'Z' */\n#define BZ_HDR_h 0x68   /* 'h' */\n#define BZ_HDR_0 0x30   /* '0' */\n  \n/*-- Constants for the back end. --*/\n\n#define BZ_MAX_ALPHA_SIZE 258\n#define BZ_MAX_CODE_LEN    23\n\n#define BZ_RUNA 0\n#define BZ_RUNB 1\n\n#define BZ_N_GROUPS 6\n#define BZ_G_SIZE   50\n#define BZ_N_ITERS  4\n\n#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))\n\n\n\n/*-- Stuff for randomising repetitive blocks. --*/\n\nextern Int32 BZ2_rNums[512];\n\n#define BZ_RAND_DECLS                          \\\n   Int32 rNToGo;                               \\\n   Int32 rTPos                                 \\\n\n#define BZ_RAND_INIT_MASK                      \\\n   s->rNToGo = 0;                              \\\n   s->rTPos  = 0                               \\\n\n#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)\n\n#define BZ_RAND_UPD_MASK                       \\\n   if (s->rNToGo == 0) {                       \\\n      s->rNToGo = BZ2_rNums[s->rTPos];         \\\n      s->rTPos++;                              \\\n      if (s->rTPos == 512) s->rTPos = 0;       \\\n   }                                           \\\n   s->rNToGo--;\n\n\n\n/*-- Stuff for doing CRCs. --*/\n\nextern UInt32 BZ2_crc32Table[256];\n\n#define BZ_INITIALISE_CRC(crcVar)              \\\n{                                              \\\n   crcVar = 0xffffffffL;                       \\\n}\n\n#define BZ_FINALISE_CRC(crcVar)                \\\n{                                              \\\n   crcVar = ~(crcVar);                         \\\n}\n\n#define BZ_UPDATE_CRC(crcVar,cha)              \\\n{                                              \\\n   crcVar = (crcVar << 8) ^                    \\\n            BZ2_crc32Table[(crcVar >> 24) ^    \\\n                           ((UChar)cha)];      \\\n}\n\n\n\n/*-- States and modes for compression. --*/\n\n#define BZ_M_IDLE      1\n#define BZ_M_RUNNING   2\n#define BZ_M_FLUSHING  3\n#define BZ_M_FINISHING 4\n\n#define BZ_S_OUTPUT    1\n#define BZ_S_INPUT     2\n\n#define BZ_N_RADIX 2\n#define BZ_N_QSORT 12\n#define BZ_N_SHELL 18\n#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)\n\n\n\n\n/*-- Structure holding all the compression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* mode this stream is in, and whether inputting */\n      /* or outputting data */\n      Int32    mode;\n      Int32    state;\n\n      /* remembers avail_in when flush/finish requested */\n      UInt32   avail_in_expect;\n\n      /* for doing the block sorting */\n      UInt32*  arr1;\n      UInt32*  arr2;\n      UInt32*  ftab;\n      Int32    origPtr;\n\n      /* aliases for arr1 and arr2 */\n      UInt32*  ptr;\n      UChar*   block;\n      UInt16*  mtfv;\n      UChar*   zbits;\n\n      /* for deciding when to use the fallback sorting algorithm */\n      Int32    workFactor;\n\n      /* run-length-encoding of the input */\n      UInt32   state_in_ch;\n      Int32    state_in_len;\n      BZ_RAND_DECLS;\n\n      /* input and output limits and current posns */\n      Int32    nblock;\n      Int32    nblockMAX;\n      Int32    numZ;\n      Int32    state_out_pos;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      UChar    unseqToSeq[256];\n\n      /* the buffer for bit stream creation */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* block and combined CRCs */\n      UInt32   blockCRC;\n      UInt32   combinedCRC;\n\n      /* misc administratium */\n      Int32    verbosity;\n      Int32    blockNo;\n      Int32    blockSize100k;\n\n      /* stuff for coding the MTF values */\n      Int32    nMTF;\n      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n\n      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      /* second dimension: only 3 needed; 4 makes index calculations faster */\n      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];\n\n   }\n   EState;\n\n\n\n/*-- externs for compression. --*/\n\nextern void \nBZ2_blockSort ( EState* );\n\nextern void \nBZ2_compressBlock ( EState*, Bool );\n\nextern void \nBZ2_bsInitWrite ( EState* );\n\nextern void \nBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );\n\nextern void \nBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );\n\n\n\n/*-- states for decompression. --*/\n\n#define BZ_X_IDLE        1\n#define BZ_X_OUTPUT      2\n\n#define BZ_X_MAGIC_1     10\n#define BZ_X_MAGIC_2     11\n#define BZ_X_MAGIC_3     12\n#define BZ_X_MAGIC_4     13\n#define BZ_X_BLKHDR_1    14\n#define BZ_X_BLKHDR_2    15\n#define BZ_X_BLKHDR_3    16\n#define BZ_X_BLKHDR_4    17\n#define BZ_X_BLKHDR_5    18\n#define BZ_X_BLKHDR_6    19\n#define BZ_X_BCRC_1      20\n#define BZ_X_BCRC_2      21\n#define BZ_X_BCRC_3      22\n#define BZ_X_BCRC_4      23\n#define BZ_X_RANDBIT     24\n#define BZ_X_ORIGPTR_1   25\n#define BZ_X_ORIGPTR_2   26\n#define BZ_X_ORIGPTR_3   27\n#define BZ_X_MAPPING_1   28\n#define BZ_X_MAPPING_2   29\n#define BZ_X_SELECTOR_1  30\n#define BZ_X_SELECTOR_2  31\n#define BZ_X_SELECTOR_3  32\n#define BZ_X_CODING_1    33\n#define BZ_X_CODING_2    34\n#define BZ_X_CODING_3    35\n#define BZ_X_MTF_1       36\n#define BZ_X_MTF_2       37\n#define BZ_X_MTF_3       38\n#define BZ_X_MTF_4       39\n#define BZ_X_MTF_5       40\n#define BZ_X_MTF_6       41\n#define BZ_X_ENDHDR_2    42\n#define BZ_X_ENDHDR_3    43\n#define BZ_X_ENDHDR_4    44\n#define BZ_X_ENDHDR_5    45\n#define BZ_X_ENDHDR_6    46\n#define BZ_X_CCRC_1      47\n#define BZ_X_CCRC_2      48\n#define BZ_X_CCRC_3      49\n#define BZ_X_CCRC_4      50\n\n\n\n/*-- Constants for the fast MTF decoder. --*/\n\n#define MTFA_SIZE 4096\n#define MTFL_SIZE 16\n\n\n\n/*-- Structure holding all the decompression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* state indicator for this stream */\n      Int32    state;\n\n      /* for doing the final run-length decoding */\n      UChar    state_out_ch;\n      Int32    state_out_len;\n      Bool     blockRandomised;\n      BZ_RAND_DECLS;\n\n      /* the buffer for bit stream reading */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* misc administratium */\n      Int32    blockSize100k;\n      Bool     smallDecompress;\n      Int32    currBlockNo;\n      Int32    verbosity;\n\n      /* for undoing the Burrows-Wheeler transform */\n      Int32    origPtr;\n      UInt32   tPos;\n      Int32    k0;\n      Int32    unzftab[256];\n      Int32    nblock_used;\n      Int32    cftab[257];\n      Int32    cftabCopy[257];\n\n      /* for undoing the Burrows-Wheeler transform (FAST) */\n      UInt32   *tt;\n\n      /* for undoing the Burrows-Wheeler transform (SMALL) */\n      UInt16   *ll16;\n      UChar    *ll4;\n\n      /* stored and calculated CRCs */\n      UInt32   storedBlockCRC;\n      UInt32   storedCombinedCRC;\n      UInt32   calculatedBlockCRC;\n      UInt32   calculatedCombinedCRC;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      Bool     inUse16[16];\n      UChar    seqToUnseq[256];\n\n      /* for decoding the MTF values */\n      UChar    mtfa   [MTFA_SIZE];\n      Int32    mtfbase[256 / MTFL_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n\n      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    minLens[BZ_N_GROUPS];\n\n      /* save area for scalars in the main decompress code */\n      Int32    save_i;\n      Int32    save_j;\n      Int32    save_t;\n      Int32    save_alphaSize;\n      Int32    save_nGroups;\n      Int32    save_nSelectors;\n      Int32    save_EOB;\n      Int32    save_groupNo;\n      Int32    save_groupPos;\n      Int32    save_nextSym;\n      Int32    save_nblockMAX;\n      Int32    save_nblock;\n      Int32    save_es;\n      Int32    save_N;\n      Int32    save_curr;\n      Int32    save_zt;\n      Int32    save_zn; \n      Int32    save_zvec;\n      Int32    save_zj;\n      Int32    save_gSel;\n      Int32    save_gMinlen;\n      Int32*   save_gLimit;\n      Int32*   save_gBase;\n      Int32*   save_gPerm;\n\n   }\n   DState;\n\n\n\n/*-- Macros for decompression. --*/\n\n#define BZ_GET_FAST(cccc)                     \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    s->tPos = s->tt[s->tPos];                 \\\n    cccc = (UChar)(s->tPos & 0xff);           \\\n    s->tPos >>= 8;\n\n#define BZ_GET_FAST_C(cccc)                   \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \\\n    c_tPos = c_tt[c_tPos];                    \\\n    cccc = (UChar)(c_tPos & 0xff);            \\\n    c_tPos >>= 8;\n\n#define SET_LL4(i,n)                                          \\\n   { if (((i) & 0x1) == 0)                                    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \\\n   }\n\n#define GET_LL4(i)                             \\\n   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)\n\n#define SET_LL(i,n)                          \\\n   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \\\n     SET_LL4(i, n >> 16);                    \\\n   }\n\n#define GET_LL(i) \\\n   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))\n\n#define BZ_GET_SMALL(cccc)                            \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \\\n    s->tPos = GET_LL(s->tPos);\n\n\n/*-- externs for decompression. --*/\n\nextern Int32 \nBZ2_indexIntoF ( Int32, Int32* );\n\nextern Int32 \nBZ2_decompress ( DState* );\n\nextern void \nBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,\n                           Int32,  Int32, Int32 );\n\n\n#endif\n\n\n/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/\n\n#ifdef BZ_NO_STDIO\n#ifndef NULL\n#define NULL 0\n#endif\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                   bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/compress.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Compression machinery (not incl block sorting)        ---*/\n/*---                                          compress.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n/* CHANGES\n    0.9.0    -- original version.\n    0.9.0a/b -- no changes in this file.\n    0.9.0c   -- changed setting of nGroups in sendMTFValues() \n                so as to do a bit better on small files\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Bit stream I/O                              ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nvoid BZ2_bsInitWrite ( EState* s )\n{\n   s->bsLive = 0;\n   s->bsBuff = 0;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsFinishWrite ( EState* s )\n{\n   while (s->bsLive > 0) {\n      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);\n      s->numZ++;\n      s->bsBuff <<= 8;\n      s->bsLive -= 8;\n   }\n}\n\n\n/*---------------------------------------------------*/\n#define bsNEEDW(nz)                           \\\n{                                             \\\n   while (s->bsLive >= 8) {                   \\\n      s->zbits[s->numZ]                       \\\n         = (UChar)(s->bsBuff >> 24);          \\\n      s->numZ++;                              \\\n      s->bsBuff <<= 8;                        \\\n      s->bsLive -= 8;                         \\\n   }                                          \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\n__inline__\nvoid bsW ( EState* s, Int32 n, UInt32 v )\n{\n   bsNEEDW ( n );\n   s->bsBuff |= (v << (32 - s->bsLive - n));\n   s->bsLive += n;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUInt32 ( EState* s, UInt32 u )\n{\n   bsW ( s, 8, (u >> 24) & 0xffL );\n   bsW ( s, 8, (u >> 16) & 0xffL );\n   bsW ( s, 8, (u >>  8) & 0xffL );\n   bsW ( s, 8,  u        & 0xffL );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUChar ( EState* s, UChar c )\n{\n   bsW( s, 8, (UInt32)c );\n}\n\n\n/*---------------------------------------------------*/\n/*--- The back end proper                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_e ( EState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->unseqToSeq[i] = s->nInUse;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid generateMTFValues ( EState* s )\n{\n   UChar   yy[256];\n   Int32   i, j;\n   Int32   zPend;\n   Int32   wr;\n   Int32   EOB;\n\n   /* \n      After sorting (eg, here),\n         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,\n         and\n         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] \n         holds the original block data.\n\n      The first thing to do is generate the MTF values,\n      and put them in\n         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].\n      Because there are strictly fewer or equal MTF values\n      than block values, ptr values in this area are overwritten\n      with MTF values only when they are no longer needed.\n\n      The final compressed bitstream is generated into the\n      area starting at\n         (UChar*) (&((UChar*)s->arr2)[s->nblock])\n\n      These storage aliases are set up in bzCompressInit(),\n      except for the last one, which is arranged in \n      compressBlock().\n   */\n   UInt32* ptr   = s->ptr;\n   UChar* block  = s->block;\n   UInt16* mtfv  = s->mtfv;\n\n   makeMaps_e ( s );\n   EOB = s->nInUse+1;\n\n   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;\n\n   wr = 0;\n   zPend = 0;\n   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;\n\n   for (i = 0; i < s->nblock; i++) {\n      UChar ll_i;\n      AssertD ( wr <= i, \"generateMTFValues(1)\" );\n      j = ptr[i]-1; if (j < 0) j += s->nblock;\n      ll_i = s->unseqToSeq[block[j]];\n      AssertD ( ll_i < s->nInUse, \"generateMTFValues(2a)\" );\n\n      if (yy[0] == ll_i) { \n         zPend++;\n      } else {\n\n         if (zPend > 0) {\n            zPend--;\n            while (True) {\n               if (zPend & 1) {\n                  mtfv[wr] = BZ_RUNB; wr++; \n                  s->mtfFreq[BZ_RUNB]++; \n               } else {\n                  mtfv[wr] = BZ_RUNA; wr++; \n                  s->mtfFreq[BZ_RUNA]++; \n               }\n               if (zPend < 2) break;\n               zPend = (zPend - 2) / 2;\n            };\n            zPend = 0;\n         }\n         {\n            UChar  rtmp;\n            UChar* ryy_j;\n            UChar  rll_i;\n            rtmp  = yy[1];\n            yy[1] = yy[0];\n            ryy_j = &(yy[1]);\n            rll_i = ll_i;\n            while ( rll_i != rtmp ) {\n               UChar rtmp2;\n               ryy_j++;\n               rtmp2  = rtmp;\n               rtmp   = *ryy_j;\n               *ryy_j = rtmp2;\n            };\n            yy[0] = rtmp;\n            j = ryy_j - &(yy[0]);\n            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;\n         }\n\n      }\n   }\n\n   if (zPend > 0) {\n      zPend--;\n      while (True) {\n         if (zPend & 1) {\n            mtfv[wr] = BZ_RUNB; wr++; \n            s->mtfFreq[BZ_RUNB]++; \n         } else {\n            mtfv[wr] = BZ_RUNA; wr++; \n            s->mtfFreq[BZ_RUNA]++; \n         }\n         if (zPend < 2) break;\n         zPend = (zPend - 2) / 2;\n      };\n      zPend = 0;\n   }\n\n   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;\n\n   s->nMTF = wr;\n}\n\n\n/*---------------------------------------------------*/\n#define BZ_LESSER_ICOST  0\n#define BZ_GREATER_ICOST 15\n\nstatic\nvoid sendMTFValues ( EState* s )\n{\n   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;\n   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;\n   Int32 nGroups, nBytes;\n\n   /*--\n   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   is a global since the decoder also needs it.\n\n   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   are also globals only used in this proc.\n   Made global to keep stack frame size small.\n   --*/\n\n\n   UInt16 cost[BZ_N_GROUPS];\n   Int32  fave[BZ_N_GROUPS];\n\n   UInt16* mtfv = s->mtfv;\n\n   if (s->verbosity >= 3)\n      VPrintf3( \"      %d in block, %d after MTF & 1-2 coding, \"\n                \"%d+2 syms in use\\n\", \n                s->nblock, s->nMTF, s->nInUse );\n\n   alphaSize = s->nInUse+2;\n   for (t = 0; t < BZ_N_GROUPS; t++)\n      for (v = 0; v < alphaSize; v++)\n         s->len[t][v] = BZ_GREATER_ICOST;\n\n   /*--- Decide how many coding tables to use ---*/\n   AssertH ( s->nMTF > 0, 3001 );\n   if (s->nMTF < 200)  nGroups = 2; else\n   if (s->nMTF < 600)  nGroups = 3; else\n   if (s->nMTF < 1200) nGroups = 4; else\n   if (s->nMTF < 2400) nGroups = 5; else\n                       nGroups = 6;\n\n   /*--- Generate an initial set of coding tables ---*/\n   { \n      Int32 nPart, remF, tFreq, aFreq;\n\n      nPart = nGroups;\n      remF  = s->nMTF;\n      gs = 0;\n      while (nPart > 0) {\n         tFreq = remF / nPart;\n         ge = gs-1;\n         aFreq = 0;\n         while (aFreq < tFreq && ge < alphaSize-1) {\n            ge++;\n            aFreq += s->mtfFreq[ge];\n         }\n\n         if (ge > gs \n             && nPart != nGroups && nPart != 1 \n             && ((nGroups-nPart) % 2 == 1)) {\n            aFreq -= s->mtfFreq[ge];\n            ge--;\n         }\n\n         if (s->verbosity >= 3)\n            VPrintf5( \"      initial group %d, [%d .. %d], \"\n                      \"has %d syms (%4.1f%%)\\n\",\n                      nPart, gs, ge, aFreq, \n                      (100.0 * (float)aFreq) / (float)(s->nMTF) );\n \n         for (v = 0; v < alphaSize; v++)\n            if (v >= gs && v <= ge) \n               s->len[nPart-1][v] = BZ_LESSER_ICOST; else\n               s->len[nPart-1][v] = BZ_GREATER_ICOST;\n \n         nPart--;\n         gs = ge+1;\n         remF -= aFreq;\n      }\n   }\n\n   /*--- \n      Iterate up to BZ_N_ITERS times to improve the tables.\n   ---*/\n   for (iter = 0; iter < BZ_N_ITERS; iter++) {\n\n      for (t = 0; t < nGroups; t++) fave[t] = 0;\n\n      for (t = 0; t < nGroups; t++)\n         for (v = 0; v < alphaSize; v++)\n            s->rfreq[t][v] = 0;\n\n      /*---\n        Set up an auxiliary length table which is used to fast-track\n\tthe common case (nGroups == 6). \n      ---*/\n      if (nGroups == 6) {\n         for (v = 0; v < alphaSize; v++) {\n            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];\n            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];\n            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];\n\t }\n      }\n\n      nSelectors = 0;\n      totc = 0;\n      gs = 0;\n      while (True) {\n\n         /*--- Set group start & end marks. --*/\n         if (gs >= s->nMTF) break;\n         ge = gs + BZ_G_SIZE - 1; \n         if (ge >= s->nMTF) ge = s->nMTF-1;\n\n         /*-- \n            Calculate the cost of this group as coded\n            by each of the coding tables.\n         --*/\n         for (t = 0; t < nGroups; t++) cost[t] = 0;\n\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            UInt32 cost01, cost23, cost45;\n            UInt16 icv;\n            cost01 = cost23 = cost45 = 0;\n\n#           define BZ_ITER(nn)                \\\n               icv = mtfv[gs+(nn)];           \\\n               cost01 += s->len_pack[icv][0]; \\\n               cost23 += s->len_pack[icv][1]; \\\n               cost45 += s->len_pack[icv][2]; \\\n\n            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);\n            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);\n            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);\n            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);\n            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);\n            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);\n            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);\n            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);\n            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);\n            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);\n\n#           undef BZ_ITER\n\n            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;\n            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;\n            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++) { \n               UInt16 icv = mtfv[i];\n               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];\n            }\n         }\n \n         /*-- \n            Find the coding table which is best for this group,\n            and record its identity in the selector table.\n         --*/\n         bc = 999999999; bt = -1;\n         for (t = 0; t < nGroups; t++)\n            if (cost[t] < bc) { bc = cost[t]; bt = t; };\n         totc += bc;\n         fave[bt]++;\n         s->selector[nSelectors] = bt;\n         nSelectors++;\n\n         /*-- \n            Increment the symbol frequencies for the selected table.\n          --*/\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n\n#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++\n\n            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);\n            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);\n            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);\n            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);\n            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);\n            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);\n            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);\n            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);\n            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);\n            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);\n\n#           undef BZ_ITUR\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++)\n               s->rfreq[bt][ mtfv[i] ]++;\n         }\n\n         gs = ge+1;\n      }\n      if (s->verbosity >= 3) {\n         VPrintf2 ( \"      pass %d: size is %d, grp uses are \", \n                   iter+1, totc/8 );\n         for (t = 0; t < nGroups; t++)\n            VPrintf1 ( \"%d \", fave[t] );\n         VPrintf0 ( \"\\n\" );\n      }\n\n      /*--\n        Recompute the tables based on the accumulated frequencies.\n      --*/\n      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See \n         comment in huffman.c for details. */\n      for (t = 0; t < nGroups; t++)\n         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), \n                                 alphaSize, 17 /*20*/ );\n   }\n\n\n   AssertH( nGroups < 8, 3002 );\n   AssertH( nSelectors < 32768 &&\n            nSelectors <= (2 + (900000 / BZ_G_SIZE)),\n            3003 );\n\n\n   /*--- Compute MTF values for the selectors. ---*/\n   {\n      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;\n      for (i = 0; i < nGroups; i++) pos[i] = i;\n      for (i = 0; i < nSelectors; i++) {\n         ll_i = s->selector[i];\n         j = 0;\n         tmp = pos[j];\n         while ( ll_i != tmp ) {\n            j++;\n            tmp2 = tmp;\n            tmp = pos[j];\n            pos[j] = tmp2;\n         };\n         pos[0] = tmp;\n         s->selectorMtf[i] = j;\n      }\n   };\n\n   /*--- Assign actual codes for the tables. --*/\n   for (t = 0; t < nGroups; t++) {\n      minLen = 32;\n      maxLen = 0;\n      for (i = 0; i < alphaSize; i++) {\n         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n         if (s->len[t][i] < minLen) minLen = s->len[t][i];\n      }\n      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );\n      AssertH ( !(minLen < 1),  3005 );\n      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), \n                          minLen, maxLen, alphaSize );\n   }\n\n   /*--- Transmit the mapping table. ---*/\n   { \n      Bool inUse16[16];\n      for (i = 0; i < 16; i++) {\n          inUse16[i] = False;\n          for (j = 0; j < 16; j++)\n             if (s->inUse[i * 16 + j]) inUse16[i] = True;\n      }\n     \n      nBytes = s->numZ;\n      for (i = 0; i < 16; i++)\n         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);\n\n      for (i = 0; i < 16; i++)\n         if (inUse16[i])\n            for (j = 0; j < 16; j++) {\n               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);\n            }\n\n      if (s->verbosity >= 3) \n         VPrintf1( \"      bytes: mapping %d, \", s->numZ-nBytes );\n   }\n\n   /*--- Now the selectors. ---*/\n   nBytes = s->numZ;\n   bsW ( s, 3, nGroups );\n   bsW ( s, 15, nSelectors );\n   for (i = 0; i < nSelectors; i++) { \n      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);\n      bsW(s,1,0);\n   }\n   if (s->verbosity >= 3)\n      VPrintf1( \"selectors %d, \", s->numZ-nBytes );\n\n   /*--- Now the coding tables. ---*/\n   nBytes = s->numZ;\n\n   for (t = 0; t < nGroups; t++) {\n      Int32 curr = s->len[t][0];\n      bsW ( s, 5, curr );\n      for (i = 0; i < alphaSize; i++) {\n         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };\n         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };\n         bsW ( s, 1, 0 );\n      }\n   }\n\n   if (s->verbosity >= 3)\n      VPrintf1 ( \"code lengths %d, \", s->numZ-nBytes );\n\n   /*--- And finally, the block data proper ---*/\n   nBytes = s->numZ;\n   selCtr = 0;\n   gs = 0;\n   while (True) {\n      if (gs >= s->nMTF) break;\n      ge = gs + BZ_G_SIZE - 1; \n      if (ge >= s->nMTF) ge = s->nMTF-1;\n      AssertH ( s->selector[selCtr] < nGroups, 3006 );\n\n      if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            UInt16 mtfv_i;\n            UChar* s_len_sel_selCtr \n               = &(s->len[s->selector[selCtr]][0]);\n            Int32* s_code_sel_selCtr\n               = &(s->code[s->selector[selCtr]][0]);\n\n#           define BZ_ITAH(nn)                      \\\n               mtfv_i = mtfv[gs+(nn)];              \\\n               bsW ( s,                             \\\n                     s_len_sel_selCtr[mtfv_i],      \\\n                     s_code_sel_selCtr[mtfv_i] )\n\n            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);\n            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);\n            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);\n            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);\n            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);\n            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);\n            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);\n            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);\n            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);\n            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);\n\n#           undef BZ_ITAH\n\n      } else {\n\t /*--- slow version which correctly handles all situations ---*/\n         for (i = gs; i <= ge; i++) {\n            bsW ( s, \n                  s->len  [s->selector[selCtr]] [mtfv[i]],\n                  s->code [s->selector[selCtr]] [mtfv[i]] );\n         }\n      }\n\n\n      gs = ge+1;\n      selCtr++;\n   }\n   AssertH( selCtr == nSelectors, 3007 );\n\n   if (s->verbosity >= 3)\n      VPrintf1( \"codes %d\\n\", s->numZ-nBytes );\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_compressBlock ( EState* s, Bool is_last_block )\n{\n   if (s->nblock > 0) {\n\n      BZ_FINALISE_CRC ( s->blockCRC );\n      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);\n      s->combinedCRC ^= s->blockCRC;\n      if (s->blockNo > 1) s->numZ = 0;\n\n      if (s->verbosity >= 2)\n         VPrintf4( \"    block %d: crc = 0x%08x, \"\n                   \"combined CRC = 0x%08x, size = %d\\n\",\n                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );\n\n      BZ2_blockSort ( s );\n   }\n\n   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);\n\n   /*-- If this is the first block, create the stream header. --*/\n   if (s->blockNo == 1) {\n      BZ2_bsInitWrite ( s );\n      bsPutUChar ( s, BZ_HDR_B );\n      bsPutUChar ( s, BZ_HDR_Z );\n      bsPutUChar ( s, BZ_HDR_h );\n      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );\n   }\n\n   if (s->nblock > 0) {\n\n      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );\n      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );\n      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );\n\n      /*-- Now the block's CRC, so it is in a known place. --*/\n      bsPutUInt32 ( s, s->blockCRC );\n\n      /*-- \n         Now a single bit indicating (non-)randomisation. \n         As of version 0.9.5, we use a better sorting algorithm\n         which makes randomisation unnecessary.  So always set\n         the randomised bit to 'no'.  Of course, the decoder\n         still needs to be able to handle randomised blocks\n         so as to maintain backwards compatibility with\n         older versions of bzip2.\n      --*/\n      bsW(s,1,0);\n\n      bsW ( s, 24, s->origPtr );\n      generateMTFValues ( s );\n      sendMTFValues ( s );\n   }\n\n\n   /*-- If this is the last block, add the stream trailer. --*/\n   if (is_last_block) {\n\n      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );\n      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );\n      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );\n      bsPutUInt32 ( s, s->combinedCRC );\n      if (s->verbosity >= 2)\n         VPrintf1( \"    final combined CRC = 0x%08x\\n   \", s->combinedCRC );\n      bsFinishWrite ( s );\n   }\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        compress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/crctable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Table for doing CRCs                                  ---*/\n/*---                                          crctable.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*--\n  I think this is an implementation of the AUTODIN-II,\n  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived\n  from code by Rob Warnock, in Section 51 of the\n  comp.compression FAQ.\n--*/\n\nUInt32 BZ2_crc32Table[256] = {\n\n   /*-- Ugly, innit? --*/\n\n   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,\n   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,\n   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,\n   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,\n   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,\n   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,\n   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,\n   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,\n   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,\n   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,\n   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,\n   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,\n   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,\n   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,\n   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,\n   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,\n   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,\n   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,\n   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,\n   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,\n   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,\n   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,\n   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,\n   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,\n   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,\n   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,\n   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,\n   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,\n   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,\n   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,\n   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,\n   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,\n   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,\n   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,\n   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,\n   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,\n   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,\n   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,\n   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,\n   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,\n   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,\n   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,\n   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,\n   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,\n   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,\n   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,\n   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,\n   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,\n   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,\n   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,\n   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,\n   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,\n   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,\n   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,\n   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,\n   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,\n   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,\n   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,\n   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,\n   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,\n   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,\n   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,\n   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,\n   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        crctable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/decompress.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Decompression machinery                               ---*/\n/*---                                        decompress.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_d ( DState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->seqToUnseq[s->nInUse] = i;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\n#define RETURN(rrr)                               \\\n   { retVal = rrr; goto save_state_and_return; };\n\n#define GET_BITS(lll,vvv,nnn)                     \\\n   case lll: s->state = lll;                      \\\n   while (True) {                                 \\\n      if (s->bsLive >= nnn) {                     \\\n         UInt32 v;                                \\\n         v = (s->bsBuff >>                        \\\n             (s->bsLive-nnn)) & ((1 << nnn)-1);   \\\n         s->bsLive -= nnn;                        \\\n         vvv = v;                                 \\\n         break;                                   \\\n      }                                           \\\n      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \\\n      s->bsBuff                                   \\\n         = (s->bsBuff << 8) |                     \\\n           ((UInt32)                              \\\n              (*((UChar*)(s->strm->next_in))));   \\\n      s->bsLive += 8;                             \\\n      s->strm->next_in++;                         \\\n      s->strm->avail_in--;                        \\\n      s->strm->total_in_lo32++;                   \\\n      if (s->strm->total_in_lo32 == 0)            \\\n         s->strm->total_in_hi32++;                \\\n   }\n\n#define GET_UCHAR(lll,uuu)                        \\\n   GET_BITS(lll,uuu,8)\n\n#define GET_BIT(lll,uuu)                          \\\n   GET_BITS(lll,uuu,1)\n\n/*---------------------------------------------------*/\n#define GET_MTF_VAL(label1,label2,lval)           \\\n{                                                 \\\n   if (groupPos == 0) {                           \\\n      groupNo++;                                  \\\n      if (groupNo >= nSelectors)                  \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      groupPos = BZ_G_SIZE;                       \\\n      gSel = s->selector[groupNo];                \\\n      gMinlen = s->minLens[gSel];                 \\\n      gLimit = &(s->limit[gSel][0]);              \\\n      gPerm = &(s->perm[gSel][0]);                \\\n      gBase = &(s->base[gSel][0]);                \\\n   }                                              \\\n   groupPos--;                                    \\\n   zn = gMinlen;                                  \\\n   GET_BITS(label1, zvec, zn);                    \\\n   while (1) {                                    \\\n      if (zn > 20 /* the longest code */)         \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      if (zvec <= gLimit[zn]) break;              \\\n      zn++;                                       \\\n      GET_BIT(label2, zj);                        \\\n      zvec = (zvec << 1) | zj;                    \\\n   };                                             \\\n   if (zvec - gBase[zn] < 0                       \\\n       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \\\n      RETURN(BZ_DATA_ERROR);                      \\\n   lval = gPerm[zvec - gBase[zn]];                \\\n}\n\n\n/*---------------------------------------------------*/\nInt32 BZ2_decompress ( DState* s )\n{\n   UChar      uc;\n   Int32      retVal;\n   Int32      minLen, maxLen;\n   bz_stream* strm = s->strm;\n\n   /* stuff that needs to be saved/restored */\n   Int32  i;\n   Int32  j;\n   Int32  t;\n   Int32  alphaSize;\n   Int32  nGroups;\n   Int32  nSelectors;\n   Int32  EOB;\n   Int32  groupNo;\n   Int32  groupPos;\n   Int32  nextSym;\n   Int32  nblockMAX;\n   Int32  nblock;\n   Int32  es;\n   Int32  N;\n   Int32  curr;\n   Int32  zt;\n   Int32  zn; \n   Int32  zvec;\n   Int32  zj;\n   Int32  gSel;\n   Int32  gMinlen;\n   Int32* gLimit;\n   Int32* gBase;\n   Int32* gPerm;\n\n   if (s->state == BZ_X_MAGIC_1) {\n      /*initialise the save area*/\n      s->save_i           = 0;\n      s->save_j           = 0;\n      s->save_t           = 0;\n      s->save_alphaSize   = 0;\n      s->save_nGroups     = 0;\n      s->save_nSelectors  = 0;\n      s->save_EOB         = 0;\n      s->save_groupNo     = 0;\n      s->save_groupPos    = 0;\n      s->save_nextSym     = 0;\n      s->save_nblockMAX   = 0;\n      s->save_nblock      = 0;\n      s->save_es          = 0;\n      s->save_N           = 0;\n      s->save_curr        = 0;\n      s->save_zt          = 0;\n      s->save_zn          = 0;\n      s->save_zvec        = 0;\n      s->save_zj          = 0;\n      s->save_gSel        = 0;\n      s->save_gMinlen     = 0;\n      s->save_gLimit      = NULL;\n      s->save_gBase       = NULL;\n      s->save_gPerm       = NULL;\n   }\n\n   /*restore from the save area*/\n   i           = s->save_i;\n   j           = s->save_j;\n   t           = s->save_t;\n   alphaSize   = s->save_alphaSize;\n   nGroups     = s->save_nGroups;\n   nSelectors  = s->save_nSelectors;\n   EOB         = s->save_EOB;\n   groupNo     = s->save_groupNo;\n   groupPos    = s->save_groupPos;\n   nextSym     = s->save_nextSym;\n   nblockMAX   = s->save_nblockMAX;\n   nblock      = s->save_nblock;\n   es          = s->save_es;\n   N           = s->save_N;\n   curr        = s->save_curr;\n   zt          = s->save_zt;\n   zn          = s->save_zn; \n   zvec        = s->save_zvec;\n   zj          = s->save_zj;\n   gSel        = s->save_gSel;\n   gMinlen     = s->save_gMinlen;\n   gLimit      = s->save_gLimit;\n   gBase       = s->save_gBase;\n   gPerm       = s->save_gPerm;\n\n   retVal = BZ_OK;\n\n   switch (s->state) {\n\n      GET_UCHAR(BZ_X_MAGIC_1, uc);\n      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_2, uc);\n      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_3, uc)\n      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)\n      if (s->blockSize100k < (BZ_HDR_0 + 1) || \n          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);\n      s->blockSize100k -= BZ_HDR_0;\n\n      if (s->smallDecompress) {\n         s->ll16 = (UInt16*)BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );\n         s->ll4  = (UChar*)BZALLOC( \n                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) \n                   );\n         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);\n      } else {\n         s->tt  = (UInt32*)BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );\n         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);\n      }\n\n      GET_UCHAR(BZ_X_BLKHDR_1, uc);\n\n      if (uc == 0x17) goto endhdr_2;\n      if (uc != 0x31) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_2, uc);\n      if (uc != 0x41) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_3, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_4, uc);\n      if (uc != 0x26) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_5, uc);\n      if (uc != 0x53) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_6, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n\n      s->currBlockNo++;\n      if (s->verbosity >= 2)\n         VPrintf1 ( \"\\n    [%d: huff+mtf \", s->currBlockNo );\n \n      s->storedBlockCRC = 0;\n      GET_UCHAR(BZ_X_BCRC_1, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_2, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_3, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_4, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n\n      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);\n\n      s->origPtr = 0;\n      GET_UCHAR(BZ_X_ORIGPTR_1, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_2, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_3, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n\n      if (s->origPtr < 0)\n         RETURN(BZ_DATA_ERROR);\n      if (s->origPtr > 10 + 100000*s->blockSize100k) \n         RETURN(BZ_DATA_ERROR);\n\n      /*--- Receive the mapping table ---*/\n      for (i = 0; i < 16; i++) {\n         GET_BIT(BZ_X_MAPPING_1, uc);\n         if (uc == 1) \n            s->inUse16[i] = True; else \n            s->inUse16[i] = False;\n      }\n\n      for (i = 0; i < 256; i++) s->inUse[i] = False;\n\n      for (i = 0; i < 16; i++)\n         if (s->inUse16[i])\n            for (j = 0; j < 16; j++) {\n               GET_BIT(BZ_X_MAPPING_2, uc);\n               if (uc == 1) s->inUse[i * 16 + j] = True;\n            }\n      makeMaps_d ( s );\n      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);\n      alphaSize = s->nInUse+2;\n\n      /*--- Now the selectors ---*/\n      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);\n      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);\n      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);\n      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);\n      for (i = 0; i < nSelectors; i++) {\n         j = 0;\n         while (True) {\n            GET_BIT(BZ_X_SELECTOR_3, uc);\n            if (uc == 0) break;\n            j++;\n            if (j >= nGroups) RETURN(BZ_DATA_ERROR);\n         }\n         s->selectorMtf[i] = j;\n      }\n\n      /*--- Undo the MTF values for the selectors. ---*/\n      {\n         UChar pos[BZ_N_GROUPS], tmp, v;\n         for (v = 0; v < nGroups; v++) pos[v] = v;\n   \n         for (i = 0; i < nSelectors; i++) {\n            v = s->selectorMtf[i];\n            tmp = pos[v];\n            while (v > 0) { pos[v] = pos[v-1]; v--; }\n            pos[0] = tmp;\n            s->selector[i] = tmp;\n         }\n      }\n\n      /*--- Now the coding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         GET_BITS(BZ_X_CODING_1, curr, 5);\n         for (i = 0; i < alphaSize; i++) {\n            while (True) {\n               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);\n               GET_BIT(BZ_X_CODING_2, uc);\n               if (uc == 0) break;\n               GET_BIT(BZ_X_CODING_3, uc);\n               if (uc == 0) curr++; else curr--;\n            }\n            s->len[t][i] = curr;\n         }\n      }\n\n      /*--- Create the Huffman decoding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         minLen = 32;\n         maxLen = 0;\n         for (i = 0; i < alphaSize; i++) {\n            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n            if (s->len[t][i] < minLen) minLen = s->len[t][i];\n         }\n         BZ2_hbCreateDecodeTables ( \n            &(s->limit[t][0]), \n            &(s->base[t][0]), \n            &(s->perm[t][0]), \n            &(s->len[t][0]),\n            minLen, maxLen, alphaSize\n         );\n         s->minLens[t] = minLen;\n      }\n\n      /*--- Now the MTF values ---*/\n\n      EOB      = s->nInUse+1;\n      nblockMAX = 100000 * s->blockSize100k;\n      groupNo  = -1;\n      groupPos = 0;\n\n      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;\n\n      /*-- MTF init --*/\n      {\n         Int32 ii, jj, kk;\n         kk = MTFA_SIZE-1;\n         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {\n            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);\n               kk--;\n            }\n            s->mtfbase[ii] = kk + 1;\n         }\n      }\n      /*-- end MTF init --*/\n\n      nblock = 0;\n      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);\n\n      while (True) {\n\n         if (nextSym == EOB) break;\n\n         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {\n\n            es = -1;\n            N = 1;\n            do {\n               /* Check that N doesn't get too big, so that es doesn't\n                  go negative.  The maximum value that can be\n                  RUNA/RUNB encoded is equal to the block size (post\n                  the initial RLE), viz, 900k, so bounding N at 2\n                  million should guard against overflow without\n                  rejecting any legitimate inputs. */\n               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);\n               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else\n               if (nextSym == BZ_RUNB) es = es + (1+1) * N;\n               N = N * 2;\n               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);\n            }\n               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);\n\n            es++;\n            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];\n            s->unzftab[uc] += es;\n\n            if (s->smallDecompress)\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->ll16[nblock] = (UInt16)uc;\n                  nblock++;\n                  es--;\n               }\n            else\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->tt[nblock] = (UInt32)uc;\n                  nblock++;\n                  es--;\n               };\n\n            continue;\n\n         } else {\n\n            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n\n            /*-- uc = MTF ( nextSym-1 ) --*/\n            {\n               Int32 ii, jj, kk, pp, lno, off;\n               UInt32 nn;\n               nn = (UInt32)(nextSym - 1);\n\n               if (nn < MTFL_SIZE) {\n                  /* avoid general-case expense */\n                  pp = s->mtfbase[0];\n                  uc = s->mtfa[pp+nn];\n                  while (nn > 3) {\n                     Int32 z = pp+nn;\n                     s->mtfa[(z)  ] = s->mtfa[(z)-1];\n                     s->mtfa[(z)-1] = s->mtfa[(z)-2];\n                     s->mtfa[(z)-2] = s->mtfa[(z)-3];\n                     s->mtfa[(z)-3] = s->mtfa[(z)-4];\n                     nn -= 4;\n                  }\n                  while (nn > 0) { \n                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; \n                  };\n                  s->mtfa[pp] = uc;\n               } else { \n                  /* general case */\n                  lno = nn / MTFL_SIZE;\n                  off = nn % MTFL_SIZE;\n                  pp = s->mtfbase[lno] + off;\n                  uc = s->mtfa[pp];\n                  while (pp > s->mtfbase[lno]) { \n                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; \n                  };\n                  s->mtfbase[lno]++;\n                  while (lno > 0) {\n                     s->mtfbase[lno]--;\n                     s->mtfa[s->mtfbase[lno]] \n                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];\n                     lno--;\n                  }\n                  s->mtfbase[0]--;\n                  s->mtfa[s->mtfbase[0]] = uc;\n                  if (s->mtfbase[0] == 0) {\n                     kk = MTFA_SIZE-1;\n                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {\n                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];\n                           kk--;\n                        }\n                        s->mtfbase[ii] = kk + 1;\n                     }\n                  }\n               }\n            }\n            /*-- end uc = MTF ( nextSym-1 ) --*/\n\n            s->unzftab[s->seqToUnseq[uc]]++;\n            if (s->smallDecompress)\n               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else\n               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);\n            nblock++;\n\n            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);\n            continue;\n         }\n      }\n\n      /* Now we know what nblock is, we can do a better sanity\n         check on s->origPtr.\n      */\n      if (s->origPtr < 0 || s->origPtr >= nblock)\n         RETURN(BZ_DATA_ERROR);\n\n      /*-- Set up cftab to facilitate generation of T^(-1) --*/\n      /* Check: unzftab entries in range. */\n      for (i = 0; i <= 255; i++) {\n         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)\n            RETURN(BZ_DATA_ERROR);\n      }\n      /* Actually generate cftab. */\n      s->cftab[0] = 0;\n      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];\n      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];\n      /* Check: cftab entries in range. */\n      for (i = 0; i <= 256; i++) {\n         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {\n            /* s->cftab[i] can legitimately be == nblock */\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n      /* Check: cftab entries non-descending. */\n      for (i = 1; i <= 256; i++) {\n         if (s->cftab[i-1] > s->cftab[i]) {\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n\n      s->state_out_len = 0;\n      s->state_out_ch  = 0;\n      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );\n      s->state = BZ_X_OUTPUT;\n      if (s->verbosity >= 2) VPrintf0 ( \"rt+rld\" );\n\n      if (s->smallDecompress) {\n\n         /*-- Make a copy of cftab, used in generation of T --*/\n         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];\n\n         /*-- compute the T vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->ll16[i]);\n            SET_LL(i, s->cftabCopy[uc]);\n            s->cftabCopy[uc]++;\n         }\n\n         /*-- Compute T^(-1) by pointer reversal on T --*/\n         i = s->origPtr;\n         j = GET_LL(i);\n         do {\n            Int32 tmp = GET_LL(j);\n            SET_LL(j, i);\n            i = j;\n            j = tmp;\n         }\n            while (i != s->origPtr);\n\n         s->tPos = s->origPtr;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n         }\n\n      } else {\n\n         /*-- compute the T^(-1) vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->tt[i] & 0xff);\n            s->tt[s->cftab[uc]] |= (i << 8);\n            s->cftab[uc]++;\n         }\n\n         s->tPos = s->tt[s->origPtr] >> 8;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n         }\n\n      }\n\n      RETURN(BZ_OK);\n\n\n\n    endhdr_2:\n\n      GET_UCHAR(BZ_X_ENDHDR_2, uc);\n      if (uc != 0x72) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_3, uc);\n      if (uc != 0x45) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_4, uc);\n      if (uc != 0x38) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_5, uc);\n      if (uc != 0x50) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_6, uc);\n      if (uc != 0x90) RETURN(BZ_DATA_ERROR);\n\n      s->storedCombinedCRC = 0;\n      GET_UCHAR(BZ_X_CCRC_1, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_2, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_3, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_4, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n\n      s->state = BZ_X_IDLE;\n      RETURN(BZ_STREAM_END);\n\n      default: AssertH ( False, 4001 );\n   }\n\n   AssertH ( False, 4002 );\n\n   save_state_and_return:\n\n   s->save_i           = i;\n   s->save_j           = j;\n   s->save_t           = t;\n   s->save_alphaSize   = alphaSize;\n   s->save_nGroups     = nGroups;\n   s->save_nSelectors  = nSelectors;\n   s->save_EOB         = EOB;\n   s->save_groupNo     = groupNo;\n   s->save_groupPos    = groupPos;\n   s->save_nextSym     = nextSym;\n   s->save_nblockMAX   = nblockMAX;\n   s->save_nblock      = nblock;\n   s->save_es          = es;\n   s->save_N           = N;\n   s->save_curr        = curr;\n   s->save_zt          = zt;\n   s->save_zn          = zn;\n   s->save_zvec        = zvec;\n   s->save_zj          = zj;\n   s->save_gSel        = gSel;\n   s->save_gMinlen     = gMinlen;\n   s->save_gLimit      = gLimit;\n   s->save_gBase       = gBase;\n   s->save_gPerm       = gPerm;\n\n   return retVal;   \n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                      decompress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/fgbzip2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_ASYNC_MSG && __TBB_CPP11_LAMBDAS_PRESENT\n\n#include <iostream>\n#include <fstream>\n#include <string>\n#include <memory>\n#include <queue>\n\n#include \"bzlib.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/compat/thread\"\n#include \"tbb/concurrent_queue.h\"\n\n// TODO: change memory allocation/deallocation to be managed in constructor/destructor\nstruct Buffer {\n    size_t len;\n    char* b;\n};\n\nstruct BufferMsg {\n\n    BufferMsg() {}\n    BufferMsg(Buffer& inputBuffer, Buffer& outputBuffer, size_t seqId, bool isLast = false)\n        : inputBuffer(inputBuffer), outputBuffer(outputBuffer), seqId(seqId), isLast(isLast) {}\n\n    static BufferMsg createBufferMsg(size_t seqId, size_t chunkSize) {\n        Buffer inputBuffer;\n        inputBuffer.b = new char[chunkSize];\n        inputBuffer.len = chunkSize;\n\n        Buffer outputBuffer;\n        size_t compressedChunkSize = chunkSize * 1.01 + 600; // compression overhead\n        outputBuffer.b = new char[compressedChunkSize];\n        outputBuffer.len = compressedChunkSize;\n\n        return BufferMsg(inputBuffer, outputBuffer, seqId);\n    }\n\n    static void destroyBufferMsg(const BufferMsg& destroyMsg) {\n        delete[] destroyMsg.inputBuffer.b;\n        delete[] destroyMsg.outputBuffer.b;\n    }\n\n    void markLast(size_t lastId) {\n        isLast = true;\n        seqId = lastId;\n    }\n\n    size_t seqId;\n    Buffer inputBuffer;\n    Buffer outputBuffer;\n    bool isLast;\n};\n\nclass BufferCompressor {\npublic:\n\n    BufferCompressor(int blockSizeIn100KB) : m_blockSize(blockSizeIn100KB) {}\n\n    BufferMsg operator()(BufferMsg buffer) const {\n        if (!buffer.isLast) {\n            unsigned int outSize = buffer.outputBuffer.len;\n            BZ2_bzBuffToBuffCompress(buffer.outputBuffer.b, &outSize,\n                buffer.inputBuffer.b, buffer.inputBuffer.len,\n                m_blockSize, 0, 30);\n            buffer.outputBuffer.len = outSize;\n        }\n        return buffer;\n    }\n\nprivate:\n    int m_blockSize;\n};\n\nclass IOOperations {\npublic:\n\n    IOOperations(std::ifstream& inputStream, std::ofstream& outputStream, size_t chunkSize)\n        : m_inputStream(inputStream), m_outputStream(outputStream), m_chunkSize(chunkSize), m_chunksRead(0) {}\n\n    void readChunk(Buffer& buffer) {\n        m_inputStream.read(buffer.b, m_chunkSize);\n        buffer.len = static_cast<size_t>(m_inputStream.gcount());\n        m_chunksRead++;\n    }\n\n    void writeChunk(const Buffer& buffer) {\n        m_outputStream.write(buffer.b, buffer.len);\n    }\n\n    size_t chunksRead() const {\n        return m_chunksRead;\n    }\n\n    size_t chunkSize() const {\n        return m_chunkSize;\n    }\n\n    bool hasDataToRead() const {\n        return m_inputStream.is_open() && !m_inputStream.eof();\n    }\n\nprivate:\n\n    std::ifstream& m_inputStream;\n    std::ofstream& m_outputStream;\n\n    size_t m_chunkSize;\n    size_t m_chunksRead;\n};\n\n//-----------------------------------------------------------------------------------------------------------------------\n//---------------------------------------Compression example based on async_node-----------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\ntypedef tbb::flow::async_node< tbb::flow::continue_msg, BufferMsg > async_file_reader_node;\ntypedef tbb::flow::async_node< BufferMsg, tbb::flow::continue_msg > async_file_writer_node;\n\nclass AsyncNodeActivity {\npublic:\n\n    AsyncNodeActivity(IOOperations& io)\n        : m_io(io), m_fileWriterThread(&AsyncNodeActivity::writingLoop, this) {}\n\n    ~AsyncNodeActivity() {\n        m_fileReaderThread.join();\n        m_fileWriterThread.join();\n    }\n\n    void submitRead(async_file_reader_node::gateway_type& gateway) {\n        gateway.reserve_wait();\n        std::thread(&AsyncNodeActivity::readingLoop, this, std::ref(gateway)).swap(m_fileReaderThread);\n    }\n\n    void submitWrite(const BufferMsg& bufferMsg) {\n        m_writeQueue.push(bufferMsg);\n    }\n\nprivate:\n\n    void readingLoop(async_file_reader_node::gateway_type& gateway) {\n        while (m_io.hasDataToRead()) {\n            BufferMsg bufferMsg = BufferMsg::createBufferMsg(m_io.chunksRead(), m_io.chunkSize());\n            m_io.readChunk(bufferMsg.inputBuffer);\n            gateway.try_put(bufferMsg);\n        }\n        sendLastMessage(gateway);\n        gateway.release_wait();\n    }\n\n    void writingLoop() {\n        BufferMsg buffer;\n        m_writeQueue.pop(buffer);\n        while (!buffer.isLast) {\n            m_io.writeChunk(buffer.outputBuffer);\n            m_writeQueue.pop(buffer);\n        }\n    }\n\n    void sendLastMessage(async_file_reader_node::gateway_type& gateway) {\n        BufferMsg lastMsg;\n        lastMsg.markLast(m_io.chunksRead());\n        gateway.try_put(lastMsg);\n    }\n\n    IOOperations& m_io;\n\n    tbb::concurrent_bounded_queue< BufferMsg > m_writeQueue;\n\n    std::thread m_fileReaderThread;\n    std::thread m_fileWriterThread;\n};\n\nvoid fgCompressionAsyncNode(IOOperations& io, int blockSizeIn100KB) {\n    tbb::flow::graph g;\n\n    AsyncNodeActivity asyncNodeActivity(io);\n\n    async_file_reader_node file_reader(g, tbb::flow::unlimited, [&asyncNodeActivity](const tbb::flow::continue_msg& msg, async_file_reader_node::gateway_type& gateway) {\n        asyncNodeActivity.submitRead(gateway);\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg)->size_t {\n        return bufferMsg.seqId;\n    });\n\n    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node\n    async_file_writer_node output_writer(g, tbb::flow::serial, [&asyncNodeActivity](const BufferMsg& bufferMsg, async_file_writer_node::gateway_type& gateway) {\n        asyncNodeActivity.submitWrite(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n\n    file_reader.try_put(tbb::flow::continue_msg());\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n//------------------------------------------Compression example based on async_msg---------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\ntypedef tbb::flow::async_msg< BufferMsg > async_msg_type;\n\nclass AsyncMsgActivity {\npublic:\n\n    AsyncMsgActivity(tbb::flow::graph& g, IOOperations& io)\n        : m_io(io), m_graph(g), m_fileReaderThread(&AsyncMsgActivity::readingLoop, this),\n          m_fileWriterThread(&AsyncMsgActivity::writingLoop, this)\n    {\n        // Graph synchronization starts here and ends\n        // when the last buffer was written in \"writing thread\"\n        m_graph.increment_wait_count();\n    }\n\n    ~AsyncMsgActivity() {\n        m_fileReaderThread.join();\n        m_fileWriterThread.join();\n\n        // Lets release resources that async\n        // activity and graph were acquired\n        freeBuffers();\n    }\n\n    async_msg_type submitRead(BufferMsg& bufferMsg) {\n        async_msg_type msg;\n        work_type readWork = { bufferMsg, msg };\n        m_readQueue.push(readWork);\n        return msg;\n    }\n\n    async_msg_type submitWrite(const BufferMsg& bufferMsg) {\n        async_msg_type msg;\n        work_type writeWork = { bufferMsg, msg };\n        m_writeQueue.push(writeWork);\n        return msg;\n    }\n\nprivate:\n\n    struct work_type {\n        BufferMsg bufferMsg;\n        async_msg_type msg;\n    };\n\n    void readingLoop() {\n        work_type readWork;\n        m_readQueue.pop(readWork);\n\n        // Reading thread waits for buffers to be received\n        // (the graph reuses limitted number of buffers)\n        // and reads the file while there is something to read\n        while (m_io.hasDataToRead()) {\n            readWork.bufferMsg.seqId = m_io.chunksRead();\n            m_io.readChunk(readWork.bufferMsg.inputBuffer);\n            readWork.msg.set(readWork.bufferMsg);\n            m_readQueue.pop(readWork);\n        }\n\n        // Pass message with an end flag to the graph\n        sendLastMessage(readWork);\n    }\n\n    void sendLastMessage(work_type& work) {\n        work.bufferMsg.markLast(m_io.chunksRead());\n        work.msg.set(work.bufferMsg);\n    }\n\n    void writingLoop() {\n        work_type writeWork;\n        m_writeQueue.pop(writeWork);\n\n        // Writing thread writes all buffers that it gets\n        // and reuses them. At the end all reusing buffers\n        // is stored in read queue\n        while (!writeWork.bufferMsg.isLast) {\n            m_io.writeChunk(writeWork.bufferMsg.outputBuffer);\n            writeWork.msg.set(writeWork.bufferMsg);\n            m_writeQueue.pop(writeWork);\n        }\n\n        // Store last message to the reading queue to free resources later\n        writeWork.msg.set(writeWork.bufferMsg);\n\n        // After all buffers have been written\n        // the synchronization ends\n        m_graph.decrement_wait_count();\n    }\n\n    void freeBuffers() {\n        int buffersNumber = m_readQueue.size();\n        for (int i = 0; i < buffersNumber; i++) {\n            work_type workToDelete;\n            m_readQueue.pop(workToDelete);\n            BufferMsg::destroyBufferMsg(workToDelete.bufferMsg);\n        }\n    }\n\n    IOOperations& m_io;\n\n    tbb::flow::graph& m_graph;\n\n    tbb::concurrent_bounded_queue< work_type > m_writeQueue;\n    tbb::concurrent_bounded_queue< work_type > m_readQueue;\n\n    std::thread m_fileReaderThread;\n    std::thread m_fileWriterThread;\n};\n\nvoid fgCompressionAsyncMsg(IOOperations& io, int blockSizeIn100KB, size_t memoryLimitIn1MB) {\n    // Memory limit sets the number of buffers that can be reused\n    int buffersNumber = memoryLimitIn1MB * 1000 * 1024 / io.chunkSize();\n\n    tbb::flow::graph g;\n\n    AsyncMsgActivity asyncMsgActivity(g, io);\n\n    tbb::flow::function_node< BufferMsg, async_msg_type > file_reader(g, tbb::flow::unlimited, [&asyncMsgActivity](BufferMsg bufferMsg) -> async_msg_type {\n        return asyncMsgActivity.submitRead(bufferMsg);\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg) -> size_t {\n        return bufferMsg.seqId;\n    });\n\n    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node\n    tbb::flow::function_node< BufferMsg, async_msg_type > output_writer(g, tbb::flow::serial, [&asyncMsgActivity](const BufferMsg& bufferMsg) -> async_msg_type {\n        return asyncMsgActivity.submitWrite(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n    make_edge(output_writer, file_reader);\n\n    // Creating buffers to be reused in read/compress/write graph loop\n    for (int i = 0; i < buffersNumber; i++) {\n        BufferMsg reuseBufferMsg = BufferMsg::createBufferMsg(0, io.chunkSize());\n        file_reader.try_put(reuseBufferMsg);\n    }\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n//---------------------------------------------Simple compression example------------------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\nvoid fgCompression(IOOperations& io, int blockSizeIn100KB) {\n    tbb::flow::graph g;\n\n    tbb::flow::source_node< BufferMsg > file_reader(g, [&io](BufferMsg& bufferMsg)->bool {\n        if (io.hasDataToRead()) {\n            bufferMsg = BufferMsg::createBufferMsg(io.chunksRead(), io.chunkSize());\n            io.readChunk(bufferMsg.inputBuffer);\n            return true;\n        }\n        return false;\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& buffer)->size_t {\n        return buffer.seqId;\n    });\n\n    tbb::flow::function_node< BufferMsg > output_writer(g, tbb::flow::serial, [&io](const BufferMsg& bufferMsg) {\n        io.writeChunk(bufferMsg.outputBuffer);\n        BufferMsg::destroyBufferMsg(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n\nbool endsWith(const std::string& str, const std::string& suffix) {\n    return str.find(suffix, str.length() - suffix.length()) != std::string::npos;\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n\nint main(int argc, char* argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        const std::string archiveExtension = \".bz2\";\n        bool verbose = false;\n        std::string asyncType;\n        std::string inputFileName;\n        int blockSizeIn100KB = 1; // block size in 100KB chunks\n        size_t memoryLimitIn1MB = 1; // memory limit for compression in megabytes granularity\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .arg(blockSizeIn100KB, \"-b\", \"\\t block size in 100KB chunks, [1 .. 9]\")\n            .arg(verbose, \"-v\", \"verbose mode\")\n            .arg(memoryLimitIn1MB, \"-l\", \"used memory limit for compression algorithm in 1MB (minimum) granularity\")\n            .arg(asyncType, \"-a\", \"name of the used graph async implementation - can be async_node or async_msg\")\n            .positional_arg(inputFileName, \"filename\", \"input file name\")\n        );\n\n        if (inputFileName.empty()) {\n            throw std::invalid_argument(\"Input file name is not specified. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (blockSizeIn100KB < 1 || blockSizeIn100KB > 9) {\n            throw std::invalid_argument(\"Incorrect block size. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (memoryLimitIn1MB < 1) {\n            throw std::invalid_argument(\"Incorrect memory limit size. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (verbose) std::cout << \"Input file name: \" << inputFileName << std::endl;\n        if (endsWith(inputFileName, archiveExtension)) {\n            throw std::invalid_argument(\"Input file already have \" + archiveExtension + \" extension.\");\n        }\n\n        std::ifstream inputStream(inputFileName.c_str(), std::ios::in | std::ios::binary);\n        if (!inputStream.is_open()) {\n            throw std::invalid_argument(\"Cannot open \" + inputFileName + \" file.\");\n        }\n\n        std::string outputFileName(inputFileName + archiveExtension);\n\n        std::ofstream outputStream(outputFileName.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);\n        if (!outputStream.is_open()) {\n            throw std::invalid_argument(\"Cannot open \" + outputFileName + \" file.\");\n        }\n\n        // General interface to work with I/O buffers operations\n        size_t chunkSize = blockSizeIn100KB * 100 * 1024;\n        IOOperations io(inputStream, outputStream, chunkSize);\n\n        if (asyncType.empty()) {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm.\" << std::endl;\n            fgCompression(io, blockSizeIn100KB);\n        } else if (asyncType == \"async_node\") {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm with async_node based asynchronious IO operations.\" << std::endl;\n            fgCompressionAsyncNode(io, blockSizeIn100KB);\n        } else if (asyncType == \"async_msg\") {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm with async_msg based asynchronious IO operations. Using limited memory: \" << memoryLimitIn1MB << \"MB.\" << std::endl;\n            fgCompressionAsyncMsg(io, blockSizeIn100KB, memoryLimitIn1MB);\n        }\n\n        inputStream.close();\n        outputStream.close();\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred. Error text is : \\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_ASYNC_NODE && __TBB_CPP11_LAMBDAS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/huffman.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Huffman coding low-level stuff                        ---*/\n/*---                                           huffman.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------------*/\n#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)\n#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)\n#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))\n\n#define ADDWEIGHTS(zw1,zw2)                           \\\n   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \\\n   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))\n\n#define UPHEAP(z)                                     \\\n{                                                     \\\n   Int32 zz, tmp;                                     \\\n   zz = z; tmp = heap[zz];                            \\\n   while (weight[tmp] < weight[heap[zz >> 1]]) {      \\\n      heap[zz] = heap[zz >> 1];                       \\\n      zz >>= 1;                                       \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n#define DOWNHEAP(z)                                   \\\n{                                                     \\\n   Int32 zz, yy, tmp;                                 \\\n   zz = z; tmp = heap[zz];                            \\\n   while (True) {                                     \\\n      yy = zz << 1;                                   \\\n      if (yy > nHeap) break;                          \\\n      if (yy < nHeap &&                               \\\n          weight[heap[yy+1]] < weight[heap[yy]])      \\\n         yy++;                                        \\\n      if (weight[tmp] < weight[heap[yy]]) break;      \\\n      heap[zz] = heap[yy];                            \\\n      zz = yy;                                        \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbMakeCodeLengths ( UChar *len, \n                             Int32 *freq,\n                             Int32 alphaSize,\n                             Int32 maxLen )\n{\n   /*--\n      Nodes and heap entries run from 1.  Entry 0\n      for both the heap and nodes is a sentinel.\n   --*/\n   Int32 nNodes, nHeap, n1, n2, i, j, k;\n   Bool  tooLong;\n\n   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];\n   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];\n   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; \n\n   for (i = 0; i < alphaSize; i++)\n      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;\n\n   while (True) {\n\n      nNodes = alphaSize;\n      nHeap = 0;\n\n      heap[0] = 0;\n      weight[0] = 0;\n      parent[0] = -2;\n\n      for (i = 1; i <= alphaSize; i++) {\n         parent[i] = -1;\n         nHeap++;\n         heap[nHeap] = i;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );\n   \n      while (nHeap > 1) {\n         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         nNodes++;\n         parent[n1] = parent[n2] = nNodes;\n         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);\n         parent[nNodes] = -1;\n         nHeap++;\n         heap[nHeap] = nNodes;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );\n\n      tooLong = False;\n      for (i = 1; i <= alphaSize; i++) {\n         j = 0;\n         k = i;\n         while (parent[k] >= 0) { k = parent[k]; j++; }\n         len[i-1] = j;\n         if (j > maxLen) tooLong = True;\n      }\n      \n      if (! tooLong) break;\n\n      /* 17 Oct 04: keep-going condition for the following loop used\n         to be 'i < alphaSize', which missed the last element,\n         theoretically leading to the possibility of the compressor\n         looping.  However, this count-scaling step is only needed if\n         one of the generated Huffman code words is longer than\n         maxLen, which up to and including version 1.0.2 was 20 bits,\n         which is extremely unlikely.  In version 1.0.3 maxLen was\n         changed to 17 bits, which has minimal effect on compression\n         ratio, but does mean this scaling step is used from time to\n         time, enough to verify that it works.\n\n         This means that bzip2-1.0.3 and later will only produce\n         Huffman codes with a maximum length of 17 bits.  However, in\n         order to preserve backwards compatibility with bitstreams\n         produced by versions pre-1.0.3, the decompressor must still\n         handle lengths of up to 20. */\n\n      for (i = 1; i <= alphaSize; i++) {\n         j = weight[i] >> 8;\n         j = 1 + (j / 2);\n         weight[i] = j << 8;\n      }\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbAssignCodes ( Int32 *code,\n                         UChar *length,\n                         Int32 minLen,\n                         Int32 maxLen,\n                         Int32 alphaSize )\n{\n   Int32 n, vec, i;\n\n   vec = 0;\n   for (n = minLen; n <= maxLen; n++) {\n      for (i = 0; i < alphaSize; i++)\n         if (length[i] == n) { code[i] = vec; vec++; };\n      vec <<= 1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbCreateDecodeTables ( Int32 *limit,\n                                Int32 *base,\n                                Int32 *perm,\n                                UChar *length,\n                                Int32 minLen,\n                                Int32 maxLen,\n                                Int32 alphaSize )\n{\n   Int32 pp, i, j, vec;\n\n   pp = 0;\n   for (i = minLen; i <= maxLen; i++)\n      for (j = 0; j < alphaSize; j++)\n         if (length[j] == i) { perm[pp] = j; pp++; };\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;\n   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;\n\n   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;\n   vec = 0;\n\n   for (i = minLen; i <= maxLen; i++) {\n      vec += (base[i+1] - base[i]);\n      limit[i] = vec-1;\n      vec <<= 1;\n   }\n   for (i = minLen + 1; i <= maxLen; i++)\n      base[i] = ((limit[i-1] + 1) << 1) - base[i];\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                         huffman.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/msvs/fgbzip2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"fgbzip2\", \"fgbzip2.vcxproj\", \"{C931C7A2-074E-4150-9E7A-39A03250411E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>fgbzip2</ProjectName>\n    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>\n    <RootNamespace>fgbzip2</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Cpp0xSupport>true</Cpp0xSupport>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Cpp0xSupport>true</Cpp0xSupport>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>REM call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Cpp0xSupport>true</Cpp0xSupport>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Cpp0xSupport>true</Cpp0xSupport>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\blocksort.cpp\" />\n    <ClCompile Include=\"..\\bzlib.cpp\" />\n    <ClCompile Include=\"..\\compress.cpp\" />\n    <ClCompile Include=\"..\\crctable.cpp\" />\n    <ClCompile Include=\"..\\decompress.cpp\" />\n    <ClCompile Include=\"..\\fgbzip2.cpp\" />\n    <ClCompile Include=\"..\\huffman.cpp\" />\n    <ClCompile Include=\"..\\randtable.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\bzlib.h\" />\n    <ClInclude Include=\"..\\bzlib_private.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/randtable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Table for randomising repetitive blocks               ---*/\n/*---                                         randtable.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------*/\nInt32 BZ2_rNums[512] = { \n   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, \n   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, \n   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, \n   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, \n   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, \n   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, \n   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, \n   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, \n   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, \n   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, \n   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, \n   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, \n   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, \n   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, \n   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, \n   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, \n   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, \n   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, \n   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, \n   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, \n   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, \n   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, \n   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, \n   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, \n   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, \n   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, \n   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, \n   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, \n   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, \n   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, \n   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, \n   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, \n   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, \n   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, \n   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, \n   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, \n   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, \n   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, \n   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, \n   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, \n   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, \n   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, \n   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, \n   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, \n   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, \n   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, \n   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, \n   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, \n   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, \n   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, \n   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, \n   936, 638\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       randtable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. fgbzip2 sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>fgbzip2 sample</h1>\n\t</div>\n\n\t<p>\n\t\tfgbzip2 is a parallel implementation of bzip2 block-sorting file compressor that uses tbb::flow.\n\t\tThe output of this application is fully compatible with bzip2 v1.0.6 or newer.\n\t<br><br>\n\t<i>\n\t\tThis example includes software developed by Julian R Seward. See\n\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t</i>\n\t<br>\n\t\tIt exemplifies support for asynchronous capabilities in the flow graph API, in particular async_node and async_msg.\n\t<br><br>\n\t\tThis example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fgbzip2.cpp\">fgbzip2.cpp</a>\n\t\t\t\t<dd>Flow Graph implementation of bzip2 compressor.\n\t\t\t\t<dt><a href=\"blocksort.cpp\">blocksort.cpp</a>\n\t\t\t\t<dd>Block sorting machinery of libbzip2.\n\t\t\t\t<dt><a href=\"bzlib.cpp\">bzlib.cpp</a>\n\t\t\t\t<dd>libbzip2 top-level functions.\n\t\t\t\t<dt><a href=\"bzlib.h\">bzlib.h</a>\n\t\t\t\t<dd>Public header file for the libbzip2.\n\t\t\t\t<dt><a href=\"bzlib_private.h\">bzlib_private.h</a>\n\t\t\t\t<dd>Private header file for the libbzip2.\n\t\t\t\t<dt><a href=\"compress.cpp\">compress.cpp</a>\n\t\t\t\t<dd>Compression machinery of libbzip2.\n\t\t\t\t<dt><a href=\"crctable.cpp\">crctable.cpp</a>\n\t\t\t\t<dd>libbzip2 table for doing CRCs.\n\t\t\t\t<dt><a href=\"decompress.cpp\">decompress.cpp</a>\n\t\t\t\t<dd>Decompression machinery of libbzip2.\n\t\t\t\t<dt><a href=\"huffman.cpp\">huffman.cpp</a>\n\t\t\t\t<dd>Huffman coding low-level stuff of libbzip2.\n\t\t\t\t<dt><a href=\"randtable.cpp\">randtable.cpp</a>\n\t\t\t\t<dd>libbzip2 table for randomising repetitive blocks.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fgbzip2 <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>fgbzip2 [<i>-b</i>=value] [<i>-v</i>] [<i>-l</i>=value] [<i>-a</i>=value] [<i>filename</i>]</tt>\n\t\t\t\t<dd><i>-b</i> block size in 100 Kb chunks, [1 .. 9]<br>\n\t\t\t\t\t<i>-v</i> print diagnostic output to screen<br>\n\t\t\t\t\t<i>-l</i> used memory limit for compression algorithm with 1MB (minimum) granularity<br>\n\t\t\t\t\t<i>-a</i> name of the used graph async realization - can be async_node or async_msg<br>\n\t\t\t\t\t<i>filename</i> name of the file to compress<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size, e.g., <tt>fgbzip2&nbsp;-b=1&nbsp;-a&nbsp;fgbzip2</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tThe \"libbzip2\" sources for this example is\n\t\t\t\tCopyright (c) 1996-2010 Julian R Seward.\n\t\t\t\tAll rights reserved.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tRedistribution and use in source and binary forms, with or without\n\t\t\t\tmodification, are permitted provided that the following conditions\n\t\t\t\tare met:\n\t\t\t\t<ol>\n\t\t\t\t\t<li>Redistributions of source code must retain the above copyright\n\t\t\t\t\t   notice, this list of conditions and the following disclaimer.\n\t\t\t\t\t<li>The origin of this software must not be misrepresented; you must\n\t\t\t\t\t   not claim that you wrote the original software.  If you use this\n\t\t\t\t\t   software in a product, an acknowledgment in the product\n\t\t\t\t\t   documentation would be appreciated but is not required.\n\t\t\t\t\t<li>Altered source versions must be plainly marked as such, and must\n\t\t\t\t\t   not be misrepresented as being the original software.\n\t\t\t\t\t<li>The name of the author may not be used to endorse or promote\n\t\t\t\t\t   products derived from this software without specific prior written\n\t\t\t\t\t   permission.\n\t\t\t\t</ol>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\t\t\t\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n\t\t\t\tINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n\t\t\t\tWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\t\t\t\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\t\t\t\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* fgbzip2.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tEAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D931B443FB000A83D1A /* blocksort.cpp */; };\n\t\tEAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D961B443FB000A83D1A /* bzlib.cpp */; };\n\t\tEAA00DB51B443FB000A83D1A /* compress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D991B443FB000A83D1A /* compress.cpp */; };\n\t\tEAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9B1B443FB000A83D1A /* crctable.cpp */; };\n\t\tEAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9D1B443FB000A83D1A /* decompress.cpp */; };\n\t\tEAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DA11B443FB000A83D1A /* huffman.cpp */; };\n\t\tEAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DAB1B443FB000A83D1A /* randtable.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* fgbzip2 */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = fgbzip2; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* fgbzip2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fgbzip2.cpp; path = ../fgbzip2.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n\t\tEAA00D931B443FB000A83D1A /* blocksort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blocksort.cpp; path = ../blocksort.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00D951B443FB000A83D1A /* bzlib_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib_private.h; path = ../bzlib_private.h; sourceTree = \"<group>\"; };\n\t\tEAA00D961B443FB000A83D1A /* bzlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bzlib.cpp; path = ../bzlib.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00D971B443FB000A83D1A /* bzlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib.h; path = ../bzlib.h; sourceTree = \"<group>\"; };\n\t\tEAA00D991B443FB000A83D1A /* compress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compress.cpp; path = ../compress.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00D9B1B443FB000A83D1A /* crctable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crctable.cpp; path = ../crctable.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00D9D1B443FB000A83D1A /* decompress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = decompress.cpp; path = ../decompress.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00DA11B443FB000A83D1A /* huffman.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = huffman.cpp; path = ../huffman.cpp; sourceTree = \"<group>\"; };\n\t\tEAA00DAB1B443FB000A83D1A /* randtable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = randtable.cpp; path = ../randtable.cpp; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* fgbzip2 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = fgbzip2;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAA00D931B443FB000A83D1A /* blocksort.cpp */,\n\t\t\t\tEAA00D951B443FB000A83D1A /* bzlib_private.h */,\n\t\t\t\tEAA00D961B443FB000A83D1A /* bzlib.cpp */,\n\t\t\t\tEAA00D971B443FB000A83D1A /* bzlib.h */,\n\t\t\t\tEAA00D991B443FB000A83D1A /* compress.cpp */,\n\t\t\t\tEAA00D9B1B443FB000A83D1A /* crctable.cpp */,\n\t\t\t\tEAA00D9D1B443FB000A83D1A /* decompress.cpp */,\n\t\t\t\tEAA00DA11B443FB000A83D1A /* huffman.cpp */,\n\t\t\t\tEAA00DAB1B443FB000A83D1A /* randtable.cpp */,\n\t\t\t\tA1F593A50B8F042A00073279 /* fgbzip2.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* fgbzip2 */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* fgbzip2 */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"fgbzip2\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = fgbzip2;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = fgbzip2;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* fgbzip2 */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0610;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"fgbzip2\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* fgbzip2 */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* fgbzip2 */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */,\n\t\t\t\tEAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */,\n\t\t\t\tEAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */,\n\t\t\t\tEAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */,\n\t\t\t\tA1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */,\n\t\t\t\tEAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */,\n\t\t\t\tEAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */,\n\t\t\t\tEAA00DB51B443FB000A83D1A /* compress.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = fgbzip2;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = fgbzip2;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++0x\";\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++0x\";\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"fgbzip2\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"fgbzip2\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks (Intel&reg; TBB). Samples on Intel&reg; TBB Flow Graph feature</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks (Intel&reg; TBB).<br>Samples on Intel&reg; TBB Flow Graph feature</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the Intel TBB Flow Graph feature.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"dining_philosophers/readme.html\">dining_philosophers</a>\n\t\t\t\t<dd>An implementation of dining philosophers in graph using the reserving join node.\n\t\t\t\t<dt><a href=\"binpack/readme.html\">binpack</a>\n\t\t\t\t<dd>A solution to the binpacking problem using a <code>queue_node</code>, a <code>buffer_node</code> and <code>function_nodes</code>.\n\t\t\t\t<dt><a href=\"logic_sim/readme.html\">logic_sim</a>\n\t\t\t\t<dd>A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits.\n\t\t\t\t<dt><a href=\"som/readme.html\">som</a>\n\t\t\t\t<dd>A simple example of a Kohonen Self-Organizing Map using cancellation.\n\t\t\t\t<dt><a href=\"fgbzip2/readme.html\">fgbzip2</a>\n\t\t\t\t<dd>A parallel implementation of bzip2 block-sorting file compressor.\n\t\t\t\t<dt><a href=\"cholesky/readme.html\">cholesky</a>\n\t\t\t\t<dd>Several versions of Cholesky Factorization algorithm implementation.\n\t\t\t\t<dt><a href=\"stereo/readme.html\">stereo</a>\n\t\t\t\t<dd>An implementation of stereo image creation from two images (anaglyph effect).\n\t\t\t\t<dt><a href=\"matmult/readme.html\">matmult</a>\n\t\t\t\t<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/D_latch.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_dlatch_H\n#define __TBBexample_graph_logicsim_dlatch_H 1\n\n#include \"basics.h\"\n\nclass D_latch : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > {\n    broadcast_node<signal_t> D_port;\n    broadcast_node<signal_t> E_port;\n    not_gate a_not;\n    and_gate<2> first_and;\n    and_gate<2> second_and;\n    nor_gate<2> first_nor;\n    nor_gate<2> second_nor;\n    graph& my_graph;\n    typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > base_type;\n\n public:\n    D_latch(graph& g) : base_type(g), my_graph(g), D_port(g), E_port(g), a_not(g), first_and(g), second_and(g), \n                        first_nor(g), second_nor(g) \n    {\n        make_edge(D_port, input_port<0>(a_not));\n        make_edge(D_port, input_port<1>(second_and));\n        make_edge(E_port, input_port<1>(first_and));\n        make_edge(E_port, input_port<0>(second_and));\n        make_edge(a_not, input_port<0>(first_and));\n        make_edge(first_and, input_port<0>(first_nor));\n        make_edge(second_and, input_port<1>(second_nor));\n        make_edge(first_nor, input_port<0>(second_nor));\n        make_edge(second_nor, input_port<1>(first_nor));\n \n        base_type::input_ports_type input_tuple(D_port, E_port);\n        base_type::output_ports_type output_tuple(output_port<0>(first_nor), output_port<0>(second_nor)); \n\n        base_type::set_external_ports(input_tuple, output_tuple); \n        base_type::add_visible_nodes(D_port, E_port, a_not, first_and, second_and, first_nor, second_nor);\n    }\n    ~D_latch() {}\n};\n\n#endif /* __TBBexample_graph_logicsim_dlatch_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=test_all\nARGS=4\nPERF_RUN_ARGS=auto silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # which icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb $(LIBS) \n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb_debug $(LIBS) \nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\nPROG=test_all\nARGS=4\nPERF_RUN_ARGS=auto silent\n\n# Try to find icl.exe\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) $(PROG).cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\ndebug: *.cpp\n\t$(CXX) $(PROG).cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\n\ntest:\n\t$(PROG) $(ARGS)\n\ncompiler_check:\n\t@$(CXX) >nul 2>&1 || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/basics.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_basics_H\n#define __TBBexample_graph_logicsim_basics_H 1\n\n#include <cstdio>\n#include <string>\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"../../common/utility/utility.h\"\n\n#ifndef _WIN32\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\n#include <windows.h>\n\nvoid rt_sleep(int msec) {\n    Sleep(msec);\n}\n#endif  /*  _WIN32  */\n\nusing namespace std;\nusing namespace tbb;\nusing namespace tbb::flow;\n\ntypedef enum { low=0, high, undefined } signal_t;\n\ntemplate<int N> class gate;\n\ntemplate<>\nclass gate<1> : public composite_node< tuple< signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<2> : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t,signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<3> : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t, signal_t, signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<4> : public composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t, signal_t, signal_t, signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports), input_port<3>(in_ports)); \n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\n// Input devices\nclass steady_signal {\n    graph& my_graph;\n    signal_t init_signal;\n    write_once_node<signal_t> signal_node;\n public:\n    steady_signal(graph& g, signal_t v) :\n        my_graph(g), init_signal(v), signal_node(g) {}\n    steady_signal(const steady_signal& src) : \n        my_graph(src.my_graph), init_signal(src.init_signal), \n        signal_node(src.my_graph) {}\n    ~steady_signal() {}\n    // Assignment is ignored\n    steady_signal& operator=(const steady_signal& src) { return *this; }\n    sender<signal_t>& get_out() { return signal_node; }\n    void activate() { signal_node.try_put(init_signal); }\n};\n\nclass pulse {\n    class clock_body {\n        size_t& ms;\n        int& reps;\n        signal_t val;\n    public:\n        clock_body(size_t& _ms, int& _reps) : ms(_ms), reps(_reps), val(low) {}\n        bool operator()(signal_t& out) {\n            rt_sleep((int)ms);\n            if (reps>0) --reps;\n            if (val==low) val = high;\n            else val = low;\n            out = val;\n            return reps>0 || reps == -1;\n        }\n    };\n    graph& my_graph;\n    size_t ms, init_ms;\n    int reps, init_reps;\n    source_node<signal_t> clock_node;\n\npublic:\n    pulse(graph& g, size_t _ms=1000, int _reps=-1) : \n        my_graph(g), ms(_ms), init_ms(_ms), reps(_reps), init_reps(_reps),\n        clock_node(g, clock_body(ms, reps), false)\n    {}\n    pulse(const pulse& src) : \n        my_graph(src.my_graph), ms(src.init_ms), init_ms(src.init_ms),\n        reps(src.init_reps), init_reps(src.init_reps), \n        clock_node(src.my_graph, clock_body(ms, reps), false)\n    {}\n    ~pulse() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph\n    pulse& operator=(const pulse& src) {\n        ms = src.ms; init_ms = src.init_ms; reps = src.reps; init_reps = src.init_reps;\n        return *this; \n    }\n    sender<signal_t>& get_out() { return clock_node; }\n    void activate() { clock_node.activate(); }\n    void reset() { reps = init_reps; }\n};\n\nclass push_button {\n    graph& my_graph;\n    overwrite_node<signal_t> push_button_node;\n public:\n    push_button(graph& g) : my_graph(g), push_button_node(g) { \n        push_button_node.try_put(low);\n    }\n    push_button(const push_button& src) : \n        my_graph(src.my_graph), push_button_node(src.my_graph) { \n        push_button_node.try_put(low);\n    }\n    ~push_button() {}\n    // Assignment is ignored\n    push_button& operator=(const push_button& src) { return *this; }\n    sender<signal_t>& get_out() { return push_button_node; }\n    void press() { push_button_node.try_put(high); }\n    void release() { push_button_node.try_put(low); }\n};\n\nclass toggle {\n    graph& my_graph;\n    signal_t state;\n    overwrite_node<signal_t> toggle_node;\n public:\n    toggle(graph& g) : my_graph(g), state(undefined), toggle_node(g) {}\n    toggle(const toggle& src) : my_graph(src.my_graph), state(undefined), \n                                toggle_node(src.my_graph) {}\n    ~toggle() {}\n    // Assignment ignored\n    toggle& operator=(const toggle& src) { return *this; }\n    sender<signal_t>& get_out() { return toggle_node; }\n    void flip() { \n        if (state==high) state = low; \n        else state = high;\n        toggle_node.try_put(state); \n    }\n    void activate() { \n        state = low;\n        toggle_node.try_put(state);\n    }\n};\n\n// Basic gates\nclass buffer : public gate<1> {\n    using gate<1>::my_graph;\n    typedef gate<1>::ports_type ports_type;\n    class buffer_body {\n        signal_t state;\n        bool touched;\n    public:\n        buffer_body() : state(undefined), touched(false) {}\n        void operator()(const input_port_t::output_type &v, ports_type& p) { \n            if (!touched || state != cast_to<signal_t>(v)) {\n                state = cast_to<signal_t>(v); \n                tbb::flow::get<0>(p).try_put(state); \n                touched = true;\n            }\n        }\n    };\npublic: \n    buffer(graph& g) : gate<1>(g, buffer_body()) {}\n    buffer(const buffer& src) : gate<1>(src.my_graph, buffer_body()) {}\n    ~buffer() {}\n};\n\nclass not_gate : public gate<1> {\n    using gate<1>::my_graph;\n    typedef gate<1>::ports_type ports_type;\n    class not_body {\n        signal_t port;\n        bool touched;\n    public:\n    not_body() : port(undefined), touched(false) {}\n        void operator()(const input_port_t::output_type &v, ports_type& p) {\n            if (!touched || port != cast_to<signal_t>(v)) {\n                port = cast_to<signal_t>(v); \n                signal_t state = low;\n                if (port==low) state = high; \n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public: \n    not_gate(graph& g) : gate<1>(g, not_body()) {}\n    not_gate(const not_gate& src) : gate<1>(src.my_graph, not_body()) {}\n    ~not_gate() {}\n};\n\ntemplate <int N>\nclass and_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t::output_type from_input;\n    class and_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        and_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const from_input& v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=high;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == low) { new_state = low; break; }\n                else if (ports[i] == undefined && new_state != low) { new_state = undefined; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    and_gate(graph& g) : gate<N>(g, and_body()) {}\n    and_gate(const and_gate<N>& src) : gate<N>(src.my_graph, and_body()) {}\n    ~and_gate() {}\n};\n\ntemplate<int N>\nclass or_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t::output_type from_input;\n    class or_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        or_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const from_input& v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == high) { new_state = high; break; }\n                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\npublic:\n    or_gate(graph& g) : gate<N>(g, or_body()) {}\n    or_gate(const or_gate& src) : gate<N>(src.my_graph, or_body()) {}\n    ~or_gate() {}\n};\n\ntemplate <int N>\nclass xor_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t input_port_t;\n    class xor_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        xor_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const typename input_port_t::output_type &v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0, highs=0;\n            while (i<N) {\n                if (ports[i] == undefined) { new_state = undefined; }  \n                else if (ports[i] == high && new_state == low) { new_state = high; ++highs; }\n                else if (ports[i] == high && highs > 0) { new_state = low; break; }\n                else if (ports[i] == high ) { ++highs; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    xor_gate(graph& g) : gate<N>(g, xor_body()) {}\n    xor_gate(const xor_gate& src) : gate<N>(src.my_graph, xor_body()) {}\n    ~xor_gate() {}\n};\n\ntemplate <int N>\nclass nor_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t input_port_t;\n    class nor_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        nor_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const typename input_port_t::output_type &v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == high) { new_state = high; break; }\n                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }\n                ++i;\n            }\n            if (new_state == high) new_state = low;\n            else if (new_state == low) new_state = high;\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    nor_gate(graph& g) : gate<N>(g, nor_body()) {}\n    nor_gate(const nor_gate& src) : gate<N>(src.my_graph, nor_body()) {}\n    ~nor_gate() {}\n};\n\n// Output devices\nclass led {\n    class led_body {\n        signal_t &state;\n        string &label;\n        bool report_changes;\n        bool touched;\n    public:\n        led_body(signal_t &s, string &l, bool r) :\n            state(s), label(l), report_changes(r), touched(false)\n        {}\n        continue_msg operator()(signal_t b) {\n            if (!touched || b!=state) {\n                state = b;\n                if (state != undefined && report_changes) {\n                    if (state) printf(\"%s: (*)\\n\", label.c_str());\n                    else printf(\"%s: ( )\\n\", label.c_str());\n                }\n                touched = false;\n            }\n            return continue_msg();\n        }\n    };\n    graph& my_graph;\n    string label;\n    signal_t state;\n    bool report_changes;\n    function_node<signal_t, continue_msg> led_node;\n public:\n    led(graph& g, string l, bool rc=false) : my_graph(g), label(l), state(undefined), \n                                             report_changes(rc), \n                                             led_node(g, 1, led_body(state, label, report_changes))\n    {}\n    led(const led& src) : my_graph(src.my_graph), label(src.label), state(undefined), \n                          report_changes(src.report_changes), \n                          led_node(src.my_graph, 1, led_body(state, label, report_changes)) \n    {}\n    ~led() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph\n    // state is set to undefined so that next signal changes it\n    led& operator=(const led& src) { \n        label = src.label; state = undefined; report_changes = src.report_changes; \n        return *this;\n    }\n    receiver<signal_t>& get_in() { return led_node; }\n    void display() { \n        if (state == high) printf(\"%s: (*)\\n\", label.c_str());\n        else if (state == low) printf(\"%s: ( )\\n\", label.c_str());\n        else printf(\"%s: (u)\\n\", label.c_str());\n    }\n    signal_t get_value() { return state; }\n};\n\nclass digit : public gate<4> {\n    using gate<4>::my_graph;\n    typedef gate<4>::ports_type ports_type;\n    typedef gate<4>::input_port_t input_port_t;\n    class digit_body {\n        signal_t ports[4];\n        static const int N = 4;\n        unsigned int &state;\n        string &label;\n        bool& report_changes;\n    public:\n        digit_body(unsigned int &s, string &l, bool& r) : state(s), label(l), report_changes(r) {\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const input_port_t::output_type& v, ports_type& p) {\n            unsigned int new_state = 0;\n            ports[v.tag()] = cast_to<signal_t>(v);\n            if (ports[0] == high) ++new_state;\n            if (ports[1] == high) new_state += 2;\n            if (ports[2] == high) new_state += 4;\n            if (ports[3] == high) new_state += 8;\n            if (state != new_state) {\n                state = new_state;\n                if (report_changes) {\n                    printf(\"%s: %x\\n\", label.c_str(), state);\n                }\n            }\n        }\n    };\n    string label;\n    unsigned int state;\n    bool report_changes;\n public:\n    digit(graph& g, string l, bool rc=false) : \n        gate<4>(g, digit_body(state, label, report_changes)), \n        label(l), state(0), report_changes(rc) {}\n    digit(const digit& src) : \n        gate<4>(src.my_graph, digit_body(state, label, report_changes)), \n        label(src.label), state(0), report_changes(src.report_changes) {}\n    ~digit() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph.\n    // state is reset as in constructors\n    digit& operator=(const digit& src) { \n        label = src.label; state = 0; report_changes = src.report_changes; \n        return *this;\n    }\n    void display() { printf(\"%s: %x\\n\", label.c_str(), state); }\n    unsigned int get_value() { return state; }\n};\n\n#endif /* __TBBexample_graph_logicsim_basics_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/four_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_fba_H\n#define __TBBexample_graph_logicsim_fba_H 1\n\n#include \"one_bit_adder.h\"\n\ntypedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t >,\n                      tuple< signal_t, signal_t, signal_t, signal_t, signal_t > > fba_base_type;\n\nclass four_bit_adder : public fba_base_type {\n    graph& my_graph;\n    std::vector<one_bit_adder> four_adders; \n\npublic:\n    four_bit_adder(graph& g) : fba_base_type(g), my_graph(g), four_adders(4, one_bit_adder(g)) {\n        make_connections();\n        set_up_composite();\n    }\n    four_bit_adder(const four_bit_adder& src) : \n        fba_base_type(src.my_graph), my_graph(src.my_graph), four_adders(4, one_bit_adder(src.my_graph)) \n    {\n        make_connections();\n        set_up_composite();\n    }\n    ~four_bit_adder() {}\n\nprivate:\n    void make_connections() {\n        make_edge(output_port<1>(four_adders[0]), input_port<0>(four_adders[1]));\n        make_edge(output_port<1>(four_adders[1]), input_port<0>(four_adders[2]));\n        make_edge(output_port<1>(four_adders[2]), input_port<0>(four_adders[3]));\n    }\n    void set_up_composite() {\n\n        fba_base_type::input_ports_type input_tuple(input_port<0>(four_adders[0]/*CI*/), input_port<1>(four_adders[0]), input_port<2>(four_adders[0]), input_port<1>(four_adders[1]), input_port<2>(four_adders[1]), input_port<1>(four_adders[2]), input_port<2>(four_adders[2]), input_port<1>(four_adders[3]), input_port<2>(four_adders[3])); \n\n       fba_base_type::output_ports_type output_tuple(output_port<0>(four_adders[0]), output_port<0>(four_adders[1]), output_port<0>(four_adders[2]), output_port<0>(four_adders[3]),output_port<1>(four_adders[3]/*CO*/));\n\n        fba_base_type::set_external_ports(input_tuple, output_tuple);\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_fba_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/msvs/logic_sim.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"logic_sim\", \"logic_sim.vcxproj\", \"{6E9B1702-78E0-4D64-B771-8B274D963B58}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/msvs/logic_sim.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>logic_sim</ProjectName>\n    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>\n    <RootNamespace>test_all</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\test_all.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/one_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_oba_H\n#define __TBBexample_graph_logicsim_oba_H 1\n\nnamespace P {\n    //input ports \n    const int CI = 0;\n    const int A0 = 1;\n    const int B0 = 2;\n    const int A1 = 3;\n    const int B1 = 4;\n    const int A2 = 5;\n    const int B2 = 6;\n    const int A3 = 7;\n    const int B3 = 8;\n    \n    //output_ports\n    const int S0 = 0;\n    const int S1 = 1;\n    const int S2 = 2;\n    const int S3 = 3;\n\n#if USE_TWO_BIT_FULL_ADDER\n    const int CO = 2;\n#else   \n    const int CO = 4;\n#endif\n}\n\n#include \"basics.h\"\n\nclass one_bit_adder : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > {\n    broadcast_node<signal_t> A_port;\n    broadcast_node<signal_t> B_port;\n    broadcast_node<signal_t> CI_port;\n    xor_gate<2> FirstXOR;\n    xor_gate<2> SecondXOR;\n    and_gate<2> FirstAND;\n    and_gate<2> SecondAND;\n    or_gate<2> FirstOR;\n    graph& my_graph;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > base_type;\n\npublic:\n    one_bit_adder(graph& g) : base_type(g), my_graph(g), A_port(g), B_port(g), CI_port(g), FirstXOR(g), \n                              SecondXOR(g), FirstAND(g), SecondAND(g), FirstOR(g) {\n        make_connections();\n        set_up_composite();\n    }\n    one_bit_adder(const one_bit_adder& src) : \n        base_type(src.my_graph), my_graph(src.my_graph), A_port(src.my_graph), B_port(src.my_graph), \n        CI_port(src.my_graph), FirstXOR(src.my_graph), SecondXOR(src.my_graph), \n        FirstAND(src.my_graph), SecondAND(src.my_graph), FirstOR(src.my_graph) \n    {\n        make_connections();\n        set_up_composite();\n    }\n\n    ~one_bit_adder() {}\n\nprivate:\n    void make_connections() {\n  \n        make_edge(A_port, input_port<0>(FirstXOR));\n        make_edge(A_port, input_port<0>(FirstAND));\n        make_edge(B_port, input_port<1>(FirstXOR));\n        make_edge(B_port, input_port<1>(FirstAND));\n        make_edge(CI_port, input_port<1>(SecondXOR));\n        make_edge(CI_port, input_port<1>(SecondAND));\n        make_edge(FirstXOR, input_port<0>(SecondXOR));\n        make_edge(FirstXOR, input_port<0>(SecondAND));\n        make_edge(SecondAND, input_port<0>(FirstOR));\n        make_edge(FirstAND, input_port<1>(FirstOR));\n    }\n\n    void set_up_composite() {\n        base_type::input_ports_type input_tuple(CI_port, A_port, B_port);\n        base_type::output_ports_type output_tuple(output_port<0>(SecondXOR), output_port<0>(FirstOR));\n        base_type::set_external_ports( input_tuple, output_tuple);\n        base_type::add_visible_nodes(A_port, B_port, CI_port, FirstXOR, SecondXOR, FirstAND, SecondAND, FirstOR );\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_oba_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. logic_sim sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Logic_sim sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple tbb::flow example that performs\n\t\tsimplistic digital logic simulations with basic logic gates that can\n\t\tbe easily composed to create more interesting circuits. It\n\t\texemplifies the multifunction_node and the indexer_node CPF, among others.\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"basics.h\">basics.h</a>\n\t\t\t\t<dd>Several I/O devices and basic gates.\n\t\t\t\t<dt><a href=\"one_bit_adder.h\">one_bit_adder.h</a>\n\t\t\t\t<dd>A one-bit full adder composed of basic gates.\n\t\t\t\t<dt><a href=\"four_bit_adder.h\">four_bit_adder.h</a>\n\t\t\t\t<dd>A four-bit full adder composed of one-bit adders.\n\t\t\t\t<dt><a href=\"D_latch.h\">D_latch.h</a>\n\t\t\t\t<dd>A D-latch composed of basic gates.\n\t\t\t\t<dt><a href=\"test_all.cpp\">test_all.cpp</a>\n\t\t\t\t<dd>A simple test program that exercises the code in the headers.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>test_all <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>test_all [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print diagnostic output to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads, e.g., <tt>test_all&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/test_all.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include <cstdio>\n\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#define USE_TWO_BIT_FULL_ADDER 1\n\n#include \"basics.h\"\n#include \"one_bit_adder.h\"\n#if USE_TWO_BIT_FULL_ADDER\n#include \"two_bit_adder.h\"\n#else\n#include \"four_bit_adder.h\"\n#endif\n#include \"D_latch.h\"\n#include <cassert>\n\n// User-specified globals with default values\nbool verbose = false;            // prints bin details and other diagnostics to screen\nbool silent = false;             // suppress all output except for time\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\nint main(int argc, char *argv[]) {\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n        );\n\n        if (silent) verbose = false;  // make silent override verbose\n\n        tick_count start = tick_count::now();\n        for(int p = threads.first; p <= threads.last; p = threads.step(p)) {\n            task_scheduler_init init(p);\n            if (!silent)  cout << \"graph test running on \" << p << \" threads.\\n\";\n            \n            graph g;\n\n            { // test buffer: 0, 1\n                buffer b(g);\n                toggle input(g);\n                led output(g, \"OUTPUT\", false); // false means we will explicitly call display to see LED\n                \n                make_edge(input.get_out(), input_port<0>(b));\n                make_edge(output_port<0>(b), output.get_in());\n                \n                if (!silent) printf(\"Testing buffer...\\n\");\n                input.activate(); // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input.flip(); // 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test not_gate: 0, 1\n                not_gate n(g);\n                toggle input(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input.get_out(), input_port<0>(n));\n                make_edge(output_port<0>(n), output.get_in());\n                \n                if (!silent) printf(\"Testing not_gate...\\n\");\n                input.activate(); // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input.flip(); // 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n            { // test two-input and_gate: 00, 01, 10, 11\n                and_gate<2> a(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(a));\n                make_edge(input1.get_out(), input_port<1>(a));\n                make_edge(output_port<0>(a), output.get_in());\n                \n                if (!silent) printf(\"Testing and_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input1.flip(); input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test three-input or_gate: 000, 001, 010, 100, 011, 101, 110, 111\n                or_gate<3> o(g);\n                toggle input0(g);\n                toggle input1(g);\n                toggle input2(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(o));\n                make_edge(input1.get_out(), input_port<1>(o));\n                make_edge(input2.get_out(), input_port<2>(o));\n                make_edge(output_port<0>(o), output.get_in());\n                \n                if (!silent) printf(\"Testing or_gate...\\n\");\n                input2.activate();  input1.activate();  input0.activate();  // 0 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip(); input0.flip();  // 0 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  // 1 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  input0.flip();  // 0 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  // 1 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip();  input0.flip();  // 1 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 1 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test two-input xor_gate: 00, 01, 10, 11\n                xor_gate<2> x(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(x));\n                make_edge(input1.get_out(), input_port<1>(x));\n                make_edge(output_port<0>(x), output.get_in());\n                \n                if (!silent) printf(\"Testing xor_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip();  input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n\n            { // test two-input nor_gate: 00, 01, 10, 11\n                nor_gate<2> n(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(n));\n                make_edge(input1.get_out(), input_port<1>(n));\n                make_edge(output_port<0>(n), output.get_in());\n                \n                if (!silent) printf(\"Testing nor_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input1.flip();  input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n            { // test steady_signal and digit\n                steady_signal input0(g, high);\n                steady_signal input1(g, low);\n                and_gate<2> a(g);\n                or_gate<2> o(g);\n                xor_gate<2> x(g);\n                nor_gate<2> n(g);\n                digit output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(a));\n                make_edge(input1.get_out(), input_port<1>(a));\n                make_edge(output_port<0>(a), input_port<0>(output));\n\n                make_edge(input0.get_out(), input_port<0>(o));\n                make_edge(input1.get_out(), input_port<1>(o));\n                make_edge(output_port<0>(o), input_port<1>(output));\n\n                make_edge(input0.get_out(), input_port<0>(x));\n                make_edge(input1.get_out(), input_port<1>(x));\n                make_edge(output_port<0>(x), input_port<2>(output));\n\n                make_edge(input0.get_out(), input_port<0>(n));\n                make_edge(input1.get_out(), input_port<1>(n));\n                make_edge(output_port<0>(n), input_port<3>(output));\n                \n                if (!silent) printf(\"Testing steady_signal...\\n\");\n                input0.activate();  // 1\n                input1.activate();  // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == 6);\n            }\n\n            { // test push_button\n                push_button p(g);\n                buffer b(g);\n                led output(g, \"OUTPUT\", !silent); // true means print all LED state changes\n\n                make_edge(p.get_out(), input_port<0>(b));\n                make_edge(output_port<0>(b), output.get_in());\n\n                if (!silent) printf(\"Testing push_button...\\n\");\n                p.press();\n                p.release();\n                p.press();\n                p.release();\n                g.wait_for_all();\n            }\n\n            { // test one_bit_adder\n                one_bit_adder my_adder(g);\n                toggle A(g);\n                toggle B(g);\n                toggle CarryIN(g);\n                led Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n                \n                make_edge(A.get_out(), input_port<P::A0>(my_adder));\n                make_edge(B.get_out(), input_port<P::B0>(my_adder));\n                make_edge(CarryIN.get_out(), input_port<P::CI>(my_adder));\n                make_edge(output_port<P::S0>(my_adder), Sum.get_in());\n                make_edge(output_port<1>(my_adder), CarryOUT.get_in());\n                \n                A.activate();\n                B.activate();\n                CarryIN.activate();\n                \n                if (!silent) printf(\"A on\\n\");\n                A.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A off\\n\");\n                A.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"B on\\n\");\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                if (!silent) printf(\"B off\\n\");\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"CarryIN on\\n\");\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                if (!silent) printf(\"CarryIN off\\n\");\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&B on\\n\");\n                A.flip();\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&B off\\n\");\n                A.flip();\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&CarryIN on\\n\");\n                A.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&CarryIN off\\n\");\n                A.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"B&CarryIN on\\n\");\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"B&CarryIN off\\n\");\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&B&CarryIN on\\n\");\n                A.flip();\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&B&CarryIN off\\n\");\n                A.flip();\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n            }\n\n#if USE_TWO_BIT_FULL_ADDER\n            { // test two_bit_adder\n                if (!silent) printf(\"testing two_bit adder\\n\");\n                two_bit_adder two_adder(g);\n                std::vector<toggle> A(2, toggle(g));\n                std::vector<toggle> B(2, toggle(g));\n                toggle CarryIN(g);\n                digit Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n\n                make_edge(A[0].get_out(), input_port<P::A0>(two_adder));\n                make_edge(B[0].get_out(), input_port<P::B0>(two_adder));\n                make_edge(output_port<P::S0>(two_adder), input_port<0>(Sum));\n\n                make_edge(A[1].get_out(), input_port<P::A1>(two_adder));\n                make_edge(B[1].get_out(), input_port<P::B1>(two_adder)); \n                make_edge(output_port<P::S1>(two_adder), input_port<1>(Sum));\n\n                make_edge(CarryIN.get_out(), input_port<P::CI>(two_adder));\n                make_edge(output_port<P::CO>(two_adder), CarryOUT.get_in());\n\n                // Activate all switches at low state\n                for (int i=0; i<2; ++i) {\n                    A[i].activate();\n                    B[i].activate();\n                }\n                CarryIN.activate();\n\n                if (!silent) printf(\"1+0\\n\");\n                A[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n\n                if (!silent) printf(\"0+1\\n\");\n                A[0].flip();\n                B[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n            }\n#else\n            { // test four_bit_adder\n                four_bit_adder four_adder(g);\n                std::vector<toggle> A(4, toggle(g));\n                std::vector<toggle> B(4, toggle(g));\n                toggle CarryIN(g);\n                digit Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n\n                    make_edge(A[0].get_out(), input_port<P::A0>(four_adder));\n                    make_edge(B[0].get_out(), input_port<P::B0>(four_adder));\n                    make_edge(output_port<P::S0>(four_adder), input_port<0>(Sum));\n\n                    make_edge(A[1].get_out(), input_port<P::A1>(four_adder));\n                    make_edge(B[1].get_out(), input_port<P::B1>(four_adder));\n                    make_edge(output_port<P::S1>(four_adder), input_port<1>(Sum));\n\n                    make_edge(A[2].get_out(), input_port<P::A2>(four_adder));\n                    make_edge(B[2].get_out(), input_port<P::B2>(four_adder));\n                    make_edge(output_port<P::S2>(four_adder), input_port<2>(Sum));\n\n                    make_edge(A[3].get_out(), input_port<P::A3>(four_adder));\n                    make_edge(B[3].get_out(), input_port<P::B3>(four_adder));\n                    make_edge(output_port<P::S3>(four_adder), input_port<3>(Sum));\n\n                    make_edge(CarryIN.get_out(), input_port<P::CI>(four_adder));\n                    make_edge(output_port<P::CO>(four_adder), CarryOUT.get_in());\n                \n                // Activate all switches at low state\n                for (int i=0; i<4; ++i) {\n                    A[i].activate();\n                    B[i].activate();\n                }\n                CarryIN.activate();\n                \n                if (!silent) printf(\"1+0\\n\");\n                A[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"0+1\\n\");\n                A[0].flip();\n                B[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"3+4\\n\");\n                A[0].flip();\n                A[1].flip();\n                B[0].flip();\n                B[2].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"6+1\\n\");\n                A[0].flip();\n                A[2].flip();\n                B[0].flip();\n                B[2].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"0+0+carry\\n\");\n                A[1].flip();\n                A[2].flip();\n                B[0].flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"15+15+carry\\n\");\n                A[0].flip();\n                A[1].flip();\n                A[2].flip();\n                A[3].flip();\n                B[0].flip();\n                B[1].flip();\n                B[2].flip();\n                B[3].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0xf) && (CarryOUT.get_value() == high));\n                \n                if (!silent) printf(\"8+8\\n\");\n                A[0].flip();\n                A[1].flip();\n                A[2].flip();\n                B[0].flip();\n                B[1].flip();\n                B[2].flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == high));\n                \n                if (!silent) printf(\"0+0\\n\");\n                A[3].flip();\n                B[3].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == low));\n            }\n#endif\n\n            { // test D_latch\n                D_latch my_d_latch(g);\n                toggle D(g);\n                pulse E(g, 500, 4); // clock changes every 500ms; stops after 4 changes\n                led Q(g, \" Q\", verbose); // if true, LEDs print at every state change\n                led notQ(g, \"~Q\", verbose);\n\n                make_edge(D.get_out(), input_port<0>(my_d_latch)); \n                make_edge(E.get_out(), input_port<1>(my_d_latch));\n                make_edge(output_port<0>(my_d_latch), Q.get_in());\n                make_edge(output_port<1>(my_d_latch), notQ.get_in());\n\n                D.activate();\n\n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == low) && (notQ.get_value() == high));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == low) && (notQ.get_value() == high));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n            }\n        }\n        utility::report_elapsed_time((tbb::tick_count::now() - start).seconds());\n        return 0;\n    } catch(std::exception& e) {\n        cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n#else\n    utility::report_skipped();\n    return 0;\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/logic_sim/two_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_tba_H\n#define __TBBexample_graph_logicsim_tba_H 1\n\n#include \"one_bit_adder.h\"\n\nclass two_bit_adder : public composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t >, \n                                            tuple< signal_t, signal_t, signal_t > > {\n    graph& my_graph;\n    std::vector<one_bit_adder> two_adders; \n    typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t >, \n                          tuple< signal_t, signal_t, signal_t > > base_type;\n public:\n    two_bit_adder(graph& g) : base_type(g), my_graph(g), two_adders(2, one_bit_adder(g)) {\n        make_connections();\n        set_up_composite();\n    }\n    two_bit_adder(const two_bit_adder& src) : \n        base_type(src.my_graph), my_graph(src.my_graph), two_adders(2, one_bit_adder(src.my_graph)) \n    {\n        make_connections();\n        set_up_composite();\n    }\n    ~two_bit_adder() {}\n\nprivate:\n    void make_connections() {\n        make_edge(output_port<1>(two_adders[0]), input_port<0>(two_adders[1]));\n    }\n    void set_up_composite() {\n\n        base_type::input_ports_type input_tuple(input_port<0>(two_adders[0]/*CI*/), input_port<1>(two_adders[0]), input_port<2>(two_adders[0]), input_port<1>(two_adders[1]), input_port<2>(two_adders[1]));\n\n       base_type::output_ports_type output_tuple(output_port<0>(two_adders[0]), output_port<0>(two_adders[1]),output_port<1>(two_adders[1]/*CO*/));\n       base_type::set_external_ports(input_tuple, output_tuple);\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_tba_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/Makefile",
    "content": "# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\n\nrun_cmd=\nPROG=matmult\nARGS=\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt -lpthread -lcilkrts\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall: release test\n\nrelease:\n\t$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug:\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/Makefile.windows",
    "content": "# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nrun_cmd=\nPROG=matmult\nARGS=\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244\nMYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\n\nrelease:\n\t$(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\n\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\n\ntest:\n\t$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/matmult.cpp",
    "content": "/*\n    Copyright (c) 2016-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// -------------------------------------------------------------------------------------------------\n// This is an example of a matrix multiplication Gen kernel usage with TBB Flow Graph.\n// It exemplifies support for compute offload to Intel(R) Graphics Technology in the flow graph API.\n// -------------------------------------------------------------------------------------------------\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE\n\n#if _MSC_VER\n#pragma warning(disable : 4503) // suppress warning C4503: decorated name length exceeded, name was truncated \n#endif\n\n// -------------------------------------------------------------------------------------------------\n\n#include <iostream>\n\n#include <cilk/cilk.h>\n#include <cilk/cilk_api.h>\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/gfx_factory.h\"\n\n// -------------------------------------------------------------------------------------------------\n\n#define SLM_TILE_X (4*8)\n#define SLM_TILE_Y (4*8)\n#define SLM_TILE_K (4*8)\n\n#define SIZE_X (2*SLM_TILE_X)\n#define SIZE_Y (2*SLM_TILE_Y)\n#define SIZE_K (2*SLM_TILE_X)\n\n#ifdef __GFX__\n#define BARRIER _gfx_gpgpu_thread_barrier()\n#else\n#define BARRIER\n#endif\n\n#define TILE_Y 8\n#define TILE_K 8\n#define TILE_X 8\n\n// The naive straightforward algorithm used to obtain reference results on CPU\nvoid matmult_naive(const float* A, const float* B, float* C) {\n    for (int y = 0; y < SIZE_Y; y++) {\n        for (int x = 0; x < SIZE_X; x++) {\n            C[y * SIZE_Y + x] = (float)0;\n\n            for (int k = 0; k < SIZE_K; k++) {\n                C[y * SIZE_Y + x] += A[y * SIZE_K + k] * B[k * SIZE_K + x];\n            }\n        }\n    }\n}\n\n// Shared Local Memory based algorithm\n__declspec(target(gfx_kernel))\nvoid matmult_tiled_slm(const float A[][SIZE_K], const float B[][SIZE_X], float C[][SIZE_X]) {\n    // The parallel loop nest below iterates over \"supertiles\" in the resulting\n    // matrix C and it is parallelized across thread groups, 1 iteration per\n    // group, which effectively means that the loop nest is peeled off.\n    // This kernel is programmed so that each thread group calculates one\n    // resulting supertile in matrix C.\n    _Cilk_for _Thread_group(int tg_y = 0; tg_y < SIZE_Y; tg_y += SLM_TILE_Y) {\n        _Cilk_for _Thread_group(int tg_x = 0; tg_x < SIZE_X; tg_x += SLM_TILE_X) {\n            // declare \"supertiles\" of each matrix to be allocated in SLM\n            __thread_group_local float slm_atile[SLM_TILE_Y][SLM_TILE_K];\n            __thread_group_local float slm_btile[SLM_TILE_K][SLM_TILE_X];\n            __thread_group_local float slm_ctile[SLM_TILE_Y][SLM_TILE_X];\n\n            // initialize the result supertile (in parallel)\n            //slm_ctile[:][:] = (float)0;\n            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                    slm_ctile[i0][i1] = (float)0;\n\n            // calculate the dot product of supertiles:\n            for (int super_k = 0; super_k < SIZE_K; super_k += SLM_TILE_K) {\n                // cache A's and B's \"supertiles\" in SLM (in parallel)\n                //slm_atile[:][:] = A[tg_y:SLM_TILE_Y][super_k:SLM_TILE_K];\n                _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_K; i1++)\n                        slm_atile[i0][i1] = A[tg_y + i0][super_k + i1];\n\n                //slm_btile[:][:] = B[super_k:SLM_TILE_K][tg_x:SLM_TILE_X];\n                _Cilk_for(int i0 = 0; i0 < SLM_TILE_K; i0++)\n                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                        slm_btile[i0][i1] = B[super_k + i0][tg_x + i1];\n\n                // need a barrier, since every tile in tiles are used by\n                // multiple threads in the group\n                BARRIER;\n\n                // now multiply the supertiles as usual matrices (in parallel)\n                // ...\n                // ... using the most effective tiled algorithm:\n                _Cilk_for(int t_y = 0; t_y < SLM_TILE_Y; t_y += TILE_Y) {\n                    _Cilk_for(int t_x = 0; t_x < SLM_TILE_X; t_x += TILE_X) {\n                        // allocate tiles in registers\n                        float atile[TILE_Y][TILE_K], btile[TILE_X];\n                        float ctile[TILE_Y][TILE_X];\n\n                        // ... and initialize ctile to zero\n                        ctile[:][:] = (float)0;\n\n                        // calculate the dot product of the tiles\n                        for (int k = 0; k < SLM_TILE_K; k += TILE_K) {\n                            atile[:][:] = slm_atile[t_y:TILE_Y][k:TILE_K];\n\n                            for (int k_ind = 0; k_ind < TILE_K; k_ind++) {\n                                btile[:] = slm_btile[k + k_ind][t_x:TILE_X];\n\n                                // multiply current btile row by atile's\n                                // current element and add up to corresponding\n                                // ctile row\n                                for (int y_ind = 0; y_ind < TILE_Y; y_ind++) {\n                                    ctile[y_ind][:] += atile[y_ind][k_ind] *\n                                        btile[:];\n                                }\n                            }\n                        }\n                        // flush the thread-local ctile (registers) into the\n                        // thread group-local supertile (SLM) adding up\n                        // elements\n                        slm_ctile[t_y:TILE_Y][t_x:TILE_X] += ctile[:][:];\n                    }\n                }\n\n                // barrier to make sure\n                // (1) next iteration of the loop does not overwrite a and b\n                //   SLM tiles used in the above calculation of slm_ctile\n                // (2) on the last iteration of the loop, all threads wait\n                //   for the SLM ctile calculation to be completed before\n                //   writing it back to memory below this loop\n                BARRIER;\n            }\n\n            // write (in parallel) the result supertile back to memory:\n            //C[tg_y:SLM_TILE_Y][tg_x:SLM_TILE_X] = slm_ctile[:][:];\n            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                    C[tg_y + i0][tg_x + i1] = slm_ctile[i0][i1];\n\n            // next iteration of the loop zeroes out slm_ctile - make sure this\n            // always happens after slm_ctile has been dumped to memory (above\n            // loop nest completes):\n            BARRIER;\n        }\n    }\n}\n\n// Matrix initialization function\nvoid init_matrix(int width, int height, float* matrix) {\n    for (int j = 0; j < height; j++) {\n        for (int i = 0; i < width; i++) {\n            matrix[j * height + i] = (float)(j * 4 + i);\n        }\n    }\n}\n\n// Validate matrix with reference values\nbool validate_mat(char *title, int size_y, int size_x, const float* mat, const float* ref_mat) {\n    int err_cnt = 0;\n    printf(\"verifying %s...\", title);\n    fflush(stdout);\n\n    for (int y = 0; y < size_y; y++) {\n        for (int x = 0; x < size_x; x++) {\n            float val = mat[y * size_y + x];\n            float gold_val = ref_mat[y * size_y + x];\n\n            if (val != gold_val) {\n                if (err_cnt == 0) {\n                    printf(\"\\n\");\n                }\n                if (++err_cnt < 10) {\n                    std::cout <<\n                        \"  ERROR at [\" << y << \"][\" << x << \"]: \" <<\n                        val << \"(should be \" << gold_val << \")\" << std::endl;\n                }\n            }\n        }\n    }\n    if (err_cnt == 0) {\n        printf(\" ok\\n\");\n    } else {\n        printf(\"FAILED\\n\");\n    }\n    return err_cnt == 0;\n}\n\n// ----------------------------------------------------------------------------\n// Helper types and functions\n// ----------------------------------------------------------------------------\n\nstruct matrix_size {\n    int columns;\n    int rows;\n};\n\ntypedef std::tuple< tbb::flow::gfx_buffer<float>,\n                    tbb::flow::gfx_buffer<float>,\n                    tbb::flow::gfx_buffer<float> > kernel_args_type;\ntypedef kernel_args_type cpu_args_type;\ntypedef kernel_args_type validation_args_type;\n\n// Constructs flow graph with three computation nodes that all make matrixes multiplication\n// - CPU node - obtains reference result on CPU\n// - CPU SLM node - Intel(R) Cilk(TM) based matrixes multiplication implementation on CPU\n// - GPU node - obtains result on GPU using GFX offload API\nvoid mat_multiplication() {\n\n    //------------------------------------------\n    // TBB Flow Graph nodes declaration section\n    //------------------------------------------\n\n    tbb::flow::graph g;\n    tbb::flow::gfx_factory factory(g);\n\n    // Enqueue task for running on Gen\n    tbb::flow::split_node< kernel_args_type > gpu_slm_split_n(g);\n    tbb::flow::streaming_node< kernel_args_type, tbb::flow::queueing, tbb::flow::gfx_factory > gpu_slm_mat_mult_n(g, matmult_tiled_slm, tbb::flow::gfx_factory::dummy_device_selector(), factory);\n\n    // Obtain SLM algorithm result on CPU\n    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_slm_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float >& A_MATRIX = std::get<0>(args);\n        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);\n        tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX   = std::get<2>(args);\n\n        matmult_tiled_slm((float(*)[SIZE_K])A_MATRIX.data(), (float(*)[SIZE_X])B_MATRIX.data(), (float(*)[SIZE_X])CPU_SLM_MATRIX.data());\n\n        return CPU_SLM_MATRIX;\n    });\n\n    // Obtain reference result on CPU\n    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_naive_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float>& A_MATRIX  = std::get<0>(args);\n        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);\n        tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX = std::get<2>(args);\n\n        matmult_naive(A_MATRIX.data(), B_MATRIX.data(), CPU_NAIVE_MATRIX.data());\n\n        return CPU_NAIVE_MATRIX;\n    });\n\n    // Validate computed matrixes\n    tbb::flow::join_node< validation_args_type > validation_join_n(g);\n    tbb::flow::function_node< validation_args_type > mat_validation_n(g, tbb::flow::unlimited, [](const validation_args_type& result) {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float>& GPU_SLM_MAT   = std::get<0>(result);\n        const tbb::flow::gfx_buffer<float>& CPU_SLM_MAT   = std::get<1>(result);\n        const tbb::flow::gfx_buffer<float>& CPU_NAIVE_MAT = std::get<2>(result);\n\n        // Verify results\n        // Check that slm algorithm produces correct results on CPU:\n        validate_mat(\"matrix multiply: 'SLM' CPU vs. CPU\", SIZE_Y, SIZE_X, CPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());\n        // Verify Gen results:\n        validate_mat(\"matrix multiply: SLM Gen vs. CPU\", SIZE_Y, SIZE_X, GPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());\n    });\n\n    //-----------------------------------------\n    // Make edge section - connecting nodes\n    //-----------------------------------------\n\n    // Prepare main graph input ports for data\n    make_edge(tbb::flow::output_port<0>(gpu_slm_split_n), tbb::flow::input_port<0>(gpu_slm_mat_mult_n));\n    make_edge(tbb::flow::output_port<1>(gpu_slm_split_n), tbb::flow::input_port<1>(gpu_slm_mat_mult_n));\n    make_edge(tbb::flow::output_port<2>(gpu_slm_split_n), tbb::flow::input_port<2>(gpu_slm_mat_mult_n));\n\n    // Join results\n    make_edge(tbb::flow::output_port<2>(gpu_slm_mat_mult_n), tbb::flow::input_port<0>(validation_join_n));\n    make_edge(cpu_slm_mat_mult_n, tbb::flow::input_port<1>(validation_join_n));\n    make_edge(cpu_naive_mat_mult_n, tbb::flow::input_port<2>(validation_join_n));\n\n    //Verify correctness\n    make_edge(validation_join_n, mat_validation_n);\n\n    // Set args for GFX kernel.\n    // Default behaviour if not set.\n    gpu_slm_mat_mult_n.set_args(tbb::flow::port_ref<0, 2>);\n\n    //-----------------------------------------\n    // Input sizes and matrixes initialization\n    //-----------------------------------------\n\n    const matrix_size A_MATRIX_SIZE         = { SIZE_Y, SIZE_K };\n    const matrix_size B_MATRIX_SIZE         = { SIZE_K, SIZE_X };\n    const matrix_size GPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };\n    const matrix_size CPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };\n    const matrix_size CPU_NAIVE_MATRIX_SIZE = { SIZE_Y, SIZE_X };\n\n    tbb::flow::gfx_buffer<float> A_MATRIX(A_MATRIX_SIZE.columns * A_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> B_MATRIX(B_MATRIX_SIZE.columns * B_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> GPU_SLM_MATRIX(GPU_SLM_MATRIX_SIZE.columns * GPU_SLM_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX(CPU_SLM_MATRIX_SIZE.columns * CPU_SLM_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX(CPU_NAIVE_MATRIX_SIZE.columns * CPU_NAIVE_MATRIX_SIZE.rows);\n\n    // Intitialize input matrixes\n    init_matrix(A_MATRIX_SIZE.columns, A_MATRIX_SIZE.rows, A_MATRIX.data());\n    init_matrix(B_MATRIX_SIZE.columns, B_MATRIX_SIZE.rows, B_MATRIX.data());\n\n    // Make tuples with input data for graph\n    kernel_args_type GPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, GPU_SLM_MATRIX);\n    kernel_args_type CPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, CPU_SLM_MATRIX);\n    kernel_args_type CPU_NAIVE_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, CPU_NAIVE_MATRIX);\n\n    //-----------------------------------------\n    // Send input to the graph and run it\n    //-----------------------------------------\n\n    gpu_slm_split_n.try_put(GPU_SLM_INPUT);\n    cpu_slm_mat_mult_n.try_put(CPU_SLM_INPUT);\n    cpu_naive_mat_mult_n.try_put(CPU_NAIVE_INPUT);\n\n    // Run graph\n    g.wait_for_all();\n}\n\n//---------------------------------------------------------------------------------\n\nint main(int argc, char* argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n        );\n\n        // Compute matrices and verify result\n        mat_multiplication();\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred. Error text is : \\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/msvs/matmult.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"matmult\", \"matmult.vcxproj\", \"{517E31A4-BEED-481A-A5A7-5B37B82A1C16}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/msvs/matmult.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{517E31A4-BEED-481A-A5A7-5B37B82A1C16}</ProjectGuid>\n    <RootNamespace>matmult</RootNamespace>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;</AdditionalLibraryDirectories>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;</AdditionalLibraryDirectories>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;</AdditionalLibraryDirectories>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;</AdditionalLibraryDirectories>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\matmult.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/matmult/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. matmult sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>matmult sample</h1>\n\t</div>\n\n\t<p>\n\t\tThe Matmult is an example of a Gen kernel implementing matrix multiplication.\n\t<br>\n\t<br>\n\t\tIt exemplifies support for compute offload to Intel&reg; Graphics Technology in the flow graph API.\n\t<br><br>\n\t\tThis example uses C++11 features. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t\t<p> For detailed Intel&reg; Graphics Technology requirements, please refer to article <a href=\"https://software.intel.com/en-us/articles/getting-started-with-compute-offload-to-intelr-graphics-technology\">Getting Started With Compute Offload to Intel&reg;  Graphics Technology</a>\n            </p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"matmult.cpp\">matmult.cpp</a>\n\t\t\t\t<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>matmult <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>matmult [<i>-v</i>]</tt>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\t\t\t\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n\t\t\t\tINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n\t\t\t\tWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\t\t\t\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\t\t\t\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=som\nEXE=$(NAME).exe\nARGS=\nLIGHT_ARGS=4\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nSRCFILES = som_graph.cpp som.cpp\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: $(SRCFILES)\nifeq ($(compiler),xl)\n\t# Avoiding \"1586-346 (U) An error occurred during code generation.  The code generation return code was 40.\" with -O3.\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nelse\n\t$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nendif\n\ndebug:  $(SRCFILES)\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(EXE) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=som\nARGS=\nLIGHT_ARGS=4\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: \n\t$(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: \n\t$(CXX) ./som_graph.cpp ./som.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/msvs/som.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"som\", \"som.vcxproj\", \"{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/msvs/som.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>som</ProjectName>\n    <ProjectGuid>{b2ae2edc-697b-4c85-ac0d-e3e523d20d6d}</ProjectGuid>\n    <RootNamespace>som</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <FixedBaseAddress>false</FixedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <FixedBaseAddress>false</FixedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <FixedBaseAddress>false</FixedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\n      <FixedBaseAddress>false</FixedBaseAddress>\n      <DataExecutionPrevention>\n      </DataExecutionPrevention>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\som.cpp\" />\n    <ClCompile Include=\"..\\som_graph.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\som.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Self-Organizing Map (SOM) sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Self-Organizing Map (SOM) sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Self-Organizing Map demonstrates tbb::flow and the use of cancellation in scheduling multiple iterations of\n\t\tmap updates.\n\t<br><br>\n\t\tFor tutorials on Self-organizing Maps, see <a href=\"http://www.ai-junkie.com/ann/som/som1.html\">here</a> and\n\t\t<a href=\"http://davis.wpi.edu/~matt/courses/soms/\">here</a>.\n\t<br><br>\n\t\tThe program trains the map with several examples, splitting the map into subsections and looking for best-match\n\t\tfor multiple examples.  When an example is used to update the map, the graphs examining the sections being\n\t\tupdated for the next example are cancelled and restarted after the update.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"som_graph.cpp\">som_graph.cpp</a>\n\t\t\t\t<dd>The main program.\n\t\t\t\t<dt><a href=\"som.cpp\">som.cpp</a>\n\t\t\t\t<dd>Utilities for handling the map.\n\t\t\t\t<dt><a href=\"som.h\">som.h</a>\n\t\t\t\t<dd>Definitions and utilities.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/som.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map in TBB flow::graph\n//\n// we will do a color map (the simple example.)\n//\n//  serial algorithm\n//\n//       initialize map with vectors (could be random, gradient, or something else)\n//       for some number of iterations\n//           update radius r, weight of change L \n//           for each example V\n//               find the best matching unit\n//               for each part of map within radius of BMU W\n//                   update vector:  W(t+1) = W(t) + w(dist)*L*(V - W(t))\n\n#include \"som.h\"\n#include \"tbb/task.h\"\n\nstd::ostream& operator<<( std::ostream &out, const SOM_element &s) {\n    out << \"(\";\n    for(int i=0;i<(int)s.w.size();++i) {\n        out << s.w[i];\n        if(i < (int)s.w.size()-1) {\n            out << \",\";\n        }\n    }\n    out << \")\";\n    return out;\n}\n\nvoid remark_SOM_element(const SOM_element &s) {\n    printf(\"(\");\n    for(int i=0;i<(int)s.w.size();++i) {\n        printf(\"%g\",s.w[i]);\n        if(i < (int)s.w.size()-1) {\n            printf(\",\");\n        }\n    }\n    printf(\")\");\n}\n\nstd::ostream& operator<<( std::ostream &out, const search_result_type &s) {\n    out << \"<\";\n    out << get<RADIUS>(s);\n    out <<  \", \" << get<XV>(s);\n    out << \", \";\n    out << get<YV>(s);\n    out << \">\";\n    return out;\n}\n\nvoid remark_search_result_type(const search_result_type &s) {\n    printf(\"<%g,%d,%d>\", get<RADIUS>(s), get<XV>(s), get<YV>(s));\n}\n\ndouble\nrandval( double lowlimit, double highlimit) {\n    return double(rand()) / double(RAND_MAX) * (highlimit - lowlimit) + lowlimit;\n}\n\nvoid\nfind_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range ) {\n    if(teaching.size() == 0) return;\n    max_range = min_range = teaching[0];\n    for(int i = 1; i < (int)teaching.size(); ++i) {\n        max_range.elementwise_max(teaching[i]);\n        min_range.elementwise_min(teaching[i]);\n    }\n} \n\nvoid add_fraction_of_difference( SOM_element &to, SOM_element const &from, double frac) {\n    for(int i = 0; i < (int)from.size(); ++i) {\n        to[i] += frac*(from[i] - to[i]);\n    }\n}\n\ndouble\ndistance_squared(SOM_element x, SOM_element y) {\n    double rval = 0.0; for(int i=0;i<(int)x.size();++i) {\n        double diff = x[i] - y[i];\n        rval += diff*diff;\n    }\n    return rval;\n}\n\nvoid SOMap::initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range) {\n    for(int x = 0; x < xMax; ++x) {\n        for(int y = 0; y < yMax; ++y) {\n            for( int i = 0; i < (int)max_range.size(); ++i) {\n                if(it == InitializeRandom) {\n                    my_map[x][y][i] = (randval(min_range[i], max_range[i]));\n                }\n                else if(it == InitializeGradient) {\n                    my_map[x][y][i] = ((double)(x+y)/(xMax+yMax)*(max_range[i]-min_range[i]) + min_range[i]);\n                }\n            }\n        }\n    }\n}\n\n// subsquare [low,high)\ndouble\nSOMap::BMU_range( const SOM_element &s, int &xval, int &yval, subsquare_type &r) {\n    double min_distance_squared = DBL_MAX;\n    task &my_task = task::self();\n    int min_x = -1;\n    int min_y = -1;\n    for(int x = r.rows().begin(); x != r.rows().end(); ++x) {\n        for( int y = r.cols().begin(); y != r.cols().end(); ++y) {\n            double dist = distance_squared(s,my_map[x][y]);\n            if(dist < min_distance_squared) {\n                min_distance_squared = dist;\n                min_x = x;\n                min_y = y;\n            }\n            if(cancel_test && my_task.is_cancelled()) {\n                xval = r.rows().begin();\n                yval = r.cols().begin();\n                return DBL_MAX;\n            }\n        }\n    }\n    xval = min_x;\n    yval = min_y;\n    return sqrt(min_distance_squared);\n}\n\nvoid\nSOMap::epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range<int> &r) {\n    int min_xiter = (int)((double)min_x - radius);\n    if(min_xiter < 0) min_xiter = 0;\n    int max_xiter = (int)((double)min_x + radius);\n    if(max_xiter > (int)my_map.size()-1) max_xiter = (int)my_map.size()-1;\n    for(int xx = r.begin(); xx <= r.end(); ++xx) {\n        double xrsq = (xx-min_x)*(xx-min_x);\n        double ysq = radius*radius - xrsq;  // max extent of y influence\n        double yd;\n        if(ysq > 0) {\n            yd = sqrt(ysq);\n            int lb = (int)(min_y - yd);\n            int ub = (int)(min_y + yd);\n            for(int yy = lb; yy < ub; ++yy) {\n                if(yy >= 0 && yy < (int)my_map[xx].size()) {\n                    // [xx, yy] is in the range of the update.\n                    double my_rsq = xrsq + (yy-min_y)*(yy-min_y);  // distance from BMU squared\n                    double theta = exp(-(radius*radius) /(2.0* my_rsq)); \n                    add_fraction_of_difference(my_map[xx][yy], s, theta * learning_rate);\n                }\n            }\n        }\n    }\n}\n\nvoid SOMap::teach(teaching_vector_type &in) {\n    for(int i = 0; i < nPasses; ++i ) {\n        int j = (int)(randval(0, (double)in.size()));  // this won't be reproducible.\n        if(j == in.size()) --j;\n        \n        int min_x = -1;\n        int min_y = -1;\n        subsquare_type br2(0, (int)my_map.size(), 1, 0, (int)my_map[0].size(), 1);\n        (void) BMU_range(in[j],min_x, min_y, br2);  // just need min_x, min_y\n        // radius of interest\n        double radius = max_radius * exp(-(double)i*radius_decay_rate);\n        // update circle is min_xiter to max_xiter inclusive.\n        double learning_rate = max_learning_rate * exp( -(double)i * learning_decay_rate);\n        epoch_update(in[j], i, min_x, min_y, radius, learning_rate);\n    }\n}\n\nvoid SOMap::debug_output() {\n    printf(\"SOMap:\\n\");\n    for(int i = 0; i < (int)(this->my_map.size()); ++i) {\n        for(int j = 0; j < (int)(this->my_map[i].size()); ++j) {\n            printf( \"map[%d, %d] == \", i, j );\n            remark_SOM_element( this->my_map[i][j] );\n            printf(\"\\n\");\n        }\n    }\n}\n\n#define RED 0\n#define GREEN 1\n#define BLUE 2\n\nvoid readInputData() {\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching[0][RED] = 1.0; my_teaching[0][GREEN] = 0.0; my_teaching[0][BLUE] = 0.0;\n    my_teaching[1][RED] = 0.0; my_teaching[1][GREEN] = 1.0; my_teaching[1][BLUE] = 0.0;\n    my_teaching[2][RED] = 0.0; my_teaching[2][GREEN] = 0.0; my_teaching[2][BLUE] = 1.0;\n    my_teaching[3][RED] = 0.3; my_teaching[3][GREEN] = 0.3; my_teaching[3][BLUE] = 0.0;\n    my_teaching[4][RED] = 0.5; my_teaching[4][GREEN] = 0.5; my_teaching[4][BLUE] = 0.9;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/som.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map\n//\n// support for self-ordering maps\n#ifndef __SOM_H__\n#define __SOM_H__\n\n#include <vector>\n#include <cstdlib>\n#include <cmath>\n#include <cfloat>\n#include <iostream>\n#include <cstdio>\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/blocked_range2d.h\"\n\nusing namespace tbb;\nusing namespace tbb::flow;\n\ntypedef blocked_range2d<int> subsquare_type;\ntypedef tuple<double,int,int> search_result_type;\n\nstd::ostream& operator<<( std::ostream &out, const search_result_type &s);\n\n#define RADIUS 0  // for the std::gets\n#define XV     1\n#define YV     2\n\n// to have single definitions of static variables, define _MAIN_C_ in the main program\n// \n#ifdef _MAIN_C_\n#define DEFINE // nothing\n#define INIT(n) = n\n#else // not in main file\n#define DEFINE extern\n#define INIT(n) // nothing\n#endif  // _MAIN_C_\n\nDEFINE int nElements INIT(3);  // length of input vectors, matching vector in map\nDEFINE double max_learning_rate INIT(0.8);  // decays exponentially\nDEFINE double radius_decay_rate;\nDEFINE double learning_decay_rate INIT(0.005);\nDEFINE double max_radius;\nDEFINE bool extra_debug INIT(false);\nDEFINE bool cancel_test INIT(false);\n\nDEFINE int xMax INIT(100);\nDEFINE int yMax INIT(100);\nDEFINE int nPasses INIT(100);\n\nenum InitializeType { InitializeRandom, InitializeGradient };\n#define RED 0\n#define GREEN 1\n#define BLUE 2\nclass SOM_element;\nvoid remark_SOM_element(const SOM_element &s);\n\n// all SOM_element vectors are the same length (nElements), so we do not have\n// to range-check the vector accesses.\nclass SOM_element {\n    std::vector<double> w;\npublic:\n    friend std::ostream& operator<<( std::ostream &out, const SOM_element &s);\n    friend void remark_SOM_element(const SOM_element &s);\n    SOM_element() : w(nElements,0.0) {}\n    double &operator[](int indx) { return w.at(indx); }\n    const double &operator[](int indx) const { return w.at(indx); }\n    bool operator==(SOM_element const &other) const {\n        for(size_t i=0;i<size();++i) {\n            if(w[i] != other.w[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    bool operator!=(SOM_element const &other) const { return !operator==(other); }\n    void elementwise_max(SOM_element const &other) {\n        for(size_t i = 0; i < w.size(); ++i) if(w[i] < other.w[i]) w[i] = other.w[i];\n    }\n    void elementwise_min(SOM_element const &other) {\n        for(size_t i = 0; i < w.size(); ++i) if(w[i] > other.w[i]) w[i] = other.w[i];\n    }\n    size_t size() const { return w.size(); }\n};\n\ntypedef std::vector<SOM_element> teaching_vector_type;\n\nDEFINE SOM_element max_range;\nDEFINE SOM_element min_range;\n\nextern double randval( double lowlimit, double highlimit);\n\nextern void find_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range );\n\nextern void add_fraction_of_difference( SOM_element &to, SOM_element &from, double frac);\n\nDEFINE teaching_vector_type my_teaching;\n\nclass SOMap {\n    std::vector< std::vector< SOM_element > > my_map;\npublic:\n    SOMap(int xSize, int ySize) {\n        my_map.reserve(xSize);\n        for(int i = 0; i < xSize; ++i) {\n            my_map.push_back(teaching_vector_type());\n            my_map[i].reserve(ySize);\n            for(int j = 0; j < ySize;++j) {\n                my_map[i].push_back(SOM_element());\n            }\n        }\n    }\n    size_t size() { return my_map.size(); }\n    void initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range);\n    teaching_vector_type &operator[](int indx) { return my_map[indx]; }\n    SOM_element &at(int xVal, int yVal) { return my_map[xVal][yVal]; }\n    SOM_element &at(search_result_type const &s) { return my_map[flow::get<1>(s)][flow::get<2>(s)]; }\n    void epoch_update( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate) {\n        int min_xiter = (int)((double)min_x - radius);\n        if(min_xiter < 0) min_xiter = 0;\n        int max_xiter = (int)((double)min_x + radius);\n        if(max_xiter > (int)my_map.size()-1) max_xiter = (int)(my_map.size()-1);\n        blocked_range<int> br1(min_xiter, max_xiter, 1);\n        epoch_update_range(s, epoch, min_x, min_y, radius, learning_rate, br1);\n    }\n    void epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range<int> &r);\n    void teach( teaching_vector_type &id);\n    void debug_output();\n    // find BMU given an input, returns distance\n    double BMU_range(const SOM_element &s, int &xval, int &yval, subsquare_type &r);\n    double BMU(const SOM_element &s, int &xval, int &yval) {\n        subsquare_type br(0,(int)my_map.size(),1,0,(int)my_map[0].size(),1);\n        return BMU_range(s, xval, yval, br);\n    }\n};\n\nextern double distance_squared(SOM_element x, SOM_element y);\nvoid remark_SOM_element(const SOM_element &s);\n\nextern void readInputData();\n#endif // __SOM_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/som_graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map in TBB flow::graph\n//\n//   This is an example of the use of cancellation in a graph.  After a point in searching for\n//   the best match for an example, two examples are looked for simultaneously.  When the\n//   earlier example is found and the update radius is determined, the affected searches\n//   for the subsequent example are cancelled, and after the update they are restarted.\n//   As the update radius shrinks fewer searches are cancelled, and by the last iterations\n//   virtually all the work done for the speculating example is useful.\n//\n// first, a simple implementation with only one example vector\n// at a time.\n//\n// we will do a color map (the simple example.)\n//\n//  graph algorithm\n//\n//       for some number of iterations\n//           update radius r, weight of change L \n//           for each example V\n//               use graph to find BMU\n//               for each part of map within radius of BMU W\n//                   update vector:  W(t+1) = W(t) + w(dist)*L*(V - W(t))\n\n#define _MAIN_C_ 1\n#include \"som.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/blocked_range2d.h\"\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n\n#define RED 0\n#define GREEN 1\n#define BLUE 2\n\nstatic int xranges = 1;\nstatic int yranges = 1;\nstatic int xsize = -1;\nstatic int ysize = -1;\n\nstatic int global_i = 0;\nstatic int speculation_start; \nstd::vector<int> function_node_execs;\nstatic int xRangeMax = 3;\nstatic int yRangeMax = 3;\nstatic bool dont_speculate = false;\nstatic search_result_type last_update;\n\nclass BMU_search_body {\n    SOMap &my_map;\n    subsquare_type my_square;\n    int &fn_tally;\npublic:\n    BMU_search_body(SOMap &_m, subsquare_type &_sq, int &fnt) : my_map(_m), my_square(_sq), fn_tally(fnt) { }\n    BMU_search_body( const BMU_search_body &other) : my_map(other.my_map), my_square(other.my_square), fn_tally(other.fn_tally) { }\n    search_result_type operator()(const SOM_element s) {\n        int my_x;\n        int my_y;\n        double min_dist = my_map.BMU_range(s, my_x, my_y, my_square);\n        ++fn_tally;  // count how many times this function_node executed\n        return search_result_type(min_dist, my_x, my_y);\n    }\n};\n\ntypedef function_node<SOM_element, search_result_type> search_node;\ntypedef broadcast_node<SOM_element> b_node;\ntypedef std::vector< search_node *> search_node_vector_type;\ntypedef std::vector< search_node_vector_type > search_node_array_type;\ntypedef std::vector< graph *> graph_vector_type;\ntypedef std::vector< graph_vector_type > graph_array_type;\n\n#define SPECULATION_CNT 2\n\ngraph *g[SPECULATION_CNT];  // main graph; there should only be one per epoch\nb_node *send_to[SPECULATION_CNT];      // broadcast node to send exemplar to all function_nodes\nqueue_node<search_result_type> *q[SPECULATION_CNT];  // queue for function nodes to put their results in\n// each function_node should have its own graph\nsearch_node_array_type* s_array[SPECULATION_CNT];  // 2d array of function nodes\ngraph_array_type* g_array[SPECULATION_CNT];        // 2d array of graphs\n\n// build a set of SPECULATION_CNT graphs, each of which consists of a broadcast_node,\n//    xranges x yranges function_nodes, and one queue_node for output.\n//    once speculation starts, if i % SPECULATION_CNT is the current graph, (i+1) % SPECULATION_CNT\n//    is the first speculation, and so on.\nvoid\nbuild_BMU_graph(SOMap &map1) {\n    // build current graph\n    xsize = ((int)map1.size() + xranges - 1) / xranges;\n    ysize = ((int)map1[0].size() + yranges - 1) / yranges;\n    function_node_execs.clear();\n    function_node_execs.reserve(xranges*yranges+1);\n    for(int ii = 0; ii < xranges*yranges+1;++ii) function_node_execs.push_back(0);\n\n    for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) {\n        g[scnt] = new graph;\n        send_to[scnt] = new b_node(*(g[scnt]));  // broadcast node to the function_nodes\n        q[scnt] = new queue_node<search_result_type>(*(g[scnt]));  // output queue\n\n        // create the function_nodes, tie to the graph\n        s_array[scnt] = new search_node_array_type;\n        s_array[scnt]->reserve(xranges);\n        g_array[scnt] = new graph_array_type;\n        g_array[scnt]->reserve(xranges);\n        for(int i = 0; i < (int)map1.size(); i += xsize) {\n            int xindex = i / xsize;\n            s_array[scnt]->push_back(search_node_vector_type());\n            (*s_array[scnt])[xindex].reserve(yranges);\n            g_array[scnt]->push_back(graph_vector_type());\n            (*g_array[scnt])[xindex].reserve(yranges);\n            for( int j = 0; j < (int)map1[0].size(); j += ysize) {\n                int offset = (i/xsize)*yranges + (j / ysize);\n                int xmax = (i + xsize) > (int)map1.size() ? (int)map1.size() : i + xsize;\n                int ymax = (j + ysize) > (int)map1[0].size() ? (int)map1[0].size() : j + ysize;\n                subsquare_type sst(i,xmax,1,j,ymax,1);\n                BMU_search_body bb(map1,sst,function_node_execs[offset]);\n                graph *g_local = new graph;\n                search_node *s = new search_node(*g_local, serial, bb); // copies Body\n                (*g_array[scnt])[xindex].push_back(g_local);\n                (*s_array[scnt])[xindex].push_back(s);\n                make_edge(*(send_to[scnt]), *s);  // broadcast_node -> function_node\n                make_edge(*s, *(q[scnt]));   // function_node -> queue_node\n            }\n        }\n    }\n}\n\n// Wait for the 2D array of flow::graphs.\nvoid wait_for_all_graphs(int cIndex) {  // cIndex ranges over [0 .. SPECULATION_CNT - 1]\n    for(int x = 0; x < xranges; ++x) {\n        for(int y = 0; y < yranges; ++y) {\n            (*g_array[cIndex])[x][y]->wait_for_all();\n        }\n    }\n}\n\nvoid\ndestroy_BMU_graph() {\n    for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) {\n        for( int i = 0; i < (int)(*s_array[scnt]).size(); ++i ) {\n            for(int j = 0; j < (int)(*s_array[scnt])[i].size(); ++j) {\n                delete (*s_array[scnt])[i][j];\n                delete (*g_array[scnt])[i][j];\n            }\n        }\n        (*s_array[scnt]).clear();\n        delete s_array[scnt];\n        (*g_array[scnt]).clear();\n        delete g_array[scnt];\n        delete q[scnt];\n        delete send_to[scnt];\n        delete g[scnt];\n    }\n}\n\nvoid find_subrange_overlap(int const &xval, int const &yval, double const &radius, int &xlow, int &xhigh, int &ylow, int &yhigh) {\n    xlow = int((xval-radius)/xsize);\n    xhigh = int((xval+radius)/xsize);\n    ylow = int((yval-radius)/ysize);\n    yhigh = int((yval+radius)/ysize);\n    // circle may fall partly outside map\n    if(xlow < 0) xlow = 0;\n    if(xhigh >= xranges) xhigh = xranges - 1;\n    if(ylow < 0) ylow = 0;\n    if(yhigh >= yranges) yhigh = yranges - 1;\n}\n\nbool overlap( int &xval, int &yval, search_result_type &sr) {\n    int xlow, xhigh, ylow, yhigh;\n    find_subrange_overlap(get<XV>(sr), get<YV>(sr), get<RADIUS>(sr), xlow, xhigh, ylow, yhigh);\n    return xval >= xlow && xval <= xhigh && yval >= ylow && yval <= yhigh;\n}\n\nvoid\ncancel_submaps(int &xval, int &yval, double &radius, int indx) {\n    int xlow;\n    int xhigh;\n    int ylow;\n    int yhigh;\n    find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh);\n    for(int x = xlow; x <= xhigh; ++x) {\n        for(int y = ylow; y <= yhigh; ++y) {\n            (*g_array[indx])[x][y]->root_task()->cancel_group_execution();\n        }\n    }\n}\n\nvoid\nrestart_submaps(int &xval, int &yval, double &radius, int indx, SOM_element &vector) {\n    int xlow;\n    int xhigh;\n    int ylow;\n    int yhigh;\n    find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh);\n    for(int x = xlow; x <= xhigh; ++x) {\n        for(int y = ylow; y <= yhigh; ++y) {\n            // have to reset the graph\n            (*g_array[indx])[x][y]->root_task()->context()->reset();\n            // and re-submit the exemplar for search.\n            (*s_array[indx])[x][y]->try_put(vector);\n        }\n    }\n}\n\nsearch_result_type\ngraph_BMU( int indx ) {  // indx ranges over [0 .. SPECULATION_CNT -1]\n    wait_for_all_graphs(indx);  // wait for the array of subgraphs\n    (g[indx])->wait_for_all();\n    std::vector<search_result_type> all_srs(xRangeMax*yRangeMax,search_result_type(DBL_MAX,-1,-1));\n    search_result_type sr;\n    search_result_type min_sr;\n    get<RADIUS>(min_sr) = DBL_MAX;\n    int result_count = 0;\n    while((q[indx])->try_get(sr)) {\n        ++result_count;\n        // figure which submap this came from\n        int x = get<XV>(sr) / xsize;\n        int y = get<YV>(sr) / ysize;\n        int offset = x*yranges+y;  // linearized subscript\n        all_srs[offset] = sr;\n        if(get<RADIUS>(sr) < get<RADIUS>(min_sr))\n            min_sr = sr;\n        else if(get<RADIUS>(sr) == get<RADIUS>(min_sr)) {\n            if(get<XV>(sr) < get<XV>(min_sr)) {\n                min_sr = sr;\n            }\n            else if((get<XV>(sr) == get<XV>(min_sr) &&\n                  get<YV>(sr) < get<YV>(min_sr)))\n            {\n                min_sr = sr;\n            }\n        }\n    }\n    return min_sr;\n    // end of one epoch\n}\n\nvoid graph_teach(SOMap &map1, teaching_vector_type &in) {\n    build_BMU_graph(map1);\n    // normally the training would pick random exemplars to teach the SOM.  We need\n    // the process to be reproducible, so we will pick the exemplars in order, [0, in.size())\n    int next_j = 0;\n    for(int epoch = 0; epoch < nPasses; ++epoch) {\n        global_i = epoch;\n        bool canceled_submaps = false;\n        int j = next_j;  // try to make reproducible\n        next_j = (epoch+1) % in.size();\n        search_result_type min_sr;\n        if(epoch < speculation_start) {\n            (send_to[epoch%SPECULATION_CNT])->try_put(in[j]);\n        }\n        else if(epoch == speculation_start) {\n            (send_to[epoch%SPECULATION_CNT])->try_put(in[j]);\n            if(epoch < nPasses-1) {\n                (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]);\n            }\n        }\n        else if(epoch < nPasses - 1) {\n            (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]);\n        }\n        min_sr = graph_BMU(epoch % SPECULATION_CNT);  //calls wait_for_all()\n        double min_distance = get<0>(min_sr);\n        double radius = max_radius * exp(-(double)epoch*radius_decay_rate);\n        double learning_rate = max_learning_rate * exp(-(double)epoch * learning_decay_rate);\n        if(epoch >= speculation_start && epoch < (nPasses - 1)) {\n            // have to cancel the affected submaps\n            cancel_submaps(get<XV>(min_sr), get<YV>(min_sr), radius, (epoch+1)%SPECULATION_CNT);\n            canceled_submaps = true;\n        }\n        map1.epoch_update(in[j], epoch, get<1>(min_sr), get<2>(min_sr), radius, learning_rate);\n        ++global_i;\n        if(canceled_submaps) {\n            // do I have to wait for all the non-canceled speculative graph to complete first?\n            // yes, in case a canceled task was already executing.\n            wait_for_all_graphs((epoch+1) % SPECULATION_CNT);  // wait for the array of subgraphs\n            restart_submaps(get<1>(min_sr), get<2>(min_sr), radius, (epoch+1)%SPECULATION_CNT, in[next_j]);\n        }\n\n        last_update = min_sr;\n        get<RADIUS>(last_update) = radius;  // not smallest value, but range of effect\n    }\n    destroy_BMU_graph();\n}\n\nstatic const double serial_time_adjust = 1.25;\nstatic double radius_fraction = 3.0;\n\nint\nmain(int argc, char** argv) {\n    int l_speculation_start;\n    utility::thread_number_range threads( \n            task_scheduler_init::default_num_threads,\n            task_scheduler_init::default_num_threads()  // run only the default number of threads if none specified\n    );\n\n    utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",\"number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.\")\n            // .positional_arg(InputFileName,\"input-file\",\"input file name\")\n            // .positional_arg(OutputFileName,\"output-file\",\"output file name\")\n            .positional_arg(radius_fraction, \"radius-fraction\",\"size of radius at which to start speculating\")\n            .positional_arg(nPasses, \"number-of-epochs\",\"number of examples used in learning phase\")\n            .arg(cancel_test, \"cancel-test\", \"test for cancel signal while finding BMU\")\n            .arg(extra_debug, \"debug\", \"additional output\")\n            .arg(dont_speculate,\"nospeculate\",\"don't speculate in SOM map teaching\")\n         );\n\n    readInputData();\n    max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2;\n    // need this value for the 1x1 timing below\n    radius_decay_rate = -(log(1.0/(double)max_radius) / (double)nPasses);\n    find_data_ranges(my_teaching, max_range, min_range );\n    if(extra_debug) {\n        printf( \"Data range: \");\n        remark_SOM_element(min_range);\n        printf( \" to \");\n        remark_SOM_element(max_range);\n        printf( \"\\n\");\n    }\n\n    // find how much time is taken for the single function_node case.\n    // adjust nPasses so the 1x1 time is somewhere around serial_time_adjust seconds.\n   // make sure the example test runs for at least 0.5 second.\n    for(;;) {\n        task_scheduler_init init(1);\n        SOMap map1(xMax,yMax);\n        speculation_start = nPasses + 1;  // Don't speculate\n\n        xranges = 1;\n        yranges = 1;\n        map1.initialize(InitializeGradient, max_range, min_range);\n        tick_count t0 = tick_count::now();\n        graph_teach(map1, my_teaching);\n        tick_count t1 = tick_count::now();\n        double nSeconds = (t1-t0).seconds();\n        if(nSeconds < 0.5) {\n            xMax *= 2;\n            yMax *= 2;\n            continue;\n        }\n        double size_adjust = sqrt(serial_time_adjust / nSeconds);\n        xMax = (int)((double)xMax * size_adjust);\n        yMax = (int)((double)yMax * size_adjust);\n        max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2;\n        radius_decay_rate = log((double)max_radius) / (double)nPasses;\n\n        if(extra_debug) {\n            printf(\"original 1x1 case ran in %g seconds\\n\", nSeconds);\n            printf(\"   Size of table == %d x %d\\n\", xMax, yMax);\n            printf(\"   radius_decay_rate == %g\\n\", radius_decay_rate);\n        }\n        break;\n    }\n\n    // the \"max_radius\" starts at 1/2*radius_fraction the table size.  To start the speculation when the radius is\n    // 1 / n * the table size, the constant in the log below should be n / 2.  so 2 == 1/4, 3 == 1/6th,\n    // et c.\n    if(dont_speculate) {\n        l_speculation_start = nPasses + 1;\n        if ( extra_debug )printf(\"speculation will not be done\\n\");\n    }\n    else {\n        if(radius_fraction < 1.0 ) {\n            if ( extra_debug )printf(\"Warning: radius_fraction should be >= 1.  Setting to 1.\\n\");\n            radius_fraction = 1.0;\n        }\n        l_speculation_start = (int)((double)nPasses * log(radius_fraction) / log((double)nPasses)); \n        if ( extra_debug )printf( \"We will start speculation at iteration %d\\n\", l_speculation_start );\n    }\n    double single_time;  // for speedup calculations\n    for(int p = threads.first; p <= threads.last; ++p) {\n        task_scheduler_init init(p);\n        if ( extra_debug )printf( \" -------------- Running with %d threads. ------------\\n\", p);\n       // run the SOM build for a series of subranges\n        for(xranges = 1; xranges <= xRangeMax; ++xranges) {\n            for(yranges = xranges; yranges <= yRangeMax; ++yranges) {\n                if(xranges == 1 && yranges == 1) {\n                    // don't pointlessly speculate if we're only running one subrange.\n                    speculation_start = nPasses + 1;\n                }\n                else {\n                    speculation_start = l_speculation_start;\n                }\n                SOMap map1(xMax, yMax);\n                map1.initialize(InitializeGradient, max_range, min_range);\n    \n                if(extra_debug) printf( \"Start learning for [%d,%d] ----------- \\n\", xranges,yranges);\n                tick_count t0 = tick_count::now();\n                graph_teach(map1, my_teaching);\n                tick_count t1 = tick_count::now();\n                \n                if ( extra_debug )printf( \"Done learning for [%d,%d], which took %g seconds \", xranges,yranges, (t1-t0).seconds());\n                if(xranges == 1 && yranges == 1) single_time = (t1-t0).seconds();\n                if ( extra_debug )printf( \": speedup == %g\\n\", single_time / (t1-t0).seconds());\n    \n            }  // yranges\n        }  // xranges\n    }  // #threads p\n    printf(\"done\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/som/xcode/som.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t522FF8DD11F573FC00A587B2 /* som_graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DB11F573FC00A587B2 /* som_graph.cpp */; };\n\t\t522FF8DE11F573FC00A587B2 /* som.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DC11F573FC00A587B2 /* som.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t522FF8DB11F573FC00A587B2 /* som_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som_graph.cpp; path = ../som_graph.cpp; sourceTree = SOURCE_ROOT; };\n\t\t522FF8DC11F573FC00A587B2 /* som.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som.cpp; path = ../som.cpp; sourceTree = SOURCE_ROOT; };\n\t\t8DD76F6C0486A84900D96B5E /* som */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = som; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* som */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = som;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t522FF8DB11F573FC00A587B2 /* som_graph.cpp */,\n\t\t\t\t522FF8DC11F573FC00A587B2 /* som.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* som */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* som */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"som\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = som;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = som;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* som */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"som\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* som */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* som */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t522FF8DD11F573FC00A587B2 /* som_graph.cpp in Sources */,\n\t\t\t\t522FF8DE11F573FC00A587B2 /* som.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = som;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = som;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = som;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = som;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"som\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"som\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=stereo\nARGS=\nPERF_RUN_ARGS=\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\n# TBB libs\nTBBLIB=-ltbb\nTBBLIB_DEBUG=-ltbb_debug\n\n# OpenCL lib\nOPENCL_LIB=-lOpenCL\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt\nendif\nelse\nifeq ($(shell uname),Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\noverride OPENCL_LIB=-framework OpenCL\nendif\nendif\n\nall: release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=stereo\nARGS=\nPERF_RUN_ARGS=\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# TBB libs\nTBBLIB=tbb.lib\nTBBLIB_DEBUG=tbb_debug.lib\n\n# OpenCL lib\nOPENCL_LIB=OpenCL.lib\n\n# The C++ compiler options\nMYCXXFLAGS=/TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_SECURE_NO_WARNINGS /D _SCL_SECURE_NO_WARNINGS $(CXXFLAGS)\nMYLDFLAGS=/INCREMENTAL:NO /NOLOGO /DEBUG $(LDFLAGS)\n\nall: release test\nrelease:\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link $(TBBLIB) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link $(TBBLIB_DEBUG) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@$(CXX) >nul 2>&1 || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/imageEffects.cl",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n__constant int redChannelOffset = 0;\n__constant int greenChannelOffset = 1;\n__constant int blueChannelOffset = 2;\n__constant int channelsPerPixel = 4;\n__constant int channelIncreaseValue = 10;\n\n__kernel void mergeImages( __global uchar* bufferLeft, __global uchar* bufferRight, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth;\n    const int pixelGreenChannelIndex = pixelIndex + greenChannelOffset;\n    const int pixelBlueChannelIndex = pixelIndex + blueChannelOffset;\n\n    bufferLeft[pixelGreenChannelIndex] = (bufferRight[pixelGreenChannelIndex] + bufferLeft[pixelGreenChannelIndex]) / 2;\n    bufferLeft[pixelBlueChannelIndex] = bufferRight[pixelBlueChannelIndex];\n}\n\n__kernel void applyLeftImageEffect( __global uchar* bufferLeft, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelRedChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + redChannelOffset;\n\n    bufferLeft[pixelRedChannelIndex] += channelIncreaseValue;\n}\n\n__kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelBlueChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + blueChannelOffset;\n\n    bufferRight[pixelBlueChannelIndex] += channelIncreaseValue;\n\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/lodepng.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nLodePNG version 20160409\n\nCopyright (c) 2005-2016 Lode Vandevenne\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n/*\nThe manual and changelog are in the header file \"lodepng.h\"\nRename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.\n*/\n\n#include \"lodepng.h\"\n\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n/*Visual Studio: A few warning types are not desired here.*/\n#if defined(_MSC_VER) && (_MSC_VER >= 1310)\n#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/\n#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/\n#endif /*_MSC_VER */\n\nconst char* LODEPNG_VERSION_STRING = \"20160409\";\n\n/*\nThis source file is built up in the following large parts. The code sections\nwith the \"LODEPNG_COMPILE_\" #defines divide this up further in an intermixed way.\n-Tools for C and common code for PNG and Zlib\n-C Code for Zlib (huffman, deflate, ...)\n-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)\n-The C++ wrapper around all of the above\n*/\n\n/*The malloc, realloc and free functions defined here with \"lodepng_\" in front\nof the name, so that you can easily change them to others related to your\nplatform if needed. Everything else in the code calls these. Pass\n-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out\n#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and\ndefine them in your own project's source files without needing to change\nlodepng source code. Don't forget to remove \"static\" if you copypaste them\nfrom here.*/\n\n#ifdef LODEPNG_COMPILE_ALLOCATORS\nstatic void* lodepng_malloc(size_t size)\n{\n  return malloc(size);\n}\n\nstatic void* lodepng_realloc(void* ptr, size_t new_size)\n{\n  return realloc(ptr, new_size);\n}\n\nstatic void lodepng_free(void* ptr)\n{\n  free(ptr);\n}\n#else /*LODEPNG_COMPILE_ALLOCATORS*/\nvoid* lodepng_malloc(size_t size);\nvoid* lodepng_realloc(void* ptr, size_t new_size);\nvoid lodepng_free(void* ptr);\n#endif /*LODEPNG_COMPILE_ALLOCATORS*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // Tools for C, and common code for PNG and Zlib.                       // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*\nOften in case of an error a value is assigned to a variable and then it breaks\nout of a loop (to go to the cleanup phase of a function). This macro does that.\nIt makes the error handling code shorter and more readable.\n\nExample: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);\n*/\n#define CERROR_BREAK(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  break;\\\n}\n\n/*version of CERROR_BREAK that assumes the common case where the error variable is named \"error\"*/\n#define ERROR_BREAK(code) CERROR_BREAK(error, code)\n\n/*Set error var to the error code, and return it.*/\n#define CERROR_RETURN_ERROR(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  return code;\\\n}\n\n/*Try the code, if it returns error, also return the error.*/\n#define CERROR_TRY_RETURN(call)\\\n{\\\n  unsigned error = call;\\\n  if(error) return error;\\\n}\n\n/*Set error var to the error code, and return from the void function.*/\n#define CERROR_RETURN(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  return;\\\n}\n\n/*\nAbout uivector, ucvector and string:\n-All of them wrap dynamic arrays or text strings in a similar way.\n-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.\n-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.\n-They're not used in the interface, only internally in this file as static functions.\n-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.\n*/\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*dynamic vector of unsigned ints*/\ntypedef struct uivector\n{\n  unsigned* data;\n  size_t size; /*size in number of unsigned longs*/\n  size_t allocsize; /*allocated size in bytes*/\n} uivector;\n\nstatic void uivector_cleanup(void* p)\n{\n  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;\n  lodepng_free(((uivector*)p)->data);\n  ((uivector*)p)->data = NULL;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_reserve(uivector* p, size_t allocsize)\n{\n  if(allocsize > p->allocsize)\n  {\n    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);\n    void* data = lodepng_realloc(p->data, newsize);\n    if(data)\n    {\n      p->allocsize = newsize;\n      p->data = (unsigned*)data;\n    }\n    else return 0; /*error: not enough memory*/\n  }\n  return 1;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_resize(uivector* p, size_t size)\n{\n  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;\n  p->size = size;\n  return 1; /*success*/\n}\n\n/*resize and give all new elements the value*/\nstatic unsigned uivector_resizev(uivector* p, size_t size, unsigned value)\n{\n  size_t oldsize = p->size, i;\n  if(!uivector_resize(p, size)) return 0;\n  for(i = oldsize; i < size; ++i) p->data[i] = value;\n  return 1;\n}\n\nstatic void uivector_init(uivector* p)\n{\n  p->data = NULL;\n  p->size = p->allocsize = 0;\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_push_back(uivector* p, unsigned c)\n{\n  if(!uivector_resize(p, p->size + 1)) return 0;\n  p->data[p->size - 1] = c;\n  return 1;\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n/* /////////////////////////////////////////////////////////////////////////// */\n\n/*dynamic vector of unsigned chars*/\ntypedef struct ucvector\n{\n  unsigned char* data;\n  size_t size; /*used size*/\n  size_t allocsize; /*allocated size*/\n} ucvector;\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_reserve(ucvector* p, size_t allocsize)\n{\n  if(allocsize > p->allocsize)\n  {\n    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);\n    void* data = lodepng_realloc(p->data, newsize);\n    if(data)\n    {\n      p->allocsize = newsize;\n      p->data = (unsigned char*)data;\n    }\n    else return 0; /*error: not enough memory*/\n  }\n  return 1;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_resize(ucvector* p, size_t size)\n{\n  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;\n  p->size = size;\n  return 1; /*success*/\n}\n\n#ifdef LODEPNG_COMPILE_PNG\n\nstatic void ucvector_cleanup(void* p)\n{\n  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;\n  lodepng_free(((ucvector*)p)->data);\n  ((ucvector*)p)->data = NULL;\n}\n\nstatic void ucvector_init(ucvector* p)\n{\n  p->data = NULL;\n  p->size = p->allocsize = 0;\n}\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*you can both convert from vector to buffer&size and vica versa. If you use\ninit_buffer to take over a buffer and size, it is not needed to use cleanup*/\nstatic void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)\n{\n  p->data = buffer;\n  p->allocsize = p->size = size;\n}\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_push_back(ucvector* p, unsigned char c)\n{\n  if(!ucvector_resize(p, p->size + 1)) return 0;\n  p->data[p->size - 1] = c;\n  return 1;\n}\n#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/\n\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_PNG\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned string_resize(char** out, size_t size)\n{\n  char* data = (char*)lodepng_realloc(*out, size + 1);\n  if(data)\n  {\n    data[size] = 0; /*null termination char*/\n    *out = data;\n  }\n  return data != 0;\n}\n\n/*init a {char*, size_t} pair for use as string*/\nstatic void string_init(char** out)\n{\n  *out = NULL;\n  string_resize(out, 0);\n}\n\n/*free the above pair again*/\nstatic void string_cleanup(char** out)\n{\n  lodepng_free(*out);\n  *out = NULL;\n}\n\nstatic void string_set(char** out, const char* in)\n{\n  size_t insize = strlen(in), i;\n  if(string_resize(out, insize))\n  {\n    for(i = 0; i != insize; ++i)\n    {\n      (*out)[i] = in[i];\n    }\n  }\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\nunsigned lodepng_read32bitInt(const unsigned char* buffer)\n{\n  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);\n}\n\n#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)\n/*buffer must have at least 4 allocated bytes available*/\nstatic void lodepng_set32bitInt(unsigned char* buffer, unsigned value)\n{\n  buffer[0] = (unsigned char)((value >> 24) & 0xff);\n  buffer[1] = (unsigned char)((value >> 16) & 0xff);\n  buffer[2] = (unsigned char)((value >>  8) & 0xff);\n  buffer[3] = (unsigned char)((value      ) & 0xff);\n}\n#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic void lodepng_add32bitInt(ucvector* buffer, unsigned value)\n{\n  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/\n  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / File IO                                                                / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_DISK\n\n/* returns negative value on error. This should be pure C compatible, so no fstat. */\nstatic long lodepng_filesize(const char* filename)\n{\n  FILE* file;\n  long size;\n  file = fopen(filename, \"rb\");\n  if(!file) return -1;\n\n  if(fseek(file, 0, SEEK_END) != 0)\n  {\n    fclose(file);\n    return -1;\n  }\n\n  size = ftell(file);\n  /* It may give LONG_MAX as directory size, this is invalid for us. */\n  if(size == LONG_MAX) size = -1;\n\n  fclose(file);\n  return size;\n}\n\n/* load file into buffer that already has the correct allocated size. Returns error code.*/\nstatic unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)\n{\n  FILE* file;\n  size_t readsize;\n  file = fopen(filename, \"rb\");\n  if(!file) return 78;\n\n  readsize = fread(out, 1, size, file);\n  fclose(file);\n\n  if (readsize != size) return 78;\n  return 0;\n}\n\nunsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename)\n{\n  long size = lodepng_filesize(filename);\n  if (size < 0) return 78;\n  *outsize = (size_t)size;\n\n  *out = (unsigned char*)lodepng_malloc((size_t)size);\n  if(!(*out) && size > 0) return 83; /*the above malloc failed*/\n\n  return lodepng_buffer_file(*out, (size_t)size, filename);\n}\n\n/*write given buffer to the file, overwriting the file, it doesn't append to it.*/\nunsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename)\n{\n  FILE* file;\n  file = fopen(filename, \"wb\" );\n  if(!file) return 79;\n  fwrite((char*)buffer , 1 , buffersize, file);\n  fclose(file);\n  return 0;\n}\n\n#endif /*LODEPNG_COMPILE_DISK*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // End of common code and tools. Begin of Zlib related code.            // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_ENCODER\n/*TODO: this ignores potential out of memory errors*/\n#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\\\n{\\\n  /*add a new byte at the end*/\\\n  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\\\n  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\\\n  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\\\n  ++(*bitpointer);\\\n}\n\nstatic void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)\n{\n  size_t i;\n  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));\n}\n\nstatic void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)\n{\n  size_t i;\n  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)\n\nstatic unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)\n{\n  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));\n  ++(*bitpointer);\n  return result;\n}\n\nstatic unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)\n{\n  unsigned result = 0, i;\n  for(i = 0; i != nbits; ++i)\n  {\n    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;\n    ++(*bitpointer);\n  }\n  return result;\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Deflate - Huffman                                                      / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#define FIRST_LENGTH_CODE_INDEX 257\n#define LAST_LENGTH_CODE_INDEX 285\n/*256 literals, the end code, some length codes, and 2 unused codes*/\n#define NUM_DEFLATE_CODE_SYMBOLS 288\n/*the distance codes have their own symbols, 30 used, 2 unused*/\n#define NUM_DISTANCE_SYMBOLS 32\n/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/\n#define NUM_CODE_LENGTH_CODES 19\n\n/*the base lengths represented by codes 257-285*/\nstatic const unsigned LENGTHBASE[29]\n  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,\n     67, 83, 99, 115, 131, 163, 195, 227, 258};\n\n/*the extra bits used by codes 257-285 (added to base length)*/\nstatic const unsigned LENGTHEXTRA[29]\n  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n      4,  4,  4,   4,   5,   5,   5,   5,   0};\n\n/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/\nstatic const unsigned DISTANCEBASE[30]\n  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,\n     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};\n\n/*the extra bits of backwards distances (added to base)*/\nstatic const unsigned DISTANCEEXTRA[30]\n  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,\n       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};\n\n/*the order in which \"code length alphabet code lengths\" are stored, out of this\nthe huffman tree of the dynamic huffman tree lengths is generated*/\nstatic const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]\n  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*\nHuffman tree struct, containing multiple representations of the tree\n*/\ntypedef struct HuffmanTree\n{\n  unsigned* tree2d;\n  unsigned* tree1d;\n  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/\n  unsigned maxbitlen; /*maximum number of bits a single code can get*/\n  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/\n} HuffmanTree;\n\n/*function used for debug purposes to draw the tree in ascii art with C++*/\n/*\nstatic void HuffmanTree_draw(HuffmanTree* tree)\n{\n  std::cout << \"tree. length: \" << tree->numcodes << \" maxbitlen: \" << tree->maxbitlen << std::endl;\n  for(size_t i = 0; i != tree->tree1d.size; ++i)\n  {\n    if(tree->lengths.data[i])\n      std::cout << i << \" \" << tree->tree1d.data[i] << \" \" << tree->lengths.data[i] << std::endl;\n  }\n  std::cout << std::endl;\n}*/\n\nstatic void HuffmanTree_init(HuffmanTree* tree)\n{\n  tree->tree2d = 0;\n  tree->tree1d = 0;\n  tree->lengths = 0;\n}\n\nstatic void HuffmanTree_cleanup(HuffmanTree* tree)\n{\n  lodepng_free(tree->tree2d);\n  lodepng_free(tree->tree1d);\n  lodepng_free(tree->lengths);\n}\n\n/*the tree representation used by the decoder. return value is error*/\nstatic unsigned HuffmanTree_make2DTree(HuffmanTree* tree)\n{\n  unsigned nodefilled = 0; /*up to which node it is filled*/\n  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/\n  unsigned n, i;\n\n  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));\n  if(!tree->tree2d) return 83; /*alloc fail*/\n\n  /*\n  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means\n  uninited, a value >= numcodes is an address to another bit, a value < numcodes\n  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as\n  many columns as codes - 1.\n  A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.\n  Here, the internal nodes are stored (what their 0 and 1 option point to).\n  There is only memory for such good tree currently, if there are more nodes\n  (due to too long length codes), error 55 will happen\n  */\n  for(n = 0; n < tree->numcodes * 2; ++n)\n  {\n    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/\n  }\n\n  for(n = 0; n < tree->numcodes; ++n) /*the codes*/\n  {\n    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/\n    {\n      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);\n      /*oversubscribed, see comment in lodepng_error_text*/\n      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;\n      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/\n      {\n        if(i + 1 == tree->lengths[n]) /*last bit*/\n        {\n          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/\n          treepos = 0;\n        }\n        else\n        {\n          /*put address of the next step in here, first that address has to be found of course\n          (it's just nodefilled + 1)...*/\n          ++nodefilled;\n          /*addresses encoded with numcodes added to it*/\n          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;\n          treepos = nodefilled;\n        }\n      }\n      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;\n    }\n  }\n\n  for(n = 0; n < tree->numcodes * 2; ++n)\n  {\n    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/\n  }\n\n  return 0;\n}\n\n/*\nSecond step for the ...makeFromLengths and ...makeFromFrequencies functions.\nnumcodes, lengths and maxbitlen must already be filled in correctly. return\nvalue is error.\n*/\nstatic unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)\n{\n  uivector blcount;\n  uivector nextcode;\n  unsigned error = 0;\n  unsigned bits, n;\n\n  uivector_init(&blcount);\n  uivector_init(&nextcode);\n\n  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));\n  if(!tree->tree1d) error = 83; /*alloc fail*/\n\n  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)\n  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))\n    error = 83; /*alloc fail*/\n\n  if(!error)\n  {\n    /*step 1: count number of instances of each code length*/\n    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];\n    /*step 2: generate the nextcode values*/\n    for(bits = 1; bits <= tree->maxbitlen; ++bits)\n    {\n      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;\n    }\n    /*step 3: generate all the codes*/\n    for(n = 0; n != tree->numcodes; ++n)\n    {\n      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;\n    }\n  }\n\n  uivector_cleanup(&blcount);\n  uivector_cleanup(&nextcode);\n\n  if(!error) return HuffmanTree_make2DTree(tree);\n  else return error;\n}\n\n/*\ngiven the code lengths (as stored in the PNG file), generate the tree as defined\nby Deflate. maxbitlen is the maximum bits that a code in the tree can have.\nreturn value is error.\n*/\nstatic unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,\n                                            size_t numcodes, unsigned maxbitlen)\n{\n  unsigned i;\n  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));\n  if(!tree->lengths) return 83; /*alloc fail*/\n  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];\n  tree->numcodes = (unsigned)numcodes; /*number of symbols*/\n  tree->maxbitlen = maxbitlen;\n  return HuffmanTree_makeFromLengths2(tree);\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/*BPM: Boundary Package Merge, see \"A Fast and Space-Economical Algorithm for Length-Limited Coding\",\nJyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/\n\n/*chain node for boundary package merge*/\ntypedef struct BPMNode\n{\n  int weight; /*the sum of all weights in this chain*/\n  unsigned index; /*index of this leaf node (called \"count\" in the paper)*/\n  struct BPMNode* tail; /*the next nodes in this chain (null if last)*/\n  int in_use;\n} BPMNode;\n\n/*lists of chains*/\ntypedef struct BPMLists\n{\n  /*memory pool*/\n  unsigned memsize;\n  BPMNode* memory;\n  unsigned numfree;\n  unsigned nextfree;\n  BPMNode** freelist;\n  /*two heads of lookahead chains per list*/\n  unsigned listsize;\n  BPMNode** chains0;\n  BPMNode** chains1;\n} BPMLists;\n\n/*creates a new chain node with the given parameters, from the memory in the lists */\nstatic BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail)\n{\n  unsigned i;\n  BPMNode* result;\n\n  /*memory full, so garbage collect*/\n  if(lists->nextfree >= lists->numfree)\n  {\n    /*mark only those that are in use*/\n    for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0;\n    for(i = 0; i != lists->listsize; ++i)\n    {\n      BPMNode* node;\n      for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1;\n      for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1;\n    }\n    /*collect those that are free*/\n    lists->numfree = 0;\n    for(i = 0; i != lists->memsize; ++i)\n    {\n      if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i];\n    }\n    lists->nextfree = 0;\n  }\n\n  result = lists->freelist[lists->nextfree++];\n  result->weight = weight;\n  result->index = index;\n  result->tail = tail;\n  return result;\n}\n\nstatic int bpmnode_compare(const void* a, const void* b)\n{\n  int wa = ((const BPMNode*)a)->weight;\n  int wb = ((const BPMNode*)b)->weight;\n  if(wa < wb) return -1;\n  if(wa > wb) return 1;\n  /*make the qsort a stable sort*/\n  return ((const BPMNode*)a)->index < ((const BPMNode*)b)->index ? 1 : -1;\n}\n\n/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/\nstatic void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num)\n{\n  unsigned lastindex = lists->chains1[c]->index;\n\n  if(c == 0)\n  {\n    if(lastindex >= numpresent) return;\n    lists->chains0[c] = lists->chains1[c];\n    lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0);\n  }\n  else\n  {\n    /*sum of the weights of the head nodes of the previous lookahead chains.*/\n    int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight;\n    lists->chains0[c] = lists->chains1[c];\n    if(lastindex < numpresent && sum > leaves[lastindex].weight)\n    {\n      lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail);\n      return;\n    }\n    lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]);\n    /*in the end we are only interested in the chain of the last list, so no\n    need to recurse if we're at the last one (this gives measurable speedup)*/\n    if(num + 1 < (int)(2 * numpresent - 2))\n    {\n      boundaryPM(lists, leaves, numpresent, c - 1, num);\n      boundaryPM(lists, leaves, numpresent, c - 1, num);\n    }\n  }\n}\n\nunsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,\n                                      size_t numcodes, unsigned maxbitlen)\n{\n  unsigned error = 0;\n  unsigned i;\n  size_t numpresent = 0; /*number of symbols with non-zero frequency*/\n  BPMNode* leaves; /*the symbols, only those with > 0 frequency*/\n\n  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/\n  if(( (size_t)1 << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/\n\n  leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves));\n  if(!leaves) return 83; /*alloc fail*/\n\n  for(i = 0; i != numcodes; ++i)\n  {\n    if(frequencies[i] > 0)\n    {\n      leaves[numpresent].weight = (int)frequencies[i];\n      leaves[numpresent].index = i;\n      ++numpresent;\n    }\n  }\n\n  for(i = 0; i != numcodes; ++i) lengths[i] = 0;\n\n  /*ensure at least two present symbols. There should be at least one symbol\n  according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To\n  make these work as well ensure there are at least two symbols. The\n  Package-Merge code below also doesn't work correctly if there's only one\n  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/\n  if(numpresent == 0)\n  {\n    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/\n  }\n  else if(numpresent == 1)\n  {\n    lengths[leaves[0].index] = 1;\n    lengths[leaves[0].index == 0 ? 1 : 0] = 1;\n  }\n  else\n  {\n    BPMLists lists;\n    BPMNode* node;\n\n    qsort(leaves, numpresent, sizeof(BPMNode), bpmnode_compare);\n\n    lists.listsize = maxbitlen;\n    lists.memsize = 2 * maxbitlen * (maxbitlen + 1);\n    lists.nextfree = 0;\n    lists.numfree = lists.memsize;\n    lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory));\n    lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*));\n    lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));\n    lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));\n    if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i];\n\n      bpmnode_create(&lists, leaves[0].weight, 1, 0);\n      bpmnode_create(&lists, leaves[1].weight, 2, 0);\n\n      for(i = 0; i != lists.listsize; ++i)\n      {\n        lists.chains0[i] = &lists.memory[0];\n        lists.chains1[i] = &lists.memory[1];\n      }\n\n      /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/\n      for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i);\n\n      for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail)\n      {\n        for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index];\n      }\n    }\n\n    lodepng_free(lists.memory);\n    lodepng_free(lists.freelist);\n    lodepng_free(lists.chains0);\n    lodepng_free(lists.chains1);\n  }\n\n  lodepng_free(leaves);\n  return error;\n}\n\n/*Create the Huffman tree given the symbol frequencies*/\nstatic unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,\n                                                size_t mincodes, size_t numcodes, unsigned maxbitlen)\n{\n  unsigned error = 0;\n  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/\n  tree->maxbitlen = maxbitlen;\n  tree->numcodes = (unsigned)numcodes; /*number of symbols*/\n  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));\n  if(!tree->lengths) return 83; /*alloc fail*/\n  /*initialize all lengths to 0*/\n  memset(tree->lengths, 0, numcodes * sizeof(unsigned));\n\n  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);\n  if(!error) error = HuffmanTree_makeFromLengths2(tree);\n  return error;\n}\n\nstatic unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index)\n{\n  return tree->tree1d[index];\n}\n\nstatic unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index)\n{\n  return tree->lengths[index];\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/\nstatic unsigned generateFixedLitLenTree(HuffmanTree* tree)\n{\n  unsigned i, error = 0;\n  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));\n  if(!bitlen) return 83; /*alloc fail*/\n\n  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/\n  for(i =   0; i <= 143; ++i) bitlen[i] = 8;\n  for(i = 144; i <= 255; ++i) bitlen[i] = 9;\n  for(i = 256; i <= 279; ++i) bitlen[i] = 7;\n  for(i = 280; i <= 287; ++i) bitlen[i] = 8;\n\n  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);\n\n  lodepng_free(bitlen);\n  return error;\n}\n\n/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/\nstatic unsigned generateFixedDistanceTree(HuffmanTree* tree)\n{\n  unsigned i, error = 0;\n  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));\n  if(!bitlen) return 83; /*alloc fail*/\n\n  /*there are 32 distance codes, but 30-31 are unused*/\n  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;\n  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);\n\n  lodepng_free(bitlen);\n  return error;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/*\nreturns the code, or (unsigned)(-1) if error happened\ninbitlength is the length of the complete buffer, in bits (so its byte length times 8)\n*/\nstatic unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,\n                                    const HuffmanTree* codetree, size_t inbitlength)\n{\n  unsigned treepos = 0, ct;\n  for(;;)\n  {\n    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/\n    /*\n    decode the symbol from the tree. The \"readBitFromStream\" code is inlined in\n    the expression below because this is the biggest bottleneck while decoding\n    */\n    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];\n    ++(*bp);\n    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/\n    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/\n\n    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/\n  }\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Inflator (Decompressor)                                                / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/\nstatic void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)\n{\n  /*TODO: check for out of memory errors*/\n  generateFixedLitLenTree(tree_ll);\n  generateFixedDistanceTree(tree_d);\n}\n\n/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/\nstatic unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,\n                                      const unsigned char* in, size_t* bp, size_t inlength)\n{\n  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/\n  unsigned error = 0;\n  unsigned n, HLIT, HDIST, HCLEN, i;\n  size_t inbitlength = inlength * 8;\n\n  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/\n  unsigned* bitlen_ll = 0; /*lit,len code lengths*/\n  unsigned* bitlen_d = 0; /*dist code lengths*/\n  /*code length code lengths (\"clcl\"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/\n  unsigned* bitlen_cl = 0;\n  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/\n\n  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/\n\n  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/\n  HLIT =  readBitsFromStream(bp, in, 5) + 257;\n  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/\n  HDIST = readBitsFromStream(bp, in, 5) + 1;\n  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/\n  HCLEN = readBitsFromStream(bp, in, 4) + 4;\n\n  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/\n\n  HuffmanTree_init(&tree_cl);\n\n  while(!error)\n  {\n    /*read the code length codes out of 3 * (amount of code length codes) bits*/\n\n    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));\n    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);\n\n    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i)\n    {\n      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);\n      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/\n    }\n\n    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);\n    if(error) break;\n\n    /*now we can use this tree to read the lengths for the tree that this function will return*/\n    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));\n    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));\n    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;\n    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;\n\n    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/\n    i = 0;\n    while(i < HLIT + HDIST)\n    {\n      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);\n      if(code <= 15) /*a length code*/\n      {\n        if(i < HLIT) bitlen_ll[i] = code;\n        else bitlen_d[i - HLIT] = code;\n        ++i;\n      }\n      else if(code == 16) /*repeat previous*/\n      {\n        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/\n        unsigned value; /*set value to the previous code*/\n\n        if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/\n\n        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 2);\n\n        if(i < HLIT + 1) value = bitlen_ll[i - 1];\n        else value = bitlen_d[i - HLIT - 1];\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/\n          if(i < HLIT) bitlen_ll[i] = value;\n          else bitlen_d[i - HLIT] = value;\n          ++i;\n        }\n      }\n      else if(code == 17) /*repeat \"0\" 3-10 times*/\n      {\n        unsigned replength = 3; /*read in the bits that indicate repeat length*/\n        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 3);\n\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/\n\n          if(i < HLIT) bitlen_ll[i] = 0;\n          else bitlen_d[i - HLIT] = 0;\n          ++i;\n        }\n      }\n      else if(code == 18) /*repeat \"0\" 11-138 times*/\n      {\n        unsigned replength = 11; /*read in the bits that indicate repeat length*/\n        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 7);\n\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/\n\n          if(i < HLIT) bitlen_ll[i] = 0;\n          else bitlen_d[i - HLIT] = 0;\n          ++i;\n        }\n      }\n      else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n      {\n        if(code == (unsigned)(-1))\n        {\n          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n          (10=no endcode, 11=wrong jump outside of tree)*/\n          error = (*bp) > inbitlength ? 10 : 11;\n        }\n        else error = 16; /*unexisting code, this can never happen*/\n        break;\n      }\n    }\n    if(error) break;\n\n    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/\n\n    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/\n    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);\n    if(error) break;\n    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);\n\n    break; /*end of error-while*/\n  }\n\n  lodepng_free(bitlen_cl);\n  lodepng_free(bitlen_ll);\n  lodepng_free(bitlen_d);\n  HuffmanTree_cleanup(&tree_cl);\n\n  return error;\n}\n\n/*inflate a block with dynamic of fixed Huffman tree*/\nstatic unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,\n                                    size_t* pos, size_t inlength, unsigned btype)\n{\n  unsigned error = 0;\n  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/\n  HuffmanTree tree_d; /*the huffman tree for distance codes*/\n  size_t inbitlength = inlength * 8;\n\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n\n  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);\n  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);\n\n  while(!error) /*decode all symbols until end reached, breaks at end code*/\n  {\n    /*code_ll is literal, length or end code*/\n    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);\n    if(code_ll <= 255) /*literal symbol*/\n    {\n      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/\n      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);\n      out->data[*pos] = (unsigned char)code_ll;\n      ++(*pos);\n    }\n    else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/\n    {\n      unsigned code_d, distance;\n      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/\n      size_t start, forward, backward, length;\n\n      /*part 1: get length base*/\n      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];\n\n      /*part 2: get extra bits and add the value of that to length*/\n      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];\n      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/\n      length += readBitsFromStream(bp, in, numextrabits_l);\n\n      /*part 3: get distance code*/\n      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);\n      if(code_d > 29)\n      {\n        if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n        {\n          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n          (10=no endcode, 11=wrong jump outside of tree)*/\n          error = (*bp) > inlength * 8 ? 10 : 11;\n        }\n        else error = 18; /*error: invalid distance code (30-31 are never used)*/\n        break;\n      }\n      distance = DISTANCEBASE[code_d];\n\n      /*part 4: get extra bits from distance*/\n      numextrabits_d = DISTANCEEXTRA[code_d];\n      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/\n      distance += readBitsFromStream(bp, in, numextrabits_d);\n\n      /*part 5: fill in all the out[n] values based on the length and dist*/\n      start = (*pos);\n      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/\n      backward = start - distance;\n\n      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);\n      if (distance < length) {\n        for(forward = 0; forward < length; ++forward)\n        {\n          out->data[(*pos)++] = out->data[backward++];\n        }\n      } else {\n        memcpy(out->data + *pos, out->data + backward, length);\n        *pos += length;\n      }\n    }\n    else if(code_ll == 256)\n    {\n      break; /*end code, break the loop*/\n    }\n    else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n    {\n      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n      (10=no endcode, 11=wrong jump outside of tree)*/\n      error = ((*bp) > inlength * 8) ? 10 : 11;\n      break;\n    }\n  }\n\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n\n  return error;\n}\n\nstatic unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)\n{\n  size_t p;\n  unsigned LEN, NLEN, n, error = 0;\n\n  /*go to first boundary of byte*/\n  while(((*bp) & 0x7) != 0) ++(*bp);\n  p = (*bp) / 8; /*byte position*/\n\n  /*read LEN (2 bytes) and NLEN (2 bytes)*/\n  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/\n  LEN = in[p] + 256u * in[p + 1]; p += 2;\n  NLEN = in[p] + 256u * in[p + 1]; p += 2;\n\n  /*check if 16-bit NLEN is really the one's complement of LEN*/\n  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/\n\n  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/\n\n  /*read the literal data: LEN bytes are now stored in the out buffer*/\n  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/\n  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];\n\n  (*bp) = p * 8;\n\n  return error;\n}\n\nstatic unsigned lodepng_inflatev(ucvector* out,\n                                 const unsigned char* in, size_t insize,\n                                 const LodePNGDecompressSettings* settings)\n{\n  /*bit pointer in the \"in\" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/\n  size_t bp = 0;\n  unsigned BFINAL = 0;\n  size_t pos = 0; /*byte position in the out buffer*/\n  unsigned error = 0;\n\n  (void)settings;\n\n  while(!BFINAL)\n  {\n    unsigned BTYPE;\n    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/\n    BFINAL = readBitFromStream(&bp, in);\n    BTYPE = 1u * readBitFromStream(&bp, in);\n    BTYPE += 2u * readBitFromStream(&bp, in);\n\n    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/\n    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/\n    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/\n\n    if(error) return error;\n  }\n\n  return error;\n}\n\nunsigned lodepng_inflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGDecompressSettings* settings)\n{\n  unsigned error;\n  ucvector v;\n  ucvector_init_buffer(&v, *out, *outsize);\n  error = lodepng_inflatev(&v, in, insize, settings);\n  *out = v.data;\n  *outsize = v.size;\n  return error;\n}\n\nstatic unsigned inflate(unsigned char** out, size_t* outsize,\n                        const unsigned char* in, size_t insize,\n                        const LodePNGDecompressSettings* settings)\n{\n  if(settings->custom_inflate)\n  {\n    return settings->custom_inflate(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_inflate(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Deflator (Compressor)                                                  / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;\n\n/*bitlen is the size in bits of the code*/\nstatic void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)\n{\n  addBitsToStreamReversed(bp, compressed, code, bitlen);\n}\n\n/*search the index in the array, that has the largest value smaller than or equal to the given value,\ngiven array must be sorted (if no value is smaller, it returns the size of the given array)*/\nstatic size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)\n{\n  /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/\n  size_t left = 1;\n  size_t right = array_size - 1;\n\n  while(left <= right) {\n    size_t mid = (left + right) >> 1;\n    if (array[mid] >= value) right = mid - 1;\n    else left = mid + 1;\n  }\n  if(left >= array_size || array[left] > value) left--;\n  return left;\n}\n\nstatic void addLengthDistance(uivector* values, size_t length, size_t distance)\n{\n  /*values in encoded vector are those used by deflate:\n  0-255: literal bytes\n  256: end\n  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)\n  286-287: invalid*/\n\n  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);\n  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);\n  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);\n  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);\n\n  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);\n  uivector_push_back(values, extra_length);\n  uivector_push_back(values, dist_code);\n  uivector_push_back(values, extra_distance);\n}\n\n/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3\nbytes as input because 3 is the minimum match length for deflate*/\nstatic const unsigned HASH_NUM_VALUES = 65536;\nstatic const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/\n\ntypedef struct Hash\n{\n  int* head; /*hash value to head circular pos - can be outdated if went around window*/\n  /*circular pos to prev circular pos*/\n  unsigned short* chain;\n  int* val; /*circular pos to hash value*/\n\n  /*TODO: do this not only for zeros but for any repeated byte. However for PNG\n  it's always going to be the zeros that dominate, so not important for PNG*/\n  int* headz; /*similar to head, but for chainz*/\n  unsigned short* chainz; /*those with same amount of zeros*/\n  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/\n} Hash;\n\nstatic unsigned hash_init(Hash* hash, unsigned windowsize)\n{\n  unsigned i;\n  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);\n  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);\n  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n\n  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));\n  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n\n  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros)\n  {\n    return 83; /*alloc fail*/\n  }\n\n  /*initialize hash table*/\n  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/\n\n  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/\n\n  return 0;\n}\n\nstatic void hash_cleanup(Hash* hash)\n{\n  lodepng_free(hash->head);\n  lodepng_free(hash->val);\n  lodepng_free(hash->chain);\n\n  lodepng_free(hash->zeros);\n  lodepng_free(hash->headz);\n  lodepng_free(hash->chainz);\n}\n\n\n\nstatic unsigned getHash(const unsigned char* data, size_t size, size_t pos)\n{\n  unsigned result = 0;\n  if(pos + 2 < size)\n  {\n    /*A simple shift and xor hash is used. Since the data of PNGs is dominated\n    by zeroes due to the filters, a better hash does not have a significant\n    effect on speed in traversing the chain, and causes more time spend on\n    calculating the hash.*/\n    result ^= (unsigned)(data[pos + 0] << 0u);\n    result ^= (unsigned)(data[pos + 1] << 4u);\n    result ^= (unsigned)(data[pos + 2] << 8u);\n  } else {\n    size_t amount, i;\n    if(pos >= size) return 0;\n    amount = size - pos;\n    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));\n  }\n  return result & HASH_BIT_MASK;\n}\n\nstatic unsigned countZeros(const unsigned char* data, size_t size, size_t pos)\n{\n  const unsigned char* start = data + pos;\n  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;\n  if(end > data + size) end = data + size;\n  data = start;\n  while(data != end && *data == 0) ++data;\n  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/\n  return (unsigned)(data - start);\n}\n\n/*wpos = pos & (windowsize - 1)*/\nstatic void updateHashChain(Hash* hash, int wpos, unsigned hashval, unsigned short numzeros)\n{\n  hash->val[wpos] = (int)hashval;\n  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];\n  hash->head[hashval] = wpos;\n\n  hash->zeros[wpos] = numzeros;\n  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];\n  hash->headz[numzeros] = wpos;\n}\n\n/*\nLZ77-encode the data. Return value is error code. The input are raw bytes, the output\nis in the form of unsigned integers with codes representing for example literal bytes, or\nlength/distance pairs.\nIt uses a hash table technique to let it encode faster. When doing LZ77 encoding, a\nsliding window (of windowsize) is used, and all past bytes in that window can be used as\nthe \"dictionary\". A brute force search through all possible distances would be slow, and\nthis hash technique is one out of several ways to speed this up.\n*/\nstatic unsigned encodeLZ77(uivector* out, Hash* hash,\n                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,\n                           unsigned minmatch, unsigned nicematch, unsigned lazymatching)\n{\n  size_t pos;\n  unsigned i, error = 0;\n  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/\n  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;\n  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;\n\n  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/\n  unsigned numzeros = 0;\n\n  unsigned offset; /*the offset represents the distance in LZ77 terminology*/\n  unsigned length;\n  unsigned lazy = 0;\n  unsigned lazylength = 0, lazyoffset = 0;\n  unsigned hashval;\n  unsigned current_offset, current_length;\n  unsigned prev_offset;\n  const unsigned char *lastptr, *foreptr, *backptr;\n  unsigned hashpos;\n\n  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/\n  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/\n\n  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;\n\n  for(pos = inpos; pos < insize; ++pos)\n  {\n    unsigned int wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/\n    unsigned chainlength = 0;\n\n    hashval = getHash(in, insize, pos);\n\n    if(usezeros && hashval == 0)\n    {\n      if(numzeros == 0) numzeros = countZeros(in, insize, pos);\n      else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;\n    }\n    else\n    {\n      numzeros = 0;\n    }\n\n    updateHashChain(hash, wpos, hashval, numzeros);\n\n    /*the length and offset found for the current position*/\n    length = 0;\n    offset = 0;\n\n    hashpos = hash->chain[wpos];\n\n    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];\n\n    /*search for the longest string*/\n    prev_offset = 0;\n    for(;;)\n    {\n      if(chainlength++ >= maxchainlength) break;\n      current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize;\n\n      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/\n      prev_offset = current_offset;\n      if(current_offset > 0)\n      {\n        /*test the next characters*/\n        foreptr = &in[pos];\n        backptr = &in[pos - current_offset];\n\n        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/\n        if(numzeros >= 3)\n        {\n          unsigned skip = hash->zeros[hashpos];\n          if(skip > numzeros) skip = numzeros;\n          backptr += skip;\n          foreptr += skip;\n        }\n\n        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/\n        {\n          ++backptr;\n          ++foreptr;\n        }\n        current_length = (unsigned)(foreptr - &in[pos]);\n\n        if(current_length > length)\n        {\n          length = current_length; /*the longest length*/\n          offset = current_offset; /*the offset that is related to this longest length*/\n          /*jump out once a length of max length is found (speed gain). This also jumps\n          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/\n          if(current_length >= nicematch) break;\n        }\n      }\n\n      if(hashpos == hash->chain[hashpos]) break;\n\n      if(numzeros >= 3 && length > numzeros)\n      {\n        hashpos = hash->chainz[hashpos];\n        if(hash->zeros[hashpos] != numzeros) break;\n      }\n      else\n      {\n        hashpos = hash->chain[hashpos];\n        /*outdated hash value, happens if particular value was not encountered in whole last window*/\n        if(hash->val[hashpos] != (int)hashval) break;\n      }\n    }\n\n    if(lazymatching)\n    {\n      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH)\n      {\n        lazy = 1;\n        lazylength = length;\n        lazyoffset = offset;\n        continue; /*try the next byte*/\n      }\n      if(lazy)\n      {\n        lazy = 0;\n        if(pos == 0) ERROR_BREAK(81);\n        if(length > lazylength + 1)\n        {\n          /*push the previous character as literal*/\n          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);\n        }\n        else\n        {\n          length = lazylength;\n          offset = lazyoffset;\n          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/\n          hash->headz[numzeros] = -1; /*idem*/\n          --pos;\n        }\n      }\n    }\n    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);\n\n    /*encode it as length/distance pair or literal value*/\n    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/\n    {\n      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    else if(length < minmatch || (length == 3 && offset > 4096))\n    {\n      /*compensate for the fact that longer offsets have more extra bits, a\n      length of only 3 may be not worth it then*/\n      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    else\n    {\n      addLengthDistance(out, length, offset);\n      for(i = 1; i < length; ++i)\n      {\n        ++pos;\n        wpos = pos & (windowsize - 1);\n        hashval = getHash(in, insize, pos);\n        if(usezeros && hashval == 0)\n        {\n          if(numzeros == 0) numzeros = countZeros(in, insize, pos);\n          else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;\n        }\n        else\n        {\n          numzeros = 0;\n        }\n        updateHashChain(hash, wpos, hashval, numzeros);\n      }\n    }\n  } /*end of the loop through each character of input*/\n\n  return error;\n}\n\n/* /////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)\n{\n  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,\n  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/\n\n  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;\n  unsigned datapos = 0;\n  for(i = 0; i != numdeflateblocks; ++i)\n  {\n    unsigned BFINAL, BTYPE, LEN, NLEN;\n    unsigned char firstbyte;\n\n    BFINAL = (i == numdeflateblocks - 1);\n    BTYPE = 0;\n\n    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));\n    ucvector_push_back(out, firstbyte);\n\n    LEN = 65535;\n    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;\n    NLEN = 65535 - LEN;\n\n    ucvector_push_back(out, (unsigned char)(LEN & 255));\n    ucvector_push_back(out, (unsigned char)(LEN >> 8));\n    ucvector_push_back(out, (unsigned char)(NLEN & 255));\n    ucvector_push_back(out, (unsigned char)(NLEN >> 8));\n\n    /*Decompressed data*/\n    for(j = 0; j < 65535 && datapos < datasize; ++j)\n    {\n      ucvector_push_back(out, data[datapos++]);\n    }\n  }\n\n  return 0;\n}\n\n/*\nwrite the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.\ntree_ll: the tree for lit and len codes.\ntree_d: the tree for distance codes.\n*/\nstatic void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,\n                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d)\n{\n  size_t i = 0;\n  for(i = 0; i != lz77_encoded->size; ++i)\n  {\n    unsigned val = lz77_encoded->data[i];\n    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));\n    if(val > 256) /*for a length code, 3 more things have to be added*/\n    {\n      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;\n      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];\n      unsigned length_extra_bits = lz77_encoded->data[++i];\n\n      unsigned distance_code = lz77_encoded->data[++i];\n\n      unsigned distance_index = distance_code;\n      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];\n      unsigned distance_extra_bits = lz77_encoded->data[++i];\n\n      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),\n                       HuffmanTree_getLength(tree_d, distance_code));\n      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);\n    }\n  }\n}\n\n/*Deflate for a block of type \"dynamic\", that is, with freely, optimally, created huffman trees*/\nstatic unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,\n                               const unsigned char* data, size_t datapos, size_t dataend,\n                               const LodePNGCompressSettings* settings, unsigned final)\n{\n  unsigned error = 0;\n\n  /*\n  A block is compressed as follows: The PNG data is lz77 encoded, resulting in\n  literal bytes and length/distance pairs. This is then huffman compressed with\n  two huffman trees. One huffman tree is used for the lit and len values (\"ll\"),\n  another huffman tree is used for the dist values (\"d\"). These two trees are\n  stored using their code lengths, and to compress even more these code lengths\n  are also run-length encoded and huffman compressed. This gives a huffman tree\n  of code lengths \"cl\". The code lenghts used to describe this third tree are\n  the code length code lengths (\"clcl\").\n  */\n\n  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/\n  uivector lz77_encoded;\n  HuffmanTree tree_ll; /*tree for lit,len values*/\n  HuffmanTree tree_d; /*tree for distance codes*/\n  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/\n  uivector frequencies_ll; /*frequency of lit,len codes*/\n  uivector frequencies_d; /*frequency of dist codes*/\n  uivector frequencies_cl; /*frequency of code length codes*/\n  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/\n  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/\n  /*bitlen_cl is the code length code lengths (\"clcl\"). The bit lengths of codes to represent tree_cl\n  (these are written as is in the file, it would be crazy to compress these using yet another huffman\n  tree that needs to be represented by yet another set of code lengths)*/\n  uivector bitlen_cl;\n  size_t datasize = dataend - datapos;\n\n  /*\n  Due to the huffman compression of huffman tree representations (\"two levels\"), there are some anologies:\n  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.\n  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.\n  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.\n  */\n\n  unsigned BFINAL = final;\n  size_t numcodes_ll, numcodes_d, i;\n  unsigned HLIT, HDIST, HCLEN;\n\n  uivector_init(&lz77_encoded);\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n  HuffmanTree_init(&tree_cl);\n  uivector_init(&frequencies_ll);\n  uivector_init(&frequencies_d);\n  uivector_init(&frequencies_cl);\n  uivector_init(&bitlen_lld);\n  uivector_init(&bitlen_lld_e);\n  uivector_init(&bitlen_cl);\n\n  /*This while loop never loops due to a break at the end, it is here to\n  allow breaking out of it to the cleanup phase on error conditions.*/\n  while(!error)\n  {\n    if(settings->use_lz77)\n    {\n      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,\n                         settings->minmatch, settings->nicematch, settings->lazymatching);\n      if(error) break;\n    }\n    else\n    {\n      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);\n      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/\n    }\n\n    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);\n    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);\n\n    /*Count the frequencies of lit, len and dist codes*/\n    for(i = 0; i != lz77_encoded.size; ++i)\n    {\n      unsigned symbol = lz77_encoded.data[i];\n      ++frequencies_ll.data[symbol];\n      if(symbol > 256)\n      {\n        unsigned dist = lz77_encoded.data[i + 2];\n        ++frequencies_d.data[dist];\n        i += 3;\n      }\n    }\n    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/\n\n    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/\n    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);\n    if(error) break;\n    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/\n    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);\n    if(error) break;\n\n    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;\n    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;\n    /*store the code lengths of both generated trees in bitlen_lld*/\n    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));\n    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));\n\n    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),\n    17 (3-10 zeroes), 18 (11-138 zeroes)*/\n    for(i = 0; i != (unsigned)bitlen_lld.size; ++i)\n    {\n      unsigned j = 0; /*amount of repititions*/\n      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;\n\n      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/\n      {\n        ++j; /*include the first zero*/\n        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/\n        {\n          uivector_push_back(&bitlen_lld_e, 17);\n          uivector_push_back(&bitlen_lld_e, j - 3);\n        }\n        else /*repeat code 18 supports max 138 zeroes*/\n        {\n          if(j > 138) j = 138;\n          uivector_push_back(&bitlen_lld_e, 18);\n          uivector_push_back(&bitlen_lld_e, j - 11);\n        }\n        i += (j - 1);\n      }\n      else if(j >= 3) /*repeat code for value other than zero*/\n      {\n        size_t k;\n        unsigned num = j / 6, rest = j % 6;\n        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);\n        for(k = 0; k < num; ++k)\n        {\n          uivector_push_back(&bitlen_lld_e, 16);\n          uivector_push_back(&bitlen_lld_e, 6 - 3);\n        }\n        if(rest >= 3)\n        {\n          uivector_push_back(&bitlen_lld_e, 16);\n          uivector_push_back(&bitlen_lld_e, rest - 3);\n        }\n        else j -= rest;\n        i += j;\n      }\n      else /*too short to benefit from repeat code*/\n      {\n        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);\n      }\n    }\n\n    /*generate tree_cl, the huffmantree of huffmantrees*/\n\n    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != bitlen_lld_e.size; ++i)\n    {\n      ++frequencies_cl.data[bitlen_lld_e.data[i]];\n      /*after a repeat code come the bits that specify the number of repetitions,\n      those don't need to be in the frequencies_cl calculation*/\n      if(bitlen_lld_e.data[i] >= 16) ++i;\n    }\n\n    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,\n                                            frequencies_cl.size, frequencies_cl.size, 7);\n    if(error) break;\n\n    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != tree_cl.numcodes; ++i)\n    {\n      /*lenghts of code length tree is in the order as specified by deflate*/\n      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);\n    }\n    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)\n    {\n      /*remove zeros at the end, but minimum size must be 4*/\n      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    if(error) break;\n\n    /*\n    Write everything into the output\n\n    After the BFINAL and BTYPE, the dynamic block consists out of the following:\n    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN\n    - (HCLEN+4)*3 bits code lengths of code length alphabet\n    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length\n      alphabet, + possible repetition codes 16, 17, 18)\n    - HDIST + 1 code lengths of distance alphabet (encoded using the code length\n      alphabet, + possible repetition codes 16, 17, 18)\n    - compressed data\n    - 256 (end code)\n    */\n\n    /*Write block type*/\n    addBitToStream(bp, out, BFINAL);\n    addBitToStream(bp, out, 0); /*first bit of BTYPE \"dynamic\"*/\n    addBitToStream(bp, out, 1); /*second bit of BTYPE \"dynamic\"*/\n\n    /*write the HLIT, HDIST and HCLEN values*/\n    HLIT = (unsigned)(numcodes_ll - 257);\n    HDIST = (unsigned)(numcodes_d - 1);\n    HCLEN = (unsigned)bitlen_cl.size - 4;\n    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/\n    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;\n    addBitsToStream(bp, out, HLIT, 5);\n    addBitsToStream(bp, out, HDIST, 5);\n    addBitsToStream(bp, out, HCLEN, 4);\n\n    /*write the code lenghts of the code length alphabet*/\n    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);\n\n    /*write the lenghts of the lit/len AND the dist alphabet*/\n    for(i = 0; i != bitlen_lld_e.size; ++i)\n    {\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),\n                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));\n      /*extra bits of repeat codes*/\n      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);\n      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);\n      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);\n    }\n\n    /*write the compressed data symbols*/\n    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);\n    /*error: the length of the end code 256 must be larger than 0*/\n    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);\n\n    /*write the end code*/\n    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));\n\n    break; /*end of error-while*/\n  }\n\n  /*cleanup*/\n  uivector_cleanup(&lz77_encoded);\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n  HuffmanTree_cleanup(&tree_cl);\n  uivector_cleanup(&frequencies_ll);\n  uivector_cleanup(&frequencies_d);\n  uivector_cleanup(&frequencies_cl);\n  uivector_cleanup(&bitlen_lld_e);\n  uivector_cleanup(&bitlen_lld);\n  uivector_cleanup(&bitlen_cl);\n\n  return error;\n}\n\nstatic unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,\n                             const unsigned char* data,\n                             size_t datapos, size_t dataend,\n                             const LodePNGCompressSettings* settings, unsigned final)\n{\n  HuffmanTree tree_ll; /*tree for literal values and length codes*/\n  HuffmanTree tree_d; /*tree for distance codes*/\n\n  unsigned BFINAL = final;\n  unsigned error = 0;\n  size_t i;\n\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n\n  generateFixedLitLenTree(&tree_ll);\n  generateFixedDistanceTree(&tree_d);\n\n  addBitToStream(bp, out, BFINAL);\n  addBitToStream(bp, out, 1); /*first bit of BTYPE*/\n  addBitToStream(bp, out, 0); /*second bit of BTYPE*/\n\n  if(settings->use_lz77) /*LZ77 encoded*/\n  {\n    uivector lz77_encoded;\n    uivector_init(&lz77_encoded);\n    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,\n                       settings->minmatch, settings->nicematch, settings->lazymatching);\n    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);\n    uivector_cleanup(&lz77_encoded);\n  }\n  else /*no LZ77, but still will be Huffman compressed*/\n  {\n    for(i = datapos; i < dataend; ++i)\n    {\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));\n    }\n  }\n  /*add END code*/\n  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));\n\n  /*cleanup*/\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n\n  return error;\n}\n\nstatic unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,\n                                 const LodePNGCompressSettings* settings)\n{\n  unsigned error = 0;\n  size_t i, blocksize, numdeflateblocks;\n  size_t bp = 0; /*the bit pointer*/\n  Hash hash;\n\n  if(settings->btype > 2) return 61;\n  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);\n  else if(settings->btype == 1) blocksize = insize;\n  else /*if(settings->btype == 2)*/\n  {\n    /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/\n    blocksize = insize / 8 + 8;\n    if(blocksize < 65536) blocksize = 65536;\n    if(blocksize > 262144) blocksize = 262144;\n  }\n\n  numdeflateblocks = (insize + blocksize - 1) / blocksize;\n  if(numdeflateblocks == 0) numdeflateblocks = 1;\n\n  error = hash_init(&hash, settings->windowsize);\n  if(error) return error;\n\n  for(i = 0; i != numdeflateblocks && !error; ++i)\n  {\n    unsigned final = (i == numdeflateblocks - 1);\n    size_t start = i * blocksize;\n    size_t end = start + blocksize;\n    if(end > insize) end = insize;\n\n    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);\n    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);\n  }\n\n  hash_cleanup(&hash);\n\n  return error;\n}\n\nunsigned lodepng_deflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGCompressSettings* settings)\n{\n  unsigned error;\n  ucvector v;\n  ucvector_init_buffer(&v, *out, *outsize);\n  error = lodepng_deflatev(&v, in, insize, settings);\n  *out = v.data;\n  *outsize = v.size;\n  return error;\n}\n\nstatic unsigned deflate(unsigned char** out, size_t* outsize,\n                        const unsigned char* in, size_t insize,\n                        const LodePNGCompressSettings* settings)\n{\n  if(settings->custom_deflate)\n  {\n    return settings->custom_deflate(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_deflate(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Adler32                                                                  */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)\n{\n   unsigned s1 = adler & 0xffff;\n   unsigned s2 = (adler >> 16) & 0xffff;\n\n  while(len > 0)\n  {\n    /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/\n    unsigned amount = len > 5550 ? 5550 : len;\n    len -= amount;\n    while(amount > 0)\n    {\n      s1 += (*data++);\n      s2 += s1;\n      --amount;\n    }\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s2 << 16) | s1;\n}\n\n/*Return the adler32 of the bytes data[0..len-1]*/\nstatic unsigned adler32(const unsigned char* data, unsigned len)\n{\n  return update_adler32(1L, data, len);\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Zlib                                                                   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nunsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                 size_t insize, const LodePNGDecompressSettings* settings)\n{\n  unsigned error = 0;\n  unsigned CM, CINFO, FDICT;\n\n  if(insize < 2) return 53; /*error, size of zlib data too small*/\n  /*read information from zlib header*/\n  if((in[0] * 256 + in[1]) % 31 != 0)\n  {\n    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/\n    return 24;\n  }\n\n  CM = in[0] & 15;\n  CINFO = (in[0] >> 4) & 15;\n  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/\n  FDICT = (in[1] >> 5) & 1;\n  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/\n\n  if(CM != 8 || CINFO > 7)\n  {\n    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/\n    return 25;\n  }\n  if(FDICT != 0)\n  {\n    /*error: the specification of PNG says about the zlib stream:\n      \"The additional flags shall not specify a preset dictionary.\"*/\n    return 26;\n  }\n\n  error = inflate(out, outsize, in + 2, insize - 2, settings);\n  if(error) return error;\n\n  if(!settings->ignore_adler32)\n  {\n    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);\n    unsigned checksum = adler32(*out, (unsigned)(*outsize));\n    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/\n  }\n\n  return 0; /*no error*/\n}\n\nstatic unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                size_t insize, const LodePNGDecompressSettings* settings)\n{\n  if(settings->custom_zlib)\n  {\n    return settings->custom_zlib(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_zlib_decompress(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\nunsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                               size_t insize, const LodePNGCompressSettings* settings)\n{\n  /*initially, *out must be NULL and outsize 0, if you just give some random *out\n  that's pointing to a non allocated buffer, this'll crash*/\n  ucvector outv;\n  size_t i;\n  unsigned error;\n  unsigned char* deflatedata = 0;\n  size_t deflatesize = 0;\n\n  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/\n  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/\n  unsigned FLEVEL = 0;\n  unsigned FDICT = 0;\n  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;\n  unsigned FCHECK = 31 - CMFFLG % 31;\n  CMFFLG += FCHECK;\n\n  /*ucvector-controlled version of the output buffer, for dynamic array*/\n  ucvector_init_buffer(&outv, *out, *outsize);\n\n  ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8));\n  ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255));\n\n  error = deflate(&deflatedata, &deflatesize, in, insize, settings);\n\n  if(!error)\n  {\n    unsigned ADLER32 = adler32(in, (unsigned)insize);\n    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);\n    lodepng_free(deflatedata);\n    lodepng_add32bitInt(&outv, ADLER32);\n  }\n\n  *out = outv.data;\n  *outsize = outv.size;\n\n  return error;\n}\n\n/* compress using the default or custom zlib function */\nstatic unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                              size_t insize, const LodePNGCompressSettings* settings)\n{\n  if(settings->custom_zlib)\n  {\n    return settings->custom_zlib(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_zlib_compress(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#else /*no LODEPNG_COMPILE_ZLIB*/\n\n#ifdef LODEPNG_COMPILE_DECODER\nstatic unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                size_t insize, const LodePNGDecompressSettings* settings)\n{\n  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */\n  return settings->custom_zlib(out, outsize, in, insize, settings);\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                              size_t insize, const LodePNGCompressSettings* settings)\n{\n  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */\n  return settings->custom_zlib(out, outsize, in, insize, settings);\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/*this is a good tradeoff between speed and compression ratio*/\n#define DEFAULT_WINDOWSIZE 2048\n\nvoid lodepng_compress_settings_init(LodePNGCompressSettings* settings)\n{\n  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/\n  settings->btype = 2;\n  settings->use_lz77 = 1;\n  settings->windowsize = DEFAULT_WINDOWSIZE;\n  settings->minmatch = 3;\n  settings->nicematch = 128;\n  settings->lazymatching = 1;\n\n  settings->custom_zlib = 0;\n  settings->custom_deflate = 0;\n  settings->custom_context = 0;\n}\n\nconst LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};\n\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nvoid lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)\n{\n  settings->ignore_adler32 = 0;\n\n  settings->custom_zlib = 0;\n  settings->custom_inflate = 0;\n  settings->custom_context = 0;\n}\n\nconst LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // End of Zlib related code. Begin of PNG related code.                 // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_PNG\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / CRC32                                                                  / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n\n#ifndef LODEPNG_NO_COMPILE_CRC\n/* CRC polynomial: 0xedb88320 */\nstatic unsigned lodepng_crc32_table[256] = {\n           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,\n   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,\n   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,\n   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,\n   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,\n   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,\n   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,\n   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,\n  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,\n  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,\n  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,\n  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,\n  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,\n  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,\n  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,\n  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,\n  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,\n  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,\n  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,\n  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,\n  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,\n  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,\n  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,\n  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,\n  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,\n  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,\n  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,\n  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,\n  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,\n  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,\n  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,\n  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u\n};\n\n/*Return the CRC of the bytes buf[0..len-1].*/\nunsigned lodepng_crc32(const unsigned char* data, size_t length)\n{\n  unsigned r = 0xffffffffu;\n  size_t i;\n  for(i = 0; i < length; ++i)\n  {\n    r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8);\n  }\n  return r ^ 0xffffffffu;\n}\n#else /* !LODEPNG_NO_COMPILE_CRC */\nunsigned lodepng_crc32(const unsigned char* data, size_t length);\n#endif /* !LODEPNG_NO_COMPILE_CRC */\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)\n{\n  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);\n  ++(*bitpointer);\n  return result;\n}\n\nstatic unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)\n{\n  unsigned result = 0;\n  size_t i;\n  for(i = nbits - 1; i < nbits; --i)\n  {\n    result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i;\n  }\n  return result;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\nstatic void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)\n{\n  /*the current bit in bitstream must be 0 for this to work*/\n  if(bit)\n  {\n    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\n    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));\n  }\n  ++(*bitpointer);\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\nstatic void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)\n{\n  /*the current bit in bitstream may be 0 or 1 for this to work*/\n  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));\n  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));\n  ++(*bitpointer);\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG chunks                                                             / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nunsigned lodepng_chunk_length(const unsigned char* chunk)\n{\n  return lodepng_read32bitInt(&chunk[0]);\n}\n\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk)\n{\n  unsigned i;\n  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];\n  type[4] = 0; /*null termination char*/\n}\n\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type)\n{\n  if(strlen(type) != 4) return 0;\n  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);\n}\n\nunsigned char lodepng_chunk_ancillary(const unsigned char* chunk)\n{\n  return((chunk[4] & 32) != 0);\n}\n\nunsigned char lodepng_chunk_private(const unsigned char* chunk)\n{\n  return((chunk[6] & 32) != 0);\n}\n\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)\n{\n  return((chunk[7] & 32) != 0);\n}\n\nunsigned char* lodepng_chunk_data(unsigned char* chunk)\n{\n  return &chunk[8];\n}\n\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk)\n{\n  return &chunk[8];\n}\n\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk)\n{\n  unsigned length = lodepng_chunk_length(chunk);\n  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);\n  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/\n  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);\n  if(CRC != checksum) return 1;\n  else return 0;\n}\n\nvoid lodepng_chunk_generate_crc(unsigned char* chunk)\n{\n  unsigned length = lodepng_chunk_length(chunk);\n  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);\n  lodepng_set32bitInt(chunk + 8 + length, CRC);\n}\n\nunsigned char* lodepng_chunk_next(unsigned char* chunk)\n{\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  return &chunk[total_chunk_length];\n}\n\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk)\n{\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  return &chunk[total_chunk_length];\n}\n\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk)\n{\n  unsigned i;\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  unsigned char *chunk_start, *new_buffer;\n  size_t new_length = (*outlength) + total_chunk_length;\n  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/\n\n  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);\n  if(!new_buffer) return 83; /*alloc fail*/\n  (*out) = new_buffer;\n  (*outlength) = new_length;\n  chunk_start = &(*out)[new_length - total_chunk_length];\n\n  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];\n\n  return 0;\n}\n\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data)\n{\n  unsigned i;\n  unsigned char *chunk, *new_buffer;\n  size_t new_length = (*outlength) + length + 12;\n  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/\n  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);\n  if(!new_buffer) return 83; /*alloc fail*/\n  (*out) = new_buffer;\n  (*outlength) = new_length;\n  chunk = &(*out)[(*outlength) - length - 12];\n\n  /*1: length*/\n  lodepng_set32bitInt(chunk, (unsigned)length);\n\n  /*2: chunk name (4 letters)*/\n  chunk[4] = (unsigned char)type[0];\n  chunk[5] = (unsigned char)type[1];\n  chunk[6] = (unsigned char)type[2];\n  chunk[7] = (unsigned char)type[3];\n\n  /*3: the data*/\n  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];\n\n  /*4: CRC (of the chunkname characters and the data)*/\n  lodepng_chunk_generate_crc(chunk);\n\n  return 0;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Color types and such                                                   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*return type is a LodePNG error code*/\nstatic unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/\n{\n  switch(colortype)\n  {\n    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/\n    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/\n    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/\n    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/\n    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/\n    default: return 31;\n  }\n  return 0; /*allowed color type / bits combination*/\n}\n\nstatic unsigned getNumColorChannels(LodePNGColorType colortype)\n{\n  switch(colortype)\n  {\n    case 0: return 1; /*grey*/\n    case 2: return 3; /*RGB*/\n    case 3: return 1; /*palette*/\n    case 4: return 2; /*grey + alpha*/\n    case 6: return 4; /*RGBA*/\n  }\n  return 0; /*unexisting color type*/\n}\n\nstatic unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth)\n{\n  /*bits per pixel is amount of channels * bits per channel*/\n  return getNumColorChannels(colortype) * bitdepth;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\nvoid lodepng_color_mode_init(LodePNGColorMode* info)\n{\n  info->key_defined = 0;\n  info->key_r = info->key_g = info->key_b = 0;\n  info->colortype = LCT_RGBA;\n  info->bitdepth = 8;\n  info->palette = 0;\n  info->palettesize = 0;\n}\n\nvoid lodepng_color_mode_cleanup(LodePNGColorMode* info)\n{\n  lodepng_palette_clear(info);\n}\n\nunsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source)\n{\n  size_t i;\n  lodepng_color_mode_cleanup(dest);\n  *dest = *source;\n  if(source->palette)\n  {\n    dest->palette = (unsigned char*)lodepng_malloc(1024);\n    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/\n    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];\n  }\n  return 0;\n}\n\nstatic int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b)\n{\n  size_t i;\n  if(a->colortype != b->colortype) return 0;\n  if(a->bitdepth != b->bitdepth) return 0;\n  if(a->key_defined != b->key_defined) return 0;\n  if(a->key_defined)\n  {\n    if(a->key_r != b->key_r) return 0;\n    if(a->key_g != b->key_g) return 0;\n    if(a->key_b != b->key_b) return 0;\n  }\n  /*if one of the palette sizes is 0, then we consider it to be the same as the\n  other: it means that e.g. the palette was not given by the user and should be\n  considered the same as the palette inside the PNG.*/\n  if(1/*a->palettesize != 0 && b->palettesize != 0*/) {\n    if(a->palettesize != b->palettesize) return 0;\n    for(i = 0; i != a->palettesize * 4; ++i)\n    {\n      if(a->palette[i] != b->palette[i]) return 0;\n    }\n  }\n  return 1;\n}\n\nvoid lodepng_palette_clear(LodePNGColorMode* info)\n{\n  if(info->palette) lodepng_free(info->palette);\n  info->palette = 0;\n  info->palettesize = 0;\n}\n\nunsigned lodepng_palette_add(LodePNGColorMode* info,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  unsigned char* data;\n  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with\n  the max of 256 colors, it'll have the exact alloc size*/\n  if(!info->palette) /*allocate palette if empty*/\n  {\n    /*room for 256 colors with 4 bytes each*/\n    data = (unsigned char*)lodepng_realloc(info->palette, 1024);\n    if(!data) return 83; /*alloc fail*/\n    else info->palette = data;\n  }\n  info->palette[4 * info->palettesize + 0] = r;\n  info->palette[4 * info->palettesize + 1] = g;\n  info->palette[4 * info->palettesize + 2] = b;\n  info->palette[4 * info->palettesize + 3] = a;\n  ++info->palettesize;\n  return 0;\n}\n\nunsigned lodepng_get_bpp(const LodePNGColorMode* info)\n{\n  /*calculate bits per pixel out of colortype and bitdepth*/\n  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);\n}\n\nunsigned lodepng_get_channels(const LodePNGColorMode* info)\n{\n  return getNumColorChannels(info->colortype);\n}\n\nunsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)\n{\n  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;\n}\n\nunsigned lodepng_is_alpha_type(const LodePNGColorMode* info)\n{\n  return (info->colortype & 4) != 0; /*4 or 6*/\n}\n\nunsigned lodepng_is_palette_type(const LodePNGColorMode* info)\n{\n  return info->colortype == LCT_PALETTE;\n}\n\nunsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)\n{\n  size_t i;\n  for(i = 0; i != info->palettesize; ++i)\n  {\n    if(info->palette[i * 4 + 3] < 255) return 1;\n  }\n  return 0;\n}\n\nunsigned lodepng_can_have_alpha(const LodePNGColorMode* info)\n{\n  return info->key_defined\n      || lodepng_is_alpha_type(info)\n      || lodepng_has_palette_alpha(info);\n}\n\nsize_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp(color);\n  size_t n = w * h;\n  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;\n}\n\nsize_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth);\n  size_t n = w * h;\n  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;\n}\n\n\n#ifdef LODEPNG_COMPILE_PNG\n#ifdef LODEPNG_COMPILE_DECODER\n/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/\nstatic size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp(color);\n  size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8;\n  return h * line;\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n\nstatic void LodePNGUnknownChunks_init(LodePNGInfo* info)\n{\n  unsigned i;\n  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;\n  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;\n}\n\nstatic void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)\n{\n  unsigned i;\n  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);\n}\n\nstatic unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src)\n{\n  unsigned i;\n\n  LodePNGUnknownChunks_cleanup(dest);\n\n  for(i = 0; i != 3; ++i)\n  {\n    size_t j;\n    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];\n    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);\n    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/\n    for(j = 0; j < src->unknown_chunks_size[i]; ++j)\n    {\n      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];\n    }\n  }\n\n  return 0;\n}\n\n/******************************************************************************/\n\nstatic void LodePNGText_init(LodePNGInfo* info)\n{\n  info->text_num = 0;\n  info->text_keys = NULL;\n  info->text_strings = NULL;\n}\n\nstatic void LodePNGText_cleanup(LodePNGInfo* info)\n{\n  size_t i;\n  for(i = 0; i != info->text_num; ++i)\n  {\n    string_cleanup(&info->text_keys[i]);\n    string_cleanup(&info->text_strings[i]);\n  }\n  lodepng_free(info->text_keys);\n  lodepng_free(info->text_strings);\n}\n\nstatic unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  size_t i = 0;\n  dest->text_keys = 0;\n  dest->text_strings = 0;\n  dest->text_num = 0;\n  for(i = 0; i != source->text_num; ++i)\n  {\n    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));\n  }\n  return 0;\n}\n\nvoid lodepng_clear_text(LodePNGInfo* info)\n{\n  LodePNGText_cleanup(info);\n}\n\nunsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str)\n{\n  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));\n  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));\n  if(!new_keys || !new_strings)\n  {\n    lodepng_free(new_keys);\n    lodepng_free(new_strings);\n    return 83; /*alloc fail*/\n  }\n\n  ++info->text_num;\n  info->text_keys = new_keys;\n  info->text_strings = new_strings;\n\n  string_init(&info->text_keys[info->text_num - 1]);\n  string_set(&info->text_keys[info->text_num - 1], key);\n\n  string_init(&info->text_strings[info->text_num - 1]);\n  string_set(&info->text_strings[info->text_num - 1], str);\n\n  return 0;\n}\n\n/******************************************************************************/\n\nstatic void LodePNGIText_init(LodePNGInfo* info)\n{\n  info->itext_num = 0;\n  info->itext_keys = NULL;\n  info->itext_langtags = NULL;\n  info->itext_transkeys = NULL;\n  info->itext_strings = NULL;\n}\n\nstatic void LodePNGIText_cleanup(LodePNGInfo* info)\n{\n  size_t i;\n  for(i = 0; i != info->itext_num; ++i)\n  {\n    string_cleanup(&info->itext_keys[i]);\n    string_cleanup(&info->itext_langtags[i]);\n    string_cleanup(&info->itext_transkeys[i]);\n    string_cleanup(&info->itext_strings[i]);\n  }\n  lodepng_free(info->itext_keys);\n  lodepng_free(info->itext_langtags);\n  lodepng_free(info->itext_transkeys);\n  lodepng_free(info->itext_strings);\n}\n\nstatic unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  size_t i = 0;\n  dest->itext_keys = 0;\n  dest->itext_langtags = 0;\n  dest->itext_transkeys = 0;\n  dest->itext_strings = 0;\n  dest->itext_num = 0;\n  for(i = 0; i != source->itext_num; ++i)\n  {\n    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],\n                                        source->itext_transkeys[i], source->itext_strings[i]));\n  }\n  return 0;\n}\n\nvoid lodepng_clear_itext(LodePNGInfo* info)\n{\n  LodePNGIText_cleanup(info);\n}\n\nunsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,\n                           const char* transkey, const char* str)\n{\n  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));\n  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));\n  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));\n  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));\n  if(!new_keys || !new_langtags || !new_transkeys || !new_strings)\n  {\n    lodepng_free(new_keys);\n    lodepng_free(new_langtags);\n    lodepng_free(new_transkeys);\n    lodepng_free(new_strings);\n    return 83; /*alloc fail*/\n  }\n\n  ++info->itext_num;\n  info->itext_keys = new_keys;\n  info->itext_langtags = new_langtags;\n  info->itext_transkeys = new_transkeys;\n  info->itext_strings = new_strings;\n\n  string_init(&info->itext_keys[info->itext_num - 1]);\n  string_set(&info->itext_keys[info->itext_num - 1], key);\n\n  string_init(&info->itext_langtags[info->itext_num - 1]);\n  string_set(&info->itext_langtags[info->itext_num - 1], langtag);\n\n  string_init(&info->itext_transkeys[info->itext_num - 1]);\n  string_set(&info->itext_transkeys[info->itext_num - 1], transkey);\n\n  string_init(&info->itext_strings[info->itext_num - 1]);\n  string_set(&info->itext_strings[info->itext_num - 1], str);\n\n  return 0;\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nvoid lodepng_info_init(LodePNGInfo* info)\n{\n  lodepng_color_mode_init(&info->color);\n  info->interlace_method = 0;\n  info->compression_method = 0;\n  info->filter_method = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  info->background_defined = 0;\n  info->background_r = info->background_g = info->background_b = 0;\n\n  LodePNGText_init(info);\n  LodePNGIText_init(info);\n\n  info->time_defined = 0;\n  info->phys_defined = 0;\n\n  LodePNGUnknownChunks_init(info);\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\nvoid lodepng_info_cleanup(LodePNGInfo* info)\n{\n  lodepng_color_mode_cleanup(&info->color);\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  LodePNGText_cleanup(info);\n  LodePNGIText_cleanup(info);\n\n  LodePNGUnknownChunks_cleanup(info);\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\nunsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  lodepng_info_cleanup(dest);\n  *dest = *source;\n  lodepng_color_mode_init(&dest->color);\n  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));\n  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));\n\n  LodePNGUnknownChunks_init(dest);\n  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n  return 0;\n}\n\nvoid lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)\n{\n  LodePNGInfo temp = *a;\n  *a = *b;\n  *b = temp;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/\nstatic void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in)\n{\n  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/\n  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/\n  unsigned p = index & m;\n  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/\n  in = in << (bits * (m - p));\n  if(p == 0) out[index * bits / 8] = in;\n  else out[index * bits / 8] |= in;\n}\n\ntypedef struct ColorTree ColorTree;\n\n/*\nOne node of a color tree\nThis is the data structure used to count the number of unique colors and to get a palette\nindex for a color. It's like an octree, but because the alpha channel is used too, each\nnode has 16 instead of 8 children.\n*/\nstruct ColorTree\n{\n  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/\n  int index; /*the payload. Only has a meaningful value if this is in the last level*/\n};\n\nstatic void color_tree_init(ColorTree* tree)\n{\n  int i;\n  for(i = 0; i != 16; ++i) tree->children[i] = 0;\n  tree->index = -1;\n}\n\nstatic void color_tree_cleanup(ColorTree* tree)\n{\n  int i;\n  for(i = 0; i != 16; ++i)\n  {\n    if(tree->children[i])\n    {\n      color_tree_cleanup(tree->children[i]);\n      lodepng_free(tree->children[i]);\n    }\n  }\n}\n\n/*returns -1 if color not present, its index otherwise*/\nstatic int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  int bit = 0;\n  for(bit = 0; bit < 8; ++bit)\n  {\n    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);\n    if(!tree->children[i]) return -1;\n    else tree = tree->children[i];\n  }\n  return tree ? tree->index : -1;\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  return color_tree_get(tree, r, g, b, a) >= 0;\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*color is not allowed to already exist.\nIndex should be >= 0 (it's signed to be compatible with using -1 for \"doesn't exist\")*/\nstatic void color_tree_add(ColorTree* tree,\n                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index)\n{\n  int bit;\n  for(bit = 0; bit < 8; ++bit)\n  {\n    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);\n    if(!tree->children[i])\n    {\n      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));\n      color_tree_init(tree->children[i]);\n    }\n    tree = tree->children[i];\n  }\n  tree->index = (int)index;\n}\n\n/*put a pixel, given its RGBA color, into image of any color type*/\nstatic unsigned rgba8ToPixel(unsigned char* out, size_t i,\n                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;\n    if(mode->bitdepth == 8) out[i] = grey;\n    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey;\n    else\n    {\n      /*take the most significant bits of grey*/\n      grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);\n      addColorBits(out, i, mode->bitdepth, grey);\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      out[i * 3 + 0] = r;\n      out[i * 3 + 1] = g;\n      out[i * 3 + 2] = b;\n    }\n    else\n    {\n      out[i * 6 + 0] = out[i * 6 + 1] = r;\n      out[i * 6 + 2] = out[i * 6 + 3] = g;\n      out[i * 6 + 4] = out[i * 6 + 5] = b;\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    int index = color_tree_get(tree, r, g, b, a);\n    if(index < 0) return 82; /*color not in palette*/\n    if(mode->bitdepth == 8) out[i] = index;\n    else addColorBits(out, i, mode->bitdepth, (unsigned)index);\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;\n    if(mode->bitdepth == 8)\n    {\n      out[i * 2 + 0] = grey;\n      out[i * 2 + 1] = a;\n    }\n    else if(mode->bitdepth == 16)\n    {\n      out[i * 4 + 0] = out[i * 4 + 1] = grey;\n      out[i * 4 + 2] = out[i * 4 + 3] = a;\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      out[i * 4 + 0] = r;\n      out[i * 4 + 1] = g;\n      out[i * 4 + 2] = b;\n      out[i * 4 + 3] = a;\n    }\n    else\n    {\n      out[i * 8 + 0] = out[i * 8 + 1] = r;\n      out[i * 8 + 2] = out[i * 8 + 3] = g;\n      out[i * 8 + 4] = out[i * 8 + 5] = b;\n      out[i * 8 + 6] = out[i * 8 + 7] = a;\n    }\n  }\n\n  return 0; /*no error*/\n}\n\n/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/\nstatic void rgba16ToPixel(unsigned char* out, size_t i,\n                         const LodePNGColorMode* mode,\n                         unsigned short r, unsigned short g, unsigned short b, unsigned short a)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;\n    out[i * 2 + 0] = (grey >> 8) & 255;\n    out[i * 2 + 1] = grey & 255;\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    out[i * 6 + 0] = (r >> 8) & 255;\n    out[i * 6 + 1] = r & 255;\n    out[i * 6 + 2] = (g >> 8) & 255;\n    out[i * 6 + 3] = g & 255;\n    out[i * 6 + 4] = (b >> 8) & 255;\n    out[i * 6 + 5] = b & 255;\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;\n    out[i * 4 + 0] = (grey >> 8) & 255;\n    out[i * 4 + 1] = grey & 255;\n    out[i * 4 + 2] = (a >> 8) & 255;\n    out[i * 4 + 3] = a & 255;\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    out[i * 8 + 0] = (r >> 8) & 255;\n    out[i * 8 + 1] = r & 255;\n    out[i * 8 + 2] = (g >> 8) & 255;\n    out[i * 8 + 3] = g & 255;\n    out[i * 8 + 4] = (b >> 8) & 255;\n    out[i * 8 + 5] = b & 255;\n    out[i * 8 + 6] = (a >> 8) & 255;\n    out[i * 8 + 7] = a & 255;\n  }\n}\n\n/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/\nstatic void getPixelColorRGBA8(unsigned char* r, unsigned char* g,\n                               unsigned char* b, unsigned char* a,\n                               const unsigned char* in, size_t i,\n                               const LodePNGColorMode* mode)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = *g = *b = in[i];\n      if(mode->key_defined && *r == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n    else if(mode->bitdepth == 16)\n    {\n      *r = *g = *b = in[i * 2 + 0];\n      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n    else\n    {\n      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/\n      size_t j = i * mode->bitdepth;\n      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);\n      *r = *g = *b = (value * 255) / highest;\n      if(mode->key_defined && value == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];\n      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;\n      else *a = 255;\n    }\n    else\n    {\n      *r = in[i * 6 + 0];\n      *g = in[i * 6 + 2];\n      *b = in[i * 6 + 4];\n      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;\n      else *a = 255;\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    unsigned index;\n    if(mode->bitdepth == 8) index = in[i];\n    else\n    {\n      size_t j = i * mode->bitdepth;\n      index = readBitsFromReversedStream(&j, in, mode->bitdepth);\n    }\n\n    if(index >= mode->palettesize)\n    {\n      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.\n      Done here too, slightly faster due to no error handling needed.*/\n      *r = *g = *b = 0;\n      *a = 255;\n    }\n    else\n    {\n      *r = mode->palette[index * 4 + 0];\n      *g = mode->palette[index * 4 + 1];\n      *b = mode->palette[index * 4 + 2];\n      *a = mode->palette[index * 4 + 3];\n    }\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = *g = *b = in[i * 2 + 0];\n      *a = in[i * 2 + 1];\n    }\n    else\n    {\n      *r = *g = *b = in[i * 4 + 0];\n      *a = in[i * 4 + 2];\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = in[i * 4 + 0];\n      *g = in[i * 4 + 1];\n      *b = in[i * 4 + 2];\n      *a = in[i * 4 + 3];\n    }\n    else\n    {\n      *r = in[i * 8 + 0];\n      *g = in[i * 8 + 2];\n      *b = in[i * 8 + 4];\n      *a = in[i * 8 + 6];\n    }\n  }\n}\n\n/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color\nmode test cases, optimized to convert the colors much faster, when converting\nto RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with\nenough memory, if has_alpha is true the output is RGBA. mode has the color mode\nof the input buffer.*/\nstatic void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,\n                                unsigned has_alpha, const unsigned char* in,\n                                const LodePNGColorMode* mode)\n{\n  unsigned num_channels = has_alpha ? 4 : 3;\n  size_t i;\n  if(mode->colortype == LCT_GREY)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i];\n        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;\n      }\n    }\n    else if(mode->bitdepth == 16)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 2];\n        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;\n      }\n    }\n    else\n    {\n      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/\n      size_t j = 0;\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);\n        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;\n        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;\n      }\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 3 + 0];\n        buffer[1] = in[i * 3 + 1];\n        buffer[2] = in[i * 3 + 2];\n        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r\n           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 6 + 0];\n        buffer[1] = in[i * 6 + 2];\n        buffer[2] = in[i * 6 + 4];\n        if(has_alpha) buffer[3] = mode->key_defined\n           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;\n      }\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    unsigned index;\n    size_t j = 0;\n    for(i = 0; i != numpixels; ++i, buffer += num_channels)\n    {\n      if(mode->bitdepth == 8) index = in[i];\n      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);\n\n      if(index >= mode->palettesize)\n      {\n        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.\n        Done here too, slightly faster due to no error handling needed.*/\n        buffer[0] = buffer[1] = buffer[2] = 0;\n        if(has_alpha) buffer[3] = 255;\n      }\n      else\n      {\n        buffer[0] = mode->palette[index * 4 + 0];\n        buffer[1] = mode->palette[index * 4 + 1];\n        buffer[2] = mode->palette[index * 4 + 2];\n        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];\n      }\n    }\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];\n        if(has_alpha) buffer[3] = in[i * 2 + 1];\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];\n        if(has_alpha) buffer[3] = in[i * 4 + 2];\n      }\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 4 + 0];\n        buffer[1] = in[i * 4 + 1];\n        buffer[2] = in[i * 4 + 2];\n        if(has_alpha) buffer[3] = in[i * 4 + 3];\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 8 + 0];\n        buffer[1] = in[i * 8 + 2];\n        buffer[2] = in[i * 8 + 4];\n        if(has_alpha) buffer[3] = in[i * 8 + 6];\n      }\n    }\n  }\n}\n\n/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with\ngiven color type, but the given color type must be 16-bit itself.*/\nstatic void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,\n                                const unsigned char* in, size_t i, const LodePNGColorMode* mode)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];\n    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;\n    else *a = 65535;\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    *r = 256u * in[i * 6 + 0] + in[i * 6 + 1];\n    *g = 256u * in[i * 6 + 2] + in[i * 6 + 3];\n    *b = 256u * in[i * 6 + 4] + in[i * 6 + 5];\n    if(mode->key_defined\n       && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n       && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n       && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;\n    else *a = 65535;\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1];\n    *a = 256u * in[i * 4 + 2] + in[i * 4 + 3];\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    *r = 256u * in[i * 8 + 0] + in[i * 8 + 1];\n    *g = 256u * in[i * 8 + 2] + in[i * 8 + 3];\n    *b = 256u * in[i * 8 + 4] + in[i * 8 + 5];\n    *a = 256u * in[i * 8 + 6] + in[i * 8 + 7];\n  }\n}\n\nunsigned lodepng_convert(unsigned char* out, const unsigned char* in,\n                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,\n                         unsigned w, unsigned h)\n{\n  unsigned int i;\n  ColorTree tree;\n  size_t numpixels = w * h;\n\n  if(lodepng_color_mode_equal(mode_out, mode_in))\n  {\n    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);\n    for(i = 0; i != numbytes; ++i) out[i] = in[i];\n    return 0;\n  }\n\n  if(mode_out->colortype == LCT_PALETTE)\n  {\n    size_t palettesize = mode_out->palettesize;\n    const unsigned char* palette = mode_out->palette;\n    size_t palsize = (size_t)1 << mode_out->bitdepth;\n    /*if the user specified output palette but did not give the values, assume\n    they want the values of the input color type (assuming that one is palette).\n    Note that we never create a new palette ourselves.*/\n    if(palettesize == 0)\n    {\n      palettesize = mode_in->palettesize;\n      palette = mode_in->palette;\n    }\n    if(palettesize < palsize) palsize = palettesize;\n    color_tree_init(&tree);\n    for(i = 0; i != palsize; ++i)\n    {\n      const unsigned char* p = &palette[i * 4];\n      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);\n    }\n  }\n\n  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)\n  {\n    for(i = 0; i != numpixels; ++i)\n    {\n      unsigned short r = 0, g = 0, b = 0, a = 0;\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);\n      rgba16ToPixel(out, i, mode_out, r, g, b, a);\n    }\n  }\n  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)\n  {\n    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);\n  }\n  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)\n  {\n    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);\n  }\n  else\n  {\n    unsigned char r = 0, g = 0, b = 0, a = 0;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);\n      CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a));\n    }\n  }\n\n  if(mode_out->colortype == LCT_PALETTE)\n  {\n    color_tree_cleanup(&tree);\n  }\n\n  return 0; /*no error*/\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\nvoid lodepng_color_profile_init(LodePNGColorProfile* profile)\n{\n  profile->colored = 0;\n  profile->key = 0;\n  profile->alpha = 0;\n  profile->key_r = profile->key_g = profile->key_b = 0;\n  profile->numcolors = 0;\n  profile->bits = 1;\n}\n\n/*function used for debug purposes with C++*/\n/*void printColorProfile(LodePNGColorProfile* p)\n{\n  std::cout << \"colored: \" << (int)p->colored << \", \";\n  std::cout << \"key: \" << (int)p->key << \", \";\n  std::cout << \"key_r: \" << (int)p->key_r << \", \";\n  std::cout << \"key_g: \" << (int)p->key_g << \", \";\n  std::cout << \"key_b: \" << (int)p->key_b << \", \";\n  std::cout << \"alpha: \" << (int)p->alpha << \", \";\n  std::cout << \"numcolors: \" << (int)p->numcolors << \", \";\n  std::cout << \"bits: \" << (int)p->bits << std::endl;\n}*/\n\n/*Returns how many bits needed to represent given value (max 8 bit)*/\nstatic unsigned getValueRequiredBits(unsigned char value)\n{\n  if(value == 0 || value == 255) return 1;\n  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/\n  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;\n  return 8;\n}\n\n/*profile must already have been inited with mode.\nIt's ok to set some parameters of profile to done already.*/\nunsigned lodepng_get_color_profile(LodePNGColorProfile* profile,\n                                   const unsigned char* in, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode)\n{\n  unsigned error = 0;\n  size_t i;\n  ColorTree tree;\n  size_t numpixels = w * h;\n\n  unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0;\n  unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1;\n  unsigned numcolors_done = 0;\n  unsigned bpp = lodepng_get_bpp(mode);\n  unsigned bits_done = bpp == 1 ? 1 : 0;\n  unsigned maxnumcolors = 257;\n  unsigned sixteen = 0;\n  if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256));\n\n  color_tree_init(&tree);\n\n  /*Check if the 16-bit input is truly 16-bit*/\n  if(mode->bitdepth == 16)\n  {\n    unsigned short r, g, b, a;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||\n         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/\n      {\n        sixteen = 1;\n        break;\n      }\n    }\n  }\n\n  if(sixteen)\n  {\n    unsigned short r = 0, g = 0, b = 0, a = 0;\n    profile->bits = 16;\n    bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/\n\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n\n      if(!colored_done && (r != g || r != b))\n      {\n        profile->colored = 1;\n        colored_done = 1;\n      }\n\n      if(!alpha_done)\n      {\n        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);\n        if(a != 65535 && (a != 0 || (profile->key && !matchkey)))\n        {\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n        else if(a == 0 && !profile->alpha && !profile->key)\n        {\n          profile->key = 1;\n          profile->key_r = r;\n          profile->key_g = g;\n          profile->key_b = b;\n        }\n        else if(a == 65535 && profile->key && matchkey)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n      if(alpha_done && numcolors_done && colored_done && bits_done) break;\n    }\n\n    if(profile->key && !profile->alpha)\n    {\n      for(i = 0; i != numpixels; ++i)\n      {\n        getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n    }\n  }\n  else /* < 16-bit */\n  {\n    unsigned char r = 0, g = 0, b = 0, a = 0;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);\n\n      if(!bits_done && profile->bits < 8)\n      {\n        /*only r is checked, < 8 bits is only relevant for greyscale*/\n        unsigned bits = getValueRequiredBits(r);\n        if(bits > profile->bits) profile->bits = bits;\n      }\n      bits_done = (profile->bits >= bpp);\n\n      if(!colored_done && (r != g || r != b))\n      {\n        profile->colored = 1;\n        colored_done = 1;\n        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/\n      }\n\n      if(!alpha_done)\n      {\n        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);\n        if(a != 255 && (a != 0 || (profile->key && !matchkey)))\n        {\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n        else if(a == 0 && !profile->alpha && !profile->key)\n        {\n          profile->key = 1;\n          profile->key_r = r;\n          profile->key_g = g;\n          profile->key_b = b;\n        }\n        else if(a == 255 && profile->key && matchkey)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n      }\n\n      if(!numcolors_done)\n      {\n        if(!color_tree_has(&tree, r, g, b, a))\n        {\n          color_tree_add(&tree, r, g, b, a, profile->numcolors);\n          if(profile->numcolors < 256)\n          {\n            unsigned char* p = profile->palette;\n            unsigned n = profile->numcolors;\n            p[n * 4 + 0] = r;\n            p[n * 4 + 1] = g;\n            p[n * 4 + 2] = b;\n            p[n * 4 + 3] = a;\n          }\n          ++profile->numcolors;\n          numcolors_done = profile->numcolors >= maxnumcolors;\n        }\n      }\n\n      if(alpha_done && numcolors_done && colored_done && bits_done) break;\n    }\n\n    if(profile->key && !profile->alpha)\n    {\n      for(i = 0; i != numpixels; ++i)\n      {\n        getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);\n        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n    }\n\n    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/\n    profile->key_r += (profile->key_r << 8);\n    profile->key_g += (profile->key_g << 8);\n    profile->key_b += (profile->key_b << 8);\n  }\n\n  color_tree_cleanup(&tree);\n  return error;\n}\n\n/*Automatically chooses color type that gives smallest amount of bits in the\noutput image, e.g. grey if there are only greyscale pixels, palette if there\nare less than 256 colors, ...\nUpdates values of mode with a potentially smaller color model. mode_out should\ncontain the user chosen color model, but will be overwritten with the new chosen one.*/\nunsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in)\n{\n  LodePNGColorProfile prof;\n  unsigned error = 0;\n  unsigned i, n, palettebits, grey_ok, palette_ok;\n\n  lodepng_color_profile_init(&prof);\n  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);\n  if(error) return error;\n  mode_out->key_defined = 0;\n\n  if(prof.key && w * h <= 16)\n  {\n    prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/\n    if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n  }\n  grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/\n  n = prof.numcolors;\n  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));\n  palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8;\n  if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/\n  if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/\n\n  if(palette_ok)\n  {\n    unsigned char* p = prof.palette;\n    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/\n    for(i = 0; i != prof.numcolors; ++i)\n    {\n      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);\n      if(error) break;\n    }\n\n    mode_out->colortype = LCT_PALETTE;\n    mode_out->bitdepth = palettebits;\n\n    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize\n        && mode_in->bitdepth == mode_out->bitdepth)\n    {\n      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/\n      lodepng_color_mode_cleanup(mode_out);\n      lodepng_color_mode_copy(mode_out, mode_in);\n    }\n  }\n  else /*8-bit or 16-bit per channel*/\n  {\n    mode_out->bitdepth = prof.bits;\n    mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA)\n                                     : (prof.colored ? LCT_RGB : LCT_GREY);\n\n    if(prof.key && !prof.alpha)\n    {\n      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/\n      mode_out->key_r = prof.key_r & mask;\n      mode_out->key_g = prof.key_g & mask;\n      mode_out->key_b = prof.key_b & mask;\n      mode_out->key_defined = 1;\n    }\n  }\n\n  return error;\n}\n\n#endif /* #ifdef LODEPNG_COMPILE_ENCODER */\n\n/*\nPaeth predicter, used by PNG filter type 4\nThe parameters are of type short, but should come from unsigned chars, the shorts\nare only needed to make the paeth calculation correct.\n*/\nstatic unsigned char paethPredictor(short a, short b, short c)\n{\n  short pa = abs(b - c);\n  short pb = abs(a - c);\n  short pc = abs(a + b - c - c);\n\n  if(pc < pa && pc < pb) return (unsigned char)c;\n  else if(pb < pa) return (unsigned char)b;\n  else return (unsigned char)a;\n}\n\n/*shared values used by multiple Adam7 related functions*/\n\nstatic const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/\nstatic const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/\nstatic const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/\nstatic const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/\n\n/*\nOutputs various dimensions and positions in the image related to the Adam7 reduced images.\npassw: output containing the width of the 7 passes\npassh: output containing the height of the 7 passes\nfilter_passstart: output containing the index of the start and end of each\n reduced image with filter bytes\npadded_passstart output containing the index of the start and end of each\n reduced image when without filter bytes but with padded scanlines\npassstart: output containing the index of the start and end of each reduced\n image without padding between scanlines, but still padding between the images\nw, h: width and height of non-interlaced image\nbpp: bits per pixel\n\"padded\" is only relevant if bpp is less than 8 and a scanline or image does not\n end at a full byte\n*/\nstatic void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],\n                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)\n{\n  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/\n  unsigned i;\n\n  /*calculate width and height in pixels of each pass*/\n  for(i = 0; i != 7; ++i)\n  {\n    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];\n    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];\n    if(passw[i] == 0) passh[i] = 0;\n    if(passh[i] == 0) passw[i] = 0;\n  }\n\n  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;\n  for(i = 0; i != 7; ++i)\n  {\n    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/\n    filter_passstart[i + 1] = filter_passstart[i]\n                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);\n    /*bits padded if needed to fill full byte at end of each scanline*/\n    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);\n    /*only padded at end of reduced image*/\n    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;\n  }\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG Decoder                                                            / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*read the information from the header and store it in the LodePNGInfo. return value is error*/\nunsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,\n                         const unsigned char* in, size_t insize)\n{\n  LodePNGInfo* info = &state->info_png;\n  if(insize == 0 || in == 0)\n  {\n    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/\n  }\n  if(insize < 33)\n  {\n    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/\n  }\n\n  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/\n  lodepng_info_cleanup(info);\n  lodepng_info_init(info);\n\n  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71\n     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10)\n  {\n    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/\n  }\n  if(lodepng_chunk_length(in + 8) != 13)\n  {\n    CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/\n  }\n  if(!lodepng_chunk_type_equals(in + 8, \"IHDR\"))\n  {\n    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/\n  }\n\n  /*read the values given in the header*/\n  *w = lodepng_read32bitInt(&in[16]);\n  *h = lodepng_read32bitInt(&in[20]);\n  info->color.bitdepth = in[24];\n  info->color.colortype = (LodePNGColorType)in[25];\n  info->compression_method = in[26];\n  info->filter_method = in[27];\n  info->interlace_method = in[28];\n\n  if(*w == 0 || *h == 0)\n  {\n    CERROR_RETURN_ERROR(state->error, 93);\n  }\n\n  if(!state->decoder.ignore_crc)\n  {\n    unsigned CRC = lodepng_read32bitInt(&in[29]);\n    unsigned checksum = lodepng_crc32(&in[12], 17);\n    if(CRC != checksum)\n    {\n      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/\n    }\n  }\n\n  /*error: only compression method 0 is allowed in the specification*/\n  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);\n  /*error: only filter method 0 is allowed in the specification*/\n  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);\n  /*error: only interlace methods 0 and 1 exist in the specification*/\n  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);\n\n  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);\n  return state->error;\n}\n\nstatic unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,\n                                 size_t bytewidth, unsigned char filterType, size_t length)\n{\n  /*\n  For PNG filter method 0\n  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,\n  the filter works byte per byte (bytewidth = 1)\n  precon is the previous unfiltered scanline, recon the result, scanline the current one\n  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead\n  recon and scanline MAY be the same memory address! precon must be disjoint.\n  */\n\n  size_t i;\n  switch(filterType)\n  {\n    case 0:\n      for(i = 0; i != length; ++i) recon[i] = scanline[i];\n      break;\n    case 1:\n      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];\n      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];\n      break;\n    case 2:\n      if(precon)\n      {\n        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];\n      }\n      else\n      {\n        for(i = 0; i != length; ++i) recon[i] = scanline[i];\n      }\n      break;\n    case 3:\n      if(precon)\n      {\n        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1);\n        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1);\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];\n        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1);\n      }\n      break;\n    case 4:\n      if(precon)\n      {\n        for(i = 0; i != bytewidth; ++i)\n        {\n          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/\n        }\n        for(i = bytewidth; i < length; ++i)\n        {\n          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));\n        }\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i)\n        {\n          recon[i] = scanline[i];\n        }\n        for(i = bytewidth; i < length; ++i)\n        {\n          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/\n          recon[i] = (scanline[i] + recon[i - bytewidth]);\n        }\n      }\n      break;\n    default: return 36; /*error: unexisting filter type given*/\n  }\n  return 0;\n}\n\nstatic unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  /*\n  For PNG filter method 0\n  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)\n  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline\n  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel\n  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)\n  */\n\n  unsigned y;\n  unsigned char* prevline = 0;\n\n  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/\n  size_t bytewidth = (bpp + 7) / 8;\n  size_t linebytes = (w * bpp + 7) / 8;\n\n  for(y = 0; y < h; ++y)\n  {\n    size_t outindex = linebytes * y;\n    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n    unsigned char filterType = in[inindex];\n\n    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));\n\n    prevline = &out[outindex];\n  }\n\n  return 0;\n}\n\n/*\nin: Adam7 interlaced image, with no padding bits between scanlines, but between\n reduced images so that each reduced image starts at a byte.\nout: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h\nbpp: bits per pixel\nout has the following size in bits: w * h * bpp.\nin is possibly bigger due to padding bits between reduced images.\nout must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation\n(because that's likely a little bit faster)\nNOTE: comments about padding bits are only relevant if bpp < 8\n*/\nstatic void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  unsigned passw[7], passh[7];\n  size_t filter_passstart[8], padded_passstart[8], passstart[8];\n  unsigned i;\n\n  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n  if(bpp >= 8)\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      size_t bytewidth = bpp / 8;\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;\n        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;\n        for(b = 0; b < bytewidth; ++b)\n        {\n          out[pixeloutstart + b] = in[pixelinstart + b];\n        }\n      }\n    }\n  }\n  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      unsigned ilinebits = bpp * passw[i];\n      unsigned olinebits = bpp * w;\n      size_t obp, ibp; /*bit pointers (for out and in buffer)*/\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);\n        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;\n        for(b = 0; b < bpp; ++b)\n        {\n          unsigned char bit = readBitFromReversedStream(&ibp, in);\n          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/\n          setBitOfReversedStream0(&obp, out, bit);\n        }\n      }\n    }\n  }\n}\n\nstatic void removePaddingBits(unsigned char* out, const unsigned char* in,\n                              size_t olinebits, size_t ilinebits, unsigned h)\n{\n  /*\n  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need\n  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers\n  for the Adam7 code, the color convert code and the output to the user.\n  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must\n  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits\n  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7\n  only useful if (ilinebits - olinebits) is a value in the range 1..7\n  */\n  unsigned y;\n  size_t diff = ilinebits - olinebits;\n  size_t ibp = 0, obp = 0; /*input and output bit pointers*/\n  for(y = 0; y < h; ++y)\n  {\n    size_t x;\n    for(x = 0; x < olinebits; ++x)\n    {\n      unsigned char bit = readBitFromReversedStream(&ibp, in);\n      setBitOfReversedStream(&obp, out, bit);\n    }\n    ibp += diff;\n  }\n}\n\n/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from\nthe IDAT chunks (with filter index bytes and possible padding bits)\nreturn value is error*/\nstatic unsigned postProcessScanlines(unsigned char* out, unsigned char* in,\n                                     unsigned w, unsigned h, const LodePNGInfo* info_png)\n{\n  /*\n  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.\n  Steps:\n  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)\n  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace\n  NOTE: the in buffer will be overwritten with intermediate data!\n  */\n  unsigned bpp = lodepng_get_bpp(&info_png->color);\n  if(bpp == 0) return 31; /*error: invalid colortype*/\n\n  if(info_png->interlace_method == 0)\n  {\n    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)\n    {\n      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));\n      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);\n    }\n    /*we can immediately filter into the out buffer, no other steps needed*/\n    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));\n  }\n  else /*interlace_method is 1 (Adam7)*/\n  {\n    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];\n    unsigned i;\n\n    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n    for(i = 0; i != 7; ++i)\n    {\n      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));\n      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,\n      move bytes instead of bits or move not at all*/\n      if(bpp < 8)\n      {\n        /*remove padding bits in scanlines; after this there still may be padding\n        bits between the different reduced images: each reduced image still starts nicely at a byte*/\n        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,\n                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);\n      }\n    }\n\n    Adam7_deinterlace(out, in, w, h, bpp);\n  }\n\n  return 0;\n}\n\nstatic unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)\n{\n  unsigned pos = 0, i;\n  if(color->palette) lodepng_free(color->palette);\n  color->palettesize = chunkLength / 3;\n  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);\n  if(!color->palette && color->palettesize)\n  {\n    color->palettesize = 0;\n    return 83; /*alloc fail*/\n  }\n  if(color->palettesize > 256) return 38; /*error: palette too big*/\n\n  for(i = 0; i != color->palettesize; ++i)\n  {\n    color->palette[4 * i + 0] = data[pos++]; /*R*/\n    color->palette[4 * i + 1] = data[pos++]; /*G*/\n    color->palette[4 * i + 2] = data[pos++]; /*B*/\n    color->palette[4 * i + 3] = 255; /*alpha*/\n  }\n\n  return 0; /* OK */\n}\n\nstatic unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)\n{\n  unsigned i;\n  if(color->colortype == LCT_PALETTE)\n  {\n    /*error: more alpha values given than there are palette entries*/\n    if(chunkLength > color->palettesize) return 38;\n\n    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];\n  }\n  else if(color->colortype == LCT_GREY)\n  {\n    /*error: this chunk must be 2 bytes for greyscale image*/\n    if(chunkLength != 2) return 30;\n\n    color->key_defined = 1;\n    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];\n  }\n  else if(color->colortype == LCT_RGB)\n  {\n    /*error: this chunk must be 6 bytes for RGB image*/\n    if(chunkLength != 6) return 41;\n\n    color->key_defined = 1;\n    color->key_r = 256u * data[0] + data[1];\n    color->key_g = 256u * data[2] + data[3];\n    color->key_b = 256u * data[4] + data[5];\n  }\n  else return 42; /*error: tRNS chunk not allowed for other color models*/\n\n  return 0; /* OK */\n}\n\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*background color chunk (bKGD)*/\nstatic unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(info->color.colortype == LCT_PALETTE)\n  {\n    /*error: this chunk must be 1 byte for indexed color image*/\n    if(chunkLength != 1) return 43;\n\n    info->background_defined = 1;\n    info->background_r = info->background_g = info->background_b = data[0];\n  }\n  else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)\n  {\n    /*error: this chunk must be 2 bytes for greyscale image*/\n    if(chunkLength != 2) return 44;\n\n    info->background_defined = 1;\n    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];\n  }\n  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)\n  {\n    /*error: this chunk must be 6 bytes for greyscale image*/\n    if(chunkLength != 6) return 45;\n\n    info->background_defined = 1;\n    info->background_r = 256u * data[0] + data[1];\n    info->background_g = 256u * data[2] + data[3];\n    info->background_b = 256u * data[4] + data[5];\n  }\n\n  return 0; /* OK */\n}\n\n/*text chunk (tEXt)*/\nstatic unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  char *key = 0, *str = 0;\n  unsigned i;\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    unsigned length, string2_begin;\n\n    length = 0;\n    while(length < chunkLength && data[length] != 0) ++length;\n    /*even though it's not allowed by the standard, no error is thrown if\n    there's no null termination char, if the text is empty*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    string2_begin = length + 1; /*skip keyword null terminator*/\n\n    length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin;\n    str = (char*)lodepng_malloc(length + 1);\n    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    str[length] = 0;\n    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];\n\n    error = lodepng_add_text(info, key, str);\n\n    break;\n  }\n\n  lodepng_free(key);\n  lodepng_free(str);\n\n  return error;\n}\n\n/*compressed text chunk (zTXt)*/\nstatic unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,\n                               const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  unsigned i;\n\n  unsigned length, string2_begin;\n  char *key = 0;\n  ucvector decoded;\n\n  ucvector_init(&decoded);\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;\n    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/\n\n    string2_begin = length + 2;\n    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/\n\n    length = chunkLength - string2_begin;\n    /*will fail if zlib error, e.g. if length is too small*/\n    error = zlib_decompress(&decoded.data, &decoded.size,\n                            (unsigned char*)(&data[string2_begin]),\n                            length, zlibsettings);\n    if(error) break;\n    ucvector_push_back(&decoded, 0);\n\n    error = lodepng_add_text(info, key, (char*)decoded.data);\n\n    break;\n  }\n\n  lodepng_free(key);\n  ucvector_cleanup(&decoded);\n\n  return error;\n}\n\n/*international text chunk (iTXt)*/\nstatic unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,\n                               const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  unsigned i;\n\n  unsigned length, begin, compressed;\n  char *key = 0, *langtag = 0, *transkey = 0;\n  ucvector decoded;\n  ucvector_init(&decoded);\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    /*Quick check if the chunk length isn't too small. Even without check\n    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/\n    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/\n\n    /*read the key*/\n    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;\n    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    /*read the compression method*/\n    compressed = data[length + 1];\n    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/\n\n    /*even though it's not allowed by the standard, no error is thrown if\n    there's no null termination char, if the text is empty for the next 3 texts*/\n\n    /*read the langtag*/\n    begin = length + 3;\n    length = 0;\n    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;\n\n    langtag = (char*)lodepng_malloc(length + 1);\n    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    langtag[length] = 0;\n    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];\n\n    /*read the transkey*/\n    begin += length + 1;\n    length = 0;\n    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;\n\n    transkey = (char*)lodepng_malloc(length + 1);\n    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    transkey[length] = 0;\n    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];\n\n    /*read the actual text*/\n    begin += length + 1;\n\n    length = chunkLength < begin ? 0 : chunkLength - begin;\n\n    if(compressed)\n    {\n      /*will fail if zlib error, e.g. if length is too small*/\n      error = zlib_decompress(&decoded.data, &decoded.size,\n                              (unsigned char*)(&data[begin]),\n                              length, zlibsettings);\n      if(error) break;\n      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;\n      ucvector_push_back(&decoded, 0);\n    }\n    else\n    {\n      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);\n\n      decoded.data[length] = 0;\n      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];\n    }\n\n    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);\n\n    break;\n  }\n\n  lodepng_free(key);\n  lodepng_free(langtag);\n  lodepng_free(transkey);\n  ucvector_cleanup(&decoded);\n\n  return error;\n}\n\nstatic unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/\n\n  info->time_defined = 1;\n  info->time.year = 256u * data[0] + data[1];\n  info->time.month = data[2];\n  info->time.day = data[3];\n  info->time.hour = data[4];\n  info->time.minute = data[5];\n  info->time.second = data[6];\n\n  return 0; /* OK */\n}\n\nstatic unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/\n\n  info->phys_defined = 1;\n  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];\n  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];\n  info->phys_unit = data[8];\n\n  return 0; /* OK */\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*read a PNG, the result will be in the same color type as the PNG (hence \"generic\")*/\nstatic void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,\n                          LodePNGState* state,\n                          const unsigned char* in, size_t insize)\n{\n  unsigned char IEND = 0;\n  const unsigned char* chunk;\n  size_t i;\n  ucvector idat; /*the data from idat chunks*/\n  ucvector scanlines;\n  size_t predict;\n  size_t numpixels;\n  size_t outsize;\n\n  /*for unknown chunk order*/\n  unsigned unknown = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n  /*provide some proper output values if error will happen*/\n  *out = 0;\n\n  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/\n  if(state->error) return;\n\n  numpixels = *w * *h;\n\n  /*multiplication overflow*/\n  if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92);\n  /*multiplication overflow possible further below. Allows up to 2^31-1 pixel\n  bytes with 16-bit RGBA, the rest is room for filter bytes.*/\n  if(numpixels > 268435455) CERROR_RETURN(state->error, 92);\n\n  ucvector_init(&idat);\n  chunk = &in[33]; /*first byte of the first chunk after the header*/\n\n  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.\n  IDAT data is put at the start of the in buffer*/\n  while(!IEND && !state->error)\n  {\n    unsigned chunkLength;\n    const unsigned char* data; /*the data in the chunk*/\n\n    /*error: size of the in buffer too small to contain next chunk*/\n    if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30);\n\n    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/\n    chunkLength = lodepng_chunk_length(chunk);\n    /*error: chunk length larger than the max PNG chunk size*/\n    if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63);\n\n    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in)\n    {\n      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/\n    }\n\n    data = lodepng_chunk_data_const(chunk);\n\n    /*IDAT chunk, containing compressed image data*/\n    if(lodepng_chunk_type_equals(chunk, \"IDAT\"))\n    {\n      size_t oldsize = idat.size;\n      if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/);\n      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      critical_pos = 3;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n    /*IEND chunk*/\n    else if(lodepng_chunk_type_equals(chunk, \"IEND\"))\n    {\n      IEND = 1;\n    }\n    /*palette chunk (PLTE)*/\n    else if(lodepng_chunk_type_equals(chunk, \"PLTE\"))\n    {\n      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);\n      if(state->error) break;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      critical_pos = 2;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n    /*palette transparency chunk (tRNS)*/\n    else if(lodepng_chunk_type_equals(chunk, \"tRNS\"))\n    {\n      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);\n      if(state->error) break;\n    }\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*background color chunk (bKGD)*/\n    else if(lodepng_chunk_type_equals(chunk, \"bKGD\"))\n    {\n      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n    /*text chunk (tEXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"tEXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    /*compressed text chunk (zTXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"zTXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    /*international text chunk (iTXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"iTXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    else if(lodepng_chunk_type_equals(chunk, \"tIME\"))\n    {\n      state->error = readChunk_tIME(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n    else if(lodepng_chunk_type_equals(chunk, \"pHYs\"))\n    {\n      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    else /*it's not an implemented chunk type, so ignore it: skip over the data*/\n    {\n      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/\n      if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69);\n\n      unknown = 1;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      if(state->decoder.remember_unknown_chunks)\n      {\n        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],\n                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);\n        if(state->error) break;\n      }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n\n    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/\n    {\n      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/\n    }\n\n    if(!IEND) chunk = lodepng_chunk_next_const(chunk);\n  }\n\n  ucvector_init(&scanlines);\n  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.\n  If the decompressed size does not match the prediction, the image must be corrupt.*/\n  if(state->info_png.interlace_method == 0)\n  {\n    /*The extra *h is added because this are the filter bytes every scanline starts with*/\n    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h;\n  }\n  else\n  {\n    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/\n    const LodePNGColorMode* color = &state->info_png.color;\n    predict = 0;\n    predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);\n    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);\n    predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3);\n    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2);\n    predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2);\n    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1);\n    predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1);\n  }\n  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/\n  if(!state->error)\n  {\n    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,\n                                   idat.size, &state->decoder.zlibsettings);\n    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/\n  }\n  ucvector_cleanup(&idat);\n\n  if(!state->error)\n  {\n    outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);\n    *out = (unsigned char*)lodepng_malloc(outsize);\n    if(!*out) state->error = 83; /*alloc fail*/\n  }\n  if(!state->error)\n  {\n    for(i = 0; i < outsize; i++) (*out)[i] = 0;\n    state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png);\n  }\n  ucvector_cleanup(&scanlines);\n}\n\nunsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,\n                        LodePNGState* state,\n                        const unsigned char* in, size_t insize)\n{\n  *out = 0;\n  decodeGeneric(out, w, h, state, in, insize);\n  if(state->error) return state->error;\n  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color))\n  {\n    /*same color type, no copying or converting of data needed*/\n    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype\n    the raw image has to the end user*/\n    if(!state->decoder.color_convert)\n    {\n      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);\n      if(state->error) return state->error;\n    }\n  }\n  else\n  {\n    /*color conversion needed; sort of copy of the data*/\n    unsigned char* data = *out;\n    size_t outsize;\n\n    /*TODO: check if this works according to the statement in the documentation: \"The converter can convert\n    from greyscale input color type, to 8-bit greyscale or greyscale with alpha\"*/\n    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)\n       && !(state->info_raw.bitdepth == 8))\n    {\n      return 56; /*unsupported color mode conversion*/\n    }\n\n    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);\n    *out = (unsigned char*)lodepng_malloc(outsize);\n    if(!(*out))\n    {\n      state->error = 83; /*alloc fail*/\n    }\n    else state->error = lodepng_convert(*out, data, &state->info_raw,\n                                        &state->info_png.color, *w, *h);\n    lodepng_free(data);\n  }\n  return state->error;\n}\n\nunsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,\n                               size_t insize, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned error;\n  LodePNGState state;\n  lodepng_state_init(&state);\n  state.info_raw.colortype = colortype;\n  state.info_raw.bitdepth = bitdepth;\n  error = lodepng_decode(out, w, h, &state, in, insize);\n  lodepng_state_cleanup(&state);\n  return error;\n}\n\nunsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)\n{\n  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);\n}\n\nunsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)\n{\n  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,\n                             LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize;\n  unsigned error;\n  error = lodepng_load_file(&buffer, &buffersize, filename);\n  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)\n{\n  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);\n}\n\nunsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)\n{\n  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);\n}\n#endif /*LODEPNG_COMPILE_DISK*/\n\nvoid lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)\n{\n  settings->color_convert = 1;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  settings->read_text_chunks = 1;\n  settings->remember_unknown_chunks = 0;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n  settings->ignore_crc = 0;\n  lodepng_decompress_settings_init(&settings->zlibsettings);\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)\n\nvoid lodepng_state_init(LodePNGState* state)\n{\n#ifdef LODEPNG_COMPILE_DECODER\n  lodepng_decoder_settings_init(&state->decoder);\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\n  lodepng_encoder_settings_init(&state->encoder);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n  lodepng_color_mode_init(&state->info_raw);\n  lodepng_info_init(&state->info_png);\n  state->error = 1;\n}\n\nvoid lodepng_state_cleanup(LodePNGState* state)\n{\n  lodepng_color_mode_cleanup(&state->info_raw);\n  lodepng_info_cleanup(&state->info_png);\n}\n\nvoid lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)\n{\n  lodepng_state_cleanup(dest);\n  *dest = *source;\n  lodepng_color_mode_init(&dest->info_raw);\n  lodepng_info_init(&dest->info_png);\n  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;\n  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;\n}\n\n#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG Encoder                                                            / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*chunkName must be string of 4 characters*/\nstatic unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)\n{\n  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));\n  out->allocsize = out->size; /*fix the allocsize again*/\n  return 0;\n}\n\nstatic void writeSignature(ucvector* out)\n{\n  /*8 bytes PNG signature, aka the magic bytes*/\n  ucvector_push_back(out, 137);\n  ucvector_push_back(out, 80);\n  ucvector_push_back(out, 78);\n  ucvector_push_back(out, 71);\n  ucvector_push_back(out, 13);\n  ucvector_push_back(out, 10);\n  ucvector_push_back(out, 26);\n  ucvector_push_back(out, 10);\n}\n\nstatic unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,\n                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method)\n{\n  unsigned error = 0;\n  ucvector header;\n  ucvector_init(&header);\n\n  lodepng_add32bitInt(&header, w); /*width*/\n  lodepng_add32bitInt(&header, h); /*height*/\n  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/\n  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/\n  ucvector_push_back(&header, 0); /*compression method*/\n  ucvector_push_back(&header, 0); /*filter method*/\n  ucvector_push_back(&header, interlace_method); /*interlace method*/\n\n  error = addChunk(out, \"IHDR\", header.data, header.size);\n  ucvector_cleanup(&header);\n\n  return error;\n}\n\nstatic unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector PLTE;\n  ucvector_init(&PLTE);\n  for(i = 0; i != info->palettesize * 4; ++i)\n  {\n    /*add all channels except alpha channel*/\n    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);\n  }\n  error = addChunk(out, \"PLTE\", PLTE.data, PLTE.size);\n  ucvector_cleanup(&PLTE);\n\n  return error;\n}\n\nstatic unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector tRNS;\n  ucvector_init(&tRNS);\n  if(info->colortype == LCT_PALETTE)\n  {\n    size_t amount = info->palettesize;\n    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/\n    for(i = info->palettesize; i != 0; --i)\n    {\n      if(info->palette[4 * (i - 1) + 3] == 255) --amount;\n      else break;\n    }\n    /*add only alpha channel*/\n    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);\n  }\n  else if(info->colortype == LCT_GREY)\n  {\n    if(info->key_defined)\n    {\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));\n    }\n  }\n  else if(info->colortype == LCT_RGB)\n  {\n    if(info->key_defined)\n    {\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255));\n    }\n  }\n\n  error = addChunk(out, \"tRNS\", tRNS.data, tRNS.size);\n  ucvector_cleanup(&tRNS);\n\n  return error;\n}\n\nstatic unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,\n                              LodePNGCompressSettings* zlibsettings)\n{\n  ucvector zlibdata;\n  unsigned error = 0;\n\n  /*compress with the Zlib compressor*/\n  ucvector_init(&zlibdata);\n  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);\n  if(!error) error = addChunk(out, \"IDAT\", zlibdata.data, zlibdata.size);\n  ucvector_cleanup(&zlibdata);\n\n  return error;\n}\n\nstatic unsigned addChunk_IEND(ucvector* out)\n{\n  unsigned error = 0;\n  error = addChunk(out, \"IEND\", 0, 0);\n  return error;\n}\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n\nstatic unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector text;\n  ucvector_init(&text);\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&text, 0); /*0 termination char*/\n  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);\n  error = addChunk(out, \"tEXt\", text.data, text.size);\n  ucvector_cleanup(&text);\n\n  return error;\n}\n\nstatic unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,\n                              LodePNGCompressSettings* zlibsettings)\n{\n  unsigned error = 0;\n  ucvector data, compressed;\n  size_t i, textsize = strlen(textstring);\n\n  ucvector_init(&data);\n  ucvector_init(&compressed);\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&data, 0); /*0 termination char*/\n  ucvector_push_back(&data, 0); /*compression method: 0*/\n\n  error = zlib_compress(&compressed.data, &compressed.size,\n                        (unsigned char*)textstring, textsize, zlibsettings);\n  if(!error)\n  {\n    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);\n    error = addChunk(out, \"zTXt\", data.data, data.size);\n  }\n\n  ucvector_cleanup(&compressed);\n  ucvector_cleanup(&data);\n  return error;\n}\n\nstatic unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,\n                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings)\n{\n  unsigned error = 0;\n  ucvector data;\n  size_t i, textsize = strlen(textstring);\n\n  ucvector_init(&data);\n\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&data, 0); /*null termination char*/\n  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/\n  ucvector_push_back(&data, 0); /*compression method*/\n  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);\n  ucvector_push_back(&data, 0); /*null termination char*/\n  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);\n  ucvector_push_back(&data, 0); /*null termination char*/\n\n  if(compressed)\n  {\n    ucvector compressed_data;\n    ucvector_init(&compressed_data);\n    error = zlib_compress(&compressed_data.data, &compressed_data.size,\n                          (unsigned char*)textstring, textsize, zlibsettings);\n    if(!error)\n    {\n      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);\n    }\n    ucvector_cleanup(&compressed_data);\n  }\n  else /*not compressed*/\n  {\n    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);\n  }\n\n  if(!error) error = addChunk(out, \"iTXt\", data.data, data.size);\n  ucvector_cleanup(&data);\n  return error;\n}\n\nstatic unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)\n{\n  unsigned error = 0;\n  ucvector bKGD;\n  ucvector_init(&bKGD);\n  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));\n  }\n  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255));\n  }\n  else if(info->color.colortype == LCT_PALETTE)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/\n  }\n\n  error = addChunk(out, \"bKGD\", bKGD.data, bKGD.size);\n  ucvector_cleanup(&bKGD);\n\n  return error;\n}\n\nstatic unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)\n{\n  unsigned error = 0;\n  unsigned char* data = (unsigned char*)lodepng_malloc(7);\n  if(!data) return 83; /*alloc fail*/\n  data[0] = (unsigned char)(time->year >> 8);\n  data[1] = (unsigned char)(time->year & 255);\n  data[2] = (unsigned char)time->month;\n  data[3] = (unsigned char)time->day;\n  data[4] = (unsigned char)time->hour;\n  data[5] = (unsigned char)time->minute;\n  data[6] = (unsigned char)time->second;\n  error = addChunk(out, \"tIME\", data, 7);\n  lodepng_free(data);\n  return error;\n}\n\nstatic unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)\n{\n  unsigned error = 0;\n  ucvector data;\n  ucvector_init(&data);\n\n  lodepng_add32bitInt(&data, info->phys_x);\n  lodepng_add32bitInt(&data, info->phys_y);\n  ucvector_push_back(&data, info->phys_unit);\n\n  error = addChunk(out, \"pHYs\", data.data, data.size);\n  ucvector_cleanup(&data);\n\n  return error;\n}\n\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nstatic void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,\n                           size_t length, size_t bytewidth, unsigned char filterType)\n{\n  size_t i;\n  switch(filterType)\n  {\n    case 0: /*None*/\n      for(i = 0; i != length; ++i) out[i] = scanline[i];\n      break;\n    case 1: /*Sub*/\n      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];\n      break;\n    case 2: /*Up*/\n      if(prevline)\n      {\n        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];\n      }\n      else\n      {\n        for(i = 0; i != length; ++i) out[i] = scanline[i];\n      }\n      break;\n    case 3: /*Average*/\n      if(prevline)\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1);\n        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1);\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1);\n      }\n      break;\n    case 4: /*Paeth*/\n      if(prevline)\n      {\n        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/\n        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);\n        for(i = bytewidth; i < length; ++i)\n        {\n          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));\n        }\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/\n        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);\n      }\n      break;\n    default: return; /*unexisting filter type given*/\n  }\n}\n\n/* log2 approximation. A slight bit faster than std::log. */\nstatic float flog2(float f)\n{\n  float result = 0;\n  while(f > 32) { result += 4; f /= 16; }\n  while(f > 2) { ++result; f /= 2; }\n  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);\n}\n\nstatic unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,\n                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings)\n{\n  /*\n  For PNG filter method 0\n  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are\n  the scanlines with 1 extra byte per scanline\n  */\n\n  unsigned bpp = lodepng_get_bpp(info);\n  /*the width of a scanline in bytes, not including the filter type*/\n  size_t linebytes = (w * bpp + 7) / 8;\n  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/\n  size_t bytewidth = (bpp + 7) / 8;\n  const unsigned char* prevline = 0;\n  unsigned x, y;\n  unsigned error = 0;\n  LodePNGFilterStrategy strategy = settings->filter_strategy;\n\n  /*\n  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:\n   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.\n      use fixed filtering, with the filter None).\n   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is\n     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply\n     all five filters and select the filter that produces the smallest sum of absolute values per row.\n  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.\n\n  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,\n  but for \"the other case\", whatever strategy filter_strategy is set to instead of the minimum sum\n  heuristic is used.\n  */\n  if(settings->filter_palette_zero &&\n     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;\n\n  if(bpp == 0) return 31; /*error: invalid color type*/\n\n  if(strategy == LFS_ZERO)\n  {\n    for(y = 0; y != h; ++y)\n    {\n      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n      size_t inindex = linebytes * y;\n      out[outindex] = 0; /*filter type byte*/\n      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);\n      prevline = &in[inindex];\n    }\n  }\n  else if(strategy == LFS_MINSUM)\n  {\n    /*adaptive filtering*/\n    size_t sum[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    size_t smallest = 0;\n    unsigned char type, bestType = 0;\n\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n\n    if(!error)\n    {\n      for(y = 0; y != h; ++y)\n      {\n        /*try the 5 filter types*/\n        for(type = 0; type != 5; ++type)\n        {\n          filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n\n          /*calculate the sum of the result*/\n          sum[type] = 0;\n          if(type == 0)\n          {\n            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]);\n          }\n          else\n          {\n            for(x = 0; x != linebytes; ++x)\n            {\n              /*For differences, each byte should be treated as signed, values above 127 are negative\n              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.\n              This means filtertype 0 is almost never chosen, but that is justified.*/\n              unsigned char s = attempt[type][x];\n              sum[type] += s < 128 ? s : (255U - s);\n            }\n          }\n\n          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/\n          if(type == 0 || sum[type] < smallest)\n          {\n            bestType = type;\n            smallest = sum[type];\n          }\n        }\n\n        prevline = &in[y * linebytes];\n\n        /*now fill the out values*/\n        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n      }\n    }\n\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else if(strategy == LFS_ENTROPY)\n  {\n    float sum[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    float smallest = 0;\n    unsigned type, bestType = 0;\n    unsigned count[256];\n\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n\n    for(y = 0; y != h; ++y)\n    {\n      /*try the 5 filter types*/\n      for(type = 0; type != 5; ++type)\n      {\n        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n        for(x = 0; x != 256; ++x) count[x] = 0;\n        for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]];\n        ++count[type]; /*the filter type itself is part of the scanline*/\n        sum[type] = 0;\n        for(x = 0; x != 256; ++x)\n        {\n          float p = count[x] / (float)(linebytes + 1);\n          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;\n        }\n        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/\n        if(type == 0 || sum[type] < smallest)\n        {\n          bestType = type;\n          smallest = sum[type];\n        }\n      }\n\n      prevline = &in[y * linebytes];\n\n      /*now fill the out values*/\n      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n    }\n\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else if(strategy == LFS_PREDEFINED)\n  {\n    for(y = 0; y != h; ++y)\n    {\n      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n      size_t inindex = linebytes * y;\n      unsigned char type = settings->predefined_filters[y];\n      out[outindex] = type; /*filter type byte*/\n      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);\n      prevline = &in[inindex];\n    }\n  }\n  else if(strategy == LFS_BRUTE_FORCE)\n  {\n    /*brute force filter chooser.\n    deflate the scanline after every filter attempt to see which one deflates best.\n    This is very slow and gives only slightly smaller, sometimes even larger, result*/\n    size_t size[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    size_t smallest = 0;\n    unsigned type = 0, bestType = 0;\n    unsigned char* dummy;\n    LodePNGCompressSettings zlibsettings = settings->zlibsettings;\n    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,\n    to simulate the true case where the tree is the same for the whole image. Sometimes it gives\n    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare\n    cases better compression. It does make this a bit less slow, so it's worth doing this.*/\n    zlibsettings.btype = 1;\n    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG\n    images only, so disable it*/\n    zlibsettings.custom_zlib = 0;\n    zlibsettings.custom_deflate = 0;\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n    for(y = 0; y != h; ++y) /*try the 5 filter types*/\n    {\n      for(type = 0; type != 5; ++type)\n      {\n        size_t testsize = linebytes;\n        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/\n\n        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n        size[type] = 0;\n        dummy = 0;\n        zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings);\n        lodepng_free(dummy);\n        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/\n        if(type == 0 || size[type] < smallest)\n        {\n          bestType = type;\n          smallest = size[type];\n        }\n      }\n      prevline = &in[y * linebytes];\n      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n    }\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else return 88; /* unknown filter strategy */\n\n  return error;\n}\n\nstatic void addPaddingBits(unsigned char* out, const unsigned char* in,\n                           size_t olinebits, size_t ilinebits, unsigned h)\n{\n  /*The opposite of the removePaddingBits function\n  olinebits must be >= ilinebits*/\n  unsigned y;\n  size_t diff = olinebits - ilinebits;\n  size_t obp = 0, ibp = 0; /*bit pointers*/\n  for(y = 0; y != h; ++y)\n  {\n    size_t x;\n    for(x = 0; x < ilinebits; ++x)\n    {\n      unsigned char bit = readBitFromReversedStream(&ibp, in);\n      setBitOfReversedStream(&obp, out, bit);\n    }\n    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid\n    \"Use of uninitialised value of size ###\" warning from valgrind*/\n    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);\n  }\n}\n\n/*\nin: non-interlaced image with size w*h\nout: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with\n no padding bits between scanlines, but between reduced images so that each\n reduced image starts at a byte.\nbpp: bits per pixel\nthere are no padding bits, not between scanlines, not between reduced images\nin has the following size in bits: w * h * bpp.\nout is possibly bigger due to padding bits between reduced images\nNOTE: comments about padding bits are only relevant if bpp < 8\n*/\nstatic void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  unsigned passw[7], passh[7];\n  size_t filter_passstart[8], padded_passstart[8], passstart[8];\n  unsigned i;\n\n  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n  if(bpp >= 8)\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      size_t bytewidth = bpp / 8;\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;\n        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;\n        for(b = 0; b < bytewidth; ++b)\n        {\n          out[pixeloutstart + b] = in[pixelinstart + b];\n        }\n      }\n    }\n  }\n  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      unsigned ilinebits = bpp * passw[i];\n      unsigned olinebits = bpp * w;\n      size_t obp, ibp; /*bit pointers (for out and in buffer)*/\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;\n        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);\n        for(b = 0; b < bpp; ++b)\n        {\n          unsigned char bit = readBitFromReversedStream(&ibp, in);\n          setBitOfReversedStream(&obp, out, bit);\n        }\n      }\n    }\n  }\n}\n\n/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.\nreturn value is error**/\nstatic unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                    unsigned w, unsigned h,\n                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings)\n{\n  /*\n  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:\n  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter\n  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter\n  */\n  unsigned bpp = lodepng_get_bpp(&info_png->color);\n  unsigned error = 0;\n\n  if(info_png->interlace_method == 0)\n  {\n    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/\n    *out = (unsigned char*)lodepng_malloc(*outsize);\n    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/\n      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)\n      {\n        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));\n        if(!padded) error = 83; /*alloc fail*/\n        if(!error)\n        {\n          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);\n          error = filter(*out, padded, w, h, &info_png->color, settings);\n        }\n        lodepng_free(padded);\n      }\n      else\n      {\n        /*we can immediately filter into the out buffer, no other steps needed*/\n        error = filter(*out, in, w, h, &info_png->color, settings);\n      }\n    }\n  }\n  else /*interlace_method is 1 (Adam7)*/\n  {\n    unsigned passw[7], passh[7];\n    size_t filter_passstart[8], padded_passstart[8], passstart[8];\n    unsigned char* adam7;\n\n    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/\n    *out = (unsigned char*)lodepng_malloc(*outsize);\n    if(!(*out)) error = 83; /*alloc fail*/\n\n    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);\n    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      unsigned i;\n\n      Adam7_interlace(adam7, in, w, h, bpp);\n      for(i = 0; i != 7; ++i)\n      {\n        if(bpp < 8)\n        {\n          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);\n          if(!padded) ERROR_BREAK(83); /*alloc fail*/\n          addPaddingBits(padded, &adam7[passstart[i]],\n                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);\n          error = filter(&(*out)[filter_passstart[i]], padded,\n                         passw[i], passh[i], &info_png->color, settings);\n          lodepng_free(padded);\n        }\n        else\n        {\n          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],\n                         passw[i], passh[i], &info_png->color, settings);\n        }\n\n        if(error) break;\n      }\n    }\n\n    lodepng_free(adam7);\n  }\n\n  return error;\n}\n\n/*\npalette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...\nreturns 0 if the palette is opaque,\nreturns 1 if the palette has a single color with alpha 0 ==> color key\nreturns 2 if the palette is semi-translucent.\n*/\nstatic unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize)\n{\n  size_t i;\n  unsigned key = 0;\n  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/\n  for(i = 0; i != palettesize; ++i)\n  {\n    if(!key && palette[4 * i + 3] == 0)\n    {\n      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];\n      key = 1;\n      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/\n    }\n    else if(palette[4 * i + 3] != 255) return 2;\n    /*when key, no opaque RGB may have key's RGB*/\n    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;\n  }\n  return key;\n}\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\nstatic unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)\n{\n  unsigned char* inchunk = data;\n  while((size_t)(inchunk - data) < datasize)\n  {\n    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));\n    out->allocsize = out->size; /*fix the allocsize again*/\n    inchunk = lodepng_chunk_next(inchunk);\n  }\n  return 0;\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nunsigned lodepng_encode(unsigned char** out, size_t* outsize,\n                        const unsigned char* image, unsigned w, unsigned h,\n                        LodePNGState* state)\n{\n  LodePNGInfo info;\n  ucvector outv;\n  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/\n  size_t datasize = 0;\n\n  /*provide some proper output values if error will happen*/\n  *out = 0;\n  *outsize = 0;\n  state->error = 0;\n\n  lodepng_info_init(&info);\n  lodepng_info_copy(&info, &state->info_png);\n\n  if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette)\n      && (info.color.palettesize == 0 || info.color.palettesize > 256))\n  {\n    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/\n    return state->error;\n  }\n\n  if(state->encoder.auto_convert)\n  {\n    state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);\n  }\n  if(state->error) return state->error;\n\n  if(state->encoder.zlibsettings.btype > 2)\n  {\n    CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/\n  }\n  if(state->info_png.interlace_method > 1)\n  {\n    CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/\n  }\n\n  state->error = checkColorValidity(info.color.colortype, info.color.bitdepth);\n  if(state->error) return state->error; /*error: unexisting color type given*/\n  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);\n  if(state->error) return state->error; /*error: unexisting color type given*/\n\n  if(!lodepng_color_mode_equal(&state->info_raw, &info.color))\n  {\n    unsigned char* converted;\n    size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8;\n\n    converted = (unsigned char*)lodepng_malloc(size);\n    if(!converted && size) state->error = 83; /*alloc fail*/\n    if(!state->error)\n    {\n      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);\n    }\n    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);\n    lodepng_free(converted);\n  }\n  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);\n\n  ucvector_init(&outv);\n  while(!state->error) /*while only executed once, to break on error*/\n  {\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    size_t i;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*write signature and chunks*/\n    writeSignature(&outv);\n    /*IHDR*/\n    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*unknown chunks between IHDR and PLTE*/\n    if(info.unknown_chunks_data[0])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*PLTE*/\n    if(info.color.colortype == LCT_PALETTE)\n    {\n      addChunk_PLTE(&outv, &info.color);\n    }\n    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA))\n    {\n      addChunk_PLTE(&outv, &info.color);\n    }\n    /*tRNS*/\n    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0)\n    {\n      addChunk_tRNS(&outv, &info.color);\n    }\n    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined)\n    {\n      addChunk_tRNS(&outv, &info.color);\n    }\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*bKGD (must come between PLTE and the IDAt chunks*/\n    if(info.background_defined) addChunk_bKGD(&outv, &info);\n    /*pHYs (must come before the IDAT chunks)*/\n    if(info.phys_defined) addChunk_pHYs(&outv, &info);\n\n    /*unknown chunks between PLTE and IDAT*/\n    if(info.unknown_chunks_data[1])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*IDAT (multiple IDAT chunks must be consecutive)*/\n    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);\n    if(state->error) break;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*tIME*/\n    if(info.time_defined) addChunk_tIME(&outv, &info.time);\n    /*tEXt and/or zTXt*/\n    for(i = 0; i != info.text_num; ++i)\n    {\n      if(strlen(info.text_keys[i]) > 79)\n      {\n        state->error = 66; /*text chunk too large*/\n        break;\n      }\n      if(strlen(info.text_keys[i]) < 1)\n      {\n        state->error = 67; /*text chunk too small*/\n        break;\n      }\n      if(state->encoder.text_compression)\n      {\n        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);\n      }\n      else\n      {\n        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);\n      }\n    }\n    /*LodePNG version id in text chunk*/\n    if(state->encoder.add_id)\n    {\n      unsigned alread_added_id_text = 0;\n      for(i = 0; i != info.text_num; ++i)\n      {\n        if(!strcmp(info.text_keys[i], \"LodePNG\"))\n        {\n          alread_added_id_text = 1;\n          break;\n        }\n      }\n      if(alread_added_id_text == 0)\n      {\n        addChunk_tEXt(&outv, \"LodePNG\", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/\n      }\n    }\n    /*iTXt*/\n    for(i = 0; i != info.itext_num; ++i)\n    {\n      if(strlen(info.itext_keys[i]) > 79)\n      {\n        state->error = 66; /*text chunk too large*/\n        break;\n      }\n      if(strlen(info.itext_keys[i]) < 1)\n      {\n        state->error = 67; /*text chunk too small*/\n        break;\n      }\n      addChunk_iTXt(&outv, state->encoder.text_compression,\n                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],\n                    &state->encoder.zlibsettings);\n    }\n\n    /*unknown chunks between IDAT and IEND*/\n    if(info.unknown_chunks_data[2])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    addChunk_IEND(&outv);\n\n    break; /*this isn't really a while loop; no error happened so break out now!*/\n  }\n\n  lodepng_info_cleanup(&info);\n  lodepng_free(data);\n  /*instead of cleaning the vector up, give it to the output*/\n  *out = outv.data;\n  *outsize = outv.size;\n\n  return state->error;\n}\n\nunsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,\n                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned error;\n  LodePNGState state;\n  lodepng_state_init(&state);\n  state.info_raw.colortype = colortype;\n  state.info_raw.bitdepth = bitdepth;\n  state.info_png.color.colortype = colortype;\n  state.info_png.color.bitdepth = bitdepth;\n  lodepng_encode(out, outsize, image, w, h, &state);\n  error = state.error;\n  lodepng_state_cleanup(&state);\n  return error;\n}\n\nunsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);\n}\n\nunsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,\n                             LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);\n  if(!error) error = lodepng_save_file(buffer, buffersize, filename);\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);\n}\n\nunsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);\n}\n#endif /*LODEPNG_COMPILE_DISK*/\n\nvoid lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)\n{\n  lodepng_compress_settings_init(&settings->zlibsettings);\n  settings->filter_palette_zero = 1;\n  settings->filter_strategy = LFS_MINSUM;\n  settings->auto_convert = 1;\n  settings->force_palette = 0;\n  settings->predefined_filters = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  settings->add_id = 0;\n  settings->text_compression = 1;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ERROR_TEXT\n/*\nThis returns the description of a numerical error code in English. This is also\nthe documentation of all the error codes.\n*/\nconst char* lodepng_error_text(unsigned code)\n{\n  switch(code)\n  {\n    case 0: return \"no error, everything went ok\";\n    case 1: return \"nothing done yet\"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/\n    case 10: return \"end of input memory reached without huffman end code\"; /*while huffman decoding*/\n    case 11: return \"error in code tree made it jump outside of huffman tree\"; /*while huffman decoding*/\n    case 13: return \"problem while processing dynamic deflate block\";\n    case 14: return \"problem while processing dynamic deflate block\";\n    case 15: return \"problem while processing dynamic deflate block\";\n    case 16: return \"unexisting code while processing dynamic deflate block\";\n    case 17: return \"end of out buffer memory reached while inflating\";\n    case 18: return \"invalid distance code while inflating\";\n    case 19: return \"end of out buffer memory reached while inflating\";\n    case 20: return \"invalid deflate block BTYPE encountered while decoding\";\n    case 21: return \"NLEN is not ones complement of LEN in a deflate block\";\n     /*end of out buffer memory reached while inflating:\n     This can happen if the inflated deflate data is longer than the amount of bytes required to fill up\n     all the pixels of the image, given the color depth and image dimensions. Something that doesn't\n     happen in a normal, well encoded, PNG image.*/\n    case 22: return \"end of out buffer memory reached while inflating\";\n    case 23: return \"end of in buffer memory reached while inflating\";\n    case 24: return \"invalid FCHECK in zlib header\";\n    case 25: return \"invalid compression method in zlib header\";\n    case 26: return \"FDICT encountered in zlib header while it's not used for PNG\";\n    case 27: return \"PNG file is smaller than a PNG header\";\n    /*Checks the magic file header, the first 8 bytes of the PNG file*/\n    case 28: return \"incorrect PNG signature, it's no PNG or corrupted\";\n    case 29: return \"first chunk is not the header chunk\";\n    case 30: return \"chunk length too large, chunk broken off at end of file\";\n    case 31: return \"illegal PNG color type or bpp\";\n    case 32: return \"illegal PNG compression method\";\n    case 33: return \"illegal PNG filter method\";\n    case 34: return \"illegal PNG interlace method\";\n    case 35: return \"chunk length of a chunk is too large or the chunk too small\";\n    case 36: return \"illegal PNG filter type encountered\";\n    case 37: return \"illegal bit depth for this color type given\";\n    case 38: return \"the palette is too big\"; /*more than 256 colors*/\n    case 39: return \"more palette alpha values given in tRNS chunk than there are colors in the palette\";\n    case 40: return \"tRNS chunk has wrong size for greyscale image\";\n    case 41: return \"tRNS chunk has wrong size for RGB image\";\n    case 42: return \"tRNS chunk appeared while it was not allowed for this color type\";\n    case 43: return \"bKGD chunk has wrong size for palette image\";\n    case 44: return \"bKGD chunk has wrong size for greyscale image\";\n    case 45: return \"bKGD chunk has wrong size for RGB image\";\n    case 48: return \"empty input buffer given to decoder. Maybe caused by non-existing file?\";\n    case 49: return \"jumped past memory while generating dynamic huffman tree\";\n    case 50: return \"jumped past memory while generating dynamic huffman tree\";\n    case 51: return \"jumped past memory while inflating huffman block\";\n    case 52: return \"jumped past memory while inflating\";\n    case 53: return \"size of zlib data too small\";\n    case 54: return \"repeat symbol in tree while there was no value symbol yet\";\n    /*jumped past tree while generating huffman tree, this could be when the\n    tree will have more leaves than symbols after generating it out of the\n    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/\n    case 55: return \"jumped past tree while generating huffman tree\";\n    case 56: return \"given output image colortype or bitdepth not supported for color conversion\";\n    case 57: return \"invalid CRC encountered (checking CRC can be disabled)\";\n    case 58: return \"invalid ADLER32 encountered (checking ADLER32 can be disabled)\";\n    case 59: return \"requested color conversion not supported\";\n    case 60: return \"invalid window size given in the settings of the encoder (must be 0-32768)\";\n    case 61: return \"invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)\";\n    /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/\n    case 62: return \"conversion from color to greyscale not supported\";\n    case 63: return \"length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk\"; /*(2^31-1)*/\n    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/\n    case 64: return \"the length of the END symbol 256 in the Huffman tree is 0\";\n    case 66: return \"the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes\";\n    case 67: return \"the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte\";\n    case 68: return \"tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors\";\n    case 69: return \"unknown chunk type with 'critical' flag encountered by the decoder\";\n    case 71: return \"unexisting interlace mode given to encoder (must be 0 or 1)\";\n    case 72: return \"while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)\";\n    case 73: return \"invalid tIME chunk size\";\n    case 74: return \"invalid pHYs chunk size\";\n    /*length could be wrong, or data chopped off*/\n    case 75: return \"no null termination char found while decoding text chunk\";\n    case 76: return \"iTXt chunk too short to contain required bytes\";\n    case 77: return \"integer overflow in buffer size\";\n    case 78: return \"failed to open file for reading\"; /*file doesn't exist or couldn't be opened for reading*/\n    case 79: return \"failed to open file for writing\";\n    case 80: return \"tried creating a tree of 0 symbols\";\n    case 81: return \"lazy matching at pos 0 is impossible\";\n    case 82: return \"color conversion to palette requested while a color isn't in palette\";\n    case 83: return \"memory allocation failed\";\n    case 84: return \"given image too small to contain all pixels to be encoded\";\n    case 86: return \"impossible offset in lz77 encoding (internal bug)\";\n    case 87: return \"must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined\";\n    case 88: return \"invalid filter strategy given for LodePNGEncoderSettings.filter_strategy\";\n    case 89: return \"text chunk keyword too short or long: must have size 1-79\";\n    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/\n    case 90: return \"windowsize must be a power of two\";\n    case 91: return \"invalid decompressed idat size\";\n    case 92: return \"too many pixels, not supported\";\n    case 93: return \"zero width or height is invalid\";\n    case 94: return \"header chunk must have a size of 13 bytes\";\n  }\n  return \"unknown error code\";\n}\n#endif /*LODEPNG_COMPILE_ERROR_TEXT*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // C++ Wrapper                                                          // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_CPP\nnamespace lodepng\n{\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename)\n{\n  long size = lodepng_filesize(filename.c_str());\n  if(size < 0) return 78;\n  buffer.resize((size_t)size);\n  return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str());\n}\n\n/*write given buffer to the file, overwriting the file, it doesn't append to it.*/\nunsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename)\n{\n  return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());\n}\n#endif /* LODEPNG_COMPILE_DISK */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_DECODER\nunsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                    const LodePNGDecompressSettings& settings)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize = 0;\n  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                    const LodePNGDecompressSettings& settings)\n{\n  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);\n}\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\nunsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                  const LodePNGCompressSettings& settings)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize = 0;\n  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                  const LodePNGCompressSettings& settings)\n{\n  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);\n}\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_ZLIB */\n\n\n#ifdef LODEPNG_COMPILE_PNG\n\nState::State()\n{\n  lodepng_state_init(this);\n}\n\nState::State(const State& other)\n{\n  lodepng_state_init(this);\n  lodepng_state_copy(this, &other);\n}\n\nState::~State()\n{\n  lodepng_state_cleanup(this);\n}\n\nState& State::operator=(const State& other)\n{\n  lodepng_state_copy(this, &other);\n  return *this;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,\n                size_t insize, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);\n  if(buffer && !error)\n  {\n    State state;\n    state.info_raw.colortype = colortype;\n    state.info_raw.bitdepth = bitdepth;\n    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)\n{\n  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const unsigned char* in, size_t insize)\n{\n  unsigned char* buffer = NULL;\n  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);\n  if(buffer && !error)\n  {\n    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n  }\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const std::vector<unsigned char>& in)\n{\n  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\t\n  std::vector<unsigned char> buffer;\n  unsigned error = load_file(buffer, filename);\n  if(error) return error;\n  return decode(out, w, h, buffer, colortype, bitdepth);\n}\n#endif /* LODEPNG_COMPILE_DECODER */\n#endif /* LODEPNG_COMPILE_DISK */\n\n#ifdef LODEPNG_COMPILE_ENCODER\nunsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;\n  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                State& state)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                State& state)\n{\n  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;\n  return encode(out, in.empty() ? 0 : &in[0], w, h, state);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned encode(const std::string& filename,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  std::vector<unsigned char> buffer;\n  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);\n  if(!error) error = save_file(buffer, filename);\n  return error;\n}\n\nunsigned encode(const std::string& filename,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;\n  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);\n}\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_PNG */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/lodepng.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nLodePNG version 20160409\n\nCopyright (c) 2005-2016 Lode Vandevenne\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#ifndef LODEPNG_H\n#define LODEPNG_H\n\n#include <string.h> /*for size_t*/\n\nextern const char* LODEPNG_VERSION_STRING;\n\n/*\nThe following #defines are used to create code sections. They can be disabled\nto disable code sections, which can give faster compile time and smaller binary.\nThe \"NO_COMPILE\" defines are designed to be used to pass as defines to the\ncompiler command to disable them without modifying this header, e.g.\n-DLODEPNG_NO_COMPILE_ZLIB for gcc.\nIn addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to\nallow implementing a custom lodepng_crc32.\n*/\n/*deflate & zlib. If disabled, you must specify alternative zlib functions in\nthe custom_zlib field of the compress and decompress settings*/\n#ifndef LODEPNG_NO_COMPILE_ZLIB\n#define LODEPNG_COMPILE_ZLIB\n#endif\n/*png encoder and png decoder*/\n#ifndef LODEPNG_NO_COMPILE_PNG\n#define LODEPNG_COMPILE_PNG\n#endif\n/*deflate&zlib decoder and png decoder*/\n#ifndef LODEPNG_NO_COMPILE_DECODER\n#define LODEPNG_COMPILE_DECODER\n#endif\n/*deflate&zlib encoder and png encoder*/\n#ifndef LODEPNG_NO_COMPILE_ENCODER\n#define LODEPNG_COMPILE_ENCODER\n#endif\n/*the optional built in harddisk file loading and saving functions*/\n#ifndef LODEPNG_NO_COMPILE_DISK\n#define LODEPNG_COMPILE_DISK\n#endif\n/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/\n#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS\n#define LODEPNG_COMPILE_ANCILLARY_CHUNKS\n#endif\n/*ability to convert error numerical codes to English text string*/\n#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT\n#define LODEPNG_COMPILE_ERROR_TEXT\n#endif\n/*Compile the default allocators (C's free, malloc and realloc). If you disable this,\nyou can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your\nsource files with custom allocators.*/\n#ifndef LODEPNG_NO_COMPILE_ALLOCATORS\n#define LODEPNG_COMPILE_ALLOCATORS\n#endif\n/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/\n#ifdef __cplusplus\n#ifndef LODEPNG_NO_COMPILE_CPP\n#define LODEPNG_COMPILE_CPP\n#endif\n#endif\n\n#ifdef LODEPNG_COMPILE_CPP\n#include <vector>\n#include <string>\n#endif /*LODEPNG_COMPILE_CPP*/\n\n#ifdef LODEPNG_COMPILE_PNG\n/*The PNG color types (also used for raw).*/\ntypedef enum LodePNGColorType\n{\n  LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/\n  LCT_RGB = 2, /*RGB: 8,16 bit*/\n  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/\n  LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/\n  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/\n} LodePNGColorType;\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nConverts PNG data in memory to raw pixel data.\nout: Output parameter. Pointer to buffer that will contain the raw pixel data.\n     After decoding, its size is w * h * (bytes per pixel) bytes larger than\n     initially. Bytes per pixel depends on colortype and bitdepth.\n     Must be freed after usage with free(*out).\n     Note: for 16-bit per channel colors, uses big endian format like PNG does.\nw: Output parameter. Pointer to width of pixel data.\nh: Output parameter. Pointer to height of pixel data.\nin: Memory buffer with the PNG file.\ninsize: size of the in buffer.\ncolortype: the desired color type for the raw output image. See explanation on PNG color types.\nbitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.\nReturn value: LodePNG error code (0 means no error).\n*/\nunsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,\n                               const unsigned char* in, size_t insize,\n                               LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/\nunsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,\n                          const unsigned char* in, size_t insize);\n\n/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/\nunsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,\n                          const unsigned char* in, size_t insize);\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad PNG from disk, from file with given name.\nSame as the other decode functions, but instead takes a filename as input.\n*/\nunsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,\n                             const char* filename,\n                             LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/\nunsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,\n                               const char* filename);\n\n/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/\nunsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,\n                               const char* filename);\n#endif /*LODEPNG_COMPILE_DISK*/\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nConverts raw pixel data into a PNG image in memory. The colortype and bitdepth\n  of the output PNG image cannot be chosen, they are automatically determined\n  by the colortype, bitdepth and content of the input pixel data.\n  Note: for 16-bit per channel colors, needs big endian format like PNG does.\nout: Output parameter. Pointer to buffer that will contain the PNG image data.\n     Must be freed after usage with free(*out).\noutsize: Output parameter. Pointer to the size in bytes of the out buffer.\nimage: The raw pixel data to encode. The size of this buffer should be\n       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.\nw: width of the raw pixel data in pixels.\nh: height of the raw pixel data in pixels.\ncolortype: the color type of the raw input image. See explanation on PNG color types.\nbitdepth: the bit depth of the raw input image. See explanation on PNG color types.\nReturn value: LodePNG error code (0 means no error).\n*/\nunsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,\n                               const unsigned char* image, unsigned w, unsigned h,\n                               LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/\nunsigned lodepng_encode32(unsigned char** out, size_t* outsize,\n                          const unsigned char* image, unsigned w, unsigned h);\n\n/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/\nunsigned lodepng_encode24(unsigned char** out, size_t* outsize,\n                          const unsigned char* image, unsigned w, unsigned h);\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts raw pixel data into a PNG file on disk.\nSame as the other encode functions, but instead takes a filename as output.\nNOTE: This overwrites existing files without warning!\n*/\nunsigned lodepng_encode_file(const char* filename,\n                             const unsigned char* image, unsigned w, unsigned h,\n                             LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/\nunsigned lodepng_encode32_file(const char* filename,\n                               const unsigned char* image, unsigned w, unsigned h);\n\n/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/\nunsigned lodepng_encode24_file(const char* filename,\n                               const unsigned char* image, unsigned w, unsigned h);\n#endif /*LODEPNG_COMPILE_DISK*/\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n\n#ifdef LODEPNG_COMPILE_CPP\nnamespace lodepng\n{\n#ifdef LODEPNG_COMPILE_DECODER\n/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype\nis the format to output the pixels to. Default is RGBA 8-bit per channel.*/\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const unsigned char* in, size_t insize,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::vector<unsigned char>& in,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts PNG file from disk to raw pixel data in memory.\nSame as the other decode functions, but instead takes a filename as input.\n*/\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::string& filename,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype\nis that of the raw input data. The output PNG color type will be auto chosen.*/\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts 32-bit RGBA raw pixel data into a PNG file on disk.\nSame as the other encode functions, but instead takes a filename as output.\nNOTE: This overwrites existing files without warning!\n*/\nunsigned encode(const std::string& filename,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned encode(const std::string& filename,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_ENCODER */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ERROR_TEXT\n/*Returns an English description of the numerical error code.*/\nconst char* lodepng_error_text(unsigned code);\n#endif /*LODEPNG_COMPILE_ERROR_TEXT*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*Settings for zlib decompression*/\ntypedef struct LodePNGDecompressSettings LodePNGDecompressSettings;\nstruct LodePNGDecompressSettings\n{\n  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/\n\n  /*use custom zlib decoder instead of built in one (default: null)*/\n  unsigned (*custom_zlib)(unsigned char**, size_t*,\n                          const unsigned char*, size_t,\n                          const LodePNGDecompressSettings*);\n  /*use custom deflate decoder instead of built in one (default: null)\n  if custom_zlib is used, custom_deflate is ignored since only the built in\n  zlib function will call custom_deflate*/\n  unsigned (*custom_inflate)(unsigned char**, size_t*,\n                             const unsigned char*, size_t,\n                             const LodePNGDecompressSettings*);\n\n  const void* custom_context; /*optional custom settings for custom functions*/\n};\n\nextern const LodePNGDecompressSettings lodepng_default_decompress_settings;\nvoid lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nSettings for zlib compression. Tweaking these settings tweaks the balance\nbetween speed and compression ratio.\n*/\ntypedef struct LodePNGCompressSettings LodePNGCompressSettings;\nstruct LodePNGCompressSettings /*deflate = compress*/\n{\n  /*LZ77 related settings*/\n  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/\n  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/\n  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/\n  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/\n  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/\n  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/\n\n  /*use custom zlib encoder instead of built in one (default: null)*/\n  unsigned (*custom_zlib)(unsigned char**, size_t*,\n                          const unsigned char*, size_t,\n                          const LodePNGCompressSettings*);\n  /*use custom deflate encoder instead of built in one (default: null)\n  if custom_zlib is used, custom_deflate is ignored since only the built in\n  zlib function will call custom_deflate*/\n  unsigned (*custom_deflate)(unsigned char**, size_t*,\n                             const unsigned char*, size_t,\n                             const LodePNGCompressSettings*);\n\n  const void* custom_context; /*optional custom settings for custom functions*/\n};\n\nextern const LodePNGCompressSettings lodepng_default_compress_settings;\nvoid lodepng_compress_settings_init(LodePNGCompressSettings* settings);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_PNG\n/*\nColor mode of an image. Contains all information required to decode the pixel\nbits to RGBA colors. This information is the same as used in the PNG file\nformat, and is used both for PNG and raw image data in LodePNG.\n*/\ntypedef struct LodePNGColorMode\n{\n  /*header (IHDR)*/\n  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/\n  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/\n\n  /*\n  palette (PLTE and tRNS)\n\n  Dynamically allocated with the colors of the palette, including alpha.\n  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use\n  lodepng_palette_clear, then for each color use lodepng_palette_add.\n  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.\n\n  When decoding, by default you can ignore this palette, since LodePNG already\n  fills the palette colors in the pixels of the raw RGBA output.\n\n  The palette is only supported for color type 3.\n  */\n  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/\n  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/\n\n  /*\n  transparent color key (tRNS)\n\n  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.\n  For greyscale PNGs, r, g and b will all 3 be set to the same.\n\n  When decoding, by default you can ignore this information, since LodePNG sets\n  pixels with this key to transparent already in the raw RGBA output.\n\n  The color key is only supported for color types 0 and 2.\n  */\n  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/\n  unsigned key_r;       /*red/greyscale component of color key*/\n  unsigned key_g;       /*green component of color key*/\n  unsigned key_b;       /*blue component of color key*/\n} LodePNGColorMode;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_color_mode_init(LodePNGColorMode* info);\nvoid lodepng_color_mode_cleanup(LodePNGColorMode* info);\n/*return value is error code (0 means no error)*/\nunsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);\n\nvoid lodepng_palette_clear(LodePNGColorMode* info);\n/*add 1 color to the palette*/\nunsigned lodepng_palette_add(LodePNGColorMode* info,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);\n\n/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/\nunsigned lodepng_get_bpp(const LodePNGColorMode* info);\n/*get the amount of color channels used, based on colortype in the struct.\nIf a palette is used, it counts as 1 channel.*/\nunsigned lodepng_get_channels(const LodePNGColorMode* info);\n/*is it a greyscale type? (only colortype 0 or 4)*/\nunsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);\n/*has it got an alpha channel? (only colortype 2 or 6)*/\nunsigned lodepng_is_alpha_type(const LodePNGColorMode* info);\n/*has it got a palette? (only colortype 3)*/\nunsigned lodepng_is_palette_type(const LodePNGColorMode* info);\n/*only returns true if there is a palette and there is a value in the palette with alpha < 255.\nLoops through the palette to check this.*/\nunsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);\n/*\nCheck if the given color info indicates the possibility of having non-opaque pixels in the PNG image.\nReturns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).\nReturns false if the image can only have opaque pixels.\nIn detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,\nor if \"key_defined\" is true.\n*/\nunsigned lodepng_can_have_alpha(const LodePNGColorMode* info);\n/*Returns the byte size of a raw image buffer with given width, height and color mode*/\nsize_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*The information of a Time chunk in PNG.*/\ntypedef struct LodePNGTime\n{\n  unsigned year;    /*2 bytes used (0-65535)*/\n  unsigned month;   /*1-12*/\n  unsigned day;     /*1-31*/\n  unsigned hour;    /*0-23*/\n  unsigned minute;  /*0-59*/\n  unsigned second;  /*0-60 (to allow for leap seconds)*/\n} LodePNGTime;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*Information about the PNG image, except pixels, width and height.*/\ntypedef struct LodePNGInfo\n{\n  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/\n  unsigned compression_method;/*compression method of the original file. Always 0.*/\n  unsigned filter_method;     /*filter method of the original file*/\n  unsigned interlace_method;  /*interlace method of the original file*/\n  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  /*\n  suggested background color chunk (bKGD)\n  This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.\n\n  For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding\n  the encoder writes the red one. For palette PNGs: When decoding, the RGB value\n  will be stored, not a palette index. But when encoding, specify the index of\n  the palette in background_r, the other two are then ignored.\n\n  The decoder does not use this background color to edit the color of pixels.\n  */\n  unsigned background_defined; /*is a suggested background color given?*/\n  unsigned background_r;       /*red component of suggested background color*/\n  unsigned background_g;       /*green component of suggested background color*/\n  unsigned background_b;       /*blue component of suggested background color*/\n\n  /*\n  non-international text chunks (tEXt and zTXt)\n\n  The char** arrays each contain num strings. The actual messages are in\n  text_strings, while text_keys are keywords that give a short description what\n  the actual text represents, e.g. Title, Author, Description, or anything else.\n\n  A keyword is minimum 1 character and maximum 79 characters long. It's\n  discouraged to use a single line length longer than 79 characters for texts.\n\n  Don't allocate these text buffers yourself. Use the init/cleanup functions\n  correctly and use lodepng_add_text and lodepng_clear_text.\n  */\n  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/\n  char** text_keys; /*the keyword of a text chunk (e.g. \"Comment\")*/\n  char** text_strings; /*the actual text*/\n\n  /*\n  international text chunks (iTXt)\n  Similar to the non-international text chunks, but with additional strings\n  \"langtags\" and \"transkeys\".\n  */\n  size_t itext_num; /*the amount of international texts in this PNG*/\n  char** itext_keys; /*the English keyword of the text chunk (e.g. \"Comment\")*/\n  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/\n  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/\n  char** itext_strings; /*the actual international text - UTF-8 string*/\n\n  /*time chunk (tIME)*/\n  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/\n  LodePNGTime time;\n\n  /*phys chunk (pHYs)*/\n  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/\n  unsigned phys_x; /*pixels per unit in x direction*/\n  unsigned phys_y; /*pixels per unit in y direction*/\n  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/\n\n  /*\n  unknown chunks\n  There are 3 buffers, one for each position in the PNG where unknown chunks can appear\n  each buffer contains all unknown chunks for that position consecutively\n  The 3 buffers are the unknown chunks between certain critical chunks:\n  0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND\n  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared\n  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.\n  */\n  unsigned char* unknown_chunks_data[3];\n  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGInfo;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_info_init(LodePNGInfo* info);\nvoid lodepng_info_cleanup(LodePNGInfo* info);\n/*return value is error code (0 means no error)*/\nunsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\nvoid lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/\nunsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/\n\nvoid lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/\nunsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,\n                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*\nConverts raw buffer from one color type to another color type, based on\nLodePNGColorMode structs to describe the input and output color type.\nSee the reference manual at the end of this header file to see which color conversions are supported.\nreturn value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)\nThe out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel\nof the output color type (lodepng_get_bpp).\nFor < 8 bpp images, there should not be padding bits at the end of scanlines.\nFor 16-bit per channel colors, uses big endian format like PNG does.\nReturn value is LodePNG error code\n*/\nunsigned lodepng_convert(unsigned char* out, const unsigned char* in,\n                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,\n                         unsigned w, unsigned h);\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nSettings for the decoder. This contains settings for the PNG and the Zlib\ndecoder, but not the Info settings from the Info structs.\n*/\ntypedef struct LodePNGDecoderSettings\n{\n  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/\n\n  unsigned ignore_crc; /*ignore CRC checksums*/\n\n  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/\n  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/\n  unsigned remember_unknown_chunks;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGDecoderSettings;\n\nvoid lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/\ntypedef enum LodePNGFilterStrategy\n{\n  /*every filter at zero*/\n  LFS_ZERO,\n  /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/\n  LFS_MINSUM,\n  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending\n  on the image, this is better or worse than minsum.*/\n  LFS_ENTROPY,\n  /*\n  Brute-force-search PNG filters by compressing each filter for each scanline.\n  Experimental, very slow, and only rarely gives better compression than MINSUM.\n  */\n  LFS_BRUTE_FORCE,\n  /*use predefined_filters buffer: you specify the filter type for each scanline*/\n  LFS_PREDEFINED\n} LodePNGFilterStrategy;\n\n/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.\nUsed internally by default if \"auto_convert\" is enabled. Public because it's useful for custom algorithms.*/\ntypedef struct LodePNGColorProfile\n{\n  unsigned colored; /*not greyscale*/\n  unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/\n  unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/\n  unsigned short key_g;\n  unsigned short key_b;\n  unsigned alpha; /*alpha channel or alpha palette required*/\n  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/\n  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/\n  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/\n} LodePNGColorProfile;\n\nvoid lodepng_color_profile_init(LodePNGColorProfile* profile);\n\n/*Get a LodePNGColorProfile of the image.*/\nunsigned lodepng_get_color_profile(LodePNGColorProfile* profile,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in);\n/*The function LodePNG uses internally to decide the PNG color with auto_convert.\nChooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/\nunsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in);\n\n/*Settings for the encoder.*/\ntypedef struct LodePNGEncoderSettings\n{\n  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/\n\n  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/\n\n  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than\n  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to\n  completely follow the official PNG heuristic, filter_palette_zero must be true and\n  filter_strategy must be LFS_MINSUM*/\n  unsigned filter_palette_zero;\n  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.\n  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/\n  LodePNGFilterStrategy filter_strategy;\n  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with\n  the same length as the amount of scanlines in the image, and each value must <= 5. You\n  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero\n  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/\n  const unsigned char* predefined_filters;\n\n  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).\n  If colortype is 3, PLTE is _always_ created.*/\n  unsigned force_palette;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  /*add LodePNG identifier and version as a text chunk, for debugging*/\n  unsigned add_id;\n  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/\n  unsigned text_compression;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGEncoderSettings;\n\nvoid lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n\n#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)\n/*The settings, state and information for extended encoding and decoding.*/\ntypedef struct LodePNGState\n{\n#ifdef LODEPNG_COMPILE_DECODER\n  LodePNGDecoderSettings decoder; /*the decoding settings*/\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\n  LodePNGEncoderSettings encoder; /*the encoding settings*/\n#endif /*LODEPNG_COMPILE_ENCODER*/\n  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/\n  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/\n  unsigned error;\n#ifdef LODEPNG_COMPILE_CPP\n  /* For the lodepng::State subclass. */\n  virtual ~LodePNGState(){}\n#endif\n} LodePNGState;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_state_init(LodePNGState* state);\nvoid lodepng_state_cleanup(LodePNGState* state);\nvoid lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);\n#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nSame as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and\ngetting much more information about the PNG image and color mode.\n*/\nunsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,\n                        LodePNGState* state,\n                        const unsigned char* in, size_t insize);\n\n/*\nRead the PNG header, but not the actual data. This returns only the information\nthat is in the header chunk of the PNG, such as width, height and color type. The\ninformation is placed in the info_png field of the LodePNGState.\n*/\nunsigned lodepng_inspect(unsigned* w, unsigned* h,\n                         LodePNGState* state,\n                         const unsigned char* in, size_t insize);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/\nunsigned lodepng_encode(unsigned char** out, size_t* outsize,\n                        const unsigned char* image, unsigned w, unsigned h,\n                        LodePNGState* state);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*\nThe lodepng_chunk functions are normally not needed, except to traverse the\nunknown chunks stored in the LodePNGInfo struct, or add new ones to it.\nIt also allows traversing the chunks of an encoded PNG file yourself.\n\nPNG standard chunk naming conventions:\nFirst byte: uppercase = critical, lowercase = ancillary\nSecond byte: uppercase = public, lowercase = private\nThird byte: must be uppercase\nFourth byte: uppercase = unsafe to copy, lowercase = safe to copy\n*/\n\n/*\nGets the length of the data of the chunk. Total chunk length has 12 bytes more.\nThere must be at least 4 bytes to read from. If the result value is too large,\nit may be corrupt data.\n*/\nunsigned lodepng_chunk_length(const unsigned char* chunk);\n\n/*puts the 4-byte type in null terminated string*/\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk);\n\n/*check if the type is the given type*/\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);\n\n/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/\nunsigned char lodepng_chunk_ancillary(const unsigned char* chunk);\n\n/*0: public, 1: private (see PNG standard)*/\nunsigned char lodepng_chunk_private(const unsigned char* chunk);\n\n/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);\n\n/*get pointer to the data of the chunk, where the input points to the header of the chunk*/\nunsigned char* lodepng_chunk_data(unsigned char* chunk);\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);\n\n/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk);\n\n/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/\nvoid lodepng_chunk_generate_crc(unsigned char* chunk);\n\n/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/\nunsigned char* lodepng_chunk_next(unsigned char* chunk);\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);\n\n/*\nAppends chunk to the data in out. The given chunk should already have its chunk header.\nThe out variable and outlength are updated to reflect the new reallocated buffer.\nReturns error code (0 if it went ok)\n*/\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);\n\n/*\nAppends new chunk to out. The chunk to append is given by giving its length, type\nand data separately. The type is a 4-letter string.\nThe out variable and outlength are updated to reflect the new reallocated buffer.\nReturne error code (0 if it went ok)\n*/\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data);\n\n\n/*Calculate CRC32 of buffer*/\nunsigned lodepng_crc32(const unsigned char* buf, size_t len);\n#endif /*LODEPNG_COMPILE_PNG*/\n\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*\nThis zlib part can be used independently to zlib compress and decompress a\nbuffer. It cannot be used to create gzip files however, and it only supports the\npart of zlib that is required for PNG, it does not support dictionaries.\n*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/\nunsigned lodepng_inflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGDecompressSettings* settings);\n\n/*\nDecompresses Zlib data. Reallocates the out buffer and appends the data. The\ndata must be according to the zlib specification.\nEither, *out must be NULL and *outsize must be 0, or, *out must be a valid\nbuffer and *outsize its size in bytes. out must be freed by user after usage.\n*/\nunsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,\n                                 const unsigned char* in, size_t insize,\n                                 const LodePNGDecompressSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nCompresses data with Zlib. Reallocates the out buffer and appends the data.\nZlib adds a small header and trailer around the deflate data.\nThe data is output in the format of the zlib specification.\nEither, *out must be NULL and *outsize must be 0, or, *out must be a valid\nbuffer and *outsize its size in bytes. out must be freed by user after usage.\n*/\nunsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,\n                               const unsigned char* in, size_t insize,\n                               const LodePNGCompressSettings* settings);\n\n/*\nFind length-limited Huffman code for given frequencies. This function is in the\npublic interface only for tests, it's used internally by lodepng_deflate.\n*/\nunsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,\n                                      size_t numcodes, unsigned maxbitlen);\n\n/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/\nunsigned lodepng_deflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGCompressSettings* settings);\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad a file from disk into buffer. The function allocates the out buffer, and\nafter usage you should free it.\nout: output parameter, contains pointer to loaded buffer.\noutsize: output parameter, size of the allocated out buffer\nfilename: the path to the file to load\nreturn value: error code (0 means ok)\n*/\nunsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);\n\n/*\nSave a file from buffer to disk. Warning, if it exists, this function overwrites\nthe file without warning!\nbuffer: the buffer to write\nbuffersize: size of the buffer to write\nfilename: the path to the file to save to\nreturn value: error code (0 means ok)\n*/\nunsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);\n#endif /*LODEPNG_COMPILE_DISK*/\n\n#ifdef LODEPNG_COMPILE_CPP\n/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */\nnamespace lodepng\n{\n#ifdef LODEPNG_COMPILE_PNG\nclass State : public LodePNGState\n{\n  public:\n    State();\n    State(const State& other);\n    virtual ~State();\n    State& operator=(const State& other);\n};\n\n#ifdef LODEPNG_COMPILE_DECODER\n/* Same as other lodepng::decode, but using a State for more settings and information. */\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const unsigned char* in, size_t insize);\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const std::vector<unsigned char>& in);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/* Same as other lodepng::encode, but using a State for more settings and information. */\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                State& state);\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                State& state);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad a file from disk into an std::vector.\nreturn value: error code (0 means ok)\n*/\nunsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);\n\n/*\nSave the binary data in an std::vector to a file on disk. The file is overwritten\nwithout warning.\n*/\nunsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_PNG */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_DECODER\n/* Zlib-decompress an unsigned char buffer */\nunsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);\n\n/* Zlib-decompress an std::vector */\nunsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/* Zlib-compress an unsigned char buffer */\nunsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);\n\n/* Zlib-compress an std::vector */\nunsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_ZLIB */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n\n/*\nTODO:\n[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often\n[.] check compatibility with various compilers  - done but needs to be redone for every newer version\n[X] converting color to 16-bit per channel types\n[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)\n[ ] make sure encoder generates no chunks with size > (2^31)-1\n[ ] partial decoding (stream processing)\n[X] let the \"isFullyOpaque\" function check color keys and transparent palettes too\n[X] better name for the variables \"codes\", \"codesD\", \"codelengthcodes\", \"clcl\" and \"lldl\"\n[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)\n[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes\n[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...\n[ ] allow user to give data (void*) to custom allocator\n*/\n\n#endif /*LODEPNG_H inclusion guard*/\n\n/*\nLodePNG Documentation\n---------------------\n\n0. table of contents\n--------------------\n\n  1. about\n   1.1. supported features\n   1.2. features not supported\n  2. C and C++ version\n  3. security\n  4. decoding\n  5. encoding\n  6. color conversions\n    6.1. PNG color types\n    6.2. color conversions\n    6.3. padding bits\n    6.4. A note about 16-bits per channel and endianness\n  7. error values\n  8. chunks and PNG editing\n  9. compiler support\n  10. examples\n   10.1. decoder C++ example\n   10.2. decoder C example\n  11. state settings reference\n  12. changes\n  13. contact information\n\n\n1. about\n--------\n\nPNG is a file format to store raster images losslessly with good compression,\nsupporting different color types and alpha channel.\n\nLodePNG is a PNG codec according to the Portable Network Graphics (PNG)\nSpecification (Second Edition) - W3C Recommendation 10 November 2003.\n\nThe specifications used are:\n\n*) Portable Network Graphics (PNG) Specification (Second Edition):\n     http://www.w3.org/TR/2003/REC-PNG-20031110\n*) RFC 1950 ZLIB Compressed Data Format version 3.3:\n     http://www.gzip.org/zlib/rfc-zlib.html\n*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:\n     http://www.gzip.org/zlib/rfc-deflate.html\n\nThe most recent version of LodePNG can currently be found at\nhttp://lodev.org/lodepng/\n\nLodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds\nextra functionality.\n\nLodePNG exists out of two files:\n-lodepng.h: the header file for both C and C++\n-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage\n\nIf you want to start using LodePNG right away without reading this doc, get the\nexamples from the LodePNG website to see how to use it in code, or check the\nsmaller examples in chapter 13 here.\n\nLodePNG is simple but only supports the basic requirements. To achieve\nsimplicity, the following design choices were made: There are no dependencies\non any external library. There are functions to decode and encode a PNG with\na single function call, and extended versions of these functions taking a\nLodePNGState struct allowing to specify or get more information. By default\nthe colors of the raw image are always RGB or RGBA, no matter what color type\nthe PNG file uses. To read and write files, there are simple functions to\nconvert the files to/from buffers in memory.\n\nThis all makes LodePNG suitable for loading textures in games, demos and small\nprograms, ... It's less suitable for full fledged image editors, loading PNGs\nover network (it requires all the image data to be available before decoding can\nbegin), life-critical systems, ...\n\n1.1. supported features\n-----------------------\n\nThe following features are supported by the decoder:\n\n*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,\n   or the same color type as the PNG\n*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image\n*) Adam7 interlace and deinterlace for any color type\n*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk\n*) support for alpha channels, including RGBA color model, translucent palettes and color keying\n*) zlib decompression (inflate)\n*) zlib compression (deflate)\n*) CRC32 and ADLER32 checksums\n*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.\n*) the following chunks are supported (generated/interpreted) by both encoder and decoder:\n    IHDR: header information\n    PLTE: color palette\n    IDAT: pixel data\n    IEND: the final chunk\n    tRNS: transparency for palettized images\n    tEXt: textual information\n    zTXt: compressed textual information\n    iTXt: international textual information\n    bKGD: suggested background color\n    pHYs: physical dimensions\n    tIME: modification time\n\n1.2. features not supported\n---------------------------\n\nThe following features are _not_ supported:\n\n*) some features needed to make a conformant PNG-Editor might be still missing.\n*) partial loading/stream processing. All data must be available and is processed in one call.\n*) The following public chunks are not supported but treated as unknown chunks by LodePNG\n    cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT\n   Some of these are not supported on purpose: LodePNG wants to provide the RGB values\n   stored in the pixels, not values modified by system dependent gamma or color models.\n\n\n2. C and C++ version\n--------------------\n\nThe C version uses buffers allocated with alloc that you need to free()\nyourself. You need to use init and cleanup functions for each struct whenever\nusing a struct from the C version to avoid exploits and memory leaks.\n\nThe C++ version has extra functions with std::vectors in the interface and the\nlodepng::State class which is a LodePNGState with constructor and destructor.\n\nThese files work without modification for both C and C++ compilers because all\nthe additional C++ code is in \"#ifdef __cplusplus\" blocks that make C-compilers\nignore it, and the C code is made to compile both with strict ISO C90 and C++.\n\nTo use the C++ version, you need to rename the source file to lodepng.cpp\n(instead of lodepng.c), and compile it with a C++ compiler.\n\nTo use the C version, you need to rename the source file to lodepng.c (instead\nof lodepng.cpp), and compile it with a C compiler.\n\n\n3. Security\n-----------\n\nEven if carefully designed, it's always possible that LodePNG contains possible\nexploits. If you discover one, please let me know, and it will be fixed.\n\nWhen using LodePNG, care has to be taken with the C version of LodePNG, as well\nas the C-style structs when working with C++. The following conventions are used\nfor all C-style structs:\n\n-if a struct has a corresponding init function, always call the init function when making a new one\n-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks\n-if a struct has a corresponding copy function, use the copy function instead of \"=\".\n The destination must also be inited already.\n\n\n4. Decoding\n-----------\n\nDecoding converts a PNG compressed image to a raw pixel buffer.\n\nMost documentation on using the decoder is at its declarations in the header\nabove. For C, simple decoding can be done with functions such as\nlodepng_decode32, and more advanced decoding can be done with the struct\nLodePNGState and lodepng_decode. For C++, all decoding can be done with the\nvarious lodepng::decode functions, and lodepng::State can be used for advanced\nfeatures.\n\nWhen using the LodePNGState, it uses the following fields for decoding:\n*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here\n*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get\n*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use\n\nLodePNGInfo info_png\n--------------------\n\nAfter decoding, this contains extra information of the PNG image, except the actual\npixels, width and height because these are already gotten directly from the decoder\nfunctions.\n\nIt contains for example the original color type of the PNG image, text comments,\nsuggested background color, etc... More details about the LodePNGInfo struct are\nat its declaration documentation.\n\nLodePNGColorMode info_raw\n-------------------------\n\nWhen decoding, here you can specify which color type you want\nthe resulting raw image to be. If this is different from the colortype of the\nPNG, then the decoder will automatically convert the result. This conversion\nalways works, except if you want it to convert a color PNG to greyscale or to\na palette with missing colors.\n\nBy default, 32-bit color is used for the result.\n\nLodePNGDecoderSettings decoder\n------------------------------\n\nThe settings can be used to ignore the errors created by invalid CRC and Adler32\nchunks, and to disable the decoding of tEXt chunks.\n\nThere's also a setting color_convert, true by default. If false, no conversion\nis done, the resulting data will be as it was in the PNG (after decompression)\nand you'll have to puzzle the colors of the pixels together yourself using the\ncolor type information in the LodePNGInfo.\n\n\n5. Encoding\n-----------\n\nEncoding converts a raw pixel buffer to a PNG compressed image.\n\nMost documentation on using the encoder is at its declarations in the header\nabove. For C, simple encoding can be done with functions such as\nlodepng_encode32, and more advanced decoding can be done with the struct\nLodePNGState and lodepng_encode. For C++, all encoding can be done with the\nvarious lodepng::encode functions, and lodepng::State can be used for advanced\nfeatures.\n\nLike the decoder, the encoder can also give errors. However it gives less errors\nsince the encoder input is trusted, the decoder input (a PNG image that could\nbe forged by anyone) is not trusted.\n\nWhen using the LodePNGState, it uses the following fields for encoding:\n*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.\n*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has\n*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use\n\nLodePNGInfo info_png\n--------------------\n\nWhen encoding, you use this the opposite way as when decoding: for encoding,\nyou fill in the values you want the PNG to have before encoding. By default it's\nnot needed to specify a color type for the PNG since it's automatically chosen,\nbut it's possible to choose it yourself given the right settings.\n\nThe encoder will not always exactly match the LodePNGInfo struct you give,\nit tries as close as possible. Some things are ignored by the encoder. The\nencoder uses, for example, the following settings from it when applicable:\ncolortype and bitdepth, text chunks, time chunk, the color key, the palette, the\nbackground color, the interlace method, unknown chunks, ...\n\nWhen encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.\nIf the palette contains any colors for which the alpha channel is not 255 (so\nthere are translucent colors in the palette), it'll add a tRNS chunk.\n\nLodePNGColorMode info_raw\n-------------------------\n\nYou specify the color type of the raw image that you give to the input here,\nincluding a possible transparent color key and palette you happen to be using in\nyour raw image data.\n\nBy default, 32-bit color is assumed, meaning your input has to be in RGBA\nformat with 4 bytes (unsigned chars) per pixel.\n\nLodePNGEncoderSettings encoder\n------------------------------\n\nThe following settings are supported (some are in sub-structs):\n*) auto_convert: when this option is enabled, the encoder will\nautomatically choose the smallest possible color mode (including color key) that\ncan encode the colors of all pixels without information loss.\n*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,\n   2 = dynamic huffman tree (best compression). Should be 2 for proper\n   compression.\n*) use_lz77: whether or not to use LZ77 for compressed block types. Should be\n   true for proper compression.\n*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value\n   2048 by default, but can be set to 32768 for better, but slow, compression.\n*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE\n   chunk if force_palette is true. This can used as suggested palette to convert\n   to by viewers that don't support more than 256 colors (if those still exist)\n*) add_id: add text chunk \"Encoder: LodePNG <version>\" to the image.\n*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.\n  zTXt chunks use zlib compression on the text. This gives a smaller result on\n  large texts but a larger result on small texts (such as a single program name).\n  It's all tEXt or all zTXt though, there's no separate setting per text yet.\n\n\n6. color conversions\n--------------------\n\nAn important thing to note about LodePNG, is that the color type of the PNG, and\nthe color type of the raw image, are completely independent. By default, when\nyou decode a PNG, you get the result as a raw image in the color type you want,\nno matter whether the PNG was encoded with a palette, greyscale or RGBA color.\nAnd if you encode an image, by default LodePNG will automatically choose the PNG\ncolor type that gives good compression based on the values of colors and amount\nof colors in the image. It can be configured to let you control it instead as\nwell, though.\n\nTo be able to do this, LodePNG does conversions from one color mode to another.\nIt can convert from almost any color type to any other color type, except the\nfollowing conversions: RGB to greyscale is not supported, and converting to a\npalette when the palette doesn't have a required color is not supported. This is\nnot supported on purpose: this is information loss which requires a color\nreduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey\nis easy, but there are multiple ways if you want to give some channels more\nweight).\n\nBy default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB\ncolor, no matter what color type the PNG has. And by default when encoding,\nLodePNG automatically picks the best color model for the output PNG, and expects\nthe input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control\nthe color format of the images yourself, you can skip this chapter.\n\n6.1. PNG color types\n--------------------\n\nA PNG image can have many color types, ranging from 1-bit color to 64-bit color,\nas well as palettized color modes. After the zlib decompression and unfiltering\nin the PNG image is done, the raw pixel data will have that color type and thus\na certain amount of bits per pixel. If you want the output raw image after\ndecoding to have another color type, a conversion is done by LodePNG.\n\nThe PNG specification gives the following color types:\n\n0: greyscale, bit depths 1, 2, 4, 8, 16\n2: RGB, bit depths 8 and 16\n3: palette, bit depths 1, 2, 4 and 8\n4: greyscale with alpha, bit depths 8 and 16\n6: RGBA, bit depths 8 and 16\n\nBit depth is the amount of bits per pixel per color channel. So the total amount\nof bits per pixel is: amount of channels * bitdepth.\n\n6.2. color conversions\n----------------------\n\nAs explained in the sections about the encoder and decoder, you can specify\ncolor types and bit depths in info_png and info_raw to change the default\nbehaviour.\n\nIf, when decoding, you want the raw image to be something else than the default,\nyou need to set the color type and bit depth you want in the LodePNGColorMode,\nor the parameters colortype and bitdepth of the simple decoding function.\n\nIf, when encoding, you use another color type than the default in the raw input\nimage, you need to specify its color type and bit depth in the LodePNGColorMode\nof the raw image, or use the parameters colortype and bitdepth of the simple\nencoding function.\n\nIf, when encoding, you don't want LodePNG to choose the output PNG color type\nbut control it yourself, you need to set auto_convert in the encoder settings\nto false, and specify the color type you want in the LodePNGInfo of the\nencoder (including palette: it can generate a palette if auto_convert is true,\notherwise not).\n\nIf the input and output color type differ (whether user chosen or auto chosen),\nLodePNG will do a color conversion, which follows the rules below, and may\nsometimes result in an error.\n\nTo avoid some confusion:\n-the decoder converts from PNG to raw image\n-the encoder converts from raw image to PNG\n-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image\n-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG\n-when encoding, the color type in LodePNGInfo is ignored if auto_convert\n is enabled, it is automatically generated instead\n-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original\n PNG image, but it can be ignored since the raw image has the color type you requested instead\n-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion\n between the color types is done if the color types are supported. If it is not\n supported, an error is returned. If the types are the same, no conversion is done.\n-even though some conversions aren't supported, LodePNG supports loading PNGs from any\n colortype and saving PNGs to any colortype, sometimes it just requires preparing\n the raw image correctly before encoding.\n-both encoder and decoder use the same color converter.\n\nNon supported color conversions:\n-color to greyscale: no error is thrown, but the result will look ugly because\nonly the red channel is taken\n-anything to palette when that palette does not have that color in it: in this\ncase an error is thrown\n\nSupported color conversions:\n-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA\n-any grey or grey+alpha, to grey or grey+alpha\n-anything to a palette, as long as the palette has the requested colors in it\n-removing alpha channel\n-higher to smaller bitdepth, and vice versa\n\nIf you want no color conversion to be done (e.g. for speed or control):\n-In the encoder, you can make it save a PNG with any color type by giving the\nraw color mode and LodePNGInfo the same color mode, and setting auto_convert to\nfalse.\n-In the decoder, you can make it store the pixel data in the same color type\nas the PNG has, by setting the color_convert setting to false. Settings in\ninfo_raw are then ignored.\n\nThe function lodepng_convert does the color conversion. It is available in the\ninterface but normally isn't needed since the encoder and decoder already call\nit.\n\n6.3. padding bits\n-----------------\n\nIn the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines\nhave a bit amount that isn't a multiple of 8, then padding bits are used so that each\nscanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.\nThe raw input image you give to the encoder, and the raw output image you get from the decoder\nwill NOT have these padding bits, e.g. in the case of a 1-bit image with a width\nof 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,\nnot the first bit of a new byte.\n\n6.4. A note about 16-bits per channel and endianness\n----------------------------------------------------\n\nLodePNG uses unsigned char arrays for 16-bit per channel colors too, just like\nfor any other color format. The 16-bit values are stored in big endian (most\nsignificant byte first) in these arrays. This is the opposite order of the\nlittle endian used by x86 CPU's.\n\nLodePNG always uses big endian because the PNG file format does so internally.\nConversions to other formats than PNG uses internally are not supported by\nLodePNG on purpose, there are myriads of formats, including endianness of 16-bit\ncolors, the order in which you store R, G, B and A, and so on. Supporting and\nconverting to/from all that is outside the scope of LodePNG.\n\nThis may mean that, depending on your use case, you may want to convert the big\nendian output of LodePNG to little endian with a for loop. This is certainly not\nalways needed, many applications and libraries support big endian 16-bit colors\nanyway, but it means you cannot simply cast the unsigned char* buffer to an\nunsigned short* buffer on x86 CPUs.\n\n\n7. error values\n---------------\n\nAll functions in LodePNG that return an error code, return 0 if everything went\nOK, or a non-zero code if there was an error.\n\nThe meaning of the LodePNG error values can be retrieved with the function\nlodepng_error_text: given the numerical error code, it returns a description\nof the error in English as a string.\n\nCheck the implementation of lodepng_error_text to see the meaning of each code.\n\n\n8. chunks and PNG editing\n-------------------------\n\nIf you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG\neditor that should follow the rules about handling of unknown chunks, or if your\nprogram is able to read other types of chunks than the ones handled by LodePNG,\nthen that's possible with the chunk functions of LodePNG.\n\nA PNG chunk has the following layout:\n\n4 bytes length\n4 bytes type name\nlength bytes data\n4 bytes CRC\n\n8.1. iterating through chunks\n-----------------------------\n\nIf you have a buffer containing the PNG image data, then the first chunk (the\nIHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the\nsignature of the PNG and are not part of a chunk. But if you start at byte 8\nthen you have a chunk, and can check the following things of it.\n\nNOTE: none of these functions check for memory buffer boundaries. To avoid\nexploits, always make sure the buffer contains all the data of the chunks.\nWhen using lodepng_chunk_next, make sure the returned value is within the\nallocated memory.\n\nunsigned lodepng_chunk_length(const unsigned char* chunk):\n\nGet the length of the chunk's data. The total chunk length is this length + 12.\n\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk):\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):\n\nGet the type of the chunk or compare if it's a certain type\n\nunsigned char lodepng_chunk_critical(const unsigned char* chunk):\nunsigned char lodepng_chunk_private(const unsigned char* chunk):\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):\n\nCheck if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).\nCheck if the chunk is private (public chunks are part of the standard, private ones not).\nCheck if the chunk is safe to copy. If it's not, then, when modifying data in a critical\nchunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your\nprogram doesn't handle that type of unknown chunk.\n\nunsigned char* lodepng_chunk_data(unsigned char* chunk):\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):\n\nGet a pointer to the start of the data of the chunk.\n\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk):\nvoid lodepng_chunk_generate_crc(unsigned char* chunk):\n\nCheck if the crc is correct or generate a correct one.\n\nunsigned char* lodepng_chunk_next(unsigned char* chunk):\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):\n\nIterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these\nfunctions do no boundary checking of the allocated data whatsoever, so make sure there is enough\ndata available in the buffer to be able to go to the next chunk.\n\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data):\n\nThese functions are used to create new chunks that are appended to the data in *out that has\nlength *outlength. The append function appends an existing chunk to the new data. The create\nfunction creates a new chunk with the given parameters and appends it. Type is the 4-letter\nname of the chunk.\n\n8.2. chunks in info_png\n-----------------------\n\nThe LodePNGInfo struct contains fields with the unknown chunk in it. It has 3\nbuffers (each with size) to contain 3 types of unknown chunks:\nthe ones that come before the PLTE chunk, the ones that come between the PLTE\nand the IDAT chunks, and the ones that come after the IDAT chunks.\nIt's necessary to make the distionction between these 3 cases because the PNG\nstandard forces to keep the ordering of unknown chunks compared to the critical\nchunks, but does not force any other ordering rules.\n\ninfo_png.unknown_chunks_data[0] is the chunks before PLTE\ninfo_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT\ninfo_png.unknown_chunks_data[2] is the chunks after IDAT\n\nThe chunks in these 3 buffers can be iterated through and read by using the same\nway described in the previous subchapter.\n\nWhen using the decoder to decode a PNG, you can make it store all unknown chunks\nif you set the option settings.remember_unknown_chunks to 1. By default, this\noption is off (0).\n\nThe encoder will always encode unknown chunks that are stored in the info_png.\nIf you need it to add a particular chunk that isn't known by LodePNG, you can\nuse lodepng_chunk_append or lodepng_chunk_create to the chunk data in\ninfo_png.unknown_chunks_data[x].\n\nChunks that are known by LodePNG should not be added in that way. E.g. to make\nLodePNG add a bKGD chunk, set background_defined to true and add the correct\nparameters there instead.\n\n\n9. compiler support\n-------------------\n\nNo libraries other than the current standard C library are needed to compile\nLodePNG. For the C++ version, only the standard C++ library is needed on top.\nAdd the files lodepng.c(pp) and lodepng.h to your project, include\nlodepng.h where needed, and your program can read/write PNG files.\n\nIt is compatible with C90 and up, and C++03 and up.\n\nIf performance is important, use optimization when compiling! For both the\nencoder and decoder, this makes a large difference.\n\nMake sure that LodePNG is compiled with the same compiler of the same version\nand with the same settings as the rest of the program, or the interfaces with\nstd::vectors and std::strings in C++ can be incompatible.\n\nCHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.\n\n*) gcc and g++\n\nLodePNG is developed in gcc so this compiler is natively supported. It gives no\nwarnings with compiler options \"-Wall -Wextra -pedantic -ansi\", with gcc and g++\nversion 4.7.1 on Linux, 32-bit and 64-bit.\n\n*) Clang\n\nFully supported and warning-free.\n\n*) Mingw\n\nThe Mingw compiler (a port of gcc for Windows) should be fully supported by\nLodePNG.\n\n*) Visual Studio and Visual C++ Express Edition\n\nLodePNG should be warning-free with warning level W4. Two warnings were disabled\nwith pragmas though: warning 4244 about implicit conversions, and warning 4996\nwhere it wants to use a non-standard function fopen_s instead of the standard C\nfopen.\n\nVisual Studio may want \"stdafx.h\" files to be included in each source file and\ngive an error \"unexpected end of file while looking for precompiled header\".\nThis is not standard C++ and will not be added to the stock LodePNG. You can\ndisable it for lodepng.cpp only by right clicking it, Properties, C/C++,\nPrecompiled Headers, and set it to Not Using Precompiled Headers there.\n\nNOTE: Modern versions of VS should be fully supported, but old versions, e.g.\nVS6, are not guaranteed to work.\n\n*) Compilers on Macintosh\n\nLodePNG has been reported to work both with gcc and LLVM for Macintosh, both for\nC and C++.\n\n*) Other Compilers\n\nIf you encounter problems on any compilers, feel free to let me know and I may\ntry to fix it if the compiler is modern and standards complient.\n\n\n10. examples\n------------\n\nThis decoder example shows the most basic usage of LodePNG. More complex\nexamples can be found on the LodePNG website.\n\n10.1. decoder C++ example\n-------------------------\n\n#include \"lodepng.h\"\n#include <iostream>\n\nint main(int argc, char *argv[])\n{\n  const char* filename = argc > 1 ? argv[1] : \"test.png\";\n\n  //load and decode\n  std::vector<unsigned char> image;\n  unsigned width, height;\n  unsigned error = lodepng::decode(image, width, height, filename);\n\n  //if there's an error, display it\n  if(error) std::cout << \"decoder error \" << error << \": \" << lodepng_error_text(error) << std::endl;\n\n  //the pixels are now in the vector \"image\", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...\n}\n\n10.2. decoder C example\n-----------------------\n\n#include \"lodepng.h\"\n\nint main(int argc, char *argv[])\n{\n  unsigned error;\n  unsigned char* image;\n  size_t width, height;\n  const char* filename = argc > 1 ? argv[1] : \"test.png\";\n\n  error = lodepng_decode32_file(&image, &width, &height, filename);\n\n  if(error) printf(\"decoder error %u: %s\\n\", error, lodepng_error_text(error));\n\n  / * use image here * /\n\n  free(image);\n  return 0;\n}\n\n11. state settings reference\n----------------------------\n\nA quick reference of some settings to set on the LodePNGState\n\nFor decoding:\n\nstate.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums\nstate.decoder.zlibsettings.custom_...: use custom inflate function\nstate.decoder.ignore_crc: ignore CRC checksums\nstate.decoder.color_convert: convert internal PNG color to chosen one\nstate.decoder.read_text_chunks: whether to read in text metadata chunks\nstate.decoder.remember_unknown_chunks: whether to read in unknown chunks\nstate.info_raw.colortype: desired color type for decoded image\nstate.info_raw.bitdepth: desired bit depth for decoded image\nstate.info_raw....: more color settings, see struct LodePNGColorMode\nstate.info_png....: no settings for decoder but ouput, see struct LodePNGInfo\n\nFor encoding:\n\nstate.encoder.zlibsettings.btype: disable compression by setting it to 0\nstate.encoder.zlibsettings.use_lz77: use LZ77 in compression\nstate.encoder.zlibsettings.windowsize: tweak LZ77 windowsize\nstate.encoder.zlibsettings.minmatch: tweak min LZ77 length to match\nstate.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching\nstate.encoder.zlibsettings.lazymatching: try one more LZ77 matching\nstate.encoder.zlibsettings.custom_...: use custom deflate function\nstate.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png\nstate.encoder.filter_palette_zero: PNG filter strategy for palette\nstate.encoder.filter_strategy: PNG filter strategy to encode with\nstate.encoder.force_palette: add palette even if not encoding to one\nstate.encoder.add_id: add LodePNG identifier and version as a text chunk\nstate.encoder.text_compression: use compressed text chunks for metadata\nstate.info_raw.colortype: color type of raw input image you provide\nstate.info_raw.bitdepth: bit depth of raw input image you provide\nstate.info_raw: more color settings, see struct LodePNGColorMode\nstate.info_png.color.colortype: desired color type if auto_convert is false\nstate.info_png.color.bitdepth: desired bit depth if auto_convert is false\nstate.info_png.color....: more color settings, see struct LodePNGColorMode\nstate.info_png....: more PNG related settings, see struct LodePNGInfo\n\n\n12. changes\n-----------\n\nThe version number of LodePNG is the date of the change given in the format\nyyyymmdd.\n\nSome changes aren't backwards compatible. Those are indicated with a (!)\nsymbol.\n\n*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within\n   the limits of pure C90).\n*) 08 dec 2015: Made load_file function return error if file can't be opened.\n*) 24 okt 2015: Bugfix with decoding to palette output.\n*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.\n*) 23 aug 2014: Reduced needless memory usage of decoder.\n*) 28 jun 2014: Removed fix_png setting, always support palette OOB for\n    simplicity. Made ColorProfile public.\n*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.\n*) 22 dec 2013: Power of two windowsize required for optimization.\n*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.\n*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).\n*) 11 mar 2013 (!): Bugfix with custom free. Changed from \"my\" to \"lodepng_\"\n    prefix for the custom allocators and made it possible with a new #define to\n    use custom ones in your project without needing to change lodepng's code.\n*) 28 jan 2013: Bugfix with color key.\n*) 27 okt 2012: Tweaks in text chunk keyword length error handling.\n*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.\n    (no palette). Better deflate tree encoding. New compression tweak settings.\n    Faster color conversions while decoding. Some internal cleanups.\n*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.\n*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions\n    and made it work with function pointers instead.\n*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc\n    and free functions and toggle #defines from compiler flags. Small fixes.\n*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.\n*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed\n    redundant C++ codec classes. Reduced amount of structs. Everything changed,\n    but it is cleaner now imho and functionality remains the same. Also fixed\n    several bugs and shrunk the implementation code. Made new samples.\n*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best\n    PNG color model and bit depth, based on the amount and type of colors of the\n    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.\n*) 9 okt 2011: simpler hash chain implementation for the encoder.\n*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.\n*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.\n    A bug with the PNG filtertype heuristic was fixed, so that it chooses much\n    better ones (it's quite significant). A setting to do an experimental, slow,\n    brute force search for PNG filter types is added.\n*) 17 aug 2011 (!): changed some C zlib related function names.\n*) 16 aug 2011: made the code less wide (max 120 characters per line).\n*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.\n*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.\n*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman\n    to optimize long sequences of zeros.\n*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and\n    LodePNG_InfoColor_canHaveAlpha functions for convenience.\n*) 7 nov 2010: added LodePNG_error_text function to get error code description.\n*) 30 okt 2010: made decoding slightly faster\n*) 26 okt 2010: (!) changed some C function and struct names (more consistent).\n     Reorganized the documentation and the declaration order in the header.\n*) 08 aug 2010: only changed some comments and external samples.\n*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.\n*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.\n*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could\n    read by ignoring the problem but windows apps couldn't.\n*) 06 jun 2008: added more error checks for out of memory cases.\n*) 26 apr 2008: added a few more checks here and there to ensure more safety.\n*) 06 mar 2008: crash with encoding of strings fixed\n*) 02 feb 2008: support for international text chunks added (iTXt)\n*) 23 jan 2008: small cleanups, and #defines to divide code in sections\n*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.\n*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.\n*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added\n    Also various fixes, such as in the deflate and the padding bits code.\n*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved\n    filtering code of encoder.\n*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A\n    C++ wrapper around this provides an interface almost identical to before.\n    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code\n    are together in these files but it works both for C and C++ compilers.\n*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks\n*) 30 aug 2007: bug fixed which makes this Borland C++ compatible\n*) 09 aug 2007: some VS2005 warnings removed again\n*) 21 jul 2007: deflate code placed in new namespace separate from zlib code\n*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images\n*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing\n    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed\n*) 02 jun 2007: made the encoder add a tag with version by default\n*) 27 may 2007: zlib and png code separated (but still in the same file),\n    simple encoder/decoder functions added for more simple usage cases\n*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),\n    moved some examples from here to lodepng_examples.cpp\n*) 12 may 2007: palette decoding bug fixed\n*) 24 apr 2007: changed the license from BSD to the zlib license\n*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.\n*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding\n    palettized PNG images. Plus little interface change with palette and texts.\n*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.\n    Fixed a bug where the end code of a block had length 0 in the Huffman tree.\n*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented\n    and supported by the encoder, resulting in smaller PNGs at the output.\n*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.\n*) 24 jan 2007: gave encoder an error interface. Added color conversion from any\n    greyscale type to 8-bit greyscale with or without alpha.\n*) 21 jan 2007: (!) Totally changed the interface. It allows more color types\n    to convert to and is more uniform. See the manual for how it works now.\n*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:\n    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and\n    at last made the decoder give errors for incorrect Adler32 or Crc.\n*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.\n*) 29 dec 2006: Added support for encoding images without alpha channel, and\n    cleaned out code as well as making certain parts faster.\n*) 28 dec 2006: Added \"Settings\" to the encoder.\n*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.\n    Removed some code duplication in the decoder. Fixed little bug in an example.\n*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.\n    Fixed a bug of the decoder with 16-bit per color.\n*) 15 okt 2006: Changed documentation structure\n*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the\n    given image buffer, however for now it's not compressed.\n*) 08 sep 2006: (!) Changed to interface with a Decoder class\n*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different\n    way. Renamed decodePNG to decodePNGGeneric.\n*) 29 jul 2006: (!) Changed the interface: image info is now returned as a\n    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.\n*) 28 jul 2006: Cleaned the code and added new error checks.\n    Corrected terminology \"deflate\" into \"inflate\".\n*) 23 jun 2006: Added SDL example in the documentation in the header, this\n    example allows easy debugging by displaying the PNG and its transparency.\n*) 22 jun 2006: (!) Changed way to obtain error value. Added\n    loadFile function for convenience. Made decodePNG32 faster.\n*) 21 jun 2006: (!) Changed type of info vector to unsigned.\n    Changed position of palette in info vector. Fixed an important bug that\n    happened on PNGs with an uncompressed block.\n*) 16 jun 2006: Internally changed unsigned into unsigned where\n    needed, and performed some optimizations.\n*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them\n    in LodePNG namespace. Changed the order of the parameters. Rewrote the\n    documentation in the header. Renamed files to lodepng.cpp and lodepng.h\n*) 22 apr 2006: Optimized and improved some code\n*) 07 sep 2005: (!) Changed to std::vector interface\n*) 12 aug 2005: Initial release (C++, decoder only)\n\n\n13. contact information\n-----------------------\n\nFeel free to contact me with suggestions, problems, comments, ... concerning\nLodePNG. If you encounter a PNG image that doesn't work properly with this\ndecoder, feel free to send it and I'll use it to find and fix the problem.\n\nMy email address is (puzzle the account and domain together with an @ symbol):\nDomain: gmail dot com.\nAccount: lode dot vandevenne.\n\n\nCopyright (c) 2005-2016 Lode Vandevenne\n*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/msvs/stereo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"stereo\", \"stereo.vcxproj\", \"{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/msvs/stereo.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}</ProjectGuid>\n    <RootNamespace>stereo</RootNamespace>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir>$(SolutionDir)$(Platform)\\$(ProjectName)\\$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(SolutionDir)..\\..\\..\\..\\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\\x86;$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(SolutionDir)..\\..\\..\\..\\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\\x64;$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(SolutionDir)..\\..\\..\\..\\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\\x86;$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <AdditionalIncludeDirectories>$(SolutionDir)..\\..\\..\\..\\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalLibraryDirectories>$(INTELOCLSDKROOT)lib\\x64;$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>OpenCL.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <None Include=\"..\\imageEffects.cl\" />\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\lodepng.cpp\" />\n    <ClCompile Include=\"..\\stereo.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\lodepng.h\" />\n    <ClInclude Include=\"..\\utils.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Stereo sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Stereo sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Stereo example is an implementation of the algorithm that applies stereoscopic 3D effect on two input images and achieved by means of encoding each eye's image using filters of different colors: red and blue -\n\t\t<a href=\"http://en.wikipedia.org/wiki/Anaglyph_3D\"><i>Anaglyph effect</i></a>.\n\t<br><br>\n\t\tThe example uses the flow graph interface and can be executed both on CPU and GPU for image processing.\n\t\tThe output of this application is a PNG image with the anaglyph effect applied.\n\t<br><br>\n\t\t<i>\n\t\t\tThis example includes software developed by Lode Vandevenne. See\n\t\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t\t</i>\n\t<br>\n\t\tIt exemplifies the opencl_node usage in the flow graph interface in context of creating a stereo image from two input images.\n\t<br><br>\n\t\tThis example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tAdditionally, you have to install OpenCL&trade; version 1.2 or higher in order to run this example. See the <a href=\"https://software.intel.com/en-us/articles/opencl-drivers\">OpenCL&trade; Drivers and Runtimes for Intel&reg; Architecture</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"stereo.cpp\">stereo.cpp</a>\n\t\t\t\t<dd>The implementation of stereo image creation algorithm based on the flow graph interface.\n\t\t\t\t<dt><a href=\"lodepng.cpp\">lodepng.cpp</a>\n\t\t\t\t<dd>Library for reading and writing png images.\n\t\t\t\t<dt><a href=\"lodepng.h\">lodepng.h</a>\n\t\t\t\t<dd>Public header file for the lodepng library.\n\t\t\t\t<dt><a href=\"utils.h\">utils.h</a>\n\t\t\t\t<dd>Support functions for this example.\n\t\t\t\t<dt><a href=\"imageEffects.cl\">imageEffects.cl</a>\n\t\t\t\t<dd>OpenCL kernel file with image effects algorithms.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>stereo <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>stereo [<i>-v</i>] [<i>-alg</i>=value] [<i>first_filename</i>] [<i>second_filename</i>]</tt>\n\t\t\t\t<dd><i>-v</i> print diagnostic output to screen<br>\n\t\t\t\t\t<i>-alg</i> name of the used pipeline realization - can be host, target (default) or host_target<br>\n\t\t\t\t\t<i>first_filename</i> first input file name<br>\n\t\t\t\t\t<i>second_filename</i> second input file name<br>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tLodePNG version 20160409\n\t\t\t\tCopyright (c) 2005-2016 Lode Vandevenne\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tThis software is provided 'as-is', without any express or implied\n\t\t\t\twarranty. In no event will the authors be held liable for any damages\n\t\t\t\tarising from the use of this software.\n\t\t\t<br>\n\t\t\t\tPermission is granted to anyone to use this software for any purpose,\n\t\t\t\tincluding commercial applications, and to alter it and redistribute it\n\t\t\t\tfreely, subject to the following restrictions:\n\t\t\t\t<ol>\n\t\t\t\t\t<li>The origin of this software must not be misrepresented; you must not\n\t\t\t\t\t\tclaim that you wrote the original software. If you use this software\n\t\t\t\t\t\tin a product, an acknowledgment in the product documentation would be\n\t\t\t\t\t\tappreciated but is not required.\n\t\t\t\t\t<li>Altered source versions must be plainly marked as such, and must not be\n\t\t\t\t\t\tmisrepresented as being the original software.\n\t\t\t\t\t<li>This notice may not be removed or altered from any source\n\t\t\t\t\tdistribution.\n\t\t\t\t</ol>\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/stereo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT\n\n#if _MSC_VER\n// suppress warning C4503: decorated name length exceeded, name was truncated \n#pragma warning(disable : 4503)\n#endif\n\n#include <iostream>\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/flow_graph_opencl_node.h\"\n#include \"tbb/tick_count.h\"\n\n#include \"utils.h\"\n\nstatic const int redChannelOffset = 0;\nstatic const int greenChannelOffset = 1;\nstatic const int blueChannelOffset = 2;\nstatic const int channelsPerPixel = 4;\nstatic const int channelIncreaseValue = 10;\n\nvoid applyLeftImageEffect(utils::image_buffer& image) {\n    const int heighBase = channelsPerPixel * image.width;\n    std::vector<unsigned char>& buffer = *image.buffer;\n\n    // Increase the Red channel of left image by 10\n    for (unsigned int y = 0; y < image.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < image.width; x++) {\n            int pixelOffset = heightOffset + channelsPerPixel * x + redChannelOffset;\n            buffer[pixelOffset] += channelIncreaseValue;\n        }\n    }\n}\n\nvoid applyRightImageEffect(utils::image_buffer& image) {\n    const int heighBase = channelsPerPixel * image.width;\n    std::vector<unsigned char>& buffer = *image.buffer;\n\n    // Increase the Blue channel of left image by 10\n    for (unsigned int y = 0; y < image.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < image.width; x++) {\n            const int pixelOffset = heightOffset + channelsPerPixel * x + blueChannelOffset;\n            buffer[pixelOffset] += channelIncreaseValue;\n        }\n    }\n}\n\n// This function merges to image buffers into the first buffer (leftImageBuffer as a destination)\nvoid mergeImageBuffers(utils::image_buffer& leftImage, const utils::image_buffer& rightImage) {\n    const int heighBase = channelsPerPixel * leftImage.width;\n    std::vector<unsigned char>& leftImageBuffer = *leftImage.buffer;\n    std::vector<unsigned char>& rightImageBuffer = *rightImage.buffer;\n\n    // Apply stereoscopic merge using algorithm: R: left image, G: left and right images (middle value), B: right image\n    for (unsigned int y = 0; y < leftImage.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < leftImage.width; x++) {\n            const int pixelOffset = heightOffset + channelsPerPixel * x;\n            const int greenChannelIndex = pixelOffset + greenChannelOffset;\n            const int blueChannelIndex = pixelOffset + blueChannelOffset;\n            const int middleGreenChannel = (leftImageBuffer[greenChannelIndex] + rightImageBuffer[greenChannelIndex]);\n            leftImageBuffer[greenChannelIndex] = middleGreenChannel / 2;\n            leftImageBuffer[blueChannelIndex] = rightImageBuffer[blueChannelIndex];\n        }\n    }\n}\n\nvoid fillOpenclBuffer(tbb::flow::opencl_buffer<cl_uchar>& openclBuffer, const std::vector<unsigned char>& sourceBuffer) {\n    std::copy(sourceBuffer.begin(), sourceBuffer.end(), openclBuffer.begin());\n}\n\nclass gpu_device_selector {\npublic:\n    template <typename DeviceFilter>\n    tbb::flow::opencl_device operator()(tbb::flow::opencl_factory<DeviceFilter>& f) {\n        // Set your GPU device if available to execute kernel on\n        const tbb::flow::opencl_device_list &devices = f.devices();\n        tbb::flow::opencl_device_list::const_iterator it = std::find_if(\n            devices.cbegin(), devices.cend(),\n            [](const tbb::flow::opencl_device &d) {\n            cl_device_type type;\n            d.info(CL_DEVICE_TYPE, type);\n            return CL_DEVICE_TYPE_GPU == type;\n        });\n\n        if (it == devices.cend()) {\n            std::cout << \"Info: could not find any GPU devices. Choosing the first available device (default behaviour).\" << std::endl;\n            return *(f.devices().begin());\n        } else {\n            // Return GPU device from factory\n            return *it;\n        }\n    }\n};\n\n// Image processing function that is executed on CPU only\nvoid hostFunction(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef tuple< utils::image_buffer, utils::image_buffer > MergeImagesTuple;\n\n    graph g;\n\n    function_node< std::string, utils::image_buffer > fileReaderOne(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {\n        return utils::getOrGenerateImage(fileToRead);\n    });\n\n    function_node< std::string, utils::image_buffer > fileReaderTwo = fileReaderOne;\n\n    function_node< utils::image_buffer, utils::image_buffer > leftImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {\n        applyLeftImageEffect(image);\n        return image;\n    });\n\n    function_node< utils::image_buffer, utils::image_buffer > rightImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {\n        applyRightImageEffect(image);\n        return image;\n    });\n\n    join_node< tuple< utils::image_buffer, utils::image_buffer > > joinNode(g);\n\n    function_node< MergeImagesTuple, utils::image_buffer > mergeImages(g, unlimited, [](const MergeImagesTuple& bufferTuple) -> utils::image_buffer {\n        // Two input images from tupple are merged into the first image,\n        utils::image_buffer leftImageBuffer = std::get<0>(bufferTuple);\n        utils::image_buffer rightImageBuffer = std::get<1>(bufferTuple);\n\n        mergeImageBuffers(leftImageBuffer, rightImageBuffer);\n\n        return leftImageBuffer;\n    });\n\n    function_node< utils::image_buffer > outputWriter(g, unlimited, [&outputFile](const utils::image_buffer& image) {\n        utils::writePNGImage(image, outputFile);\n    });\n\n    // Read left image\n    make_edge(fileReaderOne, leftImageEffect);\n\n    // Read right image\n    make_edge(fileReaderTwo, rightImageEffect);\n\n    // Process left image\n    make_edge(leftImageEffect, tbb::flow::input_port<0>(joinNode));\n\n    // Process right image\n    make_edge(rightImageEffect, tbb::flow::input_port<1>(joinNode));\n\n    // Merge images\n    make_edge(joinNode, mergeImages);\n    make_edge(mergeImages, outputWriter);\n\n    // Start graph image processing\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\n// Image processing function using OpenCL\n/** Reading and writing image to file is executed on CPU, while all buffers manipulation are executed on GPU */\nvoid openclFunctionGPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;\n    typedef std::array<unsigned int, 2> NDRange;\n    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;\n    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;\n    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;\n\n    graph g;\n\n    gpu_device_selector gpu_selector;\n\n    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {\n        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);\n\n        // Create and initialize opencl_buffer in order to pass it to kernel\n        OpenclImageBuffer oclImage(src.buffer->size());\n        fillOpenclBuffer(oclImage, *src.buffer);\n\n        NDRange rangeList = { src.width, src.height };\n        return std::make_tuple(oclImage, src.width, rangeList);\n    });\n\n    function_node< std::string, OpenclImageTuple > fileReaderTwo = fileReaderOne;\n\n    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);\n\n    // Kernel should be in the current folder\n    opencl_program<> program(\"imageEffects.cl\");\n\n    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel(\"applyLeftImageEffect\"), gpu_selector);\n\n    split_node< OpenclImageTuple > splitArgumentsRightNode(g);\n\n    opencl_node< OpenclImageTuple > rightImageEffect(g, program.get_kernel(\"applyRightImageEffect\"), gpu_selector);\n\n    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel(\"mergeImages\"), gpu_selector);\n\n    join_node< WriteImageBufferTuple > joinTupleNode(g);\n\n    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {\n        // The result image have to be copied in order to be changed,\n        // the second parameter - image size, can be taken by const reference\n        OpenclImageBuffer imageBuffer = std::get<0>(image);\n        const NDRange& imageSize = std::get<1>(image);\n        unsigned int width = imageSize[0];\n        unsigned int height = imageSize[1]; \n\n        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);\n    });\n\n    // Process left image\n    make_edge(fileReaderOne, splitArgumentsLeftNode);\n    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));\n    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));\n\n    // Process right image\n    make_edge(fileReaderTwo, splitArgumentsRightNode);\n    make_edge(output_port<0>(splitArgumentsRightNode), input_port<0>(rightImageEffect));\n    make_edge(output_port<1>(splitArgumentsRightNode), input_port<1>(rightImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsRightNode), input_port<2>(rightImageEffect));\n\n    // Merge images\n    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));\n    make_edge(output_port<0>(rightImageEffect), input_port<1>(mergeImages));\n    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));\n\n    // Set OpenCL NDRange here (because the values may vary, depending on input data)\n    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));\n\n    // Write image to PNG\n    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));\n    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));\n    make_edge(joinTupleNode, outputWriter);\n\n    // Define where to get ndrange and kernel arguments\n    leftImageEffect.set_args(port_ref<0, 1>());\n    leftImageEffect.set_range(port_ref<2>());\n\n    rightImageEffect.set_args(port_ref<0, 1>());\n    rightImageEffect.set_range(port_ref<2>());\n\n    mergeImages.set_args(port_ref<0, 2>());\n    mergeImages.set_range(port_ref<3>());\n\n    // Start graph image processing pipeline\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\n// Second image processing function using OpenCL\n/** Reading and writing image to file is executed on CPU, while some buffers manipulation are executed on GPU\n    and others runs on CPU device. This case should have the best performance among others. */\nvoid openclFunctionGPUPlusCPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;\n    typedef std::array<unsigned int, 2> NDRange;\n    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;\n    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;\n    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;\n\n    graph g;\n\n    gpu_device_selector gpu_selector;\n\n    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {\n        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);\n\n        // Create and initialize opencl_buffer in order to pass it to mergeImages kernel\n        OpenclImageBuffer oclImage(src.buffer->size());\n        fillOpenclBuffer(oclImage, *src.buffer);\n\n        NDRange rangeList = { src.width, src.height };\n        return std::make_tuple(oclImage, src.width, rangeList);\n    });\n\n    function_node< std::string, utils::image_buffer > fileReaderTwo(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {\n        return utils::readPNGImage(fileToRead);\n    });\n\n    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);\n\n    // Kernel should be in the current folder\n    opencl_program<> program(\"imageEffects.cl\");\n\n    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel(\"applyLeftImageEffect\"), gpu_selector);\n\n    function_node< utils::image_buffer, OpenclImageBuffer > rightImageEffect(g, unlimited, [&g](utils::image_buffer image) -> OpenclImageBuffer {\n        applyRightImageEffect(image);\n\n        // Create and initialize opencl_buffer in order to pass it to kernel\n        OpenclImageBuffer oclImage(image.buffer->size());\n        fillOpenclBuffer(oclImage, *image.buffer);\n\n        return oclImage;\n    });\n\n    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel(\"mergeImages\"), gpu_selector);\n\n    join_node< WriteImageBufferTuple > joinTupleNode(g);\n\n    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {\n        // The result image have to be copied in order to be changed,\n        // the second parameter - image size, can be taken by const reference\n        OpenclImageBuffer imageBuffer = std::get<0>(image);\n        const NDRange& imageSize = std::get<1>(image);\n        unsigned int width = imageSize[0];\n        unsigned int height = imageSize[1];\n\n        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);\n    });\n\n    // Process left image on GPU\n    make_edge(fileReaderOne, splitArgumentsLeftNode);\n    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));\n    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));\n\n    // Process right image on CPU\n    make_edge(fileReaderTwo, rightImageEffect);\n\n    // Merge images on GPU\n    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));\n    make_edge(rightImageEffect, input_port<1>(mergeImages));\n    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));\n\n    // Write image to PNG\n    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));\n    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));\n    make_edge(joinTupleNode, outputWriter);\n\n    // Define where to get ndrange and kernel arguments\n    leftImageEffect.set_args(port_ref<0, 1>());\n    leftImageEffect.set_range(port_ref<2>());\n\n    mergeImages.set_args(port_ref<0, 2>());\n    mergeImages.set_range(port_ref<3>());\n\n    // Start graph image processing pipeline\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\nint main(int argc, char* argv[]) {\n    try {\n\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        bool verbose = false;\n        std::string algVersion;\n\n        std::string inputFileFirst;\n        std::string inputFileSecond;\n        std::string outputFile = \"output.png\";\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help\n            .arg(verbose, \"-v\", \"verbose mode\")\n            .arg(algVersion, \"-alg\", \"name of the used pipeline realisation - can be host, target (default) or host_target\")\n            .positional_arg(inputFileFirst, \"first_filename\", \"first input file name\")\n            .positional_arg(inputFileSecond, \"second_filename\", \"second input file name\")\n        );\n\n        if (!utils::isBothImagesExists(inputFileFirst, inputFileSecond)) {\n            std::cout << \"Info: one or both images does not exists or empty. Input images will be generated instead.\" << std::endl;\n            inputFileFirst.clear();\n            inputFileSecond.clear();\n        } else {\n            std::cout << \"First input file name: \" << inputFileFirst << std::endl;\n            std::cout << \"Second input file name: \" << inputFileSecond << std::endl;\n        }\n\n        if (algVersion.empty() || algVersion == \"target\") {\n            openclFunctionGPU(inputFileFirst, inputFileSecond, outputFile);\n        } else if (algVersion == \"host_target\") {\n            openclFunctionGPUPlusCPU(inputFileFirst, inputFileSecond, outputFile);\n        } else if (algVersion == \"host\") {\n            hostFunction(inputFileFirst, inputFileSecond, outputFile);\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred :\\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/utils.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n\n#include \"lodepng.h\"\n\nnamespace utils {\n\n    struct image_buffer {\n        unsigned int width, height;\n        std::shared_ptr< std::vector<unsigned char> > buffer; // smart pointer to the vector of raw pixels in RGBA format, 4 bytes per pixel\n    };\n\n    image_buffer readPNGImage(const std::string& imageName) {\n        image_buffer image;\n        image.buffer = std::make_shared< std::vector<unsigned char> >();\n\n        unsigned int error = lodepng::decode(*image.buffer, image.width, image.height, imageName.c_str());\n\n        if (error) {\n            std::string exceptionMessage = \"decoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n        return image;\n    }\n\n    void readPNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const char* imageName) {\n        unsigned int error = lodepng_decode32_file(&imageBuffer, &width, &height, imageName);\n\n        if (error) {\n            std::string exceptionMessage = \"decoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    void writePNGImage(const image_buffer& image, const std::string& outputFile) {\n        unsigned int error = lodepng::encode(outputFile, *image.buffer, image.width, image.height);\n        if (error) {\n            std::string exceptionMessage = \"encoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    void writePNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const std::string& outputFile) {\n        unsigned int error = lodepng::encode(outputFile, imageBuffer, width, height);\n        if (error) {\n            std::string exceptionMessage = \"encoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    image_buffer generatePNGImage() {\n        image_buffer image;\n        image.width = 1024;\n        image.height = 1024;\n\n        image.buffer = std::make_shared< std::vector<unsigned char> >(image.width * image.height * 4);\n        std::vector<unsigned char>& buffer = *image.buffer;\n\n        const int widthOffset = 4 * image.width;\n        for (unsigned y = 0; y < image.height; y++) {\n            for (unsigned x = 0; x < image.width; x++) {\n                const int pixelOffset = widthOffset * y + 4 * x;\n                buffer[pixelOffset] = 200 * !(x & y);\n                buffer[pixelOffset + 1] = x ^ y;\n                buffer[pixelOffset + 2] = x | y;\n                buffer[pixelOffset + 3] = 255;\n            }\n        }\n        return image;\n    }\n\n    bool isFileExist(const std::string& fileName) {\n        std::ifstream file(fileName);\n        return file.good();\n    }\n\n    bool isBothImagesExists(const std::string& firstFile, const std::string& secondFile) {\n        return isFileExist(firstFile) && isFileExist(secondFile);\n    }\n\n    image_buffer getOrGenerateImage(const std::string& fileName) {\n        return fileName.empty() ? generatePNGImage() : readPNGImage(fileName);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; };\n\t\t0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; };\n\t\t8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6801CFC8B7F00A875B5 /* stereo.cpp */; };\n\t\t8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6851CFC8B9200A875B5 /* lodepng.cpp */; };\n\t\t8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8415B6891CFC96D900A875B5 /* OpenCL.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t8415B6801CFC8B7F00A875B5 /* stereo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stereo.cpp; path = ../stereo.cpp; sourceTree = \"<group>\"; };\n\t\t8415B6811CFC8B7F00A875B5 /* utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = utils.hpp; path = ../utils.hpp; sourceTree = \"<group>\"; };\n\t\t8415B6831CFC8B9200A875B5 /* imageEffects.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = imageEffects.cl; path = ../imageEffects.cl; sourceTree = \"<group>\"; };\n\t\t8415B6841CFC8B9200A875B5 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = index.html; path = ../index.html; sourceTree = \"<group>\"; };\n\t\t8415B6851CFC8B9200A875B5 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng.cpp; path = ../lodepng.cpp; sourceTree = \"<group>\"; };\n\t\t8415B6861CFC8B9200A875B5 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lodepng.h; path = ../lodepng.h; sourceTree = \"<group>\"; };\n\t\t8415B6891CFC96D900A875B5 /* OpenCL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenCL.framework; path = System/Library/Frameworks/OpenCL.framework; sourceTree = SDKROOT; };\n\t\t8DD76F6C0486A84900D96B5E /* Stereo */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Stereo; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */,\n\t\t\t\t0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Stereo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8415B6891CFC96D900A875B5 /* OpenCL.framework */,\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Stereo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8415B6831CFC8B9200A875B5 /* imageEffects.cl */,\n\t\t\t\t8415B6841CFC8B9200A875B5 /* index.html */,\n\t\t\t\t8415B6851CFC8B9200A875B5 /* lodepng.cpp */,\n\t\t\t\t8415B6861CFC8B9200A875B5 /* lodepng.h */,\n\t\t\t\t8415B6801CFC8B7F00A875B5 /* stereo.cpp */,\n\t\t\t\t8415B6811CFC8B7F00A875B5 /* utils.hpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Stereo */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Stereo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Stereo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Stereo;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Stereo;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Stereo */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"stereo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Stereo */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Stereo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */,\n\t\t\t\t8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Stereo;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Stereo;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Stereo;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Stereo;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Stereo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"stereo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks Samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks Samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory includes example usages of Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"GettingStarted/index.html\">GettingStarted</a>\n\t\t\t\t<dd>Examples from the Intel TBB <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a>.\n\t\t\t\t<dt><a href=\"concurrent_hash_map/index.html\">concurrent_hash_map</a>\n\t\t\t\t<dd>Examples using <code>concurrent_hash_map</code> container.\n\t\t\t\t<dt><a href=\"concurrent_priority_queue/index.html\">concurrent_priority_queue</a>\n\t\t\t\t<dd>Examples using <code>concurrent_priority_queue</code> container.\n\t\t\t\t<dt><a href=\"graph/index.html\">graph</a>\n\t\t\t\t<dd>Examples using Intel TBB Flow Graph feature.\n\t\t\t\t<dt><a href=\"parallel_do/index.html\">parallel_do</a>\n\t\t\t\t<dd>Examples using <code>parallel_do</code> algorithm.\n\t\t\t\t<dt><a href=\"parallel_for/index.html\">parallel_for</a>\n\t\t\t\t<dd>Examples using <code>parallel_for</code> algorithm.\n\t\t\t\t<dt><a href=\"parallel_reduce/index.html\">parallel_reduce</a>\n\t\t\t\t<dd>Examples using <code>parallel_reduce</code> algorithm.\n\t\t\t\t<dt><a href=\"pipeline/index.html\">pipeline</a>\n\t\t\t\t<dd>Examples using <code>pipeline</code> algorithm.\n\t\t\t\t<dt><a href=\"task/index.html\">task</a>\n\t\t\t\t<dd>Examples using raw <code>task</code> interface.\n\t\t\t\t<dt><a href=\"task_group/index.html\">task_group</a>\n\t\t\t\t<dd>Examples using <code>task_group</code> interface.\n\t\t\t\t<dt><a href=\"task_arena/index.html\">task_arena</a>\n\t\t\t\t<dd>Examples using the <code>task_arena</code> feature.\n\t\t\t\t<dt><a href=\"test_all/index.html\">test_all</a>\n\t\t\t\t<dd>Examples that test various components of Intel TBB.\n\t\t\t\t<dt><a href=\"common/index.html\">common</a>\n\t\t\t\t<dd>Common files for building various examples. Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build Instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"note\">\n\t\t\t\tNote: Some of the following directions refer to a shell window. This refers\n\t\t\t\tto the command prompt environment/window normally used on your system:\n\t\t\t\t<ul>\n\t\t\t\t\t<li>cmd.exe command prompt window for Windows* systems\n\t\t\t\t\t<li>sh, bash, csh, ksh, etc. (or compatible) shell window for Windows*, Linux* or macOS* systems\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<p>\n\t\t\tSet up the environment for using Intel TBB:\n\t\t\t</p>\n\t\t\t<div class=\"h4-alike\">To set up the environment for Windows* OS:</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\n\t\t\t\t<p>\n\t\t\t\t\tIt is <b>strongly</b> recommended to set up the environment when installing Intel TBB.\n\t\t\t\t\tDo this by selecting the appropriate check-box during the install. However, if the environment is not set up\n\t\t\t\t\tduring installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,\n\t\t\t\t\tit may be set up, for a given type of shell window, by using one of the following commands:\n\t\t\t\t</p>\n\t\t\t\t<dl>\n\t\t\t\t<dt>For cmd.exe (command prompt):\n\t\t\t\t<dd>\n\t\t\t\t\t<pre>\n&lt;<i>installdir</i>&gt;/bin/tbbvars.bat (arch) [vs]\n\t\t\t\t\t</pre>\n\t\t\t\t<dt>where:\n\t\t\t\t<dd>\n\t\t\t\t\t<li><i>(arch)</i> argument represents target architecture. Its possible values are 'ia32' or 'intel64'.\n\t\t\t\t\t<li><i>[vs]</i> argument represents target version of Microsoft* Visual Studio*. Its possible values are:\n\t\t\t\t\t<ul class='circ'>\n\t\t\t\t\t<li><i>'vs&lt;msvs_version&gt;'</i> - to use Intel TBB library with Microsoft* Visual Studio* <i>&lt;msvs_version&gt;</i> runtime DLLs, e.g.: <code>tbbvars&nbsp;intel64&nbsp;vs2015</code>\n\t\t\t\t\t\t<br><i>Note:</i> for the most up to date supported versions of Microsoft* Visual Studio*, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t\t\t<li><i>'all'</i> - to use Intel TBB binaries statically linked with Microsoft Visual C++ runtime.\n\t\t\t\t\t\t<br>If <i>[vs]</i> is not set the <i>'all'</i> value will be used by default.\n\t\t\t\t\t</ul>\n\t\t\t\t</dl>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To set up the environment for Linux* OS and macOS*:</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t\t<p>\n\t\t\t\t\tThe environment may be set up, for a given type of shell window, by using one of the following commands:\n\t\t\t\t</p>\n\t\t\t\t<dl>\n\t\t\t\t<dt>For sh, bash, ksh, dash (or compatibles):\n\t\t\t\t<dd>\n\t\t\t\t<pre>\n<b>.</b> &lt;<i>installdir</i>&gt;/bin/tbbvars.sh (arch) [platform [TBBROOT_detection_mode]]\n\t\t\t\t</pre>\n\t\t\t\t<dt>For csh (or compatibles):\n\t\t\t\t<dd>\n\t\t\t\t<pre>\nsource &lt;<i>installdir</i>&gt;/bin/tbbvars.csh (arch) [platform [TBBROOT_detection_mode]]\n\t\t\t\t</pre>\n\t\t\t\t<dt>where:\n\t\t\t\t<dd>\n\t\t\t\t\t<li><i>(arch)</i> argument represents target architecture. Its possible values are <i>'ia32'</i> or <i>'intel64'</i>.\n\t\t\t\t\t<li><i>[platform]</i> argument represents target platform. Its possible values are <i>'linux'</i> or <i>'android'</i>.\n\t\t\t\t\t<li><i>[TBBROOT_detection_mode]</i> argument represents TBBROOT path detection method. Its only possible value is <i>'auto_tbbroot'</i>. In this case the environment variable TBBROOT is detected automatically by using the tbbvars script directory path.\n\t\t\t\t</dl>\n\t\t\tEnvironment setup need only be performed once per shell window to be used.\n\t\t\t<br>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.\n\t\t\t<br>If the arguments to the sourced script are ignored (consult documentation for your shell) the alternative way to specify target is environment variables COMPILERVARS_ARCHITECTURE to pass (arch) to the script and COMPILERVARS_PLATFORM to pass [platform].\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<p>\n\t\t\tBuild each example by using one of the following methods:\n\t\t\t</p>\n\t\t\t<div class=\"h4-alike\">To build by using a Microsoft* Visual Studio* project (Windows* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<ol>\n\t\t\t<li>Identify the solution (*.sln) file for the example you wish to build and run. The *.sln file for each example is in the example's <i>msvs</i> sub-directory.\n\t\t\t<li>Open the project by using one of the following methods:\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.</li>\n\t\t\t\t<li>Invoke Microsoft* Visual Studio* from the Start menu and use the \"Open Project\" dialog to navigate to and open the project.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li>Press &lt;ctrl-F5&gt; to build and run the example.</li>\n\t\t\t<li>If you copied an example to another place separately from libraries you need to\n\t\t\t\tset %TBBROOT% variable pointing to &lt;installdir&gt; folder.</li>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To build by using a Xcode* IDE project (macOS* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"note\">\n\t\t\t\tNote: Xcode* project instructions are not applicable for the Intel TBB Sample Bundle for Intel&reg; System Studio\n\t\t\t\tbecause Intel System Studio does not support macOS*. For additional information, see the\n\t\t\t\t<a href=\"https://software.intel.com/en-us/articles/intel-system-studio-release-notes\">Release Notes</a>.\n\t\t\t</div>\n\t\t\t<ol>\n\t\t\t<li>Identify the project (*.xcodeproj) file for the example you wish to build and run. The *.xcodeproj file is in the example's <i>xcode</i> sub-directory.</li>\n\t\t\t<li>Open the project by using one of the following methods:\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.</li>\n\t\t\t\t<li>Invoke the Xcode* IDE and use the \"File -> Open\" dialog to navigate to and open the project.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li>Press &lt;Apple-R&gt;, or press the \"Build and Go\" button in the toolbox, to build and run the example.\n\t\t\t</li>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To build by using a Makefile (Windows*, Linux* or macOS* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<ol>\n\t\t\t<li>Open a shell window\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>For Windows* systems, make sure this shell window has the proper environment\n\t\t\t\t\tdefined for use with Microsoft* Visual Studio*. Such shell can be invoked from the Start menu, under Microsoft* Visual Studio*, Microsoft* Visual Studio Tools*, Microsoft* Visual Studio* Command Prompt.</li>\n\t\t\t\t</ul>\n\t\t\t<li>Set up the environment in this shell window for use with Intel TBB.\n\t\t\t\t<br>See above for how to set up the environment for Windows*, Linux* or macOS* systems.\n\t\t\t<li>Unless you installed Intel TBB yourself, you may not have write permissions to the directory\n\t\t\t\tcontaining the example. In this case, make a copy of the example, and use the copy for the following steps.\n\t\t\t<li>In the shell window, navigate to the directory for the example\n\t\t\t\t(or to the directory for the copy of the example if you made one in the previous step).\n\t\t\t<li>Use one or more of the following commands to build and run the example.\n\t\t\t\tHere, make refers to the make command normally used on your system: this could be\n\t\t\t\tnmake, gmake, or make on Windows* systems, or make or gmake on Linux* or macOS* systems.\n\t\t\t\t<dl>\n\t\t\t\t<dt><tt>make</tt>\n\t\t\t\t<dd>Default build and run. Equivalent to 'make release test'.\n\t\t\t\t<dt><tt>make release</tt>\n\t\t\t\t<dd>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make debug</tt>\n\t\t\t\t<dd>Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make test</tt>\n\t\t\t\t<dd>Run an executable previously produced by one of the above commands.\n\t\t\t\t<dt><tt>make <b>[</b>(above options or targets)<b>]</b> CXX=<b>{</b>icl, icc<b>}</b></tt>\n\t\t\t\t<dd>Build and run as above, but use Intel&reg; C++ Compiler instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or macOS* systems).\n\t\t\t\t<dt><tt>make <b>[</b>(above options or targets)<b>]</b> offload=mic</tt>\n\t\t\t\t<dd>Build and run the offload version of an example for Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture.\n\t\t\t\t\t<br>\n\t\t\t\t\t<div class=\"note\">\n\t\t\t\t\t\tNote: Only Intel&reg; MIC Architecture with Linux* based host is currently supported.\n\t\t\t\t\t</div>\n\t\t\t\t<dt><tt>make clean</tt>\n\t\t\t\t<dd>Remove any executables or intermediate files produced by the above commands.\n\t\t\t\t</dl>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a> (available only in the Intel&reg; Parallel Studio and Intel&reg; System Studio Online Samples packages and the open-source version of Intel TBB)\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"tablenoborder\">\n\t\t\t<table border=\"1\" rules=\"all\" frame=\"border\" cellspacing=\"0\" cellpadding=\"4\" summary=\"\"> \n\t\t\t\t<thead align=\"left\"> \n\t\t\t\t<tr> \n\t\t\t\t\t<th width=\"100%\" align=\"left\" class=\"cellrowborder\" valign=\"top\"> \n\t\t\t\t\t\t<p>Optimization Notice</p>\n\t\t\t\t\t</th>\n\t\t\t \t</tr>\n\t\t\t\t</thead>\n\t\t\t \n\t\t\t\t<tbody> \n\t\t\t\t<tr> \n\t\t\t\t\t<td width=\"100%\" class=\"bgcolor(#f5f5f5)\" valign=\"top\" bgcolor=\"#f5f5f5\"> \n\t\t\t\t\t  <p>Intel's compilers may or may not optimize to the same \n\t\t\t\t\t  degree for non-Intel microprocessors for optimizations that \n\t\t\t\t\t  are not unique to Intel microprocessors. These optimizations \n\t\t\t\t\t  include SSE2, SSE3, and SSSE3 instruction sets and other \n\t\t\t\t\t  optimizations. Intel does not guarantee the availability, \n\t\t\t\t\t  functionality, or effectiveness of any optimization on \n\t\t\t\t\t  microprocessors not manufactured by Intel. \n\t\t\t\t\t  Microprocessor-dependent optimizations in this product are \n\t\t\t\t\t  intended for use with Intel microprocessors. Certain \n\t\t\t\t\t  optimizations not specific to Intel microarchitecture are \n\t\t\t\t\t  reserved for Intel microprocessors. Please refer to the \n\t\t\t\t\t  applicable product User and Reference Guides for more \n\t\t\t\t\t  information regarding the specific instruction sets covered by \n\t\t\t\t\t  this notice. \n\t\t\t\t\t  </p>\n\t \t\t\t\t  <p>Notice revision #20110804 \n\t\t\t\t\t  </p>\n\t\t\t\t  </td>\n\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t\t\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_do algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_do</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_do</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"parallel_preorder/readme.html\">parallel_preorder</a>\n\t\t\t\t<dd>Parallel preorder traversal of a graph.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/Graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdlib>\n#include \"Graph.h\"\n#include <iostream>\n\nusing namespace std;\n\nvoid Graph::create_random_dag( size_t number_of_nodes ) {\n    my_vertex_set.resize(number_of_nodes);\n    for( size_t k=0; k<number_of_nodes; ++k ) {\n        Cell& c = my_vertex_set[k];\n        int op = int((rand()>>8)%5u);\n        if( op>int(k) ) op = int(k);\n        switch( op ) {\n            default:\n                c.op = OP_VALUE;\n                c.value = Cell::value_type((float)k);\n                break;\n            case 1:\n                c.op = OP_NEGATE;\n                break;\n            case 2:\n                c.op = OP_SUB;\n                break;\n            case 3: \n                c.op = OP_ADD;\n                break;\n            case 4: \n                c.op = OP_MUL;\n                break;\n        }\n        for( int j=0; j<ArityOfOp[c.op]; ++j ) {\n            Cell& input = my_vertex_set[rand()%k];\n            c.input[j] = &input;\n        }\n    }\n}\n\nvoid Graph::print() {\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        std::cout<<\"Cell \"<<k<<\":\";\n        for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )\n            std::cout<<\" \"<<int(my_vertex_set[k].successor[j] - &my_vertex_set[0]);\n        std::cout<<std::endl;\n    }\n}\n\nvoid Graph::get_root_set( vector<Cell*>& root_set ) {\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        my_vertex_set[k].successor.clear();\n    }\n    root_set.clear();\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        Cell& c = my_vertex_set[k];\n        c.ref_count = ArityOfOp[c.op];\n        for( int j=0; j<ArityOfOp[c.op]; ++j ) {\n            c.input[j]->successor.push_back(&c);\n        }\n        if( ArityOfOp[c.op]==0 )\n            root_set.push_back(&my_vertex_set[k]);\n    }\n}\n\nvoid Cell::update() {\n    switch( op ) {\n        case OP_VALUE:\n            break;\n        case OP_NEGATE:\n            value = -(input[0]->value);\n            break;\n        case OP_ADD:\n            value = input[0]->value + input[1]->value;\n            break;\n        case OP_SUB:\n            value = input[0]->value - input[1]->value;\n            break;\n        case OP_MUL:\n            value = input[0]->value * input[1]->value;\n            break;\n    }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/Graph.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"Matrix.h\"\n#include \"tbb/atomic.h\"\n#include <vector>\n\nenum OpKind {\n    // Use Cell's value\n    OP_VALUE,\n    // Unary negation\n    OP_NEGATE,\n    // Addition\n    OP_ADD,\n    // Subtraction\n    OP_SUB,\n    // Multiplication\n    OP_MUL\n};\n\nstatic const int ArityOfOp[] = {0,1,2,2,2};\n\nclass Cell {\npublic:\n    //! Operation for this cell\n    OpKind op;\n\n    //! Inputs to this cell\n    Cell* input[2];\n   \n    //! Type of value stored in a Cell\n    typedef Matrix value_type;\n\n    //! Value associated with this Cell\n    value_type value;\n\n    //! Set of cells that use this Cell as an input\n    std::vector<Cell*> successor;\n\n    //! Reference count of number of inputs that are not yet updated.\n    tbb::atomic<int> ref_count;\n\n    //! Update the Cell's value.\n    void update();\n\n    //! Default constructor\n    Cell() {}\n};\n\n//! A directed graph where the vertices are Cells.\nclass Graph {\n    std::vector<Cell> my_vertex_set;\npublic:\n    //! Create a random acyclic directed graph\n    void create_random_dag( size_t number_of_nodes );\n\n    //! Print the graph\n    void print();\n\n    //! Get set of cells that have no inputs.\n    void get_root_set( std::vector<Cell*>& root_set );\n};\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=parallel_preorder\nARGS=\nPERF_RUN_ARGS=auto silent 500000  100\nLIGHT_ARGS=1:auto:+4 n-of-traversals=50\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n\nperf_build:\trelease\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Parallel_Preorder\nARGS=\nPERF_RUN_ARGS=auto silent 500000  100\nLIGHT_ARGS=1:auto:+4 n-of-traversals=50\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n\nperf_build:\trelease\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/Matrix.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nclass Matrix {\n    static const int n = 20;\n    float array[n][n];\npublic:\n    Matrix() {}\n    Matrix( float z ) {\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                array[i][j] = i==j ? z : 0;\n    }\n    friend Matrix operator-( const Matrix& x ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = -x.array[i][j];\n        return result;\n    }\n    friend Matrix operator+( const Matrix& x, const Matrix& y ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = x.array[i][j] + y.array[i][j];\n        return result;\n    }\n    friend Matrix operator-( const Matrix& x, const Matrix& y ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = x.array[i][j] - y.array[i][j];\n        return result;\n    }\n    friend Matrix operator*( const Matrix& x, const Matrix& y ) {\n        Matrix result(0);\n        for( int i=0; i<n; ++i ) \n            for( int k=0; k<n; ++k )\n                for( int j=0; j<n; ++j )\n                    result.array[i][j] += x.array[i][k] * y.array[k][j];\n        return result;\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Example program that shows how to use parallel_do to do parallel preorder\n   traversal of a directed acyclic graph. */\n\n#include <cstdlib>\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n#include <iostream>\n#include <vector>\n#include \"Graph.h\"\n\n// some forward declarations\nclass Cell;\nvoid ParallelPreorderTraversal( const std::vector<Cell*>& root_set );\n\n//------------------------------------------------------------------------\n// Test driver\n//------------------------------------------------------------------------\nutility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);\nstatic unsigned nodes = 1000;\nstatic unsigned traversals = 500;\nstatic bool SilentFlag = false;\n\n//! Parse the command line.\nstatic void ParseCommandLine( int argc, const char* argv[] ) {\n    utility::parse_cli_arguments(\n            argc,argv,\n            utility::cli_argument_pack()\n                //\"-h\" option for displaying help is present implicitly\n                .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n                .positional_arg(nodes,\"n-of-nodes\",\"number of nodes in the graph.\")\n                .positional_arg(traversals,\"n-of-traversals\",\"number of times to evaluate the graph. Reduce it (e.g. to 100) to shorten example run time\\n\")\n                .arg(SilentFlag,\"silent\",\"no output except elapsed time \")\n    );\n}\n\nint main( int argc, const char* argv[] ) {\n    try {\n        tbb::tick_count main_start = tbb::tick_count::now();\n        ParseCommandLine(argc,argv);\n\n        // Start scheduler with given number of threads.\n        for( int p=threads.first; p<=threads.last; p = threads.step(p) ) {\n            tbb::tick_count t0 = tbb::tick_count::now();\n            tbb::task_scheduler_init init(p);\n            srand(2);\n            size_t root_set_size = 0;\n            {\n                Graph g;\n                g.create_random_dag(nodes);\n                std::vector<Cell*> root_set;\n                g.get_root_set(root_set);\n                root_set_size = root_set.size();\n                for( unsigned int trial=0; trial<traversals; ++trial ) {\n                    ParallelPreorderTraversal(root_set);\n                }\n            }\n            tbb::tick_count::interval_t interval = tbb::tick_count::now()-t0;\n            if (!SilentFlag){\n                std::cout\n                    <<interval.seconds()<<\" seconds using \"<<p<<\" threads (\"<<root_set_size<<\" nodes in root_set)\\n\";\n            }\n        }\n        utility::report_elapsed_time((tbb::tick_count::now()-main_start).seconds());\n\n        return 0;\n    }catch(std::exception& e){\n        std::cerr\n            << \"unexpected error occurred. \\n\"\n            << \"error description: \"<<e.what()<<std::endl;\n        return -1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"parallel_preorder\", \"parallel_preorder.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>parallel_preorder</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252B}</ProjectGuid>\n    <RootNamespace>parallel_preorder</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\Graph.cpp\" />\n    <ClCompile Include=\"..\\main.cpp\" />\n    <ClCompile Include=\"..\\parallel_preorder.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\Graph.h\" />\n    <ClInclude Include=\"..\\Matrix.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/parallel_preorder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_do.h\"\n#include <vector>\n#include <algorithm>\n#include \"Graph.h\"\n\n\nclass Body {\npublic:\n    Body() {};\n\n    //------------------------------------------------------------------------\n    // Following signatures are required by parallel_do\n    //------------------------------------------------------------------------\n    typedef Cell* argument_type;\n\n    void operator()( Cell* c, tbb::parallel_do_feeder<Cell*>& feeder ) const {\n        c->update();\n        // Restore ref_count in preparation for subsequent traversal.\n        c->ref_count = ArityOfOp[c->op];\n        for( size_t k=0; k<c->successor.size(); ++k ) {\n            Cell* successor = c->successor[k];\n            // ref_count is used for inter-task synchronization.\n            // Correctness checking tools might not take this into account, and report\n            // data races between different tasks, that are actually synchronized.\n            if( 0 == --(successor->ref_count) ) {\n                feeder.add( successor );\n            }\n        }\n    }\n};\n\nvoid ParallelPreorderTraversal( const std::vector<Cell*>& root_set ) {\n    tbb::parallel_do(root_set.begin(), root_set.end(),Body());\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Parallel_preorder sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Parallel_preorder sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tExample that uses parallel_do to do parallel preorder traversal of a sparse graph.\n\t<br><br>\n\t\tEach vertex in the graph is called a \"cell\".  \n\t\tEach cell has a value. \n\t\tThe value is a matrix. \n\t\tSome of the cells have operators\n\t\tthat compute the cell's value, using other cell's values as input.\n\t\tA cell that uses the value of cell x is called a successor of x.\n\t<br><br>\n\t\tThe algorithm works as follows. \n\t\t<ol>\n\t\t<li> Compute the set of cells that have no inputs. This set is called <tt>root_set</tt>.\n\t\t<li> Each cell has an associated field <tt>ref_count</tt> that is an atomic integer.\n\t\t\t Initialize <tt>ref_count</tt> to the number of inputs for the Cell.\n\t\t<li> Update each cell in <tt>root_set</tt>, by applying a <tt>parallel_do</tt> to a <tt>root_set</tt>\n\t\t<li> After updating a cell, for each of its successors \n\t\t<ol>\n\t\t<li> Atomically decrement the successor's <tt>ref_count</tt>\n\t\t<li> If the count became zero, add the cell to the set of cells to be updated,\n\t\t\t by calling <tt>parallel_do_feeder_impl::add</tt>.\n\t\t</ol>\n\t\t</ol>\n\t\tThe times printed are for the traversal and update, \n\t\tand do not include time for computing the root_set.\n\t<br><br>\n\t\tThe example is using custom synchronization via <tt>ref_count</tt> atomic variable.\n\t\tCorrectness checking tools might not take this into account, and report data races\n\t\tbetween different tasks that are actually synchronized.\n\t<br><br>\n\t\t<b>Note:</b> It is important to understand that this example is unlikely to show speedup \n\t\tif the cell values are changed to type \"float\".  The reason is twofold.\n\t\t<ul>\n\t\t<li> The smaller value type causes each Cell to be significantly smaller than a cache line,\n\t\t\t which leads to false sharing conflicts.\n\t\t<li> The time to update the cells becomes very small, and consequently the overhead of\n\t\t\t parallel_do swamps the useful work.\n\t\t</ul>\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"parallel_preorder.cpp\">parallel_preorder.cpp</a>\n\t\t\t\t<dd>Implementation of the parallel preorder traversal algorithm.\n\t\t\t\t<dt><a href=\"Graph.h\">Graph.h</a>\n\t\t\t\t<dd>Interfaces of the Graph and Cell classes.\n\t\t\t\t<dt><a href=\"Graph.cpp\">Graph.cpp</a>\n\t\t\t\t<dd>Implementations of the Graph and Cell classes.\n\t\t\t\t<dt><a href=\"Matrix.h\">Matrix.h</a>\n\t\t\t\t<dd>The Matrix class definition.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>parallel_preorder <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>parallel_preorder [<i>n-of-threads</i>=value] [<i>n-of-nodes</i>=value] [<i>n-of-traversals</i>=value] [<i>silent</i>] </tt>\n\t\t\t\t<dt><tt>parallel_preorder [<i>n-of-threads</i> [<i>n-of-nodes</i> [<i>n-of-traversals</i>]]] [<i>silent</i>] </tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-nodes</i> is a number of nodes in the graph. Default value is 1000.<br>\n\t\t\t\t\t<i>n-of-traversals</i> is the number of times to evaluate the graph. Default value is 500.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads and smaller number of traversals, e.g., <tt>parallel_preorder&nbsp;4&nbsp;1000&nbsp;5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };\n\t\t05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tEAD808FA13051AB300FE8C7C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAD808F913051AB300FE8C7C /* main.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };\n\t\t05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };\n\t\t05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };\n\t\t05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };\n\t\t8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n\t\tEAD808F913051AB300FE8C7C /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* parallel_preorder */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = parallel_preorder;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAD808F913051AB300FE8C7C /* main.cpp */,\n\t\t\t\t05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */,\n\t\t\t\t05593AA40B8F55D500DE73AB /* Graph.cpp */,\n\t\t\t\t05593AA50B8F55D500DE73AB /* Graph.h */,\n\t\t\t\t05593AA60B8F55D500DE73AB /* Matrix.h */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* parallel_preorder */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* parallel_preorder */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"parallel_preorder\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = parallel_preorder;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = parallel_preorder;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* parallel_preorder */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"parallel_preorder\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* parallel_preorder */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */,\n\t\t\t\t05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */,\n\t\t\t\tEAD808FA13051AB300FE8C7C /* main.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = parallel_preorder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = parallel_preorder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = parallel_preorder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = parallel_preorder;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"parallel_preorder\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"parallel_preorder\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=game_of_life\nARGS=2:4 -t 5\nLIGHT_ARGS=1:2 -t 5\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp\n\t$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp\n\t$(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\trm -f $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=game_of_life\nARGS=2:4 -t 5\nLIGHT_ARGS=1:2 -t 5\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: \n\t$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: \n\t$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/msvs/Game_of_life.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Game of Life\", \"Game_of_life.vcxproj\", \"{731C7E2E-2766-41D9-96FC-0A3548973803}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug(console)|Win32 = Debug(console)|Win32\r\n\t\tDebug(console)|x64 = Debug(console)|x64\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease(console)|Win32 = Release(console)|Win32\r\n\t\tRelease(console)|x64 = Release(console)|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.Build.0 = Debug(console)|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.ActiveCfg = Debug(console)|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.Build.0 = Debug(console)|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.ActiveCfg = Release(console)|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.Build.0 = Release(console)|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.ActiveCfg = Release(console)|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.Build.0 = Release(console)|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug(console)|Win32\">\n      <Configuration>Debug(console)</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug(console)|x64\">\n      <Configuration>Debug(console)</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release(console)|Win32\">\n      <Configuration>Release(console)</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release(console)|x64\">\n      <Configuration>Release(console)</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>Game of Life</ProjectName>\n    <ProjectGuid>{731C7E2E-2766-41D9-96FC-0A3548973803}</ProjectGuid>\n    <RootNamespace>Game_of_life</RootNamespace>\n    <Keyword>ManagedCProj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <CLRSupport>false</CLRSupport>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <CLRSupport>false</CLRSupport>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n    <CLRSupport>true</CLRSupport>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n    <CLRSupport>true</CLRSupport>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <CLRSupport>false</CLRSupport>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <CLRSupport>false</CLRSupport>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n    <CLRSupport>true</CLRSupport>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n    <CLRSupport>true</CLRSupport>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <IgnoreImportLibrary Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</IgnoreImportLibrary>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <IgnoreImportLibrary Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</IgnoreImportLibrary>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <IgnoreImportLibrary Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</IgnoreImportLibrary>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <IgnoreImportLibrary Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</IgnoreImportLibrary>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AssemblyDebug>true</AssemblyDebug>\n      <SubSystem>Windows</SubSystem>\n      <EntryPointSymbol>main</EntryPointSymbol>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;user32.lib</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AssemblyDebug>true</AssemblyDebug>\n      <SubSystem>Windows</SubSystem>\n      <EntryPointSymbol>main</EntryPointSymbol>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalOptions>-S -03\n %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <EntryPointSymbol>main</EntryPointSymbol>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalOptions>-S -03\n %(AdditionalOptions)</AdditionalOptions>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;user32.lib</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <EntryPointSymbol>main</EntryPointSymbol>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">\n    <CustomBuildStep>\n      <Message>\n      </Message>\n    </CustomBuildStep>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">\n    <CustomBuildStep>\n      <Message>\n      </Message>\n    </CustomBuildStep>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">\n    <CustomBuildStep>\n      <Message>\n      </Message>\n    </CustomBuildStep>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">\n    <CustomBuildStep>\n      <Message>\n      </Message>\n    </CustomBuildStep>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <Reference Include=\"System\">\n      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </Reference>\n    <Reference Include=\"System.Data\">\n      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </Reference>\n    <Reference Include=\"System.Drawing\">\n      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </Reference>\n    <Reference Include=\"System.Windows.Forms\">\n      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </Reference>\n    <Reference Include=\"System.Xml\">\n      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\src\\AssemblyInfo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug(console)|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release(console)|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\src\\Evolution.cpp\" />\n    <ClCompile Include=\"..\\src\\Game_of_life.cpp\" />\n    <ClCompile Include=\"..\\src\\Update_state.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\src\\Board.h\" />\n    <ClInclude Include=\"..\\src\\Evolution.h\" />\n    <ClInclude Include=\"..\\src\\Form1.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"app.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/msvs/app.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon placed first or with lowest ID value becomes application icon\n\nLANGUAGE 9, 1\n#pragma code_page(1252)\n1           ICON         \"app.ico\"\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE  \nBEGIN\n    \"resource.h\\0\"\n    \"\\0\"\nEND\n\n2 TEXTINCLUDE  \nBEGIN\n    \"#include \"\"afxres.h\"\"\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE  \nBEGIN\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/msvs/resource.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by app.rc\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Game_of_life sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Game_of_life sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe \"Game of life\" example demonstrates interoperability of Intel&#174; Threading Building Blocks (Intel&#174; TBB) \n\t\tand Microsoft* .NET*.\n\t<br><br>\n\t\tThis program runs 2 simultaneous instances of the classic Conway's \"Game of Life\". \n\t\tOne of these instances uses serial calculations to update the board. The other one calculates in parallel with Intel TBB.\n\t\tThe visualization is written in managed C++ and uses .NET CLR.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/Form1.h\">Form1.h</a>, <a href=\"src/Board.h\">Board.h</a>\n\t\t\t\t<dd>Header files for GUI classes.\n\t\t\t\t<dt><a href=\"src/Evolution.h\">Evolution.h</a>, <a href=\"src/Evolution.cpp\">Evolution.cpp</a>\n\t\t\t\t<dd>Contain class hierarchy to implement game evolution in serial and parallel.\n\t\t\t\t<dt><a href=\"src/Update_state.cpp\">Update_state.cpp </a>\n\t\t\t\t<dd>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.\n\t\t\t\t<dt><a href=\"src/Game_of_life.cpp\">Game_of_life.cpp </a>\n\t\t\t\t<dd>Contains program entry point and other source not related to logical structure of the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/\">src</a>\n\t\t\t\t<dd>Contains source files mentioned above.\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nusing namespace System;\nusing namespace System::Reflection;\nusing namespace System::Runtime::CompilerServices;\nusing namespace System::Runtime::InteropServices;\nusing namespace System::Security::Permissions;\n\n//\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n//\n[assembly:AssemblyTitleAttribute(\"Automata\")];\n[assembly:AssemblyDescriptionAttribute(\"\")];\n[assembly:AssemblyConfigurationAttribute(\"\")];\n[assembly:AssemblyCompanyAttribute(\"\")];\n[assembly:AssemblyProductAttribute(\"Automata\")];\n[assembly:AssemblyCopyrightAttribute(\"Copyright (c)  2007\")];\n[assembly:AssemblyTrademarkAttribute(\"\")];\n[assembly:AssemblyCultureAttribute(\"\")];\n\n//\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the value or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n\n[assembly:AssemblyVersionAttribute(\"1.0.*\")];\n\n[assembly:ComVisible(false)];\n\n[assembly:CLSCompliantAttribute(true)];\n\n[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Board.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __BOARD_H__ \n#define __BOARD_H__\n\n#define WIN32_LEAN_AND_MEAN\n\n#ifndef _CONSOLE\n#include <windows.h>\n\nusing namespace System;\nusing namespace System::ComponentModel;\nusing namespace System::Collections;\nusing namespace System::Windows::Forms;\nusing namespace System::Data;\nusing namespace System::Drawing;\n#define LabelPtr Label^\n#define BoardPtr Board^\n#else\n#define LabelPtr int*\n#define BoardPtr Board*\n#endif\n\nstruct Matrix \n{\n    int width;\n    int height;\n    char* data;\n};\n\n#ifndef _CONSOLE\npublic ref class Board : public System::Windows::Forms::UserControl\n#else\nclass Board\n#endif\n    {\n    public:\n        Board(int width, int height, int squareSize, LabelPtr counter);        \n        virtual ~Board();\n        void seed(int s);\n        void seed(const BoardPtr s);\n#ifndef _CONSOLE\n    protected: \n        virtual void OnPaint(PaintEventArgs^ e) override;        \n        void Board::draw(Graphics^ g);\n\n    private:\n        System::ComponentModel::Container ^components;\n\n#pragma region Windows Form Designer generated code\n        void InitializeComponent(void)\n        {\n            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;\n        }\n#pragma endregion\n\n    private: delegate void drawDelegate(Int32);\n    public:\n        //! Called from the Evolution thread\n        void draw( Int32 nCurIteration )\n        {\n            if (this->InvokeRequired)\n            {\n                drawDelegate^ d = gcnew drawDelegate(this, &Board::draw);\n                IAsyncResult^ result = BeginInvoke(d, nCurIteration);\n                EndInvoke(result);\n                return;\n            }\n            m_counter->Text = nCurIteration.ToString();\n            Invalidate();\n        }\n#endif\n    public:\n        Matrix *m_matrix;    \n\n    private:\n#ifndef _CONSOLE\n        SolidBrush^ m_occupiedBrush;\n        SolidBrush^ m_freeBrush;\n        Graphics^ m_graphics;\n        Graphics^ m_mem_dc;\n        Bitmap^ m_bmp;\n#endif\n        int m_width;\n        int m_height;\n        int m_squareSize;\n        LabelPtr m_counter;\n    };\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Evolution.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    Evolution.cpp: implementation file for evolution classes; evolution \n                  classes do looped evolution of patterns in a defined \n                  2 dimensional space\n*/\n\n#include \"Evolution.h\"\n#include \"Board.h\"\n\n#ifdef USE_SSE\n#define GRAIN_SIZE 14\n#else\n#define GRAIN_SIZE 4000\n#endif\n#define TIME_SLICE 330\n\n/*\n    Evolution\n*/\n\n/**\n    Evolution::UpdateMatrix() - moves the calculated destination data \n    to the source data block. No destination zeroing is required since it will \n    be completely overwritten during the next calculation cycle.\n**/\nvoid Evolution::UpdateMatrix()\n{\n    memcpy(m_matrix->data, m_dest, m_size);\n}\n\n/*\n    SequentialEvolution\n*/\n\n//! SequentialEvolution::Run - begins looped evolution\n#ifndef _CONSOLE\nvoid SequentialEvolution::Run()\n{\n#else\nvoid SequentialEvolution::Run(double execution_time, int nthread)\n{\n    printf(\"Starting game (Sequential evolution)\\n\");\n#endif\n\n    m_nIteration = 0;\n    m_serial_time = 0;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    while (!m_done)\n    {\n        if( !is_paused ) \n        {\n            tbb::tick_count t = tbb::tick_count::now();\n            Step();\n            tbb::tick_count t1 = tbb::tick_count::now();\n            ++m_nIteration;\n            double  work_time = (t1-t0).seconds();\n#ifndef _CONSOLE\n            if ( work_time * 1000 < TIME_SLICE )\n                continue;\n            m_serial_time += work_time;\n            m_board->draw(m_nIteration);\n#else\n            m_serial_time += work_time;\n#endif\n        }\n        //! Let the parallel algorithm work uncontended almost the same time\n        //! as the serial one. See ParallelEvolution::Run() as well.\n#ifndef _CONSOLE\n        m_evt_start_parallel->Set();\n        m_evt_start_serial->WaitOne();\n        t0 = tbb::tick_count::now();\n#else\n        t0 = tbb::tick_count::now();\n        if(m_serial_time > execution_time)\n        {\n            printf(\"iterations count = %d time = %g\\n\", m_nIteration, m_serial_time);\n            break;\n        }\n#endif\n    }\n}\n\n//! SequentialEvolution::Step() - override of step method\nvoid SequentialEvolution::Step()\n{\n        if( !is_paused ) \n    {\n#ifdef USE_SSE\n    UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height);\n#else\n    UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1);\n    UpdateMatrix();\n#endif\n        }\n}\n\n/*\n    ParallelEvolution\n*/\n\n//! SequentialEvolution::Run - begins looped evolution\n#ifndef _CONSOLE\nvoid ParallelEvolution::Run()\n{\n#else\nvoid ParallelEvolution::Run(double execution_time, int nthread)\n{\n    if(nthread == tbb::task_scheduler_init::automatic)\n        printf(\"Starting game (Parallel evolution for automatic number of thread(s))\\n\");\n    else\n        printf(\"Starting game (Parallel evolution for %d thread(s))\\n\", nthread);\n#endif\n\n    m_nIteration = 0;\n    m_parallel_time = 0;\n\n#ifndef _CONSOLE\n    //! start task scheduler as necessary\n    if (m_pInit == NULL)\n    {\n        m_pInit = new tbb::task_scheduler_init();\n    }\n    m_evt_start_parallel->WaitOne();\n#else\n    tbb::task_scheduler_init init(nthread);\n#endif\n\n    double  work_time = m_serial_time;\n    tbb::tick_count t0 = tbb::tick_count::now();\n\n    while (!m_done)\n    {\n        if( !is_paused ) \n        {\n            tbb::tick_count t = tbb::tick_count::now();\n            Step();\n            tbb::tick_count t1 = tbb::tick_count::now();\n            ++m_nIteration;\n            double real_work_time = (t1-t0).seconds();\n#ifndef _CONSOLE\n            if ( real_work_time < work_time )\n                continue;\n            m_parallel_time += real_work_time;\n            m_board->draw(m_nIteration); \n#else\n            m_parallel_time += real_work_time;\n#endif\n        }\n        //! Let the serial algorithm work the same time as the parallel one.\n#ifndef _CONSOLE\n        m_evt_start_serial->Set();\n        m_evt_start_parallel->WaitOne();\n\n        work_time = m_serial_time - m_parallel_time;\n        t0 = tbb::tick_count::now();\n#else\n        t0 = tbb::tick_count::now();\n        if(m_parallel_time > execution_time)\n        {\n            printf(\"iterations count = %d time = %g\\n\", m_nIteration, m_parallel_time);\n            init.terminate();\n            break;\n        }\n#endif\n    }\n}\n\n/**\n    class tbb_parallel_task\n    \n    TBB requires a class for parallel loop implementations. The actual \n    loop \"chunks\" are performed using the () operator of the class. \n    The blocked_range contains the range to calculate. Please see the \n    TBB documentation for more information.\n**/\n#ifndef _CONSOLE\npublic class tbb_parallel_task\n#else\nclass tbb_parallel_task\n#endif\n{\npublic:\n    static void set_values (Matrix* source, char* dest)\n    {\n        m_source = source;\n        m_dest = dest;\n        return;\n    }\n\n    void operator()( const tbb::blocked_range<size_t>& r ) const \n    {\n        int begin = (int)r.begin();            //! capture lower range number for this chunk\n        int end = (int)r.end();                //! capture upper range number for this chunk\n        UpdateState(m_source, m_dest, begin, end);\n    }\n\n    tbb_parallel_task () {}\n\nprivate:\n    static Matrix* m_source;\n    static char* m_dest;\n};\n\nMatrix* tbb_parallel_task::m_source;\nchar* tbb_parallel_task::m_dest;\n\n//! ParallelEvolution::Step() - override of Step method\nvoid ParallelEvolution::Step()\n{\n    size_t begin = 0;                   //! beginning cell position\n#ifdef USE_SSE\n    size_t end = m_matrix->height;      //! ending cell position\n#else\n    size_t end = m_size-1;              //! ending cell position\n#endif\n\n    //! set matrix pointers\n    tbb_parallel_task::set_values(m_matrix, m_dest);\n\n    //! do calculation loop\n    parallel_for (tbb::blocked_range<size_t> (begin, end, GRAIN_SIZE), tbb_parallel_task());\n    UpdateMatrix();\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Evolution.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/** \n    Evolution.h: Header file for evolution classes; evolution classes do \n    looped evolution of patterns in a defined 2 dimensional space \n**/\n\n#ifndef __EVOLUTION_H__\n#define __EVOLUTION_H__\n\n#include \"Board.h\"\n#include <string.h>\n#include <stdlib.h>\n#include <stdio.h>\n\n#define WIN32_LEAN_AND_MEAN\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n\n#ifndef _CONSOLE\n#include <windows.h>\nusing namespace System::Threading;\n#else\ntypedef unsigned int Int32;\n#endif\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end);\n\n/**\n    class Evolution - base class for SequentialEvolution and ParallelEvolution\n**/\n#ifndef _CONSOLE\npublic ref class Evolution abstract\n#else\nclass Evolution\n#endif\n{\npublic:\n    Evolution( Matrix *m,                //! beginning matrix including initial pattern\n               BoardPtr board              //! the board to update\n             ) : m_matrix(m), m_board(board), \n                 m_size(m_matrix->height * m_matrix->width), m_done(false)\n    {\n        //! allocate memory for second matrix data block\n        m_dest = new char[m_size];\n        is_paused = false;\n#ifdef _CONSOLE\n        m_serial_time = 0;\n#endif\n    }\n\n    virtual ~Evolution()\n    {\n        delete[] m_dest;\n    }\n\n    //! Run() - begins looped evolution\n#ifndef _CONSOLE\n    virtual void Run() = 0;\n#else\n    virtual void Run(double execution_time, int nthread) = 0;\n#endif\n\n    //! Quit() - tell the thread to terminate\n    virtual void Quit() { m_done = true; }\n    \n    //! Step() - performs a single evolutionary generation computation on the game matrix\n    virtual void Step() = 0;\n\n    //! SetPause() - change condition of variable is_paused\n    virtual void SetPause(bool condition)\n    {\n        if ( condition == true )\n            is_paused = true;\n        else\n            is_paused = false;\n    }\n    \nprotected:\n    /** \n        UpdateMatrix() - moves the previous destination data to the source \n        data block and zeros out destination.\n    **/\n    void UpdateMatrix();\n\nprotected:\n    Matrix*         m_matrix;       //! Pointer to initial matrix\n    char*           m_dest;         //! Pointer to calculation destination data    \n    BoardPtr        m_board;        //! The game board to update\n    int             m_size;         //! size of the matrix data block\n    volatile bool   m_done;         //! a flag used to terminate the thread\n    Int32           m_nIteration;   //! current calculation cycle index\n    volatile bool   is_paused;      //! is needed to perform next iteration\n    \n    //! Calculation time of the sequential version (since the start), seconds.\n    /**\n        This member is updated by the sequential version and read by parallel,\n        so no synchronization is necessary.\n    **/\n#ifndef _CONSOLE\n    static volatile double m_serial_time = 0;\n\n    static System::Threading::AutoResetEvent    ^m_evt_start_serial = gcnew AutoResetEvent(false),\n                                                ^m_evt_start_parallel = gcnew AutoResetEvent(false);\n#else\n    double m_serial_time;\n#endif\n};\n\n/**\n    class SequentialEvolution - derived from Evolution - calculate life generations serially\n**/\n#ifndef _CONSOLE\npublic ref class SequentialEvolution: public Evolution\n#else\nclass SequentialEvolution: public Evolution\n#endif\n{\npublic:\n    SequentialEvolution(Matrix *m, BoardPtr board)\n                       : Evolution(m, board)\n    {}\n#ifndef _CONSOLE        \n    virtual void Run() override;\n    virtual void Step() override;\n#else\n    virtual void Run(double execution_time, int nthread);\n    virtual void Step();\n#endif\n\n};\n\n/**\n    class ParallelEvolution - derived from Evolution - calculate life generations\n    in parallel using Intel(R) TBB\n**/\n#ifndef _CONSOLE\npublic ref class ParallelEvolution: public Evolution\n#else\nclass ParallelEvolution: public Evolution\n#endif\n{\npublic:\n\n    ParallelEvolution(Matrix *m, BoardPtr board)\n                     : Evolution(m, board),\n                       m_parallel_time(0)\n    {\n        // instantiate a task_scheduler_init object and save a pointer to it\n        m_pInit = NULL;\n    }\n    \n    ~ParallelEvolution()\n    {\n        //! delete task_scheduler_init object\n        if (m_pInit != NULL)\n            delete m_pInit;\n    }\n#ifndef _CONSOLE\n    virtual void Run() override;\n    virtual void Step() override;\n#else\n    virtual void Run(double execution_time, int nthread);\n    virtual void Step();\n#endif\n    \n\nprivate:\n    tbb::task_scheduler_init* m_pInit;\n\n    double m_parallel_time;\n};\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Form1.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _CONSOLE\n#ifndef __FORM1_H__\n#define __FORM1_H__\n\n#include <time.h>\n#include \"Board.h\"\n#include \"Evolution.h\"\n\n#define BOARD_SQUARE_SIZE 2\n\n    using namespace System;\n    using namespace System::ComponentModel;\n    using namespace System::Collections;\n    using namespace System::Windows::Forms;\n    using namespace System::Data;\n    using namespace System::Drawing;\n\n    public ref class Form1 : public System::Windows::Forms::Form\n    {\n    public:\n        Form1(void)\n        {\n            InitializeComponent();\n\n            FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;\n            ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height);\n\n            int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE;\n            int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE;\n\n            m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen);\n            m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen);\n            \n            Controls->Add(m_board1);\n            Controls->Add(m_board2);\n\n            m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height);\n            m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height);\n\n            m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1);\n            m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2);\n\n            m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run));\n            m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run));        \n\n            Thread::CurrentThread->Priority = ThreadPriority::AboveNormal;\n\n            m_suspend = true;\n        }\n    protected:\n        ~Form1()\n        {\n            if (components)\n            {\n                delete components;\n            }\n        }\n    private: System::Windows::Forms::MenuStrip^  menuStrip1;\n    private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  gameToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  seedToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  runToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  pauseToolStripMenuItem;\n    private: Board^ m_board1;\n    private: Board^ m_board2;\n    private: System::Windows::Forms::Label^  Sequential;\n    private: System::Windows::Forms::Label^  label1;\n    private: static const int m_sepWidth = 5;\n    private: static const int m_ribbonHeight = 26;\n    private: SequentialEvolution^ m_seq;\n    private: ParallelEvolution^ m_par;\n    private: Thread^ m_seqThread;\n    private: Thread^ m_parThread;\n    private: System::Windows::Forms::Label^  seqGen;\n    private: System::Windows::Forms::Label^  parGen;\n    private: bool m_suspend;\n\n    private:\n        System::ComponentModel::Container ^components;\n\n#pragma region Windows Form Designer generated code\n        void InitializeComponent(void)\n        {\n            this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());\n            this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->Sequential = (gcnew System::Windows::Forms::Label());\n            this->label1 = (gcnew System::Windows::Forms::Label());\n            this->seqGen = (gcnew System::Windows::Forms::Label());\n            this->parGen = (gcnew System::Windows::Forms::Label());\n            this->menuStrip1->SuspendLayout();\n            this->SuspendLayout();\n            // \n            // menuStrip1\n            // \n            this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) \n                {this->fileToolStripMenuItem, this->gameToolStripMenuItem});\n            this->menuStrip1->Location = System::Drawing::Point(0, 0);\n            this->menuStrip1->Name = L\"menuStrip1\";\n            this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2);\n            this->menuStrip1->Size = System::Drawing::Size(1600, 26);\n            this->menuStrip1->TabIndex = 0;\n            this->menuStrip1->Text = L\"menuStrip1\";\n            this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);\n            // \n            // fileToolStripMenuItem\n            // \n            this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->exitToolStripMenuItem});\n            this->fileToolStripMenuItem->Name = L\"fileToolStripMenuItem\";\n            this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22);\n            this->fileToolStripMenuItem->Text = L\"File\";\n            // \n            // exitToolStripMenuItem\n            // \n            this->exitToolStripMenuItem->Name = L\"exitToolStripMenuItem\";\n            this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22);\n            this->exitToolStripMenuItem->Text = L\"Exit\";\n            this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit);\n            // \n            // gameToolStripMenuItem\n            // \n            this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->seedToolStripMenuItem, \n                this->runToolStripMenuItem, this->pauseToolStripMenuItem});\n            this->gameToolStripMenuItem->Name = L\"gameToolStripMenuItem\";\n            this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22);\n            this->gameToolStripMenuItem->Text = L\"Game\";\n            // \n            // seedToolStripMenuItem\n            // \n            this->seedToolStripMenuItem->Name = L\"seedToolStripMenuItem\";\n            this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->seedToolStripMenuItem->Text = L\"Seed\";\n            this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed);\n            // \n            // runToolStripMenuItem\n            // \n            this->runToolStripMenuItem->Enabled = false;\n            this->runToolStripMenuItem->Name = L\"runToolStripMenuItem\";\n            this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->runToolStripMenuItem->Text = L\"Run\";\n            this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun);\n            // \n            // pauseToolStripMenuItem\n            // \n            this->pauseToolStripMenuItem->Enabled = false;\n            this->pauseToolStripMenuItem->Name = L\"pauseToolStripMenuItem\";\n            this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->pauseToolStripMenuItem->Text = L\"Pause\";\n            this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume);\n            // \n            // Sequential\n            // \n            this->Sequential->AutoSize = true;\n            this->Sequential->Font = (gcnew System::Drawing::Font(L\"Microsoft Sans Serif\", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, \n                static_cast<System::Byte>(0)));\n            this->Sequential->Location = System::Drawing::Point(12, 32);\n            this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->Sequential->Name = L\"Sequential\";\n            this->Sequential->Size = System::Drawing::Size(239, 18);\n            this->Sequential->TabIndex = 1;\n            this->Sequential->Text = L\"Sequential Algorithm      generation:\";\n            // \n            // label1\n            // \n            this->label1->AutoSize = true;\n            this->label1->Font = (gcnew System::Drawing::Font(L\"Microsoft Sans Serif\", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, \n                static_cast<System::Byte>(0)));\n            this->label1->Location = System::Drawing::Point(813, 32);\n            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->label1->Name = L\"label1\";\n            this->label1->Size = System::Drawing::Size(219, 18);\n            this->label1->TabIndex = 2;\n            this->label1->Text = L\"Parallel Algorithm     generation: \";\n            // \n            // seqGen\n            // \n            this->seqGen->AutoSize = true;\n            this->seqGen->Location = System::Drawing::Point(289, 35);\n            this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->seqGen->Name = L\"seqGen\";\n            this->seqGen->Size = System::Drawing::Size(16, 17);\n            this->seqGen->TabIndex = 3;\n            this->seqGen->Text = L\"0\";\n            // \n            // parGen\n            // \n            this->parGen->AutoSize = true;\n            this->parGen->Location = System::Drawing::Point(1068, 35);\n            this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->parGen->Name = L\"parGen\";\n            this->parGen->Size = System::Drawing::Size(16, 17);\n            this->parGen->TabIndex = 4;\n            this->parGen->Text = L\"0\";\n            // \n            // Form1\n            // \n            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);\n            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;\n            this->ClientSize = System::Drawing::Size(1600, 738);\n            this->Controls->Add(this->parGen);\n            this->Controls->Add(this->seqGen);\n            this->Controls->Add(this->label1);\n            this->Controls->Add(this->Sequential);\n            this->Controls->Add(this->menuStrip1);\n            this->MainMenuStrip = this->menuStrip1;\n            this->Margin = System::Windows::Forms::Padding(4);\n            this->MaximizeBox = false;\n            this->Name = L\"Form1\";\n            this->Text = L\"Game of Life\";\n            this->menuStrip1->ResumeLayout(false);\n            this->menuStrip1->PerformLayout();\n            this->ResumeLayout(false);\n            this->PerformLayout();\n\n        }\n#pragma endregion    \n    protected: \n        void CloseApp ()\n        {\n            m_seq->Quit();\n            m_par->Quit();\n            //! Perform a very ungracious exit, should coordinate the threads\n            System::Environment::Exit(0);            \n        }\n    \n    protected: \n        virtual void OnPaint(PaintEventArgs^ e) override\n        {\n        }\n\n        virtual void OnFormClosing(FormClosingEventArgs^ e) override\n        { \n            CloseApp();\n        }\n    \n        void OnExit(System::Object^ sender, System::EventArgs^ e)\n        {                \n            CloseApp();\n        }\n\n        void OnSeed(System::Object^ sender, System::EventArgs^ e)\n        {\n            this->seedToolStripMenuItem->Enabled = false;\n            this->runToolStripMenuItem->Enabled = true;            \n            time_t now = time(NULL);\n            this->m_board1->seed((int)now);\n            this->m_board2->seed(this->m_board1);\n            this->Invalidate();\n        }\n\n        void OnRun(System::Object^ sender, System::EventArgs^ e)\n        {    \n            this->runToolStripMenuItem->Enabled = false;        \n            this->pauseToolStripMenuItem->Enabled = true;\n            m_seqThread->Start();\n            m_parThread->Start();    \n        }\n\n        void OnPauseResume(System::Object^ sender, System::EventArgs^ e)\n        {    \n            if (m_suspend)\n            {\n                m_seq->SetPause(true);\n                m_par->SetPause(true);\n                this->pauseToolStripMenuItem->Text = L\"Resume\";\n            }\n            else\n            {\n                m_seq->SetPause(false);\n                m_par->SetPause(false);            \n                this->pauseToolStripMenuItem->Text = L\"Pause\";\n            }\n            m_suspend = !m_suspend;\n        }\n\n    private: \n        System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) \n        {}\n};\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Game_of_life.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* \n    Game_of_life.cpp : \n                      main project file.\n*/\n#include \"Board.h\"\n#include \"Form1.h\"\n\n#define WIN32_LEAN_AND_MEAN\n\n#ifndef _CONSOLE\n#include <windows.h>\n#else\n#include <iostream>\n#include <sstream>\n#include <time.h>\n#include \"Evolution.h\"\n\n#define BOARD_SQUARE_SIZE 2\n\nint low;                            //! lower range limit of threads\nint high;                           //! high range limit of threads\ndouble execution_time;              //! time for game of life iterations\n#endif\n\nBoard::Board(int width, int height, int squareSize, LabelPtr counter)\n: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter)\n{\n#ifndef _CONSOLE\n    InitializeComponent();\n    DoubleBuffered = true;\n\n    this->Width = m_squareSize*width;\n    this->Height = m_squareSize*height;\n#endif\n    m_matrix = new Matrix();\n    m_matrix->width = width;\n    m_matrix->height = height;\n    m_matrix->data = new char[width*height];\n    memset(m_matrix->data, 0, width*height);\n#ifndef _CONSOLE\n    m_occupiedBrush = gcnew SolidBrush(Color::Black);\n    m_freeBrush = gcnew SolidBrush(Color::LightGray);\n    \n    m_graphics = CreateGraphics();\n    m_bmp = gcnew Bitmap(Width, Height);\n    m_mem_dc = Graphics::FromImage(m_bmp);\n#endif\n}\n\nBoard::~Board()\n{\n#ifndef _CONSOLE\n    if (components)\n    {\n        delete components;\n    }\n#endif\n    delete[] m_matrix->data;\n    delete m_matrix;\n}\n\nvoid Board::seed(int s)\n{        \n    srand(s);\n    for (int j=0; j<m_height; j++)\n    {\n        for (int i=0; i<m_width; i++)\n        {        \n            int x = rand()/(int)(((unsigned)RAND_MAX + 1) / 100);\n            m_matrix->data[i+j*m_width] = x>75? 1: 0;               // 25% occupied\n        }\n    }\n#ifndef _CONSOLE\n    Invalidate();\n#endif\n}\n\nvoid Board::seed( const BoardPtr src )\n{        \n            memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width);\n#ifndef _CONSOLE\n    Invalidate();\n#endif\n}\n\n#ifndef _CONSOLE\nvoid Board::draw(Graphics^ g)\n{\n    m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize));\n    for (int j=0; j<m_height; j++)\n    {\n        for (int i=0; i<m_width; i++)\n        {    \n            if ( m_matrix->data[i+j*m_width] )\n            {\n                m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize));\n            }\n        }\n    }\n    g->DrawImage(m_bmp, 0, 0);\n}\n\nvoid Board::OnPaint(PaintEventArgs^ e)\n{\n    draw(e->Graphics);\n}\n\n[STAThreadAttribute]\nint main(array<System::String ^> ^args)\n{\n    // Enabling Windows XP visual effects before any controls are created\n    Application::EnableVisualStyles();\n    Application::SetCompatibleTextRenderingDefault(false); \n\n    // Create the main window and run it\n    Application::Run(gcnew Form1());\n    return 0;\n}\n#else\n\n//! Print usage of this program\nvoid PrintUsage() \n{\n    printf(\"Usage: gol [M[:N] -t execution_time]\\nM and N are a range of numbers of threads to be used.\\nexecution_time is a time (in sec) for execution game_of_life iterations\\n\");\n    printf(\"Default values:\\nM:\\t\\tautomatic\\nN:\\t\\tM\\nexecution_time:\\t10\\n\");\n}\n\n//! Parse command line\nbool ParseCommandLine(int argc, char * argv []) \n{\n    char* s = argv[1];\n    char* end;\n    //! command line without parameters\n    if(argc == 1)\n    {\n        low = tbb::task_scheduler_init::automatic;\n        high = low;\n        execution_time = 5;\n        return true;\n    }\n    //! command line with parameters\n    if(argc != 4)\n    {\n        PrintUsage();\n        return false;\n    }\n    if(std::string(\"-t\") != argv[argc-2])\n    //! process M[:N] parameter\n    high = strtol(s,&end,0);\n    low = strtol(s,&end,0);\n    switch( *end ) \n    {\n        case ':': \n            high = strtol(end+1,0,0); \n            break;\n        case '\\0':\n            break;\n        default:\n            PrintUsage();\n            return false;\n    }\n    if (high < low)\n    {\n        std::cout << \"Set correct range. Current range: \" << low << \":\" << high << std::endl;\n        PrintUsage();\n        return false;\n\n    }\n    //! process execution_time parameter\n    execution_time = strtol(argv[argc-1],&end,0);\n    return true;\n}\n\nint main( int argc, char* argv[] ) \n{\n    if(!ParseCommandLine( argc, argv ))\n        return 1;\n    SequentialEvolution* m_seq;\n    ParallelEvolution* m_par;\n    Board* m_board1;\n    Board* m_board2; \n    int* count = NULL;\n   \n    int boardWidth = 300;\n    int boardHeight = 300;\n\n    m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);\n    m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);\n\n    time_t now = time(NULL);\n    printf(\"Generate Game of life board\\n\");\n    m_board1->seed((int)now);\n    m_board2->seed(m_board1);\n\n    m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1);\n    m_seq->Run(execution_time, 1);\n    delete m_seq;\n\n    m_par = new ParallelEvolution(m_board2->m_matrix, m_board2);\n    for( int p = low; p <= high; ++p ) \n    {\n        m_par->Run(execution_time, p);\n    }\n    delete m_par;\n\n    delete m_board1;\n    delete m_board2;\n    return 0;\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/src/Update_state.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"Evolution.h\"\n\n#ifdef USE_SSE \n/* Update states with SSE */\n\n#include <xmmintrin.h>\n#include <emmintrin.h>\n\ninline void create_record( char * src, unsigned * dst, unsigned width)\n{\n    dst[0] |= src[width - 1];\n    for( unsigned a=0; a<31u; ++a )\n        dst[0] |= src[a]<<(a+1);\n    unsigned a;\n    for( a=31u; a<width; ++a )\n        dst[(a+1)/32u] |= src[a]<<((a+1)%32u);\n    dst[(a+1)/32u] |= src[0]<<((a+1)%32u);\n}\n\ninline void sum_offset( __m128i * X, __m128i * A, __m128i * B, __m128i * C, \n                        unsigned size_sse_ar, unsigned shift )\n{\n    for(unsigned i=0; i<size_sse_ar; ++i) \n    {\n        __m128i tmp = _mm_and_si128(A[i],X[shift + i]);    \n        A[i]=_mm_xor_si128(A[i],X[shift + i]);    \n        C[i]=_mm_or_si128(C[i],_mm_and_si128(B[i],tmp));\n        B[i]=_mm_xor_si128(B[i],tmp);\n    }\n}\n\ninline void shift_left2D( __m128i * X, unsigned height, unsigned size_sse_row )\n{\n    for( unsigned b=0; b<height; ++b ) \n    {\n        unsigned ind = b*size_sse_row;\n        unsigned x0 = X[ind].m128i_u32[0] & 1;\n\n        X[ind] =_mm_or_si128( _mm_srli_epi16(X[ind],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind], 2), 15) );\n    \n        unsigned x1 = X[ind + 1].m128i_u32[0] & 1;\n        X[ind+1] =_mm_or_si128( _mm_srli_epi16( X[ind+1],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind+1], 2), 15) );\n        X[ind].m128i_u32[3] |= x1<<31;\n        \n        unsigned x2 = X[ind + 2].m128i_u32[0] & 1;\n        X[ind+2] =_mm_or_si128( _mm_srli_epi16( X[ind+2],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind+2], 2), 15) );\n        X[ind+1].m128i_u32[3] |= x2<<31;\n        \n        unsigned* dst = (unsigned*)&X[ind];\n        dst[301/32u] |= x0<<(301%32u);\n   }\n}\n\ninline void shift_right2D( __m128i * X, unsigned height, unsigned size_sse_row )\n{\n    for( unsigned b=0; b<height; ++b ) \n    {\n        unsigned ind = b*size_sse_row;\n\n        unsigned x0 = X[ind].m128i_u32[3]; x0>>=31;\n        X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), \n            _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) );\n            \n        unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31;\n        X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1),\n                _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) );\n        X[ind + 1].m128i_u32[0] |= x0;\n                \n        unsigned* dst = (unsigned*)&X[ind];\n        unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u);\n        X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1),\n            _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) );        \n        X[ind + 2].m128i_u32[0] |= x1;    \n        X[ind].m128i_u32[0] |= x2;\n   }\n}\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)\n{\n    //300/128 + 1 =3, 3*300=900\n    unsigned size_sse_row = m_matrix->width/128 + 1; //3\n    unsigned size_sse_ar=size_sse_row * (end - begin); \n    __m128i X[906], A[900], B[900], C[900];\n    char * mas  = m_matrix->data;\n    \n    for( unsigned i=0; i<size_sse_ar; ++i)\n    {\n        A[i].m128i_u32[0]=0;A[i].m128i_u32[1]=0;A[i].m128i_u32[2]=0;A[i].m128i_u32[3]=0;\n        B[i].m128i_u32[0]=0;B[i].m128i_u32[1]=0;B[i].m128i_u32[2]=0;B[i].m128i_u32[3]=0;\n        C[i].m128i_u32[0]=0;C[i].m128i_u32[1]=0;C[i].m128i_u32[2]=0;C[i].m128i_u32[3]=0;    \n    }\n\n    for( unsigned i=0; i<size_sse_ar+6; ++i)\n    {\n        X[i].m128i_u32[0]=0;X[i].m128i_u32[1]=0;X[i].m128i_u32[2]=0;X[i].m128i_u32[3]=0;\n    }\n\n    // create X[] with bounds\n    unsigned height = end - begin;\n    unsigned width = m_matrix->width;\n    for( unsigned b = 0 ; b < height; ++b ) \n    {\n        char* src = &mas[(b + begin)*width];\n        unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row];\n        create_record(src, dst, width);\n    }\n    // create high row in X[]\n    char * src;\n    if(begin == 0) \n    {\n        src = &mas[(m_matrix->height-1)*width];\n    }\n    else \n    {\n        src = &mas[(begin-1)*width];\n    }\n    unsigned* dst = (unsigned*)X;\n    create_record(src, dst, width);\n    \n    //create lower row in X[]\n    if(end == m_matrix->height ) \n    {\n        src = mas;\n    }        \n    else \n    {\n        src = &mas[end*width];\n    }\n    dst = (unsigned*)&X[(height+1)*size_sse_row];\n    create_record(src, dst, width);\n    \n    //sum( C, B, A, X+offset_for_upwards ); high-left friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n    \n    //sum( C, B, A, X+offset_for_no_vertical_shift );\n    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);\n    \n    //sum( C, B, A, X+offset_for_downwards );\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_left( X ); (when view 2D) in our logic it is in right\n    height = end - begin + 2;\n    shift_left2D( X, height, size_sse_row);\n\n    //sum( C, B, A, X+offset_for_upwards ); high-left friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n\n    //sum( C, B, A, X+offset_for_downwards );\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_left( X ); (view in 2D) in our logic it is right shift\n    height = end - begin + 2;\n    shift_left2D( X, height, size_sse_row);\n    \n    //sum( C, B, A, X+offset_for_upwards ); high-right friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n    \n    //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend\n    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);    \n    \n    //sum( C, B, A, X+offset_for_downwards ); right down friend\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_right( X ); (when view in 2D) in our case it left shift.\n    height = end - begin + 2;\n    shift_right2D( X, height, size_sse_row);\n    \n    //X = (X|A)&B&~C (done bitwise over the arrays) \n    unsigned shift = size_sse_row;\n    for(unsigned i=0; i<size_sse_ar; ++i) \n    {\n        C[i].m128i_u32[0] = ~C[i].m128i_u32[0];\n        C[i].m128i_u32[1] = ~C[i].m128i_u32[1];\n        C[i].m128i_u32[2] = ~C[i].m128i_u32[2];\n        C[i].m128i_u32[3] = ~C[i].m128i_u32[3];\n        X[shift + i] = _mm_and_si128(_mm_and_si128(_mm_or_si128(X[shift + i],\n            A[i]),B[i]),C[i]);    \n    }\n\n    height = end - begin;\n    width=m_matrix->width;\n    for( unsigned b=0; b<height; ++b ) \n    {\n        char* dst = &dest[(b+begin)*width];\n        unsigned* src = (unsigned*)&X[(b+1)*size_sse_row];\n        for( unsigned a=0; a<width; ++a )\n        {\n            unsigned c = src[a/32u] & 1<<(a%32u);\n            dst[a] = c>>(a%32u);\n        }\n    }\n}\n#else \n/* end SSE block */\n\n// ----------------------------------------------------------------------\n// GetAdjacentCellState() - returns the state (value) of the specified \n// adjacent cell of the current cell \"cellNumber\"\nchar GetAdjacentCellState(\n                                char* source,      // pointer to source data block\n                                int x,             // logical width of field\n                                int y,             // logical height of field\n                                int cellNumber,    // number of cell position to examine\n                                int cp             // which adjacent position\n                               )\n{\n/* \ncp \n*-- cp=1 ... --- cp=8 (summary: -1-2-3-\n-x-          -x-                -4-x-5-\n---          --*                -6-7-8- )\n*/\n    char cellState = 0;        // return value\n\n    // set up boundary flags to trigger field-wrap logic\n    bool onTopRow = false;\n    bool onBottomRow = false;\n    bool onLeftColumn = false;\n    bool onRightColumn = false;\n\n    // check to see if cell is on top row\n    if (cellNumber < x)\n    {\n        onTopRow = true;\n    }\n    // check to see if cell is on bottom row\n    if ((x*y)-cellNumber <= x)\n    {\n        onBottomRow = true;\n    }\n    // check to see if cell is on left column\n    if (cellNumber%x == 0)\n    {\n        onLeftColumn = true;\n    }\n    // check to see if cell is on right column\n    if ((cellNumber+1)%x == 0)\n    {\n        onRightColumn = true;\n    }\n\n    switch (cp)\n    {\n        case 1:\n            if (onTopRow && onLeftColumn)\n            {\n                return *(source+((x*y)-1));\n            }\n            if (onTopRow && !onLeftColumn)\n            {\n                return *(source+(((x*y)-x)+(cellNumber-1)));\n            }\n            if (onLeftColumn && !onTopRow)\n            {\n                return *(source+(cellNumber-1));\n            }\n            return *((source+cellNumber)-(x+1));\n\n        case 2:\n            if (onTopRow)\n            {\n                return *(source+(((x*y)-x)+cellNumber));\n            }\n            return *((source+cellNumber)-x);\n\n        case 3:\n            if (onTopRow && onRightColumn)\n            {\n                return *(source+((x*y)-x));\n            }\n            if (onTopRow && !onRightColumn)\n            {\n                return *(source+(((x*y)-x)+(cellNumber+1)));\n            }\n            if (onRightColumn && !onTopRow)\n            {\n                return *(source+((cellNumber-(x*2))+1));\n            }\n            return *(source+(cellNumber-(x-1)));\n\n        case 4:\n            if (onRightColumn)\n            {\n                return *(source+(cellNumber-(x-1)));\n            }\n            return *(source+(cellNumber+1));\n\n        case 5:\n            if (onBottomRow && onRightColumn)\n            {\n                return *source;\n            }\n            if (onBottomRow && !onRightColumn)\n            {\n                return *(source+((cellNumber-((x*y)-x))+1));\n            }\n            if (onRightColumn && !onBottomRow)\n            {\n                return *(source+(cellNumber+1));\n            }\n            return *(source+(((cellNumber+x))+1));\n\n        case 6:\n            if (onBottomRow)\n            {\n                return *(source+(cellNumber-((x*y)-x)));\n            }\n            return *(source+(cellNumber+x));\n\n        case 7:\n            if (onBottomRow && onLeftColumn)\n            {\n                return *(source+(x-1));\n            }\n            if (onBottomRow && !onLeftColumn)\n            {\n                return *(source+(cellNumber-((x*y)-x)-1));\n            }\n            if (onLeftColumn && !onBottomRow)\n            {\n                return *(source+(cellNumber+((x*2)-1)));\n            }\n            return *(source+(cellNumber+(x-1)));\n\n        case 8:\n            if (onLeftColumn)\n            {\n                return *(source+(cellNumber+(x-1)));\n            }\n            return *(source+(cellNumber-1));\n    }\n    return cellState;\n}\n\nchar CheckCell(Matrix * m_matrix, int cellNumber)\n{\n    char total = 0;\n    char* source = m_matrix->data;\n    //look around to find cell's with status \"alive\"\n    for(int i=1; i<9; i++)\n    {\n        total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i);\n    }\n    // if the number of adjacent live cells is < 2 or > 3, the result is a dead \n    // cell regardless of its current state. (A live cell dies of loneliness if it\n    // has less than 2 neighbors, and of overcrowding if it has more than 3; a new\n    // cell is born in an empty spot only if it has exactly 3 neighbors.\n    if (total < 2 || total > 3)\n    {\n        return 0;\n    }\n\n    // if we get here and the cell position holds a living cell, it stays alive\n    if (*(source+cellNumber))\n    {\n        return 1;\n    }\n\n    // we have an empty position. If there are only 2 neighbors, the position stays\n    // empty.\n    if (total == 2)\n    {\n        return 0;\n    }\n\n    // we have an empty position and exactly 3 neighbors. A cell is born.\n    return 1;\n}\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)\n{\n        for (int i=begin; i<=end; i++)\n        {\n            *(dest+i) = CheckCell(m_matrix, i);\n        }\n}\n\n#endif \n/* end non-SSE block */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */; };\n\t\t612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DC11F573FC00A587B2 /* Update_state.cpp */; };\n\t\t612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8E011F5742000A587B2 /* Evolution.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game_of_life.cpp; path = ../src/Game_of_life.cpp; sourceTree = SOURCE_ROOT; };\n\t\t612CD8DC11F573FC00A587B2 /* Update_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Update_state.cpp; path = ../src/Update_state.cpp; sourceTree = SOURCE_ROOT; };\n\t\t612CD8E011F5742000A587B2 /* Evolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Evolution.cpp; path = ../src/Evolution.cpp; sourceTree = SOURCE_ROOT; };\n\t\t8DD76F6C0486A84900D96B5E /* game_of_life */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = game_of_life; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* game_of_life */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = game_of_life;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t612CD8E011F5742000A587B2 /* Evolution.cpp */,\n\t\t\t\t612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */,\n\t\t\t\t612CD8DC11F573FC00A587B2 /* Update_state.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* game_of_life */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* game_of_life */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"game_of_life\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = game_of_life;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = game_of_life;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* game_of_life */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"game_of_life\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* game_of_life */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* game_of_life */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */,\n\t\t\t\t612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */,\n\t\t\t\t612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = game_of_life;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = game_of_life;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = game_of_life;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = game_of_life;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"game_of_life\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"game_of_life\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_for algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_for</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_for</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"seismic/readme.html\">seismic</a>\n\t\t\t\t<dd>Parallel seismic wave simulation.\n\t\t\t\t<dt><a href=\"tachyon/readme.html\">tachyon</a>\n\t\t\t\t<dd>Parallel 2-D raytracer/renderer.\n\t\t\t\t<dt><a href=\"polygon_overlay/readme.html\">polygon_overlay</a>\n\t\t\t\t<dd>Simple polygon overlay.\n\t\t\t\t<dt><a href=\"game_of_life/readme.html\">game_of_life</a>\n\t\t\t\t<dd>Simple Game of life overlay.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=pover\nARGS=\nLIGHT_ARGS= --polys 10 --size 5x5\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\ninclude ../../common/gui/Makefile.gmake\n\nifeq ($(UI),x)\nUI_CXXFLAGS += -DX_FULLSYNC\nendif # X\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nSRCFILES = ../../common/gui/$(UI)video.cpp pover_video.cpp polymain.cpp polyover.cpp\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: $(SRCFILES) resources\nifeq ($(compiler),xl)\n\t# Avoiding \"1586-346 (U) An error occurred during code generation.  The code generation return code was 40.\" with -O3.\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nelse\nifeq ($(UI),mac)\n\t$(CXX_UI) -O3 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb -ltbbmalloc $(LIBS)\nendif\n\ndebug:  $(SRCFILES) resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb_debug -ltbbmalloc_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nlight_test:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Pover\nARGS=\nLIGHT_ARGS= --polys 10 --size 5x5\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\n\n# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)\n#UI = con\nUI = gdi\n#UI = dd\n\n# Machine architecture, auto-detected from TBB_TARGET_ARCH by default\n# Use XARCH variable to change it. See index.html for more information\nARCH0 = $(TBB_TARGET_ARCH)-\nARCH1 = $(ARCH0:ia32-=x86)\nARCH2 = $(ARCH1:intel64-=AMD64)\nXARCH = $(ARCH2:-=x86)\n\nMAKEINC = ../../common/gui/Makefile.win\n\nall: release test\nrelease: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS)\" LFLAGS=\"$(LDFLAGS) tbb.lib tbbmalloc.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one\ndebug: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS) /D TBB_USE_DEBUG\" LFLAGS=\"$(LDFLAGS) tbb_debug.lib tbbmalloc_debug.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\\pover.res\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"pover\", \"pover.vcxproj\", \"{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\t_GDIRelease|Win32 = _GDIRelease|Win32\r\n\t\t_GDIRelease|x64 = _GDIRelease|x64\r\n\t\tDD Debug|Win32 = DD Debug|Win32\r\n\t\tDD Debug|x64 = DD Debug|x64\r\n\t\tDD Release|Win32 = DD Release|Win32\r\n\t\tDD Release|x64 = DD Release|x64\r\n\t\tGDIDebug|Win32 = GDIDebug|Win32\r\n\t\tGDIDebug|x64 = GDIDebug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.ActiveCfg = Release|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.Build.0 = Release|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.ActiveCfg = Release|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.Build.0 = Release|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.Build.0 = Debug|Win32\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.ActiveCfg = Debug|x64\r\n\t\t{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.Build.0 = Debug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/msvs/pover.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include \"afxres.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE 9, 1\n#pragma code_page(1252)\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE  \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE  \nBEGIN\n    \"#include \"\"afxres.h\"\"\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE  \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DD Debug|Win32\">\n      <Configuration>DD Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DD Debug|x64\">\n      <Configuration>DD Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DD Release|Win32\">\n      <Configuration>DD Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DD Release|x64\">\n      <Configuration>DD Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>pover</ProjectName>\n    <ProjectGuid>{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}</ProjectGuid>\n    <RootNamespace>pover</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\polymain.cpp\" />\n    <ClCompile Include=\"..\\polyover.cpp\" />\n    <ClCompile Include=\"..\\pover_video.cpp\" />\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\d2dvideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\gdivideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DD Debug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DD Release|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DD Release|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\polymain.h\" />\n    <ClInclude Include=\"..\\polyover.h\" />\n    <ClInclude Include=\"..\\pover_global.h\" />\n    <ClInclude Include=\"..\\pover_video.h\" />\n    <ClInclude Include=\"..\\rpolygon.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\video.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\winvideo.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/msvs/resource.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by pover.rc\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        101\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/polymain.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Polygon overlay\n//\n// Don't want warnings about deprecated sscanf, getenv\n#ifndef _CRT_SECURE_NO_DEPRECATE\n#define _CRT_SECURE_NO_DEPRECATE\n#endif\n#define _MAIN_C_ 1\n#include <iostream>\n#include <iomanip>\n#include <algorithm>\n#include <cstring>\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"pover_global.h\"\n#include \"polyover.h\"\n#include \"pover_video.h\"\n#include \"polymain.h\"\n\nusing namespace std;\n\n#if _DEBUG\nconst char *faceNames[] = { \"North\", \"East\", \"South\", \"West\" };\n#endif\n\n/** \n**/\nint main( int argc, char **argv) {\n    pover_video poly;\n    poly.threaded = true;\n    gVideo = &poly;\n\n    if(!initializeVideo(argc, argv)) {\n        return 1;\n    }\n\n    gIsGraphicalVersion = poly.graphic_display();\n    if(argc > 1) {\n        if(!ParseCmdLine(argc, argv)) {\n            if(gIsGraphicalVersion) rt_sleep(10000);\n            // if graphical, we haven't opened the console window so all the error messages we\n            // so carefully wrote out disappeared into the ether.  :(\n            exit(1);\n        }\n    }\n\n    if(gCsvFilename != NULL) {\n#define BUFLEN 1000\n        std::string fname_buf = gCsvFilename;\n        fname_buf += \".csv\";\n        gCsvFile.open(fname_buf.c_str());\n    }\n\n    // we have gMapXSize and gMapYSize determining the number of \"squares\"\n    // we have g_xwinsize and g_ywinsize the total size of the window\n    // we also have BORDER_SIZE the size of the border between maps\n    // we need to determine\n    //      g_polyBoxSize -- the number of pixels on each size of each square\n\n    if(gIsGraphicalVersion) {\n        int xpixelsPerMap = (g_xwinsize - 4*BORDER_SIZE) / 3;  // three maps, with borders between and outside\n        gMapXSize = xpixelsPerMap;   // make the boxes one per pixel\n        gPolyXBoxSize = xpixelsPerMap / gMapXSize;\n        int ypixelsPerMap = (g_ywinsize - 2*BORDER_SIZE);       // one map vertically\n        gMapYSize = ypixelsPerMap;   // one pixel per box, rather.\n\n        gPolyYBoxSize = ypixelsPerMap / gMapYSize;\n        if((gPolyXBoxSize == 0) || (gPolyYBoxSize == 0)) {\n            cout << \"The display window is not large enough to show the maps\" << std::endl;\n            int minxSize = 4*BORDER_SIZE + 3*gMapXSize;\n            int minySize = 2*BORDER_SIZE + gMapYSize;\n            cout << \"  Should be at least \" << minxSize << \" x \" << minySize << \".\" << std::endl;\n            return 1;\n        }\n        map2XLoc = 2*BORDER_SIZE + gMapXSize * gPolyXBoxSize;\n        maprXLoc = 3*BORDER_SIZE + 2 * gMapXSize * gPolyXBoxSize;\n\n    }\n    else {  // not gIsGraphicalVersion\n        // gMapXSize, gMapYSize, gNPolygons defined in pover_global.h\n    }\n\n    // create two polygon maps\n    SetRandomSeed(gMyRandomSeed);  // for repeatability\n\n    gVideo->main_loop();\n}\n\nvoid Usage(int argc, char **argv) {\n    char *cmdTail = strrchr(*argv, '\\\\');\n    if(cmdTail == NULL)  {\n        cmdTail = *argv;\n    }\n    else { \n        cmdTail++;\n    }\n    cout << cmdTail << \" [threads[:threads2]] [--polys npolys] [--size nnnxnnn] [--seed nnn]\" << std::endl;\n    cout << \"Create polygon maps and overlay them.\" << std::endl << std::endl;\n    cout << \"Parameters:\" << std::endl;\n    cout << \"   threads[:threads2] - number of threads to run\" << std::endl;\n    cout << \"   --polys npolys - number of polygons in each map\" << std::endl;\n    cout << \"   --size nnnxnnn - size of each map (X x Y)\" << std::endl;\n    cout << \"   --seed nnn - initial value of random number generator\" << std::endl;\n    cout << \"   --csv filename - write timing data to CSV-format file\" << std::endl;\n    cout << \"   --grainsize n - set grainsize to n\" << std::endl;\n    cout << \"   --use_malloc - allocate polygons with malloc instead of scalable allocator\" << std::endl;\n    cout << std::endl;\n    cout << \"npolys must be smaller than the size of the map\" << std::endl;\n    cout << std::endl;\n    exit(1);\n}\n\nbool ParseCmdLine(int argc, char **argv ) {\n    bool error_found = false;\n    bool nPolysSpecified = false;\n    bool nMapSizeSpecified = false;\n    bool nSeedSpecified = false;\n    bool csvSpecified = false;\n    bool grainsizeSpecified = false;\n    bool mallocSpecified = false;\n    int origArgc = argc;\n    char** origArgv = argv;\n    unsigned int newnPolygons = gNPolygons;\n    unsigned int newSeed = gMyRandomSeed;\n    unsigned int newX = gMapXSize;\n    unsigned int newY = gMapYSize;\n    unsigned int newGrainSize = gGrainSize;\n    argc--; argv++;\n    if(argc > 0 && isdigit((*argv)[0])) {\n        // first argument is one or two numbers, specifying how mny threads to run\n        char* end; gThreadsHigh = gThreadsLow = (int)strtol(argv[0],&end,0);\n        switch( *end) {\n            case ':': gThreadsHigh = (int)strtol(end+1,0,0); break;\n            case '\\0': break;\n            default: cout << \"Unexpected character in thread specifier: \" << *end << std::endl; break;\n        }\n        if(gThreadsLow > gThreadsHigh) {\n            int t = gThreadsLow;\n            gThreadsLow = gThreadsHigh;\n            gThreadsHigh = t;\n        }\n        argv++; argc--;\n    }\n    while(argc > 0) {\n        // format 1: --size nnnxnnn, where nnn in {0 .. 9}+ -- size of map in \"squares\"\n        if(!strncmp(\"--size\", *argv, (size_t)6)) {\n            if(nMapSizeSpecified) {\n                cout << \" Error: map size multiply specified\" << std::endl;\n                error_found = true;\n            }\n            else  {\n                argv++; argc--;\n                if(argc == 0) {\n                    error_found = true;\n                    cout << \" Error: --size must have a value\" << std::endl;\n                }\n                if(strchr(*argv, 'x') != strrchr(*argv,'x')) {\n                    // more than one 'x'\n                    cout << \"Error: map size should be nnnxnnn (\" << *argv << \")\" << std::endl;\n                    error_found = true;\n                }\n                else {\n                    int rval;\n                    rval = sscanf(*argv, \"%ux%u\", &newX, &newY);\n                    if(rval != 2) {\n                        cout << \"Error parsing map size (format should be nnnxnnn (\" << *argv << \")\" << std::endl;\n                        error_found = true;\n                    }\n                    if(newX == 0 || newY == 0) {\n                        cout << \"Error: size of map should be greater than 0 (\" << *argv << \")\" << std::endl;\n                        error_found = true;\n                    }\n                }\n            }\n            argc--; argv++;\n        }\n        // format 2: --seed nnn -- initial random number seed\n        else if(!strncmp(\"--seed\", *argv, (size_t)6)) {\n            argv++; argc--;\n            if(nSeedSpecified) {\n                cout << \"Error: new seed multiply specified\" << std::endl;\n                error_found = true;\n            }\n            else {\n                nSeedSpecified = true;\n                int rtval = sscanf(*argv, \"%u\", &newSeed);\n                if(rtval == 0) {\n                    cout << \"Error: --seed should be an unsigned number (instead of \" << *argv << \")\" << std::endl;\n                    error_found = true;\n                }\n            }\n            argv++; argc--;\n        }\n        // format 3: --polys n[n] -- number of polygons in each map\n        else if(!strncmp(\"--polys\", *argv, (size_t)7)) {\n            //unsigned int newnPolygons;\n            argv++; argc--;\n            if(nPolysSpecified) {\n                cout << \"Error: number of polygons multiply-specified\" << std::endl;\n                error_found = true;\n            }else {\n                int rtval = sscanf(*argv, \"%u\", &newnPolygons);\n                if(newnPolygons == 0) {\n                    cout << \"Error: number of polygons must be greater than 0 (\" << *argv << \")\" << std::endl;\n                }\n            }\n            argv++; argc--;\n        }\n        // format 4: --csv <fileroot> -- name of CSV output file (\"xxx\" for \"xxx.csv\")\n        else if(!strncmp(\"--csv\", *argv, (size_t)5)) {\n            argv++; argc--;\n            if(csvSpecified) {\n                cout << \"Error: Multiple specification of CSV file\" << std::endl;\n                error_found = true;\n            }\n            else {\n                gCsvFilename = *argv;\n                argv++; argc--;\n                csvSpecified = true;\n            }\n        }\n        else if(!strncmp(\"--grainsize\", *argv, (size_t)11)) {\n            argv++; argc--;\n            if(grainsizeSpecified) {\n                cout << \"Error: Multiple specification of grainsize\" << std::endl;\n                error_found = true;\n            }\n            else {\n                int grval = sscanf(*argv, \"%u\", &newGrainSize);\n                grainsizeSpecified = true;\n                if(newGrainSize == 0) {\n                    cout << \"Error: grainsize must be greater than 0\" << std::endl;\n                    error_found = true;\n                }\n            }\n            argv++; argc--;\n        }\n        else if(!strncmp(\"--use_malloc\", *argv, (size_t)12)) {\n            argv++; argc--;\n            if(mallocSpecified) {\n                cout << \"Error: --use_malloc multiply-specified\" << std::endl;\n                error_found = true;\n            }\n            else {\n                mallocSpecified = true;\n                gMBehavior = UseMalloc;\n            }\n        }\n        else {\n            cout << \"Error: unrecognized argument: \" << *argv << std::endl;\n            error_found = true;\n            argv++; argc--;\n        }\n    }\n    if(!error_found) {\n        if(newX * newY < newnPolygons) {\n            error_found = true;\n            cout << \"Error: map size should not be smaller than the number of polygons (gNPolygons = \" << newnPolygons << \", map size \" << newX << \"x\" << newY << \")\" << std::endl;\n        }\n    }\n    if(!error_found) {\n        gMapXSize = newX;\n        gMapYSize = newY;\n        gNPolygons = newnPolygons;\n        gMyRandomSeed = newSeed;\n        gGrainSize = (int)newGrainSize;\n    }\n    else {\n        Usage(origArgc, origArgv);\n    }\n    return !error_found;\n}\n\n// create a polygon map with at least gNPolygons polygons.\n// Usually more than gNPolygons polygons will be generated, because the\n// process of growing the polygons results in holes.\nbool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB) {\n    bool error_found = false;\n    int  *validPolys;\n    int  *validSide;\n    int maxSides;\n    RPolygon *newPoly;\n\n    if(xSize <= 0) {\n        cout << \"xSize (\" << xSize << \") should be > 0.\" << std::endl;\n        error_found = true;\n    }\n    if(ySize <= 0) {\n        cout << \"ySize (\" << ySize << \") should be > 0.\" << std::endl;\n        error_found = true;\n    }\n    if(gNPolygons > (xSize * ySize)) {\n        cout << \"gNPolygons (\" << gNPolygons << \") should be less than \" << (xSize * ySize) << std::endl;\n        error_found = true;\n    }\n    if(error_found) return false;\n    // the whole map is [xSize x ySize] squares\n    // the way we create the map is to\n    //    1) pick nPolygon discrete squares on an [xSize x ySize] grid\n    //    2) while there are unused squares on the grid\n    //        3) pick a polygon with a side that has unused squares on a side\n    //        4) expand the polygon by 1 to occupy the unused squares\n    //\n    // Continue until every square on the grid is occupied by a polygon\n    int *tempMap;\n    tempMap = (int *)malloc(xSize * ySize * sizeof(int));\n    for(int i=0;i < xSize; i++) {\n        for(int j=0;j < ySize; j++) {\n            tempMap[i*ySize + j] = 0;\n        }\n    }\n\n    // *newMap = new vector<RPolygon>;\n    *newMap = new Polygon_map_t;\n    (*newMap)->reserve(gNPolygons + 1);  // how much bigger does this need to be on average?\n    (*newMap)->push_back(RPolygon(0,0,xSize-1, ySize-1));\n    for(int i=0; i < gNPolygons; i++) {\n        int nX;\n        int nY;\n        do {    // look for an empty square.\n            nX = NextRan(xSize);\n            nY = NextRan(ySize);\n        } while(tempMap[nX * ySize + nY] != 0);\n        int nR = (maxR * NextRan(1000)) / 999;\n        int nG = (maxG * NextRan(1000)) / 999;\n        int nB = (maxB * NextRan(1000)) / 999;\n        (*newMap)->push_back(RPolygon(nX,nY,nX,nY,nR,nG,nB));\n        tempMap[nX * ySize + nY] = i+1;     // index of this polygon + 1\n    }\n    // now have to grow polygons to fill the space.\n    validPolys = (int *)malloc(4*gNPolygons * sizeof(int));\n    validSide = (int *)malloc(4*gNPolygons * sizeof(int));\n    for(int i=0;i<gNPolygons;i++) {\n        validPolys[4*i] = validPolys[4*i + 1] = validPolys[4*i + 2] = validPolys[4*i + 3] = i + 1;\n        validSide[4*i] = NORTH_SIDE;\n        validSide[4*i+1] = EAST_SIDE;\n        validSide[4*i+2] = SOUTH_SIDE;\n        validSide[4*i+3] = WEST_SIDE;\n    }\n    maxSides = 4*gNPolygons;\n    while(maxSides > 0) {\n        int indx = NextRan(maxSides);\n        int polyIndx = validPolys[indx];\n        int checkSide = validSide[indx];\n        int xlow, xhigh, ylow, yhigh;\n        int xlnew, xhnew, ylnew, yhnew;\n        (**newMap)[polyIndx].get(&xlow,&ylow,&xhigh,&yhigh);\n        xlnew = xlow;\n        xhnew = xhigh;\n        ylnew = ylow; \n        yhnew = yhigh;\n        // can this polygon be expanded along the chosen side?\n        switch(checkSide) {\n        case NORTH_SIDE:\n            // y-1 from xlow to xhigh\n            ylow = yhigh = (ylow - 1);\n            ylnew--;\n            break;\n        case EAST_SIDE:\n            // x+1 from ylow to yhigh\n            xlow = xhigh = (xhigh + 1);\n            xhnew++;\n            break;\n        case SOUTH_SIDE:\n            // y+1 from xlow to xhigh\n            ylow = yhigh = (yhigh+1);\n            yhnew++;\n            break;\n        case WEST_SIDE:\n            // x-1 from ylow to yhigh\n            xlow = xhigh = (xlow - 1);\n            xlnew--;\n            break;\n        }\n        bool okay_to_extend = !(((xlow < 0) || (xlow >= xSize)) || ((ylow < 0) || (ylow >= ySize)));\n        for(int ii = xlow; (ii <= xhigh) && okay_to_extend; ii++) {\n            for(int jj=ylow; (jj <= yhigh) && okay_to_extend; jj++) {\n                okay_to_extend = tempMap[ii*ySize + jj] == 0;\n            }\n        }\n        if(okay_to_extend) {\n            (**newMap)[polyIndx].set(xlnew,ylnew,xhnew,yhnew);\n            for(int ii = xlow; ii <= xhigh; ii++) {\n                for(int jj=ylow; jj <= yhigh && okay_to_extend; jj++) {\n                    tempMap[ii*ySize + jj] = polyIndx;\n                }\n            }\n        }\n        else {\n            // once we cannot expand along a side, we will never be able to; remove from the list.\n            for(int i=indx + 1; i < maxSides; i++) {\n                validPolys[i-1] = validPolys[i];\n                validSide[i-1] = validSide[i];\n            }\n            maxSides--;\n        }\n    }\n\n    // Once no polygons can be grown, look for unused squares, and fill them with polygons.\n    for(int j=0;j<ySize;j++) {\n        for(int i=0;i<xSize;i++) {\n            if(tempMap[i*ySize+j] == 0) {\n                // try to grow in the x direction, then the y direction\n                int ilen = i;\n                int jlen = j;\n                while(ilen < (xSize - 1) && tempMap[(ilen+1)*ySize + jlen] == 0) {\n                    ilen++;\n                }\n                bool yok = true;\n                while(yok && jlen < (ySize - 1)) {\n                    for(int ii = i; ii <= ilen && yok; ii++) {\n                        yok = (tempMap[ii*ySize + jlen + 1] == 0);\n                    }\n                    if(yok) {\n                        jlen++;\n                    }\n                }\n\n                // create new polygon and push it on our list.\n                int nR = (maxR * NextRan(1000)) / 999;\n                int nG = (maxG * NextRan(1000)) / 999;\n                int nB = (maxB * NextRan(1000)) / 999;\n                (*newMap)->push_back(RPolygon(i,j,ilen,jlen,nR,nG,nB));\n                gNPolygons++;\n                for(int ii=i; ii<=ilen;ii++) {\n                    for(int jj=j;jj<=jlen;jj++) {\n                        tempMap[ii*ySize + jj] = gNPolygons;\n                    }\n                }\n            }\n        }\n    }\n\n#if _DEBUG\n    if(!gIsGraphicalVersion) {\n        cout << std::endl << \"Final Map:\" << std::endl;\n        for(int j=0; j < ySize; j++ ) {\n            cout << \"Row \" << setw(2) << j << \":\";\n            for(int i=0;i<xSize;i++) {\n                int it = tempMap[i*ySize + j];\n                if(it<10) {\n                    cout << setw(2) << it;\n                }\n                else {\n                    char ct = (int)'a' + it - 10;\n                    cout << \" \" << ct;\n                }\n            }\n            cout << std::endl;\n        }\n    }\n#endif  // _DEBUG\n    free(tempMap);\n    free(validPolys);\n    free(validSide);\n    return true;\n}\n\nvoid CheckPolygonMap(Polygon_map_t *checkMap) {\n#define indx(i,j) (i*gMapYSize + j)\n#define rangeCheck(str,n,limit) if(((n)<0)||((n)>=limit)) {cout << \"checkMap error: \" << str << \" out of range (\" << n << \")\" << std::endl;anError=true;}\n#define xRangeCheck(str,n) rangeCheck(str,n,gMapXSize)\n#define yRangeCheck(str,n) rangeCheck(str,n,gMapYSize)\n    // The first polygon is the whole map.\n    bool anError = false;\n    int *cArray;\n    if(checkMap->size() <= 0) {\n        cout << \"checkMap error: no polygons in map\" << std::endl;\n        return;\n    }\n    // mapXhigh and mapYhigh are inclusive, that is, if the map is 5x5, those values would be 4.\n    int mapXhigh, mapYhigh, mapLowX, mapLowY;\n    int gMapXSize, gMapYSize;\n    (*checkMap)[0].get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh);\n    if((mapLowX !=0) || (mapLowY != 0)) {\n        cout << \"checkMap error: map origin not (0,0) (X=\" << mapLowX << \", Y=\" << mapLowY << \")\" << std::endl;\n        anError = true;\n    }\n    if((mapXhigh < 0) || (mapYhigh < 0)) {\n        cout << \"checkMap error: no area in map (X=\" << mapXhigh << \", Y=\" << mapYhigh << \")\" << std::endl;\n        anError = true;\n    }\n    if(anError) return;\n    // bounds for array.\n    gMapXSize = mapXhigh + 1;\n    gMapYSize = mapYhigh + 1;\n    cArray = (int *)malloc(sizeof(int)*(gMapXSize*gMapYSize));\n\n    for(int i=0; i<gMapXSize; i++) {\n        for(int j=0; j< gMapYSize; j++) {\n            cArray[indx(i,j)] = 0;\n        }\n    }\n\n    int xlow, xhigh, ylow, yhigh;\n    for(int p=1; p < int(checkMap->size()) && !anError; p++) {\n        (*checkMap)[p].get(&xlow, &ylow, &xhigh, &yhigh);\n        xRangeCheck(\"xlow\", xlow);\n        yRangeCheck(\"ylow\", ylow);\n        xRangeCheck(\"xhigh\", xhigh);\n        yRangeCheck(\"yhigh\", yhigh);\n        if(xlow>xhigh) {\n            cout << \"checkMap error: xlow > xhigh (\" << xlow << \",\" << xhigh << \")\" << std::endl;\n            anError = true;\n        }\n        if(ylow>yhigh) {\n            cout << \"checkMap error: ylow > yhigh (\" << ylow << \",\" << yhigh << \")\" << std::endl;\n            anError = true;\n        }\n        for(int ii = xlow; ii <= xhigh; ii++) {\n            for(int jj = ylow; jj <= yhigh; jj++) {\n                if(cArray[indx(ii,jj)] != 0) {\n                    cout << \"checkMap error: polygons \" << cArray[indx(ii,jj)] << \" and \" << p << \" intersect\" << std::endl;\n                    anError = true;\n                }\n                cArray[indx(ii,jj)] = p;\n            }\n        }\n    }\n    for(int ii=0; ii < gMapXSize; ii++) {\n        for(int jj=0; jj < gMapYSize; jj++) {\n            if(cArray[indx(ii,jj)] == 0) {\n                cout << \"checkMap error: block(\" << ii << \", \" << jj << \") not in any polygon\" << std::endl;\n                anError = true;\n            }\n        }\n    }\n    free(cArray);\n}\n\nbool CompOnePolygon(RPolygon &p1, RPolygon &p2) {\n    int xl1, xh1, yl1, yh1;\n    int xl2, xh2, yl2, yh2;\n    p1.get(&xl1, &yl1, &xh1, &yh1);\n    p2.get(&xl2, &yl2, &xh2, &yh2);\n    if(yl1>yl2) return true;\n    if(yl1<yl2) return false;\n    return (xl1 > xl2);\n}\n\nbool PolygonsEqual(RPolygon *p1, RPolygon *p2) {\n    int xl1, xh1, yl1, yh1;\n    int xl2, xh2, yl2, yh2;\n    p1->get(&xl1, &yl1, &xh1, &yh1);\n    p2->get(&xl2, &yl2, &xh2, &yh2);\n    return ((xl1 == xl2) && (yl1==yl2) && (xh1 == xh2) && (yh1 == yh2));\n}\n\nbool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2) {\n    // create two new polygon maps, copy the pointers from the original to these.\n    // we have to skip the first polygon, which is the size of the whole map\n    Polygon_map_t *t1, *t2;\n    bool is_ok = true;\n    t1 = new Polygon_map_t;\n    t1->reserve(map1->size());\n    for(unsigned int i=1;i<map1->size(); i++) {\n        t1->push_back(map1->at(i));\n    }\n    t2 = new Polygon_map_t;\n    t2->reserve(map2->size());\n    for(unsigned int i=1;i<map2->size();i++) {\n        t2->push_back(map2->at(i));\n    }\n    // sort the two created maps by (xlow, ylow)\n    sort(t1->begin(), t1->end());\n    sort(t2->begin(), t2->end());\n    // compare each element of both maps.\n    if(t1->size() != t2->size()) {\n        cout << \"Error: maps not the same size ( \" << int(t1->size()) << \" vs \" << int(t2->size()) << \").\" << std::endl;\n    }\n    int maxSize = (int)((t1->size() < t2->size()) ? t1->size() : t2->size());\n    for(int i=0; i < maxSize; i++) {\n        if(!PolygonsEqual(&((*t1)[i]), &((*t2)[i]))) {\n            cout << \"Error: polygons unequal (\" << (*t1)[i] << \" vs \" << (*t2)[i] << std::endl;\n            is_ok = false;\n        }\n    }\n    delete t1;\n    delete t2;\n    return is_ok;\n}\n\nvoid SetRandomSeed(int newSeed) {\n    srand((unsigned)newSeed);\n}\n\nint NextRan(int n) {\n    // assert(n > 1);\n    // if we are given 1, we will just return 0\n    //assert(n < RAND_MAX);\n    int rrand = rand() << 15 | rand();\n    if(rrand < 0) rrand = -rrand;\n    return rrand % n;\n}\n\nstd::ostream& operator<<(std::ostream& s, const RPolygon &p) {\n    int xl, yl, xh, yh;\n    p.get(&xl, &yl, &xh, &yh);\n    return s << \"[(\" << xl << \",\" << yl << \")-(\" << xh << \",\" << yh << \")] \";\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/polymain.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"pover_global.h\"  // for declaration of DEFINE and INIT\n\nDEFINE Polygon_map_t *gPolymap1 INIT(0);\nDEFINE Polygon_map_t *gPolymap2 INIT(0);\nDEFINE Polygon_map_t *gResultMap INIT(0);\n\nextern void Usage(int argc, char **argv);\n\nextern bool ParseCmdLine(int argc, char **argv );\n\nextern bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB);\n\nextern bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh);\n\nextern void CheckPolygonMap(Polygon_map_t *checkMap);\n\nextern bool CompOnePolygon(RPolygon *p1, RPolygon *p2);\n\nextern bool PolygonsEqual(RPolygon *p1, RPolygon *p2);\n\nextern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);\n\nextern void SetRandomSeed(int newSeed);\n\nextern int NextRan(int n);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/polyover.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Polygon overlay\n//\n#include <iostream>\n#include <algorithm>\n#include <string.h>\n#include <cstdlib>\n#include <assert.h>\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"polyover.h\"\n#include \"polymain.h\"\n#include \"pover_video.h\"\n\nusing namespace std;\n\n/*!\n* @brief intersects a polygon with a map, adding any results to output map\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polygon to be intersected\n* @param[in] map intersected against\n* @param[in] lock to use when adding output polygons to result map\n*\n*/\nvoid OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t *map2, tbb::spin_mutex *rMutex) {\n    int r1, g1, b1, r2, g2, b2;\n    int myr=0;\n    int myg=0;\n    int myb=0;\n    int p1Area = myPoly->area();\n    for(unsigned int j=1; (j < map2->size()) && (p1Area > 0); j++) {\n        RPolygon *p2 = &((*map2)[j]);\n        RPolygon *pnew;\n        int newxMin, newxMax, newyMin, newyMax;\n        myPoly->getColor(&r1, &g1, &b1);\n        if(PolygonsOverlap(myPoly, p2, newxMin, newyMin, newxMax, newyMax)) {\n            p2->getColor(&r2, &g2, &b2);\n            myr = r1 + r2;\n            myg = g1 + g2;\n            myb = b1 + b2;\n            p1Area -= (newxMax-newxMin+1)*(newyMax - newyMin + 1);\n            if(rMutex) {\n                tbb::spin_mutex::scoped_lock lock(*rMutex);\n                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));\n            }\n            else {\n                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));\n            }\n        }\n    }\n}\n\n/*!\n* @brief Serial version of polygon overlay\n* @param[out] output map\n* @param[in]  first map (map that individual polygons are taken from)\n* @param[in]  second map (map passed to OverlayOnePolygonWithMap)\n*/\nvoid SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2) {\n    cout << \"SerialOverlayMaps called\" << std::endl;\n    *resultMap = new Polygon_map_t;\n\n    RPolygon *p0 = &((*map1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    (*resultMap)->reserve(mapxSize*mapySize); // can't be any bigger than this\n    // push the map size as the first polygon,\n    (*resultMap)->push_back(RPolygon(0,0,mapxSize, mapySize));\n    for(unsigned int i=1; i < map1->size(); i++) {\n        RPolygon *p1 = &((*map1)[i]);\n        OverlayOnePolygonWithMap(*resultMap, p1, map2, NULL);\n    }\n}\n\n/*!\n* @class ApplyOverlay\n* @brief Simple version of parallel overlay (make parallel on polygons in map1)\n*/\nclass ApplyOverlay {\n    Polygon_map_t *m_map1, *m_map2, *m_resultMap;\n    tbb::spin_mutex *m_rMutex;\npublic:\n    /*!\n    * @brief functor to apply\n    * @param[in] r range of polygons to intersect from map1\n    */\n    void operator()( const tbb::blocked_range<int> & r) const {\n        PRINT_DEBUG(\"From \" << r.begin() << \" to \" << r.end());\n        for(int i=r.begin(); i != r.end(); i++) {\n            RPolygon *myPoly = &((*m_map1)[i]);\n            OverlayOnePolygonWithMap(m_resultMap, myPoly, m_map2, m_rMutex);\n        }\n    }\n    ApplyOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}\n};\n\n/*!\n* @brief apply the parallel algorithm\n* @param[out] result_map generated map\n* @param[in] polymap1 first map to be applied (algorithm is parallel on this map)\n* @param[in] polymap2 second map.\n*/\nvoid NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2) {\n// -----------------------------------\n    bool automatic_threadcount = false;\n\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    result_map = new Polygon_map_t;\n\n    RPolygon *p0 = &(polymap1[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    result_map->reserve(mapxSize*mapySize); // can't be any bigger than this\n    // push the map size as the first polygon,\n    tbb::spin_mutex *resultMutex = new tbb::spin_mutex();\n    int grain_size = gGrainSize;\n\n    for(int nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // put size polygon in result map\n        result_map->push_back(RPolygon(0,0,mapxSize, mapySize));\n\n        tbb::tick_count t0 = tbb::tick_count::now();\n        tbb::parallel_for (tbb::blocked_range<int>(1,(int)(polymap1.size()),grain_size), ApplyOverlay(result_map, &polymap1, &polymap2, resultMutex));\n        tbb::tick_count t1 = tbb::tick_count::now();\n\n        double naiveParallelTime = (t1-t0).seconds() * 1000;\n        cout << \"Naive parallel with spin lock and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << naiveParallelTime << \" msec : speedup over serial \" << (gSerialTime / naiveParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << naiveParallelTime;\n        }\n#if _DEBUG\n        CheckPolygonMap(result_map);\n        ComparePolygonMaps(result_map, gResultMap);\n#endif\n        result_map->clear();\n    }\n    delete resultMutex;\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n// -----------------------------------\n}\n\ntemplate<typename T>\nvoid split_at( Flagged_map_t& in_map, Flagged_map_t &left_out, Flagged_map_t &right_out, const T median) {\n    left_out.reserve(in_map.size());\n    right_out.reserve(in_map.size());\n    for(Flagged_map_t::iterator i = in_map.begin(); i != in_map.end(); ++i ) {\n        RPolygon *p = i->p();\n        if(p->xmax() < median) {\n            // in left map\n            left_out.push_back(*i);\n        }\n        else if(p->xmin() >= median) {\n            right_out.push_back(*i);\n            // in right map\n        }\n        else {\n            // in both maps.\n            left_out.push_back(*i);\n            right_out.push_back(RPolygon_flagged(p, true));\n        }\n    }\n}\n\n// range that splits the maps as well as the range.  the flagged_map_t are\n// vectors of pointers, and each range owns its maps (has to free them on destruction.)\ntemplate <typename T>\nclass blocked_range_with_maps {\n    \n    typedef blocked_range<T> my_range_type;\n\nprivate:\n\n    my_range_type my_range;\n    Flagged_map_t my_map1;\n    Flagged_map_t my_map2;\n\npublic:\n\n    blocked_range_with_maps(\n            T begin, T end, typename my_range_type::size_type my_grainsize,\n            Polygon_map_t *p1, Polygon_map_t *p2\n            )\n        : my_range(begin, end, my_grainsize)\n    {\n        my_map1.reserve(p1->size());\n        my_map2.reserve(p2->size());\n        for(int i=1; i < p1->size(); ++i) {\n            my_map1.push_back(RPolygon_flagged(&((*p1)[i]), false));\n        }\n        for(int i=1; i < p2->size(); ++i) {\n            my_map2.push_back(RPolygon_flagged(&(p2->at(i)), false));\n        }\n    }\n\n    // copy-constructor required for deep copy of flagged maps.  One copy is done at the start of the\n    // parallel for.\n    blocked_range_with_maps(const blocked_range_with_maps& other): my_range(other.my_range), my_map1(other.my_map1), my_map2(other.my_map2) { }\n    bool empty() const { return my_range.empty(); }\n    bool is_divisible() const { return my_range.is_divisible(); }\n\n#if _DEBUG\n    void check_my_map() {\n        assert(my_range.begin() <= my_range.end());\n        for(Flagged_map_t::iterator ci = my_map1.begin(); ci != my_map1.end(); ++ci) {\n            RPolygon *rp = ci->p();\n            assert(rp->xmax() >= my_range.begin());\n            assert(rp->xmin() < my_range.end());\n        }\n        for(Flagged_map_t::iterator ci = my_map2.begin(); ci != my_map2.end(); ++ci) {\n            RPolygon *rp = ci->p();\n            assert(rp->xmax() >= my_range.begin());\n            assert(rp->xmin() < my_range.end());\n        }\n    }\n\n    void dump_map( Flagged_map_t& mapx) {\n        cout << \" ** MAP **\\n\";\n        for( Flagged_map_t::iterator ci = mapx.begin(); ci != mapx.end(); ++ci) {\n            cout << *(ci->p());\n            if(ci->isDuplicate()) {\n                cout << \" -- is_duplicate\";\n            }\n            cout << \"\\n\";\n        }\n        cout << \"\\n\";\n    }\n#endif\n\n    blocked_range_with_maps(blocked_range_with_maps& lhs_r, split ) : my_range(my_range_type(lhs_r.my_range, split())) {\n        // lhs_r.my_range makes my_range from [median, high) and rhs_r.my_range from [low, median)\n        Flagged_map_t original_map1 = lhs_r.my_map1;\n        Flagged_map_t original_map2 = lhs_r.my_map2;\n        lhs_r.my_map1.clear();\n        lhs_r.my_map2.clear();\n        split_at(original_map1, lhs_r.my_map1, my_map1, my_range.begin());\n        split_at(original_map2, lhs_r.my_map2, my_map2, my_range.begin());\n#if _DEBUG\n        this->check_my_map();\n        lhs_r.check_my_map();\n#endif\n    }\n\n    const my_range_type& range() const { return my_range; }\n    Flagged_map_t& map1() { return my_map1; }\n    Flagged_map_t& map2() { return my_map2; }\n};\n\n/*!\n* @class ApplySplitOverlay\n* @brief parallel by columnar strip\n*/\nclass ApplySplitOverlay {\n    Polygon_map_t *m_map1, *m_map2, *m_resultMap;\n    tbb::spin_mutex *m_rMutex;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(/*const*/ blocked_range_with_maps<int> & r) const {\n#ifdef _DEBUG\n        // if we are debugging, serialize the method.  That way we can\n        // see what is happening in each strip without the interleaving\n        // confusing things.\n        tbb::spin_mutex::scoped_lock lock(*m_rMutex);\n        cout << unitbuf << \"From \" << r.range().begin() << \" to \" << r.range().end()-1 << std::endl;\n#endif\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n#ifdef _DEBUG\n#else\n                        tbb::spin_mutex::scoped_lock lock(*m_rMutex);\n#endif\n                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    tbb::spin_mutex *resultMutex;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n    resultMutex = new tbb::spin_mutex();\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with spin lock and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        CheckPolygonMap(*result_map);\n        ComparePolygonMaps(*result_map, gResultMap);\n#endif\n        (*result_map)->clear();\n\n    }\n    delete resultMutex;\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n}\n\nclass ApplySplitOverlayCV {\n    Polygon_map_t *m_map1, *m_map2;\n    concurrent_Polygon_map_t *m_resultMap;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(blocked_range_with_maps<int> & r) const {\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlayCV(concurrent_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise, accumulating into a concurrent_vector\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new concurrent_Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayCV((*result_map), polymap1, polymap2));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with concurrent_vector and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        {\n            \n            Polygon_map_t s_result_map;\n            for(concurrent_Polygon_map_t::const_iterator ci = (*result_map)->begin(); ci != (*result_map)->end(); ++ci) {\n                s_result_map.push_back(*ci);\n            }\n            CheckPolygonMap(&s_result_map);\n            ComparePolygonMaps(&s_result_map, gResultMap);\n        }\n#endif\n        (*result_map)->clear();\n\n    }\n\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n\n}\n\n// ------------------------------------------------------\n\nclass ApplySplitOverlayETS {\n    Polygon_map_t *m_map1, *m_map2;\n    ETS_Polygon_map_t *m_resultMap;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(blocked_range_with_maps<int> & r) const {\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n                        (*m_resultMap).local().push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlayETS(ETS_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise, accumulating into an ets variable\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new ETS_Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        // This polygon needs to be first, so we can push it at the start of a combine.\n        // (*result_map)->local.push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayETS((*result_map), polymap1, polymap2));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with ETS and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        {\n            \n            Polygon_map_t s_result_map;\n            flattened2d<ETS_Polygon_map_t> psv = flatten2d(**result_map);\n            s_result_map.push_back(RPolygon(0,0,mapxSize, mapySize));\n            for(flattened2d<ETS_Polygon_map_t>::const_iterator ci = psv.begin(); ci != psv.end(); ++ci) {\n                s_result_map.push_back(*ci);\n            }\n            CheckPolygonMap(&s_result_map);\n            ComparePolygonMaps(&s_result_map, gResultMap);\n        }\n#endif\n        (*result_map)->clear();\n\n    }\n\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/polyover.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*!\n * polyover.h : extern declarations for polyover.cpp\n*/\n#include \"rpolygon.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n\nextern void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t  *map2, tbb::spin_mutex *rMutex);\n\nextern void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2);\n\n// extern void NaiveParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2);\n\nextern void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\n\nextern void CheckPolygonMap(Polygon_map_t *checkMap);\nextern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/pover_global.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// pover_global.h\n//\n#ifndef _POVER_GLOBAL_H_\n#define _POVER_GLOBAL_H_\n\n#ifdef _MAIN_C_\n#define DEFINE // nothing\n#define STATIC static\n#define INIT(n) = n\n#else // not in main file\n#define DEFINE extern\n#define STATIC  // nothing\n#define INIT(n) // nothing\n#endif  // _MAIN_C_\n\n#include <iostream>\n#include <fstream>\n\n#ifdef _WINDOWS\n#include <windows.h>\n#endif\n\n// this Polygon class only supports rectangles\nDEFINE int gDrawXOffset INIT(0);   // used for drawing polygons\nDEFINE int gDrawYOffset INIT(0);\nDEFINE int gPolyXBoxSize INIT(0);  // number of pixels orresponding to one \"square\" (x)\nDEFINE int gPolyYBoxSize INIT(0);  // number of pixels orresponding to one \"square\" (y)\nDEFINE bool gDoDraw INIT(false);       // render the boxes\n\n#define THREADS_UNSET 0\nDEFINE int gThreadsLow INIT(THREADS_UNSET);\nDEFINE int gThreadsHigh INIT(THREADS_UNSET);\n\nDEFINE std::ofstream gCsvFile;\nDEFINE double gSerialTime;\nDEFINE char *gCsvFilename INIT(NULL);\n\n#define BORDER_SIZE 10  // number of pixels between maps\n\n// The map size and the number of polygons depends on the version we are compiling.\n// If DEBUG then it is small; else it is large.\n\n#ifdef _DEBUG\nDEFINE int gNPolygons INIT(30);  // default number of polygons in map\nDEFINE int gMapXSize INIT(30);\nDEFINE int gMapYSize INIT(30);\nDEFINE int gGrainSize INIT(5);\n#else\nDEFINE int gNPolygons INIT(50000);    // default number of polygons in map\nDEFINE int gMapXSize INIT(1000);\nDEFINE int gMapYSize INIT(1000);\nDEFINE int gGrainSize INIT(20);\n#endif\nDEFINE int gMyRandomSeed INIT(2453185);\n\nDEFINE bool gIsGraphicalVersion INIT(false);\n\ntypedef enum {\n    NORTH_SIDE,\n    EAST_SIDE,\n    SOUTH_SIDE,\n    WEST_SIDE\n} allSides;\n\n#if _DEBUG\n#define PRINT_DEBUG(x) (cout << x << std::endl)\n#else\n#define PRINT_DEBUG(x)\n#endif\n\n\n#endif // _POVER_GLOBAL_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/pover_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Support for GUI display for Polygon overlay demo\n\n#define VIDEO_WINMAIN_ARGS\n#include <iostream>\n#include \"polyover.h\"\n#include \"polymain.h\"\n#include \"pover_video.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#ifndef _WIN32\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\n#include <windows.h>\n\nvoid rt_sleep(int msec) {\n    Sleep(msec);\n}\n\n#endif  /*  _WIN32  */\n\nusing namespace std;\n\nbool g_next_frame() {\n    if(++n_next_frame_calls >= frame_skips) { // the data race here is benign\n        n_next_frame_calls = 0; \n        return gVideo->next_frame();\n    } \n    return gVideo->running;\n}\n\nbool g_last_frame() {\n    if(n_next_frame_calls) return gVideo->next_frame(); \n    return gVideo->running;\n}\n\nbool initializeVideo(int argc, char **argv) {\n    //pover_video *l_video = new pover_video();\n    //gVideo = l_video;\n    gVideo->init_console();  // don't check return code.\n    gVideo->title = g_windowTitle;\n    g_useGraphics = gVideo->init_window(g_xwinsize, g_ywinsize);\n    return true;\n}\n\nvoid pover_video::on_process() {\n    tbb::tick_count t0, t1;\n    double naiveParallelTime, domainSplitParallelTime;\n    // create map1  These could be done in parallel, if the pseudorandom number generator were re-seeded.\n    GenerateMap(&gPolymap1, gMapXSize, gMapYSize, gNPolygons, /*red*/255, /*green*/0, /*blue*/127);\n    // create map2\n    GenerateMap(&gPolymap2, gMapXSize, gMapYSize, gNPolygons, /*red*/0, /*green*/255, /*blue*/127);\n        //\n        // Draw source maps\n    gDrawXOffset = map1XLoc;\n    gDrawYOffset = map1YLoc;\n        for(int i=0; i < int(gPolymap1->size()); i++) {\n            (*gPolymap1)[i].drawPoly();\n        }\n    gDrawXOffset = map2XLoc;\n    gDrawYOffset = map2YLoc;\n        for(int i=0; i < int(gPolymap2->size()) ;i++) {\n            (*gPolymap2)[i].drawPoly();\n        }\n        gDoDraw = true;\n\n    // run serial map generation\n    gDrawXOffset = maprXLoc;\n    gDrawYOffset = maprYLoc;\n    {\n        RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n        delete xp;\n        t0 = tbb::tick_count::now();\n        SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2);\n        t1 = tbb::tick_count::now();\n        cout << \"Serial overlay took \" << (t1-t0).seconds()*1000 << \" msec\" << std::endl;\n        gSerialTime = (t1-t0).seconds()*1000;\n#if _DEBUG\n        CheckPolygonMap(gResultMap);\n        // keep the map for comparison purposes.\n#else\n        delete gResultMap;\n#endif\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Serial Time,\" << gSerialTime << std::endl;\n            gCsvFile << \"Threads,\";\n            if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {\n                gCsvFile << \"Threads,Automatic\";\n            }\n            else {\n                for(int i=gThreadsLow; i <= gThreadsHigh; i++) {\n                    gCsvFile << i;\n                    if(i < gThreadsHigh) gCsvFile << \",\";\n                }\n            }\n            gCsvFile << std::endl;\n        }\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // run naive parallel map generation\n    {\n        Polygon_map_t *resultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Naive Time\";\n        }\n        NaiveParallelOverlay(resultMap, *gPolymap1, *gPolymap2);\n        delete resultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // run split map generation\n    {\n        Polygon_map_t *resultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split Time\";\n        }\n        SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2);\n        delete resultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // split, accumulating into concurrent vector\n    {\n        concurrent_Polygon_map_t *cresultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split CV time\";\n        }\n        SplitParallelOverlayCV(&cresultMap, gPolymap1, gPolymap2);\n        delete cresultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // split, accumulating into ETS\n    {\n        ETS_Polygon_map_t *cresultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split ETS time\";\n        }\n        SplitParallelOverlayETS(&cresultMap, gPolymap1, gPolymap2);\n        delete cresultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    if(gIsGraphicalVersion) rt_sleep(8000);\n    delete gPolymap1;\n    delete gPolymap2;\n#if _DEBUG\n    delete gResultMap;\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/pover_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// support for GUI for polygon overlay demo\n//\n#ifndef _POVER_VIDEO_H_\n#define _POVER_VIDEO_H_\n#include \"../../common/gui/video.h\"\n\n#include \"pover_global.h\"  // for declaration of DEFINE and INIT\n\nDEFINE class video *gVideo INIT(0);\n\nDEFINE int n_next_frame_calls INIT(0);\nDEFINE int frame_skips INIT(10);\nextern bool g_next_frame();\nextern bool g_last_frame();\n\nclass pover_video: public video {\n    void on_process();\npublic:\n#ifdef _WINDOWS\n    bool graphic_display(){return video::win_hInstance != (HINSTANCE)NULL;}\n#else\n    bool graphic_display() { return true;} // fix this for Linux\n#endif\n    //void on_key(int key);\n};\n\nDEFINE int g_xwinsize INIT(1024);\nDEFINE int g_ywinsize INIT(768);\n\nDEFINE int map1XLoc INIT(10);\nDEFINE int map1YLoc INIT(10);\nDEFINE int map2XLoc INIT(270);\nDEFINE int map2YLoc INIT(10);\nDEFINE int maprXLoc INIT(530);\nDEFINE int maprYLoc INIT(10);\n\nDEFINE const char *g_windowTitle INIT(\"Polygon Overlay\");\nDEFINE bool g_useGraphics INIT(true);\n\nextern bool initializeVideo(int argc, char **argv);\n\nextern void rt_sleep(int msec);\n\n#endif  // _POVER_VIDEO_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Polygon_overlay sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Polygon_overlay sample</h1>\n\t</div>\n\n\t<p>\n\t\tPolygon Overlay example that demonstrates the use of parallel_for.\n\t<br><br>\n\t\tThis example is a simple implementation of polygon overlay, as described in \n\t\t<a href=\"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.9538\">\n\t\t\t<i>Parallelizing the Polygon Overlay Problem Using Orca</i>, by H.F. Langendoen</a>.\n\t<br><br>\n\t\tThe solution was implemented in three forms:\n\t\t<ul>\n\t\t\t<li>The naive serial solution.\n\t\t\t<li>The naive parallel solution, by splitting list of polygons from one map and intersecting \n\t\t\teach sub-list against the entire list of polygons from the second map.\n\t\t\t<li>A parallel solution where each map is split into submaps, with each resulting submap being\n\t\t\tintersected against the corresponding submap from the other map.  This solution requires some\n\t\t\tredundancy (some polygons are members of more than one submap).  To prevent multiple copies\n\t\t\tof a polygon from being placed in the solution map, if both polygons are duplicated (that is,\n\t\t\tif they both appear in more than one map), they are intersected but the result is not placed\n\t\t\tin the solution map.\n\t\t</ul>\n\t\tThe only optimization in each solution is that the area of the generated sub-polygons are subtracted from\n\t\tthe original area of one of the source polygons.  When the remaining area is zero, the intersection process\n\t\tis halted.\n\t<br><br>\n\t\t<i>A word about the speedup of the submap case.</i> One may get superlinear speedup in this case (for instance a \n\t\tlaptop with Intel&reg; Core(TM) Duo processor got a speedup of about 20 percent over serial.)  This results from two effects:\n\t\t<ul>\n\t\t\t<li>the number of threads used, and\n\t\t\t<li>the fact that for each submap, the number of polygons is smaller than that for the other two cases.\n\t\t</ul>\n\t\tIf there are, say, 400 polygons in each map, then on average the number of intersections calculated is \n\t\tapproximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.)  \n\t\tIf the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000.  So even\n\t\tcomparing the two sets of submaps serially should result in a speedup somewhere around 2.  This number \n\t\tis affected by the number of redundant polygons being compared; this effect would eventually swamp the gain\n\t\tfrom comparing smaller numbers of polygons per submap.  And remember the submaps are created by intersecting each\n\t\tmap with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400)\n\t\tin the case above, where N is the number of submaps generated, that can be done in parallel.\n\t<br><br>\n\t\tRunning the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap \n\t\tcase for a 2-processor system looks like\n\t<br><br>\n\t\t<img src=\"speedup.gif\" alt=\"Table of speedup for the algorithm\">\n\t<br><br>\n\t\tOne further optimization would be to sort one map, say <b>map1</b>, by maxY, and sort the other map (<b>map2</b>) \n\t\tby minY.  For <b>p1</b> in <b>map1</b>, start testing for intersection at the first <b>p2</b> in <b>map2</b> \n\t\tthat intersected the last polygon tested in <b>map1</b>.  This would speed up the intersection process greatly, \n\t\tbut the optimization would apply to all the methods, and the sort would have to be accounted for in the timing.\n\t<br><br>\n\t\tThe source maps are generated pseudo-randomly in the manner described in the paper above.  That is, if\n\t\twe need N polygons, then N \"boxes\" are chosen at random, then one-at-a-time the areas are expanded in\n\t\tone of fours directions until the area hits an adjacent polygon.  When this process is finished, the\n\t\tresulting map is inspected and any remaining unoccupied \"boxes\" are made into additional polygons, as\n\t\tlarge as possible in each case.  So the actual number of polygons in each map will in general be larger\n\t\tthan the number of polygons requested (sometimes by 10% or more.)\n\t<br><br>\n\t\tOne limitation of the program is that if the number of polygons in the source map is greater than the number of\n\t\t\"boxes\" (pixels in the GUI case), the maps cannot be generated.\n\t</p>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"polyover.cpp\">polyover.cpp</a>\n\t\t\t\t<dd>Source code for main program.\n\t\t\t\t<dt><a href=\"polyover.h\">polyover.h</a>\n\t\t\t\t<dd>Global variables, classes and enums.\n\t\t\t\t<dt><a href=\"pover_video.cpp\">pover_video.cpp</a>\n\t\t\t\t<dd>Source code for the GUI interface.\n\t\t\t\t<dt><a href=\"pover_video.h\">pover_video.h</a>\n\t\t\t\t<dd>Defines for the GUI version.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tGeneral build directions can be found <a href=\"../../index.html\">here</a>.\n\t\t\t<br><br>\n\t\t\t\tFor the various UI options, see the <a href=\"../../common/index.html\">common GUI code</a> build instructions.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tBuilding via the above make commands, or via Microsoft* Visual Studio* projects on Windows* systems, produces executable files\n\t\t\t\tnamed pover.exe.  To run these executables directly, use one or more of the following commands:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>pover.exe</tt>\n\t\t\t\t<dd>Run this version (release or debug).\n\t\t\t\t<dt><tt>pover.exe n:m</tt>\n\t\t\t\t<dd>Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version with the GUI turned off\n\t\t\t\t\t(e.g., <tt>make UI=con debug</tt>; see also the build directions above).\n\t\t\t\t\t<br>Run it with a small dataset, e.g., <tt>pover.exe&nbsp;--polys&nbsp;10&nbsp;--size&nbsp;5x5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display should yield reasonable performance in most cases, <i>running with no GUI\n\t\t\t\tdisplay is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel, Intel Core and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/rpolygon.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// rpolygon.h\n//\n#ifndef _RPOLYGON_H_\n#define _RPOLYGON_H_\n#include <vector>\n#include <iostream>\n#include \"pover_video.h\"\n\n#include \"tbb/scalable_allocator.h\"\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\nusing namespace std;\n\nusing namespace tbb;\n\nclass RPolygon;\ntypedef scalable_allocator<RPolygon> RPolygon_allocator;\nDEFINE RPolygon_allocator rAlloc;\n\nenum MallocBehavior {\n    UseMalloc,\n    UseScalableAllocator\n};\n\nDEFINE MallocBehavior gMBehavior INIT(UseScalableAllocator);\n\nclass RPolygon {\npublic:\n    RPolygon() {m_XMin = m_YMin = m_XMax = m_YMax = 0;\n        m_r = m_g = m_b = 0;\n    }\n    RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) : m_XMin(xMin), m_YMin(yMin), m_XMax(xMax), m_YMax(yMax) {\n        if( r >= 0) {\n            m_r=(colorcomp_t)r; m_g=(colorcomp_t)g; m_b=(colorcomp_t)b;\n                        if(gDoDraw) drawPoly();\n        }\n    }\n\n    void set_nodraw(int xMin, int yMin, int xMax, int yMax) {m_XMin=xMin; m_YMin=yMin; m_XMax=xMax; m_YMax=yMax;}\n\n    RPolygon &intersect(RPolygon &otherPoly);\n    void set(int xMin, int yMin, int xMax, int yMax) {\n         set_nodraw(xMin,yMin,xMax,yMax);\n         if(gDoDraw) {\n            drawPoly();\n         }\n    }\n    void get(int *xMin, int *yMin, int *xMax, int *yMax) const {*xMin=m_XMin;*yMin=m_YMin;*xMax=m_XMax;*yMax=m_YMax;}\n    int xmax() const { return m_XMax; }\n    int xmin() const { return m_XMin; }\n    int ymax() const { return m_YMax; }\n    int ymin() const { return m_YMin; }\n    void setColor(colorcomp_t newr, colorcomp_t newg, colorcomp_t newb) {m_r = newr; m_g=newg; m_b=newb;}\n    void getColor(int *myr, int *myg, int *myb) {*myr=m_r; *myg=m_g; *myb=m_b;}\n    color_t myColor() {return gVideo->get_color(m_r, m_g, m_b);}\n    void drawPoly() {\n        if(gVideo->running) {\n            if(g_next_frame()) {    // Shouldn't call next_frame each time\n                drawing_area ldrawing(\n                    gDrawXOffset+m_XMin*gPolyXBoxSize,         //x\n                    gDrawYOffset+m_YMin*gPolyYBoxSize,         //y\n                    (m_XMax-m_XMin+1)*gPolyXBoxSize,           //sizex\n                    (m_YMax-m_YMin+1)*gPolyYBoxSize);          //sizey\n                for(int y=0; y<ldrawing.size_y; y++) {\n                    ldrawing.set_pos(0,y);\n                    color_t my_color = myColor();\n                    for(int x=0;x < ldrawing.size_x; x++) {\n                         ldrawing.put_pixel(my_color);\n                    }\n                }\n            }\n        }\n    }\n\n    int  area() {return ((m_XMax-m_XMin+1)*(m_YMax-m_YMin+1));}\n    void print(int i) { cout << \"RPolygon \" << i << \" (\" << m_XMin << \", \" << m_YMin << \")-(\" << m_XMax << \", \" << m_YMax << \") \" << endl; fflush(stdout);}\nprivate:\n    int m_XMin;\n    int m_YMin;\n    int m_XMax;\n    int m_YMax;\n    colorcomp_t m_r;\n    colorcomp_t m_g;\n    colorcomp_t m_b;\n};\n\n#if _MAIN_C_\nbool operator<(const RPolygon& a, const RPolygon& b) {\n    if(a.ymin() > b.ymin()) return false;\n    if(a.ymin() < b.ymin()) return true;\n    return a.xmin() < b.xmin();\n}\n#else\nextern bool operator<(const RPolygon& a, const RPolygon& b);\n#endif\n\nextern ostream& operator<<(ostream& s, const RPolygon &p);\n\nclass RPolygon_flagged {\n    RPolygon *myPoly;\n    bool is_duplicate;\npublic:\n    RPolygon_flagged() {myPoly = NULL; is_duplicate = false;}\n    RPolygon_flagged(RPolygon* _p, bool _is_duplicate) : myPoly(_p), is_duplicate(_is_duplicate) { }\n    bool isDuplicate() {return is_duplicate;}\n    void setDuplicate(bool newValue) {is_duplicate = newValue;}\n    RPolygon *p() {return myPoly;}\n    void setp(RPolygon *newp) {myPoly = newp;}\n};\n\ntypedef class vector<RPolygon, RPolygon_allocator> Polygon_map_t;\ntypedef class concurrent_vector<RPolygon, RPolygon_allocator> concurrent_Polygon_map_t;\ntypedef class enumerable_thread_specific<Polygon_map_t> ETS_Polygon_map_t;\ntypedef class vector<RPolygon_flagged, scalable_allocator<RPolygon_flagged> > Flagged_map_t; // we'll make shallow copies\n\ninline bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh) {\n    int xl1, yl1, xh1, yh1, xl2, yl2, xh2, yh2;\n#if _DEBUG\n     rt_sleep(1);   // slow down the process so we can see it.\n#endif\n    p1->get(&xl1, &yl1, &xh1, &yh1);\n    p2->get(&xl2, &yl2, &xh2, &yh2);\n    if(xl1 > xh2) return false;\n    if(xh1 < xl2) return false;\n    if(yl1 > yh2) return false;\n    if(yh1 < yl2) return false;\n    xl = (xl1 < xl2) ? xl2 : xl1;\n    xh = (xh1 < xh2) ? xh1 : xh2;\n    yl = (yl1 < yl2) ? yl2 : yl1;\n    yh = (yh1 < yh2) ? yh1 : yh2;\n    return true;\n}\n\n#endif // _RPOLYGON_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\t84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; };\n\t\t84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; };\n\t\t84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; };\n\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\tD31F32621C11DEE000A77D54 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; };\n\t\tD31F32631C11DEE300A77D54 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; };\n\t\tD31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; };\n\t\tD31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\tD31F32661C11DEF000A77D54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\tD31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\tD31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\tD31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32691C11DF1600A77D54 /* iOS.storyboard */; };\n\t\tD31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326C1C11DF7C00A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; };\n\t\tD31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; };\n\t\tD31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; };\n\t\tD31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = \"<group>\"; };\n\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = \"<group>\"; };\n\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = \"<group>\"; };\n\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"tbbExample-Prefix.pch\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DAA4152CB05200D59B95 /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DAA5152CB05200D59B95 /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = \"<group>\"; };\n\t\t84B8DAA6152CB05200D59B95 /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DAA7152CB05200D59B95 /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = \"<group>\"; };\n\t\t84B8DAA8152CB05200D59B95 /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = \"<group>\"; };\n\t\t84B8DAA9152CB05200D59B95 /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DAAA152CB05200D59B95 /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = \"<group>\"; };\n\t\t84B8DAAB152CB05200D59B95 /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = \"<group>\"; };\n\t\t84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };\n\t\tD31F324B1C11DEC100A77D54 /* tbbExample.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.ios.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD31F32691C11DF1600A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = \"<group>\"; };\n\t\tD31F326C1C11DF7C00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32821C12DFDD00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t84D0174E1527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,\n\t\t\t\tD31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,\n\t\t\t\tD31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F32481C11DEC100A77D54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */,\n\t\t\t\tD31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DAA4152CB05200D59B95 /* polymain.cpp */,\n\t\t\t\t84B8DAA5152CB05200D59B95 /* polymain.h */,\n\t\t\t\t84B8DAA6152CB05200D59B95 /* polyover.cpp */,\n\t\t\t\t84B8DAA7152CB05200D59B95 /* polyover.h */,\n\t\t\t\t84B8DAA8152CB05200D59B95 /* pover_global.h */,\n\t\t\t\t84B8DAA9152CB05200D59B95 /* pover_video.cpp */,\n\t\t\t\t84B8DAAA152CB05200D59B95 /* pover_video.h */,\n\t\t\t\t84B8DAAB152CB05200D59B95 /* rpolygon.h */,\n\t\t\t\t84B8DA98152CAD8600D59B95 /* Gui layer */,\n\t\t\t\t84B8DA7B152CA97B00D59B95 /* Resources */,\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7B152CA97B00D59B95 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD31F32691C11DF1600A77D54 /* iOS.storyboard */,\n\t\t\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,\n\t\t\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../../common/gui/xcode/tbbExample/en.lproj;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA98152CAD8600D59B95 /* Gui layer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */,\n\t\t\t\t84B8DA6F152CA90100D59B95 /* main.m */,\n\t\t\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */,\n\t\t\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */,\n\t\t\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,\n\t\t\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,\n\t\t\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Gui layer\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017461527431F0008A4E0 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */,\n\t\t\t\t84D017541527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D017521527431F0008A4E0 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017521527431F0008A4E0 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017511527431F0008A4E0 /* tbbExample.app */,\n\t\t\t\tD31F324B1C11DEC100A77D54 /* tbbExample.ios.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017541527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD31F326C1C11DF7C00A77D54 /* libtbb.dylib */,\n\t\t\t\tD31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */,\n\t\t\t\tD31F32821C12DFDD00A77D54 /* libtbb.dylib */,\n\t\t\t\tD31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */,\n\t\t\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */,\n\t\t\t\t84D017551527431F0008A4E0 /* Cocoa.framework */,\n\t\t\t\t84D017571527431F0008A4E0 /* Other Frameworks */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017571527431F0008A4E0 /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017581527431F0008A4E0 /* AppKit.framework */,\n\t\t\t\t84D017591527431F0008A4E0 /* CoreData.framework */,\n\t\t\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t84D017501527431F0008A4E0 /* tbbExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t84D0174D1527431F0008A4E0 /* Sources */,\n\t\t\t\t84D0174E1527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D0174F1527431F0008A4E0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 84D017511527431F0008A4E0 /* tbbExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD31F324A1C11DEC100A77D54 /* tbbExample.ios */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget \"tbbExample.ios\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD31F32471C11DEC100A77D54 /* Sources */,\n\t\t\t\tD31F32481C11DEC100A77D54 /* Frameworks */,\n\t\t\t\tD31F32491C11DEC100A77D54 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample.ios;\n\t\t\tproductName = tbbExample.ios;\n\t\t\tproductReference = D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t84D017481527431F0008A4E0 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = tbb;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD31F324A1C11DEC100A77D54 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1.1;\n\t\t\t\t\t\tDevelopmentTeam = 7J8M3RM94C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"polygon_overlay\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 84D017461527431F0008A4E0;\n\t\t\tproductRefGroup = 84D017521527431F0008A4E0 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t84D017501527431F0008A4E0 /* tbbExample */,\n\t\t\t\tD31F324A1C11DEC100A77D54 /* tbbExample.ios */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t84D0174F1527431F0008A4E0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */,\n\t\t\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,\n\t\t\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F32491C11DEC100A77D54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */,\n\t\t\t\tD31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */,\n\t\t\t\tD31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t84D0174D1527431F0008A4E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */,\n\t\t\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,\n\t\t\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,\n\t\t\t\t84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */,\n\t\t\t\t84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */,\n\t\t\t\t84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F32471C11DEC100A77D54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */,\n\t\t\t\tD31F32631C11DEE300A77D54 /* polyover.cpp in Sources */,\n\t\t\t\tD31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */,\n\t\t\t\tD31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */,\n\t\t\t\tD31F32621C11DEE000A77D54 /* polymain.cpp in Sources */,\n\t\t\t\tD31F32661C11DEF000A77D54 /* main.m in Sources */,\n\t\t\t\tD31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7D152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7F152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t84D01770152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01771152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84D01773152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01774152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD31F32601C11DEC100A77D54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"__TBB_IOS=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD31F32611C11DEC100A77D54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = \"__TBB_IOS=1\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"polygon_overlay\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01770152743200008A4E0 /* Debug */,\n\t\t\t\t84D01771152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01773152743200008A4E0 /* Debug */,\n\t\t\t\t84D01774152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget \"tbbExample.ios\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD31F32601C11DEC100A77D54 /* Debug */,\n\t\t\t\tD31F32611C11DEC100A77D54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 84D017481527431F0008A4E0 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D31F324A1C11DEC100A77D54\"\n               BuildableName = \"tbbExample.ios.app\"\n               BlueprintName = \"tbbExample.ios\"\n               ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F324A1C11DEC100A77D54\"\n            BuildableName = \"tbbExample.ios.app\"\n            BlueprintName = \"tbbExample.ios\"\n            ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F324A1C11DEC100A77D54\"\n            BuildableName = \"tbbExample.ios.app\"\n            BlueprintName = \"tbbExample.ios\"\n            ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F324A1C11DEC100A77D54\"\n            BuildableName = \"tbbExample.ios.app\"\n            BlueprintName = \"tbbExample.ios\"\n            ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample\"\n               ReferencedContainer = \"container:tbbExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      customWorkingDirectory = \"/tmp\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:polygon_overlay.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:tbbExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=seismic\nARGS=auto 0\nPERF_RUN_ARGS=auto 10000 silent\nLIGHT_ARGS=1:2 100\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1 -offload-attribute-target=mic\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\n# Currently only console mode is supported in offload version\noverride UI=con\nelse\nPERFFLAGS=-msse2\nendif\n\nSOURCES = ../../common/gui/$(UI)video.cpp universe.cpp seismic_video.cpp main.cpp\n\ninclude ../../common/gui/Makefile.gmake\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB) $(LIBS)\n\ndebug: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nperf_build: override CXXFLAGS+=$(PERFFLAGS)\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Seismic\nARGS=auto 0\nPERF_RUN_ARGS=auto 10000 silent\nLIGHT_ARGS=1:2 100\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)\n#UI = con\nUI = gdi\n#UI = dd\n\n# Machine architecture, auto-detected from TBB_TARGET_ARCH by default\n# Use XARCH variable to change it. See index.html for more information\nARCH0 = $(TBB_TARGET_ARCH)-\nARCH1 = $(ARCH0:ia32-=x86)\nARCH2 = $(ARCH1:intel64-=AMD64)\nXARCH = $(ARCH2:-=x86)\n\nMAKEINC = ../../common/gui/Makefile.win\nSOURCES = seismic_video.cpp universe.cpp main.cpp \n \nall: release test\nrelease: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS)\" LFLAGS=\"$(LDFLAGS) tbb.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=\"$(SOURCES)\" EXE=$(PROG).exe build_one\ndebug: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS) /D TBB_USE_DEBUG\" LFLAGS=\"$(LDFLAGS) tbb_debug.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=\"$(SOURCES)\" EXE=$(PROG).exe build_one\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\\SeismicSimulation.res >nul 2>&1\ntest:\n\t$(PROG) $(ARGS) \n\nperf_build: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=con CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS)\" LFLAGS=\"$(LDFLAGS) tbb.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=\"$(SOURCES) \" EXE=$(PROG).exe build_one\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define VIDEO_WINMAIN_ARGS\n\n#include <iostream>\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n\n#include \"seismic_video.h\"\n#include \"universe.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nUniverse u;\n\nstruct RunOptions {\n    //! It is used for console mode for test with different number of threads and also has\n    //! meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).\n    //!                  threads.second - initialization value for scheduler\n    utility::thread_number_range threads;\n    int numberOfFrames;\n    bool silent;\n    bool parallel;\n    RunOptions(utility::thread_number_range threads_ ,    int number_of_frames_ ,     bool silent_ , bool parallel_ )\n        : threads(threads_),numberOfFrames(number_of_frames_), silent(silent_), parallel(parallel_)\n    {\n    }\n};\n\nint do_get_default_num_threads() {\n    int threads;\n#if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n#endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\nRunOptions ParseCommandLine(int argc, char *argv[]){\n    // zero number of threads means to run serial version\n    utility::thread_number_range threads(get_default_num_threads,0,get_default_num_threads());\n\n    int numberOfFrames = 0;\n    bool silent = false;\n    bool serial = false;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(numberOfFrames,\"n-of-frames\",\"number of frames the example processes internally (0 means unlimited)\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(serial,\"serial\",\"in GUI mode start with serial version of algorithm\")\n    );\n    return RunOptions(threads,numberOfFrames,silent,!serial);\n}\n\nint main(int argc, char *argv[])\n{\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n        RunOptions options = ParseCommandLine(argc,argv);\n        SeismicVideo video(u,options.numberOfFrames,options.threads.last,options.parallel);\n\n        // video layer init\n        if(video.init_window(u.UniverseWidth, u.UniverseHeight)) {\n            video.calc_fps = true;\n            video.threaded = options.threads.first > 0;\n            // video is ok, init Universe\n            u.InitializeUniverse(video);\n            // main loop\n            video.main_loop();\n        }\n        else if(video.init_console()) {\n            // do console mode\n            if (options.numberOfFrames == 0) {\n                options.numberOfFrames = 1000;\n                std::cout << \"Substituting 1000 for unlimited frames because not running interactively\\n\";\n            }\n            for(int p = options.threads.first;  p <= options.threads.last; p = options.threads.step(p)) {\n                tbb::tick_count xwayParallelismStartTime = tbb::tick_count::now();\n                u.InitializeUniverse(video);\n                int numberOfFrames = options.numberOfFrames;\n#if __TBB_MIC_OFFLOAD\n                drawing_memory dmem = video.get_drawing_memory();\n                char *pMem = dmem.get_address();\n                size_t memSize = dmem.get_size();\n\n                #pragma offload target(mic) in(u, numberOfFrames, p, dmem), out(pMem:length(memSize))\n                {\n                    // It is necessary to update the pointer on mic \n                    // since the address spaces on host and on target are different\n                    dmem.set_address(pMem);\n                    u.SetDrawingMemory(dmem);\n#endif // __TBB_MIC_OFFLOAD\n                    if (p==0) {\n                        //run a serial version\n                        for( int i=0; i<numberOfFrames; ++i ) {\n                            u.SerialUpdateUniverse();\n                        }\n                    } else {\n                        tbb::task_scheduler_init init(p);\n                        for( int i=0; i<numberOfFrames; ++i ) {\n                            u.ParallelUpdateUniverse();\n                        }\n                    }\n#if __TBB_MIC_OFFLOAD\n                }\n#endif // __TBB_MIC_OFFLOAD\n\n                if (!options.silent){\n                    double fps =  options.numberOfFrames/((tbb::tick_count::now()-xwayParallelismStartTime).seconds());\n                    std::cout<<fps<<\" frame per sec with \";\n                    if (p==0){\n                        std::cout<<\"serial code\\n\";\n                    }else{\n                        std::cout<<p<<\" way parallelism\\n\";\n                    }\n                }\n            }\n        }\n        video.terminate();\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    }catch(std::exception& e){\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/msvs/SeismicSimulation.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\n#ifdef _WIN32\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_SEISMICSIMULATION   ICON                    \"SeismicSimulation.ico\"\nIDI_SMALL               ICON                    \"small.ico\"\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Menu\n//\n\nIDC_SEISMICSIMULATION MENU \nBEGIN\n    POPUP \"&File\"\n    BEGIN\n        MENUITEM \"&Parallel\",                   ID_FILE_PARALLEL\n        MENUITEM \"&Serial\",                     ID_FILE_SERIAL\n        MENUITEM SEPARATOR\n        MENUITEM \"&Enable GUI\",                 ID_FILE_ENABLEGUI\n        MENUITEM \"&Disable GUI\",                ID_FILE_DISABLEGUI\n        MENUITEM SEPARATOR\n        MENUITEM \"E&xit\",                       IDM_EXIT\n    END\n    POPUP \"&Help\"\n    BEGIN\n        MENUITEM \"&About ...\",                  IDM_ABOUT\n    END\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Accelerator\n//\n\nIDC_SEISMICSIMULATION ACCELERATORS \nBEGIN\n    VK_OEM_2,       IDM_ABOUT,              VIRTKEY, ALT, NOINVERT\n    \"P\",            ID_FILE_PARALLEL,       VIRTKEY, ALT, NOINVERT\n    \"S\",            ID_FILE_SERIAL,         VIRTKEY, ALT, NOINVERT\n    \"D\",            ID_FILE_DISABLEGUI,     VIRTKEY, ALT, NOINVERT\n    \"E\",            ID_FILE_ENABLEGUI,      VIRTKEY, ALT, NOINVERT\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialog\n//\n\nIDD_ABOUTBOX DIALOG  22, 17, 230, 75\nSTYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU\nCAPTION \"About\"\nFONT 8, \"System\"\nBEGIN\n    ICON            IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16\n    LTEXT           \"SeismicSimulation Version 1.1\",IDC_STATIC,49,10,119,8,SS_NOPREFIX\n    LTEXT           \"Copyright (C) 2005-2008\",IDC_STATIC,49,20,119,8\n    DEFPUSHBUTTON   \"OK\",IDOK,195,6,30,11,WS_GROUP\nEND\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE \nBEGIN\n    IDS_APP_TITLE           \"SeismicSimulation\"\n    IDC_SEISMICSIMULATION   \"SEISMICSIMULATION\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>SeismicSimulation</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>\n    <RootNamespace>SeismicSimulation</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\main.cpp\" />\n    <ClCompile Include=\"..\\seismic_video.cpp\" />\n    <ClCompile Include=\"..\\universe.cpp\" />\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\d2dvideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\gdivideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\seismic_video.h\" />\n    <ClInclude Include=\"..\\universe.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\video.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\winvideo.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"SeismicSimulation.ico\" />\n    <None Include=\"small.ico\" />\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"SeismicSimulation.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/msvs/resource.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by SeismicSimulation.rc\n//\n#define IDC_MYICON                      2\n#define IDD_SEISMICSIMULATION_DIALOG    102\n#define IDS_APP_TITLE                   103\n#define IDD_ABOUTBOX                    103\n#define IDM_ABOUT                       104\n#define IDM_EXIT                        105\n#define IDI_SEISMICSIMULATION           107\n#define IDI_SMALL                       108\n#define IDC_SEISMICSIMULATION           109\n#define IDR_MAINFRAME                   128\n#define ID_FILE_PARALLEL                32771\n#define ID_FILE_SERIAL                  32772\n#define IDM_PARALLEL                    32773\n#define ID_FILE_ENABLEGUI               32774\n#define ID_FILE_DISABLEGUI              32775\n#define IDC_STATIC                      -1\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        129\n#define _APS_NEXT_COMMAND_VALUE         32782\n#define _APS_NEXT_CONTROL_VALUE         1000\n#define _APS_NEXT_SYMED_VALUE           110\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/msvs/seismic.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"SeismicSimulation\", \"SeismicSimulation.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A2527}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\t_GDIRelease|Win32 = _GDIRelease|Win32\r\n\t\t_GDIRelease|x64 = _GDIRelease|x64\r\n\t\tDDDebug|Win32 = DDDebug|Win32\r\n\t\tDDDebug|x64 = DDDebug|x64\r\n\t\tDDRelease|Win32 = DDRelease|Win32\r\n\t\tDDRelease|x64 = DDRelease|x64\r\n\t\tGDIDebug|Win32 = GDIDebug|Win32\r\n\t\tGDIDebug|x64 = GDIDebug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = Debug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Seismic sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Seismic sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t<br><br>\n\t\t<b>Note:</b> Currently, the offload version does not support GUI and can only be used with console mode.\n\t</p>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"universe.h\">universe.h</a>\n\t\t\t\t<dd>Wave propagation methods interface.\n\t\t\t\t<dt><a href=\"universe.cpp\">universe.cpp</a>\n\t\t\t\t<dd>Wave propagation methods implementation.\n\t\t\t\t<dt><a href=\"seismic_video.h\">seismic_video.h</a>\n\t\t\t\t<dd>GUI mode support interface.\n\t\t\t\t<dt><a href=\"seismic_video.cpp\">seismic_video.cpp</a>\n\t\t\t\t<dd>GUI mode support implementation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>The following additional options are supported:</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make [(general targets: {release, debug} [test])] UI={con, gdi, d2d, x, mac}</tt>\n\t\t\t\t<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*,  \n\t\t\t\t\tDirect2D*, X11, or OpenGL*\n\t\t\t\t\t(see the description of the <a href=\"../../common/index.html\">common GUI code</a>\n\t\t\t\t\tfor more information on available graphics support).<br>\n\t\t\t\t\tFor Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.<br>\n\t\t\t\t\tFor Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior\n\t\t\t\t\tperformance, but can only be used if the Microsoft* DirectX* SDK is installed on your system \n\t\t\t\t\tand if overlay is supported by your graphics card.<br>\n\t\t\t\t\tUse UI=con to build without the GUI for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] XARCH=x64</tt>\n\t\t\t\t<dd>Build and run as above, but also specify XARCH=x64\n\t\t\t\t\t(or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.\n\t\t\t\t<dt><tt>make [(above options or targets)] DDLIB_DIR=&lt;<i>specify path to Direct Draw* SDK here</i>&gt;</tt>\n\t\t\t\t<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.\n\t\t\t\t<dt><tt>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</tt>\n\t\t\t\t<dd>Build and run as above, but enable full X11 synchronization if you experience \"tearing\" of motion on slower video systems.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>seismic <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>seismic [<i>n-of-threads</i>=value] [<i>n-of-frames</i>=value] [<i>silent</i>] [<i>serial</i>]</tt>\n\t\t\t\t<dt><tt>seismic [<i>n-of-threads</i> [<i>n-of-frames</i>]] [<i>silent</i>] [<i>serial</i>]</tt>\n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-frames</i> is a number of frames the example processes internally.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>serial</i> - in GUI mode start with serial version of algorithm.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector::\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads and smaller number of frames, e.g., <tt>seismic 4 5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Hot keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tThe following hot keys can be used in interactive execution mode when the example is compiled with the graphical\n\t\t\t\tuser interface:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt>&lt;left mouse button&gt;\n\t\t\t\t<dd>Starts new seismic wave in place specified by mouse cursor.\n\t\t\t\t<dt>&lt;space&gt;\n\t\t\t\t<dd>Toggles between parallel and serial execution modes.\n\t\t\t\t<dt>&lt;p&gt;\n\t\t\t\t<dd>Enables parallel execution mode.\n\t\t\t\t<dt>&lt;s&gt;\n\t\t\t\t<dd>Enables serial execution mode.\n\t\t\t\t<dt>&lt;e&gt;\n\t\t\t\t<dd>Enables screen updates.\n\t\t\t\t<dt>&lt;d&gt;\n\t\t\t\t<dd>Disables screen updates <i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt>&lt;esc&gt;\n\t\t\t\t<dd>Stops execution.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI\n\t\t\t\tdisplay turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/seismic_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"seismic_video.h\"\n#include \"universe.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst char * const SeismicVideo::titles[2] = {\"Seismic Simulation: Serial\", \"Seismic Simulation: Parallel\"};\nvoid SeismicVideo::on_mouse(int x, int y, int key) {\n    if(key == 1){\n        u_.TryPutNewPulseSource(x,y);\n    }\n}\n\nvoid SeismicVideo::on_key(int key) {\n    key &= 0xff;\n    if(char(key) == ' ') initIsParallel = !initIsParallel;\n    else if(char(key) == 'p') initIsParallel = true;\n    else if(char(key) == 's') initIsParallel = false;\n    else if(char(key) == 'e') updating = true;\n    else if(char(key) == 'd') updating = false;\n    else if(key == 27) running = false;\n    title = titles[initIsParallel?1:0];\n}\n\nvoid SeismicVideo::on_process() {\n    tbb::task_scheduler_init Init(threadsHigh);\n    for( int frames = 0; numberOfFrames_==0 || frames<numberOfFrames_; ++frames ) {\n        if( initIsParallel )\n            u_.ParallelUpdateUniverse();\n        else\n            u_.SerialUpdateUniverse();\n        if( !next_frame() ) break;\n    }\n}\n\n#ifdef _WINDOWS\n#include \"msvs/resource.h\"\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\nSeismicVideo * gVideo = NULL;\n#endif\n\nSeismicVideo::SeismicVideo(    Universe &u, int number_of_frames, int threads_high, bool init_is_parallel)\n    :numberOfFrames_(number_of_frames),initIsParallel(init_is_parallel),u_(u),threadsHigh(threads_high)\n{\n    title = titles[initIsParallel?1:0];\n#ifdef _WINDOWS\n    gVideo = this;\n    LoadStringA(video::win_hInstance, IDC_SEISMICSIMULATION, szWindowClass, MAX_LOADSTRING);\n    memset(&wcex, 0, sizeof(wcex));\n    wcex.lpfnWndProc    = (WNDPROC)WndProc;\n    wcex.hIcon          = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SEISMICSIMULATION));\n    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);\n    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);\n    wcex.lpszMenuName   = LPCTSTR(IDC_SEISMICSIMULATION);\n    wcex.lpszClassName  = szWindowClass;\n    wcex.hIconSm        = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SMALL));\n    win_set_class(wcex); // ascii convention here\n    win_load_accelerators(IDC_SEISMICSIMULATION);\n#endif\n\n}\n\n\n\n\n\n#ifdef _WINDOWS\n//\n//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)\n//\n//  PURPOSE:  Processes messages for the main window.\n//\n//  WM_COMMAND  - process the application menu\n//  WM_PAINT    - Paint the main window\n//  WM_DESTROY  - post a quit message and return\n//\n//\nLRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\n{\n    switch (message)\n    {\n    case WM_INITDIALOG: return TRUE;\n    case WM_COMMAND:\n        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {\n            EndDialog(hDlg, LOWORD(wParam));\n            return TRUE;\n        }\n        break;\n    }\n    return FALSE;\n}\n\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\n{\n    int wmId;\n    switch (message) {\n    case WM_COMMAND:\n        wmId    = LOWORD(wParam);\n        // Parse the menu selections:\n        switch (wmId)\n        {\n        case IDM_ABOUT:\n            DialogBox(video::win_hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)About);\n            break;\n        case IDM_EXIT:\n            PostQuitMessage(0);\n            break;\n        case ID_FILE_PARALLEL:\n            gVideo->on_key('p');\n            break;\n        case ID_FILE_SERIAL:\n            gVideo->on_key('s');\n            break;\n        case ID_FILE_ENABLEGUI:\n            gVideo->on_key('e');\n            break;\n        case ID_FILE_DISABLEGUI:\n            gVideo->on_key('d');\n            break;\n        default:\n            return DefWindowProc(hWnd, message, wParam, lParam);\n        }\n        break;\n    default:\n        return DefWindowProc(hWnd, message, wParam, lParam);\n    }\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/seismic_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef SEISMIC_VIDEO_H_\n#define SEISMIC_VIDEO_H_\n\n#include \"../../common/gui/video.h\"\n\nclass Universe;\n\nclass SeismicVideo : public video\n{\n#ifdef _WINDOWS\n    #define MAX_LOADSTRING 100\n    TCHAR szWindowClass[MAX_LOADSTRING];    // the main window class name\n    WNDCLASSEX wcex;\n#endif\n    static const char * const titles[2];\n\n    bool initIsParallel ;\n\n    Universe &u_;\n    int numberOfFrames_; // 0 means forever, positive means number of frames, negative is undefined\n    int threadsHigh;\nprivate:\n    void on_mouse(int x, int y, int key);\n    void on_process();\n\n#ifdef _WINDOWS\npublic:\n#endif\n    void on_key(int key);\n\npublic:\n    SeismicVideo(    Universe &u,int numberOfFrames, int threadsHigh, bool initIsParallel=true);\n};\n#endif /* SEISMIC_VIDEO_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/universe.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../../common/gui/video.h\"\n#include <cmath>\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n\n\nusing namespace std;\n\n#ifdef _MSC_VER\n// warning C4068: unknown pragma\n#pragma warning(disable: 4068)\n// warning C4351: new behavior: elements of array 'array' will be default initialized\n#pragma warning(disable: 4351)\n#endif\n\n#include \"universe.h\"\n\nconst colorcomp_t MaterialColor[4][3] = { // BGR\n    {96,0,0},     // WATER\n    {0,48,48},    // SANDSTONE\n    {32,32,23}    // SHALE\n};\n\nvoid Universe::InitializeUniverse(video const& colorizer) {\n\n    pulseCounter = pulseTime = 100;\n    pulseX = UniverseWidth/3;\n    pulseY = UniverseHeight/4;\n    // Initialize V, S, and T to slightly non-zero values, in order to avoid denormal waves.\n    for( int i=0; i<UniverseHeight; ++i )\n#pragma ivdep\n        for( int j=0; j<UniverseWidth; ++j ) {\n            T[i][j] = S[i][j] = V[i][j] = ValueType(1.0E-6);\n        }\n    for( int i=1; i<UniverseHeight-1; ++i ) {\n        for( int j=1; j<UniverseWidth-1; ++j ) {\n            float x = float(j-UniverseWidth/2)/(UniverseWidth/2);\n            ValueType t = (ValueType)i/UniverseHeight;\n            MaterialType m;\n            D[i][j] = 1.0;\n            // Coefficient values are fictitious, and chosen to visually exaggerate\n            // physical effects such as Rayleigh waves.  The fabs/exp line generates\n            // a shale layer with a gentle upwards slope and an anticline.\n            if( t<0.3f ) {\n                m = WATER;\n                M[i][j] = 0.125;\n                L[i][j] = 0.125;\n            } else if( fabs(t-0.7+0.2*exp(-8*x*x)+0.025*x)<=0.1 ) {\n                m = SHALE;\n                M[i][j] = 0.5;\n                L[i][j] = 0.6;\n            } else {\n                m = SANDSTONE;\n                M[i][j] = 0.3;\n                L[i][j] = 0.4;\n            }\n            material[i][j] = m;\n        }\n    }\n    ValueType scale = 2.0f/ColorMapSize;\n    for( int k=0; k<4; ++k ) {\n        for( int i=0; i<ColorMapSize; ++i ) {\n            colorcomp_t c[3];\n            ValueType t = (i-ColorMapSize/2)*scale;\n            ValueType r = t>0 ? t : 0;\n            ValueType b = t<0 ? -t : 0;\n            ValueType g = 0.5f*fabs(t);\n            memcpy(c, MaterialColor[k], sizeof(c));\n            c[2] = colorcomp_t(r*(255-c[2])+c[2]);\n            c[1] = colorcomp_t(g*(255-c[1])+c[1]);\n            c[0] = colorcomp_t(b*(255-c[0])+c[0]);\n            ColorMap[k][i] = colorizer.get_color(c[2], c[1], c[0]);\n        }\n    }\n    // Set damping coefficients around border to reduce reflections from boundaries.\n    ValueType d = 1.0;\n    for( int k=DamperSize-1; k>0; --k ) {\n        d *= 1-1.0f/(DamperSize*DamperSize);\n        for( int j=1; j<UniverseWidth-1; ++j ) {\n            D[k][j] *= d;\n            D[UniverseHeight-1-k][j] *= d;\n        }\n        for( int i=1; i<UniverseHeight-1; ++i ) {\n            D[i][k] *= d;\n            D[i][UniverseWidth-1-k] *= d;\n        }\n    }\n    drawingMemory = colorizer.get_drawing_memory();\n}\nvoid Universe::UpdatePulse() {\n    if( pulseCounter>0 ) {\n        ValueType t = (pulseCounter-pulseTime/2)*0.05f;\n        V[pulseY][pulseX] += 64*sqrt(M[pulseY][pulseX])*exp(-t*t);\n        --pulseCounter;\n    }\n}\n\nstruct Universe::Rectangle {\n    struct std::pair<int,int> xRange;\n    struct std::pair<int,int> yRange;\n    Rectangle (int startX, int startY, int width, int height):xRange(startX,width),yRange(startY,height){}\n    int StartX() const {return xRange.first;}\n    int StartY() const {return yRange.first;}\n    int Width()   const {return xRange.second;}\n    int Height()  const {return yRange.second;}\n    int EndX() const {return xRange.first + xRange.second;}\n    int EndY() const {return yRange.first + yRange.second;}\n\n};\n\nvoid Universe::UpdateStress(Rectangle const& r ) {\n    drawing_area  drawing(r.StartX(),r.StartY(),r.Width(),r.Height(),drawingMemory);\n    for( int i=r.StartY(); i<r.EndY() ; ++i ) {\n        drawing.set_pos(1, i-r.StartY());\n#pragma ivdep\n        for( int j=r.StartX(); j<r.EndX() ; ++j ) {\n            S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]);\n            T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]);\n            int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;\n            if( index<0 ) index = 0;\n            if( index>=ColorMapSize ) index = ColorMapSize-1;\n            color_t* c = ColorMap[material[i][j]];\n            drawing.put_pixel(c[index]);\n        }\n    }\n}\n\nvoid Universe::SerialUpdateStress() {\n    Rectangle  area(0, 0, UniverseWidth-1, UniverseHeight-1);\n    UpdateStress(area);\n}\n\nstruct UpdateStressBody {\n    Universe & u_;\n    UpdateStressBody(Universe & u):u_(u){}\n    void operator()( const tbb::blocked_range<int>& range ) const {\n        Universe::Rectangle area(0, range.begin(), u_.UniverseWidth-1, range.size());\n        u_.UpdateStress(area);\n    }\n};\n\nvoid Universe::ParallelUpdateStress(tbb::affinity_partitioner &affinity) {\n    tbb::parallel_for( tbb::blocked_range<int>( 0, UniverseHeight-1 ), // Index space for loop\n                       UpdateStressBody(*this),                             // Body of loop\n                       affinity );                                     // Affinity hint\n}\n\nvoid Universe::UpdateVelocity(Rectangle const& r) {\n    for( int i=r.StartY(); i<r.EndY(); ++i )\n#pragma ivdep\n        for( int j=r.StartX(); j<r.EndX(); ++j )\n            V[i][j] = D[i][j]*(V[i][j] + L[i][j]*(S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j]));\n}\n\nvoid Universe::SerialUpdateVelocity() {\n    UpdateVelocity(Rectangle(1,1,UniverseWidth-1,UniverseHeight-1));\n}\n\nstruct UpdateVelocityBody {\n    Universe & u_;\n    UpdateVelocityBody(Universe & u):u_(u){}\n    void operator()( const tbb::blocked_range<int>& y_range ) const {\n        u_.UpdateVelocity(Universe::Rectangle(1,y_range.begin(),u_.UniverseWidth-1,y_range.size()));\n    }\n};\n\nvoid Universe::ParallelUpdateVelocity(tbb::affinity_partitioner &affinity) {\n    tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight ), // Index space for loop\n                       UpdateVelocityBody(*this),                    // Body of loop\n                       affinity );                                   // Affinity hint\n}\n\nvoid Universe::SerialUpdateUniverse() {\n    UpdatePulse();\n    SerialUpdateStress();\n    SerialUpdateVelocity();\n}\n\nvoid Universe::ParallelUpdateUniverse() {\n    /** Affinity is an argument to parallel_for to hint that an iteration of a loop\n    is best replayed on the same processor for each execution of the loop.\n    It is a static object because it must remember where the iterations happened\n    in previous executions. */\n    static tbb::affinity_partitioner affinity;\n    UpdatePulse();\n    ParallelUpdateStress(affinity);\n    ParallelUpdateVelocity(affinity);\n}\n\nbool Universe::TryPutNewPulseSource(int x, int y){\n    if(pulseCounter == 0) {\n        pulseCounter = pulseTime;\n        pulseX = x; pulseY = y;\n        return true;\n    }\n    return false;\n}\n\nvoid Universe::SetDrawingMemory(const drawing_memory &dmem) {\n    drawingMemory = dmem;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/universe.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef UNIVERSE_H_\n#define UNIVERSE_H_\n\n#ifndef UNIVERSE_WIDTH\n#define UNIVERSE_WIDTH 1024\n#endif\n#ifndef UNIVERSE_HEIGHT\n#define UNIVERSE_HEIGHT 512\n#endif\n\n#include \"../../common/gui/video.h\"\n#include \"tbb/partitioner.h\"\n\nclass Universe {\npublic:\n    enum {\n        UniverseWidth  = UNIVERSE_WIDTH,\n        UniverseHeight = UNIVERSE_HEIGHT\n    };\nprivate:\n    //in order to avoid performance degradation due to cache aliasing issue\n    //some padding is needed after each row in array, and between array themselves.\n    //the padding is achieved by adjusting number of rows and columns.\n    //as the compiler is forced to place class members of the same clause in order of the\n    //declaration this seems to be the right way of padding.\n\n    //magic constants added below are chosen experimentally for 1024x512.\n    enum {\n        MaxWidth = UniverseWidth+1,\n        MaxHeight = UniverseHeight+3\n    };\n\n    typedef float ValueType;\n\n    //! Horizontal stress\n    ValueType S[MaxHeight][MaxWidth];\n\n    //! Velocity at each grid point\n    ValueType V[MaxHeight][MaxWidth];\n\n    //! Vertical stress\n    ValueType T[MaxHeight][MaxWidth];\n\n    //! Coefficient related to modulus\n    ValueType M[MaxHeight][MaxWidth];\n\n    //! Damping coefficients\n    ValueType D[MaxHeight][MaxWidth];\n\n    //! Coefficient related to lightness\n    ValueType L[MaxHeight][MaxWidth];\n\n    enum { ColorMapSize = 1024};\n    color_t ColorMap[4][ColorMapSize];\n\n    enum MaterialType {\n        WATER=0,\n        SANDSTONE=1,\n        SHALE=2\n    };\n\n    //! Values are MaterialType, cast to an unsigned char to save space.\n    unsigned char material[MaxHeight][MaxWidth];\n\nprivate:\n    enum { DamperSize = 32};\n\n    int pulseTime;\n    int pulseCounter;\n    int pulseX;\n    int pulseY;\n\n    drawing_memory drawingMemory;\n\npublic:\n    void InitializeUniverse(video const& colorizer);\n\n    void SerialUpdateUniverse();\n    void ParallelUpdateUniverse();\n    bool TryPutNewPulseSource(int x, int y);\n    void SetDrawingMemory(const drawing_memory &dmem);\nprivate:\n    struct Rectangle;\n    void UpdatePulse();\n    void UpdateStress(Rectangle const& r );\n\n    void SerialUpdateStress() ;\n    friend struct UpdateStressBody;\n    friend struct UpdateVelocityBody;\n    void ParallelUpdateStress(tbb::affinity_partitioner &affinity);\n\n    void UpdateVelocity(Rectangle const& r);\n\n    void SerialUpdateVelocity() ;\n    void ParallelUpdateVelocity(tbb::affinity_partitioner &affinity);\n};\n\n#endif /* UNIVERSE_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };\n\t\t84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; };\n\t\t84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; };\n\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\tD31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; };\n\t\tD31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; };\n\t\tD3BD96921C0DD55E00163D8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };\n\t\tD3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; };\n\t\tD3BD96941C0DD57600163D8B /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; };\n\t\tD3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\tD3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\tD3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\tD3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\tD3BD96A61C0DE3DE00163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; };\n\t\tD3BD96AB1C0E08E500163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; };\n\t\tD3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */; };\n\t\tD3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */; };\n\t\tD3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B61C0E11C600163D8B /* iOS.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = \"<group>\"; };\n\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = \"<group>\"; };\n\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"tbbExample-Prefix.pch\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DA83152CA99C00D59B95 /* seismic_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = seismic_video.cpp; path = ../seismic_video.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DA84152CA99C00D59B95 /* seismic_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = seismic_video.h; path = ../seismic_video.h; sourceTree = \"<group>\"; };\n\t\t84B8DA85152CA99C00D59B95 /* universe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = universe.cpp; path = ../universe.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DA86152CA99C00D59B95 /* universe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = universe.h; path = ../universe.h; sourceTree = \"<group>\"; };\n\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = \"<group>\"; };\n\t\t84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };\n\t\tD31F32781C12DEE000A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n\t\tD3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = \"tbbExample-Info.ios.plist\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\"; sourceTree = \"<group>\"; };\n\t\tD3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n\t\tD3BD96A51C0DE3DE00163D8B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = \"<group>\"; };\n\t\tD3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"tbbExample-Info.plist\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tD3BD96B61C0E11C600163D8B /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = \"<group>\"; };\n\t\tD3BD96BB1C0E19E700163D8B /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t84D0174E1527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,\n\t\t\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,\n\t\t\t\t84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,\n\t\t\t\tD31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3BD96571C0DD00400163D8B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */,\n\t\t\t\tD31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t84B8DA6C152CA8D900D59B95 /* tbbExample Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7B152CA97B00D59B95 /* Resources */,\n\t\t\t\t84B8DA82152CA99C00D59B95 /* main.cpp */,\n\t\t\t\tD3BD96A51C0DE3DE00163D8B /* main.m */,\n\t\t\t\t84B8DA83152CA99C00D59B95 /* seismic_video.cpp */,\n\t\t\t\t84B8DA84152CA99C00D59B95 /* seismic_video.h */,\n\t\t\t\t84B8DA85152CA99C00D59B95 /* universe.cpp */,\n\t\t\t\t84B8DA86152CA99C00D59B95 /* universe.h */,\n\t\t\t);\n\t\t\tname = \"tbbExample Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7B152CA97B00D59B95 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD3BD96B61C0E11C600163D8B /* iOS.storyboard */,\n\t\t\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,\n\t\t\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../../common/gui/xcode/tbbExample/en.lproj;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA98152CAD8600D59B95 /* Gui layer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */,\n\t\t\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */,\n\t\t\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */,\n\t\t\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,\n\t\t\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,\n\t\t\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Gui layer\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017461527431F0008A4E0 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */,\n\t\t\t\tD3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */,\n\t\t\t\t84B8DA98152CAD8600D59B95 /* Gui layer */,\n\t\t\t\t84B8DA6C152CA8D900D59B95 /* tbbExample Sources */,\n\t\t\t\t84D017541527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D017521527431F0008A4E0 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017521527431F0008A4E0 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017511527431F0008A4E0 /* tbbExample.app */,\n\t\t\t\tD3BD96BB1C0E19E700163D8B /* tbbExample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017541527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017591527431F0008A4E0 /* CoreData.framework */,\n\t\t\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */,\n\t\t\t\tD3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */,\n\t\t\t\tD31F32781C12DEE000A77D54 /* libtbb.dylib */,\n\t\t\t\tD31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */,\n\t\t\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */,\n\t\t\t\t84D017581527431F0008A4E0 /* AppKit.framework */,\n\t\t\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */,\n\t\t\t\t84D017551527431F0008A4E0 /* Cocoa.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t84D017501527431F0008A4E0 /* tbbExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t84D0174D1527431F0008A4E0 /* Sources */,\n\t\t\t\t84D0174E1527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D0174F1527431F0008A4E0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 84D017511527431F0008A4E0 /* tbbExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD3BD96591C0DD00400163D8B /* tbbExample_ios */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget \"tbbExample_ios\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD3BD96561C0DD00400163D8B /* Sources */,\n\t\t\t\tD3BD96571C0DD00400163D8B /* Frameworks */,\n\t\t\t\tD3BD96581C0DD00400163D8B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample_ios;\n\t\t\tproductName = tbbExample_ios;\n\t\t\tproductReference = D3BD96BB1C0E19E700163D8B /* tbbExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t84D017481527431F0008A4E0 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = tbb;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD3BD96591C0DD00400163D8B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1.1;\n\t\t\t\t\t\tDevelopmentTeam = 7J8M3RM94C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"seismic\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 84D017461527431F0008A4E0;\n\t\t\tproductRefGroup = 84D017521527431F0008A4E0 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t84D017501527431F0008A4E0 /* tbbExample */,\n\t\t\t\tD3BD96591C0DD00400163D8B /* tbbExample_ios */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t84D0174F1527431F0008A4E0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */,\n\t\t\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */,\n\t\t\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,\n\t\t\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3BD96581C0DD00400163D8B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */,\n\t\t\t\tD31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */,\n\t\t\t\tD3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */,\n\t\t\t\tD3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t84D0174D1527431F0008A4E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,\n\t\t\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,\n\t\t\t\tD3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */,\n\t\t\t\t84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */,\n\t\t\t\tD3BD96A61C0DE3DE00163D8B /* main.m in Sources */,\n\t\t\t\t84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3BD96561C0DD00400163D8B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3BD96941C0DD57600163D8B /* universe.cpp in Sources */,\n\t\t\t\tD3BD96921C0DD55E00163D8B /* main.cpp in Sources */,\n\t\t\t\tD3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */,\n\t\t\t\tD3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */,\n\t\t\t\tD3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */,\n\t\t\t\tD3BD96AB1C0E08E500163D8B /* main.m in Sources */,\n\t\t\t\tD3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7D152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7F152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t84D01770152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01771152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84D01773152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Intel.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01774152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Intel.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD3BD96851C0DD00500163D8B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"__TBB_IOS=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = tbbExample;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD3BD96861C0DD00500163D8B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = \"__TBB_IOS=1\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = tbbExample;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"seismic\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01770152743200008A4E0 /* Debug */,\n\t\t\t\t84D01771152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01773152743200008A4E0 /* Debug */,\n\t\t\t\t84D01774152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget \"tbbExample_ios\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD3BD96851C0DD00500163D8B /* Debug */,\n\t\t\t\tD3BD96861C0DD00500163D8B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 84D017481527431F0008A4E0 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D3BD96591C0DD00400163D8B\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample_ios\"\n               ReferencedContainer = \"container:seismic.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"NO\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D3BD96711C0DD00400163D8B\"\n               BuildableName = \"com.tbb.exampleTests.xctest\"\n               BlueprintName = \"com.tbb.exampleTests\"\n               ReferencedContainer = \"container:seismic.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"NO\"\n            buildForRunning = \"NO\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D3BD967C1C0DD00500163D8B\"\n               BuildableName = \"com.tbb.exampleUITests.xctest\"\n               BlueprintName = \"com.tbb.exampleUITests\"\n               ReferencedContainer = \"container:seismic.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3BD96591C0DD00400163D8B\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:seismic.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3BD96591C0DD00400163D8B\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:seismic.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3BD96591C0DD00400163D8B\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:seismic.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample\"\n               ReferencedContainer = \"container:tbbExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:seismic.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      customWorkingDirectory = \"/tmp\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:seismic.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:tbbExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# The original source for this example is\n# Copyright (c) 1994-2008 John E. Stone\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. The name of the author may not be used to endorse or promote products\n#    derived from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n\n# GNU Makefile that builds and runs example.\nNAME:=tachyon\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\n# The default runtime arguments\nexport ARGS = dat/balls.dat\nexport PERF_RUN_ARGS = silent dat/balls3.dat\nexport LIGHT_ARGS= dat/model2.dat\n\n# define name suffix\nSUFFIX = .$(VERSION)\n\nLIBS ?= -lm\n\ninclude ../../common/gui/Makefile.gmake\n\nifeq ($(UI),x)\nUI_CXXFLAGS += -DX_FULLSYNC \nifneq (,$(findstring -lXext,$(LIBS)))\nUI_CXXFLAGS += -DX_NOSHMPIX\nendif\nendif # X\n\nMYCXXFLAGS = $(CXXFLAGS) $(UI_CXXFLAGS)\n\nall: build run\nrelease: build\ndebug: build_debug\ntest: run\n\nbuild: build_serial build_tbb1d build_tbb\nbuild_debug: build_serial_debug build_tbb1d_debug build_tbb_debug\nrun: run_serial run_tbb1d run_tbb\n\nserial: build_serial run_serial\nserial_debug: build_serial_debug run_serial\ntbb: build_tbb run_tbb\ntbb_debug: build_tbb_debug run_tbb\ntbb1d: build_tbb1d run_tbb1d\ntbb1d_debug: build_tbb1d_debug run_tbb1d\n\nbuild_serial:\n\t$(MAKE) VERSION=serial build_one\nbuild_serial_debug:\n\t$(MAKE) VERSION=serial ADD_DEBUG=1 build_one\nrun_serial:\n\t$(MAKE) VERSION=serial run_one\n\nbuild_tbb:\n\t$(MAKE) VERSION=tbb ADD_TBB=1 build_one\nbuild_tbb_debug:\n\t$(MAKE) VERSION=tbb ADD_TBB=1 ADD_DEBUG=1 build_one\nrun_tbb:\n\t$(MAKE) VERSION=tbb run_one\n\nbuild_tbb1d:\n\t$(MAKE) VERSION=tbb1d ADD_TBB=1 build_one\nbuild_tbb1d_debug:\n\t$(MAKE) VERSION=tbb1d ADD_TBB=1 ADD_DEBUG=1 build_one\nrun_tbb1d:\n\t$(MAKE) VERSION=tbb1d run_one\n\n\nperf_build:\n\t$(MAKE) UI=con VERSION=tbb ADD_TBB=1 build_one\nperf_run:\n\t$(MAKE) UI=con VERSION=tbb run_perf_one\n\nlight_test:\n\t$(MAKE) UI=con VERSION=tbb light_test_one\n\n\n#\n# Per-build Makefile rules (for recursive $(MAKE) calls from above)\n#\n\nSVERSION = $(VERSION)\n\nifeq ($(ADD_DEBUG),1)\nMYCXXFLAGS += -O0 -g -D_DEBUG\nelse\nMYCXXFLAGS += -O2 -DNDEBUG\nendif\n\n\nifeq ($(ADD_TBB),1)\nMYCXXFLAGS +=\nifeq ($(ADD_DEBUG),1)\nMYCXXFLAGS += -DTBB_USE_DEBUG\nLIBS += -ltbb_debug\nelse\nLIBS += -ltbb\nendif\nendif\n\nifeq ($(shell uname), Linux)\nLIBS += -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nSOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/main.cpp src/pthread.cpp src/tachyon_video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp\n\nbuild_one:\t$(EXE)\n\nrun_one:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nrun_perf_one:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n\nlight_test_one:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n\n$(EXE): $(SOURCE)\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME)$(SUFFIX).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME)$(SUFFIX).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME)$(SUFFIX).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\n\t$(CXX_UI) $(MYCXXFLAGS) $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS*\n\t$(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(MACUIOBJS) $(LIBS)\n\t$(RM) *.o\n\nclean: VERSION = *\nclean:\nifeq ($(UI),mac)\n\trm -rf $(NAME).*\nendif\n\t$(RM) $(EXE) *.o *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# The original source for this example is\n# Copyright (c) 1994-2008 John E. Stone\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. The name of the author may not be used to endorse or promote products\n#    derived from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n\n# Common Makefile that builds and runs example.\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)\n#UI = con\nUI = gdi\n#UI = dd\n\n# Machine architecture, auto-detected from TBB_TARGET_ARCH by default\n# Use XARCH variable to change it. See index.html for more information\nARCH0 = $(TBB_TARGET_ARCH)-\nARCH1 = $(ARCH0:ia32-=x86)\nARCH2 = $(ARCH1:intel64-=AMD64)\nXARCH = $(ARCH2:-=x86)\n\n# The default runtime arguments\nARGS = dat\\balls.dat\nPERF_RUN_ARGS = silent dat\\balls3.dat\nLIGHT_ARGS=dat\\model2.dat\n\n# Add these for tbb/tbb1d release builds\n# /GL is a workaround to prevent run-time crash when built by VS2010\nCXXFLAGS_TBB_NDEBUG = $(CXXFLAGS) /GL\nLIBS_TBB_NDEBUG = tbb.lib $(LIBS)\n\n# Add these for tbb/tbb1d debug builds\nCXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_USE_DEBUG\nLIBS_TBB_DEBUG =  tbb_debug.lib $(LIBS)\n\n\nMAKEINC = ../../common/gui/Makefile.win\n# scr/main.cpp src/tachyon_video.cpp cannot be included to the SOURCE_COMMON list since it depends on UI and /subsystem which is not specified for common SOURCE build\nSOURCE = src/main.cpp src/tachyon_video.cpp\nSOURCE_COMMON = src/pthread.cpp  src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp\n\n# Targets\nall: build run\nrelease: build\ndebug: build_debug\ntest: run\n\nbuild: build_serial build_tbb1d build_tbb\nbuild_debug: build_serial_debug build_tbb1d_debug build_tbb_debug\nrun: run_serial run_tbb1d run_tbb\n\nserial: build_serial run_serial\nserial_debug: build_serial_debug run_serial\ntbb: build_tbb run_tbb\ntbb_debug: build_tbb_debug run_tbb\ntbb1d: build_tbb1d run_tbb1d\ntbb1d_debug: build_tbb1d_debug run_tbb1d\n\nCXXFLAGS_COMMON = /c /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE /Foobj/ /MP $(CXXFLAGS)\nCXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG\nCXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG\nLIB_LINK_FLAGS = /nologo /machine:$(XARCH)\n\ntachyon_common.lib:\n\t@cmd.exe /C if not exist obj mkdir obj\n\t$(CXX) $(CXXFLAGS_NDEBUG) $(CXXFLAGS_COMMON) $(SOURCE_COMMON)\n\tLIB $(LIB_LINK_FLAGS) obj/*.obj /OUT:$@\n\t@cmd.exe /C if exist obj rmdir /S /Q obj\n\ntachyon_common_debug.lib:\n\t@cmd.exe /C if not exist obj mkdir obj\n\t$(CXX) $(CXXFLAGS_DEBUG) $(CXXFLAGS_COMMON) $(SOURCE_COMMON)\n\tLIB $(LIB_LINK_FLAGS) obj/*.obj /OUT:$@\n\t@cmd.exe /C if exist obj rmdir /S /Q obj\n\nbuild_serial: tachyon_common.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.serial.cpp $(SOURCE) tachyon_common.lib\" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"/GL $(CXXFLAGS)\" XARCH=$(XARCH) build_one\nbuild_serial_debug: tachyon_common_debug.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.serial.cpp $(SOURCE) tachyon_common_debug.lib\" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one\nrun_serial:\n\t-.\\tachyon.serial.exe $(ARGS)\n\nbuild_tbb: tachyon_common.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.tbb.cpp $(SOURCE) tachyon_common.lib\" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS_TBB_NDEBUG)\" LFLAGS=\"$(LIBS_TBB_NDEBUG)\" XARCH=$(XARCH) build_one\nbuild_tbb_debug: tachyon_common_debug.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.tbb.cpp $(SOURCE) tachyon_common_debug.lib\" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS_TBB_DEBUG)\" LFLAGS=\"$(LIBS_TBB_DEBUG)\" XARCH=$(XARCH) build_one\nrun_tbb:\n\t-.\\tachyon.tbb.exe $(ARGS)\n\nbuild_tbb1d: tachyon_common.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.tbb1d.cpp $(SOURCE) tachyon_common.lib\" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS_TBB_NDEBUG)\" LFLAGS=\"$(LIBS_TBB_NDEBUG)\" XARCH=$(XARCH) build_one\nbuild_tbb1d_debug: tachyon_common_debug.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.tbb1d.cpp $(SOURCE) tachyon_common_debug.lib\" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS_TBB_DEBUG)\" LFLAGS=\"$(LIBS_TBB_DEBUG)\" XARCH=$(XARCH) build_one\nrun_tbb1d:\n\t-.\\tachyon.tbb1d.exe $(ARGS)\n\n\nclean:\n\t@cmd.exe /C del tachyon.* *.manifest *.obj *.lib msvs\\gui.res *.?db\n\nperf_build: tachyon_common.lib\n\t@$(MAKE) -f $(MAKEINC) SOURCE=\"src/trace.tbb.cpp $(SOURCE) tachyon_common.lib\" EXE=tachyon.tbb.exe RCNAME=gui UI=con CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS_TBB_NDEBUG)\" LFLAGS=\"$(LIBS_TBB_NDEBUG)\" XARCH=$(XARCH) build_one\nperf_run:\n\t-.\\tachyon.tbb.exe $(PERF_RUN_ARGS)\n\nlight_test:\n\t-.\\tachyon.tbb.exe $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/gui.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\n#ifdef _WIN32\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_GUI   ICON                    \"gui.ico\"\nIDI_SMALL               ICON                    \"small.ico\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE \nBEGIN\n    IDS_APP_TITLE           \"gui\"\n    IDC_GUI   \"GUI\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/resource.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define IDC_MYICON                      2\n#define IDD_GUI    \t\t\t102\n#define IDS_APP_TITLE                   103\n#define IDI_GUI           \t\t107\n#define IDI_SMALL                       108\n#define IDC_GUI           \t\t109\n#define IDR_MAINFRAME                   128\n#define IDC_STATIC                      -1\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}</ProjectGuid>\n    <RootNamespace>tachyon.serial</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\serial\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\serial\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"tachyon.vcxproj\">\n      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>\n      <Private>false</Private>\n      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\src\\trace.serial.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/tachyon.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tachyon.tbb\", \"tachyon.tbb.vcxproj\", \"{6E9B1702-78E0-4D64-B771-8B274D963B58}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tachyon.common\", \"tachyon.vcxproj\", \"{924517DF-2B6A-47D5-8A11-CC247CC4D810}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tachyon.serial\", \"tachyon.serial.vcxproj\", \"{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tachyon.tbb1d\", \"tachyon.tbb1d.vcxproj\", \"{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\t_GDI Release|Win32 = _GDI Release|Win32\r\n\t\t_GDI Release|x64 = _GDI Release|x64\r\n\t\tDD Debug|Win32 = DD Debug|Win32\r\n\t\tDD Debug|x64 = DD Debug|x64\r\n\t\tDD Release|Win32 = DD Release|Win32\r\n\t\tDD Release|x64 = DD Release|x64\r\n\t\tGDI Debug|Win32 = GDI Debug|Win32\r\n\t\tGDI Debug|x64 = GDI Debug|x64\r\n\t\tDescription = Tachyon ray-tracer example\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DDDebug|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DDRelease|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DDRelease|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{6E9B1702-78E0-4D64-B771-8B274D963B58}</ProjectGuid>\n    <RootNamespace>tachyon.tbb</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"tachyon.vcxproj\">\n      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>\n      <Private>false</Private>\n      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\src\\trace.tbb.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}</ProjectGuid>\n    <RootNamespace>tachyon.tbb1d</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\tbb1d\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\tbb1d\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <ProgramDataBaseFileName>$(IntDir)%(Filename).pdb</ProgramDataBaseFileName>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"tachyon.vcxproj\">\n      <Project>{924517df-2b6a-47d5-8a11-cc247cc4d810}</Project>\n      <Private>false</Private>\n      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>\n      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\src\\trace.tbb1d.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/tachyon.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>tachyon.common</ProjectName>\n    <ProjectGuid>{924517DF-2B6A-47D5-8A11-CC247CC4D810}</ProjectGuid>\n    <RootNamespace>tachyon.common</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <InterproceduralOptimization>true</InterproceduralOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>false</WholeProgramOptimization>\n      <PreprocessorDefinitions>DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level2</WarningLevel>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\src\\api.cpp\" />\n    <ClCompile Include=\"..\\src\\apigeom.cpp\" />\n    <ClCompile Include=\"..\\src\\apitrigeom.cpp\" />\n    <ClCompile Include=\"..\\src\\bndbox.cpp\" />\n    <ClCompile Include=\"..\\src\\box.cpp\" />\n    <ClCompile Include=\"..\\src\\camera.cpp\" />\n    <ClCompile Include=\"..\\src\\coordsys.cpp\" />\n    <ClCompile Include=\"..\\src\\cylinder.cpp\" />\n    <ClCompile Include=\"..\\src\\extvol.cpp\" />\n    <ClCompile Include=\"..\\src\\global.cpp\" />\n    <ClCompile Include=\"..\\src\\grid.cpp\" />\n    <ClCompile Include=\"..\\src\\imageio.cpp\" />\n    <ClCompile Include=\"..\\src\\imap.cpp\" />\n    <ClCompile Include=\"..\\src\\intersect.cpp\" />\n    <ClCompile Include=\"..\\src\\jpeg.cpp\" />\n    <ClCompile Include=\"..\\src\\light.cpp\" />\n    <ClCompile Include=\"..\\src\\main.cpp\" />\n    <ClCompile Include=\"..\\src\\objbound.cpp\" />\n    <ClCompile Include=\"..\\src\\parse.cpp\" />\n    <ClCompile Include=\"..\\src\\plane.cpp\" />\n    <ClCompile Include=\"..\\src\\ppm.cpp\" />\n    <ClCompile Include=\"..\\src\\pthread.cpp\" />\n    <ClCompile Include=\"..\\src\\quadric.cpp\" />\n    <ClCompile Include=\"..\\src\\render.cpp\" />\n    <ClCompile Include=\"..\\src\\ring.cpp\" />\n    <ClCompile Include=\"..\\src\\shade.cpp\" />\n    <ClCompile Include=\"..\\src\\sphere.cpp\" />\n    <ClCompile Include=\"..\\src\\tachyon_video.cpp\" />\n    <ClCompile Include=\"..\\src\\texture.cpp\" />\n    <ClCompile Include=\"..\\src\\tgafile.cpp\" />\n    <ClCompile Include=\"..\\src\\trace_rest.cpp\" />\n    <ClCompile Include=\"..\\src\\triangle.cpp\" />\n    <ClCompile Include=\"..\\src\\ui.cpp\" />\n    <ClCompile Include=\"..\\src\\util.cpp\" />\n    <ClCompile Include=\"..\\src\\vector.cpp\" />\n    <ClCompile Include=\"..\\src\\vol.cpp\" />\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\d2dvideo.cpp\">\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">_WINDOWS;_DEBUG</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">_WINDOWS;_DEBUG</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">_WINDOWS;NDEBUG</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">_WINDOWS;NDEBUG</PreprocessorDefinitions>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\gdivideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">true</ExcludedFromBuild>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">_WINDOWS;_DEBUG</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">_WINDOWS;_DEBUG</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">_WINDOWS;NDEBUG</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">_WINDOWS;NDEBUG</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\src\\api.h\" />\n    <ClInclude Include=\"..\\src\\apitrigeom.h\" />\n    <ClInclude Include=\"..\\src\\bndbox.h\" />\n    <ClInclude Include=\"..\\src\\box.h\" />\n    <ClInclude Include=\"..\\src\\camera.h\" />\n    <ClInclude Include=\"..\\src\\coordsys.h\" />\n    <ClInclude Include=\"..\\src\\cylinder.h\" />\n    <ClInclude Include=\"..\\src\\extvol.h\" />\n    <ClInclude Include=\"..\\src\\global.h\" />\n    <ClInclude Include=\"..\\src\\grid.h\" />\n    <ClInclude Include=\"..\\src\\imageio.h\" />\n    <ClInclude Include=\"..\\src\\imap.h\" />\n    <ClInclude Include=\"..\\src\\intersect.h\" />\n    <ClInclude Include=\"..\\src\\jpeg.h\" />\n    <ClInclude Include=\"..\\src\\light.h\" />\n    <ClInclude Include=\"..\\src\\machine.h\" />\n    <ClInclude Include=\"..\\src\\macros.h\" />\n    <ClInclude Include=\"..\\src\\objbound.h\" />\n    <ClInclude Include=\"..\\src\\parse.h\" />\n    <ClInclude Include=\"..\\src\\plane.h\" />\n    <ClInclude Include=\"..\\src\\ppm.h\" />\n    <ClInclude Include=\"..\\src\\pthread.h\" />\n    <ClInclude Include=\"..\\src\\quadric.h\" />\n    <ClInclude Include=\"..\\src\\render.h\" />\n    <ClInclude Include=\"..\\msvs\\resource.h\" />\n    <ClInclude Include=\"..\\src\\ring.h\" />\n    <ClInclude Include=\"..\\src\\shade.h\" />\n    <ClInclude Include=\"..\\src\\sphere.h\" />\n    <ClInclude Include=\"..\\src\\tachyon_video.h\" />\n    <ClInclude Include=\"..\\src\\texture.h\" />\n    <ClInclude Include=\"..\\src\\tgafile.h\" />\n    <ClInclude Include=\"..\\src\\trace.h\" />\n    <ClInclude Include=\"..\\src\\triangle.h\" />\n    <ClInclude Include=\"..\\src\\types.h\" />\n    <ClInclude Include=\"..\\src\\ui.h\" />\n    <ClInclude Include=\"..\\src\\util.h\" />\n    <ClInclude Include=\"..\\src\\vector.h\" />\n    <ClInclude Include=\"..\\src\\vol.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\video.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\winvideo.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\msvs\\gui.ico\" />\n    <None Include=\"..\\msvs\\small.ico\" />\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"..\\msvs\\gui.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/App.xaml",
    "content": "﻿<Application\n    x:Class=\"tbbTachyon.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:tbbTachyon\">\n\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"DirectXPage.xaml.h\"\n\nusing namespace tbbTachyon;\n\nusing namespace Platform;\nusing namespace Windows::ApplicationModel;\nusing namespace Windows::ApplicationModel::Activation;\nusing namespace Windows::Foundation;\nusing namespace Windows::Foundation::Collections;\nusing namespace Windows::Storage;\nusing namespace Windows::UI::Xaml;\nusing namespace Windows::UI::Xaml::Controls;\nusing namespace Windows::UI::Xaml::Controls::Primitives;\nusing namespace Windows::UI::Xaml::Data;\nusing namespace Windows::UI::Xaml::Input;\nusing namespace Windows::UI::Xaml::Interop;\nusing namespace Windows::UI::Xaml::Media;\nusing namespace Windows::UI::Xaml::Navigation;\n\n#include \"src/tachyon_video.h\"\n\nApp::App()\n{\n    InitializeComponent();\n}\n\nvoid App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ pArgs)\n{\n    m_directXPage = ref new DirectXPage();\n\n    // Place the frame in the current Window and ensure that it is active\n    Window::Current->Content = m_directXPage;\n    Window::Current->Activate();\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#pragma once\n\n#include \"App.g.h\"\n#include \"DirectXPage.xaml.h\"\n\nnamespace tbbTachyon\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    ref class App sealed\n    {\n    public:\n        App();\n        virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ pArgs) override;\n\n    private:\n        DirectXPage^ m_directXPage;\n    };\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- Non-brush values that vary across themes -->\n    \n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Default\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</x:String>\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE0A6;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0C4;</x:String>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <!-- RichTextBlock styles -->\n\n    <Style x:Key=\"BasicRichTextStyle\" TargetType=\"RichTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BasicRichTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"ItemRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\"/>\n\n    <Style x:Key=\"BodyRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!-- Button styles -->\n\n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  This\n        style is used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid Background=\"Transparent\">\n                        <TextBlock\n                            x:Name=\"Text\"\n                            Text=\"{TemplateBinding Content}\"\n                            Margin=\"3,-7,3,10\"\n                            TextWrapping=\"NoWrap\"\n                            Style=\"{StaticResource SubheaderTextStyle}\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"RadioButton\">\n                    <Grid Background=\"Transparent\">\n                        <TextBlock\n                            x:Name=\"Text\"\n                            Text=\"{TemplateBinding Content}\"\n                            Margin=\"3,-7,3,10\"\n                            TextWrapping=\"NoWrap\"\n                            Style=\"{StaticResource SubheaderTextStyle}\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button for use in an App Bar.  Content will be centered and should fit within\n        the 40-pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text to simplify the use of glyphs\n        from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Standard App Bar buttons -->\n  \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"UnpinAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnpinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n  <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n  <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>   \n                </ToolTip>                \n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n        <Setter Property=\"ChildrenTransitions\">\n            <Setter.Value>\n                <TransitionCollection>\n                    <EntranceThemeTransition/>\n                </TransitionCollection>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"pch.h\"\n#include \"DirectXBase.h\" \n#include <windows.ui.xaml.media.dxinterop.h>\n#include <math.h>\n\nusing namespace Microsoft::WRL;\nusing namespace Windows::UI::Core;\nusing namespace Windows::UI::Xaml::Controls;\nusing namespace Windows::Foundation;\nusing namespace Windows::Graphics::Display;\nusing namespace D2D1;\n\n// Constructor.\nDirectXBase::DirectXBase() :\n    m_dpi(-1.0f)\n{\n}\n\n// Initialize the DirectX resources required to run.\nvoid DirectXBase::Initialize(CoreWindow^ window, SwapChainBackgroundPanel^ panel, float dpi)\n{\n    m_window = window;\n    m_panel = panel;\n\n    CreateDeviceIndependentResources();\n    CreateDeviceResources();\n    SetDpi(dpi);\n}\n\n// These are the resources required independent of the device.\nvoid DirectXBase::CreateDeviceIndependentResources()\n{\n    D2D1_FACTORY_OPTIONS options;\n    ZeroMemory(&options, sizeof(D2D1_FACTORY_OPTIONS));\n\n#if defined(_DEBUG)\n     // If the project is in a debug build, enable Direct2D debugging via SDK Layers\n    // TODO: investigate resource leaks reported by a debug version of a device.\n    // options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;\n#endif\n\n    DX::ThrowIfFailed(\n        D2D1CreateFactory(\n            D2D1_FACTORY_TYPE_SINGLE_THREADED,\n            __uuidof(ID2D1Factory1),\n            &options,\n            &m_d2dFactory\n            )\n        );\n\n    DX::ThrowIfFailed(\n        DWriteCreateFactory(\n            DWRITE_FACTORY_TYPE_SHARED,\n            __uuidof(IDWriteFactory),\n            &m_dwriteFactory\n            )\n        );\n\n    DX::ThrowIfFailed(\n        CoCreateInstance(\n            CLSID_WICImagingFactory,\n            nullptr,\n            CLSCTX_INPROC_SERVER,\n            IID_PPV_ARGS(&m_wicFactory)\n            )\n        );\n}\n\n// These are the resources that depend on the device.\nvoid DirectXBase::CreateDeviceResources()\n{\n    // This flag adds support for surfaces with a different color channel ordering than the API default.\n    // It is recommended usage, and is required for compatibility with Direct2D.\n    UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;\n    ComPtr<IDXGIDevice> dxgiDevice;\n\n#if defined(_DEBUG)\n    // If the project is in a debug build, enable debugging via SDK Layers with this flag.\n    creationFlags |= D3D11_CREATE_DEVICE_DEBUG;\n#endif\n\n    // This array defines the set of DirectX hardware feature levels this app will support.\n    // Note the ordering should be preserved.\n    // Don't forget to declare your application's minimum required feature level in its\n    // description.  All applications are assumed to support 9.1 unless otherwise stated.\n    D3D_FEATURE_LEVEL featureLevels[] = \n    {\n        D3D_FEATURE_LEVEL_11_1,\n        D3D_FEATURE_LEVEL_11_0,\n        D3D_FEATURE_LEVEL_10_1,\n        D3D_FEATURE_LEVEL_10_0,\n        D3D_FEATURE_LEVEL_9_3,\n        D3D_FEATURE_LEVEL_9_2,\n        D3D_FEATURE_LEVEL_9_1\n    };\n\n    // Create the DX11 API device object, and get a corresponding context.\n    ComPtr<ID3D11Device> device;\n    ComPtr<ID3D11DeviceContext> context;\n    DX::ThrowIfFailed(\n        D3D11CreateDevice(\n            nullptr,                    // specify null to use the default adapter\n            D3D_DRIVER_TYPE_HARDWARE,\n            0,                          // leave as 0 unless software device\n            creationFlags,              // optionally set debug and Direct2D compatibility flags\n            featureLevels,              // list of feature levels this app can support\n            ARRAYSIZE(featureLevels),   // number of entries in above list\n            D3D11_SDK_VERSION,          // always set this to D3D11_SDK_VERSION for Metro style apps\n            &device,                    // returns the Direct3D device created\n            &m_featureLevel,            // returns feature level of device created\n            &context                    // returns the device immediate context\n            )\n        );\n    // Get the DirectX11.1 device by QI off the DirectX11 one.\n    DX::ThrowIfFailed(\n        device.As(&m_d3dDevice)\n        );\n\n    // And get the corresponding device context in the same way.\n    DX::ThrowIfFailed(\n        context.As(&m_d3dContext)\n        );\n\n    // Obtain the underlying DXGI device of the Direct3D11.1 device.\n    DX::ThrowIfFailed(\n        m_d3dDevice.As(&dxgiDevice)\n        );\n\n    // Obtain the Direct2D device for 2-D rendering.\n    DX::ThrowIfFailed(\n        m_d2dFactory->CreateDevice(dxgiDevice.Get(), &m_d2dDevice)\n        );\n\n    // And get its corresponding device context object.\n    DX::ThrowIfFailed(\n        m_d2dDevice->CreateDeviceContext(\n            D2D1_DEVICE_CONTEXT_OPTIONS_NONE,\n            &m_d2dContext\n            )\n        );\n\n    // Release the swap chain (if it exists) as it will be incompatible with the new device.\n    m_swapChain = nullptr;\n}\n\n// Helps track the DPI in the helper class.\n// This is called in the dpiChanged event handler in the view class.\nvoid DirectXBase::SetDpi(float dpi)\n{\n    if (dpi != m_dpi)\n    {\n        // Save the DPI of this display in our class.\n        m_dpi = dpi;\n        \n        // Update Direct2D's stored DPI.\n        m_d2dContext->SetDpi(m_dpi, m_dpi);\n\n        // Often a DPI change implies a window size change. In some cases Windows will issues\n        // both a size changed event and a DPI changed event. In this case, the resulting bounds \n        // will not change, and the window resize code will only be executed once.\n        UpdateForWindowSizeChange();\n    }\n}\n\n// This routine is called in the event handler for the view SizeChanged event.\nvoid DirectXBase::UpdateForWindowSizeChange()\n{\n    // Only handle window size changed if there is no pending DPI change.\n    if (m_dpi != DisplayProperties::LogicalDpi)\n        return;\n\n    if (m_window->Bounds.Width  != m_windowBounds.Width ||\n        m_window->Bounds.Height != m_windowBounds.Height)\n    {\n        m_d2dContext->SetTarget(nullptr);\n        m_d2dTargetBitmap = nullptr;\n        m_renderTargetView = nullptr;\n        m_depthStencilView = nullptr;\n        CreateWindowSizeDependentResources();\n    }\n}\n\n// Allocate all memory resources that change on a window SizeChanged event.\nvoid DirectXBase::CreateWindowSizeDependentResources()\n{\n    // Store the window bounds so the next time we get a SizeChanged event we can\n    // avoid rebuilding everything if the size is identical.\n    m_windowBounds = m_window->Bounds;\n\n    // Calculate the necessary swap chain and render target size in pixels.\n    m_renderTargetSize.Width = ConvertDipsToPixels(m_windowBounds.Width);\n    m_renderTargetSize.Height = ConvertDipsToPixels(m_windowBounds.Height);\n\n    // If the swap chain already exists, resize it.\n    if (m_swapChain != nullptr)\n    {\n        DX::ThrowIfFailed(\n            m_swapChain->ResizeBuffers(\n                2,\n                static_cast<UINT>(m_renderTargetSize.Width),\n                static_cast<UINT>(m_renderTargetSize.Height),\n                DXGI_FORMAT_B8G8R8A8_UNORM,\n                0\n                )\n            );\n    }\n    // Otherwise, create a new one.\n    else\n    {\n        // Allocate a descriptor.\n        DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};\n        swapChainDesc.Width = static_cast<UINT>(m_renderTargetSize.Width); // Match the size of the windowm.\n        swapChainDesc.Height = static_cast<UINT>(m_renderTargetSize.Height);\n        swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;           // This is the most common swapchain format.\n        swapChainDesc.Stereo = false; \n        swapChainDesc.SampleDesc.Count = 1;                          // Don't use multi-sampling.\n        swapChainDesc.SampleDesc.Quality = 0;\n        swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\n        swapChainDesc.BufferCount = 2;                               // Use double buffering to enable flip.\n        swapChainDesc.Scaling = DXGI_SCALING_STRETCH;\n        swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Metro style apps must use this SwapEffect.\n        swapChainDesc.Flags = 0;\n\n        // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device.\n\n        // First, retrieve the underlying DXGI Device from the D3D Device.\n        ComPtr<IDXGIDevice1> dxgiDevice;\n        DX::ThrowIfFailed(\n            m_d3dDevice.As(&dxgiDevice)\n            );\n\n        // Identify the physical adapter (GPU or card) this device is running on.\n        ComPtr<IDXGIAdapter> dxgiAdapter;\n        DX::ThrowIfFailed(\n            dxgiDevice->GetAdapter(&dxgiAdapter)\n            );\n\n        // And obtain the factory object that created it.\n        ComPtr<IDXGIFactory2> dxgiFactory;\n        DX::ThrowIfFailed(\n            dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory))\n            );\n\n        // Create the swap chain and then associate it with the SwapChainBackgroundPanel.\n        DX::ThrowIfFailed(\n            dxgiFactory->CreateSwapChainForComposition(\n                m_d3dDevice.Get(),\n                &swapChainDesc,\n                nullptr,\n                &m_swapChain\n                )\n            );\n\n        ComPtr<ISwapChainBackgroundPanelNative> panelNative;\n        DX::ThrowIfFailed(\n            reinterpret_cast<IUnknown*>(m_panel)->QueryInterface(IID_PPV_ARGS(&panelNative))\n            );\n        \n        DX::ThrowIfFailed(\n            panelNative->SetSwapChain(m_swapChain.Get())\n            );\n\n        // Ensure that DXGI does not queue more than one frame at a time. This both reduces \n        // latency and ensures that the application will only render after each VSync, minimizing \n        // power consumption.\n        DX::ThrowIfFailed(\n            dxgiDevice->SetMaximumFrameLatency(1)\n            );\n    }\n\n    // Obtain the backbuffer for this window which will be the final 3D rendertarget.\n    ComPtr<ID3D11Texture2D> backBuffer;\n    DX::ThrowIfFailed(\n        m_swapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer))\n        );\n\n    // Create a view interface on the rendertarget to use on bind.\n    DX::ThrowIfFailed(\n        m_d3dDevice->CreateRenderTargetView(\n            backBuffer.Get(),\n            nullptr,\n            &m_renderTargetView\n            )\n        );\n\n    // Create a descriptor for the depth/stencil buffer.\n    CD3D11_TEXTURE2D_DESC depthStencilDesc(\n        DXGI_FORMAT_D24_UNORM_S8_UINT, \n        static_cast<UINT>(m_renderTargetSize.Width),\n        static_cast<UINT>(m_renderTargetSize.Height),\n        1,\n        1,\n        D3D11_BIND_DEPTH_STENCIL\n        );\n\n    // Allocate a 2-D surface as the depth/stencil buffer.\n    ComPtr<ID3D11Texture2D> depthStencil;\n    DX::ThrowIfFailed(\n        m_d3dDevice->CreateTexture2D(\n            &depthStencilDesc,\n            nullptr,\n            &depthStencil\n            )\n        );\n\n    // Create a DepthStencil view on this surface to use on bind.\n    CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D);\n    DX::ThrowIfFailed(\n        m_d3dDevice->CreateDepthStencilView(\n            depthStencil.Get(),\n            &depthStencilViewDesc,\n            &m_depthStencilView\n            )\n        );\n\n    // Create a viewport descriptor of the full window size.\n    CD3D11_VIEWPORT viewport(\n        0.0f,\n        0.0f,\n        m_renderTargetSize.Width,\n        m_renderTargetSize.Height\n        );\n\n    // Set the current viewport using the descriptor.\n    m_d3dContext->RSSetViewports(1, &viewport);\n\n    // Now we set up the Direct2D render target bitmap linked to the swapchain. \n    // Whenever we render to this bitmap, it will be directly rendered to the \n    // swapchain associated with the window.\n    D2D1_BITMAP_PROPERTIES1 bitmapProperties = \n        BitmapProperties1(\n            D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,\n            PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED),\n            m_dpi,\n            m_dpi\n            );\n\n    // Direct2D needs the DXGI version of the backbuffer surface pointer.\n    ComPtr<IDXGISurface> dxgiBackBuffer;\n    DX::ThrowIfFailed(\n        m_swapChain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer))\n        );\n\n    // Get a D2D surface from the DXGI back buffer to use as the D2D render target.\n    DX::ThrowIfFailed(\n        m_d2dContext->CreateBitmapFromDxgiSurface(\n            dxgiBackBuffer.Get(),\n            &bitmapProperties,\n            &m_d2dTargetBitmap\n            )\n        );\n\n    // So now we can set the Direct2D render target.\n    m_d2dContext->SetTarget(m_d2dTargetBitmap.Get());\n\n    // Set D2D text anti-alias mode to Grayscale to ensure proper rendering of text on intermediate surfaces.\n    m_d2dContext->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);\n}\n\n// Method to deliver the final image to the display.\nvoid DirectXBase::Present()\n{\n    // The application may optionally specify \"dirty\" or \"scroll\" rects to improve efficiency\n    // in certain scenarios.\n    DXGI_PRESENT_PARAMETERS parameters = {0};\n    parameters.DirtyRectsCount = 0;\n    parameters.pDirtyRects = nullptr;\n    parameters.pScrollRect = nullptr;\n    parameters.pScrollOffset = nullptr;\n    \n    // The first argument instructs DXGI to block until VSync, putting the application\n    // to sleep until the next VSync. This ensures we don't waste any cycles rendering\n    // frames that will never be displayed to the screen.\n    HRESULT hr = m_swapChain->Present1(1, 0, &parameters);\n\n    // If the device was removed either by a disconnect or a driver upgrade, we \n    // must completely reinitialize the renderer.\n    if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)\n    {\n        Initialize(m_window.Get(), m_panel, m_dpi);\n    }\n    else\n    {\n        DX::ThrowIfFailed(hr);\n    }\n}\n\n// Method to convert a length in device-independent pixels (DIPs) to a length in physical pixels.\nfloat DirectXBase::ConvertDipsToPixels(float dips)\n{\n    static const float dipsPerInch = 96.0f;\n    return floor(dips * m_dpi / dipsPerInch + 0.5f); // Round to nearest integer.\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#pragma once\n\n#include <wrl/client.h>\n#include <d3d11_1.h>\n#include <d2d1_1.h>\n#include <d2d1effects.h>\n#include <dwrite_1.h>\n#include <wincodec.h>\n#include \"App.xaml.h\"\n#include <agile.h>\n\n#pragma warning (disable: 4449)\n\n// Helper utilities to make DirectX APIs work with exceptions\nnamespace DX\n{\n    inline void ThrowIfFailed(HRESULT hr)\n    {\n        if (FAILED(hr))\n        {\n            // Set a breakpoint on this line to catch DirectX API errors\n            throw Platform::Exception::CreateException(hr);\n        }\n    }\n}\n\n// Helper class that initializes DirectX APIs\nref class DirectXBase abstract\n{\ninternal:\n    DirectXBase();\n\npublic:\n    virtual void Initialize(Windows::UI::Core::CoreWindow^ window, Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ panel, float dpi);\n    virtual void CreateDeviceIndependentResources();\n    virtual void CreateDeviceResources();\n    virtual void SetDpi(float dpi);\n    virtual void CreateWindowSizeDependentResources();\n    virtual void UpdateForWindowSizeChange();\n    virtual void Render() = 0;\n    virtual void Present();\n    virtual float ConvertDipsToPixels(float dips);\n\nprotected private:\n\n    Platform::Agile<Windows::UI::Core::CoreWindow>         m_window;\n    Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ m_panel;\n\n    // Direct2D Objects\n    Microsoft::WRL::ComPtr<ID2D1Factory1>                  m_d2dFactory;\n    Microsoft::WRL::ComPtr<ID2D1Device>                    m_d2dDevice;\n    Microsoft::WRL::ComPtr<ID2D1DeviceContext>             m_d2dContext;\n    Microsoft::WRL::ComPtr<ID2D1Bitmap1>                   m_d2dTargetBitmap;\n\n    // DirectWrite & Windows Imaging Component Objects\n    Microsoft::WRL::ComPtr<IDWriteFactory1>                m_dwriteFactory;\n    Microsoft::WRL::ComPtr<IWICImagingFactory2>            m_wicFactory;\n\n    // Direct3D Objects\n    Microsoft::WRL::ComPtr<ID3D11Device1>                  m_d3dDevice;\n    Microsoft::WRL::ComPtr<ID3D11DeviceContext1>           m_d3dContext;\n    Microsoft::WRL::ComPtr<IDXGISwapChain1>                m_swapChain;\n    Microsoft::WRL::ComPtr<ID3D11RenderTargetView>         m_renderTargetView;\n    Microsoft::WRL::ComPtr<ID3D11DepthStencilView>         m_depthStencilView;\n\n    D3D_FEATURE_LEVEL                                      m_featureLevel;\n    Windows::Foundation::Size                              m_renderTargetSize;\n    Windows::Foundation::Rect                              m_windowBounds;\n    float                                                  m_dpi;\n};\n\n#pragma warning (default: 4449)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml",
    "content": "﻿<SwapChainBackgroundPanel\n    x:Class=\"tbbTachyon.DirectXPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:tbbTachyon\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    >\n    <SwapChainBackgroundPanel.RowDefinitions>\n        <RowDefinition Height=\"15*\"/>\n        <RowDefinition Height=\"17*\"/>\n    </SwapChainBackgroundPanel.RowDefinitions>\n    <Page Grid.RowSpan=\"2\" Background=\"Black\" MinHeight=\"100\" MaxHeight=\"100\">\n        <Page.BottomAppBar>\n            <AppBar Padding=\"10,0,10,0\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\" />\n                        <ColumnDefinition Width=\"100\" />\n                        <ColumnDefinition Width=\"100\" />\n                    </Grid.ColumnDefinitions>\n                    <TextBlock Grid.Column=\"0\" x:Name=\"NumberOfThreadsTextBlock\" Text=\"Number Of Threads: Auto\" TextAlignment=\"Center\" TextWrapping=\"Wrap\" Height=\"54\" FontSize=\"20\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Center\"/>\n                    <Slider Grid.Column=\"0\" x:Name=\"ThreadsSlider\" Minimum=\"0\" Maximum=\"16\" TickFrequency=\"1\" TickPlacement=\"Outside\" ValueChanged=\"ThreadsSliderValueChanged\" Height=\"37\" StepFrequency=\"1\" IsThumbToolTipEnabled=\"False\" />\n                    <Button Grid.Column=\"1\" x:Name=\"ThreadsApply\" Style=\"{StaticResource YesAppBarButtonStyle}\" Tag=\"Apply this number of threads\" AutomationProperties.Name=\"Apply\" Click=\"ThreadsApply_Click\" HorizontalAlignment=\"Right\" Visibility=\"Collapsed\"/>\n                    <Button Grid.Column=\"2\" x:Name=\"Exit\" Style=\"{StaticResource NoAppBarButtonStyle}\" Tag=\"Exit\" Click=\"Exit_Click\" AutomationProperties.Name=\"Exit\" HorizontalAlignment=\"Right\" />\n                </Grid>\n            </AppBar>\n        </Page.BottomAppBar>\n    </Page>\n</SwapChainBackgroundPanel>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#include \"pch.h\"\n#include \"DirectXPage.xaml.h\"\n#include \"tbb/tbb.h\"\n\nusing namespace tbbTachyon;\n\nusing namespace Platform;\nusing namespace Windows::Foundation;\nusing namespace Windows::Foundation::Collections;\nusing namespace Windows::UI::Input;\nusing namespace Windows::UI::Core;\nusing namespace Windows::UI::Xaml;\nusing namespace Windows::UI::Xaml::Controls;\nusing namespace Windows::UI::Xaml::Controls::Primitives;\nusing namespace Windows::UI::Xaml::Data;\nusing namespace Windows::UI::Xaml::Input;\nusing namespace Windows::UI::Xaml::Media;\nusing namespace Windows::UI::Xaml::Navigation;\nusing namespace Windows::Graphics::Display;\n\n#include \"src/tachyon_video.h\"\nextern int volatile global_number_of_threads;\nextern volatile bool global_isCancelled;\n\n#pragma intrinsic(_BitScanReverse)\nstatic int log2( unsigned int x ) {\n    DWORD i;\n    _BitScanReverse(&i,(DWORD)x);\n    return (int)i;\n}\n\nconst unsigned interval_step_power = 1;\nconst unsigned num_interval_steps = 1 << (interval_step_power+1);\n\nDirectXPage::DirectXPage() :\n    m_renderNeeded(true)\n{\n    InitializeComponent();\n\n    m_renderer = ref new tbbTachyonRenderer();\n\n    m_renderer->Initialize(\n        Window::Current->CoreWindow,\n        this,\n        DisplayProperties::LogicalDpi\n        );\n\n    m_eventToken = CompositionTarget::Rendering::add(ref new EventHandler<Object^>(this, &DirectXPage::OnRendering));\n\n    int num_threads = 2*tbb::task_scheduler_init::default_num_threads();\n    // The thread slider has geometric sequence with several intermidiate steps for each interval between 2^N and 2^(N+1).\n    // The nearest (from below) the power of 2.\n    int i_base = log2(num_threads);\n    int base = 1 << i_base;\n    // The step size for the current interval.\n    int step = base / num_interval_steps;\n    // The number of steps inside the interval.\n    int i_step = (num_threads-base)/step;\n\n    ThreadsSlider->Maximum = (i_base-interval_step_power)*num_interval_steps + i_step;\n    global_number_of_threads = m_number_of_threads = tbb::task_scheduler_init::automatic;\n}\n\nDirectXPage::~DirectXPage()\n{\n}\n\nvoid DirectXPage::OnRendering(Platform::Object^ sender, Platform::Object^ args)\n{\n    if (m_renderNeeded){\n        m_renderer->Render();\n        m_renderer->Present();\n        m_renderNeeded = true;\n    }\n}\n\nvoid tbbTachyon::DirectXPage::ThreadsApply_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)\n{\n    if (global_number_of_threads != m_number_of_threads){\n        global_number_of_threads = m_number_of_threads;\n        global_isCancelled = true;\n        video->running = false;\n        m_renderNeeded = true;\n        ThreadsApply->Visibility=Windows::UI::Xaml::Visibility::Collapsed;\n    }\n}\n\nvoid tbbTachyon::DirectXPage::Exit_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)\n{\n    m_renderNeeded = false;\n    Application::Current->Exit();\n}\n\nvoid tbbTachyon::DirectXPage::ThreadsSliderValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e)\n{\n    int pos = (int) e->NewValue;\n\n    // The nearest (from below) the power of 2.\n    int base = pos<num_interval_steps ? 0 : 1 << (pos/num_interval_steps+interval_step_power);\n    // The step size for the current interval.\n    int step = max(1,base/num_interval_steps);\n    m_number_of_threads = base + (pos%num_interval_steps)*step;\n\n    if (m_number_of_threads == 0) m_number_of_threads = tbb::task_scheduler_init::automatic;\n\n    NumberOfThreadsTextBlock->Text=\"Number Of Threads: \" + (m_number_of_threads == tbb::task_scheduler_init::automatic? \"Auto\": m_number_of_threads.ToString());\n    if (global_number_of_threads != m_number_of_threads){\n        ThreadsApply->Visibility=Windows::UI::Xaml::Visibility::Visible;\n    }else{\n        ThreadsApply->Visibility=Windows::UI::Xaml::Visibility::Collapsed;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#pragma once\n\n#include \"DirectXPage.g.h\"\n#include \"tbbTachyonRenderer.h\"\n\nnamespace tbbTachyon\n{\n    [Windows::Foundation::Metadata::WebHostHidden]\n    public ref class DirectXPage sealed\n    {\n    public:\n        DirectXPage();\n\n    private:\n        ~DirectXPage();\n        void OnRendering(Object^ sender, Object^ args);\n\n        Windows::Foundation::EventRegistrationToken m_eventToken;\n\n        tbbTachyonRenderer^ m_renderer;\n        bool m_renderNeeded;\n        int m_number_of_threads;\n\n        void ThreadsSliderValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e);\n        void ThreadsApply_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);\n        void Exit_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);\n    };\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"36816596-d167-42e1-bcc0-cd3ec4577997\" Publisher=\"CN=tbbtest\" Version=\"1.0.0.18\" />\n  <Properties>\n    <DisplayName>Tachyon Demo</DisplayName>\n    <PublisherDisplayName>test</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.0</OSMinVersion>\n    <OSMaxVersionTested>6.2.0</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"tbbTachyon.App\">\n      <VisualElements DisplayName=\"Tachyon Demo\" Logo=\"Assets\\Logo.png\" SmallLogo=\"Assets\\SmallLogo.png\" Description=\"Tachyon Demo demostrates how to use Intel(R) Threading Building Blocks library for Windows Store applications.\" ForegroundText=\"light\" BackgroundColor=\"#464646\">\n        <DefaultTile ShowName=\"allLogos\" />\n        <SplashScreen Image=\"Assets\\SplashScreen.png\" />\n        <InitialRotationPreference>\n          <Rotation Preference=\"landscape\" />\n        </InitialRotationPreference>\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat",
    "content": "@echo on\r\nREM\r\nREM Copyright (c) 2005-2018 Intel Corporation\r\nREM\r\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\r\nREM you may not use this file except in compliance with the License.\r\nREM You may obtain a copy of the License at\r\nREM\r\nREM     http://www.apache.org/licenses/LICENSE-2.0\r\nREM\r\nREM Unless required by applicable law or agreed to in writing, software\r\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\r\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nREM See the License for the specific language governing permissions and\r\nREM limitations under the License.\r\nREM\r\nREM\r\nREM\r\nREM\r\nREM\r\n:: Getting parameters\r\n:: Architecture\r\nif (\"%1\") == (\"\") goto error0\r\n:: Release/Debug\r\nif (\"%2\") == (\"\") goto error0\r\n:: Output directory\r\nif (%3) == (\"\") goto error0\r\nset arch=%1\r\nif (\"%2\") == (\"debug\") set postfix=_debug\r\nset output_dir=\"%3\"\r\nif (\"%4\") == (\"\") set dat_file=\"%output_dir%\\..\\..\\dat\\balls.dat\"\r\n\r\n:: Actually we can set install root by ourselves\r\nif (\"%TBBROOT%\") == (\"\") set TBBROOT=%~dp0..\\..\\..\\..\\..\\\r\n\r\n:: ordered from oldest to newest, so we end with newest available version\r\nif (\"%VS110COMNTOOLS%\") NEQ (\"\") set vc_dir=vc11_ui\r\nif (\"%VS120COMNTOOLS%\") NEQ (\"\") set vc_dir=vc12_ui\r\necho Using %vc_dir% libraries\r\n\r\nif exist \"%TBBROOT%\\bin\\%arch%\\%vc_dir%\\tbb%postfix%.dll\" set interim_path=bin\\%arch%\r\nif exist \"%TBBROOT%..\\redist\\%arch%\\tbb\\%vc_dir%\\tbb%postfix%.dll\" set interim_path=..\\redist\\%arch%\\tbb\r\nif exist \"%TBBROOT%\\lib\\%arch%\\%vc_dir%\\tbb%postfix%.lib\" set interim_lib_path=lib\\%arch%\r\nif (\"%interim_path%\") == (\"\") goto error1\r\nif (\"%interim_lib_path%\") == (\"\") goto error1\r\n\r\n:: We know everything we wanted and there are no errors\r\n:: Copying binaries\r\n\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb%postfix%.dll\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbb%postfix%.pdb\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbbmalloc%postfix%.dll\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_path%\\%vc_dir%\\tbbmalloc%postfix%.pdb\" \"%output_dir%\"\r\ncopy \"%TBBROOT%\\%interim_lib_path%\\%vc_dir%\\tbb%postfix%.lib\" \"%output_dir%\"\r\n\r\n:: Copying DAT-file\r\necho Using DAT-file %dat_file%\r\nif exist %dat_file% copy %dat_file% \"%output_dir%\\Assets\\balls.dat\"\r\n\r\ngoto end\r\n:error0\r\necho Custom build script usage: %0 [ia32 or intel64] [release or debug] [output dir] [dat-file]\r\nexit /B 1\r\n:error1\r\necho Could not determine path to Intel TBB libraries\r\nexit /B 1\r\n\r\n:end\r\nexit /B 0\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/pch.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#pragma once\n\n#include <wrl/client.h>\n#include <d3d11_1.h>\n#include <d2d1_1.h>\n#include <d2d1effects.h>\n#include <dwrite_1.h>\n#include <wincodec.h>\n#include \"App.xaml.h\"\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tbbTachyon\", \"tbbTachyon.vcxproj\", \"{E20CB432-6730-4021-A372-1C81A333518A}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{E6DDEA39-7910-47F9-A0E3-56AD7E62ACBD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|Win32.Deploy.0 = Debug|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Debug|x64.Deploy.0 = Debug|x64\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|Win32.Deploy.0 = Release|Win32\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|x64.Build.0 = Release|x64\r\n\t\t{E20CB432-6730-4021-A372-1C81A333518A}.Release|x64.Deploy.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{e20cb432-6730-4021-a372-1c81a333518a}</ProjectGuid>\n    <RootNamespace>tbbTachyon</RootNamespace>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <VCTargetsPath Condition=\"'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''\">$(VCTargetsPath11)</VCTargetsPath>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <AppContainerApplication>true</AppContainerApplication>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <UseIntelTBB>true</UseIntelTBB>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v120</PlatformToolset>\n    <UseIntelTBB>true</UseIntelTBB>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n    <UseIntelTBB>true</UseIntelTBB>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n    <UseIntelTBB>true</UseIntelTBB>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <PackageCertificateKeyFile>tbbTachyon_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>\n    <PackageCertificateThumbprint>5E3EA4A6008AD66D2487EFC68BB366981685295D</PackageCertificateThumbprint>\n  </PropertyGroup>\n  <ItemDefinitionGroup>\n    <Link>\n      <AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; ole32.lib; windowscodecs.lib; dwrite.lib; dxguid.lib; %(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>\n      <LinkTimeCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">Default</LinkTimeCodeGeneration>\n      <LinkTimeCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">Default</LinkTimeCodeGeneration>\n      <LinkTimeCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">Default</LinkTimeCodeGeneration>\n      <LinkTimeCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">Default</LinkTimeCodeGeneration>\n    </Link>\n    <ClCompile>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>\n      <AdditionalIncludeDirectories>$(ProjectDir)\\..\\..\\..\\..\\common;$(ProjectDir)\\..\\..;$(ProjectDir)\\..\\..\\..\\..\\..\\include;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">NotUsing</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">NotUsing</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">NotUsing</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">NotUsing</PrecompiledHeader>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">_DEBUG;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <UseMSVC Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</UseMSVC>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"App.xaml.h\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </ClInclude>\n    <ClInclude Include=\"DirectXPage.xaml.h\">\n      <DependentUpon>DirectXPage.xaml</DependentUpon>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"DirectXPage.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"Assets\\balls.dat\">\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</DeploymentContent>\n    </None>\n    <CustomBuild Include=\"copy_libraries_and_assets.bat\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">call \"$(SolutionDir)\\copy_libraries_and_assets.bat\" ia32 release \"$(SolutionDir)\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">call \"$(SolutionDir)\\copy_libraries_and_assets.bat\" ia32 debug \"$(SolutionDir)\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">call \"$(SolutionDir)\\copy_libraries_and_assets.bat\" intel64 debug \"$(SolutionDir)\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">call \"$(SolutionDir)\\copy_libraries_and_assets.bat\" intel64 release \"$(SolutionDir)\"</Command>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">Copying libraries to the solution...</Message>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">Copying libraries to the solution...</Message>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">Copying libraries to the solution...</Message>\n      <Message Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">Copying libraries to the solution...</Message>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</TreatOutputAsContent>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</TreatOutputAsContent>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</TreatOutputAsContent>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</TreatOutputAsContent>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">tbb_debug.dll</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">tbb_debug.dll</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">tbb.dll</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">tbb.dll</Outputs>\n    </CustomBuild>\n    <None Include=\"tbb.dll\">\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</DeploymentContent>\n      <FileType>CppCode</FileType>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</DeploymentContent>\n    </None>\n    <None Include=\"tbbmalloc.dll\">\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</DeploymentContent>\n      <FileType>CppCode</FileType>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</DeploymentContent>\n    </None>\n    <None Include=\"tbbmalloc_debug.dll\">\n      <FileType>CppCode</FileType>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</DeploymentContent>\n    </None>\n    <None Include=\"tbbTachyon_TemporaryKey.pfx\" />\n    <None Include=\"tbb_debug.dll\">\n      <FileType>CppCode</FileType>\n      <DeploymentContent>true</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</DeploymentContent>\n      <DeploymentContent Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</DeploymentContent>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"Assets\\Logo.png\" />\n    <Image Include=\"Assets\\SmallLogo.png\" />\n    <Image Include=\"Assets\\StoreLogo.png\" />\n    <Image Include=\"Assets\\SplashScreen.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\".\\tbbTachyonRenderer.h\" />\n    <ClInclude Include=\"DirectXBase.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\..\\..\\..\\common\\gui\\convideo.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\api.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\apigeom.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\apitrigeom.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\bndbox.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\box.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\camera.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\coordsys.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\cylinder.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\extvol.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\global.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\grid.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\imageio.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\imap.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\intersect.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\jpeg.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\light.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\main.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\objbound.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\parse.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\plane.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\ppm.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\pthread.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\quadric.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\render.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\ring.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\shade.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\sphere.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tachyon_video.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\texture.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\tgafile.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\trace.tbb.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\trace_rest.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\triangle.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\ui.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\util.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\vector.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\vol.cpp\" />\n    <ClCompile Include=\".\\tbbTachyonRenderer.cpp\" />\n    <ClCompile Include=\"DirectXBase.cpp\" />\n    <ClCompile Include=\"App.xaml.cpp\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </ClCompile>\n    <ClCompile Include=\"DirectXPage.xaml.cpp\">\n      <DependentUpon>DirectXPage.xaml</DependentUpon>\n    </ClCompile>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Filter>Resources\\Common</Filter>\n    </Page>\n    <Image Include=\"Assets\\Logo.png\">\n      <Filter>Resources\\Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\SmallLogo.png\">\n      <Filter>Resources\\Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\StoreLogo.png\">\n      <Filter>Resources\\Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\SplashScreen.png\">\n      <Filter>Resources\\Assets</Filter>\n    </Image>\n    <Filter Include=\"Resources\">\n      <UniqueIdentifier>{a5d732ac-1380-4b99-910c-c5685c48ec08}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resources\\Common\">\n      <UniqueIdentifier>e20cb432-6730-4021-a372-1c81a333518a</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Resources\\Assets\">\n      <UniqueIdentifier>ac5c7e6e-0221-4a78-85c7-20768e92cf5a</UniqueIdentifier>\n    </Filter>\n    <Page Include=\"DirectXPage.xaml\">\n      <Filter>Frontend</Filter>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"App.xaml.cpp\" />\n    <ClCompile Include=\"DirectXPage.xaml.cpp\" />\n    <ClCompile Include=\"..\\..\\src\\api.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\apigeom.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\apitrigeom.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\bndbox.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\box.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\camera.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\coordsys.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\cylinder.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\extvol.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\global.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\grid.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\imageio.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\imap.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\intersect.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\jpeg.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\light.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\objbound.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\parse.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\plane.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\ppm.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\pthread.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\quadric.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\render.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\ring.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\shade.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\sphere.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\tachyon_video.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\texture.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\tgafile.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\trace.tbb.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\trace_rest.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\triangle.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\ui.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\util.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\vector.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\vol.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\..\\common\\gui\\convideo.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\src\\main.cpp\">\n      <Filter>Backend</Filter>\n    </ClCompile>\n    <ClCompile Include=\"DirectXBase.cpp\">\n      <Filter>Frontend</Filter>\n    </ClCompile>\n    <ClCompile Include=\".\\tbbTachyonRenderer.cpp\">\n      <Filter>Frontend</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"App.xaml.h\" />\n    <ClInclude Include=\"DirectXPage.xaml.h\" />\n    <ClInclude Include=\"DirectXBase.h\">\n      <Filter>Frontend</Filter>\n    </ClInclude>\n    <ClInclude Include=\".\\tbbTachyonRenderer.h\">\n      <Filter>Frontend</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\balls.dat\">\n      <Filter>Resources\\Assets</Filter>\n    </None>\n    <None Include=\"tbb.dll\">\n      <Filter>Libraries</Filter>\n    </None>\n    <None Include=\"tbbmalloc.dll\">\n      <Filter>Libraries</Filter>\n    </None>\n    <None Include=\"tbb_debug.dll\">\n      <Filter>Libraries</Filter>\n    </None>\n    <None Include=\"tbbmalloc_debug.dll\">\n      <Filter>Libraries</Filter>\n    </None>\n    <None Include=\"tbbTachyon_TemporaryKey.pfx\">\n      <Filter>Frontend</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Filter Include=\"Libraries\">\n      <UniqueIdentifier>{a70d1cf5-5cc8-4f50-a6d2-92d2b973df86}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Scripts\">\n      <UniqueIdentifier>{eb414f7a-2d2d-4ff5-93fe-458cc3021423}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Backend\">\n      <UniqueIdentifier>{77eb2f1c-7dec-4360-8989-e9ad18034e10}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"Frontend\">\n      <UniqueIdentifier>{d825a994-3d08-4764-9945-ec9aafc1f496}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"copy_libraries_and_assets.bat\">\n      <Filter>Scripts</Filter>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Filter>Frontend</Filter>\n    </ApplicationDefinition>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <Filter>Frontend</Filter>\n    </AppxManifest>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"pch.h\"\n#include \"tbbTachyonRenderer.h\"\n#include <DirectXMath.h>\n#include <process.h>\n#include <thread>\n#include \"../../src/tachyon_video.h\"\n#include \"tbb/tbb.h\"\n\nusing namespace Microsoft::WRL;\nusing namespace Windows::Foundation;\nusing namespace Windows::Foundation::Collections;\nusing namespace Windows::UI::Core;\nusing namespace DirectX;\n\ntbbTachyonRenderer::tbbTachyonRenderer() :\n    m_renderNeeded(true)\n{\n}\n\ntbbTachyonRenderer::~tbbTachyonRenderer()\n{\n}\n\nvoid tbbTachyonRenderer::CreateDeviceIndependentResources()\n{\n    DirectXBase::CreateDeviceIndependentResources();\n\n    DX::ThrowIfFailed(\n        m_dwriteFactory->CreateTextFormat(\n        L\"Segoe UI\",\n        nullptr,\n        DWRITE_FONT_WEIGHT_NORMAL,\n        DWRITE_FONT_STYLE_NORMAL,\n        DWRITE_FONT_STRETCH_NORMAL,\n        32.0f,\n        L\"en-US\",\n        &m_textFormat\n        )\n        );\n\n    DX::ThrowIfFailed(\n        m_textFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING)\n        );\n\n}\n\nunsigned int __stdcall example_main(void*);\n\nfloat g_ratiox, g_ratioy;\nextern unsigned int *g_pImg;\nextern int g_sizex, g_sizey;\nextern int global_xsize, global_ysize;\nextern int volatile global_number_of_threads;\nextern volatile long global_startTime;\nextern volatile long global_elapsedTime;\n\n#define SHOW_TEXT 1\n\nvoid tbbTachyonRenderer::CreateDeviceResources()\n{\n\n    DirectXBase::CreateDeviceResources();\n\n    DX::ThrowIfFailed(\n        m_d2dContext->CreateSolidColorBrush(\n        D2D1::ColorF(D2D1::ColorF::Green),\n        &m_Brush\n        )\n        );\n\n    D2D1_BITMAP_PROPERTIES1 properties = D2D1::BitmapProperties1(\n        D2D1_BITMAP_OPTIONS_TARGET,\n        D2D1::PixelFormat(\n        DXGI_FORMAT_R8G8B8A8_UNORM,\n        D2D1_ALPHA_MODE_IGNORE\n        )\n        );\n\n\n    //Setting manual rendering size\n    global_xsize = 800;\n    global_ysize = int(global_xsize/m_window->Bounds.Width*m_window->Bounds.Height);\n    D2D1_SIZE_U opacityBitmapSize = D2D1::SizeU(global_xsize, global_ysize);\n\n    DX::ThrowIfFailed(\n        m_d2dContext->CreateBitmap(\n        opacityBitmapSize,\n        (BYTE*)g_pImg,\n        sizeof(unsigned int)*g_sizex,\n        &properties,\n        &m_opacityBitmap\n        )\n        );\n\n    m_d2dContext->SetTarget(m_opacityBitmap.Get());\n    m_d2dContext->BeginDraw();\n\n    m_d2dContext->Clear(D2D1::ColorF(D2D1::ColorF::Black, 0.0f));\n\n    DX::ThrowIfFailed(\n        m_d2dContext->EndDraw()\n        );\n\n    std::thread* thread_tmp=new std::thread(example_main, (void*)NULL);\n\n}\n\nvoid tbbTachyonRenderer::CreateWindowSizeDependentResources()\n{\n    DirectXBase::CreateWindowSizeDependentResources();\n}\n\nvoid tbbTachyonRenderer::Render()\n{\n    D2D1_SIZE_F size = m_d2dContext->GetSize();\n\n#if SHOW_TEXT\n    if (video && video->running)\n        global_elapsedTime=(long)(time(NULL)-global_startTime);\n    \n    Platform::String^ text= \"Running in \" +\n        (global_number_of_threads == tbb::task_scheduler_init::automatic? \"all hardware threads: \":\n            global_number_of_threads.ToString() + (global_number_of_threads==1?\" thread: \":\" threads: \")) +\n        global_elapsedTime.ToString() + (global_elapsedTime>1?\" seconds\":\" second\");\n\n    g_ratiox=float(size.width/1024.0);\n    g_ratioy=float(size.height/512.0);\n\n    DX::ThrowIfFailed(\n        m_dwriteFactory->CreateTextLayout(\n        text->Data(),\n        text->Length(),\n        m_textFormat.Get(),\n        1000, // maxWidth\n        1000, // maxHeight\n        &m_textLayout\n        )\n        );\n\n    m_textLayout->GetMetrics(&m_textMetrics);\n#endif\n\n    m_d2dContext->BeginDraw();\n\n    if(g_pImg)m_opacityBitmap->CopyFromMemory( NULL,(BYTE*)g_pImg, sizeof(unsigned int)*g_sizex );\n\n    m_d2dContext->DrawBitmap( m_opacityBitmap.Get(), D2D1::RectF(0,0,size.width,size.height) );\n\n#if SHOW_TEXT\n    m_d2dContext->DrawTextLayout(\n        D2D1::Point2F(0.0f, 0.0f),\n        m_textLayout.Get(),\n        m_Brush.Get(),\n        D2D1_DRAW_TEXT_OPTIONS_CLIP\n        );\n#endif\n\n    HRESULT hr = m_d2dContext->EndDraw();\n\n    if (hr == D2DERR_RECREATE_TARGET){\n        m_d2dContext->SetTarget(nullptr);\n        m_d2dTargetBitmap = nullptr;\n        CreateWindowSizeDependentResources();\n    }else{\n        DX::ThrowIfFailed(hr);\n    }\n\n    m_renderNeeded = false;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#pragma once\n\n#include <wrl.h>\n#include \"DirectXBase.h\"\n\nref class tbbTachyonRenderer sealed : public DirectXBase\n{\npublic:\n    tbbTachyonRenderer();\n    virtual void CreateDeviceIndependentResources() override;\n    virtual void CreateDeviceResources() override;\n    virtual void CreateWindowSizeDependentResources() override;\n    virtual void Render() override;\n    void Update(float timeTotal, float timeDelta);\n\n    void UpdateView(Windows::Foundation::Point deltaViewPosition);\n\nprivate:\n    Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> m_Brush;\n    Microsoft::WRL::ComPtr<IDWriteTextFormat> m_textFormat;\n    Microsoft::WRL::ComPtr<ID2D1Bitmap1> m_opacityBitmap;\n    Microsoft::WRL::ComPtr<IDWriteTextLayout> m_textLayout;\n    DWRITE_TEXT_METRICS m_textMetrics;\n    bool m_renderNeeded;\n    ~tbbTachyonRenderer();\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Tachyon sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Tachyon sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel raytracer / renderer that demonstrates the use of parallel_for.\n\t</p>\n\t<p><i>\n\t\tThis example includes software developed by John E. Stone. See\n\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t</i></p>\n\t<p>\n\t\tThis example is a 2-D raytracer/renderer that visually shows different parallel scheduling\n\t\tmethods and their resulting speedup.  The code was parallelized by speculating\n\t\tthat each pixel could be rendered in parallel.  The resulting parallel code was\n\t\tthen checked for correctness by using Intel&reg; Thread Checker, which\n\t\tpointed out where synchronization was needed.  Minimal synchronization was then\n\t\tinserted into the parallel code.  The resulting parallel code exhibits good speedup.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Versions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><b>serial</b>\n\t\t\t\t<dd>Original sequential version.\n\t\t\t\t<dt><b>tbb1d</b>\n\t\t\t\t<dd>Parallel version that uses Intel&reg; Threading Building Blocks (Intel&reg; TBB) and blocked_range to parallelize\n\t\t\t\t\tover tasks that are groups of scan-lines.\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>By default, this version uses one thread per available processor. To change this\n\t\t\t\t\tdefault, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.\n\t\t\t\t\t<li>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.\n\t\t\t\t\t\tThe blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner\n\t\t\t\t\t\tcontrols the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.\n\t\t\t\t\t</ul>\n\t\t\t\t<dt><b>tbb</b>\n\t\t\t\t<dd>Parallel version that uses Intel TBB and blocked_range2d to parallelize\n\t\t\t\t\tover tasks that are rectangular sub-areas.\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>By default, this version uses one thread per available processor.  To change this\n\t\t\t\t\tdefault, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.\n\t\t\t\t\t<li>This version uses a reasonable task grain size by default.  To change this default,\n\t\t\t\t\tset the TBB_GRAINSIZE environment variable to the desired grain size before running.\n\t\t\t\t\tThe grain size corresponds to the number of pixels (in the X or Y direction, for a\n\t\t\t\t\trectangular sub-area) in each parallel task.\n\t\t\t\t\t</ul>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/main.cpp\">src/main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the raytracer.\n\t\t\t\t<dt><a href=\"src/tachyon_video.cpp\">src/tachyon_video.cpp</a>\n\t\t\t\t<dd>Source code for GUI interfaces.\n\t\t\t\t<dt><a href=\"src/trace.serial.cpp\">src/trace.serial.cpp</a>\n\t\t\t\t<dd>Source code for original sequential version of example.\n\t\t\t\t<dt><a href=\"src/trace.tbb1d.cpp\">src/trace.tbb1d.cpp</a>\n\t\t\t\t<dd>Source code for Intel TBB blocked_range (scan-line) version of example.\n\t\t\t\t<dt><a href=\"src/trace.tbb.cpp\">src/trace.tbb.cpp</a>\n\t\t\t\t<dd>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.\n\t\t\t\t<dt>(src/*.cpp)\n\t\t\t\t<dd>Remainder of source code for example.\n\t\t\t\t<dt>(src/*.h)\n\t\t\t\t<dd>Remainder of include files for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/\">src</a>\n\t\t\t\t<dd>Contains source code and include files for the example.\n\t\t\t\t<dt><a href=\"dat/\">dat</a>\n\t\t\t\t<dd>Contains data sets for running the example.\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>\n\t\t\t\tFor Windows* systems Microsoft* Visual Studio* projects are provided for each of the above example versions.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tThe Makefile supports the following build targets (in addition to the <a href=\"../../index.html\">general</a> ones).\n\t\t\tHere, &lt;<i>version</i>&gt; is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make &lt;<i>version</i>&gt;[_debug]</tt>\n\t\t\t\t<dd>Build and run a single version (release or debug).\n\t\t\t\t\tEquivalent to 'make build_&lt;<i>version</i>&gt;[_debug] run_&lt;<i>version</i>&gt;'.\n\t\t\t\t<dt><tt>make build_&lt;<i>version</i>&gt;[_debug]</tt>\n\t\t\t\t<dd>Compile and link a single version (release or debug).\n\t\t\t\t\tThe resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make run_&lt;<i>version</i>&gt;</tt>\n\t\t\t\t<dd>Run a single version previously produced by one of the above commands.\n\t\t\t\t<dt><tt>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,\n\t\t\t\t\tteapot, trypsin4pti}</tt>\n\t\t\t\t<dd>Build and run as above, but run with the specified data set.\n\t\t\t\t<dt><tt>make [(above options or targets)] ARGS=-D</tt>\n\t\t\t\t<dd>Build and run as above, but run with disabled run-time display updating for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] UI={con, gdi, d2d, x, mac}</tt>\n\t\t\t\t<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct2D*, X11, or OpenGL*\n\t\t\t\t\t(see the description of the <a href=\"../../common/index.html\">common GUI code</a>\n\t\t\t\t\tfor more information on available graphics support).\n\t\t\t\t\tFor Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.\n\t\t\t\t\tFor Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior\n\t\t\t\t\tperformance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.\n\t\t\t\t\tUse UI=con to build without the GUI for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] XARCH=x64</tt>\n\t\t\t\t<dd>Build and run as above, but\n\t\t\t\t\talso specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.\n\t\t\t\t<dt><tt>make [(above options or targets)] DDLIB_DIR=&lt;<i>specify path to Direct Draw* SDK here</i>&gt;</tt>\n\t\t\t\t<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tBuilding via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files\n\t\t\t\tnamed <tt>tachyon.&lt;<i>version</i>&gt;.exe</tt>.  To run these executables directly, use one or more of the following commands.\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>=value] [<i>boundthresh</i>=value] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i> [<i>boundthresh</i>]] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dd><i>dataset</i> is the path/name of one of the *.dat files in the <a href=\"dat\">dat</a> directory for the example.<br>\n\t\t\t\t\t<i>boundthresh</i> is a bounding threshold value.<br>\n\t\t\t\t\t<i>no-display-updating</i> - disable run-time display updating.<br>\n\t\t\t\t\t<i>no-bounding</i> - disable bounding technique.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>] [<i>no-display-updating</i>]</tt>\n\t\t\t\t<dd>Run this version (release or debug), but run with disabled run-time display updating\n\t\t\t\t\tfor use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the <tt>tbb</tt> example with the GUI turned off\n\t\t\t\t\t(e.g., <tt>make UI=con tbb_debug</tt>; see also the build directions above).\n\t\t\t\t\t<br>Run it with a small dataset, e.g., <tt>tachyon.tbb.exe dat/820spheres.dat no-display-updating</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>While running with the GUI display turned on the following keyboard keys can be used:</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>ESC</tt>\n\t\t\t\t<dd>Interrupt the rendering and exit\n\t\t\t\t<dt><tt><i>Any key</i></tt>\n\t\t\t\t<dd>Enable repetition of rendering after the pause. Press ESC to stop the application.\n\t\t\t\t<dt><tt>Space</tt>\n\t\t\t\t<dd>Toggle run-time display updating mode while rendering (see no-display-updating above).\n\t\t\t\t<dt><tt>p</tt>\n\t\t\t\t<dd>Holds the picture after rendering completion. Press 'p' again to continue.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI\n\t\t\t\tdisplay turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tThe original source for this example is\n\t\t\tCopyright (c) 1994-2008 John E. Stone\n\t\t\tAll rights reserved.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tRedistribution and use in source and binary forms, with or without\n\t\t\tmodification, are permitted provided that the following conditions\n\t\t\tare met:\n\t\t\t<ol>\n\t\t\t<li>Redistributions of source code must retain the above copyright\n\t\t\t   notice, this list of conditions and the following disclaimer.\n\t\t\t<li>Redistributions in binary form must reproduce the above copyright\n\t\t\t   notice, this list of conditions and the following disclaimer in the\n\t\t\t   documentation and/or other materials provided with the distribution.\n\t\t\t<li>The name of the author may not be used to endorse or promote products\n\t\t\t   derived from this software without specific prior written permission.\n\t\t\t</ol>\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n\t\t\tOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n\t\t\tHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\t\t\tLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n\t\t\tOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n\t\t\tSUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/api.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * api.cpp - This file contains all of the API calls that are defined for\n *         external driver code to use.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n\n#include \"box.h\"\n#include \"cylinder.h\"\n#include \"plane.h\"\n#include \"quadric.h\"\n#include \"ring.h\"\n#include \"sphere.h\"\n#include \"triangle.h\"\n#include \"vol.h\"\n#include \"extvol.h\"\n\n#include \"texture.h\"\n#include \"light.h\"\n#include \"render.h\"\n#include \"camera.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"shade.h\"\n#include \"util.h\"\n#include \"imap.h\"\n#include \"global.h\"\n\n#include \"tachyon_video.h\"\n\ntypedef void * SceneHandle;\n#include \"api.h\"\n\n\nvector rt_vector(apiflt x, apiflt y, apiflt z) {\n  vector v;\n\n  v.x = x;\n  v.y = y;\n  v.z = z;\n\n  return v;\n}\n\ncolor rt_color(apiflt r, apiflt g, apiflt b) {\n  color c;\n  \n  c.r = r;\n  c.g = g;\n  c.b = b;\n  \n  return c;\n}\n\nvoid rt_initialize() {\n  rpcmsg msg;\n\n  reset_object();\n  reset_lights();\n  InitTextures();\n\n  if (!parinitted) {\n    parinitted=1;\n\n    msg.type=1; /* setup a ping message */\n  }\n}\n\nvoid rt_renderscene(SceneHandle voidscene) {\n  scenedef * scene = (scenedef *) voidscene;\n  renderscene(*scene);\n}\n\nvoid rt_camerasetup(SceneHandle voidscene, apiflt zoom, apiflt aspectratio, \n\tint antialiasing, int raydepth, \n\tvector camcent, vector viewvec, vector upvec) {\n  scenedef * scene = (scenedef *) voidscene;\n\n  vector newupvec;\n  vector newviewvec;\n  vector newrightvec;\n \n  VCross((vector *) &upvec, &viewvec, &newrightvec);\n  VNorm(&newrightvec);\n\n  VCross((vector *) &viewvec, &newrightvec, &newupvec);\n  VNorm(&newupvec);\n\n  newviewvec=viewvec;\n  VNorm(&newviewvec);\n\n\n  scene->camzoom=zoom; \n  scene->aspectratio=aspectratio;\n  scene->antialiasing=antialiasing;\n  scene->raydepth=raydepth; \n  scene->camcent=camcent;\n  scene->camviewvec=newviewvec;\n  scene->camrightvec=newrightvec;\n  scene->camupvec=newupvec;\n}\n\nvoid rt_outputfile(SceneHandle voidscene, const char * outname) {\n  scenedef * scene = (scenedef *) voidscene;\n  strcpy((char *) &scene->outfilename, outname);\n}\n\nvoid rt_resolution(SceneHandle voidscene, int hres, int vres) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->hres=hres;\n  scene->vres=vres;\n}\n\nvoid rt_verbose(SceneHandle voidscene, int v) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->verbosemode = v;\n}\n\nvoid rt_rawimage(SceneHandle voidscene, unsigned char *rawimage) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->rawimage = rawimage;\n}\n\nvoid rt_background(SceneHandle voidscene, color col) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->background.r = col.r;\n  scene->background.g = col.g;\n  scene->background.b = col.b;\n}\n\nvoid rt_boundmode(SceneHandle voidscene, int mode) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->boundmode = mode;\n}\n\nvoid rt_boundthresh(SceneHandle voidscene, int threshold) {\n  scenedef * scene = (scenedef *) voidscene;\n \n  if (threshold > 1) {\n    scene->boundthresh = threshold;\n  }\n  else {\n    rtmesg(\"Ignoring out-of-range automatic bounding threshold.\\n\");\n    rtmesg(\"Automatic bounding threshold reset to default.\\n\");\n    scene->boundthresh = MAXOCTNODES;\n  }\n}\n\nvoid rt_displaymode(SceneHandle voidscene, int mode) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->displaymode = mode;\n}\n\n\nvoid rt_scenesetup(SceneHandle voidscene, char * outname, int hres, int vres, int verbose) {\n  rt_outputfile(voidscene, outname);\n  rt_resolution(voidscene, hres, vres);\n  rt_verbose(voidscene, verbose);\n}\n\nSceneHandle rt_newscene(void) {\n  scenedef * scene;\n  SceneHandle voidscene;\n\n  scene = (scenedef *) malloc(sizeof(scenedef));\n  memset(scene, 0, sizeof(scenedef));             /* clear all valuas to 0  */\n\n  voidscene = (SceneHandle) scene;\n\n  rt_outputfile(voidscene, \"/dev/null\");   /* default output file (.tga)   */\n  rt_resolution(voidscene, 512, 512);             /* 512x512 resolution     */\n  rt_verbose(voidscene, 0);                       /* verbose messages off   */\n  rt_rawimage(voidscene, NULL);                   /* raw image output off   */\n  rt_boundmode(voidscene, RT_BOUNDING_ENABLED);   /* spatial subdivision on */\n  rt_boundthresh(voidscene, MAXOCTNODES);         /* default threshold      */\n  rt_displaymode(voidscene, RT_DISPLAY_ENABLED);  /* video output on        */\n  rt_camerasetup(voidscene, 1.0, 1.0, 0, 6,\n                 rt_vector(0.0, 0.0, 0.0),\n                 rt_vector(0.0, 0.0, 1.0),\n                 rt_vector(0.0, 1.0, 0.0));\n \n  return scene;\n}\n\nvoid rt_deletescene(SceneHandle scene) {\n  if (scene != NULL)\n    free(scene);\n}\n\nvoid apitextotex(apitexture * apitex, texture * tex) {\n  switch(apitex->texturefunc) {\n    case 0: \n      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);\n      break;\n\n    case 1: \n      tex->texfunc=(color(*)(void *, void *, void *))(checker_texture);\n      break;\n\n    case 2: \n      tex->texfunc=(color(*)(void *, void *, void *))(grit_texture);\n      break;\n\n    case 3: \n      tex->texfunc=(color(*)(void *, void *, void *))(marble_texture);\n      break;\n\n    case 4: \n      tex->texfunc=(color(*)(void *, void *, void *))(wood_texture);\n      break;\n\n    case 5: \n      tex->texfunc=(color(*)(void *, void *, void *))(gnoise_texture);\n      break;\n\t\n    case 6: \n      tex->texfunc=(color(*)(void *, void *, void *))(cyl_checker_texture);\n      break;\n\n    case 7: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_sphere_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    case 8: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_cyl_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    case 9: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_plane_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    default: \n      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);\n      break;\n  }\n\n       tex->ctr = apitex->ctr;\n       tex->rot = apitex->rot;\n     tex->scale = apitex->scale;\n      tex->uaxs = apitex->uaxs;\n      tex->vaxs = apitex->vaxs;\n   tex->ambient = apitex->ambient;\n   tex->diffuse = apitex->diffuse;\n  tex->specular = apitex->specular;\n   tex->opacity = apitex->opacity;\n       tex->col = apitex->col; \n\n  tex->islight = 0;\n  tex->shadowcast = 1;\n  tex->phong = 0.0;\n  tex->phongexp = 0.0;\n  tex->phongtype = 0;\n}\n\nvoid * rt_texture(apitexture * apitex) {\n  texture * tex;\n\n  tex=(texture *)rt_getmem(sizeof(texture));\n  apitextotex(apitex, tex); \n  return(tex);\n}\n\nvoid rt_tex_color(void * voidtex, color col) {\n  texture * tex = (texture *) voidtex;\n  tex->col = col;\n}\n\nvoid rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type) {\n  texture * tex = (texture *) voidtex;\n  tex->phong = phong;\n  tex->phongexp = phongexp;\n  tex->phongtype = type;\n}\n\nvoid rt_light(void * tex, vector ctr, apiflt rad) {\n  point_light * li;\n\n  li=newlight(tex, (vector) ctr, rad);\n\n  li->tex->islight=1;\n  li->tex->shadowcast=1;\n  li->tex->diffuse=0.0;\n  li->tex->specular=0.0;\n  li->tex->opacity=1.0;\n\n  add_light(li);\n  add_object((object *)li);\n}\n\nvoid rt_scalarvol(void * tex, vector min, vector max,\n\tint xs, int ys, int zs, char * fname, void * invol) {\n  add_object((object *) newscalarvol(tex, (vector)min, (vector)max, xs, ys, zs, fname, (scalarvol *) invol));\n}\n\nvoid rt_extvol(void * tex, vector min, vector max, int samples, flt (* evaluator)(flt, flt, flt)) {\n  add_object((object *) newextvol(tex, (vector)min, (vector)max, samples, evaluator));\n}\n\nvoid rt_box(void * tex, vector min, vector max) {\n  add_object((object *) newbox(tex, (vector)min, (vector)max));\n} \n\nvoid rt_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  add_object(newcylinder(tex, (vector)ctr, (vector)axis, rad));\n}\n\nvoid rt_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  add_object(newfcylinder(tex, (vector)ctr, (vector)axis, rad));\n}\n\nvoid rt_plane(void * tex, vector ctr, vector norm) {\n  add_object(newplane(tex, (vector)ctr, (vector)norm));\n} \n\nvoid rt_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {\n  add_object(newring(tex, (vector)ctr, (vector)norm, a, b));\n} \n\nvoid rt_sphere(void * tex, vector ctr, apiflt rad) {\n  add_object(newsphere(tex, (vector)ctr, rad));\n}\n\nvoid rt_tri(void * tex, vector v0, vector v1, vector v2) {\n  object * trn;\n\n  trn = newtri(tex, (vector)v0, (vector)v1, (vector)v2);\n\n  if (trn != NULL) { \n    add_object(trn);\n  }\n} \n\nvoid rt_stri(void * tex, vector v0, vector v1, vector v2, \n\t\tvector n0, vector n1, vector n2) {\n  object * trn;\n \n  trn = newstri(tex, (vector)v0, (vector)v1, (vector)v2, (vector)n0, (vector)n1, (vector)n2);\n\n  if (trn != NULL) { \n    add_object(trn);\n  }\n} \n\nvoid rt_quadsphere(void * tex, vector ctr, apiflt rad) {\n  quadric * q;\n  flt factor;\n  q=(quadric *) newquadric();\n  factor= 1.0 / (rad*rad);\n  q->tex=(texture *)tex;\n  q->ctr=ctr;\n \n  q->mat.a=factor;\n  q->mat.b=0.0;\n  q->mat.c=0.0;\n  q->mat.d=0.0;\n  q->mat.e=factor;\n  q->mat.f=0.0;\n  q->mat.g=0.0;\n  q->mat.h=factor;\n  q->mat.i=0.0;\n  q->mat.j=-1.0;\n \n  add_object((object *)q);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/api.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*****************************************************************************\n * api.h - The declarations and prototypes needed so that 3rd party driver   *\n *         code can run the raytracer.  Third party driver code should       * \n *         only use the functions in this header file to interface with      *\n *         the rendering engine.                                             *\n *************************************************************************** */\n\n\n/* \n *  $Id: api.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n\n/********************************************/\n/* Types defined for use with the API calls */\n/********************************************/\n\n#ifdef USESINGLEFLT\ntypedef float apiflt;   /* generic floating point number */\n#else\ntypedef double apiflt;  /* generic floating point number */\n#endif\n\ntypedef void * SceneHandle;\n\ntypedef struct {\n  int texturefunc; /* which texture function to use */\n  color col;    /* base object color */\n  int shadowcast;  /* does the object cast a shadow */\n  apiflt ambient;  /* ambient lighting */\n  apiflt diffuse;  /* diffuse reflection */\n  apiflt specular; /* specular reflection */\n  apiflt opacity;  /* how opaque the object is */ \n  vector ctr;   /* origin of texture */\n  vector rot;   /* rotation of texture around origin */\n  vector scale; /* scale of texture in x,y,z */ \n  vector uaxs;  /* planar map u axis */\n  vector vaxs;  /* planar map v axis */\n  char imap[96];   /* name of image map */ \n} apitexture;\n\n\n/*******************************************************************\n *  NOTE: The value passed in apitexture.texturefunc corresponds to \n *        the meanings given in this table:\n *\n *   0 - No texture function is applied other than standard lighting.\n *   1 - 3D checkerboard texture.  Red & Blue checkers through 3d space.\n *   2 - Grit texture, roughens up the surface of the object a bit.\n *   3 - 3D marble texture.  Makes a 3D swirl pattern through the object.\n *   4 - 3D wood texture.  Makes a 3D wood pattern through the object.\n *   5 - 3D gradient noise function.\n *   6 - I've forgotten :-)\n *   7 - Cylindrical Image Map  **** IMAGE MAPS REQUIRE the filename \n *   8 - Spherical Image Map         of the image be put in imap[]\n *   9 - Planar Image Map            part of the texture...\n *        planar requires uaxs, and vaxs..\n *\n *******************************************************************/\n\n/********************************************/\n/* Functions implemented to provide the API */\n/********************************************/\n\nvector rt_vector(apiflt x, apiflt y, apiflt z); /* helper to make vectors */\ncolor  rt_color(apiflt r, apiflt g, apiflt b);  /* helper to make colors */\n\nvoid rt_initialize();/* reset raytracer, memory deallocation */\nvoid rt_finalize(void); /* close down for good.. */\n\nSceneHandle rt_newscene(void);        /* allocate new scene */\nvoid rt_deletescene(SceneHandle); /* delete a scene */\nvoid rt_renderscene(SceneHandle); /* raytrace the current scene */  \nvoid rt_outputfile(SceneHandle, const char * outname); \nvoid rt_resolution(SceneHandle, int hres, int vres);\nvoid rt_verbose(SceneHandle, int v);\nvoid rt_rawimage(SceneHandle, unsigned char *rawimage);\nvoid rt_background(SceneHandle, color);\n\n/* Parameter values for rt_boundmode() */\n#define RT_BOUNDING_DISABLED 0\n#define RT_BOUNDING_ENABLED  1\n\nvoid rt_boundmode(SceneHandle, int);\nvoid rt_boundthresh(SceneHandle, int);\n\n/* Parameter values for rt_displaymode() */\n#define RT_DISPLAY_DISABLED  0\n#define RT_DISPLAY_ENABLED   1\n\nvoid rt_displaymode(SceneHandle, int);\n\nvoid rt_scenesetup(SceneHandle, char *, int, int, int);\n  /* scene, output filename, horizontal resolution, vertical resolution,\n            verbose mode */\n\n\nvoid rt_camerasetup(SceneHandle, apiflt, apiflt, int, int,\n\tvector, vector,  vector);\n  /* camera parms: scene, zoom, aspectratio, antialiasing, raydepth,\n\t\tcamera center, view direction, up direction */\n\n\n\nvoid * rt_texture(apitexture *);\n   /* pointer to the texture struct that would have been passed to each \n      object() call in older revisions.. */\n\n\n\n\nvoid rt_light(void * , vector, apiflt);     /* add a light */\n  /* light parms: texture, center, radius */ \n\nvoid rt_sphere(void *, vector, apiflt);    /* add a sphere */\n  /* sphere parms: texture, center, radius */\n\nvoid rt_scalarvol(void *, vector, vector,\n\t\t int, int, int, char *, void *); \n\nvoid rt_extvol(void *, vector, vector, int, apiflt (* evaluator)(apiflt, apiflt, apiflt)); \n\nvoid rt_box(void *, vector, vector);  \n  /* box parms: texture, min, max */\n\nvoid rt_plane(void *, vector, vector);  \n  /* plane parms: texture, center, normal */\n\nvoid rt_ring(void *, vector, vector, apiflt, apiflt); \n  /* ring parms: texture, center, normal, inner, outer */\n\nvoid rt_tri(void *, vector, vector, vector);  \n  /* tri parms: texture, vertex 0, vertex 1, vertex 2 */\n\nvoid rt_stri(void *, vector, vector, vector, \n\t\t\tvector, vector, vector); \n /* stri parms: texture, vertex 0, vertex 1, vertex 2, norm 0, norm 1, norm 2 */\n\nvoid rt_heightfield(void *, vector, int, int, apiflt *, apiflt, apiflt);\n  /* field parms: texture, center, m, n, field, wx, wy */\n\nvoid rt_landscape(void *, int, int, vector,  apiflt, apiflt);\n\nvoid rt_quadsphere(void *, vector, apiflt); /* add quadric sphere */\n  /* sphere parms: texture, center, radius */\n\nvoid rt_cylinder(void *, vector, vector, apiflt);\n\nvoid rt_fcylinder(void *, vector, vector, apiflt);\n\nvoid rt_polycylinder(void *, vector *, int, apiflt);\n\n\n/* new texture handling routines */\nvoid rt_tex_color(void * voidtex, color col); \n\n#define RT_PHONG_PLASTIC 0\n#define RT_PHONG_METAL   1\nvoid rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type); \n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/apigeom.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * api.cpp - This file contains all of the API calls that are defined for\n *         external driver code to use.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"api.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n\n#define MyVNorm(a)\t\tVNorm ((vector *) a)\n\nvoid rt_polycylinder(void * tex, vector * points, int numpts, apiflt rad) {\n  vector a;\n  int i;\n\n  if ((points == NULL) || (numpts == 0)) {\n    return;\n  }\n\n  if (numpts > 0) {\n    rt_sphere(tex, points[0], rad);\n    \n    if (numpts > 1) {\n      for (i=1; i<numpts; i++) {\n        a.x = points[i].x - points[i-1].x;\n        a.y = points[i].y - points[i-1].y;\n        a.z = points[i].z - points[i-1].z;\n        \n        rt_fcylinder(tex, points[i-1], a, rad);\n        rt_sphere(tex, points[i], rad);\n      }\n    }\n  }\n}\n\nvoid rt_heightfield(void * tex, vector ctr, int m, int n, \n                    apiflt * field, apiflt wx, apiflt wy) {\n  int xx,yy; \n  vector v0, v1, v2; \n  apiflt xoff, yoff, zoff;\n\n  xoff=ctr.x - (wx / 2.0);\n  yoff=ctr.z - (wy / 2.0);\n  zoff=ctr.y;\n\n  for (yy=0; yy<(n-1); yy++) { \n    for (xx=0; xx<(m-1); xx++) {\n      v0.x=wx*(xx    )/(m*1.0) + xoff; \n      v0.y=field[(yy    )*m + (xx    )] + zoff;\n      v0.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v1.x=wx*(xx + 1)/(m*1.0) + xoff; \n      v1.y=field[(yy    )*m + (xx + 1)] + zoff;\n      v1.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v2.x=wx*(xx + 1)/(m*1.0) + xoff; \n      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;\n      v2.z=wy*(yy + 1)/(n*1.0) + yoff;\n\n      rt_tri(tex, v1, v0, v2);\n\n      v0.x=wx*(xx    )/(m*1.0) + xoff;\n      v0.y=field[(yy    )*m + (xx    )] + zoff;\n      v0.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v1.x=wx*(xx    )/(m*1.0) + xoff;\n      v1.y=field[(yy + 1)*m + (xx    )] + zoff;\n      v1.z=wy*(yy + 1)/(n*1.0) + yoff;\n\n      v2.x=wx*(xx + 1)/(m*1.0) + xoff;\n      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;\n      v2.z=wy*(yy + 1)/(n*1.0) + yoff;\n \n      rt_tri(tex, v0, v1, v2);\n    }\n  } \n} /* end of heightfield */\n\n\nstatic void rt_sheightfield(void * tex, vector ctr, int m, int n, \n                    apiflt * field, apiflt wx, apiflt wy) {\n  vector * vertices;\n  vector * normals;\n  vector offset;\n  apiflt xinc, yinc;\n  int x, y, addr; \n   \n  vertices = (vector *) malloc(m*n*sizeof(vector));\n  normals = (vector *) malloc(m*n*sizeof(vector));\n\n  offset.x = ctr.x - (wx / 2.0);\n  offset.y = ctr.z - (wy / 2.0);\n  offset.z = ctr.y;\n\n  xinc = wx / ((apiflt) m);\n  yinc = wy / ((apiflt) n);\n\n  /* build vertex list */\n  for (y=0; y<n; y++) { \n    for (x=0; x<m; x++) {\n      addr = y*m + x;\n      vertices[addr] = rt_vector(\n        x * xinc + offset.x,\n        field[addr] + offset.z,\n        y * yinc + offset.y);\n    }\n  }\n\n  /* build normals from vertex list */\n  for (x=1; x<m; x++) {\n    normals[x] = normals[(n - 1)*m + x] = rt_vector(0.0, 1.0, 0.0);\n  }\n  for (y=1; y<n; y++) {\n    normals[y*m] = normals[y*m + (m-1)] = rt_vector(0.0, 1.0, 0.0);\n  }\n  for (y=1; y<(n-1); y++) {\n    for (x=1; x<(m-1); x++) {\n      addr = y*m + x;\n\n      normals[addr] = rt_vector(\n        -(field[addr + 1] - field[addr - 1]) / (2.0 * xinc), \n        1.0, \n        -(field[addr + m] - field[addr - m]) / (2.0 * yinc));\n\n      MyVNorm(&normals[addr]);\n    }\n  }    \n\n  /* generate actual triangles */\n  for (y=0; y<(n-1); y++) {\n    for (x=0; x<(m-1); x++) {\n      addr = y*m + x;\n\n      rt_stri(tex, vertices[addr], vertices[addr + 1 + m], vertices[addr + 1],\n                   normals[addr], normals[addr + 1 + m], normals[addr + 1]);\n      rt_stri(tex, vertices[addr], vertices[addr + m], vertices[addr + 1 + m],\n                   normals[addr], normals[addr + m], normals[addr + 1 + m]);\n    }\n  }\n\n  free(normals);\n  free(vertices);\n} /* end of smoothed heightfield */\n\n\nstatic void adjust(apiflt *base, int xres, int yres, apiflt wx, apiflt wy, \n\t\tint xa, int ya, int x, int y, int xb, int yb) {\n  apiflt d, v;\n  \n  if (base[x + (xres*y)]==0.0) { \n\n    d=(abs(xa - xb) / (xres * 1.0))*wx + (abs(ya - yb) / (yres * 1.0))*wy; \n\n    v=(base[xa + (xres*ya)] + base[xb + (xres*yb)]) / 2.0 +\n       (((((rand() % 1000) - 500.0)/500.0)*d) / 8.0);\n\n    if (v < 0.0) v=0.0; \n    if (v > (xres + yres)) v=(xres + yres);\n    base[x + (xres * y)]=v; \n } \n}\n\nstatic void subdivide(apiflt *base, int xres, int yres, apiflt wx, apiflt wy,\n                  int x1, int y1, int x2, int y2) {\n  long x,y;\n\n  if (((x2 - x1) < 2) && ((y2 - y1) < 2)) { return; }\n\n  x=(x1 + x2) / 2;\n  y=(y1 + y2) / 2;\n\n  adjust(base, xres, yres, wx, wy, x1, y1, x, y1, x2, y1);\n  adjust(base, xres, yres, wx, wy, x2, y1, x2, y, x2, y2);\n  adjust(base, xres, yres, wx, wy, x1, y2, x, y2, x2, y2);\n  adjust(base, xres, yres, wx, wy, x1, y1, x1, y, x1, y2);\n\n \n  if (base[x + xres*y]==0.0) {\n    base[x + (xres * y)]=(base[x1 + xres*y1] + base[x2 + xres*y1] +\n                          base[x2 + xres*y2] + base[x1 + xres*y2]   )/4.0;\n  }\n \n  subdivide(base, xres, yres, wx, wy, x1, y1 ,x ,y);\n  subdivide(base, xres, yres, wx, wy, x, y1, x2, y);\n  subdivide(base, xres, yres, wx, wy, x, y, x2, y2);\n  subdivide(base, xres, yres, wx, wy, x1, y, x, y2);\n}\n\nvoid rt_landscape(void * tex, int m, int n, \n              \tvector ctr, apiflt wx, apiflt wy) {\n  int totalsize, x, y;\n  apiflt * field; \n\n  totalsize=m*n;\n\n  srand(totalsize);\n\n  field=(apiflt *) malloc(totalsize*sizeof(apiflt));\n\n  for (y=0; y<n; y++) {\n    for (x=0; x<m; x++) {\n       field[x + y*m]=0.0;\n    }\n  }\n\n  field[0 + 0]=1.0 + (rand() % 100)/100.0;\n  field[m - 1]=1.0 + (rand() % 100)/100.0;\n  field[0     + m*(n - 1)]=1.0 + (rand() % 100)/100.0;\n  field[m - 1 + m*(n - 1)]=1.0 + (rand() % 100)/100.0;\n\n  subdivide(field, m, n, wx, wy, 0, 0, m-1, n-1);\n\n  rt_sheightfield(tex, ctr, m, n, field, wx, wy);\n\n  free(field);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/apitrigeom.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * apitrigeom.cpp - This file contains code for generating triangle tesselated\n *                geometry, for use with OpenGL, XGL, etc.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"api.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n\n#define MyVNorm(a)\t\tVNorm ((vector *) a)\n#define MyVCross(a,b,c)\t\tVCross ((vector *) a, (vector *) b, (vector *) c)\n#define MyVAddS(x,a,b,c)\tVAddS ((flt) x, (vector *) a, (vector *) b, (vector *) c)\n\n#define CYLFACETS 36\n#define RINGFACETS 36\n#define SPHEREFACETS 25\n\nvoid rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  vector x, y, z, tmp;\n  double u, v, u2, v2;\n  int j;\n  vector p1, p2, p3, p4;\n  vector n1, n2;\n\n  z = axis;\n  MyVNorm(&z);\n  tmp.x = z.y - 2.1111111;\n  tmp.y = -z.z + 3.14159267;\n  tmp.z = z.x - 3.915292342341;\n  MyVNorm(&z);\n  MyVNorm(&tmp);\n  MyVCross(&z, &tmp, &x);\n  MyVNorm(&x);\n  MyVCross(&x, &z, &y);\n  MyVNorm(&y);\n\n  for (j=0; j<CYLFACETS; j++) {\n     u = rad * sin((6.28 * j) / (CYLFACETS - 1.0));\n     v = rad * cos((6.28 * j) / (CYLFACETS - 1.0));\n    u2 = rad * sin((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));\n    v2 = rad * cos((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));\n\n    p1.x = p1.y = p1.z = 0.0;\n    p4 = p3 = p2 = p1;\n\n    MyVAddS(u, &x, &p1, &p1);\n    MyVAddS(v, &y, &p1, &p1);\n    n1 = p1;\n    MyVNorm(&n1);\n    MyVAddS(1.0, &ctr, &p1, &p1);\n  \n\n    MyVAddS(u2, &x, &p2, &p2);\n    MyVAddS(v2, &y, &p2, &p2);\n    n2 = p2;\n    MyVNorm(&n2);\n    MyVAddS(1.0, &ctr, &p2, &p2);\n\n    MyVAddS(1.0, &axis, &p1, &p3);\n    MyVAddS(1.0, &axis, &p2, &p4);\n\n    rt_stri(tex, p1, p2, p3, n1, n2, n1);\n    rt_stri(tex, p3, p2, p4, n1, n2, n2);\n  }\n}\n\nvoid rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  rt_fcylinder(tex, ctr, axis, rad);\n}\n\nvoid rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {\n  vector x, y, z, tmp;\n  double u, v, u2, v2;\n  int j;\n  vector p1, p2, p3, p4;\n  vector n1, n2;\n\n  z = norm;\n  MyVNorm(&z);\n  tmp.x = z.y - 2.1111111;\n  tmp.y = -z.z + 3.14159267;\n  tmp.z = z.x - 3.915292342341;\n  MyVNorm(&z);\n  MyVNorm(&tmp);\n  MyVCross(&z, &tmp, &x);\n  MyVNorm(&x);\n  MyVCross(&x, &z, &y);\n  MyVNorm(&y);\n\n  for (j=0; j<RINGFACETS; j++) {\n     u = sin((6.28 * j) / (RINGFACETS - 1.0));\n     v = cos((6.28 * j) / (RINGFACETS - 1.0));\n    u2 = sin((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));\n    v2 = cos((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));\n\n    p1.x = p1.y = p1.z = 0.0;\n    p4 = p3 = p2 = p1;\n\n    MyVAddS(u, &x, &p1, &p1);\n    MyVAddS(v, &y, &p1, &p1);\n    n1 = p1;\n    MyVNorm(&n1);\n    MyVAddS(a, &n1, &ctr, &p1);\n    MyVAddS(b, &n1, &ctr, &p3);\n\n    MyVAddS(u2, &x, &p2, &p2);\n    MyVAddS(v2, &y, &p2, &p2);\n    n2 = p2;\n    MyVNorm(&n2);\n    MyVAddS(a, &n2, &ctr, &p2);\n    MyVAddS(b, &n2, &ctr, &p4);\n\n    rt_stri(tex, p1, p2, p3, norm, norm, norm);\n    rt_stri(tex, p3, p2, p4, norm, norm, norm);\n\n  }\n} \n\nvoid rt_tri_box(void * tex, vector min, vector max) {\n  /* -XY face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, min.z), \n              rt_vector(max.x, max.y, min.z));\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(max.x, max.y, min.z), \n              rt_vector(max.x, min.y, min.z));\n\n  /* +XY face */\n  rt_tri(tex, rt_vector(min.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(min.x, max.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, min.y, max.z),\n              rt_vector(max.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z)); \n\n  /* -YZ face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, max.z),\n              rt_vector(min.x, min.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, min.z),\n              rt_vector(min.x, max.y, max.z)); \n\n  /* +YZ face */\n  rt_tri(tex, rt_vector(max.x, min.y, min.z),\n              rt_vector(max.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z));\n  rt_tri(tex, rt_vector(max.x, min.y, min.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(max.x, max.y, min.z));\n\n  /* -XZ face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, min.y, max.z), \n              rt_vector(max.x, min.y, max.z));\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(max.x, min.y, max.z), \n              rt_vector(max.x, min.y, min.z));\n\n  /* +XZ face */\n  rt_tri(tex, rt_vector(min.x, max.y, min.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(min.x, max.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, max.y, min.z),\n              rt_vector(max.x, max.y, min.z),\n              rt_vector(max.x, max.y, max.z)); \n}\n\nvoid rt_tri_sphere(void * tex, vector ctr, apiflt rad) {\n}\n\nvoid rt_tri_plane(void * tex, vector ctr, vector norm) {\n  rt_tri_ring(tex, ctr, norm, 0.0, 10000.0);\n} \n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/apitrigeom.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * apitrigeom.h - header for functions to generate triangle tesselated \n *                geometry for use with OpenGL, XGL, etc.\n *\n */\n\nvoid rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad);\nvoid rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad);\nvoid rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b);\nvoid rt_tri_plane(void * tex, vector ctr, vector norm);\nvoid rt_tri_box(void * tex, vector min, vector max);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/bndbox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * bndbox.cpp - This file contains the functions for dealing with bounding boxes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define BNDBOX_PRIVATE\n#include \"bndbox.h\"\n\nstatic object_methods bndbox_methods = {\n  (void (*)(void *, void *))(bndbox_intersect),\n  (void (*)(void *, void *, void *, void *))(NULL),\n  bndbox_bbox, \n  free_bndbox \n};\n\n\nbndbox * newbndbox(vector min, vector max) {\n  bndbox * b;\n  \n  b=(bndbox *) rt_getmem(sizeof(bndbox));\n  memset(b, 0, sizeof(bndbox));\n  b->min=min;\n  b->max=max;\n  b->methods = &bndbox_methods;\n\n  b->objlist=NULL;\n  b->tex=NULL;\n  b->nextobj=NULL;\n  return b;\n}\n\n\nstatic int bndbox_bbox(void * obj, vector * min, vector * max) {\n  bndbox * b = (bndbox *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\n\nstatic void free_bndbox(void * v) {\n  bndbox * b = (bndbox *) v; \n\n  free_objects(b->objlist);  \n \n  free(b);\n}\n\n\nstatic void bndbox_intersect(bndbox * bx, ray * ry) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  object * obj;\n  ray newray; \n\n  /* eliminate bounded rays whose bounds do not intersect  */\n  /* the bounds of the box..                               */\n  if (ry->flags & RT_RAY_BOUNDED) {\n    if ((ry->s.x > bx->max.x) && (ry->e.x > bx->max.x)) return;\n    if ((ry->s.x < bx->min.x) && (ry->e.x < bx->min.x)) return;\n  \n    if ((ry->s.y > bx->max.y) && (ry->e.y > bx->max.y)) return;\n    if ((ry->s.y < bx->min.y) && (ry->e.y < bx->min.y)) return;\n\n    if ((ry->s.z > bx->max.z) && (ry->e.z > bx->max.z)) return;\n    if ((ry->s.z < bx->min.z) && (ry->e.z < bx->min.z)) return;\n  }\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;\n  }\n  else { \n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } \n    if (tx1 > tnear) tnear=tx1;   \n    if (tx2 < tfar)   tfar=tx2;   \n  }  \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n  \n  if (ry->d.y == 0.0) { \n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;\n  }\n  else { \n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } \n    if (ty1 > tnear) tnear=ty1;   \n    if (ty2 < tfar)   tfar=ty2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n \n  if (ry->d.z == 0.0) { \n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;\n  }\n  else { \n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } \n    if (tz1 > tnear) tnear=tz1;   \n    if (tz2 < tfar)   tfar=tz2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n\n\n  /* intersect all of the enclosed objects */\n  newray=*ry;\n  newray.flags |= RT_RAY_BOUNDED;\n\n  RAYPNT(newray.s , (*ry) , tnear); \n  RAYPNT(newray.e , (*ry) , (tfar + EPSILON)); \n \n  obj = bx->objlist;\n  while (obj != NULL) {\n    obj->methods->intersect(obj, &newray); \n    obj = (object *)obj->nextobj;\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/bndbox.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * bndbox.h - This file contains the defines for bounding boxes etc.\n *\n *  $Id: bndbox.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n  object * objlist;\n} bndbox; \n\nbndbox * newbndbox(vector min, vector max);\n\n#ifdef BNDBOX_PRIVATE\n\nstatic int bndbox_bbox(void * obj, vector * min, vector * max);\nstatic void free_bndbox(void * v);\nstatic void bndbox_intersect(bndbox *, ray *);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/box.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * box.cpp - This file contains the functions for dealing with boxes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"box.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\nint box_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nstatic object_methods box_methods = {\n  (void (*)(void *, void *))(box_intersect),\n  (void (*)(void *, void *, void *, void *))(box_normal),\n  box_bbox, \n  free \n};\n\nbox * newbox(void * tex, vector min, vector max) {\n  box * b;\n  \n  b=(box *) rt_getmem(sizeof(box));\n  memset(b, 0, sizeof(box));\n  b->methods = &box_methods;\n  b->tex = (texture *)tex;\n  b->min = min; \n  b->max = max;\n\n  return b;\n}\n\nvoid box_intersect(box * bx, ray * ry) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } \n    if (tx1 > tnear) tnear=tx1;   \n    if (tx2 < tfar)   tfar=tx2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n  \n  if (ry->d.y == 0.0) { \n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } \n    if (ty1 > tnear) tnear=ty1;   \n    if (ty2 < tfar)   tfar=ty2;   \n  }\n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n \n  if (ry->d.z == 0.0) { \n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } \n    if (tz1 > tnear) tnear=tz1;   \n    if (tz2 < tfar)   tfar=tz2;   \n  }\n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n\n  add_intersection(tnear, (object *) bx, ry);\n  add_intersection(tfar, (object *) bx, ry);\n}\n\nvoid box_normal(box * bx, vector  * pnt, ray * incident, vector * N) {\n  vector a, b, c; \n  flt t;\n \n  c.x=(bx->max.x + bx->min.x) / 2.0;\n  c.y=(bx->max.y + bx->min.y) / 2.0;\n  c.z=(bx->max.z + bx->min.z) / 2.0;\n \n  VSub((vector *) pnt, &c, N);\n  b=(*N);\n\n  a.x=fabs(N->x);\n  a.y=fabs(N->y);\n  a.z=fabs(N->z);\n \n  N->x=0.0;  N->y=0.0;  N->z=0.0;\n\n  t=MYMAX(a.x, MYMAX(a.y, a.z));  \n\n  if (t==a.x) N->x=b.x;  \n\n  if (t==a.y) N->y=b.y; \n\n  if (t==a.z) N->z=b.z;\n\n  VNorm(N);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/box.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * box.h - This file contains the defines for boxes etc.\n *\n *  $Id: box.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n} box; \n\n\nbox * newbox(void * tex, vector min, vector max);\nvoid box_intersect(box *, ray *);\nvoid box_normal(box *, vector *, ray * incident, vector *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/camera.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * camera.cpp - This file contains all of the functions for doing camera work.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"camera.h\"\n#include \"util.h\"\n\nray camray(scenedef *scene, int x, int y) {\n  ray ray1, newray;\n  vector projcent;\n  vector projpixel;\n  flt px, py, sx, sy;\n\n  sx = (flt) scene->hres; \n  sy = (flt) scene->vres;\n\n  /* calculate the width and height of the image plane given the */\n  /* aspect ratio, image resolution, and zoom factor */\n\n  px=((sx / sy) / scene->aspectratio) / scene->camzoom;\n  py=1.0 / scene->camzoom;    \n\n  /* assuming viewvec is a unit vector, then the center of the */\n  /* image plane is the camera center + vievec                 */\n  projcent.x = scene->camcent.x + scene->camviewvec.x;\n  projcent.y = scene->camcent.y + scene->camviewvec.y;\n  projcent.z = scene->camcent.z + scene->camviewvec.z;\n\n  /* starting from the center of the image plane, we move the   */\n  /* center of the pel we're calculating, to                    */ \n  /* projcent + (rightvec * x distance)                         */\n  ray1.o=projcent;\n  ray1.d=scene->camrightvec;\n  projpixel=Raypnt(&ray1, ((x*px/sx) - (px / 2.0))); \n\n  /* starting from the horizontally translated pel, we move the */\n  /* center of the pel we're calculating, to                    */ \n  /* projcent + (upvec * y distance)                            */\n  ray1.o=projpixel;\n  ray1.d=scene->camupvec;\n  projpixel=Raypnt(&ray1, ((y*py/sy) - (py / 2.0)));\n\n  /* now that we have the exact pel center in the image plane */\n  /* we create the real primary ray that will be used by the  */\n  /* rest of the system.                                      */\n  /* The ray is expected to be re-normalized elsewhere, we're */\n  /* only really concerned about getting its direction right. */\n  newray.o=scene->camcent;\n  VSub(&projpixel, &scene->camcent, &newray.d);\n  newray.depth = scene->raydepth;\n  newray.flags = RT_RAY_REGULAR;  /* camera only generates primary rays */\n\n  return newray;\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/camera.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * camera.h - This file contains the defines for camera routines etc.\n *\n *  $Id: camera.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nray  camray(scenedef *, int, int);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/coordsys.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * coordsys.cpp -  Routines to translate from one coordinate system to another.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"coordsys.h\"\n\nvoid xytopolar(flt x, flt y, flt rad, flt * u, flt * v) {\n  flt r1;\n  r1=x*x + y*y;  \n  *v=sqrt(r1 / (rad*rad));\n  if (y<0.0) \n    *u=1.0 - acos(x/sqrt(r1))/TWOPI;\n  else \n    *u= acos(x/sqrt(r1))/TWOPI; \n}\n\nvoid xyztocyl(vector pnt, flt height, flt * u, flt * v) {\n  flt r1;\n\n  r1=pnt.x*pnt.x + pnt.y*pnt.y;\n\n  *v=pnt.z / height;\n  if (pnt.y<0.0) \n    *u=1.0 - acos(pnt.x/sqrt(r1))/TWOPI;\n  else \n    *u=acos(pnt.x/sqrt(r1))/TWOPI;\n}\n\nvoid xyztospr(vector pnt, flt * u, flt * v) {\n  flt r1, phi, theta;\n \n  r1=sqrt(pnt.x*pnt.x + pnt.y*pnt.y + pnt.z*pnt.z);\n\n  phi=acos(-pnt.y/r1);   \n  *v=phi/3.1415926;\n\n  theta=acos((pnt.x/r1)/sin(phi))/TWOPI;\n\n  if (pnt.z > 0.0) \n    *u = theta;\n  else \n    *u = 1 - theta; \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/coordsys.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * coordsys.h - defines for coordinate system routines.\n *  \n *  $Id: coordsys.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#define TWOPI 6.2831853\n\nvoid xytopolar(flt, flt, flt, flt *, flt *);\nvoid xyztocyl(vector, flt, flt *, flt *);\nvoid xyztospr(vector, flt *, flt *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/cylinder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * cylinder.cpp - This file contains the functions for dealing with cylinders.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define CYLINDER_PRIVATE \n#include \"cylinder.h\"\n\nstatic object_methods cylinder_methods = {\n  (void (*)(void *, void *))(cylinder_intersect),\n  (void (*)(void *, void *, void *, void *))(cylinder_normal),\n  cylinder_bbox, \n  free \n};\n\nstatic object_methods fcylinder_methods = {\n  (void (*)(void *, void *))(fcylinder_intersect),\n  (void (*)(void *, void *, void *, void *))(cylinder_normal),\n  fcylinder_bbox, \n  free \n};\n\n\nobject * newcylinder(void * tex, vector ctr, vector axis, flt rad) {\n  cylinder * c;\n  \n  c=(cylinder *) rt_getmem(sizeof(cylinder));\n  memset(c, 0, sizeof(cylinder));\n  c->methods = &cylinder_methods;\n\n  c->tex=(texture *) tex;\n  c->ctr=ctr;\n  c->axis=axis;\n  c->rad=rad;\n  return (object *) c;\n}\n\nstatic int cylinder_bbox(void * obj, vector * min, vector * max) {\n  return 0; /* infinite / unbounded object */\n}\n\nstatic void cylinder_intersect(cylinder * cyl, ray * ry) {\n  vector rc, n, D, O;  \n  flt t, s, tin, tout, ln, d; \n\n  rc.x = ry->o.x - cyl->ctr.x;\n  rc.y = ry->o.y - cyl->ctr.y;\n  rc.z = ry->o.z - cyl->ctr.z; \n\n  VCross(&ry->d, &cyl->axis, &n);\n\n  VDOT(ln, n, n);\n  ln=sqrt(ln);    /* finish length calculation */\n\n  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */\n    VDOT(d, rc, cyl->axis);         \n    D.x = rc.x - d * cyl->axis.x; \n    D.y = rc.y - d * cyl->axis.y;\n    D.z = rc.z - d * cyl->axis.z;\n    VDOT(d, D, D);\n    d = sqrt(d);\n    tin = -FHUGE;\n    tout = FHUGE;\n    /* if (d <= cyl->rad) then ray is inside cylinder.. else outside */\n  }\n\n  VNorm(&n);\n  VDOT(d, rc, n);\n  d = fabs(d); \n\n  if (d <= cyl->rad) {  /* ray intersects cylinder.. */\n    VCross(&rc, &cyl->axis, &O);\n    VDOT(t, O, n);\n    t = - t / ln;\n    VCross(&n, &cyl->axis, &O); \n    VNorm(&O);\n    VDOT(s, ry->d, O);\n    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);\n    tin = t - s;\n    add_intersection(tin, (object *) cyl, ry); \n    tout = t + s;\n    add_intersection(tout, (object *) cyl, ry);\n  }\n}\n\nstatic void cylinder_normal(cylinder * cyl, vector * pnt, ray * incident, vector * N) {\n  vector a,b,c;\n  flt t;\n\n  VSub((vector *) pnt, &(cyl->ctr), &a);\n\n  c=cyl->axis;\n\n  VNorm(&c);\n \n  VDOT(t, a, c);\n\n  b.x = c.x * t + cyl->ctr.x; \n  b.y = c.y * t + cyl->ctr.y;\n  b.z = c.z * t + cyl->ctr.z;\n\n  VSub(pnt, &b, N); \n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  { /* make cylinder double sided */\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\nobject * newfcylinder(void * tex, vector ctr, vector axis, flt rad) {\n  cylinder * c;\n  \n  c=(cylinder *) rt_getmem(sizeof(cylinder));\n  memset(c, 0, sizeof(cylinder));\n  c->methods = &fcylinder_methods;\n\n  c->tex=(texture *) tex;\n  c->ctr=ctr;\n  c->axis=axis;\n  c->rad=rad;\n\n  return (object *) c;\n}\n\nstatic int fcylinder_bbox(void * obj, vector * min, vector * max) {\n  cylinder * c = (cylinder *) obj;\n  vector mintmp, maxtmp;\n\n  mintmp.x = c->ctr.x;\n  mintmp.y = c->ctr.y;\n  mintmp.z = c->ctr.z;\n  maxtmp.x = c->ctr.x + c->axis.x;\n  maxtmp.y = c->ctr.y + c->axis.y;\n  maxtmp.z = c->ctr.z + c->axis.z;\n\n  min->x = MYMIN(mintmp.x, maxtmp.x);\n  min->y = MYMIN(mintmp.y, maxtmp.y);\n  min->z = MYMIN(mintmp.z, maxtmp.z);\n  min->x -= c->rad;\n  min->y -= c->rad;\n  min->z -= c->rad;\n\n  max->x = MYMAX(mintmp.x, maxtmp.x);\n  max->y = MYMAX(mintmp.y, maxtmp.y);\n  max->z = MYMAX(mintmp.z, maxtmp.z);\n  max->x += c->rad;\n  max->y += c->rad;\n  max->z += c->rad;\n\n  return 1;\n}\n\n\nstatic void fcylinder_intersect(cylinder * cyl, ray * ry) {\n  vector rc, n, O, hit, tmp2, ctmp4;\n  flt t, s, tin, tout, ln, d, tmp, tmp3;\n \n  rc.x = ry->o.x - cyl->ctr.x;  \n  rc.y = ry->o.y - cyl->ctr.y;\n  rc.z = ry->o.z - cyl->ctr.z;\n \n  VCross(&ry->d, &cyl->axis, &n);\n \n  VDOT(ln, n, n);\n  ln=sqrt(ln);    /* finish length calculation */\n \n  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */\n    return;       /* in this case, we want to miss or go through the \"hole\" */\n  }\n \n  VNorm(&n);\n  VDOT(d, rc, n);\n  d = fabs(d);\n \n  if (d <= cyl->rad) {  /* ray intersects cylinder.. */\n    VCross(&rc, &cyl->axis, &O);\n    VDOT(t, O, n);\n    t = - t / ln;\n    VCross(&n, &cyl->axis, &O);\n    VNorm(&O);\n    VDOT(s, ry->d, O);\n    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);\n    tin = t - s;\n\n    RAYPNT(hit, (*ry), tin); \n\n    ctmp4=cyl->axis;\n    VNorm(&ctmp4);\n\n    tmp2.x = hit.x - cyl->ctr.x;   \n    tmp2.y = hit.y - cyl->ctr.y;   \n    tmp2.z = hit.z - cyl->ctr.z;   \n\n    VDOT(tmp,  tmp2, ctmp4);\n    VDOT(tmp3, cyl->axis, cyl->axis);\n\n    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) \n      add_intersection(tin, (object *) cyl, ry);\n    tout = t + s;\n\n    RAYPNT(hit, (*ry), tout); \n\n    tmp2.x = hit.x - cyl->ctr.x;   \n    tmp2.y = hit.y - cyl->ctr.y;   \n    tmp2.z = hit.z - cyl->ctr.z;   \n\n    VDOT(tmp,  tmp2, ctmp4); \n    VDOT(tmp3, cyl->axis, cyl->axis);\n\n    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) \n      add_intersection(tout, (object *) cyl, ry);\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/cylinder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * cylinder.h - This file contains the defines for cylinders etc.\n *\n *  $Id: cylinder.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nobject * newcylinder(void *, vector, vector, flt);\nobject * newfcylinder(void *, vector, vector, flt);\n\n#ifdef CYLINDER_PRIVATE\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  vector axis;\n  flt rad;\n} cylinder;\n\nstatic void cylinder_intersect(cylinder *, ray *);\nstatic void fcylinder_intersect(cylinder *, ray *);\n\nstatic int cylinder_bbox(void * obj, vector * min, vector * max);\nstatic int fcylinder_bbox(void * obj, vector * min, vector * max);\n\nstatic void cylinder_normal(cylinder *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/extvol.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * extvol.cpp - Volume rendering helper routines etc.\n */\n\n#include<stdio.h>\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"util.h\"\n#include \"box.h\"\n#include \"extvol.h\"\n#include \"trace.h\"\n#include \"sphere.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"global.h\"\n\n\nint extvol_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nstatic object_methods extvol_methods = {\n  (void (*)(void *, void *))(box_intersect),\n  (void (*)(void *, void *, void *, void *))(box_normal),\n  extvol_bbox, \n  free \n};\n\nextvol * newextvol(void * voidtex, vector min, vector max, \n                   int samples, flt (* evaluator)(flt, flt, flt)) { \n  extvol * xvol;\n  texture * tex;\n  \n  tex = (texture *) voidtex;\n\n  xvol = (extvol *) rt_getmem(sizeof(extvol));\n  memset(xvol, 0, sizeof(extvol));\n\n  xvol->methods = &extvol_methods;\n\n  xvol->min=min;\n  xvol->max=max;\n  xvol->evaluator = evaluator;\n  xvol->ambient = tex->ambient;\n  xvol->diffuse = tex->diffuse;\n  xvol->opacity = tex->opacity;  \n  xvol->samples = samples;\n\n  xvol->tex = (texture *)rt_getmem(sizeof(texture));\n  memset(xvol->tex, 0, sizeof(texture));\n\n  xvol->tex->ctr.x = 0.0;\n  xvol->tex->ctr.y = 0.0;\n  xvol->tex->ctr.z = 0.0;\n  xvol->tex->rot = xvol->tex->ctr;\n  xvol->tex->scale = xvol->tex->ctr;\n  xvol->tex->uaxs = xvol->tex->ctr;\n  xvol->tex->vaxs = xvol->tex->ctr;\n  xvol->tex->islight = 0;\n  xvol->tex->shadowcast = 0;\n\n  xvol->tex->col=tex->col;\n  xvol->tex->ambient=1.0;\n  xvol->tex->diffuse=0.0;\n  xvol->tex->specular=0.0;\n  xvol->tex->opacity=1.0;\n  xvol->tex->img=NULL;\n  xvol->tex->texfunc=(color(*)(void *, void *, void *))(ext_volume_texture);\n  xvol->tex->obj = (void *) xvol; /* XXX hack! */\n\n  return xvol;\n}\n\ncolor ExtVoxelColor(flt scalar) {\n  color col;\n\n  if (scalar > 1.0) \n    scalar = 1.0;\n\n  if (scalar < 0.0)\n    scalar = 0.0;\n\n  if (scalar < 0.5) {\n    col.g = 0.0;\n  }\n  else {\n    col.g = (scalar - 0.5) * 2.0;\n  }\n\n  col.r = scalar;\n  col.b = 1.0 - (scalar / 2.0);\n\n  return col;\n} \n\ncolor ext_volume_texture(vector * hit, texture * tex, ray * ry) {\n  color col, col2;\n  box * bx;\n  extvol * xvol;\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  flt t, tdist, dt, ddt, sum, tt; \n  vector pnt, bln;\n  flt scalar, transval; \n  int i;\n  point_light * li;\n  color diffint; \n  vector N, L;\n  flt inten;\n\n  col.r = 0.0;\n  col.g = 0.0;\n  col.b = 0.0;\n\n    bx = (box *) tex->obj;\n  xvol = (extvol *) tex->obj;\n \n  tnear= -FHUGE;\n  tfar= FHUGE;\n \n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n if (ry->d.y == 0.0) {\n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n  if (tnear < 0.0) tnear=0.0;\n \n  tdist = xvol->samples;\n\n  tt = (xvol->opacity / tdist); \n\n  bln.x=fabs(bx->min.x - bx->max.x);\n  bln.y=fabs(bx->min.y - bx->max.y);\n  bln.z=fabs(bx->min.z - bx->max.z);\n  \n     dt = 1.0 / tdist; \n    sum = 0.0;\n\n/* Accumulate color as the ray passes through the voxels */\n  for (t=tnear; t<=tfar; t+=dt) {\n    if (sum < 1.0) {\n      pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;\n      pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;\n      pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;\n\n      /* call external evaluator assume 0.0 -> 1.0 range.. */ \n      scalar = xvol->evaluator(pnt.x, pnt.y, pnt.z);  \n\n      transval = tt * scalar; \n      sum += transval; \n\n      col2 = ExtVoxelColor(scalar);\n\n      col.r += transval * col2.r * xvol->ambient;\n      col.g += transval * col2.g * xvol->ambient;\n      col.b += transval * col2.b * xvol->ambient;\n\n      ddt = dt;\n\n      /* Add in diffuse shaded light sources (no shadows) */\n      if (xvol->diffuse > 0.0) {\n  \n        /* Calculate the Volume gradient at the voxel */\n        N.x = (xvol->evaluator(pnt.x - ddt, pnt.y, pnt.z)  -  \n              xvol->evaluator(pnt.x + ddt, pnt.y, pnt.z)) *  8.0 * tt; \n  \n        N.y = (xvol->evaluator(pnt.x, pnt.y - ddt, pnt.z)  -  \n              xvol->evaluator(pnt.x, pnt.y + ddt, pnt.z)) *  8.0 * tt; \n  \n        N.z = (xvol->evaluator(pnt.x, pnt.y, pnt.z - ddt)  -  \n              xvol->evaluator(pnt.x, pnt.y, pnt.z + ddt)) *  8.0 * tt; \n \n        /* only light surfaces with enough of a normal.. */\n        if ((N.x*N.x + N.y*N.y + N.z*N.z) > 0.0) { \n          diffint.r = 0.0; \n          diffint.g = 0.0; \n          diffint.b = 0.0; \n    \n          /* add the contribution of each of the lights.. */\n          for (i=0; i<numlights; i++) {\n            li=lightlist[i];\n            VSUB(li->ctr, (*hit), L)\n            VNorm(&L);\n            VDOT(inten, N, L)\n    \n            /* only add light if its from the front of the surface */\n            /* could add back-lighting if we wanted to later.. */\n            if (inten > 0.0) {\n              diffint.r += inten*li->tex->col.r;\n              diffint.g += inten*li->tex->col.g;\n              diffint.b += inten*li->tex->col.b;\n            }\n          }   \n          col.r += col2.r * diffint.r * xvol->diffuse;\n          col.g += col2.g * diffint.g * xvol->diffuse;\n          col.b += col2.b * diffint.b * xvol->diffuse;\n        }\n      }\n    }   \n    else { \n      sum=1.0;\n    }  \n  }\n\n  /* Add in transmitted ray from outside environment */\n  if (sum < 1.0) {      /* spawn transmission rays / refraction */\n    color transcol;\n\n    transcol = shade_transmission(ry, hit, 1.0 - sum);\n\n    col.r += transcol.r; /* add the transmitted ray  */\n    col.g += transcol.g; /* to the diffuse and       */\n    col.b += transcol.b; /* transmission total..     */\n  }\n\n  return col;\n}\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/extvol.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.h - Volume rendering definitions etc.\n *\n *\n *  $Id: extvol.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n  flt ambient;\n  flt diffuse;\n  flt opacity;\n  int samples;\n  flt (* evaluator)(flt, flt, flt);\n} extvol;\n\nextvol * newextvol(void * voidtex, vector min, vector max, \n                   int samples, flt (* evaluator)(flt, flt, flt));\ncolor ext_volume_texture(vector *, texture *, ray *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/global.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * global.cpp - any/all global data items etc should be in this file\n */\n\n#include \"types.h\"\n#include \"machine.h\"\n#include \"sphere.h\"\n#include \"light.h\"\n\n/* stuff moved from intersect.c */\nobject * rootobj = NULL; /* starts out empty. */\n\npoint_light * lightlist[MAXLIGHTS];\nint numlights = 0;\n\nunsigned int numobjects = 0; /* used to assign unique object ID's */\n\n/* used in util.c */\nunsigned int rt_mem_in_use = 0;\n\n/* used in api.c */\nint parinitted = 0;\n\nint graphicswindowopen = 0;\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/global.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * global.h - any/all global data items etc should be in this file\n *\n *  $Id: global.h,v 1.2 2007-02-22 17:54:15 Exp $\n *\n */\n\n/* stuff moved from intersect.c */\nextern object * rootobj;\n\nextern point_light * lightlist[MAXLIGHTS];\nextern int numlights;\n\nextern unsigned int numobjects;\n\nextern unsigned int rt_mem_in_use;\nextern int parinitted;\n\nextern int graphicswindowopen;\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/grid.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * grid.cpp - spatial subdivision efficiency structures\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define GRID_PRIVATE\n#include \"grid.h\"\n\n#ifndef cbrt\n#define     cbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/3.0) : \\\n                          ((x) < 0.0 ? -pow((double)-(x), 1.0/3.0) : 0.0))\n\n#define     qbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/4.0) : \\\n                          ((x) < 0.0 ? -pow((double)-(x), 1.0/4.0) : 0.0))\n\n#endif\n\nstatic object_methods grid_methods = {\n  (void (*)(void *, void *))(grid_intersect),\n  (void (*)(void *, void *, void *, void *))(NULL),\n  grid_bbox, \n  grid_free \n};\n\nextern bool silent_mode;\n\nobject * newgrid(int xsize, int ysize, int zsize, vector min, vector max) {\n  grid * g;\n\n  g = (grid *) rt_getmem(sizeof(grid));\n  memset(g, 0, sizeof(grid));  \n\n  g->methods = &grid_methods;\n  g->id = new_objectid();\n\n  g->xsize = xsize;\n  g->ysize = ysize;\n  g->zsize = zsize;\n\n  g->min = min;\n  g->max = max;\n\n  VSub(&g->max, &g->min, &g->voxsize);\n  g->voxsize.x /= (flt) g->xsize; \n  g->voxsize.y /= (flt) g->ysize; \n  g->voxsize.z /= (flt) g->zsize; \n\n  g->cells = (objectlist **) rt_getmem(xsize*ysize*zsize*sizeof(objectlist *));\n  memset(g->cells, 0, xsize*ysize*zsize * sizeof(objectlist *));\n\n/* fprintf(stderr, \"New grid, size: %8d %8d %8d\\n\", g->xsize, g->ysize, g->zsize); */\n\n  return (object *) g;\n}\n\nstatic int grid_bbox(void * obj, vector * min, vector * max) {\n  grid * g = (grid *) obj;\n \n  *min = g->min;\n  *max = g->max;\n\n  return 1;\n}\n\nstatic void grid_free(void * v) {\n  int i, numvoxels;\n  grid * g = (grid *) v;\n \n  /* loop through all voxels and free the object lists */\n  numvoxels = g->xsize * g->ysize * g->zsize; \n  for (i=0; i<numvoxels; i++) {\n    objectlist * lcur, * lnext;\n\n    lcur = g->cells[i];\n    while (lcur != NULL) {\n      lnext = lcur->next;\n      free(lcur);\n    }\n  }\n\n  /* free the grid cells */ \n  free(g->cells);\n\n  /* free all objects on the grid object list */\n  free_objects(g->objects);   \n\n  free(g);\n}\n\nstatic void globalbound(object ** rootlist, vector * gmin, vector * gmax) {\n  vector min, max;\n  object * cur;\n\n  if (*rootlist == NULL)  /* don't bound non-existant objects */\n    return;\n\n  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;\n  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;\n\n  cur=*rootlist;\n  while (cur != NULL)  {  /* Go! */\n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    if (cur->methods->bbox((void *) cur, &min, &max)) {\n      gmin->x = MYMIN( gmin->x , min.x);\n      gmin->y = MYMIN( gmin->y , min.y);\n      gmin->z = MYMIN( gmin->z , min.z);\n\n      gmax->x = MYMAX( gmax->x , max.x);\n      gmax->y = MYMAX( gmax->y , max.y);\n      gmax->z = MYMAX( gmax->z , max.z);\n    }\n\n    cur=(object *)cur->nextobj;\n  }\n}\n\n\nstatic int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax) {\n  vector min, max, cellmin, cellmax;\n  objectlist * cur;\n  int numinbounds = 0;\n\n  cur = g->cells[index->z*g->xsize*g->ysize + index->y*g->xsize + index->x]; \n\n  if (cur == NULL)  /* don't bound non-existant objects */\n    return 0;\n\n  cellmin.x = voxel2x(g, index->x); \n  cellmin.y = voxel2y(g, index->y); \n  cellmin.z = voxel2z(g, index->z); \n\n  cellmax.x = cellmin.x + g->voxsize.x;\n  cellmax.y = cellmin.y + g->voxsize.y;\n  cellmax.z = cellmin.z + g->voxsize.z;\n\n  cmin->x =  FHUGE;   cmin->y =  FHUGE;   cmin->z =  FHUGE;\n  cmax->x = -FHUGE;   cmax->y = -FHUGE;   cmax->z = -FHUGE;\n\n  while (cur != NULL)  {  /* Go! */\n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    if (cur->obj->methods->bbox((void *) cur->obj, &min, &max)) {\n      if ((min.x >= cellmin.x) && (max.x <= cellmax.x) &&\n          (min.y >= cellmin.y) && (max.y <= cellmax.y) &&\n          (min.z >= cellmin.z) && (max.z <= cellmax.z)) {\n      \n        cmin->x = MYMIN( cmin->x , min.x);\n        cmin->y = MYMIN( cmin->y , min.y);\n        cmin->z = MYMIN( cmin->z , min.z);\n\n        cmax->x = MYMAX( cmax->x , max.x);\n        cmax->y = MYMAX( cmax->y , max.y);\n        cmax->z = MYMAX( cmax->z , max.z);\n      \n        numinbounds++;\n      }\n    }\n\n    cur=cur->next;\n  }\n \n  /* in case we get a 0.0 sized axis on the cell bounds, we'll */\n  /* use the original cell bounds */\n  if ((cmax->x - cmin->x) < EPSILON) {\n    cmax->x += EPSILON;\n    cmin->x -= EPSILON;\n  }\n  if ((cmax->y - cmin->y) < EPSILON) {\n    cmax->y += EPSILON;\n    cmin->y -= EPSILON;\n  }\n  if ((cmax->z - cmin->z) < EPSILON) {\n    cmax->z += EPSILON;\n    cmin->z -= EPSILON;\n  }\n\n  return numinbounds;\n}\n\nstatic int countobj(object * root) {\n  object * cur;     /* counts the number of objects on a list */\n  int numobj;\n\n  numobj=0;\n  cur=root;\n\n  while (cur != NULL) {\n    cur=(object *)cur->nextobj;\n    numobj++;\n  }\n  return numobj;\n}\n\nstatic int countobjlist(objectlist * root) {\n  objectlist * cur;\n  int numobj;\n\n  numobj=0; \n  cur = root;\n\n  while (cur != NULL) {\n    cur = cur->next;\n    numobj++;\n  }\n  return numobj;\n}\n\nint engrid_scene(object ** list) {\n  grid * g;\n  int numobj, numcbrt;\n  vector gmin, gmax;\n  gridindex index;\n \n  if (*list == NULL)\n    return 0;\n\n  numobj = countobj(*list);\n\n  if ( !silent_mode )\n    fprintf(stderr, \"Scene contains %d bounded objects.\\n\", numobj);\n\n  if (numobj > 16) {\n    numcbrt = (int) cbrt(4*numobj);\n    globalbound(list, &gmin, &gmax);\n\n    g = (grid *) newgrid(numcbrt, numcbrt, numcbrt, gmin, gmax);\n    engrid_objlist(g, list);\n\n    numobj = countobj(*list);\n    g->nextobj = *list;\n    *list = (object *) g;\n\n    /* now create subgrids.. */\n    for (index.z=0; index.z<g->zsize; index.z++) {\n      for (index.y=0; index.y<g->ysize; index.y++) {\n        for (index.x=0; index.x<g->xsize; index.x++) {\n          engrid_cell(g, &index);\n        }\n      }\n    } \n  }\n\n  return 1;\n}\n\n\nvoid engrid_objlist(grid * g, object ** list) {\n  object * cur, * next, **prev;\n\n  if (*list == NULL) \n    return;\n  \n  prev = list; \n  cur = *list;\n\n  while (cur != NULL) {\n    next = (object *)cur->nextobj;\n\n    if (engrid_object(g, cur)) \n      *prev = next;\n    else \n      prev = (object **) &cur->nextobj;\n\n    cur = next;\n  } \n}\n\nstatic int engrid_cell(grid * gold, gridindex *index) {\n  vector gmin, gmax, gsize;\n  flt len;\n  int numobj, numcbrt, xs, ys, zs;\n  grid * g;\n  objectlist **list;\n  objectlist * newobj;\n\n  list = &gold->cells[index->z*gold->xsize*gold->ysize + \n                     index->y*gold->xsize  + index->x];\n\n  if (*list == NULL)\n    return 0;\n\n  numobj =  cellbound(gold, index, &gmin, &gmax);\n\n  VSub(&gmax, &gmin, &gsize);\n  len = 1.0 / (MYMAX( MYMAX(gsize.x, gsize.y), gsize.z ));\n  gsize.x *= len;  \n  gsize.y *= len;  \n  gsize.z *= len;  \n\n  if (numobj > 16) {\n    numcbrt = (int) cbrt(2*numobj); \n    \n    xs = (int) ((flt) numcbrt * gsize.x);\n    if (xs < 1) xs = 1;\n    ys = (int) ((flt) numcbrt * gsize.y);\n    if (ys < 1) ys = 1;\n    zs = (int) ((flt) numcbrt * gsize.z);\n    if (zs < 1) zs = 1;\n\n    g = (grid *) newgrid(xs, ys, zs, gmin, gmax);\n    engrid_objectlist(g, list);\n\n    newobj = (objectlist *) rt_getmem(sizeof(objectlist));    \n    newobj->obj = (object *) g;\n    newobj->next = *list;\n    *list = newobj;\n\n    g->nextobj = gold->objects;\n    gold->objects = (object *) g;\n  }\n\n  return 1;\n}\n\nstatic int engrid_objectlist(grid * g, objectlist ** list) {\n  objectlist * cur, * next, **prev;\n  int numsucceeded = 0; \n\n  if (*list == NULL) \n    return 0;\n  \n  prev = list; \n  cur = *list;\n\n  while (cur != NULL) {\n    next = cur->next;\n\n    if (engrid_object(g, cur->obj)) {\n      *prev = next;\n      free(cur);\n      numsucceeded++;\n    }\n    else {\n      prev = &cur->next;\n    }\n\n    cur = next;\n  } \n\n  return numsucceeded;\n}\n\n\n\nstatic int engrid_object(grid * g, object * obj) {\n  vector omin, omax; \n  gridindex low, high;\n  int x, y, z, zindex, yindex, voxindex;\n  objectlist * tmp;\n \n  if (obj->methods->bbox(obj, &omin, &omax)) { \n    if (!pos2grid(g, &omin, &low) || !pos2grid(g, &omax, &high)) {\n      return 0; /* object is not wholly contained in the grid */\n    }\n  }\n  else {\n    return 0; /* object is unbounded */\n  }\n\n  /* add the object to the complete list of objects in the grid */\n  obj->nextobj = g->objects;\n  g->objects = obj;\n\n  /* add this object to all voxels it inhabits */\n  for (z=low.z; z<=high.z; z++) {\n    zindex = z * g->xsize * g->ysize;\n    for (y=low.y; y<=high.y; y++) {\n      yindex = y * g->xsize;\n      for (x=low.x; x<=high.x; x++) {\n        voxindex = x + yindex + zindex; \n        tmp = (objectlist *) rt_getmem(sizeof(objectlist));\n        tmp->next = g->cells[voxindex];\n        tmp->obj = obj;\n        g->cells[voxindex] = tmp;\n      }\n    }\n  }\n \n  return 1;\n}\n\nstatic int pos2grid(grid * g, vector * pos, gridindex * index) {\n  index->x = (int) ((pos->x - g->min.x) / g->voxsize.x);\n  index->y = (int) ((pos->y - g->min.y) / g->voxsize.y);\n  index->z = (int) ((pos->z - g->min.z) / g->voxsize.z);\n  \n  if (index->x == g->xsize)\n    index->x--;\n  if (index->y == g->ysize)\n    index->y--;\n  if (index->z == g->zsize)\n    index->z--;\n\n  if (index->x < 0 || index->x > g->xsize ||\n      index->y < 0 || index->y > g->ysize ||\n      index->z < 0 || index->z > g->zsize) \n    return 0;\n\n  if (pos->x < g->min.x || pos->x > g->max.x ||\n      pos->y < g->min.y || pos->y > g->max.y ||\n      pos->z < g->min.z || pos->z > g->max.z) \n    return 0; \n\n  return 1;\n}\n\n\n/* the real thing */\nstatic void grid_intersect(grid * g, ray * ry) {\n  flt tnear, tfar, offset;\n  vector curpos, tmax, tdelta, pdeltaX, pdeltaY, pdeltaZ, nXp, nYp, nZp;\n  gridindex curvox, step, out; \n  int voxindex;\n  objectlist * cur;\n\n  if (ry->flags & RT_RAY_FINISHED)\n    return;\n\n  if (!grid_bounds_intersect(g, ry, &tnear, &tfar))\n    return;\n \n  if (ry->maxdist < tnear)\n    return;\n \n  curpos = Raypnt(ry, tnear); \n  pos2grid(g, &curpos, &curvox);\n  offset = tnear;\n\n  /* Setup X iterator stuff */\n  if (fabs(ry->d.x) < EPSILON) {\n    tmax.x = FHUGE;\n    tdelta.x = 0.0;\n    step.x = 0;\n    out.x = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.x < 0.0) {\n    tmax.x = offset + ((voxel2x(g, curvox.x) - curpos.x) / ry->d.x); \n    tdelta.x = g->voxsize.x / - ry->d.x;\n    step.x = out.x = -1;\n  }\n  else {\n    tmax.x = offset + ((voxel2x(g, curvox.x + 1) - curpos.x) / ry->d.x);\n    tdelta.x = g->voxsize.x / ry->d.x;\n    step.x = 1;\n    out.x = g->xsize;\n  }\n\n  /* Setup Y iterator stuff */\n  if (fabs(ry->d.y) < EPSILON) {\n    tmax.y = FHUGE;\n    tdelta.y = 0.0; \n    step.y = 0;\n    out.y = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.y < 0.0) {\n    tmax.y = offset + ((voxel2y(g, curvox.y) - curpos.y) / ry->d.y);\n    tdelta.y = g->voxsize.y / - ry->d.y;\n    step.y = out.y = -1;\n  }\n  else {\n    tmax.y = offset + ((voxel2y(g, curvox.y + 1) - curpos.y) / ry->d.y);\n    tdelta.y = g->voxsize.y / ry->d.y;\n    step.y = 1;\n    out.y = g->ysize;\n  }\n\n  /* Setup Z iterator stuff */\n  if (fabs(ry->d.z) < EPSILON) {\n    tmax.z = FHUGE;\n    tdelta.z = 0.0; \n    step.z = 0;\n    out.z = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.z < 0.0) {\n    tmax.z = offset + ((voxel2z(g, curvox.z) - curpos.z) / ry->d.z);\n    tdelta.z = g->voxsize.z / - ry->d.z;\n    step.z = out.z = -1;\n  }\n  else {\n    tmax.z = offset + ((voxel2z(g, curvox.z + 1) - curpos.z) / ry->d.z);\n    tdelta.z = g->voxsize.z / ry->d.z;\n    step.z = 1;\n    out.z = g->zsize;\n  }\n\n  pdeltaX = ry->d;\n  VScale(&pdeltaX, tdelta.x);\n  pdeltaY = ry->d;\n  VScale(&pdeltaY, tdelta.y);\n  pdeltaZ = ry->d;\n  VScale(&pdeltaZ, tdelta.z);\n\n  nXp = Raypnt(ry, tmax.x);\n  nYp = Raypnt(ry, tmax.y);\n  nZp = Raypnt(ry, tmax.z);\n\n  voxindex = curvox.z*g->xsize*g->ysize + curvox.y*g->xsize + curvox.x; \n  while (1) {\n    if (tmax.x < tmax.y && tmax.x < tmax.z) {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.x += step.x;\n      if (ry->maxdist < tmax.x || curvox.x == out.x) \n        break; \n      voxindex += step.x;\n      tmax.x += tdelta.x;\n      curpos = nXp;\n      nXp.x += pdeltaX.x;\n      nXp.y += pdeltaX.y;\n      nXp.z += pdeltaX.z;\n    }\n    else if (tmax.z < tmax.y) {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.z += step.z;\n      if (ry->maxdist < tmax.z || curvox.z == out.z) \n        break;\n      voxindex += step.z*g->xsize*g->ysize;\n      tmax.z += tdelta.z;\n      curpos = nZp;\n      nZp.x += pdeltaZ.x;\n      nZp.y += pdeltaZ.y;\n      nZp.z += pdeltaZ.z;\n    }\n    else {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.y += step.y;\n      if (ry->maxdist < tmax.y || curvox.y == out.y) \n        break;\n      voxindex += step.y*g->xsize;\n      tmax.y += tdelta.y;\n      curpos = nYp;\n      nYp.x += pdeltaY.x;\n      nYp.y += pdeltaY.y;\n      nYp.z += pdeltaY.z;\n    }\n\n    if (ry->flags & RT_RAY_FINISHED)\n      break;\n  }\n}\n\nstatic void voxel_intersect(grid * g, ray * ry, int voxindex) {\n  objectlist * cur;\n\n  cur = g->cells[voxindex];\n  while (cur != NULL) {\n    cur->obj->methods->intersect(cur->obj, ry);\n    cur = cur->next;\n  }\n}\n\nstatic int grid_bounds_intersect(grid * g, ray * ry, flt *nr, flt *fr) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < g->min.x) || (ry->o.x > g->max.x)) return 0;\n  }\n  else {\n    tx1 = (g->min.x - ry->o.x) / ry->d.x;\n    tx2 = (g->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  if (ry->d.y == 0.0) {\n    if ((ry->o.y < g->min.y) || (ry->o.y > g->max.y)) return 0;\n  }\n  else {\n    ty1 = (g->min.y - ry->o.y) / ry->d.y;\n    ty2 = (g->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < g->min.z) || (ry->o.z > g->max.z)) return 0;\n  }\n  else {\n    tz1 = (g->min.z - ry->o.z) / ry->d.z;\n    tz2 = (g->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  *nr = tnear;\n  *fr = tfar; \n  return 1;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/grid.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * grid.h - spatial subdivision efficiency structures\n *\n * $Id: grid.h,v 1.2 2007-02-22 17:54:15 Exp $\n * \n */\n\nint engrid_scene(object ** list);\nobject * newgrid(int xsize, int ysize, int zsize, vector min, vector max);\n\n#ifdef GRID_PRIVATE\n\ntypedef struct objectlist {\n  struct objectlist * next; /* next link in the list */\n  object * obj;             /* the actual object     */\n} objectlist; \n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  int xsize;           /* number of cells along the X direction */\n  int ysize;           /* number of cells along the Y direction */\n  int zsize;           /* number of cells along the Z direction */\n  vector min;          /* the minimum coords for the box containing the grid */\n  vector max;          /* the maximum coords for the box containing the grid */\n  vector voxsize;      /* the size of a grid cell/voxel */\n  object * objects;    /* all objects contained in the grid */\n  objectlist ** cells; /* the grid cells themselves */\n} grid;\n\ntypedef struct {\n  int x;         /* Voxel X address */\n  int y;         /* Voxel Y address */\n  int z;         /* Voxel Z address */\n} gridindex; \n\n/*\n * Convert from voxel number along X/Y/Z to corresponding coordinate.\n */\n#define voxel2x(g,X)  ((X) * (g->voxsize.x) + (g->min.x))\n#define voxel2y(g,Y)  ((Y) * (g->voxsize.y) + (g->min.y))\n#define voxel2z(g,Z)  ((Z) * (g->voxsize.z) + (g->min.z))\n\n/*\n * And vice-versa.\n */\n#define x2voxel(g,x)            (((x) - g->min.x) / g->voxsize.x)\n#define y2voxel(g,y)            (((y) - g->min.y) / g->voxsize.y)\n#define z2voxel(g,z)            (((z) - g->min.z) / g->voxsize.z)\n\n\nstatic int grid_bbox(void * obj, vector * min, vector * max);\nstatic void grid_free(void * v);\n\nstatic int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax);\n\nvoid engrid_objlist(grid * g, object ** list);\nstatic int engrid_object(grid * g, object * obj);\n\nstatic int engrid_objectlist(grid * g, objectlist ** list);\nstatic int engrid_cell(grid *, gridindex *);\n\nstatic int pos2grid(grid * g, vector * pos, gridindex * index);\nstatic void grid_intersect(grid *, ray *);\nstatic void voxel_intersect(grid * g, ray * ry, int voxaddr);\nstatic int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far); \n\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/imageio.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  imageio.cpp - This file deals with reading/writing image files\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n * truecolor sort of file..\n */\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\"\n#include \"ppm.h\"     /* PPM files */\n#include \"tgafile.h\" /* Truevision Targa files */\n#include \"jpeg.h\"    /* JPEG files */\n\nstatic \nint fakeimage(char * name, int * xres, int * yres, unsigned char ** imgdata) {\n  int i, imgsize;\n\n  fprintf(stderr, \"Error loading image %s.  Faking it.\\n\", name);\n   \n  *xres = 2;\n  *yres = 2;\n  imgsize = 3 * (*xres) * (*yres);\n  *imgdata = (unsigned char *)rt_getmem(imgsize);\n  for (i=0; i<imgsize; i++) {\n    (*imgdata)[i] = 255;\n  }\n\n  return IMAGENOERR;\n}\n\n\nint readimage(rawimage * img) {\n  int rc;\n  int xres, yres;\n  unsigned char * imgdata = NULL;\n  char * name = img->name;\n\n  if (strstr(name, \".ppm\")) { \n    rc = readppm(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".tga\")) {\n    rc = readtga(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".jpg\")) {\n    rc = readjpeg(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".gif\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".png\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".tiff\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".rgb\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".xpm\")) {\n    rc = IMAGEUNSUP; \n  }\n  else {\n    rc = readppm(name, &xres, &yres, &imgdata);\n  } \n\n  switch (rc) {\n    case IMAGEREADERR:\n      fprintf(stderr, \"Short read encountered while loading image %s\\n\", name);\n      rc = IMAGENOERR; /* remap to non-fatal error */\n      break;\n\n    case IMAGEUNSUP:\n      fprintf(stderr, \"Cannot read unsupported image format for image %s\\n\", name);\n      break;\n  }    \n\n  /* If the image load failed, create a tiny white colored image to fake it */ \n  /* this allows a scene to render even when a file can't be loaded */\n  if (rc != IMAGENOERR) {\n    rc = fakeimage(name, &xres, &yres, &imgdata);\n  }\n\n  /* If we succeeded in loading the image, return it. */\n  if (rc == IMAGENOERR) { \n    img->xres = xres;\n    img->yres = yres;\n    img->bpp = 3;  \n    img->data = imgdata;\n  }\n\n  return rc;\n}\n \n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/imageio.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  imageio.h - This file deals with reading/writing image files \n *\n *  $Id: imageio.h,v 1.2 2007-02-22 17:54:15 Exp $\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file.. */\n\n#define IMAGENOERR     0  /* no error */\n#define IMAGEBADFILE   1  /* can't find or can't open the file */\n#define IMAGEUNSUP     2  /* the image file is an unsupported format */\n#define IMAGEALLOCERR  3  /* not enough remaining memory to load this image */\n#define IMAGEREADERR   4  /* failed read, short reads etc */\n\nint readimage(rawimage *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/imap.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * imap.cpp - This file contains code for doing image map type things.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"imap.h\"\n#include \"util.h\"\n#include \"imageio.h\"\n\nrawimage * imagelist[MAXIMGS];\nint numimages;\n\nvoid ResetImages(void) {\n  int i;\n  numimages=0;\n  for (i=0; i<MAXIMGS; i++) {\n    imagelist[i]=NULL;\n  }\n}\n\nvoid LoadImage(rawimage * image) {\n  if (!image->loaded) {\n    readimage(image);\n    image->loaded=1;\n  }\n}\n\ncolor ImageMap(rawimage * image, flt u, flt v) {\n  color col, colx, colx2;\n  flt x,y, px, py;\n  int x1, x2, y1, y2;\n  unsigned char * ptr;\n  unsigned char * ptr2;\n\n  if (!image->loaded) {   \n    LoadImage(image);\n    image->loaded=1;\n  }\n\n  if ((u <= 1.0) && (u >=0.0) && (v <= 1.0) && (v >= 0.0)) {\n    x=(image->xres - 1.0) * u; /* floating point X location */\n    y=(image->yres - 1.0) * v; /* floating point Y location */\n\n    px = x - ((int) x);\n    py = y - ((int) y);\n\n    x1 = (int) x;\n    x2 = x1 + 1;\n\n    y1 = (int) y;\n    y2 = y1 + 1;\n\n    ptr  = image->data + ((image->xres * y1) + x1) * 3; \n    ptr2 = image->data + ((image->xres * y1) + x2) * 3; \n\n    colx.r = (flt) ((flt)ptr[0] + px*((flt)ptr2[0] - (flt) ptr[0])) / 255.0; \n    colx.g = (flt) ((flt)ptr[1] + px*((flt)ptr2[1] - (flt) ptr[1])) / 255.0; \n    colx.b = (flt) ((flt)ptr[2] + px*((flt)ptr2[2] - (flt) ptr[2])) / 255.0; \n\n    ptr  = image->data + ((image->xres * y2) + x1) * 3; \n    ptr2 = image->data + ((image->xres * y2) + x2) * 3; \n\n    colx2.r = ((flt)ptr[0] + px*((flt)ptr2[0] - (flt)ptr[0])) / 255.0; \n    colx2.g = ((flt)ptr[1] + px*((flt)ptr2[1] - (flt)ptr[1])) / 255.0; \n    colx2.b = ((flt)ptr[2] + px*((flt)ptr2[2] - (flt)ptr[2])) / 255.0; \n\n    col.r = colx.r + py*(colx2.r - colx.r);\n    col.g = colx.g + py*(colx2.g - colx.g);\n    col.b = colx.b + py*(colx2.b - colx.b);\n\n  }\n  else {\n    col.r=0.0;\n    col.g=0.0;\n    col.b=0.0;\n  }\n  return col;\n} \n\nrawimage * AllocateImage(char * filename) { \n  rawimage * newimage = NULL;\n  int i, intable;\n  size_t len;\n\n  intable=0;\n  if (numimages!=0) {\n    for (i=0; i<numimages; i++) {\n      if (!strcmp(filename, imagelist[i]->name)) {\n        newimage=imagelist[i];\n        intable=1;\n      }\n    }\n  }\n\n  if (!intable) {\n    newimage=(rawimage *)rt_getmem(sizeof(rawimage));\n    newimage->loaded=0;\n    newimage->xres=0;\n    newimage->yres=0;\n    newimage->bpp=0;\n    newimage->data=NULL;\n    len=strlen(filename);\n    if (len > 80) rtbomb(\"Filename too long in image map!!\"); \n    strcpy(newimage->name, filename);\n\n    imagelist[numimages]=newimage;  /* add new one to the table       */ \n    numimages++;                    /* increment the number of images */\n  }\n \n  return newimage;\n}\n\nvoid DeallocateImage(rawimage * image) {\n  image->loaded=0;\n  rt_freemem(image->data);\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/imap.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * imap.h - This file contains defines etc for doing image map type things.  \n *\n *  $Id: imap.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nvoid       ResetImage(void);\nvoid       LoadImage(rawimage *);\ncolor      ImageMap(rawimage *, flt, flt);\nrawimage * AllocateImage(char *);\nvoid       DeallocateImage(rawimage *);\nvoid       ResetImages(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/intersect.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * intersect.cpp - This file contains code for CSG and intersection routines.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"intersect.h\"\n#include \"light.h\"\n#include \"util.h\"\n#include \"global.h\"\n\nunsigned int new_objectid(void) {\n  return numobjects++; /* global used to generate unique object ID's */\n}\n\nunsigned int max_objectid(void) {\n  return numobjects;\n}\n\nvoid add_object(object * obj) {\n  object * objtemp;\n\n  if (obj == NULL)\n    return;\n\n  obj->id = new_objectid();\n\n  objtemp = rootobj;\n  rootobj = obj;\n  obj->nextobj = objtemp;\n}\n\nvoid free_objects(object * start) {\n  object * cur;\n  object * cur2;\n\n  cur=start; \n  while (cur->nextobj != NULL) { \n    cur2=(object *)cur->nextobj;\n    cur->methods->free(cur);\n    cur=cur2;\n  }\n  free(cur);\n\n}\n\nvoid reset_object(void) {\n  if (rootobj != NULL)\n    free_objects(rootobj);\n\n  rootobj = NULL;\n  numobjects = 0; /* set number of objects back to 0 */\n}\n\nvoid intersect_objects(ray * intray) {\n  object * cur;\n  object temp;\n\n  temp.nextobj = rootobj; /* setup the initial object pointers.. */\n  cur = &temp;            /* ready, set                          */\n\n  while ((cur=(object *)cur->nextobj) != NULL)          \n    cur->methods->intersect(cur, intray); \n}\n\nvoid reset_intersection(intersectstruct * intstruct) {\n  intstruct->num = 0;\n  intstruct->list[0].t = FHUGE;\n  intstruct->list[0].obj = NULL;\n  intstruct->list[1].t = FHUGE;\n  intstruct->list[1].obj = NULL;\n}\n\nvoid add_intersection(flt t, object * obj, ray * ry) {\n  intersectstruct * intstruct = ry->intstruct;\n\n  if (t > EPSILON) {\n\n    /* if we hit something before maxdist update maxdist */\n    if (t < ry->maxdist) {\n      ry->maxdist = t;\n\n      /* if we hit *anything* before maxdist, and we're firing a */\n      /* shadow ray, then we are finished ray tracing the shadow */\n      if (ry->flags & RT_RAY_SHADOW)\n        ry->flags |= RT_RAY_FINISHED;\n    }\n\n    intstruct->num++;\n    intstruct->list[intstruct->num].obj = obj;\n    intstruct->list[intstruct->num].t = t;\n  }\n}\n\n\nint closest_intersection(flt * t, object ** obj, intersectstruct * intstruct) {\n  int i;\n  *t=FHUGE;\n\n  for (i=1; i<=intstruct->num; i++) {\n    if (intstruct->list[i].t < *t) {\n        *t=intstruct->list[i].t;\n      *obj=intstruct->list[i].obj;\n    }\n  } \n\n  return intstruct->num;\n}\n\nint shadow_intersection(intersectstruct * intstruct, flt maxdist) {\n  int i;\n  \n  if (intstruct->num > 0) {\n    for (i=1; i<=intstruct->num; i++) {\n      if ((intstruct->list[i].t < maxdist) && \n          (intstruct->list[i].obj->tex->shadowcast == 1)) {\n        return 1;\n      }\n    }\n  }\n  \n  return 0;\n}\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/intersect.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * intersect.h - This file contains the declarations and defines for the\n *               functions that manage intersection, bounding and CSG..\n *\n *  $Id: intersect.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nunsigned int  new_objectid(void);\nunsigned int max_objectid(void);  \nvoid add_object(object *);\nvoid reset_object(void);\nvoid free_objects(object *);\nvoid intersect_objects(ray *);\nvoid reset_intersection(intersectstruct *);\nvoid add_intersection(flt, object *, ray *);\nint closest_intersection(flt *, object **, intersectstruct *);\nint next_intersection(object **, object *, intersectstruct *);\nint shadow_intersection(intersectstruct * intstruct, flt maxdist);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/jpeg.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  jpeg.cpp - This file deals with JPEG format image files (reading/writing)\n */ \n\n/*\n * This code requires support from the Independent JPEG Group's libjpeg.\n * For our puposes, we're interested only in the 3 byte per pixel 24 bit\n * RGB output.  Probably won't implement any decent checking at this point.\n */ \n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\" /* error codes etc */\n#include \"jpeg.h\"    /* the protos for this file */\n\n#if !defined(USEJPEG)\n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  return IMAGEUNSUP;\n}\n\n#else\n\n#include \"jpeglib.h\" /* the IJG jpeg library headers */\n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  FILE * ifp;\n  struct jpeg_decompress_struct cinfo; /* JPEG decompression struct */\n  struct jpeg_error_mgr jerr;          /* JPEG Error handler */\n  JSAMPROW row_pointer[1];             /* output row buffer */\n  int row_stride;                      /* physical row width in output buf */\n\n  /* open input file before doing any JPEG decompression setup */\n  if ((ifp = fopen(name, \"rb\")) == NULL) \n    return IMAGEBADFILE; /* Could not open image, return error */\n\n  /*\n   * Note: The Independent JPEG Group's library does not have a way\n   *       of returning errors without the use of setjmp/longjmp.\n   *       This is a problem in multi-threaded environment, since setjmp\n   *       and longjmp are declared thread-unsafe by many vendors currently.\n   *       For now, JPEG decompression errors will result in the \"default\"\n   *       error handling provided by the JPEG library, which is an error\n   *       message and a fatal call to exit().  I'll have to work around this\n   *       or find a reasonably thread-safe way of doing setjmp/longjmp..\n   */\n\n  cinfo.err = jpeg_std_error(&jerr); /* Set JPEG error handler to default */\n\n  jpeg_create_decompress(&cinfo);    /* Create decompression context      */ \n  jpeg_stdio_src(&cinfo, ifp);       /* Set input mechanism to stdio type */\n  jpeg_read_header(&cinfo, TRUE);    /* Read the JPEG header for info     */\n  jpeg_start_decompress(&cinfo);     /* Prepare for actual decompression  */\n\n  *xres = cinfo.output_width;        /* set returned image width  */\n  *yres = cinfo.output_height;       /* set returned image height */\n\n  /* Calculate the size of a row in the image */\n  row_stride = cinfo.output_width * cinfo.output_components;\n\n  /* Allocate the image buffer which will be returned to the ray tracer */\n  *imgdata = (unsigned char *) malloc(row_stride * cinfo.output_height);\n\n  /* decompress the JPEG, one scanline at a time into the buffer */\n  while (cinfo.output_scanline < cinfo.output_height) {\n    row_pointer[0] = &((*imgdata)[(cinfo.output_scanline)*row_stride]);\n    jpeg_read_scanlines(&cinfo, row_pointer, 1);\n  }\n\n  jpeg_finish_decompress(&cinfo);   /* Tell the JPEG library to cleanup   */\n  jpeg_destroy_decompress(&cinfo);  /* Destroy JPEG decompression context */\n\n  fclose(ifp); /* Close the input file */\n\n  return IMAGENOERR;  /* No fatal errors */\n}\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/jpeg.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  jpeg.h - This file deals with JPEG format image files (reading/writing)\n *\n *  $Id: jpeg.h,v 1.2 2007-02-22 17:54:15 Exp $\n */ \n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/light.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * light.cpp - This file contains declarations and defines for light sources.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define LIGHT_PRIVATE\n#include \"light.h\"\n\nstatic object_methods light_methods = {\n  (void (*)(void *, void *))(light_intersect),\n  (void (*)(void *, void *, void *, void *))(light_normal),\n  light_bbox, \n  free \n};\n\npoint_light * newlight(void * tex, vector ctr, flt rad) {\n  point_light * l;\n  \n  l=(point_light *) rt_getmem(sizeof(point_light));\n  memset(l, 0, sizeof(point_light));\n  l->methods = &light_methods;\n\n  l->tex=(texture *)tex;\n  l->ctr=ctr;\n  l->rad=rad;\n\n  return l;\n}\n\nstatic int light_bbox(void * obj, vector * min, vector * max) {\n  return 0; /* lights are unbounded currently */\n}\n\nstatic void light_intersect(point_light * l, ray * ry) {\n  flt b, disc, t1, t2, temp;\n  vector V;\n\n  /* Lights do not cast shadows.. */\n  if (ry->flags & RT_RAY_SHADOW)\n    return;\n\n  VSUB(l->ctr, ry->o, V);\n  VDOT(b, V, ry->d); \n  VDOT(temp, V, V);  \n\n  disc=b*b + l->rad*l->rad - temp;\n\n  if (disc<=0.0) return;\n  disc=sqrt(disc);\n\n  t2=b+disc;\n  if (t2 <= SPEPSILON) \n    return;\n  add_intersection(t2, (object *) l, ry);  \n\n  t1=b-disc;\n  if (t1 > SPEPSILON) \n    add_intersection(t1, (object *) l, ry);  \n}\n\nstatic void light_normal(point_light * l, vector * pnt, ray * incident, vector * N) {\n  VSub((vector *) pnt, &(l->ctr), N);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/light.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * light.h - this file includes declarations and defines for light sources.\n *\n *  $Id: light.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  flt rad;\n} point_light; \n\npoint_light * newlight(void *, vector, flt);\n\n#ifdef LIGHT_PRIVATE\nstatic int light_bbox(void * obj, vector * min, vector * max);\nstatic void light_intersect(point_light *, ray *);\nstatic void light_normal(point_light *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/machine.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * machine.h - This is the machine specific include file\n *\n *  $Id: machine.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#include <stdio.h>\n#include <cstdlib>\n#include <string.h>\n#include <math.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n\nusing namespace std;\n\n#define STDTIME\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/macros.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * macros.h - This file contains macro versions of functions that would be best \n * used as inlined code rather than function calls.\n *\n *  $Id: macros.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#define MYMAX(a , b) ((a) > (b) ? (a) : (b))\n#define MYMIN(a , b) ((a) < (b) ? (a) : (b))\n\n#define VDOT(return, a, b) \t\t\t\t\\\n return=(a.x * b.x  +  a.y * b.y  +  a.z * b.z); \t\\\n\n#define RAYPNT(c, a, b)\t\t\\\nc.x = a.o.x + ( a.d.x * b );\t\\\nc.y = a.o.y + ( a.d.y * b );\t\\\nc.z = a.o.z + ( a.d.z * b );\t\\\n\n\n#define VSUB(a, b, c)\t\t\\\nc.x = (a.x - b.x);\t\t\\\nc.y = (a.y - b.y);\t\t\\\nc.z = (a.z - b.z);\t\t\\\n\n\n#define VCROSS(a, b, c) \t\t\t\t\\\n c->x = (a->y * b->z) - (a->z * b->y);\t\t\t\\\n c->y = (a->z * b->x) - (a->x * b->z);\t\t\t\\\n c->z = (a->x * b->y) - (a->y * b->x);\t\t\t\\\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define VIDEO_WINMAIN_ARGS\n#include \"types.h\"\n#include \"api.h\"       /* The ray tracing library API */\n#include \"parse.h\"     /* Support for my own file format */\n#include \"ui.h\"\n#include \"util.h\"\n#include \"tachyon_video.h\"\n#include \"../../../common/utility/utility.h\"\n\n#if WIN8UI_EXAMPLE\n#include \"tbb/tbb.h\"\nvolatile long global_startTime = 0;\nvolatile long global_elapsedTime = 0;\nvolatile bool global_isCancelled = false;\nvolatile int global_number_of_threads;\n#endif\n\nSceneHandle global_scene;\nint global_xsize;     /*  size of graphic image rendered in window (from hres, vres)  */\nint global_ysize;\nint global_xwinsize;  /*  size of window (may be larger than above)  */\nint global_ywinsize;\nchar *global_window_title;\nbool global_usegraphics;\n\nbool silent_mode = false; /* silent mode */\n\nclass tachyon_video *video = 0;\n\ntypedef struct {\n  int foundfilename;      /* was a model file name found in the args? */\n  char filename[1024];    /* model file to render */\n  int useoutfilename;     /* command line override of output filename */\n  char outfilename[1024]; /* name of output image file */\n  int verbosemode;        /* verbose flags */\n  int antialiasing;       /* antialiasing setting */\n  int displaymode;        /* display mode */\n  int boundmode;          /* bounding mode */\n  int boundthresh;        /* bounding threshold */\n  int usecamfile;         /* use camera file */\n  char camfilename[1024]; /* camera filename */\n} argoptions;\n\nvoid initoptions(argoptions * opt) {\n    memset(opt, 0, sizeof(argoptions));\n    opt->foundfilename = -1;\n    opt->useoutfilename = -1;\n    opt->verbosemode = -1;\n    opt->antialiasing = -1;\n    opt->displaymode = -1;\n    opt->boundmode = -1; \n    opt->boundthresh = -1; \n    opt->usecamfile = -1;\n}\n\n#if WIN8UI_EXAMPLE\nint CreateScene() {\n\n   char* filename = \"Assets/balls.dat\";\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n\n    // scene->hres and scene->vres should be equal to screen resolution\n    scene->hres = global_xwinsize = global_xsize;\n    scene->vres = global_ywinsize = global_ysize;  \n\n    return 0;\n}\n\nunsigned int __stdcall example_main(void *)\n{\n    try {\n\n        if ( CreateScene() != 0 )\n            exit(-1);\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        // always using window even if(!global_usegraphics)\n        global_usegraphics = \n            tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running)\n            exit(-1);\n\n        video = &tachyon;\n\n        for(;;) {\n            global_elapsedTime = 0;\n            global_startTime=(long) time(NULL);\n            global_isCancelled=false;\n            if (video)video->running = true;\n            tbb::task_scheduler_init init (global_number_of_threads);\n            memset(g_pImg, 0, sizeof(unsigned int) * global_xsize * global_ysize);\n            tachyon.main_loop();\n            global_elapsedTime = (long)(time(NULL)-global_startTime);\n            video->running=false;\n            //The timer to restart drawing then it is complete.\n            int timer=50;\n            while( (  !global_isCancelled && (timer--)>0 ) ){\n                rt_sleep( 100 );\n            }\n        }\n        return NULL;\n\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n\n#elif __TBB_IOS\n\n#include \"tbb/tbb.h\"\n#include \"CoreFoundation/CoreFoundation.h\"\nextern \"C\" void get_screen_resolution(int *x, int *y);\n\nint CreateScene() {\n\n    CFURLRef balls_dat_url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR(\"balls\"), CFSTR(\"dat\"),NULL);\n    char filename[1024];\n    CFURLGetFileSystemRepresentation(balls_dat_url, true, (UInt8*)filename, (CFIndex)sizeof(filename));\n    CFRelease(balls_dat_url);\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n\n    get_screen_resolution(&global_xsize, &global_ysize);\n\n    // scene->hres and scene->vres should be equal to screen resolution\n    scene->hres = global_xwinsize = global_xsize;\n    scene->vres = global_ywinsize = global_ysize;\n    return 0;\n}\n\nint main (int argc, char *argv[]) {\n    try {\n\n        if ( CreateScene() != 0 ) return -1;\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        global_usegraphics = tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running) return -1;\n\n        //TODO: add a demo loop.\n        video = &tachyon;\n        if (video)video->running = true;\n        memset(g_pImg, 0, sizeof(unsigned int) * global_xsize * global_ysize);\n        tachyon.main_loop();\n        video->running=false;\n        return NULL;\n\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n\n#else\n\nstatic char *window_title_string (int argc, const char **argv)\n{\n    int i;\n    char *name;\n\n    name = (char *) malloc (8192);\n    char *title = getenv (\"TITLE\");\n    if( title ) strcpy( name, title );\n    else {\n        if(strrchr(argv[0], '\\\\')) strcpy (name, strrchr(argv[0], '\\\\')+1);\n        else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);\n        else strcpy (name, *argv[0]?argv[0]:\"Tachyon\");\n    }\n    for (i = 1; i < argc; i++) {\n        strcat (name, \" \");\n        strcat (name, argv[i]);\n    }\n#ifdef _DEBUG\n    strcat (name, \" (DEBUG BUILD)\");\n#endif\n    return name;\n}\n\nint useoptions(argoptions * opt, SceneHandle scene) {\n  if (opt->useoutfilename == 1) {\n    rt_outputfile(scene, opt->outfilename);\n  }\n\n  if (opt->verbosemode == 1) {\n    rt_verbose(scene, 1);\n  }\n\n  if (opt->antialiasing != -1) {\n    /* need new api code for this */\n  } \n\n  if (opt->displaymode != -1) {\n    rt_displaymode(scene, opt->displaymode);\n  }\n\n  if (opt->boundmode != -1) {\n    rt_boundmode(scene, opt->boundmode);\n  }\n\n  if (opt->boundthresh != -1) {\n    rt_boundthresh(scene, opt->boundthresh);\n  }\n\n  return 0;\n}    \n\nargoptions ParseCommandLine(int argc, const char *argv[]) {\n    argoptions opt;\n\n    initoptions(&opt);\n\n    bool nobounding = false;\n    bool nodisp = false;\n\n    string filename;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n        .positional_arg(filename,\"dataset\", \"Model file\")\n        .positional_arg(opt.boundthresh,\"boundthresh\",\"bounding threshold value\")\n        .arg(nodisp,\"no-display-updating\",\"disable run-time display updating\")\n        .arg(nobounding,\"no-bounding\",\"disable bounding technique\")\n        .arg(silent_mode,\"silent\",\"no output except elapsed time\")\n    );\n\n    strcpy(opt.filename, filename.c_str());\n\n    opt.displaymode = nodisp ? RT_DISPLAY_DISABLED : RT_DISPLAY_ENABLED;\n    opt.boundmode = nobounding ? RT_BOUNDING_DISABLED : RT_BOUNDING_ENABLED;\n\n    return opt;\n}\n\nint CreateScene(argoptions &opt) {\n    char *filename;\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    /* process command line overrides */\n    useoptions(&opt, global_scene);\n\n#ifdef DEFAULT_MODELFILE\n#if  _WIN32||_WIN64\n#define _GLUE_FILENAME(x) \"..\\\\dat\\\\\" #x\n#else\n#define _GLUE_FILENAME(x) #x\n#endif\n#define GLUE_FILENAME(x) _GLUE_FILENAME(x)\n    if(opt.foundfilename == -1)\n        filename = GLUE_FILENAME(DEFAULT_MODELFILE);\n    else\n#endif//DEFAULT_MODELFILE\n        filename = opt.filename;\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        fprintf(stderr, \"Parser returned a non-zero error code reading %s\\n\", filename);\n        fprintf(stderr, \"Aborting Render...\\n\");\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n    global_xsize = scene->hres;\n    global_ysize = scene->vres;\n    global_xwinsize = global_xsize;\n    global_ywinsize = global_ysize;  // add some here to leave extra blank space on bottom for status etc.\n\n    return 0;\n}\n\nint main (int argc, char *argv[]) {\n    try {\n        timer mainStartTime = gettimer();\n\n        global_window_title = window_title_string (argc, (const char**)argv);\n\n        argoptions opt = ParseCommandLine(argc, (const char**)argv);\n\n        if ( CreateScene(opt) != 0 )\n            return -1;\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        tachyon.title = global_window_title;\n        // always using window even if(!global_usegraphics)\n        global_usegraphics = \n            tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running)\n            return -1;\n\n        video = &tachyon;\n        tachyon.main_loop();\n\n        utility::report_elapsed_time(timertime(mainStartTime, gettimer()));\n        return 0;\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n#endif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/objbound.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * objbound.cpp - This file contains the functions to find bounding boxes\n *              for the various primitives \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"bndbox.h\"\n\n#define OBJBOUND_PRIVATE\n#include \"objbound.h\"\n\nstatic void globalbound(object ** rootlist, vector * gmin, vector * gmax) {\n  vector min, max; \n  object * cur;\n\n  if (*rootlist == NULL)  /* don't bound non-existant objects */\n    return;\n\n  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;\n  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;\n\n  cur=*rootlist;\n  while (cur != NULL)  {  /* Go! */ \n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    cur->methods->bbox((void *) cur, &min, &max);\n\n    gmin->x = MYMIN( gmin->x , min.x); \n    gmin->y = MYMIN( gmin->y , min.y); \n    gmin->z = MYMIN( gmin->z , min.z); \n  \n    gmax->x = MYMAX( gmax->x , max.x); \n    gmax->y = MYMAX( gmax->y , max.y); \n    gmax->z = MYMAX( gmax->z , max.z); \n\n    cur=(object *)cur->nextobj;\n  }\n}\n\nstatic int objinside(object * obj, vector * min, vector * max) {\n  vector omin, omax;\n\n  if (obj == NULL)  /* non-existant object, shouldn't get here */\n    return 0;\n\n  if (obj->methods->bbox((void *) obj, &omin, &omax)) {\n    if ((min->x <= omin.x) && (min->y <= omin.y) && (min->z <= omin.z) &&\n        (max->x >= omax.x) && (max->y >= omax.y) && (max->z >= omax.z)) { \n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic int countobj(object * root) {\n  object * cur;     /* counts the number of objects on a list */\n  int numobj;\n\n  numobj=0;\n  cur=root;\n\n  while (cur != NULL) {\n    cur=(object *)cur->nextobj;\n    numobj++;\n  } \n  return numobj;\n}\n\nstatic void movenextobj(object * thisobj, object ** root) {\n  object * cur, * tmp;\n\n  /* move the object after thisobj to the front of the object list  */\n  /*   headed by root */\n  if (thisobj != NULL) {\n    if (thisobj->nextobj != NULL) {\n      cur=(object *)thisobj->nextobj;            /* the object to be moved    */\n      thisobj->nextobj = cur->nextobj; /* link around the moved obj */\n      tmp=*root;                       /* store the root node       */\n      cur->nextobj=tmp;                /* attach root to cur        */ \n      *root=cur;                       /* make cur, the new root    */\n    }\n  }\n}\n\nstatic void octreespace(object ** rootlist, int maxoctnodes) {\n  object * cur;\n  vector gmin, gmax, gctr;\n  vector cmin1, cmin2, cmin3, cmin4, cmin5, cmin6, cmin7, cmin8;\n  vector cmax1, cmax2, cmax3, cmax4, cmax5, cmax6, cmax7, cmax8;\n  bndbox * box1, * box2, * box3, * box4;\n  bndbox * box5, * box6, * box7, * box8;\n  int skipobj;\n\n  if (*rootlist == NULL)  /* don't subdivide non-existant data */\n    return;\n\n  skipobj=0;\n  globalbound(rootlist, &gmin, &gmax);  /* find global min and max */\n\n  gctr.x = ((gmax.x - gmin.x) / 2.0) + gmin.x;\n  gctr.y = ((gmax.y - gmin.y) / 2.0) + gmin.y;\n  gctr.z = ((gmax.z - gmin.z) / 2.0) + gmin.z;\n\n  cmin1=gmin;\n  cmax1=gctr;\n  box1 = newbndbox(cmin1, cmax1); \n\n  cmin2=gmin;\n  cmin2.x=gctr.x;\n  cmax2=gmax;\n  cmax2.y=gctr.y;\n  cmax2.z=gctr.z;\n  box2 = newbndbox(cmin2, cmax2); \n\n  cmin3=gmin;\n  cmin3.y=gctr.y;\n  cmax3=gmax;\n  cmax3.x=gctr.x;\n  cmax3.z=gctr.z;\n  box3 = newbndbox(cmin3, cmax3); \n\n  cmin4=gmin;\n  cmin4.x=gctr.x;\n  cmin4.y=gctr.y;\n  cmax4=gmax;\n  cmax4.z=gctr.z;\n  box4 = newbndbox(cmin4, cmax4); \n\n  cmin5=gmin;\n  cmin5.z=gctr.z;\n  cmax5=gctr;\n  cmax5.z=gmax.z;\n  box5 = newbndbox(cmin5, cmax5); \n\n  cmin6=gctr;\n  cmin6.y=gmin.y;\n  cmax6=gmax;\n  cmax6.y=gctr.y;\n  box6 = newbndbox(cmin6, cmax6); \n\n  cmin7=gctr;\n  cmin7.x=gmin.x;\n  cmax7=gctr;\n  cmax7.y=gmax.y;\n  cmax7.z=gmax.z;\n  box7 = newbndbox(cmin7, cmax7); \n\n  cmin8=gctr;\n  cmax8=gmax;\n  box8 = newbndbox(cmin8, cmax8); \n\n  cur = *rootlist;\n  while (cur != NULL)  {  \n    if (objinside((object *)cur->nextobj, &cmin1, &cmax1)) {\n      movenextobj(cur, &box1->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin2, &cmax2)) {\n      movenextobj(cur, &box2->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin3, &cmax3)) {\n      movenextobj(cur, &box3->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin4, &cmax4)) {\n      movenextobj(cur, &box4->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin5, &cmax5)) {\n      movenextobj(cur, &box5->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin6, &cmax6)) {\n      movenextobj(cur, &box6->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin7, &cmax7)) {\n      movenextobj(cur, &box7->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin8, &cmax8)) {\n      movenextobj(cur, &box8->objlist);  \n    }  \n    else {\n      skipobj++; \n      cur=(object *)cur->nextobj;\n    }\n  }     \n\n/* new scope, for redefinition of cur, and old */\n  { bndbox * cur, * old;\n  old=box1;\n  cur=box2; \n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box3;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box4;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box5;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box6;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box7;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box8;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n\n  old->nextobj=*rootlist;\n\n  if (countobj(box1->objlist) > 0) {\n    globalbound(&box1->objlist, &box1->min, &box1->max); \n    *rootlist=(object *) box1;\n  }\n  else {\n    *rootlist=(object *) box1->nextobj;\n  }\n\n  } /**** end of special cur and old scope */\n\n  if (countobj(box1->objlist) > maxoctnodes) {\n    octreespace(&box1->objlist, maxoctnodes);\n  }\n  if (countobj(box2->objlist) > maxoctnodes) {\n    octreespace(&box2->objlist, maxoctnodes);\n  }\n  if (countobj(box3->objlist) > maxoctnodes) {\n    octreespace(&box3->objlist, maxoctnodes);\n  }\n  if (countobj(box4->objlist) > maxoctnodes) {\n    octreespace(&box4->objlist, maxoctnodes);\n  }\n  if (countobj(box5->objlist) > maxoctnodes) {\n    octreespace(&box5->objlist, maxoctnodes);\n  }\n  if (countobj(box6->objlist) > maxoctnodes) {\n    octreespace(&box6->objlist, maxoctnodes);\n  }\n  if (countobj(box7->objlist) > maxoctnodes) {\n    octreespace(&box7->objlist, maxoctnodes);\n  }\n  if (countobj(box8->objlist) > maxoctnodes) {\n    octreespace(&box8->objlist, maxoctnodes);\n  }\n}\n\nvoid dividespace(int maxoctnodes, object **toplist) {\n  bndbox * gbox;\n  vector gmin, gmax;\n\n  if (countobj(*toplist) > maxoctnodes) {\n    globalbound(toplist, &gmin, &gmax);  \n\n    octreespace(toplist, maxoctnodes); \n\n    gbox = newbndbox(gmin, gmax);\n    gbox->objlist = NULL;\n    gbox->tex = NULL; \n    gbox->nextobj=NULL;\n    gbox->objlist=*toplist;\n    *toplist=(object *) gbox;  \n  }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/objbound.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*  \n * objbound.h - defines for object bounding code.\n *\n *  $Id: objbound.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nvoid dividespace(int, object **);\n\n#ifdef OBJBOUND_PRIVATE\n\nstatic void globalbound(object **, vector *, vector *);\nstatic int objinside(object * obj, vector * min, vector * max);\nstatic int countobj(object *);\nstatic void movenextobj(object *, object **);\nstatic void octreespace(object **, int);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/parse.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * parse.cpp - an UltraLame (tm) parser for simple data files...\n */\n\n// Try preventing lots of GCC warnings about ignored results of fscanf etc.\n#if !__INTEL_COMPILER\n\n#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5\n// For older versions of GCC, disable use of __wur in GLIBC\n#undef _FORTIFY_SOURCE\n#define _FORTIFY_SOURCE 0\n#else\n// Starting from 4.5, GCC has a suppression option\n#pragma GCC diagnostic ignored \"-Wunused-result\"\n#endif\n\n#endif //__INTEL_COMPILER\n\n#include <stdio.h>\n#include <math.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h> /* needed for toupper(), macro.. */\n\n#include \"types.h\"\n#include \"api.h\"      /* rendering API */\n\n#define PARSE_INTERNAL\n#include \"parse.h\" /* self protos */\n#undef PARSE_INTERNAL\n\nstatic texentry textable[NUMTEXS]; /* texture lookup table */\nstatic texentry defaulttex;     /* The default texture when a lookup fails */\nstatic int numtextures;         /* number of TEXDEF textures               */\nstatic int numobjectsparsed;    /* total number of objects parsed so far   */\nstatic color scenebackcol;   /* scene background color                  */\n\nstatic int stringcmp(const char * a, const char * b) {\n  size_t i, s, l;\n\n  s=strlen(a);\n  l=strlen(b);\n\n  if (s != l)\n    return 1;\n\n  for (i=0; i<s; i++) {\n    if (toupper(a[i]) != toupper(b[i])) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic void reset_tex_table(void) {\n  apitexture apitex;\n\n  numtextures=0;\n  memset(&textable, 0, sizeof(textable));\n\n  apitex.col.r=1.0;\n  apitex.col.g=1.0;\n  apitex.col.b=1.0;\n  apitex.ambient=0.1;\n  apitex.diffuse=0.9;\n  apitex.specular=0.0;\n  apitex.opacity=1.0;\n  apitex.texturefunc=0;\n\n  defaulttex.tex=rt_texture(&apitex);\n}\n\nstatic errcode add_texture(void * tex, char name[TEXNAMELEN]) {\n  textable[numtextures].tex=tex;\n  strcpy(textable[numtextures].name, name);\n\n  numtextures++;\n  if (numtextures > NUMTEXS) {\n    fprintf(stderr, \"Parse: %d textures allocated, texture slots full!\\n\", numtextures);\n    numtextures--; /* keep writing over last texture if we've run out.. */\n    return PARSEALLOCERR;\n  }\n\n  return PARSENOERR;\n}\n\nstatic void * find_texture(char name[TEXNAMELEN]) {\n  int i;\n\n  for (i=0; i<numtextures; i++) {\n    if (strcmp(name, textable[i].name) == 0)\n    return textable[i].tex;\n  }\n  fprintf(stderr, \"Undefined texture '%s', using default. \\n\",name);\n  return(defaulttex.tex);\n}\n\napiflt degtorad(apiflt deg) {\n  apiflt tmp;\n  tmp=deg * 3.1415926 / 180.0;\n  return tmp;\n}\n\nstatic void degvectoradvec(vector * degvec) {\n  vector tmp;\n\n  tmp.x=degtorad(degvec->x);\n  tmp.y=degtorad(degvec->y);\n  tmp.z=degtorad(degvec->z);\n  *degvec=tmp;\n}\n\nstatic void InitRot3d(RotMat * rot, apiflt x, apiflt y, apiflt z) {\n  rot->rx1=cos(y)*cos(z);\n  rot->rx2=sin(x)*sin(y)*cos(z) - cos(x)*sin(z);\n  rot->rx3=sin(x)*sin(z) + cos(x)*cos(z)*sin(y);\n\n  rot->ry1=cos(y)*sin(z);\n  rot->ry2=cos(x)*cos(z) + sin(x)*sin(y)*sin(z);\n  rot->ry3=cos(x)*sin(y)*sin(z) - sin(x)*cos(z);\n\n  rot->rz1=sin(y);\n  rot->rz2=sin(x)*cos(y);\n  rot->rz3=cos(x)*cos(y);\n}\n\nstatic void Rotate3d(RotMat * rot, vector * vec) {\n  vector tmp;\n  tmp.x=(vec->x*(rot->rx1) + vec->y*(rot->rx2) + vec->z*(rot->rx3));\n  tmp.y=(vec->x*(rot->ry1) + vec->y*(rot->ry2) + vec->z*(rot->ry3));\n  tmp.z=(vec->x*(rot->rz1) + vec->y*(rot->rz2) + vec->z*(rot->rz3));\n  *vec=tmp;\n}\n\nstatic void Scale3d(vector * scale, vector * vec) {\n  vec->x=vec->x * scale->x;\n  vec->y=vec->y * scale->y;\n  vec->z=vec->z * scale->z;\n}\n\nstatic void Trans3d(vector * trans, vector * vec) {\n  vec->x+=trans->x;\n  vec->y+=trans->y;\n  vec->z+=trans->z;\n}\n\nstatic errcode GetString(FILE * dfile, const char * string) {\n  char data[255];\n\n  fscanf(dfile,\"%s\",data);\n  if (stringcmp(data, string) != 0) {\n    fprintf(stderr, \"parse: Expected %s, got %s \\n\",string, data);\n    fprintf(stderr, \"parse: Error while parsing object: %d \\n\",numobjectsparsed);\n    return PARSEBADSYNTAX;\n  }\n\n  return PARSENOERR;\n}\n\nunsigned int readmodel(char * modelfile, SceneHandle scene) {\n  FILE * dfile;\n  errcode rc;\n\n  reset_tex_table();\n  dfile=NULL;\n\n  dfile=fopen(modelfile,\"r\");\n  if (dfile==NULL) {\n    return PARSEBADFILE;\n  }\n\n  rc = GetScenedefs(dfile, scene);\n  if (rc != PARSENOERR) {\n    fclose(dfile);\n    return rc;\n  }\n\n  scenebackcol.r = 0.0; /* default background is black */\n  scenebackcol.g = 0.0;\n  scenebackcol.b = 0.0;\n\n  numobjectsparsed=0;\n  while ((rc = GetObject(dfile, scene)) == PARSENOERR) {\n    numobjectsparsed++;\n  }\n  fclose(dfile);\n\n  if (rc == PARSEEOF)\n    rc = PARSENOERR;\n\n  rt_background(scene, scenebackcol);\n\n  return rc;\n}\n\n\nstatic errcode GetScenedefs(FILE * dfile, SceneHandle scene) {\n  vector Ccenter, Cview, Cup;\n  apiflt zoom, aspectratio;\n  int raydepth, antialiasing;\n  char outfilename[200];\n  int xres, yres, verbose;\n  float a,b,c;\n  errcode rc = PARSENOERR;\n\n  rc |= GetString(dfile, \"BEGIN_SCENE\");\n\n  rc |= GetString(dfile, \"OUTFILE\");\n  fscanf(dfile, \"%s\", outfilename);\n#ifdef _WIN32\n  if (strcmp (outfilename, \"/dev/null\") == 0) {\n    strcpy (outfilename, \"NUL:\");\n  }\n#endif\n\n  rc |= GetString(dfile, \"RESOLUTION\");\n  fscanf(dfile, \"%d %d\", &xres, &yres);\n\n  rc |= GetString(dfile, \"VERBOSE\");\n  fscanf(dfile, \"%d\", &verbose);\n\n  rt_scenesetup(scene, outfilename, xres, yres, verbose);\n\n  rc |= GetString(dfile, \"CAMERA\");\n\n  rc |= GetString(dfile, \"ZOOM\");\n  fscanf(dfile, \"%f\", &a);\n  zoom=a;\n\n  rc |= GetString(dfile, \"ASPECTRATIO\");\n  fscanf(dfile, \"%f\", &b);\n  aspectratio=b;\n\n  rc |= GetString(dfile, \"ANTIALIASING\");\n  fscanf(dfile, \"%d\", &antialiasing);\n\n  rc |= GetString(dfile, \"RAYDEPTH\");\n  fscanf(dfile, \"%d\", &raydepth);\n\n  rc |= GetString(dfile, \"CENTER\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Ccenter.x = a;\n  Ccenter.y = b;\n  Ccenter.z = c;\n\n  rc |= GetString(dfile, \"VIEWDIR\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Cview.x = a;\n  Cview.y = b;\n  Cview.z = c;\n\n  rc |= GetString(dfile, \"UPDIR\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Cup.x = a;\n  Cup.y = b;\n  Cup.z = c;\n\n  rc |= GetString(dfile, \"END_CAMERA\");   \n\n  rt_camerasetup(scene, zoom, aspectratio, antialiasing, raydepth,\n              Ccenter, Cview, Cup);\n\n\n  return rc;\n}\n\nstatic errcode GetObject(FILE * dfile, SceneHandle scene) {\n  char objtype[80];\n\n  fscanf(dfile, \"%s\", objtype);\n  if (!stringcmp(objtype, \"END_SCENE\")) {\n    return PARSEEOF; /* end parsing */\n  }\n  if (!stringcmp(objtype, \"TEXDEF\")) {\n    return GetTexDef(dfile);\n  }\n  if (!stringcmp(objtype, \"TEXALIAS\")) {\n    return GetTexAlias(dfile);\n  }\n  if (!stringcmp(objtype, \"BACKGROUND\")) {\n    return GetBackGnd(dfile);\n  }\n  if (!stringcmp(objtype, \"CYLINDER\")) {\n    return GetCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"FCYLINDER\")) {\n    return GetFCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"POLYCYLINDER\")) {\n    return GetPolyCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"SPHERE\")) {\n    return GetSphere(dfile);\n  }\n  if (!stringcmp(objtype, \"PLANE\")) {\n    return GetPlane(dfile);\n  }\n  if (!stringcmp(objtype, \"RING\")) {\n    return GetRing(dfile);\n  }\n  if (!stringcmp(objtype, \"BOX\")) {\n    return GetBox(dfile);\n  }\n  if (!stringcmp(objtype, \"SCALARVOL\")) {\n    return GetVol(dfile);\n  }\n  if (!stringcmp(objtype, \"TRI\")) {\n    return GetTri(dfile);\n  }\n  if (!stringcmp(objtype, \"STRI\")) {\n    return GetSTri(dfile);\n  }\n  if (!stringcmp(objtype, \"LIGHT\")) {\n    return GetLight(dfile);\n  }\n  if (!stringcmp(objtype, \"SCAPE\")) {\n    return GetLandScape(dfile);\n  }\n  if (!stringcmp(objtype, \"TPOLYFILE\")) {\n    return GetTPolyFile(dfile);\n  }\n\n  fprintf(stderr, \"Found bad token: %s expected an object type\\n\", objtype);\n  return PARSEBADSYNTAX;\n}\n\nstatic errcode GetVector(FILE * dfile, vector * v1) {\n  float a, b, c;\n\n  fscanf(dfile, \"%f %f %f\", &a, &b, &c);\n  v1->x=a;\n  v1->y=b;\n  v1->z=c;\n\n  return PARSENOERR;\n}\n\nstatic errcode GetColor(FILE * dfile, color * c1) {\n  float r, g, b;\n  int rc;\n\n  rc = GetString(dfile, \"COLOR\");\n  fscanf(dfile, \"%f %f %f\", &r, &g, &b);\n  c1->r=r;\n  c1->g=g;\n  c1->b=b;\n\n  return rc;\n}\n\nstatic errcode GetTexDef(FILE * dfile) {\n  char texname[TEXNAMELEN];\n\n  fscanf(dfile, \"%s\", texname);\n  add_texture(GetTexBody(dfile), texname);\n\n  return PARSENOERR;\n}\n\nstatic errcode GetTexAlias(FILE * dfile) {\n  char texname[TEXNAMELEN];\n  char aliasname[TEXNAMELEN];\n\n  fscanf(dfile, \"%s\", texname);\n  fscanf(dfile, \"%s\", aliasname);\n  add_texture(find_texture(aliasname), texname);\n\n  return PARSENOERR;\n}\n\n\nstatic errcode GetTexture(FILE * dfile, void ** tex) {\n  char tmp[255];\n  errcode rc = PARSENOERR;\n\n  fscanf(dfile, \"%s\", tmp);\n  if (!stringcmp(\"TEXTURE\", tmp)) {\n    *tex = GetTexBody(dfile);\n  }\n  else\n    *tex = find_texture(tmp);\n\n  return rc;\n}\n\nvoid * GetTexBody(FILE * dfile) {\n  char tmp[255];\n  float a,b,c,d, phong, phongexp, phongtype;\n  apitexture tex;\n  void * voidtex;\n  errcode rc;\n\n  rc = GetString(dfile, \"AMBIENT\");\n  fscanf(dfile, \"%f\", &a);\n  tex.ambient=a;\n\n  rc |= GetString(dfile, \"DIFFUSE\");\n  fscanf(dfile, \"%f\", &b);\n  tex.diffuse=b;\n\n  rc |= GetString(dfile, \"SPECULAR\");\n  fscanf(dfile, \"%f\", &c);\n  tex.specular=c;\n\n  rc |= GetString(dfile, \"OPACITY\");\n  fscanf(dfile, \"%f\", &d);\n  tex.opacity=d;\n\n  fscanf(dfile, \"%s\", tmp);\n  if (!stringcmp(\"PHONG\", tmp)) {\n    fscanf(dfile, \"%s\", tmp);\n    if (!stringcmp(\"METAL\", tmp)) {\n      phongtype = RT_PHONG_METAL;\n    }\n    else if (!stringcmp(\"PLASTIC\", tmp)) {\n      phongtype = RT_PHONG_PLASTIC;\n    }\n    else {\n      phongtype = RT_PHONG_PLASTIC;\n    }\n\n    fscanf(dfile, \"%f\", &phong);\n    GetString(dfile, \"PHONG_SIZE\");\n    fscanf(dfile, \"%f\", &phongexp);\n    fscanf(dfile, \"%s\", tmp);\n  }\n  else {\n    phong = 0.0;\n    phongexp = 100.0;\n    phongtype = RT_PHONG_PLASTIC;\n  }\n\n  fscanf(dfile, \"%f %f %f\", &a, &b, &c);\n  tex.col.r = a;\n  tex.col.g = b;\n  tex.col.b = c;\n\n  rc |= GetString(dfile, \"TEXFUNC\");\n  fscanf(dfile, \"%d\", &tex.texturefunc);\n  if (tex.texturefunc >= 7) {    /* if its an image map, we need a filename */\n    fscanf(dfile, \"%s\", tex.imap);\n  }\n  if (tex.texturefunc != 0) {\n    rc |= GetString(dfile, \"CENTER\");\n    rc |= GetVector(dfile, &tex.ctr);\n    rc |= GetString(dfile, \"ROTATE\");\n    rc |= GetVector(dfile, &tex.rot);\n    rc |= GetString(dfile, \"SCALE\");\n    rc |= GetVector(dfile, &tex.scale);\n  }\n  if (tex.texturefunc == 9) {\n    rc |= GetString(dfile, \"UAXIS\");\n    rc |= GetVector(dfile, &tex.uaxs);\n    rc |= GetString(dfile, \"VAXIS\");\n    rc |= GetVector(dfile, &tex.vaxs);\n  }\n\n  voidtex = rt_texture(&tex);\n  rt_tex_phong(voidtex, phong, phongexp, (int) phongtype);\n\n  return voidtex;\n}\n\nstatic errcode GetLight(FILE * dfile) {\n  apiflt rad;\n  vector ctr;\n  apitexture tex;\n  float a;\n  errcode rc;\n\n  memset(&tex, 0, sizeof(apitexture));\n\n  rc = GetString(dfile,\"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile,\"RAD\");\n  fscanf(dfile,\"%f\",&a);  /* read in radius */\n  rad=a;\n\n  rc |= GetColor(dfile, &tex.col);\n\n  rt_light(rt_texture(&tex), ctr, rad);\n\n  return rc;\n}\n\nstatic errcode GetBackGnd(FILE * dfile) {\n  float r,g,b;\n\n  fscanf(dfile, \"%f %f %f\", &r, &g, &b);\n\n  scenebackcol.r=r;\n  scenebackcol.g=g;\n  scenebackcol.b=b;\n\n  return PARSENOERR;\n}\n\nstatic errcode GetCylinder(FILE * dfile) {\n  apiflt rad;\n  vector ctr, axis;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"AXIS\");\n  rc |= GetVector(dfile, &axis);\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_cylinder(tex, ctr, axis, rad);\n\n  return rc;\n}\n\nstatic errcode GetFCylinder(FILE * dfile) {\n  apiflt rad;\n  vector ctr, axis;\n  vector pnt1, pnt2;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile, \"BASE\");\n  rc |= GetVector(dfile, &pnt1);\n  rc |= GetString(dfile, \"APEX\");\n  rc |= GetVector(dfile, &pnt2);\n\n  ctr=pnt1;\n  axis.x=pnt2.x - pnt1.x;\n  axis.y=pnt2.y - pnt1.y;\n  axis.z=pnt2.z - pnt1.z;\n\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_fcylinder(tex, ctr, axis, rad);\n\n  return rc;\n}\n\nstatic errcode GetPolyCylinder(FILE * dfile) {\n  apiflt rad;\n  vector * temp;\n  void * tex;\n  float a;\n  int numpts, i;\n  errcode rc;\n\n  rc = GetString(dfile, \"POINTS\");\n  fscanf(dfile, \"%d\", &numpts);\n\n  temp = (vector *) malloc(numpts * sizeof(vector));\n\n  for (i=0; i<numpts; i++) {\n    rc |= GetVector(dfile, &temp[i]);\n  }\n\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_polycylinder(tex, temp, numpts, rad);\n\n  free(temp);\n\n  return rc;\n}\n\n\nstatic errcode GetSphere(FILE * dfile) {\n  apiflt rad;\n  vector ctr;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile,\"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile,\"%f\",&a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_sphere(tex, ctr, rad);\n\n  return rc;\n}\n\nstatic errcode GetPlane(FILE * dfile) {\n  vector normal;\n  vector ctr;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"NORMAL\");\n  rc |= GetVector(dfile, &normal);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_plane(tex, ctr, normal);\n\n  return rc;\n}\n\nstatic errcode GetVol(FILE * dfile) {\n  vector min, max;\n  int x,y,z;\n  char fname[255];\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"MIN\");\n  rc |= GetVector(dfile, &min);\n  rc |= GetString(dfile, \"MAX\");\n  rc |= GetVector(dfile, &max);\n  rc |= GetString(dfile, \"DIM\");\n  fscanf(dfile, \"%d %d %d \", &x, &y, &z);\n  rc |= GetString(dfile, \"FILE\");\n  fscanf(dfile, \"%s\", fname);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_scalarvol(tex, min, max, x, y, z, fname, NULL);\n\n  return rc;\n}\n\nstatic errcode GetBox(FILE * dfile) {\n  vector min, max;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"MIN\");\n  rc |= GetVector(dfile, &min);\n  rc |= GetString(dfile, \"MAX\");\n  rc |= GetVector(dfile, &max);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_box(tex, min, max);\n\n  return rc;\n}\n\nstatic errcode GetRing(FILE * dfile) {\n  vector normal;\n  vector ctr;\n  void * tex;\n  float a,b;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"NORMAL\");\n  rc |= GetVector(dfile, &normal);\n  rc |= GetString(dfile, \"INNER\");\n  fscanf(dfile, \" %f \", &a);\n  rc |= GetString(dfile, \"OUTER\");\n  fscanf(dfile, \" %f \", &b);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_ring(tex, ctr, normal, a, b);\n\n  return rc;\n}\n\nstatic errcode GetTri(FILE * dfile) {\n  vector v0,v1,v2;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"V0\");\n  rc |= GetVector(dfile, &v0);\n\n  rc |= GetString(dfile, \"V1\");\n  rc |= GetVector(dfile, &v1);\n\n  rc |= GetString(dfile, \"V2\");\n  rc |= GetVector(dfile, &v2);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_tri(tex, v0, v1, v2);\n\n  return rc;\n}\n\nstatic errcode GetSTri(FILE * dfile) {\n  vector v0,v1,v2,n0,n1,n2;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"V0\");\n  rc |= GetVector(dfile, &v0);\n\n  rc |= GetString(dfile, \"V1\");\n  rc |= GetVector(dfile, &v1);\n\n  rc |= GetString(dfile, \"V2\");\n  rc |= GetVector(dfile, &v2);\n\n  rc |= GetString(dfile, \"N0\");\n  rc |= GetVector(dfile, &n0);\n\n  rc |= GetString(dfile, \"N1\");\n  rc |= GetVector(dfile, &n1);\n\n  rc |= GetString(dfile, \"N2\");\n  rc |= GetVector(dfile, &n2);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_stri(tex, v0, v1, v2, n0, n1, n2);\n\n  return rc;\n}\n\nstatic errcode GetLandScape(FILE * dfile) {\n  void * tex;\n  vector ctr;\n  apiflt wx, wy;\n  int m, n;\n  float a,b;\n  errcode rc;\n\n  rc = GetString(dfile, \"RES\");\n  fscanf(dfile, \"%d %d\", &m, &n);\n\n  rc |= GetString(dfile, \"SCALE\");\n  fscanf(dfile, \"%f %f\", &a, &b);\n  wx=a;\n  wy=b;\n\n  rc |= GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_landscape(tex, m, n, ctr, wx, wy);\n\n  return rc;\n}\n\nstatic errcode GetTPolyFile(FILE * dfile) {\n  void * tex;\n  vector ctr, rot, scale;\n  vector v1, v2, v0;\n  char ifname[255];\n  FILE *ifp;\n  int v, totalpolys;\n  RotMat RotA;\n  errcode rc;\n\n  totalpolys=0;\n\n  rc = GetString(dfile, \"SCALE\");\n  rc |= GetVector(dfile, &scale);\n\n  rc |= GetString(dfile, \"ROT\");\n  rc |= GetVector(dfile, &rot);\n\n  degvectoradvec(&rot);\n  InitRot3d(&RotA, rot.x, rot.y, rot.z);\n\n  rc |= GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n\n  rc |= GetString(dfile, \"FILE\");\n  fscanf(dfile, \"%s\", ifname);\n\n  rc |= GetTexture(dfile, &tex);\n\n  if ((ifp=fopen(ifname, \"r\")) == NULL) {\n    fprintf(stderr, \"Can't open data file %s for input!! Aborting...\\n\", ifname);\n    return PARSEBADSUBFILE;\n  }\n\n  while (!feof(ifp)) {\n    fscanf(ifp, \"%d\", &v);\n    if (v != 3) { break; }\n\n    totalpolys++;\n    v=0;\n\n    rc |= GetVector(ifp, &v0);\n    rc |= GetVector(ifp, &v1);\n    rc |= GetVector(ifp, &v2);\n\n    Scale3d(&scale, &v0);\n    Scale3d(&scale, &v1);\n    Scale3d(&scale, &v2);\n\n    Rotate3d(&RotA, &v0);\n    Rotate3d(&RotA, &v1);\n    Rotate3d(&RotA, &v2);\n\n    Trans3d(&ctr, &v0);\n    Trans3d(&ctr, &v1);\n    Trans3d(&ctr, &v2);\n\n    rt_tri(tex, v1, v0, v2);\n  }\n\n  fclose(ifp);\n\n  return rc;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/parse.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * parse.h - this file contains defines for model file reading.\n *\n *  $Id: parse.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n#define PARSENOERR       0\n#define PARSEBADFILE     1\n#define PARSEBADSUBFILE  2\n#define PARSEBADSYNTAX   4\n#define PARSEEOF         8\n#define PARSEALLOCERR    16\n \nunsigned int readmodel(char *, SceneHandle);\n\n#ifdef PARSE_INTERNAL\n#define NUMTEXS 32768\n#define TEXNAMELEN 24\n\ntypedef struct {\n   double rx1; double rx2; double rx3;\n   double ry1; double ry2; double ry3;\n   double rz1; double rz2; double rz3;\n} RotMat;\n\ntypedef struct {\n        char name[TEXNAMELEN];\n        void * tex;\n} texentry;\n\n#ifdef _ERRCODE_DEFINED\n#define errcode errcode_t\n#endif//_ERRCODE_DEFINED\ntypedef unsigned int errcode;\n\nstatic errcode add_texture(void * tex, char name[TEXNAMELEN]);\nstatic errcode GetString(FILE *, const char *);\nstatic errcode GetScenedefs(FILE *, SceneHandle);\nstatic errcode GetColor(FILE *, color *);\nstatic errcode GetVector(FILE *, vector *);\nstatic errcode GetTexDef(FILE *);\nstatic errcode GetTexAlias(FILE *);\nstatic errcode GetTexture(FILE *, void **);\nvoid * GetTexBody(FILE *);\nstatic errcode GetBackGnd(FILE *);\nstatic errcode GetCylinder(FILE *);\nstatic errcode GetFCylinder(FILE *);\nstatic errcode GetPolyCylinder(FILE *);\nstatic errcode GetSphere(FILE *);\nstatic errcode GetPlane(FILE *);\nstatic errcode GetRing(FILE *);\nstatic errcode GetBox(FILE *);\nstatic errcode GetVol(FILE *);\nstatic errcode GetTri(FILE *);\nstatic errcode GetSTri(FILE *);\nstatic errcode GetLight(FILE *);\nstatic errcode GetLandScape(FILE *);\nstatic errcode GetTPolyFile(FILE *);\nstatic errcode GetMGFFile(FILE *, SceneHandle);\nstatic errcode GetObject(FILE *, SceneHandle);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/plane.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * plane.cpp - This file contains the functions for dealing with planes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define PLANE_PRIVATE\n#include \"plane.h\"\n\nstatic object_methods plane_methods = {\n  (void (*)(void *, void *))(plane_intersect),\n  (void (*)(void *, void *, void *, void *))(plane_normal),\n  plane_bbox, \n  free \n};\n\nobject * newplane(void * tex, vector ctr, vector norm) {\n  plane * p;\n  \n  p=(plane *) rt_getmem(sizeof(plane));\n  memset(p, 0, sizeof(plane));\n  p->methods = &plane_methods;\n\n  p->tex = (texture *)tex;\n  p->norm = norm;\n  VNorm(&p->norm);\n  p->d = -VDot(&ctr, &p->norm);\n\n  return (object *) p;\n}\n\nstatic int plane_bbox(void * obj, vector * min, vector * max) {\n  return 0;\n}\n\nstatic void plane_intersect(plane * pln, ray * ry) {\n  flt t,td;\n   \n  t=-(pln->d + VDot(&pln->norm, &ry->o));\n  td=VDot(&pln->norm, &ry->d); \n  if (td != 0.0) {\n    t /= td;\n    if (t > 0.0)\n      add_intersection(t,(object *) pln, ry);\n  }\n}\n\nstatic void plane_normal(plane * pln, vector  * pnt, ray * incident, vector * N) {\n  *N=pln->norm;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/plane.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * plane.h - This file contains the defines for planes etc.\n *\n *  $Id: plane.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n \nobject * newplane(void * tex, vector ctr, vector norm);\n\n#ifdef PLANE_PRIVATE\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  flt d;\n  vector norm;\n} plane; \n\nstatic void plane_intersect(plane *, ray *);\nstatic int plane_bbox(void * obj, vector * min, vector * max);\nstatic void plane_normal(plane *, vector *, ray * incident, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ppm.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  ppm.cpp - This file deals with PPM format image files (reading/writing)\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file..  Probably won't implement any decent checking\n   at this point, probably choke on things like the # comments.. */\n\n// Try preventing lots of GCC warnings about ignored results of fscanf etc.\n#if !__INTEL_COMPILER\n\n#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5\n// For older versions of GCC, disable use of __wur in GLIBC\n#undef _FORTIFY_SOURCE\n#define _FORTIFY_SOURCE 0\n#else\n// Starting from 4.5, GCC has a suppression option\n#pragma GCC diagnostic ignored \"-Wunused-result\"\n#endif\n\n#endif //__INTEL_COMPILER\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\" /* error codes etc */\n#include \"ppm.h\"\n\nstatic int getint(FILE * dfile) {\n  char ch[200];\n  int i;\n  int num;\n\n  num=0; \n  while (num==0) {\n    fscanf(dfile, \"%s\", ch);\n      while (ch[0]=='#') {\n        fgets(ch, 200, dfile);\n      }\n    num=sscanf(ch, \"%d\", &i);\n  }\n  return i;\n}\n\nint readppm(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  char data[200];  \n  FILE * ifp;\n  int i;\n  size_t bytesread;\n  int datasize;\n \n  ifp=fopen(name, \"r\");  \n  if (ifp==NULL) {\n    return IMAGEBADFILE; /* couldn't open the file */\n  }\n  fscanf(ifp, \"%s\", data);\n \n  if (strcmp(data, \"P6\")) {\n     fclose(ifp);\n     return IMAGEUNSUP; /* not a format we support */\n  }\n\n  *xres=getint(ifp);\n  *yres=getint(ifp);\n      i=getint(ifp); /* eat the maxval number */\n  fread(&i, 1, 1, ifp); /* eat the newline */ \n  datasize = 3 * (*xres) * (*yres);\n\n  *imgdata=(unsigned char *)rt_getmem(datasize); \n\n  bytesread=fread(*imgdata, 1, datasize, ifp);   \n\n  fclose(ifp);\n\n  if (bytesread != datasize) \n    return IMAGEREADERR;\n  \n  return IMAGENOERR;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ppm.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  ppm.h - This file deals with PPM format image files (reading/writing)\n *\n *  $Id: ppm.h,v 1.2 2007-02-22 17:54:16 Exp $\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file..  Probably won't implement any decent checking\n   at this point, probably choke on things like the # comments.. */\n\nint readppm(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/pthread.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#ifdef EMULATE_PTHREADS\n\n#include <assert.h>\n#include \"pthread_w.h\"\n\n/*\n    Basics\n*/\n\nint\npthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)\n{\n    pthread_t th;\n\n    if (thread == NULL) return EINVAL;\n    *thread = NULL;\n\n    if (start_routine == NULL) return EINVAL;\n\n    th = (pthread_t) malloc (sizeof (pthread_s));\n    memset (th, 0, sizeof (pthread_s));\n\n    th->winthread_handle = CreateThread (\n        NULL,\n        0,\n        (LPTHREAD_START_ROUTINE) start_routine,\n        arg,\n        0,\n        &th->winthread_id);\n    if (th->winthread_handle == NULL) return EAGAIN;  /*  GetLastError()  */\n\n    *thread = th;\n    return 0;\n}\n\nint\npthread_join (pthread_t th, void **thread_return)\n{\n    BOOL b_ret;\n    DWORD dw_ret;\n\n    if (thread_return) *thread_return = NULL;\n\n    if ((th == NULL) || (th->winthread_handle == NULL)) return EINVAL;\n\n    dw_ret = WaitForSingleObject (th->winthread_handle, INFINITE);\n    if (dw_ret != WAIT_OBJECT_0) return ERROR_PTHREAD;  /*  dw_ret == WAIT_FAILED; GetLastError()  */\n\n    if (thread_return) {\n        BOOL e_ret;\n        DWORD exit_val;\n        e_ret = GetExitCodeThread (th->winthread_handle, &exit_val);\n        if (!e_ret) return ERROR_PTHREAD;  /*  GetLastError()  */\n        *thread_return = (void *)(size_t) exit_val;\n    }\n\n    b_ret = CloseHandle (th->winthread_handle);\n    if (!b_ret) return ERROR_PTHREAD;  /*  GetLastError()  */\n    memset (th, 0, sizeof (pthread_s));\n    free (th);\n    th = NULL;\n\n    return 0;\n}\n\nvoid\npthread_exit (void *retval)\n{\n    /*  specific to PTHREAD_TO_WINTHREAD  */\n\n    ExitThread ((DWORD) ((size_t) retval));  /*  thread becomes signalled so its death can be waited upon  */\n    /*NOTREACHED*/\n    assert (0); return;  /*  void fnc; can't return an error code  */\n}\n\n/*\n    Mutex\n*/\n\nint\npthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr)\n{\n    InitializeCriticalSection (&mutex->critsec);\n    return 0;\n}\n\nint\npthread_mutex_destroy (pthread_mutex_t *mutex)\n{\n    return 0;\n}\n\nint\npthread_mutex_lock (pthread_mutex_t *mutex)\n{\n    EnterCriticalSection (&mutex->critsec);\n    return 0;\n}\n\nint\npthread_mutex_unlock (pthread_mutex_t *mutex)\n{\n    LeaveCriticalSection (&mutex->critsec);\n    return 0;\n}\n\n#endif  /*  EMULATE_PTHREADS  */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/pthread_w.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#ifdef EMULATE_PTHREADS\n\n#ifndef _PTHREAD_H_DEFINED\n#define _PTHREAD_H_DEFINED\n\n#include <windows.h>\n#include <errno.h>\n#ifndef ENOTSUP\n#define ENOTSUP EPERM\n#endif\n\n/*  just need <stddef.h> on Windows to get size_t defined  */\n#include <stddef.h>\n\n#define ERROR_PTHREAD 1000\n#define ERROR_MODE 1001\n#define ERROR_UNIMPL 1002\n\n/*\n    Basics\n*/\n\nstruct pthread_s {\n    HANDLE winthread_handle;\n    DWORD winthread_id;\n};\ntypedef struct pthread_s *pthread_t;  /*  one of the few types that's pointer, not struct  */\n\ntypedef struct {\n    int i;  /*  not yet defined...  */\n} pthread_attr_t;\n\n/*\n    Mutex\n*/\n\ntypedef struct {\n    int i;  /*  not yet defined...  */\n} pthread_mutexattr_t;\n\ntypedef struct {\n    CRITICAL_SECTION critsec;\n} pthread_mutex_t;\n\n/*\n    Function prototypes\n*/\n\nextern int pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);\nextern int pthread_join (pthread_t th, void **thread_return);\nextern void pthread_exit (void *retval);\n\nextern int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr);\nextern int pthread_mutex_destroy (pthread_mutex_t *mutex);\nextern int pthread_mutex_lock (pthread_mutex_t *mutex);\nextern int pthread_mutex_unlock (pthread_mutex_t *mutex);\n\n#endif  /*  _PTHREAD_H_DEFINED  */\n\n#endif  /*  EMULATE_PTHREADS  */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/quadric.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * quadric.cpp - This file contains the functions for dealing with quadrics.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"quadric.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\nint quadric_bbox(void * obj, vector * min, vector * max) {\n  return 0;\n}\n\nstatic object_methods quadric_methods = {\n  (void (*)(void *, void *))(quadric_intersect),\n  (void (*)(void *, void *, void *, void *))(quadric_normal),\n  quadric_bbox, \n  free \n};\n \nquadric * newquadric() {\n  quadric * q;\n \n  q=(quadric *) rt_getmem(sizeof(quadric));\n  memset(q, 0, sizeof(quadric));\n  q->ctr.x=0.0;\n  q->ctr.y=0.0;\n  q->ctr.z=0.0;\n  q->methods = &quadric_methods;\n \n  return q;\n}\n\nvoid quadric_intersect(quadric * q, ray * ry) {\n  flt Aq, Bq, Cq;\n  flt t1, t2;\n  flt disc;\n  vector rd;\n  vector ro;\n \n  rd=ry->d;\n  VNorm(&rd);\n\n  ro.x =  ry->o.x - q->ctr.x;\n  ro.y =  ry->o.y - q->ctr.y;\n  ro.z =  ry->o.z - q->ctr.z;\n\n\n  Aq = (q->mat.a*(rd.x * rd.x)) +\n        (2.0 * q->mat.b * rd.x * rd.y) +\n        (2.0 * q->mat.c * rd.x * rd.z) +\n        (q->mat.e * (rd.y * rd.y)) +\n        (2.0 * q->mat.f * rd.y * rd.z) +\n        (q->mat.h * (rd.z * rd.z));\n\n  Bq = 2.0 * (\n        (q->mat.a * ro.x * rd.x) +\n        (q->mat.b * ((ro.x * rd.y) + (rd.x * ro.y))) +\n        (q->mat.c * ((ro.x * rd.z) + (rd.x * ro.z))) +\n        (q->mat.d * rd.x) +\n        (q->mat.e * ro.y * rd.y) +\n        (q->mat.f * ((ro.y * rd.z) + (rd.y * ro.z))) +\n        (q->mat.g * rd.y) +\n        (q->mat.h * ro.z * rd.z) +\n        (q->mat.i * rd.z)\n        );\n\n  Cq = (q->mat.a * (ro.x * ro.x)) +\n        (2.0 * q->mat.b * ro.x * ro.y) +\n        (2.0 * q->mat.c * ro.x * ro.z) +\n        (2.0 * q->mat.d * ro.x) +\n        (q->mat.e * (ro.y * ro.y)) +\n        (2.0 * q->mat.f * ro.y * ro.z) +\n        (2.0 * q->mat.g * ro.y) +\n        (q->mat.h * (ro.z * ro.z)) +\n        (2.0 * q->mat.i * ro.z) +\n        q->mat.j;\n\n  if (Aq == 0.0) {\n          t1 = - Cq / Bq;\n          add_intersection(t1, (object *) q, ry);\n          }\n  else {\n    disc=(Bq*Bq - 4.0 * Aq * Cq);\n    if (disc > 0.0) {\n          disc=sqrt(disc);\n          t1 = (-Bq + disc) / (2.0 * Aq);\n          t2 = (-Bq - disc) / (2.0 * Aq);\n          add_intersection(t1, (object *) q, ry);\n          add_intersection(t2, (object *) q, ry); \n          }\n  }\n}\n\nvoid quadric_normal(quadric * q, vector * pnt, ray * incident, vector * N) {\n\n  N->x = (q->mat.a*(pnt->x - q->ctr.x) + \n\t  q->mat.b*(pnt->y - q->ctr.y) + \n\t  q->mat.c*(pnt->z - q->ctr.z) + q->mat.d);\n\n  N->y = (q->mat.b*(pnt->x - q->ctr.x) + \n\t  q->mat.e*(pnt->y - q->ctr.y) + \n\t  q->mat.f*(pnt->z - q->ctr.z) + q->mat.g);\n\n  N->z = (q->mat.c*(pnt->x - q->ctr.x) + \n\t  q->mat.f*(pnt->y - q->ctr.y) + \n\t  q->mat.h*(pnt->z - q->ctr.z) + q->mat.i);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n \n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/quadric.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * quadric.h - This file contains the defines for quadrics.\n *\n *  $Id: quadric.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\ntypedef struct {\n  flt a; flt b; flt c;\n  flt d; flt e; flt f;\n  flt g; flt h; flt i; flt j;\n} quadmatrix;\n\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  quadmatrix mat;\n} quadric; \n\n\nquadric * newquadric(void);\nvoid quadric_intersect(quadric *, ray *);\nvoid quadric_normal(quadric *, vector *, ray *, vector *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/render.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * render.cpp - This file contains the main program and driver for the raytracer.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"render.h\"\n#include \"util.h\"\n#include \"light.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n#include \"objbound.h\"\n#include \"grid.h\"\n\n/* how many pieces to divide each scanline into */\n#define NUMHORZDIV 1  \n\nvoid renderscene(scenedef scene) {\n  //char msgtxt[2048];\n  //void * outfile;\n  /* Grid based accerlation scheme */\n  if (scene.boundmode == RT_BOUNDING_ENABLED) \n    engrid_scene(&rootobj); /* grid */\n  /* Not used now\n  if (scene.verbosemode) { \n    sprintf(msgtxt, \"Opening %s for output.\", scene.outfilename); \n    rt_ui_message(MSG_0, msgtxt);\n  }\n\n  createtgafile(scene.outfilename,  \n                  (unsigned short) scene.hres, \n                  (unsigned short) scene.vres);\n  outfile = opentgafile(scene.outfilename);\n  */\n\n  trace_region (scene, 0/*outfile*/, 0, 0, scene.hres, scene.vres);\n  //fclose((FILE *)outfile);\n} /* end of renderscene() */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/render.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * render.h - This file contains the defines for the top level functions \n *\n *  $Id: render.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n\nvoid renderscene(scenedef); \n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ring.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * ring.cpp - This file contains the functions for dealing with rings.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define RING_PRIVATE\n#include \"ring.h\"\n\nstatic object_methods ring_methods = {\n  (void (*)(void *, void *))(ring_intersect),\n  (void (*)(void *, void *, void *, void *))(ring_normal),\n  ring_bbox, \n  free \n};\n\nobject * newring(void * tex, vector ctr, vector norm, flt inrad, flt outrad) {\n  ring * r;\n  \n  r=(ring *) rt_getmem(sizeof(ring));\n  memset(r, 0, sizeof(ring));\n  r->methods = &ring_methods;\n\n  r->tex = (texture *)tex;\n  r->ctr = ctr;\n  r->norm = norm;\n  r->inrad = inrad;\n  r->outrad= outrad;\n\n  return (object *) r;\n}\n\nstatic int ring_bbox(void * obj, vector * min, vector * max) {\n  ring * r = (ring *) obj;\n\n  min->x = r->ctr.x - r->outrad;\n  min->y = r->ctr.y - r->outrad;\n  min->z = r->ctr.z - r->outrad;\n  max->x = r->ctr.x + r->outrad;\n  max->y = r->ctr.y + r->outrad;\n  max->z = r->ctr.z + r->outrad;\n\n  return 1;\n}\n\nstatic void ring_intersect(ring * rng, ray * ry) {\n  flt d;\n  flt t,td;\n  vector hit, pnt;\n  \n  d = -VDot(&(rng->ctr), &(rng->norm));\n   \n  t=-(d+VDot(&(rng->norm), &(ry->o)));\n  td=VDot(&(rng->norm),&(ry->d)); \n  if (td != 0.0) {\n    t= t / td;\n    if (t>=0.0) {\n      hit=Raypnt(ry, t);\n      VSUB(hit, rng->ctr, pnt);\n      VDOT(td, pnt, pnt);\n      td=sqrt(td);\n      if ((td > rng->inrad) && (td < rng->outrad)) \n        add_intersection(t,(object *) rng, ry);\n    }\n  }\n}\n\nstatic void ring_normal(ring * rng, vector  * pnt, ray * incident, vector * N) {\n  *N=rng->norm;\n  VNorm(N);\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ring.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * ring.h - This file contains the defines for rings etc.\n *\n *  $Id: ring.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newring(void * tex, vector ctr, vector norm, flt in, flt out);\n\n#ifdef RING_PRIVATE \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  vector norm;\n  flt inrad;\n  flt outrad;\n} ring; \n\nstatic int ring_bbox(void * obj, vector * min, vector * max);\nstatic void ring_intersect(ring *, ray *);\nstatic void ring_normal(ring *, vector *, ray * incident, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/shade.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * shade.cpp - This file contains the functions that perform surface shading.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"light.h\"\n#include \"intersect.h\"\n#include \"vector.h\"\n#include \"trace.h\"\n#include \"global.h\"\n#include \"shade.h\"\n\nvoid reset_lights(void) {\n  numlights=0;\n}\n\nvoid add_light(point_light * li) {\n  lightlist[numlights]=li;\n  numlights++;\n}\n\ncolor shader(ray * incident) {\n  color col, diffuse, phongcol; \n  vector N, L, hit;\n  ray shadowray;\n  flt inten, t, Llen;\n  object * obj;\n  int numints, i;\n  point_light * li;\n\n\n  numints=closest_intersection(&t, &obj, incident->intstruct);  \n\t\t/* find the number of intersections */\n                /* and return the closest one.      */\n\n  if (numints < 1) {         \n    /* if there weren't any object intersections then return the */\n    /* background color for the pixel color.                     */\n    return incident->scene->background;\n  }\n\n  if (obj->tex->islight) {  /* if the current object is a light, then we  */\n    return obj->tex->col;   /* will only use the objects ambient color    */\n  }\n\n  RAYPNT(hit, (*incident), t)       /* find the point of intersection from t */ \n  obj->methods->normal(obj, &hit, incident, &N);  /* find the surface normal */\n\n  /* execute the object's texture function */\n  col = obj->tex->texfunc(&hit, obj->tex, incident); \n\n  diffuse.r = 0.0; \n  diffuse.g = 0.0; \n  diffuse.b = 0.0; \n  phongcol = diffuse;\n\n  if ((obj->tex->diffuse > 0.0) || (obj->tex->phong > 0.0)) {  \n    for (i=0; i<numlights; i++) {   /* loop for light contributions */\n      li=lightlist[i];              /* set li=to the current light  */\n      VSUB(li->ctr, hit, L)         /* find the light vector        */\n\n      /* calculate the distance to the light from the hit point */\n      Llen = sqrt(L.x*L.x + L.y*L.y + L.z*L.z) + EPSILON;\n\n      L.x /= Llen; /* normalize the light direction vector */\n      L.y /= Llen;\n      L.z /= Llen;\n\n      VDOT(inten, N, L)             /* light intensity              */\n\n      /* add in diffuse lighting for this light if we're facing it */ \n      if (inten > 0.0) {            \n        /* test for a shadow */\n        shadowray.intstruct = incident->intstruct;\n        shadowray.flags = RT_RAY_SHADOW | RT_RAY_BOUNDED; \n        incident->serial++;\n        shadowray.serial = incident->serial;\n        shadowray.mbox = incident->mbox;\n        shadowray.o   = hit;\n        shadowray.d   = L;      \n        shadowray.maxdist = Llen;\n        shadowray.s   = hit;\n        shadowray.e = li->ctr;\n        shadowray.scene = incident->scene;\n        reset_intersection(incident->intstruct);\n        intersect_objects(&shadowray);\n\n        if (!shadow_intersection(incident->intstruct, Llen)) {\n          /* XXX now that opacity is in the code, have to be more careful */\n          ColorAddS(&diffuse, &li->tex->col, inten);\n\n          /* phong type specular highlights */\n          if (obj->tex->phong > 0.0) {\n            flt phongval;\n            phongval = shade_phong(incident, &hit, &N, &L, obj->tex->phongexp); \n            if (obj->tex->phongtype) \n              ColorAddS(&phongcol, &col, phongval);\n            else\n              ColorAddS(&phongcol, &(li->tex->col), phongval);\n          }\n        }\n      }  \n    } \n  }\n\n  ColorScale(&diffuse, obj->tex->diffuse);\n\n  col.r *= (diffuse.r + obj->tex->ambient); /* do a product of the */\n  col.g *= (diffuse.g + obj->tex->ambient); /* diffuse intensity with  */\n  col.b *= (diffuse.b + obj->tex->ambient); /* object color + ambient  */\n\n  if (obj->tex->phong > 0.0) {\n    ColorAccum(&col, &phongcol);\n  }\n\n  /* spawn reflection rays if necessary */\n  /* note: this will overwrite the old intersection list */\n  if (obj->tex->specular > 0.0) {    \n    color specol;\n    specol = shade_reflection(incident, &hit, &N, obj->tex->specular);\n    ColorAccum(&col, &specol);\n  }\n\n  /* spawn transmission rays / refraction */\n  /* note: this will overwrite the old intersection list */\n  if (obj->tex->opacity < 1.0) {      \n    color transcol;\n    transcol = shade_transmission(incident, &hit, 1.0 - obj->tex->opacity);\n    ColorAccum(&col, &transcol);\n  }\n\n  return col;    /* return the color of the shaded pixel... */\n}\n\n\ncolor shade_reflection(ray * incident, vector * hit, vector * N, flt specular) {\n  ray specray;\n  color col;\n  vector R;\n \n  VAddS(-2.0 * (incident->d.x * N->x + \n                incident->d.y * N->y + \n                incident->d.z * N->z), N, &incident->d, &R);\n\n  specray.intstruct=incident->intstruct; /* what thread are we   */\n  specray.depth=incident->depth - 1;   /* go up a level in recursion depth */\n  specray.flags = RT_RAY_REGULAR;      /* infinite ray, to start with */\n  specray.serial = incident->serial + 1; /* next serial number */\n  specray.mbox = incident->mbox; \n  specray.o=*hit; \n  specray.d=R;\t\t\t       /* reflect incident ray about normal */\n  specray.o=Raypnt(&specray, EPSILON); /* avoid numerical precision bugs */\n  specray.maxdist = FHUGE;             /* take any intersection */\n  specray.scene=incident->scene;       /* global scenedef info */\n  col=trace(&specray);                 /* trace specular reflection ray */ \n\n  incident->serial = specray.serial;    /* update the serial number */\n\n  ColorScale(&col, specular);\n\n  return col;\n}\n\n\ncolor shade_transmission(ray * incident, vector * hit, flt trans) {\n  ray transray;\n  color col;\n\n  transray.intstruct=incident->intstruct; /* what thread are we   */\n  transray.depth=incident->depth - 1;    /* go up a level in recursion depth */\n  transray.flags = RT_RAY_REGULAR;       /* infinite ray, to start with */\n  transray.serial = incident->serial + 1; /* update serial number */\n  transray.mbox = incident->mbox;\n  transray.o=*hit; \n  transray.d=incident->d;                /* ray continues along incident path */\n  transray.o=Raypnt(&transray, EPSILON); /* avoid numerical precision bugs */\n  transray.maxdist = FHUGE;              /* take any intersection */\n  transray.scene=incident->scene;        /* global scenedef info */\n  col=trace(&transray);                  /* trace transmission ray */  \n\n  incident->serial = transray.serial;\n\n  ColorScale(&col, trans);\n\n  return col;\n}\n\nflt shade_phong(ray * incident, vector * hit, \n  vector * N, vector * L, flt specpower){\n  vector H, V;\n  flt inten;\n\n  V = incident->d;\n  VScale(&V, -1.0);\n  VAdd(&V, L, &H);\n  VScale(&H, 0.5);   \n  VNorm(&H);\n  inten = VDot(N, &H);\n  if (inten > 0.0) \n    inten = pow(inten, specpower);\n  else \n    inten = 0.0;\n\n  return inten;\n} \n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/shade.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * shade.h - This file contains declarations and definitions for the shader.\n *\n *  $Id: shade.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n \nvoid reset_lights(void);\nvoid add_light(point_light *);\n\ncolor shader(ray *);\ncolor shade_reflection(ray *, vector *, vector *, flt);\ncolor shade_transmission(ray *, vector *, flt);\nflt shade_phong(ray * incident, vector * hit, vector * N, vector * L, flt specpower);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/sphere.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * sphere.cpp - This file contains the functions for dealing with spheres.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define SPHERE_PRIVATE\n#include \"sphere.h\"\n\nstatic object_methods sphere_methods = {\n  (void (*)(void *, void *))(sphere_intersect),\n  (void (*)(void *, void *, void *, void *))(sphere_normal),\n  sphere_bbox, \n  free \n};\n\nobject * newsphere(void * tex, vector ctr, flt rad) {\n  sphere * s;\n  \n  s=(sphere *) rt_getmem(sizeof(sphere));\n  memset(s, 0, sizeof(sphere));\n  s->methods = &sphere_methods;\n\n  s->tex=(texture *)tex;\n  s->ctr=ctr;\n  s->rad=rad;\n\n  return (object *) s;\n}\n\nstatic int sphere_bbox(void * obj, vector * min, vector * max) {\n  sphere * s = (sphere *) obj;\n\n  min->x = s->ctr.x - s->rad;\n  min->y = s->ctr.y - s->rad;\n  min->z = s->ctr.z - s->rad;\n  max->x = s->ctr.x + s->rad;\n  max->y = s->ctr.y + s->rad;\n  max->z = s->ctr.z + s->rad;\n\n  return 1;\n}\n\nstatic void sphere_intersect(sphere * spr, ray * ry) {\n  flt b, disc, t1, t2, temp;\n  vector V;\n\n  VSUB(spr->ctr, ry->o, V);\n  VDOT(b, V, ry->d); \n  VDOT(temp, V, V);  \n\n  disc=b*b + spr->rad*spr->rad - temp;\n\n  if (disc<=0.0) return;\n  disc=sqrt(disc);\n\n  t2=b+disc;\n  if (t2 <= SPEPSILON) \n    return;\n  add_intersection(t2, (object *) spr, ry);  \n\n  t1=b-disc;\n  if (t1 > SPEPSILON) \n    add_intersection(t1, (object *) spr, ry);  \n}\n\nstatic void sphere_normal(sphere * spr, vector * pnt, ray * incident, vector * N) {\n  VSub((vector *) pnt, &(spr->ctr), N);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/sphere.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * sphere.h - This file contains the defines for spheres etc.\n *\n *  $Id: sphere.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newsphere(void *, vector, flt);\n\n#ifdef SPHERE_PRIVATE\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  flt rad;\n} sphere;\n\nstatic int sphere_bbox(void * obj, vector * min, vector * max);\nstatic void sphere_intersect(sphere *, ray *);\nstatic void sphere_normal(sphere *, vector *, ray *, vector *);\n\n#endif /* SPHERE_PRIVATE */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/tachyon_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"types.h\"\n#include \"api.h\"       /* The ray tracing library API */\n#include \"ui.h\"\n#include \"util.h\"\n#include \"tachyon_video.h\"\n\nextern SceneHandle global_scene;\nextern char *global_window_title;\nextern bool global_usegraphics;\n\nvoid tachyon_video::on_process() {\n    char buf[8192];\n    flt runtime;\n    scenedef *scene = (scenedef *) global_scene;\n    updating_mode = scene->displaymode == RT_DISPLAY_ENABLED;\n    recycling = false;\n    pausing = false;\n    do {\n        updating = updating_mode;\n        timer start_timer = gettimer();\n        rt_renderscene(global_scene);\n        timer end_timer = gettimer();\n        runtime = timertime(start_timer, end_timer);\n        sprintf(buf, \"%s: %.3f seconds\", global_window_title, runtime);\n        rt_ui_message(MSG_0, buf);\n        title = buf; show_title(); // show time spent for rendering\n        if(!updating) {\n            updating = true;\n            drawing_memory dm = get_drawing_memory();\n            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen\n        }\n        rt_finalize();\n        title = global_window_title; show_title(); // reset title to default\n    } while(recycling && running);\n}\n\nvoid tachyon_video::on_key(int key) {\n    key &= 0xff;\n    recycling = true;\n    if(key == esc_key) running = false;\n    else if(key == ' ') {\n        if(!updating) {\n            updating = true;\n            drawing_memory dm = get_drawing_memory();\n            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen\n        }\n        updating = updating_mode = !updating_mode;\n    }\n    else if(key == 'p') {\n        pausing = !pausing;\n        if(pausing) {\n            title = \"Press ESC to exit or 'p' to continue after rendering completion\";\n            show_title();\n        }\n    }\n}\n\nvoid rt_finalize(void) {\n    timer t0, t1;\n    t0 = gettimer();\n    if(global_usegraphics)\n        do { rt_sleep(1); t1 = gettimer(); }\n        while( (timertime(t0, t1) < 10 || video->pausing) && video->next_frame());\n#ifdef _WINDOWS\n    else rt_sleep(10000);\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/tachyon_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"../../../common/gui/video.h\"\n\nclass tachyon_video : public video\n{\npublic:\n    bool updating_mode;\n    bool recycling;\n    bool pausing;\n    void on_process();\n    void on_key(int key);\n};\n\nextern class tachyon_video *video;\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/texture.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * texture.cpp - This file contains functions for implementing textures.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"texture.h\"\n#include \"coordsys.h\"\n#include \"imap.h\"\n#include \"vector.h\"\n#include \"box.h\"\n\n/* plain vanilla texture solely based on object color */\ncolor standard_texture(vector * hit, texture * tex, ray * ry) {\n  return tex->col;\n}\n\n/* cylindrical image map */\ncolor image_cyl_texture(vector * hit, texture * tex, ray * ry) {\n  vector rh;\n  flt u,v;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.z=hit->y - tex->ctr.y;\n  rh.y=hit->z - tex->ctr.z;\n \n  xyztocyl(rh, 1.0, &u, &v);\n\n  u = u * tex->scale.x;  \n  u = u + tex->rot.x;\n  u=fmod(u, 1.0);\n  if (u < 0.0) u+=1.0; \n\n  v = v * tex->scale.y; \n  v = v + tex->rot.y;\n  v=fmod(v, 1.0);\n  if (v < 0.0) v+=1.0; \n\n  return ImageMap((rawimage *)tex->img, u, v); \n}  \n\n/* spherical image map */\ncolor image_sphere_texture(vector * hit, texture * tex, ray * ry) {\n  vector rh;\n  flt u,v;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.y=hit->y - tex->ctr.y;\n  rh.z=hit->z - tex->ctr.z;\n \n  xyztospr(rh, &u, &v);\n\n  u = u * tex->scale.x;\n  u = u + tex->rot.x;\n  u=fmod(u, 1.0);\n  if (u < 0.0) u+=1.0;\n \n  v = v * tex->scale.y;\n  v = v + tex->rot.y;\n  v=fmod(v, 1.0);\n  if (v < 0.0) v+=1.0;\n \n  return ImageMap((rawimage *)tex->img, u, v);\n}\n\n/* planar image map */\ncolor image_plane_texture(vector * hit, texture * tex, ray * ry) {\n  vector pnt;\n  flt u,v;\n \n  pnt.x=hit->x - tex->ctr.x;\n  pnt.y=hit->y - tex->ctr.y;\n  pnt.z=hit->z - tex->ctr.z;\n\n  VDOT(u, tex->uaxs, pnt);\n/*  VDOT(len, tex->uaxs, tex->uaxs);\n  u = u / sqrt(len); */\n\n  VDOT(v, tex->vaxs, pnt); \n/*  VDOT(len, tex->vaxs, tex->vaxs);\n  v = v / sqrt(len); */\n    \n\n  u = u * tex->scale.x;\n  u = u + tex->rot.x;\n  u = fmod(u, 1.0);\n  if (u < 0.0) u += 1.0;\n\n  v = v * tex->scale.y;\n  v = v + tex->rot.y;\n  v = fmod(v, 1.0);\n  if (v < 0.0) v += 1.0;\n\n  return ImageMap((rawimage *)tex->img, u, v);\n}\n\ncolor grit_texture(vector * hit, texture * tex, ray * ry) {\n  int rnum;\n  flt fnum;\n  color col;\n\n  rnum=rand() % 4096;\n  fnum=(rnum / 4096.0 * 0.2) + 0.8;\n\n  col.r=tex->col.r * fnum;\n  col.g=tex->col.g * fnum;\n  col.b=tex->col.b * fnum;\n\n  return col;\n}\n\ncolor checker_texture(vector * hit, texture * tex, ray * ry) {\n  long x,y,z;\n  flt xh,yh,zh;\n  color col;\n\n  xh=hit->x - tex->ctr.x; \n  x=(long) ((fabs(xh) * 3) + 0.5);\n  x=x % 2;\n  yh=hit->y - tex->ctr.y;\n  y=(long) ((fabs(yh) * 3) + 0.5);\n  y=y % 2;\n  zh=hit->z - tex->ctr.z;\n  z=(long) ((fabs(zh) * 3) + 0.5);\n  z=z % 2;\n\n  if (((x + y + z) % 2)==1) {\n    col.r=1.0;\n    col.g=0.2;\n    col.b=0.0;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.2;\n    col.b=1.0;\n  }\n\n  return col;\n}\n\ncolor cyl_checker_texture(vector * hit, texture * tex, ray * ry) {\n  long x,y;\n  vector rh;\n  flt u,v;\n  color col;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.y=hit->y - tex->ctr.y;\n  rh.z=hit->z - tex->ctr.z;\n\n  xyztocyl(rh, 1.0, &u, &v); \n\n  x=(long) (fabs(u) * 18.0);\n  x=x % 2;\n  y=(long) (fabs(v) * 10.0);\n  y=y % 2;\n \n  if (((x + y) % 2)==1) {\n    col.r=1.0;\n    col.g=0.2;\n    col.b=0.0;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.2;\n    col.b=1.0;\n  }\n \n  return col;\n}\n\n\ncolor wood_texture(vector * hit, texture * tex, ray * ry) {\n  flt radius, angle;\n  int grain;\n  color col;\n  flt x,y,z;\n\n  x=(hit->x - tex->ctr.x) * 1000;\n  y=(hit->y - tex->ctr.y) * 1000;\n  z=(hit->z - tex->ctr.z) * 1000;\n\n  radius=sqrt(x*x + z*z);\n  if (z == 0.0) \n    angle=3.1415926/2.0;\n  else \n    angle=atan(x / z);\n\n  radius=radius + 3.0 * sin(20 * angle + y / 150.0);\n  grain=((int) (radius + 0.5)) % 60;\n  if (grain < 40) {\n    col.r=0.8;\n    col.g=1.0;\n    col.b=0.2;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.0;\n    col.b=0.0;\n  }     \n\n  return col;\n} \n\n\n\n#define NMAX 28\nshort int NoiseMatrix[NMAX][NMAX][NMAX];\n\nvoid InitNoise(void) {\n  byte x,y,z,i,j,k;\n\n  for (x=0; x<NMAX; x++) {\n    for (y=0; y<NMAX; y++) {\n      for (z=0; z<NMAX; z++) {\n        NoiseMatrix[x][y][z]=rand() % 12000;\n\n        if (x==NMAX-1) i=0; \n        else i=x;\n\n        if (y==NMAX-1) j=0;\n        else j=y;\n\n        if (z==NMAX-1) k=0;\n        else k=z;\n\n        NoiseMatrix[x][y][z]=NoiseMatrix[i][j][k];\n      }\n    }\n  }\n}\n\nint Noise(flt x, flt y, flt z) {\n  byte ix, iy, iz;\n  flt ox, oy, oz;\n  int p000, p001, p010, p011;\n  int p100, p101, p110, p111;\n  int p00, p01, p10, p11;\n  int p0, p1;\n  int d00, d01, d10, d11;\n  int d0, d1, d;\n\n  x=fabs(x);\n  y=fabs(y);\n  z=fabs(z);\n\n  ix=((int) x) % (NMAX-1);\n  iy=((int) y) % (NMAX-1);\n  iz=((int) z) % (NMAX-1);\n\n  ox=(x - ((int) x));\n  oy=(y - ((int) y));\n  oz=(z - ((int) z));\n\n  p000=NoiseMatrix[ix][iy][iz];\n  p001=NoiseMatrix[ix][iy][iz+1];\n  p010=NoiseMatrix[ix][iy+1][iz];\n  p011=NoiseMatrix[ix][iy+1][iz+1];\n  p100=NoiseMatrix[ix+1][iy][iz];\n  p101=NoiseMatrix[ix+1][iy][iz+1];\n  p110=NoiseMatrix[ix+1][iy+1][iz];\n  p111=NoiseMatrix[ix+1][iy+1][iz+1];\n\n  d00=p100-p000;\n  d01=p101-p001;\n  d10=p110-p010;\n  d11=p111-p011;\n\n  p00=(int) ((int) d00*ox) + p000;\n  p01=(int) ((int) d01*ox) + p001;\n  p10=(int) ((int) d10*ox) + p010;\n  p11=(int) ((int) d11*ox) + p011;\n  d0=p10-p00;\n  d1=p11-p01;\n  p0=(int) ((int) d0*oy) + p00;\n  p1=(int) ((int) d1*oy) + p01;\n  d=p1-p0;\n\n  return (int) ((int) d*oz) + p0;\n}\n\ncolor marble_texture(vector * hit, texture * tex, ray * ry) {\n  flt i,d;\n  flt x,y,z;\n  color col;\n \n  x=hit->x;\n  y=hit->y; \n  z=hit->z;\n\n  x=x * 1.0;\n\n  d=x + 0.0006 * Noise(x, (y * 1.0), (z * 1.0));\n  d=d*(((int) d) % 25);\n  i=0.0 + 0.10 * fabs(d - 10.0 - 20.0 * ((int) d * 0.05));\n  if (i > 1.0) i=1.0;\n  if (i < 0.0) i=0.0;  \n\n/*\n  col.r=i * tex->col.r;\n  col.g=i * tex->col.g;\n  col.b=i * tex->col.b;\n*/\n\n  col.r = (1.0 + sin(i * 6.28)) / 2.0;\n  col.g = (1.0 + sin(i * 16.28)) / 2.0;\n  col.b = (1.0 + cos(i * 30.28)) / 2.0;\n\n  return col;      \n}\n\n\ncolor gnoise_texture(vector * hit, texture * tex, ray * ry) {\n  color col;\n  flt f;\n\n  f=Noise((hit->x - tex->ctr.x), \n          (hit->y - tex->ctr.y), \n\t  (hit->z - tex->ctr.z));\n\n  if (f < 0.01) f=0.01;\n  if (f > 1.0) f=1.0;\n\n  col.r=tex->col.r * f;\n  col.g=tex->col.g * f;\n  col.b=tex->col.b * f;\n\n  return col;\n}\n\nvoid InitTextures(void) {\n  InitNoise();\n  ResetImages();\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/texture.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * texture.h This file contains all of the includes and defines for the texture \n * mapping part of the shader.\n *\n *  $Id: texture.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nvoid InitTextures(void);\ncolor     standard_texture(vector *, texture *, ray *);\ncolor    image_cyl_texture(vector *, texture *, ray *);\ncolor image_sphere_texture(vector *, texture *, ray *);\ncolor  image_plane_texture(vector *, texture *, ray *);\ncolor      checker_texture(vector *, texture *, ray *);\ncolor  cyl_checker_texture(vector *, texture *, ray *);\ncolor         grit_texture(vector *, texture *, ray *);\ncolor         wood_texture(vector *, texture *, ray *);\ncolor       marble_texture(vector *, texture *, ray *);\ncolor       gnoise_texture(vector *, texture *, ray *);\nint Noise(flt, flt, flt);\nvoid InitTextures(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/tgafile.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * tgafile.cpp - This file contains the code to write 24 bit targa files...\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"ui.h\"\n#include \"imageio.h\"\n#include \"tgafile.h\"\n\nvoid createtgafile(char *name, unsigned short width, unsigned short height) {\n  int filesize;\n  FILE * ofp;\n\n  filesize = 3*width*height + 18 - 10;\n  \n  if (name==NULL) \n    exit(1);\n  else {\n    ofp=fopen(name, \"w+b\");\n    if (ofp == NULL) {\n      char msgtxt[2048];\n      sprintf(msgtxt, \"Cannot create %s for output!\", name);\n      rt_ui_message(MSG_ERR, msgtxt);\n      rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n      exit(1);\n    } \n\n    fputc(0, ofp); /* IdLength      */\n    fputc(0, ofp); /* ColorMapType  */\n    fputc(2, ofp); /* ImageTypeCode */\n    fputc(0, ofp); /* ColorMapOrigin, low byte */\n    fputc(0, ofp); /* ColorMapOrigin, high byte */\n    fputc(0, ofp); /* ColorMapLength, low byte */\n    fputc(0, ofp); /* ColorMapLength, high byte */\n    fputc(0, ofp); /* ColorMapEntrySize */\n    fputc(0, ofp); /* XOrigin, low byte */\n    fputc(0, ofp); /* XOrigin, high byte */\n    fputc(0, ofp); /* YOrigin, low byte */\n    fputc(0, ofp); /* YOrigin, high byte */\n    fputc((width & 0xff),         ofp); /* Width, low byte */\n    fputc(((width >> 8) & 0xff),  ofp); /* Width, high byte */\n    fputc((height & 0xff),        ofp); /* Height, low byte */\n    fputc(((height >> 8) & 0xff), ofp); /* Height, high byte */\n    fputc(24, ofp);   /* ImagePixelSize */\n    fputc(0x20, ofp); /* ImageDescriptorByte 0x20 == flip vertically */\n\n    fseek(ofp, filesize, 0);\n    fprintf(ofp, \"9876543210\"); \n\n    fclose(ofp);\n  } \n}    \n\nvoid * opentgafile(char * filename) {\n  FILE * ofp;\n\n  ofp=fopen(filename, \"r+b\");\n  if (ofp == NULL) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Cannot open %s for output!\", filename);\n    rt_ui_message(MSG_ERR, msgtxt);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n    exit(1);\n  } \n\n  return ofp;\n} \n\nvoid writetgaregion(void * voidofp, \n                    int iwidth, int iheight,\n                    int startx, int starty, \n                    int stopx, int stopy, char * buffer) {\n  int y, totalx, totaly;\n  char * bufpos;\n  long filepos;\n  size_t numbytes;\n  FILE * ofp = (FILE *) voidofp;\n \n  totalx = stopx - startx + 1;\n  totaly = stopy - starty + 1;\n\n  for (y=0; y<totaly; y++) {\n    bufpos=buffer + (totalx*3)*(totaly-y-1);\n    filepos=18 + iwidth*3*(iheight - starty - totaly + y + 1) + (startx - 1)*3;\n\n    if (filepos >= 18) {\n      fseek(ofp, filepos, 0); \n      numbytes = fwrite(bufpos, 3, totalx, ofp);\n\n      if (numbytes != totalx) {\n        char msgtxt[256];\n        sprintf(msgtxt, \"File write problem, %d bytes written.\", (int)numbytes);\n        rt_ui_message(MSG_ERR, msgtxt);\n      }\n    }\n    else {\n      rt_ui_message(MSG_ERR, \"writetgaregion: file ptr out of range!!!\\n\");\n      return;  /* don't try to continue */\n    }\n  }\n}\n\n\nint readtga(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  int format, width, height, w1, w2, h1, h2, depth, flags;\n  int imgsize, i, tmp;\n  size_t bytesread;\n  FILE * ifp;\n\n  ifp=fopen(name, \"r\");  \n  if (ifp==NULL) {\n    return IMAGEBADFILE; /* couldn't open the file */\n  }\n\n  /* read the targa header */\n  getc(ifp); /* ID length */\n  getc(ifp); /* colormap type */\n  format = getc(ifp); /* image type */\n  getc(ifp); /* color map origin */\n  getc(ifp); /* color map origin */\n  getc(ifp); /* color map length */\n  getc(ifp); /* color map length */\n  getc(ifp); /* color map entry size */\n  getc(ifp); /* x origin */\n  getc(ifp); /* x origin */\n  getc(ifp); /* y origin */\n  getc(ifp); /* y origin */\n  w1 = getc(ifp); /* width (low) */\n  w2 = getc(ifp); /* width (hi) */\n  h1 = getc(ifp); /* height (low) */\n  h2 = getc(ifp); /* height (hi) */\n  depth = getc(ifp); /* image pixel size */\n  flags = getc(ifp); /* image descriptor byte */\n\n  if ((format != 2) || (depth != 24)) {\n    fclose(ifp);\n    return IMAGEUNSUP; /* unsupported targa format */\n  }\n    \n\n  width = ((w2 << 8) | w1);\n  height = ((h2 << 8) | h1);\n\n  imgsize = 3 * width * height;\n  *imgdata = (unsigned char *)rt_getmem(imgsize);\n  bytesread = fread(*imgdata, 1, imgsize, ifp);\n  fclose(ifp);\n\n  /* flip image vertically */\n  if (flags == 0x20) {\n    int rowsize = 3 * width;\n    unsigned char * copytmp;\n\n    copytmp = (unsigned char *)malloc(rowsize);\n\n    for (i=0; i<height / 2; i++) {\n      memcpy(copytmp, &((*imgdata)[rowsize*i]), rowsize);\n      memcpy(&(*imgdata)[rowsize*i], &(*imgdata)[rowsize*(height - 1 - i)], rowsize);\n      memcpy(&(*imgdata)[rowsize*(height - 1 - i)], copytmp, rowsize);\n    }\n\n    free(copytmp);       \n  }\n\n\n  /* convert from BGR order to RGB order */\n  for (i=0; i<imgsize; i+=3) {\n    tmp = (*imgdata)[i]; /* Blue */\n    (*imgdata)[i] = (*imgdata)[i+2]; /* Red */\n    (*imgdata)[i+2] = tmp; /* Blue */\n  }\n\n  *xres = width;\n  *yres = height;\n\n  if (bytesread != imgsize) \n    return IMAGEREADERR;\n\n  return IMAGENOERR;\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/tgafile.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * tgafile.h - this file contains defines and structures for tgafile.c\n *\n *  $Id: tgafile.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n/* declare other functions */\nvoid createtgafile(char *, unsigned short, unsigned short);\nvoid * opentgafile(char *);\nvoid writetgaregion(void *, int, int, int, int, int, int, char *);\n\nint readtga(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * trace.h - This file contains the declarations and defines for the trace module\n *\n *   $Id: trace.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nextern char *global_buffer;\n\ntypedef struct {\n        int tid;\n        int nthr;\n        scenedef scene;\n        char * buffer;\n        int startx;\n        int stopx;\n        int starty;\n        int stopy;\n        } thr_parms;\n\ntypedef struct {\n        int startx;\n        int stopx;\n        int starty;\n        int stopy;\n        } patch;\n\ntypedef struct {\n\tvoid * tga;\n\tint iwidth;\n\tint iheight;\n\tint startx;\n\tint starty;\n\tint stopx;\n\tint stopy;\n\tchar * buffer;\n\t} thr_io_parms;\n\ncolor trace(ray *);\n\nvoid * thread_trace(thr_parms * parms);\n\nvoid thread_trace1(thr_parms *, patch *, int depth); \nvoid thread_trace2(thr_parms *, patch *); \n\nvoid * thread_io(void *);\n\nvoid trace_shm(scenedef, /*char *,*/ int, int, int, int);\n\nvoid trace_region(scenedef, void *, int, int, int, int);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace.serial.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                sample.d.x+=((std::rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((std::rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((std::rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n    return video->get_color(R, G, B);\n\n}\n\nstatic void parallel_thread (void)\n{\n    // thread-local storage\n    unsigned int serial = 1;\n    unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n    unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n    memset(local_mbox,0,mboxsize);\n\n    for (int y = starty; y < stopy; y++) { {\n        drawing_area drawing(startx, totaly-y, stopx-startx, 1);\n        for (int x = startx; x < stopx; x++) {\n            color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n            drawing.put_pixel(c);\n        } }\n        if(!video->next_frame()) return;\n    }\n}\n\nvoid * thread_trace(thr_parms * parms)\n{\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres-1;\n\n    parallel_thread ();\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace.simple.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary;\n    color col;\n    int R,G,B;\n    intersectstruct local_intersections;\n    /* end private */\n\n    primary = camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;\n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col = trace(&primary);\n    serial = primary.serial;\n\n    /* Handle overexposure and underexposure here... */\n    R = (int)(col.r * 255);\n    if ( R > 255 ) R = 255;\n    else if ( R < 0 ) R = 0;\n\n    G = (int)(col.g * 255);\n    if ( G > 255 ) G = 255;\n    else if ( G < 0 ) G = 0;\n\n    B = (int)(col.b * 255);\n    if ( B > 255 ) B = 255;\n    else if ( B < 0 ) B = 0;\n\n    return video->get_color(R, G, B);\n}\n\n#if DO_ITT_NOTIFY\n#include\"ittnotify.h\"\n#endif\n\n#define RUNTIME_SERIAL 1\n#define RUNTIME_OPENMP 2\n#define RUNTIME_CILK   3\n#define RUNTIME_TBB    4\n\n#ifndef RUNTIME\n#define RUNTIME RUNTIME_TBB\n#endif\n\n#if RUNTIME == RUNTIME_OPENMP\n#include <omp.h>\n#elif RUNTIME == RUNTIME_TBB\n#include <tbb/tbb.h>\n#endif\n\nstatic void parallel_thread(void)\n{\n    unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n#if RUNTIME == RUNTIME_SERIAL\n    for ( int y = starty; y < stopy; y++ )\n#elif RUNTIME == RUNTIME_OPENMP\n#pragma omp parallel for\n    for ( int y = starty; y < stopy; y++ )\n#elif RUNTIME == RUNTIME_CILK\n    _Cilk_for(int y = starty; y < stopy; y++)\n#elif RUNTIME == RUNTIME_TBB\n    tbb::parallel_for(starty, stopy, [mboxsize] (int y)\n#endif\n    {\n        unsigned int serial = 1;\n        unsigned int local_mbox[mboxsize];\n        memset(local_mbox, 0, mboxsize);\n        drawing_area drawing(startx, totaly - y, stopx - startx, 1);\n        for ( int x = startx; x < stopx; x++ ) {\n            color_t c = render_one_pixel(x, y, local_mbox, serial, startx, stopx, starty, stopy);\n            drawing.put_pixel(c);\n        }\n        video->next_frame();\n    }\n#if RUNTIME == RUNTIME_TBB\n    );\n#endif\n}\n\nvoid * thread_trace(thr_parms * parms)\n{\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres - 1;\n\n#if DO_ITT_NOTIFY\n    __itt_resume();\n#endif\n    parallel_thread();\n#if DO_ITT_NOTIFY\n    __itt_pause();\n#endif\n\n    return(NULL);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace.tbb.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\n#ifdef MARK_RENDERING_AREA\n\n// rgb colors list for coloring image by each thread\nstatic const float inner_alpha = 0.3;\nstatic const float border_alpha = 0.5;\n#define NUM_COLORS 24\nstatic int colors[NUM_COLORS][3] = {\n    {255,110,0},    {220,254,0},    {102,254,0},    {0,21,254},     {97,0,254},     {254,30,0},\n    {20,41,8},      {144,238,38},   {184,214,139},  {28,95,20},     {139,173,148},  {188,228,183},\n    {145,47,56},    {204,147,193},  {45,202,143},   {204,171,143},  {143,160,204},  {220,173,3},\n    {1,152,231},    {79,235,237},   {52,193,72},    {67,136,151},   {78,87,179},    {143,255,9},\n};\n\n#include \"tbb/atomic.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n// storage and counter for thread numbers in order of first task run\ntypedef tbb::enumerable_thread_specific< int > thread_id_t;\nthread_id_t thread_ids (-1);\ntbb::atomic<int> thread_number;\n\n#endif\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/blocked_range2d.h\"\n\nstatic tbb::spin_mutex MyMutex, MyMutex2;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy\n#ifdef MARK_RENDERING_AREA\n                                 , int *blend, float alpha\n#endif\n)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                tbb::spin_mutex::scoped_lock lock (MyMutex);\n                sample.d.x+=((rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n#ifdef MARK_RENDERING_AREA\n    R = int((1.0 - alpha) * R + alpha * blend[0]);\n    G = int((1.0 - alpha) * G + alpha * blend[1]);\n    B = int((1.0 - alpha) * B + alpha * blend[2]);\n#endif\n    \n    return video->get_color(R, G, B);\n}\n\nclass parallel_task {\npublic:\n    void operator() (const tbb::blocked_range2d<int> &r) const\n    {\n       // task-local storage\n        unsigned int serial = 1;\n        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n        memset(local_mbox,0,mboxsize);\n#ifdef MARK_RENDERING_AREA\n        // compute thread number while first task run\n        thread_id_t::reference thread_id = thread_ids.local();\n        if (thread_id == -1) thread_id = thread_number++;\n        // choose thread color\n        int pos = thread_id % NUM_COLORS;\n        if(video->running) {\n            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());\n            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {\n                drawing.set_pos(0, drawing.size_y-i);\n                for (int x = r.cols().begin(); x != r.cols().end(); x++) {\n                    int d = (y % 3 == 0) ? 2 : 1;\n                    drawing.put_pixel(video->get_color(colors[pos][0]/d, colors[pos][1]/d, colors[pos][2]/d));\n                }\n            }\n        }\n#endif\n        if(video->next_frame()) {\n            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());\n            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {\n                drawing.set_pos(0, drawing.size_y-i);\n                for (int x = r.cols().begin(); x != r.cols().end(); x++) {\n#ifdef MARK_RENDERING_AREA\n                    float alpha = y==r.rows().begin()||y==r.rows().end()-1||x==r.cols().begin()||x==r.cols().end()-1\n                                ? border_alpha : inner_alpha;\n                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy, colors[pos], alpha);\n#else\n                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n#endif\n                    drawing.put_pixel(c);\n                }\n            }\n        }\n    }\n\n    parallel_task () {}\n};\n\nvoid * thread_trace(thr_parms * parms)\n{\n#if !WIN8UI_EXAMPLE\n    int n, nthreads = tbb::task_scheduler_init::automatic;\n    char *nthreads_str = getenv (\"TBB_NUM_THREADS\");\n    if (nthreads_str && (sscanf (nthreads_str, \"%d\", &n) > 0) && (n > 0)) nthreads = n;\n    tbb::task_scheduler_init init (nthreads);\n#endif\n\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres;\n#ifdef MARK_RENDERING_AREA\n    thread_ids.clear();\n#endif\n\n    int grain_size = 8;\n//WIN8UI does not support getenv() function so using auto_partitioner unconditionally\n#if !WIN8UI_EXAMPLE\n    int g;\n    char *grain_str = getenv (\"TBB_GRAINSIZE\");\n    if (grain_str && (sscanf (grain_str, \"%d\", &g) > 0) && (g > 0)) grain_size = g;\n    char *sched_str = getenv (\"TBB_PARTITIONER\");\n    static tbb::affinity_partitioner g_ap; // reused across calls to thread_trace\n    if ( sched_str && !strncmp(sched_str, \"aff\", 3) )\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), g_ap);\n    else if ( sched_str && !strncmp(sched_str, \"simp\", 4) )\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::simple_partitioner());\n    else\n#endif\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::auto_partitioner());\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace.tbb1d.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic tbb::spin_mutex MyMutex, MyMutex2;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                tbb::spin_mutex::scoped_lock lock (MyMutex);\n                sample.d.x+=((rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n    return video->get_color(R, G, B);\n\n}\n\nclass parallel_task {\npublic:\n    void operator() (const tbb::blocked_range<int> &r) const\n    {\n        // task-local storage\n        unsigned int serial = 1;\n        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n        memset(local_mbox,0,mboxsize);\n\n        for (int y = r.begin(); y != r.end(); ++y) { {\n            drawing_area drawing(startx, totaly-y, stopx-startx, 1);\n            for (int x = startx; x < stopx; x++) {\n                color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n                drawing.put_pixel(c);\n            } }\n            if(!video->next_frame()) return;\n        }\n    }\n\n    parallel_task () {}\n};\n\nvoid * thread_trace(thr_parms * parms)\n{\n    int n, nthreads = tbb::task_scheduler_init::automatic;\n    char *nthreads_str = getenv (\"TBB_NUM_THREADS\");\n    if (nthreads_str && (sscanf (nthreads_str, \"%d\", &n) > 0) && (n > 0)) nthreads = n;\n    tbb::task_scheduler_init init (nthreads);\n\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres-1;\n\n    int g, grain_size = 1;\n    char *grain_str = getenv (\"TBB_GRAINSIZE\");\n    if (grain_str && (sscanf (grain_str, \"%d\", &g) > 0) && (g > 0)) grain_size = g;\n    char *sched_str = getenv (\"TBB_PARTITIONER\");\n    static tbb::affinity_partitioner g_ap;\n    if ( sched_str && !strncmp(sched_str, \"aff\", 3) )\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), g_ap );\n    else if ( sched_str && !strncmp(sched_str, \"simp\", 4) )\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::simple_partitioner() );\n    else\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::auto_partitioner() );\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/trace_rest.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * trace.cpp - This file contains the functions for firing primary rays\n *           and handling subsequent calculations\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\ncolor trace(ray * primary) {\n  if (primary->depth > 0) {\n    VNorm(&primary->d);\n    reset_intersection(primary->intstruct);\n    intersect_objects(primary);\n    return shader(primary);\n  }\n\n  /* if ray is truncated, return the background as its color */\n  return primary->scene->background;\n}\n\nvoid * thread_io(void * parms) {\n  thr_io_parms p;\n\n  p= *((thr_io_parms *) parms);\n  writetgaregion(p.tga, p.iwidth, p.iheight, p.startx, p.starty, \n\t\tp.stopx, p.stopy, p.buffer);\n  free(p.buffer); /* free the buffer once we are done with it.. */\n  free(parms);\n\n  return(NULL);\n}\n\nvoid trace_shm(scenedef scene, /*char * buffer,  */ int startx, int stopx, int starty, int stopy) {\n\n  thr_parms * parms;\n\n  parms = (thr_parms *) rt_getmem(sizeof(thr_parms));  \n\n  parms->tid=0;\n  parms->nthr=1;\n  parms->scene=scene;\n  parms->startx=startx;\n  parms->stopx=stopx;\n  parms->starty=starty;\n  parms->stopy=stopy;\n\n  thread_trace(parms);\n\n  rt_freemem(parms);\n}\n\nvoid trace_region(scenedef scene, void * tga, int startx, int starty, int stopx, int stopy) {\n\n  if (scene.verbosemode) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Node %3d tracing region  %4d, %4d  --->  %4d, %4d \\n\", 0, startx,starty,stopx,stopy);\n    rt_ui_message(MSG_0, msgtxt);\n  }\n\n  trace_shm(scene, /*buffer,*/ startx, stopx, starty, stopy);\n/* not used now\n  writetgaregion(tga, scene.hres, scene.vres, \n                 startx, starty, stopx, stopy, global_buffer);\n\n  if (scene.rawimage != NULL) {\n    int x, y;\n    int totalx = stopx - startx + 1;\n    for (y=starty; y<=stopy; y++) {\n      for (x=0; x<scene.hres; x++) {\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3] = global_buffer[(y-starty)*totalx*3 + x*3 + 2];\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +1] = global_buffer[(y-starty)*totalx*3 + x*3 + 1];\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +2] = global_buffer[(y-starty)*totalx*3 + x*3];\n      }\n    }\n  }\n*/\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/triangle.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * triangle.cpp - This file contains the functions for dealing with triangles.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"vector.h\"\n#include \"macros.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define TRIANGLE_PRIVATE\n#include \"triangle.h\"\n\nstatic object_methods tri_methods = {\n  (void (*)(void *, void *))(tri_intersect),\n  (void (*)(void *, void *, void *, void *))(tri_normal),\n  tri_bbox, \n  free \n};\n\nstatic object_methods stri_methods = {\n  (void (*)(void *, void *))(tri_intersect),\n  (void (*)(void *, void *, void *, void *))(stri_normal),\n  tri_bbox, \n  free \n};\n\nobject * newtri(void * tex, vector v0, vector v1, vector v2) {\n  tri * t;\n  vector edge1, edge2, edge3;\n\n  VSub(&v1, &v0, &edge1);\n  VSub(&v2, &v0, &edge2);\n  VSub(&v2, &v1, &edge3);\n\n  /* check to see if this will be a degenerate triangle before creation */\n  if ((VLength(&edge1) >= EPSILON) && \n      (VLength(&edge2) >= EPSILON) && \n      (VLength(&edge3) >= EPSILON)) {\n\n    t=(tri *) rt_getmem(sizeof(tri));\n\n    t->nextobj = NULL;\n    t->methods = &tri_methods;\n\n    t->tex = (texture *)tex;\n    t->v0 = v0;\n    t->edge1 = edge1;\n    t->edge2 = edge2;\n \n    return (object *) t;\n  }\n  \n  return NULL; /* was a degenerate triangle */\n}\n\n\nobject * newstri(void * tex, vector v0, vector v1, vector v2,\n                           vector n0, vector n1, vector n2) {\n  stri * t;\n  vector edge1, edge2, edge3;\n\n  VSub(&v1, &v0, &edge1);\n  VSub(&v2, &v0, &edge2);\n  VSub(&v2, &v1, &edge3);\n\n  /* check to see if this will be a degenerate triangle before creation */\n  if ((VLength(&edge1) >= EPSILON) && \n      (VLength(&edge2) >= EPSILON) &&\n      (VLength(&edge3) >= EPSILON)) {\n\n    t=(stri *) rt_getmem(sizeof(stri));\n\n    t->nextobj = NULL;\n    t->methods = &stri_methods;\n \n    t->tex = (texture *)tex;\n    t->v0 = v0;\n    t->edge1 = edge1;\n    t->edge2 = edge2;\n    t->n0 = n0;\n    t->n1 = n1;\n    t->n2 = n2;\n\n    return (object *) t;\n  }\n\n  return NULL; /* was a degenerate triangle */\n}\n\n#define CROSS(dest,v1,v2) \\\n          dest.x=v1.y*v2.z-v1.z*v2.y; \\\n          dest.y=v1.z*v2.x-v1.x*v2.z; \\\n          dest.z=v1.x*v2.y-v1.y*v2.x;\n\n#define DOT(v1,v2) (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)\n\n#define SUB(dest,v1,v2) \\\n          dest.x=v1.x-v2.x; \\\n          dest.y=v1.y-v2.y; \\\n          dest.z=v1.z-v2.z;\n\nstatic int tri_bbox(void * obj, vector * min, vector * max) {\n  tri * t = (tri *) obj;\n  vector v1, v2;\n\n  VAdd(&t->v0, &t->edge1, &v1); \n  VAdd(&t->v0, &t->edge2, &v2); \n\n  min->x = MYMIN( t->v0.x , MYMIN( v1.x , v2.x ));\n  min->y = MYMIN( t->v0.y , MYMIN( v1.y , v2.y ));\n  min->z = MYMIN( t->v0.z , MYMIN( v1.z , v2.z ));\n\n  max->x = MYMAX( t->v0.x , MYMAX( v1.x , v2.x ));\n  max->y = MYMAX( t->v0.y , MYMAX( v1.y , v2.y ));\n  max->z = MYMAX( t->v0.z , MYMAX( v1.z , v2.z ));\n\n  return 1;\n}\n\nstatic void tri_intersect(tri * trn, ray * ry) {\n  vector tvec, pvec, qvec;\n  flt det, inv_det, t, u, v;\n\n  /* begin calculating determinant - also used to calculate U parameter */\n  CROSS(pvec, ry->d, trn->edge2);\n\n  /* if determinant is near zero, ray lies in plane of triangle */\n  det = DOT(trn->edge1, pvec);\n\n   if (det > -EPSILON && det < EPSILON)\n     return;\n\n   inv_det = 1.0 / det;\n\n   /* calculate distance from vert0 to ray origin */\n   SUB(tvec, ry->o, trn->v0);\n\n   /* calculate U parameter and test bounds */\n   u = DOT(tvec, pvec) * inv_det;\n   if (u < 0.0 || u > 1.0)\n     return;\n\n   /* prepare to test V parameter */\n   CROSS(qvec, tvec, trn->edge1);\n\n   /* calculate V parameter and test bounds */\n   v = DOT(ry->d, qvec) * inv_det;\n   if (v < 0.0 || u + v > 1.0)\n     return;\n\n   /* calculate t, ray intersects triangle */\n   t = DOT(trn->edge2, qvec) * inv_det;\n\n  add_intersection(t,(object *) trn, ry);\n}\n\n\nstatic void tri_normal(tri * trn, vector  * pnt, ray * incident, vector * N) {\n\n  CROSS((*N), trn->edge1, trn->edge2);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  }\n}\n\nstatic void stri_normal(stri * trn, vector  * pnt, ray * incident, vector * N) {\n  flt U, V, W, lensqr;\n  vector P, tmp, norm;\n  \n  CROSS(norm, trn->edge1, trn->edge2);\n  lensqr = DOT(norm, norm); \n\n  VSUB((*pnt), trn->v0, P);\n\n  CROSS(tmp, P, trn->edge2);\n  U = DOT(tmp, norm) / lensqr;   \n\n  CROSS(tmp, trn->edge1, P);\n  V = DOT(tmp, norm) / lensqr;   \n\n  W = 1.0 - (U + V);\n\n  N->x = W*trn->n0.x + U*trn->n1.x + V*trn->n2.x;\n  N->y = W*trn->n0.y + U*trn->n1.y + V*trn->n2.y;\n  N->z = W*trn->n0.z + U*trn->n1.z + V*trn->n2.z;\n\n  VNorm(N);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/triangle.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * triangle.h - This file contains the defines for triangles etc.\n *\n *  $Id: triangle.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newtri(void *, vector, vector, vector);\nobject * newstri(void *, vector, vector, vector, vector, vector, vector);\n\n#ifdef TRIANGLE_PRIVATE\n\n#define TRIXMAJOR 0\n#define TRIYMAJOR 1\n#define TRIZMAJOR 2\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector edge2;\n  vector edge1;\n  vector v0;\n} tri; \n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector edge2;\n  vector edge1;\n  vector v0;\n  vector n0;\n  vector n1;\n  vector n2;\n} stri; \n\nstatic int tri_bbox(void * obj, vector * min, vector * max);\n\nstatic void tri_intersect(tri *, ray *);\n\nstatic void tri_normal(tri *, vector *, ray *, vector *);\nstatic void stri_normal(stri *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/types.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#if __MINGW32__\n#include <malloc.h>\n#elif _WIN32\n#include <malloc.h>\n#define alloca _alloca\n#elif __FreeBSD__||__NetBSD__\n#include <stdlib.h>\n#else\n#include <alloca.h>\n#endif\n\n/* \n * types.h - This file contains all of the type definitions for the raytracer\n *\n *  $Id: types.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n#define MAXOCTNODES 25       /* subdivide octants /w > # of children */\n#define SPEPSILON 0.000001   /* amount to crawl down a ray           */\n#define EPSILON   0.000001   /* amount to crawl down a ray           */\n#define TWOPI 6.2831853      /* guess                                */\n#define FHUGE 1e18           /* biggest fp number we can represent   */\n\n/* Maximum internal table sizes */\n/* Use prime numbers for best memory system performance */\n#define INTTBSIZE 1024       /* maximum intersections we can hold    */ \n#define MAXLIGHTS 39         /* maximum number of lights in a scene  */\n#define MAXIMGS   39         /* maxiumum number of distinct images   */\n#define RPCQSIZE  113\t     /* number of RPC messages to queue      */\n\n/* Parameter values for rt_boundmode() */\n#define RT_BOUNDING_DISABLED 0  /* spatial subdivision/bounding disabled */\n#define RT_BOUNDING_ENABLED  1  /* spatial subdivision/bounding enabled  */\n\n/* Parameter values for rt_displaymode() */\n#define RT_DISPLAY_DISABLED  0  /* video output enabled  */\n#define RT_DISPLAY_ENABLED   1  /* video output disabled */\n\n/* Ray flags */\n#define RT_RAY_REGULAR   1\n#define RT_RAY_SHADOW    2\n#define RT_RAY_BOUNDED   4\n#define RT_RAY_FINISHED  8\n\n#ifdef USESINGLEFLT\ntypedef float flt;   /* generic floating point number, using float */\n#else\ntypedef double flt;  /* generic floating point number, using double */\n#endif\n\ntypedef unsigned char byte; /* 1 byte */\ntypedef signed int word;    /* 32 bit integer */\n\ntypedef struct {\n   flt x;        /* X coordinate value */\n   flt y;        /* Y coordinate value */\n   flt z;        /* Z coordinate value */\n} vector;\n\ntypedef struct {\n   flt r;        /* Red component   */\n   flt g;        /* Green component */\n   flt b;        /* Blue component  */\n} color;\n\ntypedef struct {\n   byte r;       /* Red component   */\n   byte g;       /* Green component */\n   byte b;       /* Blue component  */\n} bytecolor;\n\ntypedef struct {         /* Raw 24 bit image structure, for tga, ppm etc */\n  int loaded;            /* image memory residence flag    */\n  int xres;              /* image X axis size              */\n  int yres;              /* image Y axis size              */\n  int bpp;               /* image bits per pixel           */\n  char name[96];         /* image filename (with path)     */\n  unsigned char * data;  /* pointer to raw byte image data */\n} rawimage;\n\ntypedef struct {         /* Scalar Volume Data */\n  int loaded;            /* Volume data memory residence flag */\n  int xres;\t\t /* volume X axis size                */\n  int yres;\t\t /* volume Y axis size                */\n  int zres;\t\t /* volume Z axis size                */\n  flt opacity;\t\t /* opacity per unit length           */\n  char name[96];         /* Volume data filename              */\n  unsigned char * data;  /* pointer to raw byte volume data   */\n} scalarvol;\n \ntypedef struct {\n  color (* texfunc)(void *, void *, void *);\n  int shadowcast;  /* does the object cast a shadow */\n  int islight;\t   /* light flag... */\n  color col;       /* base object color */\n  flt ambient;     /* ambient lighting */\n  flt diffuse; \t   /* diffuse reflection */\n  flt phong;       /* phong specular highlights */\n  flt phongexp;    /* phong exponent/shininess factor */\n  int phongtype;   /* phong type: 0 == plastic, nonzero == metal */\n  flt specular;    /* specular reflection */\n  flt opacity;     /* how opaque the object is */ \n  vector ctr;      /* origin of texture */\n  vector rot;      /* rotation of texture about origin */\n  vector scale;    /* scale of texture in x,y,z */\n  vector uaxs;\t   /* planar map U axis */\n  vector vaxs;\t   /* planar map V axis */\n  void * img;      /* pointer to image for image mapping */\n  void * obj;      /* object ptr, hack for volume shaders for now */\n} texture;\n\ntypedef struct {\n  void (* intersect)(void *, void *);              /* intersection func ptr  */\n  void (* normal)(void *, void *, void *, void *); /* normal function ptr    */\n  int (* bbox)(void *, vector *, vector *);        /* return the object bbox */\n  void (* free)(void *);                           /* free the object        */\n} object_methods;\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */ \n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n} object; \n\ntypedef struct {\n  object * obj;  /* to object we hit                        */ \n  flt t;         /* distance along the ray to the hit point */\n} intersection;\n\ntypedef struct {\n  int num;                      /* number of intersections    */\n  intersection closest;         /* closest intersection > 0.0 */\n  intersection list[INTTBSIZE]; /* list of all intersections  */ \n} intersectstruct;\n\ntypedef struct {\n  char outfilename[200];     /* name of the output image                */\n  unsigned char * rawimage;  /* pointer to a raw rgb image to be stored */\n  int hres;                  /* horizontal output image resolution      */\n  int vres;                  /* vertical output image resolution        */\n  flt aspectratio;           /* aspect ratio of output image            */\n  int raydepth;              /* maximum recursion depth                 */\n  int antialiasing;          /* number of antialiasing rays to fire     */\n  int verbosemode;           /* verbose reporting flag                  */\n  int boundmode;             /* automatic spatial subdivision flag      */\n  int boundthresh;           /* threshold number of subobjects          */\n  int displaymode;           /* run-time X11 display flag               */\n  vector camcent;            /* center of the camera in world coords    */\n  vector camviewvec;         /* view direction of the camera  (Z axis)  */\n  vector camrightvec;        /* right axis for the camera     (X axis)  */\n  vector camupvec;           /* up axis for the camera        (Y axis)  */\n  flt camzoom;               /* zoom factor for the camera              */\n  color background;          /* scene background color                  */\n} scenedef;\n\ntypedef struct {\n   intersectstruct * intstruct; /* ptr to thread's intersection data       */ \n   unsigned int depth;   /* levels left to recurse.. (maxdepth - curdepth) */\n   unsigned int flags;   /* ray flags, any special treatment needed etc    */\n   unsigned int serial;  /* serial number of the ray                       */\n   unsigned int * mbox;  /* mailbox array for optimizing intersections     */\n   vector o;             /* origin of the ray X,Y,Z                        */\n   vector d;             /* normalized direction of the ray                */\n   flt maxdist;          /* maximum distance to search for intersections   */\n   vector s;\t\t /* startpoint of the ray (may differ from origin  */\n   vector e;             /* endpoint of the ray if bounded                 */\n   scenedef * scene;     /* pointer to the scene, for global parms such as */\n                         /* background colors etc                          */\n} ray;\n\ntypedef struct {\n  int type;      /* RPC call type            */\n  int from;      /* Sending processor        */\n  int len;       /* length of parms in bytes */\n  void * parms;  /* Parameters to RPC        */\n} rpcmsg;\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ui.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * ui.cpp - Contains functions for dealing with user interfaces\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"util.h\"\n#include \"ui.h\"\n\nstatic void (* rt_static_ui_message) (int, const char *) = NULL;\nstatic void (* rt_static_ui_progress) (int) = NULL;\nstatic int (* rt_static_ui_checkaction) (void) = NULL;\n\nextern bool silent_mode;\n\nvoid set_rt_ui_message(void (* func) (int, const char *)) {\n  rt_static_ui_message = func;\n}\n\nvoid set_rt_ui_progress(void (* func) (int)) {\n  rt_static_ui_progress = func;\n}\n\nvoid rt_ui_message(int level, const char * msg) {\n  if (rt_static_ui_message == NULL) {\n    if ( !silent_mode ) {\n      fprintf(stderr, \"%s\\n\", msg);\n      fflush (stderr);\n    }\n  } else {\n    rt_static_ui_message(level, msg);\n  }\n}\n\nvoid rt_ui_progress(int percent) {\n  if (rt_static_ui_progress != NULL)\n    rt_static_ui_progress(percent);\n  else {\n    if ( !silent_mode ) {\n      fprintf(stderr, \"\\r %3d%% Complete            \\r\", percent);\n      fflush(stderr);\n    }\n  }\n}\n\nint rt_ui_checkaction(void) {\n  if (rt_static_ui_checkaction != NULL) \n    return rt_static_ui_checkaction();\n  else\n    return 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/ui.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * ui.h - defines for user interface functions\n *\n *  $Id: ui.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n/* Different types of message, for levels of verbosity etc */\n#define MSG_0      100\n#define MSG_1      101\n#define MSG_2      102\n#define MSG_3      103\n#define MSG_4      104\n#define MSG_5      105\n#define MSG_ERR    200\n#define MSG_ABORT  300\n\nvoid rt_ui_message(int, const char *);\nvoid rt_ui_progress(int);\nint  rt_ui_checkaction(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/util.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * util.cpp - Contains all of the timing functions for various platforms.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"util.h\"\n#include \"light.h\"\n#include \"global.h\"\n#include \"ui.h\"\n\nvoid rt_finalize(void);\n\n#if !defined( _WIN32 )\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\nvoid rt_sleep(int msec) {\n#if !WIN8UI_EXAMPLE\n    Sleep(msec);\n#else\n    std::chrono::milliseconds sleep_time( msec );\n    std::this_thread::sleep_for( sleep_time );\n#endif\n}\n\ntimer gettimer(void) {\n    return GetTickCount ();\n}\n\nflt timertime(timer st, timer fn) {\n   double ttime, start, end;\n\n   start = ((double) st) / ((double) 1000.00);\n     end = ((double) fn) / ((double) 1000.00);\n   ttime = end - start;\n\n   return ttime;\n}\n#endif  /*  _WIN32  */\n\n/* if we're on a Unix with gettimeofday() we'll use newer timers */\n#if defined( STDTIME )\n  struct timezone tz;\n\ntimer gettimer(void) {\n  timer t;\n  gettimeofday(&t, &tz);\n  return t;\n} \n  \nflt timertime(timer st, timer fn) {\n   double ttime, start, end;\n\n   start = (st.tv_sec+1.0*st.tv_usec / 1000000.0);\n     end = (fn.tv_sec+1.0*fn.tv_usec / 1000000.0);\n   ttime = end - start;\n\n   return ttime;\n}  \n#endif  /*  STDTIME  */\n\n\n\n/* use the old fashioned Unix time functions */\n#if defined( OLDUNIXTIME )\ntimer gettimer(void) {\n  return time(NULL);\n}\n\nflt timertime(timer st, timer fn) {\n  return difftime(fn, st);;\n}\n#endif  /*  OLDUNIXTIME  */\n\n\n\n/* random other helper utility functions */\nint rt_meminuse(void) {\n  return rt_mem_in_use;\n}  \n\nvoid * rt_getmem(unsigned int bytes) {\n  void * mem;\n\n  mem=malloc( bytes );\n  if (mem!=NULL) { \n    rt_mem_in_use += bytes;\n  } \n  else {\n    rtbomb(\"No more memory!!!!\");\n  }\n  return mem;\n}\n\nunsigned int rt_freemem(void * addr) {\n  unsigned int bytes;\n\n  free(addr);\n\n  bytes=0;\n  rt_mem_in_use -= bytes; \n  return bytes;\n}\n\nvoid rtbomb(const char * msg) {\n    rt_ui_message(MSG_ERR, msg);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n\n  rt_finalize();\n  exit(1);\n}\n\nvoid rtmesg(const char * msg) {\n    rt_ui_message(MSG_0, msg);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/util.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * util.h - This file contains defines for the timer functions...\n *\n *  $Id: util.h,v 1.3 2007-02-22 17:54:17 Exp $\n */\n\n#include \"machine.h\"\n\n#if defined( _WIN32 )\n  #include <windows.h>\n  #if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)\n    #define WIN8UI_EXAMPLE 1\n    #include <thread>\n    typedef ULONGLONG timer;\n    #ifdef GetTickCount\n      #undef GetTickCount \n    #endif\n    #define GetTickCount GetTickCount64\n  #else\n    typedef DWORD timer;\n  #endif\n#else\n  #include <sys/time.h>\n  #include <unistd.h>\n  #if defined( STDTIME )\n    typedef timeval timer;\n  #elif defined ( OLDUNIXTIME )\n    typedef time_t timer;\n  #endif  /*  OLDUNIXTIME  */ /*  STDTIME  */\n #endif  /*  _WIN32  */\n\ntimer gettimer(void);\nflt timertime(timer st, timer fn);\nvoid rt_sleep(int);\nint rt_meminuse(void);\nvoid * rt_getmem(unsigned int);\nunsigned int rt_freemem(void *); \nvoid rtbomb(const char *);\nvoid rtmesg(const char *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/vector.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * vector.cpp - This file contains all of the vector arithmetic functions.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n\nflt VDot(vector *a, vector *b) {\n  return (a->x*b->x + a->y*b->y + a->z*b->z);\n}\n\nvoid VCross(vector * a, vector * b, vector * c) {\n  c->x = (a->y * b->z) - (a->z * b->y);\n  c->y = (a->z * b->x) - (a->x * b->z);\n  c->z = (a->x * b->y) - (a->y * b->x);\n}\n\nflt VLength(vector * a) {\n  return (flt) sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));\n}\n\nvoid VNorm(vector * a) {\n  flt len;\n\n  len=sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));\n  if (len != 0.0) {\n    a->x /= len;\n    a->y /= len;\n    a->z /= len;\n  }\n}\n\nvoid VAdd(vector * a, vector * b, vector * c) {\n  c->x = (a->x + b->x);\n  c->y = (a->y + b->y);\n  c->z = (a->z + b->z);\n}\n    \nvoid VSub(vector * a, vector * b, vector * c) {\n  c->x = (a->x - b->x);\n  c->y = (a->y - b->y);\n  c->z = (a->z - b->z);\n}\n\nvoid VAddS(flt a, vector * A, vector * B, vector * C) {\n  C->x = (a * A->x) + B->x;\n  C->y = (a * A->y) + B->y;\n  C->z = (a * A->z) + B->z;\n}\n\nvector Raypnt(ray * a, flt t) {\n  vector temp;\n\n  temp.x=a->o.x + (a->d.x * t);\n  temp.y=a->o.y + (a->d.y * t);\n  temp.z=a->o.z + (a->d.z * t);\n\n  return temp;\n}\n\nvoid VScale(vector * a, flt s) {\n  a->x *= s;\n  a->y *= s;\n  a->z *= s;\n}\n\nvoid ColorAddS(color * a, color * b, flt s) {\n  a->r += b->r * s;\n  a->g += b->g * s;\n  a->b += b->b * s;\n}\n\nvoid ColorAccum(color * a, color * b) {\n  a->r += b->r;\n  a->g += b->g;\n  a->b += b->b;\n}\n\nvoid ColorScale(color * a, flt s) {\n  a->r *= s;\n  a->g *= s;\n  a->b *= s;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/vector.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vector.h - This file contains declarations of vector functions\n *\n *  $Id: vector.h,v 1.2 2007-02-22 17:54:17 Exp $\n */\n\nflt VDot(vector *, vector *);\nvoid VCross(vector *, vector *, vector *);\nflt VLength(vector *);\nvoid VNorm(vector *);\nvoid VAdd(vector *, vector *, vector *);\nvoid VSub(vector *, vector *, vector *);\nvoid VAddS(flt, vector *, vector *, vector *);\nvector Raypnt(ray *, flt);\nvoid VScale(vector * a, flt s); \n\nvoid ColorAddS(color * a, color * b, flt s); \nvoid ColorAccum(color * a, color * b); \nvoid ColorScale(color * a, flt s); \n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/vol.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.cpp - Volume rendering helper routines etc.\n */\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"util.h\"\n#include \"vol.h\"\n#include \"box.h\"\n#include \"trace.h\"\n#include \"ui.h\"\n#include \"light.h\"\n#include \"shade.h\"\n\nint scalarvol_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nvoid * newscalarvol(void * intex, vector min, vector max,\n                    int xs, int ys, int zs, char * fname, scalarvol * invol) {\n  box * bx;\n  texture * tx, * tex;\n  scalarvol * vol;\n\n  tex=(texture *)intex;\n  tex->shadowcast = 0; /* doesn't cast a shadow */\n\n  tx=(texture *)rt_getmem(sizeof(texture));\n\n  /* is the volume data already loaded? */\n  if (invol==NULL) {\n    vol=(scalarvol *)rt_getmem(sizeof(scalarvol));\n    vol->loaded=0;\n    vol->data=NULL;\n  }\n  else\n    vol=invol;\n\n  vol->opacity=tex->opacity;\n  vol->xres=xs;\n  vol->yres=ys;\n  vol->zres=zs;\n  strcpy(vol->name, fname);\n\n  tx->ctr.x = 0.0;\n  tx->ctr.y = 0.0;\n  tx->ctr.z = 0.0;\n  tx->rot   = tx->ctr;\n  tx->scale = tx->ctr;\n  tx->uaxs  = tx->ctr;\n  tx->vaxs  = tx->ctr;\n\n  tx->islight = 0;\n  tx->shadowcast = 0; /* doesn't cast a shadow */\n\n  tx->col = tex->col;\n  tx->ambient  = 1.0;\n  tx->diffuse  = 0.0;\n  tx->specular = 0.0;\n  tx->opacity  = 1.0;\n  tx->img = vol;\n  tx->texfunc = (color(*)(void *, void *, void *))(scalar_volume_texture);\n\n  bx=newbox(tx, min, max);\n  tx->obj = (void *) bx; /* XXX hack! */\n\n  return (void *) bx;\n}\n\n\ncolor VoxelColor(flt scalar) {\n  color col;\n\n  if (scalar > 1.0)\n    scalar = 1.0;\n\n  if (scalar < 0.0)\n    scalar = 0.0;\n\n  if (scalar < 0.25) {\n    col.r = scalar * 4.0;\n    col.g = 0.0;\n    col.b = 0.0;\n  }\n  else {\n    if (scalar < 0.75) {\n      col.r = 1.0;\n      col.g = (scalar - 0.25) * 2.0;\n      col.b = 0.0;\n    }\n    else {\n      col.r = 1.0;\n      col.g = 1.0;\n      col.b = (scalar - 0.75) * 4.0;\n    }\n  }\n\n  return col;\n}\n\ncolor scalar_volume_texture(vector * hit, texture * tex, ray * ry) {\n  color col, col2;\n  box * bx;\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  flt t, tdist, dt, sum, tt;\n  vector pnt, bln;\n  scalarvol * vol;\n  flt scalar, transval;\n  int x, y, z;\n  unsigned char * ptr;\n\n  bx=(box *) tex->obj;\n  vol=(scalarvol *)bx->tex->img;\n\n  col.r=0.0;\n  col.g=0.0;\n  col.b=0.0;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n if (ry->d.y == 0.0) {\n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n  if (tnear < 0.0) tnear=0.0;\n\n  tdist=sqrt((flt) (vol->xres*vol->xres + vol->yres*vol->yres + vol->zres*vol->zres));\n  tt = (vol->opacity / tdist);\n\n  bln.x=fabs(bx->min.x - bx->max.x);\n  bln.y=fabs(bx->min.y - bx->max.y);\n  bln.z=fabs(bx->min.z - bx->max.z);\n\n  dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist;\n  sum=0.0;\n\n  /* move the volume residency check out of loop.. */\n  if (!vol->loaded) {\n    LoadVol(vol);\n    vol->loaded=1;\n  }\n\n  for (t=tnear; t<=tfar; t+=dt) {\n    pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;\n    pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;\n    pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;\n\n    x=(int) ((vol->xres - 1.5) * pnt.x + 0.5);\n    y=(int) ((vol->yres - 1.5) * pnt.y + 0.5);\n    z=(int) ((vol->zres - 1.5) * pnt.z + 0.5);\n\n    ptr = vol->data + ((vol->xres * vol->yres * z) + (vol->xres * y) + x);\n\n    scalar = (flt) ((flt) 1.0 * ((int) ptr[0])) / 255.0;\n\n    sum += tt * scalar;\n\n    transval = tt * scalar;\n\n    col2 = VoxelColor(scalar);\n\n    if (sum < 1.0) {\n      col.r += transval * col2.r;\n      col.g += transval * col2.g;\n      col.b += transval * col2.b;\n      if (sum < 0.0) sum=0.0;\n    }\n    else {\n      sum=1.0;\n    }\n  }\n\n  if (sum < 1.0) {      /* spawn transmission rays / refraction */\n    color transcol;\n\n    transcol = shade_transmission(ry, hit, 1.0 - sum);\n\n    col.r += transcol.r; /* add the transmitted ray  */\n    col.g += transcol.g; /* to the diffuse and       */\n    col.b += transcol.b; /* transmission total..     */\n  }\n\n  return col;\n}\n\nvoid LoadVol(scalarvol * vol) {\n  FILE * dfile;\n  size_t status;\n  char msgtxt[2048];\n\n  dfile=fopen(vol->name, \"r\");\n  if (dfile==NULL) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Vol: can't open %s for input!!! Aborting\\n\",vol->name);\n    rt_ui_message(MSG_ERR, msgtxt);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n    exit(1);\n  }\n\n  sprintf(msgtxt, \"loading %dx%dx%d volume set from %s\",\n      vol->xres, vol->yres, vol->zres, vol->name);\n  rt_ui_message(MSG_0, msgtxt);\n\n  vol->data = (unsigned char *)rt_getmem(vol->xres * vol->yres * vol->zres);\n\n  status=fread(vol->data, 1, (vol->xres * vol->yres * vol->zres), dfile);\n  fclose(dfile);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/src/vol.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.h - Volume rendering definitions etc.\n *\n *\n *  $Id: vol.h,v 1.2 2007-02-22 17:54:17 Exp $\n */\n\n\nvoid * newscalarvol(void * intex, vector min, vector max, \n                    int xs, int ys, int zs, \n                    char * fname, scalarvol * invol);\n\nvoid  LoadVol(scalarvol *);\ncolor scalar_volume_texture(vector *, texture *, ray *);\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t840116E1152CBBF600B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };\n\t\t840116E2152CBBF600B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };\n\t\t840116E3152CBBF600B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };\n\t\t840116E4152CBBF600B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };\n\t\t840116E5152CBBF600B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };\n\t\t840116E6152CBBF600B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };\n\t\t840116E7152CBBF600B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };\n\t\t840116E8152CBBF600B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };\n\t\t840116E9152CBBF600B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };\n\t\t840116EA152CBBF600B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };\n\t\t840116EB152CBBF600B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };\n\t\t840116EC152CBBF600B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };\n\t\t840116ED152CBBF600B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };\n\t\t840116EE152CBBF600B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };\n\t\t840116EF152CBBF600B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };\n\t\t840116F0152CBBF600B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };\n\t\t840116F1152CBBF600B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };\n\t\t840116F2152CBBF600B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };\n\t\t840116F3152CBBF600B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };\n\t\t840116F4152CBBF600B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };\n\t\t840116F5152CBBF600B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };\n\t\t840116F6152CBBF600B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };\n\t\t840116F7152CBBF600B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };\n\t\t840116F8152CBBF600B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };\n\t\t840116F9152CBBF600B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };\n\t\t840116FA152CBBF600B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };\n\t\t840116FB152CBBF600B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };\n\t\t840116FC152CBBF600B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };\n\t\t840116FD152CBBF600B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };\n\t\t840116FE152CBBF600B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };\n\t\t840116FF152CBBF600B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };\n\t\t84011707152CBBF600B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };\n\t\t84011708152CBBF600B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };\n\t\t84011709152CBBF600B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };\n\t\t8401170A152CBBF600B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };\n\t\t8401170B152CBBF600B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };\n\t\t8401172A152D6E3E00B07E4D /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011729152D6E3E00B07E4D /* trace.tbb.cpp */; };\n\t\t8401172D152D6F6C00B07E4D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\t8401172E152D6F6C00B07E4D /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t8401172F152D6F6C00B07E4D /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84011730152D6F6C00B07E4D /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\t84011731152D6F6C00B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };\n\t\t84011732152D6F6C00B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };\n\t\t84011733152D6F6C00B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };\n\t\t84011734152D6F6C00B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };\n\t\t84011735152D6F6C00B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };\n\t\t84011736152D6F6C00B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };\n\t\t84011737152D6F6C00B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };\n\t\t84011738152D6F6C00B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };\n\t\t84011739152D6F6C00B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };\n\t\t8401173A152D6F6C00B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };\n\t\t8401173B152D6F6C00B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };\n\t\t8401173C152D6F6C00B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };\n\t\t8401173D152D6F6C00B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };\n\t\t8401173E152D6F6C00B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };\n\t\t8401173F152D6F6C00B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };\n\t\t84011740152D6F6C00B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };\n\t\t84011741152D6F6C00B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };\n\t\t84011742152D6F6C00B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };\n\t\t84011743152D6F6C00B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };\n\t\t84011744152D6F6C00B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };\n\t\t84011745152D6F6C00B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };\n\t\t84011746152D6F6C00B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };\n\t\t84011747152D6F6C00B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };\n\t\t84011748152D6F6C00B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };\n\t\t84011749152D6F6C00B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };\n\t\t8401174A152D6F6C00B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };\n\t\t8401174B152D6F6C00B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };\n\t\t8401174C152D6F6C00B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };\n\t\t8401174D152D6F6C00B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };\n\t\t8401174E152D6F6C00B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };\n\t\t8401174F152D6F6C00B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };\n\t\t84011750152D6F6C00B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };\n\t\t84011751152D6F6C00B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };\n\t\t84011752152D6F6C00B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };\n\t\t84011753152D6F6C00B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };\n\t\t84011754152D6F6C00B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };\n\t\t84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\t84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };\n\t\t8401175B152D6F6C00B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t8401175C152D6F6C00B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t8401175D152D6F6C00B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t84011766152D6F8400B07E4D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\t84011767152D6F8400B07E4D /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t84011768152D6F8400B07E4D /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84011769152D6F8400B07E4D /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\t8401176A152D6F8400B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };\n\t\t8401176B152D6F8400B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };\n\t\t8401176C152D6F8400B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };\n\t\t8401176D152D6F8400B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };\n\t\t8401176E152D6F8400B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };\n\t\t8401176F152D6F8400B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };\n\t\t84011770152D6F8400B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };\n\t\t84011771152D6F8400B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };\n\t\t84011772152D6F8400B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };\n\t\t84011773152D6F8400B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };\n\t\t84011774152D6F8400B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };\n\t\t84011775152D6F8400B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };\n\t\t84011776152D6F8400B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };\n\t\t84011777152D6F8400B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };\n\t\t84011778152D6F8400B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };\n\t\t84011779152D6F8400B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };\n\t\t8401177A152D6F8400B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };\n\t\t8401177B152D6F8400B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };\n\t\t8401177C152D6F8400B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };\n\t\t8401177D152D6F8400B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };\n\t\t8401177E152D6F8400B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };\n\t\t8401177F152D6F8400B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };\n\t\t84011780152D6F8400B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };\n\t\t84011781152D6F8400B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };\n\t\t84011782152D6F8400B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };\n\t\t84011783152D6F8400B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };\n\t\t84011784152D6F8400B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };\n\t\t84011785152D6F8400B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };\n\t\t84011786152D6F8400B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };\n\t\t84011787152D6F8400B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };\n\t\t84011788152D6F8400B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };\n\t\t84011789152D6F8400B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };\n\t\t8401178A152D6F8400B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };\n\t\t8401178B152D6F8400B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };\n\t\t8401178C152D6F8400B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };\n\t\t8401178D152D6F8400B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };\n\t\t84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\t84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };\n\t\t84011794152D6F8400B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t84011795152D6F8400B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t84011796152D6F8400B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t840117A1152D6FF900B07E4D /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179F152D6FD100B07E4D /* trace.serial.cpp */; };\n\t\t840117A2152D701A00B07E4D /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */; };\n\t\t84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };\n\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\tD3E786C41C0E36AC006995F1 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\tD3E786C51C0E36B0006995F1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\tD3E786C61C0E36BC006995F1 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\tD3E786C71C0E36C1006995F1 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\tD3E786C81C0E373D006995F1 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011729152D6E3E00B07E4D /* trace.tbb.cpp */; };\n\t\tD3E786C91C0E3742006995F1 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };\n\t\tD3E786CA1C0E375D006995F1 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };\n\t\tD3E786CB1C0E375D006995F1 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };\n\t\tD3E786CC1C0E375D006995F1 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };\n\t\tD3E786CD1C0E375D006995F1 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };\n\t\tD3E786CE1C0E375D006995F1 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };\n\t\tD3E786CF1C0E375D006995F1 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };\n\t\tD3E786D01C0E375D006995F1 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };\n\t\tD3E786D11C0E375D006995F1 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };\n\t\tD3E786D21C0E375D006995F1 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };\n\t\tD3E786D31C0E375D006995F1 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };\n\t\tD3E786D41C0E375D006995F1 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };\n\t\tD3E786D51C0E375D006995F1 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };\n\t\tD3E786D61C0E375D006995F1 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };\n\t\tD3E786D71C0E375D006995F1 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };\n\t\tD3E786D81C0E375D006995F1 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };\n\t\tD3E786D91C0E375D006995F1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };\n\t\tD3E786DA1C0E375D006995F1 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };\n\t\tD3E786DB1C0E375D006995F1 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };\n\t\tD3E786DC1C0E375D006995F1 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };\n\t\tD3E786DD1C0E375D006995F1 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };\n\t\tD3E786DE1C0E375D006995F1 /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };\n\t\tD3E786DF1C0E375D006995F1 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };\n\t\tD3E786E01C0E375D006995F1 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };\n\t\tD3E786E11C0E375D006995F1 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };\n\t\tD3E786E21C0E375D006995F1 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };\n\t\tD3E786E31C0E375D006995F1 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };\n\t\tD3E786E41C0E375D006995F1 /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };\n\t\tD3E786E51C0E375D006995F1 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };\n\t\tD3E786E61C0E375D006995F1 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };\n\t\tD3E786E71C0E375D006995F1 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };\n\t\tD3E786E81C0E375D006995F1 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };\n\t\tD3E786E91C0E375D006995F1 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };\n\t\tD3E786EA1C0E375D006995F1 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };\n\t\tD3E786EB1C0E375D006995F1 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };\n\t\tD3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD3E786F21C0E394C006995F1 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };\n\t\tD3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; };\n\t\tD3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; };\n\t\tD3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F51C0E3A27006995F1 /* iOS.storyboard */; };\n\t\tD3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F81C0E3DEC006995F1 /* balls.dat */; };\n\t\tD3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t84011691152CBBC900B07E4D /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = \"<group>\"; };\n\t\t84011692152CBBC900B07E4D /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = \"<group>\"; };\n\t\t84011693152CBBC900B07E4D /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = \"<group>\"; };\n\t\t84011694152CBBC900B07E4D /* box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = \"<group>\"; };\n\t\t84011695152CBBC900B07E4D /* camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = \"<group>\"; };\n\t\t84011696152CBBC900B07E4D /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = \"<group>\"; };\n\t\t84011697152CBBC900B07E4D /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = \"<group>\"; };\n\t\t84011698152CBBC900B07E4D /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = \"<group>\"; };\n\t\t84011699152CBBC900B07E4D /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = \"<group>\"; };\n\t\t8401169A152CBBC900B07E4D /* grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = \"<group>\"; };\n\t\t8401169B152CBBC900B07E4D /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = \"<group>\"; };\n\t\t8401169C152CBBC900B07E4D /* imap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = \"<group>\"; };\n\t\t8401169D152CBBC900B07E4D /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = \"<group>\"; };\n\t\t8401169E152CBBC900B07E4D /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = \"<group>\"; };\n\t\t8401169F152CBBC900B07E4D /* light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = \"<group>\"; };\n\t\t840116A0152CBBC900B07E4D /* machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = \"<group>\"; };\n\t\t840116A1152CBBC900B07E4D /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = \"<group>\"; };\n\t\t840116A2152CBBC900B07E4D /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = \"<group>\"; };\n\t\t840116A3152CBBC900B07E4D /* parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = \"<group>\"; };\n\t\t840116A4152CBBC900B07E4D /* plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = \"<group>\"; };\n\t\t840116A5152CBBC900B07E4D /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = \"<group>\"; };\n\t\t840116A7152CBBC900B07E4D /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = \"<group>\"; };\n\t\t840116A8152CBBC900B07E4D /* render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = \"<group>\"; };\n\t\t840116A9152CBBC900B07E4D /* ring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = \"<group>\"; };\n\t\t840116AA152CBBC900B07E4D /* shade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = \"<group>\"; };\n\t\t840116AB152CBBC900B07E4D /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = \"<group>\"; };\n\t\t840116AC152CBBC900B07E4D /* tachyon_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tachyon_video.h; path = ../src/tachyon_video.h; sourceTree = \"<group>\"; };\n\t\t840116AD152CBBC900B07E4D /* texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = \"<group>\"; };\n\t\t840116AE152CBBC900B07E4D /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = \"<group>\"; };\n\t\t840116AF152CBBC900B07E4D /* trace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = \"<group>\"; };\n\t\t840116B0152CBBC900B07E4D /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = \"<group>\"; };\n\t\t840116B1152CBBC900B07E4D /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = \"<group>\"; };\n\t\t840116B2152CBBC900B07E4D /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = \"<group>\"; };\n\t\t840116B3152CBBC900B07E4D /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = \"<group>\"; };\n\t\t840116B4152CBBC900B07E4D /* vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = \"<group>\"; };\n\t\t840116B5152CBBC900B07E4D /* vol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = \"<group>\"; };\n\t\t840116B6152CBBF600B07E4D /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = api.cpp; sourceTree = \"<group>\"; };\n\t\t840116B7152CBBF600B07E4D /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apigeom.cpp; sourceTree = \"<group>\"; };\n\t\t840116B8152CBBF600B07E4D /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apitrigeom.cpp; sourceTree = \"<group>\"; };\n\t\t840116B9152CBBF600B07E4D /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bndbox.cpp; sourceTree = \"<group>\"; };\n\t\t840116BA152CBBF600B07E4D /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = box.cpp; sourceTree = \"<group>\"; };\n\t\t840116BB152CBBF600B07E4D /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = camera.cpp; sourceTree = \"<group>\"; };\n\t\t840116BC152CBBF600B07E4D /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coordsys.cpp; sourceTree = \"<group>\"; };\n\t\t840116BD152CBBF600B07E4D /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cylinder.cpp; sourceTree = \"<group>\"; };\n\t\t840116BE152CBBF600B07E4D /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extvol.cpp; sourceTree = \"<group>\"; };\n\t\t840116BF152CBBF600B07E4D /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = global.cpp; sourceTree = \"<group>\"; };\n\t\t840116C0152CBBF600B07E4D /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grid.cpp; sourceTree = \"<group>\"; };\n\t\t840116C1152CBBF600B07E4D /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imageio.cpp; sourceTree = \"<group>\"; };\n\t\t840116C2152CBBF600B07E4D /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imap.cpp; sourceTree = \"<group>\"; };\n\t\t840116C3152CBBF600B07E4D /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intersect.cpp; sourceTree = \"<group>\"; };\n\t\t840116C4152CBBF600B07E4D /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jpeg.cpp; sourceTree = \"<group>\"; };\n\t\t840116C5152CBBF600B07E4D /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = light.cpp; sourceTree = \"<group>\"; };\n\t\t840116C6152CBBF600B07E4D /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = \"<group>\"; };\n\t\t840116C7152CBBF600B07E4D /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objbound.cpp; sourceTree = \"<group>\"; };\n\t\t840116C8152CBBF600B07E4D /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse.cpp; sourceTree = \"<group>\"; };\n\t\t840116C9152CBBF600B07E4D /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = plane.cpp; sourceTree = \"<group>\"; };\n\t\t840116CA152CBBF600B07E4D /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ppm.cpp; sourceTree = \"<group>\"; };\n\t\t840116CB152CBBF600B07E4D /* pthread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pthread.cpp; sourceTree = \"<group>\"; };\n\t\t840116CC152CBBF600B07E4D /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quadric.cpp; sourceTree = \"<group>\"; };\n\t\t840116CD152CBBF600B07E4D /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = render.cpp; sourceTree = \"<group>\"; };\n\t\t840116CE152CBBF600B07E4D /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ring.cpp; sourceTree = \"<group>\"; };\n\t\t840116CF152CBBF600B07E4D /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shade.cpp; sourceTree = \"<group>\"; };\n\t\t840116D0152CBBF600B07E4D /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sphere.cpp; sourceTree = \"<group>\"; };\n\t\t840116D1152CBBF600B07E4D /* tachyon_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tachyon_video.cpp; sourceTree = \"<group>\"; };\n\t\t840116D2152CBBF600B07E4D /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = texture.cpp; sourceTree = \"<group>\"; };\n\t\t840116D3152CBBF600B07E4D /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tgafile.cpp; sourceTree = \"<group>\"; };\n\t\t840116D4152CBBF600B07E4D /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace_rest.cpp; sourceTree = \"<group>\"; };\n\t\t840116DC152CBBF600B07E4D /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = triangle.cpp; sourceTree = \"<group>\"; };\n\t\t840116DD152CBBF600B07E4D /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui.cpp; sourceTree = \"<group>\"; };\n\t\t840116DE152CBBF600B07E4D /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = util.cpp; sourceTree = \"<group>\"; };\n\t\t840116DF152CBBF600B07E4D /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector.cpp; sourceTree = \"<group>\"; };\n\t\t840116E0152CBBF600B07E4D /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vol.cpp; sourceTree = \"<group>\"; };\n\t\t84011729152D6E3E00B07E4D /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.tbb.cpp; sourceTree = \"<group>\"; };\n\t\t84011761152D6F6C00B07E4D /* tachyon.serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.serial.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb1d.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.tbb1d.cpp; sourceTree = \"<group>\"; };\n\t\t8401179F152D6FD100B07E4D /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.serial.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = \"<group>\"; };\n\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = \"<group>\"; };\n\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = \"<group>\"; };\n\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"tbbExample-Prefix.pch\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = \"<group>\"; };\n\t\t84D017511527431F0008A4E0 /* tachyon.tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };\n\t\tD3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb.ios.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD3E786EC1C0E38E2006995F1 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n\t\tD3E786F51C0E3A27006995F1 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = \"<group>\"; };\n\t\tD3E786F81C0E3DEC006995F1 /* balls.dat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = balls.dat; path = ../../../../../parallel_for/tachyon/dat/balls.dat; sourceTree = \"<group>\"; };\n\t\tD3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.1.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t84011756152D6F6C00B07E4D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */,\n\t\t\t\t84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */,\n\t\t\t\t84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8401178F152D6F8400B07E4D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */,\n\t\t\t\t84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */,\n\t\t\t\t84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84D0174E1527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,\n\t\t\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,\n\t\t\t\t84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3E786AA1C0E3588006995F1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */,\n\t\t\t\tD3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */,\n\t\t\t\tD3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t8401160E152CB8A600B07E4D /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8401179F152D6FD100B07E4D /* trace.serial.cpp */,\n\t\t\t\t8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */,\n\t\t\t\t84011729152D6E3E00B07E4D /* trace.tbb.cpp */,\n\t\t\t\t840116B6152CBBF600B07E4D /* api.cpp */,\n\t\t\t\t840116B7152CBBF600B07E4D /* apigeom.cpp */,\n\t\t\t\t840116B8152CBBF600B07E4D /* apitrigeom.cpp */,\n\t\t\t\t840116B9152CBBF600B07E4D /* bndbox.cpp */,\n\t\t\t\t840116BA152CBBF600B07E4D /* box.cpp */,\n\t\t\t\t840116BB152CBBF600B07E4D /* camera.cpp */,\n\t\t\t\t840116BC152CBBF600B07E4D /* coordsys.cpp */,\n\t\t\t\t840116BD152CBBF600B07E4D /* cylinder.cpp */,\n\t\t\t\t840116BE152CBBF600B07E4D /* extvol.cpp */,\n\t\t\t\t840116BF152CBBF600B07E4D /* global.cpp */,\n\t\t\t\t840116C0152CBBF600B07E4D /* grid.cpp */,\n\t\t\t\t840116C1152CBBF600B07E4D /* imageio.cpp */,\n\t\t\t\t840116C2152CBBF600B07E4D /* imap.cpp */,\n\t\t\t\t840116C3152CBBF600B07E4D /* intersect.cpp */,\n\t\t\t\t840116C4152CBBF600B07E4D /* jpeg.cpp */,\n\t\t\t\t840116C5152CBBF600B07E4D /* light.cpp */,\n\t\t\t\t840116C6152CBBF600B07E4D /* main.cpp */,\n\t\t\t\t840116C7152CBBF600B07E4D /* objbound.cpp */,\n\t\t\t\t840116C8152CBBF600B07E4D /* parse.cpp */,\n\t\t\t\t840116C9152CBBF600B07E4D /* plane.cpp */,\n\t\t\t\t840116CA152CBBF600B07E4D /* ppm.cpp */,\n\t\t\t\t840116CB152CBBF600B07E4D /* pthread.cpp */,\n\t\t\t\t840116CC152CBBF600B07E4D /* quadric.cpp */,\n\t\t\t\t840116CD152CBBF600B07E4D /* render.cpp */,\n\t\t\t\t840116CE152CBBF600B07E4D /* ring.cpp */,\n\t\t\t\t840116CF152CBBF600B07E4D /* shade.cpp */,\n\t\t\t\t840116D0152CBBF600B07E4D /* sphere.cpp */,\n\t\t\t\t840116D1152CBBF600B07E4D /* tachyon_video.cpp */,\n\t\t\t\t840116D2152CBBF600B07E4D /* texture.cpp */,\n\t\t\t\t840116D3152CBBF600B07E4D /* tgafile.cpp */,\n\t\t\t\t840116D4152CBBF600B07E4D /* trace_rest.cpp */,\n\t\t\t\t840116DC152CBBF600B07E4D /* triangle.cpp */,\n\t\t\t\t840116DD152CBBF600B07E4D /* ui.cpp */,\n\t\t\t\t840116DE152CBBF600B07E4D /* util.cpp */,\n\t\t\t\t840116DF152CBBF600B07E4D /* vector.cpp */,\n\t\t\t\t840116E0152CBBF600B07E4D /* vol.cpp */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tpath = ../src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84011690152CBB3C00B07E4D /* Headers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84011691152CBBC900B07E4D /* api.h */,\n\t\t\t\t84011692152CBBC900B07E4D /* apitrigeom.h */,\n\t\t\t\t84011693152CBBC900B07E4D /* bndbox.h */,\n\t\t\t\t84011694152CBBC900B07E4D /* box.h */,\n\t\t\t\t84011695152CBBC900B07E4D /* camera.h */,\n\t\t\t\t84011696152CBBC900B07E4D /* coordsys.h */,\n\t\t\t\t84011697152CBBC900B07E4D /* cylinder.h */,\n\t\t\t\t84011698152CBBC900B07E4D /* extvol.h */,\n\t\t\t\t84011699152CBBC900B07E4D /* global.h */,\n\t\t\t\t8401169A152CBBC900B07E4D /* grid.h */,\n\t\t\t\t8401169B152CBBC900B07E4D /* imageio.h */,\n\t\t\t\t8401169C152CBBC900B07E4D /* imap.h */,\n\t\t\t\t8401169D152CBBC900B07E4D /* intersect.h */,\n\t\t\t\t8401169E152CBBC900B07E4D /* jpeg.h */,\n\t\t\t\t8401169F152CBBC900B07E4D /* light.h */,\n\t\t\t\t840116A0152CBBC900B07E4D /* machine.h */,\n\t\t\t\t840116A1152CBBC900B07E4D /* macros.h */,\n\t\t\t\t840116A2152CBBC900B07E4D /* objbound.h */,\n\t\t\t\t840116A3152CBBC900B07E4D /* parse.h */,\n\t\t\t\t840116A4152CBBC900B07E4D /* plane.h */,\n\t\t\t\t840116A5152CBBC900B07E4D /* ppm.h */,\n\t\t\t\t840116A7152CBBC900B07E4D /* quadric.h */,\n\t\t\t\t840116A8152CBBC900B07E4D /* render.h */,\n\t\t\t\t840116A9152CBBC900B07E4D /* ring.h */,\n\t\t\t\t840116AA152CBBC900B07E4D /* shade.h */,\n\t\t\t\t840116AB152CBBC900B07E4D /* sphere.h */,\n\t\t\t\t840116AC152CBBC900B07E4D /* tachyon_video.h */,\n\t\t\t\t840116AD152CBBC900B07E4D /* texture.h */,\n\t\t\t\t840116AE152CBBC900B07E4D /* tgafile.h */,\n\t\t\t\t840116AF152CBBC900B07E4D /* trace.h */,\n\t\t\t\t840116B0152CBBC900B07E4D /* triangle.h */,\n\t\t\t\t840116B1152CBBC900B07E4D /* types.h */,\n\t\t\t\t840116B2152CBBC900B07E4D /* ui.h */,\n\t\t\t\t840116B3152CBBC900B07E4D /* util.h */,\n\t\t\t\t840116B4152CBBC900B07E4D /* vector.h */,\n\t\t\t\t840116B5152CBBC900B07E4D /* vol.h */,\n\t\t\t);\n\t\t\tname = Headers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84011690152CBB3C00B07E4D /* Headers */,\n\t\t\t\t8401160E152CB8A600B07E4D /* Sources */,\n\t\t\t\t84B8DA98152CAD8600D59B95 /* Gui layer */,\n\t\t\t\t84B8DA7B152CA97B00D59B95 /* Resources */,\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7B152CA97B00D59B95 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,\n\t\t\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,\n\t\t\t\tD3E786F51C0E3A27006995F1 /* iOS.storyboard */,\n\t\t\t\tD3E786F81C0E3DEC006995F1 /* balls.dat */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../../common/gui/xcode/tbbExample/en.lproj;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA98152CAD8600D59B95 /* Gui layer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */,\n\t\t\t\t84B8DA6F152CA90100D59B95 /* main.m */,\n\t\t\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */,\n\t\t\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */,\n\t\t\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,\n\t\t\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,\n\t\t\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Gui layer\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017461527431F0008A4E0 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */,\n\t\t\t\t84D017541527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D017521527431F0008A4E0 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017521527431F0008A4E0 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017511527431F0008A4E0 /* tachyon.tbb.app */,\n\t\t\t\t84011761152D6F6C00B07E4D /* tachyon.serial.app */,\n\t\t\t\t8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */,\n\t\t\t\tD3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017541527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */,\n\t\t\t\tD3E786EC1C0E38E2006995F1 /* libtbb.dylib */,\n\t\t\t\tD3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */,\n\t\t\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */,\n\t\t\t\t84D017581527431F0008A4E0 /* AppKit.framework */,\n\t\t\t\t84D017591527431F0008A4E0 /* CoreData.framework */,\n\t\t\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */,\n\t\t\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */,\n\t\t\t\t84D017551527431F0008A4E0 /* Cocoa.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8401172B152D6F6C00B07E4D /* tachyon.serial */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8401175E152D6F6C00B07E4D /* Build configuration list for PBXNativeTarget \"tachyon.serial\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8401172C152D6F6C00B07E4D /* Sources */,\n\t\t\t\t84011756152D6F6C00B07E4D /* Frameworks */,\n\t\t\t\t8401175A152D6F6C00B07E4D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tachyon.serial;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 84011761152D6F6C00B07E4D /* tachyon.serial.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t84011764152D6F8400B07E4D /* tachyon.tbb1d */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 84011797152D6F8400B07E4D /* Build configuration list for PBXNativeTarget \"tachyon.tbb1d\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t84011765152D6F8400B07E4D /* Sources */,\n\t\t\t\t8401178F152D6F8400B07E4D /* Frameworks */,\n\t\t\t\t84011793152D6F8400B07E4D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tachyon.tbb1d;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t84D017501527431F0008A4E0 /* tachyon.tbb */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tachyon.tbb\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t84D0174D1527431F0008A4E0 /* Sources */,\n\t\t\t\t84D0174E1527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D0174F1527431F0008A4E0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tachyon.tbb;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 84D017511527431F0008A4E0 /* tachyon.tbb.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD3E786AC1C0E3588006995F1 /* tachyon.tbb.ios */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D3E786C31C0E3588006995F1 /* Build configuration list for PBXNativeTarget \"tachyon.tbb.ios\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD3E786A91C0E3588006995F1 /* Sources */,\n\t\t\t\tD3E786AA1C0E3588006995F1 /* Frameworks */,\n\t\t\t\tD3E786AB1C0E3588006995F1 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tachyon.tbb.ios;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = D3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t84D017481527431F0008A4E0 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = tbb;\n\t\t\t\tLastUpgradeCheck = 0710;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD3E786AC1C0E3588006995F1 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1.1;\n\t\t\t\t\t\tDevelopmentTeam = 7J8M3RM94C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"tachyon\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 84D017461527431F0008A4E0;\n\t\t\tproductRefGroup = 84D017521527431F0008A4E0 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t84D017501527431F0008A4E0 /* tachyon.tbb */,\n\t\t\t\t8401172B152D6F6C00B07E4D /* tachyon.serial */,\n\t\t\t\t84011764152D6F8400B07E4D /* tachyon.tbb1d */,\n\t\t\t\tD3E786AC1C0E3588006995F1 /* tachyon.tbb.ios */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t8401175A152D6F6C00B07E4D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8401175B152D6F6C00B07E4D /* (null) in Resources */,\n\t\t\t\t8401175C152D6F6C00B07E4D /* InfoPlist.strings in Resources */,\n\t\t\t\t8401175D152D6F6C00B07E4D /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84011793152D6F8400B07E4D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84011794152D6F8400B07E4D /* (null) in Resources */,\n\t\t\t\t84011795152D6F8400B07E4D /* InfoPlist.strings in Resources */,\n\t\t\t\t84011796152D6F8400B07E4D /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84D0174F1527431F0008A4E0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */,\n\t\t\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,\n\t\t\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3E786AB1C0E3588006995F1 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */,\n\t\t\t\tD3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */,\n\t\t\t\tD3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */,\n\t\t\t\tD3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8401172C152D6F6C00B07E4D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t840117A1152D6FF900B07E4D /* trace.serial.cpp in Sources */,\n\t\t\t\t8401172D152D6F6C00B07E4D /* main.m in Sources */,\n\t\t\t\t8401172E152D6F6C00B07E4D /* OpenGLView.m in Sources */,\n\t\t\t\t8401172F152D6F6C00B07E4D /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84011730152D6F6C00B07E4D /* macvideo.cpp in Sources */,\n\t\t\t\t84011731152D6F6C00B07E4D /* api.cpp in Sources */,\n\t\t\t\t84011732152D6F6C00B07E4D /* apigeom.cpp in Sources */,\n\t\t\t\t84011733152D6F6C00B07E4D /* apitrigeom.cpp in Sources */,\n\t\t\t\t84011734152D6F6C00B07E4D /* bndbox.cpp in Sources */,\n\t\t\t\t84011735152D6F6C00B07E4D /* box.cpp in Sources */,\n\t\t\t\t84011736152D6F6C00B07E4D /* camera.cpp in Sources */,\n\t\t\t\t84011737152D6F6C00B07E4D /* coordsys.cpp in Sources */,\n\t\t\t\t84011738152D6F6C00B07E4D /* cylinder.cpp in Sources */,\n\t\t\t\t84011739152D6F6C00B07E4D /* extvol.cpp in Sources */,\n\t\t\t\t8401173A152D6F6C00B07E4D /* global.cpp in Sources */,\n\t\t\t\t8401173B152D6F6C00B07E4D /* grid.cpp in Sources */,\n\t\t\t\t8401173C152D6F6C00B07E4D /* imageio.cpp in Sources */,\n\t\t\t\t8401173D152D6F6C00B07E4D /* imap.cpp in Sources */,\n\t\t\t\t8401173E152D6F6C00B07E4D /* intersect.cpp in Sources */,\n\t\t\t\t8401173F152D6F6C00B07E4D /* jpeg.cpp in Sources */,\n\t\t\t\t84011740152D6F6C00B07E4D /* light.cpp in Sources */,\n\t\t\t\t84011741152D6F6C00B07E4D /* main.cpp in Sources */,\n\t\t\t\t84011742152D6F6C00B07E4D /* objbound.cpp in Sources */,\n\t\t\t\t84011743152D6F6C00B07E4D /* parse.cpp in Sources */,\n\t\t\t\t84011744152D6F6C00B07E4D /* plane.cpp in Sources */,\n\t\t\t\t84011745152D6F6C00B07E4D /* ppm.cpp in Sources */,\n\t\t\t\t84011746152D6F6C00B07E4D /* pthread.cpp in Sources */,\n\t\t\t\t84011747152D6F6C00B07E4D /* quadric.cpp in Sources */,\n\t\t\t\t84011748152D6F6C00B07E4D /* render.cpp in Sources */,\n\t\t\t\t84011749152D6F6C00B07E4D /* ring.cpp in Sources */,\n\t\t\t\t8401174A152D6F6C00B07E4D /* shade.cpp in Sources */,\n\t\t\t\t8401174B152D6F6C00B07E4D /* sphere.cpp in Sources */,\n\t\t\t\t8401174C152D6F6C00B07E4D /* tachyon_video.cpp in Sources */,\n\t\t\t\t8401174D152D6F6C00B07E4D /* texture.cpp in Sources */,\n\t\t\t\t8401174E152D6F6C00B07E4D /* tgafile.cpp in Sources */,\n\t\t\t\t8401174F152D6F6C00B07E4D /* trace_rest.cpp in Sources */,\n\t\t\t\t84011750152D6F6C00B07E4D /* triangle.cpp in Sources */,\n\t\t\t\t84011751152D6F6C00B07E4D /* ui.cpp in Sources */,\n\t\t\t\t84011752152D6F6C00B07E4D /* util.cpp in Sources */,\n\t\t\t\t84011753152D6F6C00B07E4D /* vector.cpp in Sources */,\n\t\t\t\t84011754152D6F6C00B07E4D /* vol.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84011765152D6F8400B07E4D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t840117A2152D701A00B07E4D /* trace.tbb1d.cpp in Sources */,\n\t\t\t\t84011766152D6F8400B07E4D /* main.m in Sources */,\n\t\t\t\t84011767152D6F8400B07E4D /* OpenGLView.m in Sources */,\n\t\t\t\t84011768152D6F8400B07E4D /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84011769152D6F8400B07E4D /* macvideo.cpp in Sources */,\n\t\t\t\t8401176A152D6F8400B07E4D /* api.cpp in Sources */,\n\t\t\t\t8401176B152D6F8400B07E4D /* apigeom.cpp in Sources */,\n\t\t\t\t8401176C152D6F8400B07E4D /* apitrigeom.cpp in Sources */,\n\t\t\t\t8401176D152D6F8400B07E4D /* bndbox.cpp in Sources */,\n\t\t\t\t8401176E152D6F8400B07E4D /* box.cpp in Sources */,\n\t\t\t\t8401176F152D6F8400B07E4D /* camera.cpp in Sources */,\n\t\t\t\t84011770152D6F8400B07E4D /* coordsys.cpp in Sources */,\n\t\t\t\t84011771152D6F8400B07E4D /* cylinder.cpp in Sources */,\n\t\t\t\t84011772152D6F8400B07E4D /* extvol.cpp in Sources */,\n\t\t\t\t84011773152D6F8400B07E4D /* global.cpp in Sources */,\n\t\t\t\t84011774152D6F8400B07E4D /* grid.cpp in Sources */,\n\t\t\t\t84011775152D6F8400B07E4D /* imageio.cpp in Sources */,\n\t\t\t\t84011776152D6F8400B07E4D /* imap.cpp in Sources */,\n\t\t\t\t84011777152D6F8400B07E4D /* intersect.cpp in Sources */,\n\t\t\t\t84011778152D6F8400B07E4D /* jpeg.cpp in Sources */,\n\t\t\t\t84011779152D6F8400B07E4D /* light.cpp in Sources */,\n\t\t\t\t8401177A152D6F8400B07E4D /* main.cpp in Sources */,\n\t\t\t\t8401177B152D6F8400B07E4D /* objbound.cpp in Sources */,\n\t\t\t\t8401177C152D6F8400B07E4D /* parse.cpp in Sources */,\n\t\t\t\t8401177D152D6F8400B07E4D /* plane.cpp in Sources */,\n\t\t\t\t8401177E152D6F8400B07E4D /* ppm.cpp in Sources */,\n\t\t\t\t8401177F152D6F8400B07E4D /* pthread.cpp in Sources */,\n\t\t\t\t84011780152D6F8400B07E4D /* quadric.cpp in Sources */,\n\t\t\t\t84011781152D6F8400B07E4D /* render.cpp in Sources */,\n\t\t\t\t84011782152D6F8400B07E4D /* ring.cpp in Sources */,\n\t\t\t\t84011783152D6F8400B07E4D /* shade.cpp in Sources */,\n\t\t\t\t84011784152D6F8400B07E4D /* sphere.cpp in Sources */,\n\t\t\t\t84011785152D6F8400B07E4D /* tachyon_video.cpp in Sources */,\n\t\t\t\t84011786152D6F8400B07E4D /* texture.cpp in Sources */,\n\t\t\t\t84011787152D6F8400B07E4D /* tgafile.cpp in Sources */,\n\t\t\t\t84011788152D6F8400B07E4D /* trace_rest.cpp in Sources */,\n\t\t\t\t84011789152D6F8400B07E4D /* triangle.cpp in Sources */,\n\t\t\t\t8401178A152D6F8400B07E4D /* ui.cpp in Sources */,\n\t\t\t\t8401178B152D6F8400B07E4D /* util.cpp in Sources */,\n\t\t\t\t8401178C152D6F8400B07E4D /* vector.cpp in Sources */,\n\t\t\t\t8401178D152D6F8400B07E4D /* vol.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84D0174D1527431F0008A4E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */,\n\t\t\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,\n\t\t\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,\n\t\t\t\t840116E1152CBBF600B07E4D /* api.cpp in Sources */,\n\t\t\t\t840116E2152CBBF600B07E4D /* apigeom.cpp in Sources */,\n\t\t\t\t840116E3152CBBF600B07E4D /* apitrigeom.cpp in Sources */,\n\t\t\t\t840116E4152CBBF600B07E4D /* bndbox.cpp in Sources */,\n\t\t\t\t840116E5152CBBF600B07E4D /* box.cpp in Sources */,\n\t\t\t\t840116E6152CBBF600B07E4D /* camera.cpp in Sources */,\n\t\t\t\t840116E7152CBBF600B07E4D /* coordsys.cpp in Sources */,\n\t\t\t\t840116E8152CBBF600B07E4D /* cylinder.cpp in Sources */,\n\t\t\t\t840116E9152CBBF600B07E4D /* extvol.cpp in Sources */,\n\t\t\t\t840116EA152CBBF600B07E4D /* global.cpp in Sources */,\n\t\t\t\t840116EB152CBBF600B07E4D /* grid.cpp in Sources */,\n\t\t\t\t840116EC152CBBF600B07E4D /* imageio.cpp in Sources */,\n\t\t\t\t840116ED152CBBF600B07E4D /* imap.cpp in Sources */,\n\t\t\t\t840116EE152CBBF600B07E4D /* intersect.cpp in Sources */,\n\t\t\t\t840116EF152CBBF600B07E4D /* jpeg.cpp in Sources */,\n\t\t\t\t840116F0152CBBF600B07E4D /* light.cpp in Sources */,\n\t\t\t\t840116F1152CBBF600B07E4D /* main.cpp in Sources */,\n\t\t\t\t840116F2152CBBF600B07E4D /* objbound.cpp in Sources */,\n\t\t\t\t840116F3152CBBF600B07E4D /* parse.cpp in Sources */,\n\t\t\t\t840116F4152CBBF600B07E4D /* plane.cpp in Sources */,\n\t\t\t\t840116F5152CBBF600B07E4D /* ppm.cpp in Sources */,\n\t\t\t\t840116F6152CBBF600B07E4D /* pthread.cpp in Sources */,\n\t\t\t\t840116F7152CBBF600B07E4D /* quadric.cpp in Sources */,\n\t\t\t\t840116F8152CBBF600B07E4D /* render.cpp in Sources */,\n\t\t\t\t840116F9152CBBF600B07E4D /* ring.cpp in Sources */,\n\t\t\t\t840116FA152CBBF600B07E4D /* shade.cpp in Sources */,\n\t\t\t\t840116FB152CBBF600B07E4D /* sphere.cpp in Sources */,\n\t\t\t\t840116FC152CBBF600B07E4D /* tachyon_video.cpp in Sources */,\n\t\t\t\t840116FD152CBBF600B07E4D /* texture.cpp in Sources */,\n\t\t\t\t840116FE152CBBF600B07E4D /* tgafile.cpp in Sources */,\n\t\t\t\t840116FF152CBBF600B07E4D /* trace_rest.cpp in Sources */,\n\t\t\t\t84011707152CBBF600B07E4D /* triangle.cpp in Sources */,\n\t\t\t\t84011708152CBBF600B07E4D /* ui.cpp in Sources */,\n\t\t\t\t84011709152CBBF600B07E4D /* util.cpp in Sources */,\n\t\t\t\t8401170A152CBBF600B07E4D /* vector.cpp in Sources */,\n\t\t\t\t8401170B152CBBF600B07E4D /* vol.cpp in Sources */,\n\t\t\t\t8401172A152D6E3E00B07E4D /* trace.tbb.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD3E786A91C0E3588006995F1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3E786E41C0E375D006995F1 /* tachyon_video.cpp in Sources */,\n\t\t\t\tD3E786DE1C0E375D006995F1 /* pthread.cpp in Sources */,\n\t\t\t\tD3E786CB1C0E375D006995F1 /* apitrigeom.cpp in Sources */,\n\t\t\t\tD3E786E31C0E375D006995F1 /* sphere.cpp in Sources */,\n\t\t\t\tD3E786CD1C0E375D006995F1 /* box.cpp in Sources */,\n\t\t\t\tD3E786F21C0E394C006995F1 /* vol.cpp in Sources */,\n\t\t\t\tD3E786D51C0E375D006995F1 /* imap.cpp in Sources */,\n\t\t\t\tD3E786D71C0E375D006995F1 /* jpeg.cpp in Sources */,\n\t\t\t\tD3E786E01C0E375D006995F1 /* render.cpp in Sources */,\n\t\t\t\tD3E786D91C0E375D006995F1 /* main.cpp in Sources */,\n\t\t\t\tD3E786DB1C0E375D006995F1 /* parse.cpp in Sources */,\n\t\t\t\tD3E786D21C0E375D006995F1 /* global.cpp in Sources */,\n\t\t\t\tD3E786C91C0E3742006995F1 /* api.cpp in Sources */,\n\t\t\t\tD3E786DA1C0E375D006995F1 /* objbound.cpp in Sources */,\n\t\t\t\tD3E786E51C0E375D006995F1 /* texture.cpp in Sources */,\n\t\t\t\tD3E786EB1C0E375D006995F1 /* vector.cpp in Sources */,\n\t\t\t\tD3E786CF1C0E375D006995F1 /* coordsys.cpp in Sources */,\n\t\t\t\tD3E786D41C0E375D006995F1 /* imageio.cpp in Sources */,\n\t\t\t\tD3E786E61C0E375D006995F1 /* tgafile.cpp in Sources */,\n\t\t\t\tD3E786CE1C0E375D006995F1 /* camera.cpp in Sources */,\n\t\t\t\tD3E786C81C0E373D006995F1 /* trace.tbb.cpp in Sources */,\n\t\t\t\tD3E786C51C0E36B0006995F1 /* main.m in Sources */,\n\t\t\t\tD3E786D81C0E375D006995F1 /* light.cpp in Sources */,\n\t\t\t\tD3E786DC1C0E375D006995F1 /* plane.cpp in Sources */,\n\t\t\t\tD3E786DF1C0E375D006995F1 /* quadric.cpp in Sources */,\n\t\t\t\tD3E786E71C0E375D006995F1 /* trace_rest.cpp in Sources */,\n\t\t\t\tD3E786C61C0E36BC006995F1 /* OpenGLView.m in Sources */,\n\t\t\t\tD3E786D01C0E375D006995F1 /* cylinder.cpp in Sources */,\n\t\t\t\tD3E786CC1C0E375D006995F1 /* bndbox.cpp in Sources */,\n\t\t\t\tD3E786C71C0E36C1006995F1 /* tbbAppDelegate.m in Sources */,\n\t\t\t\tD3E786E11C0E375D006995F1 /* ring.cpp in Sources */,\n\t\t\t\tD3E786C41C0E36AC006995F1 /* macvideo.cpp in Sources */,\n\t\t\t\tD3E786CA1C0E375D006995F1 /* apigeom.cpp in Sources */,\n\t\t\t\tD3E786E91C0E375D006995F1 /* ui.cpp in Sources */,\n\t\t\t\tD3E786D11C0E375D006995F1 /* extvol.cpp in Sources */,\n\t\t\t\tD3E786E81C0E375D006995F1 /* triangle.cpp in Sources */,\n\t\t\t\tD3E786DD1C0E375D006995F1 /* ppm.cpp in Sources */,\n\t\t\t\tD3E786EA1C0E375D006995F1 /* util.cpp in Sources */,\n\t\t\t\tD3E786D31C0E375D006995F1 /* grid.cpp in Sources */,\n\t\t\t\tD3E786D61C0E375D006995F1 /* intersect.cpp in Sources */,\n\t\t\t\tD3E786E21C0E375D006995F1 /* shade.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7D152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7F152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t8401175F152D6F6C00B07E4D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = tachyon.serial;\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84011760152D6F6C00B07E4D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = tachyon.serial;\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84011798152D6F8400B07E4D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = tachyon.tbb1d;\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84011799152D6F8400B07E4D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = tachyon.tbb1d;\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84D01770152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01771152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84D01773152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01774152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD3E786C11C0E3588006995F1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\t\"GCC_PREPROCESSOR_DEFINITIONS[arch=*]\" = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"__TBB_IOS=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = tachyon.tbb.ios;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD3E786C21C0E3588006995F1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\t\"GCC_PREPROCESSOR_DEFINITIONS[arch=*]\" = \"__TBB_IOS=1\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = tachyon.tbb.ios;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t8401175E152D6F6C00B07E4D /* Build configuration list for PBXNativeTarget \"tachyon.serial\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8401175F152D6F6C00B07E4D /* Debug */,\n\t\t\t\t84011760152D6F6C00B07E4D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84011797152D6F8400B07E4D /* Build configuration list for PBXNativeTarget \"tachyon.tbb1d\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84011798152D6F8400B07E4D /* Debug */,\n\t\t\t\t84011799152D6F8400B07E4D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"tachyon\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01770152743200008A4E0 /* Debug */,\n\t\t\t\t84D01771152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tachyon.tbb\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01773152743200008A4E0 /* Debug */,\n\t\t\t\t84D01774152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD3E786C31C0E3588006995F1 /* Build configuration list for PBXNativeTarget \"tachyon.tbb.ios\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD3E786C11C0E3588006995F1 /* Debug */,\n\t\t\t\tD3E786C21C0E3588006995F1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 84D017481527431F0008A4E0 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"8401172B152D6F6C00B07E4D\"\n               BuildableName = \"tachyon.serial.app\"\n               BlueprintName = \"tachyon.serial\"\n               ReferencedContainer = \"container:tachyon.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8401172B152D6F6C00B07E4D\"\n            BuildableName = \"tachyon.serial.app\"\n            BlueprintName = \"tachyon.serial\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8401172B152D6F6C00B07E4D\"\n            BuildableName = \"tachyon.serial.app\"\n            BlueprintName = \"tachyon.serial\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"$(SRCROOT)/../dat/balls3.dat\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8401172B152D6F6C00B07E4D\"\n            BuildableName = \"tachyon.serial.app\"\n            BlueprintName = \"tachyon.serial\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.ios.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D3E786AC1C0E3588006995F1\"\n               BuildableName = \"tachyon.tbb.ios.app\"\n               BlueprintName = \"tachyon.tbb.ios\"\n               ReferencedContainer = \"container:tachyon.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3E786AC1C0E3588006995F1\"\n            BuildableName = \"tachyon.tbb.ios.app\"\n            BlueprintName = \"tachyon.tbb.ios\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Release\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3E786AC1C0E3588006995F1\"\n            BuildableName = \"tachyon.tbb.ios.app\"\n            BlueprintName = \"tachyon.tbb.ios\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D3E786AC1C0E3588006995F1\"\n            BuildableName = \"tachyon.tbb.ios.app\"\n            BlueprintName = \"tachyon.tbb.ios\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample\"\n               ReferencedContainer = \"container:tbbExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tachyon.tbb.app\"\n            BlueprintName = \"tachyon.tbb\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      customWorkingDirectory = \"/tmp\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tachyon.tbb.app\"\n            BlueprintName = \"tachyon.tbb\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"$(SRCROOT)/../dat/balls3.dat\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:tbbExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample\"\n               ReferencedContainer = \"container:tbbExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84011764152D6F8400B07E4D\"\n            BuildableName = \"tachyon.tbb1d.app\"\n            BlueprintName = \"tachyon.tbb1d\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      customWorkingDirectory = \"/tmp\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84011764152D6F8400B07E4D\"\n            BuildableName = \"tachyon.tbb1d.app\"\n            BlueprintName = \"tachyon.tbb1d\"\n            ReferencedContainer = \"container:tachyon.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"$(SRCROOT)/../dat/balls3.dat\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:tbbExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=convex_hull_bench\nARGS=\nPERF_RUN_ARGS = silent auto 40000000\nLIGHT_ARGS = 4 400\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb $(LIBS)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug $(LIBS)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) convex_hull_bench convex_hull_sample *.o *.d\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./convex_hull_sample $(PERF_RUN_ARGS)\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\nPROG=convex_hull_bench\nARGS=\nPERF_RUN_ARGS = silent auto 40000000\nLIGHT_ARGS = 4 400\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\n# Below, _SECURE_SCL=0 is for VC9 and earlier, and _ITERATOR_DEBUG_LEVEL=0 is for VC10 and later\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _ITERATOR_DEBUG_LEVEL=0 /D _SECURE_SCL=0 $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) convex_hull_sample.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe\n\t$(CXX) convex_hull_bench.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe\ndebug: compiler_check\n\t$(CXX) convex_hull_sample.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe\n\t$(CXX) convex_hull_bench.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe\nclean:\n\t@cmd.exe /C del convex_hull*.exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\nperf_build: release\n\nperf_run:\n\tconvex_hull_sample $(PERF_RUN_ARGS)\n\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/convex_hull.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __CONVEX_HULL_H__\n#define __CONVEX_HULL_H__\n\n#include <cassert>\n#include <cstdlib>\n#include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <vector>\n#include <string>\n#include <cstring>\n#include <algorithm>\n#include <functional>\n#include <climits>\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"../../common/utility/utility.h\"\n#include \"../../common/utility/fast_random.h\"\n\nusing namespace std;\n\nnamespace cfg {\n    // convex hull problem user set parameters\n    long   numberOfPoints  = 5000000; // problem size\n    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);\n\n    // convex hull grain sizes for 3 subproblems. Be sure 16*GS < 512Kb\n    const size_t generateGrainSize = 25000;\n    const size_t findExtremumGrainSize  = 25000;\n    const size_t divideGrainSize   = 25000;\n};\n\nnamespace util {\n    bool                     silent = false;\n    bool                     verbose = false;\n    vector<string> OUTPUT;\n\n    // utility functionality\n    void ParseInputArgs(int argc, char* argv[]) {\n        utility::parse_cli_arguments(\n                argc,argv,\n                utility::cli_argument_pack()\n                    //\"-h\" option for displaying help is present implicitly\n                    .positional_arg(cfg::threads,\"n-of-threads\",utility::thread_number_range_desc)\n                    .positional_arg(cfg::numberOfPoints,\"n-of-points\",\"number of points\")\n                    .arg(silent,\"silent\",\"no output except elapsed time\")\n                    .arg(verbose,\"verbose\",\"turns verbose ON\")\n        );\n        //disabling verbose if silent is specified\n        if (silent) verbose = false;;\n    }\n\n    template <typename T>\n    struct point {\n        T x;\n        T y;\n        //According to subparagraph 4 of paragraph 12.6.2 \"Initializing bases and members\" [class.base.init]\n        //of ANSI-ISO-IEC C++ 2003 standard, POD members will _not_ be initialized if they are not mentioned\n        //in the base-member initializer list.\n\n        //For more details why this needed please see comment in FillRNDPointsVector_buf\n        point() {}\n        point(T _x, T _y) : x(_x), y(_y) {}\n    };\n\n    std::ostream& operator<< (std::ostream& o, point<double> const& p) {\n        return o << \"(\" << p.x << \",\" << p.y << \")\";\n    }\n\n    struct rng {\n        static const size_t max_rand = USHRT_MAX;\n        utility::FastRandom my_fast_random;\n        rng (size_t seed):my_fast_random(seed) {}\n        unsigned short operator()(){return my_fast_random.get();}\n        unsigned short operator()(size_t& seed){return my_fast_random.get(seed);}\n    };\n\n\n    template < typename T ,typename rng_functor_type>\n    point<T> GenerateRNDPoint(size_t& count, rng_functor_type random, size_t rand_max) {\n        /* generates random points on 2D plane so that the cluster\n        is somewhat circle shaped */\n        const size_t maxsize=500;\n        T x = random()*2.0/(double)rand_max - 1;\n        T y = random()*2.0/(double)rand_max - 1;\n        T r = (x*x + y*y);\n        if(r>1) {\n            count++;\n            if(count>10) {\n                if (random()/(double)rand_max > 0.5)\n                    x /= r;\n                if (random()/(double)rand_max > 0.5)\n                    y /= r;\n                count = 0;\n            }\n            else {\n                x /= r;\n                y /= r;\n            }\n        }\n\n        x = (x+1)*0.5*maxsize;\n        y = (y+1)*0.5*maxsize;\n\n        return point<T>(x,y);\n    }\n\n    template <typename Index>\n    struct edge {\n        Index start;\n        Index end;\n        edge(Index _p1, Index _p2) : start(_p1), end(_p2) {};\n    };\n\n    template <typename T>\n    ostream& operator <<(ostream& _ostr, point<T> _p) {\n        return _ostr << '(' << _p.x << ',' << _p.y << ')';\n    }\n\n    template <typename T>\n    istream& operator >>(istream& _istr, point<T> _p) {\n        return _istr >> _p.x >> _p.y;\n    }\n\n    template <typename T>\n    bool operator ==(point<T> p1, point<T> p2) {\n        return (p1.x == p2.x && p1.y == p2.y);\n    }\n\n    template <typename T>\n    bool operator !=(point<T> p1, point<T> p2) {\n        return !(p1 == p2);\n    }\n\n    template <typename T>\n    double cross_product(const point<T>& start, const point<T>& end1, const point<T>& end2) {\n        return ((end1.x-start.x)*(end2.y-start.y)-(end2.x-start.x)*(end1.y-start.y));\n    }\n\n    // Timing functions are based on TBB to always obtain wall-clock time\n    typedef tbb::tick_count my_time_t;\n\n    my_time_t gettime() {\n        return tbb::tick_count::now();\n    }\n\n    double time_diff(my_time_t start, my_time_t end) {\n        return (end-start).seconds();\n    }\n\n    void WriteResults(int nthreads, double initTime, double calcTime) {\n        if(verbose) {\n            cout << \" Step by step hull construction:\" << endl;\n            for(size_t i = 0; i < OUTPUT.size(); ++i)\n                cout << OUTPUT[i] << endl;\n        }\n        if (!silent){\n            cout\n                << \"  Number of nodes:\" << cfg::numberOfPoints\n                << \"  Number of threads:\" << nthreads\n                << \"  Initialization time:\" << setw(10) << setprecision(3) << initTime\n                << \"  Calculation time:\" << setw(10) << setprecision(3) << calcTime\n                << endl;\n        }\n    }\n};\n\n#endif // __CONVEX_HULL_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains a few implementations, so it may look overly complicated.\n    The most efficient implementation is also separated into convex_hull_sample.cpp\n*/\n#include \"convex_hull.h\"\n\ntypedef util::point<double> point_t;\n\n#ifndef USETBB\n    #define USETBB      1\n#endif\n#ifndef USECONCVEC\n    #define USECONCVEC   1\n#endif\n\n#if !USETBB // Serial implementation of Quick Hull algorithm\n\ntypedef std::vector< point_t > pointVec_t;\n\nvoid serial_initialize(pointVec_t &points);\n\n// C++ style serial code\n\nclass FindXExtremum : public std::unary_function<const point_t&, void> {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    FindXExtremum(const point_t& frstPoint, extremumType exType_)\n        : extrXPoint(frstPoint), exType(exType_) {}\n\n    void operator()(const point_t& p) {\n        if(closerToExtremum(p))\n            extrXPoint = p;\n    }\n\n    operator point_t () {\n        return extrXPoint;\n    }\n\nprivate:\n    const extremumType   exType;\n    point_t              extrXPoint;\n\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &points) {\n    assert(!points.empty());\n    return std::for_each(points.begin(), points.end(), FindXExtremum(points[0], type));\n}\n\nclass SplitByCP : public std::unary_function<const point_t&, void> {\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n\n    SplitByCP( point_t _p1, point_t _p2, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2), reducedSet(_reducedSet), howFar(0), farPoint(p1) {}\n\n    void operator()(const point_t& p) {\n        double cp;\n        if( (p != p1) && (p != p2) ) {\n            cp = util::cross_product(p1, p2, p);\n            if(cp>0) {\n                reducedSet.push_back(p);\n                if(cp>howFar) {\n                    farPoint = p;\n                    howFar   = cp;\n                }\n            }\n        }\n    }\n\n    operator point_t (){\n        return farPoint;\n    }\n};\n\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced, const point_t &p1, const point_t &p2) {\n    SplitByCP splitByCP(p1, p2, P_reduced);\n    point_t farPoint = std::for_each(P.begin(), P.end(), splitByCP);\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << farPoint;\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return farPoint;\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t p2) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far = divide(P, P_reduced, p1, p2);\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n        H.insert(H.end(), P_reduced.begin(), P_reduced.end());\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far);\n        divide_and_conquer(P_reduced, H2, p_far, p2);\n\n        H.insert(H.end(), H1.begin(), H1.end());\n        H.insert(H.end(), H2.begin(), H2.end());\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull) {\n    if (points.size() < 2) {\n        hull.insert(hull.end(), points.begin(), points.end());\n        return;\n    }\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx);\n    divide_and_conquer(points, H, p_minx, p_maxx);\n    hull.insert(hull.end(), H.begin(), H.end());\n}\n\n\nint main(int argc, char* argv[]) {\n    util::ParseInputArgs(argc, argv);\n\n    pointVec_t      points;\n    pointVec_t      hull;\n    util::my_time_t tm_init, tm_start, tm_end;\n\n    std::cout << \"Starting serial version of QUICK HULL algorithm\" << std::endl;\n\n    tm_init = util::gettime();\n    serial_initialize(points);\n    tm_start = util::gettime();\n    std::cout << \"Init time: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n    tm_start = util::gettime();\n    quickhull(points, hull);\n    tm_end = util::gettime();\n    std::cout << \"Serial time: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n}\n\n#else // USETBB - parallel version of Quick Hull algorithm\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/blocked_range.h\"\n\ntypedef tbb::blocked_range<size_t> range_t;\n\n#if USECONCVEC\n#include \"tbb/concurrent_vector.h\"\n\ntypedef tbb::concurrent_vector<point_t> pointVec_t;\n\nvoid appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {\n    std::copy(src, src + srcSize, dest.grow_by(srcSize));\n}\n\nvoid appendVector(const pointVec_t& src, pointVec_t& dest) {\n    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));\n}\n\nvoid grow_vector_to_at_least(pointVec_t& vect, size_t size) {\n    vect.grow_to_at_least(size);\n}\n#else // USE STD::VECTOR - include spin_mutex.h and lock vector operations\n#include \"tbb/spin_mutex.h\"\n\ntypedef tbb::spin_mutex      mutex_t;\ntypedef std::vector<point_t> pointVec_t;\n\nvoid appendVector(mutex_t& insertMutex, const pointVec_t& src, pointVec_t& dest) {\n    mutex_t::scoped_lock lock(insertMutex);\n    dest.insert(dest.end(), src.begin(), src.end());\n}\n\nvoid appendVector(mutex_t& insertMutex, const point_t* src, size_t srcSize,\n                  pointVec_t& dest) {\n    mutex_t::scoped_lock lock(insertMutex);\n    dest.insert(dest.end(), src, src + srcSize);\n}\n\nvoid grow_vector_to_at_least(mutex_t& mutex, pointVec_t& vect, size_t size) {\n    mutex_t::scoped_lock lock(mutex);\n    if (vect.size()< size){\n        vect.resize(size);\n    }\n}\n#endif // USECONCVEC\n\nclass FillRNDPointsVector {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n#if !USECONCVEC\n    static mutex_t       pushBackMutex;\n#endif // USECONCVEC\n\n    explicit FillRNDPointsVector(pointVec_t& _points)\n        : points(_points){}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0;\n#if USECONCVEC\n            points.grow_to_at_least(i_end);\n#else // Locked enlarge to a not thread-safe STD::VECTOR\n            grow_vector_to_at_least(pushBackMutex,points,i_end);\n#endif // USECONCVEC\n\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            points[i]=util::GenerateRNDPoint<double>(count,the_rng,util::rng::max_rand);\n        }\n    }\n};\n\nclass FillRNDPointsVector_buf {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n#if !USECONCVEC\n    static mutex_t       insertMutex;\n#endif // USECONCVEC\n\n    explicit FillRNDPointsVector_buf(pointVec_t& _points)\n        : points(_points){}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0, j = 0;\n        point_t tmp_vec[grainSize];\n\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            tmp_vec[j++] = util::GenerateRNDPoint<double>(count,the_rng,util::rng::max_rand);\n        }\n#if USECONCVEC\n        grow_vector_to_at_least(points,range.end());\n#else // USE STD::VECTOR\n        grow_vector_to_at_least(insertMutex,points,range.end());\n#endif // USECONCVEC\n        std::copy(tmp_vec, tmp_vec+j,points.begin()+range.begin());\n    }   \n};\n\n#if !USECONCVEC\nmutex_t FillRNDPointsVector::pushBackMutex   = mutex_t();\nmutex_t FillRNDPointsVector_buf::insertMutex = mutex_t();\n#endif\n\ntemplate<typename BodyType>\nvoid initialize(pointVec_t &points) {\n    //This function generate the same series of point on every call.\n    //Reproducibility is needed for benchmarking to produce reliable results.\n    //It is achieved through the following points:\n    //      - FillRNDPointsVector_buf instance has its own local instance\n    //        of random number generator, which in turn does not use any global data\n    //      - tbb::simple_partitioner produce the same set of ranges on every call to\n    //        tbb::parallel_for\n    //      - local RNG instances are seeded by the starting indexes of corresponding ranges\n    //      - grow_to_at_least() enables putting points into the resulting vector in deterministic order\n    //        (unlike concurrent push_back or grow_by).\n\n    // In the buffered version, a temporary storage for as much as grainSize elements \n    // is allocated inside the body. Since auto_partitioner may increase effective\n    // range size which would cause a crash, simple partitioner has to be used.\n\n    tbb::parallel_for(range_t(0, cfg::numberOfPoints, BodyType::grainSize),\n    BodyType(points), tbb::simple_partitioner());\n}\n\nclass FindXExtremum {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    static const size_t  grainSize = cfg::findExtremumGrainSize;\n\n    FindXExtremum(const pointVec_t& points_, extremumType exType_)\n        : points(points_), exType(exType_), extrXPoint(points[0]) {}\n\n    FindXExtremum(const FindXExtremum& fxex, tbb::split)\n        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        if(!range.empty()) {\n            for(size_t i = range.begin(); i != i_end; ++i) {\n                if(closerToExtremum(points[i])) {\n                    extrXPoint = points[i];\n                }\n            }\n        }\n    }\n\n    void join(const FindXExtremum &rhs) {\n        if(closerToExtremum(rhs.extrXPoint)) {\n            extrXPoint = rhs.extrXPoint;\n        }\n    }\n\n    point_t extremeXPoint() {\n        return extrXPoint;\n    }\n\nprivate:\n    const pointVec_t    &points;\n    const extremumType   exType;\n    point_t              extrXPoint;\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &P) {\n    FindXExtremum fxBody(P, type);\n    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);\n    return fxBody.extremeXPoint();\n}\n\nclass SplitByCP {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t grainSize = cfg::divideGrainSize;\n#if !USECONCVEC\n    static mutex_t      pushBackMutex;\n#endif // USECONCVEC\n\n    SplitByCP( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {\n    }\n\n    SplitByCP( SplitByCP& sbcp, tbb::split )\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()( const range_t& range ) {\n        const size_t i_end = range.end();\n        double cp;\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {\n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n#if USECONCVEC\n                    reducedSet.push_back(initialSet[i]);\n#else // Locked push_back to a not thread-safe STD::VECTOR\n                    {\n                        mutex_t::scoped_lock lock(pushBackMutex);\n                        reducedSet.push_back(initialSet[i]);\n                    }\n#endif // USECONCVEC\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n    }\n\n    void join(const SplitByCP& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\nclass SplitByCP_buf {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t  grainSize = cfg::divideGrainSize;\n#if !USECONCVEC\n    static mutex_t       insertMutex;\n#endif // USECONCVEC\n\n    SplitByCP_buf( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        size_t j = 0;\n        double cp;\n        point_t tmp_vec[grainSize];\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            \n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n                    tmp_vec[j++] = initialSet[i];\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n\n#if USECONCVEC\n        appendVector(tmp_vec, j, reducedSet);\n#else // USE STD::VECTOR\n        appendVector(insertMutex, tmp_vec, j, reducedSet);\n#endif // USECONCVEC\n    }\n\n    void join(const SplitByCP_buf& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\n#if !USECONCVEC\nmutex_t SplitByCP::pushBackMutex   = mutex_t();\nmutex_t SplitByCP_buf::insertMutex = mutex_t();\n#endif\n\ntemplate <typename BodyType>\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced,\n              const point_t &p1, const point_t &p2) {\n    BodyType body(p1, p2, P, P_reduced);\n    // Must use simple_partitioner (see the comment in initialize() above)\n    tbb::parallel_reduce(range_t(0, P.size(), BodyType::grainSize),\n                         body, tbb::simple_partitioner() );\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << body.farthestPoint();\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return body.farthestPoint();\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H,\n                        point_t p1, point_t p2, bool buffered) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far;\n    \n    if(buffered) {\n        p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);\n    } else {\n        p_far = divide<SplitByCP>(P, P_reduced, p1, p2);\n    }\n\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n#if USECONCVEC\n        appendVector(P_reduced, H);\n#else // insert into STD::VECTOR\n        H.insert(H.end(), P_reduced.begin(), P_reduced.end());\n#endif\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far, buffered);\n        divide_and_conquer(P_reduced, H2, p_far, p2, buffered);\n\n#if USECONCVEC\n        appendVector(H1, H);\n        appendVector(H2, H);\n#else // insert into STD::VECTOR\n        H.insert(H.end(), H1.begin(), H1.end());\n        H.insert(H.end(), H2.begin(), H2.end());\n#endif\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull, bool buffered) {\n    if (points.size() < 2) {\n#if USECONCVEC\n        appendVector(points, hull);\n#else // STD::VECTOR\n        hull.insert(hull.end(), points.begin(), points.end());\n#endif // USECONCVEC\n        return;\n    }\n\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx, buffered);\n    divide_and_conquer(points, H, p_minx, p_maxx, buffered);\n#if USECONCVEC\n    appendVector(H, hull);\n#else // STD::VECTOR\n    hull.insert(hull.end(), H.begin(), H.end());\n#endif // USECONCVEC\n}\n\nint main(int argc, char* argv[]) {\n    util::ParseInputArgs(argc, argv);\n\n    int             nthreads;\n    util::my_time_t tm_init, tm_start, tm_end;\n\n#if USECONCVEC\n    std::cout << \"Starting TBB unbuffered push_back version of QUICK HULL algorithm\" << std::endl;\n#else\n    std::cout << \"Starting STL locked unbuffered push_back version of QUICK HULL algorithm\" << std::endl;\n#endif // USECONCVEC\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        pointVec_t      points;\n        pointVec_t      hull;\n\n        tbb::task_scheduler_init init(nthreads);\n        tm_init = util::gettime();\n        initialize<FillRNDPointsVector>(points);\n        tm_start = util::gettime();\n        std::cout << \"Parallel init time on \" << nthreads << \" threads: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n\n        tm_start = util::gettime();\n        quickhull(points, hull, false);\n        tm_end = util::gettime();\n        std::cout << \"Time on \" << nthreads << \" threads: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n    }\n\n#if USECONCVEC \n    std::cout << \"Starting TBB buffered version of QUICK HULL algorithm\" << std::endl;\n#else\n    std::cout << \"Starting STL locked buffered version of QUICK HULL algorithm\" << std::endl;\n#endif\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        pointVec_t      points;\n        pointVec_t      hull;\n\n        tbb::task_scheduler_init init(nthreads);\n\n        tm_init = util::gettime();\n        initialize<FillRNDPointsVector_buf>(points);\n        tm_start = util::gettime();\n        std::cout << \"Init time on \" << nthreads << \" threads: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n\n        tm_start = util::gettime();\n        quickhull(points, hull, true);\n        tm_end = util::gettime();\n        std::cout << \"Time on \" << nthreads << \" threads: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n    }    \n\n    return 0;\n}\n\n#endif // USETBB\n\nvoid serial_initialize(pointVec_t &points) {\n    points.reserve(cfg::numberOfPoints);\n\n    unsigned int rseed=1;\n    for(size_t i=0, count=0; long(i)<cfg::numberOfPoints; ++i) {\n        points.push_back(util::GenerateRNDPoint<double>(count,&std::rand,RAND_MAX ));\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains the TBB-based implementation of convex hull algortihm.\n    It corresponds to the following settings in convex_hull_bench.cpp:\n    - USETBB defined to 1\n    - USECONCVEC defined to 1\n    - INIT_ONCE defined to 0\n    - only buffered version is used\n*/\n#include \"convex_hull.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/concurrent_vector.h\"\n\ntypedef util::point<double>               point_t;\ntypedef tbb::concurrent_vector< point_t > pointVec_t;\ntypedef tbb::blocked_range<size_t>        range_t;\n\nvoid appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {\n    std::copy(src, src + srcSize, dest.grow_by(srcSize));\n}\n\nvoid appendVector(const pointVec_t& src, pointVec_t& dest) {\n    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));\n}\nclass FillRNDPointsVector_buf {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n\n    explicit FillRNDPointsVector_buf(pointVec_t& _points)\n        : points(_points) {}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0, j = 0;\n        point_t tmp_vec[grainSize];\n\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            tmp_vec[j++] = util::GenerateRNDPoint<double>(count, the_rng, util::rng::max_rand);\n        }\n        //Here we have race condition. Elements being written to may be still under construction.\n        //For C++ 2003 it is workarounded by vector element type which default constructor does not touch memory,\n        //it being constructed on. See comments near default ctor of point class for more details.\n        //Strictly speaking it is UB.\n        //TODO: need to find more reliable/correct way\n        points.grow_to_at_least(range.end());\n        std::copy(tmp_vec, tmp_vec+j,points.begin()+range.begin());\n    }\n};\n\nvoid initialize(pointVec_t &points) {\n    //This function generate the same series of point on every call.\n    //Reproducibility is needed for benchmarking to produce reliable results.\n    //It is achieved through the following points:\n    //      - FillRNDPointsVector_buf instance has its own local instance\n    //        of random number generator, which in turn does not use any global data\n    //      - tbb::simple_partitioner produce the same set of ranges on every call to\n    //        tbb::parallel_for\n    //      - local RNG instances are seeded by the starting indexes of corresponding ranges\n    //      - grow_to_at_least() enables putting points into the resulting vector in deterministic order\n    //        (unlike concurrent push_back or grow_by).\n\n    // In the buffered version, a temporary storage for as much as grainSize elements \n    // is allocated inside the body. Since auto_partitioner may increase effective\n    // range size which would cause a crash, simple partitioner has to be used.\n    tbb::parallel_for(range_t(0, cfg::numberOfPoints, FillRNDPointsVector_buf::grainSize),\n                      FillRNDPointsVector_buf(points), tbb::simple_partitioner());\n}\n\nclass FindXExtremum {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    static const size_t  grainSize = cfg::findExtremumGrainSize;\n\n    FindXExtremum(const pointVec_t& points_, extremumType exType_)\n        : points(points_), exType(exType_), extrXPoint(points[0]) {}\n\n    FindXExtremum(const FindXExtremum& fxex, tbb::split)\n        // Can run in parallel with fxex.operator()() or fxex.join().\n        // The data race reported by tools is harmless.\n        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        if(!range.empty()) {\n            for(size_t i = range.begin(); i != i_end; ++i) {\n                if(closerToExtremum(points[i])) {\n                    extrXPoint = points[i];\n                }\n            }\n        }\n    }\n\n    void join(const FindXExtremum &rhs) {\n        if(closerToExtremum(rhs.extrXPoint)) {\n            extrXPoint = rhs.extrXPoint;\n        }\n    }\n\n    point_t extremeXPoint() {\n        return extrXPoint;\n    }\n\nprivate:\n    const pointVec_t    &points;\n    const extremumType   exType;\n    point_t              extrXPoint;\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &P) {\n    FindXExtremum fxBody(P, type);\n    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);\n    return fxBody.extremeXPoint();\n}\n\nclass SplitByCP_buf {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t  grainSize = cfg::divideGrainSize;\n\n    SplitByCP_buf( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        size_t j = 0;\n        double cp;\n        point_t tmp_vec[grainSize];\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            \n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n                    tmp_vec[j++] = initialSet[i];\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n\n        appendVector(tmp_vec, j, reducedSet);\n    }\n\n    void join(const SplitByCP_buf& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced, \n                   const point_t &p1, const point_t &p2) {\n    SplitByCP_buf sbcpb(p1, p2, P, P_reduced);\n    // Must use simple_partitioner (see the comment in initialize() above)\n    tbb::parallel_reduce(range_t(0, P.size(), SplitByCP_buf::grainSize),\n                         sbcpb, tbb::simple_partitioner());\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << sbcpb.farthestPoint();\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return sbcpb.farthestPoint();\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H,\n                            point_t p1, point_t p2) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far = divide(P, P_reduced, p1, p2);\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n        appendVector(P_reduced, H);\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far);\n        divide_and_conquer(P_reduced, H2, p_far, p2);\n\n        appendVector(H1, H);\n        appendVector(H2, H);\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull) {\n    if (points.size() < 2) {\n        appendVector(points, hull);\n        return;\n    }\n\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx);\n    divide_and_conquer(points, H, p_minx, p_maxx);\n\n    appendVector(H, hull);\n}\n\nint main(int argc, char* argv[]) {\n    util::my_time_t tm_main_begin = util::gettime();\n\n    util::ParseInputArgs(argc, argv);\n\n    pointVec_t      points;\n    pointVec_t      hull;\n    int             nthreads;\n\n    points.reserve(cfg::numberOfPoints);\n\n    if(!util::silent) {\n        std::cout << \"Starting TBB-buffered version of QUICK HULL algorithm\" << std::endl;\n    }\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        tbb::task_scheduler_init init(nthreads);\n\n        points.clear();\n        util::my_time_t tm_init = util::gettime();\n        initialize(points);\n        util::my_time_t tm_start = util::gettime();\n        if(!util::silent) {\n            std::cout <<\"Init time on \"<<nthreads<<\" threads: \"<<util::time_diff(tm_init, tm_start)<<\"  Points in input: \"<<points.size()<<std::endl;\n        }\n\n        tm_start = util::gettime();\n        quickhull(points, hull);\n        util::my_time_t tm_end = util::gettime();\n        if(!util::silent) {\n            std::cout <<\"Time on \"<<nthreads<<\" threads: \"<<util::time_diff(tm_start, tm_end)<<\"  Points in hull: \"<<hull.size()<<std::endl;\n        }\n        hull.clear();\n    }\n    utility::report_elapsed_time(util::time_diff(tm_main_begin, util::gettime()));\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/msvs/convex_hull.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"convex_hull_sample\", \"convex_hull_sample.vcxproj\", \"{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"convex_hull_benchmark\", \"convex_hull_benchmark.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252A}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>convex_hull_benchmark</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>\n    <RootNamespace>convex_hull_benchmark</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>Full</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Full</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\convex_hull_bench.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\convex_hull.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>convex_hull_sample</ProjectName>\n    <ProjectGuid>{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}</ProjectGuid>\n    <RootNamespace>convex_hull_sample</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(ProjectName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <Optimization>Full</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Full</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\convex_hull_sample.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\convex_hull.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Convex_hull sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Convex_hull sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel version of convex hull algorithm (quick hull).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"convex_hull_sample.cpp\">convex_hull_sample.cpp</a>\n\t\t\t\t<dd>Source code for parallel version of the example which uses parallel_reduce, parallel_for and concurrent_vector.\n\t\t\t\t<dt><a href=\"convex_hull_bench.cpp\">convex_hull_bench.cpp</a>\n\t\t\t\t<dd>Source code for the version of the example that compares serial and parallel buffered and unbuffered implementations.\n\t\t\t\t<dt><a href=\"convex_hull.h\">convex_hull.h</a>\n\t\t\t\t<dd>Include file for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>convex_hull_sample [<i>S</i>] [<i>M</i>[:<i>N</i>]] [-v]</tt>\n\t\t\t\t<dd><i>S</i> is the number of points (problem size).\n\t\t\t\t\t<i>M:N</i> are a range of numbers of threads to be used.\n\t\t\t\t\tUse the -v option to turn on verbose output.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>convex_hull_sample&nbsp;500000&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14611490B94631F000C6B18 /* convex_hull_bench.cpp */; };\n\t\tA1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594F40B8F4E7700073279 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tA14611490B94631F000C6B18 /* convex_hull_bench.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_bench.cpp; path = ../convex_hull_bench.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA146114C0B9463CB000C6B18 /* convex_hull.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convex_hull.h; path = ../convex_hull.h; sourceTree = SOURCE_ROOT; };\n\t\tA1F593A50B8F042A00073279 /* convex_hull_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_sample.cpp; path = ../convex_hull_sample.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n\t\tA1F594EB0B8F4B5600073279 /* convex_hull_bench */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = convex_hull_bench; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F594FA0B8F4EE000073279 /* convex_hull_sample */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = convex_hull_sample; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594E90B8F4B5600073279 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* convex_hull */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = convex_hull;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA146114C0B9463CB000C6B18 /* convex_hull.h */,\n\t\t\t\tA14611490B94631F000C6B18 /* convex_hull_bench.cpp */,\n\t\t\t\tA1F593A50B8F042A00073279 /* convex_hull_sample.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F594EB0B8F4B5600073279 /* convex_hull_bench */,\n\t\t\t\tA1F594FA0B8F4EE000073279 /* convex_hull_sample */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* convex_hull_sample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"convex_hull_sample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = convex_hull_sample;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = convex_hull;\n\t\t\tproductReference = A1F594FA0B8F4EE000073279 /* convex_hull_sample */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tA1F594EA0B8F4B5600073279 /* convex_hull_bench */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget \"convex_hull_bench\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA1F594E80B8F4B5600073279 /* Sources */,\n\t\t\t\tA1F594E90B8F4B5600073279 /* Frameworks */,\n\t\t\t\tA1F594F40B8F4E7700073279 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = convex_hull_bench;\n\t\t\tproductName = convex_hull_bench;\n\t\t\tproductReference = A1F594EB0B8F4B5600073279 /* convex_hull_bench */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"convex_hull\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* convex_hull */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* convex_hull_sample */,\n\t\t\t\tA1F594EA0B8F4B5600073279 /* convex_hull_bench */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA1F594E80B8F4B5600073279 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_sample;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_sample;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_sample;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_sample;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F594EF0B8F4B8200073279 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_bench;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA1F594F00B8F4B8200073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_bench;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F594F10B8F4B8200073279 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_bench;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F594F20B8F4B8200073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = convex_hull_bench;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"convex_hull_sample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"convex_hull\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tA1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget \"convex_hull_bench\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA1F594EF0B8F4B8200073279 /* Debug */,\n\t\t\t\tA1F594F00B8F4B8200073279 /* Debug64 */,\n\t\t\t\tA1F594F10B8F4B8200073279 /* Release */,\n\t\t\t\tA1F594F20B8F4B8200073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_reduce</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_reduce</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_reduce</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"convex_hull/readme.html\">convex_hull</a>\n\t\t\t\t<dd>Parallel version of convex hull algorithm (quick hull).\n\t\t\t\t<dt><a href=\"primes/readme.html\">primes</a>\n\t\t\t\t<dd>Parallel version of the Sieve of Eratosthenes.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=primes\nARGS=\nPERF_RUN_ARGS=silent  auto 1000000000 1000 20\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: main.cpp primes.cpp \n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS)\n\ndebug: main.cpp primes.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest: \n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Primes\nARGS=0:auto\nPERF_RUN_ARGS=silent  auto 1000000000 1000 20\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) main.cpp primes.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) main.cpp primes.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"primes.h\"\n#include <cstdlib>\n#include <cstdio>\n#include <cstring>\n#include <cctype>\n#include <utility>\n#include <iostream>\n#include <sstream>\n#include \"tbb/tick_count.h\"\n\n#include \"../../common/utility/utility.h\"\n\nstruct RunOptions{\n    //! NumberType of threads to use.\n    utility::thread_number_range threads;\n    //whether to suppress additional output\n    bool silentFlag;\n    //\n    NumberType n;\n    //! Grain size parameter\n    NumberType grainSize;\n    // number of time to repeat calculation\n    NumberType repeatNumber;\n\n    RunOptions(utility::thread_number_range threads_, NumberType grainSize_, NumberType n_, bool silentFlag_, NumberType repeatNumber_)\n        : threads(threads_), silentFlag(silentFlag_), n(n_), grainSize(grainSize_), repeatNumber(repeatNumber_)\n    {}\n};\n\nint do_get_default_num_threads() {\n    int threads;\n    #if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n    #endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\n//! Parse the command line.\nstatic RunOptions ParseCommandLine( int argc, const char* argv[] ) {\n    utility::thread_number_range threads( get_default_num_threads, 0, get_default_num_threads() );\n    NumberType grainSize = 1000;\n    bool silent = false;\n    NumberType number = 100000000;\n    NumberType repeatNumber = 1;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(number,\"number\",\"upper bound of range to search primes in, must be a positive integer\")\n            .positional_arg(grainSize,\"grain-size\",\"must be a positive integer\")\n            .positional_arg(repeatNumber,\"n-of-repeats\",\"repeat the calculation this number of times, must be a positive integer\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n    );\n\n    RunOptions options(threads,grainSize, number, silent, repeatNumber);\n    return options;\n}\n\nint main( int argc, const char* argv[] ) {\n    tbb::tick_count mainBeginMark = tbb::tick_count::now();\n    RunOptions options =ParseCommandLine(argc,argv);\n\n    // Try different numbers of threads\n    for( int p=options.threads.first; p<=options.threads.last; p=options.threads.step(p) ) {\n        for (NumberType i=0; i<options.repeatNumber;++i){\n            tbb::tick_count iterationBeginMark = tbb::tick_count::now();\n            NumberType count = 0;\n            NumberType n = options.n;\n            if( p==0 ) {\n                #if __TBB_MIC_OFFLOAD\n                #pragma offload target(mic) in(n) out(count)\n                #endif // __TBB_MIC_OFFLOAD\n                count = SerialCountPrimes(n);\n            } else {\n                NumberType grainSize = options.grainSize;\n                #if __TBB_MIC_OFFLOAD\n                #pragma offload target(mic) in(n, p, grainSize) out(count)\n                #endif // __TBB_MIC_OFFLOAD\n                count = ParallelCountPrimes(n, p, grainSize);\n            }\n            tbb::tick_count iterationEndMark = tbb::tick_count::now();\n            if (!options.silentFlag){\n                std::cout\n                        <<\"#primes from [2..\" <<options.n<<\"] = \" << count\n                        <<\" (\"<<(iterationEndMark-iterationBeginMark).seconds()<< \" sec with \"\n                ;\n                if( 0 != p )\n                    std::cout<<p<<\"-way parallelism\";\n                else\n                    std::cout<<\"serial code\";\n                std::cout<<\")\\n\" ;\n            }\n        }\n    }\n    utility::report_elapsed_time((tbb::tick_count::now()-mainBeginMark).seconds());\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/msvs/primes.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"primes\", \"primes.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252A}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/msvs/primes.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>primes</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252A}</ProjectGuid>\n    <RootNamespace>primes</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\main.cpp\" />\n    <ClCompile Include=\"..\\primes.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\primes.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/primes.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Example program that computes number of prime numbers up to n, \n// where n is a command line argument.  The algorithm here is a \n// fairly efficient version of the sieve of Eratosthenes. \n// The parallel version demonstrates how to use parallel_reduce,\n// and in particular how to exploit lazy splitting.\n\n#include \"primes.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (target(mic))\n#endif // __TBB_MIC_OFFLOAD\n#include <algorithm>\n#include <cassert>\n#include <cstdio>\n#include <cstring>\n#include <math.h>\n#include <cstdlib>\n#include <cctype>\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nusing namespace std;\n\n//! If true, then print primes on stdout.\nstatic bool printPrimes = false;\n\n\nclass Multiples {\n    inline NumberType strike( NumberType start, NumberType limit, NumberType stride ) {\n        // Hoist \"my_is_composite\" into register for sake of speed.\n        bool* is_composite = my_is_composite;\n        assert( stride>=2 );\n        for( ;start<limit; start+=stride ) \n            is_composite[start] = true;\n        return start;\n    }\n    //! Window into conceptual sieve \n    bool* my_is_composite;\n\n    //! Indexes into window\n    /** my_striker[k] is an index into my_composite corresponding to\n        an odd multiple multiple of my_factor[k]. */\n    NumberType* my_striker;\n\n    //! Prime numbers less than m.\n    NumberType* my_factor;\npublic:\n    //! NumberType of factors in my_factor.\n    NumberType n_factor;\n    NumberType m;\n    Multiples( NumberType n ) {\n        m = NumberType(sqrt(double(n)));\n        // Round up to even\n        m += m&1;\n        my_is_composite = new bool[m/2];\n        my_striker = new NumberType[m/2];\n        my_factor = new NumberType[m/2];\n        n_factor = 0;\n        memset( my_is_composite, 0, m/2 );\n        for( NumberType i=3; i<m; i+=2 ) {\n            if( !my_is_composite[i/2] ) {\n                if( printPrimes )\n                    printf(\"%d\\n\",(int)i);\n                my_striker[n_factor] = strike( i/2, m/2, i );\n                my_factor[n_factor++] = i;\n            }\n        }\n    }\n\n    //! Find primes in range [start,window_size), advancing my_striker as we go.\n    /** Returns number of primes found. */\n    NumberType find_primes_in_window( NumberType start, NumberType window_size ) {\n        bool* is_composite = my_is_composite;\n        memset( is_composite, 0, window_size/2 );\n        for( size_t k=0; k<n_factor; ++k )\n            my_striker[k] = strike( my_striker[k]-m/2, window_size/2, my_factor[k] );\n        NumberType count = 0;\n        for( NumberType k=0; k<window_size/2; ++k ) {\n            if( !is_composite[k] ) {\n                if( printPrimes )\n                    printf(\"%ld\\n\",long(start+2*k+1));\n                ++count;\n            }\n        }\n        return count;\n    }\n\n    ~Multiples() {\n        delete[] my_factor;\n        delete[] my_striker;\n        delete[] my_is_composite;\n    }\n\n    //------------------------------------------------------------------------\n    // Begin extra members required by parallel version\n    //------------------------------------------------------------------------\n\n    // Splitting constructor\n    Multiples( const Multiples& f, tbb::split ) :\n        n_factor(f.n_factor),\n        m(f.m),\n        my_is_composite(NULL),\n        my_striker(NULL),\n        my_factor(f.my_factor)\n    {}\n\n    bool is_initialized() const {\n        return my_is_composite!=NULL;\n    }\n\n    void initialize( NumberType start ) { \n        assert( start>=1 );\n        my_is_composite = new bool[m/2];\n        my_striker = new NumberType[m/2];\n        for( size_t k=0; k<n_factor; ++k ) {\n            NumberType f = my_factor[k];\n            NumberType p = (start-1)/f*f % m;\n            my_striker[k] = (p&1 ? p+2*f : p+f)/2;\n            assert( m/2<=my_striker[k] );\n        }\n    }\n\n    // Move other to *this.\n    void move( Multiples& other ) {\n        // The swap moves the contents of other to *this and causes the old contents\n        // of *this to be deleted later when other is destroyed.\n        std::swap( my_striker, other.my_striker );\n        std::swap( my_is_composite, other.my_is_composite );\n        // other.my_factor is a shared pointer that was copied by the splitting constructor.\n        // Set it to NULL to prevent premature deletion by the destructor of ~other.\n        assert(my_factor==other.my_factor);\n        other.my_factor = NULL;\n    }\n\n    //------------------------------------------------------------------------\n    // End extra methods required by parallel version\n    //------------------------------------------------------------------------\n};\n\n//! Count number of primes between 0 and n\n/** This is the serial version. */\nNumberType SerialCountPrimes( NumberType n ) {\n    // Two is special case\n    NumberType count = n>=2;\n    if( n>=3 ) {\n        Multiples multiples(n);\n        count += multiples.n_factor;\n        if( printPrimes ) \n            printf(\"---\\n\");\n        NumberType window_size = multiples.m;\n        for( NumberType j=multiples.m; j<=n; j+=window_size ) { \n            if( j+window_size>n+1 ) \n                window_size = n+1-j;\n            count += multiples.find_primes_in_window( j, window_size );\n        }\n    }\n    return count;\n}\n\n//! Range of a sieve window.\nclass SieveRange {\n    //! Width of full-size window into sieve.\n    const NumberType my_stride;\n\n    //! Always multiple of my_stride\n    NumberType my_begin;\n\n    //! One past last number in window.\n    NumberType my_end;\n\n    //! Width above which it is worth forking.\n    const NumberType my_grainsize;\n\n    bool assert_okay() const {\n        assert( my_begin%my_stride==0 );\n        assert( my_begin<=my_end );\n        assert( my_stride<=my_grainsize );\n        return true;\n    } \npublic:\n    //------------------------------------------------------------------------\n    // Begin signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    bool is_divisible() const {return my_end-my_begin>my_grainsize;}\n    bool empty() const {return my_end<=my_begin;}\n    SieveRange( SieveRange& r, tbb::split ) :\n        my_stride(r.my_stride), \n        my_grainsize(r.my_grainsize),\n        my_end(r.my_end)\n    {\n        assert( r.is_divisible() );\n        assert( r.assert_okay() );\n        NumberType middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;\n        middle = middle/my_stride*my_stride;\n        my_begin = middle;\n        r.my_end = middle;\n        assert( assert_okay() );\n        assert( r.assert_okay() );\n    }\n    //------------------------------------------------------------------------\n    // End of signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    NumberType begin() const {return my_begin;}\n    NumberType end() const {return my_end;}\n    SieveRange( NumberType begin, NumberType end, NumberType stride, NumberType grainsize ) :\n        my_begin(begin),\n        my_end(end),\n        my_stride(stride),      \n        my_grainsize(grainsize<stride?stride:grainsize)\n    {\n        assert( assert_okay() );\n    }\n};\n\n//! Loop body for parallel_reduce.\n/** parallel_reduce splits the sieve into subsieves.\n    Each subsieve handles a subrange of [0..n]. */\nclass Sieve {\npublic:\n    //! Prime Multiples to consider, and working storage for this subsieve.\n    ::Multiples multiples;\n\n    //! NumberType of primes found so far by this subsieve.\n    NumberType count;\n\n    //! Construct Sieve for counting primes in [0..n].\n    Sieve( NumberType n ) :\n        multiples(n),\n        count(0)\n    {}\n\n    //------------------------------------------------------------------------\n    // Begin signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    void operator()( const SieveRange& r ) {\n        NumberType m = multiples.m;\n        if( multiples.is_initialized() ) { \n            // Simply reuse \"Multiples\" structure from previous window\n            // This works because parallel_reduce always applies\n            // *this from left to right.\n        } else {\n            // Need to initialize \"Multiples\" because *this is a forked copy\n            // that needs to be set up to start at r.begin().\n            multiples.initialize( r.begin() );\n        }\n        NumberType window_size = m;\n        for( NumberType j=r.begin(); j<r.end(); j+=window_size ) { \n            assert( j%multiples.m==0 );\n            if( j+window_size>r.end() ) \n                window_size = r.end()-j;\n            count += multiples.find_primes_in_window( j, window_size );\n        }\n    }\n    void join( Sieve& other ) {\n        count += other.count;\n        // Final value of multiples needs to final value of other multiples,\n        // so that *this can correctly process next window to right.\n        multiples.move( other.multiples );\n    }\n    Sieve( Sieve& other, tbb::split ) :\n        multiples(other.multiples,tbb::split()),\n        count(0)\n    {}\n    //------------------------------------------------------------------------\n    // End of signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n};\n\n//! Count number of primes between 0 and n\n/** This is the parallel version. */\nNumberType ParallelCountPrimes( NumberType n , int number_of_threads, NumberType grain_size ) {\n    tbb::task_scheduler_init init(number_of_threads);\n\n    // Two is special case\n    NumberType count = n>=2;\n    if( n>=3 ) {\n        Sieve s(n);\n        count += s.multiples.n_factor;\n        if( printPrimes )\n            printf(\"---\\n\");\n        using namespace tbb;\n        // Explicit grain size and simple_partitioner() used here instead of automatic grainsize \n        // determination becase we want SieveRange to be decomposed down to grainSize or smaller.  \n        // Doing so improves odds that the working set fits in cache when evaluating Sieve::operator().\n        parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, grain_size ), s, simple_partitioner() );\n        count += s.count;\n    }\n    return count;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/primes.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef PRIMES_H_\n#define PRIMES_H_\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include \"tbb/task_scheduler_init.h\"\n#include <cstddef>\ntypedef std::size_t NumberType;\n\n//! Count number of primes between 0 and n\n/** This is the serial version. */\nNumberType SerialCountPrimes( NumberType n);\n\n//! Count number of primes between 0 and n\n/** This is the parallel version. */\nNumberType ParallelCountPrimes( NumberType n, int numberOfThreads= tbb::task_scheduler_init::automatic, NumberType grainSize = 1000);\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\n#endif /* PRIMES_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Primes sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Primes sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel version of the Sieve of Eratosthenes.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"primes.h\">primes.h</a>\n\t\t\t\t<dd>The Sieve of Eratosthenes interface.\n\t\t\t\t<dt><a href=\"primes.cpp\">primes.cpp</a>\n\t\t\t\t<dd>The Sieve of Eratosthenes implementation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>primes <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>primes [<i>n-of-threads</i>=value] [<i>number</i>=value] [<i>grain-size</i>=value] [<i>n-of-repeats</i>=value] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>primes [<i>n-of-threads</i> [<i>number</i> [<i>grain-size</i> [<i>n-of-repeats</i>]]]][<i>silent</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>number</i> is an upper bound of range to search primes in, must be a positive integer.<br>\n\t\t\t\t\t<i>grain-size</i> is an optional grain size, must be a positive integer. <br>\n\t\t\t\t\t<i>n-of-repeats</i> is a number of the calculation repeats, must be a positive integer.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>primes&nbsp;4&nbsp;100000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* primes.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tEA8D882D1301731B00385DE1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA8D882C1301731B00385DE1 /* main.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* primes */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = primes; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = primes.cpp; path = ../primes.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n\t\tEA8D882B130172E400385DE1 /* primes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = primes.h; path = ../primes.h; sourceTree = SOURCE_ROOT; };\n\t\tEA8D882C1301731B00385DE1 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* primes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = primes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEA8D882C1301731B00385DE1 /* main.cpp */,\n\t\t\t\tEA8D882B130172E400385DE1 /* primes.h */,\n\t\t\t\tA1F593A50B8F042A00073279 /* primes.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* primes */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* primes */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"primes\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = primes;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = primes;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* primes */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"primes\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* primes */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* primes */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* primes.cpp in Sources */,\n\t\t\t\tEA8D882D1301731B00385DE1 /* main.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = primes;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = primes;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = primes;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = primes;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"primes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"primes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on pipeline algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>pipeline</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>pipeline</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"square/readme.html\">square</a>\n\t\t\t\t<dd>Another simple string transformation example that squares numbers read from a file.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=square\nARGS=0 input.txt output.txt\nPERF_RUN_ARGS=auto input.txt output.txt silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nSOURCES = square.cpp gen_input.cpp\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: $(SOURCES)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: $(SOURCES)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d input.txt output.txt\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: $(SOURCES)\n\t$(CXX) -O2 -msse2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=square\nARGS=0 input.txt output.txt\nPERF_RUN_ARGS=auto input.txt output.txt silent\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\nSOURCES = square.cpp gen_input.cpp\n\nall: release test\nrelease: compiler_check\n\t$(CXX) $(SOURCES) /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) $(SOURCES) /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest gen_input.exe\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\nperf_build: release\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/gen_input.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdexcept>\n\n#if _WIN32\n#include <io.h>\n#ifndef F_OK\n#define F_OK 0\n#endif\n#define access _access\n#else\n#include <unistd.h>\n#endif\n\nconst long INPUT_SIZE = 1000000;\n\n//! Generates sample input for square.cpp\nvoid gen_input( const char *fname ) {\n    long num = INPUT_SIZE;\n    FILE *fptr = fopen(fname, \"w\");\n    if(!fptr) {\n        throw std::runtime_error(\"Could not open file for generating input\");\n    }\n\n    int a=0;\n    int b=1;\n    for( long j=0; j<num; ++j ) {\n        fprintf(fptr, \"%u\\n\",a);\n        b+=a;\n        a=(b-a)%10000;\n        if (a<0) a=-a;\n    }\n\n    if(fptr) {\n        fclose(fptr);\n    }\n}\n\nvoid generate_if_needed( const char *fname ) {\n    if ( access(fname, F_OK) != 0 )\n        gen_input(fname);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/input.txt",
    "content": "0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n9897\n2288\n2185\n4473\n6658\n1131\n7789\n8920\n6709\n5629\n2338\n7967\n305\n8272\n8577\n6849\n5426\n2275\n7701\n9976\n7677\n7653\n5330\n2983\n8313\n1296\n9609\n905\n514\n1419\n1933\n3352\n5285\n8637\n3922\n2559\n6481\n9040\n5521\n4561\n82\n4643\n4725\n9368\n4093\n3461\n7554\n1015\n8569\n9584\n8153\n7737\n5890\n3627\n9517\n3144\n2661\n5805\n8466\n4271\n2737\n7008\n9745\n6753\n6498\n3251\n9749\n3000\n2749\n5749\n8498\n4247\n2745\n6992\n9737\n6729\n6466\n3195\n9661\n2856\n2517\n5373\n7890\n3263\n1153\n4416\n5569\n9985\n5554\n5539\n1093\n6632\n7725\n4357\n2082\n6439\n8521\n4960\n3481\n8441\n1922\n363\n2285\n2648\n4933\n7581\n2514\n95\n2609\n2704\n5313\n8017\n3330\n1347\n4677\n6024\n701\n6725\n7426\n4151\n1577\n5728\n7305\n3033\n338\n3371\n3709\n7080\n789\n7869\n8658\n6527\n5185\n1712\n6897\n8609\n5506\n4115\n9621\n3736\n3357\n7093\n450\n7543\n7993\n5536\n3529\n9065\n2594\n1659\n4253\n5912\n165\n6077\n6242\n2319\n8561\n880\n9441\n321\n9762\n83\n9845\n9928\n9773\n9701\n9474\n9175\n8649\n7824\n6473\n4297\n770\n5067\n5837\n904\n6741\n7645\n4386\n2031\n6417\n8448\n4865\n3313\n8178\n1491\n9669\n1160\n829\n1989\n2818\n4807\n7625\n2432\n57\n2489\n2546\n5035\n7581\n2616\n197\n2813\n3010\n5823\n8833\n4656\n3489\n8145\n1634\n9779\n1413\n1192\n2605\n3797\n6402\n199\n6601\n6800\n3401\n201\n3602\n3803\n7405\n1208\n8613\n9821\n8434\n8255\n6689\n4944\n1633\n6577\n8210\n4787\n2997\n7784\n781\n8565\n9346\n7911\n7257\n5168\n2425\n7593\n18\n7611\n7629\n5240\n2869\n8109\n978\n9087\n65\n9152\n9217\n8369\n7586\n5955\n3541\n9496\n3037\n2533\n5570\n8103\n3673\n1776\n5449\n7225\n2674\n9899\n2573\n2472\n5045\n7517\n2562\n79\n2641\n2720\n5361\n8081\n3442\n1523\n4965\n6488\n1453\n7941\n9394\n7335\n6729\n4064\n793\n4857\n5650\n507\n6157\n6664\n2821\n9485\n2306\n1791\n4097\n5888\n9985\n5873\n5858\n1731\n7589\n9320\n6909\n6229\n3138\n9367\n2505\n1872\n4377\n6249\n626\n6875\n7501\n4376\n1877\n6253\n8130\n4383\n2513\n6896\n9409\n6305\n5714\n2019\n7733\n9752\n7485\n7237\n4722\n1959\n6681\n8640\n5321\n3961\n9282\n3243\n2525\n5768\n8293\n4061\n2354\n6415\n8769\n5184\n3953\n9137\n3090\n2227\n5317\n7544\n2861\n405\n3266\n3671\n6937\n608\n7545\n8153\n5698\n3851\n9549\n3400\n2949\n6349\n9298\n5647\n4945\n592\n5537\n6129\n1666\n7795\n9461\n7256\n6717\n3973\n690\n4663\n5353\n16\n5369\n5385\n754\n6139\n6893\n3032\n9925\n2957\n2882\n5839\n8721\n4560\n3281\n7841\n1122\n8963\n85\n9048\n9133\n8181\n7314\n5495\n2809\n8304\n1113\n9417\n530\n9947\n477\n424\n901\n1325\n2226\n3551\n5777\n9328\n5105\n4433\n9538\n3971\n3509\n7480\n989\n8469\n9458\n7927\n7385\n5312\n2697\n8009\n706\n8715\n9421\n8136\n7557\n5693\n3250\n8943\n2193\n1136\n3329\n4465\n7794\n2259\n53\n2312\n2365\n4677\n7042\n1719\n8761\n480\n9241\n9721\n8962\n8683\n7645\n6328\n3973\n301\n4274\n4575\n8849\n3424\n2273\n5697\n7970\n3667\n1637\n5304\n6941\n2245\n9186\n1431\n617\n2048\n2665\n4713\n7378\n2091\n9469\n1560\n1029\n2589\n3618\n6207\n9825\n6032\n5857\n1889\n7746\n9635\n7381\n7016\n4397\n1413\n5810\n7223\n3033\n256\n3289\n3545\n6834\n379\n7213\n7592\n4805\n2397\n7202\n9599\n6801\n6400\n3201\n9601\n2802\n2403\n5205\n7608\n2813\n421\n3234\n3655\n6889\n544\n7433\n7977\n5410\n3387\n8797\n2184\n981\n3165\n4146\n7311\n1457\n8768\n225\n8993\n9218\n8211\n7429\n5640\n3069\n8709\n1778\n487\n2265\n2752\n5017\n7769\n2786\n555\n3341\n3896\n7237\n1133\n8370\n9503\n7873\n7376\n5249\n2625\n7874\n499\n8373\n8872\n7245\n6117\n3362\n9479\n2841\n2320\n5161\n7481\n2642\n123\n2765\n2888\n5653\n8541\n4194\n2735\n6929\n9664\n6593\n6257\n2850\n9107\n1957\n1064\n3021\n4085\n7106\n1191\n8297\n9488\n7785\n7273\n5058\n2331\n7389\n9720\n7109\n6829\n3938\n767\n4705\n5472\n177\n5649\n5826\n1475\n7301\n8776\n6077\n4853\n930\n5783\n6713\n2496\n9209\n1705\n914\n2619\n3533\n6152\n9685\n5837\n5522\n1359\n6881\n8240\n5121\n3361\n8482\n1843\n325\n2168\n2493\n4661\n7154\n1815\n8969\n784\n9753\n537\n290\n827\n1117\n1944\n3061\n5005\n8066\n3071\n1137\n4208\n5345\n9553\n4898\n4451\n9349\n3800\n3149\n6949\n98\n7047\n7145\n4192\n1337\n5529\n6866\n2395\n9261\n1656\n917\n2573\n3490\n6063\n9553\n5616\n5169\n785\n5954\n6739\n2693\n9432\n2125\n1557\n3682\n5239\n8921\n4160\n3081\n7241\n322\n7563\n7885\n5448\n3333\n8781\n2114\n895\n3009\n3904\n6913\n817\n7730\n8547\n6277\n4824\n1101\n5925\n7026\n2951\n9977\n2928\n2905\n5833\n8738\n4571\n3309\n7880\n1189\n9069\n258\n9327\n9585\n8912\n8497\n7409\n5906\n3315\n9221\n2536\n1757\n4293\n6050\n343\n6393\n6736\n3129\n9865\n2994\n2859\n5853\n8712\n4565\n3277\n7842\n1119\n8961\n80\n9041\n9121\n8162\n7283\n5445\n2728\n8173\n901\n9074\n9975\n9049\n9024\n8073\n7097\n5170\n2267\n7437\n9704\n7141\n6845\n3986\n831\n4817\n5648\n465\n6113\n6578\n2691\n9269\n1960\n1229\n3189\n4418\n7607\n2025\n9632\n1657\n1289\n2946\n4235\n7181\n1416\n8597\n13\n8610\n8623\n7233\n5856\n3089\n8945\n2034\n979\n3013\n3992\n7005\n997\n8002\n8999\n7001\n6000\n3001\n9001\n2002\n1003\n3005\n4008\n7013\n1021\n8034\n9055\n7089\n6144\n3233\n9377\n2610\n1987\n4597\n6584\n1181\n7765\n8946\n6711\n5657\n2368\n8025\n393\n8418\n8811\n7229\n6040\n3269\n9309\n2578\n1887\n4465\n6352\n817\n7169\n7986\n5155\n3141\n8296\n1437\n9733\n1170\n903\n2073\n2976\n5049\n8025\n3074\n1099\n4173\n5272\n9445\n4717\n4162\n8879\n3041\n1920\n4961\n6881\n1842\n8723\n565\n9288\n9853\n9141\n8994\n8135\n7129\n5264\n2393\n7657\n50\n7707\n7757\n5464\n3221\n8685\n1906\n591\n2497\n3088\n5585\n8673\n4258\n2931\n7189\n120\n7309\n7429\n4738\n2167\n6905\n9072\n5977\n5049\n1026\n6075\n7101\n3176\n277\n3453\n3730\n7183\n913\n8096\n9009\n7105\n6114\n3219\n9333\n2552\n1885\n4437\n6322\n759\n7081\n7840\n4921\n2761\n7682\n443\n8125\n8568\n6693\n5261\n1954\n7215\n9169\n6384\n5553\n1937\n7490\n9427\n6917\n6344\n3261\n9605\n2866\n2471\n5337\n7808\n3145\n953\n4098\n5051\n9149\n4200\n3349\n7549\n898\n8447\n9345\n7792\n7137\n4929\n2066\n6995\n9061\n6056\n5117\n1173\n6290\n7463\n3753\n1216\n4969\n6185\n1154\n7339\n8493\n5832\n4325\n157\n4482\n4639\n9121\n3760\n2881\n6641\n9522\n6163\n5685\n1848\n7533\n9381\n6914\n6295\n3209\n9504\n2713\n2217\n4930\n7147\n2077\n9224\n1301\n525\n1826\n2351\n4177\n6528\n705\n7233\n7938\n5171\n3109\n8280\n1389\n9669\n1058\n727\n1785\n2512\n4297\n6809\n1106\n7915\n9021\n6936\n5957\n2893\n8850\n1743\n593\n2336\n2929\n5265\n8194\n3459\n1653\n5112\n6765\n1877\n8642\n519\n9161\n9680\n8841\n8521\n7362\n5883\n3245\n9128\n2373\n1501\n3874\n5375\n9249\n4624\n3873\n8497\n2370\n867\n3237\n4104\n7341\n1445\n8786\n231\n9017\n9248\n8265\n7513\n5778\n3291\n9069\n2360\n1429\n3789\n5218\n9007\n4225\n3232\n7457\n689\n8146\n8835\n6981\n5816\n2797\n8613\n1410\n23\n1433\n1456\n2889\n4345\n7234\n1579\n8813\n392\n9205\n9597\n8802\n8399\n7201\n5600\n2801\n8401\n1202\n9603\n805\n408\n1213\n1621\n2834\n4455\n7289\n1744\n9033\n777\n9810\n587\n397\n984\n1381\n2365\n3746\n6111\n9857\n5968\n5825\n1793\n7618\n9411\n7029\n6440\n3469\n9909\n3378\n3287\n6665\n9952\n6617\n6569\n3186\n9755\n2941\n2696\n5637\n8333\n3970\n2303\n6273\n8576\n4849\n3425\n8274\n1699\n9973\n1672\n1645\n3317\n4962\n8279\n3241\n1520\n4761\n6281\n1042\n7323\n8365\n5688\n4053\n9741\n3794\n3535\n7329\n864\n8193\n9057\n7250\n6307\n3557\n9864\n3421\n3285\n6706\n9991\n6697\n6688\n3385\n73\n3458\n3531\n6989\n520\n7509\n8029\n5538\n3567\n9105\n2672\n1777\n4449\n6226\n675\n6901\n7576\n4477\n2053\n6530\n8583\n5113\n3696\n8809\n2505\n1314\n3819\n5133\n8952\n4085\n3037\n7122\n159\n7281\n7440\n4721\n2161\n6882\n9043\n5925\n4968\n893\n5861\n6754\n2615\n9369\n1984\n1353\n3337\n4690\n8027\n2717\n744\n3461\n4205\n7666\n1871\n9537\n1408\n945\n2353\n3298\n5651\n8949\n4600\n3549\n8149\n1698\n9847\n1545\n1392\n2937\n4329\n7266\n1595\n8861\n456\n9317\n9773\n9090\n8863\n7953\n6816\n4769\n1585\n6354\n7939\n4293\n2232\n6525\n8757\n5282\n4039\n9321\n3360\n2681\n6041\n8722\n4763\n3485\n8248\n1733\n9981\n1714\n1695\n3409\n5104\n8513\n3617\n2130\n5747\n7877\n3624\n1501\n5125\n6626\n1751\n8377\n128\n8505\n8633\n7138\n5771\n2909\n8680\n1589\n269\n1858\n2127\n3985\n6112\n97\n6209\n6306\n2515\n8821\n1336\n157\n1493\n1650\n3143\n4793\n7936\n2729\n665\n3394\n4059\n7453\n1512\n8965\n477\n9442\n9919\n9361\n9280\n8641\n7921\n6562\n4483\n1045\n5528\n6573\n2101\n8674\n775\n9449\n224\n9673\n9897\n9570\n9467\n9037\n8504\n7541\n6045\n3586\n9631\n3217\n2848\n6065\n8913\n4978\n3891\n8869\n2760\n1629\n4389\n6018\n407\n6425\n6832\n3257\n89\n3346\n3435\n6781\n216\n6997\n7213\n4210\n1423\n5633\n7056\n2689\n9745\n2434\n2179\n4613\n6792\n1405\n8197\n9602\n7799\n7401\n5200\n2601\n7801\n402\n8203\n8605\n6808\n5413\n2221\n7634\n9855\n7489\n7344\n4833\n2177\n7010\n9187\n6197\n5384\n1581\n6965\n8546\n5511\n4057\n9568\n3625\n3193\n6818\n11\n6829\n6840\n3669\n509\n4178\n4687\n8865\n3552\n2417\n5969\n8386\n4355\n2741\n7096\n9837\n6933\n6770\n3703\n473\n4176\n4649\n8825\n3474\n2299\n5773\n8072\n3845\n1917\n5762\n7679\n3441\n1120\n4561\n5681\n242\n5923\n6165\n2088\n8253\n341\n8594\n8935\n7529\n6464\n3993\n457\n4450\n4907\n9357\n4264\n3621\n7885\n1506\n9391\n897\n288\n1185\n1473\n2658\n4131\n6789\n920\n7709\n8629\n6338\n4967\n1305\n6272\n7577\n3849\n1426\n5275\n6701\n1976\n8677\n653\n9330\n9983\n9313\n9296\n8609\n7905\n6514\n4419\n933\n5352\n6285\n1637\n7922\n9559\n7481\n7040\n4521\n1561\n6082\n7643\n3725\n1368\n5093\n6461\n1554\n8015\n9569\n7584\n7153\n4737\n1890\n6627\n8517\n5144\n3661\n8805\n2466\n1271\n3737\n5008\n8745\n3753\n2498\n6251\n8749\n5000\n3749\n8749\n2498\n1247\n3745\n4992\n8737\n3729\n2466\n6195\n8661\n4856\n3517\n8373\n1890\n263\n2153\n2416\n4569\n6985\n1554\n8539\n93\n8632\n8725\n7357\n6082\n3439\n9521\n2960\n2481\n5441\n7922\n3363\n1285\n4648\n5933\n581\n6514\n7095\n3609\n704\n4313\n5017\n9330\n4347\n3677\n8024\n1701\n9725\n1426\n1151\n2577\n3728\n6305\n33\n6338\n6371\n2709\n9080\n1789\n869\n2658\n3527\n6185\n9712\n5897\n5609\n1506\n7115\n8621\n5736\n4357\n93\n4450\n4543\n8993\n3536\n2529\n6065\n8594\n4659\n3253\n7912\n1165\n9077\n242\n9319\n9561\n8880\n8441\n7321\n5762\n3083\n8845\n1928\n773\n2701\n3474\n6175\n9649\n5824\n5473\n1297\n6770\n8067\n4837\n2904\n7741\n645\n8386\n9031\n7417\n6448\n3865\n313\n4178\n4491\n8669\n3160\n1829\n4989\n6818\n1807\n8625\n432\n9057\n9489\n8546\n8035\n6581\n4616\n1197\n5813\n7010\n2823\n9833\n2656\n2489\n5145\n7634\n2779\n413\n3192\n3605\n6797\n402\n7199\n7601\n4800\n2401\n7201\n9602\n6803\n6405\n3208\n9613\n2821\n2434\n5255\n7689\n2944\n633\n3577\n4210\n7787\n1997\n9784\n1781\n1565\n3346\n4911\n8257\n3168\n1425\n4593\n6018\n611\n6629\n7240\n3869\n1109\n4978\n6087\n1065\n7152\n8217\n5369\n3586\n8955\n2541\n1496\n4037\n5533\n9570\n5103\n4673\n9776\n4449\n4225\n8674\n2899\n1573\n4472\n6045\n517\n6562\n7079\n3641\n720\n4361\n5081\n9442\n4523\n3965\n8488\n2453\n941\n3394\n4335\n7729\n2064\n9793\n1857\n1650\n3507\n5157\n8664\n3821\n2485\n6306\n8791\n5097\n3888\n8985\n2873\n1858\n4731\n6589\n1320\n7909\n9229\n7138\n6367\n3505\n9872\n3377\n3249\n6626\n9875\n6501\n6376\n2877\n9253\n2130\n1383\n3513\n4896\n8409\n3305\n1714\n5019\n6733\n1752\n8485\n237\n8722\n8959\n7681\n6640\n4321\n961\n5282\n6243\n1525\n7768\n9293\n7061\n6354\n3415\n9769\n3184\n2953\n6137\n9090\n5227\n4317\n9544\n3861\n3405\n7266\n671\n7937\n8608\n6545\n5153\n1698\n6851\n8549\n5400\n3949\n9349\n3298\n2647\n5945\n8592\n4537\n3129\n7666\n795\n8461\n9256\n7717\n6973\n4690\n1663\n6353\n8016\n4369\n2385\n6754\n9139\n5893\n5032\n925\n5957\n6882\n2839\n9721\n2560\n2281\n4841\n7122\n1963\n9085\n1048\n133\n1181\n1314\n2495\n3809\n6304\n113\n6417\n6530\n2947\n9477\n2424\n1901\n4325\n6226\n551\n6777\n7328\n4105\n1433\n5538\n6971\n2509\n9480\n1989\n1469\n3458\n4927\n8385\n3312\n1697\n5009\n6706\n1715\n8421\n136\n8557\n8693\n7250\n5943\n3193\n9136\n2329\n1465\n3794\n5259\n9053\n4312\n3365\n7677\n1042\n8719\n9761\n8480\n8241\n6721\n4962\n1683\n6645\n8328\n4973\n3301\n8274\n1575\n9849\n1424\n1273\n2697\n3970\n6667\n637\n7304\n7941\n5245\n3186\n8431\n1617\n48\n1665\n1713\n3378\n5091\n8469\n3560\n2029\n5589\n7618\n3207\n825\n4032\n4857\n8889\n3746\n2635\n6381\n9016\n5397\n4413\n9810\n4223\n4033\n8256\n2289\n545\n2834\n3379\n6213\n9592\n5805\n5397\n1202\n6599\n7801\n4400\n2201\n6601\n8802\n5403\n4205\n9608\n3813\n3421\n7234\n655\n7889\n8544\n6433\n4977\n1410\n6387\n7797\n4184\n1981\n6165\n8146\n4311\n2457\n6768\n9225\n5993\n5218\n1211\n6429\n7640\n4069\n1709\n5778\n7487\n3265\n752\n4017\n4769\n8786\n3555\n2341\n5896\n8237\n4133\n2370\n6503\n8873\n5376\n4249\n9625\n3874\n3499\n7373\n872\n8245\n9117\n7362\n6479\n3841\n320\n4161\n4481\n8642\n3123\n1765\n4888\n6653\n1541\n8194\n9735\n7929\n7664\n5593\n3257\n8850\n2107\n957\n3064\n4021\n7085\n1106\n8191\n9297\n7488\n6785\n4273\n1058\n5331\n6389\n1720\n8109\n9829\n7938\n7767\n5705\n3472\n9177\n2649\n1826\n4475\n6301\n776\n7077\n7853\n4930\n2783\n7713\n496\n8209\n8705\n6914\n5619\n2533\n8152\n685\n8837\n9522\n8359\n7881\n6240\n4121\n361\n4482\n4843\n9325\n4168\n3493\n7661\n1154\n8815\n9969\n8784\n8753\n7537\n6290\n3827\n117\n3944\n4061\n8005\n2066\n71\n2137\n2208\n4345\n6553\n898\n7451\n8349\n5800\n4149\n9949\n4098\n4047\n8145\n2192\n337\n2529\n2866\n5395\n8261\n3656\n1917\n5573\n7490\n3063\n553\n3616\n4169\n7785\n1954\n9739\n1693\n1432\n3125\n4557\n7682\n2239\n9921\n2160\n2081\n4241\n6322\n563\n6885\n7448\n4333\n1781\n6114\n7895\n4009\n1904\n5913\n7817\n3730\n1547\n5277\n6824\n2101\n8925\n1026\n9951\n977\n928\n1905\n2833\n4738\n7571\n2309\n9880\n2189\n2069\n4258\n6327\n585\n6912\n7497\n4409\n1906\n6315\n8221\n4536\n2757\n7293\n50\n7343\n7393\n4736\n2129\n6865\n8994\n5859\n4853\n712\n5565\n6277\n1842\n8119\n9961\n8080\n8041\n6121\n4162\n283\n4445\n4728\n9173\n3901\n3074\n6975\n49\n7024\n7073\n4097\n1170\n5267\n6437\n1704\n8141\n9845\n7986\n7831\n5817\n3648\n9465\n3113\n2578\n5691\n8269\n3960\n2229\n6189\n8418\n4607\n3025\n7632\n657\n8289\n8946\n7235\n6181\n3416\n9597\n3013\n2610\n5623\n8233\n3856\n2089\n5945\n8034\n3979\n2013\n5992\n8005\n3997\n2002\n5999\n8001\n4000\n2001\n6001\n8002\n4003\n2005\n6008\n8013\n4021\n2034\n6055\n8089\n4144\n2233\n6377\n8610\n4987\n3597\n8584\n2181\n765\n2946\n3711\n6657\n368\n7025\n7393\n4418\n1811\n6229\n8040\n4269\n2309\n6578\n8887\n5465\n4352\n9817\n4169\n3986\n8155\n2141\n296\n2437\n2733\n5170\n7903\n3073\n976\n4049\n5025\n9074\n4099\n3173\n7272\n445\n7717\n8162\n5879\n4041\n9920\n3961\n3881\n7842\n1723\n9565\n1288\n853\n2141\n2994\n5135\n8129\n3264\n1393\n4657\n6050\n707\n6757\n7464\n4221\n1685\n5906\n7591\n3497\n1088\n4585\n5673\n258\n5931\n6189\n2120\n8309\n429\n8738\n9167\n7905\n7072\n4977\n2049\n7026\n9075\n6101\n5176\n1277\n6453\n7730\n4183\n1913\n6096\n8009\n4105\n2114\n6219\n8333\n4552\n2885\n7437\n322\n7759\n8081\n5840\n3921\n9761\n3682\n3443\n7125\n568\n7693\n8261\n5954\n4215\n169\n4384\n4553\n8937\n3490\n2427\n5917\n8344\n4261\n2605\n6866\n9471\n6337\n5808\n2145\n7953\n98\n8051\n8149\n6200\n4349\n549\n4898\n5447\n345\n5792\n6137\n1929\n8066\n9995\n8061\n8056\n6117\n4173\n290\n4463\n4753\n9216\n3969\n3185\n7154\n339\n7493\n7832\n5325\n3157\n8482\n1639\n121\n1760\n1881\n3641\n5522\n9163\n4685\n3848\n8533\n2381\n914\n3295\n4209\n7504\n1713\n9217\n930\n147\n1077\n1224\n2301\n3525\n5826\n9351\n5177\n4528\n9705\n4233\n3938\n8171\n2109\n280\n2389\n2669\n5058\n7727\n2785\n512\n3297\n3809\n7106\n915\n8021\n8936\n6957\n5893\n2850\n8743\n1593\n336\n1929\n2265\n4194\n6459\n653\n7112\n7765\n4877\n2642\n7519\n161\n7680\n7841\n5521\n3362\n8883\n2245\n1128\n3373\n4501\n7874\n2375\n249\n2624\n2873\n5497\n8370\n3867\n2237\n6104\n8341\n4445\n2786\n7231\n17\n7248\n7265\n4513\n1778\n6291\n8069\n4360\n2429\n6789\n9218\n6007\n5225\n1232\n6457\n7689\n4146\n1835\n5981\n7816\n3797\n1613\n5410\n7023\n2433\n9456\n1889\n1345\n3234\n4579\n7813\n2392\n205\n2597\n2802\n5399\n8201\n3600\n1801\n5401\n7202\n2603\n9805\n2408\n2213\n4621\n6834\n1455\n8289\n9744\n8033\n7777\n5810\n3587\n9397\n2984\n2381\n5365\n7746\n3111\n857\n3968\n4825\n8793\n3618\n2411\n6029\n8440\n4469\n2909\n7378\n287\n7665\n7952\n5617\n3569\n9186\n2755\n1941\n4696\n6637\n1333\n7970\n9303\n7273\n6576\n3849\n425\n4274\n4699\n8973\n3672\n2645\n6317\n8962\n5279\n4241\n9520\n3761\n3281\n7042\n323\n7365\n7688\n5053\n2741\n7794\n535\n8329\n8864\n7193\n6057\n3250\n9307\n2557\n1864\n4421\n6285\n706\n6991\n7697\n4688\n2385\n7073\n9458\n6531\n5989\n2520\n8509\n1029\n9538\n567\n105\n672\n777\n1449\n2226\n3675\n5901\n9576\n5477\n5053\n530\n5583\n6113\n1696\n7809\n9505\n7314\n6819\n4133\n952\n5085\n6037\n1122\n7159\n8281\n5440\n3721\n9161\n2882\n2043\n4925\n6968\n1893\n8861\n754\n9615\n369\n9984\n353\n337\n690\n1027\n1717\n2744\n4461\n7205\n1666\n8871\n537\n9408\n9945\n9353\n9298\n8651\n7949\n6600\n4549\n1149\n5698\n6847\n2545\n9392\n1937\n1329\n3266\n4595\n7861\n2456\n317\n2773\n3090\n5863\n8953\n4816\n3769\n8585\n2354\n939\n3293\n4232\n7525\n1757\n9282\n1039\n321\n1360\n1681\n3041\n4722\n7763\n2485\n248\n2733\n2981\n5714\n8695\n4409\n3104\n7513\n617\n8130\n8747\n6877\n5624\n2501\n8125\n626\n8751\n9377\n8128\n7505\n5633\n3138\n8771\n1909\n680\n2589\n3269\n5858\n9127\n4985\n4112\n9097\n3209\n2306\n5515\n7821\n3336\n1157\n4493\n5650\n143\n5793\n5936\n1729\n7665\n9394\n7059\n6453\n3512\n9965\n3477\n3442\n6919\n361\n7280\n7641\n4921\n2562\n7483\n45\n7528\n7573\n5101\n2674\n7775\n449\n8224\n8673\n6897\n5570\n2467\n8037\n504\n8541\n9045\n7586\n6631\n4217\n848\n5065\n5913\n978\n6891\n7869\n4760\n2629\n7389\n18\n7407\n7425\n4832\n2257\n7089\n9346\n6435\n5781\n2216\n7997\n213\n8210\n8423\n6633\n5056\n1689\n6745\n8434\n5179\n3613\n8792\n2405\n1197\n3602\n4799\n8401\n3200\n1601\n4801\n6402\n1203\n7605\n8808\n6413\n5221\n1634\n6855\n8489\n5344\n3833\n9177\n3010\n2187\n5197\n7384\n2581\n9965\n2546\n2511\n5057\n7568\n2625\n193\n2818\n3011\n5829\n8840\n4669\n3509\n8178\n1687\n9865\n1552\n1417\n2969\n4386\n7355\n1741\n9096\n837\n9933\n770\n703\n1473\n2176\n3649\n5825\n9474\n5299\n4773\n72\n4845\n4917\n9762\n4679\n4441\n9120\n3561\n2681\n6242\n8923\n5165\n4088\n9253\n3341\n2594\n5935\n8529\n4464\n2993\n7457\n450\n7907\n8357\n6264\n4621\n885\n5506\n6391\n1897\n8288\n185\n8473\n8658\n7131\n5789\n2920\n8709\n1629\n338\n1967\n2305\n4272\n6577\n849\n7426\n8275\n5701\n3976\n9677\n3653\n3330\n6983\n313\n7296\n7609\n4905\n2514\n7419\n9933\n7352\n7285\n4637\n1922\n6559\n8481\n5040\n3521\n8561\n2082\n643\n2725\n3368\n6093\n9461\n5554\n5015\n569\n5584\n6153\n1737\n7890\n9627\n7517\n7144\n4661\n1805\n6466\n8271\n4737\n3008\n7745\n753\n8498\n9251\n7749\n7000\n4749\n1749\n6498\n8247\n4745\n2992\n7737\n729\n8466\n9195\n7661\n6856\n4517\n1373\n5890\n7263\n3153\n416\n3569\n3985\n7554\n1539\n9093\n632\n9725\n357\n82\n439\n521\n960\n1481\n2441\n3922\n6363\n285\n6648\n6933\n3581\n514\n4095\n4609\n8704\n3313\n2017\n5330\n7347\n2677\n24\n2701\n2725\n5426\n8151\n3577\n1728\n5305\n7033\n2338\n9371\n1709\n1080\n2789\n3869\n6658\n527\n7185\n7712\n4897\n2609\n7506\n115\n7621\n7736\n5357\n3093\n8450\n1543\n9993\n1536\n1529\n3065\n4594\n7659\n2253\n9912\n2165\n2077\n4242\n6319\n561\n6880\n7441\n4321\n1762\n6083\n7845\n3928\n1773\n5701\n7474\n3175\n649\n3824\n4473\n8297\n2770\n1067\n3837\n4904\n8741\n3645\n2386\n6031\n8417\n4448\n2865\n7313\n178\n7491\n7669\n5160\n2829\n7989\n818\n8807\n9625\n8432\n8057\n6489\n4546\n1035\n5581\n6616\n2197\n8813\n1010\n9823\n833\n656\n1489\n2145\n3634\n5779\n9413\n5192\n4605\n9797\n4402\n4199\n8601\n2800\n1401\n4201\n5602\n9803\n5405\n5208\n613\n5821\n6434\n2255\n8689\n944\n9633\n577\n210\n787\n997\n1784\n2781\n4565\n7346\n1911\n9257\n1168\n425\n1593\n2018\n3611\n5629\n9240\n4869\n4109\n8978\n3087\n2065\n5152\n7217\n2369\n9586\n1955\n1541\n3496\n5037\n8533\n3570\n2103\n5673\n7776\n3449\n1225\n4674\n5899\n573\n6472\n7045\n3517\n562\n4079\n4641\n8720\n3361\n2081\n5442\n7523\n2965\n488\n3453\n3941\n7394\n1335\n8729\n64\n8793\n8857\n7650\n6507\n4157\n664\n4821\n5485\n306\n5791\n6097\n1888\n7985\n9873\n7858\n7731\n5589\n3320\n8909\n2229\n1138\n3367\n4505\n7872\n2377\n249\n2626\n2875\n5501\n8376\n3877\n2253\n6130\n8383\n4513\n2896\n7409\n305\n7714\n8019\n5733\n3752\n9485\n3237\n2722\n5959\n8681\n4640\n3321\n7961\n1282\n9243\n525\n9768\n293\n61\n354\n415\n769\n1184\n1953\n3137\n5090\n8227\n3317\n1544\n4861\n6405\n1266\n7671\n8937\n6608\n5545\n2153\n7698\n9851\n7549\n7400\n4949\n2349\n7298\n9647\n6945\n6592\n3537\n129\n3666\n3795\n7461\n1256\n8717\n9973\n8690\n8663\n7353\n6016\n3369\n9385\n2754\n2139\n4893\n7032\n1925\n8957\n882\n9839\n721\n560\n1281\n1841\n3122\n4963\n8085\n3048\n1133\n4181\n5314\n9495\n4809\n4304\n9113\n3417\n2530\n5947\n8477\n4424\n2901\n7325\n226\n7551\n7777\n5328\n3105\n8433\n1538\n9971\n1509\n1480\n2989\n4469\n7458\n1927\n9385\n1312\n697\n2009\n2706\n4715\n7421\n2136\n9557\n1693\n1250\n2943\n4193\n7136\n1329\n8465\n9794\n8259\n8053\n6312\n4365\n677\n5042\n5719\n761\n6480\n7241\n3721\n962\n4683\n5645\n328\n5973\n6301\n2274\n8575\n849\n9424\n273\n9697\n9970\n9667\n9637\n9304\n8941\n8245\n7186\n5431\n2617\n8048\n665\n8713\n9378\n8091\n7469\n5560\n3029\n8589\n1618\n207\n1825\n2032\n3857\n5889\n9746\n5635\n5381\n1016\n6397\n7413\n3810\n1223\n5033\n6256\n1289\n7545\n8834\n6379\n5213\n1592\n6805\n8397\n5202\n3599\n8801\n2400\n1201\n3601\n4802\n8403\n3205\n1608\n4813\n6421\n1234\n7655\n8889\n6544\n5433\n1977\n7410\n9387\n6797\n6184\n2981\n9165\n2146\n1311\n3457\n4768\n8225\n2993\n1218\n4211\n5429\n9640\n5069\n4709\n9778\n4487\n4265\n8752\n3017\n1769\n4786\n6555\n1341\n7896\n9237\n7133\n6370\n3503\n9873\n3376\n3249\n6625\n9874\n6499\n6373\n2872\n9245\n2117\n1362\n3479\n4841\n8320\n3161\n1481\n4642\n6123\n765\n6888\n7653\n4541\n2194\n6735\n8929\n5664\n4593\n257\n4850\n5107\n9957\n5064\n5021\n85\n5106\n5191\n297\n5488\n5785\n1273\n7058\n8331\n5389\n3720\n9109\n2829\n1938\n4767\n6705\n1472\n8177\n9649\n7826\n7475\n5301\n2776\n8077\n853\n8930\n9783\n8713\n8496\n7209\n5705\n2914\n8619\n1533\n152\n1685\n1837\n3522\n5359\n8881\n4240\n3121\n7361\n482\n7843\n8325\n6168\n4493\n661\n5154\n5815\n969\n6784\n7753\n4537\n2290\n6827\n9117\n5944\n5061\n1005\n6066\n7071\n3137\n208\n3345\n3553\n6898\n451\n7349\n7800\n5149\n2949\n8098\n1047\n9145\n192\n9337\n9529\n8866\n8395\n7261\n5656\n2917\n8573\n1490\n63\n1553\n1616\n3169\n4785\n7954\n2739\n693\n3432\n4125\n7557\n1682\n9239\n921\n160\n1081\n1241\n2322\n3563\n5885\n9448\n5333\n4781\n114\n4895\n5009\n9904\n4913\n4817\n9730\n4547\n4277\n8824\n3101\n1925\n5026\n6951\n1977\n8928\n905\n9833\n738\n571\n1309\n1880\n3189\n5069\n8258\n3327\n1585\n4912\n6497\n1409\n7906\n9315\n7221\n6536\n3757\n293\n4050\n4343\n8393\n2736\n1129\n3865\n4994\n8859\n3853\n2712\n6565\n9277\n5842\n5119\n961\n6080\n7041\n3121\n162\n3283\n3445\n6728\n173\n6901\n7074\n3975\n1049\n5024\n6073\n1097\n7170\n8267\n5437\n3704\n9141\n2845\n1986\n4831\n6817\n1648\n8465\n113\n8578\n8691\n7269\n5960\n3229\n9189\n2418\n1607\n4025\n5632\n9657\n5289\n4946\n235\n5181\n5416\n597\n6013\n6610\n2623\n9233\n1856\n1089\n2945\n4034\n6979\n1013\n7992\n9005\n6997\n6002\n2999\n9001\n2000\n1001\n3001\n4002\n7003\n1005\n8008\n9013\n7021\n6034\n3055\n9089\n2144\n1233\n3377\n4610\n7987\n2597\n584\n3181\n3765\n6946\n711\n7657\n8368\n6025\n4393\n418\n4811\n5229\n40\n5269\n5309\n578\n5887\n6465\n2352\n8817\n1169\n9986\n1155\n1141\n2296\n3437\n5733\n9170\n4903\n4073\n8976\n3049\n2025\n5074\n7099\n2173\n9272\n1445\n717\n2162\n2879\n5041\n7920\n2961\n881\n3842\n4723\n8565\n3288\n1853\n5141\n6994\n2135\n9129\n1264\n393\n1657\n2050\n3707\n5757\n9464\n5221\n4685\n9906\n4591\n4497\n9088\n3585\n2673\n6258\n8931\n5189\n4120\n9309\n3429\n2738\n6167\n8905\n5072\n3977\n9049\n3026\n2075\n5101\n7176\n2277\n9453\n1730\n1183\n2913\n4096\n7009\n1105\n8114\n9219\n7333\n6552\n3885\n437\n4322\n4759\n9081\n3840\n2921\n6761\n9682\n6443\n6125\n2568\n8693\n1261\n9954\n1215\n1169\n2384\n3553\n5937\n9490\n5427\n4917\n344\n5261\n5605\n866\n6471\n7337\n3808\n1145\n4953\n6098\n1051\n7149\n8200\n5349\n3549\n8898\n2447\n1345\n3792\n5137\n8929\n4066\n2995\n7061\n56\n7117\n7173\n4290\n1463\n5753\n7216\n2969\n185\n3154\n3339\n6493\n9832\n6325\n6157\n2482\n8639\n1121\n9760\n881\n641\n1522\n2163\n3685\n5848\n9533\n5381\n4914\n295\n5209\n5504\n713\n6217\n6930\n3147\n77\n3224\n3301\n6525\n9826\n6351\n6177\n2528\n8705\n1233\n9938\n1171\n1109\n2280\n3389\n5669\n9058\n4727\n3785\n8512\n2297\n809\n3106\n3915\n7021\n936\n7957\n8893\n6850\n5743\n2593\n8336\n929\n9265\n194\n9459\n9653\n9112\n8765\n7877\n6642\n4519\n1161\n5680\n6841\n2521\n9362\n1883\n1245\n3128\n4373\n7501\n1874\n9375\n1249\n624\n1873\n2497\n4370\n6867\n1237\n8104\n9341\n7445\n6786\n4231\n1017\n5248\n6265\n1513\n7778\n9291\n7069\n6360\n3429\n9789\n3218\n3007\n6225\n9232\n5457\n4689\n146\n4835\n4981\n9816\n4797\n4613\n9410\n4023\n3433\n7456\n889\n8345\n9234\n7579\n6813\n4392\n1205\n5597\n6802\n2399\n9201\n1600\n801\n2401\n3202\n5603\n8805\n4408\n3213\n7621\n834\n8455\n9289\n7744\n7033\n4777\n1810\n6587\n8397\n4984\n3381\n8365\n1746\n111\n1857\n1968\n3825\n5793\n9618\n5411\n5029\n440\n5469\n5909\n1378\n7287\n8665\n5952\n4617\n569\n5186\n5755\n941\n6696\n7637\n4333\n1970\n6303\n8273\n4576\n2849\n7425\n274\n7699\n7973\n5672\n3645\n9317\n2962\n2279\n5241\n7520\n2761\n281\n3042\n3323\n6365\n9688\n6053\n5741\n1794\n7535\n9329\n6864\n6193\n3057\n9250\n2307\n1557\n3864\n5421\n9285\n4706\n3991\n8697\n2688\n1385\n4073\n5458\n9531\n4989\n4520\n9509\n4029\n3538\n7567\n1105\n8672\n9777\n8449\n8226\n6675\n4901\n1576\n6477\n8053\n4530\n2583\n7113\n9696\n6809\n6505\n3314\n9819\n3133\n2952\n6085\n9037\n5122\n4159\n9281\n3440\n2721\n6161\n8882\n5043\n3925\n8968\n2893\n1861\n4754\n6615\n1369\n7984\n9353\n7337\n6690\n4027\n717\n4744\n5461\n205\n5666\n5871\n1537\n7408\n8945\n6353\n5298\n1651\n6949\n8600\n5549\n4149\n9698\n3847\n3545\n7392\n937\n8329\n9266\n7595\n6861\n4456\n1317\n5773\n7090\n2863\n9953\n2816\n2769\n5585\n8354\n3939\n2293\n6232\n8525\n4757\n3282\n8039\n1321\n9360\n681\n41\n722\n763\n1485\n2248\n3733\n5981\n9714\n5695\n5409\n1104\n6513\n7617\n4130\n1747\n5877\n7624\n3501\n1125\n4626\n5751\n377\n6128\n6505\n2633\n9138\n1771\n909\n2680\n3589\n6269\n9858\n6127\n5985\n2112\n8097\n209\n8306\n8515\n6821\n5336\n2157\n7493\n9650\n7143\n6793\n3936\n729\n4665\n5394\n59\n5453\n5512\n965\n6477\n7442\n3919\n1361\n5280\n6641\n1921\n8562\n483\n9045\n9528\n8573\n8101\n6674\n4775\n1449\n6224\n7673\n3897\n1570\n5467\n7037\n2504\n9541\n2045\n1586\n3631\n5217\n8848\n4065\n2913\n6978\n9891\n6869\n6760\n3629\n389\n4018\n4407\n8425\n2832\n1257\n4089\n5346\n9435\n4781\n4216\n8997\n3213\n2210\n5423\n7633\n3056\n689\n3745\n4434\n8179\n2613\n792\n3405\n4197\n7602\n1799\n9401\n1200\n601\n1801\n2402\n4203\n6605\n808\n7413\n8221\n5634\n3855\n9489\n3344\n2833\n6177\n9010\n5187\n4197\n9384\n3581\n2965\n6546\n9511\n6057\n5568\n1625\n7193\n8818\n6011\n4829\n840\n5669\n6509\n2178\n8687\n865\n9552\n417\n9969\n386\n355\n741\n1096\n1837\n2933\n4770\n7703\n2473\n176\n2649\n2825\n5474\n8299\n3773\n2072\n5845\n7917\n3762\n1679\n5441\n7120\n2561\n9681\n2242\n1923\n4165\n6088\n253\n6341\n6594\n2935\n9529\n2464\n1993\n4457\n6450\n907\n7357\n8264\n5621\n3885\n9506\n3391\n2897\n6288\n9185\n5473\n4658\n131\n4789\n4920\n9709\n4629\n4338\n8967\n3305\n2272\n5577\n7849\n3426\n1275\n4701\n5976\n677\n6653\n7330\n3983\n1313\n5296\n6609\n1905\n8514\n419\n8933\n9352\n8285\n7637\n5922\n3559\n9481\n3040\n2521\n5561\n8082\n3643\n1725\n5368\n7093\n2461\n9554\n2015\n1569\n3584\n5153\n8737\n3890\n2627\n6517\n9144\n5661\n4805\n466\n5271\n5737\n1008\n6745\n7753\n4498\n2251\n6749\n9000\n5749\n4749\n498\n5247\n5745\n992\n6737\n7729\n4466\n2195\n6661\n8856\n5517\n4373\n9890\n4263\n4153\n8416\n2569\n985\n3554\n4539\n8093\n2632\n725\n3357\n4082\n7439\n1521\n8960\n481\n9441\n9922\n9363\n9285\n8648\n7933\n6581\n4514\n1095\n5609\n6704\n2313\n9017\n1330\n347\n1677\n2024\n3701\n5725\n9426\n5151\n4577\n9728\n4305\n4033\n8338\n2371\n709\n3080\n3789\n6869\n658\n7527\n8185\n5712\n3897\n9609\n3506\n3115\n6621\n9736\n6357\n6093\n2450\n8543\n993\n9536\n529\n65\n594\n659\n1253\n1912\n3165\n5077\n8242\n3319\n1561\n4880\n6441\n1321\n7762\n9083\n6845\n5928\n2773\n8701\n1474\n175\n1649\n1824\n3473\n5297\n8770\n4067\n2837\n6904\n9741\n6645\n6386\n3031\n9417\n2448\n1865\n4313\n6178\n491\n6669\n7160\n3829\n989\n4818\n5807\n625\n6432\n7057\n3489\n546\n4035\n4581\n8616\n3197\n1813\n5010\n6823\n1833\n8656\n489\n9145\n9634\n8779\n8413\n7192\n5605\n2797\n8402\n1199\n9601\n800\n401\n1201\n1602\n2803\n4405\n7208\n1613\n8821\n434\n9255\n9689\n8944\n8633\n7577\n6210\n3787\n9997\n3784\n3781\n7565\n1346\n8911\n257\n9168\n9425\n8593\n8018\n6611\n4629\n1240\n5869\n7109\n2978\n87\n3065\n3152\n6217\n9369\n5586\n4955\n541\n5496\n6037\n1533\n7570\n9103\n6673\n5776\n2449\n8225\n674\n8899\n9573\n8472\n8045\n6517\n4562\n1079\n5641\n6720\n2361\n9081\n1442\n523\n1965\n2488\n4453\n6941\n1394\n8335\n9729\n8064\n7793\n5857\n3650\n9507\n3157\n2664\n5821\n8485\n4306\n2791\n7097\n9888\n6985\n6873\n3858\n731\n4589\n5320\n9909\n5229\n5138\n367\n5505\n5872\n1377\n7249\n8626\n5875\n4501\n376\n4877\n5253\n130\n5383\n5513\n896\n6409\n7305\n3714\n1019\n4733\n5752\n485\n6237\n6722\n2959\n9681\n2640\n2321\n4961\n7282\n2243\n9525\n1768\n1293\n3061\n4354\n7415\n1769\n9184\n953\n137\n1090\n1227\n2317\n3544\n5861\n9405\n5266\n4671\n9937\n4608\n4545\n9153\n3698\n2851\n6549\n9400\n5949\n5349\n1298\n6647\n7945\n4592\n2537\n7129\n9666\n6795\n6461\n3256\n9717\n2973\n2690\n5663\n8353\n4016\n2369\n6385\n8754\n5139\n3893\n9032\n2925\n1957\n4882\n6839\n1721\n8560\n281\n8841\n9122\n7963\n7085\n5048\n2133\n7181\n9314\n6495\n5809\n2304\n8113\n417\n8530\n8947\n7477\n6424\n3901\n325\n4226\n4551\n8777\n3328\n2105\n5433\n7538\n2971\n509\n3480\n3989\n7469\n1458\n8927\n385\n9312\n9697\n9009\n8706\n7715\n6421\n4136\n557\n4693\n5250\n9943\n5193\n5136\n329\n5465\n5794\n1259\n7053\n8312\n5365\n3677\n9042\n2719\n1761\n4480\n6241\n721\n6962\n7683\n4645\n2328\n6973\n9301\n6274\n5575\n1849\n7424\n9273\n6697\n5970\n2667\n8637\n1304\n9941\n1245\n1186\n2431\n3617\n6048\n9665\n5713\n5378\n1091\n6469\n7560\n4029\n1589\n5618\n7207\n2825\n32\n2857\n2889\n5746\n8635\n4381\n3016\n7397\n413\n7810\n8223\n6033\n4256\n289\n4545\n4834\n9379\n4213\n3592\n7805\n1397\n9202\n599\n9801\n400\n201\n601\n802\n1403\n2205\n3608\n5813\n9421\n5234\n4655\n9889\n4544\n4433\n8977\n3410\n2387\n5797\n8184\n3981\n2165\n6146\n8311\n4457\n2768\n7225\n9993\n7218\n7211\n4429\n1640\n6069\n7709\n3778\n1487\n5265\n6752\n2017\n8769\n786\n9555\n341\n9896\n237\n133\n370\n503\n873\n1376\n2249\n3625\n5874\n9499\n5373\n4872\n245\n5117\n5362\n479\n5841\n6320\n2161\n8481\n642\n9123\n9765\n8888\n8653\n7541\n6194\n3735\n9929\n3664\n3593\n7257\n850\n8107\n8957\n7064\n6021\n3085\n9106\n2191\n1297\n3488\n4785\n8273\n3058\n1331\n4389\n5720\n109\n5829\n5938\n1767\n7705\n9472\n7177\n6649\n3826\n475\n4301\n4776\n9077\n3853\n2930\n6783\n9713\n6496\n6209\n2705\n8914\n1619\n533\n2152\n2685\n4837\n7522\n2359\n9881\n2240\n2121\n4361\n6482\n843\n7325\n8168\n5493\n3661\n9154\n2815\n1969\n4784\n6753\n1537\n8290\n9827\n8117\n7944\n6061\n4005\n66\n4071\n4137\n8208\n2345\n553\n2898\n3451\n6349\n9800\n6149\n5949\n2098\n8047\n145\n8192\n8337\n6529\n4866\n1395\n6261\n7656\n3917\n1573\n5490\n7063\n2553\n9616\n2169\n1785\n3954\n5739\n9693\n5432\n5125\n557\n5682\n6239\n1921\n8160\n81\n8241\n8322\n6563\n4885\n1448\n6333\n7781\n4114\n1895\n6009\n7904\n3913\n1817\n5730\n7547\n3277\n824\n4101\n4925\n9026\n3951\n2977\n6928\n9905\n6833\n6738\n3571\n309\n3880\n4189\n8069\n2258\n327\n2585\n2912\n5497\n8409\n3906\n2315\n6221\n8536\n4757\n3293\n8050\n1343\n9393\n736\n129\n865\n994\n1859\n2853\n4712\n7565\n2277\n9842\n2119\n1961\n4080\n6041\n121\n6162\n6283\n2445\n8728\n1173\n9901\n1074\n975\n2049\n3024\n5073\n8097\n3170\n1267\n4437\n5704\n141\n5845\n5986\n1831\n7817\n9648\n7465\n7113\n4578\n1691\n6269\n7960\n4229\n2189\n6418\n8607\n5025\n3632\n8657\n2289\n946\n3235\n4181\n7416\n1597\n9013\n610\n9623\n233\n9856\n89\n9945\n34\n9979\n13\n9992\n5\n9997\n2\n9999\n1\n0\n1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n946\n7711\n8657\n6368\n5025\n1393\n6418\n7811\n4229\n2040\n6269\n8309\n4578\n2887\n7465\n352\n7817\n8169\n5986\n4155\n141\n4296\n4437\n8733\n3170\n1903\n5073\n6976\n2049\n9025\n1074\n99\n1173\n1272\n2445\n3717\n6162\n9879\n6041\n5920\n1961\n7881\n9842\n7723\n7565\n5288\n2853\n8141\n994\n9135\n129\n9264\n9393\n8657\n8050\n6707\n4757\n1464\n6221\n7685\n3906\n1591\n5497\n7088\n2585\n9673\n2258\n1931\n4189\n6120\n309\n6429\n6738\n3167\n9905\n3072\n2977\n6049\n9026\n5075\n4101\n9176\n3277\n2453\n5730\n8183\n3913\n2096\n6009\n8105\n4114\n2219\n6333\n8552\n4885\n3437\n8322\n1759\n81\n1840\n1921\n3761\n5682\n9443\n5125\n4568\n9693\n4261\n3954\n8215\n2169\n384\n2553\n2937\n5490\n8427\n3917\n2344\n6261\n8605\n4866\n3471\n8337\n1808\n145\n1953\n2098\n4051\n6149\n200\n6349\n6549\n2898\n9447\n2345\n1792\n4137\n5929\n66\n5995\n6061\n2056\n8117\n173\n8290\n8463\n6753\n5216\n1969\n7185\n9154\n6339\n5493\n1832\n7325\n9157\n6482\n5639\n2121\n7760\n9881\n7641\n7522\n5163\n2685\n7848\n533\n8381\n8914\n7295\n6209\n3504\n9713\n3217\n2930\n6147\n9077\n5224\n4301\n9525\n3826\n3351\n7177\n528\n7705\n8233\n5938\n4171\n109\n4280\n4389\n8669\n3058\n1727\n4785\n6512\n1297\n7809\n9106\n6915\n6021\n2936\n8957\n1893\n850\n2743\n3593\n6336\n9929\n6265\n6194\n2459\n8653\n1112\n9765\n877\n642\n1519\n2161\n3680\n5841\n9521\n5362\n4883\n245\n5128\n5373\n501\n5874\n6375\n2249\n8624\n873\n9497\n370\n9867\n237\n104\n341\n445\n786\n1231\n2017\n3248\n5265\n8513\n3778\n2291\n6069\n8360\n4429\n2789\n7218\n7\n7225\n7232\n4457\n1689\n6146\n7835\n3981\n1816\n5797\n7613\n3410\n1023\n4433\n5456\n9889\n5345\n5234\n579\n5813\n6392\n2205\n8597\n802\n9399\n201\n9600\n9801\n9401\n9202\n8603\n7805\n6408\n4213\n621\n4834\n5455\n289\n5744\n6033\n1777\n7810\n9587\n7397\n6984\n4381\n1365\n5746\n7111\n2857\n9968\n2825\n2793\n5618\n8411\n4029\n2440\n6469\n8909\n5378\n4287\n9665\n3952\n3617\n7569\n1186\n8755\n9941\n8696\n8637\n7333\n5970\n3303\n9273\n2576\n1849\n4425\n6274\n699\n6973\n7672\n4645\n2317\n6962\n9279\n6241\n5520\n1761\n7281\n9042\n6323\n5365\n1688\n7053\n8741\n5794\n4535\n329\n4864\n5193\n57\n5250\n5307\n557\n5864\n6421\n2285\n8706\n991\n9697\n688\n385\n1073\n1458\n2531\n3989\n6520\n509\n7029\n7538\n4567\n2105\n6672\n8777\n5449\n4226\n9675\n3901\n3576\n7477\n1053\n8530\n9583\n8113\n7696\n5809\n3505\n9314\n2819\n2133\n4952\n7085\n2037\n9122\n1159\n281\n1440\n1721\n3161\n4882\n8043\n2925\n968\n3893\n4861\n8754\n3615\n2369\n5984\n8353\n4337\n2690\n7027\n9717\n6744\n6461\n3205\n9666\n2871\n2537\n5408\n7945\n3353\n1298\n4651\n5949\n600\n6549\n7149\n3698\n847\n4545\n5392\n9937\n5329\n5266\n595\n5861\n6456\n2317\n8773\n1090\n9863\n953\n816\n1769\n2585\n4354\n6939\n1293\n8232\n9525\n7757\n7282\n5039\n2321\n7360\n9681\n7041\n6722\n3763\n485\n4248\n4733\n8981\n3714\n2695\n6409\n9104\n5513\n4617\n130\n4747\n4877\n9624\n4501\n4125\n8626\n2751\n1377\n4128\n5505\n9633\n5138\n4771\n9909\n4680\n4589\n9269\n3858\n3127\n6985\n112\n7097\n7209\n4306\n1515\n5821\n7336\n3157\n493\n3650\n4143\n7793\n1936\n9729\n1665\n1394\n3059\n4453\n7512\n1965\n9477\n1442\n919\n2361\n3280\n5641\n8921\n4562\n3483\n8045\n1528\n9573\n1101\n674\n1775\n2449\n4224\n6673\n897\n7570\n8467\n6037\n4504\n541\n5045\n5586\n631\n6217\n6848\n3065\n9913\n2978\n2891\n5869\n8760\n4629\n3389\n8018\n1407\n9425\n832\n257\n1089\n1346\n2435\n3781\n6216\n9997\n6213\n6210\n2423\n8633\n1056\n9689\n745\n434\n1179\n1613\n2792\n4405\n7197\n1602\n8799\n401\n9200\n9601\n8801\n8402\n7203\n5605\n2808\n8413\n1221\n9634\n855\n489\n1344\n1833\n3177\n5010\n8187\n3197\n1384\n4581\n5965\n546\n6511\n7057\n3568\n625\n4193\n4818\n9011\n3829\n2840\n6669\n9509\n6178\n5687\n1865\n7552\n9417\n6969\n6386\n3355\n9741\n3096\n2837\n5933\n8770\n4703\n3473\n8176\n1649\n9825\n1474\n1299\n2773\n4072\n6845\n917\n7762\n8679\n6441\n5120\n1561\n6681\n8242\n4923\n3165\n8088\n1253\n9341\n594\n9935\n529\n464\n993\n1457\n2450\n3907\n6357\n264\n6621\n6885\n3506\n391\n3897\n4288\n8185\n2473\n658\n3131\n3789\n6920\n709\n7629\n8338\n5967\n4305\n272\n4577\n4849\n9426\n4275\n3701\n7976\n1677\n9653\n1330\n983\n2313\n3296\n5609\n8905\n4514\n3419\n7933\n1352\n9285\n637\n9922\n559\n481\n1040\n1521\n2561\n4082\n6643\n725\n7368\n8093\n5461\n3554\n9015\n2569\n1584\n4153\n5737\n9890\n5627\n5517\n1144\n6661\n7805\n4466\n2271\n6737\n9008\n5745\n4753\n498\n5251\n5749\n1000\n6749\n7749\n4498\n2247\n6745\n8992\n5737\n4729\n466\n5195\n5661\n856\n6517\n7373\n3890\n1263\n5153\n6416\n1569\n7985\n9554\n7539\n7093\n4632\n1725\n6357\n8082\n4439\n2521\n6960\n9481\n6441\n5922\n2363\n8285\n648\n8933\n9581\n8514\n8095\n6609\n4704\n1313\n6017\n7330\n3347\n677\n4024\n4701\n8725\n3426\n2151\n5577\n7728\n3305\n1033\n4338\n5371\n9709\n5080\n4789\n9869\n4658\n4527\n9185\n3712\n2897\n6609\n9506\n6115\n5621\n1736\n7357\n9093\n6450\n5543\n1993\n7536\n9529\n7065\n6594\n3659\n253\n3912\n4165\n8077\n2242\n319\n2561\n2880\n5441\n8321\n3762\n2083\n5845\n7928\n3773\n1701\n5474\n7175\n2649\n9824\n2473\n2297\n4770\n7067\n1837\n8904\n741\n9645\n386\n31\n417\n448\n865\n1313\n2178\n3491\n5669\n9160\n4829\n3989\n8818\n2807\n1625\n4432\n6057\n489\n6546\n7035\n3581\n616\n4197\n4813\n9010\n3823\n2833\n6656\n9489\n6145\n5634\n1779\n7413\n9192\n6605\n5797\n2402\n8199\n601\n8800\n9401\n8201\n7602\n5803\n3405\n9208\n2613\n1821\n4434\n6255\n689\n6944\n7633\n4577\n2210\n6787\n8997\n5784\n4781\n565\n5346\n5911\n1257\n7168\n8425\n5593\n4018\n9611\n3629\n3240\n6869\n109\n6978\n7087\n4065\n1152\n5217\n6369\n1586\n7955\n9541\n7496\n7037\n4533\n1570\n6103\n7673\n3776\n1449\n5225\n6674\n1899\n8573\n472\n9045\n9517\n8562\n8079\n6641\n4720\n1361\n6081\n7442\n3523\n965\n4488\n5453\n9941\n5394\n5335\n729\n6064\n6793\n2857\n9650\n2507\n2157\n4664\n6821\n1485\n8306\n9791\n8097\n7888\n5985\n3873\n9858\n3731\n3589\n7320\n909\n8229\n9138\n7367\n6505\n3872\n377\n4249\n4626\n8875\n3501\n2376\n5877\n8253\n4130\n2383\n6513\n8896\n5409\n4305\n9714\n4019\n3733\n7752\n1485\n9237\n722\n9959\n681\n640\n1321\n1961\n3282\n5243\n8525\n3768\n2293\n6061\n8354\n4415\n2769\n7184\n9953\n7137\n7090\n4227\n1317\n5544\n6861\n2405\n9266\n1671\n937\n2608\n3545\n6153\n9698\n5851\n5549\n1400\n6949\n8349\n5298\n3647\n8945\n2592\n1537\n4129\n5666\n9795\n5461\n5256\n717\n5973\n6690\n2663\n9353\n2016\n1369\n3385\n4754\n8139\n2893\n1032\n3925\n4957\n8882\n3839\n2721\n6560\n9281\n5841\n5122\n963\n6085\n7048\n3133\n181\n3314\n3495\n6809\n304\n7113\n7417\n4530\n1947\n6477\n8424\n4901\n3325\n8226\n1551\n9777\n1328\n1105\n2433\n3538\n5971\n9509\n5480\n4989\n469\n5458\n5927\n1385\n7312\n8697\n6009\n4706\n715\n5421\n6136\n1557\n7693\n9250\n6943\n6193\n3136\n9329\n2465\n1794\n4259\n6053\n312\n6365\n6677\n3042\n9719\n2761\n2480\n5241\n7721\n2962\n683\n3645\n4328\n7973\n2301\n274\n2575\n2849\n5424\n8273\n3697\n1970\n5667\n7637\n3304\n941\n4245\n5186\n9431\n4617\n4048\n8665\n2713\n1378\n4091\n5469\n9560\n5029\n4589\n9618\n4207\n3825\n8032\n1857\n9889\n1746\n1635\n3381\n5016\n8397\n3413\n1810\n5223\n7033\n2256\n9289\n1545\n834\n2379\n3213\n5592\n8805\n4397\n3202\n7599\n801\n8400\n9201\n7601\n6802\n4403\n1205\n5608\n6813\n2421\n9234\n1655\n889\n2544\n3433\n5977\n9410\n5387\n4797\n184\n4981\n5165\n146\n5311\n5457\n768\n6225\n6993\n3218\n211\n3429\n3640\n7069\n709\n7778\n8487\n6265\n4752\n1017\n5769\n6786\n2555\n9341\n1896\n1237\n3133\n4370\n7503\n1873\n9376\n1249\n625\n1874\n2499\n4373\n6872\n1245\n8117\n9362\n7479\n6841\n4320\n1161\n5481\n6642\n2123\n8765\n888\n9653\n541\n194\n735\n929\n1664\n2593\n4257\n6850\n1107\n7957\n9064\n7021\n6085\n3106\n9191\n2297\n1488\n3785\n5273\n9058\n4331\n3389\n7720\n1109\n8829\n9938\n8767\n8705\n7472\n6177\n3649\n9826\n3475\n3301\n6776\n77\n6853\n6930\n3783\n713\n4496\n5209\n9705\n4914\n4619\n9533\n4152\n3685\n7837\n1522\n9359\n881\n240\n1121\n1361\n2482\n3843\n6325\n168\n6493\n6661\n3154\n9815\n2969\n2784\n5753\n8537\n4290\n2827\n7117\n9944\n7061\n7005\n4066\n1071\n5137\n6208\n1345\n7553\n8898\n6451\n5349\n1800\n7149\n8949\n6098\n5047\n1145\n6192\n7337\n3529\n866\n4395\n5261\n9656\n4917\n4573\n9490\n4063\n3553\n7616\n1169\n8785\n9954\n8739\n8693\n7432\n6125\n3557\n9682\n3239\n2921\n6160\n9081\n5241\n4322\n9563\n3885\n3448\n7333\n781\n8114\n8895\n7009\n5904\n2913\n8817\n1730\n547\n2277\n2824\n5101\n7925\n3026\n951\n3977\n4928\n8905\n3833\n2738\n6571\n9309\n5880\n5189\n1069\n6258\n7327\n3585\n912\n4497\n5409\n9906\n5315\n5221\n536\n5757\n6293\n2050\n8343\n393\n8736\n9129\n7865\n6994\n4859\n1853\n6712\n8565\n5277\n3842\n9119\n2961\n2080\n5041\n7121\n2162\n9283\n1445\n728\n2173\n2901\n5074\n7975\n3049\n1024\n4073\n5097\n9170\n4267\n3437\n7704\n1141\n8845\n9986\n8831\n8817\n7648\n6465\n4113\n578\n4691\n5269\n9960\n5229\n5189\n418\n5607\n6025\n1632\n7657\n9289\n6946\n6235\n3181\n9416\n2597\n2013\n4610\n6623\n1233\n7856\n9089\n6945\n6034\n2979\n9013\n1992\n1005\n2997\n4002\n6999\n1001\n8000\n9001\n7001\n6002\n3003\n9005\n2008\n1013\n3021\n4034\n7055\n1089\n8144\n9233\n7377\n6610\n3987\n597\n4584\n5181\n9765\n4946\n4711\n9657\n4368\n4025\n8393\n2418\n811\n3229\n4040\n7269\n1309\n8578\n9887\n8465\n8352\n6817\n5169\n1986\n7155\n9141\n6296\n5437\n1733\n7170\n8903\n6073\n4976\n1049\n6025\n7074\n3099\n173\n3272\n3445\n6717\n162\n6879\n7041\n3920\n961\n4881\n5842\n723\n6565\n7288\n3853\n1141\n4994\n6135\n1129\n7264\n8393\n5657\n4050\n9707\n3757\n3464\n7221\n685\n7906\n8591\n6497\n5088\n1585\n6673\n8258\n4931\n3189\n8120\n1309\n9429\n738\n167\n905\n1072\n1977\n3049\n5026\n8075\n3101\n1176\n4277\n5453\n9730\n5183\n4913\n96\n5009\n5105\n114\n5219\n5333\n552\n5885\n6437\n2322\n8759\n1081\n9840\n921\n761\n1682\n2443\n4125\n6568\n693\n7261\n7954\n5215\n3169\n8384\n1553\n9937\n1490\n1427\n2917\n4344\n7261\n1605\n8866\n471\n9337\n9808\n9145\n8953\n8098\n7051\n5149\n2200\n7349\n9549\n6898\n6447\n3345\n9792\n3137\n2929\n6066\n8995\n5061\n4056\n9117\n3173\n2290\n5463\n7753\n3216\n969\n4185\n5154\n9339\n4493\n3832\n8325\n2157\n482\n2639\n3121\n5760\n8881\n4641\n3522\n8163\n1685\n9848\n1533\n1381\n2914\n4295\n7209\n1504\n8713\n217\n8930\n9147\n8077\n7224\n5301\n2525\n7826\n351\n8177\n8528\n6705\n5233\n1938\n7171\n9109\n6280\n5389\n1669\n7058\n8727\n5785\n4512\n297\n4809\n5106\n9915\n5021\n4936\n9957\n4893\n4850\n9743\n4593\n4336\n8929\n3265\n2194\n5459\n7653\n3112\n765\n3877\n4642\n8519\n3161\n1680\n4841\n6521\n1362\n7883\n9245\n7128\n6373\n3501\n9874\n3375\n3249\n6624\n9873\n6497\n6370\n2867\n9237\n2104\n1341\n3445\n4786\n8231\n3017\n1248\n4265\n5513\n9778\n5291\n5069\n360\n5429\n5789\n1218\n7007\n8225\n5232\n3457\n8689\n2146\n835\n2981\n3816\n6797\n613\n7410\n8023\n5433\n3456\n8889\n2345\n1234\n3579\n4813\n8392\n3205\n1597\n4802\n6399\n1201\n7600\n8801\n6401\n5202\n1603\n6805\n8408\n5213\n3621\n8834\n2455\n1289\n3744\n5033\n8777\n3810\n2587\n6397\n8984\n5381\n4365\n9746\n4111\n3857\n7968\n1825\n9793\n1618\n1411\n3029\n4440\n7469\n1909\n9378\n1287\n665\n1952\n2617\n4569\n7186\n1755\n8941\n696\n9637\n333\n9970\n303\n273\n576\n849\n1425\n2274\n3699\n5973\n9672\n5645\n5317\n962\n6279\n7241\n3520\n761\n4281\n5042\n9323\n4365\n3688\n8053\n1741\n9794\n1535\n1329\n2864\n4193\n7057\n1250\n8307\n9557\n7864\n7421\n5285\n2706\n7991\n697\n8688\n9385\n8073\n7458\n5531\n2989\n8520\n1509\n29\n1538\n1567\n3105\n4672\n7777\n2449\n226\n2675\n2901\n5576\n8477\n4053\n2530\n6583\n9113\n5696\n4809\n505\n5314\n5819\n1133\n6952\n8085\n5037\n3122\n8159\n1281\n9440\n721\n161\n882\n1043\n1925\n2968\n4893\n7861\n2754\n615\n3369\n3984\n7353\n1337\n8690\n27\n8717\n8744\n7461\n6205\n3666\n9871\n3537\n3408\n6945\n353\n7298\n7651\n4949\n2600\n7549\n149\n7698\n7847\n5545\n3392\n8937\n2329\n1266\n3595\n4861\n8456\n3317\n1773\n5090\n6863\n1953\n8816\n769\n9585\n354\n9939\n293\n232\n525\n757\n1282\n2039\n3321\n5360\n8681\n4041\n2722\n6763\n9485\n6248\n5733\n1981\n7714\n9695\n7409\n7104\n4513\n1617\n6130\n7747\n3877\n1624\n5501\n7125\n2626\n9751\n2377\n2128\n4505\n6633\n1138\n7771\n8909\n6680\n5589\n2269\n7858\n127\n7985\n8112\n6097\n4209\n306\n4515\n4821\n9336\n4157\n3493\n7650\n1143\n8793\n9936\n8729\n8665\n7394\n6059\n3453\n9512\n2965\n2477\n5442\n7919\n3361\n1280\n4641\n5921\n562\n6483\n7045\n3528\n573\n4101\n4674\n8775\n3449\n2224\n5673\n7897\n3570\n1467\n5037\n6504\n1541\n8045\n9586\n7631\n7217\n4848\n2065\n6913\n8978\n5891\n4869\n760\n5629\n6389\n2018\n8407\n425\n8832\n9257\n8089\n7346\n5435\n2781\n8216\n997\n9213\n210\n9423\n9633\n9056\n8689\n7745\n6434\n4179\n613\n4792\n5405\n197\n5602\n5799\n1401\n7200\n8601\n5801\n4402\n203\n4605\n4808\n9413\n4221\n3634\n7855\n1489\n9344\n833\n177\n1010\n1187\n2197\n3384\n5581\n8965\n4546\n3511\n8057\n1568\n9625\n1193\n818\n2011\n2829\n4840\n7669\n2509\n178\n2687\n2865\n5552\n8417\n3969\n2386\n6355\n8741\n5096\n3837\n8933\n2770\n1703\n4473\n6176\n649\n6825\n7474\n4299\n1773\n6072\n7845\n3917\n1762\n5679\n7441\n3120\n561\n3681\n4242\n7923\n2165\n88\n2253\n2341\n4594\n6935\n1529\n8464\n9993\n8457\n8450\n6907\n5357\n2264\n7621\n9885\n7506\n7391\n4897\n2288\n7185\n9473\n6658\n6131\n2789\n8920\n1709\n629\n2338\n2967\n5305\n8272\n3577\n1849\n5426\n7275\n2701\n9976\n2677\n2653\n5330\n7983\n3313\n1296\n4609\n5905\n514\n6419\n6933\n3352\n285\n3637\n3922\n7559\n1481\n9040\n521\n9561\n82\n9643\n9725\n9368\n9093\n8461\n7554\n6015\n3569\n9584\n3153\n2737\n5890\n8627\n4517\n3144\n7661\n805\n8466\n9271\n7737\n7008\n4745\n1753\n6498\n8251\n4749\n3000\n7749\n749\n8498\n9247\n7745\n6992\n4737\n1729\n6466\n8195\n4661\n2856\n7517\n373\n7890\n8263\n6153\n4416\n569\n4985\n5554\n539\n6093\n6632\n2725\n9357\n2082\n1439\n3521\n4960\n8481\n3441\n1922\n5363\n7285\n2648\n9933\n2581\n2514\n5095\n7609\n2704\n313\n3017\n3330\n6347\n9677\n6024\n5701\n1725\n7426\n9151\n6577\n5728\n2305\n8033\n338\n8371\n8709\n7080\n5789\n2869\n8658\n1527\n185\n1712\n1897\n3609\n5506\n9115\n4621\n3736\n8357\n2093\n450\n2543\n2993\n5536\n8529\n4065\n2594\n6659\n9253\n5912\n5165\n1077\n6242\n7319\n3561\n880\n4441\n5321\n9762\n5083\n4845\n9928\n4773\n4701\n9474\n4175\n3649\n7824\n1473\n9297\n770\n67\n837\n904\n1741\n2645\n4386\n7031\n1417\n8448\n9865\n8313\n8178\n6491\n4669\n1160\n5829\n6989\n2818\n9807\n2625\n2432\n5057\n7489\n2546\n35\n2581\n2616\n5197\n7813\n3010\n823\n3833\n4656\n8489\n3145\n1634\n4779\n6413\n1192\n7605\n8797\n6402\n5199\n1601\n6800\n8401\n5201\n3602\n8803\n2405\n1208\n3613\n4821\n8434\n3255\n1689\n4944\n6633\n1577\n8210\n9787\n7997\n7784\n5781\n3565\n9346\n2911\n2257\n5168\n7425\n2593\n18\n2611\n2629\n5240\n7869\n3109\n978\n4087\n5065\n9152\n4217\n3369\n7586\n955\n8541\n9496\n8037\n7533\n5570\n3103\n8673\n1776\n449\n2225\n2674\n4899\n7573\n2472\n45\n2517\n2562\n5079\n7641\n2720\n361\n3081\n3442\n6523\n9965\n6488\n6453\n2941\n9394\n2335\n1729\n4064\n5793\n9857\n5650\n5507\n1157\n6664\n7821\n4485\n2306\n6791\n9097\n5888\n4985\n873\n5858\n6731\n2589\n9320\n1909\n1229\n3138\n4367\n7505\n1872\n9377\n1249\n626\n1875\n2501\n4376\n6877\n1253\n8130\n9383\n7513\n6896\n4409\n1305\n5714\n7019\n2733\n9752\n2485\n2237\n4722\n6959\n1681\n8640\n321\n8961\n9282\n8243\n7525\n5768\n3293\n9061\n2354\n1415\n3769\n5184\n8953\n4137\n3090\n7227\n317\n7544\n7861\n5405\n3266\n8671\n1937\n608\n2545\n3153\n5698\n8851\n4549\n3400\n7949\n1349\n9298\n647\n9945\n592\n537\n1129\n1666\n2795\n4461\n7256\n1717\n8973\n690\n9663\n353\n16\n369\n385\n754\n1139\n1893\n3032\n4925\n7957\n2882\n839\n3721\n4560\n8281\n2841\n1122\n3963\n5085\n9048\n4133\n3181\n7314\n495\n7809\n8304\n6113\n4417\n530\n4947\n5477\n424\n5901\n6325\n2226\n8551\n777\n9328\n105\n9433\n9538\n8971\n8509\n7480\n5989\n3469\n9458\n2927\n2385\n5312\n7697\n3009\n706\n3715\n4421\n8136\n2557\n693\n3250\n3943\n7193\n1136\n8329\n9465\n7794\n7259\n5053\n2312\n7365\n9677\n7042\n6719\n3761\n480\n4241\n4721\n8962\n3683\n2645\n6328\n8973\n5301\n4274\n9575\n3849\n3424\n7273\n697\n7970\n8667\n6637\n5304\n1941\n7245\n9186\n6431\n5617\n2048\n7665\n9713\n7378\n7091\n4469\n1560\n6029\n7589\n3618\n1207\n4825\n6032\n857\n6889\n7746\n4635\n2381\n7016\n9397\n6413\n5810\n2223\n8033\n256\n8289\n8545\n6834\n5379\n2213\n7592\n9805\n7397\n7202\n4599\n1801\n6400\n8201\n4601\n2802\n7403\n205\n7608\n7813\n5421\n3234\n8655\n1889\n544\n2433\n2977\n5410\n8387\n3797\n2184\n5981\n8165\n4146\n2311\n6457\n8768\n5225\n3993\n9218\n3211\n2429\n5640\n8069\n3709\n1778\n5487\n7265\n2752\n17\n2769\n2786\n5555\n8341\n3896\n2237\n6133\n8370\n4503\n2873\n7376\n249\n7625\n7874\n5499\n3373\n8872\n2245\n1117\n3362\n4479\n7841\n2320\n161\n2481\n2642\n5123\n7765\n2888\n653\n3541\n4194\n7735\n1929\n9664\n1593\n1257\n2850\n4107\n6957\n1064\n8021\n9085\n7106\n6191\n3297\n9488\n2785\n2273\n5058\n7331\n2389\n9720\n2109\n1829\n3938\n5767\n9705\n5472\n5177\n649\n5826\n6475\n2301\n8776\n1077\n9853\n930\n783\n1713\n2496\n4209\n6705\n914\n7619\n8533\n6152\n4685\n837\n5522\n6359\n1881\n8240\n121\n8361\n8482\n6843\n5325\n2168\n7493\n9661\n7154\n6815\n3969\n784\n4753\n5537\n290\n5827\n6117\n1944\n8061\n5\n8066\n8071\n6137\n4208\n345\n4553\n4898\n9451\n4349\n3800\n8149\n1949\n98\n2047\n2145\n4192\n6337\n529\n6866\n7395\n4261\n1656\n5917\n7573\n3490\n1063\n4553\n5616\n169\n5785\n5954\n1739\n7693\n9432\n7125\n6557\n3682\n239\n3921\n4160\n8081\n2241\n322\n2563\n2885\n5448\n8333\n3781\n2114\n5895\n8009\n3904\n1913\n5817\n7730\n3547\n1277\n4824\n6101\n925\n7026\n7951\n4977\n2928\n7905\n833\n8738\n9571\n8309\n7880\n6189\n4069\n258\n4327\n4585\n8912\n3497\n2409\n5906\n8315\n4221\n2536\n6757\n9293\n6050\n5343\n1393\n6736\n8129\n4865\n2994\n7859\n853\n8712\n9565\n8277\n7842\n6119\n3961\n80\n4041\n4121\n8162\n2283\n445\n2728\n3173\n5901\n9074\n4975\n4049\n9024\n3073\n2097\n5170\n7267\n2437\n9704\n2141\n1845\n3986\n5831\n9817\n5648\n5465\n1113\n6578\n7691\n4269\n1960\n6229\n8189\n4418\n2607\n7025\n9632\n6657\n6289\n2946\n9235\n2181\n1416\n3597\n5013\n8610\n3623\n2233\n5856\n8089\n3945\n2034\n5979\n8013\n3992\n2005\n5997\n8002\n3999\n2001\n6000\n8001\n4001\n2002\n6003\n8005\n4008\n2013\n6021\n8034\n4055\n2089\n6144\n8233\n4377\n2610\n6987\n9597\n6584\n6181\n2765\n8946\n1711\n657\n2368\n3025\n5393\n8418\n3811\n2229\n6040\n8269\n4309\n2578\n6887\n9465\n6352\n5817\n2169\n7986\n155\n8141\n8296\n6437\n4733\n1170\n5903\n7073\n2976\n49\n3025\n3074\n6099\n9173\n5272\n4445\n9717\n4162\n3879\n8041\n1920\n9961\n1881\n1842\n3723\n5565\n9288\n4853\n4141\n8994\n3135\n2129\n5264\n7393\n2657\n50\n2707\n2757\n5464\n8221\n3685\n1906\n5591\n7497\n3088\n585\n3673\n4258\n7931\n2189\n120\n2309\n2429\n4738\n7167\n1905\n9072\n977\n49\n1026\n1075\n2101\n3176\n5277\n8453\n3730\n2183\n5913\n8096\n4009\n2105\n6114\n8219\n4333\n2552\n6885\n9437\n6322\n5759\n2081\n7840\n9921\n7761\n7682\n5443\n3125\n8568\n1693\n261\n1954\n2215\n4169\n6384\n553\n6937\n7490\n4427\n1917\n6344\n8261\n4605\n2866\n7471\n337\n7808\n8145\n5953\n4098\n51\n4149\n4200\n8349\n2549\n898\n3447\n4345\n7792\n2137\n9929\n2066\n1995\n4061\n6056\n117\n6173\n6290\n2463\n8753\n1216\n9969\n1185\n1154\n2339\n3493\n5832\n9325\n5157\n4482\n9639\n4121\n3760\n7881\n1641\n9522\n1163\n685\n1848\n2533\n4381\n6914\n1295\n8209\n9504\n7713\n7217\n4930\n2147\n7077\n9224\n6301\n5525\n1826\n7351\n9177\n6528\n5705\n2233\n7938\n171\n8109\n8280\n6389\n4669\n1058\n5727\n6785\n2512\n9297\n1809\n1106\n2915\n4021\n6936\n957\n7893\n8850\n6743\n5593\n2336\n7929\n265\n8194\n8459\n6653\n5112\n1765\n6877\n8642\n5519\n4161\n9680\n3841\n3521\n7362\n883\n8245\n9128\n7373\n6501\n3874\n375\n4249\n4624\n8873\n3497\n2370\n5867\n8237\n4104\n2341\n6445\n8786\n5231\n4017\n9248\n3265\n2513\n5778\n8291\n4069\n2360\n6429\n8789\n5218\n4007\n9225\n3232\n2457\n5689\n8146\n3835\n1981\n5816\n7797\n3613\n1410\n5023\n6433\n1456\n7889\n9345\n7234\n6579\n3813\n392\n4205\n4597\n8802\n3399\n2201\n5600\n7801\n3401\n1202\n4603\n5805\n408\n6213\n6621\n2834\n9455\n2289\n1744\n4033\n5777\n9810\n5587\n5397\n984\n6381\n7365\n3746\n1111\n4857\n5968\n825\n6793\n7618\n4411\n2029\n6440\n8469\n4909\n3378\n8287\n1665\n9952\n1617\n1569\n3186\n4755\n7941\n2696\n637\n3333\n3970\n7303\n1273\n8576\n9849\n8425\n8274\n6699\n4973\n1672\n6645\n8317\n4962\n3279\n8241\n1520\n9761\n1281\n1042\n2323\n3365\n5688\n9053\n4741\n3794\n8535\n2329\n864\n3193\n4057\n7250\n1307\n8557\n9864\n8421\n8285\n6706\n4991\n1697\n6688\n8385\n5073\n3458\n8531\n1989\n520\n2509\n3029\n5538\n8567\n4105\n2672\n6777\n9449\n6226\n5675\n1901\n7576\n9477\n7053\n6530\n3583\n113\n3696\n3809\n7505\n1314\n8819\n133\n8952\n9085\n8037\n7122\n5159\n2281\n7440\n9721\n7161\n6882\n4043\n925\n4968\n5893\n861\n6754\n7615\n4369\n1984\n6353\n8337\n4690\n3027\n7717\n744\n8461\n9205\n7666\n6871\n4537\n1408\n5945\n7353\n3298\n651\n3949\n4600\n8549\n3149\n1698\n4847\n6545\n1392\n7937\n9329\n7266\n6595\n3861\n456\n4317\n4773\n9090\n3863\n2953\n6816\n9769\n6585\n6354\n2939\n9293\n2232\n1525\n3757\n5282\n9039\n4321\n3360\n7681\n1041\n8722\n9763\n8485\n8248\n6733\n4981\n1714\n6695\n8409\n5104\n3513\n8617\n2130\n747\n2877\n3624\n6501\n125\n6626\n6751\n3377\n128\n3505\n3633\n7138\n771\n7909\n8680\n6589\n5269\n1858\n7127\n8985\n6112\n5097\n1209\n6306\n7515\n3821\n1336\n5157\n6493\n1650\n8143\n9793\n7936\n7729\n5665\n3394\n9059\n2453\n1512\n3965\n5477\n9442\n4919\n4361\n9280\n3641\n2921\n6562\n9483\n6045\n5528\n1573\n7101\n8674\n5775\n4449\n224\n4673\n4897\n9570\n4467\n4037\n8504\n2541\n1045\n3586\n4631\n8217\n2848\n1065\n3913\n4978\n8891\n3869\n2760\n6629\n9389\n6018\n5407\n1425\n6832\n8257\n5089\n3346\n8435\n1781\n216\n1997\n2213\n4210\n6423\n633\n7056\n7689\n4745\n2434\n7179\n9613\n6792\n6405\n3197\n9602\n2799\n2401\n5200\n7601\n2801\n402\n3203\n3605\n6808\n413\n7221\n7634\n4855\n2489\n7344\n9833\n7177\n7010\n4187\n1197\n5384\n6581\n1965\n8546\n511\n9057\n9568\n8625\n8193\n6818\n5011\n1829\n6840\n8669\n5509\n4178\n9687\n3865\n3552\n7417\n969\n8386\n9355\n7741\n7096\n4837\n1933\n6770\n8703\n5473\n4176\n9649\n3825\n3474\n7299\n773\n8072\n8845\n6917\n5762\n2679\n8441\n1120\n9561\n681\n242\n923\n1165\n2088\n3253\n5341\n8594\n3935\n2529\n6464\n8993\n5457\n4450\n9907\n4357\n4264\n8621\n2885\n1506\n4391\n5897\n288\n6185\n6473\n2658\n9131\n1789\n920\n2709\n3629\n6338\n9967\n6305\n6272\n2577\n8849\n1426\n275\n1701\n1976\n3677\n5653\n9330\n4983\n4313\n9296\n3609\n2905\n6514\n9419\n5933\n5352\n1285\n6637\n7922\n4559\n2481\n7040\n9521\n6561\n6082\n2643\n8725\n1368\n93\n1461\n1554\n3015\n4569\n7584\n2153\n9737\n1890\n1627\n3517\n5144\n8661\n3805\n2466\n6271\n8737\n5008\n3745\n8753\n2498\n1251\n3749\n5000\n8749\n3749\n2498\n6247\n8745\n4992\n3737\n8729\n2466\n1195\n3661\n4856\n8517\n3373\n1890\n5263\n7153\n2416\n9569\n1985\n1554\n3539\n5093\n8632\n3725\n2357\n6082\n8439\n4521\n2960\n7481\n441\n7922\n8363\n6285\n4648\n933\n5581\n6514\n2095\n8609\n704\n9313\n17\n9330\n9347\n8677\n8024\n6701\n4725\n1426\n6151\n7577\n3728\n1305\n5033\n6338\n1371\n7709\n9080\n6789\n5869\n2658\n8527\n1185\n9712\n897\n609\n1506\n2115\n3621\n5736\n9357\n5093\n4450\n9543\n3993\n3536\n7529\n1065\n8594\n9659\n8253\n7912\n6165\n4077\n242\n4319\n4561\n8880\n3441\n2321\n5762\n8083\n3845\n1928\n5773\n7701\n3474\n1175\n4649\n5824\n473\n6297\n6770\n3067\n9837\n2904\n2741\n5645\n8386\n4031\n2417\n6448\n8865\n5313\n4178\n9491\n3669\n3160\n6829\n9989\n6818\n6807\n3625\n432\n4057\n4489\n8546\n3035\n1581\n4616\n6197\n813\n7010\n7823\n4833\n2656\n7489\n145\n7634\n7779\n5413\n3192\n8605\n1797\n402\n2199\n2601\n4800\n7401\n2201\n9602\n1803\n1405\n3208\n4613\n7821\n2434\n255\n2689\n2944\n5633\n8577\n4210\n2787\n6997\n9784\n6781\n6565\n3346\n9911\n3257\n3168\n6425\n9593\n6018\n5611\n1629\n7240\n8869\n6109\n4978\n1087\n6065\n7152\n3217\n369\n3586\n3955\n7541\n1496\n9037\n533\n9570\n103\n9673\n9776\n9449\n9225\n8674\n7899\n6573\n4472\n1045\n5517\n6562\n2079\n8641\n720\n9361\n81\n9442\n9523\n8965\n8488\n7453\n5941\n3394\n9335\n2729\n2064\n4793\n6857\n1650\n8507\n157\n8664\n8821\n7485\n6306\n3791\n97\n3888\n3985\n7873\n1858\n9731\n1589\n1320\n2909\n4229\n7138\n1367\n8505\n9872\n8377\n8249\n6626\n4875\n1501\n6376\n7877\n4253\n2130\n6383\n8513\n4896\n3409\n8305\n1714\n19\n1733\n1752\n3485\n5237\n8722\n3959\n2681\n6640\n9321\n5961\n5282\n1243\n6525\n7768\n4293\n2061\n6354\n8415\n4769\n3184\n7953\n1137\n9090\n227\n9317\n9544\n8861\n8405\n7266\n5671\n2937\n8608\n1545\n153\n1698\n1851\n3549\n5400\n8949\n4349\n3298\n7647\n945\n8592\n9537\n8129\n7666\n5795\n3461\n9256\n2717\n1973\n4690\n6663\n1353\n8016\n9369\n7385\n6754\n4139\n893\n5032\n5925\n957\n6882\n7839\n4721\n2560\n7281\n9841\n7122\n6963\n4085\n1048\n5133\n6181\n1314\n7495\n8809\n6304\n5113\n1417\n6530\n7947\n4477\n2424\n6901\n9325\n6226\n5551\n1777\n7328\n9105\n6433\n5538\n1971\n7509\n9480\n6989\n6469\n3458\n9927\n3385\n3312\n6697\n9\n6706\n6715\n3421\n136\n3557\n3693\n7250\n943\n8193\n9136\n7329\n6465\n3794\n259\n4053\n4312\n8365\n2677\n1042\n3719\n4761\n8480\n3241\n1721\n4962\n6683\n1645\n8328\n9973\n8301\n8274\n6575\n4849\n1424\n6273\n7697\n3970\n1667\n5637\n7304\n2941\n245\n3186\n3431\n6617\n48\n6665\n6713\n3378\n91\n3469\n3560\n7029\n589\n7618\n8207\n5825\n4032\n9857\n3889\n3746\n7635\n1381\n9016\n397\n9413\n9810\n9223\n9033\n8256\n7289\n5545\n2834\n8379\n1213\n9592\n805\n397\n1202\n1599\n2801\n4400\n7201\n1601\n8802\n403\n9205\n9608\n8813\n8421\n7234\n5655\n2889\n8544\n1433\n9977\n1410\n1387\n2797\n4184\n6981\n1165\n8146\n9311\n7457\n6768\n4225\n993\n5218\n6211\n1429\n7640\n9069\n6709\n5778\n2487\n8265\n752\n9017\n9769\n8786\n8555\n7341\n5896\n3237\n9133\n2370\n1503\n3873\n5376\n9249\n4625\n3874\n8499\n2373\n872\n3245\n4117\n7362\n1479\n8841\n320\n9161\n9481\n8642\n8123\n6765\n4888\n1653\n6541\n8194\n4735\n2929\n7664\n593\n8257\n8850\n7107\n5957\n3064\n9021\n2085\n1106\n3191\n4297\n7488\n1785\n9273\n1058\n331\n1389\n1720\n3109\n4829\n7938\n2767\n705\n3472\n4177\n7649\n1826\n9475\n1301\n776\n2077\n2853\n4930\n7783\n2713\n496\n3209\n3705\n6914\n619\n7533\n8152\n5685\n3837\n9522\n3359\n2881\n6240\n9121\n5361\n4482\n9843\n4325\n4168\n8493\n2661\n1154\n3815\n4969\n8784\n3753\n2537\n6290\n8827\n5117\n3944\n9061\n3005\n2066\n5071\n7137\n2208\n9345\n1553\n898\n2451\n3349\n5800\n9149\n4949\n4098\n9047\n3145\n2192\n5337\n7529\n2866\n395\n3261\n3656\n6917\n573\n7490\n8063\n5553\n3616\n9169\n2785\n1954\n4739\n6693\n1432\n8125\n9557\n7682\n7239\n4921\n2160\n7081\n9241\n6322\n5563\n1885\n7448\n9333\n6781\n6114\n2895\n9009\n1904\n913\n2817\n3730\n6547\n277\n6824\n7101\n3925\n1026\n4951\n5977\n928\n6905\n7833\n4738\n2571\n7309\n9880\n7189\n7069\n4258\n1327\n5585\n6912\n2497\n9409\n1906\n1315\n3221\n4536\n7757\n2293\n50\n2343\n2393\n4736\n7129\n1865\n8994\n859\n9853\n712\n565\n1277\n1842\n3119\n4961\n8080\n3041\n1121\n4162\n5283\n9445\n4728\n4173\n8901\n3074\n1975\n5049\n7024\n2073\n9097\n1170\n267\n1437\n1704\n3141\n4845\n7986\n2831\n817\n3648\n4465\n8113\n2578\n691\n3269\n3960\n7229\n1189\n8418\n9607\n8025\n7632\n5657\n3289\n8946\n2235\n1181\n3416\n4597\n8013\n2610\n623\n3233\n3856\n7089\n945\n8034\n8979\n7013\n5992\n3005\n8997\n2002\n999\n3001\n4000\n7001\n1001\n8002\n9003\n7005\n6008\n3013\n9021\n2034\n1055\n3089\n4144\n7233\n1377\n8610\n9987\n8597\n8584\n7181\n5765\n2946\n8711\n1657\n368\n2025\n2393\n4418\n6811\n1229\n8040\n9269\n7309\n6578\n3887\n465\n4352\n4817\n9169\n3986\n3155\n7141\n296\n7437\n7733\n5170\n2903\n8073\n976\n9049\n25\n9074\n9099\n8173\n7272\n5445\n2717\n8162\n879\n9041\n9920\n8961\n8881\n7842\n6723\n4565\n1288\n5853\n7141\n2994\n135\n3129\n3264\n6393\n9657\n6050\n5707\n1757\n7464\n9221\n6685\n5906\n2591\n8497\n1088\n9585\n673\n258\n931\n1189\n2120\n3309\n5429\n8738\n4167\n2905\n7072\n9977\n7049\n7026\n4075\n1101\n5176\n6277\n1453\n7730\n9183\n6913\n6096\n3009\n9105\n2114\n1219\n3333\n4552\n7885\n2437\n322\n2759\n3081\n5840\n8921\n4761\n3682\n8443\n2125\n568\n2693\n3261\n5954\n9215\n5169\n4384\n9553\n3937\n3490\n7427\n917\n8344\n9261\n7605\n6866\n4471\n1337\n5808\n7145\n2953\n98\n3051\n3149\n6200\n9349\n5549\n4898\n447\n5345\n5792\n1137\n6929\n8066\n4995\n3061\n8056\n1117\n9173\n290\n9463\n9753\n9216\n8969\n8185\n7154\n5339\n2493\n7832\n325\n8157\n8482\n6639\n5121\n1760\n6881\n8641\n5522\n4163\n9685\n3848\n3533\n7381\n914\n8295\n9209\n7504\n6713\n4217\n930\n5147\n6077\n1224\n7301\n8525\n5826\n4351\n177\n4528\n4705\n9233\n3938\n3171\n7109\n280\n7389\n7669\n5058\n2727\n7785\n512\n8297\n8809\n7106\n5915\n3021\n8936\n1957\n893\n2850\n3743\n6593\n336\n6929\n7265\n4194\n1459\n5653\n7112\n2765\n9877\n2642\n2519\n5161\n7680\n2841\n521\n3362\n3883\n7245\n1128\n8373\n9501\n7874\n7375\n5249\n2624\n7873\n497\n8370\n8867\n7237\n6104\n3341\n9445\n2786\n2231\n5017\n7248\n2265\n9513\n1778\n1291\n3069\n4360\n7429\n1789\n9218\n1007\n225\n1232\n1457\n2689\n4146\n6835\n981\n7816\n8797\n6613\n5410\n2023\n7433\n9456\n6889\n6345\n3234\n9579\n2813\n2392\n5205\n7597\n2802\n399\n3201\n3600\n6801\n401\n7202\n7603\n4805\n2408\n7213\n9621\n6834\n6455\n3289\n9744\n3033\n2777\n5810\n8587\n4397\n2984\n7381\n365\n7746\n8111\n5857\n3968\n9825\n3793\n3618\n7411\n1029\n8440\n9469\n7909\n7378\n5287\n2665\n7952\n617\n8569\n9186\n7755\n6941\n4696\n1637\n6333\n7970\n4303\n2273\n6576\n8849\n5425\n4274\n9699\n3973\n3672\n7645\n1317\n8962\n279\n9241\n9520\n8761\n8281\n7042\n5323\n2365\n7688\n53\n7741\n7794\n5535\n3329\n8864\n2193\n1057\n3250\n4307\n7557\n1864\n9421\n1285\n706\n1991\n2697\n4688\n7385\n2073\n9458\n1531\n989\n2520\n3509\n6029\n9538\n5567\n5105\n672\n5777\n6449\n2226\n8675\n901\n9576\n477\n53\n530\n583\n1113\n1696\n2809\n4505\n7314\n1819\n9133\n952\n85\n1037\n1122\n2159\n3281\n5440\n8721\n4161\n2882\n7043\n9925\n6968\n6893\n3861\n754\n4615\n5369\n9984\n5353\n5337\n690\n6027\n6717\n2744\n9461\n2205\n1666\n3871\n5537\n9408\n4945\n4353\n9298\n3651\n2949\n6600\n9549\n6149\n5698\n1847\n7545\n9392\n6937\n6329\n3266\n9595\n2861\n2456\n5317\n7773\n3090\n863\n3953\n4816\n8769\n3585\n2354\n5939\n8293\n4232\n2525\n6757\n9282\n6039\n5321\n1360\n6681\n8041\n4722\n2763\n7485\n248\n7733\n7981\n5714\n3695\n9409\n3104\n2513\n5617\n8130\n3747\n1877\n5624\n7501\n3125\n626\n3751\n4377\n8128\n2505\n633\n3138\n3771\n6909\n680\n7589\n8269\n5858\n4127\n9985\n4112\n4097\n8209\n2306\n515\n2821\n3336\n6157\n9493\n5650\n5143\n793\n5936\n6729\n2665\n9394\n2059\n1453\n3512\n4965\n8477\n3442\n1919\n5361\n7280\n2641\n9921\n2562\n2483\n5045\n7528\n2573\n101\n2674\n2775\n5449\n8224\n3673\n1897\n5570\n7467\n3037\n504\n3541\n4045\n7586\n1631\n9217\n848\n65\n913\n978\n1891\n2869\n4760\n7629\n2389\n18\n2407\n2425\n4832\n7257\n2089\n9346\n1435\n781\n2216\n2997\n5213\n8210\n3423\n1633\n5056\n6689\n1745\n8434\n179\n8613\n8792\n7405\n6197\n3602\n9799\n3401\n3200\n6601\n9801\n6402\n6203\n2605\n8808\n1413\n221\n1634\n1855\n3489\n5344\n8833\n4177\n3010\n7187\n197\n7384\n7581\n4965\n2546\n7511\n57\n7568\n7625\n5193\n2818\n8011\n829\n8840\n9669\n8509\n8178\n6687\n4865\n1552\n6417\n7969\n4386\n2355\n6741\n9096\n5837\n4933\n770\n5703\n6473\n2176\n8649\n825\n9474\n299\n9773\n72\n9845\n9917\n9762\n9679\n9441\n9120\n8561\n7681\n6242\n3923\n165\n4088\n4253\n8341\n2594\n935\n3529\n4464\n7993\n2457\n450\n2907\n3357\n6264\n9621\n5885\n5506\n1391\n6897\n8288\n5185\n3473\n8658\n2131\n789\n2920\n3709\n6629\n338\n6967\n7305\n4272\n1577\n5849\n7426\n3275\n701\n3976\n4677\n8653\n3330\n1983\n5313\n7296\n2609\n9905\n2514\n2419\n4933\n7352\n2285\n9637\n1922\n1559\n3481\n5040\n8521\n3561\n2082\n5643\n7725\n3368\n1093\n4461\n5554\n15\n5569\n5584\n1153\n6737\n7890\n4627\n2517\n7144\n9661\n6805\n6466\n3271\n9737\n3008\n2745\n5753\n8498\n4251\n2749\n7000\n9749\n6749\n6498\n3247\n9745\n2992\n2737\n5729\n8466\n4195\n2661\n6856\n9517\n6373\n5890\n2263\n8153\n416\n8569\n8985\n7554\n6539\n4093\n632\n4725\n5357\n82\n5439\n5521\n960\n6481\n7441\n3922\n1363\n5285\n6648\n1933\n8581\n514\n9095\n9609\n8704\n8313\n7017\n5330\n2347\n7677\n24\n7701\n7725\n5426\n3151\n8577\n1728\n305\n2033\n2338\n4371\n6709\n1080\n7789\n8869\n6658\n5527\n2185\n7712\n9897\n7609\n7506\n5115\n2621\n7736\n357\n8093\n8450\n6543\n4993\n1536\n6529\n8065\n4594\n2659\n7253\n9912\n7165\n7077\n4242\n1319\n5561\n6880\n2441\n9321\n1762\n1083\n2845\n3928\n6773\n701\n7474\n8175\n5649\n3824\n9473\n3297\n2770\n6067\n8837\n4904\n3741\n8645\n2386\n1031\n3417\n4448\n7865\n2313\n178\n2491\n2669\n5160\n7829\n2989\n818\n3807\n4625\n8432\n3057\n1489\n4546\n6035\n581\n6616\n7197\n3813\n1010\n4823\n5833\n656\n6489\n7145\n3634\n779\n4413\n5192\n9605\n4797\n4402\n9199\n3601\n2800\n6401\n9201\n5602\n4803\n405\n5208\n5613\n821\n6434\n7255\n3689\n944\n4633\n5577\n210\n5787\n5997\n1784\n7781\n9565\n7346\n6911\n4257\n1168\n5425\n6593\n2018\n8611\n629\n9240\n9869\n9109\n8978\n8087\n7065\n5152\n2217\n7369\n9586\n6955\n6541\n3496\n37\n3533\n3570\n7103\n673\n7776\n8449\n6225\n4674\n899\n5573\n6472\n2045\n8517\n562\n9079\n9641\n8720\n8361\n7081\n5442\n2523\n7965\n488\n8453\n8941\n7394\n6335\n3729\n64\n3793\n3857\n7650\n1507\n9157\n664\n9821\n485\n306\n791\n1097\n1888\n2985\n4873\n7858\n2731\n589\n3320\n3909\n7229\n1138\n8367\n9505\n7872\n7377\n5249\n2626\n7875\n501\n8376\n8877\n7253\n6130\n3383\n9513\n2896\n2409\n5305\n7714\n3019\n733\n3752\n4485\n8237\n2722\n959\n3681\n4640\n8321\n2961\n1282\n4243\n5525\n9768\n5293\n5061\n354\n5415\n5769\n1184\n6953\n8137\n5090\n3227\n8317\n1544\n9861\n1405\n1266\n2671\n3937\n6608\n545\n7153\n7698\n4851\n2549\n7400\n9949\n7349\n7298\n4647\n1945\n6592\n8537\n5129\n3666\n8795\n2461\n1256\n3717\n4973\n8690\n3663\n2353\n6016\n8369\n4385\n2754\n7139\n9893\n7032\n6925\n3957\n882\n4839\n5721\n560\n6281\n6841\n3122\n9963\n3085\n3048\n6133\n9181\n5314\n4495\n9809\n4304\n4113\n8417\n2530\n947\n3477\n4424\n7901\n2325\n226\n2551\n2777\n5328\n8105\n3433\n1538\n4971\n6509\n1480\n7989\n9469\n7458\n6927\n4385\n1312\n5697\n7009\n2706\n9715\n2421\n2136\n4557\n6693\n1250\n7943\n9193\n7136\n6329\n3465\n9794\n3259\n3053\n6312\n9365\n5677\n5042\n719\n5761\n6480\n2241\n8721\n962\n9683\n645\n328\n973\n1301\n2274\n3575\n5849\n9424\n5273\n4697\n9970\n4667\n4637\n9304\n3941\n3245\n7186\n431\n7617\n8048\n5665\n3713\n9378\n3091\n2469\n5560\n8029\n3589\n1618\n5207\n6825\n2032\n8857\n889\n9746\n635\n381\n1016\n1397\n2413\n3810\n6223\n33\n6256\n6289\n2545\n8834\n1379\n213\n1592\n1805\n3397\n5202\n8599\n3801\n2400\n6201\n8601\n4802\n3403\n8205\n1608\n9813\n1421\n1234\n2655\n3889\n6544\n433\n6977\n7410\n4387\n1797\n6184\n7981\n4165\n2146\n6311\n8457\n4768\n3225\n7993\n1218\n9211\n429\n9640\n69\n9709\n9778\n9487\n9265\n8752\n8017\n6769\n4786\n1555\n6341\n7896\n4237\n2133\n6370\n8503\n4873\n3376\n8249\n1625\n9874\n1499\n1373\n2872\n4245\n7117\n1362\n8479\n9841\n8320\n8161\n6481\n4642\n1123\n5765\n6888\n2653\n9541\n2194\n1735\n3929\n5664\n9593\n5257\n4850\n107\n4957\n5064\n21\n5085\n5106\n191\n5297\n5488\n785\n6273\n7058\n3331\n389\n3720\n4109\n7829\n1938\n9767\n1705\n1472\n3177\n4649\n7826\n2475\n301\n2776\n3077\n5853\n8930\n4783\n3713\n8496\n2209\n705\n2914\n3619\n6533\n152\n6685\n6837\n3522\n359\n3881\n4240\n8121\n2361\n482\n2843\n3325\n6168\n9493\n5661\n5154\n815\n5969\n6784\n2753\n9537\n2290\n1827\n4117\n5944\n61\n6005\n6066\n2071\n8137\n208\n8345\n8553\n6898\n5451\n2349\n7800\n149\n7949\n8098\n6047\n4145\n192\n4337\n4529\n8866\n3395\n2261\n5656\n7917\n3573\n1490\n5063\n6553\n1616\n8169\n9785\n7954\n7739\n5693\n3432\n9125\n2557\n1682\n4239\n5921\n160\n6081\n6241\n2322\n8563\n885\n9448\n333\n9781\n114\n9895\n9\n9904\n9913\n9817\n9730\n9547\n9277\n8824\n8101\n6925\n5026\n1951\n6977\n8928\n5905\n4833\n738\n5571\n6309\n1880\n8189\n69\n8258\n8327\n6585\n4912\n1497\n6409\n7906\n4315\n2221\n6536\n8757\n5293\n4050\n9343\n3393\n2736\n6129\n8865\n4994\n3859\n8853\n2712\n1565\n4277\n5842\n119\n5961\n6080\n2041\n8121\n162\n8283\n8445\n6728\n5173\n1901\n7074\n8975\n6049\n5024\n1073\n6097\n7170\n3267\n437\n3704\n4141\n7845\n1986\n9831\n1817\n1648\n3465\n5113\n8578\n3691\n2269\n5960\n8229\n4189\n2418\n6607\n9025\n5632\n4657\n289\n4946\n5235\n181\n5416\n5597\n1013\n6610\n7623\n4233\n1856\n6089\n7945\n4034\n1979\n6013\n7992\n4005\n1997\n6002\n7999\n4001\n2000\n6001\n8001\n4002\n2003\n6005\n8008\n4013\n2021\n6034\n8055\n4089\n2144\n6233\n8377\n4610\n2987\n7597\n584\n8181\n8765\n6946\n5711\n2657\n8368\n1025\n9393\n418\n9811\n229\n40\n269\n309\n578\n887\n1465\n2352\n3817\n6169\n9986\n6155\n6141\n2296\n8437\n733\n9170\n9903\n9073\n8976\n8049\n7025\n5074\n2099\n7173\n9272\n6445\n5717\n2162\n7879\n41\n7920\n7961\n5881\n3842\n9723\n3565\n3288\n6853\n141\n6994\n7135\n4129\n1264\n5393\n6657\n2050\n8707\n757\n9464\n221\n9685\n9906\n9591\n9497\n9088\n8585\n7673\n6258\n3931\n189\n4120\n4309\n8429\n2738\n1167\n3905\n5072\n8977\n4049\n3026\n7075\n101\n7176\n7277\n4453\n1730\n6183\n7913\n4096\n2009\n6105\n8114\n4219\n2333\n6552\n8885\n5437\n4322\n9759\n4081\n3840\n7921\n1761\n9682\n1443\n1125\n2568\n3693\n6261\n9954\n6215\n6169\n2384\n8553\n937\n9490\n427\n9917\n344\n261\n605\n866\n1471\n2337\n3808\n6145\n9953\n6098\n6051\n2149\n8200\n349\n8549\n8898\n7447\n6345\n3792\n137\n3929\n4066\n7995\n2061\n56\n2117\n2173\n4290\n6463\n753\n7216\n7969\n5185\n3154\n8339\n1493\n9832\n1325\n1157\n2482\n3639\n6121\n9760\n5881\n5641\n1522\n7163\n8685\n5848\n4533\n381\n4914\n5295\n209\n5504\n5713\n1217\n6930\n8147\n5077\n3224\n8301\n1525\n9826\n1351\n1177\n2528\n3705\n6233\n9938\n6171\n6109\n2280\n8389\n669\n9058\n9727\n8785\n8512\n7297\n5809\n3106\n8915\n2021\n936\n2957\n3893\n6850\n743\n7593\n8336\n5929\n4265\n194\n4459\n4653\n9112\n3765\n2877\n6642\n9519\n6161\n5680\n1841\n7521\n9362\n6883\n6245\n3128\n9373\n2501\n1874\n4375\n6249\n624\n6873\n7497\n4370\n1867\n6237\n8104\n4341\n2445\n6786\n9231\n6017\n5248\n1265\n6513\n7778\n4291\n2069\n6360\n8429\n4789\n3218\n8007\n1225\n9232\n457\n9689\n146\n9835\n9981\n9816\n9797\n9613\n9410\n9023\n8433\n7456\n5889\n3345\n9234\n2579\n1813\n4392\n6205\n597\n6802\n7399\n4201\n1600\n5801\n7401\n3202\n603\n3805\n4408\n8213\n2621\n834\n3455\n4289\n7744\n2033\n9777\n1810\n1587\n3397\n4984\n8381\n3365\n1746\n5111\n6857\n1968\n8825\n793\n9618\n411\n29\n440\n469\n909\n1378\n2287\n3665\n5952\n9617\n5569\n5186\n755\n5941\n6696\n2637\n9333\n1970\n1303\n3273\n4576\n7849\n2425\n274\n2699\n2973\n5672\n8645\n4317\n2962\n7279\n241\n7520\n7761\n5281\n3042\n8323\n1365\n9688\n1053\n741\n1794\n2535\n4329\n6864\n1193\n8057\n9250\n7307\n6557\n3864\n421\n4285\n4706\n8991\n3697\n2688\n6385\n9073\n5458\n4531\n9989\n4520\n4509\n9029\n3538\n2567\n6105\n8672\n4777\n3449\n8226\n1675\n9901\n1576\n1477\n3053\n4530\n7583\n2113\n9696\n1809\n1505\n3314\n4819\n8133\n2952\n1085\n4037\n5122\n9159\n4281\n3440\n7721\n1161\n8882\n43\n8925\n8968\n7893\n6861\n4754\n1615\n6369\n7984\n4353\n2337\n6690\n9027\n5717\n4744\n461\n5205\n5666\n871\n6537\n7408\n3945\n1353\n5298\n6651\n1949\n8600\n549\n9149\n9698\n8847\n8545\n7392\n5937\n3329\n9266\n2595\n1861\n4456\n6317\n773\n7090\n7863\n4953\n2816\n7769\n585\n8354\n8939\n7293\n6232\n3525\n9757\n3282\n3039\n6321\n9360\n5681\n5041\n722\n5763\n6485\n2248\n8733\n981\n9714\n695\n409\n1104\n1513\n2617\n4130\n6747\n877\n7624\n8501\n6125\n4626\n751\n5377\n6128\n1505\n7633\n9138\n6771\n5909\n2680\n8589\n1269\n9858\n1127\n985\n2112\n3097\n5209\n8306\n3515\n1821\n5336\n7157\n2493\n9650\n2143\n1793\n3936\n5729\n9665\n5394\n5059\n453\n5512\n5965\n1477\n7442\n8919\n6361\n5280\n1641\n6921\n8562\n5483\n4045\n9528\n3573\n3101\n6674\n9775\n6449\n6224\n2673\n8897\n1570\n467\n2037\n2504\n4541\n7045\n1586\n8631\n217\n8848\n9065\n7913\n6978\n4891\n1869\n6760\n8629\n5389\n4018\n9407\n3425\n2832\n6257\n9089\n5346\n4435\n9781\n4216\n3997\n8213\n2210\n423\n2633\n3056\n5689\n8745\n4434\n3179\n7613\n792\n8405\n9197\n7602\n6799\n4401\n1200\n5601\n6801\n2402\n9203\n1605\n808\n2413\n3221\n5634\n8855\n4489\n3344\n7833\n1177\n9010\n187\n9197\n9384\n8581\n7965\n6546\n4511\n1057\n5568\n6625\n2193\n8818\n1011\n9829\n840\n669\n1509\n2178\n3687\n5865\n9552\n5417\n4969\n386\n5355\n5741\n1096\n6837\n7933\n4770\n2703\n7473\n176\n7649\n7825\n5474\n3299\n8773\n2072\n845\n2917\n3762\n6679\n441\n7120\n7561\n4681\n2242\n6923\n9165\n6088\n5253\n1341\n6594\n7935\n4529\n2464\n6993\n9457\n6450\n5907\n2357\n8264\n621\n8885\n9506\n8391\n7897\n6288\n4185\n473\n4658\n5131\n9789\n4920\n4709\n9629\n4338\n3967\n8305\n2272\n577\n2849\n3426\n6275\n9701\n5976\n5677\n1653\n7330\n8983\n6313\n5296\n1609\n6905\n8514\n5419\n3933\n9352\n3285\n2637\n5922\n8559\n4481\n3040\n7521\n561\n8082\n8643\n6725\n5368\n2093\n7461\n9554\n7015\n6569\n3584\n153\n3737\n3890\n7627\n1517\n9144\n661\n9805\n466\n271\n737\n1008\n1745\n2753\n4498\n7251\n1749\n9000\n749\n9749\n498\n247\n745\n992\n1737\n2729\n4466\n7195\n1661\n8856\n517\n9373\n9890\n9263\n9153\n8416\n7569\n5985\n3554\n9539\n3093\n2632\n5725\n8357\n4082\n2439\n6521\n8960\n5481\n4441\n9922\n4363\n4285\n8648\n2933\n1581\n4514\n6095\n609\n6704\n7313\n4017\n1330\n5347\n6677\n2024\n8701\n725\n9426\n151\n9577\n9728\n9305\n9033\n8338\n7371\n5709\n3080\n8789\n1869\n658\n2527\n3185\n5712\n8897\n4609\n3506\n8115\n1621\n9736\n1357\n1093\n2450\n3543\n5993\n9536\n5529\n5065\n594\n5659\n6253\n1912\n8165\n77\n8242\n8319\n6561\n4880\n1441\n6321\n7762\n4083\n1845\n5928\n7773\n3701\n1474\n5175\n6649\n1824\n8473\n297\n8770\n9067\n7837\n6904\n4741\n1645\n6386\n8031\n4417\n2448\n6865\n9313\n6178\n5491\n1669\n7160\n8829\n5989\n4818\n807\n5625\n6432\n2057\n8489\n546\n9035\n9581\n8616\n8197\n6813\n5010\n1823\n6833\n8656\n5489\n4145\n9634\n3779\n3413\n7192\n605\n7797\n8402\n6199\n4601\n800\n5401\n6201\n1602\n7803\n9405\n7208\n6613\n3821\n434\n4255\n4689\n8944\n3633\n2577\n6210\n8787\n4997\n3784\n8781\n2565\n1346\n3911\n5257\n9168\n4425\n3593\n8018\n1611\n9629\n1240\n869\n2109\n2978\n5087\n8065\n3152\n1217\n4369\n5586\n9955\n5541\n5496\n1037\n6533\n7570\n4103\n1673\n5776\n7449\n3225\n674\n3899\n4573\n8472\n3045\n1517\n4562\n6079\n641\n6720\n7361\n4081\n1442\n5523\n6965\n2488\n9453\n1941\n1394\n3335\n4729\n8064\n2793\n857\n3650\n4507\n8157\n2664\n821\n3485\n4306\n7791\n2097\n9888\n1985\n1873\n3858\n5731\n9589\n5320\n4909\n229\n5138\n5367\n505\n5872\n6377\n2249\n8626\n875\n9501\n376\n9877\n253\n130\n383\n513\n896\n1409\n2305\n3714\n6019\n9733\n5752\n5485\n1237\n6722\n7959\n4681\n2640\n7321\n9961\n7282\n7243\n4525\n1768\n6293\n8061\n4354\n2415\n6769\n9184\n5953\n5137\n1090\n6227\n7317\n3544\n861\n4405\n5266\n9671\n4937\n4608\n9545\n4153\n3698\n7851\n1549\n9400\n949\n349\n1298\n1647\n2945\n4592\n7537\n2129\n9666\n1795\n1461\n3256\n4717\n7973\n2690\n663\n3353\n4016\n7369\n1385\n8754\n139\n8893\n9032\n7925\n6957\n4882\n1839\n6721\n8560\n5281\n3841\n9122\n2963\n2085\n5048\n7133\n2181\n9314\n1495\n809\n2304\n3113\n5417\n8530\n3947\n2477\n6424\n8901\n5325\n4226\n9551\n3777\n3328\n7105\n433\n7538\n7971\n5509\n3480\n8989\n2469\n1458\n3927\n5385\n9312\n4697\n4009\n8706\n2715\n1421\n4136\n5557\n9693\n5250\n4943\n193\n5136\n5329\n465\n5794\n6259\n2053\n8312\n365\n8677\n9042\n7719\n6761\n4480\n1241\n5721\n6962\n2683\n9645\n2328\n1973\n4301\n6274\n575\n6849\n7424\n4273\n1697\n5970\n7667\n3637\n1304\n4941\n6245\n1186\n7431\n8617\n6048\n4665\n713\n5378\n6091\n1469\n7560\n9029\n6589\n5618\n2207\n7825\n32\n7857\n7889\n5746\n3635\n9381\n3016\n2397\n5413\n7810\n3223\n1033\n4256\n5289\n9545\n4834\n4379\n9213\n3592\n2805\n6397\n9202\n5599\n4801\n400\n5201\n5601\n802\n6403\n7205\n3608\n813\n4421\n5234\n9655\n4889\n4544\n9433\n3977\n3410\n7387\n797\n8184\n8981\n7165\n6146\n3311\n9457\n2768\n2225\n4993\n7218\n2211\n9429\n1640\n1069\n2709\n3778\n6487\n265\n6752\n7017\n3769\n786\n4555\n5341\n9896\n5237\n5133\n370\n5503\n5873\n1376\n7249\n8625\n5874\n4499\n373\n4872\n5245\n117\n5362\n5479\n841\n6320\n7161\n3481\n642\n4123\n4765\n8888\n3653\n2541\n6194\n8735\n4929\n3664\n8593\n2257\n850\n3107\n3957\n7064\n1021\n8085\n9106\n7191\n6297\n3488\n9785\n3273\n3058\n6331\n9389\n5720\n5109\n829\n5938\n6767\n2705\n9472\n2177\n1649\n3826\n5475\n9301\n4776\n4077\n8853\n2930\n1783\n4713\n6496\n1209\n7705\n8914\n6619\n5533\n2152\n7685\n9837\n7522\n7359\n4881\n2240\n7121\n9361\n6482\n5843\n2325\n8168\n493\n8661\n9154\n7815\n6969\n4784\n1753\n6537\n8290\n4827\n3117\n7944\n1061\n9005\n66\n9071\n9137\n8208\n7345\n5553\n2898\n8451\n1349\n9800\n1149\n949\n2098\n3047\n5145\n8192\n3337\n1529\n4866\n6395\n1261\n7656\n8917\n6573\n5490\n2063\n7553\n9616\n7169\n6785\n3954\n739\n4693\n5432\n125\n5557\n5682\n1239\n6921\n8160\n5081\n3241\n8322\n1563\n9885\n1448\n1333\n2781\n4114\n6895\n1009\n7904\n8913\n6817\n5730\n2547\n8277\n824\n9101\n9925\n9026\n8951\n7977\n6928\n4905\n1833\n6738\n8571\n5309\n3880\n9189\n3069\n2258\n5327\n7585\n2912\n497\n3409\n3906\n7315\n1221\n8536\n9757\n8293\n8050\n6343\n4393\n736\n5129\n5865\n994\n6859\n7853\n4712\n2565\n7277\n9842\n7119\n6961\n4080\n1041\n5121\n6162\n1283\n7445\n8728\n6173\n4901\n1074\n5975\n7049\n3024\n73\n3097\n3170\n6267\n9437\n5704\n5141\n845\n5986\n6831\n2817\n9648\n2465\n2113\n4578\n6691\n1269\n7960\n9229\n7189\n6418\n3607\n25\n3632\n3657\n7289\n946\n8235\n9181\n7416\n6597\n4013\n610\n4623\n5233\n9856\n5089\n4945\n34\n4979\n5013\n9992\n5005\n4997\n2\n4999\n5001\n0\n5001\n5001\n2\n5003\n5005\n8\n5013\n5021\n34\n5055\n5089\n144\n5233\n5377\n610\n5987\n6597\n2584\n9181\n1765\n946\n2711\n3657\n6368\n25\n6393\n6418\n2811\n9229\n2040\n1269\n3309\n4578\n7887\n2465\n352\n2817\n3169\n5986\n9155\n5141\n4296\n9437\n3733\n3170\n6903\n73\n6976\n7049\n4025\n1074\n5099\n6173\n1272\n7445\n8717\n6162\n4879\n1041\n5920\n6961\n2881\n9842\n2723\n2565\n5288\n7853\n3141\n994\n4135\n5129\n9264\n4393\n3657\n8050\n1707\n9757\n1464\n1221\n2685\n3906\n6591\n497\n7088\n7585\n4673\n2258\n6931\n9189\n6120\n5309\n1429\n6738\n8167\n4905\n3072\n7977\n1049\n9026\n75\n9101\n9176\n8277\n7453\n5730\n3183\n8913\n2096\n1009\n3105\n4114\n7219\n1333\n8552\n9885\n8437\n8322\n6759\n5081\n1840\n6921\n8761\n5682\n4443\n125\n4568\n4693\n9261\n3954\n3215\n7169\n384\n7553\n7937\n5490\n3427\n8917\n2344\n1261\n3605\n4866\n8471\n3337\n1808\n5145\n6953\n2098\n9051\n1149\n200\n1349\n1549\n2898\n4447\n7345\n1792\n9137\n929\n66\n995\n1061\n2056\n3117\n5173\n8290\n3463\n1753\n5216\n6969\n2185\n9154\n1339\n493\n1832\n2325\n4157\n6482\n639\n7121\n7760\n4881\n2641\n7522\n163\n7685\n7848\n5533\n3381\n8914\n2295\n1209\n3504\n4713\n8217\n2930\n1147\n4077\n5224\n9301\n4525\n3826\n8351\n2177\n528\n2705\n3233\n5938\n9171\n5109\n4280\n9389\n3669\n3058\n6727\n9785\n6512\n6297\n2809\n9106\n1915\n1021\n2936\n3957\n6893\n850\n7743\n8593\n6336\n4929\n1265\n6194\n7459\n3653\n1112\n4765\n5877\n642\n6519\n7161\n3680\n841\n4521\n5362\n9883\n5245\n5128\n373\n5501\n5874\n1375\n7249\n8624\n5873\n4497\n370\n4867\n5237\n104\n5341\n5445\n786\n6231\n7017\n3248\n265\n3513\n3778\n7291\n1069\n8360\n9429\n7789\n7218\n5007\n2225\n7232\n9457\n6689\n6146\n2835\n8981\n1816\n797\n2613\n3410\n6023\n9433\n5456\n4889\n345\n5234\n5579\n813\n6392\n7205\n3597\n802\n4399\n5201\n9600\n4801\n4401\n9202\n3603\n2805\n6408\n9213\n5621\n4834\n455\n5289\n5744\n1033\n6777\n7810\n4587\n2397\n6984\n9381\n6365\n5746\n2111\n7857\n9968\n7825\n7793\n5618\n3411\n9029\n2440\n1469\n3909\n5378\n9287\n4665\n3952\n8617\n2569\n1186\n3755\n4941\n8696\n3637\n2333\n5970\n8303\n4273\n2576\n6849\n9425\n6274\n5699\n1973\n7672\n9645\n7317\n6962\n4279\n1241\n5520\n6761\n2281\n9042\n1323\n365\n1688\n2053\n3741\n5794\n9535\n5329\n4864\n193\n5057\n5250\n307\n5557\n5864\n1421\n7285\n8706\n5991\n4697\n688\n5385\n6073\n1458\n7531\n8989\n6520\n5509\n2029\n7538\n9567\n7105\n6672\n3777\n449\n4226\n4675\n8901\n3576\n2477\n6053\n8530\n4583\n3113\n7696\n809\n8505\n9314\n7819\n7133\n4952\n2085\n7037\n9122\n6159\n5281\n1440\n6721\n8161\n4882\n3043\n7925\n968\n8893\n9861\n8754\n8615\n7369\n5984\n3353\n9337\n2690\n2027\n4717\n6744\n1461\n8205\n9666\n7871\n7537\n5408\n2945\n8353\n1298\n9651\n949\n600\n1549\n2149\n3698\n5847\n9545\n5392\n4937\n329\n5266\n5595\n861\n6456\n7317\n3773\n1090\n4863\n5953\n816\n6769\n7585\n4354\n1939\n6293\n8232\n4525\n2757\n7282\n39\n7321\n7360\n4681\n2041\n6722\n8763\n5485\n4248\n9733\n3981\n3714\n7695\n1409\n9104\n513\n9617\n130\n9747\n9877\n9624\n9501\n9125\n8626\n7751\n6377\n4128\n505\n4633\n5138\n9771\n4909\n4680\n9589\n4269\n3858\n8127\n1985\n112\n2097\n2209\n4306\n6515\n821\n7336\n8157\n5493\n3650\n9143\n2793\n1936\n4729\n6665\n1394\n8059\n9453\n7512\n6965\n4477\n1442\n5919\n7361\n3280\n641\n3921\n4562\n8483\n3045\n1528\n4573\n6101\n674\n6775\n7449\n4224\n1673\n5897\n7570\n3467\n1037\n4504\n5541\n45\n5586\n5631\n1217\n6848\n8065\n4913\n2978\n7891\n869\n8760\n9629\n8389\n8018\n6407\n4425\n832\n5257\n6089\n1346\n7435\n8781\n6216\n4997\n1213\n6210\n7423\n3633\n1056\n4689\n5745\n434\n6179\n6613\n2792\n9405\n2197\n1602\n3799\n5401\n9200\n4601\n3801\n8402\n2203\n605\n2808\n3413\n6221\n9634\n5855\n5489\n1344\n6833\n8177\n5010\n3187\n8197\n1384\n9581\n965\n546\n1511\n2057\n3568\n5625\n9193\n4818\n4011\n8829\n2840\n1669\n4509\n6178\n687\n6865\n7552\n4417\n1969\n6386\n8355\n4741\n3096\n7837\n933\n8770\n9703\n8473\n8176\n6649\n4825\n1474\n6299\n7773\n4072\n1845\n5917\n7762\n3679\n1441\n5120\n6561\n1681\n8242\n9923\n8165\n8088\n6253\n4341\n594\n4935\n5529\n464\n5993\n6457\n2450\n8907\n1357\n264\n1621\n1885\n3506\n5391\n8897\n4288\n3185\n7473\n658\n8131\n8789\n6920\n5709\n2629\n8338\n967\n9305\n272\n9577\n9849\n9426\n9275\n8701\n7976\n6677\n4653\n1330\n5983\n7313\n3296\n609\n3905\n4514\n8419\n2933\n1352\n4285\n5637\n9922\n5559\n5481\n1040\n6521\n7561\n4082\n1643\n5725\n7368\n3093\n461\n3554\n4015\n7569\n1584\n9153\n737\n9890\n627\n517\n1144\n1661\n2805\n4466\n7271\n1737\n9008\n745\n9753\n498\n251\n749\n1000\n1749\n2749\n4498\n7247\n1745\n8992\n737\n9729\n466\n195\n661\n856\n1517\n2373\n3890\n6263\n153\n6416\n6569\n2985\n9554\n2539\n2093\n4632\n6725\n1357\n8082\n9439\n7521\n6960\n4481\n1441\n5922\n7363\n3285\n648\n3933\n4581\n8514\n3095\n1609\n4704\n6313\n1017\n7330\n8347\n5677\n4024\n9701\n3725\n3426\n7151\n577\n7728\n8305\n6033\n4338\n371\n4709\n5080\n9789\n4869\n4658\n9527\n4185\n3712\n7897\n1609\n9506\n1115\n621\n1736\n2357\n4093\n6450\n543\n6993\n7536\n4529\n2065\n6594\n8659\n5253\n3912\n9165\n3077\n2242\n5319\n7561\n2880\n441\n3321\n3762\n7083\n845\n7928\n8773\n6701\n5474\n2175\n7649\n9824\n7473\n7297\n4770\n2067\n6837\n8904\n5741\n4645\n386\n5031\n5417\n448\n5865\n6313\n2178\n8491\n669\n9160\n9829\n8989\n8818\n7807\n6625\n4432\n1057\n5489\n6546\n2035\n8581\n616\n9197\n9813\n9010\n8823\n7833\n6656\n4489\n1145\n5634\n6779\n2413\n9192\n1605\n797\n2402\n3199\n5601\n8800\n4401\n3201\n7602\n803\n8405\n9208\n7613\n6821\n4434\n1255\n5689\n6944\n2633\n9577\n2210\n1787\n3997\n5784\n9781\n5565\n5346\n911\n6257\n7168\n3425\n593\n4018\n4611\n8629\n3240\n1869\n5109\n6978\n2087\n9065\n1152\n217\n1369\n1586\n2955\n4541\n7496\n2037\n9533\n1570\n1103\n2673\n3776\n6449\n225\n6674\n6899\n3573\n472\n4045\n4517\n8562\n3079\n1641\n4720\n6361\n1081\n7442\n8523\n5965\n4488\n453\n4941\n5394\n335\n5729\n6064\n1793\n7857\n9650\n7507\n7157\n4664\n1821\n6485\n8306\n4791\n3097\n7888\n985\n8873\n9858\n8731\n8589\n7320\n5909\n3229\n9138\n2367\n1505\n3872\n5377\n9249\n4626\n3875\n8501\n2376\n877\n3253\n4130\n7383\n1513\n8896\n409\n9305\n9714\n9019\n8733\n7752\n6485\n4237\n722\n4959\n5681\n640\n6321\n6961\n3282\n243\n3525\n3768\n7293\n1061\n8354\n9415\n7769\n7184\n4953\n2137\n7090\n9227\n6317\n5544\n1861\n7405\n9266\n6671\n5937\n2608\n8545\n1153\n9698\n851\n549\n1400\n1949\n3349\n5298\n8647\n3945\n2592\n6537\n9129\n5666\n4795\n461\n5256\n5717\n973\n6690\n7663\n4353\n2016\n6369\n8385\n4754\n3139\n7893\n1032\n8925\n9957\n8882\n8839\n7721\n6560\n4281\n841\n5122\n5963\n1085\n7048\n8133\n5181\n3314\n8495\n1809\n304\n2113\n2417\n4530\n6947\n1477\n8424\n9901\n8325\n8226\n6551\n4777\n1328\n6105\n7433\n3538\n971\n4509\n5480\n9989\n5469\n5458\n927\n6385\n7312\n3697\n1009\n4706\n5715\n421\n6136\n6557\n2693\n9250\n1943\n1193\n3136\n4329\n7465\n1794\n9259\n1053\n312\n1365\n1677\n3042\n4719\n7761\n2480\n241\n2721\n2962\n5683\n8645\n4328\n2973\n7301\n274\n7575\n7849\n5424\n3273\n8697\n1970\n667\n2637\n3304\n5941\n9245\n5186\n4431\n9617\n4048\n3665\n7713\n1378\n9091\n469\n9560\n29\n9589\n9618\n9207\n8825\n8032\n6857\n4889\n1746\n6635\n8381\n5016\n3397\n8413\n1810\n223\n2033\n2256\n4289\n6545\n834\n7379\n8213\n5592\n3805\n9397\n3202\n2599\n5801\n8400\n4201\n2601\n6802\n9403\n6205\n5608\n1813\n7421\n9234\n6655\n5889\n2544\n8433\n977\n9410\n387\n9797\n184\n9981\n165\n146\n311\n457\n768\n1225\n1993\n3218\n5211\n8429\n3640\n2069\n5709\n7778\n3487\n1265\n4752\n6017\n769\n6786\n7555\n4341\n1896\n6237\n8133\n4370\n2503\n6873\n9376\n6249\n5625\n1874\n7499\n9373\n6872\n6245\n3117\n9362\n2479\n1841\n4320\n6161\n481\n6642\n7123\n3765\n888\n4653\n5541\n194\n5735\n5929\n1664\n7593\n9257\n6850\n6107\n2957\n9064\n2021\n1085\n3106\n4191\n7297\n1488\n8785\n273\n9058\n9331\n8389\n7720\n6109\n3829\n9938\n3767\n3705\n7472\n1177\n8649\n9826\n8475\n8301\n6776\n5077\n1853\n6930\n8783\n5713\n4496\n209\n4705\n4914\n9619\n4533\n4152\n8685\n2837\n1522\n4359\n5881\n240\n6121\n6361\n2482\n8843\n1325\n168\n1493\n1661\n3154\n4815\n7969\n2784\n753\n3537\n4290\n7827\n2117\n9944\n2061\n2005\n4066\n6071\n137\n6208\n6345\n2553\n8898\n1451\n349\n1800\n2149\n3949\n6098\n47\n6145\n6192\n2337\n8529\n866\n9395\n261\n9656\n9917\n9573\n9490\n9063\n8553\n7616\n6169\n3785\n9954\n3739\n3693\n7432\n1125\n8557\n9682\n8239\n7921\n6160\n4081\n241\n4322\n4563\n8885\n3448\n2333\n5781\n8114\n3895\n2009\n5904\n7913\n3817\n1730\n5547\n7277\n2824\n101\n2925\n3026\n5951\n8977\n4928\n3905\n8833\n2738\n1571\n4309\n5880\n189\n6069\n6258\n2327\n8585\n912\n9497\n409\n9906\n315\n221\n536\n757\n1293\n2050\n3343\n5393\n8736\n4129\n2865\n6994\n9859\n6853\n6712\n3565\n277\n3842\n4119\n7961\n2080\n41\n2121\n2162\n4283\n6445\n728\n7173\n7901\n5074\n2975\n8049\n1024\n9073\n97\n9170\n9267\n8437\n7704\n6141\n3845\n9986\n3831\n3817\n7648\n1465\n9113\n578\n9691\n269\n9960\n229\n189\n418\n607\n1025\n1632\n2657\n4289\n6946\n1235\n8181\n9416\n7597\n7013\n4610\n1623\n6233\n7856\n4089\n1945\n6034\n7979\n4013\n1992\n6005\n7997\n4002\n1999\n6001\n8000\n4001\n2001\n6002\n8003\n4005\n2008\n6013\n8021\n4034\n2055\n6089\n8144\n4233\n2377\n6610\n8987\n5597\n4584\n181\n4765\n4946\n9711\n4657\n4368\n9025\n3393\n2418\n5811\n8229\n4040\n2269\n6309\n8578\n4887\n3465\n8352\n1817\n169\n1986\n2155\n4141\n6296\n437\n6733\n7170\n3903\n1073\n4976\n6049\n1025\n7074\n8099\n5173\n3272\n8445\n1717\n162\n1879\n2041\n3920\n5961\n9881\n5842\n5723\n1565\n7288\n8853\n6141\n4994\n1135\n6129\n7264\n3393\n657\n4050\n4707\n8757\n3464\n2221\n5685\n7906\n3591\n1497\n5088\n6585\n1673\n8258\n9931\n8189\n8120\n6309\n4429\n738\n5167\n5905\n1072\n6977\n8049\n5026\n3075\n8101\n1176\n9277\n453\n9730\n183\n9913\n96\n9\n105\n114\n219\n333\n552\n885\n1437\n2322\n3759\n6081\n9840\n5921\n5761\n1682\n7443\n9125\n6568\n5693\n2261\n7954\n215\n8169\n8384\n6553\n4937\n1490\n6427\n7917\n4344\n2261\n6605\n8866\n5471\n4337\n9808\n4145\n3953\n8098\n2051\n149\n2200\n2349\n4549\n6898\n1447\n8345\n9792\n8137\n7929\n6066\n3995\n61\n4056\n4117\n8173\n2290\n463\n2753\n3216\n5969\n9185\n5154\n4339\n9493\n3832\n3325\n7157\n482\n7639\n8121\n5760\n3881\n9641\n3522\n3163\n6685\n9848\n6533\n6381\n2914\n9295\n2209\n1504\n3713\n5217\n8930\n4147\n3077\n7224\n301\n7525\n7826\n5351\n3177\n8528\n1705\n233\n1938\n2171\n4109\n6280\n389\n6669\n7058\n3727\n785\n4512\n5297\n9809\n5106\n4915\n21\n4936\n4957\n9893\n4850\n4743\n9593\n4336\n3929\n8265\n2194\n459\n2653\n3112\n5765\n8877\n4642\n3519\n8161\n1680\n9841\n1521\n1362\n2883\n4245\n7128\n1373\n8501\n9874\n8375\n8249\n6624\n4873\n1497\n6370\n7867\n4237\n2104\n6341\n8445\n4786\n3231\n8017\n1248\n9265\n513\n9778\n291\n69\n360\n429\n789\n1218\n2007\n3225\n5232\n8457\n3689\n2146\n5835\n7981\n3816\n1797\n5613\n7410\n3023\n433\n3456\n3889\n7345\n1234\n8579\n9813\n8392\n8205\n6597\n4802\n1399\n6201\n7600\n3801\n1401\n5202\n6603\n1805\n8408\n213\n8621\n8834\n7455\n6289\n3744\n33\n3777\n3810\n7587\n1397\n8984\n381\n9365\n9746\n9111\n8857\n7968\n6825\n4793\n1618\n6411\n8029\n4440\n2469\n6909\n9378\n6287\n5665\n1952\n7617\n9569\n7186\n6755\n3941\n696\n4637\n5333\n9970\n5303\n5273\n576\n5849\n6425\n2274\n8699\n973\n9672\n645\n317\n962\n1279\n2241\n3520\n5761\n9281\n5042\n4323\n9365\n3688\n3053\n6741\n9794\n6535\n6329\n2864\n9193\n2057\n1250\n3307\n4557\n7864\n2421\n285\n2706\n2991\n5697\n8688\n4385\n3073\n7458\n531\n7989\n8520\n6509\n5029\n1538\n6567\n8105\n4672\n2777\n7449\n226\n7675\n7901\n5576\n3477\n9053\n2530\n1583\n4113\n5696\n9809\n5505\n5314\n819\n6133\n6952\n3085\n37\n3122\n3159\n6281\n9440\n5721\n5161\n882\n6043\n6925\n2968\n9893\n2861\n2754\n5615\n8369\n3984\n2353\n6337\n8690\n5027\n3717\n8744\n2461\n1205\n3666\n4871\n8537\n3408\n1945\n5353\n7298\n2651\n9949\n2600\n2549\n5149\n7698\n2847\n545\n3392\n3937\n7329\n1266\n8595\n9861\n8456\n8317\n6773\n5090\n1863\n6953\n8816\n5769\n4585\n354\n4939\n5293\n232\n5525\n5757\n1282\n7039\n8321\n5360\n3681\n9041\n2722\n1763\n4485\n6248\n733\n6981\n7714\n4695\n2409\n7104\n9513\n6617\n6130\n2747\n8877\n1624\n501\n2125\n2626\n4751\n7377\n2128\n9505\n1633\n1138\n2771\n3909\n6680\n589\n7269\n7858\n5127\n2985\n8112\n1097\n9209\n306\n9515\n9821\n9336\n9157\n8493\n7650\n6143\n3793\n9936\n3729\n3665\n7394\n1059\n8453\n9512\n7965\n7477\n5442\n2919\n8361\n1280\n9641\n921\n562\n1483\n2045\n3528\n5573\n9101\n4674\n3775\n8449\n2224\n673\n2897\n3570\n6467\n37\n6504\n6541\n3045\n9586\n2631\n2217\n4848\n7065\n1913\n8978\n891\n9869\n760\n629\n1389\n2018\n3407\n5425\n8832\n4257\n3089\n7346\n435\n7781\n8216\n5997\n4213\n210\n4423\n4633\n9056\n3689\n2745\n6434\n9179\n5613\n4792\n405\n5197\n5602\n799\n6401\n7200\n3601\n801\n4402\n5203\n9605\n4808\n4413\n9221\n3634\n2855\n6489\n9344\n5833\n5177\n1010\n6187\n7197\n3384\n581\n3965\n4546\n8511\n3057\n1568\n4625\n6193\n818\n7011\n7829\n4840\n2669\n7509\n178\n7687\n7865\n5552\n3417\n8969\n2386\n1355\n3741\n5096\n8837\n3933\n2770\n6703\n9473\n6176\n5649\n1825\n7474\n9299\n6773\n6072\n2845\n8917\n1762\n679\n2441\n3120\n5561\n8681\n4242\n2923\n7165\n88\n7253\n7341\n4594\n1935\n6529\n8464\n4993\n3457\n8450\n1907\n357\n2264\n2621\n4885\n7506\n2391\n4294959897\n4294962288\n4294964889\n9881\n7474\n4294957355\n4294964829\n4294964888\n2421\n13\n2434\n2447\n4294964881\n4294957328\n4294964913\n4945\n2562\n7507\n69\n4294957576\n4294957645\n7925\n8274\n6199\n4294964473\n4294960672\n4294957849\n1225\n1778\n3003\n4781\n7784\n2565\n4294960349\n4294962914\n4294965967\n1585\n256\n1841\n2097\n4294963938\n4294966035\n2677\n1416\n4294964093\n4294965509\n2306\n519\n2825\n3344\n4294966169\n4294959513\n4294958386\n603\n1693\n2296\n3989\n6285\n274\n4294966559\n4294966833\n4294966096\n4294965633\n4294964433\n2770\n9907\n2677\n4294962584\n4294965261\n4294960549\n4294958514\n1767\n2985\n4752\n7737\n2489\n4294960226\n4294962715\n4294965645\n1064\n9413\n477\n4294959890\n4294960367\n2961\n6032\n8993\n4294965025\n4294964018\n4294961747\n4294958469\n2920\n4093\n7013\n1106\n4294958119\n4294959225\n48\n1977\n2025\n4002\n6027\n29\n4294966056\n4294966085\n4294964845\n3634\n1183\n4294964817\n4294966000\n3521\n2225\n4294965746\n4294957971\n4294966421\n7096\n6221\n3317\n4294959538\n4294962855\n4294965097\n656\n8457\n9113\n4294957570\n4294966683\n4294966957\n4294966344\n4294966005\n4294965053\n4294963762\n1519\n7985\n9504\n4294957489\n4294966993\n4294967186\n4294966883\n4294966773\n4294966360\n4294965837\n4294964901\n3442\n1047\n4294964489\n4294965536\n2729\n969\n4294963698\n4294964667\n1069\n8440\n9509\n4294957949\n4294957458\n4294958111\n8273\n9088\n7361\n4294966449\n4294963810\n4294962963\n4294959477\n4294965144\n7325\n5173\n2498\n4294957671\n4294960169\n544\n3417\n3961\n7378\n1339\n4294958717\n4294960056\n1477\n4237\n5714\n9951\n4294965665\n4294965616\n4294963985\n4294962305\n4294958994\n4294964003\n5701\n2408\n8109\n517\n4294958626\n4294959143\n473\n2320\n2793\n5113\n7906\n3019\n4294960925\n4294963944\n4294957573\n4294964221\n4498\n1423\n5921\n7344\n3265\n4294960609\n4294963874\n4294967187\n4294963765\n4294963656\n125\n6485\n6610\n3095\n4294959705\n4294962800\n4294965209\n713\n8626\n9339\n4294957965\n4294957304\n4294957973\n7981\n8658\n6639\n4294965297\n4294961936\n4294959937\n4294964577\n7218\n4499\n1717\n4294966216\n4294957933\n4294966853\n7490\n7047\n4294964537\n4294961584\n4294958825\n3113\n4642\n7755\n2397\n4294960152\n4294962549\n4294965405\n658\n8767\n9425\n4294958192\n4294957617\n4294958513\n8834\n51\n8885\n8936\n4294957821\n4294966757\n4294967282\n4294966743\n4294966729\n4294966176\n4294965609\n4294964489\n2802\n9995\n2797\n4294962792\n4294965589\n4294961085\n4294959378\n3167\n5249\n8416\n4294963665\n4294962081\n4294958450\n3235\n4389\n7624\n2013\n4294959637\n4294961650\n4294963991\n8345\n5040\n3385\n4294958425\n4294961810\n2939\n7453\n392\n4294957845\n4294958237\n8786\n9727\n8513\n4294958240\n4294966753\n4294957697\n4294967154\n7555\n7413\n4294964968\n4294962381\n4294960053\n4294965138\n7895\n5737\n3632\n4294959369\n4294963001\n4294965074\n779\n8557\n9336\n4294957893\n4294967229\n4294957826\n4294957759\n8289\n8752\n7041\n4294965793\n4294962834\n4294961331\n4294966869\n904\n477\n1381\n1858\n3239\n4294965097\n4294958336\n4294966137\n7177\n6018\n3195\n4294959213\n4294962408\n4294964325\n9437\n6466\n4294965903\n4294962369\n4294960976\n4294966049\n9729\n8482\n4294958211\n4294966693\n4294957608\n4294967005\n7317\n7026\n4294964343\n4294961369\n4294958416\n2489\n3609\n6098\n9707\n4294965805\n4294965512\n4294964021\n4294962237\n4294958962\n4294963903\n5569\n2176\n7745\n9921\n4294957666\n4294957587\n4294957957\n8248\n8909\n7157\n4294966066\n4294963223\n4294961993\n4294957920\n2617\n3241\n5858\n9099\n4294964957\n4294964056\n4294961717\n4294958477\n2898\n4079\n6977\n1056\n4294958033\n4294959089\n9826\n1619\n1445\n3064\n4294964509\n4294957573\n4294964786\n5063\n2553\n7616\n169\n4294957785\n4294957954\n8443\n9101\n7544\n4294966645\n4294964189\n4294963538\n4294960431\n4294966673\n9808\n9185\n4294958993\n4294958178\n4294959875\n757\n3336\n4093\n7429\n1522\n4294958951\n4294960473\n2128\n5305\n7433\n2738\n4294960171\n4294962909\n4294965784\n1397\n9885\n1282\n4294961167\n4294962449\n4294966320\n1473\n497\n1970\n2467\n4294964437\n4294966904\n4294964045\n4294963653\n402\n6759\n7161\n4294963920\n4294961081\n4294957705\n1490\n1899\n3389\n5288\n8677\n4294963965\n4294962642\n4294959311\n4294964657\n6672\n4033\n705\n4294964738\n4294965443\n2885\n1032\n4294963917\n4294964949\n1570\n9223\n793\n4294960016\n4294960809\n3529\n7042\n571\n4294957613\n4294958184\n8501\n9389\n7890\n4294967279\n4294965169\n4294965152\n4294963025\n4294960881\n4294966610\n195\n9509\n9704\n4294959213\n4294958917\n4294960834\n2455\n5993\n8448\n4294964441\n4294962889\n4294960034\n4294965627\n8365\n6696\n4294965061\n4294961757\n4294959522\n4294963983\n6209\n2896\n9105\n2001\n4294961106\n4294963107\n4294966917\n2728\n2349\n4294965077\n4294957426\n4294965207\n5337\n3248\n8585\n1833\n4294960418\n4294962251\n4294965373\n328\n8405\n8733\n4294967138\n4294965871\n4294965713\n4294964288\n4294962705\n4294959697\n4294965106\n7507\n5317\n2824\n4294958141\n4294960965\n1810\n5479\n7289\n2768\n4294960057\n4294962825\n4294965586\n1115\n9405\n520\n4294959925\n4294960445\n3074\n6223\n9297\n4294965520\n4294964817\n4294963041\n4294960562\n4294966307\n9573\n8584\n4294958157\n4294966741\n4294957602\n4294967047\n7353\n7104\n4294964457\n4294961561\n4294958722\n2987\n4413\n7400\n1813\n4294959213\n4294961026\n2943\n6673\n9616\n4294966289\n4294965905\n4294964898\n4294963507\n4294961109\n4294957320\n1133\n1157\n2290\n3447\n5737\n9184\n4294964921\n4294964105\n4294961730\n4294958539\n2973\n4216\n7189\n1405\n4294958594\n4294959999\n1297\n4000\n5297\n9297\n4294964594\n4294963891\n4294961189\n4294957784\n1677\n2165\n3842\n6007\n9849\n4294965856\n4294965705\n4294964265\n4294962674\n4294959643\n4294965021\n7368\n5093\n2461\n4294957554\n4294960015\n273\n2992\n3265\n6257\n9522\n4294965779\n4294965301\n4294963784\n4294961789\n4294958277\n2770\n3751\n6521\n272\n4294966793\n4294967065\n4294966562\n4294966331\n4294965597\n4294964632\n2933\n269\n3202\n3471\n4294966673\n4294960144\n4294959521\n2369\n4594\n6963\n1557\n4294958520\n4294960077\n1301\n4082\n5383\n9465\n4294964848\n4294964313\n4294961865\n4294958882\n3451\n5037\n8488\n3525\n4294962013\n4294965538\n4294960255\n4294958497\n1456\n2657\n4113\n6770\n883\n4294957653\n4294958536\n8893\n133\n9026\n9159\n4294958185\n4294957344\n4294958233\n8281\n9218\n7499\n4294966717\n4294964216\n4294963637\n4294960557\n4294966898\n159\n9761\n9920\n4294959681\n4294959601\n4294961986\n4294964291\n8981\n5976\n4294964957\n4294960933\n4294958594\n2231\n3529\n5760\n9289\n4294965049\n4294964338\n4294962091\n4294959133\n4294963928\n5765\n2397\n8162\n559\n4294958721\n4294959280\n705\n2689\n3394\n6083\n9477\n4294965560\n4294965037\n4294963301\n4294961042\n4294967047\n793\n544\n1337\n1881\n3218\n4294965099\n4294958317\n4294966120\n7141\n5965\n3106\n4294959071\n4294962177\n4294963952\n8833\n5489\n4294964322\n4294959811\n4294966837\n9352\n8893\n4294958245\n4294967138\n4294958087\n4294957929\n8720\n9353\n8073\n4294957426\n4294965499\n4294965629\n4294963832\n2165\n8701\n866\n4294959567\n4294960433\n2704\n5841\n8545\n4294964386\n4294962931\n4294960021\n4294965656\n8381\n6741\n4294965122\n4294961863\n4294959689\n4294964256\n6649\n3609\n258\n4294963867\n4294964125\n696\n7525\n8221\n4294965746\n4294963967\n4294962417\n4294959088\n4294964209\n6001\n2914\n8915\n1829\n4294960744\n4294962573\n4294966021\n1298\n23\n1321\n1344\n2665\n4294964009\n4294966674\n3387\n2765\n4294966152\n4294958917\n4294957773\n9394\n9871\n9265\n4294959136\n4294958401\n4294960241\n1346\n4291\n5637\n9928\n4294965565\n4294965493\n4294963762\n4294961959\n4294958425\n3088\n4217\n7305\n1522\n4294958827\n4294960349\n1880\n4933\n6813\n1746\n4294958559\n4294960305\n1568\n4577\n6145\n722\n4294966867\n4294957589\n4294967160\n7453\n7317\n4294964770\n4294962087\n4294959561\n4294964352\n6617\n3673\n290\n4294963963\n4294964253\n920\n7877\n8797\n4294966674\n4294965471\n4294964849\n4294963024\n4294960577\n4294966305\n9586\n8595\n4294958181\n4294966776\n4294957661\n4294967141\n7506\n7351\n4294964857\n4294962208\n4294959769\n4294964681\n7154\n4539\n1693\n4294966232\n4294957925\n4294966861\n7490\n7055\n4294964545\n4294961600\n4294958849\n3153\n4706\n7859\n2565\n4294960424\n4294962989\n4294966117\n1810\n631\n2441\n3072\n4294965513\n4294958585\n4294966802\n8091\n7597\n4294965688\n4294963285\n4294961677\n4294957666\n2047\n2417\n4464\n6881\n1345\n4294958226\n4294959571\n501\n2776\n3277\n6053\n9330\n4294965383\n4294964713\n4294962800\n4294960217\n4294965721\n8642\n7067\n4294965709\n4294962776\n4294961189\n4294966669\n562\n9935\n497\n4294960432\n4294960929\n4294964065\n7698\n4467\n2165\n4294966632\n4294958797\n4294958133\n9634\n471\n105\n576\n681\n1257\n1938\n3195\n4294965133\n4294958328\n4294966165\n7197\n6066\n3263\n4294959329\n4294962592\n4294964625\n9921\n7250\n4294967171\n4294964421\n4294964296\n4294961421\n4294958421\n2546\n3671\n6217\n9888\n4294966105\n4294965993\n4294964802\n4294963499\n4294961005\n4294967208\n917\n829\n1746\n2575\n4294964321\n4294966896\n4294963921\n3521\n146\n4294963667\n4294963813\n184\n6701\n6885\n3586\n4294960471\n4294964057\n4294967232\n4294963993\n4294963929\n626\n7259\n7885\n4294965144\n4294963029\n4294960877\n4294966610\n191\n9505\n9696\n4294959201\n4294958897\n4294960802\n2403\n5909\n8312\n4294964221\n4294962533\n4294959458\n4294964695\n6857\n4256\n1113\n4294965369\n4294966482\n4294964555\n4294963741\n1000\n7445\n8445\n4294965890\n4294964335\n4294962929\n4294959968\n4294965601\n8273\n6578\n4294964851\n4294961429\n4294958984\n3117\n4805\n7922\n2727\n4294960649\n4294963376\n4294966729\n2809\n2242\n4294965051\n4294967293\n4294965048\n4294965045\n2797\n546\n3343\n4294963889\n4294967232\n4294963825\n4294963761\n290\n6755\n7045\n4294963800\n4294960845\n4294957349\n898\n951\n1849\n2800\n4649\n7449\n2098\n4294959547\n4294961645\n4294963896\n8245\n4845\n3090\n4294957935\n4294961025\n1664\n5393\n7057\n2450\n4294959507\n4294961957\n4294964168\n8829\n5701\n4294964530\n4294960231\n4294957465\n400\n569\n969\n1538\n2507\n4045\n6552\n597\n4294967149\n4294957746\n4294957599\n8049\n8352\n6401\n4294964753\n4294961154\n4294958611\n2469\n3784\n6253\n37\n4294966290\n4294966327\n4294965321\n4294964352\n2377\n9433\n1810\n4294961243\n4294963053\n4294967000\n2757\n2461\n4294965218\n4294957679\n4294965601\n5984\n4289\n273\n4294964562\n4294964835\n2101\n9640\n1741\n4294961381\n4294963122\n4294967207\n3033\n2944\n4294965977\n4294958921\n4294957602\n9227\n9533\n8760\n4294958293\n4294967053\n4294958050\n4294957807\n8561\n9072\n7633\n4294966705\n4294964338\n4294963747\n4294960789\n4294967240\n733\n677\n1410\n2087\n3497\n4294965584\n4294959081\n4294957369\n9154\n9227\n8381\n4294957608\n4294965989\n4294966301\n4294964994\n4294963999\n1697\n8400\n97\n4294958497\n4294958594\n9795\n1093\n888\n1981\n2869\n4294964850\n4294957719\n4294965273\n5696\n3673\n9369\n3042\n4294962411\n4294965453\n4294960568\n4294958725\n1997\n3426\n5423\n8849\n4294964272\n4294963121\n4294960097\n4294965922\n8723\n7349\n4294966072\n4294963421\n4294962197\n4294958322\n3223\n4249\n7472\n1721\n4294959193\n4294960914\n2811\n6429\n9240\n4294965669\n4294964909\n4294963282\n4294960895\n4294966881\n480\n65\n545\n610\n1155\n1765\n2920\n4294964685\n4294957605\n4294964994\n5303\n3001\n8304\n1305\n4294959609\n4294960914\n3227\n6845\n72\n4294966917\n4294966989\n4294966610\n4294966303\n4294965617\n4294964624\n2945\n273\n3218\n3491\n4294966709\n4294960200\n4294959613\n2517\n4834\n7351\n2185\n4294959536\n4294961721\n4294963961\n8386\n5051\n3437\n4294958488\n4294961925\n3117\n7746\n863\n4294958609\n4294959472\n785\n2961\n3746\n6707\n453\n4294967160\n4294957613\n4294957477\n7794\n7975\n5769\n4294963744\n4294959513\n4294965961\n8178\n6843\n4294965021\n4294961864\n4294959589\n4294964157\n6450\n3311\n9761\n3072\n4294962833\n4294965905\n4294961442\n4294960051\n4294964197\n6952\n3853\n805\n4294964658\n4294965463\n2825\n992\n4294963817\n4294964809\n1330\n8843\n173\n4294959016\n4294959189\n909\n2802\n3711\n6513\n224\n4294966737\n4294966961\n4294966402\n4294966067\n4294965173\n4294963944\n1821\n8469\n290\n4294958759\n4294959049\n512\n2265\n2777\n5042\n7819\n2861\n4294960680\n4294963541\n4294966925\n3170\n2799\n4294965969\n4294958768\n4294957441\n8913\n9058\n7971\n4294967029\n4294965000\n4294964733\n4294962437\n4294959874\n4294965015\n7593\n5312\n2905\n4294958217\n4294961122\n2043\n5869\n7912\n4294963781\n4294961693\n4294958178\n2575\n3457\n6032\n9489\n4294965521\n4294965010\n4294963235\n4294960949\n4294966888\n541\n133\n674\n807\n1481\n2288\n4294963769\n4294966057\n2530\n1291\n4294963821\n4294965112\n1637\n9453\n1090\n4294960543\n4294961633\n4294964880\n9217\n6801\n4294966018\n4294962819\n4294961541\n4294967064\n1309\n1077\n2386\n3463\n4294965849\n4294959312\n4294957865\n9881\n450\n331\n781\n1112\n1893\n3005\n4294964898\n4294957903\n4294965505\n6112\n4321\n433\n4294964754\n4294965187\n2645\n536\n3181\n4294963717\n4294966898\n3319\n2921\n4294966240\n4294959161\n4294958105\n9970\n779\n749\n1528\n2277\n4294963805\n4294966082\n2591\n1377\n4294963968\n4294965345\n2017\n66\n2083\n2149\n4294964232\n4294966381\n3317\n2402\n4294965719\n4294958121\n4294966544\n7369\n6617\n4294963986\n4294960603\n4294967293\n600\n597\n1197\n1794\n2991\n4294964785\n4294957776\n4294965265\n5745\n3714\n9459\n3173\n4294962632\n4294965805\n4294961141\n4294959650\n3495\n5849\n9344\n4294965193\n4294964537\n4294962434\n4294959675\n4294964813\n7192\n4709\n1901\n4294966610\n4294958511\n4294957825\n9040\n9569\n8609\n4294958178\n4294966787\n4294957669\n4294967160\n7533\n7397\n4294964930\n4294962327\n4294959961\n4294964992\n7657\n5353\n3010\n4294958363\n4294961373\n2440\n6517\n8957\n4294965474\n4294964431\n4294962609\n4294959744\n4294965057\n7505\n5266\n2771\n4294958037\n4294960808\n1549\n5061\n6610\n1671\n4294958281\n4294959952\n937\n3593\n4530\n8123\n2653\n4294960776\n4294963429\n4294966909\n3042\n2655\n4294965697\n4294958352\n4294966753\n7809\n7266\n4294965075\n4294962341\n4294960120\n4294965165\n7989\n5858\n4294963847\n4294959705\n4294966256\n8665\n7625\n4294966290\n4294963915\n4294962909\n4294959528\n4294965141\n7373\n5218\n2591\n4294957809\n4294960400\n913\n4017\n4930\n8947\n4294963877\n4294962824\n4294959405\n4294964933\n7042\n4679\n1721\n4294966400\n4294958121\n4294967225\n8050\n7979\n4294966029\n4294964008\n4294962741\n4294959453\n4294964898\n7055\n4657\n1712\n4294966369\n4294958081\n4294967154\n7939\n7797\n4294965736\n4294963533\n4294961973\n4294958210\n2887\n3801\n6688\n489\n4294967177\n4294957666\n4294957547\n7917\n8168\n6085\n4294964253\n4294960338\n4294967295\n337\n336\n673\n1009\n1682\n2691\n4294964373\n4294967064\n4294964141\n4294963909\n754\n7367\n8121\n4294965488\n4294963609\n4294961801\n4294958114\n2619\n3437\n6056\n9493\n4294965549\n4294965042\n4294963295\n4294961041\n4294967040\n785\n529\n1314\n1843\n3157\n4294965000\n4294958157\n4294965861\n6722\n5287\n2009\n0\n4294959305\n4294959305\n1314\n3323\n4637\n7960\n2597\n4294960557\n4294963154\n4294966415\n2273\n1392\n4294963665\n4294965057\n1426\n9187\n613\n4294959800\n4294960413\n2917\n6034\n8951\n4294964985\n4294963936\n4294961625\n4294958265\n2594\n3563\n6157\n9720\n4294965877\n4294965597\n4294964178\n4294962479\n4294959361\n4294964544\n6609\n3857\n466\n4294964323\n4294964789\n1816\n9309\n1125\n4294960434\n4294961559\n4294964697\n8960\n6361\n4294965321\n4294961682\n4294959707\n4294964093\n6504\n3301\n9805\n3106\n4294962911\n4294966017\n4294961632\n4294960353\n4294964689\n7746\n5139\n2885\n4294958024\n4294960909\n1637\n5250\n6887\n2137\n4294959024\n4294961161\n2889\n6754\n9643\n4294966397\n4294966040\n4294965141\n4294963885\n4294961730\n4294958319\n2753\n3776\n6529\n305\n4294966834\n4294967139\n4294966677\n4294966520\n4294965901\n4294965125\n4294963730\n1559\n7993\n9552\n4294957545\n4294967097\n4294957346\n4294967147\n7197\n7048\n4294964245\n4294961293\n4294958242\n2239\n3185\n5424\n8609\n4294964033\n4294962642\n4294959379\n4294964725\n6808\n4237\n1045\n4294965282\n4294966327\n4294964313\n3344\n361\n4294963705\n4294964066\n475\n7245\n7720\n4294964965\n4294962685\n4294960354\n4294965743\n8801\n7248\n4294966049\n4294963297\n4294962050\n4294958051\n2805\n3560\n6365\n9925\n4294966290\n4294966215\n4294965209\n4294964128\n4294962041\n4294958873\n3618\n5195\n8813\n4294964008\n4294962821\n4294959533\n4294965058\n7295\n5057\n2352\n4294957409\n4294959761\n9874\n2339\n2213\n4294964552\n4294966765\n4294964021\n3490\n215\n4294963705\n4294963920\n329\n6953\n7282\n4294964235\n4294961517\n4294958456\n2677\n3837\n6514\n351\n4294966865\n4294967216\n4294966785\n4294966705\n4294966194\n4294965603\n4294964501\n2808\n13\n2821\n2834\n4294965655\n4294958489\n4294966848\n8041\n7593\n4294965634\n4294963227\n4294961565\n4294957496\n1765\n1965\n3730\n5695\n9425\n4294965120\n4294964545\n4294962369\n4294959618\n4294964691\n7013\n4408\n1421\n4294965829\n4294967250\n4294965783\n4294965737\n4294964224\n2665\n9593\n2258\n4294961851\n4294964109\n4294958664\n4294965477\n6845\n5026\n1871\n4294966897\n4294958768\n4294958369\n9841\n914\n755\n1669\n2424\n4294964093\n4294966517\n3314\n2535\n4294965849\n4294958384\n4294966937\n8025\n7666\n4294965691\n4294963357\n4294961752\n4294957813\n2269\n2786\n5055\n7841\n2896\n4294960737\n4294963633\n4294967074\n3411\n3189\n4294966600\n4294959789\n4294959093\n1586\n3383\n4969\n8352\n3321\n4294961673\n4294964994\n4294959371\n4294967069\n9144\n8917\n4294958061\n4294966978\n4294957743\n4294957425\n7872\n8001\n5873\n4294963874\n4294959747\n4294966325\n8776\n7805\n4294966581\n4294964386\n4294963671\n4294960761\n4294967136\n601\n441\n1042\n1483\n2525\n4294964008\n4294966533\n3245\n2482\n4294965727\n4294958209\n4294966640\n7553\n6897\n4294964450\n4294961347\n4294958501\n2552\n3757\n6309\n66\n4294966375\n4294966441\n4294965520\n4294964665\n2889\n258\n3147\n3405\n4294966552\n4294959957\n4294959213\n1874\n3791\n5665\n9456\n4294965121\n4294964577\n4294962402\n4294959683\n4294964789\n7176\n4669\n1845\n4294966514\n4294958359\n4294957577\n8640\n8921\n7561\n4294966482\n4294964043\n4294963229\n4294959976\n4294965909\n8589\n7202\n4294965791\n4294962993\n4294961488\n4294967185\n1377\n1266\n2643\n4294963909\n4294966552\n3165\n2421\n4294965586\n4294958007\n4294966297\n7008\n6009\n3017\n4294959026\n4294962043\n4294963773\n8520\n4997\n3517\n4294958514\n4294962031\n3249\n7984\n1233\n4294959217\n4294960450\n2371\n5525\n7896\n3421\n4294961317\n4294964738\n4294958759\n4294966201\n7664\n6569\n4294964233\n4294960802\n4294957739\n1245\n1688\n2933\n4621\n7554\n2175\n4294959729\n4294961904\n4294964337\n8945\n5986\n4294964931\n4294960917\n4294958552\n2173\n3429\n5602\n9031\n4294964633\n4294963664\n4294961001\n4294957369\n1074\n1147\n2221\n3368\n5589\n8957\n4294964546\n4294963503\n4294960753\n4294966960\n417\n81\n498\n579\n1077\n1656\n2733\n4294964389\n4294967122\n4294964215\n4294964041\n960\n7705\n8665\n4294966370\n4294965035\n4294964109\n4294961848\n4294958661\n3213\n4578\n7791\n2369\n4294960160\n4294962529\n4294965393\n626\n8723\n9349\n4294958072\n4294957421\n4294958197\n8322\n9223\n7545\n4294966768\n4294964313\n4294963785\n4294960802\n4294967291\n797\n792\n1589\n2381\n4294963970\n4294966351\n3025\n2080\n4294965105\n4294967185\n4294964994\n4294964883\n2581\n168\n2749\n2917\n4294965666\n4294958583\n4294966953\n8240\n7897\n4294966137\n4294964034\n4294962875\n4294959613\n4294965192\n7509\n5405\n2914\n4294958319\n4294961233\n2256\n6193\n8449\n4294964642\n4294963091\n4294960437\n4294966232\n9373\n8309\n4294957682\n4294965991\n4294966377\n4294965072\n4294964153\n1929\n8786\n715\n4294959501\n4294960216\n2421\n5341\n7762\n3103\n4294960865\n4294963968\n4294957537\n4294964209\n4450\n1363\n5813\n7176\n2989\n4294960165\n4294963154\n4294966023\n1881\n608\n2489\n3097\n4294965586\n4294958683\n4294966973\n8360\n8037\n4294966397\n4294964434\n4294963535\n4294960673\n4294966912\n289\n9905\n194\n4294960099\n4294960293\n3096\n6093\n9189\n4294965282\n4294964471\n4294962457\n4294959632\n4294964793\n7129\n4626\n1755\n4294966381\n4294958136\n4294967221\n8061\n7986\n4294966047\n4294964033\n4294962784\n4294959521\n4294965009\n7234\n4947\n2181\n4294967128\n4294959309\n4294959141\n1154\n2999\n4153\n7152\n1305\n4294958457\n4294959762\n923\n3389\n4312\n7701\n2013\n4294959714\n4294961727\n4294964145\n8576\n5425\n4294964001\n4294959426\n4294966131\n8261\n7096\n4294965357\n4294962453\n4294960514\n4294965671\n8889\n7264\n4294966153\n4294963417\n4294962274\n4294958395\n3373\n4472\n7845\n2317\n4294960162\n4294962479\n4294965345\n528\n8577\n9105\n4294957682\n4294966787\n4294967173\n4294966664\n4294966541\n4294965909\n4294965154\n4294963767\n1625\n8096\n9721\n4294957817\n4294957538\n4294958059\n8301\n9064\n7365\n4294966429\n4294963794\n4294962927\n4294959425\n4294965056\n7185\n4945\n2130\n4294967075\n4294959205\n4294958984\n893\n2581\n3474\n6055\n9529\n4294965584\n4294965113\n4294963401\n4294961218\n4294957323\n1245\n1272\n2517\n3789\n6306\n95\n4294966401\n4294966496\n4294965601\n4294964801\n3106\n611\n4294963717\n4294964328\n749\n7781\n8530\n4294966311\n4294964841\n4294963856\n4294961401\n4294957961\n2066\n2731\n4797\n7528\n2325\n4294959853\n4294962178\n4294964735\n9617\n7056\n4294966673\n4294963729\n4294963106\n4294959539\n4294965349\n7592\n5645\n3237\n4294958882\n4294962119\n4294963705\n8528\n4937\n3465\n4294958402\n4294961867\n2973\n7544\n517\n4294958061\n4294958578\n9343\n625\n9968\n593\n4294960561\n4294961154\n4294964419\n8277\n5400\n4294963677\n4294959077\n4294965458\n7239\n5401\n2640\n4294958041\n4294960681\n1426\n4811\n6237\n1048\n4294967285\n4294958333\n4294958322\n9359\n385\n9744\n129\n4294959873\n4294960002\n2579\n5285\n7864\n3149\n4294961013\n4294964162\n4294957879\n4294964745\n5328\n2777\n8105\n882\n4294958987\n4294959869\n1560\n4133\n5693\n9826\n4294965519\n4294965345\n4294963568\n4294961617\n4294957889\n2210\n2803\n5013\n7816\n2829\n4294960645\n4294963474\n4294966823\n3001\n2528\n4294965529\n4294958057\n4294966290\n7051\n6045\n3096\n4294959141\n4294962237\n4294964082\n9023\n5809\n4294964832\n4294960641\n4294958177\n1522\n2403\n3925\n6328\n253\n4294966581\n4294966834\n4294966119\n4294965657\n4294964480\n2841\n25\n2866\n2891\n4294965757\n4294958648\n4294967109\n8461\n8274\n4294966735\n4294965009\n4294964448\n4294962161\n4294959313\n4294964178\n6195\n3077\n9272\n2349\n4294961621\n4294963970\n4294958295\n4294964969\n5968\n3641\n9609\n3250\n4294962859\n4294966109\n4294961672\n4294960485\n4294964861\n8050\n5615\n4294963665\n4294959280\n4294965649\n7633\n5986\n3619\n4294959605\n4294963224\n4294965533\n1461\n9698\n1159\n4294960857\n4294962016\n4294965577\n297\n8578\n8875\n4294957453\n4294966328\n4294966485\n4294965517\n4294964706\n2927\n337\n3264\n3601\n4294966865\n4294960466\n4294960035\n3205\n5944\n9149\n4294965093\n4294964242\n4294962039\n4294958985\n4294963728\n5417\n1849\n7266\n9115\n4294966381\n4294965496\n4294964581\n4294962781\n4294960066\n4294965551\n8321\n6576\n4294964897\n4294961473\n4294959074\n3251\n5029\n8280\n3309\n4294961589\n4294964898\n4294959191\n4294966793\n8688\n8185\n4294966873\n4294965058\n4294964635\n4294962397\n4294959736\n4294964837\n7277\n4818\n2095\n4294966913\n4294959008\n4294958625\n337\n1666\n2003\n3669\n5672\n9341\n4294965013\n4294964354\n4294962071\n4294959129\n4294963904\n5737\n2345\n8082\n427\n4294958509\n4294958936\n149\n1789\n1938\n3727\n5665\n9392\n4294965057\n4294964449\n4294962210\n4294959363\n4294964277\n6344\n3325\n9669\n2994\n4294962663\n4294965657\n4294961024\n4294959385\n3113\n5202\n8315\n3517\n4294961832\n4294965349\n4294959885\n4294957938\n527\n1169\n1696\n2865\n4561\n7426\n1987\n4294959413\n4294961400\n3517\n7621\n1138\n4294958759\n4294959897\n1360\n3961\n5321\n9282\n4294964603\n4294963885\n4294961192\n4294957781\n1677\n2162\n3839\n6001\n9840\n4294965841\n4294965681\n4294964226\n4294962611\n4294959541\n4294964856\n7101\n4661\n1762\n4294966423\n4294958185\n4294957312\n8201\n8217\n6418\n4294964635\n4294961053\n4294958392\n2149\n3245\n5394\n8639\n4294964033\n4294962672\n4294959409\n4294964785\n6898\n4387\n1285\n4294965672\n4294966957\n4294965333\n4294964994\n3031\n729\n4294963760\n4294964489\n953\n8146\n9099\n4294967245\n4294966344\n4294966293\n4294965341\n4294964338\n4294962383\n4294959425\n4294964512\n6641\n3857\n498\n4294964355\n4294964853\n1912\n9469\n1381\n4294960850\n4294962231\n4294965785\n720\n9209\n9929\n4294959138\n4294959067\n4294960909\n2680\n6293\n8973\n4294965266\n4294964239\n4294962209\n4294959152\n4294964065\n5921\n2690\n8611\n1301\n4294959912\n4294961213\n4294963829\n7746\n4279\n2025\n4294966304\n4294958329\n4294957337\n8370\n8411\n6781\n4294965192\n4294961973\n4294959869\n4294964546\n7119\n4369\n1488\n4294965857\n4294957345\n4294965906\n5955\n4565\n520\n4294965085\n4294965605\n3394\n1703\n4294965097\n4294966800\n4294964601\n4294964105\n1410\n8219\n9629\n4294957848\n4294957477\n4294958029\n8210\n8943\n7153\n4294966096\n4294963249\n4294962049\n4294958002\n2755\n3461\n6216\n9677\n4294965893\n4294965570\n4294964167\n4294962441\n4294959312\n4294964457\n6473\n3634\n107\n4294963741\n4294963848\n293\n6845\n7138\n4294963983\n4294961121\n4294957808\n1633\n2145\n3778\n5923\n9701\n4294965624\n4294965325\n4294963653\n4294961682\n4294958039\n2425\n3168\n5593\n8761\n4294964354\n4294963115\n4294960173\n4294965992\n8869\n7565\n4294966434\n4294963999\n4294963137\n4294959840\n4294965681\n8225\n6610\n4294964835\n4294961445\n4294958984\n3133\n4821\n7954\n2775\n4294960729\n4294963504\n4294966937\n3145\n2786\n4294965931\n4294958717\n4294957352\n8773\n8829\n7602\n4294966431\n4294964033\n4294963168\n4294959905\n4294965777\n8386\n6867\n4294965253\n4294962120\n4294960077\n4294964901\n7682\n5287\n2969\n4294958256\n4294961225\n2185\n6114\n8299\n4294964413\n4294962712\n4294959829\n4294965245\n7778\n5727\n3505\n4294959232\n4294962737\n4294964673\n114\n7491\n7605\n4294965096\n4294962701\n4294960501\n4294965906\n9111\n7721\n4294966832\n4294964553\n4294964089\n4294961346\n4294958139\n2189\n3032\n5221\n8253\n3474\n4294961727\n4294965201\n4294959632\n4294957537\n9873\n114\n9987\n101\n4294960088\n4294960189\n2981\n5874\n8855\n4294964729\n4294963584\n4294961017\n4294957305\n1026\n1035\n2061\n3096\n5157\n8253\n3410\n4294961663\n4294965073\n4294959440\n4294967217\n9361\n9282\n4294958643\n4294957925\n4294959272\n9901\n1877\n1778\n4294963655\n4294965433\n1792\n9929\n1721\n4294961650\n4294963371\n4294957725\n4294963800\n4229\n733\n4962\n5695\n657\n4294966352\n4294967009\n4294966065\n4294965778\n4294964547\n3029\n280\n3309\n3589\n4294966898\n4294960487\n4294960089\n3280\n6073\n9353\n4294965426\n4294964779\n4294962909\n4294960392\n4294966005\n9101\n7810\n4294966911\n4294964721\n4294964336\n4294961761\n4294958801\n3266\n4771\n8037\n2808\n4294960845\n4294963653\n4294967202\n3559\n3465\n4294967024\n4294960489\n4294960217\n3410\n6331\n9741\n4294966072\n4294965813\n4294964589\n4294963106\n4294960399\n4294966209\n9312\n8225\n4294957537\n4294965762\n4294966003\n4294964469\n3176\n349\n3525\n4294963874\n4294957399\n4294963977\n4080\n761\n4841\n5602\n443\n4294966045\n4294966488\n4294965237\n4294964429\n2370\n9503\n1873\n4294961376\n4294963249\n4294957329\n3282\n3315\n6597\n9912\n4294966509\n4294966421\n4294965634\n4294964759\n4294963097\n4294960560\n4294966361\n9625\n8690\n4294958315\n4294967005\n4294958024\n4294957733\n8461\n8898\n7359\n4294966257\n4294963616\n4294962577\n4294958897\n4294964178\n5779\n2661\n8440\n1101\n4294959541\n4294960642\n2887\n6233\n9120\n4294965353\n4294964473\n4294962530\n4294959707\n4294964941\n7352\n4997\n2349\n4294957346\n4294959695\n9745\n2144\n1889\n4294964033\n4294965922\n2659\n1285\n4294963944\n4294965229\n1877\n9810\n1687\n4294961497\n4294963184\n4294957385\n3273\n3362\n6635\n9997\n4294966632\n4294966629\n4294965965\n4294965298\n4294963967\n4294961969\n4294958640\n3313\n4657\n7970\n2627\n4294960597\n4294963224\n4294966525\n2453\n1682\n4294964135\n4294965817\n2656\n1177\n4294963833\n4294965010\n1547\n9261\n808\n4294960069\n4294960877\n4294963650\n7231\n3585\n816\n4294964401\n4294965217\n2322\n243\n2565\n2808\n4294965373\n4294958181\n4294966258\n7143\n6105\n3248\n4294959353\n4294962601\n4294964658\n9963\n7325\n4294967288\n4294964613\n4294964605\n4294961922\n4294959231\n4294963857\n5792\n2353\n8145\n498\n4294958643\n4294959141\n488\n2333\n2821\n5154\n7975\n3129\n4294961104\n4294964233\n4294958041\n4294964978\n5723\n3405\n9128\n2533\n4294961661\n4294964194\n4294958559\n4294965457\n6720\n4881\n1601\n4294966482\n4294958083\n4294967269\n8056\n8029\n4294966085\n4294964114\n4294962903\n4294959721\n4294965328\n7753\n5785\n3538\n4294959323\n4294962861\n4294964888\n453\n8045\n8498\n4294966543\n4294965041\n4294964288\n4294962033\n4294959025\n4294963762\n5491\n1957\n7448\n9405\n4294966853\n4294966258\n4294965815\n4294964777\n4294963296\n4294960777\n4294966777\n258\n9739\n9997\n4294959736\n4294959733\n4294962173\n4294964610\n9487\n6801\n4294966288\n4294963089\n4294962081\n4294957874\n2659\n3237\n5896\n9133\n4294965029\n4294964162\n4294961895\n4294958761\n3360\n4825\n8185\n3010\n4294961195\n4294964205\n4294958104\n4294965013\n5821\n3538\n9359\n2897\n4294962256\n4294965153\n4294960113\n4294957970\n787\n1461\n2248\n3709\n5957\n9666\n4294965623\n4294965289\n4294963616\n4294961609\n4294957929\n2242\n2875\n5117\n7992\n3109\n4294961101\n4294964210\n4294958015\n4294964929\n5648\n3281\n8929\n2210\n4294961139\n4294963349\n4294967192\n3245\n3141\n4294966386\n4294959527\n4294958617\n848\n2169\n3017\n5186\n8203\n3389\n4294961592\n4294964981\n4294959277\n4294966962\n8943\n8609\n4294957552\n4294966161\n4294966417\n4294965282\n4294964403\n2389\n9496\n1885\n4294961381\n4294963266\n4294957351\n3321\n3376\n6697\n73\n4294966770\n4294966843\n4294966317\n4294965864\n4294964885\n3453\n1042\n4294964495\n4294965537\n2736\n977\n4294963713\n4294964690\n1107\n8501\n9608\n4294958109\n4294957717\n4294958530\n8951\n185\n9136\n9321\n4294958457\n4294957778\n4294958939\n9421\n1064\n485\n1549\n2034\n3583\n4294965617\n4294959200\n4294957521\n9425\n9650\n9075\n4294958725\n4294957800\n4294959229\n9733\n1666\n1399\n3065\n4294964464\n4294957529\n4294964697\n4930\n2331\n7261\n9592\n4294966853\n4294966445\n4294966002\n4294965151\n4294963857\n4294961712\n4294958273\n2689\n3666\n6355\n21\n4294966376\n4294966397\n4294965477\n4294964578\n2759\n41\n2800\n2841\n4294965641\n4294958482\n4294966827\n8013\n7544\n4294965557\n4294963101\n4294961362\n4294967167\n1233\n1104\n2337\n3441\n4294965778\n4294959219\n4294957701\n9624\n29\n9653\n9682\n4294959335\n4294959017\n4294961056\n2777\n6537\n9314\n4294965851\n4294965165\n4294963720\n4294961589\n4294958013\n2306\n3023\n5329\n8352\n4294963681\n4294962033\n4294958418\n3155\n4277\n7432\n1709\n4294959141\n4294960850\n2695\n6249\n8944\n4294965193\n4294964137\n4294962034\n4294958875\n3613\n5192\n8805\n4294963997\n4294962802\n4294959503\n4294965009\n7216\n4929\n2145\n4294967074\n4294959219\n4294958997\n920\n2621\n3541\n6162\n9703\n4294965865\n4294965568\n4294964137\n4294962409\n4294959250\n4294964363\n6317\n3384\n9701\n3085\n4294962786\n4294965871\n4294961361\n4294959936\n4294964001\n6641\n3346\n9987\n3333\n4294963320\n4294966653\n4294962677\n4294962034\n4294957415\n2153\n2272\n4425\n6697\n1122\n4294957819\n4294958941\n9464\n1109\n573\n1682\n2255\n4294963937\n4294966192\n2833\n1729\n4294964562\n4294966291\n3557\n2552\n4294966109\n4294958661\n4294957474\n8839\n9017\n7856\n4294966873\n4294964729\n4294964306\n4294961739\n4294958749\n3192\n4645\n7837\n2482\n4294960319\n4294962801\n4294965824\n1329\n9857\n1186\n4294961043\n4294962229\n4294965976\n909\n9589\n498\n4294960087\n4294960585\n3376\n6665\n41\n4294966706\n4294966747\n4294966157\n4294965608\n4294964469\n2781\n9954\n2735\n4294962689\n4294965424\n4294960817\n4294958945\n2466\n4115\n6581\n696\n4294967277\n4294957973\n4294957954\n8631\n9289\n7920\n4294967209\n4294965129\n4294965042\n4294962875\n4294960621\n4294966200\n9525\n8429\n4294957954\n4294966383\n4294967041\n4294966128\n4294965873\n4294964705\n3282\n691\n4294963973\n4294964664\n1341\n8709\n50\n4294958759\n4294958809\n272\n1785\n2057\n3842\n5899\n9741\n4294965640\n4294965381\n4294963725\n4294961810\n4294958239\n2753\n3696\n6449\n145\n4294966594\n4294966739\n4294966037\n4294965480\n4294964221\n2405\n9330\n1735\n4294961065\n4294962800\n4294966569\n2073\n1346\n3419\n4294964765\n4294958184\n4294965653\n6541\n4898\n1439\n4294966337\n4294957776\n4294966817\n7297\n6818\n4294964115\n4294960933\n4294957752\n1389\n1845\n3234\n5079\n8313\n3392\n4294961705\n4294965097\n4294959506\n4294957307\n9517\n9528\n9045\n4294958573\n4294957618\n4294958895\n9217\n816\n33\n849\n882\n1731\n2613\n4294964344\n4294966957\n4294964005\n4294963666\n375\n6745\n7120\n4294963865\n4294960985\n4294957554\n1243\n1501\n2744\n4245\n6989\n1234\n4294958223\n4294959457\n384\n2545\n2929\n5474\n8403\n4294963877\n4294962280\n4294958861\n4294963845\n5410\n1959\n7369\n9328\n4294966697\n4294966025\n4294965426\n4294964155\n4294962285\n4294959144\n4294964133\n5981\n2818\n8799\n1617\n4294960416\n4294962033\n4294965153\n9890\n7747\n4294957637\n4294965384\n4294965725\n4294963813\n2242\n8759\n1001\n4294959760\n4294960761\n3225\n6690\n9915\n4294966605\n4294966520\n4294965829\n4294965053\n4294963586\n4294961343\n4294957633\n1680\n2017\n3697\n5714\n9411\n4294965125\n4294964536\n4294962365\n4294959605\n4294964674\n6983\n4361\n1344\n4294965705\n4294967049\n4294965458\n4294965211\n3373\n1288\n4294964661\n4294965949\n3314\n1967\n4294965281\n4294967248\n4294965233\n4294965185\n3122\n1011\n4294964133\n4294965144\n1981\n9829\n1810\n4294961639\n4294963449\n4294957792\n4294963945\n4441\n1090\n5531\n6621\n2152\n4294958773\n4294960925\n2402\n6031\n8433\n4294964464\n4294962897\n4294960065\n4294965666\n8435\n6805\n4294965240\n4294962045\n4294959989\n4294964738\n7431\n4873\n2304\n4294967177\n4294959481\n4294959362\n1547\n3613\n5160\n8773\n4294963933\n4294962706\n4294959343\n4294964753\n6800\n4257\n1057\n4294965314\n4294966371\n4294964389\n3464\n557\n4294964021\n4294964578\n1303\n8585\n9888\n4294958473\n4294958361\n4294959538\n603\n2845\n3448\n6293\n9741\n4294966034\n4294965775\n4294964513\n4294962992\n4294960209\n4294965905\n8818\n7427\n4294966245\n4294963672\n4294962621\n4294958997\n4294964322\n6023\n3049\n9072\n2121\n4294961193\n4294963314\n4294967211\n3229\n3144\n4294966373\n4294959517\n4294958594\n815\n2113\n2928\n5041\n7969\n3010\n4294960979\n4294963989\n4294957672\n4294964365\n4741\n1810\n6551\n8361\n4294964912\n4294963273\n4294960889\n4294966866\n459\n29\n488\n517\n1005\n1522\n2527\n4294964049\n4294966576\n3329\n2609\n4294965938\n4294958547\n4294967189\n8440\n8333\n4294966773\n4294965106\n4294964583\n4294962393\n4294959680\n4294964777\n7161\n4642\n1803\n4294966445\n4294958248\n4294957397\n8349\n8450\n6799\n4294965249\n4294962048\n4294960001\n4294964753\n7458\n4915\n2373\n4294967288\n4294959661\n4294959653\n2018\n4375\n6393\n768\n4294967161\n4294957929\n4294957794\n8427\n8925\n7352\n4294966277\n4294963629\n4294962610\n4294958943\n4294964257\n5904\n2865\n8769\n1634\n4294960403\n4294962037\n4294965144\n9885\n7733\n4294957618\n4294965351\n4294965673\n4294963728\n2105\n8537\n642\n4294959179\n4294959821\n1704\n4229\n5933\n162\n4294966095\n4294966257\n4294965056\n4294964017\n1777\n8498\n275\n4294958773\n4294959048\n525\n2277\n2802\n5079\n7881\n2960\n4294960841\n4294963801\n4294957346\n4294963851\n3901\n456\n4357\n4813\n9170\n4294963983\n4294963153\n4294959840\n4294965697\n8241\n6642\n4294964883\n4294961525\n4294959112\n3341\n5157\n8498\n4294963655\n4294962153\n4294958512\n3369\n4585\n7954\n2539\n4294960493\n4294963032\n4294966229\n1965\n898\n2863\n4294963761\n4294966624\n3089\n2417\n4294965506\n4294957923\n4294966133\n6760\n5597\n2357\n4294957954\n4294960311\n969\n3984\n4953\n8937\n4294963890\n4294962827\n4294959421\n4294964952\n7077\n4733\n1810\n4294966543\n4294958353\n4294957600\n8657\n8961\n7618\n4294966579\n4294964197\n4294963480\n4294960381\n4294966565\n9650\n8919\n4294958569\n4294957488\n4294958761\n8953\n418\n9371\n9789\n4294959160\n4294958949\n4294960813\n2466\n5983\n8449\n4294964432\n4294962881\n4294960017\n4294965602\n8323\n6629\n4294964952\n4294961581\n4294959237\n3522\n5463\n8985\n4294964448\n4294963433\n4294960585\n4294966722\n11\n9437\n9448\n4294958885\n4294958333\n4294959922\n959\n3585\n4544\n8129\n2673\n4294960802\n4294963475\n4294966981\n3160\n2845\n4294966005\n4294958850\n4294957559\n9113\n9376\n8489\n4294957865\n4294966354\n4294966923\n4294965981\n4294965608\n4294964293\n2605\n9602\n2207\n4294961809\n4294964016\n4294958529\n4294965249\n6482\n4435\n917\n4294965352\n4294966269\n4294964325\n3298\n327\n3625\n4294963952\n4294957577\n4294964233\n4514\n1451\n5965\n7416\n3381\n4294960797\n4294964178\n4294957679\n4294964561\n4944\n2209\n7153\n9362\n4294966515\n4294965877\n4294965096\n4294963677\n4294961477\n4294957858\n2039\n2601\n4640\n7241\n1881\n4294959122\n4294961003\n2829\n6536\n9365\n4294965901\n4294965266\n4294963871\n4294961841\n4294958416\n2961\n4081\n7042\n1123\n4294958165\n4294959288\n157\n2149\n2306\n4455\n6761\n1216\n4294957977\n4294959193\n9874\n1771\n1645\n3416\n4294965061\n4294958477\n4294966242\n7423\n6369\n4294963792\n4294960161\n4294966657\n9522\n8883\n4294958405\n4294967288\n4294958397\n4294958389\n9490\n583\n73\n656\n729\n1385\n2114\n3499\n4294965613\n4294959112\n4294957429\n9245\n9378\n8623\n4294958001\n4294966624\n4294957329\n4294966657\n6690\n6051\n2741\n4294958792\n4294961533\n3029\n7266\n295\n4294957561\n4294957856\n8121\n8681\n6802\n4294965483\n4294962285\n4294960472\n4294965461\n8637\n6802\n4294965439\n4294962241\n4294960384\n4294965329\n8417\n6450\n4294964867\n4294961317\n4294958888\n2909\n4501\n7410\n1911\n4294959321\n4294961232\n3257\n7193\n450\n4294957643\n4294958093\n8440\n9237\n7677\n4294966914\n4294964591\n4294964209\n4294961504\n4294958417\n2625\n3746\n6371\n117\n4294966488\n4294966605\n4294965797\n4294965106\n3607\n1417\n4294965024\n4294966441\n4294964169\n3314\n187\n3501\n4294963688\n4294967189\n3581\n3474\n4294967055\n4294960529\n4294960288\n3521\n6513\n34\n4294966547\n4294966581\n4294965832\n4294965117\n4294963653\n1474\n7831\n9305\n4294967136\n4294966441\n4294966281\n4294965426\n4294964411\n4294962541\n4294959656\n4294964901\n7261\n4866\n2127\n4294966993\n4294959120\n4294958817\n641\n2162\n2803\n4965\n7768\n2733\n4294960501\n4294963234\n4294966439\n2377\n1520\n4294963897\n4294965417\n2018\n139\n2157\n2296\n4294964453\n4294966749\n4294963906\n3359\n9969\n3328\n4294963297\n4294966625\n4294962626\n4294961955\n4294967285\n1944\n1933\n4294963877\n4294965810\n2391\n905\n3296\n4294964201\n4294957497\n4294964402\n4603\n1709\n6312\n8021\n4294964333\n4294962354\n4294959391\n4294964449\n6544\n3697\n241\n4294963938\n4294964179\n821\n7704\n8525\n4294966229\n4294964754\n4294963687\n4294961145\n4294957536\n1385\n1625\n3010\n4635\n7645\n2280\n4294959925\n4294962205\n4294964834\n9743\n7281\n4294967024\n4294964305\n4294964033\n4294961042\n4294957779\n1525\n2008\n3533\n5541\n9074\n4294964615\n4294963689\n4294961008\n4294957401\n1113\n1218\n2331\n3549\n5880\n9429\n4294965309\n4294964738\n4294962751\n4294960193\n4294965648\n8545\n6897\n4294965442\n4294962339\n4294960485\n4294965528\n8717\n6949\n4294965666\n4294962615\n4294960985\n4294966304\n9993\n9001\n4294958994\n4294957995\n4294959693\n392\n2789\n3181\n5970\n9151\n4294965121\n4294964272\n4294962097\n4294959073\n4294963874\n5651\n2229\n7880\n109\n4294957989\n4294958098\n8791\n9593\n8384\n4294957977\n4294966361\n4294967042\n4294966107\n4294965853\n4294964664\n3221\n589\n4294963810\n4294964399\n913\n8016\n8929\n4294966945\n4294965874\n4294965523\n4294964101\n4294962328\n4294959133\n4294964165\n6002\n2871\n8873\n1744\n4294960617\n4294962361\n4294965682\n747\n9133\n9880\n4294959013\n4294958893\n4294960610\n2207\n5521\n7728\n3249\n4294960977\n4294964226\n4294957907\n4294964837\n5448\n2989\n8437\n1426\n4294959863\n4294961289\n4294963856\n7849\n4409\n2258\n4294966667\n4294958925\n4294958296\n9925\n925\n850\n1775\n2625\n4294964400\n4294967025\n4294964129\n4294963858\n691\n7253\n7944\n4294965197\n4294963141\n4294961042\n4294966887\n633\n224\n857\n1081\n1938\n3019\n4294964957\n4294957976\n4294965637\n6317\n4658\n975\n4294965633\n4294966608\n4294964945\n4294964257\n1906\n8867\n773\n4294959640\n4294960413\n2757\n5874\n8631\n4294964505\n4294963136\n4294960345\n4294966185\n9234\n8123\n4294957357\n4294965480\n4294965541\n4294963725\n1970\n8399\n369\n4294958768\n4294959137\n609\n2450\n3059\n5509\n8568\n4294964077\n4294962645\n4294959426\n4294964775\n6905\n4384\n1289\n4294965673\n4294966962\n4294965339\n4294965005\n3048\n757\n4294963805\n4294964562\n1071\n8337\n9408\n4294957745\n4294967153\n4294957602\n4294957459\n7765\n7928\n5693\n3621\n4294959314\n4294962935\n4294964953\n592\n8249\n8841\n4294967090\n4294965931\n4294965725\n4294964360\n4294962789\n4294959853\n4294965346\n7903\n5953\n4294963856\n4294959809\n4294966369\n8882\n7955\n4294966837\n4294964792\n4294964333\n4294961829\n4294958866\n3399\n4969\n8368\n3337\n4294961705\n4294965042\n4294959451\n4294967197\n9352\n9253\n4294958605\n4294957858\n4294959167\n9729\n1600\n1329\n2929\n4294964258\n4294967187\n4294964149\n4294964040\n893\n7637\n8530\n4294966167\n4294964697\n4294963568\n4294960969\n4294967241\n914\n859\n1773\n2632\n4294964405\n4294967037\n4294964146\n4294963887\n737\n7328\n8065\n4294965393\n4294963458\n4294961555\n4294957717\n1976\n2397\n4373\n6770\n1143\n4294957913\n4294959056\n9673\n1433\n1106\n2539\n3645\n4294966184\n4294959829\n4294958717\n1250\n2671\n3921\n6592\n513\n4294967105\n4294957618\n4294957427\n7749\n7880\n5629\n3509\n4294959138\n4294962647\n4294964489\n9840\n7033\n4294966873\n4294963906\n4294963483\n4294960093\n4294966280\n9077\n8061\n4294967138\n4294965199\n4294965041\n4294962944\n4294960689\n4294966337\n9730\n8771\n4294958501\n4294967272\n4294958477\n4294958453\n9634\n791\n425\n1216\n1641\n2857\n4294964498\n4294957355\n4294964557\n4616\n1877\n6493\n8370\n4294964863\n4294963233\n4294960800\n4294966737\n241\n9682\n9923\n4294959605\n4294959528\n4294961837\n4294964069\n8610\n5383\n4294963993\n4294959376\n4294966073\n8153\n6930\n4294965083\n4294962013\n4294959800\n4294964517\n7021\n4242\n1263\n4294965505\n4294966768\n4294964977\n4294964449\n2130\n9283\n1413\n4294960696\n4294962109\n4294965509\n322\n8535\n8857\n4294957392\n4294966249\n4294966345\n4294965298\n4294964347\n2349\n9400\n1749\n4294961149\n4294962898\n4294966751\n2353\n1808\n4294964161\n4294965969\n2834\n1507\n4294964341\n4294965848\n2893\n1445\n4294964338\n4294965783\n2825\n1312\n4294964137\n4294965449\n2290\n443\n2733\n3176\n4294965909\n4294959085\n4294957698\n9487\n9889\n9376\n4294959265\n4294958641\n4294960610\n1955\n5269\n7224\n2493\n4294959717\n4294962210\n4294964631\n9545\n6880\n4294966425\n4294963305\n4294962434\n4294958443\n3581\n4728\n8309\n3037\n4294961346\n4294964383\n4294958433\n4294965520\n6657\n4881\n1538\n4294966419\n4294957957\n4294967080\n7741\n7525\n4294965266\n4294962791\n4294960761\n4294966256\n9721\n8681\n4294958402\n4294967083\n4294958189\n4294957976\n8869\n9549\n8418\n4294957967\n4294966385\n4294967056\n4294966145\n4294965905\n4294964754\n3363\n821\n4294964184\n4294965005\n1893\n9602\n1495\n4294961097\n4294962592\n4294966393\n1689\n786\n2475\n3261\n4294965736\n4294958997\n4294957437\n9138\n9279\n8417\n4294957696\n4294966113\n4294966513\n4294965330\n4294964547\n2581\n9832\n2413\n4294962245\n4294964658\n4294959607\n4294966969\n9280\n8953\n4294958233\n4294967186\n4294958123\n4294958013\n8840\n9557\n8397\n4294957954\n4294966351\n4294967009\n4294966064\n4294965777\n4294964545\n3026\n275\n3301\n3576\n4294966877\n4294960453\n4294960034\n3191\n5929\n9120\n4294965049\n4294964169\n4294961922\n4294958795\n3421\n4920\n8341\n3261\n4294961602\n4294964863\n4294959169\n4294966736\n8609\n8049\n4294966658\n4294964707\n4294964069\n4294961480\n4294958253\n2437\n3394\n5831\n9225\n4294965056\n4294964281\n4294962041\n4294959026\n4294963771\n5501\n1976\n7477\n9453\n4294966930\n4294966383\n4294966017\n4294965104\n4294963825\n4294961633\n4294958162\n2499\n3365\n5864\n9229\n4294965093\n4294964322\n4294962119\n4294959145\n4294963968\n5817\n2489\n8306\n795\n4294959101\n4294959896\n1701\n4301\n6002\n303\n4294966305\n4294966608\n4294965617\n4294964929\n3250\n883\n4294964133\n4294965016\n1853\n9573\n1426\n4294960999\n4294962425\n4294966128\n1257\n89\n1346\n1435\n2781\n4294964216\n4294966997\n4294963917\n3618\n239\n4294963857\n4294964096\n657\n7457\n8114\n4294965571\n4294963685\n4294961960\n4294958349\n3013\n4066\n7079\n1145\n4294958224\n4294959369\n297\n2370\n2667\n5037\n7704\n2741\n4294960445\n4294963186\n4294966335\n2225\n1264\n3489\n4294964753\n4294958242\n4294965699\n6645\n5048\n1693\n4294966741\n4294958434\n4294957879\n9017\n9600\n8617\n4294958217\n4294966834\n4294957755\n4294967293\n7752\n7749\n4294965501\n4294963250\n4294961455\n4294957409\n1568\n1681\n3249\n4930\n8179\n3109\n4294961288\n4294964397\n4294958389\n4294965490\n6583\n4777\n1360\n4294966137\n4294957497\n4294966338\n6539\n5581\n2120\n4294957701\n4294959821\n226\n2751\n2977\n5728\n8705\n4294964433\n4294963138\n4294960275\n4294966117\n9096\n7917\n4294967013\n4294964930\n4294964647\n4294962281\n4294959632\n4294964617\n6953\n4274\n1227\n4294965501\n4294966728\n4294964933\n4294964365\n2002\n9071\n1073\n4294960144\n4294961217\n4294964065\n7986\n4755\n2741\n4294957496\n4294960237\n437\n3378\n3815\n7193\n1008\n4294958201\n4294959209\n114\n2027\n2141\n4168\n6309\n477\n4294966786\n4294967263\n4294966753\n4294966720\n4294966177\n4294965601\n4294964482\n2787\n9973\n2760\n4294962733\n4294965493\n4294960930\n4294959127\n2761\n4592\n7353\n1945\n4294959298\n4294961243\n3245\n7192\n437\n4294957629\n4294958066\n8399\n9169\n7568\n4294966737\n4294964305\n4294963746\n4294960755\n4294967205\n664\n573\n1237\n1810\n3047\n4294964857\n4294957904\n4294965465\n6073\n4242\n315\n4294964557\n4294964872\n2133\n9709\n1842\n4294961551\n4294963393\n4294957648\n4294963745\n4097\n546\n4643\n5189\n9832\n4294965021\n4294964853\n4294962578\n4294960135\n4294965417\n8256\n6377\n4294964633\n4294961010\n4294958347\n2061\n3112\n5173\n8285\n3458\n4294961743\n4294965201\n4294959648\n4294957553\n9905\n162\n67\n229\n296\n525\n821\n1346\n2167\n3513\n4294965680\n4294959193\n4294957577\n9474\n9755\n9229\n4294958984\n4294958213\n4294959901\n818\n3423\n4241\n7664\n1905\n4294959569\n4294961474\n4294963747\n7925\n4376\n2301\n4294966677\n4294958978\n4294958359\n41\n1104\n1145\n2249\n3394\n5643\n9037\n4294964680\n4294963717\n4294961101\n4294957522\n1327\n1553\n2880\n4433\n7313\n1746\n4294959059\n4294960805\n2568\n6077\n8645\n4294964722\n4294963367\n4294960793\n4294966864\n361\n9929\n290\n4294960219\n4294960509\n3432\n6645\n77\n4294966722\n4294966799\n4294966225\n4294965728\n4294964657\n3089\n450\n3539\n4294963989\n4294957528\n4294964221\n4453\n1378\n5831\n7209\n3040\n4294960249\n4294963289\n4294966242\n2235\n1181\n3416\n4294964597\n4294958013\n4294965314\n6031\n4049\n80\n4294964129\n4294964209\n1042\n7955\n8997\n4294966952\n4294965949\n4294965605\n4294964258\n4294962567\n4294959529\n4294964800\n7033\n4537\n1570\n4294966107\n4294957677\n4294966488\n6869\n6061\n2930\n4294958991\n4294961921\n3616\n8241\n1857\n4294960098\n4294961955\n4294964757\n9416\n6877\n4294966293\n4294963170\n4294962167\n4294958041\n2912\n3657\n6569\n226\n4294966795\n4294967021\n4294966520\n4294966245\n4294965469\n4294964418\n2591\n9713\n2304\n4294962017\n4294964321\n4294959042\n4294966067\n7813\n6584\n4294964397\n4294960981\n4294958082\n1767\n2553\n4320\n6873\n1193\n4294958066\n4294959259\n29\n1992\n2021\n4013\n6034\n47\n4294966081\n4294966128\n4294964913\n4294963745\n1362\n7811\n9173\n4294966984\n4294966157\n4294965845\n4294964706\n4294963255\n4294960665\n4294966624\n9993\n9321\n4294959314\n4294958635\n4294960653\n1992\n5349\n7341\n2690\n4294960031\n4294962721\n4294965456\n881\n9041\n9922\n4294958963\n4294958885\n4294960552\n2141\n5397\n7538\n2935\n4294960473\n4294963408\n4294966585\n2697\n1986\n4294964683\n4294966669\n4294964056\n3429\n189\n3618\n4294963807\n4294957425\n4294963936\n4065\n705\n4770\n5475\n245\n4294965720\n4294965965\n4294964389\n3058\n151\n3209\n3360\n4294966569\n4294959929\n4294959202\n1835\n3741\n5576\n9317\n4294964893\n4294964210\n4294961807\n4294958721\n3232\n4657\n7889\n2546\n4294960435\n4294962981\n4294966120\n1805\n629\n2434\n3063\n4294965497\n4294958560\n4294966761\n8025\n7490\n4294965515\n4294963005\n4294961224\n4294966933\n861\n498\n1359\n1857\n3216\n4294965073\n4294958289\n4294966066\n7059\n5829\n2888\n4294958717\n4294961605\n3026\n7335\n361\n4294957696\n4294958057\n8457\n9218\n7675\n4294966893\n4294964568\n4294964165\n4294961437\n4294958306\n2447\n3457\n5904\n9361\n4294965265\n4294964626\n4294962595\n4294959925\n4294965224\n7853\n5781\n3634\n4294959415\n4294963049\n4294965168\n921\n8793\n9714\n4294958507\n4294958221\n4294959432\n357\n2493\n2850\n5343\n8193\n3536\n4294961729\n4294965265\n4294959698\n4294957667\n69\n440\n509\n949\n1458\n2407\n3865\n6272\n137\n4294966409\n4294966546\n4294965659\n4294964909\n3272\n885\n4294964157\n4294965042\n1903\n9649\n1552\n4294961201\n4294962753\n4294966658\n2115\n1477\n3592\n4294965069\n4294958661\n4294966434\n7799\n6937\n4294964736\n4294961673\n4294959113\n3490\n5307\n8797\n4294964104\n4294962901\n4294959709\n4294965314\n7727\n5745\n3472\n4294959217\n4294962689\n4294964610\n3\n7317\n7320\n4294964637\n4294961957\n4294959298\n4294963959\n5961\n2624\n8585\n1209\n4294959794\n4294961003\n3501\n7208\n709\n4294957917\n4294958626\n9247\n577\n9824\n401\n4294960225\n4294960626\n3555\n6885\n440\n4294957325\n4294957765\n7794\n8263\n6057\n4294964320\n4294960377\n4294957401\n482\n587\n1069\n1656\n2725\n4381\n7106\n1487\n4294958593\n4294960080\n1377\n4161\n5538\n9699\n4294965237\n4294964936\n4294962877\n4294960517\n4294966098\n9319\n8121\n4294957440\n4294965561\n4294965705\n4294963970\n2379\n9053\n1432\n4294960485\n4294961917\n4294965106\n9727\n7537\n4294967264\n4294964801\n4294964769\n4294962274\n4294959747\n4294964725\n7176\n4605\n1781\n4294966386\n4294958167\n4294967257\n8128\n8089\n4294966217\n4294964306\n4294963227\n4294960237\n4294966168\n9109\n7981\n4294967090\n4294965071\n4294964865\n4294962640\n4294960209\n4294965553\n8466\n6723\n4294965189\n4294961912\n4294959805\n4294964421\n6930\n4055\n985\n4294965040\n4294966025\n4294963769\n2498\n8971\n1469\n4294960440\n4294961909\n4294965053\n9666\n7423\n4294967089\n4294964512\n4294964305\n4294961521\n4294958530\n2755\n3989\n6744\n733\n4294957477\n4294958210\n8391\n9305\n7696\n4294967001\n4294964697\n4294964402\n4294961803\n4294958909\n3416\n5029\n8445\n3474\n4294961919\n4294965393\n4294960016\n4294958113\n833\n1650\n2483\n4133\n6616\n749\n4294957365\n4294958114\n8183\n9001\n7184\n4294966185\n4294963369\n4294962258\n4294958331\n3293\n4328\n7621\n1949\n4294959570\n4294961519\n4294963793\n8016\n4513\n2529\n4294967042\n4294959571\n4294959317\n1592\n3613\n5205\n8818\n4294964023\n4294962841\n4294959568\n4294965113\n7385\n5202\n2587\n4294957789\n4294960376\n869\n3949\n4818\n8767\n3585\n4294962352\n4294965937\n4294960993\n4294959634\n3331\n5669\n9000\n4294964669\n4294963669\n4294961042\n4294957415\n1161\n1280\n2441\n3721\n6162\n9883\n4294966045\n4294965928\n4294964677\n4294963309\n4294960690\n4294966703\n97\n9504\n9601\n4294959105\n4294958706\n4294960515\n1925\n5144\n7069\n2213\n4294959282\n4294961495\n3481\n7680\n1161\n4294958841\n4294960002\n1547\n4253\n5800\n53\n4294965853\n4294965906\n4294964463\n3073\n240\n3313\n3553\n4294966866\n4294960419\n4294959989\n3112\n5805\n8917\n4294964722\n4294963639\n4294961065\n4294957408\n1177\n1289\n2466\n3755\n6221\n9976\n4294966197\n4294966173\n4294965074\n4294963951\n4294961729\n4294958384\n2817\n3905\n6722\n627\n4294957349\n4294957976\n8029\n8709\n6738\n4294965447\n4294962185\n4294960336\n4294965225\n8265\n6194\n4294964459\n4294960653\n4294957816\n1173\n1693\n2866\n4559\n7425\n1984\n4294959409\n4294961393\n3506\n7603\n1109\n4294958712\n4294959821\n1237\n3762\n4999\n8761\n4294963760\n4294962521\n4294958985\n4294964210\n5899\n2813\n8712\n1525\n4294960237\n4294961762\n4294964703\n9169\n6576\n4294965745\n4294962321\n4294960770\n4294965795\n9269\n7768\n4294967037\n4294964805\n4294964546\n4294962055\n4294959305\n4294964064\n6073\n2841\n8914\n1755\n4294960669\n4294962424\n4294965797\n925\n9426\n351\n4294959777\n4294960128\n2609\n5441\n8050\n3491\n4294961541\n4294965032\n4294959277\n4294967013\n8994\n8711\n4294957705\n4294966416\n4294966825\n4294965945\n4294965474\n4294964123\n2301\n9128\n1429\n4294960557\n4294961986\n4294965247\n9937\n7888\n4294957825\n4294965713\n4294966242\n4294964659\n3605\n968\n4294964573\n4294965541\n2818\n1063\n4294963881\n4294964944\n1529\n9177\n706\n4294959883\n4294960589\n3176\n6469\n9645\n4294966114\n4294965759\n4294964577\n4294963040\n4294960321\n4294966065\n9090\n7859\n4294966949\n4294964808\n4294964461\n4294961973\n4294959138\n4294963815\n5657\n2176\n7833\n9\n4294957842\n4294957851\n8397\n8952\n7349\n4294966301\n4294963650\n4294962655\n4294959009\n4294964368\n6081\n3153\n9234\n2387\n4294961621\n4294964008\n4294958333\n4294965045\n6082\n3831\n9913\n4294963744\n4294963657\n4294960105\n4294966466\n9275\n8445\n4294957720\n4294966165\n4294966589\n4294965458\n4294964751\n2913\n368\n3281\n4294963649\n4294966930\n3283\n2917\n4294966200\n4294959117\n4294958021\n9842\n567\n409\n976\n1385\n2361\n4294963746\n4294966107\n2557\n1368\n4294963925\n4294965293\n1922\n9919\n1841\n4294961760\n4294963601\n4294958065\n4294964370\n5139\n2213\n7352\n9565\n4294966917\n4294966482\n4294966103\n4294965289\n4294964096\n4294962089\n4294958889\n4294963682\n5275\n1661\n6936\n8597\n4294965533\n4294964130\n4294962367\n4294959201\n4294964272\n6177\n3153\n9330\n2483\n4294961813\n4294964296\n4294958813\n4294965813\n7330\n5847\n3177\n4294959024\n4294962201\n4294963929\n8834\n5467\n4294964301\n4294959768\n4294966773\n9245\n8722\n4294957967\n4294966689\n4294957360\n4294966753\n6817\n6274\n3091\n4294959365\n4294962456\n4294964525\n9685\n6914\n4294966599\n4294963513\n4294962816\n4294959033\n4294964553\n6290\n3547\n9837\n3384\n4294963221\n4294966605\n4294962530\n4294961839\n4294967073\n1616\n1393\n3009\n4294964402\n4294957411\n4294964517\n4632\n1853\n6485\n8338\n4294964823\n4294963161\n4294960688\n4294966553\n9945\n9202\n4294959147\n4294958349\n4294960200\n1253\n4157\n5410\n9567\n4294964977\n4294964544\n4294962225\n4294959473\n4294964402\n6579\n3685\n264\n4294963949\n4294964213\n866\n7783\n8649\n4294966432\n4294965081\n4294964217\n4294962002\n4294958923\n3629\n5256\n8885\n4294964141\n4294963026\n4294959871\n4294965601\n8176\n6481\n4294964657\n4294961138\n4294958499\n2341\n3544\n5885\n9429\n4294965314\n4294964743\n4294962761\n4294960208\n4294965673\n8585\n6962\n4294965547\n4294962509\n4294960760\n4294965973\n9437\n8114\n4294957551\n4294965665\n4294965920\n4294964289\n2913\n9906\n2819\n4294962725\n4294965544\n4294960973\n4294959221\n2898\n4823\n7721\n2544\n4294960265\n4294962809\n4294965778\n1291\n9773\n1064\n4294960837\n4294961901\n4294965442\n47\n8193\n8240\n4294966433\n4294964673\n4294963810\n4294961187\n4294957701\n1592\n1997\n3589\n5586\n9175\n4294964761\n4294963936\n4294961401\n4294958041\n2146\n2891\n5037\n7928\n2965\n4294960893\n4294963858\n4294957455\n4294964017\n4176\n897\n5073\n5970\n1043\n4294967013\n4294958056\n4294957773\n8533\n9010\n7543\n4294966553\n4294964096\n4294963353\n4294960153\n4294966210\n9067\n7981\n4294967048\n4294965029\n4294964781\n4294962514\n4294959999\n4294965217\n7920\n5841\n4294963761\n4294959602\n4294966067\n8373\n7144\n4294965517\n4294962661\n4294960882\n4294966247\n9833\n8784\n4294958617\n4294957401\n4294958722\n8827\n253\n9080\n9333\n4294958413\n4294957746\n4294958863\n9313\n880\n193\n1073\n1266\n2339\n3605\n4294965944\n4294959549\n4294958197\n450\n1351\n1801\n3152\n4953\n8105\n3058\n4294961163\n4294964221\n4294958088\n4294965013\n5805\n3522\n9327\n2849\n4294962176\n4294965025\n4294959905\n4294957634\n243\n581\n824\n1405\n2229\n3634\n5863\n9497\n4294965360\n4294964857\n4294962921\n4294960482\n4294966107\n9293\n8104\n4294957397\n4294965501\n4294965602\n4294963807\n2113\n8624\n737\n4294959361\n4294960098\n2163\n4965\n7128\n2093\n4294959221\n4294961314\n3239\n7257\n496\n4294957753\n4294958249\n8706\n9659\n8365\n4294958024\n4294966389\n4294967117\n4294966210\n4294966031\n4294964945\n4294963680\n1329\n7713\n9042\n4294966755\n4294965797\n4294965256\n4294963757\n4294961717\n4294958178\n2599\n3481\n6080\n9561\n4294965641\n4294965202\n4294963547\n4294961453\n4294957704\n1861\n2269\n4130\n6399\n529\n4294966928\n4294957457\n4294967089\n7250\n7043\n4294964293\n4294961336\n4294958333\n2373\n3410\n5783\n9193\n4294964976\n4294964169\n4294961849\n4294958722\n3275\n4701\n7976\n2677\n4294960653\n4294963330\n4294966687\n2721\n2112\n4294964833\n4294966945\n4294964482\n4294964131\n1317\n8152\n9469\n4294957621\n4294967090\n4294957415\n4294967209\n7328\n7241\n4294964569\n4294961810\n4294959083\n3597\n5384\n8981\n4294964365\n4294963346\n4294960415\n4294966465\n9584\n8753\n4294958337\n4294967090\n4294958131\n4294957925\n8760\n9389\n8149\n4294957538\n4294965687\n4294965929\n4294964320\n2953\n9977\n2930\n4294962907\n4294965837\n4294961448\n4294959989\n4294964141\n6834\n3679\n513\n4294964192\n4294964705\n1601\n9010\n611\n4294959621\n4294960232\n2557\n5493\n8050\n3543\n4294961593\n4294965136\n4294959433\n4294967273\n9410\n9387\n4294958797\n4294958184\n4294959685\n573\n2962\n3535\n6497\n32\n4294966529\n4294966561\n4294965794\n4294965059\n3557\n1320\n4294964877\n4294966197\n4294963778\n2679\n9161\n1840\n4294961001\n4294962841\n4294966546\n2091\n1341\n3432\n4294964773\n4294958205\n4294965682\n6591\n4977\n1568\n4294966545\n4294958113\n4294957362\n8179\n8245\n6424\n4294964669\n4294961093\n4294958466\n2263\n3433\n5696\n9129\n4294964825\n4294963954\n4294961483\n4294958141\n2328\n3173\n5501\n8674\n4294964175\n4294962849\n4294959728\n4294965281\n7713\n5698\n3411\n4294959109\n4294962520\n4294964333\n9557\n6594\n4294966151\n4294962745\n4294961600\n4294967049\n1353\n1106\n2459\n3565\n4294966024\n4294959589\n4294958317\n610\n1631\n2241\n3872\n6113\n9985\n4294966098\n4294966083\n4294964885\n4294963672\n4294961261\n4294957637\n1602\n1943\n3545\n5488\n9033\n4294964521\n4294963554\n4294960779\n4294967037\n520\n261\n781\n1042\n1823\n2865\n4294964688\n4294957553\n4294964945\n5202\n2851\n8053\n904\n4294958957\n4294959861\n1522\n4087\n5609\n9696\n4294965305\n4294965001\n4294963010\n4294960715\n4294966429\n9848\n8981\n4294958829\n4294957810\n4294959343\n9857\n1904\n1761\n4294963665\n4294965426\n1795\n9925\n1720\n4294961645\n4294963365\n4294957714\n4294963783\n4201\n688\n4889\n5577\n466\n4294966043\n4294966509\n4294965256\n4294964469\n2429\n9602\n2031\n4294961633\n4294963664\n4294958001\n4294964369\n5074\n2147\n7221\n9368\n4294966589\n4294965957\n4294965250\n4294963911\n4294961865\n4294958480\n3049\n4233\n7282\n1515\n4294958797\n4294960312\n1813\n4829\n6642\n1471\n4294958113\n4294959584\n401\n2689\n3090\n5779\n8869\n4294964648\n4294963517\n4294960869\n4294967090\n663\n457\n1120\n1577\n2697\n4294964274\n4294966971\n4294963949\n3624\n277\n4294963901\n4294964178\n783\n7665\n8448\n4294966113\n4294964561\n4294963378\n4294960643\n4294966725\n72\n9501\n9573\n4294959074\n4294958647\n4294960425\n1776\n4905\n6681\n1586\n4294958267\n4294959853\n824\n3381\n4205\n7586\n1791\n4294959377\n4294961168\n3249\n7121\n370\n4294957491\n4294957861\n8056\n8621\n6677\n4294965298\n4294961975\n4294959977\n4294964656\n7337\n4697\n2034\n4294966731\n4294958765\n4294958200\n9669\n573\n242\n815\n1057\n1872\n2929\n4294964801\n4294957730\n4294965235\n5669\n3608\n9277\n2885\n4294962162\n4294965047\n4294959913\n4294957664\n281\n649\n930\n1579\n2509\n4088\n6597\n685\n4294967282\n4294957967\n4294957953\n8624\n9281\n7905\n4294967186\n4294965091\n4294964981\n4294962776\n4294960461\n4294965941\n9106\n7751\n4294966857\n4294964608\n4294964169\n4294961481\n4294958354\n2539\n3597\n6136\n9733\n4294965869\n4294965602\n4294964175\n4294962481\n4294959360\n4294964545\n6609\n3858\n467\n4294964325\n4294964792\n1821\n9317\n1138\n4294960455\n4294961593\n4294964752\n9049\n6505\n4294965554\n4294962059\n4294960317\n4294965080\n8101\n5885\n4294963986\n4294959871\n4294966561\n9136\n8401\n4294957537\n4294965938\n4294966179\n4294964821\n4294963704\n1229\n7637\n8866\n4294966503\n4294965369\n4294964576\n4294962649\n4294959929\n4294965282\n7915\n5901\n4294963816\n4294959717\n4294966237\n8658\n7599\n4294966257\n4294963856\n4294962817\n4294959377\n4294964898\n6979\n4581\n1560\n4294966141\n4294957701\n4294966546\n6951\n6201\n3152\n4294959353\n4294962505\n4294964562\n9771\n7037\n4294966808\n4294963845\n4294963357\n4294959906\n4294965967\n8577\n7248\n4294965825\n4294963073\n4294961602\n4294957379\n1685\n1768\n3453\n5221\n8674\n4294963895\n4294962569\n4294959168\n4294964441\n6313\n3458\n9771\n3229\n4294963000\n4294966229\n4294961933\n4294960866\n4294965503\n9073\n7280\n4294966353\n4294963633\n4294962690\n4294959027\n4294964421\n6152\n3277\n9429\n2706\n4294962135\n4294964841\n4294959680\n4294967225\n9609\n9538\n4294959147\n4294958685\n4294960536\n1925\n5165\n7090\n2255\n4294959345\n4294961600\n4294963649\n7953\n4306\n2259\n4294966565\n4294958824\n4294958093\n9621\n418\n39\n457\n496\n953\n1449\n2402\n4294963851\n4294966253\n2808\n1765\n4294964573\n4294966338\n3615\n2657\n4294966272\n4294958929\n4294957905\n9538\n147\n9685\n9832\n4294959517\n4294959349\n4294961570\n3623\n7897\n1520\n4294959417\n4294960937\n3058\n6699\n9757\n4294966456\n4294966213\n4294965373\n4294964290\n4294962367\n4294959361\n4294964432\n6497\n3633\n130\n4294963763\n4294963893\n360\n6957\n7317\n4294964274\n4294961591\n4294958569\n2864\n4137\n7001\n1138\n4294958139\n4294959277\n120\n2101\n2221\n4322\n6543\n865\n4294957408\n4294958273\n8385\n9362\n7747\n4294967109\n4294964856\n4294964669\n4294962229\n4294959602\n4294964535\n6841\n4080\n921\n4294965001\n4294965922\n3627\n2253\n4294965880\n4294958133\n4294966717\n7554\n6975\n4294964529\n4294961504\n4294958737\n2945\n4386\n7331\n1717\n4294959048\n4294960765\n2517\n5986\n8503\n4294964489\n4294962992\n4294960185\n4294965881\n8770\n7355\n4294966125\n4294963480\n4294962309\n4294958493\n3506\n4703\n8209\n2912\n4294961121\n4294964033\n4294957858\n4294964595\n5157\n2456\n7613\n69\n4294957682\n4294957751\n8137\n8592\n6729\n4294965321\n4294962050\n4294960075\n4294964829\n7608\n5141\n2749\n4294957890\n4294960639\n1233\n4576\n5809\n385\n4294966194\n4294966579\n4294965477\n4294964760\n2941\n405\n3346\n4294963751\n4294967097\n3552\n3353\n4294966905\n4294960258\n4294959867\n2829\n5400\n8229\n3629\n4294961858\n4294965487\n4294960049\n4294958240\n993\n1937\n2930\n4867\n7797\n2664\n4294960461\n4294963125\n4294966290\n2119\n1113\n3232\n4294964345\n4294957577\n4294964626\n4907\n2237\n7144\n9381\n4294966525\n4294965906\n4294965135\n4294963745\n4294961584\n4294958033\n2321\n3058\n5379\n8437\n4294963816\n4294962253\n4294958773\n4294963730\n5207\n1641\n6848\n8489\n4294965337\n4294963826\n4294961867\n4294958397\n2968\n4069\n7037\n1106\n4294958143\n4294959249\n96\n2049\n2145\n4194\n6339\n533\n4294966872\n4294957405\n4294966981\n7090\n6775\n4294963865\n4294960640\n4294967209\n553\n466\n1019\n1485\n2504\n4294963989\n4294966493\n3186\n2383\n4294965569\n4294957952\n4294966225\n6881\n5810\n2691\n4294958501\n4294961192\n2397\n6293\n8690\n4294964983\n4294963673\n4294961360\n4294957737\n1801\n2242\n4043\n6285\n328\n4294966613\n4294966941\n4294966258\n4294965903\n4294964865\n3472\n1041\n4294964513\n4294965554\n2771\n1029\n4294963800\n4294964829\n1333\n8866\n199\n4294959065\n4294959264\n1033\n3001\n4034\n7035\n1069\n4294958104\n4294959173\n9981\n1858\n1839\n4294963697\n4294965536\n1937\n177\n2114\n2291\n4294964405\n4294966696\n4294963805\n3205\n9714\n2919\n4294962633\n4294965552\n4294960889\n4294959145\n2738\n4587\n7325\n1912\n4294959237\n4294961149\n3090\n6943\n33\n4294966976\n4294967009\n4294966689\n4294966402\n4294965795\n4294964901\n3400\n1005\n4294964405\n4294965410\n2519\n633\n3152\n4294963785\n4294966937\n3426\n3067\n4294966493\n4294959560\n4294958757\n1021\n2482\n3503\n5985\n9488\n4294965473\n4294964961\n4294963138\n4294960803\n4294966645\n152\n9501\n9653\n4294959154\n4294958807\n4294960665\n2176\n5545\n7721\n3266\n4294960987\n4294964253\n4294957944\n4294964901\n5549\n3154\n8703\n1857\n4294960560\n4294962417\n4294965681\n802\n9187\n9989\n4294959176\n4294959165\n4294961045\n2914\n6663\n9577\n4294966240\n4294965817\n4294964761\n4294963282\n4294960747\n4294966733\n184\n9621\n9805\n4294959426\n4294959231\n4294961361\n3296\n7361\n657\n4294958018\n4294958675\n9397\n776\n173\n949\n1122\n2071\n3193\n4294965264\n4294958457\n4294966425\n7586\n6715\n4294964301\n4294961016\n4294958021\n1741\n2466\n4207\n6673\n880\n4294957553\n4294958433\n8690\n9827\n8517\n4294958344\n4294966861\n4294957909\n4294957474\n8087\n8265\n6352\n4294964617\n4294960969\n4294958290\n1963\n2957\n4920\n7877\n2797\n4294960674\n4294963471\n4294966849\n3024\n2577\n4294965601\n4294958178\n4294966483\n7365\n6552\n4294963917\n4294960469\n4294967090\n263\n57\n320\n377\n697\n1074\n1771\n2845\n4294964616\n4294957461\n4294964781\n4946\n2431\n7377\n9808\n4294967185\n4294966993\n4294966882\n4294966579\n4294966165\n4294965448\n4294964317\n4294962469\n4294959490\n4294964663\n6857\n4224\n1081\n4294965305\n4294966386\n4294964395\n3485\n584\n4294964069\n4294964653\n1426\n8783\n209\n4294958992\n4294959201\n897\n2802\n3699\n6501\n200\n4294966701\n4294966901\n4294966306\n4294965911\n4294964921\n3536\n1161\n4294964697\n4294965858\n3259\n1821\n4294965080\n4294966901\n4294964685\n4294964290\n1679\n8673\n352\n4294959025\n4294959377\n1106\n3187\n4293\n7480\n1773\n4294959253\n4294961026\n2983\n6713\n9696\n4294966409\n4294966105\n4294965218\n4294964027\n4294961949\n4294958680\n3333\n4717\n8050\n2767\n4294960817\n4294963584\n4294967105\n3393\n3202\n4294966595\n4294959797\n4294959096\n1597\n3397\n4994\n8391\n3385\n4294961776\n4294965161\n4294959641\n4294957506\n9851\n61\n9912\n9973\n4294959885\n4294959858\n4294962447\n4294965009\n160\n7873\n8033\n4294965906\n4294963939\n4294962549\n4294959192\n4294964445\n6341\n3490\n9831\n3321\n4294963152\n4294966473\n4294962329\n4294961506\n4294966539\n749\n9992\n741\n4294960733\n4294961474\n4294964911\n9089\n6704\n4294965793\n4294962497\n4294960994\n4294966195\n9893\n8792\n4294958685\n4294957477\n4294958866\n9047\n617\n9664\n281\n4294959945\n4294960226\n2875\n5805\n8680\n4294964485\n4294963165\n4294960354\n4294966223\n9281\n8208\n4294957489\n4294965697\n4294965890\n4294964291\n2885\n9880\n2765\n4294962645\n4294965410\n4294960759\n4294958873\n2336\n3913\n6249\n162\n4294966411\n4294966573\n4294965688\n4294964965\n3357\n1026\n4294964383\n4294965409\n2496\n609\n3105\n4294963714\n4294966819\n3237\n2760\n4294965997\n4294958757\n4294957458\n8919\n9081\n8000\n4294967081\n4294965081\n4294964866\n4294962651\n4294960221\n4294965576\n8501\n6781\n4294965282\n4294962063\n4294960049\n4294964816\n7569\n5089\n2658\n4294957747\n4294960405\n856\n3965\n4821\n8786\n3607\n4294962393\n4294966000\n4294961097\n4294959801\n3602\n6107\n9709\n4294965816\n4294965525\n4294964045\n4294962274\n4294959023\n4294964001\n5728\n2433\n8161\n594\n4294958755\n4294959349\n808\n2861\n3669\n6530\n199\n4294966729\n4294966928\n4294966361\n4294965993\n4294965058\n4294963755\n1517\n7976\n9493\n4294957469\n4294966962\n4294967135\n4294966801\n4294966640\n4294966145\n4294965489\n4294964338\n2531\n9573\n2104\n4294961677\n4294963781\n4294958162\n4294964647\n5513\n2864\n8377\n1241\n4294959618\n4294960859\n3181\n6744\n9925\n4294966669\n4294966594\n4294965967\n4294965265\n4294963936\n4294961905\n4294958545\n3154\n4403\n7557\n1960\n4294959517\n4294961477\n4294963698\n7879\n4281\n2160\n4294966441\n4294958601\n4294957746\n9051\n9501\n8552\n4294958053\n4294966605\n4294957362\n4294966671\n6737\n6112\n2849\n4294958961\n4294961810\n3475\n7989\n1464\n4294959453\n4294960917\n3074\n6695\n9769\n4294966464\n4294966233\n4294965401\n4294964338\n4294962443\n4294959485\n4294964632\n6821\n4157\n978\n4294965135\n4294966113\n4294963952\n2769\n9425\n2194\n4294961619\n4294963813\n4294958136\n4294964653\n5493\n2850\n8343\n1193\n4294959536\n4294960729\n2969\n6402\n9371\n4294965773\n4294965144\n4294963621\n4294961469\n4294957794\n1967\n2465\n4432\n6897\n1329\n4294958226\n4294959555\n485\n2744\n3229\n5973\n9202\n4294965175\n4294964377\n4294962256\n4294959337\n4294964297\n6338\n3339\n9677\n3016\n4294962693\n4294965709\n4294961106\n4294959519\n3329\n5552\n8881\n4294964433\n4294963314\n4294960451\n4294966469\n9624\n8797\n4294958421\n4294967218\n4294958343\n4294958265\n9312\n281\n9593\n9874\n4294959467\n4294959341\n4294961512\n3557\n7773\n1330\n4294959103\n4294960433\n2240\n5377\n7617\n2994\n4294960611\n4294963605\n4294966920\n3229\n2853\n4294966082\n4294958935\n4294957721\n9360\n9785\n9145\n4294958930\n4294958075\n4294959709\n488\n2901\n3389\n6290\n9679\n4294965969\n4294965648\n4294964321\n4294962673\n4294959698\n4294965075\n7477\n5256\n2733\n4294957989\n4294960722\n1415\n4841\n6256\n1097\n4294957353\n4294958450\n8507\n9661\n8168\n4294957829\n4294965997\n4294966530\n4294965231\n4294964465\n2400\n9569\n1969\n4294961538\n4294963507\n4294957749\n4294963960\n4413\n1077\n5490\n6567\n2057\n4294958624\n4294960681\n2009\n5394\n7403\n2797\n4294960200\n4294962997\n4294965901\n1602\n207\n1809\n2016\n4294963825\n4294965841\n2370\n915\n3285\n4294964200\n4294957485\n4294964389\n4578\n1671\n6249\n7920\n4294964169\n4294962089\n4294958962\n4294963755\n5421\n1880\n7301\n9181\n4294966482\n4294965663\n4294964849\n4294963216\n4294960769\n4294966689\n162\n9555\n9717\n4294959272\n4294958989\n4294960965\n2658\n6327\n8985\n4294965312\n4294964297\n4294962313\n4294959314\n4294964331\n6349\n3384\n9733\n3117\n4294962850\n4294965967\n4294961521\n4294960192\n4294964417\n7313\n4434\n1747\n4294966181\n4294957928\n4294966813\n7445\n6962\n4294964407\n4294961369\n4294958480\n2553\n3737\n6290\n27\n4294966317\n4294966344\n4294965365\n4294964413\n2482\n9599\n2081\n4294961680\n4294963761\n4294958145\n4294964610\n5459\n2773\n8232\n1005\n4294959237\n4294960242\n2183\n5129\n7312\n2441\n4294959753\n4294962194\n4294964651\n9549\n6904\n4294966453\n4294963357\n4294962514\n4294958575\n4294963793\n5072\n1569\n6641\n8210\n4294964851\n4294963061\n4294960616\n4294966381\n9701\n8786\n4294958487\n4294967273\n4294958464\n4294958441\n9609\n754\n363\n1117\n1480\n2597\n4294964077\n4294966674\n3455\n2833\n4294966288\n4294959121\n4294958113\n9938\n755\n693\n1448\n2141\n3589\n4294965730\n4294959319\n4294957753\n9776\n233\n9\n242\n251\n493\n744\n1237\n1981\n3218\n4294965199\n4294958417\n4294966320\n7441\n6465\n4294963906\n4294960371\n4294966981\n56\n9741\n9797\n4294959538\n4294959335\n4294961577\n3616\n7897\n1513\n4294959410\n4294960923\n3037\n6664\n9701\n4294966365\n4294966066\n4294965135\n4294963905\n4294961744\n4294958353\n2801\n3858\n6659\n517\n4294967176\n4294957693\n4294957573\n7970\n8247\n6217\n4294964464\n4294960681\n4294957849\n1234\n1787\n3021\n4808\n7829\n2637\n4294960466\n4294963103\n4294966273\n2080\n1057\n3137\n4294964194\n4294957331\n4294964229\n4264\n1197\n5461\n6658\n2119\n4294958777\n4294960896\n2377\n5977\n8354\n4294964331\n4294962685\n4294959720\n4294965109\n7533\n5346\n2879\n4294958225\n4294961104\n2033\n5841\n7874\n4294963715\n4294961589\n4294958008\n2301\n3013\n5314\n8327\n3641\n4294961968\n4294965609\n4294960281\n4294958594\n1579\n2877\n4456\n7333\n1789\n4294959122\n4294960911\n2737\n6352\n9089\n4294965441\n4294964530\n4294962675\n4294959909\n4294965288\n7901\n5893\n4294963794\n4294959687\n4294966185\n8576\n7465\n4294966041\n4294963506\n4294962251\n4294958461\n3416\n4581\n7997\n2578\n4294960575\n4294963153\n4294966432\n2289\n1425\n4294963714\n4294965139\n1557\n9400\n957\n4294960357\n4294961314\n4294964375\n8393\n5472\n4294963865\n4294959337\n4294965906\n7947\n6557\n4294964504\n4294961061\n4294958269\n2034\n3007\n5041\n8048\n3089\n4294961137\n4294964226\n4294958067\n4294964997\n5768\n3469\n9237\n2706\n4294961943\n4294964649\n4294959296\n4294966649\n8649\n8002\n4294966651\n4294964653\n4294964008\n4294961365\n4294958077\n2146\n2927\n5073\n8000\n3073\n4294961073\n4294964146\n4294957923\n4294964773\n5400\n2877\n8277\n1154\n4294959431\n4294960585\n2720\n6009\n8729\n4294964738\n4294963467\n4294960909\n4294967080\n693\n477\n1170\n1647\n2817\n4294964464\n4294967281\n4294964449\n4294964434\n1587\n8725\n312\n4294959037\n4294959349\n1090\n3143\n4233\n7376\n1609\n4294958985\n4294960594\n2283\n5581\n7864\n3445\n4294961309\n4294964754\n4294958767\n4294966225\n7696\n6625\n4294964321\n4294960946\n4294957971\n1621\n2296\n3917\n6213\n130\n4294966343\n4294966473\n4294965520\n4294964697\n2921\n322\n3243\n3565\n4294966808\n4294960373\n4294959885\n2962\n5551\n8513\n4294964064\n4294962577\n4294959345\n4294964626\n6675\n4005\n680\n4294964685\n4294965365\n2754\n823\n3577\n4294964400\n4294957977\n4294965081\n5762\n3547\n9309\n2856\n4294962165\n4294965021\n4294959890\n4294957615\n209\n528\n737\n1265\n2002\n3267\n5269\n8536\n4294963805\n4294962341\n4294958850\n4294963895\n5449\n2048\n7497\n9545\n4294967042\n4294966587\n4294966333\n4294965624\n4294964661\n4294962989\n4294960354\n4294966047\n9105\n7856\n4294966961\n4294964817\n4294964482\n4294962003\n4294959189\n4294963896\n5789\n2389\n8178\n567\n4294958745\n4294959312\n761\n2777\n3538\n6315\n9853\n4294966168\n4294966021\n4294964893\n4294963618\n4294961215\n4294957537\n1456\n1697\n3153\n4850\n8003\n2853\n4294960856\n4294963709\n4294967269\n4294963682\n4294963655\n41\n6400\n6441\n2841\n4294959282\n4294962123\n4294964109\n8936\n5749\n4294964685\n4294960434\n4294957823\n961\n1488\n2449\n3937\n6386\n323\n4294966709\n4294967032\n4294966445\n4294966181\n4294965330\n4294964215\n2249\n9168\n1417\n4294960585\n4294962002\n4294965291\n9997\n7992\n4294957989\n4294965981\n4294966674\n4294965359\n4294964737\n2800\n241\n3041\n3282\n4294966323\n4294959605\n4294958632\n941\n2277\n3218\n5495\n8713\n4294964208\n4294962921\n4294959833\n4294965458\n7995\n6157\n4294964152\n4294960309\n4294967165\n178\n47\n225\n272\n497\n769\n1266\n2035\n3301\n4294965336\n4294958637\n4294966677\n8018\n7399\n4294965417\n4294962816\n4294960937\n4294966457\n98\n9259\n9357\n4294958616\n4294957973\n4294959293\n9970\n1967\n1937\n4294963904\n4294965841\n2449\n994\n3443\n4294964437\n4294957880\n4294965021\n5605\n3330\n8935\n2265\n4294961200\n4294963465\n4294957369\n3538\n3611\n7149\n760\n4294957909\n4294958669\n9282\n655\n9937\n592\n4294960529\n4294961121\n4294964354\n8179\n5237\n3416\n4294958653\n4294962069\n3426\n8199\n1625\n4294959824\n4294961449\n4294963977\n8130\n4811\n2941\n4294957752\n4294960693\n1149\n4546\n5695\n241\n4294965936\n4294966177\n4294964817\n4294963698\n1219\n7621\n8840\n4294966461\n4294965301\n4294964466\n4294962471\n4294959641\n4294964816\n7161\n4681\n1842\n4294966523\n4294958365\n4294957592\n8661\n8957\n7618\n4294966575\n4294964193\n4294963472\n4294960369\n4294966545\n9618\n8867\n4294958485\n4294957352\n4294958541\n8597\n9842\n8439\n4294958281\n4294966720\n4294957705\n4294967129\n7538\n7371\n4294964909\n4294962280\n4294959893\n4294964877\n7474\n5055\n2529\n4294957584\n4294960113\n401\n3218\n3619\n6837\n456\n4294967293\n4294957749\n4294957746\n8199\n8649\n6848\n4294965497\n4294962345\n4294960546\n4294965595\n8845\n7144\n4294965989\n4294963133\n4294961826\n4294957663\n2193\n2560\n4753\n7313\n2066\n4294959379\n4294961445\n3528\n7677\n1205\n4294958882\n4294960087\n1673\n4464\n6137\n601\n4294966738\n4294957339\n4294966781\n6824\n6309\n3133\n4294959442\n4294962575\n4294964721\n0\n7425\n7425\n4294964850\n4294962275\n4294959829\n4294964808\n7341\n4853\n2194\n4294967047\n4294959241\n4294958992\n937\n2633\n3570\n6203\n9773\n4294965976\n4294965749\n4294964429\n4294962882\n4294960015\n4294965601\n8320\n6625\n4294964945\n4294961570\n4294959219\n3493\n5416\n8909\n4294964325\n4294963234\n4294960263\n4294966201\n9168\n8073\n4294967241\n4294965314\n4294965259\n4294963277\n4294961240\n4294967221\n1165\n1090\n2255\n3345\n4294965600\n4294958945\n4294967249\n8898\n8851\n4294957749\n4294966600\n4294967053\n4294966357\n4294966114\n4294965175\n4294963993\n1872\n8569\n441\n4294959010\n4294959451\n1165\n3320\n4485\n7805\n2290\n4294960095\n4294962385\n4294965184\n273\n8161\n8434\n4294966595\n4294965029\n4294964328\n4294962061\n4294959093\n4294963858\n5655\n2217\n7872\n89\n4294957961\n4294958050\n8715\n9469\n8184\n4294957653\n4294965837\n4294966194\n4294964735\n3633\n1072\n4294964705\n4294965777\n3186\n1667\n4294964853\n4294966520\n4294964077\n3301\n82\n3383\n3465\n4294966848\n4294960313\n4294959865\n2882\n5451\n8333\n4294963784\n4294962117\n4294958605\n3426\n4735\n8161\n2896\n4294961057\n4294963953\n4294957714\n4294964371\n4789\n1864\n6653\n8517\n4294965170\n4294963687\n4294961561\n4294957952\n2217\n2873\n5090\n7963\n3053\n4294961016\n4294964069\n4294957789\n4294964562\n5055\n2321\n7376\n9697\n4294967073\n4294966770\n4294966547\n4294966021\n4294965272\n4294963997\n4294961973\n4294958674\n3351\n4729\n8080\n2809\n4294960889\n4294963698\n4294967291\n4294963693\n4294963688\n85\n6477\n6562\n3039\n4294959601\n4294962640\n4294964945\n289\n7938\n8227\n4294966165\n4294964392\n4294963261\n4294960357\n4294966322\n9383\n8409\n4294957792\n4294966201\n4294966697\n4294965602\n4294965003\n3309\n1016\n4294964325\n4294965341\n2370\n415\n2785\n3200\n4294965985\n4294959185\n4294957874\n9763\n341\n104\n445\n549\n994\n1543\n2537\n4294964080\n4294966617\n3401\n2722\n4294966123\n4294958845\n4294957672\n9221\n9597\n8818\n4294958415\n4294967233\n4294958352\n4294958289\n9345\n338\n9683\n21\n4294959704\n4294959725\n2133\n4562\n6695\n1257\n4294957952\n4294959209\n9865\n1778\n1643\n3421\n4294965064\n4294958485\n4294966253\n7442\n6399\n4294963841\n4294960240\n4294966785\n9729\n9218\n4294958947\n4294958165\n4294959816\n685\n3205\n3890\n7095\n985\n4294958080\n4294959065\n9849\n1618\n1467\n3085\n4294964552\n4294957637\n4294964893\n5234\n2831\n8065\n896\n4294958961\n4294959857\n1522\n4083\n5605\n9688\n4294965293\n4294964981\n4294962978\n4294960663\n4294966345\n9712\n8761\n4294958473\n4294967234\n4294958411\n4294958349\n9464\n517\n9981\n498\n4294960479\n4294960977\n4294964160\n7841\n4705\n2546\n4294967251\n4294959797\n4294959752\n2253\n4709\n6962\n1671\n4294958633\n4294960304\n1641\n4649\n6290\n939\n4294967229\n4294958168\n4294958101\n8973\n9778\n8751\n4294958529\n4294967280\n4294958513\n4294958497\n9714\n915\n629\n1544\n2173\n4294963717\n4294965890\n2311\n905\n3216\n4294964121\n4294957337\n4294964162\n4203\n1069\n5272\n6341\n1613\n4294957954\n4294959567\n225\n2496\n2721\n5217\n7938\n3155\n4294961093\n4294964248\n4294958045\n4294964997\n5746\n3447\n9193\n2640\n4294961833\n4294964473\n4294959010\n4294966187\n7901\n6792\n4294964693\n4294961485\n4294958882\n3071\n4657\n7728\n2385\n4294960113\n4294962498\n4294965315\n517\n8536\n9053\n4294957589\n4294966642\n4294966935\n4294966281\n4294965920\n4294964905\n3529\n1138\n4294964667\n4294965805\n3176\n1685\n4294964861\n4294966546\n4294964111\n3361\n176\n3537\n4294963713\n4294967250\n4294963667\n3621\n9992\n3613\n4294963605\n4294967218\n4294963527\n4294963449\n4294959680\n4294965833\n8217\n6754\n4294964971\n4294961725\n4294959400\n4294963829\n5933\n2466\n8399\n865\n4294959264\n4294960129\n2097\n4930\n7027\n1957\n4294958984\n4294960941\n2629\n6274\n8903\n4294965177\n4294964080\n4294961961\n4294958745\n3410\n4859\n8269\n3128\n4294961397\n4294964525\n4294958626\n4294965855\n7185\n5744\n2929\n4294958673\n4294961602\n2979\n7285\n264\n4294957549\n4294957813\n8066\n8583\n6649\n4294965232\n4294961881\n4294959817\n4294964402\n6923\n4029\n952\n4294964981\n4294965933\n3618\n2255\n4294965873\n4294958128\n4294966705\n7537\n6946\n4294964483\n4294961429\n4294958616\n2749\n4069\n6818\n887\n4294957705\n4294958592\n9001\n297\n9298\n9595\n4294958893\n4294958488\n4294960085\n1277\n4066\n5343\n9409\n4294964752\n4294964161\n4294961617\n4294958482\n2803\n3989\n6792\n781\n4294957573\n4294958354\n8631\n9689\n8320\n4294958009\n4294966329\n4294967042\n4294966075\n4294965821\n4294964600\n3125\n429\n3554\n4294963983\n4294957537\n4294964224\n4465\n1393\n5858\n7251\n3109\n4294960360\n4294963469\n4294966533\n2706\n1943\n4294964649\n4294966592\n4294963945\n3241\n9890\n3131\n4294963021\n4294966152\n4294961877\n4294960733\n4294965314\n8751\n6769\n4294965520\n4294962289\n4294960513\n4294965506\n8723\n6933\n4294965656\n4294962589\n4294960949\n4294966242\n9895\n8841\n4294958736\n4294957577\n4294959017\n9298\n1019\n317\n1336\n1653\n2989\n4294964642\n4294957631\n4294964977\n5312\n2993\n8305\n1298\n4294959603\n4294960901\n3208\n6813\n21\n4294966834\n4294966855\n4294966393\n4294965952\n4294965049\n4294963705\n1458\n7867\n9325\n4294967192\n4294966517\n4294966413\n4294965634\n4294964751\n4294963089\n4294960544\n4294966337\n9585\n8626\n4294958211\n4294966837\n4294957752\n4294967293\n7749\n7746\n4294965495\n4294963241\n4294961440\n4294957385\n1529\n1618\n3147\n4765\n7912\n2677\n4294960589\n4294963266\n4294966559\n2529\n1792\n4294964321\n4294966113\n3138\n1955\n4294965093\n4294967048\n4294964845\n4294964597\n2146\n9447\n1593\n4294961040\n4294962633\n4294966377\n1714\n795\n2509\n3304\n4294965813\n4294959117\n4294957634\n9455\n9793\n9248\n4294959041\n4294958289\n4294960034\n1027\n3765\n4792\n8557\n3349\n4294961906\n4294965255\n4294959865\n4294957824\n393\n921\n1314\n2235\n3549\n5784\n9333\n4294965117\n4294964450\n4294962271\n4294959425\n4294964400\n6529\n3633\n162\n4294963795\n4294963957\n456\n7117\n7573\n4294964690\n4294962263\n4294959657\n4294964624\n6985\n4313\n1298\n4294965611\n4294966909\n4294965224\n4294964837\n2765\n306\n3071\n3377\n4294966448\n4294959825\n4294958977\n1506\n3187\n4693\n7880\n2573\n4294960453\n4294963026\n4294966183\n1913\n800\n2713\n3513\n4294966226\n4294959739\n4294958669\n1112\n2485\n3597\n6082\n9679\n4294965761\n4294965440\n4294963905\n4294962049\n4294958658\n3411\n4773\n8184\n2957\n4294961141\n4294964098\n4294957943\n4294964745\n5392\n2841\n8233\n1074\n4294959307\n4294960381\n2392\n5477\n7869\n3346\n4294961215\n4294964561\n4294958480\n4294965745\n6929\n5378\n2307\n4294957685\n4294959992\n381\n3077\n3458\n6535\n9993\n4294966528\n4294966521\n4294965753\n4294964978\n4294963435\n4294961117\n4294967256\n1077\n1037\n2114\n3151\n4294965265\n4294958416\n4294966385\n7505\n6594\n4294964099\n4294960693\n4294957496\n893\n1093\n1986\n3079\n5065\n8144\n3209\n4294961353\n4294964562\n4294958619\n4294965885\n7208\n5797\n3005\n4294958802\n4294961807\n3313\n7824\n1137\n4294958961\n4294960098\n1763\n4565\n6328\n893\n4294967221\n4294958114\n4294958039\n8857\n9600\n8457\n4294958057\n4294966514\n4294967275\n4294966493\n4294966472\n4294965669\n4294964845\n3218\n767\n4294963985\n4294964752\n1441\n8897\n338\n4294959235\n4294959573\n1512\n3789\n5301\n9090\n4294964391\n4294963481\n4294960576\n4294966761\n41\n9506\n9547\n4294959053\n4294958600\n4294960357\n1661\n4722\n6383\n1105\n4294957488\n4294958593\n8785\n82\n8867\n8949\n4294957816\n4294966765\n4294967285\n4294966754\n4294966743\n4294966201\n4294965648\n4294964553\n2905\n162\n3067\n3229\n4294966296\n4294959525\n4294958525\n754\n1983\n2737\n4720\n7457\n2177\n4294959634\n4294961811\n4294964149\n8664\n5517\n4294964181\n4294959698\n4294966583\n8985\n8272\n4294967257\n4294965529\n4294965490\n4294963723\n4294961917\n4294958344\n2965\n4013\n6978\n991\n4294957969\n4294958960\n9633\n1297\n930\n2227\n3157\n4294965384\n4294958541\n4294966629\n7874\n7207\n4294965081\n4294962288\n4294960073\n4294965065\n7842\n5611\n3453\n4294959064\n4294962517\n4294964285\n9506\n6495\n4294966001\n4294962496\n4294961201\n4294966401\n306\n9411\n9717\n4294959128\n4294958845\n4294960677\n2226\n5607\n7833\n3440\n4294961273\n4294964713\n4294958690\n4294966107\n7501\n6312\n4294963813\n4294960125\n4294966642\n9471\n8817\n4294958288\n4294967105\n4294958097\n4294957906\n8707\n9317\n8024\n4294957341\n4294965365\n4294965410\n3479\n1593\n4294965072\n4294966665\n4294964441\n4294963810\n955\n7469\n8424\n4294965893\n4294964317\n4294962914\n4294959935\n4294965553\n8192\n6449\n4294964641\n4294961090\n4294958435\n2229\n3368\n5597\n8965\n4294964562\n4294963527\n4294960793\n4294967024\n521\n249\n770\n1019\n1789\n2808\n4294964597\n4294957405\n4294964706\n4815\n2225\n7040\n9265\n4294966305\n4294965570\n4294964579\n4294962853\n4294960136\n4294965693\n8533\n6930\n4294965463\n4294962393\n4294960560\n4294965657\n8921\n7282\n4294966203\n4294963485\n4294962392\n4294958581\n4294963677\n4962\n1343\n6305\n7648\n4294963953\n4294961601\n4294958258\n2563\n3525\n6088\n9613\n4294965701\n4294965314\n4294963719\n4294961737\n4294958160\n2601\n3465\n6066\n9531\n4294965597\n4294965128\n4294963429\n4294961261\n4294957394\n1359\n1457\n2816\n4273\n7089\n1362\n4294958451\n4294959813\n968\n3485\n4453\n7938\n2391\n4294960329\n4294962720\n4294965753\n1177\n9634\n811\n4294960445\n4294961256\n4294964405\n8365\n5474\n4294963839\n4294959313\n4294965856\n7873\n6433\n4294964306\n4294960739\n4294957749\n1192\n1645\n2837\n4482\n7319\n1801\n4294959120\n4294960921\n2745\n6370\n9115\n4294965485\n4294964600\n4294962789\n4294960093\n4294965586\n8383\n6673\n4294965056\n4294961729\n4294959489\n4294963922\n6115\n2741\n8856\n1597\n4294960453\n4294962050\n4294965207\n9961\n7872\n4294957833\n4294965705\n4294966242\n4294964651\n3597\n952\n4294964549\n4294965501\n2754\n959\n4294963713\n4294964672\n1089\n8465\n9554\n4294958019\n4294957573\n4294958296\n8573\n9573\n8146\n4294957719\n4294965865\n4294966288\n4294964857\n4294963849\n1410\n7963\n9373\n4294957336\n4294966709\n4294966749\n4294966162\n4294965615\n4294964481\n2800\n9985\n2785\n4294962770\n4294965555\n4294961029\n4294959288\n3021\n5013\n8034\n3047\n4294961081\n4294964128\n4294957913\n4294964745\n5362\n2811\n8173\n984\n4294959157\n4294960141\n2002\n4847\n6849\n1696\n4294958545\n4294960241\n1490\n4435\n5925\n360\n4294966285\n4294966645\n4294965634\n4294964983\n3321\n1008\n4294964329\n4294965337\n2370\n411\n2781\n3192\n4294965973\n4294959165\n4294957842\n9711\n257\n9968\n225\n4294960193\n4294960418\n3315\n6437\n9752\n4294966189\n4294965941\n4294964834\n4294963479\n4294961017\n4294967200\n921\n825\n1746\n2571\n4294964317\n4294966888\n4294963909\n3501\n114\n3615\n4294963729\n4294957344\n4294963777\n3825\n306\n4131\n4437\n8568\n3005\n4294961573\n4294964578\n4294958855\n4294966137\n7696\n6537\n4294964233\n4294960770\n4294957707\n1181\n1592\n2773\n4365\n7138\n1503\n4294958641\n4294960144\n1489\n4337\n5826\n163\n4294965989\n4294966152\n4294964845\n4294963701\n1250\n7655\n8905\n4294966560\n4294965465\n4294964729\n4294962898\n4294960331\n4294965933\n8968\n7605\n4294966573\n4294964178\n4294963455\n4294960337\n4294966496\n9537\n8737\n4294958274\n4294967011\n4294957989\n4294957704\n8397\n8805\n7202\n4294966007\n4294963209\n4294961920\n4294957833\n2457\n2994\n5451\n8445\n4294963896\n4294962341\n4294958941\n4294963986\n5631\n2321\n7952\n273\n4294958225\n4294958498\n9427\n629\n56\n685\n741\n1426\n2167\n3593\n4294965760\n4294959353\n4294957817\n9874\n395\n269\n664\n933\n1597\n2530\n4294964127\n4294966657\n3488\n2849\n4294966337\n4294959186\n4294958227\n117\n1048\n1165\n2213\n3378\n5591\n8969\n4294964560\n4294963529\n4294960793\n4294967026\n523\n253\n776\n1029\n1805\n2834\n4294964639\n4294957473\n4294964816\n4993\n2513\n7506\n19\n4294957525\n4294957544\n7773\n8021\n5794\n4294963815\n4294959609\n4294966128\n8441\n7273\n4294965714\n4294962987\n4294961405\n4294967096\n1205\n1005\n2210\n3215\n4294965425\n4294958640\n4294966769\n8113\n7586\n4294965699\n4294963285\n4294961688\n4294957677\n2069\n2450\n4519\n6969\n1488\n4294958457\n4294959945\n1106\n3755\n4861\n8616\n3477\n4294962093\n4294965570\n4294960367\n4294958641\n1712\n3057\n4769\n7826\n2595\n4294960421\n4294963016\n4294966141\n1861\n706\n2567\n3273\n4294965840\n4294959113\n4294957657\n9474\n9835\n9309\n4294959144\n4294958453\n4294960301\n1458\n4463\n5921\n384\n4294966305\n4294966689\n4294965698\n4294965091\n3493\n1288\n4294964781\n4294966069\n3554\n2327\n4294965881\n4294958208\n4294966793\n7705\n7202\n4294964907\n4294962109\n4294959720\n4294964533\n6957\n4194\n1151\n4294965345\n4294966496\n4294964545\n4294963745\n994\n7443\n8437\n4294965880\n4294964317\n4294962901\n4294959922\n4294965527\n8153\n6384\n4294964537\n4294960921\n4294958162\n1787\n2653\n4440\n7093\n1533\n4294958626\n4294960159\n1489\n4352\n5841\n193\n4294966034\n4294966227\n4294964965\n4294963896\n1565\n8165\n9730\n4294957895\n4294957625\n4294958224\n8553\n9481\n8034\n4294957515\n4294965549\n4294965768\n4294964021\n2493\n9218\n1711\n4294960929\n4294962640\n4294966273\n1617\n594\n2211\n2805\n4294965016\n4294957821\n4294965541\n6066\n4311\n377\n4294964688\n4294965065\n2457\n226\n2683\n2909\n4294965592\n4294958501\n4294966797\n8002\n7503\n4294965505\n4294963008\n4294961217\n4294966929\n850\n483\n1333\n1816\n3149\n4294964965\n4294958114\n4294965783\n6601\n5088\n1689\n4294966777\n4294958466\n4294957947\n9117\n9768\n8885\n4294958653\n4294957538\n4294958895\n9137\n736\n9873\n609\n4294960482\n4294961091\n4294964277\n8072\n5053\n3125\n4294958178\n4294961303\n2185\n6192\n8377\n4294964569\n4294962946\n4294960219\n4294965869\n8792\n7365\n4294966157\n4294963522\n4294962383\n4294958609\n4294963696\n5009\n1409\n6418\n7827\n4294964245\n4294962072\n4294959021\n4294963797\n5522\n2023\n7545\n9568\n4294967113\n4294966681\n4294966498\n4294965883\n4294965085\n4294963672\n4294961461\n4294957837\n2002\n2543\n4545\n7088\n1633\n4294958721\n4294960354\n1779\n4837\n6616\n1453\n4294958069\n4294959522\n295\n2521\n2816\n5337\n8153\n3490\n4294961643\n4294965133\n4294959480\n4294957317\n9501\n9522\n9023\n4294958545\n4294957568\n4294958817\n9089\n610\n9699\n309\n4294960008\n4294960317\n3029\n6050\n9079\n4294965129\n4294964208\n4294962041\n4294958953\n4294963698\n5355\n1757\n7112\n8869\n4294965981\n4294964850\n4294963535\n4294961089\n4294957328\n1121\n1153\n2274\n3427\n5701\n9128\n4294964829\n4294963957\n4294961490\n4294958151\n2345\n3200\n5545\n8745\n4294964290\n4294963035\n4294960029\n4294965768\n8501\n6973\n4294965474\n4294962447\n4294960625\n4294965776\n9105\n7585\n4294966690\n4294964275\n4294963669\n4294960648\n4294967021\n373\n98\n471\n569\n1040\n1609\n2649\n4294964258\n4294966907\n4294963869\n3480\n53\n3533\n3586\n4294967119\n4294960705\n4294960528\n4294963937\n7169\n3810\n979\n4294964789\n4294965768\n3261\n1733\n4294964994\n4294966727\n4294964425\n4294963856\n985\n7545\n8530\n4294966075\n4294964605\n4294963384\n4294960693\n4294966781\n178\n9663\n9841\n4294959504\n4294959345\n4294961553\n3602\n7859\n1461\n4294959320\n4294960781\n2805\n6290\n9095\n4294965385\n4294964480\n4294962569\n4294959753\n4294965026\n7483\n5213\n2696\n4294957909\n4294960605\n1218\n4527\n5745\n272\n4294966017\n4294966289\n4294965010\n4294964003\n1717\n8424\n141\n4294958565\n4294958706\n9975\n1385\n1360\n2745\n4294964105\n4294966850\n4294963659\n3213\n9576\n2789\n4294962365\n4294965154\n4294960223\n4294958081\n1008\n1793\n2801\n4594\n7395\n1989\n4294959384\n4294961373\n3461\n7538\n999\n4294958537\n4294959536\n777\n3017\n3794\n6811\n605\n4294957416\n4294958021\n8141\n8866\n7007\n4294965873\n4294962880\n4294961457\n4294967041\n1202\n947\n2149\n3096\n4294965245\n4294958341\n4294966290\n7335\n6329\n4294963664\n4294959993\n4294966361\n9058\n8123\n4294967181\n4294965304\n4294965189\n4294963197\n4294961090\n4294966991\n785\n480\n1265\n1745\n3010\n4294964755\n4294957765\n4294965224\n5693\n3621\n9314\n2935\n4294962249\n4294965184\n4294960137\n4294958025\n866\n1595\n2461\n4056\n6517\n573\n4294967090\n4294957663\n4294957457\n7824\n7985\n5809\n4294963794\n4294959603\n4294966101\n8408\n7213\n4294965621\n4294962834\n4294961159\n4294966697\n560\n9961\n521\n4294960482\n4294961003\n4294964189\n7896\n4789\n2685\n4294957474\n4294960159\n337\n3200\n3537\n6737\n274\n4294967011\n4294967285\n4294967000\n4294966989\n4294966693\n4294966386\n4294965783\n4294964873\n3360\n937\n4294964297\n4294965234\n2235\n173\n2408\n2581\n4294964989\n4294957570\n4294965263\n5537\n3504\n9041\n2545\n4294961586\n4294964131\n4294958421\n4294965256\n6381\n4341\n722\n4294965063\n4294965785\n3552\n2041\n4294965593\n4294957634\n4294965931\n6269\n4904\n1173\n4294966077\n4294967250\n4294966031\n4294965985\n4294964720\n3409\n833\n4294964242\n4294965075\n2021\n9800\n1821\n4294961621\n4294963442\n4294957767\n4294963913\n4384\n1001\n5385\n6386\n1771\n4294958157\n4294959928\n789\n3421\n4210\n7631\n1841\n4294959472\n4294961313\n3489\n7506\n995\n4294958501\n4294959496\n701\n2901\n3602\n6503\n105\n4294966608\n4294966713\n4294966025\n4294965442\n4294964171\n2317\n9192\n1509\n4294960701\n4294962210\n4294965615\n529\n8848\n9377\n4294958225\n4294957602\n4294958531\n8837\n72\n8909\n8981\n4294957890\n4294966871\n4294957465\n4294967040\n7209\n6953\n4294964162\n4294961115\n4294957981\n1800\n2485\n4285\n6770\n1055\n4294957825\n4294958880\n9409\n993\n402\n1395\n1797\n3192\n4294964989\n4294958181\n4294965874\n6759\n5337\n2096\n4294957433\n4294959529\n9666\n1899\n1565\n3464\n4294965029\n4294958493\n4294966226\n7423\n6353\n4294963776\n4294960129\n4294966609\n9442\n8755\n4294958197\n4294966952\n4294957853\n4294957509\n8066\n8279\n6345\n4294964624\n4294960969\n4294958297\n1970\n2971\n4941\n7912\n2853\n4294960765\n4294963618\n4294967087\n3409\n3200\n4294966609\n4294959809\n4294959122\n1635\n3461\n5096\n8557\n4294963653\n4294962210\n4294958567\n3481\n4752\n8233\n2985\n4294961218\n4294964203\n4294958125\n4294965032\n5861\n3597\n9458\n3055\n4294962513\n4294965568\n4294960785\n4294959057\n2546\n4307\n6853\n1160\n4294958013\n4294959173\n9890\n1767\n1657\n3424\n4294965081\n4294958505\n4294966290\n7499\n6493\n4294963992\n4294960485\n4294967181\n370\n255\n625\n880\n1505\n2385\n4294963890\n4294966275\n2869\n1848\n4294964717\n4294966565\n4294963986\n3255\n9945\n3200\n4294963145\n4294966345\n4294962194\n4294961243\n4294966141\n88\n8933\n9021\n4294957954\n4294966975\n4294957633\n4294957312\n7649\n7665\n5314\n2979\n4294958293\n4294961272\n2269\n6245\n8514\n4294964759\n4294963273\n4294960736\n4294966713\n153\n9570\n9723\n4294959293\n4294959016\n4294961013\n2733\n6450\n9183\n4294965633\n4294964816\n4294963153\n4294960673\n4294966530\n9907\n9141\n4294959048\n4294958189\n4294959941\n834\n3479\n4313\n7792\n2105\n4294959897\n4294962002\n4294964603\n9309\n6616\n4294965925\n4294962541\n4294961170\n4294966415\n289\n9408\n9697\n4294959105\n4294958802\n4294960611\n2117\n5432\n7549\n2981\n4294960530\n4294963511\n4294966745\n2960\n2409\n4294965369\n4294957778\n4294965851\n6333\n4888\n1221\n4294966109\n4294957330\n4294966143\n6177\n5024\n1201\n4294966225\n4294957426\n4294966355\n6485\n5544\n2029\n4294957573\n4294959602\n9879\n2185\n2064\n4294964249\n4294966313\n3266\n2283\n4294965549\n4294957832\n4294966085\n6621\n5410\n2031\n4294957441\n4294959472\n9617\n1793\n1410\n3203\n4294964613\n4294957816\n4294965133\n5653\n3490\n9143\n2633\n4294961776\n4294964409\n4294958889\n4294966002\n7595\n6301\n4294963896\n4294960197\n4294966797\n9698\n9199\n4294958897\n4294958096\n4294959697\n497\n2898\n3395\n6293\n9688\n4294965981\n4294965669\n4294964354\n4294962727\n4294959785\n4294965216\n7705\n5625\n3330\n4294958955\n4294962285\n4294963944\n8933\n5581\n4294964514\n4294960095\n4294957313\n112\n129\n241\n370\n611\n981\n1592\n2573\n4165\n6738\n903\n4294957641\n4294958544\n8889\n137\n9026\n9163\n4294958189\n4294957352\n4294958245\n8301\n9250\n7551\n4294966801\n4294964352\n4294963857\n4294960913\n4294957474\n1091\n1269\n2360\n3629\n5989\n9618\n4294965607\n4294965225\n4294963536\n4294961465\n4294957705\n1874\n2283\n4157\n6440\n597\n4294967037\n4294957634\n4294957375\n7713\n7792\n5505\n3297\n4294958802\n4294962099\n3605\n8408\n2013\n4294960421\n4294962434\n4294965559\n697\n8960\n9657\n4294958617\n4294958274\n4294959595\n573\n2872\n3445\n6317\n9762\n4294966079\n4294965841\n4294964624\n4294963169\n4294960497\n4294966370\n9571\n8645\n4294958216\n4294966861\n4294957781\n4294957346\n7831\n7881\n5712\n3593\n4294959305\n4294962898\n4294964907\n509\n8120\n8629\n4294966749\n4294965378\n4294964831\n4294962913\n4294960448\n4294966065\n9217\n7986\n4294967203\n4294965189\n4294965096\n4294962989\n4294960789\n4294966482\n9975\n9161\n4294959136\n4294958297\n4294960137\n1138\n3979\n5117\n9096\n4294964213\n4294963309\n4294960226\n4294966239\n9169\n8112\n4294967281\n4294965393\n4294965378\n4294963475\n4294961557\n4294957736\n1997\n2437\n4434\n6871\n1305\n4294958176\n4294959481\n361\n2546\n2907\n5453\n8360\n4294963813\n4294962173\n4294958690\n3567\n4961\n8528\n3489\n4294962017\n4294965506\n4294960227\n4294958437\n1368\n2509\n3877\n6386\n263\n4294966649\n4294966912\n4294966265\n4294965881\n4294964850\n3435\n989\n4294964424\n4294965413\n2541\n658\n3199\n4294963857\n4294967056\n3617\n3377\n4294966994\n4294960371\n4294960069\n3144\n5917\n9061\n4294964978\n4294964039\n4294961721\n4294958464\n2889\n4057\n6946\n1003\n4294957949\n4294958952\n9605\n1261\n866\n2127\n2993\n4294965120\n4294958113\n4294965937\n6754\n5395\n2149\n4294957544\n4294959693\n9941\n2338\n2279\n4294964617\n4294966896\n4294964217\n4294963817\n738\n7259\n7997\n4294965256\n4294963253\n4294961213\n4294967170\n1087\n961\n2048\n3009\n4294965057\n4294958066\n4294965827\n6597\n5128\n1725\n4294966853\n4294958578\n4294958135\n9417\n256\n9673\n9929\n4294959602\n4294959531\n4294961837\n4294964072\n8613\n5389\n4294964002\n4294959391\n4294966097\n8192\n6993\n4294965185\n4294962178\n4294960067\n4294964949\n7720\n5373\n3093\n4294958466\n4294961559\n2729\n6992\n9721\n4294966713\n4294966434\n4294965851\n4294964989\n4294963544\n4294961237\n4294957485\n1426\n1615\n3041\n4656\n7697\n2353\n4294960050\n4294962403\n4294965157\n264\n8125\n8389\n4294966514\n4294964903\n4294964121\n4294961728\n4294958553\n2985\n4242\n7227\n1469\n4294958696\n4294960165\n1565\n4434\n5999\n433\n4294966432\n4294966865\n4294966001\n4294965570\n4294964275\n2549\n9528\n2077\n4294961605\n4294963682\n4294957991\n4294964377\n5072\n2153\n7225\n9378\n4294966603\n4294965981\n4294965288\n4294963973\n4294961965\n4294958642\n3311\n4657\n7968\n2625\n4294960593\n4294963218\n4294966515\n2437\n1656\n4294964093\n4294965749\n2546\n999\n3545\n4294964544\n4294958089\n4294965337\n6130\n4171\n301\n4294964472\n4294964773\n1949\n9426\n1375\n4294960801\n4294962176\n4294965681\n561\n8946\n9507\n4294958453\n4294957960\n4294959117\n9781\n1602\n1383\n2985\n4294964368\n4294957353\n4294964425\n4482\n1611\n6093\n7704\n4294963797\n4294961501\n4294958002\n2207\n2913\n5120\n8033\n3153\n4294961186\n4294964339\n4294958229\n4294965272\n6205\n4181\n386\n4294964567\n4294964953\n2224\n9881\n2105\n4294961986\n4294964091\n4294958781\n4294965576\n7061\n5341\n2402\n4294957743\n4294960145\n592\n3441\n4033\n7474\n1507\n4294958981\n4294960488\n2173\n5365\n7538\n2903\n4294960441\n4294963344\n4294966489\n2537\n1730\n4294964267\n4294965997\n2968\n1669\n4294964637\n4294966306\n3647\n2657\n4294966304\n4294958961\n4294957969\n9634\n307\n9941\n248\n4294960189\n4294960437\n3330\n6471\n9801\n4294966272\n4294966073\n4294965049\n4294963826\n4294961579\n4294958109\n2392\n3205\n5597\n8802\n4294964399\n4294963201\n4294960304\n4294966209\n9217\n8130\n4294957347\n4294965477\n4294965528\n4294963709\n1941\n8354\n295\n4294958649\n4294958944\n297\n1945\n2242\n4187\n6429\n616\n4294967045\n4294957661\n4294957410\n7775\n7889\n5664\n3553\n4294959217\n4294962770\n4294964691\n165\n7560\n7725\n4294965285\n4294963010\n4294960999\n4294966713\n416\n9833\n249\n4294960082\n4294960331\n3117\n6152\n9269\n4294965421\n4294964690\n4294962815\n4294960209\n4294965728\n8641\n7073\n4294965714\n4294962787\n4294961205\n4294966696\n605\n5\n610\n615\n1225\n1840\n3065\n4294964905\n4294957970\n4294965579\n6253\n4536\n789\n4294965325\n4294966114\n4294964143\n2961\n9808\n2769\n4294962577\n4294965346\n4294960627\n4294958677\n2008\n3389\n5397\n8786\n4294964183\n4294962969\n4294959856\n4294965529\n8089\n6322\n4294964411\n4294960733\n4294957848\n1285\n1837\n3122\n4959\n8081\n3040\n4294961121\n4294964161\n4294957986\n4294964851\n5541\n3096\n8637\n1733\n4294960370\n4294962103\n4294965177\n9984\n7865\n4294957849\n4294965714\n4294966267\n4294964685\n4294963656\n1045\n7405\n8450\n4294965855\n4294964305\n4294962864\n4294959873\n4294965441\n8018\n6163\n4294964181\n4294960344\n4294967229\n277\n210\n487\n697\n1184\n1881\n3065\n4294964946\n4294958011\n4294965661\n6376\n4741\n1117\n4294965858\n4294966975\n4294965537\n4294965216\n3457\n1377\n4294964834\n4294966211\n4294963749\n2664\n9117\n1781\n4294960898\n4294962679\n4294966281\n1664\n649\n2313\n2962\n4294965275\n4294958237\n4294966216\n7157\n6077\n3234\n4294959311\n4294962545\n4294964560\n9809\n7073\n4294966882\n4294963955\n4294963541\n4294960200\n4294966445\n9349\n8498\n4294957847\n4294966345\n4294966896\n4294965945\n4294965545\n4294964194\n2443\n9341\n1784\n4294961125\n4294962909\n4294966738\n2351\n1793\n4294964144\n4294965937\n2785\n1426\n4294964211\n4294965637\n2552\n893\n3445\n4294964338\n4294957783\n4294964825\n5312\n2841\n8153\n994\n4294959147\n4294960141\n1992\n4837\n6829\n1666\n4294958495\n4294960161\n1360\n4225\n5585\n9810\n4294965395\n4294965205\n4294963304\n4294961213\n4294967221\n1138\n1063\n2201\n3264\n4294965465\n4294958729\n4294966898\n8331\n7933\n4294966264\n4294964197\n4294963165\n4294960066\n4294965935\n8705\n7344\n4294966049\n4294963393\n4294962146\n4294958243\n3093\n4040\n7133\n1173\n4294958306\n4294959479\n489\n2672\n3161\n5833\n8994\n4294964827\n4294963821\n4294961352\n4294957877\n1933\n2514\n4447\n6961\n1408\n4294958369\n4294959777\n850\n3331\n4181\n7512\n1693\n4294959205\n4294960898\n2807\n6409\n9216\n4294965625\n4294964841\n4294963170\n4294960715\n4294966589\n8\n9301\n9309\n4294958610\n4294957919\n4294959233\n9856\n1793\n1649\n3442\n4294965091\n4294958533\n4294966328\n7565\n6597\n4294964162\n4294960759\n4294957625\n1088\n1417\n2505\n3922\n6427\n349\n4294966776\n4294967125\n4294966605\n4294966434\n4294965743\n4294964881\n3328\n913\n4294964241\n4294965154\n2099\n9957\n2056\n4294962013\n4294964069\n4294958786\n4294965559\n7049\n5312\n2361\n4294957673\n4294960034\n411\n3149\n3560\n6709\n269\n4294966978\n4294967247\n4294966929\n4294966880\n4294966513\n4294966097\n4294965314\n4294964115\n2133\n8952\n1085\n4294960037\n4294961122\n4294963863\n7689\n4256\n1945\n4294966201\n4294958146\n4294967051\n7901\n7656\n4294965557\n4294963213\n4294961474\n4294957391\n1569\n1664\n3233\n4897\n8130\n3027\n4294961157\n4294964184\n4294958045\n4294964933\n5682\n3319\n9001\n2320\n4294961321\n4294963641\n4294957666\n4294964011\n4381\n1096\n5477\n6573\n2050\n4294958623\n4294960673\n2000\n5377\n7377\n2754\n4294960131\n4294962885\n4294965720\n1309\n9733\n1042\n4294960775\n4294961817\n4294965296\n9817\n7817\n4294957634\n4294965451\n4294965789\n4294963944\n2437\n9085\n1522\n4294960607\n4294962129\n4294965440\n273\n8417\n8690\n4294967107\n4294965797\n4294965608\n4294964109\n4294962421\n4294959234\n4294964359\n6297\n3360\n9657\n3017\n4294962674\n4294965691\n4294961069\n4294959464\n3237\n5405\n8642\n4294964047\n4294962689\n4294959440\n4294964833\n6977\n4514\n1491\n4294966005\n4294957496\n4294966205\n6405\n5314\n1719\n4294967033\n4294958752\n4294958489\n9945\n1138\n1083\n2221\n3304\n4294965525\n4294958829\n4294967058\n8591\n8353\n4294966944\n4294965297\n4294964945\n4294962946\n4294960595\n4294966245\n9544\n8493\n4294958037\n4294966530\n4294967271\n4294966505\n4294966480\n4294965689\n4294964873\n3266\n843\n4294964109\n4294964952\n1765\n9421\n1186\n4294960607\n4294961793\n4294965104\n9601\n7409\n4294967010\n4294964419\n4294964133\n4294961256\n4294958093\n2053\n2850\n4903\n7753\n2656\n4294960409\n4294963065\n4294966178\n1947\n829\n2776\n3605\n4294966381\n4294959986\n4294959071\n1761\n3536\n5297\n8833\n4294964130\n4294962963\n4294959797\n4294965464\n7965\n6133\n4294964098\n4294960231\n4294967033\n9968\n9705\n4294959673\n4294959378\n4294961755\n4294963837\n8296\n4837\n3133\n4294957970\n4294961103\n1777\n5584\n7361\n2945\n4294960306\n4294963251\n4294966261\n2216\n1181\n3397\n4294964578\n4294957975\n4294965257\n5936\n3897\n9833\n4294963730\n4294963563\n4294959997\n4294966264\n8965\n7933\n4294966898\n4294964831\n4294964433\n4294961968\n4294959105\n4294963777\n5586\n2067\n7653\n9720\n4294957373\n4294967093\n4294967170\n4294966967\n4294966841\n4294966512\n4294966057\n4294965273\n4294964034\n2011\n8749\n760\n4294959509\n4294960269\n2482\n5455\n7937\n3392\n4294961329\n4294964721\n4294958754\n4294966179\n7637\n6520\n4294964157\n4294960677\n4294957538\n919\n1161\n2080\n3241\n5321\n8562\n4294963883\n4294962445\n4294959032\n4294964181\n5917\n2802\n8719\n1521\n4294960240\n4294961761\n4294964705\n9170\n6579\n4294965749\n4294962328\n4294960781\n4294965813\n9298\n7815\n4294967113\n4294964928\n4294964745\n4294962377\n4294959826\n4294964907\n7437\n5048\n2485\n4294957533\n4294960018\n255\n2977\n3232\n6209\n9441\n4294965650\n4294965091\n4294963445\n4294961240\n4294957389\n1333\n1426\n2759\n4185\n6944\n1129\n4294958073\n4294959202\n9979\n1885\n1864\n4294963749\n4294965613\n2066\n383\n2449\n2832\n4294965281\n4294958113\n4294966098\n6915\n5717\n2632\n4294958349\n4294960981\n2034\n5719\n7753\n3472\n4294961225\n4294964697\n4294958626\n4294966027\n7357\n6088\n3445\n4294959533\n4294962978\n4294965215\n897\n8816\n9713\n4294958529\n4294958242\n4294959475\n421\n2600\n3021\n5621\n8642\n4294964263\n4294962905\n4294959872\n4294965481\n8057\n6242\n4294964299\n4294960541\n4294957544\n789\n1037\n1826\n2863\n4689\n7552\n2241\n4294959793\n4294962034\n4294964531\n9269\n6504\n4294965773\n4294962277\n4294960754\n4294965735\n9193\n7632\n4294966825\n4294964457\n4294963986\n4294961147\n4294957837\n1688\n2229\n3917\n6146\n63\n4294966209\n4294966272\n4294965185\n4294964161\n2050\n8915\n965\n4294959880\n4294960845\n3429\n6978\n407\n4294957385\n4294957792\n7881\n8377\n6258\n4294964635\n4294960893\n4294958232\n1829\n2765\n4594\n7359\n1953\n4294959312\n4294961265\n3281\n7250\n531\n4294957781\n4294958312\n8797\n9813\n8610\n4294958423\n4294967033\n4294958160\n4294957897\n8761\n9362\n8123\n4294957485\n4294965608\n4294965797\n4294964109\n2610\n9423\n2033\n4294961456\n4294963489\n4294957649\n4294963842\n4195\n741\n4936\n5677\n613\n4294966290\n4294966903\n4294965897\n4294965504\n4294964105\n2313\n9122\n1435\n4294960557\n4294961992\n4294965253\n9949\n7906\n4294957855\n4294965761\n4294966320\n4294964785\n4294963809\n1298\n7811\n9109\n4294966920\n4294966029\n4294965653\n4294964386\n4294962743\n4294959833\n4294965280\n7817\n5801\n3618\n4294959419\n4294963037\n4294965160\n901\n8765\n9666\n4294958431\n4294958097\n4294959232\n33\n1969\n2002\n3971\n5973\n9944\n4294965917\n4294965861\n4294964482\n4294963047\n4294960233\n4294965984\n8921\n7609\n4294966530\n4294964139\n4294963373\n4294960216\n4294966293\n9213\n8210\n4294957423\n4294965633\n4294965760\n4294964097\n2561\n9362\n1923\n4294961285\n4294963208\n4294967197\n3109\n3010\n4294966119\n4294959129\n4294957952\n9785\n441\n226\n667\n893\n1560\n2453\n4294964013\n4294966466\n3183\n2353\n4294965536\n4294957889\n4294966129\n6722\n5555\n2277\n4294957832\n4294960109\n645\n3458\n4103\n7561\n1664\n4294959225\n4294960889\n2818\n6411\n9229\n4294965640\n4294964869\n4294963213\n4294960786\n4294966703\n193\n9600\n9793\n4294959393\n4294959186\n4294961283\n3173\n7160\n333\n4294957493\n4294957826\n8023\n8553\n6576\n4294965129\n4294961705\n4294959538\n4294963947\n6189\n2840\n9029\n1869\n4294960898\n4294962767\n4294966369\n1840\n913\n2753\n4294963666\n4294966419\n2789\n1912\n4294964701\n4294966613\n4294964018\n3335\n57\n3392\n3449\n4294966841\n4294960290\n4294959835\n2829\n5368\n8197\n3565\n4294961762\n4294965327\n4294959793\n4294957824\n321\n849\n1170\n2019\n3189\n5208\n8397\n3605\n4294962002\n4294965607\n4294960313\n4294958624\n1641\n2969\n4610\n7579\n2189\n4294959768\n4294961957\n4294964429\n9090\n6223\n4294965313\n4294961536\n4294959553\n4294963793\n6050\n2547\n8597\n1144\n4294959741\n4294960885\n3330\n6919\n249\n4294967168\n4294957417\n4294967289\n7410\n7403\n4294964813\n4294962216\n4294959733\n4294964653\n7090\n4447\n1537\n4294965984\n4294957521\n4294966209\n6434\n5347\n1781\n4294967128\n4294958909\n4294958741\n354\n1799\n2153\n3952\n6105\n57\n4294966162\n4294966219\n4294965085\n4294964008\n1797\n8509\n306\n4294958815\n4294959121\n640\n2465\n3105\n5570\n8675\n4294964245\n4294962920\n4294959869\n4294965493\n8066\n6263\n4294964329\n4294960592\n4294957625\n921\n1250\n2171\n3421\n5592\n9013\n4294964605\n4294963618\n4294960927\n4294967249\n880\n833\n1713\n2546\n4294964259\n4294966805\n4294963768\n3277\n9749\n3026\n4294962775\n4294965801\n4294961280\n4294959785\n4294963769\n6258\n2731\n8989\n1720\n4294960709\n4294962429\n4294965842\n975\n9521\n496\n4294960017\n4294960513\n3234\n6451\n9685\n4294966136\n4294965821\n4294964661\n4294963186\n4294960551\n4294966441\n9696\n8841\n4294958537\n4294957378\n4294958619\n8701\n24\n8725\n8749\n4294957474\n4294966223\n4294966401\n4294965328\n4294964433\n2465\n9602\n2067\n4294961669\n4294963736\n4294958109\n4294964549\n5362\n2615\n7977\n592\n4294958569\n4294959161\n434\n2299\n2733\n5032\n7765\n2797\n4294960562\n4294963359\n4294966625\n2688\n2017\n4294964705\n4294966722\n4294964131\n3557\n392\n4294963949\n4294964341\n994\n8039\n9033\n4294967072\n4294966105\n4294965881\n4294964690\n4294963275\n4294960669\n4294966648\n21\n9373\n9394\n4294958767\n4294958161\n4294959632\n497\n2833\n3330\n6163\n9493\n4294965656\n4294965149\n4294963509\n4294961362\n4294957575\n1641\n1920\n3561\n5481\n9042\n4294964523\n4294963565\n4294960792\n4294967061\n557\n322\n879\n1201\n2080\n3281\n4294965361\n4294958642\n4294966707\n8053\n7464\n4294965517\n4294962981\n4294961202\n4294966887\n793\n384\n1177\n1561\n2738\n4294964299\n4294967037\n4294964040\n4294963781\n525\n7010\n7535\n4294964545\n4294962080\n4294959329\n4294964113\n6146\n2963\n9109\n2072\n4294961181\n4294963253\n4294967138\n3095\n2937\n4294966032\n4294958969\n4294957705\n9378\n9787\n9165\n4294958952\n4294958117\n4294959773\n594\n3071\n3665\n6736\n401\n4294967137\n4294957538\n4294957379\n7621\n7704\n5325\n3029\n4294958354\n4294961383\n2441\n6528\n8969\n4294965497\n4294964466\n4294962667\n4294959837\n4294965208\n7749\n5661\n3410\n4294959071\n4294962481\n4294964256\n9441\n6401\n4294965842\n4294962243\n4294960789\n4294965736\n9229\n7669\n4294966898\n4294964567\n4294964169\n4294961440\n4294958313\n2457\n3474\n5931\n9405\n4294965336\n4294964741\n4294962781\n4294960226\n4294965711\n8641\n7056\n4294965697\n4294962753\n4294961154\n4294966611\n469\n9784\n253\n4294960037\n4294960290\n3031\n6025\n9056\n4294965081\n4294964137\n4294961922\n4294958763\n3389\n4856\n8245\n3101\n4294961346\n4294964447\n4294958497\n4294965648\n6849\n5201\n2050\n4294967251\n4294959301\n4294959256\n1261\n3221\n4482\n7703\n2185\n4294959888\n4294962073\n4294964665\n9442\n6811\n4294966253\n4294963064\n4294962021\n4294957789\n2514\n3007\n5521\n8528\n4294964049\n4294962577\n4294959330\n4294964611\n6645\n3960\n605\n4294964565\n4294965170\n2439\n313\n2752\n3065\n4294965817\n4294958882\n4294957403\n8989\n9096\n8085\n4294967181\n4294965266\n4294965151\n4294963121\n4294960976\n4294966801\n481\n9986\n467\n4294960453\n4294960920\n4294964077\n7701\n4482\n2183\n4294966665\n4294958848\n4294958217\n9769\n690\n459\n1149\n1608\n2757\n4294964365\n4294967122\n4294964191\n4294964017\n912\n7633\n8545\n4294966178\n4294964723\n4294963605\n4294961032\n4294957341\n1077\n1122\n2199\n3321\n5520\n8841\n4294964361\n4294963202\n4294960267\n4294966173\n9144\n8021\n4294967165\n4294965186\n4294965055\n4294962945\n4294960704\n4294966353\n9761\n8818\n4294958579\n4294957397\n4294958680\n8781\n165\n8946\n9111\n4294958057\n4294967168\n4294957929\n4294957801\n8434\n8939\n7373\n4294966312\n4294963685\n4294962701\n4294959090\n4294964495\n6289\n3488\n9777\n3265\n4294963042\n4294966307\n4294962053\n4294961064\n4294965821\n9589\n8114\n4294957703\n4294965817\n4294966224\n4294964745\n4294963673\n1122\n7499\n8621\n4294966120\n4294964741\n4294963565\n4294961010\n4294967279\n993\n976\n1969\n2945\n4294964914\n4294957859\n4294965477\n6040\n4221\n261\n4294964482\n4294964743\n1929\n9376\n1305\n4294960681\n4294961986\n4294965371\n61\n8136\n8197\n4294966333\n4294964530\n4294963567\n4294960801\n4294967072\n577\n353\n930\n1283\n2213\n3496\n4294965709\n4294959205\n4294957618\n9527\n9849\n9376\n4294959225\n4294958601\n4294960530\n1835\n5069\n6904\n1973\n4294958877\n4294960850\n2431\n5985\n8416\n4294964401\n4294962817\n4294959922\n4294965443\n8069\n6216\n4294964285\n4294960501\n4294957490\n695\n889\n1584\n2473\n4057\n6530\n587\n4294967117\n4294957704\n4294957525\n7933\n8162\n6095\n4294964257\n4294960352\n4294957313\n369\n386\n755\n1141\n1896\n3037\n4933\n7970\n2903\n4294960873\n4294963776\n4294957353\n4294963833\n3890\n427\n4317\n4744\n9061\n4294963805\n4294962866\n4294959375\n4294964945\n7024\n4673\n1697\n4294966370\n4294958067\n4294967141\n7912\n7757\n4294965669\n4294963426\n4294961799\n4294957929\n2432\n3065\n5497\n8562\n4294964059\n4294962621\n4294959384\n4294964709\n6797\n4210\n1007\n4294965217\n4294966224\n4294964145\n3073\n9922\n2995\n4294962917\n4294965912\n4294961533\n4294960149\n4294964386\n7239\n4329\n1568\n4294965897\n4294957465\n4294966066\n6235\n5005\n1240\n4294966245\n4294957485\n4294966434\n6623\n5761\n2384\n4294958145\n4294960529\n1378\n4611\n5989\n600\n4294966589\n4294967189\n4294966482\n4294966375\n4294965561\n4294964640\n2905\n249\n3154\n3403\n4294966557\n4294959960\n4294959221\n1885\n3810\n5695\n9505\n4294965200\n4294964705\n4294962609\n4294960018\n4294965331\n8053\n6088\n4294964141\n4294960229\n4294967074\n7\n9785\n9792\n4294959577\n4294959369\n4294961650\n4294963723\n8077\n4504\n2581\n4294967085\n4294959666\n4294959455\n1825\n3984\n5809\n9793\n4294965602\n4294965395\n4294963701\n4294961800\n4294958205\n2709\n3618\n6327\n9945\n4294966272\n4294966217\n4294965193\n4294964114\n4294962011\n4294958829\n3544\n5077\n8621\n4294963698\n4294962319\n4294958721\n4294963744\n5169\n1617\n6786\n8403\n4294965189\n4294963592\n4294961485\n4294957781\n1970\n2455\n4425\n6880\n1305\n4294958185\n4294959490\n379\n2573\n2952\n5525\n8477\n4294964002\n4294962479\n4294959185\n4294964368\n6257\n3329\n9586\n2915\n4294962501\n4294965416\n4294960621\n4294958741\n2066\n3511\n5577\n9088\n4294964665\n4294963753\n4294961122\n4294957579\n1405\n1688\n3093\n4781\n7874\n2655\n4294960529\n4294963184\n4294966417\n2305\n1426\n4294963731\n4294965157\n1592\n9453\n1045\n4294960498\n4294961543\n4294964745\n8992\n6441\n4294965433\n4294961874\n4294960011\n4294964589\n7304\n4597\n1901\n4294966498\n4294958399\n4294957601\n8704\n9009\n7713\n4294966722\n4294964435\n4294963861\n4294961000\n4294957565\n1269\n1538\n2807\n4345\n7152\n1497\n4294958649\n4294960146\n1499\n4349\n5848\n197\n4294966045\n4294966242\n4294964991\n4294963937\n1632\n8273\n9905\n4294958178\n4294958083\n4294958965\n9752\n1421\n1173\n2594\n4294963767\n4294966361\n2832\n1897\n4294964729\n4294966626\n4294964059\n3389\n152\n3541\n4294963693\n4294967234\n3631\n3569\n4294967200\n4294960769\n4294960673\n4294964146\n7523\n4373\n1896\n4294966269\n4294958165\n4294967138\n8007\n7849\n4294965856\n4294963705\n4294962265\n4294958674\n3643\n5021\n8664\n4294963685\n4294962349\n4294958738\n4294963791\n5233\n1728\n6961\n8689\n4294965650\n4294964339\n4294962693\n4294959736\n4294965133\n7573\n5410\n2983\n4294958393\n4294961376\n2473\n6553\n9026\n4294965579\n4294964605\n4294962888\n4294960197\n4294965789\n8690\n7183\n4294965873\n4294963056\n4294961633\n4294957393\n1730\n1827\n3557\n5384\n8941\n4294964325\n4294963266\n4294960295\n4294966265\n9264\n8233\n4294957497\n4294965730\n4294965931\n4294964365\n3000\n69\n3069\n3138\n4294966207\n4294959345\n4294958256\n305\n1265\n1570\n2835\n4405\n7240\n1645\n4294958885\n4294960530\n2119\n5353\n7472\n2825\n4294960297\n4294963122\n4294966123\n1949\n776\n2725\n3501\n4294966226\n4294959727\n4294958657\n1088\n2449\n3537\n5986\n9523\n4294965509\n4294965032\n4294963245\n4294960981\n4294966930\n615\n249\n864\n1113\n1977\n3090\n4294965067\n4294958157\n4294965928\n6789\n5421\n2210\n4294957631\n4294959841\n176\n2721\n2897\n5618\n8515\n4294964133\n4294962648\n4294959485\n4294964837\n7026\n4567\n1593\n4294966160\n4294957753\n4294966617\n7074\n6395\n3469\n4294959864\n4294963333\n4294965901\n1938\n543\n2481\n3024\n4294965505\n4294958529\n4294966738\n7971\n7413\n4294965384\n4294962797\n4294960885\n4294966386\n9975\n9065\n4294959040\n4294958105\n4294959849\n658\n3211\n3869\n7080\n949\n4294958029\n4294958978\n9711\n1393\n1104\n2497\n3601\n4294966098\n4294959699\n4294958501\n904\n2109\n3013\n5122\n8135\n3257\n4294961392\n4294964649\n4294958745\n4294966098\n7547\n6349\n4294963896\n4294960245\n4294966845\n9794\n9343\n4294959137\n4294958480\n4294960321\n1505\n4530\n6035\n565\n4294966600\n4294967165\n4294966469\n4294966338\n4294965511\n4294964553\n2768\n25\n2793\n2818\n4294965611\n4294958429\n4294966744\n7877\n7325\n4294965202\n4294962527\n4294960433\n4294965664\n8801\n7169\n4294965970\n4294963139\n4294961813\n4294957656\n2173\n2533\n4706\n7239\n1945\n4294959184\n4294961129\n3017\n6850\n9867\n4294966717\n4294966584\n4294966005\n4294965293\n4294964002\n4294961999\n4294958705\n3408\n4817\n8225\n3042\n4294961267\n4294964309\n4294958280\n4294965293\n6277\n4274\n551\n4294964825\n4294965376\n2905\n985\n4294963890\n4294964875\n1469\n9048\n517\n4294959565\n4294960082\n2351\n5137\n7488\n2625\n4294960113\n4294962738\n4294965555\n997\n9256\n253\n4294959509\n4294959762\n1975\n4441\n6416\n857\n4294967273\n4294958130\n4294958107\n8941\n9752\n8693\n4294958445\n4294967138\n4294958287\n4294958129\n9120\n9953\n9073\n4294959026\n4294958099\n4294959829\n632\n3165\n3797\n6962\n759\n4294957721\n4294958480\n8905\n89\n8994\n9083\n4294958077\n4294967160\n4294957941\n4294957805\n8450\n8959\n7409\n4294966368\n4294963777\n4294962849\n4294959330\n4294964883\n6917\n4504\n1421\n4294965925\n4294957346\n4294965975\n6025\n4704\n729\n4294965433\n4294966162\n4294964299\n3165\n168\n3333\n3501\n4294966834\n4294960335\n4294959873\n2912\n5489\n8401\n4294963890\n4294962291\n4294958885\n4294963880\n5469\n2053\n7522\n9575\n4294967097\n4294966672\n4294966473\n4294965849\n4294965026\n4294963579\n4294961309\n4294957592\n1605\n1901\n3506\n5407\n8913\n4294964320\n4294963233\n4294960257\n4294966194\n9155\n8053\n4294967208\n4294965261\n4294965173\n4294963138\n4294961015\n4294966857\n576\n137\n713\n850\n1563\n2413\n4294963976\n4294966389\n3069\n2162\n4294965231\n4294957393\n4294965328\n5425\n3457\n8882\n2339\n4294961221\n4294963560\n4294957485\n4294963749\n3938\n391\n4329\n4720\n9049\n4294963769\n4294962818\n4294959291\n4294964813\n6808\n4325\n1133\n4294965458\n4294966591\n4294964753\n4294964048\n1505\n8257\n9762\n4294958019\n4294957781\n4294958504\n8989\n197\n9186\n9383\n4294958569\n4294957952\n4294959225\n9881\n1810\n1691\n3501\n4294965192\n4294958693\n4294966589\n7986\n7279\n4294965265\n4294962544\n4294960513\n4294965761\n8978\n7443\n4294966421\n4294963864\n4294962989\n4294959557\n4294965250\n7511\n5465\n2976\n4294958441\n4294961417\n2562\n6683\n9245\n4294965928\n4294965173\n4294963805\n4294961682\n4294958191\n2577\n3472\n6049\n9521\n4294965570\n4294965091\n4294963365\n4294961160\n4294967229\n1093\n1026\n2119\n3145\n4294965264\n4294958409\n4294966377\n7490\n6571\n4294964061\n4294960632\n4294957397\n733\n834\n1567\n2401\n3968\n6369\n337\n4294966706\n4294967043\n4294966453\n4294966200\n4294965357\n4294964261\n2322\n9287\n1609\n4294960896\n4294962505\n4294966105\n1314\n123\n1437\n1560\n2997\n4294964557\n4294957554\n4294964815\n5073\n2592\n7665\n257\n4294957922\n4294958179\n8805\n9688\n8493\n4294958181\n4294966674\n4294957559\n4294966937\n7200\n6841\n4294964041\n4294960882\n4294957627\n1213\n1544\n2757\n4301\n7058\n1359\n4294958417\n4294959776\n897\n3377\n4274\n7651\n1925\n4294959576\n4294961501\n4294963781\n7986\n4471\n2457\n4294966928\n4294959385\n4294959017\n1106\n2827\n3933\n6760\n693\n4294957453\n4294958146\n8303\n9153\n7456\n4294966609\n4294964065\n4294963378\n4294960147\n4294966229\n9080\n8013\n4294967093\n4294965106\n4294964903\n4294962713\n4294960320\n4294965737\n8761\n7202\n4294965963\n4294963165\n4294961832\n4294957701\n2237\n2642\n4879\n7521\n2400\n4294959921\n4294962321\n4294964946\n9971\n7621\n4294957592\n4294965213\n4294965509\n3426\n1639\n4294965065\n4294966704\n4294964473\n4294963881\n1058\n7643\n8701\n4294966344\n4294965045\n4294964093\n4294961842\n4294958639\n3185\n4528\n7713\n2241\n4294959954\n4294962195\n4294964853\n9752\n7309\n4294967061\n4294964370\n4294964135\n4294961209\n4294958048\n1961\n2713\n4674\n7387\n2061\n4294959448\n4294961509\n4294963661\n7874\n4239\n2113\n4294966352\n4294958465\n4294957521\n8690\n8915\n7605\n4294966520\n4294964125\n4294963349\n4294960178\n4294966231\n9113\n8048\n4294967161\n4294965209\n4294965074\n4294962987\n4294960765\n4294966456\n9925\n9085\n4294959010\n4294958095\n4294959809\n608\n3121\n3729\n6850\n579\n4294957429\n4294958008\n8141\n8853\n6994\n4294965847\n4294962841\n4294961392\n4294966937\n1033\n674\n1707\n2381\n4294964088\n4294966469\n3261\n2434\n4294965695\n4294958129\n4294966528\n7361\n6593\n4294963954\n4294960547\n4294967205\n456\n365\n821\n1186\n2007\n3193\n4294965200\n4294958393\n4294966297\n7394\n6395\n4294963789\n4294960184\n4294966677\n9565\n8946\n4294958511\n4294957457\n4294958672\n8833\n209\n9042\n9251\n4294958293\n4294957544\n4294958541\n8789\n34\n8823\n8857\n4294957680\n4294966537\n4294966921\n4294966162\n4294965787\n4294964653\n3144\n501\n3645\n4294964146\n4294957791\n4294964641\n5136\n2481\n7617\n98\n4294957715\n4294957813\n8232\n8749\n6981\n4294965730\n4294962711\n4294961145\n4294966560\n409\n9673\n82\n4294959755\n4294959837\n2296\n4837\n7133\n1970\n4294959103\n4294961073\n2880\n6657\n9537\n4294966194\n4294965731\n4294964629\n4294963064\n4294960397\n4294966165\n9266\n8135\n4294957401\n4294965536\n4294965641\n4294963881\n2226\n8811\n1037\n4294959848\n4294960885\n3437\n7026\n463\n4294957489\n4294957952\n8145\n8801\n6946\n4294965747\n4294962693\n4294961144\n4294966541\n389\n9634\n23\n4294959657\n4294959680\n2041\n4425\n6466\n891\n4294957357\n4294958248\n8309\n9261\n7570\n4294966831\n4294964401\n4294963936\n4294961041\n4294957681\n1426\n1811\n3237\n5048\n8285\n3333\n4294961618\n4294964951\n4294959273\n4294966928\n8905\n8537\n4294957442\n4294965979\n4294966125\n4294964808\n3637\n1149\n4294964786\n4294965935\n3425\n2064\n4294965489\n4294957553\n4294965746\n6003\n4453\n456\n4294964909\n4294965365\n2978\n1047\n4294964025\n4294965072\n1801\n9577\n1378\n4294960955\n4294962333\n4294965992\n1029\n9725\n754\n4294960479\n4294961233\n4294964416\n8353\n5473\n4294963826\n4294959299\n4294965829\n7832\n6365\n4294964197\n4294960562\n4294957463\n729\n896\n1625\n2521\n4146\n6667\n813\n4294957480\n4294958293\n8477\n9474\n7951\n4294957425\n4294965376\n4294965505\n3585\n1794\n4294965379\n4294967173\n4294965256\n4294965133\n3093\n930\n4294964023\n4294964953\n1680\n9337\n1017\n4294960354\n4294961371\n4294964429\n8504\n5637\n4294964141\n4294959778\n4294966623\n9105\n8432\n4294957537\n4294965969\n4294966210\n4294964883\n4294963797\n1384\n7885\n9269\n4294967154\n4294966423\n4294966281\n4294965408\n4294964393\n4294962505\n4294959602\n4294964811\n7117\n4632\n1749\n4294966381\n4294958130\n4294967215\n8049\n7968\n4294966017\n4294963985\n4294962706\n4294959395\n4294964805\n6904\n4413\n1317\n4294965730\n4294967047\n4294965481\n4294965232\n3417\n1353\n4294964770\n4294966123\n3597\n2424\n4294966021\n4294958445\n4294967170\n8319\n8193\n4294966512\n4294964705\n4294963921\n4294961330\n4294957955\n1989\n2648\n4637\n7285\n1922\n4294959207\n4294961129\n3040\n6873\n9913\n4294966786\n4294966699\n4294966189\n4294965592\n4294964485\n4294962781\n4294959970\n4294965455\n8129\n6288\n4294964417\n4294960705\n4294957826\n1235\n1765\n3000\n4765\n7765\n2530\n4294960295\n4294962825\n4294965824\n1353\n9881\n1234\n4294961115\n4294962349\n4294966168\n1221\n93\n1314\n1407\n2721\n4294964128\n4294966849\n4294963681\n3234\n9619\n2853\n4294962472\n4294965325\n4294960501\n4294958530\n1735\n2969\n4704\n7673\n2377\n4294960050\n4294962427\n4294965181\n312\n8197\n8509\n4294966706\n4294965215\n4294964625\n4294962544\n4294959873\n4294965121\n7698\n5523\n3221\n4294958744\n4294961965\n3413\n8082\n1495\n4294959577\n4294961072\n3353\n7129\n482\n4294957611\n4294958093\n8408\n9205\n7613\n4294966818\n4294964431\n4294963953\n4294961088\n4294957745\n1537\n1986\n3523\n5509\n9032\n4294964541\n4294963573\n4294960818\n4294967095\n617\n416\n1033\n1449\n2482\n4294963931\n4294966413\n3048\n2165\n4294965213\n4294957378\n4294965295\n5377\n3376\n8753\n2129\n4294960882\n4294963011\n4294966597\n2312\n1613\n4294963925\n4294965538\n2167\n409\n2576\n2985\n4294965561\n4294958546\n4294966811\n8061\n7576\n4294965637\n4294963213\n4294961554\n4294957471\n1729\n1904\n3633\n5537\n9170\n4294964707\n4294963877\n4294961288\n4294957869\n1861\n2434\n4295\n6729\n1024\n4294957753\n4294958777\n9234\n715\n9949\n664\n4294960613\n4294961277\n4294964594\n8575\n5873\n4294964448\n4294960321\n4294957473\n498\n675\n1173\n1848\n3021\n4869\n7890\n2759\n4294960649\n4294963408\n4294966761\n2873\n2338\n4294965211\n4294957549\n4294965464\n5717\n3885\n9602\n3487\n4294963089\n4294966576\n4294962369\n4294961649\n4294966722\n1075\n501\n1576\n2077\n4294963653\n4294965730\n2087\n521\n2608\n3129\n4294965737\n4294958866\n4294957307\n8877\n8888\n7765\n4294966653\n4294964418\n4294963775\n4294960897\n4294957376\n977\n1057\n2034\n3091\n5125\n8216\n3341\n4294961557\n4294964898\n4294959159\n4294966761\n8624\n8089\n4294966713\n4294964802\n4294964219\n4294961725\n4294958648\n3077\n4429\n7506\n1935\n4294959441\n4294961376\n3521\n7601\n1122\n4294958723\n4294959845\n1272\n3821\n5093\n8914\n4294964007\n4294962921\n4294959632\n4294965257\n7593\n5554\n3147\n4294958701\n4294961848\n3253\n7805\n1058\n4294958863\n4294959921\n1488\n4113\n5601\n9714\n4294965315\n4294965029\n4294963048\n4294960781\n4294966533\n18\n9255\n9273\n4294958528\n4294957801\n4294959033\n9538\n1275\n813\n2088\n2901\n4294964989\n4294957890\n4294965583\n6177\n4464\n641\n4294965105\n4294965746\n3555\n2005\n4294965560\n4294957565\n4294965829\n6098\n4631\n729\n4294965360\n4294966089\n4294964153\n2946\n9803\n2749\n4294962552\n4294965301\n4294960557\n4294958562\n1823\n3089\n4912\n8001\n2913\n4294960914\n4294963827\n4294957445\n4294963976\n4125\n805\n4930\n5735\n665\n4294966400\n4294967065\n4294966169\n4294965938\n4294964811\n3453\n968\n4294964421\n4294965389\n2514\n607\n3121\n4294963728\n4294966849\n3281\n2834\n4294966115\n4294958949\n4294957768\n9421\n9893\n9314\n4294959207\n4294958521\n4294960432\n1657\n4793\n6450\n1243\n4294957693\n4294958936\n9333\n973\n306\n1279\n1585\n2864\n4294964449\n4294957313\n4294964466\n4483\n1653\n6136\n7789\n4294963925\n4294961714\n4294958343\n2761\n3808\n6569\n377\n4294966946\n4294957323\n4294966973\n7000\n6677\n4294963677\n4294960354\n4294966735\n9793\n9232\n4294959025\n4294958257\n4294959986\n947\n3637\n4584\n8221\n2805\n4294961026\n4294963831\n4294957561\n4294964096\n4361\n1161\n5522\n6683\n2205\n4294958888\n4294961093\n2685\n6482\n9167\n4294965649\n4294964816\n4294963169\n4294960689\n4294966562\n9955\n9221\n4294959176\n4294958397\n4294960277\n1378\n4359\n5737\n96\n4294965833\n4294965929\n4294964466\n3099\n269\n3368\n3637\n4294967005\n4294960642\n4294960351\n4294963697\n6752\n3153\n9905\n3058\n4294962963\n4294966021\n4294961688\n4294960413\n4294964805\n7922\n5431\n3353\n4294958784\n4294962137\n3625\n8466\n2091\n4294960557\n4294962648\n4294965909\n1261\n9874\n1135\n4294961009\n4294962144\n4294965857\n705\n9266\n9971\n4294959237\n4294959208\n4294961149\n3061\n6914\n9975\n4294966889\n4294966864\n4294966457\n4294966025\n4294965186\n4294963915\n4294961805\n4294958424\n2933\n4061\n6994\n1055\n4294958049\n4294959104\n9857\n1665\n1522\n3187\n4294964709\n4294957896\n4294965309\n5909\n3922\n9831\n4294963753\n4294963584\n4294960041\n4294966329\n9074\n8107\n4294967181\n4294965288\n4294965173\n4294963165\n4294961042\n4294966911\n657\n272\n929\n1201\n2130\n3331\n4294965461\n4294958792\n4294966957\n8453\n8114\n4294966567\n4294964681\n4294963952\n4294961337\n4294957993\n2034\n2731\n4765\n7496\n2261\n4294959757\n4294962018\n4294964479\n9201\n6384\n4294965585\n4294961969\n4294960258\n4294964931\n7893\n5528\n3421\n4294958949\n4294962370\n4294964023\n9097\n5824\n4294964921\n4294960745\n4294958370\n1819\n2893\n4712\n7605\n2317\n4294959922\n4294962239\n4294964865\n9808\n7377\n4294967185\n4294964562\n4294964451\n4294961717\n4294958872\n3293\n4869\n8162\n3031\n4294961193\n4294964224\n4294958121\n4294965049\n5874\n3627\n9501\n3128\n4294962629\n4294965757\n4294961090\n4294959551\n3345\n5600\n8945\n4294964545\n4294963490\n4294960739\n4294966933\n376\n13\n389\n402\n791\n1193\n1984\n3177\n4294965161\n4294958338\n4294966203\n7245\n6152\n3397\n4294959549\n4294962946\n4294965199\n849\n8752\n9601\n4294958353\n4294957954\n4294959011\n9669\n1384\n1053\n2437\n3490\n4294965927\n4294959417\n4294958048\n169\n921\n1090\n2011\n3101\n5112\n8213\n3325\n4294961538\n4294964863\n4294959105\n4294966672\n8481\n7857\n4294966338\n4294964195\n4294963237\n4294960136\n4294966077\n8917\n7698\n4294966615\n4294964313\n4294963632\n4294960649\n4294966985\n338\n27\n365\n392\n757\n1149\n1906\n3055\n4294964961\n4294958016\n4294965681\n6401\n4786\n1187\n4294965973\n4294967160\n4294965837\n4294965701\n4294964242\n2647\n9593\n2240\n4294961833\n4294964073\n4294958610\n4294965387\n6701\n4792\n1493\n4294966285\n4294957778\n4294966767\n7249\n6720\n4294963969\n4294960689\n4294957362\n755\n821\n1576\n2397\n3973\n6370\n343\n4294966713\n4294967056\n4294966473\n4294966233\n4294965410\n4294964347\n2461\n9512\n1973\n4294961485\n4294963458\n4294957647\n4294963809\n4160\n673\n4833\n5506\n339\n4294965845\n4294966184\n4294964733\n3621\n1058\n4294964679\n4294965737\n3120\n1561\n4294964681\n4294966242\n3627\n2573\n4294966200\n4294958773\n4294957677\n9154\n9535\n8689\n4294958224\n4294966913\n4294957841\n4294957458\n8003\n8165\n6168\n4294964333\n4294960501\n4294957538\n743\n985\n1728\n2713\n4441\n7154\n1595\n4294958749\n4294960344\n1797\n4845\n6642\n1487\n4294958129\n4294959616\n449\n2769\n3218\n5987\n9205\n4294965192\n4294964397\n4294962293\n4294959394\n4294964391\n6489\n3584\n73\n4294963657\n4294963730\n91\n6525\n6616\n3141\n4294959757\n4294962898\n4294965359\n961\n9024\n9985\n4294959009\n4294958994\n4294960707\n2405\n5816\n8221\n4294964037\n4294962258\n4294958999\n4294963961\n5664\n2329\n7993\n322\n4294958315\n4294958637\n9656\n997\n653\n1650\n2303\n4294963953\n4294966256\n2913\n1873\n4294964786\n4294966659\n4294964149\n3512\n365\n4294963877\n4294964242\n823\n7769\n8592\n4294966361\n4294964953\n4294964018\n4294961675\n4294958397\n2776\n3877\n6653\n530\n4294967183\n4294957713\n4294957600\n8017\n8321\n6338\n4294964659\n4294960997\n4294958360\n2061\n3125\n5186\n8311\n3497\n4294961808\n4294965305\n4294959817\n4294957826\n347\n877\n1224\n2101\n3325\n5426\n8751\n4294964177\n4294962928\n4294959809\n4294965441\n7954\n6099\n4294964053\n4294960152\n4294966909\n9765\n9378\n4294959143\n4294958521\n4294960368\n1593\n4665\n6258\n923\n4294967181\n4294958104\n4294957989\n8797\n9490\n8287\n4294957777\n4294966064\n4294966545\n4294965313\n4294964562\n2579\n9845\n2424\n4294962269\n4294964693\n4294959666\n4294967063\n9433\n9200\n4294958633\n4294957833\n4294959170\n9707\n1581\n1288\n2869\n4294964157\n4294967026\n4294963887\n3617\n208\n4294963825\n4294964033\n562\n7299\n7861\n4294965160\n4294963021\n4294960885\n4294966610\n199\n9513\n9712\n4294959225\n4294958937\n4294960866\n2507\n6077\n8584\n4294964661\n4294963245\n4294960610\n4294966559\n9873\n9136\n4294959009\n4294958145\n4294959858\n707\n3269\n3976\n7245\n1221\n4294958466\n4294959687\n857\n3248\n4105\n7353\n1458\n4294958811\n4294960269\n1784\n4757\n6541\n1298\n4294957839\n4294959137\n9680\n1521\n1201\n2722\n4294963923\n4294966645\n3272\n2621\n4294965893\n4294958514\n4294967111\n8329\n8144\n4294966473\n4294964617\n4294963794\n4294961115\n4294957613\n1432\n1749\n3181\n4930\n8111\n3041\n4294961152\n4294964193\n4294958049\n4294964946\n5699\n3349\n9048\n2397\n4294961445\n4294963842\n4294957991\n4294964537\n5232\n2473\n7705\n178\n4294957883\n4294958061\n8648\n9413\n8061\n4294957474\n4294965535\n4294965713\n4294963952\n2369\n9025\n1394\n4294960419\n4294961813\n4294964936\n9453\n7093\n4294966546\n4294963639\n4294962889\n4294959232\n4294964825\n6761\n4290\n1051\n4294965341\n4294966392\n4294964437\n3533\n674\n4294964207\n4294964881\n1792\n9377\n1169\n4294960546\n4294961715\n4294964965\n9384\n7053\n4294966437\n4294963490\n4294962631\n4294958825\n4294964160\n5689\n2553\n8242\n795\n4294959037\n4294959832\n1573\n4109\n5682\n9791\n4294965473\n4294965264\n4294963441\n4294961409\n4294957554\n1667\n1925\n3592\n5517\n9109\n4294964626\n4294963735\n4294961065\n4294957504\n1273\n1481\n2754\n4235\n6989\n1224\n4294958213\n4294959437\n354\n2495\n2849\n5344\n8193\n3537\n4294961730\n4294965267\n4294959701\n4294957672\n77\n453\n530\n983\n1513\n2496\n4009\n6505\n514\n4294967019\n4294957533\n4294967256\n7493\n7453\n4294964946\n4294962399\n4294960049\n4294965152\n7905\n5761\n4294963666\n4294959427\n4294965797\n7928\n6429\n4294964357\n4294960786\n4294957847\n1337\n1888\n3225\n5113\n8338\n3451\n4294961789\n4294965240\n4294959733\n4294957677\n114\n495\n609\n1104\n1713\n2817\n4530\n7347\n1877\n4294959224\n4294961101\n3029\n6834\n9863\n4294966697\n4294966560\n4294965961\n4294965225\n4294963890\n4294961819\n4294958413\n2936\n4053\n6989\n1042\n4294958031\n4294959073\n9808\n1585\n1393\n2978\n4294964371\n4294957349\n4294964424\n4477\n1605\n6082\n7687\n4294963769\n4294961456\n4294957929\n2089\n2722\n4811\n7533\n2344\n4294959877\n4294962221\n4294964802\n9727\n7233\n4294966960\n4294964193\n4294963857\n4294960754\n4294957315\n773\n792\n1565\n2357\n3922\n6279\n201\n4294966480\n4294966681\n4294965865\n4294965250\n4294963819\n1773\n8296\n69\n4294958365\n4294958434\n9503\n641\n144\n785\n929\n1714\n2643\n4294964357\n4294967000\n4294964061\n4294963765\n530\n6999\n7529\n4294964528\n4294962057\n4294959289\n4294964050\n6043\n2797\n8840\n1637\n4294960477\n4294962114\n4294965295\n113\n8112\n8225\n4294966337\n4294964562\n4294963603\n4294960869\n4294967176\n749\n629\n1378\n2007\n3385\n4294965392\n4294958777\n4294966873\n8354\n7931\n4294966285\n4294964216\n4294963205\n4294960125\n4294966034\n8863\n7601\n4294966464\n4294964065\n4294963233\n4294960002\n4294965939\n8645\n7288\n4294965933\n4294963221\n4294961858\n4294957783\n2345\n2832\n5177\n8009\n3186\n4294961195\n4294964381\n4294958280\n4294965365\n6349\n4418\n767\n4294965185\n4294965952\n4294963841\n2497\n9042\n1539\n4294960581\n4294962120\n4294965405\n229\n8338\n8567\n4294966905\n4294965472\n4294965081\n4294963257\n4294961042\n4294967003\n749\n456\n1205\n1661\n2866\n4294964527\n4294957393\n4294964624\n4721\n2049\n6770\n8819\n4294965589\n4294964408\n4294962701\n4294959813\n4294965218\n7735\n5657\n3392\n4294959049\n4294962441\n4294964194\n9339\n6237\n4294965576\n4294961813\n4294960093\n4294964610\n7407\n4721\n2128\n4294966849\n4294958977\n4294958530\n211\n1445\n1656\n3101\n4757\n7858\n2615\n4294960473\n4294963088\n4294966265\n2057\n1026\n3083\n4294964109\n4294967192\n4294964005\n4294963901\n610\n7215\n7825\n4294965040\n4294962865\n4294960609\n4294966178\n9491\n8373\n4294957864\n4294966237\n4294966805\n4294965746\n4294965255\n4294963705\n1664\n8073\n9737\n4294957810\n4294957547\n4294958061\n8312\n9077\n7389\n4294966466\n4294963855\n4294963025\n4294959584\n4294965313\n7601\n5618\n3219\n4294958837\n4294962056\n3597\n8357\n1954\n4294960311\n4294962265\n4294965280\n249\n8233\n8482\n4294966715\n4294965197\n4294964616\n4294962517\n4294959837\n4294965058\n7599\n5361\n2960\n4294958321\n4294961281\n2306\n6291\n8597\n4294964888\n4294963485\n4294961077\n4294967266\n1047\n1017\n2064\n3081\n4294965145\n4294958226\n4294966075\n7005\n5784\n2789\n4294958573\n4294961362\n2639\n6705\n9344\n4294966049\n4294965393\n4294964146\n4294962243\n4294959093\n4294964040\n5837\n2581\n8418\n999\n4294959417\n4294960416\n2537\n5657\n8194\n4294963851\n4294962045\n4294958600\n3349\n4653\n8002\n2655\n4294960657\n4294963312\n4294966673\n2689\n2066\n4294964755\n4294966821\n4294964280\n4294963805\n789\n7298\n8087\n4294965385\n4294963472\n4294961561\n4294957737\n2002\n2443\n4445\n6888\n1333\n4294958221\n4294959554\n479\n2737\n3216\n5953\n9169\n4294965122\n4294964291\n4294962117\n4294959112\n4294963933\n5749\n2386\n8135\n521\n4294958656\n4294959177\n537\n2418\n2955\n5373\n8328\n4294963701\n4294962029\n4294958434\n3167\n4305\n7472\n1777\n4294959249\n4294961026\n2979\n6709\n9688\n4294966397\n4294966085\n4294965186\n4294963975\n4294961865\n4294958544\n3113\n4361\n7474\n1835\n4294959309\n4294961144\n3157\n7005\n162\n4294967167\n4294957329\n4294967200\n7233\n7137\n4294964370\n4294961507\n4294958581\n2792\n4077\n6869\n946\n4294957815\n4294958761\n9280\n745\n25\n770\n795\n1565\n2360\n4294963925\n4294966285\n2914\n1903\n4294964817\n4294966720\n4294964241\n4294963665\n610\n6979\n7589\n4294964568\n4294962157\n4294959429\n4294964290\n6423\n3417\n9840\n3257\n4294963097\n4294966354\n4294962155\n4294961213\n4294966072\n9989\n8765\n4294958754\n4294957519\n4294958977\n9200\n881\n81\n962\n1043\n2005\n3048\n4294965053\n4294958101\n4294965858\n6663\n5225\n1888\n4294967113\n4294959001\n4294958818\n523\n2045\n2568\n4613\n7181\n1794\n4294958975\n4294960769\n2448\n5921\n8369\n4294964290\n4294962659\n4294959653\n4294965016\n7373\n5093\n2466\n4294957559\n4294960025\n288\n3017\n3305\n6322\n9627\n4294965949\n4294965576\n4294964229\n4294962509\n4294959442\n4294964655\n6801\n4160\n961\n4294965121\n4294966082\n4294963907\n2693\n9304\n1997\n4294961301\n4294963298\n4294957303\n3305\n3312\n6617\n9929\n4294966546\n4294966475\n4294965725\n4294964904\n4294963333\n4294960941\n4294966978\n623\n305\n928\n1233\n2161\n3394\n4294965555\n4294958949\n4294967208\n8861\n8773\n4294957634\n4294966407\n4294966745\n4294965856\n4294965305\n4294963865\n1874\n8443\n317\n4294958760\n4294959077\n541\n2322\n2863\n5185\n8048\n3233\n4294961281\n4294964514\n4294958499\n4294965717\n6920\n5341\n2261\n4294957602\n4294959863\n169\n2736\n2905\n5641\n8546\n4294964187\n4294962733\n4294959624\n4294965061\n7389\n5154\n2543\n4294957697\n4294960240\n641\n3585\n4226\n7811\n2037\n4294959848\n4294961885\n4294964437\n9026\n6167\n4294965193\n4294961360\n4294959257\n3321\n5282\n8603\n4294963885\n4294962488\n4294959077\n4294964269\n6050\n3023\n9073\n2096\n4294961169\n4294963265\n4294967138\n3107\n2949\n4294966056\n4294959005\n4294957765\n9474\n9943\n9417\n4294959360\n4294958777\n4294960841\n2322\n5867\n8189\n4294964056\n4294962245\n4294959005\n4294963954\n5663\n2321\n7984\n305\n4294958289\n4294958594\n9587\n885\n472\n1357\n1829\n3186\n4294965015\n4294958201\n4294965920\n6825\n5449\n2274\n4294957723\n4294959997\n424\n3125\n3549\n6674\n223\n4294966897\n4294967120\n4294966721\n4294966545\n4294965970\n4294965219\n4294963893\n1816\n8413\n229\n4294958642\n4294958871\n217\n1792\n2009\n3801\n5810\n9611\n4294965421\n4294965032\n4294963157\n4294960893\n4294966754\n351\n9809\n160\n4294959969\n4294960129\n2802\n5635\n8437\n4294964072\n4294962509\n4294959285\n4294964498\n6487\n3689\n176\n4294963865\n4294964041\n610\n7355\n7965\n4294965320\n4294963285\n4294961309\n4294957298\n1311\n1313\n2624\n3937\n6561\n498\n4294967059\n4294957557\n4294957320\n7581\n7605\n5186\n2791\n4294957977\n4294960768\n1449\n4921\n6370\n1291\n4294957661\n4294958952\n9317\n973\n290\n1263\n1553\n2816\n4294964369\n4294967185\n4294964258\n4294964147\n1109\n7960\n9069\n4294967029\n4294966098\n4294965831\n4294964633\n4294963168\n4294960505\n4294966377\n9586\n8667\n4294958253\n4294966920\n4294957877\n4294957501\n8082\n8287\n6369\n4294964656\n4294961025\n4294958385\n2114\n3203\n5317\n8520\n4294963837\n4294962357\n4294958898\n4294963959\n5561\n2224\n7785\n9\n4294957794\n4294957803\n8301\n8808\n7109\n4294965917\n4294963026\n4294961647\n4294957377\n1728\n1809\n3537\n5346\n8883\n4294964229\n4294963112\n4294960045\n4294965861\n8610\n7175\n4294965785\n4294962960\n4294961449\n4294967113\n1266\n1083\n2349\n3432\n4294965781\n4294959213\n4294957698\n9615\n17\n9632\n9649\n4294959281\n4294958930\n4294960915\n2549\n6168\n8717\n4294964885\n4294963602\n4294961191\n4294957497\n1392\n1593\n2985\n4578\n7563\n2141\n4294959704\n4294961845\n4294964253\n8802\n5759\n4294964561\n4294960320\n4294957585\n609\n898\n1507\n2405\n3912\n6317\n229\n4294966546\n4294966775\n4294966025\n4294965504\n4294964233\n2441\n9378\n1819\n4294961197\n4294963016\n4294966917\n2637\n2258\n4294964895\n4294967153\n4294964752\n4294964609\n2065\n9378\n1443\n4294960821\n4294962264\n4294965789\n757\n9250\n7\n4294959257\n4294959264\n1225\n3193\n4418\n7611\n2029\n4294959640\n4294961669\n4294964013\n8386\n5103\n3489\n4294958592\n4294962081\n3377\n8162\n1539\n4294959701\n4294961240\n3645\n7589\n1234\n4294958823\n4294960057\n1584\n4345\n5929\n274\n4294966203\n4294966477\n4294965384\n4294964565\n2653\n9922\n2575\n4294962497\n4294965072\n4294960273\n4294958049\n1026\n1779\n2805\n4584\n7389\n1973\n4294959362\n4294961335\n3401\n7440\n841\n4294958281\n4294959122\n107\n1933\n2040\n3973\n6013\n9986\n4294965999\n4294965985\n4294964688\n4294963377\n4294960769\n4294966850\n323\n9877\n200\n4294960077\n4294960277\n3058\n6039\n9097\n4294965136\n4294964233\n4294962073\n4294959010\n4294963787\n5501\n1992\n7493\n9485\n4294966978\n4294966463\n4294966145\n4294965312\n4294964161\n4294962177\n4294959042\n4294963923\n5669\n2296\n7965\n261\n4294958226\n4294958487\n9417\n608\n25\n633\n658\n1291\n1949\n3240\n4294965189\n4294958429\n4294966322\n7455\n6481\n4294963936\n4294960417\n4294967057\n178\n9939\n117\n4294960056\n4294960173\n2933\n5810\n8743\n4294964553\n4294963296\n4294960553\n4294966553\n9810\n9067\n4294958877\n4294957944\n4294959525\n173\n2402\n2575\n4977\n7552\n2529\n4294960081\n4294962610\n4294965395\n709\n8808\n9517\n4294958325\n4294957842\n4294958871\n9417\n992\n409\n1401\n1810\n3211\n4294965021\n4294958232\n4294965957\n6893\n5554\n2447\n4294958001\n4294960448\n1153\n4305\n5458\n9763\n4294965221\n4294964984\n4294962909\n4294960597\n4294966210\n9511\n8425\n4294957936\n4294966361\n4294967001\n4294966066\n4294965771\n4294964541\n3016\n261\n3277\n3538\n4294966815\n4294960353\n4294959872\n2929\n5505\n8434\n4294963939\n4294962373\n4294959016\n4294964093\n5813\n2610\n8423\n1033\n4294959456\n4294960489\n2649\n5842\n8491\n4294964333\n4294962824\n4294959861\n4294965389\n7954\n6047\n4294964001\n4294960048\n4294966753\n9505\n8962\n4294958467\n4294957429\n4294958600\n8733\n37\n8770\n8807\n4294957577\n4294966384\n4294966665\n4294965753\n4294965122\n3579\n1405\n4294964984\n4294966389\n4294964077\n3170\n9951\n3121\n4294963072\n4294966193\n4294961969\n4294960866\n4294965539\n9109\n7352\n4294966461\n4294963813\n4294962978\n4294959495\n4294965177\n7376\n5257\n2633\n4294957890\n4294960523\n1117\n4344\n5461\n9805\n4294965266\n4294965071\n4294963041\n4294960816\n4294966561\n81\n9346\n9427\n4294958773\n4294958200\n4294959677\n581\n2962\n3543\n6505\n48\n4294966553\n4294966601\n4294965858\n4294965163\n4294963725\n1592\n8021\n9613\n4294957634\n4294967247\n4294957585\n4294957536\n7825\n8065\n5890\n4294963955\n4294959845\n4294966504\n9053\n8261\n4294957314\n4294965575\n4294965593\n4294963872\n2169\n8745\n914\n4294959659\n4294960573\n2936\n6213\n9149\n4294965362\n4294964511\n4294962577\n4294959792\n4294965073\n7569\n5346\n2915\n4294958261\n4294961176\n2141\n6021\n8162\n4294964183\n4294962345\n4294959232\n4294964281\n6217\n3202\n9419\n2621\n4294962040\n4294964661\n4294959405\n4294966770\n8879\n8353\n4294967232\n4294965585\n4294965521\n4294963810\n4294962035\n4294958549\n3288\n4541\n7829\n2370\n4294960199\n4294962569\n4294965472\n745\n8921\n9666\n4294958587\n4294958253\n4294959544\n501\n2749\n3250\n5999\n9249\n4294965248\n4294964497\n4294962449\n4294959650\n4294964803\n7157\n4664\n1821\n4294966485\n4294958306\n4294957495\n8505\n8704\n7209\n4294965913\n4294963122\n4294961739\n4294957565\n2008\n2277\n4285\n6562\n847\n4294957409\n4294958256\n8369\n9329\n7698\n4294967027\n4294964725\n4294964456\n4294961885\n4294959045\n3634\n5383\n9017\n4294964400\n4294963417\n4294960521\n4294966642\n9867\n9213\n4294959080\n4294958293\n4294960077\n1074\n3855\n4929\n8784\n4294963713\n4294962497\n4294958914\n4294964115\n5733\n2552\n8285\n837\n4294959122\n4294959959\n1785\n4448\n6233\n681\n4294966914\n4294957595\n4294967213\n7512\n7429\n4294964941\n4294962370\n4294960015\n4294965089\n7808\n5601\n3409\n4294959010\n4294962419\n4294964133\n9256\n6093\n4294965349\n4294961442\n4294959495\n3641\n5840\n9481\n4294965321\n4294964802\n4294962827\n4294960333\n4294965864\n8901\n7469\n4294966370\n4294963839\n4294962913\n4294959456\n4294965073\n7233\n5010\n2243\n4294967253\n4294959496\n4294959453\n1653\n3810\n5463\n9273\n4294964736\n4294964009\n4294961449\n4294958162\n2315\n3181\n5496\n8677\n4294964173\n4294962850\n4294959727\n4294965281\n7712\n5697\n3409\n4294959106\n4294962515\n4294964325\n9544\n6573\n4294966117\n4294962690\n4294961511\n4294966905\n1120\n729\n1849\n2578\n4294964427\n4294967005\n4294964136\n4294963845\n685\n7234\n7919\n4294965153\n4294963072\n4294960929\n4294966705\n338\n9747\n85\n4294959832\n4294959917\n2453\n5074\n7527\n2601\n4294960128\n4294962729\n4294965561\n994\n9259\n253\n4294959512\n4294959765\n1981\n4450\n6431\n881\n4294957312\n4294958193\n8209\n9106\n7315\n4294966421\n4294963736\n4294962861\n4294959301\n4294964866\n6871\n4441\n1312\n4294965753\n4294967065\n4294965522\n4294965291\n3517\n1512\n4294965029\n4294966541\n4294964274\n3519\n497\n4294964016\n4294964513\n1233\n8450\n9683\n4294958133\n4294957816\n4294958653\n9173\n530\n9703\n233\n4294959936\n4294960169\n2809\n5682\n8491\n4294964173\n4294962664\n4294959541\n4294964909\n7154\n4767\n1921\n4294966688\n4294958609\n4294958001\n9314\n19\n9333\n9352\n4294958685\n4294958037\n4294959426\n167\n2297\n2464\n4761\n7225\n1986\n4294959211\n4294961197\n3112\n7013\n125\n4294967138\n4294967263\n4294967105\n4294967072\n4294966881\n4294966657\n4294966242\n4294965603\n4294964549\n2856\n109\n2965\n3074\n4294966039\n4294959113\n4294957856\n9673\n233\n9906\n139\n4294960045\n4294960184\n2933\n5821\n8754\n4294964575\n4294963329\n4294960608\n4294966641\n9953\n9298\n4294959251\n4294958549\n4294960504\n1757\n4965\n6722\n1687\n4294958409\n4294960096\n1209\n4009\n5218\n9227\n4294964445\n4294963672\n4294960821\n4294967197\n722\n623\n1345\n1968\n3313\n4294965281\n4294958594\n4294966579\n7877\n7160\n4294965037\n4294962197\n4294959938\n4294964839\n7481\n5024\n2505\n4294957529\n4294960034\n267\n3005\n3272\n6277\n9549\n4294965826\n4294965375\n4294963905\n4294961984\n4294958593\n3281\n4578\n7859\n2437\n4294960296\n4294962733\n4294965733\n1170\n9607\n777\n4294960384\n4294961161\n4294964249\n8114\n5067\n3181\n4294958248\n4294961429\n2381\n6514\n8895\n4294965409\n4294964304\n4294962417\n4294959425\n4294964546\n6675\n3925\n600\n4294964525\n4294965125\n2354\n183\n2537\n2720\n4294965257\n4294957977\n4294965938\n6619\n5261\n1880\n4294967141\n4294959021\n4294958866\n591\n2161\n2752\n4913\n7665\n2578\n4294960243\n4294962821\n4294965768\n1293\n9765\n1058\n4294960823\n4294961881\n4294965408\n9993\n8105\n4294958098\n4294966203\n4294967005\n4294965912\n4294965621\n4294964237\n2562\n9503\n2065\n4294961568\n4294963633\n4294957905\n4294964242\n4851\n1797\n6648\n8445\n4294965093\n4294963538\n4294961335\n4294957577\n1616\n1897\n3513\n5410\n8923\n4294964333\n4294963256\n4294960293\n4294966253\n9250\n8207\n4294957457\n4294965664\n4294965825\n4294964193\n2722\n9619\n2341\n4294961960\n4294964301\n4294958965\n4294965970\n7639\n6313\n4294963952\n4294960265\n4294966921\n9890\n9515\n4294959405\n4294958920\n4294961029\n2653\n6386\n9039\n4294965425\n4294964464\n4294962593\n4294959761\n4294965058\n7523\n5285\n2808\n4294958093\n4294960901\n1698\n5303\n7001\n2304\n4294959305\n4294961609\n3618\n7931\n1549\n4294959480\n4294961029\n3213\n6946\n159\n4294967105\n4294967264\n4294967073\n4294967041\n4294966818\n4294966563\n4294966085\n4294965352\n4294964141\n2197\n9042\n1239\n4294960281\n4294961520\n4294964505\n8729\n5938\n4294964667\n4294960605\n4294957976\n1285\n1965\n3250\n5215\n8465\n4294963680\n4294962145\n4294958529\n3378\n4611\n7989\n2600\n4294960589\n4294963189\n4294966482\n2375\n1561\n4294963936\n4294965497\n2137\n338\n2475\n2813\n4294965288\n4294958101\n4294966093\n6898\n5695\n2593\n4294958288\n4294960881\n1873\n5458\n7331\n2789\n4294960120\n4294962909\n4294965733\n1346\n9783\n1129\n4294960912\n4294962041\n4294965657\n402\n8763\n9165\n4294957928\n4294967093\n4294957725\n4294957522\n7951\n8177\n6128\n4294964305\n4294960433\n4294957442\n579\n725\n1304\n2029\n3333\n5362\n8695\n4294964057\n4294962752\n4294959513\n4294964969\n7186\n4859\n2045\n4294966904\n4294958949\n4294958557\n210\n1471\n1681\n3152\n4833\n7985\n2818\n4294960803\n4294963621\n4294967128\n3453\n3285\n4294966738\n4294960023\n4294959465\n2192\n4361\n6553\n914\n4294957467\n4294958381\n8552\n9637\n8189\n4294957826\n4294966015\n4294966545\n4294965264\n4294964513\n2481\n9698\n2179\n4294961877\n4294964056\n4294958637\n4294965397\n6738\n4839\n1577\n4294966416\n4294957993\n4294967113\n7810\n7627\n4294965437\n4294963064\n4294961205\n4294966973\n882\n559\n1441\n2000\n3441\n4294965441\n4294958882\n4294967027\n8613\n8344\n4294966957\n4294965301\n4294964962\n4294962967\n4294960633\n4294966304\n9641\n8649\n4294958290\n4294966939\n4294957933\n4294957576\n8213\n8493\n6706\n4294965199\n4294961905\n4294959808\n4294964417\n6929\n4050\n979\n4294965029\n4294966008\n4294963741\n2453\n8898\n1351\n4294960249\n4294961600\n4294964553\n8857\n6114\n4294964971\n4294961085\n4294958760\n2549\n4013\n6562\n575\n4294967137\n4294957712\n4294957553\n7969\n8226\n6195\n4294964421\n4294960616\n4294957741\n1061\n1506\n2567\n4073\n6640\n713\n4294957353\n4294958066\n8123\n8893\n7016\n4294965909\n4294962925\n4294961538\n4294967167\n1409\n1280\n2689\n4294963969\n4294966658\n3331\n2693\n4294966024\n4294958717\n4294957445\n8866\n9015\n7881\n4294966896\n4294964777\n4294964377\n4294961858\n4294958939\n3501\n5144\n8645\n4294963789\n4294962434\n4294958927\n4294964065\n5696\n2465\n8161\n626\n4294958787\n4294959413\n904\n3021\n3925\n6946\n871\n4294957817\n4294958688\n9209\n601\n9810\n411\n4294960221\n4294960632\n3557\n6893\n450\n4294957343\n4294957793\n7840\n8337\n6177\n4294964514\n4294960691\n4294957909\n1304\n1917\n3221\n5138\n8359\n3497\n4294961856\n4294965353\n4294959913\n4294957970\n587\n1261\n1848\n3109\n4957\n8066\n3023\n4294961089\n4294964112\n4294957905\n4294964721\n5330\n2755\n8085\n840\n4294958925\n4294959765\n1394\n3863\n5257\n9120\n4294964377\n4294963497\n4294960578\n4294966779\n61\n9544\n9605\n4294959149\n4294958754\n4294960607\n2065\n5376\n7441\n2817\n4294960258\n4294963075\n4294966037\n1816\n557\n2373\n2930\n4294965303\n4294958233\n4294966240\n7177\n6121\n3298\n4294959419\n4294962717\n4294964840\n261\n7805\n8066\n4294965871\n4294963937\n4294962512\n4294959153\n4294964369\n6226\n3299\n9525\n2824\n4294962349\n4294965173\n4294960226\n4294958103\n1033\n1840\n2873\n4713\n7586\n2299\n4294959885\n4294962184\n4294964773\n9661\n7138\n4294966799\n4294963937\n4294963440\n4294960081\n4294966225\n9010\n7939\n4294966949\n4294964888\n4294964541\n4294962133\n4294959378\n4294964215\n6297\n3216\n9513\n2729\n4294962242\n4294964971\n4294959917\n4294957592\n213\n509\n722\n1231\n1953\n3184\n5137\n8321\n3458\n4294961779\n4294965237\n4294959720\n4294957661\n85\n450\n535\n985\n1520\n2505\n4025\n6530\n555\n4294967085\n4294957640\n4294957429\n7773\n7906\n5679\n3585\n4294959264\n4294962849\n4294964817\n370\n7891\n8261\n4294966152\n4294964413\n4294963269\n4294960386\n4294966359\n9449\n8512\n4294957961\n4294966473\n4294967138\n4294966315\n4294966157\n4294965176\n4294964037\n1917\n8658\n575\n4294959233\n4294959808\n1745\n4257\n6002\n259\n4294966261\n4294966520\n4294965485\n4294964709\n2898\n311\n3209\n3520\n4294966729\n4294960249\n4294959682\n2635\n5021\n7656\n2677\n4294960333\n4294963010\n4294966047\n1761\n512\n2273\n2785\n4294965058\n4294957843\n4294965605\n6152\n4461\n613\n4294965074\n4294965687\n3465\n1856\n4294965321\n4294967177\n4294965202\n4294965083\n2989\n776\n4294963765\n4294964541\n1010\n8255\n9265\n4294957520\n4294966785\n4294967009\n4294966498\n4294966211\n4294965413\n4294964328\n2445\n9477\n1922\n4294961399\n4294963321\n4294957424\n3449\n3577\n7026\n603\n4294957629\n4294958232\n8565\n9501\n8066\n4294957567\n4294965633\n4294965904\n4294964241\n2849\n9794\n2643\n4294962437\n4294965080\n4294960221\n4294958005\n930\n1639\n2569\n4208\n6777\n985\n4294957762\n4294958747\n9213\n664\n9877\n541\n4294960418\n4294960959\n4294964081\n7744\n4529\n2273\n4294966802\n4294959075\n4294958581\n360\n1645\n2005\n3650\n5655\n9305\n4294964960\n4294964265\n4294961929\n4294958898\n3531\n5133\n8664\n4294963797\n4294962461\n4294958962\n4294964127\n5793\n2624\n8417\n1041\n4294959458\n4294960499\n2661\n5864\n8525\n4294964389\n4294962914\n4294960007\n4294965625\n8336\n6665\n4294965001\n4294961666\n4294959371\n4294963741\n5816\n2261\n8077\n338\n4294958415\n4294958753\n9872\n1329\n1201\n2530\n4294963731\n4294966261\n2696\n1661\n4294964357\n4294966018\n3079\n1801\n4294964880\n4294966681\n4294964265\n4294963650\n619\n6973\n7592\n4294964565\n4294962157\n4294959426\n4294964287\n6417\n3408\n9825\n3233\n4294963058\n4294966291\n4294962053\n4294961048\n4294965805\n9557\n8066\n4294957623\n4294965689\n4294966016\n4294964409\n3129\n242\n3371\n3613\n4294966984\n4294960597\n4294960285\n3586\n6575\n161\n4294966736\n4294966897\n4294966337\n4294965938\n4294964979\n3621\n1304\n4294964925\n4294966229\n4294963858\n2791\n9353\n2144\n4294961497\n4294963641\n4294957842\n4294964187\n4733\n1624\n6357\n7981\n4294964338\n4294962319\n4294959361\n4294964384\n6449\n3537\n9986\n3523\n4294963509\n4294967032\n4294963245\n4294962981\n4294958930\n4294964615\n6249\n3568\n9817\n3385\n4294963202\n4294966587\n4294962493\n4294961784\n4294966981\n1469\n1154\n2623\n4294963777\n4294966400\n2881\n1985\n4294964866\n4294966851\n4294964421\n4294963976\n1101\n7781\n8882\n4294966663\n4294965545\n4294964912\n4294963161\n4294960777\n4294966642\n123\n9469\n9592\n4294959061\n4294958653\n4294960418\n1775\n4897\n6672\n1569\n4294958241\n4294959810\n755\n3269\n4024\n7293\n1317\n4294958610\n4294959927\n1241\n3872\n5113\n8985\n4294964098\n4294963083\n4294959885\n4294965672\n8261\n6637\n4294964898\n4294961535\n4294959137\n3376\n5217\n8593\n4294963810\n4294962403\n4294958917\n4294964024\n5645\n2373\n8018\n391\n4294958409\n4294958800\n9913\n1417\n1330\n2747\n4294964077\n4294966824\n3605\n3133\n4294966738\n4294959871\n4294959313\n1888\n3905\n5793\n9698\n4294965491\n4294965189\n4294963384\n4294961277\n4294957365\n1346\n1415\n2761\n4176\n6937\n1113\n4294958050\n4294959163\n9917\n1784\n1701\n3485\n4294965186\n4294958671\n4294966561\n7936\n7201\n4294965137\n4294962338\n4294960179\n4294965221\n8104\n6029\n4294964133\n4294960162\n4294966999\n9865\n9568\n4294959433\n4294959001\n4294961138\n2843\n6685\n9528\n4294966213\n4294965741\n4294964658\n4294963103\n4294960465\n4294966272\n9441\n8417\n4294957858\n4294966275\n4294966837\n4294965816\n4294965357\n4294963877\n1938\n8519\n457\n4294958976\n4294959433\n1113\n3250\n4363\n7613\n1976\n4294959589\n4294961565\n4294963858\n8127\n4689\n2816\n4294957505\n4294960321\n530\n3555\n4085\n7640\n1725\n4294959365\n4294961090\n3159\n6953\n112\n4294967065\n4294967177\n4294966946\n4294966827\n4294966477\n4294966008\n4294965189\n4294963901\n1794\n8399\n193\n4294958592\n4294958785\n81\n1570\n1651\n3221\n4872\n8093\n2965\n4294961058\n4294964023\n4294957785\n4294964512\n5001\n2217\n7218\n9435\n4294966653\n4294966088\n4294965445\n4294964237\n4294962386\n4294959327\n4294964417\n6448\n3569\n17\n3586\n3603\n4294967189\n4294960792\n4294960685\n4294964181\n7570\n4455\n2025\n4294966480\n4294958505\n4294957689\n8898\n9291\n8189\n4294957480\n4294965669\n4294965853\n4294964226\n2783\n9713\n2496\n4294962209\n4294964705\n4294959618\n4294967027\n9349\n9080\n4294958429\n4294957509\n4294958642\n8855\n201\n9056\n9257\n4294958313\n4294957570\n4294958587\n8861\n152\n9013\n9165\n4294958178\n4294957343\n4294958225\n8272\n9201\n7473\n4294966674\n4294964147\n4294963525\n4294960376\n4294966605\n9685\n8994\n4294958679\n4294957673\n4294959056\n9433\n1193\n626\n1819\n2445\n4294964264\n4294966709\n4294963677\n3090\n9471\n2561\n4294962032\n4294964593\n4294959329\n4294966626\n8659\n7989\n4294966648\n4294964637\n4294963989\n4294961330\n4294958023\n2057\n2784\n4841\n7625\n2466\n4294960091\n4294962557\n4294965352\n613\n8669\n9282\n4294957951\n4294967233\n4294957888\n4294957825\n8417\n8946\n7363\n4294966309\n4294963672\n4294962685\n4294959061\n4294964450\n6215\n3369\n9584\n2953\n4294962537\n4294965490\n4294960731\n4294958925\n2360\n3989\n6349\n338\n4294966687\n4294967025\n4294966416\n4294966145\n4294965265\n4294964114\n2083\n8901\n984\n4294959885\n4294960869\n3458\n7031\n489\n4294957520\n4294958009\n8233\n8946\n7179\n4294966125\n4294963304\n4294962133\n4294958141\n2978\n3823\n6801\n624\n4294957425\n4294958049\n8178\n8931\n7109\n4294966040\n4294963149\n4294961893\n4294957746\n2343\n2793\n5136\n7929\n3065\n4294960994\n4294964059\n4294957757\n4294964520\n4981\n2205\n7186\n9391\n4294966577\n4294965968\n4294965249\n4294963921\n4294961874\n4294958499\n3077\n4280\n7357\n1637\n4294958994\n4294960631\n2329\n5664\n7993\n4294963657\n4294961650\n4294958011\n2365\n3080\n5445\n8525\n4294963970\n4294962495\n4294959169\n4294964368\n6241\n3313\n9554\n2867\n4294962421\n4294965288\n4294960413\n4294958405\n1522\n2631\n4153\n6784\n937\n4294957721\n4294958658\n9083\n445\n9528\n9973\n4294959501\n4294959474\n4294961679\n4294963857\n8240\n4801\n3041\n4294957842\n4294960883\n1429\n5016\n6445\n1461\n4294957906\n4294959367\n9977\n2048\n2025\n4294964073\n4294966098\n2875\n1677\n4294964552\n4294966229\n3485\n2418\n4294965903\n4294958321\n4294966928\n7953\n7585\n4294965538\n4294963123\n4294961365\n4294967192\n1261\n1157\n2418\n3575\n4294965993\n4294959568\n4294958265\n537\n1506\n2043\n3549\n5592\n9141\n4294964733\n4294963874\n4294961311\n4294957889\n1904\n2497\n4401\n6898\n1299\n4294958197\n4294959496\n397\n2597\n2994\n5591\n8585\n4294964176\n4294962761\n4294959641\n4294965106\n7451\n5261\n2712\n4294957973\n4294960685\n1362\n4751\n6113\n864\n4294966977\n4294957841\n4294957522\n8067\n8293\n6360\n4294964653\n4294961013\n4294958370\n2087\n3161\n5248\n8409\n4294963657\n4294962066\n4294958427\n3197\n4328\n7525\n1853\n4294959378\n4294961231\n3313\n7248\n561\n4294957809\n4294958370\n8883\n9957\n8840\n4294958797\n4294957637\n4294959138\n9479\n1321\n800\n2121\n2921\n4294965042\n4294957963\n4294965709\n6376\n4789\n1165\n4294965954\n4294967119\n4294965777\n4294965600\n4294964081\n2385\n9170\n1555\n4294960725\n4294962280\n4294965709\n693\n9106\n9799\n4294958905\n4294958704\n4294960313\n1721\n4738\n6459\n1197\n4294957656\n4294958853\n9213\n770\n9983\n753\n4294960736\n4294961489\n4294964929\n9122\n6755\n4294965877\n4294962632\n4294961213\n4294966549\n466\n9719\n185\n4294959904\n4294960089\n2697\n5490\n8187\n4294963677\n4294961864\n4294958245\n2813\n3762\n6575\n337\n4294966912\n4294967249\n4294966865\n4294966818\n4294966387\n4294965909\n4294965000\n3613\n1317\n4294964930\n4294966247\n4294963881\n2832\n9417\n2249\n4294961666\n4294963915\n4294958285\n4294964904\n5893\n3501\n9394\n2895\n4294962289\n4294965184\n4294960177\n4294958065\n946\n1715\n2661\n4376\n7037\n1413\n4294958450\n4294959863\n1017\n3584\n4601\n8185\n2786\n4294960971\n4294963757\n4294957432\n4294963893\n4029\n626\n4655\n5281\n9936\n4294965217\n4294965153\n4294963074\n4294960931\n4294966709\n344\n9757\n101\n4294959858\n4294959959\n2521\n5184\n7705\n2889\n4294960594\n4294963483\n4294966781\n2968\n2453\n4294965421\n4294957874\n4294965999\n6577\n5280\n1857\n4294967137\n4294958994\n4294958835\n533\n2072\n2605\n4677\n7282\n1959\n4294959241\n4294961200\n3145\n7049\n194\n4294967243\n4294957437\n4294957384\n7525\n7613\n5138\n2751\n4294957889\n4294960640\n1233\n4577\n5810\n387\n4294966197\n4294966584\n4294965485\n4294964773\n2962\n439\n3401\n4294963840\n4294967241\n4294963785\n4294963730\n219\n6653\n6872\n3525\n4294960397\n4294963922\n4294967023\n4294963649\n3376\n9729\n3105\n4294962834\n4294965939\n4294961477\n4294960120\n4294964301\n7125\n4130\n1255\n4294965385\n4294966640\n4294964729\n4294964073\n1506\n8283\n9789\n4294958072\n4294957861\n4294958637\n9202\n543\n9745\n288\n4294960033\n4294960321\n3058\n6083\n9141\n4294965224\n4294964365\n4294962293\n4294959362\n4294964359\n6425\n3488\n9913\n3401\n4294963314\n4294966715\n4294962733\n4294962152\n4294957589\n2445\n2738\n5183\n7921\n3104\n4294961025\n4294964129\n4294957858\n4294964691\n5253\n2648\n7901\n549\n4294958450\n4294958999\n153\n1856\n2009\n3865\n5874\n9739\n4294965613\n4294965352\n4294963669\n4294961725\n4294958098\n2527\n3329\n5856\n9185\n4294965041\n4294964226\n4294961971\n4294958901\n3576\n5181\n8757\n4294963938\n4294962695\n4294959337\n4294964736\n6777\n4217\n994\n4294965211\n4294966205\n4294964120\n3029\n9853\n2882\n4294962735\n4294965617\n4294961056\n4294959377\n3137\n5218\n8355\n3573\n4294961928\n4294965501\n4294960133\n4294958338\n1175\n2217\n3392\n5609\n9001\n4294964610\n4294963611\n4294960925\n4294967240\n869\n813\n1682\n2495\n4294964177\n4294966672\n3553\n2929\n4294966482\n4294959411\n4294958597\n712\n2013\n2725\n4738\n7463\n2201\n4294959664\n4294961865\n4294964233\n8802\n5739\n4294964541\n4294960280\n4294957525\n509\n738\n1247\n1985\n3232\n5217\n8449\n4294963666\n4294962115\n4294958485\n3304\n4493\n7797\n2290\n4294960087\n4294962377\n4294965168\n249\n8121\n8370\n4294966491\n4294964861\n4294964056\n4294961621\n4294958381\n2706\n3791\n6497\n288\n4294966785\n4294967073\n4294966562\n4294966339\n4294965605\n4294964648\n2957\n309\n3266\n3575\n4294966841\n4294960416\n4294959961\n3081\n5746\n8827\n4294964573\n4294963400\n4294960677\n4294966781\n162\n9647\n9809\n4294959456\n4294959265\n4294961425\n3394\n7523\n917\n4294958440\n4294959357\n501\n2562\n3063\n5625\n8688\n4294964313\n4294963001\n4294960018\n4294965723\n8445\n6872\n4294965317\n4294962189\n4294960210\n4294965103\n8017\n5824\n4294963841\n4294959665\n4294966210\n8579\n7493\n4294966072\n4294963565\n4294962341\n4294958610\n4294963655\n4969\n1328\n6297\n7625\n4294963922\n4294961547\n4294958173\n2424\n3301\n5725\n9026\n4294964751\n4294963777\n4294961232\n4294957713\n1649\n2066\n3715\n5781\n9496\n4294965277\n4294964773\n4294962754\n4294960231\n4294965689\n8624\n7017\n4294965641\n4294962658\n4294961003\n4294966365\n72\n9141\n9213\n4294958354\n4294957567\n4294958625\n8896\n225\n9121\n9346\n4294958467\n4294957813\n4294958984\n9501\n1189\n690\n1879\n2569\n4294964448\n4294967017\n4294964169\n4294963890\n763\n7357\n8120\n4294965477\n4294963597\n4294961778\n4294958079\n2561\n3344\n5905\n9249\n4294965154\n4294964403\n4294962261\n4294959368\n4294964333\n6405\n3442\n9847\n3289\n4294963136\n4294966425\n4294962265\n4294961394\n4294966363\n461\n9528\n9989\n4294959517\n4294959506\n4294961727\n4294963937\n8368\n5009\n3377\n4294958386\n4294961763\n2853\n7320\n173\n4294957493\n4294957666\n7863\n8233\n6096\n4294964329\n4294960425\n4294957458\n587\n749\n1336\n2085\n3421\n5506\n8927\n4294964433\n4294963360\n4294960497\n4294966561\n9762\n9027\n4294958789\n4294957816\n4294959309\n9829\n1842\n1671\n3513\n4294965184\n4294958697\n4294966585\n7986\n7275\n4294965261\n4294962536\n4294960501\n4294965741\n8946\n7391\n4294966337\n4294963728\n4294962769\n4294959201\n4294964674\n6579\n3957\n536\n4294964493\n4294965029\n2226\n9959\n2185\n4294962144\n4294964329\n4294959177\n4294966210\n8091\n7005\n4294965096\n4294962101\n4294959901\n4294964706\n7311\n4721\n2032\n4294966753\n4294958785\n4294958242\n9731\n677\n408\n1085\n1493\n2578\n4294964071\n4294966649\n3424\n2777\n4294966201\n4294958978\n4294957883\n9565\n152\n9717\n9869\n4294959586\n4294959455\n4294961745\n4294963904\n8353\n4961\n3314\n4294958275\n4294961589\n2568\n6861\n9429\n4294966290\n4294965719\n4294964713\n4294963136\n4294960553\n4294966393\n9650\n8747\n4294958397\n4294967144\n4294958245\n4294958093\n9042\n9839\n8881\n4294958720\n4294957601\n4294959025\n9330\n1059\n389\n1448\n1837\n3285\n4294965122\n4294958407\n4294966233\n7344\n6281\n3625\n4294959906\n4294963531\n4294966141\n2376\n1221\n3597\n4294964818\n4294958415\n4294965937\n7056\n5697\n2753\n4294958450\n4294961203\n2357\n6264\n8621\n4294964885\n4294963506\n4294961095\n4294957305\n1104\n1113\n2217\n3330\n5547\n8877\n4294964424\n4294963301\n4294960429\n4294966434\n9567\n8705\n4294958272\n4294966977\n4294957953\n4294957634\n8291\n8629\n6920\n4294965549\n4294962469\n4294960722\n4294965895\n9321\n7920\n4294967241\n4294965161\n4294965106\n4294962971\n4294960781\n4294966456\n9941\n9101\n4294959042\n4294958143\n4294959889\n736\n3329\n4065\n7394\n1459\n4294958853\n4294960312\n1869\n4885\n6754\n1639\n4294958393\n4294960032\n1129\n3865\n4994\n8859\n4294963853\n4294962712\n4294959269\n4294964685\n6658\n4047\n705\n4294964752\n4294965457\n2913\n1074\n4294963987\n4294965061\n1752\n9517\n1269\n4294960786\n4294962055\n4294965545\n304\n8553\n8857\n4294957410\n4294966267\n4294966381\n4294965352\n4294964437\n2493\n9634\n2127\n4294961761\n4294963888\n4294958353\n4294964945\n6002\n3651\n9653\n3304\n4294962957\n4294966261\n4294961922\n4294960887\n4294965513\n9104\n7321\n4294966425\n4294963746\n4294962875\n4294959325\n4294964904\n6933\n4541\n1474\n4294966015\n4294957489\n4294966208\n6401\n5313\n1714\n4294967027\n4294958741\n4294958472\n9917\n1093\n1010\n2103\n3113\n4294965216\n4294958329\n4294966249\n7282\n6235\n3517\n4294959752\n4294963269\n4294965725\n1698\n127\n1825\n1952\n4294963777\n4294965729\n2210\n643\n2853\n3496\n4294966349\n4294959845\n4294958898\n1447\n3049\n4496\n7545\n2041\n4294959586\n4294961627\n4294963917\n8248\n4869\n3117\n4294957986\n4294961103\n1793\n5600\n7393\n2993\n4294960386\n4294963379\n4294966469\n2552\n1725\n4294964277\n4294966002\n2983\n1689\n4294964672\n4294966361\n4294963737\n2802\n9243\n2045\n4294961288\n4294963333\n4294957325\n3362\n3391\n6753\n144\n4294966897\n4294967041\n4294966642\n4294966387\n4294965733\n4294964824\n3261\n789\n4294964050\n4294964839\n1593\n9136\n729\n4294959865\n4294960594\n3163\n6461\n9624\n4294966085\n4294965709\n4294964498\n4294962911\n4294960113\n4294965728\n8545\n6977\n4294965522\n4294962499\n4294960725\n4294965928\n9357\n7989\n4294957346\n4294965335\n4294965385\n3424\n1513\n4294964937\n4294966450\n4294964091\n3245\n40\n3285\n3325\n4294966610\n4294959935\n4294959249\n1888\n3841\n5729\n9570\n4294965299\n4294964869\n4294962872\n4294960445\n4294966021\n9170\n7895\n4294967065\n4294964960\n4294964729\n4294962393\n4294959826\n4294964923\n7453\n5080\n2533\n4294957613\n4294960146\n463\n3313\n3776\n7089\n865\n4294957954\n4294958819\n9477\n1000\n477\n1477\n1954\n3431\n4294965385\n4294958816\n4294966905\n8425\n8034\n4294966459\n4294964493\n4294963656\n4294960853\n4294967213\n770\n687\n1457\n2144\n3601\n4294965745\n4294959346\n4294957795\n9845\n344\n189\n533\n722\n1255\n1977\n3232\n4294965209\n4294958441\n4294966354\n7499\n6557\n4294964056\n4294960613\n4294957373\n690\n767\n1457\n2224\n3681\n5905\n9586\n4294965491\n4294965077\n4294963272\n4294961053\n4294967029\n786\n519\n1305\n1824\n3129\n4294964953\n4294958082\n4294965739\n6525\n4968\n1493\n4294966461\n4294957954\n4294967119\n7777\n7600\n4294965377\n4294962977\n4294961058\n4294966739\n501\n9944\n445\n4294960389\n4294960834\n4294963927\n7465\n4096\n1561\n4294965657\n4294967218\n4294965579\n4294965501\n4294963784\n1989\n8477\n466\n4294958943\n4294959409\n1056\n3169\n4225\n7394\n1619\n4294959013\n4294960632\n2349\n5685\n8034\n4294963719\n4294961753\n4294958176\n2633\n3513\n6146\n9659\n4294965805\n4294965464\n4294963973\n4294962141\n4294958818\n4294963663\n5185\n1552\n6737\n8289\n4294965026\n4294963315\n4294961045\n4294967064\n813\n581\n1394\n1975\n3369\n4294965344\n4294958713\n4294966761\n8178\n7643\n4294965821\n4294963464\n4294961989\n4294958157\n2850\n3711\n6561\n272\n4294966833\n4294967105\n4294966642\n4294966451\n4294965797\n4294964952\n3453\n1109\n4294964562\n4294965671\n2937\n1312\n4294964249\n4294965561\n2514\n779\n3293\n4294964072\n4294957365\n4294964141\n4210\n1055\n5265\n6320\n1585\n4294957905\n4294959490\n99\n2293\n2392\n4685\n7077\n1762\n4294958839\n4294960601\n2144\n5449\n7593\n3042\n4294960635\n4294963677\n4294967016\n3397\n3117\n4294966514\n4294959631\n4294958849\n1184\n2737\n3921\n6658\n579\n4294967237\n4294957816\n4294957757\n8277\n8738\n7015\n4294965753\n4294962768\n4294961225\n4294966697\n626\n27\n653\n680\n1333\n2013\n3346\n4294965359\n4294958705\n4294966768\n8177\n7649\n4294965826\n4294963475\n4294962005\n4294958184\n2893\n3781\n6674\n455\n4294967129\n4294957584\n4294957417\n7705\n7826\n5531\n3357\n4294958888\n4294962245\n4294963837\n8786\n5327\n4294964113\n4294959440\n4294966257\n8401\n7362\n4294965763\n4294963125\n4294961592\n4294957421\n1717\n1842\n3559\n5401\n8960\n4294964361\n4294963321\n4294960386\n4294966411\n9501\n8616\n4294958117\n4294966733\n4294957554\n4294966991\n7249\n6944\n4294964193\n4294961137\n4294958034\n1875\n2613\n4488\n7101\n1589\n4294958690\n4294960279\n1673\n4656\n6329\n985\n4294957314\n4294958299\n8317\n9320\n7637\n4294966957\n4294964594\n4294964255\n4294961553\n4294958512\n2769\n3985\n6754\n739\n4294957493\n4294958232\n8429\n9365\n7794\n4294967159\n4294964953\n4294964816\n4294962473\n4294959993\n4294965170\n7867\n5741\n3608\n4294959349\n4294962957\n4294965010\n671\n8385\n9056\n4294957441\n4294966497\n4294966642\n4294965843\n4294965189\n4294963736\n1629\n8069\n9698\n4294957767\n4294957465\n4294957936\n8105\n8745\n6850\n4294965595\n4294962445\n4294960744\n4294965893\n9341\n7938\n4294967279\n4294965217\n4294965200\n4294963121\n4294961025\n4294966850\n579\n133\n712\n845\n1557\n2402\n4294963959\n4294966361\n3024\n2089\n4294965113\n4294967202\n4294965019\n4294964925\n2648\n277\n2925\n3202\n4294966127\n4294959329\n4294958160\n193\n1057\n1250\n2307\n3557\n5864\n9421\n4294965285\n4294964706\n4294962695\n4294960105\n4294965504\n8313\n6521\n4294964834\n4294961355\n4294958893\n2952\n4549\n7501\n2050\n4294959551\n4294961601\n4294963856\n8161\n4721\n2882\n4294957603\n4294960485\n792\n3981\n4773\n8754\n3527\n4294962281\n4294965808\n4294960793\n4294959305\n2802\n4811\n7613\n2424\n4294960037\n4294962461\n4294965202\n367\n8273\n8640\n4294966913\n4294965553\n4294965170\n4294963427\n4294961301\n4294957432\n1437\n1573\n3010\n4583\n7593\n2176\n4294959769\n4294961945\n4294964418\n9067\n6189\n4294965256\n4294961445\n4294959405\n3554\n5663\n9217\n4294964880\n4294964097\n4294961681\n4294958482\n2867\n4053\n6920\n973\n4294957893\n4294958866\n9463\n1033\n496\n1529\n2025\n3554\n4294965579\n4294959133\n4294957416\n9253\n9373\n8626\n4294957999\n4294966625\n4294957328\n4294966657\n6689\n6050\n2739\n4294958789\n4294961528\n3021\n7253\n274\n4294957527\n4294957801\n8032\n8537\n6569\n4294965106\n4294961675\n4294959485\n4294963864\n6053\n2621\n8674\n1295\n4294959969\n4294961264\n4294963937\n7905\n4546\n2451\n4294966997\n4294959448\n4294959149\n1301\n3154\n4455\n7609\n2064\n4294959673\n4294961737\n4294964114\n8555\n5373\n4294963928\n4294959301\n4294965933\n7938\n6575\n4294964513\n4294961088\n4294958305\n2097\n3106\n5203\n8309\n3512\n4294961821\n4294965333\n4294959858\n4294957895\n457\n1056\n1513\n2569\n4082\n6651\n733\n4294957384\n4294958117\n8205\n9026\n7231\n4294966257\n4294963488\n4294962449\n4294958641\n4294963794\n5139\n1637\n6776\n8413\n4294965189\n4294963602\n4294961495\n4294957801\n2000\n2505\n4505\n7010\n1515\n4294958525\n4294960040\n1269\n4013\n5282\n9295\n4294964577\n4294963872\n4294961153\n4294957729\n1586\n2019\n3605\n5624\n9229\n4294964853\n4294964082\n4294961639\n4294958425\n2768\n3897\n6665\n562\n4294967227\n4294957789\n4294957720\n8213\n8637\n6850\n4294965487\n4294962337\n4294960528\n4294965569\n8801\n7074\n4294965875\n4294962949\n4294961528\n4294967181\n1413\n1298\n2711\n4294964009\n4294966720\n3433\n2857\n4294966290\n4294959147\n4294958141\n9992\n837\n829\n1666\n2495\n4294964161\n4294966656\n3521\n2881\n4294966402\n4294959283\n4294958389\n376\n1469\n1845\n3314\n5159\n8473\n3632\n4294962105\n4294965737\n4294960546\n4294958987\n2237\n3928\n6165\n93\n4294966258\n4294966351\n4294965313\n4294964368\n2385\n9457\n1842\n4294961299\n4294963141\n4294967144\n2989\n2837\n4294965826\n4294958663\n4294967193\n8560\n8457\n4294967017\n4294965474\n4294965195\n4294963373\n4294961272\n4294957349\n1325\n1378\n2703\n4081\n6784\n865\n4294957649\n4294958514\n8867\n85\n8952\n9037\n4294957989\n4294967026\n4294957719\n4294957449\n7872\n8025\n5897\n4294963922\n4294959819\n4294966445\n8968\n8117\n4294967085\n4294965202\n4294964991\n4294962897\n4294960592\n4294966193\n9489\n8386\n4294957875\n4294966261\n4294966840\n4294965805\n4294965349\n4294963858\n1911\n8473\n384\n4294958857\n4294959241\n802\n2747\n3549\n6296\n9845\n4294966141\n4294965986\n4294964831\n4294963521\n4294961056\n4294967281\n1041\n1026\n2067\n3093\n4294965160\n4294958253\n4294966117\n7074\n5895\n2969\n4294958864\n4294961833\n3401\n7938\n1339\n4294959277\n4294960616\n2597\n5917\n8514\n4294964431\n4294962945\n4294960080\n4294965729\n8513\n6946\n4294965459\n4294962405\n4294960568\n4294965677\n8949\n7330\n4294966279\n4294963609\n4294962592\n4294958905\n4294964201\n5810\n2715\n8525\n1240\n4294959765\n4294961005\n3474\n7183\n657\n4294957840\n4294958497\n9041\n242\n9283\n9525\n4294958808\n4294958333\n4294959845\n882\n3431\n4313\n7744\n2057\n4294959801\n4294961858\n4294964363\n8925\n5992\n4294964917\n4294960909\n4294958530\n2143\n3377\n5520\n8897\n4294964417\n4294963314\n4294960435\n4294966453\n9592\n8749\n4294958341\n4294967090\n4294958135\n4294957929\n8768\n9401\n8169\n4294957570\n4294965739\n4294966013\n4294964456\n3173\n333\n3506\n4294963839\n4294957345\n4294963888\n3937\n529\n4466\n4995\n9461\n4294964456\n4294963917\n4294961077\n4294957698\n1479\n1881\n3360\n5241\n8601\n4294963842\n4294962443\n4294958989\n4294964136\n5829\n2669\n8498\n1167\n4294959665\n4294960832\n3201\n6737\n9938\n4294966675\n4294966613\n4294965992\n4294965309\n4294964005\n4294962018\n4294958727\n3449\n4880\n8329\n3209\n4294961538\n4294964747\n4294958989\n4294966440\n8133\n7277\n4294965410\n4294962687\n4294960801\n4294966192\n9697\n8593\n4294958290\n4294966883\n4294957877\n4294957464\n8045\n8213\n6258\n4294964471\n4294960729\n4294957904\n1337\n1945\n3282\n5227\n8509\n4294963736\n4294962245\n4294958685\n3634\n5023\n8657\n4294963680\n4294962337\n4294958721\n4294963762\n5187\n1653\n6840\n8493\n4294965333\n4294963826\n4294961863\n4294958393\n2960\n4057\n7017\n1074\n4294958091\n4294959165\n9960\n1829\n1789\n3618\n4294965407\n4294959025\n4294967136\n8865\n8705\n4294957570\n4294966275\n4294966549\n4294965528\n4294964781\n3013\n498\n3511\n4294964009\n4294957520\n4294964233\n4457\n1394\n5851\n7245\n3096\n4294960341\n4294963437\n4294966482\n2623\n1809\n4294964432\n4294966241\n3377\n2322\n4294965699\n4294958021\n4294966424\n7149\n6277\n3426\n4294959703\n4294963129\n4294965536\n1369\n9609\n978\n4294960587\n4294961565\n4294964856\n9125\n6685\n4294965810\n4294962495\n4294961009\n4294966208\n9921\n8833\n4294958754\n4294957587\n4294959045\n9336\n1085\n421\n1506\n1927\n3433\n4294965360\n4294958793\n4294966857\n8354\n7915\n4294966269\n4294964184\n4294963157\n4294960045\n4294965906\n8655\n7265\n4294965920\n4294963185\n4294961809\n4294957698\n2211\n2613\n4824\n7437\n2261\n4294959698\n4294961959\n4294964361\n9024\n6089\n4294965113\n4294961202\n4294959019\n2925\n4648\n7573\n2221\n4294959794\n4294962015\n4294964513\n9232\n6449\n4294965681\n4294962130\n4294960515\n4294965349\n8568\n6621\n4294965189\n4294961810\n4294959703\n4294964217\n6624\n3545\n169\n4294963714\n4294963883\n301\n6888\n7189\n4294964077\n4294961266\n4294958047\n2017\n2768\n4785\n7553\n2338\n4294959891\n4294962229\n4294964824\n9757\n7285\n4294967042\n4294964327\n4294964073\n4294961104\n4294957881\n1689\n2274\n3963\n6237\n200\n4294966437\n4294966637\n4294965778\n4294965119\n3601\n1424\n4294965025\n4294966449\n4294964178\n3331\n213\n3544\n4294963757\n4294957301\n4294963762\n3767\n233\n4000\n4233\n8233\n2466\n4294960699\n4294963165\n4294966568\n2437\n1709\n4294964146\n4294965855\n2705\n1264\n4294963969\n4294965233\n1906\n9843\n1749\n4294961592\n4294963341\n4294957637\n4294963682\n4023\n409\n4432\n4841\n9273\n4294964114\n4294963387\n4294960205\n4294966296\n9205\n8205\n4294957410\n4294965615\n4294965729\n4294964048\n2481\n9233\n1714\n4294960947\n4294962661\n4294966312\n1677\n693\n2370\n3063\n4294965433\n4294958496\n4294966633\n7833\n7170\n4294965003\n4294962173\n4294959880\n4294964757\n7341\n4802\n2143\n4294966945\n4294959088\n4294958737\n529\n1970\n2499\n4469\n6968\n1437\n4294958405\n4294959842\n951\n3497\n4448\n7945\n2393\n4294960338\n4294962731\n4294965773\n1208\n9685\n893\n4294960578\n4294961471\n4294964753\n8928\n6385\n4294965313\n4294961698\n4294959715\n4294964117\n6536\n3357\n9893\n3250\n4294963143\n4294966393\n4294962240\n4294961337\n4294966281\n322\n9307\n9629\n4294958936\n4294958565\n4294960205\n1474\n4383\n5857\n240\n4294966097\n4294966337\n4294965138\n4294964179\n2021\n8904\n925\n4294959829\n4294960754\n3287\n6745\n32\n4294966777\n4294966809\n4294966290\n4294965803\n4294964797\n3304\n805\n4294964109\n4294964914\n1727\n9345\n1072\n4294960417\n4294961489\n4294964610\n8803\n6117\n4294964920\n4294961037\n4294958661\n2402\n3767\n6169\n9936\n4294966105\n4294966041\n4294964850\n4294963595\n4294961149\n4294957448\n1301\n1453\n2754\n4207\n6961\n1168\n4294958129\n4294959297\n130\n2131\n2261\n4392\n6653\n1045\n4294957698\n4294958743\n9145\n592\n9737\n329\n4294960066\n4294960395\n3165\n6264\n9429\n4294965693\n4294965122\n4294963519\n4294961345\n4294957568\n1617\n1889\n3506\n5395\n8901\n4294964296\n4294963197\n4294960197\n4294966098\n8999\n7801\n4294966800\n4294964601\n4294964105\n4294961410\n4294958219\n2333\n3256\n5589\n8845\n4294964434\n4294963279\n4294960417\n4294966400\n9521\n8625\n4294958146\n4294966771\n4294957621\n4294967096\n7421\n7221\n4294964642\n4294961863\n4294959209\n4294963776\n5689\n2169\n7858\n27\n4294957885\n4294957912\n8501\n9117\n7618\n4294966735\n4294964353\n4294963792\n4294960849\n4294957345\n898\n947\n1845\n2792\n4637\n7429\n2066\n4294959495\n4294961561\n4294963760\n8025\n4489\n2514\n4294967003\n4294959517\n4294959224\n1445\n3373\n4818\n8191\n3009\n4294961200\n4294964209\n4294958113\n4294965026\n5843\n3573\n9416\n2989\n4294962405\n4294965394\n4294960503\n4294958601\n1808\n3113\n4921\n8034\n2955\n4294960989\n4294963944\n4294957637\n4294964285\n4626\n1615\n6241\n7856\n4294964097\n4294961953\n4294958754\n3411\n4869\n8280\n3149\n4294961429\n4294964578\n4294958711\n4294965993\n7408\n6105\n3513\n4294959618\n4294963131\n4294965453\n1288\n9445\n733\n4294960178\n4294960911\n4294963793\n7408\n3905\n1313\n4294965218\n4294966531\n4294964453\n4294963688\n845\n7237\n8082\n4294965319\n4294963401\n4294961424\n4294957529\n1657\n1890\n3547\n5437\n8984\n4294964421\n4294963405\n4294960530\n4294966639\n9873\n9216\n4294959089\n4294958305\n4294960098\n1107\n3909\n5016\n8925\n4294963941\n4294962866\n4294959511\n4294965081\n7296\n5081\n2377\n4294957458\n4294959835\n9997\n2536\n2533\n4294965069\n4294957602\n4294965375\n5681\n3760\n9441\n3201\n4294962642\n4294965843\n4294961189\n4294959736\n3629\n6069\n9698\n4294965767\n4294965465\n4294963936\n4294962105\n4294958745\n3554\n5003\n8557\n3560\n4294962117\n4294965677\n4294960498\n4294958879\n2081\n3664\n5745\n9409\n4294965154\n4294964563\n4294962421\n4294959688\n4294964813\n7205\n4722\n1927\n4294966649\n4294958576\n4294957929\n9209\n9842\n9051\n4294958893\n4294957944\n4294959541\n189\n2434\n2623\n5057\n7680\n2737\n4294960417\n4294963154\n4294966275\n2133\n1112\n3245\n4294964357\n4294957602\n4294964663\n4969\n2336\n7305\n9641\n4294966946\n4294966587\n4294966237\n4294965528\n4294964469\n4294962701\n4294959874\n4294965279\n7857\n5840\n4294963697\n4294959537\n4294965938\n8179\n6821\n4294965000\n4294961821\n4294959525\n4294964050\n6279\n3033\n9312\n2345\n4294961657\n4294964002\n4294958363\n4294965069\n6136\n3909\n45\n4294963954\n4294963999\n657\n7360\n8017\n4294965377\n4294963394\n4294961475\n4294957573\n1752\n2029\n3781\n5810\n9591\n4294965401\n4294964992\n4294963097\n4294960793\n4294966594\n91\n9389\n9480\n4294958869\n4294958349\n4294959922\n975\n3601\n4576\n8177\n2753\n4294960930\n4294963683\n4294957317\n4294963704\n3725\n133\n3858\n3991\n7849\n1840\n4294959689\n4294961529\n4294963922\n8155\n4781\n2936\n4294957717\n4294960653\n1074\n4431\n5505\n9936\n4294965441\n4294965377\n4294963522\n4294961603\n4294957829\n2136\n2669\n4805\n7474\n2279\n4294959753\n4294962032\n4294964489\n9225\n6418\n4294965643\n4294962061\n4294960408\n4294965173\n8285\n6162\n4294964447\n4294960609\n4294957760\n1073\n1537\n2610\n4147\n6757\n904\n4294957661\n4294958565\n8930\n199\n9129\n9328\n4294958457\n4294957785\n4294958946\n9435\n1085\n520\n1605\n2125\n4294963730\n4294965855\n2289\n848\n3137\n4294963985\n4294967122\n4294963811\n3637\n152\n4294963789\n4294963941\n434\n7079\n7513\n4294964592\n4294962105\n4294959401\n4294964210\n6315\n3229\n9544\n2773\n4294962317\n4294965090\n4294960111\n4294957905\n720\n1329\n2049\n3378\n5427\n8805\n4294964232\n4294963037\n4294959973\n4294965714\n8391\n6809\n4294965200\n4294962009\n4294959913\n4294964626\n7243\n4573\n1816\n4294966389\n4294958205\n4294957298\n8207\n8209\n6416\n4294964625\n4294961041\n4294958370\n2115\n3189\n5304\n8493\n4294963797\n4294962290\n4294958791\n4294963785\n5280\n1769\n7049\n8818\n4294965867\n4294964685\n4294963256\n4294960645\n4294966605\n9954\n9263\n4294959217\n4294958480\n4294960401\n1585\n4690\n6275\n965\n4294967240\n4294958205\n4294958149\n9058\n9911\n8969\n4294958880\n4294957849\n4294959433\n9986\n2123\n2109\n4294964232\n4294966341\n3277\n2322\n4294965599\n4294957921\n4294966224\n6849\n5777\n2626\n4294958403\n4294961029\n2136\n5869\n8005\n4294963874\n4294961879\n4294958457\n3040\n4201\n7241\n1442\n4294958683\n4294960125\n1512\n4341\n5853\n194\n4294966047\n4294966241\n4294964992\n4294963937\n1633\n8274\n9907\n4294958181\n4294958088\n4294958973\n9765\n1442\n1207\n2649\n4294963856\n4294966505\n3065\n2274\n4294965339\n4294957613\n4294965656\n5973\n4333\n306\n4294964639\n4294964945\n2288\n9937\n2225\n4294962162\n4294964387\n4294959253\n4294966344\n8301\n7349\n4294965650\n4294962999\n4294961353\n4294967056\n1113\n873\n1986\n2859\n4294964845\n4294957704\n4294965253\n5661\n3618\n9279\n2897\n4294962176\n4294965073\n4294959953\n4294957730\n387\n821\n1208\n2029\n3237\n5266\n8503\n4294963769\n4294962272\n4294958745\n4294963721\n5170\n1595\n6765\n8360\n4294965125\n4294963485\n4294961314\n4294957503\n1521\n1728\n3249\n4977\n8226\n3203\n4294961429\n4294964632\n4294958765\n4294966101\n7570\n6375\n4294963945\n4294960320\n4294966969\n9993\n9666\n4294959659\n4294959325\n4294961688\n4294963717\n8109\n4530\n2639\n4294967169\n4294959808\n4294959681\n2193\n4578\n6771\n1349\n4294958120\n4294959469\n293\n2466\n2759\n5225\n7984\n3209\n4294961193\n4294964402\n4294958299\n4294965405\n6408\n4517\n925\n4294965442\n4294966367\n4294964513\n3584\n801\n4294964385\n4294965186\n2275\n165\n2440\n2605\n4294965045\n4294957650\n4294965399\n5753\n3856\n9609\n3465\n4294963074\n4294966539\n4294962317\n4294961560\n4294966581\n845\n130\n975\n1105\n2080\n3185\n4294965265\n4294958450\n4294966419\n7573\n6696\n4294964269\n4294960965\n4294957938\n1607\n2249\n3856\n6105\n9961\n4294966066\n4294966027\n4294964797\n4294963528\n4294961029\n4294967261\n994\n959\n1953\n2912\n4294964865\n4294957777\n4294965346\n5827\n3877\n9704\n3581\n4294963285\n4294966866\n4294962855\n4294962425\n4294957984\n3113\n3801\n6914\n715\n4294957629\n4294958344\n8677\n9725\n8402\n4294958127\n4294966529\n4294957360\n4294966593\n6657\n5954\n2611\n4294958565\n4294961176\n2445\n6325\n8770\n4294965095\n4294963865\n4294961664\n4294958233\n2601\n3538\n6139\n9677\n4294965816\n4294965493\n4294964013\n4294962210\n4294958927\n4294963841\n5472\n2017\n7489\n9506\n4294966995\n4294966501\n4294966200\n4294965405\n4294964309\n4294962418\n4294959431\n4294964553\n6688\n3945\n633\n4294964578\n4294965211\n2493\n408\n2901\n3309\n4294966210\n4294959519\n4294958433\n656\n1793\n2449\n4242\n6691\n933\n4294957624\n4294958557\n8885\n146\n9031\n9177\n4294958208\n4294957385\n4294958297\n8386\n9387\n7773\n4294967160\n4294964933\n4294964797\n4294962434\n4294959935\n4294965073\n7712\n5489\n3201\n4294958690\n4294961891\n3285\n7880\n1165\n4294959045\n4294960210\n1959\n4873\n6832\n1705\n4294958537\n4294960242\n1483\n4429\n5912\n341\n4294966253\n4294966594\n4294965551\n4294964849\n3104\n657\n4294963761\n4294964418\n883\n8005\n8888\n4294966893\n4294965781\n4294965378\n4294963863\n4294961945\n4294958512\n3161\n4377\n7538\n1915\n4294959453\n4294961368\n3525\n7597\n1122\n4294958719\n4294959841\n1264\n3809\n5073\n8882\n4294963955\n4294962837\n4294959496\n4294965037\n7237\n4978\n2215\n4294967193\n4294959408\n4294959305\n1417\n3426\n4843\n8269\n3112\n4294961381\n4294964493\n4294958578\n4294965775\n7057\n5536\n2593\n4294958129\n4294960722\n1555\n4981\n6536\n1517\n4294958053\n4294959570\n327\n2601\n2928\n5529\n8457\n4294963986\n4294962443\n4294959133\n4294964280\n6117\n3101\n9218\n2319\n4294961537\n4294963856\n4294958097\n4294964657\n5458\n2819\n8277\n1096\n4294959373\n4294960469\n2546\n5719\n8265\n4294963984\n4294962249\n4294958937\n4294963890\n5531\n2125\n7656\n9781\n4294957437\n4294967218\n4294957359\n4294967281\n7344\n7329\n4294964673\n4294962002\n4294959379\n4294964085\n6168\n2957\n9125\n2082\n4294961207\n4294963289\n4294967200\n3193\n3097\n4294966290\n4294959387\n4294958381\n472\n1557\n2029\n3586\n5615\n9201\n4294964816\n4294964017\n4294961537\n4294958258\n2499\n3461\n5960\n9421\n4294965381\n4294964802\n4294962887\n4294960393\n4294965984\n9081\n7769\n4294966850\n4294964619\n4294964173\n4294961496\n4294958373\n2573\n3650\n6223\n9873\n4294966096\n4294965969\n4294964769\n4294963442\n4294960915\n4294967061\n680\n445\n1125\n1570\n2695\n4294964265\n4294966960\n4294963929\n3593\n226\n4294963819\n4294964045\n568\n7317\n7885\n4294965202\n4294963087\n4294960993\n4294966784\n481\n9969\n450\n4294960419\n4294960869\n4294963992\n7565\n4261\n1826\n4294966087\n4294957913\n4294966704\n7321\n6729\n4294964050\n4294960779\n4294957533\n1016\n1253\n2269\n3522\n5791\n9313\n4294965104\n4294964417\n4294962225\n4294959346\n4294964275\n6325\n3304\n9629\n2933\n4294962562\n4294965495\n4294960761\n4294958960\n2425\n4089\n6514\n603\n4294967117\n4294957720\n4294957541\n7965\n8210\n6175\n4294964385\n4294960560\n4294957649\n913\n1266\n2179\n3445\n5624\n9069\n4294964693\n4294963762\n4294961159\n4294957625\n1488\n1817\n3305\n5122\n8427\n3549\n4294961976\n4294965525\n4294960205\n4294958434\n1343\n2481\n3824\n6305\n129\n4294966434\n4294966563\n4294965701\n4294964968\n3373\n1045\n4294964418\n4294965463\n2585\n752\n3337\n4294964089\n4294957426\n4294964219\n4349\n1272\n5621\n6893\n2514\n4294959407\n4294961921\n4294964032\n8657\n5393\n4294964050\n4294959443\n4294966197\n8344\n7245\n4294965589\n4294962834\n4294961127\n4294966665\n496\n9865\n361\n4294960226\n4294960587\n3517\n6808\n325\n4294967133\n4294957458\n4294967295\n7457\n7456\n4294964913\n4294962369\n4294959986\n4294965059\n7749\n5512\n3261\n4294958773\n4294962034\n3511\n8249\n1760\n4294960009\n4294961769\n4294964482\n8955\n6141\n4294965096\n4294961237\n4294959037\n2978\n4719\n7697\n2416\n4294960113\n4294962529\n4294965346\n579\n8629\n9208\n4294957837\n4294967045\n4294957586\n4294957335\n7625\n7664\n5289\n2953\n4294958242\n4294961195\n2141\n6040\n8181\n4294964221\n4294962402\n4294959327\n4294964433\n6464\n3601\n65\n4294963666\n4294963731\n101\n6536\n6637\n3173\n4294959810\n4294962983\n4294965497\n1184\n9385\n569\n4294959954\n4294960523\n3181\n6408\n9589\n4294965997\n4294965586\n4294964287\n4294962577\n4294959568\n4294964849\n7121\n4674\n1795\n4294966469\n4294958264\n4294957437\n8405\n8546\n6951\n4294965497\n4294962448\n4294960649\n4294965801\n9154\n7659\n4294966813\n4294964472\n4294963989\n4294961165\n4294957858\n1727\n2289\n4016\n6305\n321\n4294966626\n4294966947\n4294966277\n4294965928\n4294964909\n3541\n1154\n4294964695\n4294965849\n3248\n1801\n4294965049\n4294966850\n4294964603\n4294964157\n1464\n8325\n9789\n4294958114\n4294957903\n4294958721\n9328\n753\n81\n834\n915\n1749\n2664\n4294964413\n4294967077\n4294964194\n4294963975\n873\n7552\n8425\n4294965977\n4294964402\n4294963083\n4294960189\n4294965976\n8869\n7549\n4294966418\n4294963967\n4294963089\n4294959760\n4294965553\n8017\n6274\n4294964291\n4294960565\n4294957560\n829\n1093\n1922\n3015\n4937\n7952\n2889\n4294960841\n4294963730\n4294967275\n4294963709\n4294963688\n101\n6493\n6594\n3087\n4294959681\n4294962768\n4294965153\n625\n8482\n9107\n4294957589\n4294966696\n4294966989\n4294966389\n4294966082\n4294965175\n4294963961\n1840\n8505\n345\n4294958850\n4294959195\n749\n2648\n3397\n6045\n9442\n4294965487\n4294964929\n4294963120\n4294960753\n4294966577\n34\n9315\n9349\n4294958664\n4294958013\n4294959381\n98\n2183\n2281\n4464\n6745\n1209\n4294957954\n4294959163\n9821\n1688\n1509\n3197\n4294964706\n4294957903\n4294965313\n5920\n3937\n9857\n4294963794\n4294963651\n4294960149\n4294966504\n9357\n8565\n4294957922\n4294966487\n4294967113\n4294966304\n4294966121\n4294965129\n4294963954\n1787\n8445\n232\n4294958677\n4294958909\n290\n1903\n2193\n4096\n6289\n385\n4294966674\n4294967059\n4294966437\n4294966200\n4294965341\n4294964245\n2290\n9239\n1529\n4294960768\n4294962297\n4294965769\n770\n9243\n13\n4294959256\n4294959269\n1229\n3202\n4431\n7633\n2064\n4294959697\n4294961761\n4294964162\n8627\n5493\n4294964120\n4294959613\n4294966437\n8754\n7895\n4294966649\n4294964544\n4294963897\n4294961145\n4294957746\n1595\n2045\n3640\n5685\n9325\n4294965010\n4294964335\n4294962049\n4294959088\n4294963841\n5633\n2178\n7811\n9989\n4294957800\n4294957789\n4294958293\n8786\n9783\n8569\n4294958352\n4294966921\n4294957977\n4294957602\n8283\n8589\n6872\n4294965461\n4294962333\n4294960498\n4294965535\n8737\n6976\n4294965713\n4294962689\n4294961106\n4294966499\n309\n9512\n9821\n4294959333\n4294959154\n4294961191\n3049\n6944\n9993\n4294966937\n4294966930\n4294966571\n4294966205\n4294965480\n4294964389\n4294962573\n4294959666\n4294964943\n7313\n4960\n2273\n4294967233\n4294959506\n4294959443\n1653\n3800\n5453\n9253\n4294964706\n4294963959\n4294961369\n4294958032\n2105\n2841\n4946\n7787\n2733\n4294960520\n4294963253\n4294966477\n2434\n1615\n4294964049\n4294965664\n2417\n785\n3202\n4294963987\n4294967189\n4294963880\n4294963773\n357\n6834\n7191\n4294964025\n4294961216\n4294957945\n1865\n2514\n4379\n6893\n1272\n4294958165\n4294959437\n306\n2447\n2753\n5200\n7953\n3153\n4294961106\n4294964259\n4294958069\n4294965032\n5805\n3541\n9346\n2887\n4294962233\n4294965120\n4294960057\n4294957881\n642\n1227\n1869\n3096\n4965\n8061\n3026\n4294961087\n4294964113\n4294957904\n4294964721\n5329\n2754\n8083\n837\n4294958920\n4294959757\n1381\n3842\n5223\n9065\n4294964288\n4294963353\n4294960345\n4294966402\n9451\n8557\n4294958008\n4294966565\n4294967277\n4294966546\n4294966527\n4294965777\n4294965008\n3489\n1201\n4294964690\n4294965891\n3285\n1880\n4294965165\n4294967045\n4294964914\n4294964663\n2281\n9648\n1929\n4294961577\n4294963506\n4294957787\n4294963997\n4488\n1189\n5677\n6866\n2543\n4294959409\n4294961952\n4294964065\n8721\n5490\n4294964211\n4294959701\n4294966616\n9021\n8341\n4294957362\n4294965703\n4294965769\n4294964176\n2649\n9529\n2178\n4294961707\n4294963885\n4294958296\n4294964885\n5885\n3474\n9359\n2833\n4294962192\n4294965025\n4294959921\n4294957650\n275\n629\n904\n1533\n2437\n3970\n6407\n377\n4294966784\n4294967161\n4294966649\n4294966514\n4294965867\n4294965085\n4294963656\n1445\n7805\n9250\n4294967055\n4294966305\n4294966064\n4294965073\n4294963841\n4294961618\n4294958163\n2485\n3352\n5837\n9189\n4294965026\n4294964215\n4294961945\n4294958864\n3513\n5081\n8594\n4294963675\n4294962269\n4294958648\n3621\n4973\n8594\n3567\n4294962161\n4294965728\n4294960593\n4294959025\n2322\n4051\n6373\n424\n4294966797\n4294967221\n4294966722\n4294966647\n4294966073\n4294965424\n4294964201\n2329\n9234\n1563\n4294960797\n4294962360\n4294965861\n925\n9490\n415\n4294959905\n4294960320\n2929\n5953\n8882\n4294964835\n4294963717\n4294961256\n4294957677\n1637\n2018\n3655\n5673\n9328\n4294965001\n4294964329\n4294962034\n4294959067\n4294963805\n5576\n2085\n7661\n9746\n4294957407\n4294967153\n4294967264\n4294967121\n4294967089\n4294966914\n4294966707\n4294966325\n4294965736\n4294964765\n3205\n674\n4294963879\n4294964553\n1136\n8393\n9529\n4294957922\n4294957451\n4294958077\n8232\n9013\n7245\n4294966258\n4294963503\n4294962465\n4294958672\n4294963841\n5217\n1762\n6979\n8741\n4294965720\n4294964461\n4294962885\n4294960050\n4294965639\n8393\n6736\n4294965129\n4294961865\n4294959698\n4294964267\n6669\n3640\n309\n4294963949\n4294964258\n911\n7873\n8784\n4294966657\n4294965441\n4294964802\n4294962947\n4294960453\n4294966104\n9261\n8069\n4294957330\n4294965399\n4294965433\n3536\n1673\n4294965209\n4294966882\n4294964795\n4294964381\n1880\n8965\n845\n4294959810\n4294960655\n3169\n6528\n9697\n4294966225\n4294965922\n4294964851\n4294963477\n4294961032\n4294967213\n949\n866\n1815\n2681\n4294964496\n4294967177\n4294964377\n4294964258\n1339\n8301\n9640\n4294957941\n4294957581\n4294958226\n8511\n9441\n7952\n4294957393\n4294965345\n4294965442\n3491\n1637\n4294965128\n4294966765\n4294964597\n4294964066\n1367\n8137\n9504\n4294957641\n4294967145\n4294957490\n4294957339\n7533\n7576\n5109\n2685\n4294957794\n4294960479\n977\n4160\n5137\n9297\n4294964434\n4294963731\n4294960869\n4294957304\n877\n885\n1762\n2647\n4409\n7056\n1465\n4294958521\n4294959986\n1211\n3901\n5112\n9013\n4294964125\n4294963138\n4294959967\n4294965809\n8480\n6993\n4294965473\n4294962466\n4294960643\n4294965813\n9160\n7677\n4294966837\n4294964514\n4294964055\n4294961273\n4294958032\n2009\n2745\n4754\n7499\n2253\n4294959752\n4294962005\n4294964461\n9170\n6335\n4294965505\n4294961840\n4294960049\n4294964593\n7346\n4643\n1989\n4294966632\n4294958621\n4294957957\n9282\n9943\n9225\n4294959168\n4294958393\n4294960265\n1362\n4331\n5693\n24\n4294965717\n4294965741\n4294964162\n2607\n9473\n2080\n4294961553\n4294963633\n4294957890\n4294964227\n4821\n1752\n6573\n8325\n4294964898\n4294963223\n4294960825\n4294966752\n281\n9737\n18\n4294959755\n4294959773\n2232\n4709\n6941\n1650\n4294958591\n4294960241\n1536\n4481\n6017\n498\n4294966515\n4294967013\n4294966232\n4294965949\n4294964885\n3538\n1127\n4294964665\n4294965792\n3161\n1657\n4294964818\n4294966475\n4294963997\n3176\n9877\n3053\n4294962930\n4294965983\n4294961617\n4294960304\n4294964625\n7633\n4962\n2595\n4294957557\n4294960152\n413\n3269\n3682\n6951\n633\n4294957584\n4294958217\n8505\n9426\n7931\n4294957357\n4294965288\n4294965349\n3341\n1394\n4294964735\n4294966129\n3568\n2401\n4294965969\n4294958370\n4294967043\n8117\n7864\n4294965981\n4294963845\n4294962530\n4294959079\n4294964313\n6096\n3113\n9209\n2322\n4294961531\n4294963853\n4294958088\n4294964645\n5437\n2786\n8223\n1009\n4294959232\n4294960241\n2177\n5122\n7299\n2421\n4294959720\n4294962141\n4294964565\n9410\n6679\n4294966089\n4294962768\n4294961561\n4294967033\n1298\n1035\n2333\n3368\n4294965701\n4294959069\n4294957474\n9247\n9425\n8672\n4294958097\n4294966769\n4294957570\n4294967043\n7317\n7064\n4294964381\n4294961445\n4294958530\n2679\n3913\n6592\n505\n4294967097\n4294957602\n4294957403\n7709\n7816\n5525\n3341\n4294958866\n4294962207\n4294963777\n8688\n5169\n4294963857\n4294959026\n4294965587\n7317\n5608\n2925\n4294958533\n4294961458\n2695\n6857\n9552\n4294966409\n4294965961\n4294965074\n4294963739\n4294961517\n4294957960\n2181\n2845\n5026\n7871\n2897\n4294960768\n4294963665\n4294967137\n3506\n3347\n4294966853\n4294960200\n4294959757\n2661\n5122\n7783\n2905\n4294960688\n4294963593\n4294966985\n3282\n2971\n4294966253\n4294959224\n4294958181\n109\n994\n1103\n2097\n3200\n5297\n8497\n4294963794\n4294962291\n4294958789\n4294963784\n5277\n1765\n7042\n8807\n4294965849\n4294964656\n4294963209\n4294960569\n4294966482\n9755\n8941\n4294958696\n4294957637\n4294959037\n9378\n1119\n497\n1616\n2113\n4294963729\n4294965842\n2275\n821\n3096\n4294963917\n4294967013\n3634\n3351\n4294966985\n4294960336\n4294960025\n3065\n5794\n8859\n4294964653\n4294963512\n4294960869\n4294967085\n658\n447\n1105\n1552\n2657\n4294964209\n4294966866\n4294963779\n3349\n9832\n3181\n4294963013\n4294966194\n4294961911\n4294960809\n4294965424\n8937\n7065\n4294966002\n4294963067\n4294961773\n4294957544\n2021\n2269\n4290\n6559\n849\n4294957408\n4294958257\n8369\n9330\n7699\n4294967029\n4294964728\n4294964461\n4294961893\n4294959058\n4294963655\n5417\n1776\n7193\n8969\n4294966162\n4294965131\n4294963997\n4294961832\n4294958533\n3069\n4306\n7375\n1681\n4294959056\n4294960737\n2497\n5938\n8435\n4294964373\n4294962808\n4294959885\n4294965397\n7986\n6087\n4294964073\n4294960160\n4294966937\n9801\n9442\n4294959243\n4294958685\n4294960632\n2021\n5357\n7378\n2735\n4294960113\n4294962848\n4294965665\n1217\n9586\n803\n4294960389\n4294961192\n4294964285\n8181\n5170\n3351\n4294958521\n4294961872\n3097\n7673\n770\n4294958443\n4294959213\n360\n2277\n2637\n4914\n7551\n2465\n4294960016\n4294962481\n4294965201\n386\n8291\n8677\n4294966968\n4294965645\n4294965317\n4294963666\n4294961687\n4294958057\n2448\n3209\n5657\n8866\n4294964523\n4294963389\n4294960616\n4294966709\n29\n9442\n9471\n4294958913\n4294958384\n4294960001\n1089\n3794\n4883\n8677\n3560\n4294962237\n4294965797\n4294960738\n4294959239\n2681\n4624\n7305\n1929\n4294959234\n4294961163\n3101\n6968\n69\n4294967037\n4294967106\n4294966847\n4294966657\n4294966208\n4294965569\n4294964481\n2754\n9939\n2693\n4294962632\n4294965325\n4294960661\n4294958690\n2055\n3449\n5504\n8953\n4294964457\n4294963410\n4294960571\n4294966685\n9960\n9349\n4294959309\n4294958658\n4294960671\n2033\n5408\n7441\n2849\n4294960290\n4294963139\n4294966133\n1976\n813\n2789\n3602\n4294966391\n4294959993\n4294959088\n1785\n3577\n5362\n8939\n4294964301\n4294963240\n4294960245\n4294966189\n9138\n8031\n4294967169\n4294965200\n4294965073\n4294962977\n4294960754\n4294966435\n9893\n9032\n4294958925\n4294957957\n4294959586\n247\n2537\n2784\n5321\n8105\n3426\n4294961531\n4294964957\n4294959192\n4294966853\n8749\n8306\n4294967055\n4294965361\n4294965120\n4294963185\n4294961009\n4294966898\n611\n213\n824\n1037\n1861\n2898\n4294964759\n4294957657\n4294965120\n5481\n3305\n8786\n2091\n4294960877\n4294962968\n4294966549\n2221\n1474\n4294963695\n4294965169\n1568\n9441\n1009\n4294960450\n4294961459\n4294964613\n8776\n6093\n4294964869\n4294960962\n4294958535\n2201\n3440\n5641\n9081\n4294964722\n4294963803\n4294961229\n4294957736\n1669\n2109\n3778\n5887\n9665\n4294965552\n4294965217\n4294963473\n4294961394\n4294957571\n1669\n1944\n3613\n5557\n9170\n4294964727\n4294963897\n4294961328\n4294957929\n1961\n2594\n4555\n7149\n1704\n4294958853\n4294960557\n2114\n5375\n7489\n2864\n4294960353\n4294963217\n4294966274\n2195\n1173\n3368\n4294964541\n4294957909\n4294965154\n5767\n3625\n9392\n3017\n4294962409\n4294965426\n4294960539\n4294958669\n1912\n3285\n5197\n8482\n4294963679\n4294962161\n4294958544\n3409\n4657\n8066\n2723\n4294960789\n4294963512\n4294967005\n3221\n2930\n4294966151\n4294959081\n4294957936\n9721\n361\n82\n443\n525\n968\n1493\n2461\n4294963954\n4294966415\n3073\n2192\n4294965265\n4294957457\n4294965426\n5587\n3717\n9304\n3021\n4294962325\n4294965346\n4294960375\n4294958425\n1504\n2633\n4137\n6770\n907\n4294957677\n4294958584\n8965\n253\n9218\n9471\n4294958689\n4294958160\n4294959553\n417\n2674\n3091\n5765\n8856\n4294964621\n4294963477\n4294960802\n4294966983\n489\n176\n665\n841\n1506\n2347\n4294963853\n4294966200\n2757\n1661\n4294964418\n4294966079\n3201\n1984\n4294965185\n4294967169\n4294965058\n4294964931\n2693\n328\n3021\n3349\n4294966370\n4294959719\n4294958793\n1216\n2713\n3929\n6642\n571\n4294967213\n4294957784\n4294957701\n8189\n8594\n6783\n4294965377\n4294962160\n4294960241\n4294965105\n8050\n5859\n4294963909\n4294959768\n4294966381\n8853\n7938\n4294966791\n4294964729\n4294964224\n4294961657\n4294958585\n2946\n4235\n7181\n1416\n4294958597\n4294960013\n1314\n4031\n5345\n9376\n4294964721\n4294964097\n4294961522\n4294958323\n2549\n3576\n6125\n9701\n4294965826\n4294965527\n4294964057\n4294962288\n4294959049\n4294964041\n5794\n2539\n8333\n872\n4294959205\n4294960077\n1986\n4767\n6753\n1520\n4294958273\n4294959793\n770\n3267\n4037\n7304\n1341\n4294958645\n4294959986\n1335\n4025\n5360\n9385\n4294964745\n4294964130\n4294961579\n4294958413\n2696\n3813\n6509\n322\n4294966831\n4294967153\n4294966688\n4294966545\n4294965937\n4294965186\n4294963827\n1717\n8248\n9965\n4294958213\n4294958178\n4294959095\n9977\n1776\n1753\n3529\n4294965282\n4294958811\n4294966797\n8312\n7813\n4294966125\n4294963938\n4294962767\n4294959409\n4294964880\n6993\n4577\n1570\n4294966147\n4294957717\n4294966568\n6989\n6261\n3250\n4294959511\n4294962761\n4294964976\n441\n8121\n8562\n4294966683\n4294965245\n4294964632\n4294962581\n4294959917\n4294965202\n7823\n5729\n3552\n4294959281\n4294962833\n4294964818\n355\n7877\n8232\n4294966109\n4294964341\n4294963154\n4294960199\n4294966057\n8960\n7721\n4294966681\n4294964402\n4294963787\n4294960893\n4294957384\n981\n1069\n2050\n3119\n5169\n8288\n3457\n4294961745\n4294965202\n4294959651\n4294957557\n9912\n173\n85\n258\n343\n601\n944\n1545\n2489\n4294964034\n4294966523\n3261\n2488\n4294965749\n4294958237\n4294966690\n7631\n7025\n4294964656\n4294961681\n4294959041\n3426\n5171\n8597\n4294963768\n4294962365\n4294958837\n4294963906\n5447\n2057\n7504\n9561\n4294967065\n4294966626\n4294966395\n4294965725\n4294964824\n4294963253\n4294960781\n4294966738\n223\n9665\n9888\n4294959553\n4294959441\n4294961698\n4294963843\n8245\n4792\n3037\n4294957829\n4294960866\n1399\n4969\n6368\n1337\n4294957705\n4294959042\n9451\n1197\n648\n1845\n2493\n4294964338\n4294966831\n4294963873\n3408\n9985\n3393\n4294963378\n4294966771\n4294962853\n4294962328\n4294957885\n2917\n3506\n6423\n9929\n4294966352\n4294966281\n4294965337\n4294964322\n4294962363\n4294959389\n4294964456\n6549\n3709\n258\n4294963967\n4294964225\n896\n7825\n8721\n4294966546\n4294965267\n4294964517\n4294962488\n4294959709\n4294964901\n7314\n4919\n2233\n4294967152\n4294959385\n4294959241\n1330\n3275\n4605\n7880\n2485\n4294960365\n4294962850\n4294965919\n1473\n96\n1569\n1665\n3234\n4294964899\n4294958133\n4294965736\n6573\n5013\n1586\n4294966599\n4294958185\n4294957488\n8377\n8569\n6946\n4294965515\n4294962461\n4294960680\n4294965845\n9229\n7778\n4294967007\n4294964785\n4294964496\n4294961985\n4294959185\n4294963874\n5763\n2341\n8104\n445\n4294958549\n4294958994\n247\n1945\n2192\n4137\n6329\n466\n4294966795\n4294967261\n4294966760\n4294966725\n4294966189\n4294965618\n4294964511\n2833\n48\n2881\n2929\n4294965810\n4294958739\n4294967253\n8696\n8653\n4294957349\n4294966002\n4294966055\n4294964761\n3520\n985\n4294964505\n4294965490\n2699\n893\n3592\n4294964485\n4294958077\n4294965266\n6047\n4017\n64\n4294964081\n4294964145\n930\n7779\n8709\n4294966488\n4294965197\n4294964389\n4294962290\n4294959383\n4294964377\n6464\n3545\n9\n3554\n3563\n4294967117\n4294960680\n4294960501\n4294963885\n7090\n3679\n769\n4294964448\n4294965217\n2369\n290\n2659\n2949\n4294965608\n4294958557\n4294966869\n8130\n7703\n4294965833\n4294963536\n4294962073\n4294958313\n3090\n4107\n7197\n1304\n4294958501\n4294959805\n1010\n3519\n4529\n8048\n2577\n4294960625\n4294963202\n4294966531\n2437\n1672\n4294964109\n4294965781\n2594\n1079\n4294963673\n4294964752\n1129\n8585\n9714\n4294958299\n4294958013\n4294959016\n9733\n1453\n1186\n2639\n4294963825\n4294966464\n2993\n2161\n4294965154\n4294957315\n4294965173\n5192\n3069\n8261\n1330\n4294959591\n4294960921\n3216\n6841\n57\n4294966898\n4294966955\n4294966557\n4294966216\n4294965477\n4294964397\n2578\n9679\n2257\n4294961936\n4294964193\n4294958833\n4294965730\n7267\n5701\n2968\n4294958669\n4294961637\n3010\n7351\n361\n4294957712\n4294958073\n8489\n9266\n7755\n4294967021\n4294964776\n4294964501\n4294961981\n4294959186\n4294963871\n5761\n2336\n8097\n433\n4294958530\n4294958963\n197\n1864\n2061\n3925\n5986\n9911\n4294965897\n4294965808\n4294964409\n4294962921\n4294960034\n4294965659\n8397\n6760\n4294965157\n4294961917\n4294959778\n4294964399\n6881\n3984\n865\n4294964849\n4294965714\n3267\n1685\n4294964952\n4294966637\n4294964293\n3634\n631\n4294964265\n4294964896\n1865\n9465\n1330\n4294960795\n4294962125\n4294965624\n453\n8781\n9234\n4294958015\n4294967249\n4294957968\n4294957921\n8593\n9218\n7811\n4294967029\n4294964840\n4294964573\n4294962117\n4294959394\n4294964215\n6313\n3232\n9545\n2777\n4294962322\n4294965099\n4294960125\n4294957928\n757\n1389\n2146\n3535\n5681\n9216\n4294964897\n4294964113\n4294961714\n4294958531\n2949\n4184\n7133\n1317\n4294958450\n4294959767\n921\n3392\n4313\n7705\n2018\n4294959723\n4294961741\n4294964168\n8613\n5485\n4294964098\n4294959583\n4294966385\n8672\n7761\n4294966433\n4294964194\n4294963331\n4294960229\n4294966264\n9197\n8165\n4294957362\n4294965527\n4294965593\n4294963824\n2121\n8649\n770\n4294959419\n4294960189\n2312\n5205\n7517\n2722\n4294960239\n4294962961\n4294965904\n1569\n177\n1746\n1923\n4294963669\n4294965592\n1965\n261\n2226\n2487\n4294964713\n4294967200\n4294964617\n4294964521\n1842\n9067\n909\n4294959976\n4294960885\n3565\n7154\n719\n4294957873\n4294958592\n9169\n465\n9634\n99\n4294959733\n4294959832\n2269\n4805\n7074\n1879\n4294958953\n4294960832\n2489\n6025\n8514\n4294964539\n4294963053\n4294960296\n4294966053\n9053\n7810\n4294966863\n4294964673\n4294964240\n4294961617\n4294958561\n2882\n4147\n7029\n1176\n4294958205\n4294959381\n290\n2375\n2665\n5040\n7705\n2745\n4294960450\n4294963195\n4294966349\n2248\n1301\n3549\n4294964850\n4294958399\n4294965953\n7056\n5713\n2769\n4294958482\n4294961251\n2437\n6392\n8829\n4294965221\n4294964050\n4294961975\n4294958729\n3408\n4841\n8249\n3090\n4294961339\n4294964429\n4294958472\n4294965605\n6781\n5090\n1871\n4294966961\n4294958832\n4294958497\n33\n1234\n1267\n2501\n3768\n6269\n37\n4294966306\n4294966343\n4294965353\n4294964400\n2457\n9561\n2018\n4294961579\n4294963597\n4294957880\n4294964181\n4765\n1650\n6415\n8065\n4294964480\n4294962545\n4294959729\n4294964978\n7411\n5093\n2504\n4294957597\n4294960101\n402\n3207\n3609\n6816\n425\n4294967241\n4294957666\n4294957611\n7981\n8296\n6277\n4294964573\n4294960850\n4294958127\n1681\n2512\n4193\n6705\n898\n4294957603\n4294958501\n8808\n13\n8821\n8834\n4294957655\n4294966489\n4294966848\n4294966041\n4294965593\n4294964338\n2635\n9677\n2312\n4294961989\n4294964301\n4294958994\n4294965999\n7697\n6400\n4294964097\n4294960497\n4294957298\n499\n501\n1000\n1501\n2501\n4002\n6503\n505\n4294967008\n4294957513\n4294967225\n7442\n7371\n4294964813\n4294962184\n4294959701\n4294964589\n6994\n4287\n1281\n4294965568\n4294966849\n4294965121\n4294964674\n2499\n9877\n2376\n4294962253\n4294964629\n4294959586\n4294966919\n9209\n8832\n4294958041\n4294966873\n4294957618\n4294967195\n7517\n7416\n4294964933\n4294962349\n4294959986\n4294965039\n7729\n5472\n3201\n4294958673\n4294961874\n3251\n7829\n1080\n4294958909\n4294959989\n1602\n4295\n5897\n192\n4294966089\n4294966281\n4294965074\n4294964059\n1837\n8600\n437\n4294959037\n4294959474\n1215\n3393\n4608\n8001\n2609\n4294960610\n4294963219\n4294966533\n2456\n1693\n4294964149\n4294965842\n2695\n1241\n4294963936\n4294965177\n1817\n9698\n1515\n4294961213\n4294962728\n4294966645\n2077\n1426\n3503\n4294964929\n4294958432\n4294966065\n7201\n5970\n3171\n4294959141\n4294962312\n4294964157\n9173\n6034\n4294965207\n4294961241\n4294959152\n3097\n4953\n8050\n3003\n4294961053\n4294964056\n4294957813\n4294964573\n5090\n2367\n7457\n9824\n4294967281\n4294967105\n4294967090\n4294966899\n4294966693\n4294966296\n4294965693\n4294964693\n4294963090\n4294960487\n4294966281\n9472\n8457\n4294957929\n4294966386\n4294967019\n4294966109\n4294965832\n4294964645\n3181\n530\n4294963711\n4294964241\n656\n7601\n8257\n4294965858\n4294964115\n4294962677\n4294959496\n4294964877\n7077\n4658\n1735\n4294966393\n4294958128\n4294967225\n8057\n7986\n4294966043\n4294964029\n4294962776\n4294959509\n4294964989\n7202\n4895\n2097\n4294966992\n4294959089\n4294958785\n578\n2067\n2645\n4712\n7357\n2069\n4294959426\n4294961495\n3625\n7824\n1449\n4294959273\n4294960722\n2699\n6125\n8824\n4294964949\n4294963773\n4294961426\n4294957903\n2033\n2640\n4673\n7313\n1986\n4294959299\n4294961285\n3288\n7277\n565\n4294957842\n4294958407\n8953\n64\n9017\n9081\n4294958098\n4294967179\n4294957981\n4294957864\n8549\n9117\n7666\n4294966783\n4294964449\n4294963936\n4294961089\n4294957729\n1522\n1955\n3477\n5432\n8909\n4294964341\n4294963250\n4294960295\n4294966249\n9248\n8201\n4294957449\n4294965650\n4294965803\n4294964157\n2664\n9525\n2189\n4294961714\n4294963903\n4294958321\n4294964928\n5953\n3585\n9538\n3123\n4294962661\n4294965784\n4294961149\n4294959637\n3490\n5831\n9321\n4294965152\n4294964473\n4294962329\n4294959506\n4294964539\n6749\n3992\n741\n4294964733\n4294965474\n2911\n1089\n4294964000\n4294965089\n1793\n9586\n1379\n4294960965\n4294962344\n4294966013\n1061\n9778\n839\n4294960617\n4294961456\n4294964777\n8937\n6418\n4294965355\n4294961773\n4294959832\n4294964309\n6845\n3858\n703\n4294964561\n4294965264\n2529\n497\n3026\n3523\n4294966549\n4294960072\n4294959325\n2101\n4130\n6231\n361\n4294966592\n4294966953\n4294966249\n4294965906\n4294964859\n3469\n1032\n4294964501\n4294965533\n2738\n975\n4294963713\n4294964688\n1105\n8497\n9602\n4294958099\n4294957701\n4294958504\n8909\n117\n9026\n9143\n4294958169\n4294957312\n4294958185\n8201\n9090\n7291\n4294966381\n4294963672\n4294962757\n4294959133\n4294964594\n6431\n3729\n160\n4294963889\n4294964049\n642\n7395\n8037\n4294965432\n4294963469\n4294961605\n4294957778\n2087\n2569\n4656\n7225\n1881\n4294959106\n4294960987\n2797\n6488\n9285\n4294965773\n4294965058\n4294963535\n4294961297\n4294957536\n1537\n1777\n3314\n5091\n8405\n3496\n4294961901\n4294965397\n4294960002\n4294958103\n809\n1616\n2425\n4041\n6466\n507\n4294966973\n4294957480\n4294967157\n7341\n7202\n4294964543\n4294961745\n4294958992\n3441\n5137\n8578\n4294963715\n4294962293\n4294958712\n4294963709\n5125\n1538\n6663\n8201\n4294964864\n4294963065\n4294960633\n4294966402\n9739\n8845\n4294958584\n4294957429\n4294958717\n8850\n271\n9121\n9392\n4294958513\n4294957905\n4294959122\n9731\n1557\n1288\n2845\n4294964133\n4294966978\n4294963815\n3497\n16\n3513\n3529\n4294967042\n4294960571\n4294960317\n3592\n6613\n205\n4294966818\n4294967023\n4294966545\n4294966272\n4294965521\n4294964497\n2722\n9923\n2645\n4294962568\n4294965213\n4294960485\n4294958402\n1591\n2697\n4288\n6985\n1273\n4294958258\n4294959531\n493\n2728\n3221\n5949\n9170\n4294965119\n4294964289\n4294962112\n4294959105\n4294963921\n5730\n2355\n8085\n440\n4294958525\n4294958965\n194\n1863\n2057\n3920\n5977\n9897\n4294965874\n4294965771\n4294964349\n4294962824\n4294959877\n4294965405\n7986\n6095\n4294964081\n4294960176\n4294966961\n9841\n9506\n4294959347\n4294958853\n4294960904\n2461\n6069\n8530\n4294964599\n4294963129\n4294960432\n4294966265\n9401\n8370\n4294957771\n4294966141\n4294966616\n4294965461\n4294964781\n2946\n431\n3377\n4294963808\n4294967185\n4294963697\n3586\n9987\n3573\n4294963560\n4294967133\n4294963397\n4294963234\n4294959335\n4294965273\n7312\n5289\n2601\n4294957890\n4294960491\n1085\n4280\n5365\n9645\n4294965010\n4294964655\n4294962369\n4294959728\n4294964801\n7233\n4738\n1971\n4294966709\n4294958680\n4294958093\n9477\n274\n9751\n25\n4294959776\n4294959801\n2281\n4786\n7067\n1853\n4294958920\n4294960773\n2397\n5874\n8271\n4294964145\n4294962416\n4294959265\n4294964385\n6354\n3443\n9797\n3240\n4294963037\n4294966277\n4294962018\n4294960999\n4294965721\n9424\n7849\n4294967273\n4294965122\n4294965099\n4294962925\n4294960728\n4294966357\n9789\n8850\n4294958639\n4294957489\n4294958832\n9025\n561\n9586\n147\n4294959733\n4294959880\n2317\n4901\n7218\n2119\n4294959337\n4294961456\n3497\n7657\n1154\n4294958811\n4294959965\n1480\n4149\n5629\n9778\n4294965407\n4294965185\n4294963296\n4294961185\n4294967185\n1074\n963\n2037\n3000\n4294965037\n4294958037\n4294965778\n6519\n5001\n1520\n4294966521\n4294958041\n4294967266\n8011\n7981\n4294965992\n4294963973\n4294962669\n4294959346\n4294964719\n6769\n4192\n961\n4294965153\n4294966114\n4294963971\n2789\n9464\n2253\n4294961717\n4294963970\n4294958391\n4294965065\n6160\n3929\n89\n4294964018\n4294964107\n829\n7640\n8469\n4294966109\n4294964578\n4294963391\n4294960673\n4294966768\n145\n9617\n9762\n4294959379\n4294959141\n4294961224\n3069\n6997\n66\n4294967063\n4294967129\n4294966896\n4294966729\n4294966329\n4294965762\n4294964795\n3261\n760\n4294964021\n4294964781\n1506\n8991\n497\n4294959488\n4294959985\n2177\n4866\n7043\n1909\n4294958952\n4294960861\n2517\n6082\n8599\n4294964681\n4294963280\n4294960665\n4294966649\n18\n9371\n9389\n4294958760\n4294958149\n4294959613\n466\n2783\n3249\n6032\n9281\n4294965313\n4294964594\n4294962611\n4294959909\n4294965224\n7837\n5765\n3602\n4294959367\n4294962969\n4294965040\n713\n8457\n9170\n4294957627\n4294966797\n4294967128\n4294966629\n4294966461\n4294965794\n4294964959\n3457\n1120\n4294964577\n4294965697\n2978\n1379\n4294964357\n4294965736\n2797\n1237\n4294964034\n4294965271\n2009\n9984\n1993\n4294961977\n4294963970\n4294958651\n4294965325\n6680\n4709\n1389\n4294966098\n4294957487\n4294966289\n6480\n5473\n1953\n4294957426\n4294959379\n9509\n1592\n1101\n2693\n4294963794\n4294966487\n2985\n2176\n4294965161\n4294957337\n4294965202\n5243\n3149\n8392\n1541\n4294959933\n4294961474\n4294964111\n8289\n5104\n3393\n4294958497\n4294961890\n3091\n7685\n776\n4294958461\n4294959237\n402\n2343\n2745\n5088\n7833\n2921\n4294960754\n4294963675\n4294967133\n3512\n3349\n4294966861\n4294960210\n4294959775\n2689\n5168\n7857\n3025\n4294960882\n4294963907\n4294957493\n4294964104\n4301\n1109\n5410\n6519\n1929\n4294958448\n4294960377\n1529\n4610\n6139\n749\n4294966888\n4294957637\n4294967229\n7570\n7503\n4294965073\n4294962576\n4294960353\n4294965633\n8690\n7027\n4294965717\n4294962744\n4294961165\n4294966613\n482\n9799\n281\n4294960080\n4294960361\n3145\n6210\n9355\n4294965565\n4294964920\n4294963189\n4294960813\n4294966706\n223\n9633\n9856\n4294959489\n4294959345\n4294961538\n3587\n7829\n1416\n4294959245\n4294960661\n2610\n5975\n8585\n4294964560\n4294963145\n4294960409\n4294966258\n9371\n8333\n4294957704\n4294966037\n4294966445\n4294965186\n4294964335\n2225\n9264\n1489\n4294960753\n4294962242\n4294965699\n645\n9048\n9693\n4294958741\n4294958434\n4294959879\n1017\n3600\n4617\n8217\n2834\n4294961051\n4294963885\n4294957640\n4294964229\n4573\n1506\n6079\n7585\n4294963664\n4294961249\n4294957617\n1570\n1891\n3461\n5352\n8813\n4294964165\n4294962978\n4294959847\n4294965529\n8080\n6313\n4294964393\n4294960706\n4294957803\n1213\n1720\n2933\n4653\n7586\n2239\n4294959825\n4294962064\n4294964593\n9361\n6658\n4294966019\n4294962677\n4294961400\n4294966781\n885\n370\n1255\n1625\n2880\n4294964505\n4294957385\n4294964594\n4683\n1981\n6664\n8645\n4294965309\n4294963954\n4294961967\n4294958625\n3296\n4625\n7921\n2546\n4294960467\n4294963013\n4294966184\n1901\n789\n2690\n3479\n4294966169\n4294959648\n4294958521\n873\n2098\n2971\n5069\n8040\n3109\n4294961149\n4294964258\n4294958111\n4294965073\n5888\n3665\n9553\n3218\n4294962771\n4294965989\n4294961464\n4294960157\n4294964325\n7186\n4215\n1401\n4294965616\n4294967017\n4294965337\n4294965058\n3099\n861\n4294963960\n4294964821\n1485\n9010\n495\n4294959505\n4294960000\n2209\n4913\n7122\n2035\n4294959157\n4294961192\n3053\n6949\n2\n4294966951\n4294966953\n4294966608\n4294966265\n4294965577\n4294964546\n2827\n77\n2904\n2981\n4294965885\n4294958866\n4294957455\n9025\n9184\n8209\n4294957393\n4294965602\n4294965699\n4294964005\n2408\n9117\n1525\n4294960642\n4294962167\n4294965513\n384\n8601\n8985\n4294957586\n4294966571\n4294966861\n4294966136\n4294965701\n4294964541\n2946\n191\n3137\n3328\n4294966465\n4294959793\n4294958962\n1459\n3125\n4584\n7709\n2293\n4294960002\n4294962295\n4294965001\n0\n7705\n7705\n4294965410\n4294963115\n4294961229\n4294967048\n981\n733\n1714\n2447\n4294964161\n4294966608\n3473\n2785\n4294966258\n4294959043\n4294958005\n9752\n461\n213\n674\n887\n1561\n2448\n4294964009\n4294966457\n3170\n2331\n4294965501\n4294957832\n4294966037\n6573\n5314\n1887\n4294967201\n4294959088\n4294958993\n785\n2482\n3267\n5749\n9016\n4294964765\n4294963781\n4294961250\n4294957735\n1689\n2128\n3817\n5945\n9762\n4294965707\n4294965469\n4294963880\n4294962053\n4294958637\n3394\n4735\n8129\n2864\n4294960993\n4294963857\n4294957554\n4294964115\n4373\n1192\n5565\n6757\n2322\n4294959079\n4294961401\n3184\n7289\n473\n4294957762\n4294958235\n8701\n9640\n8341\n4294957981\n4294966322\n4294967007\n4294966033\n4294965744\n4294964481\n2929\n114\n3043\n3157\n4294966200\n4294959357\n4294958261\n322\n1287\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n4294963499\n4294960845\n4294967048\n597\n349\n946\n1295\n2241\n3536\n4294965777\n4294959313\n4294957794\n9811\n309\n120\n429\n549\n978\n1527\n2505\n4294964032\n4294966537\n3273\n2514\n4294965787\n4294958301\n4294966792\n7797\n7293\n4294965090\n4294962383\n4294960177\n4294965264\n8145\n6113\n4294964258\n4294960371\n4294957333\n408\n445\n853\n1298\n2151\n3449\n5600\n9049\n4294964649\n4294963698\n4294961051\n4294957453\n1208\n1365\n2573\n3938\n6511\n449\n4294966960\n4294957409\n4294967073\n7186\n6963\n4294964149\n4294961112\n4294957965\n1781\n2450\n4231\n6681\n912\n4294957593\n4294958505\n8802\n11\n8813\n8824\n4294957637\n4294966461\n4294966802\n4294965967\n4294965473\n4294964144\n2321\n9169\n1490\n4294960659\n4294962149\n4294965512\n365\n8581\n8946\n4294957527\n4294966473\n4294966704\n4294965881\n4294965289\n4294963874\n1867\n8445\n312\n4294958757\n4294959069\n530\n2303\n2833\n5136\n7969\n3105\n4294961074\n4294964179\n4294957957\n4294964840\n5501\n3045\n8546\n1591\n4294960137\n4294961728\n4294964569\n9001\n6274\n4294965275\n4294961549\n4294959528\n4294963781\n6013\n2498\n8511\n1009\n4294959520\n4294960529\n2753\n5986\n8739\n4294964725\n4294963464\n4294960893\n4294967061\n658\n423\n1081\n1504\n2585\n4294964089\n4294966674\n3467\n2845\n4294966312\n4294959157\n4294958173\n34\n911\n945\n1856\n2801\n4657\n7458\n2115\n4294959573\n4294961688\n4294963965\n8357\n5026\n3383\n4294958409\n4294961792\n2905\n7401\n306\n4294957707\n4294958013\n8424\n9141\n7565\n4294966706\n4294964271\n4294963681\n4294960656\n4294967041\n401\n146\n547\n693\n1240\n1933\n3173\n4294965106\n4294958279\n4294966089\n7072\n5865\n2937\n4294958802\n4294961739\n3245\n7688\n933\n4294958621\n4294959554\n879\n3137\n4016\n7153\n1169\n4294958322\n4294959491\n517\n2712\n3229\n5941\n9170\n4294965111\n4294964281\n4294962096\n4294959081\n4294963881\n5666\n2251\n7917\n168\n4294958085\n4294958253\n9042\n9999\n9041\n4294959040\n4294958081\n4294959825\n610\n3139\n3749\n6888\n637\n4294957525\n4294958162\n8391\n9257\n7648\n4294966905\n4294964553\n4294964162\n4294961419\n4294958285\n2408\n3397\n5805\n9202\n4294965007\n4294964209\n4294961920\n4294958833\n3457\n4994\n8451\n3445\n4294961896\n4294965341\n4294959941\n4294957986\n631\n1321\n1952\n3273\n5225\n8498\n4294963723\n4294962221\n4294958648\n3573\n4925\n8498\n3423\n4294961921\n4294965344\n4294959969\n4294958017\n690\n1411\n2101\n3512\n5613\n9125\n4294964738\n4294963863\n4294961305\n4294957872\n1881\n2457\n4338\n6795\n1133\n4294957928\n4294959061\n9693\n1458\n1151\n2609\n4294963760\n4294966369\n2833\n1906\n4294964739\n4294966645\n4294964088\n3437\n229\n4294963666\n4294963895\n265\n6864\n7129\n4294963993\n4294961122\n4294957819\n1645\n2168\n3813\n5981\n9794\n4294965775\n4294965569\n4294964048\n4294962321\n4294959073\n4294964098\n5875\n2677\n8552\n1229\n4294959781\n4294961010\n3495\n7209\n704\n4294957913\n4294958617\n9234\n555\n9789\n344\n4294960133\n4294960477\n3314\n6495\n9809\n4294966304\n4294966113\n4294965121\n4294963938\n4294961763\n4294958405\n2872\n3981\n6853\n834\n4294957687\n4294958521\n8912\n137\n9049\n9186\n4294958235\n4294957421\n4294958360\n8485\n9549\n8034\n4294957583\n4294965617\n4294965904\n4294964225\n2833\n9762\n2595\n4294962357\n4294964952\n4294960013\n4294957669\n386\n759\n1145\n1904\n3049\n4953\n8002\n2955\n4294960957\n4294963912\n4294957573\n4294964189\n4466\n1359\n5825\n7184\n3009\n4294960193\n4294963202\n4294966099\n2005\n808\n2813\n3621\n4294966434\n4294960055\n4294959193\n1952\n3849\n5801\n9650\n4294965451\n4294965101\n4294963256\n4294961061\n4294967021\n786\n511\n1297\n1808\n3105\n4294964913\n4294958018\n4294965635\n6357\n4696\n1053\n4294965749\n4294966802\n4294965255\n4294964761\n2720\n185\n2905\n3090\n4294965995\n4294959085\n4294957784\n9573\n61\n9634\n9695\n4294959329\n4294959024\n4294961057\n2785\n6546\n9331\n4294965877\n4294965208\n4294963789\n4294961701\n4294958194\n2599\n3497\n6096\n9593\n4294965689\n4294965282\n4294963675\n4294961661\n4294958040\n2405\n3149\n5554\n8703\n4294964257\n4294962960\n4294959921\n4294965585\n8210\n6499\n4294964709\n4294961208\n4294958621\n2533\n3858\n6391\n249\n4294966640\n4294966889\n4294966233\n4294965826\n4294964763\n3293\n760\n4294964053\n4294964813\n1570\n9087\n657\n4294959744\n4294960401\n2849\n5954\n8803\n4294964757\n4294963560\n4294961021\n4294967285\n1010\n999\n2009\n3008\n4294965017\n4294958025\n4294965746\n6475\n4925\n1400\n4294966325\n4294957725\n4294966754\n7183\n6641\n4294963824\n4294960465\n4294966993\n162\n9859\n21\n4294959880\n4294959901\n2485\n5090\n7575\n2665\n4294960240\n4294962905\n4294965849\n1458\n11\n1469\n1480\n2949\n4294964429\n4294957378\n4294964511\n4593\n1808\n6401\n8209\n4294964610\n4294962819\n4294960133\n4294965656\n8493\n6853\n4294965346\n4294962199\n4294960249\n4294965152\n8105\n5961\n4294964066\n4294960027\n4294966797\n9528\n9029\n4294958557\n4294957586\n4294958847\n9137\n688\n9825\n513\n4294960338\n4294960851\n4294963893\n7448\n4045\n1493\n4294965538\n4294967031\n4294965273\n4294965008\n2985\n697\n4294963682\n4294964379\n765\n7848\n8613\n4294966461\n4294965074\n4294964239\n4294962017\n4294958960\n4294963681\n5345\n1730\n7075\n8805\n4294965880\n4294964685\n4294963269\n4294960658\n4294966631\n9993\n9328\n4294959321\n4294958649\n4294960674\n2027\n5405\n7432\n2837\n4294960269\n4294963106\n4294966079\n1889\n672\n2561\n3233\n4294965794\n4294959027\n4294957525\n9256\n9485\n8741\n4294958226\n4294966967\n4294957897\n4294957568\n8169\n8441\n6610\n4294965051\n4294961661\n4294959416\n4294963781\n5901\n2386\n8287\n673\n4294958960\n4294959633\n1297\n3634\n4931\n8565\n3496\n4294962061\n4294965557\n4294960322\n4294958583\n1609\n2896\n4505\n7401\n1906\n4294959307\n4294961213\n3224\n7141\n365\n4294957506\n4294957871\n8081\n8656\n6737\n4294965393\n4294962130\n4294960227\n4294965061\n7992\n5757\n4294963749\n4294959506\n4294965959\n8169\n6832\n4294965001\n4294961833\n4294959538\n4294964075\n6317\n3096\n9413\n2509\n4294961922\n4294964431\n4294959057\n4294966192\n7953\n6849\n4294964802\n4294961651\n4294959157\n3512\n5373\n8885\n4294964258\n4294963143\n4294960105\n4294965952\n8761\n7417\n4294966178\n4294963595\n4294962477\n4294958776\n4294963957\n5437\n2098\n7535\n9633\n4294967168\n4294966801\n4294966673\n4294966178\n4294965555\n4294964437\n4294962696\n4294959837\n4294965237\n7778\n5719\n3497\n4294959216\n4294962713\n4294964633\n50\n7387\n7437\n4294964824\n4294962261\n4294959789\n4294964754\n7247\n4705\n1952\n4294966657\n4294958609\n4294957970\n9283\n9957\n9240\n4294959197\n4294958437\n4294960338\n1479\n4521\n6000\n521\n4294966521\n4294967042\n4294966267\n4294966013\n4294964984\n4294963701\n1389\n7794\n9183\n4294966977\n4294966160\n4294965841\n4294964705\n4294963250\n4294960659\n4294966613\n9976\n9293\n4294959269\n4294958562\n4294960535\n1801\n5040\n6841\n1881\n4294958722\n4294960603\n2029\n5336\n7365\n2701\n4294960066\n4294962767\n4294965537\n1008\n9249\n257\n4294959506\n4294959763\n1973\n4440\n6413\n853\n4294967266\n4294958119\n4294958089\n8912\n9705\n8617\n4294958322\n4294966939\n4294957965\n4294957608\n8277\n8589\n6866\n4294965455\n4294962321\n4294960480\n4294965505\n8689\n6898\n4294965587\n4294962485\n4294960776\n4294965965\n9445\n8114\n4294957559\n4294965673\n4294965936\n4294964313\n2953\n9970\n2923\n4294962893\n4294965816\n4294961413\n4294959933\n4294964050\n6687\n3441\n128\n3569\n4294963697\n4294967266\n4294963667\n3637\n8\n3645\n4294963653\n4294957298\n4294963655\n3657\n16\n3673\n3689\n7362\n1051\n4294958413\n4294959464\n581\n2749\n3330\n6079\n9409\n4294965488\n4294964897\n4294963089\n4294960690\n4294966483\n9877\n9064\n4294958941\n4294958005\n4294959650\n359\n2713\n3072\n5785\n8857\n4294964642\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/msvs/square.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"square\", \"square.vcxproj\", \"{A21C0AEE-ADDC-45F0-A668-58FF10351D23}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/msvs/square.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>square</ProjectName>\n    <ProjectGuid>{A21C0AEE-ADDC-45F0-A668-58FF10351D23}</ProjectGuid>\n    <RootNamespace>square</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\gen_input.cpp\" />\n    <ClCompile Include=\"..\\square.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Square sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Square sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tText filter that demonstrates class pipeline. Example program reads a file \n\t\tcontaining decimal integers in text format, and changes each to its square.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"square.cpp\">square.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"gen_input.cpp\">gen_input.cpp </a>\n\t\t\t\t<dd>Source code for sample input generation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\tTwo additional targets for this example:\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make gen_input</tt>\n\t\t\t\t<dd>Create an input generator program that prints out a sequence of integers.\n\t\t\t\t<dt><tt>make input.txt</tt>\n\t\t\t\t<dd>Create an input file for the example (with help of <tt>gen_input</tt>).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>square <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>square [<i>n-of-threads</i>=value] [<i>input-file</i>=value] [<i>output-file</i>=value] [<i>max-slice-size</i>=value] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>square [<i>n-of-threads</i> [<i>input-file</i> [<i>output-file</i> [<i>max-slice-size</i>]]]] [<i>silent</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>input-file</i> is an input file name.<br>\n\t\t\t\t\t<i>output-file</i> is an output file name. <br>\n\t\t\t\t\t<i>max-slice-size</i> is the maximum number of characters in one slice.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt><tt>gen_input [<i>LN</i>] &gt; <i>inputfile</i></tt>\n\t\t\t\t<dd>Generate a file named <i>inputfile</i> consisting of <i>LN</i> lines each containing one integer.\n\t\t\t\t\tIf not specified, <i>LN</i> is assumed to be 1000000.\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Prepare an <i>inputfile</i> with about 5,000 lines of text (see the instruction above).\n\t\t\t\t\t<br>Run it with this <i>inputfile</i> and the desired number of threads,\n\t\t\t\t\te.g., <tt>square&nbsp;4&nbsp;<i>inputfile</i>&nbsp;<i>outputfile</i></tt>.\n\t\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/square.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Example program that reads a file of decimal integers in text format\n// and changes each to its square.\n// \n#include \"tbb/pipeline.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_allocator.h\"\n#include <cstring>\n#include <cstdlib>\n#include <cstdio>\n#include <cctype>\n#include \"../../common/utility/utility.h\"\n\nextern void generate_if_needed(const char*);\n\nusing namespace std;\n\n//! Holds a slice of text.\n/** Instances *must* be allocated/freed using methods herein, because the C++ declaration\n    represents only the header of a much larger object in memory. */\nclass TextSlice {\n    //! Pointer to one past last character in sequence\n    char* logical_end;\n    //! Pointer to one past last available byte in sequence.\n    char* physical_end;\npublic:\n    //! Allocate a TextSlice object that can hold up to max_size characters.\n    static TextSlice* allocate( size_t max_size ) {\n        // +1 leaves room for a terminating null character.\n        TextSlice* t = (TextSlice*)tbb::tbb_allocator<char>().allocate( sizeof(TextSlice)+max_size+1 );\n        t->logical_end = t->begin();\n        t->physical_end = t->begin()+max_size;\n        return t;\n    }\n    //! Free a TextSlice object \n    void free() {\n        tbb::tbb_allocator<char>().deallocate((char*)this,sizeof(TextSlice)+(physical_end-begin())+1);\n    } \n    //! Pointer to beginning of sequence\n    char* begin() {return (char*)(this+1);}\n    //! Pointer to one past last character in sequence\n    char* end() {return logical_end;}\n    //! Length of sequence\n    size_t size() const {return logical_end-(char*)(this+1);}\n    //! Maximum number of characters that can be appended to sequence\n    size_t avail() const {return physical_end-logical_end;}\n    //! Append sequence [first,last) to this sequence.\n    void append( char* first, char* last ) {\n        memcpy( logical_end, first, last-first );\n        logical_end += last-first;\n    }\n    //! Set end() to given value.\n    void set_end( char* p ) {logical_end=p;}\n};\n\nsize_t MAX_CHAR_PER_INPUT_SLICE = 4000;\nstring InputFileName = \"input.txt\";\nstring OutputFileName = \"output.txt\";\n\nclass MyInputFilter: public tbb::filter {\npublic:\n    MyInputFilter( FILE* input_file_ );\n    ~MyInputFilter();\nprivate:\n    FILE* input_file;\n    TextSlice* next_slice;\n    void* operator()(void*) /*override*/;\n};\n\nMyInputFilter::MyInputFilter( FILE* input_file_ ) : \n    filter(serial_in_order),\n    input_file(input_file_),\n    next_slice( TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE ) )\n{ \n}\n\nMyInputFilter::~MyInputFilter() {\n    next_slice->free();\n}\n \nvoid* MyInputFilter::operator()(void*) {\n    // Read characters into space that is available in the next slice.\n    size_t m = next_slice->avail();\n    size_t n = fread( next_slice->end(), 1, m, input_file );\n    if( !n && next_slice->size()==0 ) {\n        // No more characters to process\n        return NULL;\n    } else {\n        // Have more characters to process.\n        TextSlice& t = *next_slice;\n        next_slice = TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE );\n        char* p = t.end()+n;\n        if( n==m ) {\n            // Might have read partial number.  If so, transfer characters of partial number to next slice.\n            while( p>t.begin() && isdigit(p[-1]) ) \n                --p;\n            next_slice->append( p, t.end()+n );\n        }\n        t.set_end(p);\n        return &t;\n    }\n}\n    \n//! Filter that changes each decimal number to its square.\nclass MyTransformFilter: public tbb::filter {\npublic:\n    MyTransformFilter();\n    void* operator()( void* item ) /*override*/;\n};\n\nMyTransformFilter::MyTransformFilter() : \n    tbb::filter(parallel) \n{}  \n\nvoid* MyTransformFilter::operator()( void* item ) {\n    TextSlice& input = *static_cast<TextSlice*>(item);\n    // Add terminating null so that strtol works right even if number is at end of the input.\n    *input.end() = '\\0';\n    char* p = input.begin();\n    TextSlice& out = *TextSlice::allocate( 2*MAX_CHAR_PER_INPUT_SLICE );\n    char* q = out.begin();\n    for(;;) {\n        while( p<input.end() && !isdigit(*p) ) \n            *q++ = *p++; \n        if( p==input.end() ) \n            break;\n        long x = strtol( p, &p, 10 );\n        // Note: no overflow checking is needed here, as we have twice the \n        // input string length, but the square of a non-negative integer n \n        // cannot have more than twice as many digits as n.\n        long y = x*x; \n        sprintf(q,\"%ld\",y);\n        q = strchr(q,0);\n    }\n    out.set_end(q);\n    input.free();\n    return &out;\n}\n         \n//! Filter that writes each buffer to a file.\nclass MyOutputFilter: public tbb::filter {\n    FILE* my_output_file;\npublic:\n    MyOutputFilter( FILE* output_file );\n    void* operator()( void* item ) /*override*/;\n};\n\nMyOutputFilter::MyOutputFilter( FILE* output_file ) : \n    tbb::filter(serial_in_order),\n    my_output_file(output_file)\n{\n}\n\nvoid* MyOutputFilter::operator()( void* item ) {\n    TextSlice& out = *static_cast<TextSlice*>(item);\n    size_t n = fwrite( out.begin(), 1, out.size(), my_output_file );\n    if( n!=out.size() ) {\n        fprintf(stderr,\"Can't write into file '%s'\\n\", OutputFileName.c_str());\n        exit(1);\n    }\n    out.free();\n    return NULL;\n}\n\nbool silent = false;\n\nint run_pipeline( int nthreads )\n{\n    FILE* input_file = fopen( InputFileName.c_str(), \"r\" );\n    if( !input_file ) {\n        throw std::invalid_argument( (\"Invalid input file name: \"+InputFileName).c_str() );\n        return 0;\n    }\n    FILE* output_file = fopen( OutputFileName.c_str(), \"w\" );\n    if( !output_file ) {\n        throw std::invalid_argument( (\"Invalid output file name: \"+OutputFileName).c_str() );\n        return 0;\n    }\n\n    // Create the pipeline\n    tbb::pipeline pipeline;\n\n    // Create file-reading writing stage and add it to the pipeline\n    MyInputFilter input_filter( input_file );\n    pipeline.add_filter( input_filter );\n\n    // Create squaring stage and add it to the pipeline\n    MyTransformFilter transform_filter; \n    pipeline.add_filter( transform_filter );\n\n    // Create file-writing stage and add it to the pipeline\n    MyOutputFilter output_filter( output_file );\n    pipeline.add_filter( output_filter );\n\n    // Run the pipeline\n    tbb::tick_count t0 = tbb::tick_count::now();\n    // Need more than one token in flight per thread to keep all threads \n    // busy; 2-4 works\n    pipeline.run( nthreads*4 );\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    fclose( output_file );\n    fclose( input_file );\n\n    if ( !silent ) printf(\"time = %g\\n\", (t1-t0).seconds());\n\n    return 1;\n}\n\nint main( int argc, char* argv[] ) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads, 0 );\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(InputFileName,\"input-file\",\"input file name\")\n            .positional_arg(OutputFileName,\"output-file\",\"output file name\")\n            .positional_arg(MAX_CHAR_PER_INPUT_SLICE, \"max-slice-size\",\"the maximum number of characters in one slice\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            );\n        generate_if_needed( InputFileName.c_str() );\n\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p=threads.step(p) ) {\n                if ( !silent ) printf(\"threads = %d \", p);\n                tbb::task_scheduler_init init(p);\n                if(!run_pipeline (p))\n                    return 1;\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and parallel version\n            { // serial run\n                if ( !silent ) printf(\"serial run   \");\n                tbb::task_scheduler_init init_serial(1);\n                if(!run_pipeline (1))\n                    return 1;\n            }\n            { // parallel run (number of threads is selected automatically)\n                if ( !silent ) printf(\"parallel run \");\n                tbb::task_scheduler_init init_parallel;\n                if(!run_pipeline (init_parallel.default_num_threads()))\n                    return 1;\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* square.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* square.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tEA09E56116E4F19700CA4CF4 /* gen_input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = gen_input.cpp; path = ../gen_input.cpp; sourceTree = SOURCE_ROOT; };\n\t\t8DD76F6C0486A84900D96B5E /* square */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = square; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* square.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = square.cpp; path = ../square.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* square */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = square;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */,\n\t\t\t\tA1F593A50B8F042A00073279 /* square.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* square */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* square */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"square\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = square;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = square;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* square */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"square\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* square */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* square */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEA09E56116E4F19700CA4CF4 /* gen_input.cpp in Sources */,\n\t\t\t\tA1F593A60B8F042A00073279 /* square.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = square;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = square;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = square;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = square;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"square\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"square\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task scheduler interface</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on task scheduler interface</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use the raw task scheduler.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"tree_sum/readme.html\">tree_sum</a>\n\t\t\t\t<dd>Sum values in a tree.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=tree_sum\nARGS=\nPERF_RUN_ARGS=auto 100000000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc_debug -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\t$(run_cmd) ./$(PROG) stdmalloc $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Tree_sum\nARGS=\nPERF_RUN_ARGS=auto 100000000 silent\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbbmalloc.lib tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbbmalloc_debug.lib tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\n\t$(PROG) stdmalloc $(ARGS)\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/OptimizedParallelSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n#include \"tbb/task.h\"\n\nclass OptimizedSumTask: public tbb::task {\n    Value* const sum;\n    TreeNode* root;\n    bool is_continuation;\n    Value x, y;\npublic:\n    OptimizedSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_), is_continuation(false) {\n    }\n    tbb::task* execute() /*override*/ {\n        tbb::task* next = NULL;\n        if( !is_continuation ) {\n            if( root->node_count<1000 ) {\n                *sum = SerialSumTree(root);\n            } else {\n                // Create tasks before spawning any of them.\n                tbb::task* a = NULL;\n                tbb::task* b = NULL;\n                if( root->left )\n                    a = new( allocate_child() ) OptimizedSumTask(root->left,&x);\n                if( root->right )\n                    b = new( allocate_child() ) OptimizedSumTask(root->right,&y);\n                recycle_as_continuation();\n                is_continuation = true;\n                set_ref_count( (a!=NULL)+(b!=NULL) );\n                if( a ) {\n                    if( b ) spawn(*b);\n                } else \n                    a = b;\n                next = a;\n            }\n        } else {\n            *sum = root->value;\n            if( root->left ) *sum += x;\n            if( root->right ) *sum += y;\n        } \n        return next;\n    }\n};\n\nValue OptimizedParallelSumTree( TreeNode* root ) {\n    Value sum;\n    OptimizedSumTask& a = *new(tbb::task::allocate_root()) OptimizedSumTask(root,&sum);\n    tbb::task::spawn_root_and_wait(a);\n    return sum;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/SerialSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n\nValue SerialSumTree( TreeNode* root ) {\n    Value result = root->value;\n    if( root->left )\n        result += SerialSumTree(root->left);\n    if( root->right )\n        result += SerialSumTree(root->right);\n    return result;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/SimpleParallelSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n#include \"tbb/task.h\"\n\nclass SimpleSumTask: public tbb::task {\n    Value* const sum;\n    TreeNode* root;\npublic:\n    SimpleSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_) {}\n    task* execute() /*override*/ {\n        if( root->node_count<1000 ) {\n            *sum = SerialSumTree(root);\n        } else {\n            Value x, y;\n            int count = 1; \n            tbb::task_list list;\n            if( root->left ) {\n                ++count;\n                list.push_back( *new( allocate_child() ) SimpleSumTask(root->left,&x) );\n            }\n            if( root->right ) {\n                ++count;\n                list.push_back( *new( allocate_child() ) SimpleSumTask(root->right,&y) );\n            }\n            // Argument to set_ref_count is one more than size of the list,\n            // because spawn_and_wait_for_all expects an augmented ref_count.\n            set_ref_count(count);\n            spawn_and_wait_for_all(list);\n            *sum = root->value;\n            if( root->left ) *sum += x;\n            if( root->right ) *sum += y;\n        }\n        return NULL;\n    }\n};\n\nValue SimpleParallelSumTree( TreeNode* root ) {\n    Value sum;\n    SimpleSumTask& a = *new(tbb::task::allocate_root()) SimpleSumTask(root,&sum);\n    tbb::task::spawn_root_and_wait(a);\n    return sum;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/TreeMaker.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef TREE_MAKER_H_\n#define TREE_MAKER_H_\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task.h\"\n\nstatic double Pi = 3.14159265358979;\n\nconst bool tbbmalloc = true;\nconst bool stdmalloc = false;\n\ntemplate<bool use_tbbmalloc>\nclass TreeMaker {\n\n    class SubTreeCreationTask: public tbb::task {\n        TreeNode*& my_root;\n        bool is_continuation;\n        typedef TreeMaker<use_tbbmalloc> MyTreeMaker;\n\n    public:\n        SubTreeCreationTask( TreeNode*& root, long number_of_nodes ) : my_root(root), is_continuation(false) {\n            my_root = MyTreeMaker::allocate_node();\n            my_root->node_count = number_of_nodes;\n            my_root->value = Value(Pi*number_of_nodes);\n        }\n\n        tbb::task* execute() /*override*/ {\n            tbb::task* next = NULL;\n            if( !is_continuation ) {\n                long subtree_size = my_root->node_count - 1;\n                if( subtree_size<1000 ) { /* grainsize */\n                    my_root->left  = MyTreeMaker::do_in_one_thread(subtree_size/2);\n                    my_root->right = MyTreeMaker::do_in_one_thread(subtree_size - subtree_size/2);\n                } else {\n                    // Create tasks before spawning any of them.\n                    tbb::task* a = new( allocate_child() ) SubTreeCreationTask(my_root->left,subtree_size/2);\n                    tbb::task* b = new( allocate_child() ) SubTreeCreationTask(my_root->right,subtree_size - subtree_size/2);\n                    recycle_as_continuation();\n                    is_continuation = true;\n                    set_ref_count(2);\n                    spawn(*b);\n                    next = a;\n                }\n            } \n            return next;\n        }\n    };\n\npublic:\n    static TreeNode* allocate_node() {\n        return use_tbbmalloc? tbb::scalable_allocator<TreeNode>().allocate(1) : new TreeNode;\n    }\n\n    static TreeNode* do_in_one_thread( long number_of_nodes ) {\n        if( number_of_nodes==0 ) {\n            return NULL;\n        } else {\n            TreeNode* n = allocate_node();\n            n->node_count = number_of_nodes;\n            n->value = Value(Pi*number_of_nodes);\n            --number_of_nodes;\n            n->left  = do_in_one_thread( number_of_nodes/2 ); \n            n->right = do_in_one_thread( number_of_nodes - number_of_nodes/2 );\n            return n;\n        }\n    }\n\n    static TreeNode* do_in_parallel( long number_of_nodes ) {\n        TreeNode* root_node;\n        SubTreeCreationTask& a = *new(tbb::task::allocate_root()) SubTreeCreationTask(root_node, number_of_nodes);\n        tbb::task::spawn_root_and_wait(a);\n        return root_node;\n    }\n\n    static TreeNode* create_and_time( long number_of_nodes, bool silent=false ) {\n        tbb::tick_count t0, t1;\n        TreeNode* root = allocate_node();\n        root->node_count = number_of_nodes;\n        root->value = Value(Pi*number_of_nodes);\n        --number_of_nodes;\n\n        t0 = tbb::tick_count::now();\n        root->left  = do_in_one_thread( number_of_nodes/2 );\n        t1 = tbb::tick_count::now();\n        if ( !silent ) printf (\"%24s: time = %.1f msec\\n\", \"half created serially\", (t1-t0).seconds()*1000);\n\n        t0 = tbb::tick_count::now();\n        root->right = do_in_parallel( number_of_nodes - number_of_nodes/2 );\n        t1 = tbb::tick_count::now();\n        if ( !silent ) printf (\"%24s: time = %.1f msec\\n\", \"half done in parallel\", (t1-t0).seconds()*1000);\n\n        return root;\n    }\n};\n\n#endif // TREE_MAKER_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\ntypedef float Value;\n\nstruct TreeNode {\n    //! Pointer to left subtree\n    TreeNode* left; \n    //! Pointer to right subtree\n    TreeNode* right;\n    //! Number of nodes in this subtree, including this node.\n    long node_count;\n    //! Value associated with the node.\n    Value value;\n};\n\nValue SerialSumTree( TreeNode* root );\nValue SimpleParallelSumTree( TreeNode* root );\nValue OptimizedParallelSumTree( TreeNode* root );\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n\n#include <cstdlib>\n#include <cstdio>\n#include <cstring>\n\n// The performance of this example can be significantly better when\n// the objects are allocated by the scalable_allocator instead of the\n// default \"operator new\".  The reason is that the scalable_allocator\n// typically packs small objects more tightly than the default \"operator new\",\n// resulting in a smaller memory footprint, and thus more efficient use of\n// cache and virtual memory.  Also the scalable_allocator works faster for\n// multi-threaded allocations.\n//\n// Pass stdmalloc as the 1st command line parameter to use the default \"operator new\"\n// and see the performance difference.\n#include \"tbb/scalable_allocator.h\"\n#include \"TreeMaker.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"../../common/utility/utility.h\"\n\nusing namespace std;\n\nvoid Run( const char* which, Value(*SumTree)(TreeNode*), TreeNode* root, bool silent) {\n    tbb::tick_count t0;\n    if ( !silent ) t0 = tbb::tick_count::now();\n    Value result = SumTree(root);\n    if ( !silent ) printf (\"%24s: time = %.1f msec, sum=%g\\n\", which, (tbb::tick_count::now()-t0).seconds()*1000, result);\n}\n\nint main( int argc, const char *argv[] ) {\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads, 0 );\n        long number_of_nodes = 10000000;\n        bool silent = false;\n        bool use_stdmalloc = false;\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(number_of_nodes,\"number-of-nodes\",\"the number of nodes\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(use_stdmalloc,\"stdmalloc\",\"use standard allocator\")\n        );\n\n        TreeNode* root;\n        { // In this scope, TBB will use default number of threads for tree creation\n            tbb::task_scheduler_init init;\n\n            if( use_stdmalloc ) {\n                if ( !silent ) printf(\"Tree creation using standard operator new\\n\");\n                root = TreeMaker<stdmalloc>::create_and_time( number_of_nodes, silent );\n            } else {\n                if ( !silent ) printf(\"Tree creation using TBB scalable allocator\\n\");\n                root = TreeMaker<tbbmalloc>::create_and_time( number_of_nodes, silent );\n            }\n        }\n\n        // Warm up caches\n        SerialSumTree(root);\n        if ( !silent ) printf(\"Calculations:\\n\");\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {\n                if ( !silent ) printf(\"threads = %d\\n\", p );\n                tbb::task_scheduler_init init( p );\n                Run ( \"SimpleParallelSumTree\", SimpleParallelSumTree, root, silent );\n                Run ( \"OptimizedParallelSumTree\", OptimizedParallelSumTree, root, silent );\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and two parallel versions\n            Run ( \"SerialSumTree\", SerialSumTree, root, silent );\n            tbb::task_scheduler_init init;\n            Run ( \"SimpleParallelSumTree\", SimpleParallelSumTree, root, silent );\n            Run ( \"OptimizedParallelSumTree\", OptimizedParallelSumTree, root, silent );\n        }\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    }catch(std::exception& e){\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/msvs/tree_sum.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tree_sum\", \"tree_sum.vcxproj\", \"{C931C7A2-074E-4150-9E7A-39A03250411E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/msvs/tree_sum.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>tree_sum</ProjectName>\n    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>\n    <RootNamespace>tree_sum</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\common.h\" />\n    <ClInclude Include=\"..\\TreeMaker.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\main.cpp\" />\n    <ClCompile Include=\"..\\OptimizedParallelSumTree.cpp\" />\n    <ClCompile Include=\"..\\SerialSumTree.cpp\" />\n    <ClCompile Include=\"..\\SimpleParallelSumTree.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Tree_sum sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Tree_sum sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that sums values in a tree.\n\t<br><br>\n\t\tThe example exhibits some speedup, but not a lot,  because it quickly saturates \n\t\tthe system bus on a multiprocessor.  For good speedup, there needs to be \n\t\tmore computation cycles per memory reference.  The point of the example \n\t\tis to teach how to use the raw task interface, so the computation is\n\t\tdeliberately trivial.\n\t<br><br>\n\t\tThe performance of this example is better when objects are allocated\n\t\tby the scalable_allocator instead of\n\t\tthe default \"operator new\".  The reason is that the scalable_allocator typically\n\t\tpacks small objects more tightly than the default \"operator new\", resulting in\n\t\ta smaller memory footprint, and thus more efficient use of cache and virtual memory.\n\t\tIn addition, the scalable_allocator performs better for multi-threaded allocations.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"SerialSumTree.cpp\">SerialSumTree.cpp</a>\n\t\t\t\t<dd>Sums sequentially.\n\t\t\t\t<dt><a href=\"SimpleParallelSumTree.cpp\">SimpleParallelSumTree.cpp</a><dt>\n\t\t\t\t<dd>Sums in parallel without any fancy tricks.\n\t\t\t\t<dt><a href=\"OptimizedParallelSumTree.cpp\">OptimizedParallelSumTree.cpp</a><dt>\n\t\t\t\t<dd>Sums in parallel, using \"recycling\" and \"continuation-passing\" tricks. \n\t\t\t\t\tIn this case, it is only slightly faster than the simple version.\n\t\t\t\t<dt><a href=\"common.h\">common.h</a>\n\t\t\t\t<dd>Shared declarations.\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>tree_sum <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>tree_sum [<i>n-of-threads</i>=value] [<i>number-of-nodes</i>=value] [<i>silent</i>] [<i>stdmalloc</i>]</tt>\n\t\t\t\t<dt><tt>tree_sum [<i>n-of-threads</i> [<i>number-of-nodes</i>]] [<i>silent</i>] [<i>stdmalloc</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the default.<br>\n\t\t\t\t\t<i>number-of-nodes</i> is the number of nodes in the tree.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>stdmalloc</i> - causes the default \"operator new\" to be used for memory allocations instead of the scalable_allocator.<br>\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>tree_sum&nbsp;4&nbsp;100000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t05593A110B8F4F4500DE73AB /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0C0B8F4F4500DE73AB /* main.cpp */; };\n\t\t05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */; };\n\t\t05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */; };\n\t\t05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */; };\n\t\t05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };\n\t\t05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t\t05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t05593A0B0B8F4F4500DE73AB /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../common.h; sourceTree = SOURCE_ROOT; };\n\t\t05593A0C0B8F4F4500DE73AB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };\n\t\t05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };\n\t\t05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; };\n\t\t05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };\n\t\t05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = SOURCE_ROOT; };\n\t\t05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t\t05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* tree_sum */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = tree_sum;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05593A0B0B8F4F4500DE73AB /* common.h */,\n\t\t\t\t05593A0C0B8F4F4500DE73AB /* main.cpp */,\n\t\t\t\t05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */,\n\t\t\t\t05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */,\n\t\t\t\t05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05593A4A0B8F51E000DE73AB /* tree_sum */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */,\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* tree_sum */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"tree_sum\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tree_sum;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = tree_sum;\n\t\t\tproductReference = 05593A4A0B8F51E000DE73AB /* tree_sum */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"tree_sum\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* tree_sum */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* tree_sum */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t05593A110B8F4F4500DE73AB /* main.cpp in Sources */,\n\t\t\t\t05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */,\n\t\t\t\t05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */,\n\t\t\t\t05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = tree_sum;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = tree_sum;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = tree_sum;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = tree_sum;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"tree_sum\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"tree_sum\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=Fractal\nARGS=auto\nPERF_RUN_ARGS=auto 1 1000000 silent\nLIGHT_ARGS=auto 1 1000\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\ninclude ../../common/gui/Makefile.gmake\n\nSOURCES= ../../common/gui/$(UI)video.cpp fractal.cpp main.cpp\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: $(SOURCES) resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb $(LIBS)\n\ndebug: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nlight_test:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nendif\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Fractal\nARGS=auto\nPERF_RUN_ARGS=auto 1 1000000 silent\nLIGHT_ARGS=auto 1 1000\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)\n#UI = con\nUI = gdi\n#UI = dd\n\n# Machine architecture, auto-detected from TBB_TARGET_ARCH by default\n# Use XARCH variable to change it. See index.html for more information\nARCH0 = $(TBB_TARGET_ARCH)-\nARCH1 = $(ARCH0:ia32-=x86)\nARCH2 = $(ARCH1:intel64-=AMD64)\nXARCH = $(ARCH2:-=x86)\n\nMAKEINC = ../../common/gui/Makefile.win\nSOURCES = fractal.cpp main.cpp \n\nall: release test\nrelease: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS)\" LFLAGS=\"$(LDFLAGS) tbb.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=gui SOURCE=\"$(SOURCES)\" EXE=$(PROG).exe build_one\ndebug: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS) /D TBB_USE_DEBUG\" LFLAGS=\"$(LDFLAGS) tbb_debug.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=gui SOURCE=\"$(SOURCES)\" EXE=$(PROG).exe build_one\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\\gui.res\ntest:\n\t$(PROG) $(ARGS)\nlight_test:\n\t$(PROG) $(LIGHT_ARGS)\n\nperf_build: compiler_check\n\t@$(MAKE) -f $(MAKEINC) UI=con CXX=\"$(CXX)\" CXXFLAGS=\"$(CXXFLAGS)\" LFLAGS=\"$(LDFLAGS) tbb.lib $(LIBS)\" XARCH=$(XARCH) RCNAME=gui SOURCE=\"$(SOURCES) \" EXE=$(PROG).exe build_one\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/fractal.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"fractal.h\"\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range2d.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_arena.h\"\n#include \"tbb/task_group.h\"\n#include \"tbb/tick_count.h\"\n\n#include <math.h>\n#include <stdio.h>\n\n// Included for __TBB_CPP11_LAMBDAS_PRESENT definition\n#include \"tbb/tbb_config.h\"\n\nvideo *v;\nextern bool silent;\nextern bool schedule_auto;\nextern int grain_size;\n\ncolor_t fractal::calc_one_pixel( int x0, int y0 ) const {\n    unsigned int iter;\n    double fx0, fy0, xtemp, x, y, mu;\n\n    color_t color;\n\n    fx0 = (double)x0 - (double) size_x / 2.0;\n    fy0 = (double)y0 - (double) size_y / 2.0;\n    fx0 = fx0 / magn + cx;\n    fy0 = fy0 / magn + cy;\n\n    iter = 0; x = 0; y = 0;\n    mu = 0;\n\n    while (((x*x + y*y) <= 4) && (iter < max_iterations)) {\n        xtemp = x*x - y*y + fx0;\n        y = 2*x*y + fy0;\n        x = xtemp;\n        mu += exp(-sqrt(x*x+y*y));\n        iter++;\n    }\n\n    if (iter == max_iterations) {\n        // point corresponds to the mandelbrot set\n        color = v->get_color(255, 255, 255);\n        return color;\n    }\n\n    int b = (int)(256*mu);\n    int g = (b/8);\n    int r = (g/16);\n\n    b = b>255 ? 255 : b;\n    g = g>255 ? 255 : g;\n    r = r>255 ? 255 : r;\n\n    color = v->get_color(r, g, b);\n    return color;\n}\n\nvoid fractal::clear() {\n    drawing_area area( off_x, off_y, size_x, size_y, dm ) ;\n\n    // fill the rendering area with black color\n    for (int y=0; y<size_y; ++y) {\n        area.set_pos( 0, y );\n        for (int x=0; x<size_x; ++x) {\n            area.put_pixel( v->get_color(0, 0, 0) );\n        }\n    }\n}\n\nvoid fractal::draw_border( bool is_active ) {\n    color_t color = is_active ? v->get_color(0, 255, 0) // green color\n                                : v->get_color(96, 128, 96); // green-gray color\n\n    // top border\n    drawing_area area0( off_x-1, off_y-1, size_x+2, 1, dm );\n    for (int i=-1; i<size_x+1; ++i)\n        area0.put_pixel(color);\n    // bottom border\n    drawing_area area1( off_x-1, off_y+size_y, size_x+2, 1, dm );\n    for (int i=-1; i<size_x+1; ++i)\n        area1.put_pixel(color);\n    // left border\n    drawing_area area2( off_x-1, off_y, 1, size_y+2, dm );\n    for (int i=0; i<size_y; ++i)\n        area2.set_pixel(0, i, color);\n    // right border\n    drawing_area area3( size_x+off_x, off_y, 1, size_y+2, dm );\n    for (int i=0; i<size_y; ++i)\n        area3.set_pixel(0, i, color);\n}\n\nvoid fractal::render_rect( int x0, int y0, int x1, int y1 ) const {\n    // render the specified rectangle area\n    drawing_area area(off_x+x0, off_y+y0, x1-x0, y1-y0, dm);\n    for ( int y=y0; y<y1; ++y ) {\n        area.set_pos( 0, y-y0 );\n        for ( int x=x0; x<x1; ++x ) {\n            area.put_pixel( calc_one_pixel( x, y ) );\n        }\n    }\n}\n\nclass fractal_body {\n    fractal &f;\npublic:\n    void operator()( tbb::blocked_range2d<int> &r ) const {\n        if ( v->next_frame() )\n            f.render_rect( r.cols().begin(), r.rows().begin(), r.cols().end(), r.rows().end() );\n    }\n\n    fractal_body( fractal &_f ) : f(_f) {\n    }\n};\n\nvoid fractal::render( tbb::task_group_context &context ) {\n    // Make copy of fractal object and render fractal with parallel_for with\n    // the provided context and partitioner chosen by schedule_auto.\n    // Updates to fractal are not reflected in the render.\n    fractal f = *this;\n    fractal_body body(f);\n\n    if( schedule_auto )\n        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),\n                body, tbb::auto_partitioner(), context);\n    else\n        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),\n                body, tbb::simple_partitioner(), context);\n}\n\nvoid fractal::run( tbb::task_group_context &context ) {\n    clear();\n    context.reset();\n    render( context );\n}\n\nbool fractal::check_point( int x, int y ) const {\n    return x >= off_x && x <= off_x+size_x &&\n            y >= off_y && y <= off_y+size_y;\n}\n\nvoid fractal_group::calc_fractal( int num ) {\n    // calculate the fractal\n    fractal &f = num ? f1 : f0;\n\n    tbb::tick_count t0 = tbb::tick_count::now();\n    while ( v->next_frame() && num_frames[num] != 0 ) {\n        f.run( context[num] );\n        if ( num_frames[num]>0 ) num_frames[num] -= 1;\n    }\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    if ( !silent ) {\n        printf(\"  %s fractal finished. Time: %g\\n\", num ? \"Second\" : \"First\", (t1-t0).seconds());\n    }\n}\n\nvoid fractal_group::set_priorities() {\n    // set the high priority for the active area and the normal priority for another area\n    context[active].set_priority( tbb::priority_high );\n    context[active^1].set_priority( tbb::priority_low );\n}\n\nvoid fractal_group::switch_priorities( int new_active ) {\n    if( new_active!=-1 ) active = new_active;\n    else                 active = 1-active; // assumes 'active' is only 0 or 1\n    set_priorities();\n    draw_borders();\n}\n\nvoid fractal_group::set_num_frames_at_least( int n ) {\n    if ( num_frames[0]<n ) num_frames[0] = n;\n    if ( num_frames[1]<n ) num_frames[1] = n;\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass task_group_body {\n    fractal_group &fg;\npublic:\n    task_group_body(fractal_group &_fg) : fg(_fg) { }\n\n    void operator() () const { fg.calc_fractal( 1 ); }\n};\n\nclass arena_body {\n    task_group_body &tg_body;\n    tbb::task_group &task_group;\npublic:\n    arena_body( task_group_body &_tg_body, tbb::task_group &_task_group )\n        :  tg_body( _tg_body ), task_group( _task_group )  { }\n\n    void operator() () const { task_group.run( tg_body ); }\n};\n\nclass arena_body_wait {\n    tbb::task_group &group;\npublic:\n    arena_body_wait( tbb::task_group &gr ) : group(gr) { }\n\n    void operator() () const { group.wait(); }\n};\n#endif\n\nvoid fractal_group::run( bool create_second_fractal ) {\n    // initialize task scheduler\n    tbb::task_scheduler_init init( num_threads );\n\n    // create contexts to manage fractal priorities\n    context = new tbb::task_group_context[2];\n\n    set_priorities();\n    draw_borders();\n\n    tbb::task_arena arena;\n    tbb::task_group gr;\n\n    // the second fractal is calculating on separated thread\n    if ( create_second_fractal ) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        arena.execute( [&] {\n            gr.run( [&] { calc_fractal( 1 ); } );\n        } );\n#else\n        task_group_body tg_body( *this );\n        arena_body a_body( tg_body, gr );\n        arena.execute( a_body );\n#endif\n    }\n\n    // calculate the first fractal\n    calc_fractal( 0 );\n\n    if ( create_second_fractal ) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        // wait for second fractal\n        arena.execute( [&] { gr.wait(); } );\n#else\n        arena.execute( arena_body_wait( gr ) );\n#endif\n    }\n\n    delete[] context;\n}\n\nvoid fractal_group::draw_borders() {\n    f0.draw_border( active==0 );\n    f1.draw_border( active==1 );\n}\n\nfractal_group::fractal_group( const drawing_memory &_dm, int _num_threads, unsigned int _max_iterations, int _num_frames ) : f0(_dm), f1(_dm), num_threads(_num_threads) {\n    // set rendering areas\n    f0.size_x = f1.size_x = _dm.sizex/2-4;\n    f0.size_y = f1.size_y = _dm.sizey-4;\n    f0.off_x = f0.off_y = f1.off_y = 2;\n    f1.off_x = f0.size_x+4+2;\n\n    // set fractals parameters\n    f0.cx = -0.6f; f0.cy = 0.0f; f0.magn = 200.0f;\n    f1.cx = -0.6f; f1.cy = 0.0f; f1.magn = 200.0f;\n    f0.max_iterations = f1.max_iterations = _max_iterations;\n\n    // initially the first fractal is active\n    active = 0;\n\n    num_frames[0] = num_frames[1] = _num_frames;\n}\n\nvoid fractal_group::mouse_click( int x, int y ) {\n    // assumption that the point is not inside any fractal area\n    int new_active = -1;\n\n    if ( f0.check_point( x, y ) ) {\n        // the point is inside the first fractal area\n        new_active = 0;\n    } else if ( f1.check_point( x, y ) ) {\n        // the point is inside the second fractal area\n        new_active = 1;\n    }\n\n    if ( new_active != -1 && new_active != active ) {\n        switch_priorities( new_active );\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/fractal.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FRACTAL_H_\n#define FRACTAL_H_\n\n#include \"../../common/gui/video.h\"\n\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n\n//! Fractal class\nclass fractal {\n    //! Left corner of the fractal area\n    int off_x, off_y;\n    //! Size of the fractal area\n    int size_x, size_y;\n\n    //! Fractal properties\n    float cx, cy;\n    float magn;\n    float step;\n    unsigned int max_iterations;\n\n    //! Drawing memory object for rendering\n    const drawing_memory &dm;\n\n    //! One pixel calculation routine\n    color_t calc_one_pixel( int x, int y ) const;\n    //! Clears the fractal area\n    void clear();\n    //! Draws the border around the fractal area\n    void draw_border( bool is_active );\n    //! Renders the fractal\n    void render( tbb::task_group_context &context );\n    //! Check if the point is inside the fractal area\n    bool check_point( int x, int y ) const;\n\npublic:\n    //! Constructor\n    fractal( const drawing_memory &dm ) : step(0.2), dm(dm) {\n#if _MSC_VER && _WIN64 && !__INTEL_COMPILER\n        // Workaround for MSVC x64 compiler issue\n        volatile int i=0;\n#endif\n    }\n    //! Runs the fractal calculation\n    void run( tbb::task_group_context &context );\n    //! Renders the fractal rectangular area\n    void render_rect( int x0, int y0, int x1, int y1 ) const;\n\n    void move_up()   { cy += step; }\n    void move_down() { cy -= step; }\n    void move_left() { cx += step; }\n    void move_right(){ cx -= step; }\n\n    void zoom_in() { magn *= 2.; step /= 2.; }\n    void zoom_out(){ magn /= 2.; step *= 2.; }\n\n    void quality_inc() { max_iterations += max_iterations/2; }\n    void quality_dec() { max_iterations -= max_iterations/2; }\n\n    friend class fractal_group;\n};\n\n//! The group of fractals\nclass fractal_group {\n    //! Fractals definition\n    fractal f0, f1;\n    //! Number of frames to calculate\n    tbb::atomic<int> num_frames[2];\n    //! Task group contexts to manage priorities\n    tbb::task_group_context *context;\n\n    //! Border type enumeration\n    enum BORDER_TYPE {\n        BORDER_INACTIVE = 0,\n        BORDER_ACTIVE\n    };\n\n    //! The number of the threads\n    int num_threads;\n    //! The active (high priority) fractal number\n    int active;\n\n    //! Draws the borders around the fractals\n    void draw_borders();\n    //! Sets priorities for fractals calculations\n    void set_priorities();\n\npublic:\n    //! Constructor\n    fractal_group( const drawing_memory &_dm,\n            int num_threads = tbb::task_scheduler_init::automatic,\n            unsigned int max_iterations = 100000, int num_frames = 1 );\n    //! Run calculation\n    void run( bool create_second_fractal=true );\n    //! Mouse event handler\n    void mouse_click( int x, int y );\n    //! Fractal calculation routine\n    void calc_fractal( int num );\n    //! Get number of threads\n    int get_num_threads() const { return num_threads; }\n    //! Reset the number of frames to be not less than the given value\n    void set_num_frames_at_least( int n );\n    //! Switches the priorities of two fractals\n    void switch_priorities( int new_active=-1 );\n    //! Get active fractal\n    fractal& get_active_fractal() { return  active ? f1 : f0; }\n\n    void active_fractal_zoom_in() {\n        get_active_fractal().zoom_in();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_zoom_out() {\n        get_active_fractal().zoom_out();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_quality_inc() {\n        get_active_fractal().quality_inc();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_quality_dec() {\n        get_active_fractal().quality_dec();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_up() {\n        get_active_fractal().move_up();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_down() {\n        get_active_fractal().move_down();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_left() {\n        get_active_fractal().move_left();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_right() {\n        get_active_fractal().move_right();\n        context[active].cancel_group_execution();\n    }\n};\n\n#endif /* FRACTAL_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/fractal_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FRACTAL_VIDEO_H_\n#define FRACTAL_VIDEO_H_\n\n#include \"../../common/gui/video.h\"\n#include \"fractal.h\"\n\nextern video *v;\nextern bool single;\n\nclass fractal_video : public video\n{\n    fractal_group *fg;\n\nprivate:\n    void on_mouse( int x, int y, int key ) {\n        if( key == 1 ) {\n            if ( fg ) {\n                fg->set_num_frames_at_least(20);\n                fg->mouse_click( x, y );\n            }\n        }\n    }\n\n    void on_key( int key ) {\n        switch ( key&0xff ) {\n            case esc_key:\n                running = false; break;\n            case ' ': // space\n                if( fg ) fg->switch_priorities(); break;\n\n            case 'q':\n                if( fg ) fg->active_fractal_zoom_in(); break;\n            case 'e':\n                if( fg ) fg->active_fractal_zoom_out(); break;\n\n            case 'r':\n                if( fg ) fg->active_fractal_quality_inc(); break;\n            case 'f':\n                if( fg ) fg->active_fractal_quality_dec(); break;\n\n            case 'w':\n                if( fg ) fg->active_fractal_move_up(); break;\n            case 'a':\n                if( fg ) fg->active_fractal_move_left(); break;\n            case 's':\n                if( fg ) fg->active_fractal_move_down(); break;\n            case 'd':\n                if( fg ) fg->active_fractal_move_right(); break;\n        }\n        if( fg ) fg->set_num_frames_at_least(20);\n    }\n\n    void on_process() {\n        if ( fg ) {\n            fg->run( !single );\n        }\n    }\n\npublic:\n    fractal_video() :fg(0) {\n        title = \"Dynamic Priorities in TBB: Fractal Example\";\n        v = this;\n    }\n\n    void set_fractal_group( fractal_group &_fg ) {\n        fg = &_fg;\n    }\n};\n\n#endif /* FRACTAL_VIDEO_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define VIDEO_WINMAIN_ARGS\n\n#include <stdio.h>\n#include <iostream>\n\n#include \"fractal.h\"\n#include \"fractal_video.h\"\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"../../common/utility/utility.h\"\n\nbool silent = false;\nbool single = false;\nbool schedule_auto = false;\nint grain_size = 8;\n\nint main(int argc, char *argv[])\n{\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // It is used for console mode for test with different number of threads and also has\n        // meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).\n        //                  threads.second - initialization value for scheduler\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads );\n        int num_frames = -1;\n        int max_iterations = 1000000;\n\n        // command line parsing\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(num_frames,\"n-of-frames\",\"number of frames the example processes internally\")\n            .positional_arg(max_iterations,\"max-of-iterations\",\"maximum number of the fractal iterations\")\n            .positional_arg(grain_size,\"grain-size\",\"the grain size value\")\n            .arg(schedule_auto, \"use-auto-partitioner\", \"use tbb::auto_partitioner\")\n            .arg(silent, \"silent\", \"no output except elapsed time\")\n            .arg(single, \"single\", \"process only one fractal\")\n        );\n\n        fractal_video video;\n\n        // video layer init\n        if ( video.init_window(1024, 512) ) {\n            video.calc_fps = false;\n            video.threaded = threads.first > 0;\n            // initialize fractal group\n            fractal_group fg( video.get_drawing_memory(), threads.last, max_iterations, num_frames );\n            video.set_fractal_group( fg );\n            // main loop\n            video.main_loop();\n        }\n        else if ( video.init_console() ) {\n            // in console mode we always have limited number of frames\n            num_frames = num_frames<0 ? 1 : num_frames;\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {\n                if ( !silent ) printf(\"Threads = %d\\n\", p);\n                fractal_group fg( video.get_drawing_memory(), p, max_iterations, num_frames );\n                fg.run( !single );\n            }\n        }\n        video.terminate();\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/msvs/fractal.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"fractal\", \"fractal.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A2527}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\t_GDIRelease|Win32 = _GDIRelease|Win32\r\n\t\t_GDIRelease|x64 = _GDIRelease|x64\r\n\t\tDDDebug|Win32 = DDDebug|Win32\r\n\t\tDDDebug|x64 = DDDebug|x64\r\n\t\tDDRelease|Win32 = DDRelease|Win32\r\n\t\tDDRelease|x64 = DDRelease|x64\r\n\t\tGDIDebug|Win32 = GDIDebug|Win32\r\n\t\tGDIDebug|x64 = GDIDebug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = GDIRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = GDIRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = GDIRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = GDIRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = GDIDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = GDIDebug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = GDIDebug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = GDIDebug|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/msvs/fractal.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"GDIDebug|Win32\">\n      <Configuration>GDIDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"GDIDebug|x64\">\n      <Configuration>GDIDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"GDIRelease|Win32\">\n      <Configuration>GDIRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"GDIRelease|x64\">\n      <Configuration>GDIRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|Win32\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDDebug|x64\">\n      <Configuration>DDDebug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|Win32\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DDRelease|x64\">\n      <Configuration>DDRelease</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>fractal</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A2527}</ProjectGuid>\n    <RootNamespace>fractal</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>MaxSpeed</Optimization>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;$(DXSDK_DIR)\\lib\\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">\n    <PreBuildEvent>\n      <Command>..\\..\\..\\common\\gui\\dxcheck.bat</Command>\n    </PreBuildEvent>\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <OmitFramePointers>true</OmitFramePointers>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;$(DXSDK_DIR)\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;$(DXSDK_DIR)\\lib\\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Windows</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\fractal.cpp\" />\n    <ClCompile Include=\"..\\main.cpp\" />\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\d2dvideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='GDIDebug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='GDIRelease|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"..\\..\\..\\common\\gui\\gdivideo.cpp\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDDebug|x64'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|Win32'\">true</ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='DDRelease|x64'\">true</ExcludedFromBuild>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"..\\fractal.h\" />\n    <ClInclude Include=\"..\\fractal_video.h\" />\n    <ClInclude Include=\"resource.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\video.h\" />\n    <ClInclude Include=\"..\\..\\..\\common\\gui\\winvideo.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"gui.ico\" />\n    <None Include=\"small.ico\" />\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"gui.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/msvs/gui.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#define APSTUDIO_HIDDEN_SYMBOLS\n#include \"windows.h\"\n#undef APSTUDIO_HIDDEN_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\n#ifdef _WIN32\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_GUI   ICON                    \"gui.ico\"\nIDI_SMALL               ICON                    \"small.ico\"\n\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#define APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"#include \"\"windows.h\"\"\\r\\n\"\n    \"#undef APSTUDIO_HIDDEN_SYMBOLS\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE \nBEGIN\n    IDS_APP_TITLE           \"gui\"\n    IDC_GUI   \"GUI\"\nEND\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/msvs/resource.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define IDC_MYICON                      2\n#define IDD_GUI                         102\n#define IDS_APP_TITLE                   103\n#define IDI_GUI                         107\n#define IDI_SMALL                       108\n#define IDC_GUI                         109\n#define IDR_MAINFRAME                   128\n#define IDC_STATIC                      -1\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Fractal sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Fractal sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe example calculates two classical Mandelbrot fractals with different priorities. \n\t<br><br>\n\t\tThe application window is divided into two areas where fractals are rendered. With mouse click on an area the user can change the priority of the calculating fractal. In the clicked area the fractal priority is changed to be \"high\" and the priority of the other fractal is changed to \"low\". The fractal with \"high\" priority we will call active.\n\t\tThe example also has the console mode but in this mode the priorities could not be changed during execution.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the fractals calculation in GUI or Console mode.\n\t\t\t\t<dt><a href=\"fractal.h\">fractal.h</a>\n\t\t\t\t<dd>Interfaces of fractal and fractal_group classes.\n\t\t\t\t<dt><a href=\"fractal.cpp\">fractal.cpp</a>\n\t\t\t\t<dd>Implementations of fractal and fractal_group classes.\n\t\t\t\t<dt><a href=\"fractal_video.h\">fractal_video.h</a>\n\t\t\t\t<dd>GUI mode support interface.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fractal <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>fractal [<i>n-of-threads=value</i>] [<i>n-of-frames=value</i>] [<i>max-of-iterations=value</i>] [<i>grain-size=value</i>] [<i>silent</i>] [<i>single</i>]</tt>\n\t\t\t\t<dt><tt>fractal [<i>n-of-threads</i> [<i>n-of-frames</i> [<i>max-of-iterations</i> [<i>grain-size</i>]]]] [<i>silent</i>] [<i>single</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-frames</i> is a number of frames the example processes internally.<br>\n\t\t\t\t\t<i>max-of-iterations</i> is a maximum number of the fractal iterations.<br>\n\t\t\t\t\t<i>grain-size</i> is an optional grain size, must be a positive integer. <br>\n\t\t\t\t\t<i>use-auto-partitioner</i> - use tbb::auto_partitioner.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>single</i> - process only one fractal.<br>\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small fractal iterations number and the desired number of threads, e.g., <tt>fractal&nbsp;4&nbsp;1&nbsp;10000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Hot keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tThe following hot keys can be used in interactive execution mode when the example is compiled with the graphical user interface:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt>&lt;left mouse button&gt;\n\t\t\t\t<dd>Make the fractal active and change its priority to high\n\t\t\t\t<dt>&lt;space&gt;\n\t\t\t\t<dd>Switch priorities\n\t\t\t\t<dt>&lt;w&gt;\n\t\t\t\t<dd>Move the active fractal up\n\t\t\t\t<dt>&lt;a&gt;\n\t\t\t\t<dd>Move the active fractal to the left\n\t\t\t\t<dt>&lt;s&gt;\n\t\t\t\t<dd>Move the active fractal down\n\t\t\t\t<dt>&lt;d&gt;\n\t\t\t\t<dd>Move the active fractal to the right\n\t\t\t\t<dt>&lt;q&gt;\n\t\t\t\t<dd>Zoom in the active fractal\n\t\t\t\t<dt>&lt;e&gt;\n\t\t\t\t<dd>Zoom out the active fractal\n\t\t\t\t<dt>&lt;r&gt;\n\t\t\t\t<dd>Increase quality (count of iterations for each pixel) the active fractal\n\t\t\t\t<dt>&lt;f&gt;\n\t\t\t\t<dd>Decrease quality (count of iterations for each pixel) the active fractal\n\t\t\t\t<dt>&lt;esc&gt;\n\t\t\t\t<dd>Stop execution.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t84011722152D687A00B07E4D /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };\n\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };\n\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };\n\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };\n\t\t84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };\n\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };\n\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };\n\t\tD31F32341C11798900A77D54 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };\n\t\tD31F32351C11798E00A77D54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };\n\t\tD31F32361C11799200A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };\n\t\tD31F32371C11799500A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };\n\t\tD31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32381C117A1700A77D54 /* iOS.storyboard */; };\n\t\tD31F323B1C117BE300A77D54 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };\n\t\tD31F323C1C117BE700A77D54 /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };\n\t\tD31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F323F1C11B5C900A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tD31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; };\n\t\tD31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t8401171F152D687A00B07E4D /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = \"<group>\"; };\n\t\t84011720152D687A00B07E4D /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = \"<group>\"; };\n\t\t84011721152D687A00B07E4D /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal.h; path = ../fractal.h; sourceTree = \"<group>\"; };\n\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\t84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = \"<group>\"; };\n\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = \"<group>\"; };\n\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = \"<group>\"; };\n\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"tbbExample-Prefix.pch\"; path = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = \"<group>\"; };\n\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = \"<group>\"; };\n\t\t84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\t84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\t84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };\n\t\tD31F321D1C11796D00A77D54 /* tbbExample_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD31F32381C117A1700A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = \"<group>\"; };\n\t\tD31F323F1C11B5C900A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32901C12E67300A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = \"<group>\"; };\n\t\tD31F32911C12E67300A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t84D0174E1527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */,\n\t\t\t\t84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,\n\t\t\t\t84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,\n\t\t\t\tD31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F321A1C11796D00A77D54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */,\n\t\t\t\tD31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t84011727152D68D200B07E4D /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8401171F152D687A00B07E4D /* fractal_video.h */,\n\t\t\t\t84B8DA82152CA99C00D59B95 /* main.cpp */,\n\t\t\t\t84011720152D687A00B07E4D /* fractal.cpp */,\n\t\t\t\t84011721152D687A00B07E4D /* fractal.h */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84011727152D68D200B07E4D /* Sources */,\n\t\t\t\t84B8DA98152CAD8600D59B95 /* Gui layer */,\n\t\t\t\t84B8DA7B152CA97B00D59B95 /* Resources */,\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7B152CA97B00D59B95 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD31F32381C117A1700A77D54 /* iOS.storyboard */,\n\t\t\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,\n\t\t\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../../common/gui/xcode/tbbExample/en.lproj;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA98152CAD8600D59B95 /* Gui layer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA99152CADF400D59B95 /* macvideo.cpp */,\n\t\t\t\t84B8DA6F152CA90100D59B95 /* main.m */,\n\t\t\t\t84B8DA70152CA90100D59B95 /* OpenGLView.h */,\n\t\t\t\t84B8DA71152CA90100D59B95 /* OpenGLView.m */,\n\t\t\t\t84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,\n\t\t\t\t84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,\n\t\t\t\t84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Gui layer\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017461527431F0008A4E0 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA6C152CA8D900D59B95 /* tbbExample */,\n\t\t\t\t84D017541527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D017521527431F0008A4E0 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017521527431F0008A4E0 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84D017511527431F0008A4E0 /* tbbExample.app */,\n\t\t\t\tD31F321D1C11796D00A77D54 /* tbbExample_ios.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017541527431F0008A4E0 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD31F323F1C11B5C900A77D54 /* libtbb.dylib */,\n\t\t\t\tD31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */,\n\t\t\t\tD31F32901C12E67300A77D54 /* libtbb.dylib */,\n\t\t\t\tD31F32911C12E67300A77D54 /* libtbbmalloc.dylib */,\n\t\t\t\t84D01775152744BD0008A4E0 /* OpenGL.framework */,\n\t\t\t\t84D017551527431F0008A4E0 /* Cocoa.framework */,\n\t\t\t\t84D017571527431F0008A4E0 /* Other Frameworks */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84D017571527431F0008A4E0 /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA13152C9AC600D59B95 /* libtbb.dylib */,\n\t\t\t\t84D017581527431F0008A4E0 /* AppKit.framework */,\n\t\t\t\t84D017591527431F0008A4E0 /* CoreData.framework */,\n\t\t\t\t84D0175A1527431F0008A4E0 /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t84D017501527431F0008A4E0 /* tbbExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t84D0174D1527431F0008A4E0 /* Sources */,\n\t\t\t\t84D0174E1527431F0008A4E0 /* Frameworks */,\n\t\t\t\t84D0174F1527431F0008A4E0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample;\n\t\t\tproductName = tbbExample;\n\t\t\tproductReference = 84D017511527431F0008A4E0 /* tbbExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD31F321C1C11796D00A77D54 /* tbbExample_ios */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D31F32331C11796D00A77D54 /* Build configuration list for PBXNativeTarget \"tbbExample_ios\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD31F32191C11796D00A77D54 /* Sources */,\n\t\t\t\tD31F321A1C11796D00A77D54 /* Frameworks */,\n\t\t\t\tD31F321B1C11796D00A77D54 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tbbExample_ios;\n\t\t\tproductName = tbbExample_ios;\n\t\t\tproductReference = D31F321D1C11796D00A77D54 /* tbbExample_ios.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t84D017481527431F0008A4E0 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = tbb;\n\t\t\t\tLastUpgradeCheck = 0430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD31F321C1C11796D00A77D54 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.1.1;\n\t\t\t\t\t\tDevelopmentTeam = 7J8M3RM94C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"fractal\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 84D017461527431F0008A4E0;\n\t\t\tproductRefGroup = 84D017521527431F0008A4E0 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t84D017501527431F0008A4E0 /* tbbExample */,\n\t\t\t\tD31F321C1C11796D00A77D54 /* tbbExample_ios */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t84D0174F1527431F0008A4E0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA7A152CA90100D59B95 /* (null) in Resources */,\n\t\t\t\t84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,\n\t\t\t\t84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F321B1C11796D00A77D54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */,\n\t\t\t\tD31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */,\n\t\t\t\tD31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t84D0174D1527431F0008A4E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t84B8DA77152CA90100D59B95 /* main.m in Sources */,\n\t\t\t\t84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,\n\t\t\t\t84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,\n\t\t\t\t84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,\n\t\t\t\t84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,\n\t\t\t\t84011722152D687A00B07E4D /* fractal.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD31F32191C11796D00A77D54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD31F32351C11798E00A77D54 /* main.m in Sources */,\n\t\t\t\tD31F323C1C117BE700A77D54 /* fractal.cpp in Sources */,\n\t\t\t\tD31F32361C11799200A77D54 /* OpenGLView.m in Sources */,\n\t\t\t\tD31F32371C11799500A77D54 /* tbbAppDelegate.m in Sources */,\n\t\t\t\tD31F323B1C117BE300A77D54 /* main.cpp in Sources */,\n\t\t\t\tD31F32341C11798900A77D54 /* macvideo.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7D152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t84B8DA7F152CA97B00D59B95 /* en */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t84D01770152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01771152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = YES;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t84D01773152743200008A4E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t84D01774152743200008A4E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = NO;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../../../lib\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.7;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tRUN_CLANG_STATIC_ANALYZER = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tVERSION_INFO_BUILDER = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD31F32311C11796D00A77D54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"__TBB_IOS=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD31F32321C11796D00A77D54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = \"__TBB_IOS=1\";\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../include\\\"\";\n\t\t\t\tINFOPLIST_FILE = \"../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"\\\"$(SRCROOT)/../../../../lib/ios\\\"\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.tbb.example;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject \"fractal\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01770152743200008A4E0 /* Debug */,\n\t\t\t\t84D01771152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget \"tbbExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t84D01773152743200008A4E0 /* Debug */,\n\t\t\t\t84D01774152743200008A4E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD31F32331C11796D00A77D54 /* Build configuration list for PBXNativeTarget \"tbbExample_ios\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD31F32311C11796D00A77D54 /* Debug */,\n\t\t\t\tD31F32321C11796D00A77D54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 84D017481527431F0008A4E0 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0710\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D31F321C1C11796D00A77D54\"\n               BuildableName = \"tbbExample_ios.app\"\n               BlueprintName = \"tbbExample_ios\"\n               ReferencedContainer = \"container:fractal.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F321C1C11796D00A77D54\"\n            BuildableName = \"tbbExample_ios.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:fractal.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F321C1C11796D00A77D54\"\n            BuildableName = \"tbbExample_ios.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:fractal.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D31F321C1C11796D00A77D54\"\n            BuildableName = \"tbbExample_ios.app\"\n            BlueprintName = \"tbbExample_ios\"\n            ReferencedContainer = \"container:fractal.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n               BuildableName = \"tbbExample.app\"\n               BlueprintName = \"tbbExample\"\n               ReferencedContainer = \"container:tbbExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:fractal.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      customWorkingDirectory = \"/tmp\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"NO\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:fractal.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_LIBRARY_PATH\"\n            value = \"$(SRCROOT)/../../../../lib\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"84D017501527431F0008A4E0\"\n            BuildableName = \"tbbExample.app\"\n            BlueprintName = \"tbbExample\"\n            ReferencedContainer = \"container:tbbExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_arena/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task_arena feature</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>task_arena</code> feature</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use the <code>task_arena</code> feature.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fractal/readme.html\">fractal</a>\n\t\t\t\t<dd>The example calculates two classical Mandelbrot fractals with different priorities.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task_group interface</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks<br>Samples on <code>task_group</code> interface</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use <code>task_group</code> interface.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sudoku/readme.html\">Sudoku</a>\n\t\t\t\t<dd>Compute all solutions for a Sudoku board.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=sudoku\nARGS=4 input1 verbose\nPERF_RUN_ARGS=auto input1 silent\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifneq (,$(filter icc icpc,$(CXX)))\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\nendif\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=sudoku\nARGS= 4 input1 verbose\nPERF_RUN_ARGS=auto input1 silent\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease:\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug:\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@$(CXX) >nul 2>&1 || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\nperf_build: release\n\nperf_run:\n\t$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/input1",
    "content": "1 0 0 9 0 0 0 8 0 0 8 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 5 2 1 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 8 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  1 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/input2",
    "content": "2 0 1 0 0 0 0 8 0 0 8 0 2 1 9 6 0 0 0 0 5 0 0 0 7 0 0 0 5 2 1 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 3 0 1 0 0 5 0 0 0 8 0 0 0 6\n\n\n\n\n\n\n2 0 1  0 0 0  0 8 0\n0 8 0  2 1 9  6 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  1 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 3 0  1 0 0\n5 0 0  0 8 0  0 0 6\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/input3",
    "content": "1 0 0 9 0 0 0 8 0 0 0 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 5 2 6 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 0 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  6 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/input4",
    "content": "1 0 0 9 0 0 0 8 0 0 0 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 0 2 6 0 0 0 0 0 0 0 0 0 0 5 0 0 7 4 0 0 0 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 0 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 0 2  6 0 0  0 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  0 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/msvs/sudoku.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"sudoku\", \"sudoku.vcxproj\", \"{C931C7A2-074E-4150-9E7A-39A03250411E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/msvs/sudoku.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>sudoku</ProjectName>\n    <ProjectGuid>{C931C7A2-074E-4150-9E7A-39A03250411E}</ProjectGuid>\n    <RootNamespace>sudoku</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;tbbmalloc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\sudoku.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Sudoku sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Sudoku sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that finds all solutions to a\n\t\tSudoku board.\n\t<br><br>\n\t\tIt uses a straightforward state-space search algorithm\n\t\tthat exhibits OR-parallelism.  It can be optionally run until it\n\t\tobtains just the first solution. The point of the example is to teach\n\t\thow to use the task_group interface.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sudoku.cpp\">sudoku.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"input1\">input1</a>\n\t\t\t\t<dd>Sample input file with modest number of solutions.\n\t\t\t\t<dt><a href=\"input2\">input2</a>\n\t\t\t\t<dd>Sample input file with small number of solutions.\n\t\t\t\t<dt><a href=\"input3\">input3</a>\n\t\t\t\t<dd>Sample input file with larger number of solutions.\n\t\t\t\t<dt><a href=\"input4\">input4</a>\n\t\t\t\t<dd>Sample input file with very large number of solutions.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>sudoku <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>sudoku [<i>n-of-threads</i>=value] [<i>filename</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt>\n\t\t\t\t<dt><tt>sudoku [n-of-threads [filename]] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>filename</i> is an input filename.<br>\n\t\t\t\t\t<i>verbose</i> - prints the first solution.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>find-one</i> - stops after finding first solution.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>sudoku&nbsp;4&nbsp;input2</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/sudoku.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include <cstdio>\n#include <cstdlib>\n#include <string>\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_group.h\"\n\n#pragma warning(disable: 4996)\n\nconst unsigned BOARD_SIZE=81;\nconst unsigned BOARD_DIM=9;\n\nusing namespace tbb;\nusing namespace std;\n\ntbb::atomic<unsigned> nSols;\nbool find_one = false;\nbool verbose = false;\nunsigned short init_values[BOARD_SIZE] = {1,0,0,9,0,0,0,8,0,0,8,0,2,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,5,2,1,0,0,4,0,0,0,0,0,0,0,5,0,0,7,4,0,0,7,0,0,0,3,0,0,3,0,0,0,2,0,0,5,0,0,0,0,0,0,1,0,0,5,0,0,0,1,0,0,0,0};\ntask_group *g;\ndouble solve_time;\n\ntypedef struct {\n    unsigned short solved_element;\n    unsigned potential_set;\n} board_element;\n\nvoid read_board(const char *filename) {\n    FILE *fp;\n    int input;\n    fp = fopen(filename, \"r\");\n    if (!fp) { \n        fprintf(stderr, \"sudoku: Could not open input file '%s'.\\n\", filename);\n        exit(1);\n    }\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (fscanf(fp, \"%d\", &input))\n            init_values[i] = input;\n        else {\n            fprintf(stderr, \"sudoku: Error in input file at entry %d, assuming 0.\\n\", i);\n            init_values[i] = 0;\n        }\n    }\n    fclose(fp);\n}\n\nvoid print_board(board_element *b) {\n    for (unsigned row=0; row<BOARD_DIM; ++row) {\n        for (unsigned col=0; col<BOARD_DIM; ++col) {\n            printf(\" %d\", b[row*BOARD_DIM+col].solved_element);\n            if (col==2 || col==5) printf(\" |\");\n        }\n        printf(\"\\n\");\n        if (row==2 || row==5) printf(\" ---------------------\\n\");\n    }\n}\n\nvoid print_potential_board(board_element *b) {\n    for (unsigned row=0; row<BOARD_DIM; ++row) {\n        for (unsigned col=0; col<BOARD_DIM; ++col) {\n            if (b[row*BOARD_DIM+col].solved_element) \n                printf(\"  %4d \", b[row*BOARD_DIM+col].solved_element);\n            else\n                printf(\" [%4d]\", b[row*BOARD_DIM+col].potential_set);\n            if (col==2 || col==5) printf(\" |\");\n        }\n        printf(\"\\n\");\n        if (row==2 || row==5)\n            printf(\" ------------------------------------------------------------------\\n\");\n    }\n}\n\nvoid init_board(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        b[i].solved_element = b[i].potential_set = 0;\n}\n\nvoid init_board(board_element *b, unsigned short arr[81]) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        b[i].solved_element = arr[i]; \n        b[i].potential_set = 0;\n    }\n}\n\nvoid init_potentials(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        b[i].potential_set = 0;\n}\n\nvoid copy_board(board_element *src, board_element *dst) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        dst[i].solved_element = src[i].solved_element;\n}\n\nbool fixed_board(board_element *b) {\n    for (int i=BOARD_SIZE-1; i>=0; --i)\n        if (b[i].solved_element==0) return false;\n    return true;\n}\n\nbool in_row(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    for (unsigned c=0; c<BOARD_DIM; ++c)\n        if (c!=col && b[row*BOARD_DIM+c].solved_element==p)  return true;\n    return false;\n}\n\nbool in_col(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    for (unsigned r=0; r<BOARD_DIM; ++r)\n        if (r!=row && b[r*BOARD_DIM+col].solved_element==p)  return true;\n    return false;\n}\n\nbool in_block(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    unsigned b_row = row/3 * 3, b_col = col/3 * 3;\n    for (unsigned i=b_row; i<b_row+3; ++i)\n        for (unsigned j=b_col; j<b_col+3; ++j)\n            if (!(i==row && j==col) && b[i*BOARD_DIM+j].solved_element==p) return true;\n    return false;\n}\n\nvoid calculate_potentials(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        b[i].potential_set = 0;\n        if (!b[i].solved_element) { // element is not yet fixed\n            unsigned row = i/BOARD_DIM, col = i%BOARD_DIM;\n            for (unsigned potential=1; potential<=BOARD_DIM; ++potential) {\n                if (!in_row(b, row, col, potential) && !in_col(b, row, col, potential)\n                    && !in_block(b, row, col, potential))\n                    b[i].potential_set |= 1<<(potential-1);\n            }\n        }\n    }\n}\n\nbool valid_board(board_element *b) {\n    bool success=true;\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (success && b[i].solved_element) { // element is fixed\n            unsigned row = i/BOARD_DIM, col = i%BOARD_DIM;\n            if (in_row(b, row, col, b[i].solved_element) || in_col(b, row, col, b[i].solved_element) || in_block(b, row, col, b[i].solved_element))\n                success = false;\n        }\n    }\n    return success;\n}\n\nbool examine_potentials(board_element *b, bool *progress) {\n    bool singletons = false;\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (b[i].solved_element==0 && b[i].potential_set==0) // empty set\n            return false;\n        switch (b[i].potential_set) {\n        case 1:   { b[i].solved_element = 1; singletons=true; break; }\n        case 2:   { b[i].solved_element = 2; singletons=true; break; }\n        case 4:   { b[i].solved_element = 3; singletons=true; break; }\n        case 8:   { b[i].solved_element = 4; singletons=true; break; }\n        case 16:  { b[i].solved_element = 5; singletons=true; break; }\n        case 32:  { b[i].solved_element = 6; singletons=true; break; }\n        case 64:  { b[i].solved_element = 7; singletons=true; break; }\n        case 128: { b[i].solved_element = 8; singletons=true; break; }\n        case 256: { b[i].solved_element = 9; singletons=true; break; }\n        }\n    }\n    *progress = singletons;\n    return valid_board(b);\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nvoid partial_solve(board_element *b, unsigned first_potential_set);\n\nclass PartialSolveBoard {\n    board_element *b;\n    unsigned first_potential_set;\npublic:\n    PartialSolveBoard(board_element *_b, unsigned fps) :\n        b(_b), first_potential_set(fps) {}\n    void operator() () const {\n        partial_solve(b, first_potential_set);\n    }\n};\n#endif\n\nvoid partial_solve(board_element *b, unsigned first_potential_set) {\n    if (fixed_board(b)) {\n        if ( find_one )\n            g->cancel();\n        if (++nSols==1 && verbose) {\n            print_board(b);\n        }\n        free(b);\n        return;\n    }\n    calculate_potentials(b);\n    bool progress=true;\n    bool success = examine_potentials(b, &progress);\n    if (success && progress) {\n        partial_solve(b, first_potential_set);\n    } else if (success && !progress) {\n        board_element *new_board;\n        while (b[first_potential_set].solved_element!=0) ++first_potential_set;\n        for (unsigned short potential=1; potential<=BOARD_DIM; ++potential) {\n            if (1<<(potential-1) & b[first_potential_set].potential_set) {\n                new_board = (board_element *)malloc(BOARD_SIZE*sizeof(board_element));\n                copy_board(b, new_board);\n                new_board[first_potential_set].solved_element = potential;\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                g->run( [=]{ partial_solve(new_board, first_potential_set); } );\n#else\n                g->run(PartialSolveBoard(new_board, first_potential_set));\n#endif\n            }\n        }\n        free(b);\n    }\n    else {\n        free(b);\n    }\n}\n\nunsigned solve(int p) {\n    task_scheduler_init init(p);\n    nSols = 0;\n    board_element *start_board = (board_element *)malloc(BOARD_SIZE*sizeof(board_element));\n    init_board(start_board, init_values);\n    g = new task_group;\n    tick_count t0 = tick_count::now();\n    partial_solve(start_board, 0);\n    g->wait();\n    solve_time = (tick_count::now() - t0).seconds();\n    delete g;\n    return nSols;\n}\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\nint do_get_default_num_threads() {\n    int threads;\n    #if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n    #endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        utility::thread_number_range threads(get_default_num_threads);\n        string filename = \"\";\n        bool silent = false;\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(filename,\"filename\",\"input filename\")\n\n            .arg(verbose,\"verbose\",\"prints the first solution\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(find_one,\"find-one\",\"stops after finding first solution\\n\")\n        );\n\n        if ( silent ) verbose = false;\n\n        if ( !filename.empty() )\n            read_board( filename.c_str() );\n        // otherwise (if file name not specified), the default statically initialized board will be used.\n        for(int p = threads.first; p <= threads.last; p = threads.step(p) ) {\n            unsigned number;\n            #if __TBB_MIC_OFFLOAD\n            #pragma offload target(mic) in(init_values, p, verbose, find_one) out(number, solve_time)\n            {\n            #endif // __TBB_MIC_OFFLOAD\n            number = solve(p);\n            #if __TBB_MIC_OFFLOAD\n            }\n            #endif // __TBB_MIC_OFFLOAD\n\n            if ( !silent ) {\n                if ( find_one ) {\n                    printf(\"Sudoku: Time to find first solution on %d threads: %6.6f seconds.\\n\", p, solve_time);\n                }\n                else {\n                    printf(\"Sudoku: Time to find all %u solutions on %d threads: %6.6f seconds.\\n\", number, p, solve_time);\n                }\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n};\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* sudoku.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sudoku.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* Sudoku */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Sudoku; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* sudoku.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sudoku.cpp; path = ../sudoku.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Sudoku */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Sudoku;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* sudoku.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Sudoku */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Sudoku */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Sudoku\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Sudoku;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Sudoku;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Sudoku */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"sudoku\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Sudoku */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Sudoku */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* sudoku.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Sudoku;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Sudoku;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Sudoku;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Sudoku;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Sudoku\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"sudoku\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/Fibonacci.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Example program that computes Fibonacci numbers in different ways.\n   Arguments are: [ Number [Threads [Repeats]]]\n   The defaults are Number=500 Threads=1:4 Repeats=1.\n\n   The point of this program is to check that the library is working properly.\n   Most of the computations are deliberately silly and not expected to\n   show any speedup on multiprocessors.\n*/\n\n// enable assertions\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <cstdio>\n#include <cstdlib>\n#include <cassert>\n#include <utility>\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/concurrent_queue.h\"\n#include \"tbb/concurrent_hash_map.h\"\n#include \"tbb/parallel_while.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/parallel_scan.h\"\n#include \"tbb/pipeline.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/tbb_thread.h\"\n\nusing namespace std;\nusing namespace tbb;\n\n//! type used for Fibonacci number computations\ntypedef long long value;\n\n//! Matrix 2x2 class\nstruct Matrix2x2\n{\n    //! Array of values\n    value v[2][2];\n    Matrix2x2() {}\n    Matrix2x2(value v00, value v01, value v10, value v11) {\n        v[0][0] = v00; v[0][1] = v01; v[1][0] = v10; v[1][1] = v11;\n    }\n    Matrix2x2 operator * (const Matrix2x2 &to) const; //< Multiply two Matrices\n};\n//! Identity matrix\nstatic const Matrix2x2 MatrixIdentity(1, 0, 0, 1);\n//! Default matrix to multiply\nstatic const Matrix2x2 Matrix1110(1, 1, 1, 0);\n//! Raw arrays matrices multiply\nvoid Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2]);\n\n/////////////////////// Serial methods ////////////////////////\n\n//! Plain serial sum\nvalue SerialFib(int n)\n{\n    if(n < 2)\n        return n;\n    value a = 0, b = 1, sum; int i;\n    for( i = 2; i <= n; i++ )\n    {   // n is really index of Fibonacci number\n        sum = a + b; a = b; b = sum;\n    }\n    return sum;\n}\n//! Serial n-1 matrices multiplication\nvalue SerialMatrixFib(int n)\n{\n    value c[2][2], a[2][2] = {{1, 1}, {1, 0}}, b[2][2] = {{1, 1}, {1, 0}}; int i;\n    for(i = 2; i < n; i++)\n    {   // Using condition to prevent copying of values\n        if(i & 1) Matrix2x2Multiply(a, c, b);\n        else      Matrix2x2Multiply(a, b, c);\n    }\n    return (i & 1) ? c[0][0] : b[0][0]; // get result from upper left cell\n}\n//! Recursive summing. Just for complete list of serial algorithms, not used\nvalue SerialRecursiveFib(int n)\n{\n    value result;\n    if(n < 2)\n        result = n;\n    else\n        result = SerialRecursiveFib(n - 1) + SerialRecursiveFib(n - 2);\n    return result;\n}\n//! Introducing of queue method in serial\nvalue SerialQueueFib(int n)\n{\n    concurrent_queue<Matrix2x2> Q;\n    for(int i = 1; i < n; i++)\n        Q.push(Matrix1110);\n    Matrix2x2 A, B;\n    while(true) {\n        while( !Q.try_pop(A) ) this_tbb_thread::yield();\n        if(Q.empty()) break;\n        while( !Q.try_pop(B) ) this_tbb_thread::yield();\n        Q.push(A * B);\n    }\n    return A.v[0][0];\n}\n//! Trying to use concurrent_vector\nvalue SerialVectorFib(int n)\n{\n    concurrent_vector<value> A;\n    A.grow_by(2);\n    A[0] = 0; A[1] = 1;\n    for( int i = 2; i <= n; i++)\n    {\n        A.grow_to_at_least(i+1);\n        A[i] = A[i-1] + A[i-2];\n    }\n    return A[n];\n}\n\n///////////////////// Parallel methods ////////////////////////\n\n// *** Serial shared by mutexes *** //\n\n//! Shared glabals\nvalue SharedA = 0, SharedB = 1; int SharedI = 1, SharedN;\n\n//! Template task class which computes Fibonacci numbers with shared globals\ntemplate<typename M>\nclass SharedSerialFibBody {\n    M &mutex;\npublic:\n    SharedSerialFibBody( M &m ) : mutex( m ) {}\n    //! main loop\n    void operator()( const blocked_range<int>& range ) const {\n        for(;;) {\n            typename M::scoped_lock lock( mutex );\n            if(SharedI >= SharedN) break;\n            value sum = SharedA + SharedB;\n            SharedA = SharedB; SharedB = sum;\n            ++SharedI;\n        }\n    }\n};\n\n//! Root function\ntemplate<class M>\nvalue SharedSerialFib(int n)\n{\n    SharedA = 0; SharedB = 1; SharedI = 1; SharedN = n; M mutex;\n    parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );\n    return SharedB;\n}\n\n// *** Serial shared by concurrent hash map *** //\n\n//! Hash comparer\nstruct IntHashCompare {\n    bool equal( const int j, const int k ) const { return j == k; }\n    unsigned long hash( const int k ) const { return (unsigned long)k; }   \n};\n//! NumbersTable type based on concurrent_hash_map\ntypedef concurrent_hash_map<int, value, IntHashCompare> NumbersTable;\n//! task for serial method using shared concurrent_hash_map\nclass ConcurrentHashSerialFibTask: public task {\n    NumbersTable &Fib;\n    int my_n;\npublic:\n    //! constructor\n    ConcurrentHashSerialFibTask( NumbersTable &cht, int n ) : Fib(cht), my_n(n) { }\n    //! executing task\n    task* execute() /*override*/ {\n        for( int i = 2; i <= my_n; ++i ) { // there is no difference in to recycle or to make loop\n            NumbersTable::const_accessor f1, f2; // same as iterators\n            if( !Fib.find(f1, i-1) || !Fib.find(f2, i-2) ) {\n                // Something is seriously wrong, because i-1 and i-2 must have been inserted \n                // earlier by this thread or another thread.\n                assert(0);\n            }\n            value sum = f1->second + f2->second;\n            NumbersTable::const_accessor fsum;\n            Fib.insert(fsum, make_pair(i, sum)); // inserting\n            assert( fsum->second == sum ); // check value\n        }\n        return 0;\n    }\n};\n\n//! Root function\nvalue ConcurrentHashSerialFib(int n)\n{\n    NumbersTable Fib; \n    bool okay;\n    okay = Fib.insert( make_pair(0, 0) ); assert(okay); // assign initial values\n    okay = Fib.insert( make_pair(1, 1) ); assert(okay);\n\n    task_list list;\n    // allocate tasks\n    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));\n    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));\n    task::spawn_root_and_wait(list);\n    NumbersTable::const_accessor fresult;\n    okay = Fib.find( fresult, n );\n    assert(okay);\n    return fresult->second;\n}\n\n// *** Queue with parallel_for and parallel_while *** //\n\n//! Stream of matrices\nstruct QueueStream {\n    volatile bool producer_is_done;\n    concurrent_queue<Matrix2x2> Queue;\n    //! Get pair of matricies if present\n    bool pop_if_present( pair<Matrix2x2, Matrix2x2> &mm ) {\n        // get first matrix if present\n        if(!Queue.try_pop(mm.first)) return false;\n        // get second matrix if present\n        if(!Queue.try_pop(mm.second)) {\n            // if not, then push back first matrix\n            Queue.push(mm.first); return false;\n        }\n        return true;\n    }\n};\n\n//! Functor for parallel_for which fills the queue\nstruct parallel_forFibBody { \n    QueueStream &my_stream;\n    //! fill functor arguments\n    parallel_forFibBody(QueueStream &s) : my_stream(s) { }\n    //! iterate thorough range\n    void operator()( const blocked_range<int> &range ) const {\n        int i_end = range.end();\n        for( int i = range.begin(); i != i_end; ++i ) {\n            my_stream.Queue.push( Matrix1110 ); // push initial matrix\n        }\n    }\n};\n//! Functor for parallel_while which process the queue\nclass parallel_whileFibBody\n{\n    QueueStream &my_stream;\n    parallel_while<parallel_whileFibBody> &my_while;\npublic:\n    typedef pair<Matrix2x2, Matrix2x2> argument_type;\n    //! fill functor arguments\n    parallel_whileFibBody(parallel_while<parallel_whileFibBody> &w, QueueStream &s)\n        : my_while(w), my_stream(s) { }\n    //! process pair of matrices\n    void operator() (argument_type mm) const {\n        mm.first = mm.first * mm.second;\n        // note: it can run concurrently with QueueStream::pop_if_present()\n        if(my_stream.Queue.try_pop(mm.second))\n             my_while.add( mm ); // now, two matrices available. Add next iteration.\n        else my_stream.Queue.push( mm.first ); // or push back calculated value if queue is empty\n    }\n};\n\n//! Parallel queue's filling task\nstruct QueueInsertTask: public task {\n    QueueStream &my_stream;\n    int my_n;\n    //! fill task arguments\n    QueueInsertTask( int n, QueueStream &s ) : my_n(n), my_stream(s) { }\n    //! executing task\n    task* execute() /*override*/ {\n        // Execute of parallel pushing of n-1 initial matrices\n        parallel_for( blocked_range<int>( 1, my_n, 10 ), parallel_forFibBody(my_stream) ); \n        my_stream.producer_is_done = true; \n        return 0;\n    }\n};\n//! Parallel queue's processing task\nstruct QueueProcessTask: public task {\n    QueueStream &my_stream;\n    //! fill task argument\n    QueueProcessTask( QueueStream &s ) : my_stream(s) { }\n    //! executing task\n    task* execute() /*override*/ {\n        while( !my_stream.producer_is_done || my_stream.Queue.unsafe_size()>1 ) {\n            parallel_while<parallel_whileFibBody> w; // run while loop in parallel\n            w.run( my_stream, parallel_whileFibBody( w, my_stream ) );\n        }\n        return 0;\n    }\n};\n//! Root function\nvalue ParallelQueueFib(int n)\n{\n    QueueStream stream;\n    stream.producer_is_done = false;\n    task_list list;\n    list.push_back(*new(task::allocate_root()) QueueInsertTask( n, stream ));\n    list.push_back(*new(task::allocate_root()) QueueProcessTask( stream ));\n    // If there is only a single thread, the first task in the list runs to completion\n    // before the second task in the list starts.\n    task::spawn_root_and_wait(list);\n    assert(stream.Queue.unsafe_size() == 1); // it is easy to lose some work\n    Matrix2x2 M; \n    bool result = stream.Queue.try_pop( M ); // get last matrix\n    assert( result );\n    return M.v[0][0]; // and result number\n}\n\n// *** Queue with pipeline *** //\n\n//! filter to fills queue\nclass InputFilter: public filter {\n    tbb::atomic<int> N; //< index of Fibonacci number minus 1\npublic:\n    concurrent_queue<Matrix2x2> Queue;\n    //! fill filter arguments\n    InputFilter( int n ) : filter(false /*is not serial*/) { N = n; }\n    //! executing filter\n    void* operator()(void*) /*override*/ {\n        int n = --N;\n        if(n <= 0) return 0;\n        Queue.push( Matrix1110 );\n        return &Queue;\n    }\n};\n//! filter to process queue\nclass MultiplyFilter: public filter {\npublic:\n    MultiplyFilter( ) : filter(false /*is not serial*/) { }\n    //! executing filter\n    void* operator()(void*p) /*override*/ {\n        concurrent_queue<Matrix2x2> &Queue = *static_cast<concurrent_queue<Matrix2x2> *>(p);\n        Matrix2x2 m1, m2;\n        // get two elements\n        while( !Queue.try_pop( m1 ) ) this_tbb_thread::yield(); \n        while( !Queue.try_pop( m2 ) ) this_tbb_thread::yield();\n        m1 = m1 * m2; // process them\n        Queue.push( m1 ); // and push back\n        return this; // just nothing\n    }\n};\n//! Root function\nvalue ParallelPipeFib(int n)\n{\n    InputFilter input( n-1 );\n    MultiplyFilter process;\n    // Create the pipeline\n    pipeline pipeline;\n    // add filters\n    pipeline.add_filter( input ); // first\n    pipeline.add_filter( process ); // second\n\n    input.Queue.push( Matrix1110 );\n    // Run the pipeline\n    pipeline.run( n ); // must be larger then max threads number\n    pipeline.clear(); // do not forget clear the pipeline\n\n    assert( input.Queue.unsafe_size()==1 );\n    Matrix2x2 M; \n    bool result = input.Queue.try_pop( M ); // get last element\n    assert( result );\n    return M.v[0][0]; // get value\n}\n\n// *** parallel_reduce *** //\n\n//! Functor for parallel_reduce\nstruct parallel_reduceFibBody {\n    Matrix2x2 sum;\n    int splitted;  //< flag to make one less operation for splitted bodies\n    //! Constructor fills sum with initial matrix\n    parallel_reduceFibBody() : sum( Matrix1110 ), splitted(0) { }\n    //! Splitting constructor\n    parallel_reduceFibBody( parallel_reduceFibBody& other, split ) : sum( Matrix1110 ), splitted(1/*note that it is splitted*/) {}\n    //! Join point\n    void join( parallel_reduceFibBody &s ) {\n        sum = sum * s.sum;\n    }\n    //! Process multiplications\n    void operator()( const blocked_range<int> &r ) {\n        for( int k = r.begin() + splitted; k < r.end(); ++k )\n            sum = sum * Matrix1110;\n        splitted = 0; // reset flag, because this method can be reused for next range\n    }\n};\n//! Root function\nvalue parallel_reduceFib(int n)\n{\n    parallel_reduceFibBody b;\n    parallel_reduce(blocked_range<int>(2, n, 3), b); // do parallel reduce on range [2, n) for b\n    return b.sum.v[0][0];\n}\n\n// *** parallel_scan *** //\n\n//! Functor for parallel_scan\nstruct parallel_scanFibBody {\n    /** Though parallel_scan is usually used to accumulate running sums,\n        it can be used to accumulate running products too. */\n    Matrix2x2 product;\n    /** Pointer to output sequence */\n    value* const output;\n    //! Constructor sets product to identity matrix\n    parallel_scanFibBody(value* output_) : product( MatrixIdentity ), output(output_) {}\n    //! Splitting constructor\n    parallel_scanFibBody( parallel_scanFibBody &b, split) : product( MatrixIdentity ), output(b.output) {}\n    //! Method for merging summary information from a, which was split off from *this, into *this.\n    void reverse_join( parallel_scanFibBody &a ) {\n        // When using non-commutative reduction operation, reverse_join\n        // should put argument \"a\" on the left side of the operation.\n        // The reversal from the argument order is why the method is\n        // called \"reverse_join\" instead of \"join\".\n        product = a.product * product;\n    }\n    //! Method for assigning final result back to original body.\n    void assign( parallel_scanFibBody &b ) {\n        product = b.product;\n    }\n    //! Compute matrix running product.\n    /** Tag indicates whether is is the final scan over the range, or\n        just a helper \"prescan\" that is computing a partial reduction. */\n    template<typename Tag>\n    void operator()( const blocked_range<int> &r, Tag tag) {\n        for( int k = r.begin(); k < r.end(); ++k ) {\n            // Code performs an \"exclusive\" scan, which outputs a value *before* updating the product.\n            // For an \"inclusive\" scan, output the value after the update.\n            if( tag.is_final_scan() )\n                output[k] = product.v[0][1];\n            product = product * Matrix1110;\n        }\n    }\n};\n//! Root function\nvalue parallel_scanFib(int n)\n{\n    value* output = new value[n];\n    parallel_scanFibBody b(output);\n    parallel_scan(blocked_range<int>(0, n, 3), b);\n    // output[0..n-1] now contains the Fibonacci sequence (modulo integer wrap-around).\n    // Check the last two values for correctness.\n    assert( n<2 || output[n-2]+output[n-1]==b.product.v[0][1] );\n    delete[] output;\n    return b.product.v[0][1];\n}\n\n// *** Raw tasks *** //\n\n//! task class which computes Fibonacci numbers by Lucas formula\nstruct FibTask: public task {\n    const int n;\n    value& sum;\n    value x, y;\n    bool second_phase; //< flag of continuation\n    // task arguments\n    FibTask( int n_, value& sum_ ) : \n        n(n_), sum(sum_), second_phase(false)\n    {}\n    //! Execute task\n    task* execute() /*override*/ {\n        // Using Lucas' formula here\n        if( second_phase ) { // children finished\n            sum = n&1 ? x*x + y*y : x*x - y*y;\n            return NULL;\n        }\n        if( n <= 2 ) {\n            sum = n!=0;\n            return NULL;\n        } else {\n            recycle_as_continuation();  // repeat this task when children finish\n            second_phase = true; // mark second phase\n            FibTask& a = *new( allocate_child() ) FibTask( n/2 + 1, x );\n            FibTask& b = *new( allocate_child() ) FibTask( n/2 - 1 + (n&1), y );\n            set_ref_count(2);\n            spawn( a );\n            return &b;\n        }\n    }\n};\n//! Root function\nvalue ParallelTaskFib(int n) { \n    value sum;\n    FibTask& a = *new(task::allocate_root()) FibTask(n, sum);\n    task::spawn_root_and_wait(a);\n    return sum;\n}\n\n/////////////////////////// Main ////////////////////////////////////////////////////\n\n//! A closed range of int.\nstruct IntRange {\n    int low;\n    int high;\n    void set_from_string( const char* s );\n    IntRange( int low_, int high_ ) : low(low_), high(high_) {}\n};\n\nvoid IntRange::set_from_string( const char* s ) {\n    char* end;\n    high = low = strtol(s,&end,0);\n    switch( *end ) {\n    case ':': \n        high = strtol(end+1,0,0); \n        break;\n    case '\\0':\n        break;\n    default:\n        printf(\"unexpected character = %c\\n\",*end);\n    }\n}\n\n//! Tick count for start\nstatic tick_count t0;\n\n//! Verbose output flag\nstatic bool Verbose = false;\n\ntypedef value (*MeasureFunc)(int);\n//! Measure ticks count in loop [2..n]\nvalue Measure(const char *name, MeasureFunc func, int n)\n{\n    value result;\n    if(Verbose) printf(\"%s\",name);\n    t0 = tick_count::now();\n    for(int number = 2; number <= n; number++)\n        result = func(number);\n    if(Verbose) printf(\"\\t- in %f msec\\n\", (tick_count::now() - t0).seconds()*1000);\n    return result;\n}\n\n//! program entry\nint main(int argc, char* argv[])\n{\n    if(argc>1) Verbose = true;\n    int NumbersCount = argc>1 ? strtol(argv[1],0,0) : 500;\n    IntRange NThread(1,4);// Number of threads to use.\n    if(argc>2) NThread.set_from_string(argv[2]);\n    unsigned long ntrial = argc>3? (unsigned long)strtoul(argv[3],0,0) : 1;\n    value result, sum;\n\n    if(Verbose) printf(\"Fibonacci numbers example. Generating %d numbers..\\n\",  NumbersCount);\n\n    result = Measure(\"Serial loop\", SerialFib, NumbersCount);\n    sum = Measure(\"Serial matrix\", SerialMatrixFib, NumbersCount); assert(result == sum);\n    sum = Measure(\"Serial vector\", SerialVectorFib, NumbersCount); assert(result == sum);\n    sum = Measure(\"Serial queue\", SerialQueueFib, NumbersCount); assert(result == sum);\n    // now in parallel\n    for( unsigned long i=0; i<ntrial; ++i ) {\n        for(int threads = NThread.low; threads <= NThread.high; threads *= 2)\n        {\n            task_scheduler_init scheduler_init(threads);\n            if(Verbose) printf(\"\\nThreads number is %d\\n\", threads);\n\n            sum = Measure(\"Shared serial (mutex)\\t\", SharedSerialFib<mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (spin_mutex)\", SharedSerialFib<spin_mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (queuing_mutex)\", SharedSerialFib<queuing_mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (Conc.HashTable)\", ConcurrentHashSerialFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel while+for/queue\", ParallelQueueFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel pipe/queue\\t\", ParallelPipeFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel reduce\\t\\t\", parallel_reduceFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel scan\\t\\t\", parallel_scanFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel tasks\\t\\t\", ParallelTaskFib, NumbersCount); assert(result == sum);\n        }\n\n    #ifdef __GNUC__\n        if(Verbose) printf(\"Fibonacci number #%d modulo 2^64 is %lld\\n\\n\", NumbersCount, result);\n    #else\n        if(Verbose) printf(\"Fibonacci number #%d modulo 2^64 is %I64d\\n\\n\", NumbersCount, result);\n    #endif\n    }\n    if(!Verbose) printf(\"TEST PASSED\\n\");\n    return 0;\n}\n\n// Utils\n\nvoid Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2])\n{\n    for( int i = 0; i <= 1; i++)\n        for( int j = 0; j <= 1; j++)\n            c[i][j] = a[i][0]*b[0][j] + a[i][1]*b[1][j];\n}\n\nMatrix2x2 Matrix2x2::operator *(const Matrix2x2 &to) const\n{\n    Matrix2x2 result;\n    Matrix2x2Multiply(v, to.v, result.v);\n    return result;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=fibonacci\nARGS=\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/Makefile.windows",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Common Makefile that builds and runs example.\n\n# Just specify your program basename\nPROG=Fibonacci\nARGS=\n\n# Trying to find if icl.exe is set\nCXX1 = $(TBB_CXX)-\nCXX2 = $(CXX1:icl.exe-=icl.exe)\nCXX  = $(CXX2:-=cl.exe)\n\n# The C++ compiler options\nMYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _WIN32_WINNT=0x0501 $(CXXFLAGS)\nMYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)\n\nall: release test\nrelease: compiler_check\n\t$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\ndebug: compiler_check\n\t$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe\nclean:\n\t@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest\ntest:\n\t$(PROG) $(ARGS)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/msvs/fibonacci.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2013\r\nVisualStudioVersion = 12.0.40629.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"fibonacci\", \"fibonacci.vcxproj\", \"{3AA40693-F93D-4D4B-B32E-068F511A252E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/msvs/fibonacci.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectName>fibonacci</ProjectName>\n    <ProjectGuid>{3AA40693-F93D-4D4B-B32E-068F511A252E}</ProjectGuid>\n    <RootNamespace>fibonacci</RootNamespace>\n    <Keyword>Win32Proj</Keyword>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"..\\..\\..\\common\\toolset.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v120</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</LinkIncremental>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(Platform)\\$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(TEMP)\\tbb_examples\\$(SolutionName)\\$(Platform)\\$(Configuration)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <Optimization>Disabled</Optimization>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 debug \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\ia32\\vc_mt;$(TBBROOT)\\lib\\ia32\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\ia32\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX86</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  ia32 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Midl>\n      <TargetEnvironment>X64</TargetEnvironment>\n    </Midl>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(TBBROOT)\\include;$(SolutionDir)\\..\\..\\..\\..\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(TBBROOT)\\lib\\intel64\\vc_mt;$(TBBROOT)\\lib\\intel64\\vc12;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc_mt;$(SolutionDir)\\..\\..\\..\\..\\lib\\intel64\\vc12;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <SubSystem>Console</SubSystem>\n      <OptimizeReferences>true</OptimizeReferences>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <TargetMachine>MachineX64</TargetMachine>\n      <FixedBaseAddress>false</FixedBaseAddress>\n    </Link>\n    <PostBuildEvent>\n      <Message>Copying DLLs and PDBs</Message>\n      <Command>call \"$(SolutionDir)\\..\\..\\..\\common\\copy_libraries.bat\"  intel64 release \"$(OutDir)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\Fibonacci.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\readme.html\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Fibonacci sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Fibonacci sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains an example that computes Fibonacci numbers in several\n\t\tdifferent ways.\n\t<br><br>\n\t\tThe purpose of the example is to exercise every include file\n\t\tand class in Intel&reg; Threading Building Blocks.\n\t\tMost of the computations are deliberately silly and not expected to\n\t\tshow any speedup on multiprocessors.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"Fibonacci.cpp\">Fibonacci.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fibonacci <i>K</i> [<i>M</i>[:<i>N</i>]] [<i>R</i>]</tt>\n\t\t\t\t<dd>Calculates the <i>K</i>-th fibonacci number.\n\t\t\t\t\t<i>M</i> and <i>N</i> are a range of numbers of threads to be used.\n\t\t\t\t\t<i>R</i> is the number of times to repeat the calculation.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small fibonacci number and the desired number of threads, e.g., <tt>fibonacci&nbsp;100&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tA1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Fibonacci.cpp */; };\n\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t8DD76F690486A84900D96B5E /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tA1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t8DD76F6C0486A84900D96B5E /* Fibonacci */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Fibonacci; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA1F593A50B8F042A00073279 /* Fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Fibonacci.cpp; path = ../Fibonacci.cpp; sourceTree = SOURCE_ROOT; };\n\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DD76F660486A84900D96B5E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t08FB7794FE84155DC02AAC07 /* Fibonacci */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t08FB7795FE84155DC02AAC07 /* Source */,\n\t\t\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */,\n\t\t\t\t1AB674ADFE9D54B511CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = Fibonacci;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB7795FE84155DC02AAC07 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593A50B8F042A00073279 /* Fibonacci.cpp */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1AB674ADFE9D54B511CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD76F6C0486A84900D96B5E /* Fibonacci */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA1F593B30B8F06F900073279 /* libtbb.dylib */,\n\t\t\t);\n\t\t\tname = \"External Frameworks and Libraries\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DD76F620486A84900D96B5E /* Fibonacci */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Fibonacci\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DD76F640486A84900D96B5E /* Sources */,\n\t\t\t\t8DD76F660486A84900D96B5E /* Frameworks */,\n\t\t\t\t8DD76F690486A84900D96B5E /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Fibonacci;\n\t\t\tproductInstallPath = \"$(HOME)/bin\";\n\t\t\tproductName = Fibonacci;\n\t\t\tproductReference = 8DD76F6C0486A84900D96B5E /* Fibonacci */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t08FB7793FE84155DC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0410;\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"fibonacci\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 08FB7794FE84155DC02AAC07 /* Fibonacci */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DD76F620486A84900D96B5E /* Fibonacci */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DD76F640486A84900D96B5E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB923208733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Fibonacci;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923308733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Fibonacci;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB923608733DC60010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB923708733DC60010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA1F593C60B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Fibonacci;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C70B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tGCC_GENERATE_DEBUGGING_SYMBOLS = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tHEADER_SEARCH_PATHS = ../../../../include;\n\t\t\t\tINSTALL_PATH = \"$(HOME)/bin\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t../../../../lib,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Fibonacci;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n\t\tA1F593C80B8F0E6E00073279 /* Debug64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Debug64;\n\t\t};\n\t\tA1F593C90B8F0E6E00073279 /* Release64 */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = i386;\n\t\t\t\tGCC_ENABLE_CPP_RTTI = YES;\n\t\t\t\tGCC_MODEL_TUNING = \"\";\n\t\t\t\tGCC_VERSION = 4.0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-m64\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"-m64\";\n\t\t\t\tPRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\n\t\t\t\tSYMROOT = \"/tmp/tbb-$(USER)\";\n\t\t\t};\n\t\t\tname = Release64;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget \"Fibonacci\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923208733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C60B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923308733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C70B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB923508733DC60010E9CD /* Build configuration list for PBXProject \"fibonacci\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB923608733DC60010E9CD /* Debug */,\n\t\t\t\tA1F593C80B8F0E6E00073279 /* Debug64 */,\n\t\t\t\t1DEB923708733DC60010E9CD /* Release */,\n\t\t\t\tA1F593C90B8F0E6E00073279 /* Release64 */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/examples/test_all/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on all features</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on various features</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains programs that exercise various components of Intel&reg; Threading Building Blocks.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fibonacci/readme.html\">fibonacci</a>\n\t\t\t\t<dd>Compute Fibonacci numbers in different ways.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"tbb/index.html\">tbb</A>\n<DD>Include files for Intel TBB classes and functions.\n<DT><A HREF=\"serial/tbb/\">serial/tbb</A>\n<DD>Include files for a sequential implementation of the parallel_for algorithm.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/serial/tbb/parallel_for.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_SERIAL_parallel_for_H\n#define __TBB_SERIAL_parallel_for_H\n\n#include \"tbb_annotate.h\"\n\n#ifndef __TBB_NORMAL_EXECUTION\n#include \"tbb/blocked_range.h\"\n#include \"tbb/partitioner.h\"\n#endif\n\n#if TBB_USE_EXCEPTIONS\n#include <stdexcept>\n#include <string> // required to construct std exception classes\n#else\n#include <cstdlib>\n#include <iostream>\n#endif\n\nnamespace tbb {\nnamespace serial {\nnamespace interface9 {\n\n// parallel_for serial annotated implementation\n\ntemplate< typename Range, typename Body, typename Partitioner >\nclass start_for : tbb::internal::no_copy {\n    Range my_range;\n    const Body my_body;\n    typename Partitioner::task_partition_type my_partition;\n    void execute();\n\n    //! Constructor for root task.\n    start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n        my_range( range ),\n        my_body( body ),\n        my_partition( partitioner )\n    {\n    }\n\n    //! Splitting constructor used to generate children.\n    /** this becomes left child.  Newly constructed object is right child. */\n    start_for( start_for& parent_, typename Partitioner::split_type& split_obj ) :\n        my_range( parent_.my_range, split_obj ),\n        my_body( parent_.my_body ),\n        my_partition( parent_.my_partition, split_obj )\n    {\n    }\n\npublic:\n    static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n        if( !range.empty() ) {\n            ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n            {\n                start_for a( range, body, partitioner );\n                a.execute();\n            }\n            ANNOTATE_SITE_END( tbb_parallel_for );\n        }\n    }\n};\n\ntemplate< typename Range, typename Body, typename Partitioner >\nvoid start_for< Range, Body, Partitioner >::execute() {\n    if( !my_range.is_divisible() || !my_partition.is_divisible() ) {\n        ANNOTATE_TASK_BEGIN( tbb_parallel_for_range );\n        {\n            my_body( my_range );\n        }\n        ANNOTATE_TASK_END( tbb_parallel_for_range );\n    } else {\n        typename Partitioner::split_type split_obj;\n        start_for b( *this, split_obj );\n        this->execute(); // Execute the left interval first to keep the serial order.\n        b.execute();     // Execute the right interval then.\n    }\n}\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    serial::interface9::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner (ignored)\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& ) {\n    if (step <= 0 ) {\n#if TBB_USE_EXCEPTIONS\n        throw std::invalid_argument( \"nonpositive_step\" );\n#else\n        std::cerr << \"nonpositive step in a call to parallel_for\" << std::endl;\n        std::abort();\n#endif\n    } else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n        for( Index i = first; i < last; i = i + step ) {\n            ANNOTATE_TASK_BEGIN( tbb_parallel_for_iteration );\n            { f( i ); }\n            ANNOTATE_TASK_END( tbb_parallel_for_iteration );\n        }\n        ANNOTATE_SITE_END( tbb_parallel_for );\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with explicit step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, step, f, p);\n}\n\n//! Parallel iteration over a range of integers with default step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with default step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and auto partitioner\ntemplate <typename Index, typename Function>\n    void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and affinity_partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, p);\n}\n\n} // namespace interfaceX\n\nusing interface9::parallel_for;\n\n} // namespace serial\n\n#ifndef __TBB_NORMAL_EXECUTION\nusing serial::interface9::parallel_for;\n#endif\n\n} // namespace tbb\n\n#endif /* __TBB_SERIAL_parallel_for_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/serial/tbb/tbb_annotate.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_annotate_H\n#define __TBB_annotate_H\n\n// Macros used by the Intel(R) Parallel Advisor.\n#ifdef __TBB_NORMAL_EXECUTION\n    #define ANNOTATE_SITE_BEGIN( site )\n    #define ANNOTATE_SITE_END( site )\n    #define ANNOTATE_TASK_BEGIN( task )\n    #define ANNOTATE_TASK_END( task )\n    #define ANNOTATE_LOCK_ACQUIRE( lock )\n    #define ANNOTATE_LOCK_RELEASE( lock )\n#else\n    #include <advisor-annotate.h>\n#endif\n\n#endif /* __TBB_annotate_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/aggregator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__aggregator_H\n#define __TBB__aggregator_H\n\n#if !TBB_PREVIEW_AGGREGATOR\n#error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h\n#endif\n\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\nnamespace interface6 {\n\nusing namespace tbb::internal;\n\nclass aggregator_operation {\n    template<typename handler_type> friend class aggregator_ext;\n    uintptr_t status;\n    aggregator_operation* my_next;\npublic:\n    enum aggregator_operation_status { agg_waiting=0, agg_finished };\n    aggregator_operation() : status(agg_waiting), my_next(NULL) {}\n    /// Call start before handling this operation\n    void start() { call_itt_notify(acquired, &status); }\n    /// Call finish when done handling this operation\n    /** The operation will be released to its originating thread, and possibly deleted. */\n    void finish() { itt_store_word_with_release(status, uintptr_t(agg_finished)); }\n    aggregator_operation* next() { return itt_hide_load_word(my_next);}\n    void set_next(aggregator_operation* n) { itt_hide_store_word(my_next, n); }\n};\n\nnamespace internal {\n\nclass basic_operation_base : public aggregator_operation {\n    friend class basic_handler;\n    virtual void apply_body() = 0;\npublic:\n    basic_operation_base() : aggregator_operation() {}\n    virtual ~basic_operation_base() {}\n};\n\ntemplate<typename Body>\nclass basic_operation : public basic_operation_base, no_assign {\n    const Body& my_body;\n    void apply_body() __TBB_override { my_body(); }\npublic:\n    basic_operation(const Body& b) : basic_operation_base(), my_body(b) {}\n};\n\nclass basic_handler {\npublic:\n    basic_handler() {}\n    void operator()(aggregator_operation* op_list) const {\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to the operation data.\n            // The executing thread \"acquires\" the tag (see start()) and then performs\n            // the associated operation w/o triggering a race condition diagnostics.\n            // A thread that created the operation is waiting for its status (see execute_impl()),\n            // so when this thread is done with the operation, it will \"release\" the tag\n            // and update the status (see finish()) to give control back to the waiting thread.\n            basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);\n            // IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()\n            op_list = op_list->next();\n            request.start();\n            request.apply_body();\n            request.finish();\n        }\n    }\n};\n\n} // namespace internal\n\n//! Aggregator base class and expert interface\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread. */\ntemplate <typename handler_type>\nclass aggregator_ext : tbb::internal::no_copy {\npublic:\n    aggregator_ext(const handler_type& h) : handler_busy(0), handle_operations(h) { mailbox = NULL; }\n\n    //! EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.\n    /** Details of user-made operations must be handled by user-provided handler */\n    void process(aggregator_operation *op) { execute_impl(*op); }\n\nprotected:\n    /** Place operation in mailbox, then either handle mailbox or wait for the operation\n        to be completed by a different thread. */\n    void execute_impl(aggregator_operation& op) {\n        aggregator_operation* res;\n\n        // ITT note: &(op.status) tag is used to cover accesses to this operation. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op.status));\n        // insert the operation into the list\n        do {\n            // ITT may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op.my_next = res = mailbox; // NOT A RACE\n        } while (mailbox.compare_and_swap(&op, res) != res);\n        if (!res) { // first in the list; handle the operations\n            // ITT note: &mailbox tag covers access to the handler_busy flag, which this\n            // waiting handler thread will try to set before entering handle_operations.\n            call_itt_notify(acquired, &mailbox);\n            start_handle_operations();\n            __TBB_ASSERT(op.status, NULL);\n        }\n        else { // not first; wait for op to be ready\n            call_itt_notify(prepare, &(op.status));\n            spin_wait_while_eq(op.status, uintptr_t(aggregator_operation::agg_waiting));\n            itt_load_word_with_acquire(op.status);\n        }\n    }\n\n\nprivate:\n    //! An atomically updated list (aka mailbox) of aggregator_operations\n    atomic<aggregator_operation *> mailbox;\n\n    //! Controls thread access to handle_operations\n    /** Behaves as boolean flag where 0=false, 1=true */\n    uintptr_t handler_busy;\n\n    handler_type handle_operations;\n\n    //! Trigger the handling of operations when the handler is free\n    void start_handle_operations() {\n        aggregator_operation *pending_operations;\n\n        // ITT note: &handler_busy tag covers access to mailbox as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in mailbox have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get handler_busy: only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &mailbox tag covers access to the handler_busy flag itself.\n        // Capturing the state of the mailbox signifies that handler_busy has been\n        // set and a new active handler will now process that list's operations.\n        call_itt_notify(releasing, &mailbox);\n        // grab pending_operations\n        pending_operations = mailbox.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(pending_operations);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\n//! Basic aggregator interface\nclass aggregator : private aggregator_ext<internal::basic_handler> {\npublic:\n    aggregator() : aggregator_ext<internal::basic_handler>(internal::basic_handler()) {}\n    //! BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.\n    /** The calling thread stores the function object in a basic_operation and\n        places the operation in the aggregator's mailbox */\n    template<typename Body>\n    void execute(const Body& b) {\n        internal::basic_operation<Body> op(b);\n        this->execute_impl(op);\n    }\n};\n\n} // namespace interface6\n\nusing interface6::aggregator;\nusing interface6::aggregator_ext;\nusing interface6::aggregator_operation;\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/aligned_space.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_aligned_space_H\n#define __TBB_aligned_space_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n\nnamespace tbb {\n\n//! Block of space aligned sufficiently to construct an array T with N elements.\n/** The elements are not constructed or destroyed by this class.\n    @ingroup memory_allocation */\ntemplate<typename T,size_t N=1>\nclass aligned_space {\nprivate:\n    typedef __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;\n    element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];\npublic:\n    //! Pointer to beginning of array\n    T* begin() const {return internal::punned_cast<T*>(this);}\n\n    //! Pointer to one past last element in array.\n    T* end() const {return begin()+N;}\n};\n\n} // namespace tbb\n\n#endif /* __TBB_aligned_space_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/atomic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_atomic_H\n#define __TBB_atomic_H\n\n#include <cstddef>\n\n#if _MSC_VER\n#define __TBB_LONG_LONG __int64\n#else\n#define __TBB_LONG_LONG long long\n#endif /* _MSC_VER */\n\n#include \"tbb_machine.h\"\n\n#if _MSC_VER && !__INTEL_COMPILER\n    // Suppress overzealous compiler warnings till the end of the file\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267 4512)\n#endif\n\nnamespace tbb {\n\n//! Specifies memory semantics.\nenum memory_semantics {\n    //! Sequential consistency\n    full_fence,\n    //! Acquire\n    acquire,\n    //! Release\n    release,\n    //! No ordering\n    relaxed\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if __TBB_ALIGNAS_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) alignas(a) t f;\n#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;\n#else\n    #error Do not know syntax for forcing alignment.\n#endif\n\ntemplate<size_t S>\nstruct atomic_rep;           // Primary template declared, but never defined.\n\ntemplate<>\nstruct atomic_rep<1> {       // Specialization\n    typedef int8_t word;\n};\ntemplate<>\nstruct atomic_rep<2> {       // Specialization\n    typedef int16_t word;\n};\ntemplate<>\nstruct atomic_rep<4> {       // Specialization\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n};\n#if __TBB_64BIT_ATOMICS\ntemplate<>\nstruct atomic_rep<8> {       // Specialization\n    typedef int64_t word;\n};\n#endif\n\ntemplate<typename value_type, size_t size>\nstruct aligned_storage;\n\n//the specializations are needed to please MSVC syntax of __declspec(align()) which accept _literal_ constants only\n#if __TBB_ATOMIC_CTORS\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n        aligned_storage() = default ;                                 \\\n        constexpr aligned_storage(value_type value):my_value(value){} \\\n    };                                                                \\\n\n#else\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n    };                                                                \\\n\n#endif\n\ntemplate<typename value_type>\nstruct aligned_storage<value_type,1> {\n    value_type my_value;\n#if __TBB_ATOMIC_CTORS\n    aligned_storage() = default ;\n    constexpr aligned_storage(value_type value):my_value(value){}\n#endif\n};\n\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(2)\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(4)\n#if __TBB_64BIT_ATOMICS\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(8)\n#endif\n\ntemplate<size_t Size, memory_semantics M>\nstruct atomic_traits;        // Primary template declared, but not defined.\n\n#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                                                         \\\n    template<> struct atomic_traits<S,M> {                                                               \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S##M(location,new_value,comparand);                             \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S##M(location,addend);                                        \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S##M(location,value);                                       \\\n        }                                                                                                \\\n    };\n\n#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                                                  \\\n    template<memory_semantics M>                                                                         \\\n    struct atomic_traits<S,M> {                                                                          \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S(location,new_value,comparand);                                \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S(location,addend);                                           \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S(location,value);                                          \\\n        }                                                                                                \\\n    };\n\ntemplate<memory_semantics M>\nstruct atomic_load_store_traits;    // Primary template declaration\n\n#define __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(M)                      \\\n    template<> struct atomic_load_store_traits<M> {                     \\\n        template <typename T>                                           \\\n        inline static T load( const volatile T& location ) {            \\\n            return __TBB_load_##M( location );                          \\\n        }                                                               \\\n        template <typename T>                                           \\\n        inline static void store( volatile T& location, T value ) {     \\\n            __TBB_store_##M( location, value );                         \\\n        }                                                               \\\n    }\n\n#if __TBB_USE_FENCED_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,relaxed)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,relaxed)\n#endif\n#else /* !__TBB_USE_FENCED_ATOMICS */\n__TBB_DECL_ATOMIC_PRIMITIVES(1)\n__TBB_DECL_ATOMIC_PRIMITIVES(2)\n__TBB_DECL_ATOMIC_PRIMITIVES(4)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_ATOMIC_PRIMITIVES(8)\n#endif\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(full_fence);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(acquire);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(release);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);\n\n//! Additive inverse of 1 for type T.\n/** Various compilers issue various warnings if -1 is used with various integer types.\n    The baroque expression below avoids all the warnings (we hope). */\n#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))\n\n//! Base class that provides basic functionality for atomic<T> without fetch_and_add.\n/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor,\n    and can be copied/compared by memcpy/memcmp. */\ntemplate<typename T>\nstruct atomic_impl {\nprotected:\n    aligned_storage<T,sizeof(T)> my_storage;\nprivate:\n    //TODO: rechecks on recent versions of gcc if union is still the _only_ way to do a conversion without warnings\n    //! Union type used to convert type T to underlying integral type.\n    template<typename value_type>\n    union converter {\n        typedef typename atomic_rep<sizeof(value_type)>::word bits_type;\n        converter(){}\n        converter(value_type a_value) : value(a_value) {}\n        value_type value;\n        bits_type bits;\n    };\n\n    template<typename value_t>\n    static typename converter<value_t>::bits_type to_bits(value_t value){\n        return converter<value_t>(value).bits;\n    }\n    template<typename value_t>\n    static value_t to_value(typename converter<value_t>::bits_type bits){\n        converter<value_t> u;\n        u.bits = bits;\n        return u.value;\n    }\n\n    template<typename value_t>\n    union ptr_converter;            //Primary template declared, but never defined.\n\n    template<typename value_t>\n    union ptr_converter<value_t *> {\n        ptr_converter(){}\n        ptr_converter(value_t* a_value) : value(a_value) {}\n        value_t* value;\n        uintptr_t bits;\n    };\n    //TODO: check if making to_bits accepting reference (thus unifying it with to_bits_ref)\n    //does not hurt performance\n    template<typename value_t>\n    static typename converter<value_t>::bits_type & to_bits_ref(value_t& value){\n        //TODO: this #ifdef is temporary workaround, as union conversion seems to fail\n        //on suncc for 64 bit types for 32 bit target\n        #if !__SUNPRO_CC\n            return *(typename converter<value_t>::bits_type*)ptr_converter<value_t*>(&value).bits;\n        #else\n            return *(typename converter<value_t>::bits_type*)(&value);\n        #endif\n    }\n\n\npublic:\n    typedef T value_type;\n\n#if __TBB_ATOMIC_CTORS\n    atomic_impl() = default ;\n    constexpr atomic_impl(value_type value):my_storage(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_store( value_type value ) {\n          return to_value<value_type>(\n                  internal::atomic_traits<sizeof(value_type),M>::fetch_and_store( &my_storage.my_value, to_bits(value) )\n          );\n    }\n\n    value_type fetch_and_store( value_type value ) {\n        return fetch_and_store<full_fence>(value);\n    }\n\n    template<memory_semantics M>\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return to_value<value_type>(\n                internal::atomic_traits<sizeof(value_type),M>::compare_and_swap( &my_storage.my_value, to_bits(value), to_bits(comparand) )\n        );\n    }\n\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return compare_and_swap<full_fence>(value,comparand);\n    }\n\n    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility\n        return  to_value<value_type>(\n                __TBB_load_with_acquire( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    template<memory_semantics M>\n    value_type load () const {\n        return to_value<value_type>(\n                internal::atomic_load_store_traits<M>::load( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    value_type load () const {\n        return load<acquire>();\n    }\n\n    template<memory_semantics M>\n    void store ( value_type value ) {\n        internal::atomic_load_store_traits<M>::store( to_bits_ref(my_storage.my_value), to_bits(value));\n    }\n\n    void store ( value_type value ) {\n        store<release>( value );\n    }\n\nprotected:\n    value_type store_with_release( value_type rhs ) {\n       //TODO: unify with store<release>\n        __TBB_store_with_release( to_bits_ref(my_storage.my_value), to_bits(rhs) );\n        return rhs;\n    }\n};\n\n//! Base class that provides basic functionality for atomic<T> with fetch_and_add.\n/** I is the underlying type.\n    D is the difference type.\n    StepType should be char if I is an integral type, and T if I is a T*. */\ntemplate<typename I, typename D, typename StepType>\nstruct atomic_impl_with_arithmetic: atomic_impl<I> {\npublic:\n    typedef I value_type;\n#if    __TBB_ATOMIC_CTORS\n    atomic_impl_with_arithmetic() = default ;\n    constexpr atomic_impl_with_arithmetic(value_type value): atomic_impl<I>(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_add( D addend ) {\n        return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_storage.my_value, addend*sizeof(StepType) ));\n    }\n\n    value_type fetch_and_add( D addend ) {\n        return fetch_and_add<full_fence>(addend);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_increment() {\n        return fetch_and_add<M>(1);\n    }\n\n    value_type fetch_and_increment() {\n        return fetch_and_add(1);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_decrement() {\n        return fetch_and_add<M>(__TBB_MINUS_ONE(D));\n    }\n\n    value_type fetch_and_decrement() {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n\npublic:\n    value_type operator+=( D value ) {\n        return fetch_and_add(value)+value;\n    }\n\n    value_type operator-=( D value ) {\n        // Additive inverse of value computed using binary minus,\n        // instead of unary minus, for sake of avoiding compiler warnings.\n        return operator+=(D(0)-value);\n    }\n\n    value_type operator++() {\n        return fetch_and_add(1)+1;\n    }\n\n    value_type operator--() {\n        return fetch_and_add(__TBB_MINUS_ONE(D))-1;\n    }\n\n    value_type operator++(int) {\n        return fetch_and_add(1);\n    }\n\n    value_type operator--(int) {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n};\n\n} /* Internal */\n//! @endcond\n\n//! Primary template for atomic.\n/** See the Reference for details.\n    @ingroup synchronization */\ntemplate<typename T>\nstruct atomic: internal::atomic_impl<T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default;\n    constexpr atomic(T arg): internal::atomic_impl<T>(arg) {}\n#endif\n    T operator=( T rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T>& operator=( const atomic<T>& rhs ) {this->store_with_release(rhs); return *this;}\n};\n\n#if __TBB_ATOMIC_CTORS\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            atomic() = default;                                                                     \\\n            constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}        \\\n                                                                                                    \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#else\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#endif\n\n#if __TBB_64BIT_ATOMICS\n//TODO: consider adding non-default (and atomic) copy constructor for 32bit platform\n__TBB_DECL_ATOMIC(__TBB_LONG_LONG)\n__TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)\n#else\n// test_atomic will verify that sizeof(long long)==8\n#endif\n__TBB_DECL_ATOMIC(long)\n__TBB_DECL_ATOMIC(unsigned long)\n\n#if _MSC_VER && !_WIN64\n#if __TBB_ATOMIC_CTORS\n/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.\n   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)\n   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be\n   type synonyms on the platform.  Type U should be the wider variant of T from the\n   perspective of /Wp64. */\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        atomic() = default ;                                                                   \\\n        constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}       \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#else\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#endif\n__TBB_DECL_ATOMIC_ALT(unsigned,size_t)\n__TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)\n#else\n__TBB_DECL_ATOMIC(unsigned)\n__TBB_DECL_ATOMIC(int)\n#endif /* _MSC_VER && !_WIN64 */\n\n__TBB_DECL_ATOMIC(unsigned short)\n__TBB_DECL_ATOMIC(short)\n__TBB_DECL_ATOMIC(char)\n__TBB_DECL_ATOMIC(signed char)\n__TBB_DECL_ATOMIC(unsigned char)\n\n#if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)\n__TBB_DECL_ATOMIC(wchar_t)\n#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */\n\n//! Specialization for atomic<T*> with arithmetic and operator->.\ntemplate<typename T> struct atomic<T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(T* arg): internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T>(arg) {}\n#endif\n    T* operator=( T* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T*>& operator=( const atomic<T*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n    T* operator->() const {\n        return (*this);\n    }\n};\n\n//! Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->.\ntemplate<> struct atomic<void*>: internal::atomic_impl<void*> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(void* arg): internal::atomic_impl<void*>(arg) {}\n#endif\n    void* operator=( void* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<void*>& operator=( const atomic<void*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n};\n\n// Helpers to workaround ugly syntax of calling template member function of a\n// template class with template argument dependent on template parameters.\n\ntemplate <memory_semantics M, typename T>\nT load ( const atomic<T>& a ) { return a.template load<M>(); }\n\ntemplate <memory_semantics M, typename T>\nvoid store ( atomic<T>& a, T value ) { a.template store<M>(value); }\n\nnamespace interface6{\n//! Make an atomic for use in an initialization (list), as an alternative to zero-initialization or normal assignment.\ntemplate<typename T>\natomic<T> make_atomic(T t) {\n    atomic<T> a;\n    store<relaxed>(a,t);\n    return a;\n}\n}\nusing interface6::make_atomic;\n\nnamespace internal {\ntemplate<memory_semantics M, typename T >\nvoid swap(atomic<T> & lhs, atomic<T> & rhs){\n    T tmp = load<M>(lhs);\n    store<M>(lhs,load<M>(rhs));\n    store<M>(rhs,tmp);\n}\n\n// only to aid in the gradual conversion of ordinary variables to proper atomics\ntemplate<typename T>\ninline atomic<T>& as_atomic( T& t ) {\n    return (atomic<T>&)t;\n}\n} // namespace tbb::internal\n\n} // namespace tbb\n\n#if _MSC_VER && !__INTEL_COMPILER\n    #pragma warning (pop)\n#endif // warnings are restored\n\n#endif /* __TBB_atomic_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/blocked_range.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range_H\n#define __TBB_blocked_range_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\nnamespace internal {\n\n// blocked_rangeNd_impl forward declaration in tbb::internal namespace to\n// name it as a friend for a tbb::blocked_range.\ntemplate<typename Value, unsigned int N, typename>\nclass blocked_rangeNd_impl;\n\n} // namespace internal\n\n/** \\page range_req Requirements on range concept\n    Class \\c R implementing the concept of range must define:\n    - \\code R::R( const R& ); \\endcode               Copy constructor\n    - \\code R::~R(); \\endcode                        Destructor\n    - \\code bool R::is_divisible() const; \\endcode   True if range can be partitioned into two subranges\n    - \\code bool R::empty() const; \\endcode          True if range is empty\n    - \\code R::R( R& r, split ); \\endcode            Split range \\c r into two subranges.\n**/\n\n//! A range over which to iterate.\n/** @ingroup algorithms */\ntemplate<typename Value>\nclass blocked_range {\npublic:\n    //! Type of a value\n    /** Called a const_iterator for sake of algorithms that need to treat a blocked_range\n        as an STL container. */\n    typedef Value const_iterator;\n\n    //! Type for size of a range\n    typedef std::size_t size_type;\n\n#if __TBB_DEPRECATED_BLOCKED_RANGE_DEFAULT_CTOR\n    //! Construct range with default-constructed values for begin, end, and grainsize.\n    /** Requires that Value have a default constructor. */\n    blocked_range() : my_end(), my_begin(), my_grainsize() {}\n#endif\n\n    //! Construct range over half-open interval [begin,end), with the given grainsize.\n    blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) :\n        my_end(end_), my_begin(begin_), my_grainsize(grainsize_)\n    {\n        __TBB_ASSERT( my_grainsize>0, \"grainsize must be positive\" );\n    }\n\n    //! Beginning of range.\n    const_iterator begin() const {return my_begin;}\n\n    //! One past last value in range.\n    const_iterator end() const {return my_end;}\n\n    //! Size of the range\n    /** Unspecified if end()<begin(). */\n    size_type size() const {\n        __TBB_ASSERT( !(end()<begin()), \"size() unspecified if end()<begin()\" );\n        return size_type(my_end-my_begin);\n    }\n\n    //! The grain size for this range.\n    size_type grainsize() const {return my_grainsize;}\n\n    //------------------------------------------------------------------------\n    // Methods that implement Range concept\n    //------------------------------------------------------------------------\n\n    //! True if range is empty.\n    bool empty() const {return !(my_begin<my_end);}\n\n    //! True if range is divisible.\n    /** Unspecified if end()<begin(). */\n    bool is_divisible() const {return my_grainsize<size();}\n\n    //! Split range.\n    /** The new Range *this has the second part, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, split ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, split())),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    //! Split range.\n    /** The new Range *this has the second part split according to specified proportion, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, proportional_split& proportion ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, proportion)),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\nprivate:\n    /** NOTE: my_end MUST be declared before my_begin, otherwise the splitting constructor will break. */\n    Value my_end;\n    Value my_begin;\n    size_type my_grainsize;\n\n    //! Auxiliary function used by the splitting constructor.\n    static Value do_split( blocked_range& r, split )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n        Value middle = r.my_begin + (r.my_end - r.my_begin) / 2u;\n        r.my_end = middle;\n        return middle;\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    static Value do_split( blocked_range& r, proportional_split& proportion )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n\n        // usage of 32-bit floating point arithmetic is not enough to handle ranges of\n        // more than 2^24 iterations accurately. However, even on ranges with 2^64\n        // iterations the computational error approximately equals to 0.000001% which\n        // makes small impact on uniform distribution of such range's iterations (assuming\n        // all iterations take equal time to complete). See 'test_partitioner_whitebox'\n        // for implementation of an exact split algorithm\n        size_type right_part = size_type(float(r.size()) * float(proportion.right())\n                                         / float(proportion.left() + proportion.right()) + 0.5f);\n        return r.my_end = Value(r.my_end - right_part);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    template<typename RowValue, typename ColValue>\n    friend class blocked_range2d;\n\n    template<typename RowValue, typename ColValue, typename PageValue>\n    friend class blocked_range3d;\n\n    template<typename DimValue, unsigned int N, typename>\n    friend class internal::blocked_rangeNd_impl;\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/blocked_range2d.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range2d_H\n#define __TBB_blocked_range2d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 2-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename RowValue, typename ColValue=RowValue>\nclass blocked_range2d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<RowValue> row_range_type;\n    typedef blocked_range<ColValue> col_range_type;\n\nprivate:\n    row_range_type my_rows;\n    col_range_type my_cols;\n\npublic:\n\n    blocked_range2d( RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,\n                     ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) :\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {}\n\n    blocked_range2d( RowValue row_begin, RowValue row_end,\n                     ColValue col_begin, ColValue col_end ) :\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {}\n\n    //! True if range is empty\n    bool empty() const {\n        // Range is empty if at least one dimension is empty.\n        return my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range2d( blocked_range2d& r, split ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range2d( blocked_range2d& r, proportional_split& proportion ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n\nprivate:\n\n    template <typename Split>\n    void do_split( blocked_range2d& r, Split& split_obj )\n    {\n        if( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n            my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n        } else {\n            my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n        }\n    }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range2d_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/blocked_range3d.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range3d_H\n#define __TBB_blocked_range3d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 3-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>\nclass blocked_range3d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<PageValue> page_range_type;\n    typedef blocked_range<RowValue>  row_range_type;\n    typedef blocked_range<ColValue>  col_range_type;\n\nprivate:\n    page_range_type my_pages;\n    row_range_type  my_rows;\n    col_range_type  my_cols;\n\npublic:\n\n    blocked_range3d( PageValue page_begin, PageValue page_end,\n                     RowValue  row_begin,  RowValue row_end,\n                     ColValue  col_begin,  ColValue col_end ) :\n        my_pages(page_begin,page_end),\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {}\n\n    blocked_range3d( PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize,\n                     RowValue  row_begin,  RowValue row_end,   typename row_range_type::size_type row_grainsize,\n                     ColValue  col_begin,  ColValue col_end,   typename col_range_type::size_type col_grainsize ) :\n        my_pages(page_begin,page_end,page_grainsize),\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {}\n\n    //! True if range is empty\n    bool empty() const {\n        // Range is empty if at least one dimension is empty.\n        return my_pages.empty() || my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return  my_pages.is_divisible() || my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range3d( blocked_range3d& r, split ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range3d( blocked_range3d& r, proportional_split& proportion ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    //! The pages of the iteration space\n    const page_range_type& pages() const {return my_pages;}\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n\nprivate:\n\n    template <typename Split>\n    void do_split( blocked_range3d& r, Split& split_obj)\n    {\n        if ( my_pages.size()*double(my_rows.grainsize()) < my_rows.size()*double(my_pages.grainsize()) ) {\n            if ( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n            }\n        } else {\n            if ( my_pages.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_pages.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_pages.my_begin = page_range_type::do_split(r.my_pages, split_obj);\n            }\n        }\n    }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range3d_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/blocked_rangeNd.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_rangeNd_H\n#define __TBB_blocked_rangeNd_H\n\n#if ! TBB_PREVIEW_BLOCKED_RANGE_ND\n    #error Set TBB_PREVIEW_BLOCKED_RANGE_ND to include blocked_rangeNd.h\n#endif\n\n#include \"tbb_config.h\"\n\n// tbb::blocked_rangeNd requires C++11 support\n#if __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT\n\n#include \"internal/_template_helpers.h\" // index_sequence, make_index_sequence\n\n#include <array>\n#include <algorithm>    // std::any_of\n#include <type_traits>  // std::is_same, std::enable_if\n\n#include \"tbb/blocked_range.h\"\n\nnamespace tbb {\nnamespace internal {\n\n/*\n    The blocked_rangeNd_impl uses make_index_sequence<N> to automatically generate a ctor with\n    exactly N arguments of the type tbb::blocked_range<Value>. Such ctor provides an opportunity\n    to use braced-init-list parameters to initialize each dimension.\n    Use of parameters, whose representation is a braced-init-list, but they're not\n    std::initializer_list or a reference to one, produces a non-deduced context\n    within template argument deduction.\n\n    NOTE: blocked_rangeNd must be exactly a templated alias to the blocked_rangeNd_impl\n    (and not e.g. a derived class), otherwise it would need to declare its own ctor\n    facing the same problem that the impl class solves.\n*/\n\ntemplate<typename Value, unsigned int N, typename = make_index_sequence<N>>\nclass blocked_rangeNd_impl;\n\ntemplate<typename Value, unsigned int N, std::size_t... Is>\nclass blocked_rangeNd_impl<Value, N, index_sequence<Is...>> {\npublic:\n    //! Type of a value.\n    using value_type = Value;\n\nprivate:\n\n    //! Helper type to construct range with N tbb::blocked_range<value_type> objects.\n    template<std::size_t>\n    using dim_type_helper = tbb::blocked_range<value_type>;\n\npublic:\n    blocked_rangeNd_impl() = delete;\n\n    //! Constructs N-dimensional range over N half-open intervals each represented as tbb::blocked_range<Value>.\n    blocked_rangeNd_impl(const dim_type_helper<Is>&... args) : my_dims{ {args...} } {}\n\n    //! Dimensionality of a range.\n    static constexpr unsigned int ndims() { return N; }\n\n    //! Range in certain dimension.\n    const tbb::blocked_range<value_type>& dim(unsigned int dimension) const {\n        __TBB_ASSERT(dimension < N, \"out of bound\");\n        return my_dims[dimension];\n    }\n\n    //------------------------------------------------------------------------\n    // Methods that implement Range concept\n    //------------------------------------------------------------------------\n\n    //! True if at least one dimension is empty.\n    bool empty() const {\n        return std::any_of(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& d) {\n            return d.empty();\n        });\n    }\n\n    //! True if at least one dimension is divisible.\n    bool is_divisible() const {\n        return std::any_of(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& d) {\n            return d.is_divisible();\n        });\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split.\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_rangeNd_impl(blocked_rangeNd_impl& r, proportional_split proportion) : my_dims(r.my_dims) {\n        do_split(r, proportion);\n    }\n#endif\n\n    blocked_rangeNd_impl(blocked_rangeNd_impl& r, split proportion) : my_dims(r.my_dims) {\n        do_split(r, proportion);\n    }\n\nprivate:\n    __TBB_STATIC_ASSERT(N != 0, \"zero dimensional blocked_rangeNd can't be constructed\");\n\n    //! Ranges in each dimension.\n    std::array<tbb::blocked_range<value_type>, N> my_dims;\n\n    template<typename split_type>\n    void do_split(blocked_rangeNd_impl& r, split_type proportion) {\n        __TBB_STATIC_ASSERT((is_same_type<split_type, split>::value\n                            || is_same_type<split_type, proportional_split>::value),\n                            \"type of split object is incorrect\");\n        __TBB_ASSERT(r.is_divisible(), \"can't split not divisible range\");\n\n        auto my_it = std::max_element(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& first, const tbb::blocked_range<value_type>& second) {\n            return (first.size() * second.grainsize() < second.size() * first.grainsize());\n        });\n\n        auto r_it = r.my_dims.begin() + (my_it - my_dims.begin());\n\n        my_it->my_begin = tbb::blocked_range<value_type>::do_split(*r_it, proportion);\n\n        // (!(my_it->my_begin < r_it->my_end) && !(r_it->my_end < my_it->my_begin)) equals to\n        // (my_it->my_begin == r_it->my_end), but we can't use operator== due to Value concept\n        __TBB_ASSERT(!(my_it->my_begin < r_it->my_end) && !(r_it->my_end < my_it->my_begin),\n                     \"blocked_range has been split incorrectly\");\n    }\n};\n\n} // namespace internal\n\ntemplate<typename Value, unsigned int N>\nusing blocked_rangeNd = internal::blocked_rangeNd_impl<Value, N>;\n\n} // namespace tbb\n\n#endif /* __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT */\n#endif /* __TBB_blocked_rangeNd_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/cache_aligned_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_cache_aligned_allocator_H\n#define __TBB_cache_aligned_allocator_H\n\n#include <new>\n#include \"tbb_stddef.h\"\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Cache/sector line size.\n    /** @ingroup memory_allocation */\n    size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();\n\n    //! Allocate memory on cache/sector line boundary.\n    /** @ingroup memory_allocation */\n    void* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );\n\n    //! Free memory allocated by NFS_Allocate.\n    /** Freeing a NULL pointer is allowed, but has no effect.\n        @ingroup memory_allocation */\n    void __TBB_EXPORTED_FUNC NFS_Free( void* );\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass cache_aligned_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n\n    cache_aligned_allocator() throw() {}\n    cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}\n    template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects, starting on a cache/sector line.\n    pointer allocate( size_type n, const void* hint=0 ) {\n        // The \"hint\" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt\n        return pointer(internal::NFS_Allocate( n, sizeof(value_type), const_cast<void*>(hint) ));\n    }\n\n    //! Free block of memory that starts on a cache line\n    void deallocate( pointer p, size_type ) {\n        internal::NFS_Free(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        return (~size_t(0)-internal::NFS_MaxLineSize)/sizeof(value_type);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass cache_aligned_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#endif /* __TBB_cache_aligned_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/combinable.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_combinable_H\n#define __TBB_combinable_H\n\n#include \"enumerable_thread_specific.h\"\n#include \"cache_aligned_allocator.h\"\n\nnamespace tbb {\n/** \\name combinable\n    **/\n//@{\n//! Thread-local storage with optional reduction\n/** @ingroup containers */\n    template <typename T>\n    class combinable {\n\n    private:\n        typedef typename tbb::cache_aligned_allocator<T> my_alloc;\n        typedef typename tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;\n        my_ets_type my_ets;\n\n    public:\n\n        combinable() { }\n\n        template <typename finit>\n        explicit combinable( finit _finit) : my_ets(_finit) { }\n\n        //! destructor\n        ~combinable() { }\n\n        combinable( const combinable& other) : my_ets(other.my_ets) { }\n\n#if __TBB_ETS_USE_CPP11\n        combinable( combinable&& other) : my_ets( std::move(other.my_ets)) { }\n#endif\n\n        combinable & operator=( const combinable & other) {\n            my_ets = other.my_ets;\n            return *this;\n        }\n\n#if __TBB_ETS_USE_CPP11\n        combinable & operator=( combinable && other) {\n            my_ets=std::move(other.my_ets);\n            return *this;\n        }\n#endif\n\n        void clear() { my_ets.clear(); }\n\n        T& local() { return my_ets.local(); }\n\n        T& local(bool & exists) { return my_ets.local(exists); }\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) { return my_ets.combine(f_combine); }\n\n        // combine_func_t has signature void(T) or void(const T&)\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) { my_ets.combine_each(f_combine); }\n\n    };\n} // namespace tbb\n#endif /* __TBB_combinable_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/compat/condition_variable",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_condition_variable_H\n#define __TBB_condition_variable_H\n\n#if _WIN32||_WIN64\n#include \"../machine/windows_api.h\"\n\nnamespace tbb { \nnamespace interface5 {\nnamespace internal { \nstruct condition_variable_using_event\n{\n    //! Event for blocking waiting threads.\n    HANDLE event;\n    //! Protects invariants involving n_waiters, release_count, and epoch.\n    CRITICAL_SECTION mutex;\n    //! Number of threads waiting on this condition variable\n    int n_waiters;\n    //! Number of threads remaining that should no longer wait on this condition variable.\n    int release_count;\n    //! To keep threads from waking up prematurely with earlier signals.\n    unsigned epoch;\n};\n}}} // namespace tbb::interface5::internal\n\n#ifndef CONDITION_VARIABLE_INIT\ntypedef void* CONDITION_VARIABLE;\ntypedef CONDITION_VARIABLE* PCONDITION_VARIABLE;\n#endif\n\n#else /* if not _WIN32||_WIN64 */\n#include <errno.h> // some systems need it for ETIMEDOUT\n#include <pthread.h>\n#if __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif\n#endif /* _WIN32||_WIN64 */\n\n#include \"../tbb_stddef.h\"\n#include \"../mutex.h\"\n#include \"../tbb_thread.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface5 {\n\n// C++0x standard working draft 30.4.3\n// Lock tag types\nstruct defer_lock_t { }; //! do not acquire ownership of the mutex\nstruct try_to_lock_t { }; //! try to acquire ownership of the mutex without blocking\nstruct adopt_lock_t { }; //! assume the calling thread has already\nconst defer_lock_t defer_lock = {};\nconst try_to_lock_t try_to_lock = {};\nconst adopt_lock_t adopt_lock = {};\n\n// C++0x standard working draft 30.4.3.1\n//! lock_guard \ntemplate<typename M>\nclass lock_guard : tbb::internal::no_copy {\npublic:\n    //! mutex type\n    typedef M mutex_type;\n\n    //! Constructor\n    /** precondition: If mutex_type is not a recursive mutex, the calling thread\n        does not own the mutex m. */\n    explicit lock_guard(mutex_type& m) : pm(m) {m.lock();}\n    \n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex m. */\n    lock_guard(mutex_type& m, adopt_lock_t) : pm(m) {}\n\n    //! Destructor\n    ~lock_guard() { pm.unlock(); }\nprivate:\n    mutex_type& pm;\n};\n\n// C++0x standard working draft 30.4.3.2\n//! unique_lock \ntemplate<typename M>\nclass unique_lock : tbb::internal::no_copy {\n    friend class condition_variable;\npublic:\n    typedef M mutex_type;\n\n    // 30.4.3.2.1 construct/copy/destroy\n    // NB: Without constructors that take an r-value reference to a unique_lock, the following constructor is of little use.\n    //! Constructor\n    /** postcondition: pm==0 && owns==false */\n    unique_lock() : pm(NULL), owns(false) {}\n\n    //! Constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n        does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n        postcondition: pm==&m and owns==true */\n    explicit unique_lock(mutex_type& m) : pm(&m) {m.lock(); owns=true;}\n\n    //! Defer_lock constructor\n    /** postcondition: pm==&m and owns==false */\n    unique_lock(mutex_type& m, defer_lock_t) : pm(&m), owns(false) {}\n\n    //! Try_to_lock constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n       does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n       postcondition: pm==&m and owns==res where res is the value returned by\n       the call to m.try_lock(). */\n    unique_lock(mutex_type& m, try_to_lock_t) : pm(&m) {owns = m.try_lock();}\n\n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex. If it does not, mutex->unlock() would fail.\n        postcondition: pm==&m and owns==true */\n    unique_lock(mutex_type& m, adopt_lock_t) : pm(&m), owns(true) {}\n\n    //! Timed unique_lock acquisition.\n    /** To avoid requiring support for namespace chrono, this method deviates from the working draft in that \n        it uses tbb::tick_count::interval_t to specify the time duration. */\n    unique_lock(mutex_type& m, const tick_count::interval_t &i) : pm(&m) {owns = try_lock_for( i );}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        construction), src.pm == 0 and src.owns == false. */\n    unique_lock(unique_lock && src): pm(NULL), owns(false) {this->swap(src);}\n\n    //! Move assignment\n    /** effects: If owns calls pm->unlock().\n        Postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        assignment), src.pm == 0 and src.owns == false. */\n    unique_lock& operator=(unique_lock && src) {\n        if (owns)\n            this->unlock();\n        pm = NULL;\n        this->swap(src);\n        return *this;\n    }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Destructor\n    ~unique_lock() { if( owns ) pm->unlock(); }\n\n    // 30.4.3.2.2 locking\n    //! Lock the mutex and own it.\n    void lock() {\n        if( pm ) {\n            if( !owns ) {\n                pm->lock();\n                owns = true;\n            } else \n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( owns, NULL );\n    }\n\n    //! Try to lock the mutex. \n    /** If successful, note that this lock owns it. Otherwise, set it false. */\n    bool try_lock() {\n        if( pm ) {\n            if( !owns )\n                owns = pm->try_lock();\n            else\n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        return owns;\n    }\n \n    //! Try to lock the mutex. \n    bool try_lock_for( const tick_count::interval_t &i );\n\n    //! Unlock the mutex\n    /** And note that this lock no longer owns it. */\n    void unlock() { \n        if( owns ) {\n            pm->unlock();\n            owns = false;\n        } else\n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( !owns, NULL );\n    }\n\n    // 30.4.3.2.3 modifiers\n    //! Swap the two unique locks\n    void swap(unique_lock& u) {\n        mutex_type* t_pm = u.pm;    u.pm   = pm;    pm   = t_pm;\n        bool t_owns      = u.owns;  u.owns = owns;  owns = t_owns;\n    }\n\n    //! Release control over the mutex.\n    mutex_type* release() {\n        mutex_type* o_pm = pm; \n        pm = NULL; \n        owns = false; \n        return o_pm; \n    }\n\n    // 30.4.3.2.4 observers\n    //! Does this lock own the mutex?\n    bool owns_lock() const { return owns; }\n\n    // TODO: Un-comment 'explicit' when the last non-C++0x compiler support is dropped\n    //! Does this lock own the mutex?\n    /*explicit*/ operator bool() const { return owns; }\n\n    //! Return the mutex that this lock currently has.\n    mutex_type* mutex() const { return pm; }\n\nprivate:\n    mutex_type* pm;\n    bool owns;\n};\n\ntemplate<typename M>\nbool unique_lock<M>::try_lock_for( const tick_count::interval_t &i)\n{ \n    const int unique_lock_tick = 100; /* microseconds; 0.1 milliseconds */\n    // the smallest wait-time is 0.1 milliseconds.\n    bool res = pm->try_lock();\n    int duration_in_micro; \n    if( !res && (duration_in_micro=int(i.seconds()*1e6))>unique_lock_tick ) {\n        tick_count::interval_t i_100( double(unique_lock_tick)/1e6 /* seconds */); // 100 microseconds = 0.1*10E-3\n        do {\n            this_tbb_thread::sleep(i_100); // sleep for 100 micro seconds\n            duration_in_micro -= unique_lock_tick;\n            res = pm->try_lock();\n        } while( !res && duration_in_micro>unique_lock_tick );\n    }\n    return (owns=res);\n}\n\n//! Swap the two unique locks that have the mutexes of same type \ntemplate<typename M>\nvoid swap(unique_lock<M>& x, unique_lock<M>& y) { x.swap( y ); }\n\nnamespace internal {\n\n#if _WIN32||_WIN64\nunion condvar_impl_t {\n    condition_variable_using_event cv_event;\n    CONDITION_VARIABLE             cv_native;\n};\nvoid __TBB_EXPORTED_FUNC internal_initialize_condition_variable( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_destroy_condition_variable(    condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_one( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_all( condvar_impl_t& cv );\nbool __TBB_EXPORTED_FUNC internal_condition_variable_wait( condvar_impl_t& cv, mutex* mtx, const tick_count::interval_t* i = NULL );\n\n#else /* if !(_WIN32||_WIN64), i.e., POSIX threads */\ntypedef pthread_cond_t condvar_impl_t;\n#endif\n\n} // namespace internal\n\n//! cv_status\n/** C++0x standard working draft 30.5 */\nenum cv_status { no_timeout, timeout }; \n\n//! condition variable\n/** C++0x standard working draft 30.5.1 \n    @ingroup synchronization */\nclass condition_variable : tbb::internal::no_copy {\npublic:\n    //! Constructor\n    condition_variable() { \n#if _WIN32||_WIN64\n        internal_initialize_condition_variable( my_cv ); \n#else\n        pthread_cond_init( &my_cv, NULL );\n#endif\n    }\n\n    //! Destructor\n    ~condition_variable() { \n        //precondition: There shall be no thread blocked on *this.\n#if _WIN32||_WIN64\n        internal_destroy_condition_variable( my_cv );\n#else\n        pthread_cond_destroy( &my_cv );\n#endif\n    }\n\n    //! Notify one thread and wake it up\n    void notify_one() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_one( my_cv ); \n#else\n        pthread_cond_signal( &my_cv );\n#endif\n    }\n\n    //! Notify all threads \n    void notify_all() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_all( my_cv ); \n#else\n        pthread_cond_broadcast( &my_cv );\n#endif\n    }\n\n    //! Release the mutex associated with the lock and wait on this condition variable\n    void wait(unique_lock<mutex>& lock);\n\n    //! Wait on this condition variable while pred is false\n    template <class Predicate>\n    void wait(unique_lock<mutex>& lock, Predicate pred) {\n        while( !pred() )\n            wait( lock );\n    }\n\n    //! Timed version of wait()\n    cv_status wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i );\n\n    //! Timed version of the predicated wait\n    /** The loop terminates when pred() returns true or when the time duration specified by rel_time (i) has elapsed. */\n    template<typename Predicate>\n    bool wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i, Predicate pred)\n    {\n        while( !pred() ) {\n            cv_status st = wait_for( lock, i );\n            if( st==timeout )\n                return pred();\n        }\n        return true;\n    }\n\n    // C++0x standard working draft. 30.2.3\n    typedef internal::condvar_impl_t* native_handle_type;\n\n    native_handle_type native_handle() { return (native_handle_type) &my_cv; }\n\nprivate:\n    internal::condvar_impl_t my_cv;\n};\n\n\n#if _WIN32||_WIN64\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( !internal_condition_variable_wait( my_cv, lock.mutex() ) ) {\n        int ec = GetLastError();\n        // on Windows 7, SleepConditionVariableCS() may return ERROR_TIMEOUT while the doc says it returns WAIT_TIMEOUT\n        __TBB_ASSERT_EX( ec!=WAIT_TIMEOUT&&ec!=ERROR_TIMEOUT, NULL );\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    // condvar_wait could be SleepConditionVariableCS (or SleepConditionVariableSRW) or our own pre-vista cond_var_wait()\n    if( !internal_condition_variable_wait( my_cv, lock.mutex(), &i ) ) {\n        int ec = GetLastError();\n        if( ec==WAIT_TIMEOUT || ec==ERROR_TIMEOUT )\n            rc = timeout;\n        else {\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n\n#else /* !(_WIN32||_WIN64) */\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( pthread_cond_wait( &my_cv, lock.mutex()->native_handle() ) ) {\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    // upon successful return, the mutex has been locked and is owned by the calling thread.\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n#if __linux__\n    struct timespec req;\n    double sec = i.seconds();\n    clock_gettime( CLOCK_REALTIME, &req );\n    req.tv_sec  += static_cast<long>(sec);\n    req.tv_nsec += static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#else /* generic Unix */\n    struct timeval tv;\n    struct timespec req;\n    double sec = i.seconds();\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    req.tv_sec  = tv.tv_sec + static_cast<long>(sec);\n    req.tv_nsec = tv.tv_usec*1000 + static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#endif /*(choice of OS) */\n    if( req.tv_nsec>=1e9 ) {\n        req.tv_sec  += 1;\n        req.tv_nsec -= static_cast<long int>(1e9);\n    }\n    __TBB_ASSERT( 0<=req.tv_nsec && req.tv_nsec<1e9, NULL );\n\n    int ec;\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( ( ec=pthread_cond_timedwait( &my_cv, lock.mutex()->native_handle(), &req ) ) ) {\n        if( ec==ETIMEDOUT )\n            rc = timeout;\n        else {\n            __TBB_ASSERT( lock.try_lock()==false, NULL );\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n#endif /* !(_WIN32||_WIN64) */\n\n} // namespace interface5\n\n__TBB_DEFINE_PROFILING_SET_NAME(interface5::condition_variable)\n\n} // namespace tbb \n\n#if TBB_IMPLEMENT_CPP0X\n\nnamespace std {\n\nusing tbb::interface5::defer_lock_t;\nusing tbb::interface5::try_to_lock_t;\nusing tbb::interface5::adopt_lock_t;\nusing tbb::interface5::defer_lock;\nusing tbb::interface5::try_to_lock;\nusing tbb::interface5::adopt_lock;\nusing tbb::interface5::lock_guard;\nusing tbb::interface5::unique_lock;\nusing tbb::interface5::swap;   /* this is for void std::swap(unique_lock<M>&,unique_lock<M>&) */\nusing tbb::interface5::condition_variable;\nusing tbb::interface5::cv_status;\nusing tbb::interface5::timeout;\nusing tbb::interface5::no_timeout;\n\n} // namespace std \n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#endif /* __TBB_condition_variable_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/compat/ppl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_compat_ppl_H\n#define __TBB_compat_ppl_H\n\n#include \"../task_group.h\"\n#include \"../parallel_invoke.h\"\n#include \"../parallel_for_each.h\"\n#include \"../parallel_for.h\"\n#include \"../tbb_exception.h\"\n#include \"../critical_section.h\"\n#include \"../reader_writer_lock.h\"\n#include \"../combinable.h\"\n\nnamespace Concurrency {\n\n#if __TBB_TASK_GROUP_CONTEXT\n    using tbb::task_handle;\n    using tbb::task_group_status;\n    using tbb::task_group;\n    using tbb::structured_task_group;\n    using tbb::invalid_multiple_scheduling;\n    using tbb::missing_wait;\n    using tbb::make_task;\n\n    using tbb::not_complete;\n    using tbb::complete;\n    using tbb::canceled;\n\n    using tbb::is_current_task_group_canceling;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    using tbb::parallel_invoke;\n    using tbb::strict_ppl::parallel_for;\n    using tbb::parallel_for_each;\n    using tbb::critical_section;\n    using tbb::reader_writer_lock;\n    using tbb::combinable;\n\n    using tbb::improper_lock;\n\n} // namespace Concurrency\n\n#endif /* __TBB_compat_ppl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/compat/thread",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_thread_H\n#define __TBB_thread_H\n\n#include \"../tbb_config.h\"\n\n#if TBB_IMPLEMENT_CPP0X\n\n#include \"../tbb_thread.h\"\n\nnamespace std {\n\ntypedef tbb::tbb_thread thread;\n\nnamespace this_thread {\n    using tbb::this_tbb_thread::get_id;\n    using tbb::this_tbb_thread::yield;\n\n    inline void sleep_for(const tbb::tick_count::interval_t& rel_time) {\n        tbb::internal::thread_sleep_v3( rel_time );\n    }\n}\n\n} // namespace std\n\n#else /* TBB_IMPLEMENT_CPP0X */\n\n#define __TBB_COMPAT_THREAD_RECURSION_PROTECTOR 1\n#include <thread>\n#undef __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#else /* __TBB_thread_H */\n\n#if __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n#error The tbb/compat/thread header attempts to include itself. \\\n       Please make sure that {TBBROOT}/include/tbb/compat is NOT in include paths.\n#endif\n\n#endif /* __TBB_thread_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/compat/tuple",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tuple_H\n#define __TBB_tuple_H\n\n#include <utility>\n#include \"../tbb_stddef.h\"\n\n// build preprocessor variables for varying number of arguments\n// Need the leading comma so the empty __TBB_T_PACK will not cause a syntax error.\n#if __TBB_VARIADIC_MAX <= 5\n#define __TBB_T_PACK\n#define __TBB_U_PACK\n#define __TBB_TYPENAME_T_PACK\n#define __TBB_TYPENAME_U_PACK\n#define __TBB_NULL_TYPE_PACK\n#define __TBB_REF_T_PARAM_PACK\n#define __TBB_CONST_REF_T_PARAM_PACK\n#define __TBB_T_PARAM_LIST_PACK\n#define __TBB_CONST_NULL_REF_PACK\n//\n#elif __TBB_VARIADIC_MAX == 6\n#define __TBB_T_PACK ,__T5\n#define __TBB_U_PACK ,__U5\n#define __TBB_TYPENAME_T_PACK , typename __T5\n#define __TBB_TYPENAME_U_PACK , typename __U5\n#define __TBB_NULL_TYPE_PACK , null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5\n#define __TBB_T_PARAM_LIST_PACK ,t5\n#define __TBB_CONST_NULL_REF_PACK , const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 7\n#define __TBB_T_PACK ,__T5, __T6\n#define __TBB_U_PACK ,__U5, __U6\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6\n#define __TBB_NULL_TYPE_PACK , null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5, const __T6& t6\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 8\n#define __TBB_T_PACK ,__T5, __T6, __T7\n#define __TBB_U_PACK ,__U5, __U6, __U7\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6, typename __T7\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6, typename __U7\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 9\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX >= 10\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8, __T9\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8, __U9\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8, typename __T9\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8, typename __U9\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8, __T9& t9\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8, const __T9& t9\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8 ,t9\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&, const null_type&\n#endif\n\n\n\nnamespace tbb {\nnamespace interface5 {\n\nnamespace internal {\nstruct null_type { };\n}\nusing internal::null_type;\n\n// tuple forward declaration\ntemplate <typename __T0=null_type, typename __T1=null_type, typename __T2=null_type,\n          typename __T3=null_type, typename __T4=null_type\n#if __TBB_VARIADIC_MAX >= 6\n, typename __T5=null_type\n#if __TBB_VARIADIC_MAX >= 7\n, typename __T6=null_type\n#if __TBB_VARIADIC_MAX >= 8\n, typename __T7=null_type\n#if __TBB_VARIADIC_MAX >= 9\n, typename __T8=null_type\n#if __TBB_VARIADIC_MAX >= 10\n, typename __T9=null_type\n#endif\n#endif\n#endif\n#endif\n#endif\n>\nclass tuple;\n\nnamespace internal {\n\n// const null_type temp\ninline const null_type cnull() { return null_type(); }\n\n// cons forward declaration\ntemplate <typename __HT, typename __TT> struct cons;\n\n// type of a component of the cons\ntemplate<int __N, typename __T>\nstruct component {\n    typedef typename __T::tail_type next;\n    typedef typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0,__T> {\n    typedef typename __T::head_type type;\n};\n\ntemplate<>\nstruct component<0,null_type> {\n    typedef null_type type;\n};\n\n// const version of component\n\ntemplate<int __N, typename __T>\nstruct component<__N, const __T>\n{\n    typedef typename __T::tail_type next;\n    typedef const typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0, const __T>\n{\n    typedef const typename __T::head_type type;\n};\n\n\n// helper class for getting components of cons\ntemplate< int __N>\nstruct get_helper {\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\n};\n\ntemplate<>\nstruct get_helper<0> {\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return ti.head;\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return ti.head;\n}\n};\n\n// traits adaptor\ntemplate <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK>\nstruct tuple_traits {\n    typedef cons <__T0, typename tuple_traits<__T1, __T2, __T3, __T4 __TBB_T_PACK , null_type>::U > U;\n};\n\ntemplate <typename __T0>\nstruct tuple_traits<__T0, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef cons<__T0, null_type> U;\n};\n\ntemplate<>\nstruct tuple_traits<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef null_type U;\n};\n\n\n// core cons defs\ntemplate <typename __HT, typename __TT>\nstruct cons{\n\n    typedef __HT head_type;\n    typedef __TT tail_type;\n\n    head_type head; \n    tail_type tail;\n\n    static const int length = 1 + tail_type::length;\n\n    // default constructors\n    explicit cons() : head(), tail() { }\n\n    // non-default constructors\n    cons(head_type& h, const tail_type& t) : head(h), tail(t) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(const __T0& t0, const __T1& t1, const __T2& t2, const __T3& t3, const __T4& t4 __TBB_CONST_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK, cnull()) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(__T0& t0, __T1& t1, __T2& t2, __T3& t3, __T4& t4 __TBB_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK , cnull()) { }\n\n    template <typename __HT1, typename __TT1>\n    cons(const cons<__HT1,__TT1>& other) : head(other.head), tail(other.tail) { }\n\n    cons& operator=(const cons& other) { head = other.head; tail = other.tail; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n    friend bool operator<(const cons& me, const cons& other)  {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n    friend bool operator>(const cons& me, const cons& other)  { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) { return !(me==other); }\n    friend bool operator>=(const cons& me, const cons& other) { return !(me<other); }\n    friend bool operator<=(const cons& me, const cons& other) { return !(me>other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator==(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return other<me; }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator!=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me==other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me<other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me>other); }\n\n\n};  // cons\n\n\ntemplate <typename __HT>\nstruct cons<__HT,null_type> { \n\n    typedef __HT head_type;\n    typedef null_type tail_type;\n\n    head_type head; \n\n    static const int length = 1;\n\n    // default constructor\n    cons() : head() { /*std::cout << \"default constructor 1\\n\";*/ }\n\n    cons(const null_type&, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head() { /*std::cout << \"default constructor 2\\n\";*/ }\n\n    // non-default constructor\n    template<typename __T1>\n    cons(__T1& t1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t1) { /*std::cout << \"non-default a1, t1== \" << t1 << \"\\n\";*/}\n\n    cons(head_type& h, const null_type& = null_type() ) : head(h) { }\n    cons(const head_type& t0, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t0) { }\n\n    // converting constructor\n    template<typename __HT1>\n    cons(__HT1 h1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(h1) { }\n\n    // copy constructor\n    template<typename __HT1>\n    cons( const cons<__HT1, null_type>& other) : head(other.head) { }\n\n    // assignment operator\n    cons& operator=(const cons& other) { head = other.head; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) { return me.head == other.head; }\n    friend bool operator<(const cons& me, const cons& other) { return me.head < other.head; }\n    friend bool operator>(const cons& me, const cons& other) { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) {return !(me==other); }\n    friend bool operator<=(const cons& me, const cons& other) {return !(me>other); }\n    friend bool operator>=(const cons& me, const cons& other) {return !(me<other); }\n\n    template<typename __HT1>\n    friend bool operator==(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head == other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator<(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head < other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator>(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return other<me; }\n\n    template<typename __HT1>\n    friend bool operator!=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me==other); }\n\n    template<typename __HT1>\n    friend bool operator<=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me>other); }\n\n    template<typename __HT1>\n    friend bool operator>=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me<other); }\n\n};  // cons\n\ntemplate <>\nstruct cons<null_type,null_type> { typedef null_type tail_type; static const int length = 0; };\n\n// wrapper for default constructor\ntemplate<typename __T>\ninline const __T wrap_dcons(__T*) { return __T(); }\n\n} // namespace internal\n\n// tuple definition\ntemplate<typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\nclass tuple : public internal::tuple_traits<__T0, __T1, __T2, __T3, __T4 __TBB_T_PACK >::U {\n    // friends\n    template <typename __T> friend class tuple_size;\n    template<int __N, typename __T> friend struct tuple_element;\n\n    // stl components\n    typedef tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > value_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef size_t size_type;\n\n    typedef typename internal::tuple_traits<__T0,__T1,__T2,__T3, __T4 __TBB_T_PACK >::U my_cons;\n\npublic:\n    tuple(const __T0& t0=internal::wrap_dcons((__T0*)NULL)\n          ,const __T1& t1=internal::wrap_dcons((__T1*)NULL)\n          ,const __T2& t2=internal::wrap_dcons((__T2*)NULL)\n          ,const __T3& t3=internal::wrap_dcons((__T3*)NULL)\n          ,const __T4& t4=internal::wrap_dcons((__T4*)NULL)\n#if __TBB_VARIADIC_MAX >= 6\n          ,const __T5& t5=internal::wrap_dcons((__T5*)NULL)\n#if __TBB_VARIADIC_MAX >= 7\n          ,const __T6& t6=internal::wrap_dcons((__T6*)NULL)\n#if __TBB_VARIADIC_MAX >= 8\n          ,const __T7& t7=internal::wrap_dcons((__T7*)NULL)\n#if __TBB_VARIADIC_MAX >= 9\n          ,const __T8& t8=internal::wrap_dcons((__T8*)NULL)\n#if __TBB_VARIADIC_MAX >= 10\n          ,const __T9& t9=internal::wrap_dcons((__T9*)NULL)\n#endif\n#endif\n#endif\n#endif\n#endif\n          ) :\n        my_cons(t0,t1,t2,t3,t4 __TBB_T_PARAM_LIST_PACK) { }\n\n    template<int __N>\n    struct internal_tuple_element {\n        typedef typename internal::component<__N,my_cons>::type type;\n    };\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type& get() { return internal::get_helper<__N>::get(*this); }\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type const& get() const { return internal::get_helper<__N>::get(*this); }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const internal::cons<__U1,__U2>& other) {\n        my_cons::operator=(other);\n        return *this;\n    }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const std::pair<__U1,__U2>& other) {\n        // __TBB_ASSERT(tuple_size<value_type>::value == 2, \"Invalid size for pair to tuple assignment\");\n        this->head = other.first;\n        this->tail.head = other.second;\n        return *this;\n    }\n\n    friend bool operator==(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)==(other);}\n    friend bool operator<(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)<(other);}\n    friend bool operator>(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)>(other);}\n    friend bool operator!=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)!=(other);}\n    friend bool operator>=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)>=(other);}\n    friend bool operator<=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)<=(other);}\n\n};  // tuple\n\n// empty tuple\ntemplate<>\nclass tuple<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > : public null_type {\n};\n\n// helper classes\n\ntemplate < typename __T>\nclass tuple_size {\npublic:\n    static const size_t value = 1 + tuple_size<typename __T::tail_type>::value;\n};\n\ntemplate <>\nclass tuple_size<tuple<> > { \npublic:\n    static const size_t value = 0;\n};\n\ntemplate <>\nclass tuple_size<null_type> {\npublic:\n    static const size_t value = 0;\n};\n\ntemplate<int __N, typename __T>\nstruct tuple_element {\n    typedef typename internal::component<__N, typename __T::my_cons>::type type;\n};\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type&\n    get(tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type const&\n    get(const tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\n}  // interface5\n} // tbb\n\n#if !__TBB_CPP11_TUPLE_PRESENT\nnamespace tbb {\n    namespace flow {\n        using tbb::interface5::tuple;\n        using tbb::interface5::tuple_size;\n        using tbb::interface5::tuple_element;\n        using tbb::interface5::get;\n    }\n}\n#endif\n\n#undef __TBB_T_PACK\n#undef __TBB_U_PACK\n#undef __TBB_TYPENAME_T_PACK\n#undef __TBB_TYPENAME_U_PACK\n#undef __TBB_NULL_TYPE_PACK\n#undef __TBB_REF_T_PARAM_PACK\n#undef __TBB_CONST_REF_T_PARAM_PACK\n#undef __TBB_T_PARAM_LIST_PACK\n#undef __TBB_CONST_NULL_REF_PACK\n \n#endif /* __TBB_tuple_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_hash_map.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_hash_map_H\n#define __TBB_concurrent_hash_map_H\n\n#include \"tbb_stddef.h\"\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <cstring>      // Need std::memset\n#include __TBB_STD_SWAP_HEADER\n\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_allocator.h\"\n#include \"spin_rw_mutex.h\"\n#include \"atomic.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include <initializer_list>\n#endif\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#include <typeinfo>\n#endif\n#if __TBB_STATISTICS\n#include <stdio.h>\n#endif\n\nnamespace tbb {\n\nnamespace interface5 {\n\n    template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >\n    class concurrent_hash_map;\n\n    //! @cond INTERNAL\n    namespace internal {\n    using namespace tbb::internal;\n\n\n    //! Type of a hash code.\n    typedef size_t hashcode_t;\n    //! Node base type\n    struct hash_map_node_base : tbb::internal::no_copy {\n        //! Mutex type\n        typedef spin_rw_mutex mutex_t;\n        //! Scoped lock type for mutex\n        typedef mutex_t::scoped_lock scoped_t;\n        //! Next node in chain\n        hash_map_node_base *next;\n        mutex_t mutex;\n    };\n    //! Incompleteness flag value\n    static hash_map_node_base *const rehash_req = reinterpret_cast<hash_map_node_base*>(size_t(3));\n    //! Rehashed empty bucket flag\n    static hash_map_node_base *const empty_rehashed = reinterpret_cast<hash_map_node_base*>(size_t(0));\n    //! base class of concurrent_hash_map\n    class hash_map_base {\n    public:\n        //! Size type\n        typedef size_t size_type;\n        //! Type of a hash code.\n        typedef size_t hashcode_t;\n        //! Segment index type\n        typedef size_t segment_index_t;\n        //! Node base type\n        typedef hash_map_node_base node_base;\n        //! Bucket type\n        struct bucket : tbb::internal::no_copy {\n            //! Mutex type for buckets\n            typedef spin_rw_mutex mutex_t;\n            //! Scoped lock type for mutex\n            typedef mutex_t::scoped_lock scoped_t;\n            mutex_t mutex;\n            node_base *node_list;\n        };\n        //! Count of segments in the first block\n        static size_type const embedded_block = 1;\n        //! Count of segments in the first block\n        static size_type const embedded_buckets = 1<<embedded_block;\n        //! Count of segments in the first block\n        static size_type const first_block = 8; //including embedded_block. perfect with bucket size 16, so the allocations are power of 4096\n        //! Size of a pointer / table size\n        static size_type const pointers_per_table = sizeof(segment_index_t) * 8; // one segment per bit\n        //! Segment pointer\n        typedef bucket *segment_ptr_t;\n        //! Segment pointers table type\n        typedef segment_ptr_t segments_table_t[pointers_per_table];\n        //! Hash mask = sum of allocated segment sizes - 1\n        atomic<hashcode_t> my_mask;\n        //! Segment pointers table. Also prevents false sharing between my_mask and my_size\n        segments_table_t my_table;\n        //! Size of container in stored items\n        atomic<size_type> my_size; // It must be in separate cache line from my_mask due to performance effects\n        //! Zero segment\n        bucket my_embedded_segment[embedded_buckets];\n#if __TBB_STATISTICS\n        atomic<unsigned> my_info_resizes; // concurrent ones\n        mutable atomic<unsigned> my_info_restarts; // race collisions\n        atomic<unsigned> my_info_rehashes;  // invocations of rehash_bucket\n#endif\n        //! Constructor\n        hash_map_base() {\n            std::memset( this, 0, pointers_per_table*sizeof(segment_ptr_t) // 32*4=128   or 64*8=512\n                + sizeof(my_size) + sizeof(my_mask)  // 4+4 or 8+8\n                + embedded_buckets*sizeof(bucket) ); // n*8 or n*16\n            for( size_type i = 0; i < embedded_block; i++ ) // fill the table\n                my_table[i] = my_embedded_segment + segment_base(i);\n            my_mask = embedded_buckets - 1;\n            __TBB_ASSERT( embedded_block <= first_block, \"The first block number must include embedded blocks\");\n#if __TBB_STATISTICS\n            my_info_resizes = 0; // concurrent ones\n            my_info_restarts = 0; // race collisions\n            my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n        }\n\n        //! @return segment index of given index in the array\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        //! @return the first array index of given segment\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        //! @return segment size except for @arg k == 0\n        static size_type segment_size( segment_index_t k ) {\n            return size_type(1)<<k; // fake value for k==0\n        }\n\n        //! @return true if @arg ptr is valid pointer\n        static bool is_valid( void *ptr ) {\n            return reinterpret_cast<uintptr_t>(ptr) > uintptr_t(63);\n        }\n\n        //! Initialize buckets\n        static void init_buckets( segment_ptr_t ptr, size_type sz, bool is_initial ) {\n            if( is_initial ) std::memset( static_cast<void*>(ptr), 0, sz*sizeof(bucket) );\n            else for(size_type i = 0; i < sz; i++, ptr++) {\n                *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;\n                ptr->node_list = rehash_req;\n            }\n        }\n\n        //! Add node @arg n to bucket @arg b\n        static void add_to_bucket( bucket *b, node_base *n ) {\n            __TBB_ASSERT(b->node_list != rehash_req, NULL);\n            n->next = b->node_list;\n            b->node_list = n; // its under lock and flag is set\n        }\n\n        //! Exception safety helper\n        struct enable_segment_failsafe : tbb::internal::no_copy {\n            segment_ptr_t *my_segment_ptr;\n            enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}\n            ~enable_segment_failsafe() {\n                if( my_segment_ptr ) *my_segment_ptr = 0; // indicate no allocation in progress\n            }\n        };\n\n        //! Enable segment\n        void enable_segment( segment_index_t k, bool is_initial = false ) {\n            __TBB_ASSERT( k, \"Zero segment must be embedded\" );\n            enable_segment_failsafe watchdog( my_table, k );\n            cache_aligned_allocator<bucket> alloc;\n            size_type sz;\n            __TBB_ASSERT( !is_valid(my_table[k]), \"Wrong concurrent assignment\");\n            if( k >= first_block ) {\n                sz = segment_size( k );\n                segment_ptr_t ptr = alloc.allocate( sz );\n                init_buckets( ptr, sz, is_initial );\n                itt_hide_store_word( my_table[k], ptr );\n                sz <<= 1;// double it to get entire capacity of the container\n            } else { // the first block\n                __TBB_ASSERT( k == embedded_block, \"Wrong segment index\" );\n                sz = segment_size( first_block );\n                segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );\n                init_buckets( ptr, sz - embedded_buckets, is_initial );\n                ptr -= segment_base(embedded_block);\n                for(segment_index_t i = embedded_block; i < first_block; i++) // calc the offsets\n                    itt_hide_store_word( my_table[i], ptr + segment_base(i) );\n            }\n            itt_store_word_with_release( my_mask, sz-1 );\n            watchdog.my_segment_ptr = 0;\n        }\n\n        //! Get bucket by (masked) hashcode\n        bucket *get_bucket( hashcode_t h ) const throw() { // TODO: add throw() everywhere?\n            segment_index_t s = segment_index_of( h );\n            h -= segment_base(s);\n            segment_ptr_t seg = my_table[s];\n            __TBB_ASSERT( is_valid(seg), \"hashcode must be cut by valid mask for allocated segments\" );\n            return &seg[h];\n        }\n\n        // internal serial rehashing helper\n        void mark_rehashed_levels( hashcode_t h ) throw () {\n            segment_index_t s = segment_index_of( h );\n            while( segment_ptr_t seg = my_table[++s] )\n                if( seg[h].node_list == rehash_req ) {\n                    seg[h].node_list = empty_rehashed;\n                    mark_rehashed_levels( h + ((hashcode_t)1<<s) ); // optimized segment_base(s)\n                }\n        }\n\n        //! Check for mask race\n        // Splitting into two functions should help inlining\n        inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {\n            hashcode_t m_now, m_old = m;\n            m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );\n            if( m_old != m_now )\n                return check_rehashing_collision( h, m_old, m = m_now );\n            return false;\n        }\n\n        //! Process mask race, check for rehashing collision\n        bool check_rehashing_collision( const hashcode_t h, hashcode_t m_old, hashcode_t m ) const {\n            __TBB_ASSERT(m_old != m, NULL); // TODO?: m arg could be optimized out by passing h = h&m\n            if( (h & m_old) != (h & m) ) { // mask changed for this hashcode, rare event\n                // condition above proves that 'h' has some other bits set beside 'm_old'\n                // find next applicable mask after m_old    //TODO: look at bsl instruction\n                for( ++m_old; !(h & m_old); m_old <<= 1 ) // at maximum few rounds depending on the first block size\n                    ;\n                m_old = (m_old<<1) - 1; // get full mask from a bit\n                __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);\n                // check whether it is rehashing/ed\n                if( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )\n                {\n#if __TBB_STATISTICS\n                    my_info_restarts++; // race collisions\n#endif\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        //! Insert a node and check for load factor. @return segment index to enable.\n        segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {\n            size_type sz = ++my_size; // prefix form is to enforce allocation after the first item inserted\n            add_to_bucket( b, n );\n            // check load factor\n            if( sz >= mask ) { // TODO: add custom load_factor\n                segment_index_t new_seg = __TBB_Log2( mask+1 ); //optimized segment_index_of\n                __TBB_ASSERT( is_valid(my_table[new_seg-1]), \"new allocations must not publish new mask until segment has allocated\");\n                static const segment_ptr_t is_allocating = (segment_ptr_t)2;\n                if( !itt_hide_load_word(my_table[new_seg])\n                  && as_atomic(my_table[new_seg]).compare_and_swap(is_allocating, NULL) == NULL )\n                    return new_seg; // The value must be processed\n            }\n            return 0;\n        }\n\n        //! Prepare enough segments for number of buckets\n        void reserve(size_type buckets) {\n            if( !buckets-- ) return;\n            bool is_initial = !my_size;\n            for( size_type m = my_mask; buckets > m; m = my_mask )\n                enable_segment( segment_index_of( m+1 ), is_initial );\n        }\n        //! Swap hash_map_bases\n        void internal_swap(hash_map_base &table) {\n            using std::swap;\n            swap(this->my_mask, table.my_mask);\n            swap(this->my_size, table.my_size);\n            for(size_type i = 0; i < embedded_buckets; i++)\n                swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);\n            for(size_type i = embedded_block; i < pointers_per_table; i++)\n                swap(this->my_table[i], table.my_table[i]);\n        }\n    };\n\n    template<typename Iterator>\n    class hash_map_range;\n\n    //! Meets requirements of a forward iterator for STL */\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class hash_map_iterator\n        : public std::iterator<std::forward_iterator_tag,Value>\n    {\n        typedef Container map_type;\n        typedef typename Container::node node;\n        typedef hash_map_base::node_base node_base;\n        typedef hash_map_base::bucket bucket;\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator!=( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class hash_map_iterator;\n\n        template<typename I>\n        friend class hash_map_range;\n\n        void advance_to_next_bucket() { // TODO?: refactor to iterator_base class\n            size_t k = my_index+1;\n            __TBB_ASSERT( my_bucket, \"advancing an invalid iterator?\");\n            while( k <= my_map->my_mask ) {\n                // Following test uses 2's-complement wizardry\n                if( k&(k-2) ) // not the beginning of a segment\n                    ++my_bucket;\n                else my_bucket = my_map->get_bucket( k );\n                my_node = static_cast<node*>( my_bucket->node_list );\n                if( hash_map_base::is_valid(my_node) ) {\n                    my_index = k; return;\n                }\n                ++k;\n            }\n            my_bucket = 0; my_node = 0; my_index = k; // the end\n        }\n#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)\n        template<typename Key, typename T, typename HashCompare, typename A>\n        friend class interface5::concurrent_hash_map;\n#else\n    public: // workaround\n#endif\n        //! concurrent_hash_map over which we are iterating.\n        const Container *my_map;\n\n        //! Index in hash table for current item\n        size_t my_index;\n\n        //! Pointer to bucket\n        const bucket *my_bucket;\n\n        //! Pointer to node that has current item\n        node *my_node;\n\n        hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n );\n\n    public:\n        //! Construct undefined iterator\n        hash_map_iterator(): my_map(), my_index(), my_bucket(), my_node() {}\n        hash_map_iterator( const hash_map_iterator<Container,typename Container::value_type> &other ) :\n            my_map(other.my_map),\n            my_index(other.my_index),\n            my_bucket(other.my_bucket),\n            my_node(other.my_node)\n        {}\n        Value& operator*() const {\n            __TBB_ASSERT( hash_map_base::is_valid(my_node), \"iterator uninitialized or at end of container?\" );\n            return my_node->item;\n        }\n        Value* operator->() const {return &operator*();}\n        hash_map_iterator& operator++();\n\n        //! Post increment\n        hash_map_iterator operator++(int) {\n            hash_map_iterator old(*this);\n            operator++();\n            return old;\n        }\n    };\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>::hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n ) :\n        my_map(&map),\n        my_index(index),\n        my_bucket(b),\n        my_node( static_cast<node*>(n) )\n    {\n        if( b && !hash_map_base::is_valid(n) )\n            advance_to_next_bucket();\n    }\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {\n        my_node = static_cast<node*>( my_node->next );\n        if( !my_node ) advance_to_next_bucket();\n        return *this;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node == j.my_node && i.my_map == j.my_map;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node != j.my_node || i.my_map != j.my_map;\n    }\n\n    //! Range class used with concurrent_hash_map\n    /** @ingroup containers */\n    template<typename Iterator>\n    class hash_map_range {\n        typedef typename Iterator::map_type map_type;\n        Iterator my_begin;\n        Iterator my_end;\n        mutable Iterator my_midpoint;\n        size_t my_grainsize;\n        //! Set my_midpoint to point approximately half way between my_begin and my_end.\n        void set_midpoint() const;\n        template<typename U> friend class hash_map_range;\n    public:\n        //! Type for size of a range\n        typedef std::size_t size_type;\n        typedef typename Iterator::value_type value_type;\n        typedef typename Iterator::reference reference;\n        typedef typename Iterator::difference_type difference_type;\n        typedef Iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin==my_end;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint!=my_end;\n        }\n        //! Split range.\n        hash_map_range( hash_map_range& r, split ) :\n            my_end(r.my_end),\n            my_grainsize(r.my_grainsize)\n        {\n            r.my_end = my_begin = r.my_midpoint;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! type conversion\n        template<typename U>\n        hash_map_range( hash_map_range<U>& r) :\n            my_begin(r.my_begin),\n            my_end(r.my_end),\n            my_midpoint(r.my_midpoint),\n            my_grainsize(r.my_grainsize)\n        {}\n        //! Init range with container and grainsize specified\n        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) :\n            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),\n            my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),\n            my_grainsize( grainsize_ )\n        {\n            __TBB_ASSERT( grainsize_>0, \"grainsize must be positive\" );\n            set_midpoint();\n        }\n        const Iterator& begin() const {return my_begin;}\n        const Iterator& end() const {return my_end;}\n        //! The grain size for this range.\n        size_type grainsize() const {return my_grainsize;}\n    };\n\n    template<typename Iterator>\n    void hash_map_range<Iterator>::set_midpoint() const {\n        // Split by groups of nodes\n        size_t m = my_end.my_index-my_begin.my_index;\n        if( m > my_grainsize ) {\n            m = my_begin.my_index + m/2u;\n            hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);\n            my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);\n        } else {\n            my_midpoint = my_end;\n        }\n        __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,\n            \"my_begin is after my_midpoint\" );\n        __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,\n            \"my_midpoint is after my_end\" );\n        __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,\n            \"[my_begin, my_midpoint) range should not be empty\" );\n    }\n\n    } // internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n\n//! Unordered map from Key to T.\n/** concurrent_hash_map is associative container with concurrent access.\n\n@par Compatibility\n    The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).\n\n@par Exception Safety\n    - Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.\n    - If exception happens during insert() operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).\n    - If exception happens during operator=() operation, the container can have a part of source items, and methods size() and empty() can return wrong results.\n\n@par Changes since TBB 2.1\n    - Replaced internal algorithm and data structure. Patent is pending.\n    - Added buckets number argument for constructor\n\n@par Changes since TBB 2.0\n    - Fixed exception-safety\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Added constructor from a range of iterators\n    - Added several new overloaded insert() methods\n    - Added get_allocator()\n    - Added swap()\n    - Added count()\n    - Added overloaded erase(accessor &) and erase(const_accessor&)\n    - Added equal_range() [const]\n    - Added [const_]pointer, [const_]reference, and allocator_type types\n    - Added global functions: operator==(), operator!=(), and swap()\n\n    @ingroup containers */\ntemplate<typename Key, typename T, typename HashCompare, typename Allocator>\nclass concurrent_hash_map : protected internal::hash_map_base {\n    template<typename Container, typename Value>\n    friend class internal::hash_map_iterator;\n\n    template<typename I>\n    friend class internal::hash_map_range;\n\npublic:\n    typedef Key key_type;\n    typedef T mapped_type;\n    typedef std::pair<const Key,T> value_type;\n    typedef hash_map_base::size_type size_type;\n    typedef ptrdiff_t difference_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;\n    typedef internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;\n    typedef internal::hash_map_range<iterator> range_type;\n    typedef internal::hash_map_range<const_iterator> const_range_type;\n    typedef Allocator allocator_type;\n\nprotected:\n    friend class const_accessor;\n    struct node;\n    typedef typename Allocator::template rebind<node>::other node_allocator_type;\n    node_allocator_type my_allocator;\n    HashCompare my_hash_compare;\n\n    struct node : public node_base {\n        value_type item;\n        node( const Key &key ) : item(key, T()) {}\n        node( const Key &key, const T &t ) : item(key, t) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        node( const Key &key, T &&t ) : item(key, std::move(t)) {}\n        node( value_type&& i ) : item(std::move(i)){}\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n        template<typename... Args>\n        node( Args&&... args ) : item(std::forward<Args>(args)...) {}\n#if __TBB_COPY_FROM_NON_CONST_REF_BROKEN\n        node( value_type& i ) : item(const_cast<const value_type&>(i)) {}\n#endif //__TBB_COPY_FROM_NON_CONST_REF_BROKEN\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n        node( const value_type& i ) : item(i) {}\n\n        // exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17\n        void *operator new( size_t /*size*/, node_allocator_type &a ) {\n            void *ptr = a.allocate(1);\n            if(!ptr)\n                tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);\n            return ptr;\n        }\n        // match placement-new form above to be called if exception thrown in constructor\n        void operator delete( void *ptr, node_allocator_type &a ) { a.deallocate(static_cast<node*>(ptr),1); }\n    };\n\n    void delete_node( node_base *n ) {\n        my_allocator.destroy( static_cast<node*>(n) );\n        my_allocator.deallocate( static_cast<node*>(n), 1);\n    }\n\n    static node* allocate_node_copy_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, *t);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static node* allocate_node_move_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, std::move(*const_cast<T*>(t)));\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    static node* allocate_node_emplace_construct(node_allocator_type& allocator, Args&&... args){\n        return  new( allocator ) node(std::forward<Args>(args)...);\n    }\n#endif //#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif\n\n    static node* allocate_node_default_construct(node_allocator_type& allocator, const Key &key, const T * ){\n        return  new( allocator ) node(key);\n    }\n\n    static node* do_not_allocate_node(node_allocator_type& , const Key &, const T * ){\n        __TBB_ASSERT(false,\"this dummy function should not be called\");\n        return NULL;\n    }\n\n    node *search_bucket( const key_type &key, bucket *b ) const {\n        node *n = static_cast<node*>( b->node_list );\n        while( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )\n            n = static_cast<node*>( n->next );\n        __TBB_ASSERT(n != internal::rehash_req, \"Search can be executed only for rehashed bucket\");\n        return n;\n    }\n\n    //! bucket accessor is to find, rehash, acquire a lock, and access a bucket\n    class bucket_accessor : public bucket::scoped_t {\n        bucket *my_b;\n    public:\n        bucket_accessor( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) { acquire( base, h, writer ); }\n        //! find a bucket by masked hashcode, optionally rehash, and acquire the lock\n        inline void acquire( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) {\n            my_b = base->get_bucket( h );\n            // TODO: actually, notification is unnecessary here, just hiding double-check\n            if( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req\n                && try_acquire( my_b->mutex, /*write=*/true ) )\n            {\n                if( my_b->node_list == internal::rehash_req ) base->rehash_bucket( my_b, h ); //recursive rehashing\n            }\n            else bucket::scoped_t::acquire( my_b->mutex, writer );\n            __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);\n        }\n        //! check whether bucket is locked for write\n        bool is_writer() { return bucket::scoped_t::is_writer; }\n        //! get bucket pointer\n        bucket *operator() () { return my_b; }\n    };\n\n    // TODO refactor to hash_base\n    void rehash_bucket( bucket *b_new, const hashcode_t h ) {\n        __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), \"b_new must be locked (for write)\");\n        __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n        __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); // mark rehashed\n        hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n#if __TBB_STATISTICS\n        my_info_rehashes++; // invocations of rehash_bucket\n#endif\n\n        bucket_accessor b_old( this, h & mask );\n\n        mask = (mask<<1) | 1; // get full mask for new bucket\n        __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );\n    restart:\n        for( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {\n            hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n#if TBB_USE_ASSERT\n            hashcode_t bmask = h & (mask>>1);\n            bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; // minimal mask of parent bucket\n            __TBB_ASSERT( (c & bmask) == (h & bmask), \"hash() function changed for key in table\" );\n#endif\n            if( (c & mask) == h ) {\n                if( !b_old.is_writer() )\n                    if( !b_old.upgrade_to_writer() ) {\n                        goto restart; // node ptr can be invalid due to concurrent erase\n                    }\n                *p = n->next; // exclude from b_old\n                add_to_bucket( b_new, n );\n            } else p = &n->next; // iterate to next item\n        }\n    }\n\n    struct call_clear_on_leave {\n        concurrent_hash_map* my_ch_map;\n        call_clear_on_leave( concurrent_hash_map* a_ch_map ) : my_ch_map(a_ch_map) {}\n        void dismiss() {my_ch_map = 0;}\n        ~call_clear_on_leave(){\n            if (my_ch_map){\n                my_ch_map->clear();\n            }\n        }\n    };\npublic:\n\n    class accessor;\n    //! Combines data access, locking, and garbage collection.\n    class const_accessor : private node::scoped_t /*which derived from no_copy*/ {\n        friend class concurrent_hash_map<Key,T,HashCompare,Allocator>;\n        friend class accessor;\n    public:\n        //! Type of value\n        typedef const typename concurrent_hash_map::value_type value_type;\n\n        //! True if result is empty.\n        bool empty() const { return !my_node; }\n\n        //! Set to null\n        void release() {\n            if( my_node ) {\n                node::scoped_t::release();\n                my_node = 0;\n            }\n        }\n\n        //! Return reference to associated value in hash table.\n        const_reference operator*() const {\n            __TBB_ASSERT( my_node, \"attempt to dereference empty accessor\" );\n            return my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        const_pointer operator->() const {\n            return &operator*();\n        }\n\n        //! Create empty result\n        const_accessor() : my_node(NULL) {}\n\n        //! Destroy result after releasing the underlying reference.\n        ~const_accessor() {\n            my_node = NULL; // scoped lock's release() is called in its destructor\n        }\n    protected:\n        bool is_writer() { return node::scoped_t::is_writer; }\n        node *my_node;\n        hashcode_t my_hash;\n    };\n\n    //! Allows write access to elements and combines data access, locking, and garbage collection.\n    class accessor: public const_accessor {\n    public:\n        //! Type of value\n        typedef typename concurrent_hash_map::value_type value_type;\n\n        //! Return reference to associated value in hash table.\n        reference operator*() const {\n            __TBB_ASSERT( this->my_node, \"attempt to dereference empty accessor\" );\n            return this->my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        pointer operator->() const {\n            return &operator*();\n        }\n    };\n\n    //! Construct empty table.\n    explicit concurrent_hash_map( const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {}\n\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( size_type n, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        reserve( n );\n    }\n\n    //! Copy constructor\n    concurrent_hash_map( const concurrent_hash_map &table, const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(table);\n        scope_guard.dismiss();\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table )\n        : internal::hash_map_base(), my_allocator(std::move(table.get_allocator()))\n    {\n        swap(table);\n    }\n\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table, const allocator_type &a )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        if (a == table.get_allocator()){\n            this->swap(table);\n        }else{\n            call_clear_on_leave scope_guard(this);\n            internal_copy(std::make_move_iterator(table.begin()), std::make_move_iterator(table.end()), table.size());\n            scope_guard.dismiss();\n        }\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Construction with copying iteration range and given allocator instance\n    template<typename I>\n    concurrent_hash_map( I first, I last, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(first, last, std::distance(first, last));\n        scope_guard.dismiss();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( std::initializer_list<value_type> il, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(il.begin(), il.end(), il.size());\n        scope_guard.dismiss();\n    }\n\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Assignment\n    concurrent_hash_map& operator=( const concurrent_hash_map &table ) {\n        if( this!=&table ) {\n            clear();\n            internal_copy(table);\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move Assignment\n    concurrent_hash_map& operator=( concurrent_hash_map &&table ) {\n        if(this != &table){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == table.my_allocator) {\n                concurrent_hash_map trash (std::move(*this));\n                //TODO: swapping allocators here may be a problem, replace with single direction moving iff pocma is set\n                this->swap(table);\n            } else {\n                //do per element move\n                concurrent_hash_map moved_copy(std::move(table), this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment\n    concurrent_hash_map& operator=( std::initializer_list<value_type> il ) {\n        clear();\n        internal_copy(il.begin(), il.end(), il.size());\n        return *this;\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n\n    //! Rehashes and optionally resizes the whole table.\n    /** Useful to optimize performance before or after concurrent operations.\n        Also enables using of find() and count() concurrent methods in serial context. */\n    void rehash(size_type n = 0);\n\n    //! Clear table\n    void clear();\n\n    //! Clear table and destroy it.\n    ~concurrent_hash_map() { clear(); }\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    range_type range( size_type grainsize=1 ) {\n        return range_type( *this, grainsize );\n    }\n    const_range_type range( size_type grainsize=1 ) const {\n        return const_range_type( *this, grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // STL support - not thread-safe methods\n    //------------------------------------------------------------------------\n    iterator begin() { return iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    iterator end() { return iterator( *this, 0, 0, 0 ); }\n    const_iterator begin() const { return const_iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    const_iterator end() const { return const_iterator( *this, 0, 0, 0 ); }\n    std::pair<iterator, iterator> equal_range( const Key& key ) { return internal_equal_range( key, end() ); }\n    std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const { return internal_equal_range( key, end() ); }\n\n    //! Number of items in table.\n    size_type size() const { return my_size; }\n\n    //! True if size()==0.\n    bool empty() const { return my_size == 0; }\n\n    //! Upper bound on size.\n    size_type max_size() const {return (~size_type(0))/sizeof(node);}\n\n    //! Returns the current number of buckets\n    size_type bucket_count() const { return my_mask+1; }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! swap two instances. Iterators are invalidated\n    void swap( concurrent_hash_map &table );\n\n    //------------------------------------------------------------------------\n    // concurrent map operations\n    //------------------------------------------------------------------------\n\n    //! Return count of items (0 or 1)\n    size_type count( const Key &key ) const {\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, NULL, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a read lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( const_accessor &result, const Key &key ) const {\n        result.release();\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, &result, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a write lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/false, key, NULL, &result, /*write=*/true, &do_not_allocate_node );\n    }\n\n    //! Insert item (if not already present) and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/false, &allocate_node_default_construct );\n    }\n\n    //! Insert item (if not already present) and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/true, &allocate_node_default_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/true, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( const value_type &value ) {\n        return lookup(/*insert*/true, value.first, &value.second, NULL, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( value_type && value ) {\n        return generic_move_insert(accessor_not_used(), std::move(value));\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( const_accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    template<typename... Args>\n    bool emplace( Args&&... args ) {\n        return generic_emplace(accessor_not_used(), std::forward<Args>(args)...);\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Insert range [first, last)\n    template<typename I>\n    void insert( I first, I last ) {\n        for ( ; first != last; ++first )\n            insert( *first );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert( std::initializer_list<value_type> il ) {\n        insert( il.begin(), il.end() );\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Erase item.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const Key& key );\n\n    //! Erase item by const_accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const_accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\n    //! Erase item by accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\nprotected:\n    //! Insert or find item and optionally acquire a lock on the item.\n    bool lookup(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write,  node* (*allocate_node)(node_allocator_type& ,  const Key &, const T * ), node *tmp_n = 0  ) ;\n\n    struct accessor_not_used { void release(){}};\n    friend const_accessor* accessor_location( accessor_not_used const& ){ return NULL;}\n    friend const_accessor* accessor_location( const_accessor & a )      { return &a;}\n\n    friend bool is_write_access_needed( accessor const& )           { return true;}\n    friend bool is_write_access_needed( const_accessor const& )     { return false;}\n    friend bool is_write_access_needed( accessor_not_used const& )  { return false;}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename Accessor>\n    bool generic_move_insert( Accessor && result, value_type && value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, accessor_location(result), is_write_access_needed(result), &allocate_node_move_construct );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename Accessor, typename... Args>\n    bool generic_emplace( Accessor && result, Args &&... args ) {\n        result.release();\n        node * node_ptr = allocate_node_emplace_construct(my_allocator, std::forward<Args>(args)...);\n        return lookup(/*insert*/true, node_ptr->item.first, NULL, accessor_location(result), is_write_access_needed(result), &do_not_allocate_node, node_ptr );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! delete item by accessor\n    bool exclude( const_accessor &item_accessor );\n\n    //! Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)\n    template<typename I>\n    std::pair<I, I> internal_equal_range( const Key& key, I end ) const;\n\n    //! Copy \"source\" to *this, where *this must start out empty.\n    void internal_copy( const concurrent_hash_map& source );\n\n    template<typename I>\n    void internal_copy( I first, I last, size_type reserve_size );\n\n    //! Fast find when no concurrent erasure is used. For internal use inside TBB only!\n    /** Return pointer to item with given key, or NULL if no such item exists.\n        Must not be called concurrently with erasure operations. */\n    const_pointer internal_fast_find( const Key& key ) const {\n        hashcode_t h = my_hash_compare.hash( key );\n        hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n        node *n;\n    restart:\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        bucket *b = get_bucket( h & m );\n        // TODO: actually, notification is unnecessary here, just hiding double-check\n        if( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )\n        {\n            bucket::scoped_t lock;\n            if( lock.try_acquire( b->mutex, /*write=*/true ) ) {\n                if( b->node_list == internal::rehash_req)\n                    const_cast<concurrent_hash_map*>(this)->rehash_bucket( b, h & m ); //recursive rehashing\n            }\n            else lock.acquire( b->mutex, /*write=*/false );\n            __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);\n        }\n        n = search_bucket( key, b );\n        if( n )\n            return &n->item;\n        else if( check_mask_race( h, m ) )\n            goto restart;\n        return 0;\n    }\n};\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node* (*allocate_node)(node_allocator_type& , const Key&, const T*), node *tmp_n ) {\n    __TBB_ASSERT( !result || !result->my_node, NULL );\n    bool return_value;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    segment_index_t grow_segment = 0;\n    node *n;\n    restart:\n    {//lock scope\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        return_value = false;\n        // get bucket\n        bucket_accessor b( this, h & m );\n\n        // find a node\n        n = search_bucket( key, b() );\n        if( op_insert ) {\n            // [opt] insert a key\n            if( !n ) {\n                if( !tmp_n ) {\n                    tmp_n = allocate_node(my_allocator, key, t);\n                }\n                if( !b.is_writer() && !b.upgrade_to_writer() ) { // TODO: improved insertion\n                    // Rerun search_list, in case another thread inserted the item during the upgrade.\n                    n = search_bucket( key, b() );\n                    if( is_valid(n) ) { // unfortunately, it did\n                        b.downgrade_to_reader();\n                        goto exists;\n                    }\n                }\n                if( check_mask_race(h, m) )\n                    goto restart; // b.release() is done in ~b().\n                // insert and set flag to grow the container\n                grow_segment = insert_new_node( b(), n = tmp_n, m );\n                tmp_n = 0;\n                return_value = true;\n            }\n        } else { // find or count\n            if( !n ) {\n                if( check_mask_race( h, m ) )\n                    goto restart; // b.release() is done in ~b(). TODO: replace by continue\n                return false;\n            }\n            return_value = true;\n        }\n    exists:\n        if( !result ) goto check_growth;\n        // TODO: the following seems as generic/regular operation\n        // acquire the item\n        if( !result->try_acquire( n->mutex, write ) ) {\n            for( tbb::internal::atomic_backoff backoff(true);; ) {\n                if( result->try_acquire( n->mutex, write ) ) break;\n                if( !backoff.bounded_pause() ) {\n                    // the wait takes really long, restart the operation\n                    b.release();\n                    __TBB_ASSERT( !op_insert || !return_value, \"Can't acquire new item in locked bucket?\" );\n                    __TBB_Yield();\n                    m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n                    goto restart;\n                }\n            }\n        }\n    }//lock scope\n    result->my_node = n;\n    result->my_hash = h;\ncheck_growth:\n    // [opt] grow the container\n    if( grow_segment ) {\n#if __TBB_STATISTICS\n        my_info_resizes++; // concurrent ones\n#endif\n        enable_segment( grow_segment );\n    }\n    if( tmp_n ) // if op_insert only\n        delete_node( tmp_n );\n    return return_value;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nstd::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end_ ) const {\n    hashcode_t h = my_hash_compare.hash( key );\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n    h &= m;\n    bucket *b = get_bucket( h );\n    while( b->node_list == internal::rehash_req ) {\n        m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n        b = get_bucket( h &= m );\n    }\n    node *n = search_bucket( key, b );\n    if( !n )\n        return std::make_pair(end_, end_);\n    iterator lower(*this, h, b, n), upper(lower);\n    return std::make_pair(lower, ++upper);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor ) {\n    __TBB_ASSERT( item_accessor.my_node, NULL );\n    node_base *const n = item_accessor.my_node;\n    hashcode_t const h = item_accessor.my_hash;\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    do {\n        // get bucket\n        bucket_accessor b( this, h & m, /*writer=*/true );\n        node_base **p = &b()->node_list;\n        while( *p && *p != n )\n            p = &(*p)->next;\n        if( !*p ) { // someone else was first\n            if( check_mask_race( h, m ) )\n                continue;\n            item_accessor.release();\n            return false;\n        }\n        __TBB_ASSERT( *p == n, NULL );\n        *p = n->next; // remove from container\n        my_size--;\n        break;\n    } while(true);\n    if( !item_accessor.is_writer() ) // need to get exclusive lock\n        item_accessor.upgrade_to_writer(); // return value means nothing here\n    item_accessor.release();\n    delete_node( n ); // Only one thread can delete it\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {\n    node_base *n;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\nrestart:\n    {//lock scope\n        // get bucket\n        bucket_accessor b( this, h & m );\n    search:\n        node_base **p = &b()->node_list;\n        n = *p;\n        while( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {\n            p = &n->next;\n            n = *p;\n        }\n        if( !n ) { // not found, but mask could be changed\n            if( check_mask_race( h, m ) )\n                goto restart;\n            return false;\n        }\n        else if( !b.is_writer() && !b.upgrade_to_writer() ) {\n            if( check_mask_race( h, m ) ) // contended upgrade, check mask\n                goto restart;\n            goto search;\n        }\n        *p = n->next;\n        my_size--;\n    }\n    {\n        typename node::scoped_t item_locker( n->mutex, /*write=*/true );\n    }\n    // note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!\n    delete_node( n ); // Only one thread can delete it due to write lock on the bucket\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::swap(concurrent_hash_map<Key,T,HashCompare,A> &table) {\n    //TODO: respect C++11 allocator_traits<A>::propogate_on_constainer_swap\n    using std::swap;\n    swap(this->my_allocator, table.my_allocator);\n    swap(this->my_hash_compare, table.my_hash_compare);\n    internal_swap(table);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::rehash(size_type sz) {\n    reserve( sz ); // TODO: add reduction of number of buckets as well\n    hashcode_t mask = my_mask;\n    hashcode_t b = (mask+1)>>1; // size or first index of the last segment\n    __TBB_ASSERT((b&(b-1))==0, NULL); // zero or power of 2\n    bucket *bp = get_bucket( b ); // only the last segment should be scanned for rehashing\n    for(; b <= mask; b++, bp++ ) {\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        if( n == internal::rehash_req ) { // rehash bucket, conditional because rehashing of a previous bucket may affect this one\n            hashcode_t h = b; bucket *b_old = bp;\n            do {\n                __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n                hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n                b_old = get_bucket( h &= m );\n            } while( b_old->node_list == internal::rehash_req );\n            // now h - is index of the root rehashed bucket b_old\n            mark_rehashed_levels( h ); // mark all non-rehashed children recursively across all segments\n            for( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {\n                hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );\n                if( (c & mask) != h ) { // should be rehashed\n                    *p = q->next; // exclude from b_old\n                    bucket *b_new = get_bucket( c & mask );\n                    __TBB_ASSERT( b_new->node_list != internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n                    add_to_bucket( b_new, q );\n                } else p = &q->next; // iterate to next item\n            }\n        }\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS\n    int current_size = int(my_size), buckets = int(mask)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n    for( b = 0; b <= mask; b++ ) {// only last segment should be scanned for rehashing\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, \"Broken internal structure\" );\n#if TBB_USE_PERFORMANCE_WARNINGS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if TBB_USE_ASSERT\n        for( ; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;\n            __TBB_ASSERT( h == b, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n#if TBB_USE_PERFORMANCE_WARNINGS\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::clear() {\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    int current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n    bucket *bp = 0;\n    // check consistency\n    for( segment_index_t b = 0; b <= m; b++ ) {\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during clear() execution\" );\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n == internal::rehash_req ) buckets--;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if __TBB_EXTRA_DEBUG\n        for(; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n            h &= m;\n            __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if __TBB_STATISTICS\n    printf( \"items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d\"\n        \" concurrent: resizes=%u rehashes=%u restarts=%u\\n\",\n        current_size, int(m+1), buckets, empty_buckets, overpopulated_buckets,\n        unsigned(my_info_resizes), unsigned(my_info_rehashes), unsigned(my_info_restarts) );\n    my_info_resizes = 0; // concurrent ones\n    my_info_restarts = 0; // race collisions\n    my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    my_size = 0;\n    segment_index_t s = segment_index_of( m );\n    __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], \"wrong mask or concurrent grow\" );\n    cache_aligned_allocator<bucket> alloc;\n    do {\n        __TBB_ASSERT( is_valid( my_table[s] ), \"wrong mask or concurrent grow\" );\n        segment_ptr_t buckets_ptr = my_table[s];\n        size_type sz = segment_size( s ? s : 1 );\n        for( segment_index_t i = 0; i < sz; i++ )\n            for( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {\n                buckets_ptr[i].node_list = n->next;\n                delete_node( n );\n            }\n        if( s >= first_block) // the first segment or the next\n            alloc.deallocate( buckets_ptr, sz );\n        else if( s == embedded_block && embedded_block != first_block )\n            alloc.deallocate( buckets_ptr, segment_size(first_block)-embedded_buckets );\n        if( s >= embedded_block ) my_table[s] = 0;\n    } while(s-- > 0);\n    my_mask = embedded_buckets - 1;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( const concurrent_hash_map& source ) {\n    hashcode_t mask = source.my_mask;\n    if( my_mask == mask ) { // optimized version\n        reserve( source.my_size ); // TODO: load_factor?\n        bucket *dst = 0, *src = 0;\n        bool rehash_required = false;\n        for( hashcode_t k = 0; k <= mask; k++ ) {\n            if( k & (k-2) ) ++dst,src++; // not the beginning of a segment\n            else { dst = get_bucket( k ); src = source.get_bucket( k ); }\n            __TBB_ASSERT( dst->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n            node *n = static_cast<node*>( src->node_list );\n            if( n == internal::rehash_req ) { // source is not rehashed, items are in previous buckets\n                rehash_required = true;\n                dst->node_list = internal::rehash_req;\n            } else for(; n; n = static_cast<node*>( n->next ) ) {\n                add_to_bucket( dst, new( my_allocator ) node(n->item.first, n->item.second) );\n                ++my_size; // TODO: replace by non-atomic op\n            }\n        }\n        if( rehash_required ) rehash();\n    } else internal_copy( source.begin(), source.end(), source.my_size );\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last, size_type reserve_size) {\n    reserve( reserve_size ); // TODO: load_factor?\n    hashcode_t m = my_mask;\n    for(; first != last; ++first) {\n        hashcode_t h = my_hash_compare.hash( (*first).first );\n        bucket *b = get_bucket( h & m );\n        __TBB_ASSERT( b->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n        node *n = new( my_allocator ) node(*first);\n        add_to_bucket( b, n );\n        ++my_size; // TODO: replace by non-atomic op\n    }\n}\n\n} // namespace interface5\n\nusing interface5::concurrent_hash_map;\n\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator==(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b) {\n    if(a.size() != b.size()) return false;\n    typename concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());\n    typename concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());\n    for(; i != i_end; ++i) {\n        j = b.equal_range(i->first).first;\n        if( j == j_end || !(i->second == j->second) ) return false;\n    }\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator!=(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ninline void swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)\n{    a.swap( b ); }\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_hash_map_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_lru_cache.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_lru_cache_H\n#define __TBB_concurrent_lru_cache_H\n\n#if ! TBB_PREVIEW_CONCURRENT_LRU_CACHE\n    #error Set TBB_PREVIEW_CONCURRENT_LRU_CACHE to include concurrent_lru_cache.h\n#endif\n\n#include \"tbb_stddef.h\"\n\n#include <map>\n#include <list>\n#include <algorithm> // std::find\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include <utility> // std::move\n#endif\n\n#include \"atomic.h\"\n#include \"internal/_aggregator_impl.h\"\n\nnamespace tbb{\nnamespace interface6 {\n\n\ntemplate <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >\nclass concurrent_lru_cache : internal::no_assign{\nprivate:\n    typedef concurrent_lru_cache self_type;\n    typedef value_functor_type value_function_type;\n    typedef std::size_t ref_counter_type;\n    struct map_value_type;\n    typedef std::map<key_type, map_value_type> map_storage_type;\n    typedef std::list<typename map_storage_type::iterator> lru_list_type;\n    struct map_value_type {\n        value_type my_value;\n        ref_counter_type my_ref_counter;\n        typename lru_list_type::iterator my_lru_list_iterator;\n        bool my_is_ready;\n\n        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)\n            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator), my_is_ready(a_is_ready)\n        {}\n    };\n\n    class handle_object;\n\n    struct aggregator_operation;\n    typedef aggregator_operation aggregated_operation_type;\n    typedef tbb::internal::aggregating_functor<self_type,aggregated_operation_type> aggregator_function_type;\n    friend class tbb::internal::aggregating_functor<self_type,aggregated_operation_type>;\n    typedef tbb::internal::aggregator<aggregator_function_type, aggregated_operation_type> aggregator_type;\n\nprivate:\n    value_function_type my_value_function;\n    std::size_t const my_number_of_lru_history_items;\n    map_storage_type my_map_storage;\n    lru_list_type my_lru_list;\n    aggregator_type my_aggregator;\n\npublic:\n    typedef handle_object handle;\n\npublic:\n    concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items)\n        : my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items)\n    {\n        my_aggregator.initialize_handler(aggregator_function_type(this));\n    }\n\n    handle_object operator[](key_type k){\n        retrieve_aggregator_operation op(k);\n        my_aggregator.execute(&op);\n        if (op.is_new_value_needed()){\n             op.result().second.my_value = my_value_function(k);\n             __TBB_store_with_release(op.result().second.my_is_ready, true);\n        }else{\n            tbb::internal::spin_wait_while_eq(op.result().second.my_is_ready,false);\n        }\n        return handle_object(*this,op.result());\n    }\nprivate:\n    void signal_end_of_usage(typename map_storage_type::reference value_ref){\n        signal_end_of_usage_aggregator_operation op(value_ref);\n        my_aggregator.execute(&op);\n    }\n\nprivate:\n#if !__TBB_CPP11_RVALUE_REF_PRESENT\n    struct handle_move_t:no_assign{\n        concurrent_lru_cache & my_cache_ref;\n        typename map_storage_type::reference my_map_record_ref;\n        handle_move_t(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_map_record_ref(value_ref) {};\n    };\n#endif\n    class handle_object {\n        concurrent_lru_cache * my_cache_pointer;\n        typename map_storage_type::pointer my_map_record_ptr;\n    public:\n        handle_object() : my_cache_pointer(), my_map_record_ptr() {}\n        handle_object(concurrent_lru_cache& cache_ref, typename map_storage_type::reference value_ref) : my_cache_pointer(&cache_ref), my_map_record_ptr(&value_ref) {}\n        operator bool() const {\n            return (my_cache_pointer && my_map_record_ptr);\n        }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        // TODO: add check for double moved objects by special dedicated field\n        handle_object(handle_object&& src) : my_cache_pointer(src.my_cache_pointer), my_map_record_ptr(src.my_map_record_ptr) {\n            __TBB_ASSERT((src.my_cache_pointer && src.my_map_record_ptr) || (!src.my_cache_pointer && !src.my_map_record_ptr), \"invalid state of moving object?\");\n            src.my_cache_pointer = NULL;\n            src.my_map_record_ptr = NULL;\n        }\n        handle_object& operator=(handle_object&& src) {\n            __TBB_ASSERT((src.my_cache_pointer && src.my_map_record_ptr) || (!src.my_cache_pointer && !src.my_map_record_ptr), \"invalid state of moving object?\");\n            if (my_cache_pointer) {\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n            my_cache_pointer = src.my_cache_pointer;\n            my_map_record_ptr = src.my_map_record_ptr;\n            src.my_cache_pointer = NULL;\n            src.my_map_record_ptr = NULL;\n            return *this;\n        }\n#else\n        handle_object(handle_move_t m) : my_cache_pointer(&m.my_cache_ref), my_map_record_ptr(&m.my_map_record_ref) {}\n        handle_object& operator=(handle_move_t m) {\n            if (my_cache_pointer) {\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n            my_cache_pointer = &m.my_cache_ref;\n            my_map_record_ptr = &m.my_map_record_ref;\n            return *this;\n        }\n        operator handle_move_t(){\n            return move(*this);\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n        value_type& value(){\n            __TBB_ASSERT(my_cache_pointer,\"get value from already moved object?\");\n            __TBB_ASSERT(my_map_record_ptr,\"get value from an invalid or already moved object?\");\n            return my_map_record_ptr->second.my_value;\n        }\n        ~handle_object(){\n            if (my_cache_pointer){\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n        }\n    private:\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        // For source compatibility with C++03\n        friend handle_object&& move(handle_object& h){\n            return std::move(h);\n        }\n#else\n        friend handle_move_t move(handle_object& h){\n            return handle_object::move(h);\n        }\n        // TODO: add check for double moved objects by special dedicated field\n        static handle_move_t move(handle_object& h){\n            __TBB_ASSERT((h.my_cache_pointer && h.my_map_record_ptr) || (!h.my_cache_pointer && !h.my_map_record_ptr), \"invalid state of moving object?\");\n            concurrent_lru_cache * cache_pointer = h.my_cache_pointer;\n            typename map_storage_type::pointer map_record_ptr = h.my_map_record_ptr;\n            h.my_cache_pointer = NULL;\n            h.my_map_record_ptr = NULL;\n            return handle_move_t(*cache_pointer, *map_record_ptr);\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n    private:\n        void operator=(handle_object&);\n#if __SUNPRO_CC\n    // Presumably due to a compiler error, private copy constructor\n    // breaks expressions like handle h = cache[key];\n    public:\n#endif\n        handle_object(handle_object &);\n    };\nprivate:\n    //TODO: looks like aggregator_operation is a perfect match for statically typed variant type\n    struct aggregator_operation : tbb::internal::aggregated_operation<aggregator_operation>{\n        enum e_op_type {op_retive, op_signal_end_of_usage};\n        //TODO: try to use pointer to function apply_visitor here\n        //TODO: try virtual functions and measure the difference\n        e_op_type my_operation_type;\n        aggregator_operation(e_op_type operation_type): my_operation_type(operation_type) {}\n        void cast_and_handle(self_type& container ){\n            if (my_operation_type==op_retive){\n                static_cast<retrieve_aggregator_operation*>(this)->handle(container);\n            }else{\n                static_cast<signal_end_of_usage_aggregator_operation*>(this)->handle(container);\n            }\n        }\n    };\n    struct retrieve_aggregator_operation : aggregator_operation, private internal::no_assign {\n        key_type my_key;\n        typename map_storage_type::pointer my_result_map_record_pointer;\n        bool my_is_new_value_needed;\n        retrieve_aggregator_operation(key_type key):aggregator_operation(aggregator_operation::op_retive),my_key(key),my_is_new_value_needed(false){}\n        void handle(self_type& container ){\n            my_result_map_record_pointer = & container.retrieve_serial(my_key,my_is_new_value_needed);\n        }\n        typename map_storage_type::reference result(){ return * my_result_map_record_pointer; }\n        bool is_new_value_needed(){return my_is_new_value_needed;}\n    };\n    struct signal_end_of_usage_aggregator_operation : aggregator_operation, private internal::no_assign {\n        typename map_storage_type::reference my_map_record_ref;\n        signal_end_of_usage_aggregator_operation(typename map_storage_type::reference map_record_ref):aggregator_operation(aggregator_operation::op_signal_end_of_usage),my_map_record_ref(map_record_ref){}\n        void handle(self_type& container ){\n            container.signal_end_of_usage_serial(my_map_record_ref);\n        }\n    };\n\nprivate:\n   void handle_operations(aggregator_operation* op_list){\n       while(op_list){\n           op_list->cast_and_handle(*this);\n           aggregator_operation* tmp = op_list;\n           op_list=op_list->next;\n           tbb::internal::itt_store_word_with_release(tmp->status, uintptr_t(1));\n       }\n   }\n\nprivate:\n   typename map_storage_type::reference retrieve_serial(key_type k, bool& is_new_value_needed){\n        typename map_storage_type::iterator it = my_map_storage.find(k);\n        if (it == my_map_storage.end()){\n            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));\n            is_new_value_needed = true;\n        }else {\n            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;\n            if (list_it!=my_lru_list.end()) {\n                __TBB_ASSERT(!it->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                //item is going to be used. Therefore it is not a subject for eviction\n                //so - remove it from LRU history.\n                my_lru_list.erase(list_it);\n                it->second.my_lru_list_iterator= my_lru_list.end();\n            }\n        }\n        ++(it->second.my_ref_counter);\n        return *it;\n    }\n\n    void signal_end_of_usage_serial(typename map_storage_type::reference map_record_ref){\n        typename map_storage_type::iterator it = my_map_storage.find(map_record_ref.first);\n        __TBB_ASSERT(it!=my_map_storage.end(),\"cache should not return past-end iterators to outer world\");\n        __TBB_ASSERT(&(*it) == &map_record_ref,\"dangling reference has been returned to outside world? data race ?\");\n        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),\n                \"object in use should not be in list of unused objects \");\n        if (! --(it->second.my_ref_counter)){\n            //it was the last reference so put it to the LRU history\n            if (my_lru_list.size()>=my_number_of_lru_history_items){\n                //evict items in order to get a space\n                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;\n                for (size_t i=0; i<number_of_elements_to_evict; ++i){\n                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();\n                    __TBB_ASSERT(!it_to_evict->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                    my_lru_list.pop_back();\n                    my_map_storage.erase(it_to_evict);\n                }\n            }\n            my_lru_list.push_front(it);\n            it->second.my_lru_list_iterator = my_lru_list.begin();\n        }\n    }\n};\n} // namespace interface6\n\nusing interface6::concurrent_lru_cache;\n\n} // namespace tbb\n#endif //__TBB_concurrent_lru_cache_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_priority_queue.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_priority_queue_H\n#define __TBB_concurrent_priority_queue_H\n\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_aggregator_impl.h\"\n#include <vector>\n#include <iterator>\n#include <functional>\n#include __TBB_STD_SWAP_HEADER\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    #include <type_traits>\n#endif\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    template<typename T, bool C = std::is_copy_constructible<T>::value>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n    template<typename T>\n    struct use_element_copy_constructor <T,false> {\n        typedef tbb::internal::false_type type;\n    };\n#else\n    template<typename>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n#endif\n} // namespace internal\n\nusing namespace tbb::internal;\n\n//! Concurrent priority queue\ntemplate <typename T, typename Compare=std::less<T>, typename A=cache_aligned_allocator<T> >\nclass concurrent_priority_queue {\n public:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Constructs a new concurrent_priority_queue with default capacity\n    explicit concurrent_priority_queue(const allocator_type& a = allocator_type()) : mark(0), my_size(0), data(a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Constructs a new concurrent_priority_queue with init_sz capacity\n    explicit concurrent_priority_queue(size_type init_capacity, const allocator_type& a = allocator_type()) :\n        mark(0), my_size(0), data(a)\n    {\n        data.reserve(init_capacity);\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_priority_queue(InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        mark(0), data(begin, end, a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from std::initializer_list\n    concurrent_priority_queue(std::initializer_list<T> init_list, const allocator_type &a = allocator_type()) :\n        mark(0),data(init_list.begin(), init_list.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copy constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    explicit concurrent_priority_queue(const concurrent_priority_queue& src) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), src.data.get_allocator())\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Copy constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(const concurrent_priority_queue& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=(const concurrent_priority_queue& src) {\n        if (this != &src) {\n            vector_t(src.data.begin(), src.data.end(), src.data.get_allocator()).swap(data);\n            mark = src.mark;\n            my_size = src.my_size;\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src) : mark(src.mark),\n        my_size(src.my_size), data(std::move(src.data))\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Move constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size),\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n        data(std::move(src.data), a)\n#else\n    // Some early version of C++11 STL vector does not have a constructor of vector(vector&& , allocator).\n    // It seems that the reason is absence of support of allocator_traits (stateful allocators).\n        data(a)\n#endif //__TBB_ALLOCATOR_TRAITS_PRESENT\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n        if (a != src.data.get_allocator()){\n            data.reserve(src.data.size());\n            data.assign(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()));\n        }else{\n            data = std::move(src.data);\n        }\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n    }\n\n    //! Move assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=( concurrent_priority_queue&& src) {\n        if (this != &src) {\n            mark = src.mark;\n            my_size = src.my_size;\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n            if (data.get_allocator() != src.data.get_allocator()){\n                vector_t(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()), data.get_allocator()).swap(data);\n            }else\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n            {\n                data = std::move(src.data);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Assign the queue from [begin,end) range, not thread-safe\n    template<typename InputIterator>\n    void assign(InputIterator begin, InputIterator end) {\n        vector_t(begin, end, data.get_allocator()).swap(data);\n        mark = 0;\n        my_size = data.size();\n        heapify();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assign the queue from std::initializer_list, not thread-safe\n    void assign(std::initializer_list<T> il) { this->assign(il.begin(), il.end()); }\n\n    //! Assign from std::initializer_list, not thread-safe\n    concurrent_priority_queue& operator=(std::initializer_list<T> il) {\n        this->assign(il.begin(), il.end());\n        return *this;\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Returns true if empty, false otherwise\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    bool empty() const { return size()==0; }\n\n    //! Returns the current number of elements contained in the queue\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    size_type size() const { return __TBB_load_with_acquire(my_size); }\n\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(const_reference elem) {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n        __TBB_STATIC_ASSERT( std::is_copy_constructible<value_type>::value, \"The type is not copy constructible. Copying push operation is impossible.\" );\n#endif\n        cpq_operation op_data(elem, PUSH_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(value_type &&elem) {\n        cpq_operation op_data(elem, PUSH_RVALUE_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Constructs a new element using args as the arguments for its construction and pushes it onto the queue */\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    template<typename... Args>\n    void emplace(Args&&... args) {\n        push(value_type(std::forward<Args>(args)...));\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Gets a reference to and removes highest priority element\n    /** If a highest priority element was found, sets elem and returns true,\n        otherwise returns false.\n        This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    bool try_pop(reference elem) {\n        cpq_operation op_data(POP_OP);\n        op_data.elem = &elem;\n        my_aggregator.execute(&op_data);\n        return op_data.status==SUCCEEDED;\n    }\n\n    //! Clear the queue; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue.\n        Resets size, effectively emptying queue; does not free space.\n        May not clear elements added in pending operations. */\n    void clear() {\n        data.clear();\n        mark = 0;\n        my_size = 0;\n    }\n\n    //! Swap this queue with another; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue. */\n    void swap(concurrent_priority_queue& q) {\n        using std::swap;\n        data.swap(q.data);\n        swap(mark, q.mark);\n        swap(my_size, q.my_size);\n    }\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return data.get_allocator(); }\n\n private:\n    enum operation_type {INVALID_OP, PUSH_OP, POP_OP, PUSH_RVALUE_OP};\n    enum operation_status { WAIT=0, SUCCEEDED, FAILED };\n\n    class cpq_operation : public aggregated_operation<cpq_operation> {\n     public:\n        operation_type type;\n        union {\n            value_type *elem;\n            size_type sz;\n        };\n        cpq_operation(const_reference e, operation_type t) :\n            type(t), elem(const_cast<value_type*>(&e)) {}\n        cpq_operation(operation_type t) : type(t) {}\n    };\n\n    class my_functor_t {\n        concurrent_priority_queue<T, Compare, A> *cpq;\n     public:\n        my_functor_t() {}\n        my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}\n        void operator()(cpq_operation* op_list) {\n            cpq->handle_operations(op_list);\n        }\n    };\n\n    typedef tbb::internal::aggregator< my_functor_t, cpq_operation > aggregator_t;\n    aggregator_t my_aggregator;\n    //! Padding added to avoid false sharing\n    char padding1[NFS_MaxLineSize - sizeof(aggregator_t)];\n    //! The point at which unsorted elements begin\n    size_type mark;\n    __TBB_atomic size_type my_size;\n    Compare compare;\n    //! Padding added to avoid false sharing\n    char padding2[NFS_MaxLineSize - (2*sizeof(size_type)) - sizeof(Compare)];\n    //! Storage for the heap of elements in queue, plus unheapified elements\n    /** data has the following structure:\n\n         binary unheapified\n          heap   elements\n        ____|_______|____\n        |       |       |\n        v       v       v\n        [_|...|_|_|...|_| |...| ]\n         0       ^       ^       ^\n                 |       |       |__capacity\n                 |       |__my_size\n                 |__mark\n\n        Thus, data stores the binary heap starting at position 0 through\n        mark-1 (it may be empty).  Then there are 0 or more elements\n        that have not yet been inserted into the heap, in positions\n        mark through my_size-1. */\n    typedef std::vector<value_type, allocator_type> vector_t;\n    vector_t data;\n\n    void handle_operations(cpq_operation *op_list) {\n        cpq_operation *tmp, *pop_list=NULL;\n\n        __TBB_ASSERT(mark == data.size(), NULL);\n\n        // First pass processes all constant (amortized; reallocation may happen) time pushes and pops.\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to op_list\n            // node. This thread is going to handle the operation, and so will acquire it\n            // and perform the associated operation w/o triggering a race condition; the\n            // thread that created the operation is waiting on the status field, so when\n            // this thread is done with the operation, it will perform a\n            // store_with_release to give control back to the waiting thread in\n            // aggregator::insert_operation.\n            call_itt_notify(acquired, &(op_list->status));\n            __TBB_ASSERT(op_list->type != INVALID_OP, NULL);\n            tmp = op_list;\n            op_list = itt_hide_load_word(op_list->next);\n            if (tmp->type == POP_OP) {\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one\n                    // is higher than top\n                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                    __TBB_ASSERT(mark<=data.size(), NULL);\n                }\n                else { // no convenient item to pop; postpone\n                    itt_hide_store_word(tmp->next, pop_list);\n                    pop_list = tmp;\n                }\n            } else { // PUSH_OP or PUSH_RVALUE_OP\n                __TBB_ASSERT(tmp->type == PUSH_OP || tmp->type == PUSH_RVALUE_OP, \"Unknown operation\" );\n                __TBB_TRY{\n                    if (tmp->type == PUSH_OP) {\n                        push_back_helper(*(tmp->elem), typename internal::use_element_copy_constructor<value_type>::type());\n                    } else {\n                        data.push_back(tbb::internal::move(*(tmp->elem)));\n                    }\n                    __TBB_store_with_release(my_size, my_size + 1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                } __TBB_CATCH(...) {\n                    itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n                }\n            }\n        }\n\n        // second pass processes pop operations\n        while (pop_list) {\n            tmp = pop_list;\n            pop_list = itt_hide_load_word(pop_list->next);\n            __TBB_ASSERT(tmp->type == POP_OP, NULL);\n            if (data.empty()) {\n                itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n            }\n            else {\n                __TBB_ASSERT(mark<=data.size(), NULL);\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one is\n                    // higher than top\n                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                }\n                else { // extract top and push last element down heap\n                    *(tmp->elem) = tbb::internal::move(data[0]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    reheap();\n                }\n            }\n        }\n\n        // heapify any leftover pushed elements before doing the next\n        // batch of operations\n        if (mark<data.size()) heapify();\n        __TBB_ASSERT(mark == data.size(), NULL);\n    }\n\n    //! Merge unsorted elements into heap\n    void heapify() {\n        if (!mark && data.size()>0) mark = 1;\n        for (; mark<data.size(); ++mark) {\n            // for each unheapified element under size\n            size_type cur_pos = mark;\n            value_type to_place = tbb::internal::move(data[mark]);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(data[parent], to_place)) break;\n                data[cur_pos] = tbb::internal::move(data[parent]);\n                cur_pos = parent;\n            } while( cur_pos );\n            data[cur_pos] = tbb::internal::move(to_place);\n        }\n    }\n\n    //! Re-heapify after an extraction\n    /** Re-heapify by pushing last element down the heap from the root. */\n    void reheap() {\n        size_type cur_pos=0, child=1;\n\n        while (child < mark) {\n            size_type target = child;\n            if (child+1 < mark && compare(data[child], data[child+1]))\n                ++target;\n            // target now has the higher priority child\n            if (compare(data[target], data[data.size()-1])) break;\n            data[cur_pos] = tbb::internal::move(data[target]);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n        if (cur_pos != data.size()-1)\n            data[cur_pos] = tbb::internal::move(data[data.size()-1]);\n        data.pop_back();\n        if (mark > data.size()) mark = data.size();\n    }\n\n    void push_back_helper(const T& t, tbb::internal::true_type) {\n        data.push_back(t);\n    }\n\n    void push_back_helper(const T&, tbb::internal::false_type) {\n        __TBB_ASSERT( false, \"The type is not copy constructible. Copying push operation is impossible.\" );\n    }\n};\n\n} // namespace interface5\n\nusing interface5::concurrent_priority_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_priority_queue_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_queue.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_queue_H\n#define __TBB_concurrent_queue_H\n\n#include \"internal/_concurrent_queue_impl.h\"\n\nnamespace tbb {\n\nnamespace strict_ppl {\n\n//! A high-performance thread-safe non-blocking concurrent queue.\n/** Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, typename A = cache_aligned_allocator<T> >\nclass concurrent_queue: public internal::concurrent_queue_base_v3<T> {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    //! Allocates a block of size n (bytes)\n    virtual void *allocate_block( size_t n ) __TBB_override {\n        void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));\n        if( !b )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return b;\n    }\n\n    //! Deallocates block created by allocate_block.\n    virtual void deallocate_block( void *b, size_t n ) __TBB_override {\n        my_allocator.deallocate( reinterpret_cast<char*>(b), n );\n    }\n\n    static void copy_construct_item(T* location, const void* src){\n        new (location) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static void move_construct_item(T* location, const void* src) {\n        new (location) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Construct empty queue\n    explicit concurrent_queue(const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_queue( InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            this->push(*begin);\n    }\n\n    //! Copy constructor\n    concurrent_queue( const concurrent_queue& src, const allocator_type& a = allocator_type()) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        this->assign( src, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_queue( concurrent_queue&& src ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( std::move(src.my_allocator) )\n    {\n        this->internal_swap( src );\n    }\n\n    concurrent_queue( concurrent_queue&& src, const allocator_type& a ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->assign( src, move_construct_item );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Destroy queue\n    ~concurrent_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        this->internal_push( &source, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void push( T&& source ) {\n        this->internal_push( &source, move_construct_item );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& result ) {\n        return this->internal_try_pop( &result );\n    }\n\n    //! Return the number of items in the queue; thread unsafe\n    size_type unsafe_size() const {return this->internal_size();}\n\n    //! Equivalent to size()==0.\n    bool empty() const {return this->internal_empty();}\n\n    //! Clear the queue. not thread-safe.\n    void clear() ;\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n} ;\n\ntemplate<typename T, class A>\nconcurrent_queue<T,A>::~concurrent_queue() {\n    clear();\n    this->internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_queue<T,A>::clear() {\n    T value;\n    while( !empty() ) try_pop(value);\n}\n\n} // namespace strict_ppl\n\n//! A high-performance thread-safe blocking concurrent bounded queue.\n/** This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics.\n    Note that method names agree with the PPL-style concurrent queue.\n    Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_bounded_queue: public internal::concurrent_queue_base_v8 {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    typedef typename concurrent_queue_base_v3::padded_page<T> padded_page;\n    typedef typename concurrent_queue_base_v3::copy_specifics copy_specifics;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: internal::no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    T& get_ref( page& p, size_t index ) {\n        __TBB_ASSERT( index<items_per_page, NULL );\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    virtual void copy_item( page& dst, size_t index, const void* src ) __TBB_override {\n        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    virtual void move_item( page& dst, size_t index, const void* src ) __TBB_override {\n        new( &get_ref(dst,index) ) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#else\n    virtual void move_item( page&, size_t, const void* ) __TBB_override {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {\n        new( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {\n        new( &get_ref(dst,dindex) ) T( std::move(get_ref( const_cast<page&>(src), sindex )) );\n    }\n#else\n    virtual void move_page_item( page&, size_t, const page&, size_t ) __TBB_override {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) __TBB_override {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    virtual page *allocate_page() __TBB_override {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));\n        if( !p )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return p;\n    }\n\n    virtual void deallocate_page( page *p ) __TBB_override {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        my_allocator.deallocate( reinterpret_cast<char*>(p), n );\n    }\n\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    /** Note that the size_type is a signed integral type.\n        This is because the size can be negative if there are pending pops without corresponding pushes. */\n    typedef std::ptrdiff_t size_type;\n\n    //! Difference type for iterator\n    typedef std::ptrdiff_t difference_type;\n\n    //! Construct empty queue\n    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) :\n        concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n    }\n\n    //! Copy constructor\n    concurrent_bounded_queue( const concurrent_bounded_queue& src, const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        assign( src );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_bounded_queue( concurrent_bounded_queue&& src )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( std::move(src.my_allocator) )\n    {\n        internal_swap( src );\n    }\n\n    concurrent_bounded_queue( concurrent_bounded_queue&& src, const allocator_type& a )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->move_content( src );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_bounded_queue( InputIterator begin, InputIterator end,\n                              const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            internal_push_if_not_full(&*begin);\n    }\n\n    //! Destroy queue\n    ~concurrent_bounded_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        internal_push( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue.\n    void push( T&& source ) {\n        internal_push_move( &source );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Dequeue item from head of queue.\n    /** Block until an item becomes available, and then dequeue it. */\n    void pop( T& destination ) {\n        internal_pop( &destination );\n    }\n\n#if TBB_USE_EXCEPTIONS\n    //! Abort all pending queue operations\n    void abort() {\n        internal_abort();\n    }\n#endif\n\n    //! Enqueue an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( const T& source ) {\n        return internal_push_if_not_full( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( T&& source ) {\n        return internal_push_move_if_not_full( &source );\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    bool try_emplace( Arguments&&... args ) {\n        return try_push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& destination ) {\n        return internal_pop_if_present( &destination );\n    }\n\n    //! Return number of pushes minus number of pops.\n    /** Note that the result can be negative if there are pops waiting for the\n        corresponding pushes.  The result can also exceed capacity() if there\n        are push operations in flight. */\n    size_type size() const {return internal_size();}\n\n    //! Equivalent to size()<=0.\n    bool empty() const {return internal_empty();}\n\n    //! Maximum number of allowed elements\n    size_type capacity() const {\n        return my_capacity;\n    }\n\n    //! Set the capacity\n    /** Setting the capacity to 0 causes subsequent try_push operations to always fail,\n        and subsequent push operations to block forever. */\n    void set_capacity( size_type new_capacity ) {\n        internal_set_capacity( new_capacity, sizeof(T) );\n    }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! clear the queue. not thread-safe.\n    void clear() ;\n\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n\n};\n\ntemplate<typename T, class A>\nconcurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {\n    clear();\n    internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_bounded_queue<T,A>::clear() {\n    T value;\n    while( try_pop(value) ) /*noop*/;\n}\n\nusing strict_ppl::concurrent_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_queue_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_unordered_map.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_map_H\n#define __TBB_concurrent_unordered_map_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash map traits\ntemplate<typename Key, typename T, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_map_traits\n{\nprotected:\n    typedef std::pair<const Key, T> value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_map_traits() : my_hash_compare() {}\n    concurrent_unordered_map_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    template<class Type1, class Type2>\n    static const Key& get_key(const std::pair<Type1, Type2>& value) {\n        return (value.first);\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_map :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::end;\n    using base_type::find;\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_map(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_map(const concurrent_unordered_map& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_map& operator=(const concurrent_unordered_map& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_map(concurrent_unordered_map&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_map& operator=(concurrent_unordered_map&& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_map(const concurrent_unordered_map& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n\n    // Observers\n    mapped_type& operator[](const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;\n        }\n\n        return ((*where).second);\n    }\n\n    mapped_type& at(const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n\n    const mapped_type& at(const key_type& key) const\n    {\n        const_iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n};\n\ntemplate < typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n        typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_multimap :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits< Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base<traits_type> base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multimap(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets,key_compare(_Hasher,_Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_multimap& operator=(const concurrent_unordered_multimap& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_multimap& operator=(concurrent_unordered_multimap&& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_map;\nusing interface5::concurrent_unordered_multimap;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_map_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_unordered_set.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_set_H\n#define __TBB_concurrent_unordered_set_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash set traits\ntemplate<typename Key, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_set_traits\n{\nprotected:\n    typedef Key value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_set_traits() : my_hash_compare() {}\n    concurrent_unordered_set_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    static const Key& get_key(const value_type& value) {\n        return value;\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>, typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_set : public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_set(size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {}\n\n    explicit concurrent_unordered_set(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_set(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_set(const concurrent_unordered_set& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_set& operator=(const concurrent_unordered_set& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_set(concurrent_unordered_set&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_set& operator=(concurrent_unordered_set&& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_set(concurrent_unordered_set&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_set(const concurrent_unordered_set& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_multiset :\n    public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multiset(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_multiset(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_multiset(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_multiset(const concurrent_unordered_multiset& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_multiset& operator=(const concurrent_unordered_multiset& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_multiset(concurrent_unordered_multiset&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_multiset(concurrent_unordered_multiset&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_multiset(const concurrent_unordered_multiset& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_set;\nusing interface5::concurrent_unordered_multiset;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_set_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/concurrent_vector.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_vector_H\n#define __TBB_concurrent_vector_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_exception.h\"\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"blocked_range.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <new>\n#include <cstring>   // for memset()\n#include __TBB_STD_SWAP_HEADER\n#include <algorithm>\n#include <iterator>\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <limits> /* std::numeric_limits */\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n#if defined(_Wp64)\n    #pragma warning (disable: 4267)\n#endif\n    #pragma warning (disable: 4127) //warning C4127: conditional expression is constant\n#endif\n\nnamespace tbb {\n\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_vector;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    template<typename Container, typename Value>\n    class vector_iterator;\n\n    //! Bad allocation marker\n    static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));\n\n    //! Exception helper function\n    template<typename T>\n    void handle_unconstructed_elements(T* array, size_t n_of_elements){\n        std::memset( static_cast<void*>(array), 0, n_of_elements * sizeof( T ) );\n    }\n\n    //! Base class of concurrent vector implementation.\n    /** @ingroup containers */\n    class concurrent_vector_base_v3 {\n    protected:\n\n        // Basic types declarations\n        typedef size_t segment_index_t;\n        typedef size_t size_type;\n\n        // Using enumerations due to Mac linking problems of static const variables\n        enum {\n            // Size constants\n            default_initial_segments = 1, // 2 initial items\n            //! Number of slots for segment pointers inside the class\n            pointers_per_short_table = 3, // to fit into 8 words of entire structure\n            pointers_per_long_table = sizeof(segment_index_t) * 8 // one segment per bit\n        };\n\n        struct segment_not_used {};\n        struct segment_allocated {};\n        struct segment_allocation_failed {};\n\n        class segment_t;\n        class segment_value_t {\n            void* array;\n        private:\n            //TODO: More elegant way to grant access to selected functions _only_?\n            friend class segment_t;\n            explicit segment_value_t(void* an_array):array(an_array) {}\n        public:\n            friend bool operator==(segment_value_t const& lhs, segment_not_used ) { return lhs.array == 0;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocated) { return lhs.array > internal::vector_allocation_error_flag;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocation_failed) { return lhs.array == internal::vector_allocation_error_flag;}\n            template<typename argument_type>\n            friend bool operator!=(segment_value_t const& lhs, argument_type arg) { return ! (lhs == arg);}\n\n            template<typename T>\n            T* pointer() const {  return static_cast<T*>(const_cast<void*>(array)); }\n        };\n\n        friend void enforce_segment_allocated(segment_value_t const& s, internal::exception_id exception = eid_bad_last_alloc){\n            if(s != segment_allocated()){\n                internal::throw_exception(exception);\n            }\n        }\n\n        // Segment pointer.\n        class segment_t {\n            atomic<void*> array;\n        public:\n            segment_t(){ store<relaxed>(segment_not_used());}\n            //Copy ctor and assignment operator are defined to ease using of stl algorithms.\n            //These algorithms usually not a synchronization point, so, semantic is\n            //intentionally relaxed here.\n            segment_t(segment_t const& rhs ){ array.store<relaxed>(rhs.array.load<relaxed>());}\n\n            void swap(segment_t & rhs ){\n                tbb::internal::swap<relaxed>(array, rhs.array);\n            }\n\n            segment_t& operator=(segment_t const& rhs ){\n                array.store<relaxed>(rhs.array.load<relaxed>());\n                return *this;\n            }\n\n            template<memory_semantics M>\n            segment_value_t load() const { return segment_value_t(array.load<M>());}\n\n            template<memory_semantics M>\n            void store(segment_not_used) {\n                array.store<M>(0);\n            }\n\n            template<memory_semantics M>\n            void store(segment_allocation_failed) {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(),\"transition from \\\"allocated\\\" to \\\"allocation failed\\\" state looks non-logical\");\n                array.store<M>(internal::vector_allocation_error_flag);\n            }\n\n            template<memory_semantics M>\n            void store(void* allocated_segment_pointer) __TBB_NOEXCEPT(true) {\n                __TBB_ASSERT(segment_value_t(allocated_segment_pointer) == segment_allocated(),\n                     \"other overloads of store should be used for marking segment as not_used or allocation_failed\" );\n                array.store<M>(allocated_segment_pointer);\n            }\n\n#if TBB_USE_ASSERT\n            ~segment_t() {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(), \"should have been freed by clear\" );\n            }\n#endif /* TBB_USE_ASSERT */\n        };\n        friend void swap(segment_t & , segment_t & ) __TBB_NOEXCEPT(true);\n\n        // Data fields\n\n        //! allocator function pointer\n        void* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);\n\n        //! count of segments in the first block\n        atomic<size_type> my_first_block;\n\n        //! Requested size of vector\n        atomic<size_type> my_early_size;\n\n        //! Pointer to the segments table\n        atomic<segment_t*> my_segment;\n\n        //! embedded storage of segment pointers\n        segment_t my_storage[pointers_per_short_table];\n\n        // Methods\n\n        concurrent_vector_base_v3() {\n            //Here the semantic is intentionally relaxed.\n            //The reason this is next:\n            //Object that is in middle of construction (i.e. its constructor is not yet finished)\n            //cannot be used concurrently until the construction is finished.\n            //Thus to flag other threads that construction is finished, some synchronization with\n            //acquire-release semantic should be done by the (external) code that uses the vector.\n            //So, no need to do the synchronization inside the vector.\n\n            my_early_size.store<relaxed>(0);\n            my_first_block.store<relaxed>(0); // here is not default_initial_segments\n            my_segment.store<relaxed>(my_storage);\n        }\n\n        __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();\n\n        //these helpers methods use the fact that segments are allocated so\n        //that every segment size is a (increasing) power of 2.\n        //with one exception 0 segment has size of 2 as well segment 1;\n        //e.g. size of segment with index of 3 is 2^3=8;\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        static inline segment_index_t segment_base_index_of( segment_index_t &index ) {\n            segment_index_t k = segment_index_of( index );\n            index -= segment_base(k);\n            return k;\n        }\n\n        static size_type segment_size( segment_index_t k ) {\n            return segment_index_t(1)<<k; // fake value for k==0\n        }\n\n\n        static bool is_first_element_in_segment(size_type element_index){\n            //check if element_index is a power of 2 that is at least 2.\n            //The idea is to detect if the iterator crosses a segment boundary,\n            //and 2 is the minimal index for which it's true\n            __TBB_ASSERT(element_index, \"there should be no need to call \"\n                                        \"is_first_element_in_segment for 0th element\" );\n            return is_power_of_two_at_least( element_index, 2 );\n        }\n\n        //! An operation on an n-element array starting at begin.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );\n\n        //! An operation on n-element destination array and n-element source array.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );\n\n        //! Internal structure for compact()\n        struct internal_segments_table {\n            segment_index_t first_block;\n            segment_t table[pointers_per_long_table];\n        };\n\n        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );\n        size_type __TBB_EXPORTED_METHOD internal_capacity() const;\n        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src );\n        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );\n        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );\n        segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );\n        void* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base_v3& src, size_type element_size,\n                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );\n        //! Obsolete\n        void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;\n        void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);\n\n        void __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,\n                                                    internal_array_op1 destroy, internal_array_op2 init );\n        size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\n\n        //! Deprecated entry point for backwards compatibility to TBB 2.1.\n        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\nprivate:\n        //! Private functionality\n        class helper;\n        friend class helper;\n\n        template<typename Container, typename Value>\n        friend class vector_iterator;\n\n    };\n\n    inline void swap(concurrent_vector_base_v3::segment_t & lhs, concurrent_vector_base_v3::segment_t & rhs) __TBB_NOEXCEPT(true) {\n        lhs.swap(rhs);\n    }\n\n    typedef concurrent_vector_base_v3 concurrent_vector_base;\n\n    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class vector_iterator\n    {\n        //! concurrent_vector over which we are iterating.\n        Container* my_vector;\n\n        //! Index into the vector\n        size_t my_index;\n\n        //! Caches my_vector-&gt;internal_subscript(my_index)\n        /** NULL if cached value is not available */\n        mutable Value* my_item;\n\n        template<typename C, typename T>\n        friend vector_iterator<C,T> operator+( ptrdiff_t offset, const vector_iterator<C,T>& v );\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class internal::vector_iterator;\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n        template<typename T, class A>\n        friend class tbb::concurrent_vector;\n#else\npublic:\n#endif\n\n        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) :\n            my_vector(const_cast<Container*>(&vector)),\n            my_index(index),\n            my_item(static_cast<Value*>(ptr))\n        {}\n\n    public:\n        //! Default constructor\n        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}\n\n        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :\n            my_vector(other.my_vector),\n            my_index(other.my_index),\n            my_item(other.my_item)\n        {}\n\n        vector_iterator operator+( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index+offset );\n        }\n        vector_iterator &operator+=( ptrdiff_t offset ) {\n            my_index+=offset;\n            my_item = NULL;\n            return *this;\n        }\n        vector_iterator operator-( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index-offset );\n        }\n        vector_iterator &operator-=( ptrdiff_t offset ) {\n            my_index-=offset;\n            my_item = NULL;\n            return *this;\n        }\n        Value& operator*() const {\n            Value* item = my_item;\n            if( !item ) {\n                item = my_item = &my_vector->internal_subscript(my_index);\n            }\n            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), \"corrupt cache\" );\n            return *item;\n        }\n        Value& operator[]( ptrdiff_t k ) const {\n            return my_vector->internal_subscript(my_index+k);\n        }\n        Value* operator->() const {return &operator*();}\n\n        //! Pre increment\n        vector_iterator& operator++() {\n            size_t element_index = ++my_index;\n            if( my_item ) {\n                //TODO: consider using of knowledge about \"first_block optimization\" here as well?\n                if( concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    ++my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Pre decrement\n        vector_iterator& operator--() {\n            __TBB_ASSERT( my_index>0, \"operator--() applied to iterator already at beginning of concurrent_vector\" );\n            size_t element_index = my_index--;\n            if( my_item ) {\n                if(concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    --my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Post increment\n        vector_iterator operator++(int) {\n            vector_iterator result = *this;\n            operator++();\n            return result;\n        }\n\n        //! Post decrement\n        vector_iterator operator--(int) {\n            vector_iterator result = *this;\n            operator--();\n            return result;\n        }\n\n        // STL support\n\n        typedef ptrdiff_t difference_type;\n        typedef Value value_type;\n        typedef Value* pointer;\n        typedef Value& reference;\n        typedef std::random_access_iterator_tag iterator_category;\n    };\n\n    template<typename Container, typename T>\n    vector_iterator<Container,T> operator+( ptrdiff_t offset, const vector_iterator<Container,T>& v ) {\n        return vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index==j.my_index && i.my_vector == j.my_vector;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i==j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index<j.my_index;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return j<i;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i<j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(j<i);\n    }\n\n    template<typename Container, typename T, typename U>\n    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);\n    }\n\n    template<typename T, class A>\n    class allocator_base {\n    public:\n        typedef typename A::template\n            rebind<T>::other allocator_type;\n        allocator_type my_allocator;\n\n        allocator_base(const allocator_type &a = allocator_type() ) : my_allocator(a) {}\n\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Concurrent vector container\n/** concurrent_vector is a container having the following main properties:\n    - It provides random indexed access to its elements. The index of the first element is 0.\n    - It ensures safe concurrent growing its size (different threads can safely append new elements).\n    - Adding new elements does not invalidate existing iterators and does not change indices of existing items.\n\n@par Compatibility\n    The class meets all Container Requirements and Reversible Container Requirements from\n    C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet\n    Sequence Requirements due to absence of insert() and erase() methods.\n\n@par Exception Safety\n    Methods working with memory allocation and/or new elements construction can throw an\n    exception if allocator fails to allocate memory or element's default constructor throws one.\n    Concurrent vector's element of type T must conform to the following requirements:\n    - Throwing an exception is forbidden for destructor of T.\n    - Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.\n    .\n    Otherwise, the program's behavior is undefined.\n@par\n    If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation.\n    Invalid state means:\n    - There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.\n    - An invalid vector instance cannot be repaired; it is unable to grow anymore.\n    - Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.\n    - Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.\n    .\n    If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.\n\n@par Fragmentation\n    Unlike an STL vector, a concurrent_vector does not move existing elements if it needs\n    to allocate more memory. The container is divided into a series of contiguous arrays of\n    elements. The first reservation, growth, or assignment operation determines the size of\n    the first array. Using small number of elements as initial size incurs fragmentation that\n    may increase element access time. Internal layout can be optimized by method compact() that\n    merges several smaller arrays into one solid.\n\n@par Changes since TBB 2.1\n    - Fixed guarantees of concurrent_vector::size() and grow_to_at_least() methods to assure elements are allocated.\n    - Methods end()/rbegin()/back() are partly thread-safe since they use size() to get the end of vector\n    - Added resize() methods (not thread-safe)\n    - Added cbegin/cend/crbegin/crend methods\n    - Changed return type of methods grow* and push_back to iterator\n\n@par Changes since TBB 2.0\n    - Implemented exception-safety guarantees\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Faster index calculation\n    - First growth call specifies a number of segments to be merged in the first allocation.\n    - Fixed memory blow up for swarm of vector's instances of small size\n    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items.\n    - Added STL-like constructors.\n    - Added operators ==, < and derivatives\n    - Added at() method, approved for using after an exception was thrown inside the vector\n    - Added get_allocator() method.\n    - Added assign() methods\n    - Added compact() method to defragment first segments\n    - Added swap() method\n    - range() defaults on grainsize = 1 supporting auto grainsize algorithms.\n\n    @ingroup containers */\ntemplate<typename T, class A>\nclass concurrent_vector: protected internal::allocator_base<T, A>,\n                         private internal::concurrent_vector_base {\nprivate:\n    template<typename I>\n    class generic_range_type: public blocked_range<I> {\n    public:\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef I iterator;\n        typedef ptrdiff_t difference_type;\n        generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n        template<typename U>\n        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n    };\n\n    template<typename C, typename U>\n    friend class internal::vector_iterator;\n\npublic:\n    //------------------------------------------------------------------------\n    // STL compatible types\n    //------------------------------------------------------------------------\n    typedef internal::concurrent_vector_base_v3::size_type size_type;\n    typedef typename internal::allocator_base<T, A>::allocator_type allocator_type;\n\n    typedef T value_type;\n    typedef ptrdiff_t difference_type;\n    typedef T& reference;\n    typedef const T& const_reference;\n    typedef T *pointer;\n    typedef const T *const_pointer;\n\n    typedef internal::vector_iterator<concurrent_vector,T> iterator;\n    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;\n\n#if !defined(_MSC_VER) || _CPPLIB_VER>=300\n    // Assume ISO standard definition of std::reverse_iterator\n    typedef std::reverse_iterator<iterator> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#else\n    // Use non-standard std::reverse_iterator\n    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;\n#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    typedef generic_range_type<iterator> range_type;\n    typedef generic_range_type<const_iterator> const_range_type;\n\n    //------------------------------------------------------------------------\n    // STL compatible constructors & destructors\n    //------------------------------------------------------------------------\n\n    //! Construct empty vector.\n    explicit concurrent_vector(const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n    }\n\n    //Constructors are not required to have synchronization\n    //(for more details see comment in the concurrent_vector_base constructor).\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_vector(std::initializer_list<T> init_list, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_iterators(init_list.begin(), init_list.end());\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();;\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copying constructor\n    concurrent_vector( const concurrent_vector& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector, sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    //TODO add __TBB_NOEXCEPT(true) and static_assert(std::has_nothrow_move_constructor<A>::value)\n    concurrent_vector( concurrent_vector&& source)\n        : internal::allocator_base<T, A>(std::move(source)), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        concurrent_vector_base_v3::internal_swap(source);\n    }\n\n    concurrent_vector( concurrent_vector&& source, const allocator_type& a)\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        //C++ standard requires instances of an allocator being compared for equality,\n        //which means that memory allocated by one instance is possible to deallocate with the other one.\n        if (a == source.my_allocator) {\n            concurrent_vector_base_v3::internal_swap(source);\n        } else {\n            __TBB_TRY {\n                internal_copy(source, sizeof(T), &move_array);\n            } __TBB_CATCH(...) {\n                segment_t *table = my_segment.load<relaxed>();\n                internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n                __TBB_RETHROW();\n            }\n        }\n    }\n\n#endif\n\n    //! Copying constructor for vector with different allocator type\n    template<class M>\n    concurrent_vector( const concurrent_vector<T, M>& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector.internal_vector_base(), sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n\n    explicit concurrent_vector(size_type n)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance\n    concurrent_vector(size_type n, const_reference t, const allocator_type& a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with copying iteration range and given allocator instance\n    template<class I>\n    concurrent_vector(I first, I last, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_range(first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Assignment\n    concurrent_vector& operator=( const concurrent_vector& vector ) {\n        if( this != &vector )\n            internal_assign(vector, sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //TODO: add __TBB_NOEXCEPT()\n    //! Move assignment\n    concurrent_vector& operator=( concurrent_vector&& other ) {\n        __TBB_ASSERT(this != &other, \"Move assignment to itself is prohibited \");\n        typedef typename tbb::internal::allocator_traits<A>::propagate_on_container_move_assignment pocma_t;\n        if(pocma_t::value || this->my_allocator == other.my_allocator) {\n            concurrent_vector trash (std::move(*this));\n            internal_swap(other);\n            if (pocma_t::value) {\n                this->my_allocator = std::move(other.my_allocator);\n            }\n        } else {\n            internal_assign(other, sizeof(T), &destroy_array, &move_assign_array, &move_array);\n        }\n        return *this;\n    }\n#endif\n    //TODO: add an template assignment operator? (i.e. with different element type)\n\n    //! Assignment for vector with different allocator type\n    template<class M>\n    concurrent_vector& operator=( const concurrent_vector<T, M>& vector ) {\n        if( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )\n            internal_assign(vector.internal_vector_base(),\n                sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment for initializer_list\n    concurrent_vector& operator=( std::initializer_list<T> init_list ) {\n        internal_clear(&destroy_array);\n        internal_assign_iterators(init_list.begin(), init_list.end());\n        return *this;\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //------------------------------------------------------------------------\n    // Concurrent operations\n    //------------------------------------------------------------------------\n    //! Grow by \"delta\" elements.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array, NULL ) : my_early_size.load());\n    }\n\n    //! Grow by \"delta\" elements using copying constructor.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta, const_reference t ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size.load());\n    }\n\n    /** Returns iterator pointing to the first new element. */\n    template<typename I>\n    iterator grow_by( I first, I last ) {\n        typename std::iterator_traits<I>::difference_type delta = std::distance(first, last);\n        __TBB_ASSERT( delta >= 0, NULL);\n\n        return iterator(*this, delta ? internal_grow_by(delta, sizeof(T), &copy_range<I>, static_cast<const void*>(&first)) : my_early_size.load());\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( std::initializer_list<T> init_list ) {\n        return grow_by( init_list.begin(), init_list.end() );\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Append minimal sequence of elements such that size()>=n.\n    /** The new elements are default constructed.  Blocks until all elements in range [0..n) are allocated.\n        May return while other elements are being constructed by other threads.\n        Returns iterator that points to beginning of appended sequence.\n        If no elements were appended, returns iterator pointing to nth element. */\n    iterator grow_to_at_least( size_type n ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array, NULL );\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    /** Analogous to grow_to_at_least( size_type n ) with exception that the new\n        elements are initialized by copying of t instead of default construction. */\n    iterator grow_to_at_least( size_type n, const_reference t ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array_by, &t);\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    //! Push item\n    /** Returns iterator pointing to the new element. */\n    iterator push_back( const_reference item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(item);\n        return prolog.return_iterator_and_dismiss();\n    }\n\n#if    __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Push item, move-aware\n    /** Returns iterator pointing to the new element. */\n    iterator push_back(  T&& item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::move(item));\n        return prolog.return_iterator_and_dismiss();\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Push item, create item \"in place\" with provided arguments\n    /** Returns iterator pointing to the new element. */\n    template<typename... Args>\n    iterator emplace_back(  Args&&... args )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::forward<Args>(args)...);\n        return prolog.return_iterator_and_dismiss();\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n    //! Get reference to element at given index.\n    /** This method is thread-safe for concurrent reads, and also while growing the vector,\n        as long as the calling thread has checked that index < size(). */\n    reference operator[]( size_type index ) {\n        return internal_subscript(index);\n    }\n\n    //! Get const reference to element at given index.\n    const_reference operator[]( size_type index ) const {\n        return internal_subscript(index);\n    }\n\n    //! Get reference to element at given index. Throws exceptions on errors.\n    reference at( size_type index ) {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get const reference to element at given index. Throws exceptions on errors.\n    const_reference at( size_type index ) const {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get range for iterating with parallel algorithms\n    range_type range( size_t grainsize = 1 ) {\n        return range_type( begin(), end(), grainsize );\n    }\n\n    //! Get const range for iterating with parallel algorithms\n    const_range_type range( size_t grainsize = 1 ) const {\n        return const_range_type( begin(), end(), grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // Capacity\n    //------------------------------------------------------------------------\n    //! Return size of vector. It may include elements under construction\n    size_type size() const {\n        size_type sz = my_early_size, cp = internal_capacity();\n        return cp < sz ? cp : sz;\n    }\n\n    //! Return false if vector is not empty or has elements under construction at least.\n    bool empty() const {return !my_early_size;}\n\n    //! Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.\n    size_type capacity() const {return internal_capacity();}\n\n    //! Allocate enough space to grow to size n without having to allocate more memory later.\n    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe.\n        The capacity afterwards may be bigger than the requested reservation. */\n    void reserve( size_type n ) {\n        if( n )\n            internal_reserve(n, sizeof(T), max_size());\n    }\n\n    //! Resize the vector. Not thread-safe.\n    void resize( size_type n ) {\n        internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n    }\n\n    //! Resize the vector, copy t for new elements. Not thread-safe.\n    void resize( size_type n, const_reference t ) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! Optimize memory usage and fragmentation.\n    void shrink_to_fit();\n\n    //! Upper bound on argument to reserve.\n    size_type max_size() const {return (~size_type(0))/sizeof(T);}\n\n    //------------------------------------------------------------------------\n    // STL support\n    //------------------------------------------------------------------------\n\n    //! start iterator\n    iterator begin() {return iterator(*this,0);}\n    //! end iterator\n    iterator end() {return iterator(*this,size());}\n    //! start const iterator\n    const_iterator begin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator end() const {return const_iterator(*this,size());}\n    //! start const iterator\n    const_iterator cbegin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator cend() const {return const_iterator(*this,size());}\n    //! reverse start iterator\n    reverse_iterator rbegin() {return reverse_iterator(end());}\n    //! reverse end iterator\n    reverse_iterator rend() {return reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator crbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator crend() const {return const_reverse_iterator(begin());}\n    //! the first item\n    reference front() {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<T>())[0];\n    }\n    //! the first item const\n    const_reference front() const {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<const T>())[0];\n    }\n    //! the last item\n    reference back() {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! the last item const\n    const_reference back() const {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! assign n items by copying t item\n    void assign(size_type n, const_reference t) {\n        clear();\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! assign range [first, last)\n    template<class I>\n    void assign(I first, I last) {\n        clear(); internal_assign_range( first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assigns an initializer list\n    void assign(std::initializer_list<T> init_list) {\n        clear(); internal_assign_iterators( init_list.begin(), init_list.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! swap two instances\n    void swap(concurrent_vector &vector) {\n        using std::swap;\n        if( this != &vector ) {\n            concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));\n            swap(this->my_allocator, vector.my_allocator);\n        }\n    }\n\n    //! Clear container while keeping memory allocated.\n    /** To free up the memory, use in conjunction with method compact(). Not thread safe **/\n    void clear() {\n        internal_clear(&destroy_array);\n    }\n\n    //! Clear and destroy vector.\n    ~concurrent_vector() {\n        segment_t *table = my_segment.load<relaxed>();\n        internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n        // base class destructor call should be then\n    }\n\n    const internal::concurrent_vector_base_v3 &internal_vector_base() const { return *this; }\nprivate:\n    //! Allocate k items\n    static void *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {\n        return static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);\n    }\n    //! Free k segments from table\n    void internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block);\n\n    //! Get reference to element at given index.\n    T& internal_subscript( size_type index ) const;\n\n    //! Get reference to element at given index with errors checks\n    T& internal_subscript_with_exceptions( size_type index ) const;\n\n    //! assign n items by copying t\n    void internal_assign_n(size_type n, const_pointer p) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );\n    }\n\n    //! helper class\n    template<bool B> class is_integer_tag;\n\n    //! assign integer items by copying when arguments are treated as iterators. See C++ Standard 2003 23.1.1p9\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<true> *) {\n        internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));\n    }\n    //! inline proxy assign by iterators\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<false> *) {\n        internal_assign_iterators(first, last);\n    }\n    //! assign by iterators\n    template<class I>\n    void internal_assign_iterators(I first, I last);\n\n    //these functions are marked __TBB_EXPORTED_FUNC as they are called from within the library\n\n    //! Construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, const void*, size_type n );\n\n    //! Copy-construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array_by( void* begin, const void* src, size_type n );\n\n    //! Copy-construct n instances of T by copying single element pointed to by src, starting at \"dst\".\n    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n    //! Either opy or move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array_if_noexcept( void* dst, const void* src, size_type n );\n#endif //__TBB_MOVE_IF_NO_EXCEPT_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array( void* dst, const void* src, size_type n );\n\n    //! Move-assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC move_assign_array( void* dst, const void* src, size_type n );\n#endif\n    //! Copy-construct n instances of T, starting at \"dst\" by iterator range of [p_type_erased_iterator, p_type_erased_iterator+n).\n    template<typename Iterator>\n    static void __TBB_EXPORTED_FUNC copy_range( void* dst, const void* p_type_erased_iterator, size_type n );\n\n    //! Assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );\n\n    //! Destroy n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );\n\n    //! Exception-aware helper class for filling a segment by exception-danger operators of user class\n    class internal_loop_guide : internal::no_copy {\n    public:\n        const pointer array;\n        const size_type n;\n        size_type i;\n\n        static const T* as_const_pointer(const void *ptr) { return static_cast<const T *>(ptr); }\n        static T* as_pointer(const void *src) { return static_cast<T*>(const_cast<void *>(src)); }\n\n        internal_loop_guide(size_type ntrials, void *ptr)\n            : array(as_pointer(ptr)), n(ntrials), i(0) {}\n        void init() {   for(; i < n; ++i) new( &array[i] ) T(); }\n        void init(const void *src) { for(; i < n; ++i) new( &array[i] ) T(*as_const_pointer(src)); }\n        void copy(const void *src) { for(; i < n; ++i) new( &array[i] ) T(as_const_pointer(src)[i]); }\n        void assign(const void *src) { for(; i < n; ++i) array[i] = as_const_pointer(src)[i]; }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        void move_assign(const void *src)       { for(; i < n; ++i) array[i]         =  std::move(as_pointer(src)[i]);   }\n        void move_construct(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move(as_pointer(src)[i]) ); }\n#endif\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n        void move_construct_if_noexcept(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move_if_noexcept(as_pointer(src)[i]) ); }\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\n        //TODO: rename to construct_range\n        template<class I> void iterate(I &src) { for(; i < n; ++i, ++src) new( &array[i] ) T( *src ); }\n        ~internal_loop_guide() {\n            if(i < n) {// if an exception was raised, fill the rest of items with zeros\n                internal::handle_unconstructed_elements(array+i, n-i);\n            }\n        }\n    };\n\n    struct push_back_helper : internal::no_copy{\n        struct element_construction_guard : internal::no_copy{\n            pointer element;\n\n            element_construction_guard(pointer an_element) : element (an_element){}\n            void dismiss(){ element = NULL; }\n            ~element_construction_guard(){\n                if (element){\n                    internal::handle_unconstructed_elements(element, 1);\n                }\n            }\n        };\n\n        concurrent_vector & v;\n        size_type k;\n        element_construction_guard g;\n\n        push_back_helper(concurrent_vector & vector) :\n            v(vector),\n            g (static_cast<T*>(v.internal_push_back(sizeof(T),k)))\n        {}\n\n        pointer internal_push_back_result(){ return g.element;}\n        iterator return_iterator_and_dismiss(){\n            pointer ptr = g.element;\n            g.dismiss();\n            return iterator(v, k, ptr);\n        }\n    };\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (push)\n#pragma warning (disable: 4701) // potentially uninitialized local variable \"old\"\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::shrink_to_fit() {\n    internal_segments_table old;\n    __TBB_TRY {\n        internal_array_op2 copy_or_move_array =\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n                &move_array_if_noexcept\n#else\n                &copy_array\n#endif\n        ;\n        if( internal_compact( sizeof(T), &old, &destroy_array, copy_or_move_array ) )\n            internal_free_segments( old.table, pointers_per_long_table, old.first_block ); // free joined and unnecessary segments\n    } __TBB_CATCH(...) {\n        if( old.first_block ) // free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]\n            internal_free_segments( old.table, 1, old.first_block );\n        __TBB_RETHROW();\n    }\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (pop)\n#endif // warning 4701 is back\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block) {\n    // Free the arrays\n    while( k > first_block ) {\n        --k;\n        segment_value_t segment_value = table[k].load<relaxed>();\n        table[k].store<relaxed>(segment_not_used());\n        if( segment_value == segment_allocated() ) // check for correct segment pointer\n            this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(k) );\n    }\n    segment_value_t segment_value = table[0].load<relaxed>();\n    if( segment_value == segment_allocated() ) {\n        __TBB_ASSERT( first_block > 0, NULL );\n        while(k > 0) table[--k].store<relaxed>(segment_not_used());\n        this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(first_block) );\n    }\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript( size_type index ) const {\n    //TODO: unify both versions of internal_subscript\n    __TBB_ASSERT( index < my_early_size, \"index out of bounds\" );\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    __TBB_ASSERT( my_segment.load<acquire>() != my_storage || k < pointers_per_short_table, \"index is being allocated\" );\n    //no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    __TBB_ASSERT( segment_value != segment_allocation_failed(), \"the instance is broken by bad allocation. Use at() instead\" );\n    __TBB_ASSERT( segment_value != segment_not_used(), \"index is being allocated\" );\n    return (( segment_value.pointer<T>()))[j];\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index ) const {\n    if( index >= my_early_size )\n        internal::throw_exception(internal::eid_out_of_range); // throw std::out_of_range\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    //TODO: refactor this condition into separate helper function, e.g. fits_into_small_table\n    if( my_segment.load<acquire>() == my_storage && k >= pointers_per_short_table )\n        internal::throw_exception(internal::eid_segment_range_error); // throw std::range_error\n    // no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    enforce_segment_allocated(segment_value, internal::eid_index_range_error);\n    return (segment_value.pointer<T>())[j];\n}\n\ntemplate<typename T, class A> template<class I>\nvoid concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {\n    __TBB_ASSERT(my_early_size == 0, NULL);\n    size_type n = std::distance(first, last);\n    if( !n ) return;\n    internal_reserve(n, sizeof(T), max_size());\n    my_early_size = n;\n    segment_index_t k = 0;\n    //TODO: unify segment iteration code with concurrent_base_v3::helper\n    size_type sz = segment_size( my_first_block );\n    while( sz < n ) {\n        internal_loop_guide loop(sz, my_segment[k].template load<relaxed>().template pointer<void>());\n        loop.iterate(first);\n        n -= sz;\n        if( !k ) k = my_first_block;\n        else { ++k; sz <<= 1; }\n    }\n    internal_loop_guide loop(n, my_segment[k].template load<relaxed>().template pointer<void>());\n    loop.iterate(first);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array( void* begin, const void *, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array_by( void* begin, const void *src, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init(src);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::copy_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.copy(src);\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct(src);\n}\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_assign(src);\n}\n#endif\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array_if_noexcept( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct_if_noexcept(src);\n}\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\ntemplate<typename T, class A>\ntemplate<typename I>\nvoid concurrent_vector<T, A>::copy_range( void* dst, const void* p_type_erased_iterator, size_type n ){\n    internal_loop_guide loop(n, dst);\n    loop.iterate( *(static_cast<I*>(const_cast<void*>(p_type_erased_iterator))) );\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.assign(src);\n}\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warning\n    #pragma warning (push)\n    #pragma warning (disable: 4189)\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {\n    T* array = static_cast<T*>(begin);\n    for( size_type j=n; j>0; --j )\n        array[j-1].~T(); // destructors are supposed to not throw any exceptions\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4189 is back\n\n// concurrent_vector's template functions\ntemplate<typename T, class A1, class A2>\ninline bool operator==(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b) {\n    //TODO: call size() only once per vector (in operator==)\n    // Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());\n    if(a.size() != b.size()) return false;\n    typename concurrent_vector<T, A1>::const_iterator i(a.begin());\n    typename concurrent_vector<T, A2>::const_iterator j(b.begin());\n    for(; i != a.end(); ++i, ++j)\n        if( !(*i == *j) ) return false;\n    return true;\n}\n\ntemplate<typename T, class A1, class A2>\ninline bool operator!=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return b < a; }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(b < a); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a < b); }\n\ntemplate<typename T, class A>\ninline void swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)\n{    a.swap( b ); }\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4267,4127 are back\n\n#endif /* __TBB_concurrent_vector_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/critical_section.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_CRITICAL_SECTION_H_\n#define _TBB_CRITICAL_SECTION_H_\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#include <errno.h>\n#endif  // _WIN32||WIN64\n\n#include \"tbb_stddef.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_exception.h\"\n\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n    namespace internal {\nclass critical_section_v4 : internal::no_copy {\n#if _WIN32||_WIN64\n    CRITICAL_SECTION my_impl;\n#else\n    pthread_mutex_t my_impl;\n#endif\n    tbb_thread::id my_tid;\npublic:\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    critical_section_v4() {\n#if _WIN32||_WIN64\n        InitializeCriticalSectionEx( &my_impl, 4000, 0 );\n#else\n        pthread_mutex_init(&my_impl, NULL);\n#endif\n        internal_construct();\n    }\n\n    ~critical_section_v4() {\n        __TBB_ASSERT(my_tid == tbb_thread::id(), \"Destroying a still-held critical section\");\n#if _WIN32||_WIN64\n        DeleteCriticalSection(&my_impl);\n#else\n        pthread_mutex_destroy(&my_impl);\n#endif\n    }\n\n    class scoped_lock : internal::no_copy {\n    private:\n        critical_section_v4 &my_crit;\n    public:\n        scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {\n            my_crit.lock();\n        }\n\n        ~scoped_lock() {\n            my_crit.unlock();\n        }\n    };\n\n    void lock() {\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) throw_exception( eid_improper_lock );\n#if _WIN32||_WIN64\n        EnterCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_lock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::lock: pthread_mutex_lock failed\");\n#endif\n        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);\n        my_tid = local_tid;\n    }\n\n    bool try_lock() {\n        bool gotlock;\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) return false;\n#if _WIN32||_WIN64\n        gotlock = TryEnterCriticalSection( &my_impl ) != 0;\n#else\n        int rval = pthread_mutex_trylock(&my_impl);\n        // valid returns are 0 (locked) and [EBUSY]\n        __TBB_ASSERT(rval == 0 || rval == EBUSY, \"critical_section::trylock: pthread_mutex_trylock failed\");\n        gotlock = rval == 0;\n#endif\n        if(gotlock)  {\n            my_tid = local_tid;\n        }\n        return gotlock;\n    }\n\n    void unlock() {\n        __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, \"thread unlocking critical_section is not thread that locked it\");\n        my_tid = tbb_thread::id();\n#if _WIN32||_WIN64\n        LeaveCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_unlock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::unlock: pthread_mutex_unlock failed\");\n#endif\n    }\n\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n}; // critical_section_v4\n} // namespace internal\ntypedef internal::critical_section_v4 critical_section;\n\n__TBB_DEFINE_PROFILING_SET_NAME(critical_section)\n} // namespace tbb\n#endif  // _TBB_CRITICAL_SECTION_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/enumerable_thread_specific.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_enumerable_thread_specific_H\n#define __TBB_enumerable_thread_specific_H\n\n#include \"atomic.h\"\n#include \"concurrent_vector.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"aligned_space.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tbb_profiling.h\"\n#include <string.h>  // for memcpy\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif\n\n#define __TBB_ETS_USE_CPP11 \\\n    (__TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n     && __TBB_CPP11_DECLTYPE_PRESENT && __TBB_CPP11_LAMBDAS_PRESENT)\n\nnamespace tbb {\n\n//! enum for selecting between single key and key-per-instance versions\nenum ets_key_usage_type { ets_key_per_instance, ets_no_key };\n\nnamespace interface6 {\n\n    // Forward declaration to use in internal classes\n    template <typename T, typename Allocator, ets_key_usage_type ETS_key_type>\n    class enumerable_thread_specific;\n\n    //! @cond\n    namespace internal {\n\n        using namespace tbb::internal;\n\n        template<ets_key_usage_type ETS_key_type>\n        class ets_base: tbb::internal::no_copy {\n        protected:\n            typedef tbb_thread::id key_type;\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        public:\n#endif\n            struct slot;\n\n            struct array {\n                array* next;\n                size_t lg_size;\n                slot& at( size_t k ) {\n                    return ((slot*)(void*)(this+1))[k];\n                }\n                size_t size() const {return size_t(1)<<lg_size;}\n                size_t mask() const {return size()-1;}\n                size_t start( size_t h ) const {\n                    return h>>(8*sizeof(size_t)-lg_size);\n                }\n            };\n            struct slot {\n                key_type key;\n                void* ptr;\n                bool empty() const {return key == key_type();}\n                bool match( key_type k ) const {return key == k;}\n                bool claim( key_type k ) {\n                    // TODO: maybe claim ptr, because key_type is not guaranteed to fit into word size\n                    return atomic_compare_and_swap(key, k, key_type()) == key_type();\n                }\n            };\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        protected:\n#endif\n\n            //! Root of linked list of arrays of decreasing size.\n            /** NULL if and only if my_count==0.\n                Each array in the list is half the size of its predecessor. */\n            atomic<array*> my_root;\n            atomic<size_t> my_count;\n            virtual void* create_local() = 0;\n            virtual void* create_array(size_t _size) = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) = 0; // _size in bytes\n            array* allocate( size_t lg_size ) {\n                size_t n = size_t(1)<<lg_size;\n                array* a = static_cast<array*>(create_array( sizeof(array)+n*sizeof(slot) ));\n                a->lg_size = lg_size;\n                std::memset( a+1, 0, n*sizeof(slot) );\n                return a;\n            }\n            void free(array* a) {\n                size_t n = size_t(1)<<(a->lg_size);\n                free_array( (void *)a, size_t(sizeof(array)+n*sizeof(slot)) );\n            }\n\n            ets_base() {my_root=NULL; my_count=0;}\n            virtual ~ets_base();  // g++ complains if this is not virtual\n            void* table_lookup( bool& exists );\n            void table_clear();\n            // The following functions are not used in concurrent context,\n            // so we don't need synchronization and ITT annotations there.\n            void table_elementwise_copy( const ets_base& other,\n                                         void*(*add_element)(ets_base&, void*) ) {\n                __TBB_ASSERT(!my_root,NULL);\n                __TBB_ASSERT(!my_count,NULL);\n                if( !other.my_root ) return;\n                array* root = my_root = allocate(other.my_root->lg_size);\n                root->next = NULL;\n                my_count = other.my_count;\n                size_t mask = root->mask();\n                for( array* r=other.my_root; r; r=r->next ) {\n                    for( size_t i=0; i<r->size(); ++i ) {\n                        slot& s1 = r->at(i);\n                        if( !s1.empty() ) {\n                            for( size_t j = root->start(tbb::tbb_hash<key_type>()(s1.key)); ; j=(j+1)&mask ) {\n                                slot& s2 = root->at(j);\n                                if( s2.empty() ) {\n                                    s2.ptr = add_element(*this, s1.ptr);\n                                    s2.key = s1.key;\n                                    break;\n                                }\n                                else if( s2.match(s1.key) )\n                                    break;\n                            }\n                        }\n                    }\n                }\n            }\n            void table_swap( ets_base& other ) {\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               tbb::internal::swap<relaxed>(my_root, other.my_root);\n               tbb::internal::swap<relaxed>(my_count, other.my_count);\n            }\n        };\n\n        template<ets_key_usage_type ETS_key_type>\n        ets_base<ETS_key_type>::~ets_base() {\n            __TBB_ASSERT(!my_root, NULL);\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void ets_base<ETS_key_type>::table_clear() {\n            while( array* r = my_root ) {\n                my_root = r->next;\n                free(r);\n            }\n            my_count = 0;\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void* ets_base<ETS_key_type>::table_lookup( bool& exists ) {\n            const key_type k = tbb::this_tbb_thread::get_id();\n\n            __TBB_ASSERT(k != key_type(),NULL);\n            void* found;\n            size_t h = tbb::tbb_hash<key_type>()(k);\n            for( array* r=my_root; r; r=r->next ) {\n                call_itt_notify(acquired,r);\n                size_t mask=r->mask();\n                for(size_t i = r->start(h); ;i=(i+1)&mask) {\n                    slot& s = r->at(i);\n                    if( s.empty() ) break;\n                    if( s.match(k) ) {\n                        if( r==my_root ) {\n                            // Success at top level\n                            exists = true;\n                            return s.ptr;\n                        } else {\n                            // Success at some other level.  Need to insert at top level.\n                            exists = true;\n                            found = s.ptr;\n                            goto insert;\n                        }\n                    }\n                }\n            }\n            // Key does not yet exist.  The density of slots in the table does not exceed 0.5,\n            // for if this will occur a new table is allocated with double the current table\n            // size, which is swapped in as the new root table.  So an empty slot is guaranteed.\n            exists = false;\n            found = create_local();\n            {\n                size_t c = ++my_count;\n                array* r = my_root;\n                call_itt_notify(acquired,r);\n                if( !r || c>r->size()/2 ) {\n                    size_t s = r ? r->lg_size : 2;\n                    while( c>size_t(1)<<(s-1) ) ++s;\n                    array* a = allocate(s);\n                    for(;;) {\n                        a->next = r;\n                        call_itt_notify(releasing,a);\n                        array* new_r = my_root.compare_and_swap(a,r);\n                        if( new_r==r ) break;\n                        call_itt_notify(acquired, new_r);\n                        if( new_r->lg_size>=s ) {\n                            // Another thread inserted an equal or  bigger array, so our array is superfluous.\n                            free(a);\n                            break;\n                        }\n                        r = new_r;\n                    }\n                }\n            }\n        insert:\n        // Whether a slot has been found in an older table, or if it has been inserted at this level,\n        // it has already been accounted for in the total.  Guaranteed to be room for it, and it is\n        // not present, so search for empty slot and use it.\n            array* ir = my_root;\n            call_itt_notify(acquired, ir);\n            size_t mask = ir->mask();\n            for(size_t i = ir->start(h);;i=(i+1)&mask) {\n                slot& s = ir->at(i);\n                if( s.empty() ) {\n                    if( s.claim(k) ) {\n                        s.ptr = found;\n                        return found;\n                    }\n                }\n            }\n        }\n\n        //! Specialization that exploits native TLS\n        template <>\n        class ets_base<ets_key_per_instance>: protected ets_base<ets_no_key> {\n            typedef ets_base<ets_no_key> super;\n#if _WIN32||_WIN64\n#if __TBB_WIN8UI_SUPPORT\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = FlsAlloc(NULL); }\n            void destroy_key() { FlsFree(my_key); }\n            void set_tls(void * value) { FlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)FlsGetValue(my_key); }\n#else\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = TlsAlloc(); }\n            void destroy_key() { TlsFree(my_key); }\n            void set_tls(void * value) { TlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)TlsGetValue(my_key); }\n#endif\n#else\n            typedef pthread_key_t tls_key_t;\n            void create_key() { pthread_key_create(&my_key, NULL); }\n            void destroy_key() { pthread_key_delete(my_key); }\n            void set_tls( void * value ) const { pthread_setspecific(my_key, value); }\n            void* get_tls() const { return pthread_getspecific(my_key); }\n#endif\n            tls_key_t my_key;\n            virtual void* create_local() __TBB_override = 0;\n            virtual void* create_array(size_t _size) __TBB_override = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) __TBB_override = 0; // size in bytes\n        protected:\n            ets_base() {create_key();}\n            ~ets_base() {destroy_key();}\n            void* table_lookup( bool& exists ) {\n                void* found = get_tls();\n                if( found ) {\n                    exists=true;\n                } else {\n                    found = super::table_lookup(exists);\n                    set_tls(found);\n                }\n                return found;\n            }\n            void table_clear() {\n                destroy_key();\n                create_key();\n                super::table_clear();\n            }\n            void table_swap( ets_base& other ) {\n               using std::swap;\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               swap(my_key, other.my_key);\n               super::table_swap(other);\n            }\n        };\n\n        //! Random access iterator for traversing the thread local copies.\n        template< typename Container, typename Value >\n        class enumerable_thread_specific_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n            // Ensure that Microsoft's internal template function _Val_type works correctly.\n            : public std::iterator<std::random_access_iterator_tag,Value>\n#endif /* defined(_WIN64) && defined(_MSC_VER) */\n        {\n            //! current position in the concurrent_vector\n\n            Container *my_container;\n            typename Container::size_type my_index;\n            mutable Value *my_value;\n\n            template<typename C, typename T>\n            friend enumerable_thread_specific_iterator<C,T>\n            operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<C,T>& v );\n\n            template<typename C, typename T, typename U>\n            friend bool operator==( const enumerable_thread_specific_iterator<C,T>& i,\n                                    const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend bool operator<( const enumerable_thread_specific_iterator<C,T>& i,\n                                   const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i,\n                                        const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename U>\n            friend class enumerable_thread_specific_iterator;\n\n            public:\n\n            enumerable_thread_specific_iterator( const Container &container, typename Container::size_type index ) :\n                my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}\n\n            //! Default constructor\n            enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}\n\n            template<typename U>\n            enumerable_thread_specific_iterator( const enumerable_thread_specific_iterator<Container, U>& other ) :\n                    my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}\n\n            enumerable_thread_specific_iterator operator+( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator(*my_container, my_index + offset);\n            }\n\n            enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {\n                my_index += offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator operator-( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator( *my_container, my_index-offset );\n            }\n\n            enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {\n                my_index -= offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            Value& operator*() const {\n                Value* value = my_value;\n                if( !value ) {\n                    value = my_value = (*my_container)[my_index].value();\n                }\n                __TBB_ASSERT( value==(*my_container)[my_index].value(), \"corrupt cache\" );\n                return *value;\n            }\n\n            Value& operator[]( ptrdiff_t k ) const {\n               return (*my_container)[my_index + k].value;\n            }\n\n            Value* operator->() const {return &operator*();}\n\n            enumerable_thread_specific_iterator& operator++() {\n                ++my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator& operator--() {\n                --my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            //! Post increment\n            enumerable_thread_specific_iterator operator++(int) {\n                enumerable_thread_specific_iterator result = *this;\n                ++my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            //! Post decrement\n            enumerable_thread_specific_iterator operator--(int) {\n                enumerable_thread_specific_iterator result = *this;\n                --my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            // STL support\n            typedef ptrdiff_t difference_type;\n            typedef Value value_type;\n            typedef Value* pointer;\n            typedef Value& reference;\n            typedef std::random_access_iterator_tag iterator_category;\n        };\n\n        template<typename Container, typename T>\n        enumerable_thread_specific_iterator<Container,T>\n        operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<Container,T>& v ) {\n            return enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator==( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index==j.my_index && i.my_container == j.my_container;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator!=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index<j.my_index;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return j<i;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i<j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(j<i);\n        }\n\n        template<typename Container, typename T, typename U>\n        ptrdiff_t operator-( const enumerable_thread_specific_iterator<Container,T>& i,\n                             const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index-j.my_index;\n        }\n\n    template<typename SegmentedContainer, typename Value >\n        class segmented_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n        : public std::iterator<std::input_iterator_tag, Value>\n#endif\n        {\n            template<typename C, typename T, typename U>\n            friend bool operator==(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename T, typename U>\n            friend bool operator!=(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename U>\n            friend class segmented_iterator;\n\n            public:\n\n                segmented_iterator() {my_segcont = NULL;}\n\n                segmented_iterator( const SegmentedContainer& _segmented_container ) :\n                    my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),\n                    outer_iter(my_segcont->end()) { }\n\n                ~segmented_iterator() {}\n\n                typedef typename SegmentedContainer::iterator outer_iterator;\n                typedef typename SegmentedContainer::value_type InnerContainer;\n                typedef typename InnerContainer::iterator inner_iterator;\n\n                // STL support\n                typedef ptrdiff_t difference_type;\n                typedef Value value_type;\n                typedef typename SegmentedContainer::size_type size_type;\n                typedef Value* pointer;\n                typedef Value& reference;\n                typedef std::input_iterator_tag iterator_category;\n\n                // Copy Constructor\n                template<typename U>\n                segmented_iterator(const segmented_iterator<SegmentedContainer, U>& other) :\n                    my_segcont(other.my_segcont),\n                    outer_iter(other.outer_iter),\n                    // can we assign a default-constructed iterator to inner if we're at the end?\n                    inner_iter(other.inner_iter)\n                {}\n\n                // assignment\n                template<typename U>\n                segmented_iterator& operator=( const segmented_iterator<SegmentedContainer, U>& other) {\n                    if(this != &other) {\n                        my_segcont = other.my_segcont;\n                        outer_iter = other.outer_iter;\n                        if(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;\n                    }\n                    return *this;\n                }\n\n                // allow assignment of outer iterator to segmented iterator.  Once it is\n                // assigned, move forward until a non-empty inner container is found or\n                // the end of the outer container is reached.\n                segmented_iterator& operator=(const outer_iterator& new_outer_iter) {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    // check that this iterator points to something inside the segmented container\n                    for(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {\n                        if( !outer_iter->empty() ) {\n                            inner_iter = outer_iter->begin();\n                            break;\n                        }\n                    }\n                    return *this;\n                }\n\n                // pre-increment\n                segmented_iterator& operator++() {\n                    advance_me();\n                    return *this;\n                }\n\n                // post-increment\n                segmented_iterator operator++(int) {\n                    segmented_iterator tmp = *this;\n                    operator++();\n                    return tmp;\n                }\n\n                bool operator==(const outer_iterator& other_outer) const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    return (outer_iter == other_outer &&\n                            (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));\n                }\n\n                bool operator!=(const outer_iterator& other_outer) const {\n                    return !operator==(other_outer);\n\n                }\n\n                // (i)* RHS\n                reference operator*() const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), \"Dereferencing a pointer at end of container\");\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // should never happen\n                    return *inner_iter;\n                }\n\n                // i->\n                pointer operator->() const { return &operator*();}\n\n            private:\n                SegmentedContainer*             my_segcont;\n                outer_iterator outer_iter;\n                inner_iterator inner_iter;\n\n                void advance_me() {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); // not true if there are no inner containers\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // not true if the inner containers are all empty.\n                    ++inner_iter;\n                    while(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {\n                        inner_iter = outer_iter->begin();\n                    }\n                }\n        };    // segmented_iterator\n\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator==( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            if(i.my_segcont != j.my_segcont) return false;\n            if(i.my_segcont == NULL) return true;\n            if(i.outer_iter != j.outer_iter) return false;\n            if(i.outer_iter == i.my_segcont->end()) return true;\n            return i.inner_iter == j.inner_iter;\n        }\n\n        // !=\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator!=( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename T>\n        struct construct_by_default: tbb::internal::no_assign {\n            void construct(void*where) {new(where) T();} // C++ note: the () in T() ensure zero initialization.\n            construct_by_default( int ) {}\n        };\n\n        template<typename T>\n        struct construct_by_exemplar: tbb::internal::no_assign {\n            const T exemplar;\n            void construct(void*where) {new(where) T(exemplar);}\n            construct_by_exemplar( const T& t ) : exemplar(t) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_exemplar( T&& t ) : exemplar(std::move(t)) {}\n#endif\n        };\n\n        template<typename T, typename Finit>\n        struct construct_by_finit: tbb::internal::no_assign {\n            Finit f;\n            void construct(void* where) {new(where) T(f());}\n            construct_by_finit( const Finit& f_ ) : f(f_) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_finit( Finit&& f_ ) : f(std::move(f_)) {}\n#endif\n        };\n\n#if __TBB_ETS_USE_CPP11\n        template<typename T, typename... P>\n        struct construct_by_args: tbb::internal::no_assign {\n            internal::stored_pack<P...> pack;\n            void construct(void* where) {\n                internal::call( [where](const typename strip<P>::type&... args ){\n                   new(where) T(args...);\n                }, pack );\n            }\n            construct_by_args( P&& ... args ) : pack(std::forward<P>(args)...) {}\n        };\n#endif\n\n        // storage for initialization function pointer\n        // TODO: consider removing the template parameter T here and in callback_leaf\n        template<typename T>\n        class callback_base {\n        public:\n            // Clone *this\n            virtual callback_base* clone() const = 0;\n            // Destruct and free *this\n            virtual void destroy() = 0;\n            // Need virtual destructor to satisfy GCC compiler warning\n            virtual ~callback_base() { }\n            // Construct T at where\n            virtual void construct(void* where) = 0;\n        };\n\n        template <typename T, typename Constructor>\n        class callback_leaf: public callback_base<T>, Constructor {\n#if __TBB_ETS_USE_CPP11\n            template<typename... P> callback_leaf( P&& ... params ) : Constructor(std::forward<P>(params)...) {}\n#else\n            template<typename X> callback_leaf( const X& x ) : Constructor(x) {}\n#endif\n            // TODO: make the construction/destruction consistent (use allocator.construct/destroy)\n            typedef typename tbb::tbb_allocator<callback_leaf> my_allocator_type;\n\n            callback_base<T>* clone() const __TBB_override {\n                return make(*this);\n            }\n\n            void destroy() __TBB_override {\n                my_allocator_type().destroy(this);\n                my_allocator_type().deallocate(this,1);\n            }\n\n            void construct(void* where) __TBB_override {\n                Constructor::construct(where);\n            }\n        public:\n#if __TBB_ETS_USE_CPP11\n            template<typename... P>\n            static callback_base<T>* make( P&& ... params ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf( std::forward<P>(params)... );\n            }\n#else\n            template<typename X>\n            static callback_base<T>* make( const X& x ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf(x);\n            }\n#endif\n        };\n\n        //! Template for recording construction of objects in table\n        /** All maintenance of the space will be done explicitly on push_back,\n            and all thread local copies must be destroyed before the concurrent\n            vector is deleted.\n\n            The flag is_built is initialized to false.  When the local is\n            successfully-constructed, set the flag to true or call value_committed().\n            If the constructor throws, the flag will be false.\n        */\n        template<typename U>\n        struct ets_element {\n            tbb::aligned_space<U> my_space;\n            bool is_built;\n            ets_element() { is_built = false; }  // not currently-built\n            U* value() { return my_space.begin(); }\n            U* value_committed() { is_built = true; return my_space.begin(); }\n            ~ets_element() {\n                if(is_built) {\n                    my_space.begin()->~U();\n                    is_built = false;\n                }\n            }\n        };\n\n        // A predicate that can be used for a compile-time compatibility check of ETS instances\n        // Ideally, it should have been declared inside the ETS class, but unfortunately\n        // in that case VS2013 does not enable the variadic constructor.\n        template<typename T, typename ETS> struct is_compatible_ets { static const bool value = false; };\n        template<typename T, typename U, typename A, ets_key_usage_type C>\n        struct is_compatible_ets< T, enumerable_thread_specific<U,A,C> > { static const bool value = internal::is_same_type<T,U>::value; };\n\n#if __TBB_ETS_USE_CPP11\n        // A predicate that checks whether, for a variable 'foo' of type T, foo() is a valid expression\n        template <typename T>\n        class is_callable_no_args {\n        private:\n            typedef char yes[1];\n            typedef char no [2];\n\n            template<typename U> static yes& decide( decltype(declval<U>()())* );\n            template<typename U> static no&  decide(...);\n        public:\n            static const bool value = (sizeof(decide<T>(NULL)) == sizeof(yes));\n        };\n#endif\n\n    } // namespace internal\n    //! @endcond\n\n    //! The enumerable_thread_specific container\n    /** enumerable_thread_specific has the following properties:\n        - thread-local copies are lazily created, with default, exemplar or function initialization.\n        - thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.\n        - the contained objects need not have operator=() defined if combine is not used.\n        - enumerable_thread_specific containers may be copy-constructed or assigned.\n        - thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.\n        - outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods\n\n    @par Segmented iterator\n        When the thread-local objects are containers with input_iterators defined, a segmented iterator may\n        be used to iterate over all the elements of all thread-local copies.\n\n    @par combine and combine_each\n        - Both methods are defined for enumerable_thread_specific.\n        - combine() requires the type T have operator=() defined.\n        - neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)\n        - Both are evaluated in serial context (the methods are assumed to be non-benign.)\n\n    @ingroup containers */\n    template <typename T,\n              typename Allocator=cache_aligned_allocator<T>,\n              ets_key_usage_type ETS_key_type=ets_no_key >\n    class enumerable_thread_specific: internal::ets_base<ETS_key_type> {\n\n        template<typename U, typename A, ets_key_usage_type C> friend class enumerable_thread_specific;\n\n        typedef internal::padded< internal::ets_element<T> > padded_element;\n\n        //! A generic range, used to create range objects from the iterators\n        template<typename I>\n        class generic_range_type: public blocked_range<I> {\n        public:\n            typedef T value_type;\n            typedef T& reference;\n            typedef const T& const_reference;\n            typedef I iterator;\n            typedef ptrdiff_t difference_type;\n            generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n            template<typename U>\n            generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n            generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n        };\n\n        typedef typename Allocator::template rebind< padded_element >::other padded_allocator_type;\n        typedef tbb::concurrent_vector< padded_element, padded_allocator_type > internal_collection_type;\n\n        internal::callback_base<T> *my_construct_callback;\n\n        internal_collection_type my_locals;\n\n        // TODO: consider unifying the callback mechanism for all create_local* methods below\n        //   (likely non-compatible and requires interface version increase)\n        void* create_local() __TBB_override {\n            padded_element& lref = *my_locals.grow_by(1);\n            my_construct_callback->construct(lref.value());\n            return lref.value_committed();\n        }\n\n        static void* create_local_by_copy( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(*static_cast<T*>(p));\n            return lref.value_committed();\n        }\n\n#if __TBB_ETS_USE_CPP11\n        static void* create_local_by_move( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(std::move(*static_cast<T*>(p)));\n            return lref.value_committed();\n        }\n#endif\n\n        typedef typename Allocator::template rebind< uintptr_t >::other array_allocator_type;\n\n        // _size is in bytes\n        void* create_array(size_t _size) __TBB_override {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            return array_allocator_type().allocate(nelements);\n        }\n\n        void free_array( void* _ptr, size_t _size) __TBB_override {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);\n        }\n\n    public:\n\n        //! Basic types\n        typedef Allocator allocator_type;\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef T* pointer;\n        typedef const T* const_pointer;\n        typedef typename internal_collection_type::size_type size_type;\n        typedef typename internal_collection_type::difference_type difference_type;\n\n        // Iterator types\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, const value_type > const_iterator;\n\n        // Parallel range types\n        typedef generic_range_type< iterator > range_type;\n        typedef generic_range_type< const_iterator > const_range_type;\n\n        //! Default constructor.  Each local instance of T is default constructed.\n        enumerable_thread_specific() : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_default<T> >::make(/*dummy argument*/0)\n        ){}\n\n        //! Constructor with initializer functor.  Each local instance of T is constructed by T(finit()).\n        template <typename Finit\n#if __TBB_ETS_USE_CPP11\n                  , typename = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type\n#endif\n        >\n        explicit enumerable_thread_specific( Finit finit ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( tbb::internal::move(finit) )\n        ){}\n\n        //! Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar.\n        explicit enumerable_thread_specific( const T& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar )\n        ){}\n\n#if __TBB_ETS_USE_CPP11\n        explicit enumerable_thread_specific( T&& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( std::move(exemplar) )\n        ){}\n\n        //! Variadic constructor with initializer arguments.  Each local instance of T is constructed by T(args...)\n        template <typename P1, typename... P,\n                  typename = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value\n                                                          && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value\n                                                          && !internal::is_same_type<T, typename internal::strip<P1>::type>::value\n                                                         >::type>\n        enumerable_thread_specific( P1&& arg1, P&& ... args ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_args<T,P1,P...> >::make( std::forward<P1>(arg1), std::forward<P>(args)... )\n        ){}\n#endif\n\n        //! Destructor\n        ~enumerable_thread_specific() {\n            if(my_construct_callback) my_construct_callback->destroy();\n            // Deallocate the hash table before overridden free_array() becomes inaccessible\n            this->internal::ets_base<ets_no_key>::table_clear();\n        }\n\n        //! returns reference to local, discarding exists\n        reference local() {\n            bool exists;\n            return local(exists);\n        }\n\n        //! Returns reference to calling thread's local copy, creating one if necessary\n        reference local(bool& exists)  {\n            void* ptr = this->table_lookup(exists);\n            return *(T*)ptr;\n        }\n\n        //! Get the number of local copies\n        size_type size() const { return my_locals.size(); }\n\n        //! true if there have been no local copies created\n        bool empty() const { return my_locals.empty(); }\n\n        //! begin iterator\n        iterator begin() { return iterator( my_locals, 0 ); }\n        //! end iterator\n        iterator end() { return iterator(my_locals, my_locals.size() ); }\n\n        //! begin const iterator\n        const_iterator begin() const { return const_iterator(my_locals, 0); }\n\n        //! end const iterator\n        const_iterator end() const { return const_iterator(my_locals, my_locals.size()); }\n\n        //! Get range for parallel algorithms\n        range_type range( size_t grainsize=1 ) { return range_type( begin(), end(), grainsize ); }\n\n        //! Get const range for parallel algorithms\n        const_range_type range( size_t grainsize=1 ) const { return const_range_type( begin(), end(), grainsize ); }\n\n        //! Destroys local copies\n        void clear() {\n            my_locals.clear();\n            this->table_clear();\n            // callback is not destroyed\n        }\n\n    private:\n\n        template<typename A2, ets_key_usage_type C2>\n        void internal_copy(const enumerable_thread_specific<T, A2, C2>& other) {\n#if __TBB_ETS_USE_CPP11 && TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.\n            my_construct_callback = other.my_construct_callback->clone();\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_copy );\n        }\n\n        void internal_swap(enumerable_thread_specific& other) {\n            using std::swap;\n            __TBB_ASSERT( this!=&other, NULL );\n            swap(my_construct_callback, other.my_construct_callback);\n            // concurrent_vector::swap() preserves storage space,\n            // so addresses to the vector kept in ETS hash table remain valid.\n            swap(my_locals, other.my_locals);\n            this->internal::ets_base<ETS_key_type>::table_swap(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        template<typename A2, ets_key_usage_type C2>\n        void internal_move(enumerable_thread_specific<T, A2, C2>&& other) {\n#if TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            my_construct_callback = other.my_construct_callback;\n            other.my_construct_callback = NULL;\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_move );\n        }\n#endif\n\n    public:\n\n        enumerable_thread_specific( const enumerable_thread_specific& other )\n        : internal::ets_base<ETS_key_type>() /* prevents GCC warnings with -Wextra */\n        {\n            internal_copy(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            internal_copy(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific( enumerable_thread_specific&& other ) : my_construct_callback()\n        {\n            internal_swap(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( enumerable_thread_specific<T, Alloc, Cachetype>&& other ) : my_construct_callback()\n        {\n            internal_move(std::move(other));\n        }\n#endif\n\n        enumerable_thread_specific& operator=( const enumerable_thread_specific& other )\n        {\n            if( this != &other ) {\n                this->clear();\n                my_construct_callback->destroy();\n                internal_copy( other );\n            }\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_copy(other);\n            return *this;\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific& operator=( enumerable_thread_specific&& other )\n        {\n            if( this != &other )\n                internal_swap(other);\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( enumerable_thread_specific<T, Alloc, Cachetype>&& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_move(std::move(other));\n            return *this;\n        }\n#endif\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) {\n            if(begin() == end()) {\n                internal::ets_element<T> location;\n                my_construct_callback->construct(location.value());\n                return *location.value_committed();\n            }\n            const_iterator ci = begin();\n            T my_result = *ci;\n            while(++ci != end())\n                my_result = f_combine( my_result, *ci );\n            return my_result;\n        }\n\n        // combine_func_t takes T by value or by [const] reference, and returns nothing\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) {\n            for(iterator ci = begin(); ci != end(); ++ci) {\n                f_combine( *ci );\n            }\n        }\n\n    }; // enumerable_thread_specific\n\n    template< typename Container >\n    class flattened2d {\n\n        // This intermediate typedef is to address issues with VC7.1 compilers\n        typedef typename Container::value_type conval_type;\n\n    public:\n\n        //! Basic types\n        typedef typename conval_type::size_type size_type;\n        typedef typename conval_type::difference_type difference_type;\n        typedef typename conval_type::allocator_type allocator_type;\n        typedef typename conval_type::value_type value_type;\n        typedef typename conval_type::reference reference;\n        typedef typename conval_type::const_reference const_reference;\n        typedef typename conval_type::pointer pointer;\n        typedef typename conval_type::const_pointer const_pointer;\n\n        typedef typename internal::segmented_iterator<Container, value_type> iterator;\n        typedef typename internal::segmented_iterator<Container, const value_type> const_iterator;\n\n        flattened2d( const Container &c, typename Container::const_iterator b, typename Container::const_iterator e ) :\n            my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }\n\n        explicit flattened2d( const Container &c ) :\n            my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }\n\n        iterator begin() { return iterator(*my_container) = my_begin; }\n        iterator end() { return iterator(*my_container) = my_end; }\n        const_iterator begin() const { return const_iterator(*my_container) = my_begin; }\n        const_iterator end() const { return const_iterator(*my_container) = my_end; }\n\n        size_type size() const {\n            size_type tot_size = 0;\n            for(typename Container::const_iterator i = my_begin; i != my_end; ++i) {\n                tot_size += i->size();\n            }\n            return tot_size;\n        }\n\n    private:\n\n        Container *my_container;\n        typename Container::const_iterator my_begin;\n        typename Container::const_iterator my_end;\n\n    };\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e) {\n        return flattened2d<Container>(c, b, e);\n    }\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c) {\n        return flattened2d<Container>(c);\n    }\n\n} // interface6\n\nnamespace internal {\nusing interface6::internal::segmented_iterator;\n}\n\nusing interface6::enumerable_thread_specific;\nusing interface6::flattened2d;\nusing interface6::flatten2d;\n\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/flow_graph.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_H\n#define __TBB_flow_graph_H\n\n#include \"tbb_stddef.h\"\n#include \"atomic.h\"\n#include \"spin_mutex.h\"\n#include \"null_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"task.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_aggregator_impl.h\"\n#include \"tbb_profiling.h\"\n#include \"task_arena.h\"\n#include \"internal/_tbb_trace_impl.h\"\n\n#if __TBB_PREVIEW_ASYNC_MSG\n#include <vector>    // std::vector in internal::async_storage\n#include <memory>    // std::shared_ptr in async_msg\n#endif\n\n#if __TBB_PREVIEW_STREAMING_NODE\n// For streaming_node\n#include <array>            // std::array\n#include <unordered_map>    // std::unordered_map\n#include <type_traits>      // std::decay, std::true_type, std::false_type\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n#if TBB_DEPRECATED_FLOW_ENQUEUE\n#define FLOW_SPAWN(a) tbb::task::enqueue((a))\n#else\n#define FLOW_SPAWN(a) tbb::task::spawn((a))\n#endif\n\n// use the VC10 or gcc version of tuple if it is available.\n#if __TBB_CPP11_TUPLE_PRESENT\n    #include <tuple>\nnamespace tbb {\n    namespace flow {\n        using std::tuple;\n        using std::tuple_size;\n        using std::tuple_element;\n        using std::get;\n    }\n}\n#else\n    #include \"compat/tuple\"\n#endif\n\n#include<list>\n#include<queue>\n\n/** @file\n  \\brief The graph related classes and functions\n\n  There are some applications that best express dependencies as messages\n  passed between nodes in a graph.  These messages may contain data or\n  simply act as signals that a predecessors has completed. The graph\n  class and its associated node classes can be used to express such\n  applications.\n*/\n\nnamespace tbb {\nnamespace flow {\n\n//! An enumeration the provides the two most common concurrency levels: unlimited and serial\nenum concurrency { unlimited = 0, serial = 1 };\n\nnamespace interface10 {\n\n//! A generic null type\nstruct null_type {};\n\n//! An empty class used for messages that mean \"I'm done\"\nclass continue_msg {};\n\n//! Forward declaration section\ntemplate< typename T > class sender;\ntemplate< typename T > class receiver;\nclass continue_receiver;\ntemplate< typename T > class limiter_node;  // needed for resetting decrementer\ntemplate< typename R, typename B > class run_and_put_task;\n\nnamespace internal {\n\ntemplate<typename T, typename M> class successor_cache;\ntemplate<typename T, typename M> class broadcast_cache;\ntemplate<typename T, typename M> class round_robin_cache;\ntemplate<typename T, typename M> class predecessor_cache;\ntemplate<typename T, typename M> class reservable_predecessor_cache;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n// Holder of edges both for caches and for those nodes which do not have predecessor caches.\n// C == receiver< ... > or sender< ... >, depending.\ntemplate<typename C>\nclass edge_container {\n\npublic:\n    typedef std::list<C *, tbb::tbb_allocator<C *> > edge_list_type;\n\n    void add_edge(C &s) {\n        built_edges.push_back(&s);\n    }\n\n    void delete_edge(C &s) {\n        for (typename edge_list_type::iterator i = built_edges.begin(); i != built_edges.end(); ++i) {\n            if (*i == &s) {\n                (void)built_edges.erase(i);\n                return;  // only remove one predecessor per request\n            }\n        }\n    }\n\n    void copy_edges(edge_list_type &v) {\n        v = built_edges;\n    }\n\n    size_t edge_count() {\n        return (size_t)(built_edges.size());\n    }\n\n    void clear() {\n        built_edges.clear();\n    }\n\n    // methods remove the statement from all predecessors/successors liste in the edge\n    // container.\n    template< typename S > void sender_extract(S &s);\n    template< typename R > void receiver_extract(R &r);\n\nprivate:\n    edge_list_type built_edges;\n};  // class edge_container\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n} // namespace internal\n\n} // namespace interface10\n} // namespace flow\n} // namespace tbb\n\n//! The graph class\n#include \"internal/_flow_graph_impl.h\"\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n// enqueue left task if necessary. Returns the non-enqueued task if there is one.\nstatic inline tbb::task *combine_tasks(graph& g, tbb::task * left, tbb::task * right) {\n    // if no RHS task, don't change left.\n    if (right == NULL) return left;\n    // right != NULL\n    if (left == NULL) return right;\n    if (left == SUCCESSFULLY_ENQUEUED) return right;\n    // left contains a task\n    if (right != SUCCESSFULLY_ENQUEUED) {\n        // both are valid tasks\n        internal::spawn_in_graph_arena(g, *left);\n        return right;\n    }\n    return left;\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\n\ntemplate < typename T > class async_msg;\n\nnamespace internal {\n\ntemplate < typename T > class async_storage;\n\ntemplate< typename T, typename = void >\nstruct async_helpers {\n    typedef async_msg<T> async_type;\n    typedef T filtered_type;\n\n    static const bool is_async_type = false;\n\n    static const void* to_void_ptr(const T& t) {\n        return static_cast<const void*>(&t);\n    }\n\n    static void* to_void_ptr(T& t) {\n        return static_cast<void*>(&t);\n    }\n\n    static const T& from_void_ptr(const void* p) {\n        return *static_cast<const T*>(p);\n    }\n\n    static T& from_void_ptr(void* p) {\n        return *static_cast<T*>(p);\n    }\n\n    static task* try_put_task_wrapper_impl(receiver<T>* const this_recv, const void *p, bool is_async) {\n        if (is_async) {\n            // This (T) is NOT async and incoming 'A<X> t' IS async\n            // Get data from async_msg\n            const async_msg<filtered_type>& msg = async_helpers< async_msg<filtered_type> >::from_void_ptr(p);\n            task* const new_task = msg.my_storage->subscribe(*this_recv, this_recv->graph_reference());\n            // finalize() must be called after subscribe() because set() can be called in finalize()\n            // and 'this_recv' client must be subscribed by this moment\n            msg.finalize();\n            return new_task;\n        }\n        else {\n            // Incoming 't' is NOT async\n            return this_recv->try_put_task(from_void_ptr(p));\n        }\n    }\n};\n\ntemplate< typename T >\nstruct async_helpers< T, typename std::enable_if< std::is_base_of<async_msg<typename T::async_msg_data_type>, T>::value >::type > {\n    typedef T async_type;\n    typedef typename T::async_msg_data_type filtered_type;\n\n    static const bool is_async_type = true;\n\n    // Receiver-classes use const interfaces\n    static const void* to_void_ptr(const T& t) {\n        return static_cast<const void*>(&static_cast<const async_msg<filtered_type>&>(t));\n    }\n\n    static void* to_void_ptr(T& t) {\n        return static_cast<void*>(&static_cast<async_msg<filtered_type>&>(t));\n    }\n\n    // Sender-classes use non-const interfaces\n    static const T& from_void_ptr(const void* p) {\n        return *static_cast<const T*>(static_cast<const async_msg<filtered_type>*>(p));\n    }\n\n    static T& from_void_ptr(void* p) {\n        return *static_cast<T*>(static_cast<async_msg<filtered_type>*>(p));\n    }\n\n    // Used in receiver<T> class\n    static task* try_put_task_wrapper_impl(receiver<T>* const this_recv, const void *p, bool is_async) {\n        if (is_async) {\n            // Both are async\n            return this_recv->try_put_task(from_void_ptr(p));\n        }\n        else {\n            // This (T) is async and incoming 'X t' is NOT async\n            // Create async_msg for X\n            const filtered_type& t = async_helpers<filtered_type>::from_void_ptr(p);\n            const T msg(t);\n            return this_recv->try_put_task(msg);\n        }\n    }\n};\n\nclass untyped_receiver;\n\nclass untyped_sender {\n    template< typename, typename > friend class internal::predecessor_cache;\n    template< typename, typename > friend class internal::reservable_predecessor_cache;\npublic:\n    //! The successor type for this node\n    typedef untyped_receiver successor_type;\n\n    virtual ~untyped_sender() {}\n\n    // NOTE: Following part of PUBLIC section is copy-paste from original sender<T> class\n\n    // TODO: Prevent untyped successor registration\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Releases the reserved item\n    virtual bool try_release( ) { return false; }\n\n    //! Consumes the reserved item\n    virtual bool try_consume( ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef internal::edge_container<successor_type> built_successors_type;\n    typedef built_successors_type::edge_list_type successor_list_type;\n    virtual built_successors_type &built_successors()                   = 0;\n    virtual void    internal_add_built_successor( successor_type & )    = 0;\n    virtual void    internal_delete_built_successor( successor_type & ) = 0;\n    virtual void    copy_successors( successor_list_type &)             = 0;\n    virtual size_t  successor_count()                                   = 0;\n#endif\nprotected:\n    //! Request an item from the sender\n    template< typename X >\n    bool try_get( X &t ) {\n        return try_get_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    //! Reserves an item in the sender\n    template< typename X >\n    bool try_reserve( X &t ) {\n        return try_reserve_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    virtual bool try_get_wrapper( void* p, bool is_async ) = 0;\n    virtual bool try_reserve_wrapper( void* p, bool is_async ) = 0;\n};\n\nclass untyped_receiver  {\n    template< typename, typename > friend class run_and_put_task;\n    template< typename > friend class limiter_node;\n\n    template< typename, typename > friend class internal::broadcast_cache;\n    template< typename, typename > friend class internal::round_robin_cache;\n    template< typename, typename > friend class internal::successor_cache;\n\n#if __TBB_PREVIEW_OPENCL_NODE\n    template< typename, typename > friend class proxy_dependency_receiver;\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\npublic:\n    //! The predecessor type for this node\n    typedef untyped_sender predecessor_type;\n\n    //! Destructor\n    virtual ~untyped_receiver() {}\n\n    //! Put an item to the receiver\n    template<typename X>\n    bool try_put(const X& t) {\n        task *res = try_put_task(t);\n        if (!res) return false;\n        if (res != SUCCESSFULLY_ENQUEUED) internal::spawn_in_graph_arena(graph_reference(), *res);\n        return true;\n    }\n\n    // NOTE: Following part of PUBLIC section is copy-paste from original receiver<T> class\n\n    // TODO: Prevent untyped predecessor registration\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef built_predecessors_type::edge_list_type predecessor_list_type;\n    virtual built_predecessors_type &built_predecessors()                  = 0;\n    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;\n    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;\n    virtual void   copy_predecessors( predecessor_list_type & )            = 0;\n    virtual size_t predecessor_count()                                     = 0;\n#endif\nprotected:\n    template<typename X>\n    task *try_put_task(const X& t) {\n        return try_put_task_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    virtual task* try_put_task_wrapper( const void* p, bool is_async ) = 0;\n\n    virtual graph& graph_reference() = 0;\n\n    // NOTE: Following part of PROTECTED and PRIVATE sections is copy-paste from original receiver<T> class\n\n    //! put receiver back in initial state\n    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;\n\n    virtual bool is_continue_receiver() { return false; }\n};\n\n} // namespace internal\n\n//! Pure virtual template class that defines a sender of messages of type T\ntemplate< typename T >\nclass sender : public internal::untyped_sender {\npublic:\n    //! The output type of this sender\n    typedef T output_type;\n\n    typedef typename internal::async_helpers<T>::filtered_type filtered_type;\n\n    //! Request an item from the sender\n    virtual bool try_get( T & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( T & ) { return false; }\n\nprotected:\n    virtual bool try_get_wrapper( void* p, bool is_async ) __TBB_override {\n        // Both async OR both are NOT async\n        if ( internal::async_helpers<T>::is_async_type == is_async ) {\n            return try_get( internal::async_helpers<T>::from_void_ptr(p) );\n        }\n        // Else: this (T) is async OR incoming 't' is async\n        __TBB_ASSERT(false, \"async_msg interface does not support 'pull' protocol in try_get()\");\n        return false;\n    }\n\n    virtual bool try_reserve_wrapper( void* p, bool is_async ) __TBB_override {\n        // Both async OR both are NOT async\n        if ( internal::async_helpers<T>::is_async_type == is_async ) {\n            return try_reserve( internal::async_helpers<T>::from_void_ptr(p) );\n        }\n        // Else: this (T) is async OR incoming 't' is async\n        __TBB_ASSERT(false, \"async_msg interface does not support 'pull' protocol in try_reserve()\");\n        return false;\n    }\n};  // class sender<T>\n\n//! Pure virtual template class that defines a receiver of messages of type T\ntemplate< typename T >\nclass receiver : public internal::untyped_receiver {\n    template< typename > friend class internal::async_storage;\n    template< typename, typename > friend struct internal::async_helpers;\npublic:\n    //! The input type of this receiver\n    typedef T input_type;\n\n    typedef typename internal::async_helpers<T>::filtered_type filtered_type;\n\n    //! Put an item to the receiver\n    bool try_put( const typename internal::async_helpers<T>::filtered_type& t ) {\n        return internal::untyped_receiver::try_put(t);\n    }\n\n    bool try_put( const typename internal::async_helpers<T>::async_type& t ) {\n        return internal::untyped_receiver::try_put(t);\n    }\n\nprotected:\n    virtual task* try_put_task_wrapper( const void *p, bool is_async ) __TBB_override {\n        return internal::async_helpers<T>::try_put_task_wrapper_impl(this, p, is_async);\n    }\n\n    //! Put item to successor; return task to run the successor if possible.\n    virtual task *try_put_task(const T& t) = 0;\n\n}; // class receiver<T>\n\n#else // __TBB_PREVIEW_ASYNC_MSG\n\n//! Pure virtual template class that defines a sender of messages of type T\ntemplate< typename T >\nclass sender {\npublic:\n    //! The output type of this sender\n    typedef T output_type;\n\n    //! The successor type for this node\n    typedef receiver<T> successor_type;\n\n    virtual ~sender() {}\n\n    // NOTE: Following part of PUBLIC section is partly copy-pasted in sender<T> under #if __TBB_PREVIEW_ASYNC_MSG\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Request an item from the sender\n    virtual bool try_get( T & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( T & ) { return false; }\n\n    //! Releases the reserved item\n    virtual bool try_release( ) { return false; }\n\n    //! Consumes the reserved item\n    virtual bool try_consume( ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    virtual built_successors_type &built_successors()                   = 0;\n    virtual void    internal_add_built_successor( successor_type & )    = 0;\n    virtual void    internal_delete_built_successor( successor_type & ) = 0;\n    virtual void    copy_successors( successor_list_type &)             = 0;\n    virtual size_t  successor_count()                                   = 0;\n#endif\n};  // class sender<T>\n\n//! Pure virtual template class that defines a receiver of messages of type T\ntemplate< typename T >\nclass receiver {\npublic:\n    //! The input type of this receiver\n    typedef T input_type;\n\n    //! The predecessor type for this node\n    typedef sender<T> predecessor_type;\n\n    //! Destructor\n    virtual ~receiver() {}\n\n    //! Put an item to the receiver\n    bool try_put( const T& t ) {\n        task *res = try_put_task(t);\n        if (!res) return false;\n        if (res != SUCCESSFULLY_ENQUEUED) internal::spawn_in_graph_arena(graph_reference(), *res);\n        return true;\n    }\n\n    //! put item to successor; return task to run the successor if possible.\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template< typename X, typename Y > friend class internal::broadcast_cache;\n    template< typename X, typename Y > friend class internal::round_robin_cache;\n    virtual task *try_put_task(const T& t) = 0;\n    virtual graph& graph_reference() = 0;\npublic:\n    // NOTE: Following part of PUBLIC and PROTECTED sections is copy-pasted in receiver<T> under #if __TBB_PREVIEW_ASYNC_MSG\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef typename built_predecessors_type::edge_list_type predecessor_list_type;\n    virtual built_predecessors_type &built_predecessors()                  = 0;\n    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;\n    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;\n    virtual void   copy_predecessors( predecessor_list_type & )            = 0;\n    virtual size_t predecessor_count()                                     = 0;\n#endif\n\nprotected:\n    //! put receiver back in initial state\n    template<typename U> friend class limiter_node;\n    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;\n\n    template<typename TT, typename M> friend class internal::successor_cache;\n    virtual bool is_continue_receiver() { return false; }\n\n#if __TBB_PREVIEW_OPENCL_NODE\n    template< typename, typename > friend class proxy_dependency_receiver;\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n}; // class receiver<T>\n\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n//! Base class for receivers of completion messages\n/** These receivers automatically reset, but cannot be explicitly waited on */\nclass continue_receiver : public receiver< continue_msg > {\npublic:\n\n    //! The input type\n    typedef continue_msg input_type;\n\n    //! The predecessor type for this node\n    typedef receiver<input_type>::predecessor_type predecessor_type;\n\n    //! Constructor\n    explicit continue_receiver( int number_of_predecessors = 0 ) {\n        my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;\n        my_current_count = 0;\n    }\n\n    //! Copy constructor\n    continue_receiver( const continue_receiver& src ) : receiver<continue_msg>() {\n        my_predecessor_count = my_initial_predecessor_count = src.my_initial_predecessor_count;\n        my_current_count = 0;\n    }\n\n    //! Increments the trigger threshold\n    bool register_predecessor( predecessor_type & ) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        ++my_predecessor_count;\n        return true;\n    }\n\n    //! Decrements the trigger threshold\n    /** Does not check to see if the removal of the predecessor now makes the current count\n        exceed the new threshold.  So removing a predecessor while the graph is active can cause\n        unexpected results. */\n    bool remove_predecessor( predecessor_type & ) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        --my_predecessor_count;\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef built_predecessors_type::edge_list_type predecessor_list_type;\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    void internal_add_built_predecessor( predecessor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.add_edge( s );\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.delete_edge(s);\n    }\n\n    void copy_predecessors( predecessor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    // execute body is supposed to be too small to create a task for.\n    task *try_put_task( const input_type & ) __TBB_override {\n        {\n            spin_mutex::scoped_lock l(my_mutex);\n            if ( ++my_current_count < my_predecessor_count )\n                return SUCCESSFULLY_ENQUEUED;\n            else\n                my_current_count = 0;\n        }\n        task * res = execute();\n        return res? res : SUCCESSFULLY_ENQUEUED;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // continue_receiver must contain its own built_predecessors because it does\n    // not have a node_cache.\n    built_predecessors_type my_built_predecessors;\n#endif\n    spin_mutex my_mutex;\n    int my_predecessor_count;\n    int my_current_count;\n    int my_initial_predecessor_count;\n    // the friend declaration in the base class did not eliminate the \"protected class\"\n    // error in gcc 4.1.2\n    template<typename U> friend class limiter_node;\n\n    void reset_receiver( reset_flags f ) __TBB_override {\n        my_current_count = 0;\n        if (f & rf_clear_edges) {\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n            my_predecessor_count = my_initial_predecessor_count;\n        }\n    }\n\n    //! Does whatever should happen when the threshold is reached\n    /** This should be very fast or else spawn a task.  This is\n        called while the sender is blocked in the try_put(). */\n    virtual task * execute() = 0;\n    template<typename TT, typename M> friend class internal::successor_cache;\n    bool is_continue_receiver() __TBB_override { return true; }\n\n}; // class continue_receiver\n\n}  // interfaceX\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    K key_from_message( const T &t ) {\n        return t.key();\n    }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    using interface10::sender;\n    using interface10::receiver;\n    using interface10::continue_receiver;\n}  // flow\n}  // tbb\n\n#include \"internal/_flow_graph_trace_impl.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n#include \"internal/_flow_graph_body_impl.h\"\n#include \"internal/_flow_graph_cache_impl.h\"\n#include \"internal/_flow_graph_types_impl.h\"\n#if __TBB_PREVIEW_ASYNC_MSG\n#include \"internal/_flow_graph_async_msg_impl.h\"\n#endif\nusing namespace internal::graph_policy_namespace;\n\ntemplate <typename C, typename N>\ngraph_iterator<C,N>::graph_iterator(C *g, bool begin) : my_graph(g), current_node(NULL)\n{\n    if (begin) current_node = my_graph->my_nodes;\n    //else it is an end iterator by default\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::reference graph_iterator<C,N>::operator*() const {\n    __TBB_ASSERT(current_node, \"graph_iterator at end\");\n    return *operator->();\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->() const {\n    return current_node;\n}\n\ntemplate <typename C, typename N>\nvoid graph_iterator<C,N>::internal_forward() {\n    if (current_node) current_node = current_node->next;\n}\n\n//! Constructs a graph with isolated task_group_context\ninline graph::graph() : my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {\n    prepare_task_arena();\n    own_context = true;\n    cancelled = false;\n    caught_exception = false;\n    my_context = new task_group_context(tbb::internal::FLOW_TASKS);\n    my_root_task = (new (task::allocate_root(*my_context)) empty_task);\n    my_root_task->set_ref_count(1);\n    tbb::internal::fgt_graph(this);\n    my_is_active = true;\n}\n\ninline graph::graph(task_group_context& use_this_context) :\n    my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {\n    prepare_task_arena();\n    own_context = false;\n    my_root_task = (new (task::allocate_root(*my_context)) empty_task);\n    my_root_task->set_ref_count(1);\n    tbb::internal::fgt_graph(this);\n    my_is_active = true;\n}\n\ninline graph::~graph() {\n    wait_for_all();\n    my_root_task->set_ref_count(0);\n    tbb::task::destroy(*my_root_task);\n    if (own_context) delete my_context;\n    delete my_task_arena;\n}\n\ninline void graph::reserve_wait() {\n    if (my_root_task) {\n        my_root_task->increment_ref_count();\n        tbb::internal::fgt_reserve_wait(this);\n    }\n}\n\ninline void graph::release_wait() {\n    if (my_root_task) {\n        tbb::internal::fgt_release_wait(this);\n        my_root_task->decrement_ref_count();\n    }\n}\n\ninline void graph::register_node(graph_node *n) {\n    n->next = NULL;\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        n->prev = my_nodes_last;\n        if (my_nodes_last) my_nodes_last->next = n;\n        my_nodes_last = n;\n        if (!my_nodes) my_nodes = n;\n    }\n}\n\ninline void graph::remove_node(graph_node *n) {\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        __TBB_ASSERT(my_nodes && my_nodes_last, \"graph::remove_node: Error: no registered nodes\");\n        if (n->prev) n->prev->next = n->next;\n        if (n->next) n->next->prev = n->prev;\n        if (my_nodes_last == n) my_nodes_last = n->prev;\n        if (my_nodes == n) my_nodes = n->next;\n    }\n    n->prev = n->next = NULL;\n}\n\ninline void graph::reset( reset_flags f ) {\n    // reset context\n    internal::deactivate_graph(*this);\n\n    if(my_context) my_context->reset();\n    cancelled = false;\n    caught_exception = false;\n    // reset all the nodes comprising the graph\n    for(iterator ii = begin(); ii != end(); ++ii) {\n        graph_node *my_p = &(*ii);\n        my_p->reset_node(f);\n    }\n    // Reattach the arena. Might be useful to run the graph in a particular task_arena\n    // while not limiting graph lifetime to a single task_arena::execute() call.\n    prepare_task_arena( /*reinit=*/true );\n    internal::activate_graph(*this);\n    // now spawn the tasks necessary to start the graph\n    for(task_list_type::iterator rti = my_reset_task_list.begin(); rti != my_reset_task_list.end(); ++rti) {\n        my_task_arena->execute(graph::spawn_functor(*(*rti)));\n    }\n    my_reset_task_list.clear();\n}\n\ninline graph::iterator graph::begin() { return iterator(this, true); }\n\ninline graph::iterator graph::end() { return iterator(this, false); }\n\ninline graph::const_iterator graph::begin() const { return const_iterator(this, true); }\n\ninline graph::const_iterator graph::end() const { return const_iterator(this, false); }\n\ninline graph::const_iterator graph::cbegin() const { return const_iterator(this, true); }\n\ninline graph::const_iterator graph::cend() const { return const_iterator(this, false); }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\ninline void graph::set_name(const char *name) {\n    tbb::internal::fgt_graph_desc(this, name);\n}\n#endif\n\ninline graph_node::graph_node(graph& g) : my_graph(g) {\n    my_graph.register_node(this);\n}\n\ninline graph_node::~graph_node() {\n    my_graph.remove_node(this);\n}\n\n#include \"internal/_flow_graph_node_impl.h\"\n\n//! An executable node that acts as a source, i.e. it has no predecessors\ntemplate < typename Output >\nclass source_node : public graph_node, public sender< Output > {\npublic:\n    //! The type of the output message, which is complete\n    typedef Output output_type;\n\n    //! The type of successors of this node\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //Source node has no input type\n    typedef null_type input_type;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    //! Constructor for a node with a successor\n    template< typename Body >\n    source_node( graph &g, Body body, bool is_active = true )\n        : graph_node(g), my_active(is_active), init_my_active(is_active),\n        my_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_init_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    source_node( const source_node& src ) :\n        graph_node(src.my_graph), sender<Output>(),\n        my_active(src.init_my_active),\n        init_my_active(src.init_my_active), my_body( src.my_init_body->clone() ), my_init_body(src.my_init_body->clone() ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! The destructor\n    ~source_node() { delete my_body; delete my_init_body; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Add a new successor to this node\n    bool register_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.register_successor(r);\n        if ( my_active )\n            spawn_put();\n        return true;\n    }\n\n    //! Removes a successor from this node\n    bool remove_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor( successor_type &r) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor( successor_type &r) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    size_t successor_count() __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_successors.copy_successors(v);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Request an item from the node\n    bool try_get( output_type &v ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved )\n            return false;\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_has_cached_item = false;\n            return true;\n        }\n        // we've been asked to provide an item, but we have none.  enqueue a task to\n        // provide one.\n        spawn_put();\n        return false;\n    }\n\n    //! Reserves an item.\n    bool try_reserve( output_type &v ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    //! Release a reserved item.\n    /** true = item has been released and so remains in sender, dest must request or reserve future items */\n    bool try_release( ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"releasing non-existent reservation\" );\n        my_reserved = false;\n        if(!my_successors.empty())\n            spawn_put();\n        return true;\n    }\n\n    //! Consumes a reserved item\n    bool try_consume( ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"consuming non-existent reservation\" );\n        my_reserved = false;\n        my_has_cached_item = false;\n        if ( !my_successors.empty() ) {\n            spawn_put();\n        }\n        return true;\n    }\n\n    //! Activates a node that was created in the inactive state\n    void activate() {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_active = true;\n        if (!my_successors.empty())\n            spawn_put();\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        internal::source_body<output_type> &body_ref = *this->my_body;\n        return dynamic_cast< internal::source_body_leaf<output_type, Body> & >(body_ref).get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_successors.built_successors().sender_extract(*this);   // removes \"my_owner\" == this from each successor\n        my_active = init_my_active;\n        my_reserved = false;\n        if(my_has_cached_item) my_has_cached_item = false;\n    }\n#endif\n\nprotected:\n\n    //! resets the source_node to its initial state\n    void reset_node( reset_flags f) __TBB_override {\n        my_active = init_my_active;\n        my_reserved =false;\n        if(my_has_cached_item) {\n            my_has_cached_item = false;\n        }\n        if(f & rf_clear_edges) my_successors.clear();\n        if(f & rf_reset_bodies) {\n            internal::source_body<output_type> *tmp = my_init_body->clone();\n            delete my_body;\n            my_body = tmp;\n        }\n        if(my_active)\n            internal::add_task_to_graph_reset_list(this->my_graph, create_put_task());\n    }\n\nprivate:\n    spin_mutex my_mutex;\n    bool my_active;\n    bool init_my_active;\n    internal::source_body<output_type> *my_body;\n    internal::source_body<output_type> *my_init_body;\n    internal::broadcast_cache< output_type > my_successors;\n    bool my_reserved;\n    bool my_has_cached_item;\n    output_type my_cached_item;\n\n    // used by apply_body_bypass, can invoke body of node.\n    bool try_reserve_apply_body(output_type &v) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n        if ( !my_has_cached_item ) {\n            tbb::internal::fgt_begin_body( my_body );\n            bool r = (*my_body)(my_cached_item);\n            tbb::internal::fgt_end_body( my_body );\n            if (r) {\n                my_has_cached_item = true;\n            }\n        }\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    // when resetting, and if the source_node was created with my_active == true, then\n    // when we reset the node we must store a task to run the node, and spawn it only\n    // after the reset is complete and is_active() is again true.  This is why we don't\n    // test for is_active() here.\n    task* create_put_task() {\n        return ( new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal:: source_task_bypass < source_node< output_type > >( *this ) );\n    }\n\n    //! Spawns a task that applies the body\n    void spawn_put( ) {\n        if(internal::is_graph_active(this->my_graph)) {\n            internal::spawn_in_graph_arena(this->my_graph, *create_put_task());\n        }\n    }\n\n    friend class internal::source_task_bypass< source_node< output_type > >;\n    //! Applies the body.  Returning SUCCESSFULLY_ENQUEUED okay; forward_task_bypass will handle it.\n    task * apply_body_bypass( ) {\n        output_type v;\n        if ( !try_reserve_apply_body(v) )\n            return NULL;\n\n        task *last_task = my_successors.try_put_task(v);\n        if ( last_task )\n            try_consume();\n        else\n            try_release();\n        return last_task;\n    }\n};  // class source_node\n\n//! Implements a function node that supports Input -> Output\ntemplate < typename Input, typename Output = continue_msg, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass function_node : public graph_node, public internal::function_input<Input,Output,Policy,Allocator>, public internal::function_output<Output> {\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef internal::function_input<input_type,output_type,Policy,Allocator> input_impl_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\n    typedef internal::function_output<output_type> fOutput_type;\n    typedef typename input_impl_type::predecessor_type predecessor_type;\n    typedef typename fOutput_type::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename input_impl_type::predecessor_list_type predecessor_list_type;\n    typedef typename fOutput_type::successor_list_type successor_list_type;\n#endif\n    using input_impl_type::my_predecessors;\n\n    //! Constructor\n    // input_queue_type is allocated here, but destroyed in the function_input_base.\n    // TODO: pass the graph_buffer_policy to the function_input_base so it can all\n    // be done in one place.  This would be an interface-breaking change.\n    template< typename Body >\n    function_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), input_impl_type(g, concurrency, body) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    function_node( const function_node& src ) :\n        graph_node(src.my_graph),\n        input_impl_type(src),\n        fOutput_type() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using input_impl_type::try_put_task;\n\n    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }\n\n    void reset_node(reset_flags f) __TBB_override {\n        input_impl_type::reset_function_input(f);\n        // TODO: use clear() instead.\n        if(f & rf_clear_edges) {\n            successors().clear();\n            my_predecessors.clear();\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"function_node successors not empty\");\n        __TBB_ASSERT(this->my_predecessors.empty(), \"function_node predecessors not empty\");\n    }\n\n};  // class function_node\n\n//! implements a function node that supports Input -> (set of outputs)\n// Output is a tuple of output types.\ntemplate < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass multifunction_node :\n    public graph_node,\n    public internal::multifunction_input\n    <\n        Input,\n        typename internal::wrap_tuple_elements<\n            tbb::flow::tuple_size<Output>::value,  // #elements in tuple\n            internal::multifunction_output,  // wrap this around each element\n            Output // the tuple providing the types\n        >::type,\n        Policy,\n        Allocator\n    > {\nprotected:\n    static const int N = tbb::flow::tuple_size<Output>::value;\npublic:\n    typedef Input input_type;\n    typedef null_type output_type;\n    typedef typename internal::wrap_tuple_elements<N,internal::multifunction_output, Output>::type output_ports_type;\n    typedef internal::multifunction_input<input_type, output_ports_type, Policy, Allocator> input_impl_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\nprivate:\n    typedef typename internal::multifunction_input<input_type, output_ports_type, Policy, Allocator> base_type;\n    using input_impl_type::my_predecessors;\npublic:\n    template<typename Body>\n    multifunction_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), base_type(g,concurrency, body) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    multifunction_node( const multifunction_node &other) :\n        graph_node(other.my_graph), base_type(other) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        base_type::extract();\n    }\n#endif\n    // all the guts are in multifunction_input...\nprotected:\n    void reset_node(reset_flags f) __TBB_override { base_type::reset(f); }\n};  // multifunction_node\n\n//! split_node: accepts a tuple as input, forwards each element of the tuple to its\n//  successors.  The node has unlimited concurrency, so it does not reject inputs.\ntemplate<typename TupleType, typename Allocator=cache_aligned_allocator<TupleType> >\nclass split_node : public graph_node, public receiver<TupleType> {\n    static const int N = tbb::flow::tuple_size<TupleType>::value;\n    typedef receiver<TupleType> base_type;\npublic:\n    typedef TupleType input_type;\n    typedef Allocator allocator_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename base_type::predecessor_type predecessor_type;\n    typedef typename base_type::predecessor_list_type predecessor_list_type;\n    typedef internal::predecessor_cache<input_type, null_mutex > predecessor_cache_type;\n    typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;\n#endif\n\n    typedef typename internal::wrap_tuple_elements<\n            N,  // #elements in tuple\n            internal::multifunction_output,  // wrap this around each element\n            TupleType // the tuple providing the types\n        >::type  output_ports_type;\n\n    explicit split_node(graph &g) : graph_node(g)\n    {\n        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,\n            static_cast<receiver<input_type> *>(this), this->output_ports());\n    }\n    split_node( const split_node & other) : graph_node(other.my_graph), base_type(other)\n    {\n        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,\n            static_cast<receiver<input_type> *>(this), this->output_ports());\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n    output_ports_type &output_ports() { return my_output_ports; }\n\nprotected:\n    task *try_put_task(const TupleType& t) __TBB_override {\n        // Sending split messages in parallel is not justified, as overheads would prevail.\n        // Also, we do not have successors here. So we just tell the task returned here is successful.\n        return internal::emit_element<N>::emit_this(this->my_graph, t, output_ports());\n    }\n    void reset_node(reset_flags f) __TBB_override {\n        if (f & rf_clear_edges)\n            internal::clear_element<N>::clear_this(my_output_ports);\n\n        __TBB_ASSERT(!(f & rf_clear_edges) || internal::clear_element<N>::this_empty(my_output_ports), \"split_node reset failed\");\n    }\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nprivate: //! split_node doesn't use this \"predecessors\" functionality; so, we have \"dummies\" here;\n    void extract() __TBB_override {}\n\n    //! Adds to list of predecessors added by make_edge\n    void internal_add_built_predecessor(predecessor_type&) __TBB_override {}\n\n    //! removes from to list of predecessors (used by remove_edge)\n    void internal_delete_built_predecessor(predecessor_type&) __TBB_override {}\n\n    size_t predecessor_count() __TBB_override { return 0; }\n\n    void copy_predecessors(predecessor_list_type&) __TBB_override {}\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_predessors; }\n\n    //! dummy member\n    built_predecessors_type my_predessors;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprivate:\n    output_ports_type my_output_ports;\n};\n\n//! Implements an executable node that supports continue_msg -> Output\ntemplate <typename Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n        , typename Policy = internal::Policy<void>\n#endif\n         >\nclass continue_node : public graph_node, public internal::continue_input<Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                             , Policy\n#endif\n                             >,\n                      public internal::function_output<Output> {\npublic:\n    typedef continue_msg input_type;\n    typedef Output output_type;\n    typedef internal::continue_input<Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                                    , Policy\n#endif\n                                    > input_impl_type;\n\n    typedef internal::function_output<output_type> fOutput_type;\n    typedef typename input_impl_type::predecessor_type predecessor_type;\n    typedef typename fOutput_type::successor_type successor_type;\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, Body body ) :\n        graph_node(g), input_impl_type( g, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, int number_of_predecessors, Body body ) :\n        graph_node(g), input_impl_type( g, number_of_predecessors, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    continue_node( const continue_node& src ) :\n        graph_node(src.my_graph), input_impl_type(src),\n        internal::function_output<Output>() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        input_impl_type::my_built_predecessors.receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using input_impl_type::try_put_task;\n    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }\n\n    void reset_node(reset_flags f) __TBB_override {\n        input_impl_type::reset_receiver(f);\n        if(f & rf_clear_edges)successors().clear();\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"continue_node not reset\");\n    }\n};  // continue_node\n\ntemplate< typename T >\nclass overwrite_node : public graph_node, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    explicit overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor; doesn't take anything from src; default won't work\n    overwrite_node( const overwrite_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(), my_buffer_is_valid(false)\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    ~overwrite_node() {}\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n   bool register_successor( successor_type &s ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        if (my_buffer_is_valid && internal::is_graph_active( my_graph )) {\n            // We have a valid value that must be forwarded immediately.\n            bool ret = s.try_put( my_buffer );\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n            if ( ret ) {\n                // We add the successor that accepted our put\n                my_successors.register_successor( s );\n            } else {\n                // In case of reservation a race between the moment of reservation and register_successor can appear,\n                // because failed reserve does not mean that register_successor is not ready to put a message immediately.\n                // We have some sort of infinite loop: reserving node tries to set pull state for the edge,\n                // but overwrite_node tries to return push state back. That is why we have to break this loop with task creation.\n                task *rtask = new ( task::allocate_additional_child_of( *( my_graph.root_task() ) ) )\n                    register_predecessor_task( *this, s );\n                internal::spawn_in_graph_arena( my_graph, *rtask );\n            }\n#else\n            if ( ret || !s.register_predecessor( *this  ) ) {\n                // We add the successor: it accepted our put or it rejected it but won't let us become a predecessor\n                my_successors.register_successor( s );\n            } else {\n                // We don't add the successor: it rejected our put and we became its predecessor instead\n                return false;\n            }\n#endif\n        } else {\n            // No valid value yet, just add as successor\n            my_successors.register_successor( s );\n        }\n        return true;\n    }\n\n    bool remove_successor( successor_type &s ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.remove_successor(s);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n    built_successors_type   &built_successors()   __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor( successor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_add_built_successor(s);\n    }\n\n    void internal_delete_built_successor( successor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_delete_built_successor(s);\n    }\n\n    size_t successor_count() __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.copy_successors(v);\n    }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.add_edge(p);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.delete_edge(p);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_built_predecessors.edge_count();\n    }\n\n    void copy_predecessors( predecessor_list_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.copy_edges(v);\n    }\n\n    void extract() __TBB_override {\n        my_buffer_is_valid = false;\n        built_successors().sender_extract(*this);\n        built_predecessors().receiver_extract(*this);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    bool try_get( input_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        if ( my_buffer_is_valid ) {\n            v = my_buffer;\n            return true;\n        }\n        return false;\n    }\n\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n    //! Reserves an item\n    bool try_reserve( T &v ) __TBB_override {\n        return try_get(v);\n    }\n\n    //! Releases the reserved item\n    bool try_release() __TBB_override { return true; }\n\n    //! Consumes the reserved item\n    bool try_consume() __TBB_override { return true; }\n#endif\n\n    bool is_valid() {\n       spin_mutex::scoped_lock l( my_mutex );\n       return my_buffer_is_valid;\n    }\n\n    void clear() {\n       spin_mutex::scoped_lock l( my_mutex );\n       my_buffer_is_valid = false;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    task * try_put_task( const input_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return try_put_task_impl(v);\n    }\n\n    task * try_put_task_impl(const input_type &v) {\n        my_buffer = v;\n        my_buffer_is_valid = true;\n        task * rtask = my_successors.try_put_task(v);\n        if (!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n        return rtask;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n    //! Breaks an infinite loop between the node reservation and register_successor call\n    struct register_predecessor_task : public task {\n        register_predecessor_task(sender<T>& owner, receiver<T>& succ) :\n            o(owner), s(succ) {};\n\n        tbb::task* execute() __TBB_override {\n            if (!s.register_predecessor(o)) {\n                o.register_successor(s);\n            }\n            return NULL;\n        }\n\n        sender<T>& o;\n        receiver<T>& s;\n    };\n#endif\n\n    spin_mutex my_mutex;\n    internal::broadcast_cache< input_type, null_rw_mutex > my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n    input_type my_buffer;\n    bool my_buffer_is_valid;\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n\n    void reset_node( reset_flags f) __TBB_override {\n        my_buffer_is_valid = false;\n       if (f&rf_clear_edges) {\n           my_successors.clear();\n       }\n    }\n};  // overwrite_node\n\ntemplate< typename T >\nclass write_once_node : public overwrite_node<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef overwrite_node<T> base_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit write_once_node(graph& g) : base_type(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor: call base class copy constructor\n    write_once_node( const write_once_node& src ) : base_type(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    task *try_put_task( const T &v ) __TBB_override {\n        spin_mutex::scoped_lock l( this->my_mutex );\n        return this->my_buffer_is_valid ? NULL : this->try_put_task_impl(v);\n    }\n};\n\n//! Forwards messages of type T to all successors\ntemplate <typename T>\nclass broadcast_node : public graph_node, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprivate:\n    internal::broadcast_cache<input_type> my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n    spin_mutex pred_mutex;  // serialize accesses on edge_container\n#endif\npublic:\n\n    explicit broadcast_node(graph& g) : graph_node(g) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    // Copy constructor\n    broadcast_node( const broadcast_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>()\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Adds a successor\n    bool register_successor( successor_type &r ) __TBB_override {\n        my_successors.register_successor( r );\n        return true;\n    }\n\n    //! Removes s as a successor\n    bool remove_successor( successor_type &r ) __TBB_override {\n        my_successors.remove_successor( r );\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor(successor_type &r) __TBB_override {\n        my_successors.internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor(successor_type &r) __TBB_override {\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    size_t successor_count() __TBB_override {\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        my_successors.copy_successors(v);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.add_edge(p);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.delete_edge(p);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n    void copy_predecessors(predecessor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    void extract() __TBB_override {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! build a task to run the successor if possible.  Default is old behavior.\n    task *try_put_task(const T& t) __TBB_override {\n        task *new_task = my_successors.try_put_task(t);\n        if (!new_task) new_task = SUCCESSFULLY_ENQUEUED;\n        return new_task;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n\n    void reset_node(reset_flags f) __TBB_override {\n        if (f&rf_clear_edges) {\n           my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           my_built_predecessors.clear();\n#endif\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || my_successors.empty(), \"Error resetting broadcast_node\");\n    }\n};  // broadcast_node\n\n//! Forwards messages in arbitrary order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass buffer_node : public graph_node, public internal::reservable_item_buffer<T, A>, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n    typedef buffer_node<T, A> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprotected:\n    typedef size_t size_type;\n    internal::round_robin_cache< T, null_rw_mutex > my_successors;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n\n    friend class internal::forward_task_bypass< buffer_node< T, A > >;\n\n    enum op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        , add_blt_succ, del_blt_succ,\n        add_blt_pred, del_blt_pred,\n        blt_succ_cnt, blt_pred_cnt,\n        blt_succ_cpy, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n    };\n\n    // implements the aggregator_operation concept\n    class buffer_operation : public internal::aggregated_operation< buffer_operation > {\n    public:\n        char type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        task * ltask;\n        union {\n            input_type *elem;\n            successor_type *r;\n            predecessor_type *p;\n            size_t cnt_val;\n            successor_list_type *svec;\n            predecessor_list_type *pvec;\n        };\n#else\n        T *elem;\n        task * ltask;\n        successor_type *r;\n#endif\n        buffer_operation(const T& e, op_type t) : type(char(t))\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                                                  , ltask(NULL), elem(const_cast<T*>(&e))\n#else\n                                                  , elem(const_cast<T*>(&e)) , ltask(NULL)\n#endif\n        {}\n        buffer_operation(op_type t) : type(char(t)),  ltask(NULL) {}\n    };\n\n    bool forwarder_busy;\n    typedef internal::aggregating_functor<class_type, buffer_operation> handler_type;\n    friend class internal::aggregating_functor<class_type, buffer_operation>;\n    internal::aggregator< handler_type, buffer_operation> my_aggregator;\n\n    virtual void handle_operations(buffer_operation *op_list) {\n        handle_operations_impl(op_list, this);\n    }\n\n    template<typename derived_type>\n    void handle_operations_impl(buffer_operation *op_list, derived_type* derived) {\n        __TBB_ASSERT(static_cast<class_type*>(derived) == this, \"'this' is not a base class for derived\");\n\n        buffer_operation *tmp = NULL;\n        bool try_forwarding = false;\n        while (op_list) {\n            tmp = op_list;\n            op_list = op_list->next;\n            switch (tmp->type) {\n            case reg_succ: internal_reg_succ(tmp); try_forwarding = true; break;\n            case rem_succ: internal_rem_succ(tmp); break;\n            case req_item: internal_pop(tmp); break;\n            case res_item: internal_reserve(tmp); break;\n            case rel_res:  internal_release(tmp); try_forwarding = true; break;\n            case con_res:  internal_consume(tmp); try_forwarding = true; break;\n            case put_item: try_forwarding = internal_push(tmp); break;\n            case try_fwd_task: internal_forward_task(tmp); break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            // edge recording\n            case add_blt_succ: internal_add_built_succ(tmp); break;\n            case del_blt_succ: internal_del_built_succ(tmp); break;\n            case add_blt_pred: internal_add_built_pred(tmp); break;\n            case del_blt_pred: internal_del_built_pred(tmp); break;\n            case blt_succ_cnt: internal_succ_cnt(tmp); break;\n            case blt_pred_cnt: internal_pred_cnt(tmp); break;\n            case blt_succ_cpy: internal_copy_succs(tmp); break;\n            case blt_pred_cpy: internal_copy_preds(tmp); break;\n#endif\n            }\n        }\n\n        derived->order();\n\n        if (try_forwarding && !forwarder_busy) {\n            if(internal::is_graph_active(this->my_graph)) {\n                forwarder_busy = true;\n                task *new_task = new(task::allocate_additional_child_of(*(this->my_graph.root_task()))) internal::\n                        forward_task_bypass\n                        < buffer_node<input_type, A> >(*this);\n                // tmp should point to the last item handled by the aggregator.  This is the operation\n                // the handling thread enqueued.  So modifying that record will be okay.\n                // workaround for icc bug\n                tbb::task *z = tmp->ltask;\n                graph &g = this->my_graph;\n                tmp->ltask = combine_tasks(g, z, new_task);  // in case the op generated a task\n            }\n        }\n    }  // handle_operations\n\n    inline task *grab_forwarding_task( buffer_operation &op_data) {\n        return op_data.ltask;\n    }\n\n    inline bool enqueue_forwarding_task(buffer_operation &op_data) {\n        task *ft = grab_forwarding_task(op_data);\n        if(ft) {\n            internal::spawn_in_graph_arena(graph_reference(), *ft);\n            return true;\n        }\n        return false;\n    }\n\n    //! This is executed by an enqueued task, the \"forwarder\"\n    virtual task *forward_task() {\n        buffer_operation op_data(try_fwd_task);\n        task *last_task = NULL;\n        do {\n            op_data.status = internal::WAIT;\n            op_data.ltask = NULL;\n            my_aggregator.execute(&op_data);\n\n            // workaround for icc bug\n            tbb::task *xtask = op_data.ltask;\n            graph& g = this->my_graph;\n            last_task = combine_tasks(g, last_task, xtask);\n        } while (op_data.status ==internal::SUCCEEDED);\n        return last_task;\n    }\n\n    //! Register successor\n    virtual void internal_reg_succ(buffer_operation *op) {\n        my_successors.register_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    //! Remove successor\n    virtual void internal_rem_succ(buffer_operation *op) {\n        my_successors.remove_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    virtual void internal_add_built_succ(buffer_operation *op) {\n        my_successors.internal_add_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_del_built_succ(buffer_operation *op) {\n        my_successors.internal_delete_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    virtual void internal_add_built_pred(buffer_operation *op) {\n        my_built_predecessors.add_edge(*(op->p));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_del_built_pred(buffer_operation *op) {\n        my_built_predecessors.delete_edge(*(op->p));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_succ_cnt(buffer_operation *op) {\n        op->cnt_val = my_successors.successor_count();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_pred_cnt(buffer_operation *op) {\n        op->cnt_val = my_built_predecessors.edge_count();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_copy_succs(buffer_operation *op) {\n        my_successors.copy_successors(*(op->svec));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_copy_preds(buffer_operation *op) {\n        my_built_predecessors.copy_edges(*(op->pvec));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprivate:\n    void order() {}\n\n    bool is_item_valid() {\n        return this->my_item_valid(this->my_tail - 1);\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task *new_task = my_successors.try_put_task(this->back());\n        if (new_task) {\n            // workaround for icc bug\n            graph& g = this->my_graph;\n            last_task = combine_tasks(g, last_task, new_task);\n            this->destroy_back();\n        }\n    }\n\nprotected:\n    //! Tries to forward valid items to successors\n    virtual void internal_forward_task(buffer_operation *op) {\n        internal_forward_task_impl(op, this);\n    }\n\n    template<typename derived_type>\n    void internal_forward_task_impl(buffer_operation *op, derived_type* derived) {\n        __TBB_ASSERT(static_cast<class_type*>(derived) == this, \"'this' is not a base class for derived\");\n\n        if (this->my_reserved || !derived->is_item_valid()) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            this->forwarder_busy = false;\n            return;\n        }\n        // Try forwarding, giving each successor a chance\n        task * last_task = NULL;\n        size_type counter = my_successors.size();\n        for (; counter > 0 && derived->is_item_valid(); --counter)\n            derived->try_put_and_add_task(last_task);\n\n        op->ltask = last_task;  // return task\n        if (last_task && !counter) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            forwarder_busy = false;\n        }\n    }\n\n    virtual bool internal_push(buffer_operation *op) {\n        this->push_back(*(op->elem));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        return true;\n    }\n\n    virtual void internal_pop(buffer_operation *op) {\n        if(this->pop_back(*(op->elem))) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n    }\n\n    virtual void internal_reserve(buffer_operation *op) {\n        if(this->reserve_front(*(op->elem))) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n    }\n\n    virtual void internal_consume(buffer_operation *op) {\n        this->consume_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_release(buffer_operation *op) {\n        this->release_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\npublic:\n    //! Constructor\n    explicit buffer_node( graph &g ) : graph_node(g), internal::reservable_item_buffer<T>(),\n        forwarder_busy(false) {\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    buffer_node( const buffer_node& src ) : graph_node(src.my_graph),\n        internal::reservable_item_buffer<T>(), receiver<T>(), sender<T>() {\n        forwarder_busy = false;\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //\n    // message sender implementation\n    //\n\n    //! Adds a new successor.\n    /** Adds successor r to the list of successors; may forward tasks.  */\n    bool register_successor( successor_type &r ) __TBB_override {\n        buffer_operation op_data(reg_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void internal_add_built_successor( successor_type &r) __TBB_override {\n        buffer_operation op_data(add_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_delete_built_successor( successor_type &r) __TBB_override {\n        buffer_operation op_data(del_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        buffer_operation op_data(add_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        buffer_operation op_data(del_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        buffer_operation op_data(blt_pred_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    size_t successor_count() __TBB_override {\n        buffer_operation op_data(blt_succ_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    void copy_predecessors( predecessor_list_type &v ) __TBB_override {\n        buffer_operation op_data(blt_pred_cpy);\n        op_data.pvec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n    void copy_successors( successor_list_type &v ) __TBB_override {\n        buffer_operation op_data(blt_succ_cpy);\n        op_data.svec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n#endif\n\n    //! Removes a successor.\n    /** Removes successor r from the list of successors.\n        It also calls r.remove_predecessor(*this) to remove this node as a predecessor. */\n    bool remove_successor( successor_type &r ) __TBB_override {\n        r.remove_predecessor(*this);\n        buffer_operation op_data(rem_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        // even though this operation does not cause a forward, if we are the handler, and\n        // a forward is scheduled, we may be the first to reach this point after the aggregator,\n        // and so should check for the task.\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Request an item from the buffer_node\n    /**  true = v contains the returned item<BR>\n         false = no item has been returned */\n    bool try_get( T &v ) __TBB_override {\n        buffer_operation op_data(req_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==internal::SUCCEEDED);\n    }\n\n    //! Reserves an item.\n    /**  false = no item can be reserved<BR>\n         true = an item is reserved */\n    bool try_reserve( T &v ) __TBB_override {\n        buffer_operation op_data(res_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==internal::SUCCEEDED);\n    }\n\n    //! Release a reserved item.\n    /**  true = item has been released and so remains in sender */\n    bool try_release() __TBB_override {\n        buffer_operation op_data(rel_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Consumes a reserved item.\n    /** true = item is removed from sender and reservation removed */\n    bool try_consume() __TBB_override {\n        buffer_operation op_data(con_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! receive an item, return a task *if possible\n    task *try_put_task(const T &t) __TBB_override {\n        buffer_operation op_data(t, put_item);\n        my_aggregator.execute(&op_data);\n        task *ft = grab_forwarding_task(op_data);\n        // sequencer_nodes can return failure (if an item has been previously inserted)\n        // We have to spawn the returned task if our own operation fails.\n\n        if(ft && op_data.status ==internal::FAILED) {\n            // we haven't succeeded queueing the item, but for some reason the\n            // call returned a task (if another request resulted in a successful\n            // forward this could happen.)  Queue the task and reset the pointer.\n            internal::spawn_in_graph_arena(graph_reference(), *ft); ft = NULL;\n        }\n        else if(!ft && op_data.status ==internal::SUCCEEDED) {\n            ft = SUCCESSFULLY_ENQUEUED;\n        }\n        return ft;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override { }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\npublic:\n    void extract() __TBB_override {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    void reset_node( reset_flags f) __TBB_override {\n        internal::reservable_item_buffer<T, A>::reset();\n        // TODO: just clear structures\n        if (f&rf_clear_edges) {\n            my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n        }\n        forwarder_busy = false;\n    }\n};  // buffer_node\n\n//! Forwards messages in FIFO order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass queue_node : public buffer_node<T, A> {\nprotected:\n    typedef buffer_node<T, A> base_type;\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::buffer_operation queue_operation;\n    typedef queue_node class_type;\n\nprivate:\n    template<typename, typename> friend class buffer_node;\n\n    bool is_item_valid() {\n        return this->my_item_valid(this->my_head);\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task *new_task = this->my_successors.try_put_task(this->front());\n        if (new_task) {\n            // workaround for icc bug\n            graph& graph_ref = this->graph_reference();\n            last_task = combine_tasks(graph_ref, last_task, new_task);\n            this->destroy_front();\n        }\n    }\n\nprotected:\n    void internal_forward_task(queue_operation *op) __TBB_override {\n        this->internal_forward_task_impl(op, this);\n    }\n\n    void internal_pop(queue_operation *op) __TBB_override {\n        if ( this->my_reserved || !this->my_item_valid(this->my_head)){\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n        else {\n            this->pop_front(*(op->elem));\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n    }\n    void internal_reserve(queue_operation *op) __TBB_override {\n        if (this->my_reserved || !this->my_item_valid(this->my_head)) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n        else {\n            this->reserve_front(*(op->elem));\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n    }\n    void internal_consume(queue_operation *op) __TBB_override {\n        this->consume_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit queue_node( graph &g ) : base_type(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    queue_node( const queue_node& src) : base_type(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    void reset_node( reset_flags f) __TBB_override {\n        base_type::reset_node(f);\n    }\n};  // queue_node\n\n//! Forwards messages in sequence order\ntemplate< typename T, typename A=cache_aligned_allocator<T> >\nclass sequencer_node : public queue_node<T, A> {\n    internal::function_body< T, size_t > *my_sequencer;\n    // my_sequencer should be a benign function and must be callable\n    // from a parallel context.  Does this mean it needn't be reset?\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    template< typename Sequencer >\n    sequencer_node( graph &g, const Sequencer& s ) : queue_node<T, A>(g),\n        my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    sequencer_node( const sequencer_node& src ) : queue_node<T, A>(src),\n        my_sequencer( src.my_sequencer->clone() ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Destructor\n    ~sequencer_node() { delete my_sequencer; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::buffer_operation sequencer_operation;\n\nprivate:\n    bool internal_push(sequencer_operation *op) __TBB_override {\n        size_type tag = (*my_sequencer)(*(op->elem));\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n        if (tag < this->my_head) {\n            // have already emitted a message with this tag\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return false;\n        }\n#endif\n        // cannot modify this->my_tail now; the buffer would be inconsistent.\n        size_t new_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;\n\n        if (this->size(new_tail) > this->capacity()) {\n            this->grow_my_array(this->size(new_tail));\n        }\n        this->my_tail = new_tail;\n\n        const internal::op_stat res = this->place_item(tag, *(op->elem)) ? internal::SUCCEEDED : internal::FAILED;\n        __TBB_store_with_release(op->status, res);\n        return res ==internal::SUCCEEDED;\n    }\n};  // sequencer_node\n\n//! Forwards messages in priority order\ntemplate< typename T, typename Compare = std::less<T>, typename A=cache_aligned_allocator<T> >\nclass priority_queue_node : public buffer_node<T, A> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef buffer_node<T,A> base_type;\n    typedef priority_queue_node class_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    priority_queue_node( const priority_queue_node &src ) : buffer_node<T, A>(src), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n\n    void reset_node( reset_flags f) __TBB_override {\n        mark = 0;\n        base_type::reset_node(f);\n    }\n\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::item_type item_type;\n    typedef typename buffer_node<T, A>::buffer_operation prio_operation;\n\n    //! Tries to forward valid items to successors\n    void internal_forward_task(prio_operation *op) __TBB_override {\n        this->internal_forward_task_impl(op, this);\n    }\n\n    void handle_operations(prio_operation *op_list) __TBB_override {\n        this->handle_operations_impl(op_list, this);\n    }\n\n    bool internal_push(prio_operation *op) __TBB_override {\n        prio_push(*(op->elem));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        return true;\n    }\n\n    void internal_pop(prio_operation *op) __TBB_override {\n        // if empty or already reserved, don't pop\n        if ( this->my_reserved == true || this->my_tail == 0 ) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return;\n        }\n\n        *(op->elem) = prio();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_pop();\n\n    }\n\n    // pops the highest-priority item, saves copy\n    void internal_reserve(prio_operation *op) __TBB_override {\n        if (this->my_reserved == true || this->my_tail == 0) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return;\n        }\n        this->my_reserved = true;\n        *(op->elem) = prio();\n        reserved_item = *(op->elem);\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_pop();\n    }\n\n    void internal_consume(prio_operation *op) __TBB_override {\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\n\n    void internal_release(prio_operation *op) __TBB_override {\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_push(reserved_item);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\n\nprivate:\n    template<typename, typename> friend class buffer_node;\n\n    void order() {\n        if (mark < this->my_tail) heapify();\n        __TBB_ASSERT(mark == this->my_tail, \"mark unequal after heapify\");\n    }\n\n    bool is_item_valid() {\n        return this->my_tail > 0;\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task * new_task = this->my_successors.try_put_task(this->prio());\n        if (new_task) {\n            // workaround for icc bug\n            graph& graph_ref = this->graph_reference();\n            last_task = combine_tasks(graph_ref, last_task, new_task);\n            prio_pop();\n        }\n    }\n\nprivate:\n    Compare compare;\n    size_type mark;\n\n    input_type reserved_item;\n\n    // in case a reheap has not been done after a push, check if the mark item is higher than the 0'th item\n    bool prio_use_tail() {\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds before test\");\n        return mark < this->my_tail && compare(this->get_my_item(0), this->get_my_item(this->my_tail - 1));\n    }\n\n    // prio_push: checks that the item will fit, expand array if necessary, put at end\n    void prio_push(const T &src) {\n        if ( this->my_tail >= this->my_array_size )\n            this->grow_my_array( this->my_tail + 1 );\n        (void) this->place_item(this->my_tail, src);\n        ++(this->my_tail);\n        __TBB_ASSERT(mark < this->my_tail, \"mark outside bounds after push\");\n    }\n\n    // prio_pop: deletes highest priority item from the array, and if it is item\n    // 0, move last item to 0 and reheap.  If end of array, just destroy and decrement tail\n    // and mark.  Assumes the array has already been tested for emptiness; no failure.\n    void prio_pop()  {\n        if (prio_use_tail()) {\n            // there are newly pushed elements; last one higher than top\n            // copy the data\n            this->destroy_item(this->my_tail-1);\n            --(this->my_tail);\n            __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n            return;\n        }\n        this->destroy_item(0);\n        if(this->my_tail > 1) {\n            // push the last element down heap\n            __TBB_ASSERT(this->my_item_valid(this->my_tail - 1), NULL);\n            this->move_item(0,this->my_tail - 1);\n        }\n        --(this->my_tail);\n        if(mark > this->my_tail) --mark;\n        if (this->my_tail > 1) // don't reheap for heap of size 1\n            reheap();\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n    }\n\n    const T& prio() {\n        return this->get_my_item(prio_use_tail() ? this->my_tail-1 : 0);\n    }\n\n    // turn array into heap\n    void heapify() {\n        if(this->my_tail == 0) {\n            mark = 0;\n            return;\n        }\n        if (!mark) mark = 1;\n        for (; mark<this->my_tail; ++mark) { // for each unheaped element\n            size_type cur_pos = mark;\n            input_type to_place;\n            this->fetch_item(mark,to_place);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(this->get_my_item(parent), to_place))\n                    break;\n                this->move_item(cur_pos, parent);\n                cur_pos = parent;\n            } while( cur_pos );\n            (void) this->place_item(cur_pos, to_place);\n        }\n    }\n\n    // otherwise heapified array with new root element; rearrange to heap\n    void reheap() {\n        size_type cur_pos=0, child=1;\n        while (child < mark) {\n            size_type target = child;\n            if (child+1<mark &&\n                compare(this->get_my_item(child),\n                        this->get_my_item(child+1)))\n                ++target;\n            // target now has the higher priority child\n            if (compare(this->get_my_item(target),\n                        this->get_my_item(cur_pos)))\n                break;\n            // swap\n            this->swap_items(cur_pos, target);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n    }\n};  // priority_queue_node\n\n//! Forwards messages only if the threshold has not been reached\n/** This node forwards items until its threshold is reached.\n    It contains no buffering.  If the downstream node rejects, the\n    message is dropped. */\ntemplate< typename T >\nclass limiter_node : public graph_node, public receiver< T >, public sender< T > {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n    //TODO: There is a lack of predefined types for its controlling \"decrementer\" port. It should be fixed later.\n\nprivate:\n    size_t my_threshold;\n    size_t my_count; //number of successful puts\n    size_t my_tries; //number of active put attempts\n    internal::reservable_predecessor_cache< T, spin_mutex > my_predecessors;\n    spin_mutex my_mutex;\n    internal::broadcast_cache< T > my_successors;\n    int init_decrement_predecessors;\n\n    friend class internal::forward_task_bypass< limiter_node<T> >;\n\n    // Let decrementer call decrement_counter()\n    friend class internal::decrementer< limiter_node<T> >;\n\n    bool check_conditions() {  // always called under lock\n        return ( my_count + my_tries < my_threshold && !my_predecessors.empty() && !my_successors.empty() );\n    }\n\n    // only returns a valid task pointer or NULL, never SUCCESSFULLY_ENQUEUED\n    task *forward_task() {\n        input_type v;\n        task *rval = NULL;\n        bool reserved = false;\n            {\n                spin_mutex::scoped_lock lock(my_mutex);\n                if ( check_conditions() )\n                    ++my_tries;\n                else\n                    return NULL;\n            }\n\n        //SUCCESS\n        // if we can reserve and can put, we consume the reservation\n        // we increment the count and decrement the tries\n        if ( (my_predecessors.try_reserve(v)) == true ){\n            reserved=true;\n            if ( (rval = my_successors.try_put_task(v)) != NULL ){\n                {\n                    spin_mutex::scoped_lock lock(my_mutex);\n                    ++my_count;\n                    --my_tries;\n                    my_predecessors.try_consume();\n                    if ( check_conditions() ) {\n                        if ( internal::is_graph_active(this->my_graph) ) {\n                            task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                                internal::forward_task_bypass< limiter_node<T> >( *this );\n                            internal::spawn_in_graph_arena(graph_reference(), *rtask);\n                        }\n                    }\n                }\n                return rval;\n            }\n        }\n        //FAILURE\n        //if we can't reserve, we decrement the tries\n        //if we can reserve but can't put, we decrement the tries and release the reservation\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if (reserved) my_predecessors.try_release();\n            if ( check_conditions() ) {\n                if ( internal::is_graph_active(this->my_graph) ) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass< limiter_node<T> >( *this );\n                    __TBB_ASSERT(!rval, \"Have two tasks to handle\");\n                    return rtask;\n                }\n            }\n            return rval;\n        }\n    }\n\n    void forward() {\n        __TBB_ASSERT(false, \"Should never be called\");\n        return;\n    }\n\n    task * decrement_counter() {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if(my_count) --my_count;\n        }\n        return forward_task();\n    }\n\npublic:\n    //! The internal receiver< continue_msg > that decrements the count\n    internal::decrementer< limiter_node<T> > decrement;\n\n    //! Constructor\n    limiter_node(graph &g, size_t threshold, int num_decrement_predecessors=0) :\n        graph_node(g), my_threshold(threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(num_decrement_predecessors),\n        decrement(num_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    limiter_node( const limiter_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(),\n        my_threshold(src.my_threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(src.init_decrement_predecessors),\n        decrement(src.init_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Replace the current successor with this new successor\n    bool register_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        bool was_empty = my_successors.empty();\n        my_successors.register_successor(r);\n        //spawn a forward task if this is the only successor\n        if ( was_empty && !my_predecessors.empty() && my_count + my_tries < my_threshold ) {\n            if ( internal::is_graph_active(this->my_graph) ) {\n                task* task = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                            internal::forward_task_bypass < limiter_node<T> >( *this );\n                internal::spawn_in_graph_arena(graph_reference(), *task);\n            }\n        }\n        return true;\n    }\n\n    //! Removes a successor from this node\n    /** r.remove_predecessor(*this) is also called. */\n    bool remove_successor( successor_type &r ) __TBB_override {\n        r.remove_predecessor(*this);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n    built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }\n\n    void internal_add_built_successor(successor_type &src) __TBB_override {\n        my_successors.internal_add_built_successor(src);\n    }\n\n    void internal_delete_built_successor(successor_type &src) __TBB_override {\n        my_successors.internal_delete_built_successor(src);\n    }\n\n    size_t successor_count() __TBB_override { return my_successors.successor_count(); }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        my_successors.copy_successors(v);\n    }\n\n    void internal_add_built_predecessor(predecessor_type &src) __TBB_override {\n        my_predecessors.internal_add_built_predecessor(src);\n    }\n\n    void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {\n        my_predecessors.internal_delete_built_predecessor(src);\n    }\n\n    size_t predecessor_count() __TBB_override { return my_predecessors.predecessor_count(); }\n\n    void copy_predecessors(predecessor_list_type &v) __TBB_override {\n        my_predecessors.copy_predecessors(v);\n    }\n\n    void extract() __TBB_override {\n        my_count = 0;\n        my_successors.built_successors().sender_extract(*this);\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        decrement.built_predecessors().receiver_extract(decrement);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Adds src to the list of cached predecessors.\n    bool register_predecessor( predecessor_type &src ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_predecessors.add( src );\n        if ( my_count + my_tries < my_threshold && !my_successors.empty() && internal::is_graph_active(this->my_graph) ) {\n            task* task = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass < limiter_node<T> >( *this );\n            internal::spawn_in_graph_arena(graph_reference(), *task);\n        }\n        return true;\n    }\n\n    //! Removes src from the list of cached predecessors.\n    bool remove_predecessor( predecessor_type &src ) __TBB_override {\n        my_predecessors.remove( src );\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! Puts an item to this receiver\n    task *try_put_task( const T &t ) __TBB_override {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if ( my_count + my_tries >= my_threshold )\n                return NULL;\n            else\n                ++my_tries;\n        }\n\n        task * rtask = my_successors.try_put_task(t);\n\n        if ( !rtask ) {  // try_put_task failed.\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if (check_conditions() && internal::is_graph_active(this->my_graph)) {\n                rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                    internal::forward_task_bypass< limiter_node<T> >( *this );\n            }\n        }\n        else {\n            spin_mutex::scoped_lock lock(my_mutex);\n            ++my_count;\n            --my_tries;\n             }\n        return rtask;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override {\n        __TBB_ASSERT(false,NULL);  // should never be called\n    }\n\n    void reset_node( reset_flags f) __TBB_override {\n        my_count = 0;\n        if(f & rf_clear_edges) {\n            my_predecessors.clear();\n            my_successors.clear();\n        }\n        else\n        {\n            my_predecessors.reset( );\n        }\n        decrement.reset_receiver(f);\n    }\n};  // limiter_node\n\n#include \"internal/_flow_graph_join_impl.h\"\n\nusing internal::reserving_port;\nusing internal::queueing_port;\nusing internal::key_matching_port;\nusing internal::input_port;\nusing internal::tag_value;\n\ntemplate<typename OutputTuple, typename JP=queueing> class join_node;\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,reserving>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    explicit join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,queueing>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, queueing_port, OutputTuple, queueing> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    explicit join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// template for key_matching join_node\n// tag_matching join_node is a specialization of key_matching, and is source-compatible.\ntemplate<typename OutputTuple, typename K, typename KHash>\nclass join_node<OutputTuple, key_matching<K, KHash> > : public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value,\n      key_matching_port, OutputTuple, key_matching<K,KHash> > {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, key_matching_port, OutputTuple, key_matching<K,KHash> > unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    join_node(graph &g) : unfolded_type(g) {}\n#endif  /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    template<typename __TBB_B0, typename __TBB_B1>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1) : unfolded_type(g, b0, b1) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2) : unfolded_type(g, b0, b1, b2) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3) : unfolded_type(g, b0, b1, b2, b3) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4) :\n            unfolded_type(g, b0, b1, b2, b3, b4) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8, typename __TBB_B9>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// indexer node\n#include \"internal/_flow_graph_indexer_impl.h\"\n\n// TODO: Implement interface with variadic template or tuple\ntemplate<typename T0, typename T1=null_type, typename T2=null_type, typename T3=null_type,\n                      typename T4=null_type, typename T5=null_type, typename T6=null_type,\n                      typename T7=null_type, typename T8=null_type, typename T9=null_type> class indexer_node;\n\n//indexer node specializations\ntemplate<typename T0>\nclass indexer_node<T0> : public internal::unfolded_indexer_node<tuple<T0> > {\nprivate:\n    static const int N = 1;\npublic:\n    typedef tuple<T0> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1>\nclass indexer_node<T0, T1> : public internal::unfolded_indexer_node<tuple<T0, T1> > {\nprivate:\n    static const int N = 2;\npublic:\n    typedef tuple<T0, T1> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2>\nclass indexer_node<T0, T1, T2> : public internal::unfolded_indexer_node<tuple<T0, T1, T2> > {\nprivate:\n    static const int N = 3;\npublic:\n    typedef tuple<T0, T1, T2> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n        void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3>\nclass indexer_node<T0, T1, T2, T3> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3> > {\nprivate:\n    static const int N = 4;\npublic:\n    typedef tuple<T0, T1, T2, T3> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4>\nclass indexer_node<T0, T1, T2, T3, T4> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4> > {\nprivate:\n    static const int N = 5;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\n#if __TBB_VARIADIC_MAX >= 6\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>\nclass indexer_node<T0, T1, T2, T3, T4, T5> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5> > {\nprivate:\n    static const int N = 6;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 6\n\n#if __TBB_VARIADIC_MAX >= 7\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6> > {\nprivate:\n    static const int N = 7;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 7\n\n#if __TBB_VARIADIC_MAX >= 8\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7> > {\nprivate:\n    static const int N = 8;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 8\n\n#if __TBB_VARIADIC_MAX >= 9\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> > {\nprivate:\n    static const int N = 9;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 9\n\n#if __TBB_VARIADIC_MAX >= 10\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8, typename T9>\nclass indexer_node/*default*/ : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> > {\nprivate:\n    static const int N = 10;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 10\n\n#if __TBB_PREVIEW_ASYNC_MSG\ninline void internal_make_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {\n#else\ntemplate< typename T >\ninline void internal_make_edge( sender<T> &p, receiver<T> &s ) {\n#endif\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    s.internal_add_built_predecessor(p);\n    p.internal_add_built_successor(s);\n#endif\n    p.register_successor( s );\n    tbb::internal::fgt_make_edge( &p, &s );\n}\n\n//! Makes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void make_edge( sender<T> &p, receiver<T> &s ) {\n    internal_make_edge( p, s );\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\ntemplate< typename TS, typename TR,\n    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value\n                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>\ninline void make_edge( TS &p, TR &s ) {\n    internal_make_edge( p, s );\n}\n\ntemplate< typename T >\ninline void make_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {\n    internal_make_edge( p, s );\n}\n\ntemplate< typename T >\ninline void make_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {\n    internal_make_edge( p, s );\n}\n\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Makes an edge from port 0 of a multi-output predecessor to port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void make_edge( T& output, V& input) {\n    make_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Makes an edge from port 0 of a multi-output predecessor to a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void make_edge( T& output, receiver<R>& input) {\n     make_edge(get<0>(output.output_ports()), input);\n}\n\n//Makes an edge from a sender to port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void make_edge( sender<S>& output, V& input) {\n     make_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n#if __TBB_PREVIEW_ASYNC_MSG\ninline void internal_remove_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {\n#else\ntemplate< typename T >\ninline void internal_remove_edge( sender<T> &p, receiver<T> &s ) {\n#endif\n    p.remove_successor( s );\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // TODO: should we try to remove p from the predecessor list of s, in case the edge is reversed?\n    p.internal_delete_built_successor(s);\n    s.internal_delete_built_predecessor(p);\n#endif\n    tbb::internal::fgt_remove_edge( &p, &s );\n}\n\n//! Removes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void remove_edge( sender<T> &p, receiver<T> &s ) {\n    internal_remove_edge( p, s );\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\ntemplate< typename TS, typename TR,\n    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value\n                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>\ninline void remove_edge( TS &p, TR &s ) {\n    internal_remove_edge( p, s );\n}\n\ntemplate< typename T >\ninline void remove_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {\n    internal_remove_edge( p, s );\n}\n\ntemplate< typename T >\ninline void remove_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {\n    internal_remove_edge( p, s );\n}\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Removes an edge between port 0 of a multi-output predecessor and port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void remove_edge( T& output, V& input) {\n    remove_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Removes an edge between port 0 of a multi-output predecessor and a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void remove_edge( T& output, receiver<R>& input) {\n     remove_edge(get<0>(output.output_ports()), input);\n}\n//Removes an edge between a sender and port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void remove_edge( sender<S>& output, V& input) {\n     remove_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\ntemplate<typename C >\ntemplate< typename S >\nvoid internal::edge_container<C>::sender_extract( S &s ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(s, **i);\n    }\n}\n\ntemplate<typename C >\ntemplate< typename R >\nvoid internal::edge_container<C>::receiver_extract( R &r ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(**i, r);\n    }\n}\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n//! Returns a copy of the body from a function or continue node\ntemplate< typename Body, typename Node >\nBody copy_body( Node &n ) {\n    return n.template copy_function_object<Body>();\n}\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n//composite_node\ntemplate< typename InputTuple, typename OutputTuple > class composite_node;\n\ntemplate< typename... InputTypes, typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<OutputTypes...> > : public graph_node{\n\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<input_ports_type> my_input_ports;\n    std::unique_ptr<output_ports_type> my_output_ports;\n\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name ) : graph_node(g), my_type_name(type_name) {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_COMPOSITE_NODE, this, &this->my_graph );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#endif\n    composite_node( graph &g ) : graph_node(g) {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_COMPOSITE_NODE, this, &this->my_graph );\n    }\n\n   template<typename T1, typename T2>\n   void set_external_ports(T1&& input_ports_tuple, T2&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n       my_input_ports = tbb::internal::make_unique<input_ports_type>(std::forward<T1>(input_ports_tuple));\n       my_output_ports = tbb::internal::make_unique<output_ports_type>(std::forward<T2>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_alias_helper<T1, NUM_INPUTS>::alias_port( this, input_ports_tuple);\n      tbb::internal::fgt_internal_output_alias_helper<T2, NUM_OUTPUTS>::alias_port( this, output_ports_tuple);\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) { }\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type& input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n    output_ports_type& output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n};  // class composite_node\n\n//composite_node with only input ports\ntemplate< typename... InputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<> > : public graph_node {\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<input_ports_type> my_input_ports;\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name) {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& input_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n\n       my_input_ports = tbb::internal::make_unique<input_ports_type>(std::forward<T>(input_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_alias_helper<T, NUM_INPUTS>::alias_port( this, std::forward<T>(input_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes( const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type& input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n//composite_nodes with only output_ports\ntemplate<typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<>, tbb::flow::tuple<OutputTypes...> > : public graph_node {\npublic:\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<output_ports_type> my_output_ports;\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name) {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n\n       my_output_ports = tbb::internal::make_unique<output_ports_type>(std::forward<T>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_output_alias_helper<T, NUM_OUTPUTS>::alias_port( this, std::forward<T>(output_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template<typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template<typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    output_ports_type& output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\nnamespace internal {\n\ntemplate<typename Gateway>\nclass async_body_base: tbb::internal::no_assign {\npublic:\n    typedef Gateway gateway_type;\n\n    async_body_base(gateway_type *gateway): my_gateway(gateway) { }\n    void set_gateway(gateway_type *gateway) {\n        my_gateway = gateway;\n    }\n\nprotected:\n    gateway_type *my_gateway;\n};\n\ntemplate<typename Input, typename Ports, typename Gateway, typename Body>\nclass async_body: public async_body_base<Gateway> {\npublic:\n    typedef async_body_base<Gateway> base_type;\n    typedef Gateway gateway_type;\n\n    async_body(const Body &body, gateway_type *gateway)\n        : base_type(gateway), my_body(body) { }\n\n    void operator()( const Input &v, Ports & ) {\n        my_body(v, *this->my_gateway);\n    }\n\n    Body get_body() { return my_body; }\n\nprivate:\n    Body my_body;\n};\n\n}\n\n//! Implements async node\ntemplate < typename Input, typename Output,\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n           typename Policy = queueing_lightweight,\n#else\n           typename Policy = queueing,\n#endif\n           typename Allocator=cache_aligned_allocator<Input> >\nclass async_node : public multifunction_node< Input, tuple< Output >, Policy, Allocator >, public sender< Output > {\n    typedef multifunction_node< Input, tuple< Output >, Policy, Allocator > base_type;\n    typedef typename internal::multifunction_input<Input, typename base_type::output_ports_type, Policy, Allocator> mfn_input_type;\n\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef receiver<input_type> receiver_type;\n    typedef typename receiver_type::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n    typedef receiver_gateway<output_type> gateway_type;\n    typedef internal::async_body_base<gateway_type> async_body_base_type;\n    typedef typename base_type::output_ports_type output_ports_type;\n\nprivate:\n    struct try_put_functor {\n        typedef internal::multifunction_output<Output> output_port_type;\n        output_port_type *port;\n        const Output *value;\n        bool result;\n        try_put_functor(output_port_type &p, const Output &v) : port(&p), value(&v), result(false) { }\n        void operator()() {\n            result = port->try_put(*value);\n        }\n    };\n\n    class receiver_gateway_impl: public receiver_gateway<Output> {\n    public:\n        receiver_gateway_impl(async_node* node): my_node(node) {}\n        void reserve_wait() __TBB_override {\n            tbb::internal::fgt_async_reserve(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);\n            my_node->my_graph.reserve_wait();\n        }\n\n        void release_wait() __TBB_override {\n            my_node->my_graph.release_wait();\n            tbb::internal::fgt_async_commit(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);\n        }\n\n        //! Implements gateway_type::try_put for an external activity to submit a message to FG\n        bool try_put(const Output &i) __TBB_override {\n            return my_node->try_put_impl(i);\n        }\n\n    private:\n        async_node* my_node;\n    } my_gateway;\n\n    //The substitute of 'this' for member construction, to prevent compiler warnings\n    async_node* self() { return this; }\n\n    //! Implements gateway_type::try_put for an external activity to submit a message to FG\n    bool try_put_impl(const Output &i) {\n        internal::multifunction_output<Output> &port_0 = internal::output_port<0>(*this);\n        tbb::internal::fgt_async_try_put_begin(this, &port_0);\n        try_put_functor tpf(port_0, i);\n        internal::execute_in_graph_arena(this->my_graph, tpf);\n        tbb::internal::fgt_async_try_put_end(this, &port_0);\n        return tpf.result;\n    }\n\npublic:\n    template<typename Body>\n    async_node( graph &g, size_t concurrency, Body body ) :\n        base_type( g, concurrency, internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body>(body, &my_gateway) ), my_gateway(self()) {\n        tbb::internal::fgt_multioutput_node_with_body<1>( tbb::internal::FLOW_ASYNC_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    async_node( const async_node &other ) : base_type(other), sender<Output>(), my_gateway(self()) {\n        static_cast<async_body_base_type*>(this->my_body->get_body_ptr())->set_gateway(&my_gateway);\n        static_cast<async_body_base_type*>(this->my_init_body->get_body_ptr())->set_gateway(&my_gateway);\n\n        tbb::internal::fgt_multioutput_node_with_body<1>( tbb::internal::FLOW_ASYNC_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    gateway_type& gateway() {\n        return my_gateway;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n            tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n    // Define sender< Output >\n\n    //! Add a new successor to this node\n    bool register_successor( successor_type &r ) __TBB_override {\n        return internal::output_port<0>(*this).register_successor(r);\n    }\n\n    //! Removes a successor from this node\n    bool remove_successor( successor_type &r ) __TBB_override {\n        return internal::output_port<0>(*this).remove_successor(r);\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        typedef internal::multifunction_body<input_type, typename base_type::output_ports_type> mfn_body_type;\n        typedef internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body> async_body_type;\n        mfn_body_type &body_ref = *this->my_body;\n        async_body_type ab = *static_cast<async_body_type*>(dynamic_cast< internal::multifunction_body_leaf<input_type, typename base_type::output_ports_type, async_body_type> & >(body_ref).get_body_ptr());\n        return ab.get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    built_successors_type &built_successors() __TBB_override {\n        return internal::output_port<0>(*this).built_successors();\n    }\n\n    void internal_add_built_successor( successor_type &r ) __TBB_override {\n        internal::output_port<0>(*this).internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor( successor_type &r ) __TBB_override {\n        internal::output_port<0>(*this).internal_delete_built_successor(r);\n    }\n\n    void copy_successors( successor_list_type &l ) __TBB_override {\n        internal::output_port<0>(*this).copy_successors(l);\n    }\n\n    size_t  successor_count() __TBB_override {\n        return internal::output_port<0>(*this).successor_count();\n    }\n#endif\n\nprotected:\n\n    void reset_node( reset_flags f) __TBB_override {\n       base_type::reset_node(f);\n    }\n};\n\n#if __TBB_PREVIEW_STREAMING_NODE\n#include \"internal/_flow_graph_streaming_node.h\"\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n} // interfaceX\n\n    using interface10::reset_flags;\n    using interface10::rf_reset_protocol;\n    using interface10::rf_reset_bodies;\n    using interface10::rf_clear_edges;\n\n    using interface10::graph;\n    using interface10::graph_node;\n    using interface10::continue_msg;\n\n    using interface10::source_node;\n    using interface10::function_node;\n    using interface10::multifunction_node;\n    using interface10::split_node;\n    using interface10::internal::output_port;\n    using interface10::indexer_node;\n    using interface10::internal::tagged_msg;\n    using interface10::internal::cast_to;\n    using interface10::internal::is_a;\n    using interface10::continue_node;\n    using interface10::overwrite_node;\n    using interface10::write_once_node;\n    using interface10::broadcast_node;\n    using interface10::buffer_node;\n    using interface10::queue_node;\n    using interface10::sequencer_node;\n    using interface10::priority_queue_node;\n    using interface10::limiter_node;\n    using namespace interface10::internal::graph_policy_namespace;\n    using interface10::join_node;\n    using interface10::input_port;\n    using interface10::copy_body;\n    using interface10::make_edge;\n    using interface10::remove_edge;\n    using interface10::internal::tag_value;\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    using interface10::composite_node;\n#endif\n    using interface10::async_node;\n#if __TBB_PREVIEW_ASYNC_MSG\n    using interface10::async_msg;\n#endif\n#if __TBB_PREVIEW_STREAMING_NODE\n    using interface10::port_ref;\n    using interface10::streaming_node;\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n} // flow\n} // tbb\n\n#undef __TBB_PFG_RESET_ARG\n#undef __TBB_COMMA\n\n#endif // __TBB_flow_graph_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/flow_graph_abstractions.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_abstractions_H\n#define __TBB_flow_graph_abstractions_H\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n//! Pure virtual template classes that define interfaces for async communication\nclass graph_proxy {\npublic:\n    //! Inform a graph that messages may come from outside, to prevent premature graph completion\n    virtual void reserve_wait() = 0;\n\n    //! Inform a graph that a previous call to reserve_wait is no longer in effect\n    virtual void release_wait() = 0;\n\n    virtual ~graph_proxy() {}\n};\n\ntemplate <typename Input>\nclass receiver_gateway : public graph_proxy {\npublic:\n    //! Type of inputing data into FG.\n    typedef Input input_type;\n\n    //! Submit signal from an asynchronous activity to FG.\n    virtual bool try_put(const input_type&) = 0;\n};\n\n} //interfaceX\n\nusing interface10::graph_proxy;\nusing interface10::receiver_gateway;\n\n} //flow\n} //tbb\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/flow_graph_opencl_node.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_opencl_node_H\n#define __TBB_flow_graph_opencl_node_H\n\n#include \"tbb/tbb_config.h\"\n#if __TBB_PREVIEW_OPENCL_NODE\n\n#include \"flow_graph.h\"\n\n#include <vector>\n#include <string>\n#include <algorithm>\n#include <iostream>\n#include <fstream>\n#include <map>\n#include <mutex>\n\n#ifdef __APPLE__\n#include <OpenCL/opencl.h>\n#else\n#include <CL/cl.h>\n#endif\n\nnamespace tbb {\nnamespace flow {\n\nnamespace interface10 {\n\ntemplate <typename DeviceFilter>\nclass opencl_factory;\n\nnamespace opencl_info {\nclass default_opencl_factory;\n}\n\ntemplate <typename Factory>\nclass opencl_program;\n\ninline void enforce_cl_retcode(cl_int err, std::string msg) {\n    if (err != CL_SUCCESS) {\n        std::cerr << msg << \"; error code: \" << err << std::endl;\n        throw msg;\n    }\n}\n\ntemplate <typename T>\nT event_info(cl_event e, cl_event_info i) {\n    T res;\n    enforce_cl_retcode(clGetEventInfo(e, i, sizeof(res), &res, NULL), \"Failed to get OpenCL event information\");\n    return res;\n}\n\ntemplate <typename T>\nT device_info(cl_device_id d, cl_device_info i) {\n    T res;\n    enforce_cl_retcode(clGetDeviceInfo(d, i, sizeof(res), &res, NULL), \"Failed to get OpenCL device information\");\n    return res;\n}\n\ntemplate <>\ninline std::string device_info<std::string>(cl_device_id d, cl_device_info i) {\n    size_t required;\n    enforce_cl_retcode(clGetDeviceInfo(d, i, 0, NULL, &required), \"Failed to get OpenCL device information\");\n\n    char *buff = (char*)alloca(required);\n    enforce_cl_retcode(clGetDeviceInfo(d, i, required, buff, NULL), \"Failed to get OpenCL device information\");\n\n    return buff;\n}\n\ntemplate <typename T>\nT platform_info(cl_platform_id p, cl_platform_info i) {\n    T res;\n    enforce_cl_retcode(clGetPlatformInfo(p, i, sizeof(res), &res, NULL), \"Failed to get OpenCL platform information\");\n    return res;\n}\n\ntemplate <>\ninline std::string platform_info<std::string>(cl_platform_id p, cl_platform_info  i) {\n    size_t required;\n    enforce_cl_retcode(clGetPlatformInfo(p, i, 0, NULL, &required), \"Failed to get OpenCL platform information\");\n\n    char *buff = (char*)alloca(required);\n    enforce_cl_retcode(clGetPlatformInfo(p, i, required, buff, NULL), \"Failed to get OpenCL platform information\");\n\n    return buff;\n}\n\n\nclass opencl_device {\npublic:\n    typedef size_t device_id_type;\n    enum : device_id_type {\n        unknown = device_id_type( -2 ),\n        host = device_id_type( -1 )\n    };\n\n    opencl_device() : my_device_id( unknown ), my_cl_device_id( NULL ), my_cl_command_queue( NULL ) {}\n\n    opencl_device( cl_device_id d_id ) : my_device_id( unknown ), my_cl_device_id( d_id ), my_cl_command_queue( NULL ) {}\n\n    opencl_device( cl_device_id cl_d_id, device_id_type device_id ) : my_device_id( device_id ), my_cl_device_id( cl_d_id ), my_cl_command_queue( NULL ) {}\n\n    std::string platform_profile() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_PROFILE );\n    }\n    std::string platform_version() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_VERSION );\n    }\n    std::string platform_name() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_NAME );\n    }\n    std::string platform_vendor() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_VENDOR );\n    }\n    std::string platform_extensions() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_EXTENSIONS );\n    }\n\n    template <typename T>\n    void info( cl_device_info i, T &t ) const {\n        t = device_info<T>( my_cl_device_id, i );\n    }\n    std::string version() const {\n        // The version string format: OpenCL<space><major_version.minor_version><space><vendor-specific information>\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VERSION );\n    }\n    int major_version() const {\n        int major;\n        std::sscanf( version().c_str(), \"OpenCL %d\", &major );\n        return major;\n    }\n    int minor_version() const {\n        int major, minor;\n        std::sscanf( version().c_str(), \"OpenCL %d.%d\", &major, &minor );\n        return minor;\n    }\n    bool out_of_order_exec_mode_on_host_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n    }\n    bool out_of_order_exec_mode_on_device_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return false;\n    }\n    std::array<size_t, 3> max_work_item_sizes() const {\n        return device_info<std::array<size_t, 3>>( my_cl_device_id, CL_DEVICE_MAX_WORK_ITEM_SIZES );\n    }\n    size_t max_work_group_size() const {\n        return device_info<size_t>( my_cl_device_id, CL_DEVICE_MAX_WORK_GROUP_SIZE );\n    }\n    bool built_in_kernel_available( const std::string& k ) const {\n        const std::string semi = \";\";\n        // Added semicolumns to force an exact match (to avoid a partial match, e.g. \"add\" is partly matched with \"madd\").\n        return (semi + built_in_kernels() + semi).find( semi + k + semi ) != std::string::npos;\n    }\n    std::string built_in_kernels() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_BUILT_IN_KERNELS );\n    }\n    std::string name() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_NAME );\n    }\n    cl_bool available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_AVAILABLE );\n    }\n    cl_bool compiler_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_COMPILER_AVAILABLE );\n    }\n    cl_bool linker_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_LINKER_AVAILABLE );\n    }\n    bool extension_available( const std::string &ext ) const {\n        const std::string space = \" \";\n        // Added space to force an exact match (to avoid a partial match, e.g. \"ext\" is partly matched with \"ext2\").\n        return (space + extensions() + space).find( space + ext + space ) != std::string::npos;\n    }\n    std::string extensions() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_EXTENSIONS );\n    }\n\n    cl_device_type type() const {\n        return device_info<cl_device_type>( my_cl_device_id, CL_DEVICE_TYPE );\n    }\n\n    std::string vendor() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VENDOR );\n    }\n\n    cl_uint address_bits() const {\n        return device_info<cl_uint>( my_cl_device_id, CL_DEVICE_ADDRESS_BITS );\n    }\n\n    cl_device_id device_id() const {\n        return my_cl_device_id;\n    }\n\n    cl_command_queue command_queue() const {\n        return my_cl_command_queue;\n    }\n\n    void set_command_queue( cl_command_queue cmd_queue ) {\n        my_cl_command_queue = cmd_queue;\n    }\n\n    cl_platform_id platform_id() const {\n        return device_info<cl_platform_id>( my_cl_device_id, CL_DEVICE_PLATFORM );\n    }\n\nprivate:\n\n    device_id_type my_device_id;\n    cl_device_id my_cl_device_id;\n    cl_command_queue my_cl_command_queue;\n\n    friend bool operator==(opencl_device d1, opencl_device d2) { return d1.my_cl_device_id == d2.my_cl_device_id; }\n\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n    template <typename Factory>\n    friend class opencl_memory;\n    template <typename Factory>\n    friend class opencl_program;\n\n#if TBB_USE_ASSERT\n    template <typename T, typename Factory>\n    friend class opencl_buffer;\n#endif\n};\n\nclass opencl_device_list {\n    typedef std::vector<opencl_device> container_type;\npublic:\n    typedef container_type::iterator iterator;\n    typedef container_type::const_iterator const_iterator;\n    typedef container_type::size_type size_type;\n\n    opencl_device_list() {}\n    opencl_device_list( std::initializer_list<opencl_device> il ) : my_container( il ) {}\n\n    void add( opencl_device d ) { my_container.push_back( d ); }\n    size_type size() const { return my_container.size(); }\n    bool empty() const { return my_container.empty(); }\n    iterator begin() { return my_container.begin(); }\n    iterator end() { return my_container.end(); }\n    const_iterator begin() const { return my_container.begin(); }\n    const_iterator end() const { return my_container.end(); }\n    const_iterator cbegin() const { return my_container.cbegin(); }\n    const_iterator cend() const { return my_container.cend(); }\n\nprivate:\n    container_type my_container;\n};\n\nnamespace internal {\n\n// Retrieve all OpenCL devices from machine\ninline opencl_device_list find_available_devices() {\n    opencl_device_list opencl_devices;\n\n    cl_uint num_platforms;\n    enforce_cl_retcode(clGetPlatformIDs(0, NULL, &num_platforms), \"clGetPlatformIDs failed\");\n\n    std::vector<cl_platform_id> platforms(num_platforms);\n    enforce_cl_retcode(clGetPlatformIDs(num_platforms, platforms.data(), NULL), \"clGetPlatformIDs failed\");\n\n    cl_uint num_devices;\n    std::vector<cl_platform_id>::iterator platforms_it = platforms.begin();\n    cl_uint num_all_devices = 0;\n    while (platforms_it != platforms.end()) {\n        cl_int err = clGetDeviceIDs(*platforms_it, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);\n        if (err == CL_DEVICE_NOT_FOUND) {\n            platforms_it = platforms.erase(platforms_it);\n        }\n        else {\n            enforce_cl_retcode(err, \"clGetDeviceIDs failed\");\n            num_all_devices += num_devices;\n            ++platforms_it;\n        }\n    }\n\n    std::vector<cl_device_id> devices(num_all_devices);\n    std::vector<cl_device_id>::iterator devices_it = devices.begin();\n    for (auto p = platforms.begin(); p != platforms.end(); ++p) {\n        enforce_cl_retcode(clGetDeviceIDs((*p), CL_DEVICE_TYPE_ALL, (cl_uint)std::distance(devices_it, devices.end()), &*devices_it, &num_devices), \"clGetDeviceIDs failed\");\n        devices_it += num_devices;\n    }\n\n    for (auto d = devices.begin(); d != devices.end(); ++d) {\n        opencl_devices.add(opencl_device((*d)));\n    }\n\n    return opencl_devices;\n}\n\n} // namespace internal\n\n// TODO: consider this namespace as public API\nnamespace opencl_info {\n\n    inline const opencl_device_list& available_devices() {\n        // Static storage for all available OpenCL devices on machine\n        static const opencl_device_list my_devices = internal::find_available_devices();\n        return my_devices;\n    }\n\n} // namespace opencl_info\n\n\nclass callback_base : tbb::internal::no_copy {\npublic:\n    virtual void call() = 0;\n    virtual ~callback_base() {}\n};\n\ntemplate <typename Callback, typename T>\nclass callback : public callback_base {\n    Callback my_callback;\n    T my_data;\npublic:\n    callback( Callback c, const T& t ) : my_callback( c ), my_data( t ) {}\n\n    void call() __TBB_override {\n        my_callback( my_data );\n    }\n};\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_async_msg : public async_msg<T> {\npublic:\n    typedef T value_type;\n\n    opencl_async_msg() : my_callback_flag_ptr( std::make_shared< tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n    }\n\n    explicit opencl_async_msg( const T& data ) : my_data(data), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n    }\n\n    opencl_async_msg( const T& data, cl_event event ) : my_data(data), my_event(event), my_is_event(true), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n        enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n\n    T& data( bool wait = true ) {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    const T& data( bool wait = true ) const {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    opencl_async_msg( const opencl_async_msg &dmsg ) : async_msg<T>(dmsg),\n        my_data(dmsg.my_data), my_event(dmsg.my_event), my_is_event( dmsg.my_is_event ),\n        my_callback_flag_ptr(dmsg.my_callback_flag_ptr)\n    {\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n\n    opencl_async_msg( opencl_async_msg &&dmsg ) : async_msg<T>(std::move(dmsg)),\n        my_data(std::move(dmsg.my_data)), my_event(dmsg.my_event), my_is_event(dmsg.my_is_event),\n        my_callback_flag_ptr( std::move(dmsg.my_callback_flag_ptr) )\n    {\n        dmsg.my_is_event = false;\n    }\n\n    opencl_async_msg& operator=(const opencl_async_msg &dmsg) {\n        async_msg<T>::operator =(dmsg);\n\n        // Release original event\n        if ( my_is_event )\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to retain an event\" );\n\n        my_data = dmsg.my_data;\n        my_event = dmsg.my_event;\n        my_is_event = dmsg.my_is_event;\n\n        // Retain copied event\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n\n        my_callback_flag_ptr = dmsg.my_callback_flag_ptr;\n        return *this;\n    }\n\n    ~opencl_async_msg() {\n        if ( my_is_event )\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n    }\n\n    cl_event const * get_event() const { return my_is_event ? &my_event : NULL; }\n    void set_event( cl_event e ) const {\n        if ( my_is_event ) {\n            cl_command_queue cq = event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE );\n            if ( cq != event_info<cl_command_queue>( e, CL_EVENT_COMMAND_QUEUE ) )\n                enforce_cl_retcode( clFlush( cq ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = true;\n        my_event = e;\n        clRetainEvent( my_event );\n    }\n\n    void clear_event() const {\n        if ( my_is_event ) {\n            enforce_cl_retcode( clFlush( event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE ) ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = false;\n    }\n\n    template <typename Callback>\n    void register_callback( Callback c ) const {\n        __TBB_ASSERT( my_is_event, \"The OpenCL event is not set\" );\n        enforce_cl_retcode( clSetEventCallback( my_event, CL_COMPLETE, register_callback_func, new callback<Callback, T>( c, my_data ) ), \"Failed to set an OpenCL callback\" );\n    }\n\n    operator T&() { return data(); }\n    operator const T&() const { return data(); }\n\nprotected:\n    // Overridden in this derived class to inform that\n    // async calculation chain is over\n    void finalize() const __TBB_override {\n        receive_if_memory_object(*this);\n        if (! my_callback_flag_ptr->fetch_and_store(true)) {\n            opencl_async_msg a(*this);\n            if (my_is_event) {\n                register_callback([a](const T& t) mutable {\n                    a.set(t);\n                });\n            }\n            else {\n                a.set(my_data);\n            }\n        }\n        clear_event();\n    }\n\nprivate:\n    static void CL_CALLBACK register_callback_func( cl_event, cl_int event_command_exec_status, void *data ) {\n        tbb::internal::suppress_unused_warning( event_command_exec_status );\n        __TBB_ASSERT( event_command_exec_status == CL_COMPLETE, NULL );\n        __TBB_ASSERT( data, NULL );\n        callback_base *c = static_cast<callback_base*>(data);\n        c->call();\n        delete c;\n    }\n\n    T my_data;\n    mutable cl_event my_event;\n    mutable bool my_is_event = false;\n\n    std::shared_ptr< tbb::atomic<bool> > my_callback_flag_ptr;\n};\n\ntemplate <typename K, typename T, typename Factory>\nK key_from_message( const opencl_async_msg<T, Factory> &dmsg ) {\n    using tbb::flow::key_from_message;\n    const T &t = dmsg.data( false );\n    __TBB_STATIC_ASSERT( true, \"\" );\n    return key_from_message<K, T>( t );\n}\n\ntemplate <typename Factory>\nclass opencl_memory {\npublic:\n    opencl_memory() {}\n    opencl_memory( Factory &f ) : my_host_ptr( NULL ), my_factory( &f ), my_sending_event_present( false ) {\n        my_curr_device_id = my_factory->devices().begin()->my_device_id;\n    }\n\n    ~opencl_memory() {\n        if ( my_sending_event_present ) enforce_cl_retcode( clReleaseEvent( my_sending_event ), \"Failed to release an event for the OpenCL buffer\" );\n        enforce_cl_retcode( clReleaseMemObject( my_cl_mem ), \"Failed to release an memory object\" );\n    }\n\n    cl_mem get_cl_mem() const {\n        return my_cl_mem;\n    }\n\n    void* get_host_ptr() {\n        if ( !my_host_ptr ) {\n            opencl_async_msg<void*, Factory> d = receive( NULL );\n            d.data();\n            __TBB_ASSERT( d.data() == my_host_ptr, NULL );\n        }\n        return my_host_ptr;\n    }\n\n    Factory *factory() const { return my_factory; }\n\n    opencl_async_msg<void*, Factory> receive(const cl_event *e) {\n        opencl_async_msg<void*, Factory> d;\n        if (e) {\n            d = opencl_async_msg<void*, Factory>(my_host_ptr, *e);\n        } else {\n            d = opencl_async_msg<void*, Factory>(my_host_ptr);\n        }\n\n        // Concurrent receives are prohibited so we do not worry about synchronization.\n        if (my_curr_device_id.load<tbb::relaxed>() != opencl_device::host) {\n            map_memory(*my_factory->devices().begin(), d);\n            my_curr_device_id.store<tbb::relaxed>(opencl_device::host);\n            my_host_ptr = d.data(false);\n        }\n        // Release the sending event\n        if (my_sending_event_present) {\n            enforce_cl_retcode(clReleaseEvent(my_sending_event), \"Failed to release an event\");\n            my_sending_event_present = false;\n        }\n        return d;\n    }\n\n    opencl_async_msg<void*, Factory> send(opencl_device device, const cl_event *e) {\n        opencl_device::device_id_type device_id = device.my_device_id;\n        if (!my_factory->is_same_context(my_curr_device_id.load<tbb::acquire>(), device_id)) {\n            {\n                tbb::spin_mutex::scoped_lock lock(my_sending_lock);\n                if (!my_factory->is_same_context(my_curr_device_id.load<tbb::relaxed>(), device_id)) {\n                    __TBB_ASSERT(my_host_ptr, \"The buffer has not been mapped\");\n                    opencl_async_msg<void*, Factory> d(my_host_ptr);\n                    my_factory->enqueue_unmap_buffer(device, *this, d);\n                    my_sending_event = *d.get_event();\n                    my_sending_event_present = true;\n                    enforce_cl_retcode(clRetainEvent(my_sending_event), \"Failed to retain an event\");\n                    my_host_ptr = NULL;\n                    my_curr_device_id.store<tbb::release>(device_id);\n                }\n            }\n            __TBB_ASSERT(my_sending_event_present, NULL);\n        }\n\n        // !e means that buffer has come from the host\n        if (!e && my_sending_event_present) e = &my_sending_event;\n\n        __TBB_ASSERT(!my_host_ptr, \"The buffer has not been unmapped\");\n        return e ? opencl_async_msg<void*, Factory>(NULL, *e) : opencl_async_msg<void*, Factory>(NULL);\n    }\n\n    virtual void map_memory( opencl_device, opencl_async_msg<void*, Factory> & ) = 0;\nprotected:\n    cl_mem my_cl_mem;\n    tbb::atomic<opencl_device::device_id_type> my_curr_device_id;\n    void* my_host_ptr;\n    Factory *my_factory;\n\n    tbb::spin_mutex my_sending_lock;\n    bool my_sending_event_present;\n    cl_event my_sending_event;\n};\n\ntemplate <typename Factory>\nclass opencl_buffer_impl : public opencl_memory<Factory> {\n    size_t my_size;\npublic:\n    opencl_buffer_impl( size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        this->my_cl_mem = clCreateBuffer( this->my_factory->context(), CL_MEM_ALLOC_HOST_PTR, size, NULL, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL buffer\" );\n    }\n\n    // The constructor for subbuffers.\n    opencl_buffer_impl( cl_mem m, size_t index, size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        cl_buffer_region region = { index, size };\n        this->my_cl_mem = clCreateSubBuffer( m, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL subbuffer\" );\n    }\n\n    size_t size() const {\n        return my_size;\n    }\n\n    void map_memory( opencl_device device, opencl_async_msg<void*, Factory> &dmsg ) __TBB_override {\n        this->my_factory->enqueue_map_buffer( device, *this, dmsg );\n    }\n\n#if TBB_USE_ASSERT\n    template <typename, typename>\n    friend class opencl_buffer;\n#endif\n};\n\nenum access_type {\n    read_write,\n    write_only,\n    read_only\n};\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_subbuffer;\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_buffer {\npublic:\n    typedef cl_mem native_object_type;\n    typedef opencl_buffer memory_object_type;\n    typedef Factory opencl_factory_type;\n\n    template<access_type a> using iterator = T*;\n\n    template <access_type a>\n    iterator<a> access() const {\n        T* ptr = (T*)my_impl->get_host_ptr();\n        __TBB_ASSERT( ptr, NULL );\n        return iterator<a>( ptr );\n    }\n\n    T* data() const { return &access<read_write>()[0]; }\n\n    template <access_type a = read_write>\n    iterator<a> begin() const { return access<a>(); }\n\n    template <access_type a = read_write>\n    iterator<a> end() const { return access<a>()+my_impl->size()/sizeof(T); }\n\n    size_t size() const { return my_impl->size()/sizeof(T); }\n\n    T& operator[] ( ptrdiff_t k ) { return begin()[k]; }\n\n    opencl_buffer() {}\n    opencl_buffer( size_t size );\n    opencl_buffer( Factory &f, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), f ) ) {}\n\n    cl_mem native_object() const {\n        return my_impl->get_cl_mem();\n    }\n\n    const opencl_buffer& memory_object() const {\n        return *this;\n    }\n\n    void send( opencl_device device, opencl_async_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        opencl_async_msg<void*, Factory> d = my_impl->send( device, dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n    void receive( const opencl_async_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        opencl_async_msg<void*, Factory> d = my_impl->receive( dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n\n    opencl_subbuffer<T, Factory> subbuffer( size_t index, size_t size ) const;\nprivate:\n    // The constructor for subbuffers.\n    opencl_buffer( Factory &f, cl_mem m, size_t index, size_t size ) : my_impl( std::make_shared<impl_type>( m, index*sizeof(T), size*sizeof(T), f ) ) {}\n\n    typedef opencl_buffer_impl<Factory> impl_type;\n\n    std::shared_ptr<impl_type> my_impl;\n\n    friend bool operator==(const opencl_buffer<T, Factory> &lhs, const opencl_buffer<T, Factory> &rhs) {\n        return lhs.my_impl == rhs.my_impl;\n    }\n\n    template <typename>\n    friend class opencl_factory;\n    template <typename, typename>\n    friend class opencl_subbuffer;\n};\n\ntemplate <typename T, typename Factory>\nclass opencl_subbuffer : public opencl_buffer<T, Factory> {\n    opencl_buffer<T, Factory> my_owner;\npublic:\n    opencl_subbuffer() {}\n    opencl_subbuffer( const opencl_buffer<T, Factory> &owner, size_t index, size_t size ) :\n        opencl_buffer<T, Factory>( *owner.my_impl->factory(), owner.native_object(), index, size ), my_owner( owner ) {}\n};\n\ntemplate <typename T, typename Factory>\nopencl_subbuffer<T, Factory> opencl_buffer<T, Factory>::subbuffer( size_t index, size_t size ) const {\n    return opencl_subbuffer<T, Factory>( *this, index, size );\n}\n\n\n#define is_typedef(type)                                                    \\\n    template <typename T>                                                   \\\n    struct is_##type {                                                      \\\n        template <typename C>                                               \\\n        static std::true_type check( typename C::type* );                   \\\n        template <typename C>                                               \\\n        static std::false_type check( ... );                                \\\n                                                                            \\\n        static const bool value = decltype(check<T>(0))::value;             \\\n    }\n\nis_typedef( native_object_type );\nis_typedef( memory_object_type );\n\ntemplate <typename T>\ntypename std::enable_if<is_native_object_type<T>::value, typename T::native_object_type>::type get_native_object( const T &t ) {\n    return t.native_object();\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_native_object_type<T>::value, T>::type get_native_object( T t ) {\n    return t;\n}\n\n// send_if_memory_object checks if the T type has memory_object_type and call the send method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, opencl_async_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.send( device, d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, T &t ) {\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, typename mem_obj_t::opencl_factory_type> dmsg( mem_obj );\n    mem_obj.send( device, dmsg );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device, T& ) {};\n\n// receive_if_memory_object checks if the T type has memory_object_type and call the receive method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type receive_if_memory_object( const opencl_async_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.receive( d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type  receive_if_memory_object( const T& ) {}\n\nclass opencl_range {\npublic:\n    typedef size_t range_index_type;\n    typedef std::array<range_index_type, 3> nd_range_type;\n\n    template <typename G = std::initializer_list<int>, typename L = std::initializer_list<int>,\n        typename = typename std::enable_if<!std::is_same<typename std::decay<G>::type, opencl_range>::value>::type>\n    opencl_range(G&& global_work = std::initializer_list<int>({ 0 }), L&& local_work = std::initializer_list<int>({ 0, 0, 0 })) {\n        auto g_it = global_work.begin();\n        auto l_it = local_work.begin();\n        my_global_work_size = { size_t(-1), size_t(-1), size_t(-1) };\n        // my_local_work_size is still uninitialized\n        for (int s = 0; s < 3 && g_it != global_work.end(); ++g_it, ++l_it, ++s) {\n            __TBB_ASSERT(l_it != local_work.end(), \"global_work & local_work must have same size\");\n            my_global_work_size[s] = *g_it;\n            my_local_work_size[s] = *l_it;\n        }\n    }\n\n    const nd_range_type& global_range() const { return my_global_work_size; }\n    const nd_range_type& local_range() const { return my_local_work_size; }\n\nprivate:\n    nd_range_type my_global_work_size;\n    nd_range_type my_local_work_size;\n};\n\ntemplate <typename DeviceFilter>\nclass opencl_factory {\npublic:\n    template<typename T> using async_msg_type = opencl_async_msg<T, opencl_factory<DeviceFilter>>;\n    typedef opencl_device device_type;\n\n    class kernel : tbb::internal::no_assign {\n    public:\n        kernel( const kernel& k ) : my_factory( k.my_factory ) {\n            // Clone my_cl_kernel via opencl_program\n            size_t ret_size = 0;\n\n            std::vector<char> kernel_name;\n            for ( size_t curr_size = 32;; curr_size <<= 1 ) {\n                kernel_name.resize( curr_size <<= 1 );\n                enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), \"Failed to get kernel info\" );\n                if ( ret_size < curr_size ) break;\n            }\n\n            cl_program program;\n            enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_PROGRAM, sizeof(program), &program, &ret_size ), \"Failed to get kernel info\" );\n            __TBB_ASSERT( ret_size == sizeof(program), NULL );\n\n            my_cl_kernel = opencl_program< factory_type >( my_factory, program ).get_cl_kernel( kernel_name.data() );\n        }\n\n        ~kernel() {\n            enforce_cl_retcode( clReleaseKernel( my_cl_kernel ), \"Failed to release a kernel\" );\n        }\n\n    private:\n        typedef opencl_factory<DeviceFilter> factory_type;\n\n        kernel( const cl_kernel& k, factory_type& f ) : my_cl_kernel( k ), my_factory( f ) {}\n\n        // Data\n        cl_kernel my_cl_kernel;\n        factory_type& my_factory;\n\n        template <typename DeviceFilter_>\n        friend class opencl_factory;\n\n        template <typename Factory>\n        friend class opencl_program;\n    };\n\n    typedef kernel kernel_type;\n\n    // 'range_type' enables kernel_executor with range support\n    // it affects expectations for enqueue_kernel(.....) interface method\n    typedef opencl_range range_type;\n\n    opencl_factory() {}\n    ~opencl_factory() {\n        if ( my_devices.size() ) {\n            for ( auto d = my_devices.begin(); d != my_devices.end(); ++d ) {\n                enforce_cl_retcode( clReleaseCommandQueue( (*d).my_cl_command_queue ), \"Failed to release a command queue\" );\n            }\n            enforce_cl_retcode( clReleaseContext( my_cl_context ), \"Failed to release a context\" );\n        }\n    }\n\n    bool init( const opencl_device_list &device_list ) {\n        tbb::spin_mutex::scoped_lock lock( my_devices_mutex );\n        if ( !my_devices.size() ) {\n            my_devices = device_list;\n            return true;\n        }\n        return false;\n    }\n\n\nprivate:\n    template <typename Factory>\n    void enqueue_map_buffer( opencl_device device, opencl_buffer_impl<Factory> &buffer, opencl_async_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        cl_int err;\n        void *ptr = clEnqueueMapBuffer( device.my_cl_command_queue, buffer.get_cl_mem(), false, CL_MAP_READ | CL_MAP_WRITE, 0, buffer.size(),\n            e1 == NULL ? 0 : 1, e1, &e2, &err );\n        enforce_cl_retcode( err, \"Failed to map a buffer\" );\n        dmsg.data( false ) = ptr;\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n\n    template <typename Factory>\n    void enqueue_unmap_buffer( opencl_device device, opencl_memory<Factory> &memory, opencl_async_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        enforce_cl_retcode(\n            clEnqueueUnmapMemObject( device.my_cl_command_queue, memory.get_cl_mem(), memory.get_host_ptr(), e1 == NULL ? 0 : 1, e1, &e2 ),\n           \"Failed to unmap a buffer\" );\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n    // --------- Kernel argument & event list helpers --------- //\n    template <size_t NUM_ARGS, typename T>\n    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>&, int&, int& place, const T& t ) {\n        auto p = get_native_object(t);\n        enforce_cl_retcode( clSetKernelArg(kernel.my_cl_kernel, place++, sizeof(p), &p), \"Failed to set a kernel argument\" );\n    }\n\n    template <size_t NUM_ARGS, typename T, typename F>\n    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const opencl_async_msg<T, F>& msg ) {\n        __TBB_ASSERT((static_cast<typename std::array<cl_event, NUM_ARGS>::size_type>(num_events) < events.size()), NULL);\n\n        const cl_event * const e = msg.get_event();\n        if (e != NULL) {\n            events[num_events++] = *e;\n        }\n\n        process_one_arg( kernel, events, num_events, place, msg.data(false) );\n    }\n\n    template <size_t NUM_ARGS, typename T, typename ...Rest>\n    void process_arg_list( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const T& t, const Rest&... args ) {\n        process_one_arg( kernel, events, num_events, place, t );\n        process_arg_list( kernel, events, num_events, place, args... );\n    }\n\n    template <size_t NUM_ARGS>\n    void process_arg_list( const kernel_type&, std::array<cl_event, NUM_ARGS>&, int&, int& ) {}\n    // ------------------------------------------- //\n    template <typename T>\n    void update_one_arg( cl_event, T& ) {}\n\n    template <typename T, typename F>\n    void update_one_arg( cl_event e, opencl_async_msg<T, F>& msg ) {\n        msg.set_event( e );\n    }\n\n    template <typename T, typename ...Rest>\n    void update_arg_list( cl_event e, T& t, Rest&... args ) {\n        update_one_arg( e, t );\n        update_arg_list( e, args... );\n    }\n\n    void update_arg_list( cl_event ) {}\n    // ------------------------------------------- //\npublic:\n    template <typename ...Args>\n    void send_kernel( opencl_device device, const kernel_type& kernel, const range_type& work_size, Args&... args ) {\n        std::array<cl_event, sizeof...(Args)> events;\n        int num_events = 0;\n        int place = 0;\n        process_arg_list( kernel, events, num_events, place, args... );\n\n        const cl_event e = send_kernel_impl( device, kernel.my_cl_kernel, work_size, num_events, events.data() );\n\n        update_arg_list(e, args...);\n\n        // Release our own reference to cl_event\n        enforce_cl_retcode( clReleaseEvent(e), \"Failed to release an event\" );\n    }\n\n    // ------------------------------------------- //\n    template <typename T, typename ...Rest>\n    void send_data(opencl_device device, T& t, Rest&... args) {\n        send_if_memory_object( device, t );\n        send_data( device, args... );\n    }\n\n    void send_data(opencl_device) {}\n    // ------------------------------------------- //\n\nprivate:\n    cl_event send_kernel_impl( opencl_device device, const cl_kernel& kernel,\n        const range_type& work_size, cl_uint num_events, cl_event* event_list ) {\n        const typename range_type::nd_range_type g_offset = { { 0, 0, 0 } };\n        const typename range_type::nd_range_type& g_size = work_size.global_range();\n        const typename range_type::nd_range_type& l_size = work_size.local_range();\n        cl_uint s;\n        for ( s = 1; s < 3 && g_size[s] != size_t(-1); ++s) {}\n        cl_event event;\n        enforce_cl_retcode(\n            clEnqueueNDRangeKernel( device.my_cl_command_queue, kernel, s,\n                g_offset.data(), g_size.data(), l_size[0] ? l_size.data() : NULL, num_events, num_events ? event_list : NULL, &event ),\n            \"Failed to enqueue a kernel\" );\n        return event;\n    }\n\n    // ------------------------------------------- //\n    template <typename T>\n    bool get_event_from_one_arg( cl_event&, const T& ) {\n        return false;\n    }\n\n    template <typename T, typename F>\n    bool get_event_from_one_arg( cl_event& e, const opencl_async_msg<T, F>& msg) {\n        cl_event const *e_ptr = msg.get_event();\n\n        if ( e_ptr != NULL ) {\n            e = *e_ptr;\n            return true;\n        }\n\n        return false;\n    }\n\n    template <typename T, typename ...Rest>\n    bool get_event_from_args( cl_event& e, const T& t, const Rest&... args ) {\n        if ( get_event_from_one_arg( e, t ) ) {\n            return true;\n        }\n\n        return get_event_from_args( e, args... );\n    }\n\n    bool get_event_from_args( cl_event& ) {\n        return false;\n    }\n    // ------------------------------------------- //\n\n    struct finalize_fn : tbb::internal::no_assign {\n        virtual ~finalize_fn() {}\n        virtual void operator() () {}\n    };\n\n    template<typename Fn>\n    struct finalize_fn_leaf : public finalize_fn {\n        Fn my_fn;\n        finalize_fn_leaf(Fn fn) : my_fn(fn) {}\n        void operator() () __TBB_override { my_fn(); }\n    };\n\n    static void CL_CALLBACK finalize_callback(cl_event, cl_int event_command_exec_status, void *data) {\n        tbb::internal::suppress_unused_warning(event_command_exec_status);\n        __TBB_ASSERT(event_command_exec_status == CL_COMPLETE, NULL);\n\n        finalize_fn * const fn_ptr = static_cast<finalize_fn*>(data);\n        __TBB_ASSERT(fn_ptr != NULL, \"Invalid finalize function pointer\");\n        (*fn_ptr)();\n\n        // Function pointer was created by 'new' & this callback must be called once only\n        delete fn_ptr;\n    }\npublic:\n    template <typename FinalizeFn, typename ...Args>\n    void finalize( opencl_device device, FinalizeFn fn, Args&... args ) {\n        cl_event e;\n\n        if ( get_event_from_args( e, args... ) ) {\n            enforce_cl_retcode( clSetEventCallback( e, CL_COMPLETE, finalize_callback,\n                new finalize_fn_leaf<FinalizeFn>(fn) ), \"Failed to set a callback\" );\n        }\n\n        enforce_cl_retcode( clFlush( device.my_cl_command_queue ), \"Failed to flush an OpenCL command queue\" );\n    }\n\n    const opencl_device_list& devices() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_devices;\n    }\n\nprivate:\n    bool is_same_context( opencl_device::device_id_type d1, opencl_device::device_id_type d2 ) {\n        __TBB_ASSERT( d1 != opencl_device::unknown && d2 != opencl_device::unknown, NULL );\n        // Currently, factory supports only one context so if the both devices are not host it means the are in the same context.\n        if ( d1 != opencl_device::host && d2 != opencl_device::host )\n            return true;\n        return d1 == d2;\n    }\nprivate:\n    opencl_factory( const opencl_factory& );\n    opencl_factory& operator=(const opencl_factory&);\n\n    cl_context context() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_cl_context;\n    }\n\n    void init_once() {\n        {\n            tbb::spin_mutex::scoped_lock lock(my_devices_mutex);\n            if (!my_devices.size())\n                my_devices = DeviceFilter()( opencl_info::available_devices() );\n        }\n\n        enforce_cl_retcode(my_devices.size() ? CL_SUCCESS : CL_INVALID_DEVICE, \"No devices in the device list\");\n        cl_platform_id platform_id = my_devices.begin()->platform_id();\n        for (opencl_device_list::iterator it = ++my_devices.begin(); it != my_devices.end(); ++it)\n            enforce_cl_retcode(it->platform_id() == platform_id ? CL_SUCCESS : CL_INVALID_PLATFORM, \"All devices should be in the same platform\");\n\n        std::vector<cl_device_id> cl_device_ids;\n        for (auto d = my_devices.begin(); d != my_devices.end(); ++d) {\n            cl_device_ids.push_back((*d).my_cl_device_id);\n        }\n\n        cl_context_properties context_properties[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform_id, (cl_context_properties)NULL };\n        cl_int err;\n        cl_context ctx = clCreateContext(context_properties,\n            (cl_uint)cl_device_ids.size(),\n            cl_device_ids.data(),\n            NULL, NULL, &err);\n        enforce_cl_retcode(err, \"Failed to create context\");\n        my_cl_context = ctx;\n\n        size_t device_counter = 0;\n        for (auto d = my_devices.begin(); d != my_devices.end(); d++) {\n            (*d).my_device_id = device_counter++;\n            cl_int err2;\n            cl_command_queue cq;\n#if CL_VERSION_2_0\n            if ((*d).major_version() >= 2) {\n                if ((*d).out_of_order_exec_mode_on_host_present()) {\n                    cl_queue_properties props[] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 };\n                    cq = clCreateCommandQueueWithProperties(ctx, (*d).my_cl_device_id, props, &err2);\n                } else {\n                    cl_queue_properties props[] = { 0 };\n                    cq = clCreateCommandQueueWithProperties(ctx, (*d).my_cl_device_id, props, &err2);\n                }\n            } else\n#endif\n            {\n                cl_command_queue_properties props = (*d).out_of_order_exec_mode_on_host_present() ? CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE : 0;\n                // Suppress \"declared deprecated\" warning for the next line.\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( push )\n#if __INTEL_COMPILER\n#pragma warning (disable: 1478)\n#else\n#pragma warning (disable: 4996)\n#endif\n#endif\n                cq = clCreateCommandQueue(ctx, (*d).my_cl_device_id, props, &err2);\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( pop )\n#endif\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic pop\n#endif\n            }\n            enforce_cl_retcode(err2, \"Failed to create command queue\");\n            (*d).my_cl_command_queue = cq;\n        }\n    }\n\n    std::once_flag my_once_flag;\n    opencl_device_list my_devices;\n    cl_context my_cl_context;\n\n    tbb::spin_mutex my_devices_mutex;\n\n    template <typename Factory>\n    friend class opencl_program;\n    template <typename Factory>\n    friend class opencl_buffer_impl;\n    template <typename Factory>\n    friend class opencl_memory;\n}; // class opencl_factory\n\n// TODO: consider this namespace as public API\nnamespace opencl_info {\n\n// Default types\n\ntemplate <typename Factory>\nstruct default_device_selector {\n    opencl_device operator()(Factory& f) {\n        __TBB_ASSERT(!f.devices().empty(), \"No available devices\");\n        return *(f.devices().begin());\n    }\n};\n\nstruct default_device_filter {\n    opencl_device_list operator()(const opencl_device_list &devices) {\n        opencl_device_list dl;\n        cl_platform_id platform_id = devices.begin()->platform_id();\n        for (opencl_device_list::const_iterator it = devices.cbegin(); it != devices.cend(); ++it) {\n            if (it->platform_id() == platform_id) {\n                dl.add(*it);\n            }\n        }\n        return dl;\n    }\n};\n\nclass default_opencl_factory : public opencl_factory < default_device_filter >, tbb::internal::no_copy {\npublic:\n    template<typename T> using async_msg_type = opencl_async_msg<T, default_opencl_factory>;\n\n    friend default_opencl_factory& default_factory();\n\nprivate:\n    default_opencl_factory() = default;\n};\n\ninline default_opencl_factory& default_factory() {\n    static default_opencl_factory default_factory;\n    return default_factory;\n}\n\n} // namespace opencl_info\n\ntemplate <typename T, typename Factory>\nopencl_buffer<T, Factory>::opencl_buffer( size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), opencl_info::default_factory() ) ) {}\n\n\nenum class opencl_program_type {\n    SOURCE,\n    PRECOMPILED,\n    SPIR\n};\n\ntemplate <typename Factory = opencl_info::default_opencl_factory>\nclass opencl_program : tbb::internal::no_assign {\npublic:\n    typedef typename Factory::kernel_type kernel_type;\n\n    opencl_program( Factory& factory, opencl_program_type type, const std::string& program_name ) : my_factory( factory ), my_type(type) , my_arg_str( program_name) {}\n    opencl_program( Factory& factory, const char* program_name ) : opencl_program( factory, std::string( program_name ) ) {}\n    opencl_program( Factory& factory, const std::string& program_name ) : opencl_program( factory, opencl_program_type::SOURCE, program_name ) {}\n\n    opencl_program( opencl_program_type type, const std::string& program_name ) : opencl_program( opencl_info::default_factory(), type, program_name ) {}\n    opencl_program( const char* program_name ) : opencl_program( opencl_info::default_factory(), program_name ) {}\n    opencl_program( const std::string& program_name ) : opencl_program( opencl_info::default_factory(), program_name ) {}\n    opencl_program( opencl_program_type type ) : opencl_program( opencl_info::default_factory(), type ) {}\n\n    opencl_program( const opencl_program &src ) : my_factory( src.my_factory ), my_type( src.type ), my_arg_str( src.my_arg_str ), my_cl_program( src.my_cl_program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\n\n    kernel_type get_kernel( const std::string& k ) const {\n        return kernel_type( get_cl_kernel(k), my_factory );\n    }\n\nprivate:\n    opencl_program( Factory& factory, cl_program program ) : my_factory( factory ), my_cl_program( program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\n\n    cl_kernel get_cl_kernel( const std::string& k ) const {\n        std::call_once( my_do_once_flag, [this, &k](){ this->init( k ); } );\n        cl_int err;\n        cl_kernel kernel = clCreateKernel( my_cl_program, k.c_str(), &err );\n        enforce_cl_retcode( err, std::string( \"Failed to create kernel: \" ) + k );\n        return kernel;\n    }\n\n    class file_reader {\n    public:\n        file_reader( const std::string& filepath ) {\n            std::ifstream file_descriptor( filepath, std::ifstream::binary );\n            if ( !file_descriptor.is_open() ) {\n                std::string str = std::string( \"Could not open file: \" ) + filepath;\n                std::cerr << str << std::endl;\n                throw str;\n            }\n            file_descriptor.seekg( 0, file_descriptor.end );\n            size_t length = size_t( file_descriptor.tellg() );\n            file_descriptor.seekg( 0, file_descriptor.beg );\n            my_content.resize( length );\n            char* begin = &*my_content.begin();\n            file_descriptor.read( begin, length );\n            file_descriptor.close();\n        }\n        const char* content() { return &*my_content.cbegin(); }\n        size_t length() { return my_content.length(); }\n    private:\n        std::string my_content;\n    };\n\n    class opencl_program_builder {\n    public:\n        typedef void (CL_CALLBACK *cl_callback_type)(cl_program, void*);\n        opencl_program_builder( Factory& f, const std::string& name, cl_program program,\n                                cl_uint num_devices, cl_device_id* device_list,\n                                const char* options, cl_callback_type callback,\n                                void* user_data ) {\n            cl_int err = clBuildProgram( program, num_devices, device_list, options,\n                                         callback, user_data );\n            if( err == CL_SUCCESS )\n                return;\n            std::string str = std::string( \"Failed to build program: \" ) + name;\n            if ( err == CL_BUILD_PROGRAM_FAILURE ) {\n                const opencl_device_list &devices = f.devices();\n                for ( auto d = devices.begin(); d != devices.end(); ++d ) {\n                    std::cerr << \"Build log for device: \" << (*d).name() << std::endl;\n                    size_t log_size;\n                    cl_int query_err = clGetProgramBuildInfo(\n                        program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG, 0, NULL,\n                        &log_size );\n                    enforce_cl_retcode( query_err, \"Failed to get build log size\" );\n                    if( log_size ) {\n                        std::vector<char> output;\n                        output.resize( log_size );\n                        query_err = clGetProgramBuildInfo(\n                            program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG,\n                            output.size(), output.data(), NULL );\n                        enforce_cl_retcode( query_err, \"Failed to get build output\" );\n                        std::cerr << output.data() << std::endl;\n                    } else {\n                        std::cerr << \"No build log available\" << std::endl;\n                    }\n                }\n            }\n            enforce_cl_retcode( err, str );\n        }\n    };\n\n    class opencl_device_filter {\n    public:\n        template<typename Filter>\n        opencl_device_filter( cl_uint& num_devices, cl_device_id* device_list,\n                              Filter filter, const char* message ) {\n            for ( cl_uint i = 0; i < num_devices; ++i )\n                if ( filter(device_list[i]) ) {\n                    device_list[i--] = device_list[--num_devices];\n                }\n            if ( !num_devices )\n                enforce_cl_retcode( CL_DEVICE_NOT_AVAILABLE, message );\n        }\n    };\n\n    void init( const std::string& ) const {\n        cl_uint num_devices;\n        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_NUM_DEVICES, sizeof( num_devices ), &num_devices, NULL ),\n            \"Failed to get OpenCL context info\" );\n        if ( !num_devices )\n            enforce_cl_retcode( CL_DEVICE_NOT_FOUND, \"No supported devices found\" );\n        cl_device_id *device_list = (cl_device_id *)alloca( num_devices*sizeof( cl_device_id ) );\n        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_DEVICES, num_devices*sizeof( cl_device_id ), device_list, NULL ),\n            \"Failed to get OpenCL context info\" );\n        const char *options = NULL;\n        switch ( my_type ) {\n        case opencl_program_type::SOURCE: {\n            file_reader fr( my_arg_str );\n            const char *s[] = { fr.content() };\n            const size_t l[] = { fr.length() };\n            cl_int err;\n            my_cl_program = clCreateProgramWithSource( my_factory.context(), 1, s, l, &err );\n            enforce_cl_retcode( err, std::string( \"Failed to create program: \" ) + my_arg_str );\n            opencl_device_filter(\n                num_devices, device_list,\n                []( const opencl_device& d ) -> bool {\n                    return !d.compiler_available() || !d.linker_available();\n                }, \"No one device supports building program from sources\" );\n            opencl_program_builder(\n                my_factory, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        case opencl_program_type::SPIR:\n            options = \"-x spir\";\n        case opencl_program_type::PRECOMPILED: {\n            file_reader fr( my_arg_str );\n            std::vector<const unsigned char*> s(\n                num_devices, reinterpret_cast<const unsigned char*>(fr.content()) );\n            std::vector<size_t> l( num_devices, fr.length() );\n            std::vector<cl_int> bin_statuses( num_devices, -1 );\n            cl_int err;\n            my_cl_program = clCreateProgramWithBinary( my_factory.context(), num_devices,\n                                                       device_list, l.data(), s.data(),\n                                                       bin_statuses.data(), &err );\n            if( err != CL_SUCCESS ) {\n                std::string statuses_str;\n                for (auto st = bin_statuses.begin(); st != bin_statuses.end(); ++st) {\n                    statuses_str += std::to_string((*st));\n                }\n\n                enforce_cl_retcode( err, std::string( \"Failed to create program, error \" + std::to_string( err ) + \" : \" ) + my_arg_str +\n                                    std::string( \", binary_statuses = \" ) + statuses_str );\n            }\n            opencl_program_builder(\n                my_factory, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        default:\n            __TBB_ASSERT( false, \"Unsupported program type\" );\n        }\n    }\n\n    Factory& my_factory;\n    opencl_program_type my_type;\n    std::string my_arg_str;\n    mutable cl_program my_cl_program;\n    mutable std::once_flag my_do_once_flag;\n\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n\n    template <typename DeviceFilter>\n    friend class opencl_factory<DeviceFilter>::kernel;\n};\n\ntemplate<typename... Args>\nclass opencl_node;\n\ntemplate<typename JP, typename Factory, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP, Factory > : public streaming_node< tuple<Ports...>, JP, Factory > {\n    typedef streaming_node < tuple<Ports...>, JP, Factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n\n    opencl_node( graph &g, const kernel_type& kernel, Factory &f )\n        : base_type( g, kernel, opencl_info::default_device_selector <Factory >(), f )\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d, Factory &f)\n        : base_type( g, kernel, d, f)\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n};\n\ntemplate<typename JP, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP > : public opencl_node < tuple<Ports...>, JP, opencl_info::default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, JP, opencl_info::default_opencl_factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {}\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d )\n        : base_type( g, kernel, d, opencl_info::default_factory() )\n    {}\n};\n\ntemplate<typename... Ports>\nclass opencl_node< tuple<Ports...> > : public opencl_node < tuple<Ports...>, queueing, opencl_info::default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, queueing, opencl_info::default_opencl_factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {}\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d )\n        : base_type( g, kernel, d, opencl_info::default_factory() )\n    {}\n};\n\n} // namespace interface10\n\nusing interface10::opencl_node;\nusing interface10::read_only;\nusing interface10::read_write;\nusing interface10::write_only;\nusing interface10::opencl_buffer;\nusing interface10::opencl_subbuffer;\nusing interface10::opencl_device;\nusing interface10::opencl_device_list;\nusing interface10::opencl_program;\nusing interface10::opencl_program_type;\nusing interface10::opencl_async_msg;\nusing interface10::opencl_factory;\nusing interface10::opencl_range;\n\n} // namespace flow\n} // namespace tbb\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n\n#endif // __TBB_flow_graph_opencl_node_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/gfx_factory.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_gfx_factory_H\n#define __TBB_flow_graph_gfx_factory_H\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_PREVIEW_GFX_FACTORY\n\n#include <vector>\n#include <future>\n#include <mutex>\n#include <iostream>\n\n#include <gfx/gfx_rt.h>\n#include <gfx/gfx_intrin.h>\n#include <gfx/gfx_types.h>\n\nnamespace tbb {\n\nnamespace flow {\n\nnamespace interface9 {\n\ntemplate <typename T>\nclass gfx_buffer;\n\nnamespace gfx_offload {\n\n    typedef GfxTaskId task_id_type;\n\n    //-----------------------------------------------------------------------\n    // GFX errors checkers.\n    // For more debug output, set GFX_LOG_OFFLOAD=2 macro\n    //-----------------------------------------------------------------------\n\n    // TODO: reconsider error handling approach. If exception is the right way\n    // then need to define and document a specific exception type.\n    inline void throw_gfx_exception() {\n        std::string msg = \"GFX error occurred: \" + std::to_string(_GFX_get_last_error());\n        std::cerr << msg << std::endl;\n        throw msg;\n    }\n\n    inline void check_enqueue_retcode(task_id_type err) {\n        if (err == 0) {\n            throw_gfx_exception();\n        }\n    }\n\n    inline void check_gfx_retcode(task_id_type err) {\n        if (err != GFX_SUCCESS) {\n            throw_gfx_exception();\n        }\n    }\n\n    //---------------------------------------------------------------------\n    // GFX asynchronous offload and share API\n    //---------------------------------------------------------------------\n\n    // Sharing and unsharing data API\n    template<typename DataType, typename SizeType>\n    void share(DataType* p, SizeType n) { check_gfx_retcode(_GFX_share(p, sizeof(*p)*n)); }\n    template<typename DataType>\n    void unshare(DataType* p) { check_gfx_retcode(_GFX_unshare(p)); }\n\n    // Retrieving array pointer from shared gfx_buffer\n    // Other types remain the same\n    template <typename T>\n    T* raw_data(gfx_buffer<T>& buffer) { return buffer.data(); }\n    template <typename T>\n    const T* raw_data(const gfx_buffer<T>& buffer) { return buffer.data(); }\n    template <typename T>\n    T& raw_data(T& data) { return data; }\n    template <typename T>\n    const T& raw_data(const T& data) { return data; }\n\n    // Kernel enqueuing on device with arguments\n    template <typename F, typename ...ArgType>\n    task_id_type run_kernel(F ptr, ArgType&... args) {\n        task_id_type id = _GFX_offload(ptr, raw_data(args)...);\n\n        // Check if something during offload went wrong (ex: driver initialization failure)\n        gfx_offload::check_enqueue_retcode(id);\n\n        return id;\n    }\n\n    // Waiting for tasks completion\n    void wait_for_task(task_id_type id) { check_gfx_retcode(_GFX_wait(id)); }\n\n} // namespace gfx_offload\n\ntemplate <typename T>\nclass gfx_buffer {\npublic:\n\n    typedef typename std::vector<T>::iterator iterator;\n    typedef typename std::vector<T>::const_iterator const_iterator;\n\n    typedef std::size_t size_type;\n\n    gfx_buffer() : my_vector_ptr(std::make_shared< std::vector<T> >()) {}\n    gfx_buffer(size_type size) : my_vector_ptr(std::make_shared< std::vector<T> >(size)) {}\n\n    T* data() { return &(my_vector_ptr->front()); }\n    const T* data() const { return &(my_vector_ptr->front()); }\n\n    size_type size() const { return my_vector_ptr->size(); }\n\n    const_iterator cbegin() const { return my_vector_ptr->cbegin(); }\n    const_iterator cend() const { return my_vector_ptr->cend(); }\n    iterator begin() { return my_vector_ptr->begin(); }\n    iterator end() { return my_vector_ptr->end(); }\n\n    T& operator[](size_type pos) { return (*my_vector_ptr)[pos]; }\n    const T& operator[](size_type pos) const { return (*my_vector_ptr)[pos]; }\n\nprivate:\n    std::shared_ptr< std::vector<T> > my_vector_ptr;\n};\n\ntemplate<typename T>\nclass gfx_async_msg : public tbb::flow::async_msg<T> {\npublic:\n    typedef gfx_offload::task_id_type kernel_id_type;\n\n    gfx_async_msg() : my_task_id(0) {}\n    gfx_async_msg(const T& input_data) : my_data(input_data), my_task_id(0) {}\n\n    T& data() { return my_data; }\n    const T& data() const { return my_data; }\n\n    void set_task_id(kernel_id_type id) { my_task_id = id; }\n    kernel_id_type task_id() const { return my_task_id; }\n\nprivate:\n    T my_data;\n    kernel_id_type my_task_id;\n};\n\nclass gfx_factory {\nprivate:\n\n    // Wrapper for GFX kernel which is just a function\n    class func_wrapper {\n    public:\n\n        template <typename F>\n        func_wrapper(F ptr) { my_ptr = reinterpret_cast<void*>(ptr); }\n\n        template<typename ...Args>\n        void operator()(Args&&... args) {}\n\n        operator void*() { return my_ptr; }\n\n    private:\n        void* my_ptr;\n    };\n\npublic:\n\n    // Device specific types\n    template<typename T> using async_msg_type = gfx_async_msg<T>;\n\n    typedef func_wrapper kernel_type;\n\n    // Empty device type that is needed for Factory Concept\n    // but is not used in gfx_factory\n    typedef struct {} device_type;\n\n    typedef gfx_offload::task_id_type kernel_id_type;\n\n    gfx_factory(tbb::flow::graph& g) : m_graph(g), current_task_id(0) {}\n\n    // Upload data to the device\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... args) {\n        send_data_impl(args...);\n    }\n\n    // Run kernel on the device\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& kernel, Args&... args) {\n        // Get packed T data from async_msg<T> and pass it to kernel\n        kernel_id_type id = gfx_offload::run_kernel(kernel, args.data()...);\n\n        // Set id to async_msg\n        set_kernel_id(id, args...);\n\n        // Extend the graph lifetime until the callback completion.\n        m_graph.reserve_wait();\n\n        // Mutex for future assignment\n        std::lock_guard<std::mutex> lock(future_assignment_mutex);\n\n        // Set callback that waits for kernel execution\n        callback_future = std::async(std::launch::async, &gfx_factory::callback<Args...>, this, id, args...);\n    }\n\n    // Finalization action after the kernel run\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {\n        fn();\n    }\n\n    // Empty device selector.\n    // No way to choose a device with GFX API.\n    class dummy_device_selector {\n    public:\n        device_type operator()(gfx_factory& /*factory*/) {\n            return device_type();\n        }\n    };\n\nprivate:\n\n    //---------------------------------------------------------------------\n    // Callback for kernel result\n    //---------------------------------------------------------------------\n\n    template <typename ...Args>\n    void callback(kernel_id_type id, Args... args) {\n        // Waiting for specific tasks id to complete\n        {\n            std::lock_guard<std::mutex> lock(task_wait_mutex);\n            if (current_task_id < id) {\n                gfx_offload::wait_for_task(id);\n                current_task_id = id;\n            }\n        }\n\n        // Get result from device and set to async_msg (args)\n        receive_data(args...);\n\n        // Data was sent to the graph, release the reference\n        m_graph.release_wait();\n    }\n\n    //---------------------------------------------------------------------\n    // send_data() arguments processing\n    //---------------------------------------------------------------------\n\n    // GFX buffer shared data with device that will be executed on\n    template <typename T>\n    void share_data(T) {}\n\n    template <typename T>\n    void share_data(gfx_buffer<T>& buffer) {\n        gfx_offload::share(buffer.data(), buffer.size());\n    }\n\n    template <typename T>\n    void send_arg(T) {}\n\n    template <typename T>\n    void send_arg(async_msg_type<T>& msg) {\n        share_data(msg.data());\n    }\n\n    void send_data_impl() {}\n\n    template <typename T, typename ...Rest>\n    void send_data_impl(T& arg, Rest&... args) {\n        send_arg(arg);\n        send_data_impl(args...);\n    }\n\n    //----------------------------------------------------------------------\n    // send_kernel() arguments processing\n    //----------------------------------------------------------------------\n\n    template <typename T>\n    void set_kernel_id_arg(kernel_id_type, T) {}\n\n    template <typename T>\n    void set_kernel_id_arg(kernel_id_type id, async_msg_type<T>& msg) {\n        msg.set_task_id(id);\n    }\n\n    void set_kernel_id(kernel_id_type) {}\n\n    template <typename T, typename ...Rest>\n    void set_kernel_id(kernel_id_type id, T& arg, Rest&... args) {\n        set_kernel_id_arg(id, arg);\n        set_kernel_id(id, args...);\n    }\n\n    //-----------------------------------------------------------------------\n    // Arguments processing after kernel execution.\n    // Unsharing buffers and forwarding results to the graph\n    //-----------------------------------------------------------------------\n\n    // After kernel execution the data should be unshared\n    template <typename T>\n    void unshare_data(T) {}\n\n    template <typename T>\n    void unshare_data(gfx_buffer<T>& buffer) {\n        gfx_offload::unshare(buffer.data());\n    }\n\n    template <typename T>\n    void receive_arg(T) {}\n\n    template <typename T>\n    void receive_arg(async_msg_type<T>& msg) {\n        unshare_data(msg.data());\n        msg.set(msg.data());\n    }\n\n    void receive_data() {}\n\n    template <typename T, typename ...Rest>\n    void receive_data(T& arg, Rest&... args) {\n        receive_arg(arg);\n        receive_data(args...);\n    }\n\n    //-----------------------------------------------------------------------\n    int current_task_id;\n\n    std::future<void> callback_future;\n    tbb::flow::graph& m_graph;\n\n    std::mutex future_assignment_mutex;\n    std::mutex task_wait_mutex;\n};\n\n} // namespace interface9\n\nusing interface9::gfx_factory;\nusing interface9::gfx_buffer;\n\n} // namespace flow\n\n} // namespace tbb\n\n#endif // __TBB_PREVIEW_GFX_FACTORY\n\n#endif // __TBB_flow_graph_gfx_factory_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/global_control.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_global_control_H\n#define __TBB_global_control_H\n\n#if !TBB_PREVIEW_GLOBAL_CONTROL && !__TBB_BUILD\n#error Set TBB_PREVIEW_GLOBAL_CONTROL before including global_control.h\n#endif\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace interface9 {\n\nclass global_control {\npublic:\n    enum parameter {\n        max_allowed_parallelism,\n        thread_stack_size,\n        parameter_max // insert new parameters above this point\n    };\n\n    global_control(parameter p, size_t value) :\n        my_value(value), my_next(NULL), my_param(p) {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (p==thread_stack_size)\n            return;\n#elif __TBB_x86_64 && (_WIN32 || _WIN64)\n        if (p==thread_stack_size)\n            __TBB_ASSERT_RELEASE((unsigned)value == value, \"Stack size is limited to unsigned int range\");\n#endif\n        if (my_param==max_allowed_parallelism)\n            __TBB_ASSERT_RELEASE(my_value>0, \"max_allowed_parallelism cannot be 0.\");\n        internal_create();\n    }\n\n    ~global_control() {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter. Probably the object was corrupted.\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (my_param==thread_stack_size)\n            return;\n#endif\n        internal_destroy();\n    }\n\n    static size_t active_value(parameter p) {\n        __TBB_ASSERT(p < parameter_max, \"Invalid parameter\");\n        return active_value((int)p);\n    }\nprivate:\n    size_t    my_value;\n    global_control *my_next;\n    parameter my_param;\n\n    void __TBB_EXPORTED_METHOD internal_create();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n    static size_t __TBB_EXPORTED_FUNC active_value(int param);\n};\n} // namespace interface9\n\nusing interface9::global_control;\n\n} // tbb\n\n#endif // __TBB_global_control_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks classes and functions.\n\n<BR><A HREF=\".\">Click here</A> to see all files in the directory.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"compat\">compat</A>\n<DD>Include files for source level compatibility with other frameworks.\n<DT><A HREF=\"internal\">internal</A>\n<DD>Include files with implementation details; not for direct use.\n<DT><A HREF=\"machine\">machine</A>\n<DD>Include files for low-level architecture specific functionality; not for direct use.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_aggregator_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__aggregator_impl_H\n#define __TBB__aggregator_impl_H\n\n#include \"../atomic.h\"\n#if !__TBBMALLOC_BUILD\n#include \"../tbb_profiling.h\"\n#endif\n\nnamespace tbb {\nnamespace interface6 {\nnamespace internal {\n\nusing namespace tbb::internal;\n\n//! aggregated_operation base class\ntemplate <typename Derived>\nclass aggregated_operation {\n public:\n    //! Zero value means \"wait\" status, all other values are \"user\" specified values and are defined into the scope of a class which uses \"status\".\n    uintptr_t status;\n\n    Derived *next;\n    aggregated_operation() : status(0), next(NULL) {}\n};\n\n//! Aggregator base class\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread.  operation_type must be derived from\n    aggregated_operation. The parameter handler_type is a functor that will be passed the\n    list of operations and is expected to handle each operation appropriately, setting the\n    status of each operation to non-zero.*/\ntemplate < typename operation_type >\nclass aggregator_generic {\npublic:\n    aggregator_generic() : handler_busy(false) { pending_operations = NULL; }\n\n    //! Execute an operation\n    /** Places an operation into the waitlist (pending_operations), and either handles the list,\n        or waits for the operation to complete, or returns.\n        The long_life_time parameter specifies the life time of the given operation object.\n        Operations with long_life_time == true may be accessed after execution.\n        A \"short\" life time operation (long_life_time == false) can be destroyed\n        during execution, and so any access to it after it was put into the waitlist,\n        including status check, is invalid. As a consequence, waiting for completion\n        of such operation causes undefined behavior.\n    */\n    template < typename handler_type >\n    void execute(operation_type *op, handler_type &handle_operations, bool long_life_time = true) {\n        operation_type *res;\n        // op->status should be read before inserting the operation into the\n        // aggregator waitlist since it can become invalid after executing a\n        // handler (if the operation has 'short' life time.)\n        const uintptr_t status = op->status;\n\n        // ITT note: &(op->status) tag is used to cover accesses to this op node. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op->status));\n        // insert the operation in the queue.\n        do {\n            // Tools may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op->next = res = pending_operations; // NOT A RACE\n        } while (pending_operations.compare_and_swap(op, res) != res);\n        if (!res) { // first in the list; handle the operations.\n            // ITT note: &pending_operations tag covers access to the handler_busy flag,\n            // which this waiting handler thread will try to set before entering\n            // handle_operations.\n            call_itt_notify(acquired, &pending_operations);\n            start_handle_operations(handle_operations);\n            // The operation with 'short' life time can already be destroyed.\n            if (long_life_time)\n                __TBB_ASSERT(op->status, NULL);\n        }\n        // not first; wait for op to be ready.\n        else if (!status) { // operation is blocking here.\n            __TBB_ASSERT(long_life_time, \"Waiting for an operation object that might be destroyed during processing.\");\n            call_itt_notify(prepare, &(op->status));\n            spin_wait_while_eq(op->status, uintptr_t(0));\n            itt_load_word_with_acquire(op->status);\n        }\n    }\n\n private:\n    //! An atomically updated list (aka mailbox) of pending operations\n    atomic<operation_type *> pending_operations;\n    //! Controls thread access to handle_operations\n    uintptr_t handler_busy;\n\n    //! Trigger the handling of operations when the handler is free\n    template < typename handler_type >\n    void start_handle_operations( handler_type &handle_operations ) {\n        operation_type *op_list;\n\n        // ITT note: &handler_busy tag covers access to pending_operations as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in pending_operations have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get the handler_busy:\n        // only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &pending_operations tag covers access to the handler_busy flag\n        // itself. Capturing the state of the pending_operations signifies that\n        // handler_busy has been set and a new active handler will now process that list's\n        // operations.\n        call_itt_notify(releasing, &pending_operations);\n        // grab pending_operations\n        op_list = pending_operations.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(op_list);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\ntemplate < typename handler_type, typename operation_type >\nclass aggregator : public aggregator_generic<operation_type> {\n    handler_type handle_operations;\npublic:\n    aggregator() {}\n    explicit aggregator(handler_type h) : handle_operations(h) {}\n\n    void initialize_handler(handler_type h) { handle_operations = h; }\n\n    void execute(operation_type *op) {\n        aggregator_generic<operation_type>::execute(op, handle_operations);\n    }\n};\n\n// the most-compatible friend declaration (vs, gcc, icc) is\n//    template<class U, class V> friend class aggregating_functor;\ntemplate<typename aggregating_class, typename operation_list>\nclass aggregating_functor {\n    aggregating_class *fi;\npublic:\n    aggregating_functor() {}\n    aggregating_functor(aggregating_class *fi_) : fi(fi_) {}\n    void operator()(operation_list* op_list) { fi->handle_operations(op_list); }\n};\n\n} // namespace internal\n} // namespace interface6\n\nnamespace internal {\n    using interface6::internal::aggregated_operation;\n    using interface6::internal::aggregator_generic;\n    using interface6::internal::aggregator;\n    using interface6::internal::aggregating_functor;\n} // namespace internal\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_concurrent_queue_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__concurrent_queue_impl_H\n#define __TBB__concurrent_queue_impl_H\n\n#ifndef __TBB_concurrent_queue_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../atomic.h\"\n#include \"../spin_mutex.h\"\n#include \"../cache_aligned_allocator.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n#include <new>\n#include __TBB_STD_SWAP_HEADER\n#include <iterator>\n\nnamespace tbb {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n\n// forward declaration\nnamespace strict_ppl {\ntemplate<typename T, typename A> class concurrent_queue;\n}\n\ntemplate<typename T, typename A> class concurrent_bounded_queue;\n\n#endif\n\n//! For internal use only.\nnamespace strict_ppl {\n\n//! @cond INTERNAL\nnamespace internal {\n\nusing namespace tbb::internal;\n\ntypedef size_t ticket;\n\ntemplate<typename T> class micro_queue ;\ntemplate<typename T> class micro_queue_pop_finalizer ;\ntemplate<typename T> class concurrent_queue_base_v3;\ntemplate<typename T> struct concurrent_queue_rep;\n\n//! parts of concurrent_queue_rep that do not have references to micro_queue\n/**\n * For internal use only.\n */\nstruct concurrent_queue_rep_base : no_copy {\n    template<typename T> friend class micro_queue;\n    template<typename T> friend class concurrent_queue_base_v3;\n\nprotected:\n    //! Approximately n_queue/golden ratio\n    static const size_t phi = 3;\n\npublic:\n    // must be power of 2\n    static const size_t n_queue = 8;\n\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    atomic<ticket> head_counter;\n    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n    atomic<ticket> tail_counter;\n    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    //! number of invalid entries in the queue\n    atomic<size_t> n_invalid_entries;\n\n    char pad3[NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(atomic<size_t>)];\n} ;\n\ninline bool is_valid_page(const concurrent_queue_rep_base::page* p) {\n    return uintptr_t(p)>1;\n}\n\n//! Abstract class to define interface for page allocation/deallocation\n/**\n * For internal use only.\n */\nclass concurrent_queue_page_allocator\n{\n    template<typename T> friend class micro_queue ;\n    template<typename T> friend class micro_queue_pop_finalizer ;\nprotected:\n    virtual ~concurrent_queue_page_allocator() {}\nprivate:\n    virtual concurrent_queue_rep_base::page* allocate_page() = 0;\n    virtual void deallocate_page( concurrent_queue_rep_base::page* p ) = 0;\n} ;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n// unary minus operator applied to unsigned type, result still unsigned\n#pragma warning( push )\n#pragma warning( disable: 4146 )\n#endif\n\n//! A queue using simple locking.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\ntemplate<typename T>\nclass micro_queue : no_copy {\npublic:\n    typedef void (*item_constructor_t)(T* location, const void* src);\nprivate:\n    typedef concurrent_queue_rep_base::page page;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    void copy_item( page& dst, size_t dindex, const void* src, item_constructor_t construct_item ) {\n        construct_item( &get_ref(dst, dindex), src );\n    }\n\n    void copy_item( page& dst, size_t dindex, const page& src, size_t sindex,\n        item_constructor_t construct_item )\n    {\n        T& src_item = get_ref( const_cast<page&>(src), sindex );\n        construct_item( &get_ref(dst, dindex), static_cast<const void*>(&src_item) );\n    }\n\n    void assign_and_destroy_item( void* dst, page& src, size_t index ) {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    void spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const ;\n\npublic:\n    friend class micro_queue_pop_finalizer<T>;\n\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\n    static T& get_ref( page& p, size_t index ) {\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    atomic<page*> head_page;\n    atomic<ticket> head_counter;\n\n    atomic<page*> tail_page;\n    atomic<ticket> tail_counter;\n\n    spin_mutex page_mutex;\n\n    void push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    bool pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;\n\n    micro_queue& assign( const micro_queue& src, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    page* make_copy( concurrent_queue_base_v3<T>& base, const page* src_page, size_t begin_in_page,\n        size_t end_in_page, ticket& g_index, item_constructor_t construct_item ) ;\n\n    void invalidate_page_and_rethrow( ticket k ) ;\n};\n\ntemplate<typename T>\nvoid micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const {\n    for( atomic_backoff b(true);;b.pause() ) {\n        ticket c = counter;\n        if( c==k ) return;\n        else if( c&1 ) {\n            ++rb.n_invalid_entries;\n            throw_exception( eid_bad_last_alloc );\n        }\n    }\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    k &= -concurrent_queue_rep_base::n_queue;\n    page* p = NULL;\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page);\n    if( !index ) {\n        __TBB_TRY {\n            concurrent_queue_page_allocator& pa = base;\n            p = pa.allocate_page();\n        } __TBB_CATCH (...) {\n            ++base.my_rep->n_invalid_entries;\n            invalidate_page_and_rethrow( k );\n        }\n        p->mask = 0;\n        p->next = NULL;\n    }\n\n    if( tail_counter != k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );\n    call_itt_notify(acquired, &tail_counter);\n\n    if( p ) {\n        spin_mutex::scoped_lock lock( page_mutex );\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = p;\n        else\n            head_page = p;\n        tail_page = p;\n    } else {\n        p = tail_page;\n    }\n\n    __TBB_TRY {\n        copy_item( *p, index, item, construct_item );\n        // If no exception was thrown, mark item as present.\n        itt_hide_store_word(p->mask,  p->mask | uintptr_t(1)<<index);\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n    } __TBB_CATCH (...) {\n        ++base.my_rep->n_invalid_entries;\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n        __TBB_RETHROW();\n    }\n}\n\ntemplate<typename T>\nbool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) {\n    k &= -concurrent_queue_rep_base::n_queue;\n    if( head_counter!=k ) spin_wait_until_eq( head_counter, k );\n    call_itt_notify(acquired, &head_counter);\n    if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );\n    call_itt_notify(acquired, &tail_counter);\n    page *p = head_page;\n    __TBB_ASSERT( p, NULL );\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n    bool success = false;\n    {\n        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? p : NULL );\n        if( p->mask & uintptr_t(1)<<index ) {\n            success = true;\n            assign_and_destroy_item( dst, *p, index );\n        } else {\n            --base.my_rep->n_invalid_entries;\n        }\n    }\n    return success;\n}\n\ntemplate<typename T>\nmicro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    head_counter = src.head_counter;\n    tail_counter = src.tail_counter;\n\n    const page* srcp = src.head_page;\n    if( is_valid_page(srcp) ) {\n        ticket g_index = head_counter;\n        __TBB_TRY {\n            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;\n            size_t index = modulo_power_of_two( head_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n            size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;\n\n            head_page = make_copy( base, srcp, index, end_in_first_page, g_index, construct_item );\n            page* cur_page = head_page;\n\n            if( srcp != src.tail_page ) {\n                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {\n                    cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index, construct_item );\n                    cur_page = cur_page->next;\n                }\n\n                __TBB_ASSERT( srcp==src.tail_page, NULL );\n                size_t last_index = modulo_power_of_two( tail_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n                if( last_index==0 ) last_index = base.my_rep->items_per_page;\n\n                cur_page->next = make_copy( base, srcp, 0, last_index, g_index, construct_item );\n                cur_page = cur_page->next;\n            }\n            tail_page = cur_page;\n        } __TBB_CATCH (...) {\n            invalidate_page_and_rethrow( g_index );\n        }\n    } else {\n        head_page = tail_page = NULL;\n    }\n    return *this;\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {\n    // Append an invalid page at address 1 so that no more pushes are allowed.\n    page* invalid_page = (page*)uintptr_t(1);\n    {\n        spin_mutex::scoped_lock lock( page_mutex );\n        itt_store_word_with_release(tail_counter, k+concurrent_queue_rep_base::n_queue+1);\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = invalid_page;\n        else\n            head_page = invalid_page;\n        tail_page = invalid_page;\n    }\n    __TBB_RETHROW();\n}\n\ntemplate<typename T>\nconcurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base,\n    const concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page,\n    ticket& g_index, item_constructor_t construct_item )\n{\n    concurrent_queue_page_allocator& pa = base;\n    page* new_page = pa.allocate_page();\n    new_page->next = NULL;\n    new_page->mask = src_page->mask;\n    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )\n        if( new_page->mask & uintptr_t(1)<<begin_in_page )\n            copy_item( *new_page, begin_in_page, *src_page, begin_in_page, construct_item );\n    return new_page;\n}\n\ntemplate<typename T>\nclass micro_queue_pop_finalizer: no_copy {\n    typedef concurrent_queue_rep_base::page page;\n    ticket my_ticket;\n    micro_queue<T>& my_queue;\n    page* my_page;\n    concurrent_queue_page_allocator& allocator;\npublic:\n    micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :\n        my_ticket(k), my_queue(queue), my_page(p), allocator(b)\n    {}\n    ~micro_queue_pop_finalizer() ;\n};\n\ntemplate<typename T>\nmicro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {\n    page* p = my_page;\n    if( is_valid_page(p) ) {\n        spin_mutex::scoped_lock lock( my_queue.page_mutex );\n        page* q = p->next;\n        my_queue.head_page = q;\n        if( !is_valid_page(q) ) {\n            my_queue.tail_page = NULL;\n        }\n    }\n    itt_store_word_with_release(my_queue.head_counter, my_ticket);\n    if( is_valid_page(p) ) {\n        allocator.deallocate_page( p );\n    }\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif // warning 4146 is back\n\ntemplate<typename T> class concurrent_queue_iterator_rep ;\ntemplate<typename T> class concurrent_queue_iterator_base_v3;\n\n//! representation of concurrent_queue_base\n/**\n * the class inherits from concurrent_queue_rep_base and defines an array of micro_queue<T>'s\n */\ntemplate<typename T>\nstruct concurrent_queue_rep : public concurrent_queue_rep_base {\n    micro_queue<T> array[n_queue];\n\n    //! Map ticket to an array index\n    static size_t index( ticket k ) {\n        return k*phi%n_queue;\n    }\n\n    micro_queue<T>& choose( ticket k ) {\n        // The formula here approximates LRU in a cache-oblivious way.\n        return array[index(k)];\n    }\n};\n\n//! base class of concurrent_queue\n/**\n * The class implements the interface defined by concurrent_queue_page_allocator\n * and has a pointer to an instance of concurrent_queue_rep.\n */\ntemplate<typename T>\nclass concurrent_queue_base_v3: public concurrent_queue_page_allocator {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep<T>* my_rep;\n\n    friend struct concurrent_queue_rep<T>;\n    friend class micro_queue<T>;\n    friend class concurrent_queue_iterator_rep<T>;\n    friend class concurrent_queue_iterator_base_v3<T>;\n\nprotected:\n    typedef typename concurrent_queue_rep<T>::page page;\n\nprivate:\n    typedef typename micro_queue<T>::padded_page padded_page;\n    typedef typename micro_queue<T>::item_constructor_t item_constructor_t;\n\n    virtual page *allocate_page() __TBB_override {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        return reinterpret_cast<page*>(allocate_block ( n ));\n    }\n\n    virtual void deallocate_page( concurrent_queue_rep_base::page *p ) __TBB_override {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        deallocate_block( reinterpret_cast<void*>(p), n );\n    }\n\n    //! custom allocator\n    virtual void *allocate_block( size_t n ) = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_block( void *p, size_t n ) = 0;\n\nprotected:\n    concurrent_queue_base_v3();\n\n    virtual ~concurrent_queue_base_v3() {\n#if TBB_USE_ASSERT\n        size_t nq = my_rep->n_queue;\n        for( size_t i=0; i<nq; i++ )\n            __TBB_ASSERT( my_rep->array[i].tail_page==NULL, \"pages were not freed properly\" );\n#endif /* TBB_USE_ASSERT */\n        cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);\n    }\n\n    //! Enqueue item at tail of queue\n    void internal_push( const void* src, item_constructor_t construct_item ) {\n         concurrent_queue_rep<T>& r = *my_rep;\n         ticket k = r.tail_counter++;\n         r.choose(k).push( src, k, *this, construct_item );\n    }\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool internal_try_pop( void* dst ) ;\n\n    //! Get size of queue; result may be invalid if queue is modified concurrently\n    size_t internal_size() const ;\n\n    //! check if the queue is empty; thread safe\n    bool internal_empty() const ;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void internal_finish_clear() ;\n\n    //! Obsolete\n    void internal_throw_exception() const {\n        throw_exception( eid_bad_alloc );\n    }\n\n    //! copy or move internal representation\n    void assign( const concurrent_queue_base_v3& src, item_constructor_t construct_item ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap internal representation\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate<typename T>\nconcurrent_queue_base_v3<T>::concurrent_queue_base_v3() {\n    const size_t item_size = sizeof(T);\n    my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);\n    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, \"alignment error\" );\n    memset(static_cast<void*>(my_rep),0,sizeof(concurrent_queue_rep<T>));\n    my_rep->item_size = item_size;\n    my_rep->items_per_page = item_size<=  8 ? 32 :\n                             item_size<= 16 ? 16 :\n                             item_size<= 32 ?  8 :\n                             item_size<= 64 ?  4 :\n                             item_size<=128 ?  2 :\n                             1;\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_try_pop( void* dst ) {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket k;\n    do {\n        k = r.head_counter;\n        for(;;) {\n            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {\n                // Queue is empty\n                return false;\n            }\n            // Queue had item with ticket k when we looked.  Attempt to get that item.\n            ticket tk=k;\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (push)\n    #pragma warning (disable: 4267)\n#endif\n            k = r.head_counter.compare_and_swap( tk+1, tk );\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (pop)\n#endif\n            if( k==tk )\n                break;\n            // Another thread snatched the item, retry.\n        }\n    } while( !r.choose( k ).pop( dst, k, *this ) );\n    return true;\n}\n\ntemplate<typename T>\nsize_t concurrent_queue_base_v3<T>::internal_size() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );\n    ticket hc = r.head_counter;\n    size_t nie = r.n_invalid_entries;\n    ticket tc = r.tail_counter;\n    __TBB_ASSERT( hc!=tc || !nie, NULL );\n    ptrdiff_t sz = tc-hc-nie;\n    return sz<0 ? 0 :  size_t(sz);\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_empty() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket tc = r.tail_counter;\n    ticket hc = r.head_counter;\n    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.\n    return tc==r.tail_counter && tc==hc+r.n_invalid_entries ;\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::internal_finish_clear() {\n    concurrent_queue_rep<T>& r = *my_rep;\n    size_t nq = r.n_queue;\n    for( size_t i=0; i<nq; ++i ) {\n        page* tp = r.array[i].tail_page;\n        if( is_valid_page(tp) ) {\n            __TBB_ASSERT( r.array[i].head_page==tp, \"at most one page should remain\" );\n            deallocate_page( tp );\n            r.array[i].tail_page = NULL;\n        } else\n            __TBB_ASSERT( !is_valid_page(r.array[i].head_page), \"head page pointer corrupt?\" );\n    }\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::assign( const concurrent_queue_base_v3& src,\n    item_constructor_t construct_item )\n{\n    concurrent_queue_rep<T>& r = *my_rep;\n    r.items_per_page = src.my_rep->items_per_page;\n\n    // copy concurrent_queue_rep data\n    r.head_counter = src.my_rep->head_counter;\n    r.tail_counter = src.my_rep->tail_counter;\n    r.n_invalid_entries = src.my_rep->n_invalid_entries;\n\n    // copy or move micro_queues\n    for( size_t i = 0; i < r.n_queue; ++i )\n        r.array[i].assign( src.my_rep->array[i], *this, construct_item);\n\n    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter,\n            \"the source concurrent queue should not be concurrently modified.\" );\n}\n\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\ntemplate<typename T>\nclass concurrent_queue_iterator_rep: no_assign {\n    typedef typename micro_queue<T>::padded_page padded_page;\npublic:\n    ticket head_counter;\n    const concurrent_queue_base_v3<T>& my_queue;\n    typename concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];\n    concurrent_queue_iterator_rep( const concurrent_queue_base_v3<T>& queue ) :\n        head_counter(queue.my_rep->head_counter),\n        my_queue(queue)\n    {\n        for( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )\n            array[k] = queue.my_rep->array[k].head_page;\n    }\n\n    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.\n    bool get_item( T*& item, size_t k ) ;\n};\n\ntemplate<typename T>\nbool concurrent_queue_iterator_rep<T>::get_item( T*& item, size_t k ) {\n    if( k==my_queue.my_rep->tail_counter ) {\n        item = NULL;\n        return true;\n    } else {\n        typename concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];\n        __TBB_ASSERT(p,NULL);\n        size_t i = modulo_power_of_two( k/concurrent_queue_rep<T>::n_queue, my_queue.my_rep->items_per_page );\n        item = &micro_queue<T>::get_ref(*p,i);\n        return (p->mask & uintptr_t(1)<<i)!=0;\n    }\n}\n\n//! Constness-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\ntemplate<typename Value>\nclass concurrent_queue_iterator_base_v3 : no_assign {\n    //! Represents concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep<Value>* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\nprotected:\n    //! Pointer to current item\n    Value* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {\n#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN\n        __TBB_compiler_fence();\n#endif\n    }\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i )\n    : no_assign(), my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) ;\n\n    //! Assignment\n    void assign( const concurrent_queue_iterator_base_v3<Value>& other ) ;\n\n    //! Advance iterator one step towards tail of queue.\n    void advance() ;\n\n    //! Destructor\n    ~concurrent_queue_iterator_base_v3() {\n        cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n        my_rep = NULL;\n    }\n};\n\ntemplate<typename Value>\nconcurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) {\n    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n    new( my_rep ) concurrent_queue_iterator_rep<Value>(queue);\n    size_t k = my_rep->head_counter;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::assign( const concurrent_queue_iterator_base_v3<Value>& other ) {\n    if( my_rep!=other.my_rep ) {\n        if( my_rep ) {\n            cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n            my_rep = NULL;\n        }\n        if( other.my_rep ) {\n            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n            new( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );\n        }\n    }\n    my_item = other.my_item;\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::advance() {\n    __TBB_ASSERT( my_item, \"attempt to increment iterator past end of queue\" );\n    size_t k = my_rep->head_counter;\n    const concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;\n#if TBB_USE_ASSERT\n    Value* tmp;\n    my_rep->get_item(tmp,k);\n    __TBB_ASSERT( my_item==tmp, NULL );\n#endif /* TBB_USE_ASSERT */\n    size_t i = modulo_power_of_two( k/concurrent_queue_rep<Value>::n_queue, queue.my_rep->items_per_page );\n    if( i==queue.my_rep->items_per_page-1 ) {\n        typename concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];\n        root = root->next;\n    }\n    // advance k\n    my_rep->head_counter = ++k;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\n//! Similar to C++0x std::remove_cv\n/** \"tbb_\" prefix added to avoid overload confusion with C++0x implementations. */\ntemplate<typename T> struct tbb_remove_cv {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<volatile T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const volatile T> {typedef T type;};\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>,\n        public std::iterator<std::forward_iterator_tag,Value> {\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::strict_ppl::concurrent_queue;\n#else\npublic:\n#endif\n    //! Construct iterator pointing to head of queue.\n    explicit concurrent_queue_iterator( const concurrent_queue_base_v3<typename tbb_remove_cv<Value>::type>& queue ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor.\n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        this->assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(this->my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        this->advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal\n\n//! @endcond\n\n} // namespace strict_ppl\n\n//! @cond INTERNAL\nnamespace internal {\n\nclass concurrent_queue_rep;\nclass concurrent_queue_iterator_rep;\nclass concurrent_queue_iterator_base_v3;\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\n//! For internal use only.\n/** Type-independent portion of concurrent_queue.\n    @ingroup containers */\nclass concurrent_queue_base_v3: no_copy {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep* my_rep;\n\n    friend class concurrent_queue_rep;\n    friend struct micro_queue;\n    friend class micro_queue_pop_finalizer;\n    friend class concurrent_queue_iterator_rep;\n    friend class concurrent_queue_iterator_base_v3;\nprotected:\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    //! Capacity of the queue\n    ptrdiff_t my_capacity;\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    enum copy_specifics { copy, move };\n\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\npublic:\n#endif\n    template<typename T>\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\nprivate:\n    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;\nprotected:\n    __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );\n    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();\n\n    //! Enqueue item at tail of queue using copy operation\n    void __TBB_EXPORTED_METHOD internal_push( const void* src );\n\n    //! Dequeue item from head of queue\n    void __TBB_EXPORTED_METHOD internal_pop( void* dst );\n\n    //! Abort all pending queue operations\n    void __TBB_EXPORTED_METHOD internal_abort();\n\n    //! Attempt to enqueue item onto queue using copy operation\n    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );\n\n    //! Get size of queue\n    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;\n\n    //! Check if the queue is emtpy\n    bool __TBB_EXPORTED_METHOD internal_empty() const;\n\n    //! Set the queue capacity\n    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );\n\n    //! custom allocator\n    virtual page *allocate_page() = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_page( page *p ) = 0;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void __TBB_EXPORTED_METHOD internal_finish_clear() ;\n\n    //! throw an exception\n    void __TBB_EXPORTED_METHOD internal_throw_exception() const;\n\n    //! copy internal representation\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_base_v3& src ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap queues\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_capacity, src.my_capacity );\n        std::swap( items_per_page, src.items_per_page );\n        std::swap( item_size, src.item_size );\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Enqueues item at tail of queue using specified operation (copy or move)\n    void internal_insert_item( const void* src, copy_specifics op_type );\n\n    //! Attempts to enqueue at tail of queue using specified operation (copy or move)\n    bool internal_insert_if_not_full( const void* src, copy_specifics op_type );\n\n    //! Assigns one queue to another using specified operation (copy or move)\n    void internal_assign( const concurrent_queue_base_v3& src, copy_specifics op_type );\nprivate:\n    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n};\n\n//! For internal use only.\n/** Backward compatible modification of concurrent_queue_base_v3\n    @ingroup containers */\nclass concurrent_queue_base_v8: public concurrent_queue_base_v3 {\nprotected:\n    concurrent_queue_base_v8( size_t item_sz ) : concurrent_queue_base_v3( item_sz ) {}\n\n    //! move items\n    void __TBB_EXPORTED_METHOD move_content( concurrent_queue_base_v8& src ) ;\n\n    //! Attempt to enqueue item onto queue using move operation\n    bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full( const void* src );\n\n    //! Enqueue item at tail of queue using move operation\n    void __TBB_EXPORTED_METHOD internal_push_move( const void* src );\nprivate:\n    friend struct micro_queue;\n    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n    virtual void move_item( page& dst, size_t index, const void* src ) = 0;\n};\n\n//! Type-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\nclass concurrent_queue_iterator_base_v3 {\n    //! concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    void initialize( const concurrent_queue_base_v3& queue, size_t offset_of_data );\nprotected:\n    //! Pointer to current item\n    void* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Obsolete entry point for constructing iterator pointing to head of queue.\n    /** Does not work correctly for SSE types. */\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue );\n\n    //! Construct iterator pointing to head of queue.\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue, size_t offset_of_data );\n\n    //! Assignment\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base_v3& i );\n\n    //! Advance iterator one step towards tail of queue.\n    void __TBB_EXPORTED_METHOD advance();\n\n    //! Destructor\n    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();\n};\n\ntypedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base,\n        public std::iterator<std::forward_iterator_tag,Value> {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::concurrent_bounded_queue;\n#else\npublic:\n#endif\n\n    //! Construct iterator pointing to head of queue.\n    explicit concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :\n        concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor.\n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal;\n\n//! @endcond\n\n} // namespace tbb\n\n#endif /* __TBB__concurrent_queue_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_concurrent_unordered_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB__concurrent_unordered_impl_H\n#define __TBB__concurrent_unordered_impl_H\n#if !defined(__TBB_concurrent_unordered_map_H) && !defined(__TBB_concurrent_unordered_set_H) && !defined(__TBB_concurrent_hash_map_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <functional>   // Need std::equal_to (in ../concurrent_unordered_*.h)\n#include <string>       // For tbb_hasher\n#include <cstring>      // Need std::memset\n#include __TBB_STD_SWAP_HEADER\n\n#include \"../atomic.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_allocator.h\"\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#include \"_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate <typename T, typename Allocator>\nclass split_ordered_list;\ntemplate <typename Traits>\nclass concurrent_unordered_base;\n\n// Forward list iterators (without skipping dummy elements)\ntemplate<class Solist, typename Value>\nclass flist_iterator : public std::iterator<std::forward_iterator_tag, Value>\n{\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n    template<class M, typename V>\n    friend class flist_iterator;\n\n    typedef typename Solist::nodeptr_t nodeptr_t;\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    flist_iterator() : my_node_ptr(0) {}\n    flist_iterator( const flist_iterator<Solist, typename Solist::value_type> &other )\n        : my_node_ptr(other.my_node_ptr) {}\n\n    reference operator*() const { return my_node_ptr->my_element; }\n    pointer operator->() const { return &**this; }\n\n    flist_iterator& operator++() {\n        my_node_ptr = my_node_ptr->my_next;\n        return *this;\n    }\n\n    flist_iterator operator++(int) {\n        flist_iterator tmp = *this;\n        ++*this;\n        return tmp;\n    }\n\nprotected:\n    flist_iterator(nodeptr_t pnode) : my_node_ptr(pnode) {}\n    nodeptr_t get_node_ptr() const { return my_node_ptr; }\n\n    nodeptr_t my_node_ptr;\n\n    template<typename M, typename T, typename U>\n    friend bool operator==( const flist_iterator<M,T> &i, const flist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const flist_iterator<M,T>& i, const flist_iterator<M,U>& j );\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const flist_iterator<Solist,T> &i, const flist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const flist_iterator<Solist,T>& i, const flist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr;\n}\n\n// Split-order list iterators, needed to skip dummy elements\ntemplate<class Solist, typename Value>\nclass solist_iterator : public flist_iterator<Solist, Value>\n{\n    typedef flist_iterator<Solist, Value> base_type;\n    typedef typename Solist::nodeptr_t nodeptr_t;\n    using base_type::get_node_ptr;\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template<class M, typename V>\n    friend class solist_iterator;\n    template<typename M, typename T, typename U>\n    friend bool operator==( const solist_iterator<M,T> &i, const solist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const solist_iterator<M,T>& i, const solist_iterator<M,U>& j );\n\n    const Solist *my_list_ptr;\n    solist_iterator(nodeptr_t pnode, const Solist *plist) : base_type(pnode), my_list_ptr(plist) {}\n\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    solist_iterator() {}\n    solist_iterator(const solist_iterator<Solist, typename Solist::value_type> &other )\n        : base_type(other), my_list_ptr(other.my_list_ptr) {}\n\n    reference operator*() const {\n        return this->base_type::operator*();\n    }\n\n    pointer operator->() const {\n        return (&**this);\n    }\n\n    solist_iterator& operator++() {\n        do ++(*(base_type *)this);\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (*this);\n    }\n\n    solist_iterator operator++(int) {\n        solist_iterator tmp = *this;\n        do ++*this;\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (tmp);\n    }\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr && i.my_list_ptr == j.my_list_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const solist_iterator<Solist,T>& i, const solist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr || i.my_list_ptr != j.my_list_ptr;\n}\n\n// Forward type and class definitions\ntypedef size_t sokey_t;\n\n\n// Forward list in which elements are sorted in a split-order\ntemplate <typename T, typename Allocator>\nclass split_ordered_list\n{\npublic:\n    typedef split_ordered_list<T, Allocator> self_type;\n    typedef typename Allocator::template rebind<T>::other allocator_type;\n    struct node;\n    typedef node *nodeptr_t;\n\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::value_type value_type;\n\n    typedef solist_iterator<self_type, const value_type> const_iterator;\n    typedef solist_iterator<self_type, value_type> iterator;\n    typedef flist_iterator<self_type, const value_type> raw_const_iterator;\n    typedef flist_iterator<self_type, value_type> raw_iterator;\n\n    // Node that holds the element in a split-ordered list\n    struct node : tbb::internal::no_assign\n    {\n    private:\n        // for compilers that try to generate default constructors though they are not needed.\n        node();  // VS 2008, 2010, 2012\n    public:\n        // Initialize the node with the given order key\n        void init(sokey_t order_key) {\n            my_order_key = order_key;\n            my_next = NULL;\n        }\n\n        // Return the order key (needed for hashing)\n        sokey_t get_order_key() const { // TODO: remove\n            return my_order_key;\n        }\n\n        // Inserts the new element in the list in an atomic fashion\n        nodeptr_t atomic_set_next(nodeptr_t new_node, nodeptr_t current_node)\n        {\n            // Try to change the next pointer on the current element to a new element, only if it still points to the cached next\n            nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);\n\n            if (exchange_node == current_node) // TODO: why this branch?\n            {\n                // Operation succeeded, return the new node\n                return new_node;\n            }\n            else\n            {\n                // Operation failed, return the \"interfering\" node\n                return exchange_node;\n            }\n        }\n\n        // Checks if this element in the list is a dummy, order enforcing node. Dummy nodes are used by buckets\n        // in the hash table to quickly index into the right subsection of the split-ordered list.\n        bool is_dummy() const {\n            return (my_order_key & 0x1) == 0;\n        }\n\n\n        nodeptr_t  my_next;      // Next element in the list\n        value_type my_element;   // Element storage\n        sokey_t    my_order_key; // Order key for this element\n    };\n\n    // Allocate a new node with the given order key; used to allocate dummy nodes\n    nodeptr_t create_node(sokey_t order_key) {\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n        pnode->init(order_key);\n        return (pnode);\n    }\n\n    // Allocate a new node with the given order key and value\n    template<typename Arg>\n    nodeptr_t create_node(sokey_t order_key, __TBB_FORWARDING_REF(Arg) t,\n                          /*AllowCreate=*/tbb::internal::true_type=tbb::internal::true_type()){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(tbb::internal::forward<Arg>(t));\n            pnode->init(order_key);\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n    // A helper to avoid excessive requiremens in internal_insert\n    template<typename Arg>\n    nodeptr_t create_node(sokey_t, __TBB_FORWARDING_REF(Arg),\n                          /*AllowCreate=*/tbb::internal::false_type){\n        __TBB_ASSERT(false, \"This compile-time helper should never get called\");\n        return nodeptr_t();\n    }\n\n    // Allocate a new node with the given parameters for constructing value\n    template<typename __TBB_PARAMETER_PACK Args>\n    nodeptr_t create_node_v( __TBB_FORWARDING_REF(Args) __TBB_PARAMETER_PACK args){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(__TBB_PACK_EXPANSION(tbb::internal::forward<Args>(args)));\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n   split_ordered_list(allocator_type a = allocator_type())\n       : my_node_allocator(a), my_element_count(0)\n    {\n        // Immediately allocate a dummy node with order key of 0. This node\n        // will always be the head of the list.\n        my_head = create_node(sokey_t(0));\n    }\n\n    ~split_ordered_list()\n    {\n        // Clear the list\n        clear();\n\n        // Remove the head element which is not cleared by clear()\n        nodeptr_t pnode = my_head;\n        my_head = NULL;\n\n        __TBB_ASSERT(pnode != NULL && pnode->my_next == NULL, \"Invalid head list node\");\n\n        destroy_node(pnode);\n    }\n\n    // Common forward list functions\n\n    allocator_type get_allocator() const {\n        return (my_node_allocator);\n    }\n\n    void clear() {\n        nodeptr_t pnext;\n        nodeptr_t pnode = my_head;\n\n        __TBB_ASSERT(my_head != NULL, \"Invalid head list node\");\n        pnext = pnode->my_next;\n        pnode->my_next = NULL;\n        pnode = pnext;\n\n        while (pnode != NULL)\n        {\n            pnext = pnode->my_next;\n            destroy_node(pnode);\n            pnode = pnext;\n        }\n\n        my_element_count = 0;\n    }\n\n    // Returns a first non-dummy element in the SOL\n    iterator begin() {\n        return first_real_iterator(raw_begin());\n    }\n\n    // Returns a first non-dummy element in the SOL\n    const_iterator begin() const {\n        return first_real_iterator(raw_begin());\n    }\n\n    iterator end() {\n        return (iterator(0, this));\n    }\n\n    const_iterator end() const {\n        return (const_iterator(0, this));\n    }\n\n    const_iterator cbegin() const {\n        return (((const self_type *)this)->begin());\n    }\n\n    const_iterator cend() const {\n        return (((const self_type *)this)->end());\n    }\n\n    // Checks if the number of elements (non-dummy) is 0\n    bool empty() const {\n        return (my_element_count == 0);\n    }\n\n    // Returns the number of non-dummy elements in the list\n    size_type size() const {\n        return my_element_count;\n    }\n\n    // Returns the maximum size of the list, determined by the allocator\n    size_type max_size() const {\n        return my_node_allocator.max_size();\n    }\n\n    // Swaps 'this' list with the passed in one\n    void swap(self_type& other)\n    {\n        if (this == &other)\n        {\n            // Nothing to do\n            return;\n        }\n\n            std::swap(my_element_count, other.my_element_count);\n            std::swap(my_head, other.my_head);\n    }\n\n    // Split-order list functions\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_iterator raw_begin() {\n        return raw_iterator(my_head);\n    }\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_const_iterator raw_begin() const {\n        return raw_const_iterator(my_head);\n    }\n\n    raw_iterator raw_end() {\n        return raw_iterator(0);\n    }\n\n    raw_const_iterator raw_end() const {\n        return raw_const_iterator(0);\n    }\n\n    static sokey_t get_order_key(const raw_const_iterator& it) {\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    static sokey_t get_safe_order_key(const raw_const_iterator& it) {\n        if( !it.get_node_ptr() )  return ~sokey_t(0);\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    iterator get_iterator(raw_iterator it) {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    const_iterator get_iterator(raw_const_iterator it) const {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a non-const version of the raw_iterator\n    raw_iterator get_iterator(raw_const_iterator it) {\n        return raw_iterator(it.get_node_ptr());\n    }\n\n    // Returns a non-const version of the iterator\n    static iterator get_iterator(const_iterator it) {\n        return iterator(it.my_node_ptr, it.my_list_ptr);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    iterator first_real_iterator(raw_iterator it)\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    const_iterator first_real_iterator(raw_const_iterator it) const\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Erase an element using the allocator\n    void destroy_node(nodeptr_t pnode) {\n        if (!pnode->is_dummy()) my_node_allocator.destroy(pnode);\n        my_node_allocator.deallocate(pnode, 1);\n    }\n\n    // Try to insert a new element in the list.\n    // If insert fails, return the node that was inserted instead.\n    static nodeptr_t try_insert_atomic(nodeptr_t previous, nodeptr_t new_node, nodeptr_t current_node) {\n        new_node->my_next = current_node;\n        return previous->atomic_set_next(new_node, current_node);\n    }\n\n    // Insert a new element between passed in iterators\n    std::pair<iterator, bool> try_insert(raw_iterator it, raw_iterator next, nodeptr_t pnode, size_type *new_count)\n    {\n        nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), pnode, next.get_node_ptr());\n\n        if (inserted_node == pnode)\n        {\n            // If the insert succeeded, check that the order is correct and increment the element count\n            check_range(it, next);\n            *new_count = tbb::internal::as_atomic(my_element_count).fetch_and_increment();\n            return std::pair<iterator, bool>(iterator(pnode, this), true);\n        }\n        else\n        {\n            return std::pair<iterator, bool>(end(), false);\n        }\n    }\n\n    // Insert a new dummy element, starting search at a parent dummy element\n    raw_iterator insert_dummy(raw_iterator it, sokey_t order_key)\n    {\n        raw_iterator last = raw_end();\n        raw_iterator where = it;\n\n        __TBB_ASSERT(where != last, \"Invalid head node\");\n\n        ++where;\n\n        // Create a dummy element up front, even though it may be discarded (due to concurrent insertion)\n        nodeptr_t dummy_node = create_node(order_key);\n\n        for (;;)\n        {\n            __TBB_ASSERT(it != last, \"Invalid head list node\");\n\n            // If the head iterator is at the end of the list, or past the point where this dummy\n            // node needs to be inserted, then try to insert it.\n            if (where == last || get_order_key(where) > order_key)\n            {\n                __TBB_ASSERT(get_order_key(it) < order_key, \"Invalid node order in the list\");\n\n                // Try to insert it in the right place\n                nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), dummy_node, where.get_node_ptr());\n\n                if (inserted_node == dummy_node)\n                {\n                    // Insertion succeeded, check the list for order violations\n                    check_range(it, where);\n                    return raw_iterator(dummy_node);\n                }\n                else\n                {\n                    // Insertion failed: either dummy node was inserted by another thread, or\n                    // a real element was inserted at exactly the same place as dummy node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = it;\n                    ++where;\n                    continue;\n                }\n            }\n            else if (get_order_key(where) == order_key)\n            {\n                // Another dummy node with the same value found, discard the new one.\n                destroy_node(dummy_node);\n                return where;\n            }\n\n            // Move the iterator forward\n            it = where;\n            ++where;\n        }\n\n    }\n\n    // This erase function can handle both real and dummy nodes\n    void erase_node(raw_iterator previous, raw_const_iterator& where)\n    {\n        nodeptr_t pnode = (where++).get_node_ptr();\n        nodeptr_t prevnode = previous.get_node_ptr();\n        __TBB_ASSERT(prevnode->my_next == pnode, \"Erase must take consecutive iterators\");\n        prevnode->my_next = pnode->my_next;\n\n        destroy_node(pnode);\n    }\n\n    // Erase the element (previous node needs to be passed because this is a forward only list)\n    iterator erase_node(raw_iterator previous, const_iterator where)\n    {\n        raw_const_iterator it = where;\n        erase_node(previous, it);\n        my_element_count--;\n\n        return get_iterator(first_real_iterator(it));\n    }\n\n    // Move all elements from the passed in split-ordered list to this one\n    void move_all(self_type& source)\n    {\n        raw_const_iterator first = source.raw_begin();\n        raw_const_iterator last = source.raw_end();\n\n        if (first == last)\n            return;\n\n        nodeptr_t previous_node = my_head;\n        raw_const_iterator begin_iterator = first++;\n\n        // Move all elements one by one, including dummy ones\n        for (raw_const_iterator it = first; it != last;)\n        {\n            nodeptr_t pnode = it.get_node_ptr();\n\n            nodeptr_t dummy_node = pnode->is_dummy() ? create_node(pnode->get_order_key()) : create_node(pnode->get_order_key(), pnode->my_element);\n            previous_node = try_insert_atomic(previous_node, dummy_node, NULL);\n            __TBB_ASSERT(previous_node != NULL, \"Insertion must succeed\");\n            raw_const_iterator where = it++;\n            source.erase_node(get_iterator(begin_iterator), where);\n        }\n        check_range();\n    }\n\n\nprivate:\n    //Need to setup private fields of split_ordered_list in move constructor and assignment of concurrent_unordered_base\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n\n    // Check the list for order violations\n    void check_range( raw_iterator first, raw_iterator last )\n    {\n#if TBB_USE_ASSERT\n        for (raw_iterator it = first; it != last; ++it)\n        {\n            raw_iterator next = it;\n            ++next;\n\n            __TBB_ASSERT(next == raw_end() || get_order_key(next) >= get_order_key(it), \"!!! List order inconsistency !!!\");\n        }\n#else\n        tbb::internal::suppress_unused_warning(first, last);\n#endif\n    }\n    void check_range()\n    {\n#if TBB_USE_ASSERT\n        check_range( raw_begin(), raw_end() );\n#endif\n    }\n\n    typename allocator_type::template rebind<node>::other my_node_allocator;  // allocator object for nodes\n    size_type                                             my_element_count;   // Total item count, not counting dummy nodes\n    nodeptr_t                                             my_head;            // pointer to head node\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(push)\n#pragma warning(disable: 4127) // warning C4127: conditional expression is constant\n#endif\n\ntemplate <typename Traits>\nclass concurrent_unordered_base : public Traits\n{\nprotected:\n    // Type definitions\n    typedef concurrent_unordered_base<Traits> self_type;\n    typedef typename Traits::value_type value_type;\n    typedef typename Traits::key_type key_type;\n    typedef typename Traits::hash_compare hash_compare;\n    typedef typename Traits::allocator_type allocator_type;\n    typedef typename hash_compare::hasher hasher;\n    typedef typename hash_compare::key_equal key_equal;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef split_ordered_list<value_type, typename Traits::allocator_type> solist_t;\n    typedef typename solist_t::nodeptr_t nodeptr_t;\n    // Iterators that walk the entire split-order list, including dummy nodes\n    typedef typename solist_t::raw_iterator raw_iterator;\n    typedef typename solist_t::raw_const_iterator raw_const_iterator;\n    typedef typename solist_t::iterator iterator; // TODO: restore const iterator for unordered_sets\n    typedef typename solist_t::const_iterator const_iterator;\n    typedef iterator local_iterator;\n    typedef const_iterator const_local_iterator;\n    using Traits::my_hash_compare;\n    using Traits::get_key;\n    using Traits::allow_multimapping;\n\n    static const size_type initial_bucket_number = 8;                               // Initial number of buckets\nprivate:\n    typedef std::pair<iterator, iterator> pairii_t;\n    typedef std::pair<const_iterator, const_iterator> paircc_t;\n\n    static size_type const pointers_per_table = sizeof(size_type) * 8;              // One bucket segment per bit\n    static const size_type initial_bucket_load = 4;                                // Initial maximum number of elements per bucket\n\n    struct call_internal_clear_on_exit{\n        concurrent_unordered_base* my_instance;\n        call_internal_clear_on_exit(concurrent_unordered_base* instance) : my_instance(instance) {}\n        void dismiss(){ my_instance = NULL;}\n        ~call_internal_clear_on_exit(){\n            if (my_instance){\n                my_instance->internal_clear();\n            }\n        }\n    };\nprotected:\n    // Constructors/Destructors\n    concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,\n        const hash_compare& hc = hash_compare(), const allocator_type& a = allocator_type())\n        : Traits(hc), my_solist(a),\n          my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)\n    {\n        if( n_of_buckets == 0) ++n_of_buckets;\n        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2\n        internal_init();\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        internal_init();\n        internal_copy(right);\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        //FIXME:exception safety seems to be broken here\n        internal_init();\n        internal_copy(right);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base(concurrent_unordered_base&& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        internal_init();\n        swap(right);\n    }\n\n    concurrent_unordered_base(concurrent_unordered_base&& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        call_internal_clear_on_exit clear_buckets_on_exception(this);\n\n        internal_init();\n        if (a == right.get_allocator()){\n            this->swap(right);\n        }else{\n            my_maximum_bucket_size = right.my_maximum_bucket_size;\n            my_number_of_buckets = right.my_number_of_buckets;\n            my_solist.my_element_count = right.my_solist.my_element_count;\n\n            if (! right.my_solist.empty()){\n                nodeptr_t previous_node = my_solist.my_head;\n\n                // Move all elements one by one, including dummy ones\n                for (raw_const_iterator it = ++(right.my_solist.raw_begin()), last = right.my_solist.raw_end(); it != last; ++it)\n                {\n                    const nodeptr_t pnode = it.get_node_ptr();\n                    nodeptr_t node;\n                    if (pnode->is_dummy()) {\n                        node = my_solist.create_node(pnode->get_order_key());\n                        size_type bucket = __TBB_ReverseBits(pnode->get_order_key()) % my_number_of_buckets;\n                        set_bucket(bucket, node);\n                    }else{\n                        node = my_solist.create_node(pnode->get_order_key(), std::move(pnode->my_element));\n                    }\n\n                    previous_node = my_solist.try_insert_atomic(previous_node, node, NULL);\n                    __TBB_ASSERT(previous_node != NULL, \"Insertion of node failed. Concurrent inserts in constructor ?\");\n                }\n                my_solist.check_range();\n            }\n        }\n\n        clear_buckets_on_exception.dismiss();\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_base& operator=(const concurrent_unordered_base& right) {\n        if (this != &right)\n            internal_copy(right);\n        return (*this);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base& operator=(concurrent_unordered_base&& other)\n    {\n        if(this != &other){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == other.my_allocator) {\n                concurrent_unordered_base trash (std::move(*this));\n                swap(other);\n                if (pocma_t::value) {\n                    using std::swap;\n                    //TODO: swapping allocators here may be a problem, replace with single direction moving\n                    swap(this->my_solist.my_node_allocator, other.my_solist.my_node_allocator);\n                    swap(this->my_allocator, other.my_allocator);\n                }\n            } else {\n                concurrent_unordered_base moved_copy(std::move(other),this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assignment operator from initializer_list\n    concurrent_unordered_base& operator=(std::initializer_list<value_type> il)\n    {\n        this->clear();\n        this->insert(il.begin(),il.end());\n        return (*this);\n    }\n#endif // __TBB_INITIALIZER_LISTS_PRESENT\n\n\n    ~concurrent_unordered_base() {\n        // Delete all node segments\n        internal_clear();\n    }\n\npublic:\n    allocator_type get_allocator() const {\n        return my_solist.get_allocator();\n    }\n\n    // Size and capacity function\n    bool empty() const {\n        return my_solist.empty();\n    }\n\n    size_type size() const {\n        return my_solist.size();\n    }\n\n    size_type max_size() const {\n        return my_solist.max_size();\n    }\n\n    // Iterators\n    iterator begin() {\n        return my_solist.begin();\n    }\n\n    const_iterator begin() const {\n        return my_solist.begin();\n    }\n\n    iterator end() {\n        return my_solist.end();\n    }\n\n    const_iterator end() const {\n        return my_solist.end();\n    }\n\n    const_iterator cbegin() const {\n        return my_solist.cbegin();\n    }\n\n    const_iterator cend() const {\n        return my_solist.cend();\n    }\n\n    // Parallel traversal support\n    class const_range_type : tbb::internal::no_assign {\n        const concurrent_unordered_base &my_table;\n        raw_const_iterator my_begin_node;\n        raw_const_iterator my_end_node;\n        mutable raw_const_iterator my_midpoint_node;\n    public:\n        //! Type for size of a range\n        typedef typename concurrent_unordered_base::size_type size_type;\n        typedef typename concurrent_unordered_base::value_type value_type;\n        typedef typename concurrent_unordered_base::reference reference;\n        typedef typename concurrent_unordered_base::difference_type difference_type;\n        typedef typename concurrent_unordered_base::const_iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin_node == my_end_node;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint_node != my_end_node;\n        }\n        //! Split range.\n        const_range_type( const_range_type &r, split ) :\n            my_table(r.my_table), my_end_node(r.my_end_node)\n        {\n            r.my_end_node = my_begin_node = r.my_midpoint_node;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! Init range with container and grainsize specified\n        const_range_type( const concurrent_unordered_base &a_table ) :\n            my_table(a_table), my_begin_node(a_table.my_solist.begin()),\n            my_end_node(a_table.my_solist.end())\n        {\n            set_midpoint();\n        }\n        iterator begin() const { return my_table.my_solist.get_iterator(my_begin_node); }\n        iterator end() const { return my_table.my_solist.get_iterator(my_end_node); }\n        //! The grain size for this range.\n        size_type grainsize() const { return 1; }\n\n        //! Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.\n        void set_midpoint() const {\n            if( my_begin_node == my_end_node ) // not divisible\n                my_midpoint_node = my_end_node;\n            else {\n                sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);\n                sokey_t end_key = solist_t::get_safe_order_key(my_end_node);\n                size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;\n                while ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);\n                if(__TBB_ReverseBits(mid_bucket) > begin_key) {\n                    // found a dummy_node between begin and end\n                    my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));\n                }\n                else {\n                    // didn't find a dummy node between begin and end.\n                    my_midpoint_node = my_end_node;\n                }\n#if TBB_USE_ASSERT\n                {\n                    sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);\n                    __TBB_ASSERT( begin_key < mid_key, \"my_begin_node is after my_midpoint_node\" );\n                    __TBB_ASSERT( mid_key <= end_key, \"my_midpoint_node is after my_end_node\" );\n                }\n#endif // TBB_USE_ASSERT\n            }\n        }\n    };\n\n    class range_type : public const_range_type {\n    public:\n        typedef typename concurrent_unordered_base::iterator iterator;\n        //! Split range.\n        range_type( range_type &r, split ) : const_range_type( r, split() ) {}\n        //! Init range with container and grainsize specified\n        range_type( const concurrent_unordered_base &a_table ) : const_range_type(a_table) {}\n\n        iterator begin() const { return solist_t::get_iterator( const_range_type::begin() ); }\n        iterator end() const { return solist_t::get_iterator( const_range_type::end() ); }\n    };\n\n    range_type range() {\n        return range_type( *this );\n    }\n\n    const_range_type range() const {\n        return const_range_type( *this );\n    }\n\n    // Modifiers\n    std::pair<iterator, bool> insert(const value_type& value) {\n        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(value);\n    }\n\n    iterator insert(const_iterator, const value_type& value) {\n        // Ignore hint\n        return insert(value).first;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    std::pair<iterator, bool> insert(value_type&& value) {\n        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(std::move(value));\n    }\n\n    iterator insert(const_iterator, value_type&& value) {\n        // Ignore hint\n        return insert(std::move(value)).first;\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    std::pair<iterator, bool> emplace(Args&&... args) {\n        nodeptr_t pnode = my_solist.create_node_v(tbb::internal::forward<Args>(args)...);\n        const sokey_t hashed_element_key = (sokey_t) my_hash_compare(get_key(pnode->my_element));\n        const sokey_t order_key = split_order_key_regular(hashed_element_key);\n        pnode->init(order_key);\n\n        return internal_insert</*AllowCreate=*/tbb::internal::false_type>(pnode->my_element, pnode);\n    }\n\n    template<typename... Args>\n    iterator emplace_hint(const_iterator, Args&&... args) {\n        // Ignore hint\n        return emplace(tbb::internal::forward<Args>(args)...).first;\n    }\n\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    template<class Iterator>\n    void insert(Iterator first, Iterator last) {\n        for (Iterator it = first; it != last; ++it)\n            insert(*it);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert(std::initializer_list<value_type> il) {\n        insert(il.begin(), il.end());\n    }\n#endif\n\n    iterator unsafe_erase(const_iterator where) {\n        return internal_erase(where);\n    }\n\n    iterator unsafe_erase(const_iterator first, const_iterator last) {\n        while (first != last)\n            unsafe_erase(first++);\n        return my_solist.get_iterator(first);\n    }\n\n    size_type unsafe_erase(const key_type& key) {\n        pairii_t where = equal_range(key);\n        size_type item_count = internal_distance(where.first, where.second);\n        unsafe_erase(where.first, where.second);\n        return item_count;\n    }\n\n    void swap(concurrent_unordered_base& right) {\n        if (this != &right) {\n            std::swap(my_hash_compare, right.my_hash_compare); // TODO: check what ADL meant here\n            my_solist.swap(right.my_solist);\n            internal_swap_buckets(right);\n            std::swap(my_number_of_buckets, right.my_number_of_buckets);\n            std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);\n        }\n    }\n\n    // Observers\n    hasher hash_function() const {\n        return my_hash_compare.my_hash_object;\n    }\n\n    key_equal key_eq() const {\n        return my_hash_compare.my_key_compare_object;\n    }\n\n    void clear() {\n        // Clear list\n        my_solist.clear();\n\n        // Clear buckets\n        internal_clear();\n\n        // Initialize bucket 0\n        __TBB_ASSERT(my_buckets[0] == NULL, NULL);\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    // Lookup\n    iterator find(const key_type& key) {\n        return internal_find(key);\n    }\n\n    const_iterator find(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_find(key);\n    }\n\n    size_type count(const key_type& key) const {\n        if(allow_multimapping) {\n            paircc_t answer = equal_range(key);\n            size_type item_count = internal_distance(answer.first, answer.second);\n            return item_count;\n        } else {\n            return const_cast<self_type*>(this)->internal_find(key) == end()?0:1;\n        }\n    }\n\n    std::pair<iterator, iterator> equal_range(const key_type& key) {\n        return internal_equal_range(key);\n    }\n\n    std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_equal_range(key);\n    }\n\n    // Bucket interface - for debugging\n    size_type unsafe_bucket_count() const {\n        return my_number_of_buckets;\n    }\n\n    size_type unsafe_max_bucket_count() const {\n        return segment_size(pointers_per_table-1);\n    }\n\n    size_type unsafe_bucket_size(size_type bucket) {\n        size_type item_count = 0;\n        if (is_initialized(bucket)) {\n            raw_iterator it = get_bucket(bucket);\n            ++it;\n            for (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)\n                ++item_count;\n        }\n        return item_count;\n    }\n\n    size_type unsafe_bucket(const key_type& key) const {\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n        return bucket;\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    local_iterator unsafe_begin(size_type bucket) {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    const_local_iterator unsafe_begin(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    local_iterator unsafe_end(size_type bucket)\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    const_local_iterator unsafe_end(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    const_local_iterator unsafe_cbegin(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_begin(bucket);\n    }\n\n    const_local_iterator unsafe_cend(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_end(bucket);\n    }\n\n    // Hash policy\n    float load_factor() const {\n        return (float) size() / (float) unsafe_bucket_count();\n    }\n\n    float max_load_factor() const {\n        return my_maximum_bucket_size;\n    }\n\n    void max_load_factor(float newmax) {\n        if (newmax != newmax || newmax < 0)\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);\n        my_maximum_bucket_size = newmax;\n    }\n\n    // This function is a noop, because the underlying split-ordered list\n    // is already sorted, so an increase in the bucket number will be\n    // reflected next time this bucket is touched.\n    void rehash(size_type buckets) {\n        size_type current_buckets = my_number_of_buckets;\n        if (current_buckets >= buckets)\n            return;\n        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2\n    }\n\nprivate:\n\n    // Initialize the hash and keep the first bucket open\n    void internal_init() {\n        // Initialize the array of segment pointers\n        memset(my_buckets, 0, sizeof(my_buckets));\n\n        // Initialize bucket 0\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    void internal_clear() {\n        for (size_type index = 0; index < pointers_per_table; ++index) {\n            if (my_buckets[index] != NULL) {\n                size_type sz = segment_size(index);\n                for (size_type index2 = 0; index2 < sz; ++index2)\n                    my_allocator.destroy(&my_buckets[index][index2]);\n                my_allocator.deallocate(my_buckets[index], sz);\n                my_buckets[index] = 0;\n            }\n        }\n    }\n\n    void internal_copy(const self_type& right) {\n        clear();\n\n        my_maximum_bucket_size = right.my_maximum_bucket_size;\n        my_number_of_buckets = right.my_number_of_buckets;\n\n        __TBB_TRY {\n            insert(right.begin(), right.end());\n            my_hash_compare = right.my_hash_compare;\n        } __TBB_CATCH(...) {\n            my_solist.clear();\n            __TBB_RETHROW();\n        }\n    }\n\n    void internal_swap_buckets(concurrent_unordered_base& right)\n    {\n        // Swap all node segments\n        for (size_type index = 0; index < pointers_per_table; ++index)\n        {\n            raw_iterator * iterator_pointer = my_buckets[index];\n            my_buckets[index] = right.my_buckets[index];\n            right.my_buckets[index] = iterator_pointer;\n        }\n    }\n\n    //TODO: why not use std::distance?\n    // Hash APIs\n    static size_type internal_distance(const_iterator first, const_iterator last)\n    {\n        size_type num = 0;\n\n        for (const_iterator it = first; it != last; ++it)\n            ++num;\n\n        return num;\n    }\n\n    // Insert an element in the hash given its value\n    template<typename AllowCreate, typename ValueType>\n    std::pair<iterator, bool> internal_insert(__TBB_FORWARDING_REF(ValueType) value, nodeptr_t pnode = NULL)\n    {\n        const key_type *pkey = &get_key(value);\n        sokey_t hash_key = (sokey_t) my_hash_compare(*pkey);\n        size_type new_count = 0;\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator previous = prepare_bucket(hash_key);\n        raw_iterator last = my_solist.raw_end();\n        __TBB_ASSERT(previous != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        for (raw_iterator where = previous;;)\n        {\n            ++where;\n            if (where == last || solist_t::get_order_key(where) > order_key ||\n                // if multimapped, stop at the first item equal to us.\n                (allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                 !my_hash_compare(get_key(*where), *pkey))) // TODO: fix negation\n            {\n                if (!pnode) {\n                    pnode = my_solist.create_node(order_key, tbb::internal::forward<ValueType>(value), AllowCreate());\n                    // If the value was moved, the known reference to key might be invalid\n                    pkey = &get_key(pnode->my_element);\n                }\n\n                // Try to insert 'pnode' between 'previous' and 'where'\n                std::pair<iterator, bool> result = my_solist.try_insert(previous, where, pnode, &new_count);\n\n                if (result.second)\n                {\n                    // Insertion succeeded, adjust the table size, if needed\n                    adjust_table_size(new_count, my_number_of_buckets);\n                    return result;\n                }\n                else\n                {\n                    // Insertion failed: either the same node was inserted by another thread, or\n                    // another element was inserted at exactly the same place as this node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = previous;\n                    continue;\n                }\n            }\n            else if (!allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                     !my_hash_compare(get_key(*where), *pkey)) // TODO: fix negation\n            { // Element already in the list, return it\n                 if (pnode)\n                     my_solist.destroy_node(pnode);\n                return std::pair<iterator, bool>(my_solist.get_iterator(where), false);\n            }\n            // Move the iterator forward\n            previous = where;\n        }\n    }\n\n    // Find the element in the split-ordered list\n    iterator internal_find(const key_type& key)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(key);\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator last = my_solist.raw_end();\n\n        for (raw_iterator it = prepare_bucket(hash_key); it != last; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // If the order key is smaller than the current order key, the element\n                // is not in the hash.\n                return end();\n            }\n            else if (solist_t::get_order_key(it) == order_key)\n            {\n                // The fact that order keys match does not mean that the element is found.\n                // Key function comparison has to be performed to check whether this is the\n                // right element. If not, keep searching while order key is the same.\n                if (!my_hash_compare(get_key(*it), key)) // TODO: fix negation\n                    return my_solist.get_iterator(it);\n            }\n        }\n\n        return end();\n    }\n\n    // Erase an element from the list. This is not a concurrency safe function.\n    iterator internal_erase(const_iterator it)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(get_key(*it));\n        raw_iterator previous = prepare_bucket(hash_key);\n        raw_iterator last = my_solist.raw_end();\n        __TBB_ASSERT(previous != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        for (raw_iterator where = previous; ; previous = where) {\n            ++where;\n            if (where == last)\n                return end();\n            else if (my_solist.get_iterator(where) == it)\n                return my_solist.erase_node(previous, it);\n        }\n    }\n\n    // Return the [begin, end) pair of iterators with the same key values.\n    // This operation makes sense only if mapping is many-to-one.\n    pairii_t internal_equal_range(const key_type& key)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(key);\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator end_it = my_solist.raw_end();\n\n        for (raw_iterator it = prepare_bucket(hash_key); it != end_it; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // There is no element with the given key\n                return pairii_t(end(), end());\n            }\n            else if (solist_t::get_order_key(it) == order_key &&\n                     !my_hash_compare(get_key(*it), key)) // TODO: fix negation; also below\n            {\n                iterator first = my_solist.get_iterator(it);\n                iterator last = first;\n                do ++last; while( allow_multimapping && last != end() && !my_hash_compare(get_key(*last), key) );\n                return pairii_t(first, last);\n            }\n        }\n\n        return pairii_t(end(), end());\n    }\n\n    // Bucket APIs\n    void init_bucket(size_type bucket)\n    {\n        // Bucket 0 has no parent.\n        __TBB_ASSERT( bucket != 0, \"The first bucket must always be initialized\");\n\n        size_type parent_bucket = get_parent(bucket);\n\n        // All parent_bucket buckets have to be initialized before this bucket is\n        if (!is_initialized(parent_bucket))\n            init_bucket(parent_bucket);\n\n        raw_iterator parent = get_bucket(parent_bucket);\n\n        // Create a dummy first node in this bucket\n        raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));\n        set_bucket(bucket, dummy_node);\n    }\n\n    void adjust_table_size(size_type total_elements, size_type current_size)\n    {\n        // Grow the table by a factor of 2 if possible and needed\n        if ( ((float) total_elements / (float) current_size) > my_maximum_bucket_size )\n        {\n            // Double the size of the hash only if size has not changed in between loads\n            my_number_of_buckets.compare_and_swap(2u*current_size, current_size);\n            //Simple \"my_number_of_buckets.compare_and_swap( current_size<<1, current_size );\" does not work for VC8\n            //due to overzealous compiler warnings in /Wp64 mode\n        }\n    }\n\n    size_type get_parent(size_type bucket) const\n    {\n        // Unsets bucket's most significant turned-on bit\n        size_type msb = __TBB_Log2((uintptr_t)bucket);\n        return bucket & ~(size_type(1) << msb);\n    }\n\n\n    // Dynamic sized array (segments)\n    //! @return segment index of given index in the array\n    static size_type segment_index_of( size_type index ) {\n        return size_type( __TBB_Log2( uintptr_t(index|1) ) );\n    }\n\n    //! @return the first array index of given segment\n    static size_type segment_base( size_type k ) {\n        return (size_type(1)<<k & ~size_type(1));\n    }\n\n    //! @return segment size\n    static size_type segment_size( size_type k ) {\n        return k? size_type(1)<<k : 2;\n    }\n\n    raw_iterator get_bucket(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n        __TBB_ASSERT( my_buckets[segment], \"bucket must be in an allocated segment\" );\n        return my_buckets[segment][bucket];\n    }\n\n    raw_iterator prepare_bucket(sokey_t hash_key) {\n        size_type bucket = hash_key % my_number_of_buckets;\n        size_type segment = segment_index_of(bucket);\n        size_type index = bucket - segment_base(segment);\n        if (my_buckets[segment] == NULL || my_buckets[segment][index].get_node_ptr() == NULL)\n            init_bucket(bucket);\n        return my_buckets[segment][index];\n    }\n\n    void set_bucket(size_type bucket, raw_iterator dummy_head) {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL) {\n            size_type sz = segment_size(segment);\n            raw_iterator * new_segment = my_allocator.allocate(sz);\n            std::memset(static_cast<void*>(new_segment), 0, sz*sizeof(raw_iterator));\n\n            if (my_buckets[segment].compare_and_swap( new_segment, NULL) != NULL)\n                my_allocator.deallocate(new_segment, sz);\n        }\n\n        my_buckets[segment][bucket] = dummy_head;\n    }\n\n    bool is_initialized(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL)\n            return false;\n\n        raw_iterator it = my_buckets[segment][bucket];\n        return (it.get_node_ptr() != NULL);\n    }\n\n    // Utilities for keys\n\n    // A regular order key has its original hash value reversed and the last bit set\n    sokey_t split_order_key_regular(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) | 0x1;\n    }\n\n    // A dummy order key has its original hash value reversed and the last bit unset\n    sokey_t split_order_key_dummy(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) & ~sokey_t(0x1);\n    }\n\n    // Shared variables\n    atomic<size_type>                                             my_number_of_buckets;       // Current table size\n    solist_t                                                      my_solist;                  // List where all the elements are kept\n    typename allocator_type::template rebind<raw_iterator>::other my_allocator;               // Allocator object for segments\n    float                                                         my_maximum_bucket_size;     // Maximum size of the bucket\n    atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; // The segment table\n};\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(pop) // warning 4127 is back\n#endif\n\n} // namespace internal\n//! @endcond\n} // namespace interface5\n} // namespace tbb\n#endif // __TBB__concurrent_unordered_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_async_msg_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_async_msg_impl_H\n#define __TBB__flow_graph_async_msg_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\nnamespace internal {\n\ntemplate <typename T>\nclass async_storage {\npublic:\n    typedef receiver<T> async_storage_client;\n\n    async_storage() : my_graph(nullptr) {\n        my_data_ready.store<tbb::relaxed>(false);\n    }\n\n    ~async_storage() {\n        // Release reference to the graph if async_storage\n        // was destructed before set() call\n        if (my_graph) {\n            my_graph->release_wait();\n            my_graph = nullptr;\n        }\n    }\n\n    template<typename C>\n    async_storage(C&& data) : my_graph(nullptr), my_data( std::forward<C>(data) ) {\n        using namespace tbb::internal;\n        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), \"incoming type must be T\" );\n\n        my_data_ready.store<tbb::relaxed>(true);\n    }\n\n    template<typename C>\n    bool set(C&& data) {\n        using namespace tbb::internal;\n        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), \"incoming type must be T\" );\n\n        {\n            tbb::spin_mutex::scoped_lock locker(my_mutex);\n\n            if (my_data_ready.load<tbb::relaxed>()) {\n                __TBB_ASSERT(false, \"double set() call\");\n                return false;\n            }\n\n            my_data = std::forward<C>(data);\n            my_data_ready.store<tbb::release>(true);\n        }\n\n        // Thread sync is on my_data_ready flag\n        for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {\n            (*it)->try_put(my_data);\n        }\n\n        // Data was sent, release reference to the graph\n        if (my_graph) {\n            my_graph->release_wait();\n            my_graph = nullptr;\n        }\n\n        return true;\n    }\n\n    task* subscribe(async_storage_client& client, graph& g) {\n        if (! my_data_ready.load<tbb::acquire>())\n        {\n            tbb::spin_mutex::scoped_lock locker(my_mutex);\n\n            if (! my_data_ready.load<tbb::relaxed>()) {\n#if TBB_USE_ASSERT\n                for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {\n                    __TBB_ASSERT(*it != &client, \"unexpected double subscription\");\n                }\n#endif // TBB_USE_ASSERT\n\n                // Increase graph lifetime\n                my_graph = &g;\n                my_graph->reserve_wait();\n\n                // Subscribe\n                my_clients.push_back(&client);\n                return SUCCESSFULLY_ENQUEUED;\n            }\n        }\n\n        __TBB_ASSERT(my_data_ready.load<tbb::relaxed>(), \"data is NOT ready\");\n        return client.try_put_task(my_data);\n    }\n\nprivate:\n    graph* my_graph;\n    tbb::spin_mutex my_mutex;\n    tbb::atomic<bool> my_data_ready;\n    T my_data;\n    typedef std::vector<async_storage_client*> subscriber_list_type;\n    subscriber_list_type my_clients;\n};\n\n} // namespace internal\n\ntemplate <typename T>\nclass async_msg {\n    template< typename > friend class receiver;\n    template< typename, typename > friend struct internal::async_helpers;\npublic:\n    typedef T async_msg_data_type;\n\n    async_msg() : my_storage(std::make_shared< internal::async_storage<T> >()) {}\n\n    async_msg(const T& t) : my_storage(std::make_shared< internal::async_storage<T> >(t)) {}\n\n    async_msg(T&& t) : my_storage(std::make_shared< internal::async_storage<T> >( std::move(t) )) {}\n\n    virtual ~async_msg() {}\n\n    void set(const T& t) {\n        my_storage->set(t);\n    }\n\n    void set(T&& t) {\n        my_storage->set( std::move(t) );\n    }\n\nprotected:\n    // Can be overridden in derived class to inform that \n    // async calculation chain is over\n    virtual void finalize() const {}\n\nprivate:\n    typedef std::shared_ptr< internal::async_storage<T> > async_storage_ptr;\n    async_storage_ptr my_storage;\n};\n\n#endif  // __TBB__flow_graph_async_msg_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_body_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_body_impl_H\n#define __TBB__flow_graph_body_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\ntypedef tbb::internal::uint64_t tag_value;\n\nusing tbb::internal::strip;\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n\ntemplate<typename ... Policies> struct Policy {};\n\ntemplate<typename ... Policies> struct has_policy;\n\ntemplate<typename ExpectedPolicy, typename FirstPolicy, typename ...Policies>\nstruct has_policy<ExpectedPolicy, FirstPolicy, Policies...> :\n    tbb::internal::bool_constant<has_policy<ExpectedPolicy, FirstPolicy>::value ||\n                                 has_policy<ExpectedPolicy, Policies...>::value> {};\n\ntemplate<typename ExpectedPolicy, typename SinglePolicy>\nstruct has_policy<ExpectedPolicy, SinglePolicy> :\n    tbb::internal::bool_constant<tbb::internal::is_same_type<ExpectedPolicy, SinglePolicy>::value> {};\n\ntemplate<typename ExpectedPolicy, typename ...Policies>\nstruct has_policy<ExpectedPolicy, Policy<Policies...> > : has_policy<ExpectedPolicy, Policies...> {};\n\n#else\n\ntemplate<typename P1, typename P2 = void> struct Policy {};\n\ntemplate<typename ExpectedPolicy, typename SinglePolicy>\nstruct has_policy : tbb::internal::bool_constant<tbb::internal::is_same_type<ExpectedPolicy, SinglePolicy>::value> {};\n\ntemplate<typename ExpectedPolicy, typename P>\nstruct has_policy<ExpectedPolicy, Policy<P> > : has_policy<ExpectedPolicy, P> {};\n\ntemplate<typename ExpectedPolicy, typename P1, typename P2>\nstruct has_policy<ExpectedPolicy, Policy<P1, P2> > :\n    tbb::internal::bool_constant<has_policy<ExpectedPolicy, P1>::value || has_policy<ExpectedPolicy, P2>::value> {};\n\n#endif\n\nnamespace graph_policy_namespace {\n\n    struct rejecting { };\n    struct reserving { };\n    struct queueing  { };\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    struct lightweight  { };\n#endif\n\n    // K == type of field used for key-matching.  Each tag-matching port will be provided\n    // functor that, given an object accepted by the port, will return the\n    /// field of type K being used for matching.\n    template<typename K, typename KHash=tbb_hash_compare<typename strip<K>::type > >\n    struct key_matching {\n        typedef K key_type;\n        typedef typename strip<K>::type base_key_type;\n        typedef KHash hash_compare_type;\n    };\n\n    // old tag_matching join's new specifier\n    typedef key_matching<tag_value> tag_matching;\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    // Aliases for Policy combinations\n    typedef interface10::internal::Policy<queueing, lightweight> queueing_lightweight;\n    typedef interface10::internal::Policy<rejecting, lightweight>  rejecting_lightweight;\n#endif\n} // namespace graph_policy_namespace\n\n// -------------- function_body containers ----------------------\n\n//! A functor that takes no input and generates a value of type Output\ntemplate< typename Output >\nclass source_body : tbb::internal::no_assign {\npublic:\n    virtual ~source_body() {}\n    virtual bool operator()(Output &output) = 0;\n    virtual source_body* clone() = 0;\n};\n\n//! The leaf for source_body\ntemplate< typename Output, typename Body>\nclass source_body_leaf : public source_body<Output> {\npublic:\n    source_body_leaf( const Body &_body ) : body(_body) { }\n    bool operator()(Output &output) __TBB_override { return body( output ); }\n    source_body_leaf* clone() __TBB_override {\n        return new source_body_leaf< Output, Body >(body);\n    }\n    Body get_body() { return body; }\nprivate:\n    Body body;\n};\n\n//! A functor that takes an Input and generates an Output\ntemplate< typename Input, typename Output >\nclass function_body : tbb::internal::no_assign {\npublic:\n    virtual ~function_body() {}\n    virtual Output operator()(const Input &input) = 0;\n    virtual function_body* clone() = 0;\n};\n\n//! the leaf for function_body\ntemplate <typename Input, typename Output, typename B>\nclass function_body_leaf : public function_body< Input, Output > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const Input &i) __TBB_override { return body(i); }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< Input, Output, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Input and output of continue_msg\ntemplate <typename B>\nclass function_body_leaf< continue_msg, continue_msg, B> : public function_body< continue_msg, continue_msg > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    continue_msg operator()( const continue_msg &i ) __TBB_override {\n        body(i);\n        return i;\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< continue_msg, continue_msg, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Output of continue_msg\ntemplate <typename Input, typename B>\nclass function_body_leaf< Input, continue_msg, B> : public function_body< Input, continue_msg > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    continue_msg operator()(const Input &i) __TBB_override {\n        body(i);\n        return continue_msg();\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< Input, continue_msg, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Input of continue_msg\ntemplate <typename Output, typename B>\nclass function_body_leaf< continue_msg, Output, B > : public function_body< continue_msg, Output > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const continue_msg &i) __TBB_override {\n        return body(i);\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< continue_msg, Output, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! function_body that takes an Input and a set of output ports\ntemplate<typename Input, typename OutputSet>\nclass multifunction_body : tbb::internal::no_assign {\npublic:\n    virtual ~multifunction_body () {}\n    virtual void operator()(const Input &/* input*/, OutputSet &/*oset*/) = 0;\n    virtual multifunction_body* clone() = 0;\n    virtual void* get_body_ptr() = 0;\n};\n\n//! leaf for multifunction.  OutputSet can be a std::tuple or a vector.\ntemplate<typename Input, typename OutputSet, typename B >\nclass multifunction_body_leaf : public multifunction_body<Input, OutputSet> {\npublic:\n    multifunction_body_leaf(const B &_body) : body(_body) { }\n    void operator()(const Input &input, OutputSet &oset) __TBB_override {\n        body(input, oset); // body may explicitly put() to one or more of oset.\n    }\n    void* get_body_ptr() __TBB_override { return &body; }\n    multifunction_body_leaf* clone() __TBB_override {\n        return new multifunction_body_leaf<Input, OutputSet,B>(body);\n    }\n\nprivate:\n    B body;\n};\n\n// ------ function bodies for hash_buffers and key-matching joins.\n\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual Output operator()(const Input &input) = 0;  // returns an Output\n        virtual type_to_key_function_body* clone() = 0;\n};\n\n// specialization for ref output\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body<Input,Output&> : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual const Output & operator()(const Input &input) = 0;  // returns a const Output&\n        virtual type_to_key_function_body* clone() = 0;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf : public type_to_key_function_body<Input, Output> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const Input &i) __TBB_override { return body(i); }\n    B get_body() { return body; }\n    type_to_key_function_body_leaf* clone() __TBB_override {\n        return new type_to_key_function_body_leaf< Input, Output, B>(body);\n    }\nprivate:\n    B body;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf<Input,Output&,B> : public type_to_key_function_body< Input, Output&> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n    const Output& operator()(const Input &i) __TBB_override {\n        return body(i);\n    }\n    B get_body() { return body; }\n    type_to_key_function_body_leaf* clone() __TBB_override {\n        return new type_to_key_function_body_leaf< Input, Output&, B>(body);\n    }\nprivate:\n    B body;\n};\n\n// --------------------------- end of function_body containers ------------------------\n\n// --------------------------- node task bodies ---------------------------------------\n\n//! A task that calls a node's forward_task function\ntemplate< typename NodeType >\nclass forward_task_bypass : public task {\n\n    NodeType &my_node;\n\npublic:\n\n    forward_task_bypass( NodeType &n ) : my_node(n) {}\n\n    task *execute() __TBB_override {\n        task * new_task = my_node.forward_task();\n        if (new_task == SUCCESSFULLY_ENQUEUED) new_task = NULL;\n        return new_task;\n    }\n};\n\n//! A task that calls a node's apply_body_bypass function, passing in an input of type Input\n//  return the task* unless it is SUCCESSFULLY_ENQUEUED, in which case return NULL\ntemplate< typename NodeType, typename Input >\nclass apply_body_task_bypass : public task {\n\n    NodeType &my_node;\n    Input my_input;\n\npublic:\n\n    apply_body_task_bypass( NodeType &n, const Input &i ) : my_node(n), my_input(i) {}\n\n    task *execute() __TBB_override {\n        task * next_task = my_node.apply_body_bypass( my_input );\n        if(next_task == SUCCESSFULLY_ENQUEUED) next_task = NULL;\n        return next_task;\n    }\n};\n\n//! A task that calls a node's apply_body_bypass function with no input\ntemplate< typename NodeType >\nclass source_task_bypass : public task {\n\n    NodeType &my_node;\n\npublic:\n\n    source_task_bypass( NodeType &n ) : my_node(n) {}\n\n    task *execute() __TBB_override {\n        task *new_task = my_node.apply_body_bypass( );\n        if(new_task == SUCCESSFULLY_ENQUEUED) return NULL;\n        return new_task;\n    }\n};\n\n// ------------------------ end of node task bodies -----------------------------------\n\n//! An empty functor that takes an Input and returns a default constructed Output\ntemplate< typename Input, typename Output >\nstruct empty_body {\n    Output operator()( const Input & ) const { return Output(); }\n};\n\ntemplate<typename T>\nclass decrementer : public continue_receiver, tbb::internal::no_copy {\n\n    T *my_node;\n\n    task *execute() __TBB_override {\n        return my_node->decrement_counter();\n    }\n\nprotected:\n\n    graph& graph_reference() __TBB_override {\n        return my_node->my_graph;\n    }\n\npublic:\n\n    typedef continue_msg input_type;\n    typedef continue_msg output_type;\n    decrementer( int number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { }\n    void set_owner( T *node ) { my_node = node; }\n};\n\n} // namespace internal\n\n#endif // __TBB__flow_graph_body_impl_H\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_cache_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_cache_impl_H\n#define __TBB__flow_graph_cache_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\n//! A node_cache maintains a std::queue of elements of type T.  Each operation is protected by a lock.\ntemplate< typename T, typename M=spin_mutex >\nclass node_cache {\n    public:\n\n    typedef size_t size_type;\n\n    bool empty() {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        return internal_empty();\n    }\n\n    void add( T &n ) {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        internal_push(n);\n    }\n\n    void remove( T &n ) {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        for ( size_t i = internal_size(); i != 0; --i ) {\n            T &s = internal_pop();\n            if ( &s == &n )  return;  // only remove one predecessor per request\n            internal_push(s);\n        }\n    }\n\n    void clear() {\n        while( !my_q.empty()) (void)my_q.pop();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        my_built_predecessors.clear();\n#endif\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef edge_container<T> built_predecessors_type;\n    built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n    typedef typename edge_container<T>::edge_list_type predecessor_list_type;\n    void internal_add_built_predecessor( T &n ) {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        my_built_predecessors.add_edge(n);\n    }\n\n    void internal_delete_built_predecessor( T &n ) {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        my_built_predecessors.delete_edge(n);\n    }\n\n    void copy_predecessors( predecessor_list_type &v) {\n        typename mutex_type::scoped_lock lock( my_mutex );\n        my_built_predecessors.copy_edges(v);\n    }\n\n    size_t predecessor_count() {\n        typename mutex_type::scoped_lock lock(my_mutex);\n        return (size_t)(my_built_predecessors.edge_count());\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n\n    typedef M mutex_type;\n    mutex_type my_mutex;\n    std::queue< T * > my_q;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    built_predecessors_type my_built_predecessors;\n#endif\n\n    // Assumes lock is held\n    inline bool internal_empty( )  {\n        return my_q.empty();\n    }\n\n    // Assumes lock is held\n    inline size_type internal_size( )  {\n        return my_q.size();\n    }\n\n    // Assumes lock is held\n    inline void internal_push( T &n )  {\n        my_q.push(&n);\n    }\n\n    // Assumes lock is held\n    inline T &internal_pop() {\n        T *v = my_q.front();\n        my_q.pop();\n        return *v;\n    }\n\n};\n\n//! A cache of predecessors that only supports try_get\ntemplate< typename T, typename M=spin_mutex >\n#if __TBB_PREVIEW_ASYNC_MSG\n// TODO: make predecessor_cache type T-independent when async_msg becomes regular feature\nclass predecessor_cache : public node_cache< untyped_sender, M > {\n#else\nclass predecessor_cache : public node_cache< sender<T>, M > {\n#endif // __TBB_PREVIEW_ASYNC_MSG\npublic:\n    typedef M mutex_type;\n    typedef T output_type;\n#if __TBB_PREVIEW_ASYNC_MSG\n    typedef untyped_sender predecessor_type;\n    typedef untyped_receiver successor_type;\n#else\n    typedef sender<output_type> predecessor_type;\n    typedef receiver<output_type> successor_type;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n    predecessor_cache( ) : my_owner( NULL ) { }\n\n    void set_owner( successor_type *owner ) { my_owner = owner; }\n\n    bool get_item( output_type &v ) {\n\n        bool msg = false;\n\n        do {\n            predecessor_type *src;\n            {\n                typename mutex_type::scoped_lock lock(this->my_mutex);\n                if ( this->internal_empty() ) {\n                    break;\n                }\n                src = &this->internal_pop();\n            }\n\n            // Try to get from this sender\n            msg = src->try_get( v );\n\n            if (msg == false) {\n                // Relinquish ownership of the edge\n                if (my_owner)\n                    src->register_successor( *my_owner );\n            } else {\n                // Retain ownership of the edge\n                this->add(*src);\n            }\n        } while ( msg == false );\n        return msg;\n    }\n\n    // If we are removing arcs (rf_clear_edges), call clear() rather than reset().\n    void reset() {\n        if (my_owner) {\n            for(;;) {\n                predecessor_type *src;\n                {\n                    if (this->internal_empty()) break;\n                    src = &this->internal_pop();\n                }\n                src->register_successor( *my_owner );\n            }\n        }\n    }\n\nprotected:\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    using node_cache< predecessor_type, M >::my_built_predecessors;\n#endif\n    successor_type *my_owner;\n};\n\n//! An cache of predecessors that supports requests and reservations\n// TODO: make reservable_predecessor_cache type T-independent when async_msg becomes regular feature\ntemplate< typename T, typename M=spin_mutex >\nclass reservable_predecessor_cache : public predecessor_cache< T, M > {\npublic:\n    typedef M mutex_type;\n    typedef T output_type;\n#if __TBB_PREVIEW_ASYNC_MSG\n    typedef untyped_sender predecessor_type;\n    typedef untyped_receiver successor_type;\n#else\n    typedef sender<T> predecessor_type;\n    typedef receiver<T> successor_type;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n    reservable_predecessor_cache( ) : reserved_src(NULL) { }\n\n    bool\n    try_reserve( output_type &v ) {\n        bool msg = false;\n\n        do {\n            {\n                typename mutex_type::scoped_lock lock(this->my_mutex);\n                if ( reserved_src || this->internal_empty() )\n                    return false;\n\n                reserved_src = &this->internal_pop();\n            }\n\n            // Try to get from this sender\n            msg = reserved_src->try_reserve( v );\n\n            if (msg == false) {\n                typename mutex_type::scoped_lock lock(this->my_mutex);\n                // Relinquish ownership of the edge\n                reserved_src->register_successor( *this->my_owner );\n                reserved_src = NULL;\n            } else {\n                // Retain ownership of the edge\n                this->add( *reserved_src );\n            }\n        } while ( msg == false );\n\n        return msg;\n    }\n\n    bool\n    try_release( ) {\n        reserved_src->try_release( );\n        reserved_src = NULL;\n        return true;\n    }\n\n    bool\n    try_consume( ) {\n        reserved_src->try_consume( );\n        reserved_src = NULL;\n        return true;\n    }\n\n    void reset( ) {\n        reserved_src = NULL;\n        predecessor_cache<T,M>::reset( );\n    }\n\n    void clear() {\n        reserved_src = NULL;\n        predecessor_cache<T,M>::clear();\n    }\n\nprivate:\n    predecessor_type *reserved_src;\n};\n\n\n//! An abstract cache of successors\n// TODO: make successor_cache type T-independent when async_msg becomes regular feature\ntemplate<typename T, typename M=spin_rw_mutex >\nclass successor_cache : tbb::internal::no_copy {\nprotected:\n\n    typedef M mutex_type;\n    mutex_type my_mutex;\n\n#if __TBB_PREVIEW_ASYNC_MSG\n    typedef untyped_receiver successor_type;\n    typedef untyped_receiver *pointer_type;\n    typedef untyped_sender owner_type;\n#else\n    typedef receiver<T> successor_type;\n    typedef receiver<T> *pointer_type;\n    typedef sender<T> owner_type;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n    typedef std::list< pointer_type > successors_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    edge_container<successor_type> my_built_successors;\n#endif\n    successors_type my_successors;\n\n    owner_type *my_owner;\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename edge_container<successor_type>::edge_list_type successor_list_type;\n\n    edge_container<successor_type> &built_successors() { return my_built_successors; }\n\n    void internal_add_built_successor( successor_type &r) {\n        typename mutex_type::scoped_lock l(my_mutex, true);\n        my_built_successors.add_edge( r );\n    }\n\n    void internal_delete_built_successor( successor_type &r) {\n        typename mutex_type::scoped_lock l(my_mutex, true);\n        my_built_successors.delete_edge(r);\n    }\n\n    void copy_successors( successor_list_type &v) {\n        typename mutex_type::scoped_lock l(my_mutex, false);\n        my_built_successors.copy_edges(v);\n    }\n\n    size_t successor_count() {\n        typename mutex_type::scoped_lock l(my_mutex,false);\n        return my_built_successors.edge_count();\n    }\n\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    successor_cache( ) : my_owner(NULL) {}\n\n    void set_owner( owner_type *owner ) { my_owner = owner; }\n\n    virtual ~successor_cache() {}\n\n    void register_successor( successor_type &r ) {\n        typename mutex_type::scoped_lock l(my_mutex, true);\n        my_successors.push_back( &r );\n    }\n\n    void remove_successor( successor_type &r ) {\n        typename mutex_type::scoped_lock l(my_mutex, true);\n        for ( typename successors_type::iterator i = my_successors.begin();\n              i != my_successors.end(); ++i ) {\n            if ( *i == & r ) {\n                my_successors.erase(i);\n                break;\n            }\n        }\n    }\n\n    bool empty() {\n        typename mutex_type::scoped_lock l(my_mutex, false);\n        return my_successors.empty();\n    }\n\n    void clear() {\n        my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        my_built_successors.clear();\n#endif\n    }\n\n#if !__TBB_PREVIEW_ASYNC_MSG\n    virtual task * try_put_task( const T &t ) = 0;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n };  // successor_cache<T>\n\n//! An abstract cache of successors, specialized to continue_msg\ntemplate<>\nclass successor_cache< continue_msg > : tbb::internal::no_copy {\nprotected:\n\n    typedef spin_rw_mutex mutex_type;\n    mutex_type my_mutex;\n\n#if __TBB_PREVIEW_ASYNC_MSG\n    typedef untyped_receiver successor_type;\n    typedef untyped_receiver *pointer_type;\n#else\n    typedef receiver<continue_msg> successor_type;\n    typedef receiver<continue_msg> *pointer_type;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n    typedef std::list< pointer_type > successors_type;\n    successors_type my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    edge_container<successor_type> my_built_successors;\n    typedef edge_container<successor_type>::edge_list_type successor_list_type;\n#endif\n\n    sender<continue_msg> *my_owner;\n\npublic:\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n    edge_container<successor_type> &built_successors() { return my_built_successors; }\n\n    void internal_add_built_successor( successor_type &r) {\n        mutex_type::scoped_lock l(my_mutex, true);\n        my_built_successors.add_edge( r );\n    }\n\n    void internal_delete_built_successor( successor_type &r) {\n        mutex_type::scoped_lock l(my_mutex, true);\n        my_built_successors.delete_edge(r);\n    }\n\n    void copy_successors( successor_list_type &v) {\n        mutex_type::scoped_lock l(my_mutex, false);\n        my_built_successors.copy_edges(v);\n    }\n\n    size_t successor_count() {\n        mutex_type::scoped_lock l(my_mutex,false);\n        return my_built_successors.edge_count();\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    successor_cache( ) : my_owner(NULL) {}\n\n    void set_owner( sender<continue_msg> *owner ) { my_owner = owner; }\n\n    virtual ~successor_cache() {}\n\n    void register_successor( successor_type &r ) {\n        mutex_type::scoped_lock l(my_mutex, true);\n        my_successors.push_back( &r );\n        if ( my_owner && r.is_continue_receiver() ) {\n            r.register_predecessor( *my_owner );\n        }\n    }\n\n    void remove_successor( successor_type &r ) {\n        mutex_type::scoped_lock l(my_mutex, true);\n        for ( successors_type::iterator i = my_successors.begin();\n              i != my_successors.end(); ++i ) {\n            if ( *i == & r ) {\n                // TODO: Check if we need to test for continue_receiver before\n                // removing from r.\n                if ( my_owner )\n                    r.remove_predecessor( *my_owner );\n                my_successors.erase(i);\n                break;\n            }\n        }\n    }\n\n    bool empty() {\n        mutex_type::scoped_lock l(my_mutex, false);\n        return my_successors.empty();\n    }\n\n    void clear() {\n        my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        my_built_successors.clear();\n#endif\n    }\n\n#if !__TBB_PREVIEW_ASYNC_MSG\n    virtual task * try_put_task( const continue_msg &t ) = 0;\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n};  // successor_cache< continue_msg >\n\n//! A cache of successors that are broadcast to\n// TODO: make broadcast_cache type T-independent when async_msg becomes regular feature\ntemplate<typename T, typename M=spin_rw_mutex>\nclass broadcast_cache : public successor_cache<T, M> {\n    typedef M mutex_type;\n    typedef typename successor_cache<T,M>::successors_type successors_type;\n\npublic:\n\n    broadcast_cache( ) {}\n\n    // as above, but call try_put_task instead, and return the last task we received (if any)\n#if __TBB_PREVIEW_ASYNC_MSG\n    template<typename X>\n    task * try_put_task( const X &t ) {\n#else\n    task * try_put_task( const T &t ) __TBB_override {\n#endif // __TBB_PREVIEW_ASYNC_MSG\n        task * last_task = NULL;\n        bool upgraded = true;\n        typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\n        typename successors_type::iterator i = this->my_successors.begin();\n        while ( i != this->my_successors.end() ) {\n            task *new_task = (*i)->try_put_task(t);\n            // workaround for icc bug\n            graph& graph_ref = (*i)->graph_reference();\n            last_task = combine_tasks(graph_ref, last_task, new_task);  // enqueue if necessary\n            if(new_task) {\n                ++i;\n            }\n            else {  // failed\n                if ( (*i)->register_predecessor(*this->my_owner) ) {\n                    if (!upgraded) {\n                        l.upgrade_to_writer();\n                        upgraded = true;\n                    }\n                    i = this->my_successors.erase(i);\n                } else {\n                    ++i;\n                }\n            }\n        }\n        return last_task;\n    }\n\n};\n\n//! A cache of successors that are put in a round-robin fashion\n// TODO: make round_robin_cache type T-independent when async_msg becomes regular feature\ntemplate<typename T, typename M=spin_rw_mutex >\nclass round_robin_cache : public successor_cache<T, M> {\n    typedef size_t size_type;\n    typedef M mutex_type;\n    typedef typename successor_cache<T,M>::successors_type successors_type;\n\npublic:\n\n    round_robin_cache( ) {}\n\n    size_type size() {\n        typename mutex_type::scoped_lock l(this->my_mutex, false);\n        return this->my_successors.size();\n    }\n\n#if __TBB_PREVIEW_ASYNC_MSG\n    template<typename X>\n    task * try_put_task( const X &t ) {\n#else\n    task *try_put_task( const T &t ) __TBB_override {\n#endif // __TBB_PREVIEW_ASYNC_MSG\n        bool upgraded = true;\n        typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\n        typename successors_type::iterator i = this->my_successors.begin();\n        while ( i != this->my_successors.end() ) {\n            task *new_task = (*i)->try_put_task(t);\n            if ( new_task ) {\n                return new_task;\n            } else {\n               if ( (*i)->register_predecessor(*this->my_owner) ) {\n                   if (!upgraded) {\n                       l.upgrade_to_writer();\n                       upgraded = true;\n                   }\n                   i = this->my_successors.erase(i);\n               }\n               else {\n                   ++i;\n               }\n            }\n        }\n        return NULL;\n    }\n};\n\n} // namespace internal\n\n#endif // __TBB__flow_graph_cache_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_impl_H\n#define __TBB_flow_graph_impl_H\n\n#include \"../tbb_stddef.h\"\n#include \"../task.h\"\n#include \"../task_arena.h\"\n#include \"../flow_graph_abstractions.h\"\n\n#include <list>\n\n#if TBB_DEPRECATED_FLOW_ENQUEUE\n#define FLOW_SPAWN(a) tbb::task::enqueue((a))\n#else\n#define FLOW_SPAWN(a) tbb::task::spawn((a))\n#endif\n\nnamespace tbb {\nnamespace flow {\n\nnamespace internal {\nstatic tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1;\n}\n\nnamespace interface10 {\n\nusing tbb::flow::internal::SUCCESSFULLY_ENQUEUED;\n\nclass graph;\nclass graph_node;\n\ntemplate <typename GraphContainerType, typename GraphNodeType>\nclass graph_iterator {\n    friend class graph;\n    friend class graph_node;\npublic:\n    typedef size_t size_type;\n    typedef GraphNodeType value_type;\n    typedef GraphNodeType* pointer;\n    typedef GraphNodeType& reference;\n    typedef const GraphNodeType& const_reference;\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! Default constructor\n    graph_iterator() : my_graph(NULL), current_node(NULL) {}\n\n    //! Copy constructor\n    graph_iterator(const graph_iterator& other) :\n        my_graph(other.my_graph), current_node(other.current_node)\n    {}\n\n    //! Assignment\n    graph_iterator& operator=(const graph_iterator& other) {\n        if (this != &other) {\n            my_graph = other.my_graph;\n            current_node = other.current_node;\n        }\n        return *this;\n    }\n\n    //! Dereference\n    reference operator*() const;\n\n    //! Dereference\n    pointer operator->() const;\n\n    //! Equality\n    bool operator==(const graph_iterator& other) const {\n        return ((my_graph == other.my_graph) && (current_node == other.current_node));\n    }\n\n    //! Inequality\n    bool operator!=(const graph_iterator& other) const { return !(operator==(other)); }\n\n    //! Pre-increment\n    graph_iterator& operator++() {\n        internal_forward();\n        return *this;\n    }\n\n    //! Post-increment\n    graph_iterator operator++(int) {\n        graph_iterator result = *this;\n        operator++();\n        return result;\n    }\n\nprivate:\n    // the graph over which we are iterating\n    GraphContainerType *my_graph;\n    // pointer into my_graph's my_nodes list\n    pointer current_node;\n\n    //! Private initializing constructor for begin() and end() iterators\n    graph_iterator(GraphContainerType *g, bool begin);\n    void internal_forward();\n};  // class graph_iterator\n\n// flags to modify the behavior of the graph reset().  Can be combined.\nenum reset_flags {\n    rf_reset_protocol = 0,\n    rf_reset_bodies = 1 << 0,  // delete the current node body, reset to a copy of the initial node body.\n    rf_clear_edges = 1 << 1   // delete edges\n};\n\nnamespace internal {\n\nvoid activate_graph(graph& g);\nvoid deactivate_graph(graph& g);\nbool is_graph_active(graph& g);\nvoid spawn_in_graph_arena(graph& g, tbb::task& arena_task);\nvoid add_task_to_graph_reset_list(graph& g, tbb::task *tp);\ntemplate<typename F> void execute_in_graph_arena(graph& g, F& f);\n\n}\n\n//! The graph class\n/** This class serves as a handle to the graph */\nclass graph : tbb::internal::no_copy, public tbb::flow::graph_proxy {\n    friend class graph_node;\n\n    template< typename Body >\n    class run_task : public task {\n    public:\n        run_task(Body& body) : my_body(body) {}\n        tbb::task *execute() __TBB_override {\n            my_body();\n            return NULL;\n        }\n    private:\n        Body my_body;\n    };\n\n    template< typename Receiver, typename Body >\n    class run_and_put_task : public task {\n    public:\n        run_and_put_task(Receiver &r, Body& body) : my_receiver(r), my_body(body) {}\n        tbb::task *execute() __TBB_override {\n            tbb::task *res = my_receiver.try_put_task(my_body());\n            if (res == SUCCESSFULLY_ENQUEUED) res = NULL;\n            return res;\n        }\n    private:\n        Receiver &my_receiver;\n        Body my_body;\n    };\n    typedef std::list<tbb::task *> task_list_type;\n\n    class wait_functor {\n        tbb::task* graph_root_task;\n    public:\n        wait_functor(tbb::task* t) : graph_root_task(t) {}\n        void operator()() const { graph_root_task->wait_for_all(); }\n    };\n\n    //! A functor that spawns a task\n    class spawn_functor : tbb::internal::no_assign {\n        tbb::task& spawn_task;\n    public:\n        spawn_functor(tbb::task& t) : spawn_task(t) {}\n        void operator()() const {\n            FLOW_SPAWN(spawn_task);\n        }\n    };\n\n    void prepare_task_arena(bool reinit = false) {\n        if (reinit) {\n            __TBB_ASSERT(my_task_arena, \"task arena is NULL\");\n            my_task_arena->terminate();\n            my_task_arena->initialize(tbb::task_arena::attach());\n        }\n        else {\n            __TBB_ASSERT(my_task_arena == NULL, \"task arena is not NULL\");\n            my_task_arena = new tbb::task_arena(tbb::task_arena::attach());\n        }\n        if (!my_task_arena->is_active()) // failed to attach\n            my_task_arena->initialize(); // create a new, default-initialized arena\n        __TBB_ASSERT(my_task_arena->is_active(), \"task arena is not active\");\n    }\n\npublic:\n    //! Constructs a graph with isolated task_group_context\n    graph();\n\n    //! Constructs a graph with use_this_context as context\n    explicit graph(tbb::task_group_context& use_this_context);\n\n    //! Destroys the graph.\n    /** Calls wait_for_all, then destroys the root task and context. */\n    ~graph();\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name(const char *name);\n#endif\n\n    void increment_wait_count() {\n        reserve_wait();\n    }\n\n    void decrement_wait_count() {\n        release_wait();\n    }\n\n    //! Used to register that an external entity may still interact with the graph.\n    /** The graph will not return from wait_for_all until a matching number of decrement_wait_count calls\n    is made. */\n    void reserve_wait() __TBB_override;\n\n    //! Deregisters an external entity that may have interacted with the graph.\n    /** The graph will not return from wait_for_all until all the number of decrement_wait_count calls\n    matches the number of increment_wait_count calls. */\n    void release_wait() __TBB_override;\n\n    //! Spawns a task that runs a body and puts its output to a specific receiver\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n    that need to block a wait_for_all() on the graph.  For example a one-off source. */\n    template< typename Receiver, typename Body >\n    void run(Receiver &r, Body body) {\n        if (internal::is_graph_active(*this)) {\n            task* rtask = new (task::allocate_additional_child_of(*root_task()))\n                run_and_put_task< Receiver, Body >(r, body);\n            my_task_arena->execute(spawn_functor(*rtask));\n        }\n    }\n\n    //! Spawns a task that runs a function object\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n    that need to block a wait_for_all() on the graph. For example a one-off source. */\n    template< typename Body >\n    void run(Body body) {\n        if (internal::is_graph_active(*this)) {\n            task* rtask = new (task::allocate_additional_child_of(*root_task())) run_task< Body >(body);\n            my_task_arena->execute(spawn_functor(*rtask));\n        }\n    }\n\n    //! Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.\n    /** The waiting thread will go off and steal work while it is block in the wait_for_all. */\n    void wait_for_all() {\n        cancelled = false;\n        caught_exception = false;\n        if (my_root_task) {\n#if TBB_USE_EXCEPTIONS\n            try {\n#endif\n                my_task_arena->execute(wait_functor(my_root_task));\n                cancelled = my_context->is_group_execution_cancelled();\n#if TBB_USE_EXCEPTIONS\n            }\n            catch (...) {\n                my_root_task->set_ref_count(1);\n                my_context->reset();\n                caught_exception = true;\n                cancelled = true;\n                throw;\n            }\n#endif\n            // TODO: the \"if\" condition below is just a work-around to support the concurrent wait\n            // mode. The cancellation and exception mechanisms are still broken in this mode.\n            // Consider using task group not to re-implement the same functionality.\n            if (!(my_context->traits() & tbb::task_group_context::concurrent_wait)) {\n                my_context->reset();  // consistent with behavior in catch()\n                my_root_task->set_ref_count(1);\n            }\n        }\n    }\n\n    //! Returns the root task of the graph\n    tbb::task * root_task() {\n        return my_root_task;\n    }\n\n    // ITERATORS\n    template<typename C, typename N>\n    friend class graph_iterator;\n\n    // Graph iterator typedefs\n    typedef graph_iterator<graph, graph_node> iterator;\n    typedef graph_iterator<const graph, const graph_node> const_iterator;\n\n    // Graph iterator constructors\n    //! start iterator\n    iterator begin();\n    //! end iterator\n    iterator end();\n    //! start const iterator\n    const_iterator begin() const;\n    //! end const iterator\n    const_iterator end() const;\n    //! start const iterator\n    const_iterator cbegin() const;\n    //! end const iterator\n    const_iterator cend() const;\n\n    //! return status of graph execution\n    bool is_cancelled() { return cancelled; }\n    bool exception_thrown() { return caught_exception; }\n\n    // thread-unsafe state reset.\n    void reset(reset_flags f = rf_reset_protocol);\n\nprivate:\n    tbb::task *my_root_task;\n    tbb::task_group_context *my_context;\n    bool own_context;\n    bool cancelled;\n    bool caught_exception;\n    bool my_is_active;\n    task_list_type my_reset_task_list;\n\n    graph_node *my_nodes, *my_nodes_last;\n\n    tbb::spin_mutex nodelist_mutex;\n    void register_node(graph_node *n);\n    void remove_node(graph_node *n);\n\n    tbb::task_arena* my_task_arena;\n\n    friend void internal::activate_graph(graph& g);\n    friend void internal::deactivate_graph(graph& g);\n    friend bool internal::is_graph_active(graph& g);\n    friend void internal::spawn_in_graph_arena(graph& g, tbb::task& arena_task);\n    friend void internal::add_task_to_graph_reset_list(graph& g, tbb::task *tp);\n    template<typename F> friend void internal::execute_in_graph_arena(graph& g, F& f);\n\n    friend class tbb::interface7::internal::task_arena_base;\n\n};  // class graph\n\n//! The base of all graph nodes.\nclass graph_node : tbb::internal::no_copy {\n    friend class graph;\n    template<typename C, typename N>\n    friend class graph_iterator;\nprotected:\n    graph& my_graph;\n    graph_node *next, *prev;\npublic:\n    explicit graph_node(graph& g);\n    \n    virtual ~graph_node();\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    virtual void set_name(const char *name) = 0;\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    virtual void extract() = 0;\n#endif\n\nprotected:\n    // performs the reset on an individual node.\n    virtual void reset_node(reset_flags f = rf_reset_protocol) = 0;\n};  // class graph_node\n\nnamespace internal {\n\ninline void activate_graph(graph& g) {\n    g.my_is_active = true;\n}\n\ninline void deactivate_graph(graph& g) {\n    g.my_is_active = false;\n}\n\ninline bool is_graph_active(graph& g) {\n    return g.my_is_active;\n}\n\n//! Executes custom functor inside graph arena\ntemplate<typename F>\ninline void execute_in_graph_arena(graph& g, F& f) {\n    if (is_graph_active(g)) {\n        __TBB_ASSERT(g.my_task_arena && g.my_task_arena->is_active(), NULL);\n        g.my_task_arena->execute(f);\n    }\n}\n\n//! Spawns a task inside graph arena\ninline void spawn_in_graph_arena(graph& g, tbb::task& arena_task) {\n    graph::spawn_functor s_fn(arena_task);\n    execute_in_graph_arena(g, s_fn);\n}\n\ninline void add_task_to_graph_reset_list(graph& g, tbb::task *tp) {\n    g.my_reset_task_list.push_back(tp);\n}\n\n} // namespace internal\n\n} // namespace interface10\n} // namespace flow\n} // namespace tbb\n\n#endif // __TBB_flow_graph_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_indexer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_indexer_impl_H\n#define __TBB__flow_graph_indexer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"_flow_graph_types_impl.h\"\n\nnamespace internal {\n\n    // Output of the indexer_node is a tbb::flow::tagged_msg, and will be of\n    // the form  tagged_msg<tag, result>\n    // where the value of tag will indicate which result was put to the\n    // successor.\n\n    template<typename IndexerNodeBaseType, typename T, size_t K>\n    task* do_try_put(const T &v, void *p) {\n        typename IndexerNodeBaseType::output_type o(K, v);\n        return reinterpret_cast<IndexerNodeBaseType *>(p)->try_put_task(&o);\n    }\n\n    template<typename TupleTypes,int N>\n    struct indexer_helper {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {\n            typedef typename tuple_element<N-1, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, N-1>;\n            tbb::flow::get<N-1>(my_input).set_up(p, indexer_node_put_task, g);\n            indexer_helper<TupleTypes,N-1>::template set_indexer_node_pointer<IndexerNodeBaseType,PortTuple>(my_input, p, g);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            indexer_helper<TupleTypes,N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            indexer_helper<TupleTypes,N-1>::extract(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename TupleTypes>\n    struct indexer_helper<TupleTypes,1> {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {\n            typedef typename tuple_element<0, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, 0>;\n            tbb::flow::get<0>(my_input).set_up(p, indexer_node_put_task, g);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename T>\n    class indexer_input_port : public receiver<T> {\n    private:\n        void* my_indexer_ptr;\n        typedef task* (* forward_function_ptr)(T const &, void* );\n        forward_function_ptr my_try_put_task;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        spin_mutex my_pred_mutex;\n        typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n        built_predecessors_type my_built_predecessors;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n        graph* my_graph;\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        indexer_input_port() : my_pred_mutex(), my_graph(NULL) {}\n        indexer_input_port( const indexer_input_port & other) : receiver<T>(), my_pred_mutex(), my_graph(other.my_graph) {\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n        void set_up(void* p, forward_function_ptr f, graph& g) {\n            my_indexer_ptr = p;\n            my_try_put_task = f;\n            my_graph = &g;\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<T>::predecessor_list_type predecessor_list_type;\n        typedef typename receiver<T>::predecessor_type predecessor_type;\n\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        size_t predecessor_count() __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            return my_built_predecessors.edge_count();\n        }\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.add_edge(p);\n        }\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.delete_edge(p);\n        }\n        void copy_predecessors( predecessor_list_type &v) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.copy_edges(v);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const T &v) __TBB_override {\n            return my_try_put_task(v, my_indexer_ptr);\n        }\n\n        graph& graph_reference() __TBB_override {\n            return *my_graph;\n        }\n\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void reset_receiver(reset_flags f) __TBB_override { if(f&rf_clear_edges) my_built_predecessors.clear(); }\n#else\n        void reset_receiver(reset_flags /*f*/) __TBB_override { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() { my_built_predecessors.receiver_extract(*this); }\n#endif\n    };\n\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_FE {\n    public:\n        static const int N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef InputTuple input_type;\n\n        // Some versions of Intel(R) C++ Compiler fail to generate an implicit constructor for the class which has std::tuple as a member.\n        indexer_node_FE() : my_inputs() {}\n\n        input_type &input_ports() { return my_inputs; }\n    protected:\n        input_type my_inputs;\n    };\n\n    //! indexer_node_base\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_base : public graph_node, public indexer_node_FE<InputTuple, OutputType,StructTypes>,\n                           public sender<OutputType> {\n    protected:\n       using graph_node::my_graph;\n    public:\n        static const size_t N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef StructTypes tuple_types;\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef indexer_node_FE<InputTuple, output_type,StructTypes> input_ports_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ,\n             blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        typedef indexer_node_base<InputTuple,output_type,StructTypes> class_type;\n\n        class indexer_node_base_operation : public aggregated_operation<indexer_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type const *my_arg;\n                successor_type *my_succ;\n                task *bypass_t;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *succv;\n#endif\n            };\n            indexer_node_base_operation(const output_type* e, op_type t) :\n                type(char(t)), my_arg(e) {}\n            indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)) {}\n            indexer_node_base_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, indexer_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, indexer_node_base_operation>;\n        aggregator<handler_type, indexer_node_base_operation> my_aggregator;\n\n        void handle_operations(indexer_node_base_operation* op_list) {\n            indexer_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n\n                case reg_succ:\n                    my_successors.register_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__put_task: {\n                        current->bypass_t = my_successors.try_put_task(*(current->my_arg));\n                        __TBB_store_with_release(current->status, SUCCEEDED);  // return of try_put_task actual return value\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->succv));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        indexer_node_base(graph& g) : graph_node(g), input_ports_type() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, g);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        indexer_node_base(const indexer_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, other.my_graph);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        task * try_put_task(output_type const *v) { // not a virtual method in this class\n            indexer_node_base_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t successor_count() __TBB_override {\n            indexer_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_successors( successor_list_type &v) __TBB_override {\n            indexer_node_base_operation op_data(blt_succ_cpy);\n            op_data.succv = &v;\n            my_aggregator.execute(&op_data);\n        }\n        void extract() __TBB_override {\n            my_successors.built_successors().sender_extract(*this);\n            indexer_helper<StructTypes,N>::extract(this->my_inputs);\n        }\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        void reset_node(reset_flags f) __TBB_override {\n            if(f & rf_clear_edges) {\n                my_successors.clear();\n                indexer_helper<StructTypes,N>::reset_inputs(this->my_inputs,f);\n            }\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n    };  //indexer_node_base\n\n\n    template<int N, typename InputTuple> struct input_types;\n\n    template<typename InputTuple>\n    struct input_types<1, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename internal::tagged_msg<size_t, first_type > type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<2, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<3, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<4, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<5, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<6, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<7, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<8, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<9, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<10, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename tuple_element<9, InputTuple>::type tenth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type,\n                                                      tenth_type> type;\n    };\n\n    // type generators\n    template<typename OutputTuple>\n    struct indexer_types : public input_types<tuple_size<OutputTuple>::value, OutputTuple> {\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef typename input_types<N, OutputTuple>::type output_type;\n        typedef typename wrap_tuple_elements<N,indexer_input_port,OutputTuple>::type input_ports_type;\n        typedef internal::indexer_node_FE<input_ports_type,output_type,OutputTuple> indexer_FE_type;\n        typedef internal::indexer_node_base<input_ports_type, output_type, OutputTuple> indexer_base_type;\n    };\n\n    template<class OutputTuple>\n    class unfolded_indexer_node : public indexer_types<OutputTuple>::indexer_base_type {\n    public:\n        typedef typename indexer_types<OutputTuple>::input_ports_type input_ports_type;\n        typedef OutputTuple tuple_types;\n        typedef typename indexer_types<OutputTuple>::output_type output_type;\n    private:\n        typedef typename indexer_types<OutputTuple>::indexer_base_type base_type;\n    public:\n        unfolded_indexer_node(graph& g) : base_type(g) {}\n        unfolded_indexer_node(const unfolded_indexer_node &other) : base_type(other) {}\n    };\n\n} /* namespace internal */\n\n#endif  /* __TBB__flow_graph_indexer_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_item_buffer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_item_buffer_impl_H\n#define __TBB__flow_graph_item_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"tbb/internal/_flow_graph_types_impl.h\"  // for aligned_pair\n\n// in namespace tbb::flow::interfaceX (included in _flow_graph_node_impl.h)\n\n    //! Expandable buffer of items.  The possible operations are push, pop,\n    //* tests for empty and so forth.  No mutual exclusion is built in.\n    //* objects are constructed into and explicitly-destroyed.  get_my_item gives\n    // a read-only reference to the item in the buffer.  set_my_item may be called\n    // with either an empty or occupied slot.\n\n    using internal::aligned_pair;\n    using internal::alignment_of;\n\nnamespace internal {\n\n    template <typename T, typename A=cache_aligned_allocator<T> >\n    class item_buffer {\n    public:\n        typedef T item_type;\n        enum buffer_item_state { no_item=0, has_item=1, reserved_item=2 };\n    protected:\n        typedef size_t size_type;\n        typedef typename aligned_pair<item_type, buffer_item_state>::type buffer_item_type;\n        typedef typename A::template rebind<buffer_item_type>::other allocator_type;\n\n        buffer_item_type *my_array;\n        size_type my_array_size;\n        static const size_type initial_buffer_size = 4;\n        size_type my_head;\n        size_type my_tail;\n\n        bool buffer_empty() const { return my_head == my_tail; }\n\n        buffer_item_type &item(size_type i) {\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value),NULL);\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);\n            return my_array[i & (my_array_size - 1) ];\n        }\n\n        const buffer_item_type &item(size_type i) const {\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value), NULL);\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);\n            return my_array[i & (my_array_size-1)];\n        }\n\n        bool my_item_valid(size_type i) const { return (i < my_tail) && (i >= my_head) && (item(i).second != no_item); }\n        bool my_item_reserved(size_type i) const { return item(i).second == reserved_item; }\n\n        // object management in buffer\n        const item_type &get_my_item(size_t i) const {\n            __TBB_ASSERT(my_item_valid(i),\"attempt to get invalid item\");\n            item_type *itm = (tbb::internal::punned_cast<item_type *>(&(item(i).first)));\n            return *(const item_type *)itm;\n        }\n\n        // may be called with an empty slot or a slot that has already been constructed into.\n        void set_my_item(size_t i, const item_type &o) {\n            if(item(i).second != no_item) {\n                destroy_item(i);\n            }\n            new(&(item(i).first)) item_type(o);\n            item(i).second = has_item;\n        }\n\n        // destructively-fetch an object from the buffer\n        void fetch_item(size_t i, item_type &o) {\n            __TBB_ASSERT(my_item_valid(i), \"Trying to fetch an empty slot\");\n            o = get_my_item(i);  // could have std::move assign semantics\n            destroy_item(i);\n        }\n\n        // move an existing item from one slot to another.  The moved-to slot must be unoccupied,\n        // the moved-from slot must exist and not be reserved.  The after, from will be empty,\n        // to will be occupied but not reserved\n        void move_item(size_t to, size_t from) {\n            __TBB_ASSERT(!my_item_valid(to), \"Trying to move to a non-empty slot\");\n            __TBB_ASSERT(my_item_valid(from), \"Trying to move from an empty slot\");\n            set_my_item(to, get_my_item(from));   // could have std::move semantics\n            destroy_item(from);\n\n        }\n\n        // put an item in an empty slot.  Return true if successful, else false\n        bool place_item(size_t here, const item_type &me) {\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n            if(my_item_valid(here)) return false;\n#endif\n            set_my_item(here, me);\n            return true;\n        }\n\n        // could be implemented with std::move semantics\n        void swap_items(size_t i, size_t j) {\n            __TBB_ASSERT(my_item_valid(i) && my_item_valid(j), \"attempt to swap invalid item(s)\");\n            item_type temp = get_my_item(i);\n            set_my_item(i, get_my_item(j));\n            set_my_item(j, temp);\n        }\n\n        void destroy_item(size_type i) {\n            __TBB_ASSERT(my_item_valid(i), \"destruction of invalid item\");\n            (tbb::internal::punned_cast<item_type *>(&(item(i).first)))->~item_type();\n            item(i).second = no_item;\n        }\n\n        // returns the front element\n        const item_type& front() const\n        {\n            __TBB_ASSERT(my_item_valid(my_head), \"attempt to fetch head non-item\");\n            return get_my_item(my_head);\n        }\n\n        // returns  the back element\n        const item_type& back() const\n        {\n            __TBB_ASSERT(my_item_valid(my_tail - 1), \"attempt to fetch head non-item\");\n            return get_my_item(my_tail - 1);\n        }\n\n        // following methods are for reservation of the front of a bufffer.\n        void reserve_item(size_type i) { __TBB_ASSERT(my_item_valid(i) && !my_item_reserved(i), \"item cannot be reserved\"); item(i).second = reserved_item; }\n        void release_item(size_type i) { __TBB_ASSERT(my_item_reserved(i), \"item is not reserved\"); item(i).second = has_item; }\n\n        void destroy_front() { destroy_item(my_head); ++my_head; }\n        void destroy_back() { destroy_item(my_tail-1); --my_tail; }\n\n        // we have to be able to test against a new tail value without changing my_tail\n        // grow_array doesn't work if we change my_tail when the old array is too small\n        size_type size(size_t new_tail = 0) { return (new_tail ? new_tail : my_tail) - my_head; }\n        size_type capacity() { return my_array_size; }\n        // sequencer_node does not use this method, so we don't\n        // need a version that passes in the new_tail value.\n        bool buffer_full() { return size() >= capacity(); }\n\n        //! Grows the internal array.\n        void grow_my_array( size_t minimum_size ) {\n            // test that we haven't made the structure inconsistent.\n            __TBB_ASSERT(capacity() >= my_tail - my_head, \"total items exceed capacity\");\n            size_type new_size = my_array_size ? 2*my_array_size : initial_buffer_size;\n            while( new_size<minimum_size )\n                new_size*=2;\n\n            buffer_item_type* new_array = allocator_type().allocate(new_size);\n\n            // initialize validity to \"no\"\n            for( size_type i=0; i<new_size; ++i ) { new_array[i].second = no_item; }\n\n            for( size_type i=my_head; i<my_tail; ++i) {\n                if(my_item_valid(i)) {  // sequencer_node may have empty slots\n                    // placement-new copy-construct; could be std::move\n                    char *new_space = (char *)&(new_array[i&(new_size-1)].first);\n                    (void)new(new_space) item_type(get_my_item(i));\n                    new_array[i&(new_size-1)].second = item(i).second;\n                }\n            }\n\n            clean_up_buffer(/*reset_pointers*/false);\n\n            my_array = new_array;\n            my_array_size = new_size;\n        }\n\n        bool push_back(item_type &v) {\n            if(buffer_full()) {\n                grow_my_array(size() + 1);\n            }\n            set_my_item(my_tail, v);\n            ++my_tail;\n            return true;\n        }\n\n        bool pop_back(item_type &v) {\n            if (!my_item_valid(my_tail-1)) {\n                return false;\n            }\n            v = this->back();\n            destroy_back();\n            return true;\n        }\n\n        bool pop_front(item_type &v) {\n            if(!my_item_valid(my_head)) {\n                return false;\n            }\n            v = this->front();\n            destroy_front();\n            return true;\n        }\n\n        // This is used both for reset and for grow_my_array.  In the case of grow_my_array\n        // we want to retain the values of the head and tail.\n        void clean_up_buffer(bool reset_pointers) {\n            if (my_array) {\n                for( size_type i=my_head; i<my_tail; ++i ) {\n                    if(my_item_valid(i))\n                        destroy_item(i);\n                }\n                allocator_type().deallocate(my_array,my_array_size);\n            }\n            my_array = NULL;\n            if(reset_pointers) {\n                my_head = my_tail = my_array_size = 0;\n            }\n        }\n\n    public:\n        //! Constructor\n        item_buffer( ) : my_array(NULL), my_array_size(0),\n            my_head(0), my_tail(0) {\n            grow_my_array(initial_buffer_size);\n        }\n\n        ~item_buffer() {\n            clean_up_buffer(/*reset_pointers*/true);\n        }\n\n        void reset() { clean_up_buffer(/*reset_pointers*/true); grow_my_array(initial_buffer_size); }\n\n    };\n\n    //! item_buffer with reservable front-end.  NOTE: if reserving, do not\n    //* complete operation with pop_front(); use consume_front().\n    //* No synchronization built-in.\n    template<typename T, typename A=cache_aligned_allocator<T> >\n    class reservable_item_buffer : public item_buffer<T, A> {\n    protected:\n        using item_buffer<T, A>::my_item_valid;\n        using item_buffer<T, A>::my_head;\n\n    public:\n        reservable_item_buffer() : item_buffer<T, A>(), my_reserved(false) {}\n        void reset() {my_reserved = false; item_buffer<T,A>::reset(); }\n    protected:\n\n        bool reserve_front(T &v) {\n            if(my_reserved || !my_item_valid(this->my_head)) return false;\n            my_reserved = true;\n            // reserving the head\n            v = this->front();\n            this->reserve_item(this->my_head);\n            return true;\n        }\n\n        void consume_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to consume a non-reserved item\");\n            this->destroy_front();\n            my_reserved = false;\n        }\n\n        void release_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to release a non-reserved item\");\n            this->release_item(this->my_head);\n            my_reserved = false;\n        }\n\n        bool my_reserved;\n    };\n\n}  // namespace internal\n\n#endif // __TBB__flow_graph_item_buffer_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_join_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_join_impl_H\n#define __TBB__flow_graph_join_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\nnamespace internal {\n\n    struct forwarding_base : tbb::internal::no_assign {\n        forwarding_base(graph &g) : graph_ref(g) {}\n        virtual ~forwarding_base() {}\n        // decrement_port_count may create a forwarding task.  If we cannot handle the task\n        // ourselves, ask decrement_port_count to deal with it.\n        virtual task * decrement_port_count(bool handle_task) = 0;\n        virtual void increment_port_count() = 0;\n        // moved here so input ports can queue tasks\n        graph& graph_ref;\n    };\n\n    // specialization that lets us keep a copy of the current_key for building results.\n    // KeyType can be a reference type.\n    template<typename KeyType>\n    struct matching_forwarding_base : public forwarding_base {\n        typedef typename tbb::internal::strip<KeyType>::type current_key_type;\n        matching_forwarding_base(graph &g) : forwarding_base(g) { }\n        virtual task * increment_key_count(current_key_type const & /*t*/, bool /*handle_task*/) = 0; // {return NULL;}\n        current_key_type current_key; // so ports can refer to FE's desired items\n    };\n\n    template< int N >\n    struct join_helper {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<N-1>( my_input ).set_join_node_pointer(port);\n            join_helper<N-1>::set_join_node_pointer( my_input, port );\n        }\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).consume();\n            join_helper<N-1>::consume_reservations( my_input );\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).release();\n        }\n\n        template <typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            join_helper<N-1>::release_reservations(my_input);\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            if ( !tbb::flow::get<N-1>( my_input ).reserve( tbb::flow::get<N-1>( out ) ) ) return false;\n            if ( !join_helper<N-1>::reserve( my_input, out ) ) {\n                release_my_reservation( my_input );\n                return false;\n            }\n            return true;\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            bool res = tbb::flow::get<N-1>(my_input).get_item(tbb::flow::get<N-1>(out) ); // may fail\n            return join_helper<N-1>::get_my_item(my_input, out) && res;       // do get on other inputs before returning\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            join_helper<N-1>::reset_my_port(my_input);\n            tbb::flow::get<N-1>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<N-1>(my_input).set_my_key_func(tbb::flow::get<N-1>(my_key_funcs));\n            tbb::flow::get<N-1>(my_key_funcs) = NULL;\n            join_helper<N-1>::set_key_functors(my_input, my_key_funcs);\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<N-1>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<N-1>(my_inputs).set_my_key_func(tbb::flow::get<N-1>(other_inputs).get_my_key_func()->clone());\n            }\n            join_helper<N-1>::copy_key_functors(my_inputs, other_inputs);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            join_helper<N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            join_helper<N-1>::extract_inputs(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<N>\n\n    template< >\n    struct join_helper<1> {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<0>( my_input ).set_join_node_pointer(port);\n        }\n\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).consume();\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).release();\n        }\n\n        template<typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>( my_input ).reserve( tbb::flow::get<0>( out ) );\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>(my_input).get_item(tbb::flow::get<0>(out));\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<0>(my_input).set_my_key_func(tbb::flow::get<0>(my_key_funcs));\n            tbb::flow::get<0>(my_key_funcs) = NULL;\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<0>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<0>(my_inputs).set_my_key_func(tbb::flow::get<0>(other_inputs).get_my_key_func()->clone());\n            }\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<1>\n\n    //! The two-phase join port\n    template< typename T >\n    class reserving_port : public receiver<T> {\n    public:\n        typedef T input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n#endif\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_pred, rem_pred, res_item, rel_res, con_res\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef reserving_port<T> class_type;\n\n        class reserving_port_operation : public aggregated_operation<reserving_port_operation> {\n        public:\n            char type;\n            union {\n                T *my_arg;\n                predecessor_type *my_pred;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *plist;\n#endif\n            };\n            reserving_port_operation(const T& e, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(&e)) {}\n            reserving_port_operation(const predecessor_type &s, op_type t) : type(char(t)),\n                my_pred(const_cast<predecessor_type *>(&s)) {}\n            reserving_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, reserving_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, reserving_port_operation>;\n        aggregator<handler_type, reserving_port_operation> my_aggregator;\n\n        void handle_operations(reserving_port_operation* op_list) {\n            reserving_port_operation *current;\n            bool no_predecessors;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_pred:\n                    no_predecessors = my_predecessors.empty();\n                    my_predecessors.add(*(current->my_pred));\n                    if ( no_predecessors ) {\n                        (void) my_join->decrement_port_count(true); // may try to forward\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(current->my_pred));\n                    if(my_predecessors.empty()) my_join->increment_port_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_item:\n                    if ( reserved ) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else if ( my_predecessors.try_reserve( *(current->my_arg) ) ) {\n                        reserved = true;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    } else {\n                        if ( my_predecessors.empty() ) {\n                            my_join->increment_port_count();\n                        }\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case rel_res:\n                    reserved = false;\n                    my_predecessors.try_release( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case con_res:\n                    reserved = false;\n                    my_predecessors.try_consume( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_predecessors.internal_add_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task( const T & ) __TBB_override {\n            return NULL;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        //! Constructor\n        reserving_port() : reserved(false) {\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        reserving_port(const reserving_port& /* other */) : receiver<T>() {\n            reserved = false;\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        //! Add a predecessor\n        bool register_predecessor( predecessor_type &src ) __TBB_override {\n            reserving_port_operation op_data(src, reg_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Remove a predecessor\n        bool remove_predecessor( predecessor_type &src ) __TBB_override {\n            reserving_port_operation op_data(src, rem_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Reserve an item from the port\n        bool reserve( T &v ) {\n            reserving_port_operation op_data(v, res_item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Release the port\n        void release( ) {\n            reserving_port_operation op_data(rel_res);\n            my_aggregator.execute(&op_data);\n        }\n\n        //! Complete use of the port\n        void consume( ) {\n            reserving_port_operation op_data(con_res);\n            my_aggregator.execute(&op_data);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }\n        void internal_add_built_predecessor(predecessor_type &src) __TBB_override {\n            reserving_port_operation op_data(src, add_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {\n            reserving_port_operation op_data(src, del_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            reserving_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            reserving_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            my_predecessors.built_predecessors().receiver_extract(*this);\n        }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            if(f & rf_clear_edges) my_predecessors.clear();\n            else\n            my_predecessors.reset();\n            reserved = false;\n            __TBB_ASSERT(!(f&rf_clear_edges) || my_predecessors.empty(), \"port edges not removed\");\n        }\n\n    private:\n        forwarding_base *my_join;\n        reservable_predecessor_cache< T, null_mutex > my_predecessors;\n        bool reserved;\n    };  // reserving_port\n\n    //! queueing join_port\n    template<typename T>\n    class queueing_port : public receiver<T>, public item_buffer<T> {\n    public:\n        typedef T input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef queueing_port<T> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n    // ----------- Aggregator ------------\n    private:\n        enum op_type { get__item, res_port, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class queueing_port_operation : public aggregated_operation<queueing_port_operation> {\n        public:\n            char type;\n            T my_val;\n            T *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            predecessor_type *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            task * bypass_t;\n            // constructor for value parameter\n            queueing_port_operation(const T& e, op_type t) :\n                type(char(t)), my_val(e)\n                , bypass_t(NULL)\n            {}\n            // constructor for pointer parameter\n            queueing_port_operation(const T* p, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(p))\n                , bypass_t(NULL)\n            {}\n            // constructor with no parameter\n            queueing_port_operation(op_type t) : type(char(t))\n                , bypass_t(NULL)\n            {}\n        };\n\n        typedef internal::aggregating_functor<class_type, queueing_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, queueing_port_operation>;\n        aggregator<handler_type, queueing_port_operation> my_aggregator;\n\n        void handle_operations(queueing_port_operation* op_list) {\n            queueing_port_operation *current;\n            bool was_empty;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put_task: {\n                        task *rtask = NULL;\n                        was_empty = this->buffer_empty();\n                        this->push_back(current->my_val);\n                        if (was_empty) rtask = my_join->decrement_port_count(false);\n                        else\n                            rtask = SUCCESSFULLY_ENQUEUED;\n                        current->bypass_t = rtask;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case get__item:\n                    if(!this->buffer_empty()) {\n                        *(current->my_arg) = this->front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    else {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case res_port:\n                    __TBB_ASSERT(this->my_item_valid(this->my_head), \"No item to reset\");\n                    this->destroy_front();\n                    if(this->my_item_valid(this->my_head)) {\n                        (void)my_join->decrement_port_count(true);\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n    // ------------ End Aggregator ---------------\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const T &v) __TBB_override {\n            queueing_port_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            __TBB_ASSERT(op_data.status == SUCCEEDED || !op_data.bypass_t, \"inconsistent return from aggregator\");\n            if(!op_data.bypass_t) return SUCCESSFULLY_ENQUEUED;\n            return op_data.bypass_t;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        //! Constructor\n        queueing_port() : item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! copy constructor\n        queueing_port(const queueing_port& /* other */) : receiver<T>(), item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! record parent for tallying available items\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        bool get_item( T &v ) {\n            queueing_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            queueing_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            queueing_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            queueing_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            queueing_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            queueing_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            item_buffer<T>::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        void reset_receiver(reset_flags f) __TBB_override {\n            tbb::internal::suppress_unused_warning(f);\n            item_buffer<T>::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            if (f & rf_clear_edges)\n                my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        forwarding_base *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<predecessor_type> my_built_predecessors;\n#endif\n    };  // queueing_port\n\n#include \"_flow_graph_tagged_buffer_impl.h\"\n\n    template<typename K>\n    struct count_element {\n        K my_key;\n        size_t my_value;\n    };\n\n    // method to access the key in the counting table\n    // the ref has already been removed from K\n    template< typename K >\n    struct key_to_count_functor {\n        typedef count_element<K> table_item_type;\n        const K& operator()(const table_item_type& v) { return v.my_key; }\n    };\n\n    // the ports can have only one template parameter.  We wrap the types needed in\n    // a traits type\n    template< class TraitsType >\n    class key_matching_port :\n        public receiver<typename TraitsType::T>,\n        public hash_buffer< typename TraitsType::K, typename TraitsType::T, typename TraitsType::TtoK,\n                typename TraitsType::KHash > {\n    public:\n        typedef TraitsType traits;\n        typedef key_matching_port<traits> class_type;\n        typedef typename TraitsType::T input_type;\n        typedef typename TraitsType::K key_type;\n        typedef typename tbb::internal::strip<key_type>::type noref_key_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef typename TraitsType::TtoK type_to_key_func_type;\n        typedef typename TraitsType::KHash hash_compare_type;\n        typedef hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n    private:\n// ----------- Aggregator ------------\n    private:\n        enum op_type { try__put, get__item, res_port\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class key_matching_port_operation : public aggregated_operation<key_matching_port_operation> {\n        public:\n            char type;\n            input_type my_val;\n            input_type *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            predecessor_type *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            // constructor for value parameter\n            key_matching_port_operation(const input_type& e, op_type t) :\n                type(char(t)), my_val(e) {}\n            // constructor for pointer parameter\n            key_matching_port_operation(const input_type* p, op_type t) :\n                type(char(t)), my_arg(const_cast<input_type*>(p)) {}\n            // constructor with no parameter\n            key_matching_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_port_operation>;\n        aggregator<handler_type, key_matching_port_operation> my_aggregator;\n\n        void handle_operations(key_matching_port_operation* op_list) {\n            key_matching_port_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put: {\n                        bool was_inserted = this->insert_with_key(current->my_val);\n                        // return failure if a duplicate insertion occurs\n                        __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);\n                    }\n                    break;\n                case get__item:\n                    // use current_key from FE for item\n                    if(!this->find_with_key(my_join->current_key, *(current->my_arg))) {\n                        __TBB_ASSERT(false, \"Failed to find item corresponding to current_key.\");\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_port:\n                    // use current_key from FE for item\n                    this->delete_with_key(my_join->current_key);\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const input_type& v) __TBB_override {\n            key_matching_port_operation op_data(v, try__put);\n            task *rtask = NULL;\n            my_aggregator.execute(&op_data);\n            if(op_data.status == SUCCEEDED) {\n                rtask = my_join->increment_key_count((*(this->get_key_func()))(v), false);  // may spawn\n                // rtask has to reflect the return status of the try_put\n                if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n            }\n            return rtask;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        key_matching_port() : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        key_matching_port(const key_matching_port& /*other*/) : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        ~key_matching_port() { }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = dynamic_cast<matching_forwarding_base<key_type>*>(join);\n        }\n\n        void set_my_key_func(type_to_key_func_type *f) { this->set_key_func(f); }\n\n        type_to_key_func_type* get_my_key_func() { return this->get_key_func(); }\n\n        bool get_item( input_type &v ) {\n            // aggregator uses current_key from FE for Key\n            key_matching_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            key_matching_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            key_matching_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            key_matching_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            key_matching_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            key_matching_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() {\n            buffer_type::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif\n        void reset_receiver(reset_flags f ) __TBB_override {\n            tbb::internal::suppress_unused_warning(f);\n            buffer_type::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           if (f & rf_clear_edges)\n              my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        // my_join forwarding base used to count number of inputs that\n        // received key.\n        matching_forwarding_base<key_type> *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<predecessor_type> my_built_predecessors;\n#endif\n    };  // key_matching_port\n\n    using namespace graph_policy_namespace;\n\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base;\n\n    //! join_node_FE : implements input port policy\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_FE;\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<reserving, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<reserving, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base((other.forwarding_base::graph_ref)), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n       void increment_port_count() __TBB_override {\n            ++ports_with_no_inputs;\n        }\n\n        // if all input_ports have predecessors, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task) __TBB_override {\n            if(ports_with_no_inputs.fetch_and_decrement() == 1) {\n                if(internal::is_graph_active(this->graph_ref)) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                }\n            }\n            return NULL;\n        }\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::reset_inputs(my_inputs, f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract( ) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_inputs;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_inputs) return false;\n            return join_helper<N>::reserve(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            join_helper<N>::consume_reservations(my_inputs);\n        }\n        void tuple_rejected() {\n            join_helper<N>::release_reservations(my_inputs);\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_inputs;\n    };  // join_node_FE<reserving, ... >\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<queueing, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<queueing, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base((other.forwarding_base::graph_ref)), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {\n            ports_with_no_items = N;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task) __TBB_override\n        {\n            if(ports_with_no_items.fetch_and_decrement() == 1) {\n                if(internal::is_graph_active(this->graph_ref)) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass <base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                }\n            }\n            return NULL;\n        }\n\n        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            reset_port_count();\n            join_helper<N>::reset_inputs(my_inputs, f );\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            reset_port_count();\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_items;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_items) return false;\n            return join_helper<N>::get_items(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            reset_port_count();\n            join_helper<N>::reset_ports(my_inputs);\n        }\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_items;\n    };  // join_node_FE<queueing, ...>\n\n    // key_matching join front-end.\n    template<typename InputTuple, typename OutputTuple, typename K, typename KHash>\n    class join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple> : public matching_forwarding_base<K>,\n             // buffer of key value counts\n              public hash_buffer<   // typedefed below to key_to_count_buffer_type\n                  typename tbb::internal::strip<K>::type&,        // force ref type on K\n                  count_element<typename tbb::internal::strip<K>::type>,\n                  internal::type_to_key_function_body<\n                      count_element<typename tbb::internal::strip<K>::type>,\n                      typename tbb::internal::strip<K>::type& >,\n                  KHash >,\n             // buffer of output items\n             public item_buffer<OutputTuple> {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef K key_type;\n        typedef typename tbb::internal::strip<key_type>::type unref_key_type;\n        typedef KHash key_hash_compare;\n        // must use K without ref.\n        typedef count_element<unref_key_type> count_element_type;\n        // method that lets us refer to the key of this type.\n        typedef key_to_count_functor<unref_key_type> key_to_count_func;\n        typedef internal::type_to_key_function_body< count_element_type, unref_key_type&> TtoK_function_body_type;\n        typedef internal::type_to_key_function_body_leaf<count_element_type, unref_key_type&, key_to_count_func> TtoK_function_body_leaf_type;\n        // this is the type of the special table that keeps track of the number of discrete\n        // elements corresponding to each key that we've seen.\n        typedef hash_buffer< unref_key_type&, count_element_type, TtoK_function_body_type, key_hash_compare >\n                 key_to_count_buffer_type;\n        typedef item_buffer<output_type> output_buffer_type;\n        typedef join_node_base<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> base_node_type; // for forwarding\n        typedef matching_forwarding_base<key_type> forwarding_base_type;\n\n// ----------- Aggregator ------------\n        // the aggregator is only needed to serialize the access to the hash table.\n        // and the output_buffer_type base class\n    private:\n        enum op_type { res_count, inc_count, may_succeed, try_make };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_FE<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> class_type;\n\n        class key_matching_FE_operation : public aggregated_operation<key_matching_FE_operation> {\n        public:\n            char type;\n            unref_key_type my_val;\n            output_type* my_output;\n            task *bypass_t;\n            bool enqueue_task;\n            // constructor for value parameter\n            key_matching_FE_operation(const unref_key_type& e , bool q_task , op_type t) : type(char(t)), my_val(e),\n                 my_output(NULL), bypass_t(NULL), enqueue_task(q_task) {}\n            key_matching_FE_operation(output_type *p, op_type t) : type(char(t)), my_output(p), bypass_t(NULL),\n                 enqueue_task(true) {}\n            // constructor with no parameter\n            key_matching_FE_operation(op_type t) : type(char(t)), my_output(NULL), bypass_t(NULL), enqueue_task(true) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_FE_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_FE_operation>;\n        aggregator<handler_type, key_matching_FE_operation> my_aggregator;\n\n        // called from aggregator, so serialized\n        // returns a task pointer if the a task would have been enqueued but we asked that\n        // it be returned.  Otherwise returns NULL.\n        task * fill_output_buffer(unref_key_type &t, bool should_enqueue, bool handle_task) {\n            output_type l_out;\n            task *rtask = NULL;\n            bool do_fwd = should_enqueue && this->buffer_empty() && internal::is_graph_active(this->graph_ref);\n            this->current_key = t;\n            this->delete_with_key(this->current_key);   // remove the key\n            if(join_helper<N>::get_items(my_inputs, l_out)) {  //  <== call back\n                this->push_back(l_out);\n                if(do_fwd) {  // we enqueue if receiving an item from predecessor, not if successor asks for item\n                    rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(handle_task) {\n                        internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                        rtask = NULL;\n                    }\n                    do_fwd = false;\n                }\n                // retire the input values\n                join_helper<N>::reset_ports(my_inputs);  //  <== call back\n            }\n            else {\n                __TBB_ASSERT(false, \"should have had something to push\");\n            }\n            return rtask;\n        }\n\n        void handle_operations(key_matching_FE_operation* op_list) {\n            key_matching_FE_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case res_count:  // called from BE\n                    {\n                        this->destroy_front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case inc_count: {  // called from input ports\n                        count_element_type *p = 0;\n                        unref_key_type &t = current->my_val;\n                        bool do_enqueue = current->enqueue_task;\n                        if(!(this->find_ref_with_key(t,p))) {\n                            count_element_type ev;\n                            ev.my_key = t;\n                            ev.my_value = 0;\n                            this->insert_with_key(ev);\n                            if(!(this->find_ref_with_key(t,p))) {\n                                __TBB_ASSERT(false, \"should find key after inserting it\");\n                            }\n                        }\n                        if(++(p->my_value) == size_t(N)) {\n                            task *rtask = fill_output_buffer(t, true, do_enqueue);\n                            __TBB_ASSERT(!rtask || !do_enqueue, \"task should not be returned\");\n                            current->bypass_t = rtask;\n                        }\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case may_succeed:  // called from BE\n                    __TBB_store_with_release(current->status, this->buffer_empty() ? FAILED : SUCCEEDED);\n                    break;\n                case try_make:  // called from BE\n                    if(this->buffer_empty()) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else {\n                        *(current->my_output) = this->front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n\n    public:\n        template<typename FunctionTuple>\n        join_node_FE(graph &g, FunctionTuple &TtoK_funcs) : forwarding_base_type(g), my_node(NULL) {\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::set_key_functors(my_inputs, TtoK_funcs);\n            my_aggregator.initialize_handler(handler_type(this));\n                    TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base_type((other.forwarding_base_type::graph_ref)), key_to_count_buffer_type(),\n        output_buffer_type() {\n            my_node = NULL;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::copy_key_functors(my_inputs, const_cast<input_type &>(other.my_inputs));\n            my_aggregator.initialize_handler(handler_type(this));\n            TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {  // called from BE\n            key_matching_FE_operation op_data(res_count);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        // return a task if we are asked and did create one.\n        task *increment_key_count(unref_key_type const & t, bool handle_task) __TBB_override {  // called from input_ports\n            key_matching_FE_operation op_data(t, handle_task, inc_count);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n        task *decrement_port_count(bool /*handle_task*/) __TBB_override { __TBB_ASSERT(false, NULL); return NULL; }\n\n        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f ) {\n            // called outside of parallel contexts\n            join_helper<N>::reset_inputs(my_inputs, f);\n\n            key_to_count_buffer_type::reset();\n            output_buffer_type::reset();\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            // called outside of parallel contexts\n            join_helper<N>::extract_inputs(my_inputs);\n            key_to_count_buffer_type::reset();  // have to reset the tag counts\n            output_buffer_type::reset();  // also the queue of outputs\n            // my_node->current_tag = NO_TAG;\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {  // called from back-end\n            key_matching_FE_operation op_data(may_succeed);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // cannot lock while calling back to input_ports.  current_key will only be set\n        // and reset under the aggregator, so it will remain consistent.\n        bool try_to_make_tuple(output_type &out) {\n            key_matching_FE_operation op_data(&out,try_make);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        void tuple_accepted() {\n            reset_port_count();  // reset current_key after ports reset.\n        }\n\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;  // input ports\n        base_node_type *my_node;\n    }; // join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple>\n\n    //! join_node_base\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,\n                           public sender<OutputTuple> {\n    protected:\n        using graph_node::my_graph;\n    public:\n        typedef OutputTuple output_type;\n\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;\n        using input_ports_type::tuple_build_may_succeed;\n        using input_ports_type::try_to_make_tuple;\n        using input_ports_type::tuple_accepted;\n        using input_ports_type::tuple_rejected;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__get, do_fwrd, do_fwrd_bypass\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ, blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_base<JP,InputTuple,OutputTuple> class_type;\n\n        class join_node_base_operation : public aggregated_operation<join_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type *my_arg;\n                successor_type *my_succ;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *slist;\n#endif\n            };\n            task *bypass_t;\n            join_node_base_operation(const output_type& e, op_type t) : type(char(t)),\n                my_arg(const_cast<output_type*>(&e)), bypass_t(NULL) {}\n            join_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)), bypass_t(NULL) {}\n            join_node_base_operation(op_type t) : type(char(t)), bypass_t(NULL) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, join_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, join_node_base_operation>;\n        bool forwarder_busy;\n        aggregator<handler_type, join_node_base_operation> my_aggregator;\n\n        void handle_operations(join_node_base_operation* op_list) {\n            join_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_succ: {\n                        my_successors.register_successor(*(current->my_succ));\n                        if(tuple_build_may_succeed() && !forwarder_busy && internal::is_graph_active(my_graph)) {\n                            task *rtask = new ( task::allocate_additional_child_of(*(my_graph.root_task())) )\n                                    forward_task_bypass\n                                    <join_node_base<JP,InputTuple,OutputTuple> >(*this);\n                            internal::spawn_in_graph_arena(my_graph, *rtask);\n                            forwarder_busy = true;\n                        }\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__get:\n                    if(tuple_build_may_succeed()) {\n                        if(try_to_make_tuple(*(current->my_arg))) {\n                            tuple_accepted();\n                            __TBB_store_with_release(current->status, SUCCEEDED);\n                        }\n                        else __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else __TBB_store_with_release(current->status, FAILED);\n                    break;\n                case do_fwrd_bypass: {\n                        bool build_succeeded;\n                        task *last_task = NULL;\n                        output_type out;\n                        if(tuple_build_may_succeed()) {  // checks output queue of FE\n                            do {\n                                build_succeeded = try_to_make_tuple(out);  // fetch front_end of queue\n                                if(build_succeeded) {\n                                    task *new_task = my_successors.try_put_task(out);\n                                    last_task = combine_tasks(my_graph, last_task, new_task);\n                                    if(new_task) {\n                                        tuple_accepted();\n                                    }\n                                    else {\n                                        tuple_rejected();\n                                        build_succeeded = false;\n                                    }\n                                }\n                            } while(build_succeeded);\n                        }\n                        current->bypass_t = last_task;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                        forwarder_busy = false;\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->slist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        join_node_base(graph &g) : graph_node(g), input_ports_type(g), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        join_node_base(const join_node_base& other) :\n            graph_node(other.graph_node::my_graph), input_ports_type(other),\n            sender<OutputTuple>(), forwarder_busy(false), my_successors() {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        template<typename FunctionTuple>\n        join_node_base(graph &g, FunctionTuple f) : graph_node(g), input_ports_type(g, f), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool try_get( output_type &v) __TBB_override {\n            join_node_base_operation op_data(v, try__get);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t successor_count() __TBB_override {\n            join_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_successors(successor_list_type &l) __TBB_override {\n            join_node_base_operation op_data(blt_succ_cpy);\n            op_data.slist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() __TBB_override {\n            input_ports_type::extract();\n            my_successors.built_successors().sender_extract(*this);\n        }\n#endif\n\n    protected:\n\n        void reset_node(reset_flags f) __TBB_override {\n            input_ports_type::reset(f);\n            if(f & rf_clear_edges) my_successors.clear();\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n\n        friend class forward_task_bypass< join_node_base<JP, InputTuple, OutputTuple> >;\n        task *forward_task() {\n            join_node_base_operation op_data(do_fwrd_bypass);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n    };  // join_node_base\n\n    // join base class type generator\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    struct join_base {\n        typedef typename internal::join_node_base<JP, typename wrap_tuple_elements<N,PT,OutputTuple>::type, OutputTuple> type;\n    };\n\n    template<int N, typename OutputTuple, typename K, typename KHash>\n    struct join_base<N, key_matching_port, OutputTuple, key_matching<K,KHash> > {\n        typedef key_matching<K, KHash> key_traits_type;\n        typedef K key_type;\n        typedef KHash key_hash_compare;\n        typedef typename internal::join_node_base< key_traits_type,\n                // ports type\n                typename wrap_key_tuple_elements<N,key_matching_port,key_traits_type,OutputTuple>::type,\n                OutputTuple > type;\n    };\n\n    //! unfolded_join_node : passes input_ports_type to join_node_base.  We build the input port type\n    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, key_matching_port)\n    //  and should match the typename.\n\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    class unfolded_join_node : public join_base<N,PT,OutputTuple,JP>::type {\n    public:\n        typedef typename wrap_tuple_elements<N, PT, OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<JP, input_ports_type, output_type > base_type;\n    public:\n        unfolded_join_node(graph &g) : base_type(g) {}\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    struct key_from_message_body {\n        K operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<K>(t);\n        }\n    };\n    // Adds const to reference type\n    template <typename K, typename T>\n    struct key_from_message_body<K&,T> {\n        const K& operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<const K&>(t);\n        }\n    };\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n    // key_matching unfolded_join_node.  This must be a separate specialization because the constructors\n    // differ.\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<2,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<2,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n    public:\n        typedef typename wrap_key_tuple_elements<2,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 2, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<3,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<3,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n    public:\n        typedef typename wrap_key_tuple_elements<3,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 3, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<4,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<4,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n    public:\n        typedef typename wrap_key_tuple_elements<4,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 4, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<5,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<5,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n    public:\n        typedef typename wrap_key_tuple_elements<5,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 5, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<6,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<6,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n    public:\n        typedef typename wrap_key_tuple_elements<6,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4, typename Body5>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4, Body5 body5)\n                : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 6, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<7,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<7,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n    public:\n        typedef typename wrap_key_tuple_elements<7,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 7, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<8,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<8,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n    public:\n        typedef typename wrap_key_tuple_elements<8,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 8, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<9,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<9,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n    public:\n        typedef typename wrap_key_tuple_elements<9,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7, typename Body8>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 9, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<10,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<10,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n        typedef typename tbb::flow::tuple_element<9, OutputTuple>::type T9;\n    public:\n        typedef typename wrap_key_tuple_elements<10,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename internal::type_to_key_function_body<T9, K> *f9_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p, f9_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>()),\n                    new internal::type_to_key_function_body_leaf<T9, K, key_from_message_body<K,T9> >(key_from_message_body<K,T9>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n            typename Body5, typename Body6, typename Body7, typename Body8, typename Body9>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8, Body9 body9) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8),\n                    new internal::type_to_key_function_body_leaf<T9, K, Body9>(body9)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 10, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n    //! templated function to refer to input ports of the join node\n    template<size_t N, typename JNT>\n    typename tbb::flow::tuple_element<N, typename JNT::input_ports_type>::type &input_port(JNT &jn) {\n        return tbb::flow::get<N>(jn.input_ports());\n    }\n\n}\n#endif // __TBB__flow_graph_join_impl_H\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_node_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_node_impl_H\n#define __TBB__flow_graph_node_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"_flow_graph_item_buffer_impl.h\"\n\n//! @cond INTERNAL\nnamespace internal {\n\n    using tbb::internal::aggregated_operation;\n    using tbb::internal::aggregating_functor;\n    using tbb::internal::aggregator;\n\n     template< typename T, typename A >\n     class function_input_queue : public item_buffer<T,A> {\n     public:\n         bool empty() const {\n             return this->buffer_empty();\n         }\n\n         const T& front() const {\n             return this->item_buffer<T, A>::front();\n         }\n\n         bool pop( T& t ) {\n             return this->pop_front( t );\n         }\n\n         void pop() {\n             this->destroy_front();\n         }\n\n         bool push( T& t ) {\n             return this->push_back( t );\n         }\n     };\n\n    //! Input and scheduling for a function node that takes a type Input as input\n    //  The only up-ref is apply_body_impl, which should implement the function\n    //  call and any handling of the result.\n    template< typename Input, typename Policy, typename A, typename ImplType >\n    class function_input_base : public receiver<Input>, tbb::internal::no_assign {\n        enum op_type {reg_pred, rem_pred, try_fwd, tryput_bypass, app_body_bypass, occupy_concurrency\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred,\n            blt_pred_cnt, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n        };\n        typedef function_input_base<Input, Policy, A, ImplType> class_type;\n\n    public:\n\n        //! The input type of this receiver\n        typedef Input input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef predecessor_cache<input_type, null_mutex > predecessor_cache_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n        typedef typename A::template rebind< input_queue_type >::other queue_allocator_type;\n        __TBB_STATIC_ASSERT(!((internal::has_policy<queueing, Policy>::value) && (internal::has_policy<rejecting, Policy>::value)),\n                              \"queueing and rejecting policies can't be specified simultaneously\");\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n        //! Constructor for function_input_base\n        function_input_base( graph &g, size_t max_concurrency)\n            : my_graph_ref(g), my_max_concurrency(max_concurrency), my_concurrency(0),\n              my_queue(!internal::has_policy<rejecting, Policy>::value ? new input_queue_type() : NULL),\n            forwarder_busy(false)\n        {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Copy constructor\n        function_input_base( const function_input_base& src) :\n            receiver<Input>(), tbb::internal::no_assign(),\n            my_graph_ref(src.my_graph_ref), my_max_concurrency(src.my_max_concurrency),\n            my_concurrency(0), my_queue(src.my_queue ? new input_queue_type() : NULL),\n            forwarder_busy(false)\n        {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Destructor\n        // The queue is allocated by the constructor for {multi}function_node.\n        // TODO: pass the graph_buffer_policy to the base so it can allocate the queue instead.\n        // This would be an interface-breaking change.\n        virtual ~function_input_base() {\n            if ( my_queue ) delete my_queue;\n        }\n\n        task* try_put_task( const input_type& t) __TBB_override {\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            return try_put_task_impl(t, internal::has_policy<lightweight, Policy>());\n#else\n            return try_put_task_impl(t);\n#endif\n        }\n\n        //! Adds src to the list of cached predecessors.\n        bool register_predecessor( predecessor_type &src ) __TBB_override {\n            operation_type op_data(reg_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n        //! Removes src from the list of cached predecessors.\n        bool remove_predecessor( predecessor_type &src ) __TBB_override {\n            operation_type op_data(rem_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        //! Adds to list of predecessors added by make_edge\n        void internal_add_built_predecessor( predecessor_type &src) __TBB_override {\n            operation_type op_data(add_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        //! removes from to list of predecessors (used by remove_edge)\n        void internal_delete_built_predecessor( predecessor_type &src) __TBB_override {\n            operation_type op_data(del_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            operation_type op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &v) __TBB_override {\n            operation_type op_data(blt_pred_cpy);\n            op_data.predv = &v;\n            my_aggregator.execute(&op_data);\n        }\n\n        built_predecessors_type &built_predecessors() __TBB_override {\n            return my_predecessors.built_predecessors();\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    protected:\n\n        void reset_function_input_base( reset_flags f) {\n            my_concurrency = 0;\n            if(my_queue) {\n                my_queue->reset();\n            }\n            reset_receiver(f);\n            forwarder_busy = false;\n        }\n\n        graph& my_graph_ref;\n        const size_t my_max_concurrency;\n        size_t my_concurrency;\n        input_queue_type *my_queue;\n        predecessor_cache<input_type, null_mutex > my_predecessors;\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            if( f & rf_clear_edges) my_predecessors.clear();\n            else\n                my_predecessors.reset();\n            __TBB_ASSERT(!(f & rf_clear_edges) || my_predecessors.empty(), \"function_input_base reset failed\");\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_graph_ref;\n        }\n\n        task* try_get_postponed_task(const input_type& i) {\n            operation_type op_data(i, app_body_bypass);  // tries to pop an item or get_item\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n    private:\n\n        friend class apply_body_task_bypass< class_type, input_type >;\n        friend class forward_task_bypass< class_type >;\n\n        class operation_type : public aggregated_operation< operation_type > {\n        public:\n            char type;\n            union {\n                input_type *elem;\n                predecessor_type *r;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *predv;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n            };\n            tbb::task *bypass_t;\n            operation_type(const input_type& e, op_type t) :\n                type(char(t)), elem(const_cast<input_type*>(&e)) {}\n            operation_type(op_type t) : type(char(t)), r(NULL) {}\n        };\n\n        bool forwarder_busy;\n        typedef internal::aggregating_functor<class_type, operation_type> handler_type;\n        friend class internal::aggregating_functor<class_type, operation_type>;\n        aggregator< handler_type, operation_type > my_aggregator;\n\n        task* perform_queued_requests() {\n            task* new_task = NULL;\n            if(my_queue) {\n                if(!my_queue->empty()) {\n                    ++my_concurrency;\n                    new_task = create_body_task(my_queue->front());\n\n                    my_queue->pop();\n                }\n            }\n            else {\n                input_type i;\n                if(my_predecessors.get_item(i)) {\n                    ++my_concurrency;\n                    new_task = create_body_task(i);\n                }\n            }\n            return new_task;\n        }\n        void handle_operations(operation_type *op_list) {\n            operation_type *tmp;\n            while (op_list) {\n                tmp = op_list;\n                op_list = op_list->next;\n                switch (tmp->type) {\n                case reg_pred:\n                    my_predecessors.add(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    if (!forwarder_busy) {\n                        forwarder_busy = true;\n                        spawn_forward_task();\n                    }\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case app_body_bypass: {\n                        tmp->bypass_t = NULL;\n                        __TBB_ASSERT(my_max_concurrency != 0, NULL);\n                        --my_concurrency;\n                        if(my_concurrency<my_max_concurrency)\n                            tmp->bypass_t = perform_queued_requests();\n\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case tryput_bypass: internal_try_put_task(tmp);  break;\n                case try_fwd: internal_forward(tmp);  break;\n                case occupy_concurrency:\n                    if (my_concurrency < my_max_concurrency) {\n                        ++my_concurrency;\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    } else {\n                        __TBB_store_with_release(tmp->status, FAILED);\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred: {\n                         my_predecessors.internal_add_built_predecessor(*(tmp->r));\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    tmp->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors( *(tmp->predv) );\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n        //! Put to the node, but return the task instead of enqueueing it\n        void internal_try_put_task(operation_type *op) {\n            __TBB_ASSERT(my_max_concurrency != 0, NULL);\n            if (my_concurrency < my_max_concurrency) {\n               ++my_concurrency;\n               task * new_task = create_body_task(*(op->elem));\n               op->bypass_t = new_task;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else if ( my_queue && my_queue->push(*(op->elem)) ) {\n               op->bypass_t = SUCCESSFULLY_ENQUEUED;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else {\n               op->bypass_t = NULL;\n               __TBB_store_with_release(op->status, FAILED);\n           }\n        }\n\n        //! Tries to spawn bodies if available and if concurrency allows\n        void internal_forward(operation_type *op) {\n            op->bypass_t = NULL;\n            if (my_concurrency < my_max_concurrency || !my_max_concurrency)\n                op->bypass_t = perform_queued_requests();\n            if(op->bypass_t)\n                __TBB_store_with_release(op->status, SUCCEEDED);\n            else {\n                forwarder_busy = false;\n                __TBB_store_with_release(op->status, FAILED);\n            }\n        }\n\n        task* internal_try_put_bypass( const input_type& t ) {\n            operation_type op_data(t, tryput_bypass);\n            my_aggregator.execute(&op_data);\n            if( op_data.status == internal::SUCCEEDED ) {\n                return op_data.bypass_t;\n            }\n            return NULL;\n        }\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n        task* try_put_task_impl( const input_type& t, tbb::internal::true_type ) {\n            if( my_max_concurrency == 0 ) {\n                return apply_body_bypass(t);\n            } else {\n                operation_type check_op(t, occupy_concurrency);\n                my_aggregator.execute(&check_op);\n                if( check_op.status == internal::SUCCEEDED ) {\n                    return apply_body_bypass(t);\n                }\n                return internal_try_put_bypass(t);\n            }\n        }\n\n        task* try_put_task_impl( const input_type& t, tbb::internal::false_type ) {\n#else\n        task* try_put_task_impl( const input_type& t ) {\n#endif\n            if( my_max_concurrency == 0 ) {\n                return create_body_task(t);\n            } else {\n                return internal_try_put_bypass(t);\n            }\n        }\n\n        //! Applies the body to the provided input\n        //  then decides if more work is available\n        task * apply_body_bypass( const input_type &i ) {\n            return static_cast<ImplType *>(this)->apply_body_impl_bypass(i);\n        }\n\n        //! allocates a task to apply a body\n        inline task * create_body_task( const input_type &input ) {\n\n            return (internal::is_graph_active(my_graph_ref)) ?\n                new(task::allocate_additional_child_of(*(my_graph_ref.root_task())))\n                    apply_body_task_bypass < class_type, input_type >(*this, input) :\n                NULL;\n        }\n\n       //! This is executed by an enqueued task, the \"forwarder\"\n       task *forward_task() {\n           operation_type op_data(try_fwd);\n           task *rval = NULL;\n           do {\n               op_data.status = WAIT;\n               my_aggregator.execute(&op_data);\n               if(op_data.status == SUCCEEDED) {\n                    // workaround for icc bug\n                   tbb::task *ttask = op_data.bypass_t;\n                   rval = combine_tasks(my_graph_ref, rval, ttask);\n               }\n           } while (op_data.status == SUCCEEDED);\n           return rval;\n       }\n\n       inline task *create_forward_task() {\n           return (internal::is_graph_active(my_graph_ref)) ?\n               new(task::allocate_additional_child_of(*(my_graph_ref.root_task()))) forward_task_bypass< class_type >(*this) :\n               NULL;\n       }\n\n       //! Spawns a task that calls forward()\n       inline void spawn_forward_task() {\n           task* tp = create_forward_task();\n           if(tp) {\n               internal::spawn_in_graph_arena(graph_reference(), *tp);\n           }\n       }\n    };  // function_input_base\n\n    //! Implements methods for a function node that takes a type Input as input and sends\n    //  a type Output to its successors.\n    template< typename Input, typename Output, typename Policy, typename A>\n    class function_input : public function_input_base<Input, Policy, A, function_input<Input,Output,Policy,A> > {\n    public:\n        typedef Input input_type;\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n        typedef function_input<Input, Output, Policy,A> my_class;\n        typedef function_input_base<Input, Policy, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        function_input( graph &g, size_t max_concurrency, Body& body ) :\n            base_type(g, max_concurrency),\n            my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n            my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        function_input( const function_input& src ) :\n                base_type(src),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~function_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *this->my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        output_type apply_body_impl( const input_type& i) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)(i);\n            tbb::internal::fgt_end_body( my_body );\n            return v;\n#else\n            return (*my_body)(i);\n#endif\n        }\n\n        //TODO: consider moving into the base class\n        task * apply_body_impl_bypass( const input_type &i) {\n            output_type v = apply_body_impl(i);\n            task* postponed_task = NULL;\n#if !__TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            task* successor_task = successors().try_put_task(v);\n#endif\n            if(base_type::my_max_concurrency != 0) {\n                postponed_task = base_type::try_get_postponed_task(i);\n            }\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            // postponed_task is either NULL or the pointer to TBB task\n            if(postponed_task) {\n                // spawn task to make it available for other workers\n                // since we do not know successors' execution policy\n                internal::spawn_in_graph_arena(base_type::graph_reference(), *postponed_task);\n            }\n            task* successor_task = successors().try_put_task(v);\n            if( internal::has_policy<lightweight, Policy>::value && !successor_task ) {\n                // Return confirmative status since current\n                // node's body has been executed anyway\n                successor_task = SUCCESSFULLY_ENQUEUED;\n            }\n            return successor_task;\n#else\n            graph& g = base_type::my_graph_ref;\n            return combine_tasks(g, successor_task, postponed_task);\n#endif\n        }\n\n    protected:\n\n        void reset_function_input(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n    };  // function_input\n\n\n    // helper templates to clear the successor edges of the output ports of an multifunction_node\n    template<int N> struct clear_element {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().clear();\n            clear_element<N-1>::clear_this(p);\n        }\n        template<typename P> static bool this_empty(P &p) {\n            if(tbb::flow::get<N-1>(p).successors().empty())\n                return clear_element<N-1>::this_empty(p);\n            return false;\n        }\n    };\n\n    template<> struct clear_element<1> {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().clear();\n        }\n        template<typename P> static bool this_empty(P &p) {\n            return tbb::flow::get<0>(p).successors().empty();\n        }\n    };\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // helper templates to extract the output ports of an multifunction_node from graph\n    template<int N> struct extract_element {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().built_successors().sender_extract(tbb::flow::get<N-1>(p));\n            extract_element<N-1>::extract_this(p);\n        }\n    };\n\n    template<> struct extract_element<1> {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().built_successors().sender_extract(tbb::flow::get<0>(p));\n        }\n    };\n#endif\n\n    //! Implements methods for a function node that takes a type Input as input\n    //  and has a tuple of output ports specified.\n    template< typename Input, typename OutputPortSet, typename Policy, typename A>\n    class multifunction_input : public function_input_base<Input, Policy, A, multifunction_input<Input,OutputPortSet,Policy,A> > {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputPortSet>::value;\n        typedef Input input_type;\n        typedef OutputPortSet output_ports_type;\n        typedef multifunction_body<input_type, output_ports_type> multifunction_body_type;\n        typedef multifunction_input<Input, OutputPortSet, Policy, A> my_class;\n        typedef function_input_base<Input, Policy, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        multifunction_input(\n                graph &g,\n                size_t max_concurrency,\n                Body& body) :\n            base_type(g, max_concurrency),\n            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ),\n            my_init_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        multifunction_input( const multifunction_input& src ) :\n                base_type(src),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~multifunction_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            multifunction_body_type &body_ref = *this->my_body;\n            return *static_cast<Body*>(dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body_ptr());\n        }\n\n        // for multifunction nodes we do not have a single successor as such.  So we just tell\n        // the task we were successful.\n        //TODO: consider moving common parts with implementation in function_input into separate function\n        task * apply_body_impl_bypass( const input_type &i) {\n            tbb::internal::fgt_begin_body( my_body );\n            (*my_body)(i, my_output_ports);\n            tbb::internal::fgt_end_body( my_body );\n            task* ttask = NULL;\n            if(base_type::my_max_concurrency != 0) {\n                ttask = base_type::try_get_postponed_task(i);\n            }\n            return ttask ? ttask : SUCCESSFULLY_ENQUEUED;\n        }\n\n        output_ports_type &output_ports(){ return my_output_ports; }\n\n    protected:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            extract_element<N>::extract_this(my_output_ports);\n        }\n#endif\n\n        void reset(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_clear_edges)clear_element<N>::clear_this(my_output_ports);\n            if(f & rf_reset_bodies) {\n                multifunction_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n            __TBB_ASSERT(!(f & rf_clear_edges) || clear_element<N>::this_empty(my_output_ports), \"multifunction_node reset failed\");\n        }\n\n        multifunction_body_type *my_body;\n        multifunction_body_type *my_init_body;\n        output_ports_type my_output_ports;\n\n    };  // multifunction_input\n\n    // template to refer to an output port of a multifunction_node\n    template<size_t N, typename MOP>\n    typename tbb::flow::tuple_element<N, typename MOP::output_ports_type>::type &output_port(MOP &op) {\n        return tbb::flow::get<N>(op.output_ports());\n    }\n\n    inline void check_task_and_spawn(graph& g, task* t) {\n        if (t && t != SUCCESSFULLY_ENQUEUED) {\n            internal::spawn_in_graph_arena(g, *t);\n        }\n    }\n\n    // helper structs for split_node\n    template<int N>\n    struct emit_element {\n        template<typename T, typename P>\n        static task* emit_this(graph& g, const T &t, P &p) {\n            // TODO: consider to collect all the tasks in task_list and spawn them all at once\n            task* last_task = tbb::flow::get<N-1>(p).try_put_task(tbb::flow::get<N-1>(t));\n            check_task_and_spawn(g, last_task);\n            return emit_element<N-1>::emit_this(g,t,p);\n        }\n    };\n\n    template<>\n    struct emit_element<1> {\n        template<typename T, typename P>\n        static task* emit_this(graph& g, const T &t, P &p) {\n            task* last_task = tbb::flow::get<0>(p).try_put_task(tbb::flow::get<0>(t));\n            check_task_and_spawn(g, last_task);\n            return SUCCESSFULLY_ENQUEUED;\n        }\n    };\n\n    //! Implements methods for an executable node that takes continue_msg as input\n    template< typename Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            , typename Policy\n#endif\n            >\n    class continue_input : public continue_receiver {\n    public:\n\n        //! The input type of this receiver\n        typedef continue_msg input_type;\n\n        //! The output type of this receiver\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n        typedef continue_input<output_type\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                             , Policy\n#endif\n                             > class_type;\n\n        template< typename Body >\n        continue_input( graph &g, Body& body )\n            : my_graph_ref(g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }\n\n        template< typename Body >\n        continue_input( graph &g, int number_of_predecessors, Body& body )\n            : continue_receiver( number_of_predecessors ), my_graph_ref(g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) )\n        { }\n\n        continue_input( const continue_input& src ) : continue_receiver(src),\n            my_graph_ref(src.my_graph_ref),\n            my_body( src.my_init_body->clone() ),\n            my_init_body( src.my_init_body->clone() ) {}\n\n        ~continue_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            continue_receiver::reset_receiver(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n    protected:\n\n        graph& my_graph_ref;\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n        friend class apply_body_task_bypass< class_type, continue_msg >;\n\n        //! Applies the body to the provided input\n        task *apply_body_bypass( input_type ) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)( continue_msg() );\n            tbb::internal::fgt_end_body( my_body );\n            return successors().try_put_task( v );\n#else\n            return successors().try_put_task( (*my_body)( continue_msg() ) );\n#endif\n        }\n\n        task* execute() __TBB_override {\n            if(!internal::is_graph_active(my_graph_ref)) {\n                return NULL;\n            }\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            if(internal::has_policy<lightweight, Policy>::value) {\n                return apply_body_bypass( continue_msg() );\n            }\n            else\n#endif\n                return new ( task::allocate_additional_child_of( *(my_graph_ref.root_task()) ) )\n                       apply_body_task_bypass< class_type, continue_msg >( *this, continue_msg() );\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_graph_ref;\n        }\n    };  // continue_input\n\n    //! Implements methods for both executable and function nodes that puts Output to its successors\n    template< typename Output >\n    class function_output : public sender<Output> {\n    public:\n\n        template<int N> friend struct clear_element;\n        typedef Output output_type;\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef broadcast_cache<output_type> broadcast_cache_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n        function_output() { my_successors.set_owner(this); }\n        function_output(const function_output & /*other*/) : sender<output_type>() {\n            my_successors.set_owner(this);\n        }\n\n        //! Adds a new successor to this node\n        bool register_successor( successor_type &r ) __TBB_override {\n            successors().register_successor( r );\n            return true;\n        }\n\n        //! Removes a successor from this node\n        bool remove_successor( successor_type &r ) __TBB_override {\n            successors().remove_successor( r );\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_successors_type &built_successors() __TBB_override { return successors().built_successors(); }\n\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            successors().internal_add_built_successor( r );\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            successors().internal_delete_built_successor( r );\n        }\n\n        size_t successor_count() __TBB_override {\n            return successors().successor_count();\n        }\n\n        void  copy_successors( successor_list_type &v) __TBB_override {\n            successors().copy_successors(v);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        // for multifunction_node.  The function_body that implements\n        // the node will have an input and an output tuple of ports.  To put\n        // an item to a successor, the body should\n        //\n        //    get<I>(output_ports).try_put(output_value);\n        //\n        // if task pointer is returned will always spawn and return true, else\n        // return value will be bool returned from successors.try_put.\n        task *try_put_task(const output_type &i) { // not a virtual method in this class\n            return my_successors.try_put_task(i);\n        }\n\n        broadcast_cache_type &successors() { return my_successors; }\n    protected:\n        broadcast_cache_type my_successors;\n\n    };  // function_output\n\n    template< typename Output >\n    class multifunction_output : public function_output<Output> {\n    public:\n        typedef Output output_type;\n        typedef function_output<output_type> base_type;\n        using base_type::my_successors;\n\n        multifunction_output() : base_type() {my_successors.set_owner(this);}\n        multifunction_output( const multifunction_output &/*other*/) : base_type() { my_successors.set_owner(this); }\n\n        bool try_put(const output_type &i) {\n            task *res = try_put_task(i);\n            if(!res) return false;\n            if(res != SUCCESSFULLY_ENQUEUED) {\n                FLOW_SPAWN(*res); // TODO: Spawn task inside arena\n            }\n            return true;\n        }\n\n    protected:\n\n        task* try_put_task(const output_type &i) {\n            return my_successors.try_put_task(i);\n        }\n\n        template <int N> friend struct emit_element;\n\n    };  // multifunction_output\n\n//composite_node\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE && __TBB_FLOW_GRAPH_CPP11_FEATURES\n    template<typename CompositeType>\n    void add_nodes_impl(CompositeType*, bool) {}\n\n    template< typename CompositeType, typename NodeType1, typename... NodeTypes >\n    void add_nodes_impl(CompositeType *c_node, bool visible, const NodeType1& n1, const NodeTypes&... n) {\n        void *addr = const_cast<NodeType1 *>(&n1);\n\n        if(visible)\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, c_node, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );\n        else\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, c_node, tbb::internal::FLOW_NODE );\n        add_nodes_impl(c_node, visible, n...);\n    }\n#endif\n\n}  // internal\n\n#endif // __TBB__flow_graph_node_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_streaming_node.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_streaming_H\n#define __TBB_flow_graph_streaming_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if __TBB_PREVIEW_STREAMING_NODE\n\n// Included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\ntemplate <int N1, int N2>\nstruct port_ref_impl {\n    // \"+1\" since the port_ref range is a closed interval (includes its endpoints).\n    static const int size = N2 - N1 + 1;\n};\n\n} // internal\n\n// The purpose of the port_ref_impl is the pretty syntax: the deduction of a compile-time constant is processed from the return type.\n// So it is possible to use this helper without parentheses, e.g. \"port_ref<0>\".\ntemplate <int N1, int N2 = N1>\ninternal::port_ref_impl<N1,N2> port_ref() {\n    return internal::port_ref_impl<N1,N2>();\n};\n\nnamespace internal {\n\ntemplate <typename T>\nstruct num_arguments {\n    static const int value = 1;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>(*)()> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate <typename... Args>\nvoid ignore_return_values( Args&&... ) {}\n\ntemplate <typename T>\nT or_return_values( T&& t ) { return t; }\ntemplate <typename T, typename... Rest>\nT or_return_values( T&& t, Rest&&... rest ) {\n    return t | or_return_values( std::forward<Rest>(rest)... );\n}\n\ntemplate<typename JP>\nstruct key_from_policy {\n    typedef size_t type;\n    typedef std::false_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key> > {\n    typedef Key type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key&> > {\n    typedef const Key &type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Device, typename Key>\nclass streaming_device_with_key {\n    Device my_device;\n    typename std::decay<Key>::type my_key;\npublic:\n    // TODO: investigate why default constructor is required\n    streaming_device_with_key() {}\n    streaming_device_with_key( const Device& d, Key k ) : my_device( d ), my_key( k ) {}\n    Key key() const { return my_key; }\n    const Device& device() const { return my_device; }\n};\n\n// --------- Kernel argument helpers --------- //\ntemplate <typename T>\nstruct is_port_ref_impl {\n    typedef std::false_type type;\n};\n\ntemplate <int N1, int N2>\nstruct is_port_ref_impl< port_ref_impl<N1, N2> > {\n    typedef std::true_type type;\n};\n\ntemplate <int N1, int N2>\nstruct is_port_ref_impl< port_ref_impl<N1, N2>( * )()  > {\n    typedef std::true_type type;\n};\n\ntemplate <typename T>\nstruct is_port_ref {\n    typedef typename is_port_ref_impl< typename tbb::internal::strip<T>::type >::type type;\n};\n\ntemplate <typename ...Args1>\nstruct convert_and_call_impl;\n\ntemplate <typename A1, typename ...Args1>\nstruct convert_and_call_impl<A1, Args1...> {\n    static const size_t my_delta = 1; // Index 0 contains device\n\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit(F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<A1, Args1...>::doit_impl(typename is_port_ref<A1>::type(), f, t, a1, args1..., args2...);\n    }\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit_impl(std::false_type, F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., a1);\n    }\n    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<port_ref_impl<N1 + 1,N2>, Args1...>::doit_impl(x, f, t, port_ref<N1 + 1, N2>(), args1...,\n            args2..., std::get<N1 + my_delta>(t));\n    }\n    template <typename F, typename Tuple, int N, typename ...Args2>\n    static void doit_impl(std::true_type, F& f, Tuple& t, port_ref_impl<N, N>, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., std::get<N + my_delta>(t));\n    }\n\n    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>(* fn)(), Args1&... args1, Args2&... args2) {\n        doit_impl(x, f, t, fn(), args1..., args2...);\n    }\n    template <typename F, typename Tuple, int N, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N, N>(* fn)(), Args1&... args1, Args2&... args2) {\n        doit_impl(x, f, t, fn(), args1..., args2...);\n    }\n};\n\ntemplate <>\nstruct convert_and_call_impl<> {\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit(F& f, Tuple&, Args2&... args2) {\n        f(args2...);\n    }\n};\n// ------------------------------------------- //\n\ntemplate<typename JP, typename StreamFactory, typename... Ports>\nstruct streaming_node_traits {\n    // Do not use 'using' instead of 'struct' because Microsoft Visual C++ 12.0 fails to compile.\n    template <typename T>\n    struct async_msg_type {\n        typedef typename StreamFactory::template async_msg_type<T> type;\n    };\n\n    typedef tuple< typename async_msg_type<Ports>::type... > input_tuple;\n    typedef input_tuple output_tuple;\n    typedef tuple< streaming_device_with_key< typename StreamFactory::device_type, typename key_from_policy<JP>::type >,\n        typename async_msg_type<Ports>::type... > kernel_input_tuple;\n\n    // indexer_node parameters pack expansion workaround for VS2013 for streaming_node\n    typedef indexer_node< typename async_msg_type<Ports>::type... > indexer_node_type;\n};\n\n// Default empty implementation\ntemplate<typename StreamFactory, typename KernelInputTuple, typename = void>\nclass kernel_executor_helper {\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\n    typedef KernelInputTuple kernel_input_tuple;\nprotected:\n    template <typename ...Args>\n    void enqueue_kernel_impl( kernel_input_tuple&, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        factory.send_kernel( device, kernel, args... );\n    }\n};\n\n// Implementation for StreamFactory supporting range\ntemplate<typename StreamFactory, typename KernelInputTuple>\nclass kernel_executor_helper<StreamFactory, KernelInputTuple, typename tbb::internal::void_t< typename StreamFactory::range_type >::type > {\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\n    typedef KernelInputTuple kernel_input_tuple;\n\n    typedef typename StreamFactory::range_type range_type;\n\n    // Container for randge. It can contain either port references or real range.\n    struct range_wrapper {\n        virtual range_type get_range( const kernel_input_tuple &ip ) const = 0;\n        virtual range_wrapper *clone() const = 0;\n        virtual ~range_wrapper() {}\n    };\n\n    struct range_value : public range_wrapper {\n        range_value( const range_type& value ) : my_value(value) {}\n\n        range_value( range_type&& value ) : my_value(std::move(value)) {}\n\n        range_type get_range( const kernel_input_tuple & ) const __TBB_override {\n            return my_value;\n        }\n\n        range_wrapper *clone() const __TBB_override {\n            return new range_value(my_value);\n        }\n    private:\n        range_type my_value;\n    };\n\n    template <int N>\n    struct range_mapper : public range_wrapper {\n        range_mapper() {}\n\n        range_type get_range( const kernel_input_tuple &ip ) const __TBB_override {\n            // \"+1\" since get<0>(ip) is StreamFactory::device.\n            return get<N + 1>(ip).data(false);\n        }\n\n        range_wrapper *clone() const __TBB_override {\n            return new range_mapper<N>;\n        }\n    };\n\nprotected:\n    template <typename ...Args>\n    void enqueue_kernel_impl( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        __TBB_ASSERT(my_range_wrapper, \"Range is not set. Call set_range() before running streaming_node.\");\n        factory.send_kernel( device, kernel, my_range_wrapper->get_range(ip), args... );\n    }\n\npublic:\n    kernel_executor_helper() : my_range_wrapper(NULL) {}\n\n    kernel_executor_helper(const kernel_executor_helper& executor) : my_range_wrapper(executor.my_range_wrapper ? executor.my_range_wrapper->clone() : NULL) {}\n\n    kernel_executor_helper(kernel_executor_helper&& executor) : my_range_wrapper(executor.my_range_wrapper) {\n        // Set moving holder mappers to NULL to prevent double deallocation\n        executor.my_range_wrapper = NULL;\n    }\n\n    ~kernel_executor_helper() {\n        if (my_range_wrapper) delete my_range_wrapper;\n    }\n\n    void set_range(const range_type& work_size) {\n        my_range_wrapper = new range_value(work_size);\n    }\n\n    void set_range(range_type&& work_size) {\n        my_range_wrapper = new range_value(std::move(work_size));\n    }\n\n    template <int N>\n    void set_range(port_ref_impl<N, N>) {\n        my_range_wrapper = new range_mapper<N>;\n    }\n\n    template <int N>\n    void set_range(port_ref_impl<N, N>(*)()) {\n        my_range_wrapper = new range_mapper<N>;\n    }\n\nprivate:\n    range_wrapper* my_range_wrapper;\n};\n\n} // internal\n\n/*\n/---------------------------------------- streaming_node ------------------------------------\\\n|                                                                                            |\n|   /--------------\\   /----------------------\\   /-----------\\   /----------------------\\   |\n|   |              |   |    (device_with_key) O---O           |   |                      |   |\n|   |              |   |                      |   |           |   |                      |   |\nO---O indexer_node O---O device_selector_node O---O join_node O---O      kernel_node     O---O\n|   |              |   | (multifunction_node) |   |           |   | (multifunction_node) |   |\nO---O              |   |                      O---O           |   |                      O---O\n|   \\--------------/   \\----------------------/   \\-----------/   \\----------------------/   |\n|                                                                                            |\n\\--------------------------------------------------------------------------------------------/\n*/\ntemplate<typename... Args>\nclass streaming_node;\n\ntemplate<typename... Ports, typename JP, typename StreamFactory>\nclass streaming_node< tuple<Ports...>, JP, StreamFactory >\n    : public composite_node < typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple,\n                              typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple >\n    , public internal::kernel_executor_helper< StreamFactory, typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple >\n{\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple input_tuple;\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple output_tuple;\n    typedef typename internal::key_from_policy<JP>::type key_type;\nprotected:\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\nprivate:\n    typedef internal::streaming_device_with_key<device_type, key_type> device_with_key_type;\n    typedef composite_node<input_tuple, output_tuple> base_type;\n    static const size_t NUM_INPUTS = tuple_size<input_tuple>::value;\n    static const size_t NUM_OUTPUTS = tuple_size<output_tuple>::value;\n\n    typedef typename internal::make_sequence<NUM_INPUTS>::type input_sequence;\n    typedef typename internal::make_sequence<NUM_OUTPUTS>::type output_sequence;\n\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::indexer_node_type indexer_node_type;\n    typedef typename indexer_node_type::output_type indexer_node_output_type;\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple kernel_input_tuple;\n    typedef multifunction_node<indexer_node_output_type, kernel_input_tuple> device_selector_node;\n    typedef multifunction_node<kernel_input_tuple, output_tuple> kernel_multifunction_node;\n\n    template <int... S>\n    typename base_type::input_ports_type get_input_ports( internal::sequence<S...> ) {\n        return std::tie( internal::input_port<S>( my_indexer_node )... );\n    }\n\n    template <int... S>\n    typename base_type::output_ports_type get_output_ports( internal::sequence<S...> ) {\n        return std::tie( internal::output_port<S>( my_kernel_node )... );\n    }\n\n    typename base_type::input_ports_type get_input_ports() {\n        return get_input_ports( input_sequence() );\n    }\n\n    typename base_type::output_ports_type get_output_ports() {\n        return get_output_ports( output_sequence() );\n    }\n\n    template <int N>\n    int make_Nth_edge() {\n        make_edge( internal::output_port<N>( my_device_selector_node ), internal::input_port<N>( my_join_node ) );\n        return 0;\n    }\n\n    template <int... S>\n    void make_edges( internal::sequence<S...> ) {\n        make_edge( my_indexer_node, my_device_selector_node );\n        make_edge( my_device_selector_node, my_join_node );\n        internal::ignore_return_values( make_Nth_edge<S + 1>()... );\n        make_edge( my_join_node, my_kernel_node );\n    }\n\n    void make_edges() {\n        make_edges( input_sequence() );\n    }\n\n    class device_selector_base {\n    public:\n        virtual void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) = 0;\n        virtual device_selector_base *clone( streaming_node &n ) const = 0;\n        virtual ~device_selector_base() {}\n    };\n\n    template <typename UserFunctor>\n    class device_selector : public device_selector_base, tbb::internal::no_assign {\n    public:\n        device_selector( UserFunctor uf, streaming_node &n, StreamFactory &f )\n            : my_dispatch_funcs( create_dispatch_funcs( input_sequence() ) )\n            , my_user_functor( uf ), my_node(n), my_factory( f )\n        {\n            my_port_epoches.fill( 0 );\n        }\n\n        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) __TBB_override {\n            (this->*my_dispatch_funcs[ v.tag() ])( my_port_epoches[ v.tag() ], v, op );\n            __TBB_ASSERT( (tbb::internal::is_same_type<typename internal::key_from_policy<JP>::is_key_matching, std::false_type>::value)\n                || my_port_epoches[v.tag()] == 0, \"Epoch is changed when key matching is requested\" );\n        }\n\n        device_selector_base *clone( streaming_node &n ) const __TBB_override {\n            return new device_selector( my_user_functor, n, my_factory );\n        }\n    private:\n        typedef void(device_selector<UserFunctor>::*send_and_put_fn_type)(size_t &, const indexer_node_output_type &, typename device_selector_node::output_ports_type &);\n        typedef std::array < send_and_put_fn_type, NUM_INPUTS > dispatch_funcs_type;\n\n        template <int... S>\n        static dispatch_funcs_type create_dispatch_funcs( internal::sequence<S...> ) {\n            dispatch_funcs_type dispatch = { { &device_selector<UserFunctor>::send_and_put_impl<S>... } };\n            return dispatch;\n        }\n\n        template <typename T>\n        key_type get_key( std::false_type, const T &, size_t &epoch ) {\n            __TBB_STATIC_ASSERT( (tbb::internal::is_same_type<key_type, size_t>::value), \"\" );\n            return epoch++;\n        }\n\n        template <typename T>\n        key_type get_key( std::true_type, const T &t, size_t &/*epoch*/ ) {\n            using tbb::flow::key_from_message;\n            return key_from_message<key_type>( t );\n        }\n\n        template <int N>\n        void send_and_put_impl( size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            typedef typename tuple_element<N + 1, typename device_selector_node::output_ports_type>::type::output_type elem_type;\n            elem_type e = internal::cast_to<elem_type>( v );\n            device_type device = get_device( get_key( typename internal::key_from_policy<JP>::is_key_matching(), e, epoch ), get<0>( op ) );\n            my_factory.send_data( device, e );\n            get<N + 1>( op ).try_put( e );\n        }\n\n        template< typename DevicePort >\n        device_type get_device( key_type key, DevicePort& dp ) {\n            typename std::unordered_map<typename std::decay<key_type>::type, epoch_desc>::iterator it = my_devices.find( key );\n            if ( it == my_devices.end() ) {\n                device_type d = my_user_functor( my_factory );\n                std::tie( it, std::ignore ) = my_devices.insert( std::make_pair( key, d ) );\n                bool res = dp.try_put( device_with_key_type( d, key ) );\n                __TBB_ASSERT_EX( res, NULL );\n                my_node.notify_new_device( d );\n            }\n            epoch_desc &e = it->second;\n            device_type d = e.my_device;\n            if ( ++e.my_request_number == NUM_INPUTS ) my_devices.erase( it );\n            return d;\n        }\n\n        struct epoch_desc {\n            epoch_desc(device_type d ) : my_device( d ), my_request_number( 0 ) {}\n            device_type my_device;\n            size_t my_request_number;\n        };\n\n        std::unordered_map<typename std::decay<key_type>::type, epoch_desc> my_devices;\n        std::array<size_t, NUM_INPUTS> my_port_epoches;\n        dispatch_funcs_type my_dispatch_funcs;\n        UserFunctor my_user_functor;\n        streaming_node &my_node;\n        StreamFactory &my_factory;\n    };\n\n    class device_selector_body {\n    public:\n        device_selector_body( device_selector_base *d ) : my_device_selector( d ) {}\n\n        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            (*my_device_selector)(v, op);\n        }\n    private:\n        device_selector_base *my_device_selector;\n    };\n\n    class args_storage_base : tbb::internal::no_copy {\n    public:\n        typedef typename kernel_multifunction_node::output_ports_type output_ports_type;\n\n        virtual void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) = 0;\n        virtual void send( device_type d ) = 0;\n        virtual args_storage_base *clone() const = 0;\n        virtual ~args_storage_base () {}\n\n    protected:\n        args_storage_base( const kernel_type& kernel, StreamFactory &f )\n            : my_kernel( kernel ), my_factory( f )\n        {}\n\n        args_storage_base( const args_storage_base &k )\n            : my_kernel( k.my_kernel ), my_factory( k.my_factory )\n        {}\n\n        const kernel_type my_kernel;\n        StreamFactory &my_factory;\n    };\n\n    template <typename... Args>\n    class args_storage : public args_storage_base {\n        typedef typename args_storage_base::output_ports_type output_ports_type;\n\n        // ---------- Update events helpers ---------- //\n        template <int N>\n        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op ) const {\n            const auto& t = get<N + 1>( ip );\n            auto &port = get<N>( op );\n            return port.try_put( t );\n        }\n\n        template <int... S>\n        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op, internal::sequence<S...> ) const {\n            return internal::or_return_values( do_try_put<S>( ip, op )... );\n        }\n\n        // ------------------------------------------- //\n        class run_kernel_func : tbb::internal::no_assign {\n        public:\n            run_kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage )\n                : my_kernel_func( ip, node, storage, get<0>(ip).device() ) {}\n\n            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.\n            // Allow the compiler to deduce types for function pointers automatically.\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                internal::convert_and_call_impl<FnArgs...>::doit( my_kernel_func, my_kernel_func.my_ip, args... );\n            }\n        private:\n            struct kernel_func : tbb::internal::no_copy {\n                kernel_input_tuple &my_ip;\n                const streaming_node &my_node;\n                const args_storage& my_storage;\n                device_type my_device;\n\n                kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage, device_type device )\n                    : my_ip( ip ), my_node( node ), my_storage( storage ), my_device( device )\n                {}\n\n                template <typename... FnArgs>\n                void operator()( FnArgs&... args ) {\n                    my_node.enqueue_kernel( my_ip, my_storage.my_factory, my_device, my_storage.my_kernel, args... );\n                }\n            } my_kernel_func;\n        };\n\n        template<typename FinalizeFn>\n        class run_finalize_func : tbb::internal::no_assign {\n        public:\n            run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn )\n                : my_ip( ip ), my_finalize_func( factory, get<0>(ip).device(), fn ) {}\n\n            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.\n            // Allow the compiler to deduce types for function pointers automatically.\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                internal::convert_and_call_impl<FnArgs...>::doit( my_finalize_func, my_ip, args... );\n            }\n        private:\n            kernel_input_tuple &my_ip;\n\n            struct finalize_func : tbb::internal::no_assign {\n                StreamFactory &my_factory;\n                device_type my_device;\n                FinalizeFn my_fn;\n\n                finalize_func( StreamFactory &factory, device_type device, FinalizeFn fn )\n                    : my_factory(factory), my_device(device), my_fn(fn) {}\n\n                template <typename... FnArgs>\n                void operator()( FnArgs&... args ) {\n                    my_factory.finalize( my_device, my_fn, args... );\n                }\n            } my_finalize_func;\n        };\n\n        template<typename FinalizeFn>\n        static run_finalize_func<FinalizeFn> make_run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn ) {\n            return run_finalize_func<FinalizeFn>( ip, factory, fn );\n        }\n\n        class send_func : tbb::internal::no_assign {\n        public:\n            send_func( StreamFactory &factory, device_type d )\n                : my_factory(factory), my_device( d ) {}\n\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                my_factory.send_data( my_device, args... );\n            }\n        private:\n            StreamFactory &my_factory;\n            device_type my_device;\n        };\n\n    public:\n        args_storage( const kernel_type& kernel, StreamFactory &f, Args&&... args )\n            : args_storage_base( kernel, f )\n            , my_args_pack( std::forward<Args>(args)... )\n        {}\n\n        args_storage( const args_storage &k ) : args_storage_base( k ), my_args_pack( k.my_args_pack ) {}\n\n        args_storage( const args_storage_base &k, Args&&... args ) : args_storage_base( k ), my_args_pack( std::forward<Args>(args)... ) {}\n\n        void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) __TBB_override {\n            // Make const qualified args_pack (from non-const)\n            const args_pack_type& const_args_pack = my_args_pack;\n            // factory.enqure_kernel() gets\n            //  - 'ip' tuple elements by reference and updates it (and 'ip') with dependencies\n            //  - arguments (from my_args_pack) by const-reference via const_args_pack\n            tbb::internal::call( run_kernel_func( ip, n, *this ), const_args_pack );\n\n            if (! do_try_put( ip, op, input_sequence() ) ) {\n                graph& g = n.my_graph;\n                // No one message was passed to successors so set a callback to extend the graph lifetime until the kernel completion.\n                g.increment_wait_count();\n\n                // factory.finalize() gets\n                //  - 'ip' tuple elements by reference, so 'ip' might be changed\n                //  - arguments (from my_args_pack) by const-reference via const_args_pack\n                tbb::internal::call( make_run_finalize_func(ip, this->my_factory, [&g] {\n                    g.decrement_wait_count();\n                }), const_args_pack );\n            }\n        }\n\n        void send( device_type d ) __TBB_override {\n            // factory.send() gets arguments by reference and updates these arguments with dependencies\n            // (it gets but usually ignores port_ref-s)\n            tbb::internal::call( send_func( this->my_factory, d ), my_args_pack );\n        }\n\n        args_storage_base *clone() const __TBB_override {\n            // Create new args_storage with copying constructor.\n            return new args_storage<Args...>( *this );\n        }\n\n    private:\n        typedef tbb::internal::stored_pack<Args...> args_pack_type;\n        args_pack_type my_args_pack;\n    };\n\n    // Body for kernel_multifunction_node.\n    class kernel_body : tbb::internal::no_assign {\n    public:\n        kernel_body( const streaming_node &node ) : my_node( node ) {}\n\n        void operator()( kernel_input_tuple ip, typename args_storage_base::output_ports_type &op ) {\n            __TBB_ASSERT( (my_node.my_args_storage != NULL), \"No arguments storage\" );\n            // 'ip' is passed by value to create local copy for updating inside enqueue_kernel()\n            my_node.my_args_storage->enqueue( ip, op, my_node );\n        }\n    private:\n        const streaming_node &my_node;\n    };\n\n    template <typename T, typename U = typename internal::is_port_ref<T>::type >\n    struct wrap_to_async {\n        typedef T type; // Keep port_ref as it is\n    };\n\n    template <typename T>\n    struct wrap_to_async<T, std::false_type> {\n        typedef typename StreamFactory::template async_msg_type< typename tbb::internal::strip<T>::type > type;\n    };\n\n    template <typename... Args>\n    args_storage_base *make_args_storage(const args_storage_base& storage, Args&&... args) const {\n        // In this variadic template convert all simple types 'T' into 'async_msg_type<T>'\n        return new args_storage<Args...>(storage, std::forward<Args>(args)...);\n    }\n\n    void notify_new_device( device_type d ) {\n        my_args_storage->send( d );\n    }\n\n    template <typename ...Args>\n    void enqueue_kernel( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        this->enqueue_kernel_impl( ip, factory, device, kernel, args... );\n    }\n\npublic:\n    template <typename DeviceSelector>\n    streaming_node( graph &g, const kernel_type& kernel, DeviceSelector d, StreamFactory &f )\n        : base_type( g )\n        , my_indexer_node( g )\n        , my_device_selector( new device_selector<DeviceSelector>( d, *this, f ) )\n        , my_device_selector_node( g, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( g )\n        , my_kernel_node( g, serial, kernel_body( *this ) )\n        // By default, streaming_node maps all its ports to the kernel arguments on a one-to-one basis.\n        , my_args_storage( make_args_storage( args_storage<>(kernel, f), port_ref<0, NUM_INPUTS - 1>() ) )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    streaming_node( const streaming_node &node )\n        : base_type( node.my_graph )\n        , my_indexer_node( node.my_indexer_node )\n        , my_device_selector( node.my_device_selector->clone( *this ) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( node.my_join_node )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_args_storage( node.my_args_storage->clone() )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    streaming_node( streaming_node &&node )\n        : base_type( node.my_graph )\n        , my_indexer_node( std::move( node.my_indexer_node ) )\n        , my_device_selector( node.my_device_selector->clone(*this) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( std::move( node.my_join_node ) )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_args_storage( node.my_args_storage )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n        // Set moving node mappers to NULL to prevent double deallocation.\n        node.my_args_storage = NULL;\n    }\n\n    ~streaming_node() {\n        if ( my_args_storage ) delete my_args_storage;\n        if ( my_device_selector ) delete my_device_selector;\n    }\n\n    template <typename... Args>\n    void set_args( Args&&... args ) {\n        // Copy the base class of args_storage and create new storage for \"Args...\".\n        args_storage_base * const new_args_storage = make_args_storage( *my_args_storage, typename wrap_to_async<Args>::type(std::forward<Args>(args))...);\n        delete my_args_storage;\n        my_args_storage = new_args_storage;\n    }\n\nprotected:\n    void reset_node( reset_flags = rf_reset_protocol ) __TBB_override { __TBB_ASSERT( false, \"Not implemented yet\" ); }\n\nprivate:\n    indexer_node_type my_indexer_node;\n    device_selector_base *my_device_selector;\n    device_selector_node my_device_selector_node;\n    join_node<kernel_input_tuple, JP> my_join_node;\n    kernel_multifunction_node my_kernel_node;\n\n    args_storage_base *my_args_storage;\n};\n\n#endif // __TBB_PREVIEW_STREAMING_NODE\n#endif // __TBB_flow_graph_streaming_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_tagged_buffer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// a hash table buffer that can expand, and can support as many deletions as\n// additions, list-based, with elements of list held in array (for destruction\n// management), multiplicative hashing (like ets).  No synchronization built-in.\n//\n\n#ifndef __TBB__flow_graph_hash_buffer_impl_H\n#define __TBB__flow_graph_hash_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX::internal\n\n// elements in the table are a simple list; we need pointer to next element to\n// traverse the chain\ntemplate<typename ValueType>\nstruct buffer_element_type {\n    // the second parameter below is void * because we can't forward-declare the type\n    // itself, so we just reinterpret_cast below.\n    typedef typename aligned_pair<ValueType, void *>::type type;\n};\n\ntemplate\n    <\n     typename Key,         // type of key within ValueType\n     typename ValueType,\n     typename ValueToKey,  // abstract method that returns \"const Key\" or \"const Key&\" given ValueType\n     typename HashCompare, // has hash and equal\n     typename Allocator=tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >\n    >\nclass hash_buffer : public HashCompare {\npublic:\n    static const size_t INITIAL_SIZE = 8;  // initial size of the hash pointer table\n    typedef ValueType value_type;\n    typedef typename buffer_element_type< value_type >::type element_type;\n    typedef value_type *pointer_type;\n    typedef element_type *list_array_type;  // array we manage manually\n    typedef list_array_type *pointer_array_type;\n    typedef typename Allocator::template rebind<list_array_type>::other pointer_array_allocator_type;\n    typedef typename Allocator::template rebind<element_type>::other elements_array_allocator;\n    typedef typename tbb::internal::strip<Key>::type Knoref;\n\nprivate:\n    ValueToKey *my_key;\n    size_t my_size;\n    size_t nelements;\n    pointer_array_type pointer_array;    // pointer_array[my_size]\n    list_array_type elements_array;      // elements_array[my_size / 2]\n    element_type* free_list;\n\n    size_t mask() { return my_size - 1; }\n\n    void set_up_free_list( element_type **p_free_list, list_array_type la, size_t sz) {\n        for(size_t i=0; i < sz - 1; ++i ) {  // construct free list\n            la[i].second = &(la[i+1]);\n        }\n        la[sz-1].second = NULL;\n        *p_free_list = (element_type *)&(la[0]);\n    }\n\n    // cleanup for exceptions\n    struct DoCleanup {\n        pointer_array_type *my_pa;\n        list_array_type *my_elements;\n        size_t my_size;\n\n        DoCleanup(pointer_array_type &pa, list_array_type &my_els, size_t sz) :\n            my_pa(&pa), my_elements(&my_els), my_size(sz) {  }\n        ~DoCleanup() {\n            if(my_pa) {\n                size_t dont_care = 0;\n                internal_free_buffer(*my_pa, *my_elements, my_size, dont_care);\n            }\n        }\n    };\n\n    // exception-safety requires we do all the potentially-throwing operations first\n    void grow_array() {\n        size_t new_size = my_size*2;\n        size_t new_nelements = nelements;  // internal_free_buffer zeroes this\n        list_array_type new_elements_array = NULL;\n        pointer_array_type new_pointer_array = NULL;\n        list_array_type new_free_list = NULL;\n        {\n            DoCleanup my_cleanup(new_pointer_array, new_elements_array, new_size);\n            new_elements_array = elements_array_allocator().allocate(my_size);\n            new_pointer_array = pointer_array_allocator_type().allocate(new_size);\n            for(size_t i=0; i < new_size; ++i) new_pointer_array[i] = NULL;\n            set_up_free_list(&new_free_list, new_elements_array, my_size );\n\n            for(size_t i=0; i < my_size; ++i) {\n                for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second)) {\n                    value_type *ov = reinterpret_cast<value_type *>(&(op->first));\n                    // could have std::move semantics\n                    internal_insert_with_key(new_pointer_array, new_size, new_free_list, *ov);\n                }\n            }\n            my_cleanup.my_pa = NULL;\n            my_cleanup.my_elements = NULL;\n        }\n\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        free_list = new_free_list;\n        pointer_array = new_pointer_array;\n        elements_array = new_elements_array;\n        my_size = new_size;\n        nelements = new_nelements;\n    }\n\n    // v should have perfect forwarding if std::move implemented.\n    // we use this method to move elements in grow_array, so can't use class fields\n    void internal_insert_with_key( element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list,\n            const value_type &v) {\n        size_t l_mask = p_sz-1;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        size_t h = this->hash((*my_key)(v)) & l_mask;\n        __TBB_ASSERT(p_free_list, \"Error: free list not set up.\");\n        element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second);\n        (void) new(&(my_elem->first)) value_type(v);\n        my_elem->second = p_pointer_array[h];\n        p_pointer_array[h] = my_elem;\n    }\n\n    void internal_initialize_buffer() {\n        pointer_array = pointer_array_allocator_type().allocate(my_size);\n        for(size_t i = 0; i < my_size; ++i) pointer_array[i] = NULL;\n        elements_array = elements_array_allocator().allocate(my_size / 2);\n        set_up_free_list(&free_list, elements_array, my_size / 2);\n    }\n\n    // made static so an enclosed class can use to properly dispose of the internals\n    static void internal_free_buffer( pointer_array_type &pa, list_array_type &el, size_t &sz, size_t &ne ) {\n        if(pa) {\n            for(size_t i = 0; i < sz; ++i ) {\n                element_type *p_next;\n                for( element_type *p = pa[i]; p; p = p_next) {\n                    p_next = (element_type *)p->second;\n                    internal::punned_cast<value_type *>(&(p->first))->~value_type();\n                }\n            }\n            pointer_array_allocator_type().deallocate(pa, sz);\n            pa = NULL;\n        }\n        // Separate test (if allocation of pa throws, el may be allocated.\n        // but no elements will be constructed.)\n        if(el) {\n            elements_array_allocator().deallocate(el, sz / 2);\n            el = NULL;\n        }\n        sz = INITIAL_SIZE;\n        ne = 0;\n    }\n\npublic:\n    hash_buffer() : my_key(NULL), my_size(INITIAL_SIZE), nelements(0) {\n        internal_initialize_buffer();\n    }\n\n    ~hash_buffer() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        if(my_key) delete my_key;\n    }\n\n    void reset() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        internal_initialize_buffer();\n    }\n\n    // Take ownership of func object allocated with new.\n    // This method is only used internally, so can't be misused by user.\n    void set_key_func(ValueToKey *vtk) { my_key = vtk; }\n    // pointer is used to clone()\n    ValueToKey* get_key_func() { return my_key; }\n\n    bool insert_with_key(const value_type &v) {\n        pointer_type p = NULL;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        if(find_ref_with_key((*my_key)(v), p)) {\n            p->~value_type();\n            (void) new(p) value_type(v);  // copy-construct into the space\n            return false;\n        }\n        ++nelements;\n        if(nelements*2 > my_size) grow_array();\n        internal_insert_with_key(pointer_array, my_size, free_list, v);\n        return true;\n    }\n\n    // returns true and sets v to array element if found, else returns false.\n    bool find_ref_with_key(const Knoref& k, pointer_type &v) {\n        size_t i = this->hash(k) & mask();\n        for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second)) {\n            pointer_type pv = reinterpret_cast<pointer_type>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*pv), k)) {\n                v = pv;\n                return true;\n            }\n        }\n        return false;\n    }\n\n    bool find_with_key( const Knoref& k, value_type &v) {\n        value_type *p;\n        if(find_ref_with_key(k, p)) {\n            v = *p;\n            return true;\n        }\n        else\n            return false;\n    }\n\n    void delete_with_key(const Knoref& k) {\n        size_t h = this->hash(k) & mask();\n        element_type* prev = NULL;\n        for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second)) {\n            value_type *vp = reinterpret_cast<value_type *>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*vp), k)) {\n                vp->~value_type();\n                if(prev) prev->second = p->second;\n                else pointer_array[h] = (element_type *)(p->second);\n                p->second = free_list;\n                free_list = p;\n                --nelements;\n                return;\n            }\n        }\n        __TBB_ASSERT(false, \"key not found for delete\");\n    }\n};\n#endif // __TBB__flow_graph_hash_buffer_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_trace_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _FGT_GRAPH_TRACE_IMPL_H\n#define _FGT_GRAPH_TRACE_IMPL_H\n\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_internal_alias_input_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_INPUT_PORT, node, FLOW_NODE, name_index );\n    itt_relation_add( ITT_DOMAIN_FLOW, node, FLOW_NODE, __itt_relation_is_parent_of, p, FLOW_INPUT_PORT );\n}\n\nstatic inline void fgt_internal_alias_output_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );\n    itt_relation_add( ITT_DOMAIN_FLOW, node, FLOW_NODE, __itt_relation_is_parent_of, p, FLOW_OUTPUT_PORT );\n}\n\ntemplate<typename InputType>\nvoid alias_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_alias_input_port a function template?\n    fgt_internal_alias_input_port( node, port, name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_input_alias_helper {\n    static void alias_port( void *node, PortsTuple &ports ) {\n        alias_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );\n        fgt_internal_input_alias_helper<PortsTuple, N-1>::alias_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_input_alias_helper<PortsTuple, 0> {\n    static void alias_port( void * /* node */, PortsTuple & /* ports */ ) { }\n};\n\ntemplate<typename OutputType>\nvoid alias_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_alias_output_port a function template?\n    fgt_internal_alias_output_port( node, static_cast<void *>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_output_alias_helper {\n    static void alias_port( void *node, PortsTuple &ports ) {\n        alias_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );\n        fgt_internal_output_alias_helper<PortsTuple, N-1>::alias_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_output_alias_helper<PortsTuple, 0> {\n    static void alias_port( void * /*node*/, PortsTuple &/*ports*/ ) {\n    }\n};\n\nstatic inline void fgt_internal_create_input_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_INPUT_PORT, node, FLOW_NODE, name_index );\n}\n\nstatic inline void fgt_internal_create_output_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );\n}\n\ntemplate<typename InputType>\nvoid register_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_create_input_port a function template?\n    // In C++03 dependent name lookup from the template definition context\n    // works only for function declarations with external linkage:\n    // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#561\n    fgt_internal_create_input_port(node, static_cast<void*>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_input_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );\n        fgt_internal_input_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_input_helper<PortsTuple, 1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<0>(ports)), FLOW_INPUT_PORT_0 );\n    }\n};\n\ntemplate<typename OutputType>\nvoid register_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_create_output_port a function template?\n    fgt_internal_create_output_port( node, static_cast<void *>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_output_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );\n        fgt_internal_output_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_output_helper<PortsTuple,1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<0>(ports)), FLOW_OUTPUT_PORT_0 );\n    }\n};\n\ntemplate< typename NodeType >\nvoid fgt_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nvoid fgt_multiinput_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  const_cast<NodeType *>(node);\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::sender< typename NodeType::output_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_graph_desc( void *g, const char *desc ) {\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_body( void *node, void *body ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, body, FLOW_BODY, __itt_relation_is_child_of, node, FLOW_NODE );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index t, void *g, void *input_port, PortsTuple &ports ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index t, void *g, void *input_port, PortsTuple &ports, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n    fgt_body( input_port, body );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index t, void *g, PortsTuple &ports, void *output_port) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_internal_input_helper<PortsTuple, N>::register_port( output_port, ports );\n}\n\nstatic inline void fgt_multiinput_multioutput_node( string_index t, void *n, void *g ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, n, FLOW_NODE, g, FLOW_GRAPH, t );\n}\n\nstatic inline void fgt_node( string_index t, void *g, void *output_port ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *output_port, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_body( output_port, body );\n}\n\n\nstatic inline void fgt_node( string_index t, void *g, void *input_port, void *output_port ) {\n    fgt_node( t, g, output_port );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *input_port, void *output_port, void *body ) {\n    fgt_node_with_body( t, g, output_port, body );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\n\nstatic inline void  fgt_node( string_index t, void *g, void *input_port, void *decrement_port, void *output_port ) {\n    fgt_node( t, g, input_port, output_port );\n    fgt_internal_create_input_port( output_port, decrement_port, FLOW_INPUT_PORT_1 );\n}\n\nstatic inline void fgt_make_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_predecessor_to, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_remove_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_sibling_of, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_graph( void *g ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_GRAPH );\n}\n\nstatic inline void fgt_begin_body( void *body ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, NULL, FLOW_NULL, FLOW_BODY );\n}\n\nstatic inline void fgt_end_body( void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_try_put_begin( void *node, void *port ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, port, FLOW_OUTPUT_PORT, node, FLOW_NODE, FLOW_OUTPUT_PORT );\n}\n\nstatic inline void fgt_async_try_put_end( void *, void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_reserve( void *node, void *graph ) {\n    itt_region_begin( ITT_DOMAIN_FLOW, node, FLOW_NODE, graph, FLOW_GRAPH, FLOW_NULL );\n}\n\nstatic inline void fgt_async_commit( void *node, void */*graph*/) {\n    itt_region_end( ITT_DOMAIN_FLOW, node, FLOW_NODE );\n}\n\nstatic inline void fgt_reserve_wait( void *graph ) {\n    itt_region_begin( ITT_DOMAIN_FLOW, graph, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_NULL );\n}\n\nstatic inline void fgt_release_wait( void *graph ) {\n    itt_region_end( ITT_DOMAIN_FLOW, graph, FLOW_GRAPH );\n}\n\n#else // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_graph( void * /*g*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_multioutput_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_graph_desc( void * /*g*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_body( void * /*node*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index /*t*/, void * /*g*/, PortsTuple & /*ports*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_multiinput_multioutput_node( string_index /*t*/, void * /*node*/, void * /*graph*/ ) { }\n\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*output_port*/ ) { }\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/ ) { }\nstatic inline void  fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*decrement_port*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*output_port*/, void * /*body*/ ) { }\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/, void * /*body*/ ) { }\n\nstatic inline void fgt_make_edge( void * /*output_port*/, void * /*input_port*/ ) { }\nstatic inline void fgt_remove_edge( void * /*output_port*/, void * /*input_port*/ ) { }\n\nstatic inline void fgt_begin_body( void * /*body*/ ) { }\nstatic inline void fgt_end_body( void *  /*body*/) { }\n\nstatic inline void fgt_async_try_put_begin( void * /*node*/, void * /*port*/ ) { }\nstatic inline void fgt_async_try_put_end( void * /*node*/ , void * /*port*/ ) { }\nstatic inline void fgt_async_reserve( void * /*node*/, void * /*graph*/ ) { }\nstatic inline void fgt_async_commit( void * /*node*/, void * /*graph*/ ) { }\nstatic inline void fgt_reserve_wait( void * /*graph*/ ) { }\nstatic inline void fgt_release_wait( void * /*graph*/ ) { }\n\n#endif // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\n    } // namespace internal\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_flow_graph_types_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_types_impl_H\n#define __TBB__flow_graph_types_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX\n\nnamespace internal {\n\n    // the change to key_matching (adding a K and KHash template parameter, making it a class)\n    // means we have to pass this data to the key_matching_port.  All the ports have only one\n    // template parameter, so we have to wrap the following types in a trait:\n    //\n    //    . K == key_type\n    //    . KHash == hash and compare for Key\n    //    . TtoK == function_body that given an object of T, returns its K\n    //    . T == type accepted by port, and stored in the hash table\n    //\n    // The port will have an additional parameter on node construction, which is a function_body\n    // that accepts a const T& and returns a K which is the field in T which is its K.\n    template<typename Kp, typename KHashp, typename Tp>\n    struct KeyTrait {\n        typedef Kp K;\n        typedef Tp T;\n        typedef internal::type_to_key_function_body<T,K> TtoK;\n        typedef KHashp KHash;\n    };\n\n// wrap each element of a tuple in a template, and make a tuple of the result.\n    template<int N, template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements;\n\n    // A wrapper that generates the traits needed for each port of a key-matching join,\n    // and the type of the tuple of input ports.\n    template<int N, template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements;\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<1, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<1, PT, KeyTraits, TypeTuple > {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<2, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<2, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<3, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<3, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<4, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<4, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<5, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<5, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3>, PT<KeyTrait4> > type;\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<6, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<7, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<8, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<9, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<10, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<9,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<9,TypeTuple>::type> KeyTrait9;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,\n                PT<KeyTrait9> > type;\n    };\n#endif\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template< int... S > class sequence {};\n\n    template< int N, int... S >\n    struct make_sequence : make_sequence < N - 1, N - 1, S... > {};\n\n    template< int... S >\n    struct make_sequence < 0, S... > {\n        typedef sequence<S...> type;\n    };\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    // Until C++14 std::initializer_list does not guarantee life time of contained objects.\n    template <typename T>\n    class initializer_list_wrapper {\n    public:\n        typedef T value_type;\n        typedef const T& reference;\n        typedef const T& const_reference;\n        typedef size_t size_type;\n\n        typedef T* iterator;\n        typedef const T* const_iterator;\n\n        initializer_list_wrapper( std::initializer_list<T> il ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( il.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n        initializer_list_wrapper( const initializer_list_wrapper<T>& ilw ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( ilw.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        initializer_list_wrapper( initializer_list_wrapper<T>&& ilw ) __TBB_NOEXCEPT( true ) : my_begin( ilw.my_begin ), my_end( ilw.my_end ) {\n            ilw.my_begin = ilw.my_end = NULL;\n        }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n        ~initializer_list_wrapper() {\n            if ( my_begin )\n                free( my_begin );\n        }\n\n        const_iterator begin() const __TBB_NOEXCEPT(true) { return my_begin; }\n        const_iterator end() const __TBB_NOEXCEPT(true) { return my_end; }\n        size_t size() const __TBB_NOEXCEPT(true) { return (size_t)(my_end - my_begin); }\n\n    private:\n        iterator my_begin;\n        iterator my_end;\n    };\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\n//! type mimicking std::pair but with trailing fill to ensure each element of an array\n//* will have the correct alignment\n    template<typename T1, typename T2, size_t REM>\n    struct type_plus_align {\n        char first[sizeof(T1)];\n        T2 second;\n        char fill1[REM];\n    };\n\n    template<typename T1, typename T2>\n    struct type_plus_align<T1,T2,0> {\n        char first[sizeof(T1)];\n        T2 second;\n    };\n\n    template<class U> struct alignment_of {\n        typedef struct { char t; U    padded; } test_alignment;\n        static const size_t value = sizeof(test_alignment) - sizeof(U);\n    };\n\n    // T1, T2 are actual types stored.  The space defined for T1 in the type returned\n    // is a char array of the correct size.  Type T2 should be trivially-constructible,\n    // T1 must be explicitly managed.\n    template<typename T1, typename T2>\n    struct aligned_pair {\n        static const size_t t1_align = alignment_of<T1>::value;\n        static const size_t t2_align = alignment_of<T2>::value;\n        typedef type_plus_align<T1, T2, 0 > just_pair;\n        static const size_t max_align = t1_align < t2_align ? t2_align : t1_align;\n        static const size_t extra_bytes = sizeof(just_pair) % max_align;\n        static const size_t remainder = extra_bytes ? max_align - extra_bytes : 0;\n    public:\n        typedef type_plus_align<T1,T2,remainder> type;\n    };  // aligned_pair\n\n// support for variant type\n// type we use when we're not storing a value\nstruct default_constructed { };\n\n// type which contains another type, tests for what type is contained, and references to it.\n// internal::Wrapper<T>\n//     void CopyTo( void *newSpace) : builds a Wrapper<T> copy of itself in newSpace\n\n// struct to allow us to copy and test the type of objects\nstruct WrapperBase {\n    virtual ~WrapperBase() {}\n    virtual void CopyTo(void* /*newSpace*/) const {  }\n};\n\n// Wrapper<T> contains a T, with the ability to test what T is.  The Wrapper<T> can be\n// constructed from a T, can be copy-constructed from another Wrapper<T>, and can be\n// examined via value(), but not modified.\ntemplate<typename T>\nstruct Wrapper: public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\nprivate:\n    T value_space;\npublic:\n    const value_type &value() const { return value_space; }\n\nprivate:\n    Wrapper();\n\n    // on exception will ensure the Wrapper will contain only a trivially-constructed object\n    struct _unwind_space {\n        pointer_type space;\n        _unwind_space(pointer_type p) : space(p) {}\n        ~_unwind_space() {\n            if(space) (void) new (space) Wrapper<default_constructed>(default_constructed());\n        }\n    };\npublic:\n    explicit Wrapper( const T& other ) : value_space(other) { }\n    explicit Wrapper(const Wrapper& other) : value_space(other.value_space) { }\n\n    void CopyTo(void* newSpace) const __TBB_override {\n        _unwind_space guard((pointer_type)newSpace);\n        (void) new(newSpace) Wrapper(value_space);\n        guard.space = NULL;\n    }\n    ~Wrapper() { }\n};\n\n// specialization for array objects\ntemplate<typename T, size_t N>\nstruct Wrapper<T[N]> : public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\n    // space must be untyped.\n    typedef T ArrayType[N];\nprivate:\n    // The space is not of type T[N] because when copy-constructing, it would be\n    // default-initialized and then copied to in some fashion, resulting in two\n    // constructions and one destruction per element.  If the type is char[ ], we\n    // placement new into each element, resulting in one construction per element.\n    static const size_t space_size = sizeof(ArrayType) / sizeof(char);\n    char value_space[space_size];\n\n\n    // on exception will ensure the already-built objects will be destructed\n    // (the value_space is a char array, so it is already trivially-destructible.)\n    struct _unwind_class {\n        pointer_type space;\n        int    already_built;\n        _unwind_class(pointer_type p) : space(p), already_built(0) {}\n        ~_unwind_class() {\n            if(space) {\n                for(size_t i = already_built; i > 0 ; --i ) space[i-1].~value_type();\n                (void) new(space) Wrapper<default_constructed>(default_constructed());\n            }\n        }\n    };\npublic:\n    const ArrayType &value() const {\n        char *vp = const_cast<char *>(value_space);\n        return reinterpret_cast<ArrayType &>(*vp);\n    }\n\nprivate:\n    Wrapper();\npublic:\n    // have to explicitly construct because other decays to a const value_type*\n    explicit Wrapper(const ArrayType& other) {\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = 0; i < N; ++i ) {\n            (void) new(vp++) value_type(other[i]);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n    explicit Wrapper(const Wrapper& other) : WrapperBase() {\n        // we have to do the heavy lifting to copy contents\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type dp = reinterpret_cast<pointer_type>(value_space);\n        pointer_type sp = reinterpret_cast<pointer_type>(const_cast<char *>(other.value_space));\n        for(size_t i = 0; i < N; ++i, ++dp, ++sp) {\n            (void) new(dp) value_type(*sp);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n\n    void CopyTo(void* newSpace) const __TBB_override {\n        (void) new(newSpace) Wrapper(*this);  // exceptions handled in copy constructor\n    }\n\n    ~Wrapper() {\n        // have to destroy explicitly in reverse order\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = N; i > 0 ; --i ) vp[i-1].~value_type();\n    }\n};\n\n// given a tuple, return the type of the element that has the maximum alignment requirement.\n// Given a tuple and that type, return the number of elements of the object with the max\n// alignment requirement that is at least as big as the largest object in the tuple.\n\ntemplate<bool, class T1, class T2> struct pick_one;\ntemplate<class T1, class T2> struct pick_one<true , T1, T2> { typedef T1 type; };\ntemplate<class T1, class T2> struct pick_one<false, T1, T2> { typedef T2 type; };\n\ntemplate< template<class> class Selector, typename T1, typename T2 >\nstruct pick_max {\n    typedef typename pick_one< (Selector<T1>::value > Selector<T2>::value), T1, T2 >::type type;\n};\n\ntemplate<typename T> struct size_of { static const int value = sizeof(T); };\n\ntemplate< size_t N, class Tuple, template<class> class Selector > struct pick_tuple_max {\n    typedef typename pick_tuple_max<N-1, Tuple, Selector>::type LeftMaxType;\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type ThisType;\n    typedef typename pick_max<Selector, LeftMaxType, ThisType>::type type;\n};\n\ntemplate< class Tuple, template<class> class Selector > struct pick_tuple_max<0, Tuple, Selector> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type type;\n};\n\n// is the specified type included in a tuple?\ntemplate<class Q, size_t N, class Tuple>\nstruct is_element_of {\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value || is_element_of<Q,N-1,Tuple>::value;\n};\n\ntemplate<class Q, class Tuple>\nstruct is_element_of<Q,0,Tuple> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value;\n};\n\n// allow the construction of types that are listed tuple.  If a disallowed type\n// construction is written, a method involving this type is created.  The\n// type has no definition, so a syntax error is generated.\ntemplate<typename T> struct ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple;\n\ntemplate<typename T, bool BUILD_IT> struct do_if;\ntemplate<typename T>\nstruct do_if<T, true> {\n    static void construct(void *mySpace, const T& x) {\n        (void) new(mySpace) Wrapper<T>(x);\n    }\n};\ntemplate<typename T>\nstruct do_if<T, false> {\n    static void construct(void * /*mySpace*/, const T& x) {\n        // This method is instantiated when the type T does not match any of the\n        // element types in the Tuple in variant<Tuple>.\n        ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple<T>::bad_type(x);\n    }\n};\n\n// Tuple tells us the allowed types that variant can hold.  It determines the alignment of the space in\n// Wrapper, and how big Wrapper is.\n//\n// the object can only be tested for type, and a read-only reference can be fetched by cast_to<T>().\n\nusing tbb::internal::punned_cast;\nstruct tagged_null_type {};\ntemplate<typename TagType, typename T0, typename T1=tagged_null_type, typename T2=tagged_null_type, typename T3=tagged_null_type,\n                           typename T4=tagged_null_type, typename T5=tagged_null_type, typename T6=tagged_null_type,\n                           typename T7=tagged_null_type, typename T8=tagged_null_type, typename T9=tagged_null_type>\nclass tagged_msg {\n    typedef tbb::flow::tuple<T0, T1, T2, T3, T4\n                  //TODO: Should we reject lists longer than a tuple can hold?\n                  #if __TBB_VARIADIC_MAX >= 6\n                  , T5\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 7\n                  , T6\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 8\n                  , T7\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 9\n                  , T8\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 10\n                  , T9\n                  #endif\n                  > Tuple;\n\nprivate:\n    class variant {\n        static const size_t N = tbb::flow::tuple_size<Tuple>::value;\n        typedef typename pick_tuple_max<N, Tuple, alignment_of>::type AlignType;\n        typedef typename pick_tuple_max<N, Tuple, size_of>::type MaxSizeType;\n        static const size_t MaxNBytes = (sizeof(Wrapper<MaxSizeType>)+sizeof(AlignType)-1);\n        static const size_t MaxNElements = MaxNBytes/sizeof(AlignType);\n        typedef typename tbb::aligned_space<AlignType, MaxNElements> SpaceType;\n        SpaceType my_space;\n        static const size_t MaxSize = sizeof(SpaceType);\n\n    public:\n        variant() { (void) new(&my_space) Wrapper<default_constructed>(default_constructed()); }\n\n        template<typename T>\n        variant( const T& x ) {\n            do_if<T, is_element_of<T, N, Tuple>::value>::construct(&my_space,x);\n        }\n\n        variant(const variant& other) {\n            const WrapperBase * h = punned_cast<const WrapperBase *>(&(other.my_space));\n            h->CopyTo(&my_space);\n        }\n\n        // assignment must destroy and re-create the Wrapper type, as there is no way\n        // to create a Wrapper-to-Wrapper assign even if we find they agree in type.\n        void operator=( const variant& rhs ) {\n            if(&rhs != this) {\n                WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n                h->~WrapperBase();\n                const WrapperBase *ch = punned_cast<const WrapperBase *>(&(rhs.my_space));\n                ch->CopyTo(&my_space);\n            }\n        }\n\n        template<typename U>\n        const U& variant_cast_to() const {\n            const Wrapper<U> *h = dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space));\n            if(!h) {\n                tbb::internal::throw_exception(tbb::internal::eid_bad_tagged_msg_cast);\n            }\n            return h->value();\n        }\n        template<typename U>\n        bool variant_is_a() const { return dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space)) != NULL; }\n\n        bool variant_is_default_constructed() const {return variant_is_a<default_constructed>();}\n\n        ~variant() {\n            WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n            h->~WrapperBase();\n        }\n    }; //class variant\n\n    TagType my_tag;\n    variant my_msg;\n\npublic:\n    tagged_msg(): my_tag(TagType(~0)), my_msg(){}\n\n    template<typename T, typename R>\n    tagged_msg(T const &index, R const &value) : my_tag(index), my_msg(value) {}\n\n    #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN\n    template<typename T, typename R, size_t N>\n    tagged_msg(T const &index,  R (&value)[N]) : my_tag(index), my_msg(value) {}\n    #endif\n\n    void set_tag(TagType const &index) {my_tag = index;}\n    TagType tag() const {return my_tag;}\n\n    template<typename V>\n    const V& cast_to() const {return my_msg.template variant_cast_to<V>();}\n\n    template<typename V>\n    bool is_a() const {return my_msg.template variant_is_a<V>();}\n\n    bool is_default_constructed() const {return my_msg.variant_is_default_constructed();}\n}; //class tagged_msg\n\n// template to simplify cast and test for tagged_msg in template contexts\ntemplate<typename V, typename T>\nconst V& cast_to(T const &t) { return t.template cast_to<V>(); }\n\ntemplate<typename V, typename T>\nbool is_a(T const &t) { return t.template is_a<V>(); }\n\nenum op_stat { WAIT = 0, SUCCEEDED, FAILED };\n\n}  // namespace internal\n\n#endif  /* __TBB__flow_graph_types_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_mutex_padding.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mutex_padding_H\n#define __TBB_mutex_padding_H\n\n// wrapper for padding mutexes to be alone on a cache line, without requiring they be allocated\n// from a pool.  Because we allow them to be defined anywhere they must be two cache lines in size.\n\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\nstatic const size_t cache_line_size = 64;\n\n// Pad a mutex to occupy a number of full cache lines sufficient to avoid false sharing\n// with other data; space overhead is up to 2*cache_line_size-1.\ntemplate<typename Mutex, bool is_rw> class padded_mutex;\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,false> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m ) : my_scoped_lock(*m.impl()) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m ) { my_scoped_lock.acquire(*m.impl()); }\n        bool try_acquire( padded_mutex& m ) { return my_scoped_lock.try_acquire(*m.impl()); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,true> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m, bool write = true ) : my_scoped_lock(*m.impl(),write) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m, bool write = true ) { my_scoped_lock.acquire(*m.impl(),write); }\n        bool try_acquire( padded_mutex& m, bool write = true ) { return my_scoped_lock.try_acquire(*m.impl(),write); }\n        bool upgrade_to_writer() { return my_scoped_lock.upgrade_to_writer(); }\n        bool downgrade_to_reader() { return my_scoped_lock.downgrade_to_reader(); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* __TBB_mutex_padding_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_range_iterator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_range_iterator_H\n#define __TBB_range_iterator_H\n\n#include \"../tbb_stddef.h\"\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n    #include <iterator>\n#endif\n\nnamespace tbb {\n    // iterators to first and last elements of container\n    namespace internal {\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n        using std::begin;\n        using std::end;\n        template<typename Container>\n        auto first(Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto first(const Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto last(Container& c)-> decltype(begin(c))  {return end(c);}\n\n        template<typename Container>\n        auto last(const Container& c)-> decltype(begin(c)) {return end(c);}\n#else\n        template<typename Container>\n        typename Container::iterator first(Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::const_iterator first(const Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::iterator last(Container& c) {return c.end();}\n\n        template<typename Container>\n        typename Container::const_iterator last(const Container& c) {return c.end();}\n#endif\n\n        template<typename T, size_t size>\n        T* first(T (&arr) [size]) {return arr;}\n\n        template<typename T, size_t size>\n        T* last(T (&arr) [size]) {return arr + size;}\n    } //namespace internal\n}  //namespace tbb\n\n#endif // __TBB_range_iterator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_tbb_hash_compare_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// must be included outside namespaces.\n#ifndef __TBB_tbb_hash_compare_impl_H\n#define __TBB_tbb_hash_compare_impl_H\n\n#include <string>\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n\n// Template class for hash compare\ntemplate<typename Key, typename Hasher, typename Key_equality>\nclass hash_compare\n{\npublic:\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n\n    hash_compare() {}\n\n    hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}\n\n    hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}\n\n    size_t operator()(const Key& key) const {\n        return ((size_t)my_hash_object(key));\n    }\n\n    bool operator()(const Key& key1, const Key& key2) const {\n        // TODO: get rid of the result invertion\n        return (!my_key_compare_object(key1, key2));\n    }\n\n    Hasher       my_hash_object;        // The hash object\n    Key_equality my_key_compare_object; // The equality comparator object\n};\n\n//! Hash multiplier\nstatic const size_t hash_multiplier = tbb::internal::select_size_t_constant<2654435769U, 11400714819323198485ULL>::value;\n\n} // namespace internal\n\n//! Hasher functions\ntemplate<typename T>\ninline size_t tbb_hasher( const T& t ) {\n    return static_cast<size_t>( t ) * internal::hash_multiplier;\n}\ntemplate<typename P>\ninline size_t tbb_hasher( P* ptr ) {\n    size_t const h = reinterpret_cast<size_t>( ptr );\n    return (h >> 3) ^ h;\n}\ntemplate<typename E, typename S, typename A>\ninline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {\n    size_t h = 0;\n    for( const E* c = s.c_str(); *c; ++c )\n        h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);\n    return h;\n}\ntemplate<typename F, typename S>\ninline size_t tbb_hasher( const std::pair<F,S>& p ) {\n    return tbb_hasher(p.first) ^ tbb_hasher(p.second);\n}\n\n} // namespace interface5\nusing interface5::tbb_hasher;\n\n// Template class for hash compare\ntemplate<typename Key>\nclass tbb_hash\n{\npublic:\n    tbb_hash() {}\n\n    size_t operator()(const Key& key) const\n    {\n        return tbb_hasher(key);\n    }\n};\n\n//! hash_compare that is default argument for concurrent_hash_map\ntemplate<typename Key>\nstruct tbb_hash_compare {\n    static size_t hash( const Key& a ) { return tbb_hasher(a); }\n    static bool equal( const Key& a, const Key& b ) { return a == b; }\n};\n\n}  // namespace tbb\n#endif  /*  __TBB_tbb_hash_compare_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_tbb_strings.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nTBB_STRING_RESOURCE(FLOW_BROADCAST_NODE, \"broadcast_node\")\nTBB_STRING_RESOURCE(FLOW_BUFFER_NODE, \"buffer_node\")\nTBB_STRING_RESOURCE(FLOW_CONTINUE_NODE, \"continue_node\")\nTBB_STRING_RESOURCE(FLOW_FUNCTION_NODE, \"function_node\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_QUEUEING, \"join_node (queueing)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_RESERVING, \"join_node (reserving)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_TAG_MATCHING, \"join_node (tag_matching)\")\nTBB_STRING_RESOURCE(FLOW_LIMITER_NODE, \"limiter_node\")\nTBB_STRING_RESOURCE(FLOW_MULTIFUNCTION_NODE, \"multifunction_node\")\nTBB_STRING_RESOURCE(FLOW_OR_NODE, \"or_node\") //no longer in use, kept for backward compatibility\nTBB_STRING_RESOURCE(FLOW_OVERWRITE_NODE, \"overwrite_node\")\nTBB_STRING_RESOURCE(FLOW_PRIORITY_QUEUE_NODE, \"priority_queue_node\")\nTBB_STRING_RESOURCE(FLOW_QUEUE_NODE, \"queue_node\")\nTBB_STRING_RESOURCE(FLOW_SEQUENCER_NODE, \"sequencer_node\")\nTBB_STRING_RESOURCE(FLOW_SOURCE_NODE, \"source_node\")\nTBB_STRING_RESOURCE(FLOW_SPLIT_NODE, \"split_node\")\nTBB_STRING_RESOURCE(FLOW_WRITE_ONCE_NODE, \"write_once_node\")\nTBB_STRING_RESOURCE(FLOW_BODY, \"body\")\nTBB_STRING_RESOURCE(FLOW_GRAPH, \"graph\")\nTBB_STRING_RESOURCE(FLOW_NODE, \"node\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT, \"input_port\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_0, \"input_port_0\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_1, \"input_port_1\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_2, \"input_port_2\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_3, \"input_port_3\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_4, \"input_port_4\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_5, \"input_port_5\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_6, \"input_port_6\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_7, \"input_port_7\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_8, \"input_port_8\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_9, \"input_port_9\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT, \"output_port\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_0, \"output_port_0\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_1, \"output_port_1\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_2, \"output_port_2\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_3, \"output_port_3\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_4, \"output_port_4\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_5, \"output_port_5\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_6, \"output_port_6\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_7, \"output_port_7\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_8, \"output_port_8\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_9, \"output_port_9\")\nTBB_STRING_RESOURCE(FLOW_OBJECT_NAME, \"object_name\")\nTBB_STRING_RESOURCE(FLOW_NULL, \"null\")\nTBB_STRING_RESOURCE(FLOW_INDEXER_NODE, \"indexer_node\")\nTBB_STRING_RESOURCE(FLOW_COMPOSITE_NODE, \"composite_node\")\nTBB_STRING_RESOURCE(FLOW_ASYNC_NODE, \"async_node\")\nTBB_STRING_RESOURCE(FLOW_OPENCL_NODE, \"opencl_node\")\nTBB_STRING_RESOURCE(ALGORITHM, \"tbb_algorithm\")\nTBB_STRING_RESOURCE(PARALLEL_FOR, \"tbb_parallel_for\")\nTBB_STRING_RESOURCE(PARALLEL_DO, \"tbb_parallel_do\")\nTBB_STRING_RESOURCE(PARALLEL_INVOKE, \"tbb_parallel_invoke\")\nTBB_STRING_RESOURCE(PARALLEL_REDUCE, \"tbb_parallel_reduce\")\nTBB_STRING_RESOURCE(PARALLEL_SCAN, \"tbb_parallel_scan\")\nTBB_STRING_RESOURCE(PARALLEL_SORT, \"tbb_parallel_sort\")\nTBB_STRING_RESOURCE(CUSTOM_CTX, \"tbb_custom\")\nTBB_STRING_RESOURCE(FLOW_TASKS, \"tbb_flow_graph\")\nTBB_STRING_RESOURCE(PARALLEL_FOR_TASK, \"tbb_parallel_for_task\")\n// TODO: Drop following string prefix \"fgt_\" here and in FGA's collector\nTBB_STRING_RESOURCE(USER_EVENT, \"fgt_user_event\")\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_tbb_trace_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _FGT_TBB_TRACE_IMPL_H\n#define _FGT_TBB_TRACE_IMPL_H\n\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if TBB_PREVIEW_ALGORITHM_TRACE\n        static inline void fgt_algorithm( string_index t, void *algorithm, void *parent ) {\n            itt_make_task_group( ITT_DOMAIN_FLOW, algorithm, ALGORITHM, parent, ALGORITHM, t );\n        }\n        static inline void fgt_begin_algorithm( string_index t, void *algorithm ) {\n            itt_task_begin( ITT_DOMAIN_FLOW, algorithm, ALGORITHM, NULL, FLOW_NULL, t );\n        }\n        static inline void fgt_end_algorithm( void * ) {\n            itt_task_end( ITT_DOMAIN_FLOW );\n        }\n        static inline void fgt_alg_begin_body( string_index t, void *body, void *algorithm ) {\n            itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, algorithm, ALGORITHM, t );\n        }\n        static inline void fgt_alg_end_body( void * ) {\n            itt_task_end( ITT_DOMAIN_FLOW );\n        }\n\n#else // TBB_PREVIEW_ALGORITHM_TRACE\n\n        static inline void fgt_algorithm( string_index /*t*/, void * /*algorithm*/, void * /*parent*/ ) { }\n        static inline void fgt_begin_algorithm( string_index /*t*/, void * /*algorithm*/ ) { }\n        static inline void fgt_end_algorithm( void * ) { }\n        static inline void fgt_alg_begin_body( string_index /*t*/, void * /*body*/, void * /*algorithm*/ ) { }\n        static inline void fgt_alg_end_body( void * ) { }\n\n#endif // TBB_PREVIEW_ALGORITHM_TRACEE\n\n    } // namespace internal\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_tbb_windef.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_windef_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif /* __TBB_tbb_windef_H */\n\n// Check that the target Windows version has all API calls requried for TBB.\n// Do not increase the version in condition beyond 0x0500 without prior discussion!\n#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0501\n#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0501 or greater.\n#endif\n\n#if !defined(_MT)\n#error TBB requires linkage with multithreaded C/C++ runtime library. \\\n       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.\n#endif\n\n// Workaround for the problem with MVSC headers failing to define namespace std\nnamespace std {\n  using ::size_t; using ::ptrdiff_t;\n}\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// Default setting of TBB_USE_DEBUG\n#ifdef TBB_USE_DEBUG\n#    if TBB_USE_DEBUG\n#        if !defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0\")\n#        endif\n#    else\n#        if defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0\")\n#        endif\n#    endif\n#endif\n\n#if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBB_NO_IMPLICIT_LINKAGE)\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#if _MSC_VER\n    #if !__TBB_NO_IMPLICIT_LINKAGE\n        #ifdef __TBB_LIB_NAME\n\t        #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n        #else\n\t\t\t#ifdef _DEBUG\n\t\t\t\t#pragma comment(lib, \"tbb_debug.lib\")\n\t\t\t#else\n\t\t\t\t#pragma comment(lib, \"tbb.lib\")\n\t\t\t#endif\n        #endif\n    #endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_template_helpers.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_template_helpers_H\n#define __TBB_template_helpers_H\n\n#include <utility>\n#include <cstddef>\n\nnamespace tbb { namespace internal {\n\n//! Enables one or the other code branches\ntemplate<bool Condition, typename T = void> struct enable_if {};\ntemplate<typename T> struct enable_if<true, T> { typedef T type; };\n\n//! Strips its template type argument from cv- and ref-qualifiers\ntemplate<typename T> struct strip                     { typedef T type; };\ntemplate<typename T> struct strip<const T>            { typedef T type; };\ntemplate<typename T> struct strip<volatile T>         { typedef T type; };\ntemplate<typename T> struct strip<const volatile T>   { typedef T type; };\ntemplate<typename T> struct strip<T&>                 { typedef T type; };\ntemplate<typename T> struct strip<const T&>           { typedef T type; };\ntemplate<typename T> struct strip<volatile T&>        { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&>  { typedef T type; };\n//! Specialization for function pointers\ntemplate<typename T> struct strip<T(&)()>             { typedef T(*type)(); };\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T> struct strip<T&&>                { typedef T type; };\ntemplate<typename T> struct strip<const T&&>          { typedef T type; };\ntemplate<typename T> struct strip<volatile T&&>       { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&&> { typedef T type; };\n#endif\n//! Specialization for arrays converts to a corresponding pointer\ntemplate<typename T, std::size_t N> struct strip<T(&)[N]>                { typedef T* type; };\ntemplate<typename T, std::size_t N> struct strip<const T(&)[N]>          { typedef const T* type; };\ntemplate<typename T, std::size_t N> struct strip<volatile T(&)[N]>       { typedef volatile T* type; };\ntemplate<typename T, std::size_t N> struct strip<const volatile T(&)[N]> { typedef const volatile T* type; };\n\n//! Detects whether two given types are the same\ntemplate<class U, class V> struct is_same_type      { static const bool value = false; };\ntemplate<class W>          struct is_same_type<W,W> { static const bool value = true; };\n\ntemplate<typename T> struct is_ref { static const bool value = false; };\ntemplate<typename U> struct is_ref<U&> { static const bool value = true; };\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n//! std::void_t internal implementation (to avoid GCC < 4.7 \"template aliases\" absence)\ntemplate<typename...> struct void_t { typedef void type; };\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n\n//! Allows to store a function parameter pack as a variable and later pass it to another function\ntemplate< typename... Types >\nstruct stored_pack;\n\ntemplate<>\nstruct stored_pack<>\n{\n    typedef stored_pack<> pack_type;\n    stored_pack() {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    // Ideally, ref-qualified non-static methods would be used,\n    // but that would greatly reduce the set of compilers where it works.\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n};\n\ntemplate< typename T, typename... Types >\nstruct stored_pack<T, Types...> : stored_pack<Types...>\n{\n    typedef stored_pack<T, Types...> pack_type;\n    typedef stored_pack<Types...> pack_remainder;\n    // Since lifetime of original values is out of control, copies should be made.\n    // Thus references should be stripped away from the deduced type.\n    typename strip<T>::type leftmost_value;\n\n    // Here rvalue references act in the same way as forwarding references,\n    // as long as class template parameters were deduced via forwarding references.\n    stored_pack( T&& t, Types&&... types )\n    : pack_remainder(std::forward<Types>(types)...), leftmost_value(std::forward<T>(t)) {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<pack_remainder&>(pack),\n            std::forward<Preceding>(params)... , pack.leftmost_value\n        );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<const pack_remainder&>(pack),\n            std::forward<Preceding>(params)... , pack.leftmost_value\n        );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<pack_remainder&&>(pack),\n            std::forward<Preceding>(params)... , std::move(pack.leftmost_value)\n        );\n    }\n};\n\n//! Calls the given function with arguments taken from a stored_pack\ntemplate< typename F, typename Pack >\nvoid call( F&& f, Pack&& p ) {\n    strip<Pack>::type::template call<void>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename Ret, typename F, typename Pack >\nRet call_and_return( F&& f, Pack&& p ) {\n    return strip<Pack>::type::template call<Ret>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename... Types >\nstored_pack<Types...> save_pack( Types&&... types ) {\n    return stored_pack<Types...>( std::forward<Types>(types)... );\n}\n\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_CPP14_INTEGER_SEQUENCE_PRESENT\n\nusing std::index_sequence;\nusing std::make_index_sequence;\n\n#elif __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT\n\ntemplate<std::size_t... S> class index_sequence {};\n\ntemplate<std::size_t N, std::size_t... S>\nstruct make_index_sequence_impl : make_index_sequence_impl < N - 1, N - 1, S... > {};\n\ntemplate<std::size_t... S>\nstruct make_index_sequence_impl <0, S...> {\n    using type = index_sequence<S...>;\n};\n\ntemplate<std::size_t N>\nusing make_index_sequence = typename tbb::internal::make_index_sequence_impl<N>::type;\n\n#endif /* __TBB_CPP14_INTEGER_SEQUENCE_PRESENT */\n\n} } // namespace internal, namespace tbb\n\n#endif /* __TBB_template_helpers_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_x86_eliding_mutex_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__x86_eliding_mutex_impl_H\n#define __TBB__x86_eliding_mutex_impl_H\n\n#ifndef __TBB_spin_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\ntemplate<typename Mutex, bool is_rw>\nclass padded_mutex;\n\n//! An eliding lock that occupies a single byte.\n/** A x86_eliding_mutex is an HLE-enabled spin mutex. It is recommended to\n    put the mutex on a cache line that is not shared by the data it protects.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\nclass x86_eliding_mutex : tbb::internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\n    friend class padded_mutex<x86_eliding_mutex, false>;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    x86_eliding_mutex() : flag(0) {}\n\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration above.\n// Make the scoped_lock public in that case.\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    // scoped_lock in padded_mutex<> is the interface to use.\n    //! Represents acquisition of a mutex.\n    class scoped_lock : tbb::internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        x86_eliding_mutex* my_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( x86_eliding_mutex& m ) : my_mutex(NULL) { acquire(m); }\n\n        //! Acquire lock.\n        void acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            my_mutex=&m;\n            my_mutex->lock();\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            bool result = m.try_lock();\n            if( result ) {\n                my_mutex = &m;\n            }\n            return result;\n        }\n\n        //! Release lock\n        void release() {\n            __TBB_ASSERT( my_mutex, \"release on scoped_lock that is not holding a lock\" );\n\n            my_mutex->unlock();\n            my_mutex = NULL;\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n                release();\n            }\n        }\n    };\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\npublic:\n#endif  /* __TBB_USE_X86_ELIDING_MUTEX */\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n        __TBB_LockByteElided(flag);\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n        return __TBB_TryLockByteElided(flag);\n    }\n\n    //! Release lock\n    void unlock() {\n        __TBB_UnlockByteElided( flag );\n    }\n}; // end of x86_eliding_mutex\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* ( __TBB_x86_32 || __TBB_x86_64 ) */\n\n#endif /* __TBB__x86_eliding_mutex_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/internal/_x86_rtm_rw_mutex_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__x86_rtm_rw_mutex_impl_H\n#define __TBB__x86_rtm_rw_mutex_impl_H\n\n#ifndef __TBB_spin_rw_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if __TBB_TSX_AVAILABLE\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../tbb_profiling.h\"\n#include \"../spin_rw_mutex.h\"\n\nnamespace tbb {\nnamespace interface8 {\nnamespace internal {\n\nenum RTM_type {\n    RTM_not_in_mutex,\n    RTM_transacting_reader,\n    RTM_transacting_writer,\n    RTM_real_reader,\n    RTM_real_writer\n};\n\nstatic const unsigned long speculation_granularity = 64;\n\n//! Fast, unfair, spinning speculation-enabled reader-writer lock with backoff and\n//  writer-preference\n/** @ingroup synchronization */\nclass x86_rtm_rw_mutex: private spin_rw_mutex {\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration below.\n// Make the scoped_lock public in that case.\npublic:\n#else\nprivate:\n#endif\n    friend class interface7::internal::padded_mutex<x86_rtm_rw_mutex,true>;\n    class scoped_lock;   // should be private\n    friend class scoped_lock;\nprivate:\n    //! @cond INTERNAL\n\n    //! Internal construct unacquired mutex.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! Internal acquire write lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_writer(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal acquire read lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Out of line code for downgrading a writer to a reader.\n    bool __TBB_EXPORTED_METHOD internal_downgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal release lock.\n    void __TBB_EXPORTED_METHOD internal_release( x86_rtm_rw_mutex::scoped_lock& );\n\n    static x86_rtm_rw_mutex* internal_get_mutex( const spin_rw_mutex::scoped_lock& lock )\n    {\n        return static_cast<x86_rtm_rw_mutex*>( lock.internal_get_mutex() );\n    }\n    static void internal_set_mutex( spin_rw_mutex::scoped_lock& lock, spin_rw_mutex* mtx )\n    {\n        lock.internal_set_mutex( mtx );\n    }\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    x86_rtm_rw_mutex() {\n        w_flag = false;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Empty destructor.\n    ~x86_rtm_rw_mutex() {}\n#endif /* TBB_USE_ASSERT */\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    // Speculation-enabled scoped lock for spin_rw_mutex\n    // The idea is to be able to reuse the acquire/release methods of spin_rw_mutex\n    // and its scoped lock wherever possible.  The only way to use a speculative lock is to use\n    // a scoped_lock. (because transaction_state must be local)\n\n    class scoped_lock : tbb::internal::no_copy {\n        friend class x86_rtm_rw_mutex;\n        spin_rw_mutex::scoped_lock my_scoped_lock;\n\n        RTM_type transaction_state;\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : my_scoped_lock(), transaction_state(RTM_not_in_mutex) {\n        }\n\n        //! Acquire lock on given mutex.\n        scoped_lock( x86_rtm_rw_mutex& m, bool write = true ) : my_scoped_lock(),\n            transaction_state(RTM_not_in_mutex) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if(transaction_state != RTM_not_in_mutex) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n            if( write ) m.internal_acquire_writer(*this);\n            else        m.internal_acquire_reader(*this);\n        }\n\n        //! Release lock\n        void release() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state!=RTM_not_in_mutex, \"lock is not acquired\" );\n            return mutex->internal_release(*this);\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_reader || transaction_state==RTM_real_reader, \"Invalid state for upgrade\" );\n            return mutex->internal_upgrade(*this);\n        }\n\n        //! Downgrade writer to become a reader.\n        /** Returns whether the downgrade happened without releasing and re-acquiring the lock */\n        bool downgrade_to_reader() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_writer || transaction_state==RTM_real_writer, \"Invalid state for downgrade\" );\n            return mutex->internal_downgrade(*this);\n        }\n\n        //! Attempt to acquire mutex.\n        /** returns true if successful.  */\n        bool try_acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n#if TBB_USE_ASSERT\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( !mutex, \"lock is already acquired\" );\n#endif\n            // have to assign m to our mutex.\n            // cannot set the mutex, because try_acquire in spin_rw_mutex depends on it being NULL.\n            if(write) return m.internal_try_acquire_writer(*this);\n            // speculatively acquire the lock.  If this fails, do try_acquire on the spin_rw_mutex.\n            m.internal_acquire_reader(*this, /*only_speculate=*/true);\n            if(transaction_state == RTM_transacting_reader) return true;\n            if( my_scoped_lock.try_acquire(m, false)) {\n                transaction_state = RTM_real_reader;\n                return true;\n            }\n            return false;\n        }\n\n        };  // class x86_rtm_rw_mutex::scoped_lock\n\n    // ISO C++0x compatibility methods not provided because we cannot maintain\n    // state about whether a thread is in a transaction.\n\nprivate:\n    char pad[speculation_granularity-sizeof(spin_rw_mutex)]; // padding\n\n    // If true, writer holds the spin_rw_mutex.\n    tbb::atomic<bool> w_flag;  // want this on a separate cache line\n\n};  // x86_rtm_rw_mutex\n\n}  // namespace internal\n}  // namespace interface8\n}  // namespace tbb\n\n#endif  /* __TBB_TSX_AVAILABLE */\n#endif /* __TBB__x86_rtm_rw_mutex_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/gcc_arm.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    Platform isolation layer for the ARMv7-a architecture.\n*/\n\n#ifndef __TBB_machine_H\n#error Do not include this file directly; include tbb_machine.h instead\n#endif\n\n#if __ARM_ARCH_7A__\n\n#include <sys/param.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 4\n\n// Traditionally ARM is little-endian.\n// Note that, since only the layout of aligned 32-bit words is of interest,\n// any apparent PDP-endianness of 32-bit words at half-word alignment or\n// any little-endian ordering of big-endian 32-bit words in 64-bit quantities\n// may be disregarded for this setting.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n\n#define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"dmb ish\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t oldval, res;\n\n    __TBB_full_memory_fence();\n\n    do {\n    __asm__ __volatile__(\n        \"ldrex      %1, [%3]\\n\"\n        \"mov        %0, #0\\n\"\n        \"cmp        %1, %4\\n\"\n        \"it         eq\\n\"\n        \"strexeq    %0, %5, [%3]\\n\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int32_t*)ptr)\n        : \"r\" ((volatile int32_t *)ptr), \"Ir\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t oldval;\n    int32_t res;\n\n    __TBB_full_memory_fence();\n\n    do {\n        __asm__ __volatile__(\n            \"mov        %0, #0\\n\"\n            \"ldrexd     %1, %H1, [%3]\\n\"\n            \"cmp        %1, %4\\n\"\n            \"it         eq\\n\"\n            \"cmpeq      %H1, %H4\\n\"\n            \"it         eq\\n\"\n            \"strexdeq   %0, %5, %H5, [%3]\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int64_t*)ptr)\n        : \"r\" ((volatile int64_t *)ptr), \"r\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void* ptr, int32_t addend)\n{\n    unsigned long tmp;\n    int32_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrex   %0, [%4]\\n\"\n\"       add     %3, %0, %5\\n\"\n\"       strex   %1, %3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\\n\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int32_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((volatile int32_t *)ptr), \"Ir\" (addend)\n    : \"cc\");\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    unsigned long tmp;\n    int64_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrexd  %0, %H0, [%4]\\n\"\n\"       adds    %3, %0, %5\\n\"\n\"       adc     %H3, %H0, %H5\\n\"\n\"       strexd  %1, %3, %H3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int64_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((volatile int64_t *)ptr), \"r\" (addend)\n    : \"cc\");\n\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\nnamespace tbb {\nnamespace internal {\n    template <typename T, size_t S>\n    struct machine_load_store_relaxed {\n        static inline T load ( const volatile T& location ) {\n            const T value = location;\n\n            /*\n            * An extra memory barrier is required for errata #761319\n            * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n            */\n            __TBB_acquire_consistency_helper();\n            return value;\n        }\n\n        static inline void store ( volatile T& location, T value ) {\n            location = value;\n        }\n    };\n}} // namespaces internal, tbb\n\n// Machine specific atomic operations\n\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n\n// Use generics for some things\n#define __TBB_USE_GENERIC_PART_WORD_CAS                         1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n#elif defined __aarch64__\n// Generic gcc implementations are fine for ARMv8-a except __TBB_PAUSE.\n#include \"gcc_generic.h\"\n#else\n#error compilation requires an ARMv7-a or ARMv8-a architecture.\n#endif // __ARM_ARCH_7A__\n\ninline void __TBB_machine_pause (int32_t delay)\n{\n    while(delay>0)\n    {\n        __asm__ __volatile__(\"yield\" ::: \"memory\");\n        delay--;\n    }\n}\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/gcc_generic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_generic_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE __SIZEOF_POINTER__\n\n#if __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    #define __TBB_64BIT_ATOMICS 0\n#endif\n\n/** FPU control setting not available for non-Intel architectures on Android **/\n#if __ANDROID__ && __TBB_generic_arch\n    #define __TBB_CPU_CTL_ENV_PRESENT 0\n#endif\n\n// __BYTE_ORDER__ is used in accordance with http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html,\n// but __BIG_ENDIAN__ or __LITTLE_ENDIAN__ may be more commonly found instead.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_acquire_consistency_helper()  __sync_synchronize()\n#define __TBB_release_consistency_helper()  __sync_synchronize()\n#define __TBB_full_memory_fence()           __sync_synchronize()\n#define __TBB_control_consistency_helper()  __sync_synchronize()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    return __sync_val_compare_and_swap(reinterpret_cast<volatile T *>(ptr),comparand,value);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);                       \\\n}\n\n#define __TBB_USE_GENERIC_FETCH_STORE 1\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\n#define __TBB_compiler_fence()              __asm__ __volatile__(\"\": : :\"memory\")\n// Acquire and release fence intrinsics in GCC might miss compiler fence.\n// Adding it at both sides of an intrinsic, as we do not know what reordering can be made.\n#define __TBB_acquire_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_ACQUIRE); __TBB_compiler_fence()\n#define __TBB_release_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_RELEASE); __TBB_compiler_fence()\n#define __TBB_full_memory_fence()           __atomic_thread_fence(__ATOMIC_SEQ_CST)\n#define __TBB_control_consistency_helper()  __TBB_acquire_consistency_helper()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    (void)__atomic_compare_exchange_n(reinterpret_cast<volatile T *>(ptr), &comparand, value,     \\\n                                      false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);                 \\\n    return comparand;                                                                             \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __atomic_fetch_add(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchstore##S( volatile void *ptr, T value ) {                             \\\n    return __atomic_exchange_n(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);     \\\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t)\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nnamespace tbb{ namespace internal { namespace gcc_builtins {\n    inline int clz(unsigned int x){ return __builtin_clz(x);};\n    inline int clz(unsigned long int x){ return __builtin_clzl(x);};\n    inline int clz(unsigned long long int x){ return __builtin_clzll(x);};\n}}}\n//gcc __builtin_clz builtin count _number_ of leading zeroes\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    return sizeof(x)*8 - tbb::internal::gcc_builtins::clz(x) -1 ;\n}\n\n\ntypedef unsigned char __TBB_Flag;\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return __sync_lock_test_and_set(&flag,1)==0;\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __sync_lock_release(&flag);\n}\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return !__atomic_test_and_set(&flag,__ATOMIC_ACQUIRE);\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __atomic_clear(&flag,__ATOMIC_RELEASE);\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_and(P,V)\n\n#define __TBB_TryLockByte   __TBB_machine_try_lock_byte\n#define __TBB_UnlockByte    __TBB_machine_unlock_byte\n\n// Definition of other functions\n#define __TBB_Log2(V)           __TBB_machine_lg(V)\n\n// TODO: implement with __atomic_* builtins where available\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n\n#if __TBB_x86_32 || __TBB_x86_64\n#include \"gcc_itsx.h\"\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/gcc_ia32_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_gcc_ia32_common_H\n#define __TBB_machine_gcc_ia32_common_H\n\n//TODO: Add a higher-level function, e.g. tbb::internal::log2(), into tbb_stddef.h, which\n//uses __TBB_Log2 and contains the assert and remove the assert from here and all other\n//platform-specific headers.\n//TODO: Check if use of gcc intrinsic gives a better chance for cross call optimizations\ntemplate <typename T>\nstatic inline intptr_t __TBB_machine_lg( T x ) {\n    __TBB_ASSERT(x>0, \"The logarithm of a non-positive value is undefined.\");\n    uintptr_t j, i = x;\n    __asm__(\"bsr %1,%0\" : \"=r\"(j) : \"r\"(i));\n    return j;\n}\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#ifndef __TBB_Pause\n//TODO: check if raising a ratio of pause instructions to loop control instructions\n//(via e.g. loop unrolling) gives any benefit for HT.  E.g, the current implementation\n//does about 2 CPU-consuming instructions for every pause instruction.  Perhaps for\n//high pause counts it should use an unrolled loop to raise the ratio, and thus free\n//up more integer cycles for the other hyperthread.  On the other hand, if the loop is\n//unrolled too far, it won't fit in the core's loop cache, and thus take away\n//instruction decode slots from the other hyperthread.\n\n//TODO: check if use of gcc __builtin_ia32_pause intrinsic gives a \"some how\" better performing code\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    for (int32_t i = 0; i < delay; i++) {\n       __asm__ __volatile__(\"pause;\");\n    }\n    return;\n}\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#endif /* !__TBB_Pause */\n\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n#if __INTEL_COMPILER\n    return _rdtsc();\n#else\n    tbb::internal::uint32_t hi, lo;\n    __asm__ __volatile__(\"rdtsc\" : \"=d\"(hi), \"=a\"(lo));\n    return (tbb::internal::machine_tsc_t( hi ) << 32) | lo;\n#endif\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#ifndef __TBB_CPU_CTL_ENV_PRESENT\n#define __TBB_CPU_CTL_ENV_PRESENT 1\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int     mxcsr;\n    short   x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n    #if __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN\n        cpu_ctl_env loc_ctl;\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(loc_ctl.mxcsr), \"=m\"(loc_ctl.x87cw)\n        );\n        *this = loc_ctl;\n    #else\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(mxcsr), \"=m\"(x87cw)\n        );\n    #endif\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const {\n        __asm__ __volatile__ (\n                \"ldmxcsr %0\\n\\t\"\n                \"fldcw %1\"\n                : : \"m\"(mxcsr), \"m\"(x87cw)\n        );\n    }\n};\n} // namespace internal\n} // namespace tbb\n#endif /* !__TBB_CPU_CTL_ENV_PRESENT */\n\n#include \"gcc_itsx.h\"\n\n#endif /* __TBB_machine_gcc_ia32_common_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/gcc_itsx.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_itsx_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_itsx_H\n\n#define __TBB_OP_XACQUIRE 0xF2\n#define __TBB_OP_XRELEASE 0xF3\n#define __TBB_OP_LOCK     0xF0\n\n#define __TBB_STRINGIZE_INTERNAL(arg) #arg\n#define __TBB_STRINGIZE(arg) __TBB_STRINGIZE_INTERNAL(arg)\n\n#ifdef __TBB_x86_64\n#define __TBB_r_out \"=r\"\n#else\n#define __TBB_r_out \"=q\"\n#endif\n\ninline static uint8_t __TBB_machine_try_lock_elided( volatile uint8_t* lk )\n{\n    uint8_t value = 1;\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XACQUIRE)\"; lock; xchgb %0, %1;\"\n                      : __TBB_r_out(value), \"=m\"(*lk)  : \"0\"(value), \"m\"(*lk) : \"memory\" );\n    return uint8_t(value^1);\n}\n\ninline static void __TBB_machine_try_lock_elided_cancel()\n{\n    // 'pause' instruction aborts HLE/RTM transactions\n    __asm__ volatile (\"pause\\n\" : : : \"memory\" );\n}\n\ninline static void __TBB_machine_unlock_elided( volatile uint8_t* lk )\n{\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XRELEASE)\"; movb $0, %0\"\n                      : \"=m\"(*lk) : \"m\"(*lk) : \"memory\" );\n}\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n#include <immintrin.h>\n\n#define __TBB_machine_is_in_transaction _xtest\n#define __TBB_machine_begin_transaction _xbegin\n#define __TBB_machine_end_transaction   _xend\n#define __TBB_machine_transaction_conflict_abort() _xabort(0xff)\n\n#else\n\n/*!\n * Check if the instruction is executed in a transaction or not\n */\ninline static bool __TBB_machine_is_in_transaction()\n{\n    int8_t res = 0;\n#if __TBB_x86_32\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=q\"(res) : : \"memory\" );\n#else\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=r\"(res) : : \"memory\" );\n#endif\n    return res==0;\n}\n\n/*!\n * Enter speculative execution mode.\n * @return -1 on success\n *         abort cause ( or 0 ) on abort\n */\ninline static uint32_t __TBB_machine_begin_transaction()\n{\n    uint32_t res = ~uint32_t(0);   // success value\n    __asm__ volatile (\"1: .byte  0xC7; .byte 0xF8;\\n\"           //  XBEGIN <abort-offset>\n                      \"   .long  2f-1b-6\\n\"                     //  2f-1b == difference in addresses of start\n                                                                //  of XBEGIN and the MOVL\n                                                                //  2f - 1b - 6 == that difference minus the size of the\n                                                                //  XBEGIN instruction.  This is the abort offset to\n                                                                //  2: below.\n                      \"    jmp   3f\\n\"                          //  success (leave -1 in res)\n                      \"2:  movl  %%eax,%0\\n\"                    //  store failure code in res\n                      \"3:\"\n                      :\"=r\"(res):\"0\"(res):\"memory\",\"%eax\");\n    return res;\n}\n\n/*!\n * Attempt to commit/end transaction\n */\ninline static void __TBB_machine_end_transaction()\n{\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD5\" :::\"memory\");   // XEND\n}\n\n/*\n * aborts with code 0xFF (lock already held)\n */\ninline static void __TBB_machine_transaction_conflict_abort()\n{\n    __asm__ volatile (\".byte 0xC6; .byte 0xF8; .byte 0xFF\" :::\"memory\");\n}\n\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/ibm_aix51.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// TODO: revise by comparing with mac_ppc.h\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_ibm_aix51_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_ibm_aix51_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG // assumption based on operating system\n\n#include <stdint.h>\n#include <unistd.h>\n#include <sched.h>\n\nextern \"C\" {\nint32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);\nint64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);\nvoid __TBB_machine_flush ();\nvoid __TBB_machine_lwsync ();\nvoid __TBB_machine_isync ();\n}\n\n// Mapping of old entry point names retained for the sake of backward binary compatibility\n#define __TBB_machine_cmpswp4 __TBB_machine_cas_32\n#define __TBB_machine_cmpswp8 __TBB_machine_cas_64\n\n#define __TBB_Yield() sched_yield()\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __GNUC__\n    #define __TBB_control_consistency_helper() __asm__ __volatile__( \"isync\": : :\"memory\")\n    #define __TBB_acquire_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_release_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(  \"sync\": : :\"memory\")\n#else\n    // IBM C++ Compiler does not support inline assembly\n    // TODO: Since XL 9.0 or earlier GCC syntax is supported. Replace with more\n    //       lightweight implementation (like in mac_ppc.h)\n    #define __TBB_control_consistency_helper() __TBB_machine_isync ()\n    #define __TBB_acquire_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_release_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_full_memory_fence()          __TBB_machine_flush ()\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/icc_generic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_icc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_ICC_BUILTIN_ATOMICS_PRESENT\n    #error \"Intel C++ Compiler of at least 12.0 version is needed to use ICC intrinsics port\"\n#endif\n\n#define __TBB_machine_icc_generic_H\n\n//ICC mimics the \"native\" target compiler\n#if _MSC_VER\n    #include \"msvc_ia32_common.h\"\n#else\n    #include \"gcc_ia32_common.h\"\n#endif\n\n//TODO: Make __TBB_WORDSIZE macro optional for ICC intrinsics port.\n//As compiler intrinsics are used for all the operations it is possible to do.\n\n#if __TBB_x86_32\n    #define __TBB_WORDSIZE 4\n#else\n    #define __TBB_WORDSIZE 8\n#endif\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n//__TBB_compiler_fence() defined just in case, as it seems not to be used on its own anywhere else\n#ifndef __TBB_compiler_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_ReadWriteBarrier)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n#else\n    #define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_full_memory_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_full_memory_fence() _mm_mfence()\n#else\n    #define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_control_consistency_helper\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#endif\n\nnamespace tbb { namespace internal {\n//TODO: is there any way to reuse definition of memory_order enum from ICC instead of copy paste.\n//however it seems unlikely that ICC will silently change exact enum values, as they are defined\n//in the ISO exactly like this.\n//TODO: add test that exact values of the enum are same as in the ISO C++11\ntypedef enum memory_order {\n    memory_order_relaxed, memory_order_consume, memory_order_acquire,\n    memory_order_release, memory_order_acq_rel, memory_order_seq_cst\n} memory_order;\n\nnamespace icc_intrinsics_port {\n    template <typename T>\n    T convert_argument(T value){\n        return value;\n    }\n    //The overload below is needed to have explicit conversion of pointer to void* in argument list.\n    //compiler bug?\n    //TODO: add according broken macro and recheck with ICC 13.0 if the overload is still needed\n    template <typename T>\n    void* convert_argument(T* value){\n        return (void*)value;\n    }\n}\n//TODO: code below is a bit repetitive, consider simplifying it\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_acquire);\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const T& location ) {\n        return __atomic_load_explicit(&location, memory_order_relaxed);\n    }\n    static inline void store (  T& location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_seq_cst);\n    }\n\n    static void store ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, value, memory_order_seq_cst);\n    }\n};\n\n}} // namespace tbb::internal\n\nnamespace tbb{ namespace internal { namespace icc_intrinsics_port{\n    typedef enum memory_order_map {\n        relaxed = memory_order_relaxed,\n        acquire = memory_order_acquire,\n        release = memory_order_release,\n        full_fence=  memory_order_seq_cst\n    } memory_order_map;\n}}}// namespace tbb::internal\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,M)                                                     \\\ninline T __TBB_machine_cmpswp##S##M( volatile void *ptr, T value, T comparand ) {               \\\n    __atomic_compare_exchange_strong_explicit(                                                  \\\n            (T*)ptr                                                                             \\\n            ,&comparand                                                                         \\\n            ,value                                                                              \\\n            , tbb::internal::icc_intrinsics_port::M                                             \\\n            , tbb::internal::icc_intrinsics_port::M);                                           \\\n    return comparand;                                                                           \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchstore##S##M(volatile void *ptr, T value) {                          \\\n    return __atomic_exchange_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);   \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchadd##S##M(volatile void *ptr, T value) {                            \\\n    return __atomic_fetch_add_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);  \\\n}                                                                                               \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, relaxed)\n\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n\nnamespace tbb { namespace internal {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(acquire)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(release)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(relaxed)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(relaxed)\n\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_acquire);\n        } else {\n            return __TBB_machine_generic_load8acquire(&location);\n        }\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n        } else {\n            return __TBB_machine_generic_store8release(&location,value);\n        }\n    }\n};\n\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static T load( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_load8relaxed(&location);\n        }\n    }\n    static void store( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_store8relaxed(&location,value);\n        }\n    }\n};\n\ntemplate <typename T >\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_load8full_fence(&location);\n        }\n\n    }\n\n    static void store ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, value, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_store8full_fence(&location,value);\n        }\n\n    }\n};\n\n#endif\n}} // namespace tbb::internal\ntemplate <typename T>\ninline void __TBB_machine_OR( T *operand, T addend ) {\n    __atomic_fetch_or_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\ntemplate <typename T>\ninline void __TBB_machine_AND( T *operand, T addend ) {\n    __atomic_fetch_and_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/linux_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n#include <unistd.h>\n/* Futex definitions */\n#include <sys/syscall.h>\n\n#if defined(SYS_futex)\n\n#define __TBB_USE_FUTEX 1\n#include <limits.h>\n#include <errno.h>\n// Unfortunately, some versions of Linux do not have a header that defines FUTEX_WAIT and FUTEX_WAKE.\n\n#ifdef FUTEX_WAIT\n#define __TBB_FUTEX_WAIT FUTEX_WAIT\n#else\n#define __TBB_FUTEX_WAIT 0\n#endif\n\n#ifdef FUTEX_WAKE\n#define __TBB_FUTEX_WAKE FUTEX_WAKE\n#else\n#define __TBB_FUTEX_WAKE 1\n#endif\n\n#ifndef __TBB_ASSERT\n#error machine specific headers must be included after tbb_stddef.h\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n\ninline int futex_wait( void *futex, int comparand ) {\n    int r = syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );\n#if TBB_USE_ASSERT\n    int e = errno;\n    __TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)), \"futex_wait failed.\" );\n#endif /* TBB_USE_ASSERT */\n    return r;\n}\n\ninline int futex_wakeup_one( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,1,NULL,NULL,0 );\n    __TBB_ASSERT( r==0||r==1, \"futex_wakeup_one: more than one thread woken up?\" );\n    return r;\n}\n\ninline int futex_wakeup_all( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL,0 );\n    __TBB_ASSERT( r>=0, \"futex_wakeup_all: error in waking up threads\" );\n    return r;\n}\n\n} /* namespace internal */\n\n} /* namespace tbb */\n\n#endif /* SYS_futex */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/linux_ia32.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia32_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"mfence\": : :\"memory\")\n\n#if __TBB_ICC_ASM_VOLATILE_BROKEN\n#define __TBB_VOLATILE\n#else\n#define __TBB_VOLATILE volatile\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X,R)                                        \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(__TBB_VOLATILE T*)ptr)              \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(__TBB_VOLATILE T*)ptr) \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(addend), \"m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(value), \"m\"(*(__TBB_VOLATILE T*)ptr)                 \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\",\"=q\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\",\"=r\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"l\",\"=r\")\n\n#if __INTEL_COMPILER\n#pragma warning( push )\n// reference to EBX in a function requiring stack alignment\n#pragma warning( disable: 998 )\n#endif\n\n#if __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN\n#define  __TBB_IA32_CAS8_NOINLINE  __attribute__ ((noinline))\n#else\n#define  __TBB_IA32_CAS8_NOINLINE\n#endif\n\nstatic inline __TBB_IA32_CAS8_NOINLINE int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )  {\n//TODO: remove the extra part of condition once __TBB_GCC_BUILTIN_ATOMICS_PRESENT is lowered to gcc version 4.1.2\n#if (__TBB_GCC_BUILTIN_ATOMICS_PRESENT || (__TBB_GCC_VERSION >= 40102)) && !__TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    return __sync_val_compare_and_swap( reinterpret_cast<volatile int64_t*>(ptr), comparand, value );\n#else /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n    //TODO: look like ICC 13.0 has some issues with this code, investigate it more deeply\n    int64_t result;\n    union {\n        int64_t i64;\n        int32_t i32[2];\n    };\n    i64 = value;\n#if __PIC__\n    /* compiling position-independent code */\n    // EBX register preserved for compliance with position-independent code rules on IA32\n    int32_t tmp;\n    __asm__ __volatile__ (\n            \"movl  %%ebx,%2\\n\\t\"\n            \"movl  %5,%%ebx\\n\\t\"\n#if __GNUC__==3\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n#else\n            \"lock\\n\\t cmpxchg8b (%3)\\n\\t\"\n#endif\n            \"movl  %2,%%ebx\"\n             : \"=A\"(result)\n             , \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"=m\"(tmp)\n#if __GNUC__==3\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n#else\n             : \"SD\"(ptr)\n#endif\n             , \"0\"(comparand)\n             , \"m\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n#if __INTEL_COMPILER\n             ,\"ebx\"\n#endif\n    );\n#else /* !__PIC__ */\n    __asm__ __volatile__ (\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n             : \"=A\"(result), \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"0\"(comparand)\n             , \"b\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n    );\n#endif /* __PIC__ */\n    return result;\n#endif /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n}\n\n#undef __TBB_IA32_CAS8_NOINLINE\n\n#if __INTEL_COMPILER\n#pragma warning( pop )\n#endif // warning 998 is back\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\norl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\nandl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux* and Windows*)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n\n#if __clang__\n#define __TBB_fildq  \"fildll\"\n#define __TBB_fistpq \"fistpll\"\n#else\n#define __TBB_fildq  \"fildq\"\n#define __TBB_fistpq \"fistpq\"\n#endif\n\nstatic inline int64_t __TBB_machine_aligned_load8 (const volatile void *ptr) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_load8 should be used with 8 byte aligned locations only \\n\");\n    int64_t result;\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(result) : \"m\"(*(const __TBB_VOLATILE uint64_t*)ptr) : \"memory\" );\n    return result;\n}\n\nstatic inline void __TBB_machine_aligned_store8 (volatile void *ptr, int64_t value ) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_store8 should be used with 8 byte aligned locations only \\n\");\n    // Aligned store\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(*(__TBB_VOLATILE int64_t*)ptr) : \"m\"(value) : \"memory\" );\n}\n\nstatic inline int64_t __TBB_machine_load8 (const volatile void *ptr) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        return __TBB_machine_aligned_load8(ptr);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned load\n        return __TBB_machine_cmpswp8(const_cast<void*>(ptr),0,0);\n    }\n#endif\n}\n\n//! Handles misaligned 8-byte store\n/** Defined in tbb_misc.cpp */\nextern \"C\" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value );\nextern \"C\" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );\n\nstatic inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        __TBB_machine_aligned_store8(ptr,value);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned store\n#if TBB_USE_PERFORMANCE_WARNINGS\n        __TBB_machine_store8_slow_perf_warning(ptr);\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n        __TBB_machine_store8_slow(ptr,value);\n    }\n#endif\n}\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_GENERIC_DWORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_DWORD_FETCH_STORE                 1\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/linux_ia64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia64_H\n\n#include <stdint.h>\n#include <ia64intrin.h>\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#if __INTEL_COMPILER\n    #define __TBB_compiler_fence()\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_acquire_consistency_helper()\n    #define __TBB_release_consistency_helper()\n    #define __TBB_full_memory_fence()          __mf()\n#else\n    #define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    // Even though GCC imbues volatile loads with acquire semantics, it sometimes moves\n    // loads over the acquire fence. The following helpers stop such incorrect code motion.\n    #define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_release_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(\"mf\": : :\"memory\")\n#endif /* !__INTEL_COMPILER */\n\n// Most of the functions will be in a .s file\n// TODO: revise dynamic_link, memory pools and etc. if the library dependency is removed.\n\nextern \"C\" {\n    int8_t __TBB_machine_fetchadd1__TBB_full_fence (volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1acquire(volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1release(volatile void *ptr, int8_t addend);\n\n    int16_t __TBB_machine_fetchadd2__TBB_full_fence (volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2acquire(volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2release(volatile void *ptr, int16_t addend);\n\n    int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchadd4acquire(volatile void *ptr, int32_t addend);\n    int32_t __TBB_machine_fetchadd4release(volatile void *ptr, int32_t addend);\n\n    int64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchadd8acquire(volatile void *ptr, int64_t addend);\n    int64_t __TBB_machine_fetchadd8release(volatile void *ptr, int64_t addend);\n\n    int8_t __TBB_machine_fetchstore1__TBB_full_fence (volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1acquire(volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1release(volatile void *ptr, int8_t value);\n\n    int16_t __TBB_machine_fetchstore2__TBB_full_fence (volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2acquire(volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2release(volatile void *ptr, int16_t value);\n\n    int32_t __TBB_machine_fetchstore4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4acquire(volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4release(volatile void *ptr, int32_t value);\n\n    int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);\n\n    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand);\n\n    int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand);\n\n    int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand);\n\n    int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand);\n\n    int64_t __TBB_machine_lg(uint64_t value);\n    void __TBB_machine_pause(int32_t delay);\n    bool __TBB_machine_trylockbyte( volatile unsigned char &ptr );\n    int64_t __TBB_machine_lockbyte( volatile unsigned char &ptr );\n\n    //! Retrieves the current RSE backing store pointer. IA64 specific.\n    void* __TBB_get_bsp();\n\n    int32_t __TBB_machine_load1_relaxed(const void *ptr);\n    int32_t __TBB_machine_load2_relaxed(const void *ptr);\n    int32_t __TBB_machine_load4_relaxed(const void *ptr);\n    int64_t __TBB_machine_load8_relaxed(const void *ptr);\n\n    void __TBB_machine_store1_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store2_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store4_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store8_relaxed(void *ptr, int64_t value);\n} // extern \"C\"\n\n// Mapping old entry points to the names corresponding to the new full_fence identifier.\n#define __TBB_machine_fetchadd1full_fence   __TBB_machine_fetchadd1__TBB_full_fence\n#define __TBB_machine_fetchadd2full_fence   __TBB_machine_fetchadd2__TBB_full_fence\n#define __TBB_machine_fetchadd4full_fence   __TBB_machine_fetchadd4__TBB_full_fence\n#define __TBB_machine_fetchadd8full_fence   __TBB_machine_fetchadd8__TBB_full_fence\n#define __TBB_machine_fetchstore1full_fence __TBB_machine_fetchstore1__TBB_full_fence\n#define __TBB_machine_fetchstore2full_fence __TBB_machine_fetchstore2__TBB_full_fence\n#define __TBB_machine_fetchstore4full_fence __TBB_machine_fetchstore4__TBB_full_fence\n#define __TBB_machine_fetchstore8full_fence __TBB_machine_fetchstore8__TBB_full_fence\n#define __TBB_machine_cmpswp1full_fence     __TBB_machine_cmpswp1__TBB_full_fence\n#define __TBB_machine_cmpswp2full_fence     __TBB_machine_cmpswp2__TBB_full_fence\n#define __TBB_machine_cmpswp4full_fence     __TBB_machine_cmpswp4__TBB_full_fence\n#define __TBB_machine_cmpswp8full_fence     __TBB_machine_cmpswp8__TBB_full_fence\n\n// Mapping relaxed operations to the entry points implementing them.\n/** On IA64 RMW operations implicitly have acquire semantics. Thus one cannot\n    actually have completely relaxed RMW operation here. **/\n#define __TBB_machine_fetchadd1relaxed      __TBB_machine_fetchadd1acquire\n#define __TBB_machine_fetchadd2relaxed      __TBB_machine_fetchadd2acquire\n#define __TBB_machine_fetchadd4relaxed      __TBB_machine_fetchadd4acquire\n#define __TBB_machine_fetchadd8relaxed      __TBB_machine_fetchadd8acquire\n#define __TBB_machine_fetchstore1relaxed    __TBB_machine_fetchstore1acquire\n#define __TBB_machine_fetchstore2relaxed    __TBB_machine_fetchstore2acquire\n#define __TBB_machine_fetchstore4relaxed    __TBB_machine_fetchstore4acquire\n#define __TBB_machine_fetchstore8relaxed    __TBB_machine_fetchstore8acquire\n#define __TBB_machine_cmpswp1relaxed        __TBB_machine_cmpswp1acquire\n#define __TBB_machine_cmpswp2relaxed        __TBB_machine_cmpswp2acquire\n#define __TBB_machine_cmpswp4relaxed        __TBB_machine_cmpswp4acquire\n#define __TBB_machine_cmpswp8relaxed        __TBB_machine_cmpswp8acquire\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,V)                               \\\n    template <typename T>                                               \\\n    struct machine_load_store_relaxed<T,S> {                      \\\n        static inline T load ( const T& location ) {                    \\\n            return (T)__TBB_machine_load##S##_relaxed(&location);       \\\n        }                                                               \\\n        static inline void store ( T& location, T value ) {             \\\n            __TBB_machine_store##S##_relaxed(&location, (V)value);      \\\n        }                                                               \\\n    }\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(8,int64_t);\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n// Definition of Lock functions\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n#define __TBB_LockByte(P)    __TBB_machine_lockbyte(P)\n\n// Definition of other utility functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/linux_intel64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_intel64_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#ifndef __TBB_full_memory_fence\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X)                                          \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(volatile T*)ptr)                    \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(volatile T*)ptr)       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(addend), \"m\"(*(volatile T*)ptr)                      \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(value), \"m\"(*(volatile T*)ptr)                       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t,\"q\")\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\norq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\nandq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/mac_ppc.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_power_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_power_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n// TODO: rename to gcc_power.h?\n// This file is for Power Architecture with compilers supporting GNU inline-assembler syntax (currently GNU g++ and IBM XL).\n// Note that XL V9.0 (sometimes?) has trouble dealing with empty input and/or clobber lists, so they should be avoided.\n\n#if __powerpc64__ || __ppc64__\n    // IBM XL documents __powerpc64__ (and __PPC64__).\n    // Apple documents __ppc64__ (with __ppc__ only on 32-bit).\n    #define __TBB_WORDSIZE 8\n#else\n    #define __TBB_WORDSIZE 4\n#endif\n\n// Traditionally Power Architecture is big-endian.\n// Little-endian could be just an address manipulation (compatibility with TBB not verified),\n// or normal little-endian (on more recent systems). Embedded PowerPC systems may support\n// page-specific endianness, but then one endianness must be hidden from TBB so that it still sees only one.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n// On Power Architecture, (lock-free) 64-bit atomics require 64-bit hardware:\n#if __TBB_WORDSIZE==8\n    // Do not change the following definition, because TBB itself will use 64-bit atomics in 64-bit builds.\n    #define __TBB_64BIT_ATOMICS 1\n#elif __bgp__\n    // Do not change the following definition, because this is known 32-bit hardware.\n    #define __TBB_64BIT_ATOMICS 0\n#else\n    // To enable 64-bit atomics in 32-bit builds, set the value below to 1 instead of 0.\n    // You must make certain that the program will only use them on actual 64-bit hardware\n    // (which typically means that the entire program is only executed on such hardware),\n    // because their implementation involves machine instructions that are illegal elsewhere.\n    // The setting can be chosen independently per compilation unit,\n    // which also means that TBB itself does not need to be rebuilt.\n    // Alternatively (but only for the current architecture and TBB version),\n    // override the default as a predefined macro when invoking the compiler.\n    #ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 0\n    #endif\n#endif\n\ninline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t result;\n\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"lwarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpw %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stwcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int32_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stwcx. */\n                         );\n    return result;\n}\n\n#if __TBB_WORDSIZE==8\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stdcx. */\n                         );\n    return result;\n}\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    int64_t value_register, comparand_register, result_register; // dummy variables to allocate registers\n    __asm__ __volatile__(\"sync\\n\\t\"\n                         \"ld %[val],%[valm]\\n\\t\"\n                         \"ld %[cmp],%[cmpm]\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"std %[res],%[resm]\\n\\t\"\n                         \"isync\"\n                         : [resm]\"=m\"(result)\n                         , [res] \"=&r\"(   result_register)\n                         , [val] \"=&r\"(    value_register)\n                         , [cmp] \"=&r\"(comparand_register)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr] \"r\"(ptr)\n                         , [valm]\"m\"(value)\n                         , [cmpm]\"m\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmpd and/or stdcx. */\n                         );\n    return result;\n}\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n#define __TBB_MACHINE_DEFINE_LOAD_STORE(S,ldx,stx,cmpx)                                                       \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store<T,S> {                                                                          \\\n        static inline T load_with_acquire(const volatile T& location) {                                       \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\\n\"                                                    \\\n                                 \"0:\\n\\t\"                                                                     \\\n                                 cmpx \" %[res],%[res]\\n\\t\"                                                    \\\n                                 \"bne- 0b\\n\\t\"                                                                \\\n                                 \"isync\"                                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)       /* redundant with \"memory\" */                          \\\n                                 : \"memory\"            /* compiler acquire fence */                           \\\n                                 , \"cr0\"               /* clobbered by cmpw/cmpd */);                         \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store_with_release(volatile T &location, T value) {                                \\\n            __asm__ __volatile__(\"lwsync\\n\\t\"                                                                 \\\n                                 stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)      /* redundant with \"memory\" */                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);                \\\n        }                                                                                                     \\\n    };                                                                                                        \\\n                                                                                                              \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store_relaxed<T,S> {                                                                  \\\n        static inline T load (const __TBB_atomic T& location) {                                               \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\"                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)                                                              \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store (__TBB_atomic T &location, T value) {                                        \\\n            __asm__ __volatile__(stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)                                                             \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n        }                                                                                                     \\\n    };\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_LOAD_STORE(1,\"lbz\",\"stb\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(2,\"lhz\",\"sth\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(4,\"lwz\",\"stw\",\"cmpw\")\n\n#if __TBB_WORDSIZE==8\n\n    __TBB_MACHINE_DEFINE_LOAD_STORE(8,\"ld\" ,\"std\",\"cmpd\")\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\n    template <typename T>\n    struct machine_load_store<T,8> {\n        static inline T load_with_acquire(const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\\n\"\n                                 \"0:\\n\\t\"\n                                 \"cmpd %[res],%[res]\\n\\t\"\n                                 \"bne- 0b\\n\\t\"\n                                 \"isync\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)       /* redundant with \"memory\" */\n                                 : \"memory\"            /* compiler acquire fence */\n                                 , \"cr0\"               /* clobbered by cmpd */);\n            return result;\n        }\n\n        static inline void store_with_release(volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"lwsync\\n\\t\"\n                                 \"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)      /* redundant with \"memory\" */\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);\n        }\n    };\n\n    struct machine_load_store_relaxed<T,8> {\n        static inline T load (const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n            return result;\n        }\n\n        static inline void store (volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n        }\n    };\n    #define __TBB_machine_load_store_relaxed_8\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_LOAD_STORE\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_control_consistency_helper() __asm__ __volatile__(\"isync\": : :\"memory\")\n#define __TBB_full_memory_fence()          __asm__ __volatile__( \"sync\": : :\"memory\")\n\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    // cntlzd/cntlzw starts counting at 2^63/2^31 (ignoring any higher-order bits), and does not affect cr0\n#if __TBB_WORDSIZE==8\n    __asm__ __volatile__ (\"cntlzd %0,%0\" : \"+r\"(x));\n    return 63-static_cast<intptr_t>(x);\n#else\n    __asm__ __volatile__ (\"cntlzw %0,%0\" : \"+r\"(x));\n    return 31-static_cast<intptr_t>(x);\n#endif\n}\n#define __TBB_Log2(V) __TBB_machine_lg(V)\n\n// Assumes implicit alignment for any 32-bit value\ntypedef uint32_t __TBB_Flag;\n#define __TBB_Flag __TBB_Flag\n\ninline bool __TBB_machine_trylockbyte( __TBB_atomic __TBB_Flag &flag ) {\n    return __TBB_machine_cmpswp4(&flag,1,0)==0;\n}\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/macos_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_macos_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_macos_common_H\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n// __TBB_HardwareConcurrency\n\n#include <sys/types.h>\n#include <sys/sysctl.h>\n\nstatic inline int __TBB_macos_available_cpu() {\n    int name[2] = {CTL_HW, HW_AVAILCPU};\n    int ncpu;\n    size_t size = sizeof(ncpu);\n    sysctl( name, 2, &ncpu, &size, NULL, 0 );\n    return ncpu;\n}\n\n#define __TBB_HardwareConcurrency() __TBB_macos_available_cpu()\n\n#ifndef __TBB_full_memory_fence\n    // TBB has not recognized the architecture (none of the architecture abstraction\n    // headers was included).\n    #define __TBB_UnknownArchitecture 1\n#endif\n\n#if __TBB_UnknownArchitecture\n// Implementation of atomic operations based on OS provided primitives\n#include <libkern/OSAtomic.h>\n\nstatic inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t value, int64_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for macOS* atomics\");\n    int64_t* address = (int64_t*)ptr;\n    while( !OSAtomicCompareAndSwap64Barrier(comparand, value, address) ){\n#if __TBB_WORDSIZE==8\n        int64_t snapshot = *address;\n#else\n        int64_t snapshot = OSAtomicAdd64( 0, address );\n#endif\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\n#define __TBB_machine_cmpswp8 __TBB_machine_cmpswp8_OsX\n\n#endif /* __TBB_UnknownArchitecture */\n\n#if __TBB_UnknownArchitecture\n\n#ifndef __TBB_WORDSIZE\n#define __TBB_WORDSIZE __SIZEOF_POINTER__\n#endif\n\n#ifdef __TBB_ENDIANNESS\n    // Already determined based on hardware architecture.\n#elif __BIG_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_control_consistency_helper() OSMemoryBarrier()\n#define __TBB_acquire_consistency_helper() OSMemoryBarrier()\n#define __TBB_release_consistency_helper() OSMemoryBarrier()\n#define __TBB_full_memory_fence()          OSMemoryBarrier()\n\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for macOS atomics\");\n    int32_t* address = (int32_t*)ptr;\n    while( !OSAtomicCompareAndSwap32Barrier(comparand, value, address) ){\n        int32_t snapshot = *address;\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for macOS atomics\");\n    return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for macOS atomics\");\n    return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#if __TBB_WORDSIZE == 4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#endif /* __TBB_UnknownArchitecture */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/mic_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mic_common_H\n#define __TBB_mic_common_H\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_DEFINE_MIC\n    #error mic_common.h should be included only when building for Intel(R) Many Integrated Core Architecture\n#endif\n\n#ifndef __TBB_PREFETCHING\n#define __TBB_PREFETCHING 1\n#endif\n#if __TBB_PREFETCHING\n#include <immintrin.h>\n#define __TBB_cl_prefetch(p) _mm_prefetch((const char*)p, _MM_HINT_T1)\n#define __TBB_cl_evict(p) _mm_clevict(p, _MM_HINT_T1)\n#endif\n\n/** Intel(R) Many Integrated Core Architecture does not support mfence and pause instructions **/\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"lock; addl $0,(%%rsp)\":::\"memory\")\n#define __TBB_Pause(x) _mm_delay_32(16*(x))\n#define __TBB_STEALING_PAUSE 1500/16\n#include <sched.h>\n#define __TBB_Yield() sched_yield()\n\n/** Specifics **/\n#define __TBB_STEALING_ABORT_ON_CONTENTION 1\n#define __TBB_YIELD2P 1\n#define __TBB_HOARD_NONLOCAL_TASKS 1\n\n#if ! ( __FreeBSD__ || __linux__ )\n    #error Intel(R) Many Integrated Core Compiler does not define __FreeBSD__ or __linux__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__ or __linux__.\n#endif /* ! ( __FreeBSD__ || __linux__ ) */\n\n#endif /* __TBB_mic_common_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/msvc_armv7.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_msvc_armv7_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_msvc_armv7_H\n\n#include <intrin.h>\n#include <float.h>\n\n#define __TBB_WORDSIZE 4\n\n#define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// We can test this on _M_IX86\n#pragma intrinsic(_ReadWriteBarrier)\n#pragma intrinsic(_mm_mfence)\n#define __TBB_compiler_fence()    _ReadWriteBarrier()\n#define __TBB_full_memory_fence() _mm_mfence()\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#else\n//Now __dmb(_ARM_BARRIER_SY) is used for both compiler and memory fences\n//This might be changed later after testing\n#define __TBB_compiler_fence()    __dmb(_ARM_BARRIER_SY)\n#define __TBB_full_memory_fence() __dmb(_ARM_BARRIER_SY)\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n#endif\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(S,T,F)                                               \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                   \\\n    return _InterlockedCompareExchange##F(reinterpret_cast<volatile T *>(ptr),value,comparand);  \\\n}                                                                                                \\\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(S,T,F)                                             \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                              \\\n    return _InterlockedExchangeAdd##F(reinterpret_cast<volatile T *>(ptr),value);                \\\n}                                                                                                \\\n\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(1,char,8)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(2,short,16)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(4,long,)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(8,__int64,64)\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(4,long,)\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// No _InterlockedExchangeAdd64 intrinsic on _M_IX86\n#define __TBB_64BIT_ATOMICS 0\n#else\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(8,__int64,64)\n#endif\n\ninline void __TBB_machine_pause (int32_t delay )\n{\n    while(delay>0)\n    {\n        __TBB_compiler_fence();\n        delay--;\n    }\n}\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb {\nnamespace internal {\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        const T value = location;\n\n        /*\n        * An extra memory barrier is required for errata #761319\n        * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n        */\n        __TBB_acquire_consistency_helper();\n        return value;\n    }\n\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\nclass cpu_ctl_env {\nprivate:\n    unsigned int my_ctl;\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return my_ctl != ctl.my_ctl; }\n    void get_env() { my_ctl = _control87(0, 0); }\n    void set_env() const { _control87( my_ctl, ~0U ); }\n};\n\n} // namespace internal\n} // namespaces tbb\n\n// Machine specific atomic operations\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n\n// Use generics for some things\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE               1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n#else\n#define __TBB_Yield() __yield()\n#endif\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_OR(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_AND(P,V)\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_OR( T1 *operand, T2 addend ) {\n    _InterlockedOr((long volatile *)operand, (long)addend);\n}\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_AND( T1 *operand, T2 addend ) {\n    _InterlockedAnd((long volatile *)operand, (long)addend);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/msvc_ia32_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_msvc_ia32_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_msvc_ia32_common_H\n\n#include <intrin.h>\n\n//TODO: consider moving this macro to tbb_config.h and using where MSVC asm is used\n#if  !_M_X64 || __INTEL_COMPILER\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 1\n#else\n    //MSVC in x64 mode does not accept inline assembler\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 0\n    #define __TBB_NO_X86_MSVC_INLINE_ASM_MSG \"The compiler being used is not supported (outdated?)\"\n#endif\n\n#if _M_X64\n    #define __TBB_r(reg_name) r##reg_name\n    #define __TBB_W(name) name##64\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef __int64 word;\n    }}}\n#else\n    #define __TBB_r(reg_name) e##reg_name\n    #define __TBB_W(name) name\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef long word;\n    }}}\n#endif\n\n#if _MSC_VER>=1600 && (!__INTEL_COMPILER || __INTEL_COMPILER>=1310)\n    // S is the operand size in bytes, B is the suffix for intrinsics for that size\n    #define __TBB_MACHINE_DEFINE_ATOMICS(S,B,T,U)                                           \\\n    __pragma(intrinsic( _InterlockedCompareExchange##B ))                                   \\\n    static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n        return _InterlockedCompareExchange##B ( (T*)ptr, value, comparand );                \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchangeAdd##B ))                                       \\\n    static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) {           \\\n        return _InterlockedExchangeAdd##B ( (T*)ptr, addend );                              \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchange##B ))                                          \\\n    static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) {          \\\n        return _InterlockedExchange##B ( (T*)ptr, value );                                  \\\n    }\n\n    // Atomic intrinsics for 1, 2, and 4 bytes are available for x86 & x64\n    __TBB_MACHINE_DEFINE_ATOMICS(1,8,char,__int8)\n    __TBB_MACHINE_DEFINE_ATOMICS(2,16,short,__int16)\n    __TBB_MACHINE_DEFINE_ATOMICS(4,,long,__int32)\n\n    #if __TBB_WORDSIZE==8\n    __TBB_MACHINE_DEFINE_ATOMICS(8,64,__int64,__int64)\n    #endif\n\n    #undef __TBB_MACHINE_DEFINE_ATOMICS\n    #define __TBB_ATOMIC_PRIMITIVES_DEFINED\n#endif /*_MSC_VER>=1600*/\n\n#if _MSC_VER>=1300 || __INTEL_COMPILER>=1100\n    #pragma intrinsic(_ReadWriteBarrier)\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n    #define __TBB_full_memory_fence() _mm_mfence()\n#elif __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    #define __TBB_compiler_fence()    __asm { __asm nop }\n    #define __TBB_full_memory_fence() __asm { __asm mfence }\n#else\n    #error Unsupported compiler; define __TBB_{control,acquire,release}_consistency_helper to support it\n#endif\n\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#if (_MSC_VER>=1300) || (__INTEL_COMPILER)\n    #pragma intrinsic(_mm_pause)\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void pause (uintptr_t delay ) {\n            for (;delay>0; --delay )\n                _mm_pause();\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_intrinsics::pause(V)\n    #define __TBB_SINGLE_PAUSE _mm_pause()\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm\n        static inline void pause (uintptr_t delay ) {\n            _asm\n            {\n                mov __TBB_r(ax), delay\n              __TBB_L1:\n                pause\n                add __TBB_r(ax), -1\n                jne __TBB_L1\n            }\n            return;\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_inline_asm::pause(V)\n    #define __TBB_SINGLE_PAUSE __asm pause\n#endif\n\n#if (_MSC_VER>=1400 && !__INTEL_COMPILER) || (__INTEL_COMPILER>=1200)\n// MSVC did not have this intrinsic prior to VC8.\n// ICL 11.1 fails to compile a TBB example if __TBB_Log2 uses the intrinsic.\n    #pragma intrinsic(__TBB_W(_BitScanReverse))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            unsigned long j;\n            __TBB_W(_BitScanReverse)( &j, i );\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_intrinsics::lg_bsr(V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            uintptr_t j;\n            __asm\n            {\n                bsr __TBB_r(ax), i\n                mov j, __TBB_r(ax)\n            }\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_inline_asm::lg_bsr(V)\n#endif\n\n#if _MSC_VER>=1400\n    #pragma intrinsic(__TBB_W(_InterlockedOr))\n    #pragma intrinsic(__TBB_W(_InterlockedAnd))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void lock_or( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedOr)((volatile word*)operand, addend);\n        }\n        static inline void lock_and( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedAnd)((volatile word*)operand, addend);\n        }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_intrinsics::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_intrinsics::lock_and(P,V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline void lock_or( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock or [edx], eax\n            }\n         }\n         static inline void lock_and( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock and [edx], eax\n            }\n         }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_inline_asm::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_inline_asm::lock_and(P,V)\n#endif\n\n#pragma intrinsic(__rdtsc)\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n    return __rdtsc();\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb { namespace internal { class cpu_ctl_env; } }\n#if __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    inline void __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm stmxcsr [__TBB_r(ax)]\n            __asm fstcw   [__TBB_r(ax)+4]\n        }\n    }\n    inline void __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm ldmxcsr [__TBB_r(ax)]\n            __asm fldcw   [__TBB_r(ax)+4]\n        }\n    }\n#else\n    extern \"C\" {\n        void __TBB_EXPORTED_FUNC __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* );\n        void __TBB_EXPORTED_FUNC __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* );\n    }\n#endif\n\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int         mxcsr;\n    short       x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n        __TBB_get_cpu_ctl_env( this );\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const { __TBB_set_cpu_ctl_env( this ); }\n};\n} // namespace internal\n} // namespace tbb\n\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n\n#undef __TBB_r\n#undef __TBB_W\n#undef __TBB_word\n\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_try_lock_elided (volatile void* ptr);\n    void   __TBB_EXPORTED_FUNC __TBB_machine_unlock_elided (volatile void* ptr);\n\n    // 'pause' instruction aborts HLE/RTM transactions\n    inline static void __TBB_machine_try_lock_elided_cancel() { __TBB_SINGLE_PAUSE; }\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n    #define __TBB_machine_is_in_transaction _xtest\n    #define __TBB_machine_begin_transaction _xbegin\n    #define __TBB_machine_end_transaction   _xend\n    // The value (0xFF) below comes from the\n    // Intel(R) 64 and IA-32 Architectures Optimization Reference Manual 12.4.5 lock not free\n    #define __TBB_machine_transaction_conflict_abort() _xabort(0xFF)\n#else\n    __int8           __TBB_EXPORTED_FUNC __TBB_machine_is_in_transaction();\n    unsigned __int32 __TBB_EXPORTED_FUNC __TBB_machine_begin_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_end_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_transaction_conflict_abort();\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/sunos_sparc.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_sunos_sparc_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_sunos_sparc_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 8\n// Big endian is assumed for SPARC.\n// While hardware may support page-specific bi-endianness, only big endian pages may be exposed to TBB\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n\n/** To those working on SPARC hardware. Consider relaxing acquire and release\n    consistency helpers to no-op (as this port covers TSO mode only). **/\n#define __TBB_compiler_fence()             __asm__ __volatile__ (\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad\": : : \"memory\")\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand ){\n  int32_t result;\n  __asm__ __volatile__(\n                       \"cas\\t[%5],%4,%1\"\n                       : \"=m\"(*(int32_t *)ptr), \"=r\"(result)\n                       : \"m\"(*(int32_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n                       : \"memory\");\n  return result;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand ){\n  int64_t result;\n  __asm__ __volatile__(\n                       \"casx\\t[%5],%4,%1\"\n               : \"=m\"(*(int64_t *)ptr), \"=r\"(result)\n               : \"m\"(*(int64_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n               : \"memory\");\n  return result;\n}\n\n//---------------------------------------------------\n// Fetch and add\n//---------------------------------------------------\n\n/**\n * Atomic fetch and add for 32 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend){\n  int32_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t cas\\t [%2], %3, %0\\n\"           // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%icc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n               : \"=&r\"(result), \"=m\"(*(int32_t *)ptr)\n               : \"r\"(ptr), \"r\"(*(int32_t *)ptr), \"r\"(addend), \"m\"(*(int32_t *)ptr)\n               : \"ccr\", \"memory\");\n  return result;\n}\n\n/**\n * Atomic fetch and add for 64 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend){\n  int64_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t casx\\t [%2], %3, %0\\n\"          // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n                : \"=&r\"(result), \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(addend), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"memory\");\n  return result;\n}\n\n//--------------------------------------------------------\n// Logarithm (base two, integer)\n//--------------------------------------------------------\n\nstatic inline int64_t __TBB_machine_lg( uint64_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    uint64_t count;\n    // one hot encode\n    x |= (x >> 1);\n    x |= (x >> 2);\n    x |= (x >> 4);\n    x |= (x >> 8);\n    x |= (x >> 16);\n    x |= (x >> 32);\n    // count 1's\n    __asm__ (\"popc %1, %0\" : \"=r\"(count) : \"r\"(x) );\n    return count-1;\n}\n\n//--------------------------------------------------------\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t or\\t %2, %3, %%g1\\n\"          // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t and\\t %2, %3, %%g1\\n\"         // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\n\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    // do nothing, inlined, doesn't matter\n}\n\n// put 0xff in memory location, return memory value,\n//  generic trylockbyte puts 0x01, however this is fine\n//  because all that matters is that 0 is unlocked\nstatic inline bool __TBB_machine_trylockbyte(unsigned char &flag){\n    unsigned char result;\n    __asm__ __volatile__ (\n            \"ldstub\\t [%2], %0\\n\"\n        : \"=r\"(result), \"=m\"(flag)\n        : \"r\"(&flag), \"m\"(flag)\n        : \"memory\");\n    return result == 0;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n// Definition of other functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/windows_api.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_windows_api_H\n#define __TBB_machine_windows_api_H\n\n#if _WIN32 || _WIN64\n\n#include <windows.h>\n\n#if _WIN32_WINNT < 0x0600\n// The following Windows API function is declared explicitly;\n// otherwise it fails to compile by VS2005.\n#if !defined(WINBASEAPI) || (_WIN32_WINNT < 0x0501 && _MSC_VER == 1400)\n#define __TBB_WINBASEAPI extern \"C\"\n#else\n#define __TBB_WINBASEAPI WINBASEAPI\n#endif\n__TBB_WINBASEAPI BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );\n__TBB_WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTION, DWORD );\n// Overloading WINBASEAPI macro and using local functions missing in Windows XP/2003\n#define InitializeCriticalSectionEx inlineInitializeCriticalSectionEx\n#define CreateSemaphoreEx inlineCreateSemaphoreEx\n#define CreateEventEx inlineCreateEventEx\ninline BOOL WINAPI inlineInitializeCriticalSectionEx( LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD )\n{\n    return InitializeCriticalSectionAndSpinCount( lpCriticalSection, dwSpinCount );\n}\ninline HANDLE WINAPI inlineCreateSemaphoreEx( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName, DWORD, DWORD )\n{\n    return CreateSemaphore( lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName );\n}\ninline HANDLE WINAPI inlineCreateEventEx( LPSECURITY_ATTRIBUTES lpEventAttributes, LPCTSTR lpName, DWORD dwFlags, DWORD )\n{\n    BOOL manual_reset = dwFlags&0x00000001 ? TRUE : FALSE; // CREATE_EVENT_MANUAL_RESET\n    BOOL initial_set  = dwFlags&0x00000002 ? TRUE : FALSE; // CREATE_EVENT_INITIAL_SET\n    return CreateEvent( lpEventAttributes, manual_reset, initial_set, lpName );\n}\n#endif\n\n#if defined(RTL_SRWLOCK_INIT)\n#ifndef __TBB_USE_SRWLOCK\n// TODO: turn it on when bug 1952 will be fixed\n#define __TBB_USE_SRWLOCK 0\n#endif\n#endif\n\n#else\n#error tbb/machine/windows_api.h should only be used for Windows based platforms\n#endif // _WIN32 || _WIN64\n\n#endif // __TBB_machine_windows_api_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/windows_ia32.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_ia32_H\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267)\n#endif\n\n#include \"msvc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\nextern \"C\" {\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );\n    void __TBB_EXPORTED_FUNC __TBB_machine_store8 (volatile void *ptr, __int64 value );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);\n}\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,U,A,C) \\\nstatic inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n       __asm mov edx, p \\\n       __asm mov C , value \\\n       __asm mov A , comparand \\\n       __asm lock cmpxchg [edx], C \\\n       __asm mov result, A \\\n    } \\\n    return result; \\\n} \\\n\\\nstatic inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, addend \\\n        __asm lock xadd [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\\\n\\\nstatic inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, value \\\n        __asm lock xchg [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\n\n\n__TBB_MACHINE_DEFINE_ATOMICS(1, __int8, __int8, al, cl)\n__TBB_MACHINE_DEFINE_ATOMICS(2, __int16, __int16, ax, cx)\n__TBB_MACHINE_DEFINE_ATOMICS(4, ptrdiff_t, ptrdiff_t, eax, ecx)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux and Windows)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warnings 4244, 4267 are back\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/machine/windows_intel64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_intel64_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#include \"msvc_ia32_common.h\"\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#include <intrin.h>\n#pragma intrinsic(_InterlockedCompareExchange,_InterlockedExchangeAdd,_InterlockedExchange)\n#pragma intrinsic(_InterlockedCompareExchange64,_InterlockedExchangeAdd64,_InterlockedExchange64)\n\n// ATTENTION: if you ever change argument types in machine-specific primitives,\n// please take care of atomic_word<> specializations in tbb/atomic.h\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );\n}\n\ninline long __TBB_machine_cmpswp4 (volatile void *ptr, __int32 value, __int32 comparand ) {\n    return _InterlockedCompareExchange( (long*)ptr, value, comparand );\n}\ninline long __TBB_machine_fetchadd4 (volatile void *ptr, __int32 addend ) {\n    return _InterlockedExchangeAdd( (long*)ptr, addend );\n}\ninline long __TBB_machine_fetchstore4 (volatile void *ptr, __int32 value ) {\n    return _InterlockedExchange( (long*)ptr, value );\n}\n\ninline __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand ) {\n    return _InterlockedCompareExchange64( (__int64*)ptr, value, comparand );\n}\ninline __int64 __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend ) {\n    return _InterlockedExchangeAdd64( (__int64*)ptr, addend );\n}\ninline __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value ) {\n    return _InterlockedExchange64( (__int64*)ptr, value );\n}\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/memory_pool.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_memory_pool_H\n#define __TBB_memory_pool_H\n\n#if !TBB_PREVIEW_MEMORY_POOL\n#error Set TBB_PREVIEW_MEMORY_POOL to include memory_pool.h\n#endif\n/** @file */\n\n#include \"scalable_allocator.h\"\n#include <new> // std::bad_alloc\n#include <stdexcept> // std::runtime_error, std::invalid_argument\n// required in C++03 to construct std::runtime_error and std::invalid_argument\n#include <string>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#include <utility> // std::forward\n#endif\n\n#if __TBB_EXTRA_DEBUG\n#define __TBBMALLOC_ASSERT ASSERT\n#else\n#define __TBBMALLOC_ASSERT(a,b) ((void)0)\n#endif\n\nnamespace tbb {\nnamespace interface6 {\n//! @cond INTERNAL\nnamespace internal {\n\n//! Base of thread-safe pool allocator for variable-size requests\nclass pool_base : tbb::internal::no_copy {\n    // Pool interface is separate from standard allocator classes because it has\n    // to maintain internal state, no copy or assignment. Move and swap are possible.\npublic:\n    //! Reset pool to reuse its memory (free all objects at once)\n    void recycle() { rml::pool_reset(my_pool); }\n\n    //! The \"malloc\" analogue to allocate block of memory of size bytes\n    void *malloc(size_t size) { return rml::pool_malloc(my_pool, size); }\n\n    //! The \"free\" analogue to discard a previously allocated piece of memory.\n    void free(void* ptr) { rml::pool_free(my_pool, ptr); }\n\n    //! The \"realloc\" analogue complementing pool_malloc.\n    // Enables some low-level optimization possibilities\n    void *realloc(void* ptr, size_t size) {\n        return rml::pool_realloc(my_pool, ptr, size);\n    }\n\nprotected:\n    //! destroy pool - must be called in a child class\n    void destroy() { rml::pool_destroy(my_pool); }\n\n    rml::MemoryPool *my_pool;\n};\n\n} // namespace internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** @ingroup memory_allocation */\ntemplate<typename T, typename P = internal::pool_base>\nclass memory_pool_allocator {\nprotected:\n    typedef P pool_type;\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\npublic:\n    typedef typename tbb::internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    explicit memory_pool_allocator(pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator(const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\n    pointer address(reference x) const { return &x; }\n    const_pointer address(const_reference x) const { return &x; }\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        pointer p = static_cast<pointer>( my_pool->malloc( n*sizeof(value_type) ) );\n        if (!p)\n            tbb::internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        my_pool->free(p);\n    }\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) { ::new((void*)(p)) value_type(value); }\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) { p->~value_type(); }\n\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<typename P>\nclass memory_pool_allocator<void, P> {\npublic:\n    typedef P pool_type;\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    explicit memory_pool_allocator( pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator( const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\nprotected:\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n};\n\ntemplate<typename T, typename U, typename P>\ninline bool operator==( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool==b.my_pool;}\n\ntemplate<typename T, typename U, typename P>\ninline bool operator!=( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool!=b.my_pool;}\n\n\n//! Thread-safe growable pool allocator for variable-size requests\ntemplate <typename Alloc>\nclass memory_pool : public internal::pool_base {\n    Alloc my_alloc; // TODO: base-class optimization\n    static void *allocate_request(intptr_t pool_id, size_t & bytes);\n    static int deallocate_request(intptr_t pool_id, void*, size_t raw_bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    explicit memory_pool(const Alloc &src = Alloc());\n\n    //! destroy pool\n    ~memory_pool() { destroy(); } // call the callbacks first and destroy my_alloc latter\n\n};\n\nclass fixed_pool : public internal::pool_base {\n    void *my_buffer;\n    size_t my_size;\n    inline static void *allocate_request(intptr_t pool_id, size_t & bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    inline fixed_pool(void *buf, size_t size);\n    //! destroy pool\n    ~fixed_pool() { destroy(); }\n};\n\n//////////////// Implementation ///////////////\n\ntemplate <typename Alloc>\nmemory_pool<Alloc>::memory_pool(const Alloc &src) : my_alloc(src) {\n    rml::MemPoolPolicy args(allocate_request, deallocate_request,\n                            sizeof(typename Alloc::value_type));\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ntemplate <typename Alloc>\nvoid *memory_pool<Alloc>::allocate_request(intptr_t pool_id, size_t & bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == bytes%unit_size, NULL);\n    void *ptr;\n    __TBB_TRY { ptr = self.my_alloc.allocate( bytes/unit_size ); }\n    __TBB_CATCH(...) { return 0; }\n    return ptr;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Workaround for erroneous \"unreachable code\" warning in the template below.\n    // Specific for VC++ 17-18 compiler\n    #pragma warning (push)\n    #pragma warning (disable: 4702)\n#endif\ntemplate <typename Alloc>\nint memory_pool<Alloc>::deallocate_request(intptr_t pool_id, void* raw_ptr, size_t raw_bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == raw_bytes%unit_size, NULL);\n    self.my_alloc.deallocate( static_cast<typename Alloc::value_type*>(raw_ptr), raw_bytes/unit_size );\n    return 0;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    #pragma warning (pop)\n#endif\ninline fixed_pool::fixed_pool(void *buf, size_t size) : my_buffer(buf), my_size(size) {\n    if (!buf || !size)\n        // TODO: improve support for mode with exceptions disabled\n        tbb::internal::throw_exception(std::invalid_argument(\"Zero in parameter is invalid\"));\n    rml::MemPoolPolicy args(allocate_request, 0, size, /*fixedPool=*/true);\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ninline void *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {\n    fixed_pool &self = *reinterpret_cast<fixed_pool*>(pool_id);\n    __TBBMALLOC_ASSERT(0 != self.my_size, \"The buffer must not be used twice.\");\n    bytes = self.my_size;\n    self.my_size = 0; // remember that buffer has been used\n    return self.my_buffer;\n}\n\n} //namespace interface6\nusing interface6::memory_pool_allocator;\nusing interface6::memory_pool;\nusing interface6::fixed_pool;\n} //namespace tbb\n\n#undef __TBBMALLOC_ASSERT\n#endif// __TBB_memory_pool_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mutex_H\n#define __TBB_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Wrapper around the platform's native lock.\n/** @ingroup synchronization */\nclass mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n    internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        int error_code = pthread_mutex_init(&impl,NULL);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_init failed\");\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( mutex& mutex ) {\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire(mutex);\n#else\n            mutex.lock();\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire (mutex);\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release ();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current mutex to work\n        mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = NULL;\n        return s.internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n        HELD=0x56CD\n    };\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n#if _WIN32||_WIN64\npublic:\n    //!  Set the internal state\n    void set_state( state_t to ) { state = to; }\n#endif\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/null_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_null_mutex_H\n#define __TBB_null_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A mutex which does nothing\n/** A null_mutex does no operation and simulates success.\n    @ingroup synchronization */\nclass null_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_mutex& ) {}\n        ~scoped_lock() {}\n        void acquire( null_mutex& ) {}\n        bool try_acquire( null_mutex& ) { return true; }\n        void release() {}\n    };\n\n    null_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/null_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_null_rw_mutex_H\n#define __TBB_null_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A rw mutex which does nothing\n/** A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.\n    @ingroup synchronization */\nclass null_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_rw_mutex& , bool = true ) {}\n        ~scoped_lock() {}\n        void acquire( null_rw_mutex& , bool = true ) {}\n        bool upgrade_to_writer() { return true; }\n        bool downgrade_to_reader() { return true; }\n        bool try_acquire( null_rw_mutex& , bool = true ) { return true; }\n        void release() {}\n    };\n\n    null_rw_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_do.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_do_H\n#define __TBB_parallel_do_H\n\n#include \"internal/_range_iterator.h\"\n#include \"internal/_template_helpers.h\"\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <iterator>\n#include \"internal/_tbb_trace_impl.h\"\n\nnamespace tbb {\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n    template<typename Body, typename Item> class parallel_do_feeder_impl;\n} // namespace internal\n//! @endcond\n\n//! Class the user supplied algorithm body uses to add new tasks\n/** \\param Item Work item type **/\n    template<typename Item>\n    class parallel_do_feeder: ::tbb::internal::no_copy\n    {\n        parallel_do_feeder() {}\n        virtual ~parallel_do_feeder () {}\n        virtual void internal_add_copy( const Item& item ) = 0;\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        virtual void internal_add_move( Item&& item ) = 0;\n#endif\n        template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;\n    public:\n        //! Add a work item to a running parallel_do.\n        void add( const Item& item ) {internal_add_copy(item);}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        void add( Item&& item ) {internal_add_move(std::move(item));}\n#endif\n    };\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename Body> class do_group_task;\n\n    //! For internal use only.\n    /** Selects one of the two possible forms of function call member operator.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_operator_selector\n    {\n        typedef parallel_do_feeder<Item> Feeder;\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem) const ) {\n            obj(tbb::internal::forward<A1>(arg1));\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {\n            obj(tbb::internal::forward<A1>(arg1), arg2);\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem&) const ) {\n            obj(arg1);\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem&, parallel_do_feeder<Item>&) const ) {\n            obj(arg1, arg2);\n        }\n    public:\n        template<typename A1, typename A2>\n        static void call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2 )\n        {\n            internal_call( obj, tbb::internal::forward<A1>(arg1), arg2, &Body::operator() );\n        }\n    };\n\n    //! For internal use only.\n    /** Executes one iteration of a do.\n        @ingroup algorithms */\n    template<typename Body, typename Item>\n    class do_iteration_task: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Item my_value;\n        feeder_type& my_feeder;\n\n        do_iteration_task( const Item& value, feeder_type& feeder ) :\n            my_value(value), my_feeder(feeder)\n        {}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        do_iteration_task( Item&& value, feeder_type& feeder ) :\n            my_value(std::move(value)), my_feeder(feeder)\n        {}\n#endif\n\n        task* execute() __TBB_override\n        {\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, tbb::internal::move(my_value), my_feeder);\n            return NULL;\n        }\n\n        template<typename Body_, typename Item_> friend class parallel_do_feeder_impl;\n    }; // class do_iteration_task\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_iteration_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Iterator my_iter;\n        feeder_type& my_feeder;\n\n        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) :\n            my_iter(iter), my_feeder(feeder)\n        {}\n\n        task* execute() __TBB_override\n        {\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;\n        template<typename Body_, typename Item_> friend class do_group_task_input;\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_iteration_task_iter\n\n    //! For internal use only.\n    /** Implements new task adding procedure.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_feeder_impl : public parallel_do_feeder<Item>\n    {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        //Avoiding use of copy constructor in a virtual method if the type does not support it\n        void internal_add_copy_impl(std::true_type, const Item& item) {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);\n            task::spawn(t);\n        }\n        void internal_add_copy_impl(std::false_type, const Item&) {\n            __TBB_ASSERT(false, \"Overloading for r-value reference doesn't work or it's not movable and not copyable object\");\n        }\n        void internal_add_copy( const Item& item ) __TBB_override\n        {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n            internal_add_copy_impl(typename std::is_copy_constructible<Item>::type(), item);\n#else\n            internal_add_copy_impl(std::true_type(), item);\n#endif\n        }\n        void internal_add_move( Item&& item ) __TBB_override\n        {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(std::move(item), *this);\n            task::spawn(t);\n        }\n#else /* ! __TBB_CPP11_RVALUE_REF_PRESENT */\n        void internal_add_copy(const Item& item) __TBB_override {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);\n            task::spawn(t);\n        }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n    public:\n        const Body* my_body;\n        empty_task* my_barrier;\n\n        parallel_do_feeder_impl()\n        {\n            my_barrier = new( task::allocate_root() ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl(tbb::task_group_context &context)\n        {\n            my_barrier = new( task::allocate_root(context) ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n#endif\n\n        ~parallel_do_feeder_impl()\n        {\n            my_barrier->destroy(*my_barrier);\n        }\n    }; // class parallel_do_feeder_impl\n\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_group_task_forward: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        Iterator my_first;\n        size_t my_size;\n\n        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder )\n            : my_feeder(feeder), my_first(first), my_size(size)\n        {}\n\n        task* execute() __TBB_override\n        {\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( my_first, my_feeder );\n                ++my_first;\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename _Item> friend class do_task_iter;\n    }; // class do_group_task_forward\n\n    template<typename Body, typename Item>\n    class do_group_task_input: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        size_t my_size;\n        aligned_space<Item, max_arg_size> my_arg;\n\n        do_group_task_input( feeder_type& feeder )\n            : my_feeder(feeder), my_size(0)\n        {}\n\n        task* execute() __TBB_override\n        {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n            typedef std::move_iterator<Item*> Item_iterator;\n#else\n            typedef Item* Item_iterator;\n#endif\n            typedef do_iteration_task_iter<Item_iterator, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( Item_iterator(my_arg.begin() + k), my_feeder );\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        ~do_group_task_input(){\n            for( size_t k=0; k<my_size; ++k)\n                (my_arg.begin() + k)->~Item();\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_group_task_input\n\n    //! For internal use only.\n    /** Gets block of iterations and packages them into a do_group_task.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    class do_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n    public:\n        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) :\n            my_first(first), my_last(last), my_feeder(feeder)\n        {}\n\n    private:\n        Iterator my_first;\n        Iterator my_last;\n        feeder_type& my_feeder;\n\n        /* Do not merge run(xxx) and run_xxx() methods. They are separated in order\n            to make sure that compilers will eliminate unused argument of type xxx\n            (that is will not put it on stack). The sole purpose of this argument\n            is overload resolution.\n\n            An alternative could be using template functions, but explicit specialization\n            of member function templates is not supported for non specialized class\n            templates. Besides template functions would always fall back to the least\n            efficient variant (the one for input iterators) in case of iterators having\n            custom tags derived from basic ones. */\n        task* execute() __TBB_override\n        {\n            typedef typename std::iterator_traits<Iterator>::iterator_category iterator_tag;\n            return run( (iterator_tag*)NULL );\n        }\n\n        /** This is the most restricted variant that operates on input iterators or\n            iterators with unknown tags (tags not derived from the standard ones). **/\n        inline task* run( void* ) { return run_for_input_iterator(); }\n\n        task* run_for_input_iterator() {\n            typedef do_group_task_input<Body, Item> block_type;\n\n            block_type& t = *new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);\n            size_t k=0;\n            while( !(my_first == my_last) ) {\n                // Move semantics are automatically used when supported by the iterator\n                new (t.my_arg.begin() + k) Item(*my_first);\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first == my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.my_size = k;\n                return &t;\n            }\n        }\n\n        inline task* run( std::forward_iterator_tag* ) { return run_for_forward_iterator(); }\n\n        task* run_for_forward_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n\n            Iterator first = my_first;\n            size_t k=0;\n            while( !(my_first==my_last) ) {\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first==my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            return k==0 ? NULL : new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);\n        }\n\n        inline task* run( std::random_access_iterator_tag* ) { return run_for_random_access_iterator(); }\n\n        task* run_for_random_access_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n\n            size_t k = static_cast<size_t>(my_last-my_first);\n            if( k > block_type::max_arg_size ) {\n                Iterator middle = my_first + k/2;\n\n                empty_task& c = *new( allocate_continuation() ) empty_task;\n                do_task_iter& b = *new( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);\n                recycle_as_child_of(c);\n\n                my_last = middle;\n                c.set_ref_count(2);\n                c.spawn(b);\n                return this;\n            }else if( k != 0 ) {\n                task_list list;\n                task* t;\n                size_t k1=0;\n                for(;;) {\n                    t = new( allocate_child() ) iteration_type(my_first, my_feeder);\n                    ++my_first;\n                    if( ++k1==k ) break;\n                    list.push_back(*t);\n                }\n                set_ref_count(int(k+1));\n                spawn(list);\n                spawn_and_wait_for_all(*t);\n            }\n            return NULL;\n        }\n    }; // class do_task_iter\n\n    //! For internal use only.\n    /** Implements parallel iteration over a range.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    void run_parallel_do( Iterator first, Iterator last, const Body& body\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        typedef do_task_iter<Iterator, Body, Item> root_iteration_task;\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl<Body, Item> feeder(context);\n#else\n        parallel_do_feeder_impl<Body, Item> feeder;\n#endif\n        feeder.my_body = &body;\n\n        root_iteration_task &t = *new( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);\n\n        feeder.my_barrier->set_ref_count(2);\n        feeder.my_barrier->spawn_and_wait_for_all(t);\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif\n            );\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item, typename _Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif\n            );\n    }\n\n} // namespace internal\n} // namespace interface9\n//! @endcond\n\n/** \\page parallel_do_body_req Requirements on parallel_do body\n    Class \\c Body implementing the concept of parallel_do body must define:\n    - \\code\n        B::operator()(\n                cv_item_type item,\n                parallel_do_feeder<item_type>& feeder\n        ) const\n\n        OR\n\n        B::operator()( cv_item_type& item ) const\n      \\endcode                                               Process item.\n                                                             May be invoked concurrently  for the same \\c this but different \\c item.\n\n    - \\code item_type( const item_type& ) \\endcode\n                                                             Copy a work item.\n    - \\code ~item_type() \\endcode                            Destroy a work item\n**/\n\n/** \\name parallel_do\n    See also requirements on \\ref parallel_do_body_req \"parallel_do Body\". **/\n//@{\n//! Parallel iteration over a range, with optional addition of more work.\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body )\n{\n    if ( first == last )\n        return;\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context context(internal::PARALLEL_DO);\n#endif\n    interface9::internal::select_parallel_do( first, last, body, &Body::operator()\n#if __TBB_TASK_GROUP_CONTEXT\n        , context\n#endif\n        );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over a range, with optional addition of more work and user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context  )\n{\n    if ( first == last )\n        return;\n    interface9::internal::select_parallel_do( first, last, body, &Body::operator(), context );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n//@}\n\nusing interface9::parallel_do_feeder;\n\n} // namespace\n\n#endif /* __TBB_parallel_do_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_for.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_for_H\n#define __TBB_parallel_for_H\n\n#include <new>\n#include \"task.h\"\n#include \"partitioner.h\"\n#include \"blocked_range.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_tbb_trace_impl.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    //! allocate right task with new parent\n    void* allocate_sibling(task* start_for_task, size_t bytes);\n\n    //! Task type used in parallel_for\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_for: public task {\n        Range my_range;\n        const Body my_body;\n        typename Partitioner::task_partition_type my_partition;\n        task* execute() __TBB_override;\n\n        //! Update affinity info, if any.\n        void note_affinity( affinity_id id ) __TBB_override {\n            my_partition.note_affinity( id );\n        }\n\n    public:\n        //! Constructor for root task.\n        start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n            my_range(range),\n            my_body(body),\n            my_partition(partitioner)\n        {\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, NULL);\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, typename Partitioner::split_type& split_obj) :\n            my_range(parent_.my_range, split_obj),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split_obj)\n        {\n            my_partition.set_affinity(*this);\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, (void *)&parent_);\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, const Range& r, depth_t d ) :\n            my_range(r),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split())\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d );\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, (void *)&parent_);\n        }\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                start_for& a = *new(task::allocate_root()) start_for(range,body,partitioner);\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_FOR);\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n\t\t// REGION BEGIN\n                fgt_begin_algorithm( tbb::internal::PARALLEL_FOR_TASK, (void*)&context );\n                task::spawn_root_and_wait(a);\n                fgt_end_algorithm( (void*)&context );\n\t\t// REGION END\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() ) {\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n\t\t// REGION BEGIN\n                fgt_begin_algorithm( tbb::internal::PARALLEL_FOR_TASK, (void*)&context );\n                task::spawn_root_and_wait(a);\n                fgt_end_algorithm( (void*)&context );\n\t\t// END REGION\n            }\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range, serves as callback for partitioner\n        void run_body( Range &r ) { \n            fgt_alg_begin_body( tbb::internal::PARALLEL_FOR_TASK, (void *)const_cast<Body*>(&(this->my_body)), (void*)this );\n            my_body( r ); \n            fgt_alg_end_body( (void *)const_cast<Body*>(&(this->my_body)) );\n        }\n\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, split_obj) );\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, r, d) );\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void* allocate_sibling(task* start_for_task, size_t bytes) {\n        task* parent_ptr = new( start_for_task->allocate_continuation() ) flag_task();\n        start_for_task->set_parent(parent_ptr);\n        parent_ptr->set_ref_count(2);\n        return &parent_ptr->allocate_child().allocate(bytes);\n    }\n\n    //! execute task for parallel_for\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_for<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        my_partition.execute(*this, my_range);\n        return NULL;\n    }\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_for;\n\n    //! Calls the function with values from range [begin, end) with a step provided\n    template<typename Function, typename Index>\n    class parallel_for_body : internal::no_assign {\n        const Function &my_func;\n        const Index my_begin;\n        const Index my_step;\n    public:\n        parallel_for_body( const Function& _func, Index& _begin, Index& _step )\n            : my_func(_func), my_begin(_begin), my_step(_step) {}\n\n        void operator()( const tbb::blocked_range<Index>& r ) const {\n            // A set of local variables to help the compiler with vectorization of the following loop.\n            Index b = r.begin();\n            Index e = r.end();\n            Index ms = my_step;\n            Index k = my_begin + b*ms;\n\n#if __INTEL_COMPILER\n#pragma ivdep\n#if __TBB_ASSERT_ON_VECTORIZATION_FAILURE\n#pragma vector always assert\n#endif\n#endif\n            for ( Index i = b; i < e; ++i, k += ms ) {\n                my_func( k );\n            }\n        }\n    };\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_for_body_req Requirements on parallel_for body\n    Class \\c Body implementing the concept of parallel_for body must define:\n    - \\code Body::Body( const Body& ); \\endcode                 Copy constructor\n    - \\code Body::~Body(); \\endcode                             Destructor\n    - \\code void Body::operator()( Range& r ) const; \\endcode   Function call operator applying the body to range \\c r.\n**/\n\n/** \\name parallel_for\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_for_body_req \"parallel_for Body\". **/\n//@{\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over range with default partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, task_group_context& context ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range, body, __TBB_DEFAULT_PARTITIONER(), context);\n}\n\n//! Parallel iteration over range with simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with auto_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with static_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with affinity_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\nnamespace strict_ppl {\n\n//@{\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner);\n    }\n}\n\n//! Parallel iteration over a range of integers with a step provided and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a step provided and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, step, f, partitioner);\n}\n\n//! Parallel iteration over a range of integers with a default step value and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a default step value and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Implementation of parallel iteration over stepped range of integers with explicit step, task group context, and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner, tbb::task_group_context &context) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner, context);\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step, task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and affinity partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, step, f, partitioner, context);\n}\n\n\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and affinity_partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace strict_ppl\n\nusing strict_ppl::parallel_for;\n\n} // namespace tbb\n\n#if TBB_PREVIEW_SERIAL_SUBSET\n#define __TBB_NORMAL_EXECUTION\n#include \"../serial/tbb/parallel_for.h\"\n#undef __TBB_NORMAL_EXECUTION\n#endif\n\n#endif /* __TBB_parallel_for_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_for_each.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_for_each_H\n#define __TBB_parallel_for_each_H\n\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_do : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_do(const Function &_func) : my_func(_func) {}\n\n        void operator()(typename std::iterator_traits<Iterator>::reference value) const {\n            my_func(value);\n        }\n    };\n\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_for : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_for(const Function &_func) : my_func(_func) {}\n\n        void operator()(tbb::blocked_range<Iterator> range) const {\n#if __INTEL_COMPILER\n#pragma ivdep\n#endif\n            for(Iterator it = range.begin(), end = range.end(); it != end; ++it) {\n                my_func(*it);\n            }\n        }\n    };\n\n    template<typename Iterator, typename Function, typename Generic>\n    struct parallel_for_each_impl {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body);\n        }\n    };\n    template<typename Iterator, typename Function>\n    struct parallel_for_each_impl<Iterator, Function, std::random_access_iterator_tag> {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body);\n        }\n    };\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_for_each\n    **/\n//@{\n//! Calls function f for all items from [first, last) interval using user-supplied context\n/** @ingroup algorithms */\n#if __TBB_TASK_GROUP_CONTEXT\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f, context);\n}\n\n//! Calls function f for all items from rng using user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n\n//! Calls function f for all items from const rng user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Uses default context\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_for_each_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_invoke.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_invoke_H\n#define __TBB_parallel_invoke_H\n\n#include \"task.h\"\n#include \"tbb_profiling.h\"\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n    #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n#if !__TBB_TASK_GROUP_CONTEXT\n    /** Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. **/\n    struct task_group_context {\n        task_group_context(tbb::internal::string_index){}\n    };\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! @cond INTERNAL\nnamespace internal {\n    // Simple task object, executing user method\n    template<typename function>\n    class function_invoker : public task{\n    public:\n        function_invoker(const function& _function) : my_function(_function) {}\n    private:\n        const function &my_function;\n        task* execute() __TBB_override\n        {\n            my_function();\n            return NULL;\n        }\n    };\n\n    // The class spawns two or three child tasks\n    template <size_t N, typename function1, typename function2, typename function3>\n    class spawner : public task {\n    private:\n        const function1& my_func1;\n        const function2& my_func2;\n        const function3& my_func3;\n        bool is_recycled;\n\n        task* execute () __TBB_override {\n            if(is_recycled){\n                return NULL;\n            }else{\n                __TBB_ASSERT(N==2 || N==3, \"Number of arguments passed to spawner is wrong\");\n                set_ref_count(N);\n                recycle_as_safe_continuation();\n                internal::function_invoker<function2>* invoker2 = new (allocate_child()) internal::function_invoker<function2>(my_func2);\n                __TBB_ASSERT(invoker2, \"Child task allocation failed\");\n                spawn(*invoker2);\n                size_t n = N; // To prevent compiler warnings\n                if (n>2) {\n                    internal::function_invoker<function3>* invoker3 = new (allocate_child()) internal::function_invoker<function3>(my_func3);\n                    __TBB_ASSERT(invoker3, \"Child task allocation failed\");\n                    spawn(*invoker3);\n                }\n                my_func1();\n                is_recycled = true;\n                return NULL;\n            }\n        } // execute\n\n    public:\n        spawner(const function1& _func1, const function2& _func2, const function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}\n    };\n\n    // Creates and spawns child tasks\n    class parallel_invoke_helper : public empty_task {\n    public:\n        // Dummy functor class\n        class parallel_invoke_noop {\n        public:\n            void operator() () const {}\n        };\n        // Creates a helper object with user-defined number of children expected\n        parallel_invoke_helper(int number_of_children)\n        {\n            set_ref_count(number_of_children + 1);\n        }\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n        void add_children() {}\n        void add_children(tbb::task_group_context&) {}\n\n        template <typename function>\n        void add_children(function&& _func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(std::forward<function>(_func));\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        template<typename function>\n        void add_children(function&& _func, tbb::task_group_context&)\n        {\n            add_children(std::forward<function>(_func));\n        }\n\n        // Adds child(ren) task(s) and spawns them\n        template <typename function1, typename function2, typename... function>\n        void add_children(function1&& _func1, function2&& _func2, function&&... _func)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            typedef internal::spawner<2, function1, function2, parallel_invoke_noop> spawner_type;\n            spawner_type & sub_root = *new(allocate_child()) spawner_type(std::forward<function1>(_func1), std::forward<function2>(_func2), noop);\n            spawn(sub_root);\n            add_children(std::forward<function>(_func)...);\n        }\n#else\n        // Adds child task and spawns it\n        template <typename function>\n        void add_children (const function &_func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(_func);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        // Adds a task with multiple child tasks and spawns it\n        // two arguments\n        template <typename function1, typename function2>\n        void add_children (const function1& _func1, const function2& _func2)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *new(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);\n            spawn(sub_root);\n        }\n        // three arguments\n        template <typename function1, typename function2, typename function3>\n        void add_children (const function1& _func1, const function2& _func2, const function3& _func3)\n        {\n            internal::spawner<3, function1, function2, function3>& sub_root = *new(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);\n            spawn(sub_root);\n        }\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n\n        // Waits for all child tasks\n        template <typename F0>\n        void run_and_finish(const F0& f0)\n        {\n            internal::function_invoker<F0>* invoker = new (allocate_child()) internal::function_invoker<F0>(f0);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn_and_wait_for_all(*invoker);\n        }\n    };\n    // The class destroys root if exception occurred as well as in normal case\n    class parallel_invoke_cleaner: internal::no_copy {\n    public:\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context& context)\n            : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))\n#else\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context&)\n            : root(*new(task::allocate_root()) internal::parallel_invoke_helper(number_of_children))\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n        {}\n\n        ~parallel_invoke_cleaner(){\n            root.destroy(root);\n        }\n        internal::parallel_invoke_helper& root;\n    };\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n//  Determine whether the last parameter in a pack is task_group_context\n    template<typename... T> struct impl_selector; // to workaround a GCC bug\n\n    template<typename T1, typename... T> struct impl_selector<T1, T...> {\n        typedef typename impl_selector<T...>::type type;\n    };\n\n    template<typename T> struct impl_selector<T> {\n        typedef false_type type;\n    };\n    template<> struct impl_selector<task_group_context&> {\n        typedef true_type  type;\n    };\n\n    // Select task_group_context parameter from the back of a pack\n    inline task_group_context& get_context( task_group_context& tgc ) { return tgc; }\n\n    template<typename T1, typename... T>\n    task_group_context& get_context( T1&& /*ignored*/, T&&... t )\n    { return get_context( std::forward<T>(t)... ); }\n\n    // task_group_context is known to be at the back of the parameter pack\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(true_type, F0&& f0, F1&& f1, F&&... f) {\n        __TBB_STATIC_ASSERT(sizeof...(F)>0, \"Variadic parallel_invoke implementation broken?\");\n        // # of child tasks: f0, f1, and a task for each two elements of the pack except the last\n        const size_t number_of_children = 2 + sizeof...(F)/2;\n        parallel_invoke_cleaner cleaner(number_of_children, get_context(std::forward<F>(f)...));\n        parallel_invoke_helper& root = cleaner.root;\n\n        root.add_children(std::forward<F>(f)...);\n        root.add_children(std::forward<F1>(f1));\n        root.run_and_finish(std::forward<F0>(f0));\n    }\n\n    // task_group_context is not in the pack, needs to be added\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(false_type, F0&& f0, F1&& f1, F&&... f) {\n        tbb::task_group_context context(PARALLEL_INVOKE);\n        // Add context to the arguments, and redirect to the other overload\n        parallel_invoke_impl(true_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)..., context);\n    }\n#endif\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_invoke\n    **/\n//@{\n//! Executes a list of tasks in parallel and waits for all tasks to complete.\n/** @ingroup algorithms */\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n\n// parallel_invoke for two or more arguments via variadic templates\n// presence of task_group_context is defined automatically\ntemplate<typename F0, typename F1, typename... F>\nvoid parallel_invoke(F0&& f0, F1&& f1, F&&... f) {\n    typedef typename internal::impl_selector<internal::false_type, F...>::type selector_type;\n    internal::parallel_invoke_impl(selector_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)...);\n}\n\n#else\n\n// parallel_invoke with user-defined context\n// two arguments\ntemplate<typename F0, typename F1 >\nvoid parallel_invoke(const F0& f0, const F1& f1, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(2, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// three arguments\ntemplate<typename F0, typename F1, typename F2 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f3);\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f7, f6, f5);\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f8, f7, f6);\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f9, f8, f7);\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// two arguments\ntemplate<typename F0, typename F1>\nvoid parallel_invoke(const F0& f0, const F1& f1) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1>(f0, f1, context);\n}\n// three arguments\ntemplate<typename F0, typename F1, typename F2>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2>(f0, f1, f2, context);\n}\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);\n}\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);\n}\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);\n}\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);\n}\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);\n}\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);\n}\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);\n}\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_invoke_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_reduce.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_reduce_H\n#define __TBB_parallel_reduce_H\n\n#include <new>\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include \"partitioner.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    using namespace tbb::internal;\n\n    /** Values for reduction_context. */\n    enum {\n        root_task, left_child, right_child\n    };\n\n    /** Represented as a char, not enum, for compactness. */\n    typedef char reduction_context;\n\n    //! Task type used to combine the partial results of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_reduce: public flag_task {\n        //! Pointer to body, or NULL if the left child has not yet finished.\n        bool has_right_zombie;\n        const reduction_context my_context;\n        Body* my_body;\n        aligned_space<Body> zombie_space;\n        finish_reduce( reduction_context context_ ) :\n            has_right_zombie(false), // TODO: substitute by flag_task::child_stolen?\n            my_context(context_),\n            my_body(NULL)\n        {\n        }\n        ~finish_reduce() {\n            if( has_right_zombie )\n                zombie_space.begin()->~Body();\n        }\n        task* execute() __TBB_override {\n            if( has_right_zombie ) {\n                // Right child was stolen.\n                Body* s = zombie_space.begin();\n                my_body->join( *s );\n                // Body::join() won't be called if canceled. Defer destruction to destructor\n            }\n            if( my_context==left_child )\n                itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_, typename Partitioner>\n        friend class start_reduce;\n    };\n\n    //! allocate right task with new parent\n    void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes);\n\n    //! Task type used to split the work of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_reduce: public task {\n        typedef finish_reduce<Body> finish_type;\n        Body* my_body;\n        Range my_range;\n        typename Partitioner::task_partition_type my_partition;\n        reduction_context my_context;\n        task* execute() __TBB_override;\n        //! Update affinity info, if any\n        void note_affinity( affinity_id id ) __TBB_override {\n            my_partition.note_affinity( id );\n        }\n        template<typename Body_>\n        friend class finish_reduce;\n\npublic:\n        //! Constructor used for root task\n        start_reduce( const Range& range, Body* body, Partitioner& partitioner ) :\n            my_body(body),\n            my_range(range),\n            my_partition(partitioner),\n            my_context(root_task)\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, typename Partitioner::split_type& split_obj ) :\n            my_body(parent_.my_body),\n            my_range(parent_.my_range, split_obj),\n            my_partition(parent_.my_partition, split_obj),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            parent_.my_context = left_child;\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, const Range& r, depth_t d ) :\n            my_body(parent_.my_body),\n            my_range(r),\n            my_partition(parent_.my_partition, split()),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d ); // TODO: move into constructor of partitioner\n            parent_.my_context = left_child;\n        }\n        static void run( const Range& range, Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_reduce(range,&body,partitioner) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_REDUCE);\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range\n        void run_body( Range &r ) { (*my_body)( r ); }\n\n        //! spawn right task, serves as callback for partitioner\n        // TODO: remove code duplication from 'offer_work' methods\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, split_obj);\n            spawn(*tasks[1]);\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, r, d);\n            spawn(*tasks[1]);\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes) {\n        tasks[0] = &start_reduce_task->allocate_continuation().allocate(finish_bytes);\n        start_reduce_task->set_parent(tasks[0]);\n        tasks[0]->set_ref_count(2);\n        tasks[1] = &tasks[0]->allocate_child().allocate(start_bytes);\n    }\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_reduce<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        if( my_context==right_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            if( !itt_load_word_with_acquire(parent_ptr->my_body) ) { // TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???\n                my_body = new( parent_ptr->zombie_space.begin() ) Body(*my_body,split());\n                parent_ptr->has_right_zombie = true;\n            }\n        } else __TBB_ASSERT(my_context==root_task,NULL);// because left leaf spawns right leafs without recycling\n        my_partition.execute(*this, my_range);\n        if( my_context==left_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),NULL);\n            itt_store_word_with_release(parent_ptr->my_body, my_body );\n        }\n        return NULL;\n    }\n\n    //! Task type used to combine the partial results of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_deterministic_reduce: public task {\n        Body &my_left_body;\n        Body my_right_body;\n\n        finish_deterministic_reduce( Body &body ) :\n            my_left_body( body ),\n            my_right_body( body, split() )\n        {\n        }\n        task* execute() __TBB_override {\n            my_left_body.join( my_right_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_, typename Partitioner>\n        friend class start_deterministic_reduce;\n    };\n\n    //! Task type used to split the work of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_deterministic_reduce: public task {\n        typedef finish_deterministic_reduce<Body> finish_type;\n        Body &my_body;\n        Range my_range;\n        typename Partitioner::task_partition_type my_partition;\n        task* execute() __TBB_override;\n\n        //! Constructor used for root task\n        start_deterministic_reduce( const Range& range, Body& body, Partitioner& partitioner ) :\n            my_body( body ),\n            my_range( range ),\n            my_partition( partitioner )\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_deterministic_reduce( start_deterministic_reduce& parent_, finish_type& c, typename Partitioner::split_type& split_obj ) :\n            my_body( c.my_right_body ),\n            my_range( parent_.my_range, split_obj ),\n            my_partition( parent_.my_partition, split_obj )\n        {\n        }\n\npublic:\n        static void run( const Range& range, Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_deterministic_reduce(range,&body,partitioner) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_REDUCE);\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body,partitioner) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body,partitioner) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        void offer_work( typename Partitioner::split_type& split_obj) {\n            task* tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_deterministic_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_body);\n            new((void*)tasks[1]) start_deterministic_reduce(*this, *static_cast<finish_type*>(tasks[0]), split_obj);\n            spawn(*tasks[1]);\n        }\n\n        void run_body( Range &r ) { my_body(r); }\n    };\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_deterministic_reduce<Range,Body, Partitioner>::execute() {\n        my_partition.execute(*this, my_range);\n        return NULL;\n    }\n} // namespace internal\n//! @endcond\n} //namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_reduce;\n    using interface9::internal::start_deterministic_reduce;\n    //! Auxiliary class for parallel_reduce; for internal use only.\n    /** The adaptor class that implements \\ref parallel_reduce_body_req \"parallel_reduce Body\"\n        using given \\ref parallel_reduce_lambda_req \"anonymous function objects\".\n     **/\n    /** @ingroup algorithms */\n    template<typename Range, typename Value, typename RealBody, typename Reduction>\n    class lambda_reduce_body {\n\n//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced\n//       (might require some performance measurements)\n\n        const Value&     identity_element;\n        const RealBody&  my_real_body;\n        const Reduction& my_reduction;\n        Value            my_value;\n        lambda_reduce_body& operator= ( const lambda_reduce_body& other );\n    public:\n        lambda_reduce_body( const Value& identity, const RealBody& body, const Reduction& reduction )\n            : identity_element(identity)\n            , my_real_body(body)\n            , my_reduction(reduction)\n            , my_value(identity)\n        { }\n        lambda_reduce_body( const lambda_reduce_body& other )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.my_value)\n        { }\n        lambda_reduce_body( lambda_reduce_body& other, tbb::split )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.identity_element)\n        { }\n        void operator()(Range& range) {\n            my_value = my_real_body(range, const_cast<const Value&>(my_value));\n        }\n        void join( lambda_reduce_body& rhs ) {\n            my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));\n        }\n        Value result() const {\n            return my_value;\n        }\n    };\n\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_reduce_body_req Requirements on parallel_reduce body\n    Class \\c Body implementing the concept of parallel_reduce body must define:\n    - \\code Body::Body( Body&, split ); \\endcode        Splitting constructor.\n                                                        Must be able to run concurrently with operator() and method \\c join\n    - \\code Body::~Body(); \\endcode                     Destructor\n    - \\code void Body::operator()( Range& r ); \\endcode Function call operator applying body to range \\c r\n                                                        and accumulating the result\n    - \\code void Body::join( Body& b ); \\endcode        Join results.\n                                                        The result in \\c b should be merged into the result of \\c this\n**/\n\n/** \\page parallel_reduce_lambda_req Requirements on parallel_reduce anonymous function objects (lambda functions)\n    TO BE DOCUMENTED\n**/\n\n/** \\name parallel_reduce\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_reduce_body_req \"parallel_reduce Body\". **/\n//@{\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body ) {\n    internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );\n}\n\n//! Parallel iteration with reduction and simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const __TBB_DEFAULT_PARTITIONER>\n                          ::run(range, body, __TBB_DEFAULT_PARTITIONER() );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and simple_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run(range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Parallel iteration with deterministic reduction and default simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, simple_partitioner());\n}\n\n//! Parallel iteration with deterministic reduction and simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, partitioner);\n}\n\n//! Parallel iteration with deterministic reduction and static partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {\n    internal::start_deterministic_reduce<Range, Body, const static_partitioner>::run(range, body, partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range,Body, const simple_partitioner>::run( range, body, simple_partitioner(), context );\n}\n\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration with deterministic reduction, static partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range, Body, const static_partitioner>::run(range, body, partitioner, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with deterministic reduction and default simple partitioner.\n// TODO: consider making static_partitioner the default\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    return parallel_deterministic_reduce(range, identity, real_body, reduction, simple_partitioner());\n}\n\n//! Parallel iteration with deterministic reduction and simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction, const simple_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>, const simple_partitioner>\n                          ::run(range, body, partitioner);\n    return body.result();\n}\n\n//! Parallel iteration with deterministic reduction and static partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction, const static_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const static_partitioner>\n        ::run(range, body, partitioner);\n    return body.result();\n}\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    task_group_context& context ) {\n    return parallel_deterministic_reduce(range, identity, real_body, reduction, simple_partitioner(), context);\n}\n\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const simple_partitioner>\n        ::run(range, body, partitioner, context);\n    return body.result();\n}\n\n//! Parallel iteration with deterministic reduction, static partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    const static_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const static_partitioner>\n        ::run(range, body, partitioner, context);\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_reduce_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_scan.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_scan_H\n#define __TBB_parallel_scan_H\n\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <new>\n#include \"partitioner.h\"\n\nnamespace tbb {\n\n//! Used to indicate that the initial scan is being performed.\n/** @ingroup algorithms */\nstruct pre_scan_tag {\n    static bool is_final_scan() {return false;}\n    operator bool() {return is_final_scan();}\n};\n\n//! Used to indicate that the final scan is being performed.\n/** @ingroup algorithms */\nstruct final_scan_tag {\n    static bool is_final_scan() {return true;}\n    operator bool() {return is_final_scan();}\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Performs final scan for a leaf\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class final_sum: public task {\n    public:\n        Body my_body;\n    private:\n        aligned_space<Range> my_range;\n        //! Where to put result of last subrange, or NULL if not last subrange.\n        Body* my_stuff_last;\n    public:\n        final_sum( Body& body_ ) :\n            my_body(body_,split())\n        {\n            poison_pointer(my_stuff_last);\n        }\n        ~final_sum() {\n            my_range.begin()->~Range();\n        }\n        void finish_construction( const Range& range_, Body* stuff_last_ ) {\n            new( my_range.begin() ) Range(range_);\n            my_stuff_last = stuff_last_;\n        }\n    private:\n        task* execute() __TBB_override {\n            my_body( *my_range.begin(), final_scan_tag() );\n            if( my_stuff_last )\n                my_stuff_last->assign(my_body);\n            return NULL;\n        }\n    };\n\n    //! Split work to be done in the scan.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class sum_node: public task {\n        typedef final_sum<Range,Body> final_sum_type;\n    public:\n        final_sum_type *my_incoming;\n        final_sum_type *my_body;\n        Body *my_stuff_last;\n    private:\n        final_sum_type *my_left_sum;\n        sum_node *my_left;\n        sum_node *my_right;\n        bool my_left_is_final;\n        Range my_range;\n        sum_node( const Range range_, bool left_is_final_ ) :\n            my_stuff_last(NULL),\n            my_left_sum(NULL),\n            my_left(NULL),\n            my_right(NULL),\n            my_left_is_final(left_is_final_),\n            my_range(range_)\n        {\n            // Poison fields that will be set by second pass.\n            poison_pointer(my_body);\n            poison_pointer(my_incoming);\n        }\n        task* create_child( const Range& range_, final_sum_type& f, sum_node* n, final_sum_type* incoming_, Body* stuff_last_ ) {\n            if( !n ) {\n                f.recycle_as_child_of( *this );\n                f.finish_construction( range_, stuff_last_ );\n                return &f;\n            } else {\n                n->my_body = &f;\n                n->my_incoming = incoming_;\n                n->my_stuff_last = stuff_last_;\n                return n;\n            }\n        }\n        task* execute() __TBB_override {\n            if( my_body ) {\n                if( my_incoming )\n                    my_left_sum->my_body.reverse_join( my_incoming->my_body );\n                recycle_as_continuation();\n                sum_node& c = *this;\n                task* b = c.create_child(Range(my_range,split()),*my_left_sum,my_right,my_left_sum,my_stuff_last);\n                task* a = my_left_is_final ? NULL : c.create_child(my_range,*my_body,my_left,my_incoming,NULL);\n                set_ref_count( (a!=NULL)+(b!=NULL) );\n                my_body = NULL;\n                if( a ) spawn(*b);\n                else a = b;\n                return a;\n            } else {\n                return NULL;\n            }\n        }\n        template<typename Range_,typename Body_,typename Partitioner_>\n        friend class start_scan;\n\n        template<typename Range_,typename Body_>\n        friend class finish_scan;\n    };\n\n    //! Combine partial results\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class finish_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type** const my_sum;\n        sum_node_type*& my_return_slot;\n    public:\n        final_sum_type* my_right_zombie;\n        sum_node_type& my_result;\n\n        task* execute() __TBB_override {\n            __TBB_ASSERT( my_result.ref_count()==(my_result.my_left!=NULL)+(my_result.my_right!=NULL), NULL );\n            if( my_result.my_left )\n                my_result.my_left_is_final = false;\n            if( my_right_zombie && my_sum )\n                ((*my_sum)->my_body).reverse_join(my_result.my_left_sum->my_body);\n            __TBB_ASSERT( !my_return_slot, NULL );\n            if( my_right_zombie || my_result.my_right ) {\n                my_return_slot = &my_result;\n            } else {\n                destroy( my_result );\n            }\n            if( my_right_zombie && !my_sum && !my_result.my_right ) {\n                destroy(*my_right_zombie);\n                my_right_zombie = NULL;\n            }\n            return NULL;\n        }\n\n        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :\n            my_sum(sum_),\n            my_return_slot(return_slot_),\n            my_right_zombie(NULL),\n            my_result(result_)\n        {\n            __TBB_ASSERT( !my_return_slot, NULL );\n        }\n    };\n\n    //! Initial task to split the work\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner=simple_partitioner>\n    class start_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type* my_body;\n        /** Non-null if caller is requesting total. */\n        final_sum_type** my_sum;\n        sum_node_type** my_return_slot;\n        /** Null if computing root. */\n        sum_node_type* my_parent_sum;\n        bool my_is_final;\n        bool my_is_right_child;\n        Range my_range;\n        typename Partitioner::partition_type my_partition;\n        task* execute() __TBB_override ;\n    public:\n        start_scan( sum_node_type*& return_slot_, start_scan& parent_, sum_node_type* parent_sum_ ) :\n            my_body(parent_.my_body),\n            my_sum(parent_.my_sum),\n            my_return_slot(&return_slot_),\n            my_parent_sum(parent_sum_),\n            my_is_final(parent_.my_is_final),\n            my_is_right_child(false),\n            my_range(parent_.my_range,split()),\n            my_partition(parent_.my_partition,split())\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        start_scan( sum_node_type*& return_slot_, const Range& range_, final_sum_type& body_, const Partitioner& partitioner_) :\n            my_body(&body_),\n            my_sum(NULL),\n            my_return_slot(&return_slot_),\n            my_parent_sum(NULL),\n            my_is_final(true),\n            my_is_right_child(false),\n            my_range(range_),\n            my_partition(partitioner_)\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        static void run( const Range& range_, Body& body_, const Partitioner& partitioner_ ) {\n            if( !range_.empty() ) {\n                typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;\n                internal::sum_node<Range,Body>* root = NULL;\n                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body_ );\n                start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(\n                    /*my_return_slot=*/root,\n                    range_,\n                    *temp_body,\n                    partitioner_ );\n                temp_body->my_body.reverse_join(body_);\n                task::spawn_root_and_wait( pass1 );\n                if( root ) {\n                    root->my_body = temp_body;\n                    root->my_incoming = NULL;\n                    root->my_stuff_last = &body_;\n                    task::spawn_root_and_wait( *root );\n                } else {\n                    body_.assign(temp_body->my_body);\n                    temp_body->finish_construction( range_, NULL );\n                    temp_body->destroy(*temp_body);\n                }\n            }\n        }\n    };\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_scan<Range,Body,Partitioner>::execute() {\n        typedef internal::finish_scan<Range,Body> finish_pass1_type;\n        finish_pass1_type* p = my_parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;\n        // Inspecting p->result.left_sum would ordinarily be a race condition.\n        // But we inspect it only if we are not a stolen task, in which case we\n        // know that task assigning to p->result.left_sum has completed.\n        bool treat_as_stolen = my_is_right_child && (is_stolen_task() || my_body!=p->my_result.my_left_sum);\n        if( treat_as_stolen ) {\n            // Invocation is for right child that has been really stolen or needs to be virtually stolen\n            p->my_right_zombie = my_body = new( allocate_root() ) final_sum_type(my_body->my_body);\n            my_is_final = false;\n        }\n        task* next_task = NULL;\n        if( (my_is_right_child && !treat_as_stolen) || !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {\n            if( my_is_final )\n                (my_body->my_body)( my_range, final_scan_tag() );\n            else if( my_sum )\n                (my_body->my_body)( my_range, pre_scan_tag() );\n            if( my_sum )\n                *my_sum = my_body;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        } else {\n            sum_node_type* result;\n            if( my_parent_sum )\n                result = new(allocate_additional_child_of(*my_parent_sum)) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            else\n                result = new(task::allocate_root()) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*my_return_slot,my_sum,*result);\n            // Split off right child\n            start_scan& b = *new( c.allocate_child() ) start_scan( /*my_return_slot=*/result->my_right, *this, result );\n            b.my_is_right_child = true;\n            // Left child is recycling of *this.  Must recycle this before spawning b,\n            // otherwise b might complete and decrement c.ref_count() to zero, which\n            // would cause c.execute() to run prematurely.\n            recycle_as_child_of(c);\n            c.set_ref_count(2);\n            c.spawn(b);\n            my_sum = &result->my_left_sum;\n            my_return_slot = &result->my_left;\n            my_is_right_child = false;\n            next_task = this;\n            my_parent_sum = result;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n        return next_task;\n    }\n\n    template<typename Range, typename Value, typename Scan, typename ReverseJoin>\n    class lambda_scan_body : no_assign {\n        Value               my_sum;\n        const Value&        identity_element;\n        const Scan&         my_scan;\n        const ReverseJoin&  my_reverse_join;\n    public:\n        lambda_scan_body( const Value& identity, const Scan& scan, const ReverseJoin& rev_join)\n            : my_sum(identity)\n            , identity_element(identity)\n            , my_scan(scan)\n            , my_reverse_join(rev_join) {}\n\n        lambda_scan_body( lambda_scan_body& b, split )\n            : my_sum(b.identity_element)\n            , identity_element(b.identity_element)\n            , my_scan(b.my_scan)\n            , my_reverse_join(b.my_reverse_join) {}\n\n        template<typename Tag>\n        void operator()( const Range& r, Tag tag ) {\n            my_sum = my_scan(r, my_sum, tag);\n        }\n\n        void reverse_join( lambda_scan_body& a ) {\n            my_sum = my_reverse_join(a.my_sum, my_sum);\n        }\n\n        void assign( lambda_scan_body& b ) {\n            my_sum = b.my_sum;\n        }\n\n        Value result() const {\n            return my_sum;\n        }\n    };\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_scan_body_req Requirements on parallel_scan body\n    Class \\c Body implementing the concept of parallel_scan body must define:\n    - \\code Body::Body( Body&, split ); \\endcode    Splitting constructor.\n                                                    Split \\c b so that \\c this and \\c b can accumulate separately\n    - \\code Body::~Body(); \\endcode                 Destructor\n    - \\code void Body::operator()( const Range& r, pre_scan_tag ); \\endcode\n                                                    Preprocess iterations for range \\c r\n    - \\code void Body::operator()( const Range& r, final_scan_tag ); \\endcode\n                                                    Do final processing for iterations of range \\c r\n    - \\code void Body::reverse_join( Body& a ); \\endcode\n                                                    Merge preprocessing state of \\c a into \\c this, where \\c a was\n                                                    created earlier from \\c b by b's splitting constructor\n**/\n\n/** \\name parallel_scan\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_scan_body_req \"parallel_scan Body\". **/\n//@{\n\n//! Parallel prefix with default partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body ) {\n    internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel prefix with simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel prefix with auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel prefix with default partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,__TBB_DEFAULT_PARTITIONER());\n    return body.result();\n}\n\n//! Parallel prefix with simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join, const simple_partitioner& partitioner ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,partitioner);\n    return body.result();\n}\n\n//! Parallel prefix with auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join, const auto_partitioner& partitioner ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,partitioner);\n    return body.result();\n}\n\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_scan_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_sort.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_sort_H\n#define __TBB_parallel_sort_H\n\n#include \"parallel_for.h\"\n#include \"blocked_range.h\"\n#include \"internal/_range_iterator.h\"\n#include <algorithm>\n#include <iterator>\n#include <functional>\n#if __TBB_TASK_GROUP_CONTEXT\n    #include \"tbb_profiling.h\"\n#endif\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\nusing tbb::internal::no_assign;\n\n//! Range used in quicksort to split elements into subranges based on a value.\n/** The split operation selects a splitter and places all elements less than or equal\n    to the value in the first range and the remaining elements in the second range.\n    @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_range: private no_assign {\n\n    inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {\n        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )\n                                        : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );\n    }\n\n    inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {\n        size_t offset = range.size/8u;\n        return median_of_three(array,\n                               median_of_three(array, 0, offset, offset*2),\n                               median_of_three(array, offset*3, offset*4, offset*5),\n                               median_of_three(array, offset*6, offset*7, range.size - 1) );\n\n    }\n\n    size_t split_range( quick_sort_range& range ) {\n        using std::iter_swap;\n        RandomAccessIterator array = range.begin;\n        RandomAccessIterator key0 = range.begin;\n        size_t m = pseudo_median_of_nine(array, range);\n        if (m) iter_swap ( array, array+m );\n\n        size_t i=0;\n        size_t j=range.size;\n        // Partition interval [i+1,j-1] with key *key0.\n        for(;;) {\n            __TBB_ASSERT( i<j, NULL );\n            // Loop must terminate since array[l]==*key0.\n            do {\n                --j;\n                __TBB_ASSERT( i<=j, \"bad ordering relation?\" );\n            } while( comp( *key0, array[j] ));\n            do {\n                __TBB_ASSERT( i<=j, NULL );\n                if( i==j ) goto partition;\n                ++i;\n            } while( comp( array[i],*key0 ));\n            if( i==j ) goto partition;\n            iter_swap( array+i, array+j );\n        }\npartition:\n        // Put the partition key were it belongs\n        iter_swap( array+j, key0 );\n        // array[l..j) is less or equal to key.\n        // array(j..r) is greater or equal to key.\n        // array[j] is equal to key\n        i=j+1;\n        size_t new_range_size = range.size-i;\n        range.size = j;\n        return new_range_size;\n    }\n\npublic:\n\n    static const size_t grainsize = 500;\n    const Compare &comp;\n    size_t size;\n    RandomAccessIterator begin;\n\n    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :\n        comp(comp_), size(size_), begin(begin_) {}\n\n    bool empty() const {return size==0;}\n    bool is_divisible() const {return size>=grainsize;}\n\n    quick_sort_range( quick_sort_range& range, split )\n        : comp(range.comp)\n        , size(split_range(range))\n          // +1 accounts for the pivot element, which is at its correct place\n          // already and, therefore, is not included into subranges.\n        , begin(range.begin+range.size+1) {}\n};\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Body class used to test if elements in a range are presorted\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_pretest_body : no_assign {\n    const Compare &comp;\n\npublic:\n    quick_sort_pretest_body(const Compare &_comp) : comp(_comp) {}\n\n    void operator()( const blocked_range<RandomAccessIterator>& range ) const {\n        task &my_task = task::self();\n        RandomAccessIterator my_end = range.end();\n\n        int i = 0;\n        for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {\n            if ( i%64 == 0 && my_task.is_cancelled() ) break;\n\n            // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1\n            if ( comp( *(k), *(k-1) ) ) {\n                my_task.cancel_group_execution();\n                break;\n            }\n        }\n    }\n\n};\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Body class used to sort elements in a range that is smaller than the grainsize.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nstruct quick_sort_body {\n    void operator()( const quick_sort_range<RandomAccessIterator,Compare>& range ) const {\n        //SerialQuickSort( range.begin, range.size, range.comp );\n        std::sort( range.begin, range.begin + range.size, range.comp );\n    }\n};\n\n//! Wrapper method to initiate the sort by calling parallel_for.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context my_context(PARALLEL_SORT);\n    const int serial_cutoff = 9;\n\n    __TBB_ASSERT( begin + serial_cutoff < end, \"min_parallel_size is smaller than serial cutoff?\" );\n    RandomAccessIterator k = begin;\n    for ( ; k != begin + serial_cutoff; ++k ) {\n        if ( comp( *(k+1), *k ) ) {\n            goto do_parallel_quick_sort;\n        }\n    }\n\n    parallel_for( blocked_range<RandomAccessIterator>(k+1, end),\n                  quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),\n                  auto_partitioner(),\n                  my_context);\n\n    if (my_context.is_group_execution_cancelled())\ndo_parallel_quick_sort:\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),\n                      quick_sort_body<RandomAccessIterator,Compare>(),\n                      auto_partitioner() );\n}\n\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n/** \\page parallel_sort_iter_req Requirements on iterators for parallel_sort\n    Requirements on the iterator type \\c It and its value type \\c T for \\c parallel_sort:\n\n    - \\code void iter_swap( It a, It b ) \\endcode Swaps the values of the elements the given\n    iterators \\c a and \\c b are pointing to. \\c It should be a random access iterator.\n\n    - \\code bool Compare::operator()( const T& x, const T& y ) \\endcode True if x comes before y;\n**/\n\n/** \\name parallel_sort\n    See also requirements on \\ref parallel_sort_iter_req \"iterators for parallel_sort\". **/\n//@{\n\n//! Sorts the data in [begin,end) using the given comparator\n/** The compare function object is used for all comparisons between elements during sorting.\n    The compare object must define a bool operator() function.\n    @ingroup algorithms **/\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) {\n    const int min_parallel_size = 500;\n    if( end > begin ) {\n        if (end - begin < min_parallel_size) {\n            std::sort(begin, end, comp);\n        } else {\n            interface9::internal::parallel_quick_sort(begin, end, comp);\n        }\n    }\n}\n\n//! Sorts the data in [begin,end) with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename RandomAccessIterator>\ninline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) {\n    parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );\n}\n\n//! Sorts the data in rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in const rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(const Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in const rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(const Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in the range \\c [begin,end) with a default comparator \\c std::less<T>\n/** @ingroup algorithms **/\ntemplate<typename T>\ninline void parallel_sort( T * begin, T * end ) {\n    parallel_sort( begin, end, std::less< T >() );\n}\n//@}\n\n\n} // namespace tbb\n\n#endif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/parallel_while.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_while\n#define __TBB_parallel_while\n\n#include \"task.h\"\n#include <new>\n\nnamespace tbb {\n\ntemplate<typename Body>\nclass parallel_while;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    template<typename Stream, typename Body> class while_task;\n\n    //! For internal use only.\n    /** Executes one iteration of a while.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_iteration_task: public task {\n        const Body& my_body;\n        typename Body::argument_type my_value;\n        task* execute() __TBB_override {\n            my_body(my_value);\n            return NULL;\n        }\n        while_iteration_task( const typename Body::argument_type& value, const Body& body ) :\n            my_body(body), my_value(value)\n        {}\n        template<typename Body_> friend class while_group_task;\n        friend class tbb::parallel_while<Body>;\n    };\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_group_task: public task {\n        static const size_t max_arg_size = 4;\n        const Body& my_body;\n        size_t size;\n        typename Body::argument_type my_arg[max_arg_size];\n        while_group_task( const Body& body ) : my_body(body), size(0) {}\n        task* execute() __TBB_override {\n            typedef while_iteration_task<Body> iteration_type;\n            __TBB_ASSERT( size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type(my_arg[k],my_body);\n                if( ++k==size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n        template<typename Stream, typename Body_> friend class while_task;\n    };\n\n    //! For internal use only.\n    /** Gets block of iterations from a stream and packages them into a while_group_task.\n        @ingroup algorithms */\n    template<typename Stream, typename Body>\n    class while_task: public task {\n        Stream& my_stream;\n        const Body& my_body;\n        empty_task& my_barrier;\n        task* execute() __TBB_override {\n            typedef while_group_task<Body> block_type;\n            block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);\n            size_t k=0;\n            while( my_stream.pop_if_present(t.my_arg[k]) ) {\n                if( ++k==block_type::max_arg_size ) {\n                    // There might be more iterations.\n                    recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.size = k;\n                return &t;\n            }\n        }\n        while_task( Stream& stream, const Body& body, empty_task& barrier ) :\n            my_stream(stream),\n            my_body(body),\n            my_barrier(barrier)\n        {}\n        friend class tbb::parallel_while<Body>;\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Parallel iteration over a stream, with optional addition of more work.\n/** The Body b has the requirement: \\n\n        \"b(v)\"                      \\n\n        \"b.argument_type\"           \\n\n    where v is an argument_type\n    @ingroup algorithms */\ntemplate<typename Body>\nclass parallel_while: internal::no_copy {\npublic:\n    //! Construct empty non-running parallel while.\n    parallel_while() : my_body(NULL), my_barrier(NULL) {}\n\n    //! Destructor cleans up data members before returning.\n    ~parallel_while() {\n        if( my_barrier ) {\n            my_barrier->destroy(*my_barrier);\n            my_barrier = NULL;\n        }\n    }\n\n    //! Type of items\n    typedef typename Body::argument_type value_type;\n\n    //! Apply body.apply to each item in the stream.\n    /** A Stream s has the requirements \\n\n         \"S::value_type\"                \\n\n         \"s.pop_if_present(value) is convertible to bool */\n    template<typename Stream>\n    void run( Stream& stream, const Body& body );\n\n    //! Add a work item while running.\n    /** Should be executed only by body.apply or a thread spawned therefrom. */\n    void add( const value_type& item );\n\nprivate:\n    const Body* my_body;\n    empty_task* my_barrier;\n};\n\ntemplate<typename Body>\ntemplate<typename Stream>\nvoid parallel_while<Body>::run( Stream& stream, const Body& body ) {\n    using namespace internal;\n    empty_task& barrier = *new( task::allocate_root() ) empty_task();\n    my_body = &body;\n    my_barrier = &barrier;\n    my_barrier->set_ref_count(2);\n    while_task<Stream,Body>& w = *new( my_barrier->allocate_child() ) while_task<Stream,Body>( stream, body, barrier );\n    my_barrier->spawn_and_wait_for_all(w);\n    my_barrier->destroy(*my_barrier);\n    my_barrier = NULL;\n    my_body = NULL;\n}\n\ntemplate<typename Body>\nvoid parallel_while<Body>::add( const value_type& item ) {\n    __TBB_ASSERT(my_barrier,\"attempt to add to parallel_while that is not running\");\n    typedef internal::while_iteration_task<Body> iteration_type;\n    iteration_type& i = *new( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);\n    task::self().spawn( i );\n}\n\n} // namespace\n\n#endif /* __TBB_parallel_while */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/partitioner.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_partitioner_H\n#define __TBB_partitioner_H\n\n#ifndef __TBB_INITIAL_CHUNKS\n// initial task divisions per thread\n#define __TBB_INITIAL_CHUNKS 2\n#endif\n#ifndef __TBB_RANGE_POOL_CAPACITY\n// maximum number of elements in range pool\n#define __TBB_RANGE_POOL_CAPACITY 8\n#endif\n#ifndef __TBB_INIT_DEPTH\n// initial value for depth of range pool\n#define __TBB_INIT_DEPTH 5\n#endif\n#ifndef __TBB_DEMAND_DEPTH_ADD\n// when imbalance is found range splits this value times more\n#define __TBB_DEMAND_DEPTH_ADD 1\n#endif\n#ifndef __TBB_STATIC_THRESHOLD\n// necessary number of clocks for the work to be distributed among all tasks\n#define __TBB_STATIC_THRESHOLD 40000\n#endif\n#if __TBB_DEFINE_MIC\n#define __TBB_NONUNIFORM_TASK_CREATION 1\n#ifdef __TBB_time_stamp\n#define __TBB_USE_MACHINE_TIME_STAMPS 1\n#define __TBB_task_duration() __TBB_STATIC_THRESHOLD\n#endif // __TBB_machine_time_stamp\n#endif // __TBB_DEFINE_MIC\n\n#include \"task.h\"\n#include \"task_arena.h\"\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"internal/_template_helpers.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (push)\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\nclass auto_partitioner;\nclass simple_partitioner;\nclass static_partitioner;\nclass affinity_partitioner;\n\nnamespace interface9 {\n    namespace internal {\n        class affinity_partition_type;\n    }\n}\n\nnamespace internal { //< @cond INTERNAL\nsize_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();\n\n//! Defines entry point for affinity partitioner into tbb run-time library.\nclass affinity_partitioner_base_v3: no_copy {\n    friend class tbb::affinity_partitioner;\n    friend class tbb::interface9::internal::affinity_partition_type;\n    //! Array that remembers affinities of tree positions to affinity_id.\n    /** NULL if my_size==0. */\n    affinity_id* my_array;\n    //! Number of elements in my_array.\n    size_t my_size;\n    //! Zeros the fields.\n    affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}\n    //! Deallocates my_array.\n    ~affinity_partitioner_base_v3() {resize(0);}\n    //! Resize my_array.\n    /** Retains values if resulting size is the same. */\n    void __TBB_EXPORTED_METHOD resize( unsigned factor );\n};\n\n//! Provides backward-compatible methods for partition objects without affinity.\nclass partition_type_base {\npublic:\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    task* continue_after_execute_range() {return NULL;}\n    bool decide_whether_to_delay() {return false;}\n    void spawn_or_delay( bool, task& b ) {\n        task::spawn(b);\n    }\n};\n\ntemplate<typename Range, typename Body, typename Partitioner> class start_scan;\n\n} //< namespace internal @endcond\n\nnamespace serial {\nnamespace interface9 {\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\n}\n}\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal;\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\ntemplate<typename Range, typename Body, typename Partitioner> class start_reduce;\ntemplate<typename Range, typename Body, typename Partitioner> class start_deterministic_reduce;\n\n//! Join task node that contains shared flag for stealing feedback\nclass flag_task: public task {\npublic:\n    tbb::atomic<bool> my_child_stolen;\n    flag_task() { my_child_stolen = false; }\n    task* execute() __TBB_override { return NULL; }\n    static void mark_task_stolen(task &t) {\n        tbb::atomic<bool> &flag = static_cast<flag_task*>(t.parent())->my_child_stolen;\n#if TBB_USE_THREADING_TOOLS\n        // Threading tools respect lock prefix but report false-positive data-race via plain store\n        flag.fetch_and_store<release>(true);\n#else\n        flag = true;\n#endif //TBB_USE_THREADING_TOOLS\n    }\n    static bool is_peer_stolen(task &t) {\n        return static_cast<flag_task*>(t.parent())->my_child_stolen;\n    }\n};\n\n//! Depth is a relative depth of recursive division inside a range pool. Relative depth allows\n//! infinite absolute depth of the recursion for heavily unbalanced workloads with range represented\n//! by a number that cannot fit into machine word.\ntypedef unsigned char depth_t;\n\n//! Range pool stores ranges of type T in a circular buffer with MaxCapacity\ntemplate <typename T, depth_t MaxCapacity>\nclass range_vector {\n    depth_t my_head;\n    depth_t my_tail;\n    depth_t my_size;\n    depth_t my_depth[MaxCapacity]; // relative depths of stored ranges\n    tbb::aligned_space<T, MaxCapacity> my_pool;\n\npublic:\n    //! initialize via first range in pool\n    range_vector(const T& elem) : my_head(0), my_tail(0), my_size(1) {\n        my_depth[0] = 0;\n        new( static_cast<void *>(my_pool.begin()) ) T(elem);//TODO: std::move?\n    }\n    ~range_vector() {\n        while( !empty() ) pop_back();\n    }\n    bool empty() const { return my_size == 0; }\n    depth_t size() const { return my_size; }\n    //! Populates range pool via ranges up to max depth or while divisible\n    //! max_depth starts from 0, e.g. value 2 makes 3 ranges in the pool up to two 1/4 pieces\n    void split_to_fill(depth_t max_depth) {\n        while( my_size < MaxCapacity && is_divisible(max_depth) ) {\n            depth_t prev = my_head;\n            my_head = (my_head + 1) % MaxCapacity;\n            new(my_pool.begin()+my_head) T(my_pool.begin()[prev]); // copy TODO: std::move?\n            my_pool.begin()[prev].~T(); // instead of assignment\n            new(my_pool.begin()+prev) T(my_pool.begin()[my_head], split()); // do 'inverse' split\n            my_depth[my_head] = ++my_depth[prev];\n            my_size++;\n        }\n    }\n    void pop_back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_back() with empty size\");\n        my_pool.begin()[my_head].~T();\n        my_size--;\n        my_head = (my_head + MaxCapacity - 1) % MaxCapacity;\n    }\n    void pop_front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_front() with empty size\");\n        my_pool.begin()[my_tail].~T();\n        my_size--;\n        my_tail = (my_tail + 1) % MaxCapacity;\n    }\n    T& back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back() with empty size\");\n        return my_pool.begin()[my_head];\n    }\n    T& front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front() with empty size\");\n        return my_pool.begin()[my_tail];\n    }\n    //! similarly to front(), returns depth of the first range in the pool\n    depth_t front_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front_depth() with empty size\");\n        return my_depth[my_tail];\n    }\n    depth_t back_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back_depth() with empty size\");\n        return my_depth[my_head];\n    }\n    bool is_divisible(depth_t max_depth) {\n        return back_depth() < max_depth && back().is_divisible();\n    }\n};\n\n//! Provides default methods for partition objects and common algorithm blocks.\ntemplate <typename Partition>\nstruct partition_type_base {\n    typedef split split_type;\n    // decision makers\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    bool check_being_stolen(task &) { return false; } // part of old should_execute_range()\n    bool check_for_demand(task &) { return false; }\n    bool is_divisible() { return true; } // part of old should_execute_range()\n    depth_t max_depth() { return 0; }\n    void align_depth(depth_t) { }\n    template <typename Range> split_type get_split() { return split(); }\n    Partition& self() { return *static_cast<Partition*>(this); } // CRTP helper\n\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        start.run_body( range ); // simple partitioner goes always here\n    }\n\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        // The algorithm in a few words ([]-denotes calls to decision methods of partitioner):\n        // [If this task is stolen, adjust depth and divisions if necessary, set flag].\n        // If range is divisible {\n        //    Spread the work while [initial divisions left];\n        //    Create trap task [if necessary];\n        // }\n        // If not divisible or [max depth is reached], execute, else do the range pool part\n        if ( range.is_divisible() ) {\n            if ( self().is_divisible() ) {\n                do { // split until is divisible\n                    typename Partition::split_type split_obj = self().template get_split<Range>();\n                    start.offer_work( split_obj );\n                } while ( range.is_divisible() && self().is_divisible() );\n            }\n        }\n        self().work_balance(start, range);\n    }\n};\n\n//! Class determines whether template parameter has static boolean constant\n//! 'is_splittable_in_proportion' initialized with value of 'true' or not.\n/** If template parameter has such field that has been initialized with non-zero\n*  value then class field will be set to 'true', otherwise - 'false'\n*/\ntemplate <typename Range>\nclass is_splittable_in_proportion {\nprivate:\n    typedef char yes[1];\n    typedef char no[2];\n\n    template <typename range_type> static yes& decide(typename enable_if<range_type::is_splittable_in_proportion>::type *);\n    template <typename range_type> static no& decide(...);\npublic:\n    // equals to 'true' if and only if static const variable 'is_splittable_in_proportion' of template parameter\n    // initialized with the value of 'true'\n    static const bool value = (sizeof(decide<Range>(0)) == sizeof(yes));\n};\n\n//! Provides default splitting strategy for partition objects.\ntemplate <typename Partition>\nstruct adaptive_mode : partition_type_base<Partition> {\n    typedef Partition my_partition;\n    size_t my_divisor;\n    // For affinity_partitioner, my_divisor indicates the number of affinity array indices the task reserves.\n    // A task which has only one index must produce the right split without reserved index in order to avoid\n    // it to be overwritten in note_affinity() of the created (right) task.\n    // I.e. a task created deeper than the affinity array can remember must not save its affinity (LIFO order)\n    static const unsigned factor = 1;\n    adaptive_mode() : my_divisor(tbb::internal::get_initial_auto_partitioner_divisor() / 4 * my_partition::factor) {}\n    adaptive_mode(adaptive_mode &src, split) : my_divisor(do_split(src, split())) {}\n    /*! Override do_split methods in order to specify splitting strategy */\n    size_t do_split(adaptive_mode &src, split) {\n        return src.my_divisor /= 2u;\n    }\n};\n\n//! Provides proportional splitting strategy for partition objects\ntemplate <typename Partition>\nstruct proportional_mode : adaptive_mode<Partition> {\n    typedef Partition my_partition;\n    using partition_type_base<Partition>::self; // CRTP helper to get access to derived classes\n\n    proportional_mode() : adaptive_mode<Partition>() {}\n    proportional_mode(proportional_mode &src, split) : adaptive_mode<Partition>(src, split()) {}\n    proportional_mode(proportional_mode &src, const proportional_split& split_obj) { self().my_divisor = do_split(src, split_obj); }\n    size_t do_split(proportional_mode &src, const proportional_split& split_obj) {\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        size_t portion = size_t(float(src.my_divisor) * float(split_obj.right())\n                                / float(split_obj.left() + split_obj.right()) + 0.5f);\n#else\n        size_t portion = split_obj.right() * my_partition::factor;\n#endif\n        portion = (portion + my_partition::factor/2) & (0ul - my_partition::factor);\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        /** Corner case handling */\n        if (!portion)\n            portion = my_partition::factor;\n        else if (portion == src.my_divisor)\n            portion = src.my_divisor - my_partition::factor;\n#endif\n        src.my_divisor -= portion;\n        return portion;\n    }\n    bool is_divisible() { // part of old should_execute_range()\n        return self().my_divisor > my_partition::factor;\n    }\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n    template <typename Range>\n    proportional_split get_split() {\n        if (is_splittable_in_proportion<Range>::value) {\n            size_t size = self().my_divisor / my_partition::factor;\n#if __TBB_NONUNIFORM_TASK_CREATION\n            size_t right = (size + 2) / 3;\n#else\n            size_t right = size / 2;\n#endif\n            size_t left = size - right;\n            return proportional_split(left, right);\n        } else {\n            return proportional_split(1, 1);\n        }\n    }\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n};\n\nstatic size_t get_initial_partition_head() {\n    int current_index = tbb::this_task_arena::current_thread_index();\n    if (current_index == tbb::task_arena::not_initialized)\n        current_index = 0;\n    return size_t(current_index);\n}\n\n//! Provides default linear indexing of partitioner's sequence\ntemplate <typename Partition>\nstruct linear_affinity_mode : proportional_mode<Partition> {\n    size_t my_head;\n    size_t my_max_affinity;\n    using proportional_mode<Partition>::self;\n    linear_affinity_mode() : proportional_mode<Partition>(), my_head(get_initial_partition_head()),\n                             my_max_affinity(self().my_divisor) {}\n    linear_affinity_mode(linear_affinity_mode &src, split) : proportional_mode<Partition>(src, split())\n        , my_head((src.my_head + src.my_divisor) % src.my_max_affinity), my_max_affinity(src.my_max_affinity) {}\n    linear_affinity_mode(linear_affinity_mode &src, const proportional_split& split_obj) : proportional_mode<Partition>(src, split_obj)\n        , my_head((src.my_head + src.my_divisor) % src.my_max_affinity), my_max_affinity(src.my_max_affinity) {}\n    void set_affinity( task &t ) {\n        if( self().my_divisor )\n            t.set_affinity( affinity_id(my_head) + 1 );\n    }\n};\n\n/*! Determine work-balance phase implementing splitting & stealing actions */\ntemplate<class Mode>\nstruct dynamic_grainsize_mode : Mode {\n    using Mode::self;\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n    tbb::internal::machine_tsc_t my_dst_tsc;\n#endif\n    enum {\n        begin = 0,\n        run,\n        pass\n    } my_delay;\n    depth_t my_max_depth;\n    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;\n    dynamic_grainsize_mode(): Mode()\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(__TBB_INIT_DEPTH) {}\n    dynamic_grainsize_mode(dynamic_grainsize_mode& p, split)\n        : Mode(p, split())\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(pass)\n        , my_max_depth(p.my_max_depth) {}\n    dynamic_grainsize_mode(dynamic_grainsize_mode& p, const proportional_split& split_obj)\n        : Mode(p, split_obj)\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(p.my_max_depth) {}\n    bool check_being_stolen( task &t) { // part of old should_execute_range()\n        if( !(self().my_divisor / Mode::my_partition::factor) ) { // if not from the top P tasks of binary tree\n            self().my_divisor = 1; // TODO: replace by on-stack flag (partition_state's member)?\n            if( t.is_stolen_task() && t.parent()->ref_count() >= 2 ) { // runs concurrently with the left task\n#if __TBB_USE_OPTIONAL_RTTI\n                // RTTI is available, check whether the cast is valid\n                __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);\n                // correctness of the cast relies on avoiding the root task for which:\n                // - initial value of my_divisor != 0 (protected by separate assertion)\n                // - is_stolen_task() always returns false for the root task.\n#endif\n                flag_task::mark_task_stolen(t);\n                if( !my_max_depth ) my_max_depth++;\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        }\n        return false;\n    }\n    depth_t max_depth() { return my_max_depth; }\n    void align_depth(depth_t base) {\n        __TBB_ASSERT(base <= my_max_depth, 0);\n        my_max_depth -= base;\n    }\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        if( !range.is_divisible() || !self().max_depth() ) {\n            start.run_body( range ); // simple partitioner goes always here\n        }\n        else { // do range pool\n            internal::range_vector<Range, range_pool_size> range_pool(range);\n            do {\n                range_pool.split_to_fill(self().max_depth()); // fill range pool\n                if( self().check_for_demand( start ) ) {\n                    if( range_pool.size() > 1 ) {\n                        start.offer_work( range_pool.front(), range_pool.front_depth() );\n                        range_pool.pop_front();\n                        continue;\n                    }\n                    if( range_pool.is_divisible(self().max_depth()) ) // was not enough depth to fork a task\n                        continue; // note: next split_to_fill() should split range at least once\n                }\n                start.run_body( range_pool.back() );\n                range_pool.pop_back();\n            } while( !range_pool.empty() && !start.is_cancelled() );\n        }\n    }\n    bool check_for_demand( task &t ) {\n        if( pass == my_delay ) {\n            if( self().my_divisor > 1 ) // produce affinitized tasks while they have slot in array\n                return true; // do not do my_max_depth++ here, but be sure range_pool is splittable once more\n            else if( self().my_divisor && my_max_depth ) { // make balancing task\n                self().my_divisor = 0; // once for each task; depth will be decreased in align_depth()\n                return true;\n            }\n            else if( flag_task::is_peer_stolen(t) ) {\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        } else if( begin == my_delay ) {\n#ifndef __TBB_USE_MACHINE_TIME_STAMPS\n            my_delay = pass;\n#else\n            my_dst_tsc = __TBB_time_stamp() + __TBB_task_duration();\n            my_delay = run;\n        } else if( run == my_delay ) {\n            if( __TBB_time_stamp() < my_dst_tsc ) {\n                __TBB_ASSERT(my_max_depth > 0, NULL);\n                 my_max_depth--; // increase granularity since tasks seem having too small work\n                return false;\n            }\n            my_delay = pass;\n            return true;\n#endif // __TBB_USE_MACHINE_TIME_STAMPS\n        }\n        return false;\n    }\n};\n\nclass auto_partition_type: public dynamic_grainsize_mode<adaptive_mode<auto_partition_type> > {\npublic:\n    auto_partition_type( const auto_partitioner& )\n        : dynamic_grainsize_mode<adaptive_mode<auto_partition_type> >() {\n        my_divisor *= __TBB_INITIAL_CHUNKS;\n    }\n    auto_partition_type( auto_partition_type& src, split)\n        : dynamic_grainsize_mode<adaptive_mode<auto_partition_type> >(src, split()) {}\n    bool is_divisible() { // part of old should_execute_range()\n        if( my_divisor > 1 ) return true;\n        if( my_divisor && my_max_depth ) { // can split the task. TODO: on-stack flag instead\n            // keep same fragmentation while splitting for the local task pool\n            my_max_depth--;\n            my_divisor = 0; // decrease max_depth once per task\n            return true;\n        } else return false;\n    }\n    bool check_for_demand(task &t) {\n        if( flag_task::is_peer_stolen(t) ) {\n            my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n            return true;\n        } else return false;\n    }\n};\n\nclass simple_partition_type: public partition_type_base<simple_partition_type> {\npublic:\n    simple_partition_type( const simple_partitioner& ) {}\n    simple_partition_type( const simple_partition_type&, split ) {}\n    //! simplified algorithm\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        split_type split_obj = split(); // start.offer_work accepts split_type as reference\n        while( range.is_divisible() )\n            start.offer_work( split_obj );\n        start.run_body( range );\n    }\n};\n\nclass static_partition_type : public linear_affinity_mode<static_partition_type> {\npublic:\n    typedef proportional_split split_type;\n    static_partition_type( const static_partitioner& )\n        : linear_affinity_mode<static_partition_type>() {}\n    static_partition_type( static_partition_type& p, split )\n        : linear_affinity_mode<static_partition_type>(p, split()) {}\n    static_partition_type( static_partition_type& p, const proportional_split& split_obj )\n        : linear_affinity_mode<static_partition_type>(p, split_obj) {}\n};\n\nclass affinity_partition_type : public dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> > {\n    static const unsigned factor_power = 4; // TODO: get a unified formula based on number of computing units\n    tbb::internal::affinity_id* my_array;\npublic:\n    static const unsigned factor = 1 << factor_power; // number of slots in affinity array per task\n    typedef proportional_split split_type;\n    affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap )\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >() {\n        __TBB_ASSERT( (factor&(factor-1))==0, \"factor must be power of two\" );\n        ap.resize(factor);\n        my_array = ap.my_array;\n        my_max_depth = factor_power + 1;\n        __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );\n    }\n    affinity_partition_type(affinity_partition_type& p, split)\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >(p, split())\n        , my_array(p.my_array) {}\n    affinity_partition_type(affinity_partition_type& p, const proportional_split& split_obj)\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >(p, split_obj)\n        , my_array(p.my_array) {}\n    void set_affinity( task &t ) {\n        if( my_divisor ) {\n            if( !my_array[my_head] )\n                // TODO: consider new ideas with my_array for both affinity and static partitioner's, then code reuse\n                t.set_affinity( affinity_id(my_head / factor + 1) );\n            else\n                t.set_affinity( my_array[my_head] );\n        }\n    }\n    void note_affinity( task::affinity_id id ) {\n        if( my_divisor )\n            my_array[my_head] = id;\n    }\n};\n\n//! Backward-compatible partition for auto and affinity partition objects.\nclass old_auto_partition_type: public tbb::internal::partition_type_base {\n    size_t num_chunks;\n    static const size_t VICTIM_CHUNKS = 4;\npublic:\n    bool should_execute_range(const task &t) {\n        if( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )\n            num_chunks = VICTIM_CHUNKS;\n        return num_chunks==1;\n    }\n    old_auto_partition_type( const auto_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( const affinity_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( old_auto_partition_type& pt, split ) {\n        num_chunks = pt.num_chunks = (pt.num_chunks+1u) / 2u;\n    }\n};\n\n} // namespace interfaceX::internal\n//! @endcond\n} // namespace interfaceX\n\n//! A simple partitioner\n/** Divides the range until the range is not divisible.\n    @ingroup algorithms */\nclass simple_partitioner {\npublic:\n    simple_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_deterministic_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    class partition_type: public internal::partition_type_base {\n    public:\n        bool should_execute_range(const task& ) {return false;}\n        partition_type( const simple_partitioner& ) {}\n        partition_type( const partition_type&, split ) {}\n    };\n    // new implementation just extends existing interface\n    typedef interface9::internal::simple_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::simple_partition_type::split_type split_type;\n};\n\n//! An auto partitioner\n/** The range is initial divided into several large chunks.\n    Chunks are further subdivided into smaller pieces if demand detected and they are divisible.\n    @ingroup algorithms */\nclass auto_partitioner {\npublic:\n    auto_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::auto_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::auto_partition_type::split_type split_type;\n};\n\n//! A static partitioner\nclass static_partitioner {\npublic:\n    static_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_deterministic_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::static_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::static_partition_type::split_type split_type;\n};\n\n//! An affinity partitioner\nclass affinity_partitioner: internal::affinity_partitioner_base_v3 {\npublic:\n    affinity_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility - for parallel_scan only\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::affinity_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::affinity_partition_type::split_type split_type;\n};\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4244 is back\n#undef __TBB_INITIAL_CHUNKS\n#undef __TBB_RANGE_POOL_CAPACITY\n#undef __TBB_INIT_DEPTH\n#endif /* __TBB_partitioner_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/pipeline.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_pipeline_H\n#define __TBB_pipeline_H\n\n#include \"atomic.h\"\n#include \"task.h\"\n#include \"tbb_allocator.h\"\n#include <cstddef>\n\n#if __TBB_CPP11_TYPE_PROPERTIES_PRESENT || __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\n#include <type_traits>\n#endif\n\nnamespace tbb {\n\nclass pipeline;\nclass filter;\n\n//! @cond INTERNAL\nnamespace internal {\n\n// The argument for PIPELINE_VERSION should be an integer between 2 and 9\n#define __TBB_PIPELINE_VERSION(x) ((unsigned char)(x-2)<<1)\n\ntypedef unsigned long Token;\ntypedef long tokendiff_t;\nclass stage_task;\nclass input_buffer;\nclass pipeline_root_task;\nclass pipeline_cleaner;\n\n} // namespace internal\n\nnamespace interface6 {\n    template<typename T, typename U> class filter_t;\n\n    namespace internal {\n        class pipeline_proxy;\n    }\n}\n\n//! @endcond\n\n//! A stage in a pipeline.\n/** @ingroup algorithms */\nclass filter: internal::no_copy {\nprivate:\n    //! Value used to mark \"not in pipeline\"\n    static filter* not_in_pipeline() {return reinterpret_cast<filter*>(intptr_t(-1));}\nprotected:\n    //! The lowest bit 0 is for parallel vs. serial\n    static const unsigned char filter_is_serial = 0x1;\n\n    //! 4th bit distinguishes ordered vs unordered filters.\n    /** The bit was not set for parallel filters in TBB 2.1 and earlier,\n        but is_ordered() function always treats parallel filters as out of order. */\n    static const unsigned char filter_is_out_of_order = 0x1<<4;\n\n    //! 5th bit distinguishes thread-bound and regular filters.\n    static const unsigned char filter_is_bound = 0x1<<5;\n\n    //! 6th bit marks input filters emitting small objects\n    static const unsigned char filter_may_emit_null = 0x1<<6;\n\n    //! 7th bit defines exception propagation mode expected by the application.\n    static const unsigned char exact_exception_propagation =\n#if TBB_USE_CAPTURED_EXCEPTION\n            0x0;\n#else\n            0x1<<7;\n#endif /* TBB_USE_CAPTURED_EXCEPTION */\n\n    static const unsigned char current_version = __TBB_PIPELINE_VERSION(5);\n    static const unsigned char version_mask = 0x7<<1; // bits 1-3 are for version\npublic:\n    enum mode {\n        //! processes multiple items in parallel and in no particular order\n        parallel = current_version | filter_is_out_of_order,\n        //! processes items one at a time; all such filters process items in the same order\n        serial_in_order = current_version | filter_is_serial,\n        //! processes items one at a time and in no particular order\n        serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,\n        //! @deprecated use serial_in_order instead\n        serial = serial_in_order\n    };\nprotected:\n    explicit filter( bool is_serial_ ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    explicit filter( mode filter_mode ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    // signal end-of-input for concrete_filters\n    void __TBB_EXPORTED_METHOD set_end_of_input();\n\npublic:\n    //! True if filter is serial.\n    bool is_serial() const {\n        return bool( my_filter_mode & filter_is_serial );\n    }\n\n    //! True if filter must receive stream in order.\n    bool is_ordered() const {\n        return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;\n    }\n\n    //! True if filter is thread-bound.\n    bool is_bound() const {\n        return ( my_filter_mode & filter_is_bound )==filter_is_bound;\n    }\n\n    //! true if an input filter can emit null\n    bool object_may_be_null() {\n        return ( my_filter_mode & filter_may_emit_null ) == filter_may_emit_null;\n    }\n\n    //! Operate on an item from the input stream, and return item for output stream.\n    /** Returns NULL if filter is a sink. */\n    virtual void* operator()( void* item ) = 0;\n\n    //! Destroy filter.\n    /** If the filter was added to a pipeline, the pipeline must be destroyed first. */\n    virtual __TBB_EXPORTED_METHOD ~filter();\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Destroys item if pipeline was cancelled.\n    /** Required to prevent memory leaks.\n        Note it can be called concurrently even for serial filters.*/\n    virtual void finalize( void* /*item*/ ) {};\n#endif\n\nprivate:\n    //! Pointer to next filter in the pipeline.\n    filter* next_filter_in_pipeline;\n\n    //! has the filter not yet processed all the tokens it will ever see?\n    //  (pipeline has not yet reached end_of_input or this filter has not yet\n    //  seen the last token produced by input_filter)\n    bool has_more_work();\n\n    //! Buffer for incoming tokens, or NULL if not required.\n    /** The buffer is required if the filter is serial or follows a thread-bound one. */\n    internal::input_buffer* my_input_buffer;\n\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class pipeline;\n    friend class thread_bound_filter;\n\n    //! Storage for filter mode and dynamically checked implementation version.\n    const unsigned char my_filter_mode;\n\n    //! Pointer to previous filter in the pipeline.\n    filter* prev_filter_in_pipeline;\n\n    //! Pointer to the pipeline.\n    pipeline* my_pipeline;\n\n    //! Pointer to the next \"segment\" of filters, or NULL if not required.\n    /** In each segment, the first filter is not thread-bound but follows a thread-bound one. */\n    filter* next_segment;\n};\n\n//! A stage in a pipeline served by a user thread.\n/** @ingroup algorithms */\nclass thread_bound_filter: public filter {\npublic:\n    enum result_type {\n        // item was processed\n        success,\n        // item is currently not available\n        item_not_available,\n        // there are no more items to process\n        end_of_stream\n    };\nprotected:\n    explicit thread_bound_filter(mode filter_mode):\n         filter(static_cast<mode>(filter_mode | filter::filter_is_bound))\n    {\n        __TBB_ASSERT(filter_mode & filter::filter_is_serial, \"thread-bound filters must be serial\");\n    }\npublic:\n    //! If a data item is available, invoke operator() on that item.\n    /** This interface is non-blocking.\n        Returns 'success' if an item was processed.\n        Returns 'item_not_available' if no item can be processed now\n        but more may arrive in the future, or if token limit is reached.\n        Returns 'end_of_stream' if there are no more items to process. */\n    result_type __TBB_EXPORTED_METHOD try_process_item();\n\n    //! Wait until a data item becomes available, and invoke operator() on that item.\n    /** This interface is blocking.\n        Returns 'success' if an item was processed.\n        Returns 'end_of_stream' if there are no more items to process.\n        Never returns 'item_not_available', as it blocks until another return condition applies. */\n    result_type __TBB_EXPORTED_METHOD process_item();\n\nprivate:\n    //! Internal routine for item processing\n    result_type internal_process_item(bool is_blocking);\n};\n\n//! A processing pipeline that applies filters to items.\n/** @ingroup algorithms */\nclass pipeline {\npublic:\n    //! Construct empty pipeline.\n    __TBB_EXPORTED_METHOD pipeline();\n\n    /** Though the current implementation declares the destructor virtual, do not rely on this\n        detail.  The virtualness is deprecated and may disappear in future versions of TBB. */\n    virtual __TBB_EXPORTED_METHOD ~pipeline();\n\n    //! Add filter to end of pipeline.\n    void __TBB_EXPORTED_METHOD add_filter( filter& filter_ );\n\n    //! Run the pipeline to completion.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Run the pipeline to completion with user-supplied context.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );\n#endif\n\n    //! Remove all filters from the pipeline.\n    void __TBB_EXPORTED_METHOD clear();\n\nprivate:\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class filter;\n    friend class thread_bound_filter;\n    friend class internal::pipeline_cleaner;\n    friend class tbb::interface6::internal::pipeline_proxy;\n\n    //! Pointer to first filter in the pipeline.\n    filter* filter_list;\n\n    //! Pointer to location where address of next filter to be added should be stored.\n    filter* filter_end;\n\n    //! task who's reference count is used to determine when all stages are done.\n    task* end_counter;\n\n    //! Number of idle tokens waiting for input stage.\n    atomic<internal::Token> input_tokens;\n\n    //! Global counter of tokens\n    atomic<internal::Token> token_counter;\n\n    //! False until fetch_input returns NULL.\n    bool end_of_input;\n\n    //! True if the pipeline contains a thread-bound filter; false otherwise.\n    bool has_thread_bound_filters;\n\n    //! Remove filter from pipeline.\n    void remove_filter( filter& filter_ );\n\n    //! Not used, but retained to satisfy old export files.\n    void __TBB_EXPORTED_METHOD inject_token( task& self );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Does clean up if pipeline is cancelled or exception occurred\n    void clear_filters();\n#endif\n};\n\n//------------------------------------------------------------------------\n// Support for lambda-friendly parallel_pipeline interface\n//------------------------------------------------------------------------\n\nnamespace interface6 {\n\nnamespace internal {\n    template<typename T, typename U, typename Body> class concrete_filter;\n}\n\n//! input_filter control to signal end-of-input for parallel_pipeline\nclass flow_control {\n    bool is_pipeline_stopped;\n    flow_control() { is_pipeline_stopped = false; }\n    template<typename T, typename U, typename Body> friend class internal::concrete_filter;\npublic:\n    void stop() { is_pipeline_stopped = true; }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate<typename T> struct tbb_large_object {enum { value = sizeof(T) > sizeof(void *) }; };\n\n// Obtain type properties in one or another way\n#if   __TBB_CPP11_TYPE_PROPERTIES_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::is_trivially_copyable<T>::value }; };\n#elif __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; };\n#else\n// Explicitly list the types we wish to be placed as-is in the pipeline input_buffers.\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = false }; };\ntemplate<typename T> struct tbb_trivially_copyable <T*> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <unsigned short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <float> { enum { value = !tbb_large_object<float>::value }; };\ntemplate<> struct tbb_trivially_copyable <double> { enum { value = !tbb_large_object<double>::value }; };\n#endif // Obtaining type properties\n\ntemplate<typename T> struct is_large_object {enum { value = tbb_large_object<T>::value || !tbb_trivially_copyable<T>::value }; };\n\ntemplate<typename T, bool> class token_helper;\n\n// large object helper (uses tbb_allocator)\ntemplate<typename T>\nclass token_helper<T, true> {\n    public:\n    typedef typename tbb::tbb_allocator<T> allocator;\n    typedef T* pointer;\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        pointer output_t = allocator().allocate(1);\n        return new (output_t) T(source);\n    }\n    static value_type & token(pointer & t) { return *t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *) ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token(pointer token) {\n        allocator().destroy(token);\n        allocator().deallocate(token,1);\n    }\n};\n\n// pointer specialization\ntemplate<typename T>\nclass token_helper<T*, false > {\n    public:\n    typedef T* pointer;\n    typedef T* value_type;\n    static pointer create_token(const value_type & source) { return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *)ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token( pointer /*token*/) {}\n};\n\n// small object specialization (converts void* to the correct type, passes objects directly.)\ntemplate<typename T>\nclass token_helper<T, false> {\n    typedef union {\n        T actual_value;\n        void * void_overlay;\n    } type_to_void_ptr_map;\n    public:\n    typedef T pointer;  // not really a pointer in this case.\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = NULL;\n        mymap.actual_value = ref;\n        return mymap.void_overlay;\n    }\n    static pointer cast_from_void_ptr(void * ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = ref;\n        return mymap.actual_value;\n    }\n    static void destroy_token( pointer /*token*/) {}\n};\n\ntemplate<typename T, typename U, typename Body>\nclass concrete_filter: public tbb::filter {\n    const Body& my_body;\n    typedef token_helper<T,is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n    typedef token_helper<U,is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    void* operator()(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));\n        t_helper::destroy_token(temp_input);\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\n    void finalize(void * input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n// input\ntemplate<typename U, typename Body>\nclass concrete_filter<void,U,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<U, is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    void* operator()(void*) __TBB_override {\n        flow_control control;\n        u_pointer output_u = u_helper::create_token(my_body(control));\n        if(control.is_pipeline_stopped) {\n            u_helper::destroy_token(output_u);\n            set_end_of_input();\n            return NULL;\n        }\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) :\n        filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),\n        my_body(body)\n    {}\n};\n\ntemplate<typename T, typename Body>\nclass concrete_filter<T,void,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<T, is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n\n    void* operator()(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        my_body(t_helper::token(temp_input));\n        t_helper::destroy_token(temp_input);\n        return NULL;\n    }\n    void finalize(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\ntemplate<typename Body>\nclass concrete_filter<void,void,Body>: public filter {\n    const Body& my_body;\n\n    /** Override privately because it is always called virtually */\n    void* operator()(void*) __TBB_override {\n        flow_control control;\n        my_body(control);\n        void* output = control.is_pipeline_stopped ? NULL : (void*)(intptr_t)-1;\n        return output;\n    }\npublic:\n    concrete_filter(filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n//! The class that represents an object of the pipeline for parallel_pipeline().\n/** It primarily serves as RAII class that deletes heap-allocated filter instances. */\nclass pipeline_proxy {\n    tbb::pipeline my_pipe;\npublic:\n    pipeline_proxy( const filter_t<void,void>& filter_chain );\n    ~pipeline_proxy() {\n        while( filter* f = my_pipe.filter_list )\n            delete f; // filter destructor removes it from the pipeline\n    }\n    tbb::pipeline* operator->() { return &my_pipe; }\n};\n\n//! Abstract base class that represents a node in a parse tree underlying a filter_t.\n/** These nodes are always heap-allocated and can be shared by filter_t objects. */\nclass filter_node: tbb::internal::no_copy {\n    /** Count must be atomic because it is hidden state for user, but might be shared by threads. */\n    tbb::atomic<intptr_t> ref_count;\nprotected:\n    filter_node() {\n        ref_count = 0;\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        ++(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\npublic:\n    //! Add concrete_filter to pipeline\n    virtual void add_to( pipeline& ) = 0;\n    //! Increment reference count\n    void add_ref() {++ref_count;}\n    //! Decrement reference count and delete if it becomes zero.\n    void remove_ref() {\n        __TBB_ASSERT(ref_count>0,\"ref_count underflow\");\n        if( --ref_count==0 )\n            delete this;\n    }\n    virtual ~filter_node() {\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        --(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\n};\n\n//! Node in parse tree representing result of make_filter.\ntemplate<typename T, typename U, typename Body>\nclass filter_node_leaf: public filter_node  {\n    const tbb::filter::mode mode;\n    const Body body;\n    void add_to( pipeline& p ) __TBB_override {\n        concrete_filter<T,U,Body>* f = new concrete_filter<T,U,Body>(mode,body);\n        p.add_filter( *f );\n    }\npublic:\n    filter_node_leaf( tbb::filter::mode m, const Body& b ) : mode(m), body(b) {}\n};\n\n//! Node in parse tree representing join of two filters.\nclass filter_node_join: public filter_node {\n    friend class filter_node; // to suppress GCC 3.2 warnings\n    filter_node& left;\n    filter_node& right;\n    ~filter_node_join() {\n       left.remove_ref();\n       right.remove_ref();\n    }\n    void add_to( pipeline& p ) __TBB_override {\n        left.add_to(p);\n        right.add_to(p);\n    }\npublic:\n    filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {\n       left.add_ref();\n       right.add_ref();\n    }\n};\n\n} // namespace internal\n//! @endcond\n\n//! Create a filter to participate in parallel_pipeline\ntemplate<typename T, typename U, typename Body>\nfilter_t<T,U> make_filter(tbb::filter::mode mode, const Body& body) {\n    return new internal::filter_node_leaf<T,U,Body>(mode, body);\n}\n\ntemplate<typename T, typename V, typename U>\nfilter_t<T,U> operator& (const filter_t<T,V>& left, const filter_t<V,U>& right) {\n    __TBB_ASSERT(left.root,\"cannot use default-constructed filter_t as left argument of '&'\");\n    __TBB_ASSERT(right.root,\"cannot use default-constructed filter_t as right argument of '&'\");\n    return new internal::filter_node_join(*left.root,*right.root);\n}\n\n//! Class representing a chain of type-safe pipeline filters\ntemplate<typename T, typename U>\nclass filter_t {\n    typedef internal::filter_node filter_node;\n    filter_node* root;\n    filter_t( filter_node* root_ ) : root(root_) {\n        root->add_ref();\n    }\n    friend class internal::pipeline_proxy;\n    template<typename T_, typename U_, typename Body>\n    friend filter_t<T_,U_> make_filter(tbb::filter::mode, const Body& );\n    template<typename T_, typename V_, typename U_>\n    friend filter_t<T_,U_> operator& (const filter_t<T_,V_>& , const filter_t<V_,U_>& );\npublic:\n    // TODO: add move-constructors, move-assignment, etc. where C++11 is available.\n    filter_t() : root(NULL) {}\n    filter_t( const filter_t<T,U>& rhs ) : root(rhs.root) {\n        if( root ) root->add_ref();\n    }\n    template<typename Body>\n    filter_t( tbb::filter::mode mode, const Body& body ) :\n        root( new internal::filter_node_leaf<T,U,Body>(mode, body) ) {\n        root->add_ref();\n    }\n\n    void operator=( const filter_t<T,U>& rhs ) {\n        // Order of operations below carefully chosen so that reference counts remain correct\n        // in unlikely event that remove_ref throws exception.\n        filter_node* old = root;\n        root = rhs.root;\n        if( root ) root->add_ref();\n        if( old ) old->remove_ref();\n    }\n    ~filter_t() {\n        if( root ) root->remove_ref();\n    }\n    void clear() {\n        // Like operator= with filter_t() on right side.\n        if( root ) {\n            filter_node* old = root;\n            root = NULL;\n            old->remove_ref();\n        }\n    }\n};\n\ninline internal::pipeline_proxy::pipeline_proxy( const filter_t<void,void>& filter_chain ) : my_pipe() {\n    __TBB_ASSERT( filter_chain.root, \"cannot apply parallel_pipeline to default-constructed filter_t\"  );\n    filter_chain.root->add_to(my_pipe);\n}\n\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain\n#if __TBB_TASK_GROUP_CONTEXT\n    , tbb::task_group_context& context\n#endif\n    ) {\n    internal::pipeline_proxy pipe(filter_chain);\n    // tbb::pipeline::run() is called via the proxy\n    pipe->run(max_number_of_live_tokens\n#if __TBB_TASK_GROUP_CONTEXT\n              , context\n#endif\n    );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain) {\n    tbb::task_group_context context;\n    parallel_pipeline(max_number_of_live_tokens, filter_chain, context);\n}\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n} // interface6\n\nusing interface6::flow_control;\nusing interface6::filter_t;\nusing interface6::make_filter;\nusing interface6::parallel_pipeline;\n\n} // tbb\n\n#endif /* __TBB_pipeline_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/queuing_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_queuing_mutex_H\n#define __TBB_queuing_mutex_H\n\n#include <cstring>\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing mutex with local-only spinning.\n/** @ingroup synchronization */\nclass queuing_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            mutex = NULL;\n#if TBB_USE_ASSERT\n            internal::poison_pointer(next);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_mutex& m ) {\n            initialize();\n            acquire(m);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void __TBB_EXPORTED_METHOD acquire( queuing_mutex& m );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool __TBB_EXPORTED_METHOD try_acquire( queuing_mutex& m );\n\n        //! Release lock.\n        void __TBB_EXPORTED_METHOD release();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_mutex* mutex;\n\n        //! The pointer to the next competitor for a mutex\n        scoped_lock *next;\n\n        //! The local spin-wait variable\n        /** Inverted (0 - blocked, 1 - acquired the mutex) for the sake of\n            zero-initialization.  Defining it as an entire word instead of\n            a byte seems to help performance slightly. */\n        uintptr_t going;\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/queuing_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_queuing_rw_mutex_H\n#define __TBB_queuing_rw_mutex_H\n\n#include <cstring>\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing reader-writer mutex with local-only spinning.\n/** Adapted from Krieger, Stumm, et al. pseudocode at\n    http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93\n    @ingroup synchronization */\nclass queuing_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_rw_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL\n    ~queuing_rw_mutex() {\n#if TBB_USE_ASSERT\n        __TBB_ASSERT( !q_tail, \"destruction of an acquired mutex\");\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            my_mutex = NULL;\n#if TBB_USE_ASSERT\n            my_state = 0xFF; // Set to invalid state\n            internal::poison_pointer(my_next);\n            internal::poison_pointer(my_prev);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_rw_mutex& m, bool write=true ) {\n            initialize();\n            acquire(m,write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool try_acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Release lock.\n        void release();\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer();\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_rw_mutex* my_mutex;\n\n        //! The pointer to the previous and next competitors for a mutex\n        scoped_lock *__TBB_atomic my_prev, *__TBB_atomic my_next;\n\n        typedef unsigned char state_t;\n\n        //! State of the request: reader, writer, active reader, other service states\n        atomic<state_t> my_state;\n\n        //! The local spin-wait variable\n        /** Corresponds to \"spin\" in the pseudocode but inverted for the sake of zero-initialization */\n        unsigned char __TBB_atomic my_going;\n\n        //! A tiny internal lock\n        unsigned char my_internal_lock;\n\n        //! Acquire the internal lock\n        void acquire_internal_lock();\n\n        //! Try to acquire the internal lock\n        /** Returns true if lock was successfully acquired. */\n        bool try_acquire_internal_lock();\n\n        //! Release the internal lock\n        void release_internal_lock();\n\n        //! Wait for internal lock to be released\n        void wait_for_release_of_internal_lock();\n\n        //! A helper function\n        void unblock_or_wait_on_internal_lock( uintptr_t );\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/reader_writer_lock.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_reader_writer_lock_H\n#define __TBB_reader_writer_lock_H\n\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"atomic.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! Writer-preference reader-writer lock with local-only spinning on readers.\n/** Loosely adapted from Mellor-Crummey and Scott pseudocode at\n    http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp\n    @ingroup synchronization */\n    class reader_writer_lock : tbb::internal::no_copy {\n public:\n    friend class scoped_lock;\n    friend class scoped_lock_read;\n    //! Status type for nodes associated with lock instances\n    /** waiting_nonblocking: the wait state for nonblocking lock\n          instances; for writes, these transition straight to active\n          states; for reads, these are unused.\n\n        waiting: the start and spin state for all lock instances; these will\n          transition to active state when appropriate.  Non-blocking write locks\n          transition from this state to waiting_nonblocking immediately.\n\n        active: the active state means that the lock instance holds\n          the lock; it will transition to invalid state during node deletion\n\n        invalid: the end state for all nodes; this is set in the\n          destructor so if we encounter this state, we are looking at\n          memory that has already been freed\n\n        The state diagrams below describe the status transitions.\n        Single arrows indicate that the thread that owns the node is\n        responsible for the transition; double arrows indicate that\n        any thread could make the transition.\n\n        State diagram for scoped_lock status:\n\n        waiting ----------> waiting_nonblocking\n          |     _____________/       |\n          V    V                     V\n        active -----------------> invalid\n\n        State diagram for scoped_lock_read status:\n\n        waiting\n          |\n          V\n        active ----------------->invalid\n\n    */\n    enum status_t { waiting_nonblocking, waiting, active, invalid };\n\n    //! Constructs a new reader_writer_lock\n    reader_writer_lock() {\n        internal_construct();\n    }\n\n    //! Destructs a reader_writer_lock object\n    ~reader_writer_lock() {\n        internal_destroy();\n    }\n\n    //! The scoped lock pattern for write locks\n    /** Scoped locks help avoid the common problem of forgetting to release the lock.\n        This type also serves as the node for queuing locks. */\n    class scoped_lock : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire write lock on the passed-in lock\n        scoped_lock(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the write lock\n        ~scoped_lock() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock* next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock that is not holding lock\n        scoped_lock();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n   };\n\n    //! The scoped lock pattern for read locks\n    class scoped_lock_read : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire read lock on the passed-in lock\n        scoped_lock_read(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the read lock\n        ~scoped_lock_read() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock_read *next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock_read that is not holding lock\n        scoped_lock_read();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n    };\n\n    //! Acquires the reader_writer_lock for write.\n    /** If the lock is currently held in write mode by another\n        context, the writer will block by spinning on a local\n        variable.  Exceptions thrown: improper_lock The context tries\n        to acquire a reader_writer_lock that it already has write\n        ownership of.*/\n    void __TBB_EXPORTED_METHOD lock();\n\n    //! Tries to acquire the reader_writer_lock for write.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  If the lock\n        is already held by this acquiring context, try_lock() returns\n        false. */\n    bool __TBB_EXPORTED_METHOD try_lock();\n\n    //! Acquires the reader_writer_lock for read.\n    /** If the lock is currently held by a writer, this reader will\n        block and wait until the writers are done.  Exceptions thrown:\n        improper_lock The context tries to acquire a\n        reader_writer_lock that it already has write ownership of. */\n    void __TBB_EXPORTED_METHOD lock_read();\n\n    //! Tries to acquire the reader_writer_lock for read.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  */\n    bool __TBB_EXPORTED_METHOD try_lock_read();\n\n    //! Releases the reader_writer_lock\n    void __TBB_EXPORTED_METHOD unlock();\n\n private:\n    void __TBB_EXPORTED_METHOD internal_construct();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n    //! Attempts to acquire write lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    bool start_write(scoped_lock *);\n    //! Sets writer_head to w and attempts to unblock\n    void set_next_writer(scoped_lock *w);\n    //! Relinquishes write lock to next waiting writer or group of readers\n    void end_write(scoped_lock *);\n    //! Checks if current thread holds write lock\n    bool is_current_writer();\n\n    //! Attempts to acquire read lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    void start_read(scoped_lock_read *);\n    //! Unblocks pending readers\n    void unblock_readers();\n    //! Relinquishes read lock by decrementing counter; last reader wakes pending writer\n    void end_read();\n\n    //! The list of pending readers\n    atomic<scoped_lock_read*> reader_head;\n    //! The list of pending writers\n    atomic<scoped_lock*> writer_head;\n    //! The last node in the list of pending writers\n    atomic<scoped_lock*> writer_tail;\n    //! Writer that owns the mutex; tbb_thread::id() otherwise.\n    tbb_thread::id my_current_writer;\n    //! Status of mutex\n    atomic<uintptr_t> rdr_count_and_flags; // used with __TBB_AtomicOR, which assumes uintptr_t\n};\n\n} // namespace interface5\n\nusing interface5::reader_writer_lock;\n\n} // namespace tbb\n\n#endif /* __TBB_reader_writer_lock_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/recursive_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_recursive_mutex_H\n#define __TBB_recursive_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n//! Mutex that allows recursive mutex acquisition.\n/** Mutex that allows recursive mutex acquisition.\n    @ingroup synchronization */\nclass recursive_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired recursive_mutex.\n    recursive_mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n        internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        pthread_mutexattr_t mtx_attr;\n        int error_code = pthread_mutexattr_init( &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutexattr_init failed\");\n\n        pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );\n        error_code = pthread_mutex_init( &impl, &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_init failed\");\n\n        pthread_mutexattr_destroy( &mtx_attr );\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~recursive_mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a recursive_mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire( mutex );\n#else\n            my_mutex = &mutex;\n            mutex.lock();\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given recursive_mutex.\n        bool try_acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire( mutex );\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current recursive_mutex to work\n        recursive_mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( recursive_mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( recursive_mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class recursive_mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = false;\n\n    // C++0x compatibility interface\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n    } state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_recursive_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/runtime_loader.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_runtime_loader_H\n#define __TBB_runtime_loader_H\n\n#if ! TBB_PREVIEW_RUNTIME_LOADER\n    #error Set TBB_PREVIEW_RUNTIME_LOADER to include runtime_loader.h\n#endif\n\n#include \"tbb_stddef.h\"\n#include <climits>\n\n#if _MSC_VER\n    #if ! __TBB_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment( linker, \"/nodefaultlib:tbb_debug.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy_debug.lib\" )\n        #else\n            #pragma comment( linker, \"/nodefaultlib:tbb.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy.lib\" )\n        #endif\n    #endif\n#endif\n\nnamespace tbb {\n\nnamespace interface6 {\n\n//! Load TBB at runtime.\n/*!\n\n\\b Usage:\n\nIn source code:\n\n\\code\n#include \"tbb/runtime_loader.h\"\n\nchar const * path[] = { \"<install dir>/lib/ia32\", NULL };\ntbb::runtime_loader loader( path );\n\n// Now use TBB.\n\\endcode\n\nLink with \\c tbbproxy.lib (or \\c libtbbproxy.a) instead of \\c tbb.lib (\\c libtbb.dylib,\n\\c libtbb.so).\n\nTBB library will be loaded at runtime from \\c <install dir>/lib/ia32 directory.\n\n\\b Attention:\n\nAll \\c runtime_loader objects (in the same module, i.e. exe or dll) share some global state.\nThe most noticeable piece of global state is loaded TBB library.\nThere are some implications:\n\n    -   Only one TBB library can be loaded per module.\n\n    -   If one object has already loaded TBB library, another object will not load TBB.\n        If the loaded TBB library is suitable for the second object, both will use TBB\n        cooperatively, otherwise the second object will report an error.\n\n    -   \\c runtime_loader objects will not work (correctly) in parallel due to absence of\n        synchronization.\n\n*/\n\nclass runtime_loader : tbb::internal::no_copy {\n\n    public:\n\n        //! Error mode constants.\n        enum error_mode {\n            em_status,     //!< Save status of operation and continue.\n            em_throw,      //!< Throw an exception of tbb::runtime_loader::error_code type.\n            em_abort       //!< Print message to \\c stderr and call \\c abort().\n        }; // error_mode\n\n        //! Error codes.\n        enum error_code {\n            ec_ok,         //!< No errors.\n            ec_bad_call,   //!< Invalid function call (e. g. load() called when TBB is already loaded).\n            ec_bad_arg,    //!< Invalid argument passed.\n            ec_bad_lib,    //!< Invalid library found (e. g. \\c TBB_runtime_version symbol not found).\n            ec_bad_ver,    //!< TBB found but version is not suitable.\n            ec_no_lib      //!< No suitable TBB library found.\n        }; // error_code\n\n        //! Initialize object but do not load TBB.\n        runtime_loader( error_mode mode = em_abort );\n\n        //! Initialize object and load TBB.\n        /*!\n            See load() for details.\n\n            If error mode is \\c em_status, call status() to check whether TBB was loaded or not.\n        */\n        runtime_loader(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX,                //!< Maximal suitable version of TBB.\n            error_mode   mode    = em_abort                //!< Error mode for this object.\n        );\n\n        //! Destroy object.\n        ~runtime_loader();\n\n        //! Load TBB.\n        /*!\n            The method searches the directories specified in \\c path[] array for the TBB library.\n            When the library is found, it is loaded and its version is checked. If the version is\n            not suitable, the library is unloaded, and the search continues.\n\n            \\b Note:\n\n            For security reasons, avoid using relative directory names. For example, never load\n            TBB from current (\\c \".\"), parent (\\c \"..\") or any other relative directory (like\n            \\c \"lib\" ). Use only absolute directory names (e. g. \"/usr/local/lib\").\n\n            For the same security reasons, avoid using system default directories (\\c \"\") on\n            Windows. (See http://www.microsoft.com/technet/security/advisory/2269637.mspx for\n            details.)\n\n            Neglecting these rules may cause your program to execute 3-rd party malicious code.\n\n            \\b Errors:\n                -   \\c ec_bad_call - TBB already loaded by this object.\n                -   \\c ec_bad_arg - \\p min_ver and/or \\p max_ver negative or zero,\n                    or \\p min_ver > \\p max_ver.\n                -   \\c ec_bad_ver - TBB of unsuitable version already loaded by another object.\n                -   \\c ec_no_lib - No suitable library found.\n        */\n        error_code\n        load(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX                 //!< Maximal suitable version of TBB.\n\n        );\n\n\n        //! Report status.\n        /*!\n            If error mode is \\c em_status, the function returns status of the last operation.\n        */\n        error_code status();\n\n    private:\n\n        error_mode const my_mode;\n        error_code       my_status;\n        bool             my_loaded;\n\n}; // class runtime_loader\n\n} // namespace interface6\n\nusing interface6::runtime_loader;\n\n} // namespace tbb\n\n#endif /* __TBB_runtime_loader_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/scalable_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_scalable_allocator_H\n#define __TBB_scalable_allocator_H\n/** @file */\n\n#include <stddef.h> /* Need ptrdiff_t and size_t from here. */\n#if !_MSC_VER\n#include <stdint.h> /* Need intptr_t from here. */\n#endif\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (push)\n    #pragma warning (disable: 991)\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n#if _MSC_VER >= 1400\n#define __TBB_EXPORTED_FUNC   __cdecl\n#else\n#define __TBB_EXPORTED_FUNC\n#endif\n\n/** The \"malloc\" analogue to allocate block of memory of size bytes.\n  * @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_malloc (size_t size);\n\n/** The \"free\" analogue to discard a previously allocated piece of memory.\n    @ingroup memory_allocation */\nvoid   __TBB_EXPORTED_FUNC scalable_free (void* ptr);\n\n/** The \"realloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_realloc (void* ptr, size_t size);\n\n/** The \"calloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size);\n\n/** The \"posix_memalign\" analogue.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_posix_memalign (void** memptr, size_t alignment, size_t size);\n\n/** The \"_aligned_malloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment);\n\n/** The \"_aligned_realloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_realloc (void* ptr, size_t size, size_t alignment);\n\n/** The \"_aligned_free\" analogue.\n    @ingroup memory_allocation */\nvoid __TBB_EXPORTED_FUNC scalable_aligned_free (void* ptr);\n\n/** The analogue of _msize/malloc_size/malloc_usable_size.\n    Returns the usable size of a memory block previously allocated by scalable_*,\n    or 0 (zero) if ptr does not point to such a block.\n    @ingroup memory_allocation */\nsize_t __TBB_EXPORTED_FUNC scalable_msize (void* ptr);\n\n/* Results for scalable_allocation_* functions */\ntypedef enum {\n    TBBMALLOC_OK,\n    TBBMALLOC_INVALID_PARAM,\n    TBBMALLOC_UNSUPPORTED,\n    TBBMALLOC_NO_MEMORY,\n    TBBMALLOC_NO_EFFECT\n} ScalableAllocationResult;\n\n/* Setting TBB_MALLOC_USE_HUGE_PAGES environment variable to 1 enables huge pages.\n   scalable_allocation_mode call has priority over environment variable. */\ntypedef enum {\n    TBBMALLOC_USE_HUGE_PAGES,  /* value turns using huge pages on and off */\n    /* deprecated, kept for backward compatibility only */\n    USE_HUGE_PAGES = TBBMALLOC_USE_HUGE_PAGES,\n    /* try to limit memory consumption value Bytes, clean internal buffers\n       if limit is exceeded, but not prevents from requesting memory from OS */\n    TBBMALLOC_SET_SOFT_HEAP_LIMIT\n} AllocationModeParam;\n\n/** Set TBB allocator-specific allocation modes.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value);\n\ntypedef enum {\n    /* Clean internal allocator buffers for all threads.\n       Returns TBBMALLOC_NO_EFFECT if no buffers cleaned,\n       TBBMALLOC_OK if some memory released from buffers. */\n    TBBMALLOC_CLEAN_ALL_BUFFERS,\n    /* Clean internal allocator buffer for current thread only.\n       Return values same as for TBBMALLOC_CLEAN_ALL_BUFFERS. */\n    TBBMALLOC_CLEAN_THREAD_BUFFERS\n} ScalableAllocationCmd;\n\n/** Call TBB allocator-specific commands.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* __cplusplus */\n\n#ifdef __cplusplus\n\n//! The namespace rml contains components of low-level memory pool interface.\nnamespace rml {\nclass MemoryPool;\n\ntypedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);\n// returns non-zero in case of error\ntypedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);\n\n/*\nMemPoolPolicy extension must be compatible with such structure fields layout\n\nstruct MemPoolPolicy {\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n    size_t       granularity;   // granularity of pAlloc allocations\n};\n*/\n\nstruct MemPoolPolicy {\n    enum {\n        TBBMALLOC_POOL_VERSION = 1\n    };\n\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n                 // granularity of pAlloc allocations. 0 means default used.\n    size_t       granularity;\n    int          version;\n                 // all memory consumed at 1st pAlloc call and never returned,\n                 // no more pAlloc calls after 1st\n    unsigned     fixedPool : 1,\n                 // memory consumed but returned only at pool termination\n                 keepAllMemory : 1,\n                 reserved : 30;\n\n    MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,\n                  size_t granularity_ = 0, bool fixedPool_ = false,\n                  bool keepAllMemory_ = false) :\n        pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),\n        fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),\n        reserved(0) {}\n};\n\n// enums have same values as appropriate enums from ScalableAllocationResult\n// TODO: use ScalableAllocationResult in pool_create directly\nenum MemPoolError {\n    // pool created successfully\n    POOL_OK = TBBMALLOC_OK,\n    // invalid policy parameters found\n    INVALID_POLICY = TBBMALLOC_INVALID_PARAM,\n     // requested pool policy is not supported by allocator library\n    UNSUPPORTED_POLICY = TBBMALLOC_UNSUPPORTED,\n    // lack of memory during pool creation\n    NO_MEMORY = TBBMALLOC_NO_MEMORY,\n    // action takes no effect\n    NO_EFFECT = TBBMALLOC_NO_EFFECT\n};\n\nMemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,\n                            rml::MemoryPool **pool);\n\nbool  pool_destroy(MemoryPool* memPool);\nvoid *pool_malloc(MemoryPool* memPool, size_t size);\nvoid *pool_realloc(MemoryPool* memPool, void *object, size_t size);\nvoid *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);\nvoid *pool_aligned_realloc(MemoryPool* mPool, void *ptr, size_t size, size_t alignment);\nbool  pool_reset(MemoryPool* memPool);\nbool  pool_free(MemoryPool *memPool, void *object);\nMemoryPool *pool_identify(void *object);\n\n} // namespace rml\n\n#include <new>      /* To use new with the placement argument */\n\n/* Ensure that including this header does not cause implicit linkage with TBB */\n#ifndef __TBB_NO_IMPLICIT_LINKAGE\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #include \"tbb_stddef.h\"\n    #undef  __TBB_NO_IMPLICIT_LINKAGE\n#else\n    #include \"tbb_stddef.h\"\n#endif\n\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if TBB_USE_EXCEPTIONS\n// forward declaration is for inlining prevention\ntemplate<typename E> __TBB_NOINLINE( void throw_exception(const E &e) );\n#endif\n\n// keep throw in a separate function to prevent code bloat\ntemplate<typename E>\nvoid throw_exception(const E &e) {\n    __TBB_THROW(e);\n}\n\n} // namespace internal\n//! @endcond\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass scalable_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n\n    scalable_allocator() throw() {}\n    scalable_allocator( const scalable_allocator& ) throw() {}\n    template<typename U> scalable_allocator(const scalable_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ =0 ) {\n        pointer p = static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );\n        if (!p)\n            internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n\n    //! Free previously allocated block of memory\n    void deallocate( pointer p, size_type ) {\n        scalable_free( p );\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);\n        return (absolutemax > 0 ? absolutemax : 1);\n    }\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) { ::new((void*)(p)) value_type( std::move( value ) ); }\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif /* warning 4100 is back */\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass scalable_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#if _MSC_VER\n    #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)\n        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n    #endif\n\n    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment(lib, \"tbbmalloc_debug.lib\")\n        #else\n            #pragma comment(lib, \"tbbmalloc.lib\")\n        #endif\n    #endif\n\n\n#endif\n\n#endif /* __cplusplus */\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (pop)\n#endif /* ICC 11.0 warning 991 is back */\n\n#endif /* __TBB_scalable_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/spin_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_spin_mutex_H\n#define __TBB_spin_mutex_H\n\n#include <cstddef>\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n//! A lock that occupies a single byte.\n/** A spin_mutex is a spin mutex that fits in a single byte.\n    It should be used only for locking short critical sections\n    (typically less than 20 instructions) when fairness is not an issue.\n    If zero-initialized, the mutex is considered unheld.\n    @ingroup synchronization */\nclass spin_mutex : internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    spin_mutex() : flag(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        spin_mutex* my_mutex;\n\n        //! Value to store into spin_mutex::flag to unlock the mutex.\n        /** This variable is no longer used. Instead, 0 and 1 are used to\n            represent that the lock is free and acquired, respectively.\n            We keep the member variable here to ensure backward compatibility */\n        __TBB_Flag my_unlock_value;\n\n        //! Like acquire, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_acquire( spin_mutex& m );\n\n        //! Like try_acquire, but with ITT instrumentation.\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( spin_mutex& m );\n\n        //! Like release, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class spin_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( spin_mutex& m ) : my_unlock_value(0) {\n            internal::suppress_unused_warning(my_unlock_value);\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            my_mutex=NULL;\n            internal_acquire(m);\n#else\n            my_mutex=&m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Acquire lock.\n        void acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_acquire(m);\n#else\n            my_mutex = &m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            return internal_try_acquire(m);\n#else\n            bool result = __TBB_TryLockByte(m.flag);\n            if( result )\n                my_mutex = &m;\n            return result;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_release();\n#else\n            __TBB_UnlockByte(my_mutex->flag);\n            my_mutex = NULL;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n                internal_release();\n#else\n                __TBB_UnlockByte(my_mutex->flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            }\n        }\n    };\n\n    //! Internal constructor with ITT instrumentation.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n        __TBB_LockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n        return __TBB_TryLockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n        __TBB_UnlockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS */\n    }\n\n    friend class scoped_lock;\n}; // end of spin_mutex\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)\n\n} // namespace tbb\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n#include \"internal/_x86_eliding_mutex_impl.h\"\n#endif\n\nnamespace tbb {\n//! A cross-platform spin mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\ntypedef interface7::internal::padded_mutex<interface7::internal::x86_eliding_mutex,false> speculative_spin_mutex;\n#else\ntypedef interface7::internal::padded_mutex<spin_mutex,false> speculative_spin_mutex;\n#endif\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_spin_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/spin_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_spin_rw_mutex_H\n#define __TBB_spin_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n#if __TBB_TSX_AVAILABLE\nnamespace interface8 { namespace internal {\n    class x86_rtm_rw_mutex;\n}}\n#endif\n\nclass spin_rw_mutex_v3;\ntypedef spin_rw_mutex_v3 spin_rw_mutex;\n\n//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference\n/** @ingroup synchronization */\nclass spin_rw_mutex_v3 : internal::mutex_copy_deprecated_and_disabled {\n    //! @cond INTERNAL\n\n    //! Internal acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_acquire_writer();\n\n    //! Out of line code for releasing a write lock.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_release_writer();\n\n    //! Internal acquire read lock.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader();\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade();\n\n    //! Out of line code for downgrading a writer to a reader.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_downgrade();\n\n    //! Internal release read lock.\n    void __TBB_EXPORTED_METHOD internal_release_reader();\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer();\n\n    //! Internal try_acquire read lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_reader();\n\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    spin_rw_mutex_v3() : state(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Destructor asserts if the mutex is acquired, i.e. state is zero.\n    ~spin_rw_mutex_v3() {\n        __TBB_ASSERT( !state, \"destruction of an acquired mutex\");\n    };\n#endif /* TBB_USE_ASSERT */\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n#if __TBB_TSX_AVAILABLE\n        friend class tbb::interface8::internal::x86_rtm_rw_mutex;\n        // helper methods for x86_rtm_rw_mutex\n        spin_rw_mutex *internal_get_mutex() const { return mutex; }\n        void internal_set_mutex(spin_rw_mutex* m) { mutex = m; }\n#endif\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : mutex(NULL), is_writer(false) {}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            is_writer = write;\n            mutex = &m;\n            if( write ) mutex->internal_acquire_writer();\n            else        mutex->internal_acquire_reader();\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( !is_writer, \"not a reader\" );\n            is_writer = true;\n            return mutex->internal_upgrade();\n        }\n\n        //! Release lock.\n        void release() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            spin_rw_mutex *m = mutex;\n            mutex = NULL;\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            if( is_writer ) m->internal_release_writer();\n            else            m->internal_release_reader();\n#else\n            if( is_writer ) __TBB_AtomicAND( &m->state, READERS );\n            else            __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( is_writer, \"not a writer\" );\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            mutex->internal_downgrade();\n#else\n            __TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            is_writer = false;\n            return true;\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            bool result;\n            is_writer = write;\n            result = write? m.internal_try_acquire_writer()\n                          : m.internal_try_acquire_reader();\n            if( result )\n                mutex = &m;\n            return result;\n        }\n\n    protected:\n\n        //! The pointer to the current mutex that is held, or NULL if no mutex is held.\n        spin_rw_mutex* mutex;\n\n        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.\n        /** Not defined if not holding a lock. */\n        bool is_writer;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire writer lock\n    void lock() {internal_acquire_writer();}\n\n    //! Try acquiring writer lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {return internal_try_acquire_writer();}\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        if( state&WRITER ) internal_release_writer();\n        else               internal_release_reader();\n#else\n        if( state&WRITER ) __TBB_AtomicAND( &state, READERS );\n        else               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    // Methods for reader locks that resemble ISO C++0x compatibility methods.\n\n    //! Acquire reader lock\n    void lock_read() {internal_acquire_reader();}\n\n    //! Try acquiring reader lock (non-blocking)\n    /** Return true if reader lock acquired; false otherwise. */\n    bool try_lock_read() {return internal_try_acquire_reader();}\n\nprotected:\n    typedef intptr_t state_t;\n    static const state_t WRITER = 1;\n    static const state_t WRITER_PENDING = 2;\n    static const state_t READERS = ~(WRITER | WRITER_PENDING);\n    static const state_t ONE_READER = 4;\n    static const state_t BUSY = WRITER | READERS;\n    //! State of lock\n    /** Bit 0 = writer is holding lock\n        Bit 1 = request by a writer to acquire lock (hint to readers to wait)\n        Bit 2..N = number of readers holding lock */\n    state_t state;\n\nprivate:\n    void __TBB_EXPORTED_METHOD internal_construct();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)\n\n} // namespace tbb\n\n#if __TBB_TSX_AVAILABLE\n#include \"internal/_x86_rtm_rw_mutex_impl.h\"\n#endif\n\nnamespace tbb {\nnamespace interface8 {\n//! A cross-platform spin reader/writer mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_rw_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.\n    @ingroup synchronization */\n#if __TBB_TSX_AVAILABLE\ntypedef interface7::internal::padded_mutex<tbb::interface8::internal::x86_rtm_rw_mutex,true> speculative_spin_rw_mutex;\n#else\ntypedef interface7::internal::padded_mutex<tbb::spin_rw_mutex,true> speculative_spin_rw_mutex;\n#endif\n}  // namespace interface8\n\nusing interface8::speculative_spin_rw_mutex;\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_rw_mutex)\n} // namespace tbb\n#endif /* __TBB_spin_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/task.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_H\n#define __TBB_task_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <climits>\n\ntypedef struct ___itt_caller *__itt_caller;\n\nnamespace tbb {\n\nclass task;\nclass task_list;\nclass task_group_context;\n\n// MSVC does not allow taking the address of a member that was defined\n// privately in task_base and made public in class task via a using declaration.\n#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)\n#define __TBB_TASK_BASE_ACCESS public\n#else\n#define __TBB_TASK_BASE_ACCESS private\n#endif\n\nnamespace internal { //< @cond INTERNAL\n\n    class allocate_additional_child_of_proxy: no_assign {\n        //! No longer used, but retained for binary layout compatibility.  Always NULL.\n        task* self;\n        task& parent;\n    public:\n        explicit allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    struct cpu_ctl_env_space { int space[sizeof(internal::uint64_t)/sizeof(int)]; };\n} //< namespace internal @endcond\n\nnamespace interface5 {\n    namespace internal {\n        //! Base class for methods that became static in TBB 3.0.\n        /** TBB's evolution caused the \"this\" argument for several methods to become obsolete.\n            However, for backwards binary compatibility, the new methods need distinct names,\n            otherwise the One Definition Rule would be broken.  Hence the new methods are\n            defined in this private base class, and then exposed in class task via\n            using declarations. */\n        class task_base: tbb::internal::no_copy {\n        __TBB_TASK_BASE_ACCESS:\n            friend class tbb::task;\n\n            //! Schedule task for execution when a worker becomes available.\n            static void spawn( task& t );\n\n            //! Spawn multiple tasks and clear list.\n            static void spawn( task_list& list );\n\n            //! Like allocate_child, except that task's parent becomes \"t\", not this.\n            /** Typically used in conjunction with schedule_to_reexecute to implement while loops.\n               Atomically increments the reference count of t.parent() */\n            static tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( task& t ) {\n                return tbb::internal::allocate_additional_child_of_proxy(t);\n            }\n\n            //! Destroy a task.\n            /** Usually, calling this method is unnecessary, because a task is\n                implicitly deleted after its execute() method runs.  However,\n                sometimes a task needs to be explicitly deallocated, such as\n                when a root task is used as the parent in spawn_and_wait_for_all. */\n            static void __TBB_EXPORTED_FUNC destroy( task& victim );\n        };\n    } // internal\n} // interface5\n\n//! @cond INTERNAL\nnamespace internal {\n\n    class scheduler: no_copy {\n    public:\n        //! For internal use only\n        virtual void spawn( task& first, task*& next ) = 0;\n\n        //! For internal use only\n        virtual void wait_for_all( task& parent, task* child ) = 0;\n\n        //! For internal use only\n        virtual void spawn_root_and_wait( task& first, task*& next ) = 0;\n\n        //! Pure virtual destructor;\n        //  Have to have it just to shut up overzealous compilation warnings\n        virtual ~scheduler() = 0;\n\n        //! For internal use only\n        virtual void enqueue( task& t, void* reserved ) = 0;\n    };\n\n    //! A reference count\n    /** Should always be non-negative.  A signed type is used so that underflow can be detected. */\n    typedef intptr_t reference_count;\n\n    //! An id as used for specifying affinity.\n    typedef unsigned short affinity_id;\n\n#if __TBB_TASK_ISOLATION\n    //! A tag for task isolation.\n    typedef intptr_t isolation_tag;\n    const isolation_tag no_isolation = 0;\n#endif /* __TBB_TASK_ISOLATION */\n\n#if __TBB_TASK_GROUP_CONTEXT\n    class generic_scheduler;\n\n    struct context_list_node_t {\n        context_list_node_t *my_prev,\n                            *my_next;\n    };\n\n    class allocate_root_with_context_proxy: no_assign {\n        task_group_context& my_context;\n    public:\n        allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    class allocate_root_proxy: no_assign {\n    public:\n        static task& __TBB_EXPORTED_FUNC allocate( size_t size );\n        static void __TBB_EXPORTED_FUNC free( task& );\n    };\n\n    class allocate_continuation_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    class allocate_child_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    //! Memory prefix to a task object.\n    /** This class is internal to the library.\n        Do not reference it directly, except within the library itself.\n        Fields are ordered in way that preserves backwards compatibility and yields good packing on\n        typical 32-bit and 64-bit platforms. New fields should be added at the beginning for\n        backward compatibility with accesses to the task prefix inlined into application code. To\n        prevent ODR violation, the class shall have the same layout in all application translation\n        units. If some fields are conditional (e.g. enabled by preview macros) and might get\n        skipped, use reserved fields to adjust the layout.\n\n        In case task prefix size exceeds 32 or 64 bytes on IA32 and Intel64 architectures\n        correspondingly, consider dynamic setting of task_alignment and task_prefix_reservation_size\n        based on the maximal operand size supported by the current CPU.\n\n        @ingroup task_scheduling */\n    class task_prefix {\n    private:\n        friend class tbb::task;\n        friend class tbb::interface5::internal::task_base;\n        friend class tbb::task_list;\n        friend class internal::scheduler;\n        friend class internal::allocate_root_proxy;\n        friend class internal::allocate_child_proxy;\n        friend class internal::allocate_continuation_proxy;\n        friend class internal::allocate_additional_child_of_proxy;\n\n#if __TBB_TASK_ISOLATION\n        //! The tag used for task isolation.\n        isolation_tag isolation;\n#else\n        intptr_t reserved_space_for_task_isolation_tag;\n#endif /* __TBB_TASK_ISOLATION */\n\n#if __TBB_TASK_GROUP_CONTEXT\n        //! Shared context that is used to communicate asynchronous state changes\n        /** Currently it is used to broadcast cancellation requests generated both\n            by users and as the result of unhandled exceptions in the task::execute()\n            methods. */\n        task_group_context  *context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        //! The scheduler that allocated the task, or NULL if the task is big.\n        /** Small tasks are pooled by the scheduler that allocated the task.\n            If a scheduler needs to free a small task allocated by another scheduler,\n            it returns the task to that other scheduler.  This policy avoids\n            memory space blowup issues for memory allocators that allocate from\n            thread-specific pools. */\n        scheduler* origin;\n\n#if __TBB_TASK_PRIORITY\n        union {\n#endif /* __TBB_TASK_PRIORITY */\n        //! Obsolete. The scheduler that owns the task.\n        /** Retained only for the sake of backward binary compatibility.\n            Still used by inline methods in the task.h header. **/\n        scheduler* owner;\n\n#if __TBB_TASK_PRIORITY\n        //! Pointer to the next offloaded lower priority task.\n        /** Used to maintain a list of offloaded tasks inside the scheduler. **/\n        task* next_offloaded;\n        };\n#endif /* __TBB_TASK_PRIORITY */\n\n        //! The task whose reference count includes me.\n        /** In the \"blocking style\" of programming, this field points to the parent task.\n            In the \"continuation-passing style\" of programming, this field points to the\n            continuation of the parent. */\n        tbb::task* parent;\n\n        //! Reference count used for synchronization.\n        /** In the \"continuation-passing style\" of programming, this field is\n            the difference of the number of allocated children minus the\n            number of children that have completed.\n            In the \"blocking style\" of programming, this field is one more than the difference. */\n        __TBB_atomic reference_count ref_count;\n\n        //! Obsolete. Used to be scheduling depth before TBB 2.2\n        /** Retained only for the sake of backward binary compatibility.\n            Not used by TBB anymore. **/\n        int depth;\n\n        //! A task::state_type, stored as a byte for compactness.\n        /** This state is exposed to users via method task::state(). */\n        unsigned char state;\n\n        //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.\n        /** 0x0 -> version 1.0 task\n            0x1 -> version >=2.1 task\n            0x10 -> task was enqueued\n            0x20 -> task_proxy\n            0x40 -> task has live ref_count\n            0x80 -> a stolen task */\n        unsigned char extra_state;\n\n        affinity_id affinity;\n\n        //! \"next\" field for list of task\n        tbb::task* next;\n\n        //! The task corresponding to this task_prefix.\n        tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}\n    };\n\n} // namespace internal\n//! @endcond\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#if __TBB_TASK_PRIORITY\nnamespace internal {\n    static const int priority_stride_v4 = INT_MAX / 4;\n}\n\nenum priority_t {\n    priority_normal = internal::priority_stride_v4 * 2,\n    priority_low = priority_normal - internal::priority_stride_v4,\n    priority_high = priority_normal + internal::priority_stride_v4\n};\n\n#endif /* __TBB_TASK_PRIORITY */\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    class tbb_exception;\n#else\n    namespace internal {\n        class tbb_exception_ptr;\n    }\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\nclass task_scheduler_init;\nnamespace interface7 { class task_arena; }\n\n//! Used to form groups of tasks\n/** @ingroup task_scheduling\n    The context services explicit cancellation requests from user code, and unhandled\n    exceptions intercepted during tasks execution. Intercepting an exception results\n    in generating internal cancellation requests (which is processed in exactly the\n    same way as external ones).\n\n    The context is associated with one or more root tasks and defines the cancellation\n    group that includes all the descendants of the corresponding root task(s). Association\n    is established when a context object is passed as an argument to the task::allocate_root()\n    method. See task_group_context::task_group_context for more details.\n\n    The context can be bound to another one, and other contexts can be bound to it,\n    forming a tree-like structure: parent -> this -> children. Arrows here designate\n    cancellation propagation direction. If a task in a cancellation group is cancelled\n    all the other tasks in this group and groups bound to it (as children) get cancelled too.\n\n    IMPLEMENTATION NOTE:\n    When adding new members to task_group_context or changing types of existing ones,\n    update the size of both padding buffers (_leading_padding and _trailing_padding)\n    appropriately. See also VERSIONING NOTE at the constructor definition below. **/\nclass task_group_context : internal::no_copy {\nprivate:\n    friend class internal::generic_scheduler;\n    friend class task_scheduler_init;\n    friend class interface7::task_arena;\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    typedef tbb_exception exception_container_type;\n#else\n    typedef internal::tbb_exception_ptr exception_container_type;\n#endif\n\n    enum version_traits_word_layout {\n        traits_offset = 16,\n        version_mask = 0xFFFF,\n        traits_mask = 0xFFFFul << traits_offset\n    };\n\npublic:\n    enum kind_type {\n        isolated,\n        bound\n    };\n\n    enum traits_type {\n        exact_exception = 0x0001ul << traits_offset,\n#if __TBB_FP_CONTEXT\n        fp_settings     = 0x0002ul << traits_offset,\n#endif\n        concurrent_wait = 0x0004ul << traits_offset,\n#if TBB_USE_CAPTURED_EXCEPTION\n        default_traits = 0\n#else\n        default_traits = exact_exception\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n    };\n\nprivate:\n    enum state {\n        may_have_children = 1,\n        // the following enumerations must be the last, new 2^x values must go above\n        next_state_value, low_unused_state_bit = (next_state_value-1)*2\n    };\n\n    union {\n        //! Flavor of this context: bound or isolated.\n        // TODO: describe asynchronous use, and whether any memory semantics are needed\n        __TBB_atomic kind_type my_kind;\n        uintptr_t _my_kind_aligner;\n    };\n\n    //! Pointer to the context of the parent cancellation group. NULL for isolated contexts.\n    task_group_context *my_parent;\n\n    //! Used to form the thread specific list of contexts without additional memory allocation.\n    /** A context is included into the list of the current thread when its binding to\n        its parent happens. Any context can be present in the list of one thread only. **/\n    internal::context_list_node_t my_node;\n\n    //! Used to set and maintain stack stitching point for Intel Performance Tools.\n    __itt_caller itt_caller;\n\n    //! Leading padding protecting accesses to frequently used members from false sharing.\n    /** Read accesses to the field my_cancellation_requested are on the hot path inside\n        the scheduler. This padding ensures that this field never shares the same cache\n        line with a local variable that is frequently written to. **/\n    char _leading_padding[internal::NFS_MaxLineSize\n                          - 2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)\n                          - sizeof(__itt_caller)\n#if __TBB_FP_CONTEXT\n                          - sizeof(internal::cpu_ctl_env_space)\n#endif\n                         ];\n\n#if __TBB_FP_CONTEXT\n    //! Space for platform-specific FPU settings.\n    /** Must only be accessed inside TBB binaries, and never directly in user\n        code or inline methods. */\n    internal::cpu_ctl_env_space my_cpu_ctl_env;\n#endif\n\n    //! Specifies whether cancellation was requested for this task group.\n    uintptr_t my_cancellation_requested;\n\n    //! Version for run-time checks and behavioral traits of the context.\n    /** Version occupies low 16 bits, and traits (zero or more ORed enumerators\n        from the traits_type enumerations) take the next 16 bits.\n        Original (zeroth) version of the context did not support any traits. **/\n    uintptr_t my_version_and_traits;\n\n    //! Pointer to the container storing exception being propagated across this task group.\n    exception_container_type *my_exception;\n\n    //! Scheduler instance that registered this context in its thread specific list.\n    internal::generic_scheduler *my_owner;\n\n    //! Internal state (combination of state flags, currently only may_have_children).\n    uintptr_t my_state;\n\n#if __TBB_TASK_PRIORITY\n    //! Priority level of the task group (in normalized representation)\n    intptr_t my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Decription of algorithm for scheduler based instrumentation.\n    internal::string_index my_name;\n\n    //! Trailing padding protecting accesses to frequently used members from false sharing\n    /** \\sa _leading_padding **/\n    char _trailing_padding[internal::NFS_MaxLineSize - 2 * sizeof(uintptr_t) - 2 * sizeof(void*)\n#if __TBB_TASK_PRIORITY\n                           - sizeof(intptr_t)\n#endif /* __TBB_TASK_PRIORITY */\n                           - sizeof(internal::string_index)\n                          ];\n\npublic:\n    //! Default & binding constructor.\n    /** By default a bound context is created. That is this context will be bound\n        (as child) to the context of the task calling task::allocate_root(this_context)\n        method. Cancellation requests passed to the parent context are propagated\n        to all the contexts bound to it. Similarly priority change is propagated\n        from the parent context to its children.\n\n        If task_group_context::isolated is used as the argument, then the tasks associated\n        with this context will never be affected by events in any other context.\n\n        Creating isolated contexts involve much less overhead, but they have limited\n        utility. Normally when an exception occurs in an algorithm that has nested\n        ones running, it is desirably to have all the nested algorithms cancelled\n        as well. Such a behavior requires nested algorithms to use bound contexts.\n\n        There is one good place where using isolated algorithms is beneficial. It is\n        a master thread. That is if a particular algorithm is invoked directly from\n        the master thread (not from a TBB task), supplying it with explicitly\n        created isolated context will result in a faster algorithm startup.\n\n        VERSIONING NOTE:\n        Implementation(s) of task_group_context constructor(s) cannot be made\n        entirely out-of-line because the run-time version must be set by the user\n        code. This will become critically important for binary compatibility, if\n        we ever have to change the size of the context object.\n\n        Boosting the runtime version will also be necessary if new data fields are\n        introduced in the currently unused padding areas and these fields are updated\n        by inline methods. **/\n    task_group_context ( kind_type relation_with_parent = bound,\n                         uintptr_t t = default_traits )\n        : my_kind(relation_with_parent)\n        , my_version_and_traits(3 | t)\n        , my_name(internal::CUSTOM_CTX)\n    {\n        init();\n    }\n\n    // Custom constructor for instrumentation of tbb algorithm\n    task_group_context ( internal::string_index name )\n        : my_kind(bound)\n        , my_version_and_traits(3 | default_traits)\n        , my_name(name)\n    {\n        init();\n    }\n\n    // Do not introduce standalone unbind method since it will break state propagation assumptions\n    __TBB_EXPORTED_METHOD ~task_group_context ();\n\n    //! Forcefully reinitializes the context after the task tree it was associated with is completed.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the context's parent if it is set. **/\n    void __TBB_EXPORTED_METHOD reset ();\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise.\n\n        Note that canceling never fails. When false is returned, it just means that\n        another thread (or this one) has already sent cancellation request to this\n        context or to one of its ancestors (if this context is bound). It is guaranteed\n        that when this method is concurrently called on the same not yet cancelled\n        context, true will be returned by one and only one invocation. **/\n    bool __TBB_EXPORTED_METHOD cancel_group_execution ();\n\n    //! Returns true if the context received cancellation request.\n    bool __TBB_EXPORTED_METHOD is_group_execution_cancelled () const;\n\n    //! Records the pending exception, and cancels the task group.\n    /** May be called only from inside a catch-block. If the context is already\n        cancelled, does nothing.\n        The method brings the task group associated with this context exactly into\n        the state it would be in, if one of its tasks threw the currently pending\n        exception during its execution. In other words, it emulates the actions\n        of the scheduler's dispatch loop exception handler. **/\n    void __TBB_EXPORTED_METHOD register_pending_exception ();\n\n#if __TBB_FP_CONTEXT\n    //! Captures the current FPU control settings to the context.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the FPU control settings of the context's parent. **/\n    void __TBB_EXPORTED_METHOD capture_fp_settings ();\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group\n    void set_priority ( priority_t );\n\n    //! Retrieves current priority of the current task group\n    priority_t priority () const;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Returns the context's trait\n    uintptr_t traits() const { return my_version_and_traits & traits_mask; }\n\nprotected:\n    //! Out-of-line part of the constructor.\n    /** Singled out to ensure backward binary compatibility of the future versions. **/\n    void __TBB_EXPORTED_METHOD init ();\n\nprivate:\n    friend class task;\n    friend class internal::allocate_root_with_context_proxy;\n\n    static const kind_type binding_required = bound;\n    static const kind_type binding_completed = kind_type(bound+1);\n    static const kind_type detached = kind_type(binding_completed+1);\n    static const kind_type dying = kind_type(detached+1);\n\n    //! Propagates any state change detected to *this, and as an optimisation possibly also upward along the heritage line.\n    template <typename T>\n    void propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );\n\n    //! Registers this context with the local scheduler and binds it to its parent context\n    void bind_to ( internal::generic_scheduler *local_sched );\n\n    //! Registers this context with the local scheduler\n    void register_with ( internal::generic_scheduler *local_sched );\n\n#if __TBB_FP_CONTEXT\n    //! Copies FPU control setting from another context\n    // TODO: Consider adding #else stub in order to omit #if sections in other code\n    void copy_fp_settings( const task_group_context &src );\n#endif /* __TBB_FP_CONTEXT */\n}; // class task_group_context\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Base class for user-defined tasks.\n/** @ingroup task_scheduling */\nclass task: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {\n\n    //! Set reference count\n    void __TBB_EXPORTED_METHOD internal_set_ref_count( int count );\n\n    //! Decrement reference count and return its new value.\n    internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();\n\nprotected:\n    //! Default constructor.\n    task() {prefix().extra_state=1;}\n\npublic:\n    //! Destructor.\n    virtual ~task() {}\n\n    //! Should be overridden by derived classes.\n    virtual task* execute() = 0;\n\n    //! Enumeration of task states that the scheduler considers.\n    enum state_type {\n        //! task is running, and will be destroyed after method execute() completes.\n        executing,\n        //! task to be rescheduled.\n        reexecute,\n        //! task is in ready pool, or is going to be put there, or was just taken off.\n        ready,\n        //! task object is freshly allocated or recycled.\n        allocated,\n        //! task object is on free list, or is going to be put there, or was just taken off.\n        freed,\n        //! task to be recycled as continuation\n        recycle\n#if __TBB_RECYCLE_TO_ENQUEUE\n        //! task to be scheduled for starvation-resistant execution\n        ,to_enqueue\n#endif\n    };\n\n    //------------------------------------------------------------------------\n    // Allocating tasks\n    //------------------------------------------------------------------------\n\n    //! Returns proxy for overloaded new that allocates a root task.\n    static internal::allocate_root_proxy allocate_root() {\n        return internal::allocate_root_proxy();\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Returns proxy for overloaded new that allocates a root task associated with user supplied context.\n    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {\n        return internal::allocate_root_with_context_proxy(ctx);\n    }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! Returns proxy for overloaded new that allocates a continuation task of *this.\n    /** The continuation's parent becomes the parent of *this. */\n    internal::allocate_continuation_proxy& allocate_continuation() {\n        return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);\n    }\n\n    //! Returns proxy for overloaded new that allocates a child task of *this.\n    internal::allocate_child_proxy& allocate_child() {\n        return *reinterpret_cast<internal::allocate_child_proxy*>(this);\n    }\n\n    //! Define recommended static form via import from base class.\n    using task_base::allocate_additional_child_of;\n\n#if __TBB_DEPRECATED_TASK_INTERFACE\n    //! Destroy a task.\n    /** Usually, calling this method is unnecessary, because a task is\n        implicitly deleted after its execute() method runs.  However,\n        sometimes a task needs to be explicitly deallocated, such as\n        when a root task is used as the parent in spawn_and_wait_for_all. */\n    void __TBB_EXPORTED_METHOD destroy( task& t );\n#else /* !__TBB_DEPRECATED_TASK_INTERFACE */\n    //! Define recommended static form via import from base class.\n    using task_base::destroy;\n#endif /* !__TBB_DEPRECATED_TASK_INTERFACE */\n\n    //------------------------------------------------------------------------\n    // Recycling of tasks\n    //------------------------------------------------------------------------\n\n    //! Change this to be a continuation of its former self.\n    /** The caller must guarantee that the task's refcount does not become zero until\n        after the method execute() returns.  Typically, this is done by having\n        method execute() return a pointer to a child of the task.  If the guarantee\n        cannot be made, use method recycle_as_safe_continuation instead.\n\n        Because of the hazard, this method may be deprecated in the future. */\n    void recycle_as_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = allocated;\n    }\n\n    //! Recommended to use, safe variant of recycle_as_continuation\n    /** For safety, it requires additional increment of ref_count.\n        With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute. */\n    void recycle_as_safe_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = recycle;\n    }\n\n    //! Change this to be a child of new_parent.\n    void recycle_as_child_of( task& new_parent ) {\n        internal::task_prefix& p = prefix();\n        __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled as a child\" );\n        __TBB_ASSERT( p.parent==NULL, \"parent must be null\" );\n        __TBB_ASSERT( new_parent.prefix().state<=recycle, \"corrupt parent's state\" );\n        __TBB_ASSERT( new_parent.prefix().state!=freed, \"parent already freed\" );\n        p.state = allocated;\n        p.parent = &new_parent;\n#if __TBB_TASK_GROUP_CONTEXT\n        p.context = new_parent.prefix().context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n\n    //! Schedule this for reexecution after current execute() returns.\n    /** Made obsolete by recycle_as_safe_continuation; may become deprecated. */\n    void recycle_to_reexecute() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled for reexecution\" );\n        prefix().state = reexecute;\n    }\n\n#if __TBB_RECYCLE_TO_ENQUEUE\n    //! Schedule this to enqueue after descendant tasks complete.\n    /** Save enqueue/spawn difference, it has the semantics of recycle_as_safe_continuation. */\n    void recycle_to_enqueue() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        prefix().state = to_enqueue;\n    }\n#endif /* __TBB_RECYCLE_TO_ENQUEUE */\n\n    //------------------------------------------------------------------------\n    // Spawning and blocking\n    //------------------------------------------------------------------------\n\n    //! Set reference count\n    void set_ref_count( int count ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        internal_set_ref_count(count);\n#else\n        prefix().ref_count = count;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Atomically increment reference count.\n    /** Has acquire semantics */\n    void increment_ref_count() {\n        __TBB_FetchAndIncrementWacquire( &prefix().ref_count );\n    }\n\n    //! Atomically adds to reference count and returns its new value.\n    /** Has release-acquire semantics */\n    int add_ref_count( int count ) {\n        internal::call_itt_notify( internal::releasing, &prefix().ref_count );\n        internal::reference_count k = count+__TBB_FetchAndAddW( &prefix().ref_count, count );\n        __TBB_ASSERT( k>=0, \"task's reference count underflowed\" );\n        if( k==0 )\n            internal::call_itt_notify( internal::acquired, &prefix().ref_count );\n        return int(k);\n    }\n\n    //! Atomically decrement reference count and returns its new value.\n    /** Has release semantics. */\n    int decrement_ref_count() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        return int(internal_decrement_ref_count());\n#else\n        return int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Define recommended static forms via import from base class.\n    using task_base::spawn;\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void spawn_and_wait_for_all( task& child ) {\n        prefix().owner->wait_for_all( *this, &child );\n    }\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void __TBB_EXPORTED_METHOD spawn_and_wait_for_all( task_list& list );\n\n    //! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.\n    static void spawn_root_and_wait( task& root ) {\n        root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );\n    }\n\n    //! Spawn root tasks on list and wait for all of them to finish.\n    /** If there are more tasks than worker threads, the tasks are spawned in\n        order of front to back. */\n    static void spawn_root_and_wait( task_list& root_list );\n\n    //! Wait for reference count to become one, and set reference count to zero.\n    /** Works on tasks while waiting. */\n    void wait_for_all() {\n        prefix().owner->wait_for_all( *this, NULL );\n    }\n\n    //! Enqueue task for starvation-resistant execution.\n#if __TBB_TASK_PRIORITY\n    /** The task will be enqueued on the normal priority level disregarding the\n        priority of its task group.\n\n        The rationale of such semantics is that priority of an enqueued task is\n        statically fixed at the moment of its enqueuing, while task group priority\n        is dynamic. Thus automatic priority inheritance would be generally a subject\n        to the race, which may result in unexpected behavior.\n\n        Use enqueue() overload with explicit priority value and task::group_priority()\n        method to implement such priority inheritance when it is really necessary. **/\n#endif /* __TBB_TASK_PRIORITY */\n    static void enqueue( task& t ) {\n        t.prefix().owner->enqueue( t, NULL );\n    }\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueue task for starvation-resistant execution on the specified priority level.\n    static void enqueue( task& t, priority_t p ) {\n        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\" );\n        t.prefix().owner->enqueue( t, (void*)p );\n    }\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! The innermost task being executed or destroyed by the current thread at the moment.\n    static task& __TBB_EXPORTED_FUNC self();\n\n    //! task on whose behalf this task is working, or NULL if this is a root.\n    task* parent() const {return prefix().parent;}\n\n    //! sets parent task pointer to specified value\n    void set_parent(task* p) {\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT(!p || prefix().context == p->prefix().context, \"The tasks must be in the same context\");\n#endif\n        prefix().parent = p;\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! This method is deprecated and will be removed in the future.\n    /** Use method group() instead. **/\n    task_group_context* context() {return prefix().context;}\n\n    //! Pointer to the task group descriptor.\n    task_group_context* group () { return prefix().context; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! True if task was stolen from the task pool of another thread.\n    bool is_stolen_task() const {\n        return (prefix().extra_state & 0x80)!=0;\n    }\n\n    //------------------------------------------------------------------------\n    // Debugging\n    //------------------------------------------------------------------------\n\n    //! Current execution state\n    state_type state() const {return state_type(prefix().state);}\n\n    //! The internal reference count.\n    int ref_count() const {\n#if TBB_USE_ASSERT\n        internal::reference_count ref_count_ = prefix().ref_count;\n        __TBB_ASSERT( ref_count_==int(ref_count_), \"integer overflow error\");\n#endif\n        return int(prefix().ref_count);\n    }\n\n    //! Obsolete, and only retained for the sake of backward compatibility. Always returns true.\n    bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const;\n\n    //------------------------------------------------------------------------\n    // Affinity\n    //------------------------------------------------------------------------\n\n    //! An id as used for specifying affinity.\n    /** Guaranteed to be integral type.  Value of 0 means no affinity. */\n    typedef internal::affinity_id affinity_id;\n\n    //! Set affinity for this task.\n    void set_affinity( affinity_id id ) {prefix().affinity = id;}\n\n    //! Current affinity of this task\n    affinity_id affinity() const {return prefix().affinity;}\n\n    //! Invoked by scheduler to notify task that it ran on unexpected thread.\n    /** Invoked before method execute() runs, if task is stolen, or task has\n        affinity but will be executed on another thread.\n\n        The default action does nothing. */\n    virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Moves this task from its current group into another one.\n    /** Argument ctx specifies the new group.\n\n        The primary purpose of this method is to associate unique task group context\n        with a task allocated for subsequent enqueuing. In contrast to spawned tasks\n        enqueued ones normally outlive the scope where they were created. This makes\n        traditional usage model where task group context are allocated locally on\n        the stack inapplicable. Dynamic allocation of context objects is performance\n        inefficient. Method change_group() allows to make task group context object\n        a member of the task class, and then associate it with its containing task\n        object in the latter's constructor. **/\n    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise. **/\n    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }\n\n    //! Returns true if the context has received cancellation request.\n    bool is_cancelled () const { return prefix().context->is_group_execution_cancelled(); }\n#else\n    bool is_cancelled () const { return false; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group this task belongs to.\n    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }\n\n    //! Retrieves current priority of the task group this task belongs to.\n    priority_t group_priority () const { return prefix().context->priority(); }\n\n#endif /* __TBB_TASK_PRIORITY */\n\nprivate:\n    friend class interface5::internal::task_base;\n    friend class task_list;\n    friend class internal::scheduler;\n    friend class internal::allocate_root_proxy;\n#if __TBB_TASK_GROUP_CONTEXT\n    friend class internal::allocate_root_with_context_proxy;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    friend class internal::allocate_continuation_proxy;\n    friend class internal::allocate_child_proxy;\n    friend class internal::allocate_additional_child_of_proxy;\n\n    //! Get reference to corresponding task_prefix.\n    /** Version tag prevents loader on Linux from using the wrong symbol in debug builds. **/\n    internal::task_prefix& prefix( internal::version_tag* = NULL ) const {\n        return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];\n    }\n}; // class task\n\n//! task that does nothing.  Useful for synchronization.\n/** @ingroup task_scheduling */\nclass empty_task: public task {\n    task* execute() __TBB_override {\n        return NULL;\n    }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename F>\n    class function_task : public task {\n#if __TBB_ALLOW_MUTABLE_FUNCTORS\n        F my_func;\n#else\n        const F my_func;\n#endif\n        task* execute() __TBB_override {\n            my_func();\n            return NULL;\n        }\n    public:\n        function_task( const F& f ) : my_func(f) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        function_task( F&& f ) : my_func( std::move(f) ) {}\n#endif\n    };\n} // namespace internal\n//! @endcond\n\n//! A list of children.\n/** Used for method task::spawn_children\n    @ingroup task_scheduling */\nclass task_list: internal::no_copy {\nprivate:\n    task* first;\n    task** next_ptr;\n    friend class task;\n    friend class interface5::internal::task_base;\npublic:\n    //! Construct empty list\n    task_list() : first(NULL), next_ptr(&first) {}\n\n    //! Destroys the list, but does not destroy the task objects.\n    ~task_list() {}\n\n    //! True if list if empty; false otherwise.\n    bool empty() const {return !first;}\n\n    //! Push task onto back of list.\n    void push_back( task& task ) {\n        task.prefix().next = NULL;\n        *next_ptr = &task;\n        next_ptr = &task.prefix().next;\n    }\n#if __TBB_TODO\n    // TODO: add this method and implement&document the local execution ordering. See more in generic_scheduler::local_spawn\n    //! Push task onto front of list (FIFO local execution, like individual spawning in the same order).\n    void push_front( task& task ) {\n        if( empty() ) {\n            push_back(task);\n        } else {\n            task.prefix().next = first;\n            first = &task;\n        }\n    }\n#endif\n    //! Pop the front task from the list.\n    task& pop_front() {\n        __TBB_ASSERT( !empty(), \"attempt to pop item from empty task_list\" );\n        task* result = first;\n        first = result->prefix().next;\n        if( !first ) next_ptr = &first;\n        return *result;\n    }\n\n    //! Clear the list\n    void clear() {\n        first=NULL;\n        next_ptr=&first;\n    }\n};\n\ninline void interface5::internal::task_base::spawn( task& t ) {\n    t.prefix().owner->spawn( t, t.prefix().next );\n}\n\ninline void interface5::internal::task_base::spawn( task_list& list ) {\n    if( task* t = list.first ) {\n        t->prefix().owner->spawn( *t, *list.next_ptr );\n        list.clear();\n    }\n}\n\ninline void task::spawn_root_and_wait( task_list& root_list ) {\n    if( task* t = root_list.first ) {\n        t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );\n        root_list.clear();\n    }\n}\n\n} // namespace tbb\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& ) {\n    return &tbb::internal::allocate_root_proxy::allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_proxy& ) {\n    tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_continuation_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_continuation_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_child_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_child_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\n#endif /* __TBB_task_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/task_arena.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_arena_H\n#define __TBB_task_arena_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n#if TBB_USE_THREADING_TOOLS\n#include \"atomic.h\" // for as_atomic\n#endif\n#include \"aligned_space.h\"\n\nnamespace tbb {\n\nnamespace this_task_arena {\n    int max_concurrency();\n} // namespace this_task_arena\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class arena;\n    class task_scheduler_observer_v3;\n} // namespace internal\n//! @endcond\n\nnamespace interface7 {\nclass task_arena;\n\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal; //e.g. function_task from task.h\n\nclass delegate_base : no_assign {\npublic:\n    virtual void operator()() const = 0;\n    virtual ~delegate_base() {}\n};\n\n// If decltype is availabe, the helper detects the return type of functor of specified type,\n// otherwise it defines the void type.\ntemplate <typename F>\nstruct return_type_or_void {\n#if __TBB_CPP11_DECLTYPE_PRESENT && !__TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN\n    typedef decltype(declval<F>()()) type;\n#else\n    typedef void type;\n#endif\n};\n\ntemplate<typename F, typename R>\nclass delegated_function : public delegate_base {\n    F &my_func;\n    tbb::aligned_space<R> my_return_storage;\n    // The function should be called only once.\n    void operator()() const __TBB_override {\n        new (my_return_storage.begin()) R(my_func());\n    }\npublic:\n    delegated_function(F& f) : my_func(f) {}\n    // The function can be called only after operator() and only once.\n    R consume_result() const {\n        return tbb::internal::move(*(my_return_storage.begin()));\n    }\n    ~delegated_function() {\n        my_return_storage.begin()->~R();\n    }\n};\n\ntemplate<typename F>\nclass delegated_function<F,void> : public delegate_base {\n    F &my_func;\n    void operator()() const __TBB_override {\n        my_func();\n    }\npublic:\n    delegated_function(F& f) : my_func(f) {}\n    void consume_result() const {}\n\n    friend class task_arena_base;\n};\n\nclass task_arena_base {\nprotected:\n    //! NULL if not currently initialized.\n    internal::arena* my_arena;\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! default context of the arena\n    task_group_context *my_context;\n#endif\n\n    //! Concurrency level for deferred initialization\n    int my_max_concurrency;\n\n    //! Reserved master slots\n    unsigned my_master_slots;\n\n    //! Special settings\n    intptr_t my_version_and_traits;\n\n    enum {\n        default_flags = 0\n#if __TBB_TASK_GROUP_CONTEXT\n        | (task_group_context::default_traits & task_group_context::exact_exception)  // 0 or 1 << 16\n        , exact_exception_flag = task_group_context::exact_exception // used to specify flag for context directly\n#endif\n    };\n\n    task_arena_base(int max_concurrency, unsigned reserved_for_masters)\n        : my_arena(0)\n#if __TBB_TASK_GROUP_CONTEXT\n        , my_context(0)\n#endif\n        , my_max_concurrency(max_concurrency)\n        , my_master_slots(reserved_for_masters)\n        , my_version_and_traits(default_flags)\n        {}\n\n    void __TBB_EXPORTED_METHOD internal_initialize();\n    void __TBB_EXPORTED_METHOD internal_terminate();\n    void __TBB_EXPORTED_METHOD internal_attach();\n    void __TBB_EXPORTED_METHOD internal_enqueue( task&, intptr_t ) const;\n    void __TBB_EXPORTED_METHOD internal_execute( delegate_base& ) const;\n    void __TBB_EXPORTED_METHOD internal_wait() const;\n    static int __TBB_EXPORTED_FUNC internal_current_slot();\n    static int __TBB_EXPORTED_FUNC internal_max_concurrency( const task_arena * );\npublic:\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1;\n    static const int not_initialized = -2;\n\n};\n\n#if __TBB_TASK_ISOLATION\nvoid __TBB_EXPORTED_FUNC isolate_within_arena( delegate_base& d, intptr_t reserved = 0 );\n\ntemplate<typename R, typename F>\nR isolate_impl(F& f) {\n    delegated_function<F, R> d(f);\n    isolate_within_arena(d);\n    return d.consume_result();\n}\n#endif /* __TBB_TASK_ISOLATION */\n} // namespace internal\n//! @endcond\n\n/** 1-to-1 proxy representation class of scheduler's arena\n * Constructors set up settings only, real construction is deferred till the first method invocation\n * Destructor only removes one of the references to the inner arena representation.\n * Final destruction happens when all the references (and the work) are gone.\n */\nclass task_arena : public internal::task_arena_base {\n    friend class tbb::internal::task_scheduler_observer_v3;\n    friend int tbb::this_task_arena::max_concurrency();\n    bool my_initialized;\n    void mark_initialized() {\n        __TBB_ASSERT( my_arena, \"task_arena initialization is incomplete\" );\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT( my_context, \"task_arena initialization is incomplete\" );\n#endif\n#if TBB_USE_THREADING_TOOLS\n        // Actual synchronization happens in internal_initialize & internal_attach.\n        // The race on setting my_initialized is benign, but should be hidden from Intel(R) Inspector\n        internal::as_atomic(my_initialized).fetch_and_store<release>(true);\n#else\n        my_initialized = true;\n#endif\n    }\n\n    template<typename F>\n    void enqueue_impl( __TBB_FORWARDING_REF(F) f\n#if __TBB_TASK_PRIORITY\n        , priority_t p = priority_t(0)\n#endif\n    ) {\n#if !__TBB_TASK_PRIORITY\n        intptr_t p = 0;\n#endif\n        initialize();\n#if __TBB_TASK_GROUP_CONTEXT\n        internal_enqueue(*new(task::allocate_root(*my_context)) internal::function_task< typename internal::strip<F>::type >(internal::forward<F>(f)), p);\n#else\n        internal_enqueue(*new(task::allocate_root()) internal::function_task< typename internal::strip<F>::type >(internal::forward<F>(f)), p);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n\n    template<typename R, typename F>\n    R execute_impl(F& f) {\n        initialize();\n        internal::delegated_function<F, R> d(f);\n        internal_execute(d);\n        return d.consume_result();\n    }\n\npublic:\n    //! Creates task_arena with certain concurrency limits\n    /** Sets up settings only, real construction is deferred till the first method invocation\n     *  @arg max_concurrency specifies total number of slots in arena where threads work\n     *  @arg reserved_for_masters specifies number of slots to be used by master threads only.\n     *       Value of 1 is default and reflects behavior of implicit arenas.\n     **/\n    task_arena(int max_concurrency_ = automatic, unsigned reserved_for_masters = 1)\n        : task_arena_base(max_concurrency_, reserved_for_masters)\n        , my_initialized(false)\n    {}\n\n    //! Copies settings from another task_arena\n    task_arena(const task_arena &s) // copy settings but not the reference or instance\n        : task_arena_base(s.my_max_concurrency, s.my_master_slots)\n        , my_initialized(false)\n    {}\n\n    //! Tag class used to indicate the \"attaching\" constructor\n    struct attach {};\n\n    //! Creates an instance of task_arena attached to the current arena of the thread\n    explicit task_arena( attach )\n        : task_arena_base(automatic, 1) // use default settings if attach fails\n        , my_initialized(false)\n    {\n        internal_attach();\n        if( my_arena ) my_initialized = true;\n    }\n\n    //! Forces allocation of the resources for the task_arena as specified in constructor arguments\n    inline void initialize() {\n        if( !my_initialized ) {\n            internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Overrides concurrency level and forces initialization of internal representation\n    inline void initialize(int max_concurrency_, unsigned reserved_for_masters = 1) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT(!my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            my_max_concurrency = max_concurrency_;\n            my_master_slots = reserved_for_masters;\n            initialize();\n        }\n    }\n\n    //! Attaches this instance to the current arena of the thread\n    inline void initialize(attach) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT(!my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            internal_attach();\n            if ( !my_arena ) internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Removes the reference to the internal arena representation.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    inline void terminate() {\n        if( my_initialized ) {\n            internal_terminate();\n            my_initialized = false;\n        }\n    }\n\n    //! Removes the reference to the internal arena representation, and destroys the external object.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    ~task_arena() {\n        terminate();\n    }\n\n    //! Returns true if the arena is active (initialized); false otherwise.\n    //! The name was chosen to match a task_scheduler_init method with the same semantics.\n    bool is_active() const { return my_initialized; }\n\n    //! Enqueues a task into the arena to process a functor, and immediately returns.\n    //! Does not require the calling thread to join the arena\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename F>\n    void enqueue( F&& f ) {\n        enqueue_impl(std::forward<F>(f));\n    }\n#else\n    template<typename F>\n    void enqueue( const F& f ) {\n        enqueue_impl(f);\n    }\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueues a task with priority p into the arena to process a functor f, and immediately returns.\n    //! Does not require the calling thread to join the arena\n    template<typename F>\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void enqueue( F&& f, priority_t p ) {\n        __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\");\n        enqueue_impl(std::forward<F>(f), p);\n    }\n#else\n    void enqueue( const F& f, priority_t p ) {\n        __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\");\n        enqueue_impl(f,p);\n    }\n#endif\n#endif// __TBB_TASK_PRIORITY\n\n    //! Joins the arena and executes a mutable functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type execute(F& f) {\n        return execute_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n    //! Joins the arena and executes a constant functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type execute(const F& f) {\n        return execute_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n#if __TBB_EXTRA_DEBUG\n    //! Wait for all work in the arena to be completed\n    //! Even submitted by other application threads\n    //! Joins arena if/when possible (in the same way as execute())\n    void debug_wait_until_empty() {\n        initialize();\n        internal_wait();\n    }\n#endif //__TBB_EXTRA_DEBUG\n\n    //! Returns the index, aka slot number, of the calling thread in its current arena\n    //! This method is deprecated and replaced with this_task_arena::current_thread_index()\n    inline static int current_thread_index() {\n        return internal_current_slot();\n    }\n\n    //! Returns the maximal number of threads that can work inside the arena\n    inline int max_concurrency() const {\n        // Handle special cases inside the library\n        return (my_max_concurrency>1) ? my_max_concurrency : internal_max_concurrency(this);\n    }\n};\n\n#if __TBB_TASK_ISOLATION\nnamespace this_task_arena {\n    //! Executes a mutable functor in isolation within the current task arena.\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type isolate(F& f) {\n        return internal::isolate_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n    //! Executes a constant functor in isolation within the current task arena.\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type isolate(const F& f) {\n        return internal::isolate_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n}\n#endif /* __TBB_TASK_ISOLATION */\n} // namespace interfaceX\n\nusing interface7::task_arena;\n#if __TBB_TASK_ISOLATION\nnamespace this_task_arena {\n    using namespace interface7::this_task_arena;\n}\n#endif /* __TBB_TASK_ISOLATION */\n\nnamespace this_task_arena {\n    //! Returns the index, aka slot number, of the calling thread in its current arena\n    inline int current_thread_index() {\n        int idx = tbb::task_arena::current_thread_index();\n        return idx == -1 ? tbb::task_arena::not_initialized : idx;\n    }\n\n    //! Returns the maximal number of threads that can work inside the arena\n    inline int max_concurrency() {\n        return tbb::task_arena::internal_max_concurrency(NULL);\n    }\n} // namespace this_task_arena\n\n} // namespace tbb\n\n#endif /* __TBB_task_arena_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/task_group.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_group_H\n#define __TBB_task_group_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n\n#if __TBB_TASK_GROUP_CONTEXT\n\nnamespace tbb {\n\nnamespace internal {\n    template<typename F> class task_handle_task;\n}\n\nclass task_group;\nclass structured_task_group;\n\ntemplate<typename F>\nclass task_handle : internal::no_assign {\n    template<typename _F> friend class internal::task_handle_task;\n    friend class task_group;\n    friend class structured_task_group;\n\n    static const intptr_t scheduled = 0x1;\n\n    F my_func;\n    intptr_t my_state;\n\n    void mark_scheduled () {\n        // The check here is intentionally lax to avoid the impact of interlocked operation\n        if ( my_state & scheduled )\n            internal::throw_exception( internal::eid_invalid_multiple_scheduling );\n        my_state |= scheduled;\n    }\npublic:\n    task_handle( const F& f ) : my_func(f), my_state(0) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    task_handle( F&& f ) : my_func( std::move(f)), my_state(0) {}\n#endif\n\n    void operator() () const { my_func(); }\n};\n\nenum task_group_status {\n    not_complete,\n    complete,\n    canceled\n};\n\nnamespace internal {\n\ntemplate<typename F>\nclass task_handle_task : public task {\n    task_handle<F>& my_handle;\n    task* execute() __TBB_override {\n        my_handle();\n        return NULL;\n    }\npublic:\n    task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }\n};\n\nclass task_group_base : internal::no_copy {\nprotected:\n    empty_task* my_root;\n    task_group_context my_context;\n\n    task& owner () { return *my_root; }\n\n    template<typename F>\n    task_group_status internal_run_and_wait( F& f ) {\n        class ref_count_guard : internal::no_copy {\n            task& my_task;\n        public:\n            ref_count_guard( task& t ) : my_task(t) {\n                my_task.increment_ref_count();\n            }\n            ~ref_count_guard() {\n                my_task.decrement_ref_count();\n            }\n        };\n        __TBB_TRY {\n            if ( !my_context.is_group_execution_cancelled() ) {\n                // We need to increase the reference count of the root task to notify waiters that\n                // this task group has some work in progress.\n                ref_count_guard guard(*my_root);\n                f();\n            }\n        } __TBB_CATCH( ... ) {\n            my_context.register_pending_exception();\n        }\n        return wait();\n    }\n\n    template<typename Task, typename F>\n    void internal_run( __TBB_FORWARDING_REF(F) f ) {\n        owner().spawn( *new( owner().allocate_additional_child_of(*my_root) ) Task( internal::forward<F>(f) ));\n    }\n\npublic:\n    task_group_base( uintptr_t traits = 0 )\n        : my_context(task_group_context::bound, task_group_context::default_traits | traits)\n    {\n        my_root = new( task::allocate_root(my_context) ) empty_task;\n        my_root->set_ref_count(1);\n    }\n\n    ~task_group_base() __TBB_NOEXCEPT(false) {\n        if( my_root->ref_count() > 1 ) {\n            bool stack_unwinding_in_progress = std::uncaught_exception();\n            // Always attempt to do proper cleanup to avoid inevitable memory corruption\n            // in case of missing wait (for the sake of better testability & debuggability)\n            if ( !is_canceling() )\n                cancel();\n            __TBB_TRY {\n                my_root->wait_for_all();\n            } __TBB_CATCH (...) {\n                task::destroy(*my_root);\n                __TBB_RETHROW();\n            }\n            task::destroy(*my_root);\n            if ( !stack_unwinding_in_progress )\n                internal::throw_exception( internal::eid_missing_wait );\n        }\n        else {\n            task::destroy(*my_root);\n        }\n    }\n\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< internal::task_handle_task<F> >( h );\n    }\n\n    task_group_status wait() {\n        __TBB_TRY {\n            my_root->wait_for_all();\n        } __TBB_CATCH( ... ) {\n            my_context.reset();\n            __TBB_RETHROW();\n        }\n        if ( my_context.is_group_execution_cancelled() ) {\n            // TODO: the reset method is not thread-safe. Ensure the correct behavior.\n            my_context.reset();\n            return canceled;\n        }\n        return complete;\n    }\n\n    bool is_canceling() {\n        return my_context.is_group_execution_cancelled();\n    }\n\n    void cancel() {\n        my_context.cancel_group_execution();\n    }\n}; // class task_group_base\n\n} // namespace internal\n\nclass task_group : public internal::task_group_base {\npublic:\n    task_group () : task_group_base( task_group_context::concurrent_wait ) {}\n\n#if __SUNPRO_CC\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< internal::task_handle_task<F> >( h );\n    }\n#else\n    using task_group_base::run;\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename F>\n    void run( F&& f ) {\n        internal_run< internal::function_task< typename internal::strip<F>::type > >( std::forward< F >(f) );\n    }\n#else\n    template<typename F>\n    void run(const F& f) {\n        internal_run<internal::function_task<F> >(f);\n    }\n#endif\n\n    template<typename F>\n    task_group_status run_and_wait( const F& f ) {\n        return internal_run_and_wait<const F>( f );\n    }\n\n    // TODO: add task_handle rvalues support\n    template<typename F>\n    task_group_status run_and_wait( task_handle<F>& h ) {\n      h.mark_scheduled();\n      return internal_run_and_wait< task_handle<F> >( h );\n    }\n}; // class task_group\n\nclass structured_task_group : public internal::task_group_base {\npublic:\n    // TODO: add task_handle rvalues support\n    template<typename F>\n    task_group_status run_and_wait ( task_handle<F>& h ) {\n        h.mark_scheduled();\n        return internal_run_and_wait< task_handle<F> >( h );\n    }\n\n    task_group_status wait() {\n        task_group_status res = task_group_base::wait();\n        my_root->set_ref_count(1);\n        return res;\n    }\n}; // class structured_task_group\n\ninline\nbool is_current_task_group_canceling() {\n    return task::self().is_cancelled();\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<class F>\ntask_handle< typename internal::strip<F>::type > make_task( F&& f ) {\n    return task_handle< typename internal::strip<F>::type >( std::forward<F>(f) );\n}\n#else\ntemplate<class F>\ntask_handle<F> make_task( const F& f ) {\n    return task_handle<F>( f );\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_task_group_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/task_scheduler_init.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_scheduler_init_H\n#define __TBB_task_scheduler_init_H\n\n#include \"tbb_stddef.h\"\n#include \"limits.h\"\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n#include <new> // nothrow_t\n#endif\n\nnamespace tbb {\n\ntypedef std::size_t stack_size_type;\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class scheduler;\n} // namespace internal\n//! @endcond\n\n//! Class delimiting the scope of task scheduler activity.\n/** A thread can construct a task_scheduler_init object and keep it alive\n    while it uses TBB's tasking subsystem (including parallel algorithms).\n\n    This class allows to customize properties of the TBB task pool to some extent.\n    For example it can limit concurrency level of parallel work initiated by the\n    given thread. It also can be used to specify stack size of the TBB worker threads,\n    though this setting is not effective if the thread pool has already been created.\n\n    If a parallel construct is used without task_scheduler_init object previously\n    created, the scheduler will be initialized automatically with default settings,\n    and will persist until this thread exits. Default concurrency level is defined\n    as described in task_scheduler_init::initialize().\n    @ingroup task_scheduling */\nclass task_scheduler_init: internal::no_copy {\n    enum ExceptionPropagationMode {\n        propagation_mode_exact = 1u,\n        propagation_mode_captured = 2u,\n        propagation_mode_mask = propagation_mode_exact | propagation_mode_captured\n    };\n\n    /** NULL if not currently initialized. */\n    internal::scheduler* my_scheduler;\n\n    bool internal_terminate( bool blocking );\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    bool __TBB_EXPORTED_METHOD internal_blocking_terminate( bool throwing );\n#endif\npublic:\n\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1;\n\n    //! Argument to initialize() or constructor that causes initialization to be deferred.\n    static const int deferred = -2;\n\n    //! Ensure that scheduler exists for this thread\n    /** A value of -1 lets TBB decide on the number of threads, which is usually\n        maximal hardware concurrency for this process, that is the number of logical\n        CPUs on the machine (possibly limited by the processor affinity mask of this\n        process (Windows) or of this thread (Linux, FreeBSD). It is preferable option\n        for production code because it helps to avoid nasty surprises when several\n        TBB based components run side-by-side or in a nested fashion inside the same\n        process.\n\n        The number_of_threads is ignored if any other task_scheduler_inits\n        currently exist.  A thread may construct multiple task_scheduler_inits.\n        Doing so does no harm because the underlying scheduler is reference counted. */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );\n\n    //! The overloaded method with stack size parameter\n    /** Overloading is necessary to preserve ABI compatibility */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads, stack_size_type thread_stack_size );\n\n    //! Inverse of method initialize.\n    void __TBB_EXPORTED_METHOD terminate();\n\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n#if TBB_USE_EXCEPTIONS\n    //! terminate() that waits for worker threads termination. Throws exception on error.\n    void blocking_terminate() {\n        internal_blocking_terminate( /*throwing=*/true );\n    }\n#endif\n    //! terminate() that waits for worker threads termination. Returns false on error.\n    bool blocking_terminate(const std::nothrow_t&) __TBB_NOEXCEPT(true) {\n        return internal_blocking_terminate( /*throwing=*/false );\n    }\n#endif // __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n\n    //! Shorthand for default constructor followed by call to initialize(number_of_threads).\n    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)\n    {\n        // Two lowest order bits of the stack size argument may be taken to communicate\n        // default exception propagation mode of the client to be used when the\n        // client manually creates tasks in the master thread and does not use\n        // explicit task group context object. This is necessary because newer\n        // TBB binaries with exact propagation enabled by default may be used\n        // by older clients that expect tbb::captured_exception wrapper.\n        // All zeros mean old client - no preference.\n        __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), \"Requested stack size is not aligned\" );\n#if TBB_USE_EXCEPTIONS\n        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;\n#endif /* TBB_USE_EXCEPTIONS */\n        initialize( number_of_threads, thread_stack_size );\n    }\n\n    //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.\n    ~task_scheduler_init() {\n        if( my_scheduler )\n            terminate();\n        internal::poison_pointer( my_scheduler );\n    }\n    //! Returns the number of threads TBB scheduler would create if initialized by default.\n    /** Result returned by this method does not depend on whether the scheduler\n        has already been initialized.\n\n        Because tbb 2.0 does not support blocking tasks yet, you may use this method\n        to boost the number of threads in the tbb's internal pool, if your tasks are\n        doing I/O operations. The optimal number of additional threads depends on how\n        much time your tasks spend in the blocked state.\n\n        Before TBB 3.0 U4 this method returned the number of logical CPU in the\n        system. Currently on Windows, Linux and FreeBSD it returns the number of\n        logical CPUs available to the current process in accordance with its affinity\n        mask.\n\n        NOTE: The return value of this method never changes after its first invocation.\n        This means that changes in the process affinity mask that took place after\n        this method was first invoked will not affect the number of worker threads\n        in the TBB worker threads pool. */\n    static int __TBB_EXPORTED_FUNC default_num_threads ();\n\n    //! Returns true if scheduler is active (initialized); false otherwise\n    bool is_active() const { return my_scheduler != NULL; }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_task_scheduler_init_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/task_scheduler_observer.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_scheduler_observer_H\n#define __TBB_task_scheduler_observer_H\n\n#include \"atomic.h\"\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\n#include \"task_arena.h\"\n#endif\n\n#if __TBB_SCHEDULER_OBSERVER\n\nnamespace tbb {\nnamespace interface6 {\nclass task_scheduler_observer;\n}\nnamespace internal {\n\nclass observer_proxy;\nclass observer_list;\n\nclass task_scheduler_observer_v3 {\n    friend class observer_proxy;\n    friend class observer_list;\n    friend class interface6::task_scheduler_observer;\n\n    //! Pointer to the proxy holding this observer.\n    /** Observers are proxied by the scheduler to maintain persistent lists of them. **/\n    observer_proxy* my_proxy;\n\n    //! Counter preventing the observer from being destroyed while in use by the scheduler.\n    /** Valid only when observation is on. **/\n    atomic<intptr_t> my_busy_count;\n\npublic:\n    //! Enable or disable observation\n    /** For local observers the method can be used only when the current thread\n        has the task scheduler initialized or is attached to an arena.\n\n        Repeated calls with the same state are no-ops. **/\n    void __TBB_EXPORTED_METHOD observe( bool state=true );\n\n    //! Returns true if observation is enabled, false otherwise.\n    bool is_observing() const {return my_proxy!=NULL;}\n\n    //! Construct observer with observation disabled.\n    task_scheduler_observer_v3() : my_proxy(NULL) { my_busy_count.store<relaxed>(0); }\n\n    //! Entry notification\n    /** Invoked from inside observe(true) call and whenever a worker enters the arena\n        this observer is associated with. If a thread is already in the arena when\n        the observer is activated, the entry notification is called before it\n        executes the first stolen task.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_entry( bool /*is_worker*/ ) {}\n\n    //! Exit notification\n    /** Invoked from inside observe(false) call and whenever a worker leaves the\n        arena this observer is associated with.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_exit( bool /*is_worker*/ ) {}\n\n    //! Destructor automatically switches observation off if it is enabled.\n    virtual ~task_scheduler_observer_v3() { if(my_proxy) observe(false);}\n};\n\n} // namespace internal\n\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\nnamespace interface6 {\nclass task_scheduler_observer : public internal::task_scheduler_observer_v3 {\n    friend class internal::task_scheduler_observer_v3;\n    friend class internal::observer_proxy;\n    friend class internal::observer_list;\n\n    /** Negative numbers with the largest absolute value to minimize probability\n        of coincidence in case of a bug in busy count usage. **/\n    // TODO: take more high bits for version number\n    static const intptr_t v6_trait = (intptr_t)((~(uintptr_t)0 >> 1) + 1);\n\n    //! contains task_arena pointer or tag indicating local or global semantics of the observer\n    intptr_t my_context_tag;\n    enum { global_tag = 0, implicit_tag = 1 };\n\npublic:\n    //! Construct local or global observer in inactive state (observation disabled).\n    /** For a local observer entry/exit notifications are invoked whenever a worker\n        thread joins/leaves the arena of the observer's owner thread. If a thread is\n        already in the arena when the observer is activated, the entry notification is\n        called before it executes the first stolen task. **/\n    /** TODO: Obsolete.\n        Global observer semantics is obsolete as it violates master thread isolation\n        guarantees and is not composable. Thus the current default behavior of the\n        constructor is obsolete too and will be changed in one of the future versions\n        of the library. **/\n    explicit task_scheduler_observer( bool local = false ) {\n#if  __TBB_ARENA_OBSERVER\n        my_context_tag = local? implicit_tag : global_tag;\n#else\n        __TBB_ASSERT_EX( !local, NULL );\n        my_context_tag = global_tag;\n#endif\n    }\n\n#if  __TBB_ARENA_OBSERVER\n    //! Construct local observer for a given arena in inactive state (observation disabled).\n    /** entry/exit notifications are invoked whenever a thread joins/leaves arena.\n        If a thread is already in the arena when the observer is activated, the entry notification\n        is called before it executes the first stolen task. **/\n    explicit task_scheduler_observer( task_arena & a) {\n        my_context_tag = (intptr_t)&a;\n    }\n#endif /* __TBB_ARENA_OBSERVER */\n\n    /** Destructor protects instance of the observer from concurrent notification.\n       It is recommended to disable observation before destructor of a derived class starts,\n       otherwise it can lead to concurrent notification callback on partly destroyed object **/\n    virtual ~task_scheduler_observer() { if(my_proxy) observe(false); }\n\n    //! Enable or disable observation\n    /** Warning: concurrent invocations of this method are not safe.\n        Repeated calls with the same state are no-ops. **/\n    void observe( bool state=true ) {\n        if( state && !my_proxy ) {\n            __TBB_ASSERT( !my_busy_count, \"Inconsistent state of task_scheduler_observer instance\");\n            my_busy_count.store<relaxed>(v6_trait);\n        }\n        internal::task_scheduler_observer_v3::observe(state);\n    }\n\n#if  __TBB_SLEEP_PERMISSION\n    //! Return commands for may_sleep()\n    enum { keep_awake = false, allow_sleep = true };\n\n    //! The callback can be invoked by a worker thread before it goes to sleep.\n    /** If it returns false ('keep_awake'), the thread will keep spinning and looking for work.\n        It will not be called for master threads. **/\n    virtual bool may_sleep() { return allow_sleep; }\n#endif /*__TBB_SLEEP_PERMISSION*/\n};\n\n} //namespace interface6\nusing interface6::task_scheduler_observer;\n#else /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/\ntypedef tbb::internal::task_scheduler_observer_v3 task_scheduler_observer;\n#endif /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/\n\n} // namespace tbb\n\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#endif /* __TBB_task_scheduler_observer_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_H\n#define __TBB_tbb_H\n\n/**\n    This header bulk-includes declarations or definitions of all the functionality\n    provided by TBB (save for malloc dependent headers).\n\n    If you use only a few TBB constructs, consider including specific headers only.\n    Any header listed below can be included independently of others.\n**/\n\n#if TBB_PREVIEW_AGGREGATOR\n#include \"aggregator.h\"\n#endif\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"blocked_range.h\"\n#include \"blocked_range2d.h\"\n#include \"blocked_range3d.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"combinable.h\"\n#include \"concurrent_hash_map.h\"\n#if TBB_PREVIEW_CONCURRENT_LRU_CACHE\n#include \"concurrent_lru_cache.h\"\n#endif\n#include \"concurrent_priority_queue.h\"\n#include \"concurrent_queue.h\"\n#include \"concurrent_unordered_map.h\"\n#include \"concurrent_unordered_set.h\"\n#include \"concurrent_vector.h\"\n#include \"critical_section.h\"\n#include \"enumerable_thread_specific.h\"\n#include \"flow_graph.h\"\n#if TBB_PREVIEW_GLOBAL_CONTROL\n#include \"global_control.h\"\n#endif\n#include \"mutex.h\"\n#include \"null_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n#include \"parallel_for_each.h\"\n#include \"parallel_invoke.h\"\n#include \"parallel_reduce.h\"\n#include \"parallel_scan.h\"\n#include \"parallel_sort.h\"\n#include \"partitioner.h\"\n#include \"pipeline.h\"\n#include \"queuing_mutex.h\"\n#include \"queuing_rw_mutex.h\"\n#include \"reader_writer_lock.h\"\n#include \"recursive_mutex.h\"\n#include \"spin_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"task.h\"\n#include \"task_arena.h\"\n#include \"task_group.h\"\n#include \"task_scheduler_init.h\"\n#include \"task_scheduler_observer.h\"\n#include \"tbb_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_thread.h\"\n#include \"tick_count.h\"\n\n#endif /* __TBB_tbb_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_allocator_H\n#define __TBB_tbb_allocator_H\n\n#include \"tbb_stddef.h\"\n#include <new>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n#include <cstring>\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Deallocates memory using FreeHandler\n    /** The function uses scalable_free if scalable allocator is available and free if not*/\n    void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p );\n\n    //! Allocates memory using MallocHandler\n    /** The function uses scalable_malloc if scalable allocator is available and malloc if not*/\n    void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );\n\n    //! Returns true if standard malloc/free are used to work with memory.\n    bool __TBB_EXPORTED_FUNC is_malloc_used_v3();\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class selects the best memory allocation mechanism available\n    from scalable_malloc and standard malloc.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass tbb_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n\n    //! Specifies current allocator\n    enum malloc_type {\n        scalable,\n        standard\n    };\n\n    tbb_allocator() throw() {}\n    tbb_allocator( const tbb_allocator& ) throw() {}\n    template<typename U> tbb_allocator(const tbb_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        return pointer(internal::allocate_via_handler_v3( n * sizeof(value_type) ));\n    }\n\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n\n    //! Returns current allocator\n    static malloc_type allocator_type() {\n        return internal::is_malloc_used_v3() ? standard : scalable;\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass tbb_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return false;}\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class is an adapter over an actual allocator that fills the allocation\n    using memset function with template argument C as the value.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate <typename T, template<typename X> class Allocator = tbb_allocator>\nclass zero_allocator : public Allocator<T>\n{\npublic:\n    typedef Allocator<T> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    typedef typename base_allocator_type::reference reference;\n    typedef typename base_allocator_type::const_reference const_reference;\n    typedef typename base_allocator_type::size_type size_type;\n    typedef typename base_allocator_type::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n\n    zero_allocator() throw() { }\n    zero_allocator(const zero_allocator &a) throw() : base_allocator_type( a ) { }\n    template<typename U>\n    zero_allocator(const zero_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }\n\n    pointer allocate(const size_type n, const void *hint = 0 ) {\n        pointer ptr = base_allocator_type::allocate( n, hint );\n        std::memset( static_cast<void*>(ptr), 0, n * sizeof(value_type) );\n        return ptr;\n    }\n};\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<template<typename T> class Allocator>\nclass zero_allocator<void, Allocator> : public Allocator<void> {\npublic:\n    typedef Allocator<void> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n};\n\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator==( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);\n}\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator!=( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_config.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_config_H\n#define __TBB_tbb_config_H\n\n/** This header is supposed to contain macro definitions and C style comments only.\n    The macros defined here are intended to control such aspects of TBB build as\n    - presence of compiler features\n    - compilation modes\n    - feature sets\n    - known compiler/platform issues\n**/\n\n/* This macro marks incomplete code or comments describing ideas which are considered for the future.\n * See also for plain comment with TODO and FIXME marks for small improvement opportunities.\n */\n#define __TBB_TODO 0\n\n/* Check which standard library we use. */\n/* __TBB_SYMBOL is defined only while processing exported symbols list where C++ is not allowed. */\n#if !defined(__TBB_SYMBOL) && !__TBB_CONFIG_PREPROC_ONLY\n    #include <cstddef>\n#endif\n\n// note that when ICC or Clang is in use, __TBB_GCC_VERSION might not fully match\n// the actual GCC version on the system.\n#define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n\n// Since GNU libstdc++ does not have a convenient macro for its version,\n// we rely on the version of GCC or the user-specified macro below.\n// The format of TBB_USE_GLIBCXX_VERSION should match the __TBB_GCC_VERSION above,\n// e.g. it should be set to 40902 for libstdc++ coming with GCC 4.9.2.\n#ifdef TBB_USE_GLIBCXX_VERSION\n#define __TBB_GLIBCXX_VERSION TBB_USE_GLIBCXX_VERSION\n#elif __GLIBCPP__ || __GLIBCXX__\n#define __TBB_GLIBCXX_VERSION __TBB_GCC_VERSION\n//TODO: analyze __GLIBCXX__ instead of __TBB_GCC_VERSION ?\n#endif\n\n#if __clang__\n    /** according to clang documentation, version can be vendor specific **/\n    #define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)\n#endif\n\n/** Target OS is either iOS* or iOS* simulator **/\n#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__\n    #define __TBB_IOS 1\n#endif\n\n/** Preprocessor symbols to determine HW architecture **/\n\n#if _WIN32||_WIN64\n#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support\n#       define __TBB_x86_64 1\n#   elif defined(_M_IA64)\n#       define __TBB_ipf 1\n#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#else /* Assume generic Unix */\n#   if !__linux__ && !__APPLE__\n#       define __TBB_generic_os 1\n#   endif\n#   if __TBB_IOS\n#       define __TBB_generic_arch 1\n#   elif __x86_64__\n#       define __TBB_x86_64 1\n#   elif __ia64__\n#       define __TBB_ipf 1\n#   elif __i386__||__i386  // __i386 is for Sun OS\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#endif\n\n#if __MIC__ || __MIC2__\n#define __TBB_DEFINE_MIC 1\n#endif\n\n#define __TBB_TSX_AVAILABLE  ((__TBB_x86_32 || __TBB_x86_64) && !__TBB_DEFINE_MIC)\n\n/** Presence of compiler features **/\n\n#if __INTEL_COMPILER == 9999 && __INTEL_COMPILER_BUILD_DATE == 20110811\n/* Intel(R) Composer XE 2011 Update 6 incorrectly sets __INTEL_COMPILER. Fix it. */\n    #undef __INTEL_COMPILER\n    #define __INTEL_COMPILER 1210\n#endif\n\n#if __clang__ && !__INTEL_COMPILER\n#define __TBB_USE_OPTIONAL_RTTI __has_feature(cxx_rtti)\n#elif defined(_CPPRTTI)\n#define __TBB_USE_OPTIONAL_RTTI 1\n#else\n#define __TBB_USE_OPTIONAL_RTTI (__GXX_RTTI || __RTTI || __INTEL_RTTI__)\n#endif\n\n#if __TBB_GCC_VERSION >= 40400 && !defined(__INTEL_COMPILER)\n    /** warning suppression pragmas available in GCC since 4.4 **/\n    #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1\n#endif\n\n/* Select particular features of C++11 based on compiler version.\n   ICC 12.1 (Linux*), GCC 4.3 and higher, clang 2.9 and higher\n   set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.\n\n   Compilers that mimics other compilers (ICC, clang) must be processed before\n   compilers they mimic (GCC, MSVC).\n\n   TODO: The following conditions should be extended when new compilers/runtimes\n   support added.\n */\n\n/**\n    __TBB_CPP11_PRESENT macro indicates that the compiler supports vast majority of C++11 features.\n    Depending on the compiler, some features might still be unsupported or work incorrectly.\n    Use it when enabling C++11 features individually is not practical, and be aware that\n    some \"good enough\" compilers might be excluded. **/\n#define __TBB_CPP11_PRESENT (__cplusplus >= 201103L || _MSC_VER >= 1900)\n\n/** C++11 mode detection macros for Intel(R) C++ Compiler (enabled by -std=c++XY option):\n    __INTEL_CXX11_MODE__ for version >=13.0 (not available for ICC 15.0 if -std=c++14 is used),\n    __STDC_HOSTED__ for version >=12.0 (useful only on Windows),\n    __GXX_EXPERIMENTAL_CXX0X__ for version >=12.0 on Linux and macOS. **/\n#if __INTEL_COMPILER &&  !__INTEL_CXX11_MODE__\n    // __INTEL_CXX11_MODE__ is not set, try to deduce it\n    #define __INTEL_CXX11_MODE__ (__GXX_EXPERIMENTAL_CXX0X__ || (_MSC_VER && __STDC_HOSTED__))\n#endif\n\n// Intel(R) C++ Compiler offloading API to the Intel(R) Graphics Technology presence macro\n// TODO: add support for ICC 15.00 _GFX_enqueue API and then decrease Intel C++ Compiler supported version\n// TODO: add linux support and restict it with (__linux__ && __TBB_x86_64 && !__ANDROID__) macro\n#if __INTEL_COMPILER >= 1600 && _WIN32\n#define __TBB_GFX_PRESENT 1\n#endif\n\n#if __INTEL_COMPILER && (!_MSC_VER || __INTEL_CXX11_MODE__)\n    //  On Windows, C++11 features supported by Visual Studio 2010 and higher are enabled by default,\n    //  so in absence of /Qstd= use MSVC branch for feature detection.\n    //  On other platforms, no -std= means C++03.\n\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (__INTEL_CXX11_MODE__ && __VARIADIC_TEMPLATES)\n    // Both r-value reference support in compiler and std::move/std::forward\n    // presence in C++ standard library is checked.\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  ((_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40500 || _LIBCPP_VERSION)) && __INTEL_COMPILER >= 1400)\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1900 || __TBB_GCC_VERSION >= 40600 || __clang__))\n    #if  _MSC_VER >= 1600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 ( __INTEL_COMPILER > 1300                                                \\\n                                                            /*ICC 12.1 Upd 10 and 13 beta Upd 2 fixed exception_ptr linking  issue*/ \\\n                                                            || (__INTEL_COMPILER == 1300 && __INTEL_COMPILER_BUILD_DATE >= 20120530) \\\n                                                            || (__INTEL_COMPILER == 1210 && __INTEL_COMPILER_BUILD_DATE >= 20120410) )\n    /** libstdc++ that comes with GCC 4.6 use C++11 features not supported by ICC 12.1.\n     *  Because of that ICC 12.1 does not support C++11 mode with gcc 4.6 (or higher),\n     *  and therefore does not define __GXX_EXPERIMENTAL_CXX0X__ macro **/\n    #elif __TBB_GLIBCXX_VERSION >= 40404 && __TBB_GLIBCXX_VERSION < 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1200)\n    #elif __TBB_GLIBCXX_VERSION >= 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1300)\n    #elif _LIBCPP_VERSION\n        #define __TBB_EXCEPTION_PTR_PRESENT                 __GXX_EXPERIMENTAL_CXX0X__\n    #else\n        #define __TBB_EXCEPTION_PTR_PRESENT                 0\n    #endif\n    #define __TBB_STATIC_ASSERT_PRESENT                     (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40300 || _LIBCPP_VERSION))\n    #if (__clang__ && __INTEL_COMPILER > 1400)\n        /* Older versions of Intel C++ Compiler do not have __has_include */\n        #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n            #define __TBB_INITIALIZER_LISTS_PRESENT         1\n        #endif\n    #else\n        #define __TBB_INITIALIZER_LISTS_PRESENT             (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION))\n    #endif\n    #define __TBB_CONSTEXPR_PRESENT                         (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)\n    /** ICC seems to disable support of noexcept event in c++11 when compiling in compatibility mode for gcc <4.6 **/\n    #define __TBB_NOEXCEPT_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION || _MSC_VER))\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1310 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))\n    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_OVERRIDE_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)\n    #define __TBB_ALIGNAS_PRESENT                           (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1500)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#elif __clang__\n/** TODO: these options need to be rechecked **/\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __has_feature(__cxx_variadic_templates__)\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__has_feature(__cxx_rvalue_references__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40500))\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     __has_feature(cxx_implicit_moves)\n/** TODO: extend exception_ptr related conditions to cover libstdc++ **/\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (__cplusplus >= 201103L && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))\n    #define __TBB_STATIC_ASSERT_PRESENT                     __has_feature(__cxx_static_assert__)\n    /**Clang (preprocessor) has problems with dealing with expression having __has_include in #ifs\n     * used inside C++ code. (At least version that comes with OS X 10.8 : Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)) **/\n    #if (__GXX_EXPERIMENTAL_CXX0X__ && __has_include(<tuple>))\n        #define __TBB_CPP11_TUPLE_PRESENT                   1\n    #endif\n    #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n        #define __TBB_INITIALIZER_LISTS_PRESENT             1\n    #endif\n    #define __TBB_CONSTEXPR_PRESENT                         __has_feature(__cxx_constexpr__)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__has_feature(__cxx_defaulted_functions__) && __has_feature(__cxx_deleted_functions__))\n    /**For some unknown reason  __has_feature(__cxx_noexcept) does not yield true for all cases. Compiler bug ? **/\n    #define __TBB_NOEXCEPT_PRESENT                          (__cplusplus >= 201103L)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__has_feature(__cxx_range_for__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))\n    #define __TBB_CPP11_AUTO_PRESENT                        __has_feature(__cxx_auto_type__)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    __has_feature(__cxx_decltype__)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     __has_feature(cxx_lambdas)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  __has_feature(cxx_default_function_template_args)\n    #define __TBB_OVERRIDE_PRESENT                          __has_feature(cxx_override_control)\n    #define __TBB_ALIGNAS_PRESENT                           __has_feature(cxx_alignas)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            __has_feature(cxx_alias_templates)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#elif __GNUC__\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __GXX_EXPERIMENTAL_CXX0X__\n    #define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    /** __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 here is a substitution for _GLIBCXX_ATOMIC_BUILTINS_4, which is a prerequisite\n        for exception_ptr but cannot be used in this file because it is defined in a header, not by the compiler.\n        If the compiler has no atomic intrinsics, the C++ library should not expect those as well. **/\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40404 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __TBB_STATIC_ASSERT_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    /** gcc seems have to support constexpr from 4.4 but tests in (test_atomic) seeming reasonable fail to compile prior 4.6**/\n    #define __TBB_CONSTEXPR_PRESENT                         (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_NOEXCEPT_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_AUTO_PRESENT                        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_OVERRIDE_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_ALIGNAS_PRESENT                           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40800)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L     && __TBB_GCC_VERSION >= 50000)\n#elif _MSC_VER\n    // These definitions are also used with Intel C++ Compiler in \"default\" mode (__INTEL_CXX11_MODE__ == 0);\n    // see a comment in \"__INTEL_COMPILER\" section above.\n\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (_MSC_VER >= 1800)\n    // Contains a workaround for ICC 13\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (_MSC_VER >= 1700 && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1400))\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (_MSC_VER >= 1900)\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_STATIC_ASSERT_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600)\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 (_MSC_VER >= 1800)\n    #define __TBB_CONSTEXPR_PRESENT                         (_MSC_VER >= 1900)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (_MSC_VER >= 1800)\n    #define __TBB_NOEXCEPT_PRESENT                          (_MSC_VER >= 1900)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700)\n    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800)\n    #define __TBB_OVERRIDE_PRESENT                          (_MSC_VER >= 1700)\n    #define __TBB_ALIGNAS_PRESENT                           (_MSC_VER >= 1900)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (_MSC_VER >= 1800)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (_MSC_VER >= 1900)\n#else\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          0\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  0\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     0\n    #define __TBB_EXCEPTION_PTR_PRESENT                     0\n    #define __TBB_STATIC_ASSERT_PRESENT                     0\n    #define __TBB_CPP11_TUPLE_PRESENT                       0\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 0\n    #define __TBB_CONSTEXPR_PRESENT                         0\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        0\n    #define __TBB_NOEXCEPT_PRESENT                          0\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               0\n    #define __TBB_CPP11_AUTO_PRESENT                        0\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    0\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     0\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  0\n    #define __TBB_OVERRIDE_PRESENT                          0\n    #define __TBB_ALIGNAS_PRESENT                           0\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            0\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#endif\n\n// C++11 standard library features\n\n#define __TBB_CPP11_ARRAY_PRESENT                           (_MSC_VER >= 1700 || _LIBCPP_VERSION || __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40300)\n\n#ifndef __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT\n#define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT       __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif\n#define __TBB_CPP11_VARIADIC_TUPLE_PRESENT                  (!_MSC_VER || _MSC_VER >=1800)\n\n#define __TBB_CPP11_TYPE_PROPERTIES_PRESENT                 (_LIBCPP_VERSION || _MSC_VER >= 1700 || (__TBB_GLIBCXX_VERSION >= 50000 && __GXX_EXPERIMENTAL_CXX0X__))\n#define __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT            (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40300 || _MSC_VER >= 1600)\n// GCC supported some of type properties since 4.7\n#define __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 || __TBB_CPP11_TYPE_PROPERTIES_PRESENT)\n\n// In GCC, std::move_if_noexcept appeared later than noexcept\n#define __TBB_MOVE_IF_NOEXCEPT_PRESENT                      (__TBB_NOEXCEPT_PRESENT && (__TBB_GLIBCXX_VERSION >= 40700 || _MSC_VER >= 1900 || _LIBCPP_VERSION))\n#define __TBB_ALLOCATOR_TRAITS_PRESENT                      (__cplusplus >= 201103L && _LIBCPP_VERSION  || _MSC_VER >= 1700 ||  \\\n                                                            __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 && !(__TBB_GLIBCXX_VERSION == 40700 && __TBB_DEFINE_MIC))\n#define __TBB_MAKE_EXCEPTION_PTR_PRESENT                    (__TBB_EXCEPTION_PTR_PRESENT && (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))\n\n// Due to libc++ limitations in C++03 mode, do not pass rvalues to std::make_shared()\n#define __TBB_CPP11_SMART_POINTERS_PRESENT                  ( _MSC_VER >= 1600 || _LIBCPP_VERSION   \\\n                                                            || ((__cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__)  \\\n                                                            && (__TBB_GLIBCXX_VERSION>=40500 || __TBB_GLIBCXX_VERSION>=40400 && __TBB_USE_OPTIONAL_RTTI)) )\n\n#define __TBB_CPP11_FUTURE_PRESENT                          (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 && _GXX_EXPERIMENTAL_CXX0X__ || _LIBCPP_VERSION)\n\n// std::swap is in <utility> only since C++11, though MSVC had it at least since VS2005\n#if _MSC_VER>=1400 || _LIBCPP_VERSION || __GXX_EXPERIMENTAL_CXX0X__\n#define __TBB_STD_SWAP_HEADER <utility>\n#else\n#define __TBB_STD_SWAP_HEADER <algorithm>\n#endif\n\n//TODO: not clear how exactly this macro affects exception_ptr - investigate\n// On linux ICC fails to find existing std::exception_ptr in libstdc++ without this define\n#if __INTEL_COMPILER && __GNUC__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\n#endif\n\n// Work around a bug in MinGW32\n#if __MINGW32__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(_GLIBCXX_ATOMIC_BUILTINS_4)\n    #define _GLIBCXX_ATOMIC_BUILTINS_4\n#endif\n\n#if __GNUC__ || __SUNPRO_CC || __IBMCPP__\n    /* ICC defines __GNUC__ and so is covered */\n    #define __TBB_ATTRIBUTE_ALIGNED_PRESENT 1\n#elif _MSC_VER && (_MSC_VER >= 1300 || __INTEL_COMPILER)\n    #define __TBB_DECLSPEC_ALIGN_PRESENT 1\n#endif\n\n/* Actually ICC supports gcc __sync_* intrinsics starting 11.1,\n * but 64 bit support for 32 bit target comes in later ones*/\n/* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */\n/* Assumed that all clang versions have these gcc compatible intrinsics. */\n#if __TBB_GCC_VERSION >= 40306 || __INTEL_COMPILER >= 1200 || __clang__\n    /** built-in atomics available in GCC since 4.1.2 **/\n    #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#if __INTEL_COMPILER >= 1200\n    /** built-in C++11 style atomics available in ICC since 12.0 **/\n    #define __TBB_ICC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#define __TBB_TSX_INTRINSICS_PRESENT ((__RTM__ || _MSC_VER>=1700 || __INTEL_COMPILER>=1300) && !__TBB_DEFINE_MIC && !__ANDROID__)\n\n/** Macro helpers **/\n#define __TBB_CONCAT_AUX(A,B) A##B\n// The additional level of indirection is needed to expand macros A and B (not to get the AB macro).\n// See [cpp.subst] and [cpp.concat] for more details.\n#define __TBB_CONCAT(A,B) __TBB_CONCAT_AUX(A,B)\n// The IGNORED argument and comma are needed to always have 2 arguments (even when A is empty).\n#define __TBB_IS_MACRO_EMPTY(A,IGNORED) __TBB_CONCAT_AUX(__TBB_MACRO_EMPTY,A)\n#define __TBB_MACRO_EMPTY 1\n\n/** User controlled TBB features & modes **/\n#ifndef TBB_USE_DEBUG\n/*\nThere are four cases that are supported:\n  1. \"_DEBUG is undefined\" means \"no debug\";\n  2. \"_DEBUG defined to something that is evaluated to 0\" (including \"garbage\", as per [cpp.cond]) means \"no debug\";\n  3. \"_DEBUG defined to something that is evaluated to a non-zero value\" means \"debug\";\n  4. \"_DEBUG defined to nothing (empty)\" means \"debug\".\n*/\n#ifdef _DEBUG\n// Check if _DEBUG is empty.\n#define __TBB_IS__DEBUG_EMPTY (__TBB_IS_MACRO_EMPTY(_DEBUG,IGNORED)==__TBB_MACRO_EMPTY)\n#if __TBB_IS__DEBUG_EMPTY\n#define TBB_USE_DEBUG 1\n#else\n#define TBB_USE_DEBUG _DEBUG\n#endif /* __TBB_IS__DEBUG_EMPTY */\n#else\n#define TBB_USE_DEBUG 0\n#endif\n#endif /* TBB_USE_DEBUG */\n\n#ifndef TBB_USE_ASSERT\n#define TBB_USE_ASSERT TBB_USE_DEBUG\n#endif /* TBB_USE_ASSERT */\n\n#ifndef TBB_USE_THREADING_TOOLS\n#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG\n#endif /* TBB_USE_THREADING_TOOLS */\n\n#ifndef TBB_USE_PERFORMANCE_WARNINGS\n#ifdef TBB_PERFORMANCE_WARNINGS\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS\n#else\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG\n#endif /* TBB_PERFORMANCE_WARNINGS */\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n\n#if __TBB_DEFINE_MIC\n    #if TBB_USE_EXCEPTIONS\n        #error The platform does not properly support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !(__EXCEPTIONS || defined(_CPPUNWIND) || __SUNPRO_CC)\n    #if TBB_USE_EXCEPTIONS\n        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !defined(TBB_USE_EXCEPTIONS)\n    #define TBB_USE_EXCEPTIONS 1\n#endif\n\n#ifndef TBB_IMPLEMENT_CPP0X\n/** By default, use C++11 classes if available **/\n    #if __clang__\n        /* Old versions of Intel C++ Compiler do not have __has_include or cannot use it in #define */\n        #if (__INTEL_COMPILER && (__INTEL_COMPILER < 1500 || __INTEL_COMPILER == 1500 && __INTEL_COMPILER_UPDATE <= 1))\n            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || !_LIBCPP_VERSION)\n        #else\n            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || (!__has_include(<thread>) && !__has_include(<condition_variable>)))\n        #endif\n    #elif __GNUC__\n        #define TBB_IMPLEMENT_CPP0X (__TBB_GCC_VERSION < 40400 || !__GXX_EXPERIMENTAL_CXX0X__)\n    #elif _MSC_VER\n        #define TBB_IMPLEMENT_CPP0X (_MSC_VER < 1700)\n    #else\n        // TODO: Reconsider general approach to be more reliable, e.g. (!(__cplusplus >= 201103L && __ STDC_HOSTED__))\n        #define TBB_IMPLEMENT_CPP0X (!__STDCPP_THREADS__)\n    #endif\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n/* TBB_USE_CAPTURED_EXCEPTION should be explicitly set to either 0 or 1, as it is used as C++ const */\n#ifndef TBB_USE_CAPTURED_EXCEPTION\n    /** IA-64 architecture pre-built TBB binaries do not support exception_ptr. **/\n    #if __TBB_EXCEPTION_PTR_PRESENT && !defined(__ia64__)\n        #define TBB_USE_CAPTURED_EXCEPTION 0\n    #else\n        #define TBB_USE_CAPTURED_EXCEPTION 1\n    #endif\n#else /* defined TBB_USE_CAPTURED_EXCEPTION */\n    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT\n        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.\n    #endif\n#endif /* defined TBB_USE_CAPTURED_EXCEPTION */\n\n/** Check whether the request to use GCC atomics can be satisfied **/\n#if TBB_USE_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT\n    #error \"GCC atomic built-ins are not supported.\"\n#endif\n\n/** Internal TBB features & modes **/\n\n/** __TBB_WEAK_SYMBOLS_PRESENT denotes that the system supports the weak symbol mechanism **/\n#ifndef __TBB_WEAK_SYMBOLS_PRESENT\n#define __TBB_WEAK_SYMBOLS_PRESENT ( !_WIN32 && !__APPLE__ && !__sun && (__TBB_GCC_VERSION >= 40000 || __INTEL_COMPILER ) )\n#endif\n\n/** __TBB_DYNAMIC_LOAD_ENABLED describes the system possibility to load shared libraries at run time **/\n#ifndef __TBB_DYNAMIC_LOAD_ENABLED\n    #define __TBB_DYNAMIC_LOAD_ENABLED 1\n#endif\n\n/** __TBB_SOURCE_DIRECTLY_INCLUDED is a mode used in whitebox testing when\n    it's necessary to test internal functions not exported from TBB DLLs\n**/\n#if (_WIN32||_WIN64) && (__TBB_SOURCE_DIRECTLY_INCLUDED || TBB_USE_PREVIEW_BINARY)\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#ifndef __TBB_COUNT_TASK_NODES\n    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT\n#endif\n\n#ifndef __TBB_TASK_GROUP_CONTEXT\n    #define __TBB_TASK_GROUP_CONTEXT 1\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#ifndef __TBB_SCHEDULER_OBSERVER\n    #define __TBB_SCHEDULER_OBSERVER 1\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#ifndef __TBB_FP_CONTEXT\n    #define __TBB_FP_CONTEXT __TBB_TASK_GROUP_CONTEXT\n#endif /* __TBB_FP_CONTEXT */\n\n#if __TBB_FP_CONTEXT && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_FP_CONTEXT requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#define __TBB_RECYCLE_TO_ENQUEUE __TBB_BUILD // keep non-official\n\n#ifndef __TBB_ARENA_OBSERVER\n    #define __TBB_ARENA_OBSERVER ((__TBB_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_ARENA_OBSERVER */\n\n#ifndef __TBB_SLEEP_PERMISSION\n    #define __TBB_SLEEP_PERMISSION ((__TBB_CPF_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_SLEEP_PERMISSION */\n\n#ifndef __TBB_TASK_ISOLATION\n    #define __TBB_TASK_ISOLATION 1\n#endif /* __TBB_TASK_ISOLATION */\n\n#if (TBB_PREVIEW_FLOW_GRAPH_TRACE || TBB_PREVIEW_ALGORITHM_TRACE)\n// Users of flow-graph and algorithm trace need to explicitly link against the preview\n// library. This prevents the linker from implicitly linking an application with a preview\n// version of TBB and unexpectedly bringing in other community preview features, which\n// might change the behavior of the application.\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif /* TBB_PREVIEW_FLOW_GRAPH_TRACE */\n\n#ifndef __TBB_ITT_STRUCTURE_API\n#define __TBB_ITT_STRUCTURE_API ( (__TBB_CPF_BUILD || TBB_PREVIEW_FLOW_GRAPH_TRACE || TBB_PREVIEW_ALGORITHM_TRACE) \\\n                                  && !(__TBB_DEFINE_MIC || __MINGW64__ || __MINGW32__) )\n#endif\n\n#if TBB_USE_EXCEPTIONS && !__TBB_TASK_GROUP_CONTEXT\n    #error TBB_USE_EXCEPTIONS requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#ifndef __TBB_TASK_PRIORITY\n    #define __TBB_TASK_PRIORITY (__TBB_TASK_GROUP_CONTEXT)\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#if TBB_PREVIEW_WAITING_FOR_WORKERS || __TBB_BUILD\n    #define __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE 1\n#endif\n\n#ifndef __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    #define __TBB_ENQUEUE_ENFORCED_CONCURRENCY 1\n#endif\n\n#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && \\\n          (_WIN32 || _WIN64 || __APPLE__ || (__linux__ && !__ANDROID__))\n    #define __TBB_SURVIVE_THREAD_SWITCH 1\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n#ifndef __TBB_DEFAULT_PARTITIONER\n#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner\n#endif\n\n#ifndef __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n#define __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES 1\n#endif\n\n#ifndef __TBB_ENABLE_RANGE_FEEDBACK\n#define __TBB_ENABLE_RANGE_FEEDBACK 0\n#endif\n\n#ifdef _VARIADIC_MAX\n    #define __TBB_VARIADIC_MAX _VARIADIC_MAX\n#else\n    #if _MSC_VER == 1700\n        #define __TBB_VARIADIC_MAX 5 // VS11 setting, issue resolved in VS12\n    #elif _MSC_VER == 1600\n        #define __TBB_VARIADIC_MAX 10 // VS10 setting\n    #else\n        #define __TBB_VARIADIC_MAX 15\n    #endif\n#endif\n\n/** __TBB_WIN8UI_SUPPORT enables support of Windows* Store Apps and limit a possibility to load\n    shared libraries at run time only from application container **/\n#if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP\n    #define __TBB_WIN8UI_SUPPORT 1\n#else\n    #define __TBB_WIN8UI_SUPPORT 0\n#endif\n\n/** Macros of the form __TBB_XXX_BROKEN denote known issues that are caused by\n    the bugs in compilers, standard or OS specific libraries. They should be\n    removed as soon as the corresponding bugs are fixed or the buggy OS/compiler\n    versions go out of the support list.\n**/\n\n#if __SIZEOF_POINTER__ < 8 && __ANDROID__ && __TBB_GCC_VERSION <= 40403 && !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8\n    /** Necessary because on Android 8-byte CAS and F&A are not available for some processor architectures,\n        but no mandatory warning message appears from GCC 4.4.3. Instead, only a linkage error occurs when\n        these atomic operations are used (such as in unit test test_atomic.exe). **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#elif __TBB_x86_32 && __TBB_GCC_VERSION == 40102 && ! __GNUC_RH_RELEASE__\n    /** GCC 4.1.2 erroneously emit call to external function for 64 bit sync_ intrinsics.\n        However these functions are not defined anywhere. It seems that this problem was fixed later on\n        and RHEL got an updated version of gcc 4.1.2. **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#endif\n\n#if __GNUC__ && __TBB_x86_64 && __INTEL_COMPILER == 1200\n    #define __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN 1\n#endif\n\n#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)\n    /** Necessary to avoid ICL error (or warning in non-strict mode):\n        \"exception specification for implicitly declared virtual destructor is\n        incompatible with that of overridden one\". **/\n    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER < 1500 || __GNUC__ && __TBB_GCC_VERSION < 40102)\n    /** gcc 3.4.6 (and earlier) and VS2005 (and earlier) do not allow declaring template class as a friend\n        of classes defined in other namespaces. **/\n    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1\n#endif\n\n#if __GLIBC__==2 && __GLIBC_MINOR__==3 ||  (__APPLE__ && ( __INTEL_COMPILER==1200 && !TBB_USE_DEBUG))\n    /** Macro controlling EH usages in TBB tests.\n        Some older versions of glibc crash when exception handling happens concurrently. **/\n    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1\n#endif\n\n#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110\n    /** That's a bug in Intel C++ Compiler 11.1.044/IA-32 architecture/Windows* OS, that leads to a worker thread crash on the thread's startup. **/\n    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1\n#endif\n\n#if __clang__ || (__GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER))\n    /** Bugs with access to nested classes declared in protected area */\n    #define __TBB_PROTECTED_NESTED_CLASS_BROKEN 1\n#endif\n\n#if __MINGW32__ && __TBB_GCC_VERSION < 40200\n    /** MinGW has a bug with stack alignment for routines invoked from MS RTLs.\n        Since GCC 4.2, the bug can be worked around via a special attribute. **/\n    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1\n#endif\n\n#if __TBB_GCC_VERSION==40300 && !__INTEL_COMPILER && !__clang__\n    /* GCC of this version may rashly ignore control dependencies */\n    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1\n#endif\n\n#if __FreeBSD__\n    /** A bug in FreeBSD 8.0 results in kernel panic when there is contention\n        on a mutex created with this attribute. **/\n    #define __TBB_PRIO_INHERIT_BROKEN 1\n\n    /** A bug in FreeBSD 8.0 results in test hanging when an exception occurs\n        during (concurrent?) object construction by means of placement new operator. **/\n    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1\n#endif /* __FreeBSD__ */\n\n#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)\n    /** The Intel C++ Compiler for IA-32 architecture (Linux* OS|macOS) crashes or generates\n        incorrect code when __asm__ arguments have a cast to volatile. **/\n    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER || __GNUC__==3 && __GNUC_MINOR__<=2)\n    /** Bug in GCC 3.2 and MSVC compilers that sometimes return 0 for __alignof(T)\n        when T has not yet been instantiated. **/\n    #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1\n#endif\n\n#if __TBB_DEFINE_MIC\n    /** Main thread and user's thread have different default thread affinity masks. **/\n    #define __TBB_MAIN_THREAD_AFFINITY_BROKEN 1\n#endif\n\n#if __GXX_EXPERIMENTAL_CXX0X__ && !defined(__EXCEPTIONS) && \\\n    ((!__INTEL_COMPILER && !__clang__ && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<40600)) || \\\n     (__INTEL_COMPILER<=1400 && (__TBB_GLIBCXX_VERSION>=40400 && __TBB_GLIBCXX_VERSION<=40801)))\n/* There is an issue for specific GCC toolchain when C++11 is enabled\n   and exceptions are disabled:\n   exceprion_ptr.h/nested_exception.h use throw unconditionally.\n   GCC can ignore 'throw' since 4.6; but with ICC the issue still exists.\n */\n    #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 1\n#endif\n\n#if __INTEL_COMPILER==1300 && __TBB_GLIBCXX_VERSION>=40700 && defined(__GXX_EXPERIMENTAL_CXX0X__)\n/* Some C++11 features used inside libstdc++ are not supported by Intel C++ Compiler. */\n    #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 1\n#endif\n\n#if (__GNUC__==4 && __GNUC_MINOR__==4 ) && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    /** excessive warnings related to strict aliasing rules in GCC 4.4 **/\n    #define __TBB_GCC_STRICT_ALIASING_BROKEN 1\n    /* topical remedy: #pragma GCC diagnostic ignored \"-Wstrict-aliasing\" */\n    #if !__TBB_GCC_WARNING_SUPPRESSION_PRESENT\n        #error Warning suppression is not supported, while should.\n    #endif\n#endif\n\n/* In a PIC mode some versions of GCC 4.1.2 generate incorrect inlined code for 8 byte __sync_val_compare_and_swap intrinsic */\n#if __TBB_GCC_VERSION == 40102 && __PIC__ && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    #define __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN 1\n#endif\n\n#if __TBB_x86_32 && ( __INTEL_COMPILER || (__GNUC__==5 && __GNUC_MINOR__>=2 && __GXX_EXPERIMENTAL_CXX0X__) \\\n    || (__GNUC__==3 && __GNUC_MINOR__==3) || (__MINGW32__ && __GNUC__==4 && __GNUC_MINOR__==5) || __SUNPRO_CC )\n    // Some compilers for IA-32 architecture fail to provide 8-byte alignment of objects on the stack,\n    // even if the object specifies 8-byte alignment. On such platforms, the implementation\n    // of 64 bit atomics for IA-32 architecture (e.g. atomic<long long>) use different tactics\n    // depending upon whether the object is properly aligned or not.\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 1\n#else\n    // Define to 0 explicitly because the macro is used in a compiled code of test_atomic\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 0\n#endif\n\n#if __GNUC__ && !__INTEL_COMPILER && !__clang__ && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && __TBB_GCC_VERSION < 40700\n    #define __TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN 1\n#endif\n\n#if _MSC_VER && _MSC_VER <= 1800 && !__INTEL_COMPILER\n    // With MSVC, when an array is passed by const reference to a template function,\n    // constness from the function parameter may get propagated to the template parameter.\n    #define __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 1\n#endif\n\n// A compiler bug: a disabled copy constructor prevents use of the moving constructor\n#define __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN (_MSC_VER && (__INTEL_COMPILER >= 1300 && __INTEL_COMPILER <= 1310) && !__INTEL_CXX11_MODE__)\n\n#define __TBB_CPP11_DECLVAL_BROKEN (_MSC_VER == 1600 || (__GNUC__ && __TBB_GCC_VERSION < 40500) )\n// Intel C++ Compiler has difficulties with copying std::pair with VC11 std::reference_wrapper being a const member\n#define __TBB_COPY_FROM_NON_CONST_REF_BROKEN (_MSC_VER == 1700 && __INTEL_COMPILER && __INTEL_COMPILER < 1600)\n\n// The implicit upcasting of the tuple of a reference of a derived class to a base class fails on icc 13.X if the system's gcc environment is 4.8\n// Also in gcc 4.4 standard library the implementation of the tuple<&> conversion (tuple<A&> a = tuple<B&>, B is inherited from A) is broken.\n#if __GXX_EXPERIMENTAL_CXX0X__ && __GLIBCXX__ && ((__INTEL_COMPILER >=1300 && __INTEL_COMPILER <=1310 && __TBB_GLIBCXX_VERSION>=40700) || (__TBB_GLIBCXX_VERSION < 40500))\n#define __TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN 1\n#endif\n\n// In some cases decltype of a function adds a reference to a return type.\n#define __TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN (_MSC_VER == 1600 && !__INTEL_COMPILER)\n\n/** End of __TBB_XXX_BROKEN macro section **/\n\n#if defined(_MSC_VER) && _MSC_VER>=1500 && !defined(__INTEL_COMPILER)\n    // A macro to suppress erroneous or benign \"unreachable code\" MSVC warning (4702)\n    #define __TBB_MSVC_UNREACHABLE_CODE_IGNORED 1\n#endif\n\n#define __TBB_ATOMIC_CTORS     (__TBB_CONSTEXPR_PRESENT && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && (!__TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN))\n\n// Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang\n// Setting the workaround for all compile targets ($APP_PLATFORM) below Android 4.4 (android-19)\n#if __ANDROID__\n#include <android/api-level.h>\n#define __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND  (__ANDROID_API__ < 19)\n#endif\n\n#define __TBB_ALLOCATOR_CONSTRUCT_VARIADIC      (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n\n#define __TBB_VARIADIC_PARALLEL_INVOKE          (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n#define __TBB_FLOW_GRAPH_CPP11_FEATURES         (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n                                                && __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_AUTO_PRESENT) \\\n                                                && __TBB_CPP11_VARIADIC_TUPLE_PRESENT && __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT \\\n                                                && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN\n#define __TBB_PREVIEW_STREAMING_NODE            (__TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT && __TBB_FLOW_GRAPH_CPP11_FEATURES \\\n                                                && TBB_PREVIEW_FLOW_GRAPH_NODES && !TBB_IMPLEMENT_CPP0X && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN)\n#define __TBB_PREVIEW_OPENCL_NODE               (__TBB_PREVIEW_STREAMING_NODE && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT)\n#define __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING (TBB_PREVIEW_FLOW_GRAPH_FEATURES || __TBB_PREVIEW_OPENCL_NODE)\n#define __TBB_PREVIEW_ASYNC_MSG                 (TBB_PREVIEW_FLOW_GRAPH_FEATURES && __TBB_FLOW_GRAPH_CPP11_FEATURES)\n\n#define __TBB_PREVIEW_GFX_FACTORY               (__TBB_GFX_PRESENT && TBB_PREVIEW_FLOW_GRAPH_FEATURES && !__TBB_MIC_OFFLOAD \\\n                                                && __TBB_FLOW_GRAPH_CPP11_FEATURES && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT \\\n                                                && __TBB_CPP11_FUTURE_PRESENT)\n\n#ifndef __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n#define __TBB_PREVIEW_LIGHTWEIGHT_POLICY TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#endif\n\n#endif /* __TBB_tbb_config_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_disable_exceptions.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//! To disable use of exceptions, include this header before any other header file from the library.\n\n//! The macro that prevents use of exceptions in the library files\n#undef  TBB_USE_EXCEPTIONS\n#define TBB_USE_EXCEPTIONS 0\n\n//! Prevent compilers from issuing exception related warnings.\n/** Note that the warnings are suppressed for all the code after this header is included. */\n#if _MSC_VER\n#if __INTEL_COMPILER\n    #pragma warning (disable: 583)\n#else\n    #pragma warning (disable: 4530 4577)\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_exception.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_exception_H\n#define __TBB_exception_H\n\n#include \"tbb_stddef.h\"\n#include <exception>\n#include <new>    // required for bad_alloc definition, operators new\n#include <string> // required to construct std exception classes\n\nnamespace tbb {\n\n//! Exception for concurrent containers\nclass bad_last_alloc : public std::bad_alloc {\npublic:\n    const char* what() const throw() __TBB_override;\n#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN\n    ~bad_last_alloc() throw() __TBB_override {}\n#endif\n};\n\n//! Exception for PPL locks\nclass improper_lock : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for user-initiated abort\nclass user_abort : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for missing wait on structured_task_group\nclass missing_wait : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for repeated scheduling of the same task_handle\nclass invalid_multiple_scheduling : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\nnamespace internal {\n//! Obsolete\nvoid __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();\n\nenum exception_id {\n    eid_bad_alloc = 1,\n    eid_bad_last_alloc,\n    eid_nonpositive_step,\n    eid_out_of_range,\n    eid_segment_range_error,\n    eid_index_range_error,\n    eid_missing_wait,\n    eid_invalid_multiple_scheduling,\n    eid_improper_lock,\n    eid_possible_deadlock,\n    eid_operation_not_permitted,\n    eid_condvar_wait_failed,\n    eid_invalid_load_factor,\n    eid_reserved, // free slot for backward compatibility, can be reused.\n    eid_invalid_swap,\n    eid_reservation_length_error,\n    eid_invalid_key,\n    eid_user_abort,\n    eid_reserved1,\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    // This id is used only from inside the library and only for support of CPF functionality.\n    // So, if we drop the functionality, eid_reserved1 can be safely renamed and reused.\n    eid_blocking_thread_join_impossible = eid_reserved1,\n#endif\n    eid_bad_tagged_msg_cast,\n    //! The last enumerator tracks the number of defined IDs. It must remain the last one.\n    /** When adding new IDs, place them immediately _before_ this comment (that is\n        _after_ all the existing IDs. NEVER insert new IDs between the existing ones. **/\n    eid_max\n};\n\n//! Gathers all throw operators in one place.\n/** Its purpose is to minimize code bloat that can be caused by throw operators\n    scattered in multiple places, especially in templates. **/\nvoid __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );\n\n//! Versionless convenience wrapper for throw_exception_v4()\ninline void throw_exception ( exception_id eid ) { throw_exception_v4(eid); }\n\n} // namespace internal\n} // namespace tbb\n\n#if __TBB_TASK_GROUP_CONTEXT\n#include \"tbb_allocator.h\"\n#include <typeinfo> //for typeid\n\nnamespace tbb {\n\n//! Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.\n/** If an unhandled exception of the type derived from tbb::tbb_exception is intercepted\n    by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in\n    the root thread. The root thread is the thread that has started the outermost algorithm\n    or root task sharing the same task_group_context with the guilty algorithm/task (the one\n    that threw the exception first).\n\n    Note: when documentation mentions workers with respect to exception handling,\n    masters are implied as well, because they are completely equivalent in this context.\n    Consequently a root thread can be master or worker thread.\n\n    NOTE: In case of nested algorithms or complex task hierarchies when the nested\n    levels share (explicitly or by means of implicit inheritance) the task group\n    context of the outermost level, the exception may be (re-)thrown multiple times\n    (ultimately - in each worker on each nesting level) before reaching the root\n    thread at the outermost level. IMPORTANT: if you intercept an exception derived\n    from this class on a nested level, you must re-throw it in the catch block by means\n    of the \"throw;\" operator.\n\n    TBB provides two implementations of this interface: tbb::captured_exception and\n    template class tbb::movable_exception. See their declarations for more info. **/\nclass tbb_exception : public std::exception\n{\n    /** No operator new is provided because the TBB usage model assumes dynamic\n        creation of the TBB exception objects only by means of applying move()\n        operation on an exception thrown out of TBB scheduler. **/\n    void* operator new ( size_t );\n\npublic:\n#if __clang__\n    // At -O3 or even -O2 optimization level, Clang may fully throw away an empty destructor\n    // of tbb_exception from destructors of derived classes. As a result, it does not create\n    // vtable for tbb_exception, which is a required part of TBB binary interface.\n    // Making the destructor non-empty (with just a semicolon) prevents that optimization.\n    ~tbb_exception() throw() { /* keep the semicolon! */ ; }\n#endif\n\n    //! Creates and returns pointer to the deep copy of this exception object.\n    /** Move semantics is allowed. **/\n    virtual tbb_exception* move() throw() = 0;\n\n    //! Destroys objects created by the move() method.\n    /** Frees memory and calls destructor for this exception object.\n        Can and must be used only on objects created by the move method. **/\n    virtual void destroy() throw() = 0;\n\n    //! Throws this exception object.\n    /** Make sure that if you have several levels of derivation from this interface\n        you implement or override this method on the most derived level. The implementation\n        is as simple as \"throw *this;\". Failure to do this will result in exception\n        of a base class type being thrown. **/\n    virtual void throw_self() = 0;\n\n    //! Returns RTTI name of the originally intercepted exception\n    virtual const char* name() const throw() = 0;\n\n    //! Returns the result of originally intercepted exception's what() method.\n    virtual const char* what() const throw() __TBB_override = 0;\n\n    /** Operator delete is provided only to allow using existing smart pointers\n        with TBB exception objects obtained as the result of applying move()\n        operation on an exception thrown out of TBB scheduler.\n\n        When overriding method move() make sure to override operator delete as well\n        if memory is allocated not by TBB's scalable allocator. **/\n    void operator delete ( void* p ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n};\n\n//! This class is used by TBB to propagate information about unhandled exceptions into the root thread.\n/** Exception of this type is thrown by TBB in the root thread (thread that started a parallel\n    algorithm ) if an unhandled exception was intercepted during the algorithm execution in one\n    of the workers.\n    \\sa tbb::tbb_exception **/\nclass captured_exception : public tbb_exception\n{\npublic:\n    captured_exception( const captured_exception& src )\n        : tbb_exception(src), my_dynamic(false)\n    {\n        set(src.my_exception_name, src.my_exception_info);\n    }\n\n    captured_exception( const char* name_, const char* info )\n        : my_dynamic(false)\n    {\n        set(name_, info);\n    }\n\n    __TBB_EXPORTED_METHOD ~captured_exception() throw();\n\n    captured_exception& operator= ( const captured_exception& src ) {\n        if ( this != &src ) {\n            clear();\n            set(src.my_exception_name, src.my_exception_info);\n        }\n        return *this;\n    }\n\n    captured_exception* __TBB_EXPORTED_METHOD move() throw() __TBB_override;\n\n    void __TBB_EXPORTED_METHOD destroy() throw() __TBB_override;\n\n    void throw_self() __TBB_override { __TBB_THROW(*this); }\n\n    const char* __TBB_EXPORTED_METHOD name() const throw() __TBB_override;\n\n    const char* __TBB_EXPORTED_METHOD what() const throw() __TBB_override;\n\n    void __TBB_EXPORTED_METHOD set( const char* name, const char* info ) throw();\n    void __TBB_EXPORTED_METHOD clear() throw();\n\nprivate:\n    //! Used only by method move().\n    captured_exception() {}\n\n    //! Functionally equivalent to {captured_exception e(name,info); return e.move();}\n    static captured_exception* allocate( const char* name, const char* info );\n\n    bool my_dynamic;\n    const char* my_exception_name;\n    const char* my_exception_info;\n};\n\n//! Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread\n/** Code using TBB can instantiate this template with an arbitrary ExceptionData type\n    and throw this exception object. Such exceptions are intercepted by the TBB scheduler\n    and delivered to the root thread ().\n    \\sa tbb::tbb_exception **/\ntemplate<typename ExceptionData>\nclass movable_exception : public tbb_exception\n{\n    typedef movable_exception<ExceptionData> self_type;\n\npublic:\n    movable_exception( const ExceptionData& data_ )\n        : my_exception_data(data_)\n        , my_dynamic(false)\n        , my_exception_name(\n#if TBB_USE_EXCEPTIONS\n        typeid(self_type).name()\n#else /* !TBB_USE_EXCEPTIONS */\n        \"movable_exception\"\n#endif /* !TBB_USE_EXCEPTIONS */\n        )\n    {}\n\n    movable_exception( const movable_exception& src ) throw ()\n        : tbb_exception(src)\n        , my_exception_data(src.my_exception_data)\n        , my_dynamic(false)\n        , my_exception_name(src.my_exception_name)\n    {}\n\n    ~movable_exception() throw() {}\n\n    const movable_exception& operator= ( const movable_exception& src ) {\n        if ( this != &src ) {\n            my_exception_data = src.my_exception_data;\n            my_exception_name = src.my_exception_name;\n        }\n        return *this;\n    }\n\n    ExceptionData& data() throw() { return my_exception_data; }\n\n    const ExceptionData& data() const throw() { return my_exception_data; }\n\n    const char* name() const throw() __TBB_override { return my_exception_name; }\n\n    const char* what() const throw() __TBB_override { return \"tbb::movable_exception\"; }\n\n    movable_exception* move() throw() __TBB_override {\n        void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));\n        if ( e ) {\n            ::new (e) movable_exception(*this);\n            ((movable_exception*)e)->my_dynamic = true;\n        }\n        return (movable_exception*)e;\n    }\n    void destroy() throw() __TBB_override {\n        __TBB_ASSERT ( my_dynamic, \"Method destroy can be called only on dynamically allocated movable_exceptions\" );\n        if ( my_dynamic ) {\n            this->~movable_exception();\n            internal::deallocate_via_handler_v3(this);\n        }\n    }\n    void throw_self() __TBB_override { __TBB_THROW( *this ); }\n\nprotected:\n    //! User data\n    ExceptionData  my_exception_data;\n\nprivate:\n    //! Flag specifying whether this object has been dynamically allocated (by the move method)\n    bool my_dynamic;\n\n    //! RTTI name of this class\n    /** We rely on the fact that RTTI names are static string constants. **/\n    const char* my_exception_name;\n};\n\n#if !TBB_USE_CAPTURED_EXCEPTION\nnamespace internal {\n\n//! Exception container that preserves the exact copy of the original exception\n/** This class can be used only when the appropriate runtime support (mandated\n    by C++11) is present **/\nclass tbb_exception_ptr {\n    std::exception_ptr  my_ptr;\n\npublic:\n    static tbb_exception_ptr* allocate();\n    static tbb_exception_ptr* allocate( const tbb_exception& tag );\n    //! This overload uses move semantics (i.e. it empties src)\n    static tbb_exception_ptr* allocate( captured_exception& src );\n\n    //! Destroys this objects\n    /** Note that objects of this type can be created only by the allocate() method. **/\n    void destroy() throw();\n\n    //! Throws the contained exception .\n    void throw_self() { std::rethrow_exception(my_ptr); }\n\nprivate:\n    tbb_exception_ptr( const std::exception_ptr& src ) : my_ptr(src) {}\n    tbb_exception_ptr( const captured_exception& src ) :\n        #if __TBB_MAKE_EXCEPTION_PTR_PRESENT\n            my_ptr(std::make_exception_ptr(src))  // the final function name in C++11\n        #else\n            my_ptr(std::copy_exception(src))      // early C++0x drafts name\n        #endif\n    {}\n}; // class tbb::internal::tbb_exception_ptr\n\n} // namespace internal\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_exception_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_machine.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_H\n#define __TBB_machine_H\n\n/** This header provides basic platform abstraction layer by hooking up appropriate\n    architecture/OS/compiler specific headers from the /include/tbb/machine directory.\n    If a plug-in header does not implement all the required APIs, it must specify\n    the missing ones by setting one or more of the following macros:\n\n    __TBB_USE_GENERIC_PART_WORD_CAS\n    __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n    __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n    __TBB_USE_GENERIC_FETCH_ADD\n    __TBB_USE_GENERIC_FETCH_STORE\n    __TBB_USE_GENERIC_DWORD_FETCH_ADD\n    __TBB_USE_GENERIC_DWORD_FETCH_STORE\n    __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n    __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\n    __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n    __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n\n    In this case tbb_machine.h will add missing functionality based on a minimal set\n    of APIs that are required to be implemented by all plug-n headers as described\n    further.\n    Note that these generic implementations may be sub-optimal for a particular\n    architecture, and thus should be relied upon only after careful evaluation\n    or as the last resort.\n\n    Additionally __TBB_64BIT_ATOMICS can be set to 0 on a 32-bit architecture to\n    indicate that the port is not going to support double word atomics. It may also\n    be set to 1 explicitly, though normally this is not necessary as tbb_machine.h\n    will set it automatically.\n\n    __TBB_ENDIANNESS macro can be defined by the implementation as well.\n    It is used only if __TBB_USE_GENERIC_PART_WORD_CAS is set (or for testing),\n    and must specify the layout of aligned 16-bit and 32-bit data anywhere within a process\n    (while the details of unaligned 16-bit or 32-bit data or of 64-bit data are irrelevant).\n    The layout must be the same at all relevant memory locations within the current process;\n    in case of page-specific endianness, one endianness must be kept \"out of sight\".\n    Possible settings, reflecting hardware and possibly O.S. convention, are:\n    -  __TBB_ENDIAN_BIG for big-endian data,\n    -  __TBB_ENDIAN_LITTLE for little-endian data,\n    -  __TBB_ENDIAN_DETECT for run-time detection iff exactly one of the above,\n    -  __TBB_ENDIAN_UNSUPPORTED to prevent undefined behavior if none of the above.\n\n    Prerequisites for each architecture port\n    ----------------------------------------\n    The following functions and macros have no generic implementation. Therefore they must be\n    implemented in each machine architecture specific header either as a conventional\n    function or as a functional macro.\n\n    __TBB_WORDSIZE\n        This is the size of machine word in bytes, i.e. for 32 bit systems it\n        should be defined to 4.\n\n    __TBB_Yield()\n        Signals OS that the current thread is willing to relinquish the remainder\n        of its time quantum.\n\n    __TBB_full_memory_fence()\n        Must prevent all memory operations from being reordered across it (both\n        by hardware and compiler). All such fences must be totally ordered (or\n        sequentially consistent).\n\n    __TBB_machine_cmpswp4( volatile void *ptr, int32_t value, int32_t comparand )\n        Must be provided if __TBB_USE_FENCED_ATOMICS is not set.\n\n    __TBB_machine_cmpswp8( volatile void *ptr, int32_t value, int64_t comparand )\n        Must be provided for 64-bit architectures if __TBB_USE_FENCED_ATOMICS is not set,\n        and for 32-bit architectures if __TBB_64BIT_ATOMICS is set\n\n    __TBB_machine_<op><S><fence>(...), where\n        <op> = {cmpswp, fetchadd, fetchstore}\n        <S> = {1, 2, 4, 8}\n        <fence> = {full_fence, acquire, release, relaxed}\n        Must be provided if __TBB_USE_FENCED_ATOMICS is set.\n\n    __TBB_control_consistency_helper()\n        Bridges the memory-semantics gap between architectures providing only\n        implicit C++0x \"consume\" semantics (like Power Architecture) and those\n        also implicitly obeying control dependencies (like IA-64 architecture).\n        It must be used only in conditional code where the condition is itself\n        data-dependent, and will then make subsequent code behave as if the\n        original data dependency were acquired.\n        It needs only a compiler fence where implied by the architecture\n        either specifically (like IA-64 architecture) or because generally stronger\n        \"acquire\" semantics are enforced (like x86).\n        It is always valid, though potentially suboptimal, to replace\n        control with acquire on the load and then remove the helper.\n\n    __TBB_acquire_consistency_helper(), __TBB_release_consistency_helper()\n        Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set.\n        Enforce acquire and release semantics in generic implementations of fenced\n        store and load operations. Depending on the particular architecture/compiler\n        combination they may be a hardware fence, a compiler fence, both or nothing.\n **/\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace internal { //< @cond INTERNAL\n\n////////////////////////////////////////////////////////////////////////////////\n// Overridable helpers declarations\n//\n// A machine/*.h file may choose to define these templates, otherwise it must\n// request default implementation by setting appropriate __TBB_USE_GENERIC_XXX macro(s).\n//\ntemplate <typename T, std::size_t S>\nstruct machine_load_store;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_relaxed;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_seq_cst;\n//\n// End of overridable helpers declarations\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S> struct atomic_selector;\n\ntemplate<> struct atomic_selector<1> {\n    typedef int8_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<2> {\n    typedef int16_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<4> {\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<8> {\n    typedef int64_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\n}} //< namespaces internal @endcond, tbb\n\n#define __TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(M)                                        \\\n    inline void __TBB_machine_generic_store8##M(volatile void *ptr, int64_t value) {         \\\n        for(;;) {                                                                            \\\n            int64_t result = *(volatile int64_t *)ptr;                                       \\\n            if( __TBB_machine_cmpswp8##M(ptr,value,result)==result ) break;                  \\\n        }                                                                                    \\\n    }                                                                                        \\\n\n#define __TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(M)                                         \\\n    inline int64_t __TBB_machine_generic_load8##M(const volatile void *ptr) {                \\\n        /* Comparand and new value may be anything, they only must be equal, and      */     \\\n        /* the value should have a low probability to be actually found in 'location'.*/     \\\n        const int64_t anyvalue = 2305843009213693951LL;                                      \\\n        return __TBB_machine_cmpswp8##M(const_cast<volatile void *>(ptr),anyvalue,anyvalue); \\\n    }                                                                                        \\\n\n// The set of allowed values for __TBB_ENDIANNESS (see above for details)\n#define __TBB_ENDIAN_UNSUPPORTED -1\n#define __TBB_ENDIAN_LITTLE       0\n#define __TBB_ENDIAN_BIG          1\n#define __TBB_ENDIAN_DETECT       2\n\n#if _WIN32||_WIN64\n\n#ifdef _MANAGED\n#pragma managed(push, off)\n#endif\n\n    #if __MINGW64__ || __MINGW32__\n        extern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n        #define __TBB_Yield()  SwitchToThread()\n        #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n            #include \"machine/gcc_generic.h\"\n        #elif __MINGW64__\n            #include \"machine/linux_intel64.h\"\n        #elif __MINGW32__\n            #include \"machine/linux_ia32.h\"\n        #endif\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif defined(_M_IX86) && !defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/windows_ia32.h\"\n    #elif defined(_M_X64)\n        #include \"machine/windows_intel64.h\"\n    #elif defined(_M_ARM) || defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/msvc_armv7.h\"\n    #endif\n\n#ifdef _MANAGED\n#pragma managed(pop)\n#endif\n\n#elif __TBB_DEFINE_MIC\n\n    #include \"machine/mic_common.h\"\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #else\n        #include \"machine/linux_intel64.h\"\n    #endif\n\n#elif __linux__ || __FreeBSD__ || __NetBSD__\n\n    #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/gcc_generic.h\"\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __ia64__\n        #include \"machine/linux_ia64.h\"\n    #elif __powerpc__\n        #include \"machine/mac_ppc.h\"\n    #elif __ARM_ARCH_7A__ || __aarch64__\n        #include \"machine/gcc_arm.h\"\n    #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT\n        #include \"machine/gcc_generic.h\"\n    #endif\n    #include \"machine/linux_common.h\"\n\n#elif __APPLE__\n    //TODO:  TBB_USE_GCC_BUILTINS is not used for Mac, Sun, Aix\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __TBB_x86_32\n        #include \"machine/linux_ia32.h\"\n    #elif __TBB_x86_64\n        #include \"machine/linux_intel64.h\"\n    #elif __POWERPC__\n        #include \"machine/mac_ppc.h\"\n    #endif\n    #include \"machine/macos_common.h\"\n\n#elif _AIX\n\n    #include \"machine/ibm_aix51.h\"\n\n#elif __sun || __SUNPRO_CC\n\n    #define __asm__ asm\n    #define __volatile__ volatile\n\n    #if __i386  || __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __sparc\n        #include \"machine/sunos_sparc.h\"\n    #endif\n    #include <sched.h>\n\n    #define __TBB_Yield() sched_yield()\n\n#endif /* OS selection */\n\n#ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 1\n#endif\n\n//TODO: replace usage of these functions with usage of tbb::atomic, and then remove them\n//TODO: map functions with W suffix to use cast to tbb::atomic and according op, i.e. as_atomic().op()\n// Special atomic functions\n#if __TBB_USE_FENCED_ATOMICS\n    #define __TBB_machine_cmpswp1   __TBB_machine_cmpswp1full_fence\n    #define __TBB_machine_cmpswp2   __TBB_machine_cmpswp2full_fence\n    #define __TBB_machine_cmpswp4   __TBB_machine_cmpswp4full_fence\n    #define __TBB_machine_cmpswp8   __TBB_machine_cmpswp8full_fence\n\n    #if __TBB_WORDSIZE==8\n        #define __TBB_machine_fetchadd8             __TBB_machine_fetchadd8full_fence\n        #define __TBB_machine_fetchstore8           __TBB_machine_fetchstore8full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd8release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd8acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd8release(P,(-1))\n    #else\n        #define __TBB_machine_fetchadd4             __TBB_machine_fetchadd4full_fence\n        #define __TBB_machine_fetchstore4           __TBB_machine_fetchstore4full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd4release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd4acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd4release(P,(-1))\n    #endif /* __TBB_WORDSIZE==4 */\n#else /* !__TBB_USE_FENCED_ATOMICS */\n    #define __TBB_FetchAndAddWrelease(P,V)      __TBB_FetchAndAddW(P,V)\n    #define __TBB_FetchAndIncrementWacquire(P)  __TBB_FetchAndAddW(P,1)\n    #define __TBB_FetchAndDecrementWrelease(P)  __TBB_FetchAndAddW(P,(-1))\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp4(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd4(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore4(P,V)\n#elif  __TBB_WORDSIZE==8\n    #if __TBB_USE_GENERIC_DWORD_LOAD_STORE || __TBB_USE_GENERIC_DWORD_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n        #error These macros should only be used on 32-bit platforms.\n    #endif\n\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp8(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd8(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore8(P,V)\n#else /* __TBB_WORDSIZE != 8 */\n    #error Unsupported machine word size.\n#endif /* __TBB_WORDSIZE */\n\n#ifndef __TBB_Pause\n    inline void __TBB_Pause(int32_t) {\n        __TBB_Yield();\n    }\n#endif\n\nnamespace tbb {\n\n//! Sequentially consistent full memory fence.\ninline void atomic_fence () { __TBB_full_memory_fence(); }\n\nnamespace internal { //< @cond INTERNAL\n\n//! Class that implements exponential backoff.\n/** See implementation of spin_wait_while_eq for an example. */\nclass atomic_backoff : no_copy {\n    //! Time delay, in units of \"pause\" instructions.\n    /** Should be equal to approximately the number of \"pause\" instructions\n        that take the same time as an context switch. Must be a power of two.*/\n    static const int32_t LOOPS_BEFORE_YIELD = 16;\n    int32_t count;\npublic:\n    // In many cases, an object of this type is initialized eagerly on hot path,\n    // as in for(atomic_backoff b; ; b.pause()) { /*loop body*/ }\n    // For this reason, the construction cost must be very small!\n    atomic_backoff() : count(1) {}\n    // This constructor pauses immediately; do not use on hot paths!\n    atomic_backoff( bool ) : count(1) { pause(); }\n\n    //! Pause for a while.\n    void pause() {\n        if( count<=LOOPS_BEFORE_YIELD ) {\n            __TBB_Pause(count);\n            // Pause twice as long the next time.\n            count*=2;\n        } else {\n            // Pause is so long that we might as well yield CPU to scheduler.\n            __TBB_Yield();\n        }\n    }\n\n    //! Pause for a few times and return false if saturated.\n    bool bounded_pause() {\n        __TBB_Pause(count);\n        if( count<LOOPS_BEFORE_YIELD ) {\n            // Pause twice as long the next time.\n            count*=2;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    void reset() {\n        count = 1;\n    }\n};\n\n//! Spin WHILE the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_while_eq( const volatile T& location, U value ) {\n    atomic_backoff backoff;\n    while( location==value ) backoff.pause();\n}\n\n//! Spin UNTIL the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_until_eq( const volatile T& location, const U value ) {\n    atomic_backoff backoff;\n    while( location!=value ) backoff.pause();\n}\n\ntemplate <typename predicate_type>\nvoid spin_wait_while(predicate_type condition){\n    atomic_backoff backoff;\n    while( condition() ) backoff.pause();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Generic compare-and-swap applied to only a part of a machine word.\n//\n#ifndef __TBB_ENDIANNESS\n#define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS && __TBB_ENDIANNESS==__TBB_ENDIAN_UNSUPPORTED\n#error Generic implementation of part-word CAS may not be used with __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n#if __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n//\n// This function is the only use of __TBB_ENDIANNESS.\n// The following restrictions/limitations apply for this operation:\n//  - T must be an integer type of at most 4 bytes for the casts and calculations to work\n//  - T must also be less than 4 bytes to avoid compiler warnings when computing mask\n//      (and for the operation to be useful at all, so no workaround is applied)\n//  - the architecture must consistently use either little-endian or big-endian (same for all locations)\n//\n// TODO: static_assert for the type requirements stated above\ntemplate<typename T>\ninline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, const T comparand ) {\n    struct endianness{ static bool is_big_endian(){\n        #if __TBB_ENDIANNESS==__TBB_ENDIAN_DETECT\n            const uint32_t probe = 0x03020100;\n            return (((const char*)(&probe))[0]==0x03);\n        #elif __TBB_ENDIANNESS==__TBB_ENDIAN_BIG || __TBB_ENDIANNESS==__TBB_ENDIAN_LITTLE\n            return __TBB_ENDIANNESS==__TBB_ENDIAN_BIG;\n        #else\n            #error Unexpected value of __TBB_ENDIANNESS\n        #endif\n    }};\n\n    const uint32_t byte_offset            = (uint32_t) ((uintptr_t)ptr & 0x3);\n    volatile uint32_t * const aligned_ptr = (uint32_t*)((uintptr_t)ptr - byte_offset );\n\n    // location of T within uint32_t for a C++ shift operation\n    const uint32_t bits_to_shift     = 8*(endianness::is_big_endian() ? (4 - sizeof(T) - (byte_offset)) : byte_offset);\n    const uint32_t mask              = (((uint32_t)1<<(sizeof(T)*8)) - 1 )<<bits_to_shift;\n    // for signed T, any sign extension bits in cast value/comparand are immediately clipped by mask\n    const uint32_t shifted_comparand = ((uint32_t)comparand << bits_to_shift)&mask;\n    const uint32_t shifted_value     = ((uint32_t)value     << bits_to_shift)&mask;\n\n    for( atomic_backoff b;;b.pause() ) {\n        const uint32_t surroundings  = *aligned_ptr & ~mask ; // may have changed during the pause\n        const uint32_t big_comparand = surroundings | shifted_comparand ;\n        const uint32_t big_value     = surroundings | shifted_value     ;\n        // __TBB_machine_cmpswp4 presumed to have full fence.\n        // Cast shuts up /Wp64 warning\n        const uint32_t big_result = (uint32_t)__TBB_machine_cmpswp4( aligned_ptr, big_value, big_comparand );\n        if( big_result == big_comparand                    // CAS succeeded\n          || ((big_result ^ big_comparand) & mask) != 0)   // CAS failed and the bits of interest have changed\n        {\n            return T((big_result & mask) >> bits_to_shift);\n        }\n        else continue;                                     // CAS failed but the bits of interest were not changed\n    }\n}\n#endif // __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S, typename T>\ninline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand );\n\ntemplate<>\ninline int8_t __TBB_CompareAndSwapGeneric <1,int8_t> (volatile void *ptr, int8_t value, int8_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int8_t>((volatile int8_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp1(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int16_t __TBB_CompareAndSwapGeneric <2,int16_t> (volatile void *ptr, int16_t value, int16_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int16_t>((volatile int16_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp2(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int32_t __TBB_CompareAndSwapGeneric <4,int32_t> (volatile void *ptr, int32_t value, int32_t comparand ) {\n    // Cast shuts up /Wp64 warning\n    return (int32_t)__TBB_machine_cmpswp4(ptr,value,comparand);\n}\n\n#if __TBB_64BIT_ATOMICS\ntemplate<>\ninline int64_t __TBB_CompareAndSwapGeneric <8,int64_t> (volatile void *ptr, int64_t value, int64_t comparand ) {\n    return __TBB_machine_cmpswp8(ptr,value,comparand);\n}\n#endif\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )\n            break;\n    }\n    return result;\n}\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )\n            break;\n    }\n    return result;\n}\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n#define __TBB_machine_cmpswp1 tbb::internal::__TBB_CompareAndSwapGeneric<1,int8_t>\n#define __TBB_machine_cmpswp2 tbb::internal::__TBB_CompareAndSwapGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n#define __TBB_machine_fetchadd1 tbb::internal::__TBB_FetchAndAddGeneric<1,int8_t>\n#define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD\n#define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_ADD\n#define __TBB_machine_fetchadd8 tbb::internal::__TBB_FetchAndAddGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n#define __TBB_machine_fetchstore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,int8_t>\n#define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE\n#define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n#define __TBB_machine_fetchstore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n#define __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(S)                                             \\\n    atomic_selector<S>::word atomic_selector<S>::fetch_store ( volatile void* location, word value ) {  \\\n        return __TBB_machine_fetchstore##S( location, value );                                          \\\n    }\n\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(1)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(2)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(4)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(8)\n\n#undef __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE\n#endif /* __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n\n#if __TBB_USE_GENERIC_DWORD_LOAD_STORE\n/*TODO: find a more elegant way to handle function names difference*/\n#if ! __TBB_USE_FENCED_ATOMICS\n    /* This name forwarding is needed for generic implementation of\n     * load8/store8 defined below (via macro) to pick the right CAS function*/\n    #define   __TBB_machine_cmpswp8full_fence __TBB_machine_cmpswp8\n#endif\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n#if ! __TBB_USE_FENCED_ATOMICS\n    #undef   __TBB_machine_cmpswp8full_fence\n#endif\n\n#define __TBB_machine_store8 tbb::internal::__TBB_machine_generic_store8full_fence\n#define __TBB_machine_load8  tbb::internal::__TBB_machine_generic_load8full_fence\n#endif /* __TBB_USE_GENERIC_DWORD_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n/** Fenced operations use volatile qualifier to prevent compiler from optimizing\n    them out, and on architectures with weak memory ordering to induce compiler\n    to generate code with appropriate acquire/release semantics.\n    On architectures like IA32, Intel64 (and likely Sparc TSO) volatile has\n    no effect on code gen, and consistency helpers serve as a compiler fence (the\n    latter being true for IA64/gcc as well to fix a bug in some gcc versions).\n    This code assumes that the generated instructions will operate atomically,\n    which typically requires a type that can be moved in a single instruction,\n    cooperation from the compiler for effective use of such an instruction,\n    and appropriate alignment of the data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        T to_return = location;\n        __TBB_acquire_consistency_helper();\n        return to_return;\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __TBB_release_consistency_helper();\n        location = value;\n    }\n};\n\n//in general, plain load and store of 32bit compiler is not atomic for 64bit types\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static void store_with_release ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        __TBB_full_memory_fence();\n        return machine_load_store<T,S>::load_with_acquire( location );\n    }\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n    static void store ( volatile T &location, T value ) {\n        atomic_selector<S>::fetch_store( (volatile void*)&location, (typename atomic_selector<S>::word)value );\n    }\n#else /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n    static void store ( volatile T &location, T value ) {\n        machine_load_store<T,S>::store_with_release( location, value );\n        __TBB_full_memory_fence();\n    }\n#endif /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\n/** The implementation does not use functions __TBB_machine_load8/store8 as they\n    are not required to be sequentially consistent. **/\ntemplate <typename T>\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        // Comparand and new value may be anything, they only must be equal, and\n        // the value should have a low probability to be actually found in 'location'.\n        const int64_t anyvalue = 2305843009213693951LL;\n        return __TBB_machine_cmpswp8( (volatile void*)const_cast<volatile T*>(&location), anyvalue, anyvalue );\n    }\n    static void store ( volatile T &location, T value ) {\n#if __TBB_GCC_VERSION >= 40702\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wmaybe-uninitialized\"\n#endif\n        // An atomic initialization leads to reading of uninitialized memory\n        int64_t result = (volatile int64_t&)location;\n#if __TBB_GCC_VERSION >= 40702\n#pragma GCC diagnostic pop\n#endif\n        while ( __TBB_machine_cmpswp8((volatile void*)&location, (int64_t)value, result) != result )\n            result = (volatile int64_t&)location;\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /*__TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n// Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.\n/** Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO\n    architectures. However on architectures with weak memory ordering compiler may\n    generate code with acquire/release semantics for operations on volatile data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        return location;\n    }\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static inline T load ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static inline void store ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */\n\n#undef __TBB_WORDSIZE //this macro is forbidden to use outside of atomic machinery\n\ntemplate<typename T>\ninline T __TBB_load_with_acquire(const volatile T &location) {\n    return machine_load_store<T,sizeof(T)>::load_with_acquire( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_with_release(volatile T& location, V value) {\n    machine_load_store<T,sizeof(T)>::store_with_release( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_with_release(volatile size_t& location, size_t value) {\n    machine_load_store<size_t,sizeof(size_t)>::store_with_release( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_full_fence(const volatile T &location) {\n    return machine_load_store_seq_cst<T,sizeof(T)>::load( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_full_fence(volatile T& location, V value) {\n    machine_load_store_seq_cst<T,sizeof(T)>::store( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_full_fence(volatile size_t& location, size_t value) {\n    machine_load_store_seq_cst<size_t,sizeof(size_t)>::store( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_relaxed (const volatile T& location) {\n    return machine_load_store_relaxed<T,sizeof(T)>::load( const_cast<T&>(location) );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_relaxed ( volatile T& location, V value ) {\n    machine_load_store_relaxed<T,sizeof(T)>::store( const_cast<T&>(location), T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_relaxed ( volatile size_t& location, size_t value ) {\n    machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );\n}\n\n// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as\n// strict as type T.  The type should have a trivial default constructor and destructor, so that\n// arrays of that type can be declared without initializers.\n// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands\n// to a type bigger than T.\n// The default definition here works on machines where integers are naturally aligned and the\n// strictest alignment is 64.\n#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict\n\n#if __TBB_ALIGNAS_PRESENT\n\n// Use C++11 keywords alignas and alignof\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\nstruct alignas(PowerOf2) __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n};\n#define __TBB_alignof(T) alignof(T)\n\n#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n} __attribute__((aligned(PowerOf2)));\n#define __TBB_alignof(T) __alignof__(T)\n\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\n__declspec(align(PowerOf2))                           \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n};\n#define __TBB_alignof(T) __alignof(T)\n\n#else /* A compiler with unknown syntax for data alignment */\n#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T)\n#endif\n\n/* Now declare types aligned to useful powers of two */\n// TODO: Is __TBB_DefineTypeWithAlignment(8) needed on 32 bit platforms?\n__TBB_DefineTypeWithAlignment(16)\n__TBB_DefineTypeWithAlignment(32)\n__TBB_DefineTypeWithAlignment(64)\n\ntypedef __TBB_machine_type_with_alignment_64 __TBB_machine_type_with_strictest_alignment;\n\n// Primary template is a declaration of incomplete type so that it fails with unknown alignments\ntemplate<size_t N> struct type_with_alignment;\n\n// Specializations for allowed alignments\ntemplate<> struct type_with_alignment<1> { char member; };\ntemplate<> struct type_with_alignment<2> { uint16_t member; };\ntemplate<> struct type_with_alignment<4> { uint32_t member; };\ntemplate<> struct type_with_alignment<8> { uint64_t member; };\ntemplate<> struct type_with_alignment<16> {__TBB_machine_type_with_alignment_16 member; };\ntemplate<> struct type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };\ntemplate<> struct type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };\n\n#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN\n//! Work around for bug in GNU 3.2 and MSVC compilers.\n/** Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated.\n    The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). */\ntemplate<size_t Size, typename T>\nstruct work_around_alignment_bug {\n    static const size_t alignment = __TBB_alignof(T);\n};\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment>\n#else\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__TBB_alignof(T)>\n#endif  /* __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN */\n\n#endif  /* __TBB_TypeWithAlignmentAtLeastAsStrict */\n\n// Template class here is to avoid instantiation of the static data for modules that don't use it\ntemplate<typename T>\nstruct reverse {\n    static const T byte_table[256];\n};\n// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed\n// values of [0..2^8 - 1]. Those values can also be computed on the fly at a slightly higher cost.\ntemplate<typename T>\nconst T reverse<T>::byte_table[256] = {\n    0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,\n    0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,\n    0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,\n    0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,\n    0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,\n    0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,\n    0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,\n    0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,\n    0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,\n    0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,\n    0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,\n    0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,\n    0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,\n    0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,\n    0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,\n    0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF\n};\n\n} // namespace internal @endcond\n} // namespace tbb\n\n// Preserving access to legacy APIs\nusing tbb::internal::__TBB_load_with_acquire;\nusing tbb::internal::__TBB_store_with_release;\n\n// Mapping historically used names to the ones expected by atomic_load_store_traits\n#define __TBB_load_acquire  __TBB_load_with_acquire\n#define __TBB_store_release __TBB_store_with_release\n\n#ifndef __TBB_Log2\ninline intptr_t __TBB_Log2( uintptr_t x ) {\n    if( x==0 ) return -1;\n    intptr_t result = 0;\n\n#if !defined(_M_ARM)\n    uintptr_t tmp_;\n    if( sizeof(x)>4 && (tmp_ = ((uint64_t)x)>>32) ) { x=tmp_; result += 32; }\n#endif\n    if( uintptr_t tmp = x>>16 ) { x=tmp; result += 16; }\n    if( uintptr_t tmp = x>>8 )  { x=tmp; result += 8; }\n    if( uintptr_t tmp = x>>4 )  { x=tmp; result += 4; }\n    if( uintptr_t tmp = x>>2 )  { x=tmp; result += 2; }\n\n    return (x&2)? result+1: result;\n}\n#endif\n\n#ifndef __TBB_AtomicOR\ninline void __TBB_AtomicOR( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#ifndef __TBB_AtomicAND\ninline void __TBB_AtomicAND( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#if __TBB_PREFETCHING\n#ifndef __TBB_cl_prefetch\n#error This platform does not define cache management primitives required for __TBB_PREFETCHING\n#endif\n\n#ifndef __TBB_cl_evict\n#define __TBB_cl_evict(p)\n#endif\n#endif\n\n#ifndef __TBB_Flag\ntypedef unsigned char __TBB_Flag;\n#endif\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#ifndef __TBB_TryLockByte\ninline bool __TBB_TryLockByte( __TBB_atomic_flag &flag ) {\n    return __TBB_machine_cmpswp1(&flag,1,0)==0;\n}\n#endif\n\n#ifndef __TBB_LockByte\ninline __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !__TBB_TryLockByte(flag) ) backoff.pause();\n    return 0;\n}\n#endif\n\n#ifndef  __TBB_UnlockByte\n#define __TBB_UnlockByte(addr) __TBB_store_with_release((addr),0)\n#endif\n\n// lock primitives with Intel(R) Transactional Synchronization Extensions (Intel(R) TSX)\n#if ( __TBB_x86_32 || __TBB_x86_64 )  /* only on ia32/intel64 */\ninline void __TBB_TryLockByteElidedCancel() { __TBB_machine_try_lock_elided_cancel(); }\n\ninline bool __TBB_TryLockByteElided( __TBB_atomic_flag& flag ) {\n    bool res = __TBB_machine_try_lock_elided( &flag )!=0;\n    // to avoid the \"lemming\" effect, we need to abort the transaction\n    // if  __TBB_machine_try_lock_elided returns false (i.e., someone else\n    // has acquired the mutex non-speculatively).\n    if( !res ) __TBB_TryLockByteElidedCancel();\n    return res;\n}\n\ninline void __TBB_LockByteElided( __TBB_atomic_flag& flag )\n{\n    for(;;) {\n        tbb::internal::spin_wait_while_eq( flag, 1 );\n        if( __TBB_machine_try_lock_elided( &flag ) )\n            return;\n        // Another thread acquired the lock \"for real\".\n        // To avoid the \"lemming\" effect, we abort the transaction.\n        __TBB_TryLockByteElidedCancel();\n    }\n}\n\ninline void __TBB_UnlockByteElided( __TBB_atomic_flag& flag ) {\n    __TBB_machine_unlock_elided( &flag );\n}\n#endif\n\n#ifndef __TBB_ReverseByte\ninline unsigned char __TBB_ReverseByte(unsigned char src) {\n    return tbb::internal::reverse<unsigned char>::byte_table[src];\n}\n#endif\n\ntemplate<typename T>\nT __TBB_ReverseBits(T src) {\n    T dst;\n    unsigned char *original = (unsigned char *) &src;\n    unsigned char *reversed = (unsigned char *) &dst;\n\n    for( int i = sizeof(T)-1; i >= 0; i-- )\n        reversed[i] = __TBB_ReverseByte( original[sizeof(T)-i-1] );\n\n    return dst;\n}\n\n#endif /* __TBB_machine_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_profiling.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_profiling_H\n#define __TBB_profiling_H\n\nnamespace tbb {\n    namespace internal {\n\n        //\n        // This is not under __TBB_ITT_STRUCTURE_API because these values are used directly in flow_graph.h.\n        //\n\n        // include list of index names\n        #define TBB_STRING_RESOURCE(index_name,str) index_name,\n        enum string_index {\n           #include \"internal/_tbb_strings.h\"\n           NUM_STRINGS\n        };\n        #undef TBB_STRING_RESOURCE\n\n        enum itt_relation\n        {\n        __itt_relation_is_unknown = 0,\n        __itt_relation_is_dependent_on,         /**< \"A is dependent on B\" means that A cannot start until B completes */\n        __itt_relation_is_sibling_of,           /**< \"A is sibling of B\" means that A and B were created as a group */\n        __itt_relation_is_parent_of,            /**< \"A is parent of B\" means that A created B */\n        __itt_relation_is_continuation_of,      /**< \"A is continuation of B\" means that A assumes the dependencies of B */\n        __itt_relation_is_child_of,             /**< \"A is child of B\" means that A was created by B (inverse of is_parent_of) */\n        __itt_relation_is_continued_by,         /**< \"A is continued by B\" means that B assumes the dependencies of A (inverse of is_continuation_of) */\n        __itt_relation_is_predecessor_to        /**< \"A is predecessor to B\" means that B cannot start until A completes (inverse of is_dependent_on) */\n        };\n\n    }\n}\n\n// Check if the tools support is enabled\n#if (_WIN32||_WIN64||__linux__) && !__MINGW32__ && TBB_USE_THREADING_TOOLS\n\n#if _WIN32||_WIN64\n#include <stdlib.h>  /* mbstowcs_s */\n#endif\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if _WIN32||_WIN64\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name );\n        inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {\n#if _MSC_VER>=1400\n            size_t len;\n            mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );\n            return len;   // mbstowcs_s counts null terminator\n#else\n            size_t len = mbstowcs( wcs, mbs, bufsize );\n            if(wcs && len!=size_t(-1) )\n                wcs[len<bufsize-1? len: bufsize-1] = wchar_t('\\0');\n            return len+1; // mbstowcs does not count null terminator\n#endif\n        }\n#else\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name );\n#endif\n    } // namespace internal\n} // namespace tbb\n\n//! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines \"set_name\" methods for sync objects of type T\n/** Should be used in the \"tbb\" namespace only.\n    Don't place semicolon after it to avoid compiler warnings. **/\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \\\n                wchar_t *wname = new wchar_t[len];                                  \\\n                tbb::internal::multibyte_to_widechar(wname, name, len);             \\\n                set_name( obj, wname );                                             \\\n                delete[] wname;                                                     \\\n            }                                                                       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n        }\n#endif /* !WIN */\n\n#else /* no tools support */\n\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const wchar_t* ) {}    \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#endif /* !WIN */\n\n#endif /* no tools support */\n\n#include \"atomic.h\"\n// Need these to work regardless of tools support\nnamespace tbb {\n    namespace internal {\n\n        enum notify_type {prepare=0, cancel, acquired, releasing};\n\n        const uintptr_t NUM_NOTIFY_TYPES = 4; // set to # elements in enum above\n\n        void __TBB_EXPORTED_FUNC call_itt_notify_v5(int t, void *ptr);\n        void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3(void *dst, void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3(const void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );\n#if __TBB_ITT_STRUCTURE_API\n        enum itt_domain_enum { ITT_DOMAIN_FLOW=0, ITT_DOMAIN_MAIN=1, ITT_DOMAIN_ALGO=2, ITT_NUM_DOMAINS };\n\n        void __TBB_EXPORTED_FUNC itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                                         void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                                          string_index key, const char *value );\n        void __TBB_EXPORTED_FUNC itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                                      itt_relation relation, void *addr1, unsigned long long addr1_extra );\n        void __TBB_EXPORTED_FUNC itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                    void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_task_end_v7( itt_domain_enum domain );\n\n        void __TBB_EXPORTED_FUNC itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                                      void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra );\n#endif // __TBB_ITT_STRUCTURE_API\n\n        // two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type\n        template <typename T, typename U>\n        inline void itt_store_word_with_release(tbb::atomic<T>& dst, U src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)uintptr_t(src));\n#else\n            dst = src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const tbb::atomic<T>& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            // Workaround for overzealous compiler warnings\n            #pragma warning (push)\n            #pragma warning (disable: 4311)\n#endif\n            T result = (T)itt_load_pointer_with_acquire_v3(&src);\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            #pragma warning (pop)\n#endif\n            return result;\n#else\n            return src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_store_word_with_release(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            __TBB_store_with_release(dst, src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            return (T)itt_load_pointer_with_acquire_v3(&src);\n#else\n            return __TBB_load_with_acquire(src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_hide_store_word(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            dst = src;\n#endif\n        }\n\n        //TODO: rename to itt_hide_load_word_relaxed\n        template <typename T>\n        inline T itt_hide_load_word(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            return (T)itt_load_pointer_v3(&src);\n#else\n            return src;\n#endif\n        }\n\n#if TBB_USE_THREADING_TOOLS\n        inline void call_itt_notify(notify_type t, void *ptr) {\n            call_itt_notify_v5((int)t, ptr);\n        }\n\n#else\n        inline void call_itt_notify(notify_type /*t*/, void * /*ptr*/) {}\n\n#endif // TBB_USE_THREADING_TOOLS\n\n#if __TBB_ITT_STRUCTURE_API\n        inline void itt_make_task_group( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                         void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_make_task_group_v7( domain, group, group_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_metadata_str_add( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                          string_index key, const char *value ) {\n            itt_metadata_str_add_v7( domain, addr, addr_extra, key, value );\n        }\n\n        inline void itt_relation_add( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                      itt_relation relation, void *addr1, unsigned long long addr1_extra ) {\n            itt_relation_add_v7( domain, addr0, addr0_extra, relation, addr1, addr1_extra );\n        }\n\n        inline void itt_task_begin( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                        void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_task_begin_v7( domain, task, task_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_task_end( itt_domain_enum domain ) {\n            itt_task_end_v7( domain );\n        }\n\n        inline void itt_region_begin( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                      void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_region_begin_v9( domain, region, region_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_region_end( itt_domain_enum domain, void *region, unsigned long long region_extra  ) {\n            itt_region_end_v9( domain, region, region_extra );\n        }\n#endif // __TBB_ITT_STRUCTURE_API\n\n    } // namespace internal\n} // namespace tbb\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n#include <string>\n\nnamespace tbb {\nnamespace profiling {\nnamespace interface10 {\n\n#if TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\nclass event {\n/** This class supports user event traces through itt.\n    Common use-case is tagging data flow graph tasks (data-id)\n    and visualization by Intel Advisor Flow Graph Analyzer (FGA)  **/\n//  TODO: Replace implementation by itt user event api.\n\n    const std::string my_name;\n\n    static void emit_trace(const std::string &input) {\n        itt_metadata_str_add( tbb::internal::ITT_DOMAIN_FLOW, NULL, tbb::internal::FLOW_NULL, tbb::internal::USER_EVENT, ( \"FGA::DATAID::\" + input ).c_str() );\n    }\n\npublic:\n    event(const std::string &input)\n              : my_name( input )\n    { }\n\n    void emit() {\n        emit_trace(my_name);\n    }\n\n    static void emit(const std::string &description) {\n        emit_trace(description);\n    }\n\n};\n#else // TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\n// Using empty struct if user event tracing is disabled:\nstruct event {\n    event(const std::string &) { }\n\n    void emit() { }\n\n    static void emit(const std::string &) { }\n};\n#endif // TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\n\n} // interfaceX\nusing interface10::event;\n} // namespace profiling\n} // namespace tbb\n#endif // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\n#endif /* __TBB_profiling_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_stddef.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_stddef_H\n#define __TBB_tbb_stddef_H\n\n// Marketing-driven product version\n#define TBB_VERSION_MAJOR 2018\n#define TBB_VERSION_MINOR 0\n\n// Engineering-focused interface version\n#define TBB_INTERFACE_VERSION 10006\n#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000\n\n// The oldest major interface version still supported\n// To be used in SONAME, manifests, etc.\n#define TBB_COMPATIBLE_INTERFACE_VERSION 2\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// We do not need defines below for resource processing on windows\n#if !defined RC_INVOKED\n\n// Define groups for Doxygen documentation\n/**\n * @defgroup algorithms         Algorithms\n * @defgroup containers         Containers\n * @defgroup memory_allocation  Memory Allocation\n * @defgroup synchronization    Synchronization\n * @defgroup timing             Timing\n * @defgroup task_scheduling    Task Scheduling\n */\n\n// Simple text that is displayed on the main page of Doxygen documentation.\n/**\n * \\mainpage Main Page\n *\n * Click the tabs above for information about the\n * - <a href=\"./modules.html\">Modules</a> (groups of functionality) implemented by the library\n * - <a href=\"./annotated.html\">Classes</a> provided by the library\n * - <a href=\"./files.html\">Files</a> constituting the library.\n * .\n * Please note that significant part of TBB functionality is implemented in the form of\n * template functions, descriptions of which are not accessible on the <a href=\"./annotated.html\">Classes</a>\n * tab. Use <a href=\"./modules.html\">Modules</a> or <a href=\"./namespacemembers.html\">Namespace/Namespace Members</a>\n * tabs to find them.\n *\n * Additional pieces of information can be found here\n * - \\subpage concepts\n * .\n */\n\n/** \\page concepts TBB concepts\n\n    A concept is a set of requirements to a type, which are necessary and sufficient\n    for the type to model a particular behavior or a set of behaviors. Some concepts\n    are specific to a particular algorithm (e.g. algorithm body), while other ones\n    are common to several algorithms (e.g. range concept).\n\n    All TBB algorithms make use of different classes implementing various concepts.\n    Implementation classes are supplied by the user as type arguments of template\n    parameters and/or as objects passed as function call arguments. The library\n    provides predefined  implementations of some concepts (e.g. several kinds of\n    \\ref range_req \"ranges\"), while other ones must always be implemented by the user.\n\n    TBB defines a set of minimal requirements each concept must conform to. Here is\n    the list of different concepts hyperlinked to the corresponding requirements specifications:\n    - \\subpage range_req\n    - \\subpage parallel_do_body_req\n    - \\subpage parallel_for_body_req\n    - \\subpage parallel_reduce_body_req\n    - \\subpage parallel_scan_body_req\n    - \\subpage parallel_sort_iter_req\n**/\n\n// tbb_config.h should be included the first since it contains macro definitions used in other headers\n#include \"tbb_config.h\"\n\n#if _MSC_VER >=1400\n    #define __TBB_EXPORTED_FUNC   __cdecl\n    #define __TBB_EXPORTED_METHOD __thiscall\n#else\n    #define __TBB_EXPORTED_FUNC\n    #define __TBB_EXPORTED_METHOD\n#endif\n\n#if __INTEL_COMPILER || _MSC_VER\n#define __TBB_NOINLINE(decl) __declspec(noinline) decl\n#elif __GNUC__\n#define __TBB_NOINLINE(decl) decl __attribute__ ((noinline))\n#else\n#define __TBB_NOINLINE(decl) decl\n#endif\n\n#if __TBB_NOEXCEPT_PRESENT\n#define __TBB_NOEXCEPT(expression) noexcept(expression)\n#else\n#define __TBB_NOEXCEPT(expression)\n#endif\n\n#include <cstddef>      /* Need size_t and ptrdiff_t */\n\n#if _MSC_VER\n    #define __TBB_tbb_windef_H\n    #include \"internal/_tbb_windef.h\"\n    #undef __TBB_tbb_windef_H\n#endif\n#if !defined(_MSC_VER) || _MSC_VER>=1600\n    #include <stdint.h>\n#endif\n\n//! Type for an assertion handler\ntypedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );\n\n#if __TBBMALLOC_BUILD\nnamespace rml { namespace internal {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : rml::internal::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#else\nnamespace tbb {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#endif\n\n    //! Set assertion handler and return previous value of it.\n    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );\n\n    //! Process an assertion failure.\n    /** Normally called from __TBB_ASSERT macro.\n        If assertion handler is null, print message for assertion failure and abort.\n        Otherwise call the assertion handler. */\n    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );\n\n#if __TBBMALLOC_BUILD\n}}  // namespace rml::internal\n#else\n} // namespace tbb\n#endif\n\n#if TBB_USE_ASSERT\n\n    //! Assert that predicate is true.\n    /** If predicate is false, print assertion failure message.\n        If the comment argument is not NULL, it is printed as part of the failure message.\n        The comment argument has no other effect. */\n    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_RELEASE(predicate,message)\n\n    #define __TBB_ASSERT_EX __TBB_ASSERT\n\n#else /* !TBB_USE_ASSERT */\n\n    //! No-op version of __TBB_ASSERT.\n    #define __TBB_ASSERT(predicate,comment) ((void)0)\n    //! \"Extended\" version is useful to suppress warnings if a variable is only used with an assert\n    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))\n\n#endif /* !TBB_USE_ASSERT */\n\n//! The namespace tbb contains all components of the library.\nnamespace tbb {\n\n    namespace internal {\n#if _MSC_VER && _MSC_VER<1600\n        typedef __int8 int8_t;\n        typedef __int16 int16_t;\n        typedef __int32 int32_t;\n        typedef __int64 int64_t;\n        typedef unsigned __int8 uint8_t;\n        typedef unsigned __int16 uint16_t;\n        typedef unsigned __int32 uint32_t;\n        typedef unsigned __int64 uint64_t;\n#else /* Posix */\n        using ::int8_t;\n        using ::int16_t;\n        using ::int32_t;\n        using ::int64_t;\n        using ::uint8_t;\n        using ::uint16_t;\n        using ::uint32_t;\n        using ::uint64_t;\n#endif /* Posix */\n    } // namespace internal\n\n    using std::size_t;\n    using std::ptrdiff_t;\n\n//! The function returns the interface version of the TBB shared library being used.\n/**\n * The version it returns is determined at runtime, not at compile/link time.\n * So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.\n */\nextern \"C\" int __TBB_EXPORTED_FUNC TBB_runtime_interface_version();\n\n/**\n * @cond INTERNAL\n * @brief Identifiers declared inside namespace internal should never be used directly by client code.\n */\nnamespace internal {\n\n//! Compile-time constant that is upper bound on cache line/sector size.\n/** It should be used only in situations where having a compile-time upper\n    bound is more useful than a run-time exact answer.\n    @ingroup memory_allocation */\nconst size_t NFS_MaxLineSize = 128;\n\n/** Label for data that may be accessed from different threads, and that may eventually become wrapped\n    in a formal atomic type.\n\n    Note that no problems have yet been observed relating to the definition currently being empty,\n    even if at least \"volatile\" would seem to be in order to avoid data sometimes temporarily hiding\n    in a register (although \"volatile\" as a \"poor man's atomic\" lacks several other features of a proper\n    atomic, some of which are now provided instead through specialized functions).\n\n    Note that usage is intentionally compatible with a definition as qualifier \"volatile\",\n    both as a way to have the compiler help enforce use of the label and to quickly rule out\n    one potential issue.\n\n    Note however that, with some architecture/compiler combinations, e.g. on IA-64 architecture, \"volatile\"\n    also has non-portable memory semantics that are needlessly expensive for \"relaxed\" operations.\n\n    Note that this must only be applied to data that will not change bit patterns when cast to/from\n    an integral type of the same length; tbb::atomic must be used instead for, e.g., floating-point types.\n\n    TODO: apply wherever relevant **/\n#define __TBB_atomic // intentionally empty, see above\n\n#if __TBB_OVERRIDE_PRESENT\n#define __TBB_override override\n#else\n#define __TBB_override // formal comment only\n#endif\n\ntemplate<class T, size_t S, size_t R>\nstruct padded_base : T {\n    char pad[S - R];\n};\ntemplate<class T, size_t S> struct padded_base<T, S, 0> : T {};\n\n//! Pads type T to fill out to a multiple of cache line size.\ntemplate<class T, size_t S = NFS_MaxLineSize>\nstruct padded : padded_base<T, S, sizeof(T) % S> {};\n\n//! Extended variant of the standard offsetof macro\n/** The standard offsetof macro is not sufficient for TBB as it can be used for\n    POD-types only. The constant 0x1000 (not NULL) is necessary to appease GCC. **/\n#define __TBB_offsetof(class_name, member_name) \\\n    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)\n\n//! Returns address of the object containing a member with the given name and address\n#define __TBB_get_object_ref(class_name, member_name, member_addr) \\\n    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))\n\n//! Throws std::runtime_error with what() returning error_code description prefixed with aux_info\nvoid __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* aux_info );\n\n#if TBB_USE_EXCEPTIONS\n    #define __TBB_TRY try\n    #define __TBB_CATCH(e) catch(e)\n    #define __TBB_THROW(e) throw e\n    #define __TBB_RETHROW() throw\n#else /* !TBB_USE_EXCEPTIONS */\n    inline bool __TBB_false() { return false; }\n    #define __TBB_TRY\n    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )\n    #define __TBB_THROW(e) tbb::internal::suppress_unused_warning(e)\n    #define __TBB_RETHROW() ((void)0)\n#endif /* !TBB_USE_EXCEPTIONS */\n\n//! Report a runtime warning.\nvoid __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );\n\n#if TBB_USE_ASSERT\nstatic void* const poisoned_ptr = reinterpret_cast<void*>(-1);\n\n//! Set p to invalid pointer value.\n//  Also works for regular (non-__TBB_atomic) pointers.\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & p ) { p = reinterpret_cast<T*>(poisoned_ptr); }\n\n/** Expected to be used in assertions only, thus no empty form is defined. **/\ntemplate<typename T>\ninline bool is_poisoned( T* p ) { return p == reinterpret_cast<T*>(poisoned_ptr); }\n#else\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & ) {/*do nothing*/}\n#endif /* !TBB_USE_ASSERT */\n\n//! Cast between unrelated pointer types.\n/** This method should be used sparingly as a last resort for dealing with\n    situations that inherently break strict ISO C++ aliasing rules. */\n// T is a pointer type because it will be explicitly provided by the programmer as a template argument;\n// U is a referent type to enable the compiler to check that \"ptr\" is a pointer, deducing U in the process.\ntemplate<typename T, typename U>\ninline T punned_cast( U* ptr ) {\n    uintptr_t x = reinterpret_cast<uintptr_t>(ptr);\n    return reinterpret_cast<T>(x);\n}\n\n//! Base class for types that should not be assigned.\nclass no_assign {\n    // Deny assignment\n    void operator=( const no_assign& );\npublic:\n#if __GNUC__\n    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.\n    no_assign() {}\n#endif /* __GNUC__ */\n};\n\n//! Base class for types that should not be copied or assigned.\nclass no_copy: no_assign {\n    //! Deny copy construction\n    no_copy( const no_copy& );\npublic:\n    //! Allow default construction\n    no_copy() {}\n};\n\n#if TBB_DEPRECATED_MUTEX_COPYING\nclass mutex_copy_deprecated_and_disabled {};\n#else\n// By default various implementations of mutexes are not copy constructible\n// and not copy assignable.\nclass mutex_copy_deprecated_and_disabled : no_copy {};\n#endif\n\n//! A function to check if passed in pointer is aligned on a specific border\ntemplate<typename T>\ninline bool is_aligned(T* pointer, uintptr_t alignment) {\n    return 0==((uintptr_t)pointer & (alignment-1));\n}\n\n//! A function to check if passed integer is a power of 2\ntemplate<typename integer_type>\ninline bool is_power_of_two(integer_type arg) {\n    return arg && (0 == (arg & (arg - 1)));\n}\n\n//! A function to compute arg modulo divisor where divisor is a power of 2.\ntemplate<typename argument_integer_type, typename divisor_integer_type>\ninline argument_integer_type modulo_power_of_two(argument_integer_type arg, divisor_integer_type divisor) {\n    __TBB_ASSERT( is_power_of_two(divisor), \"Divisor should be a power of two\" );\n    return (arg & (divisor - 1));\n}\n\n\n//! A function to determine if arg is a power of 2 at least as big as another power of 2.\n// i.e. for strictly positive i and j, with j being a power of 2,\n// determines whether i==j<<k for some nonnegative k (so i==j yields true).\ntemplate<typename argument_integer_type, typename power2_integer_type>\ninline bool is_power_of_two_at_least(argument_integer_type arg, power2_integer_type power2) {\n    __TBB_ASSERT( is_power_of_two(power2), \"Divisor should be a power of two\" );\n    return 0 == (arg & (arg - power2));\n}\n\n//! Utility template function to prevent \"unused\" warnings by various compilers.\ntemplate<typename T1> void suppress_unused_warning( const T1& ) {}\ntemplate<typename T1, typename T2> void suppress_unused_warning( const T1&, const T2& ) {}\ntemplate<typename T1, typename T2, typename T3> void suppress_unused_warning( const T1&, const T2&, const T3& ) {}\n\n// Struct to be used as a version tag for inline functions.\n/** Version tag can be necessary to prevent loader on Linux from using the wrong\n    symbol in debug builds (when inline functions are compiled as out-of-line). **/\nstruct version_tag_v3 {};\n\ntypedef version_tag_v3 version_tag;\n\n} // internal\n\n//! Dummy type that distinguishes splitting constructor from copy constructor.\n/**\n * See description of parallel_for and parallel_reduce for example usages.\n * @ingroup algorithms\n */\nclass split {\n};\n\n//! Type enables transmission of splitting proportion from partitioners to range objects\n/**\n * In order to make use of such facility Range objects must implement\n * splitting constructor with this type passed and initialize static\n * constant boolean field 'is_splittable_in_proportion' with the value\n * of 'true'\n */\nclass proportional_split: internal::no_assign {\npublic:\n    proportional_split(size_t _left = 1, size_t _right = 1) : my_left(_left), my_right(_right) { }\n\n    size_t left() const { return my_left; }\n    size_t right() const { return my_right; }\n\n    // used when range does not support proportional split\n    operator split() const { return split(); }\n\n#if __TBB_ENABLE_RANGE_FEEDBACK\n    void set_proportion(size_t _left, size_t _right) {\n        my_left = _left;\n        my_right = _right;\n    }\n#endif\nprivate:\n    size_t my_left, my_right;\n};\n\n} // tbb\n\n// Following is a set of classes and functions typically used in compile-time \"metaprogramming\".\n// TODO: move all that to a separate header\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT || __TBB_CPP11_SMART_POINTERS_PRESENT\n#include <memory> // for allocator_traits, unique_ptr\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT || __TBB_CPP11_DECLTYPE_PRESENT || _LIBCPP_VERSION\n#include <utility> // for std::move, std::forward, std::declval\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename T, typename... Args>\n    std::unique_ptr<T> make_unique(Args&&... args) {\n        return std::unique_ptr<T>(new T(std::forward<Args>(args)...));\n    }\n#endif\n\n//! Class for determining type of std::allocator<T>::value_type.\ntemplate<typename T>\nstruct allocator_type {\n    typedef T value_type;\n};\n\n#if _MSC_VER\n//! Microsoft std::allocator has non-standard extension that strips const from a type.\ntemplate<typename T>\nstruct allocator_type<const T> {\n    typedef T value_type;\n};\n#endif\n\n// Ad-hoc implementation of true_type & false_type\n// Intended strictly for internal use! For public APIs (traits etc), use C++11 analogues.\ntemplate <bool v>\nstruct bool_constant {\n    static /*constexpr*/ const bool value = v;\n};\ntypedef bool_constant<true> true_type;\ntypedef bool_constant<false> false_type;\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\nusing std::allocator_traits;\n#else\ntemplate<typename allocator>\nstruct allocator_traits{\n    typedef tbb::internal::false_type propagate_on_container_move_assignment;\n};\n#endif\n\n//! A template to select either 32-bit or 64-bit constant as compile time, depending on machine word size.\ntemplate <unsigned u, unsigned long long ull >\nstruct select_size_t_constant {\n    //Explicit cast is needed to avoid compiler warnings about possible truncation.\n    //The value of the right size,   which is selected by ?:, is anyway not truncated or promoted.\n    static const size_t value = (size_t)((sizeof(size_t)==sizeof(u)) ? u : ull);\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nusing std::move;\nusing std::forward;\n#elif defined(_LIBCPP_NAMESPACE)\n// libc++ defines \"pre-C++11 move and forward\" similarly to ours; use it to avoid name conflicts in some cases.\nusing std::_LIBCPP_NAMESPACE::move;\nusing std::_LIBCPP_NAMESPACE::forward;\n#else\n// It is assumed that cv qualifiers, if any, are part of the deduced type.\ntemplate <typename T>\nT& move( T& x ) { return x; }\ntemplate <typename T>\nT& forward( T& x ) { return x; }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n// Helper macros to simplify writing templates working with both C++03 and C++11.\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#define  __TBB_FORWARDING_REF(A) A&&\n#else\n// It is assumed that cv qualifiers, if any, are part of a deduced type.\n// Thus this macro should not be used in public interfaces.\n#define  __TBB_FORWARDING_REF(A) A&\n#endif\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#define __TBB_PARAMETER_PACK ...\n#define __TBB_PACK_EXPANSION(A) A...\n#else\n#define __TBB_PARAMETER_PACK\n#define __TBB_PACK_EXPANSION(A) A\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_CPP11_DECLTYPE_PRESENT\n#if __TBB_CPP11_DECLVAL_BROKEN\n// Ad-hoc implementation of std::declval\ntemplate <class T> __TBB_FORWARDING_REF(T) declval() /*noexcept*/;\n#else\nusing std::declval;\n#endif\n#endif\n\ntemplate <bool condition>\nstruct STATIC_ASSERTION_FAILED;\n\ntemplate <>\nstruct STATIC_ASSERTION_FAILED<false> { enum {value=1};};\n\ntemplate<>\nstruct STATIC_ASSERTION_FAILED<true>; //intentionally left undefined to cause compile time error\n\n//! @endcond\n}} // namespace tbb::internal\n\n#if __TBB_STATIC_ASSERT_PRESENT\n#define __TBB_STATIC_ASSERT(condition,msg) static_assert(condition,msg)\n#else\n//please note condition is intentionally inverted to get a bit more understandable error msg\n#define __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)       \\\n    enum {static_assert_on_line_##line = tbb::internal::STATIC_ASSERTION_FAILED<!(condition)>::value}\n\n#define __TBB_STATIC_ASSERT_IMPL(condition,msg,line) __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)\n//! Verify condition, at compile time\n#define __TBB_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT_IMPL(condition,msg,__LINE__)\n#endif\n\n#endif /* RC_INVOKED */\n#endif /* __TBB_tbb_stddef_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbb_thread.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_thread_H\n#define __TBB_tbb_thread_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )\nnamespace tbb { namespace internal {\n#if __TBB_WIN8UI_SUPPORT\n    typedef size_t thread_id_type;\n#else  // __TBB_WIN8UI_SUPPORT\n    typedef DWORD thread_id_type;\n#endif // __TBB_WIN8UI_SUPPORT\n}} //namespace tbb::internal\n#else\n#define __TBB_NATIVE_THREAD_ROUTINE void*\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )\n#include <pthread.h>\nnamespace tbb { namespace internal {\n    typedef pthread_t thread_id_type;\n}} //namespace tbb::internal\n#endif // _WIN32||_WIN64\n\n#include \"atomic.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tick_count.h\"\n\n#include __TBB_STD_SWAP_HEADER\n#include <iosfwd>\n\nnamespace tbb {\n\nnamespace internal {\n    class tbb_thread_v3;\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n\nnamespace internal {\n\n    //! Allocate a closure\n    void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );\n    //! Free a closure allocated by allocate_closure_v3\n    void __TBB_EXPORTED_FUNC free_closure_v3( void* );\n\n    struct thread_closure_base {\n        void* operator new( size_t size ) {return allocate_closure_v3(size);}\n        void operator delete( void* ptr ) {free_closure_v3(ptr);}\n    };\n\n    template<class F> struct thread_closure_0: thread_closure_base {\n        F function;\n\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_0 *self = static_cast<thread_closure_0*>(c);\n            self->function();\n            delete self;\n            return 0;\n        }\n        thread_closure_0( const F& f ) : function(f) {}\n    };\n    //! Structure used to pass user function with 1 argument to thread.\n    template<class F, class X> struct thread_closure_1: thread_closure_base {\n        F function;\n        X arg1;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_1 *self = static_cast<thread_closure_1*>(c);\n            self->function(self->arg1);\n            delete self;\n            return 0;\n        }\n        thread_closure_1( const F& f, const X& x ) : function(f), arg1(x) {}\n    };\n    template<class F, class X, class Y> struct thread_closure_2: thread_closure_base {\n        F function;\n        X arg1;\n        Y arg2;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_2 *self = static_cast<thread_closure_2*>(c);\n            self->function(self->arg1, self->arg2);\n            delete self;\n            return 0;\n        }\n        thread_closure_2( const F& f, const X& x, const Y& y ) : function(f), arg1(x), arg2(y) {}\n    };\n\n    //! Versioned thread class.\n    class tbb_thread_v3 {\n#if __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN\n        // Workaround for a compiler bug: declaring the copy constructor as public\n        // enables use of the moving constructor.\n        // The definition is not provided in order to prohibit copying.\n    public:\n#endif\n        tbb_thread_v3(const tbb_thread_v3&); // = delete;   // Deny access\n    public:\n#if _WIN32||_WIN64\n        typedef HANDLE native_handle_type;\n#else\n        typedef pthread_t native_handle_type;\n#endif // _WIN32||_WIN64\n\n        class id;\n        //! Constructs a thread object that does not represent a thread of execution.\n        tbb_thread_v3() __TBB_NOEXCEPT(true) : my_handle(0)\n#if _WIN32||_WIN64\n            , my_thread_id(0)\n#endif // _WIN32||_WIN64\n        {}\n\n        //! Constructs an object and executes f() in a new thread\n        template <class F> explicit tbb_thread_v3(F f) {\n            typedef internal::thread_closure_0<F> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f));\n        }\n        //! Constructs an object and executes f(x) in a new thread\n        template <class F, class X> tbb_thread_v3(F f, X x) {\n            typedef internal::thread_closure_1<F,X> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x));\n        }\n        //! Constructs an object and executes f(x,y) in a new thread\n        template <class F, class X, class Y> tbb_thread_v3(F f, X x, Y y) {\n            typedef internal::thread_closure_2<F,X,Y> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x,y));\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3(tbb_thread_v3&& x) __TBB_NOEXCEPT(true)\n            : my_handle(x.my_handle)\n#if _WIN32||_WIN64\n            , my_thread_id(x.my_thread_id)\n#endif\n        {\n            x.internal_wipe();\n        }\n        tbb_thread_v3& operator=(tbb_thread_v3&& x) __TBB_NOEXCEPT(true) {\n            internal_move(x);\n            return *this;\n        }\n    private:\n        tbb_thread_v3& operator=(const tbb_thread_v3& x); // = delete;\n    public:\n#else  // __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3& operator=(tbb_thread_v3& x) {\n            internal_move(x);\n            return *this;\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n        void swap( tbb_thread_v3& t ) __TBB_NOEXCEPT(true) {tbb::swap( *this, t );}\n        bool joinable() const __TBB_NOEXCEPT(true) {return my_handle!=0; }\n        //! The completion of the thread represented by *this happens before join() returns.\n        void __TBB_EXPORTED_METHOD join();\n        //! When detach() returns, *this no longer represents the possibly continuing thread of execution.\n        void __TBB_EXPORTED_METHOD detach();\n        ~tbb_thread_v3() {if( joinable() ) detach();}\n        inline id get_id() const __TBB_NOEXCEPT(true);\n        native_handle_type native_handle() { return my_handle; }\n\n        //! The number of hardware thread contexts.\n        /** Before TBB 3.0 U4 this methods returned the number of logical CPU in\n            the system. Currently on Windows, Linux and FreeBSD it returns the\n            number of logical CPUs available to the current process in accordance\n            with its affinity mask.\n\n            NOTE: The return value of this method never changes after its first\n            invocation. This means that changes in the process affinity mask that\n            took place after this method was first invoked will not affect the\n            number of worker threads in the TBB worker threads pool. **/\n        static unsigned __TBB_EXPORTED_FUNC hardware_concurrency() __TBB_NOEXCEPT(true);\n    private:\n        native_handle_type my_handle;\n#if _WIN32||_WIN64\n        thread_id_type my_thread_id;\n#endif // _WIN32||_WIN64\n\n        void internal_wipe() __TBB_NOEXCEPT(true) {\n            my_handle = 0;\n#if _WIN32||_WIN64\n            my_thread_id = 0;\n#endif\n        }\n        void internal_move(tbb_thread_v3& x) __TBB_NOEXCEPT(true) {\n            if (joinable()) detach();\n            my_handle = x.my_handle;\n#if _WIN32||_WIN64\n            my_thread_id = x.my_thread_id;\n#endif // _WIN32||_WIN64\n            x.internal_wipe();\n        }\n\n        /** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */\n        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),\n                             void* closure );\n        friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n        friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n    };\n\n    class tbb_thread_v3::id {\n        thread_id_type my_id;\n        id( thread_id_type id_ ) : my_id(id_) {}\n\n        friend class tbb_thread_v3;\n    public:\n        id() __TBB_NOEXCEPT(true) : my_id(0) {}\n\n        friend bool operator==( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n\n        template<class charT, class traits>\n        friend std::basic_ostream<charT, traits>&\n        operator<< (std::basic_ostream<charT, traits> &out,\n                    tbb_thread_v3::id id)\n        {\n            out << id.my_id;\n            return out;\n        }\n        friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n\n        friend inline size_t tbb_hasher( const tbb_thread_v3::id& id ) {\n            __TBB_STATIC_ASSERT(sizeof(id.my_id) <= sizeof(size_t), \"Implementaion assumes that thread_id_type fits into machine word\");\n            return tbb::tbb_hasher(id.my_id);\n        }\n\n        // A workaround for lack of tbb::atomic<id> (which would require id to be POD in C++03).\n        friend id atomic_compare_and_swap(id& location, const id& value, const id& comparand){\n            return as_atomic(location.my_id).compare_and_swap(value.my_id, comparand.my_id);\n        }\n    }; // tbb_thread_v3::id\n\n    tbb_thread_v3::id tbb_thread_v3::get_id() const __TBB_NOEXCEPT(true) {\n#if _WIN32||_WIN64\n        return id(my_thread_id);\n#else\n        return id(my_handle);\n#endif // _WIN32||_WIN64\n    }\n\n    void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n    tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n    void __TBB_EXPORTED_FUNC thread_yield_v3();\n    void __TBB_EXPORTED_FUNC thread_sleep_v3(const tick_count::interval_t &i);\n\n    inline bool operator==(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id == y.my_id;\n    }\n    inline bool operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id != y.my_id;\n    }\n    inline bool operator<(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id < y.my_id;\n    }\n    inline bool operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id <= y.my_id;\n    }\n    inline bool operator>(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id > y.my_id;\n    }\n    inline bool operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id >= y.my_id;\n    }\n\n} // namespace internal;\n\n//! Users reference thread class by name tbb_thread\ntypedef internal::tbb_thread_v3 tbb_thread;\n\nusing internal::operator==;\nusing internal::operator!=;\nusing internal::operator<;\nusing internal::operator>;\nusing internal::operator<=;\nusing internal::operator>=;\n\ninline void move( tbb_thread& t1, tbb_thread& t2 ) {\n    internal::move_v3(t1, t2);\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 )  __TBB_NOEXCEPT(true) {\n    std::swap(t1.my_handle, t2.my_handle);\n#if _WIN32||_WIN64\n    std::swap(t1.my_thread_id, t2.my_thread_id);\n#endif /* _WIN32||_WIN64 */\n}\n\nnamespace this_tbb_thread {\n    inline tbb_thread::id get_id() { return internal::thread_get_id_v3(); }\n    //! Offers the operating system the opportunity to schedule another thread.\n    inline void yield() { internal::thread_yield_v3(); }\n    //! The current thread blocks at least until the time specified.\n    inline void sleep(const tick_count::interval_t &i) {\n        internal::thread_sleep_v3(i);\n    }\n}  // namespace this_tbb_thread\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_thread_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tbbmalloc_proxy.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nReplacing the standard memory allocation routines in Microsoft* C/C++ RTL\n(malloc/free, global new/delete, etc.) with the TBB memory allocator.\n\nInclude the following header to a source of any binary which is loaded during\napplication startup\n\n#include \"tbb/tbbmalloc_proxy.h\"\n\nor add following parameters to the linker options for the binary which is\nloaded during application startup. It can be either exe-file or dll.\n\nFor win32\ntbbmalloc_proxy.lib /INCLUDE:\"___TBB_malloc_proxy\"\nwin64\ntbbmalloc_proxy.lib /INCLUDE:\"__TBB_malloc_proxy\"\n*/\n\n#ifndef __TBB_tbbmalloc_proxy_H\n#define __TBB_tbbmalloc_proxy_H\n\n#if _MSC_VER\n\n#ifdef _DEBUG\n    #pragma comment(lib, \"tbbmalloc_proxy_debug.lib\")\n#else\n    #pragma comment(lib, \"tbbmalloc_proxy.lib\")\n#endif\n\n#if defined(_WIN64)\n    #pragma comment(linker, \"/include:__TBB_malloc_proxy\")\n#else\n    #pragma comment(linker, \"/include:___TBB_malloc_proxy\")\n#endif\n\n#else\n/* Primarily to support MinGW */\n\nextern \"C\" void __TBB_malloc_proxy();\nstruct __TBB_malloc_proxy_caller {\n    __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }\n} volatile __TBB_malloc_proxy_helper_object;\n\n#endif // _MSC_VER\n\n#endif //__TBB_tbbmalloc_proxy_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/include/tbb/tick_count.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tick_count_H\n#define __TBB_tick_count_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#elif __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif /* (choice of OS) */\n\nnamespace tbb {\n\n//! Absolute timestamp\n/** @ingroup timing */\nclass tick_count {\npublic:\n    //! Relative time interval.\n    class interval_t {\n        long long value;\n        explicit interval_t( long long value_ ) : value(value_) {}\n    public:\n        //! Construct a time interval representing zero time duration\n        interval_t() : value(0) {};\n\n        //! Construct a time interval representing sec seconds time  duration\n        explicit interval_t( double sec );\n\n        //! Return the length of a time interval in seconds\n        double seconds() const;\n\n        friend class tbb::tick_count;\n\n        //! Extract the intervals from the tick_counts and subtract them.\n        friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n        //! Add two intervals.\n        friend interval_t operator+( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value+j.value);\n        }\n\n        //! Subtract two intervals.\n        friend interval_t operator-( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value-j.value);\n        }\n\n        //! Accumulation operator\n        interval_t& operator+=( const interval_t& i ) {value += i.value; return *this;}\n\n        //! Subtraction operator\n        interval_t& operator-=( const interval_t& i ) {value -= i.value; return *this;}\n    private:\n        static long long ticks_per_second(){\n#if _WIN32||_WIN64\n            LARGE_INTEGER qpfreq;\n            int rval = QueryPerformanceFrequency(&qpfreq);\n            __TBB_ASSERT_EX(rval, \"QueryPerformanceFrequency returned zero\");\n            return static_cast<long long>(qpfreq.QuadPart);\n#elif __linux__\n            return static_cast<long long>(1E9);\n#else /* generic Unix */\n            return static_cast<long long>(1E6);\n#endif /* (choice of OS) */\n        }\n    };\n\n    //! Construct an absolute timestamp initialized to zero.\n    tick_count() : my_count(0) {};\n\n    //! Return current time.\n    static tick_count now();\n\n    //! Subtract two timestamps to get the time interval between\n    friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n    //! Return the resolution of the clock in seconds per tick.\n    static double resolution() { return 1.0 / interval_t::ticks_per_second(); }\n\nprivate:\n    long long my_count;\n};\n\ninline tick_count tick_count::now() {\n    tick_count result;\n#if _WIN32||_WIN64\n    LARGE_INTEGER qpcnt;\n    int rval = QueryPerformanceCounter(&qpcnt);\n    __TBB_ASSERT_EX(rval, \"QueryPerformanceCounter failed\");\n    result.my_count = qpcnt.QuadPart;\n#elif __linux__\n    struct timespec ts;\n    int status = clock_gettime( CLOCK_REALTIME, &ts );\n    __TBB_ASSERT_EX( status==0, \"CLOCK_REALTIME not supported\" );\n    result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);\n#else /* generic Unix */\n    struct timeval tv;\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);\n#endif /*(choice of OS) */\n    return result;\n}\n\ninline tick_count::interval_t::interval_t( double sec ) {\n    value = static_cast<long long>(sec*interval_t::ticks_per_second());\n}\n\ninline tick_count::interval_t operator-( const tick_count& t1, const tick_count& t0 ) {\n    return tick_count::interval_t( t1.my_count-t0.my_count );\n}\n\ninline double tick_count::interval_t::seconds() const {\n    return value*tick_count::resolution();\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tick_count_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\nTop level directory for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n<H2>Common directories</H2>\n<DL>\n<DT><A HREF=\"doc/html/index.html\">doc</A>\n<DD>Documentation for the library.\n<DT><A HREF=\"include/index.html\">include</A>\n<DD>Include files required for compiling code that uses the library.\n<DT><A HREF=\"examples/index.html\">examples</A>\n<DD>Examples of how to use the library.\n<DT><A HREF=\"python/index.html\">python</A>\n<DD>Python* API for Intel TBB.\n</DL>\n<H2>Intel TBB source package</H2>\n<P>\nTo build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.\nTo port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.\n</P>\n<H3>Files</H3>\n<DL>\n<DT><A HREF=\"Makefile\">Makefile</A>\n<DD>Top-level Makefile for Intel TBB. See also the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"src/index.html\">src</A>\n<DD>Source code for the library.\n<DT><A HREF=\"build/index.html\">build</A>, <A HREF=\"jni/\">jni</A>\n<DD>Internal Makefile infrastructure for Intel TBB. Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H2>Intel TBB binary package</H2>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"bin\">bin</A>\n<DD>Start-up scripts for sourcing library for Linux* OS and macOS*. For Windows* OS: start-up scripts and dynamic-link libraries.\n<DT><A HREF=\"lib\">lib</A>\n<DD>Platform-specific binary files for the library.\n</DL>\n<HR>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/jni/Android.mk",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nexport tbb_root?=$(NDK_PROJECT_PATH)\n\nifeq (armeabi-v7a,$(APP_ABI))\n\texport SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-arm\nelse ifeq (arm64-v8a,$(APP_ABI))\n\texport SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-arm64\nelse\n\texport SYSROOT:=$(NDK_ROOT)/platforms/$(APP_PLATFORM)/arch-$(APP_ABI)\nendif\n\nifeq (windows,$(tbb_os))\n\texport CPATH_SEPARATOR :=;\nelse\n\texport CPATH_SEPARATOR :=:\nendif\n\nexport ANDROID_NDK_ROOT:=$(NDK_ROOT)\nexport ndk_version:=$(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))\nndk_version:= $(firstword $(subst /, ,$(ndk_version)))\nndk_version:= $(firstword $(subst \\, ,$(ndk_version)))\n\nifeq (clang,$(compiler))\n\tifeq (,$(findstring $(ndk_version),ifeq (,$(findstring $(ndk_version),$(foreach v, 7 8 9 10 11 12,r$(v) r$(v)b r$(v)c r$(v)d r$(v)e)))))\n\t\tTBB_RTL :=llvm-libc++\n\telse\n\t\tTBB_RTL :=llvm-libc++/libcxx\n\tendif\n\tTBB_RTL_LIB :=llvm-libc++\n\tTBB_RTL_FILE :=libc++_shared.so\nelse\n\tTBB_RTL :=gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)\n\tTBB_RTL_LIB :=$(TBB_RTL)\n\tTBB_RTL_FILE :=libgnustl_shared.so\nendif\n\nexport CPATH := $(SYSROOT)/usr/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL)/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL)/libs/$(APP_ABI)/include$(CPATH_SEPARATOR)$(NDK_ROOT)/sources/android/support/include\n\nLIB_STL_ANDROID_DIR := $(NDK_ROOT)/sources/cxx-stl/$(TBB_RTL_LIB)/libs/$(APP_ABI)\n#LIB_STL_ANDROID is required to be set up for copying Android specific library to a device next to test\nexport LIB_STL_ANDROID := $(LIB_STL_ANDROID_DIR)/$(TBB_RTL_FILE)\nexport CPLUS_LIB_PATH := $(SYSROOT)/usr/lib -L$(LIB_STL_ANDROID_DIR)\nexport target_os_version:=$(APP_PLATFORM)\nexport tbb_tool_prefix:=$(TOOLCHAIN_PREFIX)\nexport TARGET_CXX\nexport TARGET_CC\nexport TARGET_CFLAGS\n\ninclude $(NDK_PROJECT_PATH)/src/Makefile\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/jni/Application.mk",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nifndef tbb_os\n\n  # Windows sets environment variable OS; for other systems, ask uname\n  ifeq ($(OS),)\n    OS:=$(shell uname)\n    ifeq ($(OS),)\n      $(error \"Cannot detect operating system\")\n    endif\n    export tbb_os=$(OS)\n  endif\n\n  ifeq ($(OS), Windows_NT)\n    export tbb_os=windows\n  endif\n  ifeq ($(OS), Linux)\n    export tbb_os=linux\n  endif\n  ifeq ($(OS), Darwin)\n    export tbb_os=macos\n  endif\n\nendif\n\nexport compiler?=clang\nexport arch?=ia32\nexport target?=android\n\nifeq (ia32,$(arch))\n    APP_ABI:=x86\n    export TRIPLE:=i686-linux-android\nelse ifeq (intel64,$(arch))\n    APP_ABI:=x86_64\n    export TRIPLE:=x86_64-linux-android\nelse ifeq (arm,$(arch))\n    APP_ABI:=armeabi-v7a\n    export TRIPLE:=arm-linux-androideabi\nelse ifeq (arm64,$(arch))\n    APP_ABI:=arm64-v8a\n    export TRIPLE:=aarch64-linux-android\nelse\n    APP_ABI:=$(arch)\nendif\n\napi_version?=21\nexport API_LEVEL:=$(api_version)\nAPP_PLATFORM:=android-$(api_version)\n\nifeq (clang,$(compiler))\n    NDK_TOOLCHAIN_VERSION:=clang\n    APP_STL:=c++_shared\nelse\n    NDK_TOOLCHAIN_VERSION:=4.9\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/Makefile",
    "content": "# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ntbb_root?=..\ninclude $(tbb_root)/build/common.inc\n.PHONY: all release test install test-install\n\nexport TBBROOT=$(abspath $(tbb_root))\nSRC=$(tbb_root)/python/*.py $(tbb_root)/python/tbb/*\nPY_SETUP=python $(tbb_root)/python/setup.py\n\nall: install test\n\nclean:\n\t$(PY_SETUP) clean -b$(CURDIR)\n\nrelease: CC=$(compiler)\nrelease: $(SRC) rml\n\t$(PY_SETUP) build -b$(CURDIR) -f check\n\ninstall: CC=$(compiler)\ninstall: $(SRC) rml\n\t$(PY_SETUP) build -b$(CURDIR) install\n\ntest:\n\tpython -m tbb test\n\nrml:\nifeq (linux,$(tbb_os))\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/rml/Makefile cfg=release rml\nrml_%:\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/rml/Makefile cfg=release $(subst rml_,,$@)\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/TBB.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom tbb import *\nfrom tbb import __all__, __doc__\n\nif __name__ == \"__main__\":\n    from tbb import _main\n    import sys\n    sys.exit(_main())\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Python* API for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n</H2>\n\n<H2>Overview</H2>\nIt is a preview Python* module which unlocks opportunities for additional performance in multi-threaded and multiprocess Python programs by enabling threading composability\nbetween two or more thread-enabled libraries like Numpy, Scipy, Sklearn, Dask, Joblib, and etc.\n<p></p>\nThe biggest improvement can be achieved when a task pool like the ThreadPool or Pool from the Python standard library or libraries like Dask or Joblib (used either in multi-threading or multi-processing mode)\nexecute tasks calling compute-intensive functions of Numpy/Scipy/Sklearn/PyDAAL which in turn are parallelized using Intel&reg; Math Kernel Library or/and Intel&reg; TBB.\n<p></p>\nThe module implements Pool class with the standard interface using Intel&reg; TBB which can be used to replace Python's ThreadPool.\nThanks to the monkey-patching technique implemented in class Monkey, no source code change is needed in order to enable threading composability in Python programs.\n<p></p>\nFor more information and examples, please refer to <A HREF=\"http://software.intel.com/en-us/blogs/2016/04/04/unleash-parallel-performance-of-python-programs\">online blog</A>.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"rml\">rml</A>\n<DD>The folder contains sources for building the plugin with cross-process dynamic thread scheduler implementation.\n<DT><A HREF=\"tbb\">tbb</A>\n<DD>The folder contains Python module sources.\n</DL>\n\n<H2>Files</H2>\n<DL>\n<DT><A HREF=\"setup.py\">setup.py</A>\n<DD>Standard Python setup script.\n<DT><A HREF=\"Makefile\">Makefile</A>\n<DD>Internal Makefile for building, installing, and testing. See below.\n<DT><A HREF=\"TBB.py\">TBB.py</A>\n<DD>Alternative entry point for Python module.\n</DL>\n\n<A NAME=build><H2>Build and install</H2></A>\nFor accessing targets defined in python/Makefile, please use\n<A HREF=\"../src/index.html\">src/Makefile</A>\ninstead and build runtime libraries before working with Python.\n<DL>\n<DT><TT>make -C ../src python_all</TT>\n<DD>Install and test as described below.\n<DT><TT>make -C ../src python_install</TT>\n<DD>Install module into Python environment.\n<DT><TT>make -C ../src python_test</TT>\n<DD>Test installed Intel&reg; TBB module for Python.\n<DT><TT>make -C ../src python_release</TT>\n<DD>Recompile Python module. Result is located in Intel&reg; TBB build directory.\n<DT><TT>make  -C ../src python_clean</TT>\n<DD>Remove any intermediate files produced by the commands above. Does not remove installed module.\n</DL>\n\n<H2>Command-line interface</H2>\n<DL>\n<DT><TT>python -m tbb -h</TT>\n<DD>Print documentation on command-line interface</DD>\n<DT><TT>pydoc tbb</TT>\n<DD>Read built-in documentation for Python interfaces.</DD>\n<DT><TT>python-tbb your_script.py</TT>\n<DT><TT>python -m tbb your_script.py</TT>\n<DD>Run your_script.py in context of `with tbb.Monkey():` when Intel&reg; TBB is enabled. By default only multi-threading will be covered.</DD>\n<DT><TT>python -m tbb --ipc your_script.py</TT>\n<DD>Run your_script.py in context of `with tbb.Monkey():` when Intel&reg; TBB enabled in both multi-threading and multi-processing modes.</DD>\n</DL>\n\n<H2>System Requirements</H2>\nThe Python module was not tested on older versions of Python thus we require at least Python versions 2.7 and 3.5 or higher.<BR>\nSWIG must be of version 3.0.6 or higher<BR>\nOS versions:\nMicrosoft* Windows* Server 2012,\nMicrosoft* Windows* 10,\nUbuntu* 14.04 LTS,\nRed Hat* Enterprise Linux* 7.\n<HR>\n<A href=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2016-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/rml/Makefile",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n.NOTPARALLEL:\n\ntbb_root ?= ../..\nBUILDING_PHASE=0\nTEST_RESOURCE = $(RML.RES)\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,_$(cfg))\n\nifneq (linux,$(target))\n$(error \"IPC RML is supported on Linux only\")\nendif\n\n.PHONY: default rml test clean\n\n# default target\ndefault: rml test\n\nRML_ROOT ?= $(tbb_root)/src/rml\nRML_SERVER_ROOT = $(RML_ROOT)/server\n# TODO: new API needs to be added for this server, exposing everything\nRML.DEF =\n\nVPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)\nVPATH += $(tbb_root)/python/rml $(RML_ROOT)/test $(tbb_root)/src/test\nVPATH += $(tbb_root)/src/rml/client\n\ninclude $(tbb_root)/build/common_rules.inc\n\n#--------------------------------------------------------------------------\n# Define rules for making the RML server shared library and client objects.\n#--------------------------------------------------------------------------\n\n# Object files that make up RML server\nRML_SERVER.OBJ = ipc_server.$(OBJ)\n\n# Object files that RML clients need\nRML_TBB_CLIENT.OBJ ?= ipc_utils.$(OBJ)\nRML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ)\nifeq (windows,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ))\nendif\nifeq (linux,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))\nendif\n\nRML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nTBB_DEP_NON_RML_TEST?= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nifeq ($(cfg),debug)\nRML_TBB_DEP+= spin_mutex_rml.$(OBJ)\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)\nelse\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ)\nendif\nLIBS += $(LIBDL)\nTBB_DEP_RML_TEST =  rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ)\n\nINCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).\nT_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)\n\n# Suppress superfluous warnings for RML compilation\nR_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \\\n\t\t $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1\n\n%.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\ntbb_misc_rml.$(OBJ) $(RML_SERVER.OBJ): version_string.ver\n\nRML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ)\n\n$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\n$(RML_TEST.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<\n\nifneq (,$(RML.DEF))\nrml.def: $(RML.DEF)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@\n\nLIB_LINK_FLAGS += $(EXPORT_KEY)rml.def\n$(RML.DLL): rml.def\nendif\n\n$(RML.DLL): CPLUS_FLAGS += $(SDL_FLAGS)\n$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)\n$(RML.DLL): $(RML_TBB_DEP) $(RML.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ)\n\t$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)\n\nifneq (,$(RML_NO_VERSION.DLL))\n$(RML_NO_VERSION.DLL):\n\techo \"INPUT ($(RML.DLL))\" > $(RML_NO_VERSION.DLL)\nendif\n\nrml: rml_dll\nrml_dll: $(RML.DLL)\n\n#------------------------------------------------------\n# End of rules for making the RML server shared library\n#------------------------------------------------------\n\n#------------------------------------------------------\n# Define rules for making the RML unit tests\n#------------------------------------------------------\n\nadd_debug=$(basename $(1))_debug$(suffix $(1))\ncross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))\n\nRML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT)\nRML_CUSTOM_TESTS = test_rml_tbb.$(TEST_EXT)\n\ntest_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\n$(RML_TESTS): %.$(TEST_EXT): %.$(OBJ) $(TBB_DEP_NON_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\nexport IPC_ENABLE=1\n### run_cmd is usually empty\ntest: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RML_CUSTOM_TESTS)\n\t$(run_cmd) ./test_job_automaton.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_thread_monitor.$(TEST_EXT) $(args)\n#TODO:\t$(run_cmd) ./test_rml_tbb.$(TEST_EXT) $(args)\n#TODO:\tIPC_ENABLE=1 LD_PRELOAD=$(abspath libirml.so.1) $(MAKE) -rf $(tbb_root)/src/Makefile cfg=release tbb_test_release\n\n#------------------------------------------------------\n# End of rules for making the TBBMalloc unit tests\n#------------------------------------------------------\n\n# Include automatically generated dependencies\n-include *.d\n\nclean:\n\t-rm -rf *.o *.so* *.d *.def version_string.ver\n\t-rm -rf $(work_dir)_release/libirml*\n\t-rm -rf $(work_dir)_debug/libirml*\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/rml/ipc_server.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"rml_tbb.h\"\n#include \"../server/thread_monitor.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/scheduler_common.h\"\n#include \"tbb/governor.h\"\n#include \"tbb/tbb_misc.h\"\n\n#include \"ipc_utils.h\"\n\n#include <fcntl.h>\n\nnamespace rml {\nnamespace internal {\n\nstatic const char* IPC_ENABLE_VAR_NAME = \"IPC_ENABLE\";\n\ntypedef versioned_object::version_type version_type;\n\nextern \"C\" factory::status_type __RML_open_factory(factory& f, version_type& server_version, version_type client_version) {\n    if( !tbb::internal::rml::get_enable_flag( IPC_ENABLE_VAR_NAME ) ) {\n        return factory::st_incompatible;\n    }\n\n    // Hack to keep this library from being closed\n    static tbb::atomic<bool> one_time_flag;\n    if( one_time_flag.compare_and_swap(true,false)==false ) {\n        __TBB_ASSERT( (size_t)f.library_handle!=factory::c_dont_unload, NULL );\n#if _WIN32||_WIN64\n        f.library_handle = reinterpret_cast<HMODULE>(factory::c_dont_unload);\n#else\n        f.library_handle = reinterpret_cast<void*>(factory::c_dont_unload);\n#endif\n    }\n    // End of hack\n\n    return factory::st_success;\n}\n\nextern \"C\" void __RML_close_factory(factory& f) {\n}\n\nclass ipc_thread_monitor : public thread_monitor {\npublic:\n    ipc_thread_monitor() : thread_monitor() {}\n\n#if USE_WINTHREAD\n#elif USE_PTHREAD\n    static handle_type launch(thread_routine_type thread_routine, void* arg, size_t stack_size);\n#endif\n};\n\n#if USE_WINTHREAD\n#elif USE_PTHREAD\ninline ipc_thread_monitor::handle_type ipc_thread_monitor::launch(void* (*thread_routine)(void*), void* arg, size_t stack_size) {\n    pthread_attr_t s;\n    if( pthread_attr_init( &s ) ) return 0;\n    if( stack_size>0 ) {\n        if( pthread_attr_setstacksize( &s, stack_size ) ) return 0;\n    }\n    pthread_t handle;\n    if( pthread_create( &handle, &s, thread_routine, arg ) ) return 0;\n    if( pthread_attr_destroy( &s ) ) return 0;\n    return handle;\n}\n#endif\n\n}} //rml::internal\n\nusing rml::internal::ipc_thread_monitor;\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\ntypedef ipc_thread_monitor::handle_type thread_handle;\n\nclass ipc_server;\n\nstatic const char* IPC_MAX_THREADS_VAR_NAME = \"MAX_THREADS\";\nstatic const char* IPC_ACTIVE_SEM_PREFIX = \"/__IPC_active\";\nstatic const char* IPC_STOP_SEM_PREFIX = \"/__IPC_stop\";\nstatic const char* IPC_ACTIVE_SEM_VAR_NAME = \"IPC_ACTIVE_SEMAPHORE\";\nstatic const char* IPC_STOP_SEM_VAR_NAME = \"IPC_STOP_SEMAPHORE\";\nstatic const mode_t IPC_SEM_MODE = 0660;\n\nstatic tbb::atomic<int> my_global_thread_count;\n\nchar* get_active_sem_name() {\n    char* value = getenv( IPC_ACTIVE_SEM_VAR_NAME );\n    if( value!=NULL && strlen( value )>0 ) {\n        char* sem_name = new char[strlen( value ) + 1];\n        __TBB_ASSERT( sem_name!=NULL, NULL );\n        strcpy( sem_name, value );\n        return sem_name;\n    } else {\n        return get_shared_name( IPC_ACTIVE_SEM_PREFIX );\n    }\n}\n\nchar* get_stop_sem_name() {\n    char* value = getenv( IPC_STOP_SEM_VAR_NAME );\n    if( value!=NULL && strlen( value )>0 ) {\n        char* sem_name = new char[strlen( value ) + 1];\n        __TBB_ASSERT( sem_name!=NULL, NULL );\n        strcpy( sem_name, value );\n        return sem_name;\n    } else {\n        return get_shared_name( IPC_STOP_SEM_PREFIX );\n    }\n}\n\nstatic void release_thread_sem(sem_t* my_sem) {\n    int old;\n    do {\n        old = my_global_thread_count;\n        if( old<=0 ) return;\n    } while( my_global_thread_count.compare_and_swap(old-1, old)!=old );\n    if( old>0 ) {\n        sem_post( my_sem );\n    }\n}\n\nextern \"C\" void set_active_sem_name() {\n    char* templ = new char[strlen( IPC_ACTIVE_SEM_PREFIX ) + strlen( \"_XXXXXX\" ) + 1];\n    __TBB_ASSERT( templ!=NULL, NULL );\n    strcpy( templ, IPC_ACTIVE_SEM_PREFIX );\n    strcpy( templ + strlen( IPC_ACTIVE_SEM_PREFIX ), \"_XXXXXX\" );\n    char* sem_name = mktemp( templ );\n    if( sem_name!=NULL ) {\n        int status = setenv( IPC_ACTIVE_SEM_VAR_NAME, sem_name, 1 );\n        __TBB_ASSERT_EX( status==0, NULL );\n    }\n    delete[] templ;\n}\n\nextern \"C\" void set_stop_sem_name() {\n    char* templ = new char[strlen( IPC_STOP_SEM_PREFIX ) + strlen( \"_XXXXXX\" ) + 1];\n    __TBB_ASSERT( templ!=NULL, NULL );\n    strcpy( templ, IPC_STOP_SEM_PREFIX );\n    strcpy( templ + strlen( IPC_STOP_SEM_PREFIX ), \"_XXXXXX\" );\n    char* sem_name = mktemp( templ );\n    if( sem_name!=NULL ) {\n        int status = setenv( IPC_STOP_SEM_VAR_NAME, sem_name, 1 );\n        __TBB_ASSERT_EX( status==0, NULL );\n    }\n    delete[] templ;\n}\n\nextern \"C\" void release_resources() {\n    if( my_global_thread_count!=0 ) {\n        char* active_sem_name = get_active_sem_name();\n        sem_t* my_active_sem = sem_open( active_sem_name, O_CREAT );\n        __TBB_ASSERT( my_active_sem, \"Unable to open active threads semaphore\" );\n        delete[] active_sem_name;\n\n        do {\n            release_thread_sem( my_active_sem );\n        } while( my_global_thread_count!=0 );\n    }\n}\n\nextern \"C\" void release_semaphores() {\n    int status = 0;\n    char* sem_name = NULL;\n\n    sem_name = get_active_sem_name();\n    if( sem_name==NULL ) {\n        runtime_warning(\"Can not get RML semaphore name\");\n        return;\n    }\n    status = sem_unlink( sem_name );\n    if( status!=0 ) {\n        if( errno==ENOENT ) {\n            /* There is no semaphore with the given name, nothing to do */\n        } else {\n            runtime_warning(\"Can not release RML semaphore\");\n            return;\n        }\n    }\n    delete[] sem_name;\n\n    sem_name = get_stop_sem_name();\n    if( sem_name==NULL ) {\n        runtime_warning( \"Can not get RML semaphore name\" );\n        return;\n    }\n    status = sem_unlink( sem_name );\n    if( status!=0 ) {\n        if( errno==ENOENT ) {\n            /* There is no semaphore with the given name, nothing to do */\n        } else {\n            runtime_warning(\"Can not release RML semaphore\");\n            return;\n        }\n    }\n    delete[] sem_name;\n}\n\nclass ipc_worker: no_copy {\nprotected:\n    //! State in finite-state machine that controls the worker.\n    /** State diagram:\n                    /----------stop---\\\n                    |           ^     |\n                    V           |     |\n        init --> starting --> normal  |\n          |         |           |     |\n          |         V           |     |\n          \\------> quit <-------/<----/\n      */\n    enum state_t {\n        //! *this is initialized\n        st_init,\n        //! *this has associated thread that is starting up.\n        st_starting,\n        //! Associated thread is doing normal life sequence.\n        st_normal,\n        //! Associated thread is stopped but can be started again.\n        st_stop,\n        //! Associated thread has ended normal life sequence and promises to never touch *this again.\n        st_quit\n    };\n    atomic<state_t> my_state;\n\n    //! Associated server\n    ipc_server& my_server;\n\n    //! Associated client\n    tbb_client& my_client;\n\n    //! index used for avoiding the 64K aliasing problem\n    const size_t my_index;\n\n    //! Monitor for sleeping when there is no work to do.\n    /** The invariant that holds for sleeping workers is:\n        \"my_slack<=0 && my_state==st_normal && I am on server's list of asleep threads\" */\n    ipc_thread_monitor my_thread_monitor;\n\n    //! Handle of the OS thread associated with this worker\n    thread_handle my_handle;\n\n    //! Link for list of workers that are sleeping or have no associated thread.\n    ipc_worker* my_next;\n\n    friend class ipc_server;\n\n    //! Actions executed by the associated thread\n    void run();\n\n    //! Wake up associated thread (or launch a thread if there is none)\n    bool wake_or_launch();\n\n    //! Called by a thread (usually not the associated thread) to commence termination.\n    void start_shutdown(bool join);\n\n    //! Called by a thread (usually not the associated thread) to commence stopping.\n    void start_stopping(bool join);\n\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n\n    static void release_handle(thread_handle my_handle, bool join);\n\nprotected:\n    ipc_worker(ipc_server& server, tbb_client& client, const size_t i) :\n        my_server(server),\n        my_client(client),\n        my_index(i)\n    {\n        my_state = st_init;\n    }\n};\n\nstatic const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about uninstantiable class\n    #pragma warning(push)\n    #pragma warning(disable:4510 4610)\n#endif\nclass padded_ipc_worker: public ipc_worker {\n    char pad[cache_line_size - sizeof(ipc_worker)%cache_line_size];\npublic:\n    padded_ipc_worker(ipc_server& server, tbb_client& client, const size_t i)\n    : ipc_worker( server,client,i ) { suppress_unused_warning(pad); }\n};\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nclass ipc_waker : public padded_ipc_worker {\nprivate:\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n    void run();\n    bool wake_or_launch();\n\n    friend class ipc_server;\n\npublic:\n    ipc_waker(ipc_server& server, tbb_client& client, const size_t i)\n    : padded_ipc_worker( server, client, i ) {}\n};\n\nclass ipc_stopper : public padded_ipc_worker {\nprivate:\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n    void run();\n    bool wake_or_launch();\n\n    friend class ipc_server;\n\npublic:\n    ipc_stopper(ipc_server& server, tbb_client& client, const size_t i)\n    : padded_ipc_worker( server, client, i ) {}\n};\n\nclass ipc_server: public tbb_server, no_copy {\nprivate:\n    tbb_client& my_client;\n    //! Maximum number of threads to be created.\n    /** Threads are created lazily, so maximum might not actually be reached. */\n    tbb_client::size_type my_n_thread;\n\n    //! Stack size for each thread. */\n    const size_t my_stack_size;\n\n    //! Number of jobs that could use their associated thread minus number of active threads.\n    /** If negative, indicates oversubscription.\n        If positive, indicates that more threads should run.\n        Can be lowered asynchronously, but must be raised only while holding my_asleep_list_mutex,\n        because raising it impacts the invariant for sleeping threads. */\n    atomic<int> my_slack;\n\n    //! Counter used to determine when to delete this.\n    atomic<int> my_ref_count;\n\n    padded_ipc_worker* my_thread_array;\n\n    //! List of workers that are asleep or committed to sleeping until notified by another thread.\n    tbb::atomic<ipc_worker*> my_asleep_list_root;\n\n    //! Protects my_asleep_list_root\n    typedef scheduler_mutex_type asleep_list_mutex_type;\n    asleep_list_mutex_type my_asleep_list_mutex;\n\n    //! Should server wait workers while terminate\n    const bool my_join_workers;\n\n    //! Service thread for waking of workers\n    ipc_waker* my_waker;\n\n    //! Service thread to stop threads\n    ipc_stopper* my_stopper;\n\n    //! Semaphore to account active threads\n    sem_t* my_active_sem;\n\n    //! Semaphore to account stop threads\n    sem_t* my_stop_sem;\n\n#if TBB_USE_ASSERT\n    atomic<int> my_net_slack_requests;\n#endif /* TBB_USE_ASSERT */\n\n    //! Wake up to two sleeping workers, if there are any sleeping.\n    /** The call is used to propagate a chain reaction where each thread wakes up two threads,\n        which in turn each wake up two threads, etc. */\n    void propagate_chain_reaction() {\n        // First test of a double-check idiom.  Second test is inside wake_some(0).\n        if( my_slack>0 ) {\n            int active_threads = 0;\n            if( try_get_active_thread() ) {\n                ++active_threads;\n                if( try_get_active_thread() ) {\n                    ++active_threads;\n                }\n                wake_some( 0, active_threads );\n            }\n        }\n    }\n\n    //! Try to add t to list of sleeping workers\n    bool try_insert_in_asleep_list(ipc_worker& t);\n\n    //! Try to add t to list of sleeping workers even if there is some work to do\n    bool try_insert_in_asleep_list_forced(ipc_worker& t);\n\n    //! Equivalent of adding additional_slack to my_slack and waking up to 2 threads if my_slack permits.\n    void wake_some(int additional_slack, int active_threads);\n\n    //! Equivalent of adding additional_slack to my_slack and waking up to 1 thread if my_slack permits.\n    void wake_one_forced(int additional_slack);\n\n    //! Stop one thread from asleep list\n    bool stop_one();\n\n    //! Wait for active thread\n    bool wait_active_thread();\n\n    //! Try to get active thread\n    bool try_get_active_thread();\n\n    //! Release active thread\n    void release_active_thread();\n\n    //! Wait for thread to stop\n    bool wait_stop_thread();\n\n    //! Add thread to stop list\n    void add_stop_thread();\n\n    void remove_server_ref() {\n        if( --my_ref_count==0 ) {\n            my_client.acknowledge_close_connection();\n            this->~ipc_server();\n            tbb::cache_aligned_allocator<ipc_server>().deallocate( this, 1 );\n        }\n    }\n\n    friend class ipc_worker;\n    friend class ipc_waker;\n    friend class ipc_stopper;\npublic:\n    ipc_server(tbb_client& client);\n    virtual ~ipc_server();\n\n    version_type version() const __TBB_override {\n        return 0;\n    }\n\n    void request_close_connection(bool /*exiting*/) __TBB_override {\n        my_waker->start_shutdown(false);\n        my_stopper->start_shutdown(false);\n        for( size_t i=0; i<my_n_thread; ++i )\n            my_thread_array[i].start_shutdown( my_join_workers );\n        remove_server_ref();\n    }\n\n    void yield() __TBB_override {__TBB_Yield();}\n\n    void independent_thread_number_changed(int) __TBB_override { __TBB_ASSERT( false, NULL ); }\n\n    unsigned default_concurrency() const __TBB_override { return my_n_thread - 1; }\n\n    void adjust_job_count_estimate(int delta) __TBB_override;\n\n#if _WIN32||_WIN64\n    void register_master(::rml::server::execution_resource_t&) __TBB_override {}\n    void unregister_master(::rml::server::execution_resource_t) __TBB_override {}\n#endif /* _WIN32||_WIN64 */\n};\n\n//------------------------------------------------------------------------\n// Methods of ipc_worker\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_worker::thread_routine(void* arg) {\n    ipc_worker* self = static_cast<ipc_worker*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_worker::release_handle(thread_handle handle, bool join) {\n    if( join )\n        ipc_thread_monitor::join( handle );\n    else\n        ipc_thread_monitor::detach_thread( handle );\n}\n\nvoid ipc_worker::start_shutdown(bool join) {\n    state_t s;\n\n    do {\n        s = my_state;\n        __TBB_ASSERT( s!=st_quit, NULL );\n    } while( my_state.compare_and_swap( st_quit, s )!=s );\n    if( s==st_normal || s==st_starting ) {\n        // May have invalidated invariant for sleeping, so wake up the thread.\n        // Note that the notify() here occurs without maintaining invariants for my_slack.\n        // It does not matter, because my_state==st_quit overrides checking of my_slack.\n        my_thread_monitor.notify();\n        // Do not need release handle in st_init state,\n        // because in this case the thread wasn't started yet.\n        // For st_starting release is done at launch site.\n        if( s==st_normal )\n            release_handle( my_handle, join );\n    }\n}\n\nvoid ipc_worker::start_stopping(bool join) {\n    state_t s;\n\n    do {\n        s = my_state;\n    } while( my_state.compare_and_swap( st_stop, s )!=s );\n    if( s==st_normal || s==st_starting ) {\n        // May have invalidated invariant for sleeping, so wake up the thread.\n        // Note that the notify() here occurs without maintaining invariants for my_slack.\n        // It does not matter, because my_state==st_quit overrides checking of my_slack.\n        my_thread_monitor.notify();\n        // Do not need release handle in st_init state,\n        // because in this case the thread wasn't started yet.\n        // For st_starting release is done at launch site.\n        if( s==st_normal )\n            release_handle( my_handle, join );\n    }\n}\n\nvoid ipc_worker::run() {\n    my_server.propagate_chain_reaction();\n\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    ::rml::job& j = *my_client.create_one_job();\n    state_t state = my_state;\n    while( state!=st_quit && state!=st_stop ) {\n        if( my_server.my_slack>=0 ) {\n            my_client.process(j);\n        } else {\n            ipc_thread_monitor::cookie c;\n            // Prepare to wait\n            my_thread_monitor.prepare_wait(c);\n            // Check/set the invariant for sleeping\n            state = my_state;\n            if( state!=st_quit && state!=st_stop && my_server.try_insert_in_asleep_list(*this) ) {\n                if( my_server.my_n_thread > 1 ) my_server.release_active_thread();\n                my_thread_monitor.commit_wait(c);\n                my_server.propagate_chain_reaction();\n            } else {\n                // Invariant broken\n                my_thread_monitor.cancel_wait();\n            }\n        }\n        state = my_state;\n    }\n    my_client.cleanup(j);\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_worker::wake_or_launch() {\n    if( ( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) ||\n        ( my_state==st_stop && my_state.compare_and_swap( st_starting, st_stop )==st_stop ) ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            // Unable to create new thread for process\n            // However, this is expected situation for the use cases of this coordination server\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_waker\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_waker::thread_routine(void* arg) {\n    ipc_waker* self = static_cast<ipc_waker*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_waker::run() {\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    while( my_state!=st_quit ) {\n        bool have_to_sleep = false;\n        if( my_server.my_slack>0 ) {\n            if( my_server.wait_active_thread() ) {\n                if( my_server.my_slack>0 ) {\n                    my_server.wake_some( 0, 1 );\n                } else {\n                    my_server.release_active_thread();\n                    have_to_sleep = true;\n                }\n            }\n        } else {\n            have_to_sleep = true;\n        }\n        if( have_to_sleep ) {\n            ipc_thread_monitor::cookie c;\n            // Prepare to wait\n            my_thread_monitor.prepare_wait(c);\n            // Check/set the invariant for sleeping\n            if( my_state!=st_quit && my_server.my_slack<0 ) {\n                my_thread_monitor.commit_wait(c);\n            } else {\n                // Invariant broken\n                my_thread_monitor.cancel_wait();\n            }\n        }\n    }\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_waker::wake_or_launch() {\n    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            runtime_warning( \"Unable to create new thread for process %d\", getpid() );\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_stopper\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_stopper::thread_routine(void* arg) {\n    ipc_stopper* self = static_cast<ipc_stopper*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_stopper::run() {\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    while( my_state!=st_quit ) {\n        if( my_server.wait_stop_thread() ) {\n            if( my_state!=st_quit ) {\n                if( !my_server.stop_one() ) {\n                    my_server.add_stop_thread();\n                    prolonged_pause();\n                }\n            }\n        }\n    }\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_stopper::wake_or_launch() {\n    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            runtime_warning( \"Unable to create new thread for process %d\", getpid() );\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_server\n//------------------------------------------------------------------------\nipc_server::ipc_server(tbb_client& client) :\n    my_client( client ),\n    my_stack_size( client.min_stack_size() ),\n    my_thread_array(NULL),\n    my_join_workers(false),\n    my_waker(NULL),\n    my_stopper(NULL)\n{\n    my_ref_count = 1;\n    my_slack = 0;\n#if TBB_USE_ASSERT\n    my_net_slack_requests = 0;\n#endif /* TBB_USE_ASSERT */\n    my_n_thread = get_num_threads(IPC_MAX_THREADS_VAR_NAME);\n    if( my_n_thread==0 ) {\n        my_n_thread = AvailableHwConcurrency();\n        __TBB_ASSERT( my_n_thread>0, NULL );\n    }\n\n    my_asleep_list_root = NULL;\n    my_thread_array = tbb::cache_aligned_allocator<padded_ipc_worker>().allocate( my_n_thread );\n    memset( my_thread_array, 0, sizeof(padded_ipc_worker)*my_n_thread );\n    for( size_t i=0; i<my_n_thread; ++i ) {\n        ipc_worker* t = new( &my_thread_array[i] ) padded_ipc_worker( *this, client, i );\n        t->my_next = my_asleep_list_root;\n        my_asleep_list_root = t;\n    }\n\n    my_waker = tbb::cache_aligned_allocator<ipc_waker>().allocate(1);\n    memset( my_waker, 0, sizeof(ipc_waker) );\n    new( my_waker ) ipc_waker( *this, client, my_n_thread );\n\n    my_stopper = tbb::cache_aligned_allocator<ipc_stopper>().allocate(1);\n    memset( my_stopper, 0, sizeof(ipc_stopper) );\n    new( my_stopper ) ipc_stopper( *this, client, my_n_thread + 1 );\n\n    char* active_sem_name = get_active_sem_name();\n    my_active_sem = sem_open( active_sem_name, O_CREAT, IPC_SEM_MODE, my_n_thread - 1 );\n    __TBB_ASSERT( my_active_sem, \"Unable to open active threads semaphore\" );\n    delete[] active_sem_name;\n\n    char* stop_sem_name = get_stop_sem_name();\n    my_stop_sem = sem_open( stop_sem_name, O_CREAT, IPC_SEM_MODE, 0 );\n    __TBB_ASSERT( my_stop_sem, \"Unable to open stop threads semaphore\" );\n    delete[] stop_sem_name;\n}\n\nipc_server::~ipc_server() {\n    __TBB_ASSERT( my_net_slack_requests==0, NULL );\n\n    for( size_t i=my_n_thread; i--; )\n        my_thread_array[i].~padded_ipc_worker();\n    tbb::cache_aligned_allocator<padded_ipc_worker>().deallocate( my_thread_array, my_n_thread );\n    tbb::internal::poison_pointer( my_thread_array );\n\n    my_waker->~ipc_waker();\n    tbb::cache_aligned_allocator<ipc_waker>().deallocate( my_waker, 1 );\n    tbb::internal::poison_pointer( my_waker );\n\n    my_stopper->~ipc_stopper();\n    tbb::cache_aligned_allocator<ipc_stopper>().deallocate( my_stopper, 1 );\n    tbb::internal::poison_pointer( my_stopper );\n\n    sem_close( my_active_sem );\n    sem_close( my_stop_sem );\n}\n\ninline bool ipc_server::try_insert_in_asleep_list(ipc_worker& t) {\n    asleep_list_mutex_type::scoped_lock lock;\n    if( !lock.try_acquire( my_asleep_list_mutex ) )\n        return false;\n    // Contribute to slack under lock so that if another takes that unit of slack,\n    // it sees us sleeping on the list and wakes us up.\n    int k = ++my_slack;\n    if( k<=0 ) {\n        t.my_next = my_asleep_list_root;\n        my_asleep_list_root = &t;\n        return true;\n    } else {\n        --my_slack;\n        return false;\n    }\n}\n\ninline bool ipc_server::try_insert_in_asleep_list_forced(ipc_worker& t) {\n    asleep_list_mutex_type::scoped_lock lock;\n    if( !lock.try_acquire( my_asleep_list_mutex ) )\n        return false;\n    // Contribute to slack under lock so that if another takes that unit of slack,\n    // it sees us sleeping on the list and wakes us up.\n    ++my_slack;\n    t.my_next = my_asleep_list_root;\n    my_asleep_list_root = &t;\n    return true;\n}\n\ninline bool ipc_server::wait_active_thread() {\n    if( sem_wait( my_active_sem ) == 0 ) {\n        ++my_global_thread_count;\n        return true;\n    }\n    return false;\n}\n\ninline bool ipc_server::try_get_active_thread() {\n    if( sem_trywait( my_active_sem ) == 0 ) {\n        ++my_global_thread_count;\n        return true;\n    }\n    return false;\n}\n\ninline void ipc_server::release_active_thread() {\n    release_thread_sem( my_active_sem );\n}\n\ninline bool ipc_server::wait_stop_thread() {\n    struct timespec ts;\n    if( clock_gettime( CLOCK_REALTIME, &ts )==0 ) {\n        ts.tv_sec++;\n        if( sem_timedwait( my_stop_sem, &ts )==0 ) {\n            return true;\n        }\n    }\n    return false;\n}\n\ninline void ipc_server::add_stop_thread() {\n    sem_post( my_stop_sem );\n}\n\nvoid ipc_server::wake_some( int additional_slack, int active_threads ) {\n    __TBB_ASSERT( additional_slack>=0, NULL );\n    ipc_worker* wakee[2];\n    ipc_worker **w = wakee;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        while( active_threads>0 && my_asleep_list_root && w<wakee+2 ) {\n            if( additional_slack>0 ) {\n                if( additional_slack+my_slack<=0 ) // additional demand does not exceed surplus supply\n                    break;\n                --additional_slack;\n            } else {\n                // Chain reaction; Try to claim unit of slack\n                int old;\n                do {\n                    old = my_slack;\n                    if( old<=0 ) goto done;\n                } while( my_slack.compare_and_swap( old-1, old )!=old );\n            }\n            // Pop sleeping worker to combine with claimed unit of slack\n            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;\n            --active_threads;\n        }\n        if( additional_slack ) {\n            // Contribute our unused slack to my_slack.\n            my_slack += additional_slack;\n        }\n    }\ndone:\n    while( w>wakee ) {\n        if( !(*--w)->wake_or_launch() ) {\n            add_stop_thread();\n            do {\n            } while( !try_insert_in_asleep_list_forced(**w) );\n            release_active_thread();\n        }\n    }\n    while( active_threads ) {\n        release_active_thread();\n        --active_threads;\n    }\n}\n\nvoid ipc_server::wake_one_forced( int additional_slack ) {\n    __TBB_ASSERT( additional_slack>=0, NULL );\n    ipc_worker* wakee[1];\n    ipc_worker **w = wakee;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        while( my_asleep_list_root && w<wakee+1 ) {\n            if( additional_slack>0 ) {\n                if( additional_slack+my_slack<=0 ) // additional demand does not exceed surplus supply\n                    break;\n                --additional_slack;\n            } else {\n                // Chain reaction; Try to claim unit of slack\n                int old;\n                do {\n                    old = my_slack;\n                    if( old<=0 ) goto done;\n                } while( my_slack.compare_and_swap( old-1, old )!=old );\n            }\n            // Pop sleeping worker to combine with claimed unit of slack\n            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;\n        }\n        if( additional_slack ) {\n            // Contribute our unused slack to my_slack.\n            my_slack += additional_slack;\n        }\n    }\ndone:\n    while( w>wakee ) {\n        if( !(*--w)->wake_or_launch() ) {\n            add_stop_thread();\n            do {\n            } while( !try_insert_in_asleep_list_forced(**w) );\n        }\n    }\n}\n\nbool ipc_server::stop_one() {\n    ipc_worker* current = NULL;\n    ipc_worker* next = NULL;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        if( my_asleep_list_root ) {\n            current = my_asleep_list_root;\n            if( current->my_state==ipc_worker::st_normal ) {\n                next = current->my_next;\n                while( next!= NULL && next->my_state==ipc_worker::st_normal ) {\n                    current = next;\n                    next = current->my_next;\n                }\n                current->start_stopping( my_join_workers );\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nvoid ipc_server::adjust_job_count_estimate( int delta ) {\n#if TBB_USE_ASSERT\n    my_net_slack_requests+=delta;\n#endif /* TBB_USE_ASSERT */\n    if( my_n_thread > 1 ) {\n        if( delta<0 ) {\n            my_slack+=delta;\n        } else if( delta>0 ) {\n            int active_threads = 0;\n            if( try_get_active_thread() ) {\n                ++active_threads;\n                if( try_get_active_thread() ) {\n                    ++active_threads;\n                }\n            }\n            wake_some( delta, active_threads );\n\n            if( !my_waker->wake_or_launch() ) {\n                add_stop_thread();\n            }\n            if( !my_stopper->wake_or_launch() ) {\n                add_stop_thread();\n            }\n        }\n    } else { // Corner case when RML shouldn't provide any worker thread but client has to have at least one\n        if( delta<0 ) {\n            my_slack += delta;\n        } else {\n            wake_one_forced( delta );\n        }\n    }\n}\n\n//------------------------------------------------------------------------\n// RML factory methods\n//------------------------------------------------------------------------\n\n#if USE_PTHREAD\n\nstatic tbb_client* my_global_client = NULL;\nstatic tbb_server* my_global_server = NULL;\n\nvoid rml_atexit() {\n    release_resources();\n}\n\nvoid rml_atfork_child() {\n    if( my_global_server!=NULL && my_global_client!=NULL ) {\n        ipc_server* server = static_cast<ipc_server*>( my_global_server );\n        server->~ipc_server();\n        memset( server, 0, sizeof(ipc_server) );\n        new( server ) ipc_server( *my_global_client );\n        pthread_atfork( NULL, NULL, rml_atfork_child );\n        atexit( rml_atexit );\n    }\n}\n\n#endif /* USE_PTHREAD */\n\nextern \"C\" tbb_factory::status_type __TBB_make_rml_server(tbb_factory& f, tbb_server*& server, tbb_client& client) {\n    server = new( tbb::cache_aligned_allocator<ipc_server>().allocate(1) ) ipc_server(client);\n#if USE_PTHREAD\n    my_global_client = &client;\n    my_global_server = server;\n    pthread_atfork( NULL, NULL, rml_atfork_child );\n    atexit( rml_atexit );\n#endif /* USE_PTHREAD */\n    if( getenv( \"RML_DEBUG\" ) ) {\n        runtime_warning(\"IPC server is started\");\n    }\n    return tbb_factory::st_success;\n}\n\nextern \"C\" void __TBB_call_with_my_server_info(::rml::server_info_callback_t cb, void* arg) {\n}\n\n} // namespace rml\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/rml/ipc_utils.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"ipc_utils.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <limits.h>\n#include <string.h>\n#include <unistd.h>\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\n#define MAX_STR_LEN 255\n#define STARTTIME_ITEM_ID 21\n\nstatic char* get_stat_item(char* line, int item_id) {\n    int id = 0, i = 0;\n\n    while( id!=item_id ) {\n        while( line[i]!='(' && line[i]!=' ' && line[i]!='\\0' ) {\n            ++i;\n        }\n        if( line[i]==' ' ) {\n            ++id;\n            ++i;\n        } else if( line[i]=='(' ) {\n            while( line[i]!=')' && line[i]!='\\0' ) {\n               ++i;\n            }\n            if( line[i]==')' ) {\n                ++i;\n            } else {\n                return NULL;\n            }\n        } else {\n            return NULL;\n        }\n    }\n\n    return line + i;\n}\n\nunsigned long long get_start_time(int pid) {\n    const char* stat_file_path_template = \"/proc/%d/stat\";\n    char stat_file_path[MAX_STR_LEN + 1];\n    sprintf( stat_file_path, stat_file_path_template, pid );\n\n    FILE* stat_file = fopen( stat_file_path, \"rt\" );\n    if( stat_file==NULL ) {\n        return 0;\n    }\n\n    char stat_line[MAX_STR_LEN + 1];\n    char* line = fgets( stat_line, MAX_STR_LEN, stat_file );\n    if( line==NULL ) {\n        return 0;\n    }\n\n    char* starttime_str = get_stat_item( stat_line, STARTTIME_ITEM_ID );\n    if( starttime_str==NULL ) {\n        return 0;\n    }\n\n    unsigned long long starttime = strtoull( starttime_str, NULL, 10 );\n    if( starttime==ULLONG_MAX ) {\n        return 0;\n    }\n\n    return starttime;\n}\n\nchar* get_shared_name(const char* prefix, int pid, unsigned long long time) {\n    const char* name_template = \"%s_%d_%llu\";\n    const int digits_in_int = 10;\n    const int digits_in_long = 20;\n\n    int len = strlen( name_template ) + strlen( prefix ) + digits_in_int + digits_in_long + 1;\n    char* name = new char[len];\n    sprintf( name, name_template, prefix, pid, time );\n\n    return name;\n}\n\nchar* get_shared_name(const char* prefix) {\n    int pid = getpgrp();\n    unsigned long long time = get_start_time( pid );\n    return get_shared_name( prefix, pid, time );\n}\n\nint get_num_threads(const char* env_var) {\n    if( env_var==NULL ) {\n        return 0;\n    }\n\n    char* value = getenv( env_var );\n    if( value==NULL ) {\n        return 0;\n    }\n\n    int num_threads = (int)strtol( value, NULL, 10 );\n    return num_threads;\n}\n\nbool get_enable_flag(const char* env_var) {\n    if( env_var==NULL ) {\n        return false;\n    }\n\n    char* value = getenv( env_var );\n    if( value==NULL ) {\n        return false;\n    }\n\n    if( strcmp( value, \"0\" ) == 0 ||\n        strcmp( value, \"false\" ) == 0 ||\n        strcmp( value, \"False\" ) == 0 ||\n        strcmp( value, \"FALSE\" ) == 0 ) {\n        return false;\n    }\n\n    return true;\n}\n\n}}} //tbb::internal::rml\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/rml/ipc_utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __IPC_UTILS_H\n#define __IPC_UTILS_H\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\nchar* get_shared_name(const char* prefix);\nint get_num_threads(const char* env_var);\nbool get_enable_flag(const char* env_var);\n\n}}} //tbb::internal::rml\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/setup.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n# System imports\nfrom __future__ import print_function\nfrom glob import glob\nimport platform\nimport os\n\nfrom distutils.core import *\nfrom distutils.command.build import build\n\nrundir = os.getcwd()\nos.chdir(os.path.abspath(os.path.dirname(__file__)))\n\nif any(i in os.environ for i in [\"CC\", \"CXX\"]):\n    if \"CC\" not in os.environ:\n        os.environ['CC'] = os.environ['CXX']\n    if \"CXX\" not in os.environ:\n        os.environ['CXX'] = os.environ['CC']\n    if platform.system() == 'Linux':\n        os.environ['LDSHARED'] = os.environ['CXX'] + \" -shared\"\n    print(\"Environment specifies CC=%s CXX=%s\"%(os.environ['CC'], os.environ['CXX']))\n\nintel_compiler = os.getenv('CC', '') in ['icl', 'icpc', 'icc']\ntry:\n    tbb_root = os.environ['TBBROOT']\n    print(\"Using TBBROOT=\", tbb_root)\nexcept:\n    tbb_root = '..'\n    if not intel_compiler:\n        print(\"Warning: TBBROOT env var is not set and Intel's compiler is not used. It might lead\\n\"\n              \"    !!!: to compile/link problems. Source tbbvars.sh/.csh file to set environment\")\nuse_compiler_tbb = intel_compiler and tbb_root == '..'\nif use_compiler_tbb:\n    print(\"Using Intel TBB from Intel's compiler\")\nif platform.system() == 'Windows':\n    if intel_compiler:\n        os.environ['DISTUTILS_USE_SDK'] = '1'  # Enable environment settings in distutils\n        os.environ['MSSdk'] = '1'\n        print(\"Using compiler settings from environment\")\n    tbb_flag = ['/Qtbb'] if use_compiler_tbb else []\n    tbb_flag += ['/EHsc'] # for Python 2\n    compile_flags = ['/Qstd=c++11'] if intel_compiler else []\nelse:\n    tbb_flag = ['-tbb'] if use_compiler_tbb else []\n    compile_flags = ['-std=c++11', '-Wno-unused-variable']\n\n_tbb = Extension(\"tbb._api\", [\"tbb/api.i\"],\n        include_dirs=[os.path.join(tbb_root, 'include')] if not use_compiler_tbb else [],\n        swig_opts   =['-c++', '-O', '-threads'] + (  # add '-builtin' later\n              ['-I' + os.path.join(tbb_root, 'include')] if not use_compiler_tbb else []),\n        extra_compile_args=compile_flags + tbb_flag,\n        extra_link_args=tbb_flag,\n        libraries   =(['tbb'] if not use_compiler_tbb else []) +\n                     (['irml'] if platform.system() == \"Linux\" else []),   # TODO: why do we need this?\n        library_dirs=[ rundir,                                              # for custom-builds\n                       os.path.join(tbb_root, 'lib', 'intel64', 'gcc4.4'),  # for Linux\n                       os.path.join(tbb_root, 'lib'),                       # for MacOS\n                       os.path.join(tbb_root, 'lib', 'intel64', 'vc_mt'),   # for Windows\n                     ] if not use_compiler_tbb else [],\n        language    ='c++',\n        )\n\n\nclass TBBBuild(build):\n    sub_commands = [  # define build order\n        ('build_ext', build.has_ext_modules),\n        ('build_py', build.has_pure_modules),\n    ]\n\n\nsetup(  name        =\"TBB\",\n        description =\"Python API for Intel TBB\",\n        long_description=\"Python API to Intel(R) Threading Building Blocks library (Intel(R) TBB) \"\n                         \"extended with standard Pool implementation and monkey-patching\",\n        url         =\"https://software.intel.com/en-us/intel-tbb\",\n        author      =\"Intel Corporation\",\n        author_email=\"inteltbbdevelopers@intel.com\",\n        license     =\"Dual license: Apache or Proprietary\",\n        version     =\"0.1\",\n        classifiers =[\n            'Development Status :: 4 - Beta',\n            'Environment :: Console',\n            'Environment :: Plugins',\n            'Intended Audience :: Developers',\n            'Intended Audience :: System Administrators',\n            'Intended Audience :: Other Audience',\n            'Intended Audience :: Science/Research',\n            'License :: OSI Approved :: Apache Software License',\n            'Operating System :: MacOS :: MacOS X',\n            'Operating System :: Microsoft :: Windows',\n            'Operating System :: POSIX :: Linux',\n            'Programming Language :: Python',\n            'Programming Language :: Python :: 2',\n            'Programming Language :: Python :: 3',\n            'Programming Language :: C++',\n            'Topic :: System :: Hardware :: Symmetric Multi-processing',\n            'Topic :: Software Development :: Libraries',\n          ],\n        keywords='TBB multiprocessing multithreading composable parallelism',\n        ext_modules=[_tbb],\n        packages=['tbb'],\n        py_modules=['TBB'],\n        cmdclass={'build': TBBBuild}\n)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/tbb/__init__.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom __future__ import print_function\n\nimport multiprocessing.pool\nimport ctypes\nimport atexit\nimport sys\nimport os\n \nfrom .api import  *\nfrom .api import __all__ as api__all\nfrom .pool import *\nfrom .pool import __all__ as pool__all\n\n__all__ = [\"Monkey\", \"is_active\"] + api__all + pool__all\n\n__doc__ = \"\"\"\nPython API for Intel(R) Threading Building Blocks library (Intel(R) TBB)\nextended with standard Python's pools implementation and monkey-patching.\n\nCommand-line interface example:\n$  python -m tbb $your_script.py\nRuns your_script.py in context of tbb.Monkey\n\"\"\"\n\nis_active = False\n\"\"\" Indicates whether TBB context is activated \"\"\"\n\nipc_enabled = False\n\"\"\" Indicates whether IPC mode is enabled \"\"\"\n\nlibirml = \"libirml.so.1\"\n\n\ndef _test(arg=None):\n    \"\"\"Some tests\"\"\"\n    import platform\n    if platform.system() == \"Linux\":\n        ctypes.CDLL(libirml)\n    from .test import test\n    test(arg)\n    print(\"done\")\n\n\ndef tbb_process_pool_worker27(inqueue, outqueue, initializer=None, initargs=(),\n                            maxtasks=None):\n    from multiprocessing.pool import worker\n    worker(inqueue, outqueue, initializer, initargs, maxtasks)\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_resources()\n        except:\n            print(\"Warning: Can not load \", libirml, file=sys.stderr)\n\n\nclass TBBProcessPool27(multiprocessing.pool.Pool):\n    def _repopulate_pool(self):\n        \"\"\"Bring the number of pool processes up to the specified number,\n        for use after reaping workers which have exited.\n        \"\"\"\n        from multiprocessing.util import debug\n\n        for i in range(self._processes - len(self._pool)):\n            w = self.Process(target=tbb_process_pool_worker27,\n                             args=(self._inqueue, self._outqueue,\n                                   self._initializer,\n                                   self._initargs, self._maxtasksperchild)\n                            )\n            self._pool.append(w)\n            w.name = w.name.replace('Process', 'PoolWorker')\n            w.daemon = True\n            w.start()\n            debug('added worker')\n\n    def __del__(self):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n    def __exit__(self, *args):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n\ndef tbb_process_pool_worker3(inqueue, outqueue, initializer=None, initargs=(),\n                            maxtasks=None, wrap_exception=False):\n    from multiprocessing.pool import worker\n    worker(inqueue, outqueue, initializer, initargs, maxtasks, wrap_exception)\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_resources()\n        except:\n            print(\"Warning: Can not load \", libirml, file=sys.stderr)\n\n\nclass TBBProcessPool3(multiprocessing.pool.Pool):\n    def _repopulate_pool(self):\n        \"\"\"Bring the number of pool processes up to the specified number,\n        for use after reaping workers which have exited.\n        \"\"\"\n        from multiprocessing.util import debug\n\n        for i in range(self._processes - len(self._pool)):\n            w = self.Process(target=tbb_process_pool_worker3,\n                             args=(self._inqueue, self._outqueue,\n                                   self._initializer,\n                                   self._initargs, self._maxtasksperchild,\n                                   self._wrap_exception)\n                            )\n            self._pool.append(w)\n            w.name = w.name.replace('Process', 'PoolWorker')\n            w.daemon = True\n            w.start()\n            debug('added worker')\n\n    def __del__(self):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n    def __exit__(self, *args):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n\nclass Monkey:\n    \"\"\"\n    Context manager which replaces standard multiprocessing.pool\n    implementations with tbb.pool using monkey-patching. It also enables TBB\n    threading for Intel(R) Math Kernel Library (Intel(R) MKL). For example:\n\n        with tbb.Monkey():\n            run_my_numpy_code()\n\n    It allows multiple parallel tasks to be executed on the same thread pool\n    and coordinate number of threads across multiple processes thus avoiding\n    overheads from oversubscription.\n    \"\"\"\n    _items   = {}\n    _modules = {}\n\n    def __init__(self, max_num_threads=None, benchmark=False):\n        \"\"\"\n        Create context manager for running under TBB scheduler.\n        :param max_num_threads: if specified, limits maximal number of threads\n        :param benchmark: if specified, blocks in initialization until requested number of threads are ready\n        \"\"\"\n        if max_num_threads:\n            self.ctl = global_control(global_control.max_allowed_parallelism, int(max_num_threads))\n        if benchmark:\n            if not max_num_threads:\n               max_num_threads = default_num_threads()\n            from .api import _concurrency_barrier\n            _concurrency_barrier(int(max_num_threads))\n\n    def _patch(self, class_name, module_name, obj):\n        m = self._modules[class_name] = __import__(module_name, globals(),\n                                                   locals(), [class_name])\n        if m == None:\n            return\n        oldattr = getattr(m, class_name, None)\n        if oldattr == None:\n            self._modules[class_name] = None\n            return\n        self._items[class_name] = oldattr\n        setattr(m, class_name, obj)\n\n    def __enter__(self):\n        global is_active\n        assert is_active == False, \"tbb.Monkey does not support nesting yet\"\n        is_active = True\n        self.env = os.getenv('MKL_THREADING_LAYER')\n        os.environ['MKL_THREADING_LAYER'] = 'TBB'\n\n        if ipc_enabled:\n            if sys.version_info.major == 2 and sys.version_info.minor >= 7:\n                self._patch(\"Pool\", \"multiprocessing.pool\", TBBProcessPool27)\n            elif sys.version_info.major == 3 and sys.version_info.minor >= 5:\n                self._patch(\"Pool\", \"multiprocessing.pool\", TBBProcessPool3)\n        self._patch(\"ThreadPool\", \"multiprocessing.pool\", Pool)\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        global is_active\n        assert is_active == True, \"modified?\"\n        is_active = False\n        if self.env is None:\n            del os.environ['MKL_THREADING_LAYER']\n        else:\n            os.environ['MKL_THREADING_LAYER'] = self.env\n        for name in self._items.keys():\n            setattr(self._modules[name], name, self._items[name])\n\n\ndef init_sem_name():\n    try:\n        librml = ctypes.CDLL(libirml)\n        librml.set_active_sem_name()\n        librml.set_stop_sem_name()\n    except Exception as e:\n        print(\"Warning: Can not initialize name of shared semaphores:\", e,\n              file=sys.stderr)\n\n\ndef tbb_atexit():\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_semaphores()\n        except:\n            print(\"Warning: Can not release shared semaphores\",\n                  file=sys.stderr)\n\n\ndef _main():\n    # Run the module specified as the next command line argument\n    # python -m TBB user_app.py\n    global ipc_enabled\n\n    import platform\n    import argparse\n    parser = argparse.ArgumentParser(prog=\"python -m tbb\", description=\"\"\"\n                Run your Python script in context of tbb.Monkey, which\n                replaces standard Python pools and threading layer of\n                Intel(R) Math Kernel Library by implementation based on\n                Intel(R) Threading Building Blocks. It enables multiple parallel\n                tasks to be executed on the same thread pool and coordinate\n                number of threads across multiple processes thus avoiding\n                overheads from oversubscription.\n             \"\"\", formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    if platform.system() == \"Linux\":\n        parser.add_argument('--ipc', action='store_true',\n                        help=\"Enable inter-process (IPC) coordination between Intel TBB schedulers\")\n        parser.add_argument('-a', '--allocator', action='store_true',\n                        help=\"Enable Intel TBB scalable allocator as a replacement for standard memory allocator\")\n        parser.add_argument('--allocator-huge-pages', action='store_true',\n                        help=\"Enable huge pages for Intel TBB allocator (implies: -a)\")\n    parser.add_argument('-p', '--max-num-threads', default=default_num_threads(), type=int,\n                        help=\"Initialize Intel TBB with P max number of threads per process\", metavar='P')\n    parser.add_argument('-b', '--benchmark', action='store_true',\n                        help=\"Block Intel TBB initialization until all the threads are created before continue the script. \"\n                        \"This is necessary for performance benchmarks that want to exclude lazy scheduler initialization effects from the measurements\")\n    parser.add_argument('-v', '--verbose', action='store_true',\n                        help=\"Request verbose and version information\")\n    parser.add_argument('-m', action='store_true', dest='module',\n                        help=\"Executes following as a module\")\n    parser.add_argument('name', help=\"Script or module name\")\n    parser.add_argument('args', nargs=argparse.REMAINDER,\n                        help=\"Command line arguments\")\n    args = parser.parse_args()\n\n    if args.verbose:\n        os.environ[\"TBB_VERSION\"] = \"1\"\n    if platform.system() == \"Linux\":\n        if args.allocator_huge_pages:\n            args.allocator = True\n        if args.allocator and not os.environ.get(\"_TBB_MALLOC_PRELOAD\"):\n            libtbbmalloc_lib = 'libtbbmalloc_proxy.so.2'\n            ld_preload = 'LD_PRELOAD'\n            os.environ[\"_TBB_MALLOC_PRELOAD\"] = \"1\"\n            preload_list = filter(None, os.environ.get(ld_preload, \"\").split(':'))\n            if libtbbmalloc_lib in preload_list:\n                print('Info:', ld_preload, \"contains\", libtbbmalloc_lib, \"already\\n\")\n            else:\n                os.environ[ld_preload] = ':'.join([libtbbmalloc_lib] + list(preload_list))\n\n            if args.allocator_huge_pages:\n                assert platform.system() == \"Linux\"\n                try:\n                    with open('/proc/sys/vm/nr_hugepages', 'r') as f:\n                        pages = int(f.read())\n                    if pages == 0:\n                        print(\"TBB: Pre-allocated huge pages are not currently reserved in the system. To reserve, run e.g.:\\n\"\n                              \"\\tsudo sh -c 'echo 2000 > /proc/sys/vm/nr_hugepages'\")\n                    os.environ[\"TBB_MALLOC_USE_HUGE_PAGES\"] = \"1\"\n                except:\n                    print(\"TBB: Failed to read number of pages from /proc/sys/vm/nr_hugepages\\n\"\n                          \"\\tIs the Linux kernel configured with the huge pages feature?\")\n                    sys.exit(1)\n\n            os.execl(sys.executable, sys.executable, '-m', 'tbb', *sys.argv[1:])\n            assert False, \"Re-execution failed\"\n\n    sys.argv = [args.name] + args.args\n    ipc_enabled = platform.system() == \"Linux\" and args.ipc\n    os.environ[\"IPC_ENABLE\"] = \"1\" if ipc_enabled else \"0\"\n    if ipc_enabled:\n        atexit.register(tbb_atexit)\n        init_sem_name()\n    if not os.environ.get(\"KMP_BLOCKTIME\"): # TODO move\n        os.environ[\"KMP_BLOCKTIME\"] = \"0\"\n    if '_' + args.name in globals():\n        return globals()['_' + args.name](*args.args)\n    else:\n        import runpy\n        runf = runpy.run_module if args.module else runpy.run_path\n        with Monkey(max_num_threads=args.max_num_threads, benchmark=args.benchmark):\n            runf(args.name, run_name='__main__')\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/tbb/__main__.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom . import _main\nfrom sys import exit\nexit(_main())\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/tbb/api.i",
    "content": "%pythonbegin %{\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n__all__ = [\"task_arena\", \"task_group\", \"task_scheduler_init\", \"global_control\", \"default_num_threads\"]\n%}\n%begin %{\n/* Defines Python wrappers for Intel(R) Threading Building Blocks (Intel TBB).*/\n%}\n%module api\n\n#if SWIG_VERSION < 0x030001\n#error SWIG version 3.0.6 or newer is required for correct functioning\n#endif\n\n%{\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n#include <tbb/tbb.h>\n#include <tbb/compat/condition_variable>\n#if TBB_IMPLEMENT_CPP0X\nnamespace std { using tbb::mutex; }\n#define unique_ptr auto_ptr\n#else\n#include <condition_variable>\n#include <mutex>\n#include <memory>\n#endif\nusing namespace tbb;\n\nclass PyCaller : public swig::SwigPtr_PyObject {\npublic:\n    // icpc 2013 does not support simple using SwigPtr_PyObject::SwigPtr_PyObject;\n    PyCaller(const PyCaller& s) : SwigPtr_PyObject(s) {}\n    PyCaller(PyObject *p, bool initial = true) : SwigPtr_PyObject(p, initial) {}\n\n    void operator()() const {\n        SWIG_PYTHON_THREAD_BEGIN_BLOCK;\n        PyObject* r = PyObject_CallFunctionObjArgs((PyObject*)*this, NULL);\n        if(r) Py_DECREF(r);\n        SWIG_PYTHON_THREAD_END_BLOCK;\n    }\n};\n\nstruct ArenaPyCaller {\n    task_arena *my_arena;\n    PyObject *my_callable;\n    ArenaPyCaller(task_arena *a, PyObject *c) : my_arena(a), my_callable(c) {\n        SWIG_PYTHON_THREAD_BEGIN_BLOCK;\n        Py_XINCREF(c);\n        SWIG_PYTHON_THREAD_END_BLOCK;\n    }\n    void operator()() const {\n        my_arena->execute(PyCaller(my_callable, false));\n    }\n};\n\nstruct barrier_data {\n    std::condition_variable event;\n    std::mutex m;\n    int worker_threads, full_threads;\n};\n\nclass barrier_task : public tbb::task {\n    barrier_data &b;\npublic:\n    barrier_task(barrier_data &d) : b(d) {}\n    /*override*/ tbb::task *execute() {\n        std::unique_lock<std::mutex> lock(b.m);\n        if(++b.worker_threads >= b.full_threads)\n            b.event.notify_all();\n        else while(b.worker_threads < b.full_threads)\n            b.event.wait(lock);\n        return NULL;\n    }\n};\n\nvoid _concurrency_barrier(int threads = tbb::task_scheduler_init::automatic) {\n    if(threads == task_scheduler_init::automatic)\n        threads = task_scheduler_init::default_num_threads();\n    if(threads < 2)\n        return;\n    std::unique_ptr<global_control> g(\n        (global_control::active_value(global_control::max_allowed_parallelism) < unsigned(threads))?\n            new global_control(global_control::max_allowed_parallelism, threads) : NULL);\n    barrier_data b;\n    b.worker_threads = 0;\n    b.full_threads = threads-1;\n    for(int i = 0; i < b.full_threads; i++)\n        tbb::task::enqueue( *new( tbb::task::allocate_root() ) barrier_task(b) );\n    std::unique_lock<std::mutex> lock(b.m);\n    b.event.wait(lock);\n};\n\n%}\n\nvoid _concurrency_barrier(int threads = tbb::task_scheduler_init::automatic);\n\nnamespace tbb {\n    class task_scheduler_init {\n    public:\n        //! Typedef for number of threads that is automatic.\n        static const int automatic = -1;\n        //! Argument to initialize() or constructor that causes initialization to be deferred.\n        static const int deferred = -2;\n        task_scheduler_init( int max_threads=automatic,\n                             size_t thread_stack_size=0 );\n        ~task_scheduler_init();\n        void initialize( int max_threads=automatic );\n        void terminate();\n        static int default_num_threads();\n        bool is_active() const;\n        void blocking_terminate();\n    };\n\n    class task_arena {\n    public:\n        static const int automatic = -1;\n        static int current_thread_index();\n        task_arena(int max_concurrency = automatic, unsigned reserved_for_masters = 1);\n        task_arena(const task_arena &s);\n        ~task_arena();\n        void initialize();\n        void initialize(int max_concurrency, unsigned reserved_for_masters = 1);\n        void terminate();\n        bool is_active();\n        %extend {\n        void enqueue( PyObject *c ) { $self->enqueue(PyCaller(c)); }\n        void execute( PyObject *c ) { $self->execute(PyCaller(c)); }\n        };\n    };\n\n    class task_group {\n    public:\n        task_group();\n        ~task_group();\n        void wait(); \n        bool is_canceling();\n        void cancel();\n        %extend {\n        void run( PyObject *c ) { $self->run(PyCaller(c)); }\n        void run( PyObject *c, task_arena *a ) { $self->run(ArenaPyCaller(a, c)); }\n        };\n    };\n\n    class global_control {\n    public:\n        enum parameter {\n            max_allowed_parallelism,\n            thread_stack_size,\n            parameter_max // insert new parameters above this point\n        };\n        global_control(parameter param, size_t value);\n        ~global_control();\n        static size_t active_value(parameter param);\n    };\n\n} // tbb\n\n// Additional definitions for Python part of the module\n%pythoncode %{\ndefault_num_threads = task_scheduler_init_default_num_threads\n%}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/tbb/pool.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Based on the software developed by:\n# Copyright (c) 2008,2016 david decotigny (Pool of threads)\n# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. Neither the name of author nor the names of any contributors may be\n#    used to endorse or promote products derived from this software\n#    without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS \"AS IS\" AND\n# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n#\n\n# @brief Python Pool implementation based on TBB with monkey-patching\n#\n# See http://docs.python.org/dev/library/multiprocessing.html\n# Differences: added imap_async and imap_unordered_async, and terminate()\n# has to be called explicitly (it's not registered by atexit).\n#\n# The general idea is that we submit works to a workqueue, either as\n# single Jobs (one function to call), or JobSequences (batch of\n# Jobs). Each Job is associated with an ApplyResult object which has 2\n# states: waiting for the Job to complete, or Ready. Instead of\n# waiting for the jobs to finish, we wait for their ApplyResult object\n# to become ready: an event mechanism is used for that.\n# When we apply a function to several arguments in \"parallel\", we need\n# a way to wait for all/part of the Jobs to be processed: that's what\n# \"collectors\" are for; they group and wait for a set of ApplyResult\n# objects. Once a collector is ready to be used, we can use a\n# CollectorIterator to iterate over the result values it's collecting.\n#\n# The methods of a Pool object use all these concepts and expose\n# them to their caller in a very simple way.\n\nimport sys\nimport threading\nimport traceback\nfrom .api import *\n\n__all__ = [\"Pool\", \"TimeoutError\"]\n__doc__ = \"\"\"\nStandard Python Pool implementation based on Python API\nfor Intel(R) Threading Building Blocks library (Intel(R) TBB)\n\"\"\"\n\n\nclass TimeoutError(Exception):\n    \"\"\"Raised when a result is not available within the given timeout\"\"\"\n    pass\n\n\nclass Pool(object):\n    \"\"\"\n    The Pool class provides standard multiprocessing.Pool interface\n    which is mapped onto Intel(R) TBB tasks executing in its thread pool\n    \"\"\"\n\n    def __init__(self, nworkers=0, name=\"Pool\"):\n        \"\"\"\n        \\param nworkers (integer) number of worker threads to start\n        \\param name (string) prefix for the worker threads' name\n        \"\"\"\n        self._closed = False\n        self._tasks = task_group()\n        self._pool = [None,]*default_num_threads()  # Dask asks for len(_pool)\n\n    def apply(self, func, args=(), kwds=dict()):\n        \"\"\"Equivalent of the apply() builtin function. It blocks till\n        the result is ready.\"\"\"\n        return self.apply_async(func, args, kwds).get()\n\n    def map(self, func, iterable, chunksize=None):\n        \"\"\"A parallel equivalent of the map() builtin function. It\n        blocks till the result is ready.\n\n        This method chops the iterable into a number of chunks which\n        it submits to the process pool as separate tasks. The\n        (approximate) size of these chunks can be specified by setting\n        chunksize to a positive integer.\"\"\"\n        return self.map_async(func, iterable, chunksize).get()\n\n    def imap(self, func, iterable, chunksize=1):\n        \"\"\"\n        An equivalent of itertools.imap().\n\n        The chunksize argument is the same as the one used by the\n        map() method. For very long iterables using a large value for\n        chunksize can make the job complete much faster than\n        using the default value of 1.\n\n        Also if chunksize is 1 then the next() method of the iterator\n        returned by the imap() method has an optional timeout\n        parameter: next(timeout) will raise processing.TimeoutError if\n        the result cannot be returned within timeout seconds.\n        \"\"\"\n        collector = OrderedResultCollector(as_iterator=True)\n        self._create_sequences(func, iterable, chunksize, collector)\n        return iter(collector)\n\n    def imap_unordered(self, func, iterable, chunksize=1):\n        \"\"\"The same as imap() except that the ordering of the results\n        from the returned iterator should be considered\n        arbitrary. (Only when there is only one worker process is the\n        order guaranteed to be \"correct\".)\"\"\"\n        collector = UnorderedResultCollector()\n        self._create_sequences(func, iterable, chunksize, collector)\n        return iter(collector)\n\n    def apply_async(self, func, args=(), kwds=dict(), callback=None):\n        \"\"\"A variant of the apply() method which returns an\n        ApplyResult object.\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the result becomes ready,\n        callback is applied to it (unless the call failed). callback\n        should complete immediately since otherwise the thread which\n        handles the results will get blocked.\"\"\"\n        assert not self._closed  # No lock here. We assume it's atomic...\n        apply_result = ApplyResult(callback=callback)\n        job = Job(func, args, kwds, apply_result)\n        self._tasks.run(job)\n        return apply_result\n\n    def map_async(self, func, iterable, chunksize=None, callback=None):\n        \"\"\"A variant of the map() method which returns a ApplyResult\n        object.\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the result becomes ready\n        callback is applied to it (unless the call failed). callback\n        should complete immediately since otherwise the thread which\n        handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = OrderedResultCollector(apply_result, as_iterator=False)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value([])\n        return apply_result\n\n    def imap_async(self, func, iterable, chunksize=None, callback=None):\n        \"\"\"A variant of the imap() method which returns an ApplyResult\n        object that provides an iterator (next method(timeout)\n        available).\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the resulting iterator becomes\n        ready, callback is applied to it (unless the call\n        failed). callback should complete immediately since otherwise\n        the thread which handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = OrderedResultCollector(apply_result, as_iterator=True)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value(iter([]))\n        return apply_result\n\n    def imap_unordered_async(self, func, iterable, chunksize=None,\n                             callback=None):\n        \"\"\"A variant of the imap_unordered() method which returns an\n        ApplyResult object that provides an iterator (next\n        method(timeout) available).\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the resulting iterator becomes\n        ready, callback is applied to it (unless the call\n        failed). callback should complete immediately since otherwise\n        the thread which handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = UnorderedResultCollector(apply_result)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value(iter([]))\n        return apply_result\n\n    def close(self):\n        \"\"\"Prevents any more tasks from being submitted to the\n        pool. Once all the tasks have been completed the worker\n        processes will exit.\"\"\"\n        # No lock here. We assume it's sufficiently atomic...\n        self._closed = True\n\n    def terminate(self):\n        \"\"\"Stops the worker processes immediately without completing\n        outstanding work. When the pool object is garbage collected\n        terminate() will be called immediately.\"\"\"\n        self.close()\n        self._tasks.cancel()\n\n    def join(self):\n        \"\"\"Wait for the worker processes to exit. One must call\n        close() or terminate() before using join().\"\"\"\n        self._tasks.wait()\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self.join()\n\n    def __del__(self):\n        self.terminate()\n        self.join()\n\n    def _create_sequences(self, func, iterable, chunksize, collector):\n        \"\"\"\n        Create callable objects to process and pushes them on the\n        work queue. Each work unit is meant to process a slice of\n        iterable of size chunksize. If collector is specified, then\n        the ApplyResult objects associated with the jobs will notify\n        collector when their result becomes ready.\n\n        \\return the list callable objects (basically: JobSequences)\n        pushed onto the work queue\n        \"\"\"\n        assert not self._closed  # No lock here. We assume it's atomic...\n        it_ = iter(iterable)\n        exit_loop = False\n        sequences = []\n        while not exit_loop:\n            seq = []\n            for _ in range(chunksize or 1):\n                try:\n                    arg = next(it_)\n                except StopIteration:\n                    exit_loop = True\n                    break\n                apply_result = ApplyResult(collector)\n                job = Job(func, (arg,), {}, apply_result)\n                seq.append(job)\n            if seq:\n                sequences.append(JobSequence(seq))\n        for t in sequences:\n            self._tasks.run(t)\n        return sequences\n\n\nclass Job:\n    \"\"\"A work unit that corresponds to the execution of a single function\"\"\"\n\n    def __init__(self, func, args, kwds, apply_result):\n        \"\"\"\n        \\param func/args/kwds used to call the function\n        \\param apply_result ApplyResult object that holds the result\n        of the function call\n        \"\"\"\n        self._func = func\n        self._args = args\n        self._kwds = kwds\n        self._result = apply_result\n\n    def __call__(self):\n        \"\"\"\n        Call the function with the args/kwds and tell the ApplyResult\n        that its result is ready. Correctly handles the exceptions\n        happening during the execution of the function\n        \"\"\"\n        try:\n            result = self._func(*self._args, **self._kwds)\n        except:\n            self._result._set_exception()\n        else:\n            self._result._set_value(result)\n\n\nclass JobSequence:\n    \"\"\"A work unit that corresponds to the processing of a continuous\n    sequence of Job objects\"\"\"\n\n    def __init__(self, jobs):\n        self._jobs = jobs\n\n    def __call__(self):\n        \"\"\"\n        Call all the Job objects that have been specified\n        \"\"\"\n        for job in self._jobs:\n            job()\n\n\nclass ApplyResult(object):\n    \"\"\"An object associated with a Job object that holds its result:\n    it's available during the whole life the Job and after, even when\n    the Job didn't process yet. It's possible to use this object to\n    wait for the result/exception of the job to be available.\n\n    The result objects returns by the Pool::*_async() methods are of\n    this type\"\"\"\n\n    def __init__(self, collector=None, callback=None):\n        \"\"\"\n        \\param collector when not None, the notify_ready() method of\n        the collector will be called when the result from the Job is\n        ready\n        \\param callback when not None, function to call when the\n        result becomes available (this is the paramater passed to the\n        Pool::*_async() methods.\n        \"\"\"\n        self._success = False\n        self._event = threading.Event()\n        self._data = None\n        self._collector = None\n        self._callback = callback\n\n        if collector is not None:\n            collector.register_result(self)\n            self._collector = collector\n\n    def get(self, timeout=None):\n        \"\"\"\n        Returns the result when it arrives. If timeout is not None and\n        the result does not arrive within timeout seconds then\n        TimeoutError is raised. If the remote call raised an exception\n        then that exception will be reraised by get().\n        \"\"\"\n        if not self.wait(timeout):\n            raise TimeoutError(\"Result not available within %fs\" % timeout)\n        if self._success:\n            return self._data\n        if sys.version_info[0] == 3:\n            raise self._data[0](self._data[1]).with_traceback(self._data[2])\n        else:\n            exec(\"raise self._data[0], self._data[1], self._data[2]\")\n\n    def wait(self, timeout=None):\n        \"\"\"Waits until the result is available or until timeout\n        seconds pass.\"\"\"\n        self._event.wait(timeout)\n        return self._event.isSet()\n\n    def ready(self):\n        \"\"\"Returns whether the call has completed.\"\"\"\n        return self._event.isSet()\n\n    def successful(self):\n        \"\"\"Returns whether the call completed without raising an\n        exception. Will raise AssertionError if the result is not\n        ready.\"\"\"\n        assert self.ready()\n        return self._success\n\n    def _set_value(self, value):\n        \"\"\"Called by a Job object to tell the result is ready, and\n        provides the value of this result. The object will become\n        ready and successful. The collector's notify_ready() method\n        will be called, and the callback method too\"\"\"\n        assert not self.ready()\n        self._data = value\n        self._success = True\n        self._event.set()\n        if self._collector is not None:\n            self._collector.notify_ready(self)\n        if self._callback is not None:\n            try:\n                self._callback(value)\n            except:\n                traceback.print_exc()\n\n    def _set_exception(self):\n        \"\"\"Called by a Job object to tell that an exception occurred\n        during the processing of the function. The object will become\n        ready but not successful. The collector's notify_ready()\n        method will be called, but NOT the callback method\"\"\"\n        # traceback.print_exc()\n        assert not self.ready()\n        self._data = sys.exc_info()\n        self._success = False\n        self._event.set()\n        if self._collector is not None:\n            self._collector.notify_ready(self)\n\n\nclass AbstractResultCollector(object):\n    \"\"\"ABC to define the interface of a ResultCollector object. It is\n    basically an object which knows whuich results it's waiting for,\n    and which is able to get notify when they get available. It is\n    also able to provide an iterator over the results when they are\n    available\"\"\"\n\n    def __init__(self, to_notify):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \"\"\"\n        self._to_notify = to_notify\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def notify_ready(self, apply_result):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another (order defined by the\n        implementation)\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def __iter__(self):\n        \"\"\"Return a new CollectorIterator object for this collector\"\"\"\n        return CollectorIterator(self)\n\n\nclass CollectorIterator(object):\n    \"\"\"An iterator that allows to iterate over the result values\n    available in the given collector object. Equipped with an extended\n    next() method accepting a timeout argument. Created by the\n    AbstractResultCollector::__iter__() method\"\"\"\n\n    def __init__(self, collector):\n        \"\"\"\\param AbstractResultCollector instance\"\"\"\n        self._collector = collector\n        self._idx = 0\n\n    def __iter__(self):\n        return self\n\n    def next(self, timeout=None):\n        \"\"\"Return the next result value in the sequence. Raise\n        StopIteration at the end. Can raise the exception raised by\n        the Job\"\"\"\n        try:\n            apply_result = self._collector._get_result(self._idx, timeout)\n        except IndexError:\n            # Reset for next time\n            self._idx = 0\n            raise StopIteration\n        except:\n            self._idx = 0\n            raise\n        self._idx += 1\n        assert apply_result.ready()\n        return apply_result.get(0)\n\n    def __next__(self):\n        return self.next()\n\n\nclass UnorderedResultCollector(AbstractResultCollector):\n    \"\"\"An AbstractResultCollector implementation that collects the\n    values of the ApplyResult objects in the order they become ready. The\n    CollectorIterator object returned by __iter__() will iterate over\n    them in the order they become ready\"\"\"\n\n    def __init__(self, to_notify=None):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \"\"\"\n        AbstractResultCollector.__init__(self, to_notify)\n        self._cond = threading.Condition()\n        self._collection = []\n        self._expected = 0\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        self._expected += 1\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another, in the order the results have\n        become available.\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        self._cond.acquire()\n        try:\n            if idx >= self._expected:\n                raise IndexError\n            elif idx < len(self._collection):\n                return self._collection[idx]\n            elif idx != len(self._collection):\n                # Violation of the sequence protocol\n                raise IndexError()\n            else:\n                self._cond.wait(timeout=timeout)\n                try:\n                    return self._collection[idx]\n                except IndexError:\n                    # Still not added !\n                    raise TimeoutError(\"Timeout while waiting for results\")\n        finally:\n            self._cond.release()\n\n    def notify_ready(self, apply_result=None):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        first_item = False\n        self._cond.acquire()\n        try:\n            self._collection.append(apply_result)\n            first_item = (len(self._collection) == 1)\n\n            self._cond.notifyAll()\n        finally:\n            self._cond.release()\n\n        if first_item and self._to_notify is not None:\n            self._to_notify._set_value(iter(self))\n\n\nclass OrderedResultCollector(AbstractResultCollector):\n    \"\"\"An AbstractResultCollector implementation that collects the\n    values of the ApplyResult objects in the order they have been\n    submitted. The CollectorIterator object returned by __iter__()\n    will iterate over them in the order they have been submitted\"\"\"\n\n    def __init__(self, to_notify=None, as_iterator=True):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \\param as_iterator boolean telling whether the result value\n        set on to_notify should be an iterator (available as soon as 1\n        result arrived) or a list (available only after the last\n        result arrived)\n        \"\"\"\n        AbstractResultCollector.__init__(self, to_notify)\n        self._results = []\n        self._lock = threading.Lock()\n        self._remaining = 0\n        self._as_iterator = as_iterator\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        self._results.append(apply_result)\n        self._remaining += 1\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another (order defined by the\n        implementation)\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        res = self._results[idx]\n        res.wait(timeout)\n        return res\n\n    def notify_ready(self, apply_result):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        got_first = False\n        got_last = False\n        self._lock.acquire()\n        try:\n            assert self._remaining > 0\n            got_first = (len(self._results) == self._remaining)\n            self._remaining -= 1\n            got_last = (self._remaining == 0)\n        finally:\n            self._lock.release()\n\n        if self._to_notify is not None:\n            if self._as_iterator and got_first:\n                self._to_notify._set_value(iter(self))\n            elif not self._as_iterator and got_last:\n                try:\n                    lst = [r.get(0) for r in self._results]\n                except:\n                    self._to_notify._set_exception()\n                else:\n                    self._to_notify._set_value(lst)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/python/tbb/test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Based on the software developed by:\n# Copyright (c) 2008,2016 david decotigny (Pool of threads)\n# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. Neither the name of author nor the names of any contributors may be\n#    used to endorse or promote products derived from this software\n#    without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS \"AS IS\" AND\n# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n#\n\nfrom __future__ import print_function\nimport time\nimport threading\n\nfrom .api import *\nfrom .pool import *\n\n\ndef test(arg=None):\n    if arg == \"-v\":\n        def say(*x):\n            print(*x)\n    else:\n        def say(*x):\n            pass\n    say(\"Start Pool testing\")\n\n    get_tid = lambda: threading.current_thread().ident\n\n    def return42():\n        return 42\n\n    def f(x):\n        return x * x\n\n    def work(mseconds):\n        res = str(mseconds)\n        if mseconds < 0:\n            mseconds = -mseconds\n        say(\"[%d] Start to work for %fms...\" % (get_tid(), mseconds*10))\n        time.sleep(mseconds/100.)\n        say(\"[%d] Work done (%fms).\" % (get_tid(), mseconds*10))\n        return res\n\n    ### Test copy/pasted from multiprocessing\n    pool = Pool(4)  # start worker threads\n\n    # edge cases\n    assert pool.map(return42, []) == []\n    assert pool.apply_async(return42, []).get() == 42\n    assert pool.apply(return42, []) == 42\n    assert list(pool.imap(return42, iter([]))) == []\n    assert list(pool.imap_unordered(return42, iter([]))) == []\n    assert pool.map_async(return42, []).get() == []\n    assert list(pool.imap_async(return42, iter([])).get()) == []\n    assert list(pool.imap_unordered_async(return42, iter([])).get()) == []\n\n    # basic tests\n    result = pool.apply_async(f, (10,))  # evaluate \"f(10)\" asynchronously\n    assert result.get(timeout=1) == 100  # ... unless slow computer\n    assert list(pool.map(f, range(10))) == list(map(f, range(10)))\n    it = pool.imap(f, range(10))\n    assert next(it) == 0\n    assert next(it) == 1\n    assert next(it) == 4\n\n    # Test apply_sync exceptions\n    result = pool.apply_async(time.sleep, (3,))\n    try:\n        say(result.get(timeout=1))  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    assert result.get() is None  # sleep() returns None\n\n    def cb(s):\n        say(\"Result ready: %s\" % s)\n\n    # Test imap()\n    assert list(pool.imap(work, range(10, 3, -1), chunksize=4)) == list(map(\n        str, range(10, 3, -1)))\n\n    # Test imap_unordered()\n    assert sorted(pool.imap_unordered(work, range(10, 3, -1))) == sorted(map(\n        str, range(10, 3, -1)))\n\n    # Test map_async()\n    result = pool.map_async(work, range(10), callback=cb)\n    try:\n        result.get(timeout=0.01)  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    say(result.get())\n\n    # Test imap_async()\n    result = pool.imap_async(work, range(3, 10), callback=cb)\n    try:\n        result.get(timeout=0.01)  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    for i in result.get():\n        say(\"Item:\", i)\n    say(\"### Loop again:\")\n    for i in result.get():\n        say(\"Item2:\", i)\n\n    # Test imap_unordered_async()\n    result = pool.imap_unordered_async(work, range(10, 3, -1), callback=cb)\n    try:\n        say(result.get(timeout=0.01))  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    for i in result.get():\n        say(\"Item1:\", i)\n    for i in result.get():\n        say(\"Item2:\", i)\n    r = result.get()\n    for i in r:\n        say(\"Item3:\", i)\n    for i in r:\n        say(\"Item4:\", i)\n    for i in r:\n        say(\"Item5:\", i)\n\n    #\n    # The case for the exceptions\n    #\n\n    # Exceptions in imap_unordered_async()\n    result = pool.imap_unordered_async(work, range(2, -10, -1), callback=cb)\n    time.sleep(3)\n    try:\n        for i in result.get():\n            say(\"Got item:\", i)\n    except (IOError, ValueError):\n        say(\"Good. Got expected exception\")\n\n    # Exceptions in imap_async()\n    result = pool.imap_async(work, range(2, -10, -1), callback=cb)\n    time.sleep(3)\n    try:\n        for i in result.get():\n            say(\"Got item:\", i)\n    except (IOError, ValueError):\n        say(\"Good. Got expected exception\")\n\n    # Stop the test: need to stop the pool !!!\n    pool.terminate()\n    pool.join()\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ntbb_root?=..\nexamples_root:=$(tbb_root)/examples\ninclude $(tbb_root)/build/common.inc\n\n#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.ver\n#According to documentation, recursively invoked make commands can process their targets in parallel\n.NOTPARALLEL:\n\n.PHONY: all tbb tbbmalloc tbbproxy test test_no_depends release debug examples clean\n\nall: release debug examples\n\ntbb: tbb_release tbb_debug\n\ntbbmalloc: tbbmalloc_release tbbmalloc_debug\n\ntbbproxy: tbbproxy_release tbbproxy_debug\n\nrml: rml_release rml_debug\n\ntest: tbbmalloc_test_release $(if $(use_proxy),tbbproxy_test_release) tbb_test_release tbbmalloc_test_debug $(if $(use_proxy),tbbproxy_test_debug) tbb_test_debug\nifeq (,$(findstring skip,$(target:android=skip) $(offload:mic=skip)))\ntest: rml_test_debug rml_test_release\nendif\n\ntest_no_depends: tbbmalloc_test_release_no_depends $(if $(use_proxy),tbbproxy_test_release_no_depends) tbb_test_release_no_depends tbbmalloc_test_debug_no_depends $(if $(use_proxy),tbbproxy_test_debug_no_depends) tbb_test_debug_no_depends\n\t@echo done\n\nrelease: tbb_release tbbmalloc_release $(if $(use_proxy),tbbproxy_release)\nrelease: $(call cross_cfg,tbbmalloc_test_release) $(call cross_cfg,test_release)\n\ndebug: tbb_debug tbbmalloc_debug $(if $(use_proxy),tbbproxy_debug)\ndebug: $(call cross_cfg,tbbmalloc_test_debug) $(call cross_cfg, test_debug)\n\nexamples: tbb tbbmalloc examples_debug clean_examples examples_release\n\nexamples_no_depends: examples_release_no_depends examples_debug_no_depends\n\nclean: clean_release clean_debug clean_examples\n\t@echo clean done\n\n.PHONY: full\nfull:\n\t$(MAKE) -sir --no-print-directory -f Makefile tbb_root=.. clean all\nifeq ($(tbb_os),windows)\n\t$(MAKE) -sir --no-print-directory -f Makefile tbb_root=.. compiler=icl clean all native_examples\nelse\n\t$(MAKE) -sir --no-print-directory -f Makefile tbb_root=.. compiler=icc clean all native_examples\nendif\nifeq ($(arch),intel64)\n\t$(MAKE) -sir --no-print-directory -f Makefile tbb_root=.. arch=ia32 clean all\nendif\n# it doesn't test compiler=icc arch=ia32 on intel64 systems due to environment settings of icc\n\nnative_examples: tbb tbbmalloc\n\t$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. compiler=$(native_compiler) debug test\n\t$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. compiler=$(native_compiler) clean release test\n\n../examples/% examples/%::\n\t$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. $(subst examples/,,$(subst ../,,$@))\n\ndebug_%:: cfg:=$(if $(findstring file,$(origin cfg)),debug,$(cfg))\ndebug_%:: export run_cmd=$(debugger)\ndebug_malloc_% test_malloc_% debug_ScalableAlloc% test_ScalableAlloc%:: TESTFILE=tbbmalloc\ndebug_rml_% test_rml_%:: TESTFILE=rml\ndebug_runtime_load% test_runtime_load%:: TESTFILE=tbbproxy\ndebug_% test_% stress_% time_% perf_%:: TESTFILE?=test\ndebug_% test_% stress_% time_% perf_%::\n\t$(MAKE) -C \"$(work_dir)_$(cfg)\" -r -f $(tbb_root)/build/Makefile.$(TESTFILE) cfg=$(cfg) $(subst .cpp,,$@)\n\nclean_%::\nifeq ($(origin cfg),file)\n\t@$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.test cfg=release $@\n\t@$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.test cfg=debug $@\nelse\n\t@$(MAKE) -C \"$(work_dir)_$(cfg)\"  -r -f $(tbb_root)/build/Makefile.test $@\nendif\n\npython_%: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/Makefile $(subst python_,,$@)\n\n.PHONY: test_release test_debug test_release_no_depends test_debug_no_depends\n.PHONY: tbb_release tbb_debug tbb_test_release tbb_test_debug tbb_test_release_no_depends tbb_test_debug_no_depends\n# do not delete double-space after -C option\ntbb_release: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbb cfg=release\n\ntbb_debug: mkdir_debug\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbb cfg=debug\n\ntbb_test: tbb_test_release tbb_test_debug\n\ntbb_test_release: $(call cross_cfg,tbb_release) $(if $(use_proxy),$(call cross_cfg,tbbproxy_release)) tbb_test_release_no_depends\ntbb_test_release_no_depends:$(call cross_cfg,mkdir_release)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_release)\"  -r -f $(tbb_root)/build/Makefile.test cfg=release\n\ntbb_test_debug: $(call cross_cfg,tbb_debug) $(if $(use_proxy),$(call cross_cfg,tbbproxy_debug)) tbb_test_debug_no_depends\ntbb_test_debug_no_depends:$(call cross_cfg,mkdir_debug)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_debug)\"  -r -f $(tbb_root)/build/Makefile.test cfg=debug\n# backward compatibility\ntest_release: tbb_test_release\ntest_debug: tbb_test_debug\ntest_release_no_depends: tbb_test_release_no_depends\ntest_debug_no_depends: tbb_test_debug_no_depends\n\n.PHONY: tbbmalloc_release tbbmalloc_debug\n.PHONY: tbbmalloc_dll_release tbbmalloc_dll_debug tbbmalloc_proxy_dll_release tbbmalloc_proxy_dll_debug\n.PHONY: tbbmalloc_test tbbmalloc_test_release tbbmalloc_test_debug tbbmalloc_test_release_no_depends tbbmalloc_test_debug_no_depends\n\ntbbmalloc_release: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc\n\ntbbmalloc_debug: mkdir_debug\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc\n\ntbbmalloc_dll_release: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_dll\n\ntbbmalloc_proxy_dll_release: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release  malloc_proxy_dll\n\ntbbmalloc_dll_debug: mkdir_debug\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_dll\n\ntbbmalloc_proxy_dll_debug: mkdir_debug\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_proxy_dll\n\ntbbmalloc_test: tbbmalloc_test_release tbbmalloc_test_debug\n\ntbbmalloc_test_release: $(call cross_cfg,tbbmalloc_release) tbbmalloc_test_release_no_depends\ntbbmalloc_test_release_no_depends: $(call cross_cfg,mkdir_release)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_release)\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test_no_depends\n\ntbbmalloc_test_debug: $(call cross_cfg,tbbmalloc_debug) tbbmalloc_test_debug_no_depends\ntbbmalloc_test_debug_no_depends: $(call cross_cfg,mkdir_debug)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_debug)\"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test_no_depends\n\n.PHONY: tbbproxy_release tbbproxy_debug\n.PHONY: tbbproxy_test tbbproxy_test_release tbbproxy_test_debug tbbproxy_test_release_no_depends tbbproxy_test_debug_no_depends\n\ntbbproxy_release: mkdir_release tbb_release\n\t$(MAKE) -C \"$(work_dir)_release\" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy\n\ntbbproxy_debug: mkdir_debug tbb_debug\n\t$(MAKE) -C \"$(work_dir)_debug\" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy\n\ntbbproxy_test: tbbproxy_test_release tbbproxy_test_debug\n\ntbbproxy_test_release: $(call cross_cfg,tbb_release) $(call cross_cfg,tbbproxy_release) tbbproxy_test_release_no_depends\ntbbproxy_test_release_no_depends:$(call cross_cfg,mkdir_release)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_release)\" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy_test\n\ntbbproxy_test_debug: $(call cross_cfg,tbb_debug) $(call cross_cfg,tbbproxy_debug) tbbproxy_test_debug_no_depends\ntbbproxy_test_debug_no_depends: $(call cross_cfg,mkdir_debug)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_debug)\"   -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy_test\n\n.PHONY: rml_release rml_debug rml_test_release rml_test_debug\n.PHONY: rml_test_release_no_depends rml_test_debug_no_depends\n\nrml_release: mkdir_release\n\t$(MAKE) -C \"$(work_dir)_release\"  -r -f $(tbb_root)/build/Makefile.rml cfg=release rml\n\nrml_debug: mkdir_debug\n\t$(MAKE) -C \"$(work_dir)_debug\"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug rml\n\nrml_test: rml_test_release rml_test_debug\n\nrml_test_release: $(call cross_cfg,rml_release) rml_test_release_no_depends\nrml_test_release_no_depends: $(call cross_cfg,mkdir_release)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_release)\"  -r -f $(tbb_root)/build/Makefile.rml cfg=release rml_test\n\nrml_test_debug: $(call cross_cfg,rml_debug) rml_test_debug_no_depends\nrml_test_debug_no_depends: $(call cross_cfg,mkdir_debug)\n\t$(MAKE) -C \"$(call cross_cfg,$(work_dir)_debug)\"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug rml_test\n\n.PHONY: examples_release examples_debug examples_release_no_depends examples_debug_no_depends\n\nexamples_release: tbb_release tbbmalloc_release examples_release_no_depends\nexamples_release_no_depends:\n\t$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. release test UI=con\n\nexamples_debug: tbb_debug tbbmalloc_debug examples_debug_no_depends\nexamples_debug_no_depends:\n\t$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. debug test UI=con\n\n.PHONY: clean_release clean_debug clean_examples\n\nclean_release:\n\t$(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL))\n\t$(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL))\n\nclean_debug:\n\t$(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL))\n\t$(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL))\n\nclean_examples:\n\t$(shell $(MAKE) -s -i -r -C $(examples_root) -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))\n\n.PHONY: mkdir_release mkdir_debug codecov do_codecov info tbbvars shell\n\nmkdir_release:\n\t$(shell $(MD) \"$(work_dir)_release\" >$(NUL) 2>$(NUL))\n\t@echo Created $(work_dir)_release directory\n\nmkdir_debug:\n\t$(shell $(MD) \"$(work_dir)_debug\" >$(NUL) 2>$(NUL))\n\t@echo Created $(work_dir)_debug directory\n\nifeq ($(compiler),$(if $(findstring windows,$(tbb_os)),icl,icc))\ncodecov: codecov=yes\ncodecov: do_codecov\n\t$(MAKE) -C \"$(work_dir)_release\" -r -f $(tbb_root)/build/Makefile.test cfg=release codecov_gen\nelse\ncodecov:\n\t$(error Only Intel(R) C++ Compiler is supported for code coverage)\nendif\n\nexport codecov\n\ndo_codecov: tbb_root=..\ndo_codecov:\n\t$(MAKE) RML=yes tbbmalloc_test_release test_release\n\t$(MAKE) clean_test_* cfg=release\n\t$(MAKE) RML=yes crosstest=yes tbbmalloc_test_debug test_debug\n\t$(MAKE) clean_test_* cfg=release\n\t$(MAKE) rml_test_release\n\t$(MAKE) clean_test_* cfg=release\n\t$(MAKE) crosstest=yes rml_test_debug\n\ninfo:\n\t@echo OS: $(tbb_os)\n\t@echo arch=$(arch)\n\t@echo compiler=$(compiler)\n\t@echo runtime=$(runtime)\n\t@echo tbb_build_prefix=$(tbb_build_prefix)\n\t@echo work_dir=$(abspath $(tbb_build_dir)$(SLASH)$(tbb_build_prefix)_$(cfg))\n\n# [usage]$ source `make <options> tbbvars`.sh\ntbbvars:\n\t@echo $(tbb_build_dir)$(SLASH)$(tbb_build_prefix)_$(cfg)$(SLASH)tbbvars\n\nsymbols: args=$(if $(findstring cl,$(compiler)), dumpbin /section:.text *.obj|findstr COMDAT , nm -Pg *.o|grep ' T '|cut -f1 -d' ')\nsymbols: shell\n\nshell:\nifdef BUILDING_PHASE\n\t-$(run_cmd) $(shell_cmd)\nelse\n\t@$(MAKE) -C \"$(work_dir)_$(cfg)\" -rf $(tbb_root)/src/Makefile BUILDING_PHASE=1 shell shell_cmd=\"$(if $(args),$(args),$(SHELL))\"\nendif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nThis directory contains the source code and unit tests for Intel&reg; Threading Building Blocks.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"tbb\">tbb</A>\n<DD>Source code of the TBB library core.\n<DT><A HREF=\"tbbmalloc\">tbbmalloc</A>\n<DD>Source code of the TBB scalable memory allocator.\n<DT><A HREF=\"test\">test</A>\n<DD>Source code of the TBB unit tests.\n<DT><A HREF=\"rml\">rml</A>\n<DD>Source code of the Resource Management Layer (RML).\n<DT><A HREF=\"perf\">perf</A>\n<DD>Source code of microbenchmarks.\n<DT><A HREF=\"old\">old</A>\n<DD>Source code of deprecated TBB entities that are still shipped as part of the TBB library for the sake of backward compatibility.\n</DL>\n\n<h2>Files</h2>\n<dl>\n<dt><a href=\"Makefile\">Makefile</a>\n<dd>Advanced Makefile for developing and debugging of TBB. See the <a href=\"../build/index.html#build\">basic build directions</a>. Additional targets and options:\n    <dt><tt>make test_{name} time_{name}</tt>\n    <dd>Make and run individual test or benchmark.\n    <dt><tt>make stress_{name}</tt>\n    <dd>Equivalent to 'make test_{name}' but runs until a failure detected or terminated by user.\n    <dt><tt>make run_cmd=\"{command}\" [(above options or targets)]</tt>\n    <dd>Command prefix for tests execution. Also, \"run_cmd=-\" will ignore test execution failures. See also -k and -i options of the GNU make for more options to keep building and testing despite of failures.\n    <dt><tt>make debug_{name}</tt>\n    <dd>Equivalent to 'make test_{name}' but compiles in debug mode and runs under debugger (\"run_cmd=$(debugger)\").\n    <dt><tt>make args=\"{command-line arguments}\" [(above options or targets)]</tt>\n    <dd>Additional arguments for the run.\n    <dt><tt>make repeat=\"{N}\" [(above options or targets)]</tt>\n    <dd>Repeats execution N times.\n    <dt><tt>make clean_{filename}</tt>\n    <dd>Removes executable, object, and other intermediate files with specified filename ('*' also works).\n    <dt><tt>make cfg={debug|release} [(above options or targets)]</tt>\n    <dd>Specifies a build mode or corresponding directory to work in.\n    <dt><tt>make tbb_strict=1 [(above options or targets)]</tt>\n    <dd>Enables warnings as errors.\n    <dt><tt>make examples/{target}</tt>\n    <dd>Invokes examples/Makefile with specified target. Available in the open-source version only.\n        For the commercial version, you can download Intel TBB Samples at the <a href=\"https://software.intel.com/en-us/product-code-samples?topic=20828\">Intel&reg; Software Product Samples and Tutorials</a> website.\n    <dt><tt>make python_{target} [compiler={icl, icc}]</tt>\n    <dd>Invokes Makefile with the specified target in <a href=\"../python/index.html\">python</a> directory. E.g. 'python_install' target builds and installs the module into Python.\n    <dt><tt>make clean_release clean_debug clean_examples</tt>\n    <dd>Removes release or debug build directories, or cleans all examples. The target <tt>clean_examples</tt> is available in the open-source version only.\n    <dt><tt>make test_no_depends</tt>\n    <dd>Equivalent to 'make test' but does not check for libraries updates.\n    <dt><tt>make info</tt>\n    <dd>Output information about build configuration and directories.\n    <dt><tt>make cpp0x=1 [(above options or targets)]</tt>\n    <dd>Enables C++0x extensions like lambdas for compilers that implement them as experimental features.\n    <dt><tt>make CXXFLAGS={Flags} [(above options or targets)]</tt>\n    <dd>Specifies additional options for compiler.\n    <dt><tt>make target={name} [(above options or targets)]</tt>\n    <dd>Includes additional build/{name}.inc file after OS-specific one.\n    <dt><tt>make extra_inc={filename} [(above options or targets)]</tt>\n    <dd>Includes additional makefile.\n    </dl>\n\n<HR/>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/concurrent_queue_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"concurrent_queue_v2.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/atomic.h\"\n#include <cstring>\n#include <stdio.h>\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif\n\n#define RECORD_EVENTS 0\n\nusing namespace std;\n\nnamespace tbb {\n\nnamespace internal {\n\nclass concurrent_queue_rep;\n\n//! A queue using simple locking.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\nstruct micro_queue {\n    typedef concurrent_queue_base::page page;\n    typedef size_t ticket;\n\n    atomic<page*> head_page;\n    atomic<ticket> head_counter;\n\n    atomic<page*> tail_page;\n    atomic<ticket> tail_counter;\n\n    spin_mutex page_mutex;\n\n    class push_finalizer: no_copy {\n        ticket my_ticket;\n        micro_queue& my_queue;\n    public:\n        push_finalizer( micro_queue& queue, ticket k ) :\n            my_ticket(k), my_queue(queue)\n        {}\n        ~push_finalizer() {\n            my_queue.tail_counter = my_ticket;\n        }\n    };\n\n    void push( const void* item, ticket k, concurrent_queue_base& base );\n\n    class pop_finalizer: no_copy {\n        ticket my_ticket;\n        micro_queue& my_queue;\n        page* my_page;\n    public:\n        pop_finalizer( micro_queue& queue, ticket k, page* p ) :\n            my_ticket(k), my_queue(queue), my_page(p)\n        {}\n        ~pop_finalizer() {\n            page* p = my_page;\n            if( p ) {\n                spin_mutex::scoped_lock lock( my_queue.page_mutex );\n                page* q = p->next;\n                my_queue.head_page = q;\n                if( !q ) {\n                    my_queue.tail_page = NULL;\n                }\n            }\n            my_queue.head_counter = my_ticket;\n            if( p )\n                operator delete(p);\n        }\n    };\n\n    bool pop( void* dst, ticket k, concurrent_queue_base& base );\n};\n\n//! Internal representation of a ConcurrentQueue.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\nclass concurrent_queue_rep {\npublic:\n    typedef size_t ticket;\n\nprivate:\n    friend struct micro_queue;\n\n    //! Approximately n_queue/golden ratio\n    static const size_t phi = 3;\n\npublic:\n    //! Must be power of 2\n    static const size_t n_queue = 8;\n\n    //! Map ticket to an array index\n    static size_t index( ticket k ) {\n        return k*phi%n_queue;\n    }\n\n    atomic<ticket> head_counter;\n    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n\n    atomic<ticket> tail_counter;\n    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n    micro_queue array[n_queue];\n\n    micro_queue& choose( ticket k ) {\n        // The formula here approximates LRU in a cache-oblivious way.\n        return array[index(k)];\n    }\n\n    //! Value for effective_capacity that denotes unbounded queue.\n    static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // unary minus operator applied to unsigned type, result still unsigned\n    #pragma warning( push )\n    #pragma warning( disable: 4146 )\n#endif\n\n//------------------------------------------------------------------------\n// micro_queue\n//------------------------------------------------------------------------\nvoid micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {\n    k &= -concurrent_queue_rep::n_queue;\n    page* p = NULL;\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );\n    if( !index ) {\n        size_t n = sizeof(page) + base.items_per_page*base.item_size;\n        p = static_cast<page*>(operator new( n ));\n        p->mask = 0;\n        p->next = NULL;\n    }\n    {\n        push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue );\n        spin_wait_until_eq( tail_counter, k );\n        if( p ) {\n            spin_mutex::scoped_lock lock( page_mutex );\n            if( page* q = tail_page )\n                q->next = p;\n            else\n                head_page = p;\n            tail_page = p;\n        } else {\n            p = tail_page;\n        }\n        base.copy_item( *p, index, item );\n        // If no exception was thrown, mark item as present.\n        p->mask |= uintptr_t(1)<<index;\n    }\n}\n\nbool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {\n    k &= -concurrent_queue_rep::n_queue;\n    spin_wait_until_eq( head_counter, k );\n    spin_wait_while_eq( tail_counter, k );\n    page *p = head_page;\n    __TBB_ASSERT( p, NULL );\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );\n    bool success = false;\n    {\n        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? p : NULL );\n        if( p->mask & uintptr_t(1)<<index ) {\n            success = true;\n            base.assign_and_destroy_item( dst, *p, index );\n        }\n    }\n    return success;\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif\n\n//------------------------------------------------------------------------\n// concurrent_queue_base\n//------------------------------------------------------------------------\nconcurrent_queue_base::concurrent_queue_base( size_t item_sz ) {\n    items_per_page = item_sz<=  8 ? 32 :\n                     item_sz<= 16 ? 16 :\n                     item_sz<= 32 ?  8 :\n                     item_sz<= 64 ?  4 :\n                     item_sz<=128 ?  2 :\n                     1;\n    my_capacity = size_t(-1)/(item_sz>1 ? item_sz : 2);\n    my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);\n    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, \"alignment error\" );\n    memset(static_cast<void*>(my_rep),0,sizeof(concurrent_queue_rep));\n    this->item_size = item_sz;\n}\n\nconcurrent_queue_base::~concurrent_queue_base() {\n    size_t nq = my_rep->n_queue;\n    for( size_t i=0; i<nq; i++ ) {\n        page* tp = my_rep->array[i].tail_page;\n        __TBB_ASSERT( my_rep->array[i].head_page==tp, \"at most one page should remain\" );\n        if( tp!=NULL )\n            delete tp;\n    }\n    cache_aligned_allocator<concurrent_queue_rep>().deallocate(my_rep,1);\n}\n\nvoid concurrent_queue_base::internal_push( const void* src ) {\n    concurrent_queue_rep& r = *my_rep;\n    concurrent_queue_rep::ticket k  = r.tail_counter++;\n    if( my_capacity<concurrent_queue_rep::infinite_capacity ) {\n        // Capacity is limited, wait to not exceed it\n        atomic_backoff backoff;\n        while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(my_capacity) )\n            backoff.pause();\n    }\n    r.choose(k).push(src,k,*this);\n}\n\nvoid concurrent_queue_base::internal_pop( void* dst ) {\n    concurrent_queue_rep& r = *my_rep;\n    concurrent_queue_rep::ticket k;\n    do {\n        k = r.head_counter++;\n    } while( !r.choose(k).pop(dst,k,*this) );\n}\n\nbool concurrent_queue_base::internal_pop_if_present( void* dst ) {\n    concurrent_queue_rep& r = *my_rep;\n    concurrent_queue_rep::ticket k;\n    do {\n        for( atomic_backoff b;;b.pause() ) {\n            k = r.head_counter;\n            if( r.tail_counter<=k ) {\n                // Queue is empty\n                return false;\n            }\n            // Queue had item with ticket k when we looked.  Attempt to get that item.\n            if( r.head_counter.compare_and_swap(k+1,k)==k ) {\n                break;\n            }\n            // Another thread snatched the item, so pause and retry.\n        }\n    } while( !r.choose(k).pop(dst,k,*this) );\n    return true;\n}\n\nbool concurrent_queue_base::internal_push_if_not_full( const void* src ) {\n    concurrent_queue_rep& r = *my_rep;\n    concurrent_queue_rep::ticket k;\n    for( atomic_backoff b;;b.pause() ) {\n        k = r.tail_counter;\n        if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {\n            // Queue is full\n            return false;\n        }\n        // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.\n        if( r.tail_counter.compare_and_swap(k+1,k)==k )\n            break;\n        // Another thread claimed the slot, so pause and retry.\n    }\n    r.choose(k).push(src,k,*this);\n    return true;\n}\n\nptrdiff_t concurrent_queue_base::internal_size() const {\n    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );\n    return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter);\n}\n\nvoid concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*item_sz*/ ) {\n    my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;\n}\n\n//------------------------------------------------------------------------\n// concurrent_queue_iterator_rep\n//------------------------------------------------------------------------\nclass  concurrent_queue_iterator_rep: no_assign {\npublic:\n    typedef concurrent_queue_rep::ticket ticket;\n    ticket head_counter;\n    const concurrent_queue_base& my_queue;\n    concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];\n    concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) :\n        head_counter(queue.my_rep->head_counter),\n        my_queue(queue)\n    {\n        const concurrent_queue_rep& rep = *queue.my_rep;\n        for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )\n            array[k] = rep.array[k].head_page;\n    }\n    //! Get pointer to kth element\n    void* choose( size_t k ) {\n        if( k==my_queue.my_rep->tail_counter )\n            return NULL;\n        else {\n            concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];\n            __TBB_ASSERT(p,NULL);\n            size_t i = modulo_power_of_two( k/concurrent_queue_rep::n_queue, my_queue.items_per_page );\n            return static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;\n        }\n    }\n};\n\n//------------------------------------------------------------------------\n// concurrent_queue_iterator_base\n//------------------------------------------------------------------------\nconcurrent_queue_iterator_base::concurrent_queue_iterator_base( const concurrent_queue_base& queue ) {\n    my_rep = new concurrent_queue_iterator_rep(queue);\n    my_item = my_rep->choose(my_rep->head_counter);\n}\n\nvoid concurrent_queue_iterator_base::assign( const concurrent_queue_iterator_base& other ) {\n    if( my_rep!=other.my_rep ) {\n        if( my_rep ) {\n            delete my_rep;\n            my_rep = NULL;\n        }\n        if( other.my_rep ) {\n            my_rep = new concurrent_queue_iterator_rep( *other.my_rep );\n        }\n    }\n    my_item = other.my_item;\n}\n\nvoid concurrent_queue_iterator_base::advance() {\n    __TBB_ASSERT( my_item, \"attempt to increment iterator past end of queue\" );\n    size_t k = my_rep->head_counter;\n    const concurrent_queue_base& queue = my_rep->my_queue;\n    __TBB_ASSERT( my_item==my_rep->choose(k), NULL );\n    size_t i = modulo_power_of_two( k/concurrent_queue_rep::n_queue, queue.items_per_page );\n    if( i==queue.items_per_page-1 ) {\n        concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];\n        root = root->next;\n    }\n    my_rep->head_counter = k+1;\n    my_item = my_rep->choose(k+1);\n}\n\nconcurrent_queue_iterator_base::~concurrent_queue_iterator_base() {\n    delete my_rep;\n    my_rep = NULL;\n}\n\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/concurrent_queue_v2.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_queue_H\n#define __TBB_concurrent_queue_H\n\n#include \"tbb/tbb_stddef.h\"\n#include <new>\n\nnamespace tbb {\n\ntemplate<typename T> class concurrent_queue;\n\n//! @cond INTERNAL\nnamespace internal {\n\nclass concurrent_queue_rep;\nclass concurrent_queue_iterator_rep;\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\n//! For internal use only.\n/** Type-independent portion of concurrent_queue.\n    @ingroup containers */\nclass concurrent_queue_base: no_copy {\n    //! Internal representation\n    concurrent_queue_rep* my_rep;\n\n    friend class concurrent_queue_rep;\n    friend struct micro_queue;\n    friend class concurrent_queue_iterator_rep;\n    friend class concurrent_queue_iterator_base;\n\n    // In C++ 1998/2003 (but quite likely not beyond), friend micro_queue's rights\n    // do not apply to the declaration of micro_queue::pop_finalizer::my_page,\n    // as a member of a class nested within that friend class, so...\npublic:\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask; \n    };\n\nprotected:\n    //! Capacity of the queue\n    ptrdiff_t my_capacity;\n   \n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\nprivate:\n    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;\nprotected:\n    __TBB_EXPORTED_METHOD concurrent_queue_base( size_t item_size );\n    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base();\n\n    //! Enqueue item at tail of queue\n    void __TBB_EXPORTED_METHOD internal_push( const void* src );\n\n    //! Dequeue item from head of queue\n    void __TBB_EXPORTED_METHOD internal_pop( void* dst );\n\n    //! Attempt to enqueue item onto queue.\n    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );\n\n    //! Get size of queue\n    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;\n\n    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );\n};\n\n//! Type-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\nclass concurrent_queue_iterator_base : no_assign{\n    //! concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\nprotected:\n    //! Pointer to current item\n    mutable void* my_item;\n\n    //! Default constructor\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base() : my_rep(NULL), my_item(NULL) {}\n\n    //! Copy constructor\n    concurrent_queue_iterator_base( const concurrent_queue_iterator_base& i ) : my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator_base( const concurrent_queue_base& queue );\n\n    //! Assignment\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base& i );\n\n    //! Advance iterator one step towards tail of queue.\n    void __TBB_EXPORTED_METHOD advance();\n\n    //! Destructor\n    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base();\n};\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base {\n#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)\n    template<typename T>\n    friend class ::tbb::concurrent_queue;\n#else\npublic: // workaround for MSVC\n#endif \n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator( const concurrent_queue_base& queue ) :\n        concurrent_queue_iterator_base(queue)\n    {\n    }\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor. \n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        assign(other);\n        return *this;\n    }\n\n    //! Reference to current item \n    Value& operator*() const {\n        return *static_cast<Value*>(my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal;\n//! @endcond\n\n//! A high-performance thread-safe queue.\n/** Multiple threads may each push and pop concurrently.\n    Assignment and copy construction are not allowed.\n    @ingroup containers */\ntemplate<typename T>\nclass concurrent_queue: public internal::concurrent_queue_base {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Class used to ensure exception-safety of method \"pop\" \n    class destroyer {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}          \n    };\n\n    T& get_ref( page& pg, size_t index ) {\n        __TBB_ASSERT( index<items_per_page, NULL );\n        return static_cast<T*>(static_cast<void*>(&pg+1))[index];\n    }\n\n    virtual void copy_item( page& dst, size_t index, const void* src ) __TBB_override {\n        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));\n    }\n\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) __TBB_override {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = from;\n    }\n\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    /** Note that the size_type is a signed integral type.\n        This is because the size can be negative if there are pending pops without corresponding pushes. */\n    typedef std::ptrdiff_t size_type;\n\n    //! Difference type for iterator\n    typedef std::ptrdiff_t difference_type;\n\n    //! Construct empty queue\n    concurrent_queue() : \n        concurrent_queue_base( sizeof(T) )\n    {\n    }\n\n    //! Destroy queue\n    ~concurrent_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        internal_push( &source );\n    }\n\n    //! Dequeue item from head of queue.\n    /** Block until an item becomes available, and then dequeue it. */\n    void pop( T& destination ) {\n        internal_pop( &destination );\n    }\n\n    //! Enqueue an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool push_if_not_full( const T& source ) {\n        return internal_push_if_not_full( &source );\n    }\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool pop_if_present( T& destination ) {\n        return internal_pop_if_present( &destination );\n    }\n\n    //! Return number of pushes minus number of pops.\n    /** Note that the result can be negative if there are pops waiting for the \n        corresponding pushes.  The result can also exceed capacity() if there \n        are push operations in flight. */\n    size_type size() const {return internal_size();}\n\n    //! Equivalent to size()<=0.\n    bool empty() const {return size()<=0;}\n\n    //! Maximum number of allowed elements\n    size_type capacity() const {\n        return my_capacity;\n    }\n\n    //! Set the capacity\n    /** Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail,\n        and subsequent push operations to block forever. */\n    void set_capacity( size_type new_capacity ) {\n        internal_set_capacity( new_capacity, sizeof(T) );\n    }\n\n    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator begin() {return iterator(*this);}\n    iterator end() {return iterator();}\n    const_iterator begin() const {return const_iterator(*this);}\n    const_iterator end() const {return const_iterator();}\n    \n}; \n\ntemplate<typename T>\nconcurrent_queue<T>::~concurrent_queue() {\n    while( !empty() ) {\n        T value;\n        internal_pop(&value);\n    }\n}\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_queue_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/concurrent_vector_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"concurrent_vector_v2.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"../tbb/itt_notify.h\"\n#include \"tbb/task.h\"\n\n#include <stdexcept> // std::length_error\n#include <cstring>\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n\nvoid concurrent_vector_base::internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init ) {\n    size_type e = my_early_size;\n    while( e<new_size ) {\n        size_type f = my_early_size.compare_and_swap(new_size,e);\n        if( f==e ) {\n            internal_grow( e, new_size, element_size, init );\n            return;\n        }\n        e = f;\n    }\n}\n\nclass concurrent_vector_base::helper {\n    static void extend_segment( concurrent_vector_base& v );\npublic:\n    static segment_index_t find_segment_end( const concurrent_vector_base& v ) {\n        const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;\n        const size_t pointers_per_short_segment = 2;\n        //unsigned u = v.my_segment==v.my_storage ? pointers_per_short_segment : pointers_per_long_segment;\n        segment_index_t u = v.my_segment==(&(v.my_storage[0])) ? pointers_per_short_segment : pointers_per_long_segment;\n        segment_index_t k = 0;\n        while( k<u && v.my_segment[k].array )\n            ++k;\n        return k;\n    }\n    static void extend_segment_if_necessary( concurrent_vector_base& v, size_t k ) {\n        const size_t pointers_per_short_segment = 2;\n        if( k>=pointers_per_short_segment && v.my_segment==v.my_storage ) {\n            extend_segment(v);\n        }\n    }\n};\n\nvoid concurrent_vector_base::helper::extend_segment( concurrent_vector_base& v ) {\n    const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;\n    segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_segment, sizeof(segment_t), NULL );\n    std::memset( static_cast<void*>(s), 0, pointers_per_long_segment*sizeof(segment_t) );\n    // If other threads are trying to set pointers in the short segment, wait for them to finish their\n    // assignments before we copy the short segment to the long segment.\n    atomic_backoff backoff;\n    while( !v.my_storage[0].array || !v.my_storage[1].array ) backoff.pause();\n    s[0] = v.my_storage[0];\n    s[1] = v.my_storage[1];\n    if( v.my_segment.compare_and_swap( s, v.my_storage )!=v.my_storage )\n        NFS_Free(s);\n}\n\nconcurrent_vector_base::size_type concurrent_vector_base::internal_capacity() const {\n    return segment_base( helper::find_segment_end(*this) );\n}\n\nvoid concurrent_vector_base::internal_reserve( size_type n, size_type element_size, size_type max_size ) {\n    if( n>max_size ) {\n        __TBB_THROW( std::length_error(\"argument to concurrent_vector::reserve exceeds concurrent_vector::max_size()\") );\n    }\n    for( segment_index_t k = helper::find_segment_end(*this); segment_base(k)<n; ++k ) {\n        helper::extend_segment_if_necessary(*this,k);\n        size_t m = segment_size(k);\n        __TBB_ASSERT( !my_segment[k].array, \"concurrent operation during reserve(...)?\" );\n        my_segment[k].array = NFS_Allocate( m, element_size, NULL );\n    }\n}\n\nvoid concurrent_vector_base::internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy ) {\n    size_type n = src.my_early_size;\n    my_early_size = n;\n    my_segment = my_storage;\n    if( n ) {\n        size_type b;\n        for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {\n            helper::extend_segment_if_necessary(*this,k);\n            size_t m = segment_size(k);\n            __TBB_ASSERT( !my_segment[k].array, \"concurrent operation during copy construction?\" );\n            my_segment[k].array = NFS_Allocate( m, element_size, NULL );\n            if( m>n-b ) m = n-b;\n            copy( my_segment[k].array, src.my_segment[k].array, m );\n        }\n    }\n}\n\nvoid concurrent_vector_base::internal_assign( const concurrent_vector_base& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {\n    size_type n = src.my_early_size;\n    while( my_early_size>n ) {\n        segment_index_t k = segment_index_of( my_early_size-1 );\n        size_type b=segment_base(k);\n        size_type new_end = b>=n ? b : n;\n        __TBB_ASSERT( my_early_size>new_end, NULL );\n        destroy( (char*)my_segment[k].array+element_size*(new_end-b), my_early_size-new_end );\n        my_early_size = new_end;\n    }\n    size_type dst_initialized_size = my_early_size;\n    my_early_size = n;\n    size_type b;\n    for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {\n        helper::extend_segment_if_necessary(*this,k);\n        size_t m = segment_size(k);\n        if( !my_segment[k].array )\n            my_segment[k].array = NFS_Allocate( m, element_size, NULL );\n        if( m>n-b ) m = n-b; \n        size_type a = 0;\n        if( dst_initialized_size>b ) {\n            a = dst_initialized_size-b;\n            if( a>m ) a = m;\n            assign( my_segment[k].array, src.my_segment[k].array, a );\n            m -= a;\n            a *= element_size;\n        }\n        if( m>0 )\n            copy( (char*)my_segment[k].array+a, (char*)src.my_segment[k].array+a, m );\n    }\n    __TBB_ASSERT( src.my_early_size==n, \"detected use of concurrent_vector::operator= with right side that was concurrently modified\" );\n}\n\nvoid* concurrent_vector_base::internal_push_back( size_type element_size, size_type& index ) {\n    __TBB_ASSERT( sizeof(my_early_size)==sizeof(reference_count), NULL );\n    //size_t tmp = __TBB_FetchAndIncrementWacquire(*(tbb::internal::reference_count*)&my_early_size);\n    size_t tmp = __TBB_FetchAndIncrementWacquire((tbb::internal::reference_count*)&my_early_size);\n    index = tmp;\n    segment_index_t k_old = segment_index_of( tmp );\n    size_type base = segment_base(k_old);\n    helper::extend_segment_if_necessary(*this,k_old);\n    segment_t& s = my_segment[k_old];\n    void* array = s.array;\n    if( !array ) {\n        // FIXME - consider factoring this out and share with internal_grow_by\n\tif( base==tmp ) {\n\t    __TBB_ASSERT( !s.array, NULL );\n            size_t n = segment_size(k_old);\n\t    array = NFS_Allocate( n, element_size, NULL );\n\t    ITT_NOTIFY( sync_releasing, &s.array );\n\t    s.array = array;\n\t} else {\n\t    ITT_NOTIFY(sync_prepare, &s.array);\n\t    spin_wait_while_eq( s.array, (void*)0 );\n\t    ITT_NOTIFY(sync_acquired, &s.array);\n\t    array = s.array;\n\t}\n    }\n    size_type j_begin = tmp-base;\n    return (void*)((char*)array+element_size*j_begin);\n}\n\nconcurrent_vector_base::size_type concurrent_vector_base::internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init ) {\n    size_type result = my_early_size.fetch_and_add(delta);\n    internal_grow( result, result+delta, element_size, init );\n    return result;\n}\n\nvoid concurrent_vector_base::internal_grow( const size_type start, size_type finish, size_type element_size, internal_array_op1 init ) {\n    __TBB_ASSERT( start<finish, \"start must be less than finish\" );\n    size_t tmp = start;\n    do {\n        segment_index_t k_old = segment_index_of( tmp );\n        size_type base = segment_base(k_old);\n        size_t n = segment_size(k_old);\n        helper::extend_segment_if_necessary(*this,k_old);\n        segment_t& s = my_segment[k_old];\n        void* array = s.array;\n        if( !array ) {\n            if( base==tmp ) {\n                __TBB_ASSERT( !s.array, NULL );\n                array = NFS_Allocate( n, element_size, NULL );\n                ITT_NOTIFY( sync_releasing, &s.array );\n                s.array = array;\n            } else {\n                ITT_NOTIFY(sync_prepare, &s.array);\n                spin_wait_while_eq( s.array, (void*)0 );\n                ITT_NOTIFY(sync_acquired, &s.array);\n                array = s.array;\n            }\n        }\n        size_type j_begin = tmp-base;\n        size_type j_end = n > finish-base ? finish-base : n;\n        (*init)( (void*)((char*)array+element_size*j_begin), j_end-j_begin );\n        tmp = base+j_end;\n    } while( tmp<finish );\n}\n\nvoid concurrent_vector_base::internal_clear( internal_array_op1 destroy, bool reclaim_storage ) {\n    // Set \"my_early_size\" early, so that subscripting errors can be caught.\n    // FIXME - doing so may be hurting exception safety\n    __TBB_ASSERT( my_segment, NULL );\n    size_type finish = my_early_size;\n    my_early_size = 0;\n    while( finish>0 ) {\n        segment_index_t k_old = segment_index_of(finish-1);\n        segment_t& s = my_segment[k_old];\n        __TBB_ASSERT( s.array, NULL );\n        size_type base = segment_base(k_old);\n        size_type j_end = finish-base;\n        __TBB_ASSERT( j_end, NULL );\n        (*destroy)( s.array, j_end );\n        finish = base;\n    }\n\n    // Free the arrays\n    if( reclaim_storage ) {\n        size_t k = helper::find_segment_end(*this);\n        while( k>0 ) {\n            --k;\n            segment_t& s = my_segment[k];\n            void* array = s.array;\n            s.array = NULL;\n            NFS_Free( array );\n        }\n        // Clear short segment.\n        my_storage[0].array = NULL;\n        my_storage[1].array = NULL;\n        segment_t* s = my_segment;\n        if( s!=my_storage ) {\n            my_segment = my_storage;\n            NFS_Free( s );\n        }\n    }\n}\n\n} // namespace internal\n\n} // tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/concurrent_vector_v2.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_vector_H\n#define __TBB_concurrent_vector_H\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tbb_machine.h\"\n#include <new>\n#include <iterator>\n\nnamespace tbb {\n\ntemplate<typename T>\nclass concurrent_vector;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Base class of concurrent vector implementation.\n    /** @ingroup containers */\n    class concurrent_vector_base {\n    protected:\n\n        // Basic types declarations\n        typedef unsigned long segment_index_t;\n        typedef size_t size_type;\n\n        //! Log2 of \"min_segment_size\".\n        static const int lg_min_segment_size = 4;\n\n        //! Minimum size (in physical items) of a segment.\n        static const int min_segment_size = segment_index_t(1)<<lg_min_segment_size;\n\n        static segment_index_t segment_index_of( size_t index ) {\n            uintptr_t i = index|1<<(lg_min_segment_size-1);\n            uintptr_t j = __TBB_Log2(i);\n            return segment_index_t(j-(lg_min_segment_size-1));\n        }\n\n        static segment_index_t segment_base( segment_index_t k ) {\n            return min_segment_size>>1<<k & -min_segment_size;\n        }\n\n        static segment_index_t segment_size( segment_index_t k ) {\n            segment_index_t result = k==0 ? min_segment_size : min_segment_size/2<<k;\n            __TBB_ASSERT( result==segment_base(k+1)-segment_base(k), NULL );\n            return result;\n        }\n\n        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );\n\n        size_type __TBB_EXPORTED_METHOD internal_capacity() const;\n\n        //! Requested size of vector\n        atomic<size_type> my_early_size;\n\n        /** Can be zero-initialized. */\n        struct segment_t {\n            /** Declared volatile because in weak memory model, must have ld.acq/st.rel  */\n            void* volatile array;\n#if TBB_USE_ASSERT\n            ~segment_t() {\n                __TBB_ASSERT( !array, \"should have been set to NULL by clear\" );\n            }\n#endif /* TBB_USE_ASSERT */\n        };\n\n        // Data fields\n\n        //! Pointer to the segments table\n        atomic<segment_t*> my_segment;\n\n        //! embedded storage of segment pointers\n        segment_t my_storage[2];\n\n        // Methods\n\n        concurrent_vector_base() {\n            my_early_size = 0;\n            my_storage[0].array = NULL;\n            my_storage[1].array = NULL;\n            my_segment = my_storage;\n        }\n\n        //! An operation on an n-element array starting at begin.\n        typedef void(__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );\n\n        //! An operation on n-element destination array and n-element source array.\n        typedef void(__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );\n\n        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init );\n        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op1 init );\n        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init );\n        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );\n        void __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy, bool reclaim_storage );\n        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base& src, size_type element_size,\n                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );\nprivate:\n        //! Private functionality that does not cross DLL boundary.\n        class helper;\n        friend class helper;\n    };\n\n    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class vector_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n        // Ensure that Microsoft's internal template function _Val_type works correctly.\n        : public std::iterator<std::random_access_iterator_tag,Value>\n#endif /* defined(_WIN64) && defined(_MSC_VER) */\n    {\n        //! concurrent_vector over which we are iterating.\n        Container* my_vector;\n\n        //! Index into the vector\n        size_t my_index;\n\n        //! Caches my_vector-&gt;internal_subscript(my_index)\n        /** NULL if cached value is not available */\n        mutable Value* my_item;\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class internal::vector_iterator;\n\n#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)\n        template<typename T>\n        friend class tbb::concurrent_vector;\n#else\npublic: // workaround for MSVC\n#endif\n\n        vector_iterator( const Container& vector, size_t index ) :\n            my_vector(const_cast<Container*>(&vector)),\n            my_index(index),\n            my_item(NULL)\n        {}\n\n    public:\n        //! Default constructor\n        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}\n\n        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :\n            my_vector(other.my_vector),\n            my_index(other.my_index),\n            my_item(other.my_item)\n        {}\n\n        vector_iterator operator+( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index+offset );\n        }\n        friend vector_iterator operator+( ptrdiff_t offset, const vector_iterator& v ) {\n            return vector_iterator( *v.my_vector, v.my_index+offset );\n        }\n        vector_iterator operator+=( ptrdiff_t offset ) {\n            my_index+=offset;\n            my_item = NULL;\n            return *this;\n        }\n        vector_iterator operator-( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index-offset );\n        }\n        vector_iterator operator-=( ptrdiff_t offset ) {\n            my_index-=offset;\n            my_item = NULL;\n            return *this;\n        }\n        Value& operator*() const {\n            Value* item = my_item;\n            if( !item ) {\n                item = my_item = &my_vector->internal_subscript(my_index);\n            }\n            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), \"corrupt cache\" );\n            return *item;\n        }\n        Value& operator[]( ptrdiff_t k ) const {\n            return my_vector->internal_subscript(my_index+k);\n        }\n        Value* operator->() const {return &operator*();}\n\n        //! Pre increment\n        vector_iterator& operator++() {\n            size_t k = ++my_index;\n            if( my_item ) {\n                // Following test uses 2's-complement wizardry and fact that\n                // min_segment_size is a power of 2.\n                if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {\n                    // k is a power of two that is at least k-min_segment_size  \n                    my_item= NULL;\n                } else {\n                    ++my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Pre decrement\n        vector_iterator& operator--() {\n            __TBB_ASSERT( my_index>0, \"operator--() applied to iterator already at beginning of concurrent_vector\" );\n            size_t k = my_index--;\n            if( my_item ) {\n                // Following test uses 2's-complement wizardry and fact that\n                // min_segment_size is a power of 2.\n                if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {\n                    // k is a power of two that is at least k-min_segment_size  \n                    my_item= NULL;\n                } else {\n                    --my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Post increment\n        vector_iterator operator++(int) {\n            vector_iterator result = *this;\n            operator++();\n            return result;\n        }\n\n        //! Post decrement\n        vector_iterator operator--(int) {\n            vector_iterator result = *this;\n            operator--();\n            return result;\n        }\n\n        // STL support\n\n        typedef ptrdiff_t difference_type;\n        typedef Value value_type;\n        typedef Value* pointer;\n        typedef Value& reference;\n        typedef std::random_access_iterator_tag iterator_category;\n    };\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index==j.my_index;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i==j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index<j.my_index;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return j<i;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i<j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(j<i);\n    }\n\n    template<typename Container, typename T, typename U>\n    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);\n    }\n\n} // namespace internal\n//! @endcond\n\n//! Concurrent vector\n/** @ingroup containers */\ntemplate<typename T>\nclass concurrent_vector: private internal::concurrent_vector_base {\npublic:\n    using internal::concurrent_vector_base::size_type;\nprivate:\n    template<typename I>\n    class generic_range_type: public blocked_range<I> {\n    public:\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef I iterator;\n        typedef ptrdiff_t difference_type;\n        generic_range_type( I begin_, I end_, size_t grainsize_ ) : blocked_range<I>(begin_,end_,grainsize_) {}\n        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n    };\n\n    template<typename C, typename U>\n    friend class internal::vector_iterator;\npublic:\n    typedef T& reference;\n    typedef const T& const_reference;\n    typedef T value_type;\n    typedef ptrdiff_t difference_type;\n\n    //! Construct empty vector.\n    concurrent_vector() {}\n\n    //! Copy a vector.\n    concurrent_vector( const concurrent_vector& vector ) : internal::concurrent_vector_base()\n    { internal_copy(vector,sizeof(T),&copy_array); }\n\n    //! Assignment\n    concurrent_vector& operator=( const concurrent_vector& vector ) {\n        if( this!=&vector )\n            internal_assign(vector,sizeof(T),&destroy_array,&assign_array,&copy_array);\n        return *this;\n    }\n\n    //! Clear and destroy vector.\n    ~concurrent_vector() {internal_clear(&destroy_array,/*reclaim_storage=*/true);}\n\n    //------------------------------------------------------------------------\n    // Concurrent operations\n    //------------------------------------------------------------------------\n    //! Grow by \"delta\" elements.\n    /** Returns old size. */\n    size_type grow_by( size_type delta ) {\n        return delta ? internal_grow_by( delta, sizeof(T), &initialize_array ) : my_early_size.load();\n    }\n\n    //! Grow array until it has at least n elements.\n    void grow_to_at_least( size_type n ) {\n        if( my_early_size<n )\n            internal_grow_to_at_least( n, sizeof(T), &initialize_array );\n    };\n\n    //! Push item\n    size_type push_back( const_reference item ) {\n        size_type k;\n        new( internal_push_back(sizeof(T),k) ) T(item);\n        return k;\n    }\n\n    //! Get reference to element at given index.\n    /** This method is thread-safe for concurrent reads, and also while growing the vector,\n        as long as the calling thread has checked that index&lt;size(). */\n    reference operator[]( size_type index ) {\n        return internal_subscript(index);\n    }\n\n    //! Get const reference to element at given index.\n    const_reference operator[]( size_type index ) const {\n        return internal_subscript(index);\n    }\n\n    //------------------------------------------------------------------------\n    // STL support (iterators)\n    //------------------------------------------------------------------------\n    typedef internal::vector_iterator<concurrent_vector,T> iterator;\n    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;\n\n#if !defined(_MSC_VER) || _CPPLIB_VER>=300\n    // Assume ISO standard definition of std::reverse_iterator\n    typedef std::reverse_iterator<iterator> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#else\n    // Use non-standard std::reverse_iterator\n    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;\n#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */\n\n    // Forward sequence \n    iterator begin() {return iterator(*this,0);}\n    iterator end() {return iterator(*this,size());}\n    const_iterator begin() const {return const_iterator(*this,0);}\n    const_iterator end() const {return const_iterator(*this,size());}\n\n    // Reverse sequence\n    reverse_iterator rbegin() {return reverse_iterator(end());}\n    reverse_iterator rend() {return reverse_iterator(begin());}\n    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}\n    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}\n\n    //------------------------------------------------------------------------\n    // Support for TBB algorithms (ranges)\n    //------------------------------------------------------------------------\n    typedef generic_range_type<iterator> range_type;\n    typedef generic_range_type<const_iterator> const_range_type;\n\n    //! Get range to use with parallel algorithms\n    range_type range( size_t grainsize = 1 ) {\n        return range_type( begin(), end(), grainsize );\n    }\n\n    //! Get const range for iterating with parallel algorithms\n    const_range_type range( size_t grainsize = 1 ) const {\n        return const_range_type( begin(), end(), grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // Size and capacity\n    //------------------------------------------------------------------------\n    //! Return size of vector.\n    size_type size() const {return my_early_size;}\n\n    //! Return false if vector is not empty.\n    bool empty() const {return !my_early_size;}\n\n    //! Maximum size to which array can grow without allocating more memory.\n    size_type capacity() const {return internal_capacity();}\n\n    //! Allocate enough space to grow to size n without having to allocate more memory later.\n    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe.\n        The capacity afterwards may be bigger than the requested reservation. */\n    void reserve( size_type n ) {\n        if( n )\n            internal_reserve(n, sizeof(T), max_size());\n    }\n\n    //! Upper bound on argument to reserve.\n    size_type max_size() const {return (~size_t(0))/sizeof(T);}\n\n    //! Not thread safe\n    /** Does not change capacity. */\n    void clear() {internal_clear(&destroy_array,/*reclaim_storage=*/false);}\nprivate:\n    //! Get reference to element at given index.\n    T& internal_subscript( size_type index ) const;\n\n    //! Construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, size_type n );\n\n    //! Construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );\n\n    //! Assign n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );\n\n    //! Destroy n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );\n};\n\ntemplate<typename T>\nT& concurrent_vector<T>::internal_subscript( size_type index ) const {\n    __TBB_ASSERT( index<size(), \"index out of bounds\" );\n    segment_index_t k = segment_index_of( index );\n    size_type j = index-segment_base(k);\n    return static_cast<T*>(my_segment[k].array)[j];\n}\n\ntemplate<typename T>\nvoid concurrent_vector<T>::initialize_array( void* begin, size_type n ) {\n    T* array = static_cast<T*>(begin);\n    for( size_type j=0; j<n; ++j )\n        new( &array[j] ) T();\n}\n\ntemplate<typename T>\nvoid concurrent_vector<T>::copy_array( void* dst, const void* src, size_type n ) {\n    T* d = static_cast<T*>(dst);\n    const T* s = static_cast<const T*>(src);\n    for( size_type j=0; j<n; ++j )\n        new( &d[j] ) T(s[j]);\n}\n\ntemplate<typename T>\nvoid concurrent_vector<T>::assign_array( void* dst, const void* src, size_type n ) {\n    T* d = static_cast<T*>(dst);\n    const T* s = static_cast<const T*>(src);\n    for( size_type j=0; j<n; ++j )\n        d[j] = s[j];\n}\n\ntemplate<typename T>\nvoid concurrent_vector<T>::destroy_array( void* begin, size_type n ) {\n    T* array = static_cast<T*>(begin);\n    for( size_type j=n; j>0; --j )\n        array[j-1].~T();\n}\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_vector_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/spin_rw_mutex_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"spin_rw_mutex_v2.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"../tbb/itt_notify.h\"\n#include \"tbb/atomic.h\"\n\nnamespace tbb {\n\nusing namespace internal;\n\nstatic inline bool CAS(volatile uintptr_t &addr, uintptr_t newv, uintptr_t oldv) {\n    return as_atomic(addr).compare_and_swap(newv, oldv) == oldv;\n}\n\n//! Signal that write lock is released\nvoid spin_rw_mutex::internal_itt_releasing(spin_rw_mutex *mutex) {\n    __TBB_ASSERT_EX(mutex, NULL); // To prevent compiler warnings\n    ITT_NOTIFY(sync_releasing, mutex);\n}\n\n//! Acquire write (exclusive) lock on the given mutex.\nbool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)\n{\n    ITT_NOTIFY(sync_prepare, mutex);\n    for( atomic_backoff backoff;;backoff.pause() ) {\n        state_t s = mutex->state;\n        if( !(s & BUSY) ) { // no readers, no writers\n            if( CAS(mutex->state, WRITER, s) )\n                break; // successfully stored writer flag\n            backoff.reset(); // we could be very close to complete op.\n        } else if( !(s & WRITER_PENDING) ) { // no pending writers\n            __TBB_AtomicOR(&mutex->state, WRITER_PENDING);\n        }\n    }\n    ITT_NOTIFY(sync_acquired, mutex);\n    __TBB_ASSERT( (mutex->state & BUSY)==WRITER, \"invalid state of a write lock\" );\n    return false;\n}\n\n//! Release write lock on the given mutex\nvoid spin_rw_mutex::internal_release_writer(spin_rw_mutex *mutex) {\n    __TBB_ASSERT( (mutex->state & BUSY)==WRITER, \"invalid state of a write lock\" );\n    ITT_NOTIFY(sync_releasing, mutex);\n    mutex->state = 0; \n}\n\n//! Acquire read (shared) lock on the given mutex.\nvoid spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {\n    ITT_NOTIFY(sync_prepare, mutex);\n    for( atomic_backoff backoff;;backoff.pause() ) {\n        state_t s = mutex->state;\n        if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests\n            if( CAS(mutex->state, s+ONE_READER, s) )\n                break; // successfully stored increased number of readers\n            backoff.reset(); // we could be very close to complete op.\n        }\n    }\n    ITT_NOTIFY(sync_acquired, mutex);\n    __TBB_ASSERT( mutex->state & READERS, \"invalid state of a read lock: no readers\" );\n    __TBB_ASSERT( !(mutex->state & WRITER), \"invalid state of a read lock: active writer\" );\n}\n\n//! Upgrade reader to become a writer.\n/** Returns whether the upgrade happened without releasing and re-acquiring the lock */\nbool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {\n    state_t s = mutex->state;\n    __TBB_ASSERT( s & READERS, \"invalid state before upgrade: no readers \" );\n    __TBB_ASSERT( !(s & WRITER), \"invalid state before upgrade: active writer \" );\n    // check and set writer-pending flag\n    // required conditions: either no pending writers, or we are the only reader\n    // (with multiple readers and pending writer, another upgrade could have been requested)\n    while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {\n        if( CAS(mutex->state, s | WRITER_PENDING, s) )\n        {\n            ITT_NOTIFY(sync_prepare, mutex);\n            atomic_backoff backoff;\n            while( (mutex->state & READERS) != ONE_READER ) backoff.pause();\n            __TBB_ASSERT(mutex->state == (ONE_READER | WRITER_PENDING),\"invalid state when upgrading to writer\");\n            // both new readers and writers are blocked at this time\n            mutex->state = WRITER;\n            ITT_NOTIFY(sync_acquired, mutex);\n            __TBB_ASSERT( (mutex->state & BUSY) == WRITER, \"invalid state after upgrade\" );\n            return true; // successfully upgraded\n        } else {\n            s = mutex->state; // re-read\n        }\n    }\n    // slow reacquire\n    internal_release_reader(mutex);\n    return internal_acquire_writer(mutex); // always returns false\n}\n\n//! Downgrade writer to a reader\nvoid spin_rw_mutex::internal_downgrade(spin_rw_mutex *mutex) {\n    __TBB_ASSERT( (mutex->state & BUSY) == WRITER, \"invalid state before downgrade\" );\n    ITT_NOTIFY(sync_releasing, mutex);\n    mutex->state = ONE_READER;\n    __TBB_ASSERT( mutex->state & READERS, \"invalid state after downgrade: no readers\" );\n    __TBB_ASSERT( !(mutex->state & WRITER), \"invalid state after downgrade: active writer\" );\n}\n\n//! Release read lock on the given mutex\nvoid spin_rw_mutex::internal_release_reader(spin_rw_mutex *mutex)\n{\n    __TBB_ASSERT( mutex->state & READERS, \"invalid state of a read lock: no readers\" );\n    __TBB_ASSERT( !(mutex->state & WRITER), \"invalid state of a read lock: active writer\" );\n    ITT_NOTIFY(sync_releasing, mutex); // release reader\n    __TBB_FetchAndAddWrelease((volatile void *)&(mutex->state),-(intptr_t)ONE_READER);\n}\n\n//! Try to acquire write lock on the given mutex\nbool spin_rw_mutex::internal_try_acquire_writer( spin_rw_mutex * mutex )\n{\n    // for a writer: only possible to acquire if no active readers or writers\n    state_t s = mutex->state; // on IA-64 architecture, this volatile load has acquire semantic\n    if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101\n        if( CAS(mutex->state, WRITER, s) ) {\n            ITT_NOTIFY(sync_acquired, mutex);\n            return true; // successfully stored writer flag\n        }\n    return false;\n}\n\n//! Try to acquire read lock on the given mutex\nbool spin_rw_mutex::internal_try_acquire_reader( spin_rw_mutex * mutex )\n{\n    // for a reader: acquire if no active or waiting writers\n    state_t s = mutex->state;    // on IA-64 architecture, a load of volatile variable has acquire semantic\n    while( !(s & (WRITER|WRITER_PENDING)) ) // no writers\n        if( CAS(mutex->state, s+ONE_READER, s) ) {\n            ITT_NOTIFY(sync_acquired, mutex);\n            return true; // successfully stored increased number of readers\n        }\n    return false;\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/spin_rw_mutex_v2.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_spin_rw_mutex_H\n#define __TBB_spin_rw_mutex_H\n\n#include \"tbb/tbb_stddef.h\"\n\nnamespace tbb {\n\n//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference\n/** @ingroup synchronization */\nclass spin_rw_mutex {\n    //! @cond INTERNAL\n\n    //! Present so that 1.0 headers work with 1.1 dynamic library.\n    static void __TBB_EXPORTED_FUNC internal_itt_releasing(spin_rw_mutex *);\n\n    //! Internal acquire write lock.\n    static bool __TBB_EXPORTED_FUNC internal_acquire_writer(spin_rw_mutex *);\n\n    //! Out of line code for releasing a write lock.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    static void __TBB_EXPORTED_FUNC internal_release_writer(spin_rw_mutex *);\n\n    //! Internal acquire read lock.\n    static void __TBB_EXPORTED_FUNC internal_acquire_reader(spin_rw_mutex *);\n\n    //! Internal upgrade reader to become a writer.\n    static bool __TBB_EXPORTED_FUNC internal_upgrade(spin_rw_mutex *);\n\n    //! Out of line code for downgrading a writer to a reader.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    static void __TBB_EXPORTED_FUNC internal_downgrade(spin_rw_mutex *);\n\n    //! Internal release read lock.\n    static void __TBB_EXPORTED_FUNC internal_release_reader(spin_rw_mutex *);\n\n    //! Internal try_acquire write lock.\n    static bool __TBB_EXPORTED_FUNC internal_try_acquire_writer(spin_rw_mutex *);\n\n    //! Internal try_acquire read lock.\n    static bool __TBB_EXPORTED_FUNC internal_try_acquire_reader(spin_rw_mutex *);\n\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    spin_rw_mutex() : state(0) {}\n\n#if TBB_USE_ASSERT\n    //! Destructor asserts if the mutex is acquired, i.e. state is zero.\n    ~spin_rw_mutex() {\n        __TBB_ASSERT( !state, \"destruction of an acquired mutex\");\n    };\n#endif /* TBB_USE_ASSERT */\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : mutex(NULL) {}\n\n        //! Construct and acquire lock on given mutex.\n        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            mutex = &m;\n            is_writer = write;\n            if( write ) internal_acquire_writer(mutex);\n            else        internal_acquire_reader(mutex);\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( !is_writer, \"not a reader\" );\n            is_writer = true;\n            return internal_upgrade(mutex);\n        }\n\n        //! Release lock.\n        void release() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            spin_rw_mutex *m = mutex; \n            mutex = NULL;\n            if( is_writer ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n                internal_release_writer(m);\n#else\n                m->state = 0; \n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            } else {\n                internal_release_reader(m);\n            }\n        };\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( is_writer, \"not a writer\" );\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_downgrade(mutex);\n#else\n            mutex->state = 4; // Bit 2 - reader, 00..00100\n#endif\n            is_writer = false;\n            return true;\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            bool result;\n            is_writer = write; \n            result = write? internal_try_acquire_writer(&m)\n                          : internal_try_acquire_reader(&m);\n            if( result ) mutex = &m;\n            return result;\n        }\n\n    private:\n        //! The pointer to the current mutex that is held, or NULL if no mutex is held.\n        spin_rw_mutex* mutex;\n\n        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.\n        /** Not defined if not holding a lock. */\n        bool is_writer;\n    };\n\nprivate:\n    typedef uintptr_t state_t;\n    static const state_t WRITER = 1;\n    static const state_t WRITER_PENDING = 2;\n    static const state_t READERS = ~(WRITER | WRITER_PENDING);\n    static const state_t ONE_READER = 4;\n    static const state_t BUSY = WRITER | READERS;\n    /** Bit 0 = writer is holding lock\n        Bit 1 = request by a writer to acquire lock (hint to readers to wait)\n        Bit 2..N = number of readers holding lock */\n    volatile state_t state;\n};\n\n} // namespace tbb\n\n#endif /* __TBB_spin_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/task_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*  This compilation unit provides definition of task::destroy( task& )\n    that is binary compatible with TBB 2.x. In TBB 3.0, the method became\n    static, and its name decoration changed, though the definition remained.\n\n    The macro switch should be set prior to including task.h\n    or any TBB file that might bring task.h up.\n*/\n#define __TBB_DEPRECATED_TASK_INTERFACE 1\n#include \"tbb/task.h\"\n\nnamespace tbb {\n\nvoid task::destroy( task& victim ) {\n    // Forward to static version\n    task_base::destroy( victim );\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/test_concurrent_queue_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"old/concurrent_queue_v2.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n\n#include \"../test/harness_assert.h\"\n#include \"../test/harness.h\"\n\nstatic tbb::atomic<long> FooConstructed;\nstatic tbb::atomic<long> FooDestroyed;\n\nenum state_t{\n    LIVE=0x1234,\n    DEAD=0xDEAD\n};\n\nclass Foo {\n    state_t state;\npublic:\n    int thread_id;\n    int serial;\n    Foo() : state(LIVE) {\n        ++FooConstructed;\n    }\n    Foo( const Foo& item ) : state(LIVE) {\n        ASSERT( item.state==LIVE, NULL );\n        ++FooConstructed;\n        thread_id = item.thread_id;\n        serial = item.serial;\n    }\n    ~Foo() {\n        ASSERT( state==LIVE, NULL );\n        ++FooDestroyed;\n        state=DEAD;\n        thread_id=DEAD;\n        serial=DEAD;\n    }\n    void operator=( Foo& item ) {\n        ASSERT( item.state==LIVE, NULL );\n        ASSERT( state==LIVE, NULL );\n        thread_id = item.thread_id;\n        serial = item.serial;\n    }\n    bool is_const() {return false;}\n    bool is_const() const {return true;}\n};\n\nconst size_t MAXTHREAD = 256;\n\nstatic int Sum[MAXTHREAD];\n\n//! Count of various pop operations\n/** [0] = pop_if_present that failed\n    [1] = pop_if_present that succeeded\n    [2] = pop */\nstatic tbb::atomic<long> PopKind[3];\n\nconst int M = 10000;\n\nstruct Body: NoAssign {\n    tbb::concurrent_queue<Foo>* queue;\n    const int nthread;\n    Body( int nthread_ ) : nthread(nthread_) {}\n    void operator()( long thread_id ) const {\n        long pop_kind[3] = {0,0,0};\n        int serial[MAXTHREAD+1];\n        memset( serial, 0, nthread*sizeof(unsigned) );\n        ASSERT( thread_id<nthread, NULL );\n\n        long sum = 0;\n        for( long j=0; j<M; ++j ) {\n            Foo f;\n            f.thread_id = DEAD;\n            f.serial = DEAD;\n            bool prepopped = false;\n            if( j&1 ) {\n                prepopped = queue->pop_if_present(f);\n                ++pop_kind[prepopped];\n            }\n            Foo g;\n            g.thread_id = thread_id;\n            g.serial = j+1;\n            queue->push( g );\n            if( !prepopped ) {\n                queue->pop(f);\n                ++pop_kind[2];\n            }\n            ASSERT( f.thread_id<=nthread, NULL );\n            ASSERT( f.thread_id==nthread || serial[f.thread_id]<f.serial, \"partial order violation\" );\n            serial[f.thread_id] = f.serial;\n            sum += f.serial-1;\n        }\n        Sum[thread_id] = sum;\n        for( int k=0; k<3; ++k )\n            PopKind[k] += pop_kind[k];\n    }\n};\n\nvoid TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {\n    ASSERT( nthread>0, \"nthread must be positive\" );\n    if( prefill+1>=capacity )\n        return;\n    bool success = false;\n    for( int k=0; k<3; ++k )\n        PopKind[k] = 0;\n    for( int trial=0; !success; ++trial ) {\n        FooConstructed = 0;\n        FooDestroyed = 0;\n        Body body(nthread);\n        tbb::concurrent_queue<Foo> queue;\n        queue.set_capacity( capacity );\n        body.queue = &queue;\n        for( int i=0; i<prefill; ++i ) {\n            Foo f;\n            f.thread_id = nthread;\n            f.serial = 1+i;\n            queue.push(f);\n            ASSERT( queue.size()==i+1, NULL );\n            ASSERT( !queue.empty(), NULL );\n        }\n        tbb::tick_count t0 = tbb::tick_count::now();\n        NativeParallelFor( nthread, body );\n        tbb::tick_count t1 = tbb::tick_count::now();\n        double timing = (t1-t0).seconds();\n        if( Verbose )\n            printf(\"prefill=%d capacity=%d time = %g = %g nsec/operation\\n\", prefill, int(capacity), timing, timing/(2*M*nthread)*1.E9);\n        int sum = 0;\n        for( int k=0; k<nthread; ++k )\n            sum += Sum[k];\n        int expected = nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2;\n        for( int i=prefill; --i>=0; ) {\n            ASSERT( !queue.empty(), NULL );\n            Foo f;\n            queue.pop(f);\n            ASSERT( queue.size()==i, NULL );\n            sum += f.serial-1;\n        }\n        ASSERT( queue.empty(), NULL );\n        ASSERT( queue.size()==0, NULL );\n        if( sum!=expected )\n            printf(\"sum=%d expected=%d\\n\",sum,expected);\n        ASSERT( FooConstructed==FooDestroyed, NULL );\n\n        success = true;\n        if( nthread>1 && prefill==0 ) {\n            // Check that pop_if_present got sufficient exercise\n            for( int k=0; k<2; ++k ) {\n#if (_WIN32||_WIN64)\n                // The TBB library on Windows seems to have a tough time generating\n                // the desired interleavings for pop_if_present, so the code tries longer, and settles\n                // for fewer desired interleavings.\n                const int max_trial = 100;\n                const int min_requirement = 20;\n#else\n                const int min_requirement = 100;\n                const int max_trial = 20;\n#endif /* _WIN32||_WIN64 */\n                if( PopKind[k]<min_requirement ) {\n                    if( trial>=max_trial ) {\n                        if( Verbose )\n                            printf(\"Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). \"\n                                    \"This problem may merely be unlucky scheduling. \"\n                                    \"Investigate only if it happens repeatedly.\\n\",\n                                    nthread, long(PopKind[k]), k==0?\"failed\":\"succeeded\", max_trial, min_requirement);\n                        else\n                            printf(\"Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\\n\",\n                                   k==0?\"failed\":\"succeeded\", nthread );\n                    } else {\n                        success = false;\n                    }\n               }\n            }\n        }\n    }\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {\n    Iterator1 old_i; // assigned at first iteration below\n    for( int k=0; k<size; ++k ) {\n        ASSERT( i!=j, NULL );\n        ASSERT( !(i==j), NULL );\n        // Test \"->\"\n        ASSERT( k+1==i->serial, NULL );\n        if( k&1 ) {\n            // Test post-increment\n            Foo f = *old_i++;\n            ASSERT( k+1==f.serial, NULL );\n            // Test assignment\n            i = old_i;\n        } else {\n            // Test pre-increment\n            if( k<size-1 ) {\n                Foo f = *++i;\n                ASSERT( k+2==f.serial, NULL );\n            } else ++i;\n            // Test assignment\n            old_i = i;\n        }\n    }\n    ASSERT( !(i!=j), NULL );\n    ASSERT( i==j, NULL );\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAssignment( Iterator2 j ) {\n    Iterator1 i(j);\n    ASSERT( i==j, NULL );\n    ASSERT( !(i!=j), NULL );\n    Iterator1 k;\n    k = j;\n    ASSERT( k==j, NULL );\n    ASSERT( !(k!=j), NULL );\n}\n\n//! Test the iterators for concurrent_queue\nvoid TestIterator() {\n    tbb::concurrent_queue<Foo> queue;\n    tbb::concurrent_queue<Foo>& const_queue = queue;\n    for( int j=0; j<500; ++j ) {\n        TestIteratorAux(       queue.begin(),       queue.end(), j );\n        TestIteratorAux( const_queue.begin(), const_queue.end(), j );\n        TestIteratorAux( const_queue.begin(),       queue.end(), j );\n        TestIteratorAux(       queue.begin(), const_queue.end(), j );\n        Foo f;\n        f.serial = j+1;\n        queue.push(f);\n    }\n    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.begin() );\n    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>(       queue.begin() );\n    TestIteratorAssignment<tbb::concurrent_queue<Foo>::      iterator>(       queue.begin() );\n}\n\nvoid TestConcurrentQueueType() {\n    AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );\n    Foo f;\n    const Foo g;\n    tbb::concurrent_queue<Foo>::reference r = f;\n    ASSERT( &r==&f, NULL );\n    ASSERT( !r.is_const(), NULL );\n    tbb::concurrent_queue<Foo>::const_reference cr = g;\n    ASSERT( &cr==&g, NULL );\n    ASSERT( cr.is_const(), NULL );\n}\n\ntemplate<typename T>\nvoid TestEmptyQueue() {\n    const tbb::concurrent_queue<T> queue;\n    ASSERT( queue.size()==0, NULL );\n    ASSERT( queue.capacity()>0, NULL );\n    ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );\n}\n\nvoid TestFullQueue() {\n    for( int n=0; n<10; ++n ) {\n        FooConstructed = 0;\n        FooDestroyed = 0;\n        tbb::concurrent_queue<Foo> queue;\n        queue.set_capacity(n);\n        for( int i=0; i<=n; ++i ) {\n            Foo f;\n            f.serial = i;\n            bool result = queue.push_if_not_full( f );\n            ASSERT( result==(i<n), NULL );\n        }\n        for( int i=0; i<=n; ++i ) {\n            Foo f;\n            bool result = queue.pop_if_present( f );\n            ASSERT( result==(i<n), NULL );\n            ASSERT( !result || f.serial==i, NULL );\n        }\n        ASSERT( FooConstructed==FooDestroyed, NULL );\n    }\n}\n\ntemplate<typename T>\nstruct TestNegativeQueueBody: NoAssign {\n    tbb::concurrent_queue<T>& queue;\n    const int nthread;\n    TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}\n    void operator()( int k ) const {\n        if( k==0 ) {\n            int number_of_pops = nthread-1;\n            // Wait for all pops to pend.\n            while( queue.size()>-number_of_pops ) {\n                __TBB_Yield();\n            }\n            for( int i=0; ; ++i ) {\n                ASSERT( queue.size()==i-number_of_pops, NULL );\n                ASSERT( queue.empty()==(queue.size()<=0), NULL );\n                if( i==number_of_pops ) break;\n                // Satisfy another pop\n                queue.push( T() );\n            }\n        } else {\n            // Pop item from queue\n            T item;\n            queue.pop(item);\n        }\n    }\n};\n\n//! Test a queue with a negative size.\ntemplate<typename T>\nvoid TestNegativeQueue( int nthread ) {\n    tbb::concurrent_queue<T> queue;\n    NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );\n}\n\nint TestMain () {\n    TestEmptyQueue<char>();\n    TestEmptyQueue<Foo>();\n    TestFullQueue();\n    TestConcurrentQueueType();\n    TestIterator();\n\n    // Test concurrent operations\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        TestNegativeQueue<Foo>(nthread);\n        for( int prefill=0; prefill<64; prefill+=(1+prefill/3) ) {\n            TestPushPop(prefill,ptrdiff_t(-1),nthread);\n            TestPushPop(prefill,ptrdiff_t(1),nthread);\n            TestPushPop(prefill,ptrdiff_t(2),nthread);\n            TestPushPop(prefill,ptrdiff_t(10),nthread);\n            TestPushPop(prefill,ptrdiff_t(100),nthread);\n        }\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/test_concurrent_vector_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"concurrent_vector_v2.h\"\n#include <cstdio>\n#include <cstdlib>\n#include \"../test/harness_assert.h\"\n\ntbb::atomic<long> FooCount;\n\n//! Problem size\nconst size_t N = 500000;\n\nstruct Foo {\n    int my_bar;\npublic:\n    enum State {\n        DefaultInitialized=0x1234,\n        CopyInitialized=0x89ab,\n        Destroyed=0x5678\n    } state;\n    int& bar() {\n        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );\n        return my_bar;\n    }\n    int bar() const {\n        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );\n        return my_bar;\n    }\n    static const int initial_value_of_bar = 42;\n    Foo() {\n        state = DefaultInitialized;\n        ++FooCount;\n        my_bar = initial_value_of_bar;\n    }\n    Foo( const Foo& foo ) {\n        state = CopyInitialized;\n        ++FooCount;\n        my_bar = foo.my_bar;\n    }\n    ~Foo() {\n        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );\n        state = Destroyed;\n        my_bar = ~initial_value_of_bar;\n        --FooCount;\n    }\n    bool is_const() const {return true;}\n    bool is_const() {return false;}\n};\n\nclass FooWithAssign: public Foo {\npublic:\n    void operator=( const FooWithAssign& x ) {\n        ASSERT( x.state==DefaultInitialized||x.state==CopyInitialized, NULL );\n        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );\n        my_bar = x.my_bar;\n    }\n};\n\ninline void NextSize( int& s ) {\n    if( s<=32 ) ++s;\n    else s += s/10;\n}\n\nstatic void CheckVector( const tbb::concurrent_vector<Foo>& cv, size_t expected_size, size_t old_size ) {\n    ASSERT( cv.size()==expected_size, NULL );\n    ASSERT( cv.empty()==(expected_size==0), NULL );\n    for( int j=0; j<int(expected_size); ++j ) {\n        if( cv[j].bar()!=~j )\n            std::printf(\"ERROR on line %d for old_size=%ld expected_size=%ld j=%d\\n\",__LINE__,long(old_size),long(expected_size),j);\n    }\n}\n\nvoid TestResizeAndCopy() {\n    typedef tbb::concurrent_vector<Foo> vector_t;\n    for( int old_size=0; old_size<=128; NextSize( old_size ) ) {\n        for( int new_size=old_size; new_size<=128; NextSize( new_size ) ) {\n            long count = FooCount;\n            vector_t v;\n            ASSERT( count==FooCount, NULL );\n            v.grow_by(old_size);\n            ASSERT( count+old_size==FooCount, NULL );\n            for( int j=0; j<old_size; ++j )\n                v[j].bar() = j*j;\n            v.grow_to_at_least(new_size);\n            ASSERT( count+new_size==FooCount, NULL );\n            for( int j=0; j<new_size; ++j ) {\n                int expected = j<old_size ? j*j : Foo::initial_value_of_bar;\n                if( v[j].bar()!=expected )\n                    std::printf(\"ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\\n\",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);\n            }\n            ASSERT( v.size()==size_t(new_size), NULL );\n            for( int j=0; j<new_size; ++j ) {\n                v[j].bar() = ~j;\n            }\n            const vector_t& cv = v;\n            // Try copy constructor\n            vector_t copy_of_v(cv);\n            CheckVector(cv,new_size,old_size);\n            v.clear();\n            ASSERT( v.empty(), NULL );\n            CheckVector(copy_of_v,new_size,old_size);\n        }\n    }\n}\n\nvoid TestCapacity() {\n    for( size_t old_size=0; old_size<=10000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {\n        for( size_t new_size=0; new_size<=10000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {\n            long count = FooCount;\n            {\n                typedef tbb::concurrent_vector<Foo> vector_t;\n                vector_t v;\n                v.reserve( old_size );\n                ASSERT( v.capacity()>=old_size, NULL );\n                v.reserve( new_size );\n                ASSERT( v.capacity()>=old_size, NULL );\n                ASSERT( v.capacity()>=new_size, NULL );\n                for( size_t i=0; i<2*new_size; ++i ) {\n                    ASSERT( size_t(FooCount)==count+i, NULL );\n                    size_t j = v.grow_by(1);\n                    ASSERT( j==i, NULL );\n                }\n            }\n            ASSERT( FooCount==count, NULL );\n        }\n    }\n}\n\nstruct AssignElement {\n    typedef tbb::concurrent_vector<int>::range_type::iterator iterator;\n    iterator base;\n    void operator()( const tbb::concurrent_vector<int>::range_type& range ) const {\n        for( iterator i=range.begin(); i!=range.end(); ++i ) {\n            if( *i!=0 )\n                std::printf(\"ERROR for v[%ld]\\n\", long(i-base));\n            *i = int(i-base);\n        }\n    }\n    AssignElement( iterator base_ ) : base(base_) {}\n};\n\nstruct CheckElement {\n    typedef tbb::concurrent_vector<int>::const_range_type::iterator iterator;\n    iterator base;\n    void operator()( const tbb::concurrent_vector<int>::const_range_type& range ) const {\n        for( iterator i=range.begin(); i!=range.end(); ++i )\n            if( *i != int(i-base) )\n                std::printf(\"ERROR for v[%ld]\\n\", long(i-base));\n    }\n    CheckElement( iterator base_ ) : base(base_) {}\n};\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/parallel_for.h\"\n#include \"../test/harness.h\"\n\n//! Test parallel access by iterators\nvoid TestParallelFor( int nthread ) {\n    typedef tbb::concurrent_vector<int> vector_t;\n    vector_t v;\n    v.grow_to_at_least(N);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    if( Verbose )\n        std::printf(\"Calling parallel_for.h with %ld threads\\n\",long(nthread));\n    tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    const vector_t& u = v;\n    tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );\n    tbb::tick_count t2 = tbb::tick_count::now();\n    if( Verbose )\n        std::printf(\"Time for parallel_for.h: assign time = %8.5f, check time = %8.5f\\n\",\n               (t1-t0).seconds(),(t2-t1).seconds());\n    for( long i=0; size_t(i)<v.size(); ++i )\n        if( v[i]!=i )\n            std::printf(\"ERROR for v[%ld]\\n\", i);\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAssignment( Iterator2 j ) {\n    Iterator1 i(j);\n    ASSERT( i==j, NULL );\n    ASSERT( !(i!=j), NULL );\n    Iterator1 k;\n    k = j;\n    ASSERT( k==j, NULL );\n    ASSERT( !(k!=j), NULL );\n}\n\ntemplate<typename Iterator, typename T>\nvoid TestIteratorTraits() {\n    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );\n    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );\n    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );\n    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );\n    T x;\n    typename Iterator::reference xr = x;\n    typename Iterator::pointer xp = &x;\n    ASSERT( &xr==xp, NULL );\n}\n\ntemplate<typename Vector, typename Iterator>\nvoid CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {\n    typename Vector::const_reference pref = *cp;\n    if( pref.bar()!=i )\n        std::printf(\"ERROR for u[%ld] using const_iterator\\n\", long(i));\n    typename Vector::difference_type delta = cp-u.begin();\n    ASSERT( delta==i, NULL );\n    if( u[i].bar()!=i )\n        std::printf(\"ERROR for u[%ld] using subscripting\\n\", long(i));\n    ASSERT( u.begin()[i].bar()==i, NULL );\n}\n\ntemplate<typename Iterator1, typename Iterator2, typename V>\nvoid CheckIteratorComparison( V& u ) {\n    Iterator1 i = u.begin();\n    for( int i_count=0; i_count<100; ++i_count ) {\n        Iterator2 j = u.begin();\n        for( int j_count=0; j_count<100; ++j_count ) {\n            ASSERT( (i==j)==(i_count==j_count), NULL );\n            ASSERT( (i!=j)==(i_count!=j_count), NULL );\n            ASSERT( (i-j)==(i_count-j_count), NULL );\n            ASSERT( (i<j)==(i_count<j_count), NULL );\n            ASSERT( (i>j)==(i_count>j_count), NULL );\n            ASSERT( (i<=j)==(i_count<=j_count), NULL );\n            ASSERT( (i>=j)==(i_count>=j_count), NULL );\n            ++j;\n        }\n        ++i;\n    }\n}\n\n//! Test sequential iterators for vector type V.\n/** Also does timing. */\ntemplate<typename V>\nvoid TestSequentialFor() {\n    V v;\n    v.grow_by(N);\n\n    // Check iterator\n    tbb::tick_count t0 = tbb::tick_count::now();\n    typename V::iterator p = v.begin();\n    ASSERT( !(*p).is_const(), NULL );\n    ASSERT( !p->is_const(), NULL );\n    for( int i=0; size_t(i)<v.size(); ++i, ++p ) {\n        if( (*p).state!=Foo::DefaultInitialized )\n            std::printf(\"ERROR for v[%ld]\\n\", long(i));\n        typename V::reference pref = *p;\n        pref.bar() = i;\n        typename V::difference_type delta = p-v.begin();\n        ASSERT( delta==i, NULL );\n        ASSERT( -delta<=0, \"difference type not signed?\" );\n    }\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    // Check const_iterator going forwards\n    const V& u = v;\n    typename V::const_iterator cp = u.begin();\n    ASSERT( (*cp).is_const(), NULL );\n    ASSERT( cp->is_const(), NULL );\n    for( int i=0; size_t(i)<u.size(); ++i, ++cp ) {\n        CheckConstIterator(u,i,cp);\n    }\n    tbb::tick_count t2 = tbb::tick_count::now();\n    if( Verbose )\n        std::printf(\"Time for serial for:  assign time = %8.5f, check time = %8.5f\\n\",\n               (t1-t0).seconds(),(t2-t1).seconds());\n\n    // Now go backwards\n    cp = u.end();\n    for( int i=int(u.size()); i>0; ) {\n        --i;\n        --cp;\n        if( i>0 ) {\n            typename V::const_iterator cp_old = cp--;\n            int here = (*cp_old).bar();\n            ASSERT( here==u[i].bar(), NULL );\n            typename V::const_iterator cp_new = cp++;\n            int prev = (*cp_new).bar();\n            ASSERT( prev==u[i-1].bar(), NULL );\n        }\n        CheckConstIterator(u,i,cp);\n    }\n\n    // Now go forwards and backwards\n    cp = u.begin();\n    ptrdiff_t k = 0;\n    for( size_t i=0; i<u.size(); ++i ) {\n        CheckConstIterator(u,int(k),cp);\n        typename V::difference_type delta = i*3 % u.size();\n        if( 0<=k+delta && size_t(k+delta)<u.size() ) {\n            cp += delta;\n            k += delta;\n        }\n        delta = i*7 % u.size();\n        if( 0<=k-delta && size_t(k-delta)<u.size() ) {\n            if( i&1 )\n                cp -= delta;            // Test operator-=\n            else\n                cp = cp - delta;        // Test operator-\n            k -= delta;\n        }\n    }\n\n    for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )\n        for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {\n            ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );\n            ASSERT( (v.begin()+i)[j].bar()==i+j, NULL );\n            ASSERT( (i+u.begin())[j].bar()==i+j, NULL );\n            ASSERT( (i+v.begin())[j].bar()==i+j, NULL );\n        }\n\n    CheckIteratorComparison<typename V::iterator, typename V::iterator>(v);\n    CheckIteratorComparison<typename V::iterator, typename V::const_iterator>(v);\n    CheckIteratorComparison<typename V::const_iterator, typename V::iterator>(v);\n    CheckIteratorComparison<typename V::const_iterator, typename V::const_iterator>(v);\n\n    TestIteratorAssignment<typename V::const_iterator>( u.begin() );\n    TestIteratorAssignment<typename V::const_iterator>( v.begin() );\n    TestIteratorAssignment<typename V::iterator>( v.begin() );\n\n    // Check reverse_iterator\n    typename V::reverse_iterator rp = v.rbegin();\n    for( size_t i=v.size(); i>0; --i, ++rp ) {\n        typename V::reference pref = *rp;\n        ASSERT( size_t(pref.bar())==i-1, NULL );\n        ASSERT( rp!=v.rend(), NULL );\n    }\n    ASSERT( rp==v.rend(), NULL );\n\n    // Check const_reverse_iterator\n    typename V::const_reverse_iterator crp = u.rbegin();\n    for( size_t i=v.size(); i>0; --i, ++crp ) {\n        typename V::const_reference cpref = *crp;\n        ASSERT( size_t(cpref.bar())==i-1, NULL );\n        ASSERT( crp!=u.rend(), NULL );\n    }\n    ASSERT( crp==u.rend(), NULL );\n\n    TestIteratorAssignment<typename V::const_reverse_iterator>( u.rbegin() );\n    TestIteratorAssignment<typename V::reverse_iterator>( v.rbegin() );\n}\n\nstatic const size_t Modulus = 7;\n\ntypedef tbb::concurrent_vector<Foo> MyVector;\n\nclass GrowToAtLeast {\n    MyVector& my_vector;\npublic:\n    void operator()( const tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            size_t n = my_vector.size();\n            size_t k = n==0 ? 0 : i % (2*n+1);\n            my_vector.grow_to_at_least(k+1);\n            ASSERT( my_vector.size()>=k+1, NULL );\n        }\n    }\n    GrowToAtLeast( MyVector& vector ) : my_vector(vector) {}\n};\n\nvoid TestConcurrentGrowToAtLeast() {\n    MyVector v;\n    for( size_t s=1; s<1000; s*=10 ) {\n        tbb::parallel_for( tbb::blocked_range<size_t>(0,1000000,100), GrowToAtLeast(v) );\n    }\n}\n\n//! Test concurrent invocations of method concurrent_vector::grow_by\nclass GrowBy {\n    MyVector& my_vector;\npublic:\n    void operator()( const tbb::blocked_range<int>& range ) const {\n        for( int i=range.begin(); i!=range.end(); ++i ) {\n            if( i%3 ) {\n                Foo& element = my_vector[my_vector.grow_by(1)];\n                element.bar() = i;\n            } else {\n                Foo f;\n                f.bar() = i;\n                size_t k = my_vector.push_back( f );\n                ASSERT( my_vector[k].bar()==i, NULL );\n            }\n        }\n    }\n    GrowBy( MyVector& vector ) : my_vector(vector) {}\n};\n\n//! Test concurrent invocations of method concurrent_vector::grow_by\nvoid TestConcurrentGrowBy( int nthread ) {\n    int m = 100000;\n    MyVector v;\n    tbb::parallel_for( tbb::blocked_range<int>(0,m,1000), GrowBy(v) );\n    ASSERT( v.size()==size_t(m), NULL );\n\n    // Verify that v is a permutation of 0..m\n    int inversions = 0;\n    bool* found = new bool[m];\n    memset( found, 0, m );\n    for( int i=0; i<m; ++i ) {\n        int index = v[i].bar();\n        ASSERT( !found[index], NULL );\n        found[index] = true;\n        if( i>0 )\n            inversions += v[i].bar()<v[i-1].bar();\n    }\n    for( int i=0; i<m; ++i ) {\n        ASSERT( found[i], NULL );\n        ASSERT( nthread>1 || v[i].bar()==i, \"sequential execution is wrong\" );\n    }\n    delete[] found;\n    if( nthread>1 && inversions<m/10 )\n        std::printf(\"Warning: not much concurrency in TestConcurrentGrowBy\\n\");\n}\n\n//! Test the assignment operator\nvoid TestAssign() {\n    typedef tbb::concurrent_vector<FooWithAssign> vector_t;\n    for( int dst_size=1; dst_size<=128; NextSize( dst_size ) ) {\n        for( int src_size=2; src_size<=128; NextSize( src_size ) ) {\n            vector_t u;\n            u.grow_to_at_least(src_size);\n            for( int i=0; i<src_size; ++i )\n                u[i].bar() = i*i;\n            vector_t v;\n            v.grow_to_at_least(dst_size);\n            for( int i=0; i<dst_size; ++i )\n                v[i].bar() = -i;\n            v = u;\n            u.clear();\n            ASSERT( u.size()==0, NULL );\n            ASSERT( v.size()==size_t(src_size), NULL );\n            for( int i=0; i<src_size; ++i )\n                ASSERT( v[i].bar()==(i*i), NULL );\n        }\n    }\n}\n\n//------------------------------------------------------------------------\n// Regression test for problem where on oversubscription caused\n// concurrent_vector::grow_by to run very slowly (TR#196).\n//------------------------------------------------------------------------\n\n#include \"tbb/task_scheduler_init.h\"\n#include <math.h>\n\ntypedef unsigned long Number;\n\nstatic tbb::concurrent_vector<Number> Primes;\n\nclass FindPrimes {\n    bool is_prime( Number val ) const {\n        int limit, factor = 3;\n        if( val<5u )\n            return val==2;\n        else {\n            limit = long(sqrtf(float(val))+0.5f);\n            while( factor<=limit && val % factor )\n                ++factor;\n            return factor>limit;\n        }\n    }\npublic:\n    void operator()( const tbb::blocked_range<Number>& r ) const {\n        for( Number i=r.begin(); i!=r.end(); ++i ) {\n            if( i%2 && is_prime(i) ) {\n                Primes[Primes.grow_by(1)] = i;\n            }\n        }\n    }\n};\n\nstatic double TimeFindPrimes( int nthread ) {\n    Primes.clear();\n    tbb::task_scheduler_init init(nthread);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for( tbb::blocked_range<Number>(0,1000000,500), FindPrimes() );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    return (t1-t0).seconds();\n}\n\nstatic void TestFindPrimes() {\n    // Time fully subscribed run.\n    double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );\n\n    // Time parallel run that is very likely oversubscribed.\n    double t128 = TimeFindPrimes(128);\n\n    if( Verbose )\n        std::printf(\"TestFindPrimes: t2==%g t128=%g\\n\", t2, t128 );\n\n    // We allow the 128-thread run a little extra time to allow for thread overhead.\n    // Theoretically, following test will fail on machine with >128 processors.\n    // But that situation is not going to come up in the near future,\n    // and the generalization to fix the issue is not worth the trouble.\n    if( t128>1.10*t2 ) {\n        std::printf(\"Warning: grow_by is pathetically slow: t2==%g t128=%g\\n\", t2, t128);\n    }\n}\n\n//------------------------------------------------------------------------\n// Test compatibility with STL sort.\n//------------------------------------------------------------------------\n\n#include <algorithm>\n\nvoid TestSort() {\n    for( int n=1; n<100; n*=3 ) {\n        tbb::concurrent_vector<int> array;\n        array.grow_by( n );\n        for( int i=0; i<n; ++i )\n            array[i] = (i*7)%n;\n        std::sort( array.begin(), array.end() );\n        for( int i=0; i<n; ++i )\n            ASSERT( array[i]==i, NULL );\n    }\n}\n\n//------------------------------------------------------------------------\n\nint TestMain () {\n    if( MinThread<1 ) {\n        std::printf(\"ERROR: MinThread=%d, but must be at least 1\\n\",MinThread);\n    }\n\n    TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();\n    TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();\n    TestSequentialFor<tbb::concurrent_vector<Foo> > ();\n    TestResizeAndCopy();\n    TestAssign();\n    TestCapacity();\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        tbb::task_scheduler_init init( nthread );\n        TestParallelFor( nthread );\n        TestConcurrentGrowToAtLeast();\n        TestConcurrentGrowBy( nthread );\n    }\n    TestFindPrimes();\n    TestSort();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/test_mutex_v2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 1\n#define HARNESS_DEFAULT_MAX_THREADS 3\n\n//------------------------------------------------------------------------\n// Test TBB mutexes when used with parallel_for.h\n//\n// Usage: test_Mutex.exe [-v] nthread\n//\n// The -v option causes timing information to be printed.\n//\n// Compile with _OPENMP and -openmp\n//------------------------------------------------------------------------\n#include \"../test/harness_defs.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"../test/harness.h\"\n#include \"spin_rw_mutex_v2.h\"\n#include <cstdlib>\n#include <cstdio>\n\n// This test deliberately avoids a \"using tbb\" statement,\n// so that the error of putting types in the wrong namespace will be caught.\n\ntemplate<typename M>\nstruct Counter {\n    typedef M mutex_type;\n    M mutex;\n    volatile long value;\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename C>\nstruct AddOne: NoAssign {\n    C& counter;\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            if( i&1 ) {\n                // Try implicit acquire and explicit release\n                typename C::mutex_type::scoped_lock lock(counter.mutex);\n                counter.value = counter.value+1;\n                lock.release();\n            } else {\n                // Try explicit acquire and implicit release\n                typename C::mutex_type::scoped_lock lock;\n                lock.acquire(counter.mutex);\n                counter.value = counter.value+1;\n            }\n        }\n    }\n    AddOne( C& counter_ ) : counter(counter_) {}\n};\n\n//! Generic test of a TBB mutex type M.\n/** Does not test features specific to reader-writer locks. */\ntemplate<typename M>\nvoid Test( const char * name ) {\n    if( Verbose ) {\n        printf(\"%s time = \",name);\n        fflush(stdout);\n    }\n    Counter<M> counter;\n    counter.value = 0;\n    const int n = 100000;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M> >(counter));\n    tbb::tick_count t1 = tbb::tick_count::now();\n    if( Verbose )\n        printf(\"%g usec\\n\",(t1-t0).seconds());\n    if( counter.value!=n )\n        printf(\"ERROR for %s: counter.value=%ld\\n\",name,counter.value);\n}\n\ntemplate<typename M, size_t N>\nstruct Invariant {\n    typedef M mutex_type;\n    M mutex;\n    const char* mutex_name;\n    volatile long value[N];\n    Invariant( const char* mutex_name_ ) :\n        mutex_name(mutex_name_)\n    {\n        for( size_t k=0; k<N; ++k )\n            value[k] = 0;\n    }\n    void update() {\n        for( size_t k=0; k<N; ++k )\n            ++value[k];\n    }\n    bool value_is( long expected_value ) const {\n        long tmp;\n        for( size_t k=0; k<N; ++k )\n            if( (tmp=value[k])!=expected_value ) {\n                printf(\"ERROR: %ld!=%ld\\n\", tmp, expected_value);\n                return false;\n            }\n        return true;\n    }\n    bool is_okay() {\n        return value_is( value[0] );\n    }\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename I>\nstruct TwiddleInvariant: NoAssign {\n    I& invariant;\n    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}\n\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            //! Every 8th access is a write access\n            const bool write = (i%8)==7;\n            bool okay = true;\n            bool lock_kept = true;\n            if( (i/8)&1 ) {\n                // Try implicit acquire and explicit release\n                typename I::mutex_type::scoped_lock lock(invariant.mutex,write);\n                execute_aux(lock, i, write, okay, lock_kept);\n                lock.release();\n            } else {\n                // Try explicit acquire and implicit release\n                typename I::mutex_type::scoped_lock lock;\n                lock.acquire(invariant.mutex,write);\n                execute_aux(lock, i, write, okay, lock_kept);\n            }\n            if( !okay ) {\n                printf( \"ERROR for %s at %ld: %s %s %s %s\\n\",invariant.mutex_name, long(i),\n                        write     ? \"write,\"                  : \"read,\",\n                        write     ? (i%16==7?\"downgrade,\":\"\") : (i%8==3?\"upgrade,\":\"\"),\n                        lock_kept ? \"lock kept,\"              : \"lock not kept,\", // TODO: only if downgrade/upgrade\n                        (i/8)&1   ? \"impl/expl\"               : \"expl/impl\" );\n            }\n        }\n    }\nprivate:\n    void execute_aux(typename I::mutex_type::scoped_lock & lock, const size_t i, const bool write, bool & okay, bool & lock_kept) const {\n        if( write ) {\n            long my_value = invariant.value[0];\n            invariant.update();\n            if( i%16==7 ) {\n                lock_kept = lock.downgrade_to_reader();\n                if( !lock_kept )\n                    my_value = invariant.value[0] - 1;\n                okay = invariant.value_is(my_value+1);\n            }\n        } else {\n            okay = invariant.is_okay();\n            if( i%8==3 ) {\n                long my_value = invariant.value[0];\n                lock_kept = lock.upgrade_to_writer();\n                if( !lock_kept )\n                    my_value = invariant.value[0];\n                invariant.update();\n                okay = invariant.value_is(my_value+1);\n            }\n        }\n    }\n};\n\n/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */\ntemplate<typename M>\nvoid TestReaderWriterLock( const char * mutex_name ) {\n    if( Verbose ) {\n        printf(\"%s readers & writers time = \",mutex_name);\n        fflush(stdout);\n    }\n    Invariant<M,8> invariant(mutex_name);\n    const size_t n = 500000;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/100),TwiddleInvariant<Invariant<M,8> >(invariant));\n    tbb::tick_count t1 = tbb::tick_count::now();\n    // There is either a writer or a reader upgraded to a writer for each 4th iteration\n    long expected_value = n/4;\n    if( !invariant.value_is(expected_value) )\n        printf(\"ERROR for %s: final invariant value is wrong\\n\",mutex_name);\n    if( Verbose )\n        printf(\"%g usec\\n\", (t1-t0).seconds());\n}\n\n/** Test try_acquire functionality of a non-reenterable mutex */\ntemplate<typename M>\nvoid TestTryAcquire_OneThread( const char * mutex_name ) {\n    M tested_mutex;\n    typename M::scoped_lock lock1;\n    if( lock1.try_acquire(tested_mutex) )\n        lock1.release();\n    else\n        printf(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n    {\n        typename M::scoped_lock lock2(tested_mutex);\n        if( lock1.try_acquire(tested_mutex) )\n            printf(\"ERROR for %s: try_acquire succeeded though it should not\\n\", mutex_name);\n    }\n    if( lock1.try_acquire(tested_mutex) )\n        lock1.release();\n    else\n        printf(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n        if( Verbose )\n            printf( \"testing with %d workers\\n\", static_cast<int>(p) );\n        const int n = 3;\n        // Run each test several times.\n        for( int i=0; i<n; ++i ) {\n            Test<tbb::spin_rw_mutex>( \"Spin RW Mutex\" );\n            TestTryAcquire_OneThread<tbb::spin_rw_mutex>(\"Spin RW Mutex\"); // only tests try_acquire for writers\n            TestReaderWriterLock<tbb::spin_rw_mutex>( \"Spin RW Mutex\" );\n        }\n        if( Verbose )\n            printf( \"calling destructor for task_scheduler_init\\n\" );\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/old/test_task_scheduler_observer_v3.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//TODO: when removing TBB_PREVIEW_LOCAL_OBSERVER, change the header or defines here\n#include \"tbb/task_scheduler_observer.h\"\n\ntypedef uintptr_t FlagType;\nconst int MaxFlagIndex = sizeof(FlagType)*8-1;\n\nclass MyObserver: public tbb::task_scheduler_observer {\n    FlagType flags;\n    void on_scheduler_entry( bool is_worker ) __TBB_override;\n    void on_scheduler_exit( bool is_worker ) __TBB_override;\npublic:\n    MyObserver( FlagType flags_ ) : flags(flags_) {\n        observe(true);\n    }\n};\n\n#include \"harness_assert.h\"\n#include \"tbb/atomic.h\"\n\ntbb::atomic<int> EntryCount;\ntbb::atomic<int> ExitCount;\n\nstruct State {\n    FlagType MyFlags;\n    bool IsMaster;\n    State() : MyFlags(), IsMaster() {}\n};\n\n#include \"../tbb/tls.h\"\ntbb::internal::tls<State*> LocalState;\n\nvoid MyObserver::on_scheduler_entry( bool is_worker ) {\n    State& state = *LocalState;\n    ASSERT( is_worker==!state.IsMaster, NULL );\n    ++EntryCount;\n    state.MyFlags |= flags;\n}\n\nvoid MyObserver::on_scheduler_exit( bool is_worker ) {\n    State& state = *LocalState;\n    ASSERT( is_worker==!state.IsMaster, NULL );\n    ++ExitCount;\n    state.MyFlags &= ~flags;\n}\n\n#include \"tbb/task.h\"\n\nclass FibTask: public tbb::task {\n    const int n;\n    FlagType flags;\npublic:\n    FibTask( int n_, FlagType flags_ ) : n(n_), flags(flags_) {}\n    tbb::task* execute() __TBB_override {\n        ASSERT( !(~LocalState->MyFlags & flags), NULL );\n        if( n>=2 ) {\n            set_ref_count(3);\n            spawn(*new( allocate_child() ) FibTask(n-1,flags));\n            spawn_and_wait_for_all(*new( allocate_child() ) FibTask(n-2,flags));\n        }\n        return NULL;\n    }\n};\n\nvoid DoFib( FlagType flags ) {\n    tbb::task* t = new( tbb::task::allocate_root() ) FibTask(10,flags);\n    tbb::task::spawn_root_and_wait(*t);\n}\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness.h\"\n\nclass DoTest {\n    int nthread;\npublic:\n    DoTest( int n ) : nthread(n) {}\n    void operator()( int i ) const {\n        LocalState->IsMaster = true;\n        if( i==0 ) {   \n            tbb::task_scheduler_init init(nthread);\n            DoFib(0);\n        } else {\n            FlagType f = i<=MaxFlagIndex? 1<<i : 0;\n            MyObserver w(f);\n            tbb::task_scheduler_init init(nthread);\n            DoFib(f);\n        }\n    }\n};\n\nvoid TestObserver( int p, int q ) {\n    NativeParallelFor( p, DoTest(q) );\n}\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) \n        for( int q=MinThread; q<=MaxThread; ++q ) \n            TestObserver(p,q);\n    ASSERT( EntryCount>0, \"on_scheduler_entry not exercised\" );\n    ASSERT( ExitCount>0, \"on_scheduler_exit not exercised\" );\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/coarse_grained_raii_lru_cache.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef coarse_grained_raii_lru_cache_H\n#define coarse_grained_raii_lru_cache_H\n\n#include <map>\n#include <list>\n#include <utility>\n#include <algorithm>\n\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/tbb_stddef.h\"\ntemplate <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >\nclass coarse_grained_raii_lru_cache : tbb::internal::no_assign{\n    typedef value_functor_type value_function_type;\n\n    typedef std::size_t ref_counter_type;\n    struct map_value_type;\n    typedef std::map<key_type, map_value_type> map_storage_type;\n    typedef std::list<typename map_storage_type::iterator> lru_list_type;\n    struct map_value_type {\n        value_type my_value;\n        ref_counter_type my_ref_counter;\n        typename lru_list_type::iterator my_lru_list_iterator;\n        bool my_is_ready;\n\n        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)\n            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator)\n            ,my_is_ready(a_is_ready)\n        {}\n    };\n\n    class handle_object;\npublic:\n    typedef handle_object handle;\n\n    coarse_grained_raii_lru_cache(value_function_type f, std::size_t number_of_lru_history_items): my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items){}\n    handle_object operator[](key_type k){\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        bool is_new_value_needed = false;\n        typename map_storage_type::iterator it = my_map_storage.find(k);\n        if (it == my_map_storage.end()){\n            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));\n            is_new_value_needed = true;\n        }else {\n            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;\n            if (list_it!=my_lru_list.end()) {\n                my_lru_list.erase(list_it);\n                it->second.my_lru_list_iterator= my_lru_list.end();\n            }\n        }\n        typename map_storage_type::reference value_ref = *it;\n        //increase ref count\n        ++(value_ref.second.my_ref_counter);\n        if (is_new_value_needed){\n            lock.release();\n            value_ref.second.my_value = my_value_function(k);\n            __TBB_store_with_release(value_ref.second.my_is_ready, true);\n\n        }else{\n            if (!value_ref.second.my_is_ready){\n                lock.release();\n                tbb::internal::spin_wait_while_eq(value_ref.second.my_is_ready,false);\n            }\n        }\n        return handle_object(*this,(value_ref));\n    }\nprivate:\n    void signal_end_of_usage(typename map_storage_type::reference value_ref){\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        typename map_storage_type::iterator it = my_map_storage.find(value_ref.first);\n        __TBB_ASSERT(it!=my_map_storage.end(),\"cache should not return past-end iterators to outer world\");\n        __TBB_ASSERT(&(*it) == &value_ref,\"dangling reference has been returned to outside world? data race ?\");\n        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),\n                \"object in use should not be in list of unused objects \");\n        if (! --(it->second.my_ref_counter)){ //decrease ref count, and check if it was the last reference\n            if (my_lru_list.size()>=my_number_of_lru_history_items){\n                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;\n                for (size_t i=0; i<number_of_elements_to_evict; ++i){\n                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();\n                    my_lru_list.pop_back();\n                    my_map_storage.erase(it_to_evict);\n                }\n            }\n            my_lru_list.push_front(it);\n            it->second.my_lru_list_iterator = my_lru_list.begin();\n        }\n    }\nprivate:\n    value_function_type my_value_function;\n    std::size_t const my_number_of_lru_history_items;\n    map_storage_type my_map_storage;\n    lru_list_type my_lru_list;\n    tbb::spin_mutex my_mutex;\nprivate:\n    struct handle_move_t:tbb::internal::no_assign{\n        coarse_grained_raii_lru_cache & my_cache_ref;\n        typename map_storage_type::reference my_value_ref;\n        handle_move_t(coarse_grained_raii_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_value_ref(value_ref) {};\n    };\n    class handle_object {\n        coarse_grained_raii_lru_cache * my_cache_pointer;\n        typename map_storage_type::reference my_value_ref;\n    public:\n        handle_object(coarse_grained_raii_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_pointer(&cache_ref), my_value_ref(value_ref) {}\n        handle_object(handle_move_t m):my_cache_pointer(&m.my_cache_ref), my_value_ref(m.my_value_ref){}\n        operator handle_move_t(){ return move(*this);}\n        value_type& value(){return my_value_ref.second.my_value;}\n        ~handle_object(){\n            if (my_cache_pointer){\n                my_cache_pointer->signal_end_of_usage(my_value_ref);\n            }\n        }\n    private:\n        friend handle_move_t move(handle_object& h){\n            return handle_object::move(h);\n        }\n        static handle_move_t move(handle_object& h){\n            __TBB_ASSERT(h.my_cache_pointer,\"move from the same object twice ?\");\n            coarse_grained_raii_lru_cache * cache_pointer = NULL;\n            std::swap(cache_pointer,h.my_cache_pointer);\n            return handle_move_t(*cache_pointer,h.my_value_ref);\n        }\n    private:\n        void operator=(handle_object&);\n        handle_object(handle_object &);\n    };\n};\n#endif //coarse_grained_raii_lru_cache_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/cpq_pdes.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdlib>\n#include <cmath>\n#include <queue>\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#include \"../test/harness.h\"\n#include \"tbb/concurrent_priority_queue.h\"\n\n#pragma warning(disable: 4996)\n\n#define IMPL_STL 0\n#define IMPL_CPQ 1\n\nusing namespace tbb;\n\n//const int contention = 75; // degree contention.  100 = 0 us busy_wait, 50 = 50*contention_unit us\nconst double contention_unit = 0.025; // in microseconds (us)\nconst double throughput_window = 30; // in seconds\nconst int num_initial_events = 10000; // number of initial events in the queue\nconst int min_elapse = 20; // min contention_units to elapse between event spawns\nconst int max_elapse = 40; // max contention_units to elapse between event spawns\nconst int min_spawn = 0; // min number of events to spawn\nconst int max_spawn = 2; // max number of events to spawn\n\ntbb::atomic<unsigned int> operation_count;\ntbb::tick_count start;\nbool done;\n\nclass event {\npublic:\n    int timestamp;\n    int elapse;\n    int spawn;\n};\n\nclass timestamp_compare {\npublic:\n    bool operator()(event e1, event e2) {\n        return e2.timestamp<e1.timestamp;\n    }\n};\n\nspin_mutex *my_mutex;\nstd::priority_queue<event, std::vector<event>, timestamp_compare > *stl_cpq;\nconcurrent_priority_queue<event, timestamp_compare > *lfc_pq;\n\nunsigned int one_us_iters = 429; // default value\n\n// if user wants to calibrate to microseconds on particular machine, call this at beginning of program\n// sets one_us_iters to number of iters to busy_wait for approx. 1 us\nvoid calibrate_busy_wait() {\n    const unsigned niter = 1000000;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    for (volatile unsigned int i=0; i<niter; ++i) continue;\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;\n    printf(\"one_us_iters: %d\\n\", one_us_iters);\n}\n\nvoid busy_wait(double us)\n{\n    unsigned int iter = us*one_us_iters;\n    for (volatile unsigned int i=0; i<iter; ++i) continue;\n}\n\n\nvoid do_push(event elem, int nThr, int impl) {\n    if (impl == IMPL_STL) {\n        if (nThr == 1) {\n            stl_cpq->push(elem);\n        }\n        else {\n            tbb::spin_mutex::scoped_lock myLock(*my_mutex);\n            stl_cpq->push(elem);\n        }\n    }\n    else {\n        lfc_pq->push(elem);\n    }\n}\n\nbool do_pop(event& elem, int nThr, int impl) {\n    if (impl == IMPL_STL) {\n        if (nThr == 1) {\n            if (!stl_cpq->empty()) {\n                elem = stl_cpq->top();\n                stl_cpq->pop();\n                return true;\n            }\n        }\n        else {\n            tbb::spin_mutex::scoped_lock myLock(*my_mutex);\n            if (!stl_cpq->empty()) {\n                elem = stl_cpq->top();\n                stl_cpq->pop();\n                return true;\n            }\n        }\n    }\n    else {\n        if (lfc_pq->try_pop(elem)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nstruct TestPDESloadBody : NoAssign {\n    int nThread;\n    int implementation;\n\n    TestPDESloadBody(int nThread_, int implementation_) : \n        nThread(nThread_), implementation(implementation_) {}\n    \n    void operator()(const int threadID) const {\n        if (threadID == nThread) {\n            sleep(throughput_window);\n            done = true;\n        }\n        else {\n            event e, tmp;\n            unsigned int num_operations = 0;\n            for (;;) {\n                // pop an event\n                if (do_pop(e, nThread, implementation)) {\n                    num_operations++;\n                    // do the event\n                    busy_wait(e.elapse*contention_unit);\n                    while (e.spawn > 0) {\n                        tmp.spawn = ((e.spawn+1-min_spawn) % ((max_spawn-min_spawn)+1))+min_spawn;\n                        tmp.timestamp = e.timestamp + e.elapse;\n                        e.timestamp = tmp.timestamp;\n                        e.elapse = ((e.elapse+1-min_elapse) % ((max_elapse-min_elapse)+1))+min_elapse;\n                        tmp.elapse = e.elapse;\n                        do_push(tmp, nThread, implementation);\n                        num_operations++;\n                        e.spawn--;\n                        busy_wait(e.elapse*contention_unit);\n                        if (done) break;\n                    }\n                }\n                if (done) break;\n            }\n            operation_count += num_operations;\n        }\n    }\n};\n\nvoid preload_queue(int nThr, int impl) {\n    event an_event;\n    for (int i=0; i<num_initial_events; ++i) {\n        an_event.timestamp = 0;\n        an_event.elapse = (int)rand() % (max_elapse+1);\n        an_event.spawn = (int)rand() % (max_spawn+1);\n        do_push(an_event, nThr, impl);\n    }\n}\n\nvoid TestPDESload(int nThreads) {\n    REPORT(\"%4d\", nThreads);\n\n    operation_count = 0;\n    done = false;\n    stl_cpq = new std::priority_queue<event, std::vector<event>, timestamp_compare >;\n    preload_queue(nThreads, IMPL_STL);\n    TestPDESloadBody my_stl_test(nThreads, IMPL_STL);\n    start = tbb::tick_count::now();\n    NativeParallelFor(nThreads+1, my_stl_test);\n    delete stl_cpq;\n\n    REPORT(\" %10d\", operation_count/throughput_window);\n    \n    operation_count = 0;\n    done = false;\n    lfc_pq = new concurrent_priority_queue<event, timestamp_compare >;\n    preload_queue(nThreads, IMPL_CPQ);\n    TestPDESloadBody my_cpq_test(nThreads, IMPL_CPQ);\n    start = tbb::tick_count::now();\n    NativeParallelFor(nThreads+1, my_cpq_test);\n    delete lfc_pq;\n\n    REPORT(\" %10d\\n\", operation_count/throughput_window);\n}\n\nint TestMain() {\n    srand(42);\n    if (MinThread < 1)\n        MinThread = 1;\n    //calibrate_busy_wait();\n    cache_aligned_allocator<spin_mutex> my_mutex_allocator;\n    my_mutex = (spin_mutex *)my_mutex_allocator.allocate(1);\n\n    REPORT(\"#Thr \");\n    REPORT(\"STL        \");\n#ifdef LINEARIZABLE\n    REPORT(\"CPQ_L\\n\"); \n#else\n    REPORT(\"CPQ_N\\n\"); \n#endif\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        TestPDESload(p);\n    }\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/fibonacci_impl_tbb.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <cstdlib>\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task.h\"\n#include \"tbb/tick_count.h\"\n\nextern long CutOff;\n\nlong SerialFib( const long n ) {\n    if( n<2 )\n        return n;\n    else\n        return SerialFib(n-1)+SerialFib(n-2);\n}\n\nstruct FibContinuation: public tbb::task {\n    long* const sum;\n    long x, y;\n    FibContinuation( long* sum_ ) : sum(sum_) {}\n    tbb::task* execute() {\n        *sum = x+y;\n        return NULL;\n    }\n};\n\nstruct FibTask: public tbb::task {\n    long n;\n    long * sum;\n    FibTask( const long n_, long * const sum_ ) :\n        n(n_), sum(sum_)\n    {}\n    tbb::task* execute() {\n        if( n<CutOff ) {\n            *sum = SerialFib(n);\n            return NULL;\n        } else {\n            FibContinuation& c = \n                *new( allocate_continuation() ) FibContinuation(sum);\n            FibTask& b = *new( c.allocate_child() ) FibTask(n-1,&c.y);\n            recycle_as_child_of(c);\n            n -= 2;\n            sum = &c.x;\n            // Set ref_count to \"two children\".\n            c.set_ref_count(2);\n            c.spawn( b );\n            return this;\n        }\n    }\n};\n\nlong ParallelFib( const long n ) {\n    long sum = 0;\n    FibTask& a = *new(tbb::task::allocate_root()) FibTask(n,&sum);\n    tbb::task::spawn_root_and_wait(a);\n    return sum;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/perf.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"perf.h\"\n\n#include <cstdlib>\n#include <cmath>\n#include <vector>\n#include <algorithm>\n#include <cassert>\n\n#include \"tbb/tick_count.h\"\n\n#define HARNESS_CUSTOM_MAIN 1\n#include \"../src/test/harness.h\"\n#include \"../src/test/harness_barrier.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task.h\"\n#include \"tbb/atomic.h\"\n\n#if  __linux__ || __APPLE__ || __FreeBSD__ || __NetBSD__\n    #include <sys/resource.h>\n#endif\n\n__TBB_PERF_API int NumCpus = tbb::task_scheduler_init::default_num_threads(),\n                   NumThreads,\n                   MaxConcurrency;\n\nnamespace Perf {\n\nSessionSettings theSettings;\n\nnamespace internal {\n\n    typedef std::vector<duration_t> durations_t;\n\n    static uintptr_t NumRuns = 7;\n    static duration_t RunDuration = 0.01;\n\n    static const int RateFieldLen = 10;\n    static const int OvhdFieldLen = 12;\n\n    const char* TestNameColumnTitle = \"Test name\";\n    const char* WorkloadNameColumnTitle = \"Workload\";\n\n    size_t TitleFieldLen = 0;\n    size_t WorkloadFieldLen = 0;\n\n    int TotalConfigs = 0;\n    int MaxTbbMasters = 1;\n\n    //! Defines the mapping between threads and cores in the undersubscription mode\n    /** When adding new enumerator, insert it before amLast, and do not specify\n        its value explicitly. **/\n    enum AffinitizationMode {\n        amFirst = 0,\n        amDense = amFirst,\n        amSparse,\n        //! Used to track the number of supported affinitization modes\n        amLast\n    };\n\n    static const int NumAffinitizationModes = amLast - amFirst; \n\n    const char* AffinitizationModeNames[] = { \"dense\", \"sparse\" };\n\n    int NumActiveAffModes = 1;\n\n    //! Settings of a test run configuration\n    struct RunConfig {\n        int my_maxConcurrency;\n        int my_numThreads;      // For task scheduler tests this is number of workers + 1\n        int my_numMasters;      // Used for task scheduler tests only\n        int my_affinityMode;    // Used for task scheduler tests only\n        int my_workloadID;\n\n        int NumMasters () const {\n            return theSettings.my_opts & UseTaskScheduler ? my_numMasters : my_numThreads;\n        }\n    };\n\n    double StandardDeviation ( double avg, const durations_t& d ) {\n        double  std_dev = 0;\n        for ( uintptr_t i = 0; i < d.size(); ++i ) {\n            double  dev = fabs(d[i] - avg);\n            std_dev += dev * dev;\n        }\n        std_dev = sqrt(std_dev / d.size());\n        return std_dev / avg * 100;\n    }\n\n    void Statistics ( const durations_t& d, \n                      duration_t& avgTime, double& stdDev, \n                      duration_t& minTime, duration_t& maxTime )\n    {\n        minTime = maxTime = avgTime = d[0];\n        for ( size_t i = 1; i < d.size(); ++i ) {\n            avgTime += d[i];\n            if ( minTime > d[i] )\n                minTime = d[i];\n            else if ( maxTime < d[i] )\n                maxTime = d[i];\n        }\n        avgTime = avgTime / d.size();\n        stdDev = StandardDeviation( avgTime, d );\n    }\n\n    //! Timing data for the series of repeated runs and results of their statistical processing\n    struct TimingSeries {\n        //! Statistical timing series\n        durations_t my_durations;\n        \n        //! Average time obtained from my_durations data\n        duration_t  my_avgTime;\n\n        //! Minimal time obtained from my_durations data\n        duration_t  my_minTime;\n\n        //! Minimal time obtained from my_durations data\n        duration_t  my_maxTime;\n\n        //! Standard deviation of my_avgTime value (per cent)\n        double  my_stdDev;\n\n        TimingSeries ( uintptr_t nruns = NumRuns )\n            : my_durations(nruns), my_avgTime(0), my_minTime(0), my_maxTime(0)\n        {}\n\n        void CalculateStatistics () {\n            Statistics( my_durations, my_avgTime, my_stdDev, my_minTime, my_maxTime );\n        }\n    }; // struct TimingSeries\n\n    //! Settings and timing results for a test run configuration\n    struct RunResults {\n        //! Run configuration settings\n        RunConfig   my_config;\n        \n        //! Timing results for this run configuration\n        TimingSeries my_timing;\n    };\n\n    typedef std::vector<const char*>    names_t;\n    typedef std::vector<TimingSeries>   timings_t;\n    typedef std::vector<RunResults>     test_results_t;\n\n    enum TestMethods {\n        idRunSerial = 0x01,\n        idOnStart = 0x02,\n        idOnFinish = 0x04,\n        idPrePostProcess = idOnStart | idOnFinish\n    };\n\n    //! Set of flags identifying methods not overridden by the currently active test\n    /** Used as a scratch var. **/\n    uintptr_t g_absentMethods;\n\n    //! Test object and timing results for all of its configurations \n    struct TestResults {\n        //! Pointer to the test object interface\n        Test*           my_test;\n\n        //! Set of flags identifying optional methods overridden by my_test\n        /** A set of ORed TestMethods flags **/\n        uintptr_t       my_availableMethods;\n        \n        //! Vector of serial times for each workload supported by this test\n        /** Element index in the vector serves as a zero based workload ID. **/\n        timings_t       my_serialBaselines;\n        \n        //! Common baselines for both parallel and serial variants\n        /** Element index in the vector serves as a zero based workload ID. **/\n        timings_t       my_baselines;\n\n        //! Strings identifying workloads to be used in output\n        names_t         my_workloadNames;\n\n        //! Vector of timings for all run configurations of my_test\n        test_results_t  my_results;\n\n        const char*     my_testName;\n\n        mutable bool    my_hasOwnership;\n\n        TestResults ( Test* t, const char* className, bool takeOwnership )\n            : my_test(t), my_availableMethods(0), my_testName(className), my_hasOwnership(takeOwnership)\n        {}\n\n        TestResults ( const TestResults& tr )\n            : my_test(tr.my_test)\n            , my_availableMethods(0)\n            , my_testName(tr.my_testName)\n            , my_hasOwnership(tr.my_hasOwnership)\n        {\n            tr.my_hasOwnership = false;\n        }\n\n        ~TestResults () {\n            for ( size_t i = 0; i < my_workloadNames.size(); ++i )\n                delete my_workloadNames[i];\n            if ( my_hasOwnership )\n                delete my_test;\n        }\n    }; // struct TestResults\n\n    typedef std::vector<TestResults> session_t;\n\n    session_t theSession;\n\n    TimingSeries CalibrationTiming;\n\n    const uintptr_t CacheSize = 8*1024*1024;\n    volatile intptr_t W[CacheSize];\n\n    struct WiperBody {\n        void operator()( int ) const {\n            volatile intptr_t sink = 0;\n            for ( uintptr_t i = 0; i < CacheSize; ++i )\n                sink += W[i];\n        }\n    };\n\n    void TraceHistogram ( const durations_t& t, const char* histogramFileName ) {\n        FILE* f = histogramFileName ? fopen(histogramFileName, \"wt\") : stdout;\n        uintptr_t  n = t.size();\n        const uintptr_t num_buckets = 100;\n        double  min_val = *std::min_element(t.begin(), t.end()),\n                max_val = *std::max_element(t.begin(), t.end()),\n                bucket_size = (max_val - min_val) / num_buckets;\n        std::vector<uintptr_t> hist(num_buckets + 1, 0);\n        for ( uintptr_t i = 0; i < n; ++i )\n            ++hist[uintptr_t((t[i]-min_val)/bucket_size)];\n        ASSERT (hist[num_buckets] == 1, \"\");\n        ++hist[num_buckets - 1];\n        hist.resize(num_buckets);\n        fprintf (f, \"Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\\n\", (unsigned)n, min_val, max_val, (unsigned)num_buckets);\n        double bucket = min_val;\n        for ( uintptr_t i = 0; i < num_buckets; ++i, bucket+=bucket_size )\n            fprintf (f, \"%12g\\t%u\\n\", bucket, (unsigned)hist[i]);\n        fclose(f);\n    }\n\n#if _MSC_VER\n    typedef DWORD_PTR cpu_set_t;\n\n    class AffinityHelper {\n        static const unsigned MaxAffinitySetSize = sizeof(cpu_set_t) * 8;\n        static unsigned AffinitySetSize;\n\n        //! Mapping from a CPU index to a valid affinity cpu_mask\n        /** The first element is not used. **/\n        static cpu_set_t m_affinities[MaxAffinitySetSize + 1];\n\n        static cpu_set_t m_processMask;\n\n        class Initializer {\n        public:\n            Initializer () {\n                SYSTEM_INFO si;\n                GetNativeSystemInfo(&si);\n                ASSERT( si.dwNumberOfProcessors <= MaxAffinitySetSize, \"Too many CPUs\" );\n                AffinitySetSize = min (si.dwNumberOfProcessors, MaxAffinitySetSize);\n                cpu_set_t systemMask = 0;\n                GetProcessAffinityMask( GetCurrentProcess(), &m_processMask, &systemMask );\n                cpu_set_t cpu_mask = 1;\n                for ( DWORD i = 0; i < AffinitySetSize; ++i ) {\n                    while ( !(cpu_mask & m_processMask) && cpu_mask )\n                        cpu_mask <<= 1;\n                    ASSERT( cpu_mask != 0, \"Process affinity set is culled?\" );\n                    m_affinities[i] = cpu_mask;\n                    cpu_mask <<= 1;\n                }\n            }\n        }; // class AffinityHelper::Initializer\n\n        static Initializer m_initializer;\n\n    public:\n        static cpu_set_t CpuAffinity ( int cpuIndex ) {\n            return m_affinities[cpuIndex % AffinitySetSize];\n        }\n\n        static const cpu_set_t& ProcessMask () { return m_processMask; }\n    }; // class AffinityHelper\n\n    unsigned AffinityHelper::AffinitySetSize = 0;\n    cpu_set_t AffinityHelper::m_affinities[AffinityHelper::MaxAffinitySetSize + 1] = {0};\n    cpu_set_t AffinityHelper::m_processMask = 0;\n    AffinityHelper::Initializer AffinityHelper::m_initializer;\n\n    #define CPU_ZERO(cpu_mask)              (*cpu_mask = 0)\n    #define CPU_SET(cpu_idx, cpu_mask)      (*cpu_mask |= AffinityHelper::CpuAffinity(cpu_idx))\n    #define CPU_CLR(cpu_idx, cpu_mask)      (*cpu_mask &= ~AffinityHelper::CpuAffinity(cpu_idx))\n    #define CPU_ISSET(cpu_idx, cpu_mask)    ((*cpu_mask & AffinityHelper::CpuAffinity(cpu_idx)) != 0)\n\n#elif __linux__ /* end of _MSC_VER */\n\n    #include <unistd.h>\n    #include <sys/types.h>\n    #include <linux/unistd.h>\n\n    pid_t gettid() { return (pid_t)syscall(__NR_gettid); }\n\n    #define GET_MASK(cpu_set) (*(unsigned*)(void*)&cpu_set)\n    #define RES_STAT(res) (res != 0 ? \"failed\" : \"ok\")\n\n    class AffinityHelper {\n        static cpu_set_t m_processMask;\n\n        class Initializer {\n        public:\n            Initializer () {\n                CPU_ZERO (&m_processMask);\n                int res = sched_getaffinity( getpid(), sizeof(cpu_set_t), &m_processMask );\n                ASSERT ( res == 0, \"sched_getaffinity failed\" );\n            }\n        }; // class AffinityHelper::Initializer\n\n        static Initializer m_initializer;\n\n    public:\n        static const cpu_set_t& ProcessMask () { return m_processMask; }\n    }; // class AffinityHelper\n\n    cpu_set_t AffinityHelper::m_processMask;\n    AffinityHelper::Initializer AffinityHelper::m_initializer;\n#endif /* __linux__ */\n\n    bool PinTheThread ( int cpu_idx, tbb::atomic<int>& nThreads ) {\n    #if _MSC_VER || __linux__\n        cpu_set_t orig_mask, target_mask;\n        CPU_ZERO( &target_mask );\n        CPU_SET( cpu_idx, &target_mask );\n        ASSERT ( CPU_ISSET(cpu_idx, &target_mask), \"CPU_SET failed\" );\n    #endif\n    #if _MSC_VER\n        orig_mask = SetThreadAffinityMask( GetCurrentThread(), target_mask );\n        if ( !orig_mask )\n            return false;\n    #elif __linux__\n        CPU_ZERO( &orig_mask );\n        int res = sched_getaffinity( gettid(), sizeof(cpu_set_t), &orig_mask );\n        ASSERT ( res == 0, \"sched_getaffinity failed\" );\n        res = sched_setaffinity( gettid(), sizeof(cpu_set_t), &target_mask );\n        ASSERT ( res == 0, \"sched_setaffinity failed\" );\n    #endif /* _MSC_VER */\n        --nThreads;\n        while ( nThreads )\n            __TBB_Yield();\n    #if _MSC_VER\n        SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_HIGHEST);\n    #endif\n        return true;\n    }\n\n    class AffinitySetterTask : tbb::task {\n        static bool m_result;\n        static tbb::atomic<int> m_nThreads;\n        int m_idx;\n\n        tbb::task* execute () {\n            //TestAffinityOps();\n            m_result = PinTheThread( m_idx, m_nThreads );\n            return NULL;\n        }\n\n    public:\n        AffinitySetterTask ( int idx ) : m_idx(idx) {}\n\n        friend bool AffinitizeTBB ( int, int /*mode*/ );\n    };\n\n    bool AffinitySetterTask::m_result = true;\n    tbb::atomic<int> AffinitySetterTask::m_nThreads;\n\n    bool AffinitizeTBB ( int p, int affMode ) {\n    #if _MSC_VER\n        SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_HIGHEST);\n        SetPriorityClass (GetCurrentProcess(), HIGH_PRIORITY_CLASS);\n    #endif\n        AffinitySetterTask::m_result = true;\n        AffinitySetterTask::m_nThreads = p;\n        tbb::task_list  tl;\n        for ( int i = 0; i < p; ++i ) {\n            tbb::task &t = *new( tbb::task::allocate_root() ) AffinitySetterTask( affMode == amSparse ? i * NumCpus / p : i );\n            t.set_affinity( tbb::task::affinity_id(i + 1) );\n            tl.push_back( t );\n        }\n        tbb::task::spawn_root_and_wait(tl);\n        return AffinitySetterTask::m_result;\n    }\n\n    inline \n    void Affinitize ( int p, int affMode ) {\n        if ( !AffinitizeTBB (p, affMode) )\n            REPORT(\"Warning: Failed to set affinity for %d TBB threads\\n\", p);\n    }\n\n    class TbbWorkersTrapper {\n        tbb::atomic<int> my_refcount;\n        tbb::task *my_root;\n        tbb::task_group_context my_context;\n        Harness::SpinBarrier my_barrier;\n\n        friend class TrapperTask;\n\n        class TrapperTask : public tbb::task {\n            TbbWorkersTrapper& my_owner;\n\n            tbb::task* execute () {\n                my_owner.my_barrier.wait();\n                my_owner.my_root->wait_for_all();\n                my_owner.my_barrier.wait();\n                return NULL;\n            }\n        public:\n            TrapperTask ( TbbWorkersTrapper& owner ) : my_owner(owner) {}\n        };\n\n    public:\n        TbbWorkersTrapper ()\n            : my_context(tbb::task_group_context::bound, \n                         tbb::task_group_context::default_traits | tbb::task_group_context::concurrent_wait)\n        {\n            my_root = new ( tbb::task::allocate_root(my_context) ) tbb::empty_task;\n            my_root->set_ref_count(2);\n            my_barrier.initialize(NumThreads);\n            for ( int i = 1; i < NumThreads; ++i )\n                tbb::task::spawn( *new(tbb::task::allocate_root()) TrapperTask(*this) );\n            my_barrier.wait(); // Wait util all workers are ready\n        }\n\n        ~TbbWorkersTrapper () {\n            my_root->decrement_ref_count();\n            my_barrier.wait(); // Make sure no tasks are referencing us\n            tbb::task::destroy(*my_root);\n        }\n    }; // TbbWorkersTrapper\n\n\n#if __TBB_STATISTICS\n    static bool StatisticsMode = true;\n#else\n    static bool StatisticsMode = false;\n#endif\n\n//! Suppresses silly warning\ninline bool __TBB_bool( bool b ) { return b; }\n\n#define START_WORKERS(needScheduler, p, a, setWorkersAffinity, trapWorkers) \\\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);      \\\n    TbbWorkersTrapper *trapper = NULL;                                      \\\n    if ( theSettings.my_opts & UseTaskScheduler                   \\\n         && (needScheduler) && ((setWorkersAffinity) || (trapWorkers)) )    \\\n    {                                                                       \\\n        init.initialize( p );                                               \\\n        if ( __TBB_bool(setWorkersAffinity) )                               \\\n            Affinitize( p, a );                                             \\\n        if ( __TBB_bool(trapWorkers) )                                      \\\n            trapper = new TbbWorkersTrapper;                                \\\n    }\n\n#define STOP_WORKERS()  \\\n    if ( theSettings.my_opts & UseTaskScheduler && init.is_active() ) {     \\\n        if ( trapper )                                                      \\\n            delete trapper;                                                 \\\n        init.terminate();                                                   \\\n        /* Give asynchronous deinitialization time to complete */           \\\n        Harness::Sleep(50);                                                 \\\n    }\n\n    typedef void (Test::*RunMemFnPtr)( Test::ThreadInfo& );\n\n    TimingSeries *TlsTimings;\n    Harness::SpinBarrier  multipleMastersBarrier;\n\n    class TimingFunctor {\n        Test* my_test;\n        RunConfig *my_cfg;\n        RunMemFnPtr my_fnRun;\n        size_t my_numRuns;\n        size_t my_numRepeats;\n        uintptr_t my_availableMethods;\n\n        duration_t TimeSingleRun ( Test::ThreadInfo& ti ) const {\n            if ( my_availableMethods & idOnStart )\n                my_test->OnStart(ti);\n            // Warming run\n            (my_test->*my_fnRun)(ti);\n            multipleMastersBarrier.wait();\n            tbb::tick_count t0 = tbb::tick_count::now();\n            (my_test->*my_fnRun)(ti);\n            duration_t t = (tbb::tick_count::now() - t0).seconds();\n            if ( my_availableMethods & idOnFinish )\n                my_test->OnFinish(ti);\n            return t;\n        }\n\n    public:\n        TimingFunctor ( Test* test, RunConfig *cfg, RunMemFnPtr fnRun, \n                        size_t numRuns, size_t nRepeats, uintptr_t availableMethods )\n            : my_test(test), my_cfg(cfg), my_fnRun(fnRun)\n            , my_numRuns(numRuns), my_numRepeats(nRepeats), my_availableMethods(availableMethods)\n        {}\n\n        void operator()( int tid ) const {\n            Test::ThreadInfo ti = { tid, NULL };\n            durations_t &d = TlsTimings[tid].my_durations;\n            bool singleMaster = my_cfg->my_numMasters == 1;\n            START_WORKERS( (!singleMaster || (singleMaster && StatisticsMode)) && my_fnRun != &Test::RunSerial, \n                            my_cfg->my_numThreads, my_cfg->my_affinityMode, singleMaster, singleMaster );\n            for ( uintptr_t k = 0; k < my_numRuns; ++k )  {\n                if ( my_numRepeats > 1 ) {\n                    d[k] = 0;\n                    if ( my_availableMethods & idPrePostProcess ) {\n                        for ( uintptr_t i = 0; i < my_numRepeats; ++i )\n                            d[k] += TimeSingleRun(ti);\n                    }\n                    else {\n                        multipleMastersBarrier.wait();\n                        tbb::tick_count t0 = tbb::tick_count::now();\n                        for ( uintptr_t i = 0; i < my_numRepeats; ++i )\n                            (my_test->*my_fnRun)(ti);\n                        d[k] = (tbb::tick_count::now() - t0).seconds();\n                    }\n                    d[k] /= my_numRepeats;\n                }\n                else\n                    d[k] = TimeSingleRun(ti);\n            }\n            STOP_WORKERS();\n            TlsTimings[tid].CalculateStatistics();\n        }\n    }; // class TimingFunctor\n    \n    void DoTiming ( TestResults& tr, RunConfig &cfg, RunMemFnPtr fnRun, size_t nRepeats, TimingSeries& ts ) {\n        int numThreads = cfg.NumMasters();\n        size_t numRuns = ts.my_durations.size() / numThreads;\n        TimingFunctor body( tr.my_test, &cfg, fnRun, numRuns, nRepeats, tr.my_availableMethods );\n        multipleMastersBarrier.initialize(numThreads);\n        tr.my_test->SetWorkload(cfg.my_workloadID);\n        if ( numThreads == 1 ) {\n            TimingSeries *t = TlsTimings;\n            TlsTimings = &ts;\n            body(0);\n            TlsTimings = t;\n        }\n        else {\n            ts.my_durations.resize(numThreads * numRuns);\n            NativeParallelFor( numThreads, body );\n            for ( int i = 0, j = 0; i < numThreads; ++i ) {\n                durations_t &d = TlsTimings[i].my_durations;\n                for ( size_t k = 0; k < numRuns; ++k, ++j )\n                    ts.my_durations[j] = d[k];\n            }\n            ts.CalculateStatistics();\n        }\n    }\n\n    //! Runs the test function, does statistical processing, and, if title is nonzero, prints results.\n    /** If histogramFileName is a string, the histogram of individual runs is generated and stored\n        in a file with the given name. If it is NULL then the histogram is printed on the console.\n        By default no histogram is generated. \n        The histogram format is: \"rate bucket start\" \"number of tests in this bucket\". **/\n    void RunTestImpl ( TestResults& tr, RunConfig &cfg, RunMemFnPtr pfnTest, TimingSeries& ts ) {\n        // nRepeats is a number of repeated calls to the test function made as \n        // part of the same run. It is determined experimentally by the following \n        // calibration process so that the total run time was approx. RunDuration.\n        // This is helpful to increase the measurement precision in case of very \n        // short tests.\n        size_t nRepeats = 1;\n        // A minimal stats is enough when doing calibration\n        CalibrationTiming.my_durations.resize( (NumRuns < 4 ? NumRuns : 3) * cfg.NumMasters() );\n        // There's no need to be too precise when calculating nRepeats. And reasonably \n        // far extrapolation can speed up the process significantly.\n        for (;;) {\n            DoTiming( tr, cfg, pfnTest, nRepeats, CalibrationTiming );\n            if ( CalibrationTiming.my_avgTime * nRepeats > 1e-4 )\n                break;\n            nRepeats *= 2;\n        }\n        nRepeats *= (uintptr_t)ceil( RunDuration / (CalibrationTiming.my_avgTime * nRepeats) );\n\n        DoTiming(tr, cfg, pfnTest, nRepeats, ts);\n\n        // No histogram for baseline measurements\n        if ( pfnTest != &Test::RunSerial && pfnTest != &Test::Baseline ) {\n            const char* histogramName = theSettings.my_histogramName;\n            if ( histogramName != NoHistogram && tr.my_test->HistogramName() != DefaultHistogram )\n                histogramName = tr.my_test->HistogramName();\n            if ( histogramName != NoHistogram )\n                TraceHistogram( ts.my_durations, histogramName );\n        }\n    } // RunTestImpl\n\n    typedef void (*TestActionFn) ( TestResults&, int mastersRange, int w, int p, int m, int a, int& numTests );\n\n    int TestResultIndex ( int mastersRange, int w, int p, int m, int a ) {\n        return ((w * (MaxThread - MinThread + 1) + (p - MinThread)) * mastersRange + m) * NumActiveAffModes + a;\n    }\n\n    void RunTest ( TestResults& tr, int mastersRange, int w, int p, int m, int a, int& numTests ) {\n        size_t r = TestResultIndex(mastersRange, w, p, m, a);\n        ASSERT( r < tr.my_results.size(), NULL );\n        RunConfig &rc = tr.my_results[r].my_config;\n        rc.my_maxConcurrency = MaxConcurrency;\n        rc.my_numThreads = p;\n        rc.my_numMasters = m + tr.my_test->MinNumMasters();\n        rc.my_affinityMode = a;\n        rc.my_workloadID = w;\n        RunTestImpl( tr, rc, &Test::Run, tr.my_results[r].my_timing );\n        printf( \"Running tests: %04.1f%%\\r\",  ++numTests * 100. / TotalConfigs ); fflush(stdout);\n    }\n\n    void WalkTests ( TestActionFn fn, int& numTests, bool setAffinity, bool trapWorkers, bool multipleMasters ) {\n        for ( int p = MinThread; p <= MaxThread; ++p ) {\n            NumThreads = p;\n            MaxConcurrency = p < NumCpus ? p : NumCpus;\n            for ( int a = 0; a < NumActiveAffModes; ++a ) {\n                START_WORKERS( multipleMasters || !StatisticsMode, p, a, setAffinity, trapWorkers );\n                for ( size_t i = 0; i < theSession.size(); ++i ) {\n                    TestResults &tr = theSession[i];\n                    Test *t = tr.my_test;\n                    int mastersRange = t->MaxNumMasters() - t->MinNumMasters() + 1;\n                    int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t->NumWorkloads();\n                    for ( int w = 0; w < numWorkloads; ++w ) {\n                        if ( multipleMasters )\n                            for ( int m = 1; m < mastersRange; ++m )\n                                fn( tr, mastersRange, w, p, m, a, numTests );\n                        else\n                            fn( tr, mastersRange, w, p, 0, a, numTests );\n                    }\n                }\n                STOP_WORKERS();\n            }\n        }\n    }\n\n    void RunTests () {\n        int numTests = 0;\n        WalkTests( &RunTest, numTests, !StatisticsMode, !StatisticsMode, false );\n        if ( MaxTbbMasters > 1 )\n            WalkTests( &RunTest, numTests, true, false, true );\n    }\n\n    void InitTestData ( TestResults& tr, int mastersRange, int w, int p, int m, int a, int& ) {\n        size_t r = TestResultIndex(mastersRange, w, p, m, a);\n        ASSERT( r < tr.my_results.size(), NULL );\n        tr.my_results[r].my_timing.my_durations.resize( \n            (theSettings.my_opts & UseTaskScheduler ? tr.my_test->MinNumMasters() + m : p) * NumRuns );\n    }\n\n    char WorkloadName[MaxWorkloadNameLen + 1];\n\n    void PrepareTests () {\n        printf( \"Initializing...\\r\" );\n        NumActiveAffModes = theSettings.my_opts & UseAffinityModes ? NumAffinitizationModes : 1;\n        TotalConfigs = 0;\n        TitleFieldLen = strlen( TestNameColumnTitle );\n        WorkloadFieldLen = strlen( WorkloadNameColumnTitle );\n        int numThreads = MaxThread - MinThread + 1;\n        int numConfigsBase = numThreads * NumActiveAffModes;\n        int totalWorkloads = 0;\n        for ( size_t i = 0; i < theSession.size(); ++i ) {\n            TestResults &tr = theSession[i];\n            Test &t = *tr.my_test;\n            int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t.NumWorkloads();\n            int numConfigs = numConfigsBase * numWorkloads;\n            if ( t.MaxNumMasters() > 1 ) {\n                ASSERT( theSettings.my_opts & UseTaskScheduler, \"Multiple masters mode is only valid for task scheduler tests\" );\n                if ( MaxTbbMasters < t.MaxNumMasters() )\n                    MaxTbbMasters = t.MaxNumMasters();\n                numConfigs *= t.MaxNumMasters() - t.MinNumMasters() + 1;\n            }\n            totalWorkloads += numWorkloads;\n            TotalConfigs += numConfigs;\n\n            const char* testName = t.Name();\n            if ( testName )\n                tr.my_testName = testName;\n            ASSERT( tr.my_testName, \"Neither Test::Name() is implemented, nor RTTI is enabled\" );\n            TitleFieldLen = max( TitleFieldLen, strlen(tr.my_testName) );\n\n            tr.my_results.resize( numConfigs );\n            tr.my_serialBaselines.resize( numWorkloads );\n            tr.my_baselines.resize( numWorkloads );\n            tr.my_workloadNames.resize( numWorkloads );\n        }\n        TimingSeries tmpTiming;\n        TlsTimings = &tmpTiming; // All measurements are serial here\n        int n = 0;\n        for ( size_t i = 0; i < theSession.size(); ++i ) {\n            TestResults &tr = theSession[i];\n            Test &t = *tr.my_test;\n            // Detect which methods are overridden by the test implementation\n            g_absentMethods = 0;\n            Test::ThreadInfo ti = { 0 };\n            t.SetWorkload(0);\n            t.OnStart(ti);\n            t.RunSerial(ti);\n            t.OnFinish(ti);\n            if ( theSettings.my_opts & UseSerialBaseline && !(g_absentMethods & idRunSerial) )\n                tr.my_availableMethods |= idRunSerial;\n            if ( !(g_absentMethods & idOnStart) )\n                tr.my_availableMethods |= idOnStart;\n\n            RunConfig rc = { 1, 1, 1, 0, 0 };\n            int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t.NumWorkloads();\n            for ( int w = 0; w < numWorkloads; ++w ) {\n                WorkloadName[0] = 0;\n                t.SetWorkload(w);\n                if ( !WorkloadName[0] )\n                    sprintf( WorkloadName, \"%d\", w );\n                size_t len = strlen(WorkloadName);\n                tr.my_workloadNames[w] = new char[len + 1];\n                strcpy ( (char*)tr.my_workloadNames[w], WorkloadName );\n                WorkloadFieldLen = max( WorkloadFieldLen, len );\n\n                rc.my_workloadID = w;\n                if ( theSettings.my_opts & UseBaseline )\n                    RunTestImpl( tr, rc, &Test::Baseline, tr.my_baselines[w] );\n                if ( tr.my_availableMethods & idRunSerial )\n                    RunTestImpl( tr, rc, &Test::RunSerial, tr.my_serialBaselines[w] );\n                printf( \"Measuring baselines: %04.1f%%\\r\",  ++n * 100. / totalWorkloads ); fflush(stdout);\n            }\n        }\n        TlsTimings = new TimingSeries[MaxThread + MaxTbbMasters - 1];\n        if ( theSettings.my_opts & UseTaskScheduler ? MaxTbbMasters : MaxThread )\n            WalkTests( &InitTestData, n, false, false, theSettings.my_opts & UseTaskScheduler ? true : false );\n        CalibrationTiming.my_durations.reserve( MaxTbbMasters * 3 );\n        printf( \"                                                          \\r\");\n    }\n\n    FILE* ResFile = NULL;\n\n    void Report ( char const* fmt, ... ) {\n        va_list args;\n        if ( ResFile ) {\n            va_start( args, fmt );\n            vfprintf( ResFile, fmt, args );\n            va_end( args );\n        }\n        va_start( args, fmt );\n        vprintf( fmt, args );\n        va_end( args );\n    }\n\n    void PrintResults () {\n        if ( theSettings.my_resFile )\n            ResFile = fopen( theSettings.my_resFile, \"w\" );\n        Report( \"%-*s %-*s %s\", TitleFieldLen, \"Test-name\", WorkloadFieldLen, \"Workload\", \n                                MaxTbbMasters > 1 ? \"W    M    \" : \"T    \" );\n        if ( theSettings.my_opts & UseAffinityModes )\n            Report( \"Aff  \" );\n        Report( \"%-*s SD,%%  %-*s %-*s %-*s \",\n                RateFieldLen, \"Avg.time\", OvhdFieldLen, \"Par.ovhd,%\",\n                RateFieldLen, \"Min.time\", RateFieldLen, \"Max.time\" );\n        Report( \" | Repeats = %lu, CPUs %d\\n\", (unsigned long)NumRuns, NumCpus );\n        for ( size_t i = 0; i < theSession.size(); ++i ) {\n            TestResults &tr = theSession[i];\n            for ( size_t j = 0; j < tr.my_results.size(); ++j ) {\n                RunResults &rr = tr.my_results[j];\n                RunConfig &rc = rr.my_config;\n                int w = rc.my_workloadID;\n                TimingSeries &ts = rr.my_timing;\n                duration_t baselineTime = tr.my_baselines[w].my_avgTime,\n                           cleanTime = ts.my_avgTime - baselineTime;\n                Report( \"%-*s %-*s \", TitleFieldLen, tr.my_testName, WorkloadFieldLen, tr.my_workloadNames[w] );\n                if ( MaxTbbMasters > 1 )\n                    Report( \"%-4d %-4d \", rc.my_numThreads - 1, rc.my_numMasters );\n                else\n                    Report( \"%-4d \", rc.my_numThreads );\n                if ( theSettings.my_opts & UseAffinityModes )\n                    Report( \"%%-8s \", AffinitizationModeNames[rc.my_affinityMode] );\n                Report( \"%-*.2e %-6.1f \", RateFieldLen, cleanTime, ts.my_stdDev);\n                if ( tr.my_availableMethods & idRunSerial  ) {\n                    duration_t serialTime = (tr.my_serialBaselines[w].my_avgTime - baselineTime) / rc.my_maxConcurrency;\n                    Report( \"%-*.1f \", OvhdFieldLen, 100*(cleanTime - serialTime)/serialTime );\n                }\n                else\n                    Report( \"%*s%*s \", OvhdFieldLen/2, \"-\", OvhdFieldLen - OvhdFieldLen/2, \"\" );\n                Report( \"%-*.2e %-*.2e \", RateFieldLen, ts.my_minTime - baselineTime, RateFieldLen, ts.my_maxTime - baselineTime);\n                Report( \"\\n\" );\n            }\n        }\n        delete [] TlsTimings;\n        if ( ResFile )\n            fclose(ResFile);\n    }\n\n    __TBB_PERF_API void RegisterTest ( Test* t, const char* className, bool takeOwnership ) {\n        // Just collect test objects at this stage\n        theSession.push_back( TestResults(t, className, takeOwnership) );\n    }\n\n} // namespace internal\n\n__TBB_PERF_API void Test::Baseline ( ThreadInfo& ) {}\n\n__TBB_PERF_API void Test::RunSerial ( ThreadInfo& ) { internal::g_absentMethods |= internal::idRunSerial; }\n\n__TBB_PERF_API void Test::OnStart ( ThreadInfo& ) { internal::g_absentMethods |= internal::idOnStart; }\n\n__TBB_PERF_API void Test::OnFinish ( ThreadInfo& ) { internal::g_absentMethods |= internal::idOnFinish; }\n\n__TBB_PERF_API void WipeCaches () { NativeParallelFor( NumCpus, internal::WiperBody() ); }\n\n__TBB_PERF_API void EmptyFunc () {}\n__TBB_PERF_API void AnchorFunc ( void* ) {}\n__TBB_PERF_API void AnchorFunc2 ( void*, void* ) {}\n\n__TBB_PERF_API void SetWorkloadName( const char* format, ... ) {\n    internal::WorkloadName[MaxWorkloadNameLen] = 0;\n    va_list args;\n    va_start(args, format);\n    vsnprintf( internal::WorkloadName, MaxWorkloadNameLen, format, args );\n    va_end(args);\n}\n\n\n__TBB_PERF_API int TestMain( int argc, char* argv[], const SessionSettings* defaultSettings ) {\n#if _MSC_VER\n    HANDLE hMutex = CreateMutex( NULL, FALSE, \"Global\\\\TBB_OMP_PerfSession\" );\n    WaitForSingleObject( hMutex, INFINITE );\n#endif\n    MinThread = MaxThread = NumCpus;\n    if ( defaultSettings )\n        theSettings = *defaultSettings;\n    ParseCommandLine( argc, argv );  // May override data in theSettings\n\n    internal::PrepareTests ();\n    internal::RunTests ();\n    internal::PrintResults();\n    REPORT(\"\\n\");\n#if _MSC_VER\n    ReleaseMutex( hMutex );\n    CloseHandle( hMutex );\n#endif\n    return 0;\n}\n\n} // namespace Perf\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/perf.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __tbb_perf_h__\n#define __tbb_perf_h__\n\n#ifndef TBB_PERF_TYPEINFO\n#define TBB_PERF_TYPEINFO 1\n#endif\n\n#if TBB_PERF_TYPEINFO\n    #include <typeinfo>\n    #define __TBB_PERF_TEST_CLASS_NAME(T) typeid(T).name()\n#else /* !TBB_PERF_TYPEINFO */\n    #define __TBB_PERF_TEST_CLASS_NAME(T) NULL\n#endif /* !TBB_PERF_TYPEINFO */\n\n\n#include \"tbb/tick_count.h\"\n\n// TODO: Fix build scripts to provide more reliable build phase identification means\n#ifndef __TBB_PERF_API\n#if _USRDLL\n    #if _MSC_VER\n        #define __TBB_PERF_API __declspec(dllexport)\n    #else /* !_MSC_VER */\n        #define __TBB_PERF_API\n    #endif /* !_MSC_VER */\n#else /* !_USRDLL */\n    #if _MSC_VER\n        #define __TBB_PERF_API __declspec(dllimport)\n    #else /* !_MSC_VER */\n        #define __TBB_PERF_API\n    #endif /* !_MSC_VER */\n#endif /* !_USRDLL */\n#endif /* !__TBB_PERF_API */\n\n#if _WIN32||_WIN64\n\nnamespace Perf {\n    typedef unsigned __int64 tick_t;\n    #if defined(_M_X64)\n        inline tick_t rdtsc () { return __rdtsc(); }\n    #elif _M_IX86\n        inline tick_t rdtsc () { __asm { rdtsc } }\n    #else\n        #error Unsupported ISA\n    #endif\n} // namespace Perf\n\n#elif __linux__ || __APPLE__\n\n#include <stdint.h>\n\nnamespace Perf {\n    typedef uint64_t tick_t;\n    #if __x86_64__ || __i386__ || __i386\n        inline tick_t rdtsc () {\n            uint32_t lo, hi;\n            __asm__ __volatile__ ( \"rdtsc\" : \"=a\" (lo), \"=d\" (hi) );\n            return (tick_t)lo | ((tick_t)hi) << 32;\n        }\n    #else\n        #error Unsupported ISA\n    #endif\n} // namespace Perf\n\n#else\n    #error Unsupported OS\n#endif /* OS */\n\n__TBB_PERF_API extern int NumThreads,\n                          MaxConcurrency,\n                          NumCpus;\n\n// Functions and global variables provided by the benchmarking framework\nnamespace Perf {\n\ntypedef double duration_t;\n\nstatic const int MaxWorkloadNameLen = 64;\n\nstatic const char* NoHistogram = (char*)-1;\nstatic const char* DefaultHistogram = (char*)-2;\n\n__TBB_PERF_API void AnchorFunc ( void* );\n__TBB_PERF_API void AnchorFunc2 ( void*, void*  );\n\n//! Helper that can be used in the preprocess handler to clean caches\n/** Cleaning caches is necessary to obtain reproducible results when a test\n    accesses significant ranges of memory. **/\n__TBB_PERF_API void WipeCaches ();\n\n//! Specifies the name to be used to designate the current workload in output\n/** Should be used from Test::SetWorkload(). If necessary workload name will be\n    truncated to MaxWorkloadNameLen characters. **/\n__TBB_PERF_API void SetWorkloadName( const char* format, ... );\n\nclass __TBB_PERF_API Test {\npublic:\n    virtual ~Test () {}\n\n    //! Struct used by tests running in multiple masters mode\n    struct ThreadInfo {\n        //! Zero based thread ID\n        int     tid;\n        //! Pointer to test specific data\n        /** If used by the test, should be initialized by OnStartLocal(), and \n            finalized by OnFinishLocal(). **/\n        void*   data;\n    };\n\n    ////////////////////////////////////////////////////////////////////////////////\n    // Mandatory methods\n    \n    //! Returns the number of workloads supported\n    virtual int NumWorkloads () = 0;\n\n    //! Set workload info for the subsequent calls to Run() and RunSerial()\n    /** This method can use global helper function Perf::SetWorkloadName() in order\n        to specify the name of the current workload, which will be used in output\n        to designate the workload. If SetWorkloadName is not called, workloadIndex\n        will be used for this purpose.\n\n        When testing task scheduler, make sure that this method does not trigger\n        its automatic initialization. **/\n    virtual void SetWorkload ( int workloadIndex ) = 0;\n\n    //! Test implementation\n    /** Called by the timing framework several times in a loop to achieve approx.\n        RunDuration time, and this loop is timed NumRuns times to collect statistics.\n        Argument ti specifies information about the master thread calling this method. **/\n    virtual void Run ( ThreadInfo& ti ) = 0;\n\n    ////////////////////////////////////////////////////////////////////////////////\n    // Optional methods\n\n    //! Returns short title string to be used in the regular output to identify the test\n    /** Should uniquely identify the test among other ones in the given benchmark suite.\n        If not implemented, the test implementation class' RTTI name is used. **/\n    virtual const char* Name () { return NULL; };\n\n    //! Returns minimal number of master threads\n    /** Used for task scheduler tests only (when UseTbbScheduler option is specified \n        in session settings). **/\n    virtual int MinNumMasters () { return 1; }\n\n    //! Returns maximal number of master threads\n    /** Used for task scheduler tests only (when UseTbbScheduler option is specified \n        in session settings). **/\n    virtual int MaxNumMasters () { return 1; }\n\n    //! Executes serial workload equivalent to the one processed by Run()\n    /** Called by the timing framework several times in a loop to collect statistics. **/\n    virtual void RunSerial ( ThreadInfo& ti );\n\n    //! Invoked before each call to Run() \n    /** Can be used to preinitialize data necessary for the test, clean up \n        caches (see Perf::WipeCaches), etc.\n        In multiple masters mode this method is called on each thread. **/\n    virtual void OnStart ( ThreadInfo& ti );\n\n    //! Invoked after each call to Run() \n    /** Can be used to free resources allocated by OnStart().\n        Note that this method must work correctly independently of whether Run(),\n        RunSerial() or nothing is called between OnStart() and OnFinish().\n        In multiple masters mode this method is called on each thread. **/\n    virtual void OnFinish ( ThreadInfo& ti );\n\n    //! Functionality, the cost of which has to be factored out from timing results\n    /** Applies to both parallel and serial versions. **/\n    virtual void Baseline ( ThreadInfo& );\n\n    //! Returns description string to be used in the benchmark info/summary output\n    virtual const char* Description () { return NULL; }\n\n    //! Specifies if the histogram of individual run times in a series\n    /** If the method is not overridden, histogramName argument of TestMain is used. **/\n    virtual const char* HistogramName () { return DefaultHistogram; }\n}; // class Test\n\nnamespace internal {\n    __TBB_PERF_API void RegisterTest ( Test*, const char* testClassName, bool takeOwnership );\n}\n\ntemplate<class T>\nvoid RegisterTest() { internal::RegisterTest( new T, __TBB_PERF_TEST_CLASS_NAME(T), true ); }\n\ntemplate<class T>\nvoid RegisterTest( T& t ) { internal::RegisterTest( &t, __TBB_PERF_TEST_CLASS_NAME(T), false ); }\n\nenum SessionOptions {\n    //! Use Test::RunSerial if present\n    UseBaseline = 0x01,\n    UseSerialBaseline = 0x02,\n    UseBaselines = UseBaseline | UseSerialBaseline,\n    UseTaskScheduler = 0x10,\n    UseAffinityModes = 0x20,\n    UseSmallestWorkloadOnly = 0x40\n};\n\nstruct SessionSettings {\n    //! A combination of SessionOptions flags\n    uintptr_t my_opts;\n\n    //! Name of a file to store performance results\n    /** These results are duplicates of what is printed on the console. **/\n    const char* my_resFile;\n\n    //! Output destination for the histogram of individual run times in a series\n    /** If it is a string, the histogram is stored in a file with such name. \n        If it is NULL, the histogram is printed on the console. By default histograms\n        are suppressed.\n\n        The histogram is formatted as two column table: \n        \"time bucket start\" \"number of tests in this bucket\"\n        \n        When this setting enables histogram generation, an individual test \n        can override it by implementing HistogramName method. **/\n    const char* my_histogramName;\n\n    SessionSettings ( uintptr_t opts = 0, const char* resFile = NULL, const char* histogram = NoHistogram )\n        : my_opts(opts)\n        , my_resFile(resFile)\n        , my_histogramName(histogram)\n    {}\n}; // struct SessionSettings\n\n//! Benchmarking session entry point\n/** Executes all the individual tests registered previously by means of \n    RegisterTest<MycrotestImpl> **/\n__TBB_PERF_API int TestMain( int argc, char* argv[],\n                             const SessionSettings* defaultSettings = NULL );\n\n\n} // namespace Perf\n\n#endif /* __tbb_perf_h__ */\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/perf_sched.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"perf.h\"\n\n#include <cmath>\n\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n\n#define NUM_CHILD_TASKS     2096\n#define NUM_ROOT_TASKS      256\n\n#define N               100000000\n#define FINEST_GRAIN    10\n#define FINE_GRAIN      50\n#define MED_GRAIN       200\n#define COARSE_GRAIN    1000\n\n\ntypedef int count_t;\n\nconst count_t N_finest = (count_t)(N/log((double)N)/10);\nconst count_t N_fine = N_finest * 20;\nconst count_t N_med = N_fine * (count_t)log((double)N) / 5;\n\nclass StaticTaskHolder {\npublic:\n    tbb::task *my_leafTaskPtr;\n    StaticTaskHolder ();\n};\n\nstatic StaticTaskHolder s_tasks;\n\nstatic count_t NumIterations;\nstatic count_t NumLeafTasks;\nstatic count_t NumRootTasks;\n\nclass LeafTaskBase : public tbb::task {\npublic:\n    count_t my_ID;\n\n    LeafTaskBase () {}\n    LeafTaskBase ( count_t id ) : my_ID(id) {}\n};\n\nclass SimpleLeafTask : public LeafTaskBase {\n    task* execute () {\n        volatile count_t anchor = 0;\n        for ( count_t i=0; i < NumIterations; ++i )\n            anchor += i;\n        return NULL;\n    }\npublic:\n    SimpleLeafTask ( count_t ) {}\n};\n\nStaticTaskHolder::StaticTaskHolder () {\n    static SimpleLeafTask s_t1(0);\n    my_leafTaskPtr = &s_t1;\n}\n\nclass Test_SPMC : public Perf::Test {\nprotected:\n    static const int numWorkloads = 4;\n    static const count_t workloads[numWorkloads];\n\n    LeafTaskBase* my_leafTaskPtr;\n\n    const char* Name () { return \"SPMC\"; }\n\n    int NumWorkloads () { return numWorkloads; }\n\n    void SetWorkload ( int idx ) {\n        NumRootTasks = 1;\n        NumIterations = workloads[idx];\n        NumLeafTasks = NUM_CHILD_TASKS * NUM_ROOT_TASKS / (NumIterations > 1000 ? 32 : 8);\n        Perf::SetWorkloadName( \"%dx%d\", NumLeafTasks, NumIterations );\n    }\n    \n    void Run ( ThreadInfo& ) {\n        tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n        r.set_ref_count( NumLeafTasks + 1 );\n        for ( count_t i = 0; i < NumLeafTasks; ++i )\n            r.spawn( *new(r.allocate_child()) SimpleLeafTask(0) );\n        r.wait_for_all();\n        tbb::task::destroy(r);\n    }\n\n    void RunSerial ( ThreadInfo& ) {\n        const count_t n = NumLeafTasks * NumRootTasks;\n        for ( count_t i=0; i < n; ++i ) {\n            my_leafTaskPtr->my_ID = i;\n            my_leafTaskPtr->execute();\n        }\n    }\n\npublic:\n    Test_SPMC ( LeafTaskBase* leafTaskPtr = NULL ) {\n        static SimpleLeafTask t(0);\n        my_leafTaskPtr = leafTaskPtr ? leafTaskPtr : &t;\n    }\n}; // class Test_SPMC\n\nconst count_t Test_SPMC::workloads[Test_SPMC::numWorkloads] = { 1, 50, 500, 5000 };\n\ntemplate<class LeafTask>\nclass LeavesLauncherTask : public tbb::task {\n    count_t my_groupId;\n\n    task* execute () {\n        count_t base = my_groupId * NumLeafTasks;\n        set_ref_count(NumLeafTasks + 1);\n        for ( count_t i = 0; i < NumLeafTasks; ++i )\n            spawn( *new(allocate_child()) LeafTask(base + i) );\n        wait_for_all();\n        return NULL;\n    }\npublic:\n    LeavesLauncherTask ( count_t groupId ) : my_groupId(groupId) {}\n};\n\ntemplate<class LeafTask>\nvoid RunShallowTree () {\n    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    r.set_ref_count( NumRootTasks + 1 );\n    for ( count_t i = 0; i < NumRootTasks; ++i )\n        r.spawn( *new(r.allocate_child()) LeavesLauncherTask<LeafTask>(i) );\n    r.wait_for_all();\n    tbb::task::destroy(r);\n}\n\nclass Test_ShallowTree : public Test_SPMC {\n    const char* Name () { return \"ShallowTree\"; }\n\n    void SetWorkload ( int idx ) {\n        NumRootTasks = NUM_ROOT_TASKS;\n        NumIterations = workloads[idx];\n        NumLeafTasks = NumIterations > 200 ? NUM_CHILD_TASKS / 10 : \n                            (NumIterations > 50 ? NUM_CHILD_TASKS / 2 : NUM_CHILD_TASKS * 2);\n        Perf::SetWorkloadName( \"%dx%d\", NumRootTasks * NumLeafTasks, NumIterations );\n    }\n\n    void Run ( ThreadInfo& ) {\n        RunShallowTree<SimpleLeafTask>();\n    }\n}; // class Test_ShallowTree\n\nclass LeafTaskSkewed : public LeafTaskBase {\n    task* execute () {\n        volatile count_t anchor = 0;\n        double K = (double)NumRootTasks * NumLeafTasks;\n        count_t n = count_t(sqrt(double(my_ID)) * double(my_ID) * my_ID / (4 * K * K));\n        for ( count_t i = 0; i < n; ++i )\n            anchor += i;\n        return NULL;\n    }\npublic:\n    LeafTaskSkewed ( count_t id ) : LeafTaskBase(id) {}\n};\n\nclass Test_ShallowTree_Skewed : public Test_SPMC {\n    static LeafTaskSkewed SerialTaskBody;\n\n    const char* Name () { return \"ShallowTree_Skewed\"; }\n\n    int NumWorkloads () { return 1; }\n\n    void SetWorkload ( int ) {\n        NumRootTasks = NUM_ROOT_TASKS;\n        NumLeafTasks = NUM_CHILD_TASKS;\n        Perf::SetWorkloadName( \"%d\", NumRootTasks * NumLeafTasks );\n    }\n\n    void Run ( ThreadInfo& ) {\n        RunShallowTree<LeafTaskSkewed>();\n    }\n\npublic:\n    Test_ShallowTree_Skewed () : Test_SPMC(&SerialTaskBody) {}\n}; // class Test_ShallowTree_Skewed\n\nLeafTaskSkewed Test_ShallowTree_Skewed::SerialTaskBody(0);\n\ntypedef tbb::blocked_range<count_t> range_t;\n\nstatic count_t  IterRange = N,\n                IterGrain = 1;\n\nenum PartitionerType {\n    SimplePartitioner = 0,\n    AutoPartitioner = 1\n};\n\nclass Test_Algs : public Perf::Test {\nprotected:\n    static const int numWorkloads = 4;\n    static const count_t algRanges[numWorkloads];\n    static const count_t algGrains[numWorkloads];\n\n    tbb::simple_partitioner    my_simplePartitioner;\n    tbb::auto_partitioner    my_autoPartitioner;\n    PartitionerType my_partitionerType;\n\n    bool UseAutoPartitioner () const { return my_partitionerType == AutoPartitioner; }\n\n    int NumWorkloads () { return UseAutoPartitioner() ? 3 : numWorkloads; }\n\n    void SetWorkload ( int idx ) {\n        if ( UseAutoPartitioner() ) {\n            IterRange = algRanges[idx ? numWorkloads - 1 : 0];\n            IterGrain = idx > 1 ? algGrains[numWorkloads - 1] : 1;\n        }\n        else {\n            IterRange = algRanges[idx];\n            IterGrain = algGrains[idx];\n        }\n        Perf::SetWorkloadName( \"%d/%d\", IterRange, IterGrain );\n    }\npublic:\n    Test_Algs ( PartitionerType pt = SimplePartitioner ) : my_partitionerType(pt) {}\n}; // class Test_Algs\n\nconst count_t Test_Algs::algRanges[] = {N_finest, N_fine, N_med, N};\nconst count_t Test_Algs::algGrains[] = {1, FINE_GRAIN, MED_GRAIN, COARSE_GRAIN};\n\ntemplate <typename Body>\nclass Test_PFor : public Test_Algs {\nprotected:\n    void Run ( ThreadInfo& ) {\n        if ( UseAutoPartitioner() )\n            tbb::parallel_for( range_t(0, IterRange, IterGrain), Body(), my_autoPartitioner );\n        else\n            tbb::parallel_for( range_t(0, IterRange, IterGrain), Body(), my_simplePartitioner );\n    }\n\n    void RunSerial ( ThreadInfo& ) {\n        Body body;\n        body( range_t(0, IterRange, IterGrain) );\n    }\npublic:\n    Test_PFor ( PartitionerType pt = SimplePartitioner ) : Test_Algs(pt) {}\n}; // class Test_PFor\n\nclass SimpleForBody {\npublic:\n    void operator()( const range_t& r ) const {\n        count_t end = r.end();\n        volatile count_t anchor = 0;\n        for( count_t i = r.begin(); i < end; ++i )\n            anchor += i;\n    }\n}; // class SimpleForBody\n\nclass Test_PFor_Simple : public Test_PFor<SimpleForBody> {\nprotected:\n    const char* Name () { return UseAutoPartitioner() ? \"PFor-AP\" : \"PFor\"; }\npublic:\n    Test_PFor_Simple ( PartitionerType pt = SimplePartitioner ) : Test_PFor<SimpleForBody>(pt) {}\n}; // class Test_PFor_Simple\n\nclass SkewedForBody {\npublic:\n    void operator()( const range_t& r ) const {\n        count_t end = (r.end() + 1) * (r.end() + 1);\n        volatile count_t anchor = 0;\n        for( count_t i = r.begin() * r.begin(); i < end; ++i )\n            anchor += i;\n    }\n}; // class SkewedForBody\n\nclass Test_PFor_Skewed : public Test_PFor<SkewedForBody> {\n    typedef Test_PFor<SkewedForBody> base_type;\nprotected:\n    const char* Name () { return UseAutoPartitioner() ? \"PFor-Skewed-AP\" : \"PFor-Skewed\"; }\n\n    void SetWorkload ( int idx ) {\n        base_type::SetWorkload(idx);\n        IterRange = (count_t)(sqrt((double)IterRange) * sqrt(sqrt((double)N / IterRange)));\n        Perf::SetWorkloadName( \"%d\", IterRange );\n    }\n\npublic:\n    Test_PFor_Skewed ( PartitionerType pt = SimplePartitioner ) : base_type(pt) {}\n}; // class Test_PFor_Skewed\n\nPartitionerType gPartitionerType;\ncount_t NestingRange;\ncount_t NestingGrain;\n\nclass NestingForBody {\n    count_t my_depth;\n    tbb::simple_partitioner my_simplePartitioner;\n    tbb::auto_partitioner my_autoPartitioner;\n    \n    template<class Partitioner>\n    void run ( const range_t& r, Partitioner& p ) const {\n        count_t end = r.end();\n        if ( my_depth > 1 )\n            for ( count_t i = r.begin(); i < end; ++i )\n                tbb::parallel_for( range_t(0, IterRange, IterGrain), NestingForBody(my_depth - 1), p );\n        else\n            for ( count_t i = r.begin(); i < end; ++i )\n                tbb::parallel_for( range_t(0, IterRange, IterGrain), SimpleForBody(), p );\n    }\npublic:\n    void operator()( const range_t& r ) const {\n        if ( gPartitionerType == AutoPartitioner )\n            run( r, my_autoPartitioner );\n        else\n            run( r, my_simplePartitioner );\n    }\n    NestingForBody ( count_t depth = 1 ) : my_depth(depth) {}\n}; // class NestingForBody\n\nenum NestingType {\n    HollowNesting,\n    ShallowNesting,\n    DeepNesting\n};\n\nclass Test_PFor_Nested : public Test_Algs {\n    typedef Test_Algs base_type;\n\n    NestingType my_nestingType;\n    count_t my_nestingDepth;\n\nprotected:\n    const char* Name () {\n        static const char* names[] = { \"PFor-HollowNested\", \"PFor-HollowNested-AP\",\n                                       \"PFor-ShallowNested\", \"PFor-ShallowNested-AP\",\n                                       \"PFor-DeeplyNested\", \"PFor-DeeplyNested-AP\" };\n        return names[my_nestingType * 2 + my_partitionerType];\n    }\n\n    int NumWorkloads () { return my_nestingType == ShallowNesting ? (UseAutoPartitioner() ? 3 : 2) : 1; }\n\n    void SetWorkload ( int idx ) {\n        gPartitionerType = my_partitionerType;\n        if ( my_nestingType == DeepNesting ) {\n            NestingRange = 1024;\n            IterGrain = NestingGrain = 1;\n            IterRange = 4;\n            my_nestingDepth = 4;\n        }\n        else if ( my_nestingType == ShallowNesting ) {\n            int i = idx ? numWorkloads - 1 : 0;\n            count_t baseRange = algRanges[i];\n            count_t baseGrain = !UseAutoPartitioner() || idx > 1 ? algGrains[i] : 1;\n            NestingRange = IterRange = (count_t)sqrt((double)baseRange);\n            NestingGrain = IterGrain = (count_t)sqrt((double)baseGrain);\n        }\n        else {\n            NestingRange = N / 100;\n            NestingGrain = COARSE_GRAIN / 10;\n            IterRange = 2;\n            IterGrain = 1;\n        }\n        Perf::SetWorkloadName( \"%d/%d\", NestingRange, NestingGrain );\n    }\n\n    void Run ( ThreadInfo& ) {\n        if ( UseAutoPartitioner() )\n            tbb::parallel_for( range_t(0, NestingRange, NestingGrain), NestingForBody(my_nestingDepth), my_autoPartitioner );\n        else\n            tbb::parallel_for( range_t(0, NestingRange, NestingGrain), NestingForBody(my_nestingDepth), my_simplePartitioner );\n    }\n\n    void RunSerial ( ThreadInfo& ) {\n        for ( int i = 0; i < NestingRange; ++i ) {\n            SimpleForBody body;\n            body( range_t(0, IterRange, IterGrain) );\n        }\n    }\npublic:\n    Test_PFor_Nested ( NestingType nt, PartitionerType pt ) : base_type(pt), my_nestingType(nt), my_nestingDepth(1) {}\n}; // class Test_PFor_Nested\n\nclass SimpleReduceBody {\npublic:\n    count_t my_sum;\n    SimpleReduceBody () : my_sum(0) {}\n    SimpleReduceBody ( SimpleReduceBody&, tbb::split ) : my_sum(0) {}\n    void join( SimpleReduceBody& rhs ) { my_sum += rhs.my_sum;}\n    void operator()( const range_t& r ) {\n        count_t end = r.end();\n        volatile count_t anchor = 0;\n        for( count_t i = r.begin(); i < end; ++i )\n            anchor += i;\n        my_sum = anchor;\n    }\n}; // class SimpleReduceBody\n\nclass Test_PReduce : public Test_Algs {\nprotected:\n    const char* Name () { return UseAutoPartitioner() ? \"PReduce-AP\" : \"PReduce\"; }\n\n    void Run ( ThreadInfo& ) {\n        SimpleReduceBody body;\n        if ( UseAutoPartitioner() )\n            tbb::parallel_reduce( range_t(0, IterRange, IterGrain), body, my_autoPartitioner );\n        else\n            tbb::parallel_reduce( range_t(0, IterRange, IterGrain), body, my_simplePartitioner );\n    }\n\n    void RunSerial ( ThreadInfo& ) {\n        SimpleReduceBody body;\n        body( range_t(0, IterRange, IterGrain) );\n    }\npublic:\n    Test_PReduce ( PartitionerType pt = SimplePartitioner ) : Test_Algs(pt) {}\n}; // class Test_PReduce\n\nint main( int argc, char* argv[] ) {\n    Perf::SessionSettings opts (Perf::UseTaskScheduler | Perf::UseSerialBaseline, \"perf_sched.txt\");   // Perf::UseBaseline, Perf::UseSmallestWorkloadOnly\n    Perf::RegisterTest<Test_SPMC>();\n    Perf::RegisterTest<Test_ShallowTree>();\n    Perf::RegisterTest<Test_ShallowTree_Skewed>();\n    Test_PFor_Simple pf_sp(SimplePartitioner), pf_ap(AutoPartitioner);\n    Perf::RegisterTest(pf_sp);\n    Perf::RegisterTest(pf_ap);\n    Test_PReduce pr_sp(SimplePartitioner), pr_ap(AutoPartitioner);\n    Perf::RegisterTest(pr_sp);\n    Perf::RegisterTest(pr_ap);\n    Test_PFor_Skewed pf_s_sp(SimplePartitioner), pf_s_ap(AutoPartitioner);\n    Perf::RegisterTest(pf_s_sp);\n    Perf::RegisterTest(pf_s_ap);\n    Test_PFor_Nested pf_hn_sp(HollowNesting, SimplePartitioner), pf_hn_ap(HollowNesting, AutoPartitioner),\n                     pf_sn_sp(ShallowNesting, SimplePartitioner), pf_sn_ap(ShallowNesting, AutoPartitioner),\n                     pf_dn_sp(DeepNesting, SimplePartitioner), pf_dn_ap(DeepNesting, AutoPartitioner);\n    Perf::RegisterTest(pf_hn_sp);\n    Perf::RegisterTest(pf_hn_ap);\n    Perf::RegisterTest(pf_sn_sp);\n    Perf::RegisterTest(pf_sn_ap);\n    Perf::RegisterTest(pf_dn_sp);\n    Perf::RegisterTest(pf_dn_ap);\n    return Perf::TestMain(argc, argv, &opts);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/run_statistics.sh",
    "content": "#!/bin/bash\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nexport LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH\n#setting output format .csv, 'pivot' - is pivot table mode, ++ means append\nexport STAT_FORMAT=pivot-csv++\n#check existing files because of apend mode\nls *.csv\nrm -i *.csv\n#setting a delimiter in txt or csv file\n#export STAT_DELIMITER=,\nexport STAT_RUNINFO1=Host=`hostname -s`\n#append a suffix after the filename\n#export STAT_SUFFIX=$STAT_RUNINFO1\nfor ((i=1;i<=${repeat:=100};++i)); do echo $i of $repeat: && STAT_RUNINFO2=Run=$i $* || break; done\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/statistics.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"statistics.h\"\n#include \"statistics_xml.h\"\n\n#define COUNT_PARAMETERS 3\n\n#ifdef _MSC_VER\n#define snprintf _snprintf\n#endif\n\nvoid GetTime(char* buff,int size_buff) \n{\n    tm *newtime;\n    time_t timer;\n    time(&timer);\n    newtime=localtime(&timer);\n    strftime(buff,size_buff,\"%H:%M:%S\",newtime); \n}\n\nvoid GetDate(char* buff,int size_buff) \n{\n    tm *newtime;\n    time_t timer;\n    time(&timer);  \n    newtime=localtime(&timer);\n    strftime(buff,size_buff,\"%Y-%m-%d\",newtime); \n}\n\n\nStatisticsCollector::TestCase StatisticsCollector::SetTestCase(const char *name, const char *mode, int threads)\n{\n    string KeyName(name);\n    switch (SortMode)\n    {\n    case ByThreads: KeyName += Format(\"_%02d_%s\", threads, mode); break;\n    default:\n    case ByAlg: KeyName += Format(\"_%s_%02d\", mode, threads); break;\n    }\n    CurrentKey = Statistics[KeyName];\n    if(!CurrentKey) {\n        CurrentKey = new StatisticResults;\n        CurrentKey->Mode = mode;\n        CurrentKey->Name = name;\n        CurrentKey->Threads = threads;\n        CurrentKey->Results.reserve(RoundTitles.size());\n        Statistics[KeyName] = CurrentKey;\n    }\n    return TestCase(CurrentKey);\n}\n\nStatisticsCollector::~StatisticsCollector()\n{\n    for(Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n        delete i->second;\n}\n\nvoid StatisticsCollector::ReserveRounds(size_t index)\n{\n    size_t i = RoundTitles.size();\n    if (i > index) return;\n    char buf[16];\n    RoundTitles.resize(index+1);\n    for(; i <= index; i++) {\n        snprintf( buf, 15, \"%u\", unsigned(i+1) );\n        RoundTitles[i] = buf;\n    }\n    for(Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++) {\n        if(!i->second) printf(\"!!!'%s' = NULL\\n\", i->first.c_str());\n        else i->second->Results.reserve(index+1);\n    }\n}\n\nvoid StatisticsCollector::AddRoundResult(const TestCase &key, value_t v)\n{\n    ReserveRounds(key.access->Results.size());\n    key.access->Results.push_back(v);\n}\n\nvoid StatisticsCollector::SetRoundTitle(size_t index, const char *fmt, ...)\n{\n    vargf2buff(buff, 128, fmt);\n    ReserveRounds(index);\n    RoundTitles[index] = buff;\n}\n\nvoid StatisticsCollector::AddStatisticValue(const TestCase &key, const char *type, const char *fmt, ...)\n{\n    vargf2buff(buff, 128, fmt);\n    AnalysisTitles.insert(type);\n    key.access->Analysis[type] = buff;\n}\n\nvoid StatisticsCollector::AddStatisticValue(const char *type, const char *fmt, ...)\n{\n    vargf2buff(buff, 128, fmt);\n    AnalysisTitles.insert(type);\n    CurrentKey->Analysis[type] = buff;\n}\n\nvoid StatisticsCollector::SetRunInfo(const char *title, const char *fmt, ...)\n{\n    vargf2buff(buff, 256, fmt);\n    RunInfo.push_back(make_pair(title, buff));\n}\n\nvoid StatisticsCollector::SetStatisticFormula(const char *name, const char *formula)\n{\n    Formulas[name] = formula;\n}\n\nvoid StatisticsCollector::SetTitle(const char *fmt, ...)\n{\n    vargf2buff(buff, 256, fmt);\n    Title = buff;\n}\n\nstring ExcelFormula(const string &fmt, size_t place, size_t rounds, bool is_horizontal)\n{\n    char buff[16];\n    if(is_horizontal)\n        snprintf(buff, 15, \"RC[%u]:RC[%u]\", unsigned(place), unsigned(place+rounds-1));\n    else\n        snprintf(buff, 15, \"R[%u]C:R[%u]C\", unsigned(place+1), unsigned(place+rounds));\n    string result(fmt); size_t pos = 0;\n    while ( (pos = result.find(\"ROUNDS\", pos, 6)) != string::npos )\n        result.replace(pos, 6, buff);\n    return result;\n}\n\nvoid StatisticsCollector::Print(int dataOutput, const char *ModeName)\n{\n    FILE *OutputFile;\n    const char *file_suffix = getenv(\"STAT_SUFFIX\");\n    if( !file_suffix ) file_suffix = \"\";\n    const char *file_format = getenv(\"STAT_FORMAT\");\n    if( file_format ) {\n        dataOutput = 0;\n        if( strstr(file_format, \"con\")||strstr(file_format, \"std\") ) dataOutput |= StatisticsCollector::Stdout;\n        if( strstr(file_format, \"txt\")||strstr(file_format, \"csv\") ) dataOutput |= StatisticsCollector::TextFile;\n        if( strstr(file_format, \"excel\")||strstr(file_format, \"xml\") ) dataOutput |= StatisticsCollector::ExcelXML;\n        if( strstr(file_format, \"htm\") ) dataOutput |= StatisticsCollector::HTMLFile;\n        if( strstr(file_format, \"pivot\") ) dataOutput |= StatisticsCollector::PivotMode;\n    }\n    for(int i = 1; i < 10; i++) {\n        string env = Format(\"STAT_RUNINFO%d\", i);\n        const char *info = getenv(env.c_str());\n        if( info ) {\n            string title(info);\n            size_t pos = title.find('=');\n            if( pos != string::npos ) {\n                env = title.substr(pos+1);\n                title.resize(pos);\n            } else env = title;\n            RunInfo.push_back(make_pair(title, env));\n        }\n    }\n\n    if (dataOutput & StatisticsCollector::Stdout)\n    {\n        printf(\"\\n-=# %s #=-\\n\", Title.c_str());\n        if(SortMode == ByThreads)\n            printf(\"    Name    |  #  | %s \", ModeName);\n        else\n            printf(\"    Name    | %s |  #  \", ModeName);\n        for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)\n            printf(\"|%s\", i->c_str()+1);\n\n        for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n        {\n            if(SortMode == ByThreads)\n                printf(\"\\n%12s|% 5d|%6s\", i->second->Name.c_str(), i->second->Threads, i->second->Mode.c_str());\n            else\n                printf(\"\\n%12s|%6s|% 5d\", i->second->Name.c_str(), i->second->Mode.c_str(), i->second->Threads);\n            Analysis_t &analisis = i->second->Analysis;\n            AnalysisTitles_t::iterator t = AnalysisTitles.begin();\n            for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); t++)\n            {\n                char fmt[8]; snprintf(fmt, 7, \"|%% %us\", unsigned(max(size_t(3), t->size())));\n                if(*t != a->first)\n                    printf(fmt, \"\");\n                else {\n                    printf(fmt, a->second.c_str()); a++;\n                }\n            }\n        }\n        printf(\"\\n\");\n    }\n    if (dataOutput & StatisticsCollector::TextFile)\n    {\n        bool append = false;\n        const char *file_ext = \".txt\";\n        if( file_format && strstr(file_format, \"++\") ) append = true;\n        if( file_format && strstr(file_format, \"csv\") ) file_ext = \".csv\";\n        if ((OutputFile = fopen((Name+file_suffix+file_ext).c_str(), append?\"at\":\"wt\")) == NULL) {\n            printf(\"Can't open .txt file\\n\");\n        } else {\n            const char *delim = getenv(\"STAT_DELIMITER\");\n            if( !delim || !delim[0] ) {\n                if( file_format && strstr(file_format, \"csv\") ) delim = \",\";\n                else delim = \"\\t\";\n            }\n            if( !append || !ftell(OutputFile) ) { // header needed\n                append = false;\n                if(SortMode == ByThreads) fprintf(OutputFile, \"Name%s#%s%s\", delim, delim, ModeName);\n                else fprintf(OutputFile, \"Name%s%s%s#\", delim, ModeName, delim);\n                for( size_t k = 0; k < RunInfo.size(); k++ )\n                    fprintf(OutputFile, \"%s%s\", delim, RunInfo[k].first.c_str());\n            }\n            if(dataOutput & StatisticsCollector::PivotMode) {\n                if( !append) fprintf(OutputFile, \"%sColumn%sValue\", delim, delim);\n                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n                {\n                    string RowHead;\n                    if(SortMode == ByThreads)\n                        RowHead = Format(\"\\n%s%s%d%s%s%s\", i->second->Name.c_str(), delim, i->second->Threads, delim, i->second->Mode.c_str(), delim);\n                    else\n                        RowHead = Format(\"\\n%s%s%s%s%d%s\", i->second->Name.c_str(), delim, i->second->Mode.c_str(), delim, i->second->Threads, delim);\n                    for( size_t k = 0; k < RunInfo.size(); k++ )\n                        RowHead.append(RunInfo[k].second + delim);\n                    Analysis_t &analisis = i->second->Analysis;\n                    for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); ++a)\n                        fprintf(OutputFile, \"%s%s%s%s\", RowHead.c_str(), a->first.c_str(), delim, a->second.c_str());\n                    Results_t &r = i->second->Results;\n                    for (size_t k = 0; k < r.size(); k++) {\n                        fprintf(OutputFile, \"%s%s%s\", RowHead.c_str(), RoundTitles[k].c_str(), delim);\n                        fprintf(OutputFile, ResultsFmt, r[k]);\n                    }\n                }\n            } else {\n                if( !append ) {\n                    for( size_t k = 0; k < RunInfo.size(); k++ )\n                        fprintf(OutputFile, \"%s%s\", delim, RunInfo[k].first.c_str());\n                    for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)\n                        fprintf(OutputFile, \"%s%s\", delim, i->c_str()+1);\n                    for (size_t i = 0; i < RoundTitles.size(); i++)\n                        fprintf(OutputFile, \"%s%s\", delim, RoundTitles[i].c_str());\n                }\n                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n                {\n                    if(SortMode == ByThreads)\n                        fprintf(OutputFile, \"\\n%s%s%d%s%s\", i->second->Name.c_str(), delim, i->second->Threads, delim, i->second->Mode.c_str());\n                    else\n                        fprintf(OutputFile, \"\\n%s%s%s%s%d\", i->second->Name.c_str(), delim, i->second->Mode.c_str(), delim, i->second->Threads);\n                    for( size_t k = 0; k < RunInfo.size(); k++ )\n                        fprintf(OutputFile, \"%s%s\", delim, RunInfo[k].second.c_str());\n                    Analysis_t &analisis = i->second->Analysis;\n                    AnalysisTitles_t::iterator t = AnalysisTitles.begin();\n                    for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); ++t) {\n                        fprintf(OutputFile, \"%s\", delim);\n                        if(*t == a->first) {\n                            fprintf(OutputFile, \"%s\", a->second.c_str()); ++a;\n                        }\n                    }\n                    //data\n                    Results_t &r = i->second->Results;\n                    for (size_t k = 0; k < r.size(); k++)\n                    {\n                        fprintf(OutputFile, \"%s\", delim);\n                        fprintf(OutputFile, ResultsFmt, r[k]);\n                    }\n                }\n            }\n            fprintf(OutputFile, \"\\n\");\n            fclose(OutputFile);\n        }\n    }\n    if (dataOutput & StatisticsCollector::HTMLFile)\n    {\n        if ((OutputFile = fopen((Name+file_suffix+\".html\").c_str(), \"w+t\")) == NULL) {\n            printf(\"Can't open .html file\\n\");\n        } else {\n            char TimerBuff[100], DateBuff[100];\n            GetTime(TimerBuff,sizeof(TimerBuff));\n            GetDate(DateBuff,sizeof(DateBuff));\n            fprintf(OutputFile, \"<html><head>\\n<title>%s</title>\\n</head><body>\\n\", Title.c_str());\n            //-----------------------\n            fprintf(OutputFile, \"<table id=\\\"h\\\" style=\\\"position:absolute;top:20\\\" border=1 cellspacing=0 cellpadding=2>\\n\");\n            fprintf(OutputFile, \"<tr><td><a name=hr href=#vr onclick=\\\"v.style.visibility='visible';\"\n                                \"h.style.visibility='hidden';\\\">Flip[H]</a></td>\"\n                                \"<td>%s</td><td>%s</td><td colspan=%u>%s\",\n                DateBuff, TimerBuff, unsigned(AnalysisTitles.size() + RoundTitles.size()), Title.c_str());\n            for( size_t k = 0; k < RunInfo.size(); k++ )\n                fprintf(OutputFile, \"; %s: %s\", RunInfo[k].first.c_str(), RunInfo[k].second.c_str());\n            fprintf(OutputFile, \"</td></tr>\\n<tr bgcolor=#CCFFFF><td>Name</td><td>Threads</td><td>%s</td>\", ModeName);\n            for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)\n                fprintf(OutputFile, \"<td>%s</td>\", i->c_str()+1);\n            for (size_t i = 0; i < RoundTitles.size(); i++)\n                fprintf(OutputFile, \"<td>%s</td>\", RoundTitles[i].c_str());\n            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n            {\n                fprintf(OutputFile, \"</tr>\\n<tr><td bgcolor=#CCFFCC>%s</td><td bgcolor=#CCFFCC>%d</td><td bgcolor=#CCFFCC>%4s</td>\",\n                    i->second->Name.c_str(), i->second->Threads, i->second->Mode.c_str());\n                //statistics\n                AnalysisTitles_t::iterator t = AnalysisTitles.begin();\n                for (Analysis_t::iterator j = i->second->Analysis.begin(); j != i->second->Analysis.end(); t++)\n                {\n                    fprintf(OutputFile, \"<td bgcolor=#FFFF99>%s</td>\", (*t != j->first)?\" \":(i->second->Analysis[j->first]).c_str());\n                    if(*t == j->first) j++;\n                }\n                //data\n                Results_t &r = i->second->Results;\n                for (size_t k = 0; k < r.size(); k++)\n                {\n                    fprintf(OutputFile, \"<td>\");\n                    fprintf(OutputFile, ResultsFmt, r[k]);\n                    fprintf(OutputFile, \"</td>\");\n                }\n            }\n            fprintf(OutputFile, \"</tr>\\n</table>\\n\");\n            //////////////////////////////////////////////////////\n            fprintf(OutputFile, \"<table id=\\\"v\\\" style=\\\"visibility:hidden;position:absolute;top:20\\\" border=1 cellspacing=0 cellpadding=2>\\n\");\n            fprintf(OutputFile, \"<tr><td><a name=vr href=#hr onclick=\\\"h.style.visibility='visible';\"\n                                \"v.style.visibility='hidden';\\\">Flip[V]</a></td>\\n\"\n                                \"<td>%s</td><td>%s</td><td colspan=%u>%s</td>\", \n                DateBuff, TimerBuff, unsigned(max(Statistics.size()-2,size_t(1))), Title.c_str());\n\n            fprintf(OutputFile, \"</tr>\\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>Name</td>\");\n            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n                fprintf(OutputFile, \"<td>%s</td>\", i->second->Name.c_str());\n            fprintf(OutputFile, \"</tr>\\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>Threads</td>\");\n            for (Statistics_t::iterator n = Statistics.begin(); n != Statistics.end(); n++)\n                fprintf(OutputFile, \"<td>%d</td>\", n->second->Threads);\n            fprintf(OutputFile, \"</tr>\\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>%s</td>\", ModeName);\n            for (Statistics_t::iterator m = Statistics.begin(); m != Statistics.end(); m++)\n                fprintf(OutputFile, \"<td>%s</td>\", m->second->Mode.c_str());\n\n            for (AnalysisTitles_t::iterator t = AnalysisTitles.begin(); t != AnalysisTitles.end(); t++)\n            {\n                fprintf(OutputFile, \"</tr>\\n<tr bgcolor=#FFFF99><td bgcolor=#CCFFFF>%s</td>\", t->c_str()+1);\n                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n                    fprintf(OutputFile, \"<td>%s</td>\", i->second->Analysis.count(*t)?i->second->Analysis[*t].c_str():\" \");\n            }\n\n            for (size_t r = 0; r < RoundTitles.size(); r++)\n            {\n                fprintf(OutputFile, \"</tr>\\n<tr><td bgcolor=#CCFFFF>%s</td>\", RoundTitles[r].c_str());\n                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n                {\n                    Results_t &result = i->second->Results;\n                    fprintf(OutputFile, \"<td>\");\n                    if(result.size() > r)\n                        fprintf(OutputFile, ResultsFmt, result[r]);\n                    fprintf(OutputFile, \"</td>\");\n                }\n            }\n            fprintf(OutputFile, \"</tr>\\n</table>\\n</body></html>\\n\");\n            fclose(OutputFile);\n        }\n    }\n    if (dataOutput & StatisticsCollector::ExcelXML)\n    {\n        if ((OutputFile = fopen((Name+file_suffix+\".xml\").c_str(), \"w+t\")) == NULL) {\n            printf(\"Can't open .xml file\\n\");\n        } else {\n            // TODO:PivotMode\n            char UserName[100];\n            char TimerBuff[100], DateBuff[100];\n#if _WIN32 || _WIN64\n            strcpy(UserName,getenv(\"USERNAME\"));\n#else\n            strcpy(UserName,getenv(\"USER\"));\n#endif\n            //--------------------------------\n            GetTime(TimerBuff,sizeof(TimerBuff));\n            GetDate(DateBuff,sizeof(DateBuff));\n            //--------------------------\n            fprintf(OutputFile, XMLHead, UserName, TimerBuff);\n            fprintf(OutputFile, XMLStyles);\n            fprintf(OutputFile, XMLBeginSheet, \"Horizontal\");\n            fprintf(OutputFile, XMLNames,1,1,1,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));\n            fprintf(OutputFile, XMLBeginTable, int(RoundTitles.size()+Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+1/*title*/), int(Statistics.size()+1));\n            fprintf(OutputFile, XMLBRow);\n            fprintf(OutputFile, XMLCellTopName);\n            fprintf(OutputFile, XMLCellTopThread);\n            fprintf(OutputFile, XMLCellTopMode, ModeName);\n            for (AnalysisTitles_t::iterator j = AnalysisTitles.begin(); j != AnalysisTitles.end(); j++)\n                fprintf(OutputFile, XMLAnalysisTitle, j->c_str()+1);\n            for (Formulas_t::iterator j = Formulas.begin(); j != Formulas.end(); j++)\n                fprintf(OutputFile, XMLAnalysisTitle, j->first.c_str()+1);\n            for (RoundTitles_t::iterator j = RoundTitles.begin(); j != RoundTitles.end(); j++)\n                fprintf(OutputFile, XMLAnalysisTitle, j->c_str());\n            string Info = Title;\n            for( size_t k = 0; k < RunInfo.size(); k++ )\n                Info.append(\"; \" + RunInfo[k].first + \"=\" + RunInfo[k].second);\n            fprintf(OutputFile, XMLCellEmptyWhite, Info.c_str());\n            fprintf(OutputFile, XMLERow);\n            //------------------------\n            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)\n            {\n                fprintf(OutputFile, XMLBRow);\n                fprintf(OutputFile, XMLCellName,  i->second->Name.c_str());\n                fprintf(OutputFile, XMLCellThread,i->second->Threads);\n                fprintf(OutputFile, XMLCellMode,  i->second->Mode.c_str());\n                //statistics\n                AnalysisTitles_t::iterator at = AnalysisTitles.begin();\n                for (Analysis_t::iterator j = i->second->Analysis.begin(); j != i->second->Analysis.end(); at++)\n                {\n                    fprintf(OutputFile, XMLCellAnalysis, (*at != j->first)?\"\":(i->second->Analysis[j->first]).c_str());\n                    if(*at == j->first) j++;\n                }\n                //formulas\n                size_t place = 0;\n                Results_t &v = i->second->Results;\n                for (Formulas_t::iterator f = Formulas.begin(); f != Formulas.end(); f++, place++)\n                    fprintf(OutputFile, XMLCellFormula, ExcelFormula(f->second, Formulas.size()-place, v.size(), true).c_str());\n                //data\n                for (size_t k = 0; k < v.size(); k++)\n                {\n                    fprintf(OutputFile, XMLCellData, v[k]);\n                }\n                if(v.size() < RoundTitles.size())\n                    fprintf(OutputFile, XMLMergeRow, int(RoundTitles.size() - v.size()));\n                fprintf(OutputFile, XMLERow);\n            }\n            //------------------------\n            fprintf(OutputFile, XMLEndTable);\n            fprintf(OutputFile, XMLWorkSheetProperties,1,1,3,3,int(RoundTitles.size()+AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));\n            fprintf(OutputFile, XMLAutoFilter,1,1,1,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));\n            fprintf(OutputFile, XMLEndWorkSheet);\n            //----------------------------------------\n            fprintf(OutputFile, XMLEndWorkbook);\n            fclose(OutputFile);\n        }\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/statistics.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Internal Intel tool\n\n#ifndef __STATISTICS_H__\n#define __STATISTICS_H__\n\n#define _CRT_SECURE_NO_DEPRECATE 1\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <vector>\n#include <map>\n#include <set>\n#include <string>\n#include <time.h>\n\nusing namespace std;\ntypedef double value_t;\n\n/*\n   Statistical collector class.\n\n   Resulting table output:\n        +---------------------------------------------------------------------------+\n        | [Date] <Title>...                                                         |\n        +----------+----v----+--v---+----------------+------------+-..-+------------+\n        | TestName | Threads | Mode | Rounds results | Stat_type1 | .. | Stat_typeN |\n        +----------+---------+------+-+-+-+-..-+-+-+-+------------+-..-+------------+\n        |          |         |      | | | | .. | | | |            |    |            |\n        ..        ...       ...     ..................            ......           ..\n        |          |         |      | | | | .. | | | |            |    |            |\n        +----------+---------+------+-+-+-+-..-+-+-+-+------------+-..-+------------+\n\n   Iterating table output:\n        +---------------------------------------------------------------------------+\n        | [Date] <TestName>, Threads: <N>, Mode: <M>; for <Title>...                |\n        +----------+----v----+--v---+----------------+------------+-..-+------------+\n\n*/\n\nclass StatisticsCollector\n{\npublic:\n    typedef map<string, string> Analysis_t;\n    typedef vector<value_t> Results_t;\n\nprotected:\n    StatisticsCollector(const StatisticsCollector &);\n\n    struct StatisticResults\n    {\n        string              Name;\n        string              Mode;\n        int                 Threads;\n        Results_t           Results;\n        Analysis_t          Analysis;\n    };\n\n    // internal members\n    //bool OpenFile;\n    StatisticResults *CurrentKey;\n    string Title;\n    const char /**Name,*/ *ResultsFmt;\n    string Name;\n    //! Data\n    typedef map<string, StatisticResults*> Statistics_t;\n    Statistics_t Statistics;\n    typedef vector<string> RoundTitles_t;\n    RoundTitles_t RoundTitles;\n    //TODO: merge those into one structure\n    typedef map<string, string> Formulas_t;\n    Formulas_t   Formulas;\n    typedef set<string> AnalysisTitles_t;\n    AnalysisTitles_t AnalysisTitles;\n    typedef vector<pair<string, string> > RunInfo_t;\n    RunInfo_t RunInfo;\n\npublic:\n    struct TestCase {\n        StatisticResults *access;\n        TestCase() : access(0) {}\n        TestCase(StatisticResults *link) : access(link) {}\n        const char *getName() const { return access->Name.c_str(); }\n        const char *getMode() const { return access->Mode.c_str(); }\n        int getThreads()       const { return access->Threads; }\n        const Results_t &getResults() const { return access->Results; }\n        const Analysis_t &getAnalysis() const { return access->Analysis; }\n    };\n\n    enum Sorting {\n        ByThreads, ByAlg\n    };\n\n    //! Data and output types\n    enum DataOutput {\n        // Verbosity level enumeration\n        Statistic = 1,     //< Analytical data - computed after all iterations and rounds passed\n        Result    = 2,     //< Testing data    - collected after all iterations passed\n        Iteration = 3,     //< Verbose data    - collected at each iteration (for each size - in case of containers)\n        // ExtraVerbose is not applicabe yet :) be happy, but flexibility is always welcome\n\n        // Next constants are bit-fields\n        Stdout   = 1<<8,    //< Output to the console\n        TextFile = 1<<9,    //< Output to plain text file \"name.txt\" (delimiter is TAB by default)\n        ExcelXML = 1<<10,   //< Output to Excel-readable XML-file \"name.xml\"\n        HTMLFile = 1<<11,   //< Output to HTML file \"name.html\"\n        PivotMode= 1<<15    //< Puts all the rounds into one columt to better fit for pivot table in Excel\n    };\n\n    //! Constructor. Specify tests set name which used as name of output files\n    StatisticsCollector(const char *name, Sorting mode = ByThreads, const char *fmt = \"%g\")\n        :  CurrentKey(NULL), ResultsFmt(fmt), Name(name), SortMode(mode) {}\n\n    ~StatisticsCollector();\n\n    //! Set tests set title, supporting printf-like arguments\n    void SetTitle(const char *fmt, ...);\n\n    //! Specify next test key\n    TestCase SetTestCase(const char *name, const char *mode, int threads);\n    //! Specify next test key\n    void SetTestCase(const TestCase &t) { SetTestCase(t.getName(), t.getMode(), t.getThreads()); }\n    //! Reserve specified number of rounds. Use for efficiency. Used mostly internally\n    void ReserveRounds(size_t index);\n    //! Add result of the measure\n    void AddRoundResult(const TestCase &, value_t v);\n    //! Add result of the current measure\n    void AddRoundResult(value_t v) { if(CurrentKey) AddRoundResult(TestCase(CurrentKey), v); }\n    //! Add title of round\n    void SetRoundTitle(size_t index, const char *fmt, ...);\n    //! Add numbered title of round\n    void SetRoundTitle(size_t index, int num) { SetRoundTitle(index, \"%d\", num); }\n    //! Get number of rounds\n    size_t GetRoundsCount() const { return RoundTitles.size(); }\n    // Set statistic value for the test\n    void AddStatisticValue(const TestCase &, const char *type, const char *fmt, ...);\n    // Set statistic value for the current test\n    void AddStatisticValue(const char *type, const char *fmt, ...);\n    //! Add Excel-processing formulas. @arg formula can contain more than one instances of\n    //! ROUNDS template which transforms into the range of cells with result values\n    //TODO://! #1 .. #n templates represent data cells from the first to the last\n    //TODO: merge with Analisis\n    void SetStatisticFormula(const char *name, const char *formula);\n    //! Add information about run or compile parameters\n    void SetRunInfo(const char *title, const char *fmt, ...);\n    void SetRunInfo(const char *title, int num) { SetRunInfo(title, \"%d\", num); }\n\n    //! Data output\n    void Print(int dataOutput, const char *ModeName = \"Mode\");\n\nprivate:\n    Sorting SortMode;\n};\n\n//! using: Func(const char *fmt, ...) { vargf2buff(buff, 128, fmt);...\n#define vargf2buff(name, size, fmt) \\\n    char name[size]; memset(name, 0, size); \\\n    va_list args; va_start(args, fmt); \\\n    vsnprintf(name, size-1, fmt, args); \\\n    va_end(args);\n\n\ninline std::string Format(const char *fmt, ...) {\n    vargf2buff(buf, 1024, fmt); // from statistics.h\n    return std::string(buf);\n}\n\n#ifdef STATISTICS_INLINE\n#include \"statistics.cpp\"\n#endif\n#endif //__STATISTICS_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/statistics_xml.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nconst char XMLBRow[]=\n\"   <Row>\\n\";\n\nconst char XMLERow[]=\n\"   </Row>\\n\";\n\nconst char XMLHead[]=\n\"<?xml version=\\\"1.0\\\"?>\\n\"\n\"<?mso-application progid=\\\"Excel.Sheet\\\"?>\\n\\\n<Workbook xmlns=\\\"urn:schemas-microsoft-com:office:spreadsheet\\\"\\n\\\n xmlns:o=\\\"urn:schemas-microsoft-com:office:office\\\"\\n\\\n xmlns:x=\\\"urn:schemas-microsoft-com:office:excel\\\"\\n\\\n xmlns:ss=\\\"urn:schemas-microsoft-com:office:spreadsheet\\\"\\n\\\n xmlns:html=\\\"http://www.w3.org/TR/REC-html40\\\">\\n\\\n <DocumentProperties xmlns=\\\"urn:schemas-microsoft-com:office:office\\\">\\n\\\n  <Author>%s</Author>\\n\\\n  <Created>%s</Created>\\n\\\n  <Company>Intel Corporation</Company>\\n\\\n </DocumentProperties>\\n\\\n <ExcelWorkbook xmlns=\\\"urn:schemas-microsoft-com:office:excel\\\">\\n\\\n  <RefModeR1C1/>\\n\\\n </ExcelWorkbook>\\n\";\n \n const char XMLStyles[]=\n \" <Styles>\\n\\\n  <Style ss:ID=\\\"Default\\\" ss:Name=\\\"Normal\\\">\\n\\\n   <Alignment ss:Vertical=\\\"Bottom\\\" ss:Horizontal=\\\"Left\\\" ss:WrapText=\\\"0\\\"/>\\n\\\n  </Style>\\n\\\n  <Style ss:ID=\\\"s26\\\">\\n\\\n   <Alignment ss:Vertical=\\\"Top\\\"  ss:Horizontal=\\\"Left\\\" ss:WrapText=\\\"0\\\"/>\\n\\\n   <Borders>\\n\\\n    <Border ss:Position=\\\"Bottom\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Left\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Right\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Top\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n   </Borders>\\n\\\n   <Interior ss:Color=\\\"#FFFF99\\\" ss:Pattern=\\\"Solid\\\"/>\\n\\\n  </Style>\\n\\\n  <Style ss:ID=\\\"s25\\\">\\n\\\n   <Alignment ss:Vertical=\\\"Top\\\"  ss:Horizontal=\\\"Left\\\" ss:WrapText=\\\"0\\\"/>\\n\\\n   <Borders>\\n\\\n    <Border ss:Position=\\\"Bottom\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Left\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Right\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Top\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n   </Borders>\\n\\\n   <Interior ss:Color=\\\"#CCFFFF\\\" ss:Pattern=\\\"Solid\\\"/>\\n\\\n  </Style>\\n\\\n  <Style ss:ID=\\\"s24\\\">\\n\\\n   <Alignment ss:Vertical=\\\"Top\\\"  ss:Horizontal=\\\"Left\\\" ss:WrapText=\\\"0\\\"/>\\n\\\n   <Borders>\\n\\\n    <Border ss:Position=\\\"Bottom\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Left\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Right\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Top\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n   </Borders>\\n\\\n   <Interior ss:Color=\\\"#CCFFCC\\\" ss:Pattern=\\\"Solid\\\"/>\\n\\\n  </Style>\\n\\\n  <Style ss:ID=\\\"s23\\\">\\n\\\n   <Alignment ss:Vertical=\\\"Top\\\"  ss:Horizontal=\\\"Left\\\" ss:WrapText=\\\"0\\\"/>\\n\\\n   <Borders>\\n\\\n    <Border ss:Position=\\\"Bottom\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Left\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Right\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n    <Border ss:Position=\\\"Top\\\" ss:LineStyle=\\\"Continuous\\\" ss:Weight=\\\"1\\\"/>\\n\\\n   </Borders>\\n\\\n  </Style>\\n\\\n </Styles>\\n\";\n\nconst char XMLBeginSheet[]=\n\" <Worksheet ss:Name=\\\"%s\\\">\\n\";\n\nconst char XMLNames[]=\n\"  <Names>\\n\\\n   <NamedRange ss:Name=\\\"_FilterDatabase\\\" ss:RefersTo=\\\"R%dC%d:R%dC%d\\\" ss:Hidden=\\\"1\\\"/>\\n\\\n  </Names>\\n\";\n\nconst char XMLBeginTable[]=\n\"  <Table ss:ExpandedColumnCount=\\\"%d\\\" ss:ExpandedRowCount=\\\"%d\\\" x:FullColumns=\\\"1\\\"\\n\\\n   x:FullRows=\\\"1\\\">\\n\";\n   \nconst char XMLColumsHorizontalTable[]=\n\"   <Column ss:Index=\\\"1\\\" ss:Width=\\\"108.75\\\"/>\\n\\\n   <Column ss:Index=\\\"%d\\\" ss:Width=\\\"77.25\\\" ss:Span=\\\"%d\\\"/>\\n\";\n \nconst char XMLColumsVerticalTable[]= \n\"   <Column ss:Index=\\\"1\\\" ss:Width=\\\"77.25\\\" ss:Span=\\\"%d\\\"/>\\n\";\n\nconst char XMLNameAndTime[]=\n\"    <Cell><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\\\n    <Cell><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\\\n    <Cell><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLTableParamAndTitle[]=\n\"    <Cell><Data ss:Type=\\\"Number\\\">%d</Data></Cell>\\n\\\n    <Cell><Data ss:Type=\\\"Number\\\">%d</Data></Cell>\\n\\\n    <Cell><Data ss:Type=\\\"Number\\\">%d</Data></Cell>\\n\\\n    <Cell><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\n//--------------\nconst char XMLCellTopName[]=\n\"   <Cell ss:StyleID=\\\"s25\\\"><Data ss:Type=\\\"String\\\">Name</Data></Cell>\\n\";\nconst char XMLCellTopThread[]=\n\"   <Cell ss:StyleID=\\\"s25\\\"><Data ss:Type=\\\"String\\\">Threads</Data></Cell>\\n\";\nconst char XMLCellTopMode[]=\n\"   <Cell ss:StyleID=\\\"s25\\\"><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n//---------------------\nconst char XMLAnalysisTitle[]=\n\"   <Cell ss:StyleID=\\\"s25\\\"><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLCellName[]=\n\"    <Cell ss:StyleID=\\\"s24\\\"><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLCellThread[]=\n\"    <Cell ss:StyleID=\\\"s24\\\"><Data ss:Type=\\\"Number\\\">%d</Data></Cell>\\n\";\n\nconst char XMLCellMode[]=\n\"    <Cell ss:StyleID=\\\"s24\\\"><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLCellAnalysis[]=\n\"    <Cell ss:StyleID=\\\"s26\\\"><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLCellFormula[]=\n\"    <Cell ss:StyleID=\\\"s26\\\" ss:Formula=\\\"%s\\\"><Data ss:Type=\\\"Number\\\"></Data></Cell>\\n\";\n\nconst char XMLCellData[]=\n\"    <Cell ss:StyleID=\\\"s23\\\"><Data ss:Type=\\\"Number\\\">%g</Data></Cell>\\n\";\n\nconst char XMLMergeRow[]=\n\"   <Cell ss:StyleID=\\\"s23\\\" ss:MergeAcross=\\\"%d\\\" ><Data ss:Type=\\\"String\\\"></Data></Cell>\\n\";\n\nconst char XMLCellEmptyWhite[]=\n\"    <Cell><Data ss:Type=\\\"String\\\">%s</Data></Cell>\\n\";\n\nconst char XMLCellEmptyTitle[]=\n\"    <Cell ss:StyleID=\\\"s25\\\"><Data ss:Type=\\\"String\\\"></Data></Cell>\\n\";\n\nconst char XMLEndTable[]=\n\"  </Table>\\n\";\n\nconst char XMLAutoFilter[]=\n\"  <AutoFilter x:Range=\\\"R%dC%d:R%dC%d\\\" xmlns=\\\"urn:schemas-microsoft-com:office:excel\\\">\\n\\\n  </AutoFilter>\\n\";\n\nconst char XMLEndWorkSheet[]=\n \" </Worksheet>\\n\";\n\nconst char XMLWorkSheetProperties[]=\n\"  <WorksheetOptions xmlns=\\\"urn:schemas-microsoft-com:office:excel\\\">\\n\\\n   <Unsynced/>\\n\\\n   <Selected/>\\n\\\n   <FreezePanes/>\\n\\\n   <FrozenNoSplit/>\\n\\\n   <SplitHorizontal>%d</SplitHorizontal>\\n\\\n   <TopRowBottomPane>%d</TopRowBottomPane>\\n\\\n   <SplitVertical>%d</SplitVertical>\\n\\\n   <LeftColumnRightPane>%d</LeftColumnRightPane>\\n\\\n   <ActivePane>0</ActivePane>\\n\\\n   <Panes>\\n\\\n    <Pane>\\n\\\n     <Number>3</Number>\\n\\\n    </Pane>\\n\\\n    <Pane>\\n\\\n     <Number>1</Number>\\n\\\n    </Pane>\\n\\\n    <Pane>\\n\\\n     <Number>2</Number>\\n\\\n    </Pane>\\n\\\n    <Pane>\\n\\\n     <Number>0</Number>\\n\\\n     <ActiveRow>0</ActiveRow>\\n\\\n     <ActiveCol>%d</ActiveCol>\\n\\\n    </Pane>\\n\\\n   </Panes>\\n\\\n   <ProtectObjects>False</ProtectObjects>\\n\\\n   <ProtectScenarios>False</ProtectScenarios>\\n\\\n  </WorksheetOptions>\\n\";\n\nconst char XMLEndWorkbook[]=\n \"</Workbook>\\n\";\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_cpq_throughput_test.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n\n#include <cstdlib>\n#include <cmath>\n#include <queue>\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/concurrent_priority_queue.h\"\n#include \"../test/harness.h\"\n#include \"../examples/common/utility/utility.h\"\n#if _MSC_VER\n#pragma warning(disable: 4996)\n#endif\n\n#define IMPL_SERIAL 0\n#define IMPL_STL 1\n#define IMPL_CPQ 2\n\nusing namespace tbb;\n\n// test parameters & defaults\nint impl = IMPL_CPQ; // which implementation to test\nint contention = 1; // busywork between operations in us\nint preload = 0; // # elements to pre-load queue with\ndouble throughput_window = 30.0; // in seconds\nint ops_per_iteration = 20; // minimum: 2 (1 push, 1 pop)\nconst int sample_operations = 1000; // for timing checks\n\n// global data & types\nint pushes_per_iter;\nint pops_per_iter;\ntbb::atomic<unsigned int> operation_count;\ntbb::tick_count start;\n\n// a non-trivial data element to use in the priority queue\nconst int padding_size = 15;  // change to get cache line size for test machine\nclass padding_type {\npublic:\n    int p[padding_size];\n    padding_type& operator=(const padding_type& other) {\n        if (this != &other) {\n            for (int i=0; i<padding_size; ++i) {\n                p[i] = other.p[i];\n            }\n        }\n        return *this;\n    }\n};\n\nclass my_data_type {\npublic:\n    int priority;\n    padding_type padding;\n    my_data_type() : priority(0) {}\n};\n\nclass my_less {\npublic:\n    bool operator()(my_data_type d1, my_data_type d2) {\n        return d1.priority<d2.priority;\n    }\n};\n\n// arrays to get/put data from/to to generate non-trivial accesses during busywork\nmy_data_type *input_data;\nmy_data_type *output_data;\nsize_t arrsz;\n\n// Serial priority queue\nstd::priority_queue<my_data_type, std::vector<my_data_type>, my_less > *serial_cpq;\n\n// Coarse-locked priority queue\nspin_mutex *my_mutex;\nstd::priority_queue<my_data_type, std::vector<my_data_type>, my_less > *stl_cpq;\n\n// TBB concurrent_priority_queue\nconcurrent_priority_queue<my_data_type, my_less > *agg_cpq;\n\n// Busy work and calibration helpers\nunsigned int one_us_iters = 345; // default value\n\n// if user wants to calibrate to microseconds on particular machine, call \n// this at beginning of program; sets one_us_iters to number of iters to \n// busy_wait for approx. 1 us\nvoid calibrate_busy_wait() {\n    const unsigned niter = 1000000;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    for (volatile unsigned int i=0; i<niter; ++i) continue;\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;\n    printf(\"one_us_iters: %d\\n\", one_us_iters);\n}\n\nvoid busy_wait(int us)\n{\n    unsigned int iter = us*one_us_iters;\n    for (volatile unsigned int i=0; i<iter; ++i) continue;\n}\n\n// Push to priority queue, depending on implementation\nvoid do_push(my_data_type elem, int nThr, int impl) {\n    if (impl == IMPL_SERIAL) {\n        serial_cpq->push(elem);\n    }\n    else if (impl == IMPL_STL) {\n        tbb::spin_mutex::scoped_lock myLock(*my_mutex);\n        stl_cpq->push(elem);\n    }\n    else if (impl == IMPL_CPQ) {\n        agg_cpq->push(elem);\n    }\n}\n\n// Pop from priority queue, depending on implementation\nmy_data_type do_pop(int nThr, int impl) {\n    my_data_type elem;\n    if (impl == IMPL_SERIAL) {\n        if (!serial_cpq->empty()) {\n            elem = serial_cpq->top();\n            serial_cpq->pop();\n            return elem;\n        }\n    }\n    else if (impl == IMPL_STL) {\n        tbb::spin_mutex::scoped_lock myLock(*my_mutex);\n        if (!stl_cpq->empty()) {\n            elem = stl_cpq->top();\n            stl_cpq->pop();\n            return elem;\n        }\n    }\n    else if (impl == IMPL_CPQ) {\n        if (agg_cpq->try_pop(elem)) {\n            return elem;\n        }\n    }\n    return elem;\n}\n\n\nstruct TestThroughputBody : NoAssign {\n    int nThread;\n    int implementation;\n\n    TestThroughputBody(int nThread_, int implementation_) : \n        nThread(nThread_), implementation(implementation_) {}\n    \n    void operator()(const int threadID) const {\n        tbb::tick_count now;\n        size_t pos_in = threadID, pos_out = threadID;\n        my_data_type elem;\n        while (1) {\n            for (int i=0; i<sample_operations; i+=ops_per_iteration) {\n                // do pushes\n                for (int j=0; j<pushes_per_iter; ++j) {\n                    elem = input_data[pos_in];\n                    do_push(elem, nThread, implementation);\n                    busy_wait(contention);\n                    pos_in += nThread;\n                    if (pos_in >= arrsz) pos_in = pos_in % arrsz;\n                }\n                // do pops\n                for (int j=0; j<pops_per_iter; ++j) {\n                    output_data[pos_out] = do_pop(nThread, implementation);\n                    busy_wait(contention);\n                    pos_out += nThread;\n                    if (pos_out >= arrsz) pos_out = pos_out % arrsz;\n                }\n            }\n            now = tbb::tick_count::now();\n            operation_count += sample_operations;\n            if ((now-start).seconds() >= throughput_window) break;\n        }\n    }\n};\n\nvoid TestSerialThroughput() {\n    tbb::tick_count now;\n\n    serial_cpq = new std::priority_queue<my_data_type, std::vector<my_data_type>, my_less >;        \n    for (int i=0; i<preload; ++i) do_push(input_data[i], 1, IMPL_SERIAL);\n\n    TestThroughputBody my_serial_test(1, IMPL_SERIAL);\n    start = tbb::tick_count::now();\n    NativeParallelFor(1, my_serial_test);\n    now = tbb::tick_count::now();\n    delete serial_cpq;\n\n    printf(\"SERIAL 1 %10d\\n\", int(operation_count/(now-start).seconds()));\n}\n\nvoid TestThroughputCpqOnNThreads(int nThreads) {\n    tbb::tick_count now;\n\n    if (impl == IMPL_STL) {\n        stl_cpq = new std::priority_queue<my_data_type, std::vector<my_data_type>, my_less >;\n        for (int i=0; i<preload; ++i) do_push(input_data[i], nThreads, IMPL_STL);\n\n        TestThroughputBody my_stl_test(nThreads, IMPL_STL);\n        start = tbb::tick_count::now();\n        NativeParallelFor(nThreads, my_stl_test);\n        now = tbb::tick_count::now();\n        delete stl_cpq;\n        \n        printf(\"STL  %3d %10d\\n\", nThreads, int(operation_count/(now-start).seconds()));\n    }\n    else if (impl == IMPL_CPQ) {\n        agg_cpq = new concurrent_priority_queue<my_data_type, my_less >;\n        for (int i=0; i<preload; ++i) do_push(input_data[i], nThreads, IMPL_CPQ);\n\n        TestThroughputBody my_cpq_test(nThreads, IMPL_CPQ);\n        start = tbb::tick_count::now();\n        NativeParallelFor(nThreads, my_cpq_test);\n        now = tbb::tick_count::now();\n        delete agg_cpq;\n        \n        printf(\"CPQ  %3d %10d\\n\", nThreads, int(operation_count/(now-start).seconds()));\n    }\n}\n\n\nint main(int argc, char *argv[]) {\n    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);\n    struct select_impl{\n        static bool validate(const int & impl){\n            return  ((impl == IMPL_SERIAL) || (impl == IMPL_STL) || (impl == IMPL_CPQ));\n        }\n    };\n    utility::parse_cli_arguments(argc,argv,utility::cli_argument_pack()\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(contention,\"contention\",\" busywork between operations, in us\")\n            .positional_arg(impl,\"queue_type\", \"which implementation to test. One of 0(SERIAL), 1(STL), 2(CPQ) \", select_impl::validate)\n            .positional_arg(preload,\"preload\",\"number of elements to pre-load queue with\")\n            .positional_arg(ops_per_iteration, \"batch size\" ,\"minimum: 2 (1 push, 1 pop)\")\n            .positional_arg(throughput_window, \"duration\", \"in seconds\")\n            );\n\n    std::cout<< \"Priority queue performance test \"<<impl<<\" will run with \"<<contention<<\"us contention \"\n           \"using \"<<threads<<\" threads, \"<<ops_per_iteration<<\" batch size, \"<<preload<<\" pre-loaded elements,\"\n           \" for \"<<throughput_window<<\" seconds.\\n\"\n           <<std::flush\n    ;\n\n    srand(42);\n    arrsz = 100000;\n    input_data = new my_data_type[arrsz];\n    output_data = new my_data_type[arrsz];\n    for (size_t i=0; i<arrsz; ++i) {\n       input_data[i].priority = rand()%100;\n    }\n    //calibrate_busy_wait();\n    pushes_per_iter = ops_per_iteration/2;\n    pops_per_iter = ops_per_iteration/2;\n    operation_count = 0;\n\n    // Initialize mutex for Coarse-locked priority_queue\n    cache_aligned_allocator<spin_mutex> my_mutex_allocator;\n    my_mutex = (spin_mutex *)my_mutex_allocator.allocate(1);\n\n    if (impl == IMPL_SERIAL) {\n        TestSerialThroughput();\n    }\n    else {\n        for( int p=threads.first; p<=threads.last; p = threads.step(p) ) {\n            TestThroughputCpqOnNThreads(p);\n        }\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_fibonacci_cutoff.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <cstdlib>\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task.h\"\n#include \"tbb/tick_count.h\"\n#include \"fibonacci_impl_tbb.cpp\"\n\nlong CutOff = 1;\n\nlong SerialFib( const long n );\n\nlong ParallelFib( const long n ); \n\ninline void dump_title() {\n    printf(\"    Mode,   P, repeat,  N, =fib value, cutoff,     time, speedup\\n\");\n}\n\ninline void output(int P, long n, long c, int T, double serial_elapsed, double elapsed, long result) {\n    printf(\"%s,%4d,%7d,%3ld,%11ld,%7ld,%9.3g,%8.3g\\n\", ( (P == 0) ? \"  Serial\" : \"Parallel\" ),\n                 P, T, n, result, c, elapsed, serial_elapsed / elapsed);\n}\n\n#define MOVE_BY_FOURTHS 1\ninline long calculate_new_cutoff(const long lo, const long hi) {\n#if MOVE_BY_FOURTHS    \n    return lo + (3 + hi - lo ) / 4;\n#else\n    return (hi + lo)/2;\n#endif\n}\n\nvoid find_cutoff(const int P, const long n, const int T, const double serial_elapsed) {\n    long lo = 1, hi = n;\n    double elapsed = 0, lo_elapsed = 0, hi_elapsed = 0;\n    long final_cutoff = -1;\n\n    tbb::task_scheduler_init init(P);\n\n    while(true) {\n       CutOff = calculate_new_cutoff(lo, hi);\n       long result = 0;\n       tbb::tick_count t0;\n       for (int t = -1; t < T; ++t) {\n           if (t == 0) t0 = tbb::tick_count::now();\n           result += ParallelFib(n);\n       }\n       elapsed = (tbb::tick_count::now() - t0).seconds();\n       output(P,n,CutOff,T,serial_elapsed,elapsed,result);\n\n       if (serial_elapsed / elapsed >= P/2.0) {\n           final_cutoff = CutOff;\n           if (hi == CutOff) {\n               if (hi == lo) {\n                  // we have had this value at both above and below 50%\n                  lo = 1; lo_elapsed = 0;\n               } else  {\n                  break;\n               }\n           }\n           hi = CutOff;\n           hi_elapsed = elapsed;\n       } else {\n           if (lo == CutOff) break;\n           lo = CutOff;\n           lo_elapsed = elapsed;\n       }\n    } \n\n    double interpolated_cutoff = lo + ( P/2.0 - serial_elapsed/lo_elapsed ) * ( (hi - lo) / ( serial_elapsed/hi_elapsed - serial_elapsed/lo_elapsed ));\n\n    if (final_cutoff != -1) {\n        printf(\"50%% efficiency cutoff is %ld ( linearly interpolated cutoff is %g )\\n\", final_cutoff, interpolated_cutoff);\n    } else {\n        printf(\"Cannot achieve 50%% efficiency\\n\");\n    }\n\n    return;\n}\n\nint main(int argc, char *argv[]) {\n    if (argc < 4) {\n        printf(\"Usage: %s threads n repetitions\\nWhere n make sense in range [25; 45]\\n\",argv[0]); \n        return 1;\n    }\n\n    int P = atoi(argv[1]);\n    volatile long n = atol(argv[2]);\n    int T = atoi(argv[3]);\n\n    // warmup parallel engine\n    ParallelFib(n);\n\n    dump_title();\n\n    // collect serial time\n    long serial_result = 0;\n    tbb::tick_count t0; \n    for (int t = -1; t < T; ++t) {\n        if (t == 0) t0 = tbb::tick_count::now();        \n        serial_result += SerialFib(n);\n    }\n    double serial_elapsed = (tbb::tick_count::now() - t0).seconds();\n    output(0,n,0,T,serial_elapsed,serial_elapsed,serial_result);\n\n    // perform search\n    find_cutoff(P,n,T,serial_elapsed);\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_framework.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TIME_FRAMEWORK_H__\n#define __TIME_FRAMEWORK_H__\n\n#include <cstdlib>\n#include <math.h>\n#include <vector>\n#include <string>\n#include <sstream>\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#define HARNESS_CUSTOM_MAIN 1\n#include \"../test/harness.h\"\n#include \"../test/harness_barrier.h\"\n#define STATISTICS_INLINE\n#include \"statistics.h\"\n\n#ifndef ARG_TYPE\ntypedef intptr_t arg_t;\n#else\ntypedef ARG_TYPE arg_t;\n#endif\n\nclass Timer {\n    tbb::tick_count tick;\npublic:\n    Timer() { tick = tbb::tick_count::now(); }\n    double get_time()  { return (tbb::tick_count::now() - tick).seconds(); }\n    double diff_time(const Timer &newer) { return (newer.tick - tick).seconds(); }\n    double mark_time() { tbb::tick_count t1(tbb::tick_count::now()), t2(tick); tick = t1; return (t1 - t2).seconds(); }\n    double mark_time(const Timer &newer) { tbb::tick_count t(tick); tick = newer.tick; return (tick - t).seconds(); }\n};\n\nclass TesterBase /*: public tbb::internal::no_copy*/ {\nprotected:\n    friend class TestProcessor;\n    friend class TestRunner;\n\n    //! it is barrier for synchronizing between threads\n    Harness::SpinBarrier *barrier;\n    \n    //! number of tests per this tester\n    const int tests_count;\n    \n    //! number of threads to operate\n    int threads_count;\n\n    //! some value for tester\n    arg_t value;\n\n    //! tester name\n    const char *tester_name;\n\n    // avoid false sharing\n    char pad[128 - sizeof(arg_t) - sizeof(int)*2 - sizeof(void*)*2 ];\n\npublic:\n    //! init tester base. @arg ntests is number of embedded tests in this tester.\n    TesterBase(int ntests)\n        : barrier(NULL), tests_count(ntests)\n    {}\n    virtual ~TesterBase() {}\n\n    //! internal function\n    void base_init(arg_t v, int t, Harness::SpinBarrier &b) {\n        threads_count = t;\n        barrier = &b;\n        value = v;\n        init();\n    }\n\n    //! optionally override to init after value and threads count were set.\n    virtual void init() { }\n\n    //! Override to provide your names\n    virtual std::string get_name(int testn) {\n        return Format(\"test %d\", testn);\n    }\n\n    //! optionally override to init test mode just before execution for a given thread number.\n    virtual void test_prefix(int testn, int threadn) { }\n\n    //! Override to provide main test's entry function returns a value to record\n    virtual value_t test(int testn, int threadn) = 0;\n\n    //! Type of aggregation from results of threads\n    enum result_t {\n        SUM, AVG, MIN, MAX\n    };\n\n    //! Override to change result type for the test. Return postfix for test name or 0 if result type is not needed.\n    virtual const char *get_result_type(int /*testn*/, result_t type) const {\n        return type == AVG ? \"\" : 0; // only average result by default\n    }\n};\n\n/*****\na user's tester concept:\n\nclass tester: public TesterBase {\npublic:\n    //! init tester with known amount of work\n    tester() : TesterBase(<user-specified tests count>) { ... }\n\n    //! run a test with sequental number @arg test_number for @arg thread.\n    / *override* / value_t test(int test_number, int thread);\n};\n\n******/\n\ntemplate<typename Tester, int scale = 1>\nclass TimeTest : public Tester {\n    /*override*/ value_t test(int testn, int threadn) {\n        Timer timer;\n        Tester::test(testn, threadn);\n        return timer.get_time() * double(scale);\n    }\n};\n\ntemplate<typename Tester>\nclass NanosecPerValue : public Tester {\n    /*override*/ value_t test(int testn, int threadn) {\n        Timer timer;\n        Tester::test(testn, threadn);\n        // return time (ns) per value\n        return timer.get_time()*1e+9/double(Tester::value);\n    }\n};\n\ntemplate<typename Tester, int scale = 1>\nclass ValuePerSecond : public Tester {\n    /*override*/ value_t test(int testn, int threadn) {\n        Timer timer;\n        Tester::test(testn, threadn);\n        // return value per seconds/scale\n        return double(Tester::value)/(timer.get_time()*scale);\n    }\n};\n\ntemplate<typename Tester, int scale = 1>\nclass NumberPerSecond : public Tester {\n    /*override*/ value_t test(int testn, int threadn) {\n        Timer timer;\n        Tester::test(testn, threadn);\n        // return a scale per seconds\n        return double(scale)/timer.get_time();\n    }\n};\n\n// operate with single tester\nclass TestRunner {\n    friend class TestProcessor;\n    friend struct RunArgsBody;\n    TestRunner(const TestRunner &); // don't copy\n\n    const char *tester_name;\n    StatisticsCollector *stat;\n    std::vector<std::vector<StatisticsCollector::TestCase> > keys;\n\npublic:\n    TesterBase &tester;\n\n    template<typename Test>\n    TestRunner(const char *name, Test *test)\n        : tester_name(name), tester(*static_cast<TesterBase*>(test))\n    {\n        test->tester_name = name;\n    }\n    \n    ~TestRunner() { delete &tester; }\n\n    void init(arg_t value, int threads, Harness::SpinBarrier &barrier, StatisticsCollector *s) {\n        tester.base_init(value, threads, barrier);\n        stat = s;\n        keys.resize(tester.tests_count);\n        for(int testn = 0; testn < tester.tests_count; testn++) {\n            keys[testn].resize(threads);\n            std::string test_name(tester.get_name(testn));\n            for(int threadn = 0; threadn < threads; threadn++)\n                keys[testn][threadn] = stat->SetTestCase(tester_name, test_name.c_str(), threadn);\n        }\n    }\n\n    void run_test(int threadn) {\n        for(int testn = 0; testn < tester.tests_count; testn++) {\n            tester.test_prefix(testn, threadn);\n            tester.barrier->wait();                                 // <<<<<<<<<<<<<<<<< Barrier before running test mode\n            value_t result = tester.test(testn, threadn);\n            stat->AddRoundResult(keys[testn][threadn], result);\n        }\n    }\n\n    void post_process(StatisticsCollector &report) {\n        const int threads = tester.threads_count;\n        for(int testn = 0; testn < tester.tests_count; testn++) {\n            size_t coln = keys[testn][0].getResults().size()-1;\n            value_t rsum = keys[testn][0].getResults()[coln];\n            value_t rmin = rsum, rmax = rsum;\n            for(int threadn = 1; threadn < threads; threadn++) {\n                value_t result = keys[testn][threadn].getResults()[coln];\n                rsum += result; // for both SUM or AVG\n                if(rmin > result) rmin = result;\n                if(rmax < result) rmax = result;\n            }\n            std::string test_name(tester.get_name(testn));\n            const char *rname = tester.get_result_type(testn, TesterBase::SUM);\n            if( rname ) {\n                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);\n                report.AddRoundResult(rsum);\n            }\n            rname = tester.get_result_type(testn, TesterBase::MIN);\n            if( rname ) {\n                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);\n                report.AddRoundResult(rmin);\n            }\n            rname = tester.get_result_type(testn, TesterBase::AVG);\n            if( rname ) {\n                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);\n                report.AddRoundResult(rsum / threads);\n            }\n            rname = tester.get_result_type(testn, TesterBase::MAX);\n            if( rname ) {\n                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);\n                report.AddRoundResult(rmax);\n            }\n        }\n    }\n};\n\nstruct RunArgsBody {\n    const vector<TestRunner*> &run_list;\n    RunArgsBody(const vector<TestRunner*> &a) : run_list(a) { }\n#ifndef __TBB_parallel_for_H\n    void operator()(int thread) const {\n#else\n    void operator()(const tbb::blocked_range<int> &r) const {\n        ASSERT( r.begin() + 1 == r.end(), 0);\n        int thread = r.begin();\n#endif\n        for(size_t i = 0; i < run_list.size(); i++)\n            run_list[i]->run_test(thread);\n    }\n};\n\n//! Main test processor.\n/** Override or use like this:\n class MyTestCollection : public TestProcessor {\n    void factory(arg_t value, int threads) {\n        process( value, threads,\n            run(\"my1\", new tester<my1>() ),\n            run(\"my2\", new tester<my2>() ),\n        end );\n        if(value == threads)\n            stat->Print();\n    }\n};\n*/\n\nclass TestProcessor {\n    friend class TesterBase;\n\n    // <threads, collector>\n    typedef std::map<int, StatisticsCollector *> statistics_collection;\n    statistics_collection stat_by_threads;\n\nprotected:\n    // Members\n    const char *collection_name;\n    // current stat\n    StatisticsCollector *stat;\n    // token\n    size_t end;\n\npublic:\n    StatisticsCollector report;\n\n    // token of tests list\n    template<typename Test>\n    TestRunner *run(const char *name, Test *test) {\n        return new TestRunner(name, test);\n    }\n\n    // iteration processing\n    void process(arg_t value, int threads, ...) {\n        // prepare items\n        stat = stat_by_threads[threads];\n        if(!stat) {\n            stat_by_threads[threads] = stat = new StatisticsCollector((collection_name + Format(\"@%d\", threads)).c_str(), StatisticsCollector::ByAlg);\n            stat->SetTitle(\"Detailed log of %s running with %d threads.\", collection_name, threads);\n        }\n        Harness::SpinBarrier barrier(threads);\n        // init args\n        va_list args; va_start(args, threads);\n        vector<TestRunner*> run_list; run_list.reserve(16);\n        while(true) {\n            TestRunner *item = va_arg(args, TestRunner*);\n            if( !item ) break;\n            item->init(value, threads, barrier, stat);\n            run_list.push_back(item);\n        }\n        va_end(args);\n        std::ostringstream buf;\n        buf << value;\n        const size_t round_number = stat->GetRoundsCount();\n        stat->SetRoundTitle(round_number, buf.str().c_str());\n        report.SetRoundTitle(round_number, buf.str().c_str());\n        // run them\n#ifndef __TBB_parallel_for_H\n        NativeParallelFor(threads, RunArgsBody(run_list));\n#else\n        tbb::parallel_for(tbb::blocked_range<int>(0,threads,1), RunArgsBody(run_list));\n#endif\n        // destroy args\n        for(size_t i = 0; i < run_list.size(); i++) {\n            run_list[i]->post_process(report);\n            delete run_list[i];\n        }\n    }\n\npublic:\n    TestProcessor(const char *name, StatisticsCollector::Sorting sort_by = StatisticsCollector::ByAlg)\n        : collection_name(name), stat(NULL), end(0), report(collection_name, sort_by)\n    { }\n\n    ~TestProcessor() {\n        for(statistics_collection::iterator i = stat_by_threads.begin(); i != stat_by_threads.end(); i++)\n            delete i->second;\n    }\n};\n\n#endif// __TIME_FRAMEWORK_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_hash_map.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// configuration:\n#define TBB_USE_THREADING_TOOLS 0\n\n//! enable/disable std::map tests\n#define STDTABLE 0\n\n//! enable/disable old implementation tests (correct include file also)\n#define OLDTABLE 0\n#define OLDTABLEHEADER \"tbb/concurrent_hash_map-5468.h\"//-4329\n\n//! enable/disable experimental implementation tests (correct include file also)\n#define TESTTABLE 0\n#define TESTTABLEHEADER \"tbb/concurrent_unordered_map.h\"\n\n//! avoid erase()\n#define TEST_ERASE 1\n\n//////////////////////////////////////////////////////////////////////////////////\n\n#include <cstdlib>\n#include <math.h>\n#include \"tbb/tbb_stddef.h\"\n#include <vector>\n#include <map>\n// needed by hash_maps\n#include <stdexcept>\n#include <iterator>\n#include <algorithm>    // Need std::swap\n#include <utility>      // Need std::pair\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/aligned_space.h\"\n#include \"tbb/atomic.h\"\n#define __TBB_concurrent_unordered_set_H\n#include \"tbb/internal/_concurrent_unordered_impl.h\"\n#undef __TBB_concurrent_unordered_set_H\n// for test\n#include \"tbb/spin_mutex.h\"\n#include \"time_framework.h\"\n\n\nusing namespace tbb;\nusing namespace tbb::internal;\n\nstruct IntHashCompare {\n    size_t operator() ( int x ) const { return x; }\n    bool operator() ( int x, int y ) const { return x==y; }\n    static long hash( int x ) { return x; }\n    bool equal( int x, int y ) const { return x==y; }\n};\n\nnamespace version_current {\n    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }\n    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }\n    #include \"tbb/concurrent_hash_map.h\"\n}\ntypedef version_current::tbb::concurrent_hash_map<int,int> IntTable;\n\n#if OLDTABLE\n#undef __TBB_concurrent_hash_map_H\nnamespace version_base {\n    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }\n    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }\n    #include OLDTABLEHEADER\n}\ntypedef version_base::tbb::concurrent_hash_map<int,int> OldTable;\n#endif\n\n#if TESTTABLE\n#undef __TBB_concurrent_hash_map_H\nnamespace version_new {\n    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }\n    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }\n    #include TESTTABLEHEADER\n}\ntypedef version_new::tbb::concurrent_unordered_map<int,int> TestTable;\n#define TESTTABLE 1\n#endif\n\n///////////////////////////////////////\n\nstatic const char *map_testnames[] = {\n    \"1.insert\", \"2.count1st\", \"3.count2nd\", \"4.insert-exists\", \"5.erase \"\n};\n\ntemplate<typename TableType>\nstruct TestTBBMap : TesterBase {\n    TableType Table;\n    int n_items;\n\n    TestTBBMap() : TesterBase(4+TEST_ERASE), Table(MaxThread*4) {}\n    void init() { n_items = value/threads_count; }\n\n    std::string get_name(int testn) {\n        return std::string(map_testnames[testn]);\n    }\n\n    double test(int test, int t)\n    {\n        switch(test) {\n          case 0: // fill\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                Table.insert( std::make_pair(i,i) );\n            }\n            break;\n          case 1: // work1\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                size_t c = Table.count( i );\n                ASSERT( c == 1, NULL);\n            }\n            break;\n          case 2: // work2\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                Table.count( i );\n            }\n            break;\n          case 3: // work3\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                Table.insert( std::make_pair(i,i) );\n            }\n            break;\n#if TEST_ERASE\n          case 4: // clean\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                ASSERT( Table.erase( i ), NULL);\n            }\n#endif\n        }\n        return 0;\n    }\n};\n\ntemplate<typename M>\nstruct TestSTLMap : TesterBase {\n    std::map<int, int> Table;\n    M mutex;\n\n    int n_items;\n    TestSTLMap() : TesterBase(4+TEST_ERASE) {}\n    void init() { n_items = value/threads_count; }\n\n    std::string get_name(int testn) {\n        return std::string(map_testnames[testn]);\n    }\n\n    double test(int test, int t)\n    {\n        switch(test) {\n          case 0: // fill\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                typename M::scoped_lock with(mutex);\n                Table[i] = 0;\n            }\n            break;\n          case 1: // work1\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                typename M::scoped_lock with(mutex);\n                size_t c = Table.count(i);\n                ASSERT( c == 1, NULL);\n            }\n            break;\n          case 2: // work2\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                typename M::scoped_lock with(mutex);\n                Table.count(i);\n            }\n            break;\n          case 3: // work3\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                typename M::scoped_lock with(mutex);\n                Table.insert(std::make_pair(i,i));\n            }\n            break;\n          case 4: // clean\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                typename M::scoped_lock with(mutex);\n                Table.erase(i);\n            }\n        }\n        return 0;\n    }\n};\n\nclass fake_mutex {\npublic:\n    class scoped_lock {\n        fake_mutex *p;\n\n    public:\n        scoped_lock() {}\n        scoped_lock( fake_mutex &m ) { p = &m; }\n        ~scoped_lock() { }\n        void acquire( fake_mutex &m ) { p = &m; }\n        void release() { }\n    };\n};\n\nclass test_hash_map : public TestProcessor {\npublic:\n    test_hash_map() : TestProcessor(\"time_hash_map\") {}\n    void factory(int value, int threads) {\n        if(Verbose) printf(\"Processing with %d threads: %d...\\n\", threads, value);\n        process( value, threads,\n#if STDTABLE\n            run(\"std::map \", new NanosecPerValue<TestSTLMap<spin_mutex> >() ),\n#endif\n#if OLDTABLE\n            run(\"old::hmap\", new NanosecPerValue<TestTBBMap<OldTable> >() ),\n#endif\n            run(\"tbb::hmap\", new NanosecPerValue<TestTBBMap<IntTable> >() ),\n#if TESTTABLE\n            run(\"new::hmap\", new NanosecPerValue<TestTBBMap<TestTable> >() ),\n#endif\n        end );\n        //stat->Print(StatisticsCollector::Stdout);\n        //if(value >= 2097152) stat->Print(StatisticsCollector::HTMLFile);\n    }\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\nint main(int argc, char* argv[]) {\n    if(argc>1) Verbose = true;\n    //if(argc>2) ExtraVerbose = true;\n    MinThread = 1; MaxThread = task_scheduler_init::default_num_threads();\n    ParseCommandLine( argc, argv );\n\n    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, \"expecting scalable allocator library to be loaded. Please build it by:\\n\\t\\tmake tbbmalloc\");\n\n    {\n        test_hash_map the_test;\n        for( int t=MinThread; t <= MaxThread; t++)\n            for( int o=/*2048*/(1<<8)*8; o<2200000; o*=2 )\n                the_test.factory(o, t);\n        the_test.report.SetTitle(\"Nanoseconds per operation of (Mode) for N items in container (Name)\");\n        the_test.report.SetStatisticFormula(\"1AVG per size\", \"=AVERAGE(ROUNDS)\");\n        the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML);\n    }\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_hash_map_fill.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// configuration:\n\n// Size of final table (must be multiple of STEP_*)\nint MAX_TABLE_SIZE = 2000000;\n\n// Specify list of unique percents (5-30,100) to test against. Max 10 values\n#define UNIQUE_PERCENTS PERCENT(5); PERCENT(10); PERCENT(20); PERCENT(30); PERCENT(100)\n\n#define SECONDS_RATIO 1000000 // microseconds\n\n// enable/disable tests for:\n#define BOX1 \"CHMap\"\n#define BOX1TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, SECONDS_RATIO>\n#define BOX1HEADER \"tbb/concurrent_hash_map.h\"\n\n// enable/disable tests for:\n#define BOX2 \"CUMap\"\n#define BOX2TEST ValuePerSecond<Uniques<tbb::concurrent_unordered_map<int,int> >, SECONDS_RATIO>\n#define BOX2HEADER \"tbb/concurrent_unordered_map.h\"\n\n// enable/disable tests for:\n//#define BOX3 \"OLD\"\n#define BOX3TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, SECONDS_RATIO>\n#define BOX3HEADER \"tbb/concurrent_hash_map-5468.h\"\n\n#define TBB_USE_THREADING_TOOLS 0\n//////////////////////////////////////////////////////////////////////////////////\n\n#include <cstdlib>\n#include <math.h>\n#include \"tbb/tbb_stddef.h\"\n#include <vector>\n#include <map>\n// needed by hash_maps\n#include <stdexcept>\n#include <iterator>\n#include <algorithm>    // Need std::swap\n#include <utility>      // Need std::pair\n#include <cstring>      // Need std::memset\n#include <typeinfo>\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/aligned_space.h\"\n#include \"tbb/atomic.h\"\n#define __TBB_concurrent_unordered_set_H\n#include \"tbb/internal/_concurrent_unordered_impl.h\"\n#undef __TBB_concurrent_unordered_set_H\n// for test\n#include \"tbb/spin_mutex.h\"\n#include \"time_framework.h\"\n\n\nusing namespace tbb;\nusing namespace tbb::internal;\n\n/////////////////////////////////////////////////////////////////////////////////////////\n// Input data built for test\nint *Data;\n\n// Main test class used to run the timing tests. All overridden methods are called by the framework\ntemplate<typename TableType>\nstruct Uniques : TesterBase {\n    TableType Table;\n    int n_items;\n\n    // Initializes base class with number of test modes\n    Uniques() : TesterBase(2), Table(MaxThread*16) {\n        //Table->max_load_factor(1); // add stub into hash_map to uncomment it\n    }\n    ~Uniques() {}\n\n    // Returns name of test mode specified by number\n    /*override*/ std::string get_name(int testn) {\n        if(testn == 1) return \"find\";\n        return \"insert\";\n    }\n\n    // Informs the class that value and threads number become known\n    /*override*/ void init() {\n        n_items = value/threads_count; // operations\n    }\n\n    // Informs the class that the test mode for specified thread is about to start\n    /*override*/ void test_prefix(int testn, int t) {\n        barrier->wait();\n        if(Verbose && !t && testn) printf(\"%s: inserted %u, %g%% of operations\\n\", tester_name, unsigned(Table.size()), 100.0*Table.size()/(value*testn));\n    }\n\n    // Executes test mode for a given thread. Return value is ignored when used with timing wrappers.\n    /*override*/ double test(int testn, int t)\n    {\n        if( testn == 0 ) { // do insertions\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                Table.insert( std::make_pair(Data[i],t) );\n            }\n        } else { // do last finds\n            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {\n                size_t c =\n                    Table.count( Data[i] );\n                ASSERT( c == 1, NULL ); // must exist\n            }\n        }\n        return 0;\n    }\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n#undef max\n#include <limits>\n\n// Using BOX declarations from configuration\n#include \"time_sandbox.h\"\n\nint rounds = 0;\n// Prepares the input data for given unique percent\nvoid execute_percent(test_sandbox &the_test, int p) {\n    int input_size = MAX_TABLE_SIZE*100/p;\n    Data = new int[input_size];\n    int uniques = p==100?std::numeric_limits<int>::max() : MAX_TABLE_SIZE;\n    ASSERT(p==100 || p <= 30, \"Function is broken for %% > 30 except for 100%%\");\n    for(int i = 0; i < input_size; i++)\n        Data[i] = (rand()*rand())%uniques;\n    for(int t = MinThread; t <= MaxThread; t++)\n        the_test.factory(input_size, t); // executes the tests specified in BOX-es for given 'value' and threads\n    the_test.report.SetRoundTitle(rounds++, \"%d%%\", p);\n}\n#define PERCENT(x) execute_percent(the_test, x)\n\nint main(int argc, char* argv[]) {\n    if(argc>1) Verbose = true;\n    //if(argc>2) ExtraVerbose = true;\n    MinThread = 1; MaxThread = task_scheduler_init::default_num_threads();\n    ParseCommandLine( argc, argv );\n    if(getenv(\"TABLE_SIZE\"))\n        MAX_TABLE_SIZE = atoi(getenv(\"TABLE_SIZE\"));\n\n    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, \"expecting scalable allocator library to be loaded. Please build it by:\\n\\t\\tmake tbbmalloc\");\n    // Declares test processor\n    test_sandbox the_test(\"time_hash_map_fill\"/*, StatisticsCollector::ByThreads*/);\n    srand(10101);\n    UNIQUE_PERCENTS; // test the percents\n    the_test.report.SetTitle(\"Operations per microsecond\");\n    the_test.report.SetRunInfo(\"Items\", MAX_TABLE_SIZE);\n    the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); // Write files\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_hash_map_fill.html",
    "content": "<HTML><BODY>\n<H2>time_hash_map_fill</H2>\n<P><a href=time_hash_map_fill.cpp>time_hash_map_fill.cpp</a> is a micro-benchmark specifically designed to highlight aspects of concurrent resizing algorithm of the hash tables.\nIt was derived from the Count Strings example that counts the number of unique words. But to exclude synchronization on the counters from the picture,\nit was simplified to build just a set of unique numbers from an input array. The array is filled evenly by using a pseudo-random number generator from the standard C library for various proportions of unique numbers.\nFor example, for 5% of unique numbers, the same number is repeated 20 times on average. Together, it gives 5% of actual insertions and 95% are just lookups. However, in the beginning, there are more new keys occur than in the end.\nIn addition, a size of the source array correlates with input rates in order to produce the same number of unique keys at the end, and so exclude cache effects from the equation.\n</P>\n<H2>Diagram</H2><img src=\"time_hash_map_fill.gif\"/>\n<H3>Prepare results</H3>\n<P>This benchmark outputs results in Excel* and html file formats by default. To generate text (CSV) file instead, specify STAT_FORMAT=pivot-csv evironment variable. To change the default table size, set TABLE_SIZE.\n<code><b><pre>src$    make time_hash_map_fill args=-v STAT_FORMAT=pivot-csv TABLE_SIZE=250000</pre></b></code>Or to get statistics from different runs:\n<code><b><pre>src$    make time_hash_map_fill TABLE_SIZE=50000 run_cmd=\"bash ../../src/perf/<a href=run_statistics.sh>run_statistics.sh</a>\"</pre></b></code>\n</P>\n<H3>Build diagram</H3>You can use <a href=\"http://ploticus.sourceforge.net/\">Ploticus</a> to build diagram from the prepared data using this html file as a script. But first, the input data file should be sorted to join lines from different runs together, e.g.:\n<code><b><pre>src$    sort -t , -k 1dr,2 -k 3n,4 -k 7n,7 ../build/<i>{scrambled_path}</i>/time_hash_map_fill.csv -o perf/time_hash_map_fill.csv</pre></b></code>Here, field 7 is \"Column\" field that contains input rates because run_statistics.sh adds hostname and number of the run as 5 and 6 fields. Now, to build gif diagram, run:\n<code><b><pre>perf$   pl -maxrows 200000 -maxfields 1500000 -maxvector 1200000 -gif -scale 1.8 time_hash_map_fill.html</pre></b></code>\n<H3>Script body</H3>\n<hr/><pre>\n\n#setifnotgiven NAMES = $makelist(\"1.CHMap 2.CUMap 3.OLD\")\n#setifnotgiven LABLESIZE = 0.06\n\n#proc settings\n  encodenames: yes\n  units: cm\n\n#proc getdata\n  file: time_hash_map_fill.csv\n  fieldnameheader: yes\n  delim: comma\n  showdata: no\n  select: @@Mode = insert\n  pf_fieldnames: Name Mode Threads Value\n  filter:\n    ##print @@Name,\"@@Items on @@Column\",@@3,@@Value\n\n#endproc\n\n#proc page\n  pagesize: 70 50\n  tightcrop: yes\n#endproc\n\n#proc processdata\n  action: summary\n  fields: Name Mode Threads\n  valfield: Value\n  fieldnames: Name Mode Threads Average sd sem n_obs Min Max\n  showdata: no\n\n#proc categories\n  axis: x\n  datafield: Mode\n\n#proc areadef\n  title: Throughput on Insert operation\n  titledetails: size=14  align=C\n  areaname: slide\n  xscaletype: categories\n  xautorange: datafield=Mode\n  xaxis.stubs: usecategories\n  xaxis.label: Threads across table sizes and % of input rates\n//  yrange: 0 70\n  yautorange: datafield=Max,Min\n  yaxis.stubs: inc\n  yaxis.label: ops/ns\n//  yaxis.stubformat: %3.1f\n  autowidth: 1.1\n  autoheight: 0.07\n  frame: yes\n\n#for LABEL in @NAMES\n#set NLABEL = $arithl(@NLABEL+1)\n#set COLOR = $icolor( @NLABEL )\n#proc legendentry\n  label: @LABEL\n  sampletype: color\n  details: @COLOR\n\n#procdef catlines\n  select: @Name = @LABEL\n  catfield: Mode\n  subcatfield: Threads\n  subcats: auto\n  plotwidth: 0.8\n  #saveas C\n\n#proc catlines\n  #clone C\n  dpsymbol: shape=square radius=@LABLESIZE style=solid color=@COLOR\n  valfield: Average\n  errfield: sd\n\n#proc catlines\n  #clone C\n  valfield: Max\n  dpsymbol: shape=triangle radius=@LABLESIZE style=solid color=@COLOR\n\n#proc catlines\n  #clone C\n  valfield: Min\n  dpsymbol: shape=downtriangle radius=@LABLESIZE style=solid color=@COLOR\n\n#endloop\n\n#proc legend\n  location: 3.2 max\n  seglen: 0.2\n#endproc\n</pre>\n<HR/>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_locked_work.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n////// Test configuration ////////////////////////////////////////////////////\n#define SECONDS_RATIO 1000000 // microseconds\n\n#ifndef REPEAT_K\n#define REPEAT_K 50 // repeat coefficient\n#endif\n\nint outer_work[] = {/*256,*/ 64, 16, 4, 0};\nint inner_work[] = {32, 8, 0 };\n\n// keep it to calibrate the time of work without synchronization\n#define BOX1 \"baseline\"\n#define BOX1TEST TimeTest< TBB_Mutex<tbb::null_mutex>, SECONDS_RATIO >\n\n// enable/disable tests for:\n#define BOX2 \"spin_mutex\"\n#define BOX2TEST TimeTest< TBB_Mutex<tbb::spin_mutex>, SECONDS_RATIO >\n\n// enable/disable tests for:\n#define BOX3 \"spin_rw_mutex\"\n#define BOX3TEST TimeTest< TBB_Mutex<tbb::spin_rw_mutex>, SECONDS_RATIO >\n\n// enable/disable tests for:\n#define BOX4 \"queuing_mutex\"\n#define BOX4TEST TimeTest< TBB_Mutex<tbb::queuing_mutex>, SECONDS_RATIO >\n\n// enable/disable tests for:\n//#define BOX5 \"queuing_rw_mutex\"\n#define BOX5TEST TimeTest< TBB_Mutex<tbb::queuing_rw_mutex>, SECONDS_RATIO >\n\n//////////////////////////////////////////////////////////////////////////////\n\n#include <cstdlib>\n#include <math.h>\n#include <algorithm>    // Need std::swap\n#include <utility>      // Need std::pair\n#include <sstream>\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/null_mutex.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/mutex.h\"\n\n#if INTEL_TRIAL==2\n#include \"tbb/parallel_for.h\" // enable threading by TBB scheduler\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/blocked_range.h\" \n#endif\n// for test\n#include \"time_framework.h\"\n\nusing namespace tbb;\nusing namespace tbb::internal;\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\n//! base class for tests family\nstruct TestLocks : TesterBase {\n    // Inherits \"value\", \"threads_count\", and other variables\n    TestLocks() : TesterBase(/*number of modes*/sizeof(outer_work)/sizeof(int)) {}\n    //! returns name of test part/mode\n    /*override*/std::string get_name(int testn) {\n        std::ostringstream buf;\n        buf.width(4); buf.fill('0');\n        buf << outer_work[testn]; // mode number\n        return buf.str();\n    }\n    //! enables results types and returns theirs suffixes\n    /*override*/const char *get_result_type(int, result_t type) const {\n        switch(type) {\n            case MIN: return \" min\";\n            case MAX: return \" max\";\n            default: return 0;\n        }\n    }\n    //! repeats count\n    int repeat_until(int /*test_n*/) const {\n        return REPEAT_K*100;//TODO: suggest better?\n    }\n    //! fake work\n    void do_work(int work) volatile {\n        for(int i = 0; i < work; i++) {\n            volatile int x = i;\n            __TBB_Pause(0); // just to call inline assembler\n            x *= work/threads_count;\n        }\n    }\n};\n\n//! template test unit for any of TBB mutexes\ntemplate<typename M>\nstruct TBB_Mutex : TestLocks {\n    M mutex;\n\n    double test(int testn, int /*threadn*/)\n    {\n        for(int r = 0; r < repeat_until(testn); ++r) {\n            do_work(outer_work[testn]);\n            {\n                typename M::scoped_lock with(mutex);\n                do_work(/*inner work*/value);\n            }\n        }\n        return 0;\n    }\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\n//Using BOX declarations\n#include \"time_sandbox.h\"\n\n// run tests for each of inner work value\nvoid RunLoops(test_sandbox &the_test, int thread) {\n    for( unsigned i=0; i<sizeof(inner_work)/sizeof(int); ++i )\n        the_test.factory(inner_work[i], thread);\n}\n\nint main(int argc, char* argv[]) {\n    if(argc>1) Verbose = true;\n    int DefThread = task_scheduler_init::default_num_threads();\n    MinThread = 1; MaxThread = DefThread+1;\n    ParseCommandLine( argc, argv );\n    ASSERT(MinThread <= MaxThread, 0);\n#if INTEL_TRIAL && defined(__TBB_parallel_for_H)\n    task_scheduler_init me(MaxThread);\n#endif\n    {\n        test_sandbox the_test(\"time_locked_work\", StatisticsCollector::ByThreads);\n        //TODO: refactor this out as RunThreads(test&)\n        for( int t = MinThread; t < DefThread && t <= MaxThread; t *= 2)\n            RunLoops( the_test, t ); // execute undersubscribed threads\n        if( DefThread > MinThread && DefThread <= MaxThread )\n            RunLoops( the_test, DefThread ); // execute on all hw threads\n        if( DefThread < MaxThread)\n            RunLoops( the_test, MaxThread ); // execute requested oversubscribed threads\n\n        the_test.report.SetTitle(\"Time of lock/unlock for mutex Name with Outer and Inner work\");\n        //the_test.report.SetStatisticFormula(\"1AVG per size\", \"=AVERAGE(ROUNDS)\");\n        the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML, /*ModeName*/ \"Outer work\");\n    }\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_lru_cache_throughput.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../examples/common/utility/utility.h\"\n#include \"tbb/tick_count.h\"\n//#include <tbb/parallel_for.h>\n#include \"tbb/task_scheduler_init.h\" //for number of threads\n#include <functional>\n\n#include \"coarse_grained_raii_lru_cache.h\"\n#define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1\n#include \"tbb/concurrent_lru_cache.h\"\n\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n\n#include \"../src/test/harness.h\"\n#include \"../src/test/harness_barrier.h\"\n\n#include <vector>\n#include <algorithm>\n#include \"tbb/mutex.h\"\n\n//TODO: probably move this to separate header utlity file\nnamespace micro_benchmarking{\nnamespace utils{\n    template <typename type>\n    void disable_elimination(type const& v){\n        volatile type dummy = v;\n        (void) dummy;\n    }\n    //Busy work and calibration helpers\n    unsigned int one_us_iters = 345; // default value\n\n    //TODO: add a CLI parameter for calibration run\n    // if user wants to calibrate to microseconds on particular machine, call\n    // this at beginning of program; sets one_us_iters to number of iters to\n    // busy_wait for approx. 1 us\n    void calibrate_busy_wait() {\n        const unsigned niter = 1000000;\n        tbb::tick_count t0 = tbb::tick_count::now();\n        for (volatile unsigned int i=0; i<niter; ++i) continue;\n        tbb::tick_count t1 = tbb::tick_count::now();\n\n        one_us_iters = (unsigned int)(niter/(t1-t0).seconds())*1e-6;\n    }\n\n    void busy_wait(int us)\n    {\n        unsigned int iter = us*one_us_iters;\n        for (volatile unsigned int i=0; i<iter; ++i) continue;\n    }\n}\n}\n\nstruct parameter_pack{\n    size_t time_window_sec;\n    size_t time_check_granularity_ops;\n    size_t cache_lru_history_size;\n    size_t time_of_item_use_usec;\n    size_t cache_miss_percent;\n    int threads_number;\n    size_t weight_of_initiation_call_usec;\n    bool use_serial_initiation_function;\n    parameter_pack(\n            size_t a_time_window_sec\n            ,size_t a_time_check_granularity_ops\n            ,size_t a_cache_lru_history_size\n            ,size_t a_time_of_item_use_usec, size_t a_cache_miss_percent\n            , int a_threads_number ,size_t a_weight_of_initiation_call_usec\n            , bool a_use_serial_initiation_function\n    )   :\n        time_window_sec(a_time_window_sec)\n        ,time_check_granularity_ops(a_time_check_granularity_ops)\n        ,cache_lru_history_size(a_cache_lru_history_size)\n        ,time_of_item_use_usec(a_time_of_item_use_usec)\n        ,cache_miss_percent(a_cache_miss_percent)\n        ,threads_number(a_threads_number)\n        ,weight_of_initiation_call_usec(a_weight_of_initiation_call_usec)\n        ,use_serial_initiation_function(a_use_serial_initiation_function)\n    {}\n};\n\nstruct return_size_t {\n    size_t m_weight_of_initiation_call_usec;\n    bool use_serial_initiation_function;\n    return_size_t(size_t a_weight_of_initiation_call_usec, bool a_use_serial_initiation_function)\n        :m_weight_of_initiation_call_usec(a_weight_of_initiation_call_usec), use_serial_initiation_function(a_use_serial_initiation_function)\n    {}\n    size_t operator()(size_t key){\n        static tbb::mutex mtx;\n        if (use_serial_initiation_function){\n            mtx.lock();\n        }\n        micro_benchmarking::utils::busy_wait(m_weight_of_initiation_call_usec);\n        if (use_serial_initiation_function){\n            mtx.unlock();\n        }\n\n        return key;\n    }\n};\n\ntemplate< typename a_cache_type>\nstruct throughput {\n    typedef throughput self_type;\n    typedef a_cache_type cache_type;\n\n    parameter_pack m_parameter_pack;\n\n\n    const size_t per_thread_sample_size ;\n    typedef std::vector<size_t> access_sequence_type;\n    access_sequence_type m_access_sequence;\n    cache_type m_cache;\n    Harness::SpinBarrier m_barrier;\n    tbb::atomic<size_t> loops_count;\n\n    throughput(parameter_pack a_parameter_pack)\n        :m_parameter_pack(a_parameter_pack)\n        ,per_thread_sample_size(m_parameter_pack.cache_lru_history_size *(1 +  m_parameter_pack.cache_miss_percent/100))\n        ,m_access_sequence(m_parameter_pack.threads_number * per_thread_sample_size )\n        ,m_cache(return_size_t(m_parameter_pack.weight_of_initiation_call_usec,m_parameter_pack.use_serial_initiation_function),m_parameter_pack.cache_lru_history_size)\n\n    {\n        loops_count=0;\n        //TODO: check if changing from generating longer sequence to generating indexes in a specified range (i.e. making per_thread_sample_size fixed) give any change\n        std::generate(m_access_sequence.begin(),m_access_sequence.end(),std::rand);\n    }\n\n    size_t operator()(){\n        struct _{ static void  retrieve_from_cache(self_type* _this, size_t thread_index){\n            parameter_pack& p = _this->m_parameter_pack;\n            access_sequence_type::iterator const begin_it =_this->m_access_sequence.begin()+ thread_index * _this->per_thread_sample_size;\n            access_sequence_type::iterator const end_it = begin_it +  _this->per_thread_sample_size;\n\n            _this->m_barrier.wait();\n            tbb::tick_count start = tbb::tick_count::now();\n\n            size_t local_loops_count =0;\n            do {\n                size_t part_of_the_sample_so_far = (local_loops_count * p.time_check_granularity_ops) % _this->per_thread_sample_size;\n                access_sequence_type::iterator const iteration_begin_it = begin_it + part_of_the_sample_so_far;\n                access_sequence_type::iterator const iteration_end_it = iteration_begin_it +\n                        (std::min)(p.time_check_granularity_ops, _this->per_thread_sample_size - part_of_the_sample_so_far);\n\n                for (access_sequence_type::iterator it = iteration_begin_it; it < iteration_end_it; ++it){\n                    typename cache_type::handle h = _this->m_cache[*it];\n                    micro_benchmarking::utils::busy_wait(p.time_of_item_use_usec);\n                    micro_benchmarking::utils::disable_elimination(h.value());\n                }\n                ++local_loops_count;\n            }while((tbb::tick_count::now()-start).seconds() < p.time_window_sec);\n            _this->loops_count+=local_loops_count;\n        }};\n        m_barrier.initialize(m_parameter_pack.threads_number);\n\n        NativeParallelFor(m_parameter_pack.threads_number,std::bind1st(std::ptr_fun(&_::retrieve_from_cache),this));\n\n        return loops_count * m_parameter_pack.time_check_granularity_ops;\n    }\n};\n\nint main(int argc,const char** args ){\n\n    size_t time_window_sec = 10;\n    size_t cache_lru_history_size = 1000;\n    size_t time_check_granularity_ops = 200;\n    size_t time_of_item_use_usec = 100;\n    size_t cache_miss_percent = 5;\n    int threads_number =tbb::task_scheduler_init::default_num_threads();\n    size_t weight_of_initiation_call_usec =1000;\n    bool use_serial_initiation_function = false;\n    bool use_coarse_grained_locked_cache = false;\n\n    parameter_pack p(time_window_sec, time_check_granularity_ops, cache_lru_history_size,time_of_item_use_usec,cache_miss_percent,threads_number,weight_of_initiation_call_usec,use_serial_initiation_function);\n\n    utility::parse_cli_arguments(argc,args,utility::cli_argument_pack()\n            .arg(p.cache_lru_history_size,\"cache-lru-history-size\",\"\")\n            .arg(p.time_window_sec,\"time-window\",\"time frame for measuring, in seconds\")\n            .arg(p.threads_number,\"n-of-threads\",\"number of threads to run on\")\n            .arg(p.time_of_item_use_usec,\"time-of-item-use\",\"time between  consequent requests to the cache, in microseconds\")\n            .arg(p.cache_miss_percent,\"cache-miss-percent\",\"cache miss percent \")\n            .arg(p.weight_of_initiation_call_usec,\"initiation-call-weight\",\"time occupied by a single call to initiation function, in microseconds\")\n            .arg(p.use_serial_initiation_function,\"use-serial-initiation-function\",\"limit lock-based serial initiation function\")\n            .arg(use_coarse_grained_locked_cache,\"use-locked-version\",\"use stl coarse grained lock based version\")\n            );\n\n    typedef tbb::concurrent_lru_cache<size_t,size_t,return_size_t> tbb_cache;\n    typedef coarse_grained_raii_lru_cache<size_t,size_t,return_size_t> coarse_grained_locked_cache;\n\n    size_t operations =0;\n    if (!use_coarse_grained_locked_cache){\n        operations = throughput<tbb_cache>(p)();\n    }else{\n        operations = throughput<coarse_grained_locked_cache>(p)();\n    }\n    std::cout<<\"operations: \"<<operations<<std::endl;\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_parallel_for_each.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <vector>\n#include <list>\n#include <iostream>\n#include <cstdlib>\n#include <algorithm>\n#include <string>\n\n#include \"tbb/parallel_for_each.h\"\n#include \"tbb/tick_count.h\"\n\ntemplate <typename Type>\nvoid foo( Type &f ) {\n    f += 1.0f;\n}\n\ntemplate <typename Container>\nvoid test( std::string testName, const int N, const int numRepeats ) {\n    typedef typename Container::value_type Type;\n    Container v;\n\n    for ( int i = 0; i < N; ++i ) {\n        v.push_back( static_cast<Type>(std::rand()) );\n    }\n\n    std::vector<double> times;\n    times.reserve( numRepeats );\n\n    for ( int i = 0; i < numRepeats; ++i ) {\n        tbb::tick_count t0 = tbb::tick_count::now();\n        tbb::parallel_for_each( v.begin(), v.end(), foo<Type> );\n        tbb::tick_count t1 = tbb::tick_count::now();\n        times.push_back( (t1 - t0).seconds()*1e+3 );\n    }\n\n    std::sort( times.begin(), times.end() );\n    std::cout << \"Test \" << testName << std::endl\n        << \"min \" << times[times.size() / 20] << \" ms \" << std::endl\n        << \"med \" << times[times.size() / 2] << \" ms \" << std::endl\n        << \"max \" << times[times.size() - times.size() / 20 - 1] << \" ms \" << std::endl;\n}\n\nint main( int argc, char* argv[] ) {\n    const int N = argc > 1 ? std::atoi( argv[1] ) : 10 * 1000;\n    const int numRepeats = argc > 2 ? std::atoi( argv[2] ) : 10;\n\n    test< std::vector<float> >( \"std::vector<float>\", N, numRepeats );\n    test< std::list<float> >( \"std::list<float>\", N / 100, numRepeats );\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_sandbox.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TIME_FRAMEWORK_H__\n#error time_framework.h must be included\n#endif\n\n#define INJECT_TBB namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }\n#define INJECT_TBB5 namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }\n\n#ifndef INJECT_BOX_NAMES\n#if defined(__TBB_task_H) || defined(__TBB_concurrent_unordered_internal_H) || defined(__TBB_reader_writer_lock_H) || defined(__TBB__concurrent_unordered_impl_H)\n#define INJECT_BOX_NAMES INJECT_TBB INJECT_TBB5\n#else\n#define INJECT_BOX_NAMES INJECT_TBB\n#endif\n#endif\n\n#ifdef BOX1\nnamespace sandbox1 {\n    INJECT_BOX_NAMES\n#   ifdef BOX1HEADER\n#   include BOX1HEADER\n#   endif\n    typedef ::BOX1TEST testbox;\n}\n#endif\n#ifdef BOX2\nnamespace sandbox2 {\n    INJECT_BOX_NAMES\n#   ifdef BOX2HEADER\n#   include BOX2HEADER\n#   endif\n    typedef ::BOX2TEST testbox;\n}\n#endif\n#ifdef BOX3\nnamespace sandbox3 {\n    INJECT_BOX_NAMES\n#   ifdef BOX3HEADER\n#   include BOX3HEADER\n#   endif\n    typedef ::BOX3TEST testbox;\n}\n#endif\n#ifdef BOX4\nnamespace sandbox4 {\n    INJECT_BOX_NAMES\n#   ifdef BOX4HEADER\n#   include BOX4HEADER\n#   endif\n    typedef ::BOX4TEST testbox;\n}\n#endif\n#ifdef BOX5\nnamespace sandbox5 {\n    INJECT_BOX_NAMES\n#   ifdef BOX5HEADER\n#   include BOX5HEADER\n#   endif\n    typedef ::BOX5TEST testbox;\n}\n#endif\n#ifdef BOX6\nnamespace sandbox6 {\n    INJECT_BOX_NAMES\n#   ifdef BOX6HEADER\n#   include BOX6HEADER\n#   endif\n    typedef ::BOX6TEST testbox;\n}\n#endif\n#ifdef BOX7\nnamespace sandbox7 {\n    INJECT_BOX_NAMES\n#   ifdef BOX7HEADER\n#   include BOX7HEADER\n#   endif\n    typedef ::BOX7TEST testbox;\n}\n#endif\n#ifdef BOX8\nnamespace sandbox8 {\n    INJECT_BOX_NAMES\n#   ifdef BOX8HEADER\n#   include BOX8HEADER\n#   endif\n    typedef ::BOX8TEST testbox;\n}\n#endif\n#ifdef BOX9\nnamespace sandbox9 {\n    INJECT_BOX_NAMES\n#   ifdef BOX9HEADER\n#   include BOX9HEADER\n#   endif\n    typedef ::BOX9TEST testbox;\n}\n#endif\n\n//if harness.h included\n#if defined(ASSERT) && !HARNESS_NO_PARSE_COMMAND_LINE\n#ifndef TEST_PREFIX\n#define TEST_PREFIX if(Verbose) printf(\"Processing with %d threads: %ld...\\n\", threads, long(value));\n#endif\n#endif//harness included\n\n#ifndef TEST_PROCESSOR_NAME\n#define TEST_PROCESSOR_NAME test_sandbox\n#endif\n\nclass TEST_PROCESSOR_NAME : public TestProcessor {\npublic:\n    TEST_PROCESSOR_NAME(const char *name, StatisticsCollector::Sorting sort_by = StatisticsCollector::ByAlg)\n        : TestProcessor(name, sort_by) {}\n    void factory(arg_t value, int threads) {\n#ifdef TEST_PREFIX\n        TEST_PREFIX\n#endif\n        process( value, threads,\n#define RUNBOX(n) run(#n\".\"BOX##n, new sandbox##n::testbox() )\n#ifdef BOX1\n        RUNBOX(1),\n#endif\n#ifdef BOX2\n        RUNBOX(2),\n#endif\n#ifdef BOX3\n        RUNBOX(3),\n#endif\n#ifdef BOX4\n        RUNBOX(4),\n#endif\n#ifdef BOX5\n        RUNBOX(5),\n#endif\n#ifdef BOX6\n        RUNBOX(6),\n#endif\n#ifdef BOX7\n        RUNBOX(7),\n#endif\n#ifdef BOX8\n        RUNBOX(8),\n#endif\n#ifdef BOX9\n        RUNBOX(9),\n#endif\n        end );\n#ifdef TEST_POSTFIX\n        TEST_POSTFIX\n#endif\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_split_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nstatic double bm_split_node(tbb::flow::graph& g, int nIter);\nstatic double bm_broadcast_node(tbb::flow::graph& g, int nIter);\nstatic double bm_queue_node(tbb::flow::graph& g, int nIter);\n\ntypedef int my_type;\n//typedef std::vector<int> my_type;\n\nconst int nIter = 1 << 24; //16M\nconst int nSize = 100000000;\n\nint main()\n{\n    //set up one thread to eliminate scheduler overheads\n    tbb::task_scheduler_init tsi(1);\n\n    tbb::flow::graph g;\n\n    //1. queue_node benchmark; calculate queue_node time + plus threads creation time (if we have multi-threading)\n    std::cout << \"queue benchmark: number of calls of putting element:\" << nIter;\n    const double tQueue = bm_queue_node(g, nIter);\n    std::cout << \";  time:\" << tQueue << std::endl << std::endl;\n\n    //2. split_node benchmark\n    std::cout << \"split_node benchmark: number of calls:\" << nIter;\n    const double tSplitNode = bm_split_node(g, nIter);\n    //output split_node benchmark result\n    std::cout << \";  time:\" << tSplitNode << std::endl;\n    std::cout << \"exclusive split_node time:\" << tSplitNode - tQueue << std::endl << std::endl;\n\n    //3. broadcast_node benchmark\n    std::cout << \"broadcast_node benchmark: number of calls:\" << nIter;\n    const double tBNode = bm_broadcast_node(g, nIter);\n    //output broadcast_node benchmark result\n    std::cout << \";  time:\" << tBNode << std::endl;\n    std::cout << \"exclusive broadcast_node time:\" << tBNode - tQueue << std::endl;\n\n    return 0;\n}\n\n//! Dummy executing split_node, \"nIter\" calls; Returns time in seconds.\ndouble bm_split_node(tbb::flow::graph& g, int nIter)\n{\n    my_type v1(nSize);\n\n    tbb::flow::queue_node<my_type> my_queue1(g);\n    tbb::flow::tuple<my_type> my_tuple(1);\n\n    tbb::flow::split_node< tbb::flow::tuple<my_type> > my_split_node(g);\n    make_edge(tbb::flow::get<0>(my_split_node.output_ports()), my_queue1);\n\n    const tbb::tick_count t0 = tbb::tick_count::now();\n\n    //using split_node\n    for (int i = 0; i < nIter; ++i)\n        my_split_node.try_put(my_tuple); \n\n    //barrier sync\n    g.wait_for_all();\n\n    return (tbb::tick_count::now() - t0).seconds();\n}\n\n//! Dummy executing broadcast_node; \"nIter\" calls; Returns time in seconds.\ndouble bm_broadcast_node(tbb::flow::graph& g, int nIter)\n{\n    tbb::flow::queue_node<my_type> my_queue(g);\n    tbb::flow::broadcast_node<my_type> my_broadcast_node(g);\n    make_edge(my_broadcast_node, my_queue);\n\n    my_type v(nSize);\n\n    const tbb::tick_count t0 = tbb::tick_count::now();\n\n    //using broadcast_node\n    for (int i = 0; i < nIter; ++i)\n        my_broadcast_node.try_put(v);\n    //barrier sync\n    g.wait_for_all();\n\n    return (tbb::tick_count::now() - t0).seconds();\n}\n\ndouble bm_queue_node(tbb::flow::graph& g, int nIter)\n{\n    tbb::flow::queue_node<my_type> first_queue(g);\n\n    my_type v(nSize);\n\n    tbb::tick_count t0 = tbb::tick_count::now();\n    //using queue_node\n    for (int i = 0; i < nIter; ++i)\n        first_queue.try_put(v);\n    g.wait_for_all();\n    return (tbb::tick_count::now() - t0).seconds();\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/perf/time_vector.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//#define DO_SCALABLEALLOC\n\n#include <cstdlib>\n#include <cmath>\n#include <vector>\n#include <algorithm>\n#include <functional>\n#include <numeric>\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/spin_mutex.h\"\n#ifdef DO_SCALABLEALLOC\n#include \"tbb/scalable_allocator.h\"\n#endif\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#define HARNESS_CUSTOM_MAIN 1\n#include \"../test/harness.h\"\n//#include \"harness_barrier.h\"\n#include \"../test/harness_allocator.h\"\n#define STATISTICS_INLINE\n#include \"statistics.h\"\n\nusing namespace tbb;\nbool ExtraVerbose = false;\n\nclass Timer {\n    tbb::tick_count tick;\npublic:\n    Timer() { tick = tbb::tick_count::now(); }\n    double get_time()  { return (tbb::tick_count::now() - tick).seconds(); }\n    double diff_time(const Timer &newer) { return (newer.tick - tick).seconds(); }\n    double mark_time() { tick_count t1(tbb::tick_count::now()), t2(tick); tick = t1; return (t1 - t2).seconds(); }\n    double mark_time(const Timer &newer) { tick_count t(tick); tick = newer.tick; return (tick - t).seconds(); }\n};\n\n/************************************************************************/\n/* TEST1                                                                */\n/************************************************************************/\n#define mk_vector_test1(v, a) vector_test1<v<Timer, static_counting_allocator<a<Timer> > >, v<double, static_counting_allocator<a<double> > > >\ntemplate<class timers_vector_t, class values_vector_t>\nclass vector_test1 {\n    const char *mode;\n    StatisticsCollector &stat;\n    StatisticsCollector::TestCase key[16];\n\npublic:\n    vector_test1(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}\n\n    vector_test1 &operator()(size_t len) {\n        if(Verbose) printf(\"test1<%s>(%u): collecting timing statistics\\n\", mode, unsigned(len));\n        __TBB_ASSERT(sizeof(Timer) == sizeof(double), NULL);\n        static const char *test_names[] = {\n            \"b)creation wholly\",\n            \"a)creation by push\",\n            \"c)operation time per item\",\n            0 };\n        for(int i = 0; test_names[i]; ++i) key[i] = stat.SetTestCase(test_names[i], mode, len);\n\n        Timer timer0; timers_vector_t::allocator_type::init_counters();\n        timers_vector_t tv(len);\n        Timer timer1; values_vector_t::allocator_type::init_counters();\n        values_vector_t dv;\n        for (size_t i = 0; i < len; ++i)\n            dv.push_back( i );\n        Timer timer2;\n        for (size_t i = 0; i < len; ++i)\n        {\n            dv[len-i-1] = timer0.diff_time(tv[i]);\n            tv[i].mark_time();\n        }\n        stat.AddStatisticValue( key[2], \"1total, ms\", \"%.3f\", timer2.get_time()*1e+3 );\n        stat.AddStatisticValue( key[1], \"1total, ms\", \"%.3f\", timer1.diff_time(timer2)*1e+3 );\n        stat.AddStatisticValue( key[0], \"1total, ms\", \"%.3f\", timer0.diff_time(timer1)*1e+3 );\n        //allocator statistics\n        stat.AddStatisticValue( key[0], \"2total allocations\", \"%d\", int(timers_vector_t::allocator_type::allocations) );\n        stat.AddStatisticValue( key[1], \"2total allocations\", \"%d\", int(values_vector_t::allocator_type::allocations) );\n        stat.AddStatisticValue( key[2], \"2total allocations\", \"%d\",  0);\n        stat.AddStatisticValue( key[0], \"3total alloc#items\", \"%d\", int(timers_vector_t::allocator_type::items_allocated) );\n        stat.AddStatisticValue( key[1], \"3total alloc#items\", \"%d\", int(values_vector_t::allocator_type::items_allocated) );\n        stat.AddStatisticValue( key[2], \"3total alloc#items\", \"%d\",  0);\n        //remarks\n        stat.AddStatisticValue( key[0], \"9note\", \"segment creation time, us:\");\n        stat.AddStatisticValue( key[2], \"9note\", \"average op-time per item, us:\");\n        Timer last_timer(timer2); double last_value = 0;\n        for (size_t j = 0, i = 2; i < len; i *= 2, j++) {\n            stat.AddRoundResult( key[0], (dv[len-i-1]-last_value)*1e+6 );\n            last_value = dv[len-i-1];\n            stat.AddRoundResult( key[2], last_timer.diff_time(tv[i])/double(i)*1e+6 );\n            last_timer = tv[i];\n            stat.SetRoundTitle(j, i);\n        }\n        tv.clear(); dv.clear();\n        //__TBB_ASSERT(timers_vector_t::allocator_type::items_allocated == timers_vector_t::allocator_type::items_freed, NULL);\n        //__TBB_ASSERT(values_vector_t::allocator_type::items_allocated == values_vector_t::allocator_type::items_freed, NULL);\n    \treturn *this;\n    }\n};\n\n/************************************************************************/\n/* TEST2                                                                */\n/************************************************************************/\n#define mk_vector_test2(v, a) vector_test2<v<size_t, a<size_t> > >\ntemplate<class vector_t>\nclass vector_test2 {\n    const char *mode;\n    static const int ntrial = 10;\n    StatisticsCollector &stat;\n\npublic:\n    vector_test2(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}\n\n    vector_test2 &operator()(size_t len) {\n        if(Verbose) printf(\"test2<%s>(%u): performing standard transformation sequence on vector\\n\", mode, unsigned(len));\n        StatisticsCollector::TestCase init_key = stat.SetTestCase(\"allocate\", mode, len);\n        StatisticsCollector::TestCase fill_key = stat.SetTestCase(\"fill\", mode, len);\n        StatisticsCollector::TestCase proc_key = stat.SetTestCase(\"process\", mode, len);\n        StatisticsCollector::TestCase full_key = stat.SetTestCase(\"total time\", mode, len);\n        for (int i = 0; i < ntrial; i++) {\n            Timer timer0;\n            vector_t v1(len);\n            vector_t v2(len);\n            Timer timer1;\n            std::generate(v1.begin(), v1.end(), values(0));\n            std::generate(v2.begin(), v2.end(), values(size_t(-len)));\n            Timer timer2;\n            std::reverse(v1.rbegin(), v1.rend());\n            std::inner_product(v1.begin(), v1.end(), v2.rbegin(), 1);\n            std::sort(v1.rbegin(), v1.rend());\n            std::sort(v2.rbegin(), v2.rend());\n            std::set_intersection(v1.begin(), v1.end(), v2.rbegin(), v2.rend(), v1.begin());\n            Timer timer3;\n            stat.AddRoundResult( proc_key, timer2.diff_time(timer3)*1e+3 );\n            stat.AddRoundResult( fill_key, timer1.diff_time(timer2)*1e+3 );\n            stat.AddRoundResult( init_key, timer0.diff_time(timer1)*1e+3 );\n            stat.AddRoundResult( full_key, timer0.diff_time(timer3)*1e+3 );\n        }\n        stat.SetStatisticFormula(\"1Average\", \"=AVERAGE(ROUNDS)\");\n        stat.SetStatisticFormula(\"2+/-\", \"=(MAX(ROUNDS)-MIN(ROUNDS))/2\");\n        return *this;\n    }\n\n    class values\n    {\n        size_t value;\n    public:\n        values(size_t i) : value(i) {}\n        size_t operator()() {\n            return value++%(1|(value^55));\n        }\n    };\n};\n\n/************************************************************************/\n/* TEST3                                                                */\n/************************************************************************/\n#define mk_vector_test3(v, a) vector_test3<v<char, local_counting_allocator<a<char>, size_t > > >\ntemplate<class vector_t>\nclass vector_test3 {\n    const char *mode;\n    StatisticsCollector &stat;\n\npublic:\n    vector_test3(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}\n\n    vector_test3 &operator()(size_t len) {\n        if(Verbose) printf(\"test3<%s>(%u): collecting allocator statistics\\n\", mode, unsigned(len));\n        static const size_t sz = 1024;\n        vector_t V[sz];\n        StatisticsCollector::TestCase vinst_key = stat.SetTestCase(\"instances number\", mode, len);\n        StatisticsCollector::TestCase count_key = stat.SetTestCase(\"allocations count\", mode, len);\n        StatisticsCollector::TestCase items_key = stat.SetTestCase(\"allocated items\", mode, len);\n        //stat.ReserveRounds(sz-1);\n        for (size_t c = 0, i = 0, s = sz/2; s >= 1 && i < sz; s /= 2, c++)\n        {\n            const size_t count = c? 1<<(c-1) : 0;\n            for (size_t e = i+s; i < e; i++) {\n                //if(count >= 16) V[i].reserve(count);\n                for (size_t j = 0; j < count; j++)\n                    V[i].push_back(j);\n            }\n            stat.SetRoundTitle ( c, count );\n            stat.AddRoundResult( vinst_key, s );\n            stat.AddRoundResult( count_key, V[i-1].get_allocator().allocations );\n            stat.AddRoundResult( items_key, V[i-1].get_allocator().items_allocated );\n        }\n        return *this;\n    }\n};\n\n/************************************************************************/\n/* TYPES SET FOR TESTS                                                  */\n/************************************************************************/\n#define types_set(n, title, op) { StatisticsCollector Collector(\"time_vector\"#n); Collector.SetTitle title; \\\n    {mk_vector_test##n(tbb::concurrent_vector, tbb::cache_aligned_allocator) (\"TBB:NFS\", Collector)op;} \\\n    {mk_vector_test##n(tbb::concurrent_vector, tbb::tbb_allocator)           (\"TBB:TBB\", Collector)op;} \\\n    {mk_vector_test##n(tbb::concurrent_vector, std::allocator)               (\"TBB:STD\", Collector)op;} \\\n    {mk_vector_test##n(std::vector, tbb::cache_aligned_allocator)            (\"STL:NFS\", Collector)op;} \\\n    {mk_vector_test##n(std::vector, tbb::tbb_allocator)                      (\"STL:TBB\", Collector)op;} \\\n    {mk_vector_test##n(std::vector, std::allocator)                          (\"STL:STD\", Collector)op;} \\\n    Collector.Print(StatisticsCollector::Stdout|StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); }\n\n\n/************************************************************************/\n/* MAIN DRIVER                                                          */\n/************************************************************************/\nint main(int argc, char* argv[]) {\n\tif(argc>1) Verbose = true;\n\tif(argc>2) ExtraVerbose = true;\n    MinThread = 0; MaxThread = 500000; // use in another meaning - test#:problem size\n    ParseCommandLine( argc, argv );\n\n    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, \"expecting scalable allocator library to be loaded\");\n    \n    if(!MinThread || MinThread == 1)\n        types_set(1, (\"Vectors performance test #1 for %d\", MaxThread), (MaxThread) )\n    if(!MinThread || MinThread == 2)\n        types_set(2, (\"Vectors performance test #2 for %d\", MaxThread), (MaxThread) )\n    if(!MinThread || MinThread == 3)\n        types_set(3, (\"Vectors performance test #3 for %d\", MaxThread), (MaxThread) )\n\n    if(!Verbose) printf(\"done\\n\");\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\n\nThis directory has source code that must be statically linked into an RML client.\n\n<H2>Files</H2>\n\n<DL>\n<DT><A HREF=\"rml_factory.h\">rml_factory.h</A>\n<DD>Text shared by <A HREF=\"rml_omp.cpp\">rml_omp.cpp</A> and <A HREF=\"rml_tbb.cpp\">rml_tbb.cpp</A>.\n       This is not an ordinary include file, so it does not have an #ifndef guard.</DD></DT>\n</DL>\n\n<H3> Specific to client=OpenMP</H3>\n<DL>\n<DT><A HREF=\"rml_omp.cpp\">rml_omp.cpp</A>\n<DD>Source file for OpenMP client.</DD></DT>\n<DT><A HREF=\"omp_dynamic_link.h\">omp_dynamic_link.h</A></DT>\n<DT><A HREF=\"omp_dynamic_link.cpp\">omp_dynamic_link.cpp</A>\n<DD>Source files for dynamic linking support.  \n       The code is the code from the TBB source directory, but adjusted so that it \n       appears in namespace <TT>__kmp</TT> instead of namespace <TT>tbb::internal</TT>.</DD></DT>\n</DL>\n<H3> Specific to client=TBB</H3>\n<DL>\n<DT><A HREF=\"rml_tbb.cpp\">rml_tbb.cpp</A>\n<DD>Source file for TBB client.  It uses the dynamic linking support from the TBB source directory.</DD></DT>\n</DL>\n\n<HR/>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/library_assert.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef LIBRARY_ASSERT_H\n#define LIBRARY_ASSERT_H\n\n#ifndef  LIBRARY_ASSERT\n#ifdef KMP_ASSERT2\n#define LIBRARY_ASSERT(x,y) KMP_ASSERT2((x),(y))\n#else\n#include <assert.h>\n#define LIBRARY_ASSERT(x,y)         assert(x)\n#define __TBB_DYNAMIC_LOAD_ENABLED  1\n#endif\n#endif /* LIBRARY_ASSERT */\n\n#endif /* LIBRARY_ASSERT_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/omp_dynamic_link.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"omp_dynamic_link.h\"\n#include \"library_assert.h\"\n#include \"tbb/dynamic_link.cpp\" // Refers to src/tbb, not include/tbb\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/omp_dynamic_link.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __KMP_omp_dynamic_link_H\n#define __KMP_omp_dynamic_link_H\n\n#define OPEN_INTERNAL_NAMESPACE namespace __kmp {\n#define CLOSE_INTERNAL_NAMESPACE }\n\n#include \"library_assert.h\"\n#include \"tbb/dynamic_link.h\" // Refers to src/tbb, not include/tbb \n\n#endif /* __KMP_omp_dynamic_link_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/rml_factory.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// No ifndef guard because this file is not a normal include file.\n\n#if TBB_USE_DEBUG\n#define DEBUG_SUFFIX \"_debug\"\n#else\n#define DEBUG_SUFFIX\n#endif /* TBB_USE_DEBUG */\n\n// RML_SERVER_NAME is the name of the RML server library.\n#if _WIN32||_WIN64\n#define RML_SERVER_NAME \"irml\" DEBUG_SUFFIX \".dll\"\n#elif __APPLE__\n#define RML_SERVER_NAME \"libirml\" DEBUG_SUFFIX \".dylib\"\n#elif __linux__\n#define RML_SERVER_NAME \"libirml\" DEBUG_SUFFIX \".so.1\"\n#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX\n#define RML_SERVER_NAME \"libirml\" DEBUG_SUFFIX \".so\"\n#else\n#error Unknown OS\n#endif\n\nconst ::rml::versioned_object::version_type CLIENT_VERSION = 2;\n\n#if __TBB_WEAK_SYMBOLS_PRESENT\n    #pragma weak __RML_open_factory\n    #pragma weak __RML_close_factory\n    extern \"C\" {\n        ::rml::factory::status_type __RML_open_factory ( ::rml::factory&, ::rml::versioned_object::version_type&, ::rml::versioned_object::version_type );\n        void __RML_close_factory( ::rml::factory& f );\n    }\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n\n::rml::factory::status_type FACTORY::open() {\n    // Failure of following assertion indicates that factory is already open, or not zero-inited.\n    LIBRARY_ASSERT( !library_handle, NULL );\n    status_type (*open_factory_routine)( factory&, version_type&, version_type );\n    dynamic_link_descriptor server_link_table[4] = {\n        DLD(__RML_open_factory,open_factory_routine),\n        MAKE_SERVER(my_make_server_routine),\n        DLD(__RML_close_factory,my_wait_to_close_routine),\n        GET_INFO(my_call_with_server_info_routine),\n    };\n    status_type result;\n    if( dynamic_link( RML_SERVER_NAME, server_link_table, 4, &library_handle ) ) {\n        version_type server_version;\n        result = (*open_factory_routine)( *this, server_version, CLIENT_VERSION );\n        // server_version can be checked here for incompatibility if necessary.\n    } else {\n        library_handle = NULL;\n        result = st_not_found;\n    }\n    return result;\n}\n\nvoid FACTORY::close() {\n    if( library_handle )\n        (*my_wait_to_close_routine)(*this);\n    if( (size_t)library_handle>FACTORY::c_dont_unload ) {\n        dynamic_unlink(library_handle);\n        library_handle = NULL;\n    }\n}\n\n::rml::factory::status_type FACTORY::make_server( SERVER*& s, CLIENT& c) {\n    // Failure of following assertion means that factory was not successfully opened.\n    LIBRARY_ASSERT( my_make_server_routine, NULL );\n    return (*my_make_server_routine)(*this,s,c);\n}\n\nvoid FACTORY::call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const {\n    // Failure of following assertion means that factory was not successfully opened.\n    LIBRARY_ASSERT( my_call_with_server_info_routine, NULL );\n    (*my_call_with_server_info_routine)( cb, arg );\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/rml_omp.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"rml_omp.h\"\n#include \"omp_dynamic_link.h\"\n#include <assert.h>\n\nnamespace __kmp {\nnamespace rml {\n\n#define MAKE_SERVER(x) DLD(__KMP_make_rml_server,x)\n#define GET_INFO(x) DLD(__KMP_call_with_my_server_info,x)\n#define SERVER omp_server \n#define CLIENT omp_client\n#define FACTORY omp_factory\n\n#if __TBB_WEAK_SYMBOLS_PRESENT\n    #pragma weak __KMP_make_rml_server\n    #pragma weak __KMP_call_with_my_server_info\n    extern \"C\" {\n        omp_factory::status_type __KMP_make_rml_server( omp_factory& f, omp_server*& server, omp_client& client );\n        void __KMP_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg );\n    }\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n\n#include \"rml_factory.h\"\n\n} // rml\n} // __kmp\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/client/rml_tbb.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../include/rml_tbb.h\"\n#include \"tbb/dynamic_link.h\"\n#include <assert.h>\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\n#define MAKE_SERVER(x) DLD(__TBB_make_rml_server,x)\n#define GET_INFO(x) DLD(__TBB_call_with_my_server_info,x)\n#define SERVER tbb_server \n#define CLIENT tbb_client\n#define FACTORY tbb_factory\n\n#if __TBB_WEAK_SYMBOLS_PRESENT\n    #pragma weak __TBB_make_rml_server\n    #pragma weak __TBB_call_with_my_server_info\n    extern \"C\" {\n        ::rml::factory::status_type __TBB_make_rml_server( tbb::internal::rml::tbb_factory& f, tbb::internal::rml::tbb_server*& server, tbb::internal::rml::tbb_client& client );\n        void __TBB_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg );\n    }\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n\n#include \"rml_factory.h\"\n\n} // rml\n} // internal\n} // tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/include/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\n\nThis directory has the include files for the Resource Management Layer (RML).\n\n<H2>Files</H2>\n\n<DL>\n<DT><P><A HREF=\"rml_base.h\">rml_base.h</A>\n<DD>Interfaces shared by TBB and OpenMP.</P>\n<DT><P><A HREF=\"rml_omp.h\">rml_omp.h</A>\n<DD>Interface exclusive to OpenMP.</P>\n<DT><P><A HREF=\"rml_tbb.h\">rml_tbb.h</A>\n<DD>Interface exclusive to TBB.</P>\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/include/rml_base.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Header guard and namespace names follow rml conventions.\n\n#ifndef __RML_rml_base_H\n#define __RML_rml_base_H\n\n#include <cstddef>\n\n#if _WIN32||_WIN64\n#include <windows.h>\n#endif /* _WIN32||_WIN64 */\n\n#ifdef RML_PURE_VIRTUAL_HANDLER\n#define RML_PURE(T) {RML_PURE_VIRTUAL_HANDLER(); return (T)0;}\n#else\n#define RML_PURE(T) = 0;\n#endif\n\nnamespace rml {\n\n//! Base class for denying assignment and copy constructor.\nclass no_copy {\n    void operator=( no_copy& );\n    no_copy( no_copy& );\npublic:\n    no_copy() {}\n};\n\nclass server;\n\nclass versioned_object {\npublic:\n    //! A version number\n    typedef unsigned version_type;\n    \n    //! Get version of this object\n    /** The version number is incremented when a incompatible change is introduced.\n        The version number is invariant for the lifetime of the object. */\n    virtual version_type version() const RML_PURE(version_type)\n};\n\n//! Represents a client's job for an execution context.\n/** A job object is constructed by the client.\n    Not derived from versioned_object because version is same as for client. */\nclass job {\n    friend class server;\n\n    //! Word for use by server\n    /** Typically the server uses it to speed up internal lookup.\n        Clients must not modify the word. */\n    void* scratch_ptr;\n};\n\n//! Information that client provides to server when asking for a server.\n/** The instance must endure at least until acknowledge_close_connection is called. */\nclass client: public versioned_object {\npublic:\n    //! Typedef for convenience of derived classes in other namespaces.\n    typedef ::rml::job job;\n\n    //! Index of a job in a job pool\n    typedef unsigned size_type;\n\n    //! Maximum number of threads that client can exploit profitably if nothing else is running on the machine.  \n    /** The returned value should remain invariant for the lifetime of the connection.  [idempotent] */\n    virtual size_type max_job_count() const RML_PURE(size_type)\n\n    //! Minimum stack size for each job.  0 means to use default stack size. [idempotent]\n    virtual std::size_t min_stack_size() const RML_PURE(std::size_t)\n\n    //! Server calls this routine when it needs client to create a job object.\n    virtual job* create_one_job() RML_PURE(job*)\n\n    //! Acknowledge that all jobs have been cleaned up.\n    /** Called by server in response to request_close_connection\n        after cleanup(job) has been called for each job. */\n    virtual void acknowledge_close_connection() RML_PURE(void)\n\n    enum policy_type {turnaround,throughput};\n\n    //! Inform server of desired policy. [idempotent]\n    virtual policy_type policy() const RML_PURE(policy_type)\n\n    //! Inform client that server is done with *this.   \n    /** Client should destroy the job.\n        Not necessarily called by execution context represented by *this.\n        Never called while any other thread is working on the job. */\n    virtual void cleanup( job& ) RML_PURE(void)\n\n    // In general, we should not add new virtual methods, because that would \n    // break derived classes.  Think about reserving some vtable slots.  \n};\n\n// Information that server provides to client.\n// Virtual functions are routines provided by the server for the client to call. \nclass server: public versioned_object {\npublic:\n    //! Typedef for convenience of derived classes.\n    typedef ::rml::job job;\n\n#if _WIN32||_WIN64\n    typedef void* execution_resource_t;\n#endif\n\n    //! Request that connection to server be closed.\n    /** Causes each job associated with the client to have its cleanup method called,\n        possibly by a thread different than the thread that created the job. \n        This method can return before all cleanup methods return. \n        Actions that have to wait after all cleanup methods return should be part of \n        client::acknowledge_close_connection. \n        Pass true as exiting if request_close_connection() is called because exit() is\n        called. In that case, it is the client's responsibility to make sure all threads\n        are terminated. In all other cases, pass false.  */\n    virtual void request_close_connection( bool exiting = false ) = 0;\n\n    //! Called by client thread when it reaches a point where it cannot make progress until other threads do.  \n    virtual void yield() = 0;\n\n    //! Called by client to indicate a change in the number of non-RML threads that are running.\n    /** This is a performance hint to the RML to adjust how many threads it should let run \n        concurrently.  The delta is the change in the number of non-RML threads that are running.\n        For example, a value of 1 means the client has started running another thread, and a value \n        of -1 indicates that the client has blocked or terminated one of its threads. */\n    virtual void independent_thread_number_changed( int delta ) = 0;\n\n    //! Default level of concurrency for which RML strives when there are no non-RML threads running.\n    /** Normally, the value is the hardware concurrency minus one. \n        The \"minus one\" accounts for the thread created by main(). */\n    virtual unsigned default_concurrency() const = 0;\n\nprotected:\n    static void*& scratch_ptr( job& j ) {return j.scratch_ptr;}\n};\n\nclass factory {\npublic:\n    //! status results\n    enum status_type {\n        st_success=0,\n        st_connection_exists,\n        st_not_found,\n        st_incompatible\n    };\n\n    //! Scratch pointer for use by RML.\n    void* scratch_ptr;\n\nprotected:\n    //! Pointer to routine that waits for server to indicate when client can close itself.\n    status_type (*my_wait_to_close_routine)( factory& );\n\npublic:\n    //! Library handle for use by RML.\n#if _WIN32||_WIN64\n    HMODULE library_handle;\n#else\n    void* library_handle;\n#endif /* _WIN32||_WIN64 */ \n\n    //! Special marker to keep dll from being unloaded prematurely\n    static const std::size_t c_dont_unload = 1;\n};\n\n//! Typedef for callback functions to print server info\ntypedef void (*server_info_callback_t)( void* arg, const char* server_info );\n\n} // namespace rml\n\n#endif /* __RML_rml_base_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/include/rml_omp.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Header guard and namespace names follow OpenMP runtime conventions.\n\n#ifndef KMP_RML_OMP_H\n#define KMP_RML_OMP_H\n\n#include \"rml_base.h\"\n\nnamespace __kmp {\nnamespace rml {\n\nclass omp_client;\n\n//------------------------------------------------------------------------\n// Classes instantiated by the server\n//------------------------------------------------------------------------\n\n//! Represents a set of omp worker threads provided by the server.\nclass omp_server: public ::rml::server {\npublic:\n    //! A number of coins (i.e., threads)\n    typedef unsigned size_type;\n\n    //! Return the number of coins in the bank. (negative if machine is oversubscribed).\n    virtual int current_balance() const = 0;\n  \n    //! Request n coins.  Returns number of coins granted. Oversubscription amount if negative.\n    /** Always granted if is_strict is true.\n        - Positive or zero result indicates that the number of coins was taken from the bank.\n        - Negative result indicates that no coins were taken, and that the bank has deficit \n          by that amount and the caller (if being a good citizen) should return that many coins.\n     */\n    virtual int try_increase_load( size_type /*n*/, bool /*strict*/ ) = 0;\n\n    //! Return n coins into the bank.\n    virtual void decrease_load( size_type /*n*/ ) = 0;\n\n    //! Convert n coins into n threads.\n    /** When a thread returns, it is converted back into a coin and the coin is returned to the bank. */\n    virtual void get_threads( size_type /*m*/, void* /*cookie*/, job* /*array*/[] ) = 0;\n\n    /** Putting a thread to sleep - convert a thread into a coin\n        Waking up a thread        - convert a coin into a thread\n      \n       Note: conversion between a coin and a thread does not affect the accounting.\n     */\n#if _WIN32||_WIN64\n    //! Inform server of a tbb master thread.\n    virtual void register_master( execution_resource_t& /*v*/ ) = 0;\n\n    //! Inform server that the tbb master thread is done with its work.\n    virtual void unregister_master( execution_resource_t /*v*/ ) = 0;\n \n    //! deactivate\n    /** give control to ConcRT RM */\n    virtual void deactivate( job* ) = 0;\n\n    //! reactivate\n    virtual void reactivate( job* ) = 0;\n#endif /* _WIN32||_WIN64 */\n};\n\n\n//------------------------------------------------------------------------\n// Classes (or base classes thereof) instantiated by the client\n//------------------------------------------------------------------------\n\nclass omp_client: public ::rml::client {\npublic:\n    //! Called by server thread when it delivers a thread to client\n    /** The index argument is a 0-origin index of the job for this thread within the array\n        returned by method get_threads.  Server decreases the load by 1 (i.e., returning the coin\n        back to the bank) after this method returns. */\n    virtual void process( job&, void* /*cookie*/, size_type /*index*/ ) RML_PURE(void)\n};\n\n/** Client must ensure that instance is zero-inited, typically by being a file-scope object. */\nclass omp_factory: public ::rml::factory {\n\n    //! Pointer to routine that creates an RML server.\n    status_type (*my_make_server_routine)( omp_factory&, omp_server*&, omp_client& );\n\n    //! Pointer to routine that calls callback function with server version info.\n    void (*my_call_with_server_info_routine)( ::rml::server_info_callback_t cb, void* arg );\n\npublic:\n    typedef ::rml::versioned_object::version_type version_type;\n    typedef omp_client client_type;\n    typedef omp_server server_type;\n\n    //! Open factory.\n    /** Dynamically links against RML library. \n        Returns st_success, st_incompatible, or st_not_found. */\n    status_type open();\n\n    //! Factory method to be called by client to create a server object.\n    /** Factory must be open. \n        Returns st_success or st_incompatible . */\n    status_type make_server( server_type*&, client_type& );\n\n    //! Close factory.\n    void close();\n\n    //! Call the callback with the server build info.\n    void call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const;\n};\n\n} // namespace rml\n} // namespace __kmp\n\n#endif /* KMP_RML_OMP_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/include/rml_tbb.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Header guard and namespace names follow TBB conventions.\n\n#ifndef __TBB_rml_tbb_H\n#define __TBB_rml_tbb_H\n\n#include \"tbb/tbb_config.h\"\n#include \"rml_base.h\"\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\nclass tbb_client;\n\n//------------------------------------------------------------------------\n// Classes instantiated by the server\n//------------------------------------------------------------------------\n\n//! Represents a set of tbb worker threads provided by the server.\nclass tbb_server: public ::rml::server {\npublic:\n    //! Inform server of adjustments in the number of workers that the client can profitably use.\n    virtual void adjust_job_count_estimate( int delta ) = 0;\n\n#if _WIN32||_WIN64\n    //! Inform server of a tbb master thread.\n    virtual void register_master( execution_resource_t& v ) = 0;\n\n    //! Inform server that the tbb master thread is done with its work.\n    virtual void unregister_master( execution_resource_t v ) = 0;\n#endif /* _WIN32||_WIN64 */\n};\n\n//------------------------------------------------------------------------\n// Classes instantiated by the client\n//------------------------------------------------------------------------\n\nclass tbb_client: public ::rml::client {\npublic:\n    //! Defined by TBB to steal a task and execute it.  \n    /** Called by server when it wants an execution context to do some TBB work.\n        The method should return when it is okay for the thread to yield indefinitely. */\n    virtual void process( job& ) RML_PURE(void)\n};\n\n/** Client must ensure that instance is zero-inited, typically by being a file-scope object. */\nclass tbb_factory: public ::rml::factory {\n\n    //! Pointer to routine that creates an RML server.\n    status_type (*my_make_server_routine)( tbb_factory&, tbb_server*&, tbb_client& );\n\n    //! Pointer to routine that calls callback function with server version info.\n    void (*my_call_with_server_info_routine)( ::rml::server_info_callback_t cb, void* arg );\n\npublic:\n    typedef ::rml::versioned_object::version_type version_type;\n    typedef tbb_client client_type;\n    typedef tbb_server server_type;\n\n    //! Open factory.\n    /** Dynamically links against RML library. \n        Returns st_success, st_incompatible, or st_not_found. */\n    status_type open();\n\n    //! Factory method to be called by client to create a server object.\n    /** Factory must be open. \n        Returns st_success, or st_incompatible . */\n    status_type make_server( server_type*&, client_type& );\n\n    //! Close factory\n    void close();\n\n    //! Call the callback with the server build info\n    void call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const;\n};\n\n} // namespace rml\n} // namespace internal\n} // namespace tbb\n\n#endif /*__TBB_rml_tbb_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\n\nThe subdirectories pertain to the Resource Management Layer (RML).\n\n<H2>Directories</H2>\n\n<DL>\n<DT><P><A HREF=\"include/index.html\">include/</A>\n<DD>Include files used by clients of RML.</P>\n<DT><P><A HREF=\"client/index.html\">client/</A>\n<DD>Source files for code that must be statically linked with a client.</P>\n<DT><P><A HREF=\"server/index.html\">server/</A>\n<DD>Source files for the RML server.</P>\n<DT><P><A HREF=\"test\">test/</A>\n<DD>Unit tests for RML server and its components.</P>\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/perfor/omp_nested.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstddef>\n#include <cstdlib>\n#include <cstdio>\n#include <float.h>\n#include <math.h>\n#include <time.h>\n\n#include <omp.h>\n#include <assert.h>\n\n#include \"thread_level.h\"\n\n#if _WIN32||_WIN64\n#include <Windows.h> /* Need Sleep */\n#else\n#include <unistd.h>  /* Need usleep */\n#endif\n\nvoid MilliSleep( unsigned milliseconds ) {\n#if _WIN32||_WIN64\n    Sleep( milliseconds );\n#else\n    usleep( milliseconds*1000 );\n#endif /* _WIN32||_WIN64 */\n}\n\n// Algorithm parameters\nconst int Max_OMP_Outer_Threads = 8;\n\n// Global variables\nint max_outer_threads = Max_OMP_Outer_Threads;\n\n// Print help on command-line arguments\nvoid help_message(char *prog_name) {\n  fprintf(stderr, \"\\n%s usage:\\n\", prog_name);\n  fprintf(stderr, \n\t  \"  Parameters:\\n\"\n\t  \"    -o<num> : max # of threads OMP should use at outer level\\n\"\n\t  \"\\n  Help:\\n\"\n\t  \"    -h : print this help message\\n\");\n}\n\n// Process command-line arguments\nvoid process_args(int argc, char *argv[], int *max_outer_t) {\n  (*max_outer_t) = omp_get_max_threads();\n  for (int i=1; i<argc; ++i) {  \n    if (argv[i][0] == '-') {\n      switch (argv[i][1]) {\n      case 'o': // set max_outer_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_outer_t) != 1 || *max_outer_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -o option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'h': // print help message\n\thelp_message(argv[0]);\n\texit(0);\n\tbreak;\n      default:\n\tfprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n\thelp_message(argv[0]);\n\tbreak;\n      }\n    } else {\n      fprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n      help_message(argv[0]);\n    }\n  }\n}\n\nint main(int argc, char *argv[]) { \n  process_args(argc, argv, &max_outer_threads);\n#ifdef LOG_THREADS\n  TotalThreadLevel.init();\n#endif\n\n  double start, end;\n  start = omp_get_wtime( );\n  \n#pragma omp parallel num_threads(max_outer_threads)\n  {\n    int omp_thread = omp_get_thread_num();\n#ifdef LOG_THREADS\n    if (omp_thread == 0)\n      TotalThreadLevel.change_level(omp_get_num_threads(), omp_outer);\n#endif\n    if (omp_thread == 0) {\n      MilliSleep(3000);\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(-1, omp_outer);\n#endif\n#pragma omp parallel\n      {\n\tint my_omp_thread = omp_get_thread_num();\n#ifdef LOG_THREADS\n\tif (my_omp_thread == 0)\n\t  TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);\n#endif\n\tprintf(\"Inner thread %d nested inside outer thread %d\\n\", my_omp_thread, omp_thread);\n#ifdef LOG_THREADS\n\tif (my_omp_thread == 0)\n\t  TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);\n#endif\n      }\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(1, omp_outer);\n#endif\n    }\n    else {\n      MilliSleep(6000);\n    }\n#ifdef LOG_THREADS\n    if (omp_thread == 0)\n      TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);\n#endif\n  }\n  end = omp_get_wtime( );\n  printf(\"Simple test of nested OMP (%d outer threads max) took: %6.6f\\n\",\n\t max_outer_threads, end-start);\n#ifdef LOG_THREADS\n  TotalThreadLevel.dump();\n#endif\n  return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/perfor/omp_simple.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstddef>\n#include <cstdlib>\n#include <cstdio>\n#include <float.h>\n#include <math.h>\n#include <time.h>\n\n#include <omp.h>\n#include <assert.h>\n\n#include \"thread_level.h\"\n\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\n#if _WIN32||_WIN64\n#include <Windows.h> /* Need Sleep */\n#else\n#include <unistd.h>  /* Need usleep */\n#endif\n\nvoid MilliSleep( unsigned milliseconds ) {\n#if _WIN32||_WIN64\n    Sleep( milliseconds );\n#else\n    usleep( milliseconds*1000 );\n#endif /* _WIN32||_WIN64 */\n}\n\nusing namespace std;\nusing namespace tbb;\n\n// Algorithm parameters\nconst int Max_TBB_Threads = 16;\nconst int Max_OMP_Threads = 16;\n\n// Global variables\nint max_tbb_threads = Max_TBB_Threads;\nint max_omp_threads = Max_OMP_Threads;\n\n// Print help on command-line arguments\nvoid help_message(char *prog_name) {\n  fprintf(stderr, \"\\n%s usage:\\n\", prog_name);\n  fprintf(stderr, \n\t  \"  Parameters:\\n\"\n\t  \"    -t<num> : max # of threads TBB should use\\n\"\n\t  \"    -o<num> : max # of threads OMP should use\\n\"\n\t  \"\\n  Help:\\n\"\n\t  \"    -h : print this help message\\n\");\n}\n\n// Process command-line arguments\nvoid process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {\n  for (int i=1; i<argc; ++i) {  \n    if (argv[i][0] == '-') {\n      switch (argv[i][1]) {\n      case 't': // set max_tbb_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_tbb_t) != 1 || *max_tbb_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -t option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'o': // set max_omp_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_omp_t) != 1 || *max_omp_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -o option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'h': // print help message\n\thelp_message(argv[0]);\n\texit(0);\n\tbreak;\n      default:\n\tfprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n\thelp_message(argv[0]);\n\tbreak;\n      }\n    } else {\n      fprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n      help_message(argv[0]);\n    }\n  }\n}\n\nint main(int argc, char *argv[]) { \n  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);\n  TotalThreadLevel.init();\n\n  double start, end;\n  start = omp_get_wtime();\n  \n#pragma omp parallel num_threads(max_omp_threads)\n  {\n    int omp_thread = omp_get_thread_num();\n#ifdef LOG_THREADS\n    if (omp_thread == 0)\n      TotalThreadLevel.change_level(omp_get_num_threads(), omp_outer);\n#endif\n    task_scheduler_init phase(max_tbb_threads);\n    if (omp_thread == 0) {\n      MilliSleep(3000);\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(-1, omp_outer);\n#endif\n      parallel_for(blocked_range<size_t>(0, 1000), \n\t\t   [=](const blocked_range<size_t>& range) {\n#ifdef LOG_THREADS\n\tTotalThreadLevel.change_level(1, tbb_inner);\n#endif\n#pragma ivdep\n\tfor (size_t i=range.begin(); i!=range.end(); ++i) {\n\t  if (i==range.begin())\n\t    printf(\"TBB range starting at %d on OMP thread %d\\n\", (int)i, omp_thread);\n\t}\n#ifdef LOG_THREADS\n\tTotalThreadLevel.change_level(-1, tbb_inner);\n#endif\n      }, auto_partitioner());\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(1, omp_outer);\n#endif\n    }\n    else {\n      MilliSleep(6000);\n    }\n#ifdef LOG_THREADS\n    if (omp_thread == 0)\n      TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);\n#endif\n  }\n  end = omp_get_wtime();\n  printf(\"Simple test of OMP (%d threads max) with TBB (%d threads max) inside took: %6.6f\\n\",\n\t max_omp_threads, max_tbb_threads, end-start);\n#ifdef LOG_THREADS\n  TotalThreadLevel.dump();\n#endif\n  return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/perfor/tbb_multi_omp.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstddef>\n#include <cstdlib>\n#include <cstdio>\n#include <float.h>\n#include <math.h>\n#include <time.h>\n\n#include <omp.h>\n#include <assert.h>\n\n#include \"thread_level.h\"\n\n#include \"tbb/task.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/scalable_allocator.h\"\n\n#if _WIN32||_WIN64\n#include <Windows.h> /* Need Sleep */\n#else\n#include <unistd.h>  /* Need usleep */\n#endif\n\nvoid MilliSleep( unsigned milliseconds ) {\n#if _WIN32||_WIN64\n    Sleep( milliseconds );\n#else\n    usleep( milliseconds*1000 );\n#endif /* _WIN32||_WIN64 */\n}\n\nusing namespace std;\nusing namespace tbb;\n\n// Algorithm parameters\nconst int Max_TBB_Threads = 16;\nconst int Max_OMP_Threads = 16;\n\n// Global variables\nint max_tbb_threads = Max_TBB_Threads;\nint max_omp_threads = Max_OMP_Threads;\n\n// Print help on command-line arguments\nvoid help_message(char *prog_name) {\n  fprintf(stderr, \"\\n%s usage:\\n\", prog_name);\n  fprintf(stderr, \n\t  \"  Parameters:\\n\"\n\t  \"    -t<num> : max # of threads TBB should use\\n\"\n\t  \"    -o<num> : max # of threads OMP should use\\n\"\n\t  \"\\n  Help:\\n\"\n\t  \"    -h : print this help message\\n\");\n}\n\n// Process command-line arguments\nvoid process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {\n  for (int i=1; i<argc; ++i) {  \n    if (argv[i][0] == '-') {\n      switch (argv[i][1]) {\n      case 't': // set max_tbb_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_tbb_t) != 1 || *max_tbb_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -t option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'o': // set max_omp_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_omp_t) != 1 || *max_omp_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -o option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'h': // print help message\n\thelp_message(argv[0]);\n\texit(0);\n\tbreak;\n      default:\n\tfprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n\thelp_message(argv[0]);\n\tbreak;\n      }\n    } else {\n      fprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n      help_message(argv[0]);\n    }\n  }\n}\n\nclass SimpleTask : public task {\n  bool isLeaf;\n  int myId;\npublic:\n  SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}\n  task* execute() {\n#ifdef LOG_THREADS\n    TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n    omp_set_num_threads(max_omp_threads);\n    if (!isLeaf) {\n      set_ref_count(65);\n      for (int i=0; i<64; ++i) {\n\tSimpleTask& st = *new(allocate_child()) SimpleTask(true, i);\n\tspawn(st);\n      }\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n      wait_for_all();\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n    }\n    else {\n      if (myId%2 == 0) {\n\tMilliSleep(3000);\n#pragma omp parallel\n\t{\n#ifdef LOG_THREADS\n\t  if (omp_get_thread_num() == 0)\n\t    TotalThreadLevel.change_level(omp_get_num_threads()-1, omp_inner);\n#endif\n\t  //printf(\"In OMP parallel region on TBB task with myId=0: thread %d of %d\\n\", omp_get_thread_num(), omp_get_num_threads());\n#ifdef LOG_THREADS\n\t  if (omp_get_thread_num() == 0)\n\t    TotalThreadLevel.change_level(-(omp_get_num_threads()-1), omp_inner);\n#endif\n\t}\n      }\n      else {\n\tMilliSleep(6000);\n      }\n    }\n#ifdef LOG_THREADS\n    TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n    return NULL;\n  }\n};\n\n\nint main(int argc, char *argv[]) { \n#ifdef LOG_THREADS\n  TotalThreadLevel.init();\n  TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);\n\n  task_scheduler_init phase(max_tbb_threads);\n  tick_count start, end;\n  start = tick_count::now();\n  SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n  task::spawn_root_and_wait(st);\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n  end = tick_count::now();\n  printf(\"Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\\n\", \n\t max_tbb_threads, max_omp_threads, (end-start).seconds());\n\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(-1, tbb_outer);\n  TotalThreadLevel.dump();\n#endif\n  return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/perfor/tbb_simple.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstddef>\n#include <cstdlib>\n#include <cstdio>\n#include <float.h>\n#include <math.h>\n#include <time.h>\n\n#include <omp.h>\n#include <assert.h>\n\n#include \"thread_level.h\"\n\n#include \"tbb/task.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#if _WIN32||_WIN64\n#include <Windows.h> /* Need Sleep */\n#else\n#include <unistd.h>  /* Need usleep */\n#endif\n\nvoid MilliSleep( unsigned milliseconds ) {\n#if _WIN32||_WIN64\n    Sleep( milliseconds );\n#else\n    usleep( milliseconds*1000 );\n#endif /* _WIN32||_WIN64 */\n}\n\nusing namespace std;\nusing namespace tbb;\n\n// Algorithm parameters\nconst int Max_TBB_Threads = 16;\nconst int Max_OMP_Threads = 16;\n\n// Global variables\nint max_tbb_threads = Max_TBB_Threads;\nint max_omp_threads = Max_OMP_Threads;\n\n// Print help on command-line arguments\nvoid help_message(char *prog_name) {\n  fprintf(stderr, \"\\n%s usage:\\n\", prog_name);\n  fprintf(stderr, \n\t  \"  Parameters:\\n\"\n\t  \"    -t<num> : max # of threads TBB should use\\n\"\n\t  \"    -o<num> : max # of threads OMP should use\\n\"\n\t  \"\\n  Help:\\n\"\n\t  \"    -h : print this help message\\n\");\n}\n\n// Process command-line arguments\nvoid process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {\n  for (int i=1; i<argc; ++i) {  \n    if (argv[i][0] == '-') {\n      switch (argv[i][1]) {\n      case 't': // set max_tbb_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_tbb_t) != 1 || *max_tbb_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -t option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'o': // set max_omp_threads\n\tif (sscanf(&argv[i][2], \"%d\", max_omp_t) != 1 || *max_omp_t < 1) {\n\t  fprintf(stderr, \"%s Warning: argument of -o option unacceptable: %s\\n\", argv[0], &argv[i][2]);\n\t  help_message(argv[0]);\n\t}\n\tbreak;\n      case 'h': // print help message\n\thelp_message(argv[0]);\n\texit(0);\n\tbreak;\n      default:\n\tfprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n\thelp_message(argv[0]);\n\tbreak;\n      }\n    } else {\n      fprintf(stderr, \"%s: Warning: command-line option ignored: %s\\n\", argv[0], argv[i]);\n      help_message(argv[0]);\n    }\n  }\n}\n\nclass SimpleTask : public task {\n  bool isLeaf;\n  int myId;\npublic:\n  SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}\n  task* execute() {\n#ifdef LOG_THREADS\n    TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n    omp_set_num_threads(max_omp_threads);\n    if (!isLeaf) {\n      set_ref_count(17);\n      for (int i=0; i<16; ++i) {\n\tSimpleTask& st = *new(allocate_child()) SimpleTask(true, i);\n\tspawn(st);\n      }\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n      wait_for_all();\n#ifdef LOG_THREADS\n      TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n    }\n    else {\n      if (myId == 0) {\n\tMilliSleep(3000);\n#ifdef LOG_THREADS\n\tTotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n#pragma omp parallel\n\t{\n#ifdef LOG_THREADS\n\t  if (omp_get_thread_num() == 0)\n\t    TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);\n#endif\n\t  printf(\"In OMP parallel region on TBB task with myId=0: thread %d of %d\\n\", \n\t\t omp_get_thread_num(), omp_get_num_threads());\n#ifdef LOG_THREADS\n\t  if (omp_get_thread_num() == 0)\n\t    TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);\n#endif\n\t}\n#ifdef LOG_THREADS\n\tTotalThreadLevel.change_level(1, tbb_outer);\n#endif\n      }\n      else {\n\tMilliSleep(6000);\n      }\n    }\n#ifdef LOG_THREADS\n    TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n    return NULL;\n  }\n};\n\n\nint main(int argc, char *argv[]) { \n#ifdef LOG_THREADS\n  TotalThreadLevel.init();\n  TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);\n\n  task_scheduler_init phase(max_tbb_threads);\n  tick_count start, end;\n  start = tick_count::now();\n  SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(-1, tbb_outer);\n#endif\n  task::spawn_root_and_wait(st);\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(1, tbb_outer);\n#endif\n  end = tick_count::now();\n  printf(\"Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\\n\", \n\t max_tbb_threads, max_omp_threads, (end-start).seconds());\n#ifdef LOG_THREADS\n  TotalThreadLevel.change_level(-1, tbb_outer);\n  TotalThreadLevel.dump();\n#endif\n  return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/perfor/thread_level.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Thread level recorder\n#ifndef __THREAD_LEVEL_H\n#define __THREAD_LEVEL_H\n#include <cstdio>\n#include <omp.h>\n#include <assert.h>\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n\n//#define LOG_THREADS // use this to ifdef out calls to this class \n//#define NO_BAIL_OUT // continue execution after detecting oversubscription\n\nusing namespace tbb;\n\ntypedef enum {tbb_outer, tbb_inner, omp_outer, omp_inner} client_t;\n\nclass ThreadLevelRecorder {\n  tbb::atomic<int> tbb_outer_level;\n  tbb::atomic<int> tbb_inner_level;\n  tbb::atomic<int> omp_outer_level;\n  tbb::atomic<int> omp_inner_level;\n  struct record {\n    tbb::tick_count time;\n    int n_tbb_outer_thread;\n    int n_tbb_inner_thread;\n    int n_omp_outer_thread;\n    int n_omp_inner_thread;\n  };\n  tbb::atomic<unsigned> next;\n  /** Must be power of two */\n  static const unsigned max_record_count = 1<<20;\n  record array[max_record_count];\n  int max_threads;\n  bool fail;\n public:\n  void change_level(int delta, client_t whichClient);\n  void dump();\n  void init();\n};\n\nvoid ThreadLevelRecorder::change_level(int delta, client_t whichClient) {\n  int tox=tbb_outer_level, tix=tbb_inner_level, oox=omp_outer_level, oix=omp_inner_level;\n  if (whichClient == tbb_outer) {\n    tox = tbb_outer_level+=delta;\n  } else if (whichClient == tbb_inner) {\n    tix = tbb_inner_level+=delta;\n  } else if (whichClient == omp_outer) {\n    oox = omp_outer_level+=delta;\n  } else if (whichClient == omp_inner) {\n    oix = omp_inner_level+=delta;\n  } else {\n    printf(\"WARNING: Bad client type; ignoring.\\n\");\n    return;\n  }\n  // log non-negative entries\n  tbb::tick_count t = tbb::tick_count::now();\n  unsigned k = next++;\n  if (k<max_record_count) {\n    record& r = array[k];\n    r.time = t;\n    r.n_tbb_outer_thread = tox>=0?tox:0;\n    r.n_omp_outer_thread = oox>=0?oox:0;\n    r.n_tbb_inner_thread = tix>=0?tix:0;\n    r.n_omp_inner_thread = oix>=0?oix:0;\n  }\n  char errStr[100];\n  int tot_threads;\n  tot_threads = tox+tix+oox+oix;\n  sprintf(errStr, \"ERROR: Number of threads (%d+%d+%d+%d=%d) in use exceeds maximum (%d).\\n\", \n\t  tox, tix, oox, oix, tot_threads, max_threads);\n  if (tot_threads > max_threads) {\n#ifdef NO_BAIL_OUT\n    if (!fail) {\n      printf(\"%sContinuing...\\n\", errStr);\n      fail = true;\n    }\n#else\n    dump();\n    printf(\"%s\\n\", errStr);\n    assert(tot_threads <= max_threads);\n#endif\n  }\n}\n\nvoid ThreadLevelRecorder::dump() {\n  FILE* f = fopen(\"time.txt\",\"w\");\n  if (!f) {\n    perror(\"fopen(time.txt)\\n\");\n    exit(1);\n  }\n  unsigned limit = next;\n  if (limit>max_record_count) { // Clip\n    limit = max_record_count;\n  }\n  for (unsigned i=0; i<limit; ++i) {\n    fprintf(f,\"%f\\t%d\\t%d\\t%d\\t%d\\n\",(array[i].time-array[0].time).seconds(), array[i].n_tbb_outer_thread,\n\t    array[i].n_tbb_inner_thread, array[i].n_omp_outer_thread, array[i].n_omp_inner_thread);\n  }\n  fclose(f);\n  int tox=tbb_outer_level, tix=tbb_inner_level, oox=omp_outer_level, oix=omp_inner_level;\n  int tot_threads;\n  tot_threads = tox+tix+oox+oix;\n  if (!fail) printf(\"INFO: Passed.\\n\");\n  else printf(\"INFO: Failed.\\n\");\n}\n\nvoid ThreadLevelRecorder::init() {\n  fail = false;\n  max_threads = omp_get_max_threads();\n  printf(\"INFO: Getting maximum hardware threads... %d.\\n\", max_threads);\n}\n\nThreadLevelRecorder TotalThreadLevel;\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\n\nThis directory has source code internal to the server.\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/irml.rc",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n// Microsoft Visual C++ generated resource script.\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include <winresrc.h>\n#define ENDL \"\\r\\n\"\n#include \"tbb/tbb_version.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// Neutral resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)\n#ifdef _WIN32\nLANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n// manifest integration\n#ifdef TBB_MANIFEST\n#include \"winuser.h\"\n2 RT_MANIFEST tbbmanifest.exe.manifest\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION TBB_VERNUMBERS\n PRODUCTVERSION TBB_VERNUMBERS\n FILEFLAGSMASK 0x17L\n#ifdef _DEBUG\n FILEFLAGS 0x1L\n#else\n FILEFLAGS 0x0L\n#endif\n FILEOS 0x40004L\n FILETYPE 0x2L\n FILESUBTYPE 0x0L\nBEGIN\n    BLOCK \"StringFileInfo\"\n    BEGIN\n        BLOCK \"000004b0\"\n        BEGIN\n            VALUE \"CompanyName\", \"Intel Corporation\\0\"\n            VALUE \"FileDescription\", \"Intel(R) Threading Building Blocks resource manager library\\0\"\n            VALUE \"FileVersion\", TBB_VERSION \"\\0\"\n            VALUE \"LegalCopyright\", \"Copyright 2005-2018 Intel Corporation.  All Rights Reserved.\\0\"\n            VALUE \"LegalTrademarks\", \"\\0\"\n#ifndef TBB_USE_DEBUG\n            VALUE \"OriginalFilename\", \"irml.dll\\0\"\n#else\n            VALUE \"OriginalFilename\", \"irml_debug.dll\\0\"\n#endif\n            VALUE \"ProductName\", \"Intel(R) Threading Building Blocks for Windows\\0\"\n            VALUE \"ProductVersion\", TBB_VERSION \"\\0\"\n            VALUE \"PrivateBuild\", \"\\0\"\n            VALUE \"SpecialBuild\", \"\\0\"\n        END\n    END\n    BLOCK \"VarFileInfo\"\n    BEGIN\n        VALUE \"Translation\", 0x0, 1200\n    END\nEND\n\n#endif    // Neutral resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/job_automaton.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __RML_job_automaton_H\n#define __RML_job_automaton_H\n\n#include \"rml_base.h\"\n#include \"tbb/atomic.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings \n    #pragma warning (push)\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace rml {\n\nnamespace internal {\n\n//! Finite state machine.   \n/**   /--------------\\\n     /                V\n    0 --> 1--> ptr --> -1 \n                ^\n                |\n                |\n                V\n              ptr|1\n\n\"owner\" = corresponding server_thread.\nOdd states (except -1) indicate that someone is executing code on the job.\nMost transitions driven only by owner.\nTransition 0-->-1 is driven by non-owner.\nTransition ptr->-1 is driven  by owner or non-owner.\n*/ \nclass job_automaton: no_copy {\nprivate:\n    tbb::atomic<intptr_t> my_job;\npublic:\n    /** Created by non-owner */\n    job_automaton() {\n        my_job = 0;\n    }\n \n    ~job_automaton() {\n        __TBB_ASSERT( my_job==-1, \"must plug before destroying\" );\n    }\n\n    //! Try to transition 0-->1 or ptr-->ptr|1.\n    /** Should only be called by owner. */\n    bool try_acquire() {\n        intptr_t snapshot = my_job;\n        if( snapshot==-1 ) {\n            return false;\n        } else {\n            __TBB_ASSERT( (snapshot&1)==0, \"already marked that way\" );\n            intptr_t old = my_job.compare_and_swap( snapshot|1, snapshot );\n            __TBB_ASSERT( old==snapshot || old==-1, \"unexpected interference\" );  \n            return old==snapshot;\n        }\n    }\n    //! Transition ptr|1-->ptr\n    /** Should only be called by owner. */\n    void release() {\n        intptr_t snapshot = my_job;\n        __TBB_ASSERT( snapshot&1, NULL );\n        // Atomic store suffices here.\n        my_job = snapshot&~1;\n    }\n\n    //! Transition 1-->ptr\n    /** Should only be called by owner. */\n    void set_and_release( rml::job* job ) {\n        intptr_t value = reinterpret_cast<intptr_t>(job);\n        __TBB_ASSERT( (value&1)==0, \"job misaligned\" );\n        __TBB_ASSERT( value!=0, \"null job\" );\n        __TBB_ASSERT( my_job==1, \"already set, or not marked busy?\" );\n        // Atomic store suffices here.\n        my_job = value;\n    }\n\n    //! Transition 0-->-1\n    /** If successful, return true. called by non-owner (for TBB and the likes) */\n    bool try_plug_null() {\n        return my_job.compare_and_swap( -1, 0 )==0;\n    }\n\n    //! Try to transition to -1.  If successful, set j to contents and return true.\n    /** Called by owner or non-owner. (for OpenMP and the likes) */\n    bool try_plug( rml::job*&j ) {\n        for(;;) {\n            intptr_t snapshot = my_job;\n            if( snapshot&1 ) {\n                j = NULL;\n                return false;\n            } \n            // Not busy\n            if( my_job.compare_and_swap( -1, snapshot )==snapshot ) {\n                j = reinterpret_cast<rml::job*>(snapshot);\n                return true;\n            } \n            // Need to retry, because current thread may be non-owner that read a 0, and owner might have\n            // caused transition 0->1->ptr after we took our snapshot.\n        }\n    }\n\n    /** Called by non-owner to wait for transition to ptr. */\n    rml::job* wait_for_job() const {\n        intptr_t snapshot;\n        for(;;) {\n            snapshot = my_job;\n            if( snapshot&~1 ) break;\n            __TBB_Yield();\n        }\n        __TBB_ASSERT( snapshot!=-1, \"wait on plugged job_automaton\" );\n        return reinterpret_cast<rml::job*>(snapshot&~1);\n    }\n};\n\n} // namespace internal\n} // namespace rml\n\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4244 are back\n\n#endif /* __RML_job_automaton_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/lin-rml-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n__RML_open_factory;\n__RML_close_factory;\n__TBB_make_rml_server;\n__KMP_make_rml_server;\n__TBB_call_with_my_server_info;\n__KMP_call_with_my_server_info;\nlocal:*;\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/rml_server.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"rml_tbb.h\"\n#define private public /* Sleazy trick to avoid publishing internal names in public header. */\n#include \"rml_omp.h\"\n#undef private\n\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/aligned_space.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/tbb_misc.h\"           // Get AvailableHwConcurrency() from here.\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n// VS2008/VC9 seems to have an issue;\n#pragma warning( push )\n#pragma warning( disable: 4985 )\n#endif\n#include \"tbb/concurrent_vector.h\"\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif\n#if _MSC_VER && defined(_Wp64)\n// Workaround for overzealous compiler warnings\n#pragma warning (push)\n#pragma warning (disable: 4244)\n#endif\n\n#include \"job_automaton.h\"\n#include \"wait_counter.h\"\n#include \"thread_monitor.h\"\n\n#if RML_USE_WCRM\n#include <concrt.h>\n#include <concrtrm.h>\nusing namespace Concurrency;\n#include <vector>\n#include <hash_map>\n#define __RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED 0\n#endif /* RML_USE_WCRM */\n\n#define STRINGIFY(x) #x\n#define TOSTRING(x) STRINGIFY(x)\n\nnamespace rml {\nnamespace internal {\n\nusing tbb::internal::rml::tbb_client;\nusing tbb::internal::rml::tbb_server;\n\nusing __kmp::rml::omp_client;\nusing __kmp::rml::omp_server;\n\ntypedef versioned_object::version_type version_type;\n\n#define SERVER_VERSION 2\n#define EARLIEST_COMPATIBLE_CLIENT_VERSION 2\n\nstatic const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;\n\ntemplate<typename Server, typename Client> class generic_connection;\nclass tbb_connection_v2;\nclass omp_connection_v2;\n\n#if RML_USE_WCRM\n//! State of a server_thread\n/** Below are diagrams of legal state transitions.\n\n                          ts_busy\n                          ^      ^\n                         /        \\\n                        /          V\n    ts_done <----- ts_asleep <------> ts_idle\n*/\n\nenum thread_state_t {\n    ts_idle,\n    ts_asleep,\n    ts_busy,\n    ts_done\n};\n\n//! Extra state of an omp server thread\nenum thread_extra_state_t {\n    ts_none,\n    ts_removed,\n    ts_lent\n};\n\n//! Results from try_grab_for()\nenum thread_grab_t {\n    wk_failed,\n    wk_from_asleep,\n    wk_from_idle\n};\n\n#else /* !RML_USE_WCRM */\n\n//! State of a server_thread\n/** Below are diagrams of legal state transitions.\n\n    OMP\n              ts_omp_busy\n              ^          ^\n             /            \\\n            /              V\n    ts_asleep <-----------> ts_idle\n\n\n              ts_deactivated\n             ^            ^\n            /              \\\n           V                \\\n    ts_none  <--------------> ts_reactivated\n\n    TBB\n              ts_tbb_busy\n              ^          ^\n             /            \\\n            /              V\n    ts_asleep <-----------> ts_idle --> ts_done\n\n    For TBB only. Extra state transition.\n\n    ts_created -> ts_started -> ts_visited\n */\nenum thread_state_t {\n    //! Thread not doing anything useful, but running and looking for work.\n    ts_idle,\n    //! Thread not doing anything useful and is asleep */\n    ts_asleep,\n    //! Thread is enlisted into OpenMP team\n    ts_omp_busy,\n    //! Thread is busy doing TBB work.\n    ts_tbb_busy,\n    //! For tbb threads only\n    ts_done,\n    ts_created,\n    ts_started,\n    ts_visited,\n    //! For omp threads only\n    ts_none,\n    ts_deactivated,\n    ts_reactivated\n};\n#endif /* RML_USE_WCRM */\n\n#if TBB_USE_ASSERT\n#define PRODUCE_ARG(x) ,x\n#else\n#define PRODUCE_ARG(x)\n#endif /* TBB_USE_ASSERT */\n\n//! Synchronizes dispatch of OpenMP work.\nclass omp_dispatch_type {\n    typedef ::rml::job job_type;\n    omp_client* client;\n    void* cookie;\n    omp_client::size_type index;\n    tbb::atomic<job_type*> job;\n#if TBB_USE_ASSERT\n    omp_connection_v2* server;\n#endif /* TBB_USE_ASSERT */\npublic:\n    omp_dispatch_type() {job=NULL;}\n    void consume();\n    void produce( omp_client& c, job_type* j, void* cookie_, omp_client::size_type index_ PRODUCE_ARG( omp_connection_v2& s )) {\n        __TBB_ASSERT( j, NULL );\n        __TBB_ASSERT( !job, \"job already set\" );\n        client = &c;\n#if TBB_USE_ASSERT\n        server = &s;\n#endif /* TBB_USE_ASSERT */\n        cookie = cookie_;\n        index = index_;\n        // Must be last\n        job = j;\n    }\n};\n\n//! A reference count.\n/** No default constructor, because users of ref_count must be very careful about whether the\n    initial reference count is 0 or 1. */\nclass ref_count: no_copy {\n    friend class thread_map;\n    tbb::atomic<int> my_ref_count;\npublic:\n    ref_count(int k ) {my_ref_count=k;}\n    ~ref_count() {__TBB_ASSERT( !my_ref_count, \"premature destruction of refcounted object\" );}\n    //! Add one and return new value.\n    int add_ref() {\n        int k = ++my_ref_count;\n        __TBB_ASSERT(k>=1,\"reference count underflowed before add_ref\");\n        return k;\n    }\n    //! Subtract one and return new value.\n    int remove_ref() {\n        int k = --my_ref_count;\n        __TBB_ASSERT(k>=0,\"reference count underflow\");\n        return k;\n    }\n};\n\n#if RML_USE_WCRM\n\n#if USE_UMS_THREAD\n#define RML_THREAD_KIND UmsThreadDefault\n#define RML_THREAD_KIND_STRING \"UmsThread\"\n#else\n#define RML_THREAD_KIND ThreadScheduler\n#define RML_THREAD_KIND_STRING \"WinThread\"\n#endif\n\n// Forward declaration\nclass thread_map;\n\nstatic const IExecutionResource* c_remove_prepare = (IExecutionResource*)0;\nstatic const IExecutionResource* c_remove_returned = (IExecutionResource*)1;\n\n//! Server thread representation\nclass server_thread_rep : no_copy {\n    friend class thread_map;\n    friend class omp_connection_v2;\n    friend class server_thread;\n    friend class tbb_server_thread;\n    friend class omp_server_thread;\n    template<typename Connection> friend void make_job( Connection& c, typename Connection::server_thread_type& t );\n    typedef int thread_state_rep_t;\npublic:\n    //! Ctor\n    server_thread_rep( bool assigned, IScheduler* s, IExecutionResource* r, thread_map& map, rml::client& cl ) :\n        uid( GetExecutionContextId() ), my_scheduler(s), my_proxy(NULL),\n        my_thread_map(map), my_client(cl), my_job(NULL)\n    {\n        my_state = assigned ? ts_busy : ts_idle;\n        my_extra_state = ts_none;\n        terminate = false;\n        my_execution_resource = r;\n    }\n    //! Dtor\n    ~server_thread_rep() {}\n\n    //! Synchronization routine\n    inline rml::job* wait_for_job() {\n        if( !my_job ) my_job = my_job_automaton.wait_for_job();\n        return my_job;\n    }\n\n    // Getters and setters\n    inline thread_state_t read_state() const { thread_state_rep_t s = my_state; return static_cast<thread_state_t>(s); }\n    inline void set_state( thread_state_t to ) {my_state = to;}\n    inline void set_removed() { __TBB_ASSERT( my_extra_state==ts_none, NULL ); my_extra_state = ts_removed; }\n    inline bool is_removed() const { return my_extra_state==ts_removed; }\n    inline bool is_lent() const {return my_extra_state==ts_lent;}\n    inline void set_lent() { my_extra_state=ts_lent; }\n    inline void set_returned() { my_extra_state=ts_none; }\n    inline IExecutionResource* get_execution_resource() { return my_execution_resource; }\n    inline IVirtualProcessorRoot* get_virtual_processor() { return (IVirtualProcessorRoot*)get_execution_resource(); }\n\n    //! Enlist the thread for work\n    inline bool wakeup( thread_state_t to, thread_state_t from ) {\n        __TBB_ASSERT( from==ts_asleep && (to==ts_idle||to==ts_busy||to==ts_done), NULL );\n        return my_state.compare_and_swap( to, from )==from;\n    }\n\n    //! Enlist the thread for.\n    thread_grab_t try_grab_for();\n\n    //! Destroy the client job associated with the thread\n    template<typename Connection> bool destroy_job( Connection* c );\n\n    //! Try to re-use the thread\n    void revive( IScheduler* s, IExecutionResource* r, rml::client& c ) {\n        // the variables may not have been set before a thread was told to quit\n        __TBB_ASSERT( my_scheduler==s, \"my_scheduler has been altered?\\n\" );\n        my_scheduler = s;\n        __TBB_ASSERT( &my_client==&c, \"my_client has been altered?\\n\" );\n        if( r ) my_execution_resource = r;\n        my_client = c;\n        my_state = ts_idle;\n        __TBB_ASSERT( my_extra_state==ts_removed, NULL );\n        my_extra_state = ts_none;\n    }\n\nprotected:\n    const int uid;\n    IScheduler* my_scheduler;\n    IThreadProxy* my_proxy;\n    tbb::atomic<IExecutionResource*> my_execution_resource; /* for non-masters, it is IVirtualProcessorRoot */\n    thread_map& my_thread_map;\n    rml::client& my_client;\n    job* my_job;\n    job_automaton my_job_automaton;\n    tbb::atomic<bool> terminate;\n    tbb::atomic<thread_state_rep_t> my_state;\n    tbb::atomic<thread_extra_state_t> my_extra_state;\n};\n\n//! Class that implements IExecutionContext\nclass server_thread : public IExecutionContext, public server_thread_rep {\n    friend class tbb_connection_v2;\n    friend class omp_connection_v2;\n    friend class tbb_server_thread;\n    friend class omp_server_thread;\n    friend class thread_map;\n    template<typename Connection> friend void make_job( Connection& c, typename Connection::server_thread_type& t );\nprotected:\n    server_thread( bool is_tbb, bool assigned, IScheduler* s, IExecutionResource* r, thread_map& map, rml::client& cl ) : server_thread_rep(assigned,s,r,map,cl), tbb_thread(is_tbb) {}\n    ~server_thread() {}\n    unsigned int GetId() const __TBB_override { return uid; }\n    IScheduler* GetScheduler() __TBB_override { return my_scheduler; }\n    IThreadProxy* GetProxy()   __TBB_override { return my_proxy; }\n    void SetProxy( IThreadProxy* thr_proxy ) __TBB_override { my_proxy = thr_proxy; }\n\nprivate:\n    bool tbb_thread;\n};\n\n// Forward declaration\nclass tbb_connection_v2;\nclass omp_connection_v2;\n\n//! TBB server thread\nclass tbb_server_thread : public server_thread {\n    friend class tbb_connection_v2;\npublic:\n    tbb_server_thread( bool assigned, IScheduler* s, IExecutionResource* r, tbb_connection_v2* con, thread_map& map, rml::client& cl ) : server_thread(true,assigned,s,r,map,cl), my_conn(con) {\n        activation_count = 0;\n    }\n    ~tbb_server_thread() {}\n    void Dispatch( DispatchState* ) __TBB_override;\n    inline bool initiate_termination();\n    bool sleep_perhaps();\n    //! Switch out this thread\n    bool switch_out();\nprivate:\n    tbb_connection_v2* my_conn;\npublic:\n    tbb::atomic<int> activation_count;\n};\n\n//! OMP server thread\nclass omp_server_thread : public server_thread {\n    friend class omp_connection_v2;\npublic:\n    omp_server_thread( bool assigned, IScheduler* s, IExecutionResource* r, omp_connection_v2* con, thread_map& map, rml::client& cl ) :\n        server_thread(false,assigned,s,r,map,cl), my_conn(con), my_cookie(NULL), my_index(UINT_MAX) {}\n    ~omp_server_thread() {}\n    void Dispatch( DispatchState* ) __TBB_override;\n    inline void* get_cookie() {return my_cookie;}\n    inline ::__kmp::rml::omp_client::size_type get_index() {return my_index;}\n\n    inline IExecutionResource* get_execution_resource() { return get_execution_resource(); }\n    inline bool initiate_termination() { return destroy_job( (omp_connection_v2*) my_conn ); }\n    void sleep_perhaps();\nprivate:\n    omp_connection_v2* my_conn;\n    void* my_cookie;\n    ::__kmp::rml::omp_client::size_type my_index;\n    omp_dispatch_type omp_data;\n};\n\n//! Class that implements IScheduler\ntemplate<typename Connection>\nclass scheduler : no_copy, public IScheduler {\npublic:\n    unsigned int GetId() const __TBB_override {return uid;}\n    void Statistics( unsigned int* /*pTaskCompletionRate*/, unsigned int* /*pTaskArrivalRate*/, unsigned int* /*pNumberOfTaskEnqueued*/) __TBB_override {}\n    SchedulerPolicy GetPolicy() const __TBB_override { __TBB_ASSERT(my_policy,NULL); return *my_policy; }\n    void AddVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { if( !my_conn.is_closing() ) my_conn.add_virtual_processors( vproots, count); }\n    void RemoveVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override;\n    void NotifyResourcesExternallyIdle( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { __TBB_ASSERT( false, \"This call is not allowed for TBB\" ); }\n    void NotifyResourcesExternallyBusy( IVirtualProcessorRoot** vproots, unsigned int count ) __TBB_override { __TBB_ASSERT( false, \"This call is not allowed for TBB\" ); }\nprotected:\n    scheduler( Connection& conn );\n    virtual ~scheduler() { __TBB_ASSERT( my_policy, NULL ); delete my_policy; }\n\npublic:\n    static scheduler* create( Connection& conn ) {return new scheduler( conn );}\n\nprivate:\n    const int uid;\n    Connection& my_conn;\n    SchedulerPolicy* my_policy;\n};\n\n\n/*\n * --> ts_busy --> ts_done\n */\nclass thread_scavenger_thread : public IExecutionContext, no_copy {\npublic:\n    thread_scavenger_thread( IScheduler* s, IVirtualProcessorRoot* r, thread_map& map ) :\n        uid( GetExecutionContextId() ), my_scheduler(s), my_virtual_processor_root(r), my_proxy(NULL), my_thread_map(map)\n    {\n        my_state = ts_busy;\n#if TBB_USE_ASSERT\n        activation_count = 0;\n#endif\n    }\n    ~thread_scavenger_thread() {}\n    unsigned int GetId() const __TBB_override { return uid; }\n    IScheduler* GetScheduler() __TBB_override { return my_scheduler; }\n    IThreadProxy* GetProxy()   __TBB_override { return my_proxy; }\n    void SetProxy( IThreadProxy* thr_proxy ) __TBB_override { my_proxy = thr_proxy; }\n    void Dispatch( DispatchState* ) __TBB_override;\n    inline thread_state_t read_state() { return my_state; }\n    inline void set_state( thread_state_t s ) { my_state = s; }\n    inline IVirtualProcessorRoot* get_virtual_processor() { return my_virtual_processor_root; }\nprivate:\n    const int uid;\n    IScheduler* my_scheduler;\n    IVirtualProcessorRoot* my_virtual_processor_root;\n    IThreadProxy* my_proxy;\n    thread_map& my_thread_map;\n    tbb::atomic<thread_state_t> my_state;\n#if TBB_USE_ASSERT\npublic:\n    tbb::atomic<int> activation_count;\n#endif\n};\n\nstatic const thread_scavenger_thread* c_claimed = reinterpret_cast<thread_scavenger_thread*>(1);\n\nstruct garbage_connection_queue {\n    tbb::atomic<uintptr_t> head;\n    tbb::atomic<uintptr_t> tail;\n    static const uintptr_t empty = 0; // connection scavenger thread empty list\n    static const uintptr_t plugged = 1;  // end of use of the list\n    static const uintptr_t plugged_acked = 2;  // connection scavenger saw the plugged flag, and it freed all connections\n};\n\n//! Connection scavenger\n/** It collects closed connection objects, wait for worker threads belonging to the connection to return to ConcRT RM\n *  then return the object to the memory manager.\n */\nclass connection_scavenger_thread {\n    friend void assist_cleanup_connections();\n    /*\n     * connection_scavenger_thread's state\n     * ts_busy <----> ts_asleep <--\n     */\n    tbb::atomic<thread_state_t> state;\n\n    /* We steal two bits from a connection pointer to encode\n     * whether the connection is for TBB or for OMP.\n     *\n     * ----------------------------------\n     * |                          |  |  |\n     * ----------------------------------\n     *                              ^  ^\n     *                             /   |\n     *            1 : tbb, 0 : omp     |\n     *                  if set, terminate\n     */\n    // FIXME: pad these?\n    thread_monitor monitor;\n    HANDLE thr_handle;\n#if TBB_USE_ASSERT\n    tbb::atomic<int> n_scavenger_threads;\n#endif\n\npublic:\n    connection_scavenger_thread() : thr_handle(NULL) {\n        state = ts_asleep;\n#if TBB_USE_ASSERT\n        n_scavenger_threads = 0;\n#endif\n    }\n\n    ~connection_scavenger_thread() {}\n\n    void wakeup() {\n        if( state.compare_and_swap( ts_busy, ts_asleep )==ts_asleep )\n            monitor.notify();\n    }\n\n    void sleep_perhaps();\n\n    void process_requests( uintptr_t conn_ex );\n\n    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );\n\n    void launch() {\n        thread_monitor::launch( connection_scavenger_thread::thread_routine, this, NULL );\n    }\n\n    template<typename Server, typename Client>\n    void add_request( generic_connection<Server,Client>* conn_to_close );\n\n    template<typename Server, typename Client>\n    uintptr_t grab_and_prepend( generic_connection<Server,Client>* last_conn_to_close );\n};\n\nvoid free_all_connections( uintptr_t );\n\n#endif /* RML_USE_WCRM */\n\n#if !RML_USE_WCRM\nclass server_thread;\n\n//! thread_map_base; we need to make the iterator type available to server_thread\nstruct thread_map_base {\n    //! A value in the map\n    class value_type {\n    public:\n        server_thread& thread() {\n            __TBB_ASSERT( my_thread, \"thread_map::value_type::thread() called when !my_thread\" );\n            return *my_thread;\n        }\n        rml::job& job() {\n            __TBB_ASSERT( my_job, \"thread_map::value_type::job() called when !my_job\" );\n            return *my_job;\n        }\n        value_type() : my_thread(NULL), my_job(NULL) {}\n        server_thread& wait_for_thread() const {\n            for(;;) {\n                server_thread* ptr=const_cast<server_thread*volatile&>(my_thread);\n                if( ptr )\n                    return *ptr;\n                __TBB_Yield();\n            }\n        }\n        /** Shortly after when a connection is established, it is possible for the server\n            to grab a server_thread that has not yet created a job object for that server. */\n        rml::job* wait_for_job() const {\n            if( !my_job ) {\n                my_job = my_automaton.wait_for_job();\n            }\n            return my_job;\n        }\n    private:\n        server_thread* my_thread;\n        /** Marked mutable because though it is physically modified, conceptually it is a duplicate of\n            the job held by job_automaton. */\n        mutable rml::job* my_job;\n        job_automaton my_automaton;\n        // FIXME - pad out to cache line, because my_automaton is hit hard by thread()\n        friend class thread_map;\n    };\n    typedef tbb::concurrent_vector<value_type,tbb::zero_allocator<value_type,tbb::cache_aligned_allocator> > array_type;\n};\n#endif /* !RML_USE_WCRM */\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about uninstantiable class\n    #pragma warning(push)\n    #pragma warning(disable:4510 4610)\n#endif\n\ntemplate<typename T>\nclass padded: public T {\n    char pad[cache_line_size - sizeof(T)%cache_line_size];\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\n// FIXME - should we pad out memory to avoid false sharing of our global variables?\nstatic unsigned the_default_concurrency;\nstatic tbb::atomic<int> the_balance;\nstatic tbb::atomic<tbb::internal::do_once_state> rml_module_state;\n\n#if !RML_USE_WCRM\n//! Per thread information\n/** ref_count holds number of clients that are using this,\n    plus 1 if a host thread owns this instance. */\nclass server_thread: public ref_count {\n    friend class thread_map;\n    template<typename Server, typename Client> friend class generic_connection;\n    friend class tbb_connection_v2;\n    friend class omp_connection_v2;\n    //! Integral type that can hold a thread_state_t\n    typedef int thread_state_rep_t;\n    tbb::atomic<thread_state_rep_t> state;\npublic:\n    thread_monitor monitor;\nprivate:\n    bool    is_omp_thread;\n    tbb::atomic<thread_state_rep_t> my_extra_state;\n    server_thread* link;\n    thread_map_base::array_type::iterator my_map_pos;\n    rml::server *my_conn;\n    rml::job* my_job;\n    job_automaton* my_ja;\n    size_t my_index;\n    tbb::atomic<bool> terminate;\n    omp_dispatch_type omp_dispatch;\n\n#if TBB_USE_ASSERT\n    //! Flag used to check if thread is still using *this.\n    bool has_active_thread;\n#endif /* TBB_USE_ASSERT */\n\n    //! Volunteer to sleep.\n    void sleep_perhaps( thread_state_t asleep );\n\n    //! Destroy job corresponding to given client\n    /** Return true if thread must quit. */\n    template<typename Connection>\n    bool destroy_job( Connection& c );\n\n    //! Do terminate the thread\n    /** Return true if thread must quit. */\n    bool do_termination();\n\n    void loop();\n    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );\n\npublic:\n    server_thread();\n\n    ~server_thread();\n\n    //! Read the thread state\n    thread_state_t read_state() const {\n        thread_state_rep_t s = state;\n        __TBB_ASSERT( unsigned(s)<=unsigned(ts_done), \"corrupted server thread?\" );\n        return thread_state_t(s);\n    }\n\n    //! Read the tbb-specific extra thread state\n    thread_state_t read_extra_state() const {\n        thread_state_rep_t s = my_extra_state;\n        return thread_state_t(s);\n    }\n\n    //! Launch a thread that is bound to *this.\n    void launch( size_t stack_size );\n\n    //! Attempt to wakeup a thread\n    /** The value \"to\" is the new state for the thread, if it was woken up.\n        Returns true if thread was woken up, false otherwise. */\n    bool wakeup( thread_state_t to, thread_state_t from );\n\n    //! Attempt to enslave a thread for OpenMP/TBB.\n    /** Returns true if state is successfully changed.  's' takes either ts_omp_busy or ts_tbb_busy */\n    bool try_grab_for( thread_state_t s );\n\n#if _WIN32||_WIN64\n    //! Send the worker thread to sleep temporarily\n    void deactivate();\n\n    //! Wake the worker thread up\n    void reactivate();\n#endif /* _WIN32||_WIN64 */\n};\n\n//! Bag of threads that are private to a client.\nclass private_thread_bag {\n    struct list_thread: server_thread {\n       list_thread* next;\n    };\n    //! Root of atomic linked list of list_thread\n    /** ABA problem is avoided because items are only atomically pushed, never popped. */\n    tbb::atomic<list_thread*> my_root;\n    tbb::cache_aligned_allocator<padded<list_thread> > my_allocator;\npublic:\n    //! Construct empty bag\n    private_thread_bag() {my_root=NULL;}\n\n    //! Create a fresh server_thread object.\n    server_thread& add_one_thread() {\n        list_thread* t = my_allocator.allocate(1);\n        new( t ) list_thread;\n        // Atomically add to list\n        list_thread* old_root;\n        do {\n            old_root = my_root;\n            t->next = old_root;\n        } while( my_root.compare_and_swap( t, old_root )!=old_root );\n        return *t;\n    }\n\n    //! Destroy the bag and threads in it.\n    ~private_thread_bag() {\n        while( my_root ) {\n            // Unlink thread from list.\n            list_thread* t = my_root;\n            my_root = t->next;\n            // Destroy and deallocate the thread.\n            t->~list_thread();\n            my_allocator.deallocate(static_cast<padded<list_thread>*>(t),1);\n        }\n    }\n};\n\n//! Forward declaration\nvoid wakeup_some_tbb_threads();\n\n//! Type-independent part of class generic_connection.\n/** One to one map from server threads to jobs, and associated reference counting. */\nclass thread_map : public thread_map_base {\npublic:\n    typedef rml::client::size_type size_type;\n    //! ctor\n    thread_map( wait_counter& fc, ::rml::client& client ) :\n        all_visited_at_least_once(false), my_min_stack_size(0), my_server_ref_count(1),\n        my_client_ref_count(1), my_client(client), my_factory_counter(fc)\n    { my_unrealized_threads = 0; }\n    //! dtor\n    ~thread_map() {}\n    typedef array_type::iterator iterator;\n    iterator begin() {return my_array.begin();}\n    iterator end() {return my_array.end();}\n    void bind();\n    void unbind();\n    void assist_cleanup( bool assist_null_only );\n\n    /** Returns number of unrealized threads to create. */\n    size_type wakeup_tbb_threads( size_type n );\n    bool wakeup_next_thread( iterator i, tbb_connection_v2& conn );\n    void release_tbb_threads( server_thread* t );\n    void adjust_balance( int delta );\n\n    //! Add a server_thread object to the map, but do not bind it.\n    /** Return NULL if out of unrealized threads. */\n    value_type* add_one_thread( bool is_omp_thread_ );\n\n    void bind_one_thread( rml::server& server, value_type& x );\n\n    void remove_client_ref();\n    int add_server_ref() {return my_server_ref_count.add_ref();}\n    int remove_server_ref() {return my_server_ref_count.remove_ref();}\n\n    ::rml::client& client() const {return my_client;}\n\n    size_type get_unrealized_threads() { return my_unrealized_threads; }\n\nprivate:\n    private_thread_bag my_private_threads;\n    bool all_visited_at_least_once;\n    array_type my_array;\n    size_t my_min_stack_size;\n    tbb::atomic<size_type> my_unrealized_threads;\n\n    //! Number of threads referencing *this, plus one extra.\n    /** When it becomes zero, the containing server object can be safely deleted. */\n    ref_count my_server_ref_count;\n\n    //! Number of jobs that need cleanup, plus one extra.\n    /** When it becomes zero, acknowledge_close_connection is called. */\n    ref_count my_client_ref_count;\n\n    ::rml::client& my_client;\n    //! Counter owned by factory that produced this thread_map.\n    wait_counter& my_factory_counter;\n};\n\nvoid thread_map::bind_one_thread( rml::server& server, value_type& x ) {\n    // Add one to account for the thread referencing this map hereforth.\n    server_thread& t = x.thread();\n    my_server_ref_count.add_ref();\n    my_client_ref_count.add_ref();\n#if TBB_USE_ASSERT\n    __TBB_ASSERT( t.add_ref()==1, NULL );\n#else\n    t.add_ref();\n#endif\n    // Have responsibility to start the thread.\n    t.my_conn = &server;\n    t.my_ja = &x.my_automaton;\n    t.launch( my_min_stack_size );\n    /* Must wake thread up so it can fill in its \"my_job\" field in *this.\n       Otherwise deadlock can occur where wait_for_job spins on thread that is sleeping. */\n    __TBB_ASSERT( t.state!=ts_tbb_busy, NULL );\n    t.wakeup( ts_idle, ts_asleep );\n}\n\nthread_map::value_type* thread_map::add_one_thread( bool is_omp_thread_ ) {\n    size_type u;\n    do {\n        u = my_unrealized_threads;\n        if( !u ) return NULL;\n    } while( my_unrealized_threads.compare_and_swap(u-1,u)!=u );\n    server_thread& t = my_private_threads.add_one_thread();\n    t.is_omp_thread = is_omp_thread_;\n    __TBB_ASSERT( u>=1, NULL );\n    t.my_index = u - 1;\n    __TBB_ASSERT( t.state!=ts_tbb_busy, NULL );\n    t.my_extra_state = t.is_omp_thread ? ts_none : ts_created;\n\n    iterator i = t.my_map_pos = my_array.grow_by(1);\n    value_type& v = *i;\n    v.my_thread = &t;\n    return &v;\n}\n\nvoid thread_map::bind() {\n    ++my_factory_counter;\n    my_min_stack_size = my_client.min_stack_size();\n    __TBB_ASSERT( my_unrealized_threads==0, \"already called bind?\" );\n    my_unrealized_threads = my_client.max_job_count();\n}\n\nvoid thread_map::unbind() {\n    // Ask each server_thread to cleanup its job for this server.\n    for( iterator i=begin(); i!=end(); ++i ) {\n        server_thread& t = i->thread();\n        t.terminate = true;\n        t.wakeup( ts_idle, ts_asleep );\n    }\n    // Remove extra ref to client.\n    remove_client_ref();\n}\n\nvoid thread_map::assist_cleanup( bool assist_null_only ) {\n    // To avoid deadlock, the current thread *must* help out with cleanups that have not started,\n    // because the thread that created the job may be busy for a long time.\n    for( iterator i = begin(); i!=end(); ++i ) {\n        rml::job* j=0;\n        job_automaton& ja = i->my_automaton;\n        if( assist_null_only ? ja.try_plug_null() : ja.try_plug(j) ) {\n            if( j ) {\n                my_client.cleanup(*j);\n            } else {\n                // server thread did not get a chance to create a job.\n            }\n            remove_client_ref();\n        }\n    }\n}\n\nthread_map::size_type thread_map::wakeup_tbb_threads( size_type n ) {\n    __TBB_ASSERT(n>0,\"must specify positive number of threads to wake up\");\n    iterator e = end();\n    for( iterator k=begin(); k!=e; ++k ) {\n        // If another thread added *k, there is a tiny timing window where thread() is invalid.\n        server_thread& t = k->wait_for_thread();\n        thread_state_t thr_s = t.read_state();\n        if( t.read_extra_state()==ts_created || thr_s==ts_tbb_busy || thr_s==ts_done )\n            continue;\n        if( --the_balance>=0 ) { // try to withdraw a coin from the deposit\n            while( !t.try_grab_for( ts_tbb_busy ) ) {\n                thr_s = t.read_state();\n                if( thr_s==ts_tbb_busy || thr_s==ts_done ) {\n                    // we lost; move on to the next.\n                    ++the_balance;\n                    goto skip;\n                }\n            }\n            if( --n==0 )\n                return 0;\n        } else {\n            // overdraft.\n            ++the_balance;\n            break;\n        }\nskip:\n        ;\n    }\n    return n<my_unrealized_threads ? n : size_type(my_unrealized_threads);\n}\n#else /* RML_USE_WCRM */\n\nclass thread_map : no_copy {\n    friend class omp_connection_v2;\n    typedef ::std::hash_map<uintptr_t,server_thread*> hash_map_type;\n    size_t my_min_stack_size;\n    size_t my_unrealized_threads;\n    ::rml::client& my_client;\n    //! Counter owned by factory that produced this thread_map.\n    wait_counter& my_factory_counter;\n    //! Ref counters\n    ref_count my_server_ref_count;\n    ref_count my_client_ref_count;\n    // FIXME: pad this?\n    hash_map_type my_map;\n    bool shutdown_in_progress;\n    std::vector<IExecutionResource*> original_exec_resources;\n    tbb::cache_aligned_allocator<padded<tbb_server_thread> > my_tbb_allocator;\n    tbb::cache_aligned_allocator<padded<omp_server_thread> > my_omp_allocator;\n    tbb::cache_aligned_allocator<padded<thread_scavenger_thread> > my_scavenger_allocator;\n    IResourceManager* my_concrt_resource_manager;\n    IScheduler* my_scheduler;\n    ISchedulerProxy* my_scheduler_proxy;\n    tbb::atomic<thread_scavenger_thread*> my_thread_scavenger_thread;\n#if TBB_USE_ASSERT\n    tbb::atomic<int> n_add_vp_requests;\n    tbb::atomic<int> n_thread_scavengers_created;\n#endif\npublic:\n    thread_map( wait_counter& fc, ::rml::client& client ) :\n        my_min_stack_size(0), my_client(client), my_factory_counter(fc),\n        my_server_ref_count(1), my_client_ref_count(1), shutdown_in_progress(false),\n        my_concrt_resource_manager(NULL), my_scheduler(NULL), my_scheduler_proxy(NULL)\n    {\n        my_thread_scavenger_thread = NULL;\n#if TBB_USE_ASSERT\n        n_add_vp_requests = 0;\n        n_thread_scavengers_created;\n#endif\n    }\n\n    ~thread_map() {\n        __TBB_ASSERT( n_thread_scavengers_created<=1, \"too many scavenger thread created\" );\n        // if thread_scavenger_thread is launched, wait for it to complete\n        if( my_thread_scavenger_thread ) {\n            __TBB_ASSERT( my_thread_scavenger_thread!=c_claimed, NULL );\n            while( my_thread_scavenger_thread->read_state()==ts_busy )\n                __TBB_Yield();\n            thread_scavenger_thread* tst = my_thread_scavenger_thread;\n            my_scavenger_allocator.deallocate(static_cast<padded<thread_scavenger_thread>*>(tst),1);\n        }\n        // deallocate thread contexts\n        for( hash_map_type::const_iterator hi=my_map.begin(); hi!=my_map.end(); ++hi ) {\n            server_thread* thr = hi->second;\n            if( thr->tbb_thread ) {\n                while( ((tbb_server_thread*)thr)->activation_count>1 )\n                    __TBB_Yield();\n                ((tbb_server_thread*)thr)->~tbb_server_thread();\n                my_tbb_allocator.deallocate(static_cast<padded<tbb_server_thread>*>(thr),1);\n            } else {\n                ((omp_server_thread*)thr)->~omp_server_thread();\n                my_omp_allocator.deallocate(static_cast<padded<omp_server_thread>*>(thr),1);\n            }\n        }\n        if( my_scheduler_proxy ) {\n            my_scheduler_proxy->Shutdown();\n            my_concrt_resource_manager->Release();\n            __TBB_ASSERT( my_scheduler, NULL );\n            delete my_scheduler;\n        } else {\n            __TBB_ASSERT( !my_scheduler, NULL );\n        }\n    }\n    typedef hash_map_type::key_type key_type;\n    typedef hash_map_type::value_type value_type;\n    typedef hash_map_type::iterator iterator;\n    iterator begin() {return my_map.begin();}\n    iterator end() {return my_map.end();}\n    iterator find( key_type k ) {return my_map.find( k );}\n    iterator insert( key_type k, server_thread* v ) {\n        std::pair<iterator,bool> res = my_map.insert( value_type(k,v) );\n        return res.first;\n    }\n    void bind( IScheduler* s ) {\n        ++my_factory_counter;\n        if( s ) {\n            my_unrealized_threads = s->GetPolicy().GetPolicyValue( MaxConcurrency );\n            __TBB_ASSERT( my_unrealized_threads>0, NULL );\n            my_scheduler = s;\n            my_concrt_resource_manager = CreateResourceManager(); // reference count==3 when first created.\n            my_scheduler_proxy = my_concrt_resource_manager->RegisterScheduler( s, CONCRT_RM_VERSION_1 );\n            my_scheduler_proxy->RequestInitialVirtualProcessors( false );\n        }\n    }\n    bool is_closing() { return shutdown_in_progress; }\n    void unbind( rml::server& server, ::tbb::spin_mutex& mtx );\n    void add_client_ref() { my_server_ref_count.add_ref(); }\n    void remove_client_ref();\n    void add_server_ref() {my_server_ref_count.add_ref();}\n    int remove_server_ref() {return my_server_ref_count.remove_ref();}\n    int get_server_ref_count() { int k = my_server_ref_count.my_ref_count; return k; }\n    void assist_cleanup( bool assist_null_only );\n    void adjust_balance( int delta );\n    int current_balance() const {int k = the_balance; return k;}\n    ::rml::client& client() const {return my_client;}\n    void register_as_master( server::execution_resource_t& v ) const { (IExecutionResource*&)v = my_scheduler_proxy ? my_scheduler_proxy->SubscribeCurrentThread() : NULL; }\n    // Remove() should be called from the same thread that subscribed the current h/w thread (i.e., the one that\n    // called register_as_master() ).\n    void unregister( server::execution_resource_t v ) const {if( v ) ((IExecutionResource*)v)->Remove( my_scheduler );}\n    void add_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count, tbb_connection_v2& conn, ::tbb::spin_mutex& mtx );\n    void add_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count, omp_connection_v2& conn, ::tbb::spin_mutex& mtx );\n    void remove_virtual_processors( IVirtualProcessorRoot** vproots, unsigned count, ::tbb::spin_mutex& mtx );\n    void mark_virtual_processors_as_lent( IVirtualProcessorRoot** vproots, unsigned count, ::tbb::spin_mutex& mtx );\n    void create_oversubscribers( unsigned n, std::vector<server_thread*>& thr_vec, omp_connection_v2& conn, ::tbb::spin_mutex& mtx );\n    void wakeup_tbb_threads( int c, ::tbb::spin_mutex& mtx );\n    void mark_virtual_processors_as_returned( IVirtualProcessorRoot** vprocs, unsigned int count, tbb::spin_mutex& mtx );\n    inline void addto_original_exec_resources( IExecutionResource* r, ::tbb::spin_mutex& mtx ) {\n        ::tbb::spin_mutex::scoped_lock lck(mtx);\n        __TBB_ASSERT( !is_closing(), \"trying to register master while connection is being shutdown?\" );\n        original_exec_resources.push_back( r );\n    }\n#if !__RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED\n    void allocate_thread_scavenger( IExecutionResource* v );\n#endif\n    inline thread_scavenger_thread* get_thread_scavenger() { return my_thread_scavenger_thread; }\n};\n\ngarbage_connection_queue connections_to_reclaim;\nconnection_scavenger_thread connection_scavenger;\n\n#endif /* !RML_USE_WCRM */\n\n//------------------------------------------------------------------------\n// generic_connection\n//------------------------------------------------------------------------\n\ntemplate<typename Server, typename Client>\nstruct connection_traits {};\n\n// head of the active tbb connections\nstatic tbb::atomic<uintptr_t> active_tbb_connections;\nstatic tbb::atomic<int> current_tbb_conn_readers;\nstatic size_t current_tbb_conn_reader_epoch;\nstatic tbb::atomic<size_t> close_tbb_connection_event_count;\n\n#if RML_USE_WCRM\ntemplate<typename Connection>\nvoid make_job( Connection& c, server_thread& t );\n#endif\n\ntemplate<typename Server, typename Client>\nclass generic_connection: public Server, no_copy {\n    version_type version() const __TBB_override {return SERVER_VERSION;}\n    void yield() __TBB_override {thread_monitor::yield();}\n    void independent_thread_number_changed( int delta ) __TBB_override { my_thread_map.adjust_balance( -delta ); }\n    unsigned default_concurrency() const __TBB_override { return the_default_concurrency; }\n    friend void wakeup_some_tbb_threads();\n    friend class connection_scavenger_thread;\n\nprotected:\n    thread_map my_thread_map;\n    generic_connection* next_conn;\n    size_t my_ec;\n#if RML_USE_WCRM\n    // FIXME: pad it?\n    tbb::spin_mutex map_mtx;\n    IScheduler* my_scheduler;\n    void do_open( IScheduler* s ) {\n        my_scheduler = s;\n        my_thread_map.bind( s );\n    }\n    bool is_closing() { return my_thread_map.is_closing(); }\n    void request_close_connection( bool existing );\n#else\n    void do_open() {my_thread_map.bind();}\n    void request_close_connection( bool );\n#endif /* RML_USE_WCRM */\n    //! Make destructor virtual\n    virtual ~generic_connection() {}\n#if !RML_USE_WCRM\n    generic_connection( wait_counter& fc, Client& c ) : my_thread_map(fc,c), next_conn(NULL), my_ec(0) {}\n#else\n    generic_connection( wait_counter& fc, Client& c ) :\n            my_thread_map(fc,c), next_conn(NULL), my_ec(0), map_mtx(), my_scheduler(NULL) {}\n    void add_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count );\n    void remove_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count );\n    void notify_resources_externally_busy( IVirtualProcessorRoot** vprocs, unsigned int count ) { my_thread_map.mark_virtual_processors_as_lent( vprocs, count, map_mtx ); }\n    void notify_resources_externally_idle( IVirtualProcessorRoot** vprocs, unsigned int count ) {\n        my_thread_map.mark_virtual_processors_as_returned( vprocs, count, map_mtx );\n    }\n#endif /* !RML_USE_WCRM */\n\npublic:\n    typedef Server server_type;\n    typedef Client client_type;\n    Client& client() const {return static_cast<Client&>(my_thread_map.client());}\n    void set_scratch_ptr( job& j, void* ptr ) { ::rml::server::scratch_ptr(j) = ptr; }\n#if RML_USE_WCRM\n    template<typename Connection>\n    friend void make_job( Connection& c, server_thread& t );\n    void add_server_ref ()   {my_thread_map.add_server_ref();}\n    void remove_server_ref() {if( my_thread_map.remove_server_ref()==0 ) delete this;}\n    void add_client_ref ()   {my_thread_map.add_client_ref();}\n    void remove_client_ref() {my_thread_map.remove_client_ref();}\n#else /* !RML_USE_WCRM */\n    int  add_server_ref ()   {return my_thread_map.add_server_ref();}\n    void remove_server_ref() {if( my_thread_map.remove_server_ref()==0 ) delete this;}\n    void remove_client_ref() {my_thread_map.remove_client_ref();}\n    void make_job( server_thread& t, job_automaton& ja );\n#endif /* RML_USE_WCRM */\n    static generic_connection* get_addr( uintptr_t addr_ex ) {\n        return reinterpret_cast<generic_connection*>( addr_ex&~(uintptr_t)3 );\n    }\n};\n\n//------------------------------------------------------------------------\n// TBB server\n//------------------------------------------------------------------------\n\ntemplate<>\nstruct connection_traits<tbb_server,tbb_client> {\n    static const bool assist_null_only = true;\n    static const bool is_tbb = true;\n};\n\n//! Represents a server/client binding.\n/** The internal representation uses inheritance for the server part and a pointer for the client part. */\nclass tbb_connection_v2: public generic_connection<tbb_server,tbb_client> {\n    void adjust_job_count_estimate( int delta ) __TBB_override;\n#if !RML_USE_WCRM\n#if _WIN32||_WIN64\n    void register_master ( rml::server::execution_resource_t& /*v*/ ) __TBB_override {}\n    void unregister_master ( rml::server::execution_resource_t /*v*/ ) __TBB_override {}\n#endif\n#else\n    void register_master ( rml::server::execution_resource_t& v ) __TBB_override {\n        my_thread_map.register_as_master(v);\n        if( v ) ++nesting;\n    }\n    void unregister_master ( rml::server::execution_resource_t v ) __TBB_override {\n        if( v ) {\n            __TBB_ASSERT( nesting>0, NULL );\n            if( --nesting==0 ) {\n#if !__RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED\n                my_thread_map.allocate_thread_scavenger( (IExecutionResource*)v );\n#endif\n            }\n        }\n        my_thread_map.unregister(v);\n    }\n    IScheduler* create_scheduler() {return( scheduler<tbb_connection_v2>::create( *this ) );}\n    friend void  free_all_connections( uintptr_t );\n    friend class scheduler<tbb_connection_v2>;\n    friend class execution_context;\n    friend class connection_scavenger_thread;\n#endif /* RML_USE_WCRM */\n    friend void wakeup_some_tbb_threads();\n    //! Estimate on number of jobs without threads working on them.\n    tbb::atomic<int> my_slack;\n    friend class dummy_class_to_shut_up_gratuitous_warning_from_gcc_3_2_3;\n#if TBB_USE_ASSERT\n    tbb::atomic<int> my_job_count_estimate;\n#endif /* TBB_USE_ASSERT */\n\n    tbb::atomic<int> n_adjust_job_count_requests;\n#if RML_USE_WCRM\n    tbb::atomic<int> nesting;\n#endif\n\n    // dtor\n    ~tbb_connection_v2();\n\npublic:\n#if RML_USE_WCRM\n    typedef tbb_server_thread server_thread_type;\n#endif\n    //! True if there is slack that try_process can use.\n    bool has_slack() const {return my_slack>0;}\n\n#if RML_USE_WCRM\n    bool try_process( job& job )\n#else\n    bool try_process( server_thread& t, job& job )\n#endif\n    {\n        bool visited = false;\n        // No check for my_slack>0 here because caller is expected to do that check.\n        int k = --my_slack;\n        if( k>=0 ) {\n#if !RML_USE_WCRM\n            t.my_extra_state = ts_visited; // remember the thread paid a trip to process() at least once\n#endif\n            client().process(job);\n            visited = true;\n        }\n        ++my_slack;\n        return visited;\n    }\n\n    tbb_connection_v2( wait_counter& fc, tbb_client& client ) : generic_connection<tbb_server,tbb_client>(fc,client)\n    {\n        my_slack = 0;\n#if RML_USE_WCRM\n        nesting = 0;\n#endif\n#if TBB_USE_ASSERT\n        my_job_count_estimate = 0;\n#endif /* TBB_USE_ASSERT */\n        __TBB_ASSERT( !my_slack, NULL );\n\n#if RML_USE_WCRM\n        do_open( client.max_job_count()>0 ? create_scheduler() : NULL );\n#else\n        do_open();\n#endif /* !RML_USE_WCRM */\n        n_adjust_job_count_requests = 0;\n\n        // Acquire head of active_tbb_connections & push the connection into the list\n        uintptr_t conn;\n        do {\n            for( ; (conn=active_tbb_connections)&1; )\n                __TBB_Yield();\n        } while( active_tbb_connections.compare_and_swap( conn|1, conn )!=conn );\n\n        this->next_conn = generic_connection<tbb_server,tbb_client>::get_addr(conn);\n        // Update and release head of active_tbb_connections\n        active_tbb_connections = (uintptr_t) this; // set and release\n    }\n    inline void wakeup_tbb_threads( unsigned n ) {\n        my_thread_map.wakeup_tbb_threads( n\n#if RML_USE_WCRM\n                , map_mtx\n#endif\n                );\n    }\n#if RML_USE_WCRM\n    inline int get_nesting_level() { return nesting; }\n#else\n    inline bool wakeup_next_thread( thread_map::iterator i ) {return my_thread_map.wakeup_next_thread( i, *this );}\n    inline thread_map::size_type get_unrealized_threads () {return my_thread_map.get_unrealized_threads();}\n#endif /* !RML_USE_WCRM */\n};\n\n//------------------------------------------------------------------------\n// OpenMP server\n//------------------------------------------------------------------------\n\ntemplate<>\nstruct connection_traits<omp_server,omp_client> {\n    static const bool assist_null_only = false;\n    static const bool is_tbb = false;\n};\n\nclass omp_connection_v2: public generic_connection<omp_server,omp_client> {\n#if !RML_USE_WCRM\n    int  current_balance() const __TBB_override {return the_balance;}\n#else\n    friend void  free_all_connections( uintptr_t );\n    friend class scheduler<omp_connection_v2>;\n    int current_balance() const __TBB_override {return my_thread_map.current_balance();}\n#endif /* !RML_USE_WCRM */\n    int  try_increase_load( size_type n, bool strict ) __TBB_override;\n    void decrease_load( size_type n ) __TBB_override;\n    void get_threads( size_type request_size, void* cookie, job* array[] ) __TBB_override;\n#if !RML_USE_WCRM\n#if _WIN32||_WIN64\n    void register_master ( rml::server::execution_resource_t& /*v*/ ) __TBB_override {}\n    void unregister_master ( rml::server::execution_resource_t /*v*/ ) __TBB_override {}\n#endif\n#else\n    void register_master ( rml::server::execution_resource_t& v ) __TBB_override {\n        my_thread_map.register_as_master( v );\n        my_thread_map.addto_original_exec_resources( (IExecutionResource*)v, map_mtx );\n    }\n    void unregister_master ( rml::server::execution_resource_t v ) __TBB_override { my_thread_map.unregister(v); }\n#endif /* !RML_USE_WCRM */\n#if _WIN32||_WIN64\n    void deactivate( rml::job* j ) __TBB_override;\n    void reactivate( rml::job* j ) __TBB_override;\n#endif /* _WIN32||_WIN64 */\n#if RML_USE_WCRM\npublic:\n    typedef omp_server_thread server_thread_type;\nprivate:\n    IScheduler* create_scheduler() {return( scheduler<omp_connection_v2>::create( *this ) );}\n#endif /* RML_USE_WCRM */\npublic:\n#if TBB_USE_ASSERT\n    //! Net change in delta caused by this connection.\n    /** Should be zero when connection is broken */\n    tbb::atomic<int> net_delta;\n#endif /* TBB_USE_ASSERT */\n\n    omp_connection_v2( wait_counter& fc, omp_client& client ) : generic_connection<omp_server,omp_client>(fc,client) {\n#if TBB_USE_ASSERT\n        net_delta = 0;\n#endif /* TBB_USE_ASSERT */\n#if RML_USE_WCRM\n        do_open( create_scheduler() );\n#else\n        do_open();\n#endif /* RML_USE_WCRM */\n    }\n    ~omp_connection_v2() {__TBB_ASSERT( net_delta==0, \"net increase/decrease of load is nonzero\" );}\n};\n\n#if !RML_USE_WCRM\n/* to deal with cases where the machine is oversubscribed; we want each thread to trip to try_process() at least once */\n/* this should not involve computing the_balance */\nbool thread_map::wakeup_next_thread( thread_map::iterator this_thr, tbb_connection_v2& conn ) {\n    if( all_visited_at_least_once )\n        return false;\n\n    iterator e = end();\nretry:\n    bool exist = false;\n    iterator k=this_thr;\n    for( ++k; k!=e; ++k ) {\n        // If another thread added *k, there is a tiny timing window where thread() is invalid.\n        server_thread& t = k->wait_for_thread();\n        if( t.my_extra_state!=ts_visited )\n            exist = true;\n        if( t.read_state()!=ts_tbb_busy && t.my_extra_state==ts_started )\n            if( t.try_grab_for( ts_tbb_busy ) )\n                return true;\n    }\n    for( k=begin(); k!=this_thr; ++k ) {\n        server_thread& t = k->wait_for_thread();\n        if( t.my_extra_state!=ts_visited )\n            exist = true;\n        if( t.read_state()!=ts_tbb_busy && t.my_extra_state==ts_started )\n            if( t.try_grab_for( ts_tbb_busy ) )\n                return true;\n    }\n\n    if( exist )\n        if( conn.has_slack() )\n            goto retry;\n    else\n        all_visited_at_least_once = true;\n    return false;\n}\n\nvoid thread_map::release_tbb_threads( server_thread* t ) {\n    for( ; t; t = t->link ) {\n        while( t->read_state()!=ts_asleep )\n            __TBB_Yield();\n        t->my_extra_state = ts_started;\n    }\n}\n#endif /* !RML_USE_WCRM */\n\nvoid thread_map::adjust_balance( int delta ) {\n    int new_balance = the_balance += delta;\n    if( new_balance>0 && 0>=new_balance-delta /*== old the_balance*/ )\n        wakeup_some_tbb_threads();\n}\n\nvoid thread_map::remove_client_ref() {\n    int k = my_client_ref_count.remove_ref();\n    if( k==0 ) {\n        // Notify factory that thread has crossed back into RML.\n        --my_factory_counter;\n        // Notify client that RML is done with the client object.\n        my_client.acknowledge_close_connection();\n    }\n}\n\n#if RML_USE_WCRM\n/** Not a member of generic_connection because we need Connection to be the derived class. */\ntemplate<typename Connection>\nvoid make_job( Connection& c, typename Connection::server_thread_type& t ) {\n    if( t.my_job_automaton.try_acquire() ) {\n        rml::job* j = t.my_client.create_one_job();\n        __TBB_ASSERT( j!=NULL, \"client:::create_one_job returned NULL\" );\n        __TBB_ASSERT( (intptr_t(j)&1)==0, \"client::create_one_job returned misaligned job\" );\n        t.my_job_automaton.set_and_release( j );\n        c.set_scratch_ptr( *j, (void*) &t );\n    }\n}\n#endif /* RML_USE_WCRM */\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n// Suppress \"conditional expression is constant\" warning.\n#pragma warning( push )\n#pragma warning( disable: 4127 )\n#endif\n#if RML_USE_WCRM\ntemplate<typename Server, typename Client>\nvoid generic_connection<Server,Client>::request_close_connection( bool exiting ) {\n    // for TBB connections, exiting should always be false\n    if( connection_traits<Server,Client>::is_tbb )\n        __TBB_ASSERT( !exiting, NULL);\n#if TBB_USE_ASSERT\n    else if( exiting )\n        reinterpret_cast<omp_connection_v2*>(this)->net_delta = 0;\n#endif\n    if( exiting ) {\n        uintptr_t tail = connections_to_reclaim.tail;\n        while( connections_to_reclaim.tail.compare_and_swap( garbage_connection_queue::plugged, tail )!=tail )\n            __TBB_Yield();\n        my_thread_map.unbind( *this, map_mtx );\n        my_thread_map.assist_cleanup( connection_traits<Server,Client>::assist_null_only );\n        // It is assumed that the client waits for all other threads to terminate before\n        // calling request_close_connection with true.  Thus, it is safe to return all\n        // outstanding connection objects that are reachable. It is possible that there may\n        // be some unreachable connection objects lying somewhere.\n        free_all_connections( connection_scavenger.grab_and_prepend( this ) );\n        return;\n    }\n#else /* !RML_USE_WCRM */\ntemplate<typename Server, typename Client>\nvoid generic_connection<Server,Client>::request_close_connection( bool ) {\n#endif /* RML_USE_WCRM */\n    if( connection_traits<Server,Client>::is_tbb ) {\n        // acquire the head of active tbb connections\n        uintptr_t conn;\n        do {\n            for( ; (conn=active_tbb_connections)&1; )\n                __TBB_Yield();\n        } while( active_tbb_connections.compare_and_swap( conn|1, conn )!=conn );\n\n        // Locate the current connection\n        generic_connection* pred_conn = NULL;\n        generic_connection* curr_conn = (generic_connection*) conn;\n        for( ; curr_conn && curr_conn!=this; curr_conn=curr_conn->next_conn )\n            pred_conn = curr_conn;\n        __TBB_ASSERT( curr_conn==this, \"the current connection is not in the list?\" );\n\n        // Remove this from the list\n        if( pred_conn ) {\n            pred_conn->next_conn = curr_conn->next_conn;\n            active_tbb_connections = reinterpret_cast<uintptr_t>(generic_connection<tbb_server,tbb_client>::get_addr(active_tbb_connections)); // release it\n        } else\n            active_tbb_connections = (uintptr_t) curr_conn->next_conn; // update & release it\n        curr_conn->next_conn = NULL;\n        // Increment the tbb connection close event count\n        my_ec = ++close_tbb_connection_event_count;\n        // Wait happens in tbb_connection_v2::~tbb_connection_v2()\n    }\n#if RML_USE_WCRM\n    my_thread_map.unbind( *this, map_mtx );\n    my_thread_map.assist_cleanup( connection_traits<Server,Client>::assist_null_only );\n    connection_scavenger.add_request( this );\n#else\n    my_thread_map.unbind();\n    my_thread_map.assist_cleanup( connection_traits<Server,Client>::assist_null_only );\n    // Remove extra reference\n    remove_server_ref();\n#endif\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif\n\n#if RML_USE_WCRM\n\ntemplate<typename Server, typename Client>\nvoid generic_connection<Server,Client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )\n{}\n\ntemplate<>\nvoid generic_connection<tbb_server,tbb_client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )\n{\n    my_thread_map.add_virtual_processors( vproots, count, (tbb_connection_v2&)*this, map_mtx );\n}\ntemplate<>\nvoid generic_connection<omp_server,omp_client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )\n{\n    // For OMP, since it uses ScheudlerPolicy of MinThreads==MaxThreads, this is called once when\n    // RequestInitialVirtualProcessors() is  called.\n    my_thread_map.add_virtual_processors( vproots, count, (omp_connection_v2&)*this, map_mtx );\n}\n\ntemplate<typename Server, typename Client>\nvoid generic_connection<Server,Client>::remove_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )\n{\n    __TBB_ASSERT( false, \"should not be called\" );\n}\n/* For OMP, RemoveVirtualProcessors() will never be called. */\n\ntemplate<>\nvoid generic_connection<tbb_server,tbb_client>::remove_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )\n{\n    my_thread_map.remove_virtual_processors( vproots, count, map_mtx );\n}\n\nvoid tbb_connection_v2::adjust_job_count_estimate( int delta ) {\n#if TBB_USE_ASSERT\n    my_job_count_estimate += delta;\n#endif /* TBB_USE_ASSERT */\n    // Atomically update slack.\n    int c = my_slack+=delta;\n    if( c>0 ) {\n        ++n_adjust_job_count_requests;\n        my_thread_map.wakeup_tbb_threads( c, map_mtx );\n        --n_adjust_job_count_requests;\n    }\n}\n#endif /* RML_USE_WCRM */\n\ntbb_connection_v2::~tbb_connection_v2() {\n#if TBB_USE_ASSERT\n    if( my_job_count_estimate!=0 ) {\n        fprintf(stderr, \"TBB client tried to disconnect with non-zero net job count estimate of %d\\n\", int(my_job_count_estimate ));\n        abort();\n    }\n    __TBB_ASSERT( !my_slack, \"attempt to destroy tbb_server with nonzero slack\" );\n    __TBB_ASSERT( this!=static_cast<tbb_connection_v2*>(generic_connection<tbb_server,tbb_client >::get_addr(active_tbb_connections)), \"request_close_connection() must be called\" );\n#endif /* TBB_USE_ASSERT */\n#if !RML_USE_WCRM\n    // If there are other threads ready for work, give them coins\n    if( the_balance>0 )\n        wakeup_some_tbb_threads();\n#endif\n    // Someone might be accessing my data members\n    while( current_tbb_conn_readers>0 && (ptrdiff_t)(my_ec-current_tbb_conn_reader_epoch)>0 )\n        __TBB_Yield();\n}\n\n#if !RML_USE_WCRM\ntemplate<typename Server, typename Client>\nvoid generic_connection<Server,Client>::make_job( server_thread& t, job_automaton& ja ) {\n    if( ja.try_acquire() ) {\n        rml::job* j = client().create_one_job();\n        __TBB_ASSERT( j!=NULL, \"client:::create_one_job returned NULL\" );\n        __TBB_ASSERT( (intptr_t(j)&1)==0, \"client::create_one_job returned misaligned job\" );\n        ja.set_and_release( j );\n        __TBB_ASSERT( t.my_conn && t.my_ja && t.my_job==NULL, NULL );\n        t.my_job  = j;\n        set_scratch_ptr( *j, (void*) &t );\n    }\n}\n\nvoid tbb_connection_v2::adjust_job_count_estimate( int delta ) {\n#if TBB_USE_ASSERT\n    my_job_count_estimate += delta;\n#endif /* TBB_USE_ASSERT */\n    // Atomically update slack.\n    int c = my_slack+=delta;\n    if( c>0 ) {\n        ++n_adjust_job_count_requests;\n        // The client has work to do and there are threads available\n        thread_map::size_type n = my_thread_map.wakeup_tbb_threads(c);\n\n        server_thread* new_threads_anchor = NULL;\n        thread_map::size_type i;\n        {\n        tbb::internal::affinity_helper fpa;\n        for( i=0; i<n; ++i ) {\n            // Obtain unrealized threads\n            thread_map::value_type* k = my_thread_map.add_one_thread( false );\n            if( !k )\n                // No unrealized threads left.\n                break;\n            // Eagerly start the thread off.\n            fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n            my_thread_map.bind_one_thread( *this, *k );\n            server_thread& t = k->thread();\n            __TBB_ASSERT( !t.link, NULL );\n            t.link = new_threads_anchor;\n            new_threads_anchor = &t;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n\n        thread_map::size_type j=0;\n        for( ; the_balance>0 && j<i; ++j ) {\n            if( --the_balance>=0 ) {\n                // Withdraw a coin from the bank\n                __TBB_ASSERT( new_threads_anchor, NULL );\n\n                server_thread* t = new_threads_anchor;\n                new_threads_anchor = t->link;\n                while( !t->try_grab_for( ts_tbb_busy ) )\n                    __TBB_Yield();\n                t->my_extra_state = ts_started;\n            } else {\n                // Overdraft. return it to the bank\n                ++the_balance;\n                break;\n            }\n        }\n        __TBB_ASSERT( i-j!=0||new_threads_anchor==NULL, NULL );\n        // Mark the ones that did not get started as eligible for being snatched.\n        if( new_threads_anchor )\n            my_thread_map.release_tbb_threads( new_threads_anchor );\n\n        --n_adjust_job_count_requests;\n    }\n}\n#endif /* RML_USE_WCRM */\n\n#if RML_USE_WCRM\nint omp_connection_v2::try_increase_load( size_type n, bool strict ) {\n    __TBB_ASSERT(int(n)>=0,NULL);\n    if( strict ) {\n        the_balance -= int(n);\n    } else {\n        int avail, old;\n        do {\n            avail = the_balance;\n            if( avail<=0 ) {\n                // No atomic read-write-modify operation necessary.\n                return avail;\n            }\n            // Don't read the_system_balance; if it changes, compare_and_swap will fail anyway.\n            old = the_balance.compare_and_swap( int(n)<avail ? avail-n : 0, avail );\n        } while( old!=avail );\n        if( int(n)>avail )\n            n=avail;\n    }\n#if TBB_USE_ASSERT\n    net_delta += n;\n#endif /* TBB_USE_ASSERT */\n    return n;\n}\n\nvoid omp_connection_v2::decrease_load( size_type /*n*/ ) {}\n\nvoid omp_connection_v2::get_threads( size_type request_size, void* cookie, job* array[] ) {\n    unsigned index = 0;\n    std::vector<omp_server_thread*> enlisted(request_size);\n    std::vector<thread_grab_t> to_activate(request_size);\n\n    if( request_size==0 ) return;\n\n    {\n        tbb::spin_mutex::scoped_lock lock(map_mtx);\n\n        __TBB_ASSERT( !is_closing(), \"try to get threads while connection is being shutdown?\" );\n\n        for( int scan=0; scan<2; ++scan ) {\n            for( thread_map::iterator i=my_thread_map.begin(); i!=my_thread_map.end(); ++i ) {\n                omp_server_thread* thr = (omp_server_thread*) (*i).second;\n                // in the first scan, skip VPs that are lent\n                if( scan==0 && thr->is_lent() ) continue;\n                thread_grab_t res = thr->try_grab_for();\n                if( res!=wk_failed ) {// && if is not busy by some other scheduler\n                    to_activate[index] = res;\n                    enlisted[index] = thr;\n                    if( ++index==request_size )\n                        goto activate_threads;\n                }\n            }\n        }\n    }\n\nactivate_threads:\n\n    for( unsigned i=0; i<index; ++i ) {\n        omp_server_thread* thr = enlisted[i];\n        if( to_activate[i]==wk_from_asleep )\n            thr->get_virtual_processor()->Activate( thr );\n        job* j = thr->wait_for_job();\n        array[i] = j;\n        thr->omp_data.produce( client(), j, cookie, i PRODUCE_ARG(*this) );\n    }\n\n    if( index==request_size )\n        return;\n\n    // If we come to this point, it must be because dynamic==false\n    // Create Oversubscribers..\n\n    // Note that our policy is such that MinConcurrency==MaxConcurrency.\n    // RM will deliver MaxConcurrency of VirtualProcessors and no more.\n    __TBB_ASSERT( request_size>index, NULL );\n    unsigned n = request_size - index;\n    std::vector<server_thread*> thr_vec(n);\n    typedef std::vector<server_thread*>::iterator iterator_thr;\n    my_thread_map.create_oversubscribers( n, thr_vec, *this, map_mtx );\n    for( iterator_thr ti=thr_vec.begin(); ti!=thr_vec.end(); ++ti ) {\n        omp_server_thread* thr = (omp_server_thread*) *ti;\n        __TBB_ASSERT( thr, \"thread not created?\" );\n        // Thread is already grabbed; since it is newly created, we need to activate it.\n        thr->get_virtual_processor()->Activate( thr );\n        job* j = thr->wait_for_job();\n        array[index] = j;\n        thr->omp_data.produce( client(), j, cookie, index PRODUCE_ARG(*this) );\n        ++index;\n    }\n}\n\n#if _WIN32||_WIN64\nvoid omp_connection_v2::deactivate( rml::job* j )\n{\n    my_thread_map.adjust_balance(1);\n#if TBB_USE_ASSERT\n    net_delta -= 1;\n#endif\n    omp_server_thread* thr = (omp_server_thread*) scratch_ptr( *j );\n    (thr->get_virtual_processor())->Deactivate( thr );\n}\n\nvoid omp_connection_v2::reactivate( rml::job* j )\n{\n    // Should not adjust the_balance because OMP client is supposed to\n    // do try_increase_load() to reserve the threads to use.\n    omp_server_thread* thr = (omp_server_thread*) scratch_ptr( *j );\n    (thr->get_virtual_processor())->Activate( thr );\n}\n#endif /* !_WIN32||_WIN64 */\n\n#endif  /* RML_USE_WCRM */\n\n//! Wake up some available tbb threads\nvoid wakeup_some_tbb_threads()\n{\n    /* First, atomically grab the connection, then increase the server ref count to keep\n       it from being released prematurely.  Second, check if the balance is available for TBB\n       and the tbb conneciton has slack to exploit.  If the answer is true, go ahead and\n       try to wake some up. */\n    if( generic_connection<tbb_server,tbb_client >::get_addr(active_tbb_connections)==0 )\n        // the next connection will see the change; return.\n        return;\n\nstart_it_over:\n    int n_curr_readers = ++current_tbb_conn_readers;\n    if( n_curr_readers>1 ) // I lost\n        return;\n    // if n_curr_readers==1, i am the first one, so I will take responsibility for waking tbb threads up.\n\n    // update the current epoch\n    current_tbb_conn_reader_epoch = close_tbb_connection_event_count;\n\n    // read and clear\n    // Newly added connection will not invalidate the pointer, and it will\n    // compete with the current one to claim coins.\n    // One that is about to close the connection increments the event count\n    // after it removes the connection from the list.  But it will keep around\n    // the connection until all readers including this one catch up. So, reading\n    // the head and clearing the lock bit should be o.k.\n    generic_connection<tbb_server,tbb_client>* next_conn_wake_up = generic_connection<tbb_server,tbb_client>::get_addr( active_tbb_connections );\n\n    for( ; next_conn_wake_up; ) {\n        /* some threads are creating tbb server threads; they may not see my changes made to the_balance */\n        /* When a thread is in adjust_job_count_estimate() to increase the slack\n           RML tries to activate worker threads on behalf of the requesting thread\n           by repeatedly drawing a coin from the bank optimistically and grabbing a\n           thread.  If it finds the bank overdrafted, it returns the coin back to\n           the bank and returns the control to the thread (return from the method).\n           There lies a tiny timing hole.\n\n           When the overdraft occurs (note that multiple masters may be in\n           adjust_job_count_estimate() so the_balance can be any negative value) and\n           a worker returns from the TBB work at that moment, its returning the coin\n           does not bump up the_balance over 0, so it happily returns from\n           wakeup_some_tbb_threads() without attempting to give coins to worker threads\n           that are ready.\n        */\n        while( ((tbb_connection_v2*)next_conn_wake_up)->n_adjust_job_count_requests>0 )\n            __TBB_Yield();\n\n        int bal = the_balance;\n        n_curr_readers = current_tbb_conn_readers; // get the snapshot\n        if( bal<=0 ) break;\n        // if the connection is deleted, the following will immediately return because its slack would be 0 or less.\n\n        tbb_connection_v2* tbb_conn = (tbb_connection_v2*)next_conn_wake_up;\n        int my_slack = tbb_conn->my_slack;\n        if( my_slack>0 ) tbb_conn->wakeup_tbb_threads( my_slack );\n        next_conn_wake_up = next_conn_wake_up->next_conn;\n    }\n\n    int delta = current_tbb_conn_readers -= n_curr_readers;\n    //if delta>0, more threads entered the routine since this one took the snapshot\n    if( delta>0 ) {\n        current_tbb_conn_readers = 0;\n        if( the_balance>0 && generic_connection<tbb_server,tbb_client >::get_addr(active_tbb_connections)!=0 )\n            goto start_it_over;\n    }\n\n    // Signal any connection that is waiting for me to complete my access that I am done.\n    current_tbb_conn_reader_epoch = close_tbb_connection_event_count;\n}\n\n#if !RML_USE_WCRM\nint omp_connection_v2::try_increase_load( size_type n, bool strict ) {\n    __TBB_ASSERT(int(n)>=0,NULL);\n    if( strict ) {\n        the_balance -= int(n);\n    } else {\n        int avail, old;\n        do {\n            avail = the_balance;\n            if( avail<=0 ) {\n                // No atomic read-write-modify operation necessary.\n                return avail;\n            }\n            // don't read the_balance; if it changes, compare_and_swap will fail anyway.\n            old = the_balance.compare_and_swap( int(n)<avail ? avail-n : 0, avail );\n        } while( old!=avail );\n        if( int(n)>avail )\n            n=avail;\n    }\n#if TBB_USE_ASSERT\n    net_delta += n;\n#endif /* TBB_USE_ASSERT */\n    return n;\n}\n\nvoid omp_connection_v2::decrease_load( size_type n ) {\n    __TBB_ASSERT(int(n)>=0,NULL);\n    my_thread_map.adjust_balance(int(n));\n#if TBB_USE_ASSERT\n    net_delta -= n;\n#endif /* TBB_USE_ASSERT */\n}\n\nvoid omp_connection_v2::get_threads( size_type request_size, void* cookie, job* array[] ) {\n\n    if( !request_size )\n        return;\n\n    unsigned index = 0;\n    for(;;) { // don't return until all request_size threads are grabbed.\n        // Need to grab some threads\n        thread_map::iterator k_end=my_thread_map.end();\n        for( thread_map::iterator k=my_thread_map.begin(); k!=k_end; ++k ) {\n            // If another thread added *k, there is a tiny timing window where thread() is invalid.\n            server_thread& t = k->wait_for_thread();\n            if( t.try_grab_for( ts_omp_busy ) ) {\n                // The preincrement instead of post-increment of index is deliberate.\n                job* j = k->wait_for_job();\n                array[index] = j;\n                t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );\n                if( ++index==request_size )\n                    return;\n            }\n        }\n        // Need to allocate more threads\n        for( unsigned i=index; i<request_size; ++i ) {\n            __TBB_ASSERT( index<request_size, NULL );\n            thread_map::value_type* k = my_thread_map.add_one_thread( true );\n#if TBB_USE_ASSERT\n            if( !k ) {\n                // Client erred\n                __TBB_ASSERT(false, \"server::get_threads: exceeded job_count\\n\");\n            }\n#endif\n            my_thread_map.bind_one_thread( *this, *k );\n            server_thread& t = k->thread();\n            if( t.try_grab_for( ts_omp_busy ) ) {\n                job* j = k->wait_for_job();\n                array[index] = j;\n                // The preincrement instead of post-increment of index is deliberate.\n                t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );\n                if( ++index==request_size )\n                    return;\n            } // else someone else snatched it.\n        }\n    }\n}\n#endif /* !RML_USE_WCRM */\n\n//------------------------------------------------------------------------\n// Methods of omp_dispatch_type\n//------------------------------------------------------------------------\nvoid omp_dispatch_type::consume() {\n    // Wait for short window between when master sets state of this thread to ts_omp_busy\n    // and master thread calls produce.\n    job_type* j;\n    tbb::internal::atomic_backoff backoff;\n    while( (j = job)==NULL ) backoff.pause();\n    job = static_cast<job_type*>(NULL);\n    client->process(*j,cookie,index);\n#if TBB_USE_ASSERT\n    // Return of method process implies \"decrease_load\" from client's viewpoint, even though\n    // the actual adjustment of the_balance only happens when this thread really goes to sleep.\n    --server->net_delta;\n#endif /* TBB_USE_ASSERT */\n}\n\n#if !RML_USE_WCRM\n#if _WIN32||_WIN64\nvoid omp_connection_v2::deactivate( rml::job* j )\n{\n#if TBB_USE_ASSERT\n    net_delta -= 1;\n#endif\n    __TBB_ASSERT( j, NULL );\n    server_thread* thr = (server_thread*) scratch_ptr( *j );\n    thr->deactivate();\n}\n\nvoid omp_connection_v2::reactivate( rml::job* j )\n{\n    // Should not adjust the_balance because OMP client is supposed to\n    // do try_increase_load() to reserve the threads to use.\n    __TBB_ASSERT( j, NULL );\n    server_thread* thr = (server_thread*) scratch_ptr( *j );\n    thr->reactivate();\n}\n#endif /* _WIN32||_WIN64 */\n\n//------------------------------------------------------------------------\n// Methods of server_thread\n//------------------------------------------------------------------------\n\nserver_thread::server_thread() :\n    ref_count(0),\n    link(NULL),\n    my_map_pos(),\n    my_conn(NULL), my_job(NULL), my_ja(NULL)\n{\n    state = ts_idle;\n    terminate = false;\n#if TBB_USE_ASSERT\n    has_active_thread = false;\n#endif /* TBB_USE_ASSERT */\n}\n\nserver_thread::~server_thread() {\n    __TBB_ASSERT( !has_active_thread, NULL );\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n__RML_DECL_THREAD_ROUTINE server_thread::thread_routine( void* arg ) {\n    server_thread* self = static_cast<server_thread*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n#if TBB_USE_ASSERT\n    __TBB_ASSERT( !self->has_active_thread, NULL );\n    self->has_active_thread = true;\n#endif /* TBB_USE_ASSERT */\n    self->loop();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid server_thread::launch( size_t stack_size ) {\n#if USE_WINTHREAD\n    thread_monitor::launch( thread_routine, this, stack_size, &this->my_index );\n#else\n    thread_monitor::launch( thread_routine, this, stack_size );\n#endif /* USE_PTHREAD */\n}\n\nvoid server_thread::sleep_perhaps( thread_state_t asleep ) {\n    if( terminate ) return;\n    __TBB_ASSERT( asleep==ts_asleep, NULL );\n    thread_monitor::cookie c;\n    monitor.prepare_wait(c);\n    if( state.compare_and_swap( asleep, ts_idle )==ts_idle ) {\n        if( !terminate ) {\n            monitor.commit_wait(c);\n            // Someone else woke me up.  The compare_and_swap further below deals with spurious wakeups.\n        } else {\n            monitor.cancel_wait();\n        }\n        thread_state_t s = read_state();\n        if( s==ts_asleep ) {\n            state.compare_and_swap( ts_idle, ts_asleep );\n            // I woke myself up, either because I cancelled the wait or suffered a spurious wakeup.\n        } else {\n            // Someone else woke me up; there the_balance is decremented by 1. -- tbb only\n            if( !is_omp_thread ) {\n                __TBB_ASSERT( s==ts_tbb_busy||s==ts_idle, NULL );\n            }\n        }\n    } else {\n        // someone else made it busy ; see try_grab_for when state==ts_idle.\n        __TBB_ASSERT( state==ts_omp_busy||state==ts_tbb_busy, NULL );\n        monitor.cancel_wait();\n    }\n    __TBB_ASSERT( read_state()!=asleep, \"a thread can only put itself to sleep\" );\n}\n\nbool server_thread::wakeup( thread_state_t to, thread_state_t from ) {\n    bool success = false;\n    __TBB_ASSERT( from==ts_asleep && (to==ts_idle||to==ts_omp_busy||to==ts_tbb_busy), NULL );\n    if( state.compare_and_swap( to, from )==from ) {\n        if( !is_omp_thread ) __TBB_ASSERT( to==ts_idle||to==ts_tbb_busy, NULL );\n        // There is a small timing window that permits balance to become negative,\n        // but such occurrences are probably rare enough to not worry about, since\n        // at worst the result is slight temporary oversubscription.\n        monitor.notify();\n        success = true;\n    }\n    return success;\n}\n\n//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary.\nbool server_thread::try_grab_for( thread_state_t target_state ) {\n    bool success = false;\n    switch( read_state() ) {\n        case ts_asleep:\n            success = wakeup( target_state, ts_asleep );\n            break;\n        case ts_idle:\n            success = state.compare_and_swap( target_state, ts_idle )==ts_idle;\n            break;\n        default:\n            // Thread is not available to be part of an OpenMP thread team.\n            break;\n    }\n    return success;\n}\n\n#if _WIN32||_WIN64\nvoid server_thread::deactivate() {\n    thread_state_t es = (thread_state_t) my_extra_state.fetch_and_store( ts_deactivated );\n    __TBB_ASSERT( my_extra_state==ts_deactivated, \"someone else tampered with my_extra_state?\" );\n    if( es==ts_none )\n        state = ts_idle;\n    else\n        __TBB_ASSERT( es==ts_reactivated, \"Cannot call deactivate() while in ts_deactivated\" );\n        // only the thread can transition itself from ts_deactivted to ts_none\n    __TBB_ASSERT( my_extra_state==ts_deactivated, \"someone else tampered with my_extra_state?\" );\n    my_extra_state = ts_none; // release the critical section\n    int bal = ++the_balance;\n    if( bal>0 )\n        wakeup_some_tbb_threads();\n    if( es==ts_none )\n        sleep_perhaps( ts_asleep );\n}\n\nvoid server_thread::reactivate() {\n    thread_state_t es;\n    do {\n        while( (es=read_extra_state())==ts_deactivated )\n            __TBB_Yield();\n        if( es==ts_reactivated ) {\n            __TBB_ASSERT( false, \"two Reactivate() calls in a row.  Should not happen\" );\n            return;\n        }\n        __TBB_ASSERT( es==ts_none, NULL );\n    } while( (thread_state_t)my_extra_state.compare_and_swap( ts_reactivated, ts_none )!=ts_none );\n    if( state!=ts_omp_busy ) {\n        my_extra_state = ts_none;\n        while( !try_grab_for( ts_omp_busy ) )\n            __TBB_Yield();\n    }\n}\n#endif /* _WIN32||_WIN64 */\n\n\ntemplate<typename Connection>\nbool server_thread::destroy_job( Connection& c ) {\n    __TBB_ASSERT( !is_omp_thread||(state==ts_idle||state==ts_omp_busy), NULL );\n    __TBB_ASSERT(  is_omp_thread||(state==ts_idle||state==ts_tbb_busy), NULL );\n    if( !is_omp_thread ) {\n        __TBB_ASSERT( state==ts_idle||state==ts_tbb_busy, NULL );\n        if( state==ts_idle )\n            state.compare_and_swap( ts_done, ts_idle );\n        // 'state' may be set to ts_tbb_busy by another thread.\n\n        if( state==ts_tbb_busy ) { // return the coin to the deposit\n            // need to deposit first to let the next connection see the change\n            ++the_balance;\n            state = ts_done; // no other thread changes the state when it is ts_*_busy\n        }\n    }\n    if( job_automaton* ja = my_ja ) {\n        rml::job* j;\n        if( ja->try_plug(j) ) {\n            __TBB_ASSERT( j, NULL );\n            c.client().cleanup(*j);\n            c.remove_client_ref();\n        } else {\n            // Some other thread took responsibility for cleaning up the job.\n        }\n    }\n    // Must do remove client reference first, because execution of\n    // c.remove_ref() can cause *this to be destroyed.\n    int k = remove_ref();\n    __TBB_ASSERT_EX( k==0, \"more than one references?\" );\n#if TBB_USE_ASSERT\n    has_active_thread = false;\n#endif /* TBB_USE_ASSERT */\n    c.remove_server_ref();\n    return true;\n}\n\nbool server_thread::do_termination() {\n    if( is_omp_thread )\n        return destroy_job( *static_cast<omp_connection_v2*>(my_conn) );\n    else\n        return destroy_job( *static_cast<tbb_connection_v2*>(my_conn) );\n}\n\n//! Loop that each thread executes\nvoid server_thread::loop() {\n    if( is_omp_thread )\n        static_cast<omp_connection_v2*>(my_conn)->make_job( *this, *my_ja );\n    else\n        static_cast<tbb_connection_v2*>(my_conn)->make_job( *this, *my_ja );\n    for(;;) {\n        __TBB_Yield();\n        if( state==ts_idle )\n            sleep_perhaps( ts_asleep );\n\n        // Check whether I should quit.\n        if( terminate )\n            if( do_termination() )\n                return;\n\n        // read the state\n        thread_state_t s = read_state();\n        __TBB_ASSERT( s==ts_idle||s==ts_omp_busy||s==ts_tbb_busy, NULL );\n\n        if( s==ts_omp_busy ) {\n            // Enslaved by OpenMP team.\n            omp_dispatch.consume();\n            /* here wake tbb threads up if feasible */\n            if( ++the_balance>0 )\n                wakeup_some_tbb_threads();\n            state = ts_idle;\n        } else if( s==ts_tbb_busy ) {\n            // do some TBB work.\n            __TBB_ASSERT( my_conn && my_job, NULL );\n            tbb_connection_v2& conn = *static_cast<tbb_connection_v2*>(my_conn);\n            // give openmp higher priority\n            bool has_coin = true;\n            if( conn.has_slack() ) {\n                // it has the coin, it should trip to the scheduler at least once as long as its slack is positive\n                do {\n                    if( conn.try_process( *this, *my_job ) )\n                        if( conn.has_slack() && the_balance>=0 )\n                            has_coin = !conn.wakeup_next_thread( my_map_pos );\n                } while( has_coin && conn.has_slack() && the_balance>=0 );\n            }\n            state = ts_idle;\n            if( has_coin ) {\n                ++the_balance; // return the coin back to the deposit\n                if( conn.has_slack() ) { // a new adjust_job_request_estimate() is in progress\n                                         // it may have missed my changes to state and/or the_balance\n                    if( --the_balance>=0 ) { // try to grab the coin back\n                        // I got the coin\n                        if( state.compare_and_swap( ts_tbb_busy, ts_idle )!=ts_idle )\n                            ++the_balance; // someone else enlisted me.\n                    } else {\n                        // overdraft. return the coin\n                        ++the_balance;\n                    }\n                } // else the new request will see my changes to state & the_balance.\n            }\n            /* here wake tbb threads up if feasible */\n            if( the_balance>0 )\n                wakeup_some_tbb_threads();\n        }\n    }\n}\n#endif /* !RML_USE_WCRM */\n\n#if RML_USE_WCRM\n\nclass tbb_connection_v2;\nclass omp_connection_v2;\n\n#define CREATE_SCHEDULER_POLICY(policy,min_thrs,max_thrs,stack_size) \\\n    try {                                                                 \\\n        policy = new SchedulerPolicy (7,                                  \\\n                          SchedulerKind, RML_THREAD_KIND, /*defined in _rml_serer_msrt.h*/ \\\n                          MinConcurrency, min_thrs,                       \\\n                          MaxConcurrency, max_thrs,                       \\\n                          TargetOversubscriptionFactor, 1,                \\\n                          ContextStackSize, stack_size/1000, /*ConcRT:kB, iRML:bytes*/ \\\n                          ContextPriority, THREAD_PRIORITY_NORMAL,        \\\n                          DynamicProgressFeedback, ProgressFeedbackDisabled ); \\\n    } catch ( invalid_scheduler_policy_key & ) {                               \\\n        __TBB_ASSERT( false, \"invalid scheduler policy key exception caught\" );\\\n    } catch ( invalid_scheduler_policy_value & ) {                        \\\n        __TBB_ASSERT( false, \"invalid scheduler policy value exception caught\" );\\\n    }\n\nstatic unsigned int core_count;\nstatic tbb::atomic<int> core_count_inited;\n\n\nstatic unsigned int get_processor_count()\n{\n    if( core_count_inited!=2 ) {\n        if( core_count_inited.compare_and_swap( 1, 0 )==0 ) {\n            core_count = GetProcessorCount();\n            core_count_inited = 2;\n        } else {\n            tbb::internal::spin_wait_until_eq( core_count_inited, 2 );\n        }\n    }\n    return core_count;\n}\n\ntemplate<typename Connection>\nscheduler<Connection>::scheduler( Connection& conn ) : uid(GetSchedulerId()), my_conn(conn) {}\n\ntemplate<>\nscheduler<tbb_connection_v2>::scheduler( tbb_connection_v2& conn ) : uid(GetSchedulerId()), my_conn(conn)\n{\n    rml::client& cl = my_conn.client();\n    unsigned max_job_count = cl.max_job_count();\n    unsigned count = get_processor_count();\n    __TBB_ASSERT( max_job_count>0, \"max job count must be positive\" );\n    __TBB_ASSERT( count>1, \"The processor count must be greater than 1\" );\n    if( max_job_count>count-1) max_job_count = count-1;\n    CREATE_SCHEDULER_POLICY( my_policy, 0, max_job_count, cl.min_stack_size() );\n}\n\n#if __RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED\ntemplate<>\nvoid scheduler<tbb_connection_v2>::RemoveVirtualProcessors( IVirtualProcessorRoot**, unsigned int)\n{\n}\n#else\ntemplate<>\nvoid scheduler<tbb_connection_v2>::RemoveVirtualProcessors( IVirtualProcessorRoot** vproots, unsigned int count )\n{\n    if( !my_conn.is_closing() )\n        my_conn.remove_virtual_processors( vproots, count );\n}\n#endif\n\ntemplate<>\nvoid scheduler<tbb_connection_v2>::NotifyResourcesExternallyIdle( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/)\n{\n    __TBB_ASSERT( false, \"NotifyResourcesExternallyIdle() is not allowed for TBB\" );\n}\n\ntemplate<>\nvoid scheduler<tbb_connection_v2>::NotifyResourcesExternallyBusy( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/ )\n{\n    __TBB_ASSERT( false, \"NotifyResourcesExternallyBusy() is not allowed for TBB\" );\n}\n\ntemplate<>\nscheduler<omp_connection_v2>::scheduler( omp_connection_v2& conn ) : uid(GetSchedulerId()), my_conn(conn)\n{\n    unsigned count = get_processor_count();\n    rml::client& cl = my_conn.client();\n    __TBB_ASSERT( count>1, \"The processor count must be greater than 1\" );\n    CREATE_SCHEDULER_POLICY( my_policy, count-1, count-1, cl.min_stack_size() );\n}\n\ntemplate<>\nvoid scheduler<omp_connection_v2>::RemoveVirtualProcessors( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/ ) {\n    __TBB_ASSERT( false, \"RemoveVirtualProcessors() is not allowed for OMP\" );\n}\n\ntemplate<>\nvoid scheduler<omp_connection_v2>::NotifyResourcesExternallyIdle( IVirtualProcessorRoot** vproots, unsigned int count ){\n    if( !my_conn.is_closing() )\n        my_conn.notify_resources_externally_idle( vproots, count );\n}\n\ntemplate<>\nvoid scheduler<omp_connection_v2>::NotifyResourcesExternallyBusy( IVirtualProcessorRoot** vproots, unsigned int count ){\n    if( !my_conn.is_closing() )\n        my_conn.notify_resources_externally_busy( vproots, count );\n}\n\n/* ts_idle, ts_asleep, ts_busy */\nvoid tbb_server_thread::Dispatch( DispatchState* ) {\n    // Activate() will resume a thread right after Deactivate() as if it returns from the call\n    tbb_connection_v2* tbb_conn = static_cast<tbb_connection_v2*>(my_conn);\n    make_job( *tbb_conn, *this );\n\n    for( ;; ) {\n        // Try to wake some tbb threads if the balance is positive.\n        // When a thread is added by ConcRT and enter here for the first time,\n        // the thread may wake itself up (i.e., atomically change its state to ts_busy.\n        if( the_balance>0 )\n             wakeup_some_tbb_threads();\n        if( read_state()!=ts_busy )\n            if( sleep_perhaps() )\n                return;\n        if( terminate )\n            if( initiate_termination() )\n                return;\n        if( read_state()==ts_busy ) {\n            // this thread has a coin (i.e., state=ts_busy; it should trip to the scheduler at least once\n            if ( tbb_conn->has_slack() ) {\n                do {\n                    tbb_conn->try_process( *wait_for_job() );\n                } while( tbb_conn->has_slack() && the_balance>=0 && !is_removed() );\n            }\n            __TBB_ASSERT( read_state()==ts_busy, \"thread is not in busy state after returning from process()\" );\n            // see remove_virtual_processors()\n            if( my_state.compare_and_swap( ts_idle, ts_busy )==ts_busy ) {\n                int bal = ++the_balance;\n                if( tbb_conn->has_slack() ) {\n                    // slack is positive, volunteer to help\n                    bal = --the_balance;  // try to grab the coin back\n                    if( bal>=0 ) { // got the coin back\n                        if( my_state.compare_and_swap( ts_busy, ts_idle )!=ts_idle )\n                            ++the_balance; // someone else enlisted me.\n                        // else my_state is ts_busy, I will come back to tbb_conn->try_process().\n                    } else {\n                        // overdraft. return the coin\n                        ++the_balance;\n                    }\n                } // else the new request will see my changes to state & the_balance.\n            } else {\n                __TBB_ASSERT( false, \"someone tampered with my state\" );\n            }\n        } // someone else might set the state to something other than ts_idle\n    }\n}\n\nvoid omp_server_thread::Dispatch( DispatchState* ) {\n    // Activate() will resume a thread right after Deactivate() as if it returns from the call\n    make_job( *static_cast<omp_connection_v2*>(my_conn), *this );\n\n    for( ;; ) {\n        if( read_state()!=ts_busy )\n            sleep_perhaps();\n        if( terminate ) {\n            if( initiate_termination() )\n                return;\n        }\n        if( read_state()==ts_busy ) {\n            omp_data.consume();\n            __TBB_ASSERT( read_state()==ts_busy, \"thread is not in busy state after returning from process()\" );\n            my_thread_map.adjust_balance( 1 );\n            set_state( ts_idle );\n        }\n        // someone else might set the state to something other than ts_idle\n    }\n}\n\n//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary.\nthread_grab_t server_thread_rep::try_grab_for() {\n    thread_grab_t res = wk_failed;\n    thread_state_t s = read_state();\n    switch( s ) {\n    case ts_asleep:\n        if( wakeup( ts_busy, ts_asleep ) )\n            res = wk_from_asleep;\n        __TBB_ASSERT( res==wk_failed||read_state()==ts_busy, NULL );\n        break;\n    case ts_idle:\n        if( my_state.compare_and_swap( ts_busy, ts_idle )==ts_idle )\n            res = wk_from_idle;\n        // At this point a thread is grabbed (i.e., its state has  changed to ts_busy.\n        // It is possible that the thread 1) processes the job, returns from process() and\n        // sets its state ts_idle again.  In some cases, it even sets its state to ts_asleep.\n        break;\n    default:\n        break;\n    }\n    return res;\n}\n\nbool tbb_server_thread::switch_out() {\n    thread_state_t s = read_state();\n    __TBB_ASSERT( s==ts_asleep||s==ts_busy, NULL );\n    // This thread comes back from the TBB scheduler, and changed its state to ts_asleep successfully.\n    // The master enlisted it and woke it up by Activate()'ing it; now it is emerging from Deactivated().\n    // ConcRT requested for removal of the vp associated with the thread, and RML marks it removed.\n    // Now, it has ts_busy, and removed. -- we should remove it.\n    IExecutionResource* old_vp = my_execution_resource;\n    if( s==ts_busy ) {\n        ++the_balance;\n        my_state = ts_asleep;\n    }\n    IThreadProxy* proxy = my_proxy;\n    __TBB_ASSERT( proxy, NULL );\n    my_execution_resource = (IExecutionResource*) c_remove_prepare;\n    old_vp->Remove( my_scheduler );\n    my_execution_resource = (IExecutionResource*) c_remove_returned;\n    int cnt = --activation_count;\n    __TBB_ASSERT_EX( cnt==0||cnt==1, \"too many activations?\" );\n    proxy->SwitchOut();\n    if( terminate ) {\n        bool activated = activation_count==1;\n#if TBB_USE_ASSERT\n        /* In a rare sequence of events, a thread comes out of SwitchOut with activation_count==1.\n         * 1) The thread is SwitchOut'ed.\n         * 2) AddVirtualProcessors() arrived and the thread is Activated.\n         * 3) The thread is coming out of SwitchOut().\n         * 4) request_close_connection arrives and inform the thread that it is time to terminate.\n         * 5) The thread hits the check and falls into the path with 'activated==true'.\n         * In that case, do the clean-up but do not switch to the thread scavenger; rather simply return to RM.\n         */\n        if( activated ) {\n            // thread is 'revived' in add_virtual_processors after being Activated().\n            // so, if the thread extra state is still marked 'removed', it will shortly change to 'none'\n            // i.e., !is_remove().  The thread state is changed to ts_idle before the extra state, so\n            // the thread's state should be either ts_idle or ts_done.\n            while( is_removed() )\n                __TBB_Yield();\n            thread_state_t s = read_state();\n            __TBB_ASSERT( s==ts_idle || s==ts_done, NULL );\n        }\n#endif\n        __TBB_ASSERT( my_state==ts_asleep||my_state==ts_idle, NULL );\n        // it is possible that in make_job() the thread may not have a chance to create a job.\n        // my_job may not be set if the thread did not get a chance to process client's job (i.e., call try_process())\n        rml::job* j;\n        if( my_job_automaton.try_plug(j) ) {\n            __TBB_ASSERT( j, NULL );\n            my_client.cleanup(*j);\n            my_conn->remove_client_ref();\n        }\n        // Must do remove client reference first, because execution of\n        // c.remove_ref() can cause *this to be destroyed.\n        if( !activated )\n            proxy->SwitchTo( my_thread_map.get_thread_scavenger(), Idle );\n        my_conn->remove_server_ref();\n        return true;\n    }\n    // We revive a thread in add_virtual_processors() after we Activate the thread on a new virtual processor.\n    // So briefly wait until the thread's my_execution_resource gets set.\n    while( get_virtual_processor()==c_remove_returned )\n        __TBB_Yield();\n    return false;\n}\n\nbool tbb_server_thread::sleep_perhaps () {\n    if( terminate ) return false;\n    thread_state_t s = read_state();\n    if( s==ts_idle ) {\n        if( my_state.compare_and_swap( ts_asleep, ts_idle )==ts_idle ) {\n            // If a thread is between read_state() and compare_and_swap(), and the master tries to terminate,\n            // the master's compare_and_swap() will fail because the thread's state is ts_idle.\n            // We need to check if terminate is true or not before letting the thread go to sleep,\n            // otherwise we will miss the terminate signal.\n            if( !terminate ) {\n                if( !is_removed() ) {\n                    --activation_count;\n                    get_virtual_processor()->Deactivate( this );\n                }\n                if( is_removed() ) {\n                    if( switch_out() )\n                        return true;\n                    __TBB_ASSERT( my_execution_resource>c_remove_returned, NULL );\n                }\n                // in add_virtual_processors(), when we revive a thread, we change its state after Activate the thread\n                // in that case the state may be ts_asleep for a short period\n                while( read_state()==ts_asleep )\n                    __TBB_Yield();\n            } else {\n                if( my_state.compare_and_swap( ts_done, ts_asleep )!=ts_asleep ) {\n                    --activation_count;\n                    // unbind() changed my state. It will call Activate(). So issue a matching Deactivate()\n                    get_virtual_processor()->Deactivate( this );\n                }\n            }\n        }\n    } else {\n        __TBB_ASSERT( s==ts_busy, NULL );\n    }\n    return false;\n}\n\nvoid omp_server_thread::sleep_perhaps () {\n    if( terminate ) return;\n    thread_state_t s = read_state();\n    if( s==ts_idle ) {\n        if( my_state.compare_and_swap( ts_asleep, ts_idle )==ts_idle ) {\n            // If a thread is between read_state() and compare_and_swap(), and the master tries to terminate,\n            // the master's compare_and_swap() will fail because the thread's state is ts_idle.\n            // We need to check if terminate is true or not before letting the thread go to sleep,\n            // otherwise we will miss the terminate signal.\n            if( !terminate ) {\n                get_virtual_processor()->Deactivate( this );\n                __TBB_ASSERT( !is_removed(), \"OMP threads should not be deprived of a virtual processor\" );\n                __TBB_ASSERT( read_state()!=ts_asleep, NULL );\n            } else {\n                if( my_state.compare_and_swap( ts_done, ts_asleep )!=ts_asleep )\n                    // unbind() changed my state. It will call Activate(). So issue a matching Deactivate()\n                    get_virtual_processor()->Deactivate( this );\n            }\n        }\n    } else {\n        __TBB_ASSERT( s==ts_busy, NULL );\n    }\n}\n\nbool tbb_server_thread::initiate_termination() {\n    if( read_state()==ts_busy ) {\n        int bal = ++the_balance;\n        if( bal>0 ) wakeup_some_tbb_threads();\n    }\n    return destroy_job( (tbb_connection_v2*) my_conn );\n}\n\ntemplate<typename Connection>\nbool server_thread_rep::destroy_job( Connection* c ) {\n    __TBB_ASSERT( my_state!=ts_asleep, NULL );\n    rml::job* j;\n    if( my_job_automaton.try_plug(j) ) {\n        __TBB_ASSERT( j, NULL );\n        my_client.cleanup(*j);\n        c->remove_client_ref();\n    }\n    // Must do remove client reference first, because execution of\n    // c.remove_ref() can cause *this to be destroyed.\n    c->remove_server_ref();\n    return true;\n}\n\nvoid thread_map::assist_cleanup( bool assist_null_only ) {\n    // To avoid deadlock, the current thread *must* help out with cleanups that have not started,\n    // because the thread that created the job may be busy for a long time.\n    for( iterator i = begin(); i!=end(); ++i ) {\n        rml::job* j=0;\n        server_thread* thr = (*i).second;\n        job_automaton& ja = thr->my_job_automaton;\n        if( assist_null_only ? ja.try_plug_null() : ja.try_plug(j) ) {\n            if( j ) {\n                my_client.cleanup(*j);\n            } else {\n                // server thread did not get a chance to create a job.\n            }\n            remove_client_ref();\n        }\n    }\n}\n\nvoid thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count, tbb_connection_v2& conn, ::tbb::spin_mutex& mtx )\n{\n#if TBB_USE_ASSERT\n    int req_cnt = ++n_add_vp_requests;\n    __TBB_ASSERT( req_cnt==1, NULL );\n#endif\n    std::vector<thread_map::iterator> vec(count);\n    std::vector<tbb_server_thread*> tvec(count);\n    iterator end;\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n        __TBB_ASSERT( my_map.size()==0||count==1, NULL );\n        end = my_map.end(); //remember 'end' at the time of 'find'\n        // find entries in the map for those VPs that were previously added and then removed.\n        for( size_t i=0; i<count; ++i ) {\n            vec[i] = my_map.find( (key_type) vproots[i] );\n#if TBB_USE_DEBUG\n            if( vec[i]!=end ) {\n                tbb_server_thread* t = (tbb_server_thread*) (*vec[i]).second;\n                IVirtualProcessorRoot* v = t->get_virtual_processor();\n                __TBB_ASSERT( v==c_remove_prepare||v==c_remove_returned, NULL );\n            }\n#endif\n        }\n\n        iterator nxt = my_map.begin();\n        for( size_t i=0; i<count; ++i ) {\n            if( vec[i]!=end ) {\n#if TBB_USE_ASSERT\n                tbb_server_thread* t = (tbb_server_thread*) (*vec[i]).second;\n                __TBB_ASSERT( t->read_state()==ts_asleep, NULL );\n                IVirtualProcessorRoot* r = t->get_virtual_processor();\n                __TBB_ASSERT( r==c_remove_prepare||r==c_remove_returned, NULL );\n#endif\n                continue;\n            }\n\n            if( my_unrealized_threads>0 ) {\n                --my_unrealized_threads;\n            } else {\n                __TBB_ASSERT( nxt!=end, \"nxt should not be thread_map::iterator::end\" );\n                // find a removed thread context for i\n                for( ; nxt!=end; ++nxt ) {\n                    tbb_server_thread* t = (tbb_server_thread*) (*nxt).second;\n                    if( t->is_removed() && t->read_state()==ts_asleep && t->get_virtual_processor()==c_remove_returned ) {\n                        vec[i] = nxt++;\n                        break;\n                    }\n                }\n                // break target\n                if( vec[i]==end ) // ignore excessive VP.\n                    vproots[i] = NULL;\n            }\n        }\n    }\n\n    for( size_t i=0; i<count; ++i ) {\n        __TBB_ASSERT( !tvec[i], NULL );\n        if( vec[i]==end ) {\n            if( vproots[i] ) {\n                tvec[i] = my_tbb_allocator.allocate(1);\n                new ( tvec[i] ) tbb_server_thread( false, my_scheduler, (IExecutionResource*)vproots[i], &conn, *this, my_client );\n            }\n#if TBB_USE_ASSERT\n        } else {\n            tbb_server_thread* t = (tbb_server_thread*) (*vec[i]).second;\n            __TBB_ASSERT( t->GetProxy(), \"Proxy is cleared?\" );\n#endif\n        }\n    }\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n\n        bool closing = is_closing();\n\n        for( size_t i=0; i<count; ++i ) {\n            if( vec[i]==end ) {\n                if( vproots[i] ) {\n                    thread_map::key_type key = (thread_map::key_type) vproots[i];\n                    vec[i] = insert( key, (server_thread*) tvec[i] );\n                    my_client_ref_count.add_ref();\n                    my_server_ref_count.add_ref();\n                }\n            } else if( !closing ) {\n                tbb_server_thread* t = (tbb_server_thread*) (*vec[i]).second;\n\n                if( (*vec[i]).first!=(thread_map::key_type)vproots[i] ) {\n                    my_map.erase( vec[i] );\n                    thread_map::key_type key = (thread_map::key_type) vproots[i];\n                    __TBB_ASSERT( key, NULL );\n                    vec[i] = insert( key, t );\n                }\n                __TBB_ASSERT( t->read_state()==ts_asleep, NULL );\n                // We did not decrement server/client ref count when a thread is removed.\n                // So, don't increment server/client ref count here.\n            }\n        }\n\n        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects\n        // that are not inserted into the thread_map, and deallocate them.  Doing so seems more cumbersome\n        // than simply adding these to the thread_map and let thread_map's destructor take care of reclamation.\n        __TBB_ASSERT( closing==is_closing(), NULL );\n        if( closing ) return;\n    }\n\n    for( size_t i=0; i<count; ++i ) {\n        if( vproots[i] ) {\n            tbb_server_thread* t = (tbb_server_thread*) (*vec[i]).second;\n            __TBB_ASSERT( tvec[i]!=NULL||t->GetProxy(), \"Proxy is cleared?\" );\n            if( t->is_removed() )\n                __TBB_ASSERT( t->get_virtual_processor()==c_remove_returned, NULL );\n            int cnt = ++t->activation_count;\n            __TBB_ASSERT_EX( cnt==0||cnt==1, NULL );\n            vproots[i]->Activate( t );\n            if( t->is_removed() )\n                t->revive( my_scheduler, vproots[i], my_client );\n        }\n    }\n#if TBB_USE_ASSERT\n    req_cnt = --n_add_vp_requests;\n    __TBB_ASSERT( req_cnt==0, NULL );\n#endif\n}\n\nvoid thread_map::remove_virtual_processors( IVirtualProcessorRoot** vproots, unsigned count, ::tbb::spin_mutex& mtx ) {\n    if( my_map.size()==0 )\n        return;\n    tbb::spin_mutex::scoped_lock lck( mtx );\n\n    if( is_closing() ) return;\n\n    for( unsigned int c=0; c<count; ++c ) {\n        iterator i = my_map.find( (key_type) vproots[c] );\n        if( i==my_map.end() ) {\n            thread_scavenger_thread* tst = my_thread_scavenger_thread;\n            if( !tst ) {\n                // Remove unknown vp from my scheduler;\n                vproots[c]->Remove( my_scheduler );\n            } else {\n                while( (tst=my_thread_scavenger_thread)==c_claimed )\n                    __TBB_Yield();\n                if( vproots[c]!=tst->get_virtual_processor() )\n                    vproots[c]->Remove( my_scheduler );\n            }\n            continue;\n        }\n        tbb_server_thread* thr = (tbb_server_thread*) (*i).second;\n        __TBB_ASSERT( thr->tbb_thread, \"incorrect type of server_thread\" );\n        thr->set_removed();\n        if( thr->read_state()==ts_asleep ) {\n            while( thr->activation_count>0 ) {\n                if( thr->get_virtual_processor()<=c_remove_returned )\n                    break;\n                __TBB_Yield();\n            }\n            if( thr->get_virtual_processor()>c_remove_returned ) {\n                // the thread is in Deactivated state\n                ++thr->activation_count;\n                // wake the thread up so that it Switches Out itself.\n                thr->get_virtual_processor()->Activate( thr );\n            } // else, it is Switched Out\n        } // else the thread will see that it is removed and proceed to switch itself out without Deactivation\n    }\n}\n\nvoid thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count, omp_connection_v2& conn, ::tbb::spin_mutex& mtx )\n{\n    std::vector<thread_map::iterator> vec(count);\n    std::vector<server_thread*> tvec(count);\n    iterator end;\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n        // read the map\n        end = my_map.end(); //remember 'end' at the time of 'find'\n        for( size_t i=0; i<count; ++i )\n            vec[i] = my_map.find( (key_type) vproots[i] );\n    }\n\n    for( size_t i=0; i<count; ++i ) {\n        __TBB_ASSERT( !tvec[i], NULL );\n        if( vec[i]==end ) {\n            tvec[i] = my_omp_allocator.allocate(1);\n            new ( tvec[i] ) omp_server_thread( false, my_scheduler, (IExecutionResource*)vproots[i], &conn, *this, my_client );\n        }\n    }\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n\n        for( size_t i=0; i<count; ++i ) {\n            if( vec[i]==my_map.end() ) {\n                thread_map::key_type key = (thread_map::key_type) vproots[i];\n                vec[i] = insert( key, tvec[i] );\n                my_client_ref_count.add_ref();\n                my_server_ref_count.add_ref();\n            }\n        }\n\n        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects\n        // that are not inserted into the thread_map, and deallocate them.  Doing so seems more cumbersome\n        // than simply adding these to the thread_map and let thread_map's destructor take care of reclamation.\n        if( is_closing() ) return;\n    }\n\n    for( size_t i=0; i<count; ++i )\n        vproots[i]->Activate( (*vec[i]).second );\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n        for( size_t i=0; i<count; ++i )\n            original_exec_resources.push_back( vproots[i] );\n    }\n}\n\nvoid thread_map::mark_virtual_processors_as_lent( IVirtualProcessorRoot** vproots, unsigned count, ::tbb::spin_mutex& mtx ) {\n    tbb::spin_mutex::scoped_lock lck( mtx );\n\n    if( is_closing() ) return;\n\n    iterator end = my_map.end();\n    for( unsigned int c=0; c<count; ++c ) {\n        iterator i = my_map.find( (key_type) vproots[c] );\n        if( i==end ) {\n            // The vproc has not been added to the map in create_oversubscribers()\n            my_map.insert( hash_map_type::value_type( (key_type) vproots[c], (server_thread*)1 ) );\n        } else {\n            server_thread* thr = (*i).second;\n            if( ((uintptr_t)thr)&~(uintptr_t)1 ) {\n                __TBB_ASSERT( !thr->is_removed(), \"incorrectly removed\" );\n                ((omp_server_thread*)thr)->set_lent();\n            }\n        }\n    }\n}\n\nvoid thread_map::create_oversubscribers( unsigned n, std::vector<server_thread*>& thr_vec, omp_connection_v2& conn, ::tbb::spin_mutex& mtx ) {\n    std::vector<IExecutionResource*> curr_exec_rsc;\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n        curr_exec_rsc = original_exec_resources; // copy construct\n    }\n    typedef std::vector<IExecutionResource*>::iterator iterator_er;\n    typedef ::std::vector<std::pair<hash_map_type::key_type, hash_map_type::mapped_type> > hash_val_vector_t;\n    hash_val_vector_t v_vec(n);\n    iterator_er begin = curr_exec_rsc.begin();\n    iterator_er end   = curr_exec_rsc.end();\n    iterator_er i = begin;\n    for( unsigned c=0; c<n; ++c ) {\n        IVirtualProcessorRoot* vpr = my_scheduler_proxy->CreateOversubscriber( *i );\n        omp_server_thread* t = new ( my_omp_allocator.allocate(1) ) omp_server_thread( true, my_scheduler, (IExecutionResource*)vpr, &conn, *this, my_client );\n        thr_vec[c] = t;\n        v_vec[c] = hash_map_type::value_type( (key_type) vpr, t );\n        if( ++i==end ) i = begin;\n    }\n\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n\n        if( is_closing() ) return;\n\n        iterator end = my_map.end();\n        unsigned c = 0;\n        for( hash_val_vector_t::iterator vi=v_vec.begin(); vi!=v_vec.end(); ++vi, ++c ) {\n            iterator i = my_map.find( (key_type) (*vi).first );\n            if( i==end ) {\n                my_map.insert( *vi );\n            } else {\n                // the vproc has not been added to the map in mark_virtual_processors_as_returned();\n                uintptr_t lent = (uintptr_t) (*i).second;\n                __TBB_ASSERT( lent<=1, \"vproc map entry added incorrectly?\");\n                (*i).second = thr_vec[c];\n                if( lent )\n                    ((omp_server_thread*)thr_vec[c])->set_lent();\n                else\n                    ((omp_server_thread*)thr_vec[c])->set_returned();\n            }\n            my_client_ref_count.add_ref();\n            my_server_ref_count.add_ref();\n        }\n    }\n}\n\nvoid thread_map::wakeup_tbb_threads( int c, ::tbb::spin_mutex& mtx ) {\n    std::vector<tbb_server_thread*> vec(c);\n\n    size_t idx = 0;\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n\n        if( is_closing() ) return;\n        // only one RML thread is in here to wake worker threads up.\n\n        int bal = the_balance;\n        int cnt = c<bal ? c : bal;\n\n        if( cnt<=0 ) { return; }\n\n        for( iterator i=begin(); i!=end(); ++i ) {\n            tbb_server_thread* thr = (tbb_server_thread*) (*i).second;\n            // ConcRT RM should take threads away from TBB scheduler instead of lending them to another scheduler\n            if( thr->is_removed() )\n                continue;\n\n            if( --the_balance>=0 ) {\n                thread_grab_t res;\n                while( (res=thr->try_grab_for())!=wk_from_idle ) {\n                    if( res==wk_from_asleep ) {\n                        vec[idx++] = thr;\n                        break;\n                    } else {\n                        thread_state_t s = thr->read_state();\n                        if( s==ts_busy ) {// failed because already assigned. move on.\n                            ++the_balance;\n                            goto skip;\n                        }\n                    }\n                }\n                thread_state_t s = thr->read_state();\n                __TBB_ASSERT_EX( s==ts_busy, \"should have set the state to ts_busy\" );\n                if( --cnt==0 )\n                    break;\n            } else {\n                // overdraft\n                ++the_balance;\n                break;\n            }\nskip:\n            ;\n        }\n    }\n\n    for( size_t i=0; i<idx; ++i ) {\n        tbb_server_thread* thr = vec[i];\n        __TBB_ASSERT( thr, NULL );\n        thread_state_t s = thr->read_state();\n        __TBB_ASSERT_EX( s==ts_busy, \"should have set the state to ts_busy\" );\n        ++thr->activation_count;\n        thr->get_virtual_processor()->Activate( thr );\n    }\n\n}\n\nvoid thread_map::mark_virtual_processors_as_returned( IVirtualProcessorRoot** vprocs, unsigned int count, tbb::spin_mutex& mtx ) {\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n\n        if( is_closing() ) return;\n\n        iterator end = my_map.end();\n        for(unsigned c=0; c<count; ++c ) {\n            iterator i = my_map.find( (key_type) vprocs[c] );\n            if( i==end ) {\n                // the vproc has not been added to the map in create_oversubscribers()\n                my_map.insert( hash_map_type::value_type( (key_type) vprocs[c], static_cast<server_thread*>(0) ) );\n            } else {\n                omp_server_thread* thr = (omp_server_thread*) (*i).second;\n                if( ((uintptr_t)thr)&~(uintptr_t)1 ) {\n                    __TBB_ASSERT( !thr->is_removed(), \"incorrectly removed\" );\n                    // we should not make any assumption on the initial state of an added vproc.\n                    thr->set_returned();\n                }\n            }\n        }\n    }\n}\n\n\nvoid thread_map::unbind( rml::server& /*server*/, tbb::spin_mutex& mtx ) {\n    {\n        tbb::spin_mutex::scoped_lock lck( mtx );\n        shutdown_in_progress = true;  // ignore any callbacks from ConcRT RM\n\n        // Ask each server_thread to cleanup its job for this server.\n        for( iterator i = begin(); i!=end(); ++i ) {\n            server_thread* t = (*i).second;\n            t->terminate = true;\n            if( t->is_removed() ) {\n                // This is for TBB only as ConcRT RM does not request OMP schedulers to remove virtual processors\n                if( t->read_state()==ts_asleep ) {\n                    __TBB_ASSERT( my_thread_scavenger_thread, \"this is TBB connection; thread_scavenger_thread must be allocated\" );\n                    // thread is on its way to switch_out; see remove_virtual_processors() where\n                    // the thread is Activated() to bring it back from 'Deactivated' in sleep_perhaps()\n                    // now assume that the thread will go to SwitchOut()\n#if TBB_USE_ASSERT\n                    while( t->get_virtual_processor()>c_remove_returned )\n                        __TBB_Yield();\n#endif\n                    // A removed thread is supposed to proceed to SwithcOut.\n                    // There, we remove client&server references.\n                }\n            } else {\n                if( t->wakeup( ts_done, ts_asleep ) ) {\n                    if( t->tbb_thread )\n                        ++((tbb_server_thread*)t)->activation_count;\n                    t->get_virtual_processor()->Activate( t );\n                    // We mark in the thread_map such that when termination sequence started, we ignore\n                    // all notification from ConcRT RM.\n                }\n            }\n        }\n    }\n    // Remove extra ref to client.\n    remove_client_ref();\n\n    if( my_thread_scavenger_thread ) {\n        thread_scavenger_thread* tst;\n        while( (tst=my_thread_scavenger_thread)==c_claimed )\n            __TBB_Yield();\n#if TBB_USE_ASSERT\n        ++my_thread_scavenger_thread->activation_count;\n#endif\n        tst->get_virtual_processor()->Activate( tst );\n    }\n}\n\n#if !__RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED\nvoid thread_map::allocate_thread_scavenger( IExecutionResource* v )\n{\n    if( my_thread_scavenger_thread>c_claimed ) return;\n    thread_scavenger_thread* c = my_thread_scavenger_thread.fetch_and_store((thread_scavenger_thread*)c_claimed);\n    if( c==NULL ) { // successfully claimed\n        add_server_ref();\n#if TBB_USE_ASSERT\n        ++n_thread_scavengers_created;\n#endif\n        __TBB_ASSERT( v, NULL );\n        IVirtualProcessorRoot* vpr = my_scheduler_proxy->CreateOversubscriber( v );\n        my_thread_scavenger_thread = c = new ( my_scavenger_allocator.allocate(1) ) thread_scavenger_thread( my_scheduler, vpr, *this );\n#if TBB_USE_ASSERT\n        ++c->activation_count;\n#endif\n        vpr->Activate( c );\n    } else if( c>c_claimed ) {\n        my_thread_scavenger_thread = c;\n    }\n}\n#endif\n\nvoid thread_scavenger_thread::Dispatch( DispatchState* )\n{\n    __TBB_ASSERT( my_proxy, NULL );\n#if TBB_USE_ASSERT\n    --activation_count;\n#endif\n    get_virtual_processor()->Deactivate( this );\n    for( thread_map::iterator i=my_thread_map.begin(); i!=my_thread_map.end(); ++i ) {\n        tbb_server_thread* t = (tbb_server_thread*) (*i).second;\n        if( t->read_state()==ts_asleep && t->is_removed() ) {\n            while( t->get_execution_resource()!=c_remove_returned )\n                __TBB_Yield();\n            my_proxy->SwitchTo( t, Blocking );\n        }\n    }\n    get_virtual_processor()->Remove( my_scheduler );\n    my_thread_map.remove_server_ref();\n    // signal to the connection scavenger that i am done with the map.\n    __TBB_ASSERT( activation_count==1, NULL );\n    set_state( ts_done );\n}\n\n//! Windows \"DllMain\" that handles startup and shutdown of dynamic library.\nextern \"C\" bool WINAPI DllMain( HINSTANCE /*hinstDLL*/, DWORD fwdReason, LPVOID lpvReserved ) {\n    void assist_cleanup_connections();\n    if( fwdReason==DLL_PROCESS_DETACH ) {\n        // dll is being unloaded\n        if( !lpvReserved ) // if FreeLibrary has been called\n            assist_cleanup_connections();\n    }\n    return true;\n}\n\nvoid free_all_connections( uintptr_t conn_ex ) {\n    while( conn_ex ) {\n        bool is_tbb = (conn_ex&2)>0;\n        //clear extra bits\n        uintptr_t curr_conn = conn_ex & ~(uintptr_t)3;\n        __TBB_ASSERT( curr_conn, NULL );\n\n        // Wait for worker threads to return\n        if( is_tbb ) {\n            tbb_connection_v2* tbb_conn = reinterpret_cast<tbb_connection_v2*>(curr_conn);\n            conn_ex = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);\n            while( tbb_conn->my_thread_map.remove_server_ref()>0 )\n                __TBB_Yield();\n            delete tbb_conn;\n        } else {\n            omp_connection_v2* omp_conn = reinterpret_cast<omp_connection_v2*>(curr_conn);\n            conn_ex = reinterpret_cast<uintptr_t>(omp_conn->next_conn);\n            while( omp_conn->my_thread_map.remove_server_ref()>0 )\n                __TBB_Yield();\n            delete omp_conn;\n        }\n    }\n}\n\nvoid assist_cleanup_connections()\n{\n    //signal to connection_scavenger_thread to terminate\n    uintptr_t tail = connections_to_reclaim.tail;\n    while( connections_to_reclaim.tail.compare_and_swap( garbage_connection_queue::plugged, tail )!=tail ) {\n        __TBB_Yield();\n        tail = connections_to_reclaim.tail;\n    }\n\n    __TBB_ASSERT( connection_scavenger.state==ts_busy || connection_scavenger.state==ts_asleep, NULL );\n    // Scavenger thread may be busy freeing connections\n    DWORD thr_exit_code = STILL_ACTIVE;\n    while( connection_scavenger.state==ts_busy ) {\n        if( GetExitCodeThread( connection_scavenger.thr_handle, &thr_exit_code )>0 )\n            if( thr_exit_code!=STILL_ACTIVE )\n                break;\n        __TBB_Yield();\n        thr_exit_code = STILL_ACTIVE;\n    }\n    if( connection_scavenger.state==ts_asleep && thr_exit_code==STILL_ACTIVE )\n        connection_scavenger.wakeup(); // wake the connection scavenger thread up\n\n    // it is possible that the connection scavenger thread already exited.  Take over its responsibility.\n    if( tail && connections_to_reclaim.tail!=garbage_connection_queue::plugged_acked ) {\n        // atomically claim the head of the list.\n        uintptr_t head = connections_to_reclaim.head.fetch_and_store( garbage_connection_queue::empty );\n        if( head==garbage_connection_queue::empty )\n            head = tail;\n        connection_scavenger.process_requests( head );\n    }\n    __TBB_ASSERT( connections_to_reclaim.tail==garbage_connection_queue::plugged||connections_to_reclaim.tail==garbage_connection_queue::plugged_acked, \"someone else added a request after termination has initiated\" );\n    __TBB_ASSERT( (unsigned)the_balance==the_default_concurrency, NULL );\n}\n\nvoid connection_scavenger_thread::sleep_perhaps() {\n    uintptr_t tail = connections_to_reclaim.tail;\n    // connections_to_reclaim.tail==garbage_connection_queue::plugged --> terminate,\n    // connections_to_reclaim.tail>garbage_connection_queue::plugged : we got work to do\n    if( tail>=garbage_connection_queue::plugged ) return;\n    __TBB_ASSERT( !tail, NULL );\n    thread_monitor::cookie c;\n    monitor.prepare_wait(c);\n    if( state.compare_and_swap( ts_asleep, ts_busy )==ts_busy ) {\n        if( connections_to_reclaim.tail!=garbage_connection_queue::plugged ) {\n            monitor.commit_wait(c);\n            // Someone else woke me up.  The compare_and_swap further below deals with spurious wakeups.\n        } else {\n            monitor.cancel_wait();\n        }\n        thread_state_t s = state;\n        if( s==ts_asleep ) // if spurious wakeup.\n            state.compare_and_swap( ts_busy, ts_asleep );\n            // I woke myself up, either because I cancelled the wait or suffered a spurious wakeup.\n    } else {\n        __TBB_ASSERT( false, \"someone else tampered with my state\" );\n    }\n    __TBB_ASSERT( state==ts_busy, \"a thread can only put itself to sleep\" );\n}\n\nvoid connection_scavenger_thread::process_requests( uintptr_t conn_ex )\n{\n    __TBB_ASSERT( conn_ex>1, NULL );\n    __TBB_ASSERT( n_scavenger_threads==1||connections_to_reclaim.tail==garbage_connection_queue::plugged, \"more than one connection_scavenger_thread being active?\" );\n\n    bool done = false;\n    while( !done ) {\n        bool is_tbb = (conn_ex&2)>0;\n        //clear extra bits\n        uintptr_t curr_conn = conn_ex & ~(uintptr_t)3;\n\n        // no contention. there is only one connection_scavenger_thread!!\n        uintptr_t next_conn;\n        tbb_connection_v2* tbb_conn = NULL;\n        omp_connection_v2* omp_conn = NULL;\n        // Wait for worker threads to return\n        if( is_tbb ) {\n            tbb_conn = reinterpret_cast<tbb_connection_v2*>(curr_conn);\n            next_conn = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);\n            while( tbb_conn->my_thread_map.get_server_ref_count()>1 )\n                __TBB_Yield();\n        } else {\n            omp_conn = reinterpret_cast<omp_connection_v2*>(curr_conn);\n            next_conn = reinterpret_cast<uintptr_t>(omp_conn->next_conn);\n            while( omp_conn->my_thread_map.get_server_ref_count()>1 )\n                __TBB_Yield();\n        }\n\n        //someone else may try to write into this connection object.\n        //So access next_conn field first before remove the extra server ref count.\n\n        if( next_conn==0 ) {\n            uintptr_t tail = connections_to_reclaim.tail;\n            if( tail==garbage_connection_queue::plugged ) {\n                tail = garbage_connection_queue::plugged_acked; // connection scavenger saw the flag, and it freed all connections.\n                done = true;\n            } else if( tail==conn_ex ) {\n                if( connections_to_reclaim.tail.compare_and_swap( garbage_connection_queue::empty, tail )==tail ) {\n                    __TBB_ASSERT( !connections_to_reclaim.head, NULL );\n                    done = true;\n                }\n            }\n\n            if( !done ) {\n                // A new connection to close is added to connections_to_reclaim.tail;\n                // Wait for curr_conn->next_conn to be set.\n                if( is_tbb ) {\n                    while( !tbb_conn->next_conn )\n                        __TBB_Yield();\n                    conn_ex = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);\n                } else {\n                    while( !omp_conn->next_conn )\n                        __TBB_Yield();\n                    conn_ex = reinterpret_cast<uintptr_t>(omp_conn->next_conn);\n                }\n            }\n        } else {\n            conn_ex = next_conn;\n        }\n        __TBB_ASSERT( conn_ex, NULL );\n        if( is_tbb )\n            // remove extra server ref count; this will trigger Shutdown/Release of ConcRT RM\n            tbb_conn->remove_server_ref();\n        else\n            // remove extra server ref count; this will trigger Shutdown/Release of ConcRT RM\n            omp_conn->remove_server_ref();\n    }\n}\n\n__RML_DECL_THREAD_ROUTINE connection_scavenger_thread::thread_routine( void* arg ) {\n    connection_scavenger_thread* thr = (connection_scavenger_thread*) arg;\n    thr->state = ts_busy;\n    thr->thr_handle = GetCurrentThread();\n#if TBB_USE_ASSERT\n    ++thr->n_scavenger_threads;\n#endif\n    for(;;) {\n        __TBB_Yield();\n        thr->sleep_perhaps();\n        if( connections_to_reclaim.tail==garbage_connection_queue::plugged || connections_to_reclaim.tail==garbage_connection_queue::plugged_acked ) {\n            thr->state = ts_asleep;\n            return 0;\n        }\n\n        __TBB_ASSERT( connections_to_reclaim.tail!=garbage_connection_queue::plugged_acked, NULL );\n        __TBB_ASSERT( connections_to_reclaim.tail>garbage_connection_queue::plugged && (connections_to_reclaim.tail&garbage_connection_queue::plugged)==0 , NULL );\n        while( connections_to_reclaim.head==garbage_connection_queue::empty )\n            __TBB_Yield();\n        uintptr_t head = connections_to_reclaim.head.fetch_and_store( garbage_connection_queue::empty );\n        thr->process_requests( head );\n        wakeup_some_tbb_threads();\n    }\n}\n\ntemplate<typename Server, typename Client>\nvoid connection_scavenger_thread::add_request( generic_connection<Server,Client>* conn_to_close )\n{\n    uintptr_t conn_ex = (uintptr_t)conn_to_close | (connection_traits<Server,Client>::is_tbb<<1);\n    __TBB_ASSERT( !conn_to_close->next_conn, NULL );\n    const uintptr_t old_tail_ex = connections_to_reclaim.tail.fetch_and_store(conn_ex);\n    __TBB_ASSERT( old_tail_ex==0||old_tail_ex>garbage_connection_queue::plugged_acked, \"Unloading DLL called while this connection is being closed?\" );\n\n    if( old_tail_ex==garbage_connection_queue::empty )\n        connections_to_reclaim.head = conn_ex;\n    else {\n        bool is_tbb = (old_tail_ex&2)>0;\n        uintptr_t old_tail = old_tail_ex & ~(uintptr_t)3;\n        if( is_tbb )\n            reinterpret_cast<tbb_connection_v2*>(old_tail)->next_conn = reinterpret_cast<tbb_connection_v2*>(conn_ex);\n        else\n            reinterpret_cast<omp_connection_v2*>(old_tail)->next_conn = reinterpret_cast<omp_connection_v2*>(conn_ex);\n    }\n\n    if( state==ts_asleep )\n        wakeup();\n}\n\ntemplate<>\nuintptr_t connection_scavenger_thread::grab_and_prepend( generic_connection<tbb_server,tbb_client>* /*last_conn_to_close*/ ) { return 0;}\n\ntemplate<>\nuintptr_t connection_scavenger_thread::grab_and_prepend( generic_connection<omp_server,omp_client>* last_conn_to_close )\n{\n    uintptr_t conn_ex = (uintptr_t)last_conn_to_close;\n    uintptr_t head = connections_to_reclaim.head.fetch_and_store( garbage_connection_queue::empty );\n    reinterpret_cast<omp_connection_v2*>(last_conn_to_close)->next_conn = reinterpret_cast<omp_connection_v2*>(head);\n    return conn_ex;\n}\n\nextern \"C\" ULONGLONG NTAPI VerSetConditionMask( ULONGLONG, DWORD, BYTE);\n\nbool is_windows7_or_later ()\n{\n    try {\n        return GetOSVersion()>=IResourceManager::Win7OrLater;\n    } catch( ... ) {\n        return false;\n    }\n}\n\n#endif /* RML_USE_WCRM */\n\ntemplate<typename Connection, typename Server, typename Client>\nstatic factory::status_type connect( factory& f, Server*& server, Client& client ) {\n    server = new Connection(*static_cast<wait_counter*>(f.scratch_ptr),client);\n    return factory::st_success;\n}\n\nvoid init_rml_module () {\n    the_balance = the_default_concurrency = tbb::internal::AvailableHwConcurrency() - 1;\n#if RML_USE_WCRM\n    connection_scavenger.launch();\n#endif\n}\n\nextern \"C\" factory::status_type __RML_open_factory( factory& f, version_type& server_version, version_type client_version ) {\n    // Hack to keep this library from being closed by causing the first client's dlopen to not have a corresponding dlclose.\n    // This code will be removed once we figure out how to do shutdown of the RML perfectly.\n    static tbb::atomic<bool> one_time_flag;\n    if( one_time_flag.compare_and_swap(true,false)==false) {\n        __TBB_ASSERT( (size_t)f.library_handle!=factory::c_dont_unload, NULL );\n#if _WIN32||_WIN64\n        f.library_handle = reinterpret_cast<HMODULE>(factory::c_dont_unload);\n#else\n        f.library_handle = reinterpret_cast<void*>(factory::c_dont_unload);\n#endif\n    }\n    // End of hack\n\n    // Initialize the_balance only once\n    tbb::internal::atomic_do_once ( &init_rml_module, rml_module_state );\n\n    server_version = SERVER_VERSION;\n    f.scratch_ptr = 0;\n    if( client_version==0 ) {\n        return factory::st_incompatible;\n#if RML_USE_WCRM\n    } else if ( !is_windows7_or_later() ) {\n#if TBB_USE_DEBUG\n        fprintf(stderr, \"This version of the RML library requires Windows 7 to run on.\\nConnection request denied.\\n\");\n#endif\n        return factory::st_incompatible;\n#endif\n    } else {\n#if TBB_USE_DEBUG\n        if( client_version<EARLIEST_COMPATIBLE_CLIENT_VERSION )\n            fprintf(stderr, \"This client library is too old for the current RML server.\\nThe connection request is granted but oversubscription/undersubscription may occur.\\n\");\n#endif\n        f.scratch_ptr = new wait_counter;\n        return factory::st_success;\n    }\n}\n\nextern \"C\" void __RML_close_factory( factory& f ) {\n    if( wait_counter* fc = static_cast<wait_counter*>(f.scratch_ptr) ) {\n        f.scratch_ptr = 0;\n        fc->wait();\n        size_t bal = the_balance;\n        f.scratch_ptr = (void*)bal;\n        delete fc;\n    }\n}\n\nvoid call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg );\n\n}} // rml::internal\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\nextern \"C\" tbb_factory::status_type __TBB_make_rml_server( tbb_factory& f, tbb_server*& server, tbb_client& client ) {\n    return ::rml::internal::connect< ::rml::internal::tbb_connection_v2>(f,server,client);\n}\n\nextern \"C\" void __TBB_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg ) {\n    return ::rml::internal::call_with_build_date_str( cb, arg );\n}\n\n}}}\n\nnamespace __kmp {\nnamespace rml {\n\nextern \"C\" omp_factory::status_type __KMP_make_rml_server( omp_factory& f, omp_server*& server, omp_client& client ) {\n    return ::rml::internal::connect< ::rml::internal::omp_connection_v2>(f,server,client);\n}\n\nextern \"C\" void __KMP_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg ) {\n    return ::rml::internal::call_with_build_date_str( cb, arg );\n}\n\n}}\n\n/*\n * RML server info\n */\n#include \"version_string.ver\"\n\n#ifndef __TBB_VERSION_STRINGS\n#pragma message(\"Warning: version_string.ver isn't generated properly by version_info.sh script!\")\n#endif\n\n// We use the build time as the RML server info. TBB is required to build RML, so we make it the same as the TBB build time.\n#ifndef __TBB_DATETIME\n#define __TBB_DATETIME __DATE__ \" \" __TIME__\n#endif\n\n#if !RML_USE_WCRM\n#define RML_SERVER_BUILD_TIME \"Intel(R) RML library built: \" __TBB_DATETIME\n#define RML_SERVER_VERSION_ST \"Intel(R) RML library version: v\" TOSTRING(SERVER_VERSION)\n#else\n#define RML_SERVER_BUILD_TIME \"Intel(R) RML library built: \" __TBB_DATETIME\n#define RML_SERVER_VERSION_ST \"Intel(R) RML library version: v\" TOSTRING(SERVER_VERSION) \" on ConcRT RM with \" RML_THREAD_KIND_STRING\n#endif\n\nnamespace rml {\nnamespace internal {\n\nvoid call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg )\n{\n    (*cb)( arg, RML_SERVER_BUILD_TIME );\n    (*cb)( arg, RML_SERVER_VERSION_ST );\n}\n}} // rml::internal\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/thread_monitor.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// All platform-specific threading support is encapsulated here. */\n\n#ifndef __RML_thread_monitor_H\n#define __RML_thread_monitor_H\n\n#if USE_WINTHREAD\n#include <windows.h>\n#include <process.h>\n#include <malloc.h> //_alloca\n#include \"tbb/tbb_misc.h\" // support for processor groups\n#if __TBB_WIN8UI_SUPPORT\n#include <thread>\n#endif\n#elif USE_PTHREAD\n#include <pthread.h>\n#include <string.h>\n#include <stdlib.h>\n#else\n#error Unsupported platform\n#endif\n#include <stdio.h>\n#include \"tbb/itt_notify.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/semaphore.h\"\n\n// All platform-specific threading support is in this header.\n\n#if (_WIN32||_WIN64)&&!__TBB_ipf\n// Deal with 64K aliasing.  The formula for \"offset\" is a Fibonacci hash function,\n// which has the desirable feature of spreading out the offsets fairly evenly\n// without knowing the total number of offsets, and furthermore unlikely to\n// accidentally cancel out other 64K aliasing schemes that Microsoft might implement later.\n// See Knuth Vol 3. \"Theorem S\" for details on Fibonacci hashing.\n// The second statement is really does need \"volatile\", otherwise the compiler might remove the _alloca.\n#define AVOID_64K_ALIASING(idx)                       \\\n    size_t offset = (idx+1) * 40503U % (1U<<16);      \\\n    void* volatile sink_for_alloca = _alloca(offset); \\\n    __TBB_ASSERT_EX(sink_for_alloca, \"_alloca failed\");\n#else\n// Linux thread allocators avoid 64K aliasing.\n#define AVOID_64K_ALIASING(idx) tbb::internal::suppress_unused_warning(idx)\n#endif /* _WIN32||_WIN64 */\n\nnamespace rml {\n\nnamespace internal {\n\n#if DO_ITT_NOTIFY\nstatic const ::tbb::tchar *SyncType_RML = _T(\"%Constant\");\nstatic const ::tbb::tchar *SyncObj_ThreadMonitor = _T(\"RML Thr Monitor\");\n#endif /* DO_ITT_NOTIFY */\n\n//! Monitor with limited two-phase commit form of wait.\n/** At most one thread should wait on an instance at a time. */\nclass thread_monitor {\npublic:\n    class cookie {\n        friend class thread_monitor;\n        tbb::atomic<size_t> my_epoch;\n    };\n    thread_monitor() : spurious(false), my_sema() {\n        my_cookie.my_epoch = 0;\n        ITT_SYNC_CREATE(&my_sema, SyncType_RML, SyncObj_ThreadMonitor);\n        in_wait = false;\n    }\n    ~thread_monitor() {}\n\n    //! If a thread is waiting or started a two-phase wait, notify it.\n    /** Can be called by any thread. */\n    void notify();\n\n    //! Begin two-phase wait.\n    /** Should only be called by thread that owns the monitor.\n        The caller must either complete the wait or cancel it. */\n    void prepare_wait( cookie& c );\n\n    //! Complete a two-phase wait and wait until notification occurs after the earlier prepare_wait.\n    void commit_wait( cookie& c );\n\n    //! Cancel a two-phase wait.\n    void cancel_wait();\n\n#if USE_WINTHREAD\n    typedef HANDLE handle_type;\n\n    #define __RML_DECL_THREAD_ROUTINE unsigned WINAPI\n    typedef unsigned (WINAPI *thread_routine_type)(void*);\n\n    //! Launch a thread\n    static handle_type launch( thread_routine_type thread_routine, void* arg, size_t stack_size, const size_t* worker_index = NULL );\n\n#elif USE_PTHREAD\n    typedef pthread_t handle_type;\n\n    #define __RML_DECL_THREAD_ROUTINE void*\n    typedef void*(*thread_routine_type)(void*);\n\n    //! Launch a thread\n    static handle_type launch( thread_routine_type thread_routine, void* arg, size_t stack_size );\n#endif /* USE_PTHREAD */\n\n    //! Yield control to OS\n    /** Affects the calling thread. **/\n    static void yield();\n\n    //! Join thread\n    static void join(handle_type handle);\n\n    //! Detach thread\n    static void detach_thread(handle_type handle);\nprivate:\n    cookie my_cookie;\n    tbb::atomic<bool>   in_wait;\n    bool   spurious;\n    tbb::internal::binary_semaphore my_sema;\n#if USE_PTHREAD\n    static void check( int error_code, const char* routine );\n#endif\n};\n\n#if USE_WINTHREAD\n\n#ifndef STACK_SIZE_PARAM_IS_A_RESERVATION\n#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000\n#endif\n\n#if __TBB_WIN8UI_SUPPORT\ninline thread_monitor::handle_type thread_monitor::launch( thread_routine_type thread_function, void* arg, size_t, const size_t*) {\n//TODO: check that exception thrown from std::thread is not swallowed silently\n    std::thread* thread_tmp=new std::thread(thread_function, arg);\n    return thread_tmp->native_handle();\n}\n#else //__TBB_WIN8UI_SUPPORT\ninline thread_monitor::handle_type thread_monitor::launch( thread_routine_type thread_routine, void* arg, size_t stack_size, const size_t* worker_index ) {\n    unsigned thread_id;\n    int number_of_processor_groups = ( worker_index ) ? tbb::internal::NumberOfProcessorGroups() : 0;\n    unsigned create_flags = ( number_of_processor_groups > 1 ) ? CREATE_SUSPENDED : 0;\n    HANDLE h = (HANDLE)_beginthreadex( NULL, unsigned(stack_size), thread_routine, arg, STACK_SIZE_PARAM_IS_A_RESERVATION | create_flags, &thread_id );\n    if( !h ) {\n        fprintf(stderr,\"thread_monitor::launch: _beginthreadex failed\\n\");\n        exit(1);\n    }\n    if ( number_of_processor_groups > 1 ) {\n        tbb::internal::MoveThreadIntoProcessorGroup( h,\n                        tbb::internal::FindProcessorGroupIndex( static_cast<int>(*worker_index) ) );\n        ResumeThread( h );\n    }\n    return h;\n}\n#endif //__TBB_WIN8UI_SUPPORT\n\nvoid thread_monitor::join(handle_type handle) {\n#if TBB_USE_ASSERT\n    DWORD res =\n#endif\n        WaitForSingleObjectEx(handle, INFINITE, FALSE);\n    __TBB_ASSERT( res==WAIT_OBJECT_0, NULL );\n#if TBB_USE_ASSERT\n    BOOL val =\n#endif\n        CloseHandle(handle);\n    __TBB_ASSERT( val, NULL );\n}\n\nvoid thread_monitor::detach_thread(handle_type handle) {\n#if TBB_USE_ASSERT\n    BOOL val =\n#endif\n        CloseHandle(handle);\n    __TBB_ASSERT( val, NULL );\n}\n\ninline void thread_monitor::yield() {\n// TODO: consider unification via __TBB_Yield or tbb::this_tbb_thread::yield\n#if !__TBB_WIN8UI_SUPPORT\n    SwitchToThread();\n#else\n    std::this_thread::yield();\n#endif\n}\n#endif /* USE_WINTHREAD */\n\n#if USE_PTHREAD\n// TODO: can we throw exceptions instead of termination?\ninline void thread_monitor::check( int error_code, const char* routine ) {\n    if( error_code ) {\n        fprintf(stderr,\"thread_monitor %s in %s\\n\", strerror(error_code), routine );\n        exit(1);\n    }\n}\n\ninline thread_monitor::handle_type thread_monitor::launch( void* (*thread_routine)(void*), void* arg, size_t stack_size ) {\n    // FIXME - consider more graceful recovery than just exiting if a thread cannot be launched.\n    // Note that there are some tricky situations to deal with, such that the thread is already\n    // grabbed as part of an OpenMP team.\n    pthread_attr_t s;\n    check(pthread_attr_init( &s ), \"pthread_attr_init\");\n    if( stack_size>0 )\n        check(pthread_attr_setstacksize( &s, stack_size ), \"pthread_attr_setstack_size\" );\n    pthread_t handle;\n    check( pthread_create( &handle, &s, thread_routine, arg ), \"pthread_create\" );\n    check( pthread_attr_destroy( &s ), \"pthread_attr_destroy\" );\n    return handle;\n}\n\nvoid thread_monitor::join(handle_type handle) {\n    check(pthread_join(handle, NULL), \"pthread_join\");\n}\n\nvoid thread_monitor::detach_thread(handle_type handle) {\n    check(pthread_detach(handle), \"pthread_detach\");\n}\n\ninline void thread_monitor::yield() {\n    sched_yield();\n}\n#endif /* USE_PTHREAD */\n\ninline void thread_monitor::notify() {\n    my_cookie.my_epoch = my_cookie.my_epoch + 1;\n    bool do_signal = in_wait.fetch_and_store( false );\n    if( do_signal )\n        my_sema.V();\n}\n\ninline void thread_monitor::prepare_wait( cookie& c ) {\n    if( spurious ) {\n        spurious = false;\n        //  consumes a spurious posted signal. don't wait on my_sema.\n        my_sema.P();\n    }\n    c = my_cookie;\n    in_wait = true;\n   __TBB_full_memory_fence();\n}\n\ninline void thread_monitor::commit_wait( cookie& c ) {\n    bool do_it = ( c.my_epoch == my_cookie.my_epoch);\n    if( do_it ) my_sema.P();\n    else        cancel_wait();\n}\n\ninline void thread_monitor::cancel_wait() {\n    spurious = ! in_wait.fetch_and_store( false );\n}\n\n} // namespace internal\n} // namespace rml\n\n#endif /* __RML_thread_monitor_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/wait_counter.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __RML_wait_counter_H\n#define __RML_wait_counter_H\n\n#include \"thread_monitor.h\"\n#include \"tbb/atomic.h\"\n\nnamespace rml {\nnamespace internal {\n\nclass wait_counter {\n    thread_monitor my_monitor;\n    tbb::atomic<int> my_count;\n    tbb::atomic<int> n_transients;\npublic:\n    wait_counter() { \n        // The \"1\" here is subtracted by the call to \"wait\".\n        my_count=1;\n        n_transients=0;\n    }\n\n    //! Wait for number of operator-- invocations to match number of operator++ invocations.\n    /** Exactly one thread should call this method. */\n    void wait() {\n        int k = --my_count;\n        __TBB_ASSERT( k>=0, \"counter underflow\" );\n        if( k>0 ) {\n            thread_monitor::cookie c;\n            my_monitor.prepare_wait(c);\n            if( my_count )\n                my_monitor.commit_wait(c);\n            else \n                my_monitor.cancel_wait();\n        }\n        while( n_transients>0 )\n            __TBB_Yield();\n    }\n    void operator++() {\n        ++my_count;\n    }\n    void operator--() {\n        ++n_transients;\n        int k = --my_count;\n        __TBB_ASSERT( k>=0, \"counter underflow\" );\n        if( k==0 ) \n            my_monitor.notify();\n        --n_transients;\n    }\n};\n\n} // namespace internal\n} // namespace rml\n\n#endif /* __RML_wait_counter_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/win32-rml-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\nEXPORTS\n\n__RML_open_factory\n__RML_close_factory\n__TBB_make_rml_server\n__KMP_make_rml_server\n__TBB_call_with_my_server_info\n__KMP_call_with_my_server_info\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/server/win64-rml-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\nEXPORTS\n\n__RML_open_factory\n__RML_close_factory\n__TBB_make_rml_server\n__KMP_make_rml_server\n__TBB_call_with_my_server_info\n__KMP_call_with_my_server_info\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/rml_omp_stub.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// This file is compiled with C++, but linked with a program written in C.\n// The intent is to find dependencies on the C++ run-time.\n\n#include <stdlib.h>\n#include \"../../../include/tbb/tbb_stddef.h\" // __TBB_override\n#include \"harness_defs.h\"\n#define RML_PURE_VIRTUAL_HANDLER abort\n\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n// VS2008/VC9 seems to have an issue;\n#pragma warning( push )\n#pragma warning( disable: 4100 ) \n#elif __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n// VS2012-2013 issues \"warning C4702: unreachable code\" for the code which really\n// shouldn't be reached according to the test logic: rml::client has the\n// implementation for the \"pure\" virtual methods to be aborted if they are\n// called.\n#pragma warning( push )\n#pragma warning( disable: 4702 )\n#endif\n#include \"rml_omp.h\"\n#if ( _MSC_VER==1500 && !defined(__INTEL_COMPILER)) || __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n#pragma warning( pop )\n#endif\n\nrml::versioned_object::version_type Version;\n\nclass MyClient: public __kmp::rml::omp_client {\npublic:\n    rml::versioned_object::version_type version() const __TBB_override {return 0;}\n    size_type max_job_count() const __TBB_override {return 1024;}\n    size_t min_stack_size() const __TBB_override {return 1<<20;}\n    rml::job* create_one_job() __TBB_override {return NULL;}\n    void acknowledge_close_connection() __TBB_override {}\n    void cleanup(job&) __TBB_override {}\n    policy_type policy() const __TBB_override {return throughput;}\n    void process( job&, void*, __kmp::rml::omp_client::size_type ) __TBB_override {}\n\n};\n\n//! Never actually set, because point of test is to find linkage issues.\n__kmp::rml::omp_server* MyServerPtr;\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#define HARNESS_CUSTOM_MAIN 1\n#include \"harness.h\"\n\nextern \"C\" void Cplusplus() {\n    MyClient client;\n    Version = client.version();\n    REPORT(\"done\\n\");\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_job_automaton.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#if __TBB_MIC_OFFLOAD\nint TestMain () {\n    return Harness::Skipped;\n}\n#else\n#include \"job_automaton.h\"\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness_barrier.h\"\n\nclass State {\n    Harness::SpinBarrier barrier;\n    rml::internal::job_automaton ja;\n    rml::job job;\n    tbb::atomic<int> job_created;\n    tbb::atomic<int> job_destroyed;\n    tbb::atomic<bool> job_received;\npublic:\n    State() : barrier(2) {\n        job_created = 0;\n        job_destroyed = 0;\n        job_received = false;\n    }\n    void exercise( bool is_owner );\n    ~State() {\n        ASSERT( job_created==job_destroyed, \"accounting error\" );\n        ASSERT( job_destroyed<=1, \"destroyed job twice\" );\n    }\n};\n\nint DelayMask;\nconst int N = 14; \ntbb::atomic<int> Coverage[N];\n\n//! Mark kth interval as covered and insert delay if kth bit of DelayMask is set.\n/** An interval is the code between two operations on the job_automaton that we are testing. */\nvoid Cover( int k ) {\n    ASSERT( k<N, NULL );\n    ++Coverage[k];\n    if( DelayMask>>k&1 ) {\n        // Introduce delay (and possibly a thread context switch)\n        __TBB_Yield();\n    }\n}\n\nvoid State::exercise( bool is_owner ) {\n    barrier.wait();\n    if( is_owner ) {\n        Cover(0);\n        if( ja.try_acquire() ) {\n            Cover(1);\n            ++job_created;\n            ja.set_and_release(&job);\n            Cover(2);\n            if( ja.try_acquire() ) {\n                Cover(3);\n                ja.release();\n                Cover(4);\n                if( ja.try_acquire() ) {\n                    Cover(5);\n                    ja.release();\n                }\n            }\n            Cover(6);\n        } else {\n            Cover(7);\n        }\n        if( DelayMask&1<<N ) {\n            while( !job_received ) \n                __TBB_Yield();\n        }\n    } else {\n        // Using extra bit of DelayMask for choosing whether to run wait_for_job or not.\n        if( DelayMask&1<<N ) {\n            rml::job* j= ja.wait_for_job();\n            if( j!=&job ) REPORT(\"%p\\n\",j);\n            ASSERT( j==&job, NULL );\n            job_received = true;\n        }\n        Cover(8);\n    }   \n    rml::job* j;\n    if( ja.try_plug(j) ) {\n        ASSERT( j==&job || !j, NULL );\n        if( j ) {\n            Cover(9+is_owner);\n            ++job_destroyed;\n        } else {\n            __TBB_ASSERT( !is_owner, \"owner failed to create job but plugged self\" );\n            Cover(11);\n        } \n    } else {\n        Cover(12+is_owner);\n    }\n}\n\nclass Loop: NoAssign {\n    State& s;\npublic:\n    Loop(State& s_) : s(s_) {}\n    void operator()( int i ) const {s.exercise(i==0);}\n};\n\n/** Return true if coverage is acceptable.\n    If report==true, issue message if it is unacceptable. */\nbool CheckCoverage( bool report ) {\n    bool okay = true;\n    for( int i=0; i<N; ++i ) {\n        const int min_coverage = 4; \n        if( Coverage[i]<min_coverage ) {\n            okay = false;\n            if( report )\n                REPORT(\"Warning: Coverage[%d]=%d is less than acceptable minimum of %d\\n\", i, int(Coverage[i]),min_coverage);\n        }\n    }\n    return okay;\n}\n\nint TestMain () {\n    for( DelayMask=0; DelayMask<8<<N; ++DelayMask ) {\n        State s;\n        NativeParallelFor( 2, Loop(s) );\n        if( CheckCoverage(false) ) { \n            // Reached acceptable code coverage level\n            break;\n        }\n    }\n    CheckCoverage(true);\n    return Harness::Done;\n}\n\n#endif /* __TBB_MIC_OFFLOAD */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_rml_mixed.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <tbb/tbb_config.h>\n#if __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD\n#include \"harness.h\"\nint TestMain () {\n    return Harness::Skipped;\n}\n#else\n#include \"rml_tbb.h\"\n#include \"rml_omp.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n\n#define HARNESS_DEFAULT_MIN_THREADS 4\n#include \"harness.h\"\n\n// dynamic_link initializes its data structures in a static constructor. But\n// the initialization order of static constructors in different modules is\n// non-deterministic. Thus dynamic_link fails on some systems when the\n// application changes its current directory after the library (TBB/OpenMP/...)\n// is loaded but before the static constructors in the library are executed.\n#define CHDIR_SUPPORT_BROKEN ( __TBB_GCC_VERSION >= 40600 || (__linux__ && __TBB_CLANG_VERSION >= 30500) )\n\nconst int OMP_ParallelRegionSize = 16;\nint TBB_MaxThread = 4;           // Includes master\nint OMP_MaxThread = int(~0u>>1); // Includes master\n\ntemplate<typename Client>\nclass ClientBase: public Client {\nprotected:\n    typedef typename Client::version_type version_type;\n    typedef typename Client::job job;\n    typedef typename Client::policy_type policy_type;\n\nprivate:\n    version_type version() const __TBB_override {\n        return 0;\n    }\n    size_t min_stack_size() const __TBB_override {\n        return 1<<20;\n    }\n    job* create_one_job() __TBB_override {\n        return new rml::job;\n    }\n    policy_type policy() const __TBB_override {\n        return Client::turnaround;\n    }\n    void acknowledge_close_connection() __TBB_override {\n        delete this;\n    }\n    void cleanup( job& j ) __TBB_override {delete &j;}\n\npublic:\n    virtual ~ClientBase() {}\n};\n\n#if _WIN32\n#include <direct.h>\n#define PATH_LEN MAX_PATH+1\n#define SLASH '\\\\'\n#define ROOT_DIR \"\\\\\"\n// ROOT_DIR_REST means how many symbols before first slash in the path\n#define ROOT_DIR_REST 2\n#else\n#include <unistd.h>\n#include <limits.h>\n#define PATH_LEN PATH_MAX+1\n#define SLASH '/'\n#define ROOT_DIR \"/\"\n// ROOT_DIR_REST means how many symbols before first slash in the path\n#define ROOT_DIR_REST 0\n#define _getcwd getcwd\n#define _chdir  chdir\n#endif\n\n#if !CHDIR_SUPPORT_BROKEN\nclass ChangeCurrentDir {\n    char dir[PATH_LEN+1];\n    char *last_slash;\npublic:\n    ChangeCurrentDir() {\n        if ( !_getcwd( dir, PATH_LEN ) ) {\n            REPORT_FATAL_ERROR(\"ERROR: Couldn't get current working directory\\n\");\n        }\n\n        last_slash = strrchr( dir, SLASH );\n        ASSERT( last_slash, \"The current directory doesn't contain slashes\" );\n        *last_slash = 0;\n\n        if ( _chdir( last_slash-dir == ROOT_DIR_REST ? ROOT_DIR : dir ) ) {\n            REPORT_FATAL_ERROR(\"ERROR: Couldn't change current working directory (%s)\\n\", dir );\n        }\n    }\n\n    // Restore current dir\n    ~ChangeCurrentDir() {\n        *last_slash = SLASH;\n        if ( _chdir(dir) ) {\n            REPORT_FATAL_ERROR(\"ERROR: Couldn't change current working directory\\n\");\n        }\n    }\n};\n#endif\n\n//! Represents a TBB or OpenMP run-time that uses RML.\ntemplate<typename Factory, typename Client>\nclass RunTime {\npublic:\n    //! Factory that run-time uses to make servers.\n    Factory factory;\n    Client* client;\n    typename Factory::server_type* server;\n#if _WIN32||_WIN64\n    ::rml::server::execution_resource_t me;\n#endif\n    RunTime() {\n        factory.open();\n    }\n    ~RunTime() {\n        factory.close();\n    }\n    //! Create server for this run-time\n    void create_connection();\n\n    //! Destroy server for this run-time\n    void destroy_connection();\n};\n\nclass ThreadLevelRecorder {\n    tbb::atomic<int> level;\n    struct record {\n        tbb::tick_count time;\n        int nthread;\n    };\n    tbb::atomic<unsigned> next;\n    /** Must be power of two */\n    static const unsigned max_record_count = 1<<20;\n    record array[max_record_count];\npublic:\n    void change_level( int delta );\n    void dump();\n};\n\nvoid ThreadLevelRecorder::change_level( int delta ) {\n    int x = level+=delta;\n    tbb::tick_count t = tbb::tick_count::now();\n    unsigned k = next++;\n    if( k<max_record_count ) {\n        record& r = array[k];\n        r.time = t;\n        r.nthread = x;\n    } \n}\n\nvoid ThreadLevelRecorder::dump() {\n    FILE* f = fopen(\"time.txt\",\"w\");\n    if( !f ) {\n        perror(\"fopen(time.txt)\\n\");\n        exit(1);\n    }\n    unsigned limit = next;\n    if( limit>max_record_count ) {\n        // Clip\n        limit = next;\n    }\n    for( unsigned i=0; i<limit; ++i ) {\n        fprintf(f,\"%f\\t%d\\n\",(array[i].time-array[0].time).seconds(),array[i].nthread);\n    }\n    fclose(f);\n}\n\nclass TBB_Client: public ClientBase<tbb::internal::rml::tbb_client> {\n    void process( job& j ) __TBB_override;\n    size_type max_job_count() const __TBB_override {\n        return TBB_MaxThread-1;\n    }\n};\n\nclass OMP_Client: public ClientBase<__kmp::rml::omp_client> {\n    void process( job&, void* cookie, omp_client::size_type ) __TBB_override;\n    size_type max_job_count() const __TBB_override {\n        return OMP_MaxThread-1;\n    }\n};\n\n#if !CHDIR_SUPPORT_BROKEN\n// A global instance of ChangeCurrentDir should be declared before TBB_RunTime and OMP_RunTime\n// since we want to change current directory before opening factory\nChangeCurrentDir Changer;\n#endif\nRunTime<tbb::internal::rml::tbb_factory, TBB_Client> TBB_RunTime;\nRunTime<__kmp::rml::omp_factory, OMP_Client> OMP_RunTime;\nThreadLevelRecorder TotalThreadLevel;\n\ntemplate<typename Factory, typename Client>\nvoid RunTime<Factory,Client>::create_connection() {\n    client = new Client;\n    typename Factory::status_type status = factory.make_server( server, *client );\n    ASSERT( status==Factory::st_success, NULL );\n#if _WIN32||_WIN64\n    server->register_master( me );\n#endif /* _WIN32||_WIN64 */\n}\n\ntemplate<typename Factory, typename Client>\nvoid RunTime<Factory,Client>::destroy_connection() {\n#if _WIN32||_WIN64\n    server->unregister_master( me );\n#endif /* _WIN32||_WIN64 */\n    server->request_close_connection();\n    server = NULL;\n}\n\nclass OMP_Team {\npublic:\n    OMP_Team( __kmp::rml::omp_server& ) {}\n    tbb::atomic<unsigned> barrier;\n};\n\ntbb::atomic<int> AvailWork;\ntbb::atomic<int> CompletionCount;\n \nvoid OMPWork() {\n    tbb::atomic<int> x;\n    for( x=0; x<2000000; ++x ) {\n        continue;\n    }\n}\n\nvoid TBBWork() {\n    if( AvailWork>=0 ) {\n        int k = --AvailWork;\n        if( k==-1 ) {\n            TBB_RunTime.server->adjust_job_count_estimate(-(TBB_MaxThread-1));\n            ++CompletionCount;\n        } else if( k>=0 ) {\n            for( int j=0; j<4; ++j ) {\n                OMP_Team team( *OMP_RunTime.server );\n                int n = OMP_RunTime.server->try_increase_load( OMP_ParallelRegionSize-1, /*strict=*/false );\n                team.barrier = 0;\n                ::rml::job* array[OMP_ParallelRegionSize-1];\n                if( n>0)\n                    OMP_RunTime.server->get_threads( n, &team, array );\n                // Master does work inside parallel region too.\n                OMPWork();\n                // Master waits for workers to finish\n                if( n>0 )\n                    while( team.barrier!=unsigned(n) ) {\n                        __TBB_Yield();\n                    } \n            }\n            ++CompletionCount;\n        }\n    }\n}\n\nvoid TBB_Client::process( job& ) {\n    TotalThreadLevel.change_level(1);\n    TBBWork();\n    TotalThreadLevel.change_level(-1);\n}\n\nvoid OMP_Client::process( job& /* j */, void* cookie, omp_client::size_type ) {\n    TotalThreadLevel.change_level(1);\n    ASSERT( OMP_RunTime.server, NULL );\n    OMPWork();\n    ASSERT( OMP_RunTime.server, NULL );\n    static_cast<OMP_Team*>(cookie)->barrier+=1;\n    TotalThreadLevel.change_level(-1);\n}\n\nvoid TBBOutSideOpenMPInside() {\n    TotalThreadLevel.change_level(1);\n    CompletionCount = 0;\n    int tbbtasks = 32;\n    AvailWork = tbbtasks;\n    TBB_RunTime.server->adjust_job_count_estimate(TBB_MaxThread-1);\n    while( CompletionCount!=tbbtasks+1 ) {\n        TBBWork();\n    }\n    TotalThreadLevel.change_level(-1);\n}\n\nint TestMain () {\n#if CHDIR_SUPPORT_BROKEN\n    REPORT(\"Known issue: dynamic_link does not support current directory changing before its initialization.\\n\");\n#endif\n    for( TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {\n        REMARK(\"Testing with TBB_MaxThread=%d\\n\", TBB_MaxThread);\n        TBB_RunTime.create_connection();\n        OMP_RunTime.create_connection();\n        TBBOutSideOpenMPInside();\n        OMP_RunTime.destroy_connection();\n        TBB_RunTime.destroy_connection();\n    }\n    TotalThreadLevel.dump();\n    return Harness::Done;\n}\n#endif /* __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_rml_omp.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <tbb/tbb_config.h>\n#if __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD\n#include \"harness.h\"\nint TestMain () {\n    return Harness::Skipped;\n}\n#else\n#include \"rml_omp.h\"\n\ntypedef __kmp::rml::omp_server MyServer;\ntypedef __kmp::rml::omp_factory MyFactory;\n\n// Forward declaration for the function used in test_server.h\nvoid DoClientSpecificVerification( MyServer& , int );\n\n#define HARNESS_DEFAULT_MIN_THREADS 0\n#include \"test_server.h\"\n#include \"tbb/tbb_misc.h\"\n\nstatic bool StrictTeam;\n\nclass MyTeam {\n    MyTeam& operator=( const MyTeam& ) ;\npublic:\n    struct info_type {\n        rml::job* job;\n        bool ran;\n        info_type() : job(NULL), ran(false) {}\n    };\n    MyTeam( MyServer& /* server */, size_t max_thread_ ) :\n        max_thread(max_thread_)\n    {\n        self_ptr = this;\n        info = new info_type[max_thread];\n    }\n    ~MyTeam() {\n        delete[] info;\n    }\n    const size_t max_thread;\n    size_t n_thread;\n    tbb::atomic<int> barrier;\n    /** Indexed with 1-origin index */\n    info_type* info;\n    int iteration;\n    MyTeam* self_ptr;\n};\n\nclass MyClient: public ClientBase<__kmp::rml::omp_client> {\npublic:\n    MyServer* server;\n    void process( job& j, void* cookie, size_type index ) __TBB_override {\n        MyTeam& t = *static_cast<MyTeam*>(cookie);\n        ASSERT( t.self_ptr==&t, \"trashed cookie\" );\n        ASSERT( index<t.max_thread, NULL );\n        ASSERT( !t.info[index].ran, \"duplicate index?\" );\n        t.info[index].job = &j;\n        t.info[index].ran = true;\n        do_process(&j);\n        if( index==1 && nesting.level<nesting.limit ) {\n            DoOneConnection<MyFactory,MyClient> doc(MaxThread,Nesting(nesting.level+1,nesting.limit),0,false);\n            doc(0);\n        }\n#if _WIN32||_WIN64\n        // test activate/deactivate\n        if( t.n_thread>1 && t.n_thread%2==0 ) {\n            if( nesting.level==0 ) {\n                if( index&1 ) {\n                    size_type target = index-1;\n                    ASSERT(  target<t.max_thread, NULL );\n                    // wait until t.info[target].job is defined\n                    tbb::internal::spin_wait_until_eq( t.info[target].ran, true );\n                    server->try_increase_load( 1, true );\n                    server->reactivate( t.info[target].job );\n                } else {\n                    server->deactivate( &j );\n                }\n            }\n        }\n#endif /* _WIN32||_WIN64 */\n        ++t.barrier;\n    }\n    static const bool is_omp = true;\n    bool is_strict() const {return StrictTeam;}\n};\n\nvoid FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra, Checker* checker ) {\n    ASSERT( max_thread>=0, NULL );\n#if _WIN32||_WIN64\n    ::rml::server::execution_resource_t me;\n    server.register_master( me );\n#endif /* _WIN32||_WIN64 */\n    client.server = &server;\n    MyTeam team(server,size_t(max_thread));\n    MyServer::size_type n_thread = 0;\n    for( int iteration=0; iteration<4; ++iteration ) {\n        for( size_t i=0; i<team.max_thread; ++i )\n            team.info[i].ran = false;\n        switch( iteration ) {\n            default:\n                n_thread = int(max_thread);\n                break;\n            case 1:\n                // No change in number of threads\n                break;\n            case 2:\n                // Decrease number of threads.\n                n_thread = int(max_thread)/2;\n                break;\n            // Case 3 is same code as the default, but has effect of increasing the number of threads.\n        }\n        team.barrier = 0;\n        REMARK(\"client %d: server.run with n_thread=%d\\n\", client.client_id(), int(n_thread) );\n        server.independent_thread_number_changed( n_extra );\n        if( checker ) {\n            // Give RML time to respond to change in number of threads.\n            Harness::Sleep(1);\n        }\n        int n_delivered = server.try_increase_load( n_thread, StrictTeam );\n        ASSERT( !StrictTeam || n_delivered==int(n_thread), \"server failed to satisfy strict request\" );\n        if( n_delivered<0 ) {\n            REMARK( \"client %d: oversubscription occurred (by %d)\\n\", client.client_id(), -n_delivered );\n            server.independent_thread_number_changed( -n_extra );\n            n_delivered = 0;\n        } else {\n            team.n_thread = n_delivered;\n            ::rml::job* job_array[JobArraySize];\n            job_array[n_delivered] = (::rml::job*)intptr_t(-1);\n            server.get_threads( n_delivered, &team, job_array );\n            __TBB_ASSERT( job_array[n_delivered]== (::rml::job*)intptr_t(-1), NULL );\n            for( int i=0; i<n_delivered; ++i ) {\n                MyJob* j = static_cast<MyJob*>(job_array[i]);\n                int s = j->state;\n                ASSERT( s==MyJob::idle||s==MyJob::busy, NULL );\n            }\n            server.independent_thread_number_changed( -n_extra );\n            REMARK(\"client %d: team size is %d\\n\", client.client_id(), n_delivered);\n            if( checker ) {\n                checker->check_number_of_threads_delivered( n_delivered, n_thread, n_extra );\n            }\n            // Protocol requires that master wait until workers have called \"done_processing\"\n            while( team.barrier!=n_delivered ) {\n                ASSERT( team.barrier>=0, NULL );\n                ASSERT( team.barrier<=n_delivered, NULL );\n                __TBB_Yield();\n            }\n            REMARK(\"client %d: team completed\\n\", client.client_id() );\n            for( int i=0; i<n_delivered; ++i ) {\n                ASSERT( team.info[i].ran, \"thread on team allegedly delivered, but did not run?\" );\n            }\n        }\n        for( MyServer::size_type i=n_delivered; i<MyServer::size_type(max_thread); ++i ) {\n            ASSERT( !team.info[i].ran, \"thread on team ran with illegal index\" );\n        }\n    }\n#if _WIN32||_WIN64\n    server.unregister_master( me );\n#endif\n}\n\nvoid DoClientSpecificVerification( MyServer& server, int /*n_thread*/ )\n{\n    ASSERT( server.current_balance()==int(tbb::internal::AvailableHwConcurrency())-1, NULL );\n}\n\nint TestMain () {\n#if _MSC_VER == 1600 && RML_USE_WCRM\n    REPORT(\"Known issue: RML resets the process mask when Concurrency Runtime is used.\\n\");\n    // AvailableHwConcurrency reads process mask when the first call. That's why it should\n    // be called before RML initialization.\n    tbb::internal::AvailableHwConcurrency();\n#endif\n\n    StrictTeam = true;\n    VerifyInitialization<MyFactory,MyClient>( MaxThread );\n    SimpleTest<MyFactory,MyClient>();\n\n    StrictTeam = false;\n    VerifyInitialization<MyFactory,MyClient>( MaxThread );\n    SimpleTest<MyFactory,MyClient>();\n\n    return Harness::Done;\n}\n#endif /* __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_rml_omp_c_linkage.c",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nvoid Cplusplus();\n\nint main() {\n    Cplusplus();      \n    return 0;\n} \n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_rml_tbb.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <tbb/tbb_config.h>\n#if __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD\n#include \"harness.h\"\nint TestMain () {\n    return Harness::Skipped;\n}\n#else\n#include \"rml_tbb.h\"\n\ntypedef tbb::internal::rml::tbb_server MyServer;\ntypedef tbb::internal::rml::tbb_factory MyFactory;\n\n// Forward declaration of the function used in test_server.h\nvoid DoClientSpecificVerification( MyServer&, int );\n\n#define HARNESS_DEFAULT_MIN_THREADS 0\n#include \"test_server.h\"\n\ntbb::atomic<int> n_available_hw_threads;\n\nclass MyClient: public ClientBase<tbb::internal::rml::tbb_client> {\n    tbb::atomic<int> counter;\n    tbb::atomic<int> gate;\n    void process( job& j ) __TBB_override {\n        do_process(&j);\n        //wait until the gate is open.\n        while( gate==0 )\n            Harness::Sleep(1);\n\n        __TBB_ASSERT( nesting.limit<=2, NULL );\n        if( nesting.level>=nesting.limit )\n            return;\n\n        size_type max_outstanding_connections = max_job_count(); // if nesting.level==0\n        if( nesting.level==1 )\n            max_outstanding_connections *= (1+max_outstanding_connections);\n\n        if( default_concurrency()<=max_outstanding_connections+2 )\n            // i.e., if it is not guaranteed that at least two connections may be made without depleting the_balance\n            return;\n\n        // at this point, ( nesting.level<nesting.limit ) && ( my_server->default_concurrency()-max_outstanding_connections>2 ) \n        for( ;; ) {\n            while( n_available_hw_threads<=1 )\n                Harness::Sleep(1);\n\n            int n = --n_available_hw_threads;\n            if( n>0 ) break;\n            // else I lost\n            ++n_available_hw_threads;\n        }\n        \n        DoOneConnection<MyFactory,MyClient> doc(max_job_count(),Nesting(nesting.level+1,nesting.limit),0,false);\n        doc(0);\n\n        ++n_available_hw_threads;\n    }\npublic:\n    MyClient() {counter=1;}\n    static const bool is_omp = false;\n    bool is_strict() const {return false;}\n    void open_the_gate() { gate = 1; }\n    void close_the_gate() { gate = 0; }\n};\n\nvoid FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra, Checker* checker ) {\n    REMARK(\"client %d: calling adjust_job_count_estimate(%d)\\n\", client.client_id(),n_thread);\n    // Exercise independent_thread_number_changed, even for zero values.\n    server.independent_thread_number_changed( n_extra );\n#if _WIN32||_WIN64\n    ::rml::server::execution_resource_t me;\n    server.register_master( me );\n#endif /* _WIN32||_WIN64 */\n    // Experiments indicate that when oversubscribing, the main thread should wait a little\n    // while for the RML worker threads to do some work. \n    if( checker ) {\n        // Give RML time to respond to change in number of threads.\n        Harness::Sleep(1);\n        for( int k=0; k<n_thread; ++k )\n            client.job_array[k].processing_count = 0;\n    }\n    //close the gate to keep worker threads from returning to RML until a snapshot is taken\n    client.close_the_gate();\n    server.adjust_job_count_estimate( n_thread );\n    int n_used = 0;\n    if( checker ) {\n        Harness::Sleep(100);\n        for( int k=0; k<n_thread; ++k )\n            if( client.job_array[k].processing_count )\n                ++n_used;\n    }\n    // open the gate\n    client.open_the_gate();\n    // Logic further below presumes that jobs never starve, so undo previous call\n    // to independent_thread_number_changed before waiting on those jobs.\n    server.independent_thread_number_changed( -n_extra );\n    REMARK(\"client %d: wait for each job to be processed at least once\\n\",client.client_id());\n    // Calculate the number of jobs that are expected to get threads.\n    int expected = n_thread;\n    // Wait for expected number of jobs to be processed.\n#if RML_USE_WCRM\n    int default_concurrency = server.default_concurrency();\n    if( N_TestConnections>0 ) {\n        if( default_concurrency+1>=8 && n_thread<=3 && N_TestConnections<=3 && (default_concurrency/int(N_TestConnections)-1)>=n_thread ) {\n#endif /* RML_USE_WCRM */\n            for(;;) {\n                int n = 0;\n                for( int k=0; k<n_thread; ++k ) \n                    if( client.job_array[k].processing_count!=0 ) \n                        ++n;\n                if( n>=expected ) break;\n                server.yield();\n            }\n#if RML_USE_WCRM\n        } else if( n_thread>0 ) {\n            for( int m=0; m<20; ++m ) {\n                int n = 0;\n                for( int k=0; k<n_thread; ++k ) \n                    if( client.job_array[k].processing_count!=0 ) \n                        ++n;\n                if( n>=expected ) break;\n                Harness::Sleep(1);\n            }\n        }\n    }\n#endif /* RML_USE_WCRM */\n    server.adjust_job_count_estimate(-n_thread);\n#if _WIN32||_WIN64\n    server.unregister_master( me );\n#endif\n    // Give RML some time to respond\n    if( checker ) {\n        Harness::Sleep(1);\n        checker->check_number_of_threads_delivered( n_used, n_thread, n_extra );\n    }\n}\n\nvoid DoClientSpecificVerification( MyServer&, int n_thread )\n{\n    MyClient* client = new MyClient;\n    client->initialize( n_thread, Nesting(), ClientStackSize[0] );\n    MyFactory factory;\n    memset( &factory, 0, sizeof(factory) );\n    MyFactory::status_type status = factory.open();\n    ASSERT( status!=MyFactory::st_not_found, \"could not find RML library\" );\n    ASSERT( status!=MyFactory::st_incompatible, NULL );\n    ASSERT( status==MyFactory::st_success, NULL );\n    MyFactory::server_type* server; \n    status = factory.make_server( server, *client );\n    ASSERT( status==MyFactory::st_success, NULL );\n    client->set_server( server );\n    client->expect_close_connection = true;\n    server->request_close_connection();\n    // Client deletes itself when it sees call to acknowledge_close_connection from server.\n    factory.close();\n}\n\nvoid Initialize()\n{\n    MyClient* client = new MyClient;\n    client->initialize( 1, Nesting(), ClientStackSize[0] );\n    MyFactory factory;\n    memset( &factory, 0, sizeof(factory) );\n    factory.open();\n    MyFactory::server_type* server; \n    factory.make_server( server, *client );\n    client->set_server( server );\n    n_available_hw_threads = server->default_concurrency();\n    client->expect_close_connection = true;\n    server->request_close_connection();\n    // Client deletes itself when it sees call to acknowledge_close_connection from server.\n    factory.close();\n}\n\nint TestMain () {\n    VerifyInitialization<MyFactory,MyClient>( MaxThread );\n    if ( server_concurrency<1 ) {\n         REPORT(\"The test is not intended to run on 1 thread\\n\");\n         return Harness::Skipped;\n    }\n    Initialize();\n    SimpleTest<MyFactory,MyClient>();\n    return Harness::Done;\n}\n#endif /* __TBB_WIN8UI_SUPPORT || __TBB_MIC_OFFLOAD */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_server.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* This header contains code shared by test_omp_server.cpp and test_tbb_server.cpp \n   There is no ifndef guard - test is supposed to include this file exactly once.\n   The test is also exected to have #include of rml_omp.h or rml_tbb.h before \n   including this header. \n\n   This header should not use any parts of TBB that require linking in the TBB run-time. \n   It uses a few instances of tbb::atomic<T>, all of which are completely inlined. */\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"harness.h\"\n#include \"harness_memory.h\"\n#include \"harness_concurrency_tracker.h\"\n\n//! Define TRIVIAL as 1 to test only a single client, no nesting, no extra threads.\n#define TRIVIAL 0\n\n//! Maximum number of clients \n#if TRIVIAL \nconst size_t MaxClient = 1;\n#else\nconst size_t MaxClient = 4;\n#endif\n\nconst size_t ClientStackSize[MaxClient] = {\n    1000000\n#if !TRIVIAL\n   ,2000000\n   ,1000000\n   ,4000000\n#endif /* TRIVIAL */\n};\n\nconst size_t OverheadStackSize = 500000;\n\nconst size_t JobArraySize = 1000;\n\nstatic bool TestSingleConnection;\n\nstatic size_t N_TestConnections;\n\nstatic int server_concurrency;\n\nclass MyJob: public ::rml::job {\npublic:\n    //! Enumeration for tracking states of a job.\n    enum state_t {\n        //! Job has not yet been allocated.\n        unallocated,\n        //! Is idle.\n        idle,\n        //! Has a thread working on it.\n        busy,\n        //! After call to client::cleanup \n        clean\n    };\n    tbb::atomic<int> state;\n    tbb::atomic<int> processing_count;\n    void update( state_t new_state, state_t old_state ) {\n        int o = state.compare_and_swap(new_state,old_state);\n        ASSERT( o==old_state, \"illegal transition\" );\n    }\n    void update_from_either( state_t new_state, state_t old_state1, state_t old_state2 ) {\n        int snapshot;\n        do {\n            snapshot = state;\n            ASSERT( snapshot==old_state1||snapshot==old_state2, \"illegal transition\" );\n        } while( state.compare_and_swap(new_state,snapshot)!=snapshot );\n    }\n    MyJob() {\n        state=unallocated;\n        processing_count=0;\n    }\n    ~MyJob() {\n        // Overwrite so that accidental use after destruction can be detected.\n        memset(static_cast<void*>(this),-1,sizeof(*this));\n    }\n};\n\nstatic tbb::atomic<int> ClientConstructions;\nstatic tbb::atomic<int> ClientDestructions;\n\nstruct Nesting {\n    int level;\n    int limit;\n    Nesting() : level(0), limit(0) {}\n    Nesting( int level_, int limit_ ) : level(level_), limit(limit_) {}\n};\n\ntemplate<typename Client>\nclass ClientBase: public Client {\nprotected:\n    typedef typename Client::size_type size_type;\n    typedef typename Client::version_type version_type;\n    typedef typename Client::policy_type policy_type;\n    typedef typename Client::job job;\nprivate:\n    size_type my_max_job_count;\n    size_t my_stack_size;\n    tbb::atomic<size_t> next_job_index;\n    int my_client_id;\n    rml::server* my_server;\n\npublic:\n    enum state_t {\n        //! Treat *this as constructed.\n        live=0x1234,\n        //! Treat *this as destroyed.\n        destroyed=0xDEAD\n    };\n\n    tbb::atomic<int> state;\n    void update( state_t new_state, state_t old_state ) {\n        int o = state.compare_and_swap(new_state,old_state);\n        ASSERT( o==old_state, NULL );\n    }\n\n    tbb::atomic<bool> expect_close_connection;\n\n    MyJob *job_array;\n\n    version_type version() const __TBB_override {\n        ASSERT( state==live, NULL );\n        return 1;\n    }\n\n    size_type max_job_count() const __TBB_override {\n        ASSERT( state==live, NULL );\n        return my_max_job_count;\n    }\n\n    size_t min_stack_size() const __TBB_override {\n        ASSERT( state==live, NULL );\n        return my_stack_size;\n    }\n\n    policy_type policy() const __TBB_override {return Client::throughput;}\n\n    void acknowledge_close_connection() __TBB_override {\n        ASSERT( expect_close_connection, NULL );\n        for( size_t k=next_job_index; k>0; ) {\n            --k;\n            ASSERT( job_array[k].state==MyJob::clean, NULL );\n        }\n        delete[] job_array;\n        job_array = NULL;\n        ASSERT( my_server, NULL );\n        update( destroyed, live );\n        delete this;\n    }\n\n    void cleanup( job& j_ ) __TBB_override {\n        REMARK(\"client %d: cleanup(%p) called\\n\",client_id(),&j_);\n        ASSERT( state==live, NULL );\n        MyJob& j = static_cast<MyJob&>(j_);\n        while( j.state==MyJob::busy )\n            my_server->yield();\n        j.update(MyJob::clean,MyJob::idle);\n        REMARK(\"client %d: cleanup(%p) returns\\n\",client_id(),&j_);\n    }\n   \n    job* create_one_job();\n\nprotected:\n    void do_process( job* j_ ) {\n        ASSERT( state==live, NULL );\n        MyJob& j = static_cast<MyJob&>(*j_);\n        ASSERT( j_, NULL );\n        j.update(MyJob::busy,MyJob::idle);\n        // use of the plain addition (not the atomic increment) is intentonial\n        j.processing_count = j.processing_count + 1;\n        ASSERT( my_stack_size>OverheadStackSize, NULL ); \n#ifdef __ia64__\n        // Half of the stack is reserved for RSE, so test only remaining half.\n        UseStackSpace( (my_stack_size-OverheadStackSize)/2 );\n#else\n        UseStackSpace( my_stack_size-OverheadStackSize );\n#endif\n        j.update(MyJob::idle,MyJob::busy);\n        my_server->yield();\n    } \npublic:\n    ClientBase() : my_server(NULL) {\n        my_client_id = ClientConstructions++;\n        next_job_index = 0; \n    }\n    int client_id() const {return my_client_id;}\n\n    Nesting nesting;\n\n    void initialize( size_type max_job_count, Nesting nesting_, size_t stack_size ) {\n        ASSERT( stack_size>0, NULL );\n        my_max_job_count = max_job_count;\n        nesting = nesting_;\n        my_stack_size = stack_size;\n        job_array = new MyJob[JobArraySize];\n        expect_close_connection = false;\n        state = live;\n    }\n\n    void set_server( rml::server* s ) {my_server=s;}\n\n    unsigned default_concurrency() const { ASSERT( my_server, NULL); return my_server->default_concurrency(); }\n\n    virtual ~ClientBase() {\n        ASSERT( state==destroyed, NULL );\n        ++ClientDestructions;\n    }\n};\n\ntemplate<typename Client>\ntypename Client::job* ClientBase<Client>::create_one_job() {\n    REMARK(\"client %d: create_one_job() called\\n\",client_id());\n    size_t k = next_job_index++;\n    ASSERT( state==live, NULL );\n    // Following assertion depends on assumption that implementation does not destroy jobs until \n    // the connection is closed.  If the implementation is changed to destroy jobs sooner, the \n    // test logic in this header will have to be reworked.\n    ASSERT( k<my_max_job_count, \"RML allocated more than max_job_count jobs simultaneously\" );\n    ASSERT( k<JobArraySize, \"JobArraySize not big enough (problem is in test, not RML)\" );\n    MyJob& j = job_array[k];\n    j.update(MyJob::idle,MyJob::unallocated);\n    REMARK(\"client %d: create_one_job() for k=%d returns %p\\n\",client_id(),int(k),&j);\n    return &j;\n}\n\nstruct warning_tracker {\n    tbb::atomic<int> n_more_than_available;\n    tbb::atomic<int> n_too_many_threads;\n    tbb::atomic<int> n_system_overload;\n    warning_tracker() {\n        n_more_than_available = 0;\n        n_too_many_threads = 0;\n        n_system_overload = 0;\n    }\n    bool all_set() { return n_more_than_available>0 && n_too_many_threads>0 && n_system_overload>0; }\n} tracker;\n\nclass Checker {\npublic:\n    int default_concurrency;\n    void check_number_of_threads_delivered( int n_delivered, int n_requested, int n_extra ) const;\n    Checker( rml::server& server ) : default_concurrency(int(server.default_concurrency())) {}\n};\n\nvoid Checker::check_number_of_threads_delivered( int n_delivered, int n_requested, int n_extra ) const {\n    ASSERT( default_concurrency>=0, NULL );\n    if( tracker.all_set() ) return;\n    // Check that number of threads delivered is reasonable.\n    int n_avail = default_concurrency;\n    if( n_extra>0 )\n        n_avail-=n_extra;\n    if( n_avail<0 ) \n        n_avail=0;\n    if( n_requested>default_concurrency ) \n        n_avail += n_requested-default_concurrency;\n    int n_expected = n_requested;\n    if( n_expected>n_avail )\n        n_expected=n_avail;\n    const char* msg = NULL;\n    if( n_delivered>n_avail ) {\n        if( ++tracker.n_more_than_available>1 )\n            return;\n        msg = \"server delivered more threads than were theoretically available\";\n    } else if( n_delivered>n_expected ) {\n        if( ++tracker.n_too_many_threads>1 )\n            return;\n        msg = \"server delivered more threads than expected\";\n    } else if( n_delivered<n_expected ) {\n        if( ++tracker.n_system_overload>1 )\n            return;\n        msg = \"server delivered fewer threads than ideal; or, the system is overloaded?\";\n    }\n    if( msg ) {\n        REPORT(\"Warning: %s (n_delivered=%d n_avail=%d n_requested=%d n_extra=%d default_concurrency=%d)\\n\",\n               msg, n_delivered, n_avail, n_requested, n_extra, default_concurrency );\n    }\n}\n\ntemplate<typename Factory,typename Client>\nclass DoOneConnection: NoAssign {\n    //! Number of threads to request\n    const int n_thread;\n    //! Nesting \n    const Nesting nesting;\n    //! Number of extra threads to pretend having outside the RML\n    const int n_extra;\n    //! If true, check number of threads actually delivered.\n    const bool check_delivered;\npublic:\n    DoOneConnection( int n_thread_, Nesting nesting_, int n_extra_, bool check_delivered_ ) : \n        n_thread(n_thread_), \n        nesting(nesting_), \n        n_extra(n_extra_), \n        check_delivered(check_delivered_)\n    {\n    }\n   \n    //! Test ith connection \n    void operator()( size_t i ) const;\n};\n\ntemplate<typename Factory,typename Client>\nvoid DoOneConnection<Factory,Client>::operator()( size_t i ) const {\n    ASSERT( i<MaxClient, NULL );\n    Client* client = new Client;\n    client->initialize( Client::is_omp ? JobArraySize : n_thread, nesting, ClientStackSize[i] );\n    Factory factory;\n    memset( &factory, 0, sizeof(factory) );\n    typename Factory::status_type status = factory.open();\n    ASSERT( status==Factory::st_success, NULL );\n\n    typename Factory::server_type* server; \n    status = factory.make_server( server, *client );\n    ASSERT( status==Factory::st_success, NULL );\n    Harness::ConcurrencyTracker ct;\n    REMARK(\"client %d: opened server n_thread=%d nesting=(%d,%d)\\n\",\n               client->client_id(), n_thread, nesting.level, nesting.limit);\n    client->set_server( server );\n    Checker checker( *server );\n \n    FireUpJobs( *server, *client, n_thread, n_extra, check_delivered && !client->is_strict() ? &checker : NULL );\n\n    // Close the connection\n    client->expect_close_connection = true;\n    REMARK(\"client %d: calling request_close_connection\\n\", client->client_id());\n#if !RML_USE_WCRM\n    int default_concurrency = server->default_concurrency();\n#endif\n    server->request_close_connection();\n    // Client deletes itself when it sees call to acknowledge_close_connection from server.\n    factory.close();\n#if !RML_USE_WCRM\n    if( TestSingleConnection )\n        __TBB_ASSERT_EX( uintptr_t(factory.scratch_ptr)==uintptr_t(default_concurrency), \"under/over subscription?\" );\n#endif\n}\n\n//! Test with n_threads threads and n_client clients.\ntemplate<typename Factory, typename Client>\nvoid SimpleTest() {\n    Harness::ConcurrencyTracker::Reset();\n    TestSingleConnection = true;\n    N_TestConnections = 1;\n    for( int n_thread=MinThread; n_thread<=MaxThread; ++n_thread ) {\n        // Test a single connection, no nesting, no extra threads\n        DoOneConnection<Factory,Client> doc(n_thread,Nesting(0,0),0,false);\n        doc(0);\n    }\n#if !TRIVIAL\n    TestSingleConnection = false;\n    for( int n_thread=MinThread; n_thread<=MaxThread; ++n_thread ) {\n        // Test parallel connections\n        for( int n_client=1; n_client<=int(MaxClient); ++n_client ) {\n            N_TestConnections = n_client;\n            REMARK(\"SimpleTest: n_thread=%d n_client=%d\\n\",n_thread,n_client);\n            NativeParallelFor( n_client, DoOneConnection<Factory,Client>(n_thread,Nesting(0,0),0,false) );\n        }\n        // Test server::independent_thread_number_changed\n        N_TestConnections = 1;\n        for( int n_extra=-4; n_extra<=32; n_extra=n_extra+1+n_extra/5 ) {\n            DoOneConnection<Factory,Client> doc(n_thread,Nesting(0,0),n_extra,true);\n            doc(0);\n        }\n#if !RML_USE_WCRM\n        // Test nested connections\n        DoOneConnection<Factory,Client> doc(n_thread,Nesting(0,2),0,false);\n        doc(0);\n#endif\n    }\n    ASSERT( Harness::ConcurrencyTracker::PeakParallelism()>1 || server_concurrency==0, \"No multiple connections exercised?\" );\n#endif /* !TRIVIAL */\n    // Let RML catch up.\n    while( ClientConstructions!=ClientDestructions )\n        Harness::Sleep(1);\n}\n\nstatic void check_server_info( void* arg, const char* server_info )\n{\n    ASSERT( strstr(server_info, (char*)arg), NULL );\n}\n\ntemplate<typename Factory, typename Client>\nvoid VerifyInitialization( int n_thread ) {\n    Client* client = new Client;\n    client->initialize( Client::is_omp ? JobArraySize : n_thread, Nesting(), ClientStackSize[0] );\n    Factory factory;\n    memset( &factory, 0, sizeof(factory) );\n    typename Factory::status_type status = factory.open();\n    ASSERT( status!=Factory::st_not_found, \"could not find RML library\" );\n    ASSERT( status!=Factory::st_incompatible, NULL );\n    ASSERT( status==Factory::st_success, NULL );\n    factory.call_with_server_info( check_server_info, (void*)\"Intel(R) RML library\" );\n    typename Factory::server_type* server; \n    status = factory.make_server( server, *client );\n    ASSERT( status!=Factory::st_incompatible, NULL );\n    ASSERT( status!=Factory::st_not_found, NULL );\n    ASSERT( status==Factory::st_success, NULL );\n    REMARK(\"client %d: opened server n_thread=%d nesting=(%d,%d)\\n\",\n               client->client_id(), n_thread, 0, 0);\n    ASSERT( server, NULL );\n    client->set_server( server );\n    server_concurrency = server->default_concurrency();\n\n    DoClientSpecificVerification( *server, n_thread );\n\n    // Close the connection\n    client->expect_close_connection = true;\n    REMARK(\"client %d: calling request_close_connection\\n\", client->client_id());\n    server->request_close_connection();\n    // Client deletes itself when it sees call to acknowledge_close_connection from server.\n    factory.close();\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/rml/test/test_thread_monitor.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#if __TBB_MIC_OFFLOAD\nint TestMain () {\n    return Harness::Skipped;\n}\n#else\n#include \"thread_monitor.h\"\n#include \"harness_memory.h\"\n#include \"tbb/semaphore.cpp\"\n\nclass ThreadState {\n    void loop();\npublic:\n    static __RML_DECL_THREAD_ROUTINE routine( void* arg ) {\n        static_cast<ThreadState*>(arg)->loop();\n        return 0;\n    }\n    typedef rml::internal::thread_monitor thread_monitor;\n    thread_monitor monitor;\n    volatile int request;\n    volatile int ack;\n    volatile unsigned clock;\n    volatile unsigned stamp;\n    ThreadState() : request(-1), ack(-1), clock(0) {}\n};\n\nvoid ThreadState::loop() {\n    for(;;) {\n        ++clock;\n        if( ack==request ) {\n            thread_monitor::cookie c;\n            monitor.prepare_wait(c);\n            if( ack==request ) {\n                REMARK(\"%p: request=%d ack=%d\\n\", this, request, ack );\n                monitor.commit_wait(c);\n            } else\n                monitor.cancel_wait();\n        } else {\n            // Throw in delay occasionally\n            switch( request%8 ) {\n                case 0: \n                case 1:\n                case 5:\n                    rml::internal::thread_monitor::yield();\n            }\n            int r = request;\n            ack = request;\n            if( !r ) return;\n        }\n    }\n}\n\n// Linux on IA-64 architecture seems to require at least 1<<18 bytes per stack.\nconst size_t MinStackSize = 1<<18;\nconst size_t MaxStackSize = 1<<22;\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        ThreadState* t = new ThreadState[p];\n        for( size_t stack_size = MinStackSize; stack_size<=MaxStackSize; stack_size*=2 ) {\n            REMARK(\"launching %d threads\\n\",p);\n            for( int i=0; i<p; ++i )\n                rml::internal::thread_monitor::launch( ThreadState::routine, t+i, stack_size ); \n            for( int k=1000; k>=0; --k ) {\n                if( k%8==0 ) {\n                    // Wait for threads to wait.\n                    for( int i=0; i<p; ++i ) {\n                        unsigned count = 0;\n                        do {\n                            t[i].stamp = t[i].clock;\n                            rml::internal::thread_monitor::yield();\n                            if( ++count>=1000 ) {\n                                REPORT(\"Warning: thread %d not waiting\\n\",i);\n                                break;\n                            }\n                        } while( t[i].stamp!=t[i].clock );\n                    }\n                }\n                REMARK(\"notifying threads\\n\");\n                for( int i=0; i<p; ++i ) {\n                    // Change state visible to launched thread\n                    t[i].request = k;\n                    t[i].monitor.notify();\n                }\n                REMARK(\"waiting for threads to respond\\n\");\n                for( int i=0; i<p; ++i ) \n                    // Wait for thread to respond \n                    while( t[i].ack!=k ) \n                        rml::internal::thread_monitor::yield();\n            }\n        }\n        delete[] t;\n    }\n\n    return Harness::Done;\n}\n#endif /* __TBB_MIC_OFFLOAD */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/arena.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/global_control.h\" // thread_stack_size\n\n#include \"scheduler.h\"\n#include \"governor.h\"\n#include \"arena.h\"\n#include \"itt_notify.h\"\n#include \"semaphore.h\"\n#include \"tbb/internal/_flow_graph_impl.h\"\n\n#include <functional>\n\n#if __TBB_STATISTICS_STDOUT\n#include <cstdio>\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n// put it here in order to enable compiler to inline it into arena::process and nested_arena_entry\nvoid generic_scheduler::attach_arena( arena* a, size_t index, bool is_master ) {\n    __TBB_ASSERT( a->my_market == my_market, NULL );\n    my_arena = a;\n    my_arena_index = index;\n    my_arena_slot = a->my_slots + index;\n    attach_mailbox( affinity_id(index+1) );\n    if ( is_master && my_inbox.is_idle_state( true ) ) {\n        // Master enters an arena with its own task to be executed. It means that master is not\n        // going to enter stealing loop and take affinity tasks.\n        my_inbox.set_is_idle( false );\n    }\n#if __TBB_TASK_GROUP_CONTEXT\n    // Context to be used by root tasks by default (if the user has not specified one).\n    if( !is_master )\n        my_dummy_task->prefix().context = a->my_default_ctx;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n#if __TBB_TASK_PRIORITY\n    // In the current implementation master threads continue processing even when\n    // there are other masters with higher priority. Only TBB worker threads are\n    // redistributed between arenas based on the latters' priority. Thus master\n    // threads use arena's top priority as a reference point (in contrast to workers\n    // that use my_market->my_global_top_priority).\n    if( is_master ) {\n        my_ref_top_priority = &a->my_top_priority;\n        my_ref_reload_epoch = &a->my_reload_epoch;\n    }\n    my_local_reload_epoch = *my_ref_reload_epoch;\n    __TBB_ASSERT( !my_offloaded_tasks, NULL );\n#endif /* __TBB_TASK_PRIORITY */\n}\n\ninline static bool occupy_slot( generic_scheduler*& slot, generic_scheduler& s ) {\n    return !slot && as_atomic( slot ).compare_and_swap( &s, NULL ) == NULL;\n}\n\nsize_t arena::occupy_free_slot_in_range( generic_scheduler& s, size_t lower, size_t upper ) {\n    if ( lower >= upper ) return out_of_arena;\n    // Start search for an empty slot from the one we occupied the last time\n    size_t index = s.my_arena_index;\n    if ( index < lower || index >= upper ) index = s.my_random.get() % (upper - lower) + lower;\n    __TBB_ASSERT( index >= lower && index < upper, NULL );\n    // Find a free slot\n    for ( size_t i = index; i < upper; ++i )\n        if ( occupy_slot(my_slots[i].my_scheduler, s) ) return i;\n    for ( size_t i = lower; i < index; ++i )\n        if ( occupy_slot(my_slots[i].my_scheduler, s) ) return i;\n    return out_of_arena;\n}\n\ntemplate <bool as_worker>\nsize_t arena::occupy_free_slot( generic_scheduler& s ) {\n    // Firstly, masters try to occupy reserved slots\n    size_t index = as_worker ? out_of_arena : occupy_free_slot_in_range( s, 0, my_num_reserved_slots );\n    if ( index == out_of_arena ) {\n        // Secondly, all threads try to occupy all non-reserved slots\n        index = occupy_free_slot_in_range( s, my_num_reserved_slots, my_num_slots );\n        // Likely this arena is already saturated\n        if ( index == out_of_arena )\n            return out_of_arena;\n    }\n\n    ITT_NOTIFY(sync_acquired, my_slots + index);\n    atomic_update( my_limit, (unsigned)(index + 1), std::less<unsigned>() );\n    return index;\n}\n\nvoid arena::process( generic_scheduler& s ) {\n    __TBB_ASSERT( is_alive(my_guard), NULL );\n    __TBB_ASSERT( governor::is_set(&s), NULL );\n    __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );\n    __TBB_ASSERT( s.worker_outermost_level(), NULL );\n\n    __TBB_ASSERT( my_num_slots > 1, NULL );\n\n    size_t index = occupy_free_slot</*as_worker*/true>( s );\n    if ( index == out_of_arena )\n        goto quit;\n\n    __TBB_ASSERT( index >= my_num_reserved_slots, \"Workers cannot occupy reserved slots\" );\n    s.attach_arena( this, index, /*is_master*/false );\n\n#if !__TBB_FP_CONTEXT\n    my_cpu_ctl_env.set_env();\n#endif\n\n#if __TBB_ARENA_OBSERVER\n    __TBB_ASSERT( !s.my_last_local_observer, \"There cannot be notified local observers when entering arena\" );\n    my_observers.notify_entry_observers( s.my_last_local_observer, /*worker=*/true );\n#endif /* __TBB_ARENA_OBSERVER */\n\n    // Task pool can be marked as non-empty if the worker occupies the slot left by a master.\n    if ( s.my_arena_slot->task_pool != EmptyTaskPool ) {\n        __TBB_ASSERT( s.my_inbox.is_idle_state(false), NULL );\n        s.local_wait_for_all( *s.my_dummy_task, NULL );\n        __TBB_ASSERT( s.my_inbox.is_idle_state(true), NULL );\n    }\n\n    for ( ;; ) {\n        __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );\n        __TBB_ASSERT( s.worker_outermost_level(), NULL );\n        __TBB_ASSERT( is_alive(my_guard), NULL );\n        __TBB_ASSERT( s.is_quiescent_local_task_pool_reset(),\n                      \"Worker cannot leave arena while its task pool is not reset\" );\n        __TBB_ASSERT( s.my_arena_slot->task_pool == EmptyTaskPool, \"Empty task pool is not marked appropriately\" );\n        // This check prevents relinquishing more than necessary workers because\n        // of the non-atomicity of the decision making procedure\n        if ( num_workers_active() > my_num_workers_allotted\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n             || recall_by_mandatory_request()\n#endif\n            )\n            break;\n        // Try to steal a task.\n        // Passing reference count is technically unnecessary in this context,\n        // but omitting it here would add checks inside the function.\n        task* t = s.receive_or_steal_task( __TBB_ISOLATION_ARG( s.my_dummy_task->prefix().ref_count, no_isolation ) );\n        if (t) {\n            // A side effect of receive_or_steal_task is that my_innermost_running_task can be set.\n            // But for the outermost dispatch loop it has to be a dummy task.\n            s.my_innermost_running_task = s.my_dummy_task;\n            s.local_wait_for_all(*s.my_dummy_task,t);\n        }\n    }\n#if __TBB_ARENA_OBSERVER\n    my_observers.notify_exit_observers( s.my_last_local_observer, /*worker=*/true );\n    s.my_last_local_observer = NULL;\n#endif /* __TBB_ARENA_OBSERVER */\n#if __TBB_TASK_PRIORITY\n    if ( s.my_offloaded_tasks )\n        orphan_offloaded_tasks( s );\n#endif /* __TBB_TASK_PRIORITY */\n#if __TBB_STATISTICS\n    ++s.my_counters.arena_roundtrips;\n    *my_slots[index].my_counters += s.my_counters;\n    s.my_counters.reset();\n#endif /* __TBB_STATISTICS */\n    __TBB_store_with_release( my_slots[index].my_scheduler, (generic_scheduler*)NULL );\n    s.my_arena_slot = 0; // detached from slot\n    s.my_inbox.detach();\n    __TBB_ASSERT( s.my_inbox.is_idle_state(true), NULL );\n    __TBB_ASSERT( s.my_innermost_running_task == s.my_dummy_task, NULL );\n    __TBB_ASSERT( s.worker_outermost_level(), NULL );\n    __TBB_ASSERT( is_alive(my_guard), NULL );\nquit:\n    // In contrast to earlier versions of TBB (before 3.0 U5) now it is possible\n    // that arena may be temporarily left unpopulated by threads. See comments in\n    // arena::on_thread_leaving() for more details.\n    on_thread_leaving<ref_worker>();\n}\n\narena::arena ( market& m, unsigned num_slots, unsigned num_reserved_slots ) {\n    __TBB_ASSERT( !my_guard, \"improperly allocated arena?\" );\n    __TBB_ASSERT( sizeof(my_slots[0]) % NFS_GetLineSize()==0, \"arena::slot size not multiple of cache line size\" );\n    __TBB_ASSERT( (uintptr_t)this % NFS_GetLineSize()==0, \"arena misaligned\" );\n#if __TBB_TASK_PRIORITY\n    __TBB_ASSERT( !my_reload_epoch && !my_orphaned_tasks && !my_skipped_fifo_priority, \"New arena object is not zeroed\" );\n#endif /* __TBB_TASK_PRIORITY */\n    my_market = &m;\n    my_limit = 1;\n    // Two slots are mandatory: for the master, and for 1 worker (required to support starvation resistant tasks).\n    my_num_slots = num_arena_slots(num_slots);\n    my_num_reserved_slots = num_reserved_slots;\n    my_max_num_workers = num_slots-num_reserved_slots;\n    my_references = ref_external; // accounts for the master\n#if __TBB_TASK_PRIORITY\n    my_bottom_priority = my_top_priority = normalized_normal_priority;\n#endif /* __TBB_TASK_PRIORITY */\n    my_aba_epoch = m.my_arenas_aba_epoch;\n#if __TBB_ARENA_OBSERVER\n    my_observers.my_arena = this;\n#endif\n    __TBB_ASSERT ( my_max_num_workers <= my_num_slots, NULL );\n    // Construct slots. Mark internal synchronization elements for the tools.\n    for( unsigned i = 0; i < my_num_slots; ++i ) {\n        __TBB_ASSERT( !my_slots[i].my_scheduler && !my_slots[i].task_pool, NULL );\n        __TBB_ASSERT( !my_slots[i].task_pool_ptr, NULL );\n        __TBB_ASSERT( !my_slots[i].my_task_pool_size, NULL );\n        ITT_SYNC_CREATE(my_slots + i, SyncType_Scheduler, SyncObj_WorkerTaskPool);\n        mailbox(i+1).construct();\n        ITT_SYNC_CREATE(&mailbox(i+1), SyncType_Scheduler, SyncObj_Mailbox);\n        my_slots[i].hint_for_pop = i;\n#if __TBB_STATISTICS\n        my_slots[i].my_counters = new ( NFS_Allocate(1, sizeof(statistics_counters), NULL) ) statistics_counters;\n#endif /* __TBB_STATISTICS */\n    }\n    my_task_stream.initialize(my_num_slots);\n    ITT_SYNC_CREATE(&my_task_stream, SyncType_Scheduler, SyncObj_TaskStream);\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    my_concurrency_mode = cm_normal;\n#endif\n#if !__TBB_FP_CONTEXT\n    my_cpu_ctl_env.get_env();\n#endif\n}\n\narena& arena::allocate_arena( market& m, unsigned num_slots, unsigned num_reserved_slots ) {\n    __TBB_ASSERT( sizeof(base_type) + sizeof(arena_slot) == sizeof(arena), \"All arena data fields must go to arena_base\" );\n    __TBB_ASSERT( sizeof(base_type) % NFS_GetLineSize() == 0, \"arena slots area misaligned: wrong padding\" );\n    __TBB_ASSERT( sizeof(mail_outbox) == NFS_MaxLineSize, \"Mailbox padding is wrong\" );\n    size_t n = allocation_size(num_arena_slots(num_slots));\n    unsigned char* storage = (unsigned char*)NFS_Allocate( 1, n, NULL );\n    // Zero all slots to indicate that they are empty\n    memset( storage, 0, n );\n    return *new( storage + num_arena_slots(num_slots) * sizeof(mail_outbox) ) arena(m, num_slots, num_reserved_slots);\n}\n\nvoid arena::free_arena () {\n    __TBB_ASSERT( is_alive(my_guard), NULL );\n    __TBB_ASSERT( !my_references, \"There are threads in the dying arena\" );\n    __TBB_ASSERT( !my_num_workers_requested && !my_num_workers_allotted, \"Dying arena requests workers\" );\n    __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, \"Inconsistent state of a dying arena\" );\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    __TBB_ASSERT( my_concurrency_mode != cm_enforced_global, NULL );\n#endif\n#if !__TBB_STATISTICS_EARLY_DUMP\n    GATHER_STATISTIC( dump_arena_statistics() );\n#endif\n    poison_value( my_guard );\n    intptr_t drained = 0;\n    for ( unsigned i = 0; i < my_num_slots; ++i ) {\n        __TBB_ASSERT( !my_slots[i].my_scheduler, \"arena slot is not empty\" );\n        // TODO: understand the assertion and modify\n        // __TBB_ASSERT( my_slots[i].task_pool == EmptyTaskPool, NULL );\n        __TBB_ASSERT( my_slots[i].head == my_slots[i].tail, NULL ); // TODO: replace by is_quiescent_local_task_pool_empty\n        my_slots[i].free_task_pool();\n#if __TBB_STATISTICS\n        NFS_Free( my_slots[i].my_counters );\n#endif /* __TBB_STATISTICS */\n        drained += mailbox(i+1).drain();\n    }\n    __TBB_ASSERT( my_task_stream.drain()==0, \"Not all enqueued tasks were executed\");\n#if __TBB_COUNT_TASK_NODES\n    my_market->update_task_node_count( -drained );\n#endif /* __TBB_COUNT_TASK_NODES */\n    // remove an internal reference\n    my_market->release( /*is_public=*/false, /*blocking_terminate=*/false );\n#if __TBB_TASK_GROUP_CONTEXT\n    __TBB_ASSERT( my_default_ctx, \"Master thread never entered the arena?\" );\n    my_default_ctx->~task_group_context();\n    NFS_Free(my_default_ctx);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n#if __TBB_ARENA_OBSERVER\n    if ( !my_observers.empty() )\n        my_observers.clear();\n#endif /* __TBB_ARENA_OBSERVER */\n    void* storage  = &mailbox(my_num_slots);\n    __TBB_ASSERT( my_references == 0, NULL );\n    __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, NULL );\n    this->~arena();\n#if TBB_USE_ASSERT > 1\n    memset( storage, 0, allocation_size(my_num_slots) );\n#endif /* TBB_USE_ASSERT */\n    NFS_Free( storage );\n}\n\n#if __TBB_STATISTICS\nvoid arena::dump_arena_statistics () {\n    statistics_counters total;\n    for( unsigned i = 0; i < my_num_slots; ++i ) {\n#if __TBB_STATISTICS_EARLY_DUMP\n        generic_scheduler* s = my_slots[i].my_scheduler;\n        if ( s )\n            *my_slots[i].my_counters += s->my_counters;\n#else\n        __TBB_ASSERT( !my_slots[i].my_scheduler, NULL );\n#endif\n        if ( i != 0 ) {\n            total += *my_slots[i].my_counters;\n            dump_statistics( *my_slots[i].my_counters, i );\n        }\n    }\n    dump_statistics( *my_slots[0].my_counters, 0 );\n#if __TBB_STATISTICS_STDOUT\n#if !__TBB_STATISTICS_TOTALS_ONLY\n    printf( \"----------------------------------------------\\n\" );\n#endif\n    dump_statistics( total, workers_counters_total );\n    total += *my_slots[0].my_counters;\n    dump_statistics( total, arena_counters_total );\n#if !__TBB_STATISTICS_TOTALS_ONLY\n    printf( \"==============================================\\n\" );\n#endif\n#endif /* __TBB_STATISTICS_STDOUT */\n}\n#endif /* __TBB_STATISTICS */\n\n#if __TBB_TASK_PRIORITY\n// The method inspects a scheduler to determine:\n// 1. if it has tasks that can be retrieved and executed (via the return value);\n// 2. if it has any tasks at all, including those of lower priority (via tasks_present);\n// 3. if it is able to work with enqueued tasks (via dequeuing_possible).\ninline bool arena::may_have_tasks ( generic_scheduler* s, bool& tasks_present, bool& dequeuing_possible ) {\n    if ( !s || s->my_arena != this )\n        return false;\n    dequeuing_possible |= s->worker_outermost_level();\n    if ( s->my_pool_reshuffling_pending ) {\n        // This primary task pool is nonempty and may contain tasks at the current\n        // priority level. Its owner is winnowing lower priority tasks at the moment.\n        tasks_present = true;\n        return true;\n    }\n    if ( s->my_offloaded_tasks ) {\n        tasks_present = true;\n        if ( s->my_local_reload_epoch < *s->my_ref_reload_epoch ) {\n            // This scheduler's offload area is nonempty and may contain tasks at the\n            // current priority level.\n            return true;\n        }\n    }\n    return false;\n}\n\nvoid arena::orphan_offloaded_tasks(generic_scheduler& s) {\n    __TBB_ASSERT( s.my_offloaded_tasks, NULL );\n    GATHER_STATISTIC( ++s.my_counters.prio_orphanings );\n    ++my_abandonment_epoch;\n    __TBB_ASSERT( s.my_offloaded_task_list_tail_link && !*s.my_offloaded_task_list_tail_link, NULL );\n    task* orphans;\n    do {\n        orphans = const_cast<task*>(my_orphaned_tasks);\n        *s.my_offloaded_task_list_tail_link = orphans;\n    } while ( as_atomic(my_orphaned_tasks).compare_and_swap(s.my_offloaded_tasks, orphans) != orphans );\n    s.my_offloaded_tasks = NULL;\n#if TBB_USE_ASSERT\n    s.my_offloaded_task_list_tail_link = NULL;\n#endif /* TBB_USE_ASSERT */\n}\n#endif /* __TBB_TASK_PRIORITY */\n\nbool arena::has_enqueued_tasks() {\n    // Look for enqueued tasks at all priority levels\n    for ( int p = 0; p < num_priority_levels; ++p )\n        if ( !my_task_stream.empty(p) )\n            return true;\n    return false;\n}\n\nvoid arena::restore_priority_if_need() {\n    // Check for the presence of enqueued tasks \"lost\" on some of\n    // priority levels because updating arena priority and switching\n    // arena into \"populated\" (FULL) state happen non-atomically.\n    // Imposing atomicity would require task::enqueue() to use a lock,\n    // which is unacceptable.\n    if ( has_enqueued_tasks() ) {\n        advertise_new_work<work_enqueued>();\n#if __TBB_TASK_PRIORITY\n        // update_arena_priority() expects non-zero arena::my_num_workers_requested,\n        // so must be called after advertise_new_work<work_enqueued>()\n        for ( int p = 0; p < num_priority_levels; ++p )\n            if ( !my_task_stream.empty(p) ) {\n                if ( p < my_bottom_priority || p > my_top_priority )\n                    my_market->update_arena_priority(*this, p);\n            }\n#endif\n    }\n}\n\nbool arena::is_out_of_work() {\n    // TODO: rework it to return at least a hint about where a task was found; better if the task itself.\n    for(;;) {\n        pool_state_t snapshot = my_pool_state;\n        switch( snapshot ) {\n            case SNAPSHOT_EMPTY:\n                return true;\n            case SNAPSHOT_FULL: {\n                // Use unique id for \"busy\" in order to avoid ABA problems.\n                const pool_state_t busy = pool_state_t(&busy);\n                // Request permission to take snapshot\n                if( my_pool_state.compare_and_swap( busy, SNAPSHOT_FULL )==SNAPSHOT_FULL ) {\n                    // Got permission. Take the snapshot.\n                    // NOTE: This is not a lock, as the state can be set to FULL at\n                    //       any moment by a thread that spawns/enqueues new task.\n                    size_t n = my_limit;\n                    // Make local copies of volatile parameters. Their change during\n                    // snapshot taking procedure invalidates the attempt, and returns\n                    // this thread into the dispatch loop.\n#if __TBB_TASK_PRIORITY\n                    uintptr_t reload_epoch = __TBB_load_with_acquire( my_reload_epoch );\n                    intptr_t top_priority = my_top_priority;\n                    // Inspect primary task pools first\n#endif /* __TBB_TASK_PRIORITY */\n                    size_t k;\n                    for( k=0; k<n; ++k ) {\n                        if( my_slots[k].task_pool != EmptyTaskPool &&\n                            __TBB_load_relaxed(my_slots[k].head) < __TBB_load_relaxed(my_slots[k].tail) )\n                        {\n                            // k-th primary task pool is nonempty and does contain tasks.\n                            break;\n                        }\n                        if( my_pool_state!=busy )\n                            return false; // the work was published\n                    }\n                    __TBB_ASSERT( k <= n, NULL );\n                    bool work_absent = k == n;\n#if __TBB_TASK_PRIORITY\n                    // Variable tasks_present indicates presence of tasks at any priority\n                    // level, while work_absent refers only to the current priority.\n                    bool tasks_present = !work_absent || my_orphaned_tasks;\n                    bool dequeuing_possible = false;\n                    if ( work_absent ) {\n                        // Check for the possibility that recent priority changes\n                        // brought some tasks to the current priority level\n\n                        uintptr_t abandonment_epoch = my_abandonment_epoch;\n                        // Master thread's scheduler needs special handling as it\n                        // may be destroyed at any moment (workers' schedulers are\n                        // guaranteed to be alive while at least one thread is in arena).\n                        // The lock below excludes concurrency with task group state change\n                        // propagation and guarantees lifetime of the master thread.\n                        the_context_state_propagation_mutex.lock();\n                        work_absent = !may_have_tasks( my_slots[0].my_scheduler, tasks_present, dequeuing_possible );\n                        the_context_state_propagation_mutex.unlock();\n                        // The following loop is subject to data races. While k-th slot's\n                        // scheduler is being examined, corresponding worker can either\n                        // leave to RML or migrate to another arena.\n                        // But the races are not prevented because all of them are benign.\n                        // First, the code relies on the fact that worker thread's scheduler\n                        // object persists until the whole library is deinitialized.\n                        // Second, in the worst case the races can only cause another\n                        // round of stealing attempts to be undertaken. Introducing complex\n                        // synchronization into this coldest part of the scheduler's control\n                        // flow does not seem to make sense because it both is unlikely to\n                        // ever have any observable performance effect, and will require\n                        // additional synchronization code on the hotter paths.\n                        for( k = 1; work_absent && k < n; ++k ) {\n                            if( my_pool_state!=busy )\n                                return false; // the work was published\n                            work_absent = !may_have_tasks( my_slots[k].my_scheduler, tasks_present, dequeuing_possible );\n                        }\n                        // Preclude premature switching arena off because of a race in the previous loop.\n                        work_absent = work_absent\n                                      && !__TBB_load_with_acquire(my_orphaned_tasks)\n                                      && abandonment_epoch == my_abandonment_epoch;\n                    }\n#endif /* __TBB_TASK_PRIORITY */\n                    // Test and test-and-set.\n                    if( my_pool_state==busy ) {\n#if __TBB_TASK_PRIORITY\n                        bool no_fifo_tasks = my_task_stream.empty(top_priority);\n                        work_absent = work_absent && (!dequeuing_possible || no_fifo_tasks)\n                                      && top_priority == my_top_priority && reload_epoch == my_reload_epoch;\n#else\n                        bool no_fifo_tasks = my_task_stream.empty(0);\n                        work_absent = work_absent && no_fifo_tasks;\n#endif /* __TBB_TASK_PRIORITY */\n                        if( work_absent ) {\n#if __TBB_TASK_PRIORITY\n                            if ( top_priority > my_bottom_priority ) {\n                                if ( my_market->lower_arena_priority(*this, top_priority - 1, reload_epoch)\n                                     && !my_task_stream.empty(top_priority) )\n                                {\n                                    atomic_update( my_skipped_fifo_priority, top_priority, std::less<intptr_t>());\n                                }\n                            }\n                            else if ( !tasks_present && !my_orphaned_tasks && no_fifo_tasks ) {\n#endif /* __TBB_TASK_PRIORITY */\n                                // save current demand value before setting SNAPSHOT_EMPTY,\n                                // to avoid race with advertise_new_work.\n                                int current_demand = (int)my_max_num_workers;\n                                if( my_pool_state.compare_and_swap( SNAPSHOT_EMPTY, busy )==busy ) {\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n                                    if( my_concurrency_mode==cm_enforced_global  ) {\n                                        // adjust_demand() called inside, if needed\n                                        my_market->mandatory_concurrency_disable( this );\n                                    } else\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n                                    {\n                                        // This thread transitioned pool to empty state, and thus is\n                                        // responsible for telling the market that there is no work to do.\n                                        my_market->adjust_demand( *this, -current_demand );\n                                    }\n                                    restore_priority_if_need();\n                                    return true;\n                                }\n                                return false;\n#if __TBB_TASK_PRIORITY\n                            }\n#endif /* __TBB_TASK_PRIORITY */\n                        }\n                        // Undo previous transition SNAPSHOT_FULL-->busy, unless another thread undid it.\n                        my_pool_state.compare_and_swap( SNAPSHOT_FULL, busy );\n                    }\n                }\n                return false;\n            }\n            default:\n                // Another thread is taking a snapshot.\n                return false;\n        }\n    }\n}\n\n#if __TBB_COUNT_TASK_NODES\nintptr_t arena::workers_task_node_count() {\n    intptr_t result = 0;\n    for( unsigned i = 1; i < my_num_slots; ++i ) {\n        generic_scheduler* s = my_slots[i].my_scheduler;\n        if( s )\n            result += s->my_task_node_count;\n    }\n    return result;\n}\n#endif /* __TBB_COUNT_TASK_NODES */\n\nvoid arena::enqueue_task( task& t, intptr_t prio, FastRandom &random )\n{\n#if __TBB_RECYCLE_TO_ENQUEUE\n    __TBB_ASSERT( t.state()==task::allocated || t.state()==task::to_enqueue, \"attempt to enqueue task with inappropriate state\" );\n#else\n    __TBB_ASSERT( t.state()==task::allocated, \"attempt to enqueue task that is not in 'allocated' state\" );\n#endif\n    t.prefix().state = task::ready;\n    t.prefix().extra_state |= es_task_enqueued; // enqueued task marker\n\n#if TBB_USE_ASSERT\n    if( task* parent = t.parent() ) {\n        internal::reference_count ref_count = parent->prefix().ref_count;\n        __TBB_ASSERT( ref_count!=0, \"attempt to enqueue task whose parent has a ref_count==0 (forgot to set_ref_count?)\" );\n        __TBB_ASSERT( ref_count>0, \"attempt to enqueue task whose parent has a ref_count<0\" );\n        parent->prefix().extra_state |= es_ref_count_active;\n    }\n    __TBB_ASSERT(t.prefix().affinity==affinity_id(0), \"affinity is ignored for enqueued tasks\");\n#endif /* TBB_USE_ASSERT */\n\n    ITT_NOTIFY(sync_releasing, &my_task_stream);\n#if __TBB_TASK_PRIORITY\n    intptr_t p = prio ? normalize_priority(priority_t(prio)) : normalized_normal_priority;\n    assert_priority_valid(p);\n    my_task_stream.push( &t, p, random );\n    if ( p != my_top_priority )\n        my_market->update_arena_priority( *this, p );\n#else /* !__TBB_TASK_PRIORITY */\n    __TBB_ASSERT_EX(prio == 0, \"the library is not configured to respect the task priority\");\n    my_task_stream.push( &t, 0, random );\n#endif /* !__TBB_TASK_PRIORITY */\n    advertise_new_work<work_enqueued>();\n#if __TBB_TASK_PRIORITY\n    if ( p != my_top_priority )\n        my_market->update_arena_priority( *this, p );\n#endif /* __TBB_TASK_PRIORITY */\n}\n\nclass nested_arena_context : no_copy {\npublic:\n    nested_arena_context(generic_scheduler *s, arena* a, size_t slot_index, bool type, bool same)\n        : my_scheduler(*s), my_orig_ctx(NULL), same_arena(same) {\n        if (same_arena) {\n            my_orig_state.my_properties = my_scheduler.my_properties;\n            my_orig_state.my_innermost_running_task = my_scheduler.my_innermost_running_task;\n            mimic_outermost_level(a, type);\n        } else {\n            my_orig_state = *s;\n            mimic_outermost_level(a, type);\n            s->nested_arena_entry(a, slot_index);\n        }\n    }\n    ~nested_arena_context() {\n#if __TBB_TASK_GROUP_CONTEXT\n        my_scheduler.my_dummy_task->prefix().context = my_orig_ctx; // restore context of dummy task\n#endif\n        if (same_arena) {\n            my_scheduler.my_properties = my_orig_state.my_properties;\n            my_scheduler.my_innermost_running_task = my_orig_state.my_innermost_running_task;\n        } else {\n            my_scheduler.nested_arena_exit();\n            static_cast<scheduler_state&>(my_scheduler) = my_orig_state; // restore arena settings \n#if __TBB_TASK_PRIORITY\n            my_scheduler.my_local_reload_epoch = *my_orig_state.my_ref_reload_epoch;\n#endif\n            governor::assume_scheduler(&my_scheduler);\n        }\n    }\n\nprivate:\n    generic_scheduler &my_scheduler;\n    scheduler_state my_orig_state;\n    task_group_context *my_orig_ctx;\n    const bool same_arena;\n\n    void mimic_outermost_level(arena* a, bool type) {\n        my_scheduler.my_properties.outermost = true;\n        my_scheduler.my_properties.type = type;\n        my_scheduler.my_innermost_running_task = my_scheduler.my_dummy_task;\n#if __TBB_TASK_GROUP_CONTEXT\n        // Save dummy's context and replace it by arena's context\n        my_orig_ctx = my_scheduler.my_dummy_task->prefix().context;\n        my_scheduler.my_dummy_task->prefix().context = a->my_default_ctx;\n#endif\n    }\n};\n\nvoid generic_scheduler::nested_arena_entry(arena* a, size_t slot_index) {\n    __TBB_ASSERT( is_alive(a->my_guard), NULL );\n    __TBB_ASSERT( a!=my_arena, NULL);\n\n    // overwrite arena settings\n#if __TBB_TASK_PRIORITY\n    if ( my_offloaded_tasks )\n        my_arena->orphan_offloaded_tasks( *this );\n    my_offloaded_tasks = NULL;\n#endif /* __TBB_TASK_PRIORITY */\n    attach_arena( a, slot_index, /*is_master*/true );\n    __TBB_ASSERT( my_arena == a, NULL );\n    governor::assume_scheduler( this );\n    // TODO? ITT_NOTIFY(sync_acquired, a->my_slots + index);\n    // TODO: it requires market to have P workers (not P-1)\n    // TODO: a preempted worker should be excluded from assignment to other arenas e.g. my_slack--\n    if( !is_worker() && slot_index >= my_arena->my_num_reserved_slots )\n        my_arena->my_market->adjust_demand(*my_arena, -1);\n#if __TBB_ARENA_OBSERVER\n    my_last_local_observer = 0; // TODO: try optimize number of calls\n    my_arena->my_observers.notify_entry_observers( my_last_local_observer, /*worker=*/false );\n#endif\n}\n\nvoid generic_scheduler::nested_arena_exit() {\n#if __TBB_ARENA_OBSERVER\n    my_arena->my_observers.notify_exit_observers( my_last_local_observer, /*worker=*/false );\n#endif /* __TBB_ARENA_OBSERVER */\n#if __TBB_TASK_PRIORITY\n    if ( my_offloaded_tasks )\n        my_arena->orphan_offloaded_tasks( *this );\n#endif\n    if( !is_worker() && my_arena_index >= my_arena->my_num_reserved_slots )\n        my_arena->my_market->adjust_demand(*my_arena, 1);\n    // Free the master slot.\n    __TBB_ASSERT(my_arena->my_slots[my_arena_index].my_scheduler, \"A slot is already empty\");\n    __TBB_store_with_release(my_arena->my_slots[my_arena_index].my_scheduler, (generic_scheduler*)NULL);\n    my_arena->my_exit_monitors.notify_one(); // do not relax!\n}\n\nvoid generic_scheduler::wait_until_empty() {\n    my_dummy_task->prefix().ref_count++; // prevents exit from local_wait_for_all when local work is done enforcing the stealing\n    while( my_arena->my_pool_state != arena::SNAPSHOT_EMPTY )\n        local_wait_for_all(*my_dummy_task, NULL);\n    my_dummy_task->prefix().ref_count--;\n}\n\n} // namespace internal\n} // namespace tbb\n\n#include \"scheduler_utility.h\"\n#include \"tbb/task_arena.h\" // task_arena_base\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\nvoid task_arena_base::internal_initialize( ) {\n    governor::one_time_init();\n    if( my_max_concurrency < 1 )\n        my_max_concurrency = (int)governor::default_num_threads();\n    __TBB_ASSERT( my_master_slots <= (unsigned)my_max_concurrency, \"Number of slots reserved for master should not exceed arena concurrency\");\n    arena* new_arena = market::create_arena( my_max_concurrency, my_master_slots, 0 );\n    // add an internal market reference; a public reference was added in create_arena\n    market &m = market::global_market( /*is_public=*/false );\n    // allocate default context for task_arena\n#if __TBB_TASK_GROUP_CONTEXT\n    new_arena->my_default_ctx = new ( NFS_Allocate(1, sizeof(task_group_context), NULL) )\n            task_group_context( task_group_context::isolated, task_group_context::default_traits );\n#if __TBB_FP_CONTEXT\n    new_arena->my_default_ctx->capture_fp_settings();\n#endif\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    // threads might race to initialize the arena\n    if(as_atomic(my_arena).compare_and_swap(new_arena, NULL) != NULL) {\n        __TBB_ASSERT(my_arena, NULL); // another thread won the race\n        // release public market reference\n        m.release( /*is_public=*/true, /*blocking_terminate=*/false );\n        new_arena->on_thread_leaving<arena::ref_external>(); // destroy unneeded arena\n#if __TBB_TASK_GROUP_CONTEXT\n        spin_wait_while_eq(my_context, (task_group_context*)NULL);\n    } else {\n        new_arena->my_default_ctx->my_version_and_traits |= my_version_and_traits & exact_exception_flag;\n        as_atomic(my_context) = new_arena->my_default_ctx;\n#endif\n    }\n    // TODO: should it trigger automatic initialization of this thread?\n    governor::local_scheduler_weak();\n}\n\nvoid task_arena_base::internal_terminate( ) {\n    if( my_arena ) {// task_arena was initialized\n        my_arena->my_market->release( /*is_public=*/true, /*blocking_terminate=*/false );\n        my_arena->on_thread_leaving<arena::ref_external>();\n        my_arena = 0;\n#if __TBB_TASK_GROUP_CONTEXT\n        my_context = 0;\n#endif\n    }\n}\n\nvoid task_arena_base::internal_attach( ) {\n    __TBB_ASSERT(!my_arena, NULL);\n    generic_scheduler* s = governor::local_scheduler_if_initialized();\n    if( s && s->my_arena ) {\n        // There is an active arena to attach to.\n        // It's still used by s, so won't be destroyed right away.\n        my_arena = s->my_arena;\n        __TBB_ASSERT( my_arena->my_references > 0, NULL );\n        my_arena->my_references += arena::ref_external;\n#if __TBB_TASK_GROUP_CONTEXT\n        my_context = my_arena->my_default_ctx;\n        my_version_and_traits |= my_context->my_version_and_traits & exact_exception_flag;\n#endif\n        my_master_slots = my_arena->my_num_reserved_slots;\n        my_max_concurrency = my_master_slots + my_arena->my_max_num_workers;\n        __TBB_ASSERT(arena::num_arena_slots(my_max_concurrency)==my_arena->my_num_slots, NULL);\n        // increases market's ref count for task_arena\n        market::global_market( /*is_public=*/true );\n    }\n}\n\nvoid task_arena_base::internal_enqueue( task& t, intptr_t prio ) const {\n    __TBB_ASSERT(my_arena, NULL);\n    generic_scheduler* s = governor::local_scheduler_if_initialized();\n    __TBB_ASSERT(s, \"Scheduler is not initialized\"); // we allocated a task so can expect the scheduler\n#if __TBB_TASK_GROUP_CONTEXT\n    __TBB_ASSERT(my_arena->my_default_ctx == t.prefix().context, NULL);\n    __TBB_ASSERT(!my_arena->my_default_ctx->is_group_execution_cancelled(), // TODO: any better idea?\n                 \"The task will not be executed because default task_group_context of task_arena is cancelled. Has previously enqueued task thrown an exception?\");\n#endif\n    my_arena->enqueue_task( t, prio, s->my_random );\n}\n\nclass delegated_task : public task {\n    internal::delegate_base & my_delegate;\n    concurrent_monitor & my_monitor;\n    task * my_root;\n    task* execute() __TBB_override {\n        generic_scheduler& s = *(generic_scheduler*)prefix().owner;\n        __TBB_ASSERT(s.outermost_level(), \"expected to be enqueued and received on the outermost level\");\n        struct outermost_context : internal::no_copy {\n            delegated_task * t;\n            generic_scheduler & s;\n            task * orig_dummy;\n            task_group_context * orig_ctx;\n            scheduler_properties orig_props;\n            outermost_context(delegated_task *_t, generic_scheduler &_s) \n                : t(_t), s(_s), orig_dummy(s.my_dummy_task), orig_props(s.my_properties) {\n                __TBB_ASSERT(s.my_innermost_running_task == t, NULL);\n#if __TBB_TASK_GROUP_CONTEXT\n                orig_ctx = t->prefix().context;\n                t->prefix().context = s.my_arena->my_default_ctx;\n#endif\n                // Mimics outermost master\n                s.my_dummy_task = t;\n                s.my_properties.type = scheduler_properties::master;\n            }\n            ~outermost_context() {\n#if __TBB_TASK_GROUP_CONTEXT\n                // Restore context for sake of registering potential exception\n                t->prefix().context = orig_ctx;\n#endif\n                s.my_properties = orig_props;\n                s.my_dummy_task = orig_dummy;\n            }\n        } scope(this, s);\n        my_delegate();\n        return NULL;\n    }\n    ~delegated_task() {\n        // potential exception was already registered. It must happen before the notification\n        __TBB_ASSERT(my_root->ref_count()==2, NULL);\n        __TBB_store_with_release(my_root->prefix().ref_count, 1); // must precede the wakeup\n        my_monitor.notify(*this); // do not relax, it needs a fence!\n    }\npublic:\n    delegated_task( internal::delegate_base & d, concurrent_monitor & s, task * t )\n        : my_delegate(d), my_monitor(s), my_root(t) {}\n    // predicate for concurrent_monitor notification\n    bool operator()(uintptr_t ctx) const { return (void*)ctx == (void*)&my_delegate; }\n};\n\nvoid task_arena_base::internal_execute(internal::delegate_base& d) const {\n    __TBB_ASSERT(my_arena, NULL);\n    generic_scheduler* s = governor::local_scheduler_weak();\n    __TBB_ASSERT(s, \"Scheduler is not initialized\");\n\n    bool same_arena = s->my_arena == my_arena;\n    size_t index1 = s->my_arena_index;\n    if (!same_arena) {\n        index1 = my_arena->occupy_free_slot</* as_worker*/false>(*s);\n        if (index1 == arena::out_of_arena) {\n\n#if __TBB_USE_OPTIONAL_RTTI\n            // Workaround for the bug inside graph. If the thread can not occupy arena slot during task_arena::execute()\n            // and all aggregator operations depend on this task completion (all other threads are inside arena already)\n            // deadlock appears, because enqueued task will never enter arena.\n            // Workaround: check if the task came from graph via RTTI (casting to graph::spawn_functor)\n            // and enqueue this task with non-blocking internal_enqueue method.\n            // TODO: have to change behaviour later in next GOLD release (maybe to add new library entry point - try_execute)\n            typedef tbb::flow::interface10::graph::spawn_functor graph_funct;\n            internal::delegated_function< graph_funct, void >* deleg_funct =\n                    dynamic_cast< internal::delegated_function< graph_funct, void>* >(&d);\n\n            if (deleg_funct) {\n                internal_enqueue(*new(task::allocate_root(*my_context)) \n                    internal::function_task< internal::strip< graph_funct >::type >\n                        (internal::forward< graph_funct >(deleg_funct->my_func)), 0);\n                return;\n            } else {\n#endif\n                concurrent_monitor::thread_context waiter;\n#if __TBB_TASK_GROUP_CONTEXT\n                task_group_context exec_context(task_group_context::isolated, my_version_and_traits & exact_exception_flag);\n#if __TBB_FP_CONTEXT\n                exec_context.copy_fp_settings(*my_context);\n#endif\n#endif\n                auto_empty_task root(__TBB_CONTEXT_ARG(s, &exec_context));\n                root.prefix().ref_count = 2;\n                my_arena->enqueue_task(*new(task::allocate_root(__TBB_CONTEXT_ARG1(exec_context)))\n                    delegated_task(d, my_arena->my_exit_monitors, &root),\n                    0, s->my_random); // TODO: priority?\n                size_t index2 = arena::out_of_arena;\n                do {\n                    my_arena->my_exit_monitors.prepare_wait(waiter, (uintptr_t)&d);\n                    if (__TBB_load_with_acquire(root.prefix().ref_count) < 2) {\n                        my_arena->my_exit_monitors.cancel_wait(waiter);\n                        break;\n                    }\n                    index2 = my_arena->occupy_free_slot</*as_worker*/false>(*s);\n                    if (index2 != arena::out_of_arena) {\n                        my_arena->my_exit_monitors.cancel_wait(waiter);\n                        nested_arena_context scope(s, my_arena, index2, scheduler_properties::master, same_arena);\n                        s->local_wait_for_all(root, NULL);\n#if TBB_USE_EXCEPTIONS\n                        __TBB_ASSERT(!exec_context.my_exception, NULL); // exception can be thrown above, not deferred\n#endif\n                        __TBB_ASSERT(root.prefix().ref_count == 0, NULL);\n                        break;\n                    }\n                    my_arena->my_exit_monitors.commit_wait(waiter);\n                } while (__TBB_load_with_acquire(root.prefix().ref_count) == 2);\n                if (index2 == arena::out_of_arena) {\n                    // notify a waiting thread even if this thread did not enter arena,\n                    // in case it was woken by a leaving thread but did not need to enter\n                    my_arena->my_exit_monitors.notify_one(); // do not relax!\n                }\n#if TBB_USE_EXCEPTIONS\n                // process possible exception\n                if (task_group_context::exception_container_type *pe = exec_context.my_exception)\n                    TbbRethrowException(pe);\n#endif\n                return;\n#if __TBB_USE_OPTIONAL_RTTI\n            } // if task came from graph\n#endif\n        } // if (index1 == arena::out_of_arena)\n    } // if (!same_arena)\n\n    context_guard_helper</*report_tasks=*/false> context_guard;\n    context_guard.set_ctx(__TBB_CONTEXT_ARG1(my_context));\n#if TBB_USE_EXCEPTIONS\n    try {\n#endif\n        //TODO: replace dummy tasks for workers as well to avoid using of the_dummy_context\n        nested_arena_context scope(s, my_arena, index1, scheduler_properties::master, same_arena);\n        d();\n#if TBB_USE_EXCEPTIONS\n    }\n    catch (...) {\n        context_guard.restore_default(); // TODO: is it needed on Windows?\n        if (my_version_and_traits & exact_exception_flag) throw;\n        else {\n            task_group_context exception_container(task_group_context::isolated,\n                task_group_context::default_traits & ~task_group_context::exact_exception);\n            exception_container.register_pending_exception();\n            __TBB_ASSERT(exception_container.my_exception, NULL);\n            TbbRethrowException(exception_container.my_exception);\n        }\n    }\n#endif\n}\n\n// this wait task is a temporary approach to wait for arena emptiness for masters without slots\n// TODO: it will be rather reworked for one source of notification from is_out_of_work\nclass wait_task : public task {\n    binary_semaphore & my_signal;\n    task* execute() __TBB_override {\n        generic_scheduler* s = governor::local_scheduler_if_initialized();\n        __TBB_ASSERT( s, NULL );\n        __TBB_ASSERT( s->outermost_level(), \"The enqueued task can be processed only on outermost level\" );\n        if ( s->is_worker() ) {\n            __TBB_ASSERT( s->my_innermost_running_task == this, NULL );\n            // Mimic worker on outermost level to run remaining tasks\n            s->my_innermost_running_task = s->my_dummy_task;\n            s->local_wait_for_all( *s->my_dummy_task, NULL );\n            s->my_innermost_running_task = this;\n        } else s->my_arena->is_out_of_work(); // avoids starvation of internal_wait: issuing this task makes arena full\n        my_signal.V();\n        return NULL;\n    }\npublic:\n    wait_task ( binary_semaphore & sema ) : my_signal(sema) {}\n};\n\nvoid task_arena_base::internal_wait() const {\n    __TBB_ASSERT(my_arena, NULL);\n    generic_scheduler* s = governor::local_scheduler_weak();\n    __TBB_ASSERT(s, \"Scheduler is not initialized\");\n    __TBB_ASSERT(s->my_arena != my_arena || s->my_arena_index == 0, \"task_arena::wait_until_empty() is not supported within a worker context\" );\n    if( s->my_arena == my_arena ) {\n        //unsupported, but try do something for outermost master\n        __TBB_ASSERT(s->master_outermost_level(), \"unsupported\");\n        if( !s->my_arena_index )\n            while( my_arena->num_workers_active() )\n                s->wait_until_empty();\n    } else for(;;) {\n        while( my_arena->my_pool_state != arena::SNAPSHOT_EMPTY ) {\n            if( !__TBB_load_with_acquire(my_arena->my_slots[0].my_scheduler) // TODO TEMP: one master, make more masters\n                && as_atomic(my_arena->my_slots[0].my_scheduler).compare_and_swap(s, NULL) == NULL ) {\n                nested_arena_context a(s, my_arena, 0, scheduler_properties::worker, false);\n                s->wait_until_empty();\n            } else {\n                binary_semaphore waiter; // TODO: replace by a single event notification from is_out_of_work\n                internal_enqueue( *new( task::allocate_root(__TBB_CONTEXT_ARG1(*my_context)) ) wait_task(waiter), 0 ); // TODO: priority?\n                waiter.P(); // TODO: concurrent_monitor\n            }\n        }\n        if( !my_arena->num_workers_active() && !my_arena->my_slots[0].my_scheduler) // no activity\n            break; // spin until workers active but avoid spinning in a worker\n        __TBB_Yield(); // wait until workers and master leave\n    }\n}\n\n/*static*/ int task_arena_base::internal_current_slot() {\n    generic_scheduler* s = governor::local_scheduler_if_initialized();\n    return s? int(s->my_arena_index) : -1;\n}\n\n#if __TBB_TASK_ISOLATION\nclass isolation_guard : tbb::internal::no_copy {\n    isolation_tag &guarded;\n    isolation_tag previous_value;\npublic:\n    isolation_guard( isolation_tag &isolation ) : guarded( isolation ), previous_value( isolation ) {}\n    ~isolation_guard() {\n        guarded = previous_value;\n    }\n};\n\nvoid isolate_within_arena( delegate_base& d, intptr_t reserved ) {\n    __TBB_ASSERT( reserved == 0, NULL );\n    // TODO: Decide what to do if the scheduler is not initialized. Is there a use case for it?\n    generic_scheduler* s = governor::local_scheduler_weak();\n    __TBB_ASSERT( s, \"this_task_arena::isolate() needs an initialized scheduler\" );\n    // Theoretically, we can keep the current isolation in the scheduler; however, it makes sense to store it in innermost\n    // running task because it can in principle be queried via task::self().\n    isolation_tag& current_isolation = s->my_innermost_running_task->prefix().isolation;\n    // We temporarily change the isolation tag of the currently running task. It will be restored in the destructor of the guard.\n    isolation_guard guard( current_isolation );\n    current_isolation = reinterpret_cast<isolation_tag>(&d);\n    d();\n}\n#endif /* __TBB_TASK_ISOLATION */\n\nint task_arena_base::internal_max_concurrency(const task_arena *ta) {\n    arena* a = NULL;\n    if( ta ) // for special cases of ta->max_concurrency()\n        a = ta->my_arena;\n    else if( generic_scheduler* s = governor::local_scheduler_if_initialized() )\n        a = s->my_arena; // the current arena if any\n\n    if( a ) { // Get parameters from the arena\n        __TBB_ASSERT( !ta || ta->my_max_concurrency==1, NULL );\n        return a->my_num_reserved_slots + a->my_max_num_workers;\n    } else {\n        __TBB_ASSERT( !ta || ta->my_max_concurrency==automatic, NULL );\n        return int(governor::default_num_threads());\n    }\n}\n} // tbb::interfaceX::internal\n} // tbb::interfaceX\n} // tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/arena.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_arena_H\n#define _TBB_arena_H\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/atomic.h\"\n\n#include \"tbb/tbb_machine.h\"\n\n#include \"scheduler_common.h\"\n#include \"intrusive_list.h\"\n#include \"task_stream.h\"\n#include \"../rml/include/rml_tbb.h\"\n#include \"mailbox.h\"\n#include \"observer_proxy.h\"\n#include \"market.h\"\n#include \"governor.h\"\n#include \"concurrent_monitor.h\"\n\nnamespace tbb {\n\nclass task_group_context;\nclass allocate_root_with_context_proxy;\n\nnamespace internal {\n\n//! The structure of an arena, except the array of slots.\n/** Separated in order to simplify padding.\n    Intrusive list node base class is used by market to form a list of arenas. **/\nstruct arena_base : padded<intrusive_list_node> {\n    //! The number of workers that have been marked out by the resource manager to service the arena.\n    unsigned my_num_workers_allotted;   // heavy use in stealing loop\n\n    //! Reference counter for the arena.\n    /** Worker and master references are counted separately: first several bits are for references\n        from master threads or explicit task_arenas (see arena::ref_external_bits below);\n        the rest counts the number of workers servicing the arena. */\n    atomic<unsigned> my_references;     // heavy use in stealing loop\n\n#if __TBB_TASK_PRIORITY\n    //! The highest priority of recently spawned or enqueued tasks.\n    volatile intptr_t my_top_priority;  // heavy use in stealing loop\n#endif /* !__TBB_TASK_PRIORITY */\n\n    //! The maximal number of currently busy slots.\n    atomic<unsigned> my_limit;          // heavy use in stealing loop\n\n    //! Task pool for the tasks scheduled via task::enqueue() method.\n    /** Such scheduling guarantees eventual execution even if\n        - new tasks are constantly coming (by extracting scheduled tasks in\n          relaxed FIFO order);\n        - the enqueuing thread does not call any of wait_for_all methods.\n        Depending on __TBB_TASK_PRIORITY, num_priority_levels can be 1 or more. **/\n    task_stream<num_priority_levels> my_task_stream; // heavy use in stealing loop\n\n    //! The number of workers requested by the master thread owning the arena.\n    unsigned my_max_num_workers;\n\n    //! The number of workers that are currently requested from the resource manager.\n    int my_num_workers_requested;\n\n    //! Current task pool state and estimate of available tasks amount.\n    /** The estimate is either 0 (SNAPSHOT_EMPTY) or infinity (SNAPSHOT_FULL).\n        Special state is \"busy\" (any other unsigned value).\n        Note that the implementation of arena::is_busy_or_empty() requires\n        my_pool_state to be unsigned. */\n    tbb::atomic<uintptr_t> my_pool_state;\n\n#if __TBB_ARENA_OBSERVER\n    //! The list of local observers attached to this arena.\n    observer_list my_observers;\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! The lowest normalized priority of available spawned or enqueued tasks.\n    intptr_t my_bottom_priority;\n\n    //! Tracks events that may bring tasks in offload areas to the top priority level.\n    /** Incremented when arena top priority changes or a task group priority\n        is elevated to the current arena's top level. **/\n    uintptr_t my_reload_epoch;\n\n    //! The list of offloaded tasks abandoned by workers revoked by the market.\n    task* my_orphaned_tasks;\n\n    //! Counter used to track the occurrence of recent orphaning and re-sharing operations.\n    tbb::atomic<uintptr_t> my_abandonment_epoch;\n\n    //! The highest priority level containing enqueued tasks.\n    /** It being greater than 0 means that high priority enqueued tasks had to be\n        bypassed because all workers were blocked in nested dispatch loops and\n        were unable to progress at then current priority level. **/\n    tbb::atomic<intptr_t> my_skipped_fifo_priority;\n#endif /* !__TBB_TASK_PRIORITY */\n\n    // Below are rarely modified members\n\n    //! The market that owns this arena.\n    market* my_market;\n\n    //! ABA prevention marker.\n    uintptr_t my_aba_epoch;\n\n#if !__TBB_FP_CONTEXT\n    //! FPU control settings of arena's master thread captured at the moment of arena instantiation.\n    cpu_ctl_env my_cpu_ctl_env;\n#endif\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Default task group context.\n    /** Used by root tasks allocated directly by the master thread (not from inside\n        a TBB task) without explicit context specification. **/\n    task_group_context* my_default_ctx;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! The number of slots in the arena.\n    unsigned my_num_slots;\n\n    //! The number of reserved slots (can be occupied only by masters).\n    unsigned my_num_reserved_slots;\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    //! Possible states for the concurrency mode of an arena.\n    enum concurrency_mode {\n        cm_normal =  0,     // arena is served by workers as usual\n        cm_enforced_local,  // arena needs an extra worker despite the arena limit\n        cm_enforced_global  // arena needs an extra worker despite a global limit\n    };\n\n    //! The concurrency mode of an arena.\n    concurrency_mode my_concurrency_mode;\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n\n    //! Waiting object for master threads that cannot join the arena.\n    concurrent_monitor my_exit_monitors;\n\n#if TBB_USE_ASSERT\n    //! Used to trap accesses to the object after its destruction.\n    uintptr_t my_guard;\n#endif /* TBB_USE_ASSERT */\n}; // struct arena_base\n\nclass arena: public padded<arena_base>\n{\n    //! If enqueued tasks found, restore arena priority and task presence status\n    void restore_priority_if_need();\npublic:\n    typedef padded<arena_base> base_type;\n\n    //! Types of work advertised by advertise_new_work()\n    enum new_work_type {\n        work_spawned,\n        wakeup,\n        work_enqueued\n    };\n\n    //! Constructor\n    arena ( market&, unsigned max_num_workers, unsigned num_reserved_slots );\n\n    //! Allocate an instance of arena.\n    static arena& allocate_arena( market&, unsigned num_slots, unsigned num_reserved_slots );\n\n    static int unsigned num_arena_slots ( unsigned num_slots ) {\n        return max(2u, num_slots);\n    }\n\n    static int allocation_size ( unsigned num_slots ) {\n        return sizeof(base_type) + num_slots * (sizeof(mail_outbox) + sizeof(arena_slot));\n    }\n\n    //! Get reference to mailbox corresponding to given affinity_id.\n    mail_outbox& mailbox( affinity_id id ) {\n        __TBB_ASSERT( 0<id, \"affinity id must be positive integer\" );\n        __TBB_ASSERT( id <= my_num_slots, \"affinity id out of bounds\" );\n\n        return ((mail_outbox*)this)[-(int)id];\n    }\n\n    //! Completes arena shutdown, destructs and deallocates it.\n    void free_arena ();\n\n    typedef uintptr_t pool_state_t;\n\n    //! No tasks to steal since last snapshot was taken\n    static const pool_state_t SNAPSHOT_EMPTY = 0;\n\n    //! At least one task has been offered for stealing since the last snapshot started\n    static const pool_state_t SNAPSHOT_FULL = pool_state_t(-1);\n\n    //! The number of least significant bits for external references\n    static const unsigned ref_external_bits = 12; // up to 4095 external and 1M workers\n\n    //! Reference increment values for externals and workers\n    static const unsigned ref_external = 1;\n    static const unsigned ref_worker   = 1<<ref_external_bits;\n\n    //! No tasks to steal or snapshot is being taken.\n    static bool is_busy_or_empty( pool_state_t s ) { return s < SNAPSHOT_FULL; }\n\n    //! The number of workers active in the arena.\n    unsigned num_workers_active( ) {\n        return my_references >> ref_external_bits;\n    }\n\n    //! If necessary, raise a flag that there is new job in arena.\n    template<arena::new_work_type work_type> void advertise_new_work();\n\n    //! Check if there is job anywhere in arena.\n    /** Return true if no job or if arena is being cleaned up. */\n    bool is_out_of_work();\n\n    //! enqueue a task into starvation-resistance queue\n    void enqueue_task( task&, intptr_t, FastRandom & );\n\n    //! Registers the worker with the arena and enters TBB scheduler dispatch loop\n    void process( generic_scheduler& );\n\n    //! Notification that worker or master leaves its arena\n    template<unsigned ref_param>\n    inline void on_thread_leaving ( );\n\n#if __TBB_STATISTICS\n    //! Outputs internal statistics accumulated by the arena\n    void dump_arena_statistics ();\n#endif /* __TBB_STATISTICS */\n\n#if __TBB_TASK_PRIORITY\n    //! Check if recent priority changes may bring some tasks to the current priority level soon\n    /** /param tasks_present indicates presence of tasks at any priority level. **/\n    inline bool may_have_tasks ( generic_scheduler*, bool& tasks_present, bool& dequeuing_possible );\n\n    //! Puts offloaded tasks into global list of orphaned tasks\n    void orphan_offloaded_tasks ( generic_scheduler& s );\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_COUNT_TASK_NODES\n    //! Returns the number of task objects \"living\" in worker threads\n    intptr_t workers_task_node_count();\n#endif\n\n    //! Check for the presence of enqueued tasks at all priority levels\n    bool has_enqueued_tasks();\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    //! Recall worker if global mandatory is enabled, but not for this arena\n    bool recall_by_mandatory_request() const {\n        return my_market->my_mandatory_num_requested && my_concurrency_mode==cm_normal;\n    }\n\n    //! The arena is currently in an enforced concurrency mode\n    bool must_have_concurrency() const {\n        return my_num_workers_requested &&\n               ( my_concurrency_mode==cm_enforced_local || my_concurrency_mode==cm_enforced_global );\n    }\n#endif\n    static const size_t out_of_arena = ~size_t(0);\n    //! Tries to occupy a slot in the arena. On success, returns the slot index; if no slot is available, returns out_of_arena.\n    template <bool as_worker>\n    size_t occupy_free_slot( generic_scheduler& s );\n    //! Tries to occupy a slot in the specified range.\n    size_t occupy_free_slot_in_range( generic_scheduler& s, size_t lower, size_t upper );\n\n    /** Must be the last data field */\n    arena_slot my_slots[1];\n}; // class arena\n\ntemplate<unsigned ref_param>\ninline void arena::on_thread_leaving ( ) {\n    //\n    // Implementation of arena destruction synchronization logic contained various\n    // bugs/flaws at the different stages of its evolution, so below is a detailed\n    // description of the issues taken into consideration in the framework of the\n    // current design.\n    //\n    // In case of using fire-and-forget tasks (scheduled via task::enqueue())\n    // master thread is allowed to leave its arena before all its work is executed,\n    // and market may temporarily revoke all workers from this arena. Since revoked\n    // workers never attempt to reset arena state to EMPTY and cancel its request\n    // to RML for threads, the arena object is destroyed only when both the last\n    // thread is leaving it and arena's state is EMPTY (that is its master thread\n    // left and it does not contain any work).\n    // Thus resetting arena to EMPTY state (as earlier TBB versions did) should not\n    // be done here (or anywhere else in the master thread to that matter); doing so\n    // can result either in arena's premature destruction (at least without\n    // additional costly checks in workers) or in unnecessary arena state changes\n    // (and ensuing workers migration).\n    //\n    // A worker that checks for work presence and transitions arena to the EMPTY\n    // state (in snapshot taking procedure arena::is_out_of_work()) updates\n    // arena::my_pool_state first and only then arena::my_num_workers_requested.\n    // So the check for work absence must be done against the latter field.\n    //\n    // In a time window between decrementing the active threads count and checking\n    // if there is an outstanding request for workers. New worker thread may arrive,\n    // finish remaining work, set arena state to empty, and leave decrementing its\n    // refcount and destroying. Then the current thread will destroy the arena\n    // the second time. To preclude it a local copy of the outstanding request\n    // value can be stored before decrementing active threads count.\n    //\n    // But this technique may cause two other problem. When the stored request is\n    // zero, it is possible that arena still has threads and they can generate new\n    // tasks and thus re-establish non-zero requests. Then all the threads can be\n    // revoked (as described above) leaving this thread the last one, and causing\n    // it to destroy non-empty arena.\n    //\n    // The other problem takes place when the stored request is non-zero. Another\n    // thread may complete the work, set arena state to empty, and leave without\n    // arena destruction before this thread decrements the refcount. This thread\n    // cannot destroy the arena either. Thus the arena may be \"orphaned\".\n    //\n    // In both cases we cannot dereference arena pointer after the refcount is\n    // decremented, as our arena may already be destroyed.\n    //\n    // If this is the master thread, the market is protected by refcount to it.\n    // In case of workers market's liveness is ensured by the RML connection\n    // rundown protocol, according to which the client (i.e. the market) lives\n    // until RML server notifies it about connection termination, and this\n    // notification is fired only after all workers return into RML.\n    //\n    // Thus if we decremented refcount to zero we ask the market to check arena\n    // state (including the fact if it is alive) under the lock.\n    //\n    uintptr_t aba_epoch = my_aba_epoch;\n    market* m = my_market;\n    __TBB_ASSERT(my_references >= ref_param, \"broken arena reference counter\");\n#if __TBB_STATISTICS_EARLY_DUMP\n    // While still holding a reference to the arena, compute how many external references are left.\n    // If just one, dump statistics.\n    if ( modulo_power_of_two(my_references,ref_worker)==ref_param ) // may only be true with ref_external\n        GATHER_STATISTIC( dump_arena_statistics() );\n#endif\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    // When there is no workers someone must free arena, as\n    // without workers, no one calls is_out_of_work().\n    // Skip workerless arenas because they have no demand for workers.\n    // TODO: consider more strict conditions for the cleanup,\n    // because it can create the demand of workers,\n    // but the arena can be already empty (and so ready for destroying)\n    if( ref_param==ref_external && my_num_slots != my_num_reserved_slots\n        && 0 == m->my_num_workers_soft_limit && my_concurrency_mode==cm_normal ) {\n        bool is_out = false;\n        for (int i=0; i<num_priority_levels; i++) {\n            is_out = is_out_of_work();\n            if (is_out)\n                break;\n        }\n        // We expect, that in worst case it's enough to have num_priority_levels-1\n        // calls to restore priorities and and yet another is_out_of_work() to conform\n        // that no work was found. But as market::set_active_num_workers() can be called\n        // concurrently, can't guarantee last is_out_of_work() return true.\n    }\n#endif\n    if ( (my_references -= ref_param ) == 0 )\n        m->try_destroy_arena( this, aba_epoch );\n}\n\ntemplate<arena::new_work_type work_type> void arena::advertise_new_work() {\n    if( work_type == work_enqueued ) {\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        if( my_market->my_num_workers_soft_limit == 0 ) {\n            if( my_concurrency_mode!=cm_enforced_global ) {\n                if( my_market->mandatory_concurrency_enable( this ) ) {\n                    my_pool_state = SNAPSHOT_FULL;\n                    return;\n                }\n            }\n        } else if( my_max_num_workers==0 && my_num_reserved_slots==1 ) {\n            my_max_num_workers = 1;\n            __TBB_ASSERT(my_concurrency_mode==cm_normal, NULL);\n            my_concurrency_mode = cm_enforced_local;\n            my_pool_state = SNAPSHOT_FULL;\n            my_market->adjust_demand( *this, 1 );\n            return;\n        }\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n        // Local memory fence here and below is required to avoid missed wakeups; see the comment below.\n        // Starvation resistant tasks require concurrency, so missed wakeups are unacceptable.\n        atomic_fence();\n    }\n    else if( work_type == wakeup ) {\n        __TBB_ASSERT(my_max_num_workers!=0, \"Unexpected worker wakeup request\");\n        atomic_fence();\n    }\n    // Double-check idiom that, in case of spawning, is deliberately sloppy about memory fences.\n    // Technically, to avoid missed wakeups, there should be a full memory fence between the point we\n    // released the task pool (i.e. spawned task) and read the arena's state.  However, adding such a\n    // fence might hurt overall performance more than it helps, because the fence would be executed\n    // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism,\n    // but never promises parallelism, the missed wakeup is not a correctness problem.\n    pool_state_t snapshot = my_pool_state;\n    if( is_busy_or_empty(snapshot) ) {\n        // Attempt to mark as full.  The compare_and_swap below is a little unusual because the\n        // result is compared to a value that can be different than the comparand argument.\n        if( my_pool_state.compare_and_swap( SNAPSHOT_FULL, snapshot )==SNAPSHOT_EMPTY ) {\n            if( snapshot!=SNAPSHOT_EMPTY ) {\n                // This thread read \"busy\" into snapshot, and then another thread transitioned\n                // my_pool_state to \"empty\" in the meantime, which caused the compare_and_swap above\n                // to fail.  Attempt to transition my_pool_state from \"empty\" to \"full\".\n                if( my_pool_state.compare_and_swap( SNAPSHOT_FULL, SNAPSHOT_EMPTY )!=SNAPSHOT_EMPTY ) {\n                    // Some other thread transitioned my_pool_state from \"empty\", and hence became\n                    // responsible for waking up workers.\n                    return;\n                }\n            }\n            // This thread transitioned pool from empty to full state, and thus is responsible for\n            // telling the market that there is work to do.\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n            if( work_type == work_spawned ) {\n                if( my_concurrency_mode!=cm_normal ) {\n                    switch( my_concurrency_mode ) {\n                    case cm_enforced_local:\n                        __TBB_ASSERT(my_max_num_workers==1, \"\");\n                        __TBB_ASSERT(!governor::local_scheduler()->is_worker(), \"\");\n                        // There was deliberate oversubscription on 1 core for sake of starvation-resistant tasks.\n                        // Now a single active thread (must be the master) supposedly starts a new parallel region\n                        // with relaxed sequential semantics, and oversubscription should be avoided.\n                        // Demand for workers has been decreased to 0 during SNAPSHOT_EMPTY, so just keep it.\n                        my_max_num_workers = 0;\n                        my_concurrency_mode = cm_normal;\n                        break;\n                    case cm_enforced_global:\n                        my_market->mandatory_concurrency_disable( this );\n                        restore_priority_if_need();\n                        break;\n                    default:\n                        break;\n                    }\n                    return;\n                }\n            }\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n            my_market->adjust_demand( *this, my_max_num_workers );\n        }\n    }\n}\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_arena_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/cache_aligned_allocator.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"tbb_misc.h\"\n#include \"dynamic_link.h\"\n#include <cstdlib>\n\n#if _WIN32||_WIN64\n#include \"tbb/machine/windows_api.h\"\n#else\n#include <dlfcn.h>\n#endif /* _WIN32||_WIN64 */\n\nusing namespace std;\n\n#if __TBB_WEAK_SYMBOLS_PRESENT\n\n#pragma weak scalable_malloc\n#pragma weak scalable_free\n#pragma weak scalable_aligned_malloc\n#pragma weak scalable_aligned_free\n\nextern \"C\" {\n    void* scalable_malloc( size_t );\n    void  scalable_free( void* );\n    void* scalable_aligned_malloc( size_t, size_t );\n    void  scalable_aligned_free( void* );\n}\n\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n\nnamespace tbb {\n\nnamespace internal {\n\n//! Dummy routine used for first indirect call via MallocHandler.\nstatic void* DummyMalloc( size_t size );\n\n//! Dummy routine used for first indirect call via FreeHandler.\nstatic void DummyFree( void * ptr );\n\n//! Handler for memory allocation\nstatic void* (*MallocHandler)( size_t size ) = &DummyMalloc;\n\n//! Handler for memory deallocation\nstatic void (*FreeHandler)( void* pointer ) = &DummyFree;\n\n//! Dummy routine used for first indirect call via padded_allocate_handler.\nstatic void* dummy_padded_allocate( size_t bytes, size_t alignment );\n\n//! Dummy routine used for first indirect call via padded_free_handler.\nstatic void dummy_padded_free( void * ptr );\n\n// ! Allocates memory using standard malloc. It is used when scalable_allocator is not available\nstatic void* padded_allocate( size_t bytes, size_t alignment );\n\n// ! Allocates memory using standard free. It is used when scalable_allocator is not available\nstatic void padded_free( void* p );\n\n//! Handler for padded memory allocation\nstatic void* (*padded_allocate_handler)( size_t bytes, size_t alignment ) = &dummy_padded_allocate;\n\n//! Handler for padded memory deallocation\nstatic void (*padded_free_handler)( void* p ) = &dummy_padded_free;\n\n//! Table describing how to link the handlers.\nstatic const dynamic_link_descriptor MallocLinkTable[] = {\n    DLD(scalable_malloc, MallocHandler),\n    DLD(scalable_free, FreeHandler),\n    DLD(scalable_aligned_malloc, padded_allocate_handler),\n    DLD(scalable_aligned_free, padded_free_handler),\n};\n\n\n#if TBB_USE_DEBUG\n#define DEBUG_SUFFIX \"_debug\"\n#else\n#define DEBUG_SUFFIX\n#endif /* TBB_USE_DEBUG */\n\n// MALLOCLIB_NAME is the name of the TBB memory allocator library.\n#if _WIN32||_WIN64\n#define MALLOCLIB_NAME \"tbbmalloc\" DEBUG_SUFFIX \".dll\"\n#elif __APPLE__\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX \".dylib\"\n#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX || __ANDROID__\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX \".so\"\n#elif __linux__  // Note that order of these #elif's is important!\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)\n#else\n#error Unknown OS\n#endif\n\n//! Initialize the allocation/free handler pointers.\n/** Caller is responsible for ensuring this routine is called exactly once.\n    The routine attempts to dynamically link with the TBB memory allocator.\n    If that allocator is not found, it links to malloc and free. */\nvoid initialize_handler_pointers() {\n    __TBB_ASSERT( MallocHandler==&DummyMalloc, NULL );\n    bool success = dynamic_link( MALLOCLIB_NAME, MallocLinkTable, 4 );\n    if( !success ) {\n        // If unsuccessful, set the handlers to the default routines.\n        // This must be done now, and not before FillDynamicLinks runs, because if other\n        // threads call the handlers, we want them to go through the DoOneTimeInitializations logic,\n        // which forces them to wait.\n        FreeHandler = &free;\n        MallocHandler = &malloc;\n        padded_allocate_handler = &padded_allocate;\n        padded_free_handler = &padded_free;\n    }\n#if !__TBB_RML_STATIC\n    PrintExtraVersionInfo( \"ALLOCATOR\", success?\"scalable_malloc\":\"malloc\" );\n#endif\n}\n\nstatic tbb::atomic<do_once_state> initialization_state;\nvoid initialize_cache_aligned_allocator() {\n    atomic_do_once( &initialize_handler_pointers, initialization_state );\n}\n\n//! Executed on very first call through MallocHandler\nstatic void* DummyMalloc( size_t size ) {\n    initialize_cache_aligned_allocator();\n    __TBB_ASSERT( MallocHandler!=&DummyMalloc, NULL );\n    return (*MallocHandler)( size );\n}\n\n//! Executed on very first call through FreeHandler\nstatic void DummyFree( void * ptr ) {\n    initialize_cache_aligned_allocator();\n    __TBB_ASSERT( FreeHandler!=&DummyFree, NULL );\n    (*FreeHandler)( ptr );\n}\n\n//! Executed on very first call through padded_allocate_handler\nstatic void* dummy_padded_allocate( size_t bytes, size_t alignment ) {\n    initialize_cache_aligned_allocator();\n    __TBB_ASSERT( padded_allocate_handler!=&dummy_padded_allocate, NULL );\n    return (*padded_allocate_handler)(bytes, alignment);\n}\n\n//! Executed on very first call through padded_free_handler\nstatic void dummy_padded_free( void * ptr ) {\n    initialize_cache_aligned_allocator();\n    __TBB_ASSERT( padded_free_handler!=&dummy_padded_free, NULL );\n    (*padded_free_handler)( ptr );\n}\n\n// TODO: use CPUID to find actual line size, though consider backward compatibility\nstatic size_t NFS_LineSize = 128;\n\nsize_t NFS_GetLineSize() {\n    return NFS_LineSize;\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // unary minus operator applied to unsigned type, result still unsigned\n    #pragma warning( disable: 4146 4706 )\n#endif\n\nvoid* NFS_Allocate( size_t n, size_t element_size, void* /*hint*/ ) {\n    //TODO: make this functionality  available via an adaptor over generic STL like allocator\n    const size_t nfs_cache_line_size = NFS_LineSize;\n    __TBB_ASSERT( nfs_cache_line_size <= NFS_MaxLineSize, \"illegal value for NFS_LineSize\" );\n    __TBB_ASSERT( is_power_of_two(nfs_cache_line_size), \"must be power of two\" );\n    size_t bytes = n*element_size;\n\n    if (bytes<n || bytes+nfs_cache_line_size<bytes) {\n        // Overflow\n        throw_exception(eid_bad_alloc);\n    }\n    // scalable_aligned_malloc considers zero size request an error, and returns NULL\n    if (bytes==0) bytes = 1;\n\n    void* result = (*padded_allocate_handler)( bytes, nfs_cache_line_size );\n    if (!result)\n        throw_exception(eid_bad_alloc);\n\n    __TBB_ASSERT( is_aligned(result, nfs_cache_line_size), \"The address returned isn't aligned to cache line size\" );\n    return result;\n}\n\nvoid NFS_Free( void* p ) {\n    (*padded_free_handler)( p );\n}\n\nstatic void* padded_allocate( size_t bytes, size_t alignment ) {\n    unsigned char* result = NULL;\n    unsigned char* base = (unsigned char*)malloc(alignment+bytes);\n    if( base ) {\n        // Round up to the next line\n        result = (unsigned char*)((uintptr_t)(base+alignment)&-alignment);\n        // Record where block actually starts.\n        ((uintptr_t*)result)[-1] = uintptr_t(base);\n    }\n    return result;\n}\n\nstatic void padded_free( void* p ) {\n    if( p ) {\n        __TBB_ASSERT( (uintptr_t)p>=0x4096, \"attempt to free block not obtained from cache_aligned_allocator\" );\n        // Recover where block actually starts\n        unsigned char* base = ((unsigned char**)p)[-1];\n        __TBB_ASSERT( (void*)((uintptr_t)(base+NFS_LineSize)&-NFS_LineSize)==p, \"not allocated by NFS_Allocate?\" );\n        free(base);\n    }\n}\n\nvoid* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {\n    void* result = (*MallocHandler) (n);\n    if (!result) {\n        throw_exception(eid_bad_alloc);\n    }\n    return result;\n}\n\nvoid __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p ) {\n    if( p ) {\n        (*FreeHandler)( p );\n    }\n}\n\nbool __TBB_EXPORTED_FUNC is_malloc_used_v3() {\n    if (MallocHandler == &DummyMalloc) {\n        void* void_ptr = (*MallocHandler)(1);\n        (*FreeHandler)(void_ptr);\n    }\n    __TBB_ASSERT( MallocHandler!=&DummyMalloc && FreeHandler!=&DummyFree, NULL );\n    // Cast to void avoids type mismatch errors on some compilers (e.g. __IBMCPP__)\n    __TBB_ASSERT( !(((void*)MallocHandler==(void*)&malloc) ^ ((void*)FreeHandler==(void*)&free)),\n                  \"Both shim pointers must refer to routines from the same package (either TBB or CRT)\" );\n    return (void*)MallocHandler == (void*)&malloc;\n}\n\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/cilk-tbb-interop.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* The API to enable interoperability between Intel(R) Cilk(TM) Plus and\n   Intel(R) Threading Building Blocks. */\n\n#ifndef CILK_TBB_INTEROP_H\n#define CILK_TBB_INTEROP_H\n\n#ifndef _WIN32\n#ifdef IN_CILK_RUNTIME\n#define CILK_EXPORT __attribute__((visibility(\"protected\")))\n#else\n#define CILK_EXPORT /* nothing */\n#endif\n#else\n#ifdef IN_CILK_RUNTIME\n#define CILK_EXPORT __declspec(dllexport)\n#else\n#define CILK_EXPORT __declspec(dllimport)\n#endif  // IN_CILK_RUNTIME\n#endif // _WIN32\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/* A return code.  0 indicates success */\ntypedef int __cilk_tbb_retcode;\n\nenum __cilk_tbb_stack_op {\n    CILK_TBB_STACK_ORPHAN, // disconnecting stack from a thread\n    CILK_TBB_STACK_ADOPT,  // reconnecting orphaned stack to a trhead\n    CILK_TBB_STACK_RELEASE // releasing stack\n};\n\ntypedef __cilk_tbb_retcode (*__cilk_tbb_pfn_stack_op)(enum __cilk_tbb_stack_op, void* data);\n\ntypedef __cilk_tbb_retcode (*__cilk_tbb_pfn_unwatch_stacks)(void *data);\n\n/* Each thunk structure has two pointers: \"routine\" and \"data\".\n   The caller of the thunk invokes *routine, passing \"data\" as the void* parameter. */\n\n/* Thunk invoked by Intel Cilk Plus runtime (cilkrts) when it changes the relationship\n   between a stack and a thread. It does not matter what stack the thunk runs on.\n   The thread (not fiber) on which the thunk runs is important.\n\n   CILK_TBB_STACK_ORPHAN\n      The thunk must be invoked on the thread disconnecting itself from the stack.\n      Must \"happen before\" the stack is adopted elsewhere.\n   CILK_TBB_STACK_ADOPT\n      The thunk must be invoked on the thread adopting the stack.\n   CILK_TBB_STACK_RELEASE\n      The thunk must be invoked on the thread doing the releasing,\n      Must \"happen before\" the stack is used elsewhere.\n\n   When a non-empty stack is transferred between threads, the first thread must orphan it\n   and the second thread must adopt it.\n\n   An empty stack can be transferred similarly, or simply released by the first thread.\n\n   Here is a summary of the actions as transitions on a state machine.\n\n                       watch                                    ORPHAN\n                       -->-->                                   -->--\n                      /      \\                                 /     \\\n   (freed empty stack)       (TBB sees stack running on thread)      (stack in limbo)\n                |     \\     /                                  \\     /     |\n                |      --<--                                    --<--      |\n                ^      RELEASE or                              ADOPT       V\n                 \\     unwatch                                            /\n                  \\                                                      /\n                   --------------------------<---------------------------\n                                          RELEASE\n*/\nstruct __cilk_tbb_stack_op_thunk {\n    __cilk_tbb_pfn_stack_op routine;\n    void* data;                 /* Set by TBB */\n};\n\n/* Thunk invoked by TBB when it is no longer interested in watching the stack bound to the current thread. */\nstruct __cilk_tbb_unwatch_thunk {\n    __cilk_tbb_pfn_unwatch_stacks routine;\n    void* data;\n};\n\n/* Defined by cilkrts, called by TBB.\n   Requests that cilkrts invoke __cilk_tbb_stack_op_thunk when it orphans a stack.\n   cilkrts sets *u to a thunk that TBB should call when it is no longer interested in watching the stack. */\nCILK_EXPORT\n__cilk_tbb_retcode __cilkrts_watch_stack(struct __cilk_tbb_unwatch_thunk* u,\n                                         struct __cilk_tbb_stack_op_thunk o);\n\n#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n\n#endif  // CILK_TBB_INTEROP_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/concurrent_hash_map.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/concurrent_hash_map.h\"\n\nnamespace tbb {\n\nnamespace internal {\n#if !TBB_NO_LEGACY\nstruct hash_map_segment_base {\n    typedef spin_rw_mutex segment_mutex_t;\n    //! Type of a hash code.\n    typedef size_t hashcode_t;\n    //! Log2 of n_segment\n    static const size_t n_segment_bits = 6;\n    //! Maximum size of array of chains\n    static const size_t max_physical_size = size_t(1)<<(8*sizeof(hashcode_t)-n_segment_bits);\n    //! Mutex that protects this segment\n    segment_mutex_t my_mutex;\n    // Number of nodes\n    atomic<size_t> my_logical_size;\n    // Size of chains\n    /** Always zero or a power of two */\n    size_t my_physical_size;\n    //! True if my_logical_size>=my_physical_size.\n    /** Used to support Intel(R) Thread Checker. */\n    bool __TBB_EXPORTED_METHOD internal_grow_predicate() const;\n};\n\nbool hash_map_segment_base::internal_grow_predicate() const {\n    // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the\n    // library so that Intel(R) Thread Checker will ignore them.  The reads are used in a double-check\n    // context, so the program is nonetheless correct despite the race.\n    return my_logical_size >= my_physical_size && my_physical_size < max_physical_size;\n}\n#endif//!TBB_NO_LEGACY\n\n} // namespace internal\n\n} // namespace tbb\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/concurrent_monitor.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"concurrent_monitor.h\"\n\nnamespace tbb {\nnamespace internal {\n\nvoid concurrent_monitor::thread_context::init() {\n    new (sema.begin()) binary_semaphore;\n    ready = true;\n}\n\nconcurrent_monitor::~concurrent_monitor() {\n    abort_all();\n    __TBB_ASSERT( waitset_ec.empty(), \"waitset not empty?\" );\n}\n\nvoid concurrent_monitor::prepare_wait( thread_context& thr, uintptr_t ctx ) {\n    if( !thr.ready )\n        thr.init();\n    // this is good place to pump previous spurious wakeup\n    else if( thr.spurious ) {\n        thr.spurious = false;\n        thr.semaphore().P();\n    }\n    thr.context = ctx;\n    thr.in_waitset = true;\n    {\n        tbb::spin_mutex::scoped_lock l( mutex_ec );\n        __TBB_store_relaxed( thr.epoch, __TBB_load_relaxed(epoch) );\n        waitset_ec.add( (waitset_t::node_t*)&thr );\n    }\n    atomic_fence();\n}\n\nvoid concurrent_monitor::cancel_wait( thread_context& thr ) {\n    // spurious wakeup will be pumped in the following prepare_wait()\n    thr.spurious = true;\n    // try to remove node from waitset\n    bool th_in_waitset = thr.in_waitset;\n    if( th_in_waitset ) {\n        tbb::spin_mutex::scoped_lock l( mutex_ec );\n        if (thr.in_waitset) {\n            // successfully removed from waitset,\n            // so there will be no spurious wakeup\n            thr.in_waitset = false;\n            thr.spurious = false;\n            waitset_ec.remove( (waitset_t::node_t&)thr );\n        }\n    }\n}\n\nvoid concurrent_monitor::notify_one_relaxed() {\n    if( waitset_ec.empty() )\n        return;\n    waitset_node_t* n;\n    const waitset_node_t* end = waitset_ec.end();\n    {\n        tbb::spin_mutex::scoped_lock l( mutex_ec );\n        __TBB_store_relaxed( epoch, __TBB_load_relaxed(epoch) + 1 );\n        n = waitset_ec.front();\n        if( n!=end ) {\n            waitset_ec.remove( *n );\n            to_thread_context(n)->in_waitset = false;\n        }\n    }\n    if( n!=end )\n        to_thread_context(n)->semaphore().V();\n}\n\nvoid concurrent_monitor::notify_all_relaxed() {\n    if( waitset_ec.empty() )\n        return;\n    waitset_t temp;\n    const waitset_node_t* end;\n    {\n        tbb::spin_mutex::scoped_lock l( mutex_ec );\n        __TBB_store_relaxed( epoch, __TBB_load_relaxed(epoch) + 1 );\n        waitset_ec.flush_to( temp );\n        end = temp.end();\n        for( waitset_node_t* n=temp.front(); n!=end; n=n->next )\n            to_thread_context(n)->in_waitset = false;\n    }\n    waitset_node_t* nxt;\n    for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {\n        nxt = n->next;\n        to_thread_context(n)->semaphore().V();\n    }\n#if TBB_USE_ASSERT\n    temp.clear();\n#endif\n}\n\nvoid concurrent_monitor::abort_all_relaxed() {\n    if( waitset_ec.empty() )\n        return;\n    waitset_t temp;\n    const waitset_node_t* end;\n    {\n        tbb::spin_mutex::scoped_lock l( mutex_ec );\n        __TBB_store_relaxed( epoch, __TBB_load_relaxed(epoch) + 1 );\n        waitset_ec.flush_to( temp );\n        end = temp.end();\n        for( waitset_node_t* n=temp.front(); n!=end; n=n->next )\n            to_thread_context(n)->in_waitset = false;\n    }\n    waitset_node_t* nxt;\n    for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {\n        nxt = n->next;\n        to_thread_context(n)->aborted = true;\n        to_thread_context(n)->semaphore().V();\n    }\n#if TBB_USE_ASSERT\n    temp.clear();\n#endif\n}\n\n} // namespace internal\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/concurrent_monitor.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_monitor_H\n#define __TBB_concurrent_monitor_H\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"tbb/aligned_space.h\"\n\n#include \"semaphore.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//! Circular doubly-linked list with sentinel\n/** head.next points to the front and head.prev points to the back */\nclass circular_doubly_linked_list_with_sentinel : no_copy {\npublic:\n    struct node_t {\n        node_t* next;\n        node_t* prev;\n        explicit node_t() : next((node_t*)(uintptr_t)0xcdcdcdcd), prev((node_t*)(uintptr_t)0xcdcdcdcd) {}\n    };\n\n    // ctor\n    circular_doubly_linked_list_with_sentinel() {clear();}\n    // dtor\n    ~circular_doubly_linked_list_with_sentinel() {__TBB_ASSERT( head.next==&head && head.prev==&head, \"the list is not empty\" );}\n\n    inline size_t  size()  const {return count;}\n    inline bool    empty() const {return size()==0;}\n    inline node_t* front() const {return head.next;}\n    inline node_t* last()  const {return head.prev;}\n    inline node_t* begin() const {return front();}\n    inline const node_t* end() const {return &head;}\n\n    //! add to the back of the list\n    inline void add( node_t* n ) {\n        __TBB_store_relaxed(count, __TBB_load_relaxed(count) + 1);\n        n->prev = head.prev;\n        n->next = &head;\n        head.prev->next = n;\n        head.prev = n;\n    }\n\n    //! remove node 'n'\n    inline void remove( node_t& n ) {\n        __TBB_ASSERT( count > 0, \"attempt to remove an item from an empty list\" );\n        __TBB_store_relaxed(count, __TBB_load_relaxed(count) - 1);\n        n.prev->next = n.next;\n        n.next->prev = n.prev;\n    }\n\n    //! move all elements to 'lst' and initialize the 'this' list\n    inline void flush_to( circular_doubly_linked_list_with_sentinel& lst ) {\n        if( const size_t l_count = __TBB_load_relaxed(count) ) {\n            __TBB_store_relaxed(lst.count, l_count);\n            lst.head.next = head.next;\n            lst.head.prev = head.prev;\n            head.next->prev = &lst.head;\n            head.prev->next = &lst.head;\n            clear();\n        }\n    }\n\n    void clear() {head.next = head.prev = &head; __TBB_store_relaxed(count, 0);}\nprivate:\n    __TBB_atomic size_t count;\n    node_t head;\n};\n\ntypedef circular_doubly_linked_list_with_sentinel waitset_t;\ntypedef circular_doubly_linked_list_with_sentinel::node_t waitset_node_t;\n\n//! concurrent_monitor\n/** fine-grained concurrent_monitor implementation */\nclass concurrent_monitor : no_copy {\npublic:\n    /** per-thread descriptor for concurrent_monitor */\n    class thread_context : waitset_node_t, no_copy {\n        friend class concurrent_monitor;\n    public:\n        thread_context() : spurious(false), aborted(false), ready(false), context(0) {\n            epoch = 0;\n            in_waitset = false;\n        }\n        ~thread_context() {\n            if (ready) {\n                if( spurious ) semaphore().P();\n                semaphore().~binary_semaphore();\n            }\n        }\n        binary_semaphore& semaphore() { return *sema.begin(); }\n    private:\n        //! The method for lazy initialization of the thread_context's semaphore.\n        //  Inlining of the method is undesirable, due to extra instructions for\n        //  exception support added at caller side.\n        __TBB_NOINLINE( void init() );\n        tbb::aligned_space<binary_semaphore> sema;\n        __TBB_atomic unsigned epoch;\n        tbb::atomic<bool> in_waitset;\n        bool  spurious;\n        bool  aborted;\n        bool  ready;\n        uintptr_t context;\n    };\n\n    //! ctor\n    concurrent_monitor() {__TBB_store_relaxed(epoch, 0);}\n\n    //! dtor\n    ~concurrent_monitor() ;\n\n    //! prepare wait by inserting 'thr' into the wait queue\n    void prepare_wait( thread_context& thr, uintptr_t ctx = 0 );\n\n    //! Commit wait if event count has not changed; otherwise, cancel wait.\n    /** Returns true if committed, false if canceled. */\n    inline bool commit_wait( thread_context& thr ) {\n        const bool do_it = thr.epoch == __TBB_load_relaxed(epoch);\n        // this check is just an optimization\n        if( do_it ) {\n            __TBB_ASSERT( thr.ready, \"use of commit_wait() without prior prepare_wait()\");\n            thr.semaphore().P();\n            __TBB_ASSERT( !thr.in_waitset, \"still in the queue?\" );\n            if( thr.aborted )\n                throw_exception( eid_user_abort );\n        } else {\n            cancel_wait( thr );\n        }\n        return do_it;\n    }\n    //! Cancel the wait. Removes the thread from the wait queue if not removed yet.\n    void cancel_wait( thread_context& thr );\n\n    //! Wait for a condition to be satisfied with waiting-on context\n    template<typename WaitUntil, typename Context>\n    void wait( WaitUntil until, Context on );\n\n    //! Notify one thread about the event\n    void notify_one() {atomic_fence(); notify_one_relaxed();}\n\n    //! Notify one thread about the event. Relaxed version.\n    void notify_one_relaxed();\n\n    //! Notify all waiting threads of the event\n    void notify_all() {atomic_fence(); notify_all_relaxed();}\n\n    //! Notify all waiting threads of the event; Relaxed version\n    void notify_all_relaxed();\n\n    //! Notify waiting threads of the event that satisfies the given predicate\n    template<typename P> void notify( const P& predicate ) {atomic_fence(); notify_relaxed( predicate );}\n\n    //! Notify waiting threads of the event that satisfies the given predicate; Relaxed version\n    template<typename P> void notify_relaxed( const P& predicate );\n\n    //! Abort any sleeping threads at the time of the call\n    void abort_all() {atomic_fence(); abort_all_relaxed(); }\n\n    //! Abort any sleeping threads at the time of the call; Relaxed version\n    void abort_all_relaxed();\n\nprivate:\n    tbb::spin_mutex mutex_ec;\n    waitset_t       waitset_ec;\n    __TBB_atomic unsigned epoch;\n    thread_context* to_thread_context( waitset_node_t* n ) { return static_cast<thread_context*>(n); }\n};\n\ntemplate<typename WaitUntil, typename Context>\nvoid concurrent_monitor::wait( WaitUntil until, Context on )\n{\n    bool slept = false;\n    thread_context thr_ctx;\n    prepare_wait( thr_ctx, on() );\n    while( !until() ) {\n        if( (slept = commit_wait( thr_ctx ) )==true )\n            if( until() ) break;\n        slept = false;\n        prepare_wait( thr_ctx, on() );\n    }\n    if( !slept )\n        cancel_wait( thr_ctx );\n}\n\ntemplate<typename P>\nvoid concurrent_monitor::notify_relaxed( const P& predicate ) {\n        if( waitset_ec.empty() )\n            return;\n        waitset_t temp;\n        waitset_node_t* nxt;\n        const waitset_node_t* end = waitset_ec.end();\n        {\n            tbb::spin_mutex::scoped_lock l( mutex_ec );\n            __TBB_store_relaxed(epoch, __TBB_load_relaxed(epoch) + 1);\n            for( waitset_node_t* n=waitset_ec.last(); n!=end; n=nxt ) {\n                nxt = n->prev;\n                thread_context* thr = to_thread_context( n );\n                if( predicate( thr->context ) ) {\n                    waitset_ec.remove( *n );\n                    thr->in_waitset = false;\n                    temp.add( n );\n                }\n            }\n        }\n\n        end = temp.end();\n        for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {\n            nxt = n->next;\n            to_thread_context(n)->semaphore().V();\n        }\n#if TBB_USE_ASSERT\n        temp.clear();\n#endif\n}\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_concurrent_monitor_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/concurrent_queue.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/tbb_exception.h\"\n// Define required to satisfy test in internal file.\n#define  __TBB_concurrent_queue_H\n#include \"tbb/internal/_concurrent_queue_impl.h\"\n#include \"concurrent_monitor.h\"\n#include \"itt_notify.h\"\n#include <new>\n#include <cstring>   // for memset()\n\nusing namespace std;\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif\n\n#define RECORD_EVENTS 0\n\n\nnamespace tbb {\n\nnamespace internal {\n\ntypedef concurrent_queue_base_v3 concurrent_queue_base;\n\ntypedef size_t ticket;\n\n//! A queue using simple locking.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\nstruct micro_queue {\n    typedef concurrent_queue_base::page page;\n\n    friend class micro_queue_pop_finalizer;\n\n    atomic<page*> head_page;\n    atomic<ticket> head_counter;\n\n    atomic<page*> tail_page;\n    atomic<ticket> tail_counter;\n\n    spin_mutex page_mutex;\n\n    void push( const void* item, ticket k, concurrent_queue_base& base,\n               concurrent_queue_base::copy_specifics op_type );\n\n    void abort_push( ticket k, concurrent_queue_base& base );\n\n    bool pop( void* dst, ticket k, concurrent_queue_base& base );\n\n    micro_queue& assign( const micro_queue& src, concurrent_queue_base& base,\n                         concurrent_queue_base::copy_specifics op_type );\n\n    page* make_copy ( concurrent_queue_base& base, const page* src_page, size_t begin_in_page,\n                      size_t end_in_page, ticket& g_index, concurrent_queue_base::copy_specifics op_type ) ;\n\n    void make_invalid( ticket k );\n};\n\n// we need to yank it out of micro_queue because of concurrent_queue_base::deallocate_page being virtual.\nclass micro_queue_pop_finalizer: no_copy {\n    typedef concurrent_queue_base::page page;\n    ticket my_ticket;\n    micro_queue& my_queue;\n    page* my_page;\n    concurrent_queue_base &base;\npublic:\n    micro_queue_pop_finalizer( micro_queue& queue, concurrent_queue_base& b, ticket k, page* p ) :\n        my_ticket(k), my_queue(queue), my_page(p), base(b)\n    {}\n    ~micro_queue_pop_finalizer() {\n        page* p = my_page;\n        if( p ) {\n            spin_mutex::scoped_lock lock( my_queue.page_mutex );\n            page* q = p->next;\n            my_queue.head_page = q;\n            if( !q ) {\n                my_queue.tail_page = NULL;\n            }\n        }\n        my_queue.head_counter = my_ticket;\n        if( p )\n           base.deallocate_page( p );\n    }\n};\n\nstruct predicate_leq {\n    ticket t;\n    predicate_leq( ticket t_ ) : t(t_) {}\n    bool operator() ( uintptr_t p ) const {return (ticket)p<=t;}\n};\n\n//! Internal representation of a ConcurrentQueue.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\nclass concurrent_queue_rep {\npublic:\nprivate:\n    friend struct micro_queue;\n\n    //! Approximately n_queue/golden ratio\n    static const size_t phi = 3;\n\npublic:\n    //! Must be power of 2\n    static const size_t n_queue = 8;\n\n    //! Map ticket to an array index\n    static size_t index( ticket k ) {\n        return k*phi%n_queue;\n    }\n\n    atomic<ticket> head_counter;\n    concurrent_monitor items_avail;\n    atomic<size_t> n_invalid_entries;\n    char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(concurrent_monitor)+sizeof(atomic<size_t>))&(NFS_MaxLineSize-1))];\n\n    atomic<ticket> tail_counter;\n    concurrent_monitor slots_avail;\n    char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(concurrent_monitor))&(NFS_MaxLineSize-1))];\n    micro_queue array[n_queue];\n\n    micro_queue& choose( ticket k ) {\n        // The formula here approximates LRU in a cache-oblivious way.\n        return array[index(k)];\n    }\n\n    atomic<unsigned> abort_counter;\n\n    //! Value for effective_capacity that denotes unbounded queue.\n    static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // unary minus operator applied to unsigned type, result still unsigned\n    #pragma warning( push )\n    #pragma warning( disable: 4146 )\n#endif\n\nstatic void* static_invalid_page;\n\n//------------------------------------------------------------------------\n// micro_queue\n//------------------------------------------------------------------------\nvoid micro_queue::push( const void* item, ticket k, concurrent_queue_base& base,\n                        concurrent_queue_base::copy_specifics op_type ) {\n    k &= -concurrent_queue_rep::n_queue;\n    page* p = NULL;\n    // find index on page where we would put the data\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );\n    if( !index ) {  // make a new page\n        __TBB_TRY {\n            p = base.allocate_page();\n        } __TBB_CATCH(...) {\n            ++base.my_rep->n_invalid_entries;\n            make_invalid( k );\n            __TBB_RETHROW();\n        }\n        p->mask = 0;\n        p->next = NULL;\n    }\n\n    // wait for my turn\n    if( tail_counter!=k ) // The developer insisted on keeping first check out of the backoff loop\n        for( atomic_backoff b(true);;b.pause() ) {\n            ticket tail = tail_counter;\n            if( tail==k ) break;\n            else if( tail&0x1 ) {\n                // no memory. throws an exception; assumes concurrent_queue_rep::n_queue>1\n                ++base.my_rep->n_invalid_entries;\n                throw_exception( eid_bad_last_alloc );\n            }\n        }\n\n    if( p ) { // page is newly allocated; insert in micro_queue\n        spin_mutex::scoped_lock lock( page_mutex );\n        if( page* q = tail_page )\n            q->next = p;\n        else\n            head_page = p;\n        tail_page = p;\n    }\n\n    if (item) {\n        p = tail_page;\n        ITT_NOTIFY( sync_acquired, p );\n        __TBB_TRY {\n            if( concurrent_queue_base::copy == op_type ) {\n                base.copy_item( *p, index, item );\n            } else {\n                __TBB_ASSERT( concurrent_queue_base::move == op_type, NULL );\n                static_cast<concurrent_queue_base_v8&>(base).move_item( *p, index, item );\n            }\n        }  __TBB_CATCH(...) {\n            ++base.my_rep->n_invalid_entries;\n            tail_counter += concurrent_queue_rep::n_queue;\n            __TBB_RETHROW();\n        }\n        ITT_NOTIFY( sync_releasing, p );\n        // If no exception was thrown, mark item as present.\n        p->mask |= uintptr_t(1)<<index;\n    }\n    else // no item; this was called from abort_push\n        ++base.my_rep->n_invalid_entries;\n\n    tail_counter += concurrent_queue_rep::n_queue;\n}\n\n\nvoid micro_queue::abort_push( ticket k, concurrent_queue_base& base ) {\n    push(NULL, k, base, concurrent_queue_base::copy);\n}\n\nbool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {\n    k &= -concurrent_queue_rep::n_queue;\n    spin_wait_until_eq( head_counter, k );\n    spin_wait_while_eq( tail_counter, k );\n    page *p = head_page;\n    __TBB_ASSERT( p, NULL );\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep::n_queue, base.items_per_page );\n    bool success = false;\n    {\n        micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? p : NULL );\n        if( p->mask & uintptr_t(1)<<index ) {\n            success = true;\n            ITT_NOTIFY( sync_acquired, dst );\n            ITT_NOTIFY( sync_acquired, head_page );\n            base.assign_and_destroy_item( dst, *p, index );\n            ITT_NOTIFY( sync_releasing, head_page );\n        } else {\n            --base.my_rep->n_invalid_entries;\n        }\n    }\n    return success;\n}\n\nmicro_queue& micro_queue::assign( const micro_queue& src, concurrent_queue_base& base,\n                                  concurrent_queue_base::copy_specifics op_type )\n{\n    head_counter = src.head_counter;\n    tail_counter = src.tail_counter;\n\n    const page* srcp = src.head_page;\n    if( srcp ) {\n        ticket g_index = head_counter;\n        __TBB_TRY {\n            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep::n_queue;\n            size_t index = modulo_power_of_two( head_counter/concurrent_queue_rep::n_queue, base.items_per_page );\n            size_t end_in_first_page = (index+n_items<base.items_per_page)?(index+n_items):base.items_per_page;\n\n            head_page = make_copy( base, srcp, index, end_in_first_page, g_index, op_type );\n            page* cur_page = head_page;\n\n            if( srcp != src.tail_page ) {\n                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {\n                    cur_page->next = make_copy( base, srcp, 0, base.items_per_page, g_index, op_type );\n                    cur_page = cur_page->next;\n                }\n\n                __TBB_ASSERT( srcp==src.tail_page, NULL );\n\n                size_t last_index = modulo_power_of_two( tail_counter/concurrent_queue_rep::n_queue, base.items_per_page );\n                if( last_index==0 ) last_index = base.items_per_page;\n\n                cur_page->next = make_copy( base, srcp, 0, last_index, g_index, op_type );\n                cur_page = cur_page->next;\n            }\n            tail_page = cur_page;\n        } __TBB_CATCH(...) {\n            make_invalid( g_index );\n            __TBB_RETHROW();\n        }\n    } else {\n        head_page = tail_page = NULL;\n    }\n    return *this;\n}\n\nconcurrent_queue_base::page* micro_queue::make_copy( concurrent_queue_base& base,\n    const concurrent_queue_base::page* src_page, size_t begin_in_page, size_t end_in_page,\n    ticket& g_index, concurrent_queue_base::copy_specifics op_type )\n{\n    page* new_page = base.allocate_page();\n    new_page->next = NULL;\n    new_page->mask = src_page->mask;\n    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )\n        if( new_page->mask & uintptr_t(1)<<begin_in_page ) {\n            if( concurrent_queue_base::copy == op_type ) {\n                base.copy_page_item( *new_page, begin_in_page, *src_page, begin_in_page );\n            } else {\n                __TBB_ASSERT( concurrent_queue_base::move == op_type, NULL );\n                static_cast<concurrent_queue_base_v8&>(base).move_page_item( *new_page, begin_in_page, *src_page, begin_in_page );\n            }\n        }\n    return new_page;\n}\n\nvoid micro_queue::make_invalid( ticket k )\n{\n    static concurrent_queue_base::page dummy = {static_cast<page*>((void*)1), 0};\n    // mark it so that no more pushes are allowed.\n    static_invalid_page = &dummy;\n    {\n        spin_mutex::scoped_lock lock( page_mutex );\n        tail_counter = k+concurrent_queue_rep::n_queue+1;\n        if( page* q = tail_page )\n            q->next = static_cast<page*>(static_invalid_page);\n        else\n            head_page = static_cast<page*>(static_invalid_page);\n        tail_page = static_cast<page*>(static_invalid_page);\n    }\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4146 is back\n\n//------------------------------------------------------------------------\n// concurrent_queue_base\n//------------------------------------------------------------------------\nconcurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_sz ) {\n    items_per_page = item_sz<=  8 ? 32 :\n                     item_sz<= 16 ? 16 :\n                     item_sz<= 32 ?  8 :\n                     item_sz<= 64 ?  4 :\n                     item_sz<=128 ?  2 :\n                     1;\n    my_capacity = size_t(-1)/(item_sz>1 ? item_sz : 2);\n    my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);\n    __TBB_ASSERT( is_aligned(my_rep, NFS_GetLineSize()), \"alignment error\" );\n    __TBB_ASSERT( is_aligned(&my_rep->head_counter, NFS_GetLineSize()), \"alignment error\" );\n    __TBB_ASSERT( is_aligned(&my_rep->tail_counter, NFS_GetLineSize()), \"alignment error\" );\n    __TBB_ASSERT( is_aligned(&my_rep->array, NFS_GetLineSize()), \"alignment error\" );\n    memset(static_cast<void*>(my_rep),0,sizeof(concurrent_queue_rep));\n    new ( &my_rep->items_avail ) concurrent_monitor();\n    new ( &my_rep->slots_avail ) concurrent_monitor();\n    this->item_size = item_sz;\n}\n\nconcurrent_queue_base_v3::~concurrent_queue_base_v3() {\n    size_t nq = my_rep->n_queue;\n    for( size_t i=0; i<nq; i++ )\n        __TBB_ASSERT( my_rep->array[i].tail_page==NULL, \"pages were not freed properly\" );\n    cache_aligned_allocator<concurrent_queue_rep>().deallocate(my_rep,1);\n}\n\nvoid concurrent_queue_base_v3::internal_push( const void* src ) {\n    internal_insert_item( src, copy );\n}\n\nvoid concurrent_queue_base_v8::internal_push_move( const void* src ) {\n   internal_insert_item( src, move );\n}\n\nvoid concurrent_queue_base_v3::internal_insert_item( const void* src, copy_specifics op_type ) {\n    concurrent_queue_rep& r = *my_rep;\n    unsigned old_abort_counter = r.abort_counter;\n    ticket k = r.tail_counter++;\n    ptrdiff_t e = my_capacity;\n#if DO_ITT_NOTIFY\n    bool sync_prepare_done = false;\n#endif\n    if( (ptrdiff_t)(k-r.head_counter)>=e ) { // queue is full\n#if DO_ITT_NOTIFY\n        if( !sync_prepare_done ) {\n            ITT_NOTIFY( sync_prepare, &sync_prepare_done );\n            sync_prepare_done = true;\n        }\n#endif\n        bool slept = false;\n        concurrent_monitor::thread_context thr_ctx;\n        r.slots_avail.prepare_wait( thr_ctx, ((ptrdiff_t)(k-e)) );\n        while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(e = my_capacity) ) {\n            __TBB_TRY {\n                if( r.abort_counter!=old_abort_counter ) {\n                    r.slots_avail.cancel_wait( thr_ctx );\n                    throw_exception( eid_user_abort );\n                }\n                slept = r.slots_avail.commit_wait( thr_ctx );\n            } __TBB_CATCH( tbb::user_abort& ) {\n                r.choose(k).abort_push(k, *this);\n                __TBB_RETHROW();\n            } __TBB_CATCH(...) {\n                __TBB_RETHROW();\n            }\n            if (slept == true) break;\n            r.slots_avail.prepare_wait( thr_ctx, ((ptrdiff_t)(k-e)) );\n        }\n        if( !slept )\n            r.slots_avail.cancel_wait( thr_ctx );\n    }\n    ITT_NOTIFY( sync_acquired, &sync_prepare_done );\n    __TBB_ASSERT( (ptrdiff_t)(k-r.head_counter)<my_capacity, NULL);\n    r.choose( k ).push( src, k, *this, op_type );\n    r.items_avail.notify( predicate_leq(k) );\n}\n\nvoid concurrent_queue_base_v3::internal_pop( void* dst ) {\n    concurrent_queue_rep& r = *my_rep;\n    ticket k;\n#if DO_ITT_NOTIFY\n    bool sync_prepare_done = false;\n#endif\n    unsigned old_abort_counter = r.abort_counter;\n    // This loop is a single pop operation; abort_counter should not be re-read inside\n    do {\n        k=r.head_counter++;\n        if ( (ptrdiff_t)(r.tail_counter-k)<=0 ) { // queue is empty\n#if DO_ITT_NOTIFY\n            if( !sync_prepare_done ) {\n                ITT_NOTIFY( sync_prepare, dst );\n                sync_prepare_done = true;\n            }\n#endif\n            bool slept = false;\n            concurrent_monitor::thread_context thr_ctx;\n            r.items_avail.prepare_wait( thr_ctx, k );\n            while( (ptrdiff_t)(r.tail_counter-k)<=0 ) {\n                __TBB_TRY {\n                    if( r.abort_counter!=old_abort_counter ) {\n                        r.items_avail.cancel_wait( thr_ctx );\n                        throw_exception( eid_user_abort );\n                    }\n                    slept = r.items_avail.commit_wait( thr_ctx );\n                } __TBB_CATCH( tbb::user_abort& ) {\n                    r.head_counter--;\n                    __TBB_RETHROW();\n                } __TBB_CATCH(...) {\n                    __TBB_RETHROW();\n                }\n                if (slept == true) break;\n                r.items_avail.prepare_wait( thr_ctx, k );\n            }\n            if( !slept )\n                r.items_avail.cancel_wait( thr_ctx );\n        }\n        __TBB_ASSERT((ptrdiff_t)(r.tail_counter-k)>0, NULL);\n    } while( !r.choose(k).pop(dst,k,*this) );\n\n    // wake up a producer..\n    r.slots_avail.notify( predicate_leq(k) );\n}\n\nvoid concurrent_queue_base_v3::internal_abort() {\n    concurrent_queue_rep& r = *my_rep;\n    ++r.abort_counter;\n    r.items_avail.abort_all();\n    r.slots_avail.abort_all();\n}\n\nbool concurrent_queue_base_v3::internal_pop_if_present( void* dst ) {\n    concurrent_queue_rep& r = *my_rep;\n    ticket k;\n    do {\n        k = r.head_counter;\n        for(;;) {\n            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {\n                // Queue is empty\n                return false;\n            }\n            // Queue had item with ticket k when we looked.  Attempt to get that item.\n            ticket tk=k;\n            k = r.head_counter.compare_and_swap( tk+1, tk );\n            if( k==tk )\n                break;\n            // Another thread snatched the item, retry.\n        }\n    } while( !r.choose( k ).pop( dst, k, *this ) );\n\n    r.slots_avail.notify( predicate_leq(k) );\n\n    return true;\n}\n\nbool concurrent_queue_base_v3::internal_push_if_not_full( const void* src ) {\n    return internal_insert_if_not_full( src, copy );\n}\n\nbool concurrent_queue_base_v8::internal_push_move_if_not_full( const void* src ) {\n    return internal_insert_if_not_full( src, move );\n}\n\nbool concurrent_queue_base_v3::internal_insert_if_not_full( const void* src, copy_specifics op_type ) {\n    concurrent_queue_rep& r = *my_rep;\n    ticket k = r.tail_counter;\n    for(;;) {\n        if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {\n            // Queue is full\n            return false;\n        }\n        // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.\n        ticket tk=k;\n        k = r.tail_counter.compare_and_swap( tk+1, tk );\n        if( k==tk )\n            break;\n        // Another thread claimed the slot, so retry.\n    }\n    r.choose(k).push(src, k, *this, op_type);\n    r.items_avail.notify( predicate_leq(k) );\n    return true;\n}\n\nptrdiff_t concurrent_queue_base_v3::internal_size() const {\n    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );\n    return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter-my_rep->n_invalid_entries);\n}\n\nbool concurrent_queue_base_v3::internal_empty() const {\n    ticket tc = my_rep->tail_counter;\n    ticket hc = my_rep->head_counter;\n    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.\n    return ( tc==my_rep->tail_counter && ptrdiff_t(tc-hc-my_rep->n_invalid_entries)<=0 );\n}\n\nvoid concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t /*item_sz*/ ) {\n    my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;\n}\n\nvoid concurrent_queue_base_v3::internal_finish_clear() {\n    size_t nq = my_rep->n_queue;\n    for( size_t i=0; i<nq; ++i ) {\n        page* tp = my_rep->array[i].tail_page;\n        __TBB_ASSERT( my_rep->array[i].head_page==tp, \"at most one page should remain\" );\n        if( tp!=NULL) {\n            if( tp!=static_invalid_page ) deallocate_page( tp );\n            my_rep->array[i].tail_page = NULL;\n        }\n    }\n}\n\nvoid concurrent_queue_base_v3::internal_throw_exception() const {\n    throw_exception( eid_bad_alloc );\n}\n\nvoid concurrent_queue_base_v3::internal_assign( const concurrent_queue_base& src, copy_specifics op_type ) {\n    items_per_page = src.items_per_page;\n    my_capacity = src.my_capacity;\n\n    // copy concurrent_queue_rep.\n    my_rep->head_counter = src.my_rep->head_counter;\n    my_rep->tail_counter = src.my_rep->tail_counter;\n    my_rep->n_invalid_entries = src.my_rep->n_invalid_entries;\n    my_rep->abort_counter = src.my_rep->abort_counter;\n\n    // copy micro_queues\n    for( size_t i = 0; i<my_rep->n_queue; ++i )\n        my_rep->array[i].assign( src.my_rep->array[i], *this, op_type );\n\n    __TBB_ASSERT( my_rep->head_counter==src.my_rep->head_counter && my_rep->tail_counter==src.my_rep->tail_counter,\n            \"the source concurrent queue should not be concurrently modified.\" );\n}\n\nvoid concurrent_queue_base_v3::assign( const concurrent_queue_base& src ) {\n    internal_assign( src, copy );\n}\n\nvoid concurrent_queue_base_v8::move_content( concurrent_queue_base_v8& src ) {\n    internal_assign( src, move );\n}\n\n//------------------------------------------------------------------------\n// concurrent_queue_iterator_rep\n//------------------------------------------------------------------------\nclass concurrent_queue_iterator_rep: no_assign {\npublic:\n    ticket head_counter;\n    const concurrent_queue_base& my_queue;\n    const size_t offset_of_last;\n    concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];\n    concurrent_queue_iterator_rep( const concurrent_queue_base& queue, size_t offset_of_last_ ) :\n        head_counter(queue.my_rep->head_counter),\n        my_queue(queue),\n        offset_of_last(offset_of_last_)\n    {\n        const concurrent_queue_rep& rep = *queue.my_rep;\n        for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )\n            array[k] = rep.array[k].head_page;\n    }\n    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.\n    bool get_item( void*& item, size_t k ) {\n        if( k==my_queue.my_rep->tail_counter ) {\n            item = NULL;\n            return true;\n        } else {\n            concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];\n            __TBB_ASSERT(p,NULL);\n            size_t i = modulo_power_of_two( k/concurrent_queue_rep::n_queue, my_queue.items_per_page );\n            item = static_cast<unsigned char*>(static_cast<void*>(p)) + offset_of_last + my_queue.item_size*i;\n            return (p->mask & uintptr_t(1)<<i)!=0;\n        }\n    }\n};\n\n//------------------------------------------------------------------------\n// concurrent_queue_iterator_base\n//------------------------------------------------------------------------\n\nvoid concurrent_queue_iterator_base_v3::initialize( const concurrent_queue_base& queue, size_t offset_of_last ) {\n    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep>().allocate(1);\n    new( my_rep ) concurrent_queue_iterator_rep(queue,offset_of_last);\n    size_t k = my_rep->head_counter;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\nconcurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue ) {\n    initialize(queue,0);\n}\n\nconcurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue, size_t offset_of_last ) {\n    initialize(queue,offset_of_last);\n}\n\nvoid concurrent_queue_iterator_base_v3::assign( const concurrent_queue_iterator_base& other ) {\n    if( my_rep!=other.my_rep ) {\n        if( my_rep ) {\n            cache_aligned_allocator<concurrent_queue_iterator_rep>().deallocate(my_rep, 1);\n            my_rep = NULL;\n        }\n        if( other.my_rep ) {\n            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep>().allocate(1);\n            new( my_rep ) concurrent_queue_iterator_rep( *other.my_rep );\n        }\n    }\n    my_item = other.my_item;\n}\n\nvoid concurrent_queue_iterator_base_v3::advance() {\n    __TBB_ASSERT( my_item, \"attempt to increment iterator past end of queue\" );\n    size_t k = my_rep->head_counter;\n    const concurrent_queue_base& queue = my_rep->my_queue;\n#if TBB_USE_ASSERT\n    void* tmp;\n    my_rep->get_item(tmp,k);\n    __TBB_ASSERT( my_item==tmp, NULL );\n#endif /* TBB_USE_ASSERT */\n    size_t i = modulo_power_of_two( k/concurrent_queue_rep::n_queue, queue.items_per_page );\n    if( i==queue.items_per_page-1 ) {\n        concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];\n        root = root->next;\n    }\n    // advance k\n    my_rep->head_counter = ++k;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\nconcurrent_queue_iterator_base_v3::~concurrent_queue_iterator_base_v3() {\n    //delete my_rep;\n    cache_aligned_allocator<concurrent_queue_iterator_rep>().deallocate(my_rep, 1);\n    my_rep = NULL;\n}\n\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/concurrent_vector.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if (_MSC_VER)\n    //MSVC 10 \"deprecated\" application of some std:: algorithms to raw pointers as not safe.\n    //The reason is that destination is not checked against bounds/having enough place.\n    #define _SCL_SECURE_NO_WARNINGS\n#endif\n\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"tbb_misc.h\"\n#include \"itt_notify.h\"\n\n#include <cstring>\n#include <memory> //for uninitialized_fill_n\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif\n\nusing namespace std;\n\nnamespace tbb {\n\nnamespace internal {\nclass concurrent_vector_base_v3::helper :no_assign {\npublic:\n    //! memory page size\n    static const size_type page_size = 4096;\n\n    inline static bool incompact_predicate(size_type size) { // assert size != 0, see source/test/test_vector_layout.cpp\n        return size < page_size || ((size-1)%page_size < page_size/2 && size < page_size * 128); // for more details\n    }\n\n    inline static size_type find_segment_end(const concurrent_vector_base_v3 &v) {\n        segment_t *s = v.my_segment;\n        segment_index_t u = s==v.my_storage? pointers_per_short_table : pointers_per_long_table;\n        segment_index_t k = 0;\n        while( k < u && (s[k].load<relaxed>()==segment_allocated() ))\n            ++k;\n        return k;\n    }\n\n    // TODO: optimize accesses to my_first_block\n    //! assign first segment size. k - is index of last segment to be allocated, not a count of segments\n    inline static void assign_first_segment_if_necessary(concurrent_vector_base_v3 &v, segment_index_t k) {\n        if( !v.my_first_block ) {\n            /* There was a suggestion to set first segment according to incompact_predicate:\n            while( k && !helper::incompact_predicate(segment_size( k ) * element_size) )\n                --k; // while previous vector size is compact, decrement\n            // reasons to not do it:\n            // * constructor(n) is not ready to accept fragmented segments\n            // * backward compatibility due to that constructor\n            // * current version gives additional guarantee and faster init.\n            // * two calls to reserve() will give the same effect.\n            */\n            v.my_first_block.compare_and_swap(k+1, 0); // store number of segments\n        }\n    }\n\n    inline static void *allocate_segment(concurrent_vector_base_v3 &v, size_type n) {\n        void *ptr = v.vector_allocator_ptr(v, n);\n        if(!ptr) throw_exception(eid_bad_alloc); // check for bad allocation, throw exception\n        return ptr;\n    }\n\n    //! Publish segment so other threads can see it.\n    template<typename argument_type>\n    inline static void publish_segment( segment_t& s, argument_type rhs ) {\n        // see also itt_store_pointer_with_release_v3()\n        ITT_NOTIFY( sync_releasing, &s );\n        s.store<release>(rhs);\n    }\n\n    static size_type enable_segment(concurrent_vector_base_v3 &v, size_type k, size_type element_size, bool mark_as_not_used_on_failure = false);\n\n    // TODO: rename as get_segments_table() and return segment pointer\n    inline static void extend_table_if_necessary(concurrent_vector_base_v3 &v, size_type k, size_type start ) {\n        if(k >= pointers_per_short_table && v.my_segment == v.my_storage)\n            extend_segment_table(v, start );\n    }\n\n    static void extend_segment_table(concurrent_vector_base_v3 &v, size_type start);\n\n    struct segment_not_used_predicate: no_assign {\n        segment_t &s;\n        segment_not_used_predicate(segment_t &segment) : s(segment) {}\n        bool operator()() const { return s.load<relaxed>() == segment_not_used ();}\n    };\n    inline static segment_t& acquire_segment(concurrent_vector_base_v3 &v, size_type index, size_type element_size, bool owner) {\n        segment_t &s = v.my_segment[index]; // TODO: pass v.my_segment as argument\n        if( s.load<acquire>() == segment_not_used() ) { // do not check for segment_allocation_failed state\n            if( owner ) {\n                enable_segment( v, index, element_size );\n            } else {\n                ITT_NOTIFY(sync_prepare, &s);\n                spin_wait_while(segment_not_used_predicate(s));\n                ITT_NOTIFY(sync_acquired, &s);\n            }\n        } else {\n            ITT_NOTIFY(sync_acquired, &s);\n        }\n        enforce_segment_allocated(s.load<relaxed>()); //it's hard to recover correctly after segment_allocation_failed state\n        return s;\n    }\n\n    ///// non-static fields of helper for exception-safe iteration across segments\n    segment_t *table;// TODO: review all segment_index_t as just short type\n    size_type first_block, k, sz, start, finish, element_size;\n    helper(segment_t *segments, size_type fb, size_type esize, size_type index, size_type s, size_type f) throw()\n        : table(segments), first_block(fb), k(index), sz(0), start(s), finish(f), element_size(esize) {}\n    inline void first_segment() throw() {\n        __TBB_ASSERT( start <= finish, NULL );\n        __TBB_ASSERT( first_block || !finish, NULL );\n        if( k < first_block ) k = 0; // process solid segment at a time\n        size_type base = segment_base( k );\n        __TBB_ASSERT( base <= start, NULL );\n        finish -= base; start -= base; // rebase as offsets from segment k\n        sz = k ? base : segment_size( first_block ); // sz==base for k>0\n    }\n    inline void next_segment() throw() {\n        finish -= sz; start = 0; // offsets from next segment\n        if( !k ) k = first_block;\n        else { ++k; sz = segment_size( k ); }\n    }\n    template<typename F>\n    inline size_type apply(const F &func) {\n        first_segment();\n        while( sz < finish ) { // work for more than one segment\n            //TODO: remove extra load() of table[k] inside func\n            func( table[k], table[k].load<relaxed>().pointer<char>() + element_size*start, sz - start );\n            next_segment();\n        }\n        func( table[k], table[k].load<relaxed>().pointer<char>() + element_size*start, finish - start );\n        return k;\n    }\n    inline segment_value_t get_segment_value(size_type index, bool wait) {\n        segment_t &s = table[index];\n        if( wait && (s.load<acquire>() == segment_not_used()) ) {\n            ITT_NOTIFY(sync_prepare, &s);\n            spin_wait_while(segment_not_used_predicate(s));\n            ITT_NOTIFY(sync_acquired, &s);\n        }\n        return s.load<relaxed>();\n    }\n    ~helper() {\n        if( sz >= finish ) return; // the work is done correctly\n        cleanup();\n    }\n\n    //! Out of line code to assists destructor in infrequent cases.\n    void cleanup();\n\n    /// TODO: turn into lambda functions when available\n    struct init_body {\n        internal_array_op2 func;\n        const void *arg;\n        init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}\n        void operator()(segment_t &, void *begin, size_type n) const {\n            func( begin, arg, n );\n        }\n    };\n    struct safe_init_body {\n        internal_array_op2 func;\n        const void *arg;\n        safe_init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}\n        void operator()(segment_t &s, void *begin, size_type n) const {\n            enforce_segment_allocated(s.load<relaxed>());\n            func( begin, arg, n );\n        }\n    };\n    struct destroy_body {\n        internal_array_op1 func;\n        destroy_body(internal_array_op1 destroy) : func(destroy) {}\n        void operator()(segment_t &s, void *begin, size_type n) const {\n            if(s.load<relaxed>() == segment_allocated())\n                func( begin, n );\n        }\n    };\n}; // class helper\n\nvoid concurrent_vector_base_v3::helper::extend_segment_table(concurrent_vector_base_v3 &v, concurrent_vector_base_v3::size_type start) {\n    if( start > segment_size(pointers_per_short_table) ) start = segment_size(pointers_per_short_table);\n    // If other threads are trying to set pointers in the short segment, wait for them to finish their\n    // assignments before we copy the short segment to the long segment. Note: grow_to_at_least depends on it\n    for( segment_index_t i = 0; segment_base(i) < start && v.my_segment == v.my_storage; i++ ){\n        if(v.my_storage[i].load<relaxed>() == segment_not_used()) {\n            ITT_NOTIFY(sync_prepare, &v.my_storage[i]);\n            atomic_backoff backoff(true);\n            while( v.my_segment == v.my_storage && (v.my_storage[i].load<relaxed>() == segment_not_used()) )\n                backoff.pause();\n            ITT_NOTIFY(sync_acquired, &v.my_storage[i]);\n        }\n    }\n    if( v.my_segment != v.my_storage ) return;\n\n    segment_t* new_segment_table = (segment_t*)NFS_Allocate( pointers_per_long_table, sizeof(segment_t), NULL );\n    __TBB_ASSERT(new_segment_table, \"NFS_Allocate should throws exception if it cannot allocate the requested storage, and not returns zero pointer\" );\n    std::uninitialized_fill_n(new_segment_table,size_t(pointers_per_long_table),segment_t()); //init newly allocated table\n   //TODO: replace with static assert\n    __TBB_STATIC_ASSERT(pointers_per_long_table >= pointers_per_short_table, \"size of the big table should be not lesser than of the small one, as we copy values to it\" );\n    std::copy(v.my_storage, v.my_storage+pointers_per_short_table, new_segment_table);//copy values from old table, here operator= of segment_t is used\n    if( v.my_segment.compare_and_swap( new_segment_table, v.my_storage ) != v.my_storage )\n        NFS_Free( new_segment_table );\n    // else TODO: add ITT_NOTIFY signals for v.my_segment?\n}\n\nconcurrent_vector_base_v3::size_type concurrent_vector_base_v3::helper::enable_segment(concurrent_vector_base_v3 &v, concurrent_vector_base_v3::size_type k, concurrent_vector_base_v3::size_type element_size,\n        bool mark_as_not_used_on_failure ) {\n\n    struct segment_scope_guard : no_copy{\n        segment_t* my_segment_ptr;\n        bool my_mark_as_not_used;\n        segment_scope_guard(segment_t& segment, bool mark_as_not_used) : my_segment_ptr(&segment), my_mark_as_not_used(mark_as_not_used){}\n        void dismiss(){ my_segment_ptr = 0;}\n        ~segment_scope_guard(){\n            if (my_segment_ptr){\n                if (!my_mark_as_not_used){\n                    publish_segment(*my_segment_ptr, segment_allocation_failed());\n                }else{\n                    publish_segment(*my_segment_ptr, segment_not_used());\n                }\n            }\n        }\n    };\n\n    segment_t* s = v.my_segment; // TODO: optimize out as argument? Optimize accesses to my_first_block\n    __TBB_ASSERT(s[k].load<relaxed>() != segment_allocated(), \"concurrent operation during growth?\");\n\n    size_type size_of_enabled_segment =  segment_size(k);\n    size_type size_to_allocate = size_of_enabled_segment;\n    if( !k ) {\n        assign_first_segment_if_necessary(v, default_initial_segments-1);\n        size_of_enabled_segment =  2 ;\n        size_to_allocate = segment_size(v.my_first_block);\n\n    } else  {\n        spin_wait_while_eq( v.my_first_block, segment_index_t(0) );\n    }\n\n    if( k && (k < v.my_first_block)){ //no need to allocate anything\n        // s[0].array is changed only once ( 0 -> !0 ) and points to uninitialized memory\n        segment_value_t array0 = s[0].load<acquire>();\n        if(array0 == segment_not_used()){\n            // sync_prepare called only if there is a wait\n            ITT_NOTIFY(sync_prepare, &s[0]);\n            spin_wait_while( segment_not_used_predicate(s[0]));\n            array0 = s[0].load<acquire>();\n        }\n        ITT_NOTIFY(sync_acquired, &s[0]);\n\n        segment_scope_guard k_segment_guard(s[k], false);\n        enforce_segment_allocated(array0); // initial segment should be allocated\n        k_segment_guard.dismiss();\n\n        publish_segment( s[k],\n            static_cast<void*>(array0.pointer<char>() + segment_base(k)*element_size )\n        );\n    } else {\n        segment_scope_guard k_segment_guard(s[k], mark_as_not_used_on_failure);\n        publish_segment(s[k], allocate_segment(v, size_to_allocate));\n        k_segment_guard.dismiss();\n    }\n    return size_of_enabled_segment;\n}\n\nvoid concurrent_vector_base_v3::helper::cleanup() {\n    if( !sz ) { // allocation failed, restore the table\n        segment_index_t k_start = k, k_end = segment_index_of(finish-1);\n        if( segment_base( k_start ) < start )\n            get_segment_value(k_start++, true); // wait\n        if( k_start < first_block ) {\n            segment_value_t segment0 = get_segment_value(0, start>0); // wait if necessary\n            if((segment0 != segment_not_used()) && !k_start ) ++k_start;\n            if(segment0 != segment_allocated())\n                for(; k_start < first_block && k_start <= k_end; ++k_start )\n                    publish_segment(table[k_start], segment_allocation_failed());\n            else for(; k_start < first_block && k_start <= k_end; ++k_start )\n                    publish_segment(table[k_start], static_cast<void*>(\n                        (segment0.pointer<char>()) + segment_base(k_start)*element_size) );\n        }\n        for(; k_start <= k_end; ++k_start ) // not in first block\n            if(table[k_start].load<acquire>() == segment_not_used())\n                publish_segment(table[k_start], segment_allocation_failed());\n        // fill allocated items\n        first_segment();\n        goto recover;\n    }\n    while( sz <= finish ) { // there is still work for at least one segment\n        next_segment();\nrecover:\n        segment_value_t array = table[k].load<relaxed>();\n        if(array == segment_allocated())\n            std::memset( (array.pointer<char>()) + element_size*start, 0, ((sz<finish?sz:finish) - start)*element_size );\n        else __TBB_ASSERT( array == segment_allocation_failed(), NULL );\n    }\n}\n\nconcurrent_vector_base_v3::~concurrent_vector_base_v3() {\n    segment_t* s = my_segment;\n    if( s != my_storage ) {\n#if TBB_USE_ASSERT\n        //to please assert in segment_t destructor\n        std::fill_n(my_storage,size_t(pointers_per_short_table),segment_t());\n#endif /* TBB_USE_ASSERT */\n#if TBB_USE_DEBUG\n        for( segment_index_t i = 0; i < pointers_per_long_table; i++)\n            __TBB_ASSERT( my_segment[i].load<relaxed>() != segment_allocated(), \"Segment should have been freed. Please recompile with new TBB before using exceptions.\");\n#endif\n        my_segment = my_storage;\n        NFS_Free( s );\n    }\n}\n\nconcurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_capacity() const {\n    return segment_base( helper::find_segment_end(*this) );\n}\n\nvoid concurrent_vector_base_v3::internal_throw_exception(size_type t) const {\n    switch(t) {\n        case 0: throw_exception(eid_out_of_range);\n        case 1: throw_exception(eid_segment_range_error);\n        case 2: throw_exception(eid_index_range_error);\n    }\n}\n\nvoid concurrent_vector_base_v3::internal_reserve( size_type n, size_type element_size, size_type max_size ) {\n    if( n>max_size )\n        throw_exception(eid_reservation_length_error);\n    __TBB_ASSERT( n, NULL );\n    helper::assign_first_segment_if_necessary(*this, segment_index_of(n-1));\n    segment_index_t k = helper::find_segment_end(*this);\n\n    for( ; segment_base(k)<n; ++k ) {\n        helper::extend_table_if_necessary(*this, k, 0);\n        if(my_segment[k].load<relaxed>() != segment_allocated())\n            helper::enable_segment(*this, k, element_size, true ); //in case of failure mark segments as not used\n    }\n}\n\n//TODO: Looks like atomic loads can be done relaxed here, as the only place this method is called from\n//is the constructor, which does not require synchronization (for more details see comment in the\n// concurrent_vector_base constructor).\nvoid concurrent_vector_base_v3::internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy ) {\n    size_type n = src.my_early_size;\n    __TBB_ASSERT( my_segment == my_storage, NULL);\n    if( n ) {\n        helper::assign_first_segment_if_necessary(*this, segment_index_of(n-1));\n        size_type b;\n        for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {\n            if( (src.my_segment.load<acquire>() == src.my_storage && k >= pointers_per_short_table)\n                || (src.my_segment[k].load<relaxed>() != segment_allocated())) {\n                my_early_size = b; break;\n            }\n            helper::extend_table_if_necessary(*this, k, 0);\n            size_type m = helper::enable_segment(*this, k, element_size);\n            if( m > n-b ) m = n-b;\n            my_early_size = b+m;\n            copy( my_segment[k].load<relaxed>().pointer<void>(), src.my_segment[k].load<relaxed>().pointer<void>(), m );\n        }\n    }\n}\n\nvoid concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {\n    size_type n = src.my_early_size;\n    while( my_early_size>n ) { // TODO: improve\n        segment_index_t k = segment_index_of( my_early_size-1 );\n        size_type b=segment_base(k);\n        size_type new_end = b>=n ? b : n;\n        __TBB_ASSERT( my_early_size>new_end, NULL );\n        enforce_segment_allocated(my_segment[k].load<relaxed>()); //if vector was broken before\n        // destructors are supposed to not throw any exceptions\n        destroy( my_segment[k].load<relaxed>().pointer<char>() + element_size*(new_end-b), my_early_size-new_end );\n        my_early_size = new_end;\n    }\n    size_type dst_initialized_size = my_early_size;\n    my_early_size = n;\n    helper::assign_first_segment_if_necessary(*this, segment_index_of(n));\n    size_type b;\n    for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {\n        if( (src.my_segment.load<acquire>() == src.my_storage && k >= pointers_per_short_table)\n            || src.my_segment[k].load<relaxed>() != segment_allocated() ) { // if source is damaged\n                my_early_size = b; break; // TODO: it may cause undestructed items\n        }\n        helper::extend_table_if_necessary(*this, k, 0);\n        if( my_segment[k].load<relaxed>() == segment_not_used())\n            helper::enable_segment(*this, k, element_size);\n        else\n            enforce_segment_allocated(my_segment[k].load<relaxed>());\n        size_type m = k? segment_size(k) : 2;\n        if( m > n-b ) m = n-b;\n        size_type a = 0;\n        if( dst_initialized_size>b ) {\n            a = dst_initialized_size-b;\n            if( a>m ) a = m;\n            assign( my_segment[k].load<relaxed>().pointer<void>(), src.my_segment[k].load<relaxed>().pointer<void>(), a );\n            m -= a;\n            a *= element_size;\n        }\n        if( m>0 )\n            copy( my_segment[k].load<relaxed>().pointer<char>() + a, src.my_segment[k].load<relaxed>().pointer<char>() + a, m );\n    }\n    __TBB_ASSERT( src.my_early_size==n, \"detected use of concurrent_vector::operator= with right side that was concurrently modified\" );\n}\n\nvoid* concurrent_vector_base_v3::internal_push_back( size_type element_size, size_type& index ) {\n    __TBB_ASSERT( sizeof(my_early_size)==sizeof(uintptr_t), NULL );\n    size_type tmp = my_early_size.fetch_and_increment<acquire>();\n    index = tmp;\n    segment_index_t k_old = segment_index_of( tmp );\n    size_type base = segment_base(k_old);\n    helper::extend_table_if_necessary(*this, k_old, tmp);\n    segment_t& s = helper::acquire_segment(*this, k_old, element_size, base==tmp);\n    size_type j_begin = tmp-base;\n    return (void*)(s.load<relaxed>().pointer<char>() + element_size*j_begin);\n}\n\nvoid concurrent_vector_base_v3::internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src ) {\n    internal_grow_to_at_least_with_result( new_size, element_size, init, src );\n}\n\nconcurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src ) {\n    size_type e = my_early_size;\n    while( e<new_size ) {\n        size_type f = my_early_size.compare_and_swap(new_size,e);\n        if( f==e ) {\n            internal_grow( e, new_size, element_size, init, src );\n            break;\n        }\n        e = f;\n    }\n    // Check/wait for segments allocation completes\n    segment_index_t i, k_old = segment_index_of( new_size-1 );\n    if( k_old >= pointers_per_short_table && my_segment == my_storage ) {\n        spin_wait_while_eq( my_segment, my_storage );\n    }\n    for( i = 0; i <= k_old; ++i ) {\n        segment_t &s = my_segment[i];\n        if(s.load<relaxed>() == segment_not_used()) {\n            ITT_NOTIFY(sync_prepare, &s);\n            atomic_backoff backoff(true);\n            while( my_segment[i].load<acquire>() == segment_not_used() ) // my_segment may change concurrently\n                backoff.pause();\n            ITT_NOTIFY(sync_acquired, &s);\n        }\n        enforce_segment_allocated(my_segment[i].load<relaxed>());\n    }\n#if TBB_USE_DEBUG\n    size_type capacity = internal_capacity();\n    __TBB_ASSERT( capacity >= new_size, NULL);\n#endif\n    return e;\n}\n\nconcurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src ) {\n    size_type result = my_early_size.fetch_and_add(delta);\n    internal_grow( result, result+delta, element_size, init, src );\n    return result;\n}\n\nvoid concurrent_vector_base_v3::internal_grow( const size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src ) {\n    __TBB_ASSERT( start<finish, \"start must be less than finish\" );\n    segment_index_t k_start = segment_index_of(start), k_end = segment_index_of(finish-1);\n    helper::assign_first_segment_if_necessary(*this, k_end);\n    helper::extend_table_if_necessary(*this, k_end, start);\n    helper range(my_segment, my_first_block, element_size, k_start, start, finish);\n    for(; k_end > k_start && k_end >= range.first_block; --k_end ) // allocate segments in reverse order\n        helper::acquire_segment(*this, k_end, element_size, true/*for k_end>k_start*/);\n    for(; k_start <= k_end; ++k_start ) // but allocate first block in straight order\n        helper::acquire_segment(*this, k_start, element_size, segment_base( k_start ) >= start );\n    range.apply( helper::init_body(init, src) );\n}\n\nvoid concurrent_vector_base_v3::internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,\n                                                internal_array_op1 destroy, internal_array_op2 init ) {\n    size_type j = my_early_size;\n    if( n > j ) { // construct items\n        internal_reserve(n, element_size, max_size);\n        my_early_size = n;\n        helper for_each(my_segment, my_first_block, element_size, segment_index_of(j), j, n);\n        for_each.apply( helper::safe_init_body(init, src) );\n    } else {\n        my_early_size = n;\n        helper for_each(my_segment, my_first_block, element_size, segment_index_of(n), n, j);\n        for_each.apply( helper::destroy_body(destroy) );\n    }\n}\n\nconcurrent_vector_base_v3::segment_index_t concurrent_vector_base_v3::internal_clear( internal_array_op1 destroy ) {\n    __TBB_ASSERT( my_segment, NULL );\n    size_type j = my_early_size;\n    my_early_size = 0;\n    helper for_each(my_segment, my_first_block, 0, 0, 0, j); // element_size is safe to be zero if 'start' is zero\n    j = for_each.apply( helper::destroy_body(destroy) );\n    size_type i = helper::find_segment_end(*this);\n    return j < i? i : j+1;\n}\n\nvoid *concurrent_vector_base_v3::internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy )\n{\n    const size_type my_size = my_early_size;\n    const segment_index_t k_end = helper::find_segment_end(*this); // allocated segments\n    const segment_index_t k_stop = my_size? segment_index_of(my_size-1) + 1 : 0; // number of segments to store existing items: 0=>0; 1,2=>1; 3,4=>2; [5-8]=>3;..\n    const segment_index_t first_block = my_first_block; // number of merged segments, getting values from atomics\n\n    segment_index_t k = first_block;\n    if(k_stop < first_block)\n        k = k_stop;\n    else\n        while (k < k_stop && helper::incompact_predicate(segment_size( k ) * element_size) ) k++;\n    if(k_stop == k_end && k == first_block)\n        return NULL;\n\n    segment_t *const segment_table = my_segment;\n    internal_segments_table &old = *static_cast<internal_segments_table*>( table );\n    //this call is left here for sake of backward compatibility, and as a placeholder for table initialization\n    std::fill_n(old.table,sizeof(old.table)/sizeof(old.table[0]),segment_t());\n    old.first_block=0;\n\n    if ( k != first_block && k ) // first segment optimization\n    {\n        // exception can occur here\n        void *seg = helper::allocate_segment(*this, segment_size(k));\n        old.table[0].store<relaxed>(seg);\n        old.first_block = k; // fill info for freeing new segment if exception occurs\n        // copy items to the new segment\n        size_type my_segment_size = segment_size( first_block );\n        for (segment_index_t i = 0, j = 0; i < k && j < my_size; j = my_segment_size) {\n            __TBB_ASSERT( segment_table[i].load<relaxed>() == segment_allocated(), NULL);\n            void *s = static_cast<void*>(\n                static_cast<char*>(seg) + segment_base(i)*element_size );\n            //TODO: refactor to use std::min\n            if(j + my_segment_size >= my_size) my_segment_size = my_size - j;\n            __TBB_TRY { // exception can occur here\n                copy( s, segment_table[i].load<relaxed>().pointer<void>(), my_segment_size );\n            } __TBB_CATCH(...) { // destroy all the already copied items\n                helper for_each(&old.table[0], old.first_block, element_size,\n                    0, 0, segment_base(i)+ my_segment_size);\n                for_each.apply( helper::destroy_body(destroy) );\n                __TBB_RETHROW();\n            }\n            my_segment_size = i? segment_size( ++i ) : segment_size( i = first_block );\n        }\n        // commit the changes\n        std::copy(segment_table,segment_table + k,old.table);\n        for (segment_index_t i = 0; i < k; i++) {\n            segment_table[i].store<relaxed>(static_cast<void*>(\n                static_cast<char*>(seg) + segment_base(i)*element_size ));\n        }\n        old.first_block = first_block; my_first_block = k; // now, first_block != my_first_block\n        // destroy original copies\n        my_segment_size = segment_size( first_block ); // old.first_block actually\n        for (segment_index_t i = 0, j = 0; i < k && j < my_size; j = my_segment_size) {\n            if(j + my_segment_size >= my_size) my_segment_size = my_size - j;\n            // destructors are supposed to not throw any exceptions\n            destroy( old.table[i].load<relaxed>().pointer<void>(), my_segment_size );\n            my_segment_size = i? segment_size( ++i ) : segment_size( i = first_block );\n        }\n    }\n    // free unnecessary segments allocated by reserve() call\n    if ( k_stop < k_end ) {\n        old.first_block = first_block;\n        std::copy(segment_table+k_stop, segment_table+k_end, old.table+k_stop );\n        std::fill_n(segment_table+k_stop, (k_end-k_stop), segment_t());\n        if( !k ) my_first_block = 0;\n    }\n    return table;\n}\n\nvoid concurrent_vector_base_v3::internal_swap(concurrent_vector_base_v3& v)\n{\n    size_type my_sz = my_early_size.load<acquire>();\n    size_type v_sz = v.my_early_size.load<relaxed>();\n    if(!my_sz && !v_sz) return;\n\n    bool my_was_short = (my_segment.load<relaxed>() == my_storage);\n    bool v_was_short  = (v.my_segment.load<relaxed>() == v.my_storage);\n\n    //In C++11, this would be: swap(my_storage, v.my_storage);\n    for (int i=0; i < pointers_per_short_table; ++i){\n        swap(my_storage[i], v.my_storage[i]);\n    }\n    tbb::internal::swap<relaxed>(my_first_block, v.my_first_block);\n    tbb::internal::swap<relaxed>(my_segment, v.my_segment);\n    if (my_was_short){\n        v.my_segment.store<relaxed>(v.my_storage);\n    }\n    if(v_was_short){\n        my_segment.store<relaxed>(my_storage);\n    }\n\n    my_early_size.store<relaxed>(v_sz);\n    v.my_early_size.store<release>(my_sz);\n}\n\n} // namespace internal\n\n} // tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/condition_variable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include \"tbb/compat/condition_variable\"\n#include \"tbb/atomic.h\"\n#include \"tbb_misc.h\"\n#include \"dynamic_link.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\n\nnamespace internal {\n\n//condition_variable\n#if _WIN32||_WIN64\nusing tbb::interface5::internal::condition_variable_using_event;\n\nstatic atomic<do_once_state> condvar_api_state;\n\nvoid WINAPI init_condvar_using_event( condition_variable_using_event* cv_event )\n{\n    // TODO: For Metro port, we can always use the API for condition variables, without dynamic_link etc.\n    cv_event->event = CreateEventEx(NULL, NULL, 0x1 /*CREATE_EVENT_MANUAL_RESET*/, EVENT_ALL_ACCESS );\n    InitializeCriticalSectionEx( &cv_event->mutex, 4000, 0 );\n    cv_event->n_waiters = 0;\n    cv_event->release_count = 0;\n    cv_event->epoch = 0;\n}\n\nBOOL WINAPI sleep_condition_variable_cs_using_event( condition_variable_using_event* cv_event, LPCRITICAL_SECTION cs, DWORD dwMilliseconds )\n{\n    EnterCriticalSection( &cv_event->mutex );\n    ++cv_event->n_waiters;\n    unsigned my_generation = cv_event->epoch;\n    LeaveCriticalSection( &cv_event->mutex );\n    LeaveCriticalSection( cs );\n    for (;;) {\n        // should come here at least once\n        DWORD rc = WaitForSingleObjectEx( cv_event->event, dwMilliseconds, FALSE );\n        EnterCriticalSection( &cv_event->mutex );\n        if( rc!=WAIT_OBJECT_0 ) {\n            --cv_event->n_waiters;\n            LeaveCriticalSection( &cv_event->mutex );\n            if( rc==WAIT_TIMEOUT ) {\n                SetLastError( WAIT_TIMEOUT );\n                EnterCriticalSection( cs );\n            }\n            return false;\n        }\n        __TBB_ASSERT( rc==WAIT_OBJECT_0, NULL );\n        if( cv_event->release_count>0 && cv_event->epoch!=my_generation )\n            break;\n        LeaveCriticalSection( &cv_event->mutex );\n    }\n\n    // still in the critical section\n    --cv_event->n_waiters;\n    int count = --cv_event->release_count;\n    LeaveCriticalSection( &cv_event->mutex );\n\n    if( count==0 ) {\n        __TBB_ASSERT( cv_event->event, \"Premature destruction of condition variable?\" );\n        ResetEvent( cv_event->event );\n    }\n    EnterCriticalSection( cs );\n    return true;\n}\n\nvoid WINAPI wake_condition_variable_using_event( condition_variable_using_event* cv_event )\n{\n    EnterCriticalSection( &cv_event->mutex );\n    if( cv_event->n_waiters>cv_event->release_count ) {\n        SetEvent( cv_event->event ); // Signal the manual-reset event.\n        ++cv_event->release_count;\n        ++cv_event->epoch;\n    }\n    LeaveCriticalSection( &cv_event->mutex );\n}\n\nvoid WINAPI wake_all_condition_variable_using_event( condition_variable_using_event* cv_event )\n{\n    EnterCriticalSection( &cv_event->mutex );\n    if( cv_event->n_waiters>0 ) {\n        SetEvent( cv_event->event );\n        cv_event->release_count = cv_event->n_waiters;\n        ++cv_event->epoch;\n    }\n    LeaveCriticalSection( &cv_event->mutex );\n}\n\nvoid WINAPI destroy_condvar_using_event( condition_variable_using_event* cv_event )\n{\n    HANDLE my_event = cv_event->event;\n    EnterCriticalSection( &cv_event->mutex );\n    // NULL is an invalid HANDLE value\n    cv_event->event = NULL;\n    if( cv_event->n_waiters>0 ) {\n        LeaveCriticalSection( &cv_event->mutex );\n        spin_wait_until_eq( cv_event->n_waiters, 0 );\n        // make sure the last thread completes its access to cv\n        EnterCriticalSection( &cv_event->mutex );\n    }\n    LeaveCriticalSection( &cv_event->mutex );\n    CloseHandle( my_event );\n}\n\nvoid WINAPI destroy_condvar_noop( CONDITION_VARIABLE* /*cv*/ ) { /*no op*/ }\n\nstatic void (WINAPI *__TBB_init_condvar)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&init_condvar_using_event;\nstatic BOOL (WINAPI *__TBB_condvar_wait)( PCONDITION_VARIABLE, LPCRITICAL_SECTION, DWORD ) = (BOOL (WINAPI *)(PCONDITION_VARIABLE,LPCRITICAL_SECTION, DWORD))&sleep_condition_variable_cs_using_event;\nstatic void (WINAPI *__TBB_condvar_notify_one)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&wake_condition_variable_using_event;\nstatic void (WINAPI *__TBB_condvar_notify_all)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&wake_all_condition_variable_using_event;\nstatic void (WINAPI *__TBB_destroy_condvar)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&destroy_condvar_using_event;\n\n//! Table describing how to link the handlers.\nstatic const dynamic_link_descriptor CondVarLinkTable[] = {\n    DLD(InitializeConditionVariable, __TBB_init_condvar),\n    DLD(SleepConditionVariableCS,    __TBB_condvar_wait),\n    DLD(WakeConditionVariable,       __TBB_condvar_notify_one),\n    DLD(WakeAllConditionVariable,    __TBB_condvar_notify_all)\n};\n\nvoid init_condvar_module()\n{\n    __TBB_ASSERT( (uintptr_t)__TBB_init_condvar==(uintptr_t)&init_condvar_using_event, NULL );\n#if __TBB_WIN8UI_SUPPORT\n    // We expect condition variables to be always available for Windows* store applications,\n    // so there is no need to check presense and use alternative implementation.\n    __TBB_init_condvar = (void (WINAPI *)(PCONDITION_VARIABLE))&InitializeConditionVariable;\n    __TBB_condvar_wait = (BOOL(WINAPI *)(PCONDITION_VARIABLE, LPCRITICAL_SECTION, DWORD))&SleepConditionVariableCS;\n    __TBB_condvar_notify_one = (void (WINAPI *)(PCONDITION_VARIABLE))&WakeConditionVariable;\n    __TBB_condvar_notify_all = (void (WINAPI *)(PCONDITION_VARIABLE))&WakeAllConditionVariable;\n    __TBB_destroy_condvar = (void (WINAPI *)(PCONDITION_VARIABLE))&destroy_condvar_noop;\n#else\n    if (dynamic_link(\"Kernel32.dll\", CondVarLinkTable, 4))\n        __TBB_destroy_condvar = (void (WINAPI *)(PCONDITION_VARIABLE))&destroy_condvar_noop;\n#endif\n}\n#endif /* _WIN32||_WIN64 */\n\n} // namespace internal\n\n#if _WIN32||_WIN64\n\nnamespace interface5 {\nnamespace internal {\n\nusing tbb::internal::condvar_api_state;\nusing tbb::internal::__TBB_init_condvar;\nusing tbb::internal::__TBB_condvar_wait;\nusing tbb::internal::__TBB_condvar_notify_one;\nusing tbb::internal::__TBB_condvar_notify_all;\nusing tbb::internal::__TBB_destroy_condvar;\nusing tbb::internal::init_condvar_module;\n\nvoid internal_initialize_condition_variable( condvar_impl_t& cv )\n{\n    atomic_do_once( &init_condvar_module, condvar_api_state );\n    __TBB_init_condvar( &cv.cv_native );\n}\n\nvoid internal_destroy_condition_variable( condvar_impl_t& cv )\n{\n    __TBB_destroy_condvar( &cv.cv_native );\n}\n\nvoid internal_condition_variable_notify_one( condvar_impl_t& cv )\n{\n    __TBB_condvar_notify_one ( &cv.cv_native );\n}\n\nvoid internal_condition_variable_notify_all( condvar_impl_t& cv )\n{\n    __TBB_condvar_notify_all( &cv.cv_native );\n}\n\nbool internal_condition_variable_wait( condvar_impl_t& cv, mutex* mtx, const tick_count::interval_t* i )\n{\n    DWORD duration = i ? DWORD((i->seconds()*1000)) : INFINITE;\n    mtx->set_state( mutex::INITIALIZED );\n    BOOL res = __TBB_condvar_wait( &cv.cv_native, mtx->native_handle(), duration );\n    mtx->set_state( mutex::HELD );\n    return res?true:false;\n}\n\n} // namespace internal\n} // nameespace interface5\n\n#endif /* _WIN32||_WIN64 */\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/critical_section.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/critical_section.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\n    namespace internal {\n\nvoid critical_section_v4::internal_construct() {\n    ITT_SYNC_CREATE(&my_impl, _T(\"ppl::critical_section\"), _T(\"\"));\n}\n}  // namespace internal\n}  // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/custom_scheduler.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_custom_scheduler_H\n#define _TBB_custom_scheduler_H\n\n#include \"scheduler.h\"\n#include \"observer_proxy.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//------------------------------------------------------------------------\n//! Traits classes for scheduler\n//------------------------------------------------------------------------\n\nstruct DefaultSchedulerTraits {\n    static const bool itt_possible = true;\n    static const bool has_slow_atomic = false;\n};\n\nstruct IntelSchedulerTraits {\n    static const bool itt_possible = false;\n#if __TBB_x86_32||__TBB_x86_64\n    static const bool has_slow_atomic = true;\n#else\n    static const bool has_slow_atomic = false;\n#endif /* __TBB_x86_32||__TBB_x86_64 */\n};\n\n//------------------------------------------------------------------------\n// custom_scheduler\n//------------------------------------------------------------------------\n\n//! A scheduler with a customized evaluation loop.\n/** The customization can use SchedulerTraits to make decisions without needing a run-time check. */\ntemplate<typename SchedulerTraits>\nclass custom_scheduler: private generic_scheduler {\n    typedef custom_scheduler<SchedulerTraits> scheduler_type;\n\n    custom_scheduler( market& m ) : generic_scheduler(m) {}\n\n    //! Scheduler loop that dispatches tasks.\n    /** If child is non-NULL, it is dispatched first.\n        Then, until \"parent\" has a reference count of 1, other task are dispatched or stolen. */\n    void local_wait_for_all( task& parent, task* child ) __TBB_override;\n\n    //! Entry point from client code to the scheduler loop that dispatches tasks.\n    /** The method is virtual, but the *this object is used only for sake of dispatching on the correct vtable,\n        not necessarily the correct *this object.  The correct *this object is looked up in TLS. */\n    void wait_for_all( task& parent, task* child ) __TBB_override {\n        static_cast<custom_scheduler*>(governor::local_scheduler())->scheduler_type::local_wait_for_all( parent, child );\n    }\n\n    //! Decrements ref_count of a predecessor.\n    /** If it achieves 0, the predecessor is scheduled for execution.\n        When changing, remember that this is a hot path function. */\n    void tally_completion_of_predecessor( task& s, __TBB_ISOLATION_ARG( task*& bypass_slot, isolation_tag isolation ) ) {\n        task_prefix& p = s.prefix();\n        if( SchedulerTraits::itt_possible )\n            ITT_NOTIFY(sync_releasing, &p.ref_count);\n        if( SchedulerTraits::has_slow_atomic && p.ref_count==1 )\n            p.ref_count=0;\n        else if( __TBB_FetchAndDecrementWrelease(&p.ref_count) > 1 ) {// more references exist\n            // '__TBB_cl_evict(&p)' degraded performance of parallel_preorder example\n            return;\n        }\n\n        // Ordering on p.ref_count (superfluous if SchedulerTraits::has_slow_atomic)\n        __TBB_control_consistency_helper();\n        __TBB_ASSERT(p.ref_count==0, \"completion of task caused predecessor's reference count to underflow\");\n        if( SchedulerTraits::itt_possible )\n            ITT_NOTIFY(sync_acquired, &p.ref_count);\n#if TBB_USE_ASSERT\n        p.extra_state &= ~es_ref_count_active;\n#endif /* TBB_USE_ASSERT */\n#if __TBB_TASK_ISOLATION\n        if ( isolation != no_isolation ) {\n            // The parent is allowed not to have isolation (even if a child has isolation) because it has never spawned.\n            __TBB_ASSERT(p.isolation == no_isolation || p.isolation == isolation, NULL);\n            p.isolation = isolation;\n        }\n#endif /* __TBB_TASK_ISOLATION */\n\n#if __TBB_RECYCLE_TO_ENQUEUE\n        if (p.state==task::to_enqueue) {\n            // related to __TBB_TASK_ARENA TODO: try keep priority of the task\n            // e.g. rework task_prefix to remember priority of received task and use here\n            my_arena->enqueue_task(s, 0, my_random );\n        } else\n#endif /*__TBB_RECYCLE_TO_ENQUEUE*/\n        if( bypass_slot==NULL )\n            bypass_slot = &s;\n        else\n            local_spawn( &s, s.prefix().next );\n    }\n\npublic:\n    static generic_scheduler* allocate_scheduler( market& m ) {\n        void* p = NFS_Allocate(1, sizeof(scheduler_type), NULL);\n        std::memset(p, 0, sizeof(scheduler_type));\n        scheduler_type* s = new( p ) scheduler_type( m );\n        s->assert_task_pool_valid();\n        ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);\n        return s;\n    }\n\n    //! Try getting a task from the mailbox or stealing from another scheduler.\n    /** Returns the stolen task or NULL if all attempts fail. */\n    task* receive_or_steal_task( __TBB_ISOLATION_ARG( __TBB_atomic reference_count& completion_ref_count, isolation_tag isolation ) ) __TBB_override;\n\n}; // class custom_scheduler<>\n\n//------------------------------------------------------------------------\n// custom_scheduler methods\n//------------------------------------------------------------------------\ntemplate<typename SchedulerTraits>\ntask* custom_scheduler<SchedulerTraits>::receive_or_steal_task( __TBB_ISOLATION_ARG(__TBB_atomic reference_count& completion_ref_count, isolation_tag isolation) ) {\n    task* t = NULL;\n    bool outermost_worker_level = worker_outermost_level();\n    bool outermost_dispatch_level = outermost_worker_level || master_outermost_level();\n    bool can_steal_here = can_steal();\n    my_inbox.set_is_idle( true );\n#if __TBB_HOARD_NONLOCAL_TASKS\n    __TBB_ASSERT(!my_nonlocal_free_list, NULL);\n#endif\n#if __TBB_TASK_PRIORITY\n    if ( outermost_dispatch_level ) {\n        if ( intptr_t skipped_priority = my_arena->my_skipped_fifo_priority ) {\n            // This thread can dequeue FIFO tasks, and some priority levels of\n            // FIFO tasks have been bypassed (to prevent deadlock caused by\n            // dynamic priority changes in nested task group hierarchy).\n            if ( my_arena->my_skipped_fifo_priority.compare_and_swap(0, skipped_priority) == skipped_priority\n                 && skipped_priority > my_arena->my_top_priority )\n            {\n                my_market->update_arena_priority( *my_arena, skipped_priority );\n            }\n        }\n    }\n#endif /* !__TBB_TASK_PRIORITY */\n    // TODO: Try to find a place to reset my_limit (under market's lock)\n    // The number of slots potentially used in the arena. Updated once in a while, as my_limit changes rarely.\n    size_t n = my_arena->my_limit-1;\n    int yield_count = 0;\n    // The state \"failure_count==-1\" is used only when itt_possible is true,\n    // and denotes that a sync_prepare has not yet been issued.\n    for( int failure_count = -static_cast<int>(SchedulerTraits::itt_possible);; ++failure_count) {\n        __TBB_ASSERT( my_arena->my_limit > 0, NULL );\n        __TBB_ASSERT( my_arena_index <= n, NULL );\n        if( completion_ref_count==1 ) {\n            if( SchedulerTraits::itt_possible ) {\n                if( failure_count!=-1 ) {\n                    ITT_NOTIFY(sync_prepare, &completion_ref_count);\n                    // Notify Intel(R) Thread Profiler that thread has stopped spinning.\n                    ITT_NOTIFY(sync_acquired, this);\n                }\n                ITT_NOTIFY(sync_acquired, &completion_ref_count);\n            }\n            __TBB_ASSERT( !t, NULL );\n            // A worker thread in its outermost dispatch loop (i.e. its execution stack is empty) should\n            // exit it either when there is no more work in the current arena, or when revoked by the market.\n            __TBB_ASSERT( !outermost_worker_level, NULL );\n            __TBB_control_consistency_helper(); // on ref_count\n            break; // exit stealing loop and return;\n        }\n        // Check if the resource manager requires our arena to relinquish some threads\n        if ( outermost_worker_level && (my_arena->my_num_workers_allotted < my_arena->num_workers_active()\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n                 || my_arena->recall_by_mandatory_request()\n#endif\n                 ) ) {\n            if( SchedulerTraits::itt_possible && failure_count != -1 )\n                ITT_NOTIFY(sync_cancel, this);\n            return NULL;\n        }\n#if __TBB_TASK_PRIORITY\n        const int p = int(my_arena->my_top_priority);\n#else /* !__TBB_TASK_PRIORITY */\n        static const int p = 0;\n#endif\n        // Check if there are tasks mailed to this thread via task-to-thread affinity mechanism.\n        __TBB_ASSERT(my_affinity_id, NULL);\n        if ( n && !my_inbox.empty() ) {\n            t = get_mailbox_task( __TBB_ISOLATION_EXPR( isolation ) );\n#if __TBB_TASK_ISOLATION\n            // There is a race with a thread adding a new task (possibly with suitable isolation)\n            // to our mailbox, so the below conditions might result in a false positive.\n            // Then set_is_idle(false) allows that task to be stolen; it's OK.\n            if ( isolation != no_isolation && !t && !my_inbox.empty()\n                     && my_inbox.is_idle_state( true ) ) {\n                // We have proxy tasks in our mailbox but the isolation blocks their execution.\n                // So publish the proxy tasks in mailbox to be available for stealing from owner's task pool.\n                my_inbox.set_is_idle( false );\n            }\n#endif /* __TBB_TASK_ISOLATION */\n        }\n        if ( t ) {\n            GATHER_STATISTIC( ++my_counters.mails_received );\n        }\n        // Check if there are tasks in starvation-resistant stream.\n        // Only allowed at the outermost dispatch level.\n        else if ( outermost_dispatch_level && !my_arena->my_task_stream.empty(p)\n                  && (t = my_arena->my_task_stream.pop( p, my_arena_slot->hint_for_pop)) ) {\n            ITT_NOTIFY(sync_acquired, &my_arena->my_task_stream);\n            // just proceed with the obtained task\n        }\n#if __TBB_TASK_PRIORITY\n        // Check if any earlier offloaded non-top priority tasks become returned to the top level\n        else if ( my_offloaded_tasks && (t = reload_tasks( __TBB_ISOLATION_EXPR( isolation ) )) ) {\n            __TBB_ASSERT( !is_proxy(*t), \"The proxy task cannot be offloaded\" );\n            // just proceed with the obtained task\n        }\n#endif /* __TBB_TASK_PRIORITY */\n        else if ( can_steal_here && n ) {\n            // Try to steal a task from a random victim.\n            size_t k = my_random.get() % n;\n            arena_slot* victim = &my_arena->my_slots[k];\n            // The following condition excludes the master that might have\n            // already taken our previous place in the arena from the list .\n            // of potential victims. But since such a situation can take\n            // place only in case of significant oversubscription, keeping\n            // the checks simple seems to be preferable to complicating the code.\n            if( k >= my_arena_index )\n                ++victim;               // Adjusts random distribution to exclude self\n            task **pool = victim->task_pool;\n            if( pool == EmptyTaskPool || !(t = steal_task( __TBB_ISOLATION_ARG(*victim, isolation) )) )\n                goto fail;\n            if( is_proxy(*t) ) {\n                task_proxy &tp = *(task_proxy*)t;\n                t = tp.extract_task<task_proxy::pool_bit>();\n                if ( !t ) {\n                    // Proxy was empty, so it's our responsibility to free it\n                    free_task<no_cache_small_task>(tp);\n                    goto fail;\n                }\n                GATHER_STATISTIC( ++my_counters.proxies_stolen );\n            }\n            t->prefix().extra_state |= es_task_is_stolen;\n            if( is_version_3_task(*t) ) {\n                my_innermost_running_task = t;\n                t->prefix().owner = this;\n                t->note_affinity( my_affinity_id );\n            }\n            GATHER_STATISTIC( ++my_counters.steals_committed );\n        } // end of stealing branch\n        else\n            goto fail;\n        // A task was successfully obtained somewhere\n        __TBB_ASSERT(t,NULL);\n#if __TBB_ARENA_OBSERVER\n        my_arena->my_observers.notify_entry_observers( my_last_local_observer, is_worker() );\n#endif\n#if __TBB_SCHEDULER_OBSERVER\n        the_global_observer_list.notify_entry_observers( my_last_global_observer, is_worker() );\n#endif /* __TBB_SCHEDULER_OBSERVER */\n        if ( SchedulerTraits::itt_possible && failure_count != -1 ) {\n            // FIXME - might be victim, or might be selected from a mailbox\n            // Notify Intel(R) Thread Profiler that thread has stopped spinning.\n            ITT_NOTIFY(sync_acquired, this);\n        }\n        break; // exit stealing loop and return\nfail:\n        GATHER_STATISTIC( ++my_counters.steals_failed );\n        if( SchedulerTraits::itt_possible && failure_count==-1 ) {\n            // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that\n            // the thread has started spinning.  Ideally, we would do this notification\n            // *before* the first failed attempt to steal, but at that point we do not\n            // know that the steal will fail.\n            ITT_NOTIFY(sync_prepare, this);\n            failure_count = 0;\n        }\n        // Pause, even if we are going to yield, because the yield might return immediately.\n        prolonged_pause();\n        const int failure_threshold = 2*int(n+1);\n        if( failure_count>=failure_threshold ) {\n#if __TBB_YIELD2P\n            failure_count = 0;\n#else\n            failure_count = failure_threshold;\n#endif\n            __TBB_Yield();\n#if __TBB_TASK_PRIORITY\n            // Check if there are tasks abandoned by other workers\n            if ( my_arena->my_orphaned_tasks ) {\n                // Epoch must be advanced before seizing the list pointer\n                ++my_arena->my_abandonment_epoch;\n                task* orphans = (task*)__TBB_FetchAndStoreW( &my_arena->my_orphaned_tasks, 0 );\n                if ( orphans ) {\n                    task** link = NULL;\n                    // Get local counter out of the way (we've just brought in external tasks)\n                    my_local_reload_epoch--;\n                    t = reload_tasks( orphans, link, __TBB_ISOLATION_ARG( effective_reference_priority(), isolation ) );\n                    if ( orphans ) {\n                        *link = my_offloaded_tasks;\n                        if ( !my_offloaded_tasks )\n                            my_offloaded_task_list_tail_link = link;\n                        my_offloaded_tasks = orphans;\n                    }\n                    __TBB_ASSERT( !my_offloaded_tasks == !my_offloaded_task_list_tail_link, NULL );\n                    if ( t ) {\n                        if( SchedulerTraits::itt_possible )\n                            ITT_NOTIFY(sync_cancel, this);\n                        __TBB_ASSERT( !is_proxy(*t), \"The proxy task cannot be offloaded\" );\n                        break; // exit stealing loop and return\n                    }\n                }\n            }\n#endif /* __TBB_TASK_PRIORITY */\n            const int yield_threshold = 100;\n            if( yield_count++ >= yield_threshold ) {\n                // When a worker thread has nothing to do, return it to RML.\n                // For purposes of affinity support, the thread is considered idle while in RML.\n#if __TBB_TASK_PRIORITY\n                if( outermost_worker_level || my_arena->my_top_priority > my_arena->my_bottom_priority ) {\n                    if ( my_arena->is_out_of_work() && outermost_worker_level ) {\n#else /* !__TBB_TASK_PRIORITY */\n                    if ( outermost_worker_level && my_arena->is_out_of_work() ) {\n#endif /* !__TBB_TASK_PRIORITY */\n                        if( SchedulerTraits::itt_possible )\n                            ITT_NOTIFY(sync_cancel, this);\n                        return NULL;\n                    }\n#if __TBB_TASK_PRIORITY\n                }\n                if ( my_offloaded_tasks ) {\n                    // Safeguard against any sloppiness in managing reload epoch\n                    // counter (e.g. on the hot path because of performance reasons).\n                    my_local_reload_epoch--;\n                    // Break the deadlock caused by a higher priority dispatch loop\n                    // stealing and offloading a lower priority task. Priority check\n                    // at the stealing moment cannot completely preclude such cases\n                    // because priorities can changes dynamically.\n                    if ( !outermost_worker_level && *my_ref_top_priority > my_arena->my_top_priority ) {\n                        GATHER_STATISTIC( ++my_counters.prio_ref_fixups );\n                        my_ref_top_priority = &my_arena->my_top_priority;\n                        // it's expected that only outermost workers can use global reload epoch\n                        __TBB_ASSERT(my_ref_reload_epoch == &my_arena->my_reload_epoch, NULL);\n                    }\n                }\n#endif /* __TBB_TASK_PRIORITY */\n            } // end of arena snapshot branch\n            // If several attempts did not find work, re-read the arena limit.\n            n = my_arena->my_limit-1;\n        } // end of yielding branch\n    } // end of nonlocal task retrieval loop\n    if ( my_inbox.is_idle_state( true ) )\n        my_inbox.set_is_idle( false );\n    return t;\n}\n\ntemplate<typename SchedulerTraits>\nvoid custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task* child ) {\n    __TBB_ASSERT( governor::is_set(this), NULL );\n    __TBB_ASSERT( parent.ref_count() >= (child && child->parent() == &parent ? 2 : 1), \"ref_count is too small\" );\n    __TBB_ASSERT( my_innermost_running_task, NULL );\n    assert_task_pool_valid();\n    // Using parent's refcount in sync_prepare (in the stealing loop below) is\n    // a workaround for TP. We need to name it here to display correctly in Ampl.\n    if( SchedulerTraits::itt_possible )\n        ITT_SYNC_CREATE(&parent.prefix().ref_count, SyncType_Scheduler, SyncObj_TaskStealingLoop);\n#if __TBB_TASK_GROUP_CONTEXT\n    __TBB_ASSERT( parent.prefix().context, \"parent task does not have context\" );\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    task* t = child;\n    // Constant all_local_work_done is an unreachable refcount value that prevents\n    // early quitting the dispatch loop. It is defined to be in the middle of the range\n    // of negative values representable by the reference_count type.\n    static const reference_count\n        // For normal dispatch loops\n        parents_work_done = 1,\n        // For termination dispatch loops in masters\n        all_local_work_done = (reference_count)3 << (sizeof(reference_count) * 8 - 2);\n    reference_count quit_point;\n#if __TBB_TASK_PRIORITY\n    __TBB_ASSERT( (uintptr_t)*my_ref_top_priority < (uintptr_t)num_priority_levels, NULL );\n    volatile intptr_t *old_ref_top_priority = my_ref_top_priority;\n    // When entering nested parallelism level market level counter\n    // must be replaced with the one local to this arena.\n    volatile uintptr_t *old_ref_reload_epoch = my_ref_reload_epoch;\n#endif /* __TBB_TASK_PRIORITY */\n    task* old_innermost_running_task = my_innermost_running_task;\n    scheduler_properties old_properties = my_properties;\n    // Remove outermost property to indicate nested level.\n    __TBB_ASSERT( my_properties.outermost || my_innermost_running_task!=my_dummy_task, \"The outermost property should be set out of a dispatch loop\" );\n    my_properties.outermost &= my_innermost_running_task==my_dummy_task;\n#if __TBB_TASK_ISOLATION\n    isolation_tag isolation = my_innermost_running_task->prefix().isolation;\n#endif /* __TBB_TASK_ISOLATION */\n    if( master_outermost_level() ) {\n        // We are in the outermost task dispatch loop of a master thread or a worker which mimics master\n        quit_point = &parent == my_dummy_task ? all_local_work_done : parents_work_done;\n    } else {\n        quit_point = parents_work_done;\n#if __TBB_TASK_PRIORITY\n        if ( &parent != my_dummy_task ) {\n            // We are in a nested dispatch loop.\n            // Market or arena priority must not prevent child tasks from being\n            // executed so that dynamic priority changes did not cause deadlock.\n            my_ref_top_priority = &parent.prefix().context->my_priority;\n            my_ref_reload_epoch = &my_arena->my_reload_epoch;\n            if(my_ref_reload_epoch != old_ref_reload_epoch)\n                my_local_reload_epoch = *my_ref_reload_epoch-1;\n        }\n#endif /* __TBB_TASK_PRIORITY */\n    }\n\n    context_guard_helper</*report_tasks=*/SchedulerTraits::itt_possible> context_guard;\n    if ( t ) {\n        context_guard.set_ctx( __TBB_CONTEXT_ARG1(t->prefix().context) );\n#if __TBB_TASK_ISOLATION\n        if ( isolation != no_isolation ) {\n            __TBB_ASSERT( t->prefix().isolation == no_isolation, NULL );\n            // Propagate the isolation to the task executed without spawn.\n            t->prefix().isolation = isolation;\n        }\n#endif /* __TBB_TASK_ISOLATION */\n    }\n\n#if TBB_USE_EXCEPTIONS\n    // Infinite safeguard EH loop\n    for (;;) {\n    try {\n#endif /* TBB_USE_EXCEPTIONS */\n    // Outer loop receives tasks from global environment (via mailbox, FIFO queue(s),\n    // and by  stealing from other threads' task pools).\n    // All exit points from the dispatch loop are located in its immediate scope.\n    for(;;) {\n        // Middle loop retrieves tasks from the local task pool.\n        for(;;) {\n            // Inner loop evaluates tasks coming from nesting loops and those returned\n            // by just executed tasks (bypassing spawn or enqueue calls).\n            while(t) {\n                __TBB_ASSERT( my_inbox.is_idle_state(false), NULL );\n                __TBB_ASSERT(!is_proxy(*t),\"unexpected proxy\");\n                __TBB_ASSERT( t->prefix().owner, NULL );\n#if __TBB_TASK_ISOLATION\n                __TBB_ASSERT( isolation == no_isolation || isolation == t->prefix().isolation,\n                    \"A task from another isolated region is going to be executed\" );\n#endif /* __TBB_TASK_ISOLATION */\n                assert_task_valid(t);\n#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_ASSERT\n                assert_context_valid(t->prefix().context);\n                if ( !t->prefix().context->my_cancellation_requested )\n#endif\n                // TODO: make the assert stronger by prohibiting allocated state.\n                __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );\n                assert_task_pool_valid();\n#if __TBB_TASK_PRIORITY\n                intptr_t p = priority(*t);\n                if ( p != *my_ref_top_priority && (t->prefix().extra_state & es_task_enqueued) == 0) {\n                    assert_priority_valid(p);\n                    if ( p != my_arena->my_top_priority ) {\n                        my_market->update_arena_priority( *my_arena, p );\n                    }\n                    if ( p < effective_reference_priority() ) {\n                        if ( !my_offloaded_tasks ) {\n                            my_offloaded_task_list_tail_link = &t->prefix().next_offloaded;\n                            // Erase possible reference to the owner scheduler (next_offloaded is a union member)\n                            *my_offloaded_task_list_tail_link = NULL;\n                        }\n                        offload_task( *t, p );\n                        if ( is_task_pool_published() ) {\n                            t = winnow_task_pool( __TBB_ISOLATION_EXPR( isolation ) );\n                            if ( t )\n                                continue;\n                        } else {\n                            // Mark arena as full to unlock arena priority level adjustment\n                            // by arena::is_out_of_work(), and ensure worker's presence.\n                            my_arena->advertise_new_work<arena::wakeup>();\n                        }\n                        goto stealing_ground;\n                    }\n                }\n#endif /* __TBB_TASK_PRIORITY */\n                task* t_next = NULL;\n                my_innermost_running_task = t;\n                t->prefix().owner = this;\n                t->prefix().state = task::executing;\n#if __TBB_TASK_GROUP_CONTEXT\n                if ( !t->prefix().context->my_cancellation_requested )\n#endif\n                {\n                    GATHER_STATISTIC( ++my_counters.tasks_executed );\n                    GATHER_STATISTIC( my_counters.avg_arena_concurrency += my_arena->num_workers_active() );\n                    GATHER_STATISTIC( my_counters.avg_assigned_workers += my_arena->my_num_workers_allotted );\n#if __TBB_TASK_PRIORITY\n                    GATHER_STATISTIC( my_counters.avg_arena_prio += p );\n                    GATHER_STATISTIC( my_counters.avg_market_prio += my_market->my_global_top_priority );\n#endif /* __TBB_TASK_PRIORITY */\n                    ITT_STACK(SchedulerTraits::itt_possible, callee_enter, t->prefix().context->itt_caller);\n                    t_next = t->execute();\n                    ITT_STACK(SchedulerTraits::itt_possible, callee_leave, t->prefix().context->itt_caller);\n                    if (t_next) {\n                        __TBB_ASSERT( t_next->state()==task::allocated,\n                                \"if task::execute() returns task, it must be marked as allocated\" );\n                        reset_extra_state(t_next);\n                        __TBB_ISOLATION_EXPR( t_next->prefix().isolation = t->prefix().isolation );\n#if TBB_USE_ASSERT\n                        affinity_id next_affinity=t_next->prefix().affinity;\n                        if (next_affinity != 0 && next_affinity != my_affinity_id)\n                            GATHER_STATISTIC( ++my_counters.affinity_ignored );\n#endif\n                    }\n                }\n                assert_task_pool_valid();\n                switch( t->state() ) {\n                    case task::executing: {\n                        task* s = t->parent();\n                        __TBB_ASSERT( my_innermost_running_task==t, NULL );\n                        __TBB_ASSERT( t->prefix().ref_count==0, \"Task still has children after it has been executed\" );\n                        t->~task();\n                        if( s )\n                            tally_completion_of_predecessor( *s, __TBB_ISOLATION_ARG( t_next, t->prefix().isolation ) );\n                        free_task<no_hint>( *t );\n                        poison_pointer( my_innermost_running_task );\n                        assert_task_pool_valid();\n                        break;\n                    }\n\n                    case task::recycle: // set by recycle_as_safe_continuation()\n                        t->prefix().state = task::allocated;\n#if __TBB_RECYCLE_TO_ENQUEUE\n                    case task::to_enqueue: // set by recycle_to_enqueue()\n#endif\n                        __TBB_ASSERT( t_next != t, \"a task returned from method execute() can not be recycled in another way\" );\n                        reset_extra_state(t);\n                        // for safe continuation, need atomically decrement ref_count;\n                        tally_completion_of_predecessor(*t, __TBB_ISOLATION_ARG( t_next, t->prefix().isolation ) );\n                        assert_task_pool_valid();\n                        break;\n\n                    case task::reexecute: // set by recycle_to_reexecute()\n                        __TBB_ASSERT( t_next, \"reexecution requires that method execute() return another task\" );\n                        __TBB_ASSERT( t_next != t, \"a task returned from method execute() can not be recycled in another way\" );\n                        t->prefix().state = task::allocated;\n                        reset_extra_state(t);\n                        local_spawn( t, t->prefix().next );\n                        assert_task_pool_valid();\n                        break;\n                    case task::allocated:\n                        reset_extra_state(t);\n                        break;\n#if TBB_USE_ASSERT\n                    case task::ready:\n                        __TBB_ASSERT( false, \"task is in READY state upon return from method execute()\" );\n                        break;\n                    default:\n                        __TBB_ASSERT( false, \"illegal state\" );\n#else\n                    default: // just to shut up some compilation warnings\n                        break;\n#endif /* TBB_USE_ASSERT */\n                }\n                GATHER_STATISTIC( t_next ? ++my_counters.spawns_bypassed : 0 );\n                t = t_next;\n            } // end of scheduler bypass loop\n\n            assert_task_pool_valid();\n            if ( parent.prefix().ref_count == quit_point ) {\n                __TBB_ASSERT( quit_point != all_local_work_done, NULL );\n                __TBB_control_consistency_helper(); // on ref_count\n                ITT_NOTIFY(sync_acquired, &parent.prefix().ref_count);\n                goto done;\n            }\n            if ( is_task_pool_published() ) {\n                t = get_task( __TBB_ISOLATION_EXPR( isolation ) );\n            } else {\n                __TBB_ASSERT( is_quiescent_local_task_pool_reset(), NULL );\n                break;\n            }\n            assert_task_pool_valid();\n\n            if ( !t ) break;\n\n            context_guard.set_ctx( __TBB_CONTEXT_ARG1(t->prefix().context) );\n        }; // end of local task pool retrieval loop\n\n#if __TBB_TASK_PRIORITY\nstealing_ground:\n#endif /* __TBB_TASK_PRIORITY */\n#if __TBB_HOARD_NONLOCAL_TASKS\n        // before stealing, previously stolen task objects are returned\n        for (; my_nonlocal_free_list; my_nonlocal_free_list = t ) {\n            t = my_nonlocal_free_list->prefix().next;\n            free_nonlocal_small_task( *my_nonlocal_free_list );\n        }\n#endif\n        if ( quit_point == all_local_work_done ) {\n            __TBB_ASSERT( !is_task_pool_published() && is_quiescent_local_task_pool_reset(), NULL );\n            __TBB_ASSERT( !worker_outermost_level(), NULL );\n            my_innermost_running_task = old_innermost_running_task;\n            my_properties = old_properties;\n#if __TBB_TASK_PRIORITY\n            my_ref_top_priority = old_ref_top_priority;\n            if(my_ref_reload_epoch != old_ref_reload_epoch)\n                my_local_reload_epoch = *old_ref_reload_epoch-1;\n            my_ref_reload_epoch = old_ref_reload_epoch;\n#endif /* __TBB_TASK_PRIORITY */\n            return;\n        }\n        \n        t = receive_or_steal_task( __TBB_ISOLATION_ARG( parent.prefix().ref_count, isolation ) );\n        if ( !t )\n            goto done;\n\n        // The user can capture another the FPU settings to the context so the\n        // cached data in the helper can be out-of-date and we cannot do fast\n        // check.\n        context_guard.set_ctx( __TBB_CONTEXT_ARG1(t->prefix().context) );\n    } // end of infinite stealing loop\n#if TBB_USE_EXCEPTIONS\n    __TBB_ASSERT( false, \"Must never get here\" );\n    } // end of try-block\n    TbbCatchAll( t->prefix().context );\n    // Complete post-processing ...\n    if( t->state() == task::recycle\n#if __TBB_RECYCLE_TO_ENQUEUE\n        // TODO: the enqueue semantics gets lost below, consider reimplementing\n        ||  t->state() == task::to_enqueue\n#endif\n      ) {\n        // ... for recycled tasks to atomically decrement ref_count\n        t->prefix().state = task::allocated;\n        if( SchedulerTraits::itt_possible )\n            ITT_NOTIFY(sync_releasing, &t->prefix().ref_count);\n        if( __TBB_FetchAndDecrementWrelease(&t->prefix().ref_count)==1 ) {\n            if( SchedulerTraits::itt_possible )\n                ITT_NOTIFY(sync_acquired, &t->prefix().ref_count);\n        }else{\n            t = NULL;\n        }\n    }\n    } // end of infinite EH loop\n    __TBB_ASSERT( false, \"Must never get here too\" );\n#endif /* TBB_USE_EXCEPTIONS */\ndone:\n    my_innermost_running_task = old_innermost_running_task;\n    my_properties = old_properties;\n#if __TBB_TASK_PRIORITY\n    my_ref_top_priority = old_ref_top_priority;\n    if(my_ref_reload_epoch != old_ref_reload_epoch)\n        my_local_reload_epoch = *old_ref_reload_epoch-1;\n    my_ref_reload_epoch = old_ref_reload_epoch;\n#endif /* __TBB_TASK_PRIORITY */\n    if ( !ConcurrentWaitsEnabled(parent) ) {\n        if ( parent.prefix().ref_count != parents_work_done ) {\n            // This is a worker that was revoked by the market.\n            __TBB_ASSERT( worker_outermost_level(),\n                \"Worker thread exits nested dispatch loop prematurely\" );\n            return;\n        }\n        parent.prefix().ref_count = 0;\n    }\n#if TBB_USE_ASSERT\n    parent.prefix().extra_state &= ~es_ref_count_active;\n#endif /* TBB_USE_ASSERT */\n#if __TBB_TASK_GROUP_CONTEXT\n    __TBB_ASSERT(parent.prefix().context && default_context(), NULL);\n    task_group_context* parent_ctx = parent.prefix().context;\n    if ( parent_ctx->my_cancellation_requested ) {\n        task_group_context::exception_container_type *pe = parent_ctx->my_exception;\n        if ( master_outermost_level() && parent_ctx == default_context() ) {\n            // We are in the outermost task dispatch loop of a master thread, and\n            // the whole task tree has been collapsed. So we may clear cancellation data.\n            parent_ctx->my_cancellation_requested = 0;\n            // TODO: Add assertion that master's dummy task context does not have children\n            parent_ctx->my_state &= ~(uintptr_t)task_group_context::may_have_children;\n        }\n        if ( pe ) {\n            // On Windows, FPU control settings changed in the helper destructor are not visible\n            // outside a catch block. So restore the default settings manually before rethrowing\n            // the exception.\n            context_guard.restore_default();\n            TbbRethrowException( pe );\n        }\n    }\n    __TBB_ASSERT(!is_worker() || !CancellationInfoPresent(*my_dummy_task),\n        \"Worker's dummy task context modified\");\n    __TBB_ASSERT(!master_outermost_level() || !CancellationInfoPresent(*my_dummy_task),\n        \"Unexpected exception or cancellation data in the master's dummy task\");\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    assert_task_pool_valid();\n}\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_custom_scheduler_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/dynamic_link.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"dynamic_link.h\"\n#include \"tbb/tbb_config.h\"\n\n/*\n    This file is used by both TBB and OpenMP RTL. Do not use __TBB_ASSERT() macro\n    and runtime_warning() function because they are not available in OpenMP. Use\n    LIBRARY_ASSERT and DYNAMIC_LINK_WARNING instead.\n*/\n\n#include <cstdarg>          // va_list etc.\n#if _WIN32\n    #include <malloc.h>\n\n    // Unify system calls\n    #define dlopen( name, flags )   LoadLibrary( name )\n    #define dlsym( handle, name )   GetProcAddress( handle, name )\n    #define dlclose( handle )       ( ! FreeLibrary( handle ) )\n    #define dlerror()               GetLastError()\n#ifndef PATH_MAX\n    #define PATH_MAX                MAX_PATH\n#endif\n#else /* _WIN32 */\n    #include <dlfcn.h>\n    #include <string.h>\n    #include <unistd.h>\n    #include <limits.h>\n    #include <stdlib.h>\n#endif /* _WIN32 */\n\n#if __TBB_WEAK_SYMBOLS_PRESENT && !__TBB_DYNAMIC_LOAD_ENABLED\n    //TODO: use function attribute for weak symbols instead of the pragma.\n    #pragma weak dlopen\n    #pragma weak dlsym\n    #pragma weak dlclose\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT && !__TBB_DYNAMIC_LOAD_ENABLED */\n\n#include \"tbb_misc.h\"\n\n#define __USE_TBB_ATOMICS       ( !(__linux__&&__ia64__) || __TBB_BUILD )\n#define __USE_STATIC_DL_INIT    ( !__ANDROID__ )\n\n#if !__USE_TBB_ATOMICS\n#include <pthread.h>\n#endif\n\n/*\ndynamic_link is a common interface for searching for required symbols in an\nexecutable and dynamic libraries.\n\ndynamic_link provides certain guarantees:\n  1. Either all or none of the requested symbols are resolved. Moreover, if\n  symbols are not resolved, the dynamic_link_descriptor table is not modified;\n  2. All returned symbols have secured lifetime: this means that none of them\n  can be invalidated until dynamic_unlink is called;\n  3. Any loaded library is loaded only via the full path. The full path is that\n  from which the runtime itself was loaded. (This is done to avoid security\n  issues caused by loading libraries from insecure paths).\n\ndynamic_link searches for the requested symbols in three stages, stopping as\nsoon as all of the symbols have been resolved.\n\n  1. Search the global scope:\n    a. On Windows: dynamic_link tries to obtain the handle of the requested\n    library and if it succeeds it resolves the symbols via that handle.\n    b. On Linux: dynamic_link tries to search for the symbols in the global\n    scope via the main program handle. If the symbols are present in the global\n    scope their lifetime is not guaranteed (since dynamic_link does not know\n    anything about the library from which they are exported). Therefore it\n    tries to \"pin\" the symbols by obtaining the library name and reopening it.\n    dlopen may fail to reopen the library in two cases:\n       i. The symbols are exported from the executable. Currently dynamic _link\n      cannot handle this situation, so it will not find these symbols in this\n      step.\n      ii. The necessary library has been unloaded and cannot be reloaded. It\n      seems there is nothing that can be done in this case. No symbols are\n      returned.\n\n  2. Dynamic load: an attempt is made to load the requested library via the\n  full path.\n    The full path used is that from which the runtime itself was loaded. If the\n    library can be loaded, then an attempt is made to resolve the requested\n    symbols in the newly loaded library.\n    If the symbols are not found the library is unloaded.\n\n  3. Weak symbols: if weak symbols are available they are returned.\n*/\n\nOPEN_INTERNAL_NAMESPACE\n\n#if __TBB_WEAK_SYMBOLS_PRESENT || __TBB_DYNAMIC_LOAD_ENABLED\n\n#if !defined(DYNAMIC_LINK_WARNING) && !__TBB_WIN8UI_SUPPORT && __TBB_DYNAMIC_LOAD_ENABLED\n    // Report runtime errors and continue.\n    #define DYNAMIC_LINK_WARNING dynamic_link_warning\n    static void dynamic_link_warning( dynamic_link_error_t code, ... ) {\n        (void) code;\n    } // library_warning\n#endif /* !defined(DYNAMIC_LINK_WARNING) && !__TBB_WIN8UI_SUPPORT && __TBB_DYNAMIC_LOAD_ENABLED */\n\n    static bool resolve_symbols( dynamic_link_handle module, const dynamic_link_descriptor descriptors[], size_t required )\n    {\n        if ( !module )\n            return false;\n\n        #if !__TBB_DYNAMIC_LOAD_ENABLED /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */\n            if ( !dlsym ) return false;\n        #endif /* !__TBB_DYNAMIC_LOAD_ENABLED */\n\n        const size_t n_desc=20; // Usually we don't have more than 20 descriptors per library\n        LIBRARY_ASSERT( required <= n_desc, \"Too many descriptors is required\" );\n        if ( required > n_desc ) return false;\n        pointer_to_handler h[n_desc];\n\n        for ( size_t k = 0; k < required; ++k ) {\n            dynamic_link_descriptor const & desc = descriptors[k];\n            pointer_to_handler addr = (pointer_to_handler)dlsym( module, desc.name );\n            if ( !addr ) {\n                return false;\n            }\n            h[k] = addr;\n        }\n\n        // Commit the entry points.\n        // Cannot use memset here, because the writes must be atomic.\n        for( size_t k = 0; k < required; ++k )\n            *descriptors[k].handler = h[k];\n        return true;\n    }\n\n#if __TBB_WIN8UI_SUPPORT\n    bool dynamic_link( const char*  library, const dynamic_link_descriptor descriptors[], size_t required, dynamic_link_handle*, int flags ) {\n        dynamic_link_handle tmp_handle = NULL;\n        TCHAR wlibrary[256];\n        if ( MultiByteToWideChar(CP_UTF8, 0, library, -1, wlibrary, 255) == 0 ) return false;\n        if ( flags & DYNAMIC_LINK_LOAD )\n            tmp_handle = LoadPackagedLibrary( wlibrary, 0 );\n        if (tmp_handle != NULL){\n            return resolve_symbols(tmp_handle, descriptors, required);\n        }else{\n            return false;\n        }\n    }\n    void dynamic_unlink( dynamic_link_handle ) {}\n    void dynamic_unlink_all() {}\n#else\n#if __TBB_DYNAMIC_LOAD_ENABLED\n/*\n    There is a security issue on Windows: LoadLibrary() may load and execute malicious code.\n    See http://www.microsoft.com/technet/security/advisory/2269637.mspx for details.\n    To avoid the issue, we have to pass full path (not just library name) to LoadLibrary. This\n    function constructs full path to the specified library (it is assumed the library located\n    side-by-side with the tbb.dll.\n\n    The function constructs absolute path for given relative path. Important: Base directory is not\n    current one, it is the directory tbb.dll loaded from.\n\n    Example:\n        Let us assume \"tbb.dll\" is located in \"c:\\program files\\common\\intel\\\" directory, e. g.\n        absolute path of tbb library is \"c:\\program files\\common\\intel\\tbb.dll\". Absolute path for\n        \"tbbmalloc.dll\" would be \"c:\\program files\\common\\intel\\tbbmalloc.dll\". Absolute path for\n        \"malloc\\tbbmalloc.dll\" would be \"c:\\program files\\common\\intel\\malloc\\tbbmalloc.dll\".\n*/\n\n    // Struct handle_storage is used by dynamic_link routine to store handles of\n    // all loaded or pinned dynamic libraries. When TBB is shut down, it calls\n    // dynamic_unlink_all() that unloads modules referenced by handle_storage.\n    // This struct should not have any constructors since it may be used before\n    // the constructor is called.\n    #define MAX_LOADED_MODULES 8 // The number of maximum possible modules which can be loaded\n\n#if __USE_TBB_ATOMICS\n    typedef ::tbb::atomic<size_t> atomic_incrementer;\n    void init_atomic_incrementer( atomic_incrementer & ) {}\n\n    static void atomic_once( void( *func ) (void), tbb::atomic< tbb::internal::do_once_state > &once_state ) {\n        tbb::internal::atomic_do_once( func, once_state );\n    }\n    #define ATOMIC_ONCE_DECL( var ) tbb::atomic< tbb::internal::do_once_state > var\n#else\n    static void pthread_assert( int error_code, const char* msg ) {\n        LIBRARY_ASSERT( error_code == 0, msg );\n    }\n\n    class atomic_incrementer {\n        size_t my_val;\n        pthread_spinlock_t my_lock;\n    public:\n        void init() {\n            my_val = 0;\n            pthread_assert( pthread_spin_init( &my_lock, PTHREAD_PROCESS_PRIVATE ), \"pthread_spin_init failed\" );\n        }\n        size_t operator++(int) {\n            pthread_assert( pthread_spin_lock( &my_lock ), \"pthread_spin_lock failed\" );\n            size_t prev_val = my_val++;\n            pthread_assert( pthread_spin_unlock( &my_lock ), \"pthread_spin_unlock failed\" );\n            return prev_val;\n        }\n        operator size_t() {\n            pthread_assert( pthread_spin_lock( &my_lock ), \"pthread_spin_lock failed\" );\n            size_t val = my_val;\n            pthread_assert( pthread_spin_unlock( &my_lock ), \"pthread_spin_unlock failed\" );\n            return val;\n        }\n        ~atomic_incrementer() {\n            pthread_assert( pthread_spin_destroy( &my_lock ), \"pthread_spin_destroy failed\" );\n        }\n    };\n\n    void init_atomic_incrementer( atomic_incrementer &r ) {\n        r.init();\n    }\n\n    static void atomic_once( void( *func ) (), pthread_once_t &once_state ) {\n        pthread_assert( pthread_once( &once_state, func ), \"pthread_once failed\" );\n    }\n    #define ATOMIC_ONCE_DECL( var ) pthread_once_t var = PTHREAD_ONCE_INIT\n#endif /* __USE_TBB_ATOMICS */\n\n    struct handles_t {\n        atomic_incrementer my_size;\n        dynamic_link_handle my_handles[MAX_LOADED_MODULES];\n\n        void init() {\n            init_atomic_incrementer( my_size );\n        }\n\n        void add(const dynamic_link_handle &handle) {\n            const size_t ind = my_size++;\n            LIBRARY_ASSERT( ind < MAX_LOADED_MODULES, \"Too many modules are loaded\" );\n            my_handles[ind] = handle;\n        }\n\n        void free() {\n            const size_t size = my_size;\n            for (size_t i=0; i<size; ++i)\n                dynamic_unlink( my_handles[i] );\n        }\n    } handles;\n\n    ATOMIC_ONCE_DECL( init_dl_data_state );\n\n    static struct ap_data_t {\n        char _path[PATH_MAX+1];\n        size_t _len;\n    } ap_data;\n\n    static void init_ap_data() {\n    #if _WIN32\n        // Get handle of our DLL first.\n        HMODULE handle;\n        BOOL brc = GetModuleHandleEx(\n            GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,\n            (LPCSTR)( & dynamic_link ), // any function inside the library can be used for the address\n            & handle\n            );\n        if ( !brc ) { // Error occurred.\n            int err = GetLastError();\n            DYNAMIC_LINK_WARNING( dl_sys_fail, \"GetModuleHandleEx\", err );\n            return;\n        }\n        // Now get path to our DLL.\n        DWORD drc = GetModuleFileName( handle, ap_data._path, static_cast< DWORD >( PATH_MAX ) );\n        if ( drc == 0 ) { // Error occurred.\n            int err = GetLastError();\n            DYNAMIC_LINK_WARNING( dl_sys_fail, \"GetModuleFileName\", err );\n            return;\n        }\n        if ( drc >= PATH_MAX ) { // Buffer too short.\n            DYNAMIC_LINK_WARNING( dl_buff_too_small );\n            return;\n        }\n        // Find the position of the last backslash.\n        char *backslash = strrchr( ap_data._path, '\\\\' );\n\n        if ( !backslash ) {    // Backslash not found.\n            LIBRARY_ASSERT( backslash!=NULL, \"Unbelievable.\");\n            return;\n        }\n        LIBRARY_ASSERT( backslash >= ap_data._path, \"Unbelievable.\");\n        ap_data._len = (size_t)(backslash - ap_data._path) + 1;\n        *(backslash+1) = 0;\n    #else\n        // Get the library path\n        Dl_info dlinfo;\n        int res = dladdr( (void*)&dynamic_link, &dlinfo ); // any function inside the library can be used for the address\n        if ( !res ) {\n            char const * err = dlerror();\n            DYNAMIC_LINK_WARNING( dl_sys_fail, \"dladdr\", err );\n            return;\n        } else {\n            LIBRARY_ASSERT( dlinfo.dli_fname!=NULL, \"Unbelievable.\" );\n        }\n\n        char const *slash = strrchr( dlinfo.dli_fname, '/' );\n        size_t fname_len=0;\n        if ( slash ) {\n            LIBRARY_ASSERT( slash >= dlinfo.dli_fname, \"Unbelievable.\");\n            fname_len = (size_t)(slash - dlinfo.dli_fname) + 1;\n        }\n\n        size_t rc;\n        if ( dlinfo.dli_fname[0]=='/' ) {\n            // The library path is absolute\n            rc = 0;\n            ap_data._len = 0;\n        } else {\n            // The library path is relative so get the current working directory\n            if ( !getcwd( ap_data._path, sizeof(ap_data._path)/sizeof(ap_data._path[0]) ) ) {\n                DYNAMIC_LINK_WARNING( dl_buff_too_small );\n                return;\n            }\n            ap_data._len = strlen( ap_data._path );\n            ap_data._path[ap_data._len++]='/';\n            rc = ap_data._len;\n        }\n\n        if ( fname_len>0 ) {\n            if ( ap_data._len>PATH_MAX ) {\n                DYNAMIC_LINK_WARNING( dl_buff_too_small );\n                ap_data._len=0;\n                return;\n            }\n            strncpy( ap_data._path+rc, dlinfo.dli_fname, fname_len );\n            ap_data._len += fname_len;\n            ap_data._path[ap_data._len]=0;\n        }\n    #endif /* _WIN32 */\n    }\n\n    static void init_dl_data() {\n        handles.init();\n        init_ap_data();\n    }\n\n    /*\n        The function constructs absolute path for given relative path. Important: Base directory is not\n        current one, it is the directory libtbb.so loaded from.\n\n        Arguments:\n        in  name -- Name of a file (may be with relative path; it must not be an absolute one).\n        out path -- Buffer to save result (absolute path) to.\n        in  len  -- Size of buffer.\n        ret      -- 0         -- Error occurred.\n                    > len     -- Buffer too short, required size returned.\n                    otherwise -- Ok, number of characters (not counting terminating null) written to\n                    buffer.\n    */\n    static size_t abs_path( char const * name, char * path, size_t len ) {\n        if ( !ap_data._len )\n            return 0;\n\n        size_t name_len = strlen( name );\n        size_t full_len = name_len+ap_data._len;\n        if ( full_len < len ) {\n            strncpy( path, ap_data._path, ap_data._len );\n            strncpy( path+ap_data._len, name, name_len );\n            path[full_len] = 0;\n        }\n        return full_len;\n    }\n#endif  // __TBB_DYNAMIC_LOAD_ENABLED\n\n    void init_dynamic_link_data() {\n    #if __TBB_DYNAMIC_LOAD_ENABLED\n        atomic_once( &init_dl_data, init_dl_data_state );\n    #endif\n    }\n\n    #if __USE_STATIC_DL_INIT\n    // ap_data structure is initialized with current directory on Linux.\n    // So it should be initialized as soon as possible since the current directory may be changed.\n    // static_init_ap_data object provides this initialization during library loading.\n    static struct static_init_dl_data_t {\n        static_init_dl_data_t() {\n            init_dynamic_link_data();\n        }\n    } static_init_dl_data;\n    #endif\n\n    #if __TBB_WEAK_SYMBOLS_PRESENT\n    static bool weak_symbol_link( const dynamic_link_descriptor descriptors[], size_t required )\n    {\n        // Check if the required entries are present in what was loaded into our process.\n        for ( size_t k = 0; k < required; ++k )\n            if ( !descriptors[k].ptr )\n                return false;\n        // Commit the entry points.\n        for ( size_t k = 0; k < required; ++k )\n            *descriptors[k].handler = (pointer_to_handler) descriptors[k].ptr;\n        return true;\n    }\n    #else\n    static bool weak_symbol_link( const dynamic_link_descriptor[], size_t ) {\n        return false;\n    }\n    #endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n\n    void dynamic_unlink( dynamic_link_handle handle ) {\n    #if !__TBB_DYNAMIC_LOAD_ENABLED /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */\n        if ( !dlclose ) return;\n    #endif\n        if ( handle ) {\n            dlclose( handle );\n        }\n    }\n\n    void dynamic_unlink_all() {\n    #if __TBB_DYNAMIC_LOAD_ENABLED\n        handles.free();\n    #endif\n    }\n\n#if !_WIN32\n#if __TBB_DYNAMIC_LOAD_ENABLED\n    static dynamic_link_handle pin_symbols( dynamic_link_descriptor desc, const dynamic_link_descriptor* descriptors, size_t required ) {\n        // It is supposed that all symbols are from the only one library\n        // The library has been loaded by another module and contains at least one requested symbol.\n        // But after we obtained the symbol the library can be unloaded by another thread\n        // invalidating our symbol. Therefore we need to pin the library in memory.\n        dynamic_link_handle library_handle = 0;\n        Dl_info info;\n        // Get library's name from earlier found symbol\n        if ( dladdr( (void*)*desc.handler, &info ) ) {\n            // Pin the library\n            library_handle = dlopen( info.dli_fname, RTLD_LAZY );\n            if ( library_handle ) {\n                // If original library was unloaded before we pinned it\n                // and then another module loaded in its place, the earlier\n                // found symbol would become invalid. So revalidate them.\n                if ( !resolve_symbols( library_handle, descriptors, required ) ) {\n                    // Wrong library.\n                    dynamic_unlink(library_handle);\n                    library_handle = 0;\n                }\n            } else {\n                char const * err = dlerror();\n                DYNAMIC_LINK_WARNING( dl_lib_not_found, info.dli_fname, err );\n            }\n        }\n        // else the library has been unloaded by another thread\n        return library_handle;\n    }\n#endif /* __TBB_DYNAMIC_LOAD_ENABLED */\n#endif /* !_WIN32 */\n\n    static dynamic_link_handle global_symbols_link( const char* library, const dynamic_link_descriptor descriptors[], size_t required ) {\n        ::tbb::internal::suppress_unused_warning( library );\n        dynamic_link_handle library_handle;\n#if _WIN32\n        if ( GetModuleHandleEx( 0, library, &library_handle ) ) {\n            if ( resolve_symbols( library_handle, descriptors, required ) )\n                return library_handle;\n            else\n                FreeLibrary( library_handle );\n        }\n#else /* _WIN32 */\n    #if !__TBB_DYNAMIC_LOAD_ENABLED /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */\n        if ( !dlopen ) return 0;\n    #endif /* !__TBB_DYNAMIC_LOAD_ENABLED */\n        library_handle = dlopen( NULL, RTLD_LAZY );\n    #if !__ANDROID__\n        // On Android dlopen( NULL ) returns NULL if it is called during dynamic module initialization.\n        LIBRARY_ASSERT( library_handle, \"The handle for the main program is NULL\" );\n    #endif\n    #if __TBB_DYNAMIC_LOAD_ENABLED\n        // Check existence of the first symbol only, then use it to find the library and load all necessary symbols.\n        pointer_to_handler handler;\n        dynamic_link_descriptor desc;\n        desc.name = descriptors[0].name;\n        desc.handler = &handler;\n        if ( resolve_symbols( library_handle, &desc, 1 ) ) {\n            dynamic_unlink( library_handle );\n            return pin_symbols( desc, descriptors, required );\n        }\n    #else  /* only __TBB_WEAK_SYMBOLS_PRESENT is defined */\n        if ( resolve_symbols( library_handle, descriptors, required ) )\n            return library_handle;\n    #endif\n        dynamic_unlink( library_handle );\n#endif /* _WIN32 */\n        return 0;\n    }\n\n    static void save_library_handle( dynamic_link_handle src, dynamic_link_handle *dst ) {\n        LIBRARY_ASSERT( src, \"The library handle to store must be non-zero\" );\n        if ( dst )\n            *dst = src;\n    #if __TBB_DYNAMIC_LOAD_ENABLED\n        else\n            handles.add( src );\n    #endif /* __TBB_DYNAMIC_LOAD_ENABLED */\n    }\n\n    dynamic_link_handle dynamic_load( const char* library, const dynamic_link_descriptor descriptors[], size_t required ) {\n    ::tbb::internal::suppress_unused_warning( library, descriptors, required );\n    #if __TBB_DYNAMIC_LOAD_ENABLED\n\n    size_t const len = PATH_MAX + 1;\n    char path[ len ];\n    size_t rc = abs_path( library, path, len );\n    if ( 0 < rc && rc < len ) {\n#if _WIN32\n        // Prevent Windows from displaying silly message boxes if it fails to load library\n        // (e.g. because of MS runtime problems - one of those crazy manifest related ones)\n        UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);\n#endif /* _WIN32 */\n        dynamic_link_handle library_handle = dlopen( path, RTLD_LAZY );\n#if _WIN32\n        SetErrorMode (prev_mode);\n#endif /* _WIN32 */\n        if( library_handle ) {\n            if( !resolve_symbols( library_handle, descriptors, required ) ) {\n                // The loaded library does not contain all the expected entry points\n                dynamic_unlink( library_handle );\n                library_handle = NULL;\n            }\n        } else\n            DYNAMIC_LINK_WARNING( dl_lib_not_found, path, dlerror() );\n        return library_handle;\n    } else if ( rc>=len )\n            DYNAMIC_LINK_WARNING( dl_buff_too_small );\n            // rc == 0 means failing of init_ap_data so the warning has already been issued.\n\n    #endif /* __TBB_DYNAMIC_LOAD_ENABLED */\n        return 0;\n    }\n\n    bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t required, dynamic_link_handle *handle, int flags ) {\n        init_dynamic_link_data();\n\n        // TODO: May global_symbols_link find weak symbols?\n        dynamic_link_handle library_handle = ( flags & DYNAMIC_LINK_GLOBAL ) ? global_symbols_link( library, descriptors, required ) : 0;\n\n        if ( !library_handle && ( flags & DYNAMIC_LINK_LOAD ) )\n            library_handle = dynamic_load( library, descriptors, required );\n\n        if ( !library_handle && ( flags & DYNAMIC_LINK_WEAK ) )\n            return weak_symbol_link( descriptors, required );\n\n        if ( library_handle ) {\n            save_library_handle( library_handle, handle );\n            return true;\n        }\n        return false;\n    }\n\n#endif /*__TBB_WIN8UI_SUPPORT*/\n#else /* __TBB_WEAK_SYMBOLS_PRESENT || __TBB_DYNAMIC_LOAD_ENABLED */\n    bool dynamic_link( const char*, const dynamic_link_descriptor*, size_t, dynamic_link_handle *handle, int ) {\n        if ( handle )\n            *handle=0;\n        return false;\n    }\n    void dynamic_unlink( dynamic_link_handle ) {}\n    void dynamic_unlink_all() {}\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT || __TBB_DYNAMIC_LOAD_ENABLED */\n\nCLOSE_INTERNAL_NAMESPACE\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/dynamic_link.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_dynamic_link\n#define __TBB_dynamic_link\n\n// Support for dynamic loading entry points from other shared libraries.\n\n#include \"tbb/tbb_stddef.h\"\n\n#ifdef LIBRARY_ASSERT\n    #undef __TBB_ASSERT\n    #define __TBB_ASSERT(x,y) LIBRARY_ASSERT(x,y)\n#else\n    #define LIBRARY_ASSERT(x,y) __TBB_ASSERT_EX(x,y)\n#endif /* !LIBRARY_ASSERT */\n\n/** By default, symbols declared and defined here go into namespace tbb::internal.\n    To put them in other namespace, define macros OPEN_INTERNAL_NAMESPACE\n    and CLOSE_INTERNAL_NAMESPACE to override the following default definitions. **/\n#ifndef OPEN_INTERNAL_NAMESPACE\n#define OPEN_INTERNAL_NAMESPACE namespace tbb { namespace internal {\n#define CLOSE_INTERNAL_NAMESPACE }}\n#endif /* OPEN_INTERNAL_NAMESPACE */\n\n#include <stddef.h>\n#if _WIN32\n#include \"tbb/machine/windows_api.h\"\n#endif /* _WIN32 */\n\nOPEN_INTERNAL_NAMESPACE\n\n//! Type definition for a pointer to a void somefunc(void)\ntypedef void (*pointer_to_handler)();\n\n//! The helper to construct dynamic_link_descriptor structure\n// Double cast through the void* in DLD macro is necessary to\n// prevent warnings from some compilers (g++ 4.1)\n#if __TBB_WEAK_SYMBOLS_PRESENT\n#define DLD(s,h) {#s, (pointer_to_handler*)(void*)(&h), (pointer_to_handler)&s}\n#else\n#define DLD(s,h) {#s, (pointer_to_handler*)(void*)(&h)}\n#endif /* __TBB_WEAK_SYMBOLS_PRESENT */\n//! Association between a handler name and location of pointer to it.\nstruct dynamic_link_descriptor {\n    //! Name of the handler\n    const char* name;\n    //! Pointer to the handler\n    pointer_to_handler* handler;\n#if __TBB_WEAK_SYMBOLS_PRESENT\n    //! Weak symbol\n    pointer_to_handler ptr;\n#endif\n};\n\n#if _WIN32\ntypedef HMODULE dynamic_link_handle;\n#else\ntypedef void* dynamic_link_handle;\n#endif /* _WIN32 */\n\nconst int DYNAMIC_LINK_GLOBAL = 0x01;\nconst int DYNAMIC_LINK_LOAD   = 0x02;\nconst int DYNAMIC_LINK_WEAK   = 0x04;\nconst int DYNAMIC_LINK_ALL    = DYNAMIC_LINK_GLOBAL | DYNAMIC_LINK_LOAD | DYNAMIC_LINK_WEAK;\n\n//! Fill in dynamically linked handlers.\n/** 'library' is the name of the requested library. It should not contain a full\n    path since dynamic_link adds the full path (from which the runtime itself\n    was loaded) to the library name.\n    'required' is the number of the initial entries in the array descriptors[]\n    that have to be found in order for the call to succeed. If the library and\n    all the required handlers are found, then the corresponding handler\n    pointers are set, and the return value is true.  Otherwise the original\n    array of descriptors is left untouched and the return value is false.\n    'required' is limited by 20 (exceeding of this value will result in failure\n    to load the symbols and the return value will be false).\n    'handle' is the handle of the library if it is loaded. Otherwise it is left\n    untouched.\n    'flags' is the set of DYNAMIC_LINK_* flags. Each of the DYNAMIC_LINK_* flags\n    allows its corresponding linking stage.\n**/\nbool dynamic_link( const char* library,\n                   const dynamic_link_descriptor descriptors[],\n                   size_t required,\n                   dynamic_link_handle* handle = 0,\n                   int flags = DYNAMIC_LINK_ALL );\n\nvoid dynamic_unlink( dynamic_link_handle handle );\n\nvoid dynamic_unlink_all();\n\nenum dynamic_link_error_t {\n    dl_success = 0,\n    dl_lib_not_found,     // char const * lib, dlerr_t err\n    dl_sym_not_found,     // char const * sym, dlerr_t err\n                          // Note: dlerr_t depends on OS: it is char const * on Linux* and macOS*, int on Windows*.\n    dl_sys_fail,          // char const * func, int err\n    dl_buff_too_small     // none\n}; // dynamic_link_error_t\n\nCLOSE_INTERNAL_NAMESPACE\n\n#endif /* __TBB_dynamic_link */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/governor.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include \"governor.h\"\n#include \"tbb_main.h\"\n#include \"scheduler.h\"\n#include \"market.h\"\n#include \"arena.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"dynamic_link.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// governor\n//------------------------------------------------------------------------\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n// Support for interoperability with Intel(R) Cilk(TM) Plus.\n\n#if _WIN32\n#define CILKLIB_NAME \"cilkrts20.dll\"\n#else\n#define CILKLIB_NAME \"libcilkrts.so\"\n#endif\n\n//! Handler for interoperation with cilkrts library.\nstatic __cilk_tbb_retcode (*watch_stack_handler)(struct __cilk_tbb_unwatch_thunk* u,\n                                                 struct __cilk_tbb_stack_op_thunk o);\n\n//! Table describing how to link the handlers.\nstatic const dynamic_link_descriptor CilkLinkTable[] = {\n    { \"__cilkrts_watch_stack\", (pointer_to_handler*)(void*)(&watch_stack_handler) }\n};\n\nstatic atomic<do_once_state> cilkrts_load_state;\n\nbool initialize_cilk_interop() {\n    // Pinning can fail. This is a normal situation, and means that the current\n    // thread does not use cilkrts and consequently does not need interop.\n    return dynamic_link( CILKLIB_NAME, CilkLinkTable, 1,  /*handle=*/0, DYNAMIC_LINK_GLOBAL );\n}\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\nnamespace rml {\n    tbb_server* make_private_server( tbb_client& client );\n}\n\nvoid governor::acquire_resources () {\n#if USE_PTHREAD\n    int status = theTLS.create(auto_terminate);\n#else\n    int status = theTLS.create();\n#endif\n    if( status )\n        handle_perror(status, \"TBB failed to initialize task scheduler TLS\\n\");\n    is_speculation_enabled = cpu_has_speculation();\n    is_rethrow_broken = gcc_rethrow_exception_broken();\n}\n\nvoid governor::release_resources () {\n    theRMLServerFactory.close();\n    destroy_process_mask();\n#if TBB_USE_ASSERT\n    if( __TBB_InitOnce::initialization_done() && theTLS.get() ) \n        runtime_warning( \"TBB is unloaded while tbb::task_scheduler_init object is alive?\" );\n#endif\n    int status = theTLS.destroy();\n    if( status )\n        runtime_warning(\"failed to destroy task scheduler TLS: %s\", strerror(status));\n    dynamic_unlink_all();\n}\n\nrml::tbb_server* governor::create_rml_server ( rml::tbb_client& client ) {\n    rml::tbb_server* server = NULL;\n    if( !UsePrivateRML ) {\n        ::rml::factory::status_type status = theRMLServerFactory.make_server( server, client );\n        if( status != ::rml::factory::st_success ) {\n            UsePrivateRML = true;\n            runtime_warning( \"rml::tbb_factory::make_server failed with status %x, falling back on private rml\", status );\n        }\n    }\n    if ( !server ) {\n        __TBB_ASSERT( UsePrivateRML, NULL );\n        server = rml::make_private_server( client );\n    }\n    __TBB_ASSERT( server, \"Failed to create RML server\" );\n    return server;\n}\n\n\nuintptr_t governor::tls_value_of( generic_scheduler* s ) {\n    __TBB_ASSERT( (uintptr_t(s)&1) == 0, \"Bad pointer to the scheduler\" );\n    // LSB marks the scheduler initialized with arena\n    return uintptr_t(s) | uintptr_t((s && (s->my_arena || s->is_worker()))? 1 : 0);\n}\n\nvoid governor::assume_scheduler( generic_scheduler* s ) {\n    theTLS.set( tls_value_of(s) );\n}\n\nbool governor::is_set( generic_scheduler* s ) {\n    return theTLS.get() == tls_value_of(s);\n}\n\nvoid governor::sign_on(generic_scheduler* s) {\n    __TBB_ASSERT( is_set(NULL) && s, NULL );\n    assume_scheduler( s );\n#if __TBB_SURVIVE_THREAD_SWITCH\n    if( watch_stack_handler ) {\n        __cilk_tbb_stack_op_thunk o;\n        o.routine = &stack_op_handler;\n        o.data = s;\n        if( (*watch_stack_handler)(&s->my_cilk_unwatch_thunk, o) ) {\n            // Failed to register with cilkrts, make sure we are clean\n            s->my_cilk_unwatch_thunk.routine = NULL;\n        }\n#if TBB_USE_ASSERT\n        else\n            s->my_cilk_state = generic_scheduler::cs_running;\n#endif /* TBB_USE_ASSERT */\n    }\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n    __TBB_ASSERT( is_set(s), NULL );\n}\n\nvoid governor::sign_off(generic_scheduler* s) {\n    suppress_unused_warning(s);\n    __TBB_ASSERT( is_set(s), \"attempt to unregister a wrong scheduler instance\" );\n    assume_scheduler(NULL);\n#if __TBB_SURVIVE_THREAD_SWITCH\n    __cilk_tbb_unwatch_thunk &ut = s->my_cilk_unwatch_thunk;\n    if ( ut.routine )\n       (*ut.routine)(ut.data);\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n}\n\nvoid governor::one_time_init() {\n    if( !__TBB_InitOnce::initialization_done() )\n        DoOneTimeInitializations();\n#if __TBB_SURVIVE_THREAD_SWITCH\n    atomic_do_once( &initialize_cilk_interop, cilkrts_load_state );\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n}\n\ngeneric_scheduler* governor::init_scheduler_weak() {\n    one_time_init();\n    __TBB_ASSERT( is_set(NULL), \"TLS contains a scheduler?\" );\n    generic_scheduler* s = generic_scheduler::create_master( NULL ); // without arena\n    s->my_auto_initialized = true;\n    return s;\n}\n\ngeneric_scheduler* governor::init_scheduler( int num_threads, stack_size_type stack_size, bool auto_init ) {\n    one_time_init();\n    if ( uintptr_t v = theTLS.get() ) {\n        generic_scheduler* s = tls_scheduler_of( v );\n        if ( (v&1) == 0 ) { // TLS holds scheduler instance without arena\n            __TBB_ASSERT( s->my_ref_count == 1, \"weakly initialized scheduler must have refcount equal to 1\" );\n            __TBB_ASSERT( !s->my_arena, \"weakly initialized scheduler  must have no arena\" );\n            __TBB_ASSERT( s->my_auto_initialized, \"weakly initialized scheduler is supposed to be auto-initialized\" );\n            s->attach_arena( market::create_arena( default_num_threads(), 1, 0 ), 0, /*is_master*/true );\n            __TBB_ASSERT( s->my_arena_index == 0, \"Master thread must occupy the first slot in its arena\" );\n            s->my_arena_slot->my_scheduler = s;\n            s->my_arena->my_default_ctx = s->default_context(); // it also transfers implied ownership\n            // Mark the scheduler as fully initialized\n            assume_scheduler( s );\n        }\n        // Increment refcount only for explicit instances of task_scheduler_init.\n        if ( !auto_init ) s->my_ref_count += 1;\n        __TBB_ASSERT( s->my_arena, \"scheduler is not initialized fully\" );\n        return s;\n    }\n    // Create new scheduler instance with arena\n    if( num_threads == task_scheduler_init::automatic )\n        num_threads = default_num_threads();\n    arena *a = market::create_arena( num_threads, 1, stack_size );\n    generic_scheduler* s = generic_scheduler::create_master( a );\n    __TBB_ASSERT(s, \"Somehow a local scheduler creation for a master thread failed\");\n    __TBB_ASSERT( is_set(s), NULL );\n    s->my_auto_initialized = auto_init;\n    return s;\n}\n\nbool governor::terminate_scheduler( generic_scheduler* s, const task_scheduler_init* tsi_ptr, bool blocking ) {\n    bool ok = false;\n    __TBB_ASSERT( is_set(s), \"Attempt to terminate non-local scheduler instance\" );\n    if (0 == --(s->my_ref_count)) {\n        ok = s->cleanup_master( blocking );\n        __TBB_ASSERT( is_set(NULL), \"cleanup_master has not cleared its TLS slot\" );\n    }\n    return ok;\n}\n\nvoid governor::auto_terminate(void* arg){\n    generic_scheduler* s = tls_scheduler_of( uintptr_t(arg) ); // arg is equivalent to theTLS.get()\n    if( s && s->my_auto_initialized ) {\n        if( !--(s->my_ref_count) ) {\n            // If the TLS slot is already cleared by OS or underlying concurrency\n            // runtime, restore its value.\n            if( !is_set(s) )\n                assume_scheduler(s);\n            s->cleanup_master( /*blocking_terminate=*/false );\n            __TBB_ASSERT( is_set(NULL), \"cleanup_master has not cleared its TLS slot\" );\n        }\n    }\n}\n\nvoid governor::print_version_info () {\n    if ( UsePrivateRML )\n        PrintExtraVersionInfo( \"RML\", \"private\" );\n    else {\n        PrintExtraVersionInfo( \"RML\", \"shared\" );\n        theRMLServerFactory.call_with_server_info( PrintRMLVersionInfo, (void*)\"\" );\n    }\n#if __TBB_SURVIVE_THREAD_SWITCH\n    if( watch_stack_handler )\n        PrintExtraVersionInfo( \"CILK\", CILKLIB_NAME );\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n}\n\nvoid governor::initialize_rml_factory () {\n    ::rml::factory::status_type res = theRMLServerFactory.open();\n    UsePrivateRML = res != ::rml::factory::st_success;\n}\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n__cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* data ) {\n    __TBB_ASSERT(data,NULL);\n    generic_scheduler* s = static_cast<generic_scheduler*>(data);\n#if TBB_USE_ASSERT\n    void* current = local_scheduler_if_initialized();\n#if _WIN32||_WIN64\n    uintptr_t thread_id = GetCurrentThreadId();\n#else\n    uintptr_t thread_id = uintptr_t(pthread_self());\n#endif\n\n#endif /* TBB_USE_ASSERT */\n    switch( op ) {\n        default:\n            __TBB_ASSERT( 0, \"invalid op\" );\n        case CILK_TBB_STACK_ADOPT: {\n            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo ||\n                          current==s && s->my_cilk_state==generic_scheduler::cs_running, \"invalid adoption\" );\n#if TBB_USE_ASSERT\n            if( current==s )\n                runtime_warning( \"redundant adoption of %p by thread %p\\n\", s, (void*)thread_id );\n            s->my_cilk_state = generic_scheduler::cs_running;\n#endif /* TBB_USE_ASSERT */\n            assume_scheduler( s );\n            break;\n        }\n        case CILK_TBB_STACK_ORPHAN: {\n            __TBB_ASSERT( current==s && s->my_cilk_state==generic_scheduler::cs_running, \"invalid orphaning\" );\n#if TBB_USE_ASSERT\n            s->my_cilk_state = generic_scheduler::cs_limbo;\n#endif /* TBB_USE_ASSERT */\n            assume_scheduler(NULL);\n            break;\n        }\n        case CILK_TBB_STACK_RELEASE: {\n            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo ||\n                          current==s && s->my_cilk_state==generic_scheduler::cs_running, \"invalid release\" );\n#if TBB_USE_ASSERT\n            s->my_cilk_state = generic_scheduler::cs_freed;\n#endif /* TBB_USE_ASSERT */\n            s->my_cilk_unwatch_thunk.routine = NULL;\n            auto_terminate( s );\n        }\n    }\n    return 0;\n}\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n} // namespace internal\n\n//------------------------------------------------------------------------\n// task_scheduler_init\n//------------------------------------------------------------------------\n\nusing namespace internal;\n\n/** Left out-of-line for the sake of the backward binary compatibility **/\nvoid task_scheduler_init::initialize( int number_of_threads ) {\n    initialize( number_of_threads, 0 );\n}\n\nvoid task_scheduler_init::initialize( int number_of_threads, stack_size_type thread_stack_size ) {\n#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS\n    uintptr_t new_mode = thread_stack_size & propagation_mode_mask;\n#endif\n    thread_stack_size &= ~(stack_size_type)propagation_mode_mask;\n    if( number_of_threads!=deferred ) {\n        __TBB_ASSERT_RELEASE( !my_scheduler, \"task_scheduler_init already initialized\" );\n        __TBB_ASSERT_RELEASE( number_of_threads==automatic || number_of_threads > 0,\n                    \"number_of_threads for task_scheduler_init must be automatic or positive\" );\n        internal::generic_scheduler *s = governor::init_scheduler( number_of_threads, thread_stack_size, /*auto_init=*/false );\n#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS\n        if ( s->master_outermost_level() ) {\n            uintptr_t &vt = s->default_context()->my_version_and_traits;\n            uintptr_t prev_mode = vt & task_group_context::exact_exception ? propagation_mode_exact : 0;\n            vt = new_mode & propagation_mode_exact ? vt | task_group_context::exact_exception\n                    : new_mode & propagation_mode_captured ? vt & ~task_group_context::exact_exception : vt;\n            // Use least significant bit of the scheduler pointer to store previous mode.\n            // This is necessary when components compiled with different compilers and/or\n            // TBB versions initialize the\n            my_scheduler = static_cast<scheduler*>((generic_scheduler*)((uintptr_t)s | prev_mode));\n        }\n        else\n#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */\n            my_scheduler = s;\n    } else {\n        __TBB_ASSERT_RELEASE( !thread_stack_size, \"deferred initialization ignores stack size setting\" );\n    }\n}\n\nbool task_scheduler_init::internal_terminate( bool blocking ) {\n#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS\n    uintptr_t prev_mode = (uintptr_t)my_scheduler & propagation_mode_exact;\n    my_scheduler = (scheduler*)((uintptr_t)my_scheduler & ~(uintptr_t)propagation_mode_exact);\n#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */\n    generic_scheduler* s = static_cast<generic_scheduler*>(my_scheduler);\n    my_scheduler = NULL;\n    __TBB_ASSERT_RELEASE( s, \"task_scheduler_init::terminate without corresponding task_scheduler_init::initialize()\");\n#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS\n    if ( s->master_outermost_level() ) {\n        uintptr_t &vt = s->default_context()->my_version_and_traits;\n        vt = prev_mode & propagation_mode_exact ? vt | task_group_context::exact_exception\n                                        : vt & ~task_group_context::exact_exception;\n    }\n#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */\n    return governor::terminate_scheduler(s, this, blocking);\n}\n\nvoid task_scheduler_init::terminate() {\n    internal_terminate(/*blocking_terminate=*/false);\n}\n\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\nbool task_scheduler_init::internal_blocking_terminate( bool throwing ) {\n    bool ok = internal_terminate( /*blocking_terminate=*/true );\n#if TBB_USE_EXCEPTIONS\n    if( throwing && !ok )\n        throw_exception( eid_blocking_thread_join_impossible );\n#else\n    suppress_unused_warning( throwing );\n#endif\n    return ok;\n}\n#endif // __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n\nint task_scheduler_init::default_num_threads() {\n    return governor::default_num_threads();\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/governor.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_governor_H\n#define _TBB_governor_H\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"../rml/include/rml_tbb.h\"\n\n#include \"tbb_misc.h\" // for AvailableHwConcurrency\n#include \"tls.h\"\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n#include \"cilk-tbb-interop.h\"\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\nnamespace tbb {\nnamespace internal {\n\nclass market;\nclass generic_scheduler;\nclass __TBB_InitOnce;\n\nnamespace rml {\nclass tbb_client;\n}\n\n//------------------------------------------------------------------------\n// Class governor\n//------------------------------------------------------------------------\n\n//! The class handles access to the single instance of market, and to TLS to keep scheduler instances.\n/** It also supports automatic on-demand initialization of the TBB scheduler.\n    The class contains only static data members and methods.*/\nclass governor {\nprivate:\n    friend class __TBB_InitOnce;\n    friend class market;\n\n    //! TLS for scheduler instances associated with individual threads\n    static basic_tls<uintptr_t> theTLS;\n\n    //! Caches the maximal level of parallelism supported by the hardware\n    static unsigned DefaultNumberOfThreads;\n\n    static rml::tbb_factory theRMLServerFactory;\n\n    static bool UsePrivateRML;\n\n    // Flags for runtime-specific conditions\n    static bool is_speculation_enabled;\n    static bool is_rethrow_broken;\n\n    //! Create key for thread-local storage and initialize RML.\n    static void acquire_resources ();\n\n    //! Destroy the thread-local storage key and deinitialize RML.\n    static void release_resources ();\n\n    static rml::tbb_server* create_rml_server ( rml::tbb_client& );\n\n    //! The internal routine to undo automatic initialization.\n    /** The signature is written with void* so that the routine\n        can be the destructor argument to pthread_key_create. */\n    static void auto_terminate(void* scheduler);\n\npublic:\n    static unsigned default_num_threads () {\n        // No memory fence required, because at worst each invoking thread calls AvailableHwConcurrency once.\n        return DefaultNumberOfThreads ? DefaultNumberOfThreads :\n                                        DefaultNumberOfThreads = AvailableHwConcurrency();\n    }\n    static void one_time_init();\n    //! Processes scheduler initialization request (possibly nested) in a master thread\n    /** If necessary creates new instance of arena and/or local scheduler.\n        The auto_init argument specifies if the call is due to automatic initialization. **/\n    static generic_scheduler* init_scheduler( int num_threads, stack_size_type stack_size, bool auto_init );\n\n    //! Automatic initialization of scheduler in a master thread with default settings without arena\n    static generic_scheduler* init_scheduler_weak();\n\n    //! Processes scheduler termination request (possibly nested) in a master thread\n    static bool terminate_scheduler( generic_scheduler* s, const task_scheduler_init *tsi_ptr, bool blocking );\n\n    //! Register TBB scheduler instance in thread-local storage.\n    static void sign_on( generic_scheduler* s );\n\n    //! Unregister TBB scheduler instance from thread-local storage.\n    static void sign_off( generic_scheduler* s );\n\n    //! Used to check validity of the local scheduler TLS contents.\n    static bool is_set( generic_scheduler* s );\n\n    //! Temporarily set TLS slot to the given scheduler\n    static void assume_scheduler( generic_scheduler* s );\n\n    //! Computes the value of the TLS\n    static uintptr_t tls_value_of( generic_scheduler* s );\n\n    // TODO IDEA: refactor bit manipulations over pointer types to a class?\n    //! Converts TLS value to the scheduler pointer\n    static generic_scheduler* tls_scheduler_of( uintptr_t v ) {\n        return (generic_scheduler*)(v & ~uintptr_t(1));\n    }\n\n    //! Obtain the thread-local instance of the TBB scheduler.\n    /** If the scheduler has not been initialized yet, initialization is done automatically.\n        Note that auto-initialized scheduler instance is destroyed only when its thread terminates. **/\n    static generic_scheduler* local_scheduler () {\n        uintptr_t v = theTLS.get();\n        return (v&1) ? tls_scheduler_of(v) : init_scheduler( task_scheduler_init::automatic, 0, /*auto_init=*/true );\n    }\n\n    static generic_scheduler* local_scheduler_weak () {\n        uintptr_t v = theTLS.get();\n        return v ? tls_scheduler_of(v) : init_scheduler_weak();\n    }\n\n    static generic_scheduler* local_scheduler_if_initialized () {\n        return tls_scheduler_of( theTLS.get() );\n    }\n\n    //! Undo automatic initialization if necessary; call when a thread exits.\n    static void terminate_auto_initialized_scheduler() {\n        auto_terminate( local_scheduler_if_initialized() );\n    }\n\n    static void print_version_info ();\n\n    static void initialize_rml_factory ();\n\n    static bool does_client_join_workers (const tbb::internal::rml::tbb_client &client);\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n    static __cilk_tbb_retcode stack_op_handler( __cilk_tbb_stack_op op, void* );\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n    static bool speculation_enabled() { return is_speculation_enabled; }\n    static bool rethrow_exception_broken() { return is_rethrow_broken; }\n\n}; // class governor\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_governor_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia32-masm/atomic_support.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n.686\n.model flat,c\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchadd1\n__TBB_machine_fetchadd1:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xadd [edx],al\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchstore1\n__TBB_machine_fetchstore1:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xchg [edx],al\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_cmpswp1\n__TBB_machine_cmpswp1:\n\tmov edx,4[esp]\n\tmov ecx,8[esp]\n\tmov eax,12[esp]\n\tlock cmpxchg [edx],cl\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchadd2\n__TBB_machine_fetchadd2:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xadd [edx],ax\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchstore2\n__TBB_machine_fetchstore2:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xchg [edx],ax\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_cmpswp2\n__TBB_machine_cmpswp2:\n\tmov edx,4[esp]\n\tmov ecx,8[esp]\n\tmov eax,12[esp]\n\tlock cmpxchg [edx],cx\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchadd4\n__TBB_machine_fetchadd4:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xadd [edx],eax\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchstore4\n__TBB_machine_fetchstore4:\n\tmov edx,4[esp]\n\tmov eax,8[esp]\n\tlock xchg [edx],eax\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_cmpswp4\n__TBB_machine_cmpswp4:\n\tmov edx,4[esp]\n\tmov ecx,8[esp]\n\tmov eax,12[esp]\n\tlock cmpxchg [edx],ecx\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchadd8\n__TBB_machine_fetchadd8:\n\tpush ebx\n\tpush edi\n\tmov edi,12[esp]\n\tmov eax,[edi]\n\tmov edx,4[edi]\n__TBB_machine_fetchadd8_loop:\n\tmov ebx,16[esp]\n\tmov ecx,20[esp]\n\tadd ebx,eax\n\tadc ecx,edx\n\tlock cmpxchg8b qword ptr [edi]\n\tjnz __TBB_machine_fetchadd8_loop\n\tpop edi\n\tpop ebx\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_fetchstore8\n__TBB_machine_fetchstore8:\n\tpush ebx\n\tpush edi\n\tmov edi,12[esp]\n\tmov ebx,16[esp]\n\tmov ecx,20[esp]\n\tmov eax,[edi]\n\tmov edx,4[edi]\n__TBB_machine_fetchstore8_loop:\n\tlock cmpxchg8b qword ptr [edi]\n\tjnz __TBB_machine_fetchstore8_loop\n\tpop edi\n\tpop ebx\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_cmpswp8\n__TBB_machine_cmpswp8:\n\tpush ebx\n\tpush edi\n\tmov edi,12[esp]\n\tmov ebx,16[esp]\n\tmov ecx,20[esp]\n\tmov eax,24[esp]\n\tmov edx,28[esp]\n\tlock cmpxchg8b qword ptr [edi]\n\tpop edi\n\tpop ebx\n\tret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_load8\n__TBB_machine_Load8:\n\t; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.\n\tmov ecx,4[esp]\n\ttest ecx,7\n\tjne load_slow\n\t; Load within a cache line\n\tsub esp,12\n\tfild qword ptr [ecx]\n\tfistp qword ptr [esp]\n\tmov eax,[esp]\n\tmov edx,4[esp]\n\tadd esp,12\n\tret\nload_slow:\n\t; Load is misaligned. Use cmpxchg8b.\n\tpush ebx\n\tpush edi\n\tmov edi,ecx\n\txor eax,eax\n\txor ebx,ebx\n\txor ecx,ecx\n\txor edx,edx\n\tlock cmpxchg8b qword ptr [edi]\n\tpop edi\n\tpop ebx\n\tret\nEXTRN __TBB_machine_store8_slow:PROC\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_store8\n__TBB_machine_Store8:\n\t; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.\n\tmov ecx,4[esp]\n\ttest ecx,7\n\tjne __TBB_machine_store8_slow ;; tail call to tbb_misc.cpp\n\tfild qword ptr 8[esp]\n\tfistp qword ptr [ecx]\n\tret\nend\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia32-masm/itsx.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n.686\n.model flat,c\n.code\n        ALIGN 4\n        PUBLIC c __TBB_machine_try_lock_elided\n__TBB_machine_try_lock_elided:\n        mov ecx, 4[esp]\n        xor eax, eax\n        mov al, 1\n        BYTE 0F2H\n        xchg al, byte ptr [ecx]\n        xor  al, 1\n        ret\n.code\n        ALIGN 4\n        PUBLIC c __TBB_machine_unlock_elided\n__TBB_machine_unlock_elided:\n        mov ecx, 4[esp]\n        BYTE 0F3H\n        mov byte ptr [ecx], 0\n        ret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_begin_transaction\n__TBB_machine_begin_transaction:\n        mov  eax, -1\n        BYTE 0C7H\n        BYTE 0F8H\n        BYTE 000H\n        BYTE 000H\n        BYTE 000H\n        BYTE 000H\n        ret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_end_transaction\n__TBB_machine_end_transaction:\n        BYTE 00FH\n        BYTE 001H\n        BYTE 0D5H\n        ret\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_transaction_conflict_abort\n__TBB_machine_transaction_conflict_abort:\n        BYTE 0C6H\n        BYTE 0F8H\n        BYTE 0FFH  ; 12.4.5 Abort argument: lock not free when tested\n        ret\n.code \n        ALIGN 4\n\tPUBLIC c __TBB_machine_is_in_transaction\n__TBB_machine_is_in_transaction:\n        xor eax, eax\n        BYTE 00FH\n        BYTE 001H\n        BYTE 0D6H\n        JZ   rset\n        MOV  al,1\nrset:\n        RET\nend\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia32-masm/lock_byte.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE\n.686\n.model flat,c\n.code \n\tALIGN 4\n\tPUBLIC c __TBB_machine_trylockbyte\n__TBB_machine_trylockbyte:\n\tmov edx,4[esp]\n\tmov al,[edx]\n\tmov cl,1\n\ttest al,1\n\tjnz __TBB_machine_trylockbyte_contended\n\tlock cmpxchg [edx],cl\n\tjne __TBB_machine_trylockbyte_contended\n\tmov eax,1\n\tret\n__TBB_machine_trylockbyte_contended:\n\txor eax,eax\n\tret\nend\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia64-gas/atomic_support.s",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_fetchadd1__TBB_full_fence#\n        .global __TBB_machine_fetchadd1__TBB_full_fence#\n__TBB_machine_fetchadd1__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_fetchadd1acquire\n}\n        .endp __TBB_machine_fetchadd1__TBB_full_fence#\n\n        .proc __TBB_machine_fetchadd1acquire#\n        .global __TBB_machine_fetchadd1acquire#\n__TBB_machine_fetchadd1acquire:\n\n\n\n\n\n\n\n        ld1 r9=[r32]\n;;\nRetry_1acquire:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg1.acq r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_1acquire\n        br.ret.sptk.many b0\n# 49 \"<stdin>\"\n        .endp __TBB_machine_fetchadd1acquire#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore1__TBB_full_fence#\n        .global __TBB_machine_fetchstore1__TBB_full_fence#\n__TBB_machine_fetchstore1__TBB_full_fence:\n        mf\n;;\n        xchg1 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore1__TBB_full_fence#\n\n\n        .proc __TBB_machine_fetchstore1acquire#\n        .global __TBB_machine_fetchstore1acquire#\n__TBB_machine_fetchstore1acquire:\n        xchg1 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore1acquire#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_cmpswp1__TBB_full_fence#\n        .global __TBB_machine_cmpswp1__TBB_full_fence#\n__TBB_machine_cmpswp1__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_cmpswp1acquire\n}\n        .endp __TBB_machine_cmpswp1__TBB_full_fence#\n\n        .proc __TBB_machine_cmpswp1acquire#\n        .global __TBB_machine_cmpswp1acquire#\n__TBB_machine_cmpswp1acquire:\n\n        zxt1 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg1.acq r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp1acquire#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_fetchadd2__TBB_full_fence#\n        .global __TBB_machine_fetchadd2__TBB_full_fence#\n__TBB_machine_fetchadd2__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_fetchadd2acquire\n}\n        .endp __TBB_machine_fetchadd2__TBB_full_fence#\n\n        .proc __TBB_machine_fetchadd2acquire#\n        .global __TBB_machine_fetchadd2acquire#\n__TBB_machine_fetchadd2acquire:\n\n\n\n\n\n\n\n        ld2 r9=[r32]\n;;\nRetry_2acquire:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg2.acq r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_2acquire\n        br.ret.sptk.many b0\n# 49 \"<stdin>\"\n        .endp __TBB_machine_fetchadd2acquire#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore2__TBB_full_fence#\n        .global __TBB_machine_fetchstore2__TBB_full_fence#\n__TBB_machine_fetchstore2__TBB_full_fence:\n        mf\n;;\n        xchg2 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore2__TBB_full_fence#\n\n\n        .proc __TBB_machine_fetchstore2acquire#\n        .global __TBB_machine_fetchstore2acquire#\n__TBB_machine_fetchstore2acquire:\n        xchg2 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore2acquire#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_cmpswp2__TBB_full_fence#\n        .global __TBB_machine_cmpswp2__TBB_full_fence#\n__TBB_machine_cmpswp2__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_cmpswp2acquire\n}\n        .endp __TBB_machine_cmpswp2__TBB_full_fence#\n\n        .proc __TBB_machine_cmpswp2acquire#\n        .global __TBB_machine_cmpswp2acquire#\n__TBB_machine_cmpswp2acquire:\n\n        zxt2 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg2.acq r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp2acquire#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_fetchadd4__TBB_full_fence#\n        .global __TBB_machine_fetchadd4__TBB_full_fence#\n__TBB_machine_fetchadd4__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_fetchadd4acquire\n}\n        .endp __TBB_machine_fetchadd4__TBB_full_fence#\n\n        .proc __TBB_machine_fetchadd4acquire#\n        .global __TBB_machine_fetchadd4acquire#\n__TBB_machine_fetchadd4acquire:\n\n        cmp.eq p6,p0=1,r33\n        cmp.eq p8,p0=-1,r33\n  (p6) br.cond.dptk Inc_4acquire\n  (p8) br.cond.dpnt Dec_4acquire\n;;\n\n        ld4 r9=[r32]\n;;\nRetry_4acquire:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg4.acq r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_4acquire\n        br.ret.sptk.many b0\n\nInc_4acquire:\n        fetchadd4.acq r8=[r32],1\n        br.ret.sptk.many b0\nDec_4acquire:\n        fetchadd4.acq r8=[r32],-1\n        br.ret.sptk.many b0\n\n        .endp __TBB_machine_fetchadd4acquire#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore4__TBB_full_fence#\n        .global __TBB_machine_fetchstore4__TBB_full_fence#\n__TBB_machine_fetchstore4__TBB_full_fence:\n        mf\n;;\n        xchg4 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore4__TBB_full_fence#\n\n\n        .proc __TBB_machine_fetchstore4acquire#\n        .global __TBB_machine_fetchstore4acquire#\n__TBB_machine_fetchstore4acquire:\n        xchg4 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore4acquire#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_cmpswp4__TBB_full_fence#\n        .global __TBB_machine_cmpswp4__TBB_full_fence#\n__TBB_machine_cmpswp4__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_cmpswp4acquire\n}\n        .endp __TBB_machine_cmpswp4__TBB_full_fence#\n\n        .proc __TBB_machine_cmpswp4acquire#\n        .global __TBB_machine_cmpswp4acquire#\n__TBB_machine_cmpswp4acquire:\n\n        zxt4 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg4.acq r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp4acquire#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_fetchadd8__TBB_full_fence#\n        .global __TBB_machine_fetchadd8__TBB_full_fence#\n__TBB_machine_fetchadd8__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_fetchadd8acquire\n}\n        .endp __TBB_machine_fetchadd8__TBB_full_fence#\n\n        .proc __TBB_machine_fetchadd8acquire#\n        .global __TBB_machine_fetchadd8acquire#\n__TBB_machine_fetchadd8acquire:\n\n        cmp.eq p6,p0=1,r33\n        cmp.eq p8,p0=-1,r33\n  (p6) br.cond.dptk Inc_8acquire\n  (p8) br.cond.dpnt Dec_8acquire\n;;\n\n        ld8 r9=[r32]\n;;\nRetry_8acquire:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg8.acq r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_8acquire\n        br.ret.sptk.many b0\n\nInc_8acquire:\n        fetchadd8.acq r8=[r32],1\n        br.ret.sptk.many b0\nDec_8acquire:\n        fetchadd8.acq r8=[r32],-1\n        br.ret.sptk.many b0\n\n        .endp __TBB_machine_fetchadd8acquire#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore8__TBB_full_fence#\n        .global __TBB_machine_fetchstore8__TBB_full_fence#\n__TBB_machine_fetchstore8__TBB_full_fence:\n        mf\n;;\n        xchg8 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore8__TBB_full_fence#\n\n\n        .proc __TBB_machine_fetchstore8acquire#\n        .global __TBB_machine_fetchstore8acquire#\n__TBB_machine_fetchstore8acquire:\n        xchg8 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore8acquire#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n\n\n        .proc __TBB_machine_cmpswp8__TBB_full_fence#\n        .global __TBB_machine_cmpswp8__TBB_full_fence#\n__TBB_machine_cmpswp8__TBB_full_fence:\n{\n        mf\n        br __TBB_machine_cmpswp8acquire\n}\n        .endp __TBB_machine_cmpswp8__TBB_full_fence#\n\n        .proc __TBB_machine_cmpswp8acquire#\n        .global __TBB_machine_cmpswp8acquire#\n__TBB_machine_cmpswp8acquire:\n\n\n\n\n        mov ar.ccv=r34\n;;\n        cmpxchg8.acq r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp8acquire#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n# 19 \"<stdin>\"\n        .proc __TBB_machine_fetchadd1release#\n        .global __TBB_machine_fetchadd1release#\n__TBB_machine_fetchadd1release:\n\n\n\n\n\n\n\n        ld1 r9=[r32]\n;;\nRetry_1release:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg1.rel r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_1release\n        br.ret.sptk.many b0\n# 49 \"<stdin>\"\n        .endp __TBB_machine_fetchadd1release#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore1release#\n        .global __TBB_machine_fetchstore1release#\n__TBB_machine_fetchstore1release:\n        mf\n;;\n        xchg1 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore1release#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n# 101 \"<stdin>\"\n        .proc __TBB_machine_cmpswp1release#\n        .global __TBB_machine_cmpswp1release#\n__TBB_machine_cmpswp1release:\n\n        zxt1 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg1.rel r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp1release#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n# 19 \"<stdin>\"\n        .proc __TBB_machine_fetchadd2release#\n        .global __TBB_machine_fetchadd2release#\n__TBB_machine_fetchadd2release:\n\n\n\n\n\n\n\n        ld2 r9=[r32]\n;;\nRetry_2release:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg2.rel r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_2release\n        br.ret.sptk.many b0\n# 49 \"<stdin>\"\n        .endp __TBB_machine_fetchadd2release#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore2release#\n        .global __TBB_machine_fetchstore2release#\n__TBB_machine_fetchstore2release:\n        mf\n;;\n        xchg2 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore2release#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n# 101 \"<stdin>\"\n        .proc __TBB_machine_cmpswp2release#\n        .global __TBB_machine_cmpswp2release#\n__TBB_machine_cmpswp2release:\n\n        zxt2 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg2.rel r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp2release#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n# 19 \"<stdin>\"\n        .proc __TBB_machine_fetchadd4release#\n        .global __TBB_machine_fetchadd4release#\n__TBB_machine_fetchadd4release:\n\n        cmp.eq p6,p0=1,r33\n        cmp.eq p8,p0=-1,r33\n  (p6) br.cond.dptk Inc_4release\n  (p8) br.cond.dpnt Dec_4release\n;;\n\n        ld4 r9=[r32]\n;;\nRetry_4release:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg4.rel r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_4release\n        br.ret.sptk.many b0\n\nInc_4release:\n        fetchadd4.rel r8=[r32],1\n        br.ret.sptk.many b0\nDec_4release:\n        fetchadd4.rel r8=[r32],-1\n        br.ret.sptk.many b0\n\n        .endp __TBB_machine_fetchadd4release#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore4release#\n        .global __TBB_machine_fetchstore4release#\n__TBB_machine_fetchstore4release:\n        mf\n;;\n        xchg4 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore4release#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n# 101 \"<stdin>\"\n        .proc __TBB_machine_cmpswp4release#\n        .global __TBB_machine_cmpswp4release#\n__TBB_machine_cmpswp4release:\n\n        zxt4 r34=r34\n;;\n\n        mov ar.ccv=r34\n;;\n        cmpxchg4.rel r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp4release#\n// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh\n# 1 \"<stdin>\"\n# 1 \"<built-in>\"\n# 1 \"<command line>\"\n# 1 \"<stdin>\"\n\n\n\n\n\n        .section .text\n        .align 16\n# 19 \"<stdin>\"\n        .proc __TBB_machine_fetchadd8release#\n        .global __TBB_machine_fetchadd8release#\n__TBB_machine_fetchadd8release:\n\n        cmp.eq p6,p0=1,r33\n        cmp.eq p8,p0=-1,r33\n  (p6) br.cond.dptk Inc_8release\n  (p8) br.cond.dpnt Dec_8release\n;;\n\n        ld8 r9=[r32]\n;;\nRetry_8release:\n        mov ar.ccv=r9\n        mov r8=r9;\n        add r10=r9,r33\n;;\n        cmpxchg8.rel r9=[r32],r10,ar.ccv\n;;\n        cmp.ne p7,p0=r8,r9\n  (p7) br.cond.dpnt Retry_8release\n        br.ret.sptk.many b0\n\nInc_8release:\n        fetchadd8.rel r8=[r32],1\n        br.ret.sptk.many b0\nDec_8release:\n        fetchadd8.rel r8=[r32],-1\n        br.ret.sptk.many b0\n\n        .endp __TBB_machine_fetchadd8release#\n# 62 \"<stdin>\"\n        .section .text\n        .align 16\n        .proc __TBB_machine_fetchstore8release#\n        .global __TBB_machine_fetchstore8release#\n__TBB_machine_fetchstore8release:\n        mf\n;;\n        xchg8 r8=[r32],r33\n        br.ret.sptk.many b0\n        .endp __TBB_machine_fetchstore8release#\n# 88 \"<stdin>\"\n        .section .text\n        .align 16\n# 101 \"<stdin>\"\n        .proc __TBB_machine_cmpswp8release#\n        .global __TBB_machine_cmpswp8release#\n__TBB_machine_cmpswp8release:\n\n\n\n\n        mov ar.ccv=r34\n;;\n        cmpxchg8.rel r8=[r32],r33,ar.ccv\n        br.ret.sptk.many b0\n        .endp __TBB_machine_cmpswp8release#\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia64-gas/ia64_misc.s",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n\t// RSE backing store pointer retrieval\n    .section .text\n    .align 16\n    .proc __TBB_get_bsp#\n    .global __TBB_get_bsp#\n__TBB_get_bsp:\n        mov r8=ar.bsp\n        br.ret.sptk.many b0\n    .endp __TBB_get_bsp#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_load8_relaxed#\n    .global __TBB_machine_load8_relaxed#\n__TBB_machine_load8_relaxed:\n        ld8 r8=[r32]\n        br.ret.sptk.many b0\n    .endp __TBB_machine_load8_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_store8_relaxed#\n    .global __TBB_machine_store8_relaxed#\n__TBB_machine_store8_relaxed:\n        st8 [r32]=r33\n        br.ret.sptk.many b0\n    .endp __TBB_machine_store8_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_load4_relaxed#\n    .global __TBB_machine_load4_relaxed#\n__TBB_machine_load4_relaxed:\n        ld4 r8=[r32]\n        br.ret.sptk.many b0\n    .endp __TBB_machine_load4_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_store4_relaxed#\n    .global __TBB_machine_store4_relaxed#\n__TBB_machine_store4_relaxed:\n        st4 [r32]=r33\n        br.ret.sptk.many b0\n    .endp __TBB_machine_store4_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_load2_relaxed#\n    .global __TBB_machine_load2_relaxed#\n__TBB_machine_load2_relaxed:\n        ld2 r8=[r32]\n        br.ret.sptk.many b0\n    .endp __TBB_machine_load2_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_store2_relaxed#\n    .global __TBB_machine_store2_relaxed#\n__TBB_machine_store2_relaxed:\n        st2 [r32]=r33\n        br.ret.sptk.many b0\n    .endp __TBB_machine_store2_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_load1_relaxed#\n    .global __TBB_machine_load1_relaxed#\n__TBB_machine_load1_relaxed:\n        ld1 r8=[r32]\n        br.ret.sptk.many b0\n    .endp __TBB_machine_load1_relaxed#\n\n    .section .text\n    .align 16\n    .proc __TBB_machine_store1_relaxed#\n    .global __TBB_machine_store1_relaxed#\n__TBB_machine_store1_relaxed:\n        st1 [r32]=r33\n        br.ret.sptk.many b0\n    .endp __TBB_machine_store1_relaxed#\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia64-gas/lock_byte.s",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n\t// Support for class TinyLock\n\t.section .text\n\t.align 16\n\t// unsigned int __TBB_machine_trylockbyte( byte& flag );\n\t// r32 = address of flag \n\t.proc  __TBB_machine_trylockbyte#\n\t.global __TBB_machine_trylockbyte#\nADDRESS_OF_FLAG=r32\nRETCODE=r8\nFLAG=r9\nBUSY=r10\nSCRATCH=r11\n__TBB_machine_trylockbyte:\n        ld1.acq FLAG=[ADDRESS_OF_FLAG]\n        mov BUSY=1\n        mov RETCODE=0\n;;\n        cmp.ne p6,p0=0,FLAG\n        mov ar.ccv=r0\n(p6)    br.ret.sptk.many b0\n;;\n        cmpxchg1.acq SCRATCH=[ADDRESS_OF_FLAG],BUSY,ar.ccv  // Try to acquire lock\n;;\n        cmp.eq p6,p0=0,SCRATCH\n;;\n(p6)    mov RETCODE=1\n   \tbr.ret.sptk.many b0\t\n\t.endp __TBB_machine_trylockbyte#\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia64-gas/log2.s",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n\t.section .text\n\t.align 16\n\t// unsigned long __TBB_machine_lg( unsigned long x );\n\t// r32 = x\n\t.proc  __TBB_machine_lg#\n\t.global __TBB_machine_lg#\n__TBB_machine_lg:\n        shr r16=r32,1\t// .x\n;;\n        shr r17=r32,2\t// ..x\n\tor r32=r32,r16\t// xx\n;;\n\tshr r16=r32,3\t// ...xx\n\tor r32=r32,r17  // xxx\n;;\n\tshr r17=r32,5\t// .....xxx\n\tor r32=r32,r16  // xxxxx\n;;\n\tshr r16=r32,8\t// ........xxxxx\n\tor r32=r32,r17\t// xxxxxxxx\n;;\n\tshr r17=r32,13\n\tor r32=r32,r16\t// 13x\n;;\n\tshr r16=r32,21\n\tor r32=r32,r17\t// 21x\n;;\n\tshr r17=r32,34  \n\tor r32=r32,r16\t// 34x\n;;\n\tshr r16=r32,55\n\tor r32=r32,r17  // 55x\n;;\n\tor r32=r32,r16  // 64x\n;;\n\tpopcnt r8=r32\n;;\n\tadd r8=-1,r8\n   \tbr.ret.sptk.many b0\t\n\t.endp __TBB_machine_lg#\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ia64-gas/pause.s",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n\t.section .text\n\t.align 16\n\t// void __TBB_machine_pause( long count );\n\t// r32 = count\n\t.proc  __TBB_machine_pause#\n\t.global __TBB_machine_pause#\ncount = r32\n__TBB_machine_pause:\n        hint.m 0\n\tadd count=-1,count\n;;\n\tcmp.eq p6,p7=0,count\n(p7)\tbr.cond.dpnt __TBB_machine_pause\n(p6)   \tbr.ret.sptk.many b0\t\n\t.endp __TBB_machine_pause#\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/ibm_aix51/atomic_support.c",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <stdint.h>\n#include <sys/atomic_op.h>\n\n/* This file must be compiled with gcc.  The IBM compiler doesn't seem to\n   support inline assembly statements (October 2007). */\n\n#ifdef __GNUC__\n\nint32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand) { \n    __asm__ __volatile__ (\"sync\\n\");  /* memory release operation */\n    compare_and_swap ((atomic_p) ptr, &comparand, value);\n    __asm__ __volatile__ (\"isync\\n\");  /* memory acquire operation */\n    return comparand;\n}\n\nint64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand) { \n    __asm__ __volatile__ (\"sync\\n\");  /* memory release operation */\n    compare_and_swaplp ((atomic_l) ptr, &comparand, value);\n    __asm__ __volatile__ (\"isync\\n\");  /* memory acquire operation */\n    return comparand;\n}\n\nvoid __TBB_machine_flush () { \n    __asm__ __volatile__ (\"sync\\n\");\n}\n\nvoid __TBB_machine_lwsync () { \n    __asm__ __volatile__ (\"lwsync\\n\");\n}\n\nvoid __TBB_machine_isync () { \n    __asm__ __volatile__ (\"isync\\n\");\n}\n\n#endif /* __GNUC__ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nThis directory contains the source code of the TBB core components.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"tools_api\">tools_api</A>\n<DD>Source code of the interface components provided by the Intel&reg; Parallel Studio tools.\n<DT><A HREF=\"intel64-masm\">intel64-masm</A>\n<DD>Assembly code for the Intel&reg; 64 architecture.\n<DT><A HREF=\"ia32-masm\">ia32-masm</A>\n<DD>Assembly code for IA32 architecture.\n<DT><A HREF=\"ia64-gas\">ia64-gas</A>\n<DD>Assembly code for IA-64 architecture.\n<DT><A HREF=\"ibm_aix51\">ibm_aix51</A>\n<DD>Assembly code for AIX 5.1 port.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/intel64-masm/atomic_support.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_fetchadd1\n__TBB_machine_fetchadd1:\n\tmov rax,rdx\n\tlock xadd [rcx],al\n\tret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_fetchstore1\n__TBB_machine_fetchstore1:\n\tmov rax,rdx\n\tlock xchg [rcx],al\n\tret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_cmpswp1\n__TBB_machine_cmpswp1:\n\tmov rax,r8\n\tlock cmpxchg [rcx],dl\n\tret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_fetchadd2\n__TBB_machine_fetchadd2:\n\tmov rax,rdx\n\tlock xadd [rcx],ax\n\tret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_fetchstore2\n__TBB_machine_fetchstore2:\n\tmov rax,rdx\n\tlock xchg [rcx],ax\n\tret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_cmpswp2\n__TBB_machine_cmpswp2:\n\tmov rax,r8\n\tlock cmpxchg [rcx],dx\n\tret\n.code\n        ALIGN 8\n        PUBLIC __TBB_machine_pause\n__TBB_machine_pause:\nL1:\n        dw 090f3H; pause\n        add ecx,-1\n        jne L1\n        ret\nend\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/intel64-masm/intel64_misc.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n.code\n\tALIGN 8\n\tPUBLIC __TBB_get_cpu_ctl_env\n__TBB_get_cpu_ctl_env:\n    stmxcsr [rcx]\n    fstcw   [rcx+4]\n\tret\n.code\n\tALIGN 8\n\tPUBLIC __TBB_set_cpu_ctl_env\n__TBB_set_cpu_ctl_env:\n    ldmxcsr [rcx]\n    fldcw   [rcx+4]\n\tret\nend\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/intel64-masm/itsx.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n.code\n        ALIGN 8\n        PUBLIC __TBB_machine_try_lock_elided\n__TBB_machine_try_lock_elided:\n        xor  rax, rax\n        mov  al, 1\n        BYTE 0F2H\n        xchg al, byte ptr [rcx]\n        xor  al, 1\n        ret\n.code\n        ALIGN 8\n        PUBLIC __TBB_machine_unlock_elided\n__TBB_machine_unlock_elided:\n        BYTE 0F3H\n        mov  byte ptr [rcx], 0\n        ret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_begin_transaction\n__TBB_machine_begin_transaction:\n        mov  eax, -1\n        BYTE 0C7H\n        BYTE 0F8H\n        BYTE 000H\n        BYTE 000H\n        BYTE 000H\n        BYTE 000H\n        ret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_end_transaction\n__TBB_machine_end_transaction:\n        BYTE 00FH\n        BYTE 001H\n        BYTE 0D5H\n        ret\n.code \n\tALIGN 8\n\tPUBLIC __TBB_machine_transaction_conflict_abort\n__TBB_machine_transaction_conflict_abort:\n        BYTE 0C6H\n        BYTE 0F8H\n        BYTE 0FFH  ; 12.4.5 Abort argument: lock not free when tested\n        ret\n.code \n        ALIGN 8\n\tPUBLIC __TBB_machine_is_in_transaction\n__TBB_machine_is_in_transaction:\n        xor eax, eax\n        BYTE 00FH  ; _xtest sets or clears ZF\n        BYTE 001H\n        BYTE 0D6H\n        jz   rset\n        mov  al,1\nrset:\n        ret\nend\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/intrusive_list.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_intrusive_list_H\n#define _TBB_intrusive_list_H\n\n#include \"tbb/tbb_stddef.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//! Data structure to be inherited by the types that can form intrusive lists.\n/** Intrusive list is formed by means of the member_intrusive_list<T> template class.\n    Note that type T must derive from intrusive_list_node either publicly or\n    declare instantiation member_intrusive_list<T> as a friend.\n    This class implements a limited subset of std::list interface. **/\nstruct intrusive_list_node {\n    intrusive_list_node *my_prev_node,\n                        *my_next_node;\n#if TBB_USE_ASSERT\n    intrusive_list_node () { my_prev_node = my_next_node = this; }\n#endif /* TBB_USE_ASSERT */\n};\n\n//! List of element of type T, where T is derived from intrusive_list_node\n/** The class is not thread safe. **/\ntemplate <class List, class T>\nclass intrusive_list_base {\n    //! Pointer to the head node\n    intrusive_list_node my_head;\n\n    //! Number of list elements\n    size_t my_size;\n\n    static intrusive_list_node& node ( T& item ) { return List::node(item); }\n\n    static T& item ( intrusive_list_node* node ) { return List::item(node); }\n\n    template<class Iterator>\n    class iterator_impl {\n        Iterator& self () { return *static_cast<Iterator*>(this); }\n\n        //! Node the iterator points to at the moment\n        intrusive_list_node *my_pos;\n\n    protected:\n        iterator_impl (intrusive_list_node* pos )\n            :  my_pos(pos)\n        {}\n\n        T& item () const {\n            return intrusive_list_base::item(my_pos);\n        }\n\n    public:\n        iterator_impl () :  my_pos(NULL) {}\n\n        Iterator& operator = ( const Iterator& it ) {\n            return my_pos = it.my_pos;\n        }\n\n        Iterator& operator = ( const T& val ) {\n            return my_pos = &node(val);\n        }\n\n        bool operator == ( const Iterator& it ) const {\n            return my_pos == it.my_pos;\n        }\n\n        bool operator != ( const Iterator& it ) const {\n            return my_pos != it.my_pos;\n        }\n\n        Iterator& operator++ () {\n            my_pos = my_pos->my_next_node;\n            return self();\n        }\n\n        Iterator& operator-- () {\n            my_pos = my_pos->my_prev_node;\n            return self();\n        }\n\n        Iterator operator++ ( int ) {\n            Iterator result = self();\n            ++(*this);\n            return result;\n        }\n\n        Iterator operator-- ( int ) {\n            Iterator result = self();\n            --(*this);\n            return result;\n        }\n    }; // intrusive_list_base::iterator_impl\n\n    void assert_ok () const {\n        __TBB_ASSERT( (my_head.my_prev_node == &my_head && !my_size) ||\n                      (my_head.my_next_node != &my_head && my_size >0), \"intrusive_list_base corrupted\" );\n#if TBB_USE_ASSERT >= 2\n        size_t i = 0;\n        for ( intrusive_list_node *n = my_head.my_next_node; n != &my_head; n = n->my_next_node )\n            ++i;\n        __TBB_ASSERT( my_size == i, \"Wrong size\" );\n#endif /* TBB_USE_ASSERT >= 2 */\n    }\n\npublic:\n    class iterator : public iterator_impl<iterator> {\n        template <class U, class V> friend class intrusive_list_base;\n    public:\n        iterator (intrusive_list_node* pos )\n            : iterator_impl<iterator>(pos )\n        {}\n        iterator () {}\n\n        T* operator-> () const { return &this->item(); }\n\n        T& operator* () const { return this->item(); }\n    }; // class iterator\n\n    class const_iterator : public iterator_impl<const_iterator> {\n        template <class U, class V> friend class intrusive_list_base;\n    public:\n        const_iterator (const intrusive_list_node* pos )\n            : iterator_impl<const_iterator>(const_cast<intrusive_list_node*>(pos) )\n        {}\n        const_iterator () {}\n\n        const T* operator-> () const { return &this->item(); }\n\n        const T& operator* () const { return this->item(); }\n    }; // class iterator\n\n    intrusive_list_base () : my_size(0) {\n        my_head.my_prev_node = &my_head;\n        my_head.my_next_node = &my_head;\n    }\n\n    bool empty () const { return my_head.my_next_node == &my_head; }\n\n    size_t size () const { return my_size; }\n\n    iterator begin () { return iterator(my_head.my_next_node); }\n\n    iterator end () { return iterator(&my_head); }\n\n    const_iterator begin () const { return const_iterator(my_head.my_next_node); }\n\n    const_iterator end () const { return const_iterator(&my_head); }\n\n    void push_front ( T& val ) {\n        __TBB_ASSERT( node(val).my_prev_node == &node(val) && node(val).my_next_node == &node(val),\n                    \"Object with intrusive list node can be part of only one intrusive list simultaneously\" );\n        // An object can be part of only one intrusive list at the given moment via the given node member\n        node(val).my_prev_node = &my_head;\n        node(val).my_next_node = my_head.my_next_node;\n        my_head.my_next_node->my_prev_node = &node(val);\n        my_head.my_next_node = &node(val);\n        ++my_size;\n        assert_ok();\n    }\n\n    void remove( T& val ) {\n        __TBB_ASSERT( node(val).my_prev_node != &node(val) && node(val).my_next_node != &node(val), \"Element to remove is not in the list\" );\n        __TBB_ASSERT( node(val).my_prev_node->my_next_node == &node(val) && node(val).my_next_node->my_prev_node == &node(val), \"Element to remove is not in the list\" );\n        --my_size;\n        node(val).my_next_node->my_prev_node = node(val).my_prev_node;\n        node(val).my_prev_node->my_next_node = node(val).my_next_node;\n#if TBB_USE_ASSERT\n        node(val).my_prev_node = node(val).my_next_node = &node(val);\n#endif\n        assert_ok();\n    }\n\n    iterator erase ( iterator it ) {\n        T& val = *it;\n        ++it;\n        remove( val );\n        return it;\n    }\n\n}; // intrusive_list_base\n\n\n//! Double linked list of items of type T containing a member of type intrusive_list_node.\n/** NodePtr is a member pointer to the node data field. Class U is either T or\n    a base class of T containing the node member. Default values exist for the sake\n    of a partial specialization working with inheritance case.\n\n    The list does not have ownership of its items. Its purpose is to avoid dynamic\n    memory allocation when forming lists of existing objects.\n\n    The class is not thread safe. **/\ntemplate <class T, class U, intrusive_list_node U::*NodePtr>\nclass memptr_intrusive_list : public intrusive_list_base<memptr_intrusive_list<T, U, NodePtr>, T>\n{\n    friend class intrusive_list_base<memptr_intrusive_list<T, U, NodePtr>, T>;\n\n    static intrusive_list_node& node ( T& val ) { return val.*NodePtr; }\n\n    static T& item ( intrusive_list_node* node ) {\n        // Cannot use __TBB_offsetof (and consequently __TBB_get_object_ref) macro\n        // with *NodePtr argument because gcc refuses to interpret pasted \"->\" and \"*\"\n        // as member pointer dereferencing operator, and explicit usage of ## in\n        // __TBB_offsetof implementation breaks operations with normal member names.\n        return *reinterpret_cast<T*>((char*)node - ((ptrdiff_t)&(reinterpret_cast<T*>(0x1000)->*NodePtr) - 0x1000));\n    }\n}; // intrusive_list<T, U, NodePtr>\n\n//! Double linked list of items of type T that is derived from intrusive_list_node class.\n/** The list does not have ownership of its items. Its purpose is to avoid dynamic\n    memory allocation when forming lists of existing objects.\n\n    The class is not thread safe. **/\ntemplate <class T>\nclass intrusive_list : public intrusive_list_base<intrusive_list<T>, T>\n{\n    friend class intrusive_list_base<intrusive_list<T>, T>;\n\n    static intrusive_list_node& node ( T& val ) { return val; }\n\n    static T& item ( intrusive_list_node* node ) { return *static_cast<T*>(node); }\n}; // intrusive_list<T>\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_intrusive_list_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/itt_notify.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if DO_ITT_NOTIFY\n\n#if _WIN32||_WIN64\n    #ifndef UNICODE\n        #define UNICODE\n    #endif\n#else\n    #pragma weak dlopen\n    #pragma weak dlsym\n    #pragma weak dlerror\n#endif /* WIN */\n\n#if __TBB_BUILD\n\nextern \"C\" void ITT_DoOneTimeInitialization();\n#define __itt_init_ittlib_name(x,y) (ITT_DoOneTimeInitialization(), true)\n\n#elif __TBBMALLOC_BUILD\n\nextern \"C\" void MallocInitializeITT();\n#define __itt_init_ittlib_name(x,y) (MallocInitializeITT(), true)\n\n#else\n#error This file is expected to be used for either TBB or TBB allocator build.\n#endif // __TBB_BUILD\n\n#include \"tools_api/ittnotify_static.c\"\n\nnamespace tbb {\nnamespace internal {\nint __TBB_load_ittnotify() {\n#if !(_WIN32||_WIN64)\n    // tool_api crashes without dlopen, check that it's present. Common case\n    // for lack of dlopen is static binaries, i.e. ones build with -static.\n    if (dlopen == NULL)\n        return 0;\n#endif\n    return __itt_init_ittlib(NULL,          // groups for:\n      (__itt_group_id)(__itt_group_sync     // prepare/cancel/acquired/releasing\n                       | __itt_group_thread // name threads\n                       | __itt_group_stitch // stack stitching\n#if __TBB_CPF_BUILD\n                       | __itt_group_structure\n#endif\n                           ));\n}\n\n}} // namespaces\n\n#endif /* DO_ITT_NOTIFY */\n\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#include \"itt_notify.h\"\n\nnamespace tbb {\n\n#if DO_ITT_NOTIFY\n    const tchar\n            *SyncType_GlobalLock = _T(\"TbbGlobalLock\"),\n            *SyncType_Scheduler = _T(\"%Constant\")\n            ;\n    const tchar\n            *SyncObj_SchedulerInitialization = _T(\"TbbSchedulerInitialization\"),\n            *SyncObj_SchedulersList = _T(\"TbbSchedulersList\"),\n            *SyncObj_WorkerLifeCycleMgmt = _T(\"TBB Scheduler\"),\n            *SyncObj_TaskStealingLoop = _T(\"TBB Scheduler\"),\n            *SyncObj_WorkerTaskPool = _T(\"TBB Scheduler\"),\n            *SyncObj_MasterTaskPool = _T(\"TBB Scheduler\"),\n            *SyncObj_TaskPoolSpinning = _T(\"TBB Scheduler\"),\n            *SyncObj_Mailbox = _T(\"TBB Scheduler\"),\n            *SyncObj_TaskReturnList = _T(\"TBB Scheduler\"),\n            *SyncObj_TaskStream = _T(\"TBB Scheduler\"),\n            *SyncObj_ContextsList = _T(\"TBB Scheduler\")\n            ;\n#endif /* DO_ITT_NOTIFY */\n\n} // namespace tbb\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/itt_notify.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_ITT_NOTIFY\n#define _TBB_ITT_NOTIFY\n\n#include \"tbb/tbb_stddef.h\"\n\n#if DO_ITT_NOTIFY\n\n#if _WIN32||_WIN64\n    #ifndef UNICODE\n        #define UNICODE\n    #endif\n#endif /* WIN */\n\n#ifndef INTEL_ITTNOTIFY_API_PRIVATE\n#define INTEL_ITTNOTIFY_API_PRIVATE\n#endif\n\n#include \"tools_api/ittnotify.h\"\n#include \"tools_api/legacy/ittnotify.h\"\nextern \"C\" void __itt_fini_ittlib(void);\n\n#if _WIN32||_WIN64\n    #undef _T\n    #undef __itt_event_create\n    #define __itt_event_create __itt_event_createA\n#endif /* WIN */\n\n\n#endif /* DO_ITT_NOTIFY */\n\n#if !ITT_CALLER_NULL\n#define ITT_CALLER_NULL ((__itt_caller)0)\n#endif\n\nnamespace tbb {\n//! Unicode support\n#if (_WIN32||_WIN64) && !__MINGW32__\n    //! Unicode character type. Always wchar_t on Windows.\n    /** We do not use typedefs from Windows TCHAR family to keep consistence of TBB coding style. **/\n    typedef wchar_t tchar;\n    //! Standard Windows macro to markup the string literals.\n    #define _T(string_literal) L ## string_literal\n#else /* !WIN */\n    typedef char tchar;\n    //! Standard Windows style macro to markup the string literals.\n    #define _T(string_literal) string_literal\n#endif /* !WIN */\n} // namespace tbb\n\n#if DO_ITT_NOTIFY\nnamespace tbb {\n    //! Display names of internal synchronization types\n    extern const tchar\n            *SyncType_GlobalLock,\n            *SyncType_Scheduler;\n    //! Display names of internal synchronization components/scenarios\n    extern const tchar\n            *SyncObj_SchedulerInitialization,\n            *SyncObj_SchedulersList,\n            *SyncObj_WorkerLifeCycleMgmt,\n            *SyncObj_TaskStealingLoop,\n            *SyncObj_WorkerTaskPool,\n            *SyncObj_MasterTaskPool,\n            *SyncObj_TaskPoolSpinning,\n            *SyncObj_Mailbox,\n            *SyncObj_TaskReturnList,\n            *SyncObj_TaskStream,\n            *SyncObj_ContextsList\n            ;\n\n    namespace internal {\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void* obj, const tchar* name);\n\n    } // namespace internal\n\n} // namespace tbb\n\n// const_cast<void*>() is necessary to cast off volatility\n#define ITT_NOTIFY(name,obj)            __itt_notify_##name(const_cast<void*>(static_cast<volatile void*>(obj)))\n#define ITT_THREAD_SET_NAME(name)       __itt_thread_set_name(name)\n#define ITT_FINI_ITTLIB()               __itt_fini_ittlib()\n#define ITT_SYNC_CREATE(obj, type, name) __itt_sync_create((void*)(obj), type, name, 2)\n#define ITT_SYNC_RENAME(obj, name)      __itt_sync_rename(obj, name)\n#define ITT_STACK_CREATE(obj)           obj = __itt_stack_caller_create()\n#if __TBB_TASK_GROUP_CONTEXT\n#define ITT_STACK(precond, name, obj)   (precond) ? __itt_stack_##name(obj) : ((void)0);\n#else\n#define ITT_STACK(precond, name, obj)      ((void)0)\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n\n#define ITT_TASK_GROUP(obj,name,parent)     itt_make_task_group_v7(internal::ITT_DOMAIN_MAIN,(void*)(obj),ALGORITHM,(void*)(parent),(parent!=NULL) ? ALGORITHM : FLOW_NULL,name)\n#define ITT_TASK_BEGIN(obj,name,id)         itt_task_begin_v7(internal::ITT_DOMAIN_MAIN,(void*)(id),ALGORITHM,(void*)(obj),ALGORITHM,name)\n#define ITT_TASK_END                        itt_task_end_v7(internal::ITT_DOMAIN_MAIN)\n\n#else /* !DO_ITT_NOTIFY */\n\n#define ITT_NOTIFY(name,obj)            ((void)0)\n#define ITT_THREAD_SET_NAME(name)       ((void)0)\n#define ITT_FINI_ITTLIB()               ((void)0)\n#define ITT_SYNC_CREATE(obj, type, name) ((void)0)\n#define ITT_SYNC_RENAME(obj, name)      ((void)0)\n#define ITT_STACK_CREATE(obj)           ((void)0)\n#define ITT_STACK(precond, name, obj)   ((void)0)\n\n#define ITT_TASK_GROUP(type,name,parent)    ((void)0)\n#define ITT_TASK_BEGIN(type,name,id)        ((void)0)\n#define ITT_TASK_END                        ((void)0)\n\n#endif /* !DO_ITT_NOTIFY */\n\nnamespace tbb {\nnamespace internal {\nint __TBB_load_ittnotify();\n}}\n\n#endif /* _TBB_ITT_NOTIFY */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin32-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\n#define __TBB_SYMBOL( sym ) sym;\n#include \"lin32-tbb-export.lst\"\n\nlocal:\n\n/* TBB symbols */\n*3tbb*;\n*__TBB*;\n\n/* ITT symbols */\n__itt_*;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_memcpy_largest_cachelinesize;\nget_memcpy_largest_cache_size;\nget_mem_ops_method;\ninit_mem_ops_method;\nirc__get_msg;\nirc__print;\noverride_mem_ops_method;\nset_memcpy_largest_cachelinesize;\nset_memcpy_largest_cache_size;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin32-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/* cache_aligned_allocator.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEjjPv )\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Ej )\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n/* task.cpp v3 */\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEj )\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEj )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEj )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEj )\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEij )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEi )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEi )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n/* task_v2.cpp */\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif /* !TBB_NO_LEGACY */\n\n/* Exception handling in task scheduler */\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEj )\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/* Symbols for exceptions thrown from TBB */\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n\n/* tbb_misc.cpp */\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n#if __TBB_x86_32\n__TBB_SYMBOL( __TBB_machine_store8_slow_perf_warning )\n__TBB_SYMBOL( __TBB_machine_store8_slow )\n#endif\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n/* tbb_main.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( _ZN3tbb8internal22itt_make_task_group_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal23itt_metadata_str_add_v7ENS0_15itt_domain_enumEPvyNS0_12string_indexEPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )\n#endif\n\n/* pipeline.cpp */\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEj )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEjRNS_18task_group_contextE )\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n/* queuing_rw_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n\n/* reader_writer_lock.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n/* spin_rw_mutex.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n/* spin_rw_mutex v3 */\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n\n// x86_rtm_rw_mutex.cpp\n#if __TBB_TSX_AVAILABLE\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_releaseERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_readerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_writerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_upgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_downgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex27internal_try_acquire_writerERNS2_11scoped_lockE )\n#endif\n\n/* spin_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n\n/* mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n/* recursive_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n/* QueuingMutex.cpp */\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n\n/* critical_section.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n/* concurrent_hash_map */\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n/* concurrent_queue.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEij )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Ej )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n/* concurrent_queue v3 */\n/* constructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Ej )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Ej )\n/* destructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n/* typeinfo */\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n/* vtable */\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n/* methods */\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEij )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n#if !TBB_NO_LEGACY\n/* concurrent_vector.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_jPFvPvPKvjE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvjEb )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEjjPFvPvjE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEjjj )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEjRj )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEjjPFvPvjE )\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n/* concurrent_vector v3 */\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_jPFvPvPKvjE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvjE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEjjPFvPvPKvjES4_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEjjj )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEjRj )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEjjPFvPvPKvjES4_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEjPvPFvS2_jEPFvS2_PKvjE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEj )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEjjjPKvPFvPvjEPFvS4_S3_jE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEjjPFvPvPKvjES4_ )\n\n/* tbb_thread */\n#if __MINGW32__\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFjPvES2_ )\n#else\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )\n#endif\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Ej )\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n\n#if __MINGW32__\n/* condition_variable */\n__TBB_SYMBOL( _ZN3tbb10interface58internal32internal_condition_variable_waitERNS1_14condvar_impl_tEPNS_5mutexEPKNS_10tick_count10interval_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal35internal_destroy_condition_variableERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_allERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_oneERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_initialize_condition_variableERNS1_14condvar_impl_tE )\n#endif\n\n// global parameter\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin64-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\n#define __TBB_SYMBOL( sym ) sym;\n#include \"lin64-tbb-export.lst\"\n\nlocal:\n\n/* TBB symbols */\n*3tbb*;\n*__TBB*;\n\n/* ITT symbols */\n__itt_*;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_msg_buf;\nget_text_buf;\nmessage_catalog;\nprint_buf;\nirc__get_msg;\nirc__print;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin64-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/* cache_aligned_allocator.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n/* task.cpp v3 */\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )\n#endif\n\n#if !TBB_NO_LEGACY\n/* task_v2.cpp */\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif /* !TBB_NO_LEGACY */\n\n/* Exception handling in task scheduler */\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/* Symbols for exceptions thrown from TBB */\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n/* tbb_misc.cpp */\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n/* tbb_main.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( _ZN3tbb8internal23itt_metadata_str_add_v7ENS0_15itt_domain_enumEPvyNS0_12string_indexEPKc )\n__TBB_SYMBOL( _ZN3tbb8internal22itt_make_task_group_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )\n__TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )\n#endif\n\n/* pipeline.cpp */\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n/* queuing_rw_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n\n/* reader_writer_lock.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n/* spin_rw_mutex.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n// x86_rtm_rw_mutex.cpp\n#if __TBB_TSX_AVAILABLE\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_writerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex27internal_try_acquire_writerERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_readerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_releaseERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_upgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_downgradeERNS2_11scoped_lockE )\n#endif\n\n/* spin_rw_mutex v3 */\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n\n/* spin_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n\n/* mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n/* recursive_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n/* QueuingMutex.cpp */\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n\n/* critical_section.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n/* concurrent_hash_map */\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n/* concurrent_queue.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n/* concurrent_queue v3 */\n/* constructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )\n/* destructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n/* typeinfo */\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n/* vtable */\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n/* methods */\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n#if !TBB_NO_LEGACY\n/* concurrent_vector.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n/* concurrent_vector v3 */\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )\n\n/* tbb_thread */\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n\n/* global_parameter */\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin64ipf-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\n#define __TBB_SYMBOL( sym ) sym;\n#include \"lin64ipf-tbb-export.lst\"\n\nlocal:\n\n/* TBB symbols */\n*3tbb*;\n*__TBB*;\n\n/* ITT symbols */\n__itt_*;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\n?0_memcopyA;\n?0_memcopyDu;\n?0_memcpyD;\n?1__memcpy;\n?1__memmove;\n?1__serial_memmove;\nmemcpy;\nmemset;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/lin64ipf-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/* cache_aligned_allocator.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n/* task.cpp v3 */\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )\n#endif\n\n#if !TBB_NO_LEGACY\n/* task_v2.cpp */\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif /* !TBB_NO_LEGACY */\n\n/* Exception handling in task scheduler */\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/* Symbols for exceptions thrown from TBB */\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n\n/* tbb_misc.cpp */\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n/* tbb_main.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n\n/* pipeline.cpp */\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n/* queuing_rw_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n\n/* reader_writer_lock.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n/* spin_rw_mutex.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n/* spin_rw_mutex v3 */\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n\n/* spin_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n\n/* mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n/* recursive_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n/* QueuingMutex.cpp */\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n\n/* critical_section.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n/* concurrent_hash_map */\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n/* concurrent_queue.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n/* concurrent_queue v3 */\n/* constructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )\n/* destructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n/* typeinfo */\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n/* vtable */\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n/* methods */\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n#if !TBB_NO_LEGACY\n/* concurrent_vector.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n/* concurrent_vector v3 */\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )\n\n/* tbb_thread */\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n\n/* asm functions */\n__TBB_SYMBOL( __TBB_machine_fetchadd1__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchadd2__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchadd4__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchadd8__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchstore1__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchstore2__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchstore4__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchstore8__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_fetchadd1acquire )\n__TBB_SYMBOL( __TBB_machine_fetchadd1release )\n__TBB_SYMBOL( __TBB_machine_fetchadd2acquire )\n__TBB_SYMBOL( __TBB_machine_fetchadd2release )\n__TBB_SYMBOL( __TBB_machine_fetchadd4acquire )\n__TBB_SYMBOL( __TBB_machine_fetchadd4release )\n__TBB_SYMBOL( __TBB_machine_fetchadd8acquire )\n__TBB_SYMBOL( __TBB_machine_fetchadd8release )\n__TBB_SYMBOL( __TBB_machine_fetchstore1acquire )\n__TBB_SYMBOL( __TBB_machine_fetchstore1release )\n__TBB_SYMBOL( __TBB_machine_fetchstore2acquire )\n__TBB_SYMBOL( __TBB_machine_fetchstore2release )\n__TBB_SYMBOL( __TBB_machine_fetchstore4acquire )\n__TBB_SYMBOL( __TBB_machine_fetchstore4release )\n__TBB_SYMBOL( __TBB_machine_fetchstore8acquire )\n__TBB_SYMBOL( __TBB_machine_fetchstore8release )\n__TBB_SYMBOL( __TBB_machine_cmpswp1acquire )\n__TBB_SYMBOL( __TBB_machine_cmpswp1release )\n__TBB_SYMBOL( __TBB_machine_cmpswp1__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_cmpswp2acquire )\n__TBB_SYMBOL( __TBB_machine_cmpswp2release )\n__TBB_SYMBOL( __TBB_machine_cmpswp2__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_cmpswp4acquire )\n__TBB_SYMBOL( __TBB_machine_cmpswp4release )\n__TBB_SYMBOL( __TBB_machine_cmpswp4__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_cmpswp8acquire )\n__TBB_SYMBOL( __TBB_machine_cmpswp8release )\n__TBB_SYMBOL( __TBB_machine_cmpswp8__TBB_full_fence )\n__TBB_SYMBOL( __TBB_machine_lg )\n__TBB_SYMBOL( __TBB_machine_lockbyte )\n__TBB_SYMBOL( __TBB_machine_pause )\n__TBB_SYMBOL( __TBB_machine_trylockbyte )\n__TBB_SYMBOL( __TBB_machine_load8_relaxed )\n__TBB_SYMBOL( __TBB_machine_store8_relaxed )\n__TBB_SYMBOL( __TBB_machine_load4_relaxed )\n__TBB_SYMBOL( __TBB_machine_store4_relaxed )\n__TBB_SYMBOL( __TBB_machine_load2_relaxed )\n__TBB_SYMBOL( __TBB_machine_store2_relaxed )\n__TBB_SYMBOL( __TBB_machine_load1_relaxed )\n__TBB_SYMBOL( __TBB_machine_store1_relaxed )\n\n/* global parameter */\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mac32-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define __TBB_SYMBOL( sym ) _##sym\n#include \"mac32-tbb-export.lst\"\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mac32-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/*\n    Sometimes macOS* requires leading underscore (e. g. in export list file), but sometimes not\n    (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD\n    be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when\n    necessary, depending on the indended usage.\n*/\n\n// cache_aligned_allocator.cpp\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n// task.cpp v3\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n// task_v2.cpp\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif\n\n// Exception handling in task scheduler\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n// Symbols for exceptions thrown from TBB\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZNSt13runtime_errorD1Ev )\n__TBB_SYMBOL( _ZTISt13runtime_error )\n__TBB_SYMBOL( _ZTSSt13runtime_error )\n__TBB_SYMBOL( _ZNSt16invalid_argumentD1Ev )\n__TBB_SYMBOL( _ZTISt16invalid_argument )\n__TBB_SYMBOL( _ZTSSt16invalid_argument )\n__TBB_SYMBOL( _ZNSt11range_errorD1Ev )\n__TBB_SYMBOL( _ZTISt11range_error )\n__TBB_SYMBOL( _ZTSSt11range_error )\n__TBB_SYMBOL( _ZNSt12length_errorD1Ev )\n__TBB_SYMBOL( _ZTISt12length_error )\n__TBB_SYMBOL( _ZTSSt12length_error )\n__TBB_SYMBOL( _ZNSt12out_of_rangeD1Ev )\n__TBB_SYMBOL( _ZTISt12out_of_range )\n__TBB_SYMBOL( _ZTSSt12out_of_range )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n\n// tbb_misc.cpp\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n#if __TBB_x86_32\n__TBB_SYMBOL( __TBB_machine_store8_slow_perf_warning )\n__TBB_SYMBOL( __TBB_machine_store8_slow )\n#endif\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n// tbb_main.cpp\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( _ZN3tbb8internal22itt_make_task_group_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal23itt_metadata_str_add_v7ENS0_15itt_domain_enumEPvyNS0_12string_indexEPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )\n#endif\n\n// pipeline.cpp\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n// queuing_rw_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n\n// reader_writer_lock.cpp\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n// spin_rw_mutex.cpp v2\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n// spin_rw_mutex v3\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n\n// x86_rtm_rw_mutex.cpp\n#if __TBB_TSX_AVAILABLE\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_releaseERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_upgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_downgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_readerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_writerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex27internal_try_acquire_writerERNS2_11scoped_lockE )\n#endif\n\n// spin_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n\n// mutex.cpp\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n// recursive_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n// queuing_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n\n// critical_section.cpp\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n// concurrent_hash_map\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n// concurrent_queue.cpp v2\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEim )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n// concurrent_queue v3\n// constructors\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )\n// destructors\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n// typeinfo\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n// vtable\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n// methods\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEim )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n#if !TBB_NO_LEGACY\n// concurrent_vector.cpp v2\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n// concurrent_vector v3\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )\n\n// tbb_thread\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n\n// global parameter\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mac64-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define __TBB_SYMBOL( sym ) _##sym\n#include \"mac64-tbb-export.lst\"\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mac64-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/*\n    Sometimes macOS* requires leading underscore (e. g. in export list file), but sometimes not\n    (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD\n    be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when\n    necessary, depending on the indended usage.\n*/\n\n// cache_aligned_allocator.cpp\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n// task.cpp v3\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEl )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEl )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n// task_v2.cpp\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif\n\n// Exception handling in task scheduler\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n// Symbols for exceptions thrown from TBB\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZNSt13runtime_errorD1Ev )\n__TBB_SYMBOL( _ZTISt13runtime_error )\n__TBB_SYMBOL( _ZTSSt13runtime_error )\n__TBB_SYMBOL( _ZNSt16invalid_argumentD1Ev )\n__TBB_SYMBOL( _ZTISt16invalid_argument )\n__TBB_SYMBOL( _ZTSSt16invalid_argument )\n__TBB_SYMBOL( _ZNSt11range_errorD1Ev )\n__TBB_SYMBOL( _ZTISt11range_error )\n__TBB_SYMBOL( _ZTSSt11range_error )\n__TBB_SYMBOL( _ZNSt12length_errorD1Ev )\n__TBB_SYMBOL( _ZTISt12length_error )\n__TBB_SYMBOL( _ZTSSt12length_error )\n__TBB_SYMBOL( _ZNSt12out_of_rangeD1Ev )\n__TBB_SYMBOL( _ZTISt12out_of_range )\n__TBB_SYMBOL( _ZTSSt12out_of_range )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n\n\n// tbb_misc.cpp\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n// tbb_main.cpp\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( _ZN3tbb8internal23itt_metadata_str_add_v7ENS0_15itt_domain_enumEPvyNS0_12string_indexEPKc )\n__TBB_SYMBOL( _ZN3tbb8internal22itt_make_task_group_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_task_begin_v7ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_relation_add_v7ENS0_15itt_domain_enumEPvyNS0_12itt_relationES2_y )\n__TBB_SYMBOL( _ZN3tbb8internal15itt_task_end_v7ENS0_15itt_domain_enumE )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_region_begin_v9ENS0_15itt_domain_enumEPvyS2_yNS0_12string_indexE )\n__TBB_SYMBOL( _ZN3tbb8internal17itt_region_end_v9ENS0_15itt_domain_enumEPvy )\n#endif\n\n// pipeline.cpp\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n// queuing_rw_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n\n// reader_writer_lock.cpp\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n// spin_rw_mutex.cpp v2\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n// spin_rw_mutex v3\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n\n// x86_rtm_rw_mutex.cpp\n#if __TBB_TSX_AVAILABLE\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_releaseERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_upgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_downgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_readerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_writerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex27internal_try_acquire_writerERNS2_11scoped_lockE )\n#endif\n\n// spin_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n\n// mutex.cpp\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n// recursive_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n// queuing_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n\n// critical_section.cpp\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n// concurrent_hash_map\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n// concurrent_queue.cpp v2\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n// concurrent_queue v3\n// constructors\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )\n// destructors\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n// typeinfo\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n// vtable\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n// methods\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n#if !TBB_NO_LEGACY\n// concurrent_vector.cpp v2\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n// concurrent_vector v3\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )\n\n// tbb_thread\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n\n// global parameter\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mailbox.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_mailbox_H\n#define _TBB_mailbox_H\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n\n#include \"scheduler_common.h\"\n#include \"tbb/atomic.h\"\n\nnamespace tbb {\nnamespace internal {\n\nstruct task_proxy : public task {\n    static const intptr_t      pool_bit = 1<<0;\n    static const intptr_t   mailbox_bit = 1<<1;\n    static const intptr_t location_mask = pool_bit | mailbox_bit;\n    /* All but two low-order bits represent a (task*).\n       Two low-order bits mean:\n       1 = proxy is/was/will be in task pool\n       2 = proxy is/was/will be in mailbox */\n    intptr_t task_and_tag;\n\n    //! Pointer to next task_proxy in a mailbox\n    task_proxy *__TBB_atomic next_in_mailbox;\n\n    //! Mailbox to which this was mailed.\n    mail_outbox* outbox;\n\n    //! True if the proxy is stored both in its sender's pool and in the destination mailbox.\n    static bool is_shared ( intptr_t tat ) {\n        return (tat & location_mask) == location_mask;\n    }\n\n    //! Returns a pointer to the encapsulated task or NULL.\n    static task* task_ptr ( intptr_t tat ) {\n        return (task*)(tat & ~location_mask);\n    }\n\n    //! Returns a pointer to the encapsulated task or NULL, and frees proxy if necessary.\n    template<intptr_t from_bit>\n    inline task* extract_task () {\n        __TBB_ASSERT( prefix().extra_state == es_task_proxy, \"Normal task misinterpreted as a proxy?\" );\n        intptr_t tat = __TBB_load_with_acquire(task_and_tag);\n        __TBB_ASSERT( tat == from_bit || (is_shared(tat) && task_ptr(tat)),\n            \"Proxy's tag cannot specify both locations if the proxy \"\n            \"was retrieved from one of its original locations\" );\n        if ( tat != from_bit ) {\n            const intptr_t cleaner_bit = location_mask & ~from_bit;\n            // Attempt to transition the proxy to the \"empty\" state with\n            // cleaner_bit specifying entity responsible for its eventual freeing.\n            // Explicit cast to void* is to work around a seeming ICC 11.1 bug.\n            if ( as_atomic(task_and_tag).compare_and_swap(cleaner_bit, tat) == tat ) {\n                // Successfully grabbed the task, and left new owner with the job of freeing the proxy\n                return task_ptr(tat);\n            }\n        }\n        // Proxied task has already been claimed from another proxy location.\n        __TBB_ASSERT( task_and_tag == from_bit, \"Empty proxy cannot contain non-zero task pointer\" );\n        return NULL;\n    }\n}; // struct task_proxy\n\n//! Internal representation of mail_outbox, without padding.\nclass unpadded_mail_outbox {\nprotected:\n    typedef task_proxy*__TBB_atomic proxy_ptr;\n\n    //! Pointer to first task_proxy in mailbox, or NULL if box is empty.\n    proxy_ptr my_first;\n\n    //! Pointer to pointer that will point to next item in the queue.  Never NULL.\n    proxy_ptr* __TBB_atomic my_last;\n\n    //! Owner of mailbox is not executing a task, and has drained its own task pool.\n    bool my_is_idle;\n};\n\n//! Class representing where mail is put.\n/** Padded to occupy a cache line. */\nclass mail_outbox : padded<unpadded_mail_outbox> {\n\n    task_proxy* internal_pop( __TBB_ISOLATION_EXPR(isolation_tag isolation) ) {\n        task_proxy* curr = __TBB_load_relaxed( my_first );\n        if ( !curr )\n            return NULL;\n        task_proxy **prev_ptr = &my_first;\n#if __TBB_TASK_ISOLATION\n        if ( isolation != no_isolation ) {\n            while ( curr->prefix().isolation != isolation ) {\n                prev_ptr = &curr->next_in_mailbox;\n                curr = curr->next_in_mailbox;\n                if ( !curr )\n                    return NULL;\n            }\n        }\n#endif /* __TBB_TASK_ISOLATION */\n        __TBB_control_consistency_helper(); // on my_first\n        // There is a first item in the mailbox.  See if there is a second.\n        if ( task_proxy* second = curr->next_in_mailbox ) {\n            // There are at least two items, so first item can be popped easily.\n            *prev_ptr = second;\n        } else {\n            // There is only one item.  Some care is required to pop it.\n            *prev_ptr = NULL;\n            if ( as_atomic( my_last ).compare_and_swap( prev_ptr, &curr->next_in_mailbox ) == &curr->next_in_mailbox ) {\n                // Successfully transitioned mailbox from having one item to having none.\n                __TBB_ASSERT( !curr->next_in_mailbox, NULL );\n            } else {\n                // Some other thread updated my_last but has not filled in first->next_in_mailbox\n                // Wait until first item points to second item.\n                atomic_backoff backoff;\n                while ( !(second = curr->next_in_mailbox) ) backoff.pause();\n                *prev_ptr = second;\n            }\n        }\n        __TBB_ASSERT( curr, NULL );\n        return curr;\n    }\npublic:\n    friend class mail_inbox;\n\n    //! Push task_proxy onto the mailbox queue of another thread.\n    /** Implementation is wait-free. */\n    void push( task_proxy* t ) {\n        __TBB_ASSERT(t, NULL);\n        t->next_in_mailbox = NULL;\n        proxy_ptr * const link = (proxy_ptr *)__TBB_FetchAndStoreW(&my_last,(intptr_t)&t->next_in_mailbox);\n        // No release fence required for the next store, because there are no memory operations\n        // between the previous fully fenced atomic operation and the store.\n        __TBB_store_relaxed(*link, t);\n    }\n\n    //! Return true if mailbox is empty\n    bool empty() {\n        return __TBB_load_relaxed(my_first) == NULL;\n    }\n\n    //! Construct *this as a mailbox from zeroed memory.\n    /** Raise assertion if *this is not previously zeroed, or sizeof(this) is wrong.\n        This method is provided instead of a full constructor since we know the object\n        will be constructed in zeroed memory. */\n    void construct() {\n        __TBB_ASSERT( sizeof(*this)==NFS_MaxLineSize, NULL );\n        __TBB_ASSERT( !my_first, NULL );\n        __TBB_ASSERT( !my_last, NULL );\n        __TBB_ASSERT( !my_is_idle, NULL );\n        my_last=&my_first;\n        suppress_unused_warning(pad);\n    }\n\n    //! Drain the mailbox\n    intptr_t drain() {\n        intptr_t k = 0;\n        // No fences here because other threads have already quit.\n        for( ; task_proxy* t = my_first; ++k ) {\n            my_first = t->next_in_mailbox;\n            NFS_Free((char*)t - task_prefix_reservation_size);\n        }\n        return k;\n    }\n\n    //! True if thread that owns this mailbox is looking for work.\n    bool recipient_is_idle() {\n        return my_is_idle;\n    }\n}; // class mail_outbox\n\n//! Class representing source of mail.\nclass mail_inbox {\n    //! Corresponding sink where mail that we receive will be put.\n    mail_outbox* my_putter;\npublic:\n    //! Construct unattached inbox\n    mail_inbox() : my_putter(NULL) {}\n\n    //! Attach inbox to a corresponding outbox.\n    void attach( mail_outbox& putter ) {\n        my_putter = &putter;\n    }\n    //! Detach inbox from its outbox\n    void detach() {\n        __TBB_ASSERT(my_putter,\"not attached\");\n        my_putter = NULL;\n    }\n    //! Get next piece of mail, or NULL if mailbox is empty.\n    task_proxy* pop( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {\n        return my_putter->internal_pop( __TBB_ISOLATION_EXPR( isolation ) );\n    }\n    //! Return true if mailbox is empty\n    bool empty() {\n        return my_putter->empty();\n    }\n    //! Indicate whether thread that reads this mailbox is idle.\n    /** Raises assertion failure if mailbox is redundantly marked as not idle. */\n    void set_is_idle( bool value ) {\n        if( my_putter ) {\n            __TBB_ASSERT( my_putter->my_is_idle || value, \"attempt to redundantly mark mailbox as not idle\" );\n            my_putter->my_is_idle = value;\n        }\n    }\n    //! Indicate whether thread that reads this mailbox is idle.\n    bool is_idle_state ( bool value ) const {\n        return !my_putter || my_putter->my_is_idle == value;\n    }\n\n#if DO_ITT_NOTIFY\n    //! Get pointer to corresponding outbox used for ITT_NOTIFY calls.\n    void* outbox() const {return my_putter;}\n#endif /* DO_ITT_NOTIFY */\n}; // class mail_inbox\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_mailbox_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/market.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/global_control.h\" // global_control::active_value\n\n#include \"market.h\"\n#include \"tbb_main.h\"\n#include \"governor.h\"\n#include \"scheduler.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\nnamespace internal {\n\nvoid market::insert_arena_into_list ( arena& a ) {\n#if __TBB_TASK_PRIORITY\n    arena_list_type &arenas = my_priority_levels[a.my_top_priority].arenas;\n    arena *&next = my_priority_levels[a.my_top_priority].next_arena;\n#else /* !__TBB_TASK_PRIORITY */\n    arena_list_type &arenas = my_arenas;\n    arena *&next = my_next_arena;\n#endif /* !__TBB_TASK_PRIORITY */\n    arenas.push_front( a );\n    if ( arenas.size() == 1 )\n        next = &*arenas.begin();\n}\n\nvoid market::remove_arena_from_list ( arena& a ) {\n#if __TBB_TASK_PRIORITY\n    arena_list_type &arenas = my_priority_levels[a.my_top_priority].arenas;\n    arena *&next = my_priority_levels[a.my_top_priority].next_arena;\n#else /* !__TBB_TASK_PRIORITY */\n    arena_list_type &arenas = my_arenas;\n    arena *&next = my_next_arena;\n#endif /* !__TBB_TASK_PRIORITY */\n    arena_list_type::iterator it = next;\n    __TBB_ASSERT( it != arenas.end(), NULL );\n    if ( next == &a ) {\n        if ( ++it == arenas.end() && arenas.size() > 1 )\n            it = arenas.begin();\n        next = &*it;\n    }\n    arenas.remove( a );\n}\n\n//------------------------------------------------------------------------\n// market\n//------------------------------------------------------------------------\n\nmarket::market ( unsigned workers_soft_limit, unsigned workers_hard_limit, size_t stack_size )\n    : my_num_workers_hard_limit(workers_hard_limit)\n    , my_num_workers_soft_limit(workers_soft_limit)\n#if __TBB_TASK_PRIORITY\n    , my_global_top_priority(normalized_normal_priority)\n    , my_global_bottom_priority(normalized_normal_priority)\n#endif /* __TBB_TASK_PRIORITY */\n    , my_ref_count(1)\n    , my_stack_size(stack_size)\n    , my_workers_soft_limit_to_report(workers_soft_limit)\n{\n#if __TBB_TASK_PRIORITY\n    __TBB_ASSERT( my_global_reload_epoch == 0, NULL );\n    my_priority_levels[normalized_normal_priority].workers_available = my_num_workers_soft_limit;\n#endif /* __TBB_TASK_PRIORITY */\n\n    // Once created RML server will start initializing workers that will need\n    // global market instance to get worker stack size\n    my_server = governor::create_rml_server( *this );\n    __TBB_ASSERT( my_server, \"Failed to create RML server\" );\n}\n\nstatic unsigned calc_workers_soft_limit(unsigned workers_soft_limit, unsigned workers_hard_limit) {\n    if( int soft_limit = market::app_parallelism_limit() )\n        workers_soft_limit = soft_limit-1;\n    else // if user set no limits (yet), use market's parameter\n        workers_soft_limit = max( governor::default_num_threads() - 1, workers_soft_limit );\n    if( workers_soft_limit >= workers_hard_limit )\n        workers_soft_limit = workers_hard_limit-1;\n    return workers_soft_limit;\n}\n\nmarket& market::global_market ( bool is_public, unsigned workers_requested, size_t stack_size ) {\n    global_market_mutex_type::scoped_lock lock( theMarketMutex );\n    market *m = theMarket;\n    if( m ) {\n        ++m->my_ref_count;\n        const unsigned old_public_count = is_public? m->my_public_ref_count++ : /*any non-zero value*/1;\n        lock.release();\n        if( old_public_count==0 )\n            set_active_num_workers( calc_workers_soft_limit(workers_requested, m->my_num_workers_hard_limit) );\n\n        // do not warn if default number of workers is requested\n        if( workers_requested != governor::default_num_threads()-1 ) {\n            __TBB_ASSERT( skip_soft_limit_warning > workers_requested,\n                          \"skip_soft_limit_warning must be larger than any valid workers_requested\" );\n            unsigned soft_limit_to_report = m->my_workers_soft_limit_to_report;\n            if( soft_limit_to_report < workers_requested ) {\n                runtime_warning( \"The number of workers is currently limited to %u. \"\n                                 \"The request for %u workers is ignored. Further requests for more workers \"\n                                 \"will be silently ignored until the limit changes.\\n\",\n                                 soft_limit_to_report, workers_requested );\n                // The race is possible when multiple threads report warnings.\n                // We are OK with that, as there are just multiple warnings.\n                internal::as_atomic(m->my_workers_soft_limit_to_report).\n                    compare_and_swap(skip_soft_limit_warning, soft_limit_to_report);\n            }\n\n        }\n        if( m->my_stack_size < stack_size )\n            runtime_warning( \"Thread stack size has been already set to %u. \"\n                             \"The request for larger stack (%u) cannot be satisfied.\\n\",\n                              m->my_stack_size, stack_size );\n    }\n    else {\n        // TODO: A lot is done under theMarketMutex locked. Can anything be moved out?\n        if( stack_size == 0 )\n            stack_size = global_control::active_value(global_control::thread_stack_size);\n        // Expecting that 4P is suitable for most applications.\n        // Limit to 2P for large thread number.\n        // TODO: ask RML for max concurrency and possibly correct hard_limit\n        const unsigned factor = governor::default_num_threads()<=128? 4 : 2;\n        // The requested number of threads is intentionally not considered in\n        // computation of the hard limit, in order to separate responsibilities\n        // and avoid complicated interactions between global_control and task_scheduler_init.\n        // The market guarantees that at least 256 threads might be created.\n        const unsigned workers_hard_limit = max(max(factor*governor::default_num_threads(), 256u), app_parallelism_limit());\n        const unsigned workers_soft_limit = calc_workers_soft_limit(workers_requested, workers_hard_limit);\n        // Create the global market instance\n        size_t size = sizeof(market);\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT( __TBB_offsetof(market, my_workers) + sizeof(generic_scheduler*) == sizeof(market),\n                      \"my_workers must be the last data field of the market class\");\n        size += sizeof(generic_scheduler*) * (workers_hard_limit - 1);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        __TBB_InitOnce::add_ref();\n        void* storage = NFS_Allocate(1, size, NULL);\n        memset( storage, 0, size );\n        // Initialize and publish global market\n        m = new (storage) market( workers_soft_limit, workers_hard_limit, stack_size );\n        if( is_public )\n            m->my_public_ref_count = 1;\n        theMarket = m;\n        // This check relies on the fact that for shared RML default_concurrency==max_concurrency\n        if ( !governor::UsePrivateRML && m->my_server->default_concurrency() < workers_soft_limit )\n            runtime_warning( \"RML might limit the number of workers to %u while %u is requested.\\n\"\n                    , m->my_server->default_concurrency(), workers_soft_limit );\n    }\n    return *m;\n}\n\nvoid market::destroy () {\n#if __TBB_COUNT_TASK_NODES\n    if ( my_task_node_count )\n        runtime_warning( \"Leaked %ld task objects\\n\", (long)my_task_node_count );\n#endif /* __TBB_COUNT_TASK_NODES */\n    this->market::~market(); // qualified to suppress warning\n    NFS_Free( this );\n    __TBB_InitOnce::remove_ref();\n}\n\nbool market::release ( bool is_public, bool blocking_terminate ) {\n    __TBB_ASSERT( theMarket == this, \"Global market instance was destroyed prematurely?\" );\n    bool do_release = false;\n    {\n        global_market_mutex_type::scoped_lock lock( theMarketMutex );\n        if ( blocking_terminate ) {\n            __TBB_ASSERT( is_public, \"Only an object with a public reference can request the blocking terminate\" );\n            while ( my_public_ref_count == 1 && my_ref_count > 1 ) {\n                lock.release();\n                // To guarantee that request_close_connection() is called by the last master, we need to wait till all\n                // references are released. Re-read my_public_ref_count to limit waiting if new masters are created.\n                // Theoretically, new private references to the market can be added during waiting making it potentially\n                // endless.\n                // TODO: revise why the weak scheduler needs market's pointer and try to remove this wait.\n                // Note that the market should know about its schedulers for cancelation/exception/priority propagation,\n                // see e.g. task_group_context::cancel_group_execution()\n                while ( __TBB_load_with_acquire( my_public_ref_count ) == 1 && __TBB_load_with_acquire( my_ref_count ) > 1 )\n                    __TBB_Yield();\n                lock.acquire( theMarketMutex );\n            }\n        }\n        if ( is_public ) {\n            __TBB_ASSERT( theMarket == this, \"Global market instance was destroyed prematurely?\" );\n            __TBB_ASSERT( my_public_ref_count, NULL );\n            --my_public_ref_count;\n        }\n        if ( --my_ref_count == 0 ) {\n            __TBB_ASSERT( !my_public_ref_count, NULL );\n            do_release = true;\n            theMarket = NULL;\n        }\n    }\n    if( do_release ) {\n        __TBB_ASSERT( !__TBB_load_with_acquire(my_public_ref_count), \"No public references remain if we remove the market.\" );\n        // inform RML that blocking termination is required\n        my_join_workers = blocking_terminate;\n        my_server->request_close_connection();\n        return blocking_terminate;\n    }\n    return false;\n}\n\nvoid market::set_active_num_workers ( unsigned soft_limit ) {\n    int old_requested=0, requested=0;\n    bool need_mandatory = false;\n    market *m;\n\n    {\n        global_market_mutex_type::scoped_lock lock( theMarketMutex );\n        if ( !theMarket )\n            return; // actual value will be used at market creation\n        m = theMarket;\n        ++m->my_ref_count;\n    }\n    // have my_ref_count for market, use it safely\n    {\n        arenas_list_mutex_type::scoped_lock lock( m->my_arenas_list_mutex );\n        __TBB_ASSERT(soft_limit <= m->my_num_workers_hard_limit, NULL);\n        m->my_num_workers_soft_limit = soft_limit;\n        // report only once after new soft limit value is set\n        m->my_workers_soft_limit_to_report = soft_limit;\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        // updates soft_limit to zero must be postponed\n        // while mandatory parallelism is enabled\n        if( !(m->my_mandatory_num_requested && !soft_limit) )\n#endif\n        {\n            const int demand =\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n                m->my_mandatory_num_requested? 0 :\n#endif\n                m->my_total_demand;\n            requested = min(demand, (int)soft_limit);\n            old_requested = m->my_num_workers_requested;\n            m->my_num_workers_requested = requested;\n#if __TBB_TASK_PRIORITY\n            m->my_priority_levels[m->my_global_top_priority].workers_available = soft_limit;\n            m->update_allotment( m->my_global_top_priority );\n#else\n            m->update_allotment();\n#endif\n        }\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        if( !m->my_mandatory_num_requested && !soft_limit ) {\n            // enable mandatory concurrency, if enqueued tasks are found\n            // and zero soft_limit requested\n#if __TBB_TASK_PRIORITY\n            for( int p = m->my_global_top_priority; p >= m->my_global_bottom_priority; --p ) {\n                priority_level_info &pl = m->my_priority_levels[p];\n                arena_list_type &arenas = pl.arenas;\n#else\n                const int p = 0;\n                arena_list_type &arenas = m->my_arenas;\n#endif /* __TBB_TASK_PRIORITY */\n                for( arena_list_type::iterator it = arenas.begin(); it != arenas.end(); ++it ) {\n                    if( !it->my_task_stream.empty(p) ) {\n                        // switch local_mandatory to global_mandatory unconditionally\n                        if( m->mandatory_concurrency_enable_impl( &*it ) )\n                            need_mandatory = true;\n                    }\n                }\n#if __TBB_TASK_PRIORITY\n            }\n#endif /* __TBB_TASK_PRIORITY */\n        }\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n    }\n    // adjust_job_count_estimate must be called outside of any locks\n    int delta = requested - old_requested;\n    if( need_mandatory ) ++delta;\n    if( delta!=0 )\n        m->my_server->adjust_job_count_estimate( delta );\n    // release internal market reference to match ++m->my_ref_count above\n    m->release( /*is_public=*/false, /*blocking_terminate=*/false );\n}\n\nbool governor::does_client_join_workers (const tbb::internal::rml::tbb_client &client) {\n    return ((const market&)client).must_join_workers();\n}\n\narena* market::create_arena ( int num_slots, int num_reserved_slots, size_t stack_size ) {\n    __TBB_ASSERT( num_slots > 0, NULL );\n    __TBB_ASSERT( num_reserved_slots <= num_slots, NULL );\n    // Add public market reference for master thread/task_arena (that adds an internal reference in exchange).\n    market &m = global_market( /*is_public=*/true, num_slots-num_reserved_slots, stack_size );\n\n    arena& a = arena::allocate_arena( m, num_slots, num_reserved_slots );\n    // Add newly created arena into the existing market's list.\n    arenas_list_mutex_type::scoped_lock lock(m.my_arenas_list_mutex);\n    m.insert_arena_into_list(a);\n    return &a;\n}\n\n/** This method must be invoked under my_arenas_list_mutex. **/\nvoid market::detach_arena ( arena& a ) {\n    __TBB_ASSERT( theMarket == this, \"Global market instance was destroyed prematurely?\" );\n    __TBB_ASSERT( !a.my_slots[0].my_scheduler, NULL );\n    remove_arena_from_list(a);\n    if ( a.my_aba_epoch == my_arenas_aba_epoch )\n        ++my_arenas_aba_epoch;\n}\n\nvoid market::try_destroy_arena ( arena* a, uintptr_t aba_epoch ) {\n    bool locked = true;\n    __TBB_ASSERT( a, NULL );\n    // we hold reference to the market, so it cannot be destroyed at any moment here\n    __TBB_ASSERT( this == theMarket, NULL );\n    __TBB_ASSERT( my_ref_count!=0, NULL );\n    my_arenas_list_mutex.lock();\n    assert_market_valid();\n#if __TBB_TASK_PRIORITY\n    // scan all priority levels, not only in [my_global_bottom_priority;my_global_top_priority]\n    // range, because arena to be destroyed can have no outstanding request for workers\n    for ( int p = num_priority_levels-1; p >= 0; --p ) {\n        priority_level_info &pl = my_priority_levels[p];\n        arena_list_type &my_arenas = pl.arenas;\n#endif /* __TBB_TASK_PRIORITY */\n        arena_list_type::iterator it = my_arenas.begin();\n        for ( ; it != my_arenas.end(); ++it ) {\n            if ( a == &*it ) {\n                if ( it->my_aba_epoch == aba_epoch ) {\n                    // Arena is alive\n                    if ( !a->my_num_workers_requested && !a->my_references ) {\n                        __TBB_ASSERT( !a->my_num_workers_allotted && (a->my_pool_state == arena::SNAPSHOT_EMPTY || !a->my_max_num_workers), \"Inconsistent arena state\" );\n                        // Arena is abandoned. Destroy it.\n                        detach_arena( *a );\n                        my_arenas_list_mutex.unlock();\n                        locked = false;\n                        a->free_arena();\n                    }\n                }\n                if (locked)\n                    my_arenas_list_mutex.unlock();\n                return;\n            }\n        }\n#if __TBB_TASK_PRIORITY\n    }\n#endif /* __TBB_TASK_PRIORITY */\n    my_arenas_list_mutex.unlock();\n}\n\n/** This method must be invoked under my_arenas_list_mutex. **/\narena* market::arena_in_need ( arena_list_type &arenas, arena *&next ) {\n    if ( arenas.empty() )\n        return NULL;\n    arena_list_type::iterator it = next;\n    __TBB_ASSERT( it != arenas.end(), NULL );\n    do {\n        arena& a = *it;\n        if ( ++it == arenas.end() )\n            it = arenas.begin();\n        if( a.num_workers_active() < a.my_num_workers_allotted\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n            && !a.recall_by_mandatory_request()\n#endif\n            ) {\n            a.my_references += arena::ref_worker;\n            as_atomic(next) = &*it; // a subject for innocent data race under the reader lock\n            // TODO: rework global round robin policy to local or random to avoid this write\n            return &a;\n        }\n    } while ( it != next );\n    return NULL;\n}\n\nint market::update_allotment ( arena_list_type& arenas, int workers_demand, int max_workers ) {\n    __TBB_ASSERT( workers_demand, NULL );\n    max_workers = min(workers_demand, max_workers);\n    int carry = 0;\n    int assigned = 0;\n    arena_list_type::iterator it = arenas.begin();\n    for ( ; it != arenas.end(); ++it ) {\n        arena& a = *it;\n        if ( a.my_num_workers_requested <= 0 ) {\n            __TBB_ASSERT( !a.my_num_workers_allotted, NULL );\n            continue;\n        }\n        int tmp = a.my_num_workers_requested * max_workers + carry;\n        int allotted = tmp / workers_demand;\n        carry = tmp % workers_demand;\n        // a.my_num_workers_requested may temporarily exceed a.my_max_num_workers\n        allotted = min( allotted, (int)a.my_max_num_workers );\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        if ( !allotted && a.must_have_concurrency() )\n            allotted = 1;\n#endif\n        a.my_num_workers_allotted = allotted;\n        assigned += allotted;\n    }\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    __TBB_ASSERT( assigned <= workers_demand, NULL ); // weaker assertion due to enforced allotment\n#else\n    __TBB_ASSERT( assigned <= max_workers, NULL );\n#endif\n    return assigned;\n}\n\n#if __TBB_TASK_PRIORITY\ninline void market::update_global_top_priority ( intptr_t newPriority ) {\n    GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.market_prio_switches );\n    my_global_top_priority = newPriority;\n    my_priority_levels[newPriority].workers_available =\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        my_mandatory_num_requested && !my_num_workers_soft_limit ? 1 :\n#endif\n        my_num_workers_soft_limit;\n    advance_global_reload_epoch();\n}\n\ninline void market::reset_global_priority () {\n    my_global_bottom_priority = normalized_normal_priority;\n    update_global_top_priority(normalized_normal_priority);\n}\n\narena* market::arena_in_need ( arena* prev_arena )\n{\n    suppress_unused_warning(prev_arena);\n    if( as_atomic(my_total_demand) <= 0 )\n        return NULL;\n    arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex, /*is_writer=*/false);\n    assert_market_valid();\n    int p = my_global_top_priority;\n    arena *a = NULL;\n    do {\n        priority_level_info &pl = my_priority_levels[p];\n        a = arena_in_need( pl.arenas, pl.next_arena );\n        // TODO: When refactoring task priority code, take into consideration the\n        // __TBB_TRACK_PRIORITY_LEVEL_SATURATION sections from earlier versions of TBB\n    } while ( !a && --p >= my_global_bottom_priority );\n    return a;\n}\n\nvoid market::update_allotment ( intptr_t highest_affected_priority ) {\n    intptr_t i = highest_affected_priority;\n    int available = my_priority_levels[i].workers_available;\n    for ( ; i >= my_global_bottom_priority; --i ) {\n        priority_level_info &pl = my_priority_levels[i];\n        pl.workers_available = available;\n        if ( pl.workers_requested ) {\n            available -= update_allotment( pl.arenas, pl.workers_requested, available );\n            if ( available < 0 ) { // TODO: assertion?\n                available = 0;\n                break;\n            }\n        }\n    }\n    __TBB_ASSERT( i <= my_global_bottom_priority || !available, NULL );\n    for ( --i; i >= my_global_bottom_priority; --i ) {\n        priority_level_info &pl = my_priority_levels[i];\n        pl.workers_available = 0;\n        arena_list_type::iterator it = pl.arenas.begin();\n        for ( ; it != pl.arenas.end(); ++it ) {\n            __TBB_ASSERT( it->my_num_workers_requested >= 0 || !it->my_num_workers_allotted, NULL );\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n            it->my_num_workers_allotted = it->must_have_concurrency() ? 1 : 0;\n#else\n            it->my_num_workers_allotted = 0;\n#endif\n        }\n    }\n}\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\nbool market::mandatory_concurrency_enable_impl ( arena *a, bool *enabled ) {\n    if( a->my_concurrency_mode==arena_base::cm_enforced_global ) {\n        if( enabled )\n            *enabled = false;\n        return false;\n    }\n    if( enabled )\n        *enabled = true;\n    a->my_max_num_workers = 1;\n    a->my_concurrency_mode = arena_base::cm_enforced_global;\n#if __TBB_TASK_PRIORITY\n    priority_level_info &pl = my_priority_levels[a->my_top_priority];\n    pl.workers_requested++;\n    if( my_global_top_priority < a->my_top_priority ) {\n        my_global_top_priority = a->my_top_priority;\n        advance_global_reload_epoch();\n    }\n#endif\n    a->my_num_workers_requested++;\n    a->my_num_workers_allotted++;\n    if( 1 == ++my_mandatory_num_requested ) {\n        my_total_demand++;\n        return true;\n    }\n    return false;\n}\n\nbool market::mandatory_concurrency_enable ( arena *a ) {\n    bool add_thread;\n    bool enabled;\n    {\n        arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);\n        add_thread = mandatory_concurrency_enable_impl(a, &enabled);\n    }\n    if( add_thread )\n        my_server->adjust_job_count_estimate( 1 );\n    return enabled;\n}\n\nvoid market::mandatory_concurrency_disable ( arena *a ) {\n    bool remove_thread = false;\n    int delta_adjust_demand = 0;\n\n    {\n        arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);\n\n        if( a->my_concurrency_mode!=arena_base::cm_enforced_global  )\n            return;\n        __TBB_ASSERT( a->my_max_num_workers==1, NULL );\n        a->my_max_num_workers = 0;\n#if __TBB_TASK_PRIORITY\n        if ( a->my_top_priority != normalized_normal_priority ) {\n            update_arena_top_priority( *a, normalized_normal_priority );\n        }\n        a->my_bottom_priority = normalized_normal_priority;\n#endif\n\n        int val = --my_mandatory_num_requested;\n        __TBB_ASSERT_EX( val >= 0, NULL );\n        if( val == 0 ) {\n            my_total_demand--;\n            remove_thread = true;\n        }\n        a->my_num_workers_requested--;\n        if (a->my_num_workers_requested > 0)\n            delta_adjust_demand = a->my_num_workers_requested;\n        else\n            a->my_num_workers_allotted = 0;\n\n#if __TBB_TASK_PRIORITY\n        priority_level_info &pl = my_priority_levels[a->my_top_priority];\n        pl.workers_requested--;\n        intptr_t p = my_global_top_priority;\n        for (; !my_priority_levels[p].workers_requested && p>0; p--)\n            ;\n        if( !p )\n            reset_global_priority();\n        else if( p!= my_global_top_priority )\n            update_global_top_priority(p);\n#endif\n        a->my_concurrency_mode = arena::cm_normal;\n    }\n    if( delta_adjust_demand )\n        adjust_demand( *a, -delta_adjust_demand );\n    if( remove_thread )\n        my_server->adjust_job_count_estimate( -1 );\n}\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n\nvoid market::adjust_demand ( arena& a, int delta ) {\n    __TBB_ASSERT( theMarket, \"market instance was destroyed prematurely?\" );\n    if ( !delta )\n        return;\n    my_arenas_list_mutex.lock();\n    int prev_req = a.my_num_workers_requested;\n    a.my_num_workers_requested += delta;\n    if ( a.my_num_workers_requested <= 0 ) {\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        // must not recall worker from arena with mandatory parallelism\n        if ( a.my_market->my_mandatory_num_requested && a.my_concurrency_mode!=arena_base::cm_normal )\n            a.my_num_workers_allotted = 1;\n        else\n#endif\n            a.my_num_workers_allotted = 0;\n        if ( prev_req <= 0 ) {\n            my_arenas_list_mutex.unlock();\n            return;\n        }\n        delta = -prev_req;\n    }\n    else if ( prev_req < 0 ) {\n        delta = a.my_num_workers_requested;\n    }\n    my_total_demand += delta;\n#if !__TBB_TASK_PRIORITY\n    update_allotment();\n#else /* !__TBB_TASK_PRIORITY */\n    intptr_t p = a.my_top_priority;\n    priority_level_info &pl = my_priority_levels[p];\n    pl.workers_requested += delta;\n    __TBB_ASSERT( pl.workers_requested >= 0, NULL );\n    if ( a.my_num_workers_requested <= 0 ) {\n        if ( a.my_top_priority != normalized_normal_priority ) {\n            GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.arena_prio_resets );\n            update_arena_top_priority( a, normalized_normal_priority );\n        }\n        a.my_bottom_priority = normalized_normal_priority;\n    }\n    if ( p == my_global_top_priority ) {\n        if ( !pl.workers_requested ) {\n            while ( --p >= my_global_bottom_priority && !my_priority_levels[p].workers_requested )\n                continue;\n            if ( p < my_global_bottom_priority )\n                reset_global_priority();\n            else\n                update_global_top_priority(p);\n        }\n        update_allotment( my_global_top_priority );\n    }\n    else if ( p > my_global_top_priority ) {\n        __TBB_ASSERT( pl.workers_requested > 0, NULL );\n        // TODO: investigate if the following invariant is always valid\n        __TBB_ASSERT( a.my_num_workers_requested >= 0, NULL );\n        update_global_top_priority(p);\n        a.my_num_workers_allotted = min( (int)my_num_workers_soft_limit, a.my_num_workers_requested );\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        // must not recall worker from arena with mandatory parallelism\n        if ( !a.my_num_workers_allotted && a.my_num_workers_requested\n             && a.my_market->my_mandatory_num_requested && a.my_concurrency_mode!=arena_base::cm_normal )\n            a.my_num_workers_allotted = 1;\n#endif\n        my_priority_levels[p - 1].workers_available = my_num_workers_soft_limit - a.my_num_workers_allotted;\n        update_allotment( p - 1 );\n    }\n    else if ( p == my_global_bottom_priority ) {\n        if ( !pl.workers_requested ) {\n            while ( ++p <= my_global_top_priority && !my_priority_levels[p].workers_requested )\n                continue;\n            if ( p > my_global_top_priority )\n                reset_global_priority();\n            else\n                my_global_bottom_priority = p;\n        }\n        else\n            update_allotment( p );\n    }\n    else if ( p < my_global_bottom_priority ) {\n        int prev_bottom = my_global_bottom_priority;\n        my_global_bottom_priority = p;\n        update_allotment( prev_bottom );\n    }\n    else {\n        __TBB_ASSERT( my_global_bottom_priority < p && p < my_global_top_priority, NULL );\n        update_allotment( p );\n    }\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority || a.my_num_workers_requested<=0, NULL );\n    assert_market_valid();\n#endif /* !__TBB_TASK_PRIORITY */\n    if ( delta > 0 ) {\n        // can't overflow soft_limit, but remember values request by arenas in\n        // my_total_demand to not prematurely release workers to RML\n        if ( my_num_workers_requested+delta > (int)my_num_workers_soft_limit )\n            delta = my_num_workers_soft_limit - my_num_workers_requested;\n    } else {\n        // the number of workers should not be decreased below my_total_demand\n        if ( my_num_workers_requested+delta < my_total_demand )\n            delta = min(my_total_demand, (int)my_num_workers_soft_limit) - my_num_workers_requested;\n    }\n    my_num_workers_requested += delta;\n    __TBB_ASSERT( my_num_workers_requested <= (int)my_num_workers_soft_limit, NULL );\n\n    my_arenas_list_mutex.unlock();\n    // Must be called outside of any locks\n    my_server->adjust_job_count_estimate( delta );\n    GATHER_STATISTIC( governor::local_scheduler_if_initialized() ? ++governor::local_scheduler_if_initialized()->my_counters.gate_switches : 0 );\n}\n\nvoid market::process( job& j ) {\n    generic_scheduler& s = static_cast<generic_scheduler&>(j);\n    arena *a = NULL;\n    __TBB_ASSERT( governor::is_set(&s), NULL );\n    enum {\n        query_interval = 1000,\n        first_interval = 1\n    };\n    for(int i = first_interval; ; i--) {\n        while ( (a = arena_in_need(a)) )\n        {\n            a->process(s);\n            i = first_interval;\n        }\n        // Workers leave market because there is no arena in need. It can happen earlier than\n        // adjust_job_count_estimate() decreases my_slack and RML can put this thread to sleep.\n        // It might result in a busy-loop checking for my_slack<0 and calling this method instantly.\n        // first_interval>0 and the yield refines this spinning.\n        if( i > 0 )\n            __TBB_Yield();\n        else\n#if !__TBB_SLEEP_PERMISSION\n            break;\n#else\n        { // i == 0\n#if __TBB_TASK_PRIORITY\n            arena_list_type &al = my_priority_levels[my_global_top_priority].arenas;\n#else /* __TBB_TASK_PRIORITY */\n            arena_list_type &al = my_arenas;\n#endif /* __TBB_TASK_PRIORITY */\n            if( al.empty() ) // races if any are innocent TODO: replace by an RML query interface\n                break; // no arenas left, perhaps going to shut down\n            if( the_global_observer_list.ask_permission_to_leave() )\n                break; // go sleep\n            __TBB_Yield();\n            i = query_interval;\n        }\n#endif// !__TBB_SLEEP_PERMISSION\n    }\n    GATHER_STATISTIC( ++s.my_counters.market_roundtrips );\n}\n\nvoid market::cleanup( job& j ) {\n    __TBB_ASSERT( theMarket != this, NULL );\n    generic_scheduler& s = static_cast<generic_scheduler&>(j);\n    generic_scheduler* mine = governor::local_scheduler_if_initialized();\n    __TBB_ASSERT( !mine || mine->is_worker(), NULL );\n    if( mine!=&s ) {\n        governor::assume_scheduler( &s );\n        generic_scheduler::cleanup_worker( &s, mine!=NULL );\n        governor::assume_scheduler( mine );\n    } else {\n        generic_scheduler::cleanup_worker( &s, true );\n    }\n}\n\nvoid market::acknowledge_close_connection() {\n    destroy();\n}\n\n::rml::job* market::create_one_job() {\n    unsigned index = ++my_first_unused_worker_idx;\n    __TBB_ASSERT( index > 0, NULL );\n    ITT_THREAD_SET_NAME(_T(\"TBB Worker Thread\"));\n    // index serves as a hint decreasing conflicts between workers when they migrate between arenas\n    generic_scheduler* s = generic_scheduler::create_worker( *this, index );\n#if __TBB_TASK_GROUP_CONTEXT\n    __TBB_ASSERT( index <= my_num_workers_hard_limit, NULL );\n    __TBB_ASSERT( !my_workers[index - 1], NULL );\n    my_workers[index - 1] = s;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    return s;\n}\n\n#if __TBB_TASK_PRIORITY\nvoid market::update_arena_top_priority ( arena& a, intptr_t new_priority ) {\n    GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.arena_prio_switches );\n    __TBB_ASSERT( a.my_top_priority != new_priority, NULL );\n    priority_level_info &prev_level = my_priority_levels[a.my_top_priority],\n                        &new_level = my_priority_levels[new_priority];\n    remove_arena_from_list(a);\n    a.my_top_priority = new_priority;\n    insert_arena_into_list(a);\n    as_atomic( a.my_reload_epoch ).fetch_and_increment<tbb::release>(); // TODO: synch with global reload epoch in order to optimize usage of local reload epoch\n    prev_level.workers_requested -= a.my_num_workers_requested;\n    new_level.workers_requested += a.my_num_workers_requested;\n    __TBB_ASSERT( prev_level.workers_requested >= 0 && new_level.workers_requested >= 0, NULL );\n}\n\nbool market::lower_arena_priority ( arena& a, intptr_t new_priority, uintptr_t old_reload_epoch ) {\n    // TODO: replace the lock with a try_lock loop which performs a double check of the epoch\n    arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);\n    if ( a.my_reload_epoch != old_reload_epoch ) {\n        assert_market_valid();\n        return false;\n    }\n    __TBB_ASSERT( a.my_top_priority > new_priority, NULL );\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority, NULL );\n\n    intptr_t p = a.my_top_priority;\n    update_arena_top_priority( a, new_priority );\n    if ( a.my_num_workers_requested > 0 ) {\n        if ( my_global_bottom_priority > new_priority ) {\n            my_global_bottom_priority = new_priority;\n        }\n        if ( p == my_global_top_priority && !my_priority_levels[p].workers_requested ) {\n            // Global top level became empty\n            for ( --p; p>my_global_bottom_priority && !my_priority_levels[p].workers_requested; --p ) continue;\n            update_global_top_priority(p);\n        }\n        update_allotment( p );\n    }\n\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority, NULL );\n    assert_market_valid();\n    return true;\n}\n\nbool market::update_arena_priority ( arena& a, intptr_t new_priority ) {\n    // TODO: do not acquire this global lock while checking arena's state.\n    arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex);\n\n    tbb::internal::assert_priority_valid(new_priority);\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority || a.my_num_workers_requested <= 0, NULL );\n    assert_market_valid();\n    if ( a.my_top_priority == new_priority ) {\n        return false;\n    }\n    else if ( a.my_top_priority > new_priority ) {\n        if ( a.my_bottom_priority > new_priority )\n            a.my_bottom_priority = new_priority;\n        return false;\n    }\n    else if ( a.my_num_workers_requested <= 0 ) {\n        return false;\n    }\n\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority, NULL );\n\n    intptr_t p = a.my_top_priority;\n    intptr_t highest_affected_level = max(p, new_priority);\n    update_arena_top_priority( a, new_priority );\n\n    if ( my_global_top_priority < new_priority ) {\n        update_global_top_priority(new_priority);\n    }\n    else if ( my_global_top_priority == new_priority ) {\n        advance_global_reload_epoch();\n    }\n    else {\n        __TBB_ASSERT( new_priority < my_global_top_priority, NULL );\n        __TBB_ASSERT( new_priority > my_global_bottom_priority, NULL );\n        if ( p == my_global_top_priority && !my_priority_levels[p].workers_requested ) {\n            // Global top level became empty\n            __TBB_ASSERT( my_global_bottom_priority < p, NULL );\n            for ( --p; !my_priority_levels[p].workers_requested; --p ) continue;\n            __TBB_ASSERT( p >= new_priority, NULL );\n            update_global_top_priority(p);\n            highest_affected_level = p;\n        }\n    }\n    if ( p == my_global_bottom_priority ) {\n        // Arena priority was increased from the global bottom level.\n        __TBB_ASSERT( p < new_priority, NULL );\n        __TBB_ASSERT( new_priority <= my_global_top_priority, NULL );\n        while ( my_global_bottom_priority < my_global_top_priority\n                && !my_priority_levels[my_global_bottom_priority].workers_requested )\n            ++my_global_bottom_priority;\n        __TBB_ASSERT( my_global_bottom_priority <= new_priority, NULL );\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n        const bool enforced_concurrency = my_mandatory_num_requested && a.must_have_concurrency();\n#else\n        const bool enforced_concurrency = false;\n#endif\n        __TBB_ASSERT_EX( enforced_concurrency || my_priority_levels[my_global_bottom_priority].workers_requested > 0, NULL );\n    }\n    update_allotment( highest_affected_level );\n\n    __TBB_ASSERT( my_global_top_priority >= a.my_top_priority, NULL );\n    assert_market_valid();\n    return true;\n}\n#endif /* __TBB_TASK_PRIORITY */\n\n} // namespace internal\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/market.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_market_H\n#define _TBB_market_H\n\n#include \"tbb/tbb_stddef.h\"\n\n#include \"scheduler_common.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"../rml/include/rml_tbb.h\"\n\n#include \"intrusive_list.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\nclass task_group_context;\n\nnamespace internal {\n\n//------------------------------------------------------------------------\n// Class market\n//------------------------------------------------------------------------\n\nclass market : no_copy, rml::tbb_client {\n    friend class generic_scheduler;\n    friend class arena;\n    friend class tbb::interface7::internal::task_arena_base;\n    template<typename SchedulerTraits> friend class custom_scheduler;\n    friend class tbb::task_group_context;\nprivate:\n    friend void ITT_DoUnsafeOneTimeInitialization ();\n\n    typedef intrusive_list<arena> arena_list_type;\n    typedef intrusive_list<generic_scheduler> scheduler_list_type;\n\n    //! Currently active global market\n    static market* theMarket;\n\n    typedef scheduler_mutex_type global_market_mutex_type;\n\n    //! Mutex guarding creation/destruction of theMarket, insertions/deletions in my_arenas, and cancellation propagation\n    static global_market_mutex_type  theMarketMutex;\n\n    //! Lightweight mutex guarding accounting operations with arenas list\n    typedef spin_rw_mutex arenas_list_mutex_type;\n    arenas_list_mutex_type my_arenas_list_mutex;\n\n    //! Pointer to the RML server object that services this TBB instance.\n    rml::tbb_server* my_server;\n\n    //! Maximal number of workers allowed for use by the underlying resource manager\n    /** It can't be changed after market creation. **/\n    unsigned my_num_workers_hard_limit;\n\n    //! Current application-imposed limit on the number of workers (see set_active_num_workers())\n    /** It can't be more than my_num_workers_hard_limit. **/\n    unsigned my_num_workers_soft_limit;\n\n    //! Number of workers currently requested from RML\n    int my_num_workers_requested;\n\n    //! First unused index of worker\n    /** Used to assign indices to the new workers coming from RML, and busy part\n        of my_workers array. **/\n    atomic<unsigned> my_first_unused_worker_idx;\n\n    //! Number of workers that were requested by all arenas\n    int my_total_demand;\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    //! How many times mandatory concurrency was requested from the market\n    int my_mandatory_num_requested;\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Highest priority among active arenas in the market.\n    /** Arena priority level is its tasks highest priority (specified by arena's\n        my_top_priority member).\n        Arena is active when it has outstanding request for workers. Note that\n        inactive arena may have workers lingering there for some time. **/\n    intptr_t my_global_top_priority;\n\n    //! Lowest priority among active arenas in the market.\n    /** See also my_global_top_priority **/\n    intptr_t my_global_bottom_priority;\n\n    //! Tracks events that may bring tasks in offload areas to the top priority level.\n    /** Incremented when global top priority is decremented or a task group priority\n        is elevated to the current top level. **/\n    uintptr_t my_global_reload_epoch;\n\n    //! Information about arenas at a particular priority level\n    struct priority_level_info {\n        //! List of arenas at this priority level\n        arena_list_type arenas;\n\n        //! The first arena to be checked when idle worker seeks for an arena to enter\n        /** The check happens in round-robin fashion. **/\n        arena *next_arena;\n\n        //! Total amount of workers requested by arenas at this priority level.\n        int workers_requested;\n\n        //! Maximal amount of workers the market can tell off to this priority level.\n        int workers_available;\n    }; // struct priority_level_info\n\n    //! Information about arenas at different priority levels\n    priority_level_info my_priority_levels[num_priority_levels];\n\n#else /* !__TBB_TASK_PRIORITY */\n\n    //! List of registered arenas\n    arena_list_type my_arenas;\n\n    //! The first arena to be checked when idle worker seeks for an arena to enter\n    /** The check happens in round-robin fashion. **/\n    arena *my_next_arena;\n#endif /* !__TBB_TASK_PRIORITY */\n\n    //! ABA prevention marker to assign to newly created arenas\n    uintptr_t my_arenas_aba_epoch;\n\n    //! Reference count controlling market object lifetime\n    unsigned my_ref_count;\n\n    //! Count of master threads attached\n    unsigned my_public_ref_count;\n\n    //! Stack size of worker threads\n    size_t my_stack_size;\n\n    //! Shutdown mode\n    bool my_join_workers;\n\n    //! The value indicating that the soft limit warning is unnecessary\n    static const unsigned skip_soft_limit_warning = ~0U;\n\n    //! Either workers soft limit to be reported via runtime_warning() or skip_soft_limit_warning\n    unsigned my_workers_soft_limit_to_report;\n#if __TBB_COUNT_TASK_NODES\n    //! Net number of nodes that have been allocated from heap.\n    /** Updated each time a scheduler or arena is destroyed. */\n    atomic<intptr_t> my_task_node_count;\n#endif /* __TBB_COUNT_TASK_NODES */\n\n    //! Constructor\n    market ( unsigned workers_soft_limit, unsigned workers_hard_limit, size_t stack_size );\n\n    //! Factory method creating new market object\n    static market& global_market ( bool is_public, unsigned max_num_workers = 0, size_t stack_size = 0 );\n\n    //! Destroys and deallocates market object created by market::create()\n    void destroy ();\n\n#if __TBB_TASK_PRIORITY\n    //! Returns next arena that needs more workers, or NULL.\n    arena* arena_in_need ( arena* prev_arena );\n\n    //! Recalculates the number of workers assigned to each arena at and below the specified priority.\n    /** The actual number of workers servicing a particular arena may temporarily\n        deviate from the calculated value. **/\n    void update_allotment ( intptr_t highest_affected_priority );\n\n    //! Changes arena's top priority and updates affected priority levels info in the market.\n    void update_arena_top_priority ( arena& a, intptr_t newPriority );\n\n    //! Changes market's global top priority and related settings.\n    inline void update_global_top_priority ( intptr_t newPriority );\n\n    //! Resets empty market's global top and bottom priority to the normal level.\n    inline void reset_global_priority ();\n\n    inline void advance_global_reload_epoch () {\n        __TBB_store_with_release( my_global_reload_epoch, my_global_reload_epoch + 1 );\n    }\n\n    void assert_market_valid () const {\n        __TBB_ASSERT( (my_priority_levels[my_global_top_priority].workers_requested > 0\n                           && !my_priority_levels[my_global_top_priority].arenas.empty())\n                       || (my_global_top_priority == my_global_bottom_priority &&\n                           my_global_top_priority == normalized_normal_priority), NULL );\n    }\n\n#else /* !__TBB_TASK_PRIORITY */\n\n    //! Recalculates the number of workers assigned to each arena in the list.\n    /** The actual number of workers servicing a particular arena may temporarily\n        deviate from the calculated value. **/\n    void update_allotment () {\n        if ( my_total_demand )\n            update_allotment( my_arenas, my_total_demand, (int)my_num_workers_soft_limit );\n    }\n\n    //! Returns next arena that needs more workers, or NULL.\n    arena* arena_in_need (arena*) {\n        if(__TBB_load_with_acquire(my_total_demand) <= 0)\n            return NULL;\n        arenas_list_mutex_type::scoped_lock lock(my_arenas_list_mutex, /*is_writer=*/false);\n        return arena_in_need(my_arenas, my_next_arena);\n    }\n    void assert_market_valid () const {}\n#endif /* !__TBB_TASK_PRIORITY */\n\n    ////////////////////////////////////////////////////////////////////////////////\n    // Helpers to unify code branches dependent on priority feature presence\n\n    void insert_arena_into_list ( arena& a );\n\n    void remove_arena_from_list ( arena& a );\n\n    arena* arena_in_need ( arena_list_type &arenas, arena *&next );\n\n    static int update_allotment ( arena_list_type& arenas, int total_demand, int max_workers );\n\n\n    ////////////////////////////////////////////////////////////////////////////////\n    // Implementation of rml::tbb_client interface methods\n\n    version_type version () const __TBB_override { return 0; }\n\n    unsigned max_job_count () const __TBB_override { return my_num_workers_hard_limit; }\n\n    size_t min_stack_size () const __TBB_override { return worker_stack_size(); }\n\n    policy_type policy () const __TBB_override { return throughput; }\n\n    job* create_one_job () __TBB_override;\n\n    void cleanup( job& j ) __TBB_override;\n\n    void acknowledge_close_connection () __TBB_override;\n\n    void process( job& j ) __TBB_override;\n\npublic:\n    //! Creates an arena object\n    /** If necessary, also creates global market instance, and boosts its ref count.\n        Each call to create_arena() must be matched by the call to arena::free_arena(). **/\n    static arena* create_arena ( int num_slots, int num_reserved_slots, size_t stack_size );\n\n    //! Removes the arena from the market's list\n    void try_destroy_arena ( arena*, uintptr_t aba_epoch );\n\n    //! Removes the arena from the market's list\n    void detach_arena ( arena& );\n\n    //! Decrements market's refcount and destroys it in the end\n    bool release ( bool is_public, bool blocking_terminate );\n\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    //! Imlpementation of mandatory concurrency enabling\n    bool mandatory_concurrency_enable_impl ( arena *a, bool *enabled = NULL );\n\n    //! Inform the master that there is an arena with mandatory concurrency\n    bool mandatory_concurrency_enable ( arena *a );\n\n    //! Inform the master that the arena is no more interested in mandatory concurrency\n    void mandatory_concurrency_disable ( arena *a );\n#endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */\n\n    //! Request that arena's need in workers should be adjusted.\n    /** Concurrent invocations are possible only on behalf of different arenas. **/\n    void adjust_demand ( arena&, int delta );\n\n    //! Used when RML asks for join mode during workers termination.\n    bool must_join_workers () const { return my_join_workers; }\n\n    //! Returns the requested stack size of worker threads.\n    size_t worker_stack_size () const { return my_stack_size; }\n\n    //! Set number of active workers\n    static void set_active_num_workers( unsigned w );\n\n    //! Reports active parallelism level according to user's settings\n    static unsigned app_parallelism_limit();\n\n#if _WIN32||_WIN64\n    //! register master with the resource manager\n    void register_master( ::rml::server::execution_resource_t& rsc_handle ) {\n        __TBB_ASSERT( my_server, \"RML server not defined?\" );\n        // the server may ignore registration and set master_exec_resource to NULL.\n        my_server->register_master( rsc_handle );\n    }\n\n    //! unregister master with the resource manager\n    void unregister_master( ::rml::server::execution_resource_t& rsc_handle ) const {\n        my_server->unregister_master( rsc_handle );\n    }\n#endif /* WIN */\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Finds all contexts affected by the state change and propagates the new state to them.\n    /** The propagation is relayed to the market because tasks created by one\n        master thread can be passed to and executed by other masters. This means\n        that context trees can span several arenas at once and thus state change\n        propagation cannot be generally localized to one arena only. **/\n    template <typename T>\n    bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_TASK_PRIORITY\n    //! Lowers arena's priority is not higher than newPriority\n    /** Returns true if arena priority was actually elevated. **/\n    bool lower_arena_priority ( arena& a, intptr_t new_priority, uintptr_t old_reload_epoch );\n\n    //! Makes sure arena's priority is not lower than newPriority\n    /** Returns true if arena priority was elevated. Also updates arena's bottom\n        priority boundary if necessary.\n\n        This method is called whenever a user changes priority, because whether\n        it was hiked or sunk can be determined for sure only under the lock used\n        by this function. **/\n    bool update_arena_priority ( arena& a, intptr_t new_priority );\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_COUNT_TASK_NODES\n    //! Net number of nodes that have been allocated from heap.\n    /** Updated each time a scheduler or arena is destroyed. */\n    void update_task_node_count( intptr_t delta ) { my_task_node_count += delta; }\n#endif /* __TBB_COUNT_TASK_NODES */\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! List of registered master threads\n    scheduler_list_type my_masters;\n\n    //! Array of pointers to the registered workers\n    /** Used by cancellation propagation mechanism.\n        Must be the last data member of the class market. **/\n    generic_scheduler* my_workers[1];\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    static unsigned max_num_workers() {\n        global_market_mutex_type::scoped_lock lock( theMarketMutex );\n        return theMarket? theMarket->my_num_workers_hard_limit : 0;\n    }\n}; // class market\n\n} // namespace internal\n} // namespace tbb\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (pop)\n#endif // warning 4244 is back\n\n#endif /* _TBB_market_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _WIN32||_WIN64\n#include <errno.h> // EDEADLK\n#endif\n#include \"tbb/mutex.h\"\n#include \"itt_notify.h\"\n#if __TBB_TSX_AVAILABLE\n#include \"governor.h\" // for speculation_enabled()\n#endif\n\nnamespace tbb {\n    void mutex::scoped_lock::internal_acquire( mutex& m ) {\n\n#if _WIN32||_WIN64\n        switch( m.state ) {\n        case INITIALIZED:\n        case HELD:\n            EnterCriticalSection( &m.impl );\n            // If a thread comes here, and another thread holds the lock, it will block\n            // in EnterCriticalSection.  When it returns from EnterCriticalSection,\n            // m.state must be set to INITIALIZED.  If the same thread tries to acquire a lock it\n            // already holds, the lock is in HELD state, thus will cause throwing the exception.\n            if (m.state==HELD)\n                tbb::internal::handle_perror(EDEADLK,\"mutex::scoped_lock: deadlock caused by attempt to reacquire held mutex\");\n            m.state = HELD;\n            break;\n        case DESTROYED:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: mutex already destroyed\");\n            break;\n        default:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: illegal mutex state\");\n            break;\n        }\n#else\n        int error_code = pthread_mutex_lock(&m.impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex::scoped_lock: pthread_mutex_lock failed\");\n#endif /* _WIN32||_WIN64 */\n        my_mutex = &m;\n    }\n\nvoid mutex::scoped_lock::internal_release() {\n    __TBB_ASSERT( my_mutex, \"mutex::scoped_lock: not holding a mutex\" );\n#if _WIN32||_WIN64\n     switch( my_mutex->state ) {\n        case INITIALIZED:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: try to release the lock without acquisition\");\n            break;\n        case HELD:\n            my_mutex->state = INITIALIZED;\n            LeaveCriticalSection(&my_mutex->impl);\n            break;\n        case DESTROYED:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: mutex already destroyed\");\n            break;\n        default:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: illegal mutex state\");\n            break;\n    }\n#else\n     int error_code = pthread_mutex_unlock(&my_mutex->impl);\n     __TBB_ASSERT_EX(!error_code, \"mutex::scoped_lock: pthread_mutex_unlock failed\");\n#endif /* _WIN32||_WIN64 */\n     my_mutex = NULL;\n}\n\nbool mutex::scoped_lock::internal_try_acquire( mutex& m ) {\n#if _WIN32||_WIN64\n    switch( m.state ) {\n        case INITIALIZED:\n        case HELD:\n            break;\n        case DESTROYED:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: mutex already destroyed\");\n            break;\n        default:\n            __TBB_ASSERT(false,\"mutex::scoped_lock: illegal mutex state\");\n            break;\n    }\n#endif /* _WIN32||_WIN64 */\n\n    bool result;\n#if _WIN32||_WIN64\n    result = TryEnterCriticalSection(&m.impl)!=0;\n    if( result ) {\n        __TBB_ASSERT(m.state!=HELD, \"mutex::scoped_lock: deadlock caused by attempt to reacquire held mutex\");\n        m.state = HELD;\n    }\n#else\n    result = pthread_mutex_trylock(&m.impl)==0;\n#endif /* _WIN32||_WIN64 */\n    if( result )\n        my_mutex = &m;\n    return result;\n}\n\nvoid mutex::internal_construct() {\n#if _WIN32||_WIN64\n    InitializeCriticalSectionEx(&impl, 4000, 0);\n    state = INITIALIZED;\n#else\n    int error_code = pthread_mutex_init(&impl,NULL);\n    if( error_code )\n        tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_init failed\");\n#endif /* _WIN32||_WIN64*/\n    ITT_SYNC_CREATE(&impl, _T(\"tbb::mutex\"), _T(\"\"));\n}\n\nvoid mutex::internal_destroy() {\n#if _WIN32||_WIN64\n    switch( state ) {\n      case INITIALIZED:\n        DeleteCriticalSection(&impl);\n       break;\n      case DESTROYED:\n        __TBB_ASSERT(false,\"mutex: already destroyed\");\n        break;\n      default:\n        __TBB_ASSERT(false,\"mutex: illegal state for destruction\");\n        break;\n    }\n    state = DESTROYED;\n#else\n    int error_code = pthread_mutex_destroy(&impl);\n#if __TBB_TSX_AVAILABLE\n    // For processors with speculative execution, skip the error code check due to glibc bug #16657\n    if( tbb::internal::governor::speculation_enabled() ) return;\n#endif\n    __TBB_ASSERT_EX(!error_code,\"mutex: pthread_mutex_destroy failed\");\n#endif /* _WIN32||_WIN64 */\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/observer_proxy.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_SCHEDULER_OBSERVER\n\n#include \"observer_proxy.h\"\n#include \"tbb_main.h\"\n#include \"governor.h\"\n#include \"scheduler.h\"\n#include \"arena.h\"\n\nnamespace tbb {\nnamespace internal {\n\npadded<observer_list> the_global_observer_list;\n\n#if TBB_USE_ASSERT\nstatic atomic<int> observer_proxy_count;\n\nstruct check_observer_proxy_count {\n    ~check_observer_proxy_count() {\n        if( observer_proxy_count!=0 ) {\n            runtime_warning( \"Leaked %ld observer_proxy objects\\n\", long(observer_proxy_count) );\n        }\n    }\n};\n\nstatic check_observer_proxy_count the_check_observer_proxy_count;\n#endif /* TBB_USE_ASSERT */\n\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\ninterface6::task_scheduler_observer* observer_proxy::get_v6_observer() {\n    if(my_version != 6) return NULL;\n    return static_cast<interface6::task_scheduler_observer*>(my_observer);\n}\n#endif\n\n#if __TBB_ARENA_OBSERVER\nbool observer_proxy::is_global() {\n    return !get_v6_observer() || get_v6_observer()->my_context_tag == interface6::task_scheduler_observer::global_tag;\n}\n#endif /* __TBB_ARENA_OBSERVER */\n\nobserver_proxy::observer_proxy( task_scheduler_observer_v3& tso )\n    : my_list(NULL), my_next(NULL), my_prev(NULL), my_observer(&tso)\n{\n#if TBB_USE_ASSERT\n    ++observer_proxy_count;\n#endif /* TBB_USE_ASSERT */\n    // 1 for observer\n    my_ref_count = 1;\n    my_version =\n#if __TBB_ARENA_OBSERVER\n        load<relaxed>(my_observer->my_busy_count)\n                 == interface6::task_scheduler_observer::v6_trait ? 6 :\n#endif\n        0;\n    __TBB_ASSERT( my_version >= 6 || !load<relaxed>(my_observer->my_busy_count), NULL );\n}\n\n#if TBB_USE_ASSERT\nobserver_proxy::~observer_proxy () {\n    __TBB_ASSERT( !my_ref_count, \"Attempt to destroy proxy still in use\" );\n    poison_value(my_ref_count);\n    poison_pointer(my_prev);\n    poison_pointer(my_next);\n    --observer_proxy_count;\n}\n#endif /* TBB_USE_ASSERT */\n\ntemplate<memory_semantics M, class T, class V>\nT atomic_fetch_and_store ( T* addr, const V& val ) {\n    return (T)atomic_traits<sizeof(T), M>::fetch_and_store( addr, (T)val );\n}\n\nvoid observer_list::clear () {\n    __TBB_ASSERT( this != &the_global_observer_list, \"Method clear() cannot be used on the list of global observers\" );\n    // Though the method will work fine for the empty list, we require the caller\n    // to check for the list emptiness before invoking it to avoid extra overhead.\n    __TBB_ASSERT( !empty(), NULL );\n    {\n        scoped_lock lock(mutex(), /*is_writer=*/true);\n        observer_proxy *next = my_head;\n        while ( observer_proxy *p = next ) {\n            __TBB_ASSERT( p->my_version >= 6, NULL );\n            next = p->my_next;\n            // Both proxy p and observer p->my_observer (if non-null) are guaranteed\n            // to be alive while the list is locked.\n            task_scheduler_observer_v3 *obs = p->my_observer;\n            // Make sure that possible concurrent observer destruction does not\n            // conflict with the proxy list cleanup.\n            if ( !obs || !(p = (observer_proxy*)__TBB_FetchAndStoreW(&obs->my_proxy, 0)) )\n                continue;\n            // accessing 'obs' after detaching of obs->my_proxy leads to the race with observer destruction\n            __TBB_ASSERT( !next || p == next->my_prev, NULL );\n            __TBB_ASSERT( is_alive(p->my_ref_count), \"Observer's proxy died prematurely\" );\n            __TBB_ASSERT( p->my_ref_count == 1, \"Reference for observer is missing\" );\n#if TBB_USE_ASSERT\n            p->my_observer = NULL;\n            p->my_ref_count = 0;\n#endif /* TBB_USE_ASSERT */\n            remove(p);\n            delete p;\n        }\n    }\n    while( my_head )\n        __TBB_Yield();\n}\n\nvoid observer_list::insert ( observer_proxy* p ) {\n    scoped_lock lock(mutex(), /*is_writer=*/true);\n    if ( my_head ) {\n        p->my_prev = my_tail;\n        my_tail->my_next = p;\n    }\n    else\n        my_head = p;\n    my_tail = p;\n}\n\nvoid observer_list::remove ( observer_proxy* p ) {\n    __TBB_ASSERT( my_head, \"Attempt to remove an item from an empty list\" );\n    __TBB_ASSERT( !my_tail->my_next, \"Last item's my_next must be NULL\" );\n    if( p == my_tail ) {\n        __TBB_ASSERT( !p->my_next, NULL );\n        my_tail = p->my_prev;\n    }\n    else {\n        __TBB_ASSERT( p->my_next, NULL );\n        p->my_next->my_prev = p->my_prev;\n    }\n    if ( p == my_head ) {\n        __TBB_ASSERT( !p->my_prev, NULL );\n        my_head = p->my_next;\n    }\n    else {\n        __TBB_ASSERT( p->my_prev, NULL );\n        p->my_prev->my_next = p->my_next;\n    }\n    __TBB_ASSERT( (my_head && my_tail) || (!my_head && !my_tail), NULL );\n}\n\nvoid observer_list::remove_ref( observer_proxy* p ) {\n    int r = p->my_ref_count;\n    __TBB_ASSERT( is_alive(r), NULL );\n    while(r>1) {\n        __TBB_ASSERT( r!=0, NULL );\n        int r_old = p->my_ref_count.compare_and_swap(r-1,r);\n        if( r_old==r ) {\n            // Successfully decremented count.\n            return;\n        }\n        r = r_old;\n    }\n    __TBB_ASSERT( r==1, NULL );\n    // Reference count might go to zero\n    {\n        // Use lock to avoid resurrection by a thread concurrently walking the list\n        observer_list::scoped_lock lock(mutex(), /*is_writer=*/true);\n        r = --p->my_ref_count;\n        if( !r )\n            remove(p);\n    }\n    __TBB_ASSERT( r || !p->my_ref_count, NULL );\n    if( !r )\n        delete p;\n}\n\nvoid observer_list::do_notify_entry_observers( observer_proxy*& last, bool worker ) {\n    // Pointer p marches though the list from last (exclusively) to the end.\n    observer_proxy *p = last, *prev = p;\n    for(;;) {\n        task_scheduler_observer_v3* tso=NULL;\n        // Hold lock on list only long enough to advance to the next proxy in the list.\n        {\n            scoped_lock lock(mutex(), /*is_writer=*/false);\n            do {\n                if( p ) {\n                    // We were already processing the list.\n                    if( observer_proxy* q = p->my_next ) {\n                        if( p == prev )\n                            remove_ref_fast(prev); // sets prev to NULL if successful\n                        p = q;\n                    }\n                    else {\n                        // Reached the end of the list.\n                        if( p == prev ) {\n                            // Keep the reference as we store the 'last' pointer in scheduler\n                            __TBB_ASSERT(p->my_ref_count >= 1 + (p->my_observer?1:0), NULL);\n                        } else {\n                            // The last few proxies were empty\n                            __TBB_ASSERT(p->my_ref_count, NULL);\n                            ++p->my_ref_count;\n                            if( prev ) {\n                                lock.release();\n                                remove_ref(prev);\n                            }\n                        }\n                        last = p;\n                        return;\n                    }\n                } else {\n                    // Starting pass through the list\n                    p = my_head;\n                    if( !p )\n                        return;\n                }\n                tso = p->my_observer;\n            } while( !tso );\n            ++p->my_ref_count;\n            ++tso->my_busy_count;\n        }\n        __TBB_ASSERT( !prev || p!=prev, NULL );\n        // Release the proxy pinned before p\n        if( prev )\n            remove_ref(prev);\n        // Do not hold any locks on the list while calling user's code.\n        // Do not intercept any exceptions that may escape the callback so that\n        // they are either handled by the TBB scheduler or passed to the debugger.\n        tso->on_scheduler_entry(worker);\n        __TBB_ASSERT(p->my_ref_count, NULL);\n        intptr_t bc = --tso->my_busy_count;\n        __TBB_ASSERT_EX( bc>=0, \"my_busy_count underflowed\" );\n        prev = p;\n    }\n}\n\nvoid observer_list::do_notify_exit_observers( observer_proxy* last, bool worker ) {\n    // Pointer p marches though the list from the beginning to last (inclusively).\n    observer_proxy *p = NULL, *prev = NULL;\n    for(;;) {\n        task_scheduler_observer_v3* tso=NULL;\n        // Hold lock on list only long enough to advance to the next proxy in the list.\n        {\n            scoped_lock lock(mutex(), /*is_writer=*/false);\n            do {\n                if( p ) {\n                    // We were already processing the list.\n                    if( p != last ) {\n                        __TBB_ASSERT( p->my_next, \"List items before 'last' must have valid my_next pointer\" );\n                        if( p == prev )\n                            remove_ref_fast(prev); // sets prev to NULL if successful\n                        p = p->my_next;\n                    } else {\n                        // remove the reference from the last item\n                        remove_ref_fast(p);\n                        if( p ) {\n                            lock.release();\n                            remove_ref(p);\n                        }\n                        return;\n                    }\n                } else {\n                    // Starting pass through the list\n                    p = my_head;\n                    __TBB_ASSERT( p, \"Nonzero 'last' must guarantee that the global list is non-empty\" );\n                }\n                tso = p->my_observer;\n            } while( !tso );\n            // The item is already refcounted\n            if ( p != last ) // the last is already referenced since entry notification\n                ++p->my_ref_count;\n            ++tso->my_busy_count;\n        }\n        __TBB_ASSERT( !prev || p!=prev, NULL );\n        if( prev )\n            remove_ref(prev);\n        // Do not hold any locks on the list while calling user's code.\n        // Do not intercept any exceptions that may escape the callback so that\n        // they are either handled by the TBB scheduler or passed to the debugger.\n        tso->on_scheduler_exit(worker);\n        __TBB_ASSERT(p->my_ref_count || p == last, NULL);\n        intptr_t bc = --tso->my_busy_count;\n        __TBB_ASSERT_EX( bc>=0, \"my_busy_count underflowed\" );\n        prev = p;\n    }\n}\n\n#if __TBB_SLEEP_PERMISSION\nbool observer_list::ask_permission_to_leave() {\n    __TBB_ASSERT( this == &the_global_observer_list, \"This method cannot be used on lists of arena observers\" );\n    if( !my_head ) return true;\n    // Pointer p marches though the list\n    observer_proxy *p = NULL, *prev = NULL;\n    bool result = true;\n    while( result ) {\n        task_scheduler_observer* tso = NULL;\n        // Hold lock on list only long enough to advance to the next proxy in the list.\n        {\n            scoped_lock lock(mutex(), /*is_writer=*/false);\n            do {\n                if( p ) {\n                    // We were already processing the list.\n                    observer_proxy* q = p->my_next;\n                    // read next, remove the previous reference\n                    if( p == prev )\n                        remove_ref_fast(prev); // sets prev to NULL if successful\n                    if( q ) p = q;\n                    else {\n                        // Reached the end of the list.\n                        if( prev ) {\n                            lock.release();\n                            remove_ref(prev);\n                        }\n                        return result;\n                    }\n                } else {\n                    // Starting pass through the list\n                    p = my_head;\n                    if( !p )\n                        return result;\n                }\n                tso = p->get_v6_observer();\n            } while( !tso );\n            ++p->my_ref_count;\n            ++tso->my_busy_count;\n        }\n        __TBB_ASSERT( !prev || p!=prev, NULL );\n        // Release the proxy pinned before p\n        if( prev )\n            remove_ref(prev);\n        // Do not hold any locks on the list while calling user's code.\n        // Do not intercept any exceptions that may escape the callback so that\n        // they are either handled by the TBB scheduler or passed to the debugger.\n        result = tso->may_sleep();\n        __TBB_ASSERT(p->my_ref_count, NULL);\n        intptr_t bc = --tso->my_busy_count;\n        __TBB_ASSERT_EX( bc>=0, \"my_busy_count underflowed\" );\n        prev = p;\n    }\n    if( prev )\n        remove_ref(prev);\n    return result;\n}\n#endif//__TBB_SLEEP_PERMISSION\n\nvoid task_scheduler_observer_v3::observe( bool enable ) {\n    if( enable ) {\n        if( !my_proxy ) {\n            my_proxy = new observer_proxy( *this );\n            my_busy_count = 0; // proxy stores versioning information, clear it\n#if __TBB_ARENA_OBSERVER\n            if ( !my_proxy->is_global() ) {\n                // Local observer activation\n                generic_scheduler* s = governor::local_scheduler_if_initialized();\n                __TBB_ASSERT( my_proxy->get_v6_observer(), NULL );\n                intptr_t tag = my_proxy->get_v6_observer()->my_context_tag;\n                if( tag != interface6::task_scheduler_observer::implicit_tag ) { // explicit arena\n                    task_arena *a = reinterpret_cast<task_arena*>(tag);\n                    a->initialize();\n                    my_proxy->my_list = &a->my_arena->my_observers;\n                } else {\n                    if( !s )\n                        s = governor::init_scheduler( task_scheduler_init::automatic, 0, true );\n                    __TBB_ASSERT( __TBB_InitOnce::initialization_done(), NULL );\n                    __TBB_ASSERT( s && s->my_arena, NULL );\n                    my_proxy->my_list = &s->my_arena->my_observers;\n                }\n                my_proxy->my_list->insert(my_proxy);\n                // Notify newly activated observer and other pending ones if it belongs to current arena\n                if(s && &s->my_arena->my_observers == my_proxy->my_list )\n                    my_proxy->my_list->notify_entry_observers( s->my_last_local_observer, s->is_worker() );\n            } else\n#endif /* __TBB_ARENA_OBSERVER */\n            {\n                // Obsolete. Global observer activation\n                if( !__TBB_InitOnce::initialization_done() )\n                    DoOneTimeInitializations();\n                my_proxy->my_list = &the_global_observer_list;\n                my_proxy->my_list->insert(my_proxy);\n                if( generic_scheduler* s = governor::local_scheduler_if_initialized() ) {\n                    // Notify newly created observer of its own thread.\n                    // Any other pending observers are notified too.\n                    the_global_observer_list.notify_entry_observers( s->my_last_global_observer, s->is_worker() );\n                }\n            }\n        }\n    } else {\n        // Make sure that possible concurrent proxy list cleanup does not conflict\n        // with the observer destruction here.\n        if ( observer_proxy* proxy = (observer_proxy*)__TBB_FetchAndStoreW(&my_proxy, 0) ) {\n            // List destruction should not touch this proxy after we've won the above interlocked exchange.\n            __TBB_ASSERT( proxy->my_observer == this, NULL );\n            __TBB_ASSERT( is_alive(proxy->my_ref_count), \"Observer's proxy died prematurely\" );\n            __TBB_ASSERT( proxy->my_ref_count >= 1, \"reference for observer missing\" );\n            observer_list &list = *proxy->my_list;\n            {\n                // Ensure that none of the list walkers relies on observer pointer validity\n                observer_list::scoped_lock lock(list.mutex(), /*is_writer=*/true);\n                proxy->my_observer = NULL;\n                // Proxy may still be held by other threads (to track the last notified observer)\n                if( !--proxy->my_ref_count ) {// nobody can increase it under exclusive lock\n                    list.remove(proxy);\n                    __TBB_ASSERT( !proxy->my_ref_count, NULL );\n                    delete proxy;\n                }\n            }\n            while( my_busy_count ) // other threads are still accessing the callback\n                __TBB_Yield();\n        }\n    }\n}\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_SCHEDULER_OBSERVER */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/observer_proxy.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_observer_proxy_H\n#define _TBB_observer_proxy_H\n\n#if __TBB_SCHEDULER_OBSERVER\n\n#include \"scheduler_common.h\" // to include task.h\n#include \"tbb/task_scheduler_observer.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/aligned_space.h\"\n\nnamespace tbb {\nnamespace internal {\n\nclass observer_list {\n    friend class arena;\n\n    // Mutex is wrapped with aligned_space to shut up warnings when its destructor\n    // is called while threads are still using it.\n    typedef aligned_space<spin_rw_mutex>  my_mutex_type;\n\n    //! Pointer to the head of this list.\n    observer_proxy* my_head;\n\n    //! Pointer to the tail of this list.\n    observer_proxy* my_tail;\n\n    //! Mutex protecting this list.\n    my_mutex_type my_mutex;\n\n    //! Back-pointer to the arena this list belongs to.\n    arena* my_arena;\n\n    //! Decrement refcount of the proxy p if there are other outstanding references.\n    /** In case of success sets p to NULL. Must be invoked from under the list lock. **/\n    inline static void remove_ref_fast( observer_proxy*& p );\n\n    //! Implements notify_entry_observers functionality.\n    void do_notify_entry_observers( observer_proxy*& last, bool worker );\n\n    //! Implements notify_exit_observers functionality.\n    void do_notify_exit_observers( observer_proxy* last, bool worker );\n\npublic:\n    observer_list () : my_head(NULL), my_tail(NULL) {}\n\n    //! Removes and destroys all observer proxies from the list.\n    /** Cannot be used concurrently with other methods. **/\n    void clear ();\n\n    //! Add observer proxy to the tail of the list.\n    void insert ( observer_proxy* p );\n\n    //! Remove observer proxy from the list.\n    void remove ( observer_proxy* p );\n\n    //! Decrement refcount of the proxy and destroy it if necessary.\n    /** When refcount reaches zero removes the proxy from the list and destructs it. **/\n    void remove_ref( observer_proxy* p );\n\n    //! Type of the scoped lock for the reader-writer mutex associated with the list.\n    typedef spin_rw_mutex::scoped_lock scoped_lock;\n\n    //! Accessor to the reader-writer mutex associated with the list.\n    spin_rw_mutex& mutex () { return my_mutex.begin()[0]; }\n\n    bool empty () const { return my_head == NULL; }\n\n    //! Call entry notifications on observers added after last was notified.\n    /** Updates last to become the last notified observer proxy (in the global list)\n        or leaves it to be NULL. The proxy has its refcount incremented. **/\n    inline void notify_entry_observers( observer_proxy*& last, bool worker );\n\n    //! Call exit notifications on last and observers added before it.\n    inline void notify_exit_observers( observer_proxy*& last, bool worker );\n\n    //! Call may_sleep callbacks to ask for permission for a worker thread to leave market\n    bool ask_permission_to_leave();\n}; // class observer_list\n\n//! Wrapper for an observer object\n/** To maintain shared lists of observers the scheduler first wraps each observer\n    object into a proxy so that a list item remained valid even after the corresponding\n    proxy object is destroyed by the user code. **/\nclass observer_proxy {\n    friend class task_scheduler_observer_v3;\n    friend class observer_list;\n    //! Reference count used for garbage collection.\n    /** 1 for reference from my task_scheduler_observer.\n        1 for each task dispatcher's last observer pointer.\n        No accounting for neighbors in the shared list. */\n    atomic<int> my_ref_count;\n    //! Reference to the list this observer belongs to.\n    observer_list* my_list;\n    //! Pointer to next observer in the list specified by my_head.\n    /** NULL for the last item in the list. **/\n    observer_proxy* my_next;\n    //! Pointer to the previous observer in the list specified by my_head.\n    /** For the head of the list points to the last item. **/\n    observer_proxy* my_prev;\n    //! Associated observer\n    task_scheduler_observer_v3* my_observer;\n    //! Version\n    char my_version;\n\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\n    interface6::task_scheduler_observer* get_v6_observer();\n#endif\n#if __TBB_ARENA_OBSERVER\n    bool is_global(); //TODO: move them back inline when un-CPF'ing\n#endif\n\n    //! Constructs proxy for the given observer and adds it to the specified list.\n    observer_proxy( task_scheduler_observer_v3& );\n\n#if TBB_USE_ASSERT\n    ~observer_proxy();\n#endif /* TBB_USE_ASSERT */\n\n    //! Shut up the warning\n    observer_proxy& operator = ( const observer_proxy& );\n}; // class observer_proxy\n\ninline void observer_list::remove_ref_fast( observer_proxy*& p ) {\n    if( p->my_observer ) {\n        // Can decrement refcount quickly, as it cannot drop to zero while under the lock.\n        int r = --p->my_ref_count;\n        __TBB_ASSERT_EX( r, NULL );\n        p = NULL;\n    } else {\n        // Use slow form of refcount decrementing, after the lock is released.\n    }\n}\n\ninline void observer_list::notify_entry_observers( observer_proxy*& last, bool worker ) {\n    if ( last == my_tail )\n        return;\n    do_notify_entry_observers( last, worker );\n}\n\ninline void observer_list::notify_exit_observers( observer_proxy*& last, bool worker ) {\n    if ( !last )\n        return;\n    __TBB_ASSERT(is_alive((uintptr_t)last), NULL);\n    do_notify_exit_observers( last, worker );\n    __TBB_ASSERT(last, NULL);\n    poison_value(last);\n}\n\nextern padded<observer_list> the_global_observer_list;\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#endif /* _TBB_observer_proxy_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/pipeline.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/pipeline.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"itt_notify.h\"\n#include \"semaphore.h\"\n#include \"tls.h\"  // for parallel filters that do not use NULL as end_of_input\n\n\nnamespace tbb {\n\nnamespace internal {\n\n//! This structure is used to store task information in a input buffer\nstruct task_info {\n    void* my_object;\n    //! Invalid unless a task went through an ordered stage.\n    Token my_token;\n    //! False until my_token is set.\n    bool my_token_ready;\n    //! True if my_object is valid.\n    bool is_valid;\n    //! Set to initial state (no object, no token)\n    void reset() {\n        my_object = NULL;\n        my_token = 0;\n        my_token_ready = false;\n        is_valid = false;\n    }\n};\n//! A buffer of input items for a filter.\n/** Each item is a task_info, inserted into a position in the buffer corresponding to a Token. */\nclass input_buffer : no_copy {\n    friend class tbb::internal::pipeline_root_task;\n    friend class tbb::filter;\n    friend class tbb::thread_bound_filter;\n    friend class tbb::internal::stage_task;\n    friend class tbb::pipeline;\n\n    typedef  Token  size_type;\n\n    //! Array of deferred tasks that cannot yet start executing.\n    task_info* array;\n\n    //! for thread-bound filter, semaphore for waiting, NULL otherwise.\n    semaphore* my_sem;\n\n    //! Size of array\n    /** Always 0 or a power of 2 */\n    size_type array_size;\n\n    //! Lowest token that can start executing.\n    /** All prior Token have already been seen. */\n    Token low_token;\n\n    //! Serializes updates.\n    spin_mutex array_mutex;\n\n    //! Resize \"array\".\n    /** Caller is responsible to acquiring a lock on \"array_mutex\". */\n    void grow( size_type minimum_size );\n\n    //! Initial size for \"array\"\n    /** Must be a power of 2 */\n    static const size_type initial_buffer_size = 4;\n\n    //! Used for out of order buffer, and for assigning my_token if is_ordered and my_token not already assigned\n    Token high_token;\n\n    //! True for ordered filter, false otherwise.\n    bool is_ordered;\n\n    //! True for thread-bound filter, false otherwise.\n    bool is_bound;\n\n    //! for parallel filters that accepts NULLs, thread-local flag for reaching end_of_input\n    typedef basic_tls<intptr_t> end_of_input_tls_t;\n    end_of_input_tls_t end_of_input_tls;\n    bool end_of_input_tls_allocated; // no way to test pthread creation of TLS\n\n    void create_sema(size_t initial_tokens) { __TBB_ASSERT(!my_sem,NULL); my_sem = new internal::semaphore(initial_tokens); }\n    void free_sema() { __TBB_ASSERT(my_sem,NULL); delete my_sem; }\n    void sema_P() { __TBB_ASSERT(my_sem,NULL); my_sem->P(); }\n    void sema_V() { __TBB_ASSERT(my_sem,NULL); my_sem->V(); }\n\npublic:\n    //! Construct empty buffer.\n    input_buffer( bool is_ordered_, bool is_bound_ ) :\n            array(NULL), my_sem(NULL), array_size(0),\n            low_token(0), high_token(0),\n            is_ordered(is_ordered_), is_bound(is_bound_),\n            end_of_input_tls_allocated(false) {\n        grow(initial_buffer_size);\n        __TBB_ASSERT( array, NULL );\n        if(is_bound) create_sema(0);\n    }\n\n    //! Destroy the buffer.\n    ~input_buffer() {\n        __TBB_ASSERT( array, NULL );\n        cache_aligned_allocator<task_info>().deallocate(array,array_size);\n        poison_pointer( array );\n        if(my_sem) {\n            free_sema();\n        }\n        if(end_of_input_tls_allocated) {\n            destroy_my_tls();\n        }\n    }\n\n    //! Put a token into the buffer.\n    /** If task information was placed into buffer, returns true;\n        otherwise returns false, informing the caller to create and spawn a task.\n        If input buffer owned by thread-bound filter and the item at\n        low_token was not valid, issue a V()\n        If the input_buffer is owned by a successor to a thread-bound filter,\n        the force_put parameter should be true to ensure the token is inserted\n        in the buffer.\n    */\n    bool put_token( task_info& info_, bool force_put = false ) {\n        {\n            info_.is_valid = true;\n            spin_mutex::scoped_lock lock( array_mutex );\n            Token token;\n            bool was_empty = !array[low_token&(array_size-1)].is_valid;\n            if( is_ordered ) {\n                if( !info_.my_token_ready ) {\n                    info_.my_token = high_token++;\n                    info_.my_token_ready = true;\n                }\n                token = info_.my_token;\n            } else\n                token = high_token++;\n            __TBB_ASSERT( (tokendiff_t)(token-low_token)>=0, NULL );\n            if( token!=low_token || is_bound || force_put ) {\n                // Trying to put token that is beyond low_token.\n                // Need to wait until low_token catches up before dispatching.\n                if( token-low_token>=array_size )\n                    grow( token-low_token+1 );\n                ITT_NOTIFY( sync_releasing, this );\n                array[token&(array_size-1)] = info_;\n                if(was_empty && is_bound) {\n                    sema_V();\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n\n    //! Note that processing of a token is finished.\n    /** Fires up processing of the next token, if processing was deferred. */\n    // Using template to avoid explicit dependency on stage_task\n    // this is only called for serial filters, and is the reason for the\n    // advance parameter in return_item (we're incrementing low_token here.)\n    // Non-TBF serial stages don't advance the token at the start because the presence\n    // of the current token in the buffer keeps another stage from being spawned.\n    template<typename StageTask>\n    void note_done( Token token, StageTask& spawner ) {\n        task_info wakee;\n        wakee.reset();\n        {\n            spin_mutex::scoped_lock lock( array_mutex );\n            if( !is_ordered || token==low_token ) {\n                // Wake the next task\n                task_info& item = array[++low_token & (array_size-1)];\n                ITT_NOTIFY( sync_acquired, this );\n                wakee = item;\n                item.is_valid = false;\n            }\n        }\n        if( wakee.is_valid )\n            spawner.spawn_stage_task(wakee);\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! The method destroys all data in filters to prevent memory leaks\n    void clear( filter* my_filter ) {\n        long t=low_token;\n        for( size_type i=0; i<array_size; ++i, ++t ){\n            task_info& temp = array[t&(array_size-1)];\n            if (temp.is_valid ) {\n                my_filter->finalize(temp.my_object);\n                temp.is_valid = false;\n            }\n        }\n    }\n#endif\n\n    //! return an item, invalidate the queued item, but only advance if advance\n    //  advance == true for parallel filters.  If the filter is serial, leave the\n    // item in the buffer to keep another stage from being spawned.\n    bool return_item(task_info& info, bool advance) {\n        spin_mutex::scoped_lock lock( array_mutex );\n        task_info& item = array[low_token&(array_size-1)];\n        ITT_NOTIFY( sync_acquired, this );\n        if( item.is_valid ) {\n            info = item;\n            item.is_valid = false;\n            if (advance) low_token++;\n            return true;\n        }\n        return false;\n    }\n\n    //! true if the current low_token is valid.\n    bool has_item() { spin_mutex::scoped_lock lock(array_mutex); return array[low_token&(array_size -1)].is_valid; }\n\n    // end_of_input signal for parallel_pipeline, parallel input filters with 0 tokens allowed.\n    void create_my_tls() { int status = end_of_input_tls.create(); if(status) handle_perror(status, \"TLS not allocated for filter\"); end_of_input_tls_allocated = true; }\n    void destroy_my_tls() { int status = end_of_input_tls.destroy(); if(status) handle_perror(status, \"Failed to destroy filter TLS\"); }\n    bool my_tls_end_of_input() { return end_of_input_tls.get() != 0; }\n    void set_my_tls_end_of_input() { end_of_input_tls.set(1); }\n};\n\nvoid input_buffer::grow( size_type minimum_size ) {\n    size_type old_size = array_size;\n    size_type new_size = old_size ? 2*old_size : initial_buffer_size;\n    while( new_size<minimum_size )\n        new_size*=2;\n    task_info* new_array = cache_aligned_allocator<task_info>().allocate(new_size);\n    task_info* old_array = array;\n    for( size_type i=0; i<new_size; ++i )\n        new_array[i].is_valid = false;\n    long t=low_token;\n    for( size_type i=0; i<old_size; ++i, ++t )\n        new_array[t&(new_size-1)] = old_array[t&(old_size-1)];\n    array = new_array;\n    array_size = new_size;\n    if( old_array )\n        cache_aligned_allocator<task_info>().deallocate(old_array,old_size);\n}\n\nclass stage_task: public task, public task_info {\nprivate:\n    friend class tbb::pipeline;\n    pipeline& my_pipeline;\n    filter* my_filter;\n    //! True if this task has not yet read the input.\n    bool my_at_start;\n\npublic:\n    //! Construct stage_task for first stage in a pipeline.\n    /** Such a stage has not read any input yet. */\n    stage_task( pipeline& pipeline ) :\n        my_pipeline(pipeline),\n        my_filter(pipeline.filter_list),\n        my_at_start(true)\n    {\n        task_info::reset();\n    }\n    //! Construct stage_task for a subsequent stage in a pipeline.\n    stage_task( pipeline& pipeline, filter* filter_, const task_info& info ) :\n        task_info(info),\n        my_pipeline(pipeline),\n        my_filter(filter_),\n        my_at_start(false)\n    {}\n    //! Roughly equivalent to the constructor of input stage task\n    void reset() {\n        task_info::reset();\n        my_filter = my_pipeline.filter_list;\n        my_at_start = true;\n    }\n    //! The virtual task execution method\n    task* execute() __TBB_override;\n#if __TBB_TASK_GROUP_CONTEXT\n    ~stage_task()\n    {\n        if (my_filter && my_object && (my_filter->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4)) {\n            __TBB_ASSERT(is_cancelled(), \"Trying to finalize the task that wasn't cancelled\");\n            my_filter->finalize(my_object);\n            my_object = NULL;\n        }\n    }\n#endif // __TBB_TASK_GROUP_CONTEXT\n    //! Creates and spawns stage_task from task_info\n    void spawn_stage_task(const task_info& info)\n    {\n        stage_task* clone = new (allocate_additional_child_of(*parent()))\n                                stage_task( my_pipeline, my_filter, info );\n        spawn(*clone);\n    }\n};\n\ntask* stage_task::execute() {\n    __TBB_ASSERT( !my_at_start || !my_object, NULL );\n    __TBB_ASSERT( !my_filter->is_bound(), NULL );\n    if( my_at_start ) {\n        if( my_filter->is_serial() ) {\n            my_object = (*my_filter)(my_object);\n            if( my_object || ( my_filter->object_may_be_null() && !my_pipeline.end_of_input) )\n            {\n                if( my_filter->is_ordered() ) {\n                    my_token = my_pipeline.token_counter++; // ideally, with relaxed semantics\n                    my_token_ready = true;\n                } else if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {\n                    if( my_pipeline.has_thread_bound_filters )\n                        my_pipeline.token_counter++; // ideally, with relaxed semantics\n                }\n                if( !my_filter->next_filter_in_pipeline ) { // we're only filter in pipeline\n                    reset();\n                    goto process_another_stage;\n                } else {\n                    ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );\n                    if( --my_pipeline.input_tokens>0 )\n                        spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );\n                }\n            } else {\n                my_pipeline.end_of_input = true;\n                return NULL;\n            }\n        } else /*not is_serial*/ {\n            if( my_pipeline.end_of_input )\n                return NULL;\n            if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {\n                if( my_pipeline.has_thread_bound_filters )\n                    my_pipeline.token_counter++;\n            }\n            ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );\n            if( --my_pipeline.input_tokens>0 )\n                spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );\n            my_object = (*my_filter)(my_object);\n            if( !my_object && (!my_filter->object_may_be_null() || my_filter->my_input_buffer->my_tls_end_of_input()) )\n            {\n                my_pipeline.end_of_input = true;\n                if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {\n                    if( my_pipeline.has_thread_bound_filters )\n                        my_pipeline.token_counter--;  // fix token_counter\n                }\n                return NULL;\n            }\n        }\n        my_at_start = false;\n    } else {\n        my_object = (*my_filter)(my_object);\n        if( my_filter->is_serial() )\n            my_filter->my_input_buffer->note_done(my_token, *this);\n    }\n    my_filter = my_filter->next_filter_in_pipeline;\n    if( my_filter ) {\n        // There is another filter to execute.\n        if( my_filter->is_serial() ) {\n            // The next filter must execute tokens in order\n            if( my_filter->my_input_buffer->put_token(*this) ){\n                // Can't proceed with the same item\n                if( my_filter->is_bound() ) {\n                    // Find the next non-thread-bound filter\n                    do {\n                        my_filter = my_filter->next_filter_in_pipeline;\n                    } while( my_filter && my_filter->is_bound() );\n                    // Check if there is an item ready to process\n                    if( my_filter && my_filter->my_input_buffer->return_item(*this, !my_filter->is_serial()))\n                        goto process_another_stage;\n                }\n                my_filter = NULL; // To prevent deleting my_object twice if exception occurs\n                return NULL;\n            }\n        }\n    } else {\n        // Reached end of the pipe.\n        size_t ntokens_avail = ++my_pipeline.input_tokens;\n        if(my_pipeline.filter_list->is_bound() ) {\n            if(ntokens_avail == 1) {\n                my_pipeline.filter_list->my_input_buffer->sema_V();\n            }\n            return NULL;\n        }\n        if( ntokens_avail>1  // Only recycle if there is one available token\n                || my_pipeline.end_of_input ) {\n            return NULL; // No need to recycle for new input\n        }\n        ITT_NOTIFY( sync_acquired, &my_pipeline.input_tokens );\n        // Recycle as an input stage task.\n        reset();\n    }\nprocess_another_stage:\n    /* A semi-hackish way to reexecute the same task object immediately without spawning.\n       recycle_as_continuation marks the task for future execution,\n       and then 'this' pointer is returned to bypass spawning. */\n    recycle_as_continuation();\n    return this;\n}\n\nclass pipeline_root_task: public task {\n    pipeline& my_pipeline;\n    bool do_segment_scanning;\n\n    task* execute() __TBB_override {\n        if( !my_pipeline.end_of_input )\n            if( !my_pipeline.filter_list->is_bound() )\n                if( my_pipeline.input_tokens > 0 ) {\n                    recycle_as_continuation();\n                    set_ref_count(1);\n                    return new( allocate_child() ) stage_task( my_pipeline );\n                }\n        if( do_segment_scanning ) {\n            filter* current_filter = my_pipeline.filter_list->next_segment;\n            /* first non-thread-bound filter that follows thread-bound one\n            and may have valid items to process */\n            filter* first_suitable_filter = current_filter;\n            while( current_filter ) {\n                __TBB_ASSERT( !current_filter->is_bound(), \"filter is thread-bound?\" );\n                __TBB_ASSERT( current_filter->prev_filter_in_pipeline->is_bound(), \"previous filter is not thread-bound?\" );\n                if( !my_pipeline.end_of_input || current_filter->has_more_work())\n                {\n                    task_info info;\n                    info.reset();\n                    if( current_filter->my_input_buffer->return_item(info, !current_filter->is_serial()) ) {\n                        set_ref_count(1);\n                        recycle_as_continuation();\n                        return new( allocate_child() ) stage_task( my_pipeline, current_filter, info);\n                    }\n                    current_filter = current_filter->next_segment;\n                    if( !current_filter ) {\n                        if( !my_pipeline.end_of_input ) {\n                            recycle_as_continuation();\n                            return this;\n                        }\n                        current_filter = first_suitable_filter;\n                        __TBB_Yield();\n                    }\n                } else {\n                    /* The preceding pipeline segment is empty.\n                    Fast-forward to the next post-TBF segment. */\n                    first_suitable_filter = first_suitable_filter->next_segment;\n                    current_filter = first_suitable_filter;\n                }\n            } /* while( current_filter ) */\n            return NULL;\n        } else {\n            if( !my_pipeline.end_of_input ) {\n                recycle_as_continuation();\n                return this;\n            }\n            return NULL;\n        }\n    }\npublic:\n    pipeline_root_task( pipeline& pipeline ): my_pipeline(pipeline), do_segment_scanning(false)\n    {\n        __TBB_ASSERT( my_pipeline.filter_list, NULL );\n        filter* first = my_pipeline.filter_list;\n        if( (first->my_filter_mode & first->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {\n            // Scanning the pipeline for segments\n            filter* head_of_previous_segment = first;\n            for(  filter* subfilter=first->next_filter_in_pipeline;\n                  subfilter!=NULL;\n                  subfilter=subfilter->next_filter_in_pipeline )\n            {\n                if( subfilter->prev_filter_in_pipeline->is_bound() && !subfilter->is_bound() ) {\n                    do_segment_scanning = true;\n                    head_of_previous_segment->next_segment = subfilter;\n                    head_of_previous_segment = subfilter;\n                }\n            }\n        }\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    // Suppress compiler warning about constant conditional expression\n    #pragma warning (disable: 4127)\n#endif\n\n// The class destroys end_counter and clears all input buffers if pipeline was cancelled.\nclass pipeline_cleaner: internal::no_copy {\n    pipeline& my_pipeline;\npublic:\n    pipeline_cleaner(pipeline& _pipeline) :\n        my_pipeline(_pipeline)\n    {}\n    ~pipeline_cleaner(){\n#if __TBB_TASK_GROUP_CONTEXT\n        if (my_pipeline.end_counter->is_cancelled()) // Pipeline was cancelled\n            my_pipeline.clear_filters();\n#endif\n        my_pipeline.end_counter = NULL;\n    }\n};\n\n} // namespace internal\n\nvoid pipeline::inject_token( task& ) {\n    __TBB_ASSERT(false,\"illegal call to inject_token\");\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\nvoid pipeline::clear_filters() {\n    for( filter* f = filter_list; f; f = f->next_filter_in_pipeline ) {\n        if ((f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4))\n            if( internal::input_buffer* b = f->my_input_buffer )\n                b->clear(f);\n    }\n}\n#endif\n\npipeline::pipeline() :\n    filter_list(NULL),\n    filter_end(NULL),\n    end_counter(NULL),\n    end_of_input(false),\n    has_thread_bound_filters(false)\n{\n    token_counter = 0;\n    input_tokens = 0;\n}\n\npipeline::~pipeline() {\n    clear();\n}\n\nvoid pipeline::clear() {\n    filter* next;\n    for( filter* f = filter_list; f; f=next ) {\n        if( internal::input_buffer* b = f->my_input_buffer ) {\n            delete b;\n            f->my_input_buffer = NULL;\n        }\n        next=f->next_filter_in_pipeline;\n        f->next_filter_in_pipeline = filter::not_in_pipeline();\n        if ( (f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {\n            f->prev_filter_in_pipeline = filter::not_in_pipeline();\n            f->my_pipeline = NULL;\n        }\n        if ( (f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(5) )\n            f->next_segment = NULL;\n    }\n    filter_list = filter_end = NULL;\n}\n\nvoid pipeline::add_filter( filter& filter_ ) {\n#if TBB_USE_ASSERT\n    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) )\n        __TBB_ASSERT( filter_.prev_filter_in_pipeline==filter::not_in_pipeline(), \"filter already part of pipeline?\" );\n    __TBB_ASSERT( filter_.next_filter_in_pipeline==filter::not_in_pipeline(), \"filter already part of pipeline?\" );\n    __TBB_ASSERT( !end_counter, \"invocation of add_filter on running pipeline\" );\n#endif\n    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {\n        filter_.my_pipeline = this;\n        filter_.prev_filter_in_pipeline = filter_end;\n        if ( filter_list == NULL)\n            filter_list = &filter_;\n        else\n            filter_end->next_filter_in_pipeline = &filter_;\n        filter_.next_filter_in_pipeline = NULL;\n        filter_end = &filter_;\n    }\n    else\n    {\n        if( !filter_end )\n            filter_end = reinterpret_cast<filter*>(&filter_list);\n\n        *reinterpret_cast<filter**>(filter_end) = &filter_;\n        filter_end = reinterpret_cast<filter*>(&filter_.next_filter_in_pipeline);\n        *reinterpret_cast<filter**>(filter_end) = NULL;\n    }\n    if( (filter_.my_filter_mode & filter_.version_mask) >= __TBB_PIPELINE_VERSION(5) ) {\n        if( filter_.is_serial() ) {\n            if( filter_.is_bound() )\n                has_thread_bound_filters = true;\n            filter_.my_input_buffer = new internal::input_buffer( filter_.is_ordered(), filter_.is_bound() );\n        }\n        else {\n            if(filter_.prev_filter_in_pipeline) {\n                if(filter_.prev_filter_in_pipeline->is_bound()) {\n                    // successors to bound filters must have an input_buffer\n                    filter_.my_input_buffer = new internal::input_buffer( /*is_ordered*/false, false );\n                }\n            }\n            else {  // input filter\n                if(filter_.object_may_be_null() ) {\n                    //TODO: buffer only needed to hold TLS; could improve\n                    filter_.my_input_buffer = new internal::input_buffer( /*is_ordered*/false, false );\n                    filter_.my_input_buffer->create_my_tls();\n                }\n            }\n        }\n    } else {\n        if( filter_.is_serial() ) {\n            filter_.my_input_buffer = new internal::input_buffer( filter_.is_ordered(), false );\n        }\n    }\n\n}\n\nvoid pipeline::remove_filter( filter& filter_ ) {\n    __TBB_ASSERT( filter_.prev_filter_in_pipeline!=filter::not_in_pipeline(), \"filter not part of pipeline\" );\n    __TBB_ASSERT( filter_.next_filter_in_pipeline!=filter::not_in_pipeline(), \"filter not part of pipeline\" );\n    __TBB_ASSERT( !end_counter, \"invocation of remove_filter on running pipeline\" );\n    if (&filter_ == filter_list)\n        filter_list = filter_.next_filter_in_pipeline;\n    else {\n        __TBB_ASSERT( filter_.prev_filter_in_pipeline, \"filter list broken?\" );\n        filter_.prev_filter_in_pipeline->next_filter_in_pipeline = filter_.next_filter_in_pipeline;\n    }\n    if (&filter_ == filter_end)\n        filter_end = filter_.prev_filter_in_pipeline;\n    else {\n        __TBB_ASSERT( filter_.next_filter_in_pipeline, \"filter list broken?\" );\n        filter_.next_filter_in_pipeline->prev_filter_in_pipeline = filter_.prev_filter_in_pipeline;\n    }\n    if( internal::input_buffer* b = filter_.my_input_buffer ) {\n        delete b;\n        filter_.my_input_buffer = NULL;\n    }\n    filter_.next_filter_in_pipeline = filter_.prev_filter_in_pipeline = filter::not_in_pipeline();\n    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(5) )\n        filter_.next_segment = NULL;\n    filter_.my_pipeline = NULL;\n}\n\nvoid pipeline::run( size_t max_number_of_live_tokens\n#if __TBB_TASK_GROUP_CONTEXT\n    , tbb::task_group_context& context\n#endif\n    ) {\n    __TBB_ASSERT( max_number_of_live_tokens>0, \"pipeline::run must have at least one token\" );\n    __TBB_ASSERT( !end_counter, \"pipeline already running?\" );\n    if( filter_list ) {\n        internal::pipeline_cleaner my_pipeline_cleaner(*this);\n        end_of_input = false;\n        input_tokens = internal::Token(max_number_of_live_tokens);\n        if(has_thread_bound_filters) {\n            // release input filter if thread-bound\n            if(filter_list->is_bound()) {\n                filter_list->my_input_buffer->sema_V();\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        end_counter = new( task::allocate_root(context) ) internal::pipeline_root_task( *this );\n#else\n        end_counter = new( task::allocate_root() ) internal::pipeline_root_task( *this );\n#endif\n        // Start execution of tasks\n        task::spawn_root_and_wait( *end_counter );\n\n        if(has_thread_bound_filters) {\n            for(filter* f = filter_list->next_filter_in_pipeline; f; f=f->next_filter_in_pipeline) {\n                if(f->is_bound()) {\n                    f->my_input_buffer->sema_V(); // wake to end\n                }\n            }\n        }\n    }\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\nvoid pipeline::run( size_t max_number_of_live_tokens ) {\n    if( filter_list ) {\n        // Construct task group context with the exception propagation mode expected\n        // by the pipeline caller.\n        uintptr_t ctx_traits = filter_list->my_filter_mode & filter::exact_exception_propagation ?\n                task_group_context::default_traits :\n                task_group_context::default_traits & ~task_group_context::exact_exception;\n        task_group_context context(task_group_context::bound, ctx_traits);\n        run(max_number_of_live_tokens, context);\n    }\n}\n#endif // __TBB_TASK_GROUP_CONTEXT\n\nbool filter::has_more_work() {\n    __TBB_ASSERT(my_pipeline, NULL);\n    __TBB_ASSERT(my_input_buffer, \"has_more_work() called for filter with no input buffer\");\n    return (internal::tokendiff_t)(my_pipeline->token_counter - my_input_buffer->low_token) != 0;\n}\n\nfilter::~filter() {\n    if ( (my_filter_mode & version_mask) >= __TBB_PIPELINE_VERSION(3) ) {\n        if ( next_filter_in_pipeline != filter::not_in_pipeline() )\n            my_pipeline->remove_filter(*this);\n        else\n            __TBB_ASSERT( prev_filter_in_pipeline == filter::not_in_pipeline(), \"probably filter list is broken\" );\n    } else {\n        __TBB_ASSERT( next_filter_in_pipeline==filter::not_in_pipeline(), \"cannot destroy filter that is part of pipeline\" );\n    }\n}\n\nvoid\nfilter::set_end_of_input() {\n    __TBB_ASSERT(my_input_buffer, NULL);\n    __TBB_ASSERT(object_may_be_null(), NULL);\n    if(is_serial()) {\n        my_pipeline->end_of_input = true;\n    }\n    else {\n        __TBB_ASSERT(my_input_buffer->end_of_input_tls_allocated, NULL);\n        my_input_buffer->set_my_tls_end_of_input();\n    }\n}\n\nthread_bound_filter::result_type thread_bound_filter::process_item() {\n    return internal_process_item(true);\n}\n\nthread_bound_filter::result_type thread_bound_filter::try_process_item() {\n    return internal_process_item(false);\n}\n\nthread_bound_filter::result_type thread_bound_filter::internal_process_item(bool is_blocking) {\n    __TBB_ASSERT(my_pipeline != NULL,\"It's not supposed that process_item is called for a filter that is not in a pipeline.\");\n    internal::task_info info;\n    info.reset();\n\n    if( my_pipeline->end_of_input && !has_more_work() )\n        return end_of_stream;\n\n    if( !prev_filter_in_pipeline ) {\n        if( my_pipeline->end_of_input )\n            return end_of_stream;\n        while( my_pipeline->input_tokens == 0 ) {\n            if( !is_blocking )\n                return item_not_available;\n            my_input_buffer->sema_P();\n        }\n        info.my_object = (*this)(info.my_object);\n        if( info.my_object ) {\n            __TBB_ASSERT(my_pipeline->input_tokens > 0, \"Token failed in thread-bound filter\");\n            my_pipeline->input_tokens--;\n            if( is_ordered() ) {\n                info.my_token = my_pipeline->token_counter;\n                info.my_token_ready = true;\n            }\n            my_pipeline->token_counter++; // ideally, with relaxed semantics\n        } else {\n            my_pipeline->end_of_input = true;\n            return end_of_stream;\n        }\n    } else { /* this is not an input filter */\n        while( !my_input_buffer->has_item() ) {\n            if( !is_blocking ) {\n                return item_not_available;\n            }\n            my_input_buffer->sema_P();\n            if( my_pipeline->end_of_input && !has_more_work() ) {\n                return end_of_stream;\n            }\n        }\n        if( !my_input_buffer->return_item(info, /*advance*/true) ) {\n            __TBB_ASSERT(false,\"return_item failed\");\n        }\n        info.my_object = (*this)(info.my_object);\n    }\n    if( next_filter_in_pipeline ) {\n        if ( !next_filter_in_pipeline->my_input_buffer->put_token(info,/*force_put=*/true) ) {\n            __TBB_ASSERT(false, \"Couldn't put token after thread-bound buffer\");\n        }\n    } else {\n        size_t ntokens_avail = ++(my_pipeline->input_tokens);\n        if( my_pipeline->filter_list->is_bound() ) {\n            if( ntokens_avail == 1 ) {\n                my_pipeline->filter_list->my_input_buffer->sema_V();\n            }\n        }\n    }\n\n    return success;\n}\n\n} // tbb\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/private_server.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../rml/include/rml_tbb.h\"\n#include \"../rml/server/thread_monitor.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"scheduler_common.h\"\n#include \"governor.h\"\n#include \"tbb_misc.h\"\n\nusing rml::internal::thread_monitor;\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\ntypedef thread_monitor::handle_type thread_handle;\n\nclass private_server;\n\nclass private_worker: no_copy {\nprivate:\n    //! State in finite-state machine that controls the worker.\n    /** State diagram:\n        init --> starting --> normal\n          |         |           |\n          |         V           |\n          \\------> quit <------/\n      */\n    enum state_t {\n        //! *this is initialized\n        st_init,\n        //! *this has associated thread that is starting up.\n        st_starting,\n        //! Associated thread is doing normal life sequence.\n        st_normal,\n        //! Associated thread has ended normal life sequence and promises to never touch *this again.\n        st_quit\n    };\n    atomic<state_t> my_state;\n\n    //! Associated server\n    private_server& my_server;\n\n    //! Associated client\n    tbb_client& my_client;\n\n    //! index used for avoiding the 64K aliasing problem\n    const size_t my_index;\n\n    //! Monitor for sleeping when there is no work to do.\n    /** The invariant that holds for sleeping workers is:\n        \"my_slack<=0 && my_state==st_normal && I am on server's list of asleep threads\" */\n    thread_monitor my_thread_monitor;\n\n    //! Handle of the OS thread associated with this worker\n    thread_handle my_handle;\n\n    //! Link for list of workers that are sleeping or have no associated thread.\n    private_worker* my_next;\n\n    friend class private_server;\n\n    //! Actions executed by the associated thread\n    void run();\n\n    //! Wake up associated thread (or launch a thread if there is none)\n    void wake_or_launch();\n\n    //! Called by a thread (usually not the associated thread) to commence termination.\n    void start_shutdown();\n\n    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );\n\n    static void release_handle(thread_handle my_handle, bool join);\n\nprotected:\n    private_worker( private_server& server, tbb_client& client, const size_t i ) :\n        my_server(server), my_client(client), my_index(i),\n        my_thread_monitor(), my_handle(), my_next()\n    {\n        my_state = st_init;\n    }\n};\n\nstatic const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;\n\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about uninstantiable class\n    #pragma warning(push)\n    #pragma warning(disable:4510 4610)\n#endif\nclass padded_private_worker: public private_worker {\n    char pad[cache_line_size - sizeof(private_worker)%cache_line_size];\npublic:\n    padded_private_worker( private_server& server, tbb_client& client, const size_t i )\n    : private_worker(server,client,i) { suppress_unused_warning(pad); }\n};\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nclass private_server: public tbb_server, no_copy {\nprivate:\n    tbb_client& my_client;\n    //! Maximum number of threads to be created.\n    /** Threads are created lazily, so maximum might not actually be reached. */\n    const tbb_client::size_type my_n_thread;\n\n    //! Stack size for each thread. */\n    const size_t my_stack_size;\n\n    //! Number of jobs that could use their associated thread minus number of active threads.\n    /** If negative, indicates oversubscription.\n        If positive, indicates that more threads should run.\n        Can be lowered asynchronously, but must be raised only while holding my_asleep_list_mutex,\n        because raising it impacts the invariant for sleeping threads. */\n    atomic<int> my_slack;\n\n    //! Counter used to determine when to delete this.\n    atomic<int> my_ref_count;\n\n    padded_private_worker* my_thread_array;\n\n    //! List of workers that are asleep or committed to sleeping until notified by another thread.\n    tbb::atomic<private_worker*> my_asleep_list_root;\n\n    //! Protects my_asleep_list_root\n    typedef scheduler_mutex_type asleep_list_mutex_type;\n    asleep_list_mutex_type my_asleep_list_mutex;\n\n#if TBB_USE_ASSERT\n    atomic<int> my_net_slack_requests;\n#endif /* TBB_USE_ASSERT */\n\n    //! Wake up to two sleeping workers, if there are any sleeping.\n    /** The call is used to propagate a chain reaction where each thread wakes up two threads,\n        which in turn each wake up two threads, etc. */\n    void propagate_chain_reaction() {\n        // First test of a double-check idiom.  Second test is inside wake_some(0).\n        if( my_asleep_list_root )\n            wake_some(0);\n    }\n\n    //! Try to add t to list of sleeping workers\n    bool try_insert_in_asleep_list( private_worker& t );\n\n    //! Equivalent of adding additional_slack to my_slack and waking up to 2 threads if my_slack permits.\n    void wake_some( int additional_slack );\n\n    virtual ~private_server();\n\n    void remove_server_ref() {\n        if( --my_ref_count==0 ) {\n            my_client.acknowledge_close_connection();\n            this->~private_server();\n            tbb::cache_aligned_allocator<private_server>().deallocate( this, 1 );\n        }\n    }\n\n    friend class private_worker;\npublic:\n    private_server( tbb_client& client );\n\n    version_type version() const __TBB_override {\n        return 0;\n    }\n\n    void request_close_connection( bool /*exiting*/ ) __TBB_override {\n        for( size_t i=0; i<my_n_thread; ++i )\n            my_thread_array[i].start_shutdown();\n        remove_server_ref();\n    }\n\n    void yield() __TBB_override {__TBB_Yield();}\n\n    void independent_thread_number_changed( int ) __TBB_override {__TBB_ASSERT(false,NULL);}\n\n    unsigned default_concurrency() const __TBB_override { return governor::default_num_threads() - 1; }\n\n    void adjust_job_count_estimate( int delta ) __TBB_override;\n\n#if _WIN32||_WIN64\n    void register_master ( ::rml::server::execution_resource_t& ) __TBB_override {}\n    void unregister_master ( ::rml::server::execution_resource_t ) __TBB_override {}\n#endif /* _WIN32||_WIN64 */\n};\n\n//------------------------------------------------------------------------\n// Methods of private_worker\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned for TBB threads\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {\n    private_worker* self = static_cast<private_worker*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid private_worker::release_handle(thread_handle handle, bool join) {\n    if (join)\n        thread_monitor::join(handle);\n    else\n        thread_monitor::detach_thread(handle);\n}\n\nvoid private_worker::start_shutdown() {\n    state_t s;\n\n    do {\n        s = my_state;\n        __TBB_ASSERT( s!=st_quit, NULL );\n    } while( my_state.compare_and_swap( st_quit, s )!=s );\n    if( s==st_normal || s==st_starting ) {\n        // May have invalidated invariant for sleeping, so wake up the thread.\n        // Note that the notify() here occurs without maintaining invariants for my_slack.\n        // It does not matter, because my_state==st_quit overrides checking of my_slack.\n        my_thread_monitor.notify();\n        // Do not need release handle in st_init state,\n        // because in this case the thread wasn't started yet.\n        // For st_starting release is done at launch site.\n        if (s==st_normal)\n            release_handle(my_handle, governor::does_client_join_workers(my_client));\n    } else if( s==st_init ) {\n        // Perform action that otherwise would be performed by associated thread when it quits.\n        my_server.remove_server_ref();\n    }\n}\n\nvoid private_worker::run() {\n    my_server.propagate_chain_reaction();\n\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    ::rml::job& j = *my_client.create_one_job();\n    while( my_state!=st_quit ) {\n        if( my_server.my_slack>=0 ) {\n            my_client.process(j);\n        } else {\n            thread_monitor::cookie c;\n            // Prepare to wait\n            my_thread_monitor.prepare_wait(c);\n            // Check/set the invariant for sleeping\n            if( my_state!=st_quit && my_server.try_insert_in_asleep_list(*this) ) {\n                my_thread_monitor.commit_wait(c);\n                my_server.propagate_chain_reaction();\n            } else {\n                // Invariant broken\n                my_thread_monitor.cancel_wait();\n            }\n        }\n    }\n    my_client.cleanup(j);\n\n    ++my_server.my_slack;\n    my_server.remove_server_ref();\n}\n\ninline void private_worker::wake_or_launch() {\n    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if (st_starting != s) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle(my_handle, governor::does_client_join_workers(my_client));\n        }\n    }\n    else\n        my_thread_monitor.notify();\n}\n\n//------------------------------------------------------------------------\n// Methods of private_server\n//------------------------------------------------------------------------\nprivate_server::private_server( tbb_client& client ) :\n    my_client(client),\n    my_n_thread(client.max_job_count()),\n    my_stack_size(client.min_stack_size()),\n    my_thread_array(NULL)\n{\n    my_ref_count = my_n_thread+1;\n    my_slack = 0;\n#if TBB_USE_ASSERT\n    my_net_slack_requests = 0;\n#endif /* TBB_USE_ASSERT */\n    my_asleep_list_root = NULL;\n    my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread );\n    for( size_t i=0; i<my_n_thread; ++i ) {\n        private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i );\n        t->my_next = my_asleep_list_root;\n        my_asleep_list_root = t;\n    }\n}\n\nprivate_server::~private_server() {\n    __TBB_ASSERT( my_net_slack_requests==0, NULL );\n    for( size_t i=my_n_thread; i--; )\n        my_thread_array[i].~padded_private_worker();\n    tbb::cache_aligned_allocator<padded_private_worker>().deallocate( my_thread_array, my_n_thread );\n    tbb::internal::poison_pointer( my_thread_array );\n}\n\ninline bool private_server::try_insert_in_asleep_list( private_worker& t ) {\n    asleep_list_mutex_type::scoped_lock lock;\n    if( !lock.try_acquire(my_asleep_list_mutex) )\n        return false;\n    // Contribute to slack under lock so that if another takes that unit of slack,\n    // it sees us sleeping on the list and wakes us up.\n    int k = ++my_slack;\n    if( k<=0 ) {\n        t.my_next = my_asleep_list_root;\n        my_asleep_list_root = &t;\n        return true;\n    } else {\n        --my_slack;\n        return false;\n    }\n}\n\nvoid private_server::wake_some( int additional_slack ) {\n    __TBB_ASSERT( additional_slack>=0, NULL );\n    private_worker* wakee[2];\n    private_worker**w = wakee;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        while( my_asleep_list_root && w<wakee+2 ) {\n            if( additional_slack>0 ) {\n                if (additional_slack+my_slack<=0) // additional demand does not exceed surplus supply\n                    break;\n                --additional_slack;\n            } else {\n                // Chain reaction; Try to claim unit of slack\n                int old;\n                do {\n                    old = my_slack;\n                    if( old<=0 ) goto done;\n                } while( my_slack.compare_and_swap(old-1,old)!=old );\n            }\n            // Pop sleeping worker to combine with claimed unit of slack\n            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;\n        }\n        if( additional_slack ) {\n            // Contribute our unused slack to my_slack.\n            my_slack += additional_slack;\n        }\n    }\ndone:\n    while( w>wakee )\n        (*--w)->wake_or_launch();\n}\n\nvoid private_server::adjust_job_count_estimate( int delta ) {\n#if TBB_USE_ASSERT\n    my_net_slack_requests+=delta;\n#endif /* TBB_USE_ASSERT */\n    if( delta<0 ) {\n        my_slack+=delta;\n    } else if( delta>0 ) {\n        wake_some( delta );\n    }\n}\n\n//! Factory method called from task.cpp to create a private_server.\ntbb_server* make_private_server( tbb_client& client ) {\n    return new( tbb::cache_aligned_allocator<private_server>().allocate(1) ) private_server(client);\n}\n\n} // namespace rml\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/queuing_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb_misc.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\n\nusing namespace internal;\n\n//! A method to acquire queuing_mutex lock\nvoid queuing_mutex::scoped_lock::acquire( queuing_mutex& m )\n{\n    __TBB_ASSERT( !this->mutex, \"scoped_lock is already holding a mutex\");\n\n    // Must set all fields before the fetch_and_store, because once the\n    // fetch_and_store executes, *this becomes accessible to other threads.\n    mutex = &m;\n    next  = NULL;\n    going = 0;\n\n    // The fetch_and_store must have release semantics, because we are\n    // \"sending\" the fields initialized above to other processors.\n    scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);\n    if( pred ) {\n        ITT_NOTIFY(sync_prepare, mutex);\n#if TBB_USE_ASSERT\n        __TBB_control_consistency_helper(); // on \"m.q_tail\"\n        __TBB_ASSERT( !pred->next, \"the predecessor has another successor!\");\n#endif\n        pred->next = this;\n        spin_wait_while_eq( going, 0ul );\n    }\n    ITT_NOTIFY(sync_acquired, mutex);\n\n    // Force acquire so that user's critical section receives correct values\n    // from processor that was previously in the user's critical section.\n    __TBB_load_with_acquire(going);\n}\n\n//! A method to acquire queuing_mutex if it is free\nbool queuing_mutex::scoped_lock::try_acquire( queuing_mutex& m )\n{\n    __TBB_ASSERT( !this->mutex, \"scoped_lock is already holding a mutex\");\n\n    // Must set all fields before the fetch_and_store, because once the\n    // fetch_and_store executes, *this becomes accessible to other threads.\n    next  = NULL;\n    going = 0;\n\n    // The CAS must have release semantics, because we are\n    // \"sending\" the fields initialized above to other processors.\n    if( m.q_tail.compare_and_swap<tbb::release>(this, NULL) )\n        return false;\n\n    // Force acquire so that user's critical section receives correct values\n    // from processor that was previously in the user's critical section.\n    __TBB_load_with_acquire(going);\n    mutex = &m;\n    ITT_NOTIFY(sync_acquired, mutex);\n    return true;\n}\n\n//! A method to release queuing_mutex lock\nvoid queuing_mutex::scoped_lock::release( )\n{\n    __TBB_ASSERT(this->mutex!=NULL, \"no lock acquired\");\n\n    ITT_NOTIFY(sync_releasing, mutex);\n    if( !next ) {\n        if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {\n            // this was the only item in the queue, and the queue is now empty.\n            goto done;\n        }\n        // Someone in the queue\n        spin_wait_while_eq( next, (scoped_lock*)0 );\n    }\n    __TBB_ASSERT(next,NULL);\n    __TBB_store_with_release(next->going, 1);\ndone:\n    initialize();\n}\n\nvoid queuing_mutex::internal_construct() {\n    ITT_SYNC_CREATE(this, _T(\"tbb::queuing_mutex\"), _T(\"\"));\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/queuing_rw_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/** Before making any changes in the implementation, please emulate algorithmic changes\n    with SPIN tool using <TBB directory>/tools/spin_models/ReaderWriterMutex.pml.\n    There could be some code looking as \"can be restructured\" but its structure does matter! */\n\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"itt_notify.h\"\n\n\nnamespace tbb {\n\nusing namespace internal;\n\n//! Flag bits in a state_t that specify information about a locking request.\nenum state_t_flags {\n    STATE_NONE                   = 0,\n    STATE_WRITER                 = 1<<0,\n    STATE_READER                 = 1<<1,\n    STATE_READER_UNBLOCKNEXT     = 1<<2,\n    STATE_ACTIVEREADER           = 1<<3,\n    STATE_UPGRADE_REQUESTED      = 1<<4,\n    STATE_UPGRADE_WAITING        = 1<<5,\n    STATE_UPGRADE_LOSER          = 1<<6,\n    STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,\n    STATE_COMBINED_READER        = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,\n    STATE_COMBINED_UPGRADING     = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER\n};\n\nconst unsigned char RELEASED = 0;\nconst unsigned char ACQUIRED = 1;\n\ninline bool queuing_rw_mutex::scoped_lock::try_acquire_internal_lock()\n{\n    return as_atomic(my_internal_lock).compare_and_swap<tbb::acquire>(ACQUIRED,RELEASED) == RELEASED;\n}\n\ninline void queuing_rw_mutex::scoped_lock::acquire_internal_lock()\n{\n    // Usually, we would use the test-test-and-set idiom here, with exponential backoff.\n    // But so far, experiments indicate there is no value in doing so here.\n    while( !try_acquire_internal_lock() ) {\n        __TBB_Pause(1);\n    }\n}\n\ninline void queuing_rw_mutex::scoped_lock::release_internal_lock()\n{\n    __TBB_store_with_release(my_internal_lock,RELEASED);\n}\n\ninline void queuing_rw_mutex::scoped_lock::wait_for_release_of_internal_lock()\n{\n    spin_wait_until_eq(my_internal_lock, RELEASED);\n}\n\ninline void queuing_rw_mutex::scoped_lock::unblock_or_wait_on_internal_lock( uintptr_t flag ) {\n    if( flag )\n        wait_for_release_of_internal_lock();\n    else\n        release_internal_lock();\n}\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (push)\n    #pragma warning (disable: 4311 4312)\n#endif\n\n//! A view of a T* with additional functionality for twiddling low-order bits.\ntemplate<typename T>\nclass tricky_atomic_pointer: no_copy {\npublic:\n    typedef typename atomic_selector<sizeof(T*)>::word word;\n\n    template<memory_semantics M>\n    static T* fetch_and_add( T* volatile * location, word addend ) {\n        return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_add(location, addend) );\n    }\n    template<memory_semantics M>\n    static T* fetch_and_store( T* volatile * location, T* value ) {\n        return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_store(location, reinterpret_cast<word>(value)) );\n    }\n    template<memory_semantics M>\n    static T* compare_and_swap( T* volatile * location, T* value, T* comparand ) {\n        return reinterpret_cast<T*>(\n                 atomic_traits<sizeof(T*),M>::compare_and_swap(location, reinterpret_cast<word>(value),\n                                                              reinterpret_cast<word>(comparand))\n               );\n    }\n\n    T* & ref;\n    tricky_atomic_pointer( T*& original ) : ref(original) {};\n    tricky_atomic_pointer( T* volatile & original ) : ref(original) {};\n    T* operator&( word operand2 ) const {\n        return reinterpret_cast<T*>( reinterpret_cast<word>(ref) & operand2 );\n    }\n    T* operator|( word operand2 ) const {\n        return reinterpret_cast<T*>( reinterpret_cast<word>(ref) | operand2 );\n    }\n};\n\ntypedef tricky_atomic_pointer<queuing_rw_mutex::scoped_lock> tricky_pointer;\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (pop)\n#endif\n\n//! Mask for low order bit of a pointer.\nstatic const tricky_pointer::word FLAG = 0x1;\n\ninline\nuintptr_t get_flag( queuing_rw_mutex::scoped_lock* ptr ) {\n    return uintptr_t(ptr) & FLAG;\n}\n\n//------------------------------------------------------------------------\n// Methods of queuing_rw_mutex::scoped_lock\n//------------------------------------------------------------------------\n\n//! A method to acquire queuing_rw_mutex lock\nvoid queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )\n{\n    __TBB_ASSERT( !my_mutex, \"scoped_lock is already holding a mutex\");\n\n    // Must set all fields before the fetch_and_store, because once the\n    // fetch_and_store executes, *this becomes accessible to other threads.\n    my_mutex = &m;\n    __TBB_store_relaxed(my_prev , (scoped_lock*)0);\n    __TBB_store_relaxed(my_next , (scoped_lock*)0);\n    __TBB_store_relaxed(my_going, 0);\n    my_state = state_t(write ? STATE_WRITER : STATE_READER);\n    my_internal_lock = RELEASED;\n\n    queuing_rw_mutex::scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);\n\n    if( write ) {       // Acquiring for write\n\n        if( pred ) {\n            ITT_NOTIFY(sync_prepare, my_mutex);\n            pred = tricky_pointer(pred) & ~FLAG;\n            __TBB_ASSERT( !( uintptr_t(pred) & FLAG ), \"use of corrupted pointer!\" );\n#if TBB_USE_ASSERT\n            __TBB_control_consistency_helper(); // on \"m.q_tail\"\n            __TBB_ASSERT( !__TBB_load_relaxed(pred->my_next), \"the predecessor has another successor!\");\n#endif\n           __TBB_store_with_release(pred->my_next,this);\n            spin_wait_until_eq(my_going, 1);\n        }\n\n    } else {            // Acquiring for read\n#if DO_ITT_NOTIFY\n        bool sync_prepare_done = false;\n#endif\n        if( pred ) {\n            unsigned short pred_state;\n            __TBB_ASSERT( !__TBB_load_relaxed(my_prev), \"the predecessor is already set\" );\n            if( uintptr_t(pred) & FLAG ) {\n                /* this is only possible if pred is an upgrading reader and it signals us to wait */\n                pred_state = STATE_UPGRADE_WAITING;\n                pred = tricky_pointer(pred) & ~FLAG;\n            } else {\n                // Load pred->my_state now, because once pred->my_next becomes\n                // non-NULL, we must assume that *pred might be destroyed.\n                pred_state = pred->my_state.compare_and_swap<tbb::acquire>(STATE_READER_UNBLOCKNEXT, STATE_READER);\n            }\n            __TBB_store_relaxed(my_prev, pred);\n            __TBB_ASSERT( !( uintptr_t(pred) & FLAG ), \"use of corrupted pointer!\" );\n#if TBB_USE_ASSERT\n            __TBB_control_consistency_helper(); // on \"m.q_tail\"\n            __TBB_ASSERT( !__TBB_load_relaxed(pred->my_next), \"the predecessor has another successor!\");\n#endif\n           __TBB_store_with_release(pred->my_next,this);\n            if( pred_state != STATE_ACTIVEREADER ) {\n#if DO_ITT_NOTIFY\n                sync_prepare_done = true;\n                ITT_NOTIFY(sync_prepare, my_mutex);\n#endif\n                spin_wait_until_eq(my_going, 1);\n            }\n        }\n\n        // The protected state must have been acquired here before it can be further released to any other reader(s):\n        unsigned short old_state = my_state.compare_and_swap<tbb::acquire>(STATE_ACTIVEREADER, STATE_READER);\n        if( old_state!=STATE_READER ) {\n#if DO_ITT_NOTIFY\n            if( !sync_prepare_done )\n                ITT_NOTIFY(sync_prepare, my_mutex);\n#endif\n            // Failed to become active reader -> need to unblock the next waiting reader first\n            __TBB_ASSERT( my_state==STATE_READER_UNBLOCKNEXT, \"unexpected state\" );\n            spin_wait_while_eq(my_next, (scoped_lock*)NULL);\n            /* my_state should be changed before unblocking the next otherwise it might finish\n               and another thread can get our old state and left blocked */\n            my_state = STATE_ACTIVEREADER;\n           __TBB_store_with_release(my_next->my_going,1);\n        }\n    }\n\n    ITT_NOTIFY(sync_acquired, my_mutex);\n\n    // Force acquire so that user's critical section receives correct values\n    // from processor that was previously in the user's critical section.\n    __TBB_load_with_acquire(my_going);\n}\n\n//! A method to acquire queuing_rw_mutex if it is free\nbool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write )\n{\n    __TBB_ASSERT( !my_mutex, \"scoped_lock is already holding a mutex\");\n\n    if( load<relaxed>(m.q_tail) )\n        return false; // Someone already took the lock\n\n    // Must set all fields before the fetch_and_store, because once the\n    // fetch_and_store executes, *this becomes accessible to other threads.\n    __TBB_store_relaxed(my_prev, (scoped_lock*)0);\n    __TBB_store_relaxed(my_next, (scoped_lock*)0);\n    __TBB_store_relaxed(my_going, 0); // TODO: remove dead assignment?\n    my_state = state_t(write ? STATE_WRITER : STATE_ACTIVEREADER);\n    my_internal_lock = RELEASED;\n\n    // The CAS must have release semantics, because we are\n    // \"sending\" the fields initialized above to other processors.\n    if( m.q_tail.compare_and_swap<tbb::release>(this, NULL) )\n        return false; // Someone already took the lock\n    // Force acquire so that user's critical section receives correct values\n    // from processor that was previously in the user's critical section.\n    __TBB_load_with_acquire(my_going);\n    my_mutex = &m;\n    ITT_NOTIFY(sync_acquired, my_mutex);\n    return true;\n}\n\n//! A method to release queuing_rw_mutex lock\nvoid queuing_rw_mutex::scoped_lock::release( )\n{\n    __TBB_ASSERT(my_mutex!=NULL, \"no lock acquired\");\n\n    ITT_NOTIFY(sync_releasing, my_mutex);\n\n    if( my_state == STATE_WRITER ) { // Acquired for write\n\n        // The logic below is the same as \"writerUnlock\", but elides\n        // \"return\" from the middle of the routine.\n        // In the statement below, acquire semantics of reading my_next is required\n        // so that following operations with fields of my_next are safe.\n        scoped_lock* n = __TBB_load_with_acquire(my_next);\n        if( !n ) {\n            if( this == my_mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {\n                // this was the only item in the queue, and the queue is now empty.\n                goto done;\n            }\n            spin_wait_while_eq( my_next, (scoped_lock*)NULL );\n            n = __TBB_load_with_acquire(my_next);\n        }\n        __TBB_store_relaxed(n->my_going, 2); // protect next queue node from being destroyed too early\n        if( n->my_state==STATE_UPGRADE_WAITING ) {\n            // the next waiting for upgrade means this writer was upgraded before.\n            acquire_internal_lock();\n            queuing_rw_mutex::scoped_lock* tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->my_prev), NULL);\n            n->my_state = STATE_UPGRADE_LOSER;\n            __TBB_store_with_release(n->my_going,1);\n            unblock_or_wait_on_internal_lock(get_flag(tmp));\n        } else {\n            __TBB_ASSERT( my_state & (STATE_COMBINED_WAITINGREADER | STATE_WRITER), \"unexpected state\" );\n            __TBB_ASSERT( !( uintptr_t(__TBB_load_relaxed(n->my_prev)) & FLAG ), \"use of corrupted pointer!\" );\n            __TBB_store_relaxed(n->my_prev, (scoped_lock*)0);\n            __TBB_store_with_release(n->my_going,1);\n        }\n\n    } else { // Acquired for read\n\n        queuing_rw_mutex::scoped_lock *tmp = NULL;\nretry:\n        // Addition to the original paper: Mark my_prev as in use\n        queuing_rw_mutex::scoped_lock *pred = tricky_pointer::fetch_and_add<tbb::acquire>(&my_prev, FLAG);\n\n        if( pred ) {\n            if( !(pred->try_acquire_internal_lock()) )\n            {\n                // Failed to acquire the lock on pred. The predecessor either unlinks or upgrades.\n                // In the second case, it could or could not know my \"in use\" flag - need to check\n                tmp = tricky_pointer::compare_and_swap<tbb::release>(&my_prev, pred, tricky_pointer(pred) | FLAG );\n                if( !(uintptr_t(tmp) & FLAG) ) {\n                    // Wait for the predecessor to change my_prev (e.g. during unlink)\n                    spin_wait_while_eq( my_prev, tricky_pointer(pred)|FLAG );\n                    // Now owner of pred is waiting for _us_ to release its lock\n                    pred->release_internal_lock();\n                }\n                // else the \"in use\" flag is back -> the predecessor didn't get it and will release itself; nothing to do\n\n                tmp = NULL;\n                goto retry;\n            }\n            __TBB_ASSERT(pred && pred->my_internal_lock==ACQUIRED, \"predecessor's lock is not acquired\");\n            __TBB_store_relaxed(my_prev, pred);\n            acquire_internal_lock();\n\n            __TBB_store_with_release(pred->my_next,static_cast<scoped_lock *>(NULL));\n\n            if( !__TBB_load_relaxed(my_next) && this != my_mutex->q_tail.compare_and_swap<tbb::release>(pred, this) ) {\n                spin_wait_while_eq( my_next, (void*)NULL );\n            }\n            __TBB_ASSERT( !get_flag(__TBB_load_relaxed(my_next)), \"use of corrupted pointer\" );\n\n            // ensure acquire semantics of reading 'my_next'\n            if( scoped_lock *const l_next = __TBB_load_with_acquire(my_next) ) { // I->next != nil, TODO: rename to n after clearing up and adapting the n in the comment two lines below\n                // Equivalent to I->next->prev = I->prev but protected against (prev[n]&FLAG)!=0\n                tmp = tricky_pointer::fetch_and_store<tbb::release>(&(l_next->my_prev), pred);\n                // I->prev->next = I->next;\n                __TBB_ASSERT(__TBB_load_relaxed(my_prev)==pred, NULL);\n                __TBB_store_with_release(pred->my_next, my_next);\n            }\n            // Safe to release in the order opposite to acquiring which makes the code simpler\n            pred->release_internal_lock();\n\n        } else { // No predecessor when we looked\n            acquire_internal_lock();  // \"exclusiveLock(&I->EL)\"\n            scoped_lock* n = __TBB_load_with_acquire(my_next);\n            if( !n ) {\n                if( this != my_mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {\n                    spin_wait_while_eq( my_next, (scoped_lock*)NULL );\n                    n = __TBB_load_relaxed(my_next);\n                } else {\n                    goto unlock_self;\n                }\n            }\n            __TBB_store_relaxed(n->my_going, 2); // protect next queue node from being destroyed too early\n            tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->my_prev), NULL);\n            __TBB_store_with_release(n->my_going,1);\n        }\nunlock_self:\n        unblock_or_wait_on_internal_lock(get_flag(tmp));\n    }\ndone:\n    spin_wait_while_eq( my_going, 2 );\n\n    initialize();\n}\n\nbool queuing_rw_mutex::scoped_lock::downgrade_to_reader()\n{\n    __TBB_ASSERT( my_state==STATE_WRITER, \"no sense to downgrade a reader\" );\n\n    ITT_NOTIFY(sync_releasing, my_mutex);\n    my_state = STATE_READER;\n    if( ! __TBB_load_relaxed(my_next) ) {\n        // the following load of q_tail must not be reordered with setting STATE_READER above\n        if( this==my_mutex->q_tail.load<full_fence>() ) {\n            unsigned short old_state = my_state.compare_and_swap<tbb::release>(STATE_ACTIVEREADER, STATE_READER);\n            if( old_state==STATE_READER )\n                return true; // Downgrade completed\n        }\n        /* wait for the next to register */\n        spin_wait_while_eq( my_next, (void*)NULL );\n    }\n    scoped_lock *const n = __TBB_load_with_acquire(my_next);\n    __TBB_ASSERT( n, \"still no successor at this point!\" );\n    if( n->my_state & STATE_COMBINED_WAITINGREADER )\n        __TBB_store_with_release(n->my_going,1);\n    else if( n->my_state==STATE_UPGRADE_WAITING )\n        // the next waiting for upgrade means this writer was upgraded before.\n        n->my_state = STATE_UPGRADE_LOSER;\n    my_state = STATE_ACTIVEREADER;\n    return true;\n}\n\nbool queuing_rw_mutex::scoped_lock::upgrade_to_writer()\n{\n    __TBB_ASSERT( my_state==STATE_ACTIVEREADER, \"only active reader can be upgraded\" );\n\n    queuing_rw_mutex::scoped_lock * tmp;\n    queuing_rw_mutex::scoped_lock * me = this;\n\n    ITT_NOTIFY(sync_releasing, my_mutex);\n    my_state = STATE_UPGRADE_REQUESTED;\nrequested:\n    __TBB_ASSERT( !(uintptr_t(__TBB_load_relaxed(my_next)) & FLAG), \"use of corrupted pointer!\" );\n    acquire_internal_lock();\n    if( this != my_mutex->q_tail.compare_and_swap<tbb::release>(tricky_pointer(me)|FLAG, this) ) {\n        spin_wait_while_eq( my_next, (void*)NULL );\n        queuing_rw_mutex::scoped_lock * n;\n        n = tricky_pointer::fetch_and_add<tbb::acquire>(&my_next, FLAG);\n        unsigned short n_state = n->my_state;\n        /* the next reader can be blocked by our state. the best thing to do is to unblock it */\n        if( n_state & STATE_COMBINED_WAITINGREADER )\n            __TBB_store_with_release(n->my_going,1);\n        tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->my_prev), this);\n        unblock_or_wait_on_internal_lock(get_flag(tmp));\n        if( n_state & (STATE_COMBINED_READER | STATE_UPGRADE_REQUESTED) ) {\n            // save n|FLAG for simplicity of following comparisons\n            tmp = tricky_pointer(n)|FLAG;\n            for( atomic_backoff b; __TBB_load_relaxed(my_next)==tmp; b.pause() ) {\n                if( my_state & STATE_COMBINED_UPGRADING ) {\n                    if( __TBB_load_with_acquire(my_next)==tmp )\n                        __TBB_store_relaxed(my_next, n);\n                    goto waiting;\n                }\n            }\n            __TBB_ASSERT(__TBB_load_relaxed(my_next) != (tricky_pointer(n)|FLAG), NULL);\n            goto requested;\n        } else {\n            __TBB_ASSERT( n_state & (STATE_WRITER | STATE_UPGRADE_WAITING), \"unexpected state\");\n            __TBB_ASSERT( (tricky_pointer(n)|FLAG) == __TBB_load_relaxed(my_next), NULL);\n            __TBB_store_relaxed(my_next, n);\n        }\n    } else {\n        /* We are in the tail; whoever comes next is blocked by q_tail&FLAG */\n        release_internal_lock();\n    } // if( this != my_mutex->q_tail... )\n    my_state.compare_and_swap<tbb::acquire>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);\n\nwaiting:\n    __TBB_ASSERT( !( intptr_t(__TBB_load_relaxed(my_next)) & FLAG ), \"use of corrupted pointer!\" );\n    __TBB_ASSERT( my_state & STATE_COMBINED_UPGRADING, \"wrong state at upgrade waiting_retry\" );\n    __TBB_ASSERT( me==this, NULL );\n    ITT_NOTIFY(sync_prepare, my_mutex);\n    /* if no one was blocked by the \"corrupted\" q_tail, turn it back */\n    my_mutex->q_tail.compare_and_swap<tbb::release>( this, tricky_pointer(me)|FLAG );\n    queuing_rw_mutex::scoped_lock * pred;\n    pred = tricky_pointer::fetch_and_add<tbb::acquire>(&my_prev, FLAG);\n    if( pred ) {\n        bool success = pred->try_acquire_internal_lock();\n        pred->my_state.compare_and_swap<tbb::release>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);\n        if( !success ) {\n            tmp = tricky_pointer::compare_and_swap<tbb::release>(&my_prev, pred, tricky_pointer(pred)|FLAG );\n            if( uintptr_t(tmp) & FLAG ) {\n                spin_wait_while_eq(my_prev, pred);\n                pred = __TBB_load_relaxed(my_prev);\n            } else {\n                spin_wait_while_eq( my_prev, tricky_pointer(pred)|FLAG );\n                pred->release_internal_lock();\n            }\n        } else {\n            __TBB_store_relaxed(my_prev, pred);\n            pred->release_internal_lock();\n            spin_wait_while_eq(my_prev, pred);\n            pred = __TBB_load_relaxed(my_prev);\n        }\n        if( pred )\n            goto waiting;\n    } else {\n        // restore the corrupted my_prev field for possible further use (e.g. if downgrade back to reader)\n        __TBB_store_relaxed(my_prev, pred);\n    }\n    __TBB_ASSERT( !pred && !__TBB_load_relaxed(my_prev), NULL );\n\n    // additional lifetime issue prevention checks\n    // wait for the successor to finish working with my fields\n    wait_for_release_of_internal_lock();\n    // now wait for the predecessor to finish working with my fields\n    spin_wait_while_eq( my_going, 2 );\n\n    // Acquire critical section indirectly from previous owner or directly from predecessor (TODO: not clear).\n    __TBB_control_consistency_helper(); // on either \"my_mutex->q_tail\" or \"my_going\" (TODO: not clear)\n\n    bool result = ( my_state != STATE_UPGRADE_LOSER );\n    my_state = STATE_WRITER;\n    __TBB_store_relaxed(my_going, 1);\n\n    ITT_NOTIFY(sync_acquired, my_mutex);\n    return result;\n}\n\nvoid queuing_rw_mutex::internal_construct() {\n    ITT_SYNC_CREATE(this, _T(\"tbb::queuing_rw_mutex\"), _T(\"\"));\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/reader_writer_lock.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/reader_writer_lock.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"itt_notify.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\nnamespace interface5 {\n\nconst uintptr_t WFLAG1 = 0x1;  // writer interested or active\nconst uintptr_t WFLAG2 = 0x2;  // writers interested, no entering readers\nconst uintptr_t RFLAG = 0x4;   // reader interested but not active\nconst uintptr_t RC_INCR = 0x8; // to adjust reader count\n\n\n// Perform an atomic bitwise-OR on the operand, and return its previous value.\ninline uintptr_t fetch_and_or(atomic<uintptr_t>& operand, uintptr_t value) {\n    for (tbb::internal::atomic_backoff b;;b.pause()) {\n        uintptr_t old = operand;\n        uintptr_t result = operand.compare_and_swap(old|value, old);\n        if (result==old) return result;\n    }\n}\n\n// Perform an atomic bitwise-AND on the operand, and return its previous value.\ninline uintptr_t fetch_and_and(atomic<uintptr_t>& operand, uintptr_t value) {\n    for (tbb::internal::atomic_backoff b;;b.pause()) {\n        uintptr_t old = operand;\n        uintptr_t result = operand.compare_and_swap(old&value, old);\n        if (result==old) return result;\n    }\n}\n\n//! Spin WHILE the value at the location is greater than or equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_while_geq( const volatile T& location, U value ) {\n    tbb::internal::atomic_backoff backoff;\n    while( location>=value ) backoff.pause();\n}\n\n//! Spin UNTIL (location & value) is true.\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_until_and( const volatile T& location, U value ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !(location & value) ) backoff.pause();\n}\n\n\nvoid reader_writer_lock::internal_construct() {\n    reader_head = NULL;\n    writer_head = NULL;\n    writer_tail = NULL;\n    rdr_count_and_flags = 0;\n    my_current_writer = tbb_thread::id();\n#if TBB_USE_THREADING_TOOLS\n    ITT_SYNC_CREATE(this, _T(\"tbb::reader_writer_lock\"), _T(\"\"));\n#endif /* TBB_USE_THREADING_TOOLS */\n}\n\nvoid reader_writer_lock::internal_destroy() {\n    __TBB_ASSERT(rdr_count_and_flags==0, \"reader_writer_lock destroyed with pending readers/writers.\");\n    __TBB_ASSERT(reader_head==NULL, \"reader_writer_lock destroyed with pending readers.\");\n    __TBB_ASSERT(writer_tail==NULL, \"reader_writer_lock destroyed with pending writers.\");\n    __TBB_ASSERT(writer_head==NULL, \"reader_writer_lock destroyed with pending/active writers.\");\n}\n\n// Acquires the reader_writer_lock for write.    If the lock is currently held in write\n// mode by another context, the writer will block by spinning on a local variable.\n// Throws exception improper_lock if the context tries to acquire a\n// reader_writer_lock that it already has write ownership of.\nvoid reader_writer_lock::lock() {\n    if (is_current_writer()) { // recursive lock attempt\n        // we don't support recursive writer locks; throw exception\n        tbb::internal::throw_exception(tbb::internal::eid_improper_lock);\n    }\n    else {\n        scoped_lock *a_writer_lock = new scoped_lock();\n        (void) start_write(a_writer_lock);\n    }\n}\n\n// Tries to acquire the reader_writer_lock for write.    This function does not block.\n// Return Value: True or false, depending on whether the lock is acquired or not.\n// If the lock is already held by this acquiring context, try_lock() returns false.\nbool reader_writer_lock::try_lock() {\n    if (is_current_writer()) { // recursive lock attempt\n        return false;\n    }\n    else {\n        scoped_lock *a_writer_lock = new scoped_lock();\n        a_writer_lock->status = waiting_nonblocking;\n        return start_write(a_writer_lock);\n    }\n}\n\nbool reader_writer_lock::start_write(scoped_lock *I) {\n    tbb_thread::id id = this_tbb_thread::get_id();\n    scoped_lock *pred = NULL;\n    if (I->status == waiting_nonblocking) {\n        if ((pred = writer_tail.compare_and_swap(I, NULL)) != NULL) {\n            delete I;\n            return false;\n        }\n    }\n    else {\n        ITT_NOTIFY(sync_prepare, this);\n        pred = writer_tail.fetch_and_store(I);\n    }\n    if (pred)\n        pred->next = I;\n    else {\n        set_next_writer(I);\n        if (I->status == waiting_nonblocking) {\n            if (I->next) { // potentially more writers\n                set_next_writer(I->next);\n            }\n            else { // no more writers\n                writer_head.fetch_and_store(NULL);\n                if (I != writer_tail.compare_and_swap(NULL, I)) { // an incoming writer is in the process of being added\n                    spin_wait_while_eq(I->next, (scoped_lock *)NULL);  // wait for new writer to be added\n                    __TBB_ASSERT(I->next, \"There should be a node following the last writer.\");\n                    set_next_writer(I->next);\n                }\n            }\n            delete I;\n            return false;\n        }\n    }\n    spin_wait_while_eq(I->status, waiting);\n    ITT_NOTIFY(sync_acquired, this);\n    my_current_writer = id;\n    return true;\n}\n\nvoid reader_writer_lock::set_next_writer(scoped_lock *W) {\n    writer_head = W;\n    if (W->status == waiting_nonblocking) {\n        if (rdr_count_and_flags.compare_and_swap(WFLAG1+WFLAG2, 0) == 0) {\n            W->status = active;\n        }\n    }\n    else {\n        if (fetch_and_or(rdr_count_and_flags, WFLAG1) & RFLAG) { // reader present\n            spin_wait_until_and(rdr_count_and_flags, WFLAG2); // block until readers set WFLAG2\n        }\n        else { // no reader in timing window\n            __TBB_AtomicOR(&rdr_count_and_flags, WFLAG2);\n        }\n        spin_wait_while_geq(rdr_count_and_flags, RC_INCR); // block until readers finish\n        W->status = active;\n   }\n}\n\n// Acquires the reader_writer_lock for read.    If the lock is currently held by a writer,\n// this reader will block and wait until the writers are done.\n// Throws exception improper_lock when the context tries to acquire a reader_writer_lock\n// that it already has write ownership of.\nvoid reader_writer_lock::lock_read() {\n    if (is_current_writer()) { // recursive lock attempt\n        // we don't support writer->reader downgrade; throw exception\n        tbb::internal::throw_exception(tbb::internal::eid_improper_lock);\n    }\n    else {\n        scoped_lock_read a_reader_lock;\n        start_read(&a_reader_lock);\n    }\n}\n\n// Tries to acquire the reader_writer_lock for read.    This function does not block.\n// Return Value: True or false, depending on whether the lock is acquired or not.\nbool reader_writer_lock::try_lock_read() {\n    if (is_current_writer()) { // recursive lock attempt\n        return false;\n    }\n    else {\n        if (rdr_count_and_flags.fetch_and_add(RC_INCR) & (WFLAG1+WFLAG2)) { // writers present\n            rdr_count_and_flags -= RC_INCR;\n            return false;\n        }\n        else { // no writers\n            ITT_NOTIFY(sync_acquired, this);\n            return true;\n        }\n    }\n}\n\nvoid reader_writer_lock::start_read(scoped_lock_read *I) {\n    ITT_NOTIFY(sync_prepare, this);\n    I->next = reader_head.fetch_and_store(I);\n    if (!I->next) { // first arriving reader in my group; set RFLAG, test writer flags\n        // unblock and/or update statuses of non-blocking readers\n        if (!(fetch_and_or(rdr_count_and_flags, RFLAG) & (WFLAG1+WFLAG2))) { // no writers\n            unblock_readers();\n        }\n    }\n    __TBB_ASSERT(I->status == waiting || I->status == active, \"Lock requests should be waiting or active before blocking.\");\n    spin_wait_while_eq(I->status, waiting); // block\n    if (I->next) {\n        __TBB_ASSERT(I->next->status == waiting, NULL);\n        rdr_count_and_flags += RC_INCR;\n        I->next->status = active; // wake successor\n    }\n    ITT_NOTIFY(sync_acquired, this);\n}\n\nvoid reader_writer_lock::unblock_readers() {\n    // clear rdr interest flag, increment rdr count\n    __TBB_ASSERT(rdr_count_and_flags&RFLAG, NULL);\n    rdr_count_and_flags += RC_INCR-RFLAG;\n    __TBB_ASSERT(rdr_count_and_flags >= RC_INCR, NULL);\n    // indicate clear of window\n    if (rdr_count_and_flags & WFLAG1 && !(rdr_count_and_flags & WFLAG2)) {\n        __TBB_AtomicOR(&rdr_count_and_flags, WFLAG2);\n    }\n    // unblock waiting readers\n    scoped_lock_read *head = reader_head.fetch_and_store(NULL);\n    __TBB_ASSERT(head, NULL);\n    __TBB_ASSERT(head->status == waiting, NULL);\n    head->status = active;\n}\n\n// Releases the reader_writer_lock\nvoid reader_writer_lock::unlock() {\n    if( my_current_writer!=tbb_thread::id() ) {\n        // A writer owns the lock\n        __TBB_ASSERT(is_current_writer(), \"caller of reader_writer_lock::unlock() does not own the lock.\");\n        __TBB_ASSERT(writer_head, NULL);\n        __TBB_ASSERT(writer_head->status==active, NULL);\n        scoped_lock *a_writer_lock = writer_head;\n        end_write(a_writer_lock);\n        __TBB_ASSERT(a_writer_lock != writer_head, \"Internal error: About to turn writer_head into dangling reference.\");\n        delete a_writer_lock;\n    } else {\n        end_read();\n    }\n}\n\nvoid reader_writer_lock::end_write(scoped_lock *I) {\n    __TBB_ASSERT(I==writer_head, \"Internal error: can't unlock a thread that is not holding the lock.\");\n    my_current_writer = tbb_thread::id();\n    ITT_NOTIFY(sync_releasing, this);\n    if (I->next) { // potentially more writers\n        writer_head = I->next;\n        writer_head->status = active;\n    }\n    else { // No more writers; clear writer flag, test reader interest flag\n        __TBB_ASSERT(writer_head, NULL);\n        if (fetch_and_and(rdr_count_and_flags, ~(WFLAG1+WFLAG2)) & RFLAG) {\n            unblock_readers();\n        }\n        writer_head.fetch_and_store(NULL);\n        if (I != writer_tail.compare_and_swap(NULL, I)) { // an incoming writer is in the process of being added\n            spin_wait_while_eq(I->next, (scoped_lock *)NULL);  // wait for new writer to be added\n            __TBB_ASSERT(I->next, \"There should be a node following the last writer.\");\n            set_next_writer(I->next);\n        }\n    }\n}\n\nvoid reader_writer_lock::end_read() {\n    ITT_NOTIFY(sync_releasing, this);\n    __TBB_ASSERT(rdr_count_and_flags >= RC_INCR, \"unlock() called but no readers hold the lock.\");\n    rdr_count_and_flags -= RC_INCR;\n}\n\ninline bool reader_writer_lock::is_current_writer() {\n    return my_current_writer==this_tbb_thread::get_id();\n}\n\n// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock\nvoid reader_writer_lock::scoped_lock::internal_construct (reader_writer_lock& lock) {\n    mutex = &lock;\n    next = NULL;\n    status = waiting;\n    if (mutex->is_current_writer()) { // recursive lock attempt\n        // we don't support recursive writer locks; throw exception\n        tbb::internal::throw_exception(tbb::internal::eid_improper_lock);\n    }\n    else { // this thread holds no locks\n        (void) mutex->start_write(this);\n    }\n}\n\ninline reader_writer_lock::scoped_lock::scoped_lock() : mutex(NULL), next(NULL) {\n    status = waiting;\n}\n\n// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock\nvoid reader_writer_lock::scoped_lock_read::internal_construct (reader_writer_lock& lock) {\n    mutex = &lock;\n    next = NULL;\n    status = waiting;\n    if (mutex->is_current_writer()) { // recursive lock attempt\n        // we don't support writer->reader downgrade; throw exception\n        tbb::internal::throw_exception(tbb::internal::eid_improper_lock);\n    }\n    else { // this thread holds no locks\n        mutex->start_read(this);\n    }\n}\n\ninline reader_writer_lock::scoped_lock_read::scoped_lock_read() : mutex(NULL), next(NULL) {\n    status = waiting;\n}\n\nvoid reader_writer_lock::scoped_lock::internal_destroy() {\n    if (mutex) {\n        __TBB_ASSERT(mutex->is_current_writer(), \"~scoped_lock() destroyed by thread different than thread that holds lock.\");\n        mutex->end_write(this);\n    }\n    status = invalid;\n}\n\nvoid reader_writer_lock::scoped_lock_read::internal_destroy() {\n    if (mutex)\n        mutex->end_read();\n    status = invalid;\n}\n\n} // namespace interface5\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/recursive_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/recursive_mutex.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\n\nvoid recursive_mutex::scoped_lock::internal_acquire( recursive_mutex& m ) {\n#if _WIN32||_WIN64\n    switch( m.state ) {\n      case INITIALIZED:\n        // since we cannot look into the internal of the CriticalSection object\n        // we won't know how many times the lock has been acquired, and thus\n        // we won't know when we may safely set the state back to INITIALIZED\n        // if we change the state to HELD as in mutex.cpp.  thus, we won't change\n        // the state for recursive_mutex\n        EnterCriticalSection( &m.impl );\n        break;\n      case DESTROYED:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: mutex already destroyed\");\n        break;\n      default:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: illegal mutex state\");\n        break;\n    }\n#else\n    int error_code = pthread_mutex_lock(&m.impl);\n    if( error_code )\n        tbb::internal::handle_perror(error_code,\"recursive_mutex::scoped_lock: pthread_mutex_lock failed\");\n#endif /* _WIN32||_WIN64 */\n    my_mutex = &m;\n}\n\nvoid recursive_mutex::scoped_lock::internal_release() {\n    __TBB_ASSERT( my_mutex, \"recursive_mutex::scoped_lock: not holding a mutex\" );\n#if _WIN32||_WIN64\n    switch( my_mutex->state ) {\n      case INITIALIZED:\n        LeaveCriticalSection( &my_mutex->impl );\n        break;\n      case DESTROYED:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: mutex already destroyed\");\n        break;\n      default:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: illegal mutex state\");\n        break;\n    }\n#else\n     int error_code = pthread_mutex_unlock(&my_mutex->impl);\n     __TBB_ASSERT_EX(!error_code, \"recursive_mutex::scoped_lock: pthread_mutex_unlock failed\");\n#endif /* _WIN32||_WIN64 */\n     my_mutex = NULL;\n}\n\nbool recursive_mutex::scoped_lock::internal_try_acquire( recursive_mutex& m ) {\n#if _WIN32||_WIN64\n    switch( m.state ) {\n      case INITIALIZED:\n        break;\n      case DESTROYED:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: mutex already destroyed\");\n        break;\n      default:\n        __TBB_ASSERT(false,\"recursive_mutex::scoped_lock: illegal mutex state\");\n        break;\n    }\n#endif /* _WIN32||_WIN64 */\n    bool result;\n#if _WIN32||_WIN64\n    result = TryEnterCriticalSection(&m.impl)!=0;\n#else\n    result = pthread_mutex_trylock(&m.impl)==0;\n#endif /* _WIN32||_WIN64 */\n    if( result )\n        my_mutex = &m;\n    return result;\n}\n\nvoid recursive_mutex::internal_construct() {\n#if _WIN32||_WIN64\n    InitializeCriticalSectionEx(&impl, 4000, 0);\n    state = INITIALIZED;\n#else\n    pthread_mutexattr_t mtx_attr;\n    int error_code = pthread_mutexattr_init( &mtx_attr );\n    if( error_code )\n        tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutexattr_init failed\");\n\n    pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );\n    error_code = pthread_mutex_init( &impl, &mtx_attr );\n    if( error_code )\n        tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_init failed\");\n    pthread_mutexattr_destroy( &mtx_attr );\n#endif /* _WIN32||_WIN64*/\n    ITT_SYNC_CREATE(&impl, _T(\"tbb::recursive_mutex\"), _T(\"\"));\n}\n\nvoid recursive_mutex::internal_destroy() {\n#if _WIN32||_WIN64\n    switch( state ) {\n      case INITIALIZED:\n        DeleteCriticalSection(&impl);\n        break;\n      case DESTROYED:\n        __TBB_ASSERT(false,\"recursive_mutex: already destroyed\");\n        break;\n      default:\n        __TBB_ASSERT(false,\"recursive_mutex: illegal state for destruction\");\n        break;\n    }\n    state = DESTROYED;\n#else\n    int error_code = pthread_mutex_destroy(&impl);\n    __TBB_ASSERT_EX(!error_code,\"recursive_mutex: pthread_mutex_destroy failed\");\n#endif /* _WIN32||_WIN64 */\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/scheduler.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"custom_scheduler.h\"\n#include \"scheduler_utility.h\"\n#include \"governor.h\"\n#include \"market.h\"\n#include \"arena.h\"\n#include \"mailbox.h\"\n#include \"observer_proxy.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/atomic.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// Library initialization\n//------------------------------------------------------------------------\n\n/** Defined in tbb_main.cpp **/\nextern generic_scheduler* (*AllocateSchedulerPtr)( market& );\n\ninline generic_scheduler* allocate_scheduler ( market& m ) {\n    return AllocateSchedulerPtr( m );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ncontext_state_propagation_mutex_type the_context_state_propagation_mutex;\n\nuintptr_t the_context_state_propagation_epoch = 0;\n\n//! Context to be associated with dummy tasks of worker threads schedulers.\n/** It is never used for its direct purpose, and is introduced solely for the sake\n    of avoiding one extra conditional branch in the end of wait_for_all method. **/\nstatic task_group_context the_dummy_context(task_group_context::isolated);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\nvoid Scheduler_OneTimeInitialization ( bool itt_present ) {\n    AllocateSchedulerPtr = itt_present ? &custom_scheduler<DefaultSchedulerTraits>::allocate_scheduler :\n                                      &custom_scheduler<IntelSchedulerTraits>::allocate_scheduler;\n#if __TBB_TASK_GROUP_CONTEXT\n    // There must be no tasks belonging to this fake task group. Mark invalid for the assert\n    __TBB_ASSERT(!(task_group_context::low_unused_state_bit & (task_group_context::low_unused_state_bit-1)), NULL);\n    the_dummy_context.my_state = task_group_context::low_unused_state_bit;\n#if __TBB_TASK_PRIORITY\n    // It should never prevent tasks from being passed to execution.\n    the_dummy_context.my_priority = num_priority_levels - 1;\n#endif /* __TBB_TASK_PRIORITY */\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n}\n\n//------------------------------------------------------------------------\n// scheduler interface\n//------------------------------------------------------------------------\n\n//  A pure virtual destructor should still have a body\n//  so the one for tbb::internal::scheduler::~scheduler() is provided here\nscheduler::~scheduler( ) {}\n\n//------------------------------------------------------------------------\n// generic_scheduler\n//------------------------------------------------------------------------\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warning about using 'this' in base initializer list.\n    #pragma warning(push)\n    #pragma warning(disable:4355)\n#endif\n\ngeneric_scheduler::generic_scheduler( market& m )\n    : my_market(&m)\n    , my_random(this)\n    , my_ref_count(1)\n    , my_small_task_count(1)   // Extra 1 is a guard reference\n#if __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT\n    , my_cilk_state(cs_none)\n#endif /* __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT */\n{\n    __TBB_ASSERT( !my_arena_index, \"constructor expects the memory being zero-initialized\" );\n    __TBB_ASSERT( governor::is_set(NULL), \"scheduler is already initialized for this thread\" );\n\n    my_innermost_running_task = my_dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, &the_dummy_context) );\n    my_properties.outermost = true;\n#if __TBB_TASK_PRIORITY\n    my_ref_top_priority = &m.my_global_top_priority;\n    my_ref_reload_epoch = &m.my_global_reload_epoch;\n#endif /* __TBB_TASK_PRIORITY */\n#if __TBB_TASK_GROUP_CONTEXT\n    // Sync up the local cancellation state with the global one. No need for fence here.\n    my_context_state_propagation_epoch = the_context_state_propagation_epoch;\n    my_context_list_head.my_prev = &my_context_list_head;\n    my_context_list_head.my_next = &my_context_list_head;\n    ITT_SYNC_CREATE(&my_context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    ITT_SYNC_CREATE(&my_dummy_task->prefix().ref_count, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);\n    ITT_SYNC_CREATE(&my_return_list, SyncType_Scheduler, SyncObj_TaskReturnList);\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif // warning 4355 is back\n\n#if TBB_USE_ASSERT > 1\nvoid generic_scheduler::assert_task_pool_valid() const {\n    if ( !my_arena_slot )\n        return;\n    acquire_task_pool();\n    task** tp = my_arena_slot->task_pool_ptr;\n    if ( my_arena_slot->my_task_pool_size )\n        __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL );\n    const size_t H = __TBB_load_relaxed(my_arena_slot->head); // mirror\n    const size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror\n    __TBB_ASSERT( H <= T, NULL );\n    for ( size_t i = 0; i < H; ++i )\n        __TBB_ASSERT( tp[i] == poisoned_ptr, \"Task pool corrupted\" );\n    for ( size_t i = H; i < T; ++i ) {\n        if ( tp[i] ) {\n            assert_task_valid( tp[i] );\n            __TBB_ASSERT( tp[i]->prefix().state == task::ready ||\n                tp[i]->prefix().extra_state == es_task_proxy, \"task in the deque has invalid state\" );\n        }\n    }\n    for ( size_t i = T; i < my_arena_slot->my_task_pool_size; ++i )\n        __TBB_ASSERT( tp[i] == poisoned_ptr, \"Task pool corrupted\" );\n    release_task_pool();\n}\n#endif /* TBB_USE_ASSERT > 1 */\n\nvoid generic_scheduler::init_stack_info () {\n    // Stacks are growing top-down. Highest address is called \"stack base\",\n    // and the lowest is \"stack limit\".\n    __TBB_ASSERT( !my_stealing_threshold, \"Stealing threshold has already been calculated\" );\n    size_t  stack_size = my_market->worker_stack_size();\n#if USE_WINTHREAD\n#if defined(_MSC_VER)&&_MSC_VER<1400 && !_WIN64\n    NT_TIB  *pteb;\n    __asm mov eax, fs:[0x18]\n    __asm mov pteb, eax\n#else\n    NT_TIB  *pteb = (NT_TIB*)NtCurrentTeb();\n#endif\n    __TBB_ASSERT( &pteb < pteb->StackBase && &pteb > pteb->StackLimit, \"invalid stack info in TEB\" );\n    __TBB_ASSERT( stack_size >0, \"stack_size not initialized?\" );\n    // When a thread is created with the attribute STACK_SIZE_PARAM_IS_A_RESERVATION, stack limit\n    // in the TIB points to the committed part of the stack only. This renders the expression\n    // \"(uintptr_t)pteb->StackBase / 2 + (uintptr_t)pteb->StackLimit / 2\" virtually useless.\n    // Thus for worker threads we use the explicit stack size we used while creating them.\n    // And for master threads we rely on the following fact and assumption:\n    // - the default stack size of a master thread on Windows is 1M;\n    // - if it was explicitly set by the application it is at least as large as the size of a worker stack.\n    if ( is_worker() || stack_size < MByte )\n        my_stealing_threshold = (uintptr_t)pteb->StackBase - stack_size / 2;\n    else\n        my_stealing_threshold = (uintptr_t)pteb->StackBase - MByte / 2;\n#else /* USE_PTHREAD */\n    // There is no portable way to get stack base address in Posix, so we use\n    // non-portable method (on all modern Linux) or the simplified approach\n    // based on the common sense assumptions. The most important assumption\n    // is that the main thread's stack size is not less than that of other threads.\n    // See also comment 3 at the end of this file\n    void    *stack_base = &stack_size;\n#if __linux__ && !__bg__\n#if __TBB_ipf\n    void    *rsb_base = __TBB_get_bsp();\n#endif\n    size_t  np_stack_size = 0;\n    void    *stack_limit = NULL;\n    pthread_attr_t  np_attr_stack;\n    if( 0 == pthread_getattr_np(pthread_self(), &np_attr_stack) ) {\n        if ( 0 == pthread_attr_getstack(&np_attr_stack, &stack_limit, &np_stack_size) ) {\n#if __TBB_ipf\n            pthread_attr_t  attr_stack;\n            if ( 0 == pthread_attr_init(&attr_stack) ) {\n                if ( 0 == pthread_attr_getstacksize(&attr_stack, &stack_size) ) {\n                    if ( np_stack_size < stack_size ) {\n                        // We are in a secondary thread. Use reliable data.\n                        // IA-64 architecture stack is split into RSE backup and memory parts\n                        rsb_base = stack_limit;\n                        stack_size = np_stack_size/2;\n                        // Limit of the memory part of the stack\n                        stack_limit = (char*)stack_limit + stack_size;\n                    }\n                    // We are either in the main thread or this thread stack\n                    // is bigger that that of the main one. As we cannot discern\n                    // these cases we fall back to the default (heuristic) values.\n                }\n                pthread_attr_destroy(&attr_stack);\n            }\n            // IA-64 architecture stack is split into RSE backup and memory parts\n            my_rsb_stealing_threshold = (uintptr_t)((char*)rsb_base + stack_size/2);\n#endif /* __TBB_ipf */\n            // Size of the stack free part\n            stack_size = size_t((char*)stack_base - (char*)stack_limit);\n        }\n        pthread_attr_destroy(&np_attr_stack);\n    }\n#endif /* __linux__ */\n    __TBB_ASSERT( stack_size>0, \"stack size must be positive\" );\n    my_stealing_threshold = (uintptr_t)((char*)stack_base - stack_size/2);\n#endif /* USE_PTHREAD */\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n/** The function uses synchronization scheme similar to the one in the destructor\n    of task_group_context augmented with interlocked state change of each context\n    object. The purpose of this algo is to prevent threads doing nonlocal context\n    destruction from accessing destroyed owner-scheduler instance still pointed to\n    by the context object. **/\nvoid generic_scheduler::cleanup_local_context_list () {\n    // Detach contexts remaining in the local list\n    bool wait_for_concurrent_destroyers_to_leave = false;\n    uintptr_t local_count_snapshot = my_context_state_propagation_epoch;\n    my_local_ctx_list_update.store<relaxed>(1);\n    {\n        // This is just a definition. Actual lock is acquired only in case of conflict.\n        spin_mutex::scoped_lock lock;\n        // Full fence prevents reordering of store to my_local_ctx_list_update with\n        // load from my_nonlocal_ctx_list_update.\n        atomic_fence();\n        // Check for the conflict with concurrent destroyer or cancellation propagator\n        if ( my_nonlocal_ctx_list_update.load<relaxed>() || local_count_snapshot != the_context_state_propagation_epoch )\n            lock.acquire(my_context_list_mutex);\n        // No acquire fence is necessary for loading my_context_list_head.my_next,\n        // as the list can be updated by this thread only.\n        context_list_node_t *node = my_context_list_head.my_next;\n        while ( node != &my_context_list_head ) {\n            task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);\n            __TBB_ASSERT( __TBB_load_relaxed(ctx.my_kind) != task_group_context::binding_required, \"Only a context bound to a root task can be detached\" );\n            node = node->my_next;\n            __TBB_ASSERT( is_alive(ctx.my_version_and_traits), \"Walked into a destroyed context while detaching contexts from the local list\" );\n            // Synchronizes with ~task_group_context(). TODO: evaluate and perhaps relax\n            if ( internal::as_atomic(ctx.my_kind).fetch_and_store(task_group_context::detached) == task_group_context::dying )\n                wait_for_concurrent_destroyers_to_leave = true;\n        }\n    }\n    my_local_ctx_list_update.store<release>(0);\n    // Wait until other threads referencing this scheduler object finish with it\n    if ( wait_for_concurrent_destroyers_to_leave )\n        spin_wait_until_eq( my_nonlocal_ctx_list_update, 0u );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\nvoid generic_scheduler::free_scheduler() {\n    __TBB_ASSERT( !my_arena_slot, NULL );\n#if __TBB_TASK_GROUP_CONTEXT\n    cleanup_local_context_list();\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    free_task<small_local_task>( *my_dummy_task );\n\n#if __TBB_HOARD_NONLOCAL_TASKS\n    while( task* t = my_nonlocal_free_list ) {\n        task_prefix& p = t->prefix();\n        my_nonlocal_free_list = p.next;\n        __TBB_ASSERT( p.origin && p.origin!=this, NULL );\n        free_nonlocal_small_task(*t);\n    }\n#endif\n    // k accounts for a guard reference and each task that we deallocate.\n    intptr_t k = 1;\n    for(;;) {\n        while( task* t = my_free_list ) {\n            my_free_list = t->prefix().next;\n            deallocate_task(*t);\n            ++k;\n        }\n        if( my_return_list==plugged_return_list() )\n            break;\n        my_free_list = (task*)__TBB_FetchAndStoreW( &my_return_list, (intptr_t)plugged_return_list() );\n    }\n#if __TBB_COUNT_TASK_NODES\n    my_market->update_task_node_count( my_task_node_count );\n#endif /* __TBB_COUNT_TASK_NODES */\n    // Update my_small_task_count last.  Doing so sooner might cause another thread to free *this.\n    __TBB_ASSERT( my_small_task_count>=k, \"my_small_task_count corrupted\" );\n    governor::sign_off(this);\n    if( __TBB_FetchAndAddW( &my_small_task_count, -k )==k )\n        NFS_Free( this );\n}\n\ntask& generic_scheduler::allocate_task( size_t number_of_bytes,\n                                            __TBB_CONTEXT_ARG(task* parent, task_group_context* context) ) {\n    GATHER_STATISTIC(++my_counters.active_tasks);\n    task *t;\n    if( number_of_bytes<=quick_task_size ) {\n#if __TBB_HOARD_NONLOCAL_TASKS\n        if( (t = my_nonlocal_free_list) ) {\n            GATHER_STATISTIC(--my_counters.free_list_length);\n            __TBB_ASSERT( t->state()==task::freed, \"free list of tasks is corrupted\" );\n            my_nonlocal_free_list = t->prefix().next;\n        } else\n#endif\n        if( (t = my_free_list) ) {\n            GATHER_STATISTIC(--my_counters.free_list_length);\n            __TBB_ASSERT( t->state()==task::freed, \"free list of tasks is corrupted\" );\n            my_free_list = t->prefix().next;\n        } else if( my_return_list ) {\n            // No fence required for read of my_return_list above, because __TBB_FetchAndStoreW has a fence.\n            t = (task*)__TBB_FetchAndStoreW( &my_return_list, 0 ); // with acquire\n            __TBB_ASSERT( t, \"another thread emptied the my_return_list\" );\n            __TBB_ASSERT( t->prefix().origin==this, \"task returned to wrong my_return_list\" );\n            ITT_NOTIFY( sync_acquired, &my_return_list );\n            my_free_list = t->prefix().next;\n        } else {\n            t = (task*)((char*)NFS_Allocate( 1, task_prefix_reservation_size+quick_task_size, NULL ) + task_prefix_reservation_size );\n#if __TBB_COUNT_TASK_NODES\n            ++my_task_node_count;\n#endif /* __TBB_COUNT_TASK_NODES */\n            t->prefix().origin = this;\n            t->prefix().next = 0;\n            ++my_small_task_count;\n        }\n#if __TBB_PREFETCHING\n        task *t_next = t->prefix().next;\n        if( !t_next ) { // the task was last in the list\n#if __TBB_HOARD_NONLOCAL_TASKS\n            if( my_free_list )\n                t_next = my_free_list;\n            else\n#endif\n            if( my_return_list ) // enable prefetching, gives speedup\n                t_next = my_free_list = (task*)__TBB_FetchAndStoreW( &my_return_list, 0 );\n        }\n        if( t_next ) { // gives speedup for both cache lines\n            __TBB_cl_prefetch(t_next);\n            __TBB_cl_prefetch(&t_next->prefix());\n        }\n#endif /* __TBB_PREFETCHING */\n    } else {\n        GATHER_STATISTIC(++my_counters.big_tasks);\n        t = (task*)((char*)NFS_Allocate( 1, task_prefix_reservation_size+number_of_bytes, NULL ) + task_prefix_reservation_size );\n#if __TBB_COUNT_TASK_NODES\n        ++my_task_node_count;\n#endif /* __TBB_COUNT_TASK_NODES */\n        t->prefix().origin = NULL;\n    }\n    task_prefix& p = t->prefix();\n#if __TBB_TASK_GROUP_CONTEXT\n    p.context = context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    // Obsolete. But still in use, so has to be assigned correct value here.\n    p.owner = this;\n    p.ref_count = 0;\n    // Obsolete. Assign some not outrageously out-of-place value for a while.\n    p.depth = 0;\n    p.parent = parent;\n    // In TBB 2.1 and later, the constructor for task sets extra_state to indicate the version of the tbb/task.h header.\n    // In TBB 2.0 and earlier, the constructor leaves extra_state as zero.\n    p.extra_state = 0;\n    p.affinity = 0;\n    p.state = task::allocated;\n    __TBB_ISOLATION_EXPR( p.isolation = no_isolation );\n    return *t;\n}\n\nvoid generic_scheduler::free_nonlocal_small_task( task& t ) {\n    __TBB_ASSERT( t.state()==task::freed, NULL );\n    generic_scheduler& s = *static_cast<generic_scheduler*>(t.prefix().origin);\n    __TBB_ASSERT( &s!=this, NULL );\n    for(;;) {\n        task* old = s.my_return_list;\n        if( old==plugged_return_list() )\n            break;\n        // Atomically insert t at head of s.my_return_list\n        t.prefix().next = old;\n        ITT_NOTIFY( sync_releasing, &s.my_return_list );\n        if( as_atomic(s.my_return_list).compare_and_swap(&t, old )==old ) {\n#if __TBB_PREFETCHING\n            __TBB_cl_evict(&t.prefix());\n            __TBB_cl_evict(&t);\n#endif\n            return;\n        }\n    }\n    deallocate_task(t);\n    if( __TBB_FetchAndDecrementWrelease( &s.my_small_task_count )==1 ) {\n        // We freed the last task allocated by scheduler s, so it's our responsibility\n        // to free the scheduler.\n        NFS_Free( &s );\n    }\n}\n\ninline size_t generic_scheduler::prepare_task_pool ( size_t num_tasks ) {\n    size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror\n    if ( T + num_tasks <= my_arena_slot->my_task_pool_size )\n        return T;\n\n    size_t new_size = num_tasks;\n\n    if ( !my_arena_slot->my_task_pool_size ) {\n        __TBB_ASSERT( !is_task_pool_published() && is_quiescent_local_task_pool_reset(), NULL );\n        __TBB_ASSERT( !my_arena_slot->task_pool_ptr, NULL );\n        if ( num_tasks < min_task_pool_size ) new_size = min_task_pool_size;\n        my_arena_slot->allocate_task_pool( new_size );\n        return 0;\n    }\n\n    acquire_task_pool();\n    size_t H = __TBB_load_relaxed( my_arena_slot->head ); // mirror\n    task** task_pool = my_arena_slot->task_pool_ptr;;\n    __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL );\n    // Count not skipped tasks. Consider using std::count_if.\n    for ( size_t i = H; i < T; ++i )\n        if ( task_pool[i] ) ++new_size;\n    // If the free space at the beginning of the task pool is too short, we\n    // are likely facing a pathological single-producer-multiple-consumers\n    // scenario, and thus it's better to expand the task pool\n    bool allocate = new_size > my_arena_slot->my_task_pool_size - min_task_pool_size/4;\n    if ( allocate ) {\n        // Grow task pool. As this operation is rare, and its cost is asymptotically\n        // amortizable, we can tolerate new task pool allocation done under the lock.\n        if ( new_size < 2 * my_arena_slot->my_task_pool_size )\n            new_size = 2 * my_arena_slot->my_task_pool_size;\n        my_arena_slot->allocate_task_pool( new_size ); // updates my_task_pool_size\n    }\n    // Filter out skipped tasks. Consider using std::copy_if.\n    size_t T1 = 0;\n    for ( size_t i = H; i < T; ++i )\n        if ( task_pool[i] )\n            my_arena_slot->task_pool_ptr[T1++] = task_pool[i];\n    // Deallocate the previous task pool if a new one has been allocated.\n    if ( allocate )\n        NFS_Free( task_pool );\n    else\n        my_arena_slot->fill_with_canary_pattern( T1, my_arena_slot->tail );\n    // Publish the new state.\n    commit_relocated_tasks( T1 );\n    assert_task_pool_valid();\n    return T1;\n}\n\n/** ATTENTION:\n    This method is mostly the same as generic_scheduler::lock_task_pool(), with\n    a little different logic of slot state checks (slot is either locked or points\n    to our task pool).\n    Thus if either of them is changed, consider changing the counterpart as well. **/\ninline void generic_scheduler::acquire_task_pool() const {\n    if ( !is_task_pool_published() )\n        return; // we are not in arena - nothing to lock\n    bool sync_prepare_done = false;\n    for( atomic_backoff b;;b.pause() ) {\n#if TBB_USE_ASSERT\n        __TBB_ASSERT( my_arena_slot == my_arena->my_slots + my_arena_index, \"invalid arena slot index\" );\n        // Local copy of the arena slot task pool pointer is necessary for the next\n        // assertion to work correctly to exclude asynchronous state transition effect.\n        task** tp = my_arena_slot->task_pool;\n        __TBB_ASSERT( tp == LockedTaskPool || tp == my_arena_slot->task_pool_ptr, \"slot ownership corrupt?\" );\n#endif\n        if( my_arena_slot->task_pool != LockedTaskPool &&\n            as_atomic(my_arena_slot->task_pool).compare_and_swap(LockedTaskPool, my_arena_slot->task_pool_ptr ) == my_arena_slot->task_pool_ptr )\n        {\n            // We acquired our own slot\n            ITT_NOTIFY(sync_acquired, my_arena_slot);\n            break;\n        }\n        else if( !sync_prepare_done ) {\n            // Start waiting\n            ITT_NOTIFY(sync_prepare, my_arena_slot);\n            sync_prepare_done = true;\n        }\n        // Someone else acquired a lock, so pause and do exponential backoff.\n    }\n    __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, \"not really acquired task pool\" );\n} // generic_scheduler::acquire_task_pool\n\ninline void generic_scheduler::release_task_pool() const {\n    if ( !is_task_pool_published() )\n        return; // we are not in arena - nothing to unlock\n    __TBB_ASSERT( my_arena_slot, \"we are not in arena\" );\n    __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, \"arena slot is not locked\" );\n    ITT_NOTIFY(sync_releasing, my_arena_slot);\n    __TBB_store_with_release( my_arena_slot->task_pool, my_arena_slot->task_pool_ptr );\n}\n\n/** ATTENTION:\n    This method is mostly the same as generic_scheduler::acquire_task_pool(),\n    with a little different logic of slot state checks (slot can be empty, locked\n    or point to any task pool other than ours, and asynchronous transitions between\n    all these states are possible).\n    Thus if any of them is changed, consider changing the counterpart as well **/\ninline task** generic_scheduler::lock_task_pool( arena_slot* victim_arena_slot ) const {\n    task** victim_task_pool;\n    bool sync_prepare_done = false;\n    for( atomic_backoff backoff;; /*backoff pause embedded in the loop*/) {\n        victim_task_pool = victim_arena_slot->task_pool;\n        // NOTE: Do not use comparison of head and tail indices to check for\n        // the presence of work in the victim's task pool, as they may give\n        // incorrect indication because of task pool relocations and resizes.\n        if ( victim_task_pool == EmptyTaskPool ) {\n            // The victim thread emptied its task pool - nothing to lock\n            if( sync_prepare_done )\n                ITT_NOTIFY(sync_cancel, victim_arena_slot);\n            break;\n        }\n        if( victim_task_pool != LockedTaskPool &&\n            as_atomic(victim_arena_slot->task_pool).compare_and_swap(LockedTaskPool, victim_task_pool ) == victim_task_pool )\n        {\n            // We've locked victim's task pool\n            ITT_NOTIFY(sync_acquired, victim_arena_slot);\n            break;\n        }\n        else if( !sync_prepare_done ) {\n            // Start waiting\n            ITT_NOTIFY(sync_prepare, victim_arena_slot);\n            sync_prepare_done = true;\n        }\n        GATHER_STATISTIC( ++my_counters.thieves_conflicts );\n        // Someone else acquired a lock, so pause and do exponential backoff.\n#if __TBB_STEALING_ABORT_ON_CONTENTION\n        if(!backoff.bounded_pause()) {\n            // the 16 was acquired empirically and a theory behind it supposes\n            // that number of threads becomes much bigger than number of\n            // tasks which can be spawned by one thread causing excessive contention.\n            // TODO: However even small arenas can benefit from the abort on contention\n            //       if preemption of a thief is a problem\n            if(my_arena->my_limit >= 16)\n                return EmptyTaskPool;\n            __TBB_Yield();\n        }\n#else\n        backoff.pause();\n#endif\n    }\n    __TBB_ASSERT( victim_task_pool == EmptyTaskPool ||\n                  (victim_arena_slot->task_pool == LockedTaskPool && victim_task_pool != LockedTaskPool),\n                  \"not really locked victim's task pool?\" );\n    return victim_task_pool;\n} // generic_scheduler::lock_task_pool\n\ninline void generic_scheduler::unlock_task_pool( arena_slot* victim_arena_slot,\n                                                task** victim_task_pool ) const {\n    __TBB_ASSERT( victim_arena_slot, \"empty victim arena slot pointer\" );\n    __TBB_ASSERT( victim_arena_slot->task_pool == LockedTaskPool, \"victim arena slot is not locked\" );\n    ITT_NOTIFY(sync_releasing, victim_arena_slot);\n    __TBB_store_with_release( victim_arena_slot->task_pool, victim_task_pool );\n}\n\n\ninline task* generic_scheduler::prepare_for_spawning( task* t ) {\n    __TBB_ASSERT( t->state()==task::allocated, \"attempt to spawn task that is not in 'allocated' state\" );\n    t->prefix().state = task::ready;\n#if TBB_USE_ASSERT\n    if( task* parent = t->parent() ) {\n        internal::reference_count ref_count = parent->prefix().ref_count;\n        __TBB_ASSERT( ref_count>=0, \"attempt to spawn task whose parent has a ref_count<0\" );\n        __TBB_ASSERT( ref_count!=0, \"attempt to spawn task whose parent has a ref_count==0 (forgot to set_ref_count?)\" );\n        parent->prefix().extra_state |= es_ref_count_active;\n    }\n#endif /* TBB_USE_ASSERT */\n    affinity_id dst_thread = t->prefix().affinity;\n    __TBB_ASSERT( dst_thread == 0 || is_version_3_task(*t),\n                  \"backwards compatibility to TBB 2.0 tasks is broken\" );\n#if __TBB_TASK_ISOLATION\n    isolation_tag isolation = my_innermost_running_task->prefix().isolation;\n    t->prefix().isolation = isolation;\n#endif /* __TBB_TASK_ISOLATION */\n    if( dst_thread != 0 && dst_thread != my_affinity_id ) {\n        task_proxy& proxy = (task_proxy&)allocate_task( sizeof(task_proxy),\n                                                      __TBB_CONTEXT_ARG(NULL, NULL) );\n        // Mark as a proxy\n        proxy.prefix().extra_state = es_task_proxy;\n        proxy.outbox = &my_arena->mailbox(dst_thread);\n        // Mark proxy as present in both locations (sender's task pool and destination mailbox)\n        proxy.task_and_tag = intptr_t(t) | task_proxy::location_mask;\n#if __TBB_TASK_PRIORITY\n        poison_pointer( proxy.prefix().context );\n#endif /* __TBB_TASK_PRIORITY */\n        __TBB_ISOLATION_EXPR( proxy.prefix().isolation = isolation );\n        ITT_NOTIFY( sync_releasing, proxy.outbox );\n        // Mail the proxy - after this point t may be destroyed by another thread at any moment.\n        proxy.outbox->push(&proxy);\n        return &proxy;\n    }\n    return t;\n}\n\n/** Conceptually, this method should be a member of class scheduler.\n    But doing so would force us to publish class scheduler in the headers. */\nvoid generic_scheduler::local_spawn( task* first, task*& next ) {\n    __TBB_ASSERT( first, NULL );\n    __TBB_ASSERT( governor::is_set(this), NULL );\n#if __TBB_TODO\n    // We need to consider capping the max task pool size and switching\n    // to in-place task execution whenever it is reached.\n#endif\n    if ( &first->prefix().next == &next ) {\n        // Single task is being spawned\n#if __TBB_TODO\n        // TODO:\n        // In the future we need to add overloaded spawn method for a single task,\n        // and a method accepting an array of task pointers (we may also want to\n        // change the implementation of the task_list class). But since such changes\n        // may affect the binary compatibility, we postpone them for a while.\n#endif\n        size_t T = prepare_task_pool( 1 );\n        my_arena_slot->task_pool_ptr[T] = prepare_for_spawning( first );\n        commit_spawned_tasks( T + 1 );\n    }\n    else {\n        // Task list is being spawned\n#if __TBB_TODO\n        // TODO: add task_list::front() and implement&document the local execution ordering which is\n        // opposite to the current implementation. The idea is to remove hackish fast_reverse_vector\n        // and use push_back/push_front when accordingly LIFO and FIFO order of local execution is\n        // desired. It also requires refactoring of the reload_tasks method and my_offloaded_tasks list.\n        // Additional benefit may come from adding counter to the task_list so that it can reserve enough\n        // space in the task pool in advance and move all the tasks directly without any intermediate\n        // storages. But it requires dealing with backward compatibility issues and still supporting\n        // counter-less variant (though not necessarily fast implementation).\n#endif\n        task *arr[min_task_pool_size];\n        fast_reverse_vector<task*> tasks(arr, min_task_pool_size);\n        task *t_next = NULL;\n        for( task* t = first; ; t = t_next ) {\n            // If t is affinitized to another thread, it may already be executed\n            // and destroyed by the time prepare_for_spawning returns.\n            // So milk it while it is alive.\n            bool end = &t->prefix().next == &next;\n            t_next = t->prefix().next;\n            tasks.push_back( prepare_for_spawning(t) );\n            if( end )\n                break;\n        }\n        size_t num_tasks = tasks.size();\n        size_t T = prepare_task_pool( num_tasks );\n        tasks.copy_memory( my_arena_slot->task_pool_ptr + T );\n        commit_spawned_tasks( T + num_tasks );\n    }\n    if ( !is_task_pool_published() )\n        publish_task_pool();\n    my_arena->advertise_new_work<arena::work_spawned>();\n    assert_task_pool_valid();\n}\n\nvoid generic_scheduler::local_spawn_root_and_wait( task* first, task*& next ) {\n    __TBB_ASSERT( governor::is_set(this), NULL );\n    __TBB_ASSERT( first, NULL );\n    auto_empty_task dummy( __TBB_CONTEXT_ARG(this, first->prefix().context) );\n    internal::reference_count n = 0;\n    for( task* t=first; ; t=t->prefix().next ) {\n        ++n;\n        __TBB_ASSERT( !t->prefix().parent, \"not a root task, or already running\" );\n        t->prefix().parent = &dummy;\n        if( &t->prefix().next==&next ) break;\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT( t->prefix().context == t->prefix().next->prefix().context,\n                    \"all the root tasks in list must share the same context\");\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n    dummy.prefix().ref_count = n+1;\n    if( n>1 )\n        local_spawn( first->prefix().next, next );\n    local_wait_for_all( dummy, first );\n}\n\nvoid tbb::internal::generic_scheduler::spawn( task& first, task*& next ) {\n    governor::local_scheduler()->local_spawn( &first, next );\n}\n\nvoid tbb::internal::generic_scheduler::spawn_root_and_wait( task& first, task*& next ) {\n    governor::local_scheduler()->local_spawn_root_and_wait( &first, next );\n}\n\nvoid tbb::internal::generic_scheduler::enqueue( task& t, void* prio ) {\n    generic_scheduler *s = governor::local_scheduler();\n    // these redirections are due to bw-compatibility, consider reworking some day\n    __TBB_ASSERT( s->my_arena, \"thread is not in any arena\" );\n    s->my_arena->enqueue_task(t, (intptr_t)prio, s->my_random );\n}\n\n#if __TBB_TASK_PRIORITY\nclass auto_indicator : no_copy {\n    volatile bool& my_indicator;\npublic:\n    auto_indicator ( volatile bool& indicator ) : my_indicator(indicator) { my_indicator = true ;}\n    ~auto_indicator () { my_indicator = false; }\n};\n\ntask *generic_scheduler::get_task_and_activate_task_pool( size_t H0, __TBB_ISOLATION_ARG( size_t T0, isolation_tag isolation ) ) {\n    __TBB_ASSERT( is_local_task_pool_quiescent(), NULL );\n\n    // Go through the task pool to find an available task for execution.\n    task *t = NULL;\n#if __TBB_TASK_ISOLATION\n    size_t T = T0;\n    bool tasks_omitted = false;\n    while ( !t && T>H0 ) {\n        t = get_task( --T, isolation, tasks_omitted );\n        if ( !tasks_omitted ) {\n            poison_pointer( my_arena_slot->task_pool_ptr[T] );\n            --T0;\n        }\n    }\n    // Make a hole if some tasks have been skipped.\n    if ( t && tasks_omitted ) {\n        my_arena_slot->task_pool_ptr[T] = NULL;\n        if ( T == H0 ) {\n            // The obtained task is on the head. So we can move the head instead of making a hole.\n            ++H0;\n            poison_pointer( my_arena_slot->task_pool_ptr[T] );\n        }\n    }\n#else\n    while ( !t && T0 ) {\n        t = get_task( --T0 );\n        poison_pointer( my_arena_slot->task_pool_ptr[T0] );\n    }\n#endif /* __TBB_TASK_ISOLATION */\n\n    if ( H0 < T0 ) {\n        // There are some tasks in the task pool. Publish them.\n        __TBB_store_relaxed( my_arena_slot->head, H0 );\n        __TBB_store_relaxed( my_arena_slot->tail, T0 );\n        if ( is_task_pool_published() )\n            release_task_pool();\n        else\n            publish_task_pool();\n    } else {\n        __TBB_store_relaxed( my_arena_slot->head, 0 );\n        __TBB_store_relaxed( my_arena_slot->tail, 0 );\n        if ( is_task_pool_published() )\n            leave_task_pool();\n    }\n\n#if __TBB_TASK_ISOLATION\n    // Now it is safe to call note_affinity because the task pool is restored.\n    if ( tasks_omitted && my_innermost_running_task == t ) {\n        assert_task_valid( t );\n        t->note_affinity( my_affinity_id );\n    }\n#endif /* __TBB_TASK_ISOLATION */\n\n    assert_task_pool_valid();\n    return t;\n}\n\ntask* generic_scheduler::winnow_task_pool( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {\n    GATHER_STATISTIC( ++my_counters.prio_winnowings );\n    __TBB_ASSERT( is_task_pool_published(), NULL );\n    __TBB_ASSERT( my_offloaded_tasks, \"At least one task is expected to be already offloaded\" );\n    // To eliminate possible sinking of the store to the indicator below the subsequent\n    // store to my_arena_slot->tail, the stores should have either been separated\n    // by full fence or both use release fences. And resetting indicator should have\n    // been done with release fence. But since this is just an optimization, and\n    // the corresponding checking sequence in arena::is_out_of_work() is not atomic\n    // anyway, fences aren't used, so that not to penalize warmer path.\n    auto_indicator indicator( my_pool_reshuffling_pending );\n\n    // Locking the task pool unconditionally produces simpler code,\n    // scalability of which should not suffer unless priority jitter takes place.\n    // TODO: consider the synchronization algorithm here is for the owner thread\n    // to avoid locking task pool most of the time.\n    acquire_task_pool();\n    size_t T0 = __TBB_load_relaxed( my_arena_slot->tail );\n    size_t H0 = __TBB_load_relaxed( my_arena_slot->head );\n    size_t T1 = 0;\n    for ( size_t src = H0; src<T0; ++src ) {\n        if ( task *t = my_arena_slot->task_pool_ptr[src] ) {\n            // We cannot offload a proxy task (check the priority of it) because it can be already consumed.\n            if ( !is_proxy( *t ) ) {\n                intptr_t p = priority( *t );\n                if ( p<*my_ref_top_priority ) {\n                    offload_task( *t, p );\n                    continue;\n                }\n            }\n            my_arena_slot->task_pool_ptr[T1++] = t;\n        }\n    }\n    __TBB_ASSERT( T1<=T0, NULL );\n\n    // Choose max(T1, H0) because ranges [0, T1) and [H0, T0) can overlap.\n    my_arena_slot->fill_with_canary_pattern( max( T1, H0 ), T0 );\n    return get_task_and_activate_task_pool( 0, __TBB_ISOLATION_ARG( T1, isolation ) );\n}\n\ntask* generic_scheduler::reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, __TBB_ISOLATION_ARG( intptr_t top_priority, isolation_tag isolation ) ) {\n    GATHER_STATISTIC( ++my_counters.prio_reloads );\n#if __TBB_TASK_ISOLATION\n    // In many cases, locking the task pool is no-op here because the task pool is in the empty\n    // state. However, isolation allows entering stealing loop with non-empty task pool.\n    // In principle, it is possible to process reloaded tasks without locking but it will\n    // complicate the logic of get_task_and_activate_task_pool (TODO: evaluate).\n    acquire_task_pool();\n#else\n    __TBB_ASSERT( !is_task_pool_published(), NULL );\n#endif\n    task *arr[min_task_pool_size];\n    fast_reverse_vector<task*> tasks(arr, min_task_pool_size);\n    task **link = &offloaded_tasks;\n    while ( task *t = *link ) {\n        task** next_ptr = &t->prefix().next_offloaded;\n        __TBB_ASSERT( !is_proxy(*t), \"The proxy tasks cannot be offloaded\" );\n        if ( priority(*t) >= top_priority ) {\n            tasks.push_back( t );\n            // Note that owner is an alias of next_offloaded. Thus the following\n            // assignment overwrites *next_ptr\n            task* next = *next_ptr;\n            t->prefix().owner = this;\n            __TBB_ASSERT( t->prefix().state == task::ready, NULL );\n            *link = next;\n        }\n        else {\n            link = next_ptr;\n        }\n    }\n    if ( link == &offloaded_tasks ) {\n        offloaded_tasks = NULL;\n#if TBB_USE_ASSERT\n        offloaded_task_list_link = NULL;\n#endif /* TBB_USE_ASSERT */\n    }\n    else {\n        __TBB_ASSERT( link, NULL );\n        // Mark end of list\n        *link = NULL;\n        offloaded_task_list_link = link;\n    }\n    __TBB_ASSERT( link, NULL );\n    size_t num_tasks = tasks.size();\n    if ( !num_tasks ) {\n        __TBB_ISOLATION_EXPR( release_task_pool() );\n        return NULL;\n    }\n\n    // Copy found tasks into the task pool.\n    GATHER_STATISTIC( ++my_counters.prio_tasks_reloaded );\n    size_t T = prepare_task_pool( num_tasks );\n    tasks.copy_memory( my_arena_slot->task_pool_ptr + T );\n\n    // Find a task available for execution.\n    task *t = get_task_and_activate_task_pool( __TBB_load_relaxed( my_arena_slot->head ), __TBB_ISOLATION_ARG( T + num_tasks, isolation ) );\n    if ( t ) --num_tasks;\n    if ( num_tasks )\n        my_arena->advertise_new_work<arena::work_spawned>();\n\n    return t;\n}\n\ntask* generic_scheduler::reload_tasks( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {\n    uintptr_t reload_epoch = *my_ref_reload_epoch;\n    __TBB_ASSERT( my_offloaded_tasks, NULL );\n    __TBB_ASSERT( my_local_reload_epoch <= reload_epoch\n                  || my_local_reload_epoch - reload_epoch > uintptr_t(-1)/2,\n                  \"Reload epoch counter overflow?\" );\n    if ( my_local_reload_epoch == reload_epoch )\n        return NULL;\n    __TBB_ASSERT( my_offloaded_tasks, NULL );\n    intptr_t top_priority = effective_reference_priority();\n    __TBB_ASSERT( (uintptr_t)top_priority < (uintptr_t)num_priority_levels, NULL );\n    task *t = reload_tasks( my_offloaded_tasks, my_offloaded_task_list_tail_link, __TBB_ISOLATION_ARG( top_priority, isolation ) );\n    if ( my_offloaded_tasks && (my_arena->my_bottom_priority >= top_priority || !my_arena->my_num_workers_requested) ) {\n        // Safeguard against deliberately relaxed synchronization while checking\n        // for the presence of work in arena (so that not to impact hot paths).\n        // Arena may be reset to empty state when offloaded low priority tasks\n        // are still present. This results in both bottom and top priority bounds\n        // becoming 'normal', which makes offloaded low priority tasks unreachable.\n        // Update arena's bottom priority to accommodate them.\n        // NOTE:    If the number of priority levels is increased, we may want\n        //          to calculate minimum of priorities in my_offloaded_tasks.\n\n        // First indicate the presence of lower-priority tasks\n        my_market->update_arena_priority( *my_arena, priority(*my_offloaded_tasks) );\n        // Then mark arena as full to unlock arena priority level adjustment\n        // by arena::is_out_of_work(), and ensure worker's presence\n        my_arena->advertise_new_work<arena::wakeup>();\n    }\n    my_local_reload_epoch = reload_epoch;\n    return t;\n}\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_TASK_ISOLATION\ninline task* generic_scheduler::get_task( size_t T, isolation_tag isolation, bool& tasks_omitted )\n#else\ninline task* generic_scheduler::get_task( size_t T )\n#endif /* __TBB_TASK_ISOLATION */\n{\n    __TBB_ASSERT( __TBB_load_relaxed( my_arena_slot->tail ) <= T\n        || is_local_task_pool_quiescent(), \"Is it safe to get a task at position T?\" );\n\n    task* result = my_arena_slot->task_pool_ptr[T];\n    __TBB_ASSERT( !is_poisoned( result ), \"The poisoned task is going to be processed\" );\n#if __TBB_TASK_ISOLATION\n    if ( !result )\n        return NULL;\n\n    bool omit = isolation != no_isolation && isolation != result->prefix().isolation;\n    if ( !omit && !is_proxy( *result ) )\n        return result;\n    else if ( omit ) {\n        tasks_omitted = true;\n        return NULL;\n    }\n#else\n    poison_pointer( my_arena_slot->task_pool_ptr[T] );\n    if ( !result || !is_proxy( *result ) )\n        return result;\n#endif /* __TBB_TASK_ISOLATION */\n\n    task_proxy& tp = static_cast<task_proxy&>(*result);\n    if ( task *t = tp.extract_task<task_proxy::pool_bit>() ) {\n        GATHER_STATISTIC( ++my_counters.proxies_executed );\n        // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.\n        __TBB_ASSERT( is_version_3_task( *t ), \"backwards compatibility with TBB 2.0 broken\" );\n        __TBB_ASSERT( my_innermost_running_task != t, NULL );\n        my_innermost_running_task = t; // prepare for calling note_affinity()\n#if __TBB_TASK_ISOLATION\n        // Task affinity has changed. Postpone calling note_affinity because the task pool is in invalid state.\n        if ( !tasks_omitted )\n#endif /* __TBB_TASK_ISOLATION */\n        {\n            poison_pointer( my_arena_slot->task_pool_ptr[T] );\n            t->note_affinity( my_affinity_id );\n        }\n        return t;\n    }\n\n    // Proxy was empty, so it's our responsibility to free it\n    free_task<small_task>( tp );\n#if __TBB_TASK_ISOLATION\n    if ( tasks_omitted )\n        my_arena_slot->task_pool_ptr[T] = NULL;\n#endif /* __TBB_TASK_ISOLATION */\n    return NULL;\n}\n\ninline task* generic_scheduler::get_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {\n    __TBB_ASSERT( is_task_pool_published(), NULL );\n    // The current task position in the task pool.\n    size_t T0 = __TBB_load_relaxed( my_arena_slot->tail );\n    // The bounds of available tasks in the task pool. H0 is only used when the head bound is reached.\n    size_t H0 = (size_t)-1, T = T0;\n    task* result = NULL;\n    bool task_pool_empty = false;\n    __TBB_ISOLATION_EXPR( bool tasks_omitted = false );\n    do {\n        __TBB_ASSERT( !result, NULL );\n        __TBB_store_relaxed( my_arena_slot->tail, --T );\n        atomic_fence();\n        if ( (intptr_t)__TBB_load_relaxed( my_arena_slot->head ) > (intptr_t)T ) {\n            acquire_task_pool();\n            H0 = __TBB_load_relaxed( my_arena_slot->head );\n            if ( (intptr_t)H0 > (intptr_t)T ) {\n                // The thief has not backed off - nothing to grab.\n                __TBB_ASSERT( H0 == __TBB_load_relaxed( my_arena_slot->head )\n                    && T == __TBB_load_relaxed( my_arena_slot->tail )\n                    && H0 == T + 1, \"victim/thief arbitration algorithm failure\" );\n                reset_task_pool_and_leave();\n                // No tasks in the task pool.\n                task_pool_empty = true;\n                break;\n            } else if ( H0 == T ) {\n                // There is only one task in the task pool.\n                reset_task_pool_and_leave();\n                task_pool_empty = true;\n            } else {\n                // Release task pool if there are still some tasks.\n                // After the release, the tail will be less than T, thus a thief\n                // will not attempt to get a task at position T.\n                release_task_pool();\n            }\n        }\n        __TBB_control_consistency_helper(); // on my_arena_slot->head\n#if __TBB_TASK_ISOLATION\n        result = get_task( T, isolation, tasks_omitted );\n        if ( result ) {\n            poison_pointer( my_arena_slot->task_pool_ptr[T] );\n            break;\n        } else if ( !tasks_omitted ) {\n            poison_pointer( my_arena_slot->task_pool_ptr[T] );\n            __TBB_ASSERT( T0 == T+1, NULL );\n            T0 = T;\n        }\n#else\n        result = get_task( T );\n#endif /* __TBB_TASK_ISOLATION */\n    } while ( !result && !task_pool_empty );\n\n#if __TBB_TASK_ISOLATION\n    if ( tasks_omitted ) {\n        if ( task_pool_empty ) {\n            // All tasks have been checked. The task pool should be  in reset state.\n            // We just restore the bounds for the available tasks.\n            // TODO: Does it have sense to move them to the beginning of the task pool?\n            __TBB_ASSERT( is_quiescent_local_task_pool_reset(), NULL );\n            if ( result ) {\n                // If we have a task, it should be at H0 position.\n                __TBB_ASSERT( H0 == T, NULL );\n                ++H0;\n            }\n            __TBB_ASSERT( H0 <= T0, NULL );\n            if ( H0 < T0 ) {\n                // Restore the task pool if there are some tasks.\n                __TBB_store_relaxed( my_arena_slot->head, H0 );\n                __TBB_store_relaxed( my_arena_slot->tail, T0 );\n                // The release fence is used in publish_task_pool.\n                publish_task_pool();\n                // Synchronize with snapshot as we published some tasks.\n                my_arena->advertise_new_work<arena::wakeup>();\n            }\n        } else {\n            // A task has been obtained. We need to make a hole in position T.\n            __TBB_ASSERT( is_task_pool_published(), NULL );\n            __TBB_ASSERT( result, NULL );\n            my_arena_slot->task_pool_ptr[T] = NULL;\n            __TBB_store_with_release( my_arena_slot->tail, T0 );\n            // Synchronize with snapshot as we published some tasks.\n            // TODO: consider some approach not to call wakeup for each time. E.g. check if the tail reached the head.\n            my_arena->advertise_new_work<arena::wakeup>();\n        }\n\n        // Now it is safe to call note_affinity because the task pool is restored.\n        if ( my_innermost_running_task == result ) {\n            assert_task_valid( result );\n            result->note_affinity( my_affinity_id );\n        }\n    }\n#endif /* __TBB_TASK_ISOLATION */\n    __TBB_ASSERT( (intptr_t)__TBB_load_relaxed( my_arena_slot->tail ) >= 0, NULL );\n    __TBB_ASSERT( result || __TBB_ISOLATION_EXPR( tasks_omitted || ) is_quiescent_local_task_pool_reset(), NULL );\n    return result;\n} // generic_scheduler::get_task\n\ntask* generic_scheduler::steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_slot, isolation_tag isolation ) ) {\n    task** victim_pool = lock_task_pool( &victim_slot );\n    if ( !victim_pool )\n        return NULL;\n    task* result = NULL;\n    size_t H = __TBB_load_relaxed(victim_slot.head); // mirror\n    size_t H0 = H;\n    bool tasks_omitted = false;\n    do {\n        __TBB_store_relaxed( victim_slot.head, ++H );\n        atomic_fence();\n        if ( (intptr_t)H > (intptr_t)__TBB_load_relaxed( victim_slot.tail ) ) {\n            // Stealing attempt failed, deque contents has not been changed by us\n            GATHER_STATISTIC( ++my_counters.thief_backoffs );\n            __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );\n            __TBB_ASSERT( !result, NULL );\n            goto unlock;\n        }\n        __TBB_control_consistency_helper(); // on victim_slot.tail\n        result = victim_pool[H-1];\n        __TBB_ASSERT( !is_poisoned( result ), NULL );\n\n        if ( result ) {\n            __TBB_ISOLATION_EXPR( if ( isolation == no_isolation || isolation == result->prefix().isolation ) )\n            {\n                if ( !is_proxy( *result ) )\n                    break;\n                task_proxy& tp = *static_cast<task_proxy*>(result);\n                // If mailed task is likely to be grabbed by its destination thread, skip it.\n                if ( !(task_proxy::is_shared( tp.task_and_tag ) && tp.outbox->recipient_is_idle()) )\n                    break;\n                GATHER_STATISTIC( ++my_counters.proxies_bypassed );\n            }\n            // The task cannot be executed either due to isolation or proxy contraints.\n            result = NULL;\n            tasks_omitted = true;\n        } else if ( !tasks_omitted ) {\n            // Cleanup the task pool from holes until a task is skipped.\n            __TBB_ASSERT( H0 == H-1, NULL );\n            poison_pointer( victim_pool[H0] );\n            H0 = H;\n        }\n    } while ( !result );\n    __TBB_ASSERT( result, NULL );\n\n    // emit \"task was consumed\" signal\n    ITT_NOTIFY( sync_acquired, (void*)((uintptr_t)&victim_slot+sizeof( uintptr_t )) );\n    poison_pointer( victim_pool[H-1] );\n    if ( tasks_omitted ) {\n        // Some proxies in the task pool have been omitted. Set the stolen task to NULL.\n        victim_pool[H-1] = NULL;\n        __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );\n    }\nunlock:\n    unlock_task_pool( &victim_slot, victim_pool );\n#if __TBB_PREFETCHING\n    __TBB_cl_evict(&victim_slot.head);\n    __TBB_cl_evict(&victim_slot.tail);\n#endif\n    if ( tasks_omitted )\n        // Synchronize with snapshot as the head and tail can be bumped which can falsely trigger EMPTY state\n        my_arena->advertise_new_work<arena::wakeup>();\n    return result;\n}\n\ntask* generic_scheduler::get_mailbox_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) {\n    __TBB_ASSERT( my_affinity_id>0, \"not in arena\" );\n    while ( task_proxy* const tp = my_inbox.pop( __TBB_ISOLATION_EXPR( isolation ) ) ) {\n        if ( task* result = tp->extract_task<task_proxy::mailbox_bit>() ) {\n            ITT_NOTIFY( sync_acquired, my_inbox.outbox() );\n            result->prefix().extra_state |= es_task_is_stolen;\n            return result;\n        }\n        // We have exclusive access to the proxy, and can destroy it.\n        free_task<no_cache_small_task>(*tp);\n    }\n    return NULL;\n}\n\ninline void generic_scheduler::publish_task_pool() {\n    __TBB_ASSERT ( my_arena, \"no arena: initialization not completed?\" );\n    __TBB_ASSERT ( my_arena_index < my_arena->my_num_slots, \"arena slot index is out-of-bound\" );\n    __TBB_ASSERT ( my_arena_slot == &my_arena->my_slots[my_arena_index], NULL);\n    __TBB_ASSERT ( my_arena_slot->task_pool == EmptyTaskPool, \"someone else grabbed my arena slot?\" );\n    __TBB_ASSERT ( __TBB_load_relaxed(my_arena_slot->head) < __TBB_load_relaxed(my_arena_slot->tail),\n                   \"entering arena without tasks to share\" );\n    // Release signal on behalf of previously spawned tasks (when this thread was not in arena yet)\n    ITT_NOTIFY(sync_releasing, my_arena_slot);\n    __TBB_store_with_release( my_arena_slot->task_pool, my_arena_slot->task_pool_ptr );\n}\n\ninline void generic_scheduler::leave_task_pool() {\n    __TBB_ASSERT( is_task_pool_published(), \"Not in arena\" );\n    // Do not reset my_arena_index. It will be used to (attempt to) re-acquire the slot next time\n    __TBB_ASSERT( &my_arena->my_slots[my_arena_index] == my_arena_slot, \"arena slot and slot index mismatch\" );\n    __TBB_ASSERT ( my_arena_slot->task_pool == LockedTaskPool, \"Task pool must be locked when leaving arena\" );\n    __TBB_ASSERT ( is_quiescent_local_task_pool_empty(), \"Cannot leave arena when the task pool is not empty\" );\n    ITT_NOTIFY(sync_releasing, &my_arena->my_slots[my_arena_index]);\n    // No release fence is necessary here as this assignment precludes external\n    // accesses to the local task pool when becomes visible. Thus it is harmless\n    // if it gets hoisted above preceding local bookkeeping manipulations.\n    __TBB_store_relaxed( my_arena_slot->task_pool, EmptyTaskPool );\n}\n\ngeneric_scheduler* generic_scheduler::create_worker( market& m, size_t index ) {\n    generic_scheduler* s = allocate_scheduler( m );\n    __TBB_ASSERT(index, \"workers should have index > 0\");\n    s->my_arena_index = index; // index is not a real slot in arena yet\n    s->my_dummy_task->prefix().ref_count = 2;\n    s->my_properties.type = scheduler_properties::worker;\n    // Do not call init_stack_info before the scheduler is set as master or worker.\n    s->init_stack_info();\n    governor::sign_on(s);\n    return s;\n}\n\n// TODO: make it a member method\ngeneric_scheduler* generic_scheduler::create_master( arena* a ) {\n    // add an internal market reference; the public reference is possibly added in create_arena\n    generic_scheduler* s = allocate_scheduler( market::global_market(/*is_public=*/false) );\n    __TBB_ASSERT( !s->my_arena, NULL );\n    __TBB_ASSERT( s->my_market, NULL );\n    task& t = *s->my_dummy_task;\n    s->my_properties.type = scheduler_properties::master;\n    t.prefix().ref_count = 1;\n#if __TBB_TASK_GROUP_CONTEXT\n    t.prefix().context = new ( NFS_Allocate(1, sizeof(task_group_context), NULL) )\n            task_group_context( task_group_context::isolated, task_group_context::default_traits );\n#if __TBB_FP_CONTEXT\n    s->default_context()->capture_fp_settings();\n#endif\n    // Do not call init_stack_info before the scheduler is set as master or worker.\n    s->init_stack_info();\n    context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);\n    s->my_market->my_masters.push_front( *s );\n    lock.release();\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    if( a ) {\n    // Master thread always occupies the first slot\n        s->attach_arena( a, /*index*/0, /*is_master*/true );\n    s->my_arena_slot->my_scheduler = s;\n        a->my_default_ctx = s->default_context(); // also transfers implied ownership\n    }\n    __TBB_ASSERT( s->my_arena_index == 0, \"Master thread must occupy the first slot in its arena\" );\n    governor::sign_on(s);\n\n#if _WIN32||_WIN64\n    s->my_market->register_master( s->master_exec_resource );\n#endif /* _WIN32||_WIN64 */\n    // Process any existing observers.\n#if __TBB_ARENA_OBSERVER\n    __TBB_ASSERT( !a || a->my_observers.empty(), \"Just created arena cannot have any observers associated with it\" );\n#endif\n#if __TBB_SCHEDULER_OBSERVER\n    the_global_observer_list.notify_entry_observers( s->my_last_global_observer, /*worker=*/false );\n#endif /* __TBB_SCHEDULER_OBSERVER */\n    return s;\n}\n\nvoid generic_scheduler::cleanup_worker( void* arg, bool worker ) {\n    generic_scheduler& s = *(generic_scheduler*)arg;\n    __TBB_ASSERT( !s.my_arena_slot, \"cleaning up attached worker\" );\n#if __TBB_SCHEDULER_OBSERVER\n    if ( worker ) // can be called by master for worker, do not notify master twice\n        the_global_observer_list.notify_exit_observers( s.my_last_global_observer, /*worker=*/true );\n#endif /* __TBB_SCHEDULER_OBSERVER */\n    s.free_scheduler();\n}\n\nbool generic_scheduler::cleanup_master( bool blocking_terminate ) {\n    arena* const a = my_arena;\n    market * const m = my_market;\n    __TBB_ASSERT( my_market, NULL );\n    if( a && is_task_pool_published() ) {\n        acquire_task_pool();\n        if ( my_arena_slot->task_pool == EmptyTaskPool ||\n             __TBB_load_relaxed(my_arena_slot->head) >= __TBB_load_relaxed(my_arena_slot->tail) )\n        {\n            // Local task pool is empty\n            leave_task_pool();\n        }\n        else {\n            // Master's local task pool may e.g. contain proxies of affinitized tasks.\n            release_task_pool();\n            __TBB_ASSERT ( governor::is_set(this), \"TLS slot is cleared before the task pool cleanup\" );\n            local_wait_for_all( *my_dummy_task, NULL );\n            __TBB_ASSERT( !is_task_pool_published(), NULL );\n            __TBB_ASSERT ( governor::is_set(this), \"Other thread reused our TLS key during the task pool cleanup\" );\n        }\n    }\n#if __TBB_ARENA_OBSERVER\n    if( a )\n        a->my_observers.notify_exit_observers( my_last_local_observer, /*worker=*/false );\n#endif\n#if __TBB_SCHEDULER_OBSERVER\n    the_global_observer_list.notify_exit_observers( my_last_global_observer, /*worker=*/false );\n#endif /* __TBB_SCHEDULER_OBSERVER */\n#if _WIN32||_WIN64\n    m->unregister_master( master_exec_resource );\n#endif /* _WIN32||_WIN64 */\n    if( a ) {\n        __TBB_ASSERT(a->my_slots+0 == my_arena_slot, NULL);\n#if __TBB_STATISTICS\n        *my_arena_slot->my_counters += my_counters;\n#endif /* __TBB_STATISTICS */\n        __TBB_store_with_release(my_arena_slot->my_scheduler, (generic_scheduler*)NULL);\n    }\n#if __TBB_TASK_GROUP_CONTEXT\n    else { // task_group_context ownership was not transferred to arena\n        default_context()->~task_group_context();\n        NFS_Free(default_context());\n    }\n    context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);\n    my_market->my_masters.remove( *this );\n    lock.release();\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    my_arena_slot = NULL; // detached from slot\n    free_scheduler(); // do not use scheduler state after this point\n\n    if( a )\n        a->on_thread_leaving<arena::ref_external>();\n    // If there was an associated arena, it added a public market reference\n    return m->release( /*is_public*/ a != NULL, blocking_terminate );\n}\n\n} // namespace internal\n} // namespace tbb\n\n/*\n    Comments:\n\n1.  The premise of the cancellation support implementation is that cancellations are\n    not part of the hot path of the program execution. Therefore all changes in its\n    implementation in order to reduce the overhead of the cancellation control flow\n    should be done only in ways that do not increase overhead of the normal execution.\n\n    In general contexts are used by all threads and their descendants are created in\n    different threads as well. In order to minimize impact of the cross-thread tree\n    maintenance (first of all because of the synchronization), the tree of contexts\n    is split into pieces, each of which is handled by the only thread. Such pieces\n    are represented as lists of contexts, members of which are contexts that were\n    bound to their parents in the given thread.\n\n    The context tree maintenance and cancellation propagation algorithms is designed\n    in such a manner that cross-thread access to a context list will take place only\n    when cancellation signal is sent (by user or when an exception happens), and\n    synchronization is necessary only then. Thus the normal execution flow (without\n    exceptions and cancellation) remains free from any synchronization done on\n    behalf of exception handling and cancellation support.\n\n2.  Consider parallel cancellations at the different levels of the context tree:\n\n        Ctx1 <- Cancelled by Thread1            |- Thread2 started processing\n         |                                      |\n        Ctx2                                    |- Thread1 started processing\n         |                                   T1 |- Thread2 finishes and syncs up local counters\n        Ctx3 <- Cancelled by Thread2            |\n         |                                      |- Ctx5 is bound to Ctx2\n        Ctx4                                    |\n                                             T2 |- Thread1 reaches Ctx2\n\n    Thread-propagator of each cancellation increments global counter. However the thread\n    propagating the cancellation from the outermost context (Thread1) may be the last\n    to finish. Which means that the local counters may be synchronized earlier (by Thread2,\n    at Time1) than it propagated cancellation into Ctx2 (at time Time2). If a new context\n    (Ctx5) is created and bound to Ctx2 between Time1 and Time2, checking its parent only\n    (Ctx2) may result in cancellation request being lost.\n\n    This issue is solved by doing the whole propagation under the lock.\n\n    If we need more concurrency while processing parallel cancellations, we could try\n    the following modification of the propagation algorithm:\n\n    advance global counter and remember it\n    for each thread:\n        scan thread's list of contexts\n    for each thread:\n        sync up its local counter only if the global counter has not been changed\n\n    However this version of the algorithm requires more analysis and verification.\n\n3.  There is no portable way to get stack base address in Posix, however the modern\n    Linux versions provide pthread_attr_np API that can be used  to obtain thread's\n    stack size and base address. Unfortunately even this function does not provide\n    enough information for the main thread on IA-64 architecture (RSE spill area\n    and memory stack are allocated as two separate discontinuous chunks of memory),\n    and there is no portable way to discern the main and the secondary threads.\n    Thus for macOS* and IA-64 architecture for Linux* OS we use the TBB worker stack size for\n    all threads and use the current stack top as the stack base. This simplified\n    approach is based on the following assumptions:\n    1) If the default stack size is insufficient for the user app needs, the\n    required amount will be explicitly specified by the user at the point of the\n    TBB scheduler initialization (as an argument to tbb::task_scheduler_init\n    constructor).\n    2) When a master thread initializes the scheduler, it has enough space on its\n    stack. Here \"enough\" means \"at least as much as worker threads have\".\n    3) If the user app strives to conserve the memory by cutting stack size, it\n    should do this for TBB workers too (as in the #1).\n*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/scheduler.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_scheduler_H\n#define _TBB_scheduler_H\n\n#include \"scheduler_common.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"mailbox.h\"\n#include \"tbb_misc.h\" // for FastRandom\n#include \"itt_notify.h\"\n#include \"../rml/include/rml_tbb.h\"\n\n#include \"intrusive_list.h\"\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n#include \"cilk-tbb-interop.h\"\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\nnamespace tbb {\nnamespace internal {\n\ntemplate<typename SchedulerTraits> class custom_scheduler;\n\n//------------------------------------------------------------------------\n// generic_scheduler\n//------------------------------------------------------------------------\n\n#define EmptyTaskPool ((task**)0)\n#define LockedTaskPool ((task**)~(intptr_t)0)\n\n//! Bit-field representing properties of a sheduler\nstruct scheduler_properties {\n    static const bool worker = false;\n    static const bool master = true;\n    //! Indicates that a scheduler acts as a master or a worker.\n    bool type : 1;\n    //! Indicates that a scheduler is on outermost level.\n    /**  Note that the explicit execute method will set this property. **/\n    bool outermost : 1;\n    //! Reserved bits\n    unsigned char : 6;\n};\n\nstruct scheduler_state {\n    //! Index of the arena slot the scheduler occupies now, or occupied last time.\n    size_t my_arena_index; // TODO: make it unsigned and pair with my_affinity_id to fit into cache line\n\n    //! Pointer to the slot in the arena we own at the moment.\n    arena_slot* my_arena_slot;\n\n    //! The arena that I own (if master) or am servicing at the moment (if worker)\n    arena* my_arena;\n\n    //! Innermost task whose task::execute() is running. A dummy task on the outermost level.\n    task* my_innermost_running_task;\n\n    mail_inbox my_inbox;\n\n    //! The mailbox id assigned to this scheduler.\n    /** The id is assigned upon first entry into the arena.\n        TODO: how are id's being garbage collected?\n        TODO: master thread may enter arena and leave and then reenter.\n                We want to give it the same affinity_id upon reentry, if practical.\n        TODO: investigate if it makes sense to merge this field into scheduler_properties.\n      */\n    affinity_id my_affinity_id;\n\n    scheduler_properties my_properties;\n\n#if __TBB_SCHEDULER_OBSERVER\n    //! Last observer in the global observers list processed by this scheduler\n    observer_proxy* my_last_global_observer;\n#endif\n\n#if __TBB_ARENA_OBSERVER\n    //! Last observer in the local observers list processed by this scheduler\n    observer_proxy* my_last_local_observer;\n#endif\n#if __TBB_TASK_PRIORITY\n    //! Latest known highest priority of tasks in the market or arena.\n    /** Master threads currently tracks only tasks in their arenas, while workers\n        take into account global top priority (among all arenas in the market). **/\n    volatile intptr_t *my_ref_top_priority;\n\n    //! Pointer to market's (for workers) or current arena's (for the master) reload epoch counter.\n    volatile uintptr_t *my_ref_reload_epoch;\n#endif /* __TBB_TASK_PRIORITY */\n};\n\n//! Work stealing task scheduler.\n/** None of the fields here are ever read or written by threads other than\n    the thread that creates the instance.\n\n    Class generic_scheduler is an abstract base class that contains most of the scheduler,\n    except for tweaks specific to processors and tools (e.g. VTune).\n    The derived template class custom_scheduler<SchedulerTraits> fills in the tweaks. */\nclass generic_scheduler: public scheduler\n                       , public ::rml::job\n                       , public intrusive_list_node\n                       , public scheduler_state {\npublic: // almost every class in TBB uses generic_scheduler\n\n    //! If sizeof(task) is <=quick_task_size, it is handled on a free list instead of malloc'd.\n    static const size_t quick_task_size = 256-task_prefix_reservation_size;\n\n    static bool is_version_3_task( task& t ) {\n        return (t.prefix().extra_state & 0x0F)>=0x1;\n    }\n\n    //! Position in the call stack specifying its maximal filling when stealing is still allowed\n    uintptr_t my_stealing_threshold;\n#if __TBB_ipf\n    //! Position in the RSE backup area specifying its maximal filling when stealing is still allowed\n    uintptr_t my_rsb_stealing_threshold;\n#endif\n\n    static const size_t null_arena_index = ~size_t(0);\n\n    inline bool is_task_pool_published () const;\n\n    inline bool is_local_task_pool_quiescent () const;\n\n    inline bool is_quiescent_local_task_pool_empty () const;\n\n    inline bool is_quiescent_local_task_pool_reset () const;\n\n    //! The market I am in\n    market* my_market;\n\n    //! Random number generator used for picking a random victim from which to steal.\n    FastRandom my_random;\n\n    //! Free list of small tasks that can be reused.\n    task* my_free_list;\n\n#if __TBB_HOARD_NONLOCAL_TASKS\n    //! Free list of small non-local tasks that should be returned or can be reused.\n    task* my_nonlocal_free_list;\n#endif\n    //! Fake root task created by slave threads.\n    /** The task is used as the \"parent\" argument to method wait_for_all. */\n    task* my_dummy_task;\n\n    //! Reference count for scheduler\n    /** Number of task_scheduler_init objects that point to this scheduler */\n    long my_ref_count;\n\n    inline void attach_mailbox( affinity_id id );\n\n    /* A couple of bools can be located here because space is otherwise just padding after my_affinity_id. */\n\n    //! True if *this was created by automatic TBB initialization\n    bool my_auto_initialized;\n\n#if __TBB_COUNT_TASK_NODES\n    //! Net number of big task objects that have been allocated but not yet freed.\n    intptr_t my_task_node_count;\n#endif /* __TBB_COUNT_TASK_NODES */\n\n    //! Sets up the data necessary for the stealing limiting heuristics\n    void init_stack_info ();\n\n    //! Returns true if stealing is allowed\n    bool can_steal () {\n        int anchor;\n        // TODO IDEA: Add performance warning?\n#if __TBB_ipf\n        return my_stealing_threshold < (uintptr_t)&anchor && (uintptr_t)__TBB_get_bsp() < my_rsb_stealing_threshold;\n#else\n        return my_stealing_threshold < (uintptr_t)&anchor;\n#endif\n    }\n\n    //! Used by workers to enter the task pool\n    /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/\n    void publish_task_pool();\n\n    //! Leave the task pool\n    /** Leaving task pool automatically releases the task pool if it is locked. **/\n    void leave_task_pool();\n\n    //! Resets head and tail indices to 0, and leaves task pool\n    /** The task pool must be locked by the owner (via acquire_task_pool).**/\n    inline void reset_task_pool_and_leave ();\n\n    //! Locks victim's task pool, and returns pointer to it. The pointer can be NULL.\n    /** Garbles victim_arena_slot->task_pool for the duration of the lock. **/\n    task** lock_task_pool( arena_slot* victim_arena_slot ) const;\n\n    //! Unlocks victim's task pool\n    /** Restores victim_arena_slot->task_pool munged by lock_task_pool. **/\n    void unlock_task_pool( arena_slot* victim_arena_slot, task** victim_task_pool ) const;\n\n    //! Locks the local task pool\n    /** Garbles my_arena_slot->task_pool for the duration of the lock. Requires\n        correctly set my_arena_slot->task_pool_ptr. **/\n    void acquire_task_pool() const;\n\n    //! Unlocks the local task pool\n    /** Restores my_arena_slot->task_pool munged by acquire_task_pool. Requires\n        correctly set my_arena_slot->task_pool_ptr. **/\n    void release_task_pool() const;\n\n    //! Checks if t is affinitized to another thread, and if so, bundles it as proxy.\n    /** Returns either t or proxy containing t. **/\n    task* prepare_for_spawning( task* t );\n\n    //! Makes newly spawned tasks visible to thieves\n    inline void commit_spawned_tasks( size_t new_tail );\n\n    //! Makes relocated tasks visible to thieves and releases the local task pool.\n    /** Obviously, the task pool must be locked when calling this method. **/\n    inline void commit_relocated_tasks( size_t new_tail );\n\n    //! Get a task from the local pool.\n    /** Called only by the pool owner.\n        Returns the pointer to the task or NULL if a suitable task is not found.\n        Resets the pool if it is empty. **/\n    task* get_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );\n\n    //! Get a task from the local pool at specified location T.\n    /** Returns the pointer to the task or NULL if the task cannot be executed,\n        e.g. proxy has been deallocated or isolation constraint is not met.\n        tasks_omitted tells if some tasks have been omitted.\n        Called only by the pool owner. The caller should guarantee that the\n        position T is not available for a thief. **/\n#if __TBB_TASK_ISOLATION\n    task* get_task( size_t T, isolation_tag isolation, bool& tasks_omitted );\n#else\n    task* get_task( size_t T );\n#endif /* __TBB_TASK_ISOLATION */\n    //! Attempt to get a task from the mailbox.\n    /** Gets a task only if it has not been executed by its sender or a thief\n        that has stolen it from the sender's task pool. Otherwise returns NULL.\n\n        This method is intended to be used only by the thread extracting the proxy\n        from its mailbox. (In contrast to local task pool, mailbox can be read only\n        by its owner). **/\n    task* get_mailbox_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );\n\n    //! True if t is a task_proxy\n    static bool is_proxy( const task& t ) {\n        return t.prefix().extra_state==es_task_proxy;\n    }\n\n    //! Steal task from another scheduler's ready pool.\n    task* steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_arena_slot, isolation_tag isolation ) );\n\n    /** Initial size of the task deque sufficient to serve without reallocation\n        4 nested parallel_for calls with iteration space of 65535 grains each. **/\n    static const size_t min_task_pool_size = 64;\n\n    //! Makes sure that the task pool can accommodate at least n more elements\n    /** If necessary relocates existing task pointers or grows the ready task deque.\n        Returns (possible updated) tail index (not accounting for n). **/\n    size_t prepare_task_pool( size_t n );\n\n    //! Initialize a scheduler for a master thread.\n    static generic_scheduler* create_master( arena* a );\n\n    //! Perform necessary cleanup when a master thread stops using TBB.\n    bool cleanup_master( bool blocking_terminate );\n\n    //! Initialize a scheduler for a worker thread.\n    static generic_scheduler* create_worker( market& m, size_t index );\n\n    //! Perform necessary cleanup when a worker thread finishes.\n    static void cleanup_worker( void* arg, bool worker );\n\nprotected:\n    template<typename SchedulerTraits> friend class custom_scheduler;\n    generic_scheduler( market & );\n\npublic:\n#if TBB_USE_ASSERT > 1\n    //! Check that internal data structures are in consistent state.\n    /** Raises __TBB_ASSERT failure if inconsistency is found. */\n    void assert_task_pool_valid() const;\n#else\n    void assert_task_pool_valid() const {}\n#endif /* TBB_USE_ASSERT <= 1 */\n\n    void attach_arena( arena*, size_t index, bool is_master );\n    void nested_arena_entry( arena*, size_t );\n    void nested_arena_exit();\n    void wait_until_empty();\n\n    void spawn( task& first, task*& next ) __TBB_override;\n\n    void spawn_root_and_wait( task& first, task*& next ) __TBB_override;\n\n    void enqueue( task&, void* reserved ) __TBB_override;\n\n    void local_spawn( task* first, task*& next );\n    void local_spawn_root_and_wait( task* first, task*& next );\n    virtual void local_wait_for_all( task& parent, task* child ) = 0;\n\n    //! Destroy and deallocate this scheduler object\n    void free_scheduler();\n\n    //! Allocate task object, either from the heap or a free list.\n    /** Returns uninitialized task object with initialized prefix. */\n    task& allocate_task( size_t number_of_bytes,\n                       __TBB_CONTEXT_ARG(task* parent, task_group_context* context) );\n\n    //! Put task on free list.\n    /** Does not call destructor. */\n    template<free_task_hint h>\n    void free_task( task& t );\n\n    //! Return task object to the memory allocator.\n    inline void deallocate_task( task& t );\n\n    //! True if running on a worker thread, false otherwise.\n    inline bool is_worker() const;\n\n    //! True if the scheduler is on the outermost dispatch level.\n    inline bool outermost_level() const;\n\n    //! True if the scheduler is on the outermost dispatch level in a master thread.\n    /** Returns true when this scheduler instance is associated with an application\n        thread, and is not executing any TBB task. This includes being in a TBB\n        dispatch loop (one of wait_for_all methods) invoked directly from that thread. **/\n    inline bool master_outermost_level () const;\n\n    //! True if the scheduler is on the outermost dispatch level in a worker thread.\n    inline bool worker_outermost_level () const;\n\n    //! Returns the concurrency limit of the current arena.\n    unsigned max_threads_in_arena();\n\n#if __TBB_COUNT_TASK_NODES\n    intptr_t get_task_node_count( bool count_arena_workers = false );\n#endif /* __TBB_COUNT_TASK_NODES */\n\n    //! Special value used to mark my_return_list as not taking any more entries.\n    static task* plugged_return_list() {return (task*)(intptr_t)(-1);}\n\n    //! Number of small tasks that have been allocated by this scheduler.\n    __TBB_atomic intptr_t my_small_task_count;\n\n    //! List of small tasks that have been returned to this scheduler by other schedulers.\n    // TODO IDEA: see if putting my_return_list on separate cache line improves performance\n    task* my_return_list;\n\n    //! Try getting a task from other threads (via mailbox, stealing, FIFO queue, orphans adoption).\n    /** Returns obtained task or NULL if all attempts fail. */\n    virtual task* receive_or_steal_task( __TBB_ISOLATION_ARG( __TBB_atomic reference_count& completion_ref_count, isolation_tag isolation ) ) = 0;\n\n    //! Free a small task t that that was allocated by a different scheduler\n    void free_nonlocal_small_task( task& t );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Returns task group context used by this scheduler instance.\n    /** This context is associated with root tasks created by a master thread\n        without explicitly specified context object outside of any running task.\n\n        Note that the default context of a worker thread is never accessed by\n        user code (directly or indirectly). **/\n    inline task_group_context* default_context ();\n\n    //! Padding isolating thread-local members from members that can be written to by other threads.\n    char _padding1[NFS_MaxLineSize - sizeof(context_list_node_t)];\n\n    //! Head of the thread specific list of task group contexts.\n    context_list_node_t my_context_list_head;\n\n    //! Mutex protecting access to the list of task group contexts.\n    // TODO: check whether it can be deadly preempted and replace by spinning/sleeping mutex\n    spin_mutex my_context_list_mutex;\n\n    //! Last state propagation epoch known to this thread\n    /** Together with the_context_state_propagation_epoch constitute synchronization protocol\n        that keeps hot path of task group context construction destruction mostly\n        lock-free.\n        When local epoch equals the global one, the state of task group contexts\n        registered with this thread is consistent with that of the task group trees\n        they belong to. **/\n    uintptr_t my_context_state_propagation_epoch;\n\n    //! Flag indicating that a context is being destructed by its owner thread\n    /** Together with my_nonlocal_ctx_list_update constitute synchronization protocol\n        that keeps hot path of context destruction (by the owner thread) mostly\n        lock-free. **/\n    tbb::atomic<uintptr_t> my_local_ctx_list_update;\n\n#if __TBB_TASK_PRIORITY\n    //! Returns reference priority used to decide whether a task should be offloaded.\n    inline intptr_t effective_reference_priority () const;\n\n    // TODO: move into slots and fix is_out_of_work\n    //! Task pool for offloading tasks with priorities lower than the current top priority.\n    task* my_offloaded_tasks;\n\n    //! Points to the last offloaded task in the my_offloaded_tasks list.\n    task** my_offloaded_task_list_tail_link;\n\n    //! Indicator of how recently the offload area was checked for the presence of top priority tasks.\n    uintptr_t my_local_reload_epoch;\n\n    //! Indicates that the pool is likely non-empty even if appears so from outside\n    volatile bool my_pool_reshuffling_pending;\n\n    //! Searches offload area for top priority tasks and reloads found ones into primary task pool.\n    /** Returns one of the found tasks or NULL. **/\n    task* reload_tasks( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );\n\n    task* reload_tasks( task*& offloaded_tasks, task**& offloaded_task_list_link, __TBB_ISOLATION_ARG( intptr_t top_priority, isolation_tag isolation ) );\n\n    //! Moves tasks with priority below the top one from primary task pool into offload area.\n    /** Returns the next execution candidate task or NULL. **/\n    task* winnow_task_pool ( __TBB_ISOLATION_EXPR( isolation_tag isolation ) );\n\n    //! Get a task from locked or empty pool in range [H0, T0). Releases or unlocks the task pool.\n    /** Returns the found task or NULL. **/\n    task *get_task_and_activate_task_pool( size_t H0 , __TBB_ISOLATION_ARG( size_t T0, isolation_tag isolation ) );\n\n    //! Unconditionally moves the task into offload area.\n    inline void offload_task ( task& t, intptr_t task_priority );\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Detaches abandoned contexts\n    /** These contexts must be destroyed by other threads. **/\n    void cleanup_local_context_list ();\n\n    //! Finds all contexts registered by this scheduler affected by the state change\n    //! and propagates the new state to them.\n    template <typename T>\n    void propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );\n\n    // check consistency\n    static void assert_context_valid(const task_group_context *tgc) {\n        suppress_unused_warning(tgc);\n#if TBB_USE_ASSERT\n        __TBB_ASSERT(tgc, NULL);\n        uintptr_t ctx = tgc->my_version_and_traits;\n        __TBB_ASSERT(is_alive(ctx), \"referenced task_group_context was destroyed\");\n        static const char *msg = \"task_group_context is invalid\";\n        __TBB_ASSERT(!(ctx&~(3|(7<<task_group_context::traits_offset))), msg); // the value fits known values of versions and traits\n        __TBB_ASSERT(tgc->my_kind < task_group_context::dying, msg);\n        __TBB_ASSERT(tgc->my_cancellation_requested == 0 || tgc->my_cancellation_requested == 1, msg);\n        __TBB_ASSERT(tgc->my_state < task_group_context::low_unused_state_bit, msg);\n        if(tgc->my_kind != task_group_context::isolated) {\n            __TBB_ASSERT(tgc->my_owner, msg);\n            __TBB_ASSERT(tgc->my_node.my_next && tgc->my_node.my_prev, msg);\n        }\n#if __TBB_TASK_PRIORITY\n        assert_priority_valid(tgc->my_priority);\n#endif\n        if(tgc->my_parent)\n#if TBB_USE_ASSERT > 1\n            assert_context_valid(tgc->my_parent);\n#else\n            __TBB_ASSERT(is_alive(tgc->my_parent->my_version_and_traits), msg);\n#endif\n#endif\n    }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if _WIN32||_WIN64\nprivate:\n    //! Handle returned by RML when registering a master with RML\n    ::rml::server::execution_resource_t master_exec_resource;\npublic:\n#endif /* _WIN32||_WIN64 */\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Flag indicating that a context is being destructed by non-owner thread.\n    /** See also my_local_ctx_list_update. **/\n    tbb::atomic<uintptr_t> my_nonlocal_ctx_list_update;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_SURVIVE_THREAD_SWITCH\n    __cilk_tbb_unwatch_thunk my_cilk_unwatch_thunk;\n#if TBB_USE_ASSERT\n    //! State values used to check interface contract with cilkrts.\n    /** Names of cs_running...cs_freed derived from state machine diagram in cilk-tbb-interop.h */\n    enum cilk_state_t {\n        cs_none=0xF000, // Start at nonzero value so that we can detect use of zeroed memory.\n        cs_running,\n        cs_limbo,\n        cs_freed\n    };\n    cilk_state_t my_cilk_state;\n#endif /* TBB_USE_ASSERT */\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n#if __TBB_STATISTICS\n    //! Set of counters to track internal statistics on per thread basis\n    /** Placed at the end of the class definition to minimize the disturbance of\n        the core logic memory operations. **/\n    mutable statistics_counters my_counters;\n#endif /* __TBB_STATISTICS */\n\n}; // class generic_scheduler\n\n\n} // namespace internal\n} // namespace tbb\n\n#include \"arena.h\"\n#include \"governor.h\"\n\nnamespace tbb {\nnamespace internal {\n\ninline bool generic_scheduler::is_task_pool_published () const {\n    __TBB_ASSERT(my_arena_slot, 0);\n    return my_arena_slot->task_pool != EmptyTaskPool;\n}\n\ninline bool generic_scheduler::is_local_task_pool_quiescent () const {\n    __TBB_ASSERT(my_arena_slot, 0);\n    task** tp = my_arena_slot->task_pool;\n    return tp == EmptyTaskPool || tp == LockedTaskPool;\n}\n\ninline bool generic_scheduler::is_quiescent_local_task_pool_empty () const {\n    __TBB_ASSERT( is_local_task_pool_quiescent(), \"Task pool is not quiescent\" );\n    return __TBB_load_relaxed(my_arena_slot->head) == __TBB_load_relaxed(my_arena_slot->tail);\n}\n\ninline bool generic_scheduler::is_quiescent_local_task_pool_reset () const {\n    __TBB_ASSERT( is_local_task_pool_quiescent(), \"Task pool is not quiescent\" );\n    return __TBB_load_relaxed(my_arena_slot->head) == 0 && __TBB_load_relaxed(my_arena_slot->tail) == 0;\n}\n\ninline bool generic_scheduler::outermost_level () const {\n    return my_properties.outermost;\n}\n\ninline bool generic_scheduler::master_outermost_level () const {\n    return !is_worker() && outermost_level();\n}\n\ninline bool generic_scheduler::worker_outermost_level () const {\n    return is_worker() && outermost_level();\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline task_group_context* generic_scheduler::default_context () {\n    return my_dummy_task->prefix().context;\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\ninline void generic_scheduler::attach_mailbox( affinity_id id ) {\n    __TBB_ASSERT(id>0,NULL);\n    my_inbox.attach( my_arena->mailbox(id) );\n    my_affinity_id = id;\n}\n\ninline bool generic_scheduler::is_worker() const {\n    return my_properties.type == scheduler_properties::worker;\n}\n\ninline unsigned generic_scheduler::max_threads_in_arena() {\n    __TBB_ASSERT(my_arena, NULL);\n    return my_arena->my_num_slots;\n}\n\n//! Return task object to the memory allocator.\ninline void generic_scheduler::deallocate_task( task& t ) {\n#if TBB_USE_ASSERT\n    task_prefix& p = t.prefix();\n    p.state = 0xFF;\n    p.extra_state = 0xFF;\n    poison_pointer(p.next);\n#endif /* TBB_USE_ASSERT */\n    NFS_Free((char*)&t-task_prefix_reservation_size);\n#if __TBB_COUNT_TASK_NODES\n    --my_task_node_count;\n#endif /* __TBB_COUNT_TASK_NODES */\n}\n\n#if __TBB_COUNT_TASK_NODES\ninline intptr_t generic_scheduler::get_task_node_count( bool count_arena_workers ) {\n    return my_task_node_count + (count_arena_workers? my_arena->workers_task_node_count(): 0);\n}\n#endif /* __TBB_COUNT_TASK_NODES */\n\ninline void generic_scheduler::reset_task_pool_and_leave () {\n    __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, \"Task pool must be locked when resetting task pool\" );\n    __TBB_store_relaxed( my_arena_slot->tail, 0 );\n    __TBB_store_relaxed( my_arena_slot->head, 0 );\n    leave_task_pool();\n}\n\n//TODO: move to arena_slot\ninline void generic_scheduler::commit_spawned_tasks( size_t new_tail ) {\n    __TBB_ASSERT ( new_tail <= my_arena_slot->my_task_pool_size, \"task deque end was overwritten\" );\n    // emit \"task was released\" signal\n    ITT_NOTIFY(sync_releasing, (void*)((uintptr_t)my_arena_slot+sizeof(uintptr_t)));\n    // Release fence is necessary to make sure that previously stored task pointers\n    // are visible to thieves.\n    __TBB_store_with_release( my_arena_slot->tail, new_tail );\n}\n\nvoid generic_scheduler::commit_relocated_tasks ( size_t new_tail ) {\n    __TBB_ASSERT( is_local_task_pool_quiescent(),\n                  \"Task pool must be locked when calling commit_relocated_tasks()\" );\n    __TBB_store_relaxed( my_arena_slot->head, 0 );\n    // Tail is updated last to minimize probability of a thread making arena\n    // snapshot being misguided into thinking that this task pool is empty.\n    __TBB_store_release( my_arena_slot->tail, new_tail );\n    release_task_pool();\n}\n\ntemplate<free_task_hint hint>\nvoid generic_scheduler::free_task( task& t ) {\n#if __TBB_HOARD_NONLOCAL_TASKS\n    static const int h = hint&(~local_task);\n#else\n    static const free_task_hint h = hint;\n#endif\n    GATHER_STATISTIC(--my_counters.active_tasks);\n    task_prefix& p = t.prefix();\n    // Verify that optimization hints are correct.\n    __TBB_ASSERT( h!=small_local_task || p.origin==this, NULL );\n    __TBB_ASSERT( !(h&small_task) || p.origin, NULL );\n    __TBB_ASSERT( !(h&local_task) || (!p.origin || uintptr_t(p.origin) > uintptr_t(4096)), \"local_task means allocated\");\n    poison_value(p.depth);\n    poison_value(p.ref_count);\n    poison_pointer(p.owner);\n    __TBB_ASSERT( 1L<<t.state() & (1L<<task::executing|1L<<task::allocated), NULL );\n    p.state = task::freed;\n    if( h==small_local_task || p.origin==this ) {\n        GATHER_STATISTIC(++my_counters.free_list_length);\n        p.next = my_free_list;\n        my_free_list = &t;\n    } else if( !(h&local_task) && p.origin && uintptr_t(p.origin) < uintptr_t(4096) ) {\n        // a special value reserved for future use, do nothing since\n        // origin is not pointing to a scheduler instance\n    } else if( !(h&local_task) && p.origin ) {\n        GATHER_STATISTIC(++my_counters.free_list_length);\n#if __TBB_HOARD_NONLOCAL_TASKS\n        if( !(h&no_cache) ) {\n            p.next = my_nonlocal_free_list;\n            my_nonlocal_free_list = &t;\n        } else\n#endif\n        free_nonlocal_small_task(t);\n    } else {\n        GATHER_STATISTIC(--my_counters.big_tasks);\n        deallocate_task(t);\n    }\n}\n\n#if __TBB_TASK_PRIORITY\ninline intptr_t generic_scheduler::effective_reference_priority () const {\n    // Workers on the outermost dispatch level (i.e. with empty stack) use market's\n    // priority as a reference point (to speedup discovering process level priority\n    // changes). But when there are enough workers to service (even if only partially)\n    // a lower priority arena, they should use arena's priority as a reference, lest\n    // be trapped in a futile spinning (because market's priority would prohibit\n    // executing ANY tasks in this arena).\n    return !worker_outermost_level() ||\n        (my_arena->my_num_workers_allotted < my_arena->num_workers_active()\n#if __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n         && my_arena->my_concurrency_mode!=arena_base::cm_enforced_global\n#endif\n            ) ? *my_ref_top_priority : my_arena->my_top_priority;\n}\n\ninline void generic_scheduler::offload_task ( task& t, intptr_t /*priority*/ ) {\n    GATHER_STATISTIC( ++my_counters.prio_tasks_offloaded );\n    __TBB_ASSERT( !is_proxy(t), \"The proxy task cannot be offloaded\" );\n    __TBB_ASSERT( my_offloaded_task_list_tail_link && !*my_offloaded_task_list_tail_link, NULL );\n#if TBB_USE_ASSERT\n    t.prefix().state = task::ready;\n#endif /* TBB_USE_ASSERT */\n    t.prefix().next_offloaded = my_offloaded_tasks;\n    my_offloaded_tasks = &t;\n}\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_FP_CONTEXT || __TBB_TASK_GROUP_CONTEXT\n//! Helper class for tracking floating point context and task group context switches\n/** Assuming presence of an itt collector, in addition to keeping track of floating\n    point context, this class emits itt events to indicate begin and end of task group\n    context execution **/\ntemplate <bool report_tasks>\nclass context_guard_helper {\n#if __TBB_ITT_STRUCTURE_API\n    const task_group_context *curr_ctx;\n#endif\n#if __TBB_FP_CONTEXT\n    cpu_ctl_env guard_cpu_ctl_env;\n    cpu_ctl_env curr_cpu_ctl_env;\n#endif\npublic:\n    context_guard_helper()\n#if __TBB_ITT_STRUCTURE_API\n        : curr_ctx(NULL)\n#endif\n    {\n#if __TBB_FP_CONTEXT\n        guard_cpu_ctl_env.get_env();\n        curr_cpu_ctl_env = guard_cpu_ctl_env;\n#endif\n    }\n    ~context_guard_helper() {\n#if __TBB_FP_CONTEXT\n        if ( curr_cpu_ctl_env != guard_cpu_ctl_env )\n            guard_cpu_ctl_env.set_env();\n#endif\n#if __TBB_ITT_STRUCTURE_API\n        if (report_tasks && curr_ctx)\n            ITT_TASK_END;\n#endif\n    }\n    void set_ctx( const task_group_context *ctx ) {\n        generic_scheduler::assert_context_valid(ctx);\n#if __TBB_FP_CONTEXT\n        const cpu_ctl_env &ctl = *punned_cast<cpu_ctl_env*>(&ctx->my_cpu_ctl_env);\n#endif\n#if __TBB_ITT_STRUCTURE_API\n        if(ctx != curr_ctx) {\n#endif\n#if __TBB_FP_CONTEXT\n            if ( ctl != curr_cpu_ctl_env ) {\n                curr_cpu_ctl_env = ctl;\n                curr_cpu_ctl_env.set_env();\n            }\n#endif\n#if __TBB_ITT_STRUCTURE_API\n            // if task group context was active, report end of current execution frame.\n            if (report_tasks) {\n                if (curr_ctx)\n                    ITT_TASK_END;\n                // reporting begin of new task group context execution frame.\n                // using address of task group context object to group tasks (parent).\n                // id of task execution frame is NULL and reserved for future use.\n                ITT_TASK_BEGIN(ctx,ctx->my_name,NULL);\n                curr_ctx = ctx;\n            }\n        }\n#endif\n    }\n    void restore_default() {\n#if __TBB_FP_CONTEXT\n        if ( curr_cpu_ctl_env != guard_cpu_ctl_env ) {\n            guard_cpu_ctl_env.set_env();\n            curr_cpu_ctl_env = guard_cpu_ctl_env;\n        }\n#endif\n    }\n};\n#else\ntemplate <bool T>\nstruct context_guard_helper {\n    void set_ctx( __TBB_CONTEXT_ARG1(task_group_context *) ) {}\n    void restore_default() {}\n};\n#endif /* __TBB_FP_CONTEXT */\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_scheduler_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/scheduler_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_scheduler_common_H\n#define _TBB_scheduler_common_H\n\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n\n#include <string.h>  // for memset, memcpy, memmove\n\n#include \"tbb_statistics.h\"\n\n#if TBB_USE_ASSERT > 1\n#include <stdio.h>\n#endif /* TBB_USE_ASSERT > 1 */\n\n/* Temporarily change \"private\" to \"public\" while including \"tbb/task.h\".\n   This hack allows us to avoid publishing internal types and methods\n   in the public header files just for sake of friend declarations. */\n#ifndef private\n    #define private public\n    #define undef_private\n#endif\n\n#include \"tbb/task.h\"\n#include \"tbb/tbb_exception.h\"\n\n#ifdef undef_private\n    #undef private\n#endif\n\n#ifndef __TBB_SCHEDULER_MUTEX_TYPE\n#define __TBB_SCHEDULER_MUTEX_TYPE tbb::spin_mutex\n#endif\n// TODO: add conditional inclusion based on specified type\n#include \"tbb/spin_mutex.h\"\n\n// This macro is an attempt to get rid of ugly ifdefs in the shared parts of the code.\n// It drops the second argument depending on whether the controlling macro is defined.\n// The first argument is just a convenience allowing to keep comma before the macro usage.\n#if __TBB_TASK_GROUP_CONTEXT\n    #define __TBB_CONTEXT_ARG1(context) context\n    #define __TBB_CONTEXT_ARG(arg1, context) arg1, context\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n    #define __TBB_CONTEXT_ARG1(context)\n    #define __TBB_CONTEXT_ARG(arg1, context) arg1\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_TASK_ISOLATION\n    #define __TBB_ISOLATION_EXPR(isolation) isolation\n    #define __TBB_ISOLATION_ARG(arg1, isolation) arg1, isolation\n#else\n    #define __TBB_ISOLATION_EXPR(isolation)\n    #define __TBB_ISOLATION_ARG(arg1, isolation) arg1\n#endif /* __TBB_TASK_ISOLATION */\n\n\n#if DO_TBB_TRACE\n#include <cstdio>\n#define TBB_TRACE(x) ((void)std::printf x)\n#else\n#define TBB_TRACE(x) ((void)(0))\n#endif /* DO_TBB_TRACE */\n\n#if !__TBB_CPU_CTL_ENV_PRESENT\n#include <fenv.h>\n#endif\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    // These particular warnings are so ubiquitous that no attempt is made to narrow\n    // the scope of the warnings.\n    #pragma warning (disable: 4100 4127 4312 4244 4267 4706)\n#endif\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\nclass task_arena_base;\nclass delegated_task;\nclass wait_task;\n}}\nnamespace internal {\nusing namespace interface7::internal;\n\nclass arena;\ntemplate<typename SchedulerTraits> class custom_scheduler;\nclass generic_scheduler;\nclass governor;\nclass mail_outbox;\nclass market;\nclass observer_proxy;\nclass task_scheduler_observer_v3;\n\n#if __TBB_TASK_PRIORITY\nstatic const intptr_t num_priority_levels = 3;\nstatic const intptr_t normalized_normal_priority = (num_priority_levels - 1) / 2;\n\ninline intptr_t normalize_priority ( priority_t p ) {\n    return intptr_t(p - priority_low) / priority_stride_v4;\n}\n\nstatic const priority_t priority_from_normalized_rep[num_priority_levels] = {\n    priority_low, priority_normal, priority_high\n};\n\ninline void assert_priority_valid ( intptr_t p ) {\n    __TBB_ASSERT_EX( p >= 0 && p < num_priority_levels, NULL );\n}\n\ninline intptr_t& priority ( task& t ) {\n    return t.prefix().context->my_priority;\n}\n#else /* __TBB_TASK_PRIORITY */\nstatic const intptr_t num_priority_levels = 1;\n#endif /* __TBB_TASK_PRIORITY */\n\n//! Mutex type for global locks in the scheduler\ntypedef __TBB_SCHEDULER_MUTEX_TYPE scheduler_mutex_type;\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Task group state change propagation global epoch\n/** Together with generic_scheduler::my_context_state_propagation_epoch forms\n    cross-thread signaling mechanism that allows to avoid locking at the hot path\n    of normal execution flow.\n\n    When a descendant task group context is registered or unregistered, the global\n    and local epochs are compared. If they differ, a state change is being propagated,\n    and thus registration/deregistration routines take slower branch that may block\n    (at most one thread of the pool can be blocked at any moment). Otherwise the\n    control path is lock-free and fast. **/\nextern uintptr_t the_context_state_propagation_epoch;\n\n//! Mutex guarding state change propagation across task groups forest.\n/** Also protects modification of related data structures. **/\ntypedef scheduler_mutex_type context_state_propagation_mutex_type;\nextern context_state_propagation_mutex_type the_context_state_propagation_mutex;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Alignment for a task object\nconst size_t task_alignment = 32;\n\n//! Number of bytes reserved for a task prefix\n/** If not exactly sizeof(task_prefix), the extra bytes *precede* the task_prefix. */\nconst size_t task_prefix_reservation_size = ((sizeof(internal::task_prefix)-1)/task_alignment+1)*task_alignment;\n\n//! Definitions for bits in task_prefix::extra_state\nenum task_extra_state {\n    //! Tag for v1 tasks (i.e. tasks in TBB 1.0 and 2.0)\n    es_version_1_task = 0,\n    //! Tag for v3 tasks (i.e. tasks in TBB 2.1-2.2)\n    es_version_3_task = 1,\n    //! Tag for enqueued tasks\n    es_task_enqueued = 0x10,\n    //! Tag for v3 task_proxy.\n    es_task_proxy = 0x20,\n    //! Set if ref_count might be changed by another thread.  Used for debugging.\n    es_ref_count_active = 0x40,\n    //! Set if the task has been stolen\n    es_task_is_stolen = 0x80\n};\n\ninline void reset_extra_state ( task *t ) {\n    t->prefix().extra_state &= ~(es_task_is_stolen | es_task_enqueued);\n}\n\n//! Optimization hint to free_task that enables it omit unnecessary tests and code.\nenum free_task_hint {\n    //! No hint\n    no_hint=0,\n    //! Task is known to have been allocated by this scheduler\n    local_task=1,\n    //! Task is known to be a small task.\n    /** Task should be returned to the free list of *some* scheduler, possibly not this scheduler. */\n    small_task=2,\n    //! Bitwise-OR of local_task and small_task.\n    /** Task should be returned to free list of this scheduler. */\n    small_local_task=3,\n    //! Disable caching for a small task.\n    no_cache = 4,\n    //! Task is known to be a small task and must not be cached.\n    no_cache_small_task = no_cache | small_task\n};\n\n//------------------------------------------------------------------------\n// Debugging support\n//------------------------------------------------------------------------\n\n#if TBB_USE_ASSERT\n\nstatic const uintptr_t venom = tbb::internal::select_size_t_constant<0xDEADBEEFU,0xDDEEAADDDEADBEEFULL>::value;\n\ntemplate <typename T>\nvoid poison_value ( T& val ) { val = * punned_cast<T*>(&venom); }\n\n/** Expected to be used in assertions only, thus no empty form is defined. **/\ninline bool is_alive( uintptr_t v ) { return v != venom; }\n\n/** Logically, this method should be a member of class task.\n    But we do not want to publish it, so it is here instead. */\ninline void assert_task_valid( const task* task ) {\n    __TBB_ASSERT( task!=NULL, NULL );\n    __TBB_ASSERT( !is_poisoned(&task), NULL );\n    __TBB_ASSERT( (uintptr_t)task % task_alignment == 0, \"misaligned task\" );\n#if __TBB_RECYCLE_TO_ENQUEUE\n    __TBB_ASSERT( (unsigned)task->state()<=(unsigned)task::to_enqueue, \"corrupt task (invalid state)\" );\n#else\n    __TBB_ASSERT( (unsigned)task->state()<=(unsigned)task::recycle, \"corrupt task (invalid state)\" );\n#endif\n}\n\n#else /* !TBB_USE_ASSERT */\n\n/** In contrast to debug version poison_value() is a macro here because\n    the variable used as its argument may be undefined in release builds. **/\n#define poison_value(g) ((void)0)\n\ninline void assert_task_valid( const task* ) {}\n\n#endif /* !TBB_USE_ASSERT */\n\n//------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline bool ConcurrentWaitsEnabled ( task& t ) {\n    return (t.prefix().context->my_version_and_traits & task_group_context::concurrent_wait) != 0;\n}\n\ninline bool CancellationInfoPresent ( task& t ) {\n    return t.prefix().context->my_cancellation_requested != 0;\n}\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    inline tbb_exception* TbbCurrentException( task_group_context*, tbb_exception* src) { return src->move(); }\n    inline tbb_exception* TbbCurrentException( task_group_context* c, captured_exception* src) {\n        if( c->my_version_and_traits & task_group_context::exact_exception )\n            runtime_warning( \"Exact exception propagation is requested by application but the linked library is built without support for it\");\n        return src;\n    }\n    #define TbbRethrowException(TbbCapturedException) (TbbCapturedException)->throw_self()\n#else\n    // Using macro instead of an inline function here allows to avoid evaluation of the\n    // TbbCapturedException expression when exact propagation is enabled for the context.\n    #define TbbCurrentException(context, TbbCapturedException) \\\n        context->my_version_and_traits & task_group_context::exact_exception    \\\n            ? tbb_exception_ptr::allocate()    \\\n            : tbb_exception_ptr::allocate( *(TbbCapturedException) );\n    #define TbbRethrowException(TbbCapturedException) \\\n        { \\\n            if( governor::rethrow_exception_broken() ) fix_broken_rethrow(); \\\n            (TbbCapturedException)->throw_self(); \\\n        }\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\n#define TbbRegisterCurrentException(context, TbbCapturedException) \\\n    if ( context->cancel_group_execution() ) {  \\\n        /* We are the first to signal cancellation, so store the exception that caused it. */  \\\n        context->my_exception = TbbCurrentException( context, TbbCapturedException ); \\\n    }\n\n#define TbbCatchAll(context)  \\\n    catch ( tbb_exception& exc ) {  \\\n        TbbRegisterCurrentException( context, &exc );   \\\n    } catch ( std::exception& exc ) {   \\\n        TbbRegisterCurrentException( context, captured_exception::allocate(typeid(exc).name(), exc.what()) ); \\\n    } catch ( ... ) {   \\\n        TbbRegisterCurrentException( context, captured_exception::allocate(\"...\", \"Unidentified exception\") );\\\n    }\n\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n\ninline bool ConcurrentWaitsEnabled ( task& t ) { return false; }\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\ninline void prolonged_pause() {\n#if defined(__TBB_time_stamp) && !__TBB_STEALING_PAUSE\n    // Assumption based on practice: 1000-2000 ticks seems to be a suitable invariant for the\n    // majority of platforms. Currently, skip platforms that define __TBB_STEALING_PAUSE\n    // because these platforms require very careful tuning.\n    machine_tsc_t prev = __TBB_time_stamp();\n    const machine_tsc_t finish = prev + 1000;\n    atomic_backoff backoff;\n    do {\n        backoff.bounded_pause();\n        machine_tsc_t curr = __TBB_time_stamp();\n        if ( curr <= prev )\n            // Possibly, the current logical thread is moved to another hardware thread or overflow is occurred.\n            break;\n        prev = curr;\n    } while ( prev < finish );\n#else\n#ifdef __TBB_STEALING_PAUSE\n    static const long PauseTime = __TBB_STEALING_PAUSE;\n#elif __TBB_ipf\n    static const long PauseTime = 1500;\n#else\n    static const long PauseTime = 80;\n#endif\n    // TODO IDEA: Update PauseTime adaptively?\n    __TBB_Pause(PauseTime);\n#endif\n}\n\n//------------------------------------------------------------------------\n// arena_slot\n//------------------------------------------------------------------------\nstruct arena_slot_line1 {\n    //TODO: make this tbb:atomic<>.\n    //! Scheduler of the thread attached to the slot\n    /** Marks the slot as busy, and is used to iterate through the schedulers belonging to this arena **/\n    generic_scheduler* my_scheduler;\n\n    // Synchronization of access to Task pool\n    /** Also is used to specify if the slot is empty or locked:\n         0 - empty\n        -1 - locked **/\n    task* *__TBB_atomic task_pool;\n\n    //! Index of the first ready task in the deque.\n    /** Modified by thieves, and by the owner during compaction/reallocation **/\n    __TBB_atomic size_t head;\n};\n\nstruct arena_slot_line2 {\n    //! Hint provided for operations with the container of starvation-resistant tasks.\n    /** Modified by the owner thread (during these operations). **/\n    unsigned hint_for_pop;\n\n    //! Index of the element following the last ready task in the deque.\n    /** Modified by the owner thread. **/\n    __TBB_atomic size_t tail;\n\n    //! Capacity of the primary task pool (number of elements - pointers to task).\n    size_t my_task_pool_size;\n\n    // Task pool of the scheduler that owns this slot\n    task* *__TBB_atomic task_pool_ptr;\n\n#if __TBB_STATISTICS\n    //! Set of counters to accumulate internal statistics related to this arena\n    statistics_counters *my_counters;\n#endif /* __TBB_STATISTICS */\n};\n\nstruct arena_slot : padded<arena_slot_line1>, padded<arena_slot_line2> {\n#if TBB_USE_ASSERT\n    void fill_with_canary_pattern ( size_t first, size_t last ) {\n        for ( size_t i = first; i < last; ++i )\n            poison_pointer(task_pool_ptr[i]);\n    }\n#else\n    void fill_with_canary_pattern ( size_t, size_t ) {}\n#endif /* TBB_USE_ASSERT */\n\n    void allocate_task_pool( size_t n ) {\n        size_t byte_size = ((n * sizeof(task*) + NFS_MaxLineSize - 1) / NFS_MaxLineSize) * NFS_MaxLineSize;\n        my_task_pool_size = byte_size / sizeof(task*);\n        task_pool_ptr = (task**)NFS_Allocate( 1, byte_size, NULL );\n        // No need to clear the fresh deque since valid items are designated by the head and tail members.\n        // But fill it with a canary pattern in the high vigilance debug mode.\n        fill_with_canary_pattern( 0, my_task_pool_size );\n    }\n\n    //! Deallocate task pool that was allocated by means of allocate_task_pool.\n    void free_task_pool( ) {\n        // TODO: understand the assertion and modify\n        // __TBB_ASSERT( !task_pool /*TODO: == EmptyTaskPool*/, NULL);\n        if( task_pool_ptr ) {\n           __TBB_ASSERT( my_task_pool_size, NULL);\n           NFS_Free( task_pool_ptr );\n           task_pool_ptr = NULL;\n           my_task_pool_size = 0;\n        }\n    }\n};\n\n#if !__TBB_CPU_CTL_ENV_PRESENT\nclass cpu_ctl_env {\n    fenv_t *my_fenv_ptr;\npublic:\n    cpu_ctl_env() : my_fenv_ptr(NULL) {}\n    ~cpu_ctl_env() {\n        if ( my_fenv_ptr )\n            tbb::internal::NFS_Free( (void*)my_fenv_ptr );\n    }\n    // It is possible not to copy memory but just to copy pointers but the following issues should be addressed:\n    //   1. The arena lifetime and the context lifetime are independent;\n    //   2. The user is allowed to recapture different FPU settings to context so 'current FPU settings' inside\n    //   dispatch loop may become invalid.\n    // But do we really want to improve the fenv implementation? It seems to be better to replace the fenv implementation\n    // with a platform specific implementation.\n    cpu_ctl_env( const cpu_ctl_env &src ) : my_fenv_ptr(NULL) {\n        *this = src;\n    }\n    cpu_ctl_env& operator=( const cpu_ctl_env &src ) {\n        __TBB_ASSERT( src.my_fenv_ptr, NULL );\n        if ( !my_fenv_ptr )\n            my_fenv_ptr = (fenv_t*)tbb::internal::NFS_Allocate(1, sizeof(fenv_t), NULL);\n        *my_fenv_ptr = *src.my_fenv_ptr;\n        return *this;\n    }\n    bool operator!=( const cpu_ctl_env &ctl ) const {\n        __TBB_ASSERT( my_fenv_ptr, \"cpu_ctl_env is not initialized.\" );\n        __TBB_ASSERT( ctl.my_fenv_ptr, \"cpu_ctl_env is not initialized.\" );\n        return memcmp( (void*)my_fenv_ptr, (void*)ctl.my_fenv_ptr, sizeof(fenv_t) );\n    }\n    void get_env () {\n        if ( !my_fenv_ptr )\n            my_fenv_ptr = (fenv_t*)tbb::internal::NFS_Allocate(1, sizeof(fenv_t), NULL);\n        fegetenv( my_fenv_ptr );\n    }\n    const cpu_ctl_env& set_env () const {\n        __TBB_ASSERT( my_fenv_ptr, \"cpu_ctl_env is not initialized.\" );\n        fesetenv( my_fenv_ptr );\n        return *this;\n    }\n};\n#endif /* !__TBB_CPU_CTL_ENV_PRESENT */\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_scheduler_common_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/scheduler_utility.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_scheduler_utility_H\n#define _TBB_scheduler_utility_H\n\n#include \"scheduler.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// auto_empty_task\n//------------------------------------------------------------------------\n\n//! Smart holder for the empty task class with automatic destruction\nclass auto_empty_task {\n    task* my_task;\n    generic_scheduler* my_scheduler;\npublic:\n    auto_empty_task ( __TBB_CONTEXT_ARG(generic_scheduler *s, task_group_context* context) )\n        : my_task( new(&s->allocate_task(sizeof(empty_task), __TBB_CONTEXT_ARG(NULL, context))) empty_task )\n        , my_scheduler(s)\n    {}\n    // empty_task has trivial destructor, so there's no need to call it.\n    ~auto_empty_task () { my_scheduler->free_task<small_local_task>(*my_task); }\n\n    operator task& () { return *my_task; }\n    task* operator & () { return my_task; }\n    task_prefix& prefix () { return my_task->prefix(); }\n}; // class auto_empty_task\n\n//------------------------------------------------------------------------\n// fast_reverse_vector\n//------------------------------------------------------------------------\n\n//! Vector that grows without reallocations, and stores items in the reverse order.\n/** Requires to initialize its first segment with a preallocated memory chunk\n    (usually it is static array or an array allocated on the stack).\n    The second template parameter specifies maximal number of segments. Each next\n    segment is twice as large as the previous one. **/\ntemplate<typename T, size_t max_segments = 16>\nclass fast_reverse_vector\n{\npublic:\n    fast_reverse_vector ( T* initial_segment, size_t segment_size )\n        : m_cur_segment(initial_segment)\n        , m_cur_segment_size(segment_size)\n        , m_pos(segment_size)\n        , m_num_segments(0)\n        , m_size(0)\n    {\n        __TBB_ASSERT ( initial_segment && segment_size, \"Nonempty initial segment must be supplied\");\n    }\n\n    ~fast_reverse_vector ()\n    {\n        for ( size_t i = 1; i < m_num_segments; ++i )\n            NFS_Free( m_segments[i] );\n    }\n\n    size_t size () const { return m_size + m_cur_segment_size - m_pos; }\n\n    void push_back ( const T& val )\n    {\n        if ( !m_pos ) {\n            if ( !m_num_segments ) m_segments[m_num_segments++] = m_cur_segment;\n            m_size += m_cur_segment_size;\n            m_cur_segment_size *= 2;\n            m_pos = m_cur_segment_size;\n            m_segments[m_num_segments++] = m_cur_segment = (T*)NFS_Allocate( m_cur_segment_size, sizeof(T), NULL );\n            __TBB_ASSERT ( m_num_segments < max_segments, \"Maximal capacity exceeded\" );\n        }\n        m_cur_segment[--m_pos] = val;\n    }\n\n    //! Copies the contents of the vector into the dst array.\n    /** Can only be used when T is a POD type, as copying does not invoke copy constructors. **/\n    void copy_memory ( T* dst ) const\n    {\n        size_t sz = m_cur_segment_size - m_pos;\n        memcpy( dst, m_cur_segment + m_pos, sz * sizeof(T) );\n        dst += sz;\n        sz = m_cur_segment_size / 2;\n        for ( long i = (long)m_num_segments - 2; i >= 0; --i ) {\n            memcpy( dst, m_segments[i], sz * sizeof(T) );\n            dst += sz;\n            sz /= 2;\n        }\n    }\n\nprotected:\n    //! The current (not completely filled) segment\n    T       *m_cur_segment;\n\n    //! Capacity of m_cur_segment\n    size_t  m_cur_segment_size;\n\n    //! Insertion position in m_cur_segment\n    size_t  m_pos;\n\n    //! Array of segments (has fixed size specified by the second template parameter)\n    T       *m_segments[max_segments];\n\n    //! Number of segments (the size of m_segments)\n    size_t  m_num_segments;\n\n    //! Number of items in the segments in m_segments\n    size_t  m_size;\n\n}; // class fast_reverse_vector\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_scheduler_utility_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/semaphore.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"semaphore.h\"\n#if __TBB_USE_SRWLOCK\n#include \"dynamic_link.h\" // Refers to src/tbb, not include/tbb\n#include \"tbb_misc.h\"\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n// TODO: For new win UI port, we can use SRWLock API without dynamic_link etc.\n#if __TBB_USE_SRWLOCK\n\nstatic atomic<do_once_state> concmon_module_inited;\n\nvoid WINAPI init_binsem_using_event( SRWLOCK* h_ )\n{\n    srwl_or_handle* shptr = (srwl_or_handle*) h_;\n    shptr->h = CreateEventEx( NULL, NULL, 0, EVENT_ALL_ACCESS|SEMAPHORE_ALL_ACCESS );\n}\n\nvoid WINAPI acquire_binsem_using_event( SRWLOCK* h_ )\n{\n    srwl_or_handle* shptr = (srwl_or_handle*) h_;\n    WaitForSingleObjectEx( shptr->h, INFINITE, FALSE );\n}\n\nvoid WINAPI release_binsem_using_event( SRWLOCK* h_ )\n{\n    srwl_or_handle* shptr = (srwl_or_handle*) h_;\n    SetEvent( shptr->h );\n}\n\nstatic void (WINAPI *__TBB_init_binsem)( SRWLOCK* ) = (void (WINAPI *)(SRWLOCK*))&init_binsem_using_event;\nstatic void (WINAPI *__TBB_acquire_binsem)( SRWLOCK* ) = (void (WINAPI *)(SRWLOCK*))&acquire_binsem_using_event;\nstatic void (WINAPI *__TBB_release_binsem)( SRWLOCK* ) = (void (WINAPI *)(SRWLOCK*))&release_binsem_using_event;\n\n//! Table describing the how to link the handlers.\nstatic const dynamic_link_descriptor SRWLLinkTable[] = {\n    DLD(InitializeSRWLock,       __TBB_init_binsem),\n    DLD(AcquireSRWLockExclusive, __TBB_acquire_binsem),\n    DLD(ReleaseSRWLockExclusive, __TBB_release_binsem)\n};\n\ninline void init_concmon_module()\n{\n    __TBB_ASSERT( (uintptr_t)__TBB_init_binsem==(uintptr_t)&init_binsem_using_event, NULL );\n    if( dynamic_link( \"Kernel32.dll\", SRWLLinkTable, sizeof(SRWLLinkTable)/sizeof(dynamic_link_descriptor) ) ) {\n        __TBB_ASSERT( (uintptr_t)__TBB_init_binsem!=(uintptr_t)&init_binsem_using_event, NULL );\n        __TBB_ASSERT( (uintptr_t)__TBB_acquire_binsem!=(uintptr_t)&acquire_binsem_using_event, NULL );\n        __TBB_ASSERT( (uintptr_t)__TBB_release_binsem!=(uintptr_t)&release_binsem_using_event, NULL );\n    }\n}\n\nbinary_semaphore::binary_semaphore() {\n    atomic_do_once( &init_concmon_module, concmon_module_inited );\n\n    __TBB_init_binsem( &my_sem.lock );\n    if( (uintptr_t)__TBB_init_binsem!=(uintptr_t)&init_binsem_using_event )\n        P();\n}\n\nbinary_semaphore::~binary_semaphore() {\n    if( (uintptr_t)__TBB_init_binsem==(uintptr_t)&init_binsem_using_event )\n        CloseHandle( my_sem.h );\n}\n\nvoid binary_semaphore::P() { __TBB_acquire_binsem( &my_sem.lock ); }\n\nvoid binary_semaphore::V() { __TBB_release_binsem( &my_sem.lock ); }\n\n#endif /* __TBB_USE_SRWLOCK */\n\n} // namespace internal\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/semaphore.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_semaphore_H\n#define __TBB_tbb_semaphore_H\n\n#include \"tbb/tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"tbb/machine/windows_api.h\"\n\n#elif __APPLE__\n#include <mach/semaphore.h>\n#include <mach/task.h>\n#include <mach/mach_init.h>\n#include <mach/error.h>\n\n#else\n#include <semaphore.h>\n#ifdef TBB_USE_DEBUG\n#include <errno.h>\n#endif\n#endif /*_WIN32||_WIN64*/\n\nnamespace tbb {\nnamespace internal {\n\n\n#if _WIN32||_WIN64\ntypedef LONG sem_count_t;\n//! Edsger Dijkstra's counting semaphore\nclass semaphore : no_copy {\n    static const int max_semaphore_cnt = MAXLONG;\npublic:\n    //! ctor\n    semaphore(size_t start_cnt_ = 0) {init_semaphore(start_cnt_);}\n    //! dtor\n    ~semaphore() {CloseHandle( sem );}\n    //! wait/acquire\n    void P() {WaitForSingleObjectEx( sem, INFINITE, FALSE );}\n    //! post/release\n    void V() {ReleaseSemaphore( sem, 1, NULL );}\nprivate:\n    HANDLE sem;\n    void init_semaphore(size_t start_cnt_) {\n        sem = CreateSemaphoreEx( NULL, LONG(start_cnt_), max_semaphore_cnt, NULL, 0, SEMAPHORE_ALL_ACCESS );\n    }\n};\n#elif __APPLE__\n//! Edsger Dijkstra's counting semaphore\nclass semaphore : no_copy {\npublic:\n    //! ctor\n    semaphore(int start_cnt_ = 0) : sem(start_cnt_) { init_semaphore(start_cnt_); }\n    //! dtor\n    ~semaphore() {\n        kern_return_t ret = semaphore_destroy( mach_task_self(), sem );\n        __TBB_ASSERT_EX( ret==err_none, NULL );\n    }\n    //! wait/acquire\n    void P() {\n        int ret;\n        do {\n            ret = semaphore_wait( sem );\n        } while( ret==KERN_ABORTED );\n        __TBB_ASSERT( ret==KERN_SUCCESS, \"semaphore_wait() failed\" );\n    }\n    //! post/release\n    void V() { semaphore_signal( sem ); }\nprivate:\n    semaphore_t sem;\n    void init_semaphore(int start_cnt_) {\n        kern_return_t ret = semaphore_create( mach_task_self(), &sem, SYNC_POLICY_FIFO, start_cnt_ );\n        __TBB_ASSERT_EX( ret==err_none, \"failed to create a semaphore\" );\n    }\n};\n#else /* Linux/Unix */\ntypedef uint32_t sem_count_t;\n//! Edsger Dijkstra's counting semaphore\nclass semaphore : no_copy {\npublic:\n    //! ctor\n    semaphore(int start_cnt_ = 0 ) { init_semaphore( start_cnt_ ); }\n\n    //! dtor\n    ~semaphore() {\n        int ret = sem_destroy( &sem );\n        __TBB_ASSERT_EX( !ret, NULL );\n    }\n    //! wait/acquire\n    void P() {\n        while( sem_wait( &sem )!=0 )\n            __TBB_ASSERT( errno==EINTR, NULL );\n    }\n    //! post/release\n    void V() { sem_post( &sem ); }\nprivate:\n    sem_t sem;\n    void init_semaphore(int start_cnt_) {\n        int ret = sem_init( &sem, /*shared among threads*/ 0, start_cnt_ );\n        __TBB_ASSERT_EX( !ret, NULL );\n    }\n};\n#endif /* _WIN32||_WIN64 */\n\n\n//! for performance reasons, we want specialized binary_semaphore\n#if _WIN32||_WIN64\n#if !__TBB_USE_SRWLOCK\n//! binary_semaphore for concurrent_monitor\nclass binary_semaphore : no_copy {\npublic:\n    //! ctor\n    binary_semaphore() { my_sem = CreateEventEx( NULL, NULL, 0, EVENT_ALL_ACCESS );  }\n    //! dtor\n    ~binary_semaphore() { CloseHandle( my_sem ); }\n    //! wait/acquire\n    void P() { WaitForSingleObjectEx( my_sem, INFINITE, FALSE ); }\n    //! post/release\n    void V() { SetEvent( my_sem ); }\nprivate:\n    HANDLE my_sem;\n};\n#else /* __TBB_USE_SRWLOCK */\n\nunion srwl_or_handle {\n    SRWLOCK lock;\n    HANDLE  h;\n};\n\n//! binary_semaphore for concurrent_monitor\nclass binary_semaphore : no_copy {\npublic:\n    //! ctor\n    binary_semaphore();\n    //! dtor\n    ~binary_semaphore();\n    //! wait/acquire\n    void P();\n    //! post/release\n    void V();\nprivate:\n    srwl_or_handle my_sem;\n};\n#endif /* !__TBB_USE_SRWLOCK */\n#elif __APPLE__\n//! binary_semaphore for concurrent monitor\nclass binary_semaphore : no_copy {\npublic:\n    //! ctor\n    binary_semaphore() : my_sem(0) {\n        kern_return_t ret = semaphore_create( mach_task_self(), &my_sem, SYNC_POLICY_FIFO, 0 );\n        __TBB_ASSERT_EX( ret==err_none, \"failed to create a semaphore\" );\n    }\n    //! dtor\n    ~binary_semaphore() {\n        kern_return_t ret = semaphore_destroy( mach_task_self(), my_sem );\n        __TBB_ASSERT_EX( ret==err_none, NULL );\n    }\n    //! wait/acquire\n    void P() {\n        int ret;\n        do {\n            ret = semaphore_wait( my_sem );\n        } while( ret==KERN_ABORTED );\n        __TBB_ASSERT( ret==KERN_SUCCESS, \"semaphore_wait() failed\" );\n    }\n    //! post/release\n    void V() { semaphore_signal( my_sem ); }\nprivate:\n    semaphore_t my_sem;\n};\n#else /* Linux/Unix */\n\n#if __TBB_USE_FUTEX\nclass binary_semaphore : no_copy {\npublic:\n    //! ctor\n    binary_semaphore() { my_sem = 1; }\n    //! dtor\n    ~binary_semaphore() {}\n    //! wait/acquire\n    void P() {\n        int s;\n        if( (s = my_sem.compare_and_swap( 1, 0 ))!=0 ) {\n            if( s!=2 )\n                s = my_sem.fetch_and_store( 2 );\n            while( s!=0 ) {\n                futex_wait( &my_sem, 2 );\n                s = my_sem.fetch_and_store( 2 );\n            }\n        }\n    }\n    //! post/release\n    void V() {\n        __TBB_ASSERT( my_sem>=1, \"multiple V()'s in a row?\" );\n        if( my_sem--!=1 ) {\n            //if old value was 2\n            my_sem = 0;\n            futex_wakeup_one( &my_sem );\n        }\n    }\nprivate:\n    atomic<int> my_sem;\n};\n#else\ntypedef uint32_t sem_count_t;\n//! binary_semaphore for concurrent monitor\nclass binary_semaphore : no_copy {\npublic:\n    //! ctor\n    binary_semaphore() {\n        int ret = sem_init( &my_sem, /*shared among threads*/ 0, 0 );\n        __TBB_ASSERT_EX( !ret, NULL );\n    }\n    //! dtor\n    ~binary_semaphore() {\n        int ret = sem_destroy( &my_sem );\n        __TBB_ASSERT_EX( !ret, NULL );\n    }\n    //! wait/acquire\n    void P() {\n        while( sem_wait( &my_sem )!=0 )\n            __TBB_ASSERT( errno==EINTR, NULL );\n    }\n    //! post/release\n    void V() { sem_post( &my_sem ); }\nprivate:\n    sem_t my_sem;\n};\n#endif /* __TBB_USE_FUTEX */\n#endif /* _WIN32||_WIN64 */\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_tbb_semaphore_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/spin_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"itt_notify.h\"\n#include \"tbb_misc.h\"\n\nnamespace tbb {\n\nvoid spin_mutex::scoped_lock::internal_acquire( spin_mutex& m ) {\n    __TBB_ASSERT( !my_mutex, \"already holding a lock on a spin_mutex\" );\n    ITT_NOTIFY(sync_prepare, &m);\n    __TBB_LockByte(m.flag);\n    my_mutex = &m;\n    ITT_NOTIFY(sync_acquired, &m);\n}\n\nvoid spin_mutex::scoped_lock::internal_release() {\n    __TBB_ASSERT( my_mutex, \"release on spin_mutex::scoped_lock that is not holding a lock\" );\n\n    ITT_NOTIFY(sync_releasing, my_mutex);\n    __TBB_UnlockByte(my_mutex->flag);\n    my_mutex = NULL;\n}\n\nbool spin_mutex::scoped_lock::internal_try_acquire( spin_mutex& m ) {\n    __TBB_ASSERT( !my_mutex, \"already holding a lock on a spin_mutex\" );\n    bool result = bool( __TBB_TryLockByte(m.flag) );\n    if( result ) {\n        my_mutex = &m;\n        ITT_NOTIFY(sync_acquired, &m);\n    }\n    return result;\n}\n\nvoid spin_mutex::internal_construct() {\n    ITT_SYNC_CREATE(this, _T(\"tbb::spin_mutex\"), _T(\"\"));\n}\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/spin_rw_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/atomic.h\"\n#include \"itt_notify.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\ntemplate<typename T> // a template can work with private spin_rw_mutex::state_t\nstatic inline T CAS(volatile T &addr, T newv, T oldv) {\n    // ICC (9.1 and 10.1 tried) unable to do implicit conversion\n    // from \"volatile T*\" to \"volatile void*\", so explicit cast added.\n    return tbb::internal::as_atomic(addr).compare_and_swap( newv, oldv );\n}\n\n//! Acquire write lock on the given mutex.\nbool spin_rw_mutex_v3::internal_acquire_writer()\n{\n    ITT_NOTIFY(sync_prepare, this);\n    for( internal::atomic_backoff backoff;;backoff.pause() ){\n        state_t s = const_cast<volatile state_t&>(state); // ensure reloading\n        if( !(s & BUSY) ) { // no readers, no writers\n            if( CAS(state, WRITER, s)==s )\n                break; // successfully stored writer flag\n            backoff.reset(); // we could be very close to complete op.\n        } else if( !(s & WRITER_PENDING) ) { // no pending writers\n            __TBB_AtomicOR(&state, WRITER_PENDING);\n        }\n    }\n    ITT_NOTIFY(sync_acquired, this);\n    return false;\n}\n\n//! Release writer lock on the given mutex\nvoid spin_rw_mutex_v3::internal_release_writer()\n{\n    ITT_NOTIFY(sync_releasing, this);\n    __TBB_AtomicAND( &state, READERS );\n}\n\n//! Acquire read lock on given mutex.\nvoid spin_rw_mutex_v3::internal_acquire_reader()\n{\n    ITT_NOTIFY(sync_prepare, this);\n    for( internal::atomic_backoff b;;b.pause() ){\n        state_t s = const_cast<volatile state_t&>(state); // ensure reloading\n        if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests\n            state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );\n            if( !( t&WRITER ))\n                break; // successfully stored increased number of readers\n            // writer got there first, undo the increment\n            __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );\n        }\n    }\n\n    ITT_NOTIFY(sync_acquired, this);\n    __TBB_ASSERT( state & READERS, \"invalid state of a read lock: no readers\" );\n}\n\n//! Upgrade reader to become a writer.\n/** Returns whether the upgrade happened without releasing and re-acquiring the lock */\nbool spin_rw_mutex_v3::internal_upgrade()\n{\n    state_t s = state;\n    __TBB_ASSERT( s & READERS, \"invalid state before upgrade: no readers \" );\n    // check and set writer-pending flag\n    // required conditions: either no pending writers, or we are the only reader\n    // (with multiple readers and pending writer, another upgrade could have been requested)\n    while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {\n        state_t old_s = s;\n        if( (s=CAS(state, s | WRITER | WRITER_PENDING, s))==old_s ) {\n            ITT_NOTIFY(sync_prepare, this);\n            internal::atomic_backoff backoff;\n            while( (state & READERS) != ONE_READER ) backoff.pause();\n            __TBB_ASSERT((state&(WRITER_PENDING|WRITER))==(WRITER_PENDING|WRITER),\"invalid state when upgrading to writer\");\n            // both new readers and writers are blocked at this time\n            __TBB_FetchAndAddW( &state,  - (intptr_t)(ONE_READER+WRITER_PENDING));\n            ITT_NOTIFY(sync_acquired, this);\n            return true; // successfully upgraded\n        }\n    }\n    // slow reacquire\n    internal_release_reader();\n    return internal_acquire_writer(); // always returns false\n}\n\n//! Downgrade writer to a reader\nvoid spin_rw_mutex_v3::internal_downgrade() {\n    ITT_NOTIFY(sync_releasing, this);\n    __TBB_FetchAndAddW( &state, (intptr_t)(ONE_READER-WRITER));\n    __TBB_ASSERT( state & READERS, \"invalid state after downgrade: no readers\" );\n}\n\n//! Release read lock on the given mutex\nvoid spin_rw_mutex_v3::internal_release_reader()\n{\n    __TBB_ASSERT( state & READERS, \"invalid state of a read lock: no readers\" );\n    ITT_NOTIFY(sync_releasing, this); // release reader\n    __TBB_FetchAndAddWrelease( &state,-(intptr_t)ONE_READER);\n}\n\n//! Try to acquire write lock on the given mutex\nbool spin_rw_mutex_v3::internal_try_acquire_writer()\n{\n    // for a writer: only possible to acquire if no active readers or writers\n    state_t s = state;\n    if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101\n        if( CAS(state, WRITER, s)==s ) {\n            ITT_NOTIFY(sync_acquired, this);\n            return true; // successfully stored writer flag\n        }\n    return false;\n}\n\n//! Try to acquire read lock on the given mutex\nbool spin_rw_mutex_v3::internal_try_acquire_reader()\n{\n    // for a reader: acquire if no active or waiting writers\n    state_t s = state;\n    if( !(s & (WRITER|WRITER_PENDING)) ) { // no writers\n        state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );\n        if( !( t&WRITER )) {  // got the lock\n            ITT_NOTIFY(sync_acquired, this);\n            return true; // successfully stored increased number of readers\n        }\n        // writer got there first, undo the increment\n        __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );\n    }\n    return false;\n}\n\nvoid spin_rw_mutex_v3::internal_construct() {\n    ITT_SYNC_CREATE(this, _T(\"tbb::spin_rw_mutex\"), _T(\"\"));\n}\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/task.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Do not include task.h directly. Use scheduler_common.h instead\n#include \"scheduler_common.h\"\n#include \"governor.h\"\n#include \"scheduler.h\"\n#include \"itt_notify.h\"\n\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/partitioner.h\"\n\n#include <new>\n\nnamespace tbb {\n\nusing namespace std;\n\nnamespace internal {\n\n//------------------------------------------------------------------------\n// Methods of allocate_root_proxy\n//------------------------------------------------------------------------\ntask& allocate_root_proxy::allocate( size_t size ) {\n    internal::generic_scheduler* v = governor::local_scheduler_weak();\n    __TBB_ASSERT( v, \"thread did not activate a task_scheduler_init object?\" );\n#if __TBB_TASK_GROUP_CONTEXT\n    task_prefix& p = v->my_innermost_running_task->prefix();\n\n    ITT_STACK_CREATE(p.context->itt_caller);\n#endif\n    // New root task becomes part of the currently running task's cancellation context\n    return v->allocate_task( size, __TBB_CONTEXT_ARG(NULL, p.context) );\n}\n\nvoid allocate_root_proxy::free( task& task ) {\n    internal::generic_scheduler* v = governor::local_scheduler_weak();\n    __TBB_ASSERT( v, \"thread does not have initialized task_scheduler_init object?\" );\n#if __TBB_TASK_GROUP_CONTEXT\n    // No need to do anything here as long as there is no context -> task connection\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    v->free_task<local_task>( task );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//------------------------------------------------------------------------\n// Methods of allocate_root_with_context_proxy\n//------------------------------------------------------------------------\ntask& allocate_root_with_context_proxy::allocate( size_t size ) const {\n    internal::generic_scheduler* s = governor::local_scheduler_weak();\n    __TBB_ASSERT( s, \"Scheduler auto-initialization failed?\" );\n    __TBB_ASSERT( &my_context, \"allocate_root(context) argument is a dereferenced NULL pointer\" );\n    task& t = s->allocate_task( size, NULL, &my_context );\n    // Supported usage model prohibits concurrent initial binding. Thus we do not\n    // need interlocked operations or fences to manipulate with my_context.my_kind\n    if ( __TBB_load_relaxed(my_context.my_kind) == task_group_context::binding_required ) {\n        // If we are in the outermost task dispatch loop of a master thread, then\n        // there is nothing to bind this context to, and we skip the binding part\n        // treating the context as isolated.\n        if ( s->master_outermost_level() )\n            __TBB_store_relaxed(my_context.my_kind, task_group_context::isolated);\n        else\n            my_context.bind_to( s );\n    }\n#if __TBB_FP_CONTEXT\n    if ( __TBB_load_relaxed(my_context.my_kind) == task_group_context::isolated &&\n            !(my_context.my_version_and_traits & task_group_context::fp_settings) )\n        my_context.copy_fp_settings( *s->default_context() );\n#endif\n    ITT_STACK_CREATE(my_context.itt_caller);\n    return t;\n}\n\nvoid allocate_root_with_context_proxy::free( task& task ) const {\n    internal::generic_scheduler* v = governor::local_scheduler_weak();\n    __TBB_ASSERT( v, \"thread does not have initialized task_scheduler_init object?\" );\n    // No need to do anything here as long as unbinding is performed by context destructor only.\n    v->free_task<local_task>( task );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//------------------------------------------------------------------------\n// Methods of allocate_continuation_proxy\n//------------------------------------------------------------------------\ntask& allocate_continuation_proxy::allocate( size_t size ) const {\n    task* t = (task*)this;\n    assert_task_valid(t);\n    generic_scheduler* s = governor::local_scheduler_weak();\n    task* parent = t->parent();\n    t->prefix().parent = NULL;\n    return s->allocate_task( size, __TBB_CONTEXT_ARG(parent, t->prefix().context) );\n}\n\nvoid allocate_continuation_proxy::free( task& mytask ) const {\n    // Restore the parent as it was before the corresponding allocate was called.\n    ((task*)this)->prefix().parent = mytask.parent();\n    governor::local_scheduler_weak()->free_task<local_task>(mytask);\n}\n\n//------------------------------------------------------------------------\n// Methods of allocate_child_proxy\n//------------------------------------------------------------------------\ntask& allocate_child_proxy::allocate( size_t size ) const {\n    task* t = (task*)this;\n    assert_task_valid(t);\n    generic_scheduler* s = governor::local_scheduler_weak();\n    return s->allocate_task( size, __TBB_CONTEXT_ARG(t, t->prefix().context) );\n}\n\nvoid allocate_child_proxy::free( task& mytask ) const {\n    governor::local_scheduler_weak()->free_task<local_task>(mytask);\n}\n\n//------------------------------------------------------------------------\n// Methods of allocate_additional_child_of_proxy\n//------------------------------------------------------------------------\ntask& allocate_additional_child_of_proxy::allocate( size_t size ) const {\n    parent.increment_ref_count();\n    generic_scheduler* s = governor::local_scheduler_weak();\n    return s->allocate_task( size, __TBB_CONTEXT_ARG(&parent, parent.prefix().context) );\n}\n\nvoid allocate_additional_child_of_proxy::free( task& task ) const {\n    // Undo the increment.  We do not check the result of the fetch-and-decrement.\n    // We could consider be spawning the task if the fetch-and-decrement returns 1.\n    // But we do not know that was the programmer's intention.\n    // Furthermore, if it was the programmer's intention, the program has a fundamental\n    // race condition (that we warn about in Reference manual), because the\n    // reference count might have become zero before the corresponding call to\n    // allocate_additional_child_of_proxy::allocate.\n    parent.internal_decrement_ref_count();\n    governor::local_scheduler_weak()->free_task<local_task>(task);\n}\n\n//------------------------------------------------------------------------\n// Support for auto_partitioner\n//------------------------------------------------------------------------\nsize_t get_initial_auto_partitioner_divisor() {\n    const size_t X_FACTOR = 4;\n    return X_FACTOR * governor::local_scheduler()->max_threads_in_arena();\n}\n\n//------------------------------------------------------------------------\n// Methods of affinity_partitioner_base_v3\n//------------------------------------------------------------------------\nvoid affinity_partitioner_base_v3::resize( unsigned factor ) {\n    // Check factor to avoid asking for number of workers while there might be no arena.\n    size_t new_size = factor ? factor*governor::local_scheduler()->max_threads_in_arena() : 0;\n    if( new_size!=my_size ) {\n        if( my_array ) {\n            NFS_Free( my_array );\n            // Following two assignments must be done here for sake of exception safety.\n            my_array = NULL;\n            my_size = 0;\n        }\n        if( new_size ) {\n            my_array = static_cast<affinity_id*>(NFS_Allocate(new_size,sizeof(affinity_id), NULL ));\n            memset( my_array, 0, sizeof(affinity_id)*new_size );\n            my_size = new_size;\n        }\n    }\n}\n\n} // namespace internal\n\nusing namespace tbb::internal;\n\n//------------------------------------------------------------------------\n// task\n//------------------------------------------------------------------------\n\nvoid task::internal_set_ref_count( int count ) {\n    __TBB_ASSERT( count>=0, \"count must not be negative\" );\n    task_prefix &p = prefix();\n    __TBB_ASSERT(p.ref_count==1 && p.state==allocated && self().parent()==this\n        || !(p.extra_state & es_ref_count_active), \"ref_count race detected\");\n    ITT_NOTIFY(sync_releasing, &p.ref_count);\n    p.ref_count = count;\n}\n\ninternal::reference_count task::internal_decrement_ref_count() {\n    ITT_NOTIFY( sync_releasing, &prefix().ref_count );\n    internal::reference_count k = __TBB_FetchAndDecrementWrelease( &prefix().ref_count );\n    __TBB_ASSERT( k>=1, \"task's reference count underflowed\" );\n    if( k==1 )\n        ITT_NOTIFY( sync_acquired, &prefix().ref_count );\n    return k-1;\n}\n\ntask& task::self() {\n    generic_scheduler *v = governor::local_scheduler_weak();\n    v->assert_task_pool_valid();\n    __TBB_ASSERT( v->my_innermost_running_task, NULL );\n    return *v->my_innermost_running_task;\n}\n\nbool task::is_owned_by_current_thread() const {\n    return true;\n}\n\nvoid interface5::internal::task_base::destroy( task& victim ) {\n    // 1 may be a guard reference for wait_for_all, which was not reset because\n    // of concurrent_wait mode or because prepared root task was not actually used\n    // for spawning tasks (as in structured_task_group).\n    __TBB_ASSERT( (intptr_t)victim.prefix().ref_count <= 1, \"Task being destroyed must not have children\" );\n    __TBB_ASSERT( victim.state()==task::allocated, \"illegal state for victim task\" );\n    task* parent = victim.parent();\n    victim.~task();\n    if( parent ) {\n        __TBB_ASSERT( parent->state()!=task::freed && parent->state()!=task::ready,\n                      \"attempt to destroy child of running or corrupted parent?\" );\n        // 'reexecute' and 'executing' are also signs of a race condition, since most tasks\n        // set their ref_count upon entry but \"es_ref_count_active\" should detect this\n        parent->internal_decrement_ref_count();\n        // Even if the last reference to *parent is removed, it should not be spawned (documented behavior).\n    }\n    governor::local_scheduler_weak()->free_task<no_cache>( victim );\n}\n\nvoid task::spawn_and_wait_for_all( task_list& list ) {\n    generic_scheduler* s = governor::local_scheduler();\n    task* t = list.first;\n    if( t ) {\n        if( &t->prefix().next!=list.next_ptr )\n            s->local_spawn( t->prefix().next, *list.next_ptr );\n        list.clear();\n    }\n    s->local_wait_for_all( *this, t );\n}\n\n/** Defined out of line so that compiler does not replicate task's vtable.\n    It's pointless to define it inline anyway, because all call sites to it are virtual calls\n    that the compiler is unlikely to optimize. */\nvoid task::note_affinity( affinity_id ) {\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\nvoid task::change_group ( task_group_context& ctx ) {\n    prefix().context = &ctx;\n    internal::generic_scheduler* s = governor::local_scheduler_weak();\n    if ( __TBB_load_relaxed(ctx.my_kind) == task_group_context::binding_required ) {\n        // If we are in the outermost task dispatch loop of a master thread, then\n        // there is nothing to bind this context to, and we skip the binding part\n        // treating the context as isolated.\n        if ( s->master_outermost_level() )\n            __TBB_store_relaxed(ctx.my_kind, task_group_context::isolated);\n        else\n            ctx.bind_to( s );\n    }\n#if __TBB_FP_CONTEXT\n    if ( __TBB_load_relaxed(ctx.my_kind) == task_group_context::isolated &&\n            !(ctx.my_version_and_traits & task_group_context::fp_settings) )\n        ctx.copy_fp_settings( *s->default_context() );\n#endif\n    ITT_STACK_CREATE(ctx.itt_caller);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n} // namespace tbb\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/task_group_context.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"scheduler.h\"\n\n#include \"itt_notify.h\"\n\nnamespace tbb {\n\n#if __TBB_TASK_GROUP_CONTEXT\n\nusing namespace internal;\n\n//------------------------------------------------------------------------\n// captured_exception\n//------------------------------------------------------------------------\n\ninline char* duplicate_string ( const char* src ) {\n    char* dst = NULL;\n    if ( src ) {\n        size_t len = strlen(src) + 1;\n        dst = (char*)allocate_via_handler_v3(len);\n        strncpy (dst, src, len);\n    }\n    return dst;\n}\n\ncaptured_exception::~captured_exception () throw() {\n    clear();\n}\n\nvoid captured_exception::set ( const char* a_name, const char* info ) throw() {\n    my_exception_name = duplicate_string( a_name );\n    my_exception_info = duplicate_string( info );\n}\n\nvoid captured_exception::clear () throw() {\n    deallocate_via_handler_v3 (const_cast<char*>(my_exception_name));\n    deallocate_via_handler_v3 (const_cast<char*>(my_exception_info));\n}\n\ncaptured_exception* captured_exception::move () throw() {\n    captured_exception *e = (captured_exception*)allocate_via_handler_v3(sizeof(captured_exception));\n    if ( e ) {\n        ::new (e) captured_exception();\n        e->my_exception_name = my_exception_name;\n        e->my_exception_info = my_exception_info;\n        e->my_dynamic = true;\n        my_exception_name = my_exception_info = NULL;\n    }\n    return e;\n}\n\nvoid captured_exception::destroy () throw() {\n    __TBB_ASSERT ( my_dynamic, \"Method destroy can be used only on objects created by clone or allocate\" );\n    if ( my_dynamic ) {\n        this->captured_exception::~captured_exception();\n        deallocate_via_handler_v3 (this);\n    }\n}\n\ncaptured_exception* captured_exception::allocate ( const char* a_name, const char* info ) {\n    captured_exception *e = (captured_exception*)allocate_via_handler_v3( sizeof(captured_exception) );\n    if ( e ) {\n        ::new (e) captured_exception(a_name, info);\n        e->my_dynamic = true;\n    }\n    return e;\n}\n\nconst char* captured_exception::name() const throw() {\n    return my_exception_name;\n}\n\nconst char* captured_exception::what() const throw() {\n    return my_exception_info;\n}\n\n\n//------------------------------------------------------------------------\n// tbb_exception_ptr\n//------------------------------------------------------------------------\n\n#if !TBB_USE_CAPTURED_EXCEPTION\n\nnamespace internal {\n\ntemplate<typename T>\ntbb_exception_ptr* AllocateExceptionContainer( const T& src ) {\n    tbb_exception_ptr *eptr = (tbb_exception_ptr*)allocate_via_handler_v3( sizeof(tbb_exception_ptr) );\n    if ( eptr )\n        new (eptr) tbb_exception_ptr(src);\n    return eptr;\n}\n\ntbb_exception_ptr* tbb_exception_ptr::allocate () {\n    return AllocateExceptionContainer( std::current_exception() );\n}\n\ntbb_exception_ptr* tbb_exception_ptr::allocate ( const tbb_exception& ) {\n    return AllocateExceptionContainer( std::current_exception() );\n}\n\ntbb_exception_ptr* tbb_exception_ptr::allocate ( captured_exception& src ) {\n    tbb_exception_ptr *res = AllocateExceptionContainer( src );\n    src.destroy();\n    return res;\n}\n\nvoid tbb_exception_ptr::destroy () throw() {\n    this->tbb_exception_ptr::~tbb_exception_ptr();\n    deallocate_via_handler_v3 (this);\n}\n\n} // namespace internal\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\n\n//------------------------------------------------------------------------\n// task_group_context\n//------------------------------------------------------------------------\n\ntask_group_context::~task_group_context () {\n    if ( __TBB_load_relaxed(my_kind) == binding_completed ) {\n        if ( governor::is_set(my_owner) ) {\n            // Local update of the context list\n            uintptr_t local_count_snapshot = my_owner->my_context_state_propagation_epoch;\n            my_owner->my_local_ctx_list_update.store<relaxed>(1);\n            // Prevent load of nonlocal update flag from being hoisted before the\n            // store to local update flag.\n            atomic_fence();\n            if ( my_owner->my_nonlocal_ctx_list_update.load<relaxed>() ) {\n                spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);\n                my_node.my_prev->my_next = my_node.my_next;\n                my_node.my_next->my_prev = my_node.my_prev;\n                my_owner->my_local_ctx_list_update.store<relaxed>(0);\n            }\n            else {\n                my_node.my_prev->my_next = my_node.my_next;\n                my_node.my_next->my_prev = my_node.my_prev;\n                // Release fence is necessary so that update of our neighbors in\n                // the context list was committed when possible concurrent destroyer\n                // proceeds after local update flag is reset by the following store.\n                my_owner->my_local_ctx_list_update.store<release>(0);\n                if ( local_count_snapshot != the_context_state_propagation_epoch ) {\n                    // Another thread was propagating cancellation request when we removed\n                    // ourselves from the list. We must ensure that it is not accessing us\n                    // when this destructor finishes. We'll be able to acquire the lock\n                    // below only after the other thread finishes with us.\n                    spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);\n                }\n            }\n        }\n        else {\n            // Nonlocal update of the context list\n            // Synchronizes with generic_scheduler::cleanup_local_context_list()\n            // TODO: evaluate and perhaps relax, or add some lock instead\n            if ( internal::as_atomic(my_kind).fetch_and_store(dying) == detached ) {\n                my_node.my_prev->my_next = my_node.my_next;\n                my_node.my_next->my_prev = my_node.my_prev;\n            }\n            else {\n                //TODO: evaluate and perhaps relax\n                my_owner->my_nonlocal_ctx_list_update.fetch_and_increment<full_fence>();\n                //TODO: evaluate and perhaps remove\n                spin_wait_until_eq( my_owner->my_local_ctx_list_update, 0u );\n                my_owner->my_context_list_mutex.lock();\n                my_node.my_prev->my_next = my_node.my_next;\n                my_node.my_next->my_prev = my_node.my_prev;\n                my_owner->my_context_list_mutex.unlock();\n                //TODO: evaluate and perhaps relax\n                my_owner->my_nonlocal_ctx_list_update.fetch_and_decrement<full_fence>();\n            }\n        }\n    }\n#if __TBB_FP_CONTEXT\n    internal::punned_cast<cpu_ctl_env*>(&my_cpu_ctl_env)->~cpu_ctl_env();\n#endif\n    poison_value(my_version_and_traits);\n    if ( my_exception )\n        my_exception->destroy();\n    ITT_STACK(itt_caller != ITT_CALLER_NULL, caller_destroy, itt_caller);\n}\n\nvoid task_group_context::init () {\n#if __TBB_ITT_STRUCTURE_API\n    internal::string_index name = internal::CUSTOM_CTX;\n    // Check version of task group context to avoid reporting misleading identifier.\n    if( ( my_version_and_traits & version_mask ) >= 3 ) {\n        __TBB_ASSERT ( my_name >= 0 && my_name < NUM_STRINGS, \"Context description out of valid range\" );\n        name = my_name;\n    }\n    ITT_TASK_GROUP(this, name, NULL);\n    suppress_unused_warning(name); // in case if ITT_TASK_GROUP is no-op.\n#endif\n    __TBB_STATIC_ASSERT ( sizeof(my_version_and_traits) >= 4, \"Layout of my_version_and_traits must be reconsidered on this platform\" );\n    __TBB_STATIC_ASSERT ( sizeof(task_group_context) == 2 * NFS_MaxLineSize, \"Context class has wrong size - check padding and members alignment\" );\n    __TBB_ASSERT ( (uintptr_t(this) & (sizeof(my_cancellation_requested) - 1)) == 0, \"Context is improperly aligned\" );\n    __TBB_ASSERT ( __TBB_load_relaxed(my_kind) == isolated || __TBB_load_relaxed(my_kind) == bound, \"Context can be created only as isolated or bound\" );\n    my_parent = NULL;\n    my_cancellation_requested = 0;\n    my_exception = NULL;\n    my_owner = NULL;\n    my_state = 0;\n    itt_caller = ITT_CALLER_NULL;\n#if __TBB_TASK_PRIORITY\n    my_priority = normalized_normal_priority;\n#endif /* __TBB_TASK_PRIORITY */\n#if __TBB_FP_CONTEXT\n    __TBB_STATIC_ASSERT( sizeof(my_cpu_ctl_env) == sizeof(internal::uint64_t), \"The reserved space for FPU settings are not equal sizeof(uint64_t)\" );\n    __TBB_STATIC_ASSERT( sizeof(cpu_ctl_env) <= sizeof(my_cpu_ctl_env), \"FPU settings storage does not fit to uint64_t\" );\n    suppress_unused_warning( my_cpu_ctl_env.space );\n\n    cpu_ctl_env &ctl = *internal::punned_cast<cpu_ctl_env*>(&my_cpu_ctl_env);\n    new ( &ctl ) cpu_ctl_env;\n    if ( my_version_and_traits & fp_settings )\n        ctl.get_env();\n#endif\n}\n\nvoid task_group_context::register_with ( generic_scheduler *local_sched ) {\n    __TBB_ASSERT( local_sched, NULL );\n    my_owner = local_sched;\n    // state propagation logic assumes new contexts are bound to head of the list\n    my_node.my_prev = &local_sched->my_context_list_head;\n    // Notify threads that may be concurrently destroying contexts registered\n    // in this scheduler's list that local list update is underway.\n    local_sched->my_local_ctx_list_update.store<relaxed>(1);\n    // Prevent load of global propagation epoch counter from being hoisted before\n    // speculative stores above, as well as load of nonlocal update flag from\n    // being hoisted before the store to local update flag.\n    atomic_fence();\n    // Finalize local context list update\n    if ( local_sched->my_nonlocal_ctx_list_update.load<relaxed>() ) {\n        spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);\n        local_sched->my_context_list_head.my_next->my_prev = &my_node;\n        my_node.my_next = local_sched->my_context_list_head.my_next;\n        my_owner->my_local_ctx_list_update.store<relaxed>(0);\n        local_sched->my_context_list_head.my_next = &my_node;\n    }\n    else {\n        local_sched->my_context_list_head.my_next->my_prev = &my_node;\n        my_node.my_next = local_sched->my_context_list_head.my_next;\n        my_owner->my_local_ctx_list_update.store<release>(0);\n        // Thread-local list of contexts allows concurrent traversal by another thread\n        // while propagating state change. To ensure visibility of my_node's members\n        // to the concurrently traversing thread, the list's head is updated by means\n        // of store-with-release.\n        __TBB_store_with_release(local_sched->my_context_list_head.my_next, &my_node);\n    }\n}\n\nvoid task_group_context::bind_to ( generic_scheduler *local_sched ) {\n    __TBB_ASSERT ( __TBB_load_relaxed(my_kind) == binding_required, \"Already bound or isolated?\" );\n    __TBB_ASSERT ( !my_parent, \"Parent is set before initial binding\" );\n    my_parent = local_sched->my_innermost_running_task->prefix().context;\n#if __TBB_FP_CONTEXT\n    // Inherit FPU settings only if the context has not captured FPU settings yet.\n    if ( !(my_version_and_traits & fp_settings) )\n        copy_fp_settings(*my_parent);\n#endif\n\n    // Condition below prevents unnecessary thrashing parent context's cache line\n    if ( !(my_parent->my_state & may_have_children) )\n        my_parent->my_state |= may_have_children; // full fence is below\n    if ( my_parent->my_parent ) {\n        // Even if this context were made accessible for state change propagation\n        // (by placing __TBB_store_with_release(s->my_context_list_head.my_next, &my_node)\n        // above), it still could be missed if state propagation from a grand-ancestor\n        // was underway concurrently with binding.\n        // Speculative propagation from the parent together with epoch counters\n        // detecting possibility of such a race allow to avoid taking locks when\n        // there is no contention.\n\n        // Acquire fence is necessary to prevent reordering subsequent speculative\n        // loads of parent state data out of the scope where epoch counters comparison\n        // can reliably validate it.\n        uintptr_t local_count_snapshot = __TBB_load_with_acquire( my_parent->my_owner->my_context_state_propagation_epoch );\n        // Speculative propagation of parent's state. The speculation will be\n        // validated by the epoch counters check further on.\n        my_cancellation_requested = my_parent->my_cancellation_requested;\n#if __TBB_TASK_PRIORITY\n        my_priority = my_parent->my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n        register_with( local_sched ); // Issues full fence\n\n        // If no state propagation was detected by the following condition, the above\n        // full fence guarantees that the parent had correct state during speculative\n        // propagation before the fence. Otherwise the propagation from parent is\n        // repeated under the lock.\n        if ( local_count_snapshot != the_context_state_propagation_epoch ) {\n            // Another thread may be propagating state change right now. So resort to lock.\n            context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);\n            my_cancellation_requested = my_parent->my_cancellation_requested;\n#if __TBB_TASK_PRIORITY\n            my_priority = my_parent->my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n        }\n    }\n    else {\n        register_with( local_sched ); // Issues full fence\n        // As we do not have grand-ancestors, concurrent state propagation (if any)\n        // may originate only from the parent context, and thus it is safe to directly\n        // copy the state from it.\n        my_cancellation_requested = my_parent->my_cancellation_requested;\n#if __TBB_TASK_PRIORITY\n        my_priority = my_parent->my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n    }\n    __TBB_store_relaxed(my_kind, binding_completed);\n}\n\ntemplate <typename T>\nvoid task_group_context::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {\n    if (this->*mptr_state == new_state) {\n        // Nothing to do, whether descending from \"src\" or not, so no need to scan.\n        // Hopefully this happens often thanks to earlier invocations.\n        // This optimization is enabled by LIFO order in the context lists:\n        // - new contexts are bound to the beginning of lists;\n        // - descendants are newer than ancestors;\n        // - earlier invocations are therefore likely to \"paint\" long chains.\n    }\n    else if (this == &src) {\n        // This clause is disjunct from the traversal below, which skips src entirely.\n        // Note that src.*mptr_state is not necessarily still equal to new_state (another thread may have changed it again).\n        // Such interference is probably not frequent enough to aim for optimisation by writing new_state again (to make the other thread back down).\n        // Letting the other thread prevail may also be fairer.\n    }\n    else {\n        for ( task_group_context *ancestor = my_parent; ancestor != NULL; ancestor = ancestor->my_parent ) {\n            __TBB_ASSERT(internal::is_alive(ancestor->my_version_and_traits), \"context tree was corrupted\");\n            if ( ancestor == &src ) {\n                for ( task_group_context *ctx = this; ctx != ancestor; ctx = ctx->my_parent )\n                    ctx->*mptr_state = new_state;\n                break;\n            }\n        }\n    }\n}\n\ntemplate <typename T>\nvoid generic_scheduler::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {\n    spin_mutex::scoped_lock lock(my_context_list_mutex);\n    // Acquire fence is necessary to ensure that the subsequent node->my_next load\n    // returned the correct value in case it was just inserted in another thread.\n    // The fence also ensures visibility of the correct my_parent value.\n    context_list_node_t *node = __TBB_load_with_acquire(my_context_list_head.my_next);\n    while ( node != &my_context_list_head ) {\n        task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);\n        if ( ctx.*mptr_state != new_state )\n            ctx.propagate_task_group_state( mptr_state, src, new_state );\n        node = node->my_next;\n        __TBB_ASSERT( is_alive(ctx.my_version_and_traits), \"Local context list contains destroyed object\" );\n    }\n    // Sync up local propagation epoch with the global one. Release fence prevents\n    // reordering of possible store to *mptr_state after the sync point.\n    __TBB_store_with_release(my_context_state_propagation_epoch, the_context_state_propagation_epoch);\n}\n\ntemplate <typename T>\nbool market::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {\n    if ( !(src.my_state & task_group_context::may_have_children) )\n        return true;\n    // The whole propagation algorithm is under the lock in order to ensure correctness\n    // in case of concurrent state changes at the different levels of the context tree.\n    // See comment at the bottom of scheduler.cpp\n    context_state_propagation_mutex_type::scoped_lock lock(the_context_state_propagation_mutex);\n    if ( src.*mptr_state != new_state )\n        // Another thread has concurrently changed the state. Back down.\n        return false;\n    // Advance global state propagation epoch\n    __TBB_FetchAndAddWrelease(&the_context_state_propagation_epoch, 1);\n    // Propagate to all workers and masters and sync up their local epochs with the global one\n    unsigned num_workers = my_first_unused_worker_idx;\n    for ( unsigned i = 0; i < num_workers; ++i ) {\n        generic_scheduler *s = my_workers[i];\n        // If the worker is only about to be registered, skip it.\n        if ( s )\n            s->propagate_task_group_state( mptr_state, src, new_state );\n    }\n    // Propagate to all master threads\n    // The whole propagation sequence is locked, thus no contention is expected\n    for( scheduler_list_type::iterator it = my_masters.begin(); it != my_masters.end(); it++  )\n        it->propagate_task_group_state( mptr_state, src, new_state );\n    return true;\n}\n\nbool task_group_context::cancel_group_execution () {\n    __TBB_ASSERT ( my_cancellation_requested == 0 || my_cancellation_requested == 1, \"Invalid cancellation state\");\n    if ( my_cancellation_requested || as_atomic(my_cancellation_requested).compare_and_swap(1, 0) ) {\n        // This task group and any descendants have already been canceled.\n        // (A newly added descendant would inherit its parent's my_cancellation_requested,\n        // not missing out on any cancellation still being propagated, and a context cannot be uncanceled.)\n        return false;\n    }\n    governor::local_scheduler_weak()->my_market->propagate_task_group_state( &task_group_context::my_cancellation_requested, *this, (uintptr_t)1 );\n    return true;\n}\n\nbool task_group_context::is_group_execution_cancelled () const {\n    return my_cancellation_requested != 0;\n}\n\n// IMPORTANT: It is assumed that this method is not used concurrently!\nvoid task_group_context::reset () {\n    //! TODO: Add assertion that this context does not have children\n    // No fences are necessary since this context can be accessed from another thread\n    // only after stealing happened (which means necessary fences were used).\n    if ( my_exception )  {\n        my_exception->destroy();\n        my_exception = NULL;\n    }\n    my_cancellation_requested = 0;\n}\n\n#if __TBB_FP_CONTEXT\n// IMPORTANT: It is assumed that this method is not used concurrently!\nvoid task_group_context::capture_fp_settings () {\n    //! TODO: Add assertion that this context does not have children\n    // No fences are necessary since this context can be accessed from another thread\n    // only after stealing happened (which means necessary fences were used).\n    cpu_ctl_env &ctl = *internal::punned_cast<cpu_ctl_env*>(&my_cpu_ctl_env);\n    if ( !(my_version_and_traits & fp_settings) ) {\n        new ( &ctl ) cpu_ctl_env;\n        my_version_and_traits |= fp_settings;\n    }\n    ctl.get_env();\n}\n\nvoid task_group_context::copy_fp_settings( const task_group_context &src ) {\n    __TBB_ASSERT( !(my_version_and_traits & fp_settings), \"The context already has FPU settings.\" );\n    __TBB_ASSERT( src.my_version_and_traits & fp_settings, \"The source context does not have FPU settings.\" );\n\n    cpu_ctl_env &ctl = *internal::punned_cast<cpu_ctl_env*>(&my_cpu_ctl_env);\n    cpu_ctl_env &src_ctl = *internal::punned_cast<cpu_ctl_env*>(&src.my_cpu_ctl_env);\n    new (&ctl) cpu_ctl_env( src_ctl );\n    my_version_and_traits |= fp_settings;\n}\n#endif /* __TBB_FP_CONTEXT */\n\nvoid task_group_context::register_pending_exception () {\n    if ( my_cancellation_requested )\n        return;\n#if TBB_USE_EXCEPTIONS\n    try {\n        throw;\n    } TbbCatchAll( this );\n#endif /* TBB_USE_EXCEPTIONS */\n}\n\n#if __TBB_TASK_PRIORITY\nvoid task_group_context::set_priority ( priority_t prio ) {\n    __TBB_ASSERT( prio == priority_low || prio == priority_normal || prio == priority_high, \"Invalid priority level value\" );\n    intptr_t p = normalize_priority(prio);\n    if ( my_priority == p && !(my_state & task_group_context::may_have_children))\n        return;\n    my_priority = p;\n    internal::generic_scheduler* s = governor::local_scheduler_if_initialized();\n    if ( !s || !s->my_arena || !s->my_market->propagate_task_group_state(&task_group_context::my_priority, *this, p) )\n        return;\n\n    //! TODO: the arena of the calling thread might be unrelated;\n    // need to find out the right arena for priority update.\n    // The executing status check only guarantees being inside some working arena.\n    if ( s->my_innermost_running_task->state() == task::executing )\n        // Updating arena priority here does not eliminate necessity of checking each\n        // task priority and updating arena priority if necessary before the task execution.\n        // These checks will be necessary because:\n        // a) set_priority() may be invoked before any tasks from this task group are spawned;\n        // b) all spawned tasks from this task group are retrieved from the task pools.\n        // These cases create a time window when arena priority may be lowered.\n        s->my_market->update_arena_priority( *s->my_arena, p );\n}\n\npriority_t task_group_context::priority () const {\n    return static_cast<priority_t>(priority_from_normalized_rep[my_priority]);\n}\n#endif /* __TBB_TASK_PRIORITY */\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/task_stream.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_task_stream_H\n#define _TBB_task_stream_H\n\n#include \"tbb/tbb_stddef.h\"\n#include <deque>\n#include <climits>\n#include \"tbb/atomic.h\" // for __TBB_Atomic*\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"scheduler_common.h\"\n#include \"tbb_misc.h\" // for FastRandom\n\nnamespace tbb {\nnamespace internal {\n\n//! Essentially, this is just a pair of a queue and a mutex to protect the queue.\n/** The reason std::pair is not used is that the code would look less clean\n    if field names were replaced with 'first' and 'second'. **/\ntemplate< typename T, typename mutex_t >\nstruct queue_and_mutex {\n    typedef std::deque< T, tbb_allocator<T> > queue_base_t;\n\n    queue_base_t my_queue;\n    mutex_t      my_mutex;\n\n    queue_and_mutex () : my_queue(), my_mutex() {}\n    ~queue_and_mutex () {}\n};\n\ntypedef uintptr_t population_t;\nconst population_t one = 1;\n\ninline void set_one_bit( population_t& dest, int pos ) {\n    __TBB_ASSERT( pos>=0, NULL );\n    __TBB_ASSERT( pos<int(sizeof(population_t)*CHAR_BIT), NULL );\n    __TBB_AtomicOR( &dest, one<<pos );\n}\n\ninline void clear_one_bit( population_t& dest, int pos ) {\n    __TBB_ASSERT( pos>=0, NULL );\n    __TBB_ASSERT( pos<int(sizeof(population_t)*CHAR_BIT), NULL );\n    __TBB_AtomicAND( &dest, ~(one<<pos) );\n}\n\ninline bool is_bit_set( population_t val, int pos ) {\n    __TBB_ASSERT( pos>=0, NULL );\n    __TBB_ASSERT( pos<int(sizeof(population_t)*CHAR_BIT), NULL );\n    return (val & (one<<pos)) != 0;\n}\n\n//! The container for \"fairness-oriented\" aka \"enqueued\" tasks.\ntemplate<int Levels>\nclass task_stream : no_copy {\n    typedef queue_and_mutex <task*, spin_mutex> lane_t;\n    population_t population[Levels];\n    padded<lane_t>* lanes[Levels];\n    unsigned N;\n\npublic:\n    task_stream() : N() {\n        for(int level = 0; level < Levels; level++) {\n            population[level] = 0;\n            lanes[level] = NULL;\n        }\n    }\n\n    void initialize( unsigned n_lanes ) {\n        const unsigned max_lanes = sizeof(population_t) * CHAR_BIT;\n\n        N = n_lanes>=max_lanes ? max_lanes : n_lanes>2 ? 1<<(__TBB_Log2(n_lanes-1)+1) : 2;\n        __TBB_ASSERT( N==max_lanes || N>=n_lanes && ((N-1)&N)==0, \"number of lanes miscalculated\");\n        __TBB_ASSERT( N <= sizeof(population_t) * CHAR_BIT, NULL );\n        for(int level = 0; level < Levels; level++) {\n            lanes[level] = new padded<lane_t>[N];\n            __TBB_ASSERT( !population[level], NULL );\n        }\n    }\n\n    ~task_stream() {\n        for(int level = 0; level < Levels; level++)\n            if (lanes[level]) delete[] lanes[level];\n    }\n\n    //! Push a task into a lane.\n    void push( task* source, int level, FastRandom& random ) {\n        // Lane selection is random. Each thread should keep a separate seed value.\n        unsigned idx;\n        for( ; ; ) {\n            idx = random.get() & (N-1);\n            spin_mutex::scoped_lock lock;\n            if( lock.try_acquire(lanes[level][idx].my_mutex) ) {\n                lanes[level][idx].my_queue.push_back(source);\n                set_one_bit( population[level], idx ); //TODO: avoid atomic op if the bit is already set\n                break;\n            }\n        }\n    }\n\n    //! Try finding and popping a task.\n    task* pop( int level, unsigned& last_used_lane ) {\n        task* result = NULL;\n        // Lane selection is round-robin. Each thread should keep its last used lane.\n        unsigned idx = (last_used_lane+1)&(N-1);\n        for( ; population[level]; idx=(idx+1)&(N-1) ) {\n            if( is_bit_set( population[level], idx ) ) {\n                lane_t& lane = lanes[level][idx];\n                spin_mutex::scoped_lock lock;\n                if( lock.try_acquire(lane.my_mutex) && !lane.my_queue.empty() ) {\n                    result = lane.my_queue.front();\n                    lane.my_queue.pop_front();\n                    if( lane.my_queue.empty() )\n                        clear_one_bit( population[level], idx );\n                    break;\n                }\n            }\n        }\n        last_used_lane = idx;\n        return result;\n    }\n\n    //! Checks existence of a task.\n    bool empty(int level) {\n        return !population[level];\n    }\n\n    //! Destroys all remaining tasks in every lane. Returns the number of destroyed tasks.\n    /** Tasks are not executed, because it would potentially create more tasks at a late stage.\n        The scheduler is really expected to execute all tasks before task_stream destruction. */\n    intptr_t drain() {\n        intptr_t result = 0;\n        for(int level = 0; level < Levels; level++)\n            for(unsigned i=0; i<N; ++i) {\n                lane_t& lane = lanes[level][i];\n                spin_mutex::scoped_lock lock(lane.my_mutex);\n                for(lane_t::queue_base_t::iterator it=lane.my_queue.begin();\n                    it!=lane.my_queue.end(); ++it, ++result)\n                {\n                    __TBB_ASSERT( is_bit_set( population[level], i ), NULL );\n                    task* t = *it;\n                    tbb::task::destroy(*t);\n                }\n                lane.my_queue.clear();\n                clear_one_bit( population[level], i );\n            }\n        return result;\n    }\n}; // task_stream\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_task_stream_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_assert_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// IMPORTANT: To use assertion handling in TBB, exactly one of the TBB source files\n// should #include tbb_assert_impl.h thus instantiating assertion handling routines.\n// The intent of putting it to a separate file is to allow some tests to use it\n// as well in order to avoid dependency on the library.\n\n// include headers for required function declarations\n#include <cstdlib>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#if _MSC_VER\n#include <crtdbg.h>\n#endif\n\n#if _MSC_VER >= 1400\n#define __TBB_EXPORTED_FUNC   __cdecl\n#else\n#define __TBB_EXPORTED_FUNC\n#endif\n\nusing namespace std;\n\n#if __TBBMALLOC_BUILD\nnamespace rml { namespace internal {\n#else\nnamespace tbb {\n#endif\n    //! Type for an assertion handler\n    typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );\n\n    static assertion_handler_type assertion_handler;\n\n    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler ) {\n        assertion_handler_type old_handler = assertion_handler;\n        assertion_handler = new_handler;\n        return old_handler;\n    }\n\n    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment ) {\n        if( assertion_handler_type a = assertion_handler ) {\n            (*a)(filename,line,expression,comment);\n        } else {\n            static bool already_failed;\n            if( !already_failed ) {\n                already_failed = true;\n                fprintf( stderr, \"Assertion %s failed on line %d of file %s\\n\",\n                         expression, line, filename );\n                if( comment )\n                    fprintf( stderr, \"Detailed description: %s\\n\", comment );\n#if _MSC_VER && _DEBUG\n                if(1 == _CrtDbgReport(_CRT_ASSERT, filename, line, \"tbb_debug.dll\", \"%s\\r\\n%s\", expression, comment?comment:\"\"))\n                        _CrtDbgBreak();\n#else\n                fflush(stderr);\n                abort();\n#endif\n            }\n        }\n    }\n\n#if defined(_MSC_VER)&&_MSC_VER<1400\n#   define vsnprintf _vsnprintf\n#endif\n\n#if !__TBBMALLOC_BUILD\n    namespace internal {\n        //! Report a runtime warning.\n        void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... )\n        {\n            char str[1024]; memset(str, 0, 1024);\n            va_list args; va_start(args, format);\n            vsnprintf( str, 1024-1, format, args);\n            va_end(args);\n            fprintf( stderr, \"TBB Warning: %s\\n\", str);\n        }\n    } // namespace internal\n#endif\n\n#if __TBBMALLOC_BUILD\n}} // namespaces rml::internal\n#else\n}  // namespace tbb\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include \"tbb/global_control.h\"\n#include \"tbb_main.h\"\n#include \"governor.h\"\n#include \"market.h\"\n#include \"tbb_misc.h\"\n#include \"itt_notify.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//------------------------------------------------------------------------\n// Begin shared data layout.\n// The following global data items are mostly read-only after initialization.\n//------------------------------------------------------------------------\n\n//! Padding in order to prevent false sharing.\nstatic const char _pad[NFS_MaxLineSize - sizeof(int)] = {};\n\n//------------------------------------------------------------------------\n// governor data\nbasic_tls<uintptr_t> governor::theTLS;\nunsigned governor::DefaultNumberOfThreads;\nrml::tbb_factory governor::theRMLServerFactory;\nbool governor::UsePrivateRML;\nbool governor::is_speculation_enabled;\nbool governor::is_rethrow_broken;\n\n//------------------------------------------------------------------------\n// market data\nmarket* market::theMarket;\nmarket::global_market_mutex_type market::theMarketMutex;\n\n//------------------------------------------------------------------------\n// One time initialization data\n\n//! Counter of references to global shared resources such as TLS.\natomic<int> __TBB_InitOnce::count;\n\n__TBB_atomic_flag __TBB_InitOnce::InitializationLock;\n\n//! Flag that is set to true after one-time initializations are done.\nbool __TBB_InitOnce::InitializationDone;\n\n#if DO_ITT_NOTIFY\n    static bool ITT_Present;\n    static bool ITT_InitializationDone;\n#endif\n\n#if !(_WIN32||_WIN64) || __TBB_SOURCE_DIRECTLY_INCLUDED\n    static __TBB_InitOnce __TBB_InitOnceHiddenInstance;\n#endif\n\n//------------------------------------------------------------------------\n// generic_scheduler data\n\n//! Pointer to the scheduler factory function\ngeneric_scheduler* (*AllocateSchedulerPtr)( market& );\n\n#if __TBB_OLD_PRIMES_RNG\n//! Table of primes used by fast random-number generator (FastRandom).\n/** Also serves to keep anything else from being placed in the same\n    cache line as the global data items preceding it. */\nstatic const unsigned Primes[] = {\n    0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,\n    0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,\n    0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,\n    0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,\n    0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,\n    0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,\n    0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,\n    0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,\n    0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,\n    0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,\n    0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,\n    0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,\n    0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,\n    0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,\n    0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,\n    0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f\n};\n\n//------------------------------------------------------------------------\n// End of shared data layout\n//------------------------------------------------------------------------\n\n//------------------------------------------------------------------------\n// Shared data accessors\n//------------------------------------------------------------------------\n\nunsigned GetPrime ( unsigned seed ) {\n    return Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];\n}\n#endif //__TBB_OLD_PRIMES_RNG\n\n//------------------------------------------------------------------------\n// __TBB_InitOnce\n//------------------------------------------------------------------------\n\nvoid __TBB_InitOnce::add_ref() {\n    if( ++count==1 )\n        governor::acquire_resources();\n}\n\nvoid __TBB_InitOnce::remove_ref() {\n    int k = --count;\n    __TBB_ASSERT(k>=0,\"removed __TBB_InitOnce ref that was not added?\");\n    if( k==0 ) {\n        governor::release_resources();\n        ITT_FINI_ITTLIB();\n    }\n}\n\n//------------------------------------------------------------------------\n// One-time Initializations\n//------------------------------------------------------------------------\n\n//! Defined in cache_aligned_allocator.cpp\nvoid initialize_cache_aligned_allocator();\n\n//! Defined in scheduler.cpp\nvoid Scheduler_OneTimeInitialization ( bool itt_present );\n\n#if DO_ITT_NOTIFY\n\n#if __TBB_ITT_STRUCTURE_API\n\nstatic __itt_domain *tbb_domains[ITT_NUM_DOMAINS] = {};\n\nstruct resource_string {\n    const char *str;\n    __itt_string_handle *itt_str_handle;\n};\n\n//\n// populate resource strings\n//\n#define TBB_STRING_RESOURCE( index_name, str ) { str, NULL },\nstatic resource_string strings_for_itt[] = {\n    #include \"tbb/internal/_tbb_strings.h\"\n    { \"num_resource_strings\", NULL }\n};\n#undef TBB_STRING_RESOURCE\n\nstatic __itt_string_handle *ITT_get_string_handle(int idx) {\n    __TBB_ASSERT(idx >= 0, NULL);\n    return idx < NUM_STRINGS ? strings_for_itt[idx].itt_str_handle : NULL;\n}\n\nstatic void ITT_init_domains() {\n    tbb_domains[ITT_DOMAIN_MAIN] = __itt_domain_create( _T(\"tbb\") );\n    tbb_domains[ITT_DOMAIN_MAIN]->flags = 1;\n    tbb_domains[ITT_DOMAIN_FLOW] = __itt_domain_create( _T(\"tbb.flow\") );\n    tbb_domains[ITT_DOMAIN_FLOW]->flags = 1;\n    tbb_domains[ITT_DOMAIN_ALGO] = __itt_domain_create( _T(\"tbb.algorithm\") );\n    tbb_domains[ITT_DOMAIN_ALGO]->flags = 1;\n}\n\nstatic void ITT_init_strings() {\n    for ( int i = 0; i < NUM_STRINGS; ++i ) {\n#if _WIN32||_WIN64\n        strings_for_itt[i].itt_str_handle = __itt_string_handle_createA( strings_for_itt[i].str );\n#else\n        strings_for_itt[i].itt_str_handle = __itt_string_handle_create( strings_for_itt[i].str );\n#endif\n    }\n}\n\nstatic void ITT_init() {\n    ITT_init_domains();\n    ITT_init_strings();\n}\n\n#endif // __TBB_ITT_STRUCTURE_API\n\n/** Thread-unsafe lazy one-time initialization of tools interop.\n    Used by both dummy handlers and general TBB one-time initialization routine. **/\nvoid ITT_DoUnsafeOneTimeInitialization () {\n    if ( !ITT_InitializationDone ) {\n        ITT_Present = (__TBB_load_ittnotify()!=0);\n#if __TBB_ITT_STRUCTURE_API\n        if (ITT_Present) ITT_init();\n#endif\n        ITT_InitializationDone = true;\n        ITT_SYNC_CREATE(&market::theMarketMutex, SyncType_GlobalLock, SyncObj_SchedulerInitialization);\n    }\n}\n\n/** Thread-safe lazy one-time initialization of tools interop.\n    Used by dummy handlers only. **/\nextern \"C\"\nvoid ITT_DoOneTimeInitialization() {\n    __TBB_InitOnce::lock();\n    ITT_DoUnsafeOneTimeInitialization();\n    __TBB_InitOnce::unlock();\n}\n#endif /* DO_ITT_NOTIFY */\n\n//! Performs thread-safe lazy one-time general TBB initialization.\nvoid DoOneTimeInitializations() {\n    suppress_unused_warning(_pad);\n    __TBB_InitOnce::lock();\n    // No fence required for load of InitializationDone, because we are inside a critical section.\n    if( !__TBB_InitOnce::InitializationDone ) {\n        __TBB_InitOnce::add_ref();\n        if( GetBoolEnvironmentVariable(\"TBB_VERSION\") )\n            PrintVersion();\n        bool itt_present = false;\n#if DO_ITT_NOTIFY\n        ITT_DoUnsafeOneTimeInitialization();\n        itt_present = ITT_Present;\n#endif /* DO_ITT_NOTIFY */\n        initialize_cache_aligned_allocator();\n        governor::initialize_rml_factory();\n        Scheduler_OneTimeInitialization( itt_present );\n        // Force processor groups support detection\n        governor::default_num_threads();\n        // Dump version data\n        governor::print_version_info();\n        PrintExtraVersionInfo( \"Tools support\", itt_present ? \"enabled\" : \"disabled\" );\n        __TBB_InitOnce::InitializationDone = true;\n    }\n    __TBB_InitOnce::unlock();\n}\n\n#if (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED\n//! Windows \"DllMain\" that handles startup and shutdown of dynamic library.\nextern \"C\" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID lpvReserved ) {\n    switch( reason ) {\n        case DLL_PROCESS_ATTACH:\n            __TBB_InitOnce::add_ref();\n            break;\n        case DLL_PROCESS_DETACH:\n            // Since THREAD_DETACH is not called for the main thread, call auto-termination\n            // here as well - but not during process shutdown (due to risk of a deadlock).\n            if( lpvReserved==NULL ) // library unload\n                governor::terminate_auto_initialized_scheduler();\n            __TBB_InitOnce::remove_ref();\n            // It is assumed that InitializationDone is not set after DLL_PROCESS_DETACH,\n            // and thus no race on InitializationDone is possible.\n            if( __TBB_InitOnce::initialization_done() ) {\n                // Remove reference that we added in DoOneTimeInitializations.\n                __TBB_InitOnce::remove_ref();\n            }\n            break;\n        case DLL_THREAD_DETACH:\n            governor::terminate_auto_initialized_scheduler();\n            break;\n    }\n    return true;\n}\n#endif /* (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED */\n\nvoid itt_store_pointer_with_release_v3( void* dst, void* src ) {\n    ITT_NOTIFY(sync_releasing, dst);\n    __TBB_store_with_release(*static_cast<void**>(dst),src);\n}\n\nvoid* itt_load_pointer_with_acquire_v3( const void* src ) {\n    void* result = __TBB_load_with_acquire(*static_cast<void*const*>(src));\n    ITT_NOTIFY(sync_acquired, const_cast<void*>(src));\n    return result;\n}\n\n#if DO_ITT_NOTIFY\nvoid call_itt_notify_v5(int t, void *ptr) {\n    switch (t) {\n    case 0: ITT_NOTIFY(sync_prepare, ptr); break;\n    case 1: ITT_NOTIFY(sync_cancel, ptr); break;\n    case 2: ITT_NOTIFY(sync_acquired, ptr); break;\n    case 3: ITT_NOTIFY(sync_releasing, ptr); break;\n    }\n}\n#else\nvoid call_itt_notify_v5(int /*t*/, void* /*ptr*/) {}\n#endif\n\n#if __TBB_ITT_STRUCTURE_API\n\n#if DO_ITT_NOTIFY\nconst __itt_id itt_null_id = {0, 0, 0};\n\nstatic inline __itt_domain* get_itt_domain( itt_domain_enum idx ) {\n    if (tbb_domains[idx] == NULL) {\n        ITT_DoOneTimeInitialization();\n    }\n    return tbb_domains[idx];\n}\n\nstatic inline void itt_id_make(__itt_id *id, void* addr, unsigned long long extra) {\n    *id = __itt_id_make(addr, extra);\n}\n\nstatic inline void itt_id_create(const __itt_domain *domain, __itt_id id) {\n    ITTNOTIFY_VOID_D1(id_create, domain, id);\n}\n\nvoid itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                             void *parent, unsigned long long parent_extra, string_index name_index ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id group_id = itt_null_id;\n        __itt_id parent_id = itt_null_id;\n        itt_id_make( &group_id, group, group_extra );\n        itt_id_create( d, group_id );\n        if ( parent ) {\n            itt_id_make( &parent_id, parent, parent_extra );\n        }\n        __itt_string_handle *n = ITT_get_string_handle(name_index);\n        ITTNOTIFY_VOID_D3(task_group, d, group_id, parent_id, n);\n    }\n}\n\nvoid itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                              string_index key, const char *value ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id id = itt_null_id;\n        itt_id_make( &id, addr, addr_extra );\n        __itt_string_handle *k = ITT_get_string_handle(key);\n       size_t value_length = strlen( value );\n#if _WIN32||_WIN64\n        ITTNOTIFY_VOID_D4(metadata_str_addA, d, id, k, value, value_length);\n#else\n        ITTNOTIFY_VOID_D4(metadata_str_add, d, id, k, value, value_length);\n#endif\n    }\n}\n\nvoid itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                          itt_relation relation, void *addr1, unsigned long long addr1_extra ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id id0 = itt_null_id;\n        __itt_id id1 = itt_null_id;\n        itt_id_make( &id0, addr0, addr0_extra );\n        itt_id_make( &id1, addr1, addr1_extra );\n        ITTNOTIFY_VOID_D3(relation_add, d, id0, (__itt_relation)relation, id1);\n    }\n}\n\nvoid itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                        void *parent, unsigned long long parent_extra, string_index name_index ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id task_id = itt_null_id;\n        __itt_id parent_id = itt_null_id;\n        if ( task ) {\n            itt_id_make( &task_id, task, task_extra );\n        }\n        if ( parent ) {\n            itt_id_make( &parent_id, parent, parent_extra );\n        }\n        __itt_string_handle *n = ITT_get_string_handle(name_index);\n        ITTNOTIFY_VOID_D3(task_begin, d, task_id, parent_id, n );\n    }\n}\n\nvoid itt_task_end_v7( itt_domain_enum domain ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        ITTNOTIFY_VOID_D0(task_end, d);\n    }\n}\n\nvoid itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                          void *parent, unsigned long long parent_extra, string_index /* name_index */ ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id region_id = itt_null_id;\n        __itt_id parent_id = itt_null_id;\n        itt_id_make( &region_id, region, region_extra );\n        if ( parent ) {\n            itt_id_make( &parent_id, parent, parent_extra );\n        }\n        ITTNOTIFY_VOID_D3(region_begin, d, region_id, parent_id, NULL );\n    }\n}\n\nvoid itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra ) {\n    if ( __itt_domain *d = get_itt_domain( domain ) ) {\n        __itt_id region_id = itt_null_id;\n        itt_id_make( &region_id, region, region_extra );\n        ITTNOTIFY_VOID_D1( region_end, d, region_id );\n    }\n}\n\n#else // DO_ITT_NOTIFY\n\nvoid itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                             void *parent, unsigned long long parent_extra, string_index name_index ) { }\n\nvoid itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                              string_index key, const char *value ) { }\n\nvoid itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                          itt_relation relation, void *addr1, unsigned long long addr1_extra ) { }\n\nvoid itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                        void * /*parent*/, unsigned long long /* parent_extra */, string_index /* name_index */ ) { }\n\nvoid itt_task_end_v7( itt_domain_enum domain ) { }\n\nvoid itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                          void *parent, unsigned long long parent_extra, string_index /* name_index */ ) { }\n\nvoid itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra ) { }\n\n#endif // DO_ITT_NOTIFY\n\n#endif // __TBB_ITT_STRUCTURE_API\n\nvoid* itt_load_pointer_v3( const void* src ) {\n    //TODO: replace this with __TBB_load_relaxed\n    void* result = *static_cast<void*const*>(src);\n    return result;\n}\n\nvoid itt_set_sync_name_v3( void* obj, const tchar* name) {\n    ITT_SYNC_RENAME(obj, name);\n    suppress_unused_warning(obj, name);\n}\n\n\nclass control_storage {\n    friend class tbb::interface9::global_control;\nprotected:\n    size_t my_active_value;\n    atomic<global_control*> my_head;\n    spin_mutex my_list_mutex;\n\n    virtual size_t default_value() const = 0;\n    virtual void apply_active() const {}\n    virtual bool is_first_arg_preferred(size_t a, size_t b) const {\n        return a>b; // prefer max by default\n    }\n    virtual size_t active_value() const {\n        return my_head? my_active_value : default_value();\n    }\n};\n\nclass allowed_parallelism_control : public padded<control_storage> {\n    virtual size_t default_value() const __TBB_override {\n        return max(1U, governor::default_num_threads());\n    }\n    virtual bool is_first_arg_preferred(size_t a, size_t b) const __TBB_override {\n        return a<b; // prefer min allowed parallelism\n    }\n    virtual void apply_active() const __TBB_override {\n        __TBB_ASSERT( my_active_value>=1, NULL );\n        // -1 to take master into account\n        market::set_active_num_workers( my_active_value-1 );\n    }\n    virtual size_t active_value() const __TBB_override {\n/* Reading of my_active_value is not synchronized with possible updating\n   of my_head by other thread. It's ok, as value of my_active_value became\n   not invalid, just obsolete. */\n        if (!my_head)\n            return default_value();\n        // non-zero, if market is active\n        const size_t workers = market::max_num_workers();\n        // We can't exceed market's maximal number of workers.\n        // +1 to take master into account\n        return workers? min(workers+1, my_active_value): my_active_value;\n    }\npublic:\n    size_t active_value_if_present() const {\n        return my_head? my_active_value : 0;\n    }\n};\n\nclass stack_size_control : public padded<control_storage> {\n    virtual size_t default_value() const __TBB_override {\n        return tbb::internal::ThreadStackSize;\n    }\n    virtual void apply_active() const __TBB_override {\n#if __TBB_WIN8UI_SUPPORT\n        __TBB_ASSERT( false, \"For Windows Store* apps we must not set stack size\" );\n#endif\n    }\n};\n\nstatic allowed_parallelism_control allowed_parallelism_ctl;\nstatic stack_size_control stack_size_ctl;\n\nstatic control_storage *controls[] = {&allowed_parallelism_ctl, &stack_size_ctl};\n\nunsigned market::app_parallelism_limit() {\n    return allowed_parallelism_ctl.active_value_if_present();\n}\n\n} // namespace internal\n\nnamespace interface9 {\n\nusing namespace internal;\nusing namespace tbb::internal;\n\nvoid global_control::internal_create() {\n    __TBB_ASSERT_RELEASE( my_param < global_control::parameter_max, NULL );\n    control_storage *const c = controls[my_param];\n\n    spin_mutex::scoped_lock lock(c->my_list_mutex);\n    if (!c->my_head || c->is_first_arg_preferred(my_value, c->my_active_value)) {\n        c->my_active_value = my_value;\n        // to guarantee that apply_active() is called with current active value,\n        // calls it here and in internal_destroy() under my_list_mutex\n        c->apply_active();\n    }\n    my_next = c->my_head;\n    // publish my_head, at this point my_active_value must be valid\n    c->my_head = this;\n}\n\nvoid global_control::internal_destroy() {\n    global_control *prev = 0;\n\n    __TBB_ASSERT_RELEASE( my_param < global_control::parameter_max, NULL );\n    control_storage *const c = controls[my_param];\n    __TBB_ASSERT( c->my_head, NULL );\n\n    // Concurrent reading and changing global parameter is possible.\n    // In this case, my_active_value may not match current state of parameters.\n    // This is OK because:\n    // 1) my_active_value is either current or previous\n    // 2) my_active_value is current on internal_destroy leave\n    spin_mutex::scoped_lock lock(c->my_list_mutex);\n    size_t new_active = (size_t)-1, old_active = c->my_active_value;\n\n    if ( c->my_head != this )\n        new_active = c->my_head->my_value;\n    else if ( c->my_head->my_next )\n        new_active = c->my_head->my_next->my_value;\n    // if there is only one element, new_active will be set later\n    for ( global_control *curr = c->my_head; curr; prev = curr, curr = curr->my_next )\n        if ( curr == this ) {\n            if ( prev )\n                prev->my_next = my_next;\n            else\n                c->my_head = my_next;\n        } else\n            if (c->is_first_arg_preferred(curr->my_value, new_active))\n                new_active = curr->my_value;\n\n    if ( !c->my_head ) {\n        __TBB_ASSERT( new_active==(size_t)-1, NULL );\n        new_active = c->default_value();\n    }\n    if ( new_active != old_active ) {\n        c->my_active_value = new_active;\n        c->apply_active();\n    }\n}\n\nsize_t global_control::active_value( int param ) {\n    __TBB_ASSERT_RELEASE( param < global_control::parameter_max, NULL );\n    return controls[param]->active_value();\n}\n\n} // tbb::interface9\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_main.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_tbb_main_H\n#define _TBB_tbb_main_H\n\n#include \"tbb/atomic.h\"\n#include \"governor.h\"\n\nnamespace tbb {\n\nnamespace internal {\n\nvoid DoOneTimeInitializations ();\n\n//------------------------------------------------------------------------\n// __TBB_InitOnce\n//------------------------------------------------------------------------\n\n//! Class that supports TBB initialization.\n/** It handles acquisition and release of global resources (e.g. TLS) during startup and shutdown,\n    as well as synchronization for DoOneTimeInitializations. */\nclass __TBB_InitOnce {\n    friend void DoOneTimeInitializations();\n    friend void ITT_DoUnsafeOneTimeInitialization ();\n\n    static atomic<int> count;\n\n    //! Platform specific code to acquire resources.\n    static void acquire_resources();\n\n    //! Platform specific code to release resources.\n    static void release_resources();\n\n    //! Specifies if the one-time initializations has been done.\n    static bool InitializationDone;\n\n    //! Global initialization lock\n    /** Scenarios are possible when tools interop has to be initialized before the\n        TBB itself. This imposes a requirement that the global initialization lock\n        has to support valid static initialization, and does not issue any tool\n        notifications in any build mode. **/\n    static __TBB_atomic_flag InitializationLock;\n\npublic:\n    static void lock()   { __TBB_LockByte( InitializationLock ); }\n\n    static void unlock() { __TBB_UnlockByte( InitializationLock ); }\n\n    static bool initialization_done() { return __TBB_load_with_acquire(InitializationDone); }\n\n    //! Add initial reference to resources.\n    /** We assume that dynamic loading of the library prevents any other threads\n        from entering the library until this constructor has finished running. **/\n    __TBB_InitOnce() { add_ref(); }\n\n    //! Remove the initial reference to resources.\n    /** This is not necessarily the last reference if other threads are still running. **/\n    ~__TBB_InitOnce() {\n        governor::terminate_auto_initialized_scheduler(); // TLS dtor not called for the main thread\n        remove_ref();\n        // We assume that InitializationDone is not set after file-scope destructors\n        // start running, and thus no race on InitializationDone is possible.\n        if( initialization_done() ) {\n            // Remove an extra reference that was added in DoOneTimeInitializations.\n            remove_ref();\n        }\n    }\n    //! Add reference to resources.  If first reference added, acquire the resources.\n    static void add_ref();\n\n    //! Remove reference to resources.  If last reference removed, release the resources.\n    static void remove_ref();\n}; // class __TBB_InitOnce\n\n\n} // namespace internal\n\n} // namespace tbb\n\n#endif /* _TBB_tbb_main_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_misc.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Source file for miscellaneous entities that are infrequently referenced by\n// an executing program.\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb_assert_impl.h\" // Out-of-line TBB assertion handling routines are instantiated here.\n#include \"tbb/tbb_exception.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb_misc.h\"\n#include \"tbb_version.h\"\n\n#include <cstdio>\n#include <cstdlib>\n#include <stdexcept>\n#include <cstring>\n\n#if _WIN32||_WIN64\n#include \"tbb/machine/windows_api.h\"\n#endif\n\n#define __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN                             \\\n    (__GLIBCXX__ && __TBB_GLIBCXX_VERSION>=40700 && __TBB_GLIBCXX_VERSION<60000 \\\n     && TBB_USE_EXCEPTIONS && !TBB_USE_CAPTURED_EXCEPTION)\n\n#if __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN\n// GCC ABI declarations necessary for a workaround\n#include <cxxabi.h>\n#endif\n\nusing namespace std;\n\nnamespace tbb {\n\nconst char* bad_last_alloc::what() const throw() { return \"bad allocation in previous or concurrent attempt\"; }\nconst char* improper_lock::what() const throw() { return \"attempted recursive lock on critical section or non-recursive mutex\"; }\nconst char* user_abort::what() const throw() { return \"User-initiated abort has terminated this operation\"; }\nconst char* invalid_multiple_scheduling::what() const throw() { return \"The same task_handle object cannot be executed more than once\"; }\nconst char* missing_wait::what() const throw() { return \"wait() was not called on the structured_task_group\"; }\n\nnamespace internal {\n\n#if TBB_USE_EXCEPTIONS\n    #define DO_THROW(exc, init_args) throw exc init_args;\n#else /* !TBB_USE_EXCEPTIONS */\n    #define PRINT_ERROR_AND_ABORT(exc_name, msg) \\\n        fprintf (stderr, \"Exception %s with message %s would've been thrown, \"  \\\n            \"if exception handling were not disabled. Aborting.\\n\", exc_name, msg); \\\n        fflush(stderr); \\\n        abort();\n    #define DO_THROW(exc, init_args) PRINT_ERROR_AND_ABORT(#exc, #init_args)\n#endif /* !TBB_USE_EXCEPTIONS */\n\n\n/* The \"what\" should be fairly short, not more than about 128 characters.\n   Because we control all the call sites to handle_perror, it is pointless\n   to bullet-proof it for very long strings.\n\n   Design note: ADR put this routine off to the side in tbb_misc.cpp instead of\n   Task.cpp because the throw generates a pathetic lot of code, and ADR wanted\n   this large chunk of code to be placed on a cold page. */\nvoid handle_perror( int error_code, const char* what ) {\n    char buf[256];\n#if _MSC_VER\n #define snprintf _snprintf\n#endif\n    int written = snprintf(buf, sizeof(buf), \"%s: %s\", what, strerror( error_code ));\n    // On overflow, the returned value exceeds sizeof(buf) (for GLIBC) or is negative (for MSVC).\n    __TBB_ASSERT_EX( written>0 && written<(int)sizeof(buf), \"Error description is too long\" );\n    // Ensure that buffer ends in terminator.\n    buf[sizeof(buf)-1] = 0;\n#if TBB_USE_EXCEPTIONS\n    throw runtime_error(buf);\n#else\n    PRINT_ERROR_AND_ABORT( \"runtime_error\", buf);\n#endif /* !TBB_USE_EXCEPTIONS */\n}\n\n#if _WIN32||_WIN64\nvoid handle_win_error( int error_code ) {\n    char buf[512];\n#if !__TBB_WIN8UI_SUPPORT\n    FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n                    NULL, error_code, 0, buf, sizeof(buf), NULL );\n#else\n//TODO: update with right replacement for FormatMessageA\n    sprintf_s((char*)&buf, 512, \"error code %d\", error_code);\n#endif\n#if TBB_USE_EXCEPTIONS\n    throw runtime_error(buf);\n#else\n    PRINT_ERROR_AND_ABORT( \"runtime_error\", buf);\n#endif /* !TBB_USE_EXCEPTIONS */\n}\n#endif // _WIN32||_WIN64\n\nvoid throw_bad_last_alloc_exception_v4() {\n    throw_exception_v4(eid_bad_last_alloc);\n}\n\nvoid throw_exception_v4 ( exception_id eid ) {\n    __TBB_ASSERT ( eid > 0 && eid < eid_max, \"Unknown exception ID\" );\n    switch ( eid ) {\n    case eid_bad_alloc: DO_THROW( bad_alloc, () );\n    case eid_bad_last_alloc: DO_THROW( bad_last_alloc, () );\n    case eid_nonpositive_step: DO_THROW( invalid_argument, (\"Step must be positive\") );\n    case eid_out_of_range: DO_THROW( out_of_range, (\"Index out of requested size range\") );\n    case eid_segment_range_error: DO_THROW( range_error, (\"Index out of allocated segment slots\") );\n    case eid_index_range_error: DO_THROW( range_error, (\"Index is not allocated\") );\n    case eid_missing_wait: DO_THROW( missing_wait, () );\n    case eid_invalid_multiple_scheduling: DO_THROW( invalid_multiple_scheduling, () );\n    case eid_improper_lock: DO_THROW( improper_lock, () );\n    case eid_possible_deadlock: DO_THROW( runtime_error, (\"Resource deadlock would occur\") );\n    case eid_operation_not_permitted: DO_THROW( runtime_error, (\"Operation not permitted\") );\n    case eid_condvar_wait_failed: DO_THROW( runtime_error, (\"Wait on condition variable failed\") );\n    case eid_invalid_load_factor: DO_THROW( out_of_range, (\"Invalid hash load factor\") );\n    case eid_reserved: DO_THROW( out_of_range, (\"[backward compatibility] Invalid number of buckets\") );\n    case eid_invalid_swap: DO_THROW( invalid_argument, (\"swap() is invalid on non-equal allocators\") );\n    case eid_reservation_length_error: DO_THROW( length_error, (\"reservation size exceeds permitted max size\") );\n    case eid_invalid_key: DO_THROW( out_of_range, (\"invalid key\") );\n    case eid_user_abort: DO_THROW( user_abort, () );\n    case eid_bad_tagged_msg_cast: DO_THROW( runtime_error, (\"Illegal tagged_msg cast\") );\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    case eid_blocking_thread_join_impossible: DO_THROW( runtime_error, (\"Blocking terminate failed\") );\n#endif\n    default: break;\n    }\n#if !TBB_USE_EXCEPTIONS && __APPLE__\n    out_of_range e1(\"\");\n    length_error e2(\"\");\n    range_error e3(\"\");\n    invalid_argument e4(\"\");\n#endif /* !TBB_USE_EXCEPTIONS && __APPLE__ */\n}\n\n#if __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN\n// Runtime detection and workaround for the GCC bug 62258.\n// The problem is that std::rethrow_exception() does not increment a counter\n// of active exceptions, causing std::uncaught_exception() to return a wrong value.\n// The code is created after, and roughly reflects, the workaround\n// at https://gcc.gnu.org/bugzilla/attachment.cgi?id=34683\n\nvoid fix_broken_rethrow() {\n    struct gcc_eh_data {\n        void *       caughtExceptions;\n        unsigned int uncaughtExceptions;\n    };\n    gcc_eh_data* eh_data = punned_cast<gcc_eh_data*>( abi::__cxa_get_globals() );\n    ++eh_data->uncaughtExceptions;\n}\n\nbool gcc_rethrow_exception_broken() {\n    bool is_broken;\n    __TBB_ASSERT( !std::uncaught_exception(),\n        \"gcc_rethrow_exception_broken() must not be called when an exception is active\" );\n    try {\n        // Throw, catch, and rethrow an exception\n        try {\n            throw __TBB_GLIBCXX_VERSION;\n        } catch(...) {\n            std::rethrow_exception( std::current_exception() );\n        }\n    } catch(...) {\n        // Check the bug presence\n        is_broken = std::uncaught_exception();\n    }\n    if( is_broken ) fix_broken_rethrow();\n    __TBB_ASSERT( !std::uncaught_exception(), NULL );\n    return is_broken;\n}\n#else\nvoid fix_broken_rethrow() {}\nbool gcc_rethrow_exception_broken() { return false; }\n#endif /* __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN */\n\n#if __TBB_WIN8UI_SUPPORT\nbool GetBoolEnvironmentVariable( const char * ) { return false;}\n#else  /* __TBB_WIN8UI_SUPPORT */\nbool GetBoolEnvironmentVariable( const char * name ) {\n    if( const char* s = getenv(name) )\n        return strcmp(s,\"0\") != 0;\n    return false;\n}\n#endif /* __TBB_WIN8UI_SUPPORT */\n\n/** The leading \"\\0\" is here so that applying \"strings\" to the binary delivers a clean result. */\nstatic const char VersionString[] = \"\\0\" TBB_VERSION_STRINGS;\n\nstatic bool PrintVersionFlag = false;\n\nvoid PrintVersion() {\n    PrintVersionFlag = true;\n    fputs(VersionString+1,stderr);\n}\n\nvoid PrintExtraVersionInfo( const char* category, const char* format, ... ) {\n    if( PrintVersionFlag ) {\n        char str[1024]; memset(str, 0, 1024);\n        va_list args; va_start(args, format);\n        // Note: correct vsnprintf definition obtained from tbb_assert_impl.h\n        vsnprintf( str, 1024-1, format, args);\n        va_end(args);\n        fprintf(stderr, \"TBB: %s\\t%s\\n\", category, str );\n    }\n}\n\nvoid PrintRMLVersionInfo( void* arg, const char* server_info ) {\n    PrintExtraVersionInfo( server_info, (const char *)arg );\n}\n\n//! check for transaction support.\n#if _MSC_VER\n#include <intrin.h> // for __cpuid\n#endif\nbool cpu_has_speculation() {\n#if __TBB_TSX_AVAILABLE\n#if (__INTEL_COMPILER || __GNUC__ || _MSC_VER || __SUNPRO_CC)\n    bool result = false;\n    const int rtm_ebx_mask = 1<<11;\n#if _MSC_VER\n    int info[4] = {0,0,0,0};\n    const int reg_ebx = 1;\n    __cpuidex(info, 7, 0);\n    result = (info[reg_ebx] & rtm_ebx_mask)!=0;\n#elif __GNUC__ || __SUNPRO_CC\n    int32_t reg_ebx = 0;\n    int32_t reg_eax = 7;\n    int32_t reg_ecx = 0;\n    __asm__ __volatile__ ( \"movl %%ebx, %%esi\\n\"\n                           \"cpuid\\n\"\n                           \"movl %%ebx, %0\\n\"\n                           \"movl %%esi, %%ebx\\n\"\n                           : \"=a\"(reg_ebx) : \"0\" (reg_eax), \"c\" (reg_ecx) : \"esi\",\n#if __TBB_x86_64\n                           \"ebx\",\n#endif\n                           \"edx\"\n                           );\n    result = (reg_ebx & rtm_ebx_mask)!=0 ;\n#endif\n    return result;\n#else\n    #error Speculation detection not enabled for compiler\n#endif /* __INTEL_COMPILER || __GNUC__ || _MSC_VER */\n#else  /* __TBB_TSX_AVAILABLE */\n    return false;\n#endif /* __TBB_TSX_AVAILABLE */\n}\n\n} // namespace internal\n\nextern \"C\" int TBB_runtime_interface_version() {\n    return TBB_INTERFACE_VERSION;\n}\n\n} // namespace tbb\n\n#if !__TBB_RML_STATIC\n#if __TBB_x86_32\n\n#include \"tbb/atomic.h\"\n\n// in MSVC environment, int64_t defined in tbb::internal namespace only (see tbb_stddef.h)\n#if _MSC_VER\nusing tbb::internal::int64_t;\n#endif\n\n//! Warn about 8-byte store that crosses a cache line.\nextern \"C\" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr ) {\n    // Report run-time warning unless we have already recently reported warning for that address.\n    const unsigned n = 4;\n    static tbb::atomic<void*> cache[n];\n    static tbb::atomic<unsigned> k;\n    for( unsigned i=0; i<n; ++i )\n        if( ptr==cache[i] )\n            goto done;\n    cache[(k++)%n] = const_cast<void*>(ptr);\n    tbb::internal::runtime_warning( \"atomic store on misaligned 8-byte location %p is slow\", ptr );\ndone:;\n}\n\n//! Handle 8-byte store that crosses a cache line.\nextern \"C\" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        int64_t tmp = *(int64_t*)ptr;\n        if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp )\n            break;\n    }\n}\n\n#endif /* __TBB_x86_32 */\n#endif /* !__TBB_RML_STATIC */\n\n#if __TBB_ipf\n/* It was found that on IA-64 architecture inlining of __TBB_machine_lockbyte leads\n   to serious performance regression with ICC. So keep it out-of-line.\n */\nextern \"C\" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !__TBB_TryLockByte(flag) ) backoff.pause();\n    return 0;\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_misc.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_tbb_misc_H\n#define _TBB_tbb_misc_H\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/atomic.h\"     // For atomic_xxx definitions\n\n#if __linux__ || __FreeBSD__\n#include <sys/param.h>  // __FreeBSD_version\n#if __FreeBSD_version >= 701000\n#include <sys/cpuset.h>\n#endif\n#endif\n\n// Does the operating system have a system call to pin a thread to a set of OS processors?\n#define __TBB_OS_AFFINITY_SYSCALL_PRESENT ((__linux__ && !__ANDROID__) || (__FreeBSD_version >= 701000))\n// On IBM* Blue Gene* CNK nodes, the affinity API has restrictions that prevent its usability for TBB,\n// and also sysconf(_SC_NPROCESSORS_ONLN) already takes process affinity into account.\n#define __TBB_USE_OS_AFFINITY_SYSCALL (__TBB_OS_AFFINITY_SYSCALL_PRESENT && !__bg__)\n\nnamespace tbb {\nnamespace internal {\n\nconst size_t MByte = 1024*1024;\n\n#if __TBB_WIN8UI_SUPPORT\n// In Win8UI mode, TBB uses a thread creation API that does not allow to specify the stack size.\n// Still, the thread stack size value, either explicit or default, is used by the scheduler.\n// So here we set the default value to match the platform's default of 1MB.\nconst size_t ThreadStackSize = 1*MByte;\n#else\nconst size_t ThreadStackSize = (sizeof(uintptr_t) <= 4 ? 2 : 4 )*MByte;\n#endif\n\n#ifndef __TBB_HardwareConcurrency\n\n//! Returns maximal parallelism level supported by the current OS configuration.\nint AvailableHwConcurrency();\n\n#else\n\ninline int AvailableHwConcurrency() {\n    int n = __TBB_HardwareConcurrency();\n    return n > 0 ? n : 1; // Fail safety strap\n}\n#endif /* __TBB_HardwareConcurrency */\n\n\n#if _WIN32||_WIN64\n\n//! Returns number of processor groups in the current OS configuration.\n/** AvailableHwConcurrency must be called at least once before calling this method. **/\nint NumberOfProcessorGroups();\n\n//! Retrieves index of processor group containing processor with the given index\nint FindProcessorGroupIndex ( int processorIndex );\n\n//! Affinitizes the thread to the specified processor group\nvoid MoveThreadIntoProcessorGroup( void* hThread, int groupIndex );\n\n#endif /* _WIN32||_WIN64 */\n\n//! Throws std::runtime_error with what() returning error_code description prefixed with aux_info\nvoid handle_win_error( int error_code );\n\n//! True if environment variable with given name is set and not 0; otherwise false.\nbool GetBoolEnvironmentVariable( const char * name );\n\n//! Prints TBB version information on stderr\nvoid PrintVersion();\n\n//! Prints arbitrary extra TBB version information on stderr\nvoid PrintExtraVersionInfo( const char* category, const char* format, ... );\n\n//! A callback routine to print RML version information on stderr\nvoid PrintRMLVersionInfo( void* arg, const char* server_info );\n\n// For TBB compilation only; not to be used in public headers\n#if defined(min) || defined(max)\n#undef min\n#undef max\n#endif\n\n//! Utility template function returning lesser of the two values.\n/** Provided here to avoid including not strict safe <algorithm>.\\n\n    In case operands cause signed/unsigned or size mismatch warnings it is caller's\n    responsibility to do the appropriate cast before calling the function. **/\ntemplate<typename T>\nT min ( const T& val1, const T& val2 ) {\n    return val1 < val2 ? val1 : val2;\n}\n\n//! Utility template function returning greater of the two values.\n/** Provided here to avoid including not strict safe <algorithm>.\\n\n    In case operands cause signed/unsigned or size mismatch warnings it is caller's\n    responsibility to do the appropriate cast before calling the function. **/\ntemplate<typename T>\nT max ( const T& val1, const T& val2 ) {\n    return val1 < val2 ? val2 : val1;\n}\n\n//! Utility helper structure to ease overload resolution\ntemplate<int > struct int_to_type {};\n\n//------------------------------------------------------------------------\n// FastRandom\n//------------------------------------------------------------------------\n\n/** Defined in tbb_main.cpp **/\nunsigned GetPrime ( unsigned seed );\n\n//! A fast random number generator.\n/** Uses linear congruential method. */\nclass FastRandom {\nprivate:\n#if __TBB_OLD_PRIMES_RNG\n    unsigned x, a;\n    static const unsigned c = 1;\n#else\n    unsigned x, c;\n    static const unsigned a = 0x9e3779b1; // a big prime number\n#endif //__TBB_OLD_PRIMES_RNG\npublic:\n    //! Get a random number.\n    unsigned short get() {\n        return get(x);\n    }\n    //! Get a random number for the given seed; update the seed for next use.\n    unsigned short get( unsigned& seed ) {\n        unsigned short r = (unsigned short)(seed>>16);\n        __TBB_ASSERT(c&1, \"c must be odd for big rng period\");\n        seed = seed*a+c;\n        return r;\n    }\n    //! Construct a random number generator.\n    FastRandom( void* unique_ptr ) { init(uintptr_t(unique_ptr)); }\n    FastRandom( uint32_t seed) { init(seed); }\n    FastRandom( uint64_t seed) { init(seed); }\n    template <typename T>\n    void init( T seed ) {\n        init(seed,int_to_type<sizeof(seed)>());\n    }\n    void init( uint64_t seed , int_to_type<8> ) {\n        init(uint32_t((seed>>32)+seed), int_to_type<4>());\n    }\n    void init( uint32_t seed, int_to_type<4> ) {\n#if __TBB_OLD_PRIMES_RNG\n        x = seed;\n        a = GetPrime( seed );\n#else\n        // threads use different seeds for unique sequences\n        c = (seed|1)*0xba5703f5; // c must be odd, shuffle by a prime number\n        x = c^(seed>>1); // also shuffle x for the first get() invocation\n#endif\n    }\n};\n\n//------------------------------------------------------------------------\n// Atomic extensions\n//------------------------------------------------------------------------\n\n//! Atomically replaces value of dst with newValue if they satisfy condition of compare predicate\n/** Return value semantics is the same as for CAS. **/\ntemplate<typename T1, typename T2, class Pred>\nT1 atomic_update ( tbb::atomic<T1>& dst, T2 newValue, Pred compare ) {\n    T1 oldValue = dst;\n    while ( compare(oldValue, newValue) ) {\n        if ( dst.compare_and_swap((T1)newValue, oldValue) == oldValue )\n            break;\n        oldValue = dst;\n    }\n    return oldValue;\n}\n\n//! One-time initialization states\nenum do_once_state {\n    do_once_uninitialized = 0,  ///< No execution attempts have been undertaken yet\n    do_once_pending,            ///< A thread is executing associated do-once routine\n    do_once_executed,           ///< Do-once routine has been executed\n    initialization_complete = do_once_executed  ///< Convenience alias\n};\n\n//! One-time initialization function\n/** /param initializer Pointer to function without arguments\n           The variant that returns bool is used for cases when initialization can fail\n           and it is OK to continue execution, but the state should be reset so that\n           the initialization attempt was repeated the next time.\n    /param state Shared state associated with initializer that specifies its\n            initialization state. Must be initially set to #uninitialized value\n            (e.g. by means of default static zero initialization). **/\ntemplate <typename F>\nvoid atomic_do_once ( const F& initializer, atomic<do_once_state>& state ) {\n    // tbb::atomic provides necessary acquire and release fences.\n    // The loop in the implementation is necessary to avoid race when thread T2\n    // that arrived in the middle of initialization attempt by another thread T1\n    // has just made initialization possible.\n    // In such a case T2 has to rely on T1 to initialize, but T1 may already be past\n    // the point where it can recognize the changed conditions.\n    while ( state != do_once_executed ) {\n        if( state == do_once_uninitialized ) {\n            if( state.compare_and_swap( do_once_pending, do_once_uninitialized ) == do_once_uninitialized ) {\n                run_initializer( initializer, state );\n                break;\n            }\n        }\n        spin_wait_while_eq( state, do_once_pending );\n    }\n}\n\n// Run the initializer which can not fail\ninline void run_initializer( void (*f)(), atomic<do_once_state>& state ) {\n    f();\n    state = do_once_executed;\n}\n\n// Run the initializer which can require repeated call\ninline void run_initializer( bool (*f)(), atomic<do_once_state>& state ) {\n    state = f() ? do_once_executed : do_once_uninitialized;\n}\n\n#if __TBB_USE_OS_AFFINITY_SYSCALL\n  #if __linux__\n    typedef cpu_set_t basic_mask_t;\n  #elif __FreeBSD_version >= 701000\n    typedef cpuset_t basic_mask_t;\n  #else\n    #error affinity_helper is not implemented in this OS\n  #endif\n    class affinity_helper : no_copy {\n        basic_mask_t* threadMask;\n        int is_changed;\n    public:\n        affinity_helper() : threadMask(NULL), is_changed(0) {}\n        ~affinity_helper();\n        void protect_affinity_mask( bool restore_process_mask  );\n        void dismiss();\n    };\n    void destroy_process_mask();\n#else\n    class affinity_helper : no_copy {\n    public:\n        void protect_affinity_mask( bool ) {}\n        void dismiss() {}\n    };\n    inline void destroy_process_mask(){}\n#endif /* __TBB_USE_OS_AFFINITY_SYSCALL */\n\nbool cpu_has_speculation();\nbool gcc_rethrow_exception_broken();\nvoid fix_broken_rethrow();\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* _TBB_tbb_misc_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_misc_ex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Source file for miscellaneous entities that are infrequently referenced by\n// an executing program, and implementation of which requires dynamic linking.\n\n#include \"tbb_misc.h\"\n\n#if !defined(__TBB_HardwareConcurrency)\n\n#include \"dynamic_link.h\"\n#include <stdio.h>\n#include <limits.h>\n\n#if _WIN32||_WIN64\n#include \"tbb/machine/windows_api.h\"\n#if __TBB_WIN8UI_SUPPORT\n#include <thread>\n#endif\n#else\n#include <unistd.h>\n#if __linux__\n#include <sys/sysinfo.h>\n#include <string.h>\n#include <sched.h>\n#include <errno.h>\n#elif __sun\n#include <sys/sysinfo.h>\n#elif __FreeBSD__\n#include <errno.h>\n#include <string.h>\n#include <sys/param.h>  // Required by <sys/cpuset.h>\n#include <sys/cpuset.h>\n#endif\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n#if __TBB_USE_OS_AFFINITY_SYSCALL\n\n#if __linux__\n// Handlers for interoperation with libiomp\nstatic int (*libiomp_try_restoring_original_mask)();\n// Table for mapping to libiomp entry points\nstatic const dynamic_link_descriptor iompLinkTable[] = {\n    { \"kmp_set_thread_affinity_mask_initial\", (pointer_to_handler*)(void*)(&libiomp_try_restoring_original_mask) }\n};\n#endif\n\nstatic void set_thread_affinity_mask( size_t maskSize, const basic_mask_t* threadMask ) {\n#if __linux__\n    if( sched_setaffinity( 0, maskSize, threadMask ) )\n#else /* FreeBSD */\n    if( cpuset_setaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, maskSize, threadMask ) )\n#endif\n        runtime_warning( \"setaffinity syscall failed\" );\n}\n\nstatic void get_thread_affinity_mask( size_t maskSize, basic_mask_t* threadMask ) {\n#if __linux__\n    if( sched_getaffinity( 0, maskSize, threadMask ) )\n#else /* FreeBSD */\n    if( cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, maskSize, threadMask ) )\n#endif\n        runtime_warning( \"getaffinity syscall failed\" );\n}\n\nstatic basic_mask_t* process_mask;\nstatic int num_masks;\n\nvoid destroy_process_mask() {\n    if( process_mask ) {\n        delete [] process_mask;\n    }\n}\n\n#define curMaskSize sizeof(basic_mask_t) * num_masks\naffinity_helper::~affinity_helper() {\n    if( threadMask ) {\n        if( is_changed ) {\n            set_thread_affinity_mask( curMaskSize, threadMask );\n        }\n        delete [] threadMask;\n    }\n}\nvoid affinity_helper::protect_affinity_mask( bool restore_process_mask ) {\n    if( threadMask == NULL && num_masks ) { // TODO: assert num_masks validity?\n        threadMask = new basic_mask_t [num_masks];\n        memset( threadMask, 0, curMaskSize );\n        get_thread_affinity_mask( curMaskSize, threadMask );\n        if( restore_process_mask ) {\n            __TBB_ASSERT( process_mask, \"A process mask is requested but not yet stored\" );\n            is_changed = memcmp( process_mask, threadMask, curMaskSize );\n            if( is_changed )\n                set_thread_affinity_mask( curMaskSize, process_mask );\n        } else {\n            // Assume that the mask will be changed by the caller.\n            is_changed = 1;\n        }\n    }\n}\nvoid affinity_helper::dismiss() {\n    if( threadMask ) {\n        delete [] threadMask;\n        threadMask = NULL;\n    }\n    is_changed = 0;\n}\n#undef curMaskSize\n\nstatic atomic<do_once_state> hardware_concurrency_info;\n\nstatic int theNumProcs;\n\nstatic void initialize_hardware_concurrency_info () {\n    int err;\n    int availableProcs = 0;\n    int numMasks = 1;\n#if __linux__\n#if __TBB_MAIN_THREAD_AFFINITY_BROKEN\n    int maxProcs = INT_MAX; // To check the entire mask.\n    int pid = 0; // Get the mask of the calling thread.\n#else\n    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);\n    int pid = getpid();\n#endif\n#else /* FreeBSD >= 7.1 */\n    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);\n#endif\n    basic_mask_t* processMask;\n    const size_t BasicMaskSize =  sizeof(basic_mask_t);\n    for (;;) {\n        const int curMaskSize = BasicMaskSize * numMasks;\n        processMask = new basic_mask_t[numMasks];\n        memset( processMask, 0, curMaskSize );\n#if __linux__\n        err = sched_getaffinity( pid, curMaskSize, processMask );\n        if ( !err || errno != EINVAL || curMaskSize * CHAR_BIT >= 256 * 1024 )\n            break;\n#else /* FreeBSD >= 7.1 */\n        // CPU_LEVEL_WHICH - anonymous (current) mask, CPU_LEVEL_CPUSET - assigned mask\n#if __TBB_MAIN_THREAD_AFFINITY_BROKEN\n        err = cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, curMaskSize, processMask );\n#else\n        err = cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, curMaskSize, processMask );\n#endif\n        if ( !err || errno != ERANGE || curMaskSize * CHAR_BIT >= 16 * 1024 )\n            break;\n#endif /* FreeBSD >= 7.1 */\n        delete[] processMask;\n        numMasks <<= 1;\n    }\n    if ( !err ) {\n        // We have found the mask size and captured the process affinity mask into processMask.\n        num_masks = numMasks; // do here because it's needed for affinity_helper to work\n#if __linux__\n        // For better coexistence with libiomp which might have changed the mask already,\n        // check for its presence and ask it to restore the mask.\n        dynamic_link_handle libhandle;\n        if ( dynamic_link( \"libiomp5.so\", iompLinkTable, 1, &libhandle, DYNAMIC_LINK_GLOBAL ) ) {\n            // We have found the symbol provided by libiomp5 for restoring original thread affinity.\n            affinity_helper affhelp;\n            affhelp.protect_affinity_mask( /*restore_process_mask=*/false );\n            if ( libiomp_try_restoring_original_mask()==0 ) {\n                // Now we have the right mask to capture, restored by libiomp.\n                const int curMaskSize = BasicMaskSize * numMasks;\n                memset( processMask, 0, curMaskSize );\n                get_thread_affinity_mask( curMaskSize, processMask );\n            } else\n                affhelp.dismiss();  // thread mask has not changed\n            dynamic_unlink( libhandle );\n            // Destructor of affinity_helper restores the thread mask (unless dismissed).\n        }\n#endif\n        for ( int m = 0; availableProcs < maxProcs && m < numMasks; ++m ) {\n            for ( size_t i = 0; (availableProcs < maxProcs) && (i < BasicMaskSize * CHAR_BIT); ++i ) {\n                if ( CPU_ISSET( i, processMask + m ) )\n                    ++availableProcs;\n            }\n        }\n        process_mask = processMask;\n    }\n    else {\n        // Failed to get the process affinity mask; assume the whole machine can be used.\n        availableProcs = (maxProcs == INT_MAX) ? sysconf(_SC_NPROCESSORS_ONLN) : maxProcs;\n        delete[] processMask;\n    }\n    theNumProcs = availableProcs > 0 ? availableProcs : 1; // Fail safety strap\n    __TBB_ASSERT( theNumProcs <= sysconf(_SC_NPROCESSORS_ONLN), NULL );\n}\n\nint AvailableHwConcurrency() {\n    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );\n    return theNumProcs;\n}\n\n/* End of __TBB_USE_OS_AFFINITY_SYSCALL implementation */\n#elif __ANDROID__\n\n// Work-around for Android that reads the correct number of available CPUs since system calls are unreliable.\n// Format of \"present\" file is: ([<int>-<int>|<int>],)+\nint AvailableHwConcurrency() {\n    FILE *fp = fopen(\"/sys/devices/system/cpu/present\", \"r\");\n    if (fp == NULL) return 1;\n    int num_args, lower, upper, num_cpus=0;\n    while ((num_args = fscanf(fp, \"%u-%u\", &lower, &upper)) != EOF) {\n        switch(num_args) {\n            case 2: num_cpus += upper - lower + 1; break;\n            case 1: num_cpus += 1; break;\n        }\n        fscanf(fp, \",\");\n    }\n    return (num_cpus > 0) ? num_cpus : 1;\n}\n\n#elif defined(_SC_NPROCESSORS_ONLN)\n\nint AvailableHwConcurrency() {\n    int n = sysconf(_SC_NPROCESSORS_ONLN);\n    return (n > 0) ? n : 1;\n}\n\n#elif _WIN32||_WIN64\n\nstatic atomic<do_once_state> hardware_concurrency_info;\n\nstatic const WORD TBB_ALL_PROCESSOR_GROUPS = 0xffff;\n\n// Statically allocate an array for processor group information.\n// Windows 7 supports maximum 4 groups, but let's look ahead a little.\nstatic const WORD MaxProcessorGroups = 64;\n\nstruct ProcessorGroupInfo {\n    DWORD_PTR   mask;                   ///< Affinity mask covering the whole group\n    int         numProcs;               ///< Number of processors in the group\n    int         numProcsRunningTotal;   ///< Subtotal of processors in this and preceding groups\n\n    //! Total number of processor groups in the system\n    static int NumGroups;\n\n    //! Index of the group with a slot reserved for the first master thread\n    /** In the context of multiple processor groups support current implementation\n        defines \"the first master thread\" as the first thread to invoke\n        AvailableHwConcurrency().\n\n        TODO:   Implement a dynamic scheme remapping workers depending on the pending\n                master threads affinity. **/\n    static int HoleIndex;\n};\n\nint ProcessorGroupInfo::NumGroups = 1;\nint ProcessorGroupInfo::HoleIndex = 0;\n\nProcessorGroupInfo theProcessorGroups[MaxProcessorGroups];\n\nstruct TBB_GROUP_AFFINITY {\n    DWORD_PTR Mask;\n    WORD   Group;\n    WORD   Reserved[3];\n};\n\nstatic DWORD (WINAPI *TBB_GetActiveProcessorCount)( WORD groupIndex ) = NULL;\nstatic WORD (WINAPI *TBB_GetActiveProcessorGroupCount)() = NULL;\nstatic BOOL (WINAPI *TBB_SetThreadGroupAffinity)( HANDLE hThread,\n                        const TBB_GROUP_AFFINITY* newAff, TBB_GROUP_AFFINITY *prevAff );\nstatic BOOL (WINAPI *TBB_GetThreadGroupAffinity)( HANDLE hThread, TBB_GROUP_AFFINITY* );\n\nstatic const dynamic_link_descriptor ProcessorGroupsApiLinkTable[] = {\n      DLD(GetActiveProcessorCount, TBB_GetActiveProcessorCount)\n    , DLD(GetActiveProcessorGroupCount, TBB_GetActiveProcessorGroupCount)\n    , DLD(SetThreadGroupAffinity, TBB_SetThreadGroupAffinity)\n    , DLD(GetThreadGroupAffinity, TBB_GetThreadGroupAffinity)\n};\n\nstatic void initialize_hardware_concurrency_info () {\n#if __TBB_WIN8UI_SUPPORT\n    // For these applications processor groups info is unavailable\n    // Setting up a number of processors for one processor group\n    theProcessorGroups[0].numProcs = theProcessorGroups[0].numProcsRunningTotal = std::thread::hardware_concurrency();\n#else /* __TBB_WIN8UI_SUPPORT */\n    dynamic_link( \"Kernel32.dll\", ProcessorGroupsApiLinkTable,\n                  sizeof(ProcessorGroupsApiLinkTable)/sizeof(dynamic_link_descriptor) );\n    SYSTEM_INFO si;\n    GetNativeSystemInfo(&si);\n    DWORD_PTR pam, sam, m = 1;\n    GetProcessAffinityMask( GetCurrentProcess(), &pam, &sam );\n    int nproc = 0;\n    for ( size_t i = 0; i < sizeof(DWORD_PTR) * CHAR_BIT; ++i, m <<= 1 ) {\n        if ( pam & m )\n            ++nproc;\n    }\n    __TBB_ASSERT( nproc <= (int)si.dwNumberOfProcessors, NULL );\n    // By default setting up a number of processors for one processor group\n    theProcessorGroups[0].numProcs = theProcessorGroups[0].numProcsRunningTotal = nproc;\n    // Setting up processor groups in case the process does not restrict affinity mask and more than one processor group is present\n    if ( nproc == (int)si.dwNumberOfProcessors && TBB_GetActiveProcessorCount ) {\n        // The process does not have restricting affinity mask and multiple processor groups are possible\n        ProcessorGroupInfo::NumGroups = (int)TBB_GetActiveProcessorGroupCount();\n        __TBB_ASSERT( ProcessorGroupInfo::NumGroups <= MaxProcessorGroups, NULL );\n        // Fail safety bootstrap. Release versions will limit available concurrency\n        // level, while debug ones would assert.\n        if ( ProcessorGroupInfo::NumGroups > MaxProcessorGroups )\n            ProcessorGroupInfo::NumGroups = MaxProcessorGroups;\n        if ( ProcessorGroupInfo::NumGroups > 1 ) {\n            TBB_GROUP_AFFINITY ga;\n            if ( TBB_GetThreadGroupAffinity( GetCurrentThread(), &ga ) )\n                ProcessorGroupInfo::HoleIndex = ga.Group;\n            int nprocs = 0;\n            for ( WORD i = 0; i < ProcessorGroupInfo::NumGroups; ++i ) {\n                ProcessorGroupInfo  &pgi = theProcessorGroups[i];\n                pgi.numProcs = (int)TBB_GetActiveProcessorCount(i);\n                __TBB_ASSERT( pgi.numProcs <= (int)sizeof(DWORD_PTR) * CHAR_BIT, NULL );\n                pgi.mask = pgi.numProcs == sizeof(DWORD_PTR) * CHAR_BIT ? ~(DWORD_PTR)0 : (DWORD_PTR(1) << pgi.numProcs) - 1;\n                pgi.numProcsRunningTotal = nprocs += pgi.numProcs;\n            }\n            __TBB_ASSERT( nprocs == (int)TBB_GetActiveProcessorCount( TBB_ALL_PROCESSOR_GROUPS ), NULL );\n        }\n    }\n#endif /* __TBB_WIN8UI_SUPPORT */\n\n    PrintExtraVersionInfo(\"Processor groups\", \"%d\", ProcessorGroupInfo::NumGroups);\n    if (ProcessorGroupInfo::NumGroups>1)\n        for (int i=0; i<ProcessorGroupInfo::NumGroups; ++i)\n            PrintExtraVersionInfo( \"----- Group\", \"%d: size %d\", i, theProcessorGroups[i].numProcs);\n}\n\nint NumberOfProcessorGroups() {\n    __TBB_ASSERT( hardware_concurrency_info == initialization_complete, \"NumberOfProcessorGroups is used before AvailableHwConcurrency\" );\n    return ProcessorGroupInfo::NumGroups;\n}\n\n// Offset for the slot reserved for the first master thread\n#define HoleAdjusted(procIdx, grpIdx) (procIdx + (holeIdx <= grpIdx))\n\nint FindProcessorGroupIndex ( int procIdx ) {\n    // In case of oversubscription spread extra workers in a round robin manner\n    int holeIdx;\n    const int numProcs = theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;\n    if ( procIdx >= numProcs - 1 ) {\n        holeIdx = INT_MAX;\n        procIdx = (procIdx - numProcs + 1) % numProcs;\n    }\n    else\n        holeIdx = ProcessorGroupInfo::HoleIndex;\n    __TBB_ASSERT( hardware_concurrency_info == initialization_complete, \"FindProcessorGroupIndex is used before AvailableHwConcurrency\" );\n    // Approximate the likely group index assuming all groups are of the same size\n    int i = procIdx / theProcessorGroups[0].numProcs;\n    // Make sure the approximation is a valid group index\n    if (i >= ProcessorGroupInfo::NumGroups) i = ProcessorGroupInfo::NumGroups-1;\n    // Now adjust the approximation up or down\n    if ( theProcessorGroups[i].numProcsRunningTotal > HoleAdjusted(procIdx, i) ) {\n        while ( theProcessorGroups[i].numProcsRunningTotal - theProcessorGroups[i].numProcs > HoleAdjusted(procIdx, i) ) {\n            __TBB_ASSERT( i > 0, NULL );\n            --i;\n        }\n    }\n    else {\n        do {\n            ++i;\n        } while ( theProcessorGroups[i].numProcsRunningTotal <= HoleAdjusted(procIdx, i) );\n    }\n    __TBB_ASSERT( i < ProcessorGroupInfo::NumGroups, NULL );\n    return i;\n}\n\nvoid MoveThreadIntoProcessorGroup( void* hThread, int groupIndex ) {\n    __TBB_ASSERT( hardware_concurrency_info == initialization_complete, \"MoveThreadIntoProcessorGroup is used before AvailableHwConcurrency\" );\n    if ( !TBB_SetThreadGroupAffinity )\n        return;\n    TBB_GROUP_AFFINITY ga = { theProcessorGroups[groupIndex].mask, (WORD)groupIndex, {0,0,0} };\n    TBB_SetThreadGroupAffinity( hThread, &ga, NULL );\n}\n\nint AvailableHwConcurrency() {\n    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );\n    return theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;\n}\n\n/* End of _WIN32||_WIN64 implementation */\n#else\n    #error AvailableHwConcurrency is not implemented for this OS\n#endif\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* !__TBB_HardwareConcurrency */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_resource.rc",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n// Microsoft Visual C++ generated resource script.\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include <winresrc.h>\n#define ENDL \"\\r\\n\"\n#include \"tbb_version.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// Neutral resources\n\n//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)\n#ifdef _WIN32\nLANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n// manifest integration\n#ifdef TBB_MANIFEST\n#include \"winuser.h\"\n2 RT_MANIFEST tbbmanifest.exe.manifest\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION TBB_VERNUMBERS\n PRODUCTVERSION TBB_VERNUMBERS\n FILEFLAGSMASK 0x17L\n#ifdef _DEBUG\n FILEFLAGS 0x1L\n#else\n FILEFLAGS 0x0L\n#endif\n FILEOS 0x40004L\n FILETYPE 0x2L\n FILESUBTYPE 0x0L\nBEGIN\n    BLOCK \"StringFileInfo\"\n    BEGIN\n        BLOCK \"000004b0\"\n        BEGIN\n            VALUE \"CompanyName\", \"Intel Corporation\\0\"\n            VALUE \"FileDescription\", \"Intel(R) Threading Building Blocks library\\0\"\n            VALUE \"FileVersion\", TBB_VERSION \"\\0\"\n            VALUE \"LegalCopyright\", \"Copyright 2005-2018 Intel Corporation.  All Rights Reserved.\\0\"\n            VALUE \"LegalTrademarks\", \"\\0\"\n#ifndef TBB_USE_DEBUG\n            VALUE \"OriginalFilename\", \"tbb.dll\\0\"\n#else\n            VALUE \"OriginalFilename\", \"tbb_debug.dll\\0\"\n#endif\n            VALUE \"ProductName\", \"Intel(R) Threading Building Blocks for Windows\\0\"\n            VALUE \"ProductVersion\", TBB_VERSION \"\\0\"\n            VALUE \"PrivateBuild\", \"\\0\"\n            VALUE \"SpecialBuild\", \"\\0\"\n        END\n    END\n    BLOCK \"VarFileInfo\"\n    BEGIN\n        VALUE \"Translation\", 0x0, 1200\n    END\nEND\n\n//#endif    // Neutral resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_statistics.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb_statistics.h\"\n\n#if __TBB_STATISTICS\n\n#include <climits>\n#include <cstdarg>\n#if __TBB_STATISTICS_STDOUT\n#include <cstdio>\n#endif\n\n#include \"tbb/spin_mutex.h\"\n\nnamespace tbb {\nnamespace internal {\n\n//! Human readable titles of statistics groups defined by statistics_groups enum.\n/** The order of this vector elements must correspond to the statistics_counters\n    structure layout. **/\nconst char* StatGroupTitles[] = {\n    \"task objects\", \"tasks executed\", \"stealing attempts\", \"task proxies\", \"arena\", \"market\", \"priority ops\", \"prio ops details\"\n};\n\n//! Human readable titles of statistics elements defined by statistics_counters struct.\n/** The order of this vector elements must correspond to the statistics_counters\n    structure layout (with NULLs interspersed to separate groups). **/\nconst char* StatFieldTitles[] = {\n    /*task objects*/        \"active\", \"freed\", \"big\", NULL,\n    /*tasks executed*/      \"total\", \"w/o spawn\", NULL,\n    /*stealing attempts*/   \"succeeded\", \"failed\", \"conflicts\", \"backoffs\", NULL,\n    /*task proxies*/        \"mailed\", \"revoked\", \"stolen\", \"bypassed\", \"ignored\", NULL,\n    /*arena*/               \"switches\", \"roundtrips\", \"avg.conc\", \"avg.allot\", NULL,\n    /*market*/              \"roundtrips\", NULL,\n    /*priority ops*/        \"ar.switch\", \"mkt.switch\", \"ar.reset\", \"ref.fixup\", \"avg.ar.pr\", \"avg.mkt.pr\", NULL,\n    /*prio ops details*/    \"winnows\", \"reloads\", \"orphaned\", \"winnowed\", \"reloaded\", NULL\n};\n\n//! Class for logging statistics\n/** There should be only one instance of this class.\n    Results are written to a file \"statistics.txt\" in tab-separated format. */\nclass statistics_logger {\npublic:\n    statistics_logger () {\n        __TBB_ASSERT( sg_end - 1 == 1 << (sizeof(StatGroupTitles)/sizeof(*StatGroupTitles) - 1), NULL );\n\n        my_file = fopen(\"statistics.txt\",\"w\");\n        if( !my_file )\n            perror(\"fopen(\\\"statistics.txt\\\"\\\")\");\n        // Initialize groups dump layout info\n        group_start_field[0] = 0;\n        for ( size_t i = 0, j = 0; i < NumGroups; ++i, ++j ) {\n            __TBB_ASSERT( StatFieldTitles[j], \"Empty group occurred\" );\n            while ( StatFieldTitles[j] )\n                ++j;\n            group_start_field[i + 1] = j - i; // -i accounts for preceding NULL separators\n        }\n        __TBB_ASSERT( group_start_field[NumGroups] == statistics_counters::size(),\n                      \"Wrong number of elements in StatFieldTitles\" );\n        dump( \"\\n%-*s\", IDColumnWidth, \"\");\n        process_groups( &statistics_logger::print_group_title );\n        dump( \"%-*s\", IDColumnWidth, \"ID\");\n        process_groups( &statistics_logger::print_field_titles );\n    }\n\n    ~statistics_logger () { fclose(my_file); }\n\n    void record( const statistics_counters& c, size_t id ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        counters_to_dump = &c;\n#if __TBB_STATISTICS_TOTALS_ONLY\n        if ( id == arena_counters_total ) {\n            dump( \"%-*s\", IDColumnWidth, \"Tot\" );\n            process_groups( &statistics_logger::print_field_values );\n        }\n#else /* !__TBB_STATISTICS_TOTALS_ONLY */\n        const char* idString = NULL;\n        switch ( id ) {\n        case 0:\n            idString = \"M\"; break;\n        case workers_counters_total:\n            idString = \"Wtot\"; break;\n        case arena_counters_total:\n            idString = \"Tot\"; break;\n        default:\n            dump( \"W%-*u\", IDColumnWidth - 1, id );\n        }\n        if ( idString )\n            dump( \"%-*s\", IDColumnWidth, idString );\n        process_groups( &statistics_logger::print_field_values );\n#endif /* !__TBB_STATISTICS_TOTALS_ONLY */\n    }\nprivate:\n    static const size_t IDColumnWidth = 5;\n    static const size_t StatisticsColumnWidth = 10;\n    static const size_t NumGroups = sizeof(StatGroupTitles)/sizeof(char*);\n\n    //! File into which statistics are written.\n    FILE* my_file;\n    //! Mutex that serializes accesses to my_file\n    spin_mutex my_mutex;\n    //! Indices of the each group's first field in statistics_counters struct.\n    /** An extra element is used to track the total number of statistics fields. **/\n    size_t group_start_field[NumGroups + 1];\n    //! Currently processed set of counters.\n    const statistics_counters* counters_to_dump;\n\n    static const size_t NumFields = sizeof(StatFieldTitles)/sizeof(*StatFieldTitles) - NumGroups;\n    bool averages_fields[NumFields];\n\n    void dump ( char const* fmt, ... ) {\n        va_list args;\n        if ( my_file ) {\n            va_start( args, fmt );\n            vfprintf( my_file, fmt, args );\n            va_end( args );\n        }\n#if __TBB_STATISTICS_STDOUT\n        va_start( args, fmt );\n        vprintf( fmt, args );\n        va_end( args );\n#endif\n    }\n\n    void process_groups ( void (statistics_logger::*per_group_action)(size_t group_idx) ) {\n        for ( size_t i = 0, group_flag = 1; i < NumGroups; ++i, group_flag <<= 1 ) {\n            __TBB_ASSERT( group_flag < sg_end, \"StatGroupTitles contents is incompatible with statistics_groups definition\" );\n            if ( __TBB_ActiveStatisticsGroups & group_flag )\n                (this->*per_group_action)( i );\n        }\n        dump( \"\\n\" );\n    }\n\n    void print_group_title ( size_t group_idx ) {\n        dump( \"%-*s\", (group_start_field[group_idx + 1] - group_start_field[group_idx]) * (StatisticsColumnWidth + 1),\n                        StatGroupTitles[group_idx] );\n    }\n\n    void print_field_titles ( size_t group_idx ) {\n        // +group_idx accounts for preceding NULL separators\n        size_t i = group_start_field[group_idx] + group_idx;\n        while ( StatFieldTitles[i] ) {\n            averages_fields[i - group_idx] = strncmp(StatFieldTitles[i], \"avg.\", 4) == 0;\n            dump( \"%-*s \", StatisticsColumnWidth, StatFieldTitles[i++] );\n        }\n    }\n\n    void print_field_values ( size_t group_idx ) {\n        size_t begin = group_start_field[group_idx],\n               end = group_start_field[group_idx + 1];\n        for ( size_t i = begin; i < end; ++i ) {\n            if ( averages_fields[i] )\n                dump( \"%-*.2f \", StatisticsColumnWidth, (double)counters_to_dump->field(i)/counters_to_dump->tasks_executed );\n            else\n                dump( \"%-*ld \", StatisticsColumnWidth, counters_to_dump->field(i) );\n        }\n    }\n}; // class statistics_logger\n\nstatic statistics_logger the_statistics;\n\nvoid dump_statistics ( const statistics_counters& c, size_t id ) {\n    the_statistics.record(c, id);\n}\n\n} // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_STATISTICS */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_statistics.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_tbb_statistics_H\n#define _TBB_tbb_statistics_H\n\n/**\n    This file defines parameters of the internal statistics collected by the TBB\n    library (currently by the task scheduler only).\n\n    Statistics is accumulated separately in each thread and is dumped when\n    the scheduler instance associated with the given  thread is destroyed.\n    For apps with multiple master threads or with the same master repeatedly\n    initializing and then deinitializing task scheduler this results in TBB\n    workers statistics getting inseparably mixed.\n\n    Therefore statistics is accumulated in arena slots, and should be dumped\n    when arena is destroyed. This separates statistics collected for each\n    scheduler activity region in each master thread.\n\n    With the current RML implementation (TBB 2.2, 3.0) to avoid complete loss of\n    statistics data during app shutdown (because of lazy workers deinitialization\n    logic) set __TBB_STATISTICS_EARLY_DUMP macro to write the statistics at the\n    moment a master thread deinitializes its scheduler. This may happen a little\n    earlier than the moment of arena destruction resulting in the following undesired\n    (though usually tolerable) effects:\n    - a few events related to unsuccessful stealing or thread pool activity may be lost,\n    - statistics may be substantially incomplete in case of FIFO tasks used in\n      the FAF mode.\n\n    Macro __TBB_STATISTICS_STDOUT and global variable __TBB_ActiveStatisticsGroups\n    defined below can be used to configure the statistics output.\n\n    To add new counter:\n    1) Insert it into the appropriate group range in statistics_counters;\n    2) Insert the corresponding field title into StatFieldTitles (preserving\n       relative order of the fields).\n\n    To add new counters group:\n    1) Insert new group bit flag into statistics_groups;\n    2) Insert the new group title into StatGroupTitles (preserving\n       relative order of the groups).\n    3) Add counter belonging to the new group as described above\n**/\n\n#include \"tbb/tbb_stddef.h\"\n\n#ifndef __TBB_STATISTICS\n#define __TBB_STATISTICS 0\n#endif /* __TBB_STATISTICS */\n\n#if __TBB_STATISTICS\n\n#include <string.h>  // for memset\n\n//! Dump counters into stdout as well.\n/** By default statistics counters are written to the file \"statistics.txt\" only. **/\n#define __TBB_STATISTICS_STDOUT 1\n\n//! Dump only totals for all threads in the given arena\n/** By default statistics counters for each arena slot are dumped separately, as\n    well as the subtotal for workers. **/\n#define __TBB_STATISTICS_TOTALS_ONLY 1\n\n//! Dump statistics for an arena when its master completes\n/** By default (when this macro is not set) the statistics is sent to output when\n    arena object is destroyed. But with the current lazy workers termination\n    logic default behavior may result in losing all statistics output. **/\n#define __TBB_STATISTICS_EARLY_DUMP 1\n\n#define GATHER_STATISTIC(x) (x)\n\nnamespace tbb {\nnamespace internal {\n\n//! Groups of statistics counters.\n/** The order of enumerators must be the same as the order of the corresponding\n    field groups in the statistics_counters structure. **/\nenum statistics_groups {\n    sg_task_allocation = 0x01,\n    sg_task_execution = 0x02,\n    sg_stealing = 0x04,\n    sg_affinity = 0x08,\n    sg_arena = 0x10,\n    sg_market = 0x20,\n    sg_prio = 0x40,\n    sg_prio_ex = 0x80,\n    // List end marker. Insert new groups only before it.\n    sg_end\n};\n\n//! Groups of counters to output\nconst uintptr_t __TBB_ActiveStatisticsGroups = sg_task_execution | sg_stealing | sg_affinity | sg_arena | sg_market;\n\n//! A set of various statistics counters that are updated by the library on per thread basis.\n/** All the fields must be of the same type (statistics_counters::counter_type).\n    This is necessary to allow reinterpreting this structure as an array. **/\nstruct statistics_counters {\n    typedef long counter_type;\n\n    // Group: sg_task_allocation\n    // Counters in this group can have negative values as the tasks migrate across\n    // threads while the associated counters are updated in the current thread only\n    // to avoid data races\n\n    //! Number of tasks allocated and not yet destroyed\n    counter_type active_tasks;\n    //! Number of task corpses stored for future reuse\n    counter_type free_list_length;\n    //! Number of big tasks allocated during the run\n    /** To find total number of tasks malloc'd, compute (big_tasks+my_small_task_count) */\n    counter_type big_tasks;\n\n    // Group: sg_task_execution\n\n    //! Number of tasks executed\n    counter_type tasks_executed;\n    //! Number of elided spawns\n    counter_type spawns_bypassed;\n\n    // Group: sg_stealing\n\n    //! Number of tasks successfully stolen\n    counter_type steals_committed;\n    //! Number of failed stealing attempts\n    counter_type steals_failed;\n    //! Number of failed attempts to lock victim's task pool\n    counter_type thieves_conflicts;\n    //! Number of times thief backed off because of the collision with the owner\n    counter_type thief_backoffs;\n\n    // Group: sg_affinity\n\n    //! Number of tasks received from mailbox\n    counter_type mails_received;\n    //! Number of affinitized tasks executed by the owner\n    /** Goes as \"revoked\" in statistics printout. **/\n    counter_type proxies_executed;\n    //! Number of affinitized tasks intercepted by thieves\n    counter_type proxies_stolen;\n    //! Number of proxy bypasses by thieves during stealing\n    counter_type proxies_bypassed;\n    //! Number of affinitized tasks executed by the owner via scheduler bypass mechanism\n    counter_type affinity_ignored;\n\n    // Group: sg_arena\n\n    //! Number of times the state of arena switched between \"full\" and \"empty\"\n    counter_type gate_switches;\n    //! Number of times workers left an arena and returned into the market\n    counter_type arena_roundtrips;\n    // !Average concurrency level of this arena\n    counter_type avg_arena_concurrency;\n    //! Average assigned priority\n    counter_type avg_assigned_workers;\n\n    // Group: sg_market\n\n    //! Number of times workers left the market and returned into RML\n    counter_type market_roundtrips;\n\n    // Group; sg_prio\n\n    //! Number of arena priority switches\n    counter_type arena_prio_switches;\n    //! Number of market priority switches\n    counter_type market_prio_switches;\n    //! Number of arena priority switches\n    counter_type arena_prio_resets;\n    //! Number of reference priority source fixups to avoid deadlock\n    counter_type prio_ref_fixups;\n    //! Average arena priority\n    counter_type avg_arena_prio;\n    //! Average market priority\n    counter_type avg_market_prio;\n\n    // Group; sg_prio_ex\n\n    //! Number of times local task pools were winnowed\n    counter_type prio_winnowings;\n    //! Number of times secondary task pools were searched for top priority tasks\n    counter_type prio_reloads;\n    //! Number of times secondary task pools were abandoned by quitting workers\n    counter_type prio_orphanings;\n    //! Number of tasks offloaded into secondary task pools\n    counter_type prio_tasks_offloaded;\n    //! Number of tasks reloaded from secondary task pools\n    counter_type prio_tasks_reloaded;\n\n    // Constructor and helpers\n\n    statistics_counters() { reset(); }\n\n    void reset () { memset( this, 0, sizeof(statistics_counters) ); }\n\n    counter_type& field ( size_t index ) { return reinterpret_cast<counter_type*>(this)[index]; }\n\n    const counter_type& field ( size_t index ) const { return reinterpret_cast<const counter_type*>(this)[index]; }\n\n    static size_t size () { return sizeof(statistics_counters) / sizeof(counter_type); }\n\n    const statistics_counters& operator += ( const statistics_counters& rhs ) {\n        for ( size_t i = 0; i < size(); ++i )\n            field(i) += rhs.field(i);\n        return *this;\n    }\n}; // statistics_counters\n\nstatic const size_t workers_counters_total = (size_t)-1;\nstatic const size_t arena_counters_total = (size_t)-2;\n\nvoid dump_statistics ( const statistics_counters& c, size_t id );\n\n} // namespace internal\n} // namespace tbb\n\n#else /* !__TBB_STATISTICS */\n\n#define GATHER_STATISTIC(x) ((void)0)\n\n#endif /* !__TBB_STATISTICS */\n\n#endif /* _TBB_tbb_statistics_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_thread.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _WIN32||_WIN64\n#include <process.h>        // _beginthreadex()\n#endif\n#include <errno.h>\n#include \"tbb_misc.h\"       // handle_win_error()\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/global_control.h\" // thread_stack_size\n#include \"governor.h\"       // default_num_threads()\n#if __TBB_WIN8UI_SUPPORT\n#include <thread>\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n//! Allocate a closure\nvoid* allocate_closure_v3( size_t size )\n{\n    return allocate_via_handler_v3( size );\n}\n\n//! Free a closure allocated by allocate_closure_v3\nvoid free_closure_v3( void *ptr )\n{\n    deallocate_via_handler_v3( ptr );\n}\n\nvoid tbb_thread_v3::join()\n{\n    if (!joinable())\n        handle_perror( EINVAL, \"tbb_thread::join\" ); // Invalid argument\n    if (this_tbb_thread::get_id() == get_id())\n        handle_perror( EDEADLK, \"tbb_thread::join\" ); // Resource deadlock avoided\n#if _WIN32||_WIN64\n#if __TBB_WIN8UI_SUPPORT\n    std::thread* thread_tmp=(std::thread*)my_thread_id;\n    thread_tmp->join();\n    delete thread_tmp;\n#else // __TBB_WIN8UI_SUPPORT\n    DWORD status = WaitForSingleObjectEx( my_handle, INFINITE, FALSE );\n    if ( status == WAIT_FAILED )\n        handle_win_error( GetLastError() );\n    BOOL close_stat = CloseHandle( my_handle );\n    if ( close_stat == 0 )\n        handle_win_error( GetLastError() );\n    my_thread_id = 0;\n#endif // __TBB_WIN8UI_SUPPORT\n#else\n    int status = pthread_join( my_handle, NULL );\n    if( status )\n        handle_perror( status, \"pthread_join\" );\n#endif // _WIN32||_WIN64\n    my_handle = 0;\n}\n\nvoid tbb_thread_v3::detach() {\n    if (!joinable())\n        handle_perror( EINVAL, \"tbb_thread::detach\" ); // Invalid argument\n#if _WIN32||_WIN64\n    BOOL status = CloseHandle( my_handle );\n    if ( status == 0 )\n      handle_win_error( GetLastError() );\n    my_thread_id = 0;\n#else\n    int status = pthread_detach( my_handle );\n    if( status )\n        handle_perror( status, \"pthread_detach\" );\n#endif // _WIN32||_WIN64\n    my_handle = 0;\n}\n\nvoid tbb_thread_v3::internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),\n                                    void* closure ) {\n#if _WIN32||_WIN64\n#if __TBB_WIN8UI_SUPPORT\n    std::thread* thread_tmp=new std::thread(start_routine, closure);\n    my_handle  = thread_tmp->native_handle();\n//  TODO: to find out the way to find thread_id without GetThreadId and other\n//  desktop functions.\n//  Now tbb_thread does have its own thread_id that stores std::thread object\n    my_thread_id = (size_t)thread_tmp;\n#else\n    unsigned thread_id;\n    // The return type of _beginthreadex is \"uintptr_t\" on new MS compilers,\n    // and 'unsigned long' on old MS compilers.  uintptr_t works for both.\n    uintptr_t status = _beginthreadex( NULL, (unsigned)global_control::active_value(global_control::thread_stack_size),\n                                       start_routine, closure, 0, &thread_id );\n    if( status==0 )\n        handle_perror(errno,\"__beginthreadex\");\n    else {\n        my_handle = (HANDLE)status;\n        my_thread_id = thread_id;\n    }\n#endif\n#else\n    pthread_t thread_handle;\n    int status;\n    pthread_attr_t stack_size;\n    status = pthread_attr_init( &stack_size );\n    if( status )\n        handle_perror( status, \"pthread_attr_init\" );\n    status = pthread_attr_setstacksize( &stack_size, global_control::active_value(global_control::thread_stack_size) );\n    if( status )\n        handle_perror( status, \"pthread_attr_setstacksize\" );\n\n    status = pthread_create( &thread_handle, &stack_size, start_routine, closure );\n    if( status )\n        handle_perror( status, \"pthread_create\" );\n    status = pthread_attr_destroy( &stack_size );\n    if( status )\n        handle_perror( status, \"pthread_attr_destroy\" );\n\n    my_handle = thread_handle;\n#endif // _WIN32||_WIN64\n}\n\nunsigned tbb_thread_v3::hardware_concurrency() __TBB_NOEXCEPT(true) {\n    return governor::default_num_threads();\n}\n\ntbb_thread_v3::id thread_get_id_v3() {\n#if _WIN32||_WIN64\n    return tbb_thread_v3::id( GetCurrentThreadId() );\n#else\n    return tbb_thread_v3::id( pthread_self() );\n#endif // _WIN32||_WIN64\n}\n\nvoid move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 )\n{\n    if (t1.joinable())\n        t1.detach();\n    t1.my_handle = t2.my_handle;\n    t2.my_handle = 0;\n#if _WIN32||_WIN64\n    t1.my_thread_id = t2.my_thread_id;\n    t2.my_thread_id = 0;\n#endif // _WIN32||_WIN64\n}\n\nvoid thread_yield_v3()\n{\n    __TBB_Yield();\n}\n\nvoid thread_sleep_v3(const tick_count::interval_t &i)\n{\n#if _WIN32||_WIN64\n     tick_count t0 = tick_count::now();\n     tick_count t1 = t0;\n     for(;;) {\n         double remainder = (i-(t1-t0)).seconds()*1e3;  // milliseconds remaining to sleep\n         if( remainder<=0 ) break;\n         DWORD t = remainder>=INFINITE ? INFINITE-1 : DWORD(remainder);\n#if !__TBB_WIN8UI_SUPPORT\n         Sleep( t );\n#else\n         std::chrono::milliseconds sleep_time( t );\n         std::this_thread::sleep_for( sleep_time );\n#endif\n         t1 = tick_count::now();\n    }\n#else\n    struct timespec req;\n    double sec = i.seconds();\n\n    req.tv_sec = static_cast<long>(sec);\n    req.tv_nsec = static_cast<long>( (sec - req.tv_sec)*1e9 );\n    nanosleep(&req, NULL);\n#endif // _WIN32||_WIN64\n}\n\n} // internal\n} // tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tbb_version.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Please define version number in the file:\n#include \"tbb/tbb_stddef.h\"\n\n// And don't touch anything below\n#ifndef ENDL\n#define ENDL \"\\n\"\n#endif\n#include \"version_string.ver\"\n\n#ifndef __TBB_VERSION_STRINGS\n#pragma message(\"Warning: version_string.ver isn't generated properly by version_info.sh script!\")\n// here is an example of macros value:\n#define __TBB_VERSION_STRINGS \\\n\"TBB: BUILD_HOST\\tUnknown\\n\" \\\n\"TBB: BUILD_ARCH\\tUnknown\\n\" \\\n\"TBB: BUILD_OS\\t\\tUnknown\\n\" \\\n\"TBB: BUILD_CL\\t\\tUnknown\\n\" \\\n\"TBB: BUILD_COMPILER\\tUnknown\\n\" \\\n\"TBB: BUILD_COMMAND\\tUnknown\\n\"\n#endif\n#ifndef __TBB_DATETIME\n#ifdef RC_INVOKED\n#define __TBB_DATETIME \"Unknown\"\n#else\n#define __TBB_DATETIME __DATE__ __TIME__\n#endif\n#endif\n\n#define __TBB_VERSION_NUMBER(N) #N \": VERSION\\t\\t\" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL\n#define __TBB_INTERFACE_VERSION_NUMBER(N) #N \": INTERFACE VERSION\\t\" __TBB_STRING(TBB_INTERFACE_VERSION) ENDL\n\n#define __TBB_VERSION_DATETIME(N) #N \": BUILD_DATE\\t\\t\" __TBB_DATETIME ENDL\n#ifndef TBB_USE_DEBUG\n    #define __TBB_VERSION_USE_DEBUG(N) #N \": TBB_USE_DEBUG\\tundefined\" ENDL\n#elif TBB_USE_DEBUG==0\n    #define __TBB_VERSION_USE_DEBUG(N) #N \": TBB_USE_DEBUG\\t0\" ENDL\n#elif TBB_USE_DEBUG==1\n    #define __TBB_VERSION_USE_DEBUG(N) #N \": TBB_USE_DEBUG\\t1\" ENDL\n#elif TBB_USE_DEBUG==2\n    #define __TBB_VERSION_USE_DEBUG(N) #N \": TBB_USE_DEBUG\\t2\" ENDL\n#else\n    #error Unexpected value for TBB_USE_DEBUG\n#endif\n\n/* Make __TBB_VERSION_USE_ASSERT and __TBB_VERSION_DO_NOTIFY empty for rc\n * because rc from VS2005 crashed with fatal error RC10056 for too complex\n * macros (for example, when __TBB_CPF_BUILD is enabled).\n * All information is available in BUILD_COMMAND anyway.\n */\n\n#ifdef RC_INVOKED\n    #define __TBB_VERSION_USE_ASSERT(N)\n#else // RC_INVOKED\n#ifndef TBB_USE_ASSERT\n    #define __TBB_VERSION_USE_ASSERT(N) #N \": TBB_USE_ASSERT\\tundefined\" ENDL\n#elif TBB_USE_ASSERT==0\n    #define __TBB_VERSION_USE_ASSERT(N) #N \": TBB_USE_ASSERT\\t0\" ENDL\n#elif TBB_USE_ASSERT==1\n    #define __TBB_VERSION_USE_ASSERT(N) #N \": TBB_USE_ASSERT\\t1\" ENDL\n#elif TBB_USE_ASSERT==2\n    #define __TBB_VERSION_USE_ASSERT(N) #N \": TBB_USE_ASSERT\\t2\" ENDL\n#else\n    #error Unexpected value for TBB_USE_ASSERT\n#endif\n#endif // RC_INVOKED\n\n#ifndef __TBB_CPF_BUILD\n    #define __TBB_VERSION_TBB_PREVIEW_BINARY(N)\n#else\n    #define __TBB_VERSION_TBB_PREVIEW_BINARY(N) #N \": TBB_PREVIEW_BINARY\\t1\" ENDL\n#endif\n\n#ifdef RC_INVOKED\n    #define __TBB_VERSION_DO_NOTIFY(N)\n#else\n#ifndef DO_ITT_NOTIFY\n    #define __TBB_VERSION_DO_NOTIFY(N) #N \": DO_ITT_NOTIFY\\tundefined\" ENDL\n#elif DO_ITT_NOTIFY==1\n    #define __TBB_VERSION_DO_NOTIFY(N) #N \": DO_ITT_NOTIFY\\t1\" ENDL\n#elif DO_ITT_NOTIFY==0\n    #define __TBB_VERSION_DO_NOTIFY(N)\n#else\n    #error Unexpected value for DO_ITT_NOTIFY\n#endif\n#endif // RC_INVOKED\n\n#define TBB_VERSION_STRINGS_P(N) __TBB_VERSION_NUMBER(N) __TBB_INTERFACE_VERSION_NUMBER(N) __TBB_VERSION_DATETIME(N) __TBB_VERSION_STRINGS(N) __TBB_VERSION_USE_DEBUG(N) __TBB_VERSION_USE_ASSERT(N) __TBB_VERSION_TBB_PREVIEW_BINARY(N) __TBB_VERSION_DO_NOTIFY(N)\n\n#define TBB_VERSION_STRINGS TBB_VERSION_STRINGS_P(TBB)\n#define TBBMALLOC_VERSION_STRINGS TBB_VERSION_STRINGS_P(TBBmalloc)\n\n// numbers\n#ifndef __TBB_VERSION_YMD\n#define __TBB_VERSION_YMD 0, 0\n#endif\n\n#define TBB_VERNUMBERS TBB_VERSION_MAJOR, TBB_VERSION_MINOR, __TBB_VERSION_YMD\n\n#define TBB_VERSION __TBB_STRING(TBB_VERNUMBERS)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tls.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_tls_H\n#define _TBB_tls_H\n\n#if USE_PTHREAD\n#include <pthread.h>\n#else /* assume USE_WINTHREAD */\n#include \"tbb/machine/windows_api.h\"\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n\ntypedef void (*tls_dtor_t)(void*);\n\n//! Basic cross-platform wrapper class for TLS operations.\ntemplate <typename T>\nclass basic_tls {\n#if USE_PTHREAD\n    typedef pthread_key_t tls_key_t;\npublic:\n    int  create( tls_dtor_t dtor = NULL ) {\n        return pthread_key_create(&my_key, dtor);\n    }\n    int  destroy()      { return pthread_key_delete(my_key); }\n    void set( T value ) { pthread_setspecific(my_key, (void*)value); }\n    T    get()          { return (T)pthread_getspecific(my_key); }\n#else /* USE_WINTHREAD */\n    typedef DWORD tls_key_t;\npublic:\n#if !__TBB_WIN8UI_SUPPORT\n    int create() {\n        tls_key_t tmp = TlsAlloc();\n        if( tmp==TLS_OUT_OF_INDEXES )\n            return TLS_OUT_OF_INDEXES;\n        my_key = tmp;\n        return 0;\n    }\n    int  destroy()      { TlsFree(my_key); my_key=0; return 0; }\n    void set( T value ) { TlsSetValue(my_key, (LPVOID)value); }\n    T    get()          { return (T)TlsGetValue(my_key); }\n#else /*!__TBB_WIN8UI_SUPPORT*/\n    int create() {\n        tls_key_t tmp = FlsAlloc(NULL);\n        if( tmp== (DWORD)0xFFFFFFFF )\n            return (DWORD)0xFFFFFFFF;\n        my_key = tmp;\n        return 0;\n    }\n    int  destroy()      { FlsFree(my_key); my_key=0; return 0; }\n    void set( T value ) { FlsSetValue(my_key, (LPVOID)value); }\n    T    get()          { return (T)FlsGetValue(my_key); }\n#endif /* !__TBB_WIN8UI_SUPPORT */\n#endif /* USE_WINTHREAD */\nprivate:\n    tls_key_t my_key;\n};\n\n//! More advanced TLS support template class.\n/** It supports RAII and to some extent mimic __declspec(thread) variables. */\ntemplate <typename T>\nclass tls : public basic_tls<T> {\n    typedef basic_tls<T> base;\npublic:\n    tls()  { base::create();  }\n    ~tls() { base::destroy(); }\n    T operator=(T value) { base::set(value); return value; }\n    operator T() { return base::get(); }\n};\n\ntemplate <typename T>\nclass tls<T*> : basic_tls<T*> {\n    typedef basic_tls<T*> base;\n    static void internal_dtor(void* ptr) {\n        if (ptr) delete (T*)ptr;\n    }\n    T* internal_get() {\n        T* result = base::get();\n        if (!result) {\n            result = new T;\n            base::set(result);\n        }\n        return result;\n    }\npublic:\n    tls()  {\n#if USE_PTHREAD\n        base::create( internal_dtor );\n#else\n        base::create();\n#endif\n    }\n    ~tls() { base::destroy(); }\n    T* operator=(T* value) { base::set(value); return value; }\n    operator T*()   { return  internal_get(); }\n    T* operator->() { return  internal_get(); }\n    T& operator*()  { return *internal_get(); }\n};\n\n} // namespace internal\n\n} // namespace tbb\n\n#endif /* _TBB_tls_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/disable_warnings.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"ittnotify_config.h\"\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n\n#pragma warning (disable: 593)   /* parameter \"XXXX\" was set but never used                 */\n#pragma warning (disable: 344)   /* typedef name has already been declared (with same type) */\n#pragma warning (disable: 174)   /* expression has no effect                                */\n#pragma warning (disable: 4127)  /* conditional expression is constant                      */\n#pragma warning (disable: 4306)  /* conversion from '?' to '?' of greater size              */\n\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#if defined __INTEL_COMPILER\n\n#pragma warning (disable: 869)  /* parameter \"XXXXX\" was never referenced                  */\n#pragma warning (disable: 1418) /* external function definition with no prior declaration  */\n#pragma warning (disable: 1419) /* external declaration in primary source file             */\n\n#endif /* __INTEL_COMPILER */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/ittnotify.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _ITTNOTIFY_H_\n#define _ITTNOTIFY_H_\n\n/**\n@file\n@brief Public User API functions and types\n@mainpage\n\nThe ITT API is used to annotate a user's program with additional information\nthat can be used by correctness and performance tools. The user inserts\ncalls in their program. Those calls generate information that is collected\nat runtime, and used by Intel(R) Threading Tools.\n\n@section API Concepts\nThe following general concepts are used throughout the API.\n\n@subsection Unicode Support\nMany API functions take character string arguments. On Windows, there\nare two versions of each such function. The function name is suffixed\nby W if Unicode support is enabled, and by A otherwise. Any API function\nthat takes a character string argument adheres to this convention.\n\n@subsection Conditional Compilation\nMany users prefer having an option to modify ITT API code when linking it\ninside their runtimes. ITT API header file provides a mechanism to replace\nITT API function names inside your code with empty strings. To do this,\ndefine the macros INTEL_NO_ITTNOTIFY_API during compilation and remove the\nstatic library from the linker script.\n\n@subsection Domains\n[see domains]\nDomains provide a way to separate notification for different modules or\nlibraries in a program. Domains are specified by dotted character strings,\ne.g. TBB.Internal.Control.\n\nA mechanism (to be specified) is provided to enable and disable\ndomains. By default, all domains are enabled.\n@subsection Named Entities and Instances\nNamed entities (frames, regions, tasks, and markers) communicate\ninformation about the program to the analysis tools. A named entity often\nrefers to a section of program code, or to some set of logical concepts\nthat the programmer wants to group together.\n\nNamed entities relate to the programmer's static view of the program. When\nthe program actually executes, many instances of a given named entity\nmay be created.\n\nThe API annotations denote instances of named entities. The actual\nnamed entities are displayed using the analysis tools. In other words,\nthe named entities come into existence when instances are created.\n\nInstances of named entities may have instance identifiers (IDs). Some\nAPI calls use instance identifiers to create relationships between\ndifferent instances of named entities. Other API calls associate data\nwith instances of named entities.\n\nSome named entities must always have instance IDs. In particular, regions\nand frames always have IDs. Task and markers need IDs only if the ID is\nneeded in another API call (such as adding a relation or metadata).\n\nThe lifetime of instance IDs is distinct from the lifetime of\ninstances. This allows various relationships to be specified separate\nfrom the actual execution of instances. This flexibility comes at the\nexpense of extra API calls.\n\nThe same ID may not be reused for different instances, unless a previous\n[ref] __itt_id_destroy call for that ID has been issued.\n*/\n\n/** @cond exclude_from_documentation */\n#ifndef ITT_OS_WIN\n#  define ITT_OS_WIN   1\n#endif /* ITT_OS_WIN */\n\n#ifndef ITT_OS_LINUX\n#  define ITT_OS_LINUX 2\n#endif /* ITT_OS_LINUX */\n\n#ifndef ITT_OS_MAC\n#  define ITT_OS_MAC   3\n#endif /* ITT_OS_MAC */\n\n#ifndef ITT_OS_FREEBSD\n#  define ITT_OS_FREEBSD   4\n#endif /* ITT_OS_FREEBSD */\n\n#ifndef ITT_OS\n#  if defined WIN32 || defined _WIN32\n#    define ITT_OS ITT_OS_WIN\n#  elif defined( __APPLE__ ) && defined( __MACH__ )\n#    define ITT_OS ITT_OS_MAC\n#  elif defined( __FreeBSD__ )\n#    define ITT_OS ITT_OS_FREEBSD\n#  else\n#    define ITT_OS ITT_OS_LINUX\n#  endif\n#endif /* ITT_OS */\n\n#ifndef ITT_PLATFORM_WIN\n#  define ITT_PLATFORM_WIN 1\n#endif /* ITT_PLATFORM_WIN */\n\n#ifndef ITT_PLATFORM_POSIX\n#  define ITT_PLATFORM_POSIX 2\n#endif /* ITT_PLATFORM_POSIX */\n\n#ifndef ITT_PLATFORM_MAC\n#  define ITT_PLATFORM_MAC 3\n#endif /* ITT_PLATFORM_MAC */\n\n#ifndef ITT_PLATFORM_FREEBSD\n#  define ITT_PLATFORM_FREEBSD 4\n#endif /* ITT_PLATFORM_FREEBSD */\n\n#ifndef ITT_PLATFORM\n#  if ITT_OS==ITT_OS_WIN\n#    define ITT_PLATFORM ITT_PLATFORM_WIN\n#  elif ITT_OS==ITT_OS_MAC\n#    define ITT_PLATFORM ITT_PLATFORM_MAC\n#  elif ITT_OS==ITT_OS_FREEBSD\n#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD\n#  else\n#    define ITT_PLATFORM ITT_PLATFORM_POSIX\n#  endif\n#endif /* ITT_PLATFORM */\n\n#if defined(_UNICODE) && !defined(UNICODE)\n#define UNICODE\n#endif\n\n#include <stddef.h>\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#include <tchar.h>\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#include <stdint.h>\n#if defined(UNICODE) || defined(_UNICODE)\n#include <wchar.h>\n#endif /* UNICODE || _UNICODE */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#ifndef CDECL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define CDECL __cdecl\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__\n#      define CDECL __attribute__ ((cdecl))\n#    else  /* _M_IX86 || __i386__ */\n#      define CDECL /* actual only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* CDECL */\n\n#ifndef STDCALL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define STDCALL __stdcall\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__\n#      define STDCALL __attribute__ ((stdcall))\n#    else  /* _M_IX86 || __i386__ */\n#      define STDCALL /* supported only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* STDCALL */\n\n#define ITTAPI    CDECL\n#define LIBITTAPI CDECL\n\n/* TODO: Temporary for compatibility! */\n#define ITTAPI_CALL    CDECL\n#define LIBITTAPI_CALL CDECL\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n/* use __forceinline (VC++ specific) */\n#define ITT_INLINE           __forceinline\n#define ITT_INLINE_ATTRIBUTE /* nothing */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/*\n * Generally, functions are not inlined unless optimization is specified.\n * For functions declared inline, this attribute inlines the function even\n * if no optimization level was specified.\n */\n#ifdef __STRICT_ANSI__\n#define ITT_INLINE           static\n#define ITT_INLINE_ATTRIBUTE __attribute__((unused))\n#else  /* __STRICT_ANSI__ */\n#define ITT_INLINE           static inline\n#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))\n#endif /* __STRICT_ANSI__ */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/** @endcond */\n\n#ifdef INTEL_ITTNOTIFY_ENABLE_LEGACY\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    pragma message(\"WARNING!!! Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro\")\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n// #warning usage leads to ICC's compilation error\n// #    warning \"Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro\"\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#  include \"legacy/ittnotify.h\"\n#endif /* INTEL_ITTNOTIFY_ENABLE_LEGACY */\n\n/** @cond exclude_from_documentation */\n/* Helper macro for joining tokens */\n#define ITT_JOIN_AUX(p,n) p##n\n#define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)\n\n#ifdef ITT_MAJOR\n#undef ITT_MAJOR\n#endif\n#ifdef ITT_MINOR\n#undef ITT_MINOR\n#endif\n#define ITT_MAJOR     3\n#define ITT_MINOR     0\n\n/* Standard versioning of a token with major and minor version numbers */\n#define ITT_VERSIONIZE(x)    \\\n    ITT_JOIN(x,              \\\n    ITT_JOIN(_,              \\\n    ITT_JOIN(ITT_MAJOR,      \\\n    ITT_JOIN(_, ITT_MINOR))))\n\n#ifndef INTEL_ITTNOTIFY_PREFIX\n#  define INTEL_ITTNOTIFY_PREFIX __itt_\n#endif /* INTEL_ITTNOTIFY_PREFIX */\n#ifndef INTEL_ITTNOTIFY_POSTFIX\n#  define INTEL_ITTNOTIFY_POSTFIX _ptr_\n#endif /* INTEL_ITTNOTIFY_POSTFIX */\n\n#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)\n#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))\n\n#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)\n#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)\n\n#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)\n#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)\n#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)\n#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)\n#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)\n#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)\n#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)\n#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)\n#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)\n#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)\n#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)\n#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)\n#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)\n#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)\n\n#ifdef ITT_STUB\n#undef ITT_STUB\n#endif\n#ifdef ITT_STUBV\n#undef ITT_STUBV\n#endif\n#define ITT_STUBV(api,type,name,args)                             \\\n    typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \\\n    extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);\n#define ITT_STUB ITT_STUBV\n/** @endcond */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/** @cond exclude_from_gpa_documentation */\n/**\n * @defgroup public Public API\n * @{\n * @}\n */\n\n/**\n * @defgroup control Collection Control\n * @ingroup public\n * General behavior: application continues to run, but no profiling information is being collected\n *\n * Pausing occurs not only for the current thread but for all process as well as spawned processes\n * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:\n *   - Does not analyze or report errors that involve memory access.\n *   - Other errors are reported as usual. Pausing data collection in\n *     Intel(R) Parallel Inspector and Intel(R) Inspector XE\n *     only pauses tracing and analyzing memory access.\n *     It does not pause tracing or analyzing threading APIs.\n *   .\n * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:\n *   - Does continue to record when new threads are started.\n *   .\n * - Other effects:\n *   - Possible reduction of runtime overhead.\n *   .\n * @{\n */\n/** @brief Pause collection */\nvoid ITTAPI __itt_pause(void);\n/** @brief Resume collection */\nvoid ITTAPI __itt_resume(void);\n/** @brief Detach collection */\nvoid ITTAPI __itt_detach(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, pause,  (void))\nITT_STUBV(ITTAPI, void, resume, (void))\nITT_STUBV(ITTAPI, void, detach, (void))\n#define __itt_pause      ITTNOTIFY_VOID(pause)\n#define __itt_pause_ptr  ITTNOTIFY_NAME(pause)\n#define __itt_resume     ITTNOTIFY_VOID(resume)\n#define __itt_resume_ptr ITTNOTIFY_NAME(resume)\n#define __itt_detach     ITTNOTIFY_VOID(detach)\n#define __itt_detach_ptr ITTNOTIFY_NAME(detach)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_pause()\n#define __itt_pause_ptr  0\n#define __itt_resume()\n#define __itt_resume_ptr 0\n#define __itt_detach()\n#define __itt_detach_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_pause_ptr  0\n#define __itt_resume_ptr 0\n#define __itt_detach_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} control group */\n/** @endcond */\n\n/**\n * @defgroup threads Threads\n * @ingroup public\n * Give names to threads\n * @{\n */\n/**\n * @brief Sets thread name of calling thread\n * @param[in] name - name of thread\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_thread_set_nameA(const char    *name);\nvoid ITTAPI __itt_thread_set_nameW(const wchar_t *name);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_thread_set_name     __itt_thread_set_nameW\n#  define __itt_thread_set_name_ptr __itt_thread_set_nameW_ptr\n#else /* UNICODE */\n#  define __itt_thread_set_name     __itt_thread_set_nameA\n#  define __itt_thread_set_name_ptr __itt_thread_set_nameA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_thread_set_name(const char *name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, thread_set_nameA, (const char    *name))\nITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thread_set_nameA     ITTNOTIFY_VOID(thread_set_nameA)\n#define __itt_thread_set_nameA_ptr ITTNOTIFY_NAME(thread_set_nameA)\n#define __itt_thread_set_nameW     ITTNOTIFY_VOID(thread_set_nameW)\n#define __itt_thread_set_nameW_ptr ITTNOTIFY_NAME(thread_set_nameW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thread_set_name     ITTNOTIFY_VOID(thread_set_name)\n#define __itt_thread_set_name_ptr ITTNOTIFY_NAME(thread_set_name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thread_set_nameA(name)\n#define __itt_thread_set_nameA_ptr 0\n#define __itt_thread_set_nameW(name)\n#define __itt_thread_set_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thread_set_name(name)\n#define __itt_thread_set_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thread_set_nameA_ptr 0\n#define __itt_thread_set_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thread_set_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @cond exclude_from_gpa_documentation */\n\n/**\n * @brief Mark current thread as ignored from this point on, for the duration of its existence.\n */\nvoid ITTAPI __itt_thread_ignore(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, thread_ignore, (void))\n#define __itt_thread_ignore     ITTNOTIFY_VOID(thread_ignore)\n#define __itt_thread_ignore_ptr ITTNOTIFY_NAME(thread_ignore)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_thread_ignore()\n#define __itt_thread_ignore_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_thread_ignore_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} threads group */\n\n/**\n * @defgroup suppress Error suppression\n * @ingroup public\n * General behavior: application continues to run, but errors are suppressed\n *\n * @{\n */\n\n/*****************************************************************//**\n * @name group of functions used for error suppression in correctness tools\n *********************************************************************/\n/** @{ */\n/**\n * @hideinitializer\n * @brief possible value for suppression mask\n */\n#define __itt_suppress_all_errors 0x7fffffff\n\n/**\n * @hideinitializer\n * @brief possible value for suppression mask (suppresses errors from threading analysis)\n */\n#define __itt_suppress_threading_errors 0x000000ff\n\n/**\n * @hideinitializer\n * @brief possible value for suppression mask (suppresses errors from memory analysis)\n */\n#define __itt_suppress_memory_errors 0x0000ff00\n\n/**\n * @brief Start suppressing errors identified in mask on this thread\n */\nvoid ITTAPI __itt_suppress_push(unsigned int mask);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask))\n#define __itt_suppress_push     ITTNOTIFY_VOID(suppress_push)\n#define __itt_suppress_push_ptr ITTNOTIFY_NAME(suppress_push)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_suppress_push(mask)\n#define __itt_suppress_push_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_suppress_push_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Undo the effects of the matching call to __itt_suppress_push\n */\nvoid ITTAPI __itt_suppress_pop(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, suppress_pop, (void))\n#define __itt_suppress_pop     ITTNOTIFY_VOID(suppress_pop)\n#define __itt_suppress_pop_ptr ITTNOTIFY_NAME(suppress_pop)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_suppress_pop()\n#define __itt_suppress_pop_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_suppress_pop_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @enum __itt_model_disable\n * @brief Enumerator for the disable methods\n */\ntypedef enum __itt_suppress_mode {\n    __itt_unsuppress_range,\n    __itt_suppress_range\n} __itt_suppress_mode_t;\n\n/**\n * @brief Mark a range of memory for error suppression or unsuppression for error types included in mask\n */\nvoid ITTAPI __itt_suppress_mark_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size))\n#define __itt_suppress_mark_range     ITTNOTIFY_VOID(suppress_mark_range)\n#define __itt_suppress_mark_range_ptr ITTNOTIFY_NAME(suppress_mark_range)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_suppress_mark_range(mask)\n#define __itt_suppress_mark_range_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_suppress_mark_range_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Undo the effect of a matching call to __itt_suppress_mark_range.   If not matching\n *        call is found, nothing is changed.\n */\nvoid ITTAPI __itt_suppress_clear_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, suppress_clear_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size))\n#define __itt_suppress_clear_range     ITTNOTIFY_VOID(suppress_clear_range)\n#define __itt_suppress_clear_range_ptr ITTNOTIFY_NAME(suppress_clear_range)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_suppress_clear_range(mask)\n#define __itt_suppress_clear_range_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_suppress_clear_range_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} */\n/** @} suppress group */\n\n/**\n * @defgroup sync Synchronization\n * @ingroup public\n * Indicate user-written synchronization code\n * @{\n */\n/**\n * @hideinitializer\n * @brief possible value of attribute argument for sync object type\n */\n#define __itt_attr_barrier 1\n\n/**\n * @hideinitializer\n * @brief possible value of attribute argument for sync object type\n */\n#define __itt_attr_mutex   2\n\n/**\n@brief Name a synchronization object\n@param[in] addr       Handle for the synchronization object. You should\nuse a real address to uniquely identify the synchronization object.\n@param[in] objtype    null-terminated object type string. If NULL is\npassed, the name will be \"User Synchronization\".\n@param[in] objname    null-terminated object name string. If NULL,\nno name will be assigned to the object.\n@param[in] attribute  one of [#__itt_attr_barrier, #__itt_attr_mutex]\n */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_sync_createA(void *addr, const char    *objtype, const char    *objname, int attribute);\nvoid ITTAPI __itt_sync_createW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_sync_create     __itt_sync_createW\n#  define __itt_sync_create_ptr __itt_sync_createW_ptr\n#else /* UNICODE */\n#  define __itt_sync_create     __itt_sync_createA\n#  define __itt_sync_create_ptr __itt_sync_createA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_sync_create (void *addr, const char *objtype, const char *objname, int attribute);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute))\nITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_create,  (void *addr, const char*    objtype, const char*    objname, int attribute))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_createA     ITTNOTIFY_VOID(sync_createA)\n#define __itt_sync_createA_ptr ITTNOTIFY_NAME(sync_createA)\n#define __itt_sync_createW     ITTNOTIFY_VOID(sync_createW)\n#define __itt_sync_createW_ptr ITTNOTIFY_NAME(sync_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_create     ITTNOTIFY_VOID(sync_create)\n#define __itt_sync_create_ptr ITTNOTIFY_NAME(sync_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_createA(addr, objtype, objname, attribute)\n#define __itt_sync_createA_ptr 0\n#define __itt_sync_createW(addr, objtype, objname, attribute)\n#define __itt_sync_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_create(addr, objtype, objname, attribute)\n#define __itt_sync_create_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_createA_ptr 0\n#define __itt_sync_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_create_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n@brief Rename a synchronization object\n\nYou can use the rename call to assign or reassign a name to a given\nsynchronization object.\n@param[in] addr  handle for the synchronization object.\n@param[in] name  null-terminated object name string.\n*/\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_sync_renameA(void *addr, const char    *name);\nvoid ITTAPI __itt_sync_renameW(void *addr, const wchar_t *name);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_sync_rename     __itt_sync_renameW\n#  define __itt_sync_rename_ptr __itt_sync_renameW_ptr\n#else /* UNICODE */\n#  define __itt_sync_rename     __itt_sync_renameA\n#  define __itt_sync_rename_ptr __itt_sync_renameA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_sync_rename(void *addr, const char *name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char    *name))\nITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_rename,  (void *addr, const char    *name))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_renameA     ITTNOTIFY_VOID(sync_renameA)\n#define __itt_sync_renameA_ptr ITTNOTIFY_NAME(sync_renameA)\n#define __itt_sync_renameW     ITTNOTIFY_VOID(sync_renameW)\n#define __itt_sync_renameW_ptr ITTNOTIFY_NAME(sync_renameW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_rename     ITTNOTIFY_VOID(sync_rename)\n#define __itt_sync_rename_ptr ITTNOTIFY_NAME(sync_rename)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_renameA(addr, name)\n#define __itt_sync_renameA_ptr 0\n#define __itt_sync_renameW(addr, name)\n#define __itt_sync_renameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_rename(addr, name)\n#define __itt_sync_rename_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_renameA_ptr 0\n#define __itt_sync_renameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_rename_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n @brief Destroy a synchronization object.\n @param addr Handle for the synchronization object.\n */\nvoid ITTAPI __itt_sync_destroy(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, sync_destroy, (void *addr))\n#define __itt_sync_destroy     ITTNOTIFY_VOID(sync_destroy)\n#define __itt_sync_destroy_ptr ITTNOTIFY_NAME(sync_destroy)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_sync_destroy(addr)\n#define __itt_sync_destroy_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_sync_destroy_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/*****************************************************************//**\n * @name group of functions is used for performance measurement tools\n *********************************************************************/\n/** @{ */\n/**\n * @brief Enter spin loop on user-defined sync object\n */\nvoid ITTAPI __itt_sync_prepare(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, sync_prepare, (void *addr))\n#define __itt_sync_prepare     ITTNOTIFY_VOID(sync_prepare)\n#define __itt_sync_prepare_ptr ITTNOTIFY_NAME(sync_prepare)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_sync_prepare(addr)\n#define __itt_sync_prepare_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_sync_prepare_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Quit spin loop without acquiring spin object\n */\nvoid ITTAPI __itt_sync_cancel(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, sync_cancel, (void *addr))\n#define __itt_sync_cancel     ITTNOTIFY_VOID(sync_cancel)\n#define __itt_sync_cancel_ptr ITTNOTIFY_NAME(sync_cancel)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_sync_cancel(addr)\n#define __itt_sync_cancel_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_sync_cancel_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Successful spin loop completion (sync object acquired)\n */\nvoid ITTAPI __itt_sync_acquired(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, sync_acquired, (void *addr))\n#define __itt_sync_acquired     ITTNOTIFY_VOID(sync_acquired)\n#define __itt_sync_acquired_ptr ITTNOTIFY_NAME(sync_acquired)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_sync_acquired(addr)\n#define __itt_sync_acquired_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_sync_acquired_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Start sync object releasing code. Is called before the lock release call.\n */\nvoid ITTAPI __itt_sync_releasing(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, sync_releasing, (void *addr))\n#define __itt_sync_releasing     ITTNOTIFY_VOID(sync_releasing)\n#define __itt_sync_releasing_ptr ITTNOTIFY_NAME(sync_releasing)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_sync_releasing(addr)\n#define __itt_sync_releasing_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_sync_releasing_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} */\n\n/** @} sync group */\n\n/**************************************************************//**\n * @name group of functions is used for correctness checking tools\n ******************************************************************/\n/** @{ */\n/**\n * @ingroup legacy\n * @deprecated Legacy API\n * @brief Fast synchronization which does no require spinning.\n * - This special function is to be used by TBB and OpenMP libraries only when they know\n *   there is no spin but they need to suppress TC warnings about shared variable modifications.\n * - It only has corresponding pointers in static library and does not have corresponding function\n *   in dynamic library.\n * @see void __itt_sync_prepare(void* addr);\n */\nvoid ITTAPI __itt_fsync_prepare(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr))\n#define __itt_fsync_prepare     ITTNOTIFY_VOID(fsync_prepare)\n#define __itt_fsync_prepare_ptr ITTNOTIFY_NAME(fsync_prepare)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_fsync_prepare(addr)\n#define __itt_fsync_prepare_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_fsync_prepare_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup legacy\n * @deprecated Legacy API\n * @brief Fast synchronization which does no require spinning.\n * - This special function is to be used by TBB and OpenMP libraries only when they know\n *   there is no spin but they need to suppress TC warnings about shared variable modifications.\n * - It only has corresponding pointers in static library and does not have corresponding function\n *   in dynamic library.\n * @see void __itt_sync_cancel(void *addr);\n */\nvoid ITTAPI __itt_fsync_cancel(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr))\n#define __itt_fsync_cancel     ITTNOTIFY_VOID(fsync_cancel)\n#define __itt_fsync_cancel_ptr ITTNOTIFY_NAME(fsync_cancel)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_fsync_cancel(addr)\n#define __itt_fsync_cancel_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_fsync_cancel_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup legacy\n * @deprecated Legacy API\n * @brief Fast synchronization which does no require spinning.\n * - This special function is to be used by TBB and OpenMP libraries only when they know\n *   there is no spin but they need to suppress TC warnings about shared variable modifications.\n * - It only has corresponding pointers in static library and does not have corresponding function\n *   in dynamic library.\n * @see void __itt_sync_acquired(void *addr);\n */\nvoid ITTAPI __itt_fsync_acquired(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr))\n#define __itt_fsync_acquired     ITTNOTIFY_VOID(fsync_acquired)\n#define __itt_fsync_acquired_ptr ITTNOTIFY_NAME(fsync_acquired)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_fsync_acquired(addr)\n#define __itt_fsync_acquired_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_fsync_acquired_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup legacy\n * @deprecated Legacy API\n * @brief Fast synchronization which does no require spinning.\n * - This special function is to be used by TBB and OpenMP libraries only when they know\n *   there is no spin but they need to suppress TC warnings about shared variable modifications.\n * - It only has corresponding pointers in static library and does not have corresponding function\n *   in dynamic library.\n * @see void __itt_sync_releasing(void* addr);\n */\nvoid ITTAPI __itt_fsync_releasing(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr))\n#define __itt_fsync_releasing     ITTNOTIFY_VOID(fsync_releasing)\n#define __itt_fsync_releasing_ptr ITTNOTIFY_NAME(fsync_releasing)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_fsync_releasing(addr)\n#define __itt_fsync_releasing_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_fsync_releasing_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} */\n\n/**\n * @defgroup model Modeling by Intel(R) Parallel Advisor\n * @ingroup public\n * This is the subset of itt used for modeling by Intel(R) Parallel Advisor.\n * This API is called ONLY using annotate.h, by \"Annotation\" macros\n * the user places in their sources during the parallelism modeling steps.\n *\n * site_begin/end and task_begin/end take the address of handle variables,\n * which are writeable by the API.  Handles must be 0 initialized prior\n * to the first call to begin, or may cause a run-time failure.\n * The handles are initialized in a multi-thread safe way by the API if\n * the handle is 0.  The commonly expected idiom is one static handle to\n * identify a site or task.  If a site or task of the same name has already\n * been started during this collection, the same handle MAY be returned,\n * but is not required to be - it is unspecified if data merging is done\n * based on name.  These routines also take an instance variable.  Like\n * the lexical instance, these must be 0 initialized.  Unlike the lexical\n * instance, this is used to track a single dynamic instance.\n *\n * API used by the Intel(R) Parallel Advisor to describe potential concurrency\n * and related activities. User-added source annotations expand to calls\n * to these procedures to enable modeling of a hypothetical concurrent\n * execution serially.\n * @{\n */\n#if !defined(_ADVISOR_ANNOTATE_H_) || defined(ANNOTATE_EXPAND_NULL)\n\ntypedef void* __itt_model_site;             /*!< @brief handle for lexical site     */\ntypedef void* __itt_model_site_instance;    /*!< @brief handle for dynamic instance */\ntypedef void* __itt_model_task;             /*!< @brief handle for lexical site     */\ntypedef void* __itt_model_task_instance;    /*!< @brief handle for dynamic instance */\n\n/**\n * @enum __itt_model_disable\n * @brief Enumerator for the disable methods\n */\ntypedef enum {\n    __itt_model_disable_observation,\n    __itt_model_disable_collection\n} __itt_model_disable;\n\n#endif /* !_ADVISOR_ANNOTATE_H_ || ANNOTATE_EXPAND_NULL */\n\n/**\n * @brief ANNOTATE_SITE_BEGIN/ANNOTATE_SITE_END support.\n *\n * site_begin/end model a potential concurrency site.\n * site instances may be recursively nested with themselves.\n * site_end exits the most recently started but unended site for the current\n * thread.  The handle passed to end may be used to validate structure.\n * Instances of a site encountered on different threads concurrently\n * are considered completely distinct. If the site name for two different\n * lexical sites match, it is unspecified whether they are treated as the\n * same or different for data presentation.\n */\nvoid ITTAPI __itt_model_site_begin(__itt_model_site *site, __itt_model_site_instance *instance, const char *name);\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_model_site_beginW(const wchar_t *name);\n#endif\nvoid ITTAPI __itt_model_site_beginA(const char *name);\nvoid ITTAPI __itt_model_site_beginAL(const char *name, size_t siteNameLen);\nvoid ITTAPI __itt_model_site_end  (__itt_model_site *site, __itt_model_site_instance *instance);\nvoid ITTAPI __itt_model_site_end_2(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_site_begin,  (__itt_model_site *site, __itt_model_site_instance *instance, const char *name))\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, model_site_beginW,  (const wchar_t *name))\n#endif\nITT_STUBV(ITTAPI, void, model_site_beginA,  (const char *name))\nITT_STUBV(ITTAPI, void, model_site_beginAL,  (const char *name, size_t siteNameLen))\nITT_STUBV(ITTAPI, void, model_site_end,    (__itt_model_site *site, __itt_model_site_instance *instance))\nITT_STUBV(ITTAPI, void, model_site_end_2,  (void))\n#define __itt_model_site_begin      ITTNOTIFY_VOID(model_site_begin)\n#define __itt_model_site_begin_ptr  ITTNOTIFY_NAME(model_site_begin)\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_site_beginW      ITTNOTIFY_VOID(model_site_beginW)\n#define __itt_model_site_beginW_ptr  ITTNOTIFY_NAME(model_site_beginW)\n#endif\n#define __itt_model_site_beginA      ITTNOTIFY_VOID(model_site_beginA)\n#define __itt_model_site_beginA_ptr  ITTNOTIFY_NAME(model_site_beginA)\n#define __itt_model_site_beginAL      ITTNOTIFY_VOID(model_site_beginAL)\n#define __itt_model_site_beginAL_ptr  ITTNOTIFY_NAME(model_site_beginAL)\n#define __itt_model_site_end        ITTNOTIFY_VOID(model_site_end)\n#define __itt_model_site_end_ptr    ITTNOTIFY_NAME(model_site_end)\n#define __itt_model_site_end_2        ITTNOTIFY_VOID(model_site_end_2)\n#define __itt_model_site_end_2_ptr    ITTNOTIFY_NAME(model_site_end_2)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_site_begin(site, instance, name)\n#define __itt_model_site_begin_ptr  0\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_site_beginW(name)\n#define __itt_model_site_beginW_ptr  0\n#endif\n#define __itt_model_site_beginA(name)\n#define __itt_model_site_beginA_ptr  0\n#define __itt_model_site_beginAL(name, siteNameLen)\n#define __itt_model_site_beginAL_ptr  0\n#define __itt_model_site_end(site, instance)\n#define __itt_model_site_end_ptr    0\n#define __itt_model_site_end_2()\n#define __itt_model_site_end_2_ptr    0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_site_begin_ptr  0\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_site_beginW_ptr  0\n#endif\n#define __itt_model_site_beginA_ptr  0\n#define __itt_model_site_beginAL_ptr  0\n#define __itt_model_site_end_ptr    0\n#define __itt_model_site_end_2_ptr    0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_TASK_BEGIN/ANNOTATE_TASK_END support\n *\n * task_begin/end model a potential task, which is contained within the most\n * closely enclosing dynamic site.  task_end exits the most recently started\n * but unended task.  The handle passed to end may be used to validate\n * structure.  It is unspecified if bad dynamic nesting is detected.  If it\n * is, it should be encoded in the resulting data collection.  The collector\n * should not fail due to construct nesting issues, nor attempt to directly\n * indicate the problem.\n */\nvoid ITTAPI __itt_model_task_begin(__itt_model_task *task, __itt_model_task_instance *instance, const char *name);\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_model_task_beginW(const wchar_t *name);\nvoid ITTAPI __itt_model_iteration_taskW(const wchar_t *name);\n#endif\nvoid ITTAPI __itt_model_task_beginA(const char *name);\nvoid ITTAPI __itt_model_task_beginAL(const char *name, size_t taskNameLen);\nvoid ITTAPI __itt_model_iteration_taskA(const char *name);\nvoid ITTAPI __itt_model_iteration_taskAL(const char *name, size_t taskNameLen);\nvoid ITTAPI __itt_model_task_end  (__itt_model_task *task, __itt_model_task_instance *instance);\nvoid ITTAPI __itt_model_task_end_2(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_task_begin,  (__itt_model_task *task, __itt_model_task_instance *instance, const char *name))\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, model_task_beginW,  (const wchar_t *name))\nITT_STUBV(ITTAPI, void, model_iteration_taskW, (const wchar_t *name))\n#endif\nITT_STUBV(ITTAPI, void, model_task_beginA,  (const char *name))\nITT_STUBV(ITTAPI, void, model_task_beginAL,  (const char *name, size_t taskNameLen))\nITT_STUBV(ITTAPI, void, model_iteration_taskA,  (const char *name))\nITT_STUBV(ITTAPI, void, model_iteration_taskAL,  (const char *name, size_t taskNameLen))\nITT_STUBV(ITTAPI, void, model_task_end,    (__itt_model_task *task, __itt_model_task_instance *instance))\nITT_STUBV(ITTAPI, void, model_task_end_2,  (void))\n#define __itt_model_task_begin      ITTNOTIFY_VOID(model_task_begin)\n#define __itt_model_task_begin_ptr  ITTNOTIFY_NAME(model_task_begin)\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_task_beginW     ITTNOTIFY_VOID(model_task_beginW)\n#define __itt_model_task_beginW_ptr ITTNOTIFY_NAME(model_task_beginW)\n#define __itt_model_iteration_taskW     ITTNOTIFY_VOID(model_iteration_taskW)\n#define __itt_model_iteration_taskW_ptr ITTNOTIFY_NAME(model_iteration_taskW)\n#endif\n#define __itt_model_task_beginA    ITTNOTIFY_VOID(model_task_beginA)\n#define __itt_model_task_beginA_ptr ITTNOTIFY_NAME(model_task_beginA)\n#define __itt_model_task_beginAL    ITTNOTIFY_VOID(model_task_beginAL)\n#define __itt_model_task_beginAL_ptr ITTNOTIFY_NAME(model_task_beginAL)\n#define __itt_model_iteration_taskA    ITTNOTIFY_VOID(model_iteration_taskA)\n#define __itt_model_iteration_taskA_ptr ITTNOTIFY_NAME(model_iteration_taskA)\n#define __itt_model_iteration_taskAL    ITTNOTIFY_VOID(model_iteration_taskAL)\n#define __itt_model_iteration_taskAL_ptr ITTNOTIFY_NAME(model_iteration_taskAL)\n#define __itt_model_task_end        ITTNOTIFY_VOID(model_task_end)\n#define __itt_model_task_end_ptr    ITTNOTIFY_NAME(model_task_end)\n#define __itt_model_task_end_2        ITTNOTIFY_VOID(model_task_end_2)\n#define __itt_model_task_end_2_ptr    ITTNOTIFY_NAME(model_task_end_2)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_task_begin(task, instance, name)\n#define __itt_model_task_begin_ptr  0\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_task_beginW(name)\n#define __itt_model_task_beginW_ptr  0\n#endif\n#define __itt_model_task_beginA(name)\n#define __itt_model_task_beginA_ptr  0\n#define __itt_model_task_beginAL(name, siteNameLen)\n#define __itt_model_task_beginAL_ptr  0\n#define __itt_model_iteration_taskA(name)\n#define __itt_model_iteration_taskA_ptr  0\n#define __itt_model_iteration_taskAL(name, siteNameLen)\n#define __itt_model_iteration_taskAL_ptr  0\n#define __itt_model_task_end(task, instance)\n#define __itt_model_task_end_ptr    0\n#define __itt_model_task_end_2()\n#define __itt_model_task_end_2_ptr    0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_task_begin_ptr  0\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_model_task_beginW_ptr 0\n#endif\n#define __itt_model_task_beginA_ptr  0\n#define __itt_model_task_beginAL_ptr  0\n#define __itt_model_iteration_taskA_ptr    0\n#define __itt_model_iteration_taskAL_ptr    0\n#define __itt_model_task_end_ptr    0\n#define __itt_model_task_end_2_ptr    0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_LOCK_ACQUIRE/ANNOTATE_LOCK_RELEASE support\n *\n * lock_acquire/release model a potential lock for both lockset and\n * performance modeling.  Each unique address is modeled as a separate\n * lock, with invalid addresses being valid lock IDs.  Specifically:\n * no storage is accessed by the API at the specified address - it is only\n * used for lock identification.  Lock acquires may be self-nested and are\n * unlocked by a corresponding number of releases.\n * (These closely correspond to __itt_sync_acquired/__itt_sync_releasing,\n * but may not have identical semantics.)\n */\nvoid ITTAPI __itt_model_lock_acquire(void *lock);\nvoid ITTAPI __itt_model_lock_acquire_2(void *lock);\nvoid ITTAPI __itt_model_lock_release(void *lock);\nvoid ITTAPI __itt_model_lock_release_2(void *lock);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock))\nITT_STUBV(ITTAPI, void, model_lock_acquire_2, (void *lock))\nITT_STUBV(ITTAPI, void, model_lock_release, (void *lock))\nITT_STUBV(ITTAPI, void, model_lock_release_2, (void *lock))\n#define __itt_model_lock_acquire     ITTNOTIFY_VOID(model_lock_acquire)\n#define __itt_model_lock_acquire_ptr ITTNOTIFY_NAME(model_lock_acquire)\n#define __itt_model_lock_acquire_2     ITTNOTIFY_VOID(model_lock_acquire_2)\n#define __itt_model_lock_acquire_2_ptr ITTNOTIFY_NAME(model_lock_acquire_2)\n#define __itt_model_lock_release     ITTNOTIFY_VOID(model_lock_release)\n#define __itt_model_lock_release_ptr ITTNOTIFY_NAME(model_lock_release)\n#define __itt_model_lock_release_2     ITTNOTIFY_VOID(model_lock_release_2)\n#define __itt_model_lock_release_2_ptr ITTNOTIFY_NAME(model_lock_release_2)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_lock_acquire(lock)\n#define __itt_model_lock_acquire_ptr 0\n#define __itt_model_lock_acquire_2(lock)\n#define __itt_model_lock_acquire_2_ptr 0\n#define __itt_model_lock_release(lock)\n#define __itt_model_lock_release_ptr 0\n#define __itt_model_lock_release_2(lock)\n#define __itt_model_lock_release_2_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_lock_acquire_ptr 0\n#define __itt_model_lock_acquire_2_ptr 0\n#define __itt_model_lock_release_ptr 0\n#define __itt_model_lock_release_2_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_RECORD_ALLOCATION/ANNOTATE_RECORD_DEALLOCATION support\n *\n * record_allocation/deallocation describe user-defined memory allocator\n * behavior, which may be required for correctness modeling to understand\n * when storage is not expected to be actually reused across threads.\n */\nvoid ITTAPI __itt_model_record_allocation  (void *addr, size_t size);\nvoid ITTAPI __itt_model_record_deallocation(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_record_allocation,   (void *addr, size_t size))\nITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr))\n#define __itt_model_record_allocation       ITTNOTIFY_VOID(model_record_allocation)\n#define __itt_model_record_allocation_ptr   ITTNOTIFY_NAME(model_record_allocation)\n#define __itt_model_record_deallocation     ITTNOTIFY_VOID(model_record_deallocation)\n#define __itt_model_record_deallocation_ptr ITTNOTIFY_NAME(model_record_deallocation)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_record_allocation(addr, size)\n#define __itt_model_record_allocation_ptr   0\n#define __itt_model_record_deallocation(addr)\n#define __itt_model_record_deallocation_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_record_allocation_ptr   0\n#define __itt_model_record_deallocation_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_INDUCTION_USES support\n *\n * Note particular storage is inductive through the end of the current site\n */\nvoid ITTAPI __itt_model_induction_uses(void* addr, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_induction_uses, (void *addr, size_t size))\n#define __itt_model_induction_uses     ITTNOTIFY_VOID(model_induction_uses)\n#define __itt_model_induction_uses_ptr ITTNOTIFY_NAME(model_induction_uses)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_induction_uses(addr, size)\n#define __itt_model_induction_uses_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_induction_uses_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_REDUCTION_USES support\n *\n * Note particular storage is used for reduction through the end\n * of the current site\n */\nvoid ITTAPI __itt_model_reduction_uses(void* addr, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_reduction_uses, (void *addr, size_t size))\n#define __itt_model_reduction_uses     ITTNOTIFY_VOID(model_reduction_uses)\n#define __itt_model_reduction_uses_ptr ITTNOTIFY_NAME(model_reduction_uses)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_reduction_uses(addr, size)\n#define __itt_model_reduction_uses_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_reduction_uses_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_OBSERVE_USES support\n *\n * Have correctness modeling record observations about uses of storage\n * through the end of the current site\n */\nvoid ITTAPI __itt_model_observe_uses(void* addr, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_observe_uses, (void *addr, size_t size))\n#define __itt_model_observe_uses     ITTNOTIFY_VOID(model_observe_uses)\n#define __itt_model_observe_uses_ptr ITTNOTIFY_NAME(model_observe_uses)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_observe_uses(addr, size)\n#define __itt_model_observe_uses_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_observe_uses_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_CLEAR_USES support\n *\n * Clear the special handling of a piece of storage related to induction,\n * reduction or observe_uses\n */\nvoid ITTAPI __itt_model_clear_uses(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_clear_uses, (void *addr))\n#define __itt_model_clear_uses     ITTNOTIFY_VOID(model_clear_uses)\n#define __itt_model_clear_uses_ptr ITTNOTIFY_NAME(model_clear_uses)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_clear_uses(addr)\n#define __itt_model_clear_uses_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_clear_uses_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief ANNOTATE_DISABLE_*_PUSH/ANNOTATE_DISABLE_*_POP support\n *\n * disable_push/disable_pop push and pop disabling based on a parameter.\n * Disabling observations stops processing of memory references during\n * correctness modeling, and all annotations that occur in the disabled\n * region.  This allows description of code that is expected to be handled\n * specially during conversion to parallelism or that is not recognized\n * by tools (e.g. some kinds of synchronization operations.)\n * This mechanism causes all annotations in the disabled region, other\n * than disable_push and disable_pop, to be ignored.  (For example, this\n * might validly be used to disable an entire parallel site and the contained\n * tasks and locking in it for data collection purposes.)\n * The disable for collection is a more expensive operation, but reduces\n * collector overhead significantly.  This applies to BOTH correctness data\n * collection and performance data collection.  For example, a site\n * containing a task might only enable data collection for the first 10\n * iterations.  Both performance and correctness data should reflect this,\n * and the program should run as close to full speed as possible when\n * collection is disabled.\n */\nvoid ITTAPI __itt_model_disable_push(__itt_model_disable x);\nvoid ITTAPI __itt_model_disable_pop(void);\nvoid ITTAPI __itt_model_aggregate_task(size_t x);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x))\nITT_STUBV(ITTAPI, void, model_disable_pop,  (void))\nITT_STUBV(ITTAPI, void, model_aggregate_task, (size_t x))\n#define __itt_model_disable_push     ITTNOTIFY_VOID(model_disable_push)\n#define __itt_model_disable_push_ptr ITTNOTIFY_NAME(model_disable_push)\n#define __itt_model_disable_pop      ITTNOTIFY_VOID(model_disable_pop)\n#define __itt_model_disable_pop_ptr  ITTNOTIFY_NAME(model_disable_pop)\n#define __itt_model_aggregate_task      ITTNOTIFY_VOID(model_aggregate_task)\n#define __itt_model_aggregate_task_ptr  ITTNOTIFY_NAME(model_aggregate_task)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_model_disable_push(x)\n#define __itt_model_disable_push_ptr 0\n#define __itt_model_disable_pop()\n#define __itt_model_disable_pop_ptr 0\n#define __itt_model_aggregate_task(x)\n#define __itt_model_aggregate_task_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_model_disable_push_ptr 0\n#define __itt_model_disable_pop_ptr 0\n#define __itt_model_aggregate_task_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} model group */\n\n/**\n * @defgroup heap Heap\n * @ingroup public\n * Heap group\n * @{\n */\n\ntypedef void* __itt_heap_function;\n\n/**\n * @brief Create an identification for heap function\n * @return non-zero identifier or NULL\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_heap_function ITTAPI __itt_heap_function_createA(const char*    name, const char*    domain);\n__itt_heap_function ITTAPI __itt_heap_function_createW(const wchar_t* name, const wchar_t* domain);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_heap_function_create     __itt_heap_function_createW\n#  define __itt_heap_function_create_ptr __itt_heap_function_createW_ptr\n#else\n#  define __itt_heap_function_create     __itt_heap_function_createA\n#  define __itt_heap_function_create_ptr __itt_heap_function_createA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_heap_function ITTAPI __itt_heap_function_create(const char* name, const char* domain);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char*    name, const char*    domain))\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t* name, const wchar_t* domain))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char*    name, const char*    domain))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_heap_function_createA     ITTNOTIFY_DATA(heap_function_createA)\n#define __itt_heap_function_createA_ptr ITTNOTIFY_NAME(heap_function_createA)\n#define __itt_heap_function_createW     ITTNOTIFY_DATA(heap_function_createW)\n#define __itt_heap_function_createW_ptr ITTNOTIFY_NAME(heap_function_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_heap_function_create      ITTNOTIFY_DATA(heap_function_create)\n#define __itt_heap_function_create_ptr  ITTNOTIFY_NAME(heap_function_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_heap_function_createA(name, domain) (__itt_heap_function)0\n#define __itt_heap_function_createA_ptr 0\n#define __itt_heap_function_createW(name, domain) (__itt_heap_function)0\n#define __itt_heap_function_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_heap_function_create(name, domain)  (__itt_heap_function)0\n#define __itt_heap_function_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_heap_function_createA_ptr 0\n#define __itt_heap_function_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_heap_function_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an allocation begin occurrence.\n */\nvoid ITTAPI __itt_heap_allocate_begin(__itt_heap_function h, size_t size, int initialized);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized))\n#define __itt_heap_allocate_begin     ITTNOTIFY_VOID(heap_allocate_begin)\n#define __itt_heap_allocate_begin_ptr ITTNOTIFY_NAME(heap_allocate_begin)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_allocate_begin(h, size, initialized)\n#define __itt_heap_allocate_begin_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_allocate_begin_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an allocation end occurrence.\n */\nvoid ITTAPI __itt_heap_allocate_end(__itt_heap_function h, void** addr, size_t size, int initialized);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized))\n#define __itt_heap_allocate_end     ITTNOTIFY_VOID(heap_allocate_end)\n#define __itt_heap_allocate_end_ptr ITTNOTIFY_NAME(heap_allocate_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_allocate_end(h, addr, size, initialized)\n#define __itt_heap_allocate_end_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_allocate_end_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an free begin occurrence.\n */\nvoid ITTAPI __itt_heap_free_begin(__itt_heap_function h, void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr))\n#define __itt_heap_free_begin     ITTNOTIFY_VOID(heap_free_begin)\n#define __itt_heap_free_begin_ptr ITTNOTIFY_NAME(heap_free_begin)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_free_begin(h, addr)\n#define __itt_heap_free_begin_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_free_begin_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an free end occurrence.\n */\nvoid ITTAPI __itt_heap_free_end(__itt_heap_function h, void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr))\n#define __itt_heap_free_end     ITTNOTIFY_VOID(heap_free_end)\n#define __itt_heap_free_end_ptr ITTNOTIFY_NAME(heap_free_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_free_end(h, addr)\n#define __itt_heap_free_end_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_free_end_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an reallocation begin occurrence.\n */\nvoid ITTAPI __itt_heap_reallocate_begin(__itt_heap_function h, void* addr, size_t new_size, int initialized);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized))\n#define __itt_heap_reallocate_begin     ITTNOTIFY_VOID(heap_reallocate_begin)\n#define __itt_heap_reallocate_begin_ptr ITTNOTIFY_NAME(heap_reallocate_begin)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_reallocate_begin(h, addr, new_size, initialized)\n#define __itt_heap_reallocate_begin_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_reallocate_begin_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an reallocation end occurrence.\n */\nvoid ITTAPI __itt_heap_reallocate_end(__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized))\n#define __itt_heap_reallocate_end     ITTNOTIFY_VOID(heap_reallocate_end)\n#define __itt_heap_reallocate_end_ptr ITTNOTIFY_NAME(heap_reallocate_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_reallocate_end(h, addr, new_addr, new_size, initialized)\n#define __itt_heap_reallocate_end_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_reallocate_end_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief internal access begin */\nvoid ITTAPI __itt_heap_internal_access_begin(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_internal_access_begin,  (void))\n#define __itt_heap_internal_access_begin      ITTNOTIFY_VOID(heap_internal_access_begin)\n#define __itt_heap_internal_access_begin_ptr  ITTNOTIFY_NAME(heap_internal_access_begin)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_internal_access_begin()\n#define __itt_heap_internal_access_begin_ptr  0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_internal_access_begin_ptr  0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief internal access end */\nvoid ITTAPI __itt_heap_internal_access_end(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_internal_access_end, (void))\n#define __itt_heap_internal_access_end     ITTNOTIFY_VOID(heap_internal_access_end)\n#define __itt_heap_internal_access_end_ptr ITTNOTIFY_NAME(heap_internal_access_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_internal_access_end()\n#define __itt_heap_internal_access_end_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_internal_access_end_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief record memory growth begin */\nvoid ITTAPI __itt_heap_record_memory_growth_begin(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin,  (void))\n#define __itt_heap_record_memory_growth_begin      ITTNOTIFY_VOID(heap_record_memory_growth_begin)\n#define __itt_heap_record_memory_growth_begin_ptr  ITTNOTIFY_NAME(heap_record_memory_growth_begin)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_record_memory_growth_begin()\n#define __itt_heap_record_memory_growth_begin_ptr  0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_record_memory_growth_begin_ptr  0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief record memory growth end */\nvoid ITTAPI __itt_heap_record_memory_growth_end(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void))\n#define __itt_heap_record_memory_growth_end     ITTNOTIFY_VOID(heap_record_memory_growth_end)\n#define __itt_heap_record_memory_growth_end_ptr ITTNOTIFY_NAME(heap_record_memory_growth_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_record_memory_growth_end()\n#define __itt_heap_record_memory_growth_end_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_record_memory_growth_end_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Specify the type of heap detection/reporting to modify.\n */\n/**\n * @hideinitializer\n * @brief Report on memory leaks.\n */\n#define __itt_heap_leaks 0x00000001\n\n/**\n * @hideinitializer\n * @brief Report on memory growth.\n */\n#define __itt_heap_growth 0x00000002\n\n\n/** @brief heap reset detection */\nvoid ITTAPI __itt_heap_reset_detection(unsigned int reset_mask);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_reset_detection,  (unsigned int reset_mask))\n#define __itt_heap_reset_detection      ITTNOTIFY_VOID(heap_reset_detection)\n#define __itt_heap_reset_detection_ptr  ITTNOTIFY_NAME(heap_reset_detection)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_reset_detection()\n#define __itt_heap_reset_detection_ptr  0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_reset_detection_ptr  0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief report */\nvoid ITTAPI __itt_heap_record(unsigned int record_mask);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, heap_record, (unsigned int record_mask))\n#define __itt_heap_record     ITTNOTIFY_VOID(heap_record)\n#define __itt_heap_record_ptr ITTNOTIFY_NAME(heap_record)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_heap_record()\n#define __itt_heap_record_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_heap_record_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @} heap group */\n/** @endcond */\n/* ========================================================================== */\n\n/**\n * @defgroup domains Domains\n * @ingroup public\n * Domains group\n * @{\n */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_domain\n{\n    volatile int flags; /*!< Zero if disabled, non-zero if enabled. The meaning of different non-zero values is reserved to the runtime */\n    const char* nameA;  /*!< Copy of original name in ASCII. */\n#if defined(UNICODE) || defined(_UNICODE)\n    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */\n#else  /* UNICODE || _UNICODE */\n    void* nameW;\n#endif /* UNICODE || _UNICODE */\n    int   extra1; /*!< Reserved to the runtime */\n    void* extra2; /*!< Reserved to the runtime */\n    struct ___itt_domain* next;\n} __itt_domain;\n\n#pragma pack(pop)\n/** @endcond */\n\n/**\n * @ingroup domains\n * @brief Create a domain.\n * Create domain using some domain name: the URI naming style is recommended.\n * Because the set of domains is expected to be static over the application's\n * execution time, there is no mechanism to destroy a domain.\n * Any domain can be accessed by any thread in the process, regardless of\n * which thread created the domain. This call is thread-safe.\n * @param[in] name name of domain\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_domain* ITTAPI __itt_domain_createA(const char    *name);\n__itt_domain* ITTAPI __itt_domain_createW(const wchar_t *name);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_domain_create     __itt_domain_createW\n#  define __itt_domain_create_ptr __itt_domain_createW_ptr\n#else /* UNICODE */\n#  define __itt_domain_create     __itt_domain_createA\n#  define __itt_domain_create_ptr __itt_domain_createA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_domain* ITTAPI __itt_domain_create(const char *name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char    *name))\nITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_domain*, domain_create,  (const char    *name))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_domain_createA     ITTNOTIFY_DATA(domain_createA)\n#define __itt_domain_createA_ptr ITTNOTIFY_NAME(domain_createA)\n#define __itt_domain_createW     ITTNOTIFY_DATA(domain_createW)\n#define __itt_domain_createW_ptr ITTNOTIFY_NAME(domain_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_domain_create     ITTNOTIFY_DATA(domain_create)\n#define __itt_domain_create_ptr ITTNOTIFY_NAME(domain_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_domain_createA(name) (__itt_domain*)0\n#define __itt_domain_createA_ptr 0\n#define __itt_domain_createW(name) (__itt_domain*)0\n#define __itt_domain_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_domain_create(name)  (__itt_domain*)0\n#define __itt_domain_create_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_domain_createA_ptr 0\n#define __itt_domain_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_domain_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} domains group */\n\n/**\n * @defgroup ids IDs\n * @ingroup public\n * IDs group\n * @{\n */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_id\n{\n    unsigned long long d1, d2, d3;\n} __itt_id;\n\n#pragma pack(pop)\n/** @endcond */\n\nstatic const __itt_id __itt_null = { 0, 0, 0 };\n\n/**\n * @ingroup ids\n * @brief A convenience function is provided to create an ID without domain control.\n * @brief This is a convenience function to initialize an __itt_id structure. This function\n * does not affect the collector runtime in any way. After you make the ID with this\n * function, you still must create it with the __itt_id_create function before using the ID\n * to identify a named entity.\n * @param[in] addr The address of object; high QWORD of the ID value.\n * @param[in] extra The extra data to unique identify object; low QWORD of the ID value.\n */\n\nITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra) ITT_INLINE_ATTRIBUTE;\nITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra)\n{\n    __itt_id id = __itt_null;\n    id.d1 = (unsigned long long)((uintptr_t)addr);\n    id.d2 = (unsigned long long)extra;\n    id.d3 = (unsigned long long)0; /* Reserved. Must be zero */\n    return id;\n}\n\n/**\n * @ingroup ids\n * @brief Create an instance of identifier.\n * This establishes the beginning of the lifetime of an instance of\n * the given ID in the trace. Once this lifetime starts, the ID\n * can be used to tag named entity instances in calls such as\n * __itt_task_begin, and to specify relationships among\n * identified named entity instances, using the \\ref relations APIs.\n * Instance IDs are not domain specific!\n * @param[in] domain The domain controlling the execution of this call.\n * @param[in] id The ID to create.\n */\nvoid ITTAPI __itt_id_create(const __itt_domain *domain, __itt_id id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id))\n#define __itt_id_create(d,x) ITTNOTIFY_VOID_D1(id_create,d,x)\n#define __itt_id_create_ptr  ITTNOTIFY_NAME(id_create)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_id_create(domain,id)\n#define __itt_id_create_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_id_create_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup ids\n * @brief Destroy an instance of identifier.\n * This ends the lifetime of the current instance of the given ID value in the trace.\n * Any relationships that are established after this lifetime ends are invalid.\n * This call must be performed before the given ID value can be reused for a different\n * named entity instance.\n * @param[in] domain The domain controlling the execution of this call.\n * @param[in] id The ID to destroy.\n */\nvoid ITTAPI __itt_id_destroy(const __itt_domain *domain, __itt_id id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id))\n#define __itt_id_destroy(d,x) ITTNOTIFY_VOID_D1(id_destroy,d,x)\n#define __itt_id_destroy_ptr  ITTNOTIFY_NAME(id_destroy)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_id_destroy(domain,id)\n#define __itt_id_destroy_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_id_destroy_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} ids group */\n\n/**\n * @defgroup handless String Handles\n * @ingroup public\n * String Handles group\n * @{\n */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_string_handle\n{\n    const char* strA; /*!< Copy of original string in ASCII. */\n#if defined(UNICODE) || defined(_UNICODE)\n    const wchar_t* strW; /*!< Copy of original string in UNICODE. */\n#else  /* UNICODE || _UNICODE */\n    void* strW;\n#endif /* UNICODE || _UNICODE */\n    int   extra1; /*!< Reserved. Must be zero   */\n    void* extra2; /*!< Reserved. Must be zero   */\n    struct ___itt_string_handle* next;\n} __itt_string_handle;\n\n#pragma pack(pop)\n/** @endcond */\n\n/**\n * @ingroup handles\n * @brief Create a string handle.\n * Create and return handle value that can be associated with a string.\n * Consecutive calls to __itt_string_handle_create with the same name\n * return the same value. Because the set of string handles is expected to remain\n * static during the application's execution time, there is no mechanism to destroy a string handle.\n * Any string handle can be accessed by any thread in the process, regardless of which thread created\n * the string handle. This call is thread-safe.\n * @param[in] name The input string\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_string_handle* ITTAPI __itt_string_handle_createA(const char    *name);\n__itt_string_handle* ITTAPI __itt_string_handle_createW(const wchar_t *name);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_string_handle_create     __itt_string_handle_createW\n#  define __itt_string_handle_create_ptr __itt_string_handle_createW_ptr\n#else /* UNICODE */\n#  define __itt_string_handle_create     __itt_string_handle_createA\n#  define __itt_string_handle_create_ptr __itt_string_handle_createA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_string_handle* ITTAPI __itt_string_handle_create(const char *name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char    *name))\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create,  (const char    *name))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_string_handle_createA     ITTNOTIFY_DATA(string_handle_createA)\n#define __itt_string_handle_createA_ptr ITTNOTIFY_NAME(string_handle_createA)\n#define __itt_string_handle_createW     ITTNOTIFY_DATA(string_handle_createW)\n#define __itt_string_handle_createW_ptr ITTNOTIFY_NAME(string_handle_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_string_handle_create     ITTNOTIFY_DATA(string_handle_create)\n#define __itt_string_handle_create_ptr ITTNOTIFY_NAME(string_handle_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_string_handle_createA(name) (__itt_string_handle*)0\n#define __itt_string_handle_createA_ptr 0\n#define __itt_string_handle_createW(name) (__itt_string_handle*)0\n#define __itt_string_handle_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_string_handle_create(name)  (__itt_string_handle*)0\n#define __itt_string_handle_create_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_string_handle_createA_ptr 0\n#define __itt_string_handle_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_string_handle_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} handles group */\n\n/** @cond exclude_from_documentation */\ntypedef unsigned long long __itt_timestamp;\n/** @endcond */\n\n#define __itt_timestamp_none ((__itt_timestamp)-1LL)\n\n/** @cond exclude_from_gpa_documentation */\n\n/**\n * @ingroup timestamps\n * @brief Return timestamp corresponding to the current moment.\n * This returns the timestamp in the format that is the most relevant for the current\n * host or platform (RDTSC, QPC, and others). You can use the \"<\" operator to\n * compare __itt_timestamp values.\n */\n__itt_timestamp ITTAPI __itt_get_timestamp(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void))\n#define __itt_get_timestamp      ITTNOTIFY_DATA(get_timestamp)\n#define __itt_get_timestamp_ptr  ITTNOTIFY_NAME(get_timestamp)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_get_timestamp()\n#define __itt_get_timestamp_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_get_timestamp_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} timestamps */\n/** @endcond */\n\n/** @cond exclude_from_gpa_documentation */\n\n/**\n * @defgroup regions Regions\n * @ingroup public\n * Regions group\n * @{\n */\n/**\n * @ingroup regions\n * @brief Begin of region instance.\n * Successive calls to __itt_region_begin with the same ID are ignored\n * until a call to __itt_region_end with the same ID\n * @param[in] domain The domain for this region instance\n * @param[in] id The instance ID for this region instance. Must not be __itt_null\n * @param[in] parentid The instance ID for the parent of this region instance, or __itt_null\n * @param[in] name The name of this region\n */\nvoid ITTAPI __itt_region_begin(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);\n\n/**\n * @ingroup regions\n * @brief End of region instance.\n * The first call to __itt_region_end with a given ID ends the\n * region. Successive calls with the same ID are ignored, as are\n * calls that do not have a matching __itt_region_begin call.\n * @param[in] domain The domain for this region instance\n * @param[in] id The instance ID for this region instance\n */\nvoid ITTAPI __itt_region_end(const __itt_domain *domain, __itt_id id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))\nITT_STUBV(ITTAPI, void, region_end,   (const __itt_domain *domain, __itt_id id))\n#define __itt_region_begin(d,x,y,z) ITTNOTIFY_VOID_D3(region_begin,d,x,y,z)\n#define __itt_region_begin_ptr      ITTNOTIFY_NAME(region_begin)\n#define __itt_region_end(d,x)       ITTNOTIFY_VOID_D1(region_end,d,x)\n#define __itt_region_end_ptr        ITTNOTIFY_NAME(region_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_region_begin(d,x,y,z)\n#define __itt_region_begin_ptr 0\n#define __itt_region_end(d,x)\n#define __itt_region_end_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_region_begin_ptr 0\n#define __itt_region_end_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} regions group */\n\n/**\n * @defgroup frames Frames\n * @ingroup public\n * Frames are similar to regions, but are intended to be easier to use and to implement.\n * In particular:\n * - Frames always represent periods of elapsed time\n * - By default, frames have no nesting relationships\n * @{\n */\n\n/**\n * @ingroup frames\n * @brief Begin a frame instance.\n * Successive calls to __itt_frame_begin with the\n * same ID are ignored until a call to __itt_frame_end with the same ID.\n * @param[in] domain The domain for this frame instance\n * @param[in] id The instance ID for this frame instance or NULL\n */\nvoid ITTAPI __itt_frame_begin_v3(const __itt_domain *domain, __itt_id *id);\n\n/**\n * @ingroup frames\n * @brief End a frame instance.\n * The first call to __itt_frame_end with a given ID\n * ends the frame. Successive calls with the same ID are ignored, as are\n * calls that do not have a matching __itt_frame_begin call.\n * @param[in] domain The domain for this frame instance\n * @param[in] id The instance ID for this frame instance or NULL for current\n */\nvoid ITTAPI __itt_frame_end_v3(const __itt_domain *domain, __itt_id *id);\n\n/**\n * @ingroup frames\n * @brief Submits a frame instance.\n * Successive calls to __itt_frame_begin or __itt_frame_submit with the\n * same ID are ignored until a call to __itt_frame_end or __itt_frame_submit\n * with the same ID.\n * Passing special __itt_timestamp_none value as \"end\" argument means\n * take the current timestamp as the end timestamp.\n * @param[in] domain The domain for this frame instance\n * @param[in] id The instance ID for this frame instance or NULL\n * @param[in] begin Timestamp of the beginning of the frame\n * @param[in] end Timestamp of the end of the frame\n */\nvoid ITTAPI __itt_frame_submit_v3(const __itt_domain *domain, __itt_id *id,\n    __itt_timestamp begin, __itt_timestamp end);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, frame_begin_v3,  (const __itt_domain *domain, __itt_id *id))\nITT_STUBV(ITTAPI, void, frame_end_v3,    (const __itt_domain *domain, __itt_id *id))\nITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end))\n#define __itt_frame_begin_v3(d,x)      ITTNOTIFY_VOID_D1(frame_begin_v3,d,x)\n#define __itt_frame_begin_v3_ptr       ITTNOTIFY_NAME(frame_begin_v3)\n#define __itt_frame_end_v3(d,x)        ITTNOTIFY_VOID_D1(frame_end_v3,d,x)\n#define __itt_frame_end_v3_ptr         ITTNOTIFY_NAME(frame_end_v3)\n#define __itt_frame_submit_v3(d,x,b,e) ITTNOTIFY_VOID_D3(frame_submit_v3,d,x,b,e)\n#define __itt_frame_submit_v3_ptr      ITTNOTIFY_NAME(frame_submit_v3)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_frame_begin_v3(domain,id)\n#define __itt_frame_begin_v3_ptr 0\n#define __itt_frame_end_v3(domain,id)\n#define __itt_frame_end_v3_ptr   0\n#define __itt_frame_submit_v3(domain,id,begin,end)\n#define __itt_frame_submit_v3_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_frame_begin_v3_ptr 0\n#define __itt_frame_end_v3_ptr   0\n#define __itt_frame_submit_v3_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} frames group */\n/** @endcond */\n\n/**\n * @defgroup taskgroup Task Group\n * @ingroup public\n * Task Group\n * @{\n */\n/**\n * @ingroup task_groups\n * @brief Denotes a task_group instance.\n * Successive calls to __itt_task_group with the same ID are ignored.\n * @param[in] domain The domain for this task_group instance\n * @param[in] id The instance ID for this task_group instance. Must not be __itt_null.\n * @param[in] parentid The instance ID for the parent of this task_group instance, or __itt_null.\n * @param[in] name The name of this task_group\n */\nvoid ITTAPI __itt_task_group(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))\n#define __itt_task_group(d,x,y,z) ITTNOTIFY_VOID_D3(task_group,d,x,y,z)\n#define __itt_task_group_ptr      ITTNOTIFY_NAME(task_group)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_task_group(d,x,y,z)\n#define __itt_task_group_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_task_group_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} taskgroup group */\n\n/**\n * @defgroup tasks Tasks\n * @ingroup public\n * A task instance represents a piece of work performed by a particular\n * thread for a period of time. A call to __itt_task_begin creates a\n * task instance. This becomes the current instance for that task on that\n * thread. A following call to __itt_task_end on the same thread ends the\n * instance. There may be multiple simultaneous instances of tasks with the\n * same name on different threads. If an ID is specified, the task instance\n * receives that ID. Nested tasks are allowed.\n *\n * Note: The task is defined by the bracketing of __itt_task_begin and\n * __itt_task_end on the same thread. If some scheduling mechanism causes\n * task switching (the thread executes a different user task) or task\n * switching (the user task switches to a different thread) then this breaks\n * the notion of  current instance. Additional API calls are required to\n * deal with that possibility.\n * @{\n */\n\n/**\n * @ingroup tasks\n * @brief Begin a task instance.\n * @param[in] domain The domain for this task\n * @param[in] taskid The instance ID for this task instance, or __itt_null\n * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null\n * @param[in] name The name of this task\n */\nvoid ITTAPI __itt_task_begin(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name);\n\n/**\n * @ingroup tasks\n * @brief Begin a task instance.\n * @param[in] domain The domain for this task\n * @param[in] taskid The identifier for this task instance (may be 0)\n * @param[in] parentid The parent of this task (may be 0)\n * @param[in] fn The pointer to the function you are tracing\n */\nvoid ITTAPI __itt_task_begin_fn(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, void* fn);\n\n/**\n * @ingroup tasks\n * @brief End the current task instance.\n * @param[in] domain The domain for this task\n */\nvoid ITTAPI __itt_task_end(const __itt_domain *domain);\n\n/**\n * @ingroup tasks\n * @brief Begin an overlapped task instance.\n * @param[in] domain The domain for this task.\n * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.\n * @param[in] parentid The parent of this task, or __itt_null.\n * @param[in] name The name of this task.\n */\nvoid ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);\n\n/**\n * @ingroup tasks\n * @brief End an overlapped task instance.\n * @param[in] domain The domain for this task\n * @param[in] taskid Explicit ID of finished task\n */\nvoid ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, task_begin,    (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))\nITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parentid, void* fn))\nITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain))\nITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name))\nITT_STUBV(ITTAPI, void, task_end_overlapped,   (const __itt_domain *domain, __itt_id taskid))\n#define __itt_task_begin(d,x,y,z)    ITTNOTIFY_VOID_D3(task_begin,d,x,y,z)\n#define __itt_task_begin_ptr         ITTNOTIFY_NAME(task_begin)\n#define __itt_task_begin_fn(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_fn,d,x,y,z)\n#define __itt_task_begin_fn_ptr      ITTNOTIFY_NAME(task_begin_fn)\n#define __itt_task_end(d)            ITTNOTIFY_VOID_D0(task_end,d)\n#define __itt_task_end_ptr           ITTNOTIFY_NAME(task_end)\n#define __itt_task_begin_overlapped(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z)\n#define __itt_task_begin_overlapped_ptr      ITTNOTIFY_NAME(task_begin_overlapped)\n#define __itt_task_end_overlapped(d,x)       ITTNOTIFY_VOID_D1(task_end_overlapped,d,x)\n#define __itt_task_end_overlapped_ptr        ITTNOTIFY_NAME(task_end_overlapped)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_task_begin(domain,id,parentid,name)\n#define __itt_task_begin_ptr    0\n#define __itt_task_begin_fn(domain,id,parentid,fn)\n#define __itt_task_begin_fn_ptr 0\n#define __itt_task_end(domain)\n#define __itt_task_end_ptr      0\n#define __itt_task_begin_overlapped(domain,taskid,parentid,name)\n#define __itt_task_begin_overlapped_ptr         0\n#define __itt_task_end_overlapped(domain,taskid)\n#define __itt_task_end_overlapped_ptr           0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_task_begin_ptr    0\n#define __itt_task_begin_fn_ptr 0\n#define __itt_task_end_ptr      0\n#define __itt_task_begin_overlapped_ptr 0\n#define __itt_task_end_overlapped_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} tasks group */\n\n/**\n * @defgroup counters Counters\n * @ingroup public\n * Counters are user-defined objects with a monotonically increasing\n * value. Counter values are 64-bit unsigned integers. Counter values\n * are tracked per-thread. Counters have names that can be displayed in\n * the tools.\n * @{\n */\n\n/**\n * @ingroup counters\n * @brief Increment a counter by one.\n * The first call with a given name creates a counter by that name and sets its\n * value to zero on every thread. Successive calls increment the counter value\n * on the thread on which the call is issued.\n * @param[in] domain The domain controlling the call. Counter names are not domain specific.\n *            The domain argument is used only to enable or disable the API calls.\n * @param[in] name The name of the counter\n */\nvoid ITTAPI __itt_counter_inc_v3(const __itt_domain *domain, __itt_string_handle *name);\n\n/**\n * @ingroup counters\n * @brief Increment a counter by the value specified in delta.\n * @param[in] domain The domain controlling the call. Counter names are not domain specific.\n *            The domain argument is used only to enable or disable the API calls.\n * @param[in] name The name of the counter\n * @param[in] delta The amount by which to increment the counter\n */\nvoid ITTAPI __itt_counter_inc_delta_v3(const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, counter_inc_v3,       (const __itt_domain *domain, __itt_string_handle *name))\nITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta))\n#define __itt_counter_inc_v3(d,x)         ITTNOTIFY_VOID_D1(counter_inc_v3,d,x)\n#define __itt_counter_inc_v3_ptr          ITTNOTIFY_NAME(counter_inc_v3)\n#define __itt_counter_inc_delta_v3(d,x,y) ITTNOTIFY_VOID_D2(counter_inc_delta_v3,d,x,y)\n#define __itt_counter_inc_delta_v3_ptr    ITTNOTIFY_NAME(counter_inc_delta_v3)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_counter_inc_v3(domain,name)\n#define __itt_counter_inc_v3_ptr       0\n#define __itt_counter_inc_delta_v3(domain,name,delta)\n#define __itt_counter_inc_delta_v3_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_counter_inc_v3_ptr       0\n#define __itt_counter_inc_delta_v3_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} counters group */\n\n/**\n * @defgroup markers Markers\n * Markers represent a single discreet event in time. Markers have a scope,\n * described by an enumerated type __itt_scope. Markers are created by\n * the API call __itt_marker. A marker instance can be given an ID for use in\n * adding metadata.\n * @{\n */\n\n/**\n * @brief Describes the scope of an event object in the trace.\n */\ntypedef enum\n{\n    __itt_scope_unknown = 0,\n    __itt_scope_global,\n    __itt_scope_track_group,\n    __itt_scope_track,\n    __itt_scope_task,\n    __itt_scope_marker\n} __itt_scope;\n\n/** @cond exclude_from_documentation */\n#define __itt_marker_scope_unknown  __itt_scope_unknown\n#define __itt_marker_scope_global   __itt_scope_global\n#define __itt_marker_scope_process  __itt_scope_track_group\n#define __itt_marker_scope_thread   __itt_scope_track\n#define __itt_marker_scope_task     __itt_scope_task\n/** @endcond */\n\n/**\n * @ingroup markers\n * @brief Create a marker instance\n * @param[in] domain The domain for this marker\n * @param[in] id The instance ID for this marker or __itt_null\n * @param[in] name The name for this marker\n * @param[in] scope The scope for this marker\n */\nvoid ITTAPI __itt_marker(const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope))\n#define __itt_marker(d,x,y,z) ITTNOTIFY_VOID_D3(marker,d,x,y,z)\n#define __itt_marker_ptr      ITTNOTIFY_NAME(marker)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_marker(domain,id,name,scope)\n#define __itt_marker_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_marker_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} markers group */\n\n/**\n * @defgroup metadata Metadata\n * The metadata API is used to attach extra information to named\n * entities. Metadata can be attached to an identified named entity by ID,\n * or to the current entity (which is always a task).\n *\n * Conceptually metadata has a type (what kind of metadata), a key (the\n * name of the metadata), and a value (the actual data). The encoding of\n * the value depends on the type of the metadata.\n *\n * The type of metadata is specified by an enumerated type __itt_metdata_type.\n * @{\n */\n\n/**\n * @ingroup parameters\n * @brief describes the type of metadata\n */\ntypedef enum {\n    __itt_metadata_unknown = 0,\n    __itt_metadata_u64,     /**< Unsigned 64-bit integer */\n    __itt_metadata_s64,     /**< Signed 64-bit integer */\n    __itt_metadata_u32,     /**< Unsigned 32-bit integer */\n    __itt_metadata_s32,     /**< Signed 32-bit integer */\n    __itt_metadata_u16,     /**< Unsigned 16-bit integer */\n    __itt_metadata_s16,     /**< Signed 16-bit integer */\n    __itt_metadata_float,   /**< Signed 32-bit floating-point */\n    __itt_metadata_double   /**< SIgned 64-bit floating-point */\n} __itt_metadata_type;\n\n/**\n * @ingroup parameters\n * @brief Add metadata to an instance of a named entity.\n * @param[in] domain The domain controlling the call\n * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task\n * @param[in] key The name of the metadata\n * @param[in] type The type of the metadata\n * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.\n * @param[in] data The metadata itself\n*/\nvoid ITTAPI __itt_metadata_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))\n#define __itt_metadata_add(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add,d,x,y,z,a,b)\n#define __itt_metadata_add_ptr          ITTNOTIFY_NAME(metadata_add)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_metadata_add(d,x,y,z,a,b)\n#define __itt_metadata_add_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_metadata_add_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup parameters\n * @brief Add string metadata to an instance of a named entity.\n * @param[in] domain The domain controlling the call\n * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task\n * @param[in] key The name of the metadata\n * @param[in] data The metadata itself\n * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated\n*/\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_metadata_str_addA(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);\nvoid ITTAPI __itt_metadata_str_addW(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_metadata_str_add     __itt_metadata_str_addW\n#  define __itt_metadata_str_add_ptr __itt_metadata_str_addW_ptr\n#else /* UNICODE */\n#  define __itt_metadata_str_add     __itt_metadata_str_addA\n#  define __itt_metadata_str_add_ptr __itt_metadata_str_addA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_metadata_str_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);\n#endif\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))\nITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_addA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addA,d,x,y,z,a)\n#define __itt_metadata_str_addA_ptr        ITTNOTIFY_NAME(metadata_str_addA)\n#define __itt_metadata_str_addW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addW,d,x,y,z,a)\n#define __itt_metadata_str_addW_ptr        ITTNOTIFY_NAME(metadata_str_addW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add(d,x,y,z,a)  ITTNOTIFY_VOID_D4(metadata_str_add,d,x,y,z,a)\n#define __itt_metadata_str_add_ptr         ITTNOTIFY_NAME(metadata_str_add)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_addA(d,x,y,z,a)\n#define __itt_metadata_str_addA_ptr 0\n#define __itt_metadata_str_addW(d,x,y,z,a)\n#define __itt_metadata_str_addW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add(d,x,y,z,a)\n#define __itt_metadata_str_add_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_addA_ptr 0\n#define __itt_metadata_str_addW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup parameters\n * @brief Add metadata to an instance of a named entity.\n * @param[in] domain The domain controlling the call\n * @param[in] scope The scope of the instance to which the metadata is to be added\n\n * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task\n\n * @param[in] key The name of the metadata\n * @param[in] type The type of the metadata\n * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.\n * @param[in] data The metadata itself\n*/\nvoid ITTAPI __itt_metadata_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))\n#define __itt_metadata_add_with_scope(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add_with_scope,d,x,y,z,a,b)\n#define __itt_metadata_add_with_scope_ptr          ITTNOTIFY_NAME(metadata_add_with_scope)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_metadata_add_with_scope(d,x,y,z,a,b)\n#define __itt_metadata_add_with_scope_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_metadata_add_with_scope_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup parameters\n * @brief Add string metadata to an instance of a named entity.\n * @param[in] domain The domain controlling the call\n * @param[in] scope The scope of the instance to which the metadata is to be added\n\n * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task\n\n * @param[in] key The name of the metadata\n * @param[in] data The metadata itself\n * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated\n*/\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_metadata_str_add_with_scopeA(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);\nvoid ITTAPI __itt_metadata_str_add_with_scopeW(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_metadata_str_add_with_scope     __itt_metadata_str_add_with_scopeW\n#  define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeW_ptr\n#else /* UNICODE */\n#  define __itt_metadata_str_add_with_scope     __itt_metadata_str_add_with_scopeA\n#  define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_metadata_str_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);\n#endif\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeA,d,x,y,z,a)\n#define __itt_metadata_str_add_with_scopeA_ptr        ITTNOTIFY_NAME(metadata_str_add_with_scopeA)\n#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeW,d,x,y,z,a)\n#define __itt_metadata_str_add_with_scopeW_ptr        ITTNOTIFY_NAME(metadata_str_add_with_scopeW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add_with_scope(d,x,y,z,a)  ITTNOTIFY_VOID_D4(metadata_str_add_with_scope,d,x,y,z,a)\n#define __itt_metadata_str_add_with_scope_ptr         ITTNOTIFY_NAME(metadata_str_add_with_scope)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a)\n#define __itt_metadata_str_add_with_scopeA_ptr  0\n#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a)\n#define __itt_metadata_str_add_with_scopeW_ptr  0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add_with_scope(d,x,y,z,a)\n#define __itt_metadata_str_add_with_scope_ptr   0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_metadata_str_add_with_scopeA_ptr  0\n#define __itt_metadata_str_add_with_scopeW_ptr  0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_metadata_str_add_with_scope_ptr   0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @} metadata group */\n\n/**\n * @defgroup relations Relations\n * Instances of named entities can be explicitly associated with other\n * instances using instance IDs and the relationship API calls.\n *\n * @{\n */\n\n/**\n * @ingroup relations\n * @brief The kind of relation between two instances is specified by the enumerated type __itt_relation.\n * Relations between instances can be added with an API call. The relation\n * API uses instance IDs. Relations can be added before or after the actual\n * instances are created and persist independently of the instances. This\n * is the motivation for having different lifetimes for instance IDs and\n * the actual instances.\n */\ntypedef enum\n{\n    __itt_relation_is_unknown = 0,\n    __itt_relation_is_dependent_on,         /**< \"A is dependent on B\" means that A cannot start until B completes */\n    __itt_relation_is_sibling_of,           /**< \"A is sibling of B\" means that A and B were created as a group */\n    __itt_relation_is_parent_of,            /**< \"A is parent of B\" means that A created B */\n    __itt_relation_is_continuation_of,      /**< \"A is continuation of B\" means that A assumes the dependencies of B */\n    __itt_relation_is_child_of,             /**< \"A is child of B\" means that A was created by B (inverse of is_parent_of) */\n    __itt_relation_is_continued_by,         /**< \"A is continued by B\" means that B assumes the dependencies of A (inverse of is_continuation_of) */\n    __itt_relation_is_predecessor_to        /**< \"A is predecessor to B\" means that B cannot start until A completes (inverse of is_dependent_on) */\n} __itt_relation;\n\n/**\n * @ingroup relations\n * @brief Add a relation to the current task instance.\n * The current task instance is the head of the relation.\n * @param[in] domain The domain controlling this call\n * @param[in] relation The kind of relation\n * @param[in] tail The ID for the tail of the relation\n */\nvoid ITTAPI __itt_relation_add_to_current(const __itt_domain *domain, __itt_relation relation, __itt_id tail);\n\n/**\n * @ingroup relations\n * @brief Add a relation between two instance identifiers.\n * @param[in] domain The domain controlling this call\n * @param[in] head The ID for the head of the relation\n * @param[in] relation The kind of relation\n * @param[in] tail The ID for the tail of the relation\n */\nvoid ITTAPI __itt_relation_add(const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail))\nITT_STUBV(ITTAPI, void, relation_add,            (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail))\n#define __itt_relation_add_to_current(d,x,y) ITTNOTIFY_VOID_D2(relation_add_to_current,d,x,y)\n#define __itt_relation_add_to_current_ptr    ITTNOTIFY_NAME(relation_add_to_current)\n#define __itt_relation_add(d,x,y,z)          ITTNOTIFY_VOID_D3(relation_add,d,x,y,z)\n#define __itt_relation_add_ptr               ITTNOTIFY_NAME(relation_add)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_relation_add_to_current(d,x,y)\n#define __itt_relation_add_to_current_ptr 0\n#define __itt_relation_add(d,x,y,z)\n#define __itt_relation_add_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_relation_add_to_current_ptr 0\n#define __itt_relation_add_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} relations group */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_clock_info\n{\n    unsigned long long clock_freq; /*!< Clock domain frequency */\n    unsigned long long clock_base; /*!< Clock domain base timestamp */\n} __itt_clock_info;\n\n#pragma pack(pop)\n/** @endcond */\n\n/** @cond exclude_from_documentation */\ntypedef void (ITTAPI *__itt_get_clock_info_fn)(__itt_clock_info* clock_info, void* data);\n/** @endcond */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_clock_domain\n{\n    __itt_clock_info info;      /*!< Most recent clock domain info */\n    __itt_get_clock_info_fn fn; /*!< Callback function pointer */\n    void* fn_data;              /*!< Input argument for the callback function */\n    int   extra1;               /*!< Reserved. Must be zero */\n    void* extra2;               /*!< Reserved. Must be zero */\n    struct ___itt_clock_domain* next;\n} __itt_clock_domain;\n\n#pragma pack(pop)\n/** @endcond */\n\n/**\n * @ingroup clockdomains\n * @brief Create a clock domain.\n * Certain applications require the capability to trace their application using\n * a clock domain different than the CPU, for instance the instrumentation of events\n * that occur on a GPU.\n * Because the set of domains is expected to be static over the application's execution time,\n * there is no mechanism to destroy a domain.\n * Any domain can be accessed by any thread in the process, regardless of which thread created\n * the domain. This call is thread-safe.\n * @param[in] fn A pointer to a callback function which retrieves alternative CPU timestamps\n * @param[in] fn_data Argument for a callback function; may be NULL\n */\n__itt_clock_domain* ITTAPI __itt_clock_domain_create(__itt_get_clock_info_fn fn, void* fn_data);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data))\n#define __itt_clock_domain_create     ITTNOTIFY_DATA(clock_domain_create)\n#define __itt_clock_domain_create_ptr ITTNOTIFY_NAME(clock_domain_create)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_clock_domain_create(fn,fn_data) (__itt_clock_domain*)0\n#define __itt_clock_domain_create_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_clock_domain_create_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup clockdomains\n * @brief Recalculate clock domains frequences and clock base timestamps.\n */\nvoid ITTAPI __itt_clock_domain_reset(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, clock_domain_reset, (void))\n#define __itt_clock_domain_reset     ITTNOTIFY_VOID(clock_domain_reset)\n#define __itt_clock_domain_reset_ptr ITTNOTIFY_NAME(clock_domain_reset)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_clock_domain_reset()\n#define __itt_clock_domain_reset_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_clock_domain_reset_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup clockdomain\n * @brief Create an instance of identifier. This establishes the beginning of the lifetime of\n * an instance of the given ID in the trace. Once this lifetime starts, the ID can be used to\n * tag named entity instances in calls such as __itt_task_begin, and to specify relationships among\n * identified named entity instances, using the \\ref relations APIs.\n * @param[in] domain The domain controlling the execution of this call.\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] id The ID to create.\n */\nvoid ITTAPI __itt_id_create_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);\n\n/**\n * @ingroup clockdomain\n * @brief Destroy an instance of identifier. This ends the lifetime of the current instance of the\n * given ID value in the trace. Any relationships that are established after this lifetime ends are\n * invalid. This call must be performed before the given ID value can be reused for a different\n * named entity instance.\n * @param[in] domain The domain controlling the execution of this call.\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] id The ID to destroy.\n */\nvoid ITTAPI __itt_id_destroy_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, id_create_ex,  (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))\nITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))\n#define __itt_id_create_ex(d,x,y,z)  ITTNOTIFY_VOID_D3(id_create_ex,d,x,y,z)\n#define __itt_id_create_ex_ptr       ITTNOTIFY_NAME(id_create_ex)\n#define __itt_id_destroy_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_destroy_ex,d,x,y,z)\n#define __itt_id_destroy_ex_ptr      ITTNOTIFY_NAME(id_destroy_ex)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_id_create_ex(domain,clock_domain,timestamp,id)\n#define __itt_id_create_ex_ptr    0\n#define __itt_id_destroy_ex(domain,clock_domain,timestamp,id)\n#define __itt_id_destroy_ex_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_id_create_ex_ptr    0\n#define __itt_id_destroy_ex_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup clockdomain\n * @brief Begin a task instance.\n * @param[in] domain The domain for this task\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] taskid The instance ID for this task instance, or __itt_null\n * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null\n * @param[in] name The name of this task\n */\nvoid ITTAPI __itt_task_begin_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);\n\n/**\n * @ingroup clockdomain\n * @brief Begin a task instance.\n * @param[in] domain The domain for this task\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] taskid The identifier for this task instance, or __itt_null\n * @param[in] parentid The parent of this task, or __itt_null\n * @param[in] fn The pointer to the function you are tracing\n */\nvoid ITTAPI __itt_task_begin_fn_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, void* fn);\n\n/**\n * @ingroup clockdomain\n * @brief End the current task instance.\n * @param[in] domain The domain for this task\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n */\nvoid ITTAPI __itt_task_end_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, task_begin_ex,        (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name))\nITT_STUBV(ITTAPI, void, task_begin_fn_ex,     (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn))\nITT_STUBV(ITTAPI, void, task_end_ex,          (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp))\n#define __itt_task_begin_ex(d,x,y,z,a,b)      ITTNOTIFY_VOID_D5(task_begin_ex,d,x,y,z,a,b)\n#define __itt_task_begin_ex_ptr               ITTNOTIFY_NAME(task_begin_ex)\n#define __itt_task_begin_fn_ex(d,x,y,z,a,b)   ITTNOTIFY_VOID_D5(task_begin_fn_ex,d,x,y,z,a,b)\n#define __itt_task_begin_fn_ex_ptr            ITTNOTIFY_NAME(task_begin_fn_ex)\n#define __itt_task_end_ex(d,x,y)              ITTNOTIFY_VOID_D2(task_end_ex,d,x,y)\n#define __itt_task_end_ex_ptr                 ITTNOTIFY_NAME(task_end_ex)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_task_begin_ex(domain,clock_domain,timestamp,id,parentid,name)\n#define __itt_task_begin_ex_ptr          0\n#define __itt_task_begin_fn_ex(domain,clock_domain,timestamp,id,parentid,fn)\n#define __itt_task_begin_fn_ex_ptr       0\n#define __itt_task_end_ex(domain,clock_domain,timestamp)\n#define __itt_task_end_ex_ptr            0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_task_begin_ex_ptr          0\n#define __itt_task_begin_fn_ex_ptr       0\n#define __itt_task_end_ex_ptr            0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup markers\n * @brief Create a marker instance.\n * @param[in] domain The domain for this marker\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] id The instance ID for this marker, or __itt_null\n * @param[in] name The name for this marker\n * @param[in] scope The scope for this marker\n */\nvoid ITTAPI __itt_marker_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, marker_ex,    (const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope))\n#define __itt_marker_ex(d,x,y,z,a,b)    ITTNOTIFY_VOID_D5(marker_ex,d,x,y,z,a,b)\n#define __itt_marker_ex_ptr             ITTNOTIFY_NAME(marker_ex)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_marker_ex(domain,clock_domain,timestamp,id,name,scope)\n#define __itt_marker_ex_ptr    0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_marker_ex_ptr    0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @ingroup clockdomain\n * @brief Add a relation to the current task instance.\n * The current task instance is the head of the relation.\n * @param[in] domain The domain controlling this call\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] relation The kind of relation\n * @param[in] tail The ID for the tail of the relation\n */\nvoid ITTAPI __itt_relation_add_to_current_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail);\n\n/**\n * @ingroup clockdomain\n * @brief Add a relation between two instance identifiers.\n * @param[in] domain The domain controlling this call\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] head The ID for the head of the relation\n * @param[in] relation The kind of relation\n * @param[in] tail The ID for the tail of the relation\n */\nvoid ITTAPI __itt_relation_add_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail))\nITT_STUBV(ITTAPI, void, relation_add_ex,            (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail))\n#define __itt_relation_add_to_current_ex(d,x,y,z,a) ITTNOTIFY_VOID_D4(relation_add_to_current_ex,d,x,y,z,a)\n#define __itt_relation_add_to_current_ex_ptr        ITTNOTIFY_NAME(relation_add_to_current_ex)\n#define __itt_relation_add_ex(d,x,y,z,a,b)          ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b)\n#define __itt_relation_add_ex_ptr                   ITTNOTIFY_NAME(relation_add_ex)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_relation_add_to_current_ex(domain,clock_domain,timestame,relation,tail)\n#define __itt_relation_add_to_current_ex_ptr 0\n#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail)\n#define __itt_relation_add_ex_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_relation_add_to_current_ex_ptr 0\n#define __itt_relation_add_ex_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @cond exclude_from_documentation */\ntypedef enum ___itt_track_group_type\n{\n    __itt_track_group_type_normal = 0\n} __itt_track_group_type;\n/** @endcond */\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_track_group\n{\n    __itt_string_handle* name;     /*!< Name of the track group */\n    struct ___itt_track* track;    /*!< List of child tracks    */\n    __itt_track_group_type tgtype; /*!< Type of the track group */\n    int   extra1;                  /*!< Reserved. Must be zero  */\n    void* extra2;                  /*!< Reserved. Must be zero  */\n    struct ___itt_track_group* next;\n} __itt_track_group;\n\n#pragma pack(pop)\n/** @endcond */\n\n/**\n * @brief Placeholder for custom track types. Currently, \"normal\" custom track\n * is the only available track type.\n */\ntypedef enum ___itt_track_type\n{\n    __itt_track_type_normal = 0\n#ifdef INTEL_ITTNOTIFY_API_PRIVATE\n    , __itt_track_type_queue\n#endif /* INTEL_ITTNOTIFY_API_PRIVATE */\n} __itt_track_type;\n\n/** @cond exclude_from_documentation */\n#pragma pack(push, 8)\n\ntypedef struct ___itt_track\n{\n    __itt_string_handle* name; /*!< Name of the track group */\n    __itt_track_group* group;  /*!< Parent group to a track */\n    __itt_track_type ttype;    /*!< Type of the track       */\n    int   extra1;              /*!< Reserved. Must be zero  */\n    void* extra2;              /*!< Reserved. Must be zero  */\n    struct ___itt_track* next;\n} __itt_track;\n\n#pragma pack(pop)\n/** @endcond */\n\n/**\n * @brief Create logical track group.\n */\n__itt_track_group* ITTAPI __itt_track_group_create(__itt_string_handle* name, __itt_track_group_type track_group_type);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type))\n#define __itt_track_group_create     ITTNOTIFY_DATA(track_group_create)\n#define __itt_track_group_create_ptr ITTNOTIFY_NAME(track_group_create)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_track_group_create(name)  (__itt_track_group*)0\n#define __itt_track_group_create_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_track_group_create_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Create logical track.\n */\n__itt_track* ITTAPI __itt_track_create(__itt_track_group* track_group, __itt_string_handle* name, __itt_track_type track_type);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type))\n#define __itt_track_create     ITTNOTIFY_DATA(track_create)\n#define __itt_track_create_ptr ITTNOTIFY_NAME(track_create)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_track_create(track_group,name,track_type)  (__itt_track*)0\n#define __itt_track_create_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_track_create_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Set the logical track.\n */\nvoid ITTAPI __itt_set_track(__itt_track* track);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, set_track, (__itt_track *track))\n#define __itt_set_track     ITTNOTIFY_VOID(set_track)\n#define __itt_set_track_ptr ITTNOTIFY_NAME(set_track)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_set_track(track)\n#define __itt_set_track_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_set_track_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/* ========================================================================== */\n/** @cond exclude_from_gpa_documentation */\n/**\n * @defgroup events Events\n * @ingroup public\n * Events group\n * @{\n */\n/** @brief user event type */\ntypedef int __itt_event;\n\n/**\n * @brief Create an event notification\n * @note name or namelen being null/name and namelen not matching, user event feature not enabled\n * @return non-zero event identifier upon success and __itt_err otherwise\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_event LIBITTAPI __itt_event_createA(const char    *name, int namelen);\n__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_event_create     __itt_event_createW\n#  define __itt_event_create_ptr __itt_event_createW_ptr\n#else\n#  define __itt_event_create     __itt_event_createA\n#  define __itt_event_create_ptr __itt_event_createA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen))\nITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char    *name, int namelen))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA     ITTNOTIFY_DATA(event_createA)\n#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)\n#define __itt_event_createW     ITTNOTIFY_DATA(event_createW)\n#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create      ITTNOTIFY_DATA(event_create)\n#define __itt_event_create_ptr  ITTNOTIFY_NAME(event_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA(name, namelen) (__itt_event)0\n#define __itt_event_createA_ptr 0\n#define __itt_event_createW(name, namelen) (__itt_event)0\n#define __itt_event_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create(name, namelen)  (__itt_event)0\n#define __itt_event_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA_ptr 0\n#define __itt_event_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an event occurrence.\n * @return __itt_err upon failure (invalid event id/user event feature not enabled)\n */\nint LIBITTAPI __itt_event_start(__itt_event event);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))\n#define __itt_event_start     ITTNOTIFY_DATA(event_start)\n#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_event_start(event) (int)0\n#define __itt_event_start_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_event_start_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an event end occurrence.\n * @note It is optional if events do not have durations.\n * @return __itt_err upon failure (invalid event id/user event feature not enabled)\n */\nint LIBITTAPI __itt_event_end(__itt_event event);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))\n#define __itt_event_end     ITTNOTIFY_DATA(event_end)\n#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_event_end(event) (int)0\n#define __itt_event_end_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_event_end_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} events group */\n\n\n/**\n * @defgroup arrays Arrays Visualizer\n * @ingroup public\n * Visualize arrays\n * @{\n */\n\n/**\n * @enum __itt_av_data_type\n * @brief Defines types of arrays data (for C/C++ intrinsic types)\n */\ntypedef enum\n{\n    __itt_e_first = 0,\n    __itt_e_char = 0,  /* 1-byte integer */\n    __itt_e_uchar,     /* 1-byte unsigned integer */\n    __itt_e_int16,     /* 2-byte integer */\n    __itt_e_uint16,    /* 2-byte unsigned integer  */\n    __itt_e_int32,     /* 4-byte integer */\n    __itt_e_uint32,    /* 4-byte unsigned integer */\n    __itt_e_int64,     /* 8-byte integer */\n    __itt_e_uint64,    /* 8-byte unsigned integer */\n    __itt_e_float,     /* 4-byte floating */\n    __itt_e_double,    /* 8-byte floating */\n    __itt_e_last = __itt_e_double\n} __itt_av_data_type;\n\n/**\n * @brief Save an array data to a file.\n * Output format is defined by the file extension. The csv and bmp formats are supported (bmp - for 2-dimensional array only).\n * @param[in] data - pointer to the array data\n * @param[in] rank - the rank of the array\n * @param[in] dimensions - pointer to an array of integers, which specifies the array dimensions.\n * The size of dimensions must be equal to the rank\n * @param[in] type - the type of the array, specified as one of the __itt_av_data_type values (for intrinsic types)\n * @param[in] filePath - the file path; the output format is defined by the file extension\n * @param[in] columnOrder - defines how the array is stored in the linear memory.\n * It should be 1 for column-major order (e.g. in FORTRAN) or 0 - for row-major order (e.g. in C).\n */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nint ITTAPI __itt_av_saveA(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder);\nint ITTAPI __itt_av_saveW(void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_av_save     __itt_av_saveW\n#  define __itt_av_save_ptr __itt_av_saveW_ptr\n#else /* UNICODE */\n#  define __itt_av_save     __itt_av_saveA\n#  define __itt_av_save_ptr __itt_av_saveA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nint ITTAPI __itt_av_save(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder))\nITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int, av_save,  (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_av_saveA     ITTNOTIFY_DATA(av_saveA)\n#define __itt_av_saveA_ptr ITTNOTIFY_NAME(av_saveA)\n#define __itt_av_saveW     ITTNOTIFY_DATA(av_saveW)\n#define __itt_av_saveW_ptr ITTNOTIFY_NAME(av_saveW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_av_save     ITTNOTIFY_DATA(av_save)\n#define __itt_av_save_ptr ITTNOTIFY_NAME(av_save)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_av_saveA(name)\n#define __itt_av_saveA_ptr 0\n#define __itt_av_saveW(name)\n#define __itt_av_saveW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_av_save(name)\n#define __itt_av_save_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_av_saveA_ptr 0\n#define __itt_av_saveW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_av_save_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\nvoid ITTAPI __itt_enable_attach(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, enable_attach, (void))\n#define __itt_enable_attach     ITTNOTIFY_VOID(enable_attach)\n#define __itt_enable_attach_ptr ITTNOTIFY_NAME(enable_attach)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_enable_attach()\n#define __itt_enable_attach_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_enable_attach_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @cond exclude_from_gpa_documentation */\n\n/** @} arrays group */\n\n/** @endcond */\n\n\n#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n\n#endif /* _ITTNOTIFY_H_ */\n\n#ifdef INTEL_ITTNOTIFY_API_PRIVATE\n\n#ifndef _ITTNOTIFY_PRIVATE_\n#define _ITTNOTIFY_PRIVATE_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/**\n * @ingroup clockdomain\n * @brief Begin an overlapped task instance.\n * @param[in] domain The domain for this task\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.\n * @param[in] parentid The parent of this task, or __itt_null.\n * @param[in] name The name of this task.\n */\nvoid ITTAPI __itt_task_begin_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);\n\n/**\n * @ingroup clockdomain\n * @brief End an overlapped task instance.\n * @param[in] domain The domain for this task\n * @param[in] clock_domain The clock domain controlling the execution of this call.\n * @param[in] timestamp The user defined timestamp.\n * @param[in] taskid Explicit ID of finished task\n */\nvoid ITTAPI __itt_task_end_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, task_begin_overlapped_ex,       (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name))\nITT_STUBV(ITTAPI, void, task_end_overlapped_ex,         (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid))\n#define __itt_task_begin_overlapped_ex(d,x,y,z,a,b)     ITTNOTIFY_VOID_D5(task_begin_overlapped_ex,d,x,y,z,a,b)\n#define __itt_task_begin_overlapped_ex_ptr              ITTNOTIFY_NAME(task_begin_overlapped_ex)\n#define __itt_task_end_overlapped_ex(d,x,y,z)           ITTNOTIFY_VOID_D3(task_end_overlapped_ex,d,x,y,z)\n#define __itt_task_end_overlapped_ex_ptr                ITTNOTIFY_NAME(task_end_overlapped_ex)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_task_begin_overlapped_ex(domain,clock_domain,timestamp,taskid,parentid,name)\n#define __itt_task_begin_overlapped_ex_ptr      0\n#define __itt_task_end_overlapped_ex(domain,clock_domain,timestamp,taskid)\n#define __itt_task_end_overlapped_ex_ptr        0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_task_begin_overlapped_ex_ptr      0\n#define __itt_task_end_overlapped_ptr           0\n#define __itt_task_end_overlapped_ex_ptr        0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @defgroup makrs_internal Marks\n * @ingroup internal\n * Marks group\n * @warning Internal API:\n *   - It is not shipped to outside of Intel\n *   - It is delivered to internal Intel teams using e-mail or SVN access only\n * @{\n */\n/** @brief user mark type */\ntypedef int __itt_mark_type;\n\n/**\n * @brief Creates a user mark type with the specified name using char or Unicode string.\n * @param[in] name - name of mark to create\n * @return Returns a handle to the mark type\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_mark_type ITTAPI __itt_mark_createA(const char    *name);\n__itt_mark_type ITTAPI __itt_mark_createW(const wchar_t *name);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_mark_create     __itt_mark_createW\n#  define __itt_mark_create_ptr __itt_mark_createW_ptr\n#else /* UNICODE */\n#  define __itt_mark_create     __itt_mark_createA\n#  define __itt_mark_create_ptr __itt_mark_createA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_mark_type ITTAPI __itt_mark_create(const char *name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char    *name))\nITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_mark_type, mark_create,  (const char *name))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_createA     ITTNOTIFY_DATA(mark_createA)\n#define __itt_mark_createA_ptr ITTNOTIFY_NAME(mark_createA)\n#define __itt_mark_createW     ITTNOTIFY_DATA(mark_createW)\n#define __itt_mark_createW_ptr ITTNOTIFY_NAME(mark_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_create      ITTNOTIFY_DATA(mark_create)\n#define __itt_mark_create_ptr  ITTNOTIFY_NAME(mark_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_createA(name) (__itt_mark_type)0\n#define __itt_mark_createA_ptr 0\n#define __itt_mark_createW(name) (__itt_mark_type)0\n#define __itt_mark_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_create(name)  (__itt_mark_type)0\n#define __itt_mark_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_createA_ptr 0\n#define __itt_mark_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Creates a \"discrete\" user mark type of the specified type and an optional parameter using char or Unicode string.\n *\n * - The mark of \"discrete\" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign.\n * - The call is \"synchronous\" - function returns after mark is actually added to results.\n * - This function is useful, for example, to mark different phases of application\n *   (beginning of the next mark automatically meand end of current region).\n * - Can be used together with \"continuous\" marks (see below) at the same collection session\n * @param[in] mt - mark, created by __itt_mark_create(const char* name) function\n * @param[in] parameter - string parameter of mark\n * @return Returns zero value in case of success, non-zero value otherwise.\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nint ITTAPI __itt_markA(__itt_mark_type mt, const char    *parameter);\nint ITTAPI __itt_markW(__itt_mark_type mt, const wchar_t *parameter);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_mark     __itt_markW\n#  define __itt_mark_ptr __itt_markW_ptr\n#else /* UNICODE  */\n#  define __itt_mark     __itt_markA\n#  define __itt_mark_ptr __itt_markA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nint ITTAPI __itt_mark(__itt_mark_type mt, const char *parameter);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char    *parameter))\nITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int, mark,  (__itt_mark_type mt, const char *parameter))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_markA     ITTNOTIFY_DATA(markA)\n#define __itt_markA_ptr ITTNOTIFY_NAME(markA)\n#define __itt_markW     ITTNOTIFY_DATA(markW)\n#define __itt_markW_ptr ITTNOTIFY_NAME(markW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark      ITTNOTIFY_DATA(mark)\n#define __itt_mark_ptr  ITTNOTIFY_NAME(mark)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_markA(mt, parameter) (int)0\n#define __itt_markA_ptr 0\n#define __itt_markW(mt, parameter) (int)0\n#define __itt_markW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark(mt, parameter)  (int)0\n#define __itt_mark_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_markA_ptr 0\n#define __itt_markW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Use this if necessary to create a \"discrete\" user event type (mark) for process\n * rather then for one thread\n * @see int __itt_mark(__itt_mark_type mt, const char* parameter);\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nint ITTAPI __itt_mark_globalA(__itt_mark_type mt, const char    *parameter);\nint ITTAPI __itt_mark_globalW(__itt_mark_type mt, const wchar_t *parameter);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_mark_global     __itt_mark_globalW\n#  define __itt_mark_global_ptr __itt_mark_globalW_ptr\n#else /* UNICODE  */\n#  define __itt_mark_global     __itt_mark_globalA\n#  define __itt_mark_global_ptr __itt_mark_globalA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nint ITTAPI __itt_mark_global(__itt_mark_type mt, const char *parameter);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char    *parameter))\nITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int, mark_global,  (__itt_mark_type mt, const char *parameter))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_globalA     ITTNOTIFY_DATA(mark_globalA)\n#define __itt_mark_globalA_ptr ITTNOTIFY_NAME(mark_globalA)\n#define __itt_mark_globalW     ITTNOTIFY_DATA(mark_globalW)\n#define __itt_mark_globalW_ptr ITTNOTIFY_NAME(mark_globalW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_global      ITTNOTIFY_DATA(mark_global)\n#define __itt_mark_global_ptr  ITTNOTIFY_NAME(mark_global)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_globalA(mt, parameter) (int)0\n#define __itt_mark_globalA_ptr 0\n#define __itt_mark_globalW(mt, parameter) (int)0\n#define __itt_mark_globalW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_global(mt, parameter)  (int)0\n#define __itt_mark_global_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_mark_globalA_ptr 0\n#define __itt_mark_globalW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_mark_global_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Creates an \"end\" point for \"continuous\" mark with specified name.\n *\n * - Returns zero value in case of success, non-zero value otherwise.\n *   Also returns non-zero value when preceding \"begin\" point for the\n *   mark with the same name failed to be created or not created.\n * - The mark of \"continuous\" type is placed to collection results in\n *   case of success. It appears in overtime view(s) as a special tick\n *   sign (different from \"discrete\" mark) together with line from\n *   corresponding \"begin\" mark to \"end\" mark.\n * @note Continuous marks can overlap and be nested inside each other.\n * Discrete mark can be nested inside marked region\n * @param[in] mt - mark, created by __itt_mark_create(const char* name) function\n * @return Returns zero value in case of success, non-zero value otherwise.\n */\nint ITTAPI __itt_mark_off(__itt_mark_type mt);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt))\n#define __itt_mark_off     ITTNOTIFY_DATA(mark_off)\n#define __itt_mark_off_ptr ITTNOTIFY_NAME(mark_off)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_mark_off(mt) (int)0\n#define __itt_mark_off_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_mark_off_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Use this if necessary to create an \"end\" point for mark of process\n * @see int __itt_mark_off(__itt_mark_type mt);\n */\nint ITTAPI __itt_mark_global_off(__itt_mark_type mt);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt))\n#define __itt_mark_global_off     ITTNOTIFY_DATA(mark_global_off)\n#define __itt_mark_global_off_ptr ITTNOTIFY_NAME(mark_global_off)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_mark_global_off(mt) (int)0\n#define __itt_mark_global_off_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_mark_global_off_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} marks group */\n\n/**\n * @defgroup counters_internal Counters\n * @ingroup internal\n * Counters group\n * @{\n */\n/**\n * @brief opaque structure for counter identification\n */\ntypedef struct ___itt_counter *__itt_counter;\n\n/**\n * @brief Create a counter with given name/domain for the calling thread\n *\n * After __itt_counter_create() is called, __itt_counter_inc() / __itt_counter_inc_delta() can be used\n * to increment the counter on any thread\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_counter ITTAPI __itt_counter_createA(const char    *name, const char    *domain);\n__itt_counter ITTAPI __itt_counter_createW(const wchar_t *name, const wchar_t *domain);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_counter_create     __itt_counter_createW\n#  define __itt_counter_create_ptr __itt_counter_createW_ptr\n#else /* UNICODE */\n#  define __itt_counter_create     __itt_counter_createA\n#  define __itt_counter_create_ptr __itt_counter_createA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_counter ITTAPI __itt_counter_create(const char *name, const char *domain);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char    *name, const char    *domain))\nITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_counter, counter_create,  (const char *name, const char *domain))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_counter_createA     ITTNOTIFY_DATA(counter_createA)\n#define __itt_counter_createA_ptr ITTNOTIFY_NAME(counter_createA)\n#define __itt_counter_createW     ITTNOTIFY_DATA(counter_createW)\n#define __itt_counter_createW_ptr ITTNOTIFY_NAME(counter_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_counter_create     ITTNOTIFY_DATA(counter_create)\n#define __itt_counter_create_ptr ITTNOTIFY_NAME(counter_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_counter_createA(name, domain)\n#define __itt_counter_createA_ptr 0\n#define __itt_counter_createW(name, domain)\n#define __itt_counter_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_counter_create(name, domain)\n#define __itt_counter_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_counter_createA_ptr 0\n#define __itt_counter_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_counter_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Destroy the counter identified by the pointer previously returned by __itt_counter_create()\n */\nvoid ITTAPI __itt_counter_destroy(__itt_counter id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id))\n#define __itt_counter_destroy     ITTNOTIFY_VOID(counter_destroy)\n#define __itt_counter_destroy_ptr ITTNOTIFY_NAME(counter_destroy)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_counter_destroy(id)\n#define __itt_counter_destroy_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_counter_destroy_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Increment the counter value\n */\nvoid ITTAPI __itt_counter_inc(__itt_counter id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id))\n#define __itt_counter_inc     ITTNOTIFY_VOID(counter_inc)\n#define __itt_counter_inc_ptr ITTNOTIFY_NAME(counter_inc)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_counter_inc(id)\n#define __itt_counter_inc_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_counter_inc_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Increment the counter value with x\n */\nvoid ITTAPI __itt_counter_inc_delta(__itt_counter id, unsigned long long value);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value))\n#define __itt_counter_inc_delta     ITTNOTIFY_VOID(counter_inc_delta)\n#define __itt_counter_inc_delta_ptr ITTNOTIFY_NAME(counter_inc_delta)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_counter_inc_delta(id, value)\n#define __itt_counter_inc_delta_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_counter_inc_delta_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} counters group */\n\n/**\n * @defgroup stitch Stack Stitching\n * @ingroup internal\n * Stack Stitching group\n * @{\n */\n/**\n * @brief opaque structure for counter identification\n */\ntypedef struct ___itt_caller *__itt_caller;\n\n/**\n * @brief Create the stitch point e.g. a point in call stack where other stacks should be stitched to.\n * The function returns a unique identifier which is used to match the cut points with corresponding stitch points.\n */\n__itt_caller ITTAPI __itt_stack_caller_create(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void))\n#define __itt_stack_caller_create     ITTNOTIFY_DATA(stack_caller_create)\n#define __itt_stack_caller_create_ptr ITTNOTIFY_NAME(stack_caller_create)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_stack_caller_create() (__itt_caller)0\n#define __itt_stack_caller_create_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_stack_caller_create_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Destroy the inforamtion about stitch point identified by the pointer previously returned by __itt_stack_caller_create()\n */\nvoid ITTAPI __itt_stack_caller_destroy(__itt_caller id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id))\n#define __itt_stack_caller_destroy     ITTNOTIFY_VOID(stack_caller_destroy)\n#define __itt_stack_caller_destroy_ptr ITTNOTIFY_NAME(stack_caller_destroy)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_stack_caller_destroy(id)\n#define __itt_stack_caller_destroy_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_stack_caller_destroy_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Sets the cut point. Stack from each event which occurs after this call will be cut\n * at the same stack level the function was called and stitched to the corresponding stitch point.\n */\nvoid ITTAPI __itt_stack_callee_enter(__itt_caller id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id))\n#define __itt_stack_callee_enter     ITTNOTIFY_VOID(stack_callee_enter)\n#define __itt_stack_callee_enter_ptr ITTNOTIFY_NAME(stack_callee_enter)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_stack_callee_enter(id)\n#define __itt_stack_callee_enter_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_stack_callee_enter_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief This function eliminates the cut point which was set by latest __itt_stack_callee_enter().\n */\nvoid ITTAPI __itt_stack_callee_leave(__itt_caller id);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id))\n#define __itt_stack_callee_leave     ITTNOTIFY_VOID(stack_callee_leave)\n#define __itt_stack_callee_leave_ptr ITTNOTIFY_NAME(stack_callee_leave)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_stack_callee_leave(id)\n#define __itt_stack_callee_leave_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_stack_callee_leave_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @} stitch group */\n\n/* ***************************************************************************************************************************** */\n\n#include <stdarg.h>\n\n/** @cond exclude_from_documentation */\ntypedef enum __itt_error_code\n{\n    __itt_error_success       = 0, /*!< no error */\n    __itt_error_no_module     = 1, /*!< module can't be loaded */\n    /* %1$s -- library name; win: %2$d -- system error code; unx: %2$s -- system error message. */\n    __itt_error_no_symbol     = 2, /*!< symbol not found */\n    /* %1$s -- library name, %2$s -- symbol name. */\n    __itt_error_unknown_group = 3, /*!< unknown group specified */\n    /* %1$s -- env var name, %2$s -- group name. */\n    __itt_error_cant_read_env = 4, /*!< GetEnvironmentVariable() failed */\n    /* %1$s -- env var name, %2$d -- system error. */\n    __itt_error_env_too_long  = 5, /*!< variable value too long */\n    /* %1$s -- env var name, %2$d -- actual length of the var, %3$d -- max allowed length. */\n    __itt_error_system        = 6  /*!< pthread_mutexattr_init or pthread_mutex_init failed */\n    /* %1$s -- function name, %2$d -- errno. */\n} __itt_error_code;\n\ntypedef void (__itt_error_handler_t)(__itt_error_code code, va_list);\n__itt_error_handler_t* __itt_set_error_handler(__itt_error_handler_t*);\n\nconst char* ITTAPI __itt_api_version(void);\n/** @endcond */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#define __itt_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler)\nvoid __itt_error_handler(__itt_error_code code, va_list args);\nextern const int ITTNOTIFY_NAME(err);\n#define __itt_err ITTNOTIFY_NAME(err)\nITT_STUB(ITTAPI, const char*, api_version, (void))\n#define __itt_api_version     ITTNOTIFY_DATA(api_version)\n#define __itt_api_version_ptr ITTNOTIFY_NAME(api_version)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_api_version()   (const char*)0\n#define __itt_api_version_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_api_version_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n\n#endif /* _ITTNOTIFY_PRIVATE_ */\n\n#endif /* INTEL_ITTNOTIFY_API_PRIVATE */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/ittnotify_config.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _ITTNOTIFY_CONFIG_H_\n#define _ITTNOTIFY_CONFIG_H_\n\n/** @cond exclude_from_documentation */\n#ifndef ITT_OS_WIN\n#  define ITT_OS_WIN   1\n#endif /* ITT_OS_WIN */\n\n#ifndef ITT_OS_LINUX\n#  define ITT_OS_LINUX 2\n#endif /* ITT_OS_LINUX */\n\n#ifndef ITT_OS_MAC\n#  define ITT_OS_MAC   3\n#endif /* ITT_OS_MAC */\n\n#ifndef ITT_OS_FREEBSD\n#  define ITT_OS_FREEBSD   4\n#endif /* ITT_OS_FREEBSD */\n\n#ifndef ITT_OS\n#  if defined WIN32 || defined _WIN32\n#    define ITT_OS ITT_OS_WIN\n#  elif defined( __APPLE__ ) && defined( __MACH__ )\n#    define ITT_OS ITT_OS_MAC\n#  elif defined( __FreeBSD__ )\n#    define ITT_OS ITT_OS_FREEBSD\n#  else\n#    define ITT_OS ITT_OS_LINUX\n#  endif\n#endif /* ITT_OS */\n\n#ifndef ITT_PLATFORM_WIN\n#  define ITT_PLATFORM_WIN 1\n#endif /* ITT_PLATFORM_WIN */\n\n#ifndef ITT_PLATFORM_POSIX\n#  define ITT_PLATFORM_POSIX 2\n#endif /* ITT_PLATFORM_POSIX */\n\n#ifndef ITT_PLATFORM_MAC\n#  define ITT_PLATFORM_MAC 3\n#endif /* ITT_PLATFORM_MAC */\n\n#ifndef ITT_PLATFORM_FREEBSD\n#  define ITT_PLATFORM_FREEBSD 4\n#endif /* ITT_PLATFORM_FREEBSD */\n\n#ifndef ITT_PLATFORM\n#  if ITT_OS==ITT_OS_WIN\n#    define ITT_PLATFORM ITT_PLATFORM_WIN\n#  elif ITT_OS==ITT_OS_MAC\n#    define ITT_PLATFORM ITT_PLATFORM_MAC\n#  elif ITT_OS==ITT_OS_FREEBSD\n#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD\n#  else\n#    define ITT_PLATFORM ITT_PLATFORM_POSIX\n#  endif\n#endif /* ITT_PLATFORM */\n\n#if defined(_UNICODE) && !defined(UNICODE)\n#define UNICODE\n#endif\n\n#include <stddef.h>\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#include <tchar.h>\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#include <stdint.h>\n#if defined(UNICODE) || defined(_UNICODE)\n#include <wchar.h>\n#endif /* UNICODE || _UNICODE */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#ifndef CDECL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define CDECL __cdecl\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__\n#      define CDECL __attribute__ ((cdecl))\n#    else  /* _M_IX86 || __i386__ */\n#      define CDECL /* actual only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* CDECL */\n\n#ifndef STDCALL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define STDCALL __stdcall\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__\n#      define STDCALL __attribute__ ((stdcall))\n#    else  /* _M_IX86 || __i386__ */\n#      define STDCALL /* supported only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* STDCALL */\n\n#define ITTAPI    CDECL\n#define LIBITTAPI CDECL\n\n/* TODO: Temporary for compatibility! */\n#define ITTAPI_CALL    CDECL\n#define LIBITTAPI_CALL CDECL\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n/* use __forceinline (VC++ specific) */\n#define ITT_INLINE           __forceinline\n#define ITT_INLINE_ATTRIBUTE /* nothing */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/*\n * Generally, functions are not inlined unless optimization is specified.\n * For functions declared inline, this attribute inlines the function even\n * if no optimization level was specified.\n */\n#ifdef __STRICT_ANSI__\n#define ITT_INLINE           static\n#define ITT_INLINE_ATTRIBUTE __attribute__((unused))\n#else  /* __STRICT_ANSI__ */\n#define ITT_INLINE           static inline\n#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))\n#endif /* __STRICT_ANSI__ */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/** @endcond */\n\n#ifndef ITT_ARCH_IA32\n#  define ITT_ARCH_IA32  1\n#endif /* ITT_ARCH_IA32 */\n\n#ifndef ITT_ARCH_IA32E\n#  define ITT_ARCH_IA32E 2\n#endif /* ITT_ARCH_IA32E */\n\n#ifndef ITT_ARCH_ARM\n#  define ITT_ARCH_ARM  4\n#endif /* ITT_ARCH_ARM */\n\n#ifndef ITT_ARCH_PPC64\n#  define ITT_ARCH_PPC64  5\n#endif /* ITT_ARCH_PPC64 */\n\n#ifndef ITT_ARCH\n#  if defined _M_IX86 || defined __i386__\n#    define ITT_ARCH ITT_ARCH_IA32\n#  elif defined _M_X64 || defined _M_AMD64 || defined __x86_64__\n#    define ITT_ARCH ITT_ARCH_IA32E\n#  elif defined _M_IA64 || defined __ia64__\n#    define ITT_ARCH ITT_ARCH_IA64\n#  elif defined _M_ARM || __arm__\n#    define ITT_ARCH ITT_ARCH_ARM\n#  elif defined __powerpc64__\n#    define ITT_ARCH ITT_ARCH_PPC64\n#  endif\n#endif\n\n#ifdef __cplusplus\n#  define ITT_EXTERN_C extern \"C\"\n#  define ITT_EXTERN_C_BEGIN extern \"C\" {\n#  define ITT_EXTERN_C_END }\n#else\n#  define ITT_EXTERN_C /* nothing */\n#  define ITT_EXTERN_C_BEGIN /* nothing */\n#  define ITT_EXTERN_C_END /* nothing */\n#endif /* __cplusplus */\n\n#define ITT_TO_STR_AUX(x) #x\n#define ITT_TO_STR(x)     ITT_TO_STR_AUX(x)\n\n#define __ITT_BUILD_ASSERT(expr, suffix) do { \\\n    static char __itt_build_check_##suffix[(expr) ? 1 : -1]; \\\n    __itt_build_check_##suffix[0] = 0; \\\n} while(0)\n#define _ITT_BUILD_ASSERT(expr, suffix)  __ITT_BUILD_ASSERT((expr), suffix)\n#define ITT_BUILD_ASSERT(expr)           _ITT_BUILD_ASSERT((expr), __LINE__)\n\n#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }\n\n/* Replace with snapshot date YYYYMMDD for promotion build. */\n#define API_VERSION_BUILD    20111111\n\n#ifndef API_VERSION_NUM\n#define API_VERSION_NUM 0.0.0\n#endif /* API_VERSION_NUM */\n\n#define API_VERSION \"ITT-API-Version \" ITT_TO_STR(API_VERSION_NUM) \\\n                                \" (\" ITT_TO_STR(API_VERSION_BUILD) \")\"\n\n/* OS communication functions */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#include <windows.h>\ntypedef HMODULE           lib_t;\ntypedef DWORD             TIDT;\ntypedef CRITICAL_SECTION  mutex_t;\n#define MUTEX_INITIALIZER { 0 }\n#define strong_alias(name, aliasname) /* empty for Windows */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#include <dlfcn.h>\n#if defined(UNICODE) || defined(_UNICODE)\n#include <wchar.h>\n#endif /* UNICODE */\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */\n#endif /* _GNU_SOURCE */\n#ifndef __USE_UNIX98\n#define __USE_UNIX98 1 /* need for PTHREAD_MUTEX_RECURSIVE, on SLES11.1 with gcc 4.3.4 wherein pthread.h missing dependency on __USE_XOPEN2K8 */\n#endif /*__USE_UNIX98*/\n#include <pthread.h>\ntypedef void*             lib_t;\ntypedef pthread_t         TIDT;\ntypedef pthread_mutex_t   mutex_t;\n#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER\n#define _strong_alias(name, aliasname) \\\n            extern __typeof (name) aliasname __attribute__ ((alias (#name)));\n#define strong_alias(name, aliasname) _strong_alias(name, aliasname)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_get_proc(lib, name) GetProcAddress(lib, name)\n#define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)\n#define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)\n#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)\n#define __itt_load_lib(name)      LoadLibraryA(name)\n#define __itt_unload_lib(handle)  FreeLibrary(handle)\n#define __itt_system_error()      (int)GetLastError()\n#define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)\n#define __itt_fstrnlen(s, l)      strnlen_s(s, l)\n#define __itt_fstrcpyn(s1, b, s2, l) strncpy_s(s1, b, s2, l)\n#define __itt_fstrdup(s)          _strdup(s)\n#define __itt_thread_id()         GetCurrentThreadId()\n#define __itt_thread_yield()      SwitchToThread()\n#ifndef ITT_SIMPLE_INIT\nITT_INLINE long\n__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;\nITT_INLINE long __itt_interlocked_increment(volatile long* ptr)\n{\n    return InterlockedIncrement(ptr);\n}\n#endif /* ITT_SIMPLE_INIT */\n#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\n#define __itt_get_proc(lib, name) dlsym(lib, name)\n#define __itt_mutex_init(mutex)   {\\\n    pthread_mutexattr_t mutex_attr;                                         \\\n    int error_code = pthread_mutexattr_init(&mutex_attr);                   \\\n    if (error_code)                                                         \\\n        __itt_report_error(__itt_error_system, \"pthread_mutexattr_init\",    \\\n                           error_code);                                     \\\n    error_code = pthread_mutexattr_settype(&mutex_attr,                     \\\n                                           PTHREAD_MUTEX_RECURSIVE);        \\\n    if (error_code)                                                         \\\n        __itt_report_error(__itt_error_system, \"pthread_mutexattr_settype\", \\\n                           error_code);                                     \\\n    error_code = pthread_mutex_init(mutex, &mutex_attr);                    \\\n    if (error_code)                                                         \\\n        __itt_report_error(__itt_error_system, \"pthread_mutex_init\",        \\\n                           error_code);                                     \\\n    error_code = pthread_mutexattr_destroy(&mutex_attr);                    \\\n    if (error_code)                                                         \\\n        __itt_report_error(__itt_error_system, \"pthread_mutexattr_destroy\", \\\n                           error_code);                                     \\\n}\n#define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)\n#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)\n#define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)\n#define __itt_unload_lib(handle)  dlclose(handle)\n#define __itt_system_error()      errno\n#define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)\n\n/* makes customer code define safe APIs for SDL_STRNLEN_S and SDL_STRNCPY_S */\n#ifdef SDL_STRNLEN_S\n#define __itt_fstrnlen(s, l)      SDL_STRNLEN_S(s, l)\n#else\n#define __itt_fstrnlen(s, l)      strlen(s)\n#endif /* SDL_STRNLEN_S */\n#ifdef SDL_STRNCPY_S\n#define __itt_fstrcpyn(s1, b, s2, l) SDL_STRNCPY_S(s1, b, s2, l)\n#else\n#define __itt_fstrcpyn(s1, b, s2, l) strncpy(s1, s2, l)\n#endif /* SDL_STRNCPY_S */\n\n#define __itt_fstrdup(s)          strdup(s)\n#define __itt_thread_id()         pthread_self()\n#define __itt_thread_yield()      sched_yield()\n#if ITT_ARCH==ITT_ARCH_IA64\n#ifdef __INTEL_COMPILER\n#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)\n#else  /* __INTEL_COMPILER */\n/* TODO: Add Support for not Intel compilers for IA-64 architecture */\n#endif /* __INTEL_COMPILER */\n#elif ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_IA32E /* ITT_ARCH!=ITT_ARCH_IA64 */\nITT_INLINE long\n__TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;\nITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)\n{\n    long result;\n    __asm__ __volatile__(\"lock\\nxadd %0,%1\"\n                          : \"=r\"(result),\"=m\"(*(int*)ptr)\n                          : \"0\"(addend), \"m\"(*(int*)ptr)\n                          : \"memory\");\n    return result;\n}\n#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64\n#define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)\n#endif /* ITT_ARCH==ITT_ARCH_IA64 */\n#ifndef ITT_SIMPLE_INIT\nITT_INLINE long\n__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;\nITT_INLINE long __itt_interlocked_increment(volatile long* ptr)\n{\n    return __TBB_machine_fetchadd4(ptr, 1) + 1L;\n}\n#endif /* ITT_SIMPLE_INIT */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\ntypedef enum {\n    __itt_collection_normal = 0,\n    __itt_collection_paused = 1\n} __itt_collection_state;\n\ntypedef enum {\n    __itt_thread_normal  = 0,\n    __itt_thread_ignored = 1\n} __itt_thread_state;\n\n#pragma pack(push, 8)\n\ntypedef struct ___itt_thread_info\n{\n    const char* nameA; /*!< Copy of original name in ASCII. */\n#if defined(UNICODE) || defined(_UNICODE)\n    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */\n#else  /* UNICODE || _UNICODE */\n    void* nameW;\n#endif /* UNICODE || _UNICODE */\n    TIDT               tid;\n    __itt_thread_state state;   /*!< Thread state (paused or normal) */\n    int                extra1;  /*!< Reserved to the runtime */\n    void*              extra2;  /*!< Reserved to the runtime */\n    struct ___itt_thread_info* next;\n} __itt_thread_info;\n\n#include \"ittnotify_types.h\" /* For __itt_group_id definition */\n\ntypedef struct ___itt_api_info_20101001\n{\n    const char*    name;\n    void**         func_ptr;\n    void*          init_func;\n    __itt_group_id group;\n}  __itt_api_info_20101001;\n\ntypedef struct ___itt_api_info\n{\n    const char*    name;\n    void**         func_ptr;\n    void*          init_func;\n    void*          null_func;\n    __itt_group_id group;\n}  __itt_api_info;\n\nstruct ___itt_domain;\nstruct ___itt_string_handle;\n\ntypedef struct ___itt_global\n{\n    unsigned char          magic[8];\n    unsigned long          version_major;\n    unsigned long          version_minor;\n    unsigned long          version_build;\n    volatile long          api_initialized;\n    volatile long          mutex_initialized;\n    volatile long          atomic_counter;\n    mutex_t                mutex;\n    lib_t                  lib;\n    void*                  error_handler;\n    const char**           dll_path_ptr;\n    __itt_api_info*        api_list_ptr;\n    struct ___itt_global*  next;\n    /* Joinable structures below */\n    __itt_thread_info*     thread_list;\n    struct ___itt_domain*  domain_list;\n    struct ___itt_string_handle* string_list;\n    __itt_collection_state state;\n} __itt_global;\n\n#pragma pack(pop)\n\n#define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \\\n    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \\\n    if (h != NULL) { \\\n        h->tid    = t; \\\n        h->nameA  = NULL; \\\n        h->nameW  = n ? _wcsdup(n) : NULL; \\\n        h->state  = s; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->thread_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \\\n    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \\\n    if (h != NULL) { \\\n        h->tid    = t; \\\n        h->nameA  = n ? __itt_fstrdup(n) : NULL; \\\n        h->nameW  = NULL; \\\n        h->state  = s; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->thread_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#define NEW_DOMAIN_W(gptr,h,h_tail,name) { \\\n    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \\\n    if (h != NULL) { \\\n        h->flags  = 1;    /* domain is enabled by default */ \\\n        h->nameA  = NULL; \\\n        h->nameW  = name ? _wcsdup(name) : NULL; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->domain_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#define NEW_DOMAIN_A(gptr,h,h_tail,name) { \\\n    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \\\n    if (h != NULL) { \\\n        h->flags  = 1;    /* domain is enabled by default */ \\\n        h->nameA  = name ? __itt_fstrdup(name) : NULL; \\\n        h->nameW  = NULL; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->domain_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \\\n    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \\\n    if (h != NULL) { \\\n        h->strA   = NULL; \\\n        h->strW   = name ? _wcsdup(name) : NULL; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->string_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \\\n    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \\\n    if (h != NULL) { \\\n        h->strA   = name ? __itt_fstrdup(name) : NULL; \\\n        h->strW   = NULL; \\\n        h->extra1 = 0;    /* reserved */ \\\n        h->extra2 = NULL; /* reserved */ \\\n        h->next   = NULL; \\\n        if (h_tail == NULL) \\\n            (gptr)->string_list = h; \\\n        else \\\n            h_tail->next = h; \\\n    } \\\n}\n\n#endif /* _ITTNOTIFY_CONFIG_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/ittnotify_static.c",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"ittnotify_config.h\"\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define PATH_MAX 512\n#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\n#include <limits.h>\n#include <dlfcn.h>\n#include <errno.h>\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n\n#define INTEL_NO_MACRO_BODY \n#define INTEL_ITTNOTIFY_API_PRIVATE\n#include \"ittnotify.h\"\n#include \"legacy/ittnotify.h\"\n\n#include \"disable_warnings.h\"\n\nstatic const char api_version[] = API_VERSION \"\\0\\n@(#) $Revision: 413915 $\\n\";\n\n#define _N_(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)\n\n#if ITT_OS==ITT_OS_WIN\nstatic const char* ittnotify_lib_name = \"libittnotify.dll\";\n#elif ITT_OS==ITT_OS_LINUX || ITT_OS==ITT_OS_FREEBSD\nstatic const char* ittnotify_lib_name = \"libittnotify.so\";\n#elif ITT_OS==ITT_OS_MAC\nstatic const char* ittnotify_lib_name = \"libittnotify.dylib\";\n#else\n#error Unsupported or unknown OS.\n#endif\n\n#ifdef __ANDROID__\n#include <android/log.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n#include <linux/limits.h>\n\n#ifdef ITT_ANDROID_LOG\n    #define ITT_ANDROID_LOG_TAG   \"INTEL_VTUNE_USERAPI\"\n    #define ITT_ANDROID_LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, ITT_ANDROID_LOG_TAG, __VA_ARGS__))\n    #define ITT_ANDROID_LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, ITT_ANDROID_LOG_TAG, __VA_ARGS__))\n    #define ITT_ANDROID_LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR,ITT_ANDROID_LOG_TAG, __VA_ARGS__))\n    #define ITT_ANDROID_LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG,ITT_ANDROID_LOG_TAG, __VA_ARGS__))\n#else\n    #define ITT_ANDROID_LOGI(...)\n    #define ITT_ANDROID_LOGW(...)\n    #define ITT_ANDROID_LOGE(...)\n    #define ITT_ANDROID_LOGD(...)\n#endif\n\n/* default location of userapi collector on Android */\n#define ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(x)  \"/data/data/com.intel.vtune/perfrun/lib\" \\\n                                                #x \"/runtime/libittnotify.so\"\n\n#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM\n#define ANDROID_ITTNOTIFY_DEFAULT_PATH  ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(32)\n#else\n#define ANDROID_ITTNOTIFY_DEFAULT_PATH  ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(64)\n#endif\n\n#endif\n\n\n#ifndef LIB_VAR_NAME\n#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM\n#define LIB_VAR_NAME INTEL_LIBITTNOTIFY32\n#else\n#define LIB_VAR_NAME INTEL_LIBITTNOTIFY64\n#endif\n#endif /* LIB_VAR_NAME */\n\n#define ITT_MUTEX_INIT_AND_LOCK(p) {                                 \\\n        if (!p.mutex_initialized)                                    \\\n        {                                                            \\\n            if (__itt_interlocked_increment(&p.atomic_counter) == 1) \\\n            {                                                        \\\n                __itt_mutex_init(&p.mutex);                          \\\n                p.mutex_initialized = 1;                             \\\n            }                                                        \\\n            else                                                     \\\n                while (!p.mutex_initialized)                         \\\n                    __itt_thread_yield();                            \\\n        }                                                            \\\n        __itt_mutex_lock(&p.mutex);                                  \\\n}\n\nconst int _N_(err) = 0;\n\ntypedef int (__itt_init_ittlib_t)(const char*, __itt_group_id);\n\n/* this define used to control initialization function name. */\n#ifndef __itt_init_ittlib_name\nITT_EXTERN_C int _N_(init_ittlib)(const char*, __itt_group_id);\nstatic __itt_init_ittlib_t* __itt_init_ittlib_ptr = _N_(init_ittlib);\n#define __itt_init_ittlib_name __itt_init_ittlib_ptr\n#endif /* __itt_init_ittlib_name */\n\ntypedef void (__itt_fini_ittlib_t)(void);\n\n/* this define used to control finalization function name. */\n#ifndef __itt_fini_ittlib_name\nITT_EXTERN_C void _N_(fini_ittlib)(void);\nstatic __itt_fini_ittlib_t* __itt_fini_ittlib_ptr = _N_(fini_ittlib);\n#define __itt_fini_ittlib_name __itt_fini_ittlib_ptr\n#endif /* __itt_fini_ittlib_name */\n\n/* building pointers to imported funcs */\n#undef ITT_STUBV\n#undef ITT_STUB\n#define ITT_STUB(api,type,name,args,params,ptr,group,format)   \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\\\ntypedef type api ITT_JOIN(_N_(name),_t) args;                  \\\nITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \\\n{                                                              \\\n    __itt_init_ittlib_name(NULL, __itt_group_all);             \\\n    if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \\\n        return ITTNOTIFY_NAME(name) params;                    \\\n    else                                                       \\\n        return (type)0;                                        \\\n}\n\n#define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\\\ntypedef type api ITT_JOIN(_N_(name),_t) args;                  \\\nITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \\\n{                                                              \\\n    __itt_init_ittlib_name(NULL, __itt_group_all);             \\\n    if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \\\n        ITTNOTIFY_NAME(name) params;                           \\\n    else                                                       \\\n        return;                                                \\\n}\n\n#undef __ITT_INTERNAL_INIT\n#include \"ittnotify_static.h\"\n\n#undef ITT_STUB\n#undef ITT_STUBV\n#define ITT_STUB(api,type,name,args,params,ptr,group,format)   \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\\\ntypedef type api ITT_JOIN(_N_(name),_t) args;                  \\\nITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END\n\n#define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \\\nstatic type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\\\ntypedef type api ITT_JOIN(_N_(name),_t) args;                  \\\nITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END\n\n#define __ITT_INTERNAL_INIT\n#include \"ittnotify_static.h\"\n#undef __ITT_INTERNAL_INIT\n\nITT_GROUP_LIST(group_list);\n\n#pragma pack(push, 8)\n\ntypedef struct ___itt_group_alias\n{\n    const char*    env_var;\n    __itt_group_id groups;\n} __itt_group_alias;\n\nstatic __itt_group_alias group_alias[] = {\n    { \"KMP_FOR_TPROFILE\", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync  | __itt_group_mark) },\n    { \"KMP_FOR_TCHECK\",   (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync  | __itt_group_fsync | __itt_group_mark | __itt_group_suppress) },\n    { NULL,               (__itt_group_none) },\n    { api_version,        (__itt_group_none) } /* !!! Just to avoid unused code elimination !!! */\n};\n\n#pragma pack(pop)\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(push)\n#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nstatic __itt_api_info api_list[] = {\n/* Define functions with static implementation */\n#undef ITT_STUB\n#undef ITT_STUBV\n#define ITT_STUB(api,type,name,args,params,nameindll,group,format) { ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (__itt_group_id)(group)},\n#define ITT_STUBV ITT_STUB\n#define __ITT_INTERNAL_INIT\n#include \"ittnotify_static.h\"\n#undef __ITT_INTERNAL_INIT\n/* Define functions without static implementation */\n#undef ITT_STUB\n#undef ITT_STUBV\n#define ITT_STUB(api,type,name,args,params,nameindll,group,format) {ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), NULL, (__itt_group_id)(group)},\n#define ITT_STUBV ITT_STUB\n#include \"ittnotify_static.h\"\n    {NULL, NULL, NULL, NULL, __itt_group_none}\n};\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(pop)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nstatic const char dll_path[PATH_MAX] = { 0 };\n\n/* static part descriptor which handles. all notification api attributes. */\n__itt_global _N_(_ittapi_global) = {\n    ITT_MAGIC,                                     /* identification info */\n    ITT_MAJOR, ITT_MINOR, API_VERSION_BUILD,       /* version info */\n    0,                                             /* api_initialized */\n    0,                                             /* mutex_initialized */\n    0,                                             /* atomic_counter */\n    MUTEX_INITIALIZER,                             /* mutex */\n    NULL,                                          /* dynamic library handle */\n    NULL,                                          /* error_handler */\n    (const char**)&dll_path,                       /* dll_path_ptr */\n    (__itt_api_info*)&api_list,                    /* api_list_ptr */\n    NULL,                                          /* next __itt_global */\n    NULL,                                          /* thread_list */\n    NULL,                                          /* domain_list */\n    NULL,                                          /* string_list */\n    __itt_collection_normal                        /* collection state */\n};\n\ntypedef void (__itt_api_init_t)(__itt_global*, __itt_group_id);\ntypedef void (__itt_api_fini_t)(__itt_global*);\n\n/* ========================================================================= */\n\n#ifdef ITT_NOTIFY_EXT_REPORT\nITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args);\n#endif /* ITT_NOTIFY_EXT_REPORT */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(push)\n#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nstatic void __itt_report_error_impl(int code, ...) {\n    va_list args;\n    va_start(args, code);\n    if (_N_(_ittapi_global).error_handler != NULL)\n    {\n        __itt_error_handler_t* handler = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler;\n        handler((__itt_error_code)code, args);\n    }\n#ifdef ITT_NOTIFY_EXT_REPORT\n    _N_(error_handler)(code, args);\n#endif /* ITT_NOTIFY_EXT_REPORT */\n    va_end(args);\n}\n\n//va_start cannot take enum (__itt_error_code) on clang, so it is necessary to transform it to int\n#define __itt_report_error(code, ...) \\\n                __itt_report_error_impl((int)code,__VA_ARGS__)\n\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(pop)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nstatic __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))(const wchar_t* name)\n{\n    __itt_domain *h_tail = NULL, *h = NULL;\n\n    if (name == NULL)\n    {\n        return NULL;\n    }\n\n    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));\n    if (_N_(_ittapi_global).api_initialized)\n    {\n        if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(domain_createW)(name);\n        }\n    }\n    for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)\n    {\n        if (h->nameW != NULL && !wcscmp(h->nameW, name)) break;\n    }\n    if (h == NULL)\n    {\n        NEW_DOMAIN_W(&_N_(_ittapi_global),h,h_tail,name);\n    }\n    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n    return h;\n}\n\nstatic __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))(const char* name)\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nstatic __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(const char* name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n{\n    __itt_domain *h_tail = NULL, *h = NULL;\n\n    if (name == NULL)\n    {\n        return NULL;\n    }\n\n    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));\n    if (_N_(_ittapi_global).api_initialized)\n    {\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n        if (ITTNOTIFY_NAME(domain_createA) && ITTNOTIFY_NAME(domain_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(domain_createA)(name);\n        }\n#else\n        if (ITTNOTIFY_NAME(domain_create) && ITTNOTIFY_NAME(domain_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(domain_create)(name);\n        }\n#endif\n    }\n    for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next)\n    {\n        if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name)) break;\n    }\n    if (h == NULL)\n    {\n        NEW_DOMAIN_A(&_N_(_ittapi_global),h,h_tail,name);\n    }\n    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n    return h;\n}\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nstatic __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))(const wchar_t* name)\n{\n    __itt_string_handle *h_tail = NULL, *h = NULL;\n\n    if (name == NULL)\n    {\n        return NULL;\n    }\n\n    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));\n    if (_N_(_ittapi_global).api_initialized)\n    {\n        if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(string_handle_createW)(name);\n        }\n    }\n    for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)\n    {\n        if (h->strW != NULL && !wcscmp(h->strW, name)) break;\n    }\n    if (h == NULL) \n    {\n        NEW_STRING_HANDLE_W(&_N_(_ittapi_global),h,h_tail,name);\n    }\n    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n    return h;\n}\n\nstatic __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init))(const char* name)\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nstatic __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))(const char* name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n{\n    __itt_string_handle *h_tail = NULL, *h = NULL;\n\n    if (name == NULL)\n    {\n        return NULL;\n    }\n\n    ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));\n    if (_N_(_ittapi_global).api_initialized)\n    {\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n        if (ITTNOTIFY_NAME(string_handle_createA) && ITTNOTIFY_NAME(string_handle_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(string_handle_createA)(name);\n        }\n#else\n        if (ITTNOTIFY_NAME(string_handle_create) && ITTNOTIFY_NAME(string_handle_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init)))\n        {\n            __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n            return ITTNOTIFY_NAME(string_handle_create)(name);\n        }\n#endif\n    }\n    for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next)\n    {\n        if (h->strA != NULL && !__itt_fstrcmp(h->strA, name)) break;\n    }\n    if (h == NULL)\n    {\n        NEW_STRING_HANDLE_A(&_N_(_ittapi_global),h,h_tail,name);\n    }\n    __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n    return h;\n}\n\n/* -------------------------------------------------------------------------- */\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))(void)\n{\n    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)\n    {\n        __itt_init_ittlib_name(NULL, __itt_group_all);\n    }\n    if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init)))\n    {\n        ITTNOTIFY_NAME(pause)();\n    }\n    else\n    {\n        _N_(_ittapi_global).state = __itt_collection_paused;\n    }\n}\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))(void)\n{\n    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)\n    {\n        __itt_init_ittlib_name(NULL, __itt_group_all);\n    }\n    if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init)))\n    {\n        ITTNOTIFY_NAME(resume)();\n    }\n    else\n    {\n        _N_(_ittapi_global).state = __itt_collection_normal;\n    }\n}\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(const wchar_t* name)\n{\n    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)\n    {\n        __itt_init_ittlib_name(NULL, __itt_group_all);\n    }\n    if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init)))\n    {\n        ITTNOTIFY_NAME(thread_set_nameW)(name);\n    }\n}\n\nstatic int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setW),_init))(const wchar_t* name, int namelen)\n{\n    (void)namelen;\n    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(name);\n    return 0;\n}\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(const char* name)\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(const char* name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n{\n    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)\n    {\n        __itt_init_ittlib_name(NULL, __itt_group_all);\n    }\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n    if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init)))\n    {\n        ITTNOTIFY_NAME(thread_set_nameA)(name);\n    }\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n    if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init)))\n    {\n        ITTNOTIFY_NAME(thread_set_name)(name);\n    }\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n}\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nstatic int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setA),_init))(const char* name, int namelen)\n{\n    (void)namelen;\n    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(name);\n    return 0;\n}\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nstatic int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char* name, int namelen)\n{\n    (void)namelen;\n    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(name);\n    return 0;\n}\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(void)\n{\n    if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL)\n    {\n        __itt_init_ittlib_name(NULL, __itt_group_all);\n    }\n    if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init)))\n    {\n        ITTNOTIFY_NAME(thread_ignore)();\n    }\n}\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_ignore),_init))(void)\n{\n    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))();\n}\n\nstatic void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(enable_attach),_init))(void)\n{\n#ifdef __ANDROID__\n    /*\n     * if LIB_VAR_NAME env variable were set before then stay previous value\n     * else set default path\n    */\n    setenv(ITT_TO_STR(LIB_VAR_NAME), ANDROID_ITTNOTIFY_DEFAULT_PATH, 0);\n#endif\n}\n\n/* -------------------------------------------------------------------------- */\n\nstatic const char* __itt_fsplit(const char* s, const char* sep, const char** out, int* len)\n{\n    int i;\n    int j;\n\n    if (!s || !sep || !out || !len)\n        return NULL;\n\n    for (i = 0; s[i]; i++)\n    {\n        int b = 0;\n        for (j = 0; sep[j]; j++)\n            if (s[i] == sep[j])\n            {\n                b = 1;\n                break;\n            }\n        if (!b)\n            break;\n    }\n\n    if (!s[i])\n        return NULL;\n\n    *len = 0;\n    *out = &s[i];\n\n    for (; s[i]; i++, (*len)++)\n    {\n        int b = 0;\n        for (j = 0; sep[j]; j++)\n            if (s[i] == sep[j])\n            {\n                b = 1;\n                break;\n            }\n        if (b)\n            break;\n    }\n\n    for (; s[i]; i++)\n    {\n        int b = 0;\n        for (j = 0; sep[j]; j++)\n            if (s[i] == sep[j])\n            {\n                b = 1;\n                break;\n            }\n        if (!b)\n            break;\n    }\n\n    return &s[i];\n}\n\n/* This function return value of env variable that placed into static buffer.\n * !!! The same static buffer is used for subsequent calls. !!!\n * This was done to aviod dynamic allocation for few calls.\n * Actually we need this function only four times.\n */\nstatic const char* __itt_get_env_var(const char* name)\n{\n#define MAX_ENV_VALUE_SIZE 4086\n    static char  env_buff[MAX_ENV_VALUE_SIZE];\n    static char* env_value = (char*)env_buff;\n\n    if (name != NULL)\n    {\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n        size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);\n        DWORD rc = GetEnvironmentVariableA(name, env_value, (DWORD)max_len);\n        if (rc >= max_len)\n            __itt_report_error(__itt_error_env_too_long, name, (size_t)rc - 1, (size_t)(max_len - 1));\n        else if (rc > 0)\n        {\n            const char* ret = (const char*)env_value;\n            env_value += rc + 1;\n            return ret;\n        }\n        else\n        {\n            /* If environment variable is empty, GetEnvirornmentVariables()\n             * returns zero (number of characters (not including terminating null),\n             * and GetLastError() returns ERROR_SUCCESS. */\n            DWORD err = GetLastError();\n            if (err == ERROR_SUCCESS)\n                return env_value;\n\n            if (err != ERROR_ENVVAR_NOT_FOUND)\n                __itt_report_error(__itt_error_cant_read_env, name, (int)err);\n        }\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\n        char* env = getenv(name);\n        if (env != NULL)\n        {\n            size_t len = __itt_fstrnlen(env, MAX_ENV_VALUE_SIZE);\n            size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);\n            if (len < max_len)\n            {\n                const char* ret = (const char*)env_value;\n                __itt_fstrcpyn(env_value, max_len, env, len + 1);\n                env_value += len + 1;\n                return ret;\n            } else\n                __itt_report_error(__itt_error_env_too_long, name, (size_t)len, (size_t)(max_len - 1));\n        }\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n    }\n    return NULL;\n}\n\nstatic const char* __itt_get_lib_name(void)\n{\n    const char* lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));\n\n#ifdef __ANDROID__\n    if (lib_name == NULL)\n    {\n\n#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM\n        const char* const marker_filename = \"com.intel.itt.collector_lib_32\";\n#else\n        const char* const marker_filename = \"com.intel.itt.collector_lib_64\";\n#endif\n\n        char system_wide_marker_filename[PATH_MAX] = {0};\n        int itt_marker_file_fd = -1;\n        ssize_t res = 0;\n\n        res = snprintf(system_wide_marker_filename, PATH_MAX - 1, \"%s%s\", \"/data/local/tmp/\", marker_filename);\n        if (res < 0)\n        {\n            ITT_ANDROID_LOGE(\"Unable to concatenate marker file string.\");\n            return lib_name;\n        }\n        itt_marker_file_fd = open(system_wide_marker_filename, O_RDONLY);\n\n        if (itt_marker_file_fd == -1)\n        {\n            const pid_t my_pid = getpid();\n            char cmdline_path[PATH_MAX] = {0};\n            char package_name[PATH_MAX] = {0};\n            char app_sandbox_file[PATH_MAX] = {0};\n            int cmdline_fd = 0;\n\n            ITT_ANDROID_LOGI(\"Unable to open system-wide marker file.\");\n            res = snprintf(cmdline_path, PATH_MAX - 1, \"/proc/%d/cmdline\", my_pid);\n            if (res < 0)\n            {\n                ITT_ANDROID_LOGE(\"Unable to get cmdline path string.\");\n                return lib_name;\n            }\n\n            ITT_ANDROID_LOGI(\"CMD file: %s\\n\", cmdline_path);\n            cmdline_fd = open(cmdline_path, O_RDONLY);\n            if (cmdline_fd == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to open %s file!\", cmdline_path);\n                return lib_name;\n            }\n            res = read(cmdline_fd, package_name, PATH_MAX - 1);\n            if (res == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to read %s file!\", cmdline_path);\n                res = close(cmdline_fd);\n                if (res == -1)\n                {\n                    ITT_ANDROID_LOGE(\"Unable to close %s file!\", cmdline_path);\n                }\n                return lib_name;\n            }\n            res = close(cmdline_fd);\n            if (res == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to close %s file!\", cmdline_path);\n                return lib_name;\n            }\n            ITT_ANDROID_LOGI(\"Package name: %s\\n\", package_name);\n            res = snprintf(app_sandbox_file, PATH_MAX - 1, \"/data/data/%s/%s\", package_name, marker_filename);\n            if (res < 0)\n            {\n                ITT_ANDROID_LOGE(\"Unable to concatenate marker file string.\");\n                return lib_name;\n            }\n\n            ITT_ANDROID_LOGI(\"Lib marker file name: %s\\n\", app_sandbox_file);\n            itt_marker_file_fd = open(app_sandbox_file, O_RDONLY);\n            if (itt_marker_file_fd == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to open app marker file!\");\n                return lib_name;\n            }\n        }\n\n        {\n            char itt_lib_name[PATH_MAX] = {0};\n\n            res = read(itt_marker_file_fd, itt_lib_name, PATH_MAX - 1);\n            if (res == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to read %s file!\", itt_marker_file_fd);\n                res = close(itt_marker_file_fd);\n                if (res == -1)\n                {\n                    ITT_ANDROID_LOGE(\"Unable to close %s file!\", itt_marker_file_fd);\n                }\n                return lib_name;\n            }\n            ITT_ANDROID_LOGI(\"ITT Lib path: %s\", itt_lib_name);\n            res = close(itt_marker_file_fd);\n            if (res == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to close %s file!\", itt_marker_file_fd);\n                return lib_name;\n            }\n            ITT_ANDROID_LOGI(\"Set env %s to %s\", ITT_TO_STR(LIB_VAR_NAME), itt_lib_name);\n            res = setenv(ITT_TO_STR(LIB_VAR_NAME), itt_lib_name, 0);\n            if (res == -1)\n            {\n                ITT_ANDROID_LOGE(\"Unable to set env var!\");\n                return lib_name;\n            }\n            lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));\n            ITT_ANDROID_LOGI(\"ITT Lib path from env: %s\", lib_name);\n        }\n    }\n#endif\n\n    return lib_name;\n}\n\n/* Avoid clashes with std::min */\n#define __itt_min(a,b) ((a) < (b) ? (a) : (b))\n\nstatic __itt_group_id __itt_get_groups(void)\n{\n    int i;\n    __itt_group_id res = __itt_group_none;\n    const char* var_name  = \"INTEL_ITTNOTIFY_GROUPS\";\n    const char* group_str = __itt_get_env_var(var_name);\n\n    if (group_str != NULL)\n    {\n        int len;\n        char gr[255];\n        const char* chunk;\n        while ((group_str = __itt_fsplit(group_str, \",; \", &chunk, &len)) != NULL)\n        {\n            __itt_fstrcpyn(gr, sizeof(gr) - 1, chunk, len + 1);\n            gr[__itt_min(len, (int)(sizeof(gr) - 1))] = 0;\n\n            for (i = 0; group_list[i].name != NULL; i++)\n            {\n                if (!__itt_fstrcmp(gr, group_list[i].name))\n                {\n                    res = (__itt_group_id)(res | group_list[i].id);\n                    break;\n                }\n            }\n        }\n        /* TODO: !!! Workaround for bug with warning for unknown group !!!\n         * Should be fixed in new initialization scheme.\n         * Now the following groups should be set always. */\n        for (i = 0; group_list[i].id != __itt_group_none; i++)\n            if (group_list[i].id != __itt_group_all &&\n                group_list[i].id > __itt_group_splitter_min &&\n                group_list[i].id < __itt_group_splitter_max)\n                res = (__itt_group_id)(res | group_list[i].id);\n        return res;\n    }\n    else\n    {\n        for (i = 0; group_alias[i].env_var != NULL; i++)\n            if (__itt_get_env_var(group_alias[i].env_var) != NULL)\n                return group_alias[i].groups;\n    }\n\n    return res;\n}\n#undef __itt_min\n\nstatic int __itt_lib_version(lib_t lib)\n{\n    if (lib == NULL)\n        return 0;\n    if (__itt_get_proc(lib, \"__itt_api_init\"))\n        return 2;\n    if (__itt_get_proc(lib, \"__itt_api_version\"))\n        return 1;\n    return 0;\n}\n\n/* It's not used right now! Comment it out to avoid warnings.\nstatic void __itt_reinit_all_pointers(void)\n{\n    int i;\n    // Fill all pointers with initial stubs\n    for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)\n        *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].init_func;\n}\n*/\n\nstatic void __itt_nullify_all_pointers(void)\n{\n    int i;\n    /* Nulify all pointers except domain_create and string_handle_create */\n    for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)\n        *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;\n}\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(push)\n#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */\n#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nITT_EXTERN_C void _N_(fini_ittlib)(void)\n{\n    __itt_api_fini_t* __itt_api_fini_ptr = NULL;\n    static volatile TIDT current_thread = 0;\n\n    if (_N_(_ittapi_global).api_initialized)\n    {\n        __itt_mutex_lock(&_N_(_ittapi_global).mutex);\n        if (_N_(_ittapi_global).api_initialized)\n        {\n            if (current_thread == 0)\n            {\n                current_thread = __itt_thread_id();\n                if (_N_(_ittapi_global).lib != NULL)\n                {\n                    __itt_api_fini_ptr = (__itt_api_fini_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, \"__itt_api_fini\");\n                }\n                if (__itt_api_fini_ptr)\n                {\n                    __itt_api_fini_ptr(&_N_(_ittapi_global));\n                }\n\n                __itt_nullify_all_pointers();\n\n /* TODO: !!! not safe !!! don't support unload so far.\n  *             if (_N_(_ittapi_global).lib != NULL)\n  *                 __itt_unload_lib(_N_(_ittapi_global).lib);\n  *             _N_(_ittapi_global).lib = NULL;\n  */\n                _N_(_ittapi_global).api_initialized = 0;\n                current_thread = 0;\n            }\n        }\n        __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n    }\n}\n\nITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_groups)\n{\n    int i;\n    __itt_group_id groups;\n#ifdef ITT_COMPLETE_GROUP\n    __itt_group_id zero_group = __itt_group_none;\n#endif /* ITT_COMPLETE_GROUP */\n    static volatile TIDT current_thread = 0;\n\n    if (!_N_(_ittapi_global).api_initialized)\n    {\n#ifndef ITT_SIMPLE_INIT\n        ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global));\n#endif /* ITT_SIMPLE_INIT */\n\n        if (!_N_(_ittapi_global).api_initialized)\n        {\n            if (current_thread == 0)\n            {\n                current_thread = __itt_thread_id();\n                if (lib_name == NULL)\n                {\n                    lib_name = __itt_get_lib_name();\n                }\n                groups = __itt_get_groups();\n                if (groups != __itt_group_none || lib_name != NULL)\n                {\n                    _N_(_ittapi_global).lib = __itt_load_lib((lib_name == NULL) ? ittnotify_lib_name : lib_name);\n\n                    if (_N_(_ittapi_global).lib != NULL)\n                    {\n                        __itt_api_init_t* __itt_api_init_ptr;\n                        int lib_version = __itt_lib_version(_N_(_ittapi_global).lib);\n\n                        switch (lib_version) {\n                        case 0:\n                            groups = __itt_group_legacy;\n                        case 1:\n                            /* Fill all pointers from dynamic library */\n                            for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)\n                            {\n                                if (_N_(_ittapi_global).api_list_ptr[i].group & groups & init_groups)\n                                {\n                                    *_N_(_ittapi_global).api_list_ptr[i].func_ptr = (void*)__itt_get_proc(_N_(_ittapi_global).lib, _N_(_ittapi_global).api_list_ptr[i].name);\n                                    if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr == NULL)\n                                    {\n                                        /* Restore pointers for function with static implementation */\n                                        *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;\n                                        __itt_report_error(__itt_error_no_symbol, lib_name, _N_(_ittapi_global).api_list_ptr[i].name);\n#ifdef ITT_COMPLETE_GROUP\n                                        zero_group = (__itt_group_id)(zero_group | _N_(_ittapi_global).api_list_ptr[i].group);\n#endif /* ITT_COMPLETE_GROUP */\n                                    }\n                                }\n                                else\n                                    *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;\n                            }\n\n                            if (groups == __itt_group_legacy)\n                            {\n                                /* Compatibility with legacy tools */\n                                ITTNOTIFY_NAME(thread_ignore)  = ITTNOTIFY_NAME(thr_ignore);\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n                                ITTNOTIFY_NAME(sync_createA)   = ITTNOTIFY_NAME(sync_set_nameA);\n                                ITTNOTIFY_NAME(sync_createW)   = ITTNOTIFY_NAME(sync_set_nameW);\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\n                                ITTNOTIFY_NAME(sync_create)    = ITTNOTIFY_NAME(sync_set_name);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n                                ITTNOTIFY_NAME(sync_prepare)   = ITTNOTIFY_NAME(notify_sync_prepare);\n                                ITTNOTIFY_NAME(sync_cancel)    = ITTNOTIFY_NAME(notify_sync_cancel);\n                                ITTNOTIFY_NAME(sync_acquired)  = ITTNOTIFY_NAME(notify_sync_acquired);\n                                ITTNOTIFY_NAME(sync_releasing) = ITTNOTIFY_NAME(notify_sync_releasing);\n                            }\n\n#ifdef ITT_COMPLETE_GROUP\n                            for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)\n                                if (_N_(_ittapi_global).api_list_ptr[i].group & zero_group)\n                                    *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;\n#endif /* ITT_COMPLETE_GROUP */\n                            break;\n                        case 2:\n                            __itt_api_init_ptr = (__itt_api_init_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, \"__itt_api_init\");\n                            if (__itt_api_init_ptr)\n                                __itt_api_init_ptr(&_N_(_ittapi_global), init_groups);\n                            break;\n                        }\n                    }\n                    else\n                    {\n                        __itt_nullify_all_pointers();\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n                        int error = __itt_system_error();\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n                        const char* error = dlerror();\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n                        __itt_report_error(__itt_error_no_module, lib_name, error);\n                    }\n                }\n                else\n                {\n                    __itt_nullify_all_pointers();\n                }\n                _N_(_ittapi_global).api_initialized = 1;\n                current_thread = 0;\n                /* !!! Just to avoid unused code elimination !!! */\n                if (__itt_fini_ittlib_ptr == _N_(fini_ittlib)) current_thread = 0;\n            }\n        }\n\n#ifndef ITT_SIMPLE_INIT\n        __itt_mutex_unlock(&_N_(_ittapi_global).mutex);\n#endif /* ITT_SIMPLE_INIT */\n    }\n\n    /* Evaluating if any function ptr is non empty and it's in init_groups */\n    for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)\n    {\n        if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr != _N_(_ittapi_global).api_list_ptr[i].null_func &&\n            _N_(_ittapi_global).api_list_ptr[i].group & init_groups)\n        {\n            return 1;\n        }\n    }\n    return 0;\n}\n\nITT_EXTERN_C __itt_error_handler_t* _N_(set_error_handler)(__itt_error_handler_t* handler)\n{\n    __itt_error_handler_t* prev = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler;\n    _N_(_ittapi_global).error_handler = (void*)(size_t)handler;\n    return prev;\n}\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#pragma warning(pop)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/ittnotify_static.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"ittnotify_config.h\"\n\n#ifndef ITT_FORMAT_DEFINED\n#  ifndef ITT_FORMAT\n#    define ITT_FORMAT\n#  endif /* ITT_FORMAT */\n#  ifndef ITT_NO_PARAMS\n#    define ITT_NO_PARAMS\n#  endif /* ITT_NO_PARAMS */\n#endif /* ITT_FORMAT_DEFINED */\n\n/*\n * parameters for macro expected:\n * ITT_STUB(api, type, func_name, arguments, params, func_name_in_dll, group, printf_fmt)\n */\n#ifdef __ITT_INTERNAL_INIT\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char    *name), (ITT_FORMAT name), domain_createA, __itt_group_structure, \"\\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name), (ITT_FORMAT name), domain_createW, __itt_group_structure, \"\\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_domain*, domain_create,  (const char    *name), (ITT_FORMAT name), domain_create,  __itt_group_structure, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char    *name), (ITT_FORMAT name), string_handle_createA, __itt_group_structure, \"\\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name), (ITT_FORMAT name), string_handle_createW, __itt_group_structure, \"\\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create,  (const char    *name), (ITT_FORMAT name), string_handle_create,  __itt_group_structure, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nITT_STUBV(ITTAPI, void, pause,  (void), (ITT_NO_PARAMS), pause,  __itt_group_control | __itt_group_legacy, \"no args\")\nITT_STUBV(ITTAPI, void, resume, (void), (ITT_NO_PARAMS), resume, __itt_group_control | __itt_group_legacy, \"no args\")\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, thread_set_nameA, (const char    *name), (ITT_FORMAT name), thread_set_nameA, __itt_group_thread, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name), (ITT_FORMAT name), thread_set_nameW, __itt_group_thread, \"\\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name), (ITT_FORMAT name), thread_set_name,  __itt_group_thread, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, thread_ignore, (void), (ITT_NO_PARAMS), thread_ignore, __itt_group_thread, \"no args\")\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, int,  thr_name_setA, (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setA, __itt_group_thread | __itt_group_legacy, \"\\\"%s\\\", %d\")\nITT_STUB(LIBITTAPI, int,  thr_name_setW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setW, __itt_group_thread | __itt_group_legacy, \"\\\"%S\\\", %d\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, int,  thr_name_set,  (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_set,  __itt_group_thread | __itt_group_legacy, \"\\\"%s\\\", %d\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(LIBITTAPI, void, thr_ignore,   (void),                             (ITT_NO_PARAMS),            thr_ignore,    __itt_group_thread | __itt_group_legacy, \"no args\")\n#endif /* __ITT_INTERNAL_BODY */\n\nITT_STUBV(ITTAPI, void, enable_attach, (void), (ITT_NO_PARAMS), enable_attach, __itt_group_all, \"no args\")\n\n#else  /* __ITT_INTERNAL_INIT */\n\nITT_STUBV(ITTAPI, void, detach, (void), (ITT_NO_PARAMS), detach, __itt_group_control | __itt_group_legacy, \"no args\")\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createA, __itt_group_sync | __itt_group_fsync, \"%p, \\\"%s\\\", \\\"%s\\\", %x\")\nITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createW, __itt_group_sync | __itt_group_fsync, \"%p, \\\"%S\\\", \\\"%S\\\", %x\")\nITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char    *name), (ITT_FORMAT addr, name), sync_renameA, __itt_group_sync | __itt_group_fsync, \"%p, \\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name), (ITT_FORMAT addr, name), sync_renameW, __itt_group_sync | __itt_group_fsync, \"%p, \\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_create,  (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_create,  __itt_group_sync | __itt_group_fsync, \"%p, \\\"%s\\\", \\\"%s\\\", %x\")\nITT_STUBV(ITTAPI, void, sync_rename,  (void *addr, const char    *name), (ITT_FORMAT addr, name), sync_rename,  __itt_group_sync | __itt_group_fsync, \"%p, \\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_destroy,    (void *addr), (ITT_FORMAT addr), sync_destroy,   __itt_group_sync | __itt_group_fsync, \"%p\")\n\nITT_STUBV(ITTAPI, void, sync_prepare,    (void* addr), (ITT_FORMAT addr), sync_prepare,   __itt_group_sync,  \"%p\")\nITT_STUBV(ITTAPI, void, sync_cancel,     (void *addr), (ITT_FORMAT addr), sync_cancel,    __itt_group_sync,  \"%p\")\nITT_STUBV(ITTAPI, void, sync_acquired,   (void *addr), (ITT_FORMAT addr), sync_acquired,  __itt_group_sync,  \"%p\")\nITT_STUBV(ITTAPI, void, sync_releasing,  (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_sync,  \"%p\")\n\nITT_STUBV(ITTAPI, void, suppress_push,       (unsigned int mask),                             (ITT_FORMAT mask), suppress_push,  __itt_group_suppress,  \"%p\")\nITT_STUBV(ITTAPI, void, suppress_pop,        (void),                                          (ITT_NO_PARAMS),   suppress_pop,   __itt_group_suppress,  \"no args\")\nITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_mark_range, __itt_group_suppress, \"%d, %p, %p, %d\")\nITT_STUBV(ITTAPI, void, suppress_clear_range,(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_clear_range,__itt_group_suppress, \"%d, %p, %p, %d\")\n\nITT_STUBV(ITTAPI, void, fsync_prepare,   (void* addr), (ITT_FORMAT addr), sync_prepare,   __itt_group_fsync, \"%p\")\nITT_STUBV(ITTAPI, void, fsync_cancel,    (void *addr), (ITT_FORMAT addr), sync_cancel,    __itt_group_fsync, \"%p\")\nITT_STUBV(ITTAPI, void, fsync_acquired,  (void *addr), (ITT_FORMAT addr), sync_acquired,  __itt_group_fsync, \"%p\")\nITT_STUBV(ITTAPI, void, fsync_releasing, (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_fsync, \"%p\")\n\nITT_STUBV(ITTAPI, void, model_site_begin,          (__itt_model_site *site, __itt_model_site_instance *instance, const char *name), (ITT_FORMAT site, instance, name), model_site_begin, __itt_group_model, \"%p, %p, \\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_site_end,            (__itt_model_site *site, __itt_model_site_instance *instance),                   (ITT_FORMAT site, instance),       model_site_end,   __itt_group_model, \"%p, %p\")\nITT_STUBV(ITTAPI, void, model_task_begin,          (__itt_model_task *task, __itt_model_task_instance *instance, const char *name), (ITT_FORMAT task, instance, name), model_task_begin, __itt_group_model, \"%p, %p, \\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_task_end,            (__itt_model_task *task, __itt_model_task_instance *instance),                   (ITT_FORMAT task, instance),       model_task_end,   __itt_group_model, \"%p, %p\")\nITT_STUBV(ITTAPI, void, model_lock_acquire,        (void *lock), (ITT_FORMAT lock), model_lock_acquire, __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_lock_release,        (void *lock), (ITT_FORMAT lock), model_lock_release, __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_record_allocation,   (void *addr, size_t size), (ITT_FORMAT addr, size), model_record_allocation,   __itt_group_model, \"%p, %d\")\nITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr),              (ITT_FORMAT addr),       model_record_deallocation, __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_induction_uses,      (void* addr, size_t size), (ITT_FORMAT addr, size), model_induction_uses,      __itt_group_model, \"%p, %d\")\nITT_STUBV(ITTAPI, void, model_reduction_uses,      (void* addr, size_t size), (ITT_FORMAT addr, size), model_reduction_uses,      __itt_group_model, \"%p, %d\")\nITT_STUBV(ITTAPI, void, model_observe_uses,        (void* addr, size_t size), (ITT_FORMAT addr, size), model_observe_uses,        __itt_group_model, \"%p, %d\")\nITT_STUBV(ITTAPI, void, model_clear_uses,          (void* addr),              (ITT_FORMAT addr),       model_clear_uses,          __itt_group_model, \"%p\")\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, model_site_beginW,         (const wchar_t *name),     (ITT_FORMAT name),       model_site_beginW,         __itt_group_model, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_task_beginW,         (const wchar_t *name),     (ITT_FORMAT name),       model_task_beginW,         __itt_group_model, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_iteration_taskW,     (const wchar_t *name),     (ITT_FORMAT name),       model_iteration_taskW,     __itt_group_model, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, model_site_beginA,         (const char *name),        (ITT_FORMAT name),       model_site_beginA,         __itt_group_model, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_site_beginAL,        (const char *name, size_t len), (ITT_FORMAT name, len), model_site_beginAL,    __itt_group_model, \"\\\"%s\\\", %d\")\nITT_STUBV(ITTAPI, void, model_task_beginA,         (const char *name),        (ITT_FORMAT name),       model_task_beginA,         __itt_group_model, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_task_beginAL,        (const char *name, size_t len), (ITT_FORMAT name, len), model_task_beginAL,    __itt_group_model, \"\\\"%s\\\", %d\")\nITT_STUBV(ITTAPI, void, model_iteration_taskA,     (const char *name),        (ITT_FORMAT name),       model_iteration_taskA,     __itt_group_model, \"\\\"%s\\\"\")\nITT_STUBV(ITTAPI, void, model_iteration_taskAL,    (const char *name, size_t len), (ITT_FORMAT name, len), model_iteration_taskAL, __itt_group_model, \"\\\"%s\\\", %d\")\nITT_STUBV(ITTAPI, void, model_site_end_2,          (void),                    (ITT_NO_PARAMS),         model_site_end_2,          __itt_group_model, \"no args\")\nITT_STUBV(ITTAPI, void, model_task_end_2,          (void),                    (ITT_NO_PARAMS),         model_task_end_2,          __itt_group_model, \"no args\")\nITT_STUBV(ITTAPI, void, model_lock_acquire_2,      (void *lock),              (ITT_FORMAT lock),       model_lock_acquire_2,      __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_lock_release_2,      (void *lock),              (ITT_FORMAT lock),       model_lock_release_2,      __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_aggregate_task,      (size_t count),            (ITT_FORMAT count),      model_aggregate_task,      __itt_group_model, \"%d\")\nITT_STUBV(ITTAPI, void, model_disable_push,        (__itt_model_disable x),   (ITT_FORMAT x),          model_disable_push,        __itt_group_model, \"%p\")\nITT_STUBV(ITTAPI, void, model_disable_pop,         (void),                    (ITT_NO_PARAMS),         model_disable_pop,         __itt_group_model, \"no args\")\n#endif /* __ITT_INTERNAL_BODY */\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_createA, __itt_group_heap, \"\\\"%s\\\", \\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), heap_function_createW, __itt_group_heap, \"\\\"%s\\\", \\\"%s\\\"\")\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_create,  __itt_group_heap, \"\\\"%s\\\", \\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* __ITT_INTERNAL_BODY */\nITT_STUBV(ITTAPI, void, heap_allocate_begin,   (__itt_heap_function h, size_t size, int initialized),             (ITT_FORMAT h, size, initialized),       heap_allocate_begin, __itt_group_heap, \"%p, %lu, %d\")\nITT_STUBV(ITTAPI, void, heap_allocate_end,     (__itt_heap_function h, void** addr, size_t size, int initialized), (ITT_FORMAT h, addr, size, initialized), heap_allocate_end,   __itt_group_heap, \"%p, %p, %lu, %d\")\nITT_STUBV(ITTAPI, void, heap_free_begin,       (__itt_heap_function h, void*  addr), (ITT_FORMAT h, addr), heap_free_begin, __itt_group_heap, \"%p, %p\")\nITT_STUBV(ITTAPI, void, heap_free_end,         (__itt_heap_function h, void*  addr), (ITT_FORMAT h, addr), heap_free_end,   __itt_group_heap, \"%p, %p\")\nITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void*  addr, size_t new_size, int initialized),                  (ITT_FORMAT h, addr, new_size, initialized),           heap_reallocate_begin, __itt_group_heap, \"%p, %p, %lu, %d\")\nITT_STUBV(ITTAPI, void, heap_reallocate_end,   (__itt_heap_function h, void*  addr, void** new_addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_addr, new_size, initialized), heap_reallocate_end,   __itt_group_heap, \"%p, %p, %p, %lu, %d\")\nITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void), (ITT_NO_PARAMS), heap_internal_access_begin, __itt_group_heap, \"no args\")\nITT_STUBV(ITTAPI, void, heap_internal_access_end,   (void), (ITT_NO_PARAMS), heap_internal_access_end,   __itt_group_heap, \"no args\")\nITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin, (void), (ITT_NO_PARAMS), heap_record_memory_growth_begin, __itt_group_heap, \"no args\")\nITT_STUBV(ITTAPI, void, heap_record_memory_growth_end,   (void), (ITT_NO_PARAMS), heap_record_memory_growth_end,   __itt_group_heap, \"no args\")\nITT_STUBV(ITTAPI, void, heap_reset_detection, (unsigned int reset_mask),  (ITT_FORMAT reset_mask), heap_reset_detection, __itt_group_heap, \"%u\")\nITT_STUBV(ITTAPI, void, heap_record,          (unsigned int record_mask), (ITT_FORMAT record_mask),  heap_record,        __itt_group_heap, \"%u\")\n\nITT_STUBV(ITTAPI, void, id_create,  (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_create,  __itt_group_structure, \"%p, %lu\")\nITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_destroy, __itt_group_structure, \"%p, %lu\")\n\nITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void), (ITT_NO_PARAMS), get_timestamp,  __itt_group_structure, \"no args\")\n\nITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), region_begin, __itt_group_structure, \"%p, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, region_end,   (const __itt_domain *domain, __itt_id id),                                             (ITT_FORMAT domain, id),               region_end,   __itt_group_structure, \"%p, %lu\")\n\n#ifndef __ITT_INTERNAL_BODY\nITT_STUBV(ITTAPI, void, frame_begin_v3,  (const __itt_domain *domain, __itt_id *id),                                             (ITT_FORMAT domain, id),             frame_begin_v3,  __itt_group_structure, \"%p, %p\")\nITT_STUBV(ITTAPI, void, frame_end_v3,    (const __itt_domain *domain, __itt_id *id),                                             (ITT_FORMAT domain, id),             frame_end_v3,    __itt_group_structure, \"%p, %p\")\nITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end), (ITT_FORMAT domain, id, begin, end), frame_submit_v3, __itt_group_structure, \"%p, %p, %lu, %lu\")\n#endif /* __ITT_INTERNAL_BODY */\n\nITT_STUBV(ITTAPI, void, task_group,   (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_group,  __itt_group_structure, \"%p, %lu, %lu, %p\")\n\nITT_STUBV(ITTAPI, void, task_begin,    (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin,    __itt_group_structure, \"%p, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parent, void* fn),                  (ITT_FORMAT domain, id, parent, fn),   task_begin_fn, __itt_group_structure, \"%p, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain),                                                          (ITT_FORMAT domain),                   task_end,      __itt_group_structure, \"%p\")\n\nITT_STUBV(ITTAPI, void, counter_inc_v3,       (const __itt_domain *domain, __itt_string_handle *name),                           (ITT_FORMAT domain, name),        counter_inc_v3,       __itt_group_structure, \"%p, %p\")\nITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long value), (ITT_FORMAT domain, name, value), counter_inc_delta_v3, __itt_group_structure, \"%p, %p, %lu\")\n\nITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, id, name, scope), marker, __itt_group_structure, \"%p, %lu, %p, %d\")\n\nITT_STUBV(ITTAPI, void, metadata_add,      (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, id, key, type, count, data), metadata_add, __itt_group_structure, \"%p, %lu, %p, %d, %lu, %p\")\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length),    (ITT_FORMAT domain, id, key, data, length), metadata_str_addA, __itt_group_structure, \"%p, %lu, %p, %p, %lu\")\nITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addW, __itt_group_structure, \"%p, %lu, %p, %p, %lu\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, metadata_str_add,  (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length),    (ITT_FORMAT domain, id, key, data, length), metadata_str_add,  __itt_group_structure, \"%p, %lu, %p, %p, %lu\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail),                (ITT_FORMAT domain, relation, tail),       relation_add_to_current, __itt_group_structure, \"%p, %lu, %p\")\nITT_STUBV(ITTAPI, void, relation_add,            (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, head, relation, tail), relation_add,            __itt_group_structure, \"%p, %p, %lu, %p\")\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen), (ITT_FORMAT name, namelen), event_createA, __itt_group_mark | __itt_group_legacy, \"\\\"%s\\\", %d\")\nITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), event_createW, __itt_group_mark | __itt_group_legacy, \"\\\"%S\\\", %d\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char    *name, int namelen), (ITT_FORMAT name, namelen), event_create,  __itt_group_mark | __itt_group_legacy, \"\\\"%s\\\", %d\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, int,  event_start,          (__itt_event event),                (ITT_FORMAT event),         event_start,   __itt_group_mark | __itt_group_legacy, \"%d\")\nITT_STUB(LIBITTAPI, int,  event_end,            (__itt_event event),                (ITT_FORMAT event),         event_end,     __itt_group_mark | __itt_group_legacy, \"%d\")\n#endif /* __ITT_INTERNAL_BODY */\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p, \\\"%s\\\", \\\"%s\\\", %x\")\nITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p, \\\"%S\\\", \\\"%S\\\", %x\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_set_name,  (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_name,  __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"p, \\\"%s\\\", \\\"%s\\\", %x\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *p, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p, \\\"%s\\\", %d, \\\"%s\\\", %d, %x\")\nITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *p, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p, \\\"%S\\\", %d, \\\"%S\\\", %d, %x\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, int, notify_sync_name,  (void *p, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_name,  __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p, \\\"%s\\\", %d, \\\"%s\\\", %d, %x\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\nITT_STUBV(LIBITTAPI, void, notify_sync_prepare,   (void *p), (ITT_FORMAT p), notify_sync_prepare,   __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p\")\nITT_STUBV(LIBITTAPI, void, notify_sync_cancel,    (void *p), (ITT_FORMAT p), notify_sync_cancel,    __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p\")\nITT_STUBV(LIBITTAPI, void, notify_sync_acquired,  (void *p), (ITT_FORMAT p), notify_sync_acquired,  __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p\")\nITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *p), (ITT_FORMAT p), notify_sync_releasing, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, \"%p\")\n#endif /* __ITT_INTERNAL_BODY */\n\nITT_STUBV(LIBITTAPI, void, memory_read,   (void *addr, size_t size), (ITT_FORMAT addr, size), memory_read,   __itt_group_legacy, \"%p, %lu\")\nITT_STUBV(LIBITTAPI, void, memory_write,  (void *addr, size_t size), (ITT_FORMAT addr, size), memory_write,  __itt_group_legacy, \"%p, %lu\")\nITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_update, __itt_group_legacy, \"%p, %lu\")\n\nITT_STUB(LIBITTAPI, __itt_state_t,     state_get,    (void),                                    (ITT_NO_PARAMS),   state_get,    __itt_group_legacy, \"no args\")\nITT_STUB(LIBITTAPI, __itt_state_t,     state_set,    (__itt_state_t s),                         (ITT_FORMAT s),    state_set,    __itt_group_legacy, \"%d\")\nITT_STUB(LIBITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s), (ITT_FORMAT p, s), obj_mode_set, __itt_group_legacy, \"%d, %d\")\nITT_STUB(LIBITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s), (ITT_FORMAT p, s), thr_mode_set, __itt_group_legacy, \"%d, %d\")\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain), (ITT_FORMAT domain), frame_createA, __itt_group_frame, \"\\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (ITT_FORMAT domain), frame_createW, __itt_group_frame, \"\\\"%s\\\"\")\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char    *domain), (ITT_FORMAT domain), frame_create,  __itt_group_frame, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* __ITT_INTERNAL_BODY */\nITT_STUBV(ITTAPI, void, frame_begin,         (__itt_frame frame),     (ITT_FORMAT frame),  frame_begin,   __itt_group_frame, \"%p\")\nITT_STUBV(ITTAPI, void, frame_end,           (__itt_frame frame),     (ITT_FORMAT frame),  frame_end,     __itt_group_frame, \"%p\")\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_createA, __itt_group_counter, \"\\\"%s\\\", \\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), counter_createW, __itt_group_counter, \"\\\"%s\\\", \\\"%s\\\"\")\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_counter, counter_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_create,  __itt_group_counter, \"\\\"%s\\\", \\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* __ITT_INTERNAL_BODY */\nITT_STUBV(ITTAPI, void, counter_destroy,   (__itt_counter id),                           (ITT_FORMAT id),        counter_destroy,   __itt_group_counter, \"%p\")\nITT_STUBV(ITTAPI, void, counter_inc,       (__itt_counter id),                           (ITT_FORMAT id),        counter_inc,       __itt_group_counter, \"%p\")\nITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_inc_delta, __itt_group_counter, \"%p, %lu\")\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char    *name), (ITT_FORMAT name), mark_createA, __itt_group_mark, \"\\\"%s\\\"\")\nITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name), (ITT_FORMAT name), mark_createW, __itt_group_mark, \"\\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_mark_type, mark_create,  (const char    *name), (ITT_FORMAT name), mark_create,  __itt_group_mark, \"\\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* __ITT_INTERNAL_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int,  markA,        (__itt_mark_type mt, const char    *parameter), (ITT_FORMAT mt, parameter), markA, __itt_group_mark, \"%d, \\\"%s\\\"\")\nITT_STUB(ITTAPI, int,  markW,        (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), markW, __itt_group_mark, \"%d, \\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int,  mark,         (__itt_mark_type mt, const char    *parameter), (ITT_FORMAT mt, parameter), mark,  __itt_group_mark, \"%d, \\\"%s\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int,  mark_off, (__itt_mark_type mt), (ITT_FORMAT mt), mark_off, __itt_group_mark, \"%d\")\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int,  mark_globalA, (__itt_mark_type mt, const char    *parameter), (ITT_FORMAT mt, parameter), mark_globalA, __itt_group_mark, \"%d, \\\"%s\\\"\")\nITT_STUB(ITTAPI, int,  mark_globalW, (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), mark_globalW, __itt_group_mark, \"%d, \\\"%S\\\"\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int,  mark_global,  (__itt_mark_type mt, const char    *parameter), (ITT_FORMAT mt, parameter), mark_global,  __itt_group_mark, \"%d, \\\"%S\\\"\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int,  mark_global_off, (__itt_mark_type mt),                        (ITT_FORMAT mt),            mark_global_off, __itt_group_mark, \"%d\")\n\n#ifndef __ITT_INTERNAL_BODY\nITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void), (ITT_NO_PARAMS), stack_caller_create,  __itt_group_stitch, \"no args\")\n#endif /* __ITT_INTERNAL_BODY */\nITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id), (ITT_FORMAT id), stack_caller_destroy, __itt_group_stitch, \"%p\")\nITT_STUBV(ITTAPI, void, stack_callee_enter,   (__itt_caller id), (ITT_FORMAT id), stack_callee_enter,   __itt_group_stitch, \"%p\")\nITT_STUBV(ITTAPI, void, stack_callee_leave,   (__itt_caller id), (ITT_FORMAT id), stack_callee_leave,   __itt_group_stitch, \"%p\")\n\nITT_STUB(ITTAPI,  __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data), (ITT_FORMAT fn, fn_data), clock_domain_create, __itt_group_structure, \"%p, %p\")\nITT_STUBV(ITTAPI, void,                clock_domain_reset,  (void),                                      (ITT_NO_PARAMS),          clock_domain_reset,  __itt_group_structure, \"no args\")\nITT_STUBV(ITTAPI, void, id_create_ex,  (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_create_ex,  __itt_group_structure, \"%p, %p, %lu, %lu\")\nITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_destroy_ex, __itt_group_structure, \"%p, %p, %lu, %lu\")\nITT_STUBV(ITTAPI, void, task_begin_ex,    (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_ex, __itt_group_structure, \"%p, %p, %lu, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn),                  (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, fn), task_begin_fn_ex, __itt_group_structure, \"%p, %p, %lu, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_end_ex,      (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp),                                                            (ITT_FORMAT domain, clock_domain, timestamp), task_end_ex, __itt_group_structure, \"%p, %p, %lu\")\nITT_STUBV(ITTAPI, void, task_begin_overlapped,       (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name),                                                                   (ITT_FORMAT domain, id, parent, name), task_begin_overlapped, __itt_group_structure, \"%p, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_begin_overlapped_ex,    (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_overlapped_ex, __itt_group_structure, \"%p, %p, %lu, %lu, %lu, %p\")\nITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id id),                                                                                                                       (ITT_FORMAT domain, id), task_end_overlapped, __itt_group_structure, \"%p, %lu\")\nITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id),                                                    (ITT_FORMAT domain, clock_domain, timestamp, id), task_end_overlapped_ex, __itt_group_structure, \"%p, %p, %lu, %lu\")\nITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, clock_domain, timestamp, id, name, scope), marker_ex, __itt_group_structure, \"%p, %p, %lu, %lu, %p, %d\")\nITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, scope, key, type, count, data), metadata_add_with_scope, __itt_group_structure, \"%p, %d, %p, %d, %lu, %p\")\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length),    (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeA, __itt_group_structure, \"%p, %d, %p, %p, %lu\")\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeW, __itt_group_structure, \"%p, %d, %p, %p, %lu\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, metadata_str_add_with_scope,  (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length),    (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scope,  __itt_group_structure, \"%p, %d, %p, %p, %lu\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail),                (ITT_FORMAT domain, clock_domain, timestamp, relation, tail),       relation_add_to_current_ex, __itt_group_structure, \"%p, %p, %lu, %d, %lu\")\nITT_STUBV(ITTAPI, void, relation_add_ex,            (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, head, relation, tail), relation_add_ex,            __itt_group_structure, \"%p, %p, %lu, %lu, %d, %lu\")\nITT_STUB(ITTAPI,  __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type),                    (ITT_FORMAT name, track_group_type),        track_group_create, __itt_group_structure, \"%p, %d\")\nITT_STUB(ITTAPI,  __itt_track*,       track_create,       (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type), (ITT_FORMAT track_group, name, track_type), track_create,       __itt_group_structure, \"%p, %p, %d\")\nITT_STUBV(ITTAPI, void,               set_track,          (__itt_track *track),                                                                    (ITT_FORMAT track),                         set_track,          __itt_group_structure, \"%p\")\n\n#ifndef __ITT_INTERNAL_BODY\nITT_STUB(ITTAPI, const char*, api_version, (void), (ITT_NO_PARAMS), api_version, __itt_group_all & ~__itt_group_legacy, \"no args\")\n#endif /* __ITT_INTERNAL_BODY */\n\n#ifndef __ITT_INTERNAL_BODY\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveA, __itt_group_arrays, \"%p, %d, %p, %d, \\\"%s\\\", %d\")\nITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveW, __itt_group_arrays, \"%p, %d, %p, %d, \\\"%S\\\", %d\")\n#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, int, av_save,  (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_save,  __itt_group_arrays, \"%p, %d, %p, %d, \\\"%s\\\", %d\")\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* __ITT_INTERNAL_BODY */\n\n#endif /* __ITT_INTERNAL_INIT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/ittnotify_types.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _ITTNOTIFY_TYPES_H_\n#define _ITTNOTIFY_TYPES_H_\n\ntypedef enum ___itt_group_id\n{\n    __itt_group_none      = 0,\n    __itt_group_legacy    = 1<<0,\n    __itt_group_control   = 1<<1,\n    __itt_group_thread    = 1<<2,\n    __itt_group_mark      = 1<<3,\n    __itt_group_sync      = 1<<4,\n    __itt_group_fsync     = 1<<5,\n    __itt_group_jit       = 1<<6,\n    __itt_group_model     = 1<<7,\n    __itt_group_splitter_min = 1<<7,\n    __itt_group_counter   = 1<<8,\n    __itt_group_frame     = 1<<9,\n    __itt_group_stitch    = 1<<10,\n    __itt_group_heap      = 1<<11,\n    __itt_group_splitter_max = 1<<12,\n    __itt_group_structure = 1<<12,\n    __itt_group_suppress = 1<<13,\n    __itt_group_arrays    = 1<<14,\n    __itt_group_all       = -1\n} __itt_group_id;\n\n#pragma pack(push, 8)\n\ntypedef struct ___itt_group_list\n{\n    __itt_group_id id;\n    const char*    name;\n} __itt_group_list;\n\n#pragma pack(pop)\n\n#define ITT_GROUP_LIST(varname) \\\n    static __itt_group_list varname[] = {       \\\n        { __itt_group_all,       \"all\"       }, \\\n        { __itt_group_control,   \"control\"   }, \\\n        { __itt_group_thread,    \"thread\"    }, \\\n        { __itt_group_mark,      \"mark\"      }, \\\n        { __itt_group_sync,      \"sync\"      }, \\\n        { __itt_group_fsync,     \"fsync\"     }, \\\n        { __itt_group_jit,       \"jit\"       }, \\\n        { __itt_group_model,     \"model\"     }, \\\n        { __itt_group_counter,   \"counter\"   }, \\\n        { __itt_group_frame,     \"frame\"     }, \\\n        { __itt_group_stitch,    \"stitch\"    }, \\\n        { __itt_group_heap,      \"heap\"      }, \\\n        { __itt_group_structure, \"structure\" }, \\\n        { __itt_group_suppress,  \"suppress\"  }, \\\n        { __itt_group_arrays,    \"arrays\"    }, \\\n        { __itt_group_none,      NULL        }  \\\n    }\n\n#endif /* _ITTNOTIFY_TYPES_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/tools_api/legacy/ittnotify.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _LEGACY_ITTNOTIFY_H_\n#define _LEGACY_ITTNOTIFY_H_\n\n/**\n * @file\n * @brief Legacy User API functions and types\n */\n\n/** @cond exclude_from_documentation */\n#ifndef ITT_OS_WIN\n#  define ITT_OS_WIN   1\n#endif /* ITT_OS_WIN */\n\n#ifndef ITT_OS_LINUX\n#  define ITT_OS_LINUX 2\n#endif /* ITT_OS_LINUX */\n\n#ifndef ITT_OS_MAC\n#  define ITT_OS_MAC   3\n#endif /* ITT_OS_MAC */\n\n#ifndef ITT_OS_FREEBSD\n#  define ITT_OS_FREEBSD   4\n#endif /* ITT_OS_FREEBSD */\n\n#ifndef ITT_OS\n#  if defined WIN32 || defined _WIN32\n#    define ITT_OS ITT_OS_WIN\n#  elif defined( __APPLE__ ) && defined( __MACH__ )\n#    define ITT_OS ITT_OS_MAC\n#  elif defined( __FreeBSD__ )\n#    define ITT_OS ITT_OS_FREEBSD\n#  else\n#    define ITT_OS ITT_OS_LINUX\n#  endif\n#endif /* ITT_OS */\n\n#ifndef ITT_PLATFORM_WIN\n#  define ITT_PLATFORM_WIN 1\n#endif /* ITT_PLATFORM_WIN */\n\n#ifndef ITT_PLATFORM_POSIX\n#  define ITT_PLATFORM_POSIX 2\n#endif /* ITT_PLATFORM_POSIX */\n\n#ifndef ITT_PLATFORM_MAC\n#  define ITT_PLATFORM_MAC 3\n#endif /* ITT_PLATFORM_MAC */\n\n#ifndef ITT_PLATFORM_FREEBSD\n#  define ITT_PLATFORM_FREEBSD 4\n#endif /* ITT_PLATFORM_FREEBSD */\n\n#ifndef ITT_PLATFORM\n#  if ITT_OS==ITT_OS_WIN\n#    define ITT_PLATFORM ITT_PLATFORM_WIN\n#  elif ITT_OS==ITT_OS_MAC\n#    define ITT_PLATFORM ITT_PLATFORM_MAC\n#  elif ITT_OS==ITT_OS_FREEBSD\n#    define ITT_PLATFORM ITT_PLATFORM_FREEBSD\n#  else\n#    define ITT_PLATFORM ITT_PLATFORM_POSIX\n#  endif\n#endif /* ITT_PLATFORM */\n\n#if defined(_UNICODE) && !defined(UNICODE)\n#define UNICODE\n#endif\n\n#include <stddef.h>\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#include <tchar.h>\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#include <stdint.h>\n#if defined(UNICODE) || defined(_UNICODE)\n#include <wchar.h>\n#endif /* UNICODE || _UNICODE */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n#ifndef CDECL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define CDECL __cdecl\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__ \n#      define CDECL __attribute__ ((cdecl))\n#    else  /* _M_IX86 || __i386__ */\n#      define CDECL /* actual only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* CDECL */\n\n#ifndef STDCALL\n#  if ITT_PLATFORM==ITT_PLATFORM_WIN\n#    define STDCALL __stdcall\n#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#    if defined _M_IX86 || defined __i386__\n#      define STDCALL __attribute__ ((stdcall)) \n#    else  /* _M_IX86 || __i386__ */\n#      define STDCALL /* supported only on x86 platform */\n#    endif /* _M_IX86 || __i386__ */\n#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* STDCALL */\n\n#define ITTAPI    CDECL\n#define LIBITTAPI CDECL\n\n/* TODO: Temporary for compatibility! */\n#define ITTAPI_CALL    CDECL\n#define LIBITTAPI_CALL CDECL\n\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n/* use __forceinline (VC++ specific) */\n#define ITT_INLINE           __forceinline\n#define ITT_INLINE_ATTRIBUTE /* nothing */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/*\n * Generally, functions are not inlined unless optimization is specified.\n * For functions declared inline, this attribute inlines the function even\n * if no optimization level was specified.\n */\n#ifdef __STRICT_ANSI__\n#define ITT_INLINE           static\n#define ITT_INLINE_ATTRIBUTE __attribute__((unused))\n#else  /* __STRICT_ANSI__ */\n#define ITT_INLINE           static inline\n#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))\n#endif /* __STRICT_ANSI__ */\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n/** @endcond */\n\n/** @cond exclude_from_documentation */\n/* Helper macro for joining tokens */\n#define ITT_JOIN_AUX(p,n) p##n\n#define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)\n\n#ifdef ITT_MAJOR\n#undef ITT_MAJOR\n#endif\n#ifdef ITT_MINOR\n#undef ITT_MINOR\n#endif\n#define ITT_MAJOR     3\n#define ITT_MINOR     0\n\n/* Standard versioning of a token with major and minor version numbers */\n#define ITT_VERSIONIZE(x)    \\\n    ITT_JOIN(x,              \\\n    ITT_JOIN(_,              \\\n    ITT_JOIN(ITT_MAJOR,      \\\n    ITT_JOIN(_, ITT_MINOR))))\n\n#ifndef INTEL_ITTNOTIFY_PREFIX\n#  define INTEL_ITTNOTIFY_PREFIX __itt_\n#endif /* INTEL_ITTNOTIFY_PREFIX */\n#ifndef INTEL_ITTNOTIFY_POSTFIX\n#  define INTEL_ITTNOTIFY_POSTFIX _ptr_\n#endif /* INTEL_ITTNOTIFY_POSTFIX */\n\n#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)\n#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))\n\n#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)\n#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)\n\n#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)\n#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)\n#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)\n#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)\n#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)\n#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)\n#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)\n#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)\n#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)\n#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)\n#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)\n#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)\n#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)\n#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)\n\n#ifdef ITT_STUB\n#undef ITT_STUB\n#endif\n#ifdef ITT_STUBV\n#undef ITT_STUBV\n#endif\n#define ITT_STUBV(api,type,name,args)                             \\\n    typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \\\n    extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);\n#define ITT_STUB ITT_STUBV\n/** @endcond */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/**\n * @defgroup legacy Legacy API\n * @{\n * @}\n */\n\n/**\n * @defgroup legacy_control Collection Control\n * @ingroup legacy\n * General behavior: application continues to run, but no profiling information is being collected\n *\n * Pausing occurs not only for the current thread but for all process as well as spawned processes\n * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:\n *   - Does not analyze or report errors that involve memory access.\n *   - Other errors are reported as usual. Pausing data collection in\n *     Intel(R) Parallel Inspector and Intel(R) Inspector XE\n *     only pauses tracing and analyzing memory access.\n *     It does not pause tracing or analyzing threading APIs.\n *   .\n * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:\n *   - Does continue to record when new threads are started.\n *   .\n * - Other effects:\n *   - Possible reduction of runtime overhead.\n *   .\n * @{\n */\n#ifndef _ITTNOTIFY_H_\n/** @brief Pause collection */\nvoid ITTAPI __itt_pause(void);\n/** @brief Resume collection */\nvoid ITTAPI __itt_resume(void);\n/** @brief Detach collection */\nvoid ITTAPI __itt_detach(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, pause,   (void))\nITT_STUBV(ITTAPI, void, resume,  (void))\nITT_STUBV(ITTAPI, void, detach,  (void))\n#define __itt_pause      ITTNOTIFY_VOID(pause)\n#define __itt_pause_ptr  ITTNOTIFY_NAME(pause)\n#define __itt_resume     ITTNOTIFY_VOID(resume)\n#define __itt_resume_ptr ITTNOTIFY_NAME(resume)\n#define __itt_detach     ITTNOTIFY_VOID(detach)\n#define __itt_detach_ptr ITTNOTIFY_NAME(detach)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_pause()\n#define __itt_pause_ptr  0\n#define __itt_resume()\n#define __itt_resume_ptr 0\n#define __itt_detach()\n#define __itt_detach_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_pause_ptr  0\n#define __itt_resume_ptr 0\n#define __itt_detach_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n#endif /* _ITTNOTIFY_H_ */\n/** @} legacy_control group */\n\n/**\n * @defgroup legacy_threads Threads\n * @ingroup legacy\n * Threads group\n * @warning Legacy API\n * @{\n */\n/**\n * @deprecated Legacy API\n * @brief Set name to be associated with thread in analysis GUI.\n * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched)\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nint LIBITTAPI __itt_thr_name_setA(const char    *name, int namelen);\nint LIBITTAPI __itt_thr_name_setW(const wchar_t *name, int namelen);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_thr_name_set     __itt_thr_name_setW\n#  define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr\n#else\n#  define __itt_thr_name_set     __itt_thr_name_setA\n#  define __itt_thr_name_set_ptr __itt_thr_name_setA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nint LIBITTAPI __itt_thr_name_set(const char *name, int namelen);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, int, thr_name_setA, (const char    *name, int namelen))\nITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, int, thr_name_set,  (const char    *name, int namelen))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thr_name_setA     ITTNOTIFY_DATA(thr_name_setA)\n#define __itt_thr_name_setA_ptr ITTNOTIFY_NAME(thr_name_setA)\n#define __itt_thr_name_setW     ITTNOTIFY_DATA(thr_name_setW)\n#define __itt_thr_name_setW_ptr ITTNOTIFY_NAME(thr_name_setW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thr_name_set     ITTNOTIFY_DATA(thr_name_set)\n#define __itt_thr_name_set_ptr ITTNOTIFY_NAME(thr_name_set)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thr_name_setA(name, namelen)\n#define __itt_thr_name_setA_ptr 0\n#define __itt_thr_name_setW(name, namelen)\n#define __itt_thr_name_setW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thr_name_set(name, namelen)\n#define __itt_thr_name_set_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_thr_name_setA_ptr 0\n#define __itt_thr_name_setW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_thr_name_set_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Mark current thread as ignored from this point on, for the duration of its existence.\n */\nvoid LIBITTAPI __itt_thr_ignore(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, thr_ignore, (void))\n#define __itt_thr_ignore     ITTNOTIFY_VOID(thr_ignore)\n#define __itt_thr_ignore_ptr ITTNOTIFY_NAME(thr_ignore)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_thr_ignore()\n#define __itt_thr_ignore_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_thr_ignore_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} legacy_threads group */\n\n/**\n * @defgroup legacy_sync Synchronization\n * @ingroup legacy\n * Synchronization group\n * @warning Legacy API\n * @{\n */\n/**\n * @hideinitializer\n * @brief possible value of attribute argument for sync object type\n */\n#define __itt_attr_barrier 1\n\n/**\n * @hideinitializer\n * @brief possible value of attribute argument for sync object type\n */\n#define __itt_attr_mutex   2\n\n/**\n * @deprecated Legacy API\n * @brief Assign a name to a sync object using char or Unicode string\n * @param[in] addr    - pointer to the sync object. You should use a real pointer to your object\n *                      to make sure that the values don't clash with other object addresses\n * @param[in] objtype - null-terminated object type string. If NULL is passed, the object will\n *                      be assumed to be of generic \"User Synchronization\" type\n * @param[in] objname - null-terminated object name string. If NULL, no name will be assigned\n *                      to the object -- you can use the __itt_sync_rename call later to assign\n *                      the name\n * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the\n *                      exact semantics of how prepare/acquired/releasing calls work.\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nvoid ITTAPI __itt_sync_set_nameA(void *addr, const char    *objtype, const char    *objname, int attribute);\nvoid ITTAPI __itt_sync_set_nameW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_sync_set_name     __itt_sync_set_nameW\n#  define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr\n#else /* UNICODE */\n#  define __itt_sync_set_name     __itt_sync_set_nameA\n#  define __itt_sync_set_name_ptr __itt_sync_set_nameA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nvoid ITTAPI __itt_sync_set_name(void *addr, const char* objtype, const char* objname, int attribute);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char    *objtype, const char    *objname, int attribute))\nITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUBV(ITTAPI, void, sync_set_name,  (void *addr, const char    *objtype, const char    *objname, int attribute))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_set_nameA     ITTNOTIFY_VOID(sync_set_nameA)\n#define __itt_sync_set_nameA_ptr ITTNOTIFY_NAME(sync_set_nameA)\n#define __itt_sync_set_nameW     ITTNOTIFY_VOID(sync_set_nameW)\n#define __itt_sync_set_nameW_ptr ITTNOTIFY_NAME(sync_set_nameW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_set_name     ITTNOTIFY_VOID(sync_set_name)\n#define __itt_sync_set_name_ptr ITTNOTIFY_NAME(sync_set_name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_set_nameA(addr, objtype, objname, attribute)\n#define __itt_sync_set_nameA_ptr 0\n#define __itt_sync_set_nameW(addr, objtype, objname, attribute)\n#define __itt_sync_set_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_set_name(addr, objtype, objname, attribute)\n#define __itt_sync_set_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_sync_set_nameA_ptr 0\n#define __itt_sync_set_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_sync_set_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Assign a name and type to a sync object using char or Unicode string\n * @param[in] addr -      pointer to the sync object. You should use a real pointer to your object\n *                        to make sure that the values don't clash with other object addresses\n * @param[in] objtype -   null-terminated object type string. If NULL is passed, the object will\n *                        be assumed to be of generic \"User Synchronization\" type\n * @param[in] objname -   null-terminated object name string. If NULL, no name will be assigned\n *                        to the object -- you can use the __itt_sync_rename call later to assign\n *                        the name\n * @param[in] typelen, namelen -   a length of string for appropriate objtype and objname parameter\n * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the\n *                        exact semantics of how prepare/acquired/releasing calls work.\n * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched)\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nint LIBITTAPI __itt_notify_sync_nameA(void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute);\nint LIBITTAPI __itt_notify_sync_nameW(void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_notify_sync_name __itt_notify_sync_nameW\n#else\n#  define __itt_notify_sync_name __itt_notify_sync_nameA\n#endif\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nint LIBITTAPI __itt_notify_sync_name(void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute))\nITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, int, notify_sync_name,  (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_notify_sync_nameA     ITTNOTIFY_DATA(notify_sync_nameA)\n#define __itt_notify_sync_nameA_ptr ITTNOTIFY_NAME(notify_sync_nameA)\n#define __itt_notify_sync_nameW     ITTNOTIFY_DATA(notify_sync_nameW)\n#define __itt_notify_sync_nameW_ptr ITTNOTIFY_NAME(notify_sync_nameW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_notify_sync_name     ITTNOTIFY_DATA(notify_sync_name)\n#define __itt_notify_sync_name_ptr ITTNOTIFY_NAME(notify_sync_name)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_notify_sync_nameA(addr, objtype, typelen, objname, namelen, attribute)\n#define __itt_notify_sync_nameA_ptr 0\n#define __itt_notify_sync_nameW(addr, objtype, typelen, objname, namelen, attribute)\n#define __itt_notify_sync_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_notify_sync_name(addr, objtype, typelen, objname, namelen, attribute)\n#define __itt_notify_sync_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_notify_sync_nameA_ptr 0\n#define __itt_notify_sync_nameW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_notify_sync_name_ptr 0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Enter spin loop on user-defined sync object\n */\nvoid LIBITTAPI __itt_notify_sync_prepare(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr))\n#define __itt_notify_sync_prepare     ITTNOTIFY_VOID(notify_sync_prepare)\n#define __itt_notify_sync_prepare_ptr ITTNOTIFY_NAME(notify_sync_prepare)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_notify_sync_prepare(addr)\n#define __itt_notify_sync_prepare_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_notify_sync_prepare_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Quit spin loop without acquiring spin object\n */\nvoid LIBITTAPI __itt_notify_sync_cancel(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr))\n#define __itt_notify_sync_cancel     ITTNOTIFY_VOID(notify_sync_cancel)\n#define __itt_notify_sync_cancel_ptr ITTNOTIFY_NAME(notify_sync_cancel)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_notify_sync_cancel(addr)\n#define __itt_notify_sync_cancel_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_notify_sync_cancel_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Successful spin loop completion (sync object acquired)\n */\nvoid LIBITTAPI __itt_notify_sync_acquired(void *addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr))\n#define __itt_notify_sync_acquired     ITTNOTIFY_VOID(notify_sync_acquired)\n#define __itt_notify_sync_acquired_ptr ITTNOTIFY_NAME(notify_sync_acquired)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_notify_sync_acquired(addr)\n#define __itt_notify_sync_acquired_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_notify_sync_acquired_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Start sync object releasing code. Is called before the lock release call.\n */\nvoid LIBITTAPI __itt_notify_sync_releasing(void* addr);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr))\n#define __itt_notify_sync_releasing     ITTNOTIFY_VOID(notify_sync_releasing)\n#define __itt_notify_sync_releasing_ptr ITTNOTIFY_NAME(notify_sync_releasing)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_notify_sync_releasing(addr)\n#define __itt_notify_sync_releasing_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_notify_sync_releasing_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} legacy_sync group */\n\n#ifndef _ITTNOTIFY_H_\n/**\n * @defgroup legacy_events Events\n * @ingroup legacy\n * Events group\n * @{\n */\n\n/** @brief user event type */\ntypedef int __itt_event;\n\n/**\n * @brief Create an event notification\n * @note name or namelen being null/name and namelen not matching, user event feature not enabled\n * @return non-zero event identifier upon success and __itt_err otherwise\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_event LIBITTAPI __itt_event_createA(const char    *name, int namelen);\n__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_event_create     __itt_event_createW\n#  define __itt_event_create_ptr __itt_event_createW_ptr\n#else\n#  define __itt_event_create     __itt_event_createA\n#  define __itt_event_create_ptr __itt_event_createA_ptr\n#endif /* UNICODE */\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen))\nITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char *name, int namelen))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA     ITTNOTIFY_DATA(event_createA)\n#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)\n#define __itt_event_createW     ITTNOTIFY_DATA(event_createW)\n#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create      ITTNOTIFY_DATA(event_create)\n#define __itt_event_create_ptr  ITTNOTIFY_NAME(event_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA(name, namelen) (__itt_event)0\n#define __itt_event_createA_ptr 0\n#define __itt_event_createW(name, namelen) (__itt_event)0\n#define __itt_event_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create(name, namelen)  (__itt_event)0\n#define __itt_event_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_event_createA_ptr 0\n#define __itt_event_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_event_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an event occurrence.\n * @return __itt_err upon failure (invalid event id/user event feature not enabled)\n */\nint LIBITTAPI __itt_event_start(__itt_event event);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))\n#define __itt_event_start     ITTNOTIFY_DATA(event_start)\n#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_event_start(event) (int)0\n#define __itt_event_start_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_event_start_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @brief Record an event end occurrence.\n * @note It is optional if events do not have durations.\n * @return __itt_err upon failure (invalid event id/user event feature not enabled)\n */\nint LIBITTAPI __itt_event_end(__itt_event event);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))\n#define __itt_event_end     ITTNOTIFY_DATA(event_end)\n#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_event_end(event) (int)0\n#define __itt_event_end_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_event_end_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} legacy_events group */\n#endif /* _ITTNOTIFY_H_ */\n\n/**\n * @defgroup legacy_memory Memory Accesses\n * @ingroup legacy\n */\n\n/**\n * @deprecated Legacy API\n * @brief Inform the tool of memory accesses on reading\n */\nvoid LIBITTAPI __itt_memory_read(void *addr, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size))\n#define __itt_memory_read     ITTNOTIFY_VOID(memory_read)\n#define __itt_memory_read_ptr ITTNOTIFY_NAME(memory_read)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_memory_read(addr, size)\n#define __itt_memory_read_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_memory_read_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Inform the tool of memory accesses on writing\n */\nvoid LIBITTAPI __itt_memory_write(void *addr, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size))\n#define __itt_memory_write     ITTNOTIFY_VOID(memory_write)\n#define __itt_memory_write_ptr ITTNOTIFY_NAME(memory_write)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_memory_write(addr, size)\n#define __itt_memory_write_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_memory_write_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief Inform the tool of memory accesses on updating\n */\nvoid LIBITTAPI __itt_memory_update(void *address, size_t size);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size))\n#define __itt_memory_update     ITTNOTIFY_VOID(memory_update)\n#define __itt_memory_update_ptr ITTNOTIFY_NAME(memory_update)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_memory_update(addr, size)\n#define __itt_memory_update_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_memory_update_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} legacy_memory group */\n\n/**\n * @defgroup legacy_state Thread and Object States\n * @ingroup legacy\n */\n\n/** @brief state type */\ntypedef int __itt_state_t;\n\n/** @cond exclude_from_documentation */\ntypedef enum __itt_obj_state {\n    __itt_obj_state_err = 0,\n    __itt_obj_state_clr = 1,\n    __itt_obj_state_set = 2,\n    __itt_obj_state_use = 3\n} __itt_obj_state_t;\n\ntypedef enum __itt_thr_state {\n    __itt_thr_state_err = 0,\n    __itt_thr_state_clr = 1,\n    __itt_thr_state_set = 2\n} __itt_thr_state_t;\n\ntypedef enum __itt_obj_prop {\n    __itt_obj_prop_watch    = 1,\n    __itt_obj_prop_ignore   = 2,\n    __itt_obj_prop_sharable = 3\n} __itt_obj_prop_t;\n\ntypedef enum __itt_thr_prop {\n    __itt_thr_prop_quiet = 1\n} __itt_thr_prop_t;\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief managing thread and object states\n */\n__itt_state_t LIBITTAPI __itt_state_get(void);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_state_t, state_get, (void))\n#define __itt_state_get     ITTNOTIFY_DATA(state_get)\n#define __itt_state_get_ptr ITTNOTIFY_NAME(state_get)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_state_get(void) (__itt_state_t)0\n#define __itt_state_get_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_state_get_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief managing thread and object states\n */\n__itt_state_t LIBITTAPI __itt_state_set(__itt_state_t s);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s))\n#define __itt_state_set     ITTNOTIFY_DATA(state_set)\n#define __itt_state_set_ptr ITTNOTIFY_NAME(state_set)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_state_set(s) (__itt_state_t)0\n#define __itt_state_set_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_state_set_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief managing thread and object modes\n */\n__itt_thr_state_t LIBITTAPI __itt_thr_mode_set(__itt_thr_prop_t p, __itt_thr_state_t s);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s))\n#define __itt_thr_mode_set     ITTNOTIFY_DATA(thr_mode_set)\n#define __itt_thr_mode_set_ptr ITTNOTIFY_NAME(thr_mode_set)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_thr_mode_set(p, s) (__itt_thr_state_t)0\n#define __itt_thr_mode_set_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_thr_mode_set_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/**\n * @deprecated Legacy API\n * @brief managing thread and object modes\n */\n__itt_obj_state_t LIBITTAPI __itt_obj_mode_set(__itt_obj_prop_t p, __itt_obj_state_t s);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s))\n#define __itt_obj_mode_set     ITTNOTIFY_DATA(obj_mode_set)\n#define __itt_obj_mode_set_ptr ITTNOTIFY_NAME(obj_mode_set)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_obj_mode_set(p, s) (__itt_obj_state_t)0\n#define __itt_obj_mode_set_ptr 0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_obj_mode_set_ptr 0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} legacy_state group */\n\n/**\n * @defgroup frames Frames\n * @ingroup legacy\n * Frames group\n * @{\n */\n/**\n * @brief opaque structure for frame identification\n */\ntypedef struct __itt_frame_t *__itt_frame;\n\n/**\n * @brief Create a global frame with given domain\n */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n__itt_frame ITTAPI __itt_frame_createA(const char    *domain);\n__itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain);\n#if defined(UNICODE) || defined(_UNICODE)\n#  define __itt_frame_create     __itt_frame_createW\n#  define __itt_frame_create_ptr __itt_frame_createW_ptr\n#else /* UNICODE */\n#  define __itt_frame_create     __itt_frame_createA\n#  define __itt_frame_create_ptr __itt_frame_createA_ptr\n#endif /* UNICODE */\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n__itt_frame ITTAPI __itt_frame_create(const char *domain);\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\nITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain))\nITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain))\n#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */\nITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char *domain))\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_frame_createA     ITTNOTIFY_DATA(frame_createA)\n#define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA)\n#define __itt_frame_createW     ITTNOTIFY_DATA(frame_createW)\n#define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW)\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_frame_create     ITTNOTIFY_DATA(frame_create)\n#define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create)\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_frame_createA(domain)\n#define __itt_frame_createA_ptr 0\n#define __itt_frame_createW(domain)\n#define __itt_frame_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_frame_create(domain)\n#define __itt_frame_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#if ITT_PLATFORM==ITT_PLATFORM_WIN\n#define __itt_frame_createA_ptr 0\n#define __itt_frame_createW_ptr 0\n#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#define __itt_frame_create_ptr  0\n#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n\n/** @brief Record an frame begin occurrence. */\nvoid ITTAPI __itt_frame_begin(__itt_frame frame);\n/** @brief Record an frame end occurrence. */\nvoid ITTAPI __itt_frame_end  (__itt_frame frame);\n\n/** @cond exclude_from_documentation */\n#ifndef INTEL_NO_MACRO_BODY\n#ifndef INTEL_NO_ITTNOTIFY_API\nITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame))\nITT_STUBV(ITTAPI, void, frame_end,   (__itt_frame frame))\n#define __itt_frame_begin     ITTNOTIFY_VOID(frame_begin)\n#define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin)\n#define __itt_frame_end       ITTNOTIFY_VOID(frame_end)\n#define __itt_frame_end_ptr   ITTNOTIFY_NAME(frame_end)\n#else  /* INTEL_NO_ITTNOTIFY_API */\n#define __itt_frame_begin(frame)\n#define __itt_frame_begin_ptr 0\n#define __itt_frame_end(frame)\n#define __itt_frame_end_ptr   0\n#endif /* INTEL_NO_ITTNOTIFY_API */\n#else  /* INTEL_NO_MACRO_BODY */\n#define __itt_frame_begin_ptr 0\n#define __itt_frame_end_ptr   0\n#endif /* INTEL_NO_MACRO_BODY */\n/** @endcond */\n/** @} frames group */\n\n#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n\n#endif /* _LEGACY_ITTNOTIFY_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win32-tbb-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\nEXPORTS\n\n#define __TBB_SYMBOL( sym ) sym\n#if _M_ARM\n#include \"winrt-tbb-export.lst\"\n#else\n#include \"win32-tbb-export.lst\"\n#endif\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win32-tbb-export.lst",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n#include \"tbb/tbb_config.h\"\n\n// Assembly-language support that is called directly by clients\n// __TBB_SYMBOL( __TBB_machine_cmpswp1 )\n// __TBB_SYMBOL( __TBB_machine_cmpswp2 )\n// __TBB_SYMBOL( __TBB_machine_cmpswp4 )\n__TBB_SYMBOL( __TBB_machine_cmpswp8 )\n// __TBB_SYMBOL( __TBB_machine_fetchadd1 )\n// __TBB_SYMBOL( __TBB_machine_fetchadd2 )\n// __TBB_SYMBOL( __TBB_machine_fetchadd4 )\n__TBB_SYMBOL( __TBB_machine_fetchadd8 )\n// __TBB_SYMBOL( __TBB_machine_fetchstore1 )\n// __TBB_SYMBOL( __TBB_machine_fetchstore2 )\n// __TBB_SYMBOL( __TBB_machine_fetchstore4 )\n__TBB_SYMBOL( __TBB_machine_fetchstore8 )\n__TBB_SYMBOL( __TBB_machine_store8 )\n__TBB_SYMBOL( __TBB_machine_load8 )\n__TBB_SYMBOL( __TBB_machine_trylockbyte )\n__TBB_SYMBOL( __TBB_machine_try_lock_elided )\n__TBB_SYMBOL( __TBB_machine_unlock_elided )\n__TBB_SYMBOL( __TBB_machine_is_in_transaction )\n\n// cache_aligned_allocator.cpp\n__TBB_SYMBOL( ?NFS_Allocate@internal@tbb@@YAPAXIIPAX@Z )\n__TBB_SYMBOL( ?NFS_GetLineSize@internal@tbb@@YAIXZ )\n__TBB_SYMBOL( ?NFS_Free@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?allocate_via_handler_v3@internal@tbb@@YAPAXI@Z )\n__TBB_SYMBOL( ?deallocate_via_handler_v3@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?is_malloc_used_v3@internal@tbb@@YA_NXZ )\n\n// task.cpp v3\n__TBB_SYMBOL( ?allocate@allocate_additional_child_of_proxy@internal@tbb@@QBEAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_child_proxy@internal@tbb@@QBEAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_continuation_proxy@internal@tbb@@QBEAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_root_proxy@internal@tbb@@SAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?destroy@task_base@internal@interface5@tbb@@SAXAAVtask@4@@Z )\n__TBB_SYMBOL( ?free@allocate_additional_child_of_proxy@internal@tbb@@QBEXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_child_proxy@internal@tbb@@QBEXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_continuation_proxy@internal@tbb@@QBEXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_root_proxy@internal@tbb@@SAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?internal_set_ref_count@task@tbb@@AAEXH@Z )\n__TBB_SYMBOL( ?internal_decrement_ref_count@task@tbb@@AAEHXZ )\n__TBB_SYMBOL( ?is_owned_by_current_thread@task@tbb@@QBE_NXZ )\n__TBB_SYMBOL( ?note_affinity@task@tbb@@UAEXG@Z )\n__TBB_SYMBOL( ?resize@affinity_partitioner_base_v3@internal@tbb@@AAEXI@Z )\n__TBB_SYMBOL( ?self@task@tbb@@SAAAV12@XZ )\n__TBB_SYMBOL( ?spawn_and_wait_for_all@task@tbb@@QAEXAAVtask_list@2@@Z )\n__TBB_SYMBOL( ?default_num_threads@task_scheduler_init@tbb@@SAHXZ )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QAEXHI@Z )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QAEXH@Z )\n__TBB_SYMBOL( ?terminate@task_scheduler_init@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?internal_blocking_terminate@task_scheduler_init@tbb@@AAE_N_N@Z )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( ?observe@task_scheduler_observer_v3@internal@tbb@@QAEX_N@Z )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n/* arena.cpp */\n__TBB_SYMBOL( ?internal_max_concurrency@task_arena_base@internal@interface7@tbb@@KAHPBVtask_arena@34@@Z )\n__TBB_SYMBOL( ?internal_current_slot@task_arena_base@internal@interface7@tbb@@KAHXZ )\n__TBB_SYMBOL( ?internal_initialize@task_arena_base@internal@interface7@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?internal_terminate@task_arena_base@internal@interface7@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?internal_attach@task_arena_base@internal@interface7@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?internal_enqueue@task_arena_base@internal@interface7@tbb@@IBEXAAVtask@4@H@Z )\n__TBB_SYMBOL( ?internal_execute@task_arena_base@internal@interface7@tbb@@IBEXAAVdelegate_base@234@@Z )\n__TBB_SYMBOL( ?internal_wait@task_arena_base@internal@interface7@tbb@@IBEXXZ )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( ?isolate_within_arena@internal@interface7@tbb@@YAXAAVdelegate_base@123@H@Z )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n// task_v2.cpp\n__TBB_SYMBOL( ?destroy@task@tbb@@QAEXAAV12@@Z )\n#endif\n\n// exception handling support\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?allocate@allocate_root_with_context_proxy@internal@tbb@@QBEAAVtask@3@I@Z )\n__TBB_SYMBOL( ?free@allocate_root_with_context_proxy@internal@tbb@@QBEXAAVtask@3@@Z )\n__TBB_SYMBOL( ?change_group@task@tbb@@QAEXAAVtask_group_context@2@@Z )\n__TBB_SYMBOL( ?is_group_execution_cancelled@task_group_context@tbb@@QBE_NXZ )\n__TBB_SYMBOL( ?cancel_group_execution@task_group_context@tbb@@QAE_NXZ )\n__TBB_SYMBOL( ?reset@task_group_context@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?capture_fp_settings@task_group_context@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?init@task_group_context@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?register_pending_exception@task_group_context@tbb@@QAEXXZ )\n__TBB_SYMBOL( ??1task_group_context@tbb@@QAE@XZ )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( ?set_priority@task_group_context@tbb@@QAEXW4priority_t@2@@Z )\n__TBB_SYMBOL( ?priority@task_group_context@tbb@@QBE?AW4priority_t@2@XZ )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( ?name@captured_exception@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ?what@captured_exception@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ??1captured_exception@tbb@@UAE@XZ )\n__TBB_SYMBOL( ?move@captured_exception@tbb@@UAEPAV12@XZ )\n__TBB_SYMBOL( ?destroy@captured_exception@tbb@@UAEXXZ )\n__TBB_SYMBOL( ?set@captured_exception@tbb@@QAEXPBD0@Z )\n__TBB_SYMBOL( ?clear@captured_exception@tbb@@QAEXXZ )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n// Symbols for exceptions thrown from TBB\n__TBB_SYMBOL( ?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ )\n__TBB_SYMBOL( ?throw_exception_v4@internal@tbb@@YAXW4exception_id@12@@Z )\n__TBB_SYMBOL( ?what@bad_last_alloc@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ?what@missing_wait@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ?what@invalid_multiple_scheduling@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ?what@improper_lock@tbb@@UBEPBDXZ )\n__TBB_SYMBOL( ?what@user_abort@tbb@@UBEPBDXZ )\n\n// tbb_misc.cpp\n__TBB_SYMBOL( ?assertion_failure@tbb@@YAXPBDH00@Z )\n__TBB_SYMBOL( ?get_initial_auto_partitioner_divisor@internal@tbb@@YAIXZ )\n__TBB_SYMBOL( ?handle_perror@internal@tbb@@YAXHPBD@Z )\n__TBB_SYMBOL( ?set_assertion_handler@tbb@@YAP6AXPBDH00@ZP6AX0H00@Z@Z )\n__TBB_SYMBOL( ?runtime_warning@internal@tbb@@YAXPBDZZ )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n// tbb_main.cpp\n__TBB_SYMBOL( ?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPAXPBX@Z )\n__TBB_SYMBOL( ?itt_store_pointer_with_release_v3@internal@tbb@@YAXPAX0@Z )\n__TBB_SYMBOL( ?call_itt_notify_v5@internal@tbb@@YAXHPAX@Z )\n__TBB_SYMBOL( ?itt_set_sync_name_v3@internal@tbb@@YAXPAXPB_W@Z )\n__TBB_SYMBOL( ?itt_load_pointer_v3@internal@tbb@@YAPAXPBX@Z )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( ?itt_make_task_group_v7@internal@tbb@@YAXW4itt_domain_enum@12@PAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_metadata_str_add_v7@internal@tbb@@YAXW4itt_domain_enum@12@PAX_KW4string_index@12@PBD@Z )\n__TBB_SYMBOL( ?itt_relation_add_v7@internal@tbb@@YAXW4itt_domain_enum@12@PAX_KW4itt_relation@12@12@Z )\n__TBB_SYMBOL( ?itt_task_begin_v7@internal@tbb@@YAXW4itt_domain_enum@12@PAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_task_end_v7@internal@tbb@@YAXW4itt_domain_enum@12@@Z )\n__TBB_SYMBOL( ?itt_region_begin_v9@internal@tbb@@YAXW4itt_domain_enum@12@PAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_region_end_v9@internal@tbb@@YAXW4itt_domain_enum@12@PAX_K@Z )\n#endif\n\n// pipeline.cpp\n__TBB_SYMBOL( ??0pipeline@tbb@@QAE@XZ )\n__TBB_SYMBOL( ??1filter@tbb@@UAE@XZ )\n__TBB_SYMBOL( ??1pipeline@tbb@@UAE@XZ )\n__TBB_SYMBOL( ??_7pipeline@tbb@@6B@ )\n__TBB_SYMBOL( ?add_filter@pipeline@tbb@@QAEXAAVfilter@2@@Z )\n__TBB_SYMBOL( ?clear@pipeline@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?inject_token@pipeline@tbb@@AAEXAAVtask@2@@Z )\n__TBB_SYMBOL( ?run@pipeline@tbb@@QAEXI@Z )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?run@pipeline@tbb@@QAEXIAAVtask_group_context@2@@Z )\n#endif\n__TBB_SYMBOL( ?process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?try_process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?set_end_of_input@filter@tbb@@IAEXXZ )\n\n// queuing_rw_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_rw_mutex@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_rw_mutex@tbb@@QAEXAAV23@_N@Z )\n__TBB_SYMBOL( ?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_rw_mutex@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QAE_NAAV23@_N@Z )\n\n// reader_writer_lock.cpp\n__TBB_SYMBOL( ?try_lock_read@reader_writer_lock@interface5@tbb@@QAE_NXZ )\n__TBB_SYMBOL( ?try_lock@reader_writer_lock@interface5@tbb@@QAE_NXZ )\n__TBB_SYMBOL( ?unlock@reader_writer_lock@interface5@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?lock_read@reader_writer_lock@interface5@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?lock@reader_writer_lock@interface5@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?internal_construct@reader_writer_lock@interface5@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_destroy@reader_writer_lock@interface5@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock@reader_writer_lock@interface5@tbb@@AAEXAAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock@reader_writer_lock@interface5@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAEXAAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAEXXZ )\n\n#if !TBB_NO_LEGACY\n// spin_rw_mutex.cpp v2\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n#endif\n\n// spin_rw_mutex v3\n__TBB_SYMBOL( ?internal_construct@spin_rw_mutex_v3@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex_v3@tbb@@AAE_NXZ )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex_v3@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex_v3@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex_v3@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AAE_NXZ )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ )\n\n// x86_rtm_rw_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXXZ ) \n__TBB_SYMBOL( ?internal_release@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@@Z ) \n__TBB_SYMBOL( ?internal_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@_N@Z ) \n__TBB_SYMBOL( ?internal_acquire_reader@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@_N@Z ) \n__TBB_SYMBOL( ?internal_upgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z ) \n__TBB_SYMBOL( ?internal_downgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z ) \n__TBB_SYMBOL( ?internal_try_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z ) \n\n// spin_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@spin_mutex@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@spin_mutex@tbb@@AAEXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@spin_mutex@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AAE_NAAV23@@Z )\n\n// mutex.cpp\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@mutex@tbb@@AAEXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@mutex@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@mutex@tbb@@AAE_NAAV23@@Z )\n__TBB_SYMBOL( ?internal_construct@mutex@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_destroy@mutex@tbb@@AAEXXZ )\n\n// recursive_mutex.cpp\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@recursive_mutex@tbb@@AAEXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@recursive_mutex@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AAE_NAAV23@@Z )\n__TBB_SYMBOL( ?internal_construct@recursive_mutex@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_destroy@recursive_mutex@tbb@@AAEXXZ )\n\n// queuing_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_mutex@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_mutex@tbb@@QAEXAAV23@@Z )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_mutex@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_mutex@tbb@@QAE_NAAV23@@Z )\n\n// critical_section.cpp\n__TBB_SYMBOL( ?internal_construct@critical_section_v4@internal@tbb@@QAEXXZ )\n\n#if !TBB_NO_LEGACY\n// concurrent_hash_map.cpp\n__TBB_SYMBOL( ?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QBE_NXZ )\n\n// concurrent_queue.cpp v2\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base@internal@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base@internal@tbb@@IAEXABV123@@Z )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base@internal@tbb@@IBEHXZ )\n__TBB_SYMBOL( ??0concurrent_queue_base@internal@tbb@@IAE@I@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base@internal@tbb@@IAE@ABVconcurrent_queue_base@12@@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base@internal@tbb@@MAE@XZ )\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base@internal@tbb@@IAE@XZ )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base@internal@tbb@@IAEXPAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IAE_NPAX@Z )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base@internal@tbb@@IAEXPBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IAE_NPBX@Z )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base@internal@tbb@@IAEXHI@Z )\n#endif\n\n// concurrent_queue v3\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base_v3@internal@tbb@@IAE@XZ )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IAE@ABVconcurrent_queue_base_v3@12@@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IAE@ABVconcurrent_queue_base_v3@12@I@Z )\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXABV123@@Z )\n__TBB_SYMBOL( ??0concurrent_queue_base_v3@internal@tbb@@IAE@I@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base_v3@internal@tbb@@MAE@XZ )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base_v3@internal@tbb@@IAEXPAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IAE_NPAX@Z )\n__TBB_SYMBOL( ?internal_abort@concurrent_queue_base_v3@internal@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base_v3@internal@tbb@@IAEXPBX@Z )\n__TBB_SYMBOL( ?internal_push_move@concurrent_queue_base_v8@internal@tbb@@IAEXPBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IAE_NPBX@Z )\n__TBB_SYMBOL( ?internal_push_move_if_not_full@concurrent_queue_base_v8@internal@tbb@@IAE_NPBX@Z )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base_v3@internal@tbb@@IBEHXZ )\n__TBB_SYMBOL( ?internal_empty@concurrent_queue_base_v3@internal@tbb@@IBE_NXZ )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IAEXHI@Z )\n__TBB_SYMBOL( ?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IAEXXZ )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IBEXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_base_v3@internal@tbb@@IAEXABV123@@Z )\n__TBB_SYMBOL( ?move_content@concurrent_queue_base_v8@internal@tbb@@IAEXAAV123@@Z )\n\n#if !TBB_NO_LEGACY\n// concurrent_vector.cpp v2\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base@internal@tbb@@IBEIXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base@internal@tbb@@IAEXP6AXPAXI@Z_N@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base@internal@tbb@@IAEIIIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IAEXIIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base@internal@tbb@@IAEPAXIAAI@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base@internal@tbb@@IAEXIII@Z )\n#endif\n\n// concurrent_vector v3\n__TBB_SYMBOL( ??1concurrent_vector_base_v3@internal@tbb@@IAE@XZ )\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IBEIXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base_v3@internal@tbb@@IAEIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IAEXIIP6AXPAXPBXI@Z1@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IAEPAXIAAI@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IAEXIII@Z )\n__TBB_SYMBOL( ?internal_compact@concurrent_vector_base_v3@internal@tbb@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z )\n__TBB_SYMBOL( ?internal_swap@concurrent_vector_base_v3@internal@tbb@@IAEXAAV123@@Z )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IBEXI@Z )\n__TBB_SYMBOL( ?internal_resize@concurrent_vector_base_v3@internal@tbb@@IAEXIIIPBXP6AXPAXI@ZP6AX10I@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z )\n\n// tbb_thread\n__TBB_SYMBOL( ?join@tbb_thread_v3@internal@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?detach@tbb_thread_v3@internal@tbb@@QAEXXZ )\n__TBB_SYMBOL( ?internal_start@tbb_thread_v3@internal@tbb@@AAEXP6GIPAX@Z0@Z )\n__TBB_SYMBOL( ?allocate_closure_v3@internal@tbb@@YAPAXI@Z )\n__TBB_SYMBOL( ?free_closure_v3@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ )\n__TBB_SYMBOL( ?thread_yield_v3@internal@tbb@@YAXXZ )\n__TBB_SYMBOL( ?thread_sleep_v3@internal@tbb@@YAXABVinterval_t@tick_count@2@@Z )\n__TBB_SYMBOL( ?move_v3@internal@tbb@@YAXAAVtbb_thread_v3@12@0@Z )\n__TBB_SYMBOL( ?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ )\n\n// condition_variable\n__TBB_SYMBOL( ?internal_initialize_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_wait@internal@interface5@tbb@@YA_NAATcondvar_impl_t@123@PAVmutex@3@PBVinterval_t@tick_count@3@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_one@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_all@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_destroy_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n\n// global parameter\n__TBB_SYMBOL( ?active_value@global_control@interface9@tbb@@CAIH@Z )\n__TBB_SYMBOL( ?internal_create@global_control@interface9@tbb@@AAEXXZ )\n__TBB_SYMBOL( ?internal_destroy@global_control@interface9@tbb@@AAEXXZ )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win64-gcc-tbb-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\n#define __TBB_SYMBOL( sym ) sym;\n#include \"win64-gcc-tbb-export.lst\"\n\nlocal:\n\n/* TBB symbols */\n*3tbb*;\n*__TBB*;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_msg_buf;\nget_text_buf;\nmessage_catalog;\nprint_buf;\nirc__get_msg;\nirc__print;\n\n};\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win64-gcc-tbb-export.lst",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n/* cache_aligned_allocator.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEyyPv ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )\n__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )\n__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Ey ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )\n\n/* task.cpp v3 */\n__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )\n__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )\n__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )\n__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )\n__TBB_SYMBOL( _ZN3tbb4task4selfEv )\n__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZTIN3tbb4taskE )\n__TBB_SYMBOL( _ZTSN3tbb4taskE )\n__TBB_SYMBOL( _ZTVN3tbb4taskE )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEiy )  // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )\n__TBB_SYMBOL( _ZN3tbb19task_scheduler_init27internal_blocking_terminateEb )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )\n__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )\n__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )\n__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )\n\n/* arena.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base19internal_initializeEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base18internal_terminateEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base15internal_attachEv )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_enqueueERNS_4taskEx )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base16internal_executeERNS1_13delegate_baseE )\n__TBB_SYMBOL( _ZNK3tbb10interface78internal15task_arena_base13internal_waitEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base21internal_current_slotEv )\n__TBB_SYMBOL( _ZN3tbb10interface78internal15task_arena_base24internal_max_concurrencyEPKNS0_10task_arenaE )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( _ZN3tbb10interface78internal20isolate_within_arenaERNS1_13delegate_baseEx )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n/* task_v2.cpp */\n__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )\n#endif /* !TBB_NO_LEGACY */\n\n/* Exception handling in task scheduler */\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context19capture_fp_settingsEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )\n__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )\n__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )\n__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )\n__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )\n__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )\n__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )\n__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/* Symbols for exceptions thrown from TBB */\n__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )\n__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )\n__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )\n__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )\n__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )\n__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )\n__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )\n__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )\n__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )\n__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )\n__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )\n__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )\n__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )\n__TBB_SYMBOL( _ZTIN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTSN3tbb10user_abortE )\n__TBB_SYMBOL( _ZTVN3tbb10user_abortE )\n\n/* tbb_misc.cpp */\n__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )\n__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )\n__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )\n__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )\n__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n/* tbb_main.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )\n__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )\n__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )\n__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )\n\n/* pipeline.cpp */\n__TBB_SYMBOL( _ZTIN3tbb6filterE )\n__TBB_SYMBOL( _ZTSN3tbb6filterE )\n__TBB_SYMBOL( _ZTVN3tbb6filterE )\n__TBB_SYMBOL( _ZN3tbb6filterD2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )\n__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEy ) // MODIFIED LINUX ENTRY\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( _ZN3tbb8pipeline3runEyRNS_18task_group_contextE ) // MODIFIED LINUX ENTRY\n#endif\n__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )\n__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )\n__TBB_SYMBOL( _ZTIN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTSN3tbb8pipelineE )\n__TBB_SYMBOL( _ZTVN3tbb8pipelineE )\n__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )\n__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )\n__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )\n\n/* queuing_rw_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )\n\n/* reader_writer_lock.cpp */\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )\n__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )\n\n#if !TBB_NO_LEGACY\n/* spin_rw_mutex.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )\n__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )\n#endif\n\n// x86_rtm_rw_mutex.cpp\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_writerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex27internal_try_acquire_writerERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex23internal_acquire_readerERNS2_11scoped_lockEb )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_releaseERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex16internal_upgradeERNS2_11scoped_lockE )\n__TBB_SYMBOL( _ZN3tbb10interface88internal16x86_rtm_rw_mutex18internal_downgradeERNS2_11scoped_lockE )\n\n/* spin_rw_mutex v3 */\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )\n__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )\n\n/* spin_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )\n\n/* mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )\n\n/* recursive_mutex.cpp */\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )\n__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )\n\n/* QueuingMutex.cpp */\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )\n__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )\n\n/* critical_section.cpp */\n__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )\n\n#if !TBB_NO_LEGACY\n/* concurrent_hash_map */\n__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )\n\n/* concurrent_queue.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityExy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Ey ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )\n__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )\n__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )\n__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )\n#endif\n\n/* concurrent_queue v3 */\n/* constructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Ey ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Ey ) // MODIFIED LINUX ENTRY\n/* destructors */\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )\n/* typeinfo */\n__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )\n__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )\n/* vtable */\n__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )\n/* methods */\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v818internal_push_moveEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v830internal_push_move_if_not_fullEPKv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityExy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )\n__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )\n__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_ )\n\n\n#if !TBB_NO_LEGACY\n/* concurrent_vector.cpp v2 */\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_yPFvPvPKvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvyEb ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_yPFvPvyEPFvS4_PKvyESA_ ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEyyPFvPvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEyyy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEyRy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEyyPFvPvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )\n#endif\n\n/* concurrent_vector v3 */\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_yPFvPvPKvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_yPFvPvyEPFvS4_PKvyESA_ ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEyyy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEyRy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEyPvPFvS2_yEPFvS2_PKvyE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )\n__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEy ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEyyyPKvPFvPvyEPFvS4_S3_yE ) // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY\n\n/* tbb_thread */\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )\n__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )\n__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFjPvES2_ )  // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Ey )  // MODIFIED LINUX ENTRY\n__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )\n__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )\n\n/* condition_variable */\n__TBB_SYMBOL( _ZN3tbb10interface58internal32internal_condition_variable_waitERNS1_14condvar_impl_tEPNS_5mutexEPKNS_10tick_count10interval_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal35internal_destroy_condition_variableERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_allERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_oneERNS1_14condvar_impl_tE )\n__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_initialize_condition_variableERNS1_14condvar_impl_tE )\n\n// global parameter\n__TBB_SYMBOL( _ZN3tbb10interface914global_control12active_valueEi )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control15internal_createEv )\n__TBB_SYMBOL( _ZN3tbb10interface914global_control16internal_destroyEv )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win64-tbb-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n; This file is organized with a section for each .cpp file.\n; Each of these sections is in alphabetical order.\n\nEXPORTS\n\n#define __TBB_SYMBOL( sym ) sym\n#include \"win64-tbb-export.lst\"\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/win64-tbb-export.lst",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n// This file is organized with a section for each .cpp file.\n// Each of these sections is in alphabetical order.\n\n#include \"tbb/tbb_config.h\"\n\n// Assembly-language support that is called directly by clients\n__TBB_SYMBOL( __TBB_machine_cmpswp1 )\n__TBB_SYMBOL( __TBB_machine_fetchadd1 )\n__TBB_SYMBOL( __TBB_machine_fetchstore1 )\n__TBB_SYMBOL( __TBB_machine_cmpswp2 )\n__TBB_SYMBOL( __TBB_machine_fetchadd2 )\n__TBB_SYMBOL( __TBB_machine_fetchstore2 )\n__TBB_SYMBOL( __TBB_machine_pause )\n__TBB_SYMBOL( __TBB_machine_try_lock_elided )\n__TBB_SYMBOL( __TBB_machine_unlock_elided )\n__TBB_SYMBOL( __TBB_machine_is_in_transaction )\n\n// cache_aligned_allocator.cpp\n__TBB_SYMBOL( ?NFS_Allocate@internal@tbb@@YAPEAX_K0PEAX@Z )\n__TBB_SYMBOL( ?NFS_GetLineSize@internal@tbb@@YA_KXZ )\n__TBB_SYMBOL( ?NFS_Free@internal@tbb@@YAXPEAX@Z )\n__TBB_SYMBOL( ?allocate_via_handler_v3@internal@tbb@@YAPEAX_K@Z )\n__TBB_SYMBOL( ?deallocate_via_handler_v3@internal@tbb@@YAXPEAX@Z )\n__TBB_SYMBOL( ?is_malloc_used_v3@internal@tbb@@YA_NXZ )\n\n\n// task.cpp v3\n__TBB_SYMBOL( ?resize@affinity_partitioner_base_v3@internal@tbb@@AEAAXI@Z )\n__TBB_SYMBOL( ?allocate@allocate_additional_child_of_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z )\n__TBB_SYMBOL( ?allocate@allocate_child_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z )\n__TBB_SYMBOL( ?allocate@allocate_continuation_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z )\n__TBB_SYMBOL( ?allocate@allocate_root_proxy@internal@tbb@@SAAEAVtask@3@_K@Z )\n__TBB_SYMBOL( ?destroy@task_base@internal@interface5@tbb@@SAXAEAVtask@4@@Z )\n__TBB_SYMBOL( ?free@allocate_additional_child_of_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_child_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_continuation_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_root_proxy@internal@tbb@@SAXAEAVtask@3@@Z )\n__TBB_SYMBOL( ?internal_set_ref_count@task@tbb@@AEAAXH@Z )\n__TBB_SYMBOL( ?internal_decrement_ref_count@task@tbb@@AEAA_JXZ )\n__TBB_SYMBOL( ?is_owned_by_current_thread@task@tbb@@QEBA_NXZ )\n__TBB_SYMBOL( ?note_affinity@task@tbb@@UEAAXG@Z )\n__TBB_SYMBOL( ?self@task@tbb@@SAAEAV12@XZ )\n__TBB_SYMBOL( ?spawn_and_wait_for_all@task@tbb@@QEAAXAEAVtask_list@2@@Z )\n__TBB_SYMBOL( ?default_num_threads@task_scheduler_init@tbb@@SAHXZ )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QEAAXH_K@Z )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QEAAXH@Z )\n__TBB_SYMBOL( ?terminate@task_scheduler_init@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?internal_blocking_terminate@task_scheduler_init@tbb@@AEAA_N_N@Z )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( ?observe@task_scheduler_observer_v3@internal@tbb@@QEAAX_N@Z )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n/* arena.cpp */\n__TBB_SYMBOL( ?internal_max_concurrency@task_arena_base@internal@interface7@tbb@@KAHPEBVtask_arena@34@@Z )\n__TBB_SYMBOL( ?internal_current_slot@task_arena_base@internal@interface7@tbb@@KAHXZ )\n__TBB_SYMBOL( ?internal_initialize@task_arena_base@internal@interface7@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?internal_terminate@task_arena_base@internal@interface7@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?internal_attach@task_arena_base@internal@interface7@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?internal_enqueue@task_arena_base@internal@interface7@tbb@@IEBAXAEAVtask@4@_J@Z )\n__TBB_SYMBOL( ?internal_execute@task_arena_base@internal@interface7@tbb@@IEBAXAEAVdelegate_base@234@@Z )\n__TBB_SYMBOL( ?internal_wait@task_arena_base@internal@interface7@tbb@@IEBAXXZ )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( ?isolate_within_arena@internal@interface7@tbb@@YAXAEAVdelegate_base@123@_J@Z )\n#endif /* __TBB_TASK_ISOLATION */\n#if !TBB_NO_LEGACY\n// task_v2.cpp\n__TBB_SYMBOL( ?destroy@task@tbb@@QEAAXAEAV12@@Z )\n#endif\n\n// Exception handling in task scheduler\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?allocate@allocate_root_with_context_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z )\n__TBB_SYMBOL( ?free@allocate_root_with_context_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z )\n__TBB_SYMBOL( ?change_group@task@tbb@@QEAAXAEAVtask_group_context@2@@Z )\n__TBB_SYMBOL( ?is_group_execution_cancelled@task_group_context@tbb@@QEBA_NXZ )\n__TBB_SYMBOL( ?cancel_group_execution@task_group_context@tbb@@QEAA_NXZ )\n__TBB_SYMBOL( ?reset@task_group_context@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?capture_fp_settings@task_group_context@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?init@task_group_context@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?register_pending_exception@task_group_context@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ??1task_group_context@tbb@@QEAA@XZ )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( ?set_priority@task_group_context@tbb@@QEAAXW4priority_t@2@@Z )\n__TBB_SYMBOL( ?priority@task_group_context@tbb@@QEBA?AW4priority_t@2@XZ )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( ?name@captured_exception@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ?what@captured_exception@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ??1captured_exception@tbb@@UEAA@XZ )\n__TBB_SYMBOL( ?move@captured_exception@tbb@@UEAAPEAV12@XZ )\n__TBB_SYMBOL( ?destroy@captured_exception@tbb@@UEAAXXZ )\n__TBB_SYMBOL( ?set@captured_exception@tbb@@QEAAXPEBD0@Z )\n__TBB_SYMBOL( ?clear@captured_exception@tbb@@QEAAXXZ )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n// Symbols for exceptions thrown from TBB\n__TBB_SYMBOL( ?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ )\n__TBB_SYMBOL( ?throw_exception_v4@internal@tbb@@YAXW4exception_id@12@@Z )\n__TBB_SYMBOL( ?what@bad_last_alloc@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ?what@missing_wait@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ?what@invalid_multiple_scheduling@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ?what@improper_lock@tbb@@UEBAPEBDXZ )\n__TBB_SYMBOL( ?what@user_abort@tbb@@UEBAPEBDXZ )\n\n// tbb_misc.cpp\n__TBB_SYMBOL( ?assertion_failure@tbb@@YAXPEBDH00@Z )\n__TBB_SYMBOL( ?get_initial_auto_partitioner_divisor@internal@tbb@@YA_KXZ )\n__TBB_SYMBOL( ?handle_perror@internal@tbb@@YAXHPEBD@Z )\n__TBB_SYMBOL( ?set_assertion_handler@tbb@@YAP6AXPEBDH00@ZP6AX0H00@Z@Z )\n__TBB_SYMBOL( ?runtime_warning@internal@tbb@@YAXPEBDZZ )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n// tbb_main.cpp\n__TBB_SYMBOL( ?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPEAXPEBX@Z )\n__TBB_SYMBOL( ?itt_store_pointer_with_release_v3@internal@tbb@@YAXPEAX0@Z )\n__TBB_SYMBOL( ?call_itt_notify_v5@internal@tbb@@YAXHPEAX@Z )\n__TBB_SYMBOL( ?itt_load_pointer_v3@internal@tbb@@YAPEAXPEBX@Z )\n__TBB_SYMBOL( ?itt_set_sync_name_v3@internal@tbb@@YAXPEAXPEB_W@Z )\n#if __TBB_ITT_STRUCTURE_API\n__TBB_SYMBOL( ?itt_make_task_group_v7@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_metadata_str_add_v7@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_KW4string_index@12@PEBD@Z )\n__TBB_SYMBOL( ?itt_relation_add_v7@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_KW4itt_relation@12@12@Z )\n__TBB_SYMBOL( ?itt_task_begin_v7@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_task_end_v7@internal@tbb@@YAXW4itt_domain_enum@12@@Z )\n__TBB_SYMBOL( ?itt_region_begin_v9@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_K12W4string_index@12@@Z )\n__TBB_SYMBOL( ?itt_region_end_v9@internal@tbb@@YAXW4itt_domain_enum@12@PEAX_K@Z )\n#endif\n\n// pipeline.cpp\n__TBB_SYMBOL( ??_7pipeline@tbb@@6B@ )\n__TBB_SYMBOL( ??0pipeline@tbb@@QEAA@XZ )\n__TBB_SYMBOL( ??1filter@tbb@@UEAA@XZ )\n__TBB_SYMBOL( ??1pipeline@tbb@@UEAA@XZ )\n__TBB_SYMBOL( ?add_filter@pipeline@tbb@@QEAAXAEAVfilter@2@@Z )\n__TBB_SYMBOL( ?clear@pipeline@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?inject_token@pipeline@tbb@@AEAAXAEAVtask@2@@Z )\n__TBB_SYMBOL( ?run@pipeline@tbb@@QEAAX_K@Z )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?run@pipeline@tbb@@QEAAX_KAEAVtask_group_context@2@@Z )\n#endif\n__TBB_SYMBOL( ?process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?try_process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?set_end_of_input@filter@tbb@@IEAAXXZ )\n\n// queuing_rw_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_rw_mutex@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAAXAEAV23@_N@Z )\n__TBB_SYMBOL( ?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_rw_mutex@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NAEAV23@_N@Z )\n\n// reader_writer_lock.cpp\n__TBB_SYMBOL( ?try_lock_read@reader_writer_lock@interface5@tbb@@QEAA_NXZ )\n__TBB_SYMBOL( ?try_lock@reader_writer_lock@interface5@tbb@@QEAA_NXZ )\n__TBB_SYMBOL( ?unlock@reader_writer_lock@interface5@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?lock_read@reader_writer_lock@interface5@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?lock@reader_writer_lock@interface5@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?internal_construct@reader_writer_lock@interface5@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@reader_writer_lock@interface5@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock@reader_writer_lock@interface5@tbb@@AEAAXAEAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock@reader_writer_lock@interface5@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock_read@reader_writer_lock@interface5@tbb@@AEAAXAEAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock_read@reader_writer_lock@interface5@tbb@@AEAAXXZ )\n\n#if !TBB_NO_LEGACY\n// spin_rw_mutex.cpp v2\n__TBB_SYMBOL( ?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPEAV12@@Z )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z )\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex@tbb@@CAXPEAV12@@Z )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex@tbb@@CA_NPEAV12@@Z )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex@tbb@@CAXPEAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPEAV12@@Z )\n#endif\n\n// spin_rw_mutex v3\n__TBB_SYMBOL( ?internal_construct@spin_rw_mutex_v3@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex_v3@tbb@@AEAA_NXZ )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex_v3@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex_v3@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AEAA_NXZ )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ )\n\n// x86_rtm_rw_mutex.cpp\n__TBB_SYMBOL( ?internal_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@_N@Z )\n__TBB_SYMBOL( ?internal_acquire_reader@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@_N@Z )\n__TBB_SYMBOL( ?internal_upgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z )\n__TBB_SYMBOL( ?internal_downgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z )\n__TBB_SYMBOL( ?internal_release@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@@Z )\n__TBB_SYMBOL( ?internal_construct@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXXZ )\n\n// spin_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@spin_mutex@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@spin_mutex@tbb@@AEAAXAEAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@spin_mutex@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AEAA_NAEAV23@@Z )\n\n// mutex.cpp\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@mutex@tbb@@AEAAXAEAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@mutex@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@mutex@tbb@@AEAA_NAEAV23@@Z )\n__TBB_SYMBOL( ?internal_construct@mutex@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@mutex@tbb@@AEAAXXZ )\n\n// recursive_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@recursive_mutex@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@recursive_mutex@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@recursive_mutex@tbb@@AEAAXAEAV23@@Z )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AEAA_NAEAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@recursive_mutex@tbb@@AEAAXXZ )\n\n// queuing_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_mutex@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_mutex@tbb@@QEAAXAEAV23@@Z )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_mutex@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_mutex@tbb@@QEAA_NAEAV23@@Z )\n\n//critical_section.cpp\n__TBB_SYMBOL( ?internal_construct@critical_section_v4@internal@tbb@@QEAAXXZ )\n\n#if !TBB_NO_LEGACY\n// concurrent_hash_map.cpp\n__TBB_SYMBOL( ?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QEBA_NXZ )\n\n// concurrent_queue.cpp v2\n__TBB_SYMBOL( ??0concurrent_queue_base@internal@tbb@@IEAA@_K@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base@internal@tbb@@IEAA@AEBVconcurrent_queue_base@12@@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base@internal@tbb@@MEAA@XZ )\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base@internal@tbb@@IEAA@XZ )\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base@internal@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base@internal@tbb@@IEAAXAEBV123@@Z )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base@internal@tbb@@IEAAXPEAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IEAA_NPEAX@Z )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base@internal@tbb@@IEAAXPEBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IEAA_NPEBX@Z )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base@internal@tbb@@IEAAX_J_K@Z )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base@internal@tbb@@IEBA_JXZ )\n#endif\n\n// concurrent_queue v3\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@AEBVconcurrent_queue_base_v3@12@@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@AEBVconcurrent_queue_base_v3@12@_K@Z )\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@XZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXAEBV123@@Z )\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ??0concurrent_queue_base_v3@internal@tbb@@IEAA@_K@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base_v3@internal@tbb@@MEAA@XZ )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base_v3@internal@tbb@@IEAAXPEBX@Z )\n__TBB_SYMBOL( ?internal_push_move@concurrent_queue_base_v8@internal@tbb@@IEAAXPEBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEBX@Z )\n__TBB_SYMBOL( ?internal_push_move_if_not_full@concurrent_queue_base_v8@internal@tbb@@IEAA_NPEBX@Z )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base_v3@internal@tbb@@IEAAXPEAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEAX@Z )\n__TBB_SYMBOL( ?internal_abort@concurrent_queue_base_v3@internal@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base_v3@internal@tbb@@IEBA_JXZ )\n__TBB_SYMBOL( ?internal_empty@concurrent_queue_base_v3@internal@tbb@@IEBA_NXZ )\n__TBB_SYMBOL( ?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IEAAXXZ )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IEAAX_J_K@Z )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IEBAXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_base_v3@internal@tbb@@IEAAXAEBV123@@Z )\n__TBB_SYMBOL( ?move_content@concurrent_queue_base_v8@internal@tbb@@IEAAXAEAV123@@Z )\n\n#if !TBB_NO_LEGACY\n// concurrent_vector.cpp v2\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base@internal@tbb@@IEBA_KXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base@internal@tbb@@IEAAXP6AXPEAX_K@Z_N@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base@internal@tbb@@IEAA_K_K0P6AXPEAX0@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IEAAX_K0P6AXPEAX0@Z@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base@internal@tbb@@IEAAPEAX_KAEA_K@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base@internal@tbb@@IEAAX_K00@Z )\n#endif\n\n// concurrent_vector v3\n__TBB_SYMBOL( ??1concurrent_vector_base_v3@internal@tbb@@IEAA@XZ )\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IEBA_KXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base_v3@internal@tbb@@IEAA_KP6AXPEAX_K@Z@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IEAAX_K0P6AXPEAXPEBX0@Z2@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KAEA_K@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00@Z )\n__TBB_SYMBOL( ?internal_compact@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z )\n__TBB_SYMBOL( ?internal_swap@concurrent_vector_base_v3@internal@tbb@@IEAAXAEAV123@@Z )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IEBAX_K@Z )\n__TBB_SYMBOL( ?internal_resize@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00PEBXP6AXPEAX0@ZP6AX210@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z )\n\n// tbb_thread\n__TBB_SYMBOL( ?allocate_closure_v3@internal@tbb@@YAPEAX_K@Z )\n__TBB_SYMBOL( ?detach@tbb_thread_v3@internal@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?free_closure_v3@internal@tbb@@YAXPEAX@Z )\n__TBB_SYMBOL( ?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ )\n__TBB_SYMBOL( ?internal_start@tbb_thread_v3@internal@tbb@@AEAAXP6AIPEAX@Z0@Z )\n__TBB_SYMBOL( ?join@tbb_thread_v3@internal@tbb@@QEAAXXZ )\n__TBB_SYMBOL( ?move_v3@internal@tbb@@YAXAEAVtbb_thread_v3@12@0@Z )\n__TBB_SYMBOL( ?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ )\n__TBB_SYMBOL( ?thread_sleep_v3@internal@tbb@@YAXAEBVinterval_t@tick_count@2@@Z )\n__TBB_SYMBOL( ?thread_yield_v3@internal@tbb@@YAXXZ )\n\n// condition_variable\n__TBB_SYMBOL( ?internal_initialize_condition_variable@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_wait@internal@interface5@tbb@@YA_NAEATcondvar_impl_t@123@PEAVmutex@3@PEBVinterval_t@tick_count@3@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_one@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_all@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_destroy_condition_variable@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z )\n\n// global parameter\n__TBB_SYMBOL( ?active_value@global_control@interface9@tbb@@CA_KH@Z )\n__TBB_SYMBOL( ?internal_create@global_control@interface9@tbb@@AEAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@global_control@interface9@tbb@@AEAAXXZ )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/winrt-tbb-export.lst",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n#include \"tbb/tbb_config.h\"\n\n// cache_aligned_allocator.cpp\n__TBB_SYMBOL( ?NFS_Allocate@internal@tbb@@YAPAXIIPAX@Z )\n__TBB_SYMBOL( ?NFS_GetLineSize@internal@tbb@@YAIXZ )\n__TBB_SYMBOL( ?NFS_Free@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?allocate_via_handler_v3@internal@tbb@@YAPAXI@Z )\n__TBB_SYMBOL( ?deallocate_via_handler_v3@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?is_malloc_used_v3@internal@tbb@@YA_NXZ )\n\n// task.cpp v3\n__TBB_SYMBOL( ?allocate@allocate_additional_child_of_proxy@internal@tbb@@QBAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_child_proxy@internal@tbb@@QBAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_continuation_proxy@internal@tbb@@QBAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?allocate@allocate_root_proxy@internal@tbb@@SAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?destroy@task_base@internal@interface5@tbb@@SAXAAVtask@4@@Z )\n__TBB_SYMBOL( ?free@allocate_additional_child_of_proxy@internal@tbb@@QBAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_child_proxy@internal@tbb@@QBAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_continuation_proxy@internal@tbb@@QBAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?free@allocate_root_proxy@internal@tbb@@SAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?internal_set_ref_count@task@tbb@@AAAXH@Z )\n__TBB_SYMBOL( ?internal_decrement_ref_count@task@tbb@@AAAHXZ )\n__TBB_SYMBOL( ?is_owned_by_current_thread@task@tbb@@QBA_NXZ )\n__TBB_SYMBOL( ?note_affinity@task@tbb@@UAAXG@Z )\n__TBB_SYMBOL( ?resize@affinity_partitioner_base_v3@internal@tbb@@AAAXI@Z )\n__TBB_SYMBOL( ?self@task@tbb@@SAAAV12@XZ )\n__TBB_SYMBOL( ?spawn_and_wait_for_all@task@tbb@@QAAXAAVtask_list@2@@Z )\n__TBB_SYMBOL( ?default_num_threads@task_scheduler_init@tbb@@SAHXZ )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QAAXHI@Z )\n__TBB_SYMBOL( ?initialize@task_scheduler_init@tbb@@QAAXH@Z )\n__TBB_SYMBOL( ?terminate@task_scheduler_init@tbb@@QAAXXZ )\n#if __TBB_SCHEDULER_OBSERVER\n__TBB_SYMBOL( ?observe@task_scheduler_observer_v3@internal@tbb@@QAAX_N@Z )\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n/* arena.cpp */\n__TBB_SYMBOL( ?internal_max_concurrency@task_arena_base@internal@interface7@tbb@@KAHPBVtask_arena@34@@Z )\n__TBB_SYMBOL( ?internal_current_slot@task_arena_base@internal@interface7@tbb@@KAHXZ )\n__TBB_SYMBOL( ?internal_initialize@task_arena_base@internal@interface7@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?internal_terminate@task_arena_base@internal@interface7@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?internal_attach@task_arena_base@internal@interface7@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?internal_enqueue@task_arena_base@internal@interface7@tbb@@IBAXAAVtask@4@H@Z )\n__TBB_SYMBOL( ?internal_execute@task_arena_base@internal@interface7@tbb@@IBAXAAVdelegate_base@234@@Z )\n__TBB_SYMBOL( ?internal_wait@task_arena_base@internal@interface7@tbb@@IBAXXZ )\n#if __TBB_TASK_ISOLATION\n__TBB_SYMBOL( ?isolate_within_arena@internal@interface7@tbb@@YAXAAVdelegate_base@123@H@Z )\n#endif /* __TBB_TASK_ISOLATION */\n\n#if !TBB_NO_LEGACY\n// task_v2.cpp\n__TBB_SYMBOL( ?destroy@task@tbb@@QAAXAAV12@@Z )\n#endif\n\n// exception handling support\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?allocate@allocate_root_with_context_proxy@internal@tbb@@QBAAAVtask@3@I@Z )\n__TBB_SYMBOL( ?free@allocate_root_with_context_proxy@internal@tbb@@QBAXAAVtask@3@@Z )\n__TBB_SYMBOL( ?change_group@task@tbb@@QAAXAAVtask_group_context@2@@Z )\n__TBB_SYMBOL( ?is_group_execution_cancelled@task_group_context@tbb@@QBA_NXZ )\n__TBB_SYMBOL( ?cancel_group_execution@task_group_context@tbb@@QAA_NXZ )\n__TBB_SYMBOL( ?reset@task_group_context@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?capture_fp_settings@task_group_context@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?init@task_group_context@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?register_pending_exception@task_group_context@tbb@@QAAXXZ )\n__TBB_SYMBOL( ??1task_group_context@tbb@@QAA@XZ )\n#if __TBB_TASK_PRIORITY\n__TBB_SYMBOL( ?set_priority@task_group_context@tbb@@QAAXW4priority_t@2@@Z )\n__TBB_SYMBOL( ?priority@task_group_context@tbb@@QBA?AW4priority_t@2@XZ )\n#endif /* __TBB_TASK_PRIORITY */\n__TBB_SYMBOL( ?name@captured_exception@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ?what@captured_exception@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ??1captured_exception@tbb@@UAA@XZ )\n__TBB_SYMBOL( ?move@captured_exception@tbb@@UAAPAV12@XZ )\n__TBB_SYMBOL( ?destroy@captured_exception@tbb@@UAAXXZ )\n__TBB_SYMBOL( ?set@captured_exception@tbb@@QAAXPBD0@Z )\n__TBB_SYMBOL( ?clear@captured_exception@tbb@@QAAXXZ )\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n// Symbols for exceptions thrown from TBB\n__TBB_SYMBOL( ?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ )\n__TBB_SYMBOL( ?throw_exception_v4@internal@tbb@@YAXW4exception_id@12@@Z )\n__TBB_SYMBOL( ?what@bad_last_alloc@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ?what@missing_wait@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ?what@invalid_multiple_scheduling@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ?what@improper_lock@tbb@@UBAPBDXZ )\n__TBB_SYMBOL( ?what@user_abort@tbb@@UBAPBDXZ )\n\n// tbb_misc.cpp\n__TBB_SYMBOL( ?assertion_failure@tbb@@YAXPBDH00@Z )\n__TBB_SYMBOL( ?get_initial_auto_partitioner_divisor@internal@tbb@@YAIXZ )\n__TBB_SYMBOL( ?handle_perror@internal@tbb@@YAXHPBD@Z )\n__TBB_SYMBOL( ?set_assertion_handler@tbb@@YAP6AXPBDH00@ZP6AX0H00@Z@Z )\n__TBB_SYMBOL( ?runtime_warning@internal@tbb@@YAXPBDZZ )\n__TBB_SYMBOL( TBB_runtime_interface_version )\n\n// tbb_main.cpp\n__TBB_SYMBOL( ?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPAXPBX@Z )\n__TBB_SYMBOL( ?itt_store_pointer_with_release_v3@internal@tbb@@YAXPAX0@Z )\n__TBB_SYMBOL( ?call_itt_notify_v5@internal@tbb@@YAXHPAX@Z )\n__TBB_SYMBOL( ?itt_set_sync_name_v3@internal@tbb@@YAXPAXPB_W@Z )\n__TBB_SYMBOL( ?itt_load_pointer_v3@internal@tbb@@YAPAXPBX@Z )\n\n// pipeline.cpp\n__TBB_SYMBOL( ??0pipeline@tbb@@QAA@XZ )\n__TBB_SYMBOL( ??1filter@tbb@@UAA@XZ )\n__TBB_SYMBOL( ??1pipeline@tbb@@UAA@XZ )\n__TBB_SYMBOL( ??_7pipeline@tbb@@6B@ )\n__TBB_SYMBOL( ?add_filter@pipeline@tbb@@QAAXAAVfilter@2@@Z )\n__TBB_SYMBOL( ?clear@pipeline@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?inject_token@pipeline@tbb@@AAAXAAVtask@2@@Z )\n__TBB_SYMBOL( ?run@pipeline@tbb@@QAAXI@Z )\n#if __TBB_TASK_GROUP_CONTEXT\n__TBB_SYMBOL( ?run@pipeline@tbb@@QAAXIAAVtask_group_context@2@@Z )\n#endif\n__TBB_SYMBOL( ?process_item@thread_bound_filter@tbb@@QAA?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?try_process_item@thread_bound_filter@tbb@@QAA?AW4result_type@12@XZ )\n__TBB_SYMBOL( ?set_end_of_input@filter@tbb@@IAAXXZ )\n\n// queuing_rw_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_rw_mutex@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_rw_mutex@tbb@@QAAXAAV23@_N@Z )\n__TBB_SYMBOL( ?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QAA_NXZ )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_rw_mutex@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QAA_NXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QAA_NAAV23@_N@Z )\n\n// reader_writer_lock.cpp\n__TBB_SYMBOL( ?try_lock_read@reader_writer_lock@interface5@tbb@@QAA_NXZ )\n__TBB_SYMBOL( ?try_lock@reader_writer_lock@interface5@tbb@@QAA_NXZ )\n__TBB_SYMBOL( ?unlock@reader_writer_lock@interface5@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?lock_read@reader_writer_lock@interface5@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?lock@reader_writer_lock@interface5@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?internal_construct@reader_writer_lock@interface5@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@reader_writer_lock@interface5@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock@reader_writer_lock@interface5@tbb@@AAAXAAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock@reader_writer_lock@interface5@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_construct@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAAXAAV234@@Z )\n__TBB_SYMBOL( ?internal_destroy@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAAXXZ )\n\n#if !TBB_NO_LEGACY\n// spin_rw_mutex.cpp v2\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex@tbb@@CAXPAV12@@Z )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPAV12@@Z )\n#endif\n\n// spin_rw_mutex v3\n__TBB_SYMBOL( ?internal_construct@spin_rw_mutex_v3@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_upgrade@spin_rw_mutex_v3@tbb@@AAA_NXZ )\n__TBB_SYMBOL( ?internal_downgrade@spin_rw_mutex_v3@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AAA_NXZ )\n__TBB_SYMBOL( ?internal_release_reader@spin_rw_mutex_v3@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_release_writer@spin_rw_mutex_v3@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AAA_NXZ )\n__TBB_SYMBOL( ?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AAA_NXZ )\n\n// spin_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@spin_mutex@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@spin_mutex@tbb@@AAAXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@spin_mutex@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AAA_NAAV23@@Z )\n\n// mutex.cpp\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@mutex@tbb@@AAAXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@mutex@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@mutex@tbb@@AAA_NAAV23@@Z )\n__TBB_SYMBOL( ?internal_construct@mutex@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@mutex@tbb@@AAAXXZ )\n\n// recursive_mutex.cpp\n__TBB_SYMBOL( ?internal_acquire@scoped_lock@recursive_mutex@tbb@@AAAXAAV23@@Z )\n__TBB_SYMBOL( ?internal_release@scoped_lock@recursive_mutex@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AAA_NAAV23@@Z )\n__TBB_SYMBOL( ?internal_construct@recursive_mutex@tbb@@AAAXXZ )\n__TBB_SYMBOL( ?internal_destroy@recursive_mutex@tbb@@AAAXXZ )\n\n// queuing_mutex.cpp\n__TBB_SYMBOL( ?internal_construct@queuing_mutex@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?acquire@scoped_lock@queuing_mutex@tbb@@QAAXAAV23@@Z )\n__TBB_SYMBOL( ?release@scoped_lock@queuing_mutex@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?try_acquire@scoped_lock@queuing_mutex@tbb@@QAA_NAAV23@@Z )\n\n// critical_section.cpp\n__TBB_SYMBOL( ?internal_construct@critical_section_v4@internal@tbb@@QAAXXZ )\n\n#if !TBB_NO_LEGACY\n// concurrent_hash_map.cpp\n__TBB_SYMBOL( ?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QBA_NXZ )\n\n// concurrent_queue.cpp v2\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base@internal@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base@internal@tbb@@IAAXABV123@@Z )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base@internal@tbb@@IBAHXZ )\n__TBB_SYMBOL( ??0concurrent_queue_base@internal@tbb@@IAA@I@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base@internal@tbb@@IAA@ABVconcurrent_queue_base@12@@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base@internal@tbb@@MAA@XZ )\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base@internal@tbb@@IAA@XZ )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base@internal@tbb@@IAAXPAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IAA_NPAX@Z )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base@internal@tbb@@IAAXPBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IAA_NPBX@Z )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base@internal@tbb@@IAAXHI@Z )\n#endif\n\n// concurrent_queue v3\n__TBB_SYMBOL( ??1concurrent_queue_iterator_base_v3@internal@tbb@@IAA@XZ )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IAA@ABVconcurrent_queue_base_v3@12@@Z )\n__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3@internal@tbb@@IAA@ABVconcurrent_queue_base_v3@12@I@Z )\n__TBB_SYMBOL( ?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IAAXABV123@@Z )\n__TBB_SYMBOL( ??0concurrent_queue_base_v3@internal@tbb@@IAA@I@Z )\n__TBB_SYMBOL( ??1concurrent_queue_base_v3@internal@tbb@@MAA@XZ )\n__TBB_SYMBOL( ?internal_pop@concurrent_queue_base_v3@internal@tbb@@IAAXPAX@Z )\n__TBB_SYMBOL( ?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IAA_NPAX@Z )\n__TBB_SYMBOL( ?internal_abort@concurrent_queue_base_v3@internal@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?internal_push@concurrent_queue_base_v3@internal@tbb@@IAAXPBX@Z )\n__TBB_SYMBOL( ?internal_push_move@concurrent_queue_base_v8@internal@tbb@@IAAXPBX@Z )\n__TBB_SYMBOL( ?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IAA_NPBX@Z )\n__TBB_SYMBOL( ?internal_push_move_if_not_full@concurrent_queue_base_v8@internal@tbb@@IAA_NPBX@Z )\n__TBB_SYMBOL( ?internal_size@concurrent_queue_base_v3@internal@tbb@@IBAHXZ )\n__TBB_SYMBOL( ?internal_empty@concurrent_queue_base_v3@internal@tbb@@IBA_NXZ )\n__TBB_SYMBOL( ?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IAAXHI@Z )\n__TBB_SYMBOL( ?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IAAXXZ )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IBAXXZ )\n__TBB_SYMBOL( ?assign@concurrent_queue_base_v3@internal@tbb@@IAAXABV123@@Z )\n__TBB_SYMBOL( ?move_content@concurrent_queue_base_v8@internal@tbb@@IAAXAAV123@@Z )\n\n#if !TBB_NO_LEGACY\n// concurrent_vector.cpp v2\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base@internal@tbb@@IAAXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base@internal@tbb@@IBAIXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base@internal@tbb@@IAAXP6AXPAXI@Z_N@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base@internal@tbb@@IAAXABV123@IP6AXPAXPBXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base@internal@tbb@@IAAIIIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IAAXIIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base@internal@tbb@@IAAPAXIAAI@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base@internal@tbb@@IAAXIII@Z )\n#endif\n\n// concurrent_vector v3\n__TBB_SYMBOL( ??1concurrent_vector_base_v3@internal@tbb@@IAA@XZ )\n__TBB_SYMBOL( ?internal_assign@concurrent_vector_base_v3@internal@tbb@@IAAXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z )\n__TBB_SYMBOL( ?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IBAIXZ )\n__TBB_SYMBOL( ?internal_clear@concurrent_vector_base_v3@internal@tbb@@IAAIP6AXPAXI@Z@Z )\n__TBB_SYMBOL( ?internal_copy@concurrent_vector_base_v3@internal@tbb@@IAAXABV123@IP6AXPAXPBXI@Z@Z )\n__TBB_SYMBOL( ?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IAAIIIP6AXPAXPBXI@Z1@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IAAXIIP6AXPAXPBXI@Z1@Z )\n__TBB_SYMBOL( ?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IAAPAXIAAI@Z )\n__TBB_SYMBOL( ?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IAAXIII@Z )\n__TBB_SYMBOL( ?internal_compact@concurrent_vector_base_v3@internal@tbb@@IAAPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z )\n__TBB_SYMBOL( ?internal_swap@concurrent_vector_base_v3@internal@tbb@@IAAXAAV123@@Z )\n__TBB_SYMBOL( ?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IBAXI@Z )\n__TBB_SYMBOL( ?internal_resize@concurrent_vector_base_v3@internal@tbb@@IAAXIIIPBXP6AXPAXI@ZP6AX10I@Z@Z )\n__TBB_SYMBOL( ?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IAAIIIP6AXPAXPBXI@Z1@Z )\n\n// tbb_thread\n__TBB_SYMBOL( ?join@tbb_thread_v3@internal@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?detach@tbb_thread_v3@internal@tbb@@QAAXXZ )\n__TBB_SYMBOL( ?internal_start@tbb_thread_v3@internal@tbb@@AAAXP6AIPAX@Z0@Z )\n__TBB_SYMBOL( ?allocate_closure_v3@internal@tbb@@YAPAXI@Z )\n__TBB_SYMBOL( ?free_closure_v3@internal@tbb@@YAXPAX@Z )\n__TBB_SYMBOL( ?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ )\n__TBB_SYMBOL( ?thread_yield_v3@internal@tbb@@YAXXZ )\n__TBB_SYMBOL( ?thread_sleep_v3@internal@tbb@@YAXABVinterval_t@tick_count@2@@Z )\n__TBB_SYMBOL( ?move_v3@internal@tbb@@YAXAAVtbb_thread_v3@12@0@Z )\n__TBB_SYMBOL( ?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ )\n\n// condition_variable\n__TBB_SYMBOL( ?internal_initialize_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_wait@internal@interface5@tbb@@YA_NAATcondvar_impl_t@123@PAVmutex@3@PBVinterval_t@tick_count@3@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_one@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_condition_variable_notify_all@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n__TBB_SYMBOL( ?internal_destroy_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z )\n\n#undef __TBB_SYMBOL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbb/x86_rtm_rw_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#if __TBB_TSX_AVAILABLE\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/tbb_machine.h\"\n#include \"itt_notify.h\"\n#include \"governor.h\"\n#include \"tbb/atomic.h\"\n\n// __TBB_RW_MUTEX_DELAY_TEST shifts the point where flags aborting speculation are\n// added to the read-set of the operation.  If 1, will add the test just before\n// the transaction is ended; this technique is called lazy subscription.\n// CAUTION: due to proven issues of lazy subscription, use of __TBB_RW_MUTEX_DELAY_TEST is discouraged!\n#ifndef __TBB_RW_MUTEX_DELAY_TEST\n    #define __TBB_RW_MUTEX_DELAY_TEST 0\n#endif\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\nnamespace interface8 {\nnamespace internal {\n\n// abort code for mutexes that detect a conflict with another thread.\n// value is hexadecimal\nenum {\n    speculation_transaction_aborted = 0x01,\n    speculation_can_retry           = 0x02,\n    speculation_memadd_conflict     = 0x04,\n    speculation_buffer_overflow     = 0x08,\n    speculation_breakpoint_hit      = 0x10,\n    speculation_nested_abort        = 0x20,\n    speculation_xabort_mask         = 0xFF000000,\n    speculation_xabort_shift        = 24,\n    speculation_retry               = speculation_transaction_aborted\n                                      | speculation_can_retry\n                                      | speculation_memadd_conflict\n};\n\n// maximum number of times to retry\n// TODO: experiment on retry values.\nstatic const int retry_threshold_read = 10;\nstatic const int retry_threshold_write = 10;\n\n//! Release speculative mutex\nvoid x86_rtm_rw_mutex::internal_release(x86_rtm_rw_mutex::scoped_lock& s) {\n    switch(s.transaction_state) {\n    case RTM_transacting_writer:\n    case RTM_transacting_reader:\n        {\n            __TBB_ASSERT(__TBB_machine_is_in_transaction(), \"transaction_state && not speculating\");\n#if __TBB_RW_MUTEX_DELAY_TEST\n            if(s.transaction_state == RTM_transacting_reader) {\n                if(this->w_flag) __TBB_machine_transaction_conflict_abort();\n            } else {\n                if(this->state) __TBB_machine_transaction_conflict_abort();\n            }\n#endif\n            __TBB_machine_end_transaction();\n            s.my_scoped_lock.internal_set_mutex(NULL);\n        }\n        break;\n    case RTM_real_reader:\n        __TBB_ASSERT(!this->w_flag, \"w_flag set but read lock acquired\");\n        s.my_scoped_lock.release();\n        break;\n    case RTM_real_writer:\n        __TBB_ASSERT(this->w_flag, \"w_flag unset but write lock acquired\");\n        this->w_flag = false;\n        s.my_scoped_lock.release();\n        break;\n    case RTM_not_in_mutex:\n        __TBB_ASSERT(false, \"RTM_not_in_mutex, but in release\");\n    default:\n        __TBB_ASSERT(false, \"invalid transaction_state\");\n    }\n    s.transaction_state = RTM_not_in_mutex;\n}\n\n//! Acquire write lock on the given mutex.\nvoid x86_rtm_rw_mutex::internal_acquire_writer(x86_rtm_rw_mutex::scoped_lock& s, bool only_speculate)\n{\n    __TBB_ASSERT(s.transaction_state == RTM_not_in_mutex, \"scoped_lock already in transaction\");\n    if(tbb::internal::governor::speculation_enabled()) {\n        int num_retries = 0;\n        unsigned int abort_code;\n        do {\n            tbb::internal::atomic_backoff backoff;\n            if(this->state) {\n                if(only_speculate) return;\n                do {\n                    backoff.pause();  // test the spin_rw_mutex (real readers or writers)\n                } while(this->state);\n            }\n            // _xbegin returns -1 on success or the abort code, so capture it\n            if(( abort_code = __TBB_machine_begin_transaction()) == ~(unsigned int)(0) )\n            {\n                // started speculation\n#if !__TBB_RW_MUTEX_DELAY_TEST\n                if(this->state) {  // add spin_rw_mutex to read-set.\n                    // reader or writer grabbed the lock, so abort.\n                    __TBB_machine_transaction_conflict_abort();\n                }\n#endif\n                s.transaction_state = RTM_transacting_writer;\n                s.my_scoped_lock.internal_set_mutex(this);  // need mutex for release()\n                return;  // successfully started speculation\n            }\n            ++num_retries;\n        } while( (abort_code & speculation_retry) != 0 && (num_retries < retry_threshold_write) );\n    }\n\n    if(only_speculate) return;              // should apply a real try_lock...\n    s.my_scoped_lock.acquire(*this, true);  // kill transactional writers\n    __TBB_ASSERT(!w_flag, \"After acquire for write, w_flag already true\");\n    w_flag = true;                          // kill transactional readers\n    s.transaction_state = RTM_real_writer;\n    return;\n}\n\n//! Acquire read lock on given mutex.\n//  only_speculate : true if we are doing a try_acquire.  If true and we fail to speculate, don't\n//     really acquire the lock, return and do a try_acquire on the contained spin_rw_mutex.  If\n//     the lock is already held by a writer, just return.\nvoid x86_rtm_rw_mutex::internal_acquire_reader(x86_rtm_rw_mutex::scoped_lock& s, bool only_speculate) {\n    __TBB_ASSERT(s.transaction_state == RTM_not_in_mutex, \"scoped_lock already in transaction\");\n    if(tbb::internal::governor::speculation_enabled()) {\n        int num_retries = 0;\n        unsigned int abort_code;\n        do {\n            tbb::internal::atomic_backoff backoff;\n            // if in try_acquire, and lock is held as writer, don't attempt to speculate.\n            if(w_flag) {\n                if(only_speculate) return;\n                do {\n                    backoff.pause();  // test the spin_rw_mutex (real readers or writers)\n                } while(w_flag);\n            }\n            // _xbegin returns -1 on success or the abort code, so capture it\n            if((abort_code = __TBB_machine_begin_transaction()) == ~(unsigned int)(0) )\n            {\n                // started speculation\n#if !__TBB_RW_MUTEX_DELAY_TEST\n                if(w_flag) {  // add w_flag to read-set.\n                    __TBB_machine_transaction_conflict_abort();  // writer grabbed the lock, so abort.\n                }\n#endif\n                s.transaction_state = RTM_transacting_reader;\n                s.my_scoped_lock.internal_set_mutex(this);  // need mutex for release()\n                return;  // successfully started speculation\n            }\n            // fallback path\n            // retry only if there is any hope of getting into a transaction soon\n            // Retry in the following cases (from Section 8.3.5 of Intel(R)\n            // Architecture Instruction Set Extensions Programming Reference):\n            // 1. abort caused by XABORT instruction (bit 0 of EAX register is set)\n            // 2. the transaction may succeed on a retry (bit 1 of EAX register is set)\n            // 3. if another logical processor conflicted with a memory address\n            //    that was part of the transaction that aborted (bit 2 of EAX register is set)\n            // That is, retry if (abort_code & 0x7) is non-zero\n            ++num_retries;\n        } while( (abort_code & speculation_retry) != 0 && (num_retries < retry_threshold_read) );\n    }\n\n    if(only_speculate) return;\n    s.my_scoped_lock.acquire( *this, false );\n    s.transaction_state = RTM_real_reader;\n}\n\n//! Upgrade reader to become a writer.\n/** Returns whether the upgrade happened without releasing and re-acquiring the lock */\nbool x86_rtm_rw_mutex::internal_upgrade(x86_rtm_rw_mutex::scoped_lock& s)\n{\n    switch(s.transaction_state) {\n    case RTM_real_reader: {\n            s.transaction_state = RTM_real_writer;\n            bool no_release = s.my_scoped_lock.upgrade_to_writer();\n            __TBB_ASSERT(!w_flag, \"After upgrade_to_writer, w_flag already true\");\n            w_flag = true;\n            return no_release;\n        }\n    case RTM_transacting_reader:\n#if !__TBB_RW_MUTEX_DELAY_TEST\n        if(this->state) {  // add spin_rw_mutex to read-set.\n            // Real reader or writer holds the lock; so commit the read and re-acquire for write.\n            internal_release(s);\n            internal_acquire_writer(s);\n            return false;\n        } else\n#endif\n        {\n            s.transaction_state = RTM_transacting_writer;\n            return true;\n        }\n    default:\n        __TBB_ASSERT(false, \"Invalid state for upgrade\");\n        return false;\n    }\n}\n\n//! Downgrade writer to a reader.\nbool x86_rtm_rw_mutex::internal_downgrade(x86_rtm_rw_mutex::scoped_lock& s) {\n    switch(s.transaction_state) {\n    case RTM_real_writer:\n        s.transaction_state = RTM_real_reader;\n        __TBB_ASSERT(w_flag, \"Before downgrade_to_reader w_flag not true\");\n        w_flag = false;\n        return s.my_scoped_lock.downgrade_to_reader();\n    case RTM_transacting_writer:\n#if __TBB_RW_MUTEX_DELAY_TEST\n        if(this->state) {  // a reader or writer has acquired mutex for real.\n            __TBB_machine_transaction_conflict_abort();\n        }\n#endif\n        s.transaction_state = RTM_transacting_reader;\n        return true;\n    default:\n        __TBB_ASSERT(false, \"Invalid state for downgrade\");\n        return false;\n    }\n}\n\n//! Try to acquire write lock on the given mutex.\n//  There may be reader(s) which acquired the spin_rw_mutex, as well as possibly\n//  transactional reader(s).  If this is the case, the acquire will fail, and assigning\n//  w_flag will kill the transactors.  So we only assign w_flag if we have successfully\n//  acquired the lock.\nbool x86_rtm_rw_mutex::internal_try_acquire_writer(x86_rtm_rw_mutex::scoped_lock& s)\n{\n    internal_acquire_writer(s, /*only_speculate=*/true);\n    if(s.transaction_state == RTM_transacting_writer) {\n        return true;\n    }\n    __TBB_ASSERT(s.transaction_state == RTM_not_in_mutex, \"Trying to acquire writer which is already allocated\");\n    // transacting write acquire failed.  try_acquire the real mutex\n    bool result = s.my_scoped_lock.try_acquire(*this, true);\n    if(result) {\n        // only shoot down readers if we're not transacting ourselves\n        __TBB_ASSERT(!w_flag, \"After try_acquire_writer, w_flag already true\");\n        w_flag = true;\n        s.transaction_state = RTM_real_writer;\n    }\n    return result;\n}\n\nvoid x86_rtm_rw_mutex::internal_construct() {\n    ITT_SYNC_CREATE(this, _T(\"tbb::x86_rtm_rw_mutex\"), _T(\"\"));\n}\n\n} // namespace internal\n} // namespace interface8\n} // namespace tbb\n\n#endif /* __TBB_TSX_AVAILABLE */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/Customize.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_malloc_Customize_H_\n#define _TBB_malloc_Customize_H_\n\n// customizing MALLOC_ASSERT macro\n#include \"tbb/tbb_stddef.h\"\n#define MALLOC_ASSERT(assertion, message) __TBB_ASSERT(assertion, message)\n\n#ifndef MALLOC_DEBUG\n#define MALLOC_DEBUG TBB_USE_DEBUG\n#endif\n\n#include \"tbb/tbb_machine.h\"\n\n#if DO_ITT_NOTIFY\n#include \"tbb/itt_notify.h\"\n#define MALLOC_ITT_SYNC_PREPARE(pointer) ITT_NOTIFY(sync_prepare, (pointer))\n#define MALLOC_ITT_SYNC_ACQUIRED(pointer) ITT_NOTIFY(sync_acquired, (pointer))\n#define MALLOC_ITT_SYNC_RELEASING(pointer) ITT_NOTIFY(sync_releasing, (pointer))\n#define MALLOC_ITT_SYNC_CANCEL(pointer) ITT_NOTIFY(sync_cancel, (pointer))\n#define MALLOC_ITT_FINI_ITTLIB()        ITT_FINI_ITTLIB()\n#else\n#define MALLOC_ITT_SYNC_PREPARE(pointer) ((void)0)\n#define MALLOC_ITT_SYNC_ACQUIRED(pointer) ((void)0)\n#define MALLOC_ITT_SYNC_RELEASING(pointer) ((void)0)\n#define MALLOC_ITT_SYNC_CANCEL(pointer) ((void)0)\n#define MALLOC_ITT_FINI_ITTLIB()        ((void)0)\n#endif\n\n//! Stripped down version of spin_mutex.\n/** Instances of MallocMutex must be declared in memory that is zero-initialized.\n    There are no constructors.  This is a feature that lets it be\n    used in situations where the mutex might be used while file-scope constructors\n    are running.\n\n    There are no methods \"acquire\" or \"release\".  The scoped_lock must be used\n    in a strict block-scoped locking pattern.  Omitting these methods permitted\n    further simplification. */\nclass MallocMutex : tbb::internal::no_copy {\n    __TBB_atomic_flag flag;\n\npublic:\n    class scoped_lock : tbb::internal::no_copy {\n        MallocMutex& mutex;\n        bool taken;\n    public:\n        scoped_lock( MallocMutex& m ) : mutex(m), taken(true) { __TBB_LockByte(m.flag); }\n        scoped_lock( MallocMutex& m, bool block, bool *locked ) : mutex(m), taken(false) {\n            if (block) {\n                __TBB_LockByte(m.flag);\n                taken = true;\n            } else {\n                taken = __TBB_TryLockByte(m.flag);\n            }\n            if (locked) *locked = taken;\n        }\n        ~scoped_lock() {\n            if (taken) __TBB_UnlockByte(mutex.flag);\n        }\n    };\n    friend class scoped_lock;\n};\n\n// TODO: use signed/unsigned in atomics more consistently\ninline intptr_t AtomicIncrement( volatile intptr_t& counter ) {\n    return __TBB_FetchAndAddW( &counter, 1 )+1;\n}\n\ninline uintptr_t AtomicAdd( volatile intptr_t& counter, intptr_t value ) {\n    return __TBB_FetchAndAddW( &counter, value );\n}\n\ninline intptr_t AtomicCompareExchange( volatile intptr_t& location, intptr_t new_value, intptr_t comparand) {\n    return __TBB_CompareAndSwapW( &location, new_value, comparand );\n}\n\ninline uintptr_t AtomicFetchStore(volatile void* location, uintptr_t value) {\n    return __TBB_FetchAndStoreW(location, value);\n}\n\ninline void AtomicOr(volatile void *operand, uintptr_t addend) {\n    __TBB_AtomicOR(operand, addend);\n}\n\ninline void AtomicAnd(volatile void *operand, uintptr_t addend) {\n    __TBB_AtomicAND(operand, addend);\n}\n\ninline intptr_t FencedLoad( const volatile intptr_t &location ) {\n    return __TBB_load_with_acquire(location);\n}\n\ninline void FencedStore( volatile intptr_t &location, intptr_t value ) {\n    __TBB_store_with_release(location, value);\n}\n\ninline void SpinWaitWhileEq(const volatile intptr_t &location, const intptr_t value) {\n    tbb::internal::spin_wait_while_eq(location, value);\n}\n\nclass AtomicBackoff {\n    tbb::internal::atomic_backoff backoff;\npublic:\n    AtomicBackoff() {}\n    void pause() { backoff.pause(); }\n};\n\ninline void SpinWaitUntilEq(const volatile intptr_t &location, const intptr_t value) {\n    tbb::internal::spin_wait_until_eq(location, value);\n}\n\ninline intptr_t BitScanRev(uintptr_t x) {\n    return !x? -1 : __TBB_Log2(x);\n}\n\ntemplate<typename T>\nstatic inline bool isAligned(T* arg, uintptr_t alignment) {\n    return tbb::internal::is_aligned(arg,alignment);\n}\n\nstatic inline bool isPowerOfTwo(uintptr_t arg) {\n    return tbb::internal::is_power_of_two(arg);\n}\nstatic inline bool isPowerOfTwoAtLeast(uintptr_t arg, uintptr_t power2) {\n    return arg && tbb::internal::is_power_of_two_at_least(arg,power2);\n}\n\n#define MALLOC_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT(condition,msg)\n\n#define USE_DEFAULT_MEMORY_MAPPING 1\n\n// To support malloc replacement\n#include \"proxy.h\"\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n#define malloc_proxy __TBB_malloc_proxy\nextern \"C\" void * __TBB_malloc_proxy(size_t)  __attribute__ ((weak));\n#elif MALLOC_ZONE_OVERLOAD_ENABLED\n// as there is no significant overhead, always suppose that proxy can be present\nconst bool malloc_proxy = true;\n#else\nconst bool malloc_proxy = false;\n#endif\n\nnamespace rml {\nnamespace internal {\n    void init_tbbmalloc();\n} } // namespaces\n\n#define MALLOC_EXTRA_INITIALIZATION rml::internal::init_tbbmalloc()\n\n// Need these to work regardless of tools support.\nnamespace tbb {\n    namespace internal {\n\n        enum notify_type {prepare=0, cancel, acquired, releasing};\n\n#if TBB_USE_THREADING_TOOLS\n        inline void call_itt_notify(notify_type t, void *ptr) {\n            switch ( t ) {\n            case prepare:\n                MALLOC_ITT_SYNC_PREPARE( ptr );\n                break;\n            case cancel:\n                MALLOC_ITT_SYNC_CANCEL( ptr );\n                break;\n            case acquired:\n                MALLOC_ITT_SYNC_ACQUIRED( ptr );\n                break;\n            case releasing:\n                MALLOC_ITT_SYNC_RELEASING( ptr );\n                break;\n            }\n        }\n#else\n        inline void call_itt_notify(notify_type /*t*/, void * /*ptr*/) {}\n#endif // TBB_USE_THREADING_TOOLS\n\n        template <typename T>\n        inline void itt_store_word_with_release(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            call_itt_notify(releasing, &dst);\n#endif // TBB_USE_THREADING_TOOLS\n            FencedStore(*(intptr_t*)&dst, src);\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(T& src) {\n            T result = FencedLoad(*(intptr_t*)&src);\n#if TBB_USE_THREADING_TOOLS\n            call_itt_notify(acquired, &src);\n#endif // TBB_USE_THREADING_TOOLS\n            return result;\n\n        }\n    } // namespace internal\n} // namespace tbb\n\n#include \"tbb/internal/_aggregator_impl.h\"\n\ntemplate <typename OperationType>\nstruct MallocAggregator {\n    typedef tbb::internal::aggregator_generic<OperationType> type;\n};\n\n//! aggregated_operation base class\ntemplate <typename Derived>\nstruct MallocAggregatedOperation {\n    typedef tbb::internal::aggregated_operation<Derived> type;\n};\n\n#endif /* _TBB_malloc_Customize_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/MapMemory.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _itt_shared_malloc_MapMemory_H\n#define _itt_shared_malloc_MapMemory_H\n\n#include <stdlib.h>\n\nvoid *ErrnoPreservingMalloc(size_t bytes)\n{\n    int prevErrno = errno;\n    void *ret = malloc( bytes );\n    if (!ret)\n        errno = prevErrno;\n    return ret;\n}\n\n#if __linux__ || __APPLE__ || __sun || __FreeBSD__\n\n#if __sun && !defined(_XPG4_2)\n // To have void* as mmap's 1st argument\n #define _XPG4_2 1\n #define XPG4_WAS_DEFINED 1\n#endif\n\n#include <sys/mman.h>\n#if __linux__\n/* __TBB_MAP_HUGETLB is MAP_HUGETLB from system header linux/mman.h.\n   The header is not included here, as on some Linux flavors inclusion of\n   linux/mman.h leads to compilation error,\n   while changing of MAP_HUGETLB is highly unexpected.\n*/\n#define __TBB_MAP_HUGETLB 0x40000\n#else\n#define __TBB_MAP_HUGETLB 0\n#endif\n\n#if XPG4_WAS_DEFINED\n #undef _XPG4_2\n #undef XPG4_WAS_DEFINED\n#endif\n\ninline void* mmap_impl(size_t map_size, void* map_hint = NULL, int map_flags = 0) {\n#ifndef MAP_ANONYMOUS\n// macOS* defines MAP_ANON, which is deprecated in Linux*.\n#define MAP_ANONYMOUS MAP_ANON\n#endif /* MAP_ANONYMOUS */\n    return mmap(map_hint, map_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | map_flags, -1, 0);\n}\n\ninline void* mmapTHP(size_t bytes) {\n    // Initializes in zero-initialized data section\n    static void* hint;\n\n    // Optimistically try to use a last huge page aligned region end\n    // as a hint for mmap.\n    hint = hint ? (void*)((uintptr_t)hint - bytes) : hint;\n    void* result = mmap_impl(bytes, hint);\n\n    // Something went wrong\n    if (result == MAP_FAILED) {\n        hint = NULL;\n        return MAP_FAILED;\n    }\n\n    // Otherwise, fall back to the slow path - map oversized region\n    // and trim excess parts.\n    if (!isAligned(result, HUGE_PAGE_SIZE)) {\n        // Undo previous try\n        munmap(result, bytes);\n\n        // Map oversized on huge page size region\n        result = mmap_impl(bytes + HUGE_PAGE_SIZE);\n\n        // Something went wrong\n        if (result == MAP_FAILED) {\n            hint = NULL;\n            return MAP_FAILED;\n        }\n\n        // Misalignment offset\n        uintptr_t offset = 0;\n\n        if (!isAligned(result, HUGE_PAGE_SIZE)) {\n            // Trim excess head of a region if it is no aligned\n            offset = HUGE_PAGE_SIZE - ((uintptr_t)result & (HUGE_PAGE_SIZE - 1));\n            munmap(result, offset);\n\n            // New region begining\n            result = (void*)((uintptr_t)result + offset);\n        }\n\n        // Trim excess tail of a region\n        munmap((void*)((uintptr_t)result + bytes), HUGE_PAGE_SIZE - offset);\n    }\n\n    // Assume, that mmap virtual addresses grow down by default\n    // So, set a hint as a result of a last successfull allocation\n    // and then use it minus requested size as a new mapping point.\n    // TODO: Atomic store is meant here, fence not needed, but\n    // currently we don't have such function.\n    hint = result;\n\n    MALLOC_ASSERT(isAligned(result, HUGE_PAGE_SIZE), \"Mapped address is not aligned on huge page size.\");\n\n    return result;\n}\n\n#define MEMORY_MAPPING_USES_MALLOC 0\nvoid* MapMemory (size_t bytes, PageType pageType)\n{\n    void* result = 0;\n    int prevErrno = errno;\n\n    switch (pageType) {\n        case REGULAR:\n        {\n            result = mmap_impl(bytes);\n            break;\n        }\n        case PREALLOCATED_HUGE_PAGE:\n        {\n            MALLOC_ASSERT((bytes % HUGE_PAGE_SIZE) == 0, \"Mapping size should be divisible by huge page size\");\n            result = mmap_impl(bytes, NULL, __TBB_MAP_HUGETLB);\n            break;\n        }\n        case TRANSPARENT_HUGE_PAGE:\n        {\n            MALLOC_ASSERT((bytes % HUGE_PAGE_SIZE) == 0, \"Mapping size should be divisible by huge page size\");\n            result = mmapTHP(bytes);\n            break;\n        }\n        default:\n        {\n            MALLOC_ASSERT(NULL, \"Unknown page type\");\n        }\n    }\n\n    if (result == MAP_FAILED) {\n        errno = prevErrno;\n        return 0;\n    }\n\n    return result;\n}\n\nint UnmapMemory(void *area, size_t bytes)\n{\n    int prevErrno = errno;\n    int ret = munmap(area, bytes);\n    if (-1 == ret)\n        errno = prevErrno;\n    return ret;\n}\n\n#elif (_WIN32 || _WIN64) && !__TBB_WIN8UI_SUPPORT\n#include <windows.h>\n\n#define MEMORY_MAPPING_USES_MALLOC 0\nvoid* MapMemory (size_t bytes, PageType)\n{\n    /* Is VirtualAlloc thread safe? */\n    return VirtualAlloc(NULL, bytes, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);\n}\n\nint UnmapMemory(void *area, size_t /*bytes*/)\n{\n    BOOL result = VirtualFree(area, 0, MEM_RELEASE);\n    return !result;\n}\n\n#else\n\n#define MEMORY_MAPPING_USES_MALLOC 1\nvoid* MapMemory (size_t bytes, PageType)\n{\n    return ErrnoPreservingMalloc( bytes );\n}\n\nint UnmapMemory(void *area, size_t /*bytes*/)\n{\n    free( area );\n    return 0;\n}\n\n#endif /* OS dependent */\n\n#if MALLOC_CHECK_RECURSION && MEMORY_MAPPING_USES_MALLOC\n#error Impossible to protect against malloc recursion when memory mapping uses malloc.\n#endif\n\n#endif /* _itt_shared_malloc_MapMemory_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/Statistics.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define MAX_THREADS 1024\n#define NUM_OF_BINS 30\n#define ThreadCommonCounters NUM_OF_BINS\n\nenum counter_type {\n    allocBlockNew = 0,\n    allocBlockPublic,\n    allocBumpPtrUsed,\n    allocFreeListUsed,\n    allocPrivatized,\n    examineEmptyEnough,\n    examineNotEmpty,\n    freeRestoreBumpPtr,\n    freeByOtherThread,\n    freeToActiveBlock,\n    freeToInactiveBlock,\n    freeBlockPublic,\n    freeBlockBack,\n    MaxCounters\n};\nenum common_counter_type {\n    allocNewLargeObj = 0,\n    allocCachedLargeObj,\n    cacheLargeObj,\n    freeLargeObj,\n    lockPublicFreeList,\n    freeToOtherThread\n};\n\n#if COLLECT_STATISTICS\n/* Statistics reporting callback registered via a static object dtor\n   on Posix or DLL_PROCESS_DETACH on Windows.\n */\n\nstatic bool reportAllocationStatistics;\n\nstruct bin_counters {\n    int counter[MaxCounters];\n};\n\nstatic bin_counters statistic[MAX_THREADS][NUM_OF_BINS+1]; //zero-initialized;\n\nstatic inline int STAT_increment(int thread, int bin, int ctr)\n{\n    return reportAllocationStatistics && thread < MAX_THREADS ? ++(statistic[thread][bin].counter[ctr]) : 0;\n}\n\nstatic inline void initStatisticsCollection() {\n#if defined(MALLOCENV_COLLECT_STATISTICS)\n    if (NULL != getenv(MALLOCENV_COLLECT_STATISTICS))\n        reportAllocationStatistics = true;\n#endif\n}\n\n#else\n#define STAT_increment(a,b,c) ((void)0)\n#endif /* COLLECT_STATISTICS */\n\n#if COLLECT_STATISTICS\nstatic inline void STAT_print(int thread)\n{\n    if (!reportAllocationStatistics)\n        return;\n\n    char filename[100];\n#if USE_PTHREAD\n    sprintf(filename, \"stat_ScalableMalloc_proc%04d_thr%04d.log\", getpid(), thread);\n#else\n    sprintf(filename, \"stat_ScalableMalloc_thr%04d.log\", thread);\n#endif\n    FILE* outfile = fopen(filename, \"w\");\n    for(int i=0; i<NUM_OF_BINS; ++i)\n    {\n        bin_counters& ctrs = statistic[thread][i];\n        fprintf(outfile, \"Thr%04d Bin%02d\", thread, i);\n        fprintf(outfile, \": allocNewBlocks %5d\", ctrs.counter[allocBlockNew]);\n        fprintf(outfile, \", allocPublicBlocks %5d\", ctrs.counter[allocBlockPublic]);\n        fprintf(outfile, \", restoreBumpPtr %5d\", ctrs.counter[freeRestoreBumpPtr]);\n        fprintf(outfile, \", privatizeCalled %10d\", ctrs.counter[allocPrivatized]);\n        fprintf(outfile, \", emptyEnough %10d\", ctrs.counter[examineEmptyEnough]);\n        fprintf(outfile, \", notEmptyEnough %10d\", ctrs.counter[examineNotEmpty]);\n        fprintf(outfile, \", freeBlocksPublic %5d\", ctrs.counter[freeBlockPublic]);\n        fprintf(outfile, \", freeBlocksBack %5d\", ctrs.counter[freeBlockBack]);\n        fprintf(outfile, \"\\n\");\n    }\n    for(int i=0; i<NUM_OF_BINS; ++i)\n    {\n        bin_counters& ctrs = statistic[thread][i];\n        fprintf(outfile, \"Thr%04d Bin%02d\", thread, i);\n        fprintf(outfile, \": allocBumpPtr %10d\", ctrs.counter[allocBumpPtrUsed]);\n        fprintf(outfile, \", allocFreeList %10d\", ctrs.counter[allocFreeListUsed]);\n        fprintf(outfile, \", freeToActiveBlk %10d\", ctrs.counter[freeToActiveBlock]);\n        fprintf(outfile, \", freeToInactive  %10d\", ctrs.counter[freeToInactiveBlock]);\n        fprintf(outfile, \", freedByOther %10d\", ctrs.counter[freeByOtherThread]);\n        fprintf(outfile, \"\\n\");\n    }\n    bin_counters& ctrs = statistic[thread][ThreadCommonCounters];\n    fprintf(outfile, \"Thr%04d common counters\", thread);\n    fprintf(outfile, \": allocNewLargeObject %5d\", ctrs.counter[allocNewLargeObj]);\n    fprintf(outfile, \": allocCachedLargeObject %5d\", ctrs.counter[allocCachedLargeObj]);\n    fprintf(outfile, \", cacheLargeObject %5d\", ctrs.counter[cacheLargeObj]);\n    fprintf(outfile, \", freeLargeObject %5d\", ctrs.counter[freeLargeObj]);\n    fprintf(outfile, \", lockPublicFreeList %5d\", ctrs.counter[lockPublicFreeList]);\n    fprintf(outfile, \", freeToOtherThread %10d\", ctrs.counter[freeToOtherThread]);\n    fprintf(outfile, \"\\n\");\n\n    fclose(outfile);\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/TypeDefinitions.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _itt_shared_malloc_TypeDefinitions_H_\n#define _itt_shared_malloc_TypeDefinitions_H_\n\n// Define preprocessor symbols used to determine architecture\n#if _WIN32||_WIN64\n#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support\n#       define __ARCH_x86_64 1\n#   elif defined(_M_IA64)\n#       define __ARCH_ipf 1\n#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support\n#       define __ARCH_x86_32 1\n#   elif defined(_M_ARM)\n#       define __ARCH_other 1\n#   else\n#       error Unknown processor architecture for Windows\n#   endif\n#   define USE_WINTHREAD 1\n#else /* Assume generic Unix */\n#   if __x86_64__\n#       define __ARCH_x86_64 1\n#   elif __ia64__\n#       define __ARCH_ipf 1\n#   elif __i386__ || __i386\n#       define __ARCH_x86_32 1\n#   else\n#       define __ARCH_other 1\n#   endif\n#   define USE_PTHREAD 1\n#endif\n\n// According to C99 standard INTPTR_MIN defined for C++\n// iff __STDC_LIMIT_MACROS pre-defined\n#ifndef __STDC_LIMIT_MACROS\n#define __STDC_LIMIT_MACROS 1\n#endif\n\n//! PROVIDE YOUR OWN Customize.h IF YOU FEEL NECESSARY\n#include \"Customize.h\"\n\n#include \"shared_utils.h\"\n\n#endif /* _itt_shared_malloc_TypeDefinitions_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/backend.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <string.h>   /* for memset */\n#include <errno.h>\n#include \"tbbmalloc_internal.h\"\n\nnamespace rml {\nnamespace internal {\n\n/*********** Code to acquire memory from the OS or other executive ****************/\n\n/*\n  syscall/malloc can set non-zero errno in case of failure,\n  but later allocator might be able to find memory to fulfill the request.\n  And we do not want changing of errno by successful scalable_malloc call.\n  To support this, restore old errno in (get|free)RawMemory, and set errno\n  in frontend just before returning to user code.\n  Please note: every syscall/libc call used inside scalable_malloc that\n  sets errno must be protected this way, not just memory allocation per se.\n*/\n\n#if USE_DEFAULT_MEMORY_MAPPING\n#include \"MapMemory.h\"\n#else\n/* assume MapMemory and UnmapMemory are customized */\n#endif\n\nvoid* getRawMemory (size_t size, PageType pageType) {\n    return MapMemory(size, pageType);\n}\n\nint freeRawMemory (void *object, size_t size) {\n    return UnmapMemory(object, size);\n}\n\n#if CHECK_ALLOCATION_RANGE\n\nvoid Backend::UsedAddressRange::registerAlloc(uintptr_t left, uintptr_t right)\n{\n    MallocMutex::scoped_lock lock(mutex);\n    if (left < leftBound)\n        leftBound = left;\n    if (right > rightBound)\n        rightBound = right;\n    MALLOC_ASSERT(leftBound, ASSERT_TEXT);\n    MALLOC_ASSERT(leftBound < rightBound, ASSERT_TEXT);\n    MALLOC_ASSERT(leftBound <= left && right <= rightBound, ASSERT_TEXT);\n}\n\nvoid Backend::UsedAddressRange::registerFree(uintptr_t left, uintptr_t right)\n{\n    MallocMutex::scoped_lock lock(mutex);\n    if (leftBound == left) {\n        if (rightBound == right) {\n            leftBound = ADDRESS_UPPER_BOUND;\n            rightBound = 0;\n        } else\n            leftBound = right;\n    } else if (rightBound == right)\n        rightBound = left;\n    MALLOC_ASSERT((!rightBound && leftBound == ADDRESS_UPPER_BOUND)\n                  || leftBound < rightBound, ASSERT_TEXT);\n}\n#endif // CHECK_ALLOCATION_RANGE\n\n// Initialized in frontend inside defaultMemPool\nextern HugePagesStatus hugePages;\n\nvoid *Backend::allocRawMem(size_t &size)\n{\n    void *res = NULL;\n    size_t allocSize;\n\n    if (extMemPool->userPool()) {\n        if (extMemPool->fixedPool && bootsrapMemDone == FencedLoad(bootsrapMemStatus))\n            return NULL;\n        MALLOC_ASSERT(bootsrapMemStatus != bootsrapMemNotDone,\n                      \"Backend::allocRawMem() called prematurely?\");\n        // TODO: support for raw mem not aligned at sizeof(uintptr_t)\n        // memory from fixed pool is asked once and only once\n        allocSize = alignUpGeneric(size, extMemPool->granularity);\n        res = (*extMemPool->rawAlloc)(extMemPool->poolId, allocSize);\n    } else {\n        // Align allocation on page size\n        size_t pageSize = hugePages.isEnabled ? hugePages.getGranularity() : extMemPool->granularity;\n        allocSize = alignUpGeneric(size, pageSize);\n\n        // If user requested huge pages and they are available, try to use preallocated ones firstly.\n        // If there are none, lets check transparent huge pages support and use them instead.\n        if (hugePages.isEnabled) {\n            if (hugePages.isHPAvailable) {\n                res = getRawMemory(allocSize, PREALLOCATED_HUGE_PAGE);\n            }\n            if (!res && hugePages.isTHPAvailable) {\n                res = getRawMemory(allocSize, TRANSPARENT_HUGE_PAGE);\n            }\n        }\n\n        if (!res) {\n            res = getRawMemory(allocSize, REGULAR);\n        }\n    }\n\n    if (res) {\n        MALLOC_ASSERT(allocSize > 0, \"Invalid size of an allocated region.\");\n        size = allocSize;\n        if (!extMemPool->userPool())\n            usedAddrRange.registerAlloc((uintptr_t)res, (uintptr_t)res+size);\n#if MALLOC_DEBUG\n        volatile size_t curTotalSize = totalMemSize; // to read global value once\n        MALLOC_ASSERT(curTotalSize+size > curTotalSize, \"Overflow allocation size.\");\n#endif\n        AtomicAdd((intptr_t&)totalMemSize, size);\n    }\n\n    return res;\n}\n\nbool Backend::freeRawMem(void *object, size_t size)\n{\n    bool fail;\n#if MALLOC_DEBUG\n    volatile size_t curTotalSize = totalMemSize; // to read global value once\n    MALLOC_ASSERT(curTotalSize-size < curTotalSize, \"Negative allocation size.\");\n#endif\n    AtomicAdd((intptr_t&)totalMemSize, -size);\n    if (extMemPool->userPool()) {\n        MALLOC_ASSERT(!extMemPool->fixedPool, \"No free for fixed-size pools.\");\n        fail = (*extMemPool->rawFree)(extMemPool->poolId, object, size);\n    } else {\n        usedAddrRange.registerFree((uintptr_t)object, (uintptr_t)object + size);\n        fail = freeRawMemory(object, size);\n    }\n    // TODO: use result in all freeRawMem() callers\n    return !fail;\n}\n\n/********* End memory acquisition code ********************************/\n\n// Protected object size. After successful locking returns size of locked block,\n// and releasing requires setting block size.\nclass GuardedSize : tbb::internal::no_copy {\n    uintptr_t value;\npublic:\n    enum State {\n        LOCKED,\n        COAL_BLOCK,        // block is coalescing now\n        MAX_LOCKED_VAL = COAL_BLOCK,\n        LAST_REGION_BLOCK, // used to mark last block in region\n        // values after this are \"normal\" block sizes\n        MAX_SPEC_VAL = LAST_REGION_BLOCK\n    };\n\n    void initLocked() { value = LOCKED; }\n    void makeCoalscing() {\n        MALLOC_ASSERT(value == LOCKED, ASSERT_TEXT);\n        value = COAL_BLOCK;\n    }\n    size_t tryLock(State state) {\n        size_t szVal, sz;\n        MALLOC_ASSERT(state <= MAX_LOCKED_VAL, ASSERT_TEXT);\n        for (;;) {\n            sz = FencedLoad((intptr_t&)value);\n            if (sz <= MAX_LOCKED_VAL)\n                break;\n            szVal = AtomicCompareExchange((intptr_t&)value, state, sz);\n\n            if (szVal==sz)\n                break;\n        }\n        return sz;\n    }\n    void unlock(size_t size) {\n        MALLOC_ASSERT(value <= MAX_LOCKED_VAL, \"The lock is not locked\");\n        MALLOC_ASSERT(size > MAX_LOCKED_VAL, ASSERT_TEXT);\n        FencedStore((intptr_t&)value, size);\n    }\n    bool isLastRegionBlock() const { return value==LAST_REGION_BLOCK; }\n    friend void Backend::IndexedBins::verify();\n};\n\nstruct MemRegion {\n    MemRegion *next,      // keep all regions in any pool to release all them on\n              *prev;      // pool destroying, 2-linked list to release individual\n                          // regions.\n    size_t     allocSz,   // got from pool callback\n               blockSz;   // initial and maximal inner block size\n    MemRegionType type;\n};\n\n// this data must be unmodified while block is in use, so separate it\nclass BlockMutexes {\nprotected:\n    GuardedSize myL,   // lock for me\n                leftL; // lock for left neighbor\n};\n\nclass FreeBlock : BlockMutexes {\npublic:\n    static const size_t minBlockSize;\n    friend void Backend::IndexedBins::verify();\n\n    FreeBlock    *prev,       // in 2-linked list related to bin\n                 *next,\n                 *nextToFree; // used to form a queue during coalescing\n    // valid only when block is in processing, i.e. one is not free and not\n    size_t        sizeTmp;    // used outside of backend\n    int           myBin;      // bin that is owner of the block\n    bool          aligned;\n    bool          blockInBin; // this block in myBin already\n\n    FreeBlock *rightNeig(size_t sz) const {\n        MALLOC_ASSERT(sz, ASSERT_TEXT);\n        return (FreeBlock*)((uintptr_t)this+sz);\n    }\n    FreeBlock *leftNeig(size_t sz) const {\n        MALLOC_ASSERT(sz, ASSERT_TEXT);\n        return (FreeBlock*)((uintptr_t)this - sz);\n    }\n\n    void initHeader() { myL.initLocked(); leftL.initLocked(); }\n    void setMeFree(size_t size) { myL.unlock(size); }\n    size_t trySetMeUsed(GuardedSize::State s) { return myL.tryLock(s); }\n    bool isLastRegionBlock() const { return myL.isLastRegionBlock(); }\n\n    void setLeftFree(size_t sz) { leftL.unlock(sz); }\n    size_t trySetLeftUsed(GuardedSize::State s) { return leftL.tryLock(s); }\n\n    size_t tryLockBlock() {\n        size_t rSz, sz = trySetMeUsed(GuardedSize::LOCKED);\n\n        if (sz <= GuardedSize::MAX_LOCKED_VAL)\n            return false;\n        rSz = rightNeig(sz)->trySetLeftUsed(GuardedSize::LOCKED);\n        if (rSz <= GuardedSize::MAX_LOCKED_VAL) {\n            setMeFree(sz);\n            return false;\n        }\n        MALLOC_ASSERT(rSz == sz, ASSERT_TEXT);\n        return sz;\n    }\n    void markCoalescing(size_t blockSz) {\n        myL.makeCoalscing();\n        rightNeig(blockSz)->leftL.makeCoalscing();\n        sizeTmp = blockSz;\n        nextToFree = NULL;\n    }\n    void markUsed() {\n        myL.initLocked();\n        rightNeig(sizeTmp)->leftL.initLocked();\n        nextToFree = NULL;\n    }\n    static void markBlocks(FreeBlock *fBlock, int num, size_t size) {\n        for (int i=1; i<num; i++) {\n            fBlock = (FreeBlock*)((uintptr_t)fBlock + size);\n            fBlock->initHeader();\n        }\n    }\n};\n\n// Last block in any region. Its \"size\" field is GuardedSize::LAST_REGION_BLOCK,\n// This kind of blocks used to find region header\n// and have a possibility to return region back to OS\nstruct LastFreeBlock : public FreeBlock {\n    MemRegion *memRegion;\n};\n\nconst size_t FreeBlock::minBlockSize = sizeof(FreeBlock);\n\ninline bool BackendSync::waitTillBlockReleased(intptr_t startModifiedCnt)\n{\n    AtomicBackoff backoff;\n#if __TBB_MALLOC_BACKEND_STAT\n    class ITT_Guard {\n        void *ptr;\n    public:\n        ITT_Guard(void *p) : ptr(p) {\n            MALLOC_ITT_SYNC_PREPARE(ptr);\n        }\n        ~ITT_Guard() {\n            MALLOC_ITT_SYNC_ACQUIRED(ptr);\n        }\n    };\n    ITT_Guard ittGuard(&inFlyBlocks);\n#endif\n    for (intptr_t myBinsInFlyBlocks = FencedLoad(inFlyBlocks),\n             myCoalescQInFlyBlocks = backend->blocksInCoalescing(); ;\n         backoff.pause()) {\n        MALLOC_ASSERT(myBinsInFlyBlocks>=0 && myCoalescQInFlyBlocks>=0, NULL);\n        intptr_t currBinsInFlyBlocks = FencedLoad(inFlyBlocks),\n            currCoalescQInFlyBlocks = backend->blocksInCoalescing();\n        WhiteboxTestingYield();\n        // Stop waiting iff:\n\n        // 1) blocks were removed from processing, not added\n        if (myBinsInFlyBlocks > currBinsInFlyBlocks\n        // 2) released during delayed coalescing queue\n            || myCoalescQInFlyBlocks > currCoalescQInFlyBlocks)\n            break;\n        // 3) if there are blocks in coalescing, and no progress in its processing,\n        // try to scan coalescing queue and stop waiting, if changes were made\n        // (if there are no changes and in-fly blocks exist, we continue\n        //  waiting to not increase load on coalescQ)\n        if (currCoalescQInFlyBlocks > 0 && backend->scanCoalescQ(/*forceCoalescQDrop=*/false))\n            break;\n        // 4) when there are no blocks\n        if (!currBinsInFlyBlocks && !currCoalescQInFlyBlocks)\n            // re-scan make sense only if bins were modified since scanned\n            return startModifiedCnt != getNumOfMods();\n        myBinsInFlyBlocks = currBinsInFlyBlocks;\n        myCoalescQInFlyBlocks = currCoalescQInFlyBlocks;\n    }\n    return true;\n}\n\nvoid CoalRequestQ::putBlock(FreeBlock *fBlock)\n{\n    MALLOC_ASSERT(fBlock->sizeTmp >= FreeBlock::minBlockSize, ASSERT_TEXT);\n    fBlock->markUsed();\n    // the block is in the queue, do not forget that it's here\n    AtomicIncrement(inFlyBlocks);\n\n    for (;;) {\n        FreeBlock *myBlToFree = (FreeBlock*)FencedLoad((intptr_t&)blocksToFree);\n\n        fBlock->nextToFree = myBlToFree;\n        if (myBlToFree ==\n            (FreeBlock*)AtomicCompareExchange((intptr_t&)blocksToFree,\n                                              (intptr_t)fBlock,\n                                              (intptr_t)myBlToFree))\n            return;\n    }\n}\n\nFreeBlock *CoalRequestQ::getAll()\n{\n    for (;;) {\n        FreeBlock *myBlToFree = (FreeBlock*)FencedLoad((intptr_t&)blocksToFree);\n\n        if (!myBlToFree)\n            return NULL;\n        else {\n            if (myBlToFree ==\n                (FreeBlock*)AtomicCompareExchange((intptr_t&)blocksToFree,\n                                                  0, (intptr_t)myBlToFree))\n                return myBlToFree;\n            else\n                continue;\n        }\n    }\n}\n\ninline void CoalRequestQ::blockWasProcessed()\n{\n    bkndSync->binsModified();\n    int prev = AtomicAdd(inFlyBlocks, -1);\n    MALLOC_ASSERT(prev > 0, ASSERT_TEXT);\n}\n\n// Try to get a block from a bin.\n// If the remaining free space would stay in the same bin,\n//     split the block without removing it.\n// If the free space should go to other bin(s), remove the block.\n// alignedBin is true, if all blocks in the bin have slab-aligned right side.\nFreeBlock *Backend::IndexedBins::getFromBin(int binIdx, BackendSync *sync,\n                size_t size, bool needAlignedRes, bool alignedBin, bool wait,\n                int *binLocked)\n{\n    Bin *b = &freeBins[binIdx];\ntry_next:\n    FreeBlock *fBlock = NULL;\n    if (b->head) {\n        bool locked;\n        MallocMutex::scoped_lock scopedLock(b->tLock, wait, &locked);\n\n        if (!locked) {\n            if (binLocked) (*binLocked)++;\n            return NULL;\n        }\n\n        for (FreeBlock *curr = b->head; curr; curr = curr->next) {\n            size_t szBlock = curr->tryLockBlock();\n            if (!szBlock) {\n                // block is locked, re-do bin lock, as there is no place to spin\n                // while block coalescing\n                goto try_next;\n            }\n\n            if (alignedBin || !needAlignedRes) {\n                size_t splitSz = szBlock - size;\n                // If we got a block as split result,\n                // it must have a room for control structures.\n                if (szBlock >= size && (splitSz >= FreeBlock::minBlockSize ||\n                                        !splitSz))\n                    fBlock = curr;\n            } else {\n                void *newB = alignUp(curr, slabSize);\n                uintptr_t rightNew = (uintptr_t)newB + size;\n                uintptr_t rightCurr = (uintptr_t)curr + szBlock;\n                // appropriate size, and left and right split results\n                // are either big enough or non-existent\n                if (rightNew <= rightCurr\n                    && (newB==curr ||\n                        (uintptr_t)newB-(uintptr_t)curr >= FreeBlock::minBlockSize)\n                    && (rightNew==rightCurr ||\n                        rightCurr - rightNew >= FreeBlock::minBlockSize))\n                    fBlock = curr;\n            }\n            if (fBlock) {\n                // consume must be called before result of removing from a bin\n                // is visible externally.\n                sync->blockConsumed();\n                if (alignedBin && needAlignedRes &&\n                    Backend::sizeToBin(szBlock-size) == Backend::sizeToBin(szBlock)) {\n                    // free remainder of fBlock stay in same bin,\n                    // so no need to remove it from the bin\n                    // TODO: add more \"still here\" cases\n                    FreeBlock *newFBlock = fBlock;\n                    // return block from right side of fBlock\n                    fBlock = (FreeBlock*)((uintptr_t)newFBlock + szBlock - size);\n                    MALLOC_ASSERT(isAligned(fBlock, slabSize), \"Invalid free block\");\n                    fBlock->initHeader();\n                    fBlock->setLeftFree(szBlock - size);\n                    newFBlock->setMeFree(szBlock - size);\n\n                    fBlock->sizeTmp = size;\n                } else {\n                    b->removeBlock(fBlock);\n                    if (freeBins[binIdx].empty())\n                        bitMask.set(binIdx, false);\n                    fBlock->sizeTmp = szBlock;\n                }\n                break;\n            } else { // block size is not valid, search for next block in the bin\n                curr->setMeFree(szBlock);\n                curr->rightNeig(szBlock)->setLeftFree(szBlock);\n            }\n        }\n    }\n    return fBlock;\n}\n\nbool Backend::IndexedBins::tryReleaseRegions(int binIdx, Backend *backend)\n{\n    Bin *b = &freeBins[binIdx];\n    FreeBlock *fBlockList = NULL;\n\n    // got all blocks from the bin and re-do coalesce on them\n    // to release single-block regions\ntry_next:\n    if (b->head) {\n        MallocMutex::scoped_lock binLock(b->tLock);\n        for (FreeBlock *curr = b->head; curr; ) {\n            size_t szBlock = curr->tryLockBlock();\n            if (!szBlock)\n                goto try_next;\n\n            FreeBlock *next = curr->next;\n\n            b->removeBlock(curr);\n            curr->sizeTmp = szBlock;\n            curr->nextToFree = fBlockList;\n            fBlockList = curr;\n            curr = next;\n        }\n    }\n    return backend->coalescAndPutList(fBlockList, /*forceCoalescQDrop=*/true,\n                                      /*reportBlocksProcessed=*/false);\n}\n\nvoid Backend::Bin::removeBlock(FreeBlock *fBlock)\n{\n    MALLOC_ASSERT(fBlock->next||fBlock->prev||fBlock==head,\n                  \"Detected that a block is not in the bin.\");\n    if (head == fBlock)\n        head = fBlock->next;\n    if (tail == fBlock)\n        tail = fBlock->prev;\n    if (fBlock->prev)\n        fBlock->prev->next = fBlock->next;\n    if (fBlock->next)\n        fBlock->next->prev = fBlock->prev;\n}\n\nvoid Backend::IndexedBins::addBlock(int binIdx, FreeBlock *fBlock, size_t blockSz, bool addToTail)\n{\n    Bin *b = &freeBins[binIdx];\n\n    fBlock->myBin = binIdx;\n    fBlock->aligned = toAlignedBin(fBlock, blockSz);\n    fBlock->next = fBlock->prev = NULL;\n    {\n        MallocMutex::scoped_lock scopedLock(b->tLock);\n        if (addToTail) {\n            fBlock->prev = b->tail;\n            b->tail = fBlock;\n            if (fBlock->prev)\n                fBlock->prev->next = fBlock;\n            if (!b->head)\n                b->head = fBlock;\n        } else {\n            fBlock->next = b->head;\n            b->head = fBlock;\n            if (fBlock->next)\n                fBlock->next->prev = fBlock;\n            if (!b->tail)\n                b->tail = fBlock;\n        }\n    }\n    bitMask.set(binIdx, true);\n}\n\nbool Backend::IndexedBins::tryAddBlock(int binIdx, FreeBlock *fBlock, bool addToTail)\n{\n    bool locked;\n    Bin *b = &freeBins[binIdx];\n\n    fBlock->myBin = binIdx;\n    fBlock->aligned = toAlignedBin(fBlock, fBlock->sizeTmp);\n    if (addToTail) {\n        fBlock->next = NULL;\n        {\n            MallocMutex::scoped_lock scopedLock(b->tLock, /*wait=*/false, &locked);\n            if (!locked)\n                return false;\n            fBlock->prev = b->tail;\n            b->tail = fBlock;\n            if (fBlock->prev)\n                fBlock->prev->next = fBlock;\n            if (!b->head)\n                b->head = fBlock;\n        }\n    } else {\n        fBlock->prev = NULL;\n        {\n            MallocMutex::scoped_lock scopedLock(b->tLock, /*wait=*/false, &locked);\n            if (!locked)\n                return false;\n            fBlock->next = b->head;\n            b->head = fBlock;\n            if (fBlock->next)\n                fBlock->next->prev = fBlock;\n            if (!b->tail)\n                b->tail = fBlock;\n        }\n    }\n    bitMask.set(binIdx, true);\n    return true;\n}\n\nvoid Backend::IndexedBins::reset()\n{\n    for (int i=0; i<Backend::freeBinsNum; i++)\n        freeBins[i].reset();\n    bitMask.reset();\n}\n\nvoid Backend::IndexedBins::lockRemoveBlock(int binIdx, FreeBlock *fBlock)\n{\n    MallocMutex::scoped_lock scopedLock(freeBins[binIdx].tLock);\n    freeBins[binIdx].removeBlock(fBlock);\n    if (freeBins[binIdx].empty())\n        bitMask.set(binIdx, false);\n}\n\nbool ExtMemoryPool::regionsAreReleaseable() const\n{\n    return !keepAllMemory && !delayRegsReleasing;\n}\n\nFreeBlock *Backend::splitUnalignedBlock(FreeBlock *fBlock, int num, size_t size,\n                                        bool needAlignedBlock)\n{\n    const size_t totalSize = num*size;\n    if (needAlignedBlock) {\n        size_t fBlockSz = fBlock->sizeTmp;\n        uintptr_t fBlockEnd = (uintptr_t)fBlock + fBlockSz;\n        FreeBlock *newB = alignUp(fBlock, slabSize);\n        FreeBlock *rightPart = (FreeBlock*)((uintptr_t)newB + totalSize);\n\n        // Space to use is in the middle,\n        // ... return free right part\n        if ((uintptr_t)rightPart != fBlockEnd) {\n            rightPart->initHeader();  // to prevent coalescing rightPart with fBlock\n            coalescAndPut(rightPart, fBlockEnd - (uintptr_t)rightPart);\n        }\n        // ... and free left part\n        if (newB != fBlock) {\n            newB->initHeader(); // to prevent coalescing fBlock with newB\n            coalescAndPut(fBlock, (uintptr_t)newB - (uintptr_t)fBlock);\n        }\n\n        fBlock = newB;\n        MALLOC_ASSERT(isAligned(fBlock, slabSize), ASSERT_TEXT);\n    } else {\n        if (size_t splitSz = fBlock->sizeTmp - totalSize) {\n            // split block and return free right part\n            FreeBlock *splitB = (FreeBlock*)((uintptr_t)fBlock + totalSize);\n            splitB->initHeader();\n            coalescAndPut(splitB, splitSz);\n        }\n    }\n    FreeBlock::markBlocks(fBlock, num, size);\n    return fBlock;\n}\n\nFreeBlock *Backend::splitAlignedBlock(FreeBlock *fBlock, int num, size_t size,\n                                      bool needAlignedBlock)\n{\n    if (fBlock->sizeTmp != num*size) { // i.e., need to split the block\n        FreeBlock *newAlgnd;\n        size_t newSz;\n\n        if (needAlignedBlock) {\n            newAlgnd = fBlock;\n            fBlock = (FreeBlock*)((uintptr_t)newAlgnd + newAlgnd->sizeTmp\n                                  - num*size);\n            MALLOC_ASSERT(isAligned(fBlock, slabSize), \"Invalid free block\");\n            fBlock->initHeader();\n            newSz = newAlgnd->sizeTmp - num*size;\n        } else {\n            newAlgnd = (FreeBlock*)((uintptr_t)fBlock + num*size);\n            newSz = fBlock->sizeTmp - num*size;\n            newAlgnd->initHeader();\n        }\n        coalescAndPut(newAlgnd, newSz);\n    }\n    MALLOC_ASSERT(!needAlignedBlock || isAligned(fBlock, slabSize),\n                  \"Expect to get aligned block, if one was requested.\");\n    FreeBlock::markBlocks(fBlock, num, size);\n    return fBlock;\n}\n\ninline size_t Backend::getMaxBinnedSize() const\n{\n    return hugePages.isEnabled && !inUserPool() ?\n        maxBinned_HugePage : maxBinned_SmallPage;\n}\n\ninline bool Backend::MaxRequestComparator::operator()(size_t oldMaxReq,\n                                                      size_t requestSize) const\n{\n    return requestSize > oldMaxReq && requestSize < backend->getMaxBinnedSize();\n}\n\n// last chance to get memory\nFreeBlock *Backend::releaseMemInCaches(intptr_t startModifiedCnt,\n                                    int *lockedBinsThreshold, int numOfLockedBins)\n{\n    // something released from caches\n    if (extMemPool->hardCachesCleanup()\n        // ..or can use blocks that are in processing now\n        || bkndSync.waitTillBlockReleased(startModifiedCnt))\n        return (FreeBlock*)VALID_BLOCK_IN_BIN;\n    // OS can't give us more memory, but we have some in locked bins\n    if (*lockedBinsThreshold && numOfLockedBins) {\n        *lockedBinsThreshold = 0;\n        return (FreeBlock*)VALID_BLOCK_IN_BIN;\n    }\n    return NULL; // nothing found, give up\n}\n\nFreeBlock *Backend::askMemFromOS(size_t blockSize, intptr_t startModifiedCnt,\n                                 int *lockedBinsThreshold, int numOfLockedBins,\n                                 bool *splittableRet)\n{\n    FreeBlock *block;\n    // The block sizes can be divided into 3 groups:\n    //   1. \"quite small\": popular object size, we are in bootstarp or something\n    //      like; request several regions.\n    //   2. \"quite large\": we want to have several such blocks in the region\n    //      but not want several pre-allocated regions.\n    //   3. \"huge\": exact fit, we allocate only one block and do not allow\n    //       any other allocations to placed in a region.\n    // Dividing the block sizes in these groups we are trying to balance between\n    // too small regions (that leads to fragmentation) and too large ones (that\n    // leads to excessive address space consumption). If a region is \"too\n    // large\", allocate only one, to prevent fragmentation. It supposedly\n    // doesn't hurt performance, because the object requested by user is large.\n    // Bounds for the groups are:\n    const size_t maxBinned = getMaxBinnedSize();\n    const size_t quiteSmall = maxBinned / 8;\n    const size_t quiteLarge = maxBinned;\n\n    if (blockSize >= quiteLarge) {\n        // Do not interact with other threads via semaphores, as for exact fit\n        // we can't share regions with them, memory requesting is individual.\n        block = addNewRegion(blockSize, MEMREG_ONE_BLOCK, /*addToBin=*/false);\n        if (!block)\n            return releaseMemInCaches(startModifiedCnt, lockedBinsThreshold, numOfLockedBins);\n        *splittableRet = false;\n    } else {\n        const size_t regSz_sizeBased = alignUp(4*maxRequestedSize, 1024*1024);\n        // Another thread is modifying backend while we can't get the block.\n        // Wait while it leaves and re-do the scan\n        // before trying other ways to extend the backend.\n        if (bkndSync.waitTillBlockReleased(startModifiedCnt)\n            // semaphore is protecting adding more more memory from OS\n            || memExtendingSema.wait())\n            return (FreeBlock*)VALID_BLOCK_IN_BIN;\n\n        if (startModifiedCnt != bkndSync.getNumOfMods()) {\n            memExtendingSema.signal();\n            return (FreeBlock*)VALID_BLOCK_IN_BIN;\n        }\n\n        if (blockSize < quiteSmall) {\n            // For this size of blocks, add NUM_OF_REG \"advance\" regions in bin,\n            // and return one as a result.\n            // TODO: add to bin first, because other threads can use them right away.\n            // This must be done carefully, because blocks in bins can be released\n            // in releaseCachesToLimit().\n            const unsigned NUM_OF_REG = 3;\n            block = addNewRegion(regSz_sizeBased, MEMREG_FLEXIBLE_SIZE, /*addToBin=*/false);\n            if (block)\n                for (unsigned idx=0; idx<NUM_OF_REG; idx++)\n                    if (! addNewRegion(regSz_sizeBased, MEMREG_FLEXIBLE_SIZE, /*addToBin=*/true))\n                        break;\n        } else {\n            block = addNewRegion(regSz_sizeBased, MEMREG_SEVERAL_BLOCKS, /*addToBin=*/false);\n        }\n        memExtendingSema.signal();\n\n        // no regions found, try to clean cache\n        if (!block || block == (FreeBlock*)VALID_BLOCK_IN_BIN)\n            return releaseMemInCaches(startModifiedCnt, lockedBinsThreshold, numOfLockedBins);\n        // Since a region can hold more than one block it can be splitted.\n        *splittableRet = true;\n    }\n    // after asking memory from OS, release caches if we above the memory limits\n    releaseCachesToLimit();\n\n    return block;\n}\n\nvoid Backend::releaseCachesToLimit()\n{\n    if (!memSoftLimit || totalMemSize <= memSoftLimit)\n        return;\n    size_t locTotalMemSize, locMemSoftLimit;\n\n    scanCoalescQ(/*forceCoalescQDrop=*/false);\n    if (extMemPool->softCachesCleanup() &&\n        (locTotalMemSize = FencedLoad((intptr_t&)totalMemSize)) <=\n        (locMemSoftLimit = FencedLoad((intptr_t&)memSoftLimit)))\n        return;\n    // clean global large-object cache, if this is not enough, clean local caches\n    // do this in several tries, because backend fragmentation can prevent\n    // region from releasing\n    for (int cleanLocal = 0; cleanLocal<2; cleanLocal++)\n        while (cleanLocal?\n               extMemPool->allLocalCaches.cleanup(extMemPool, /*cleanOnlyUnused=*/true)\n               : extMemPool->loc.decreasingCleanup())\n            if ((locTotalMemSize = FencedLoad((intptr_t&)totalMemSize)) <=\n                (locMemSoftLimit = FencedLoad((intptr_t&)memSoftLimit)))\n                return;\n    // last chance to match memSoftLimit\n    extMemPool->hardCachesCleanup();\n}\n\nFreeBlock *Backend::IndexedBins::\n    findBlock(int nativeBin, BackendSync *sync, size_t size,\n              bool resSlabAligned, bool alignedBin, int *numOfLockedBins)\n{\n    for (int i=getMinNonemptyBin(nativeBin); i<freeBinsNum; i=getMinNonemptyBin(i+1))\n        if (FreeBlock *block = getFromBin(i, sync, size, resSlabAligned, alignedBin,\n                                          /*wait=*/false, numOfLockedBins))\n            return block;\n\n    return NULL;\n}\n\nvoid Backend::requestBootstrapMem()\n{\n    if (bootsrapMemDone == FencedLoad(bootsrapMemStatus))\n        return;\n    MallocMutex::scoped_lock lock( bootsrapMemStatusMutex );\n    if (bootsrapMemDone == bootsrapMemStatus)\n        return;\n    MALLOC_ASSERT(bootsrapMemNotDone == bootsrapMemStatus, ASSERT_TEXT);\n    bootsrapMemStatus = bootsrapMemInitializing;\n    // request some rather big region during bootstrap in advance\n    // ok to get NULL here, as later we re-do a request with more modest size\n    addNewRegion(2*1024*1024, MEMREG_FLEXIBLE_SIZE, /*addToBin=*/true);\n    bootsrapMemStatus = bootsrapMemDone;\n}\n\n// try to allocate size Byte block in available bins\n// needAlignedRes is true if result must be slab-aligned\nFreeBlock *Backend::genericGetBlock(int num, size_t size, bool needAlignedBlock)\n{\n    FreeBlock *block = NULL;\n    const size_t totalReqSize = num*size;\n    // no splitting after requesting new region, asks exact size\n    const int nativeBin = sizeToBin(totalReqSize);\n\n    requestBootstrapMem();\n    // If we found 2 or less locked bins, it's time to ask more memory from OS.\n    // But nothing can be asked from fixed pool. And we prefer wait, not ask\n    // for more memory, if block is quite large.\n    int lockedBinsThreshold = extMemPool->fixedPool || size>=maxBinned_SmallPage? 0 : 2;\n\n    // Find maximal requested size limited by getMaxBinnedSize()\n    AtomicUpdate(maxRequestedSize, totalReqSize, MaxRequestComparator(this));\n    scanCoalescQ(/*forceCoalescQDrop=*/false);\n\n    bool splittable = true;\n    for (;;) {\n        const intptr_t startModifiedCnt = bkndSync.getNumOfMods();\n        int numOfLockedBins;\n\n        do {\n            numOfLockedBins = 0;\n\n            // TODO: try different bin search order\n            if (needAlignedBlock) {\n                block = freeAlignedBins.findBlock(nativeBin, &bkndSync, num*size,\n                                    /*needAlignedBlock=*/true, /*alignedBin=*/true,\n                                    &numOfLockedBins);\n                if (!block)\n                    block = freeLargeBins.findBlock(nativeBin, &bkndSync, num*size,\n                                    /*needAlignedBlock=*/true, /*alignedBin=*/false,\n                                    &numOfLockedBins);\n            } else {\n                block = freeLargeBins.findBlock(nativeBin, &bkndSync, num*size,\n                                    /*needAlignedBlock=*/false, /*alignedBin=*/false,\n                                    &numOfLockedBins);\n                if (!block)\n                    block = freeAlignedBins.findBlock(nativeBin, &bkndSync, num*size,\n                                    /*needAlignedBlock=*/false, /*alignedBin=*/true,\n                                    &numOfLockedBins);\n            }\n        } while (!block && numOfLockedBins>lockedBinsThreshold);\n\n        if (block)\n            break;\n\n        if (!(scanCoalescQ(/*forceCoalescQDrop=*/true)\n              | extMemPool->softCachesCleanup())) {\n            // bins are not updated,\n            // only remaining possibility is to ask for more memory\n            block =\n                askMemFromOS(totalReqSize, startModifiedCnt, &lockedBinsThreshold,\n                             numOfLockedBins, &splittable);\n            if (!block)\n                return NULL;\n            if (block != (FreeBlock*)VALID_BLOCK_IN_BIN) {\n                // size can be increased in askMemFromOS, that's why >=\n                MALLOC_ASSERT(block->sizeTmp >= size, ASSERT_TEXT);\n                break;\n            }\n            // valid block somewhere in bins, let's find it\n            block = NULL;\n        }\n    }\n    MALLOC_ASSERT(block, ASSERT_TEXT);\n    if (splittable)\n        block = toAlignedBin(block, block->sizeTmp)?\n            splitAlignedBlock(block, num, size, needAlignedBlock) :\n            splitUnalignedBlock(block, num, size, needAlignedBlock);\n    // matched blockConsumed() from startUseBlock()\n    bkndSync.blockReleased();\n\n    return block;\n}\n\nLargeMemoryBlock *Backend::getLargeBlock(size_t size)\n{\n    LargeMemoryBlock *lmb =\n        (LargeMemoryBlock*)genericGetBlock(1, size, /*needAlignedRes=*/false);\n    if (lmb) {\n        lmb->unalignedSize = size;\n        if (extMemPool->userPool())\n            extMemPool->lmbList.add(lmb);\n    }\n    return lmb;\n}\n\nvoid *Backend::getBackRefSpace(size_t size, bool *rawMemUsed)\n{\n    // This block is released only at shutdown, so it can prevent\n    // a entire region releasing when it's received from the backend,\n    // so prefer getRawMemory using.\n    if (void *ret = getRawMemory(size, REGULAR)) {\n        *rawMemUsed = true;\n        return ret;\n    }\n    void *ret = genericGetBlock(1, size, /*needAlignedRes=*/false);\n    if (ret) *rawMemUsed = false;\n    return ret;\n}\n\nvoid Backend::putBackRefSpace(void *b, size_t size, bool rawMemUsed)\n{\n    if (rawMemUsed)\n        freeRawMemory(b, size);\n    // ignore not raw mem, as it released on region releasing\n}\n\nvoid Backend::removeBlockFromBin(FreeBlock *fBlock)\n{\n    if (fBlock->myBin != Backend::NO_BIN) {\n        if (fBlock->aligned)\n            freeAlignedBins.lockRemoveBlock(fBlock->myBin, fBlock);\n        else\n            freeLargeBins.lockRemoveBlock(fBlock->myBin, fBlock);\n    }\n}\n\nvoid Backend::genericPutBlock(FreeBlock *fBlock, size_t blockSz)\n{\n    bkndSync.blockConsumed();\n    coalescAndPut(fBlock, blockSz);\n    bkndSync.blockReleased();\n}\n\nvoid AllLargeBlocksList::add(LargeMemoryBlock *lmb)\n{\n    MallocMutex::scoped_lock scoped_cs(largeObjLock);\n    lmb->gPrev = NULL;\n    lmb->gNext = loHead;\n    if (lmb->gNext)\n        lmb->gNext->gPrev = lmb;\n    loHead = lmb;\n}\n\nvoid AllLargeBlocksList::remove(LargeMemoryBlock *lmb)\n{\n    MallocMutex::scoped_lock scoped_cs(largeObjLock);\n    if (loHead == lmb)\n        loHead = lmb->gNext;\n    if (lmb->gNext)\n        lmb->gNext->gPrev = lmb->gPrev;\n    if (lmb->gPrev)\n        lmb->gPrev->gNext = lmb->gNext;\n}\n\nvoid Backend::putLargeBlock(LargeMemoryBlock *lmb)\n{\n    if (extMemPool->userPool())\n        extMemPool->lmbList.remove(lmb);\n    genericPutBlock((FreeBlock *)lmb, lmb->unalignedSize);\n}\n\nvoid Backend::returnLargeObject(LargeMemoryBlock *lmb)\n{\n    removeBackRef(lmb->backRefIdx);\n    putLargeBlock(lmb);\n    STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);\n}\n\n#if BACKEND_HAS_MREMAP\nvoid *Backend::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment)\n{\n    // no remap for user pools and for object too small that living in bins\n    if (inUserPool() || min(oldSize, newSize)<maxBinned_SmallPage\n        // during remap, can't guarantee alignment more strict than current or\n        // more strict than page alignment\n        || !isAligned(ptr, alignment) || alignment>extMemPool->granularity)\n        return NULL;\n    const LargeMemoryBlock* lmbOld = ((LargeObjectHdr *)ptr - 1)->memoryBlock;\n    const size_t oldUnalignedSize = lmbOld->unalignedSize;\n    FreeBlock *oldFBlock = (FreeBlock *)lmbOld;\n    FreeBlock *right = oldFBlock->rightNeig(oldUnalignedSize);\n    // in every region only one block can have LAST_REGION_BLOCK on right,\n    // so don't need no synchronization\n    if (!right->isLastRegionBlock())\n        return NULL;\n\n    MemRegion *oldRegion = static_cast<LastFreeBlock*>(right)->memRegion;\n    MALLOC_ASSERT( oldRegion < ptr, ASSERT_TEXT );\n    const size_t oldRegionSize = oldRegion->allocSz;\n    if (oldRegion->type != MEMREG_ONE_BLOCK)\n        return NULL;  // we are not single in the region\n    const size_t userOffset = (uintptr_t)ptr - (uintptr_t)oldRegion;\n    const size_t requestSize =\n        alignUp(userOffset + newSize + sizeof(LastFreeBlock), extMemPool->granularity);\n    if (requestSize < newSize) // is wrapped around?\n        return NULL;\n    regionList.remove(oldRegion);\n\n    void *ret = mremap(oldRegion, oldRegion->allocSz, requestSize, MREMAP_MAYMOVE);\n    if (MAP_FAILED == ret) { // can't remap, revert and leave\n        regionList.add(oldRegion);\n        return NULL;\n    }\n    MemRegion *region = (MemRegion*)ret;\n    MALLOC_ASSERT(region->type == MEMREG_ONE_BLOCK, ASSERT_TEXT);\n    region->allocSz = requestSize;\n\n    FreeBlock *fBlock = (FreeBlock *)alignUp((uintptr_t)region + sizeof(MemRegion),\n                                             largeObjectAlignment);\n    // put LastFreeBlock at the very end of region\n    const uintptr_t fBlockEnd = (uintptr_t)region + requestSize - sizeof(LastFreeBlock);\n    region->blockSz = fBlockEnd - (uintptr_t)fBlock;\n\n    regionList.add(region);\n    startUseBlock(region, fBlock, /*addToBin=*/false);\n    MALLOC_ASSERT(fBlock->sizeTmp == region->blockSz, ASSERT_TEXT);\n    // matched blockConsumed() in startUseBlock().\n    // TODO: get rid of useless pair blockConsumed()/blockReleased()\n    bkndSync.blockReleased();\n\n    // object must start at same offest from region's start\n    void *object = (void*)((uintptr_t)region + userOffset);\n    MALLOC_ASSERT(isAligned(object, alignment), ASSERT_TEXT);\n    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;\n    setBackRef(header->backRefIdx, header);\n\n    LargeMemoryBlock *lmb = (LargeMemoryBlock*)fBlock;\n    lmb->unalignedSize = region->blockSz;\n    lmb->objectSize = newSize;\n    lmb->backRefIdx = header->backRefIdx;\n    header->memoryBlock = lmb;\n    MALLOC_ASSERT((uintptr_t)lmb + lmb->unalignedSize >=\n                  (uintptr_t)object + lmb->objectSize, \"An object must fit to the block.\");\n\n    usedAddrRange.registerFree((uintptr_t)oldRegion, (uintptr_t)oldRegion + oldRegionSize);\n    usedAddrRange.registerAlloc((uintptr_t)region, (uintptr_t)region + requestSize);\n    AtomicAdd((intptr_t&)totalMemSize, region->allocSz - oldRegionSize);\n\n    return object;\n}\n#endif /* BACKEND_HAS_MREMAP */\n\nvoid Backend::releaseRegion(MemRegion *memRegion)\n{\n    regionList.remove(memRegion);\n    freeRawMem(memRegion, memRegion->allocSz);\n}\n\n// coalesce fBlock with its neighborhood\nFreeBlock *Backend::doCoalesc(FreeBlock *fBlock, MemRegion **mRegion)\n{\n    FreeBlock *resBlock = fBlock;\n    size_t resSize = fBlock->sizeTmp;\n    MemRegion *memRegion = NULL;\n\n    fBlock->markCoalescing(resSize);\n    resBlock->blockInBin = false;\n\n    // coalescing with left neighbor\n    size_t leftSz = fBlock->trySetLeftUsed(GuardedSize::COAL_BLOCK);\n    if (leftSz != GuardedSize::LOCKED) {\n        if (leftSz == GuardedSize::COAL_BLOCK) {\n            coalescQ.putBlock(fBlock);\n            return NULL;\n        } else {\n            FreeBlock *left = fBlock->leftNeig(leftSz);\n            size_t lSz = left->trySetMeUsed(GuardedSize::COAL_BLOCK);\n            if (lSz <= GuardedSize::MAX_LOCKED_VAL) {\n                fBlock->setLeftFree(leftSz); // rollback\n                coalescQ.putBlock(fBlock);\n                return NULL;\n            } else {\n                MALLOC_ASSERT(lSz == leftSz, \"Invalid header\");\n                left->blockInBin = true;\n                resBlock = left;\n                resSize += leftSz;\n                resBlock->sizeTmp = resSize;\n            }\n        }\n    }\n    // coalescing with right neighbor\n    FreeBlock *right = fBlock->rightNeig(fBlock->sizeTmp);\n    size_t rightSz = right->trySetMeUsed(GuardedSize::COAL_BLOCK);\n    if (rightSz != GuardedSize::LOCKED) {\n        // LastFreeBlock is on the right side\n        if (GuardedSize::LAST_REGION_BLOCK == rightSz) {\n            right->setMeFree(GuardedSize::LAST_REGION_BLOCK);\n            memRegion = static_cast<LastFreeBlock*>(right)->memRegion;\n        } else if (GuardedSize::COAL_BLOCK == rightSz) {\n            if (resBlock->blockInBin) {\n                resBlock->blockInBin = false;\n                removeBlockFromBin(resBlock);\n            }\n            coalescQ.putBlock(resBlock);\n            return NULL;\n        } else {\n            size_t rSz = right->rightNeig(rightSz)->\n                trySetLeftUsed(GuardedSize::COAL_BLOCK);\n            if (rSz <= GuardedSize::MAX_LOCKED_VAL) {\n                right->setMeFree(rightSz);  // rollback\n                if (resBlock->blockInBin) {\n                    resBlock->blockInBin = false;\n                    removeBlockFromBin(resBlock);\n                }\n                coalescQ.putBlock(resBlock);\n                return NULL;\n            } else {\n                MALLOC_ASSERT(rSz == rightSz, \"Invalid header\");\n                removeBlockFromBin(right);\n                resSize += rightSz;\n\n                // Is LastFreeBlock on the right side of right?\n                FreeBlock *nextRight = right->rightNeig(rightSz);\n                size_t nextRightSz = nextRight->\n                    trySetMeUsed(GuardedSize::COAL_BLOCK);\n                if (nextRightSz > GuardedSize::MAX_LOCKED_VAL) {\n                    if (nextRightSz == GuardedSize::LAST_REGION_BLOCK)\n                        memRegion = static_cast<LastFreeBlock*>(nextRight)->memRegion;\n\n                    nextRight->setMeFree(nextRightSz);\n                }\n            }\n        }\n    }\n    if (memRegion) {\n        MALLOC_ASSERT((uintptr_t)memRegion + memRegion->allocSz >=\n                      (uintptr_t)right + sizeof(LastFreeBlock), ASSERT_TEXT);\n        MALLOC_ASSERT((uintptr_t)memRegion < (uintptr_t)resBlock, ASSERT_TEXT);\n        *mRegion = memRegion;\n    } else\n        *mRegion = NULL;\n    resBlock->sizeTmp = resSize;\n    return resBlock;\n}\n\nbool Backend::coalescAndPutList(FreeBlock *list, bool forceCoalescQDrop,\n                                bool reportBlocksProcessed)\n{\n    bool regionReleased = false;\n\n    for (FreeBlock *helper; list;\n         list = helper,\n             // matches block enqueue in CoalRequestQ::putBlock()\n             reportBlocksProcessed? coalescQ.blockWasProcessed() : (void)0) {\n        MemRegion *memRegion;\n        bool addToTail = false;\n\n        helper = list->nextToFree;\n        FreeBlock *toRet = doCoalesc(list, &memRegion);\n        if (!toRet)\n            continue;\n\n        if (memRegion && memRegion->blockSz == toRet->sizeTmp\n            && !extMemPool->fixedPool) {\n            if (extMemPool->regionsAreReleaseable()) {\n                // release the region, because there is no used blocks in it\n                if (toRet->blockInBin)\n                    removeBlockFromBin(toRet);\n                releaseRegion(memRegion);\n                regionReleased = true;\n                continue;\n            } else // add block from empty region to end of bin,\n                addToTail = true; // preserving for exact fit\n        }\n        size_t currSz = toRet->sizeTmp;\n        int bin = sizeToBin(currSz);\n        bool toAligned = toAlignedBin(toRet, currSz);\n        bool needAddToBin = true;\n\n        if (toRet->blockInBin) {\n            // Does it stay in same bin?\n            if (toRet->myBin == bin && toRet->aligned == toAligned)\n                needAddToBin = false;\n            else {\n                toRet->blockInBin = false;\n                removeBlockFromBin(toRet);\n            }\n        }\n\n        // Does not stay in same bin, or bin-less; add it\n        if (needAddToBin) {\n            toRet->prev = toRet->next = toRet->nextToFree = NULL;\n            toRet->myBin = NO_BIN;\n\n            // If the block is too small to fit in any bin, keep it bin-less.\n            // It's not a leak because the block later can be coalesced.\n            if (currSz >= minBinnedSize) {\n                toRet->sizeTmp = currSz;\n                IndexedBins *target = toAligned? &freeAlignedBins : &freeLargeBins;\n                if (forceCoalescQDrop) {\n                    target->addBlock(bin, toRet, toRet->sizeTmp, addToTail);\n                } else if (!target->tryAddBlock(bin, toRet, addToTail)) {\n                    coalescQ.putBlock(toRet);\n                    continue;\n                }\n            }\n            toRet->sizeTmp = 0;\n        }\n        // Free (possibly coalesced) free block.\n        // Adding to bin must be done before this point,\n        // because after a block is free it can be coalesced, and\n        // using its pointer became unsafe.\n        // Remember that coalescing is not done under any global lock.\n        toRet->setMeFree(currSz);\n        toRet->rightNeig(currSz)->setLeftFree(currSz);\n    }\n    return regionReleased;\n}\n\n// Coalesce fBlock and add it back to a bin;\n// processing delayed coalescing requests.\nvoid Backend::coalescAndPut(FreeBlock *fBlock, size_t blockSz)\n{\n    fBlock->sizeTmp = blockSz;\n    fBlock->nextToFree = NULL;\n\n    coalescAndPutList(fBlock, /*forceCoalescQDrop=*/false, /*reportBlocksProcessed=*/false);\n}\n\nbool Backend::scanCoalescQ(bool forceCoalescQDrop)\n{\n    FreeBlock *currCoalescList = coalescQ.getAll();\n\n    if (currCoalescList)\n        // reportBlocksProcessed=true informs that the blocks leave coalescQ,\n        // matches blockConsumed() from CoalRequestQ::putBlock()\n        coalescAndPutList(currCoalescList, forceCoalescQDrop,\n                          /*reportBlocksProcessed=*/true);\n    // returns status of coalescQ.getAll(), as an indication of possibe changes in backend\n    // TODO: coalescAndPutList() may report is some new free blocks became available or not\n    return currCoalescList;\n}\n\nFreeBlock *Backend::findBlockInRegion(MemRegion *region, size_t exactBlockSize)\n{\n    FreeBlock *fBlock;\n    size_t blockSz;\n    uintptr_t fBlockEnd,\n        lastFreeBlock = (uintptr_t)region + region->allocSz - sizeof(LastFreeBlock);\n\n    MALLOC_STATIC_ASSERT(sizeof(LastFreeBlock) % sizeof(uintptr_t) == 0,\n        \"Atomic applied on LastFreeBlock, and we put it at the end of region, that\"\n        \" is uintptr_t-aligned, so no unaligned atomic operations are possible.\");\n     // right bound is slab-aligned, keep LastFreeBlock after it\n    if (region->type==MEMREG_FLEXIBLE_SIZE) {\n        fBlock = (FreeBlock *)alignUp((uintptr_t)region + sizeof(MemRegion),\n                                      sizeof(uintptr_t));\n        fBlockEnd = alignDown(lastFreeBlock, slabSize);\n    } else {\n        fBlock = (FreeBlock *)alignUp((uintptr_t)region + sizeof(MemRegion),\n                                      largeObjectAlignment);\n        fBlockEnd = (uintptr_t)fBlock + exactBlockSize;\n        MALLOC_ASSERT(fBlockEnd <= lastFreeBlock, ASSERT_TEXT);\n    }\n    if (fBlockEnd <= (uintptr_t)fBlock)\n        return NULL; // allocSz is too small\n    blockSz = fBlockEnd - (uintptr_t)fBlock;\n    // TODO: extend getSlabBlock to support degradation, i.e. getting less blocks\n    // then requested, and then relax this check\n    // (now all or nothing is implemented, check according to this)\n    if (blockSz < numOfSlabAllocOnMiss*slabSize)\n        return NULL;\n\n    region->blockSz = blockSz;\n    return fBlock;\n}\n\n// startUseBlock adds free block to a bin, the block can be used and\n// even released after this, so the region must be added to regionList already\nvoid Backend::startUseBlock(MemRegion *region, FreeBlock *fBlock, bool addToBin)\n{\n    size_t blockSz = region->blockSz;\n    fBlock->initHeader();\n    fBlock->setMeFree(blockSz);\n\n    LastFreeBlock *lastBl = static_cast<LastFreeBlock*>(fBlock->rightNeig(blockSz));\n    // to not get unaligned atomics during LastFreeBlock access\n    MALLOC_ASSERT(isAligned(lastBl, sizeof(uintptr_t)), NULL);\n    lastBl->initHeader();\n    lastBl->setMeFree(GuardedSize::LAST_REGION_BLOCK);\n    lastBl->setLeftFree(blockSz);\n    lastBl->myBin = NO_BIN;\n    lastBl->memRegion = region;\n\n    if (addToBin) {\n        unsigned targetBin = sizeToBin(blockSz);\n        // during adding advance regions, register bin for a largest block in region\n        advRegBins.registerBin(targetBin);\n        if (region->type!=MEMREG_ONE_BLOCK && toAlignedBin(fBlock, blockSz)) {\n            freeAlignedBins.addBlock(targetBin, fBlock, blockSz, /*addToTail=*/false);\n        } else {\n            freeLargeBins.addBlock(targetBin, fBlock, blockSz, /*addToTail=*/false);\n        }\n    } else {\n        // to match with blockReleased() in genericGetBlock\n        bkndSync.blockConsumed();\n        fBlock->sizeTmp = fBlock->tryLockBlock();\n        MALLOC_ASSERT(fBlock->sizeTmp >= FreeBlock::minBlockSize,\n                      \"Locking must be successful\");\n    }\n}\n\nvoid MemRegionList::add(MemRegion *r)\n{\n    r->prev = NULL;\n    MallocMutex::scoped_lock lock(regionListLock);\n    r->next = head;\n    head = r;\n    if (head->next)\n        head->next->prev = head;\n}\n\nvoid MemRegionList::remove(MemRegion *r)\n{\n    MallocMutex::scoped_lock lock(regionListLock);\n    if (head == r)\n        head = head->next;\n    if (r->next)\n        r->next->prev = r->prev;\n    if (r->prev)\n        r->prev->next = r->next;\n}\n\n#if __TBB_MALLOC_BACKEND_STAT\nint MemRegionList::reportStat(FILE *f)\n{\n    int regNum = 0;\n    MallocMutex::scoped_lock lock(regionListLock);\n    for (MemRegion *curr = head; curr; curr = curr->next) {\n        fprintf(f, \"%p: max block %lu B, \", curr, curr->blockSz);\n        regNum++;\n    }\n    return regNum;\n}\n#endif\n\nFreeBlock *Backend::addNewRegion(size_t size, MemRegionType memRegType, bool addToBin)\n{\n    MALLOC_STATIC_ASSERT(sizeof(BlockMutexes) <= sizeof(BlockI),\n                 \"Header must be not overwritten in used blocks\");\n    MALLOC_ASSERT(FreeBlock::minBlockSize > GuardedSize::MAX_SPEC_VAL,\n          \"Block length must not conflict with special values of GuardedSize\");\n    // If the region is not \"flexible size\" we should reserve some space for\n    // a region header, the worst case alignment and the last block mark.\n    const size_t requestSize = memRegType == MEMREG_FLEXIBLE_SIZE ? size :\n        size + sizeof(MemRegion) + largeObjectAlignment\n             +  FreeBlock::minBlockSize + sizeof(LastFreeBlock);\n\n    size_t rawSize = requestSize;\n    MemRegion *region = (MemRegion*)allocRawMem(rawSize);\n    if (!region) {\n        MALLOC_ASSERT(rawSize==requestSize, \"getRawMem has not allocated memory but changed the allocated size.\");\n        return NULL;\n    }\n    if (rawSize < sizeof(MemRegion)) {\n        if (!extMemPool->fixedPool)\n            freeRawMem(region, rawSize);\n        return NULL;\n    }\n\n    region->type = memRegType;\n    region->allocSz = rawSize;\n    FreeBlock *fBlock = findBlockInRegion(region, size);\n    if (!fBlock) {\n        if (!extMemPool->fixedPool)\n            freeRawMem(region, rawSize);\n        return NULL;\n    }\n    regionList.add(region);\n    startUseBlock(region, fBlock, addToBin);\n    bkndSync.binsModified();\n    return addToBin? (FreeBlock*)VALID_BLOCK_IN_BIN : fBlock;\n}\n\nvoid Backend::init(ExtMemoryPool *extMemoryPool)\n{\n    extMemPool = extMemoryPool;\n    usedAddrRange.init();\n    coalescQ.init(&bkndSync);\n    bkndSync.init(this);\n}\n\nvoid Backend::reset()\n{\n    MALLOC_ASSERT(extMemPool->userPool(), \"Only user pool can be reset.\");\n    // no active threads are allowed in backend while reset() called\n    verify();\n\n    freeLargeBins.reset();\n    freeAlignedBins.reset();\n    advRegBins.reset();\n\n    for (MemRegion *curr = regionList.head; curr; curr = curr->next) {\n        FreeBlock *fBlock = findBlockInRegion(curr, curr->blockSz);\n        MALLOC_ASSERT(fBlock, \"A memory region unexpectedly got smaller\");\n        startUseBlock(curr, fBlock, /*addToBin=*/true);\n    }\n}\n\nbool Backend::destroy()\n{\n    bool noError = true;\n    // no active threads are allowed in backend while destroy() called\n    verify();\n    if (!inUserPool()) {\n        freeLargeBins.reset();\n        freeAlignedBins.reset();\n    }\n    while (regionList.head) {\n        MemRegion *helper = regionList.head->next;\n        noError &= freeRawMem(regionList.head, regionList.head->allocSz);\n        regionList.head = helper;\n    }\n    return noError;\n}\n\nbool Backend::clean()\n{\n    scanCoalescQ(/*forceCoalescQDrop=*/false);\n\n    bool res = false;\n    // We can have several blocks occupying a whole region,\n    // because such regions are added in advance (see askMemFromOS() and reset()),\n    // and never used. Release them all.\n    for (int i = advRegBins.getMinUsedBin(0); i != -1; i = advRegBins.getMinUsedBin(i+1)) {\n        if (i == freeAlignedBins.getMinNonemptyBin(i))\n            res |= freeAlignedBins.tryReleaseRegions(i, this);\n        if (i == freeLargeBins.getMinNonemptyBin(i))\n            res |= freeLargeBins.tryReleaseRegions(i, this);\n    }\n\n    return res;\n}\n\nvoid Backend::IndexedBins::verify()\n{\n    for (int i=0; i<freeBinsNum; i++) {\n        for (FreeBlock *fb = freeBins[i].head; fb; fb=fb->next) {\n            uintptr_t mySz = fb->myL.value;\n            MALLOC_ASSERT(mySz>GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);\n            FreeBlock *right = (FreeBlock*)((uintptr_t)fb + mySz);\n            suppress_unused_warning(right);\n            MALLOC_ASSERT(right->myL.value<=GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);\n            MALLOC_ASSERT(right->leftL.value==mySz, ASSERT_TEXT);\n            MALLOC_ASSERT(fb->leftL.value<=GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);\n        }\n    }\n}\n\n// For correct operation, it must be called when no other threads\n// is changing backend.\nvoid Backend::verify()\n{\n#if MALLOC_DEBUG\n    scanCoalescQ(/*forceCoalescQDrop=*/false);\n\n    freeLargeBins.verify();\n    freeAlignedBins.verify();\n#endif // MALLOC_DEBUG\n}\n\n#if __TBB_MALLOC_BACKEND_STAT\nsize_t Backend::Bin::countFreeBlocks()\n{\n    size_t cnt = 0;\n    {\n        MallocMutex::scoped_lock lock(tLock);\n        for (FreeBlock *fb = head; fb; fb = fb->next)\n            cnt++;\n    }\n    return cnt;\n}\n\nsize_t Backend::Bin::reportFreeBlocks(FILE *f)\n{\n    size_t totalSz = 0;\n    MallocMutex::scoped_lock lock(tLock);\n    for (FreeBlock *fb = head; fb; fb = fb->next) {\n        size_t sz = fb->tryLockBlock();\n        fb->setMeFree(sz);\n        fprintf(f, \" [%p;%p]\", fb, (void*)((uintptr_t)fb+sz));\n        totalSz += sz;\n    }\n    return totalSz;\n}\n\nvoid Backend::IndexedBins::reportStat(FILE *f)\n{\n    size_t totalSize = 0;\n\n    for (int i=0; i<Backend::freeBinsNum; i++)\n        if (size_t cnt = freeBins[i].countFreeBlocks()) {\n            totalSize += freeBins[i].reportFreeBlocks(f);\n            fprintf(f, \" %d:%lu, \", i, cnt);\n        }\n    fprintf(f, \"\\ttotal size %lu KB\", totalSize/1024);\n}\n\nvoid Backend::reportStat(FILE *f)\n{\n    scanCoalescQ(/*forceCoalescQDrop=*/false);\n\n    fprintf(f, \"\\n  regions:\\n\");\n    int regNum = regionList.reportStat(f);\n    fprintf(f, \"\\n%d regions, %lu KB in all regions\\n  free bins:\\nlarge bins: \",\n            regNum, totalMemSize/1024);\n    freeLargeBins.reportStat(f);\n    fprintf(f, \"\\naligned bins: \");\n    freeAlignedBins.reportStat(f);\n    fprintf(f, \"\\n\");\n}\n#endif // __TBB_MALLOC_BACKEND_STAT\n\n} } // namespaces\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/backref.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbbmalloc_internal.h\"\n#include <new>        /* for placement new */\n\nnamespace rml {\nnamespace internal {\n\n\n/********* backreferences ***********************/\n/* Each slab block and each large memory object header contains BackRefIdx\n * that points out in some BackRefBlock which points back to this block or header.\n */\nstruct BackRefBlock : public BlockI {\n    BackRefBlock *nextForUse;     // the next in the chain of blocks with free items\n    FreeObject   *bumpPtr;        // bump pointer moves from the end to the beginning of the block\n    FreeObject   *freeList;\n    // list of all blocks that were allocated from raw mem (i.e., not from backend)\n    BackRefBlock *nextRawMemBlock;\n    int           allocatedCount; // the number of objects allocated\n    BackRefIdx::master_t myNum;   // the index in the master\n    MallocMutex   blockMutex;\n    // true if this block has been added to the listForUse chain,\n    // modifications protected by masterMutex\n    bool          addedToForUse;\n\n    BackRefBlock(const BackRefBlock *blockToUse, intptr_t num) :\n        nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + slabSize - sizeof(void*))),\n        freeList(NULL), nextRawMemBlock(NULL), allocatedCount(0), myNum(num),\n        addedToForUse(false) {\n        memset(&blockMutex, 0, sizeof(MallocMutex));\n\n        MALLOC_ASSERT(!(num >> CHAR_BIT*sizeof(BackRefIdx::master_t)),\n                      \"index in BackRefMaster must fit to BackRefIdx::master\");\n    }\n    // clean all but header\n    void zeroSet() { memset(this+1, 0, BackRefBlock::bytes-sizeof(BackRefBlock)); }\n    static const int bytes = slabSize;\n};\n\n// max number of backreference pointers in slab block\nstatic const int BR_MAX_CNT = (BackRefBlock::bytes-sizeof(BackRefBlock))/sizeof(void*);\n\nstruct BackRefMaster {\n/* On 64-bit systems a slab block can hold up to ~2K back pointers to slab blocks\n * or large objects, so it can address at least 32MB. The master array of 256KB\n * holds 32K pointers to such blocks, addressing ~1 TB.\n * On 32-bit systems there is ~4K back pointers in a slab block, so ~64MB can be addressed.\n * The master array of 8KB holds 2K pointers to leaves, so ~128 GB can addressed.\n */\n    static const size_t bytes = sizeof(uintptr_t)>4? 256*1024 : 8*1024;\n    static const int dataSz;\n/* space is reserved for master table and 4 leaves\n   taking into account VirtualAlloc allocation granularity */\n    static const int leaves = 4;\n    static const size_t masterSize = BackRefMaster::bytes+leaves*BackRefBlock::bytes;\n    // The size of memory request for a few more leaf blocks;\n    // selected to match VirtualAlloc granularity\n    static const size_t blockSpaceSize = 64*1024;\n\n    Backend       *backend;\n    BackRefBlock  *active;         // if defined, use it for allocations\n    BackRefBlock  *listForUse;     // the chain of data blocks with free items\n    BackRefBlock  *allRawMemBlocks;\n    intptr_t       lastUsed;       // index of the last used block\n    bool           rawMemUsed;\n    MallocMutex    requestNewSpaceMutex;\n    BackRefBlock  *backRefBl[1];   // the real size of the array is dataSz\n\n    BackRefBlock *findFreeBlock();\n    void          addToForUseList(BackRefBlock *bl);\n    void          initEmptyBackRefBlock(BackRefBlock *newBl);\n    bool          requestNewSpace();\n};\n\nconst int BackRefMaster::dataSz\n    = 1+(BackRefMaster::bytes-sizeof(BackRefMaster))/sizeof(BackRefBlock*);\n\nstatic MallocMutex masterMutex;\nstatic BackRefMaster *backRefMaster;\n\nbool initBackRefMaster(Backend *backend)\n{\n    bool rawMemUsed;\n    BackRefMaster *master =\n        (BackRefMaster*)backend->getBackRefSpace(BackRefMaster::masterSize,\n                                                 &rawMemUsed);\n    if (! master)\n        return false;\n    master->backend = backend;\n    master->listForUse = master->allRawMemBlocks = NULL;\n    master->rawMemUsed = rawMemUsed;\n    master->lastUsed = -1;\n    memset(&master->requestNewSpaceMutex, 0, sizeof(MallocMutex));\n    for (int i=0; i<BackRefMaster::leaves; i++) {\n        BackRefBlock *bl = (BackRefBlock*)((uintptr_t)master + BackRefMaster::bytes + i*BackRefBlock::bytes);\n        bl->zeroSet();\n        master->initEmptyBackRefBlock(bl);\n        if (i)\n            master->addToForUseList(bl);\n        else // active leaf is not needed in listForUse\n            master->active = bl;\n    }\n    // backRefMaster is read in getBackRef, so publish it in consistent state\n    FencedStore((intptr_t&)backRefMaster, (intptr_t)master);\n    return true;\n}\n\nvoid destroyBackRefMaster(Backend *backend)\n{\n    if (backRefMaster) { // Is initBackRefMaster() called?\n        for (BackRefBlock *curr=backRefMaster->allRawMemBlocks; curr; ) {\n            BackRefBlock *next = curr->nextRawMemBlock;\n            // allRawMemBlocks list is only for raw mem blocks\n            backend->putBackRefSpace(curr, BackRefMaster::blockSpaceSize,\n                                     /*rawMemUsed=*/true);\n            curr = next;\n        }\n        backend->putBackRefSpace(backRefMaster, BackRefMaster::masterSize,\n                                 backRefMaster->rawMemUsed);\n    }\n}\n\nvoid BackRefMaster::addToForUseList(BackRefBlock *bl)\n{\n    bl->nextForUse = listForUse;\n    listForUse = bl;\n    bl->addedToForUse = true;\n}\n\nvoid BackRefMaster::initEmptyBackRefBlock(BackRefBlock *newBl)\n{\n    intptr_t nextLU = lastUsed+1;\n    new (newBl) BackRefBlock(newBl, nextLU);\n    MALLOC_ASSERT(nextLU < dataSz, NULL);\n    backRefBl[nextLU] = newBl;\n    // lastUsed is read in getBackRef, and access to backRefBl[lastUsed]\n    // is possible only after checking backref against current lastUsed\n    FencedStore(lastUsed, nextLU);\n}\n\nbool BackRefMaster::requestNewSpace()\n{\n    bool isRawMemUsed;\n    MALLOC_STATIC_ASSERT(!(blockSpaceSize % BackRefBlock::bytes),\n                         \"Must request space for whole number of blocks.\");\n\n    if (backRefMaster->dataSz <= lastUsed + 1) // no space in master\n        return false;\n\n    // only one thread at a time may add blocks\n    MallocMutex::scoped_lock newSpaceLock(requestNewSpaceMutex);\n\n    if (listForUse) // double check that only one block is available\n        return true;\n    BackRefBlock *newBl =\n        (BackRefBlock*)backend->getBackRefSpace(blockSpaceSize, &isRawMemUsed);\n    if (!newBl) return false;\n\n    // touch a page for the 1st time without taking masterMutex ...\n    for (BackRefBlock *bl = newBl; (uintptr_t)bl < (uintptr_t)newBl + blockSpaceSize;\n         bl = (BackRefBlock*)((uintptr_t)bl + BackRefBlock::bytes))\n        bl->zeroSet();\n\n    MallocMutex::scoped_lock lock(masterMutex); // ... and share under lock\n\n    const size_t numOfUnusedIdxs = backRefMaster->dataSz - lastUsed - 1;\n    if (numOfUnusedIdxs <= 0) { // no space in master under lock, roll back\n        backend->putBackRefSpace(newBl, blockSpaceSize, isRawMemUsed);\n        return false;\n    }\n    // It's possible that only part of newBl is used, due to lack of indices in master.\n    // This is OK as such underutilization is possible only once for backreferneces table.\n    int blocksToUse = min(numOfUnusedIdxs, blockSpaceSize / BackRefBlock::bytes);\n\n    // use the first block in the batch to maintain the list of \"raw\" memory\n    // to be released at shutdown\n    if (isRawMemUsed) {\n        newBl->nextRawMemBlock = backRefMaster->allRawMemBlocks;\n        backRefMaster->allRawMemBlocks = newBl;\n    }\n    for (BackRefBlock *bl = newBl; blocksToUse>0;\n         bl = (BackRefBlock*)((uintptr_t)bl + BackRefBlock::bytes), blocksToUse--) {\n        initEmptyBackRefBlock(bl);\n        if (active->allocatedCount == BR_MAX_CNT)\n            active = bl; // active leaf is not needed in listForUse\n        else\n            addToForUseList(bl);\n    }\n    return true;\n}\n\nBackRefBlock *BackRefMaster::findFreeBlock()\n{\n    if (active->allocatedCount < BR_MAX_CNT)\n        return active;\n\n    if (listForUse) {                                   // use released list\n        MallocMutex::scoped_lock lock(masterMutex);\n\n        if (active->allocatedCount == BR_MAX_CNT && listForUse) {\n            active = listForUse;\n            listForUse = listForUse->nextForUse;\n            MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);\n            active->addedToForUse = false;\n        }\n    } else // allocate new data node\n        if (!requestNewSpace())\n            return NULL;\n    return active;\n}\n\nvoid *getBackRef(BackRefIdx backRefIdx)\n{\n    // !backRefMaster means no initialization done, so it can't be valid memory\n    // see addEmptyBackRefBlock for fences around lastUsed\n    if (!FencedLoad((intptr_t&)backRefMaster)\n        || backRefIdx.getMaster() > FencedLoad(backRefMaster->lastUsed)\n        || backRefIdx.getOffset() >= BR_MAX_CNT)\n        return NULL;\n    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]\n                     + sizeof(BackRefBlock)+backRefIdx.getOffset()*sizeof(void*));\n}\n\nvoid setBackRef(BackRefIdx backRefIdx, void *newPtr)\n{\n    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed && backRefIdx.getOffset()<BR_MAX_CNT,\n                  ASSERT_TEXT);\n    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]\n              + sizeof(BackRefBlock) + backRefIdx.getOffset()*sizeof(void*)) = newPtr;\n}\n\nBackRefIdx BackRefIdx::newBackRef(bool largeObj)\n{\n    BackRefBlock *blockToUse;\n    void **toUse;\n    BackRefIdx res;\n    bool lastBlockFirstUsed = false;\n\n    do {\n        MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);\n        blockToUse = backRefMaster->findFreeBlock();\n        if (!blockToUse)\n            return BackRefIdx();\n        toUse = NULL;\n        { // the block is locked to find a reference\n            MallocMutex::scoped_lock lock(blockToUse->blockMutex);\n\n            if (blockToUse->freeList) {\n                toUse = (void**)blockToUse->freeList;\n                blockToUse->freeList = blockToUse->freeList->next;\n                MALLOC_ASSERT(!blockToUse->freeList ||\n                              ((uintptr_t)blockToUse->freeList>=(uintptr_t)blockToUse\n                               && (uintptr_t)blockToUse->freeList <\n                               (uintptr_t)blockToUse + slabSize), ASSERT_TEXT);\n            } else if (blockToUse->allocatedCount < BR_MAX_CNT) {\n                toUse = (void**)blockToUse->bumpPtr;\n                blockToUse->bumpPtr =\n                    (FreeObject*)((uintptr_t)blockToUse->bumpPtr - sizeof(void*));\n                if (blockToUse->allocatedCount == BR_MAX_CNT-1) {\n                    MALLOC_ASSERT((uintptr_t)blockToUse->bumpPtr\n                                  < (uintptr_t)blockToUse+sizeof(BackRefBlock),\n                                  ASSERT_TEXT);\n                    blockToUse->bumpPtr = NULL;\n                }\n            }\n            if (toUse) {\n                if (!blockToUse->allocatedCount && !backRefMaster->listForUse)\n                    lastBlockFirstUsed = true;\n                blockToUse->allocatedCount++;\n            }\n        } // end of lock scope\n    } while (!toUse);\n    // The first thread that uses the last block requests new space in advance;\n    // possible failures are ignored.\n    if (lastBlockFirstUsed)\n        backRefMaster->requestNewSpace();\n\n    res.master = blockToUse->myNum;\n    uintptr_t offset =\n        ((uintptr_t)toUse - ((uintptr_t)blockToUse + sizeof(BackRefBlock)))/sizeof(void*);\n    // Is offset too big?\n    MALLOC_ASSERT(!(offset >> 15), ASSERT_TEXT);\n    res.offset = offset;\n    if (largeObj) res.largeObj = largeObj;\n\n    return res;\n}\n\nvoid removeBackRef(BackRefIdx backRefIdx)\n{\n    MALLOC_ASSERT(!backRefIdx.isInvalid(), ASSERT_TEXT);\n    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed\n                  && backRefIdx.getOffset()<BR_MAX_CNT, ASSERT_TEXT);\n    BackRefBlock *currBlock = backRefMaster->backRefBl[backRefIdx.getMaster()];\n    FreeObject *freeObj = (FreeObject*)((uintptr_t)currBlock + sizeof(BackRefBlock)\n                                        + backRefIdx.getOffset()*sizeof(void*));\n    MALLOC_ASSERT(((uintptr_t)freeObj>(uintptr_t)currBlock &&\n                   (uintptr_t)freeObj<(uintptr_t)currBlock + slabSize), ASSERT_TEXT);\n    {\n        MallocMutex::scoped_lock lock(currBlock->blockMutex);\n\n        freeObj->next = currBlock->freeList;\n        MALLOC_ASSERT(!freeObj->next ||\n                      ((uintptr_t)freeObj->next > (uintptr_t)currBlock\n                       && (uintptr_t)freeObj->next <\n                       (uintptr_t)currBlock + slabSize), ASSERT_TEXT);\n        currBlock->freeList = freeObj;\n        currBlock->allocatedCount--;\n    }\n    // TODO: do we need double-check here?\n    if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {\n        MallocMutex::scoped_lock lock(masterMutex);\n\n        if (!currBlock->addedToForUse && currBlock!=backRefMaster->active)\n            backRefMaster->addToForUseList(currBlock);\n    }\n}\n\n/********* End of backreferences ***********************/\n\n} // namespace internal\n} // namespace rml\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/frontend.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#include \"tbbmalloc_internal.h\"\n#include <errno.h>\n#include <new>        /* for placement new */\n#include <string.h>   /* for memset */\n\n#include \"../tbb/tbb_version.h\"\n#include \"../tbb/itt_notify.h\" // for __TBB_load_ittnotify()\n\n#if USE_PTHREAD\n    #define TlsSetValue_func pthread_setspecific\n    #define TlsGetValue_func pthread_getspecific\n    #define GetMyTID() pthread_self()\n    #include <sched.h>\n    inline void do_yield() {sched_yield();}\n    extern \"C\" { static void mallocThreadShutdownNotification(void*); }\n    #if __sun || __SUNPRO_CC\n    #define __asm__ asm\n    #endif\n    #include <unistd.h> // sysconf(_SC_PAGESIZE)\n#elif USE_WINTHREAD\n    #define GetMyTID() GetCurrentThreadId()\n#if __TBB_WIN8UI_SUPPORT\n    #include<thread>\n    #define TlsSetValue_func FlsSetValue\n    #define TlsGetValue_func FlsGetValue\n    #define TlsAlloc() FlsAlloc(NULL)\n    #define TLS_ALLOC_FAILURE FLS_OUT_OF_INDEXES\n    #define TlsFree FlsFree\n    inline void do_yield() {std::this_thread::yield();}\n#else\n    #define TlsSetValue_func TlsSetValue\n    #define TlsGetValue_func TlsGetValue\n    #define TLS_ALLOC_FAILURE TLS_OUT_OF_INDEXES\n    inline void do_yield() {SwitchToThread();}\n#endif\n#else\n    #error Must define USE_PTHREAD or USE_WINTHREAD\n\n#endif\n\n\n#define FREELIST_NONBLOCKING 1\n\nnamespace rml {\nclass MemoryPool;\nnamespace internal {\n\nclass Block;\nclass MemoryPool;\n\n#if MALLOC_CHECK_RECURSION\n\ninline bool isMallocInitialized();\n\nbool RecursiveMallocCallProtector::noRecursion() {\n    MALLOC_ASSERT(isMallocInitialized(),\n                  \"Recursion status can be checked only when initialization was done.\");\n    return !mallocRecursionDetected;\n}\n\n#endif // MALLOC_CHECK_RECURSION\n\n/** Support for handling the special UNUSABLE pointer state **/\nconst intptr_t UNUSABLE = 0x1;\ninline bool isSolidPtr( void* ptr ) {\n    return (UNUSABLE|(intptr_t)ptr)!=UNUSABLE;\n}\ninline bool isNotForUse( void* ptr ) {\n    return (intptr_t)ptr==UNUSABLE;\n}\n\n/*\n * Block::objectSize value used to mark blocks allocated by startupAlloc\n */\nconst uint16_t startupAllocObjSizeMark = ~(uint16_t)0;\n\n/*\n * The following constant is used to define the size of struct Block, the block header.\n * The intent is to have the size of a Block multiple of the cache line size, this allows us to\n * get good alignment at the cost of some overhead equal to the amount of padding included in the Block.\n */\nconst int blockHeaderAlignment = estimatedCacheLineSize;\n\n/********* The data structures and global objects        **************/\n\n/*\n * The malloc routines themselves need to be able to occasionally malloc some space,\n * in order to set up the structures used by the thread local structures. This\n * routine performs that functions.\n */\nclass BootStrapBlocks {\n    MallocMutex bootStrapLock;\n    Block      *bootStrapBlock;\n    Block      *bootStrapBlockUsed;\n    FreeObject *bootStrapObjectList;\npublic:\n    void *allocate(MemoryPool *memPool, size_t size);\n    void free(void* ptr);\n    void reset();\n};\n\n#if USE_INTERNAL_TID\nclass ThreadId {\n    static tls_key_t Tid_key;\n    static intptr_t ThreadCount;\n\n    unsigned int id;\n\n    static unsigned int tlsNumber() {\n        unsigned int result = reinterpret_cast<intptr_t>(TlsGetValue_func(Tid_key));\n        if( !result ) {\n            RecursiveMallocCallProtector scoped;\n            // Thread-local value is zero -> first call from this thread,\n            // need to initialize with next ID value (IDs start from 1)\n            result = AtomicIncrement(ThreadCount); // returned new value!\n            TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );\n        }\n        return result;\n    }\npublic:\n    static void init() {\n#if USE_WINTHREAD\n        Tid_key = TlsAlloc();\n#else\n        int status = pthread_key_create( &Tid_key, NULL );\n        if ( status ) {\n            fprintf (stderr, \"The memory manager cannot create tls key during initialization; exiting \\n\");\n            exit(1);\n        }\n#endif /* USE_WINTHREAD */\n    }\n    static void destroy() {\n        if( Tid_key ) {\n#if USE_WINTHREAD\n            BOOL status = !(TlsFree( Tid_key ));  // fail is zero\n#else\n            int status = pthread_key_delete( Tid_key );\n#endif /* USE_WINTHREAD */\n            if ( status ) {\n                fprintf (stderr, \"The memory manager cannot delete tls key; exiting \\n\");\n                exit(1);\n            }\n            Tid_key = 0;\n        }\n    }\n\n    ThreadId() : id(ThreadId::tlsNumber()) {}\n    bool isCurrentThreadId() const { return id == ThreadId::tlsNumber(); }\n\n#if COLLECT_STATISTICS || MALLOC_TRACE\n    friend unsigned int getThreadId() { return ThreadId::tlsNumber(); }\n#endif\n#if COLLECT_STATISTICS\n    static unsigned getMaxThreadId() { return ThreadCount; }\n\n    friend int STAT_increment(ThreadId tid, int bin, int ctr);\n#endif\n};\n\ntls_key_t ThreadId::Tid_key;\nintptr_t ThreadId::ThreadCount;\n\n#if COLLECT_STATISTICS\nint STAT_increment(ThreadId tid, int bin, int ctr)\n{\n    return ::STAT_increment(tid.id, bin, ctr);\n}\n#endif\n\n#else // USE_INTERNAL_TID\n\nclass ThreadId {\n#if USE_PTHREAD\n    pthread_t tid;\n#else\n    DWORD     tid;\n#endif\npublic:\n    ThreadId() : tid(GetMyTID()) {}\n#if USE_PTHREAD\n    bool isCurrentThreadId() const { return pthread_equal(pthread_self(), tid); }\n#else\n    bool isCurrentThreadId() const { return GetCurrentThreadId() == tid; }\n#endif\n    static void init() {}\n    static void destroy() {}\n};\n\n#endif // USE_INTERNAL_TID\n\n/*********** Code to provide thread ID and a thread-local void pointer **********/\n\nbool TLSKey::init()\n{\n#if USE_WINTHREAD\n    TLS_pointer_key = TlsAlloc();\n    if (TLS_pointer_key == TLS_ALLOC_FAILURE)\n        return false;\n#else\n    int status = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );\n    if ( status )\n        return false;\n#endif /* USE_WINTHREAD */\n    return true;\n}\n\nbool TLSKey::destroy()\n{\n#if USE_WINTHREAD\n    BOOL status1 = !(TlsFree(TLS_pointer_key)); // fail is zero\n#else\n    int status1 = pthread_key_delete(TLS_pointer_key);\n#endif /* USE_WINTHREAD */\n    MALLOC_ASSERT(!status1, \"The memory manager cannot delete tls key.\");\n    return status1==0;\n}\n\ninline TLSData* TLSKey::getThreadMallocTLS() const\n{\n    return (TLSData *)TlsGetValue_func( TLS_pointer_key );\n}\n\ninline void TLSKey::setThreadMallocTLS( TLSData * newvalue ) {\n    RecursiveMallocCallProtector scoped;\n    TlsSetValue_func( TLS_pointer_key, newvalue );\n}\n\n/* The 'next' field in the block header has to maintain some invariants:\n *   it needs to be on a 16K boundary and the first field in the block.\n *   Any value stored there needs to have the lower 14 bits set to 0\n *   so that various assert work. This means that if you want to smash this memory\n *   for debugging purposes you will need to obey this invariant.\n * The total size of the header needs to be a power of 2 to simplify\n * the alignment requirements. For now it is a 128 byte structure.\n * To avoid false sharing, the fields changed only locally are separated\n * from the fields changed by foreign threads.\n * Changing the size of the block header would require to change\n * some bin allocation sizes, in particular \"fitting\" sizes (see above).\n */\nclass Bin;\nclass StartupBlock;\n\nclass MemoryPool {\n    // if no explicit grainsize, expect to see malloc in user's pAlloc\n    // and set reasonable low granularity\n    static const size_t defaultGranularity = estimatedCacheLineSize;\n\n    MemoryPool();                  // deny\npublic:\n    static MallocMutex  memPoolListLock;\n\n    // list of all active pools is used to release\n    // all TLS data on thread termination or library unload\n    MemoryPool    *next,\n                  *prev;\n    ExtMemoryPool  extMemPool;\n    BootStrapBlocks bootStrapBlocks;\n\n    static void initDefaultPool();\n\n    bool init(intptr_t poolId, const MemPoolPolicy* memPoolPolicy);\n    bool reset();\n    bool destroy();\n    void onThreadShutdown(TLSData *tlsData);\n\n    inline TLSData *getTLS(bool create);\n    void clearTLS() { extMemPool.tlsPointerKey.setThreadMallocTLS(NULL); }\n\n    Block *getEmptyBlock(size_t size);\n    void returnEmptyBlock(Block *block, bool poolTheBlock);\n\n    // get/put large object to/from local large object cache\n    void *getFromLLOCache(TLSData *tls, size_t size, size_t alignment);\n    void putToLLOCache(TLSData *tls, void *object);\n};\n\nstatic intptr_t defaultMemPool_space[sizeof(MemoryPool)/sizeof(intptr_t) +\n                                     (sizeof(MemoryPool)%sizeof(intptr_t)? 1 : 0)];\nstatic MemoryPool *defaultMemPool = (MemoryPool*)defaultMemPool_space;\nconst size_t MemoryPool::defaultGranularity;\n// zero-initialized\nMallocMutex  MemoryPool::memPoolListLock;\n// TODO: move huge page status to default pool, because that's its states\nHugePagesStatus hugePages;\nstatic bool usedBySrcIncluded = false;\n\n// Padding helpers\ntemplate<size_t padd>\nstruct PaddingImpl {\n    size_t       __padding[padd];\n};\n\ntemplate<>\nstruct PaddingImpl<0> {};\n\ntemplate<int N>\nstruct Padding : PaddingImpl<N/sizeof(size_t)> {};\n\n// Slab block is 16KB-aligned. To prevent false sharing, separate locally-accessed\n// fields and fields commonly accessed by not owner threads.\nclass GlobalBlockFields : public BlockI {\nprotected:\n    FreeObject  *publicFreeList;\n    Block       *nextPrivatizable;\n    MemoryPool  *poolPtr;\n};\n\nclass LocalBlockFields : public GlobalBlockFields, Padding<blockHeaderAlignment - sizeof(GlobalBlockFields)>  {\nprotected:\n    Block       *next;\n    Block       *previous;        /* Use double linked list to speed up removal */\n    FreeObject  *bumpPtr;         /* Bump pointer moves from the end to the beginning of a block */\n    FreeObject  *freeList;\n    /* Pointer to local data for the owner thread. Used for fast finding tls\n       when releasing object from a block that current thread owned.\n       NULL for orphaned blocks. */\n    TLSData     *tlsPtr;\n    ThreadId     ownerTid;        /* the ID of the thread that owns or last owned the block */\n    BackRefIdx   backRefIdx;\n    uint16_t     allocatedCount;  /* Number of objects allocated (obviously by the owning thread) */\n    uint16_t     objectSize;\n    bool         isFull;\n\n    friend class FreeBlockPool;\n    friend class StartupBlock;\n    friend class LifoList;\n    friend void *BootStrapBlocks::allocate(MemoryPool *, size_t);\n    friend bool OrphanedBlocks::cleanup(Backend*);\n    friend Block *MemoryPool::getEmptyBlock(size_t);\n};\n\n// Use inheritance to guarantee that a user data start on next cache line.\n// Can't use member for it, because when LocalBlockFields already on cache line,\n// we must have no additional memory consumption for all compilers.\nclass Block : public LocalBlockFields,\n              Padding<2*blockHeaderAlignment - sizeof(LocalBlockFields)> {\npublic:\n    bool empty() const { return allocatedCount==0 && !isSolidPtr(publicFreeList); }\n    inline FreeObject* allocate();\n    inline FreeObject *allocateFromFreeList();\n    inline bool emptyEnoughToUse();\n    bool freeListNonNull() { return freeList; }\n    void freePublicObject(FreeObject *objectToFree);\n    inline void freeOwnObject(void *object);\n    void reset();\n    void privatizePublicFreeList( bool cleanup = false );\n    void restoreBumpPtr();\n    void privatizeOrphaned(TLSData *tls, unsigned index);\n    void shareOrphaned(intptr_t binTag, unsigned index);\n    unsigned int getSize() const {\n        MALLOC_ASSERT(isStartupAllocObject() || objectSize<minLargeObjectSize,\n                      \"Invalid object size\");\n        return isStartupAllocObject()? 0 : objectSize;\n    }\n    const BackRefIdx *getBackRefIdx() const { return &backRefIdx; }\n    inline bool isOwnedByCurrentThread() const;\n    bool isStartupAllocObject() const { return objectSize == startupAllocObjSizeMark; }\n    inline FreeObject *findObjectToFree(const void *object) const;\n    void checkFreePrecond(const void *object) const {\n#if MALLOC_DEBUG\n        const char *msg = \"Possible double free or heap corruption.\";\n        // small objects are always at least sizeof(size_t) Byte aligned,\n        // try to check this before this dereference as for invalid objects\n        // this may be unreadable\n        MALLOC_ASSERT(isAligned(object, sizeof(size_t)), \"Try to free invalid small object\");\n        // releasing to free slab\n        MALLOC_ASSERT(allocatedCount>0, msg);\n        // must not point to slab's header\n        MALLOC_ASSERT((uintptr_t)object - (uintptr_t)this >= sizeof(Block), msg);\n        if (startupAllocObjSizeMark == objectSize) // startup block\n            MALLOC_ASSERT(object<=bumpPtr, msg);\n        else {\n            // non-startup objects are 8 Byte aligned\n            MALLOC_ASSERT(isAligned(object, 8), \"Try to free invalid small object\");\n            MALLOC_ASSERT(allocatedCount <= (slabSize-sizeof(Block))/objectSize\n                          && (!bumpPtr || object>bumpPtr), msg);\n            FreeObject *toFree = findObjectToFree(object);\n            // check against head of freeList, as this is mostly\n            // expected after double free\n            MALLOC_ASSERT(toFree != freeList, msg);\n            // check against head of publicFreeList, to detect double free\n            // involving foreign thread\n            MALLOC_ASSERT(toFree != publicFreeList, msg);\n        }\n#else\n        suppress_unused_warning(object);\n#endif\n    }\n    void initEmptyBlock(TLSData *tls, size_t size);\n    size_t findObjectSize(void *object) const;\n    MemoryPool *getMemPool() const { return poolPtr; } // do not use on the hot path!\n\nprotected:\n    void cleanBlockHeader();\n\nprivate:\n    static const float emptyEnoughRatio; /* \"Reactivate\" a block if this share of its objects is free. */\n\n    inline FreeObject *allocateFromBumpPtr();\n    inline FreeObject *findAllocatedObject(const void *address) const;\n    inline bool isProperlyPlaced(const void *object) const;\n    inline void markOwned(TLSData *tls) {\n        MALLOC_ASSERT(!tlsPtr, ASSERT_TEXT);\n        ownerTid = ThreadId(); /* save the ID of the current thread */\n        tlsPtr = tls;\n    }\n    inline void markOrphaned() {\n        MALLOC_ASSERT(tlsPtr, ASSERT_TEXT);\n        tlsPtr = NULL;\n    }\n\n    friend class Bin;\n    friend class TLSData;\n    friend bool MemoryPool::destroy();\n};\n\nconst float Block::emptyEnoughRatio = 1.0 / 4.0;\n\nMALLOC_STATIC_ASSERT(sizeof(Block) <= 2*estimatedCacheLineSize,\n    \"The class Block does not fit into 2 cache lines on this platform. \"\n    \"Defining USE_INTERNAL_TID may help to fix it.\");\n\nclass Bin {\n    Block      *activeBlk;\n    Block      *mailbox;\n    MallocMutex mailLock;\n\npublic:\n    inline Block* getActiveBlock() const { return activeBlk; }\n    void resetActiveBlock() { activeBlk = 0; }\n    bool activeBlockUnused() const { return activeBlk && !activeBlk->allocatedCount; }\n    inline void setActiveBlock(Block *block);\n    inline Block* setPreviousBlockActive();\n    Block* getPublicFreeListBlock();\n    void moveBlockToFront(Block *block);\n    void processLessUsedBlock(MemoryPool *memPool, Block *block);\n\n    void outofTLSBin(Block* block);\n    void verifyTLSBin(size_t size) const;\n    void pushTLSBin(Block* block);\n\n    void verifyInitState() const {\n        MALLOC_ASSERT( activeBlk == 0, ASSERT_TEXT );\n        MALLOC_ASSERT( mailbox == 0, ASSERT_TEXT );\n    }\n\n    friend void Block::freePublicObject (FreeObject *objectToFree);\n};\n\n/********* End of the data structures                    **************/\n\n/*\n * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total\n */\nconst uint32_t minSmallObjectIndex = 0;\nconst uint32_t numSmallObjectBins = 8;\nconst uint32_t maxSmallObjectSize = 64;\n\n/*\n * There are 4 bins between each couple of powers of 2 [64-128-256-...]\n * from maxSmallObjectSize till this size; 16 bins in total\n */\nconst uint32_t minSegregatedObjectIndex = minSmallObjectIndex+numSmallObjectBins;\nconst uint32_t numSegregatedObjectBins = 16;\nconst uint32_t maxSegregatedObjectSize = 1024;\n\n/*\n * And there are 5 bins with allocation sizes that are multiples of estimatedCacheLineSize\n * and selected to fit 9, 6, 4, 3, and 2 allocations in a block.\n */\nconst uint32_t minFittingIndex = minSegregatedObjectIndex+numSegregatedObjectBins;\nconst uint32_t numFittingBins = 5;\n\nconst uint32_t fittingAlignment = estimatedCacheLineSize;\n\n#define SET_FITTING_SIZE(N) ( (slabSize-sizeof(Block))/N ) & ~(fittingAlignment-1)\n// For blockSize=16*1024, sizeof(Block)=2*estimatedCacheLineSize and fittingAlignment=estimatedCacheLineSize,\n// the comments show the fitting sizes and the amounts left unused for estimatedCacheLineSize=64/128:\nconst uint32_t fittingSize1 = SET_FITTING_SIZE(9); // 1792/1792 128/000\nconst uint32_t fittingSize2 = SET_FITTING_SIZE(6); // 2688/2688 128/000\nconst uint32_t fittingSize3 = SET_FITTING_SIZE(4); // 4032/3968 128/256\nconst uint32_t fittingSize4 = SET_FITTING_SIZE(3); // 5376/5376 128/000\nconst uint32_t fittingSize5 = SET_FITTING_SIZE(2); // 8128/8064 000/000\n#undef SET_FITTING_SIZE\n\n/*\n * The total number of thread-specific Block-based bins\n */\nconst uint32_t numBlockBins = minFittingIndex+numFittingBins;\n\n/*\n * Objects of this size and larger are considered large objects.\n */\nconst uint32_t minLargeObjectSize = fittingSize5 + 1;\n\n/*\n * Per-thread pool of slab blocks. Idea behind it is to not share with other\n * threads memory that are likely in local cache(s) of our CPU.\n */\nclass FreeBlockPool {\n    Block      *head;\n    int         size;\n    Backend    *backend;\n    bool        lastAccessMiss;\npublic:\n    static const int POOL_HIGH_MARK = 32;\n    static const int POOL_LOW_MARK  = 8;\n\n    class ResOfGet {\n        ResOfGet();\n    public:\n        Block* block;\n        bool   lastAccMiss;\n        ResOfGet(Block *b, bool lastMiss) : block(b), lastAccMiss(lastMiss) {}\n    };\n\n    // allocated in zero-initialized memory\n    FreeBlockPool(Backend *bknd) : backend(bknd) {}\n    ResOfGet getBlock();\n    void returnBlock(Block *block);\n    bool externalCleanup(); // can be called by another thread\n};\n\ntemplate<int LOW_MARK, int HIGH_MARK>\nclass LocalLOCImpl {\n    static const size_t MAX_TOTAL_SIZE = 4*1024*1024;\n    // TODO: can single-linked list be faster here?\n    LargeMemoryBlock *head,\n                     *tail; // need it when do releasing on overflow\n    size_t            totalSize;\n    int               numOfBlocks;\npublic:\n    bool put(LargeMemoryBlock *object, ExtMemoryPool *extMemPool);\n    LargeMemoryBlock *get(size_t size);\n    bool externalCleanup(ExtMemoryPool *extMemPool);\n#if __TBB_MALLOC_WHITEBOX_TEST\n    LocalLOCImpl() : head(NULL), tail(NULL), totalSize(0), numOfBlocks(0) {}\n    static size_t getMaxSize() { return MAX_TOTAL_SIZE; }\n    static const int LOC_HIGH_MARK = HIGH_MARK;\n#else\n    // no ctor, object must be created in zero-initialized memory\n#endif\n};\n\ntypedef LocalLOCImpl<8,32> LocalLOC; // set production code parameters\n\nclass TLSData : public TLSRemote {\n    MemoryPool   *memPool;\npublic:\n    Bin           bin[numBlockBinLimit];\n    FreeBlockPool freeSlabBlocks;\n    LocalLOC      lloc;\n    unsigned      currCacheIdx;\nprivate:\n    bool unused;\npublic:\n    TLSData(MemoryPool *mPool, Backend *bknd) : memPool(mPool), freeSlabBlocks(bknd) {}\n    MemoryPool *getMemPool() const { return memPool; }\n    Bin* getAllocationBin(size_t size);\n    void release(MemoryPool *mPool);\n    bool externalCleanup(ExtMemoryPool *mPool, bool cleanOnlyUnused) {\n        if (!unused && cleanOnlyUnused) return false;\n        // both cleanups to be called, and the order is not important\n        return lloc.externalCleanup(mPool) | freeSlabBlocks.externalCleanup();\n    }\n    bool cleanUnusedActiveBlocks(Backend *backend, bool userPool);\n    void markUsed() { unused = false; } // called by owner when TLS touched\n    void markUnused() { unused =  true; } // can be called by not owner thread\n};\n\nTLSData *TLSKey::createTLS(MemoryPool *memPool, Backend *backend)\n{\n    MALLOC_ASSERT( sizeof(TLSData) >= sizeof(Bin) * numBlockBins + sizeof(FreeBlockPool), ASSERT_TEXT );\n    TLSData* tls = (TLSData*) memPool->bootStrapBlocks.allocate(memPool, sizeof(TLSData));\n    if ( !tls )\n        return NULL;\n    new(tls) TLSData(memPool, backend);\n    /* the block contains zeroes after bootStrapMalloc, so bins are initialized */\n#if MALLOC_DEBUG\n    for (uint32_t i = 0; i < numBlockBinLimit; i++)\n        tls->bin[i].verifyInitState();\n#endif\n    setThreadMallocTLS(tls);\n    memPool->extMemPool.allLocalCaches.registerThread(tls);\n    return tls;\n}\n\nbool TLSData::cleanUnusedActiveBlocks(Backend *backend, bool userPool)\n{\n    bool released = false;\n    // active blocks can be not used, so return them to backend\n    for (uint32_t i=0; i<numBlockBinLimit; i++)\n        if (bin[i].activeBlockUnused()) {\n            Block *block = bin[i].getActiveBlock();\n            bin[i].outofTLSBin(block);\n            // slab blocks in user's pools do not have valid backRefIdx\n            if (!userPool)\n                removeBackRef(*(block->getBackRefIdx()));\n            backend->putSlabBlock(block);\n\n            released = true;\n        }\n    return released;\n}\n\nbool ExtMemoryPool::releaseAllLocalCaches()\n{\n    bool released = allLocalCaches.cleanup(this, /*cleanOnlyUnused=*/false);\n\n    if (TLSData *tlsData = tlsPointerKey.getThreadMallocTLS())\n        // released only for current thread for now\n        released |= tlsData->cleanUnusedActiveBlocks(&backend, userPool());\n\n    return released;\n}\n\nvoid AllLocalCaches::registerThread(TLSRemote *tls)\n{\n    tls->prev = NULL;\n    MallocMutex::scoped_lock lock(listLock);\n    MALLOC_ASSERT(head!=tls, ASSERT_TEXT);\n    tls->next = head;\n    if (head)\n        head->prev = tls;\n    head = tls;\n    MALLOC_ASSERT(head->next!=head, ASSERT_TEXT);\n}\n\nvoid AllLocalCaches::unregisterThread(TLSRemote *tls)\n{\n    MallocMutex::scoped_lock lock(listLock);\n    MALLOC_ASSERT(head, \"Can't unregister thread: no threads are registered.\");\n    if (head == tls)\n        head = tls->next;\n    if (tls->next)\n        tls->next->prev = tls->prev;\n    if (tls->prev)\n        tls->prev->next = tls->next;\n    MALLOC_ASSERT(!tls->next || tls->next->next!=tls->next, ASSERT_TEXT);\n}\n\nbool AllLocalCaches::cleanup(ExtMemoryPool *extPool, bool cleanOnlyUnused)\n{\n    bool total = false;\n    {\n        MallocMutex::scoped_lock lock(listLock);\n\n        for (TLSRemote *curr=head; curr; curr=curr->next)\n            total |= static_cast<TLSData*>(curr)->\n                         externalCleanup(extPool, cleanOnlyUnused);\n    }\n    return total;\n}\n\nvoid AllLocalCaches::markUnused()\n{\n    bool locked;\n    MallocMutex::scoped_lock lock(listLock, /*block=*/false, &locked);\n    if (!locked) // not wait for marking if someone doing something with it\n        return;\n\n    for (TLSRemote *curr=head; curr; curr=curr->next)\n        static_cast<TLSData*>(curr)->markUnused();\n}\n\n#if MALLOC_CHECK_RECURSION\nMallocMutex RecursiveMallocCallProtector::rmc_mutex;\npthread_t   RecursiveMallocCallProtector::owner_thread;\nvoid       *RecursiveMallocCallProtector::autoObjPtr;\nbool        RecursiveMallocCallProtector::mallocRecursionDetected;\n#if __FreeBSD__\nbool        RecursiveMallocCallProtector::canUsePthread;\n#endif\n\n#endif\n\n/*********** End code to provide thread ID and a TLS pointer **********/\n\n// Parameter for isLargeObject, keeps our expectations on memory origin.\n// Assertions must use unknownMem to reliably report object invalidity.\nenum MemoryOrigin {\n    ourMem,    // allocated by TBB allocator\n    unknownMem // can be allocated by system allocator or TBB allocator\n};\n\ntemplate<MemoryOrigin> bool isLargeObject(void *object);\nstatic void *internalMalloc(size_t size);\nstatic void internalFree(void *object);\nstatic void *internalPoolMalloc(MemoryPool* mPool, size_t size);\nstatic bool internalPoolFree(MemoryPool *mPool, void *object, size_t size);\n\n#if !MALLOC_DEBUG\n#if __INTEL_COMPILER || _MSC_VER\n#define NOINLINE(decl) __declspec(noinline) decl\n#define ALWAYSINLINE(decl) __forceinline decl\n#elif __GNUC__\n#define NOINLINE(decl) decl __attribute__ ((noinline))\n#define ALWAYSINLINE(decl) decl __attribute__ ((always_inline))\n#else\n#define NOINLINE(decl) decl\n#define ALWAYSINLINE(decl) decl\n#endif\n\nstatic NOINLINE( bool doInitialization() );\nALWAYSINLINE( bool isMallocInitialized() );\n\n#undef ALWAYSINLINE\n#undef NOINLINE\n#endif /* !MALLOC_DEBUG */\n\n\n/********* Now some rough utility code to deal with indexing the size bins. **************/\n\n/*\n * Given a number return the highest non-zero bit in it. It is intended to work with 32-bit values only.\n * Moreover, on IPF, for sake of simplicity and performance, it is narrowed to only serve for 64 to 1023.\n * This is enough for current algorithm of distribution of sizes among bins.\n * __TBB_Log2 is not used here to minimize dependencies on TBB specific sources.\n */\n#if _WIN64 && _MSC_VER>=1400 && !__INTEL_COMPILER\nextern \"C\" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );\n#pragma intrinsic(_BitScanReverse)\n#endif\nstatic inline unsigned int highestBitPos(unsigned int n)\n{\n    MALLOC_ASSERT( n>=64 && n<1024, ASSERT_TEXT ); // only needed for bsr array lookup, but always true\n    unsigned int pos;\n#if __ARCH_x86_32||__ARCH_x86_64\n\n# if __linux__||__APPLE__||__FreeBSD__||__NetBSD__||__sun||__MINGW32__\n    __asm__ (\"bsr %1,%0\" : \"=r\"(pos) : \"r\"(n));\n# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))\n    __asm\n    {\n        bsr eax, n\n        mov pos, eax\n    }\n# elif _WIN64 && _MSC_VER>=1400\n    _BitScanReverse((unsigned long*)&pos, (unsigned long)n);\n# else\n#   error highestBitPos() not implemented for this platform\n# endif\n#elif __arm__\n    __asm__ __volatile__\n    (\n       \"clz %0, %1\\n\"\n       \"rsb %0, %0, %2\\n\"\n       :\"=r\" (pos) :\"r\" (n), \"I\" (31)\n    );\n#else\n    static unsigned int bsr[16] = {0/*N/A*/,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};\n    pos = bsr[ n>>6 ];\n#endif /* __ARCH_* */\n    return pos;\n}\n\ntemplate<bool Is32Bit>\nunsigned int getSmallObjectIndex(unsigned int size)\n{\n    return (size-1)>>3;\n}\ntemplate<>\nunsigned int getSmallObjectIndex</*Is32Bit=*/false>(unsigned int size)\n{\n    // For 64-bit malloc, 16 byte alignment is needed except for bin 0.\n    unsigned int result = (size-1)>>3;\n    if (result) result |= 1; // 0,1,3,5,7; bins 2,4,6 are not aligned to 16 bytes\n    return result;\n}\n/*\n * Depending on indexRequest, for a given size return either the index into the bin\n * for objects of this size, or the actual size of objects in this bin.\n */\ntemplate<bool indexRequest>\nstatic unsigned int getIndexOrObjectSize (unsigned int size)\n{\n    if (size <= maxSmallObjectSize) { // selection from 8/16/24/32/40/48/56/64\n        unsigned int index = getSmallObjectIndex</*Is32Bit=*/(sizeof(size_t)<=4)>( size );\n         /* Bin 0 is for 8 bytes, bin 1 is for 16, and so forth */\n        return indexRequest ? index : (index+1)<<3;\n    }\n    else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024\n        unsigned int order = highestBitPos(size-1); // which group of bin sizes?\n        MALLOC_ASSERT( 6<=order && order<=9, ASSERT_TEXT );\n        if (indexRequest)\n            return minSegregatedObjectIndex - (4*6) - 4 + (4*order) + ((size-1)>>(order-2));\n        else {\n            unsigned int alignment = 128 >> (9-order); // alignment in the group\n            MALLOC_ASSERT( alignment==16 || alignment==32 || alignment==64 || alignment==128, ASSERT_TEXT );\n            return alignUp(size,alignment);\n        }\n    }\n    else {\n        if( size <= fittingSize3 ) {\n            if( size <= fittingSize2 ) {\n                if( size <= fittingSize1 )\n                    return indexRequest ? minFittingIndex : fittingSize1;\n                else\n                    return indexRequest ? minFittingIndex+1 : fittingSize2;\n            } else\n                return indexRequest ? minFittingIndex+2 : fittingSize3;\n        } else {\n            if( size <= fittingSize5 ) {\n                if( size <= fittingSize4 )\n                    return indexRequest ? minFittingIndex+3 : fittingSize4;\n                else\n                    return indexRequest ? minFittingIndex+4 : fittingSize5;\n            } else {\n                MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen\n                return ~0U;\n            }\n        }\n    }\n}\n\nstatic unsigned int getIndex (unsigned int size)\n{\n    return getIndexOrObjectSize</*indexRequest=*/true>(size);\n}\n\nstatic unsigned int getObjectSize (unsigned int size)\n{\n    return getIndexOrObjectSize</*indexRequest=*/false>(size);\n}\n\n\nvoid *BootStrapBlocks::allocate(MemoryPool *memPool, size_t size)\n{\n    FreeObject *result;\n\n    MALLOC_ASSERT( size == sizeof(TLSData), ASSERT_TEXT );\n\n    { // Lock with acquire\n        MallocMutex::scoped_lock scoped_cs(bootStrapLock);\n\n        if( bootStrapObjectList) {\n            result = bootStrapObjectList;\n            bootStrapObjectList = bootStrapObjectList->next;\n        } else {\n            if (!bootStrapBlock) {\n                bootStrapBlock = memPool->getEmptyBlock(size);\n                if (!bootStrapBlock) return NULL;\n            }\n            result = bootStrapBlock->bumpPtr;\n            bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);\n            if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {\n                bootStrapBlock->bumpPtr = NULL;\n                bootStrapBlock->next = bootStrapBlockUsed;\n                bootStrapBlockUsed = bootStrapBlock;\n                bootStrapBlock = NULL;\n            }\n        }\n    } // Unlock with release\n\n    memset (result, 0, size);\n    return (void*)result;\n}\n\nvoid BootStrapBlocks::free(void* ptr)\n{\n    MALLOC_ASSERT( ptr, ASSERT_TEXT );\n    { // Lock with acquire\n        MallocMutex::scoped_lock scoped_cs(bootStrapLock);\n        ((FreeObject*)ptr)->next = bootStrapObjectList;\n        bootStrapObjectList = (FreeObject*)ptr;\n    } // Unlock with release\n}\n\nvoid BootStrapBlocks::reset()\n{\n    bootStrapBlock = bootStrapBlockUsed = NULL;\n    bootStrapObjectList = NULL;\n}\n\n#if !(FREELIST_NONBLOCKING)\nstatic MallocMutex publicFreeListLock; // lock for changes of publicFreeList\n#endif\n\n/********* End rough utility code  **************/\n\n/* LifoList assumes zero initialization so a vector of it can be created\n * by just allocating some space with no call to constructor.\n * On Linux, it seems to be necessary to avoid linking with C++ libraries.\n *\n * By usage convention there is no race on the initialization. */\nLifoList::LifoList( ) : top(NULL)\n{\n    // MallocMutex assumes zero initialization\n    memset(&lock, 0, sizeof(MallocMutex));\n}\n\nvoid LifoList::push(Block *block)\n{\n    MallocMutex::scoped_lock scoped_cs(lock);\n    block->next = top;\n    top = block;\n}\n\nBlock *LifoList::pop()\n{\n    Block *block=NULL;\n    if (top) {\n        MallocMutex::scoped_lock scoped_cs(lock);\n        if (top) {\n            block = top;\n            top = block->next;\n        }\n    }\n    return block;\n}\n\nBlock *LifoList::grab()\n{\n    Block *block = NULL;\n    if (top) {\n        MallocMutex::scoped_lock scoped_cs(lock);\n        block = top;\n        top = NULL;\n    }\n    return block;\n}\n\n/********* Thread and block related code      *************/\n\ntemplate<bool poolDestroy> void AllLargeBlocksList::releaseAll(Backend *backend) {\n     LargeMemoryBlock *next, *lmb = loHead;\n     loHead = NULL;\n\n     for (; lmb; lmb = next) {\n         next = lmb->gNext;\n         if (poolDestroy) {\n             // as it's pool destruction, no need to return object to backend,\n             // only remove backrefs, as they are global\n             removeBackRef(lmb->backRefIdx);\n         } else {\n             // clean g(Next|Prev) to prevent removing lmb\n             // from AllLargeBlocksList inside returnLargeObject\n             lmb->gNext = lmb->gPrev = NULL;\n             backend->returnLargeObject(lmb);\n         }\n     }\n}\n\nTLSData* MemoryPool::getTLS(bool create)\n{\n    TLSData* tls = extMemPool.tlsPointerKey.getThreadMallocTLS();\n    if (create && !tls)\n        tls = extMemPool.tlsPointerKey.createTLS(this, &extMemPool.backend);\n    return tls;\n}\n\n/*\n * Return the bin for the given size.\n */\ninline Bin* TLSData::getAllocationBin(size_t size)\n{\n    return bin + getIndex(size);\n}\n\n/* Return an empty uninitialized block in a non-blocking fashion. */\nBlock *MemoryPool::getEmptyBlock(size_t size)\n{\n    TLSData* tls = extMemPool.tlsPointerKey.getThreadMallocTLS();\n    // try to use per-thread cache, if TLS available\n    FreeBlockPool::ResOfGet resOfGet = tls?\n        tls->freeSlabBlocks.getBlock() : FreeBlockPool::ResOfGet(NULL, false);\n    Block *result = resOfGet.block;\n\n    if (!result) { // not found in local cache, asks backend for slabs\n        int num = resOfGet.lastAccMiss? Backend::numOfSlabAllocOnMiss : 1;\n        BackRefIdx backRefIdx[Backend::numOfSlabAllocOnMiss];\n\n        result = static_cast<Block*>(extMemPool.backend.getSlabBlock(num));\n        if (!result) return NULL;\n\n        if (!extMemPool.userPool())\n            for (int i=0; i<num; i++) {\n                backRefIdx[i] = BackRefIdx::newBackRef(/*largeObj=*/false);\n                if (backRefIdx[i].isInvalid()) {\n                    // roll back resource allocation\n                    for (int j=0; j<i; j++)\n                        removeBackRef(backRefIdx[j]);\n                    Block *b = result;\n                    for (int j=0; j<num; b=(Block*)((uintptr_t)b+slabSize), j++)\n                        extMemPool.backend.putSlabBlock(b);\n                    return NULL;\n                }\n            }\n        // resources were allocated, register blocks\n        Block *b = result;\n        for (int i=0; i<num; b=(Block*)((uintptr_t)b+slabSize), i++) {\n            // slab block in user's pool must have invalid backRefIdx\n            if (extMemPool.userPool()) {\n                new (&b->backRefIdx) BackRefIdx();\n            } else {\n                setBackRef(backRefIdx[i], b);\n                b->backRefIdx = backRefIdx[i];\n            }\n            b->tlsPtr = tls;\n            b->poolPtr = this;\n            // all but first one go to per-thread pool\n            if (i > 0) {\n                MALLOC_ASSERT(tls, ASSERT_TEXT);\n                tls->freeSlabBlocks.returnBlock(b);\n            }\n        }\n    }\n    MALLOC_ASSERT(result, ASSERT_TEXT);\n    result->initEmptyBlock(tls, size);\n    STAT_increment(getThreadId(), getIndex(result->objectSize), allocBlockNew);\n    return result;\n}\n\nvoid MemoryPool::returnEmptyBlock(Block *block, bool poolTheBlock)\n{\n    block->reset();\n    if (poolTheBlock) {\n        extMemPool.tlsPointerKey.getThreadMallocTLS()->freeSlabBlocks.returnBlock(block);\n    }\n    else {\n        // slab blocks in user's pools do not have valid backRefIdx\n        if (!extMemPool.userPool())\n            removeBackRef(*(block->getBackRefIdx()));\n        extMemPool.backend.putSlabBlock(block);\n    }\n}\n\nbool ExtMemoryPool::init(intptr_t poolId, rawAllocType rawAlloc,\n                         rawFreeType rawFree, size_t granularity,\n                         bool keepAllMemory, bool fixedPool)\n{\n    this->poolId = poolId;\n    this->rawAlloc = rawAlloc;\n    this->rawFree = rawFree;\n    this->granularity = granularity;\n    this->keepAllMemory = keepAllMemory;\n    this->fixedPool = fixedPool;\n    this->delayRegsReleasing = false;\n    if (!initTLS())\n        return false;\n    loc.init(this);\n    backend.init(this);\n    MALLOC_ASSERT(isPoolValid(), NULL);\n    return true;\n}\n\nbool ExtMemoryPool::initTLS() { return tlsPointerKey.init(); }\n\nbool MemoryPool::init(intptr_t poolId, const MemPoolPolicy *policy)\n{\n    if (!extMemPool.init(poolId, policy->pAlloc, policy->pFree,\n               policy->granularity? policy->granularity : defaultGranularity,\n               policy->keepAllMemory, policy->fixedPool))\n        return false;\n    {\n        MallocMutex::scoped_lock lock(memPoolListLock);\n        next = defaultMemPool->next;\n        defaultMemPool->next = this;\n        prev = defaultMemPool;\n        if (next)\n            next->prev = this;\n    }\n    return true;\n}\n\nbool MemoryPool::reset()\n{\n    MALLOC_ASSERT(extMemPool.userPool(), \"No reset for the system pool.\");\n    // memory is not releasing during pool reset\n    // TODO: mark regions to release unused on next reset()\n    extMemPool.delayRegionsReleasing(true);\n\n    bootStrapBlocks.reset();\n    extMemPool.lmbList.releaseAll</*poolDestroy=*/false>(&extMemPool.backend);\n    if (!extMemPool.reset())\n        return false;\n\n    if (!extMemPool.initTLS())\n        return false;\n    extMemPool.delayRegionsReleasing(false);\n    return true;\n}\n\nbool MemoryPool::destroy()\n{\n#if __TBB_MALLOC_LOCACHE_STAT\n    extMemPool.loc.reportStat(stdout);\n#endif\n#if __TBB_MALLOC_BACKEND_STAT\n    extMemPool.backend.reportStat(stdout);\n#endif\n    {\n        MallocMutex::scoped_lock lock(memPoolListLock);\n        // remove itself from global pool list\n        if (prev)\n            prev->next = next;\n        if (next)\n            next->prev = prev;\n    }\n    // slab blocks in non-default pool do not have backreferences,\n    // only large objects do\n    if (extMemPool.userPool())\n        extMemPool.lmbList.releaseAll</*poolDestroy=*/true>(&extMemPool.backend);\n    else {\n        // only one non-userPool() is supported now\n        MALLOC_ASSERT(this==defaultMemPool, NULL);\n        // There and below in extMemPool.destroy(), do not restore initial state\n        // for user pool, because it's just about to be released. But for system\n        // pool restoring, we do not want to do zeroing of it on subsequent reload.\n        bootStrapBlocks.reset();\n        extMemPool.orphanedBlocks.reset();\n    }\n    return extMemPool.destroy();\n}\n\nvoid MemoryPool::onThreadShutdown(TLSData *tlsData)\n{\n    if (tlsData) { // might be called for \"empty\" TLS\n        tlsData->release(this);\n        bootStrapBlocks.free(tlsData);\n        clearTLS();\n    }\n}\n\n#if MALLOC_DEBUG\nvoid Bin::verifyTLSBin (size_t size) const\n{\n/* The debug version verifies the TLSBin as needed */\n    uint32_t objSize = getObjectSize(size);\n\n    if (activeBlk) {\n        MALLOC_ASSERT( activeBlk->isOwnedByCurrentThread(), ASSERT_TEXT );\n        MALLOC_ASSERT( activeBlk->objectSize == objSize, ASSERT_TEXT );\n#if MALLOC_DEBUG>1\n        for (Block* temp = activeBlk->next; temp; temp=temp->next) {\n            MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );\n            MALLOC_ASSERT( temp->isOwnedByCurrentThread(), ASSERT_TEXT );\n            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );\n            MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );\n            if (temp->next) {\n                MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );\n            }\n        }\n        for (Block* temp = activeBlk->previous; temp; temp=temp->previous) {\n            MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );\n            MALLOC_ASSERT( temp->isOwnedByCurrentThread(), ASSERT_TEXT );\n            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );\n            MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );\n            if (temp->previous) {\n                MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );\n            }\n        }\n#endif /* MALLOC_DEBUG>1 */\n    }\n}\n#else /* MALLOC_DEBUG */\ninline void Bin::verifyTLSBin (size_t) const { }\n#endif /* MALLOC_DEBUG */\n\n/*\n * Add a block to the start of this tls bin list.\n */\nvoid Bin::pushTLSBin(Block* block)\n{\n    /* The objectSize should be defined and not a parameter\n       because the function is applied to partially filled blocks as well */\n    unsigned int size = block->objectSize;\n\n    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );\n    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );\n    MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );\n    MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );\n\n    MALLOC_ASSERT( this, ASSERT_TEXT );\n    verifyTLSBin(size);\n\n    block->next = activeBlk;\n    if( activeBlk ) {\n        block->previous = activeBlk->previous;\n        activeBlk->previous = block;\n        if( block->previous )\n            block->previous->next = block;\n    } else {\n        activeBlk = block;\n    }\n\n    verifyTLSBin(size);\n}\n\n/*\n * Take a block out of its tls bin (e.g. before removal).\n */\nvoid Bin::outofTLSBin(Block* block)\n{\n    unsigned int size = block->objectSize;\n\n    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );\n    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );\n\n    MALLOC_ASSERT( this, ASSERT_TEXT );\n    verifyTLSBin(size);\n\n    if (block == activeBlk) {\n        activeBlk = block->previous? block->previous : block->next;\n    }\n    /* Delink the block */\n    if (block->previous) {\n        MALLOC_ASSERT( block->previous->next == block, ASSERT_TEXT );\n        block->previous->next = block->next;\n    }\n    if (block->next) {\n        MALLOC_ASSERT( block->next->previous == block, ASSERT_TEXT );\n        block->next->previous = block->previous;\n    }\n    block->next = NULL;\n    block->previous = NULL;\n\n    verifyTLSBin(size);\n}\n\nBlock* Bin::getPublicFreeListBlock()\n{\n    Block* block;\n    MALLOC_ASSERT( this, ASSERT_TEXT );\n    // if this method is called, active block usage must be unsuccessful\n    MALLOC_ASSERT( !activeBlk && !mailbox || activeBlk && activeBlk->isFull, ASSERT_TEXT );\n\n// the counter should be changed    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);\n    if (!FencedLoad((intptr_t&)mailbox)) // hotpath is empty mailbox\n        return NULL;\n    else { // mailbox is not empty, take lock and inspect it\n        MallocMutex::scoped_lock scoped_cs(mailLock);\n        block = mailbox;\n        if( block ) {\n            MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );\n            MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );\n            mailbox = block->nextPrivatizable;\n            block->nextPrivatizable = (Block*) this;\n        }\n    }\n    if( block ) {\n        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );\n        block->privatizePublicFreeList();\n    }\n    return block;\n}\n\nbool Block::emptyEnoughToUse()\n{\n    const float threshold = (slabSize - sizeof(Block)) * (1-emptyEnoughRatio);\n\n    if (bumpPtr) {\n        /* If we are still using a bump ptr for this block it is empty enough to use. */\n        STAT_increment(getThreadId(), getIndex(objectSize), examineEmptyEnough);\n        isFull = false;\n        return 1;\n    }\n\n    /* allocatedCount shows how many objects in the block are in use; however it still counts\n       blocks freed by other threads; so prior call to privatizePublicFreeList() is recommended */\n    isFull = (allocatedCount*objectSize > threshold)? true: false;\n#if COLLECT_STATISTICS\n    if (isFull)\n        STAT_increment(getThreadId(), getIndex(objectSize), examineNotEmpty);\n    else\n        STAT_increment(getThreadId(), getIndex(objectSize), examineEmptyEnough);\n#endif\n    return !isFull;\n}\n\n/* Restore the bump pointer for an empty block that is planned to use */\nvoid Block::restoreBumpPtr()\n{\n    MALLOC_ASSERT( allocatedCount == 0, ASSERT_TEXT );\n    MALLOC_ASSERT( publicFreeList == NULL, ASSERT_TEXT );\n    STAT_increment(getThreadId(), getIndex(objectSize), freeRestoreBumpPtr);\n    bumpPtr = (FreeObject *)((uintptr_t)this + slabSize - objectSize);\n    freeList = NULL;\n    isFull = 0;\n}\n\nvoid Block::freeOwnObject(void *object)\n{\n    tlsPtr->markUsed();\n    allocatedCount--;\n    MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );\n#if COLLECT_STATISTICS\n    // Note that getAllocationBin is not called on the hottest path with statistics off.\n    if (tlsPtr->getAllocationBin(objectSize)->getActiveBlock() != this)\n        STAT_increment(getThreadId(), getIndex(objectSize), freeToInactiveBlock);\n    else\n        STAT_increment(getThreadId(), getIndex(objectSize), freeToActiveBlock);\n#endif\n    if (empty()) {\n        // The bump pointer is about to be restored for the block,\n        // no need to find objectToFree here (this is costly).\n\n        // if the last object of a slab is freed, the slab cannot be marked full\n        MALLOC_ASSERT(!isFull, ASSERT_TEXT);\n        tlsPtr->getAllocationBin(objectSize)->processLessUsedBlock(poolPtr, this);\n    } else {\n        FreeObject *objectToFree = findObjectToFree(object);\n        objectToFree->next = freeList;\n        freeList = objectToFree;\n\n        if (isFull && emptyEnoughToUse())\n            tlsPtr->getAllocationBin(objectSize)->moveBlockToFront(this);\n    }\n}\n\nvoid Block::freePublicObject (FreeObject *objectToFree)\n{\n    FreeObject *localPublicFreeList;\n\n    MALLOC_ITT_SYNC_RELEASING(&publicFreeList);\n#if FREELIST_NONBLOCKING\n    FreeObject *temp = publicFreeList;\n    do {\n        localPublicFreeList = objectToFree->next = temp;\n        temp = (FreeObject*)AtomicCompareExchange(\n                                (intptr_t&)publicFreeList,\n                                (intptr_t)objectToFree, (intptr_t)localPublicFreeList );\n        // no backoff necessary because trying to make change, not waiting for a change\n    } while( temp != localPublicFreeList );\n#else\n    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);\n    {\n        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);\n        localPublicFreeList = objectToFree->next = publicFreeList;\n        publicFreeList = objectToFree;\n    }\n#endif\n\n    if( localPublicFreeList==NULL ) {\n        // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE\n        // otherwise, it should point to the bin the block belongs to.\n        // reading nextPrivatizable is thread-safe below, because:\n        // 1) the executing thread atomically got publicFreeList==NULL and changed it to non-NULL;\n        // 2) only owning thread can change it back to NULL,\n        // 3) but it can not be done until the block is put to the mailbox\n        // So the executing thread is now the only one that can change nextPrivatizable\n        if( !isNotForUse(nextPrivatizable) ) {\n            MALLOC_ASSERT( nextPrivatizable!=NULL, ASSERT_TEXT );\n            Bin* theBin = (Bin*) nextPrivatizable;\n            MallocMutex::scoped_lock scoped_cs(theBin->mailLock);\n            nextPrivatizable = theBin->mailbox;\n            theBin->mailbox = this;\n        }\n    }\n    STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);\n    STAT_increment(ownerTid, getIndex(objectSize), freeByOtherThread);\n}\n\nvoid Block::privatizePublicFreeList( bool cleanup )\n{\n    FreeObject *temp, *localPublicFreeList;\n    const intptr_t endMarker = cleanup? UNUSABLE : 0;\n\n    // During cleanup of orphaned blocks, the calling thread is not registered as the owner \n    MALLOC_ASSERT( cleanup || isOwnedByCurrentThread(), ASSERT_TEXT );\n#if FREELIST_NONBLOCKING\n    temp = publicFreeList;\n    do {\n        localPublicFreeList = temp;\n        temp = (FreeObject*)AtomicCompareExchange( (intptr_t&)publicFreeList,\n                                        endMarker, (intptr_t)localPublicFreeList);\n        // no backoff necessary because trying to make change, not waiting for a change\n    } while( temp != localPublicFreeList );\n#else\n    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);\n    {\n        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);\n        localPublicFreeList = publicFreeList;\n        publicFreeList = endMarker;\n    }\n    temp = localPublicFreeList;\n#endif\n    MALLOC_ITT_SYNC_ACQUIRED(&publicFreeList);\n\n     // publicFreeList must have been UNUSABLE (possible for orphaned blocks) or valid, but not NULL\n    MALLOC_ASSERT( localPublicFreeList!=NULL, ASSERT_TEXT );\n    MALLOC_ASSERT( localPublicFreeList==temp, ASSERT_TEXT );\n    if( isSolidPtr(temp) ) {\n        MALLOC_ASSERT( allocatedCount <= (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );\n        /* other threads did not change the counter freeing our blocks */\n        allocatedCount--;\n        while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE\n            temp = temp->next;\n            allocatedCount--;\n            MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );\n        }\n        /* merge with local freeList */\n        temp->next = freeList;\n        freeList = localPublicFreeList;\n        STAT_increment(getThreadId(), getIndex(objectSize), allocPrivatized);\n    }\n}\n\nvoid Block::privatizeOrphaned(TLSData *tls, unsigned index)\n{\n    Bin* bin = tls->bin + index;\n    STAT_increment(getThreadId(), index, allocBlockPublic);\n    next = NULL;\n    previous = NULL;\n    MALLOC_ASSERT( publicFreeList!=NULL, ASSERT_TEXT );\n    /* There is not a race here since no other thread owns this block */\n    markOwned(tls);\n    // It is safe to change nextPrivatizable, as publicFreeList is not null\n    MALLOC_ASSERT( isNotForUse(nextPrivatizable), ASSERT_TEXT );\n    nextPrivatizable = (Block*)bin;\n    // the next call is required to change publicFreeList to 0\n    privatizePublicFreeList();\n    if( allocatedCount ) {\n        emptyEnoughToUse(); // check its fullness and set result->isFull\n    } else {\n        restoreBumpPtr();\n    }\n    MALLOC_ASSERT( !isNotForUse(publicFreeList), ASSERT_TEXT );\n}\n\nvoid Block::shareOrphaned(intptr_t binTag, unsigned index)\n{\n    MALLOC_ASSERT( binTag, ASSERT_TEXT );\n    STAT_increment(getThreadId(), index, freeBlockPublic);\n    markOrphaned();\n    // need to set publicFreeList to non-zero, so other threads\n    // will not change nextPrivatizable and it can be zeroed.\n    if ((intptr_t)nextPrivatizable==binTag) {\n        void* oldval;\n#if FREELIST_NONBLOCKING\n        oldval = (void*)AtomicCompareExchange((intptr_t&)publicFreeList, UNUSABLE, 0);\n#else\n        STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);\n        {\n            MallocMutex::scoped_lock scoped_cs(publicFreeListLock);\n            if ( (oldval=publicFreeList)==NULL )\n                (intptr_t&)(publicFreeList) = UNUSABLE;\n        }\n#endif\n        if ( oldval!=NULL ) {\n            // another thread freed an object; we need to wait until it finishes.\n            // There is no need for exponential backoff, as the wait here is not for a lock;\n            // but need to yield, so the thread we wait has a chance to run.\n            // TODO: add a pause to also be friendly to hyperthreads\n            int count = 256;\n            while( (intptr_t)const_cast<Block* volatile &>(nextPrivatizable)==binTag ) {\n                if (--count==0) {\n                    do_yield();\n                    count = 256;\n                }\n            }\n        }\n    } else {\n        MALLOC_ASSERT( isSolidPtr(publicFreeList), ASSERT_TEXT );\n    }\n    MALLOC_ASSERT( publicFreeList!=NULL, ASSERT_TEXT );\n    // now it is safe to change our data\n    previous = NULL;\n    // it is caller responsibility to ensure that the list of blocks\n    // formed by nextPrivatizable pointers is kept consistent if required.\n    // if only called from thread shutdown code, it does not matter.\n    (intptr_t&)(nextPrivatizable) = UNUSABLE;\n}\n\nvoid Block::cleanBlockHeader()\n{\n    next = NULL;\n    previous = NULL;\n    freeList = NULL;\n    allocatedCount = 0;\n    isFull = 0;\n    tlsPtr = NULL;\n\n    publicFreeList = NULL;\n}\n\nvoid Block::initEmptyBlock(TLSData *tls, size_t size)\n{\n    // Having getIndex and getObjectSize called next to each other\n    // allows better compiler optimization as they basically share the code.\n    unsigned int index = getIndex(size);\n    unsigned int objSz = getObjectSize(size);\n\n    cleanBlockHeader();\n    objectSize = objSz;\n    markOwned(tls);\n    // bump pointer should be prepared for first allocation - thus mode it down to objectSize\n    bumpPtr = (FreeObject *)((uintptr_t)this + slabSize - objectSize);\n\n    // each block should have the address where the head of the list of \"privatizable\" blocks is kept\n    // the only exception is a block for boot strap which is initialized when TLS is yet NULL\n    nextPrivatizable = tls? (Block*)(tls->bin + index) : NULL;\n    TRACEF(( \"[ScalableMalloc trace] Empty block %p is initialized, owner is %ld, objectSize is %d, bumpPtr is %p\\n\",\n             this, tlsPtr ? getThreadId() : -1, objectSize, bumpPtr ));\n}\n\nBlock *OrphanedBlocks::get(TLSData *tls, unsigned int size)\n{\n    // TODO: try to use index from getAllocationBin\n    unsigned int index = getIndex(size);\n    Block *block = bins[index].pop();\n    if (block) {\n        MALLOC_ITT_SYNC_ACQUIRED(bins+index);\n        block->privatizeOrphaned(tls, index);\n    }\n    return block;\n}\n\nvoid OrphanedBlocks::put(intptr_t binTag, Block *block)\n{\n    unsigned int index = getIndex(block->getSize());\n    block->shareOrphaned(binTag, index);\n    MALLOC_ITT_SYNC_RELEASING(bins+index);\n    bins[index].push(block);\n}\n\nvoid OrphanedBlocks::reset()\n{\n    for (uint32_t i=0; i<numBlockBinLimit; i++)\n        new (bins+i) LifoList();\n}\n\nbool OrphanedBlocks::cleanup(Backend* backend)\n{\n    bool result = false;\n    for (uint32_t i=0; i<numBlockBinLimit; i++) {\n        Block* block = bins[i].grab();\n        MALLOC_ITT_SYNC_ACQUIRED(bins+i);\n        while (block) {\n            Block* next = block->next;\n            block->privatizePublicFreeList( /*cleanup=*/true );\n            if (block->empty()) {\n                block->reset();\n                // slab blocks in user's pools do not have valid backRefIdx\n                if (!backend->inUserPool())\n                    removeBackRef(*(block->getBackRefIdx()));\n                backend->putSlabBlock(block);\n                result = true;\n            } else {\n                MALLOC_ITT_SYNC_RELEASING(bins+i);\n                bins[i].push(block);\n            }\n            block = next;\n        }\n    }\n    return result;\n}\n\nFreeBlockPool::ResOfGet FreeBlockPool::getBlock()\n{\n    Block *b = (Block*)AtomicFetchStore(&head, 0);\n\n    if (b) {\n        size--;\n        Block *newHead = b->next;\n        lastAccessMiss = false;\n        FencedStore((intptr_t&)head, (intptr_t)newHead);\n    } else\n        lastAccessMiss = true;\n\n    return ResOfGet(b, lastAccessMiss);\n}\n\nvoid FreeBlockPool::returnBlock(Block *block)\n{\n    MALLOC_ASSERT( size <= POOL_HIGH_MARK, ASSERT_TEXT );\n    Block *localHead = (Block*)AtomicFetchStore(&head, 0);\n\n    if (!localHead)\n        size = 0; // head was stolen by externalClean, correct size accordingly\n    else if (size == POOL_HIGH_MARK) {\n        // release cold blocks and add hot one,\n        // so keep POOL_LOW_MARK-1 blocks and add new block to head\n        Block *headToFree = localHead, *helper;\n        for (int i=0; i<POOL_LOW_MARK-2; i++)\n            headToFree = headToFree->next;\n        Block *last = headToFree;\n        headToFree = headToFree->next;\n        last->next = NULL;\n        size = POOL_LOW_MARK-1;\n        for (Block *currBl = headToFree; currBl; currBl = helper) {\n            helper = currBl->next;\n            // slab blocks in user's pools do not have valid backRefIdx\n            if (!backend->inUserPool())\n                removeBackRef(currBl->backRefIdx);\n            backend->putSlabBlock(currBl);\n        }\n    }\n    size++;\n    block->next = localHead;\n    FencedStore((intptr_t&)head, (intptr_t)block);\n}\n\nbool FreeBlockPool::externalCleanup()\n{\n    Block *helper;\n    bool nonEmpty = false;\n\n    for (Block *currBl=(Block*)AtomicFetchStore(&head, 0); currBl; currBl=helper) {\n        helper = currBl->next;\n        // slab blocks in user's pools do not have valid backRefIdx\n        if (!backend->inUserPool())\n            removeBackRef(currBl->backRefIdx);\n        backend->putSlabBlock(currBl);\n        nonEmpty = true;\n    }\n    return nonEmpty;\n}\n\n/* Prepare the block for returning to FreeBlockPool */\nvoid Block::reset()\n{\n    // it is caller's responsibility to ensure no data is lost before calling this\n    MALLOC_ASSERT( allocatedCount==0, ASSERT_TEXT );\n    MALLOC_ASSERT( !isSolidPtr(publicFreeList), ASSERT_TEXT );\n    if (!isStartupAllocObject())\n        STAT_increment(getThreadId(), getIndex(objectSize), freeBlockBack);\n\n    cleanBlockHeader();\n\n    nextPrivatizable = NULL;\n\n    objectSize = 0;\n    // for an empty block, bump pointer should point right after the end of the block\n    bumpPtr = (FreeObject *)((uintptr_t)this + slabSize);\n}\n\ninline void Bin::setActiveBlock (Block *block)\n{\n//    MALLOC_ASSERT( bin, ASSERT_TEXT );\n    MALLOC_ASSERT( block->isOwnedByCurrentThread(), ASSERT_TEXT );\n    // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)\n    activeBlk = block;\n}\n\ninline Block* Bin::setPreviousBlockActive()\n{\n    MALLOC_ASSERT( activeBlk, ASSERT_TEXT );\n    Block* temp = activeBlk->previous;\n    if( temp ) {\n        MALLOC_ASSERT( temp->isFull == 0, ASSERT_TEXT );\n        activeBlk = temp;\n    }\n    return temp;\n}\n\ninline bool Block::isOwnedByCurrentThread() const {\n    return tlsPtr && ownerTid.isCurrentThreadId();\n}\n\nFreeObject *Block::findObjectToFree(const void *object) const\n{\n    FreeObject *objectToFree;\n    // Due to aligned allocations, a pointer passed to scalable_free\n    // might differ from the address of internally allocated object.\n    // Small objects however should always be fine.\n    if (objectSize <= maxSegregatedObjectSize)\n        objectToFree = (FreeObject*)object;\n    // \"Fitting size\" allocations are suspicious if aligned higher than naturally\n    else {\n        if ( ! isAligned(object,2*fittingAlignment) )\n            // TODO: the above check is questionable - it gives false negatives in ~50% cases,\n            //       so might even be slower in average than unconditional use of findAllocatedObject.\n            // here it should be a \"real\" object\n            objectToFree = (FreeObject*)object;\n        else\n            // here object can be an aligned address, so applying additional checks\n            objectToFree = findAllocatedObject(object);\n        MALLOC_ASSERT( isAligned(objectToFree,fittingAlignment), ASSERT_TEXT );\n    }\n    MALLOC_ASSERT( isProperlyPlaced(objectToFree), ASSERT_TEXT );\n\n    return objectToFree;\n}\n\nvoid TLSData::release(MemoryPool *mPool)\n{\n    mPool->extMemPool.allLocalCaches.unregisterThread(this);\n    externalCleanup(&mPool->extMemPool, /*cleanOnlyUnused=*/false);\n\n    for (unsigned index = 0; index < numBlockBins; index++) {\n        Block *activeBlk = bin[index].getActiveBlock();\n        if (!activeBlk)\n            continue;\n        Block *threadlessBlock = activeBlk->previous;\n        while (threadlessBlock) {\n            Block *threadBlock = threadlessBlock->previous;\n            if (threadlessBlock->empty()) {\n                /* we destroy the thread, so not use its block pool */\n                mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);\n            } else {\n                mPool->extMemPool.orphanedBlocks.put(intptr_t(bin+index), threadlessBlock);\n            }\n            threadlessBlock = threadBlock;\n        }\n        threadlessBlock = activeBlk;\n        while (threadlessBlock) {\n            Block *threadBlock = threadlessBlock->next;\n            if (threadlessBlock->empty()) {\n                /* we destroy the thread, so not use its block pool */\n                mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);\n            } else {\n                mPool->extMemPool.orphanedBlocks.put(intptr_t(bin+index), threadlessBlock);\n            }\n            threadlessBlock = threadBlock;\n        }\n        bin[index].resetActiveBlock();\n    }\n}\n\n\n#if MALLOC_CHECK_RECURSION\n// TODO: Use dedicated heap for this\n\n/*\n * It's a special kind of allocation that can be used when malloc is\n * not available (either during startup or when malloc was already called and\n * we are, say, inside pthread_setspecific's call).\n * Block can contain objects of different sizes,\n * allocations are performed by moving bump pointer and increasing of object counter,\n * releasing is done via counter of objects allocated in the block\n * or moving bump pointer if releasing object is on a bound.\n * TODO: make bump pointer to grow to the same backward direction as all the others.\n */\n\nclass StartupBlock : public Block {\n    size_t availableSize() const {\n        return slabSize - ((uintptr_t)bumpPtr - (uintptr_t)this);\n    }\n    static StartupBlock *getBlock();\npublic:\n    static FreeObject *allocate(size_t size);\n    static size_t msize(void *ptr) { return *((size_t*)ptr - 1); }\n    void free(void *ptr);\n};\n\nstatic MallocMutex startupMallocLock;\nstatic StartupBlock *firstStartupBlock;\n\nStartupBlock *StartupBlock::getBlock()\n{\n    BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);\n    if (backRefIdx.isInvalid()) return NULL;\n\n    StartupBlock *block = static_cast<StartupBlock*>(\n        defaultMemPool->extMemPool.backend.getSlabBlock(1));\n    if (!block) return NULL;\n\n    block->cleanBlockHeader();\n    setBackRef(backRefIdx, block);\n    block->backRefIdx = backRefIdx;\n    // use startupAllocObjSizeMark to mark objects from startup block marker\n    block->objectSize = startupAllocObjSizeMark;\n    block->bumpPtr = (FreeObject *)((uintptr_t)block + sizeof(StartupBlock));\n    return block;\n}\n\nFreeObject *StartupBlock::allocate(size_t size)\n{\n    FreeObject *result;\n    StartupBlock *newBlock = NULL;\n    bool newBlockUnused = false;\n\n    /* Objects must be aligned on their natural bounds,\n       and objects bigger than word on word's bound. */\n    size = alignUp(size, sizeof(size_t));\n    // We need size of an object to implement msize.\n    size_t reqSize = size + sizeof(size_t);\n    // speculatively allocates newBlock to try avoid allocation while holding lock\n    /* TODO: The function is called when malloc nested call is detected,\n             so simultaneous usage from different threads seems unlikely.\n             If pre-allocation is found useless, the code might be simplified. */\n    if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {\n        newBlock = StartupBlock::getBlock();\n        if (!newBlock) return NULL;\n    }\n    {\n        MallocMutex::scoped_lock scoped_cs(startupMallocLock);\n        // Re-check whether we need a new block (conditions might have changed)\n        if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {\n            if (!newBlock) {\n                newBlock = StartupBlock::getBlock();\n                if (!newBlock) return NULL;\n            }\n            newBlock->next = (Block*)firstStartupBlock;\n            if (firstStartupBlock)\n                firstStartupBlock->previous = (Block*)newBlock;\n            firstStartupBlock = newBlock;\n        } else\n            newBlockUnused = true;\n        result = firstStartupBlock->bumpPtr;\n        firstStartupBlock->allocatedCount++;\n        firstStartupBlock->bumpPtr =\n            (FreeObject *)((uintptr_t)firstStartupBlock->bumpPtr + reqSize);\n    }\n    if (newBlock && newBlockUnused)\n        defaultMemPool->returnEmptyBlock(newBlock, /*poolTheBlock=*/false);\n\n    // keep object size at the negative offset\n    *((size_t*)result) = size;\n    return (FreeObject*)((size_t*)result+1);\n}\n\nvoid StartupBlock::free(void *ptr)\n{\n    Block* blockToRelease = NULL;\n    {\n        MallocMutex::scoped_lock scoped_cs(startupMallocLock);\n\n        MALLOC_ASSERT(firstStartupBlock, ASSERT_TEXT);\n        MALLOC_ASSERT(startupAllocObjSizeMark==objectSize\n                      && allocatedCount>0, ASSERT_TEXT);\n        MALLOC_ASSERT((uintptr_t)ptr>=(uintptr_t)this+sizeof(StartupBlock)\n                      && (uintptr_t)ptr+StartupBlock::msize(ptr)<=(uintptr_t)this+slabSize,\n                      ASSERT_TEXT);\n        if (0 == --allocatedCount) {\n            if (this == firstStartupBlock)\n                firstStartupBlock = (StartupBlock*)firstStartupBlock->next;\n            if (previous)\n                previous->next = next;\n            if (next)\n                next->previous = previous;\n            blockToRelease = this;\n        } else if ((uintptr_t)ptr + StartupBlock::msize(ptr) == (uintptr_t)bumpPtr) {\n            // last object in the block released\n            FreeObject *newBump = (FreeObject*)((size_t*)ptr - 1);\n            MALLOC_ASSERT((uintptr_t)newBump>(uintptr_t)this+sizeof(StartupBlock),\n                          ASSERT_TEXT);\n            bumpPtr = newBump;\n        }\n    }\n    if (blockToRelease) {\n        blockToRelease->previous = blockToRelease->next = NULL;\n        defaultMemPool->returnEmptyBlock(blockToRelease, /*poolTheBlock=*/false);\n    }\n}\n\n#endif /* MALLOC_CHECK_RECURSION */\n\n/********* End thread related code  *************/\n\n/********* Library initialization *************/\n\n//! Value indicating the state of initialization.\n/* 0 = initialization not started.\n * 1 = initialization started but not finished.\n * 2 = initialization finished.\n * In theory, we only need values 0 and 2. But value 1 is nonetheless\n * useful for detecting errors in the double-check pattern.\n */\nstatic intptr_t mallocInitialized;   // implicitly initialized to 0\nstatic MallocMutex initMutex;\n\n/** The leading \"\\0\" is here so that applying \"strings\" to the binary\n    delivers a clean result. */\nstatic char VersionString[] = \"\\0\" TBBMALLOC_VERSION_STRINGS;\n\n#if __TBB_WIN8UI_SUPPORT\nbool GetBoolEnvironmentVariable(const char *) { return false; }\n#else\nbool GetBoolEnvironmentVariable(const char *name)\n{\n    if (const char* s = getenv(name))\n        return strcmp(s,\"0\") != 0;\n    return false;\n}\n#endif\n\nvoid AllocControlledMode::initReadEnv(const char *envName, intptr_t defaultVal)\n{\n    if (!setDone) {\n#if !__TBB_WIN8UI_SUPPORT\n    // TODO: use strtol to get the actual value of the envirable\n        const char *envVal = getenv(envName);\n        if (envVal && !strcmp(envVal, \"1\"))\n            val = 1;\n        else\n#endif\n            val = defaultVal;\n        setDone = true;\n    }\n}\n\n#if USE_PTHREAD && (__TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND)\n\n/* Decrease race interval between dynamic library unloading and pthread key\n   destructor. Protect only Pthreads with supported unloading. */\nclass ShutdownSync {\n/* flag is the number of threads in pthread key dtor body\n   (i.e., between threadDtorStart() and threadDtorDone())\n   or the signal to skip dtor, if flag < 0 */\n    intptr_t flag;\n    static const intptr_t skipDtor = INTPTR_MIN/2;\npublic:\n    void init() { flag = 0; }\n/* Suppose that 2*abs(skipDtor) or more threads never call threadDtorStart()\n   simultaneously, so flag never becomes negative because of that. */\n    bool threadDtorStart() {\n        if (flag < 0)\n            return false;\n        if (AtomicIncrement(flag) <= 0) { // note that new value returned\n            AtomicAdd(flag, -1);  // flag is spoiled by us, restore it\n            return false;\n        }\n        return true;\n    }\n    void threadDtorDone() {\n        AtomicAdd(flag, -1);\n    }\n    void processExit() {\n        if (AtomicAdd(flag, skipDtor) != 0)\n            SpinWaitUntilEq(flag, skipDtor);\n    }\n};\n\n#else\n\nclass ShutdownSync {\npublic:\n    void init() { }\n    bool threadDtorStart() { return true; }\n    void threadDtorDone() { }\n    void processExit() { }\n};\n\n#endif // USE_PTHREAD && (__TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND)\n\nstatic ShutdownSync shutdownSync;\n\ninline bool isMallocInitialized() {\n    // Load must have acquire fence; otherwise thread taking \"initialized\" path\n    // might perform textually later loads *before* mallocInitialized becomes 2.\n    return 2 == FencedLoad(mallocInitialized);\n}\n\nbool isMallocInitializedExt() {\n    return isMallocInitialized();\n}\n\n/** Caller is responsible for ensuring this routine is called exactly once. */\nextern \"C\" void MallocInitializeITT() {\n#if DO_ITT_NOTIFY\n    if (!usedBySrcIncluded)\n        tbb::internal::__TBB_load_ittnotify();\n#endif\n}\n\nvoid MemoryPool::initDefaultPool() {\n    hugePages.init();\n}\n\n/*\n * Allocator initialization routine;\n * it is called lazily on the very first scalable_malloc call.\n */\nstatic bool initMemoryManager()\n{\n    TRACEF(( \"[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\\n\",\n             sizeof(Block), sizeof(uintptr_t) ));\n    MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );\n    MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );\n    MALLOC_ASSERT( isAligned(defaultMemPool, sizeof(intptr_t)),\n                   \"Memory pool must be void*-aligned for atomic to work over aligned arguments.\");\n\n#if USE_WINTHREAD\n    const size_t granularity = 64*1024; // granulatity of VirtualAlloc\n#else\n    // POSIX.1-2001-compliant way to get page size\n    const size_t granularity = sysconf(_SC_PAGESIZE);\n#endif\n    bool initOk = defaultMemPool->\n        extMemPool.init(0, NULL, NULL, granularity,\n                        /*keepAllMemory=*/false, /*fixedPool=*/false);\n// TODO: extMemPool.init() to not allocate memory\n    if (!initOk || !initBackRefMaster(&defaultMemPool->extMemPool.backend))\n        return false;\n    ThreadId::init();      // Create keys for thread id\n    MemoryPool::initDefaultPool();\n    // init() is required iff initMemoryManager() is called\n    // after mallocProcessShutdownNotification()\n    shutdownSync.init();\n#if COLLECT_STATISTICS\n    initStatisticsCollection();\n#endif\n    return true;\n}\n\n//! Ensures that initMemoryManager() is called once and only once.\n/** Does not return until initMemoryManager() has been completed by a thread.\n    There is no need to call this routine if mallocInitialized==2 . */\nstatic bool doInitialization()\n{\n    MallocMutex::scoped_lock lock( initMutex );\n    if (mallocInitialized!=2) {\n        MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );\n        mallocInitialized = 1;\n        RecursiveMallocCallProtector scoped;\n        if (!initMemoryManager()) {\n            mallocInitialized = 0; // restore and out\n            return false;\n        }\n#ifdef  MALLOC_EXTRA_INITIALIZATION\n        MALLOC_EXTRA_INITIALIZATION;\n#endif\n#if MALLOC_CHECK_RECURSION\n        RecursiveMallocCallProtector::detectNaiveOverload();\n#endif\n        MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );\n        // Store must have release fence, otherwise mallocInitialized==2\n        // might become remotely visible before side effects of\n        // initMemoryManager() become remotely visible.\n        FencedStore( mallocInitialized, 2 );\n        if( GetBoolEnvironmentVariable(\"TBB_VERSION\") ) {\n            fputs(VersionString+1,stderr);\n            hugePages.printStatus();\n        }\n    }\n    /* It can't be 0 or I would have initialized it */\n    MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT );\n    return true;\n}\n\n/********* End library initialization *************/\n\n/********* The malloc show begins     *************/\n\n\nFreeObject *Block::allocateFromFreeList()\n{\n    FreeObject *result;\n\n    if (!freeList) return NULL;\n\n    result = freeList;\n    MALLOC_ASSERT( result, ASSERT_TEXT );\n\n    freeList = result->next;\n    MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );\n    allocatedCount++;\n    STAT_increment(getThreadId(), getIndex(objectSize), allocFreeListUsed);\n\n    return result;\n}\n\nFreeObject *Block::allocateFromBumpPtr()\n{\n    FreeObject *result = bumpPtr;\n    if (result) {\n        bumpPtr = (FreeObject *) ((uintptr_t) bumpPtr - objectSize);\n        if ( (uintptr_t)bumpPtr < (uintptr_t)this+sizeof(Block) ) {\n            bumpPtr = NULL;\n        }\n        MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT );\n        allocatedCount++;\n        STAT_increment(getThreadId(), getIndex(objectSize), allocBumpPtrUsed);\n    }\n    return result;\n}\n\ninline FreeObject* Block::allocate()\n{\n    MALLOC_ASSERT( isOwnedByCurrentThread(), ASSERT_TEXT );\n\n    /* for better cache locality, first looking in the free list. */\n    if ( FreeObject *result = allocateFromFreeList() ) {\n        return result;\n    }\n    MALLOC_ASSERT( !freeList, ASSERT_TEXT );\n\n    /* if free list is empty, try thread local bump pointer allocation. */\n    if ( FreeObject *result = allocateFromBumpPtr() ) {\n        return result;\n    }\n    MALLOC_ASSERT( !bumpPtr, ASSERT_TEXT );\n\n    /* the block is considered full. */\n    isFull = 1;\n    return NULL;\n}\n\nsize_t Block::findObjectSize(void *object) const\n{\n    size_t blSize = getSize();\n#if MALLOC_CHECK_RECURSION\n    // Currently, there is no aligned allocations from startup blocks,\n    // so we can return just StartupBlock::msize().\n    // TODO: This must be extended if we add aligned allocation from startup blocks.\n    if (!blSize)\n        return StartupBlock::msize(object);\n#endif\n    // object can be aligned, so real size can be less than block's\n    size_t size =\n        blSize - ((uintptr_t)object - (uintptr_t)findObjectToFree(object));\n    MALLOC_ASSERT(size>0 && size<minLargeObjectSize, ASSERT_TEXT);\n    return size;\n}\n\nvoid Bin::moveBlockToFront(Block *block)\n{\n    /* move the block to the front of the bin */\n    if (block == activeBlk) return;\n    outofTLSBin(block);\n    pushTLSBin(block);\n}\n\nvoid Bin::processLessUsedBlock(MemoryPool *memPool, Block *block)\n{\n    if (block != activeBlk) {\n        /* We are not actively using this block; return it to the general block pool */\n        outofTLSBin(block);\n        memPool->returnEmptyBlock(block, /*poolTheBlock=*/true);\n    } else {\n        /* all objects are free - let's restore the bump pointer */\n        block->restoreBumpPtr();\n    }\n}\n\ntemplate<int LOW_MARK, int HIGH_MARK>\nbool LocalLOCImpl<LOW_MARK, HIGH_MARK>::put(LargeMemoryBlock *object, ExtMemoryPool *extMemPool)\n{\n    const size_t size = object->unalignedSize;\n    // not spoil cache with too large object, that can cause its total cleanup\n    if (size > MAX_TOTAL_SIZE)\n        return false;\n    LargeMemoryBlock *localHead = (LargeMemoryBlock*)AtomicFetchStore(&head, 0);\n\n    object->prev = NULL;\n    object->next = localHead;\n    if (localHead)\n        localHead->prev = object;\n    else {\n        // those might not be cleaned during local cache stealing, correct them\n        totalSize = 0;\n        numOfBlocks = 0;\n        tail = object;\n    }\n    localHead = object;\n    totalSize += size;\n    numOfBlocks++;\n    // must meet both size and number of cached objects constrains\n    if (totalSize > MAX_TOTAL_SIZE || numOfBlocks >= HIGH_MARK) {\n        // scanning from tail until meet conditions\n        while (totalSize > MAX_TOTAL_SIZE || numOfBlocks > LOW_MARK) {\n            totalSize -= tail->unalignedSize;\n            numOfBlocks--;\n            tail = tail->prev;\n        }\n        LargeMemoryBlock *headToRelease = tail->next;\n        tail->next = NULL;\n\n        extMemPool->freeLargeObjectList(headToRelease);\n    }\n\n    FencedStore((intptr_t&)head, (intptr_t)localHead);\n    return true;\n}\n\ntemplate<int LOW_MARK, int HIGH_MARK>\nLargeMemoryBlock *LocalLOCImpl<LOW_MARK, HIGH_MARK>::get(size_t size)\n{\n    LargeMemoryBlock *localHead, *res=NULL;\n\n    if (size > MAX_TOTAL_SIZE)\n        return NULL;\n\n    if (!head || !(localHead = (LargeMemoryBlock*)AtomicFetchStore(&head, 0))) {\n        // do not restore totalSize, numOfBlocks and tail at this point,\n        // as they are used only in put(), where they must be restored\n        return NULL;\n    }\n\n    for (LargeMemoryBlock *curr = localHead; curr; curr=curr->next) {\n        if (curr->unalignedSize == size) {\n            res = curr;\n            if (curr->next)\n                curr->next->prev = curr->prev;\n            else\n                tail = curr->prev;\n            if (curr != localHead)\n                curr->prev->next = curr->next;\n            else\n                localHead = curr->next;\n            totalSize -= size;\n            numOfBlocks--;\n            break;\n        }\n    }\n    FencedStore((intptr_t&)head, (intptr_t)localHead);\n    return res;\n}\n\ntemplate<int LOW_MARK, int HIGH_MARK>\nbool LocalLOCImpl<LOW_MARK, HIGH_MARK>::externalCleanup(ExtMemoryPool *extMemPool)\n{\n    if (LargeMemoryBlock *localHead = (LargeMemoryBlock*)AtomicFetchStore(&head, 0)) {\n        extMemPool->freeLargeObjectList(localHead);\n        return true;\n    }\n    return false;\n}\n\nvoid *MemoryPool::getFromLLOCache(TLSData* tls, size_t size, size_t alignment)\n{\n    LargeMemoryBlock *lmb = NULL;\n\n    size_t headersSize = sizeof(LargeMemoryBlock)+sizeof(LargeObjectHdr);\n    size_t allocationSize = LargeObjectCache::alignToBin(size+headersSize+alignment);\n    if (allocationSize < size) // allocationSize is wrapped around after alignToBin\n        return NULL;\n    MALLOC_ASSERT(allocationSize >= alignment, \"Overflow must be checked before.\");\n\n    if (tls) {\n        tls->markUsed();\n        lmb = tls->lloc.get(allocationSize);\n    }\n    if (!lmb)\n        lmb = extMemPool.mallocLargeObject(this, allocationSize);\n\n    if (lmb) {\n        // doing shuffle we suppose that alignment offset guarantees\n        // that different cache lines are in use\n        MALLOC_ASSERT(alignment >= estimatedCacheLineSize, ASSERT_TEXT);\n\n        void *alignedArea = (void*)alignUp((uintptr_t)lmb+headersSize, alignment);\n        uintptr_t alignedRight =\n            alignDown((uintptr_t)lmb+lmb->unalignedSize - size, alignment);\n        // Has some room to shuffle object between cache lines?\n        // Note that alignedRight and alignedArea are aligned at alignment.\n        unsigned ptrDelta = alignedRight - (uintptr_t)alignedArea;\n        if (ptrDelta && tls) { // !tls is cold path\n            // for the hot path of alignment==estimatedCacheLineSize,\n            // allow compilers to use shift for division\n            // (since estimatedCacheLineSize is a power-of-2 constant)\n            unsigned numOfPossibleOffsets = alignment == estimatedCacheLineSize?\n                  ptrDelta / estimatedCacheLineSize :\n                  ptrDelta / alignment;\n            unsigned myCacheIdx = ++tls->currCacheIdx;\n            unsigned offset = myCacheIdx % numOfPossibleOffsets;\n\n            // Move object to a cache line with an offset that is different from\n            // previous allocation. This supposedly allows us to use cache\n            // associativity more efficiently.\n            alignedArea = (void*)((uintptr_t)alignedArea + offset*alignment);\n        }\n        MALLOC_ASSERT((uintptr_t)lmb+lmb->unalignedSize >=\n                      (uintptr_t)alignedArea+size, \"Object doesn't fit the block.\");\n        LargeObjectHdr *header = (LargeObjectHdr*)alignedArea-1;\n        header->memoryBlock = lmb;\n        header->backRefIdx = lmb->backRefIdx;\n        setBackRef(header->backRefIdx, header);\n\n        lmb->objectSize = size;\n\n        MALLOC_ASSERT( isLargeObject<unknownMem>(alignedArea), ASSERT_TEXT );\n        MALLOC_ASSERT( isAligned(alignedArea, alignment), ASSERT_TEXT );\n\n        return alignedArea;\n    }\n    return NULL;\n}\n\nvoid MemoryPool::putToLLOCache(TLSData *tls, void *object)\n{\n    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;\n    // overwrite backRefIdx to simplify double free detection\n    header->backRefIdx = BackRefIdx();\n\n    if (tls) {\n        tls->markUsed();\n        if (tls->lloc.put(header->memoryBlock, &extMemPool))\n            return;\n    }\n    extMemPool.freeLargeObject(header->memoryBlock);\n}\n\n/*\n * All aligned allocations fall into one of the following categories:\n *  1. if both request size and alignment are <= maxSegregatedObjectSize,\n *       we just align the size up, and request this amount, because for every size\n *       aligned to some power of 2, the allocated object is at least that aligned.\n * 2. for size<minLargeObjectSize, check if already guaranteed fittingAlignment is enough.\n * 3. if size+alignment<minLargeObjectSize, we take an object of fittingSizeN and align\n *       its address up; given such pointer, scalable_free could find the real object.\n *       Wrapping of size+alignment is impossible because maximal allowed\n *       alignment plus minLargeObjectSize can't lead to wrapping.\n * 4. otherwise, aligned large object is allocated.\n */\nstatic void *allocateAligned(MemoryPool *memPool, size_t size, size_t alignment)\n{\n    MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );\n\n    if (!isMallocInitialized())\n        if (!doInitialization())\n            return NULL;\n\n    void *result;\n    if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)\n        result = internalPoolMalloc(memPool, alignUp(size? size: sizeof(size_t), alignment));\n    else if (size<minLargeObjectSize) {\n        if (alignment<=fittingAlignment)\n            result = internalPoolMalloc(memPool, size);\n        else if (size+alignment < minLargeObjectSize) {\n            void *unaligned = internalPoolMalloc(memPool, size+alignment);\n            if (!unaligned) return NULL;\n            result = alignUp(unaligned, alignment);\n        } else\n            goto LargeObjAlloc;\n    } else {\n    LargeObjAlloc:\n        TLSData *tls = memPool->getTLS(/*create=*/true);\n        // take into account only alignment that are higher then natural\n        result =\n            memPool->getFromLLOCache(tls, size, largeObjectAlignment>alignment?\n                                               largeObjectAlignment: alignment);\n    }\n\n    MALLOC_ASSERT( isAligned(result, alignment), ASSERT_TEXT );\n    return result;\n}\n\nstatic void *reallocAligned(MemoryPool *memPool, void *ptr,\n                            size_t size, size_t alignment = 0)\n{\n    void *result;\n    size_t copySize;\n\n    if (isLargeObject<ourMem>(ptr)) {\n        LargeMemoryBlock* lmb = ((LargeObjectHdr *)ptr - 1)->memoryBlock;\n        copySize = lmb->unalignedSize-((uintptr_t)ptr-(uintptr_t)lmb);\n        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {\n            lmb->objectSize = size;\n            return ptr;\n        } else {\n            copySize = lmb->objectSize;\n#if BACKEND_HAS_MREMAP\n            if (void *r = memPool->extMemPool.remap(ptr, copySize, size,\n                              alignment<largeObjectAlignment?\n                              largeObjectAlignment : alignment))\n                return r;\n#endif\n            result = alignment ? allocateAligned(memPool, size, alignment) :\n                internalPoolMalloc(memPool, size);\n        }\n    } else {\n        Block* block = (Block *)alignDown(ptr, slabSize);\n        copySize = block->findObjectSize(ptr);\n        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {\n            return ptr;\n        } else {\n            result = alignment ? allocateAligned(memPool, size, alignment) :\n                internalPoolMalloc(memPool, size);\n        }\n    }\n    if (result) {\n        memcpy(result, ptr, copySize<size? copySize: size);\n        internalPoolFree(memPool, ptr, 0);\n    }\n    return result;\n}\n\n/* A predicate checks if an object is properly placed inside its block */\ninline bool Block::isProperlyPlaced(const void *object) const\n{\n    return 0 == ((uintptr_t)this + slabSize - (uintptr_t)object) % objectSize;\n}\n\n/* Finds the real object inside the block */\nFreeObject *Block::findAllocatedObject(const void *address) const\n{\n    // calculate offset from the end of the block space\n    uint16_t offset = (uintptr_t)this + slabSize - (uintptr_t)address;\n    MALLOC_ASSERT( offset<=slabSize-sizeof(Block), ASSERT_TEXT );\n    // find offset difference from a multiple of allocation size\n    offset %= objectSize;\n    // and move the address down to where the real object starts.\n    return (FreeObject*)((uintptr_t)address - (offset? objectSize-offset: 0));\n}\n\n/*\n * Bad dereference caused by a foreign pointer is possible only here, not earlier in call chain.\n * Separate function isolates SEH code, as it has bad influence on compiler optimization.\n */\nstatic inline BackRefIdx safer_dereference (const BackRefIdx *ptr)\n{\n    BackRefIdx id;\n#if _MSC_VER\n    __try {\n#endif\n        id = *ptr;\n#if _MSC_VER\n    } __except( GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION?\n                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {\n        id = BackRefIdx();\n    }\n#endif\n    return id;\n}\n\ntemplate<MemoryOrigin memOrigin>\nbool isLargeObject(void *object)\n{\n    if (!isAligned(object, largeObjectAlignment))\n        return false;\n    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;\n    BackRefIdx idx = memOrigin==unknownMem? safer_dereference(&header->backRefIdx) :\n        header->backRefIdx;\n\n    return idx.isLargeObject()\n        // in valid LargeObjectHdr memoryBlock is not NULL\n        && header->memoryBlock\n        // in valid LargeObjectHdr memoryBlock points somewhere before header\n        // TODO: more strict check\n        && (uintptr_t)header->memoryBlock < (uintptr_t)header\n        && getBackRef(idx) == header;\n}\n\nstatic inline bool isSmallObject (void *ptr)\n{\n    Block* expectedBlock = (Block*)alignDown(ptr, slabSize);\n    const BackRefIdx* idx = expectedBlock->getBackRefIdx();\n\n    bool isSmall = expectedBlock == getBackRef(safer_dereference(idx));\n    if (isSmall)\n        expectedBlock->checkFreePrecond(ptr);\n    return isSmall;\n}\n\n/**** Check if an object was allocated by scalable_malloc ****/\nstatic inline bool isRecognized (void* ptr)\n{\n    return defaultMemPool->extMemPool.backend.ptrCanBeValid(ptr) &&\n        (isLargeObject<unknownMem>(ptr) || isSmallObject(ptr));\n}\n\nstatic inline void freeSmallObject(void *object)\n{\n    /* mask low bits to get the block */\n    Block *block = (Block *)alignDown(object, slabSize);\n    block->checkFreePrecond(object);\n\n#if MALLOC_CHECK_RECURSION\n    if (block->isStartupAllocObject()) {\n        ((StartupBlock *)block)->free(object);\n        return;\n    }\n#endif\n    if (block->isOwnedByCurrentThread()) {\n        block->freeOwnObject(object);\n    } else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */\n        FreeObject *objectToFree = block->findObjectToFree(object);\n        block->freePublicObject(objectToFree);\n    }\n}\n\nstatic void *internalPoolMalloc(MemoryPool* memPool, size_t size)\n{\n    Bin* bin;\n    Block * mallocBlock;\n\n    if (!memPool) return NULL;\n\n    if (!size) size = sizeof(size_t);\n\n    TLSData *tls = memPool->getTLS(/*create=*/true);\n\n    /* Allocate a large object */\n    if (size >= minLargeObjectSize)\n        return memPool->getFromLLOCache(tls, size, largeObjectAlignment);\n\n    if (!tls) return NULL;\n\n    tls->markUsed();\n    /*\n     * Get an element in thread-local array corresponding to the given size;\n     * It keeps ptr to the active block for allocations of this size\n     */\n    bin = tls->getAllocationBin(size);\n    if ( !bin ) return NULL;\n\n    /* Get a block to try to allocate in. */\n    for( mallocBlock = bin->getActiveBlock(); mallocBlock;\n         mallocBlock = bin->setPreviousBlockActive() ) // the previous block should be empty enough\n    {\n        if( FreeObject *result = mallocBlock->allocate() )\n            return result;\n    }\n\n    /*\n     * else privatize publicly freed objects in some block and allocate from it\n     */\n    mallocBlock = bin->getPublicFreeListBlock();\n    if (mallocBlock) {\n        if (mallocBlock->emptyEnoughToUse()) {\n            bin->moveBlockToFront(mallocBlock);\n        }\n        MALLOC_ASSERT( mallocBlock->freeListNonNull(), ASSERT_TEXT );\n        if ( FreeObject *result = mallocBlock->allocateFromFreeList() )\n            return result;\n        /* Else something strange happened, need to retry from the beginning; */\n        TRACEF(( \"[ScalableMalloc trace] Something is wrong: no objects in public free list; reentering.\\n\" ));\n        return internalPoolMalloc(memPool, size);\n    }\n\n    /*\n     * no suitable own blocks, try to get a partial block that some other thread has discarded.\n     */\n    mallocBlock = memPool->extMemPool.orphanedBlocks.get(tls, size);\n    while (mallocBlock) {\n        bin->pushTLSBin(mallocBlock);\n        bin->setActiveBlock(mallocBlock); // TODO: move under the below condition?\n        if( FreeObject *result = mallocBlock->allocate() )\n            return result;\n        mallocBlock = memPool->extMemPool.orphanedBlocks.get(tls, size);\n    }\n\n    /*\n     * else try to get a new empty block\n     */\n    mallocBlock = memPool->getEmptyBlock(size);\n    if (mallocBlock) {\n        bin->pushTLSBin(mallocBlock);\n        bin->setActiveBlock(mallocBlock);\n        if( FreeObject *result = mallocBlock->allocate() )\n            return result;\n        /* Else something strange happened, need to retry from the beginning; */\n        TRACEF(( \"[ScalableMalloc trace] Something is wrong: no objects in empty block; reentering.\\n\" ));\n        return internalPoolMalloc(memPool, size);\n    }\n    /*\n     * else nothing works so return NULL\n     */\n    TRACEF(( \"[ScalableMalloc trace] No memory found, returning NULL.\\n\" ));\n    return NULL;\n}\n\n// When size==0 (i.e. unknown), detect here whether the object is large.\n// For size is known and < minLargeObjectSize, we still need to check\n// if the actual object is large, because large objects might be used\n// for aligned small allocations.\nstatic bool internalPoolFree(MemoryPool *memPool, void *object, size_t size)\n{\n    if (!memPool || !object) return false;\n\n    // The library is initialized at allocation call, so releasing while\n    // not initialized means foreign object is releasing.\n    MALLOC_ASSERT(isMallocInitialized(), ASSERT_TEXT);\n    MALLOC_ASSERT(memPool->extMemPool.userPool() || isRecognized(object),\n                  \"Invalid pointer during object releasing is detected.\");\n\n    if (size >= minLargeObjectSize || isLargeObject<ourMem>(object))\n        memPool->putToLLOCache(memPool->getTLS(/*create=*/false), object);\n    else\n        freeSmallObject(object);\n    return true;\n}\n\nstatic void *internalMalloc(size_t size)\n{\n    if (!size) size = sizeof(size_t);\n\n#if MALLOC_CHECK_RECURSION\n    if (RecursiveMallocCallProtector::sameThreadActive())\n        return size<minLargeObjectSize? StartupBlock::allocate(size) :\n            // nested allocation, so skip tls\n            (FreeObject*)defaultMemPool->getFromLLOCache(NULL, size, slabSize);\n#endif\n\n    if (!isMallocInitialized())\n        if (!doInitialization())\n            return NULL;\n    return internalPoolMalloc(defaultMemPool, size);\n}\n\nstatic void internalFree(void *object)\n{\n    internalPoolFree(defaultMemPool, object, 0);\n}\n\nstatic size_t internalMsize(void* ptr)\n{\n    if (ptr) {\n        MALLOC_ASSERT(isRecognized(ptr), \"Invalid pointer in scalable_msize detected.\");\n        if (isLargeObject<ourMem>(ptr)) {\n            LargeMemoryBlock* lmb = ((LargeObjectHdr*)ptr - 1)->memoryBlock;\n            return lmb->objectSize;\n        } else\n            return ((Block*)alignDown(ptr, slabSize))->findObjectSize(ptr);\n    }\n    errno = EINVAL;\n    // Unlike _msize, return 0 in case of parameter error.\n    // Returning size_t(-1) looks more like the way to troubles.\n    return 0;\n}\n\n} // namespace internal\n\nusing namespace rml::internal;\n\n// legacy entry point saved for compatibility with binaries complied\n// with pre-6003 versions of TBB\nrml::MemoryPool *pool_create(intptr_t pool_id, const MemPoolPolicy *policy)\n{\n    rml::MemoryPool *pool;\n    MemPoolPolicy pol(policy->pAlloc, policy->pFree, policy->granularity);\n\n    pool_create_v1(pool_id, &pol, &pool);\n    return pool;\n}\n\nrml::MemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,\n                                 rml::MemoryPool **pool)\n{\n    if ( !policy->pAlloc || policy->version<MemPoolPolicy::TBBMALLOC_POOL_VERSION\n         // empty pFree allowed only for fixed pools\n         || !(policy->fixedPool || policy->pFree)) {\n        *pool = NULL;\n        return INVALID_POLICY;\n    }\n    if ( policy->version>MemPoolPolicy::TBBMALLOC_POOL_VERSION // future versions are not supported\n         // new flags can be added in place of reserved, but default\n         // behaviour must be supported by this version\n         || policy->reserved ) {\n        *pool = NULL;\n        return UNSUPPORTED_POLICY;\n    }\n    if (!isMallocInitialized())\n        if (!doInitialization())\n            return NO_MEMORY;\n    rml::internal::MemoryPool *memPool =\n        (rml::internal::MemoryPool*)internalMalloc((sizeof(rml::internal::MemoryPool)));\n    if (!memPool) {\n        *pool = NULL;\n        return NO_MEMORY;\n    }\n    memset(memPool, 0, sizeof(rml::internal::MemoryPool));\n    if (!memPool->init(pool_id, policy)) {\n        internalFree(memPool);\n        *pool = NULL;\n        return NO_MEMORY;\n    }\n\n    *pool = (rml::MemoryPool*)memPool;\n    return POOL_OK;\n}\n\nbool pool_destroy(rml::MemoryPool* memPool)\n{\n    if (!memPool) return false;\n    bool ret = ((rml::internal::MemoryPool*)memPool)->destroy();\n    internalFree(memPool);\n\n    return ret;\n}\n\nbool pool_reset(rml::MemoryPool* memPool)\n{\n    if (!memPool) return false;\n\n    return ((rml::internal::MemoryPool*)memPool)->reset();\n}\n\nvoid *pool_malloc(rml::MemoryPool* mPool, size_t size)\n{\n    return internalPoolMalloc((rml::internal::MemoryPool*)mPool, size);\n}\n\nvoid *pool_realloc(rml::MemoryPool* mPool, void *object, size_t size)\n{\n    if (!object)\n        return internalPoolMalloc((rml::internal::MemoryPool*)mPool, size);\n    if (!size) {\n        internalPoolFree((rml::internal::MemoryPool*)mPool, object, 0);\n        return NULL;\n    }\n    return reallocAligned((rml::internal::MemoryPool*)mPool, object, size, 0);\n}\n\nvoid *pool_aligned_malloc(rml::MemoryPool* mPool, size_t size, size_t alignment)\n{\n    if (!isPowerOfTwo(alignment) || 0==size)\n        return NULL;\n\n    return allocateAligned((rml::internal::MemoryPool*)mPool, size, alignment);\n}\n\nvoid *pool_aligned_realloc(rml::MemoryPool* memPool, void *ptr, size_t size, size_t alignment)\n{\n    if (!isPowerOfTwo(alignment))\n        return NULL;\n    rml::internal::MemoryPool *mPool = (rml::internal::MemoryPool*)memPool;\n    void *tmp;\n\n    if (!ptr)\n        tmp = allocateAligned(mPool, size, alignment);\n    else if (!size) {\n        internalPoolFree(mPool, ptr, 0);\n        return NULL;\n    } else\n        tmp = reallocAligned(mPool, ptr, size, alignment);\n\n    return tmp;\n}\n\nbool pool_free(rml::MemoryPool *mPool, void *object)\n{\n    return internalPoolFree((rml::internal::MemoryPool*)mPool, object, 0);\n}\n\nrml::MemoryPool *pool_identify(void *object)\n{\n    rml::internal::MemoryPool *pool;\n    if (isLargeObject<ourMem>(object)) {\n        LargeObjectHdr *header = (LargeObjectHdr*)object - 1;\n        pool = header->memoryBlock->pool;\n    } else {\n        Block *block = (Block*)alignDown(object, slabSize);\n        pool = block->getMemPool();\n    }\n    // do not return defaultMemPool, as it can't be used in pool_free() etc\n    __TBB_ASSERT_RELEASE(pool!=defaultMemPool,\n        \"rml::pool_identify() can't be used for scalable_malloc() etc results.\");\n    return (rml::MemoryPool*)pool;\n}\n\n} // namespace rml\n\nusing namespace rml::internal;\n\n#if MALLOC_TRACE\nstatic unsigned int threadGoingDownCount = 0;\n#endif\n\n/*\n * When a thread is shutting down this routine should be called to remove all the thread ids\n * from the malloc blocks and replace them with a NULL thread id.\n *\n * For pthreads, the function is set as a callback in pthread_key_create for TLS bin.\n * It will be automatically called at thread exit with the key value as the argument,\n * unless that value is NULL.\n * For Windows, it is called from DllMain( DLL_THREAD_DETACH ).\n *\n * However neither of the above is called for the main process thread, so the routine\n * also needs to be called during the process shutdown.\n *\n*/\n// TODO: Consider making this function part of class MemoryPool.\nvoid doThreadShutdownNotification(TLSData* tls, bool main_thread)\n{\n    TRACEF(( \"[ScalableMalloc trace] Thread id %d blocks return start %d\\n\",\n             getThreadId(),  threadGoingDownCount++ ));\n\n#if USE_PTHREAD\n    if (tls) {\n        if (!shutdownSync.threadDtorStart()) return;\n        tls->getMemPool()->onThreadShutdown(tls);\n        shutdownSync.threadDtorDone();\n    } else\n#endif\n    {\n        suppress_unused_warning(tls); // not used on Windows\n        // The default pool is safe to use at this point:\n        //   on Linux, only the main thread can go here before destroying defaultMemPool;\n        //   on Windows, shutdown is synchronized via loader lock and isMallocInitialized().\n        // See also __TBB_mallocProcessShutdownNotification()\n        defaultMemPool->onThreadShutdown(defaultMemPool->getTLS(/*create=*/false));\n        // Take lock to walk through other pools; but waiting might be dangerous at this point\n        // (e.g. on Windows the main thread might deadlock)\n        bool locked;\n        MallocMutex::scoped_lock lock(MemoryPool::memPoolListLock, /*wait=*/!main_thread, &locked);\n        if (locked) { // the list is safe to process\n            for (MemoryPool *memPool = defaultMemPool->next; memPool; memPool = memPool->next)\n                memPool->onThreadShutdown(memPool->getTLS(/*create=*/false));\n        }\n    }\n\n    TRACEF(( \"[ScalableMalloc trace] Thread id %d blocks return end\\n\", getThreadId() ));\n}\n\n#if USE_PTHREAD\nvoid mallocThreadShutdownNotification(void* arg)\n{\n    // The routine is called for each pool (as TLS dtor) on each thread, except for the main thread\n    if (!isMallocInitialized()) return;\n    doThreadShutdownNotification((TLSData*)arg, false);\n}\n#else\nextern \"C\" void __TBB_mallocThreadShutdownNotification()\n{\n    // The routine is called once per thread on Windows\n    if (!isMallocInitialized()) return;\n    doThreadShutdownNotification(NULL, false);\n}\n#endif\n\nextern \"C\" void __TBB_mallocProcessShutdownNotification()\n{\n    if (!isMallocInitialized()) return;\n\n    doThreadShutdownNotification(NULL, /*main_thread=*/true);\n#if  __TBB_MALLOC_LOCACHE_STAT\n    printf(\"cache hit ratio %f, size hit %f\\n\",\n           1.*cacheHits/mallocCalls, 1.*memHitKB/memAllocKB);\n    defaultMemPool->extMemPool.loc.reportStat(stdout);\n#endif\n\n    shutdownSync.processExit();\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n/* Pthread keys must be deleted as soon as possible to not call key dtor\n   on thread termination when then the tbbmalloc code can be already unloaded.\n*/\n    defaultMemPool->destroy();\n    destroyBackRefMaster(&defaultMemPool->extMemPool.backend);\n    ThreadId::destroy();      // Delete key for thread id\n    hugePages.reset();\n    // new total malloc initialization is possible after this point\n    FencedStore(mallocInitialized, 0);\n#elif __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND\n/* In most cases we prevent unloading tbbmalloc, and don't clean up memory\n   on process shutdown. When impossible to prevent, library unload results\n   in shutdown notification, and it makes sense to release unused memory\n   at that point (we can't release all memory because it's possible that\n   it will be accessed after this point).\n   TODO: better support systems where we can't prevent unloading by removing\n   pthread destructors and releasing caches.\n */\n    defaultMemPool->extMemPool.hardCachesCleanup();\n#endif // __TBB_SOURCE_DIRECTLY_INCLUDED\n\n#if COLLECT_STATISTICS\n    unsigned nThreads = ThreadId::getMaxThreadId();\n    for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )\n        STAT_print(i);\n#endif\n    if (!usedBySrcIncluded)\n        MALLOC_ITT_FINI_ITTLIB();\n}\n\nextern \"C\" void * scalable_malloc(size_t size)\n{\n    void *ptr = internalMalloc(size);\n    if (!ptr) errno = ENOMEM;\n    return ptr;\n}\n\nextern \"C\" void scalable_free (void *object) {\n    internalFree(object);\n}\n\n#if MALLOC_ZONE_OVERLOAD_ENABLED\nextern \"C\" void __TBB_malloc_free_definite_size(void *object, size_t size) {\n    internalPoolFree(defaultMemPool, object, size);\n}\n#endif\n\n/*\n * A variant that provides additional memory safety, by checking whether the given address\n * was obtained with this allocator, and if not redirecting to the provided alternative call.\n */\nextern \"C\" void __TBB_malloc_safer_free(void *object, void (*original_free)(void*))\n{\n    if (!object)\n        return;\n\n    // tbbmalloc can allocate object only when tbbmalloc has been initialized\n    if (FencedLoad(mallocInitialized) && defaultMemPool->extMemPool.backend.ptrCanBeValid(object)) {\n        if (isLargeObject<unknownMem>(object)) {\n            // must check 1st for large object, because small object check touches 4 pages on left,\n            // and it can be inaccessible\n            TLSData *tls = defaultMemPool->getTLS(/*create=*/false);\n\n            defaultMemPool->putToLLOCache(tls, object);\n            return;\n        } else if (isSmallObject(object)) {\n            freeSmallObject(object);\n            return;\n        }\n    }\n    if (original_free)\n        original_free(object);\n}\n\n/********* End the free code        *************/\n\n/********* Code for scalable_realloc       ***********/\n\n/*\n * From K&R\n * \"realloc changes the size of the object pointed to by p to size. The contents will\n * be unchanged up to the minimum of the old and the new sizes. If the new size is larger,\n * the new space is uninitialized. realloc returns a pointer to the new space, or\n * NULL if the request cannot be satisfied, in which case *p is unchanged.\"\n *\n */\nextern \"C\" void* scalable_realloc(void* ptr, size_t size)\n{\n    void *tmp;\n\n    if (!ptr)\n        tmp = internalMalloc(size);\n    else if (!size) {\n        internalFree(ptr);\n        return NULL;\n    } else\n        tmp = reallocAligned(defaultMemPool, ptr, size, 0);\n\n    if (!tmp) errno = ENOMEM;\n    return tmp;\n}\n\n/*\n * A variant that provides additional memory safety, by checking whether the given address\n * was obtained with this allocator, and if not redirecting to the provided alternative call.\n */\nextern \"C\" void* __TBB_malloc_safer_realloc(void* ptr, size_t sz, void* original_realloc)\n{\n    void *tmp; // TODO: fix warnings about uninitialized use of tmp\n\n    if (!ptr) {\n        tmp = internalMalloc(sz);\n    } else if (FencedLoad(mallocInitialized) && isRecognized(ptr)) {\n        if (!sz) {\n            internalFree(ptr);\n            return NULL;\n        } else {\n            tmp = reallocAligned(defaultMemPool, ptr, sz, 0);\n        }\n    }\n#if USE_WINTHREAD\n    else if (original_realloc && sz) {\n        orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(original_realloc);\n        if ( original_ptrs->msize ){\n            size_t oldSize = original_ptrs->msize(ptr);\n            tmp = internalMalloc(sz);\n            if (tmp) {\n                memcpy(tmp, ptr, sz<oldSize? sz : oldSize);\n                if ( original_ptrs->free ){\n                    original_ptrs->free( ptr );\n                }\n            }\n        } else\n            tmp = NULL;\n    }\n#else\n    else if (original_realloc) {\n        typedef void* (*realloc_ptr_t)(void*,size_t);\n        realloc_ptr_t original_realloc_ptr;\n        (void *&)original_realloc_ptr = original_realloc;\n        tmp = original_realloc_ptr(ptr,sz);\n    }\n#endif\n    else tmp = NULL;\n\n    if (!tmp) errno = ENOMEM;\n    return tmp;\n}\n\n/********* End code for scalable_realloc   ***********/\n\n/********* Code for scalable_calloc   ***********/\n\n/*\n * From K&R\n * calloc returns a pointer to space for an array of nobj objects,\n * each of size size, or NULL if the request cannot be satisfied.\n * The space is initialized to zero bytes.\n *\n */\n\nextern \"C\" void * scalable_calloc(size_t nobj, size_t size)\n{\n    // it's square root of maximal size_t value\n    const size_t mult_not_overflow = size_t(1) << (sizeof(size_t)*CHAR_BIT/2);\n    const size_t arraySize = nobj * size;\n\n    // check for overflow during multiplication:\n    if (nobj>=mult_not_overflow || size>=mult_not_overflow) // 1) heuristic check\n        if (nobj && arraySize / nobj != size) {             // 2) exact check\n            errno = ENOMEM;\n            return NULL;\n        }\n    void* result = internalMalloc(arraySize);\n    if (result)\n        memset(result, 0, arraySize);\n    else\n        errno = ENOMEM;\n    return result;\n}\n\n/********* End code for scalable_calloc   ***********/\n\n/********* Code for aligned allocation API **********/\n\nextern \"C\" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)\n{\n    if ( !isPowerOfTwoAtLeast(alignment, sizeof(void*)) )\n        return EINVAL;\n    void *result = allocateAligned(defaultMemPool, size, alignment);\n    if (!result)\n        return ENOMEM;\n    *memptr = result;\n    return 0;\n}\n\nextern \"C\" void * scalable_aligned_malloc(size_t size, size_t alignment)\n{\n    if (!isPowerOfTwo(alignment) || 0==size) {\n        errno = EINVAL;\n        return NULL;\n    }\n    void *tmp = allocateAligned(defaultMemPool, size, alignment);\n    if (!tmp) errno = ENOMEM;\n    return tmp;\n}\n\nextern \"C\" void * scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)\n{\n    if (!isPowerOfTwo(alignment)) {\n        errno = EINVAL;\n        return NULL;\n    }\n    void *tmp;\n\n    if (!ptr)\n        tmp = allocateAligned(defaultMemPool, size, alignment);\n    else if (!size) {\n        scalable_free(ptr);\n        return NULL;\n    } else\n        tmp = reallocAligned(defaultMemPool, ptr, size, alignment);\n\n    if (!tmp) errno = ENOMEM;\n    return tmp;\n}\n\nextern \"C\" void * __TBB_malloc_safer_aligned_realloc(void *ptr, size_t size, size_t alignment, void* orig_function)\n{\n    /* corner cases left out of reallocAligned to not deal with errno there */\n    if (!isPowerOfTwo(alignment)) {\n        errno = EINVAL;\n        return NULL;\n    }\n    void *tmp = NULL;\n\n    if (!ptr) {\n        tmp = allocateAligned(defaultMemPool, size, alignment);\n    } else if (FencedLoad(mallocInitialized) && isRecognized(ptr)) {\n        if (!size) {\n            internalFree(ptr);\n            return NULL;\n        } else {\n            tmp = reallocAligned(defaultMemPool, ptr, size, alignment);\n        }\n    }\n#if USE_WINTHREAD\n    else {\n        orig_aligned_ptrs *original_ptrs = static_cast<orig_aligned_ptrs*>(orig_function);\n        if (size) {\n            // Without orig_msize, we can't do anything with this.\n            // Just keeping old pointer.\n            if ( original_ptrs->aligned_msize ){\n                // set alignment and offset to have possibly correct oldSize\n                size_t oldSize = original_ptrs->aligned_msize(ptr, sizeof(void*), 0);\n                tmp = allocateAligned(defaultMemPool, size, alignment);\n                if (tmp) {\n                    memcpy(tmp, ptr, size<oldSize? size : oldSize);\n                    if ( original_ptrs->aligned_free ){\n                        original_ptrs->aligned_free( ptr );\n                    }\n                }\n            }\n        } else {\n            if ( original_ptrs->aligned_free ){\n                original_ptrs->aligned_free( ptr );\n            }\n            return NULL;\n        }\n    }\n#else\n    // As original_realloc can't align result, and there is no way to find\n    // size of reallocating object, we are giving up.\n    suppress_unused_warning(orig_function);\n#endif\n    if (!tmp) errno = ENOMEM;\n    return tmp;\n}\n\nextern \"C\" void scalable_aligned_free(void *ptr)\n{\n    internalFree(ptr);\n}\n\n/********* end code for aligned allocation API **********/\n\n/********* Code for scalable_msize       ***********/\n\n/*\n * Returns the size of a memory block allocated in the heap.\n */\nextern \"C\" size_t scalable_msize(void* ptr)\n{\n    return internalMsize(ptr);\n}\n\n/*\n * A variant that provides additional memory safety, by checking whether the given address\n * was obtained with this allocator, and if not redirecting to the provided alternative call.\n */\nextern \"C\" size_t __TBB_malloc_safer_msize(void *object, size_t (*original_msize)(void*))\n{\n    if (object) {\n        // Check if the memory was allocated by scalable_malloc\n        if (FencedLoad(mallocInitialized) && isRecognized(object))\n            return internalMsize(object);\n        else if (original_msize)\n            return original_msize(object);\n    }\n    // object is NULL or unknown, or foreign and no original_msize\n#if USE_WINTHREAD\n    errno = EINVAL; // errno expected to be set only on this platform\n#endif\n    return 0;\n}\n\n/*\n * The same as above but for _aligned_msize case\n */\nextern \"C\" size_t __TBB_malloc_safer_aligned_msize(void *object, size_t alignment, size_t offset, size_t (*orig_aligned_msize)(void*,size_t,size_t))\n{\n    if (object) {\n        // Check if the memory was allocated by scalable_malloc\n        if (FencedLoad(mallocInitialized) && isRecognized(object))\n            return internalMsize(object);\n        else if (orig_aligned_msize)\n            return orig_aligned_msize(object,alignment,offset);\n    }\n    // object is NULL or unknown\n    errno = EINVAL;\n    return 0;\n}\n\n/********* End code for scalable_msize   ***********/\n\nextern \"C\" int scalable_allocation_mode(int param, intptr_t value)\n{\n    if (param == TBBMALLOC_SET_SOFT_HEAP_LIMIT) {\n        defaultMemPool->extMemPool.backend.setRecommendedMaxSize((size_t)value);\n        return TBBMALLOC_OK;\n    } else if (param == USE_HUGE_PAGES) {\n#if __linux__\n        switch (value) {\n        case 0:\n        case 1:\n            hugePages.setMode(value);\n            return TBBMALLOC_OK;\n        default:\n            return TBBMALLOC_INVALID_PARAM;\n        }\n#else\n        return TBBMALLOC_NO_EFFECT;\n#endif\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n    } else if (param == TBBMALLOC_INTERNAL_SOURCE_INCLUDED) {\n        switch (value) {\n        case 0: // used by dynamic library\n        case 1: // used by static library or directly included sources\n            usedBySrcIncluded = value;\n            return TBBMALLOC_OK;\n        default:\n            return TBBMALLOC_INVALID_PARAM;\n        }\n#endif\n    }\n    return TBBMALLOC_INVALID_PARAM;\n}\n\nextern \"C\" int scalable_allocation_command(int cmd, void *param)\n{\n    if (param)\n        return TBBMALLOC_INVALID_PARAM;\n    switch(cmd) {\n    case TBBMALLOC_CLEAN_THREAD_BUFFERS:\n        if (TLSData *tls = defaultMemPool->getTLS(/*create=*/false))\n            return tls->externalCleanup(&defaultMemPool->extMemPool,\n                                        /*cleanOnlyUnused=*/false)?\n                TBBMALLOC_OK : TBBMALLOC_NO_EFFECT;\n        return TBBMALLOC_NO_EFFECT;\n    case TBBMALLOC_CLEAN_ALL_BUFFERS:\n        return defaultMemPool->extMemPool.hardCachesCleanup()?\n            TBBMALLOC_OK : TBBMALLOC_NO_EFFECT;\n    }\n    return TBBMALLOC_INVALID_PARAM;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/index.html",
    "content": "<HTML>\n<body>\n<H2>Overview</H2>\n<P>\nThis directory contains the Intel&reg; Threading Building Blocks (Intel&reg; TBB) scalable allocator library source files.\n</P>\n\n<HR>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n\n<P>\n<H3>Third Party and Open Source Licenses</H3>\n</P>\n<P>\n    <pre>\n    proxy_overload_osx.h\n    // Copyright (c) 2011, Google Inc.\n    // All rights reserved.\n    //\n    // Redistribution and use in source and binary forms, with or without\n    // modification, are permitted provided that the following conditions are\n    // met:\n    //\n    //     * Redistributions of source code must retain the above copyright\n    // notice, this list of conditions and the following disclaimer.\n    //     * Redistributions in binary form must reproduce the above\n    // copyright notice, this list of conditions and the following disclaimer\n    // in the documentation and/or other materials provided with the\n    // distribution.\n    //     * Neither the name of Google Inc. nor the names of its\n    // contributors may be used to endorse or promote products derived from\n    // this software without specific prior written permission.\n    //\n    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n    </pre>\n</P>\n</body>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/large_objects.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbbmalloc_internal.h\"\n\n/********* Allocation of large objects ************/\n\n\nnamespace rml {\nnamespace internal {\n\n\n/* The functor called by the aggregator for the operation list */\ntemplate<typename Props>\nclass CacheBinFunctor {\n    typename LargeObjectCacheImpl<Props>::CacheBin *const bin;\n    ExtMemoryPool *const extMemPool;\n    typename LargeObjectCacheImpl<Props>::BinBitMask *const bitMask;\n    const int idx;\n\n    LargeMemoryBlock *toRelease;\n    bool needCleanup;\n    uintptr_t currTime;\n\n    /* Do preprocessing under the operation list. */\n    /* All the OP_PUT_LIST operations are merged in the one operation.\n       All OP_GET operations are merged with the OP_PUT_LIST operations but\n       it demands the update of the moving average value in the bin.\n       Only the last OP_CLEAN_TO_THRESHOLD operation has sense.\n       The OP_CLEAN_ALL operation also should be performed only once.\n       Moreover it cancels the OP_CLEAN_TO_THRESHOLD operation. */\n    class OperationPreprocessor {\n        // TODO: remove the dependency on CacheBin.\n        typename LargeObjectCacheImpl<Props>::CacheBin *const  bin;\n\n        /* Contains the relative time in the operation list.\n           It counts in the reverse order since the aggregator also\n           provides operations in the reverse order. */\n        uintptr_t lclTime;\n\n        /* opGet contains only OP_GET operations which cannot be merge with OP_PUT operations\n           opClean contains all OP_CLEAN_TO_THRESHOLD and OP_CLEAN_ALL operations. */\n        CacheBinOperation *opGet, *opClean;\n        /* The time of the last OP_CLEAN_TO_THRESHOLD operations */\n        uintptr_t cleanTime;\n\n        /* lastGetOpTime - the time of the last OP_GET operation.\n           lastGet - the same meaning as CacheBin::lastGet */\n        uintptr_t lastGetOpTime, lastGet;\n\n        /* The total sum of all usedSize changes requested with CBOP_UPDATE_USED_SIZE operations. */\n        size_t updateUsedSize;\n\n        /* The list of blocks for the OP_PUT_LIST operation. */\n        LargeMemoryBlock *head, *tail;\n        int putListNum;\n\n        /* if the OP_CLEAN_ALL is requested. */\n        bool isCleanAll;\n\n        inline void commitOperation(CacheBinOperation *op) const;\n        inline void addOpToOpList(CacheBinOperation *op, CacheBinOperation **opList) const;\n        bool getFromPutList(CacheBinOperation* opGet, uintptr_t currTime);\n        void addToPutList( LargeMemoryBlock *head, LargeMemoryBlock *tail, int num );\n\n    public:\n        OperationPreprocessor(typename LargeObjectCacheImpl<Props>::CacheBin *bin) :\n            bin(bin), lclTime(0), opGet(NULL), opClean(NULL), cleanTime(0),\n            lastGetOpTime(0), updateUsedSize(0), head(NULL), isCleanAll(false)  {}\n        void operator()(CacheBinOperation* opList);\n        uintptr_t getTimeRange() const { return -lclTime; }\n\n        friend class CacheBinFunctor;\n    };\n\npublic:\n    CacheBinFunctor(typename LargeObjectCacheImpl<Props>::CacheBin *bin, ExtMemoryPool *extMemPool,\n                    typename LargeObjectCacheImpl<Props>::BinBitMask *bitMask, int idx) :\n        bin(bin), extMemPool(extMemPool), bitMask(bitMask), idx(idx), toRelease(NULL), needCleanup(false) {}\n    void operator()(CacheBinOperation* opList);\n\n    bool isCleanupNeeded() const { return needCleanup; }\n    LargeMemoryBlock *getToRelease() const { return toRelease; }\n    uintptr_t getCurrTime() const { return currTime; }\n};\n\n// ---------------- Cache Bin Aggregator Operation Helpers ---------------- //\n// The list of possible operations.\nenum CacheBinOperationType {\n    CBOP_INVALID = 0,\n    CBOP_GET,\n    CBOP_PUT_LIST,\n    CBOP_CLEAN_TO_THRESHOLD,\n    CBOP_CLEAN_ALL,\n    CBOP_UPDATE_USED_SIZE\n};\n\n// The operation status list. CBST_NOWAIT can be specified for non-blocking operations.\nenum CacheBinOperationStatus {\n    CBST_WAIT = 0,\n    CBST_NOWAIT,\n    CBST_DONE\n};\n\n// The list of structures which describe the operation data\nstruct OpGet {\n    static const CacheBinOperationType type = CBOP_GET;\n    LargeMemoryBlock **res;\n    size_t size;\n    uintptr_t currTime;\n};\n\nstruct OpPutList {\n    static const CacheBinOperationType type = CBOP_PUT_LIST;\n    LargeMemoryBlock *head;\n};\n\nstruct OpCleanToThreshold {\n    static const CacheBinOperationType type = CBOP_CLEAN_TO_THRESHOLD;\n    LargeMemoryBlock **res;\n    uintptr_t currTime;\n};\n\nstruct OpCleanAll {\n    static const CacheBinOperationType type = CBOP_CLEAN_ALL;\n    LargeMemoryBlock **res;\n};\n\nstruct OpUpdateUsedSize {\n    static const CacheBinOperationType type = CBOP_UPDATE_USED_SIZE;\n    size_t size;\n};\n\nunion CacheBinOperationData {\nprivate:\n    OpGet opGet;\n    OpPutList opPutList;\n    OpCleanToThreshold opCleanToThreshold;\n    OpCleanAll opCleanAll;\n    OpUpdateUsedSize opUpdateUsedSize;\n};\n\n// Forward declarations\ntemplate <typename OpTypeData> OpTypeData& opCast(CacheBinOperation &op);\n\n// Describes the aggregator operation\nstruct CacheBinOperation : public MallocAggregatedOperation<CacheBinOperation>::type {\n    CacheBinOperationType type;\n\n    template <typename OpTypeData>\n    CacheBinOperation(OpTypeData &d, CacheBinOperationStatus st = CBST_WAIT) {\n        opCast<OpTypeData>(*this) = d;\n        type = OpTypeData::type;\n        MallocAggregatedOperation<CacheBinOperation>::type::status = st;\n    }\nprivate:\n    CacheBinOperationData data;\n\n    template <typename OpTypeData>\n    friend OpTypeData& opCast(CacheBinOperation &op);\n};\n\n// The opCast function can be the member of CacheBinOperation but it will have\n// small stylistic ambiguity: it will look like a getter (with a cast) for the\n// CacheBinOperation::data data member but it should return a reference to\n// simplify the code from a lot of getter/setter calls. So the global cast in\n// the style of static_cast (or reinterpret_cast) seems to be more readable and\n// have more explicit semantic.\ntemplate <typename OpTypeData>\nOpTypeData& opCast(CacheBinOperation &op) {\n    return *reinterpret_cast<OpTypeData*>(&op.data);\n}\n// ------------------------------------------------------------------------ //\n\n#if __TBB_MALLOC_LOCACHE_STAT\nintptr_t mallocCalls, cacheHits;\nintptr_t memAllocKB, memHitKB;\n#endif\n\ninline bool lessThanWithOverflow(intptr_t a, intptr_t b)\n{\n    return (a < b && (b - a < UINTPTR_MAX/2)) ||\n           (a > b && (a - b > UINTPTR_MAX/2));\n}\n\n/* ----------------------------------- Operation processing methods ------------------------------------ */\n\ntemplate<typename Props> void CacheBinFunctor<Props>::\n    OperationPreprocessor::commitOperation(CacheBinOperation *op) const\n{\n    FencedStore( (intptr_t&)(op->status), CBST_DONE );\n}\n\ntemplate<typename Props> void CacheBinFunctor<Props>::\n    OperationPreprocessor::addOpToOpList(CacheBinOperation *op, CacheBinOperation **opList) const\n{\n    op->next = *opList;\n    *opList = op;\n}\n\ntemplate<typename Props> bool CacheBinFunctor<Props>::\n    OperationPreprocessor::getFromPutList(CacheBinOperation *opGet, uintptr_t currTime)\n{\n    if ( head ) {\n        uintptr_t age = head->age;\n        LargeMemoryBlock *next = head->next;\n        *opCast<OpGet>(*opGet).res = head;\n        commitOperation( opGet );\n        head = next;\n        putListNum--;\n        MALLOC_ASSERT( putListNum>=0, ASSERT_TEXT );\n\n        // use moving average with current hit interval\n        bin->updateMeanHitRange( currTime - age );\n        return true;\n    }\n    return false;\n}\n\ntemplate<typename Props> void CacheBinFunctor<Props>::\n    OperationPreprocessor::addToPutList(LargeMemoryBlock *h, LargeMemoryBlock *t, int num)\n{\n    if ( head ) {\n        MALLOC_ASSERT( tail, ASSERT_TEXT );\n        tail->next = h;\n        h->prev = tail;\n        tail = t;\n        putListNum += num;\n    } else {\n        head = h;\n        tail = t;\n        putListNum = num;\n    }\n}\n\ntemplate<typename Props> void CacheBinFunctor<Props>::\n    OperationPreprocessor::operator()(CacheBinOperation* opList)\n{\n    for ( CacheBinOperation *op = opList, *opNext; op; op = opNext ) {\n        opNext = op->next;\n        switch ( op->type ) {\n        case CBOP_GET:\n            {\n                lclTime--;\n                if ( !lastGetOpTime ) {\n                    lastGetOpTime = lclTime;\n                    lastGet = 0;\n                } else if ( !lastGet ) lastGet = lclTime;\n\n                if ( !getFromPutList(op,lclTime) ) {\n                    opCast<OpGet>(*op).currTime = lclTime;\n                    addOpToOpList( op, &opGet );\n                }\n            }\n            break;\n\n        case CBOP_PUT_LIST:\n            {\n                LargeMemoryBlock *head = opCast<OpPutList>(*op).head;\n                LargeMemoryBlock *curr = head, *prev = NULL;\n\n                int num = 0;\n                do {\n                    // we do not kept prev pointers during assigning blocks to bins, set them now\n                    curr->prev = prev;\n\n                    // Save the local times to the memory blocks. Local times are necessary\n                    // for the getFromPutList function which updates the hit range value in\n                    // CacheBin when OP_GET and OP_PUT_LIST operations are merged successfully.\n                    // The age will be updated to the correct global time after preprocessing\n                    // when global cache time is updated.\n                    curr->age = --lclTime;\n\n                    prev = curr;\n                    num += 1;\n\n                    STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeObj);\n                } while (( curr = curr->next ));\n\n                LargeMemoryBlock *tail = prev;\n                addToPutList(head, tail, num);\n\n                while ( opGet ) {\n                    CacheBinOperation *next = opGet->next;\n                    if ( !getFromPutList(opGet, opCast<OpGet>(*opGet).currTime) )\n                        break;\n                    opGet = next;\n                }\n            }\n            break;\n\n        case CBOP_UPDATE_USED_SIZE:\n            updateUsedSize += opCast<OpUpdateUsedSize>(*op).size;\n            commitOperation( op );\n            break;\n\n        case CBOP_CLEAN_ALL:\n            isCleanAll = true;\n            addOpToOpList( op, &opClean );\n            break;\n\n        case CBOP_CLEAN_TO_THRESHOLD:\n            {\n                uintptr_t currTime = opCast<OpCleanToThreshold>(*op).currTime;\n                // We don't worry about currTime overflow since it is a rare\n                // occurrence and doesn't affect correctness\n                cleanTime = cleanTime < currTime ? currTime : cleanTime;\n                addOpToOpList( op, &opClean );\n            }\n            break;\n\n        default:\n            MALLOC_ASSERT( false, \"Unknown operation.\" );\n        }\n    }\n    MALLOC_ASSERT( !( opGet && head ), \"Not all put/get pairs are processed!\" );\n}\n\ntemplate<typename Props> void CacheBinFunctor<Props>::operator()(CacheBinOperation* opList)\n{\n    MALLOC_ASSERT( opList, \"Empty operation list is passed into operation handler.\" );\n\n    OperationPreprocessor prep(bin);\n    prep(opList);\n\n    if ( uintptr_t timeRange = prep.getTimeRange() ) {\n        uintptr_t startTime = extMemPool->loc.getCurrTimeRange(timeRange);\n        // endTime is used as the current (base) time since the local time is negative.\n        uintptr_t endTime = startTime + timeRange;\n\n        if ( prep.lastGetOpTime && prep.lastGet ) bin->setLastGet(prep.lastGet+endTime);\n\n        if ( CacheBinOperation *opGet = prep.opGet ) {\n            bool isEmpty = false;\n            do {\n#if __TBB_MALLOC_WHITEBOX_TEST\n                tbbmalloc_whitebox::locGetProcessed++;\n#endif\n                const OpGet &opGetData = opCast<OpGet>(*opGet);\n                if ( !isEmpty ) {\n                    if ( LargeMemoryBlock *res = bin->get() ) {\n                        uintptr_t getTime = opGetData.currTime + endTime;\n                        // use moving average with current hit interval\n                        bin->updateMeanHitRange( getTime - res->age);\n                        bin->updateCachedSize( -opGetData.size );\n                        *opGetData.res = res;\n                    } else {\n                        isEmpty = true;\n                        uintptr_t lastGetOpTime = prep.lastGetOpTime+endTime;\n                        bin->forgetOutdatedState(lastGetOpTime);\n                        bin->updateAgeThreshold(lastGetOpTime);\n                    }\n                }\n\n                CacheBinOperation *opNext = opGet->next;\n                bin->updateUsedSize( opGetData.size, bitMask, idx );\n                prep.commitOperation( opGet );\n                opGet = opNext;\n            } while ( opGet );\n            if ( prep.lastGetOpTime )\n                bin->setLastGet( prep.lastGetOpTime + endTime );\n        } else if ( LargeMemoryBlock *curr = prep.head ) {\n            curr->prev = NULL;\n            while ( curr ) {\n                // Update local times to global times\n                curr->age += endTime;\n                curr=curr->next;\n            }\n#if __TBB_MALLOC_WHITEBOX_TEST\n            tbbmalloc_whitebox::locPutProcessed+=prep.putListNum;\n#endif\n            toRelease = bin->putList(prep.head, prep.tail, bitMask, idx, prep.putListNum);\n        }\n        needCleanup = extMemPool->loc.isCleanupNeededOnRange(timeRange, startTime);\n        currTime = endTime - 1;\n    }\n\n    if ( CacheBinOperation *opClean = prep.opClean ) {\n        if ( prep.isCleanAll )\n            *opCast<OpCleanAll>(*opClean).res = bin->cleanAll(bitMask, idx);\n        else\n            *opCast<OpCleanToThreshold>(*opClean).res = bin->cleanToThreshold(prep.cleanTime, bitMask, idx);\n\n        CacheBinOperation *opNext = opClean->next;\n        prep.commitOperation( opClean );\n\n        while (( opClean = opNext )) {\n            opNext = opClean->next;\n            prep.commitOperation(opClean);\n        }\n    }\n\n    if ( size_t size = prep.updateUsedSize )\n        bin->updateUsedSize(size, bitMask, idx);\n}\n/* ----------------------------------------------------------------------------------------------------- */\n/* --------------------------- Methods for creating and executing operations --------------------------- */\ntemplate<typename Props> void LargeObjectCacheImpl<Props>::\n    CacheBin::ExecuteOperation(CacheBinOperation *op, ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx, bool longLifeTime)\n{\n    CacheBinFunctor<Props> func( this, extMemPool, bitMask, idx );\n    aggregator.execute( op, func, longLifeTime );\n\n    if (  LargeMemoryBlock *toRelease = func.getToRelease() )\n        extMemPool->backend.returnLargeObject(toRelease);\n\n    if ( func.isCleanupNeeded() )\n        extMemPool->loc.doCleanup( func.getCurrTime(), /*doThreshDecr=*/false);\n}\n\ntemplate<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::\n    CacheBin::get(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx)\n{\n    LargeMemoryBlock *lmb=NULL;\n    OpGet data = {&lmb, size};\n    CacheBinOperation op(data);\n    ExecuteOperation( &op, extMemPool, bitMask, idx );\n    return lmb;\n}\n\ntemplate<typename Props> void LargeObjectCacheImpl<Props>::\n    CacheBin::putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *head, BinBitMask *bitMask, int idx)\n{\n    MALLOC_ASSERT(sizeof(LargeMemoryBlock)+sizeof(CacheBinOperation)<=head->unalignedSize, \"CacheBinOperation is too large to be placed in LargeMemoryBlock!\");\n\n    OpPutList data = {head};\n    CacheBinOperation *op = new (head+1) CacheBinOperation(data, CBST_NOWAIT);\n    ExecuteOperation( op, extMemPool, bitMask, idx, false );\n}\n\ntemplate<typename Props> bool LargeObjectCacheImpl<Props>::\n    CacheBin::cleanToThreshold(ExtMemoryPool *extMemPool, BinBitMask *bitMask, uintptr_t currTime, int idx)\n{\n    LargeMemoryBlock *toRelease = NULL;\n\n    /* oldest may be more recent then age, that's why cast to signed type\n       was used. age overflow is also processed correctly. */\n    if (last && (intptr_t)(currTime - oldest) > ageThreshold) {\n        OpCleanToThreshold data = {&toRelease, currTime};\n        CacheBinOperation op(data);\n        ExecuteOperation( &op, extMemPool, bitMask, idx );\n    }\n    bool released = toRelease;\n\n    Backend *backend = &extMemPool->backend;\n    while ( toRelease ) {\n        LargeMemoryBlock *helper = toRelease->next;\n        backend->returnLargeObject(toRelease);\n        toRelease = helper;\n    }\n    return released;\n}\n\ntemplate<typename Props> bool LargeObjectCacheImpl<Props>::\n    CacheBin::releaseAllToBackend(ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx)\n{\n    LargeMemoryBlock *toRelease = NULL;\n\n    if (last) {\n        OpCleanAll data = {&toRelease};\n        CacheBinOperation op(data);\n        ExecuteOperation(&op, extMemPool, bitMask, idx);\n    }\n    bool released = toRelease;\n\n    Backend *backend = &extMemPool->backend;\n    while ( toRelease ) {\n        LargeMemoryBlock *helper = toRelease->next;\n        MALLOC_ASSERT(!helper || lessThanWithOverflow(helper->age, toRelease->age),\n                      ASSERT_TEXT);\n        backend->returnLargeObject(toRelease);\n        toRelease = helper;\n    }\n    return released;\n}\n\ntemplate<typename Props> void LargeObjectCacheImpl<Props>::\n    CacheBin::updateUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx) {\n    OpUpdateUsedSize data = {size};\n    CacheBinOperation op(data);\n    ExecuteOperation( &op, extMemPool, bitMask, idx );\n}\n/* ----------------------------------------------------------------------------------------------------- */\n/* ------------------------------ Unsafe methods used with the aggregator ------------------------------ */\ntemplate<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::\n    CacheBin::putList(LargeMemoryBlock *head, LargeMemoryBlock *tail, BinBitMask *bitMask, int idx, int num)\n{\n    size_t size = head->unalignedSize;\n    usedSize -= num*size;\n    MALLOC_ASSERT( !last || (last->age != 0 && last->age != -1U), ASSERT_TEXT );\n    MALLOC_ASSERT( (tail==head && num==1) || (tail!=head && num>1), ASSERT_TEXT );\n    LargeMemoryBlock *toRelease = NULL;\n    if (!lastCleanedAge) {\n        // 1st object of such size was released.\n        // Not cache it, and remember when this occurs\n        // to take into account during cache miss.\n        lastCleanedAge = tail->age;\n        toRelease = tail;\n        tail = tail->prev;\n        if (tail)\n            tail->next = NULL;\n        else\n            head = NULL;\n        num--;\n    }\n    if (num) {\n        // add [head;tail] list to cache\n        MALLOC_ASSERT( tail, ASSERT_TEXT );\n        tail->next = first;\n        if (first)\n            first->prev = tail;\n        first = head;\n        if (!last) {\n            MALLOC_ASSERT(0 == oldest, ASSERT_TEXT);\n            oldest = tail->age;\n            last = tail;\n        }\n\n        cachedSize += num*size;\n    }\n\n    // No used object, and nothing in the bin, mark the bin as empty\n    if (!usedSize && !first)\n        bitMask->set(idx, false);\n\n    return toRelease;\n}\n\ntemplate<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::\n    CacheBin::get()\n{\n    LargeMemoryBlock *result=first;\n    if (result) {\n        first = result->next;\n        if (first)\n            first->prev = NULL;\n        else {\n            last = NULL;\n            oldest = 0;\n        }\n    }\n\n    return result;\n}\n\n// forget the history for the bin if it was unused for long time\ntemplate<typename Props> void LargeObjectCacheImpl<Props>::\n    CacheBin::forgetOutdatedState(uintptr_t currTime)\n{\n    // If the time since the last get is LongWaitFactor times more than ageThreshold\n    // for the bin, treat the bin as rarely-used and forget everything we know\n    // about it.\n    // If LongWaitFactor is too small, we forget too early and\n    // so prevents good caching, while if too high, caching blocks\n    // with unrelated usage pattern occurs.\n    const uintptr_t sinceLastGet = currTime - lastGet;\n    bool doCleanup = false;\n\n    if (ageThreshold)\n        doCleanup = sinceLastGet > Props::LongWaitFactor*ageThreshold;\n    else if (lastCleanedAge)\n        doCleanup = sinceLastGet > Props::LongWaitFactor*(lastCleanedAge - lastGet);\n\n    if (doCleanup) {\n        lastCleanedAge = 0;\n        ageThreshold = 0;\n    }\n\n}\n\ntemplate<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::\n    CacheBin::cleanToThreshold(uintptr_t currTime, BinBitMask *bitMask, int idx)\n{\n    /* oldest may be more recent then age, that's why cast to signed type\n    was used. age overflow is also processed correctly. */\n    if ( !last || (intptr_t)(currTime - last->age) < ageThreshold ) return NULL;\n\n#if MALLOC_DEBUG\n    uintptr_t nextAge = 0;\n#endif\n    do {\n#if MALLOC_DEBUG\n        // check that list ordered\n        MALLOC_ASSERT(!nextAge || lessThanWithOverflow(nextAge, last->age),\n            ASSERT_TEXT);\n        nextAge = last->age;\n#endif\n        cachedSize -= last->unalignedSize;\n        last = last->prev;\n    } while (last && (intptr_t)(currTime - last->age) > ageThreshold);\n\n    LargeMemoryBlock *toRelease = NULL;\n    if (last) {\n        toRelease = last->next;\n        oldest = last->age;\n        last->next = NULL;\n    } else {\n        toRelease = first;\n        first = NULL;\n        oldest = 0;\n        if (!usedSize)\n            bitMask->set(idx, false);\n    }\n    MALLOC_ASSERT( toRelease, ASSERT_TEXT );\n    lastCleanedAge = toRelease->age;\n\n    return toRelease;\n}\n\ntemplate<typename Props> LargeMemoryBlock *LargeObjectCacheImpl<Props>::\n    CacheBin::cleanAll(BinBitMask *bitMask, int idx)\n{\n    if (!last) return NULL;\n\n    LargeMemoryBlock *toRelease = first;\n    last = NULL;\n    first = NULL;\n    oldest = 0;\n    cachedSize = 0;\n    if (!usedSize)\n        bitMask->set(idx, false);\n\n    return toRelease;\n}\n/* ----------------------------------------------------------------------------------------------------- */\n\ntemplate<typename Props> size_t LargeObjectCacheImpl<Props>::\n    CacheBin::reportStat(int num, FILE *f)\n{\n#if __TBB_MALLOC_LOCACHE_STAT\n    if (first)\n        printf(\"%d(%lu): total %lu KB thr %ld lastCln %lu oldest %lu\\n\",\n               num, num*Props::CacheStep+Props::MinSize,\n               cachedSize/1024, ageThreshold, lastCleanedAge, oldest);\n#else\n    suppress_unused_warning(num);\n    suppress_unused_warning(f);\n#endif\n    return cachedSize;\n}\n\n// release from cache blocks that are older than ageThreshold\ntemplate<typename Props>\nbool LargeObjectCacheImpl<Props>::regularCleanup(ExtMemoryPool *extMemPool, uintptr_t currTime, bool doThreshDecr)\n{\n    bool released = false;\n    BinsSummary binsSummary;\n\n    for (int i = bitMask.getMaxTrue(numBins-1); i >= 0;\n         i = bitMask.getMaxTrue(i-1)) {\n        bin[i].updateBinsSummary(&binsSummary);\n        if (!doThreshDecr && tooLargeLOC>2 && binsSummary.isLOCTooLarge()) {\n            // if LOC is too large for quite long time, decrease the threshold\n            // based on bin hit statistics.\n            // For this, redo cleanup from the beginning.\n            // Note: on this iteration total usedSz can be not too large\n            // in comparison to total cachedSz, as we calculated it only\n            // partially. We are ok with it.\n            i = bitMask.getMaxTrue(numBins-1)+1;\n            doThreshDecr = true;\n            binsSummary.reset();\n            continue;\n        }\n        if (doThreshDecr)\n            bin[i].decreaseThreshold();\n        if (bin[i].cleanToThreshold(extMemPool, &bitMask, currTime, i))\n            released = true;\n    }\n\n    // We want to find if LOC was too large for some time continuously,\n    // so OK with races between incrementing and zeroing, but incrementing\n    // must be atomic.\n    if (binsSummary.isLOCTooLarge())\n        AtomicIncrement(tooLargeLOC);\n    else\n        tooLargeLOC = 0;\n    return released;\n}\n\ntemplate<typename Props>\nbool LargeObjectCacheImpl<Props>::cleanAll(ExtMemoryPool *extMemPool)\n{\n    bool released = false;\n    for (int i = numBins-1; i >= 0; i--)\n        released |= bin[i].releaseAllToBackend(extMemPool, &bitMask, i);\n    return released;\n}\n\n#if __TBB_MALLOC_WHITEBOX_TEST\ntemplate<typename Props>\nsize_t LargeObjectCacheImpl<Props>::getLOCSize() const\n{\n    size_t size = 0;\n    for (int i = numBins-1; i >= 0; i--)\n        size += bin[i].getSize();\n    return size;\n}\n\nsize_t LargeObjectCache::getLOCSize() const\n{\n    return largeCache.getLOCSize() + hugeCache.getLOCSize();\n}\n\ntemplate<typename Props>\nsize_t LargeObjectCacheImpl<Props>::getUsedSize() const\n{\n    size_t size = 0;\n    for (int i = numBins-1; i >= 0; i--)\n        size += bin[i].getUsedSize();\n    return size;\n}\n\nsize_t LargeObjectCache::getUsedSize() const\n{\n    return largeCache.getUsedSize() + hugeCache.getUsedSize();\n}\n#endif // __TBB_MALLOC_WHITEBOX_TEST\n\ninline bool LargeObjectCache::isCleanupNeededOnRange(uintptr_t range, uintptr_t currTime)\n{\n    return range >= cacheCleanupFreq\n        || currTime+range < currTime-1 // overflow, 0 is power of 2, do cleanup\n        // (prev;prev+range] contains n*cacheCleanupFreq\n        || alignUp(currTime, cacheCleanupFreq)<currTime+range;\n}\n\nbool LargeObjectCache::doCleanup(uintptr_t currTime, bool doThreshDecr)\n{\n    if (!doThreshDecr)\n        extMemPool->allLocalCaches.markUnused();\n    return largeCache.regularCleanup(extMemPool, currTime, doThreshDecr)\n        | hugeCache.regularCleanup(extMemPool, currTime, doThreshDecr);\n}\n\nbool LargeObjectCache::decreasingCleanup()\n{\n    return doCleanup(FencedLoad((intptr_t&)cacheCurrTime), /*doThreshDecr=*/true);\n}\n\nbool LargeObjectCache::regularCleanup()\n{\n    return doCleanup(FencedLoad((intptr_t&)cacheCurrTime), /*doThreshDecr=*/false);\n}\n\nbool LargeObjectCache::cleanAll()\n{\n    return largeCache.cleanAll(extMemPool) | hugeCache.cleanAll(extMemPool);\n}\n\ntemplate<typename Props>\nLargeMemoryBlock *LargeObjectCacheImpl<Props>::get(ExtMemoryPool *extMemoryPool, size_t size)\n{\n    MALLOC_ASSERT( size%Props::CacheStep==0, ASSERT_TEXT );\n    int idx = sizeToIdx(size);\n\n    LargeMemoryBlock *lmb = bin[idx].get(extMemoryPool, size, &bitMask, idx);\n\n    if (lmb) {\n        MALLOC_ITT_SYNC_ACQUIRED(bin+idx);\n        STAT_increment(getThreadId(), ThreadCommonCounters, allocCachedLargeObj);\n    }\n    return lmb;\n}\n\ntemplate<typename Props>\nvoid LargeObjectCacheImpl<Props>::updateCacheState(ExtMemoryPool *extMemPool, DecreaseOrIncrease op, size_t size)\n{\n    int idx = sizeToIdx(size);\n    MALLOC_ASSERT(idx<numBins, ASSERT_TEXT);\n    bin[idx].updateUsedSize(extMemPool, op==decrease? -size : size, &bitMask, idx);\n}\n\n#if __TBB_MALLOC_LOCACHE_STAT\ntemplate<typename Props>\nvoid LargeObjectCacheImpl<Props>::reportStat(FILE *f)\n{\n    size_t cachedSize = 0;\n    for (int i=0; i<numBins; i++)\n        cachedSize += bin[i].reportStat(i, f);\n    fprintf(f, \"total LOC size %lu MB\\n\", cachedSize/1024/1024);\n}\n\nvoid LargeObjectCache::reportStat(FILE *f)\n{\n    largeCache.reportStat(f);\n    hugeCache.reportStat(f);\n    fprintf(f, \"cache time %lu\\n\", cacheCurrTime);\n}\n#endif\n\ntemplate<typename Props>\nvoid LargeObjectCacheImpl<Props>::putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *toCache)\n{\n    int toBinIdx = sizeToIdx(toCache->unalignedSize);\n\n    MALLOC_ITT_SYNC_RELEASING(bin+toBinIdx);\n    bin[toBinIdx].putList(extMemPool, toCache, &bitMask, toBinIdx);\n}\n\nvoid LargeObjectCache::updateCacheState(DecreaseOrIncrease op, size_t size)\n{\n    if (size < maxLargeSize)\n        largeCache.updateCacheState(extMemPool, op, size);\n    else if (size < maxHugeSize)\n        hugeCache.updateCacheState(extMemPool, op, size);\n}\n\nvoid LargeObjectCache::registerRealloc(size_t oldSize, size_t newSize)\n{\n    updateCacheState(decrease, oldSize);\n    updateCacheState(increase, newSize);\n}\n\n// return artificial bin index, it's used only during sorting and never saved\nint LargeObjectCache::sizeToIdx(size_t size)\n{\n    MALLOC_ASSERT(size < maxHugeSize, ASSERT_TEXT);\n    return size < maxLargeSize?\n        LargeCacheType::sizeToIdx(size) :\n        LargeCacheType::getNumBins()+HugeCacheType::sizeToIdx(size);\n}\n\nvoid LargeObjectCache::putList(LargeMemoryBlock *list)\n{\n    LargeMemoryBlock *toProcess, *n;\n\n    for (LargeMemoryBlock *curr = list; curr; curr = toProcess) {\n        LargeMemoryBlock *tail = curr;\n        toProcess = curr->next;\n        if (curr->unalignedSize >= maxHugeSize) {\n            extMemPool->backend.returnLargeObject(curr);\n            continue;\n        }\n        int currIdx = sizeToIdx(curr->unalignedSize);\n\n        // Find all blocks fitting to same bin. Not use more efficient sorting\n        // algorithm because list is short (commonly,\n        // LocalLOC's HIGH_MARK-LOW_MARK, i.e. 24 items).\n        for (LargeMemoryBlock *b = toProcess; b; b = n) {\n            n = b->next;\n            if (sizeToIdx(b->unalignedSize) == currIdx) {\n                tail->next = b;\n                tail = b;\n                if (toProcess == b)\n                    toProcess = toProcess->next;\n                else {\n                    b->prev->next = b->next;\n                    if (b->next)\n                        b->next->prev = b->prev;\n                }\n            }\n        }\n        tail->next = NULL;\n        if (curr->unalignedSize < maxLargeSize)\n            largeCache.putList(extMemPool, curr);\n        else\n            hugeCache.putList(extMemPool, curr);\n    }\n}\n\nvoid LargeObjectCache::put(LargeMemoryBlock *largeBlock)\n{\n    if (largeBlock->unalignedSize < maxHugeSize) {\n        largeBlock->next = NULL;\n        if (largeBlock->unalignedSize<maxLargeSize)\n            largeCache.putList(extMemPool, largeBlock);\n        else\n            hugeCache.putList(extMemPool, largeBlock);\n    } else\n        extMemPool->backend.returnLargeObject(largeBlock);\n}\n\nLargeMemoryBlock *LargeObjectCache::get(size_t size)\n{\n    MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );\n    MALLOC_ASSERT( size>=minLargeSize, ASSERT_TEXT );\n\n    if ( size < maxHugeSize) {\n        return size < maxLargeSize?\n            largeCache.get(extMemPool, size) : hugeCache.get(extMemPool, size);\n    }\n    return NULL;\n}\n\nLargeMemoryBlock *ExtMemoryPool::mallocLargeObject(MemoryPool *pool, size_t allocationSize)\n{\n#if __TBB_MALLOC_LOCACHE_STAT\n    AtomicIncrement(mallocCalls);\n    AtomicAdd(memAllocKB, allocationSize/1024);\n#endif\n    LargeMemoryBlock* lmb = loc.get(allocationSize);\n    if (!lmb) {\n        BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true);\n        if (backRefIdx.isInvalid())\n            return NULL;\n\n        // unalignedSize is set in getLargeBlock\n        lmb = backend.getLargeBlock(allocationSize);\n        if (!lmb) {\n            removeBackRef(backRefIdx);\n            loc.updateCacheState(decrease, allocationSize);\n            return NULL;\n        }\n        lmb->backRefIdx = backRefIdx;\n        lmb->pool = pool;\n        STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);\n    } else {\n#if __TBB_MALLOC_LOCACHE_STAT\n        AtomicIncrement(cacheHits);\n        AtomicAdd(memHitKB, allocationSize/1024);\n#endif\n    }\n    return lmb;\n}\n\nvoid ExtMemoryPool::freeLargeObject(LargeMemoryBlock *mBlock)\n{\n    loc.put(mBlock);\n}\n\nvoid ExtMemoryPool::freeLargeObjectList(LargeMemoryBlock *head)\n{\n    loc.putList(head);\n}\n\nbool ExtMemoryPool::softCachesCleanup()\n{\n    return loc.regularCleanup();\n}\n\nbool ExtMemoryPool::hardCachesCleanup()\n{\n    // thread-local caches must be cleaned before LOC,\n    // because object from thread-local cache can be released to LOC\n    bool ret = releaseAllLocalCaches();\n    ret |= orphanedBlocks.cleanup(&backend);\n    ret |= loc.cleanAll();\n    ret |= backend.clean();\n    return ret;\n}\n\n#if BACKEND_HAS_MREMAP\nvoid *ExtMemoryPool::remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment)\n{\n    const size_t oldUnalignedSize = ((LargeObjectHdr*)ptr - 1)->memoryBlock->unalignedSize;\n    void *o = backend.remap(ptr, oldSize, newSize, alignment);\n    if (o) {\n        LargeMemoryBlock *lmb = ((LargeObjectHdr*)o - 1)->memoryBlock;\n        loc.registerRealloc(lmb->unalignedSize, oldUnalignedSize);\n    }\n    return o;\n}\n#endif /* BACKEND_HAS_MREMAP */\n\n/*********** End allocation of large objects **********/\n\n} // namespace internal\n} // namespace rml\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin32-proxy-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\ncalloc;\nfree;\nmalloc;\nrealloc;\nposix_memalign;\nmemalign;\naligned_alloc;\nvalloc;\npvalloc;\nmallinfo;\nmallopt;\nmalloc_usable_size;\n__libc_malloc;\n__libc_realloc;\n__libc_calloc;\n__libc_free;\n__libc_memalign;\n__libc_pvalloc;\n__libc_valloc;\n__TBB_malloc_proxy;\n_ZdaPv; /* next ones are new/delete */\n_ZdaPvRKSt9nothrow_t;\n_ZdlPv;\n_ZdlPvRKSt9nothrow_t;\n_Znaj;\n_ZnajRKSt9nothrow_t;\n_Znwj;\n_ZnwjRKSt9nothrow_t;\n\nlocal:\n\n/* TBB symbols */\n*3rml8internal*;\n*3tbb*;\n*__TBB*;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin32-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\nscalable_calloc;\nscalable_free;\nscalable_malloc;\nscalable_realloc;\nscalable_posix_memalign;\nscalable_aligned_malloc;\nscalable_aligned_realloc;\nscalable_aligned_free;\nscalable_msize;\nscalable_allocation_mode;\nscalable_allocation_command;\n__TBB_malloc_safer_aligned_msize;\n__TBB_malloc_safer_aligned_realloc;\n__TBB_malloc_safer_free;\n__TBB_malloc_safer_msize;\n__TBB_malloc_safer_realloc;\n\n/* memory pool stuff */\n_ZN3rml10pool_resetEPNS_10MemoryPoolE;\n_ZN3rml11pool_createEiPKNS_13MemPoolPolicyE;\n_ZN3rml14pool_create_v1EiPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;\n_ZN3rml11pool_mallocEPNS_10MemoryPoolEj;\n_ZN3rml12pool_destroyEPNS_10MemoryPoolE;\n_ZN3rml9pool_freeEPNS_10MemoryPoolEPv;\n_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;\n_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;\n_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;\n_ZN3rml13pool_identifyEPv;\n\nlocal:\n\n/* TBB symbols */\n*3rml*;\n*3tbb*;\n*__TBB*;\n__itt_*;\nITT_DoOneTimeInitialization;\nTBB_runtime_interface_version;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_memcpy_largest_cachelinesize;\nget_memcpy_largest_cache_size;\nget_mem_ops_method;\ninit_mem_ops_method;\nirc__get_msg;\nirc__print;\noverride_mem_ops_method;\nset_memcpy_largest_cachelinesize;\nset_memcpy_largest_cache_size;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin64-proxy-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\ncalloc;\nfree;\nmalloc;\nrealloc;\nposix_memalign;\nmemalign;\naligned_alloc;\nvalloc;\npvalloc;\nmallinfo;\nmallopt;\nmalloc_usable_size;\n__libc_malloc;\n__libc_realloc;\n__libc_calloc;\n__libc_free;\n__libc_memalign;\n__libc_pvalloc;\n__libc_valloc;\n__TBB_malloc_proxy;\n_ZdaPv;  /* next ones are new/delete */\n_ZdaPvRKSt9nothrow_t;\n_ZdlPv;\n_ZdlPvRKSt9nothrow_t;\n_Znam;\n_ZnamRKSt9nothrow_t;\n_Znwm;\n_ZnwmRKSt9nothrow_t;\n\nlocal:\n\n/* TBB symbols */\n*3rml8internal*;\n*3tbb*;\n*__TBB*;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin64-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\nscalable_calloc;\nscalable_free;\nscalable_malloc;\nscalable_realloc;\nscalable_posix_memalign;\nscalable_aligned_malloc;\nscalable_aligned_realloc;\nscalable_aligned_free;\nscalable_msize;\nscalable_allocation_mode;\nscalable_allocation_command;\n__TBB_malloc_safer_aligned_msize;\n__TBB_malloc_safer_aligned_realloc;\n__TBB_malloc_safer_free;\n__TBB_malloc_safer_msize;\n__TBB_malloc_safer_realloc;\n\n/* memory pool stuff */\n_ZN3rml11pool_createElPKNS_13MemPoolPolicyE;\n_ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;\n_ZN3rml10pool_resetEPNS_10MemoryPoolE;\n_ZN3rml11pool_mallocEPNS_10MemoryPoolEm;\n_ZN3rml12pool_destroyEPNS_10MemoryPoolE;\n_ZN3rml9pool_freeEPNS_10MemoryPoolEPv;\n_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;\n_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;\n_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;\n_ZN3rml13pool_identifyEPv;\n\nlocal:\n\n/* TBB symbols */\n*3rml*;\n*3tbb*;\n*__TBB*;\n__itt_*;\nITT_DoOneTimeInitialization;\nTBB_runtime_interface_version;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_memcpy_largest_cachelinesize;\nget_memcpy_largest_cache_size;\nget_mem_ops_method;\ninit_mem_ops_method;\nirc__get_msg;\nirc__print;\noverride_mem_ops_method;\nset_memcpy_largest_cachelinesize;\nset_memcpy_largest_cache_size;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin64ipf-proxy-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\ncalloc;\nfree;\nmalloc;\nrealloc;\nposix_memalign;\nmemalign;\naligned_alloc;\nvalloc;\npvalloc;\nmallinfo;\nmallopt;\nmalloc_usable_size;\n__libc_malloc;\n__libc_realloc;\n__libc_calloc;\n__libc_free;\n__libc_memalign;\n__libc_pvalloc;\n__libc_valloc;\n__TBB_malloc_proxy;\n_ZdaPv;  /* next ones are new/delete */\n_ZdaPvRKSt9nothrow_t;\n_ZdlPv;\n_ZdlPvRKSt9nothrow_t;\n_Znam;\n_ZnamRKSt9nothrow_t;\n_Znwm;\n_ZnwmRKSt9nothrow_t;\n\nlocal:\n\n/* TBB symbols */\n*3rml8internal*;\n*3tbb*;\n*__TBB*;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/lin64ipf-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\n\nscalable_calloc;\nscalable_free;\nscalable_malloc;\nscalable_realloc;\nscalable_posix_memalign;\nscalable_aligned_malloc;\nscalable_aligned_realloc;\nscalable_aligned_free;\nscalable_msize;\nscalable_allocation_mode;\nscalable_allocation_command;\n__TBB_malloc_safer_aligned_msize;\n__TBB_malloc_safer_aligned_realloc;\n__TBB_malloc_safer_free;\n__TBB_malloc_safer_msize;\n__TBB_malloc_safer_realloc;\n\n/* memory pool stuff */\n_ZN3rml11pool_createElPKNS_13MemPoolPolicyE;\n_ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;\n_ZN3rml10pool_resetEPNS_10MemoryPoolE;\n_ZN3rml11pool_mallocEPNS_10MemoryPoolEm;\n_ZN3rml12pool_destroyEPNS_10MemoryPoolE;\n_ZN3rml9pool_freeEPNS_10MemoryPoolEPv;\n_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;\n_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;\n_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;\n_ZN3rml13pool_identifyEPv;\n\nlocal:\n\n/* TBB symbols */\n*3rml*;\n*3tbb*;\n*__TBB*;\n__itt_*;\nITT_DoOneTimeInitialization;\nTBB_runtime_interface_version;\n\n/* Intel Compiler (libirc) symbols */\n__intel_*;\n_intel_*;\nget_memcpy_largest_cachelinesize;\nget_memcpy_largest_cache_size;\nget_mem_ops_method;\ninit_mem_ops_method;\nirc__get_msg;\nirc__print;\noverride_mem_ops_method;\nset_memcpy_largest_cachelinesize;\nset_memcpy_largest_cache_size;\n\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/mac32-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n_scalable_calloc\n_scalable_free\n_scalable_malloc\n_scalable_realloc\n_scalable_posix_memalign\n_scalable_aligned_malloc\n_scalable_aligned_realloc\n_scalable_aligned_free\n_scalable_msize\n_scalable_allocation_mode\n_scalable_allocation_command\n___TBB_malloc_safer_aligned_msize\n___TBB_malloc_safer_aligned_realloc\n___TBB_malloc_safer_free\n___TBB_malloc_safer_msize\n___TBB_malloc_safer_realloc\n___TBB_malloc_free_definite_size\n/* memory pool stuff */\n__ZN3rml11pool_createElPKNS_13MemPoolPolicyE\n__ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE\n__ZN3rml10pool_resetEPNS_10MemoryPoolE\n__ZN3rml12pool_destroyEPNS_10MemoryPoolE\n__ZN3rml11pool_mallocEPNS_10MemoryPoolEm\n__ZN3rml9pool_freeEPNS_10MemoryPoolEPv\n__ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm\n__ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm\n__ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm\n__ZN3rml13pool_identifyEPv\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/mac64-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n_scalable_calloc\n_scalable_free\n_scalable_malloc\n_scalable_realloc\n_scalable_posix_memalign\n_scalable_aligned_malloc\n_scalable_aligned_realloc\n_scalable_aligned_free\n_scalable_msize\n_scalable_allocation_mode\n_scalable_allocation_command\n___TBB_malloc_safer_aligned_msize\n___TBB_malloc_safer_aligned_realloc\n___TBB_malloc_safer_free\n___TBB_malloc_safer_msize\n___TBB_malloc_safer_realloc\n___TBB_malloc_free_definite_size\n/* memory pool stuff */\n__ZN3rml11pool_createElPKNS_13MemPoolPolicyE\n__ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE\n__ZN3rml10pool_resetEPNS_10MemoryPoolE\n__ZN3rml12pool_destroyEPNS_10MemoryPoolE\n__ZN3rml11pool_mallocEPNS_10MemoryPoolEm\n__ZN3rml9pool_freeEPNS_10MemoryPoolEPv\n__ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm\n__ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm\n__ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm\n__ZN3rml13pool_identifyEPv\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/proxy.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"proxy.h\"\n#include \"tbb/tbb_config.h\"\n\n#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)\n    #if TBB_USE_EXCEPTIONS\n        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !defined(TBB_USE_EXCEPTIONS)\n    #define TBB_USE_EXCEPTIONS 1\n#endif\n\n#if __TBB_CPP11_PRESENT\n#define __TBB_THROW_BAD_ALLOC\n#define __TBB_NO_THROW noexcept\n#else\n#define __TBB_THROW_BAD_ALLOC throw(std::bad_alloc)\n#define __TBB_NO_THROW throw()\n#endif\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\n#ifndef __THROW\n#define __THROW\n#endif\n\n/*** service functions and variables ***/\n\n#include <string.h> // for memset\n#include <unistd.h> // for sysconf\n\nstatic long memoryPageSize;\n\nstatic inline void initPageSize()\n{\n    memoryPageSize = sysconf(_SC_PAGESIZE);\n}\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n#include \"Customize.h\" // FencedStore\n#include <dlfcn.h>\n#include <malloc.h>    // mallinfo\n\n/* __TBB_malloc_proxy used as a weak symbol by libtbbmalloc for:\n   1) detection that the proxy library is loaded\n   2) check that dlsym(\"malloc\") found something different from our replacement malloc\n*/\nextern \"C\" void *__TBB_malloc_proxy(size_t) __attribute__ ((alias (\"malloc\")));\n\nstatic void *orig_msize;\n\n#elif MALLOC_ZONE_OVERLOAD_ENABLED\n\n#include \"proxy_overload_osx.h\"\n\n#endif // MALLOC_ZONE_OVERLOAD_ENABLED\n\n// Original (i.e., replaced) functions,\n// they are never changed for MALLOC_ZONE_OVERLOAD_ENABLED.\nstatic void *orig_free,\n    *orig_realloc;\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n#define ZONE_ARG\n#define PREFIX(name) name\n\nstatic void *orig_libc_free,\n    *orig_libc_realloc;\n\n// We already tried to find ptr to original functions.\nstatic intptr_t origFuncSearched;\n\ninline void InitOrigPointers()\n{\n    // race is OK here, as different threads found same functions\n    if (!origFuncSearched) {\n        orig_free = dlsym(RTLD_NEXT, \"free\");\n        orig_realloc = dlsym(RTLD_NEXT, \"realloc\");\n        orig_msize = dlsym(RTLD_NEXT, \"malloc_usable_size\");\n        orig_libc_free = dlsym(RTLD_NEXT, \"__libc_free\");\n        orig_libc_realloc = dlsym(RTLD_NEXT, \"__libc_realloc\");\n\n        FencedStore(origFuncSearched, 1);\n    }\n}\n\n/*** replacements for malloc and the family ***/\nextern \"C\" {\n#elif MALLOC_ZONE_OVERLOAD_ENABLED\n\n// each impl_* function has such 1st argument, it's unused\n#define ZONE_ARG struct _malloc_zone_t *,\n#define PREFIX(name) impl_##name\n// not interested in original functions for zone overload\ninline void InitOrigPointers() {}\n\n#endif // MALLOC_UNIXLIKE_OVERLOAD_ENABLED and MALLOC_ZONE_OVERLOAD_ENABLED\n\nvoid *PREFIX(malloc)(ZONE_ARG size_t size) __THROW\n{\n    return scalable_malloc(size);\n}\n\nvoid *PREFIX(calloc)(ZONE_ARG size_t num, size_t size) __THROW\n{\n    return scalable_calloc(num, size);\n}\n\nvoid PREFIX(free)(ZONE_ARG void *object) __THROW\n{\n    InitOrigPointers();\n    __TBB_malloc_safer_free(object, (void (*)(void*))orig_free);\n}\n\nvoid *PREFIX(realloc)(ZONE_ARG void* ptr, size_t sz) __THROW\n{\n    InitOrigPointers();\n    return __TBB_malloc_safer_realloc(ptr, sz, orig_realloc);\n}\n\n/* The older *NIX interface for aligned allocations;\n   it's formally substituted by posix_memalign and deprecated,\n   so we do not expect it to cause cyclic dependency with C RTL. */\nvoid *PREFIX(memalign)(ZONE_ARG size_t alignment, size_t size) __THROW\n{\n    return scalable_aligned_malloc(size, alignment);\n}\n\n/* valloc allocates memory aligned on a page boundary */\nvoid *PREFIX(valloc)(ZONE_ARG size_t size) __THROW\n{\n    if (! memoryPageSize) initPageSize();\n\n    return scalable_aligned_malloc(size, memoryPageSize);\n}\n\n#undef ZONE_ARG\n#undef PREFIX\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n\n// match prototype from system headers\n#if __ANDROID__\nsize_t malloc_usable_size(const void *ptr) __THROW\n#else\nsize_t malloc_usable_size(void *ptr) __THROW\n#endif\n{\n    InitOrigPointers();\n    return __TBB_malloc_safer_msize(const_cast<void*>(ptr), (size_t (*)(void*))orig_msize);\n}\n\nint posix_memalign(void **memptr, size_t alignment, size_t size) __THROW\n{\n    return scalable_posix_memalign(memptr, alignment, size);\n}\n\n/* pvalloc allocates smallest set of complete pages which can hold\n   the requested number of bytes. Result is aligned on page boundary. */\nvoid *pvalloc(size_t size) __THROW\n{\n    if (! memoryPageSize) initPageSize();\n    // align size up to the page size,\n    // pvalloc(0) returns 1 page, see man libmpatrol\n    size = size? ((size-1) | (memoryPageSize-1)) + 1 : memoryPageSize;\n\n    return scalable_aligned_malloc(size, memoryPageSize);\n}\n\nint mallopt(int /*param*/, int /*value*/) __THROW\n{\n    return 1;\n}\n\nstruct mallinfo mallinfo() __THROW\n{\n    struct mallinfo m;\n    memset(&m, 0, sizeof(struct mallinfo));\n\n    return m;\n}\n\n#if __ANDROID__\n// Android doesn't have malloc_usable_size, provide it to be compatible\n// with Linux, in addition overload dlmalloc_usable_size() that presented\n// under Android.\nsize_t dlmalloc_usable_size(const void *ptr) __attribute__ ((alias (\"malloc_usable_size\")));\n#else // __ANDROID__\n// C11 function, supported starting GLIBC 2.16\nvoid *aligned_alloc(size_t alignment, size_t size) __attribute__ ((alias (\"memalign\")));\n// Those non-standard functions are exported by GLIBC, and might be used\n// in conjunction with standard malloc/free, so we must ovberload them.\n// Bionic doesn't have them. Not removing from the linker scripts,\n// as absent entry points are ignored by the linker.\nvoid *__libc_malloc(size_t size) __attribute__ ((alias (\"malloc\")));\nvoid *__libc_calloc(size_t num, size_t size) __attribute__ ((alias (\"calloc\")));\nvoid *__libc_memalign(size_t alignment, size_t size) __attribute__ ((alias (\"memalign\")));\nvoid *__libc_pvalloc(size_t size) __attribute__ ((alias (\"pvalloc\")));\nvoid *__libc_valloc(size_t size) __attribute__ ((alias (\"valloc\")));\n\n// call original __libc_* to support naive replacement of free via __libc_free etc\nvoid __libc_free(void *ptr)\n{\n    InitOrigPointers();\n    __TBB_malloc_safer_free(ptr, (void (*)(void*))orig_libc_free);\n}\n\nvoid *__libc_realloc(void *ptr, size_t size)\n{\n    InitOrigPointers();\n    return __TBB_malloc_safer_realloc(ptr, size, orig_libc_realloc);\n}\n#endif // !__ANDROID__\n\n} /* extern \"C\" */\n\n/*** replacements for global operators new and delete ***/\n\n#include <new>\n\nvoid* operator new(size_t sz) __TBB_THROW_BAD_ALLOC {\n    void *res = scalable_malloc(sz);\n#if TBB_USE_EXCEPTIONS\n    if (NULL == res)\n        throw std::bad_alloc();\n#endif /* TBB_USE_EXCEPTIONS */\n    return res;\n}\nvoid* operator new[](size_t sz) __TBB_THROW_BAD_ALLOC {\n    void *res = scalable_malloc(sz);\n#if TBB_USE_EXCEPTIONS\n    if (NULL == res)\n        throw std::bad_alloc();\n#endif /* TBB_USE_EXCEPTIONS */\n    return res;\n}\nvoid operator delete(void* ptr) __TBB_NO_THROW {\n    InitOrigPointers();\n    __TBB_malloc_safer_free(ptr, (void (*)(void*))orig_free);\n}\nvoid operator delete[](void* ptr) __TBB_NO_THROW {\n    InitOrigPointers();\n    __TBB_malloc_safer_free(ptr, (void (*)(void*))orig_free);\n}\nvoid* operator new(size_t sz, const std::nothrow_t&) __TBB_NO_THROW {\n    return scalable_malloc(sz);\n}\nvoid* operator new[](std::size_t sz, const std::nothrow_t&) __TBB_NO_THROW {\n    return scalable_malloc(sz);\n}\nvoid operator delete(void* ptr, const std::nothrow_t&) __TBB_NO_THROW {\n    InitOrigPointers();\n    __TBB_malloc_safer_free(ptr, (void (*)(void*))orig_free);\n}\nvoid operator delete[](void* ptr, const std::nothrow_t&) __TBB_NO_THROW {\n    InitOrigPointers();\n    __TBB_malloc_safer_free(ptr, (void (*)(void*))orig_free);\n}\n\n#endif /* MALLOC_UNIXLIKE_OVERLOAD_ENABLED */\n#endif /* MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED */\n\n\n#ifdef _WIN32\n#include <windows.h>\n\n#if !__TBB_WIN8UI_SUPPORT\n\n#include <stdio.h>\n#include \"tbb_function_replacement.h\"\n#include \"shared_utils.h\"\n\nvoid __TBB_malloc_safer_delete( void *ptr)\n{\n    __TBB_malloc_safer_free( ptr, NULL );\n}\n\nvoid* safer_aligned_malloc( size_t size, size_t alignment )\n{\n    // workaround for \"is power of 2 pow N\" bug that accepts zeros\n    return scalable_aligned_malloc( size, alignment>sizeof(size_t*)?alignment:sizeof(size_t*) );\n}\n\n// we do not support _expand();\nvoid* safer_expand( void *, size_t )\n{\n    return NULL;\n}\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(CRTLIB)                                             \\\nvoid (*orig_free_##CRTLIB)(void*);                                                                   \\\nvoid __TBB_malloc_safer_free_##CRTLIB(void *ptr)                                                     \\\n{                                                                                                    \\\n    __TBB_malloc_safer_free( ptr, orig_free_##CRTLIB );                                              \\\n}                                                                                                    \\\n                                                                                                     \\\nvoid (*orig__aligned_free_##CRTLIB)(void*);                                                          \\\nvoid __TBB_malloc_safer__aligned_free_##CRTLIB(void *ptr)                                            \\\n{                                                                                                    \\\n    __TBB_malloc_safer_free( ptr, orig__aligned_free_##CRTLIB );                                     \\\n}                                                                                                    \\\n                                                                                                     \\\nsize_t (*orig__msize_##CRTLIB)(void*);                                                               \\\nsize_t __TBB_malloc_safer__msize_##CRTLIB(void *ptr)                                                 \\\n{                                                                                                    \\\n    return __TBB_malloc_safer_msize( ptr, orig__msize_##CRTLIB );                                    \\\n}                                                                                                    \\\n                                                                                                     \\\nsize_t (*orig__aligned_msize_##CRTLIB)(void*, size_t, size_t);                                       \\\nsize_t __TBB_malloc_safer__aligned_msize_##CRTLIB( void *ptr, size_t alignment, size_t offset)       \\\n{                                                                                                    \\\n    return __TBB_malloc_safer_aligned_msize( ptr, alignment, offset, orig__aligned_msize_##CRTLIB ); \\\n}                                                                                                    \\\n                                                                                                     \\\nvoid* __TBB_malloc_safer_realloc_##CRTLIB( void *ptr, size_t size )                                  \\\n{                                                                                                    \\\n    orig_ptrs func_ptrs = {orig_free_##CRTLIB, orig__msize_##CRTLIB};                                \\\n    return __TBB_malloc_safer_realloc( ptr, size, &func_ptrs );                                      \\\n}                                                                                                    \\\n                                                                                                     \\\nvoid* __TBB_malloc_safer__aligned_realloc_##CRTLIB( void *ptr, size_t size, size_t aligment )        \\\n{                                                                                                    \\\n    orig_aligned_ptrs func_ptrs = {orig__aligned_free_##CRTLIB, orig__aligned_msize_##CRTLIB};       \\\n    return __TBB_malloc_safer_aligned_realloc( ptr, size, aligment, &func_ptrs );                    \\\n}\n\n// Only for ucrtbase: substitution for _o_free\nvoid (*orig__o_free)(void*);\nvoid __TBB_malloc__o_free(void *ptr)\n{\n    __TBB_malloc_safer_free( ptr, orig__o_free );\n}\n// Only for ucrtbase: substitution for _free_base\nvoid(*orig__free_base)(void*);\nvoid __TBB_malloc__free_base(void *ptr)\n{\n    __TBB_malloc_safer_free(ptr, orig__free_base);\n}\n\n// Size limit is MAX_PATTERN_SIZE (28) byte codes / 56 symbols per line.\n// * can be used to match any digit in byte codes.\n// # followed by several * indicate a relative address that needs to be corrected.\n// Purpose of the pattern is to mark an instruction bound; it should consist of several\n// full instructions plus one extra byte code. It's not required for the patterns\n// to be unique (i.e., it's OK to have same pattern for unrelated functions).\n// TODO: use hot patch prologues if exist\nconst char* known_bytecodes[] = {\n#if _WIN64\n//  \"========================================================\" - 56 symbols\n    \"4883EC284885C974\",       // release free()\n    \"4883EC284885C975\",       // release _msize()\n    \"4885C974375348\",         // release free() 8.0.50727.42, 10.0\n    \"E907000000CCCC\",         // release _aligned_msize(), _aligned_free() ucrtbase.dll\n    \"C7442410000000008B\",     // release free() ucrtbase.dll 10.0.14393.33\n    \"E90B000000CCCC\",         // release _msize() ucrtbase.dll 10.0.14393.33\n    \"48895C24085748\",         // release _aligned_msize() ucrtbase.dll 10.0.14393.33\n    \"E903000000CCCC\",         // release _aligned_msize() ucrtbase.dll 10.0.16299.522\n    \"48894C24084883EC28BA\",   // debug prologue\n    \"4C894424184889542410\",   // debug _aligned_msize() 10.0\n    \"48894C24084883EC2848\",   // debug _aligned_free 10.0\n    \"488BD1488D0D#*******E9\", // _o_free(), ucrtbase.dll\n #if __TBB_OVERLOAD_OLD_MSVCR\n    \"48895C2408574883EC3049\", // release _aligned_msize 9.0\n    \"4883EC384885C975\",       // release _msize() 9.0\n    \"4C8BC1488B0DA6E4040033\", // an old win64 SDK\n #endif\n#else // _WIN32\n//  \"========================================================\" - 56 symbols\n    \"8BFF558BEC8B\",           // multiple\n    \"8BFF558BEC83\",           // release free() & _msize() 10.0.40219.325, _msize() ucrtbase.dll\n    \"8BFF558BECFF\",           // release _aligned_msize ucrtbase.dll\n    \"8BFF558BEC51\",           // release free() & _msize() ucrtbase.dll 10.0.14393.33\n    \"558BEC8B450885C074\",     // release _aligned_free 11.0\n    \"558BEC837D08000F\",       // release _msize() 11.0.51106.1\n    \"558BEC837D08007419FF\",   // release free() 11.0.50727.1\n    \"558BEC8B450885C075\",     // release _aligned_msize() 11.0.50727.1\n    \"558BEC6A018B\",           // debug free() & _msize() 11.0\n    \"558BEC8B451050\",         // debug _aligned_msize() 11.0\n    \"558BEC8B450850\",         // debug _aligned_free 11.0\n    \"8BFF558BEC6A\",           // debug free() & _msize() 10.0.40219.325\n #if __TBB_OVERLOAD_OLD_MSVCR\n    \"6A1868********E8\",       // release free() 8.0.50727.4053, 9.0\n    \"6A1C68********E8\",       // release _msize() 8.0.50727.4053, 9.0\n #endif\n#endif // _WIN64/_WIN32\n    NULL\n    };\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,function_name,dbgsuffix) \\\n    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix \".dll\", #function_name, \\\n      (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbgsuffix, \\\n      known_bytecodes, (FUNCPTR*)&orig_##function_name##_##CRT_VER##dbgsuffix );\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,function_name,dbgsuffix) \\\n    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix \".dll\", #function_name, \\\n      (FUNCPTR)__TBB_malloc_safer_##function_name##_##CRT_VER##dbgsuffix, 0, NULL );\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_REDIRECT(CRT_VER,function_name,dest_func,dbgsuffix) \\\n    ReplaceFunctionWithStore( #CRT_VER #dbgsuffix \".dll\", #function_name, \\\n      (FUNCPTR)__TBB_malloc_safer_##dest_func##_##CRT_VER##dbgsuffix, 0, NULL );\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,dbgsuffix)                             \\\n    if (BytecodesAreKnown(#CRT_VER #dbgsuffix \".dll\")) {                                          \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,free,dbgsuffix)                         \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_msize,dbgsuffix)                       \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,realloc,dbgsuffix)          \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_aligned_free,dbgsuffix)                \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY(CRT_VER,_aligned_msize,dbgsuffix)               \\\n      __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_ENTRY_NO_FALLBACK(CRT_VER,_aligned_realloc,dbgsuffix) \\\n    } else                                                                                        \\\n        SkipReplacement(#CRT_VER #dbgsuffix \".dll\");\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(CRT_VER) __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,)\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_DEBUG(CRT_VER) __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_IMPL(CRT_VER,d)\n\n#define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(CRT_VER)     \\\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(CRT_VER) \\\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_DEBUG(CRT_VER)\n\n#if __TBB_OVERLOAD_OLD_MSVCR\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr70d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr70);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr71d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr71);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90);\n#endif\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr110d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr110);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr120d);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr120);\n__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(ucrtbase);\n\n\n/*** replacements for global operators new and delete ***/\n\n#include <new>\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( push )\n#pragma warning( disable : 4290 )\n#endif\n\nvoid * operator_new(size_t sz) __TBB_THROW_BAD_ALLOC {\n    void *res = scalable_malloc(sz);\n    if (NULL == res) throw std::bad_alloc();\n    return res;\n}\nvoid* operator_new_arr(size_t sz) __TBB_THROW_BAD_ALLOC {\n    void *res = scalable_malloc(sz);\n    if (NULL == res) throw std::bad_alloc();\n    return res;\n}\nvoid operator_delete(void* ptr) __TBB_NO_THROW {\n    __TBB_malloc_safer_delete(ptr);\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif\n\nvoid operator_delete_arr(void* ptr) __TBB_NO_THROW {\n    __TBB_malloc_safer_delete(ptr);\n}\nvoid* operator_new_t(size_t sz, const std::nothrow_t&) __TBB_NO_THROW {\n    return scalable_malloc(sz);\n}\nvoid* operator_new_arr_t(std::size_t sz, const std::nothrow_t&) __TBB_NO_THROW {\n    return scalable_malloc(sz);\n}\nvoid operator_delete_t(void* ptr, const std::nothrow_t&) __TBB_NO_THROW {\n    __TBB_malloc_safer_delete(ptr);\n}\nvoid operator_delete_arr_t(void* ptr, const std::nothrow_t&) __TBB_NO_THROW {\n    __TBB_malloc_safer_delete(ptr);\n}\n\nstruct Module {\n    const char *name;\n    bool        doFuncReplacement; // do replacement in the DLL\n};\n\nModule modules_to_replace[] = {\n    {\"msvcr100d.dll\", true},\n    {\"msvcr100.dll\", true},\n    {\"msvcr110d.dll\", true},\n    {\"msvcr110.dll\", true},\n    {\"msvcr120d.dll\", true},\n    {\"msvcr120.dll\", true},\n    {\"ucrtbase.dll\", true},\n//    \"ucrtbased.dll\" is not supported because of problems with _dbg functions\n#if __TBB_OVERLOAD_OLD_MSVCR\n    {\"msvcr90d.dll\", true},\n    {\"msvcr90.dll\", true},\n    {\"msvcr80d.dll\", true},\n    {\"msvcr80.dll\", true},\n    {\"msvcr70d.dll\", true},\n    {\"msvcr70.dll\", true},\n    {\"msvcr71d.dll\", true},\n    {\"msvcr71.dll\", true},\n#endif\n#if __TBB_TODO\n    // TODO: Try enabling replacement for non-versioned system binaries below\n    {\"msvcrtd.dll\", true},\n    {\"msvcrt.dll\", true},\n#endif\n    };\n\n/*\nWe need to replace following functions:\nmalloc\ncalloc\n_aligned_malloc\n_expand (by dummy implementation)\n??2@YAPAXI@Z      operator new                         (ia32)\n??_U@YAPAXI@Z     void * operator new[] (size_t size)  (ia32)\n??3@YAXPAX@Z      operator delete                      (ia32)\n??_V@YAXPAX@Z     operator delete[]                    (ia32)\n??2@YAPEAX_K@Z    void * operator new(unsigned __int64)   (intel64)\n??_V@YAXPEAX@Z    void * operator new[](unsigned __int64) (intel64)\n??3@YAXPEAX@Z     operator delete                         (intel64)\n??_V@YAXPEAX@Z    operator delete[]                       (intel64)\n??2@YAPAXIABUnothrow_t@std@@@Z      void * operator new (size_t sz, const std::nothrow_t&) throw()  (optional)\n??_U@YAPAXIABUnothrow_t@std@@@Z     void * operator new[] (size_t sz, const std::nothrow_t&) throw() (optional)\n\nand these functions have runtime-specific replacement:\nrealloc\nfree\n_msize\n_aligned_realloc\n_aligned_free\n_aligned_msize\n*/\n\ntypedef struct FRData_t {\n    //char *_module;\n    const char *_func;\n    FUNCPTR _fptr;\n    FRR_ON_ERROR _on_error;\n} FRDATA;\n\nFRDATA c_routines_to_replace[] = {\n    { \"malloc\",  (FUNCPTR)scalable_malloc, FRR_FAIL },\n    { \"calloc\",  (FUNCPTR)scalable_calloc, FRR_FAIL },\n    { \"_aligned_malloc\",  (FUNCPTR)safer_aligned_malloc, FRR_FAIL },\n    { \"_expand\",  (FUNCPTR)safer_expand, FRR_IGNORE },\n};\n\nFRDATA cxx_routines_to_replace[] = {\n#if _WIN64\n    { \"??2@YAPEAX_K@Z\", (FUNCPTR)operator_new, FRR_FAIL },\n    { \"??_U@YAPEAX_K@Z\", (FUNCPTR)operator_new_arr, FRR_FAIL },\n    { \"??3@YAXPEAX@Z\", (FUNCPTR)operator_delete, FRR_FAIL },\n    { \"??_V@YAXPEAX@Z\", (FUNCPTR)operator_delete_arr, FRR_FAIL },\n#else\n    { \"??2@YAPAXI@Z\", (FUNCPTR)operator_new, FRR_FAIL },\n    { \"??_U@YAPAXI@Z\", (FUNCPTR)operator_new_arr, FRR_FAIL },\n    { \"??3@YAXPAX@Z\", (FUNCPTR)operator_delete, FRR_FAIL },\n    { \"??_V@YAXPAX@Z\", (FUNCPTR)operator_delete_arr, FRR_FAIL },\n#endif\n    { \"??2@YAPAXIABUnothrow_t@std@@@Z\", (FUNCPTR)operator_new_t, FRR_IGNORE },\n    { \"??_U@YAPAXIABUnothrow_t@std@@@Z\", (FUNCPTR)operator_new_arr_t, FRR_IGNORE }\n};\n\n#ifndef UNICODE\ntypedef char unicode_char_t;\n#define WCHAR_SPEC \"%s\"\n#else\ntypedef wchar_t unicode_char_t;\n#define WCHAR_SPEC \"%ls\"\n#endif\n\n// Check that we recognize bytecodes that should be replaced by trampolines.\n// If some functions have unknown prologue patterns, replacement should not be done.\nbool BytecodesAreKnown(const unicode_char_t *dllName)\n{\n    const char *funcName[] = {\"free\", \"_msize\", \"_aligned_free\", \"_aligned_msize\", 0};\n    HMODULE module = GetModuleHandle(dllName);\n\n    if (!module)\n        return false;\n    for (int i=0; funcName[i]; i++)\n        if (! IsPrologueKnown(module, funcName[i], known_bytecodes)) {\n            fprintf(stderr, \"TBBmalloc: skip allocation functions replacement in \" WCHAR_SPEC\n                    \": unknown prologue for function \" WCHAR_SPEC \"\\n\", dllName, funcName[i]);\n            return false;\n        }\n    return true;\n}\n\nvoid SkipReplacement(const unicode_char_t *dllName)\n{\n#ifndef UNICODE\n    const char *dllStr = dllName;\n#else\n    const size_t sz = 128; // all DLL name must fit\n\n    char buffer[sz];\n    size_t real_sz;\n    char *dllStr = buffer;\n\n    errno_t ret = wcstombs_s(&real_sz, dllStr, sz, dllName, sz-1);\n    __TBB_ASSERT(!ret, \"Dll name conversion failed\")\n#endif\n\n    for (size_t i=0; i<arrayLength(modules_to_replace); i++)\n        if (!strcmp(modules_to_replace[i].name, dllStr)) {\n            modules_to_replace[i].doFuncReplacement = false;\n            break;\n        }\n}\n\nvoid ReplaceFunctionWithStore( const unicode_char_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc,  FRR_ON_ERROR on_error = FRR_FAIL )\n{\n    FRR_TYPE res = ReplaceFunction( dllName, funcName, newFunc, opcodes, origFunc );\n\n    if (res == FRR_OK || res == FRR_NODLL || (res == FRR_NOFUNC && on_error == FRR_IGNORE))\n        return;\n\n    fprintf(stderr, \"Failed to %s function %s in module %s\\n\",\n            res==FRR_NOFUNC? \"find\" : \"replace\", funcName, dllName);\n    exit(1);\n}\n\nvoid doMallocReplacement()\n{\n    // Replace functions and keep backup of original code (separate for each runtime)\n#if __TBB_OVERLOAD_OLD_MSVCR\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr70)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr71)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr80)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr90)\n#endif\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr100)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr110)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr120)\n    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL_RELEASE(ucrtbase)\n\n    // Replace functions without storing original code\n    for (size_t j = 0; j < arrayLength(modules_to_replace); j++) {\n        if (!modules_to_replace[j].doFuncReplacement)\n            continue;\n        for (size_t i = 0; i < arrayLength(c_routines_to_replace); i++)\n        {\n            ReplaceFunctionWithStore( modules_to_replace[j].name, c_routines_to_replace[i]._func, c_routines_to_replace[i]._fptr, NULL, NULL,  c_routines_to_replace[i]._on_error );\n        }\n        if ( strcmp(modules_to_replace[j].name, \"ucrtbase.dll\") == 0 ) {\n            // If _o_free function is present and patchable, redirect it to tbbmalloc as well\n            // This prevents issues with other _o_* functions which might allocate memory with malloc\n            if ( IsPrologueKnown(GetModuleHandle(\"ucrtbase.dll\"), \"_o_free\", known_bytecodes) ) {\n                ReplaceFunctionWithStore( \"ucrtbase.dll\", \"_o_free\", (FUNCPTR)__TBB_malloc__o_free, known_bytecodes, (FUNCPTR*)&orig__o_free,  FRR_FAIL );\n            }\n            // Similarly for _free_base\n            if (IsPrologueKnown(GetModuleHandle(\"ucrtbase.dll\"), \"_free_base\", known_bytecodes)) {\n                ReplaceFunctionWithStore(\"ucrtbase.dll\", \"_free_base\", (FUNCPTR)__TBB_malloc__free_base, known_bytecodes, (FUNCPTR*)&orig__free_base, FRR_FAIL);\n            }\n            // ucrtbase.dll does not export operator new/delete, so skip the rest of the loop.\n            continue;\n        }\n\n        for (size_t i = 0; i < arrayLength(cxx_routines_to_replace); i++)\n        {\n#if !_WIN64\n            // in Microsoft* Visual Studio* 2012 and 2013 32-bit operator delete consists of 2 bytes only: short jump to free(ptr);\n            // replacement should be skipped for this particular case.\n            if ( ((strcmp(modules_to_replace[j].name, \"msvcr110.dll\") == 0) || (strcmp(modules_to_replace[j].name, \"msvcr120.dll\") == 0)) && (strcmp(cxx_routines_to_replace[i]._func, \"??3@YAXPAX@Z\") == 0) ) continue;\n            // in Microsoft* Visual Studio* 2013 32-bit operator delete[] consists of 2 bytes only: short jump to free(ptr);\n            // replacement should be skipped for this particular case.\n            if ( (strcmp(modules_to_replace[j].name, \"msvcr120.dll\") == 0) && (strcmp(cxx_routines_to_replace[i]._func, \"??_V@YAXPAX@Z\") == 0) ) continue;\n#endif\n            ReplaceFunctionWithStore( modules_to_replace[j].name, cxx_routines_to_replace[i]._func, cxx_routines_to_replace[i]._fptr, NULL, NULL,  cxx_routines_to_replace[i]._on_error );\n        }\n    }\n}\n\n#endif // !__TBB_WIN8UI_SUPPORT\n\nextern \"C\" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID reserved )\n{\n\n    if ( callReason==DLL_PROCESS_ATTACH && reserved && hInst ) {\n#if !__TBB_WIN8UI_SUPPORT\n#if TBBMALLOC_USE_TBB_FOR_ALLOCATOR_ENV_CONTROLLED\n        char pinEnvVariable[50];\n        if( GetEnvironmentVariable(\"TBBMALLOC_USE_TBB_FOR_ALLOCATOR\", pinEnvVariable, 50))\n        {\n            doMallocReplacement();\n        }\n#else\n        doMallocReplacement();\n#endif\n#endif // !__TBB_WIN8UI_SUPPORT\n    }\n\n    return TRUE;\n}\n\n// Just to make the linker happy and link the DLL to the application\nextern \"C\" __declspec(dllexport) void __TBB_malloc_proxy()\n{\n\n}\n\n#endif //_WIN32\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/proxy.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_malloc_proxy_H_\n#define _TBB_malloc_proxy_H_\n\n#define MALLOC_UNIXLIKE_OVERLOAD_ENABLED __linux__\n#define MALLOC_ZONE_OVERLOAD_ENABLED __APPLE__\n\n// MALLOC_UNIXLIKE_OVERLOAD_ENABLED depends on MALLOC_CHECK_RECURSION stuff\n// TODO: limit MALLOC_CHECK_RECURSION to *_OVERLOAD_ENABLED only\n#if __linux__ || __APPLE__ || __sun || __FreeBSD__ || MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n#define MALLOC_CHECK_RECURSION 1\n#endif\n\n#include <stddef.h>\n\nextern \"C\" {\n    void * scalable_malloc(size_t size);\n    void * scalable_calloc(size_t nobj, size_t size);\n    void   scalable_free(void *ptr);\n    void * scalable_realloc(void* ptr, size_t size);\n    void * scalable_aligned_malloc(size_t size, size_t alignment);\n    void * scalable_aligned_realloc(void* ptr, size_t size, size_t alignment);\n    int    scalable_posix_memalign(void **memptr, size_t alignment, size_t size);\n    size_t scalable_msize(void *ptr);\n    void   __TBB_malloc_safer_free( void *ptr, void (*original_free)(void*));\n    void * __TBB_malloc_safer_realloc( void *ptr, size_t, void* );\n    void * __TBB_malloc_safer_aligned_realloc( void *ptr, size_t, size_t, void* );\n    size_t __TBB_malloc_safer_msize( void *ptr, size_t (*orig_msize_crt80d)(void*));\n    size_t __TBB_malloc_safer_aligned_msize( void *ptr, size_t, size_t, size_t (*orig_msize_crt80d)(void*,size_t,size_t));\n\n#if MALLOC_ZONE_OVERLOAD_ENABLED\n    void   __TBB_malloc_free_definite_size(void *object, size_t size);\n#endif\n} // extern \"C\"\n\n// Struct with original free() and _msize() pointers\nstruct orig_ptrs {\n    void   (*free) (void*);\n    size_t (*msize)(void*);\n};\n\nstruct orig_aligned_ptrs {\n    void   (*aligned_free) (void*);\n    size_t (*aligned_msize)(void*,size_t,size_t);\n};\n\n#endif /* _TBB_malloc_proxy_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/proxy_overload_osx.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// The original source for this code is\n// Copyright (c) 2011, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <AvailabilityMacros.h>\n#include <malloc/malloc.h>\n#include <mach/mach.h>\n#include <stdlib.h>\n\nstatic kern_return_t enumerator(task_t, void *, unsigned, vm_address_t,\n                                memory_reader_t, vm_range_recorder_t)\n{\n    return KERN_FAILURE;\n}\n\nstatic size_t good_size(malloc_zone_t *, size_t size)\n{\n    return size;\n}\n\nstatic boolean_t zone_check(malloc_zone_t *) /* Consistency checker */\n{\n    return true;\n}\n\nstatic void zone_print(malloc_zone_t *, boolean_t) { }\nstatic void zone_log(malloc_zone_t *, void *) {}\nstatic void zone_force_lock(malloc_zone_t *) {}\nstatic void zone_force_unlock(malloc_zone_t *) {}\n\nstatic void zone_statistics(malloc_zone_t *, malloc_statistics_t *s)\n{\n    s->blocks_in_use = 0;\n    s->size_in_use = s->max_size_in_use = s->size_allocated = 0;\n}\n\nstatic boolean_t zone_locked(malloc_zone_t *)\n{\n    return false;\n}\n\nstatic boolean_t impl_zone_enable_discharge_checking(malloc_zone_t *)\n{\n    return false;\n}\n\nstatic void impl_zone_disable_discharge_checking(malloc_zone_t *) {}\nstatic void impl_zone_discharge(malloc_zone_t *, void *) {}\nstatic void impl_zone_destroy(struct _malloc_zone_t *) {}\n\n/* note: impl_malloc_usable_size() is called for each free() call, so it must be fast */\nstatic size_t impl_malloc_usable_size(struct _malloc_zone_t *, const void *ptr)\n{\n    // malloc_usable_size() is used by macOS* to recognize which memory manager\n    // allocated the address, so our wrapper must not redirect to the original function.\n    return __TBB_malloc_safer_msize(const_cast<void*>(ptr), NULL);\n}\n\nstatic void *impl_malloc(struct _malloc_zone_t *, size_t size);\nstatic void *impl_calloc(struct _malloc_zone_t *, size_t num_items, size_t size);\nstatic void *impl_valloc(struct _malloc_zone_t *, size_t size);\nstatic void impl_free(struct _malloc_zone_t *, void *ptr);\nstatic void *impl_realloc(struct _malloc_zone_t *, void *ptr, size_t size);\nstatic void *impl_memalign(struct _malloc_zone_t *, size_t alignment, size_t size);\n\n/* ptr is in zone and have reported size */\nstatic void impl_free_definite_size(struct _malloc_zone_t*, void *ptr, size_t size)\n{\n    __TBB_malloc_free_definite_size(ptr, size);\n}\n\n/* Empty out caches in the face of memory pressure. */\nstatic size_t impl_pressure_relief(struct _malloc_zone_t *, size_t goal)\n{\n    return 0;\n}\n\nstatic malloc_zone_t *system_zone = NULL;\n\nstruct DoMallocReplacement {\n    DoMallocReplacement() {\n        static malloc_introspection_t introspect;\n        memset(&introspect, 0, sizeof(malloc_introspection_t));\n        static malloc_zone_t zone;\n        memset(&zone, 0, sizeof(malloc_zone_t));\n\n        introspect.enumerator = &enumerator;\n        introspect.good_size = &good_size;\n        introspect.check = &zone_check;\n        introspect.print = &zone_print;\n        introspect.log = zone_log;\n        introspect.force_lock = &zone_force_lock;\n        introspect.force_unlock = &zone_force_unlock;\n        introspect.statistics = zone_statistics;\n        introspect.zone_locked = &zone_locked;\n        introspect.enable_discharge_checking = &impl_zone_enable_discharge_checking;\n        introspect.disable_discharge_checking = &impl_zone_disable_discharge_checking;\n        introspect.discharge = &impl_zone_discharge;\n\n        zone.size = &impl_malloc_usable_size;\n        zone.malloc = &impl_malloc;\n        zone.calloc = &impl_calloc;\n        zone.valloc = &impl_valloc;\n        zone.free = &impl_free;\n        zone.realloc = &impl_realloc;\n        zone.destroy = &impl_zone_destroy;\n        zone.zone_name = \"tbbmalloc\";\n        zone.introspect = &introspect;\n        zone.version = 8;\n        zone.memalign = impl_memalign;\n        zone.free_definite_size = &impl_free_definite_size;\n        zone.pressure_relief = &impl_pressure_relief;\n\n        // make sure that default purgeable zone is initialized\n        malloc_default_purgeable_zone();\n        void* ptr = malloc(1);\n        // get all registered memory zones\n        unsigned zcount = 0;\n        malloc_zone_t** zone_array = NULL;\n        kern_return_t errorcode = malloc_get_all_zones(mach_task_self(),NULL,(vm_address_t**)&zone_array,&zcount);\n        if (!errorcode && zone_array && zcount>0) {\n            // find the zone that allocated ptr\n            for (unsigned i=0; i<zcount; ++i) {\n                malloc_zone_t* z = zone_array[i];\n                if (z && z->size(z,ptr)>0) { // the right one is found\n                    system_zone = z;\n                    break;\n                }\n            }\n        }\n        free(ptr);\n\n        malloc_zone_register(&zone);\n        if (system_zone) {\n            // after unregistration of the system zone, the last registered (i.e. our) zone becomes the default\n            malloc_zone_unregister(system_zone);\n            // register the system zone back\n            malloc_zone_register(system_zone);\n        }\n    }\n};\n\nstatic DoMallocReplacement doMallocReplacement;\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/shared_utils.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_shared_utils_H\n#define __TBB_shared_utils_H\n\n// Include files containing declarations of intptr_t and uintptr_t\n#include <stddef.h>  // size_t\n#if _MSC_VER\ntypedef unsigned __int16 uint16_t;\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n #if !UINTPTR_MAX\n  #define UINTPTR_MAX SIZE_MAX\n #endif\n#else // _MSC_VER\n#include <stdint.h>\n#endif\n\n/*\n * Functions to align an integer down or up to the given power of two,\n * and test for such an alignment, and for power of two.\n */\ntemplate<typename T>\nstatic inline T alignDown(T arg, uintptr_t alignment) {\n    return T( (uintptr_t)arg                & ~(alignment-1));\n}\ntemplate<typename T>\nstatic inline T alignUp  (T arg, uintptr_t alignment) {\n    return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));\n    // /*is this better?*/ return (((uintptr_t)arg-1) | (alignment-1)) + 1;\n}\ntemplate<typename T> // works for not power-of-2 alignments\nstatic inline T alignUpGeneric(T arg, uintptr_t alignment) {\n    if (size_t rem = arg % alignment) {\n        arg += alignment - rem;\n    }\n    return arg;\n}\n\ntemplate<typename T, size_t N> // generic function to find length of array\ninline size_t arrayLength(const T(&)[N]) {\n    return N;\n}\n\n#if defined(min)\n#undef min\n#endif\n\ntemplate<typename T>\nT min ( const T& val1, const T& val2 ) {\n    return val1 < val2 ? val1 : val2;\n}\n\n/*\n * Functions to parse files information (system files for example)\n */\n\n#include <stdio.h>\n\n#if defined(_MSC_VER) && (_MSC_VER<1900) && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings that default ctor and assignment\n    // operator cannot be generated and object 'class' can never be instantiated.\n    #pragma warning(push)\n    #pragma warning(disable:4510 4512 4610)\n#endif\n\nstruct parseFileItem {\n    const char* format;\n    unsigned long long& value;\n};\n\n#if defined(_MSC_VER) && (_MSC_VER<1900) && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\ntemplate <int BUF_LINE_SIZE, int N>\nvoid parseFile(const char* file, const parseFileItem (&items)[N]) {\n    // Tries to find all items in each line\n    int found[N] = { 0 };\n    // If all items found, stop forward file reading\n    int numFound = 0;\n    // Line storage\n    char buf[BUF_LINE_SIZE];\n\n    if (FILE *f = fopen(file, \"r\")) {\n        while (numFound < N && fgets(buf, BUF_LINE_SIZE, f)) {\n            for (int i = 0; i < N; ++i) {\n                if (!found[i] && 1 == sscanf(buf, items[i].format, &items[i].value)) {\n                    ++numFound;\n                    found[i] = 1;\n                }\n            }\n        }\n        fclose(f);\n    }\n}\n\nnamespace rml {\nnamespace internal {\n\n/*\n * Best estimate of cache line size, for the purpose of avoiding false sharing.\n * Too high causes memory overhead, too low causes false-sharing overhead.\n * Because, e.g., 32-bit code might run on a 64-bit system with a larger cache line size,\n * it would probably be better to probe at runtime where possible and/or allow for an environment variable override,\n * but currently this is still used for compile-time layout of class Block, so the change is not entirely trivial.\n */\n#if __powerpc64__ || __ppc64__ || __bgp__\nconst uint32_t estimatedCacheLineSize = 128;\n#else\nconst uint32_t estimatedCacheLineSize =  64;\n#endif\n\n} // namespace internal\n} // namespace rml\n\n#endif /* __TBB_shared_utils_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbb_function_replacement.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n#if !__TBB_WIN8UI_SUPPORT && defined(_WIN32)\n\n#define _CRT_SECURE_NO_DEPRECATE 1\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n\n#include <windows.h>\n#include <new>\n#include <stdio.h>\n#include <string.h>\n#include \"tbb_function_replacement.h\"\n\n#include \"tbb/tbb_stddef.h\"\n#include \"../tbb/tbb_assert_impl.h\"\n\ninline UINT_PTR Ptr2Addrint(LPVOID ptr)\n{\n    Int2Ptr i2p;\n    i2p.lpv = ptr;\n    return i2p.uip;\n}\n\ninline LPVOID Addrint2Ptr(UINT_PTR ptr)\n{\n    Int2Ptr i2p;\n    i2p.uip = ptr;\n    return i2p.lpv;\n}\n\n// Is the distance between addr1 and addr2 smaller than dist\ninline bool IsInDistance(UINT_PTR addr1, UINT_PTR addr2, __int64 dist)\n{\n    __int64 diff = addr1>addr2 ? addr1-addr2 : addr2-addr1;\n    return diff<dist;\n}\n\n/*\n * When inserting a probe in 64 bits process the distance between the insertion\n * point and the target may be bigger than 2^32. In this case we are using\n * indirect jump through memory where the offset to this memory location\n * is smaller than 2^32 and it contains the absolute address (8 bytes).\n *\n * This class is used to hold the pages used for the above trampolines.\n * Since this utility will be used to replace malloc functions this implementation\n * doesn't allocate memory dynamically.\n *\n * The struct MemoryBuffer holds the data about a page in the memory used for\n * replacing functions in 64-bit code where the target is too far to be replaced\n * with a short jump. All the calculations of m_base and m_next are in a multiple\n * of SIZE_OF_ADDRESS (which is 8 in Win64).\n */\nclass MemoryProvider {\nprivate:\n    struct MemoryBuffer {\n        UINT_PTR m_base;    // base address of the buffer\n        UINT_PTR m_next;    // next free location in the buffer\n        DWORD    m_size;    // size of buffer\n\n        // Default constructor\n        MemoryBuffer() : m_base(0), m_next(0), m_size(0) {}\n\n        // Constructor\n        MemoryBuffer(void *base, DWORD size)\n        {\n            m_base = Ptr2Addrint(base);\n            m_next = m_base;\n            m_size = size;\n        }\n    };\n\nMemoryBuffer *CreateBuffer(UINT_PTR addr)\n    {\n        // No more room in the pages database\n        if (m_lastBuffer - m_pages == MAX_NUM_BUFFERS)\n            return 0;\n\n        void *newAddr = Addrint2Ptr(addr);\n        // Get information for the region which the given address belongs to\n        MEMORY_BASIC_INFORMATION memInfo;\n        if (VirtualQuery(newAddr, &memInfo, sizeof(memInfo)) != sizeof(memInfo))\n            return 0;\n\n        for(;;) {\n            // The new address to check is beyond the current region and aligned to allocation size\n            newAddr = Addrint2Ptr( (Ptr2Addrint(memInfo.BaseAddress) + memInfo.RegionSize + m_allocSize) & ~(UINT_PTR)(m_allocSize-1) );\n\n            // Check that the address is in the right distance.\n            // VirtualAlloc can only round the address down; so it will remain in the right distance\n            if (!IsInDistance(addr, Ptr2Addrint(newAddr), MAX_DISTANCE))\n                break;\n\n            if (VirtualQuery(newAddr, &memInfo, sizeof(memInfo)) != sizeof(memInfo))\n                break;\n\n            if (memInfo.State == MEM_FREE && memInfo.RegionSize >= m_allocSize)\n            {\n                // Found a free region, try to allocate a page in this region\n                void *newPage = VirtualAlloc(newAddr, m_allocSize, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);\n                if (!newPage)\n                    break;\n\n                // Add the new page to the pages database\n                MemoryBuffer *pBuff = new (m_lastBuffer) MemoryBuffer(newPage, m_allocSize);\n                ++m_lastBuffer;\n                return pBuff;\n            }\n        }\n\n        // Failed to find a buffer in the distance\n        return 0;\n    }\n\npublic:\n    MemoryProvider()\n    {\n        SYSTEM_INFO sysInfo;\n        GetSystemInfo(&sysInfo);\n        m_allocSize = sysInfo.dwAllocationGranularity;\n        m_lastBuffer = &m_pages[0];\n    }\n\n    // We can't free the pages in the destructor because the trampolines\n    // are using these memory locations and a replaced function might be called\n    // after the destructor was called.\n    ~MemoryProvider()\n    {\n    }\n\n    // Return a memory location in distance less than 2^31 from input address\n    UINT_PTR GetLocation(UINT_PTR addr)\n    {\n        MemoryBuffer *pBuff = m_pages;\n        for (; pBuff<m_lastBuffer && IsInDistance(pBuff->m_next, addr, MAX_DISTANCE); ++pBuff)\n        {\n            if (pBuff->m_next < pBuff->m_base + pBuff->m_size)\n            {\n                UINT_PTR loc = pBuff->m_next;\n                pBuff->m_next += MAX_PROBE_SIZE;\n                return loc;\n            }\n        }\n\n        pBuff = CreateBuffer(addr);\n        if(!pBuff)\n            return 0;\n\n        UINT_PTR loc = pBuff->m_next;\n        pBuff->m_next += MAX_PROBE_SIZE;\n        return loc;\n    }\n\nprivate:\n    MemoryBuffer m_pages[MAX_NUM_BUFFERS];\n    MemoryBuffer *m_lastBuffer;\n    DWORD m_allocSize;\n};\n\nstatic MemoryProvider memProvider;\n\n// Compare opcodes from dictionary (str1) and opcodes from code (str2)\n// str1 might contain '*' to mask addresses\n// RETURN: 0 if opcodes did not match, 1 on success\nsize_t compareStrings( const char *str1, const char *str2 )\n{\n   for (size_t i=0; str1[i]!=0; i++){\n       if( str1[i]!='*' && str1[i]!='#' && str1[i]!=str2[i] ) return 0;\n   }\n   return 1;\n}\n\n// Check function prologue with known prologues from the dictionary\n// opcodes - dictionary\n// inpAddr - pointer to function prologue\n// Dictionary contains opcodes for several full asm instructions\n// + one opcode byte for the next asm instruction for safe address processing\n// RETURN: 1 + the index of the matched pattern, or 0 if no match found.\nstatic UINT CheckOpcodes( const char ** opcodes, void *inpAddr, bool abortOnError )\n{\n    static size_t opcodesStringsCount = 0;\n    static size_t maxOpcodesLength = 0;\n    static size_t opcodes_pointer = (size_t)opcodes;\n    char opcodeString[2*MAX_PATTERN_SIZE+1];\n    size_t i;\n    size_t result;\n\n    // Get the values for static variables\n    // max length and number of patterns\n    if( !opcodesStringsCount || opcodes_pointer != (size_t)opcodes ){\n        while( *(opcodes + opcodesStringsCount)!= NULL ){\n            if( (i=strlen(*(opcodes + opcodesStringsCount))) > maxOpcodesLength )\n                maxOpcodesLength = i;\n            opcodesStringsCount++;\n        }\n        opcodes_pointer = (size_t)opcodes;\n        __TBB_ASSERT( maxOpcodesLength/2 <= MAX_PATTERN_SIZE, \"Pattern exceeded the limit of 28 opcodes/56 symbols\" );\n    }\n\n    // Translate prologue opcodes to string format to compare\n    for( i=0; i<maxOpcodesLength/2 && i<MAX_PATTERN_SIZE; ++i ){\n        sprintf( opcodeString + 2*i, \"%.2X\", *((unsigned char*)inpAddr+i) );\n    }\n    opcodeString[2*i] = 0;\n\n    // Compare translated opcodes with patterns\n    for( UINT idx=0; idx<opcodesStringsCount; ++idx ){\n        result = compareStrings( opcodes[idx],opcodeString );\n        if( result )\n            return idx+1; // avoid 0 which indicates a failure\n    }\n    if (abortOnError) {\n        // Impossibility to find opcodes in the dictionary is a serious issue,\n        // as if we unable to call original function, leak or crash is expected result.\n        __TBB_ASSERT_RELEASE( false, \"CheckOpcodes failed\" );\n    }\n    return 0;\n}\n\n// Modify offsets in original code after moving it to a trampoline.\n// We do not have more than one offset to correct in existing opcode patterns.\nstatic void CorrectOffset( UINT_PTR address, const char* pattern, UINT distance )\n{\n    const char* pos = strstr(pattern, \"#*******\");\n    if( pos ) {\n        address += (pos - pattern)/2; // compute the offset position\n        UINT value;\n        // UINT assignment is not used to avoid potential alignment issues\n        memcpy(&value, Addrint2Ptr(address), sizeof(value));\n        value += distance;\n        memcpy(Addrint2Ptr(address), &value, sizeof(value));\n    }\n}\n\n// Insert jump relative instruction to the input address\n// RETURN: the size of the trampoline or 0 on failure\nstatic DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, const char* pattern, void** storedAddr)\n{\n    size_t bytesToMove = SIZE_OF_RELJUMP;\n    UINT_PTR srcAddr = Ptr2Addrint(inpAddr);\n    UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);\n    // Check that the target fits in 32 bits\n    if (!IsInDistance(srcAddr, tgtAddr, MAX_DISTANCE))\n        return 0;\n\n    UINT_PTR offset;\n    UINT offset32;\n    UCHAR *codePtr = (UCHAR *)inpAddr;\n\n    if ( storedAddr ){ // If requested, store original function code\n        bytesToMove = strlen(pattern)/2-1; // The last byte matching the pattern must not be copied\n        __TBB_ASSERT_RELEASE( bytesToMove >= SIZE_OF_RELJUMP, \"Incorrect bytecode pattern?\" );\n        UINT_PTR trampAddr = memProvider.GetLocation(srcAddr);\n        if (!trampAddr)\n            return 0;\n        *storedAddr = Addrint2Ptr(trampAddr);\n        // Set 'executable' flag for original instructions in the new place\n        DWORD pageFlags = PAGE_EXECUTE_READWRITE;\n        if (!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;\n        // Copy original instructions to the new place\n        memcpy(*storedAddr, codePtr, bytesToMove);\n        offset = srcAddr - trampAddr;\n        offset32 = (UINT)(offset & 0xFFFFFFFF);\n        CorrectOffset( trampAddr, pattern, offset32 );\n        // Set jump to the code after replacement\n        offset32 -= SIZE_OF_RELJUMP;\n        *(UCHAR*)(trampAddr+bytesToMove) = 0xE9;\n        memcpy((UCHAR*)(trampAddr+bytesToMove+1), &offset32, sizeof(offset32));\n    }\n\n    // The following will work correctly even if srcAddr>tgtAddr, as long as\n    // address difference is less than 2^31, which is guaranteed by IsInDistance.\n    offset = tgtAddr - srcAddr - SIZE_OF_RELJUMP;\n    offset32 = (UINT)(offset & 0xFFFFFFFF);\n    // Insert the jump to the new code\n    *codePtr = 0xE9;\n    memcpy(codePtr+1, &offset32, sizeof(offset32));\n\n    // Fill the rest with NOPs to correctly see disassembler of old code in debugger.\n    for( unsigned i=SIZE_OF_RELJUMP; i<bytesToMove; i++ ){\n        *(codePtr+i) = 0x90;\n    }\n\n    return SIZE_OF_RELJUMP;\n}\n\n// This function is called when the offset doesn't fit in 32 bits\n// 1  Find and allocate a page in the small distance (<2^31) from input address\n// 2  Put jump RIP relative indirect through the address in the close page\n// 3  Put the absolute address of the target in the allocated location\n// RETURN: the size of the trampoline or 0 on failure\nstatic DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, const char* pattern, void** storedAddr)\n{\n    size_t bytesToMove = SIZE_OF_INDJUMP;\n\n    UINT_PTR srcAddr = Ptr2Addrint(inpAddr);\n    UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);\n\n    // Get a location close to the source address\n    UINT_PTR location = memProvider.GetLocation(srcAddr);\n    if (!location)\n        return 0;\n\n    UINT_PTR offset;\n    UINT offset32;\n    UCHAR *codePtr = (UCHAR *)inpAddr;\n\n    // Fill the location\n    UINT_PTR *locPtr = (UINT_PTR *)Addrint2Ptr(location);\n    *locPtr = tgtAddr;\n\n    if ( storedAddr ){ // If requested, store original function code\n        bytesToMove = strlen(pattern)/2-1; // The last byte matching the pattern must not be copied\n        __TBB_ASSERT_RELEASE( bytesToMove >= SIZE_OF_INDJUMP, \"Incorrect bytecode pattern?\" );\n        UINT_PTR trampAddr = memProvider.GetLocation(srcAddr);\n        if (!trampAddr)\n            return 0;\n        *storedAddr = Addrint2Ptr(trampAddr);\n        // Set 'executable' flag for original instructions in the new place\n        DWORD pageFlags = PAGE_EXECUTE_READWRITE;\n        if (!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;\n        // Copy original instructions to the new place\n        memcpy(*storedAddr, codePtr, bytesToMove);\n        offset = srcAddr - trampAddr;\n        offset32 = (UINT)(offset & 0xFFFFFFFF);\n        CorrectOffset( trampAddr, pattern, offset32 );\n        // Set jump to the code after replacement. It is within the distance of relative jump!\n        offset32 -= SIZE_OF_RELJUMP;\n        *(UCHAR*)(trampAddr+bytesToMove) = 0xE9;\n        memcpy((UCHAR*)(trampAddr+bytesToMove+1), &offset32, sizeof(offset32));\n    }\n\n    // Fill the buffer\n    offset = location - srcAddr - SIZE_OF_INDJUMP;\n    offset32 = (UINT)(offset & 0xFFFFFFFF);\n    *(codePtr) = 0xFF;\n    *(codePtr+1) = 0x25;\n    memcpy(codePtr+2, &offset32, sizeof(offset32));\n\n    // Fill the rest with NOPs to correctly see disassembler of old code in debugger.\n    for( unsigned i=SIZE_OF_INDJUMP; i<bytesToMove; i++ ){\n        *(codePtr+i) = 0x90;\n    }\n\n    return SIZE_OF_INDJUMP;\n}\n\n// Insert a jump instruction in the inpAddr to the targetAddr\n// 1. Get the memory protection of the page containing the input address\n// 2. Change the memory protection to writable\n// 3. Call InsertTrampoline32 or InsertTrampoline64\n// 4. Restore memory protection\n// RETURN: FALSE on failure, TRUE on success\nstatic bool InsertTrampoline(void *inpAddr, void *targetAddr, const char ** opcodes, void** origFunc)\n{\n    DWORD probeSize;\n    // Change page protection to EXECUTE+WRITE\n    DWORD origProt = 0;\n    if (!VirtualProtect(inpAddr, MAX_PROBE_SIZE, PAGE_EXECUTE_WRITECOPY, &origProt))\n        return FALSE;\n\n    const char* pattern = NULL;\n    if ( origFunc ){ // Need to store original function code\n        UCHAR * const codePtr = (UCHAR *)inpAddr;\n        if ( *codePtr == 0xE9 ){ // JMP relative instruction\n            // For the special case when a system function consists of a single near jump,\n            // instead of moving it somewhere we use the target of the jump as the original function.\n            unsigned offsetInJmp = *(unsigned*)(codePtr + 1);\n            *origFunc = (void*)(Ptr2Addrint(inpAddr) + offsetInJmp + SIZE_OF_RELJUMP);\n            origFunc = NULL; // now it must be ignored by InsertTrampoline32/64\n        } else {\n            // find the right opcode pattern\n            UINT opcodeIdx = CheckOpcodes( opcodes, inpAddr, /*abortOnError=*/true );\n            __TBB_ASSERT( opcodeIdx > 0, \"abortOnError ignored in CheckOpcodes?\" );\n            pattern = opcodes[opcodeIdx-1];  // -1 compensates for +1 in CheckOpcodes\n        }\n    }\n\n    probeSize = InsertTrampoline32(inpAddr, targetAddr, pattern, origFunc);\n    if (!probeSize)\n        probeSize = InsertTrampoline64(inpAddr, targetAddr, pattern, origFunc);\n\n    // Restore original protection\n    VirtualProtect(inpAddr, MAX_PROBE_SIZE, origProt, &origProt);\n\n    if (!probeSize)\n        return FALSE;\n\n    FlushInstructionCache(GetCurrentProcess(), inpAddr, probeSize);\n    FlushInstructionCache(GetCurrentProcess(), origFunc, probeSize);\n\n    return TRUE;\n}\n\n// Routine to replace the functions\n// TODO: replace opcodesNumber with opcodes and opcodes number to check if we replace right code.\nFRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc)\n{\n    // Cache the results of the last search for the module\n    // Assume that there was no DLL unload between\n    static char cachedName[MAX_PATH+1];\n    static HMODULE cachedHM = 0;\n\n    if (!dllName || !*dllName)\n        return FRR_NODLL;\n\n    if (!cachedHM || strncmp(dllName, cachedName, MAX_PATH) != 0)\n    {\n        // Find the module handle for the input dll\n        HMODULE hModule = GetModuleHandleA(dllName);\n        if (hModule == 0)\n        {\n            // Couldn't find the module with the input name\n            cachedHM = 0;\n            return FRR_NODLL;\n        }\n\n        cachedHM = hModule;\n        strncpy(cachedName, dllName, MAX_PATH);\n    }\n\n    FARPROC inpFunc = GetProcAddress(cachedHM, funcName);\n    if (inpFunc == 0)\n    {\n        // Function was not found\n        return FRR_NOFUNC;\n    }\n\n    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodes, (void**)origFunc)){\n        // Failed to insert the trampoline to the target address\n        return FRR_FAILED;\n    }\n\n    return FRR_OK;\n}\n\nFRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc)\n{\n    // Cache the results of the last search for the module\n    // Assume that there was no DLL unload between\n    static wchar_t cachedName[MAX_PATH+1];\n    static HMODULE cachedHM = 0;\n\n    if (!dllName || !*dllName)\n        return FRR_NODLL;\n\n    if (!cachedHM || wcsncmp(dllName, cachedName, MAX_PATH) != 0)\n    {\n        // Find the module handle for the input dll\n        HMODULE hModule = GetModuleHandleW(dllName);\n        if (hModule == 0)\n        {\n            // Couldn't find the module with the input name\n            cachedHM = 0;\n            return FRR_NODLL;\n        }\n\n        cachedHM = hModule;\n        wcsncpy(cachedName, dllName, MAX_PATH);\n    }\n\n    FARPROC inpFunc = GetProcAddress(cachedHM, funcName);\n    if (inpFunc == 0)\n    {\n        // Function was not found\n        return FRR_NOFUNC;\n    }\n\n    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodes, (void**)origFunc)){\n        // Failed to insert the trampoline to the target address\n        return FRR_FAILED;\n    }\n\n    return FRR_OK;\n}\n\nbool IsPrologueKnown(HMODULE module, const char *funcName, const char **opcodes)\n{\n    FARPROC inpFunc = GetProcAddress(module, funcName);\n    if (!inpFunc)\n        return false;\n    return CheckOpcodes( opcodes, (void*)inpFunc, /*abortOnError=*/false ) != 0;\n}\n\n#endif /* !__TBB_WIN8UI_SUPPORT && defined(_WIN32) */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbb_function_replacement.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_function_replacement_H\n#define __TBB_function_replacement_H\n\n#include <stddef.h> //for ptrdiff_t\ntypedef enum {\n    FRR_OK,     /* Succeeded in replacing the function */\n    FRR_NODLL,  /* The requested DLL was not found */\n    FRR_NOFUNC, /* The requested function was not found */\n    FRR_FAILED, /* The function replacement request failed */\n} FRR_TYPE;\n\ntypedef enum {\n    FRR_FAIL,     /* Required function */\n    FRR_IGNORE,   /* optional function */\n} FRR_ON_ERROR;\n\ntypedef void (*FUNCPTR)();\n\n#ifndef UNICODE\n#define ReplaceFunction ReplaceFunctionA\n#else\n#define ReplaceFunction ReplaceFunctionW\n#endif //UNICODE\n\nFRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);\nFRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);\n\nbool IsPrologueKnown(HMODULE module, const char *funcName, const char **opcodes);\n\n// Utilities to convert between ADDRESS and LPVOID\nunion Int2Ptr {\n    UINT_PTR uip;\n    LPVOID lpv;\n};\n\ninline UINT_PTR Ptr2Addrint(LPVOID ptr);\ninline LPVOID Addrint2Ptr(UINT_PTR ptr);\n\n// The size of a trampoline region\nconst unsigned MAX_PROBE_SIZE = 32;\n\n// The size of a jump relative instruction \"e9 00 00 00 00\"\nconst unsigned SIZE_OF_RELJUMP = 5;\n\n// The size of jump RIP relative indirect \"ff 25 00 00 00 00\"\nconst unsigned SIZE_OF_INDJUMP = 6;\n\n// The size of address we put in the location (in Intel64)\nconst unsigned SIZE_OF_ADDRESS = 8;\n\n// The size limit (in bytes) for an opcode pattern to fit into a trampoline\n// There should be enough space left for a relative jump; +1 is for the extra pattern byte.\nconst unsigned MAX_PATTERN_SIZE = MAX_PROBE_SIZE - SIZE_OF_RELJUMP + 1;\n\n// The max distance covered in 32 bits: 2^31 - 1 - C\n// where C should not be smaller than the size of a probe.\n// The latter is important to correctly handle \"backward\" jumps.\nconst __int64 MAX_DISTANCE = (((__int64)1 << 31) - 1) - MAX_PROBE_SIZE;\n\n// The maximum number of distinct buffers in memory\nconst ptrdiff_t MAX_NUM_BUFFERS = 256;\n\n#endif //__TBB_function_replacement_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbbmalloc.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"TypeDefinitions.h\" // Customize.h and proxy.h get included\n#include \"tbbmalloc_internal_api.h\"\n\n#include \"../tbb/tbb_assert_impl.h\" // Out-of-line TBB assertion handling routines are instantiated here.\n\n#undef UNICODE\n\n#if USE_PTHREAD\n#include <dlfcn.h> // dlopen\n#elif USE_WINTHREAD\n#include \"tbb/machine/windows_api.h\"\n#endif\n\nnamespace rml {\nnamespace internal {\n\n#if TBB_USE_DEBUG\n#define DEBUG_SUFFIX \"_debug\"\n#else\n#define DEBUG_SUFFIX\n#endif /* TBB_USE_DEBUG */\n\n// MALLOCLIB_NAME is the name of the TBB memory allocator library.\n#if _WIN32||_WIN64\n#define MALLOCLIB_NAME \"tbbmalloc\" DEBUG_SUFFIX \".dll\"\n#elif __APPLE__\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX \".dylib\"\n#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX || __ANDROID__\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX \".so\"\n#elif __linux__\n#define MALLOCLIB_NAME \"libtbbmalloc\" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)\n#else\n#error Unknown OS\n#endif\n\nvoid init_tbbmalloc() {\n#if DO_ITT_NOTIFY\n    MallocInitializeITT();\n#endif\n\n/* Preventing TBB allocator library from unloading to prevent\n   resource leak, as memory is not released on the library unload.\n*/\n#if USE_WINTHREAD && !__TBB_SOURCE_DIRECTLY_INCLUDED && !__TBB_WIN8UI_SUPPORT\n    // Prevent Windows from displaying message boxes if it fails to load library\n    UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);\n    HMODULE lib;\n    BOOL ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS\n                                 |GET_MODULE_HANDLE_EX_FLAG_PIN,\n                                 (LPCTSTR)&scalable_malloc, &lib);\n    MALLOC_ASSERT(lib && ret, \"Allocator can't find itself.\");\n    SetErrorMode (prev_mode);\n#endif /* USE_PTHREAD && !__TBB_SOURCE_DIRECTLY_INCLUDED */\n}\n\n#if !__TBB_SOURCE_DIRECTLY_INCLUDED\n#if USE_WINTHREAD\nextern \"C\" BOOL WINAPI DllMain( HINSTANCE /*hInst*/, DWORD callReason, LPVOID )\n{\n\n    if (callReason==DLL_THREAD_DETACH)\n    {\n        __TBB_mallocThreadShutdownNotification();\n    }\n    else if (callReason==DLL_PROCESS_DETACH)\n    {\n        __TBB_mallocProcessShutdownNotification();\n    }\n    return TRUE;\n}\n#else /* !USE_WINTHREAD */\nstruct RegisterProcessShutdownNotification {\n// Work around non-reentrancy in dlopen() on Android\n#if !__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND\n    RegisterProcessShutdownNotification() {\n        // prevents unloading, POSIX case\n        dlopen(MALLOCLIB_NAME, RTLD_NOW);\n    }\n#endif /* !__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND */\n    ~RegisterProcessShutdownNotification() {\n        __TBB_mallocProcessShutdownNotification();\n    }\n};\n\nstatic RegisterProcessShutdownNotification reg;\n#endif /* !USE_WINTHREAD */\n#endif /* !__TBB_SOURCE_DIRECTLY_INCLUDED */\n\n} } // namespaces\n\n#if __TBB_ipf\n/* It was found that on IA-64 architecture inlining of __TBB_machine_lockbyte leads\n   to serious performance regression with ICC. So keep it out-of-line.\n\n   This code is copy-pasted from tbb_misc.cpp.\n */\nextern \"C\" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !__TBB_TryLockByte(flag) ) backoff.pause();\n    return 0;\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbbmalloc.rc",
    "content": "// Copyright (c) 2005-2018 Intel Corporation\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n//\n//\n//\n\n// Microsoft Visual C++ generated resource script.\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NO_MFC                     1\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include <winresrc.h>\n#define ENDL \"\\r\\n\"\n#include \"tbb/tbb_version.h\"\n\n#define TBBMALLOC_VERNUMBERS TBB_VERSION_MAJOR, TBB_VERSION_MINOR, __TBB_VERSION_YMD\n#define TBBMALLOC_VERSION __TBB_STRING(TBBMALLOC_VERNUMBERS)\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// Neutral resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)\n#ifdef _WIN32\nLANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\n#pragma code_page(1252)\n#endif //_WIN32\n\n/////////////////////////////////////////////////////////////////////////////\n// manifest integration\n#ifdef TBB_MANIFEST\n#include \"winuser.h\"\n2 RT_MANIFEST tbbmanifest.exe.manifest\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION TBBMALLOC_VERNUMBERS\n PRODUCTVERSION TBB_VERNUMBERS\n FILEFLAGSMASK 0x17L\n#ifdef _DEBUG\n FILEFLAGS 0x1L\n#else\n FILEFLAGS 0x0L\n#endif\n FILEOS 0x40004L\n FILETYPE 0x2L\n FILESUBTYPE 0x0L\nBEGIN\n    BLOCK \"StringFileInfo\"\n    BEGIN\n        BLOCK \"000004b0\"\n        BEGIN\n            VALUE \"CompanyName\", \"Intel Corporation\\0\"\n            VALUE \"FileDescription\", \"Scalable Allocator library\\0\"\n            VALUE \"FileVersion\", TBBMALLOC_VERSION \"\\0\"\n            VALUE \"LegalCopyright\", \"Copyright 2005-2018 Intel Corporation.  All Rights Reserved.\\0\"\n            VALUE \"LegalTrademarks\", \"\\0\"\n#ifndef TBB_USE_DEBUG\n            VALUE \"OriginalFilename\", \"tbbmalloc.dll\\0\"\n#else\n            VALUE \"OriginalFilename\", \"tbbmalloc_debug.dll\\0\"\n#endif\n            VALUE \"ProductName\", \"Intel(R) Threading Building Blocks for Windows\\0\"\n            VALUE \"ProductVersion\", TBB_VERSION \"\\0\"\n            VALUE \"PrivateBuild\", \"\\0\"\n            VALUE \"SpecialBuild\", \"\\0\"\n        END\n    END\n    BLOCK \"VarFileInfo\"\n    BEGIN\n        VALUE \"Translation\", 0x0, 1200\n    END\nEND\n\n#endif    // Neutral resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbbmalloc_internal.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbbmalloc_internal_H\n#define __TBB_tbbmalloc_internal_H 1\n\n\n#include \"TypeDefinitions.h\" /* Also includes customization layer Customize.h */\n\n#if USE_PTHREAD\n    // Some pthreads documentation says that <pthreads.h> must be first header.\n    #include <pthread.h>\n    typedef pthread_key_t tls_key_t;\n#elif USE_WINTHREAD\n    #include \"tbb/machine/windows_api.h\"\n    typedef DWORD tls_key_t;\n#else\n    #error Must define USE_PTHREAD or USE_WINTHREAD\n#endif\n\n// TODO: *BSD also has it\n#define BACKEND_HAS_MREMAP __linux__\n#define CHECK_ALLOCATION_RANGE MALLOC_DEBUG || MALLOC_ZONE_OVERLOAD_ENABLED || MALLOC_UNIXLIKE_OVERLOAD_ENABLED\n\n#include \"tbb/tbb_config.h\" // for __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN\n#if __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN\n  #define _EXCEPTION_PTR_H /* prevents exception_ptr.h inclusion */\n  #define _GLIBCXX_NESTED_EXCEPTION_H /* prevents nested_exception.h inclusion */\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <limits.h> // for CHAR_BIT\n#include <string.h> // for memset\n#if MALLOC_CHECK_RECURSION\n#include <new>        /* for placement new */\n#endif\n#include \"tbb/scalable_allocator.h\"\n#include \"tbbmalloc_internal_api.h\"\n\n/********* Various compile-time options        **************/\n\n#if !__TBB_DEFINE_MIC && __TBB_MIC_NATIVE\n #error Intel(R) Many Integrated Core Compiler does not define __MIC__ anymore.\n#endif\n\n#define MALLOC_TRACE 0\n\n#if MALLOC_TRACE\n#define TRACEF(x) printf x\n#else\n#define TRACEF(x) ((void)0)\n#endif /* MALLOC_TRACE */\n\n#define ASSERT_TEXT NULL\n\n#define COLLECT_STATISTICS ( MALLOC_DEBUG && MALLOCENV_COLLECT_STATISTICS )\n#ifndef USE_INTERNAL_TID\n#define USE_INTERNAL_TID COLLECT_STATISTICS || MALLOC_TRACE\n#endif\n\n#include \"Statistics.h\"\n\n// call yield for whitebox testing, skip in real library\n#ifndef WhiteboxTestingYield\n#define WhiteboxTestingYield() ((void)0)\n#endif\n\n\n/********* End compile-time options        **************/\n\nnamespace rml {\n\nnamespace internal {\n\n#if __TBB_MALLOC_LOCACHE_STAT\nextern intptr_t mallocCalls, cacheHits;\nextern intptr_t memAllocKB, memHitKB;\n#endif\n\n//! Utility template function to prevent \"unused\" warnings by various compilers.\ntemplate<typename T>\nvoid suppress_unused_warning( const T& ) {}\n\n/********** Various global default constants ********/\n\n/*\n * Default huge page size\n */\nstatic const size_t HUGE_PAGE_SIZE = 2 * 1024 * 1024;\n\n/********** End of global default constatns *********/\n\n/********** Various numeric parameters controlling allocations ********/\n\n/*\n * slabSize - the size of a block for allocation of small objects,\n * it must be larger than maxSegregatedObjectSize.\n */\nconst uintptr_t slabSize = 16*1024;\n\n/*\n * Large blocks cache cleanup frequency.\n * It should be power of 2 for the fast checking.\n */\nconst unsigned cacheCleanupFreq = 256;\n\n/*\n * Alignment of large (>= minLargeObjectSize) objects.\n */\nconst size_t largeObjectAlignment = estimatedCacheLineSize;\n\n/*\n * This number of bins in the TLS that leads to blocks that we can allocate in.\n */\nconst uint32_t numBlockBinLimit = 31;\n\n/********** End of numeric parameters controlling allocations *********/\n\nclass BlockI;\nclass Block;\nstruct LargeMemoryBlock;\nstruct ExtMemoryPool;\nstruct MemRegion;\nclass FreeBlock;\nclass TLSData;\nclass Backend;\nclass MemoryPool;\nstruct CacheBinOperation;\nextern const uint32_t minLargeObjectSize;\n\nenum DecreaseOrIncrease {\n    decrease, increase\n};\n\nclass TLSKey {\n    tls_key_t TLS_pointer_key;\npublic:\n    bool init();\n    bool destroy();\n    TLSData* getThreadMallocTLS() const;\n    void setThreadMallocTLS( TLSData * newvalue );\n    TLSData* createTLS(MemoryPool *memPool, Backend *backend);\n};\n\ntemplate<typename Arg, typename Compare>\ninline void AtomicUpdate(Arg &location, Arg newVal, const Compare &cmp)\n{\n    MALLOC_STATIC_ASSERT(sizeof(Arg) == sizeof(intptr_t),\n                         \"Type of argument must match AtomicCompareExchange type.\");\n    for (Arg old = location; cmp(old, newVal); ) {\n        Arg val = AtomicCompareExchange((intptr_t&)location, (intptr_t)newVal, old);\n        if (val == old)\n            break;\n        // TODO: do we need backoff after unsuccessful CAS?\n        old = val;\n    }\n}\n\n// TODO: make BitMaskBasic more general\n// (currently, it fits BitMaskMin well, but not as suitable for BitMaskMax)\ntemplate<unsigned NUM>\nclass BitMaskBasic {\n    static const unsigned SZ = (NUM-1)/(CHAR_BIT*sizeof(uintptr_t))+1;\n    static const unsigned WORD_LEN = CHAR_BIT*sizeof(uintptr_t);\n    uintptr_t mask[SZ];\nprotected:\n    void set(size_t idx, bool val) {\n        MALLOC_ASSERT(idx<NUM, ASSERT_TEXT);\n\n        size_t i = idx / WORD_LEN;\n        int pos = WORD_LEN - idx % WORD_LEN - 1;\n        if (val)\n            AtomicOr(&mask[i], 1ULL << pos);\n        else\n            AtomicAnd(&mask[i], ~(1ULL << pos));\n    }\n    int getMinTrue(unsigned startIdx) const {\n        unsigned idx = startIdx / WORD_LEN;\n        int pos;\n\n        if (startIdx % WORD_LEN) {\n            // only interested in part of a word, clear bits before startIdx\n            pos = WORD_LEN - startIdx % WORD_LEN;\n            uintptr_t actualMask = mask[idx] & (((uintptr_t)1<<pos) - 1);\n            idx++;\n            if (-1 != (pos = BitScanRev(actualMask)))\n                return idx*WORD_LEN - pos - 1;\n        }\n\n        while (idx<SZ)\n            if (-1 != (pos = BitScanRev(mask[idx++])))\n                return idx*WORD_LEN - pos - 1;\n        return -1;\n    }\npublic:\n    void reset() { for (unsigned i=0; i<SZ; i++) mask[i] = 0; }\n};\n\ntemplate<unsigned NUM>\nclass BitMaskMin : public BitMaskBasic<NUM> {\npublic:\n    void set(size_t idx, bool val) { BitMaskBasic<NUM>::set(idx, val); }\n    int getMinTrue(unsigned startIdx) const {\n        return BitMaskBasic<NUM>::getMinTrue(startIdx);\n    }\n};\n\ntemplate<unsigned NUM>\nclass BitMaskMax : public BitMaskBasic<NUM> {\npublic:\n    void set(size_t idx, bool val) {\n        BitMaskBasic<NUM>::set(NUM - 1 - idx, val);\n    }\n    int getMaxTrue(unsigned startIdx) const {\n        int p = BitMaskBasic<NUM>::getMinTrue(NUM-startIdx-1);\n        return -1==p? -1 : (int)NUM - 1 - p;\n    }\n};\n\n\n// The part of thread-specific data that can be modified by other threads.\n// Such modifications must be protected by AllLocalCaches::listLock.\nstruct TLSRemote {\n    TLSRemote *next,\n              *prev;\n};\n\n// The list of all thread-local data; supporting cleanup of thread caches\nclass AllLocalCaches {\n    TLSRemote  *head;\n    MallocMutex listLock; // protects operations in the list\npublic:\n    void registerThread(TLSRemote *tls);\n    void unregisterThread(TLSRemote *tls);\n    bool cleanup(ExtMemoryPool *extPool, bool cleanOnlyUnused);\n    void markUnused();\n    void reset() { head = NULL; }\n};\n\nclass LifoList {\npublic:\n    inline LifoList();\n    inline void push(Block *block);\n    inline Block *pop();\n    inline Block *grab();\n\nprivate:\n    Block *top;\n    MallocMutex lock;\n};\n\n/*\n * When a block that is not completely free is returned for reuse by other threads\n * this is where the block goes.\n *\n * LifoList assumes zero initialization; so below its constructors are omitted,\n * to avoid linking with C++ libraries on Linux.\n */\n\nclass OrphanedBlocks {\n    LifoList bins[numBlockBinLimit];\npublic:\n    Block *get(TLSData *tls, unsigned int size);\n    void put(intptr_t binTag, Block *block);\n    void reset();\n    bool cleanup(Backend* backend);\n};\n\n/* cache blocks in range [MinSize; MaxSize) in bins with CacheStep\n TooLargeFactor -- when cache size treated \"too large\" in comparison to user data size\n OnMissFactor -- If cache miss occurred and cache was cleaned,\n                 set ageThreshold to OnMissFactor * the difference\n                 between current time and last time cache was cleaned.\n LongWaitFactor -- to detect rarely-used bins and forget about their usage history\n*/\ntemplate<size_t MIN_SIZE, size_t MAX_SIZE, uint32_t CACHE_STEP, int TOO_LARGE,\n         int ON_MISS, int LONG_WAIT>\nstruct LargeObjectCacheProps {\n    static const size_t MinSize = MIN_SIZE, MaxSize = MAX_SIZE;\n    static const uint32_t CacheStep = CACHE_STEP;\n    static const int TooLargeFactor = TOO_LARGE, OnMissFactor = ON_MISS,\n        LongWaitFactor = LONG_WAIT;\n};\n\ntemplate<typename Props>\nclass LargeObjectCacheImpl {\nprivate:\n    // The number of bins to cache large objects.\n    static const uint32_t numBins = (Props::MaxSize-Props::MinSize)/Props::CacheStep;\n    // Current sizes of used and cached objects. It's calculated while we are\n    // traversing bins, and used for isLOCTooLarge() check at the same time.\n    class BinsSummary {\n        size_t usedSz;\n        size_t cachedSz;\n    public:\n        BinsSummary() : usedSz(0), cachedSz(0) {}\n        // \"too large\" criteria\n        bool isLOCTooLarge() const { return cachedSz > Props::TooLargeFactor*usedSz; }\n        void update(size_t usedSize, size_t cachedSize) {\n            usedSz += usedSize;\n            cachedSz += cachedSize;\n        }\n        void reset() { usedSz = cachedSz = 0; }\n    };\npublic:\n    typedef BitMaskMax<numBins> BinBitMask;\n\n    // 2-linked list of same-size cached blocks ordered by age (oldest on top)\n    // TODO: are we really want the list to be 2-linked? This allows us\n    // reduce memory consumption and do less operations under lock.\n    // TODO: try to switch to 32-bit logical time to save space in CacheBin\n    // and move bins to different cache lines.\n    class CacheBin {\n    private:\n        LargeMemoryBlock *first,\n                         *last;\n  /* age of an oldest block in the list; equal to last->age, if last defined,\n     used for quick cheching it without acquiring the lock. */\n        uintptr_t         oldest;\n  /* currAge when something was excluded out of list because of the age,\n     not because of cache hit */\n        uintptr_t         lastCleanedAge;\n  /* Current threshold value for the blocks of a particular size.\n     Set on cache miss. */\n        intptr_t          ageThreshold;\n\n  /* total size of all objects corresponding to the bin and allocated by user */\n        size_t            usedSize,\n  /* total size of all objects cached in the bin */\n                          cachedSize;\n  /* mean time of presence of block in the bin before successful reuse */\n        intptr_t          meanHitRange;\n  /* time of last get called for the bin */\n        uintptr_t         lastGet;\n\n        typename MallocAggregator<CacheBinOperation>::type aggregator;\n\n        void ExecuteOperation(CacheBinOperation *op, ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx, bool longLifeTime = true);\n  /* should be placed in zero-initialized memory, ctor not needed. */\n        CacheBin();\n    public:\n        void init() { memset(this, 0, sizeof(CacheBin)); }\n        void putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *head, BinBitMask *bitMask, int idx);\n        LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);\n        bool cleanToThreshold(ExtMemoryPool *extMemPool, BinBitMask *bitMask, uintptr_t currTime, int idx);\n        bool releaseAllToBackend(ExtMemoryPool *extMemPool, BinBitMask *bitMask, int idx);\n        void updateUsedSize(ExtMemoryPool *extMemPool, size_t size, BinBitMask *bitMask, int idx);\n\n        void decreaseThreshold() {\n            if (ageThreshold)\n                ageThreshold = (ageThreshold + meanHitRange)/2;\n        }\n        void updateBinsSummary(BinsSummary *binsSummary) const {\n            binsSummary->update(usedSize, cachedSize);\n        }\n        size_t getSize() const { return cachedSize; }\n        size_t getUsedSize() const { return usedSize; }\n        size_t reportStat(int num, FILE *f);\n  /* ---------- unsafe methods used with the aggregator ---------- */\n        void forgetOutdatedState(uintptr_t currTime);\n        LargeMemoryBlock *putList(LargeMemoryBlock *head, LargeMemoryBlock *tail, BinBitMask *bitMask, int idx, int num);\n        LargeMemoryBlock *get();\n        LargeMemoryBlock *cleanToThreshold(uintptr_t currTime, BinBitMask *bitMask, int idx);\n        LargeMemoryBlock *cleanAll(BinBitMask *bitMask, int idx);\n        void updateUsedSize(size_t size, BinBitMask *bitMask, int idx) {\n            if (!usedSize) bitMask->set(idx, true);\n            usedSize += size;\n            if (!usedSize && !first) bitMask->set(idx, false);\n        }\n        void updateMeanHitRange( intptr_t hitRange ) {\n            hitRange = hitRange >= 0 ? hitRange : 0;\n            meanHitRange = meanHitRange ? (meanHitRange + hitRange)/2 : hitRange;\n        }\n        void updateAgeThreshold( uintptr_t currTime ) {\n            if (lastCleanedAge)\n                ageThreshold = Props::OnMissFactor*(currTime - lastCleanedAge);\n        }\n        void updateCachedSize(size_t size) { cachedSize += size; }\n        void setLastGet( uintptr_t newLastGet ) { lastGet = newLastGet; }\n  /* -------------------------------------------------------- */\n    };\nprivate:\n    intptr_t     tooLargeLOC; // how many times LOC was \"too large\"\n    // for fast finding of used bins and bins with non-zero usedSize;\n    // indexed from the end, as we need largest 1st\n    BinBitMask   bitMask;\n    // bins with lists of recently freed large blocks cached for re-use\n    CacheBin bin[numBins];\n\npublic:\n    static int sizeToIdx(size_t size) {\n        MALLOC_ASSERT(Props::MinSize <= size && size < Props::MaxSize, ASSERT_TEXT);\n        return (size-Props::MinSize)/Props::CacheStep;\n    }\n    static int getNumBins() { return numBins; }\n\n    void putList(ExtMemoryPool *extMemPool, LargeMemoryBlock *largeBlock);\n    LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size);\n\n    void updateCacheState(ExtMemoryPool *extMemPool, DecreaseOrIncrease op, size_t size);\n    bool regularCleanup(ExtMemoryPool *extMemPool, uintptr_t currAge, bool doThreshDecr);\n    bool cleanAll(ExtMemoryPool *extMemPool);\n    void reset() {\n        tooLargeLOC = 0;\n        for (int i = numBins-1; i >= 0; i--)\n            bin[i].init();\n        bitMask.reset();\n    }\n    void reportStat(FILE *f);\n#if __TBB_MALLOC_WHITEBOX_TEST\n    size_t getLOCSize() const;\n    size_t getUsedSize() const;\n#endif\n};\n\nclass LargeObjectCache {\n    static const size_t minLargeSize =  8*1024,\n                        maxLargeSize =  8*1024*1024,\n    // There are benchmarks of interest that should work well with objects of this size\n                        maxHugeSize = 129*1024*1024;\npublic:\n    // Difference between object sizes in large block bins\n    static const uint32_t largeBlockCacheStep =  8*1024,\n                          hugeBlockCacheStep = 512*1024;\nprivate:\n    typedef LargeObjectCacheProps<minLargeSize, maxLargeSize, largeBlockCacheStep, 2, 2, 16> LargeCacheTypeProps;\n    typedef LargeObjectCacheProps<maxLargeSize, maxHugeSize, hugeBlockCacheStep, 1, 1, 4> HugeCacheTypeProps;\n    typedef LargeObjectCacheImpl< LargeCacheTypeProps > LargeCacheType;\n    typedef LargeObjectCacheImpl< HugeCacheTypeProps > HugeCacheType;\n\n    // beginning of largeCache is more actively used and smaller than hugeCache,\n    // so put hugeCache first to prevent false sharing\n    // with LargeObjectCache's predecessor\n    HugeCacheType hugeCache;\n    LargeCacheType largeCache;\n\n    /* logical time, incremented on each put/get operation\n       To prevent starvation between pools, keep separately for each pool.\n       Overflow is OK, as we only want difference between\n       its current value and some recent.\n\n       Both malloc and free should increment logical time, as in\n       a different case multiple cached blocks would have same age,\n       and accuracy of predictors suffers.\n    */\n    uintptr_t cacheCurrTime;\n\n                     // memory pool that owns this LargeObjectCache,\n    ExtMemoryPool *extMemPool; // strict 1:1 relation, never changed\n\n    static int sizeToIdx(size_t size);\npublic:\n    void init(ExtMemoryPool *memPool) { extMemPool = memPool; }\n    void put(LargeMemoryBlock *largeBlock);\n    void putList(LargeMemoryBlock *head);\n    LargeMemoryBlock *get(size_t size);\n\n    void updateCacheState(DecreaseOrIncrease op, size_t size);\n    bool isCleanupNeededOnRange(uintptr_t range, uintptr_t currTime);\n    bool doCleanup(uintptr_t currTime, bool doThreshDecr);\n\n    bool decreasingCleanup();\n    bool regularCleanup();\n    bool cleanAll();\n    void reset() {\n        largeCache.reset();\n        hugeCache.reset();\n    }\n    void reportStat(FILE *f);\n#if __TBB_MALLOC_WHITEBOX_TEST\n    size_t getLOCSize() const;\n    size_t getUsedSize() const;\n#endif\n    static size_t alignToBin(size_t size) {\n        return size<maxLargeSize? alignUp(size, largeBlockCacheStep)\n            : alignUp(size, hugeBlockCacheStep);\n    }\n\n    uintptr_t getCurrTime() { return (uintptr_t)AtomicIncrement((intptr_t&)cacheCurrTime); }\n    uintptr_t getCurrTimeRange(uintptr_t range) { return (uintptr_t)AtomicAdd((intptr_t&)cacheCurrTime, range)+1; }\n    void registerRealloc(size_t oldSize, size_t newSize);\n};\n\n// select index size for BackRefMaster based on word size: default is uint32_t,\n// uint16_t for 32-bit platforms\ntemplate<bool>\nstruct MasterIndexSelect {\n    typedef uint32_t master_type;\n};\n\ntemplate<>\nstruct MasterIndexSelect<false> {\n    typedef uint16_t master_type;\n};\n\nclass BackRefIdx { // composite index to backreference array\npublic:\n    typedef MasterIndexSelect<4 < sizeof(uintptr_t)>::master_type master_t;\nprivate:\n    static const master_t invalid = ~master_t(0);\n    master_t master;      // index in BackRefMaster\n    uint16_t largeObj:1;  // is this object \"large\"?\n    uint16_t offset  :15; // offset from beginning of BackRefBlock\npublic:\n    BackRefIdx() : master(invalid) {}\n    bool isInvalid() const { return master == invalid; }\n    bool isLargeObject() const { return largeObj; }\n    master_t getMaster() const { return master; }\n    uint16_t getOffset() const { return offset; }\n\n    // only newBackRef can modify BackRefIdx\n    static BackRefIdx newBackRef(bool largeObj);\n};\n\n// Block header is used during block coalescing\n// and must be preserved in used blocks.\nclass BlockI {\n    intptr_t     blockState[2];\n};\n\nstruct LargeMemoryBlock : public BlockI {\n    MemoryPool       *pool;          // owner pool\n    LargeMemoryBlock *next,          // ptrs in list of cached blocks\n                     *prev,\n    // 2-linked list of pool's large objects\n    // Used to destroy backrefs on pool destroy (backrefs are global)\n    // and for object releasing during pool reset.\n                     *gPrev,\n                     *gNext;\n    uintptr_t         age;           // age of block while in cache\n    size_t            objectSize;    // the size requested by a client\n    size_t            unalignedSize; // the size requested from backend\n    BackRefIdx        backRefIdx;    // cached here, used copy is in LargeObjectHdr\n};\n\n// global state of blocks currently in processing\nclass BackendSync {\n    // Class instances should reside in zero-initialized memory!\n    // The number of blocks currently removed from a bin and not returned back\n    intptr_t inFlyBlocks;         // to another\n    intptr_t binsModifications;   // incremented on every bin modification\n    Backend *backend;\npublic:\n    void init(Backend *b) { backend = b; }\n    void blockConsumed() { AtomicIncrement(inFlyBlocks); }\n    void binsModified() { AtomicIncrement(binsModifications); }\n    void blockReleased() {\n#if __TBB_MALLOC_BACKEND_STAT\n        MALLOC_ITT_SYNC_RELEASING(&inFlyBlocks);\n#endif\n        AtomicIncrement(binsModifications);\n        intptr_t prev = AtomicAdd(inFlyBlocks, -1);\n        MALLOC_ASSERT(prev > 0, ASSERT_TEXT);\n        suppress_unused_warning(prev);\n    }\n    intptr_t getNumOfMods() const { return FencedLoad(binsModifications); }\n    // return true if need re-do the blocks search\n    inline bool waitTillBlockReleased(intptr_t startModifiedCnt);\n};\n\nclass CoalRequestQ { // queue of free blocks that coalescing was delayed\nprivate:\n    FreeBlock   *blocksToFree;\n    BackendSync *bkndSync;\n    // counted blocks in blocksToFree and that are leaved blocksToFree\n    // and still in active coalescing\n    intptr_t     inFlyBlocks;\npublic:\n    void init(BackendSync *bSync) { bkndSync = bSync; }\n    FreeBlock *getAll(); // return current list of blocks and make queue empty\n    void putBlock(FreeBlock *fBlock);\n    inline void blockWasProcessed();\n    intptr_t blocksInFly() const { return FencedLoad(inFlyBlocks); }\n};\n\nclass MemExtendingSema {\n    intptr_t     active;\npublic:\n    bool wait() {\n        bool rescanBins = false;\n        // up to 3 threads can add more memory from OS simultaneously,\n        // rest of threads have to wait\n        for (;;) {\n            intptr_t prevCnt = FencedLoad(active);\n            if (prevCnt < 3) {\n                intptr_t n = AtomicCompareExchange(active, prevCnt+1, prevCnt);\n                if (n == prevCnt)\n                    break;\n            } else {\n                SpinWaitWhileEq(active, prevCnt);\n                rescanBins = true;\n                break;\n            }\n        }\n        return rescanBins;\n    }\n    void signal() { AtomicAdd(active, -1); }\n};\n\nenum MemRegionType {\n    // The region does not guarantee the block size.\n    MEMREG_FLEXIBLE_SIZE = 0,\n    // The region can hold exact number of blocks with the size of the\n    // first reqested block.\n    MEMREG_SEVERAL_BLOCKS,\n    // The region holds only one block with a reqested size.\n    MEMREG_ONE_BLOCK\n};\n\nclass MemRegionList {\n    MallocMutex regionListLock;\npublic:\n    MemRegion  *head;\n    void add(MemRegion *r);\n    void remove(MemRegion *r);\n    int reportStat(FILE *f);\n};\n\nclass Backend {\nprivate:\n/* Blocks in range [minBinnedSize; getMaxBinnedSize()] are kept in bins,\n   one region can contains several blocks. Larger blocks are allocated directly\n   and one region always contains one block.\n*/\n    enum {\n        minBinnedSize = 8*1024UL,\n        /*   If huge pages are available, maxBinned_HugePage used.\n             If not, maxBinned_SmallPage is the threshold.\n             TODO: use pool's granularity for upper bound setting.*/\n        maxBinned_SmallPage = 1024*1024UL,\n        // TODO: support other page sizes\n        maxBinned_HugePage = 4*1024*1024UL\n    };\n    enum {\n        VALID_BLOCK_IN_BIN = 1 // valid block added to bin, not returned as result\n    };\npublic:\n    static const int freeBinsNum =\n        (maxBinned_HugePage-minBinnedSize)/LargeObjectCache::largeBlockCacheStep + 1;\n\n    // if previous access missed per-thread slabs pool,\n    // allocate numOfSlabAllocOnMiss blocks in advance\n    static const int numOfSlabAllocOnMiss = 2;\n\n    enum {\n        NO_BIN = -1,\n        // special bin for blocks >= maxBinned_HugePage, blocks go to this bin\n        // when pool is created with keepAllMemory policy\n        // TODO: currently this bin is scanned using \"1st fit\", as it accumulates\n        // blocks of different sizes, \"best fit\" is preferred in terms of fragmentation\n        HUGE_BIN = freeBinsNum-1\n    };\n\n    // Bin keeps 2-linked list of free blocks. It must be 2-linked\n    // because during coalescing a block it's removed from a middle of the list.\n    struct Bin {\n        FreeBlock   *head,\n                    *tail;\n        MallocMutex  tLock;\n\n        void removeBlock(FreeBlock *fBlock);\n        void reset() { head = tail = 0; }\n        bool empty() const { return !head; }\n\n        size_t countFreeBlocks();\n        size_t reportFreeBlocks(FILE *f);\n        void reportStat(FILE *f);\n    };\n\n    typedef BitMaskMin<Backend::freeBinsNum> BitMaskBins;\n\n    // array of bins supplemented with bitmask for fast finding of non-empty bins\n    class IndexedBins {\n        BitMaskBins bitMask;\n        Bin         freeBins[Backend::freeBinsNum];\n        FreeBlock *getFromBin(int binIdx, BackendSync *sync, size_t size,\n                              bool resSlabAligned, bool alignedBin, bool wait,\n                              int *resLocked);\n    public:\n        FreeBlock *findBlock(int nativeBin, BackendSync *sync, size_t size,\n                             bool resSlabAligned, bool alignedBin, int *numOfLockedBins);\n        bool tryReleaseRegions(int binIdx, Backend *backend);\n        void lockRemoveBlock(int binIdx, FreeBlock *fBlock);\n        void addBlock(int binIdx, FreeBlock *fBlock, size_t blockSz, bool addToTail);\n        bool tryAddBlock(int binIdx, FreeBlock *fBlock, bool addToTail);\n        int getMinNonemptyBin(unsigned startBin) const {\n            int p = bitMask.getMinTrue(startBin);\n            return p == -1 ? Backend::freeBinsNum : p;\n        }\n        void verify();\n        void reset();\n        void reportStat(FILE *f);\n    };\n\nprivate:\n    class AdvRegionsBins {\n        BitMaskBins bins;\n    public:\n        void registerBin(int regBin) { bins.set(regBin, 1); }\n        int getMinUsedBin(int start) const { return bins.getMinTrue(start); }\n        void reset() { bins.reset(); }\n    };\n    // auxiliary class to atomic maximum request finding\n    class MaxRequestComparator {\n        const Backend *backend;\n    public:\n        MaxRequestComparator(const Backend *be) : backend(be) {}\n        inline bool operator()(size_t oldMaxReq, size_t requestSize) const;\n    };\n\n#if CHECK_ALLOCATION_RANGE\n    // Keep min and max of all addresses requested from OS,\n    // use it for checking memory possibly allocated by replaced allocators\n    // and for debugging purposes. Valid only for default memory pool.\n    class UsedAddressRange {\n        static const uintptr_t ADDRESS_UPPER_BOUND = UINTPTR_MAX;\n\n        uintptr_t   leftBound,\n                    rightBound;\n        MallocMutex mutex;\n    public:\n        // rightBound is zero-initialized\n        void init() { leftBound = ADDRESS_UPPER_BOUND; }\n        void registerAlloc(uintptr_t left, uintptr_t right);\n        void registerFree(uintptr_t left, uintptr_t right);\n        // as only left and right bounds are kept, we can return true\n        // for pointer not allocated by us, if more than single region\n        // was requested from OS\n        bool inRange(void *ptr) const {\n            const uintptr_t p = (uintptr_t)ptr;\n            return leftBound<=p && p<=rightBound;\n        }\n    };\n#else\n    class UsedAddressRange {\n    public:\n        void init() { }\n        void registerAlloc(uintptr_t, uintptr_t) {}\n        void registerFree(uintptr_t, uintptr_t) {}\n        bool inRange(void *) const { return true; }\n    };\n#endif\n\n    ExtMemoryPool   *extMemPool;\n    // used for release every region on pool destroying\n    MemRegionList    regionList;\n\n    CoalRequestQ     coalescQ; // queue of coalescing requests\n    BackendSync      bkndSync;\n    // semaphore protecting adding more more memory from OS\n    MemExtendingSema memExtendingSema;\n    size_t           totalMemSize,\n                     memSoftLimit;\n    UsedAddressRange usedAddrRange;\n    // to keep 1st allocation large than requested, keep bootstrapping status\n    enum {\n        bootsrapMemNotDone = 0,\n        bootsrapMemInitializing,\n        bootsrapMemDone\n    };\n    intptr_t         bootsrapMemStatus;\n    MallocMutex      bootsrapMemStatusMutex;\n\n    // Using of maximal observed requested size allows decrease\n    // memory consumption for small requests and decrease fragmentation\n    // for workloads when small and large allocation requests are mixed.\n    // TODO: decrease, not only increase it\n    size_t           maxRequestedSize;\n\n    FreeBlock *addNewRegion(size_t size, MemRegionType type, bool addToBin);\n    FreeBlock *findBlockInRegion(MemRegion *region, size_t exactBlockSize);\n    void startUseBlock(MemRegion *region, FreeBlock *fBlock, bool addToBin);\n    void releaseRegion(MemRegion *region);\n\n    FreeBlock *releaseMemInCaches(intptr_t startModifiedCnt,\n                                  int *lockedBinsThreshold, int numOfLockedBins);\n    void requestBootstrapMem();\n    FreeBlock *askMemFromOS(size_t totalReqSize, intptr_t startModifiedCnt,\n                            int *lockedBinsThreshold, int numOfLockedBins,\n                            bool *splittable);\n    FreeBlock *genericGetBlock(int num, size_t size, bool resSlabAligned);\n    void genericPutBlock(FreeBlock *fBlock, size_t blockSz);\n    FreeBlock *splitUnalignedBlock(FreeBlock *fBlock, int num, size_t size,\n                              bool needAlignedRes);\n    FreeBlock *splitAlignedBlock(FreeBlock *fBlock, int num, size_t size,\n                            bool needAlignedRes);\n\n    FreeBlock *doCoalesc(FreeBlock *fBlock, MemRegion **memRegion);\n    bool coalescAndPutList(FreeBlock *head, bool forceCoalescQDrop, bool reportBlocksProcessed);\n    void coalescAndPut(FreeBlock *fBlock, size_t blockSz);\n\n    void removeBlockFromBin(FreeBlock *fBlock);\n\n    void *allocRawMem(size_t &size);\n    bool freeRawMem(void *object, size_t size);\n\n    void putLargeBlock(LargeMemoryBlock *lmb);\n    void releaseCachesToLimit();\npublic:\n    bool scanCoalescQ(bool forceCoalescQDrop);\n    intptr_t blocksInCoalescing() const { return coalescQ.blocksInFly(); }\n    void verify();\n    void init(ExtMemoryPool *extMemoryPool);\n    void reset();\n    bool destroy();\n    bool clean(); // clean on caches cleanup\n    void reportStat(FILE *f);\n\n    BlockI *getSlabBlock(int num) {\n        BlockI *b = (BlockI*)\n            genericGetBlock(num, slabSize, /*resSlabAligned=*/true);\n        MALLOC_ASSERT(isAligned(b, slabSize), ASSERT_TEXT);\n        return b;\n    }\n    void putSlabBlock(BlockI *block) {\n        genericPutBlock((FreeBlock *)block, slabSize);\n    }\n    void *getBackRefSpace(size_t size, bool *rawMemUsed);\n    void putBackRefSpace(void *b, size_t size, bool rawMemUsed);\n\n    bool inUserPool() const;\n\n    LargeMemoryBlock *getLargeBlock(size_t size);\n    void returnLargeObject(LargeMemoryBlock *lmb);\n\n    void *remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment);\n\n    void setRecommendedMaxSize(size_t softLimit) {\n        memSoftLimit = softLimit;\n        releaseCachesToLimit();\n    }\n    inline size_t getMaxBinnedSize() const;\n\n    bool ptrCanBeValid(void *ptr) const { return usedAddrRange.inRange(ptr); }\n\n#if __TBB_MALLOC_WHITEBOX_TEST\n    size_t getTotalMemSize() const { return totalMemSize; }\n#endif\nprivate:\n    static int sizeToBin(size_t size) {\n        if (size >= maxBinned_HugePage)\n            return HUGE_BIN;\n        else if (size < minBinnedSize)\n            return NO_BIN;\n\n        int bin = (size - minBinnedSize)/LargeObjectCache::largeBlockCacheStep;\n\n        MALLOC_ASSERT(bin < HUGE_BIN, \"Invalid size.\");\n        return bin;\n    }\n#if __TBB_MALLOC_BACKEND_STAT\n    static size_t binToSize(int bin) {\n        MALLOC_ASSERT(bin <= HUGE_BIN, \"Invalid bin.\");\n\n        return bin*LargeObjectCache::largeBlockCacheStep + minBinnedSize;\n    }\n#endif\n    static bool toAlignedBin(FreeBlock *block, size_t size) {\n        return isAligned((char*)block+size, slabSize)\n            && size >= slabSize;\n    }\n\n    // register bins related to advance regions\n    AdvRegionsBins advRegBins;\n    IndexedBins freeLargeBins,\n                freeAlignedBins;\n};\n\n// An TBB allocator mode that can be controlled by user\n// via API/environment variable. Must be placed in zero-initialized memory.\n// External synchronization assumed.\n// TODO: TBB_VERSION support\nclass AllocControlledMode {\n    intptr_t val;\n    bool     setDone;\npublic:\n    bool ready() const { return setDone; }\n    intptr_t get() const {\n        MALLOC_ASSERT(setDone, ASSERT_TEXT);\n        return val;\n    }\n    void set(intptr_t newVal) { // note set() can be called before init()\n        val = newVal;\n        setDone = true;\n    }\n    // envName - environment variable to get controlled mode\n    void initReadEnv(const char *envName, intptr_t defaultVal);\n};\n\n// Page type to be used inside MapMemory.\n// Regular (4KB aligned), Huge and Transparent Huge Pages (2MB aligned).\nenum PageType {\n    REGULAR = 0,\n    PREALLOCATED_HUGE_PAGE,\n    TRANSPARENT_HUGE_PAGE\n};\n\n// init() and printStatus() is called only under global initialization lock.\n// Race is possible between registerAllocation() and registerReleasing(),\n// harm is that up to single huge page releasing is missed (because failure\n// to get huge page is registered only 1st time), that is negligible.\n// setMode is also can be called concurrently.\n// Object must reside in zero-initialized memory\n// TODO: can we check for huge page presence during every 10th mmap() call\n// in case huge page is released by another process?\nclass HugePagesStatus {\nprivate:\n    AllocControlledMode requestedMode; // changed only by user\n                                       // to keep enabled and requestedMode consistent\n    MallocMutex setModeLock;\n    size_t      pageSize;\n    intptr_t    needActualStatusPrint;\n\n    static void doPrintStatus(bool state, const char *stateName) {\n        // Under macOS* fprintf/snprintf acquires an internal lock, so when\n        // 1st allocation is done under the lock, we got a deadlock.\n        // Do not use fprintf etc during initialization.\n        fputs(\"TBBmalloc: huge pages\\t\", stderr);\n        if (!state)\n            fputs(\"not \", stderr);\n        fputs(stateName, stderr);\n        fputs(\"\\n\", stderr);\n    }\n\n    void parseSystemMemInfo() {\n        bool hpAvailable  = false;\n        bool thpAvailable = false;\n        unsigned long long hugePageSize = 0;\n\n#if __linux__\n        // Check huge pages existense\n        unsigned long long meminfoHugePagesTotal = 0;\n\n        parseFileItem meminfoItems[] = {\n            // Parse system huge page size\n            { \"Hugepagesize: %llu kB\", hugePageSize },\n            // Check if there are preallocated huge pages on the system\n            // https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt\n            { \"HugePages_Total: %llu\", meminfoHugePagesTotal } };\n\n        parseFile</*BUFF_SIZE=*/100>(\"/proc/meminfo\", meminfoItems);\n\n        // Double check another system information regarding preallocated\n        // huge pages if there are no information in /proc/meminfo\n        unsigned long long vmHugePagesTotal = 0;\n\n        parseFileItem vmItem[] = { { \"%llu\", vmHugePagesTotal } };\n\n        // We parse a counter number, it can't be huge\n        parseFile</*BUFF_SIZE=*/100>(\"/proc/sys/vm/nr_hugepages\", vmItem);\n\n        if (meminfoHugePagesTotal > 0 || vmHugePagesTotal > 0) {\n            MALLOC_ASSERT(hugePageSize != 0, \"Huge Page size can't be zero if we found preallocated.\");\n\n            // Any non zero value clearly states that there are preallocated\n            // huge pages on the system\n            hpAvailable = true;\n        }\n\n        // Check if there is transparent huge pages support on the system\n        unsigned long long thpPresent = 'n';\n        parseFileItem thpItem[] = { { \"[alwa%cs] madvise never\\n\", thpPresent } };\n        parseFile</*BUFF_SIZE=*/100>(\"/sys/kernel/mm/transparent_hugepage/enabled\", thpItem);\n\n        if (thpPresent == 'y') {\n            MALLOC_ASSERT(hugePageSize != 0, \"Huge Page size can't be zero if we found thp existence.\");\n            thpAvailable = true;\n        }\n#endif\n        MALLOC_ASSERT(!pageSize, \"Huge page size can't be set twice. Double initialization.\");\n\n        // Initialize object variables\n        pageSize       = hugePageSize * 1024; // was read in KB from meminfo\n        isHPAvailable  = hpAvailable;\n        isTHPAvailable = thpAvailable;\n    }\n\npublic:\n\n    // System information\n    bool isHPAvailable;\n    bool isTHPAvailable;\n\n    // User defined value\n    bool isEnabled;\n\n    void init() {\n        parseSystemMemInfo();\n        MallocMutex::scoped_lock lock(setModeLock);\n        requestedMode.initReadEnv(\"TBB_MALLOC_USE_HUGE_PAGES\", 0);\n        isEnabled = (isHPAvailable || isTHPAvailable) && requestedMode.get();\n    }\n\n    // Could be set from user code at any place.\n    // If we didn't call init() at this place, isEnabled will be false\n    void setMode(intptr_t newVal) {\n        MallocMutex::scoped_lock lock(setModeLock);\n        requestedMode.set(newVal);\n        isEnabled = (isHPAvailable || isTHPAvailable) && newVal;\n    }\n\n    bool isRequested() const {\n        return requestedMode.ready() ? requestedMode.get() : false;\n    }\n\n    void reset() {\n        pageSize = needActualStatusPrint = 0;\n        isEnabled = isHPAvailable = isTHPAvailable = false;\n    }\n\n    // If memory mapping size is a multiple of huge page size, some OS kernels\n    // can use huge pages transparently. Use this when huge pages are requested.\n    size_t getGranularity() const {\n        if (requestedMode.ready())\n            return requestedMode.get() ? pageSize : 0;\n        else\n            return HUGE_PAGE_SIZE; // the mode is not yet known; assume typical 2MB huge pages\n    }\n\n    void printStatus() {\n        doPrintStatus(requestedMode.get(), \"requested\");\n        if (requestedMode.get()) { // report actual status iff requested\n            if (pageSize)\n                FencedStore(needActualStatusPrint, 1);\n            else\n                doPrintStatus(/*state=*/false, \"available\");\n        }\n    }\n};\n\nclass AllLargeBlocksList {\n    MallocMutex       largeObjLock;\n    LargeMemoryBlock *loHead;\npublic:\n    void add(LargeMemoryBlock *lmb);\n    void remove(LargeMemoryBlock *lmb);\n    template<bool poolDestroy> void releaseAll(Backend *backend);\n};\n\nstruct ExtMemoryPool {\n    Backend           backend;\n    LargeObjectCache  loc;\n    AllLocalCaches    allLocalCaches;\n    OrphanedBlocks    orphanedBlocks;\n\n    intptr_t          poolId;\n    // To find all large objects. Used during user pool destruction,\n    // to release all backreferences in large blocks (slab blocks do not have them).\n    AllLargeBlocksList lmbList;\n    // Callbacks to be used instead of MapMemory/UnmapMemory.\n    rawAllocType      rawAlloc;\n    rawFreeType       rawFree;\n    size_t            granularity;\n    bool              keepAllMemory,\n                      delayRegsReleasing,\n    // TODO: implements fixedPool with calling rawFree on destruction\n                      fixedPool;\n    TLSKey            tlsPointerKey;  // per-pool TLS key\n\n    bool init(intptr_t poolId, rawAllocType rawAlloc, rawFreeType rawFree,\n              size_t granularity, bool keepAllMemory, bool fixedPool);\n    bool initTLS();\n\n    // i.e., not system default pool for scalable_malloc/scalable_free\n    bool userPool() const { return rawAlloc; }\n\n     // true if something has been released\n    bool softCachesCleanup();\n    bool releaseAllLocalCaches();\n    bool hardCachesCleanup();\n    void *remap(void *ptr, size_t oldSize, size_t newSize, size_t alignment);\n    bool reset() {\n        loc.reset();\n        allLocalCaches.reset();\n        orphanedBlocks.reset();\n        bool ret = tlsPointerKey.destroy();\n        backend.reset();\n        return ret;\n    }\n    bool destroy() {\n        MALLOC_ASSERT(isPoolValid(),\n                      \"Possible double pool_destroy or heap corruption\");\n        if (!userPool()) {\n            loc.reset();\n            allLocalCaches.reset();\n        }\n        // pthread_key_dtors must be disabled before memory unmapping\n        // TODO: race-free solution\n        bool ret = tlsPointerKey.destroy();\n        if (rawFree || !userPool())\n            ret &= backend.destroy();\n        // pool is not valid after this point\n        granularity = 0;\n        return ret;\n    }\n    void delayRegionsReleasing(bool mode) { delayRegsReleasing = mode; }\n    inline bool regionsAreReleaseable() const;\n\n    LargeMemoryBlock *mallocLargeObject(MemoryPool *pool, size_t allocationSize);\n    void freeLargeObject(LargeMemoryBlock *lmb);\n    void freeLargeObjectList(LargeMemoryBlock *head);\n    // use granulatity as marker for pool validity\n    bool isPoolValid() const { return granularity; }\n};\n\ninline bool Backend::inUserPool() const { return extMemPool->userPool(); }\n\nstruct LargeObjectHdr {\n    LargeMemoryBlock *memoryBlock;\n    /* Backreference points to LargeObjectHdr.\n       Duplicated in LargeMemoryBlock to reuse in subsequent allocations. */\n    BackRefIdx       backRefIdx;\n};\n\nstruct FreeObject {\n    FreeObject  *next;\n};\n\n\n/******* A helper class to support overriding malloc with scalable_malloc *******/\n#if MALLOC_CHECK_RECURSION\n\nclass RecursiveMallocCallProtector {\n    // pointer to an automatic data of holding thread\n    static void       *autoObjPtr;\n    static MallocMutex rmc_mutex;\n    static pthread_t   owner_thread;\n/* Under FreeBSD 8.0 1st call to any pthread function including pthread_self\n   leads to pthread initialization, that causes malloc calls. As 1st usage of\n   RecursiveMallocCallProtector can be before pthread initialized, pthread calls\n   can't be used in 1st instance of RecursiveMallocCallProtector.\n   RecursiveMallocCallProtector is used 1st time in checkInitialization(),\n   so there is a guarantee that on 2nd usage pthread is initialized.\n   No such situation observed with other supported OSes.\n */\n#if __FreeBSD__\n    static bool        canUsePthread;\n#else\n    static const bool  canUsePthread = true;\n#endif\n/*\n  The variable modified in checkInitialization,\n  so can be read without memory barriers.\n */\n    static bool mallocRecursionDetected;\n\n    MallocMutex::scoped_lock* lock_acquired;\n    char scoped_lock_space[sizeof(MallocMutex::scoped_lock)+1];\n\n    static uintptr_t absDiffPtr(void *x, void *y) {\n        uintptr_t xi = (uintptr_t)x, yi = (uintptr_t)y;\n        return xi > yi ? xi - yi : yi - xi;\n    }\npublic:\n\n    RecursiveMallocCallProtector() : lock_acquired(NULL) {\n        lock_acquired = new (scoped_lock_space) MallocMutex::scoped_lock( rmc_mutex );\n        if (canUsePthread)\n            owner_thread = pthread_self();\n        autoObjPtr = &scoped_lock_space;\n    }\n    ~RecursiveMallocCallProtector() {\n        if (lock_acquired) {\n            autoObjPtr = NULL;\n            lock_acquired->~scoped_lock();\n        }\n    }\n    static bool sameThreadActive() {\n        if (!autoObjPtr) // fast path\n            return false;\n        // Some thread has an active recursive call protector; check if the current one.\n        // Exact pthread_self based test\n        if (canUsePthread) {\n            if (pthread_equal( owner_thread, pthread_self() )) {\n                mallocRecursionDetected = true;\n                return true;\n            } else\n                return false;\n        }\n        // inexact stack size based test\n        const uintptr_t threadStackSz = 2*1024*1024;\n        int dummy;\n        return absDiffPtr(autoObjPtr, &dummy)<threadStackSz;\n    }\n    static bool noRecursion();\n/* The function is called on 1st scalable_malloc call to check if malloc calls\n   scalable_malloc (nested call must set mallocRecursionDetected). */\n    static void detectNaiveOverload() {\n        if (!malloc_proxy) {\n#if __FreeBSD__\n/* If !canUsePthread, we can't call pthread_self() before, but now pthread\n   is already on, so can do it. */\n            if (!canUsePthread) {\n                canUsePthread = true;\n                owner_thread = pthread_self();\n            }\n#endif\n            free(malloc(1));\n        }\n    }\n};\n\n#else\n\nclass RecursiveMallocCallProtector {\npublic:\n    RecursiveMallocCallProtector() {}\n    ~RecursiveMallocCallProtector() {}\n};\n\n#endif  /* MALLOC_CHECK_RECURSION */\n\nbool isMallocInitializedExt();\n\nunsigned int getThreadId();\n\nbool initBackRefMaster(Backend *backend);\nvoid destroyBackRefMaster(Backend *backend);\nvoid removeBackRef(BackRefIdx backRefIdx);\nvoid setBackRef(BackRefIdx backRefIdx, void *newPtr);\nvoid *getBackRef(BackRefIdx backRefIdx);\n\n} // namespace internal\n} // namespace rml\n\n#endif // __TBB_tbbmalloc_internal_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/tbbmalloc_internal_api.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbbmalloc_internal_api_H\n#define __TBB_tbbmalloc_internal_api_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\ntypedef enum {\n    /* Tune usage of source included allocator. Selected value is large enough\n       to not intercept with constants from AllocationModeParam. */\n    TBBMALLOC_INTERNAL_SOURCE_INCLUDED = 65536\n} AllocationModeInternalParam;\n\nvoid MallocInitializeITT();\nvoid __TBB_mallocProcessShutdownNotification();\n#if _WIN32||_WIN64\nvoid __TBB_mallocThreadShutdownNotification();\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* __cplusplus */\n\n#endif /* __TBB_tbbmalloc_internal_api_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/win32-gcc-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\nscalable_calloc;\nscalable_free;\nscalable_malloc;\nscalable_realloc;\nscalable_posix_memalign;\nscalable_aligned_malloc;\nscalable_aligned_realloc;\nscalable_aligned_free;\nscalable_msize;\nscalable_allocation_mode;\nscalable_allocation_command;\n__TBB_malloc_safer_free;\n__TBB_malloc_safer_realloc;\n__TBB_malloc_safer_msize;\n__TBB_malloc_safer_aligned_msize;\n__TBB_malloc_safer_aligned_realloc;\n/* memory pool stuff */\n_ZN3rml10pool_resetEPNS_10MemoryPoolE;\n_ZN3rml11pool_createEiPKNS_13MemPoolPolicyE;\n_ZN3rml14pool_create_v1EiPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;\n_ZN3rml11pool_mallocEPNS_10MemoryPoolEj;\n_ZN3rml12pool_destroyEPNS_10MemoryPoolE;\n_ZN3rml9pool_freeEPNS_10MemoryPoolEPv;\n_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;\n_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;\n_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;\n_ZN3rml13pool_identifyEPv;\n\nlocal:*;\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/win32-tbbmalloc-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\nEXPORTS\n\n; frontend.cpp\nscalable_calloc\nscalable_free\nscalable_malloc\nscalable_realloc\nscalable_posix_memalign\nscalable_aligned_malloc\nscalable_aligned_realloc\nscalable_aligned_free\nscalable_msize\nscalable_allocation_mode\nscalable_allocation_command\n__TBB_malloc_safer_free\n__TBB_malloc_safer_realloc\n__TBB_malloc_safer_msize\n__TBB_malloc_safer_aligned_msize\n__TBB_malloc_safer_aligned_realloc\n?pool_create@rml@@YAPAVMemoryPool@1@HPBUMemPoolPolicy@1@@Z\n?pool_create_v1@rml@@YA?AW4MemPoolError@1@HPBUMemPoolPolicy@1@PAPAVMemoryPool@1@@Z\n?pool_destroy@rml@@YA_NPAVMemoryPool@1@@Z\n?pool_malloc@rml@@YAPAXPAVMemoryPool@1@I@Z\n?pool_free@rml@@YA_NPAVMemoryPool@1@PAX@Z\n?pool_reset@rml@@YA_NPAVMemoryPool@1@@Z\n?pool_realloc@rml@@YAPAXPAVMemoryPool@1@PAXI@Z\n?pool_aligned_realloc@rml@@YAPAXPAVMemoryPool@1@PAXII@Z\n?pool_aligned_malloc@rml@@YAPAXPAVMemoryPool@1@II@Z\n?pool_identify@rml@@YAPAVMemoryPool@1@PAX@Z\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/win64-gcc-tbbmalloc-export.def",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n{\nglobal:\nscalable_calloc;\nscalable_free;\nscalable_malloc;\nscalable_realloc;\nscalable_posix_memalign;\nscalable_aligned_malloc;\nscalable_aligned_realloc;\nscalable_aligned_free;\nscalable_msize;\nscalable_allocation_mode;\nscalable_allocation_command;\n__TBB_malloc_safer_free;\n__TBB_malloc_safer_realloc;\n__TBB_malloc_safer_msize;\n__TBB_malloc_safer_aligned_msize;\n__TBB_malloc_safer_aligned_realloc;\n/* memory pool stuff */\n_ZN3rml10pool_resetEPNS_10MemoryPoolE;\n_ZN3rml11pool_createExPKNS_13MemPoolPolicyE;\n_ZN3rml14pool_create_v1ExPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;\n_ZN3rml11pool_mallocEPNS_10MemoryPoolEy;\n_ZN3rml12pool_destroyEPNS_10MemoryPoolE;\n_ZN3rml9pool_freeEPNS_10MemoryPoolEPv;\n_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvy;\n_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvyy;\n_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEyy;\n_ZN3rml13pool_identifyEPv;\n\nlocal:*;\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbmalloc/win64-tbbmalloc-export.def",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\nEXPORTS\n\n; frontend.cpp\nscalable_calloc\nscalable_free\nscalable_malloc\nscalable_realloc\nscalable_posix_memalign\nscalable_aligned_malloc\nscalable_aligned_realloc\nscalable_aligned_free\nscalable_msize\nscalable_allocation_mode\nscalable_allocation_command\n__TBB_malloc_safer_free\n__TBB_malloc_safer_realloc\n__TBB_malloc_safer_msize\n__TBB_malloc_safer_aligned_msize\n__TBB_malloc_safer_aligned_realloc\n; memory pool stuff\n?pool_create@rml@@YAPEAVMemoryPool@1@_JPEBUMemPoolPolicy@1@@Z\n?pool_create_v1@rml@@YA?AW4MemPoolError@1@_JPEBUMemPoolPolicy@1@PEAPEAVMemoryPool@1@@Z\n?pool_destroy@rml@@YA_NPEAVMemoryPool@1@@Z\n?pool_malloc@rml@@YAPEAXPEAVMemoryPool@1@_K@Z\n?pool_free@rml@@YA_NPEAVMemoryPool@1@PEAX@Z\n?pool_reset@rml@@YA_NPEAVMemoryPool@1@@Z\n?pool_realloc@rml@@YAPEAXPEAVMemoryPool@1@PEAX_K@Z\n?pool_aligned_realloc@rml@@YAPEAXPEAVMemoryPool@1@PEAX_K2@Z\n?pool_aligned_malloc@rml@@YAPEAXPEAVMemoryPool@1@_K1@Z\n?pool_identify@rml@@YAPEAVMemoryPool@1@PEAX@Z\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbproxy/tbbproxy-windows.asm",
    "content": "; Copyright (c) 2005-2018 Intel Corporation\n;\n; Licensed under the Apache License, Version 2.0 (the \"License\");\n; you may not use this file except in compliance with the License.\n; You may obtain a copy of the License at\n;\n;     http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable law or agreed to in writing, software\n; distributed under the License is distributed on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n; See the License for the specific language governing permissions and\n; limitations under the License.\n;\n;\n;\n;\n\n// __TBB_STRING macro defined in \"tbb_stddef.h\". However, we cannot include \"tbb_stddef.h\"\n// because it contains a lot of C/C++ definitions. So, we have to define __TBB_STRING here:\n#define __TBB_STRING_AUX( x ) #x\n#define __TBB_STRING( x ) __TBB_STRING_AUX( x )\n\n// Eliminate difference between IA-32 and Intel 64: AWORD is a type of pointer, LANG is language\n// specification for extern directive.\n#ifdef ARCH_ia32\n    #define AWORD dword\n    #define LANG  c\n#else\n    #define AWORD qword\n    #define LANG\n#endif\n\n#ifdef ARCH_ia32\n    // These directives are required for IA32 architecture only.\n    .686\n    .model flat, syscall\n#endif\n\n/*\n    Symbol names.\n*/\n\n// Note: masm for IA-32 does not like symbols defined as \"name:\" in data sections,\n// so we have to define symbols with \"name label type\" directive instead.\n\nfname macro sym:req\n    align sizeof AWORD\n    Ln_&sym& label byte\n    byte \"&sym&\", 0\nendm\n\n.const        // Symbol names are constants.\n#define __TBB_SYMBOL( sym ) fname sym\n#include __TBB_STRING( __TBB_LST )\n\n/*\n    Symbol descriptors.\n*/\n\nextern LANG __tbb_internal_runtime_loader_stub : AWORD\n\nfsymbol macro sym:req\n    Ls_&sym& label AWORD\n    AWORD __tbb_internal_runtime_loader_stub\n    AWORD Ln_&sym&\n    dword sizeof AWORD\n    dword 1\nendm\n\n.data\nalign sizeof AWORD\npublic LANG __tbb_internal_runtime_loader_symbols\n__tbb_internal_runtime_loader_symbols label AWORD\n#define __TBB_SYMBOL( sym ) fsymbol sym\n#include __TBB_STRING( __TBB_LST )\nAWORD 0, 0        // Terminator of the __tbb_internal_runtime_loader_symbols array.\ndword 0, 0\n\n/*\n    Generate functions.\n*/\n\n// Helper assembler macro to handle different naming conventions on IA-32 and Intel 64:\n// IA-32: C++ names preserved, C names require leading underscore.\n// Intel 64: All names preserved.\nmangle  macro name:req\n    #ifdef ARCH_ia32\n        if @instr( 1, name, <?> )\n            exitm @catstr( name )\n        else\n            exitm @catstr( <_>, name )\n        endif\n    #else\n        exitm @catstr( name )\n    #endif\nendm\n\nfunction macro sym:req\n    mangle( sym )  proc\n        jmp AWORD ptr Ls_&sym&\n    mangle( sym )  endp\nendm\n\n.code\n#define __TBB_SYMBOL( sym ) function sym\n#include __TBB_STRING( __TBB_LST )\n\nend\n\n// end of file //\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/tbbproxy/tbbproxy.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#if !__TBB_WIN8UI_SUPPORT\n#define TBB_PREVIEW_RUNTIME_LOADER 1\n#include \"tbb/runtime_loader.h\"\n#include \"tbb/tbb_stddef.h\"\n\n// C standard headers.\n#include <cctype>            // isspace\n#include <cstdarg>           // va_list, etc.\n#include <cstdio>            // fprintf, stderr, etc.\n#include <cstdlib>           // malloc, free, abort.\n#include <cstring>           // strlen, etc.\n\n// C++ standard headers.\n#include <typeinfo>\n\n// OS-specific includes.\n#if _WIN32 || _WIN64\n    #include <windows.h>\n    #define snprintf _snprintf\n    #undef max\n#else\n    #include <dlfcn.h>    // dlopen, dlsym, dlclose, dlerror.\n#endif\n\n#if TBB_USE_ASSERT\n    // We cannot use __TBB_ASSERT as it is because it calls a function from tbb library which may\n    // be not yet loaded. Redefine __TBB_ASSERT not to call tbb functions.\n    #undef __TBB_ASSERT\n    #define __TBB_ASSERT( cond, msg ) {                                                            \\\n        if ( ! (cond) ) {                                                                          \\\n            say( \"%s:%d: Assertion failed: %s.\", __FILE__, __LINE__, (msg) );                      \\\n        } /* if */                                                                                 \\\n        /* TODO: abort? */                                                                         \\\n    }\n#endif\n\n// Declare here, define at the bottom.\nextern \"C\" int __tbb_internal_runtime_loader_stub();\n\nnamespace tbb {\n\nnamespace interface6 {\n\nnamespace internal {\n\nnamespace runtime_loader {\n\n\n/*\n    ------------------------------------------------------------------------------------------------\n    User interaction utilities.\n    ------------------------------------------------------------------------------------------------\n*/\n\n\n// Print message to stderr. Do not call it directly, use say() or tell() instead.\nstatic void _say( char const * format, va_list args ) {\n    /*\n        On 64-bit Linux* OS, vsnprintf() modifies args argument,\n        so vsnprintf() crashes if it is called for the second time with the same args.\n        To prevent the crash, we have to pass a fresh intact copy of args to vsnprintf() each time.\n\n        On Windows* OS, unfortunately, standard va_copy() macro is not available. However, it\n        seems vsnprintf() does not modify args argument.\n    */\n    #if ! ( _WIN32 || _WIN64 )\n        va_list _args;\n        __va_copy( _args, args );  // Make copy of args.\n        #define args _args         // Substitute args with its copy, _args.\n    #endif\n    int len = vsnprintf( NULL, 0, format, args );\n    #if ! ( _WIN32 || _WIN64 )\n        #undef args                // Remove substitution.\n        va_end( _args );\n    #endif\n    char * buf = reinterpret_cast< char * >( malloc( len + 1 ) );\n    if ( buf != NULL ) {\n        vsnprintf( buf, len + 1, format, args );\n        fprintf( stderr, \"TBB: %s\\n\", buf );\n        free( buf );\n    } else {\n        fprintf( stderr, \"TBB: Not enough memory for message: %s\\n\", format );\n    }\n} // _say\n\n\n// Debug/test/troubleshooting printing controlled by TBB_VERSION environment variable.\n// To enable printing, the variable must be set and not empty.\n// Do not call it directly, use tell() instead.\nstatic void _tell( char const * format, va_list args ) {\n    char const * var = getenv( \"TBB_VERSION\" );\n    if ( var != NULL && var[ 0 ] != 0 ) {\n        _say( format, args );\n    } // if\n} // _tell\n\n\n// Print message to stderr unconditionally.\nstatic void say( char const * format, ... ) {\n    va_list args;\n    va_start( args, format );\n    _say( format, args );\n    va_end( args );\n} // say\n\n\n// Debug/test/troubleshooting printing controlled by TBB_VERSION environment variable.\n// To enable printing, the variable must be set and not empty.\nstatic void tell( char const * format, ... ) {\n    va_list args;\n    va_start( args, format );\n    _tell( format, args );\n    va_end( args );\n} // tell\n\n\n// Error reporting utility. Behavior depends on mode.\nstatic tbb::runtime_loader::error_code error( tbb::runtime_loader::error_mode mode, tbb::runtime_loader::error_code err, char const * format, ... ) {\n    va_list args;\n    va_start( args, format );\n    if ( mode == tbb::runtime_loader::em_abort ) {\n        // In em_abort mode error message printed unconditionally.\n        _say( format, args );\n    } else {\n        // In other modes printing depends on TBB_VERSION environment variable.\n        _tell( format, args );\n    } // if\n    va_end( args );\n    switch ( mode ) {\n        case tbb::runtime_loader::em_abort : {\n            say( \"Aborting...\" );\n            #if TBB_USE_DEBUG && ( _WIN32 || _WIN64 )\n                DebugBreak();\n            #endif\n            abort();\n        } break;\n        case tbb::runtime_loader::em_throw : {\n            throw err;\n        } break;\n        case tbb::runtime_loader::em_status : {\n            // Do nothing.\n        } break;\n    } // switch\n    return err;\n} // error\n\n\n/*\n    ------------------------------------------------------------------------------------------------\n    General-purpose string manipulation utilities.\n    ------------------------------------------------------------------------------------------------\n*/\n\n\n// Delete character ch from string str in-place.\nstatic void strip( char * str, char ch ) {\n    int in  = 0;  // Input character index.\n    int out = 0;  // Output character index.\n    for ( ; ; ) {\n        if ( str[ in ] != ch ) {\n            str[ out ] = str[ in ];\n            ++ out;\n        } // if\n        if ( str[ in ] == 0 ) {\n            break;\n        } // if\n        ++ in;\n    } // forever\n} // func strip\n\n\n// Strip trailing whitespaces in-place.\nstatic void trim( char * str ) {\n    size_t len = strlen( str );\n    while ( len > 0 && isspace( str[ len - 1 ] ) ) {\n        -- len;\n    } // while\n    str[ len ] = 0;\n} // func trim\n\n\n#if _WIN32 || _WIN64\n    // \"When specifying a path, be sure to use backslashes (\\), not forward slashes (/).\"\n    // (see http://msdn.microsoft.com/en-us/library/ms886736.aspx).\n    const char proper_slash = '\\\\';\n    inline char char_or_slash( char c ) { return c=='/'? '\\\\': c; }\n#else\n    const char proper_slash = '/';\n    inline char char_or_slash( char c ) { return c; }\n#endif\n\n// Concatenate name of directory and name of file.\nvoid cat_file( char const * dir, char const * file, char * buffer, size_t len ) {\n    size_t i = 0;\n    // Copy directory name\n    for( ; i<len && *dir; ++i, ++dir ) {\n        buffer[i] = char_or_slash(*dir);\n    }\n    // Append trailing slash if missed.\n    if( i>0 && i<len && buffer[i-1]!=proper_slash ) {\n        buffer[i++] = proper_slash;\n    }\n    // Copy file name\n    __TBB_ASSERT( char_or_slash(*file)!=proper_slash, \"File name starts with a slash\" );\n    for( ; i<len && *file; ++i, ++file ) {\n        buffer[i] = *file;\n    }\n    // Append null terminator\n    buffer[ i<len? i: len-1 ] = '\\0';\n} // cat_file\n\n\n/*\n    ------------------------------------------------------------------------------------------------\n    Windows implementation of dlopen, dlclose, dlsym, dlerror.\n    ------------------------------------------------------------------------------------------------\n*/\n\n\n#if _WIN32 || _WIN64\n\n    // Implement Unix-like interface (dlopen, dlclose, dlsym, dlerror) via Win32 API functions.\n\n    // Type of dlopen result.\n    typedef HMODULE handle_t;\n\n    enum rtld_flags_t {\n        RTLD_NOW,\n        RTLD_GLOBAL\n    }; // enum rtld_flags_t\n\n    // Unix-like dlopen().\n    static handle_t dlopen( char const * name, rtld_flags_t ) {\n        return LoadLibrary( name );\n    } // dlopen\n\n    // Unix-like dlsym().\n    static void * dlsym( handle_t lib, char const * sym ) {\n        return (void*)GetProcAddress( lib, sym );\n    } // dlsym\n\n    // Unix-like dlclose().\n    static int dlclose( handle_t lib ) {\n        return ! FreeLibrary( lib );\n    } // dlclose\n\n    // The function mimics Unix dlerror() function.\n    // Note: Not thread-safe due to statically allocated buffer.\n    static char * dlerror() {\n\n        static char buffer[ 2048 ];  // Note: statically allocated buffer.\n\n        DWORD err = GetLastError();\n        if ( err == ERROR_SUCCESS ) {\n            return NULL;\n        } // if\n\n        DWORD rc;\n        rc =\n            FormatMessage(\n                FORMAT_MESSAGE_FROM_SYSTEM,\n                NULL,\n                err,\n                MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language.\n                reinterpret_cast< LPTSTR >( & buffer ),\n                sizeof( buffer ),\n                NULL\n            );\n        if ( rc == 0 ) {\n            // FormatMessage() failed to format system error message. Buffer to short or another issue.\n            snprintf( buffer, sizeof( buffer ), \"System error %u.\", err );\n        } else {\n            /*\n                FormatMessage() returns Windows-style end-of-lines, \"\\r\\n\". When string is printed,\n                printf() also replaces all the occurrences of \"\\n\" with \"\\r\\n\" (again!), so sequences\n                like \"\\r\\r\\r\\n\" appear in output. It is not too good. Stripping all \"\\r\" normalizes\n                string and returns it to canonical form, so printf() will produce correct end-of-line\n                sequences.\n            */\n            strip( buffer, '\\r' );   // Delete carriage returns if any.\n            trim( buffer );          // Delete trailing newlines and spaces.\n        } // if\n\n        return buffer;\n\n    } // dlerror\n\n#else\n\n    // Type of dlopen() result.\n    typedef void * handle_t;\n\n#endif\n\n\n/*\n    ------------------------------------------------------------------------------------------------\n    Runtime loader stuff.\n    ------------------------------------------------------------------------------------------------\n*/\n\n\n// Descriptor table declaration. It is defined in assembler file.\nenum symbol_type_t {\n    st_object   = 0,\n    st_function = 1\n}; // enum symbol_type_t\nstruct symbol_t {\n    void *        addr;\n    char const *  name;\n    int           size;\n    symbol_type_t type;\n}; // symbol_t\nextern \"C\" symbol_t __tbb_internal_runtime_loader_symbols[];\n\n// Hooks for internal use (e. g. for testing).\ntbb::runtime_loader::error_mode stub_mode = tbb::runtime_loader::em_abort;\n\nstatic char const * tbb_dll_name = __TBB_STRING(__TBB_DLL_NAME);  // Name of TBB library.\nstatic handle_t     handle       = NULL;                          // Handle of loaded TBB library or NULL.\nstatic int          version      = 0;                             // Version of the loaded library.\nstatic int          counter      = 0;                             // Number of runtime_loader objects using the loaded library.\n\n#define ANOTHER_RTL \"probably multiple runtime_loader objects work in parallel\"\n\n\n// One attempt to load library (dll_name can be a full path or just a file name).\nstatic tbb::runtime_loader::error_code _load( char const * dll_name, int min_ver, int max_ver ) {\n\n    tbb::runtime_loader::error_mode mode = tbb::runtime_loader::em_status;\n    tbb::runtime_loader::error_code code = tbb::runtime_loader::ec_ok;\n\n    /*\n        If these variables declared at the first usage, Intel C++ Compiler may issue warning(s):\n            transfer of control [goto error] bypasses initialization of: ...\n        Declaring variables at the beginning of the function eliminates warnings.\n    */\n    typedef int (*int_func_t)( void );\n    char const * get_ver_name = \"TBB_runtime_interface_version\"; // Name of function.\n    int_func_t   get_ver_func = NULL;                            // Pointer to function.\n    handle_t     _handle      = NULL;\n    int          _version     = 0;\n    int          total        = 0;\n    int          not_found    = 0;\n\n    // This function should be called iff there is no loaded library.\n    __TBB_ASSERT( handle  == NULL, \"Handle is invalid; \"  ANOTHER_RTL );\n    __TBB_ASSERT( version == 0,    \"Version is invalid; \" ANOTHER_RTL );\n    __TBB_ASSERT( counter == 0,    \"Counter is invalid; \" ANOTHER_RTL );\n\n    tell( \"Loading \\\"%s\\\"...\", dll_name );\n\n    // First load the library.\n    _handle = dlopen( dll_name, RTLD_NOW );\n    if ( _handle == NULL ) {\n        const char * msg = dlerror();\n        code = error( mode, tbb::runtime_loader::ec_no_lib, \"Loading \\\"%s\\\" failed; system error: %s\", dll_name, msg );\n        goto error;\n    } // if\n\n    // Then try to find out its version.\n    /*\n        g++ 3.4 issues error:\n            ISO C++ forbids casting between pointer-to-function and pointer-to-object\n        on reinterpret_cast<>. Thus, we have no choice but using C-style type cast.\n    */\n    get_ver_func = (int_func_t) dlsym( _handle, get_ver_name );\n    if ( get_ver_func == NULL ) {\n        code = error( mode, tbb::runtime_loader::ec_bad_lib, \"Symbol \\\"%s\\\" not found; library rejected.\", get_ver_name );\n        goto error;\n    } // if\n    _version = get_ver_func();\n    if ( ! ( min_ver <= _version && _version <= max_ver ) ) {\n        code = error( mode, tbb::runtime_loader::ec_bad_ver, \"Version %d is out of requested range; library rejected.\", _version );\n        goto error;\n    } // if\n\n    // Library is suitable. Mark it as loaded.\n    handle   = _handle;\n    version  = _version;\n    counter += 1;\n    __TBB_ASSERT( counter == 1, \"Counter is invalid; \" ANOTHER_RTL );\n\n    // Now search for all known symbols.\n    for ( int i = 0; __tbb_internal_runtime_loader_symbols[ i ].name != NULL; ++ i ) {\n        symbol_t & symbol = __tbb_internal_runtime_loader_symbols[ i ];\n        // Verify symbol descriptor.\n        __TBB_ASSERT( symbol.type == st_object || symbol.type == st_function, \"Invalid symbol type\" );\n        #if _WIN32 || _WIN64\n            __TBB_ASSERT( symbol.type == st_function, \"Should not be symbols of object type on Windows\" );\n        #endif\n        if ( symbol.type == st_object ) {\n            __TBB_ASSERT( symbol.addr != NULL, \"Object address invalid\" );\n            __TBB_ASSERT( symbol.size > 0, \"Symbol size must be > 0\" );\n            __TBB_ASSERT( symbol.size <= 0x1000, \"Symbol size too big\" );\n        } else {                     // Function\n            // __TBB_ASSERT( symbol.addr == reinterpret_cast< void * >( & stub ), \"Invalid symbol address\" );\n            __TBB_ASSERT( symbol.size == sizeof( void * ), \"Invalid symbol size\" );\n        } // if\n        void * addr = dlsym( _handle, symbol.name );\n        if ( addr != NULL ) {\n            if ( symbol.type == st_object ) {\n                if ( strncmp( symbol.name, \"_ZTS\", 4 ) == 0 ) {\n                    // If object name begins with \"_ZTS\", it is a string, mangled type name.\n                    // Its value must equal to name of symbol without \"_ZTS\" prefix.\n                    char const * name = static_cast< char const * >( addr );\n                    __TBB_ASSERT( strlen( name ) + 1 == size_t( symbol.size ), \"Unexpected size of typeinfo name\" );\n                    __TBB_ASSERT( strcmp( symbol.name + 4, name ) == 0, \"Unexpected content of typeinfo name\" );\n                    strncpy( reinterpret_cast< char * >( symbol.addr ), name, symbol.size );\n                    reinterpret_cast< char * >( symbol.addr )[ symbol.size - 1 ] = 0;\n                } else {\n                    #if TBB_USE_ASSERT\n                        // If object name begins with \"_ZTI\", it is an object of std::type_info class.\n                        // Its protected value must equal to name of symbol without \"_ZTI\" prefix.\n                        if ( strncmp( symbol.name, \"_ZTI\", 4 ) == 0 ) {\n                            std::type_info const * info = static_cast< std::type_info const * >( addr );\n                            __TBB_ASSERT( size_t( symbol.size ) >= sizeof( std::type_info ), \"typeinfo size is too small\" );\n                            // std::type_info::name is not a virtual method, it is safe to call it.\n                            __TBB_ASSERT( strcmp( symbol.name + 4, info->name() ) == 0, \"Unexpected content of typeinfo\" );\n                        } // if\n                    #endif\n                    // Copy object content from libtbb into runtime_loader.\n                    memcpy( symbol.addr, addr, symbol.size );\n                }; // if\n            } else {                     // Function\n                symbol.addr = addr;\n            } // if\n        } else {\n            char const * msg = dlerror();\n            tell( \"Symbol \\\"%s\\\" not found; system error: %s\", symbol.name, msg );\n            ++ not_found;\n        } // if\n        ++ total;\n    } // for i\n\n    if ( not_found > 0 ) {\n        tell( \"%d of %d symbols not found.\", not_found, total );\n    } // if\n\n    tell( \"The library successfully loaded.\" );\n    return code;\n\n    error:\n        if ( _handle != NULL ) {\n            int rc = dlclose( _handle );\n            if ( rc != 0 ) {\n                // Error occurred.\n                __TBB_ASSERT( rc != 0, \"Unexpected error: dlclose() failed\" );\n            } // if\n        } // if\n        _handle = NULL;\n        return code;\n\n} // _load\n\n\nstatic tbb::runtime_loader::error_code load( tbb::runtime_loader::error_mode mode, char const * path[], int min_ver, int max_ver ) {\n    // Check arguments first.\n    if ( min_ver <= 0 ) {\n        return error( mode, tbb::runtime_loader::ec_bad_arg, \"tbb::runtime_loader::load(): Invalid value of min_ver argument: %d.\", min_ver );\n    } // if\n    if ( max_ver <= 0 ) {\n        return error( mode, tbb::runtime_loader::ec_bad_arg, \"tbb::runtime_loader::load(): Invalid value of max_ver argument: %d.\", max_ver );\n    } // if\n    if ( min_ver > max_ver ) {\n        return error( mode, tbb::runtime_loader::ec_bad_arg, \"tbb::runtime_loader::load(): min_ver and max_ver specify empty range: [%d, %d].\", min_ver, max_ver );\n    } // if\n    if ( min_ver == max_ver ) {\n        tell( \"Searching for \\\"%s\\\" version %d...\", tbb_dll_name, min_ver );\n    } else if ( max_ver == INT_MAX ) {\n        tell( \"Searching for \\\"%s\\\" version %d+...\", tbb_dll_name, min_ver );\n    } else {\n        tell( \"Searching for \\\"%s\\\" version in range [%d, %d]...\", tbb_dll_name, min_ver, max_ver );\n    } // if\n    // Then check whether a library already loaded.\n    if ( handle != NULL ) {\n        // Library already loaded. Check whether the version is compatible.\n        __TBB_ASSERT( version > 0, \"Version is invalid; \" ANOTHER_RTL );\n        __TBB_ASSERT( counter > 0, \"Counter is invalid; \" ANOTHER_RTL );\n        if ( min_ver <= version && version <= max_ver ) {\n            // Version is ok, let us use this library.\n            tell( \"Library version %d is already loaded.\", version );\n            counter += 1;\n            return tbb::runtime_loader::ec_ok;\n        } else {\n            // Version is not suitable.\n            return error( mode, tbb::runtime_loader::ec_bad_ver, \"Library version %d is already loaded.\", version );\n        } // if\n    } // if\n    // There is no loaded library, try to load it using provided directories.\n    __TBB_ASSERT( version == 0, \"Version is invalid; \" ANOTHER_RTL );\n    __TBB_ASSERT( counter == 0, \"Counter is invalid; \" ANOTHER_RTL );\n    size_t namelen = strlen(tbb_dll_name);\n    size_t buflen = 0;\n    char * buffer = NULL;\n    for ( int i = 0; path[i] != NULL; ++ i ) {\n        size_t len = strlen(path[i]) + namelen + 2; // 1 for slash and 1 for null terminator\n        if( buflen<len ) {\n            free( buffer );\n            buflen = len;\n            buffer = (char*)malloc( buflen );\n            if( !buffer )\n                return error( mode, tbb::runtime_loader::ec_no_lib, \"Not enough memory.\" );\n        }\n        cat_file( path[i], tbb_dll_name, buffer, buflen );\n        __TBB_ASSERT(strstr(buffer,tbb_dll_name), \"Name concatenation error\");\n        tbb::runtime_loader::error_code ec = _load( buffer, min_ver, max_ver );\n        if ( ec == tbb::runtime_loader::ec_ok ) {\n            return ec;       // Success. Exiting...\n        } // if\n    } // for i\n    free( buffer );\n    return error( mode, tbb::runtime_loader::ec_no_lib, \"No suitable library found.\" );\n} // load\n\n\n\n\n// Suppress \"defined but not used\" compiler warnings.\nstatic void const * dummy[] = {\n    (void *) & strip,\n    (void *) & trim,\n    & dummy,\n    NULL\n};\n\n\n} // namespace runtime_loader\n\n} // namespace internal\n\n\nruntime_loader::runtime_loader( error_mode mode ) :\n    my_mode( mode ),\n    my_status( ec_ok ),\n    my_loaded( false )\n{\n} // ctor\n\n\nruntime_loader::runtime_loader( char const * path[], int min_ver, int max_ver, error_mode mode ) :\n    my_mode( mode ),\n    my_status( ec_ok ),\n    my_loaded( false )\n{\n    load( path, min_ver, max_ver );\n} // ctor\n\n\nruntime_loader::~runtime_loader() {\n} // dtor\n\n\ntbb::runtime_loader::error_code runtime_loader::load( char const * path[], int min_ver, int max_ver ) {\n    if ( my_loaded ) {\n        my_status = tbb::interface6::internal::runtime_loader::error( my_mode, ec_bad_call, \"tbb::runtime_loader::load(): Library already loaded by this runtime_loader object.\" );\n    } else {\n        my_status = internal::runtime_loader::load( my_mode, path, min_ver, max_ver );\n        if ( my_status == ec_ok ) {\n            my_loaded = true;\n        } // if\n    } // if\n    return my_status;\n} // load\n\n\n\n\ntbb::runtime_loader::error_code runtime_loader::status() {\n    return my_status;\n} // status\n\n\n} // namespace interface6\n\n} // namespace tbb\n\n\n// Stub function replaces all TBB entry points when no library is loaded.\nint __tbb_internal_runtime_loader_stub() {\n    char const * msg = NULL;\n    if ( tbb::interface6::internal::runtime_loader::handle == NULL ) {\n        msg = \"A function is called while TBB library is not loaded\";\n    } else {\n        msg = \"A function is called which is not present in loaded TBB library\";\n    } // if\n    return tbb::interface6::internal::runtime_loader::error( tbb::interface6::internal::runtime_loader::stub_mode, tbb::runtime_loader::ec_no_lib, msg );\n} // stub\n\n#endif // !__TBB_WIN8UI_SUPPORT //\n// end of file //\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for rock-bottom simple test harness.\n// Just include this file to use it.\n// Every test is presumed to have a command line of the form \"test [-v] [MinThreads[:MaxThreads]]\"\n// The default for MinThreads is 1, for MaxThreads 4.\n// The defaults can be overridden by defining macros HARNESS_DEFAULT_MIN_THREADS\n// and HARNESS_DEFAULT_MAX_THREADS before including harness.h\n\n#ifndef tbb_tests_harness_H\n#define tbb_tests_harness_H\n\n#include \"tbb/tbb_config.h\"\n#include \"harness_defs.h\"\n\nnamespace Harness {\n    enum TestResult {\n        Done,\n        Skipped,\n        Unknown\n    };\n}\n\n//! Entry point to a TBB unit test application\n/** It MUST be defined by the test application.\n\n    If HARNESS_NO_PARSE_COMMAND_LINE macro was not explicitly set before including harness.h,\n    then global variables MinThread, and MaxThread will be available and\n    initialized when it is called.\n\n    Returns Harness::Done when the tests passed successfully. When the test fail, it must\n    not return, calling exit(errcode) or abort() instead. When the test is not supported\n    for the given platform/compiler/etc, it should return Harness::Skipped.\n\n    To provide non-standard variant of main() for the test, define HARNESS_CUSTOM_MAIN\n    before including harness.h **/\nint TestMain ();\n\n#if __SUNPRO_CC\n    #include <stdlib.h>\n    #include <string.h>\n    #include <ucontext.h>\n#else /* !__SUNPRO_CC */\n    #include <cstdlib>\n    #include <cstring>\n#endif /* !__SUNPRO_CC */\n\n#include <new>\n\n#if __TBB_MIC_NATIVE\n    #include \"harness_mic.h\"\n#else\n    #define HARNESS_EXPORT\n    #define REPORT_FATAL_ERROR REPORT\n#endif /* !__MIC__ */\n\n#if _WIN32||_WIN64\n    #include \"tbb/machine/windows_api.h\"\n    #if _WIN32_WINNT > 0x0501 && _MSC_VER && !_M_ARM\n        // Suppress \"typedef ignored ... when no variable is declared\" warning by vc14\n        #pragma warning (push)\n        #pragma warning (disable: 4091)\n        #include <dbghelp.h>\n        #pragma warning (pop)\n        #pragma comment (lib, \"dbghelp.lib\")\n    #endif\n    #if __TBB_WIN8UI_SUPPORT\n        #include <thread>\n    #endif\n    #if _MSC_VER\n        #include <crtdbg.h>\n    #endif\n    #include <process.h>\n#else\n    #include <pthread.h>\n#endif\n\n#if __linux__\n    #include <sys/utsname.h> /* for uname */\n    #include <errno.h>       /* for use in LinuxKernelVersion() */\n    #include <features.h>\n#endif\n// at least GLIBC 2.1 or OSX 10.5\n#if __GLIBC__>2 || ( __GLIBC__==2 && __GLIBC_MINOR__ >= 1) || __APPLE__\n    #include <execinfo.h> /*backtrace*/\n    #define BACKTRACE_FUNCTION_AVAILABLE 1\n#endif\n\nnamespace Harness {\n    class NativeMutex {\n#if _WIN32||_WIN64\n        CRITICAL_SECTION my_critical_section;\n      public:\n        NativeMutex() {\n            InitializeCriticalSectionEx(&my_critical_section, 4000, 0);\n        }\n        void lock() {\n            EnterCriticalSection(&my_critical_section);\n        }\n        void unlock() {\n            LeaveCriticalSection(&my_critical_section);\n        }\n        ~NativeMutex() {\n            DeleteCriticalSection(&my_critical_section);\n        }\n#else\n        pthread_mutex_t m_mutex;\n    public:\n        NativeMutex() {\n             pthread_mutex_init(&m_mutex, NULL);\n        }\n        void lock() {\n            pthread_mutex_lock(&m_mutex);\n        }\n        void unlock() {\n            pthread_mutex_unlock(&m_mutex);\n        }\n        ~NativeMutex() {\n            pthread_mutex_destroy(&m_mutex);\n        }\n#endif\n    };\n    namespace internal {\n        static NativeMutex print_stack_mutex;\n    }\n}\n\n#include \"harness_runtime_loader.h\"\n#include \"harness_report.h\"\n\n//! Prints current call stack\nvoid print_call_stack() {\n    Harness::internal::print_stack_mutex.lock();\n    fflush(stdout); fflush(stderr);\n    #if BACKTRACE_FUNCTION_AVAILABLE\n        const int sz = 100; // max number of frames to capture\n        void *buff[sz];\n        int n = backtrace(buff, sz);\n        REPORT(\"Call stack info (%d):\\n\", n);\n        backtrace_symbols_fd(buff, n, fileno(stdout));\n    #elif __SUNPRO_CC\n        REPORT(\"Call stack info:\\n\");\n        printstack(fileno(stdout));\n    #elif _WIN32_WINNT > 0x0501 && _MSC_VER>=1500 && !__TBB_WIN8UI_SUPPORT\n        const int sz = 62; // XP limitation for number of frames\n        void *buff[sz];\n        int n = CaptureStackBackTrace(0, sz, buff, NULL);\n        REPORT(\"Call stack info (%d):\\n\", n);\n        static LONG once = 0;\n        if( !InterlockedExchange(&once, 1) )\n            SymInitialize(GetCurrentProcess(), NULL, TRUE);\n        const int len = 255; // just some reasonable string buffer size\n        union { SYMBOL_INFO sym; char pad[sizeof(SYMBOL_INFO)+len]; };\n        sym.MaxNameLen = len;\n        sym.SizeOfStruct = sizeof( SYMBOL_INFO );\n        DWORD64 offset;\n        for(int i = 1; i < n; i++) { // skip current frame\n            if(!SymFromAddr( GetCurrentProcess(), DWORD64(buff[i]), &offset, &sym )) {\n                sym.Address = ULONG64(buff[i]); offset = 0; sym.Name[0] = 0;\n            }\n            REPORT(\"[%d] %016I64X+%04I64X: %s\\n\", i, sym.Address, offset, sym.Name); //TODO: print module name\n        }\n    #endif /*BACKTRACE_FUNCTION_AVAILABLE*/\n    Harness::internal::print_stack_mutex.unlock();\n}\n\n#if !HARNESS_NO_ASSERT\n    #include <exception> //for set_terminate\n    #include \"harness_assert.h\"\n    #if TEST_USES_TBB\n        #include <tbb/tbb_stddef.h> /*set_assertion_handler*/\n    #endif\n\n    struct InitReporter {\n        void (*default_terminate_handler)() ;\n        InitReporter(): default_terminate_handler(NULL) {\n            #if TEST_USES_TBB\n                #if TBB_USE_ASSERT\n                    tbb::set_assertion_handler(ReportError);\n                #endif\n                ASSERT_WARNING(TBB_INTERFACE_VERSION <= tbb::TBB_runtime_interface_version(), \"runtime version mismatch\");\n            #endif\n            #if TBB_USE_EXCEPTIONS\n                default_terminate_handler = std::set_terminate(handle_terminate);\n            #endif\n        }\n        static void handle_terminate();\n    };\n    static InitReporter InitReportError;\n\n    void InitReporter::handle_terminate(){\n        REPORT(\"std::terminate called.\\n\");\n        print_call_stack();\n        if (InitReportError.default_terminate_handler){\n            InitReportError.default_terminate_handler();\n        }\n    }\n\n    typedef void (*test_error_extra_t)(void);\n    static test_error_extra_t ErrorExtraCall;\n    //! Set additional handler to process failed assertions\n    void SetHarnessErrorProcessing( test_error_extra_t extra_call ) {\n        ErrorExtraCall = extra_call;\n    }\n\n    //! Reports errors issued by failed assertions\n    void ReportError( const char* filename, int line, const char* expression, const char * message ) {\n        print_call_stack();\n    #if __TBB_ICL_11_1_CODE_GEN_BROKEN\n        printf(\"%s:%d, assertion %s: %s\\n\", filename, line, expression, message ? message : \"failed\" );\n    #else\n        REPORT_FATAL_ERROR(\"%s:%d, assertion %s: %s\\n\", filename, line, expression, message ? message : \"failed\" );\n    #endif\n\n        if( ErrorExtraCall )\n            (*ErrorExtraCall)();\n        fflush(stdout); fflush(stderr);\n    #if HARNESS_TERMINATE_ON_ASSERT\n        TerminateProcess(GetCurrentProcess(), 1);\n    #elif HARNESS_EXIT_ON_ASSERT\n        exit(1);\n    #elif HARNESS_CONTINUE_ON_ASSERT\n        // continue testing\n    #elif _MSC_VER && _DEBUG\n        // aligned with tbb_assert_impl.h behavior\n        if(1 == _CrtDbgReport(_CRT_ASSERT, filename, line, NULL, \"%s\\r\\n%s\", expression, message?message:\"\"))\n            _CrtDbgBreak();\n    #else\n        abort();\n    #endif /* HARNESS_EXIT_ON_ASSERT */\n    }\n    //! Reports warnings issued by failed warning assertions\n    void ReportWarning( const char* filename, int line, const char* expression, const char * message ) {\n        REPORT(\"Warning: %s:%d, assertion %s: %s\\n\", filename, line, expression, message ? message : \"failed\" );\n    }\n\n#else /* !HARNESS_NO_ASSERT */\n\n    #define ASSERT(p,msg) (Harness::suppress_unused_warning(p), (void)0)\n    #define ASSERT_WARNING(p,msg) (Harness::suppress_unused_warning(p), (void)0)\n\n#endif /* !HARNESS_NO_ASSERT */\n\nnamespace Harness {\n    //TODO: unify with utility::internal::array_length from examples common utilities\n    template<typename T, size_t N>\n    inline size_t array_length(const T(&)[N])\n    {\n       return N;\n    }\n\n    template<typename T, size_t N>\n    inline T* end( T(& array)[N])\n    {\n       return array+ array_length(array) ;\n    }\n\n} //namespace Harness\n\n#if TEST_USES_TBB\n    #include \"tbb/blocked_range.h\"\n\n    namespace Harness {\n        template<typename T, size_t N>\n        tbb::blocked_range<T*> make_blocked_range( T(& array)[N]){ return tbb::blocked_range<T*>(array, array + N);}\n    }\n#endif\n\n#if !HARNESS_NO_PARSE_COMMAND_LINE\n\n//! Controls level of commentary printed via printf-like REMARK() macro.\n/** If true, makes the test print commentary.  If false, test should print \"done\" and nothing more. */\nstatic bool Verbose;\n\n#ifndef HARNESS_DEFAULT_MIN_THREADS\n    #define HARNESS_DEFAULT_MIN_THREADS 1\n#endif\n\n//! Minimum number of threads\nstatic int MinThread = HARNESS_DEFAULT_MIN_THREADS;\n\n#ifndef HARNESS_DEFAULT_MAX_THREADS\n    #define HARNESS_DEFAULT_MAX_THREADS 4\n#endif\n\n//! Maximum number of threads\nstatic int MaxThread = HARNESS_DEFAULT_MAX_THREADS;\n\n//! Parse command line of the form \"name [-v] [MinThreads[:MaxThreads]]\"\n/** Sets Verbose, MinThread, and MaxThread accordingly.\n    The nthread argument can be a single number or a range of the form m:n.\n    A single number m is interpreted as if written m:m.\n    The numbers must be non-negative.\n    Clients often treat the value 0 as \"run sequentially.\" */\nstatic void ParseCommandLine( int argc, char* argv[] ) {\n    if( !argc ) REPORT(\"Command line with 0 arguments\\n\");\n    int i = 1;\n    if( i<argc ) {\n        if( strncmp( argv[i], \"-v\", 2 )==0 ) {\n            Verbose = true;\n            ++i;\n        }\n    }\n    if( i<argc ) {\n        char* endptr;\n        MinThread = strtol( argv[i], &endptr, 0 );\n        if( *endptr==':' )\n            MaxThread = strtol( endptr+1, &endptr, 0 );\n        else if( *endptr=='\\0' )\n            MaxThread = MinThread;\n        if( *endptr!='\\0' ) {\n            REPORT_FATAL_ERROR(\"garbled nthread range\\n\");\n            exit(1);\n        }\n        if( MinThread<0 ) {\n            REPORT_FATAL_ERROR(\"nthread must be nonnegative\\n\");\n            exit(1);\n        }\n        if( MaxThread<MinThread ) {\n            REPORT_FATAL_ERROR(\"nthread range is backwards\\n\");\n            exit(1);\n        }\n        ++i;\n    }\n#if __TBB_STDARGS_BROKEN\n    if ( !argc )\n        argc = 1;\n    else {\n        while ( i < argc && argv[i][0] == 0 )\n            ++i;\n    }\n#endif /* __TBB_STDARGS_BROKEN */\n    if( i!=argc ) {\n        REPORT_FATAL_ERROR(\"Usage: %s [-v] [nthread|minthread:maxthread]\\n\", argv[0] );\n        exit(1);\n    }\n}\n#endif /* HARNESS_NO_PARSE_COMMAND_LINE */\n\n#if !HARNESS_CUSTOM_MAIN\n\n#if __TBB_MPI_INTEROP\n#undef SEEK_SET\n#undef SEEK_CUR\n#undef SEEK_END\n#include \"mpi.h\"\n#endif\n\n#if __TBB_MIC_OFFLOAD && __MIC__\nextern \"C\" int COIProcessProxyFlush();\n#endif\n\nHARNESS_EXPORT\n#if HARNESS_NO_PARSE_COMMAND_LINE\nint main() {\n#if __TBB_MPI_INTEROP\n    MPI_Init(NULL,NULL);\n#endif\n#else\nint main(int argc, char* argv[]) {\n    ParseCommandLine( argc, argv );\n#if __TBB_MPI_INTEROP\n    MPI_Init(&argc,&argv);\n#endif\n#endif\n#if HARNESS_SKIP_TEST\n    REPORT( \"skip\\n\" );\n    return 0;\n#else\n#if __TBB_MPI_INTEROP\n    // Simple TBB/MPI interoperability harness for most of tests\n    // Worker processes send blocking messages to the master process about their rank and group size\n    // Master process receives this info and print it in verbose mode\n    int rank, size, myrank;\n    MPI_Status status;\n    MPI_Comm_size(MPI_COMM_WORLD,&size);\n    MPI_Comm_rank(MPI_COMM_WORLD,&myrank);\n    if (myrank == 0) {\n#if !HARNESS_NO_PARSE_COMMAND_LINE\n        REMARK(\"Hello mpi world. I am %d of %d\\n\", myrank, size);\n#endif\n        for ( int i = 1; i < size; i++ ) {\n            MPI_Recv (&rank, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &status);\n            MPI_Recv (&size, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &status);\n#if !HARNESS_NO_PARSE_COMMAND_LINE\n            REMARK(\"Hello mpi world. I am %d of %d\\n\", rank, size);\n#endif\n        }\n    } else {\n        MPI_Send (&myrank, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);\n        MPI_Send (&size, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);\n    }\n#endif\n\n    int res = Harness::Unknown;\n#if __TBB_MIC_OFFLOAD\n    // \"mic:-1\" or \"mandatory\" specifies execution on the target. The runtime\n    // system chooses the specific target. Execution on the CPU is not allowed.\n#if __INTEL_COMPILER < 1400\n    #pragma offload target(mic:-1) out(res)\n#else\n    #pragma offload target(mic) out(res) mandatory\n#endif\n#endif\n    {\n        res = TestMain();\n#if __TBB_MIC_OFFLOAD && __MIC__\n        // It is recommended not to use the __MIC__ macro directly in the offload block but it is Ok here\n        // since it is not lead to an unexpected difference between host and target compilation phases.\n        // We need to flush internals COI buffers to order output from the offload part before the host part.\n        // Also it is work-around for the issue with missed output.\n        COIProcessProxyFlush();\n#endif\n    }\n\n    ASSERT( res==Harness::Done || res==Harness::Skipped, \"Wrong return code by TestMain\");\n#if __TBB_MPI_INTEROP\n    if (myrank == 0) {\n        REPORT( res==Harness::Done ? \"done\\n\" : \"skip\\n\" );\n    }\n    MPI_Finalize();\n#else\n    REPORT( res==Harness::Done ? \"done\\n\" : \"skip\\n\" );\n#endif\n    return 0;\n#endif /* HARNESS_SKIP_TEST */\n}\n\n#endif /* !HARNESS_CUSTOM_MAIN */\n\n//! Base class for prohibiting compiler-generated operator=\nclass NoAssign {\n    //! Assignment not allowed\n    void operator=( const NoAssign& );\npublic:\n    NoAssign() {} // explicitly defined to prevent gratuitous warnings\n};\n\n//! Base class for prohibiting compiler-generated copy constructor or operator=\nclass NoCopy: NoAssign {\n    //! Copy construction not allowed\n    NoCopy( const NoCopy& );\npublic:\n    NoCopy() {}\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include <utility>\n\n//! Base class for objects which support move ctors\nclass Movable {\npublic:\n    Movable() : alive(true) {}\n    void Reset() { alive = true; }\n    Movable(Movable&& other) {\n        ASSERT(other.alive, \"Moving from a dead object\");\n        alive = true;\n        other.alive = false;\n    }\n    Movable& operator=(Movable&& other) {\n        ASSERT(alive, \"Assignment to a dead object\");\n        ASSERT(other.alive, \"Assignment of a dead object\");\n        other.alive = false;\n        return *this;\n    }\n    Movable& operator=(const Movable& other) {\n        ASSERT(alive, \"Assignment to a dead object\");\n        ASSERT(other.alive, \"Assignment of a dead object\");\n        return *this;\n    }\n    Movable(const Movable& other) {\n        ASSERT(other.alive, \"Const reference to a dead object\");\n        alive = true;\n    }\n    ~Movable() { alive = false; }\n    volatile bool alive;\n};\n\nclass MoveOnly : Movable, NoCopy {\npublic:\n    MoveOnly() : Movable() {}\n    MoveOnly(MoveOnly&& other) : Movable( std::move(other) ) {}\n};\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n#if HARNESS_TBBMALLOC_THREAD_SHUTDOWN && __TBB_SOURCE_DIRECTLY_INCLUDED && (_WIN32||_WIN64)\n#include \"../tbbmalloc/tbbmalloc_internal_api.h\"\n#endif\n\n//! For internal use by template function NativeParallelFor\ntemplate<typename Index, typename Body>\nclass NativeParallelForTask: NoCopy {\npublic:\n    NativeParallelForTask( Index index_, const Body& body_ ) :\n        index(index_),\n        body(body_)\n    {}\n\n    //! Start task\n    void start() {\n#if _WIN32||_WIN64\n        unsigned thread_id;\n#if __TBB_WIN8UI_SUPPORT\n        std::thread* thread_tmp=new std::thread(thread_function, this);\n        thread_handle = thread_tmp->native_handle();\n        thread_id = 0;\n#else\n        unsigned stack_size = 0;\n#if HARNESS_THREAD_STACK_SIZE\n        stack_size = HARNESS_THREAD_STACK_SIZE;\n#endif\n        thread_handle = (HANDLE)_beginthreadex( NULL, stack_size, thread_function, this, 0, &thread_id );\n#endif\n        ASSERT( thread_handle!=0, \"NativeParallelFor: _beginthreadex failed\" );\n#else\n#if __ICC==1100\n    #pragma warning (push)\n    #pragma warning (disable: 2193)\n#endif /* __ICC==1100 */\n        // Some machines may have very large hard stack limit. When the test is\n        // launched by make, the default stack size is set to the hard limit, and\n        // calls to pthread_create fail with out-of-memory error.\n        // Therefore we set the stack size explicitly (as for TBB worker threads).\n#if !defined(HARNESS_THREAD_STACK_SIZE)\n#if __i386__||__i386||__arm__\n        const size_t stack_size = 1*MByte;\n#elif __x86_64__\n        const size_t stack_size = 2*MByte;\n#else\n        const size_t stack_size = 4*MByte;\n#endif\n#else\n        const size_t stack_size = HARNESS_THREAD_STACK_SIZE;\n#endif /* HARNESS_THREAD_STACK_SIZE */\n        pthread_attr_t attr_stack;\n        int status = pthread_attr_init(&attr_stack);\n        ASSERT(0==status, \"NativeParallelFor: pthread_attr_init failed\");\n        status = pthread_attr_setstacksize( &attr_stack, stack_size );\n        ASSERT(0==status, \"NativeParallelFor: pthread_attr_setstacksize failed\");\n        status = pthread_create(&thread_id, &attr_stack, thread_function, this);\n        ASSERT(0==status, \"NativeParallelFor: pthread_create failed\");\n        pthread_attr_destroy(&attr_stack);\n#if __ICC==1100\n    #pragma warning (pop)\n#endif\n#endif /* _WIN32||_WIN64 */\n    }\n\n    //! Wait for task to finish\n    void wait_to_finish() {\n#if _WIN32||_WIN64\n        DWORD status = WaitForSingleObjectEx( thread_handle, INFINITE, FALSE );\n        ASSERT( status!=WAIT_FAILED, \"WaitForSingleObject failed\" );\n        CloseHandle( thread_handle );\n#else\n        int status = pthread_join( thread_id, NULL );\n        ASSERT( !status, \"pthread_join failed\" );\n#endif\n#if HARNESS_NO_ASSERT\n        (void)status;\n#endif\n    }\n\nprivate:\n#if _WIN32||_WIN64\n    HANDLE thread_handle;\n#else\n    pthread_t thread_id;\n#endif\n\n    //! Range over which task will invoke the body.\n    const Index index;\n\n    //! Body to invoke over the range.\n    const Body body;\n\n#if _WIN32||_WIN64\n    static unsigned __stdcall thread_function( void* object )\n#else\n    static void* thread_function(void* object)\n#endif\n    {\n        NativeParallelForTask& self = *static_cast<NativeParallelForTask*>(object);\n        (self.body)(self.index);\n#if HARNESS_TBBMALLOC_THREAD_SHUTDOWN && __TBB_SOURCE_DIRECTLY_INCLUDED && (_WIN32||_WIN64)\n        // in those cases can't release per-thread cache automatically,\n        // so do it manually\n        // TODO: investigate less-intrusive way to do it, for example via FLS keys\n        __TBB_mallocThreadShutdownNotification();\n#endif\n        return 0;\n    }\n};\n\n//! Execute body(i) in parallel for i in the interval [0,n).\n/** Each iteration is performed by a separate thread. */\ntemplate<typename Index, typename Body>\nvoid NativeParallelFor( Index n, const Body& body ) {\n    typedef NativeParallelForTask<Index,Body> task;\n\n    if( n>0 ) {\n        // Allocate array to hold the tasks\n        task* array = static_cast<task*>(operator new( n*sizeof(task) ));\n\n        // Construct the tasks\n        for( Index i=0; i!=n; ++i )\n            new( &array[i] ) task(i,body);\n\n        // Start the tasks\n        for( Index i=0; i!=n; ++i )\n            array[i].start();\n\n        // Wait for the tasks to finish and destroy each one.\n        for( Index i=n; i; --i ) {\n            array[i-1].wait_to_finish();\n            array[i-1].~task();\n        }\n\n        // Deallocate the task array\n        operator delete(array);\n    }\n}\n\n//! The function to zero-initialize arrays; useful to avoid warnings\ntemplate <typename T>\nvoid zero_fill(void* array, size_t n) {\n    memset(array, 0, sizeof(T)*n);\n}\n\n#if __SUNPRO_CC && defined(min)\n#undef min\n#undef max\n#endif\n\n#ifndef min\n//! Utility template function returning lesser of the two values.\n/** Provided here to avoid including not strict safe <algorithm>.\\n\n    In case operands cause signed/unsigned or size mismatch warnings it is caller's\n    responsibility to do the appropriate cast before calling the function. **/\ntemplate<typename T1, typename T2>\nT1 min ( const T1& val1, const T2& val2 ) {\n    return val1 < val2 ? val1 : val2;\n}\n#endif /* !min */\n\n#ifndef max\n//! Utility template function returning greater of the two values.\n/** Provided here to avoid including not strict safe <algorithm>.\\n\n    In case operands cause signed/unsigned or size mismatch warnings it is caller's\n    responsibility to do the appropriate cast before calling the function. **/\ntemplate<typename T1, typename T2>\nT1 max ( const T1& val1, const T2& val2 ) {\n    return val1 < val2 ? val2 : val1;\n}\n#endif /* !max */\n\ntemplate<typename T>\nstatic inline bool is_aligned(T arg, size_t alignment) {\n    return 0==((size_t)arg &  (alignment-1));\n}\n\n#if __linux__\ninline unsigned LinuxKernelVersion()\n{\n    unsigned digit1, digit2, digit3;\n    struct utsname utsnameBuf;\n\n    if (-1 == uname(&utsnameBuf)) {\n        REPORT_FATAL_ERROR(\"Can't call uname: errno %d\\n\", errno);\n        exit(1);\n    }\n    if (3 != sscanf(utsnameBuf.release, \"%u.%u.%u\", &digit1, &digit2, &digit3)) {\n        REPORT_FATAL_ERROR(\"Unable to parse OS release '%s'\\n\", utsnameBuf.release);\n        exit(1);\n    }\n    return 1000000*digit1+1000*digit2+digit3;\n}\n#endif\n\nnamespace Harness {\n\n#if !HARNESS_NO_ASSERT\n//! Base class that asserts that no operations are made with the object after its destruction.\nclass NoAfterlife {\nprotected:\n    enum state_t {\n        LIVE=0x56781234,\n        DEAD=0xDEADBEEF\n    } m_state;\n\npublic:\n    NoAfterlife() : m_state(LIVE) {}\n    NoAfterlife( const NoAfterlife& src ) : m_state(LIVE) {\n        ASSERT( src.IsLive(), \"Constructing from the dead source\" );\n    }\n    ~NoAfterlife() {\n        ASSERT( IsLive(), \"Repeated destructor call\" );\n        m_state = DEAD;\n    }\n    const NoAfterlife& operator=( const NoAfterlife& src ) {\n        ASSERT( IsLive(), NULL );\n        ASSERT( src.IsLive(), NULL );\n        return *this;\n    }\n    void AssertLive() const {\n        ASSERT( IsLive(), \"Already dead\" );\n    }\n    bool IsLive() const {\n        return m_state == LIVE;\n    }\n}; // NoAfterlife\n#endif /* !HARNESS_NO_ASSERT */\n\n#if _WIN32 || _WIN64\n    void Sleep ( int ms ) {\n#if !__TBB_WIN8UI_SUPPORT\n        ::Sleep(ms);\n#else\n         std::chrono::milliseconds sleep_time( ms );\n         std::this_thread::sleep_for( sleep_time );\n#endif\n\n    }\n\n    typedef DWORD tid_t;\n    tid_t CurrentTid () { return GetCurrentThreadId(); }\n\n#else /* !WIN */\n\n    void Sleep ( int ms ) {\n        timespec  requested = { ms / 1000, (ms % 1000)*1000000 };\n        timespec  remaining = { 0, 0 };\n        nanosleep(&requested, &remaining);\n    }\n\n    typedef pthread_t tid_t;\n    tid_t CurrentTid () { return pthread_self(); }\n#endif /* !WIN */\n\n    static const unsigned Primes[] = {\n        0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5, 0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,\n        0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231, 0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,\n        0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801, 0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,\n        0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed, 0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,\n        0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9, 0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,\n        0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7, 0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,\n        0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b, 0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,\n        0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3, 0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f\n    };\n\n    class FastRandom {\n        unsigned x, a;\n    public:\n        unsigned short get() {\n            unsigned short r = (unsigned short)(x >> 16);\n            x = x*a + 1;\n            return r;\n        }\n        explicit FastRandom( unsigned seed ) {\n            x = seed;\n            a = Primes[seed % (sizeof(Primes) / sizeof(Primes[0]))];\n        }\n    };\n    template<typename T>\n    class FastRandomBody {\n        FastRandom r;\n    public:\n        explicit FastRandomBody( unsigned seed ) : r(seed) {}\n        // Depending on the input type T the result distribution formed from this operator()\n        // might possess different characteristics than the original one used in FastRandom instance.\n        T operator()() { return T(r.get()); }\n    };\n\n    int SetEnv( const char *envname, const char *envval ) {\n        ASSERT( envname && envval, \"Harness::SetEnv() requires two valid C strings\" );\n#if __TBB_WIN8UI_SUPPORT\n        ASSERT( false, \"Harness::SetEnv() should not be called in code built for win8ui\" );\n        return -1;\n#elif !(_MSC_VER || __MINGW32__ || __MINGW64__)\n        // On POSIX systems use setenv\n        return setenv(envname, envval, /*overwrite=*/1);\n#elif __STDC_SECURE_LIB__>=200411\n        // this macro is set in VC & MinGW if secure API functions are present\n        return _putenv_s(envname, envval);\n#else\n        // If no secure API on Windows, use _putenv\n        size_t namelen = strlen(envname), valuelen = strlen(envval);\n        char* buf = new char[namelen+valuelen+2];\n        strncpy(buf, envname, namelen);\n        buf[namelen] = '=';\n        strncpy(buf+namelen+1, envval, valuelen);\n        buf[namelen+1+valuelen] = char(0);\n        int status = _putenv(buf);\n        delete[] buf;\n        return status;\n#endif\n    }\n\n    char* GetEnv(const char *envname) {\n        ASSERT(envname, \"Harness::GetEnv() requires a valid C string\");\n#if __TBB_WIN8UI_SUPPORT\n        return NULL;\n#else\n        return std::getenv(envname);\n#endif\n    }\n\n    class DummyBody {\n        int m_numIters;\n    public:\n        explicit DummyBody( int iters ) : m_numIters( iters ) {}\n        void operator()( int ) const {\n            for ( volatile int i = 0; i < m_numIters; ++i ) {}\n        }\n    };\n} // namespace Harness\n\n#endif /* tbb_tests_harness_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for simple estimate of the memory being used by a program.\n// Not yet implemented for macOS*.\n// This header is an optional part of the test harness.\n// It assumes that \"harness_assert.h\" has already been included.\n\n#ifndef tbb_test_harness_allocator_H\n#define tbb_test_harness_allocator_H\n\n#include \"harness_defs.h\"\n\n#if __linux__ || __APPLE__ || __sun\n#include <unistd.h>\n#elif _WIN32\n#include \"tbb/machine/windows_api.h\"\n#endif /* OS specific */\n#include <memory>\n#include <new>\n#include <cstdio>\n#include <stdexcept>\n#include <utility>\n#include __TBB_STD_SWAP_HEADER\n\n#include \"tbb/atomic.h\"\n\n#if __SUNPRO_CC\nusing std::printf;\n#endif\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n#if defined(_Wp64)\n    #pragma warning (disable: 4267)\n#endif\n#if _MSC_VER <= 1600\n    #pragma warning (disable: 4355)\n#endif\n#if _MSC_VER <= 1800\n    #pragma warning (disable: 4512)\n#endif\n#endif\n\n#if TBB_INTERFACE_VERSION >= 7005\n// Allocator traits were introduced in 4.2 U5\nnamespace Harness {\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n    using std::true_type;\n    using std::false_type;\n#else\n    using tbb::internal::true_type;\n    using tbb::internal::false_type;\n#endif //__TBB_ALLOCATOR_TRAITS_PRESENT\n}\n#endif\n\ntemplate<typename counter_type = size_t>\nstruct arena_data {\n    char * const my_buffer;\n    size_t const my_size; //in bytes\n    counter_type my_allocated; // in bytes\n\n    template<typename T>\n    arena_data(T * a_buffer, size_t a_size) __TBB_NOEXCEPT(true)\n    :   my_buffer(reinterpret_cast<char*>(a_buffer))\n    ,   my_size(a_size * sizeof(T))\n    {\n        my_allocated =0;\n    }\nprivate:\n    void operator=( const arena_data& ); // NoAssign is not used to avoid dependency on harness.h\n};\n\ntemplate<typename T, typename pocma = Harness::false_type, typename counter_type = size_t>\nstruct arena {\n    typedef arena_data<counter_type> arena_data_t;\nprivate:\n    arena_data_t * my_data;\npublic:\n    typedef T value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef arena<U, pocma, counter_type> other;\n    };\n\n    typedef pocma propagate_on_container_move_assignment;\n\n    arena(arena_data_t & data) __TBB_NOEXCEPT(true) : my_data(&data) {}\n\n    template<typename U1, typename U2, typename U3>\n    friend struct arena;\n\n    template<typename U1, typename U2 >\n    arena(arena<U1, U2, counter_type> const& other) __TBB_NOEXCEPT(true) : my_data(other.my_data) {}\n\n    friend void swap(arena & lhs ,arena & rhs){\n        std::swap(lhs.my_data, rhs.my_data);\n    }\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects, starting on a cache/sector line.\n    pointer allocate( size_type n, const void* =0) {\n        size_t new_size = (my_data->my_allocated += n*sizeof(T));\n        ASSERT(my_data->my_allocated <= my_data->my_size,\"trying to allocate more than was reserved\");\n        char* result =  &(my_data->my_buffer[new_size - n*sizeof(T)]);\n        return reinterpret_cast<pointer>(result);\n    }\n\n    //! Free block of memory that starts on a cache line\n    void deallocate( pointer p_arg, size_type n) {\n        char* p = reinterpret_cast<char*>(p_arg);\n        ASSERT(p >=my_data->my_buffer && p <= my_data->my_buffer + my_data->my_size, \"trying to deallocate pointer not from arena ?\");\n        ASSERT(p + n*sizeof(T) <= my_data->my_buffer + my_data->my_size, \"trying to deallocate incorrect number of items?\");\n        tbb::internal::suppress_unused_warning(p, n);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        return my_data->my_size / sizeof(T);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {\n        p->~value_type();\n        // suppress \"unreferenced parameter\" warnings by MSVC up to and including 2015\n        tbb::internal::suppress_unused_warning(p);\n    }\n\n    friend bool operator==(arena const& lhs, arena const& rhs){\n        return lhs.my_data == rhs.my_data;\n    }\n\n    friend bool operator!=(arena const& lhs, arena const& rhs){\n        return !(lhs== rhs);\n    }\n};\n\ntemplate <typename count_t = tbb::atomic<size_t> >\nstruct allocator_counters {\n    count_t items_allocated;\n    count_t items_freed;\n    count_t allocations;\n    count_t frees;\n\n    friend bool operator==(allocator_counters const & lhs, allocator_counters const & rhs){\n        return     lhs.items_allocated == rhs.items_allocated\n                && lhs.items_freed == rhs.items_freed\n                && lhs.allocations == rhs.allocations\n                && lhs.frees == rhs.frees\n        ;\n    }\n};\n\ntemplate <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >\nclass static_counting_allocator : public base_alloc_t\n{\npublic:\n    typedef typename base_alloc_t::pointer pointer;\n    typedef typename base_alloc_t::const_pointer const_pointer;\n    typedef typename base_alloc_t::reference reference;\n    typedef typename base_alloc_t::const_reference const_reference;\n    typedef typename base_alloc_t::value_type value_type;\n    typedef typename base_alloc_t::size_type size_type;\n    typedef typename base_alloc_t::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef static_counting_allocator<typename base_alloc_t::template rebind<U>::other,count_t> other;\n    };\n\n    typedef allocator_counters<count_t> counters_t;\n\n    static size_t max_items;\n    static count_t items_allocated;\n    static count_t items_freed;\n    static count_t allocations;\n    static count_t frees;\n    static bool verbose, throwing;\n\n    static_counting_allocator() throw() { }\n\n    static_counting_allocator(const base_alloc_t& src) throw()\n    : base_alloc_t(src) { }\n\n    static_counting_allocator(const static_counting_allocator& src) throw()\n    : base_alloc_t(src) { }\n\n    template<typename U, typename C>\n    static_counting_allocator(const static_counting_allocator<U, C>& src) throw()\n    : base_alloc_t(src) { }\n\n    pointer allocate(const size_type n)\n    {\n        if(verbose) printf(\"\\t+%d|\", int(n));\n        if(max_items && items_allocated + n >= max_items) {\n            if(verbose) printf(\"items limit hits!\");\n            if(throwing)\n                __TBB_THROW( std::bad_alloc() );\n            return NULL;\n        }\n        pointer p = base_alloc_t::allocate(n, pointer(0));\n        allocations++;\n        items_allocated += n;\n        return p;\n    }\n\n    pointer allocate(const size_type n, const void * const)\n    {   return allocate(n); }\n\n    void deallocate(const pointer ptr, const size_type n)\n    {\n        if(verbose) printf(\"\\t-%d|\", int(n));\n        frees++;\n        items_freed += n;\n        base_alloc_t::deallocate(ptr, n);\n    }\n\n    static counters_t counters(){\n        counters_t c = {items_allocated, items_freed, allocations, frees} ;\n        return c;\n    }\n\n    static void init_counters(bool v = false) {\n        verbose = v;\n        if(verbose) printf(\"\\n------------------------------------------- Allocations:\\n\");\n        items_allocated = 0;\n        items_freed = 0;\n        allocations = 0;\n        frees = 0;\n        max_items = 0;\n    }\n\n    static void set_limits(size_type max = 0, bool do_throw = true) {\n        max_items = max;\n        throwing = do_throw;\n    }\n};\n\ntemplate <typename base_alloc_t, typename count_t>\nsize_t static_counting_allocator<base_alloc_t, count_t>::max_items;\ntemplate <typename base_alloc_t, typename count_t>\ncount_t static_counting_allocator<base_alloc_t, count_t>::items_allocated;\ntemplate <typename base_alloc_t, typename count_t>\ncount_t static_counting_allocator<base_alloc_t, count_t>::items_freed;\ntemplate <typename base_alloc_t, typename count_t>\ncount_t static_counting_allocator<base_alloc_t, count_t>::allocations;\ntemplate <typename base_alloc_t, typename count_t>\ncount_t static_counting_allocator<base_alloc_t, count_t>::frees;\ntemplate <typename base_alloc_t, typename count_t>\nbool static_counting_allocator<base_alloc_t, count_t>::verbose;\ntemplate <typename base_alloc_t, typename count_t>\nbool static_counting_allocator<base_alloc_t, count_t>::throwing;\n\n\ntemplate <typename tag, typename count_t = tbb::atomic<size_t> >\nclass static_shared_counting_allocator_base\n{\npublic:\n    typedef allocator_counters<count_t> counters_t;\n\n    static size_t max_items;\n    static count_t items_allocated;\n    static count_t items_freed;\n    static count_t allocations;\n    static count_t frees;\n    static bool verbose, throwing;\n\n    static counters_t counters(){\n        counters_t c = {items_allocated, items_freed, allocations, frees} ;\n        return c;\n    }\n\n    static void init_counters(bool v = false) {\n        verbose = v;\n        if(verbose) printf(\"\\n------------------------------------------- Allocations:\\n\");\n        items_allocated = 0;\n        items_freed = 0;\n        allocations = 0;\n        frees = 0;\n        max_items = 0;\n    }\n\n    static void set_limits(size_t max = 0, bool do_throw = true) {\n        max_items = max;\n        throwing = do_throw;\n    }\n};\n\ntemplate <typename tag, typename count_t>\nsize_t static_shared_counting_allocator_base<tag, count_t>::max_items;\n\ntemplate <typename tag, typename count_t>\ncount_t static_shared_counting_allocator_base<tag, count_t>::items_allocated;\n\ntemplate <typename tag, typename count_t>\ncount_t static_shared_counting_allocator_base<tag, count_t>::items_freed;\n\ntemplate <typename tag, typename count_t>\ncount_t static_shared_counting_allocator_base<tag, count_t>::allocations;\n\ntemplate <typename tag, typename count_t>\ncount_t static_shared_counting_allocator_base<tag, count_t>::frees;\n\ntemplate <typename tag, typename count_t>\nbool static_shared_counting_allocator_base<tag, count_t>::verbose;\n\ntemplate <typename tag, typename count_t>\nbool static_shared_counting_allocator_base<tag, count_t>::throwing;\n\ntemplate <typename tag, typename base_alloc_t, typename count_t = tbb::atomic<size_t> >\nclass static_shared_counting_allocator : public static_shared_counting_allocator_base<tag, count_t>, public base_alloc_t\n{\n    typedef static_shared_counting_allocator_base<tag, count_t> base_t;\npublic:\n    typedef typename base_alloc_t::pointer pointer;\n    typedef typename base_alloc_t::const_pointer const_pointer;\n    typedef typename base_alloc_t::reference reference;\n    typedef typename base_alloc_t::const_reference const_reference;\n    typedef typename base_alloc_t::value_type value_type;\n    typedef typename base_alloc_t::size_type size_type;\n    typedef typename base_alloc_t::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef static_shared_counting_allocator<tag, typename base_alloc_t::template rebind<U>::other, count_t> other;\n    };\n\n    static_shared_counting_allocator() throw() { }\n\n    static_shared_counting_allocator(const base_alloc_t& src) throw()\n    : base_alloc_t(src) { }\n\n    static_shared_counting_allocator(const static_shared_counting_allocator& src) throw()\n    : base_alloc_t(src) { }\n\n    template<typename U, typename C>\n    static_shared_counting_allocator(const static_shared_counting_allocator<tag, U, C>& src) throw()\n    : base_alloc_t(src) { }\n\n    pointer allocate(const size_type n)\n    {\n        if(base_t::verbose) printf(\"\\t+%d|\", int(n));\n        if(base_t::max_items && base_t::items_allocated + n >= base_t::max_items) {\n            if(base_t::verbose) printf(\"items limit hits!\");\n            if(base_t::throwing)\n                __TBB_THROW( std::bad_alloc() );\n            return NULL;\n        }\n        base_t::allocations++;\n        base_t::items_allocated += n;\n        return base_alloc_t::allocate(n, pointer(0));\n    }\n\n    pointer allocate(const size_type n, const void * const)\n    {   return allocate(n); }\n\n    void deallocate(const pointer ptr, const size_type n)\n    {\n        if(base_t::verbose) printf(\"\\t-%d|\", int(n));\n        base_t::frees++;\n        base_t::items_freed += n;\n        base_alloc_t::deallocate(ptr, n);\n    }\n};\n\ntemplate <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >\nclass local_counting_allocator : public base_alloc_t\n{\npublic:\n    typedef typename base_alloc_t::pointer pointer;\n    typedef typename base_alloc_t::const_pointer const_pointer;\n    typedef typename base_alloc_t::reference reference;\n    typedef typename base_alloc_t::const_reference const_reference;\n    typedef typename base_alloc_t::value_type value_type;\n    typedef typename base_alloc_t::size_type size_type;\n    typedef typename base_alloc_t::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef local_counting_allocator<typename base_alloc_t::template rebind<U>::other,count_t> other;\n    };\n\n    count_t items_allocated;\n    count_t items_freed;\n    count_t allocations;\n    count_t frees;\n    size_t max_items;\n\n    void set_counters(const count_t & a_items_allocated, const count_t & a_items_freed, const count_t & a_allocations, const count_t & a_frees, const count_t & a_max_items){\n        items_allocated = a_items_allocated;\n        items_freed = a_items_freed;\n        allocations = a_allocations;\n        frees = a_frees;\n        max_items = a_max_items;\n    }\n\n    template< typename allocator_t>\n    void set_counters(const allocator_t & a){\n        this->set_counters(a.items_allocated, a.items_freed, a.allocations, a.frees, a.max_items);\n    }\n\n    void clear_counters(){\n        count_t zero;\n        zero = 0;\n        this->set_counters(zero,zero,zero,zero,zero);\n    }\n\n    local_counting_allocator() throw() {\n        this->clear_counters();\n    }\n\n    local_counting_allocator(const local_counting_allocator &a) throw()\n        : base_alloc_t(a)\n        , items_allocated(a.items_allocated)\n        , items_freed(a.items_freed)\n        , allocations(a.allocations)\n        , frees(a.frees)\n        , max_items(a.max_items)\n    { }\n\n    template<typename U, typename C>\n    local_counting_allocator(const static_counting_allocator<U,C> & a) throw() {\n        this->set_counters(a);\n    }\n\n    template<typename U, typename C>\n    local_counting_allocator(const local_counting_allocator<U,C> &a) throw()\n        : items_allocated(a.items_allocated)\n        , items_freed(a.items_freed)\n        , allocations(a.allocations)\n        , frees(a.frees)\n        , max_items(a.max_items)\n    { }\n\n    bool operator==(const local_counting_allocator &a) const\n    { return static_cast<const base_alloc_t&>(a) == *this; }\n\n    pointer allocate(const size_type n)\n    {\n        if(max_items && items_allocated + n >= max_items)\n            __TBB_THROW( std::bad_alloc() );\n        pointer p = base_alloc_t::allocate(n, pointer(0));\n        ++allocations;\n        items_allocated += n;\n        return p;\n    }\n\n    pointer allocate(const size_type n, const void * const)\n    { return allocate(n); }\n\n    void deallocate(const pointer ptr, const size_type n)\n    {\n        ++frees;\n        items_freed += n;\n        base_alloc_t::deallocate(ptr, n);\n    }\n\n    void set_limits(size_type max = 0) {\n        max_items = max;\n    }\n};\n\ntemplate <typename T, template<typename X> class Allocator = std::allocator>\nclass debug_allocator : public Allocator<T>\n{\npublic:\n    typedef Allocator<T> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    typedef typename base_allocator_type::reference reference;\n    typedef typename base_allocator_type::const_reference const_reference;\n    typedef typename base_allocator_type::size_type size_type;\n    typedef typename base_allocator_type::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef debug_allocator<U, Allocator> other;\n    };\n\n    debug_allocator() throw() { }\n    debug_allocator(const debug_allocator &a) throw() : base_allocator_type( a ) { }\n    template<typename U>\n    debug_allocator(const debug_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }\n\n    pointer allocate(const size_type n, const void *hint = 0 ) {\n        pointer ptr = base_allocator_type::allocate( n, hint );\n        std::memset( ptr, 0xE3E3E3E3, n * sizeof(value_type) );\n        return ptr;\n    }\n};\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<template<typename T> class Allocator>\nclass debug_allocator<void, Allocator> : public Allocator<void> {\npublic:\n    typedef Allocator<void> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    template<typename U> struct rebind {\n        typedef debug_allocator<U, Allocator> other;\n    };\n};\n\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator==( const debug_allocator<T1,B1> &a, const debug_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);\n}\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator!=( const debug_allocator<T1,B1> &a, const debug_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);\n}\n\ntemplate <typename T, typename pocma = Harness::false_type, template<typename X> class Allocator = std::allocator>\nclass stateful_allocator : public Allocator<T>\n{\n    void* unique_pointer;\n\n    template<typename T1, typename pocma1, template<typename X1> class Allocator1>\n    friend class  stateful_allocator;\npublic:\n    typedef Allocator<T> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    typedef typename base_allocator_type::reference reference;\n    typedef typename base_allocator_type::const_reference const_reference;\n    typedef typename base_allocator_type::size_type size_type;\n    typedef typename base_allocator_type::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef stateful_allocator<U, pocma, Allocator> other;\n    };\n    typedef pocma propagate_on_container_move_assignment;\n\n    stateful_allocator() throw() : unique_pointer(this) { }\n\n    template<typename U>\n    stateful_allocator(const stateful_allocator<U, pocma> &a) throw() : base_allocator_type( Allocator<U>( a ) ),  unique_pointer(a.uniqe_pointer) { }\n\n    friend bool operator==(stateful_allocator const& lhs, stateful_allocator const& rhs){\n        return lhs.unique_pointer == rhs.unique_pointer;\n    }\n\n    friend bool operator!=(stateful_allocator const& rhs, stateful_allocator const& lhs){\n        return !(lhs == rhs);\n    }\n\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (pop)\n#endif // warning 4267,4512,4355 is back\n\nnamespace Harness {\n\n    struct IsEqual {\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n        template <typename T>\n        static bool compare( const std::weak_ptr<T> &t1, const std::weak_ptr<T> &t2 ) {\n            // Compare real pointers.\n            return t1.lock().get() == t2.lock().get();\n        }\n        template <typename T>\n        static bool compare( const std::unique_ptr<T> &t1, const std::unique_ptr<T> &t2 ) {\n            // Compare real values.\n            return *t1 == *t2;\n        }\n        template <typename T1, typename T2>\n        static bool compare( const std::pair< const std::weak_ptr<T1>, std::weak_ptr<T2> > &t1,\n                const std::pair< const std::weak_ptr<T1>, std::weak_ptr<T2> > &t2 ) {\n            // Compare real pointers.\n            return t1.first.lock().get() == t2.first.lock().get() &&\n                t1.second.lock().get() == t2.second.lock().get();\n        }\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n        template <typename T1, typename T2>\n        static bool compare( const T1 &t1, const T2 &t2 ) {\n            return t1 == t2;\n        }\n        template <typename T1, typename T2>\n        bool operator()( T1 &t1, T2 &t2) const {\n            return compare( (const T1&)t1, (const T2&)t2 );\n        }\n    };\n\n} // Harness\n#endif // tbb_test_harness_allocator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_allocator_overload.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_test_harness_allocator_overload_H\n#define tbb_test_harness_allocator_overload_H\n\n#include \"../tbbmalloc/proxy.h\" // for MALLOC_UNIXLIKE_OVERLOAD_ENABLED, MALLOC_ZONE_OVERLOAD_ENABLED\n#include \"tbb/tbb_config.h\" // for __TBB_WIN8UI_SUPPORT\n\n// Skip configurations with unsupported system malloc overload:\n// skip unsupported MSVCs, WIN8UI and MINGW (it doesn't define _MSC_VER),\n// no support for MSVC 2015 and greater in debug for now,\n// don't use defined(_MSC_VER), because result of using defined() in macro expansion is undefined\n#define MALLOC_WINDOWS_OVERLOAD_ENABLED ((_WIN32||_WIN64) && !__TBB_WIN8UI_SUPPORT && _MSC_VER >= 1500 && !(_MSC_VER >= 1900 && _DEBUG))\n\n// Skip configurations with unsupported system malloc overload:\n// * overload via linking with -lmalloc_proxy is broken in offload,\n// as the library is loaded too late in that mode,\n// * LD_PRELOAD mechanism is broken in offload\n#define HARNESS_SKIP_TEST ((!MALLOC_WINDOWS_OVERLOAD_ENABLED && !MALLOC_UNIXLIKE_OVERLOAD_ENABLED && !MALLOC_ZONE_OVERLOAD_ENABLED) || __TBB_MIC_OFFLOAD)\n\n#endif // tbb_test_harness_allocator_overload_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_assert.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Just the assertion portion of the harness.\n// This is useful for writing portions of tests that include\n// the minimal number of necessary header files.\n//\n// The full \"harness.h\" must be included later.\n\n#ifndef harness_assert_H\n#define harness_assert_H\n\nvoid ReportError( const char* filename, int line, const char* expression, const char* message);\nvoid ReportWarning( const char* filename, int line, const char* expression, const char* message);\n\n#define ASSERT_CUSTOM(p,message,file,line)  ((p)?(void)0:ReportError(file,line,#p,message))\n#define ASSERT(p,message)                   ASSERT_CUSTOM(p,message,__FILE__,__LINE__)\n#define ASSERT_WARNING(p,message)           ((p)?(void)0:ReportWarning(__FILE__,__LINE__,#p,message))\n\n//! Compile-time error if x and y have different types\ntemplate<typename T>\nvoid AssertSameType( const T& /*x*/, const T& /*y*/ ) {}\n\n#endif /* harness_assert_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_bad_expr.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for checking __TBB_ASSERT checks inside TBB.\n// This header is an optional part of the test harness.\n// It assumes that \"harness.h\" has already been included.\n\n#define TRY_BAD_EXPR_ENABLED (TBB_USE_ASSERT && TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN)\n\n#if TRY_BAD_EXPR_ENABLED\n\n//! Check that expression x raises assertion failure with message containing given substring.\n/** Assumes that tbb::set_assertion_handler( AssertionFailureHandler ) was called earlier. */\n#define TRY_BAD_EXPR(x,substr)          \\\n    {                                   \\\n        const char* message = NULL;     \\\n        bool okay = false;              \\\n        try {                           \\\n            x;                          \\\n        } catch( AssertionFailure a ) { \\\n            okay = true;                \\\n            message = a.message;        \\\n        }                               \\\n        CheckAssertionFailure(__LINE__,#x,okay,message,substr); \\\n    }\n\n//! Exception object that holds a message.\nstruct AssertionFailure {\n    const char* message;\n    AssertionFailure( const char* filename, int line, const char* expression, const char* comment );\n};\n\nAssertionFailure::AssertionFailure( const char* filename, int line, const char* expression, const char* comment ) :\n    message(comment)\n{\n    ASSERT(filename,\"missing filename\");\n    ASSERT(0<line,\"line number must be positive\");\n    // All of our current files have fewer than 4000 lines.\n    ASSERT(line<5000,\"dubiously high line number\");\n    ASSERT(expression,\"missing expression\");\n}\n\nvoid AssertionFailureHandler( const char* filename, int line, const char* expression, const char* comment ) {\n    throw AssertionFailure(filename,line,expression,comment);\n}\n\nvoid CheckAssertionFailure( int line, const char* expression, bool okay, const char* message, const char* substr ) {\n    if( !okay ) {\n        REPORT(\"Line %d, %s failed to fail\\n\", line, expression );\n        abort();\n    } else if( !message ) {\n        REPORT(\"Line %d, %s failed without a message\\n\", line, expression );\n        abort();\n    } else if( strstr(message,substr)==0 ) {\n        REPORT(\"Line %d, %s failed with message '%s' missing substring '%s'\\n\", __LINE__, expression, message, substr );\n        abort();\n    }\n}\n\n#endif /* TRY_BAD_EXPR_ENABLED */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_barrier.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n\n#ifndef harness_barrier_H\n#define harness_barrier_H\n\nnamespace Harness {\n\n//! Spin WHILE the value of the variable is equal to a given value\n/** T and U should be comparable types. */\nclass TimedWaitWhileEq {\n    //! Assignment not allowed\n    void operator=( const TimedWaitWhileEq& );\n    double &my_limit;\npublic:\n    TimedWaitWhileEq(double &n_seconds) : my_limit(n_seconds) {}\n    TimedWaitWhileEq(const TimedWaitWhileEq &src) : my_limit(src.my_limit) {}\n    template<typename T, typename U>\n    void operator()( const volatile T& location, U value ) const {\n        tbb::tick_count start = tbb::tick_count::now();\n        double time_passed;\n        do {\n            time_passed = (tbb::tick_count::now()-start).seconds();\n            if( time_passed < 0.0001 ) __TBB_Pause(10); else __TBB_Yield();\n        } while( time_passed < my_limit && location == value);\n        my_limit -= time_passed;\n    }\n};\n//! Spin WHILE the value of the variable is equal to a given value\n/** T and U should be comparable types. */\nclass WaitWhileEq {\n    //! Assignment not allowed\n    void operator=( const WaitWhileEq& );\npublic:\n    template<typename T, typename U>\n    void operator()( const volatile T& location, U value ) const {\n        tbb::internal::spin_wait_while_eq(location, value);\n    }\n};\nclass SpinBarrier\n{\n    unsigned numThreads;\n    tbb::atomic<unsigned> numThreadsFinished; // reached the barrier in this epoch\n    // the number of times the barrier was opened; TODO: move to a separate cache line\n    tbb::atomic<unsigned> epoch;\n    // a throwaway barrier can be used only once, then wait() becomes a no-op\n    bool throwaway;\n\n    struct DummyCallback {\n        void operator() () const {}\n        template<typename T, typename U>\n        void operator()( const T&, U) const {}\n    };\n\n    SpinBarrier( const SpinBarrier& );    // no copy ctor\n    void operator=( const SpinBarrier& ); // no assignment\npublic:\n    SpinBarrier( unsigned nthreads = 0, bool throwaway_ = false ) {\n        initialize(nthreads, throwaway_);\n    }\n    void initialize( unsigned nthreads, bool throwaway_ = false ) {\n        numThreads = nthreads;\n        numThreadsFinished = 0;\n        epoch = 0;\n        throwaway = throwaway_;\n    }\n\n    // Returns whether this thread was the last to reach the barrier.\n    // onWaitCallback is called by a thread for waiting;\n    // onOpenBarrierCallback is called by the last thread before unblocking other threads.\n    template<typename WaitEq, typename Callback>\n    bool custom_wait(const WaitEq &onWaitCallback, const Callback &onOpenBarrierCallback)\n    {\n        if (throwaway && epoch)\n            return false;\n        unsigned myEpoch = epoch;\n        unsigned myNumThreads = numThreads; // read it before the increment\n        int threadsLeft = myNumThreads - numThreadsFinished.fetch_and_increment() - 1;\n        ASSERT(threadsLeft>=0, \"Broken barrier\");\n        if (threadsLeft > 0) {\n            /* this thread is not the last; wait until the epoch changes & return false */\n            onWaitCallback(epoch, myEpoch);\n            return false;\n        }\n        /* This thread is the last one at the barrier in this epoch */\n        onOpenBarrierCallback();\n        /* reset the barrier, increment the epoch, and return true */\n        threadsLeft = numThreadsFinished -= myNumThreads;\n        ASSERT( threadsLeft == 0, \"Broken barrier\");\n        /* wakes up threads waiting to exit in this epoch */\n        myEpoch -= epoch++;\n        ASSERT( myEpoch == 0, \"Broken barrier\");\n        return true;\n    }\n    bool timed_wait_noerror(double n_seconds) {\n        custom_wait(TimedWaitWhileEq(n_seconds), DummyCallback());\n        return n_seconds >= 0.0001;\n    }\n    bool timed_wait(double n_seconds, const char *msg=\"Time is out while waiting on a barrier\") {\n        bool is_last = custom_wait(TimedWaitWhileEq(n_seconds), DummyCallback());\n        ASSERT( n_seconds >= 0, msg); // TODO: refactor to avoid passing msg here and rising assertion\n        return is_last;\n    }\n    // onOpenBarrierCallback is called by the last thread before unblocking other threads.\n    template<typename Callback>\n    bool wait(const Callback &onOpenBarrierCallback) {\n        return custom_wait(WaitWhileEq(), onOpenBarrierCallback);\n    }\n    bool wait(){\n        return wait(DummyCallback());\n    }\n    //! signal to the barrier, rather a semaphore functionality\n    bool signal_nowait() {\n        return custom_wait(DummyCallback(),DummyCallback());\n    }\n};\n\n}\n\n#endif //harness_barrier_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_checktype.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_tests_harness_checktype_H\n#define tbb_tests_harness_checktype_H\n\n// type that checks construction and destruction.\n\n#ifndef __HARNESS_CHECKTYPE_DEFAULT_CTOR\n    #define __HARNESS_CHECKTYPE_DEFAULT_CTOR 1\n#endif\n\ntemplate<class Counter>\nclass check_type : Harness::NoAfterlife {\n    Counter id;\n    bool am_ready;\npublic:\n    static tbb::atomic<int> check_type_counter;\n    // if only non-default constructors are desired, set __HARNESS_CHECKTYPE_NODEFAULT_CTOR\n    check_type(Counter _n\n#if __HARNESS_CHECKTYPE_DEFAULT_CTOR\n            = 0\n#endif\n            ) : id(_n), am_ready(false) {\n        ++check_type_counter;\n    }\n\n    check_type(const check_type& other) : Harness::NoAfterlife(other) {\n        other.AssertLive();\n        AssertLive();\n        id = other.id;\n        am_ready = other.am_ready;\n        ++check_type_counter;\n    }\n\n    operator int() const { return (int)my_id(); }\n    check_type& operator++() { ++id; return *this;; }\n\n    ~check_type() {\n        AssertLive();\n        --check_type_counter;\n        ASSERT(check_type_counter >= 0, \"too many destructions\");\n    }\n\n    check_type &operator=(const check_type &other) {\n        other.AssertLive();\n        AssertLive();\n        id = other.id;\n        am_ready = other.am_ready;\n        return *this;\n    }\n\n    Counter my_id() const { AssertLive(); return id; }\n    bool is_ready() { AssertLive(); return am_ready; }\n    void function() {\n        AssertLive();\n        if( id == (Counter)0 ) {\n            id = (Counter)1;\n            am_ready = true;\n        }\n    }\n\n};\n\ntemplate<class Counter>\ntbb::atomic<int> check_type<Counter>::check_type_counter;\n\n// provide a class that for a check_type will initialize the counter on creation, and on\n// destruction will check that the constructions and destructions of check_type match.\ntemplate<class MyClass>\nstruct Check {\n    Check() {}   // creation does nothing\n    ~Check() {}  // destruction checks nothing\n};\n\ntemplate<class Counttype>\nstruct Check<check_type< Counttype > > {\n    Check() { check_type<Counttype>::check_type_counter = 0; }\n    ~Check() { ASSERT(check_type<Counttype>::check_type_counter == 0, \"check_type constructions and destructions don't match\"); }\n};\n\n#endif  // tbb_tests_harness_checktype_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_concurrency.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_tests_harness_concurrency_H\n#define tbb_tests_harness_concurrency_H\n\n#if _WIN32||_WIN64\n#include \"tbb/machine/windows_api.h\"\n#elif __linux__\n#include <unistd.h>\n#include <sys/sysinfo.h>\n#include <string.h>\n#include <sched.h>\n#elif __FreeBSD__\n#include <unistd.h>\n#include <errno.h>\n#include <string.h>\n#include <sys/param.h>  // Required by <sys/cpuset.h>\n#include <sys/cpuset.h>\n#endif\n\n#include <limits.h>\n\nnamespace Harness {\n    static int maxProcs = 0;\n    static int GetMaxProcs() {\n        if ( !maxProcs ) {\n#if _WIN32||_WIN64\n            SYSTEM_INFO si;\n            GetNativeSystemInfo(&si);\n            maxProcs = si.dwNumberOfProcessors;\n#elif __linux__\n            maxProcs = get_nprocs();\n#else /* __FreeBSD__ */\n            maxProcs = sysconf(_SC_NPROCESSORS_ONLN);\n#endif\n        }\n        return maxProcs;\n    }\n\n    int LimitNumberOfThreads(int max_threads) {\n        ASSERT( max_threads >= 1 , \"The limited number of threads should be positive.\" );\n        maxProcs = GetMaxProcs();\n        if ( maxProcs < max_threads )\n            // Suppose that process mask is not set so the number of available threads equals maxProcs\n            return maxProcs;\n\n#if _WIN32||_WIN64\n        ASSERT( max_threads <= 64 , \"LimitNumberOfThreads doesn't support max_threads to be more than 64 on Windows.\" );\n        DWORD_PTR mask = 1;\n        for ( int i = 1; i < max_threads; ++i )\n            mask |= mask << 1;\n        bool err = !SetProcessAffinityMask( GetCurrentProcess(), mask );\n#else /* !WIN */\n#if __linux__\n        typedef cpu_set_t mask_t;\n#if __TBB_MAIN_THREAD_AFFINITY_BROKEN\n#define setaffinity(mask) sched_setaffinity(0 /*get the mask of the calling thread*/, sizeof(mask_t), &mask)\n#else\n#define setaffinity(mask) sched_setaffinity(getpid(), sizeof(mask_t), &mask)\n#endif\n#else /* __FreeBSD__ */\n        typedef cpuset_t mask_t;\n#if __TBB_MAIN_THREAD_AFFINITY_BROKEN\n#define setaffinity(mask) cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(mask_t), &mask)\n#else\n#define setaffinity(mask) cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(mask_t), &mask)\n#endif\n#endif /* __FreeBSD__ */\n        mask_t newMask;\n        CPU_ZERO(&newMask);\n\n        int maskSize = (int)sizeof(mask_t) * CHAR_BIT;\n        ASSERT_WARNING( maskSize >= maxProcs, \"The mask size doesn't seem to be big enough to call setaffinity. The call may return an error.\" );\n\n        ASSERT( max_threads <= (int)sizeof(mask_t) * CHAR_BIT , \"The mask size is not enough to set the requested number of threads.\" );\n        for ( int i = 0; i < max_threads; ++i )\n            CPU_SET( i, &newMask );\n        int err = setaffinity( newMask );\n#endif /* !WIN */\n        ASSERT( !err, \"Setting process affinity failed\" );\n\n        return max_threads;\n    }\n\n} // namespace Harness\n\n#endif /* tbb_tests_harness_concurrency_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_concurrency_tracker.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_tests_harness_concurrency_tracker_H\n#define tbb_tests_harness_concurrency_tracker_H\n\n#include \"harness_assert.h\"\n#include \"harness_barrier.h\"\n#include \"tbb/atomic.h\"\n#include \"../tbb/tls.h\"\n// Note: This file is used by RML tests which do not link TBB.\n// Functionality that requires TBB binaries must be guarded by !__TBB_NO_IMPLICIT_LINKAGE\n#if !defined(__TBB_NO_IMPLICIT_LINKAGE)\n#include \"tbb/mutex.h\"\n#include \"tbb/task.h\"\n#include \"tbb/combinable.h\"\n#include \"tbb/parallel_for.h\"\n#include <functional> // for std::plus\n#include \"harness.h\" // for Harness::NoCopy\n#endif\n\nnamespace Harness {\n\nstatic tbb::atomic<unsigned> ctInstantParallelism;\nstatic tbb::atomic<unsigned> ctPeakParallelism;\nstatic tbb::internal::tls<uintptr_t>  ctNested;\n\nclass ConcurrencyTracker {\n    bool    m_Outer;\n\n    static void Started () {\n        unsigned p = ++ctInstantParallelism;\n        unsigned q = ctPeakParallelism;\n        while( q<p ) {\n            q = ctPeakParallelism.compare_and_swap(p,q);\n        }\n    }\n\n    static void Stopped () {\n        ASSERT ( ctInstantParallelism > 0, \"Mismatched call to ConcurrencyTracker::Stopped()\" );\n        --ctInstantParallelism;\n    }\npublic:\n    ConcurrencyTracker() : m_Outer(false) {\n        uintptr_t nested = ctNested;\n        ASSERT (nested == 0 || nested == 1, NULL);\n        if ( !ctNested ) {\n            Started();\n            m_Outer = true;\n            ctNested = 1;\n        }\n    }\n    ~ConcurrencyTracker() {\n        if ( m_Outer ) {\n            Stopped();\n            ctNested = 0;\n        }\n    }\n\n    static unsigned PeakParallelism() { return ctPeakParallelism; }\n    static unsigned InstantParallelism() { return ctInstantParallelism; }\n\n    static void Reset() {\n        ASSERT (ctInstantParallelism == 0, \"Reset cannot be called when concurrency tracking is underway\");\n        ctInstantParallelism = ctPeakParallelism = 0;\n    }\n}; // ConcurrencyTracker\n\n#if !defined(__TBB_NO_IMPLICIT_LINKAGE)\nstruct ExactConcurrencyLevel : NoCopy {\n    typedef tbb::combinable<size_t> Combinable;\nprivate:\n    Harness::SpinBarrier       *myBarrier;\n    // count unique worker threads\n    Combinable                 *myUniqueThreads;\n    mutable tbb::atomic<size_t> myActiveBodyCnt;\n    // output parameter for parallel_for body to report that max is reached\n    mutable bool                myReachedMax;\n    // zero timeout means no barrier is used during concurrency level detection\n    const double                myTimeout;\n    const size_t                myConcLevel;\n    const bool                  myCrashOnFail;\n\n    static tbb::mutex global_mutex;\n\n    ExactConcurrencyLevel(double timeout, size_t concLevel, Combinable *uniq, bool crashOnFail) :\n        myBarrier(NULL), myUniqueThreads(uniq), myReachedMax(false),\n        myTimeout(timeout), myConcLevel(concLevel), myCrashOnFail(crashOnFail) {\n        myActiveBodyCnt = 0;\n    }\n    bool run() {\n        const int LOOP_ITERS = 100;\n        tbb::combinable<size_t> uniq;\n        Harness::SpinBarrier barrier((unsigned)myConcLevel, /*throwaway=*/true);\n        if (myTimeout != 0.)\n            myBarrier = &barrier;\n        if (!myUniqueThreads)\n            myUniqueThreads = &uniq;\n        tbb::parallel_for((size_t)0, myConcLevel*LOOP_ITERS, *this, tbb::simple_partitioner());\n        return myReachedMax;\n    }\npublic:\n    void operator()(size_t) const {\n        size_t v = ++myActiveBodyCnt;\n        ASSERT(v <= myConcLevel, \"Number of active bodies is too high.\");\n        if (v == myConcLevel) // record that the max expected concurrency was observed\n            myReachedMax = true;\n        // try to get barrier when 1st time in the thread\n        if (myBarrier && !myBarrier->timed_wait_noerror(myTimeout))\n            ASSERT(!myCrashOnFail, \"Timeout was detected.\");\n\n        myUniqueThreads->local() = 1;\n        for (int i=0; i<100; i++)\n            __TBB_Pause(1);\n        --myActiveBodyCnt;\n    }\n\n    enum Mode {\n        None,\n        // When multiple blocking checks are performed, there might be not enough\n        // concurrency for all of them. Serialize check() calls.\n        Serialize\n    };\n\n    // check that we have never got more than concLevel threads,\n    // and that in some moment we saw exactly concLevel threads\n    static void check(size_t concLevel, Mode m = None) {\n        ExactConcurrencyLevel o(30., concLevel, NULL, /*crashOnFail=*/true);\n\n        tbb::mutex::scoped_lock lock;\n        if (m == Serialize)\n            lock.acquire(global_mutex);\n        bool ok = o.run();\n        ASSERT(ok, NULL);\n    }\n\n    static bool isEqual(size_t concLevel) {\n        ExactConcurrencyLevel o(3., concLevel, NULL, /*crashOnFail=*/false);\n        return o.run();\n    }\n\n    static void checkLessOrEqual(size_t concLevel, tbb::combinable<size_t> *unique) {\n        ExactConcurrencyLevel o(0., concLevel, unique, /*crashOnFail=*/true);\n\n        o.run(); // ignore result, as without a barrier it is not reliable\n        const size_t num = unique->combine(std::plus<size_t>());\n        ASSERT(num<=concLevel, \"Too many workers observed.\");\n    }\n};\n\ntbb::mutex ExactConcurrencyLevel::global_mutex;\n\n#endif /* !defined(__TBB_NO_IMPLICIT_LINKAGE) */\n\n} // namespace Harness\n\n#endif /* tbb_tests_harness_concurrency_tracker_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_cpu.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for simple estimate of CPU time being used by a program.\n// This header is an optional part of the test harness.\n// It assumes that \"harness_assert.h\" has already been included.\n\n#if _WIN32\n    #include <windows.h>\n#else\n    #include <sys/time.h>\n    #include <sys/resource.h>\n#endif\n\n//! Return time (in seconds) spent by the current process in user mode.\n/*  Returns 0 if not implemented on platform. */\nstatic double GetCPUUserTime() {\n#if __TBB_WIN8UI_SUPPORT\n    return 0;\n#elif _WIN32\n    FILETIME my_times[4];\n    bool status = GetProcessTimes(GetCurrentProcess(), my_times, my_times+1, my_times+2, my_times+3)!=0;\n    ASSERT( status, NULL );\n    LARGE_INTEGER usrtime;\n    usrtime.LowPart = my_times[3].dwLowDateTime;\n    usrtime.HighPart = my_times[3].dwHighDateTime;\n    return double(usrtime.QuadPart)*1E-7;\n#else\n    // Generic UNIX, including __APPLE__\n\n    // On Linux, there is no good way to get CPU usage info for the current process:\n    //   getrusage(RUSAGE_SELF, ...) that is used now only returns info for the calling thread;\n    //   getrusage(RUSAGE_CHILDREN, ...) only counts for finished children threads;\n    //   tms_utime and tms_cutime got with times(struct tms*) are equivalent to the above items;\n    //   finally, /proc/self/task/<task_id>/stat doesn't exist on older kernels\n    //      and it isn't quite convenient to read it for every task_id.\n\n    struct rusage resources;\n    bool status = getrusage(RUSAGE_SELF, &resources)==0;\n    ASSERT( status, NULL );\n    return (double(resources.ru_utime.tv_sec)*1E6 + double(resources.ru_utime.tv_usec))*1E-6;\n#endif\n}\n\n#include \"tbb/tick_count.h\"\n#include <cstdio>\n\n// The resolution of GetCPUUserTime is 10-15 ms or so; waittime should be a few times bigger.\nconst double WAITTIME = 0.1; // in seconds, i.e. 100 ms\nconst double THRESHOLD = WAITTIME/100;\n\nstatic void TestCPUUserTime( int nthreads, int nactive = 1 ) {\n    // The test will always pass on Linux; read the comments in GetCPUUserTime for details\n    // Also it will not detect spinning issues on systems with only one processing core.\n\n    int nworkers = nthreads-nactive;\n    if( !nworkers ) return;\n    double lastusrtime = GetCPUUserTime();\n    if( !lastusrtime ) return;\n\n    static double minimal_waittime = WAITTIME,\n                  maximal_waittime = WAITTIME * 10;\n    double usrtime_delta;\n    double waittime_delta;\n    tbb::tick_count stamp = tbb::tick_count::now();\n    volatile intptr_t k = (intptr_t)&usrtime_delta;\n    // wait for GetCPUUserTime update\n    while( (usrtime_delta=GetCPUUserTime()-lastusrtime) < THRESHOLD ) {\n        for ( int i = 0; i < 1000; ++i ) ++k; // do fake work without which user time can stall\n        if ( (waittime_delta = (tbb::tick_count::now()-stamp).seconds()) > maximal_waittime ) {\n            REPORT( \"Warning: %.2f sec elapsed but user mode time is still below its threshold (%g < %g)\\n\",\n                    waittime_delta, usrtime_delta, THRESHOLD );\n            break;\n        }\n    }\n    lastusrtime += usrtime_delta;\n\n    // Wait for workers to go sleep\n    stamp = tbb::tick_count::now();\n    while( ((waittime_delta=(tbb::tick_count::now()-stamp).seconds()) < minimal_waittime)\n            || ((usrtime_delta=GetCPUUserTime()-lastusrtime) < THRESHOLD) )\n    {\n        for ( int i = 0; i < 1000; ++i ) ++k; // do fake work without which user time can stall\n        if ( waittime_delta > maximal_waittime ) {\n            REPORT( \"Warning: %.2f sec elapsed but GetCPUUserTime reported only %g sec\\n\", waittime_delta, usrtime_delta );\n            break;\n        }\n    }\n\n    // Test that all workers sleep when no work.\n    while( nactive>1 && usrtime_delta-nactive*waittime_delta<0 ) {\n        // probably the number of active threads was mispredicted\n        --nactive; ++nworkers;\n    }\n    double avg_worker_usrtime = (usrtime_delta-nactive*waittime_delta)/nworkers;\n\n    if( avg_worker_usrtime > waittime_delta/2 )\n        REPORT( \"ERROR: %d worker threads are spinning; waittime: %g; usrtime: %g; avg worker usrtime: %g\\n\",\n                nworkers, waittime_delta, usrtime_delta, avg_worker_usrtime);\n    else\n        REMARK(\"%d worker threads; waittime: %g; usrtime: %g; avg worker usrtime: %g\\n\",\n                        nworkers, waittime_delta, usrtime_delta, avg_worker_usrtime);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_defs.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_harness_defs_H\n#define __TBB_harness_defs_H\n\n#include \"tbb/tbb_config.h\"\n#if __FreeBSD__\n#include <sys/param.h>  // for __FreeBSD_version\n#endif\n\n#if __TBB_TEST_PIC && !__PIC__\n#define __TBB_TEST_SKIP_PIC_MODE 1\n#else\n#define __TBB_TEST_SKIP_PIC_MODE 0\n#endif\n\n// no need to test GCC builtins mode on ICC\n#define __TBB_TEST_SKIP_GCC_BUILTINS_MODE ( __TBB_TEST_BUILTINS && (!__TBB_GCC_BUILTIN_ATOMICS_PRESENT || __INTEL_COMPILER) )\n\n#define __TBB_TEST_SKIP_ICC_BUILTINS_MODE ( __TBB_TEST_BUILTINS && !__TBB_ICC_BUILTIN_ATOMICS_PRESENT )\n\n#ifndef TBB_USE_GCC_BUILTINS\n  // Force TBB to use GCC intrinsics port, but not on ICC, as no need\n  #define TBB_USE_GCC_BUILTINS         ( __TBB_TEST_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT && !__INTEL_COMPILER )\n#endif\n\n#ifndef TBB_USE_ICC_BUILTINS\n  // Force TBB to use ICC c++11 style intrinsics port\n  #define TBB_USE_ICC_BUILTINS         ( __TBB_TEST_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT )\n#endif\n\n#if (_WIN32 && !__TBB_WIN8UI_SUPPORT) || (__linux__ && !__ANDROID__ && !__bg__) || __FreeBSD_version >= 701000\n#define __TBB_TEST_SKIP_AFFINITY 0\n#else\n#define __TBB_TEST_SKIP_AFFINITY 1\n#endif\n\n#if __INTEL_COMPILER\n  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200 && \\\n    ( _MSC_VER >= 1600 || __TBB_GLIBCXX_VERSION >= 40400 || ( _LIBCPP_VERSION && __cplusplus >= 201103L ) ) )\n  #define __TBB_RANGE_BASED_FOR_PRESENT ( __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 )\n  #define __TBB_SCOPED_ENUM_PRESENT ( __INTEL_CXX11_MODE__ && __INTEL_COMPILER > 1100 )\n#elif __clang__\n  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( __cplusplus >= 201103L && (__TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION) )\n  #define __TBB_RANGE_BASED_FOR_PRESENT ( __has_feature(__cxx_range_for) )\n  #define __TBB_SCOPED_ENUM_PRESENT ( __has_feature(cxx_strong_enums) )\n#elif __GNUC__\n  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400 )\n  #define __TBB_RANGE_BASED_FOR_PRESENT ( __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500 )\n  #define __TBB_SCOPED_ENUM_PRESENT ( __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400 )\n#elif _MSC_VER\n  #define __TBB_CPP11_REFERENCE_WRAPPER_PRESENT ( _MSC_VER >= 1600 )\n  #define __TBB_RANGE_BASED_FOR_PRESENT ( _MSC_VER >= 1700 )\n  #define __TBB_SCOPED_ENUM_PRESENT ( _MSC_VER >= 1700 )\n#endif\n\n#define __TBB_CPP14_GENERIC_LAMBDAS_PRESENT  (__cpp_generic_lambdas >= 201304 )\n\n#define __TBB_TEST_SKIP_LAMBDA (__TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN || !__TBB_CPP11_LAMBDAS_PRESENT)\n\n#if __GNUC__ && __ANDROID__\n// On Android* OS, GCC does not support _thread keyword\n  #define __TBB_THREAD_LOCAL_VARIABLES_PRESENT 0\n#else\n  #define __TBB_THREAD_LOCAL_VARIABLES_PRESENT 1\n#endif\n\n// ICC has a bug in assumptions of the modifications made via atomic pointer\n#define __TBB_ICC_BUILTIN_ATOMICS_POINTER_ALIASING_BROKEN (TBB_USE_ICC_BUILTINS &&  __INTEL_COMPILER < 1400 && __INTEL_COMPILER > 1200)\n\n// clang on Android/IA-32 fails on exception thrown from static move constructor\n#define __TBB_CPP11_EXCEPTION_IN_STATIC_TEST_BROKEN (__ANDROID__ && __SIZEOF_POINTER__==4 && __clang__)\n\n// MSVC 2013 is unable to properly resolve call to overloaded operator= with std::initializer_list argument for std::pair list elements\n// clang on Android/IA-32 fails on \"std::vector<std::pair<int,int>> vd{{1,1},{1,1},{1,1}};\" line in release mode\n#define __TBB_CPP11_INIT_LIST_TEST_BROKEN (_MSC_VER <= 1800 && _MSC_VER && !__INTEL_COMPILER) || (__ANDROID__ && __TBB_x86_32 && __clang__)\n// MSVC 2013 is unable to manage lifetime of temporary objects passed to a std::initializer_list constructor properly\n#define __TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN (_MSC_FULL_VER < 180030501 && _MSC_VER && !__INTEL_COMPILER)\n\n// Implementation of C++11 std::placeholders in libstdc++ coming with GCC prior to 4.5 reveals bug in Intel(R) C++ Compiler 13 causing \"multiple definition\" link errors.\n#define __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN ((__INTEL_COMPILER == 1300 || __INTEL_COMPILER == 1310) && __GXX_EXPERIMENTAL_CXX0X__ && __GLIBCXX__ && __TBB_GLIBCXX_VERSION < 40500)\n\n// Intel C++ Compiler has an issue when a scoped enum with a specified underlying type has negative values.\n#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_NEGATIVE_VALUE_BROKEN ( _MSC_VER && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )\n// Intel C++ Compiler has an issue with __atomic_load_explicit from a scoped enum with a specified underlying type.\n#define __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_ATOMIC_LOAD_BROKEN ( TBB_USE_ICC_BUILTINS && !__TBB_DEBUG && __INTEL_COMPILER && __INTEL_COMPILER <= 1500 )\n\n// Unable to use constexpr member functions to initialize compile time constants\n#define __TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN (__INTEL_COMPILER == 1500)\n// MSVC 2015 does not do compile-time initialization of static variables with constexpr constructors in debug mode\n#define __TBB_STATIC_CONSTEXPR_INIT_BROKEN (_MSC_VER==1900 && !__INTEL_COMPILER && _DEBUG)\n\n#if __GNUC__ && __ANDROID__\n  #define __TBB_EXCEPTION_TYPE_INFO_BROKEN ( __TBB_GCC_VERSION < 40600 )\n#elif _MSC_VER\n  #define __TBB_EXCEPTION_TYPE_INFO_BROKEN ( _MSC_VER < 1400 )\n#else\n  #define __TBB_EXCEPTION_TYPE_INFO_BROKEN 0\n#endif\n\n// a function ptr cannot be converted to const T& template argument without explicit cast\n#define __TBB_FUNC_PTR_AS_TEMPL_PARAM_BROKEN ( ((__linux__ || __APPLE__) && __INTEL_COMPILER && __INTEL_COMPILER < 1100) || __SUNPRO_CC )\n\n#define __TBB_UNQUALIFIED_CALL_OF_DTOR_BROKEN (__GNUC__==3 && __GNUC_MINOR__<=3)\n\n#define __TBB_CAS_8_CODEGEN_BROKEN (__TBB_x86_32 && __PIC__ && __TBB_GCC_VERSION == 40102 && !__INTEL_COMPILER)\n\n#define __TBB_THROW_FROM_DTOR_BROKEN (__clang__ && __apple_build_version__ && __apple_build_version__ < 5000279)\n\n// std::uncaught_exception is broken on some version of stdlibc++ (it returns true with no active exception)\n#define __TBB_STD_UNCAUGHT_EXCEPTION_BROKEN (__TBB_GLIBCXX_VERSION == 40407)\n\n#if __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN\n  #define _EXCEPTION_PTR_H /* prevents exception_ptr.h inclusion */\n  #define _GLIBCXX_NESTED_EXCEPTION_H /* prevents nested_exception.h inclusion */\n#endif\n\n// TODO: Investigate the cases that require this macro.\n#define __TBB_COMPLICATED_ADL_BROKEN ( __GNUC__ && __TBB_GCC_VERSION < 40400 )\n\n// Intel C++ Compiler fails to compile the comparison of tuples in some cases\n#if __INTEL_COMPILER && __INTEL_COMPILER < 1700\n  #define __TBB_TUPLE_COMPARISON_COMPILATION_BROKEN (__TBB_GLIBCXX_VERSION >= 40800 || __MIC__)\n#endif\n\n// Intel C++ Compiler fails to compile std::reference in some cases\n#if __INTEL_COMPILER && __INTEL_COMPILER < 1600 || __INTEL_COMPILER == 1600 && __INTEL_COMPILER_UPDATE <= 1\n  #define __TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN (__TBB_GLIBCXX_VERSION >= 40800 && __TBB_GLIBCXX_VERSION <= 50101 || __MIC__)\n#endif\n\n// Intel C++ Compiler fails to generate non-throwing move members for a class inherited from template\n#define __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN \\\n    (__INTEL_COMPILER>=1600 && __INTEL_COMPILER<=1800 || __INTEL_COMPILER==1500 && __INTEL_COMPILER_UPDATE>3)\n\n// The tuple-based tests with more inputs take a long time to compile.  If changes\n// are made to the tuple implementation or any switch that controls it, or if testing\n// with a new platform implementation of std::tuple, the test should be compiled with\n// MAX_TUPLE_TEST_SIZE >= 10 (or the largest number of elements supported) to ensure\n// all tuple sizes are tested.  Expect a very long compile time.\n#ifndef MAX_TUPLE_TEST_SIZE\n    #if TBB_USE_DEBUG\n        #define MAX_TUPLE_TEST_SIZE 3\n    #else\n        #define MAX_TUPLE_TEST_SIZE 5\n    #endif\n#else\n    #if _MSC_VER\n// test sizes <= 8 don't get \"decorated name length exceeded\" errors. (disable : 4503)\n        #if MAX_TUPLE_TEST_SIZE > 8\n            #undef MAX_TUPLE_TEST_SIZE\n            #define MAX_TUPLE_TEST_SIZE 8\n        #endif\n    #endif\n    #if MAX_TUPLE_TEST_SIZE > __TBB_VARIADIC_MAX\n        #undef MAX_TUPLE_TEST_SIZE\n        #define MAX_TUPLE_TEST_SIZE __TBB_VARIADIC_MAX\n    #endif\n#endif\n\n#if __TBB_CPF_BUILD\n    #ifndef  TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        #define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n    #endif\n    #if __TBB_ITT_STRUCTURE_API\n        #ifndef TBB_PREVIEW_FLOW_GRAPH_TRACE\n            #define TBB_PREVIEW_FLOW_GRAPH_TRACE 1\n        #endif\n        #ifndef TBB_PREVIEW_ALGORITHM_TRACE\n            #define TBB_PREVIEW_ALGORITHM_TRACE 1\n        #endif\n    #endif\n#endif\n\n// std::is_copy_constructible<T>::value returns 'true' for non copyable type when MSVC compiler is used.\n#define __TBB_IS_COPY_CONSTRUCTIBLE_BROKEN ( _MSC_VER && (_MSC_VER <= 1700 || _MSC_VER <= 1800 && !__INTEL_COMPILER) )\n\nnamespace Harness {\n    //! Utility template function to prevent \"unused\" warnings by various compilers.\n    template<typename T> void suppress_unused_warning( const T& ) {}\n\n    //TODO: unify with one in tbb::internal\n    //! Utility helper structure to ease overload resolution\n    template<int > struct int_to_type {};\n}\n\nconst unsigned MByte = 1024*1024;\n\n#endif /* __TBB_harness_defs_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_dynamic_libs.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n// Include this header file before harness.h for HARNESS_SKIP_TEST to take effect\n#if !__TBB_DYNAMIC_LOAD_ENABLED\n#define HARNESS_SKIP_TEST 1\n#else\n\n#if _WIN32 || _WIN64\n#include \"tbb/machine/windows_api.h\"\n#else\n#include <dlfcn.h>\n#endif\n#include \"harness_assert.h\"\n\nnamespace Harness {\n\n#if TBB_USE_DEBUG\n#define SUFFIX1 \"_debug\"\n#define SUFFIX2\n#else\n#define SUFFIX1\n#define SUFFIX2 \"_debug\"\n#endif /* TBB_USE_DEBUG */\n\n#if _WIN32||_WIN64\n#define PREFIX\n#define EXT \".dll\"\n#else\n#define PREFIX \"lib\"\n#if __APPLE__\n#define EXT \".dylib\"\n// Android SDK build system does not support .so file name versioning\n#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX || __ANDROID__\n#define EXT \".so\"\n#elif __linux__  // Order of these elif's matters!\n#define EXT __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)\n#else\n#error Unknown OS\n#endif\n#endif\n\n// Form the names of the TBB memory allocator binaries.\n#define MALLOCLIB_NAME1 PREFIX \"tbbmalloc\" SUFFIX1 EXT\n#define MALLOCLIB_NAME2 PREFIX \"tbbmalloc\" SUFFIX2 EXT\n\n#if _WIN32 || _WIN64\ntypedef  HMODULE LIBRARY_HANDLE;\n#else\ntypedef void *LIBRARY_HANDLE;\n#endif\n\n#if _WIN32 || _WIN64\n#define TEST_LIBRARY_NAME(base) base\".dll\"\n#elif __APPLE__\n#define TEST_LIBRARY_NAME(base) base\".dylib\"\n#else\n#define TEST_LIBRARY_NAME(base) base\".so\"\n#endif\n\nLIBRARY_HANDLE OpenLibrary(const char *name)\n{\n#if _WIN32 || _WIN64\n#if __TBB_WIN8UI_SUPPORT\n    TCHAR wlibrary[MAX_PATH];\n    if ( MultiByteToWideChar(CP_UTF8, 0, name, -1, wlibrary, MAX_PATH) == 0 ) return false;\n    return :: LoadPackagedLibrary( wlibrary, 0 );\n#else\n    return ::LoadLibrary(name);\n#endif\n#else\n    return dlopen(name, RTLD_NOW|RTLD_GLOBAL);\n#endif\n}\n\nvoid CloseLibrary(LIBRARY_HANDLE lib)\n{\n#if _WIN32 || _WIN64\n    BOOL ret = FreeLibrary(lib);\n    ASSERT(ret, \"FreeLibrary must be successful\");\n#else\n    int ret = dlclose(lib);\n    ASSERT(ret == 0, \"dlclose must be successful\");\n#endif\n}\n\ntypedef void (*FunctionAddress)();\n\nFunctionAddress GetAddress(Harness::LIBRARY_HANDLE lib, const char *name)\n{\n    union { FunctionAddress func; void *symb; } converter;\n#if _WIN32 || _WIN64\n    converter.symb = (void*)GetProcAddress(lib, name);\n#else\n    converter.symb = (void*)dlsym(lib, name);\n#endif\n    ASSERT(converter.func, \"Can't find required symbol in dynamic library\");\n    return converter.func;\n}\n\n}  // namespace Harness\n\n#endif // __TBB_DYNAMIC_LOAD_ENABLED\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_eh.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <typeinfo>\n#include \"tbb/tbb_exception.h\"\n#include \"tbb/atomic.h\"\n#if USE_TASK_SCHEDULER_OBSERVER\n#include \"tbb/task_scheduler_observer.h\"\n#endif\n#include \"harness.h\"\n#include \"harness_concurrency_tracker.h\"\n\nint g_NumThreads = 0;\nHarness::tid_t  g_Master = 0;\nconst char * g_Orig_Wakeup_Msg = \"Missed wakeup or machine is overloaded?\";\nconst char * g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n\ntbb::atomic<intptr_t> g_CurExecuted,\n                      g_ExecutedAtLastCatch,\n                      g_ExecutedAtFirstCatch,\n                      g_ExceptionsThrown,\n                      g_MasterExecutedThrow,     // number of times master entered exception code\n                      g_NonMasterExecutedThrow,  // number of times nonmaster entered exception code\n                      g_PipelinesStarted;\nvolatile bool g_ExceptionCaught = false,\n              g_UnknownException = false;\n\n#if USE_TASK_SCHEDULER_OBSERVER\ntbb::atomic<intptr_t> g_ActualMaxThreads;\ntbb::atomic<intptr_t> g_ActualCurrentThreads;\n#endif\n\nvolatile bool g_ThrowException = true,\n         // g_Flog is true for nested construct tests with catches (exceptions are not allowed to\n         // propagate to the tbb construct itself.)\n              g_Flog = false,\n              g_MasterExecuted = false,\n              g_NonMasterExecuted = false;\n\nbool    g_ExceptionInMaster = false;\nbool    g_SolitaryException = false;\nbool    g_NestedPipelines   = false;\n\n//! Number of exceptions propagated into the user code (i.e. intercepted by the tests)\ntbb::atomic<intptr_t> g_NumExceptionsCaught;\n\n//-----------------------------------------------------------\n\n#if USE_TASK_SCHEDULER_OBSERVER\nclass eh_test_observer : public tbb::task_scheduler_observer {\npublic:\n    void on_scheduler_entry(bool is_worker) __TBB_override {\n        if(is_worker) {  // we've already counted the master\n            size_t p = ++g_ActualCurrentThreads;\n            size_t q = g_ActualMaxThreads;\n            while(q < p) {\n                q = g_ActualMaxThreads.compare_and_swap(p,q);\n            }\n        }\n        else {\n            // size_t q = g_ActualMaxThreads;\n        }\n    }\n    void on_scheduler_exit(bool is_worker) __TBB_override {\n        if(is_worker) {\n            --g_ActualCurrentThreads;\n        }\n    }\n};\n#endif\n//-----------------------------------------------------------\n\ninline void ResetEhGlobals ( bool throwException = true, bool flog = false ) {\n    Harness::ConcurrencyTracker::Reset();\n    g_CurExecuted = g_ExecutedAtLastCatch = g_ExecutedAtFirstCatch = 0;\n    g_ExceptionCaught = false;\n    g_UnknownException = false;\n    g_NestedPipelines = false;\n    g_ThrowException = throwException;\n    g_MasterExecutedThrow = 0;\n    g_NonMasterExecutedThrow = 0;\n    g_Flog = flog;\n    g_MasterExecuted = false;\n    g_NonMasterExecuted = false;\n#if USE_TASK_SCHEDULER_OBSERVER\n    g_ActualMaxThreads = 1;  // count master\n    g_ActualCurrentThreads = 1;  // count master\n#endif\n    g_ExceptionsThrown = g_NumExceptionsCaught = g_PipelinesStarted = 0;\n}\n\n#if TBB_USE_EXCEPTIONS\nclass test_exception : public std::exception {\n    const char* my_description;\npublic:\n    test_exception ( const char* description ) : my_description(description) {}\n\n    const char* what() const throw() __TBB_override { return my_description; }\n};\n\nclass solitary_test_exception : public test_exception {\npublic:\n    solitary_test_exception ( const char* description ) : test_exception(description) {}\n};\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    typedef tbb::captured_exception PropagatedException;\n    #define EXCEPTION_NAME(e) e.name()\n#else\n    typedef test_exception PropagatedException;\n    #define EXCEPTION_NAME(e) typeid(e).name()\n#endif\n\n#define EXCEPTION_DESCR \"Test exception\"\n\n#if HARNESS_EH_SIMPLE_MODE\n\nstatic void ThrowTestException () {\n    ++g_ExceptionsThrown;\n    throw test_exception(EXCEPTION_DESCR);\n}\n\n#else /* !HARNESS_EH_SIMPLE_MODE */\n\nstatic void ThrowTestException ( intptr_t threshold ) {\n    bool inMaster = (Harness::CurrentTid() == g_Master);\n    if ( !g_ThrowException ||   // if we're not supposed to throw\n            (!g_Flog &&         // if we're not catching throw in bodies and\n             (g_ExceptionInMaster ^ inMaster)) ) { // we're the master and not expected to throw\n              // or are the master and the master is not the one to throw (??)\n        return;\n    }\n    while ( Existed() < threshold )\n        __TBB_Yield();\n    if ( !g_SolitaryException ) {\n        ++g_ExceptionsThrown;\n        if(inMaster) ++g_MasterExecutedThrow; else ++g_NonMasterExecutedThrow;\n        throw test_exception(EXCEPTION_DESCR);\n    }\n    // g_SolitaryException == true\n    if(g_NestedPipelines) {\n        // only throw exception if we have started at least two inner pipelines\n        // else return\n        if(g_PipelinesStarted >= 3) {\n            if ( g_ExceptionsThrown.compare_and_swap(1, 0) == 0 )  {\n                if(inMaster) ++g_MasterExecutedThrow; else ++g_NonMasterExecutedThrow;\n                throw solitary_test_exception(EXCEPTION_DESCR);\n            }\n        }\n    }\n    else {\n        if ( g_ExceptionsThrown.compare_and_swap(1, 0) == 0 )  {\n            if(inMaster) ++g_MasterExecutedThrow; else ++g_NonMasterExecutedThrow;\n            throw solitary_test_exception(EXCEPTION_DESCR);\n        }\n    }\n}\n#endif /* !HARNESS_EH_SIMPLE_MODE */\n\n#define UPDATE_COUNTS()     \\\n    { \\\n        ++g_CurExecuted; \\\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true; \\\n        else g_NonMasterExecuted = true; \\\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled; \\\n    }\n\n#define CATCH()     \\\n    } catch ( PropagatedException& e ) { \\\n        g_ExecutedAtFirstCatch.compare_and_swap(g_CurExecuted,0); \\\n        g_ExecutedAtLastCatch = g_CurExecuted; \\\n        ASSERT( e.what(), \"Empty what() string\" );  \\\n        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(EXCEPTION_NAME(e), (g_SolitaryException ? typeid(solitary_test_exception) : typeid(test_exception)).name() ) == 0, \"Unexpected original exception name\"); \\\n        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR) == 0, \"Unexpected original exception info\"); \\\n        g_ExceptionCaught = l_ExceptionCaughtAtCurrentLevel = true; \\\n        ++g_NumExceptionsCaught; \\\n    } catch ( tbb::tbb_exception& e ) { \\\n        REPORT(\"Unexpected %s\\n\", e.name()); \\\n        ASSERT (g_UnknownException && !g_UnknownException, \"Unexpected tbb::tbb_exception\" ); \\\n    } catch ( std::exception& e ) { \\\n        REPORT(\"Unexpected %s\\n\", typeid(e).name()); \\\n        ASSERT (g_UnknownException && !g_UnknownException, \"Unexpected std::exception\" ); \\\n    } catch ( ... ) { \\\n        g_ExceptionCaught = l_ExceptionCaughtAtCurrentLevel = true; \\\n        g_UnknownException = unknownException = true; \\\n    } \\\n    if ( !g_SolitaryException ) \\\n        REMARK_ONCE (\"Multiple exceptions mode: %d throws\", (intptr_t)g_ExceptionsThrown);\n\n#define ASSERT_EXCEPTION() \\\n    { \\\n        ASSERT (!g_ExceptionsThrown || g_ExceptionCaught, \"throw without catch\"); \\\n        ASSERT (!g_ExceptionCaught || g_ExceptionsThrown, \"catch without throw\"); \\\n        ASSERT (g_ExceptionCaught || (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow), \"no exception occurred\"); \\\n        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, \"unknown exception was caught\"); \\\n    }\n\n#define CATCH_AND_ASSERT() \\\n    CATCH() \\\n    ASSERT_EXCEPTION()\n\n#else /* !TBB_USE_EXCEPTIONS */\n\ninline void ThrowTestException ( intptr_t ) {}\n\n#endif /* !TBB_USE_EXCEPTIONS */\n\n#define TRY()   \\\n    bool l_ExceptionCaughtAtCurrentLevel = false, unknownException = false;    \\\n    __TBB_TRY {\n\n// \"l_ExceptionCaughtAtCurrentLevel || unknownException\" is used only to \"touch\" otherwise unused local variables\n#define CATCH_AND_FAIL() } __TBB_CATCH(...) { \\\n        ASSERT (false, \"Cancelling tasks must not cause any exceptions\");    \\\n        (void)(l_ExceptionCaughtAtCurrentLevel && unknownException);                        \\\n    }\n\nconst int c_Timeout = 1000000;\n\nvoid WaitUntilConcurrencyPeaks ( int expected_peak ) {\n    if ( g_Flog )\n        return;\n    int n = 0;\nretry:\n    while ( ++n < c_Timeout && (int)Harness::ConcurrencyTracker::PeakParallelism() < expected_peak )\n        __TBB_Yield();\n#if USE_TASK_SCHEDULER_OBSERVER\n    ASSERT_WARNING( g_NumThreads == g_ActualMaxThreads, \"Library did not provide sufficient threads\");\n#endif\n    ASSERT_WARNING(n < c_Timeout,g_Wakeup_Msg);\n    // Workaround in case a missed wakeup takes place\n    if ( n == c_Timeout ) {\n        tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task();\n        r.spawn(r);\n        n = 0;\n        goto retry;\n    }\n}\n\ninline void WaitUntilConcurrencyPeaks () { WaitUntilConcurrencyPeaks(g_NumThreads); }\n\ninline bool IsMaster() {\n    return Harness::CurrentTid() == g_Master;\n}\n\ninline bool IsThrowingThread() {\n    return g_ExceptionInMaster ^ IsMaster() ? true : false;\n}\n\nclass CancellatorTask : public tbb::task {\n    static volatile bool s_Ready;\n    tbb::task_group_context &m_groupToCancel;\n    intptr_t m_cancellationThreshold;\n\n    tbb::task* execute () __TBB_override {\n        Harness::ConcurrencyTracker ct;\n        s_Ready = true;\n        while ( g_CurExecuted < m_cancellationThreshold )\n            __TBB_Yield();\n        m_groupToCancel.cancel_group_execution();\n        g_ExecutedAtLastCatch = g_CurExecuted;\n        return NULL;\n    }\npublic:\n    CancellatorTask ( tbb::task_group_context& ctx, intptr_t threshold )\n        : m_groupToCancel(ctx), m_cancellationThreshold(threshold)\n    {\n        s_Ready = false;\n    }\n\n    static void Reset () { s_Ready = false; }\n\n    static bool WaitUntilReady () {\n        const intptr_t limit = 10000000;\n        intptr_t n = 0;\n        do {\n            __TBB_Yield();\n        } while( !s_Ready && ++n < limit );\n        // should yield once, then continue if Cancellator is ready.\n        ASSERT( s_Ready || n == limit, NULL );\n        return s_Ready;\n    }\n};\n\nvolatile bool CancellatorTask::s_Ready = false;\n\ntemplate<class LauncherTaskT, class CancellatorTaskT>\nvoid RunCancellationTest ( intptr_t threshold = 1 )\n{\n    tbb::task_group_context  ctx;\n    tbb::empty_task &r = *new( tbb::task::allocate_root(ctx) ) tbb::empty_task;\n    r.set_ref_count(3);\n    r.spawn( *new( r.allocate_child() ) CancellatorTaskT(ctx, threshold) );\n    __TBB_Yield();\n    r.spawn( *new( r.allocate_child() ) LauncherTaskT(ctx) );\n    TRY();\n        r.wait_for_all();\n    CATCH_AND_FAIL();\n    r.destroy(r);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_fp.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// include system header to prevent standard library to be included under private=public first time\n#include <cstddef>\n#define private public\n#include \"tbb/tbb_machine.h\"\n#undef private\n#include \"harness_assert.h\"\n\n#if ( __TBB_x86_32 || __TBB_x86_64 ) && __TBB_CPU_CTL_ENV_PRESENT && !defined(__TBB_WIN32_USE_CL_BUILTINS)\n\nconst int FE_TONEAREST = 0x0000,\n          FE_DOWNWARD = 0x0400,\n          FE_UPWARD = 0x0800,\n          FE_TOWARDZERO = 0x0c00,\n          FE_RND_MODE_MASK = FE_TOWARDZERO,\n          SSE_RND_MODE_MASK = FE_RND_MODE_MASK << 3,\n          SSE_DAZ = 0x0040,\n          SSE_FTZ = 0x8000,\n          SSE_MODE_MASK = SSE_DAZ | SSE_FTZ,\n          SSE_STATUS_MASK = 0x3F;\n\nconst int NumSseModes = 4;\nconst int SseModes[NumSseModes] = { 0, SSE_DAZ, SSE_FTZ, SSE_DAZ | SSE_FTZ };\n\n#if _WIN64 && !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE && !__MINGW64__\n// MinGW uses inline implementation from tbb/machine/linux_intel64.h\n// and when inline asm is not available, the library uses out of line assembly which is not exported\n// thus reimplementing them here\n\n#include <float.h>\n\ninline void __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* fe ) {\n    fe->x87cw = short(_control87(0, 0) & _MCW_RC) << 2;\n    fe->mxcsr = _mm_getcsr();\n}\ninline void __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* fe ) {\n    ASSERT( (fe->x87cw & FE_RND_MODE_MASK) == ((fe->x87cw & FE_RND_MODE_MASK) >> 2 & _MCW_RC) << 2, \"Check float.h constants\" );\n    _control87( (fe->x87cw & FE_RND_MODE_MASK) >> 6, _MCW_RC );\n    _mm_setcsr( fe->mxcsr );\n}\n\n#endif /*  _WIN64 && !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE && !__MINGW64__ */\n\ninline int GetRoundingMode ( bool checkConsistency = true ) {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    ASSERT( !checkConsistency || (ctl.mxcsr & SSE_RND_MODE_MASK) >> 3 == (ctl.x87cw & FE_RND_MODE_MASK), NULL );\n    return ctl.x87cw & FE_RND_MODE_MASK;\n}\n\ninline void SetRoundingMode ( int mode ) {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    ctl.mxcsr = (ctl.mxcsr & ~SSE_RND_MODE_MASK) | (mode & FE_RND_MODE_MASK) << 3;\n    ctl.x87cw = short((ctl.x87cw & ~FE_RND_MODE_MASK) | (mode & FE_RND_MODE_MASK));\n    ctl.set_env();\n}\n\ninline int GetSseMode () {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    return ctl.mxcsr & SSE_MODE_MASK;\n}\n\ninline void SetSseMode ( int mode ) {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    ctl.mxcsr = (ctl.mxcsr & ~SSE_MODE_MASK) | (mode & SSE_MODE_MASK);\n    ctl.set_env();\n}\n\n#elif defined(_M_ARM) || defined(__TBB_WIN32_USE_CL_BUILTINS)\nconst int NumSseModes = 1;\nconst int SseModes[NumSseModes] = { 0 };\n\ninline int GetSseMode () { return 0; }\ninline void SetSseMode ( int ) {}\n\nconst int FE_TONEAREST = _RC_NEAR,\n          FE_DOWNWARD = _RC_DOWN,\n          FE_UPWARD = _RC_UP,\n          FE_TOWARDZERO = _RC_CHOP;\n\ninline int GetRoundingMode ( bool = true ) {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    return ctl.my_ctl;\n}\ninline void SetRoundingMode ( int mode ) {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.my_ctl = mode;\n    ctl.set_env();\n}\n\n#else /* Other archs */\n\n#include <fenv.h>\n\nconst int RND_MODE_MASK = FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO;\n\nconst int NumSseModes = 1;\nconst int SseModes[NumSseModes] = { 0 };\n\ninline int GetRoundingMode ( bool = true ) { return fegetround(); }\ninline void SetRoundingMode ( int rnd ) { fesetround(rnd); }\n\ninline int GetSseMode () { return 0; }\ninline void SetSseMode ( int ) {}\n\n#endif /* Other archs */\n\nconst int NumRoundingModes = 4;\nconst int RoundingModes[NumRoundingModes] = { FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO };\nconst int numFPModes = NumRoundingModes*NumSseModes;\n\ninline void SetFPMode( int mode ) {\n    SetRoundingMode( RoundingModes[mode/NumSseModes%NumRoundingModes] );\n    SetSseMode( SseModes[mode%NumSseModes] );\n}\n\n#define AssertFPMode( mode ) { \\\n    ASSERT( GetRoundingMode() == RoundingModes[mode/NumSseModes%NumRoundingModes], \"FPU control state has not been set correctly.\" ); \\\n    ASSERT( GetSseMode() == SseModes[mode%NumSseModes], \"SSE control state has not been set correctly.\" ); \\\n}\n\ninline int SetNextFPMode( int mode, int step = 1 ) {\n    const int nextMode = (mode+step)%numFPModes;\n    SetFPMode( nextMode );\n    return nextMode;\n}\n\nclass FPModeContext {\n    int origSse, origRounding;\n    int currentMode;\npublic:\n    FPModeContext(int newMode) {\n        origSse = GetSseMode();\n        origRounding = GetRoundingMode();\n        SetFPMode(currentMode = newMode);\n    }\n    ~FPModeContext() {\n        assertFPMode();\n        SetRoundingMode(origRounding);\n        SetSseMode(origSse);\n    }\n    int setNextFPMode() {\n        assertFPMode();\n        return currentMode = SetNextFPMode(currentMode);\n    }\n    void assertFPMode() {\n        AssertFPMode(currentMode);\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_graph.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/** @file harness_graph.cpp\n    This contains common helper classes and functions for testing graph nodes\n**/\n\n#ifndef harness_graph_H\n#define harness_graph_H\n\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/null_rw_mutex.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/concurrent_unordered_map.h\"\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/compat/condition_variable\"\n#include \"tbb/mutex.h\"\n#include \"tbb/tbb_thread.h\"\n\nusing tbb::flow::internal::SUCCESSFULLY_ENQUEUED;\n\n#define WAIT_MAX 2000000\n#define BACKOFF_WAIT(ex,msg) \\\n{ \\\n    int wait_cnt = 0; \\\n    tbb::internal::atomic_backoff backoff; \\\n    do { \\\n        backoff.pause(); \\\n        ++wait_cnt; \\\n    } \\\n    while( (ex) && (wait_cnt < WAIT_MAX)); \\\n    ASSERT(wait_cnt < WAIT_MAX, msg); \\\n}\n#define BACKOFF_WAIT_NOASSERT(ex,msg) \\\n{ \\\n    int wait_cnt = 0; \\\n    tbb::internal::atomic_backoff backoff; \\\n    do { \\\n        backoff.pause(); \\\n        ++wait_cnt; \\\n    } \\\n    while( (ex) && (wait_cnt < WAIT_MAX)); \\\n    if(wait_cnt >= WAIT_MAX) REMARK(\"%s\\n\",msg); \\\n}\n\n// Needed conversion to and from continue_msg, but didn't want to add\n// conversion operators to the class, since we don't want it in general,\n// only in these tests.\ntemplate<typename InputType, typename OutputType>\nstruct convertor {\n    static OutputType convert_value(const InputType &i) {\n        return OutputType(i);\n    }\n};\n\ntemplate<typename InputType>\nstruct convertor<InputType,tbb::flow::continue_msg> {\n    static tbb::flow::continue_msg convert_value(const InputType &/*i*/) {\n        return tbb::flow::continue_msg();\n    }\n};\n\ntemplate<typename OutputType>\nstruct convertor<tbb::flow::continue_msg,OutputType> {\n    static OutputType convert_value(const tbb::flow::continue_msg &/*i*/) {\n        return OutputType();\n    }\n};\n\n// helper for multifunction_node tests.\ntemplate<size_t N>\nstruct mof_helper {\n    template<typename InputType, typename ports_type>\n    static inline void output_converted_value(const InputType &i, ports_type &p) {\n        (void)tbb::flow::get<N-1>(p).try_put(convertor<InputType,typename tbb::flow::tuple_element<N-1,ports_type>::type::output_type>::convert_value(i));\n        output_converted_value<N-1>(i, p);\n    }\n};\n\ntemplate<>\nstruct mof_helper<1> {\n    template<typename InputType, typename ports_type>\n    static inline void output_converted_value(const InputType &i, ports_type &p) {\n        // just emit a default-constructed object\n        (void)tbb::flow::get<0>(p).try_put(convertor<InputType,typename tbb::flow::tuple_element<0,ports_type>::type::output_type>::convert_value(i));\n    }\n};\n\ntemplate< typename InputType, typename OutputType >\nstruct harness_graph_default_functor {\n    static OutputType construct( InputType v ) {\n        return OutputType(v);\n    }\n};\n\ntemplate< typename OutputType >\nstruct harness_graph_default_functor< tbb::flow::continue_msg, OutputType > {\n    static OutputType construct( tbb::flow::continue_msg ) {\n        return OutputType();\n    }\n};\n\ntemplate< typename InputType >\nstruct harness_graph_default_functor< InputType, tbb::flow::continue_msg > {\n    static tbb::flow::continue_msg construct( InputType ) {\n        return tbb::flow::continue_msg();\n    }\n};\n\ntemplate< >\nstruct harness_graph_default_functor< tbb::flow::continue_msg, tbb::flow::continue_msg > {\n    static tbb::flow::continue_msg construct( tbb::flow::continue_msg ) {\n        return tbb::flow::continue_msg();\n    }\n};\n\ntemplate<typename InputType, typename OutputSet>\nstruct harness_graph_default_multifunction_functor {\n    static const int N = tbb::flow::tuple_size<OutputSet>::value;\n    typedef typename tbb::flow::multifunction_node<InputType,OutputSet>::output_ports_type ports_type;\n    static void construct(const InputType &i, ports_type &p) {\n        mof_helper<N>::output_converted_value(i, p);\n    }\n};\n\n//! An executor that accepts InputType and generates OutputType\ntemplate< typename InputType, typename OutputType >\nstruct harness_graph_executor {\n\n    typedef OutputType (*function_ptr_type)( InputType v );\n\n    template<typename RW>\n    struct mutex_holder { static RW mutex; };\n\n    static function_ptr_type fptr;\n    static tbb::atomic<size_t> execute_count;\n    static tbb::atomic<size_t> current_executors;\n    static size_t max_executors;\n\n    static inline OutputType func( InputType v ) {\n        size_t c; // Declaration separate from initialization to avoid ICC internal error on IA-64 architecture\n        c = current_executors.fetch_and_increment();\n        ASSERT( max_executors == 0 || c <= max_executors, NULL );\n        ++execute_count;\n        OutputType v2 = (*fptr)(v);\n        current_executors.fetch_and_decrement();\n        return v2;\n    }\n\n    template< typename RW >\n    static inline OutputType tfunc( InputType v ) {\n        // Invocations allowed to be concurrent, the lock is acquired in shared (\"read\") mode.\n        // A test can take it exclusively, thus creating a barrier for invocations.\n        typename RW::scoped_lock l( mutex_holder<RW>::mutex, /*write=*/false );\n        return func(v);\n    }\n\n    template< typename RW >\n    struct tfunctor {\n        tbb::atomic<size_t> my_execute_count;\n        tfunctor() { my_execute_count = 0; }\n        tfunctor( const tfunctor &f ) { my_execute_count = f.my_execute_count; }\n        OutputType operator()( InputType i ) {\n           typename RW::scoped_lock l( harness_graph_executor::mutex_holder<RW>::mutex, /*write=*/false );\n           my_execute_count.fetch_and_increment();\n           return harness_graph_executor::func(i);\n        }\n    };\n    typedef tfunctor<tbb::null_rw_mutex> functor;\n\n};\n\n//! A multifunction executor that accepts InputType and has only one Output of OutputType.\ntemplate< typename InputType, typename OutputTuple >\nstruct harness_graph_multifunction_executor {\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type ports_type;\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;\n\n    typedef void (*mfunction_ptr_type)( const InputType& v, ports_type &p );\n\n    template<typename RW>\n    struct mutex_holder { static RW mutex; };\n\n    static mfunction_ptr_type fptr;\n    static tbb::atomic<size_t> execute_count;\n    static tbb::atomic<size_t> current_executors;\n    static size_t max_executors;\n\n    static inline void empty_func( const InputType&, ports_type& ) {\n    }\n\n    static inline void func( const InputType &v, ports_type &p ) {\n        size_t c; // Declaration separate from initialization to avoid ICC internal error on IA-64 architecture\n        c = current_executors.fetch_and_increment();\n        ASSERT( max_executors == 0 || c <= max_executors, NULL );\n        ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 1, NULL);\n        ++execute_count;\n        (*fptr)(v,p);\n        current_executors.fetch_and_decrement();\n    }\n\n    template< typename RW >\n    static inline void tfunc( const InputType& v, ports_type &p ) {\n        // Shared lock in invocations, exclusive in a test; see a comment in harness_graph_executor.\n        typename RW::scoped_lock l( mutex_holder<RW>::mutex, /*write=*/false );\n        func(v,p);\n    }\n\n    template< typename RW >\n    struct tfunctor {\n        tbb::atomic<size_t> my_execute_count;\n        tfunctor() { my_execute_count = 0; }\n        tfunctor( const tfunctor &f ) { my_execute_count = f.my_execute_count; }\n        void operator()( const InputType &i, ports_type &p ) {\n           typename RW::scoped_lock l( harness_graph_multifunction_executor::mutex_holder<RW>::mutex, /*write=*/false );\n           my_execute_count.fetch_and_increment();\n           harness_graph_multifunction_executor::func(i,p);\n        }\n    };\n    typedef tfunctor<tbb::null_rw_mutex> functor;\n\n};\n\n// static vars for function_node tests\ntemplate< typename InputType, typename OutputType >\ntemplate< typename RW >\nRW harness_graph_executor<InputType, OutputType>::mutex_holder<RW>::mutex;\n\ntemplate< typename InputType, typename OutputType >\ntbb::atomic<size_t> harness_graph_executor<InputType, OutputType>::execute_count;\n\ntemplate< typename InputType, typename OutputType >\ntypename harness_graph_executor<InputType, OutputType>::function_ptr_type harness_graph_executor<InputType, OutputType>::fptr\n    = harness_graph_default_functor< InputType, OutputType >::construct;\n\ntemplate< typename InputType, typename OutputType >\ntbb::atomic<size_t> harness_graph_executor<InputType, OutputType>::current_executors;\n\ntemplate< typename InputType, typename OutputType >\nsize_t harness_graph_executor<InputType, OutputType>::max_executors = 0;\n\n// static vars for multifunction_node tests\ntemplate< typename InputType, typename OutputTuple >\ntemplate< typename RW >\nRW harness_graph_multifunction_executor<InputType, OutputTuple>::mutex_holder<RW>::mutex;\n\ntemplate< typename InputType, typename OutputTuple >\ntbb::atomic<size_t> harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count;\n\ntemplate< typename InputType, typename OutputTuple >\ntypename harness_graph_multifunction_executor<InputType, OutputTuple>::mfunction_ptr_type harness_graph_multifunction_executor<InputType, OutputTuple>::fptr\n    = harness_graph_default_multifunction_functor< InputType, OutputTuple >::construct;\n\ntemplate< typename InputType, typename OutputTuple >\ntbb::atomic<size_t> harness_graph_multifunction_executor<InputType, OutputTuple>::current_executors;\n\ntemplate< typename InputType, typename OutputTuple >\nsize_t harness_graph_multifunction_executor<InputType, OutputTuple>::max_executors = 0;\n\n//! Counts the number of puts received\ntemplate< typename T >\nstruct harness_counting_receiver : public tbb::flow::receiver<T> {\n\n    tbb::atomic< size_t > my_count;\n    T max_value;\n    size_t num_copies;\n    tbb::flow::graph& my_graph;\n\n    harness_counting_receiver(tbb::flow::graph& g) : num_copies(1), my_graph(g) {\n       my_count = 0;\n    }\n\n    void initialize_map( const T& m, size_t c ) {\n       my_count = 0;\n       max_value = m;\n       num_copies = c;\n    }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    tbb::task *try_put_task( const T & ) __TBB_override {\n      ++my_count;\n      return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);\n    }\n\n    void validate() {\n        size_t n = my_count;\n        ASSERT( n == num_copies*max_value, NULL );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    built_predecessors_type mbp;\n    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}\n    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}\n    void copy_predecessors(predecessor_list_type &) __TBB_override { }\n    size_t predecessor_count() __TBB_override { return 0; }\n#endif\n    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override { my_count = 0; }\n};\n\n//! Counts the number of puts received\ntemplate< typename T >\nstruct harness_mapped_receiver : public tbb::flow::receiver<T>, NoCopy {\n\n    tbb::atomic< size_t > my_count;\n    T max_value;\n    size_t num_copies;\n    typedef tbb::concurrent_unordered_map< T, tbb::atomic< size_t > > map_type;\n    map_type *my_map;\n    tbb::flow::graph& my_graph;\n\n    harness_mapped_receiver(tbb::flow::graph& g) : my_map(NULL), my_graph(g) {\n       my_count = 0;\n    }\n\n    ~harness_mapped_receiver() {\n        if ( my_map ) delete my_map;\n    }\n\n    void initialize_map( const T& m, size_t c ) {\n       my_count = 0;\n       max_value = m;\n       num_copies = c;\n       if ( my_map ) delete my_map;\n       my_map = new map_type;\n    }\n\n    tbb::task * try_put_task( const T &t ) __TBB_override {\n      if ( my_map ) {\n          tbb::atomic<size_t> a;\n          a = 1;\n          std::pair< typename map_type::iterator, bool > r =  (*my_map).insert( typename map_type::value_type( t, a ) );\n          if ( r.second == false ) {\n              size_t v = r.first->second.fetch_and_increment();\n              ASSERT( v < num_copies, NULL );\n          }\n      } else {\n          ++my_count;\n      }\n      return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);\n    }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void validate() {\n        if ( my_map ) {\n            for ( size_t i = 0; i < (size_t)max_value; ++i ) {\n                size_t n = (*my_map)[(int)i];\n                ASSERT( n == num_copies, NULL );\n            }\n        } else {\n            size_t n = my_count;\n            ASSERT( n == num_copies*max_value, NULL );\n        }\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    built_predecessors_type mbp;\n    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}\n    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}\n    void copy_predecessors(predecessor_list_type &) __TBB_override { }\n    size_t predecessor_count() __TBB_override { return 0; }\n#endif\n    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {\n        my_count = 0;\n        if(my_map) delete my_map;\n        my_map = new map_type;\n    }\n\n};\n\n//! Counts the number of puts received\ntemplate< typename T >\nstruct harness_counting_sender : public tbb::flow::sender<T>, NoCopy {\n\n    typedef typename tbb::flow::sender<T>::successor_type successor_type;\n    tbb::atomic< successor_type * > my_receiver;\n    tbb::atomic< size_t > my_count;\n    tbb::atomic< size_t > my_received;\n    size_t my_limit;\n\n    harness_counting_sender( ) : my_limit(~size_t(0)) {\n       my_receiver = NULL;\n       my_count = 0;\n       my_received = 0;\n    }\n\n    harness_counting_sender( size_t limit ) : my_limit(limit) {\n       my_receiver = NULL;\n       my_count = 0;\n       my_received = 0;\n    }\n\n    bool register_successor( successor_type &r ) __TBB_override {\n        my_receiver = &r;\n        return true;\n    }\n\n    bool remove_successor( successor_type &r ) __TBB_override {\n        successor_type *s = my_receiver.fetch_and_store( NULL );\n        ASSERT( s == &r, NULL );\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::sender<T>::successor_list_type successor_list_type;\n    typedef typename tbb::flow::sender<T>::built_successors_type built_successors_type;\n    built_successors_type bst;\n    built_successors_type &built_successors() __TBB_override { return bst; }\n    void internal_add_built_successor( successor_type &) __TBB_override {}\n    void internal_delete_built_successor( successor_type &) __TBB_override {}\n    void copy_successors(successor_list_type &) __TBB_override { }\n    size_t successor_count() __TBB_override { return 0; }\n#endif\n\n    bool try_get( T & v ) __TBB_override {\n        size_t i = my_count.fetch_and_increment();\n        if ( i < my_limit ) {\n           v = T( i );\n           ++my_received;\n           return true;\n        } else {\n           return false;\n        }\n    }\n\n    bool try_put_once() {\n        successor_type *s = my_receiver;\n        size_t i = my_count.fetch_and_increment();\n        if ( s->try_put( T(i) ) ) {\n            ++my_received;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    void try_put_until_false() {\n        successor_type *s = my_receiver;\n        size_t i = my_count.fetch_and_increment();\n\n        while ( s->try_put( T(i) ) ) {\n            ++my_received;\n            i = my_count.fetch_and_increment();\n        }\n    }\n\n    void try_put_until_limit() {\n        successor_type *s = my_receiver;\n\n        for ( int i = 0; i < (int)my_limit; ++i ) {\n            ASSERT( s->try_put( T(i) ), NULL );\n            ++my_received;\n        }\n        ASSERT( my_received == my_limit, NULL );\n    }\n\n};\n\n// test for resets of buffer-type nodes.\ntbb::atomic<int> serial_fn_state0;\ntbb::atomic<int> serial_fn_state1;\ntbb::atomic<int> serial_continue_state0;\n\ntemplate<typename T>\nstruct serial_fn_body {\n    tbb::atomic<int> *_flag;\n    serial_fn_body(tbb::atomic<int> &myatomic) : _flag(&myatomic) { }\n    T operator()(const T& in) {\n        if(*_flag == 0) {\n            *_flag = 1;\n            // wait until we are released\n            tbb::internal::atomic_backoff backoff;\n            do {\n                backoff.pause();\n            } while(*_flag == 1);\n        }\n        // return value\n        return in;\n    }\n};\n\ntemplate<typename T>\nstruct serial_continue_body {\n    tbb::atomic<int> *_flag;\n    serial_continue_body(tbb::atomic<int> &myatomic) : _flag(&myatomic) {}\n    T operator()(const tbb::flow::continue_msg& /*in*/) {\n        // signal we have received a value\n        *_flag = 1;\n        // wait until we are released\n        tbb::internal::atomic_backoff backoff;\n        do {\n            backoff.pause();\n        } while(*_flag == 1);\n        // return value\n        return (T)1;\n    }\n};\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n\n// walk two lists via iterator, match elements of each, in possibly-different ordder, and\n// return true if all elements of sv appear in tv.\ntemplate<typename SV, typename TV>\nbool lists_match(SV &sv, TV &tv) {\n    if(sv.size() != tv.size()) {\n        return false;\n    }\n    std::vector<bool> bv(sv.size(), false);\n    for(typename TV::iterator itv = tv.begin(); itv != tv.end(); ++itv) {\n        int ibv = 0;\n        for(typename SV::iterator isv = sv.begin(); isv != sv.end(); ++isv) {\n            if(!bv[ibv]) {\n                if(*itv == *isv) {\n                    bv[ibv] = true;\n                    goto found_it;;\n                }\n            }\n            ++ibv;\n        }\n        return false;\nfound_it:\n        continue;\n    }\n    return true;\n}\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\ntemplate<typename T, typename BufferType>\nvoid test_resets() {\n    const int NN = 3;\n    tbb::task_scheduler_init init(4);\n    tbb::task_group_context   tgc;\n    tbb::flow::graph          g(tgc);\n    BufferType                b0(g);\n    tbb::flow::queue_node<T>  q0(g);\n    T j;\n    bool nFound[NN];\n\n    // reset empties buffer\n    for(T i = 0; i < NN; ++i) {\n        b0.try_put(i);\n        nFound[(int)i] = false;\n    }\n    g.wait_for_all();\n    g.reset();\n    ASSERT(!b0.try_get(j), \"reset did not empty buffer\");\n\n    // reset doesn't delete edge\n\n    tbb::flow::make_edge(b0,q0);\n    g.reset();\n    for(T i = 0; i < NN; ++i) {\n        b0.try_put(i);\n    }\n\n    g.wait_for_all();\n    for( T i = 0; i < NN; ++i) {\n        ASSERT(q0.try_get(j), \"Missing value from buffer\");\n        ASSERT(!nFound[(int)j], \"Duplicate value found\");\n        nFound[(int)j] = true;\n    }\n\n    for(int ii = 0; ii < NN; ++ii) {\n        ASSERT(nFound[ii], \"missing value\");\n    }\n    ASSERT(!q0.try_get(j), \"Extra values in output\");\n\n    // reset reverses a reversed edge.\n    // we will use a serial rejecting node to get the edge to reverse.\n    tbb::flow::function_node<T, T, tbb::flow::rejecting> sfn(g, tbb::flow::serial, serial_fn_body<T>(serial_fn_state0));\n    tbb::flow::queue_node<T> outq(g);\n    tbb::flow::remove_edge(b0,q0);\n    tbb::flow::make_edge(b0, sfn);\n    tbb::flow::make_edge(sfn,outq);\n    g.wait_for_all();  // wait for all the tasks started by building the graph are done.\n    serial_fn_state0 = 0;\n\n    // b0 ------> sfn ------> outq\n\n    for(int icnt = 0; icnt < 2; ++icnt) {\n        g.wait_for_all();\n        serial_fn_state0 = 0;\n        b0.try_put((T)0);  // will start sfn\n        // wait until function_node starts\n        BACKOFF_WAIT(serial_fn_state0 == 0,\"Timed out waiting for function_node to start\");\n        // now the function_node is executing.\n        // this will start a task to forward the second item\n        // to the serial function node\n        b0.try_put((T)1);  // first item will be consumed by task completing the execution\n        BACKOFF_WAIT_NOASSERT(g.root_task()->ref_count() >= 3,\"Timed out waiting try_put task to wind down\");\n        b0.try_put((T)2);  // second item will remain after cancellation\n        // now wait for the task that attempts to forward the buffer item to\n        // complete.\n        BACKOFF_WAIT_NOASSERT(g.root_task()->ref_count() >= 3,\"Timed out waiting for tasks to wind down\");\n        // now cancel the graph.\n        ASSERT(tgc.cancel_group_execution(), \"task group already cancelled\");\n        serial_fn_state0 = 0;  // release the function_node.\n        g.wait_for_all();  // wait for all the tasks to complete.\n        // check that at most one output reached the queue_node\n        T outt;\n        T outt2;\n        bool got_item1 = outq.try_get(outt);\n        bool got_item2 = outq.try_get(outt2);\n        // either the output queue was empty (if the function_node tested for cancellation before putting the\n        // result to the queue) or there was one element in the queue (the 0).\n        ASSERT(!got_item1 || ((int)outt == 0 && !got_item2), \"incorrect output from function_node\");\n        // the edge between the buffer and the function_node should be reversed, and the last\n        // message we put in the buffer should still be there.  We can't directly test for the\n        // edge reversal.\n        got_item1 = b0.try_get(outt);\n        ASSERT(got_item1, \" buffer lost a message\");\n        ASSERT(2 == (int)outt || 1 == (int)outt, \" buffer had incorrect message\");  // the one not consumed by the node.\n        ASSERT(g.is_cancelled(), \"Graph was not cancelled\");\n        g.reset();\n    }  // icnt\n\n    // reset with remove_edge removes edge.  (icnt ==0 => forward edge, 1 => reversed edge\n    for(int icnt = 0; icnt < 2; ++icnt) {\n        if(icnt == 1) {\n            // set up reversed edge\n            tbb::flow::make_edge(b0, sfn);\n            tbb::flow::make_edge(sfn,outq);\n            serial_fn_state0 = 0;\n            b0.try_put((T)0);  // starts up the function node\n            b0.try_put((T)1);  // shoyuld reverse the edge\n            BACKOFF_WAIT(serial_fn_state0 == 0,\"Timed out waiting for edge reversal\");\n            ASSERT(tgc.cancel_group_execution(), \"task group already cancelled\");\n            serial_fn_state0 = 0;  // release the function_node.\n            g.wait_for_all();  // wait for all the tasks to complete.\n        }\n        g.reset(tbb::flow::rf_clear_edges);\n        // test that no one is a successor to the buffer now.\n        serial_fn_state0 = 1;  // let the function_node go if it gets an input message\n        b0.try_put((T)23);\n        g.wait_for_all();\n        ASSERT((int)serial_fn_state0 == 1, \"function_node executed when it shouldn't\");\n        T outt;\n        ASSERT(b0.try_get(outt) && (T)23 == outt, \"node lost its input\");\n    }\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\ntemplate< typename NODE_TYPE >\nclass test_buffer_base_extract {\nprotected:\n    tbb::flow::graph &g;\n    NODE_TYPE &in0;\n    NODE_TYPE &in1;\n    NODE_TYPE &middle;\n    NODE_TYPE &out0;\n    NODE_TYPE &out1;\n    NODE_TYPE *ins[2];\n    NODE_TYPE *outs[2];\n    typename NODE_TYPE::successor_type *ms_ptr;\n    typename NODE_TYPE::predecessor_type *mp_ptr;\n\n    typename NODE_TYPE::predecessor_list_type in0_p_list;\n    typename NODE_TYPE::successor_list_type in0_s_list;\n    typename NODE_TYPE::predecessor_list_type in1_p_list;\n    typename NODE_TYPE::successor_list_type in1_s_list;\n    typename NODE_TYPE::predecessor_list_type out0_p_list;\n    typename NODE_TYPE::successor_list_type out0_s_list;\n    typename NODE_TYPE::predecessor_list_type out1_p_list;\n    typename NODE_TYPE::successor_list_type out1_s_list;\n    typename NODE_TYPE::predecessor_list_type mp_list;\n    typename NODE_TYPE::predecessor_list_type::iterator mp_list_iter;\n    typename NODE_TYPE::successor_list_type ms_list;\n    typename NODE_TYPE::successor_list_type::iterator ms_list_iter;\n\n    virtual void set_up_lists() {\n        in0_p_list.clear();\n        in0_s_list.clear();\n        in1_p_list.clear();\n        in1_s_list.clear();\n        mp_list.clear();\n        ms_list.clear();\n        out0_p_list.clear();\n        out0_s_list.clear();\n        out1_p_list.clear();\n        out1_s_list.clear();\n        in0.copy_predecessors(in0_p_list);\n        in0.copy_successors(in0_s_list);\n        in1.copy_predecessors(in1_p_list);\n        in1.copy_successors(in1_s_list);\n        middle.copy_predecessors(mp_list);\n        middle.copy_successors(ms_list);\n        out0.copy_predecessors(out0_p_list);\n        out0.copy_successors(out0_s_list);\n        out1.copy_predecessors(out1_p_list);\n        out1.copy_successors(out1_s_list);\n    }\n\n    void make_and_validate_full_graph() {\n        /*     in0           out0  */\n        /*         \\       /       */\n        /*           middle        */\n        /*         /       \\       */\n        /*     in1           out1  */\n        tbb::flow::make_edge( in0, middle );\n        tbb::flow::make_edge( in1, middle );\n        tbb::flow::make_edge( middle, out0 );\n        tbb::flow::make_edge( middle, out1 );\n\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 1 && in0_s_list.size() == 1 && *(in0_s_list.begin()) == ms_ptr, \"expected 1 successor\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 1 && in1_s_list.size() == 1 && *(in1_s_list.begin()) == ms_ptr, \"expected 1 successor\" );\n        ASSERT( middle.predecessor_count() == 2 && mp_list.size() == 2, \"expected 2 predecessors\" );\n        ASSERT( middle.successor_count() == 2 && ms_list.size() == 2, \"expected 2 successors\" );\n        ASSERT( out0.predecessor_count() == 1 && out0_p_list.size() == 1 && *(out0_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 1 && out1_p_list.size() == 1 && *(out1_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        int first_pred = *(mp_list.begin()) == ins[0] ? 0 : ( *(mp_list.begin()) == ins[1] ? 1 : -1 );\n        mp_list_iter = mp_list.begin(); ++mp_list_iter;\n        int second_pred = *mp_list_iter == ins[0] ? 0 : ( *mp_list_iter == ins[1] ? 1 : -1 );\n        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, \"bad predecessor(s) for middle\" );\n\n        int first_succ = *(ms_list.begin()) == outs[0] ? 0 : ( *(ms_list.begin()) == outs[1] ? 1 : -1 );\n        ms_list_iter = ++(ms_list.begin());\n        int second_succ = *ms_list_iter == outs[0] ? 0 : ( *ms_list_iter == outs[1] ? 1 : -1 );\n        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, \"bad successor(s) for middle\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        g.wait_for_all();\n\n        int r = 0;\n        int v = 0;\n\n        ASSERT( in0.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( in1.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( middle.try_get(v) == false, \"buffer should not have a value\" );\n        while ( out0.try_get(v) ) {\n            ASSERT( (v == 1 || v == 2) && (v&r) == 0, \"duplicate value\" );\n            r |= v;\n            g.wait_for_all();\n        }\n        while ( out1.try_get(v) ) {\n            ASSERT( (v == 1 || v == 2) && (v&r) == 0, \"duplicate value\" );\n            r |= v;\n            g.wait_for_all();\n        }\n        ASSERT( r == 3, \"not all values received\" );\n        g.wait_for_all();\n    }\n\n    void validate_half_graph() {\n        /*     in0           out0  */\n        /*                         */\n        /*           middle        */\n        /*         /       \\       */\n        /*     in1           out1  */\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 0 && in0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 1 && in1_s_list.size() == 1 && *(in1_s_list.begin()) == ms_ptr, \"expected 1 successor\" );\n        ASSERT( middle.predecessor_count() == 1 && mp_list.size() == 1, \"expected 1 predecessor\" );\n        ASSERT( middle.successor_count() == 1 && ms_list.size() == 1, \"expected 1 successor\" );\n        ASSERT( out0.predecessor_count() == 0 && out0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 1 && out1_p_list.size() == 1 && *(out1_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        ASSERT( middle.predecessor_count() == 1 && mp_list.size() == 1, \"expected two predecessors\" );\n        ASSERT( middle.successor_count() == 1 && ms_list.size() == 1, \"expected two successors\" );\n\n        ASSERT( *(mp_list.begin()) == ins[1], \"incorrect predecessor\" );\n        ASSERT( *(ms_list.begin()) == outs[1], \"incorrect successor\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        g.wait_for_all();\n\n        int v = 0;\n        ASSERT( in0.try_get(v) == true && v == 1, \"buffer should have a value of 1\" );\n        ASSERT( in1.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( middle.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( out0.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( out1.try_get(v) == true && v == 2, \"buffer should have a value of 2\" );\n        g.wait_for_all();\n    }\n\n    void validate_empty_graph() {\n        /*     in0           out0  */\n        /*                         */\n        /*           middle        */\n        /*                         */\n        /*     in1           out1  */\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 0 && in0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 0 && in1_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( middle.predecessor_count() == 0 && mp_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( middle.successor_count() == 0 && ms_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out0.predecessor_count() == 0 && out0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 0 && out1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        ASSERT( middle.predecessor_count() == 0 && mp_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( middle.successor_count() == 0 && ms_list.size() == 0, \"expected 0 successors\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        g.wait_for_all();\n\n        int v = 0;\n        ASSERT( in0.try_get(v) == true && v == 1, \"buffer should have a value of 1\" );\n        ASSERT( in1.try_get(v) == true && v == 2, \"buffer should have a value of 2\" );\n        ASSERT( middle.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( out0.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( out1.try_get(v) == false, \"buffer should not have a value\" );\n        g.wait_for_all();\n    }\n\n    // forbid the ecompiler generation of operator= (VS2012 warning)\n    test_buffer_base_extract& operator=(test_buffer_base_extract & /*other*/);\n\npublic:\n\n    test_buffer_base_extract(tbb::flow::graph &_g, NODE_TYPE &i0, NODE_TYPE &i1, NODE_TYPE &m, NODE_TYPE &o0, NODE_TYPE &o1) :\n        g(_g), in0(i0), in1(i1), middle(m), out0(o0), out1(o1) {\n        ins[0] = &in0;\n        ins[1] = &in1;\n        outs[0] = &out0;\n        outs[1] = &out1;\n        ms_ptr = static_cast< typename NODE_TYPE::successor_type * >(&middle);\n        mp_ptr = static_cast< typename NODE_TYPE::predecessor_type *>(&middle);\n    }\n\n    virtual ~test_buffer_base_extract() {}\n\n    void run_tests() {\n        make_and_validate_full_graph();\n\n        in0.extract();\n        out0.extract();\n        validate_half_graph();\n\n        in1.extract();\n        out1.extract();\n        validate_empty_graph();\n\n        make_and_validate_full_graph();\n\n        middle.extract();\n        validate_empty_graph();\n\n        make_and_validate_full_graph();\n    }\n\n};\n\ntemplate< typename NODE_TYPE >\nclass test_buffer_extract : public test_buffer_base_extract<NODE_TYPE> {\nprotected:\n    tbb::flow::graph my_g;\n    NODE_TYPE my_in0;\n    NODE_TYPE my_in1;\n    NODE_TYPE my_middle;\n    NODE_TYPE my_out0;\n    NODE_TYPE my_out1;\npublic:\n    test_buffer_extract() : test_buffer_base_extract<NODE_TYPE>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1),\n                            my_in0(my_g), my_in1(my_g), my_middle(my_g), my_out0(my_g), my_out1(my_g) { }\n};\n\ntemplate< >\nclass test_buffer_extract< tbb::flow::sequencer_node<int> > : public test_buffer_base_extract< tbb::flow::sequencer_node<int> > {\nprotected:\n    typedef tbb::flow::sequencer_node<int> my_node_t;\n    tbb::flow::graph my_g;\n    my_node_t my_in0;\n    my_node_t my_in1;\n    my_node_t my_middle;\n    my_node_t my_out0;\n    my_node_t my_out1;\n\n    typedef tbb::atomic<size_t> count_t;\n    count_t middle_count;\n    count_t out0_count;\n    count_t out1_count;\n\n    struct always_zero { size_t operator()(int) { return 0; } };\n    struct always_inc {\n        count_t *c;\n        always_inc(count_t &_c) : c(&_c) {}\n        size_t operator()(int) {\n            return c->fetch_and_increment();\n        }\n    };\n\n    void set_up_lists() __TBB_override {\n        middle_count = 0;\n        out0_count = 0;\n        out1_count = 0;\n        my_g.reset(); // reset the sequencer nodes to start at 0 again\n        test_buffer_base_extract< my_node_t >::set_up_lists();\n    }\n\n\npublic:\n    test_buffer_extract() : test_buffer_base_extract<my_node_t>( my_g, my_in0, my_in1, my_middle, my_out0, my_out1),\n                            my_in0(my_g, always_zero()), my_in1(my_g, always_zero()), my_middle(my_g, always_inc(middle_count)),\n                            my_out0(my_g, always_inc(out0_count)), my_out1(my_g, always_inc(out1_count)) {\n    }\n};\n\n// test for simple node that has one input, one output (overwrite_node, write_once_node, limiter_node)\n// decrement tests have to be done separately.\ntemplate<template< class > class NType, typename ItemType>\nvoid test_extract_on_node() {\n    tbb::flow::graph g;\n    ItemType dont_care;\n    NType<ItemType> node0(g);\n    tbb::flow::queue_node<ItemType> q0(g);\n    tbb::flow::queue_node<ItemType> q1(g);\n    tbb::flow::queue_node<ItemType> q2(g);\n    for( int i = 0; i < 2; ++i) {\n        tbb::flow::make_edge(q0,node0);\n        tbb::flow::make_edge(q1,node0);\n        tbb::flow::make_edge(node0, q2);\n        q0.try_put(ItemType(i));\n        g.wait_for_all();\n\n        /* q0               */\n        /*   \\              */\n        /*    \\             */\n        /*      node0 -- q2 */\n        /*    /             */\n        /*   /              */\n        /* q1               */\n\n        ASSERT(node0.predecessor_count() == 2 && q0.successor_count() == 1 && q1.successor_count() == 1, \"bad predecessor count\");\n        ASSERT(node0.successor_count() == 1 && q2.predecessor_count() == 1, \"bad successor count\");\n\n        ASSERT(q2.try_get(dont_care) && int(dont_care) == i, \"item not forwarded\");\n        typename NType<ItemType>::successor_list_type sv, sv1;\n        typename NType<ItemType>::predecessor_list_type pv, pv1;\n\n        pv1.push_back(&q0);\n        pv1.push_back(&q1);\n        sv1.push_back(&q2);\n        node0.copy_predecessors(pv);\n        node0.copy_successors(sv);\n        ASSERT(lists_match(pv,pv1), \"predecessor vector incorrect\");\n        ASSERT(lists_match(sv,sv1), \"successor vector incorrect\");\n\n        if(i == 0) {\n            node0.extract();\n        }\n        else {\n            q0.extract();\n            q1.extract();\n            q2.extract();\n        }\n\n        q0.try_put(ItemType(2));\n        g.wait_for_all();\n        ASSERT(!q2.try_get(dont_care), \"node0 not disconnected\");\n        ASSERT(q0.try_get(dont_care), \"q0 empty (should have one item)\");\n\n        node0.copy_predecessors(pv);\n        node0.copy_successors(sv);\n        ASSERT(node0.predecessor_count() == 0 && q0.successor_count() == 0 && q1.successor_count() == 0, \"error in pred count after extract\");\n        ASSERT(pv.size() == 0, \"error in pred array count after extract\");\n        ASSERT(node0.successor_count() == 0 && q2.predecessor_count() == 0, \"error in succ count after extract\");\n        ASSERT(sv.size() == 0, \"error in succ array count after extract\");\n        g.wait_for_all();\n    }\n}\n\n#endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\ntemplate<typename NodeType>\nvoid test_input_ports_return_ref(NodeType& mip_node) {\n    typename NodeType::input_ports_type& input_ports1 = mip_node.input_ports();\n    typename NodeType::input_ports_type& input_ports2 = mip_node.input_ports();\n    ASSERT(&input_ports1 == &input_ports2, \"input_ports() should return reference\");\n}\n\ntemplate<typename NodeType>\nvoid test_output_ports_return_ref(NodeType& mop_node) {\n    typename NodeType::output_ports_type& output_ports1 = mop_node.output_ports();\n    typename NodeType::output_ports_type& output_ports2 = mop_node.output_ports();\n    ASSERT(&output_ports1 == &output_ports2, \"output_ports() should return reference\");\n}\n\ntemplate< template <typename> class ReservingNodeType, typename DataType, bool DoClear >\nclass harness_reserving_body : NoAssign {\n    ReservingNodeType<DataType> &my_reserving_node;\n    tbb::flow::buffer_node<DataType> &my_buffer_node;\npublic:\n    harness_reserving_body(ReservingNodeType<DataType> &reserving_node, tbb::flow::buffer_node<DataType> &bn) : my_reserving_node(reserving_node), my_buffer_node(bn) {}\n    void operator()(DataType i) const {\n        my_reserving_node.try_put(i);\n        if (DoClear) my_reserving_node.clear();\n        my_buffer_node.try_put(i);\n        my_reserving_node.try_put(i);\n    }\n};\n\ntemplate< template <typename> class ReservingNodeType, typename DataType >\nvoid test_reserving_nodes() {\n    const int N = 300;\n\n    tbb::flow::graph g;\n\n    ReservingNodeType<DataType> reserving_n(g);\n\n    tbb::flow::buffer_node<DataType> buffering_n(g);\n    tbb::flow::join_node< tbb::flow::tuple<DataType, DataType>, tbb::flow::reserving > join_n(g);\n    harness_counting_receiver< tbb::flow::tuple<DataType, DataType> > end_receiver(g);\n\n    tbb::flow::make_edge(reserving_n, tbb::flow::input_port<0>(join_n));\n    tbb::flow::make_edge(buffering_n, tbb::flow::input_port<1>(join_n));\n    tbb::flow::make_edge(join_n, end_receiver);\n\n    NativeParallelFor(N, harness_reserving_body<ReservingNodeType, DataType, false>(reserving_n, buffering_n));\n    g.wait_for_all();\n\n    ASSERT(end_receiver.my_count == N, NULL);\n\n    // Should not hang\n    NativeParallelFor(N, harness_reserving_body<ReservingNodeType, DataType, true>(reserving_n, buffering_n));\n    g.wait_for_all();\n\n    ASSERT(end_receiver.my_count == 2 * N, NULL);\n}\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\nnamespace lightweight_testing {\n\ntypedef tbb::flow::tuple<int, int> output_tuple_type;\n\ntemplate<typename NodeType>\nclass native_loop_body : NoAssign {\n    NodeType& my_node;\npublic:\n    native_loop_body(NodeType& node) : my_node(node) {}\n\n    void operator()(int) const {\n        tbb::tbb_thread::id this_id = tbb::this_tbb_thread::get_id();\n        my_node.try_put(this_id);\n    }\n};\n\nclass concurrency_checker_body {\npublic:\n    tbb::atomic<int> my_body_count;\n\n    concurrency_checker_body() {\n        my_body_count = 0;\n    }\n\n    template<typename gateway_type>\n    void operator()(const tbb::tbb_thread::id& input, gateway_type&) {\n        increase_and_check(input);\n    }\n\n    output_tuple_type operator()(const tbb::tbb_thread::id& input) {\n        increase_and_check(input);\n        return output_tuple_type();\n    }\n\nprivate:\n    void increase_and_check(const tbb::tbb_thread::id& input) {\n        ++my_body_count;\n        tbb::tbb_thread::id body_thread_id = tbb::this_tbb_thread::get_id();\n        ASSERT(input == body_thread_id, \"Body executed as not lightweight\");\n    }\n};\n\ntemplate<typename NodeType>\nvoid test_unlimited_lightweight_execution(const int& N) {\n    tbb::flow::graph g;\n    NodeType node(g, tbb::flow::unlimited, concurrency_checker_body());\n\n    NativeParallelFor(N, native_loop_body<NodeType>(node));\n    g.wait_for_all();\n\n    concurrency_checker_body body = tbb::flow::copy_body<concurrency_checker_body>(node);\n    ASSERT(int(body.my_body_count) == N, \"Body needs to be executed N times\");\n}\n\n// Using TBB implementation of condition variable\n// not to include std header, which has problems with old GCC\nusing tbb::interface5::condition_variable;\nusing tbb::interface5::unique_lock;\n\ntbb::mutex m;\ncondition_variable lightweight_condition;\nbool work_submitted;\nbool lightweight_work_processed;\n\ntemplate<typename NodeType>\nclass native_loop_limited_body : NoAssign {\n    NodeType& my_node;\n    Harness::SpinBarrier& my_barrier;\npublic:\n    native_loop_limited_body(NodeType& node, Harness::SpinBarrier& barrier):\n        my_node(node), my_barrier(barrier) {}\n    void operator()(int) const {\n        tbb::tbb_thread::id this_id = tbb::this_tbb_thread::get_id();\n        my_node.try_put(this_id);\n        if(!lightweight_work_processed) {\n            my_barrier.wait();\n            work_submitted = true;\n            lightweight_condition.notify_all();\n        }\n    }\n};\n\nstruct condition_predicate {\n    bool operator()() {\n        return work_submitted;\n    }\n};\n\nclass limited_lightweight_checker_body {\npublic:\n    tbb::atomic<int> my_body_count;\n    tbb::atomic<int> my_lightweight_count;\n    tbb::atomic<int> my_task_count;\n    limited_lightweight_checker_body() {\n        my_body_count = 0;\n        my_lightweight_count = 0;\n        my_task_count = 0;\n    }\nprivate:\n    void increase_and_check(const tbb::tbb_thread::id& /*input*/) {\n        ++my_body_count;\n        bool is_task = tbb::task::self().state() == tbb::task::executing;\n        if(is_task) {\n            ++my_task_count;\n        } else {\n            unique_lock<tbb::mutex> lock(m);\n            lightweight_condition.wait(lock, condition_predicate());\n            ++my_lightweight_count;\n            lightweight_work_processed = true;\n        }\n    }\npublic:\n    template<typename gateway_type>\n    void operator()(const tbb::tbb_thread::id& input, gateway_type&) {\n        increase_and_check(input);\n    }\n    output_tuple_type operator()(const tbb::tbb_thread::id& input) {\n        increase_and_check(input);\n        return output_tuple_type();\n    }\n};\n\ntemplate<typename NodeType>\nvoid test_limited_lightweight_execution(const int& N, size_t concurrency) {\n    ASSERT(concurrency != tbb::flow::unlimited,\n           \"Test for limited concurrency cannot be called with unlimited concurrency argument\");\n    tbb::flow::graph g;\n    NodeType node(g, concurrency, limited_lightweight_checker_body());\n    // Execute first body as lightweight, then wait for all other threads to fill internal buffer.\n    // Then unblock the lightweightd thread and check if other body executions are inside tbb task.\n    Harness::SpinBarrier barrier(N - concurrency);\n    NativeParallelFor(N, native_loop_limited_body<NodeType>(node, barrier));\n    g.wait_for_all();\n    limited_lightweight_checker_body body = tbb::flow::copy_body<limited_lightweight_checker_body>(node);\n    ASSERT(int(body.my_body_count) == N, \"Body needs to be executed N times\");\n    ASSERT(int(body.my_lightweight_count) == concurrency, \"Body needs to be executed as lightweight once\");\n    ASSERT(int(body.my_task_count) == N - concurrency, \"Body needs to be executed as not lightweight N - 1 times\");\n    work_submitted = false;\n    lightweight_work_processed = false;\n}\n\ntemplate<typename NodeType>\nvoid test_lightweight(const int& N) {\n    test_unlimited_lightweight_execution<NodeType>(N);\n    test_limited_lightweight_execution<NodeType>(N, tbb::flow::serial);\n    test_limited_lightweight_execution<NodeType>(N, (std::min)(size_t(tbb::tbb_thread::hardware_concurrency() / 2),\n                                                             size_t(N/2)));\n}\n\ntemplate<template<typename, typename, typename, typename> class NodeType>\nvoid test(const int& N) {\n    typedef tbb::tbb_thread::id input_type;\n    typedef tbb::cache_aligned_allocator<input_type> allocator_type;\n    typedef NodeType<input_type, output_tuple_type, tbb::flow::queueing_lightweight, allocator_type> node_type;\n    test_lightweight<node_type>(N);\n}\n\n}\n#endif // __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_inject_scheduler.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Used in tests that work with TBB scheduler but do not link to the TBB library.\n// In other words it embeds the TBB library core into the test executable.\n\n#ifndef harness_inject_scheduler_H\n#define harness_inject_scheduler_H\n\n#if HARNESS_DEFINE_PRIVATE_PUBLIC\n#include <string> // merely prevents LNK2019 error to happen (on ICL+VC9 configurations)\n#include <algorithm> // include it first to avoid error on define below\n#define private public\n#define protected public\n#endif\n\n// Suppress usage of #pragma comment\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n\n// Enable preview features if any\n#define __TBB_BUILD 1\n\n#undef DO_ITT_NOTIFY\n\n#define __TBB_SOURCE_DIRECTLY_INCLUDED 1\n#include \"../tbb/tbb_main.cpp\"\n#include \"../tbb/dynamic_link.cpp\"\n#include \"../tbb/tbb_misc_ex.cpp\"\n\n// Tasking subsystem files\n#include \"../tbb/governor.cpp\"\n#include \"../tbb/market.cpp\"\n#include \"../tbb/arena.cpp\"\n#include \"../tbb/scheduler.cpp\"\n#include \"../tbb/observer_proxy.cpp\"\n#include \"../tbb/task.cpp\"\n#include \"../tbb/task_group_context.cpp\"\n\n// Other dependencies\n#include \"../tbb/cache_aligned_allocator.cpp\"\n#include \"../tbb/tbb_thread.cpp\"\n#include \"../tbb/mutex.cpp\"\n#include \"../tbb/spin_rw_mutex.cpp\"\n#include \"../tbb/spin_mutex.cpp\"\n#include \"../tbb/private_server.cpp\"\n#include \"../tbb/concurrent_monitor.cpp\"\n#if _WIN32||_WIN64\n#include \"../tbb/semaphore.cpp\"\n#endif\n#include \"../rml/client/rml_tbb.cpp\"\n\n#if HARNESS_USE_RUNTIME_LOADER\n#undef HARNESS_USE_RUNTIME_LOADER\n#include \"harness.h\"\n\nint TestMain () {\n    // Tests that directly include sources make no sense in runtime loader testing mode.\n    return Harness::Skipped;\n}\n// Renaming the TestMain function avoids conditional compilation around same function in the test file\n#define TestMain TestMainSkipped\n#endif\n\n#if HARNESS_DEFINE_PRIVATE_PUBLIC\n#undef protected\n#undef private\n#endif\n\n#endif /* harness_inject_scheduler_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_iterator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef harness_iterator_H\n#define harness_iterator_H\n\n#include <iterator>\n#include <memory>\n#include \"tbb/atomic.h\"\n#include \"harness_assert.h\"\n\nnamespace Harness {\n\ntemplate <typename T>\nclass InputIterator {\npublic:\n    typedef std::input_iterator_tag iterator_category;\n    typedef T value_type;\n    typedef typename std::allocator<T>::difference_type difference_type;\n    typedef typename std::allocator<T>::pointer pointer;\n    typedef typename std::allocator<T>::reference reference;\n\n    explicit InputIterator ( T * ptr ) : my_ptr(ptr), my_shared_epoch(new Epoch), my_current_epoch(0) {}\n\n    InputIterator( const InputIterator& it ) {\n        ASSERT(it.my_current_epoch == it.my_shared_epoch->epoch, \"Copying an invalidated iterator\");\n        my_ptr = it.my_ptr;\n        my_shared_epoch = it.my_shared_epoch;\n        my_current_epoch = it.my_current_epoch;\n        ++my_shared_epoch->refcounter;\n    }\n\n    InputIterator& operator= ( const InputIterator& it ) {\n        ASSERT(it.my_current_epoch == it.my_shared_epoch->epoch, \"Assigning an invalidated iterator\");\n        my_ptr = it.my_ptr;\n        my_current_epoch = it.my_current_epoch;\n        if(my_shared_epoch == it.my_shared_epoch)\n            return *this;\n        destroy();\n        my_shared_epoch = it.my_shared_epoch;\n        ++my_shared_epoch->refcounter;\n        return *this;\n    }\n\n    T& operator* () const {\n        ASSERT(my_shared_epoch->epoch == my_current_epoch, \"Dereferencing an invalidated input iterator\");\n        return *my_ptr;\n    }\n\n    InputIterator& operator++ () {\n        ASSERT(my_shared_epoch->epoch == my_current_epoch, \"Incrementing an invalidated input iterator\");\n        ++my_ptr;\n        ++my_current_epoch;\n        ++my_shared_epoch->epoch;\n        return *this;\n    }\n\n    bool operator== ( const InputIterator& it ) const {\n        ASSERT(my_shared_epoch->epoch == my_current_epoch, \"Comparing an invalidated input iterator\");\n        ASSERT(it.my_shared_epoch->epoch == it.my_current_epoch, \"Comparing with an invalidated input iterator\");\n        return my_ptr == it.my_ptr;\n    }\n\n    ~InputIterator() {\n        destroy();\n    }\nprivate:\n    void destroy() {\n        if(0 == --my_shared_epoch->refcounter) {\n            delete my_shared_epoch;\n        }\n    }\n    struct Epoch {\n        typedef tbb::atomic<size_t> Counter;\n        Epoch() { epoch = 0; refcounter = 1; }\n        Counter epoch;\n        Counter refcounter;\n    };\n\n    T * my_ptr;\n    Epoch *my_shared_epoch;\n    size_t my_current_epoch;\n};\n\ntemplate <typename T>\nclass ForwardIterator {\n    T * my_ptr;\npublic:\n    typedef std::forward_iterator_tag iterator_category;\n    typedef T value_type;\n    typedef typename std::allocator<T>::difference_type difference_type;\n    typedef typename std::allocator<T>::pointer pointer;\n    typedef typename std::allocator<T>::reference reference;\n\n    explicit ForwardIterator ( T * ptr ) : my_ptr(ptr){}\n\n    ForwardIterator ( const ForwardIterator& r ) : my_ptr(r.my_ptr){}\n    T& operator* () const { return *my_ptr; }\n    ForwardIterator& operator++ () { ++my_ptr; return *this; }\n    bool operator== ( const ForwardIterator& r ) const { return my_ptr == r.my_ptr; }\n};\n\ntemplate <typename T>\nclass RandomIterator {\n    T * my_ptr;\npublic:\n    typedef std::random_access_iterator_tag iterator_category;\n    typedef T value_type;\n    typedef typename std::allocator<T>::pointer pointer;\n    typedef typename std::allocator<T>::reference reference;\n    typedef typename std::allocator<T>::difference_type difference_type;\n\n    explicit RandomIterator ( T * ptr ) : my_ptr(ptr){}\n    RandomIterator ( const RandomIterator& r ) : my_ptr(r.my_ptr){}\n    T& operator* () const { return *my_ptr; }\n    RandomIterator& operator++ () { ++my_ptr; return *this; }\n    bool operator== ( const RandomIterator& r ) const { return my_ptr == r.my_ptr; }\n    bool operator!= ( const RandomIterator& r ) const { return my_ptr != r.my_ptr; }\n    difference_type operator- (const RandomIterator &r) const {return my_ptr - r.my_ptr;}\n    RandomIterator operator+ (difference_type n) const {return RandomIterator(my_ptr + n);}\n    bool operator< (const RandomIterator &r) const {return my_ptr < r.my_ptr;}\n};\n\ntemplate <typename T>\nclass ConstRandomIterator {\n    const T * my_ptr;\npublic:\n    typedef std::random_access_iterator_tag iterator_category;\n    typedef const T value_type;\n    typedef typename std::allocator<T>::const_pointer pointer;\n    typedef typename std::allocator<T>::const_reference reference;\n    typedef typename std::allocator<T>::difference_type difference_type;\n\n    explicit ConstRandomIterator ( const T * ptr ) : my_ptr(ptr){}\n    ConstRandomIterator ( const ConstRandomIterator& r ) : my_ptr(r.my_ptr){}\n    const T& operator* () const { return *my_ptr; }\n    ConstRandomIterator& operator++ () { ++my_ptr; return *this; }\n    bool operator== ( const ConstRandomIterator& r ) const { return my_ptr == r.my_ptr; }\n    bool operator!= ( const ConstRandomIterator& r ) const { return my_ptr != r.my_ptr; }\n    difference_type operator- (const ConstRandomIterator &r) const {return my_ptr - r.my_ptr;}\n    ConstRandomIterator operator+ (difference_type n) const {return ConstRandomIterator(my_ptr + n);}\n    bool operator< (const ConstRandomIterator &r) const {return my_ptr < r.my_ptr;}\n};\n\n} // namespace Harness\n\n#endif //harness_iterator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_m128.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Header that sets HAVE_m128/HAVE_m256 if vector types (__m128/__m256) are available\n\n//! Class for testing safety of using vector types.\n/** Uses circuitous logic forces compiler to put __m128/__m256 objects on stack while\n    executing various methods, and thus tempt it to use aligned loads and stores\n    on the stack. */\n//  Do not create file-scope objects of the class, because MinGW (as of May 2010)\n//  did not always provide proper stack alignment in destructors of such objects.\n\n#if (_MSC_VER>=1600)\n//TODO: handle /arch:AVX in the right way.\n#pragma warning (push)\n#pragma warning (disable: 4752)\n#endif\n\ntemplate<typename __Mvec>\nclass ClassWithVectorType {\n    static const int n = 16;\n    static const int F = sizeof(__Mvec)/sizeof(float);\n    __Mvec field[n];\n    void init( int start );\npublic:\n    ClassWithVectorType() {init(-n);}\n    ClassWithVectorType( int i ) {init(i);}\n    void operator=( const ClassWithVectorType& src ) {\n        __Mvec stack[n];\n        for( int i=0; i<n; ++i )\n            stack[i^5] = src.field[i];\n        for( int i=0; i<n; ++i )\n            field[i^5] = stack[i];\n    }\n    ~ClassWithVectorType() {init(-2*n);}\n    friend bool operator==( const ClassWithVectorType& x, const ClassWithVectorType& y ) {\n        for( int i=0; i<F*n; ++i )\n            if( ((const float*)x.field)[i]!=((const float*)y.field)[i] )\n                return false;\n        return true;\n    }\n    friend bool operator!=( const ClassWithVectorType& x, const ClassWithVectorType& y ) {\n        return !(x==y);\n    }\n};\n\ntemplate<typename __Mvec>\nvoid ClassWithVectorType<__Mvec>::init( int start ) {\n    __Mvec stack[n];\n    for( int i=0; i<n; ++i ) {\n        // Declaring value as a one-element array instead of a scalar quites\n        // gratuitous warnings about possible use of \"value\" before it was set.\n        __Mvec value[1];\n        for( int j=0; j<F; ++j )\n            ((float*)value)[j] = float(n*start+F*i+j);\n        stack[i^5] = value[0];\n    }\n    for( int i=0; i<n; ++i )\n        field[i^5] = stack[i];\n}\n\n#if (__AVX__ || (_MSC_VER>=1600 && _M_X64)) && !defined(__sun)\n#include <immintrin.h>\n#define HAVE_m256 1\ntypedef ClassWithVectorType<__m256> ClassWithAVX;\n#if _MSC_VER\n#include <intrin.h> // for __cpuid\n#endif\nbool have_AVX() {\n    bool result = false;\n    const int avx_mask = 1<<28;\n#if _MSC_VER || __INTEL_COMPILER\n    int info[4] = {0,0,0,0};\n    const int ECX = 2;\n    __cpuid(info, 1);\n    result = (info[ECX] & avx_mask)!=0;\n#elif __GNUC__\n    int ECX;\n    __asm__( \"cpuid\"\n             : \"=c\"(ECX)\n             : \"a\" (1)\n             : \"ebx\", \"edx\" );\n    result = (ECX & avx_mask);\n#endif\n    return result;\n}\n#endif /* __AVX__ etc */\n\n#if (__SSE__ || _M_IX86_FP || _M_X64) && !defined(__sun)\n#include <xmmintrin.h>\n#define HAVE_m128 1\ntypedef ClassWithVectorType<__m128> ClassWithSSE;\n#endif\n\n#if (_MSC_VER>=1600)\n#pragma warning (pop)\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_memory.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for simple estimate of the memory being used by a program.\n// Not yet implemented for macOS*.\n// This header is an optional part of the test harness.\n// It assumes that \"harness_assert.h\" has already been included.\n\n#if __linux__ || __sun\n#include <sys/resource.h>\n#include <unistd.h>\n\n#elif __APPLE__ && !__ARM_ARCH\n#include <unistd.h>\n#include <mach/mach.h>\n#include <AvailabilityMacros.h>\n#if MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0\n#include <mach/shared_region.h>\n#else\n#include <mach/shared_memory_server.h>\n#endif\n#if SHARED_TEXT_REGION_SIZE || SHARED_DATA_REGION_SIZE\nconst size_t shared_size = SHARED_TEXT_REGION_SIZE+SHARED_DATA_REGION_SIZE;\n#else\nconst size_t shared_size = 0;\n#endif\n\n#elif _WIN32 && !__TBB_WIN8UI_SUPPORT\n#include <windows.h>\n#include <psapi.h>\n#if _MSC_VER\n#pragma comment(lib, \"psapi\")\n#endif\n\n#endif /* OS selection */\n\nenum MemoryStatType {\n    currentUsage,\n    peakUsage\n};\n\n//! Return estimate of number of bytes of memory that this program is currently using.\n/* Returns 0 if not implemented on platform. */\nsize_t GetMemoryUsage(MemoryStatType stat = currentUsage) {\n    ASSERT(stat==currentUsage || stat==peakUsage, NULL);\n#if __TBB_WIN8UI_SUPPORT\n    return 0;\n#elif _WIN32\n    PROCESS_MEMORY_COUNTERS mem;\n    bool status = GetProcessMemoryInfo(GetCurrentProcess(), &mem, sizeof(mem))!=0;\n    ASSERT(status, NULL);\n    return stat==currentUsage? mem.PagefileUsage : mem.PeakPagefileUsage;\n#elif __linux__\n    long unsigned size = 0;\n    FILE *fst = fopen(\"/proc/self/status\", \"r\");\n    ASSERT(fst, NULL);\n    const int BUF_SZ = 200;\n    char buf_stat[BUF_SZ];\n    const char *pattern = stat==peakUsage ? \"VmPeak: %lu\" : \"VmSize: %lu\";\n    while (NULL != fgets(buf_stat, BUF_SZ, fst)) {\n        if (1==sscanf(buf_stat, pattern, &size)) {\n            ASSERT(size, \"Invalid value of memory consumption.\");\n            break;\n        }\n    }\n    // VmPeak is available in kernels staring 2.6.15\n    if (stat!=peakUsage || LinuxKernelVersion() >= 2006015)\n        ASSERT(size, \"Invalid /proc/self/status format, pattern not found.\");\n    fclose(fst);\n    return size*1024;\n#elif __APPLE__ && !__ARM_ARCH\n    // TODO: find how detect peak virtual memory size under macOS\n    if (stat == peakUsage)\n        return 0;\n    kern_return_t status;\n    task_basic_info info;\n    mach_msg_type_number_t msg_type = TASK_BASIC_INFO_COUNT;\n    status = task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&info), &msg_type);\n    ASSERT(status==KERN_SUCCESS, NULL);\n    return info.virtual_size - shared_size;\n#else\n    return 0;\n#endif\n}\n\n//! Use approximately a specified amount of stack space.\n/** Recursion is used here instead of alloca because some implementations of alloca do not use the stack. */\nvoid UseStackSpace( size_t amount, char* top=0 ) {\n    char x[1000];\n    memset( x, -1, sizeof(x) );\n    if( !top )\n        top = x;\n    ASSERT( x<=top, \"test assumes that stacks grow downwards\" );\n    if( size_t(top-x)<amount )\n        UseStackSpace( amount, top );\n}\n\n#if __linux__\n// Parse file utility\n#include \"../tbbmalloc/shared_utils.h\"\n\ninline bool isTHPEnabledOnMachine() {\n    unsigned long long thpPresent = 'n';\n    parseFileItem thpItem[] = { { \"[alwa%cs] madvise never\\n\", thpPresent } };\n    parseFile</*BUFF_SIZE=*/100>(\"/sys/kernel/mm/transparent_hugepage/enabled\", thpItem);\n\n    if (thpPresent == 'y') {\n        return true;\n    } else {\n        return false;\n    }\n}\ninline unsigned long long getSystemTHPAllocatedSize() {\n    unsigned long long anonHugePagesSize = 0;\n    parseFileItem meminfoItems[] = {\n        { \"AnonHugePages: %llu kB\", anonHugePagesSize } };\n    parseFile</*BUFF_SIZE=*/100>(\"/proc/meminfo\", meminfoItems);\n    return anonHugePagesSize;\n}\ninline unsigned long long getSystemTHPCount() {\n    unsigned long long anonHugePages = 0;\n    parseFileItem vmstatItems[] = {\n        { \"nr_anon_transparent_hugepages %llu\", anonHugePages } };\n    parseFile</*BUFF_SIZE=*/100>(\"/proc/vmstat\", vmstatItems);\n    return anonHugePages;\n}\n#endif // __linux__\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_mic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_test_harness_mic_H\n#define tbb_test_harness_mic_H\n\n#if ! __TBB_DEFINE_MIC\n    #error test/harness_mic.h should be included only when building for Intel(R) Many Integrated Core Architecture\n#endif\n\n// test for unifed sources. See makefiles\n#undef HARNESS_INCOMPLETE_SOURCES\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#define TBB_TEST_LOW_WORKLOAD 1\n\n#define REPORT_FATAL_ERROR  REPORT\n#define HARNESS_EXPORT\n\n#if __TBB_MIC_NATIVE\n    #define HARNESS_EXIT_ON_ASSERT 1\n    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1\n#else\n    #define HARNESS_TERMINATE_ON_ASSERT 1\n#endif\n\n#endif /* tbb_test_harness_mic_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_preload.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// This file is intended for preloading (via compiler options such as -include) into every test.\n// Alas, not all compilers have such options, so the file is \"optional\".\n\n// Only add here things that are necessary for *every* test!\n// In particular, avoid including other headers.\n// Since this file can be omitted, checking compiler-specific conditions is strongly recommended.\n\n#ifndef harness_preload_H\n#define harness_preload_H\n\n#if __GNUC__>=5 && !__INTEL_COMPILER && !__clang__ && __GXX_EXPERIMENTAL_CXX0X__\n// GCC 5 has added -Wsuggest-override, but unfortunately enables it even in pre-C++11 mode.\n// We only want to use it for C++11 though.\n#pragma GCC diagnostic warning \"-Wsuggest-override\"\n#define __TBB_TEST_USE_WSUGGEST_OVERRIDE 1\n#endif\n// TODO: consider adding a similar option for clang\n\n#if __TBB_TEST_NO_EXCEPTIONS\n// This code breaks our own recommendations above, and it's deliberate:\n// it includes another file, but that file should only have macros and pragmas;\n// it does not check for compiler, as that is checked in the included file.\n// The file also defines TBB_USE_EXCEPTIONS=0, which is set for all tests via makefiles anyway.\n#include \"tbb/tbb_disable_exceptions.h\"\n#endif\n\n#endif /* harness_preload_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_report.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Just the tracing portion of the harness.\n//\n// This header defines TRACE and TRACENL macros, which use REPORT like syntax and\n// are useful for duplicating trace output to the standard debug output on Windows.\n// It is possible to add the ability of automatic extending messages with additional\n// info (file, line, function, time, thread ID, ...).\n//\n// Macros output nothing when test app runs in non-verbose mode (default).\n//\n\n#ifndef tbb_tests_harness_report_H\n#define tbb_tests_harness_report_H\n\n#if defined(MAX_TRACE_SIZE) && MAX_TRACE_SIZE < 1024\n    #undef MAX_TRACE_SIZE\n#endif\n#ifndef MAX_TRACE_SIZE\n    #define MAX_TRACE_SIZE  1024\n#endif\n\n#if __SUNPRO_CC\n#include <stdio.h>\n#else\n#include <cstdio>\n#endif\n\n#include <cstdarg>\n\n// Need to include \"tbb/tbb_config.h\" to obtain the definition of __TBB_DEFINE_MIC.\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_DEFINE_MIC\n#include \"harness_mic.h\"\n#endif\n\n#ifdef HARNESS_INCOMPLETE_SOURCES\n#error Source files are not complete. Check the build environment\n#endif\n\n#if _MSC_VER\n    #define snprintf _snprintf\n#if _MSC_VER<=1400\n    #define vsnprintf _vsnprintf\n#endif\n#endif\n\nnamespace Harness {\n    namespace internal {\n\n#ifndef TbbHarnessReporter\n    struct TbbHarnessReporter {\n        void Report ( const char* msg ) {\n            printf( \"%s\", msg );\n            fflush(stdout);\n#ifdef _WINDOWS_\n            OutputDebugStringA(msg);\n#endif\n        }\n    }; // struct TbbHarnessReporter\n#endif /* !TbbHarnessReporter */\n\n    class Tracer {\n        int         m_flags;\n        const char  *m_file;\n        const char  *m_func;\n        size_t      m_line;\n\n        TbbHarnessReporter m_reporter;\n\n    public:\n        enum  {\n            prefix = 1,\n            need_lf = 2\n        };\n\n        Tracer(): m_flags(0), m_file(NULL), m_func(NULL), m_line(0) {}\n\n        Tracer*  set_trace_info ( int flags, const char *file, size_t line, const char *func ) {\n            m_flags = flags;\n            m_line = line;\n            m_file = file;\n            m_func = func;\n            return  this;\n        }\n\n        void  trace ( const char* fmt, ... ) {\n            char    msg[MAX_TRACE_SIZE];\n            char    msg_fmt_buf[MAX_TRACE_SIZE];\n            const char  *msg_fmt = fmt;\n            if ( m_flags & prefix ) {\n                snprintf (msg_fmt_buf, MAX_TRACE_SIZE, \"[%s] %s\", m_func, fmt);\n                msg_fmt = msg_fmt_buf;\n            }\n            std::va_list argptr;\n            va_start (argptr, fmt);\n            int len = vsnprintf (msg, MAX_TRACE_SIZE, msg_fmt, argptr);\n            va_end (argptr);\n            if ( m_flags & need_lf &&\n                 len < MAX_TRACE_SIZE - 1  &&  msg_fmt[len-1] != '\\n' )\n            {\n                msg[len] = '\\n';\n                msg[len + 1] = 0;\n            }\n            m_reporter.Report(msg);\n        }\n    }; // class Tracer\n\n    static Tracer tracer;\n\n    template<int>\n    bool not_the_first_call () {\n        static bool first_call = false;\n        bool res = first_call;\n        first_call = true;\n        return res;\n    }\n\n    } // namespace internal\n} // namespace Harness\n\n#if defined(_MSC_VER)  &&  _MSC_VER >= 1300  ||  defined(__GNUC__)  ||  defined(__GNUG__)\n    #define HARNESS_TRACE_ORIG_INFO __FILE__, __LINE__, __FUNCTION__\n#else\n    #define HARNESS_TRACE_ORIG_INFO __FILE__, __LINE__, \"\"\n    #define __FUNCTION__ \"\"\n#endif\n\n\n//! printf style tracing macro\n/** This variant of TRACE adds trailing line-feed (new line) character, if it is absent. **/\n#define TRACE Harness::internal::tracer.set_trace_info(Harness::internal::Tracer::need_lf, HARNESS_TRACE_ORIG_INFO)->trace\n\n//! printf style tracing macro without automatic new line character adding\n#define TRACENL Harness::internal::tracer.set_trace_info(0, HARNESS_TRACE_ORIG_INFO)->trace\n\n//! printf style tracing macro with additional information prefix (e.g. current function name)\n#define TRACEP Harness::internal::tracer.set_trace_info(Harness::internal::Tracer::prefix | \\\n                                    Harness::internal::Tracer::need_lf, HARNESS_TRACE_ORIG_INFO)->trace\n\n//! printf style remark macro\n/** Produces output only when the test is run with the -v (verbose) option. **/\n#define REMARK  !Verbose ? (void)0 : TRACENL\n\n//! printf style remark macro\n/** Produces output only when invoked first time.\n    Only one instance of this macro is allowed per source code line. **/\n#define REMARK_ONCE (!Verbose || Harness::internal::not_the_first_call<__LINE__>()) ? (void)0 : TRACE\n\n//! printf style reporting macro\n/** On heterogeneous platforms redirects its output to the host side. **/\n#define REPORT TRACENL\n\n//! printf style reporting macro\n/** Produces output only when invoked first time.\n    Only one instance of this macro is allowed per source code line. **/\n#define REPORT_ONCE (Harness::internal::not_the_first_call<__LINE__>()) ? (void)0 : TRACENL\n\n#endif /* tbb_tests_harness_report_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_runtime_loader.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef harness_runtime_loader_H\n#define harness_runtime_loader_H\n\n#if HARNESS_USE_RUNTIME_LOADER\n    #if TEST_USES_TBB\n        #define TBB_PREVIEW_RUNTIME_LOADER 1\n        #include \"tbb/runtime_loader.h\"\n        static char const * _path[] = { \".\", NULL };\n        // declaration must be placed before 1st TBB call\n        static tbb::runtime_loader _runtime_loader( _path );\n    #else // TEST_USES_TBB\n        // if TBB library is not used, no need to test Runtime Loader\n        #define HARNESS_SKIP_TEST 1\n    #endif // TEST_USES_TBB\n#endif // HARNESS_USE_RUNTIME_LOADER\n\n#endif /* harness_runtime_loader_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_state_trackable.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Declarations for a class that can track operations applied to its objects.\n// This header is an optional part of the test harness.\n\n#ifndef tbb_test_harness_state_trackable_H\n#define tbb_test_harness_state_trackable_H\n\n#include <cstddef>\n#include <map>\n#include <tbb/atomic.h>\n\n#include \"harness_assert.h\"\n\nnamespace Harness{\n    struct StateTrackableBase {\n        enum StateValue {\n            ZeroInitialized     = 0,\n            DefaultInitialized  = 0xDEFAUL,\n            DirectInitialized   = 0xD1111,\n            CopyInitialized     = 0xC0314,\n            MoveInitialized     = 0xAAAAA,\n            Assigned            = 0x11AED,\n            MoveAssigned        = 0x22AED,\n            MovedFrom           = 0xFFFFF,\n            Destroyed           = 0xDEADF00,\n            Unspecified         = 0xEEEEE\n        };\n\n        class State {\n        public:\n            State() __TBB_NOEXCEPT(true) : state(Unspecified) {\n                assignNewState(Unspecified);\n            }\n            State(const State& s) : state(Unspecified) {\n                assignNewState(s.state);\n            }\n            State(StateValue s) __TBB_NOEXCEPT(true) : state(Unspecified) {\n                assignNewState(s);\n            };\n            State& operator=(StateValue s) __TBB_NOEXCEPT(true) {\n                assignNewState(s);\n                return *this;\n            }\n            operator StateValue() const __TBB_NOEXCEPT(true) { return state; }\n        private:\n            void assignNewState(StateValue s) __TBB_NOEXCEPT(true);\n            StateValue state;\n        };\n    };\n\n    struct StateTrackableCounters {\n        static void reset() {\n            counters[StateTrackableBase::ZeroInitialized] = counters[StateTrackableBase::DefaultInitialized] =\n                counters[StateTrackableBase::DirectInitialized] = counters[StateTrackableBase::CopyInitialized] =\n                counters[StateTrackableBase::MoveInitialized] = counters[StateTrackableBase::Assigned] =\n                counters[StateTrackableBase::MoveAssigned] = counters[StateTrackableBase::MovedFrom] =\n                counters[StateTrackableBase::Destroyed] = counters[StateTrackableBase::Unspecified] = 0;\n        }\n\n        static bool initialize() {\n            reset();\n            return true;\n        }\n\n        typedef std::map<StateTrackableBase::StateValue, tbb::atomic<std::size_t> > counters_t;\n        static counters_t counters;\n    };\n\n    StateTrackableCounters::counters_t StateTrackableCounters::counters;\n    static const bool stateTrackableBaseStateInitialized = StateTrackableCounters::initialize();\n\n    void StateTrackableBase::State::assignNewState(StateValue s) __TBB_NOEXCEPT(true) {\n        ASSERT(stateTrackableBaseStateInitialized, \"State trackable counters are not initialized\");\n        ASSERT(s == StateTrackableBase::Unspecified ||\n            StateTrackableCounters::counters.find(s) != StateTrackableCounters::counters.end(), \"The current state value is unknown\");\n        ASSERT(state == StateTrackableBase::Unspecified ||\n            StateTrackableCounters::counters.find(state) != StateTrackableCounters::counters.end(), \"The new state value is unknown\");\n        state = s;\n        ++StateTrackableCounters::counters[state];\n    }\n\n    template<bool allow_zero_initialized_state = false>\n    struct StateTrackable: StateTrackableBase {\n        static const bool is_zero_initialized_state_allowed = allow_zero_initialized_state;\n        State state;\n\n        bool is_valid() const {\n            return state == DefaultInitialized || state == DirectInitialized || state == CopyInitialized\n                || state == MoveInitialized || state == Assigned || state == MoveAssigned || state == MovedFrom\n                || (allow_zero_initialized_state && state == ZeroInitialized)\n                ;\n        }\n\n        StateTrackable (intptr_t)       __TBB_NOEXCEPT(true) : state (DirectInitialized){}\n        StateTrackable ()               __TBB_NOEXCEPT(true) : state (DefaultInitialized){}\n        StateTrackable (const StateTrackable & src) __TBB_NOEXCEPT(true) {\n            ASSERT( src.is_valid(), \"bad source for copy\" );\n            state = CopyInitialized;\n        }\n    #if __TBB_CPP11_RVALUE_REF_PRESENT\n        StateTrackable (StateTrackable && src) __TBB_NOEXCEPT(true) {\n            ASSERT( src.is_valid(), \"bad source for move?\" );\n            state = MoveInitialized;\n            src.state = MovedFrom;\n        }\n        StateTrackable & operator=(StateTrackable && src) __TBB_NOEXCEPT(true) {\n            ASSERT( src.is_valid(), \"bad source for assignment\" );\n            ASSERT( is_valid(), \"assigning to invalid instance?\" );\n\n            src.state = MovedFrom;\n            state = MoveAssigned;\n            return *this;\n        }\n    #endif\n        StateTrackable & operator=(const StateTrackable & src) __TBB_NOEXCEPT(true) {\n            ASSERT( src.is_valid(), \"bad source for assignment?\" );\n            ASSERT( is_valid(), \"assigning to invalid instance?\" );\n\n            state = Assigned;\n            return *this;\n        }\n        ~StateTrackable () __TBB_NOEXCEPT(true) {\n            ASSERT( is_valid(), \"Calling destructor on invalid instance? (twice destructor call?)\" );\n            state = Destroyed;\n        }\n    };\n} // Harness\n#endif // tbb_test_harness_state_trackable_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_task.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/task.h\"\n#include \"harness.h\"\n\n//! Helper for verifying that old use cases of spawn syntax still work.\ntbb::task* GetTaskPtr( int& counter ) {\n    ++counter;\n    return NULL;\n}\n\nclass TaskGenerator: public tbb::task {\n    int m_ChildCount;\n    int m_Depth;\n\npublic:\n    TaskGenerator( int child_count, int _depth ) : m_ChildCount(child_count), m_Depth(_depth) {}\n    ~TaskGenerator( ) { m_ChildCount = m_Depth = -125; }\n\n    tbb::task* execute() __TBB_override {\n        ASSERT( m_ChildCount>=0 && m_Depth>=0, NULL );\n        if( m_Depth>0 ) {\n            recycle_as_safe_continuation();\n            set_ref_count( m_ChildCount+1 );\n            int k=0;\n            for( int j=0; j<m_ChildCount; ++j ) {\n                tbb::task& t = *new( allocate_child() ) TaskGenerator(m_ChildCount/2,m_Depth-1);\n                GetTaskPtr(k)->spawn(t);\n            }\n            ASSERT(k==m_ChildCount,NULL);\n            --m_Depth;\n            __TBB_Yield();\n            ASSERT( state()==recycle && ref_count()>0, NULL);\n        }\n        return NULL;\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_tbb_independence.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef harness_tbb_independence_H\n#define harness_tbb_independence_H\n\n// The tests which include tbb/atomic.h gain the dependency on the __TBB_ASSERT\n// implementation even the test does not use anything from it. But almost all\n// compilers optimize out unused inline function so they throw out the\n// dependency. But to be pedantic with the standard the __TBB_ASSERT\n// implementation should be provided. Moreover the offload compiler really\n// requires it.\n#include \"../tbb/tbb_assert_impl.h\"\n\n#if __linux__  && __ia64__\n\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#include \"tbb/tbb_machine.h\"\n\n#include <pthread.h>\n\n// Can't use Intel compiler intrinsic due to internal error reported by 10.1 compiler\npthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;\n\nint32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value)\n{\n    pthread_mutex_lock(&counter_mutex);\n    int32_t result = *(int32_t*)ptr;\n    *(int32_t*)ptr = result + value;\n    pthread_mutex_unlock(&counter_mutex);\n    return result;\n}\n\nint64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value)\n{\n    pthread_mutex_lock(&counter_mutex);\n    int32_t result = *(int32_t*)ptr;\n    *(int32_t*)ptr = result + value;\n    pthread_mutex_unlock(&counter_mutex);\n    return result;\n}\n\nvoid __TBB_machine_pause(int32_t /*delay*/) {  __TBB_Yield(); }\n\npthread_mutex_t cas_mutex = PTHREAD_MUTEX_INITIALIZER;\n\nextern \"C\" int64_t __TBB_machine_cmpswp8__TBB_full_fence(volatile void *ptr, int64_t value, int64_t comparand)\n{\n    pthread_mutex_lock(&cas_mutex);\n    int64_t result = *(int64_t*)ptr;\n    if (result == comparand)\n        *(int64_t*)ptr = value;\n    pthread_mutex_unlock(&cas_mutex);\n    return result;\n}\n\npthread_mutex_t fetchstore_mutex = PTHREAD_MUTEX_INITIALIZER;\n\nint64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value)\n{\n    pthread_mutex_lock(&fetchstore_mutex);\n    int64_t result = *(int64_t*)ptr;\n    *(int64_t*)ptr = value;\n    pthread_mutex_unlock(&fetchstore_mutex);\n    return result;\n}\n\n#endif /* __linux__  && __ia64 */\n\n#endif // harness_tbb_independence_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_test_cases_framework.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_harness_test_cases_framework_H\n#define tbb_harness_test_cases_framework_H\n\n#if defined(_MSC_VER)\n    #define _SCL_SECURE_NO_WARNINGS\n#endif\n\n#undef DO_ITT_NOTIFY\n\n#include \"harness.h\"\n#include \"harness_assert.h\"\n#include \"tbb/tbb_stddef.h\"\n\n#include <cstdlib>\n\n#include <vector>\n#include <algorithm>\n#include <string>\n#include <sstream>\n#include <iostream>\n\nnamespace test_framework{\n    template<typename test_class>\n    void run_test(){\n        test_class()();\n    }\n\n#if TBB_USE_EXCEPTIONS\n    struct assertion_failure:std::exception{\n        const char* my_filename;\n        int my_line;\n        const char* my_expression;\n        const char * my_comment;\n        assertion_failure(const char* filename, int line, const char* expression, const char * comment):\n             my_filename(filename),\n             my_line(line),\n             my_expression(expression),\n             my_comment(comment)\n        {}\n        virtual const char* what() const throw() __TBB_override {\n            return \"test assertion failed\";\n        }\n    };\n    void throw_assertion_failure(){throw assertion_failure(\"\",0,\"\",\"\");}\n    void throw_assertion_failure(const char* filename, int line, const char* expression, const char * comment){\n        throw assertion_failure(filename, line, expression, comment);\n    }\n#endif // TBB_USE_EXCEPTIONS\n\n    class test_suite{\n        typedef void(*run_test_function_pointer_type)();\n        typedef std::pair<std::string, run_test_function_pointer_type> tc_record_pair;\n        std::vector<tc_record_pair > test_cases;\n    public:\n        template<class test_class>\n        void register_test_case(std::string const& name, test_class * ){\n            test_cases.push_back(tc_record_pair(name,& run_test<test_class>));\n        }\n        std::string operator()(bool silent=false){\n            std::stringstream str;\n            size_t failed=0;\n            for (size_t i=0;i<test_cases.size();++i){\n#if TBB_USE_EXCEPTIONS\n                try{\n                    (test_cases[i].second)();\n                }catch(std::exception& e){\n                    failed++;\n                    str<<\"test case \\\"\"<<test_cases[i].first<<\"\\\" failed with exception. what():\\\"\"<<e.what()<<\"\\\"\"<<std::endl;\n                }\n#else\n                    (test_cases[i].second)();\n#endif\n            }\n            if (!silent) {\n                str<<test_cases.size()<<\" test cases are run; \"<<failed<<\" failed\"<<std::endl;\n            }\n            return str.str();\n        }\n    };\n    test_suite& get_suite_ref(){static test_suite ts; return ts;}\n    void run_all_and_print_results(test_suite& ts,std::ostream& o , bool silent=false){\n        o<<ts(silent);\n    }\n}\nusing test_framework::get_suite_ref;\n#define TEST_CASE_WITH_FIXTURE(TC_NAME,FIXTURE_NAME)       \\\n        struct TC_NAME;                                    \\\n        struct TC_NAME:FIXTURE_NAME {                      \\\n            /* explicitly implemented default constructor  \\\n              is need here to please gcc 4.3.2*/           \\\n            TC_NAME(){}                                    \\\n            void operator()();                             \\\n        };                                                 \\\n        bool TC_NAME##_registerd =  (get_suite_ref().register_test_case(#TC_NAME,static_cast<TC_NAME*>(0)),true);\\\n        void TC_NAME::operator()()\n\nnamespace test_framework_unit_tests{\n    namespace test_helper{\n        template <size_t id> struct tag{};\n        template<typename tag>\n        struct test_case{\n            static bool is_run;\n            void operator()(){\n                is_run=true;\n            }\n        };\n        template<typename tag> bool test_case<tag>::is_run = false;\n\n    }\n    using namespace test_framework;\n    namespace test_test_suite_ref{\n        void run_all_runs_all_registered_test_cases(){\n            test_suite s;\n            using test_helper::tag;\n            test_helper::test_case<tag<__LINE__> > tc1;\n            test_helper::test_case<tag<__LINE__> > tc2;\n            s.register_test_case(\"tc1\",&tc1);\n            s.register_test_case(\"tc2\",&tc2);\n            s();\n            ASSERT(tc1.is_run && tc2.is_run,\"test_suite::operator() should run all the tests\");\n        }\n\n        struct silent_switch_fixture{\n            test_helper::test_case<test_helper::tag<__LINE__> > empty_test_case;\n        };\n        struct run_all_and_print_results_should_respect_silent_mode: silent_switch_fixture{\n            void operator()(){\n                using test_helper::tag;\n                test_helper::test_case<tag<__LINE__> > do_nothing_tc;\n                test_suite ts;\n                ts.register_test_case(\"tc_name\",&do_nothing_tc);\n                bool silent =true;\n                ASSERT(ts(silent).empty(),\"in silent mode no message except error should be output\");\n            }\n        };\n        struct run_all_and_print_results_should_respect_verbose_mode: silent_switch_fixture{\n            void operator()(){\n                using test_helper::tag;\n                test_helper::test_case<tag<__LINE__> > do_nothing_tc;\n                test_suite ts;\n                ts.register_test_case(\"tc_name\",&do_nothing_tc);\n                bool silent =true;\n                ASSERT(!ts(!silent).empty(),\"in verbose mode all messages should be outputed\");\n            }\n        };\n    }\n    namespace test_test_case_macro{\n        test_suite& get_suite_ref(){static test_suite ts; return ts;}\n        typedef test_helper::test_case<test_helper::tag<__LINE__> > unique_test_type;\n        TEST_CASE_WITH_FIXTURE(test_auto_registration,unique_test_type){\n            unique_test_type::operator()();\n        }\n        void run_test_test_case_macro(){\n            get_suite_ref()();\n            ASSERT(unique_test_type::is_run,\"test case macro should register the test case in suite\");\n        }\n        void test_test_case_macro_does_not_create_test_case_object(){\n            ASSERT(false,\"to implement\");\n        }\n    }\n    namespace internal_assertions_failure_test_cases{\n\n        test_suite& get_suite_ref(){static test_suite ts; return ts;}\n\n        //TODO: investigate compilation errors regarding tbb::set_assertion_handler\n//        struct empty_fixture{};\n//        TEST_CASE_WITH_FIXTURE(test_internal_assertion_does_not_stop_test_suite,empty_fixture){\n//            struct handler{\n//                static void _( const char* /*filename*/, int /*line*/, const char* /*expression*/, const char * /*comment*/ ){\n//                }\n//            };\n//\n//            tbb::assertion_handler_type previous  = tbb::set_assertion_handler(handler::_);\n//            __TBB_ASSERT(false,\"this assert should not stop the test suite run\");\n//            tbb::set_assertion_handler(previous );\n////            ASSERT(assertion_handler::is_called,\"__TBB_ASSERT should call installed assertion handler\");\n//        }\n//        TEST_CASE_WITH_FIXTURE(test_internal_assertion_does_mark_the_test_as_failed,empty_fixture){\n//            test_suite ts;\n//            struct _{\n////                static\n//                static void assertion_handler_type( const char* /*filename*/, int /*line*/, const char* /*expression*/, const char * /*comment*/ ){\n//                }\n//            };\n//            tbb::assertion_handler_type previous  = tbb::set_assertion_handler(_::assertion_handler_type);\n//            __TBB_ASSERT(false,\"this assert should not stop the test suite run\");\n//            tbb::set_assertion_handler(previous );\n//            std::string result = ts();\n//            std::size_t test_case_name_begin_pos = result.find(\"test case \\\"\");\n//            std::size_t failed_begin_pos = result.find(\"failed\");\n//            ASSERT(test_case_name_begin_pos!=std::string::npos && failed_begin_pos!=std::string::npos && test_case_name_begin_pos<failed_begin_pos,\"internal assertion should result in test failure\");\n//        }\n\n    }\n    void run_all_test(){\n        test_test_suite_ref::run_all_runs_all_registered_test_cases();\n        test_test_suite_ref::run_all_and_print_results_should_respect_silent_mode()();\n        test_test_suite_ref::run_all_and_print_results_should_respect_verbose_mode()();\n        test_test_case_macro::run_test_test_case_macro();\n        //TODO: uncomment and implement\n//        test_test_case_macro::test_test_case_macro_does_not_create_test_case_object();\n        run_all_and_print_results(internal_assertions_failure_test_cases::get_suite_ref(),std::cout,!Verbose);\n    }\n}\n\nint TestMain (){\n#if TBB_USE_EXCEPTIONS\n    SetHarnessErrorProcessing(test_framework::throw_assertion_failure);\n    //TODO: deal with assertions during stack unwinding\n    //tbb::set_assertion_handler( test_framework::throw_assertion_failure );\n#endif\n    {\n        test_framework_unit_tests::run_all_test();\n    }\n    bool silent = !Verbose;\n    run_all_and_print_results(test_framework::get_suite_ref(),std::cout,silent);\n    return Harness::Done;\n}\n\n#endif //tbb_harness_test_cases_framework_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_tls.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nclass LimitTLSKeysTo {\n#if _WIN32 || _WIN64\n    #if __TBB_WIN8UI_SUPPORT && !defined(TLS_OUT_OF_INDEXES)\n        // for SDKs for Windows*8 Store Apps that did not redirect TLS to FLS\n        #define TlsAlloc() FlsAlloc(NULL)\n        #define TlsFree FlsFree\n        #define TLS_OUT_OF_INDEXES FLS_OUT_OF_INDEXES\n    #endif\n    typedef DWORD handle;\n#else // _WIN32 || _WIN64\n    typedef pthread_key_t handle;\n#endif\n    // for platforms that not limit number of TLS keys, set artificial limit\n    static const int LIMIT = 16*1024;\n    handle handles[LIMIT];\n    int    lastUsedIdx;\npublic:\n    LimitTLSKeysTo(int keep_keys) {\n        for (lastUsedIdx=0; lastUsedIdx<LIMIT; lastUsedIdx++) {\n#if _WIN32 || _WIN64\n            handle h = TlsAlloc();\n            if (h==TLS_OUT_OF_INDEXES)\n#else\n            int setspecific_dummy=10;\n            if (pthread_key_create(&handles[lastUsedIdx], NULL)!=0)\n#endif\n            {\n                break;\n            }\n#if _WIN32 || _WIN64\n            handles[lastUsedIdx] = h;\n#else\n            pthread_setspecific(handles[lastUsedIdx], &setspecific_dummy);\n#endif\n        }\n        lastUsedIdx--;\n        ASSERT(lastUsedIdx >= keep_keys-1, \"Less TLS keys are available than requested\");\n        for (; keep_keys>0; keep_keys--, lastUsedIdx--) {\n#if _WIN32 || _WIN64\n            TlsFree(handles[lastUsedIdx]);\n#else\n            int ret = pthread_key_delete(handles[lastUsedIdx]);\n            ASSERT(!ret, \"Can't delete a key\");\n#endif\n        }\n        REMARK(\"%d thread local objects allocated in advance\\n\", lastUsedIdx+1);\n    }\n    ~LimitTLSKeysTo() {\n        for (int i=0; i<=lastUsedIdx; i++) {\n#if _WIN32 || _WIN64\n            TlsFree(handles[i]);\n#else\n            int ret = pthread_key_delete(handles[i]);\n            ASSERT(!ret, \"Can't delete a key\");\n#endif\n        }\n        lastUsedIdx = 0;\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/harness_tsx.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Header that includes Intel(R) Transactional Synchronization Extensions (Intel(R) TSX) specific test functions\n\n#if __TBB_TSX_AVAILABLE\n#define __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER (__INTEL_COMPILER || __GNUC__ || _MSC_VER || __SUNPRO_CC)\n#if __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER\n\n#include \"harness_defs.h\"\n\ninline static bool IsInsideTx()\n{\n    return __TBB_machine_is_in_transaction() != 0;\n}\n\n#if _MSC_VER\n#include <intrin.h> // for __cpuid\n#endif\n// TODO: consider reusing tbb_misc.cpp:cpu_has_speculation() instead of code duplication.\nbool have_TSX() {\n    bool result = false;\n    const int hle_ebx_mask = 1<<4;\n    const int rtm_ebx_mask = 1<<11;\n#if _MSC_VER\n    int info[4] = {0,0,0,0};\n    const int reg_ebx = 1;\n    int old_ecx = 0;\n    __cpuidex(info, 7, old_ecx);\n    result = (info[reg_ebx] & rtm_ebx_mask)!=0;\n    if( result ) ASSERT( (info[reg_ebx] & hle_ebx_mask)!=0, NULL );\n#elif __GNUC__ || __SUNPRO_CC\n    int32_t reg_ebx = 0;\n    int32_t reg_eax = 7;\n    int32_t reg_ecx = 0;\n    __asm__ __volatile__ ( \"movl %%ebx, %%esi\\n\"\n                           \"cpuid\\n\"\n                           \"movl %%ebx, %0\\n\"\n                           \"movl %%esi, %%ebx\\n\"\n                           : \"=a\"(reg_ebx) : \"0\" (reg_eax), \"c\" (reg_ecx) : \"esi\",\n#if __TBB_x86_64\n                           \"ebx\",\n#endif\n                           \"edx\"\n                           );\n    result = (reg_ebx & rtm_ebx_mask)!=0 ;\n    if( result ) ASSERT( (reg_ebx & hle_ebx_mask)!=0, NULL );\n#endif\n    return result;\n}\n\n#endif /* __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER */\n#endif /* __TBB_TSX_AVAILABLE */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_ScalableAllocator.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test whether scalable_allocator complies with the requirements in 20.1.5 of ISO C++ Standard (1998).\n\n#define __TBB_EXTRA_DEBUG 1 // enables additional checks\n#define TBB_PREVIEW_MEMORY_POOL 1\n\n#include \"harness_assert.h\"\n#if !__TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"harness_tbb_independence.h\" // because harness_allocator.h requires atomics\n#endif\n#include \"tbb/memory_pool.h\"\n#include \"tbb/scalable_allocator.h\"\n\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n// the actual body of the test is there:\n#include \"test_allocator.h\"\n#include \"harness_allocator.h\"\n\n#if _MSC_VER\n#include \"tbb/machine/windows_api.h\"\n#endif /* _MSC_VER */\n\ntypedef static_counting_allocator<tbb::memory_pool_allocator<char> > cnt_alloc_t;\ntypedef local_counting_allocator<std::allocator<char> > cnt_provider_t;\nclass MinimalAllocator : cnt_provider_t {\npublic:\n    typedef char value_type;\n    MinimalAllocator() {\n        REMARK(\"%p::ctor\\n\", this);\n    }\n    MinimalAllocator(const MinimalAllocator&s) : cnt_provider_t(s) {\n        REMARK(\"%p::ctor(%p)\\n\", this, &s);\n    }\n    ~MinimalAllocator() {\n        REMARK(\"%p::dtor: alloc=%u/%u free=%u/%u\\n\", this,\n            unsigned(items_allocated),unsigned(allocations),\n            unsigned(items_freed), unsigned(frees) );\n        ASSERT(allocations==frees && items_allocated==items_freed,0);\n        if( allocations ) { // non-temporal copy\n            // TODO: describe consumption requirements\n            ASSERT(items_allocated>cnt_alloc_t::items_allocated, 0);\n        }\n    }\n    void *allocate(size_t sz) {\n        void *p = cnt_provider_t::allocate(sz);\n        REMARK(\"%p::allocate(%u) = %p\\n\", this, unsigned(sz), p);\n        return p;\n    }\n    void deallocate(void *p, size_t sz) {\n        ASSERT(allocations>frees,0);\n        REMARK(\"%p::deallocate(%p, %u)\\n\", this, p, unsigned(sz));\n        cnt_provider_t::deallocate(cnt_provider_t::pointer(p), sz);\n    }\n};\n\nclass NullAllocator {\npublic:\n    typedef char value_type;\n    NullAllocator() { }\n    NullAllocator(const NullAllocator&) { }\n    ~NullAllocator() { }\n    void *allocate(size_t) { return NULL; }\n    void deallocate(void *, size_t) { ASSERT(0, NULL); }\n};\n\nvoid TestZeroSpaceMemoryPool()\n{\n    tbb::memory_pool<NullAllocator> pool;\n    bool allocated = pool.malloc(16) || pool.malloc(9*1024);\n    ASSERT(!allocated, \"Allocator with no memory must not allocate anything.\");\n}\n\n#if !TBB_USE_EXCEPTIONS\nstruct FixedPool {\n    void  *buf;\n    size_t size;\n    bool   used;\n    FixedPool(void *a_buf, size_t a_size) : buf(a_buf), size(a_size), used(false) {}\n};\n\nstatic void *fixedBufGetMem(intptr_t pool_id, size_t &bytes)\n{\n    if (((FixedPool*)pool_id)->used)\n        return NULL;\n\n    ((FixedPool*)pool_id)->used = true;\n    bytes = ((FixedPool*)pool_id)->size;\n    return bytes? ((FixedPool*)pool_id)->buf : NULL;\n}\n#endif\n\n/* test that pools in small space are either usable or not created\n   (i.e., exception raised) */\nvoid TestSmallFixedSizePool()\n{\n    char *buf;\n    bool allocated = false;\n\n    for (size_t sz = 0; sz < 64*1024; sz = sz? 3*sz : 3) {\n        buf = (char*)malloc(sz);\n#if TBB_USE_EXCEPTIONS\n        try {\n            tbb::fixed_pool pool(buf, sz);\n/* Check that pool is usable, i.e. such an allocation exists,\n   that can be fulfilled from the pool. 16B allocation fits in 16KB slabs,\n   so it requires at least 16KB. Requirement of 9KB allocation is more modest.\n*/\n            allocated = pool.malloc( 16 ) || pool.malloc( 9*1024 );\n        } catch (std::invalid_argument&) {\n            ASSERT(!sz, \"expect std::invalid_argument for zero-sized pool only\");\n        } catch (...) {\n            ASSERT(0, \"wrong exception type;\");\n        }\n#else\n/* Do not test high-level pool interface because pool ctor emit exception\n   on creation failure. Instead test same functionality via low-level interface.\n   TODO: add support for configuration with disabled exceptions to pools.\n*/\n        rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,\n                               /*keepMemTillDestroy=*/false);\n        rml::MemoryPool *pool;\n        FixedPool fixedPool(buf, sz);\n\n        rml::MemPoolError ret = pool_create_v1((intptr_t)&fixedPool, &pol, &pool);\n\n        if (ret == rml::POOL_OK) {\n            allocated = pool_malloc(pool, 16) || pool_malloc(pool, 9*1024);\n            pool_destroy(pool);\n        } else\n            ASSERT(ret == rml::NO_MEMORY, \"Expected that pool either valid \"\n                                     \"or have no memory to be created\");\n#endif\n        free(buf);\n    }\n    ASSERT(allocated, \"Maximal buf size should be enough to create working fixed_pool\");\n#if TBB_USE_EXCEPTIONS\n    try {\n        tbb::fixed_pool pool(NULL, 10*1024*1024);\n        ASSERT(0, \"Useless allocator with no memory must not be created\");\n    } catch (std::invalid_argument&) {\n    } catch (...) {\n        ASSERT(0, \"wrong exception type; expected invalid_argument\");\n    }\n#endif\n}\n\nint TestMain () {\n#if _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE && !__TBB_WIN8UI_SUPPORT\n    #ifdef _DEBUG\n        ASSERT(!GetModuleHandle(\"tbbmalloc.dll\") && GetModuleHandle(\"tbbmalloc_debug.dll\"),\n            \"test linked with wrong (non-debug) tbbmalloc library\");\n    #else\n        ASSERT(!GetModuleHandle(\"tbbmalloc_debug.dll\") && GetModuleHandle(\"tbbmalloc.dll\"),\n            \"test linked with wrong (debug) tbbmalloc library\");\n    #endif\n#endif /* _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE */\n    int result = TestMain<tbb::scalable_allocator<void> >();\n    {\n        tbb::memory_pool<tbb::scalable_allocator<int> > pool;\n        result += TestMain(tbb::memory_pool_allocator<void>(pool) );\n    }{\n        tbb::memory_pool<MinimalAllocator> pool;\n        cnt_alloc_t alloc(( tbb::memory_pool_allocator<char>(pool) )); // double parentheses to avoid function declaration\n        result += TestMain(alloc);\n    }{\n        static char buf[1024*1024*4];\n        tbb::fixed_pool pool(buf, sizeof(buf));\n        const char *text = \"this is a test\";// 15 bytes\n        char *p1 = (char*)pool.malloc( 16 );\n        ASSERT(p1, NULL);\n        strcpy(p1, text);\n        char *p2 = (char*)pool.realloc( p1, 15 );\n        ASSERT( p2 && !strcmp(p2, text), \"realloc broke memory\" );\n\n        result += TestMain(tbb::memory_pool_allocator<void>(pool) );\n\n        // try allocate almost entire buf keeping some reasonable space for internals\n        char *p3 = (char*)pool.realloc( p2, sizeof(buf)-128*1024 );\n        ASSERT( p3, \"defragmentation failed\" );\n        ASSERT( !strcmp(p3, text), \"realloc broke memory\" );\n        for( size_t sz = 10; sz < sizeof(buf); sz *= 2) {\n            ASSERT( pool.malloc( sz ), NULL);\n            pool.recycle();\n        }\n\n        result += TestMain(tbb::memory_pool_allocator<void>(pool) );\n    }\n    TestSmallFixedSizePool();\n    TestZeroSpaceMemoryPool();\n\n    ASSERT( !result, NULL );\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_ScalableAllocator_STL.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test whether scalable_allocator works with some of the host's STL containers.\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#define __TBB_EXTRA_DEBUG 1 // enables additional checks\n#define TBB_PREVIEW_MEMORY_POOL 1\n\n#include \"harness_assert.h\"\n#include \"tbb/memory_pool.h\"\n#include \"tbb/scalable_allocator.h\"\n\n// The actual body of the test is there:\n#include \"test_allocator_STL.h\"\n\nint TestMain () {\n    TestAllocatorWithSTL<tbb::scalable_allocator<void> >();\n    tbb::memory_pool<tbb::scalable_allocator<int> > mpool;\n    TestAllocatorWithSTL(tbb::memory_pool_allocator<void>(mpool) );\n    static char buf[1024*1024*4];\n    tbb::fixed_pool fpool(buf, sizeof(buf));\n    TestAllocatorWithSTL(tbb::memory_pool_allocator<void>(fpool) );\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_aggregator.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef TBB_PREVIEW_AGGREGATOR\n    #define TBB_PREVIEW_AGGREGATOR 1\n#endif\n\n#include \"tbb/aggregator.h\"\n#include \"harness.h\"\n#include <queue>\n\ntypedef std::priority_queue<int, std::vector<int>, std::less<int> > pq_t;\n\nint N;\nint* shared_data;\n\n// Code for testing basic interface using function objects\nclass push_fnobj : NoAssign, Harness::NoAfterlife {\n    pq_t& pq;\n    int threadID;\npublic:\n    push_fnobj(pq_t& pq_, int tid) : pq(pq_), threadID(tid) {}\n    void operator()() const {\n        AssertLive();\n        pq.push(threadID);\n    }\n};\n\nclass pop_fnobj : NoAssign, Harness::NoAfterlife {\n    pq_t& pq;\npublic:\n    pop_fnobj(pq_t& pq_) : pq(pq_) {}\n    void operator()() const {\n        AssertLive();\n        ASSERT(!pq.empty(), \"queue should not be empty yet\");\n        int elem = pq.top();\n        pq.pop();\n        shared_data[elem]++;\n    }\n};\n\nclass BasicBody : NoAssign {\n    pq_t& pq;\n    tbb::aggregator& agg;\npublic:\n    BasicBody(pq_t& pq_, tbb::aggregator& agg_) : pq(pq_), agg(agg_) {}\n    void operator()(const int threadID) const {\n        for (int i=0; i<N; ++i) agg.execute( push_fnobj(pq, threadID) );\n        for (int i=0; i<N; ++i) agg.execute( pop_fnobj(pq) );\n    }\n};\n\nvoid TestBasicInterface(int nThreads) {\n    pq_t my_pq;\n    tbb::aggregator agg;\n    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;\n    REMARK(\"Testing aggregator basic interface.\\n\");\n    NativeParallelFor(nThreads, BasicBody(my_pq, agg));\n    for (int i=0; i<nThreads; ++i)\n        ASSERT(shared_data[i] == N, \"wrong number of elements pushed\");\n    REMARK(\"Done testing aggregator basic interface.\\n\");\n}\n// End of code for testing basic interface using function objects\n\n\n// Code for testing basic interface using lambda expressions\n#if __TBB_CPP11_LAMBDAS_PRESENT\nvoid TestBasicLambdaInterface(int nThreads) {\n    pq_t my_pq;\n    tbb::aggregator agg;\n    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;\n    REMARK(\"Testing aggregator basic lambda interface.\\n\");\n    NativeParallelFor(nThreads, [&agg, &my_pq](const int threadID) {\n        for (int i=0; i<N; ++i)\n            agg.execute( [&, threadID]() { my_pq.push(threadID); } );\n        for (int i=0; i<N; ++i) {\n            agg.execute( [&]() {\n                ASSERT(!my_pq.empty(), \"queue should not be empty yet\");\n                int elem = my_pq.top();\n                my_pq.pop();\n                shared_data[elem]++;\n            } );\n        }\n    } );\n    for (int i=0; i<nThreads; ++i)\n        ASSERT(shared_data[i] == N, \"wrong number of elements pushed\");\n    REMARK(\"Done testing aggregator basic lambda interface.\\n\");\n}\n#endif /* __TBB_CPP11_LAMBDAS_PRESENT */\n// End of code for testing basic interface using lambda expressions\n\n// Code for testing expert interface\nclass op_data : public tbb::aggregator_operation, NoAssign {\npublic:\n    const int tid;\n    op_data(const int tid_=-1) : tbb::aggregator_operation(), tid(tid_) {}\n};\n\nclass my_handler {\n    pq_t *pq;\npublic:\n    my_handler() {}\n    my_handler(pq_t *pq_) : pq(pq_) {}\n    void operator()(tbb::aggregator_operation* op_list) const {\n        while (op_list) {\n            op_data& request = static_cast<op_data&>(*op_list);\n            op_list = op_list->next();\n            request.start();\n            if (request.tid >= 0) pq->push(request.tid);\n            else {\n                ASSERT(!pq->empty(), \"queue should not be empty!\");\n                int elem = pq->top();\n                pq->pop();\n                shared_data[elem]++;\n            }\n            request.finish();\n        }\n    }\n};\n\nclass ExpertBody : NoAssign {\n    pq_t& pq;\n    tbb::aggregator_ext<my_handler>& agg;\npublic:\n    ExpertBody(pq_t& pq_, tbb::aggregator_ext<my_handler>& agg_) : pq(pq_), agg(agg_) {}\n    void operator()(const int threadID) const {\n        for (int i=0; i<N; ++i) {\n            op_data to_push(threadID);\n            agg.process( &to_push );\n        }\n        for (int i=0; i<N; ++i) {\n            op_data to_pop;\n            agg.process( &to_pop );\n        }\n    }\n};\n\nvoid TestExpertInterface(int nThreads) {\n    pq_t my_pq;\n    tbb::aggregator_ext<my_handler> agg((my_handler(&my_pq)));\n    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;\n    REMARK(\"Testing aggregator expert interface.\\n\");\n    NativeParallelFor(nThreads, ExpertBody(my_pq, agg));\n    for (int i=0; i<nThreads; ++i)\n        ASSERT(shared_data[i] == N, \"wrong number of elements pushed\");\n    REMARK(\"Done testing aggregator expert interface.\\n\");\n}\n// End of code for testing expert interface\n\nint TestMain() {\n    if (MinThread < 1)\n        MinThread = 1;\n    shared_data = new int[MaxThread];\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        REMARK(\"Testing on %d threads.\\n\", p);\n        N = 0;\n        while (N <= 100) {\n            REMARK(\"Testing with N=%d\\n\", N);\n            TestBasicInterface(p);\n#if __TBB_CPP11_LAMBDAS_PRESENT\n            TestBasicLambdaInterface(p);\n#endif\n            TestExpertInterface(p);\n            N = N ? N*10 : 1;\n        }\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_aligned_space.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_GCC_STRICT_ALIASING_BROKEN\n    #pragma GCC diagnostic ignored \"-Wstrict-aliasing\"\n#endif\n\n//! Wrapper around T where all members are private.\n/** Used to prove that aligned_space<T,N> never calls member of T. */\ntemplate<typename T>\nclass Minimal {\n    Minimal();\n    Minimal( Minimal& min );\n    ~Minimal();\n    void operator=( const Minimal& );\n    T pad;\n    template<typename U>\n    friend void AssignToCheckAlignment( Minimal<U>& dst, const Minimal<U>& src ) ;\n};\n\ntemplate<typename T>\nvoid AssignToCheckAlignment( Minimal<T>& dst, const Minimal<T>& src ) {\n    dst.pad = src.pad;\n}\n\n#include \"tbb/aligned_space.h\"\n#include \"harness_assert.h\"\n\nstatic bool SpaceWasted;\n\ntemplate<typename U, size_t N>\nvoid TestAlignedSpaceN() {\n    typedef Minimal<U> T;\n    struct {\n        //! Pad byte increases chance that subsequent member will be misaligned if there is a problem.\n        char pad;\n        tbb::aligned_space<T ,N> space;\n    } x;\n    AssertSameType( static_cast< T *>(0), x.space.begin() );\n    AssertSameType( static_cast< T *>(0), x.space.end() );\n    ASSERT( reinterpret_cast<void *>(x.space.begin())==reinterpret_cast< void *>(&x.space), NULL );\n    ASSERT( x.space.end()-x.space.begin()==N, NULL );\n    ASSERT( reinterpret_cast<void *>(x.space.begin())>=reinterpret_cast< void *>(&x.space), NULL );\n    ASSERT( x.space.end()<=reinterpret_cast< T *>(&x.space+1), NULL );\n    // Though not required, a good implementation of aligned_space<T,N> does not use any more space than a T[N].\n    SpaceWasted |= sizeof(x.space)!=sizeof(T)*N;\n    for( size_t k=1; k<N; ++k )\n        AssignToCheckAlignment( x.space.begin()[k-1], x.space.begin()[k] );\n}\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\n#include <typeinfo>\ntemplate<typename T>\nvoid PrintSpaceWastingWarning() {\n    REPORT( \"Consider rewriting aligned_space<%s,N> to waste less space\\n\", typeid(T).name() );\n}\n\n// RTTI for long double (128 bit) is broken in libc++ up-to NDK11c. Check on newer versions of NDK.\n#if ( __ANDROID__ && __clang__ && _LIBCPP_VERSION && __TBB_x86_64 )\ntemplate<>\nvoid PrintSpaceWastingWarning<long double>() {\n    REPORT( \"Consider rewriting aligned_space<ld,N> to waste less space\\n\" );\n}\n#endif\n\ntemplate<typename T>\nvoid TestAlignedSpace() {\n    SpaceWasted = false;\n    TestAlignedSpaceN<T,1>();\n    TestAlignedSpaceN<T,2>();\n    TestAlignedSpaceN<T,3>();\n    TestAlignedSpaceN<T,4>();\n    TestAlignedSpaceN<T,5>();\n    TestAlignedSpaceN<T,6>();\n    TestAlignedSpaceN<T,7>();\n    TestAlignedSpaceN<T,8>();\n    if( SpaceWasted )\n        PrintSpaceWastingWarning<T>();\n}\n\n#include \"harness_m128.h\"\n\nint TestMain () {\n    TestAlignedSpace<char>();\n    TestAlignedSpace<short>();\n    TestAlignedSpace<int>();\n    TestAlignedSpace<float>();\n    TestAlignedSpace<double>();\n    TestAlignedSpace<long double>();\n    TestAlignedSpace<size_t>();\n#if HAVE_m128\n    TestAlignedSpace<__m128>();\n#endif\n#if HAVE_m256\n    if (have_AVX()) TestAlignedSpace<__m256>();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Basic testing of an allocator\n// Tests against requirements in 20.1.5 of ISO C++ Standard (1998).\n// Does not check for thread safety or false sharing issues.\n//\n// Tests for compatibility with the host's STL are in\n// test_Allocator_STL.h.  Those tests are in a separate file\n// because they bring in lots of STL headers, and the tests here\n// are supposed to work in the abscense of STL.\n\n#include \"harness.h\"\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    #include <utility> //for std::pair\n#endif\n\ntemplate<typename A>\nstruct is_zero_filling {\n    static const bool value = false;\n};\n\nint NumberOfFoo;\n\ntemplate<typename T, size_t N>\nstruct Foo {\n    T foo_array[N];\n    Foo() {\n        zero_fill<T>(foo_array, N);\n        ++NumberOfFoo;\n    }\n    Foo( const Foo& x ) {\n        *this = x;\n        ++NumberOfFoo;\n    }\n    ~Foo() {\n        --NumberOfFoo;\n    }\n};\n\ninline char PseudoRandomValue( size_t j, size_t k ) {\n    return char(j*3 ^ j>>4 ^ k);\n}\n\n#if __APPLE__\n#include <fcntl.h>\n#include <unistd.h>\n\n// A RAII class to disable stderr in a certain scope. It's not thread-safe.\nclass DisableStderr {\n    int stderrCopy;\n    static void dupToStderrAndClose(int fd) {\n        int ret = dup2(fd, STDERR_FILENO); // close current stderr\n        ASSERT(ret != -1, NULL);\n        ret = close(fd);\n        ASSERT(ret != -1, NULL);\n    }\npublic:\n    DisableStderr() {\n        int devNull = open(\"/dev/null\", O_WRONLY);\n        ASSERT(devNull != -1, NULL);\n        stderrCopy = dup(STDERR_FILENO);\n        ASSERT(stderrCopy != -1, NULL);\n        dupToStderrAndClose(devNull);\n    }\n    ~DisableStderr() {\n        dupToStderrAndClose(stderrCopy);\n    }\n};\n#endif\n\n//! T is type and A is allocator for that type\ntemplate<typename T, typename A>\nvoid TestBasic( A& a ) {\n    T x;\n    const T cx = T();\n\n    // See Table 32 in ISO ++ Standard\n    typename A::pointer px = &x;\n    typename A::const_pointer pcx = &cx;\n\n    typename A::reference rx = x;\n    ASSERT( &rx==&x, NULL );\n\n    typename A::const_reference rcx = cx;\n    ASSERT( &rcx==&cx, NULL );\n\n    typename A::value_type v = x;\n\n    typename A::size_type size;\n    size = 0;\n    --size;\n    ASSERT( size>0, \"not an unsigned integral type?\" );\n\n    typename A::difference_type difference;\n    difference = 0;\n    --difference;\n    ASSERT( difference<0, \"not an signed integral type?\" );\n\n    // \"rebind\" tested by our caller\n\n    ASSERT( a.address(rx)==px, NULL );\n\n    ASSERT( a.address(rcx)==pcx, NULL );\n\n    typename A::pointer array[100];\n    size_t sizeof_T = sizeof(T);\n    for( size_t k=0; k<100; ++k ) {\n        array[k] = k&1 ? a.allocate(k,array[0]) : a.allocate(k);\n        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));\n        for( size_t j=0; j<k*sizeof_T; ++j )\n            s[j] = PseudoRandomValue(j,k);\n    }\n\n    // Test hint argument. This can't be compiled when hint is void*, It should be const void*\n    typename A::pointer a_ptr;\n    const void * const_hint = NULL;\n    a_ptr = a.allocate (1, const_hint);\n    a.deallocate(a_ptr, 1);\n\n    // Test \"a.deallocate(p,n)\n    for( size_t k=0; k<100; ++k ) {\n        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));\n        for( size_t j=0; j<k*sizeof_T; ++j )\n            ASSERT( s[j] == PseudoRandomValue(j,k), NULL );\n        a.deallocate(array[k],k);\n    }\n\n    // Test \"a.max_size()\"\n    AssertSameType( a.max_size(), typename A::size_type(0) );\n    // Following assertion catches case where max_size() is so large that computation of\n    // number of bytes for such an allocation would overflow size_type.\n    ASSERT( a.max_size()*typename A::size_type(sizeof(T))>=a.max_size(), \"max_size larger than reasonable\" );\n\n    // Test \"a.construct(p,t)\"\n    int n = NumberOfFoo;\n    typename A::pointer p = a.allocate(1);\n    a.construct( p, cx );\n    ASSERT( NumberOfFoo==n+1, \"constructor for Foo not called?\" );\n\n    // Test \"a.destroy(p)\"\n    a.destroy( p );\n    ASSERT( NumberOfFoo==n, \"destructor for Foo not called?\" );\n    a.deallocate(p,1);\n\n#if TBB_USE_EXCEPTIONS\n    size_t too_big = (~size_t(0) - 1024*1024)/sizeof(T);\n    bool exception_caught = false;\n    typename A::pointer p1 = NULL;\n    try {\n#if __APPLE__\n        // On macOS*, failure to map memory results in messages to stderr;\n        // suppress them.\n        DisableStderr disableStderr;\n#endif\n        p1 = a.allocate(too_big);\n    } catch ( std::bad_alloc& ) {\n        exception_caught = true;\n    }\n    ASSERT( exception_caught, \"allocate expected to throw bad_alloc\" );\n    a.deallocate(p1, too_big);\n#endif // TBB_USE_EXCEPTIONS\n\n    #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    {\n        typedef typename A:: template rebind<std::pair<typename A::value_type, typename A::value_type> >::other pair_allocator_type;\n        pair_allocator_type pair_allocator(a);\n        int NumberOfFooBeforeConstruct= NumberOfFoo;\n        typename pair_allocator_type::pointer pair_pointer = pair_allocator.allocate(1);\n        pair_allocator.construct( pair_pointer, cx, cx);\n        ASSERT( NumberOfFoo==NumberOfFooBeforeConstruct+2, \"constructor for Foo not called appropriate number of times?\" );\n\n        pair_allocator.destroy( pair_pointer );\n        ASSERT( NumberOfFoo==NumberOfFooBeforeConstruct, \"destructor for Foo not called appropriate number of times?\" );\n        pair_allocator.deallocate(pair_pointer,1);\n    }\n    #endif\n\n}\n\n#include \"tbb/blocked_range.h\"\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"conditional expression is constant\" warning in method check_allocate.\n    #pragma warning (disable: 4127)\n#endif\n\n// A is an allocator for some type\ntemplate<typename A>\nstruct Body: NoAssign {\n    static const size_t max_k = 100000;\n    A &a;\n    Body(A &a_) : a(a_) {}\n    void check_allocate( typename A::pointer array[], size_t i, size_t t ) const\n    {\n        ASSERT(array[i] == 0, NULL);\n        size_t size = i * (i&3);\n        array[i] = i&1 ? a.allocate(size, array[i>>3]) : a.allocate(size);\n        ASSERT(array[i] != 0, \"allocator returned null\");\n        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));\n        for( size_t j=0; j<size*sizeof(typename A::value_type); ++j ) {\n            if(is_zero_filling<typename A::template rebind<void>::other>::value)\n                ASSERT( !s[j], NULL);\n            s[j] = PseudoRandomValue(i, t);\n        }\n    }\n\n    void check_deallocate( typename A::pointer array[], size_t i, size_t t ) const\n    {\n        ASSERT(array[i] != 0, NULL);\n        size_t size = i * (i&3);\n        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));\n        for( size_t j=0; j<size*sizeof(typename A::value_type); ++j )\n            ASSERT( s[j] == PseudoRandomValue(i, t), \"Thread safety test failed\" );\n        a.deallocate(array[i], size);\n        array[i] = 0;\n    }\n\n    void operator()( size_t thread_id ) const {\n        typename A::pointer array[256];\n\n        for( size_t k=0; k<256; ++k )\n            array[k] = 0;\n        for( size_t k=0; k<max_k; ++k ) {\n            size_t i = static_cast<unsigned char>(PseudoRandomValue(k,thread_id));\n            if(!array[i]) check_allocate(array, i, thread_id);\n            else check_deallocate(array, i, thread_id);\n        }\n        for( size_t k=0; k<256; ++k )\n            if(array[k])\n                check_deallocate(array, k, thread_id);\n    }\n};\n\n// A is an allocator for some type, and U is another type\ntemplate<typename U, typename A>\nvoid Test(A &a) {\n    typename A::template rebind<U>::other b(a);\n    TestBasic<U>(b);\n    TestBasic<typename A::value_type>(a);\n\n    // thread safety\n    NativeParallelFor( 4, Body<A>(a) );\n    ASSERT( NumberOfFoo==0, \"Allocate/deallocate count mismatched\" );\n\n    ASSERT( a==b, NULL );\n    ASSERT( !(a!=b), NULL );\n}\n\ntemplate<typename Allocator>\nint TestMain(const Allocator &a = Allocator()) {\n    NumberOfFoo = 0;\n    typename Allocator::template rebind<Foo<char,1> >::other a1(a);\n    typename Allocator::template rebind<Foo<double,1> >::other a2(a);\n    Test<Foo<int,17> >( a1 );\n    Test<Foo<float,23> >( a2 );\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_allocator_STL.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Tests for compatibility with the host's STL.\n\n#include \"harness.h\"\n\ntemplate<typename Container>\nvoid TestSequence(const typename Container::allocator_type &a) {\n    Container c(a);\n    for( int i=0; i<1000; ++i )\n        c.push_back(i*i);\n    typename Container::const_iterator p = c.begin();\n    for( int i=0; i<1000; ++i ) {\n        ASSERT( *p==i*i, NULL );\n        ++p;\n    }\n    // regression test against compilation error for GCC 4.6.2\n    c.resize(1000);\n}\n\ntemplate<typename Set>\nvoid TestSet(const typename Set::allocator_type &a) {\n    Set s(typename Set::key_compare(), a);\n    typedef typename Set::value_type value_type;\n    for( int i=0; i<100; ++i )\n        s.insert(value_type(3*i));\n    for( int i=0; i<300; ++i ) {\n        ASSERT( s.erase(i)==size_t(i%3==0), NULL );\n    }\n}\n\ntemplate<typename Map>\nvoid TestMap(const typename Map::allocator_type &a) {\n    Map m(typename Map::key_compare(), a);\n    typedef typename Map::value_type value_type;\n    for( int i=0; i<100; ++i )\n        m.insert(value_type(i,i*i));\n    for( int i=0; i<100; ++i )\n        ASSERT( m.find(i)->second==i*i, NULL );\n}\n\n#include <deque>\n#include <list>\n#include <map>\n#include <set>\n#include <vector>\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nstruct MoveOperationTracker {\n    int my_value;\n\n    MoveOperationTracker( int value = 0 ) : my_value( value ) {}\n    MoveOperationTracker(const MoveOperationTracker&) {\n        ASSERT( false, \"Copy constructor is called\" );\n    }\n    MoveOperationTracker(MoveOperationTracker&& m) __TBB_NOEXCEPT( true ) : my_value( m.my_value ) {\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker const&) {\n        ASSERT( false, \"Copy assigment operator is called\" );\n        return *this;\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker&& m) __TBB_NOEXCEPT( true ) {\n        my_value = m.my_value;\n        return *this;\n    }\n\n    bool operator==(int value) const {\n        return my_value == value;\n    }\n\n    bool operator==(const MoveOperationTracker& m) const {\n        return my_value == m.my_value;\n    }\n};\n#endif /*  __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate<typename Allocator>\nvoid TestAllocatorWithSTL(const Allocator &a = Allocator() ) {\n    typedef typename Allocator::template rebind<int>::other Ai;\n    typedef typename Allocator::template rebind<std::pair<const int, int> >::other Acii;\n#if _MSC_VER\n    typedef typename Allocator::template rebind<const int>::other Aci;\n    typedef typename Allocator::template rebind<std::pair<int, int> >::other Aii;\n#endif\n\n    // Sequenced containers\n    TestSequence<std::deque <int,Ai> >(a);\n    TestSequence<std::list  <int,Ai> >(a);\n    TestSequence<std::vector<int,Ai> >(a);\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    typedef typename Allocator::template rebind<MoveOperationTracker>::other Amot;\n    TestSequence<std::deque <MoveOperationTracker, Amot> >(a);\n    TestSequence<std::list  <MoveOperationTracker, Amot> >(a);\n    TestSequence<std::vector<MoveOperationTracker, Amot> >(a);\n#endif\n\n    // Associative containers\n    TestSet<std::set     <int, std::less<int>, Ai> >(a);\n    TestSet<std::multiset<int, std::less<int>, Ai> >(a);\n    TestMap<std::map     <int, int, std::less<int>, Acii> >(a);\n    TestMap<std::multimap<int, int, std::less<int>, Acii> >(a);\n\n#if _MSC_VER && _CPPLIB_VER < 650\n    // Test compatibility with Microsoft's implementation of std::allocator for some cases that\n    // are undefined according to the ISO standard but permitted by Microsoft.\n    TestSequence<std::deque <const int,Aci> >(a);\n#if _CPPLIB_VER>=500\n    TestSequence<std::list  <const int,Aci> >(a);\n#endif\n    TestSequence<std::vector<const int,Aci> >(a);\n    TestSet<std::set<const int, std::less<int>, Aci> >(a);\n    TestMap<std::map<int, int, std::less<int>, Aii> >(a);\n    TestMap<std::map<const int, int, std::less<int>, Acii> >(a);\n    TestMap<std::multimap<int, int, std::less<int>, Aii> >(a);\n    TestMap<std::multimap<const int, int, std::less<int>, Acii> >(a);\n#endif /* _MSC_VER */\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_assembly.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Program for basic correctness testing of assembly-language routines.\n#include \"harness_defs.h\"\n//for ICC builtins mode the test will be skipped as\n//macro __TBB_GCC_BUILTIN_ATOMICS_PRESENT used to define __TBB_TEST_SKIP_GCC_BUILTINS_MODE\n//will not be defined (it is explicitly disabled for ICC)\n#if __TBB_TEST_SKIP_GCC_BUILTINS_MODE\n#include \"harness.h\"\nint TestMain() {\n    REPORT(\"Known issue: GCC builtins aren't available\\n\");\n    return Harness::Skipped;\n}\n#else\n\n#include \"tbb/task.h\"\n\n#include <new>\n#include \"harness.h\"\n\nusing tbb::internal::reference_count;\n\n//TODO: remove this function when atomic function __TBB_XXX are dropped\n//! Test __TBB_CompareAndSwapW\nstatic void TestCompareExchange() {\n    ASSERT( intptr_t(-10)<10, \"intptr_t not a signed integral type?\" );\n    REMARK(\"testing __TBB_CompareAndSwapW\\n\");\n    for( intptr_t a=-10; a<10; ++a )\n        for( intptr_t b=-10; b<10; ++b )\n            for( intptr_t c=-10; c<10; ++c ) {\n// Workaround for a bug in GCC 4.3.0; and one more is below.\n#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN\n                intptr_t x;\n                __TBB_store_with_release( x, a );\n#else\n                intptr_t x = a;\n#endif\n                intptr_t y = __TBB_CompareAndSwapW(&x,b,c);\n                ASSERT( y==a, NULL );\n                if( a==c )\n                    ASSERT( x==b, NULL );\n                else\n                    ASSERT( x==a, NULL );\n            }\n}\n\n//TODO: remove this function when atomic function __TBB_XXX are dropped\n//! Test __TBB___TBB_FetchAndIncrement and __TBB___TBB_FetchAndDecrement\nstatic void TestAtomicCounter() {\n    // \"canary\" is a value used to detect illegal overwrites.\n    const reference_count canary = ~(uintptr_t)0/3;\n    REMARK(\"testing __TBB_FetchAndIncrement\\n\");\n    struct {\n        reference_count prefix, i, suffix;\n    } x;\n    x.prefix = canary;\n    x.i = 0;\n    x.suffix = canary;\n    for( int k=0; k<10; ++k ) {\n        reference_count j = __TBB_FetchAndIncrementWacquire((volatile void *)&x.i);\n        ASSERT( x.prefix==canary, NULL );\n        ASSERT( x.suffix==canary, NULL );\n        ASSERT( x.i==k+1, NULL );\n        ASSERT( j==k, NULL );\n    }\n    REMARK(\"testing __TBB_FetchAndDecrement\\n\");\n    x.i = 10;\n    for( int k=10; k>0; --k ) {\n        reference_count j = __TBB_FetchAndDecrementWrelease((volatile void *)&x.i);\n        ASSERT( j==k, NULL );\n        ASSERT( x.i==k-1, NULL );\n        ASSERT( x.prefix==canary, NULL );\n        ASSERT( x.suffix==canary, NULL );\n    }\n}\n\nstatic void TestTinyLock() {\n    REMARK(\"testing __TBB_LockByte\\n\");\n    __TBB_atomic_flag flags[16];\n    for( unsigned int i=0; i<16; ++i )\n        flags[i] = (__TBB_Flag)i;\n#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN\n    __TBB_store_with_release( flags[8], 0 );\n#else\n    flags[8] = 0;\n#endif\n    __TBB_LockByte(flags[8]);\n    for( unsigned int i=0; i<16; ++i )\n        #ifdef __sparc\n        ASSERT( flags[i]==(i==8?0xff:i), NULL );\n        #else\n        ASSERT( flags[i]==(i==8?1:i), NULL );\n        #endif\n    __TBB_UnlockByte(flags[8]);\n    for( unsigned int i=0; i<16; ++i )\n        ASSERT( flags[i] == (i==8?0:i), NULL );\n}\n\nstatic void TestLog2() {\n    REMARK(\"testing __TBB_Log2\\n\");\n    for( uintptr_t i=1; i; i<<=1 ) {\n        for( uintptr_t j=1; j<1<<16; ++j ) {\n            if( uintptr_t k = i*j ) {\n                uintptr_t actual = __TBB_Log2(k);\n                const uintptr_t ONE = 1; // warning suppression again\n                ASSERT( k >= ONE<<actual, NULL );\n                ASSERT( k>>1 < ONE<<actual, NULL );\n            }\n        }\n    }\n}\n\nstatic void TestPause() {\n    REMARK(\"testing __TBB_Pause\\n\");\n    __TBB_Pause(1);\n}\n\nstatic void TestTimeStamp() {\n    REMARK(\"testing __TBB_time_stamp\");\n#if defined(__TBB_time_stamp)\n    tbb::internal::machine_tsc_t prev = __TBB_time_stamp();\n    for ( int i=0; i<1000; ++i ) {\n        tbb::internal::machine_tsc_t curr = __TBB_time_stamp();\n        ASSERT(curr>prev, \"__TBB_time_stamp has returned non-monotonically increasing quantity\");\n        prev=curr;\n    }\n    REMARK(\"\\n\");\n#else\n    REMARK(\" skipped\\n\");\n#endif\n}\n\nint TestMain () {\n    __TBB_TRY {\n        TestLog2();\n        TestTinyLock();\n        TestCompareExchange();\n        TestAtomicCounter();\n        TestPause();\n        TestTimeStamp();\n    } __TBB_CATCH(...) {\n        ASSERT(0,\"unexpected exception\");\n    }\n    return Harness::Done;\n}\n#endif // __TBB_TEST_SKIP_BUILTINS_MODE\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_async_msg.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    #define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n#endif\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_PREVIEW_ASYNC_MSG\n\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/concurrent_queue.h\"\n\n#include \"harness.h\"\n#include \"harness_graph.h\"\n#include \"harness_barrier.h\"\n\n#include <sstream>      // std::ostringstream\n#include <type_traits>  // std::is_base_of\n\nstatic const int USE_N = 1000;\nstatic const int ACTIVITY_PAUSE_MS_NODE1 = 0;//500;\nstatic const int ACTIVITY_PAUSE_MS_NODE2 = 0;//100;\n\n#define _TRACE_(msg) {                                                  \\\n    if (Verbose) {                                                      \\\n        std::ostringstream os;                                          \\\n        os << \"[TID=\" << tbb::this_tbb_thread::get_id() << \"] \" << msg; \\\n        REMARK(\"%s\\n\", os.str().c_str());                               \\\n    }                                                                   \\\n}\n\nclass UserAsyncActivity // Singleton\n{\npublic:\n    static UserAsyncActivity* create(const tbb::flow::async_msg<int>& msg, int timeoutMS) {\n        ASSERT(s_Activity == NULL, \"created twice\");\n        _TRACE_( \"Create UserAsyncActivity\" );\n        s_Activity = new UserAsyncActivity(msg, timeoutMS);\n        _TRACE_( \"CREATED! UserAsyncActivity\" );\n        return s_Activity;\n    }\n\n    static void destroy() {\n        _TRACE_( \"Start UserAsyncActivity::destroy()\" );\n        ASSERT(s_Activity != NULL, \"destroyed twice\");\n        s_Activity->myThread.join();\n        delete s_Activity;\n        s_Activity = NULL;\n        _TRACE_( \"End UserAsyncActivity::destroy()\" );\n    }\n\n    static int s_Result;\n\nprivate:\n    static void threadFunc(UserAsyncActivity* activity) {\n        _TRACE_( \"UserAsyncActivity::threadFunc\" );\n\n        Harness::Sleep(activity->myTimeoutMS);\n\n        const int result = static_cast<int>(reinterpret_cast<size_t>(activity)) & 0xFF; // just different random results\n        s_Result = result;\n\n        _TRACE_( \"UserAsyncActivity::threadFunc - returned result \" << result );\n\n        activity->returnActivityResults(result);\n    }\n\n    UserAsyncActivity(const tbb::flow::async_msg<int>& msg, int timeoutMS) : myMsg(msg), myTimeoutMS(timeoutMS)\n        , myThread(threadFunc, this)\n    {\n        // Start local thread here...\n        _TRACE_( \"Started AsyncActivity\" );\n    }\n\n    // Will be called from working thread\n    void returnActivityResults(int result) {\n        myMsg.set(result);\n    }\n\nprivate: // DATA\n    tbb::flow::async_msg<int>   myMsg;\n    int                         myTimeoutMS;\n    tbb::tbb_thread             myThread;\n\n    static UserAsyncActivity*   s_Activity;\n};\n\nUserAsyncActivity* UserAsyncActivity::s_Activity = NULL;\nint UserAsyncActivity::s_Result = -1;\n\nclass UserAsyncMsg1 : public tbb::flow::async_msg<int>\n{\npublic:\n    typedef tbb::flow::async_msg<int> base;\n\n    UserAsyncMsg1() : base() {}\n    UserAsyncMsg1(int value) : base(value) {}\n    UserAsyncMsg1(const UserAsyncMsg1& msg) : base(msg) {}\n};\n\nstruct F2_body : tbb::internal::no_assign\n{\n    static int          s_FinalResult;\n\n    int&                myI;\n    bool                myAlive;\n\n    F2_body(int& i) : myI(i), myAlive(true) {}\n\n    F2_body(const F2_body& b) : myI(b.myI), myAlive(true) {}\n\n    ~F2_body() {\n        myAlive = false;\n        _TRACE_( \"~F2_body\" );\n    }\n\n    void operator () (int result) {\n        __TBB_ASSERT(myAlive, \"dead node\");\n\n        // Handle async activity result here\n        s_FinalResult = result;\n        _TRACE_( \"F2: Got async_msg result = \" << result );\n    }\n};\n\n// static\nint F2_body::s_FinalResult = -2;\n\nstatic bool testSimplestCase() {\n    bool bOk = true;\n    _TRACE_( \"--- SAMPLE 1 (simple case 3-in-1: F1(A<T>) ---> F2(T)) \" );\n\n    for (int i = 0; i <= 2; ++i) {\n        _TRACE_( \"CASE \" << i + 1 << \": data is \" << (i > 0 ? \"NOT \" : \"\") << \"ready in storage\" << (i > 1 ? \" NO WAITING in graph\" : \"\") );\n        _TRACE_( \"MAIN THREAD\" );\n\n        {\n            tbb::flow::graph g;\n            tbb::flow::function_node< tbb::flow::continue_msg, UserAsyncMsg1 > f1( g, tbb::flow::unlimited,\n                [&]( tbb::flow::continue_msg ) -> UserAsyncMsg1 {\n                    _TRACE_( \"F1: Created async_msg\" );\n\n                    UserAsyncMsg1 a;\n                    UserAsyncActivity::create(a, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);\n\n                    Harness::Sleep(ACTIVITY_PAUSE_MS_NODE2); // let activity to finish\n                    return a;\n                }\n            );\n\n\n            tbb::flow::function_node< int > f2( g, tbb::flow::unlimited,\n                F2_body(i)\n            );\n\n            make_edge(f1, f2);\n            f1.try_put( tbb::flow::continue_msg() );\n            g.wait_for_all();\n            UserAsyncActivity::destroy();\n            _TRACE_( \"Done UserAsyncActivity::destroy\" );\n            g.wait_for_all();\n            _TRACE_( \"Done g.wait_for_all()\" );\n        }\n\n        _TRACE_( \"--- THE END --- \" );\n\n        if (F2_body::s_FinalResult >= 0 && UserAsyncActivity::s_Result == F2_body::s_FinalResult) {\n            _TRACE_( \"CASE \" << i + 1 << \": \" << \"PASSED\" );\n        }\n        else {\n            _TRACE_( \"CASE \" << i + 1 << \": \" << \"FAILED! \" << UserAsyncActivity::s_Result << \" != \" << F2_body::s_FinalResult );\n            bOk = false;\n            ASSERT(0, \"testSimplestCase failed\");\n        }\n    }\n\n    return bOk;\n}\n\n// ========================================================\n\nclass UserAsyncActivityChaining;\n\nclass UserAsyncMsg : public tbb::flow::async_msg<int>\n{\npublic:\n    typedef tbb::flow::async_msg<int> base;\n\n    UserAsyncMsg() : base() {}\n    UserAsyncMsg(int value) : base(value) {}\n    UserAsyncMsg(const UserAsyncMsg& msg) : base(msg) {}\n\n    // Notify AsyncActivity that it must return result because async calculation chain is over\n    void finalize() const __TBB_override;\n};\n\nclass UserAsyncActivityChaining // Singleton: task queue in worker thread\n{\npublic:\n    static UserAsyncActivityChaining* instance() {\n        if (s_Activity == NULL) {\n            s_Activity = new UserAsyncActivityChaining();\n        }\n\n        return s_Activity;\n    }\n\n    static void destroy() {\n        ASSERT(s_Activity != NULL, \"destroyed twice\");\n        s_Activity->myThread.join();\n        delete s_Activity;\n        s_Activity = NULL;\n    }\n\n    static void finish(const UserAsyncMsg& msg) {\n        ASSERT(UserAsyncActivityChaining::s_Activity != NULL, \"activity must be alive\");\n        UserAsyncActivityChaining::s_Activity->finishTaskQueue(msg);\n    }\n\n    void addWork(int addValue, int timeout = 0) {\n        myQueue.push( MyTask(addValue, timeout) );\n    }\n\n    void finishTaskQueue(const UserAsyncMsg& msg) {\n        myMsg = msg;\n        myQueue.push( MyTask(0, 0, true) );\n    }\n\n    static int s_Result;\n\nprivate:\n    struct MyTask\n    {\n        MyTask(int addValue = 0, int timeout = 0, bool finishFlag = false)\n            : myAddValue(addValue), myTimeout(timeout), myFinishFlag(finishFlag) {}\n\n        int     myAddValue;\n        int     myTimeout;\n        bool    myFinishFlag;\n    };\n\n    static void threadFunc(UserAsyncActivityChaining* activity)\n    {\n        _TRACE_( \"UserAsyncActivityChaining::threadFunc\" );\n\n        for (;;)\n        {\n            // Process task queue\n            MyTask work;\n            activity->myQueue.pop(work); // Waits until it can succeed\n\n            _TRACE_( \"UserAsyncActivityChaining::threadFunc - work: add \"\n                    << work.myAddValue << \" (timeout = \" << work.myTimeout << \")\" << (work.myFinishFlag ? \" FINAL\" : \"\") );\n\n            // 'finish flag' task is not real task, just end of queue flag\n            Harness::Sleep(work.myTimeout);\n\n            if (work.myFinishFlag) {\n                break;\n            }\n\n            activity->myQueueSum += work.myAddValue;\n        }\n\n        s_Result = activity->myQueueSum;\n        _TRACE_( \"UserAsyncActivityChaining::threadFunc - returned result \" << activity->myQueueSum );\n\n        // Get result back to Flow Graph\n        activity->myMsg.set(activity->myQueueSum);\n    }\n\n    UserAsyncActivityChaining()\n        : myQueueSum(0)\n        , myThread(threadFunc, this)\n    {\n        // Start local thread here...\n        _TRACE_( \"Started AsyncActivityChaining\" );\n    }\n\nprivate: // DATA\n    tbb::concurrent_bounded_queue<MyTask>   myQueue;\n    int                                     myQueueSum;\n    UserAsyncMsg                            myMsg;\n\n    tbb::tbb_thread                         myThread;\n\n    static UserAsyncActivityChaining*       s_Activity;\n};\n\n// static\nUserAsyncActivityChaining* UserAsyncActivityChaining::s_Activity = NULL;\n// static\nint UserAsyncActivityChaining::s_Result = -4;\n\n// override\nvoid UserAsyncMsg::finalize() const {\n    _TRACE_( \"UserAsyncMsg::finalize()\" );\n    UserAsyncActivityChaining::finish(*this);\n}\n\nstruct F3_body : tbb::internal::no_assign\n{\n    static int          s_FinalResult;\n\n    int&                myI;\n    bool                myAlive;\n\n    F3_body(int& _i) : myI(_i), myAlive(true) {}\n\n    F3_body(const F3_body& b) : myI(b.myI), myAlive(true) {}\n\n    ~F3_body() {\n        myAlive = false;\n        _TRACE_( \"~F3_body\" );\n    }\n\n    void operator () (int result) {\n        __TBB_ASSERT(myAlive, \"dead node\");\n        // Handle async activity result here\n        s_FinalResult = result;\n        _TRACE_( \"F3: Got async_msg result = \" << result );\n    }\n};\n\n// static\nint F3_body::s_FinalResult = -8;\n\nstatic bool testChaining() {\n    bool bOk = true;\n    _TRACE_( \"--- SAMPLE 2 (case with chaining: F1(A<T>) ---> F2(A<T>) ---> F3(T)) \" );\n\n    for (int i = 0; i <= 2; ++i) {\n        _TRACE_( \"CASE \" << i + 1 << \": data is \" << (i > 0 ? \"NOT \" : \"\") << \"ready in storage\" << (i > 1 ? \" NO WAITING in graph\" : \"\") );\n        _TRACE_( \"MAIN THREAD\" );\n\n        tbb::flow::graph g;\n        tbb::flow::function_node< tbb::flow::continue_msg, UserAsyncMsg > f1( g, tbb::flow::unlimited,\n            [&]( tbb::flow::continue_msg ) -> UserAsyncMsg {\n                _TRACE_( \"F1: Created UserAsyncMsg\" );\n\n                UserAsyncMsg a;\n                UserAsyncActivityChaining::instance()->addWork(11, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);\n\n                return a;\n            }\n        );\n\n        tbb::flow::function_node< UserAsyncMsg, UserAsyncMsg > f2( g, tbb::flow::unlimited,\n            [&]( UserAsyncMsg a) -> UserAsyncMsg {\n                _TRACE_( \"F2: resend UserAsyncMsg\" );\n\n                UserAsyncActivityChaining::instance()->addWork(22, (i == 0 ? 0 : 1)*ACTIVITY_PAUSE_MS_NODE1);\n\n                Harness::Sleep(ACTIVITY_PAUSE_MS_NODE2); // let activity to finish\n                return a;\n            }\n        );\n\n        tbb::flow::function_node< int > f3( g, tbb::flow::unlimited,\n            F3_body(i)\n        );\n\n        make_edge(f1, f2);\n        make_edge(f2, f3);\n        f1.try_put( tbb::flow::continue_msg() );\n        g.wait_for_all();\n\n        UserAsyncActivityChaining::destroy();\n        _TRACE_( \"Done UserAsyncActivityChaining::destroy\" );\n        g.wait_for_all();\n        _TRACE_( \"Done g.wait_for_all()\" );\n\n        _TRACE_( \"--- THE END ---\" );\n\n        if (F3_body::s_FinalResult >= 0 && UserAsyncActivityChaining::s_Result == F3_body::s_FinalResult) {\n            _TRACE_( \"CASE \" << i + 1 << \": \" << \"PASSED\" );\n        }\n        else {\n            _TRACE_( \"CASE \" << i + 1 << \": \" << \"FAILED! \" << UserAsyncActivityChaining::s_Result << \" != \" << F3_body::s_FinalResult );\n            bOk = false;\n            ASSERT(0, \"testChaining failed\");\n        }\n    }\n\n    return bOk;\n}\n\n// ========================================================\nnamespace testFunctionsAvailabilityNS {\n\nusing namespace tbb::flow;\nusing tbb::flow::interface10::internal::untyped_sender;\nusing tbb::flow::interface10::internal::untyped_receiver;\n\nusing tbb::internal::is_same_type;\nusing tbb::internal::strip;\nusing tbb::flow::interface10::internal::wrap_tuple_elements;\nusing tbb::flow::interface10::internal::async_helpers;\n\nclass A {}; // Any type (usually called 'T')\nstruct ImpossibleType {};\n\ntemplate <typename T>\nstruct UserAsync_T   : public async_msg<T> {\n    UserAsync_T() {}\n    UserAsync_T(const T& t) : async_msg<T>(t) {}\n};\n\ntypedef UserAsync_T<int  > UserAsync_int;\ntypedef UserAsync_T<float> UserAsync_float;\ntypedef UserAsync_T<A    > UserAsync_A;\n\ntypedef tuple< UserAsync_A, UserAsync_float, UserAsync_int, async_msg<A>, async_msg<float>, async_msg<int>, A, float, int > TypeTuple;\n\nstatic int g_CheckerCounter = 0;\n\ntemplate <typename T, typename U>\nstruct CheckerTryPut {\n    static ImpossibleType check( ... );\n\n    template <typename C>\n    static auto check( C* p, U* q ) -> decltype(p->try_put(*q));\n\n    static const bool value = !is_same_type<decltype(check(static_cast<T*>(0), 0)), ImpossibleType>::value;\n};\n\ntemplate <typename T1, typename T2>\nstruct CheckerMakeEdge {\n    static ImpossibleType checkMake( ... );\n    static ImpossibleType checkRemove( ... );\n\n    template <typename N1, typename N2>\n    static auto checkMake( N1* n1, N2* n2 ) -> decltype(tbb::flow::make_edge(*n1, *n2));\n\n    template <typename N1, typename N2>\n    static auto checkRemove( N1* n1, N2* n2 ) -> decltype(tbb::flow::remove_edge(*n1, *n2));\n\n    static const bool valueMake   = !is_same_type<decltype(checkMake  (static_cast<T1*>(0), static_cast<T2*>(0))), ImpossibleType>::value;\n    static const bool valueRemove = !is_same_type<decltype(checkRemove(static_cast<T1*>(0), static_cast<T2*>(0))), ImpossibleType>::value;\n\n    __TBB_STATIC_ASSERT( valueMake == valueRemove, \"make_edge() availability is NOT equal to remove_edge() availability\" );\n    \n    static const bool value = valueMake;\n};\n\ntemplate <typename T1, typename T2>\nstruct TypeChecker {\n     TypeChecker() {\n         ++g_CheckerCounter;\n\n        REMARK(\"%d: %s -> %s: %s %s \\n\", g_CheckerCounter, typeid(T1).name(), typeid(T2).name(),\n            (bAllowed ? \"YES\" : \"no\"), (bConvertable ? \" (Convertable)\" : \"\"));\n     }\n\n// \n// Check connection: function_node<continue_msg, SENDING_TYPE> <-> function_node<RECEIVING_TYPE>\n//                                         R E C E I V I N G   T Y P E\n// S     'bAllowed'    | int | float | A | async_msg | async_msg | async_msg | UserAsync | UserAsync | UserAsync |\n// E       value       |     |       |   |   <int>   |  <float>  |    <A>    |   _int    |  _float   |   _A      |\n// N   -------------------------------------------------------------------------------------------------------------\n// D       int         |  Y  |       |   |     Y     |           |           |    Y      |           |           |\n// I      float        |     |   Y   |   |           |    Y      |           |           |    Y      |           |\n// N        A          |     |       | Y |           |           |     Y     |           |           |     Y     |\n// G   async_msg<int>  |  Y  |       |   |     Y     |           |           |           |           |           |\n//    async_msg<float> |     |   Y   |   |           |    Y      |           |           |           |           |\n// T   async_msg<A>    |     |       | Y |           |           |     Y     |           |           |           |\n// Y   UserAsync_int   |  Y  |       |   |           |           |           |    Y      |           |           |\n// P  UserAsync_float  |     |   Y   |   |           |           |           |           |    Y      |           |\n// E   UserAsync_A     |     |       | Y |           |           |           |           |           |    Y      |\n// \n    // Test make_edge() & remove_edge() availability\n    static const bool bAllowed = is_same_type<T1, T2>::value\n        || is_same_type<typename async_helpers<T1>::filtered_type, T2>::value\n        || is_same_type<T1, typename async_helpers<T2>::filtered_type>::value;\n\n    static const bool bConvertable = bAllowed\n        || std::is_base_of<T1, T2>::value\n        || (is_same_type<typename async_helpers<T1>::filtered_type, int>::value && is_same_type<T2, float>::value)\n        || (is_same_type<typename async_helpers<T1>::filtered_type, float>::value && is_same_type<T2, int>::value);\n\n    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<function_node<continue_msg, T1>, function_node<T2> >::value), \"invalid connection Fn<T1> -> Fn<T2>\" );\n    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<queue_node<T1>, function_node<T2> >::value), \"invalid connection Queue<T1> -> Fn<T2>\" );\n\n    // Test make_edge() & remove_edge() availability with output_port<N>(node&)\n    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<typename strip< decltype(\n        output_port<0>( *static_cast<multifunction_node< continue_msg, tuple<T1, int> >*>(0) ) ) >::type,\n        function_node<T2> >::value), \"invalid connection MultuFn<0><T1,int> -> Fn<T2>\" );\n\n    __TBB_STATIC_ASSERT( (bAllowed == CheckerMakeEdge<typename strip< decltype(\n        output_port<1>( *static_cast<multifunction_node< continue_msg, tuple<int, T1> >*>(0) ) ) >::type,\n        function_node<T2> >::value), \"invalid connection MultuFn<1><int, T1> -> Fn<T2>\" );\n\n    // Test untyped_sender connections\n    __TBB_STATIC_ASSERT( (true == CheckerMakeEdge< untyped_sender, function_node<T1> >::value), \"cannot connect UntypedSender -> Fn<T1>\" );\n    // Test untyped_receiver connections\n    __TBB_STATIC_ASSERT( (true == CheckerMakeEdge< function_node<continue_msg, T1>, untyped_receiver >::value), \"cannot connect F<.., T1> -> UntypedReceiver\" );\n\n    // Test untyped_receiver->try_put(T2) availability\n    __TBB_STATIC_ASSERT( (true  == CheckerTryPut<untyped_receiver, T2>::value), \"untyped_receiver cannot try_put(T2)\" );\n    // Test receiver<T1>->try_put(T2) availability\n    __TBB_STATIC_ASSERT( (bConvertable == CheckerTryPut<receiver<T1>, T2>::value), \"invalid availability of receiver<T1>->try_put(T2)\" );\n};\n\ntemplate <typename T1>\nstruct WrappedChecker {\n    WrappedChecker() {} // Workaround for compilation error\n\n    template <typename T2>\n    struct T1T2Checker : TypeChecker<T1, T2> {};\n\n    typename wrap_tuple_elements< tuple_size<TypeTuple>::value, T1T2Checker, TypeTuple >::type a;\n};\n\ntypedef wrap_tuple_elements< tuple_size<TypeTuple>::value, WrappedChecker, TypeTuple >::type Checker;\n\n} // namespace testFunctionsAvailabilityNS\n\nstatic void testTryPut() {\n    {\n        tbb::flow::graph g;\n        tbb::flow::function_node< int > f(g, tbb::flow::unlimited, [&](int) {});\n\n        ASSERT(f.try_put(5), \"try_put(int) must return true\");\n        ASSERT(f.try_put(7), \"try_put(int) must return true\");\n\n        tbb::flow::async_msg<int> a1, a2;\n        a1.set(5);\n        ASSERT(f.try_put(a1), \"try_put(async_msg) must return true\");\n        ASSERT(f.try_put(a2), \"try_put(async_msg) must return true\");\n        a2.set(7);\n        g.wait_for_all();\n    }\n    {\n        tbb::flow::graph g;\n        typedef tbb::flow::indexer_node< int >::output_type output_type;\n        tbb::flow::indexer_node< int > i(g);\n        tbb::flow::function_node< output_type > f(g, tbb::flow::unlimited, [&](output_type) {});\n        make_edge(i, f);\n\n        ASSERT(tbb::flow::input_port<0>(i).try_put(5), \"try_put(int) must return true\");\n        ASSERT(tbb::flow::input_port<0>(i).try_put(7), \"try_put(int) must return true\");\n\n        tbb::flow::async_msg<int> a1(5), a2(7);\n        ASSERT(tbb::flow::input_port<0>(i).try_put(a1), \"try_put(async_msg) must return true\");\n        ASSERT(tbb::flow::input_port<0>(i).try_put(a2), \"try_put(async_msg) must return true\");\n        g.wait_for_all();\n    }\n}\n\nint TestMain() {\n    REMARK(\" *** CHECKING FUNCTIONS: make_edge/remove_edge(node<.., T1>, node<T2>) & node<T1>->try_put(T2) ***\\n\");\n    testFunctionsAvailabilityNS::Checker a;\n    const int typeTupleSize = tbb::flow::tuple_size<testFunctionsAvailabilityNS::TypeTuple>::value;\n    ASSERT(testFunctionsAvailabilityNS::g_CheckerCounter == typeTupleSize*typeTupleSize, \"Type checker counter value is incorrect\");\n\n    testTryPut();\n\n    // NOTE: Use '-v' command line argument to get traces & remarks\n    tbb::task_scheduler_init init(4);\n    bool bOk = true;\n\n    for (int i = 0; i < USE_N; ++i) {\n        if (i > 0 && i%1000 == 0) {\n            REPORT(\" *** Starting TEST %d... ***\\n\", i);\n        }\n\n        REMARK(\" *** TEST %d ***\\n\", i);\n        bOk = bOk && testSimplestCase();\n        bOk = bOk && testChaining();\n    }\n\n    _TRACE_( \" *** \" << USE_N << \" tests: \" << (bOk ? \"all tests passed\" : \"TESTS FAILED !!!\") << \" ***\" );\n    return (bOk ? Harness::Done : Harness::Unknown);\n}\n\n#else // __TBB_PREVIEW_ASYNC_MSG\n\n#include \"harness.h\"\n\nint TestMain() {\n    return Harness::Skipped;\n}\n\n#endif // __TBB_PREVIEW_ASYNC_MSG\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_async_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#include \"harness_graph.h\"\n#include \"harness_barrier.h\"\n#include \"tbb/concurrent_queue.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/compat/condition_variable\"\n\n#include <string>\n\nclass minimal_type {\n    template<typename T>\n    friend struct place_wrapper;\n\n    int value;\n\npublic:\n    minimal_type() : value(-1) {}\n    minimal_type(int v) : value(v) {}\n    minimal_type(const minimal_type &m) : value(m.value) { }\n    minimal_type &operator=(const minimal_type &m) { value = m.value; return *this; }\n};\n\ntemplate <typename T>\nstruct place_wrapper {\n    typedef T wrapped_type;\n    T value;\n    tbb::tbb_thread::id thread_id;\n    tbb::task* task_ptr;\n\n    place_wrapper( ) : value(0) {\n        thread_id = tbb::this_tbb_thread::get_id();\n        task_ptr = &tbb::task::self();\n    }\n    place_wrapper( int v ) : value(v) {\n        thread_id = tbb::this_tbb_thread::get_id();\n        task_ptr = &tbb::task::self();\n    }\n\n    place_wrapper( const place_wrapper<int> &v ) : value(v.value), thread_id(v.thread_id), task_ptr(v.task_ptr) { }\n\n    place_wrapper( const place_wrapper<minimal_type> &v ) : value(v.value), thread_id(v.thread_id), task_ptr(v.task_ptr) { }\n};\n\ntemplate<typename T1, typename T2>\nstruct wrapper_helper {\n    static void check(const T1 &, const T2 &) { }\n\n    static void copy_value(const T1 &in, T2 &out) {\n        out = in;\n    }\n};\n\ntemplate<typename T1, typename T2>\nstruct wrapper_helper< place_wrapper<T1>, place_wrapper<T2> > {\n    static void check(const place_wrapper<T1> &a, const place_wrapper<T2> &b) {\n       REMARK(\"a.task_ptr == %p != b.task_ptr == %p\\n\", a.task_ptr, b.task_ptr);\n       ASSERT( (a.thread_id != b.thread_id), \"same thread used to execute adjacent nodes\");\n       ASSERT( (a.task_ptr != b.task_ptr), \"same task used to execute adjacent nodes\");\n       return;\n    }\n    static void copy_value(const place_wrapper<T1> &in, place_wrapper<T2> &out) {\n        out.value = in.value;\n    }\n};\n\nconst int NUMBER_OF_MSGS = 10;\nconst int UNKNOWN_NUMBER_OF_ITEMS = -1;\ntbb::atomic<int> async_body_exec_count;\ntbb::atomic<int> async_activity_processed_msg_count;\ntbb::atomic<int> end_body_exec_count;\n\n// queueing required in test_reset for testing of cancelation\ntypedef tbb::flow::async_node< int, int, tbb::flow::queueing > counting_async_node_type;\ntypedef counting_async_node_type::gateway_type counting_gateway_type;\n\nstruct counting_async_body {\n    tbb::atomic<int> my_async_body_exec_count;\n\n    counting_async_body() {\n        my_async_body_exec_count = 0;\n    }\n\n    void operator()( const int &input, counting_gateway_type& gateway) {\n        REMARK( \"Body execution with input == %d\\n\", input);\n        ++my_async_body_exec_count;\n        ++async_body_exec_count;\n        if ( input == -1 ) {\n            bool result = tbb::task::self().group()->cancel_group_execution();\n            REMARK( \"Canceling graph execution\\n\" );\n            ASSERT( result == true, \"attempted to cancel graph twice\" );\n            Harness::Sleep(50);\n        }\n        gateway.try_put(input);\n    }\n};\n\nvoid test_reset() {\n    const int N = NUMBER_OF_MSGS;\n    async_body_exec_count = 0;\n\n    tbb::flow::graph g;\n    counting_async_node_type a(g, tbb::flow::serial, counting_async_body() );\n\n    const int R = 3;\n    std::vector< harness_counting_receiver<int> > r(R, harness_counting_receiver<int>(g));\n\n    for (int i = 0; i < R; ++i) {\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n        tbb::flow::make_edge(a, r[i]);\n#else\n        tbb::flow::make_edge( tbb::flow::output_port<0>(a), r[i] );\n#endif\n    }\n\n    REMARK( \"One body execution\\n\" );\n    a.try_put(-1);\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    // should be canceled with only 1 item reaching the async_body and the counting receivers\n    // and N items left in the node's queue\n    ASSERT( g.is_cancelled() == true, \"task group not canceled\" );\n\n    counting_async_body b1 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == int(b1.my_async_body_exec_count), \"body and global body counts are different\" );\n    ASSERT( int(async_body_exec_count) == 1, \"global body execution count not 1\"  );\n    for (int i = 0; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == 1, \"counting receiver count not 1\" );\n    }\n\n    // should clear the async_node queue, but retain its local count at 1 and keep all edges\n    g.reset(tbb::flow::rf_reset_protocol);\n\n    REMARK( \"N body executions\\n\" );\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT( g.is_cancelled() == false, \"task group not canceled\" );\n\n    // a total of N+1 items should have passed through the node body\n    // the local body count should also be N+1\n    // and the counting receivers should all have a count of N+1\n    counting_async_body b2 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == int(b2.my_async_body_exec_count), \"local and global body execution counts are different\" );\n    REMARK( \"async_body_exec_count==%d\\n\", int(async_body_exec_count) );\n    ASSERT( int(async_body_exec_count) == N+1, \"globcal body execution count not N+1\"  );\n    for (int i = 0; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == N+1, \"counting receiver has not received N+1 items\" );\n    }\n\n    REMARK( \"N body executions with new bodies\\n\" );\n    // should clear the async_node queue and reset its local count to 0, but keep all edges\n    g.reset(tbb::flow::rf_reset_bodies);\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT( g.is_cancelled() == false, \"task group not canceled\" );\n\n    // a total of 2N+1 items should have passed through the node body\n    // the local body count should be N\n    // and the counting receivers should all have a count of 2N+1\n    counting_async_body b3 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == 2*N+1, \"global body execution count not 2N+1\"  );\n    ASSERT( int(b3.my_async_body_exec_count) == N, \"local body execution count not N\"  );\n    for (int i = 0; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == 2*N+1, \"counting receiver has not received 2N+1 items\" );\n    }\n\n    // should clear the async_node queue and keep its local count at N and remove all edges\n    REMARK( \"N body executions with no edges\\n\" );\n    g.reset(tbb::flow::rf_clear_edges);\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT( g.is_cancelled() == false, \"task group not canceled\" );\n\n    // a total of 3N+1 items should have passed through the node body\n    // the local body count should now be 2*N\n    // and the counting receivers should remain at a count of 2N+1\n    counting_async_body b4 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == 3*N+1, \"global body execution count not 3N+1\"  );\n    ASSERT( int(b4.my_async_body_exec_count) == 2*N, \"local body execution count not 2N\"  );\n    for (int i = 0; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == 2*N+1, \"counting receiver has not received 2N+1 items\" );\n    }\n\n    // put back 1 edge to receiver 0\n    REMARK( \"N body executions with 1 edge\\n\" );\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    tbb::flow::make_edge(a, r[0]);\n#else\n    tbb::flow::make_edge( tbb::flow::output_port<0>(a), r[0] );\n#endif\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT( g.is_cancelled() == false, \"task group not canceled\" );\n\n    // a total of 4N+1 items should have passed through the node body\n    // the local body count should now be 3*N\n    // and all of the counting receivers should remain at a count of 2N+1, except r[0] which should be 3N+1\n    counting_async_body b5 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == 4*N+1, \"global body execution count not 4N+1\"  );\n    ASSERT( int(b5.my_async_body_exec_count) == 3*N, \"local body execution count not 3N\"  );\n    ASSERT( int(r[0].my_count) == 3*N+1, \"counting receiver has not received 3N+1 items\" );\n    for (int i = 1; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == 2*N+1, \"counting receiver has not received 2N+1 items\" );\n    }\n\n    // should clear the async_node queue and keep its local count at N and remove all edges\n    REMARK( \"N body executions with no edges and new body\\n\" );\n    g.reset(static_cast<tbb::flow::reset_flags>(tbb::flow::rf_reset_bodies|tbb::flow::rf_clear_edges));\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT( g.is_cancelled() == false, \"task group not canceled\" );\n\n    // a total of 4N+1 items should have passed through the node body\n    // the local body count should now be 3*N\n    // and all of the counting receivers should remain at a count of 2N+1, except r[0] which should be 3N+1\n    counting_async_body b6 = tbb::flow::copy_body<counting_async_body>(a);\n    ASSERT( int(async_body_exec_count) == 5*N+1, \"global body execution count not 5N+1\"  );\n    ASSERT( int(b6.my_async_body_exec_count) == N, \"local body execution count not N\"  );\n    ASSERT( int(r[0].my_count) == 3*N+1, \"counting receiver has not received 3N+1 items\" );\n    for (int i = 1; i < R; ++i) {\n        ASSERT( int(r[i].my_count) == 2*N+1, \"counting receiver has not received 2N+1 items\" );\n    }\n}\n\ntemplate< typename Input, typename Output >\nclass async_activity : NoAssign {\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef tbb::flow::async_node< input_type, output_type > async_node_type;\n    typedef typename async_node_type::gateway_type gateway_type;\n\n    struct work_type {\n        input_type input;\n        gateway_type* gateway;\n    };\n\n    class ServiceThreadBody {\n    public:\n        ServiceThreadBody( async_activity* activity ) : my_activity( activity ) {}\n\n        void operator()() {\n            my_activity->process();\n        }\n    private:\n        async_activity* my_activity;\n    };\n\n    async_activity(int expected_items, int sleep_time = 50) : my_expected_items(expected_items), my_sleep_time(sleep_time) {\n        my_quit = false;\n        tbb::tbb_thread( ServiceThreadBody( this ) ).swap( my_service_thread );\n    }\n\nprivate:\n\n    async_activity( const async_activity& ) : my_expected_items(UNKNOWN_NUMBER_OF_ITEMS), my_sleep_time(0) { }\n\npublic:\n    ~async_activity() {\n        stop();\n        my_service_thread.join();\n    }\n\n    void submit( const input_type &input, gateway_type& gateway ) {\n        work_type work = { input, &gateway};\n        my_work_queue.push( work );\n    }\n\n    void process() {\n        do {\n            work_type work;\n            if( my_work_queue.try_pop( work ) ) {\n                Harness::Sleep(my_sleep_time);\n                ++async_activity_processed_msg_count;\n                output_type output;\n                wrapper_helper<output_type, output_type>::copy_value(work.input, output);\n                wrapper_helper<output_type, output_type>::check(work.input, output);\n                work.gateway->try_put(output);\n                if ( my_expected_items == UNKNOWN_NUMBER_OF_ITEMS || int(async_activity_processed_msg_count) == my_expected_items ) {\n                    work.gateway->release_wait();\n                }\n            }\n        } while( my_quit == false || !my_work_queue.empty());\n    }\n\n    void stop() {\n        my_quit = true;\n    }\n\n    bool should_reserve_each_time() {\n        if ( my_expected_items == UNKNOWN_NUMBER_OF_ITEMS )\n            return true;\n        else\n            return false;\n    }\n\nprivate:\n\n    const int my_expected_items;\n    const int my_sleep_time;\n\n    tbb::concurrent_queue< work_type > my_work_queue;\n\n    tbb::atomic< bool > my_quit;\n\n    tbb::tbb_thread my_service_thread;\n};\n\ntemplate<typename Input, typename Output>\nstruct basic_test {\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef tbb::flow::async_node< input_type, output_type > async_node_type;\n    typedef typename async_node_type::gateway_type gateway_type;\n\n    class start_body_type {\n        typedef Input input_type;\n    public:\n        input_type operator()( int input ) {\n            return input_type(input);\n        }\n    };\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\n    class async_body_type {\n        typedef Input input_type;\n        typedef Output output_type;\n        typedef tbb::flow::async_node< input_type, output_type > async_node_type;\n        typedef typename async_node_type::gateway_type gateway_type;\n    public:\n        typedef async_activity<input_type, output_type> async_activity_type;\n\n        async_body_type( async_activity_type* aa ) : my_async_activity( aa ) { }\n\n        async_body_type( const async_body_type& other ) : my_async_activity( other.my_async_activity ) { }\n\n        void operator()( const input_type &input, gateway_type& gateway ) {\n            ++async_body_exec_count;\n            my_async_activity->submit( input, gateway);\n            if ( my_async_activity->should_reserve_each_time() )\n                gateway.reserve_wait();\n        }\n\n    private:\n        async_activity_type* my_async_activity;\n    };\n#endif\n\n    class end_body_type {\n        typedef Output output_type;\n    public:\n        void operator()( const output_type &input ) {\n            ++end_body_exec_count;\n            output_type output;\n            wrapper_helper<output_type, output_type>::check(input, output);\n        }\n    };\n\n    basic_test() {}\n\npublic:\n\n    static int run(int async_expected_items = UNKNOWN_NUMBER_OF_ITEMS) {\n        async_activity<input_type, output_type> my_async_activity(async_expected_items);\n        tbb::flow::graph g;\n        tbb::flow::function_node< int, input_type > start_node( g, tbb::flow::unlimited, start_body_type() );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        async_node_type offload_node(g, tbb::flow::unlimited, [&] (const input_type &input, gateway_type& gateway) {\n            ++async_body_exec_count;\n            my_async_activity.submit(input, gateway);\n            if(my_async_activity.should_reserve_each_time())\n                gateway.reserve_wait();\n        } );\n#else\n        async_node_type offload_node( g, tbb::flow::unlimited, async_body_type( &my_async_activity ) );\n#endif\n\n        tbb::flow::function_node< output_type > end_node( g, tbb::flow::unlimited, end_body_type() );\n\n        tbb::flow::make_edge( start_node, offload_node );\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n        tbb::flow::make_edge( offload_node, end_node );\n#else\n        tbb::flow::make_edge( tbb::flow::output_port<0>(offload_node), end_node );\n#endif\n        async_body_exec_count = 0;\n        async_activity_processed_msg_count = 0;\n        end_body_exec_count = 0;\n\n        if (async_expected_items != UNKNOWN_NUMBER_OF_ITEMS ) {\n            offload_node.gateway().reserve_wait();\n        }\n        for (int i = 0; i < NUMBER_OF_MSGS; ++i) {\n            start_node.try_put(i);\n        }\n        g.wait_for_all();\n        ASSERT( async_body_exec_count == NUMBER_OF_MSGS, \"AsyncBody procesed wrong number of signals\" );\n        ASSERT( async_activity_processed_msg_count == NUMBER_OF_MSGS, \"AsyncActivity processed wrong number of signals\" );\n        ASSERT( end_body_exec_count == NUMBER_OF_MSGS, \"EndBody processed wrong number of signals\");\n        REMARK(\"async_body_exec_count == %d == async_activity_processed_msg_count == %d == end_body_exec_count == %d\\n\",\n                int(async_body_exec_count), int(async_activity_processed_msg_count), int(end_body_exec_count));\n        return Harness::Done;\n    }\n\n};\n\nint test_copy_ctor() {\n    const int N = NUMBER_OF_MSGS;\n    async_body_exec_count = 0;\n\n    tbb::flow::graph g;\n\n    harness_counting_receiver<int> r1(g);\n    harness_counting_receiver<int> r2(g);\n\n    counting_async_node_type a(g, tbb::flow::unlimited, counting_async_body() );\n    counting_async_node_type b(a);\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    tbb::flow::make_edge(a, r1);\n    tbb::flow::make_edge(b, r2);\n#else\n    tbb::flow::make_edge(tbb::flow::output_port<0>(a), r1);\n    tbb::flow::make_edge(tbb::flow::output_port<0>(b), r2);\n#endif\n\n    for (int i = 0; i < N; ++i) {\n       a.try_put(i);\n    }\n    g.wait_for_all();\n\n    REMARK(\"async_body_exec_count = %d\\n\", int(async_body_exec_count));\n    REMARK(\"r1.my_count == %d and r2.my_count = %d\\n\", int(r1.my_count), int(r2.my_count));\n    ASSERT( int(async_body_exec_count) == NUMBER_OF_MSGS, \"AsyncBody procesed wrong number of signals\" );\n    ASSERT( int(r1.my_count) == N, \"counting receiver r1 has not received N items\" );\n    ASSERT( int(r2.my_count) == 0, \"counting receiver r2 has not received 0 items\" );\n\n    for (int i = 0; i < N; ++i) {\n       b.try_put(i);\n    }\n    g.wait_for_all();\n\n    REMARK(\"async_body_exec_count = %d\\n\", int(async_body_exec_count));\n    REMARK(\"r1.my_count == %d and r2.my_count = %d\\n\", int(r1.my_count), int(r2.my_count));\n    ASSERT( int(async_body_exec_count) == 2*NUMBER_OF_MSGS, \"AsyncBody procesed wrong number of signals\" );\n    ASSERT( int(r1.my_count) == N, \"counting receiver r1 has not received N items\" );\n    ASSERT( int(r2.my_count) == N, \"counting receiver r2 has not received N items\" );\n    return Harness::Done;\n}\n\ntbb::atomic<int> main_tid_count;\n\ntemplate<typename Input, typename Output>\nstruct spin_test {\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef tbb::flow::async_node< input_type, output_type > async_node_type;\n    typedef typename async_node_type::gateway_type gateway_type;\n\n    class start_body_type {\n        typedef Input input_type;\n    public:\n        input_type operator()( int input ) {\n            return input_type(input);\n        }\n    };\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\n    class async_body_type {\n        typedef Input input_type;\n        typedef Output output_type;\n        typedef tbb::flow::async_node< input_type, output_type > async_node_type;\n        typedef typename async_node_type::gateway_type gateway_type;\n    public:\n        typedef async_activity<input_type, output_type> async_activity_type;\n\n        async_body_type( async_activity_type* aa ) : my_async_activity( aa ) { }\n\n        async_body_type( const async_body_type& other ) : my_async_activity( other.my_async_activity ) { }\n\n        void operator()(const input_type &input, gateway_type& gateway) {\n            ++async_body_exec_count;\n            my_async_activity->submit(input, gateway);\n            if(my_async_activity->should_reserve_each_time())\n                gateway.reserve_wait();\n        }\n\n    private:\n        async_activity_type* my_async_activity;\n    };\n#endif\n\n    class end_body_type {\n        typedef Output output_type;\n        tbb::tbb_thread::id my_main_tid;\n        Harness::SpinBarrier *my_barrier;\n    public:\n        end_body_type(tbb::tbb_thread::id t, Harness::SpinBarrier &b) : my_main_tid(t), my_barrier(&b) { }\n\n        void operator()( const output_type & ) {\n            ++end_body_exec_count;\n            if (tbb::this_tbb_thread::get_id() == my_main_tid) {\n               ++main_tid_count;\n            }\n            my_barrier->timed_wait_noerror(10);\n        }\n    };\n\n    spin_test() {}\n\n    static int run(int nthreads, int async_expected_items = UNKNOWN_NUMBER_OF_ITEMS) {\n        async_activity<input_type, output_type> my_async_activity(async_expected_items, 0);\n        Harness::SpinBarrier spin_barrier(nthreads);\n        tbb::flow::graph g;\n        tbb::flow::function_node< int, input_type > start_node( g, tbb::flow::unlimited, start_body_type() );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        async_node_type offload_node(g, tbb::flow::unlimited, [&](const input_type &input, gateway_type& gateway) {\n            ++async_body_exec_count;\n            my_async_activity.submit(input, gateway);\n            if(my_async_activity.should_reserve_each_time())\n                gateway.reserve_wait();\n        });\n#else\n        async_node_type offload_node( g, tbb::flow::unlimited, async_body_type( &my_async_activity ) );\n#endif\n        tbb::flow::function_node< output_type > end_node( g, tbb::flow::unlimited, end_body_type(tbb::this_tbb_thread::get_id(), spin_barrier) );\n        tbb::flow::make_edge( start_node, offload_node );\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n        tbb::flow::make_edge( offload_node, end_node );\n#else\n        tbb::flow::make_edge( tbb::flow::output_port<0>(offload_node), end_node );\n#endif\n        async_body_exec_count = 0;\n        async_activity_processed_msg_count = 0;\n        end_body_exec_count = 0;\n        main_tid_count = 0;\n\n        if (async_expected_items != UNKNOWN_NUMBER_OF_ITEMS ) {\n            offload_node.gateway().reserve_wait();\n        }\n        for (int i = 0; i < nthreads*NUMBER_OF_MSGS; ++i) {\n            start_node.try_put(i);\n        }\n        g.wait_for_all();\n        ASSERT( async_body_exec_count == nthreads*NUMBER_OF_MSGS, \"AsyncBody procesed wrong number of signals\" );\n        ASSERT( async_activity_processed_msg_count == nthreads*NUMBER_OF_MSGS, \"AsyncActivity processed wrong number of signals\" );\n        ASSERT( end_body_exec_count == nthreads*NUMBER_OF_MSGS, \"EndBody processed wrong number of signals\");\n        ASSERT_WARNING( main_tid_count != 0, \"Main thread did not participate in end_body tasks\");\n        REMARK(\"async_body_exec_count == %d == async_activity_processed_msg_count == %d == end_body_exec_count == %d\\n\",\n                int(async_body_exec_count), int(async_activity_processed_msg_count), int(end_body_exec_count));\n        return Harness::Done;\n    }\n\n};\n\nvoid test_for_spin_avoidance() {\n    spin_test<int, int>::run(4);\n}\n\ntemplate< typename Input, typename Output >\nint run_tests() {\n    basic_test<Input, Output>::run();\n    basic_test<Input, Output>::run(NUMBER_OF_MSGS);\n    basic_test<place_wrapper<Input>, place_wrapper<Output> >::run();\n    basic_test<place_wrapper<Input>, place_wrapper<Output> >::run(NUMBER_OF_MSGS);\n    return Harness::Done;\n}\n\nint TestMain() {\n    tbb::task_scheduler_init init(4);\n    run_tests<int, int>();\n    run_tests<minimal_type, minimal_type>();\n    run_tests<int, minimal_type>();\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    lightweight_testing::test<tbb::flow::async_node>(NUMBER_OF_MSGS);\n#endif\n\n    test_reset();\n    test_copy_ctor();\n    test_for_spin_avoidance();\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_atomic.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_defs.h\"\n\n#if __TBB_TEST_SKIP_PIC_MODE || (__TBB_TEST_SKIP_GCC_BUILTINS_MODE && __TBB_TEST_SKIP_ICC_BUILTINS_MODE)\n#include \"harness.h\"\nint TestMain() {\n    REPORT(\"Known issue: %s\\n\",\n           __TBB_TEST_SKIP_PIC_MODE? \"PIC mode is not supported\" : \"Compiler builtins for atomic operations aren't available\");\n    return Harness::Skipped;\n}\n#else\n\n// Put tbb/atomic.h first, so if it is missing a prerequisite header, we find out about it.\n// The tests here do *not* test for atomicity, just serial correctness. */\n\n#include \"tbb/atomic.h\"\n#include \"harness_assert.h\"\n#include <cstring>  // memcmp\n#include \"tbb/aligned_space.h\"\n#include <new>      //for placement new\n\nusing std::memcmp;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Unary minus operator applied to unsigned type, result still unsigned\n    // Constant conditional expression\n    #pragma warning( disable: 4127 4310 )\n#endif\n\n#if __TBB_GCC_STRICT_ALIASING_BROKEN\n    #pragma GCC diagnostic ignored \"-Wstrict-aliasing\"\n#endif\n\nenum LoadStoreExpression {\n    UseOperators,\n    UseImplicitAcqRel,\n    UseExplicitFullyFenced,\n    UseExplicitAcqRel,\n    UseExplicitRelaxed,\n    UseGlobalHelperFullyFenced,\n    UseGlobalHelperAcqRel,\n    UseGlobalHelperRelaxed\n};\n\n//! Structure that holds an atomic<T> and some guard bytes around it.\ntemplate<typename T, LoadStoreExpression E = UseOperators>\nstruct TestStruct {\n    typedef unsigned char byte_type;\n    T prefix;\n    tbb::atomic<T> counter;\n    T suffix;\n    TestStruct( T i ) {\n        ASSERT( sizeof(*this)==3*sizeof(T), NULL );\n        for (size_t j = 0; j < sizeof(T); ++j) {\n            reinterpret_cast<byte_type*>(&prefix)[j]             = byte_type(0x11*(j+1));\n            reinterpret_cast<byte_type*>(&suffix)[sizeof(T)-j-1] = byte_type(0x11*(j+1));\n        }\n        if ( E == UseOperators )\n            counter = i;\n        else if ( E == UseExplicitRelaxed )\n            counter.template store<tbb::relaxed>(i);\n        else\n            tbb::store<tbb::full_fence>( counter, i );\n    }\n    ~TestStruct() {\n        // Check for writes outside the counter.\n        for (size_t j = 0; j < sizeof(T); ++j) {\n            ASSERT( reinterpret_cast<byte_type*>(&prefix)[j]             == byte_type(0x11*(j+1)), NULL );\n            ASSERT( reinterpret_cast<byte_type*>(&suffix)[sizeof(T)-j-1] == byte_type(0x11*(j+1)), NULL );\n        }\n    }\n    static tbb::atomic<T> gCounter;\n};\n\n// A global variable of type tbb::atomic<>\ntemplate<typename T, LoadStoreExpression E> tbb::atomic<T> TestStruct<T, E>::gCounter;\n\n//! Test compare_and_swap template members of class atomic<T> for memory_semantics=M\ntemplate<typename T,tbb::memory_semantics M>\nvoid TestCompareAndSwapWithExplicitOrdering( T i, T j, T k ) {\n    ASSERT( i!=k && i!=j, \"values must be distinct\" );\n    // Test compare_and_swap that should fail\n    TestStruct<T> x(i);\n    T old = x.counter.template compare_and_swap<M>( j, k );\n    ASSERT( old==i, NULL );\n    ASSERT( x.counter==i, \"old value not retained\" );\n    // Test compare and swap that should succeed\n    old = x.counter.template compare_and_swap<M>( j, i );\n    ASSERT( old==i, NULL );\n    ASSERT( x.counter==j, \"value not updated?\" );\n}\n\n//! i, j, k must be different values\ntemplate<typename T>\nvoid TestCompareAndSwap( T i, T j, T k ) {\n    ASSERT( i!=k && i!=j, \"values must be distinct\" );\n    // Test compare_and_swap that should fail\n    TestStruct<T> x(i);\n    T old = x.counter.compare_and_swap( j, k );\n    ASSERT( old==i, NULL );\n    ASSERT( x.counter==i, \"old value not retained\" );\n    // Test compare and swap that should succeed\n    old = x.counter.compare_and_swap( j, i );\n    ASSERT( old==i, NULL );\n    if( x.counter==i ) {\n        ASSERT( x.counter==j, \"value not updated?\" );\n    } else {\n        ASSERT( x.counter==j, \"value trashed\" );\n    }\n    // Check that atomic global variables work\n    TestStruct<T>::gCounter = i;\n    old = TestStruct<T>::gCounter.compare_and_swap( j, i );\n    ASSERT( old==i, NULL );\n    ASSERT( TestStruct<T>::gCounter==j, \"value not updated?\" );\n    TestCompareAndSwapWithExplicitOrdering<T,tbb::full_fence>(i,j,k);\n    TestCompareAndSwapWithExplicitOrdering<T,tbb::acquire>(i,j,k);\n    TestCompareAndSwapWithExplicitOrdering<T,tbb::release>(i,j,k);\n    TestCompareAndSwapWithExplicitOrdering<T,tbb::relaxed>(i,j,k);\n}\n\n//! memory_semantics variation on TestFetchAndStore\ntemplate<typename T, tbb::memory_semantics M>\nvoid TestFetchAndStoreWithExplicitOrdering( T i, T j ) {\n    ASSERT( i!=j, \"values must be distinct\" );\n    TestStruct<T> x(i);\n    T old = x.counter.template fetch_and_store<M>( j );\n    ASSERT( old==i, NULL );\n    ASSERT( x.counter==j, NULL );\n}\n\n//! i and j must be different values\ntemplate<typename T>\nvoid TestFetchAndStore( T i, T j ) {\n    ASSERT( i!=j, \"values must be distinct\" );\n    TestStruct<T> x(i);\n    T old = x.counter.fetch_and_store( j );\n    ASSERT( old==i, NULL );\n    ASSERT( x.counter==j, NULL );\n    // Check that atomic global variables work\n    TestStruct<T>::gCounter = i;\n    old = TestStruct<T>::gCounter.fetch_and_store( j );\n    ASSERT( old==i, NULL );\n    ASSERT( TestStruct<T>::gCounter==j, \"value not updated?\" );\n    TestFetchAndStoreWithExplicitOrdering<T,tbb::full_fence>(i,j);\n    TestFetchAndStoreWithExplicitOrdering<T,tbb::acquire>(i,j);\n    TestFetchAndStoreWithExplicitOrdering<T,tbb::release>(i,j);\n    TestFetchAndStoreWithExplicitOrdering<T,tbb::relaxed>(i,j);\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // conversion from <bigger integer> to <smaller integer>, possible loss of data\n    // the warning seems a complete nonsense when issued for e.g. short+=short\n    #pragma warning( disable: 4244 )\n#endif\n\n//! Test fetch_and_add members of class atomic<T> for memory_semantics=M\ntemplate<typename T,tbb::memory_semantics M>\nvoid TestFetchAndAddWithExplicitOrdering( T i ) {\n    TestStruct<T> x(i);\n    T actual;\n    T expected = i;\n\n    // Test fetch_and_add member template\n    for( int j=0; j<10; ++j ) {\n        actual = x.counter.fetch_and_add(j);\n        ASSERT( actual==expected, NULL );\n        expected += j;\n    }\n    for( int j=0; j<10; ++j ) {\n        actual = x.counter.fetch_and_add(-j);\n        ASSERT( actual==expected, NULL );\n        expected -= j;\n    }\n\n    // Test fetch_and_increment member template\n    ASSERT( x.counter==i, NULL );\n    actual = x.counter.template fetch_and_increment<M>();\n    ASSERT( actual==i, NULL );\n    ASSERT( x.counter==T(i+1), NULL );\n\n    // Test fetch_and_decrement member template\n    actual = x.counter.template fetch_and_decrement<M>();\n    ASSERT( actual==T(i+1), NULL );\n    ASSERT( x.counter==i, NULL );\n}\n\n//! Test fetch_and_add and related operators\ntemplate<typename T>\nvoid TestFetchAndAdd( T i ) {\n    TestStruct<T> x(i);\n    T value;\n    value = ++x.counter;\n    ASSERT( value==T(i+1), NULL );\n    value = x.counter++;\n    ASSERT( value==T(i+1), NULL );\n    value = x.counter--;\n    ASSERT( value==T(i+2), NULL );\n    value = --x.counter;\n    ASSERT( value==i, NULL );\n    T actual;\n    T expected = i;\n    for( int j=-100; j<=100; ++j ) {\n        expected += j;\n        actual = x.counter += j;\n        ASSERT( actual==expected, NULL );\n    }\n    for( int j=-100; j<=100; ++j ) {\n        expected -= j;\n        actual = x.counter -= j;\n        ASSERT( actual==expected, NULL );\n    }\n    // Test fetch_and_increment\n    ASSERT( x.counter==i, NULL );\n    actual = x.counter.fetch_and_increment();\n    ASSERT( actual==i, NULL );\n    ASSERT( x.counter==T(i+1), NULL );\n\n    // Test fetch_and_decrement\n    actual = x.counter.fetch_and_decrement();\n    ASSERT( actual==T(i+1), NULL );\n    ASSERT( x.counter==i, NULL );\n    x.counter = i;\n    ASSERT( x.counter==i, NULL );\n\n    // Check that atomic global variables work\n    TestStruct<T>::gCounter = i;\n    value = TestStruct<T>::gCounter.fetch_and_add( 42 );\n    expected = i+42;\n    ASSERT( value==i, NULL );\n    ASSERT( TestStruct<T>::gCounter==expected, \"value not updated?\" );\n    TestFetchAndAddWithExplicitOrdering<T,tbb::full_fence>(i);\n    TestFetchAndAddWithExplicitOrdering<T,tbb::acquire>(i);\n    TestFetchAndAddWithExplicitOrdering<T,tbb::release>(i);\n    TestFetchAndAddWithExplicitOrdering<T,tbb::relaxed>(i);\n}\n\n//! A type with unknown size.\nclass IncompleteType;\n\nvoid TestFetchAndAdd( IncompleteType* ) {\n    // There are no fetch-and-add operations on a IncompleteType*.\n}\nvoid TestFetchAndAdd( void* ) {\n    // There are no fetch-and-add operations on a void*.\n}\n\nvoid TestFetchAndAdd( bool ) {\n    // There are no fetch-and-add operations on a bool.\n}\n\ntemplate<typename T>\nvoid TestConst( T i ) {\n    // Try const\n    const TestStruct<T> x(i);\n    ASSERT( memcmp( &i, &x.counter, sizeof(T) )==0, \"write to atomic<T> broken?\" );\n    ASSERT( x.counter==i, \"read of atomic<T> broken?\" );\n    const TestStruct<T, UseExplicitRelaxed> y(i);\n    ASSERT( memcmp( &i, &y.counter, sizeof(T) )==0, \"relaxed write to atomic<T> broken?\" );\n    ASSERT( tbb::load<tbb::relaxed>(y.counter) == i, \"relaxed read of atomic<T> broken?\" );\n    const TestStruct<T, UseGlobalHelperFullyFenced> z(i);\n    ASSERT( memcmp( &i, &z.counter, sizeof(T) )==0, \"sequentially consistent write to atomic<T> broken?\" );\n    ASSERT( z.counter.template load<tbb::full_fence>() == i, \"sequentially consistent read of atomic<T> broken?\" );\n}\n\n#include \"harness.h\"\n\n#include <sstream>\n\n//TODO: consider moving it to separate file, and unify with one in examples command line interface\ntemplate<typename T>\nstd::string to_string(const T& a){\n    std::stringstream str; str <<a;\n    return str.str();\n}\nnamespace initialization_tests {\n    template<typename T>\n    struct test_initialization_fixture{\n        typedef tbb::atomic<T> atomic_t;\n        tbb::aligned_space<atomic_t> non_zeroed_storage;\n        enum {fill_value = 0xFF };\n        test_initialization_fixture(){\n            memset(static_cast<void*>(non_zeroed_storage.begin()),fill_value,\n                   sizeof(non_zeroed_storage));\n            ASSERT( char(fill_value)==*(reinterpret_cast<char*>(non_zeroed_storage.begin()))\n                    ,\"failed to fill the storage; memset error?\");\n        }\n        //TODO: consider move it to destructor, even in a price of UB\n        void tear_down(){\n            non_zeroed_storage.begin()->~atomic_t();\n        }\n    };\n\n    template<typename T>\n    struct TestValueInitialization : test_initialization_fixture<T>{\n        void operator()(){\n            typedef typename test_initialization_fixture<T>::atomic_t atomic_type;\n            //please note that explicit braces below are needed to get zero initialization.\n            //in C++11, 8.5 Initializers [dcl.init], see  paragraphs 10,7,5\n            new (this->non_zeroed_storage.begin()) atomic_type();\n            //TODO: add use of KNOWN_ISSUE macro on SunCC 5.11\n            #if !__SUNPRO_CC || __SUNPRO_CC > 0x5110\n                //TODO: add printing of typename to the assertion\n                ASSERT(char(0)==*(reinterpret_cast<char*>(this->non_zeroed_storage.begin()))\n                        ,(\"value initialization for tbb::atomic should do zero initialization; \"\n                          \"actual value:\"+to_string(this->non_zeroed_storage.begin()->load())).c_str());\n            #endif\n            this->tear_down();\n        };\n    };\n\n    template<typename T>\n    struct TestDefaultInitialization : test_initialization_fixture<T>{\n        void operator ()(){\n            typedef typename test_initialization_fixture<T>::atomic_t atomic_type;\n            new (this->non_zeroed_storage.begin()) atomic_type;\n            ASSERT( char(this->fill_value)==*(reinterpret_cast<char*>(this->non_zeroed_storage.begin()))\n                    ,\"default initialization for atomic should do no initialization\");\n            this->tear_down();\n        }\n    };\n#   if __TBB_ATOMIC_CTORS\n        template<typename T>\n        struct TestDirectInitialization : test_initialization_fixture<T> {\n            void operator()(T i){\n                typedef typename test_initialization_fixture<T>::atomic_t atomic_type;\n                new (this->non_zeroed_storage.begin()) atomic_type(i);\n                ASSERT(i == this->non_zeroed_storage.begin()->load()\n                        ,(\"tbb::atomic initialization failed; \"\n                          \"value:\"+to_string(this->non_zeroed_storage.begin()->load())+\n                          \"; expected:\"+to_string(i)).c_str());\n                this->tear_down();\n            }\n        };\n#   endif\n}\ntemplate<typename T>\nvoid TestValueInitialization(){\n    initialization_tests::TestValueInitialization<T>()();\n}\ntemplate<typename T>\nvoid TestDefaultInitialization(){\n    initialization_tests::TestDefaultInitialization<T>()();\n}\n\n#if __TBB_ATOMIC_CTORS\ntemplate<typename T>\nvoid TestDirectInitialization(T i){\n    initialization_tests::TestDirectInitialization<T>()(i);\n}\n//TODO:  it would be great to have constructor doing dynamic initialization of local atomic objects implicitly (with zero?),\n//       but do no dynamic initializations by default for static objects\nnamespace test_constexpr_initialization_helper {\n    struct white_box_ad_hoc_type {\n        int _int;\n        constexpr white_box_ad_hoc_type(int a =0) : _int(a) {};\n        constexpr operator int() const { return _int; }\n    };\n}\n//some white boxing\nnamespace tbb { namespace internal {\n    template<>\n    struct atomic_impl<test_constexpr_initialization_helper::white_box_ad_hoc_type>: atomic_impl<int> {\n        atomic_impl() = default;\n        constexpr atomic_impl(test_constexpr_initialization_helper::white_box_ad_hoc_type value):atomic_impl<int>(value){}\n        constexpr operator int() const { return this->my_storage.my_value; }\n    };\n}}\n\n//TODO: make this a parameterized macro\nvoid TestConstExprInitializationIsTranslationTime(){\n    const char* ct_init_failed_msg = \"translation time init failed?\";\n    typedef tbb::atomic<int> atomic_t;\n    constexpr atomic_t a(8);\n    ASSERT(a == 8,ct_init_failed_msg);\n\n#if !__TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN\n    constexpr tbb::atomic<test_constexpr_initialization_helper::white_box_ad_hoc_type> ct_atomic(10);\n    //for some unknown reason clang does not managed to enum syntax\n#if __clang__\n    constexpr int ct_atomic_value_ten = (int)ct_atomic;\n#else\n    enum {ct_atomic_value_ten = (int)ct_atomic};\n#endif\n    __TBB_STATIC_ASSERT(ct_atomic_value_ten == 10, \"translation time init failed?\");\n    ASSERT(ct_atomic_value_ten == 10,ct_init_failed_msg);\n    int array[ct_atomic_value_ten];\n    ASSERT(Harness::array_length(array) == 10,ct_init_failed_msg);\n#endif //__TBB_CONSTEXPR_MEMBER_FUNCTION_BROKEN\n}\n\n#include <string>\n#include <vector>\nnamespace TestConstExprInitializationOfGlobalObjectsHelper{\n    struct static_objects_dynamic_init_order_tester {\n        static int order_hash;\n        template<int N> struct nth {\n            nth(){ order_hash = (order_hash<<4)+N; }\n        };\n\n        static nth<2> second;\n        static nth<3> third;\n    };\n\n    int static_objects_dynamic_init_order_tester::order_hash=1;\n    static_objects_dynamic_init_order_tester::nth<2> static_objects_dynamic_init_order_tester::second;\n    static_objects_dynamic_init_order_tester::nth<3> static_objects_dynamic_init_order_tester::third;\n\n    void TestStaticsDynamicInitializationOrder(){\n        ASSERT(static_objects_dynamic_init_order_tester::order_hash==0x123,\"Statics dynamic initialization order is broken? \");\n    }\n\n    template<typename T>\n    void TestStaticInit();\n\n    namespace auto_registered_tests_helper {\n        template<typename T>\n        struct type_name ;\n\n        #define REGISTER_TYPE_NAME(T)                           \\\n        namespace auto_registered_tests_helper{                 \\\n            template<>                                          \\\n            struct type_name<T> {                               \\\n                static const char* name;                        \\\n            };                                                  \\\n            const char* type_name<T>::name = #T;                \\\n        }                                                       \\\n\n        typedef void (* p_test_function_type)();\n        static std::vector<p_test_function_type> const_expr_tests;\n\n        template <typename T>\n        struct registration{\n            registration(){const_expr_tests.push_back(&TestStaticInit<T>);}\n        };\n    }\n    //according to ISO C++11 [basic.start.init], static data fields of class template have unordered\n    //initialization unless it is an explicit specialization\n    template<typename T>\n    struct tester;\n\n    #define TESTER_SPECIALIZATION(T,ct_value)                            \\\n    template<>                                                           \\\n    struct tester<T> {                                                   \\\n        struct static_before;                                            \\\n        static bool result;                                              \\\n        static static_before static_before_;                             \\\n        static tbb::atomic<T> static_atomic;                             \\\n                                                                         \\\n        static auto_registered_tests_helper::registration<T> registered; \\\n    };                                                                   \\\n    bool tester<T>::result = false;                                      \\\n                                                                         \\\n    struct tester<T>::static_before {                                    \\\n       static_before(){ result = (static_atomic==ct_value); }            \\\n    } ;                                                                  \\\n                                                                         \\\n    tester<T>::static_before tester<T>::static_before_;                  \\\n    tbb::atomic<T> tester<T>::static_atomic(ct_value);                   \\\n                                                                         \\\n    auto_registered_tests_helper::registration<T> tester<T>::registered; \\\n    REGISTER_TYPE_NAME(T)                                                \\\n\n    template<typename T>\n    void TestStaticInit(){\n        //TODO: add printing of values to the assertion\n        std::string type_name = auto_registered_tests_helper::type_name<T>::name;\n        ASSERT(tester<T>::result,(\"Static initialization failed for atomic \" + type_name).c_str());\n    }\n\n    void CallExprInitTests(){\n#   if __TBB_STATIC_CONSTEXPR_INIT_BROKEN\n        REPORT(\"Known issue: Compile-time initialization fails for static tbb::atomic variables\\n\");\n#   else\n        using namespace auto_registered_tests_helper;\n        for (size_t i =0; i<const_expr_tests.size(); ++i){\n            (*const_expr_tests[i])();\n        }\n        REMARK(\"ran %d constexpr static init test \\n\",const_expr_tests.size());\n#   endif\n    }\n\n    //TODO: unify somehow list of tested types with one in TestMain\n    //TODO: add specializations for:\n    //T,T(-T(1)\n    //T,1\n#   if __TBB_64BIT_ATOMICS\n        TESTER_SPECIALIZATION(long long,8LL)\n        TESTER_SPECIALIZATION(unsigned long long,8ULL)\n#   endif\n    TESTER_SPECIALIZATION(unsigned long,8UL)\n    TESTER_SPECIALIZATION(long,8L)\n    TESTER_SPECIALIZATION(unsigned int,8U)\n    TESTER_SPECIALIZATION(int,8)\n    TESTER_SPECIALIZATION(unsigned short,8)\n    TESTER_SPECIALIZATION(short,8)\n    TESTER_SPECIALIZATION(unsigned char,8)\n    TESTER_SPECIALIZATION(signed char,8)\n    TESTER_SPECIALIZATION(char,8)\n    TESTER_SPECIALIZATION(wchar_t,8)\n\n    int dummy;\n    TESTER_SPECIALIZATION(void*,&dummy);\n    TESTER_SPECIALIZATION(bool,false);\n    //TODO: add test for constexpt initialization of floating types\n    //for some unknown reasons 0.1 becomes 0.10000001 and equality comparison fails\n    enum written_number_enum{one=2,two};\n    TESTER_SPECIALIZATION(written_number_enum,one);\n    //TODO: add test for ArrayElement<> as in TestMain\n}\n\nvoid TestConstExprInitializationOfGlobalObjects(){\n    //first assert that assumption the test based on are correct\n    TestConstExprInitializationOfGlobalObjectsHelper::TestStaticsDynamicInitializationOrder();\n    TestConstExprInitializationOfGlobalObjectsHelper::CallExprInitTests();\n}\n#endif //__TBB_ATOMIC_CTORS\ntemplate<typename T>\nvoid TestOperations( T i, T j, T k ) {\n    TestValueInitialization<T>();\n    TestDefaultInitialization<T>();\n#   if __TBB_ATOMIC_CTORS\n        TestConstExprInitializationIsTranslationTime();\n        TestDirectInitialization<T>(i);\n        TestDirectInitialization<T>(j);\n        TestDirectInitialization<T>(k);\n#   endif\n    TestConst(i);\n    TestCompareAndSwap(i,j,k);\n    TestFetchAndStore(i,k);    // Pass i,k instead of i,j, because callee requires two distinct values.\n}\n\ntemplate<typename T>\nvoid TestParallel( const char* name );\n\nbool ParallelError;\n\ntemplate<typename T>\nstruct AlignmentChecker {\n    char c;\n    tbb::atomic<T> i;\n};\n\n//TODO: candidate for test_compiler?\ntemplate<typename T>\nvoid TestAlignment( const char* name ) {\n    AlignmentChecker<T> ac;\n    tbb::atomic<T> x;\n    x = T(0);\n    bool is_stack_variable_aligned = tbb::internal::is_aligned(&x,sizeof(T));\n    bool is_member_variable_aligned = tbb::internal::is_aligned(&ac.i,sizeof(T));\n    bool is_struct_size_correct = (sizeof(AlignmentChecker<T>)==2*sizeof(tbb::atomic<T>));\n    bool known_issue_condition = __TBB_FORCE_64BIT_ALIGNMENT_BROKEN && ( sizeof(T)==8);\n    //TODO: replace these ifs with KNOWN_ISSUE macro when it available\n    if (!is_stack_variable_aligned){\n        std::string msg = \"Compiler failed to properly align local atomic variable?; size:\"+to_string(sizeof(T)) + \" type: \"\n                +to_string(name) + \" location:\" + to_string(&x) +\"\\n\";\n        if (known_issue_condition) {\n            REPORT((\"Known issue: \"+ msg).c_str());\n        }else{\n            ASSERT(false,msg.c_str());\n        }\n    }\n    if (!is_member_variable_aligned){\n        std::string msg = \"Compiler failed to properly align atomic member variable?; size:\"+to_string(sizeof(T)) + \" type: \"\n                +to_string(name) + \" location:\" + to_string(&ac.i) +\"\\n\";\n        if (known_issue_condition) {\n            REPORT((\"Known issue: \"+ msg).c_str());\n        }else{\n            ASSERT(false,msg.c_str());\n        }\n    }\n    if (!is_struct_size_correct){\n        std::string msg = \"Compiler failed to properly add padding to structure with atomic member variable?; Structure size:\"+to_string(sizeof(AlignmentChecker<T>))\n                + \" atomic size:\"+to_string(sizeof(tbb::atomic<T>)) + \" type: \" + to_string(name) +\"\\n\";\n        if (known_issue_condition) {\n            REPORT((\"Known issue: \"+ msg).c_str());\n        }else{\n            ASSERT(false,msg.c_str());\n        }\n    }\n\n    AlignmentChecker<T> array[5];\n    for( int k=0; k<5; ++k ) {\n        bool is_member_variable_in_array_aligned = tbb::internal::is_aligned(&array[k].i,sizeof(T));\n        if (!is_member_variable_in_array_aligned) {\n            std::string msg = \"Compiler failed to properly align atomic member variable inside an array?; size:\"+to_string(sizeof(T)) + \" type:\"+to_string(name)\n                    + \" location:\" + to_string(&array[k].i) + \"\\n\";\n            if (known_issue_condition){\n                REPORT((\"Known issue: \"+ msg).c_str());\n            }else{\n                ASSERT(false,msg.c_str());\n            }\n        }\n    }\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( disable: 4146 ) // unary minus operator applied to unsigned type, result still unsigned\n    #pragma warning( disable: 4334 ) // result of 32-bit shift implicitly converted to 64 bits\n#endif\n\n/** T is an integral type. */\ntemplate<typename T>\nvoid TestAtomicInteger( const char* name ) {\n    REMARK(\"testing atomic<%s> (size=%d)\\n\",name,sizeof(tbb::atomic<T>));\n    TestAlignment<T>(name);\n    TestOperations<T>(0L, T(-T(1)), T(1));\n    for( int k=0; k<int(sizeof(long))*8-1; ++k ) {\n        const long p = 1L<<k;\n        TestOperations<T>(T(p), T(~(p)), T(1-(p)));\n        TestOperations<T>(T(-(p)), T(~(-(p))), T(1-(-(p))));\n        TestFetchAndAdd<T>(T(-(p)));\n    }\n    TestParallel<T>( name );\n}\n\nnamespace test_indirection_helpers {\n    template<typename T>\n    struct Foo {\n        T x, y, z;\n    };\n}\n\ntemplate<typename T>\nvoid TestIndirection() {\n    using test_indirection_helpers::Foo;\n    Foo<T> item;\n    tbb::atomic<Foo<T>*> pointer;\n    pointer = &item;\n    for( int k=-10; k<=10; ++k ) {\n        // Test various syntaxes for indirection to fields with non-zero offset.\n        T value1=T(), value2=T();\n        for( size_t j=0; j<sizeof(T); ++j ) {\n            ((char*)&value1)[j] = char(k^j);\n            ((char*)&value2)[j] = char(k^j*j);\n        }\n        pointer->y = value1;\n        (*pointer).z = value2;\n        T result1 = (*pointer).y;\n        T result2 = pointer->z;\n        ASSERT( memcmp(&value1,&result1,sizeof(T))==0, NULL );\n        ASSERT( memcmp(&value2,&result2,sizeof(T))==0, NULL );\n    }\n    #if __TBB_ICC_BUILTIN_ATOMICS_POINTER_ALIASING_BROKEN\n        //prevent ICC compiler from assuming 'item' is unused and reusing it's storage\n        item.x = item.y=item.z;\n    #endif\n}\n\n//! Test atomic<T*>\ntemplate<typename T>\nvoid TestAtomicPointer() {\n    REMARK(\"testing atomic pointer (%d)\\n\",int(sizeof(T)));\n    T array[1000];\n    TestOperations<T*>(&array[500],&array[250],&array[750]);\n    TestFetchAndAdd<T*>(&array[500]);\n    TestIndirection<T>();\n    TestParallel<T*>( \"pointer\" );\n\n}\n\n//! Test atomic<Ptr> where Ptr is a pointer to a type of unknown size\ntemplate<typename Ptr>\nvoid TestAtomicPointerToTypeOfUnknownSize( const char* name ) {\n    REMARK(\"testing atomic<%s>\\n\",name);\n    char array[1000];\n    TestOperations<Ptr>((Ptr)(void*)&array[500],(Ptr)(void*)&array[250],(Ptr)(void*)&array[750]);\n    TestParallel<Ptr>( name );\n}\n\nvoid TestAtomicBool() {\n    REMARK(\"testing atomic<bool>\\n\");\n    TestOperations<bool>(false,true,true);\n    TestOperations<bool>(true,false,false);\n    TestParallel<bool>( \"bool\" );\n}\n\ntemplate<typename EnumType>\nstruct HasImplicitConversionToInt {\n    typedef bool yes;\n    typedef int no;\n    __TBB_STATIC_ASSERT( sizeof(yes) != sizeof(no), \"The helper needs two types of different sizes to work.\" );\n\n    static yes detect( int );\n    static no detect( ... );\n\n    enum { value = (sizeof(yes) == sizeof(detect( EnumType() ))) };\n};\n\nenum Color {Red=0,Green=1,Blue=-1};\n\nvoid TestAtomicEnum() {\n    REMARK(\"testing atomic<Color>\\n\");\n    TestOperations<Color>(Red,Green,Blue);\n    TestParallel<Color>( \"Color\" );\n    __TBB_STATIC_ASSERT( HasImplicitConversionToInt< tbb::atomic<Color> >::value, \"The implicit conversion is expected.\" );\n}\n\n#if __TBB_SCOPED_ENUM_PRESENT\nenum class ScopedColor1 {ScopedRed,ScopedGreen,ScopedBlue=-1};\n// TODO: extend the test to cover 2 byte scoped enum as well\n#if __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_NEGATIVE_VALUE_BROKEN\nenum class ScopedColor2 : signed char {ScopedZero, ScopedOne,ScopedRed=42,ScopedGreen=-1,ScopedBlue=127};\n#else\nenum class ScopedColor2 : signed char {ScopedZero, ScopedOne,ScopedRed=-128,ScopedGreen=-1,ScopedBlue=127};\n#endif\n\n// TODO: replace the hack of getting symbolic enum name with a better implementation\nstd::string enum_strings[] = {\"ScopedZero\",\"ScopedOne\",\"ScopedRed\",\"ScopedGreen\",\"ScopedBlue\"};\ntemplate<>\nstd::string to_string<ScopedColor1>(const ScopedColor1& a){\n    return enum_strings[a==ScopedColor1::ScopedBlue? 4 : (int)a+2];\n}\ntemplate<>\nstd::string to_string<ScopedColor2>(const ScopedColor2& a){\n    return enum_strings[a==ScopedColor2::ScopedRed? 2 :\n        a==ScopedColor2::ScopedGreen? 3 : a==ScopedColor2::ScopedBlue? 4 : (int)a ];\n}\n\nvoid TestAtomicScopedEnum() {\n    REMARK(\"testing atomic<ScopedColor>\\n\");\n    TestOperations<ScopedColor1>(ScopedColor1::ScopedRed,ScopedColor1::ScopedGreen,ScopedColor1::ScopedBlue);\n    TestParallel<ScopedColor1>( \"ScopedColor1\" );\n#if __TBB_ICC_SCOPED_ENUM_WITH_UNDERLYING_TYPE_ATOMIC_LOAD_BROKEN\n    REPORT(\"Known issue: the operation tests for a scoped enum with a specified underlying type are skipped.\\n\");\n#else\n    TestOperations<ScopedColor2>(ScopedColor2::ScopedRed,ScopedColor2::ScopedGreen,ScopedColor2::ScopedBlue);\n    TestParallel<ScopedColor2>( \"ScopedColor2\" );\n#endif\n    __TBB_STATIC_ASSERT( !HasImplicitConversionToInt< tbb::atomic<ScopedColor1> >::value, \"The implicit conversion is not expected.\" );\n    __TBB_STATIC_ASSERT( !HasImplicitConversionToInt< tbb::atomic<ScopedColor1> >::value, \"The implicit conversion is not expected.\" );\n    __TBB_STATIC_ASSERT( sizeof(tbb::atomic<ScopedColor1>) == sizeof(ScopedColor1), \"tbb::atomic instantiated with scoped enum should have the same size as scoped enum.\" );\n    __TBB_STATIC_ASSERT( sizeof(tbb::atomic<ScopedColor2>) == sizeof(ScopedColor2), \"tbb::atomic instantiated with scoped enum should have the same size as scoped enum.\" );\n}\n#endif /* __TBB_SCOPED_ENUM_PRESENT */\n\ntemplate<typename T>\nvoid TestAtomicFloat( const char* name ) {\n    REMARK(\"testing atomic<%s>\\n\", name );\n    TestAlignment<T>(name);\n    TestOperations<T>(0.5,3.25,10.75);\n    TestParallel<T>( name );\n}\n\n#define __TBB_TEST_GENERIC_PART_WORD_CAS (__TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED)\n#if __TBB_TEST_GENERIC_PART_WORD_CAS\nvoid TestEndianness() {\n    // Test for pure endianness (assumed by simpler probe in __TBB_MaskedCompareAndSwap()).\n    bool is_big_endian = true, is_little_endian = true;\n    const tbb::internal::uint32_t probe = 0x03020100;\n    ASSERT (tbb::internal::is_aligned(&probe,4), NULL);\n    for( const char *pc_begin = reinterpret_cast<const char*>(&probe)\n         , *pc = pc_begin, *pc_end = pc_begin + sizeof(probe)\n         ; pc != pc_end; ++pc) {\n        if (*pc != pc_end-1-pc) is_big_endian = false;\n        if (*pc != pc-pc_begin) is_little_endian = false;\n    }\n    ASSERT (!is_big_endian || !is_little_endian, NULL);\n    #if __TBB_ENDIANNESS==__TBB_ENDIAN_DETECT\n        ASSERT (is_big_endian || is_little_endian, \"__TBB_ENDIANNESS should be set to __TBB_ENDIAN_UNSUPPORTED\");\n    #elif __TBB_ENDIANNESS==__TBB_ENDIAN_BIG\n        ASSERT (is_big_endian, \"__TBB_ENDIANNESS should NOT be set to __TBB_ENDIAN_BIG\");\n    #elif __TBB_ENDIANNESS==__TBB_ENDIAN_LITTLE\n        ASSERT (is_little_endian, \"__TBB_ENDIANNESS should NOT be set to __TBB_ENDIAN_LITTLE\");\n    #elif __TBB_ENDIANNESS==__TBB_ENDIAN_UNSUPPORTED\n        #error Generic implementation of part-word CAS may not be used: unsupported endianness\n    #else\n        #error Unexpected value of __TBB_ENDIANNESS\n    #endif\n}\n\nnamespace masked_cas_helpers {\n    const int numMaskedOperations = 100000;\n    const int testSpaceSize = 8;\n    int prime[testSpaceSize] = {3,5,7,11,13,17,19,23};\n\n    template<typename T>\n    class TestMaskedCAS_Body: NoAssign {\n        T*  test_space_uncontended;\n        T*  test_space_contended;\n    public:\n        TestMaskedCAS_Body( T* _space1, T* _space2 ) : test_space_uncontended(_space1), test_space_contended(_space2) {}\n        void operator()( int my_idx ) const {\n            using tbb::internal::__TBB_MaskedCompareAndSwap;\n            const volatile T my_prime = T(prime[my_idx]); // 'volatile' prevents erroneous optimizations by SunCC\n            T* const my_ptr = test_space_uncontended+my_idx;\n            T old_value=0;\n            for( int i=0; i<numMaskedOperations; ++i, old_value+=my_prime ){\n                T result;\n            // Test uncontended case\n                T new_value = old_value + my_prime;\n                // The following CAS should always fail\n                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value-1);\n                ASSERT(result!=old_value-1, \"masked CAS succeeded while it should fail\");\n                ASSERT(result==*my_ptr, \"masked CAS result mismatch with real value\");\n                // The following one should succeed\n                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value);\n                ASSERT(result==old_value && *my_ptr==new_value, \"masked CAS failed while it should succeed\");\n                // The following one should fail again\n                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value);\n                ASSERT(result!=old_value, \"masked CAS succeeded while it should fail\");\n                ASSERT(result==*my_ptr, \"masked CAS result mismatch with real value\");\n            // Test contended case\n                for( int j=0; j<testSpaceSize; ++j ){\n                    // try adding my_prime until success\n                    T value;\n                    do {\n                        value = test_space_contended[j];\n                        result = __TBB_MaskedCompareAndSwap<T>(test_space_contended+j,value+my_prime,value);\n                    } while( result!=value );\n                }\n            }\n        }\n    };\n\n    template<typename T>\n    struct intptr_as_array_of\n    {\n        static const int how_many_Ts = sizeof(intptr_t)/sizeof(T);\n        union {\n            intptr_t result;\n            T space[ how_many_Ts ];\n        };\n    };\n\n    template<typename T>\n    intptr_t getCorrectUncontendedValue(int slot_idx) {\n        intptr_as_array_of<T> slot;\n        slot.result = 0;\n        for( int i=0; i<slot.how_many_Ts; ++i ) {\n            const T my_prime = T(prime[slot_idx*slot.how_many_Ts + i]);\n            for( int j=0; j<numMaskedOperations; ++j )\n                slot.space[i] += my_prime;\n        }\n        return slot.result;\n    }\n\n    template<typename T>\n    intptr_t getCorrectContendedValue() {\n        intptr_as_array_of<T>  slot;\n        slot.result = 0;\n        for( int i=0; i<slot.how_many_Ts; ++i )\n            for( int primes=0; primes<testSpaceSize; ++primes )\n                for( int j=0; j<numMaskedOperations; ++j )\n                    slot.space[i] += prime[primes];\n        return slot.result;\n    }\n} // namespace masked_cas_helpers\n\ntemplate<typename T>\nvoid TestMaskedCAS() {\n    using namespace masked_cas_helpers;\n    REMARK(\"testing masked CAS<%d>\\n\",int(sizeof(T)));\n\n    const int num_slots = sizeof(T)*testSpaceSize/sizeof(intptr_t);\n    intptr_t arr1[num_slots+2]; // two more \"canary\" slots at boundaries\n    intptr_t arr2[num_slots+2];\n    for(int i=0; i<num_slots+2; ++i)\n        arr2[i] = arr1[i] = 0;\n    T* test_space_uncontended = (T*)(arr1+1);\n    T* test_space_contended = (T*)(arr2+1);\n\n    NativeParallelFor( testSpaceSize, TestMaskedCAS_Body<T>(test_space_uncontended, test_space_contended) );\n\n    ASSERT( arr1[0]==0 && arr1[num_slots+1]==0 && arr2[0]==0 && arr2[num_slots+1]==0 , \"adjacent memory was overwritten\" );\n    const intptr_t correctContendedValue = getCorrectContendedValue<T>();\n    for(int i=0; i<num_slots; ++i) {\n        ASSERT( arr1[i+1]==getCorrectUncontendedValue<T>(i), \"unexpected value in an uncontended slot\" );\n        ASSERT( arr2[i+1]==correctContendedValue, \"unexpected value in a contended slot\" );\n    }\n}\n#endif // __TBB_TEST_GENERIC_PART_WORD_CAS\n\ntemplate <typename T>\nclass TestRelaxedLoadStorePlainBody {\n    static T s_turn,\n             s_ready;\n\npublic:\n    static unsigned s_count1,\n                    s_count2;\n\n    void operator() ( int id ) const {\n        using tbb::internal::__TBB_load_relaxed;\n        using tbb::internal::__TBB_store_relaxed;\n\n        if ( id == 0 ) {\n            while ( !__TBB_load_relaxed(s_turn) ) {\n                ++s_count1;\n                __TBB_store_relaxed(s_ready, 1);\n            }\n        }\n        else {\n            while ( !__TBB_load_relaxed(s_ready) ) {\n                ++s_count2;\n                continue;\n            }\n            __TBB_store_relaxed(s_turn, 1);\n        }\n    }\n}; // class TestRelaxedLoadStorePlainBody<T>\n\ntemplate <typename T> T TestRelaxedLoadStorePlainBody<T>::s_turn = 0;\ntemplate <typename T> T TestRelaxedLoadStorePlainBody<T>::s_ready = 0;\ntemplate <typename T> unsigned TestRelaxedLoadStorePlainBody<T>::s_count1 = 0;\ntemplate <typename T> unsigned TestRelaxedLoadStorePlainBody<T>::s_count2 = 0;\n\ntemplate <typename T>\nclass TestRelaxedLoadStoreAtomicBody {\n    static tbb::atomic<T> s_turn,\n                          s_ready;\n\npublic:\n    static unsigned s_count1,\n                    s_count2;\n\n    void operator() ( int id ) const {\n        if ( id == 0 ) {\n            while ( s_turn.template load<tbb::relaxed>() == 0 ) {\n                ++s_count1;\n                s_ready.template store<tbb::relaxed>(1);\n            }\n        }\n        else {\n            while ( s_ready.template load<tbb::relaxed>() == 0 ) {\n                ++s_count2;\n                continue;\n            }\n            s_turn.template store<tbb::relaxed>(1);\n        }\n    }\n}; // class TestRelaxedLoadStoreAtomicBody<T>\n\ntemplate <typename T> tbb::atomic<T> TestRelaxedLoadStoreAtomicBody<T>::s_turn;\ntemplate <typename T> tbb::atomic<T> TestRelaxedLoadStoreAtomicBody<T>::s_ready;\ntemplate <typename T> unsigned TestRelaxedLoadStoreAtomicBody<T>::s_count1 = 0;\ntemplate <typename T> unsigned TestRelaxedLoadStoreAtomicBody<T>::s_count2 = 0;\n\ntemplate <typename T>\nvoid TestRegisterPromotionSuppression () {\n    REMARK(\"testing register promotion suppression (size=%d)\\n\", (int)sizeof(T));\n    NativeParallelFor( 2, TestRelaxedLoadStorePlainBody<T>() );\n    NativeParallelFor( 2, TestRelaxedLoadStoreAtomicBody<T>() );\n}\n\ntemplate<unsigned N>\nclass ArrayElement {\n    char item[N];\n};\n\n#include \"harness_barrier.h\"\nnamespace bit_operation_test_suite{\n    struct fixture : NoAssign{\n        static const uintptr_t zero = 0;\n        const uintptr_t random_value ;\n        const uintptr_t inverted_random_value ;\n        fixture():\n            random_value (tbb::internal::select_size_t_constant<0x9E3779B9,0x9E3779B97F4A7C15ULL>::value),\n            inverted_random_value ( ~random_value)\n        {}\n    };\n\n    struct TestAtomicORSerially : fixture {\n        void operator()(){\n            //these additional variable are needed to get more meaningful expression in the assert\n            uintptr_t initial_value = zero;\n            uintptr_t atomic_or_result = initial_value;\n            uintptr_t atomic_or_operand = random_value;\n\n            __TBB_AtomicOR(&atomic_or_result,atomic_or_operand);\n\n            ASSERT(atomic_or_result == (initial_value | atomic_or_operand),\"AtomicOR should do the OR operation\");\n        }\n    };\n    struct TestAtomicANDSerially : fixture {\n        void operator()(){\n            //these additional variable are needed to get more meaningful expression in the assert\n            uintptr_t initial_value = inverted_random_value;\n            uintptr_t atomic_and_result = initial_value;\n            uintptr_t atomic_and_operand = random_value;\n\n            __TBB_AtomicAND(&atomic_and_result,atomic_and_operand);\n\n            ASSERT(atomic_and_result == (initial_value & atomic_and_operand),\"AtomicAND should do the AND operation\");\n        }\n    };\n\n    struct TestAtomicORandANDConcurrently : fixture {\n        static const uintptr_t bit_per_word = sizeof(uintptr_t) * 8;\n        static const uintptr_t threads_number = bit_per_word;\n        Harness::SpinBarrier m_barrier;\n        uintptr_t bitmap;\n        TestAtomicORandANDConcurrently():bitmap(zero) {}\n\n        struct thread_body{\n            TestAtomicORandANDConcurrently* test;\n            thread_body(TestAtomicORandANDConcurrently* the_test) : test(the_test) {}\n            void operator()(int thread_index)const{\n                const uintptr_t single_bit_mask = ((uintptr_t)1u) << (thread_index % bit_per_word);\n                test->m_barrier.wait();\n                static const char* error_msg = \"AtomicOR and AtomicAND should be atomic\";\n                for (uintptr_t attempts=0; attempts<1000; attempts++ ){\n                    //Set and clear designated bits in a word.\n                    __TBB_AtomicOR(&test->bitmap,single_bit_mask);\n                     __TBB_Yield();\n                    bool the_bit_is_set_after_set_via_atomic_or = ((__TBB_load_with_acquire(test->bitmap) & single_bit_mask )== single_bit_mask);\n                    ASSERT(the_bit_is_set_after_set_via_atomic_or,error_msg);\n\n                    __TBB_AtomicAND(&test->bitmap,~single_bit_mask);\n                    __TBB_Yield();\n                    bool the_bit_is_clear_after_clear_via_atomic_and = ((__TBB_load_with_acquire(test->bitmap) & single_bit_mask )== zero);\n                    ASSERT(the_bit_is_clear_after_clear_via_atomic_and,error_msg);\n                }\n            }\n        };\n        void operator()(){\n            m_barrier.initialize(threads_number);\n            NativeParallelFor(threads_number,thread_body(this));\n        }\n    };\n}\nvoid TestBitOperations(){\n    using namespace bit_operation_test_suite;\n    TestAtomicORSerially()();\n    TestAtomicANDSerially()();\n    TestAtomicORandANDConcurrently()();\n}\n\nint TestMain () {\n#   if __TBB_ATOMIC_CTORS\n         TestConstExprInitializationOfGlobalObjects();\n#   endif //__TBB_ATOMIC_CTORS\n#   if __TBB_64BIT_ATOMICS && !__TBB_CAS_8_CODEGEN_BROKEN\n         TestAtomicInteger<unsigned long long>(\"unsigned long long\");\n         TestAtomicInteger<long long>(\"long long\");\n#   elif __TBB_CAS_8_CODEGEN_BROKEN\n         REPORT(\"Known issue: compiler generates incorrect code for 64-bit atomics on this configuration\\n\");\n#   else\n         REPORT(\"Known issue: 64-bit atomics are not supported\\n\");\n         ASSERT(sizeof(long long)==8, \"type long long is not 64 bits\");\n#   endif\n    TestAtomicInteger<unsigned long>(\"unsigned long\");\n    TestAtomicInteger<long>(\"long\");\n    TestAtomicInteger<unsigned int>(\"unsigned int\");\n    TestAtomicInteger<int>(\"int\");\n    TestAtomicInteger<unsigned short>(\"unsigned short\");\n    TestAtomicInteger<short>(\"short\");\n    TestAtomicInteger<signed char>(\"signed char\");\n    TestAtomicInteger<unsigned char>(\"unsigned char\");\n    TestAtomicInteger<char>(\"char\");\n    TestAtomicInteger<wchar_t>(\"wchar_t\");\n    TestAtomicInteger<size_t>(\"size_t\");\n    TestAtomicInteger<ptrdiff_t>(\"ptrdiff_t\");\n    TestAtomicPointer<ArrayElement<1> >();\n    TestAtomicPointer<ArrayElement<2> >();\n    TestAtomicPointer<ArrayElement<3> >();\n    TestAtomicPointer<ArrayElement<4> >();\n    TestAtomicPointer<ArrayElement<5> >();\n    TestAtomicPointer<ArrayElement<6> >();\n    TestAtomicPointer<ArrayElement<7> >();\n    TestAtomicPointer<ArrayElement<8> >();\n    TestAtomicPointerToTypeOfUnknownSize<IncompleteType*>( \"IncompleteType*\" );\n    TestAtomicPointerToTypeOfUnknownSize<void*>( \"void*\" );\n    TestAtomicBool();\n    TestAtomicEnum();\n#   if __TBB_SCOPED_ENUM_PRESENT\n    TestAtomicScopedEnum();\n#   endif\n    TestAtomicFloat<float>(\"float\");\n#   if __TBB_64BIT_ATOMICS && !__TBB_CAS_8_CODEGEN_BROKEN\n        TestAtomicFloat<double>(\"double\");\n#   else\n        ASSERT(sizeof(double)==8, \"type double is not 64 bits\");\n#   endif\n    ASSERT( !ParallelError, NULL );\n#   if __TBB_TEST_GENERIC_PART_WORD_CAS\n        TestEndianness();\n        ASSERT (sizeof(short)==2, NULL);\n        TestMaskedCAS<unsigned short>();\n        TestMaskedCAS<short>();\n        TestMaskedCAS<unsigned char>();\n        TestMaskedCAS<signed char>();\n        TestMaskedCAS<char>();\n#   elif __TBB_USE_GENERIC_PART_WORD_CAS\n#       error Generic part-word CAS is enabled, but not covered by the test\n#   else\n        REPORT(\"Skipping test for generic part-word CAS\\n\");\n#   endif\n#   if __TBB_64BIT_ATOMICS && !__TBB_CAS_8_CODEGEN_BROKEN\n        TestRegisterPromotionSuppression<tbb::internal::int64_t>();\n#   endif\n    TestRegisterPromotionSuppression<tbb::internal::int32_t>();\n    TestRegisterPromotionSuppression<tbb::internal::int16_t>();\n    TestRegisterPromotionSuppression<tbb::internal::int8_t>();\n    TestBitOperations();\n\n    return Harness::Done;\n}\n\ntemplate<typename T, bool aligned>\nclass AlignedAtomic: NoAssign {\n    //tbb::aligned_space can not be used here, because internally it utilize align pragma/attribute,\n    //which has bugs on 8byte alignment on ia32 on some compilers( see according ****_BROKEN macro)\n    // Allocate space big enough to always contain sizeof(T)-byte locations that are aligned and misaligned.\n    char raw_space[2*sizeof(T) -1];\npublic:\n    tbb::atomic<T>& construct_atomic(){\n        std::memset(&raw_space[0],0, sizeof(raw_space));\n        uintptr_t delta = aligned ? 0 : sizeof(T)/2;\n        size_t index=sizeof(T)-1;\n        tbb::atomic<T>* y = reinterpret_cast<tbb::atomic<T>*>((reinterpret_cast<uintptr_t>(&raw_space[index+delta])&~index) - delta);\n        // Assertion checks that y really did end up somewhere inside \"raw_space\".\n        ASSERT( raw_space<=reinterpret_cast<char*>(y), \"y starts before raw_space\" );\n        ASSERT( reinterpret_cast<char*>(y+1) <= raw_space+sizeof(raw_space), \"y starts after raw_space\" );\n        ASSERT( !(aligned ^ tbb::internal::is_aligned(y,sizeof(T))), \"y is not aligned as it required\" );\n        new (y) tbb::atomic<T> ();\n        return *y;\n    }\n};\n\ntemplate<typename T, bool aligned>\nstruct FlagAndMessage: AlignedAtomic<T,aligned> {\n    //! 0 if message not set yet, 1 if message is set.\n    tbb::atomic<T>& flag;\n    /** Force flag and message to be on distinct cache lines for machines with cache line size <= 4096 bytes */\n    char pad[4096/sizeof(T)];\n    //! Non-zero if message is ready\n    T message;\n    FlagAndMessage(): flag(FlagAndMessage::construct_atomic()) {\n        std::memset(pad,0,sizeof(pad));\n    }\n};\n\n// A special template function used for summation.\n// Actually it is only necessary because of its specialization for void*\ntemplate<typename T>\nT special_sum(intptr_t arg1, intptr_t arg2) {\n    return (T)((T)arg1 + arg2);\n}\n\n// The specialization for IncompleteType* is required\n// because pointer arithmetic (+) is impossible with IncompleteType*\ntemplate<>\nIncompleteType* special_sum<IncompleteType*>(intptr_t arg1, intptr_t arg2) {\n    return (IncompleteType*)(arg1 + arg2);\n}\n\n// The specialization for void* is required\n// because pointer arithmetic (+) is impossible with void*\ntemplate<>\nvoid* special_sum<void*>(intptr_t arg1, intptr_t arg2) {\n    return (void*)(arg1 + arg2);\n}\n\n// The specialization for bool is required to shut up gratuitous compiler warnings,\n// because some compilers warn about casting int to bool.\ntemplate<>\nbool special_sum<bool>(intptr_t arg1, intptr_t arg2) {\n    return ((arg1!=0) + arg2)!=0;\n}\n\n#if __TBB_SCOPED_ENUM_PRESENT\n// The specialization for scoped enumerators is required\n// because scoped enumerators prohibit implicit conversion to int\ntemplate<>\nScopedColor1 special_sum<ScopedColor1>(intptr_t arg1, intptr_t arg2) {\n    return (ScopedColor1)(arg1 + arg2);\n}\ntemplate<>\nScopedColor2 special_sum<ScopedColor2>(intptr_t arg1, intptr_t arg2) {\n    return (ScopedColor2)(arg1 + arg2);\n}\n#endif\n\nvolatile int One = 1;\n\ninline bool IsRelaxed ( LoadStoreExpression e ) {\n    return e == UseExplicitRelaxed || e == UseGlobalHelperRelaxed;\n}\n\ntemplate <typename T, LoadStoreExpression E>\nstruct LoadStoreTraits;\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseOperators> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = src; }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { dst = src; }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseImplicitAcqRel> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = src.load(); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { dst.store(src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseExplicitFullyFenced> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = src.template load<tbb::full_fence>(); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { dst.template store<tbb::full_fence>(src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseExplicitAcqRel> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = src.template load<tbb::acquire>(); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { dst.template store<tbb::release>(src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseExplicitRelaxed> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = src.template load<tbb::relaxed>(); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { dst.template store<tbb::relaxed>(src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseGlobalHelperFullyFenced> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = tbb::load<tbb::full_fence>(src); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { tbb::store<tbb::full_fence>(dst, src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseGlobalHelperAcqRel> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = tbb::load<tbb::acquire>(src); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { tbb::store<tbb::release>(dst, src); }\n};\n\ntemplate <typename T>\nstruct LoadStoreTraits<T, UseGlobalHelperRelaxed> {\n    static void load ( T& dst, const tbb::atomic<T>& src ) { dst = tbb::load<tbb::relaxed>(src); }\n    static void store ( tbb::atomic<T>& dst, const T& src ) { tbb::store<tbb::relaxed>(dst, src); }\n};\n\ntemplate<typename T, bool aligned, LoadStoreExpression E>\nstruct HammerLoadAndStoreFence: NoAssign {\n    typedef FlagAndMessage<T,aligned> fam_type;\nprivate:\n    typedef LoadStoreTraits<T, E> trait;\n    fam_type* fam;\n    const int n;\n    const int p;\n    const int trial;\n    const char* name;\n    mutable T accum;\npublic:\n    HammerLoadAndStoreFence( fam_type* fam_, int n_, int p_, const char* name_, int trial_ ) : fam(fam_), n(n_), p(p_), trial(trial_), name(name_) {}\n    void operator()( int k ) const {\n        int one = One;\n        fam_type* s = fam+k;\n        fam_type* s_next = fam + (k+1)%p;\n        for( int i=0; i<n; ++i ) {\n            // The inner for loop is a spin-wait loop, which is normally considered very bad style.\n            // But we must use it here because we are interested in examining subtle hardware effects.\n            for(unsigned short cnt=1; ; ++cnt) {\n                if( !(cnt%1024) ) // to help 1-core or oversubscribed systems complete the test, yield every 2^10 iterations\n                    __TBB_Yield();\n                // Compilers typically generate non-trivial sequence for division by a constant.\n                // The expression here is dependent on the loop index i, so it cannot be hoisted.\n                #define COMPLICATED_ZERO (i*(one-1)/100)\n                // Read flag and then the message\n                T flag, message;\n                if( trial&1 ) {\n                    // COMPLICATED_ZERO here tempts compiler to hoist load of message above reading of flag.\n                    trait::load( flag, (s+COMPLICATED_ZERO)->flag );\n                    message = s->message;\n                } else {\n                    trait::load( flag, s->flag );\n                    message = s->message;\n                }\n                if ( flag != T(0) ) {\n                    if( flag!=(T)-1 ) {\n                        REPORT(\"ERROR: flag!=(T)-1 k=%d i=%d trial=%x type=%s (atomicity problem?)\\n\", k, i, trial, name );\n                        ParallelError = true;\n                    }\n                    if( !IsRelaxed(E) && message!=(T)-1 ) {\n                        REPORT(\"ERROR: message!=(T)-1 k=%d i=%d trial=%x type=%s mode=%d (memory fence problem?)\\n\", k, i, trial, name, E );\n                        ParallelError = true;\n                    }\n                    s->message = T(0);\n                    trait::store( s->flag, T(0) );\n                    // Prevent deadlock possible in relaxed mode because of store(0)\n                    // to the first thread's flag being reordered after the last\n                    // thread's store(-1) into it.\n                    if ( IsRelaxed(E) ) {\n                        while( s_next->flag.template load<tbb::relaxed>() != T(0) )\n                            __TBB_Yield();\n                    }\n                    else\n                        ASSERT( s_next->flag == T(0), NULL );\n                    // Set message and then the flag\n                    if( trial&2 ) {\n                        // COMPLICATED_ZERO here tempts compiler to sink store below setting of flag\n                        s_next->message = special_sum<T>(-1, COMPLICATED_ZERO);\n                        trait::store( s_next->flag, (T)-1 );\n                    } else {\n                        s_next->message = (T)-1;\n                        trait::store( s_next->flag, (T)-1 );\n                    }\n                    break;\n                } else {\n                    // Force compiler to use message anyway, so it cannot sink read of s->message below the if.\n                    accum = message;\n                }\n            }\n        }\n    }\n};\n\n//! Test that atomic<T> has acquire semantics for loads and release semantics for stores.\n/** Test performs round-robin passing of message among p processors,\n    where p goes from MinThread to MaxThread. */\ntemplate<typename T, bool aligned, LoadStoreExpression E>\nvoid TestLoadAndStoreFences( const char* name ) {\n    typedef HammerLoadAndStoreFence<T, aligned, E> hammer_load_store_type;\n    typedef typename hammer_load_store_type::fam_type fam_type;\n    for( int p=MinThread<2 ? 2 : MinThread; p<=MaxThread; ++p ) {\n        fam_type * fam = new fam_type[p];\n        // Each of four trials exercise slightly different expression pattern within the test.\n        // See occurrences of COMPLICATED_ZERO for details.\n        for( int trial=0; trial<4; ++trial ) {\n            fam->message = (T)-1;\n            fam->flag = (T)-1;\n            NativeParallelFor( p, hammer_load_store_type( fam, 100, p, name, trial ) );\n            if ( !IsRelaxed(E) ) {\n                for( int k=0; k<p; ++k ) {\n                    ASSERT( fam[k].message==(k==0 ? (T)-1 : T(0)), \"incomplete round-robin?\" );\n                    ASSERT( fam[k].flag==(k==0 ? (T)-1 : T(0)), \"incomplete round-robin?\" );\n                }\n            }\n        }\n        delete[] fam;\n    }\n}\n\n//! Sparse set of values of integral type T.\n/** Set is designed so that if a value is read or written non-atomically,\n    the resulting intermediate value is likely to not be a member of the set. */\ntemplate<typename T>\nclass SparseValueSet {\n    T factor;\npublic:\n    SparseValueSet() {\n        // Compute factor such that:\n        // 1. It has at least one 1 in most of its bytes.\n        // 2. The bytes are typically different.\n        // 3. When multiplied by any value <=127, the product does not overflow.\n        factor = T(0);\n        for( unsigned i=0; i<sizeof(T)*8-7; i+=7 )\n            factor = T(factor | T(1)<<i);\n     }\n     //! Get ith member of set\n     T get( int i ) const {\n         // Create multiple of factor.  The & prevents overflow of the product.\n         return T((i&0x7F)*factor);\n     }\n     //! True if set contains x\n     bool contains( T x ) const {\n         // True if\n         return (x%factor)==0;\n     }\n};\n\n//! Specialization for pointer types.  The pointers are random and should not be dereferenced.\ntemplate<typename T>\nclass SparseValueSet<T*> {\n    SparseValueSet<ptrdiff_t> my_set;\npublic:\n    T* get( int i ) const {return reinterpret_cast<T*>(my_set.get(i));}\n    bool contains( T* x ) const {return my_set.contains(reinterpret_cast<ptrdiff_t>(x));}\n};\n\n//! Specialization for bool.\n/** Checking bool for atomic read/write is pointless in practice, because\n    there is no way to *not* atomically read or write a bool value. */\ntemplate<>\nclass SparseValueSet<bool> {\npublic:\n    bool get( int i ) const {return i&1;}\n    bool contains( bool ) const {return true;}\n};\n\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <limits> /* Need std::numeric_limits */\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif\n\n//! Commonality inherited by specializations for floating-point types.\ntemplate<typename T>\nclass SparseFloatSet: NoAssign {\n    const T epsilon;\npublic:\n    SparseFloatSet() : epsilon(std::numeric_limits<T>::epsilon()) {}\n    T get( int i ) const {\n        return i==0 ? T(0) : 1/T((i&0x7F)+1);\n    }\n    bool contains( T x ) const {\n        if( x==T(0) ) {\n            return true;\n        } else {\n            int j = int(1/x+T(0.5));\n            if( 0<j && j<=128 ) {\n                T error = x*T(j)-T(1);\n                // In the calculation above, if x was indeed generated by method get, the error should be\n                // at most epsilon, because x is off by at most 1/2 ulp from its infinitely precise value,\n                // j is exact, and the multiplication incurs at most another 1/2 ulp of round-off error.\n                if( -epsilon<=error && error<=epsilon ) {\n                    return true;\n                } else {\n                    REPORT(\"Warning: excessive floating-point error encountered j=%d x=%.15g error=%.15g\\n\",j,x,error);\n                }\n            }\n            return false;\n        }\n    };\n};\n\ntemplate<>\nclass SparseValueSet<float>: public SparseFloatSet<float> {};\n\ntemplate<>\nclass SparseValueSet<double>: public SparseFloatSet<double> {};\n\n#if __TBB_SCOPED_ENUM_PRESENT\n//! Commonality inherited by specializations for scoped enumerator types.\ntemplate<typename EnumType>\nclass SparseEnumValueSet {\npublic:\n    EnumType get( int i ) const {return i%3==0 ? EnumType::ScopedRed : i%3==1 ? EnumType::ScopedGreen : EnumType::ScopedBlue;}\n    bool contains( EnumType e ) const {return e==EnumType::ScopedRed || e==EnumType::ScopedGreen || e==EnumType::ScopedBlue;}\n};\ntemplate<>\nclass SparseValueSet<ScopedColor1> : public SparseEnumValueSet<ScopedColor1> {};\ntemplate<>\nclass SparseValueSet<ScopedColor2> : public SparseEnumValueSet<ScopedColor2> {};\n#endif\n\ntemplate<typename T, bool aligned>\nclass HammerAssignment: AlignedAtomic<T,aligned> {\n    tbb::atomic<T>& x;\n    const char* name;\n    SparseValueSet<T> set;\npublic:\n    HammerAssignment(const char* name_ ) : x(HammerAssignment::construct_atomic()), name(name_) {\n        x = set.get(0);\n    }\n    void operator()( int k ) const {\n        const int n = 1000000;\n        if( k ) {\n            tbb::atomic<T> z;\n            AssertSameType( z=x, z );    // Check that return type from assignment is correct\n            for( int i=0; i<n; ++i ) {\n                // Read x atomically into z.\n                z = x;\n                if( !set.contains(z) ) {\n                    REPORT(\"ERROR: assignment of atomic<%s> is not atomic\\n\", name);\n                    ParallelError = true;\n                    return;\n                }\n            }\n        } else {\n            tbb::atomic<T> y;\n            for( int i=0; i<n; ++i ) {\n                // Get pseudo-random value.\n                y = set.get(i);\n                // Write y atomically into x.\n                x = y;\n            }\n        }\n    }\n};\n\n// Compile-time check that a class method has the required signature.\n// Intended to check the assignment operator of tbb::atomic.\ntemplate<typename T> void TestAssignmentSignature( T& (T::*)(const T&) ) {}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( disable: 4355 4800 )\n#endif\n\ntemplate<typename T, bool aligned>\nvoid TestAssignment( const char* name ) {\n    TestAssignmentSignature( &tbb::atomic<T>::operator= );\n    NativeParallelFor( 2, HammerAssignment<T,aligned>(name ) );\n}\n\ntemplate <typename T, bool aligned, LoadStoreExpression E>\nclass DekkerArbitrationBody : NoAssign, Harness::NoAfterlife {\n    typedef LoadStoreTraits<T, E> trait;\n\n    mutable Harness::FastRandom my_rand;\n    static const unsigned short c_rand_ceil = 10;\n    mutable AlignedAtomic<T,aligned> s_ready_storage[2];\n    mutable AlignedAtomic<T,aligned> s_turn_storage;\n    mutable tbb::atomic<T>* s_ready[2];\n    tbb::atomic<T>& s_turn;\n    mutable volatile bool s_inside;\n\npublic:\n    void operator() ( int id ) const {\n        const int me = id;\n        const T other = (T)(uintptr_t)(1 - id),\n                cleared = T(0),\n                signaled = T(1);\n        for ( int i = 0; i < 100000; ++i ) {\n            trait::store( *s_ready[me], signaled );\n            trait::store( s_turn, other );\n            T r, t;\n            for ( int j = 0; ; ++j ) {\n                trait::load(r, *s_ready[(uintptr_t)other]);\n                trait::load(t, s_turn);\n                if ( r != signaled || t != other )\n                    break;\n                __TBB_Pause(1);\n                if ( j == 2<<12 ) {\n                    j = 0;\n                    __TBB_Yield();\n                }\n            }\n            // Entered critical section\n            ASSERT( !s_inside, \"Peterson lock is broken - some fences are missing\" );\n            s_inside = true;\n            unsigned short spin = my_rand.get() % c_rand_ceil;\n            for ( volatile int j = 0; j < spin; ++j )\n                continue;\n            s_inside = false;\n            ASSERT( !s_inside, \"Peterson lock is broken - some fences are missing\" );\n            // leaving critical section\n            trait::store( *s_ready[me], cleared );\n            spin = my_rand.get() % c_rand_ceil;\n            for ( volatile int j = 0; j < spin; ++j )\n                continue;\n        }\n    }\n\n    DekkerArbitrationBody ()\n        : my_rand((unsigned)(uintptr_t)this)\n        , s_turn(s_turn_storage.construct_atomic())\n        , s_inside (false)\n    {\n        //atomics pointed to by s_ready and s_turn will be zeroed by the\n        //according construct_atomic() calls\n         s_ready[0] = &s_ready_storage[0].construct_atomic();\n         s_ready[1] = &s_ready_storage[1].construct_atomic();\n    }\n};\n\ntemplate <typename T, bool aligned, LoadStoreExpression E>\nvoid TestDekkerArbitration () {\n    NativeParallelFor( 2, DekkerArbitrationBody<T,aligned, E>() );\n}\n\ntemplate<typename T>\nvoid TestParallel( const char* name ) {\n    //TODO: looks like there are no tests for operations other than load/store ?\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if (sizeof(T)==8){\n        TestLoadAndStoreFences<T, false, UseOperators>(name);\n        TestLoadAndStoreFences<T, false, UseImplicitAcqRel>(name);\n        TestLoadAndStoreFences<T, false, UseExplicitFullyFenced>(name);\n        TestLoadAndStoreFences<T, false, UseExplicitAcqRel>(name);\n        TestLoadAndStoreFences<T, false, UseExplicitRelaxed>(name);\n        TestLoadAndStoreFences<T, false, UseGlobalHelperFullyFenced>(name);\n        TestLoadAndStoreFences<T, false, UseGlobalHelperAcqRel>(name);\n        TestLoadAndStoreFences<T, false, UseGlobalHelperRelaxed>(name);\n        TestAssignment<T,false>(name);\n        TestDekkerArbitration<T, false, UseExplicitFullyFenced>();\n        TestDekkerArbitration<T, false, UseGlobalHelperFullyFenced>();\n    }\n#endif\n\n    TestLoadAndStoreFences<T, true, UseOperators>(name);\n    TestLoadAndStoreFences<T, true, UseImplicitAcqRel>(name);\n    TestLoadAndStoreFences<T, true, UseExplicitFullyFenced>(name);\n    TestLoadAndStoreFences<T, true, UseExplicitAcqRel>(name);\n    TestLoadAndStoreFences<T, true, UseExplicitRelaxed>(name);\n    TestLoadAndStoreFences<T, true, UseGlobalHelperFullyFenced>(name);\n    TestLoadAndStoreFences<T, true, UseGlobalHelperAcqRel>(name);\n    TestLoadAndStoreFences<T, true, UseGlobalHelperRelaxed>(name);\n    TestAssignment<T,true>(name);\n    TestDekkerArbitration<T, true, UseExplicitFullyFenced>();\n    TestDekkerArbitration<T, true, UseGlobalHelperFullyFenced>();\n}\n\n#endif // __TBB_TEST_SKIP_PIC_MODE || __TBB_TEST_SKIP_BUILTINS_MODE\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_blocked_range.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/blocked_range.h\"\n#include \"harness_assert.h\"\n\n// First test as much as we can without including other headers.\n// Doing so should catch problems arising from failing to include headers.\n\nclass AbstractValueType {\n    AbstractValueType() {}\n    int value;\npublic:\n    friend AbstractValueType MakeAbstractValueType( int i );\n    friend int GetValueOf( const AbstractValueType& v ) {return v.value;}\n};\n\nAbstractValueType MakeAbstractValueType( int i ) {\n    AbstractValueType x;\n    x.value = i;\n    return x;\n}\n\nstd::size_t operator-( const AbstractValueType& u, const AbstractValueType& v ) {\n    return GetValueOf(u) - GetValueOf(v);\n}\n\nbool operator<( const AbstractValueType& u, const AbstractValueType& v ) {\n    return GetValueOf(u) < GetValueOf(v);\n}\n\nAbstractValueType operator+( const AbstractValueType& u, std::size_t offset ) {\n    return MakeAbstractValueType(GetValueOf(u) + int(offset));\n}\n\nstatic void SerialTest() {\n    for( int x=-10; x<10; ++x )\n        for( int y=-10; y<10; ++y ) {\n            AbstractValueType i = MakeAbstractValueType(x);\n            AbstractValueType j = MakeAbstractValueType(y);\n            for( std::size_t k=1; k<10; ++k ) {\n                typedef tbb::blocked_range<AbstractValueType> range_type;\n                range_type r( i, j, k );\n                AssertSameType( r.empty(), true );\n                AssertSameType( range_type::size_type(), std::size_t() );\n                AssertSameType( static_cast<range_type::const_iterator*>(0), static_cast<AbstractValueType*>(0) );\n                AssertSameType( r.begin(), MakeAbstractValueType(0) );\n                AssertSameType( r.end(), MakeAbstractValueType(0) );\n                ASSERT( r.empty()==(y<=x), NULL );\n                ASSERT( r.grainsize()==k, NULL );\n                if( x<=y ) {\n                    AssertSameType( r.is_divisible(), true );\n                    ASSERT( r.is_divisible()==(std::size_t(y-x)>k), NULL );\n                    ASSERT( r.size()==std::size_t(y-x), NULL );\n                    if( r.is_divisible() ) {\n                        tbb::blocked_range<AbstractValueType> r2(r,tbb::split());\n                        ASSERT( GetValueOf(r.begin())==x, NULL );\n                        ASSERT( GetValueOf(r.end())==GetValueOf(r2.begin()), NULL );\n                        ASSERT( GetValueOf(r2.end())==y, NULL );\n                        ASSERT( r.grainsize()==k, NULL );\n                        ASSERT( r2.grainsize()==k, NULL );\n                    }\n                }\n            }\n        }\n}\n\n#include \"tbb/parallel_for.h\"\n#include \"harness.h\"\n\nconst int N = 1<<22;\n\nunsigned char Array[N];\n\nstruct Striker {\n    // Note: we use <int> here instead of <long> in order to test for Quad 407676\n    void operator()( const tbb::blocked_range<int>& r ) const {\n        for( tbb::blocked_range<int>::const_iterator i=r.begin(); i!=r.end(); ++i )\n            ++Array[i];\n    }\n};\n\nvoid ParallelTest() {\n    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {\n        const tbb::blocked_range<int> r( 0, i, 10 );\n        tbb::parallel_for( r, Striker() );\n        for( int k=0; k<N; ++k ) {\n            ASSERT( Array[k]==(k<i), NULL );\n            Array[k] = 0;\n        }\n    }\n}\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n#include \"test_range_based_for.h\"\n#include <functional>\nvoid TestRangeBasedFor() {\n    using namespace range_based_for_support_tests;\n    REMARK(\"testing range based for loop compatibility \\n\");\n\n    size_t int_array[100] = {0};\n    const size_t sequence_length = Harness::array_length(int_array);\n\n    for (size_t i = 0; i < sequence_length; ++i) {\n        int_array[i] = i + 1;\n    }\n\n    const tbb::blocked_range<size_t*> r(int_array, Harness::end(int_array), 1);\n\n    ASSERT(range_based_for_accumulate<size_t>(r, std::plus<size_t>(), size_t(0)) == gauss_summ_of_int_sequence(sequence_length), \"incorrect accumulated value generated via range based for ?\");\n}\n#endif //if __TBB_RANGE_BASED_FOR_PRESENT\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n\nvoid TestProportionalSplitOverflow()\n{\n    REMARK(\"Testing overflow during proportional split - \");\n    using tbb::blocked_range;\n    using tbb::proportional_split;\n\n    blocked_range<size_t> r1(0, size_t(-1) / 2);\n    size_t size = r1.size();\n    size_t begin = r1.begin();\n    size_t end = r1.end();\n\n    proportional_split p(1, 3);\n    blocked_range<size_t> r2(r1, p);\n\n    // overflow-free computation\n    size_t parts = p.left() + p.right();\n    size_t int_part = size / parts;\n    size_t fraction = size - int_part * parts; // fraction < parts\n    size_t right_idx = int_part * p.right() + fraction * p.right() / parts + 1;\n    size_t newRangeBegin = end - right_idx;\n\n    // Division in 'right_idx' very likely is inexact also.\n    size_t tolerance = 1;\n    size_t diff = (r2.begin() < newRangeBegin) ? (newRangeBegin - r2.begin()) : (r2.begin() - newRangeBegin);\n    bool is_split_correct = diff <= tolerance;\n    bool test_passed = (r1.begin() == begin && r1.end() == r2.begin() && is_split_correct &&\n                        r2.end() == end);\n    if (!test_passed) {\n        REPORT(\"Incorrect split of blocked range[%lu, %lu) into r1[%lu, %lu) and r2[%lu, %lu), \"\n               \"must be r1[%lu, %lu) and r2[%lu, %lu)\\n\", begin, end, r1.begin(), r1.end(), r2.begin(), r2.end(), begin, newRangeBegin, newRangeBegin, end);\n        ASSERT(test_passed, NULL);\n    }\n    REMARK(\"OK\\n\");\n}\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n//------------------------------------------------------------------------\n// Test driver\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    SerialTest();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        ParallelTest();\n    }\n\n    #if __TBB_RANGE_BASED_FOR_PRESENT\n        TestRangeBasedFor();\n    #endif //if __TBB_RANGE_BASED_FOR_PRESENT\n\n    #if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n        TestProportionalSplitOverflow();\n    #endif\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_blocked_range2d.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/blocked_range2d.h\"\n#include \"harness_assert.h\"\n\n// First test as much as we can without including other headers.\n// Doing so should catch problems arising from failing to include headers.\n\ntemplate<typename Tag>\nclass AbstractValueType {\n    AbstractValueType() {}\n    int value;\npublic:\n    template<typename OtherTag>\n    friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );\n\n    template<typename OtherTag>\n    friend int GetValueOf( const AbstractValueType<OtherTag>& v ) ;\n};\n\ntemplate<typename Tag>\nAbstractValueType<Tag> MakeAbstractValueType( int i ) {\n    AbstractValueType<Tag> x;\n    x.value = i;\n    return x;\n}\n\ntemplate<typename Tag>\nint GetValueOf( const AbstractValueType<Tag>& v ) {return v.value;}\n\ntemplate<typename Tag>\nbool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {\n    return GetValueOf(u)<GetValueOf(v);\n}\n\ntemplate<typename Tag>\nstd::size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {\n    return GetValueOf(u)-GetValueOf(v);\n}\n\ntemplate<typename Tag>\nAbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, std::size_t offset ) {\n    return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));\n}\n\nstruct RowTag {};\nstruct ColTag {};\n\nstatic void SerialTest() {\n    typedef AbstractValueType<RowTag> row_type;\n    typedef AbstractValueType<ColTag> col_type;\n    typedef tbb::blocked_range2d<row_type,col_type> range_type;\n    for( int row_x=-10; row_x<10; ++row_x ) {\n        for( int row_y=row_x; row_y<10; ++row_y ) {\n            row_type row_i = MakeAbstractValueType<RowTag>(row_x);\n            row_type row_j = MakeAbstractValueType<RowTag>(row_y);\n            for( int row_grain=1; row_grain<10; ++row_grain ) {\n                for( int col_x=-10; col_x<10; ++col_x ) {\n                    for( int col_y=col_x; col_y<10; ++col_y ) {\n                        col_type col_i = MakeAbstractValueType<ColTag>(col_x);\n                        col_type col_j = MakeAbstractValueType<ColTag>(col_y);\n                        for( int col_grain=1; col_grain<10; ++col_grain ) {\n                            range_type r( row_i, row_j, row_grain, col_i, col_j, col_grain );\n                            AssertSameType( r.is_divisible(), true );\n                            AssertSameType( r.empty(), true );\n                            AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );\n                            AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );\n                            AssertSameType( r.rows(), tbb::blocked_range<row_type>( row_i, row_j, 1 ));\n                            AssertSameType( r.cols(), tbb::blocked_range<col_type>( col_i, col_j, 1 ));\n                            ASSERT( r.empty()==(row_x==row_y||col_x==col_y), NULL );\n                            ASSERT( r.is_divisible()==(row_y-row_x>row_grain||col_y-col_x>col_grain), NULL );\n                            if( r.is_divisible() ) {\n                                range_type r2(r,tbb::split());\n                                if( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin()) ) {\n                                    ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );\n                                    ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );\n                                } else {\n                                    ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );\n                                    ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n#include \"tbb/parallel_for.h\"\n#include \"harness.h\"\n\nconst int N = 1<<10;\n\nunsigned char Array[N][N];\n\nstruct Striker {\n   // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676\n    void operator()( const tbb::blocked_range2d<int>& r ) const {\n        for( tbb::blocked_range<int>::const_iterator i=r.rows().begin(); i!=r.rows().end(); ++i )\n            for( tbb::blocked_range<int>::const_iterator j=r.cols().begin(); j!=r.cols().end(); ++j )\n                ++Array[i][j];\n    }\n};\n\nvoid ParallelTest() {\n    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {\n        for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {\n            const tbb::blocked_range2d<int> r( 0, i, 7, 0, j, 5 );\n            tbb::parallel_for( r, Striker() );\n            for( int k=0; k<N; ++k ) {\n                for( int l=0; l<N; ++l ) {\n                    ASSERT( Array[k][l]==(k<i && l<j), NULL );\n                    Array[k][l] = 0;\n                }\n            }\n        }\n    }\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    SerialTest();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        ParallelTest();\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_blocked_range3d.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/blocked_range3d.h\"\n#include \"harness_assert.h\"\n\n// First test as much as we can without including other headers.\n// Doing so should catch problems arising from failing to include headers.\n\ntemplate<typename Tag>\nclass AbstractValueType {\n    AbstractValueType() {}\n    int value;\npublic:\n    template<typename OtherTag>\n    friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );\n\n    template<typename OtherTag>\n    friend int GetValueOf( const AbstractValueType<OtherTag>& v ) ;\n};\n\ntemplate<typename Tag>\nAbstractValueType<Tag> MakeAbstractValueType( int i ) {\n    AbstractValueType<Tag> x;\n    x.value = i;\n    return x;\n}\n\ntemplate<typename Tag>\nint GetValueOf( const AbstractValueType<Tag>& v ) {return v.value;}\n\ntemplate<typename Tag>\nbool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {\n    return GetValueOf(u)<GetValueOf(v);\n}\n\ntemplate<typename Tag>\nstd::size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {\n    return GetValueOf(u)-GetValueOf(v);\n}\n\ntemplate<typename Tag>\nAbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, std::size_t offset ) {\n    return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));\n}\n\nstruct PageTag {};\nstruct RowTag {};\nstruct ColTag {};\n\nstatic void SerialTest() {\n    typedef AbstractValueType<PageTag> page_type;\n    typedef AbstractValueType<RowTag> row_type;\n    typedef AbstractValueType<ColTag> col_type;\n    typedef tbb::blocked_range3d<page_type,row_type,col_type> range_type;\n    for( int page_x=-4; page_x<4; ++page_x ) {\n        for( int page_y=page_x; page_y<4; ++page_y ) {\n            page_type page_i = MakeAbstractValueType<PageTag>(page_x);\n            page_type page_j = MakeAbstractValueType<PageTag>(page_y);\n            for( int page_grain=1; page_grain<4; ++page_grain ) {\n                for( int row_x=-4; row_x<4; ++row_x ) {\n                    for( int row_y=row_x; row_y<4; ++row_y ) {\n                        row_type row_i = MakeAbstractValueType<RowTag>(row_x);\n                        row_type row_j = MakeAbstractValueType<RowTag>(row_y);\n                        for( int row_grain=1; row_grain<4; ++row_grain ) {\n                            for( int col_x=-4; col_x<4; ++col_x ) {\n                                for( int col_y=col_x; col_y<4; ++col_y ) {\n                                    col_type col_i = MakeAbstractValueType<ColTag>(col_x);\n                                    col_type col_j = MakeAbstractValueType<ColTag>(col_y);\n                                    for( int col_grain=1; col_grain<4; ++col_grain ) {\n                                        range_type r( page_i, page_j, page_grain, row_i, row_j, row_grain, col_i, col_j, col_grain );\n                                        AssertSameType( r.is_divisible(), true );\n\n                                        AssertSameType( r.empty(), true );\n\n                                        AssertSameType( static_cast<range_type::page_range_type::const_iterator*>(0), static_cast<page_type*>(0) );\n                                        AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );\n                                        AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );\n\n                                        AssertSameType( r.pages(), tbb::blocked_range<page_type>( page_i, page_j, 1 ));\n                                        AssertSameType( r.rows(), tbb::blocked_range<row_type>( row_i, row_j, 1 ));\n                                        AssertSameType( r.cols(), tbb::blocked_range<col_type>( col_i, col_j, 1 ));\n\n                                        ASSERT( r.empty()==(page_x==page_y||row_x==row_y||col_x==col_y), NULL );\n\n                                        ASSERT( r.is_divisible()==(page_y-page_x>page_grain||row_y-row_x>row_grain||col_y-col_x>col_grain), NULL );\n\n                                        if( r.is_divisible() ) {\n                                            range_type r2(r,tbb::split());\n                                            if( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin())) ) {\n                                                ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );\n                                                ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );\n                                                ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );\n                                            } else {\n                                                if ( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.cols().begin())==GetValueOf(r.cols().begin())) ) {\n                                                    ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );\n                                                    ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );\n                                                    ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );\n                                                } else {\n                                                   ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );\n                                                   ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );\n                                                   ASSERT( GetValueOf(r2.pages().begin())==GetValueOf(r.pages().end()), NULL );\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n#include \"tbb/parallel_for.h\"\n#include \"harness.h\"\n\nconst int N = 1<<5;\n\nunsigned char Array[N][N][N];\n\nstruct Striker {\n   // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676\n    void operator()( const tbb::blocked_range3d<int>& r ) const {\n        for( tbb::blocked_range<int>::const_iterator i=r.pages().begin(); i!=r.pages().end(); ++i )\n            for( tbb::blocked_range<int>::const_iterator j=r.rows().begin(); j!=r.rows().end(); ++j )\n                for( tbb::blocked_range<int>::const_iterator k=r.cols().begin(); k!=r.cols().end(); ++k )\n                    ++Array[i][j][k];\n    }\n};\n\nvoid ParallelTest() {\n    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {\n        for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {\n            for( int k=0; k<N; k=k<3 ? k+1 : k*3 ) {\n                const tbb::blocked_range3d<int> r( 0, i, 5, 0, j, 3, 0, k, 1 );\n                tbb::parallel_for( r, Striker() );\n                for( int l=0; l<N; ++l ) {\n                    for( int m=0; m<N; ++m ) {\n                        for( int n=0; n<N; ++n ) {\n                             ASSERT( Array[l][m][n]==(l<i && m<j && n<k), NULL );\n                             Array[l][m][n] = 0;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    SerialTest();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        ParallelTest();\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_blocked_rangeNd.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_BLOCKED_RANGE_ND 1\n#include \"tbb/blocked_rangeNd.h\"\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT\n// AbstractValueType class represents Value concept's requirements in the most abstract way\nclass AbstractValueType {\n    int value;\n    AbstractValueType() {}\npublic:\n    friend AbstractValueType MakeAbstractValue(int i);\n    friend int GetValueOf(const AbstractValueType& v);\n};\n\nint GetValueOf(const AbstractValueType& v) { return v.value; }\n\nAbstractValueType MakeAbstractValue(int i) {\n    AbstractValueType x;\n    x.value = i;\n    return x;\n}\n\n// operator- returns amount of elements of AbstractValueType between u and v\nstd::size_t operator-(const AbstractValueType& u, const AbstractValueType& v) {\n    return GetValueOf(u) - GetValueOf(v);\n}\n\nbool operator<(const AbstractValueType& u, const AbstractValueType& v) {\n    return GetValueOf(u) < GetValueOf(v);\n}\n\nAbstractValueType operator+(const AbstractValueType& u, std::size_t offset) {\n    return MakeAbstractValue(GetValueOf(u) + int(offset));\n}\n\n#include \"harness_assert.h\"\n#include <algorithm> // std::for_each\n#include <array>\n\nnamespace internal {\n    template<typename range_t, unsigned int N>\n    struct utils {\n        using val_t = typename range_t::value_type;\n\n        template<typename EntityType, std::size_t DimSize>\n        using data_type = std::array<typename utils<range_t, N - 1>::template data_type<EntityType, DimSize>, DimSize>;\n\n        template<typename EntityType, std::size_t DimSize>\n        static void init_data(data_type<EntityType, DimSize>& data) {\n            std::for_each(data.begin(), data.end(), utils<range_t, N - 1>::template init_data<EntityType, DimSize>);\n        }\n\n        template<typename EntityType, std::size_t DimSize>\n        static void increment_data(const range_t& range, data_type<EntityType, DimSize>& data) {\n            auto begin = data.begin() + range.dim(N - 1).begin();\n            // same as \"auto end = out.begin() + range.dim(N - 1).end();\"\n            auto end = begin + range.dim(N - 1).size();\n            for (auto i = begin; i != end; ++i) {\n                utils<range_t, N - 1>::template increment_data<EntityType, DimSize>(range, *i);\n            }\n        }\n\n        template<typename EntityType, std::size_t DimSize>\n        static void check_data(const range_t& range, data_type<EntityType, DimSize>& data) {\n            auto begin = data.begin() + range.dim(N - 1).begin();\n            // same as \"auto end = out.begin() + range.dim(N - 1).end();\"\n            auto end = begin + range.dim(N - 1).size();\n            for (auto i = begin; i != end; ++i) {\n                utils<range_t, N - 1>::template check_data<EntityType, DimSize>(range, *i);\n            }\n        }\n\n        template<typename input_t, std::size_t... Is>\n        static range_t make_range(std::size_t shift, bool negative, val_t(*gen)(input_t), tbb::internal::index_sequence<Is...>) {\n            return range_t( { {\n                    /*    begin =*/gen(negative ? -input_t(Is + shift) : 0),\n                    /*      end =*/gen(input_t(Is + shift)),\n                    /*grainsize =*/Is + 1}\n                    /*pack expansion*/... } );\n        }\n\n        static bool is_empty(const range_t& range) {\n            if (range.dim(N - 1).empty()) { return true; }\n            return utils<range_t, N - 1>::is_empty(range);\n        }\n\n        static bool is_divisible(const range_t& range) {\n            if (range.dim(N - 1).is_divisible()) { return true; }\n            return utils<range_t, N - 1>::is_divisible(range);\n        }\n\n        static void check_splitting(const range_t& range_split, const range_t& range_new, int(*get)(const val_t&), bool split_checker = false) {\n            if (get(range_split.dim(N - 1).begin()) == get(range_new.dim(N - 1).begin())) {\n                ASSERT(get(range_split.dim(N - 1).end()) == get(range_new.dim(N - 1).end()), NULL);\n            }\n            else {\n                ASSERT(get(range_split.dim(N - 1).end()) == get(range_new.dim(N - 1).begin()) && !split_checker, NULL);\n                split_checker = true;\n            }\n            utils<range_t, N - 1>::check_splitting(range_split, range_new, get, split_checker);\n        }\n\n    };\n\n    template<typename range_t>\n    struct utils<range_t, 0> {\n        using val_t = typename range_t::value_type;\n\n        template<typename EntityType, std::size_t DimSize>\n        using data_type = EntityType;\n\n        template<typename EntityType, std::size_t DimSize>\n        static void init_data(data_type<EntityType, DimSize>& data) { data = 0; }\n\n        template<typename EntityType, std::size_t DimSize>\n        static void increment_data(const range_t&, data_type<EntityType, DimSize>& data) { ++data; }\n\n        template<typename EntityType, std::size_t DimSize>\n        static void check_data(const range_t&, data_type<EntityType, DimSize>& data) {\n            ASSERT(data == 1, NULL);\n        }\n\n        static bool is_empty(const range_t&) { return false; }\n\n        static bool is_divisible(const range_t&) { return false; }\n\n        static void check_splitting(const range_t&, const range_t&, int(*)(const val_t&), bool) {}\n    };\n\n    // We need MakeInt function to pass it into make_range as factory function\n    // because of matching make_range with AbstractValueType and other types too\n    int MakeInt(int i) { return i; }\n}\n\ntemplate<unsigned int DimAmount>\nvoid SerialTest() {\n    __TBB_STATIC_ASSERT((tbb::blocked_rangeNd<int, DimAmount>::ndims()\n                         == tbb::blocked_rangeNd<AbstractValueType, DimAmount>::ndims()),\n                         \"different amount of dimensions\");\n\n    using range_t = tbb::blocked_rangeNd<AbstractValueType, DimAmount>;\n    // 'typedef' instead of 'using' because of GCC 4.7.2 bug on Debian 7.0\n    typedef internal::utils<range_t, DimAmount> utils;\n\n    // Generate empty range\n    range_t r = utils::make_range(0, true, &MakeAbstractValue, tbb::internal::make_index_sequence<DimAmount>());\n\n    AssertSameType(r.is_divisible(), bool());\n    AssertSameType(r.empty(), bool());\n    AssertSameType(range_t::ndims(), 0U);\n\n    ASSERT(r.empty() == utils::is_empty(r) && r.empty(), NULL);\n    ASSERT(r.is_divisible() == utils::is_divisible(r), NULL);\n\n    // Generate not-empty range divisible range\n    r = utils::make_range(1, true, &MakeAbstractValue, tbb::internal::make_index_sequence<DimAmount>());\n    ASSERT(r.empty() == utils::is_empty(r) && !r.empty(), NULL);\n    ASSERT(r.is_divisible() == utils::is_divisible(r) && r.is_divisible(), NULL);\n\n    range_t r_new(r, tbb::split());\n    utils::check_splitting(r, r_new, &GetValueOf);\n\n    SerialTest<DimAmount - 1>();\n}\ntemplate<> void SerialTest<0>() {}\n\n#include \"tbb/parallel_for.h\"\n\ntemplate<unsigned int DimAmount>\nvoid ParallelTest() {\n    using range_t = tbb::blocked_rangeNd<int, DimAmount>;\n    // 'typedef' instead of 'using' because of GCC 4.7.2 bug on Debian 7.0\n    typedef internal::utils<range_t, DimAmount>  utils;\n\n    // Max size is                                 1 << 20 - 1 bytes\n    // Thus size of one dimension's elements is    1 << (20 / DimAmount - 1) bytes\n    typename utils::template data_type<unsigned char, 1 << (20 / DimAmount - 1)> data;\n    utils::init_data(data);\n\n    range_t r = utils::make_range((1 << (20 / DimAmount - 1)) - DimAmount, false, &internal::MakeInt, tbb::internal::make_index_sequence<DimAmount>());\n\n    tbb::parallel_for(r, [&data](const range_t& range) {\n        utils::increment_data(range, data);\n    });\n\n    utils::check_data(r, data);\n\n    ParallelTest<DimAmount - 1>();\n}\ntemplate<> void ParallelTest<0>() {}\n\nvoid TestCtors() {\n    tbb::blocked_rangeNd<int, 1>{ { 0,13,3 } };\n\n    tbb::blocked_rangeNd<int, 1>{ tbb::blocked_range<int>{ 0,13,3 } };\n\n    tbb::blocked_rangeNd<int, 2>(tbb::blocked_range<int>(-8923, 8884, 13), tbb::blocked_range<int>(-8923, 5, 13));\n\n    tbb::blocked_rangeNd<int, 2>({ -8923, 8884, 13 }, { -8923, 8884, 13 });\n\n    tbb::blocked_range<int> r1(0, 13);\n\n    tbb::blocked_range<int> r2(-12, 23);\n\n    tbb::blocked_rangeNd<int, 2>({ { -8923, 8884, 13 }, r1});\n\n    tbb::blocked_rangeNd<int, 2>({ r2, r1 });\n\n    tbb::blocked_rangeNd<int, 2>(r1, r2);\n\n    tbb::blocked_rangeNd<AbstractValueType, 4>({ MakeAbstractValue(-3), MakeAbstractValue(13), 8 },\n                                               { MakeAbstractValue(-53), MakeAbstractValue(23), 2 },\n                                               { MakeAbstractValue(-23), MakeAbstractValue(33), 1 },\n                                               { MakeAbstractValue(-13), MakeAbstractValue(43), 7 });\n}\n\nstatic const std::size_t N = 4;\n\n#include \"harness.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain() {\n    TestCtors();\n    SerialTest<N>();\n    for( int p=MinThread; p<= MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        ParallelTest<N>();\n    }\n    return Harness::Done;\n}\n\n#else\n\n// tbb::blocked_rangeNd requires C++11 support\n#define HARNESS_SKIP_TEST 1\n#include \"harness.h\"\n\n#endif /* __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_broadcast_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task.h\"\n\n#include \"tbb/atomic.h\"\n\nconst int N = 1000;\nconst int R = 4;\n\nclass int_convertable_type : private NoAssign {\n\n   int my_value;\n\npublic:\n\n   int_convertable_type( int v ) : my_value(v) {}\n   operator int() const { return my_value; }\n\n};\n\n\ntemplate< typename T >\nclass counting_array_receiver : public tbb::flow::receiver<T> {\n\n    tbb::atomic<size_t> my_counters[N];\n    tbb::flow::graph& my_graph;\n\npublic:\n\n    counting_array_receiver(tbb::flow::graph& g) : my_graph(g) {\n        for (int i = 0; i < N; ++i )\n           my_counters[i] = 0;\n    }\n\n    size_t operator[]( int i ) {\n        size_t v = my_counters[i];\n        return v;\n    }\n\n    tbb::task * try_put_task( const T &v ) __TBB_override {\n        ++my_counters[(int)v];\n        return const_cast<tbb::task *>(tbb::flow::internal::SUCCESSFULLY_ENQUEUED);\n    }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    built_predecessors_type mbp;\n    built_predecessors_type &built_predecessors() __TBB_override { return mbp; }\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n    void internal_add_built_predecessor(predecessor_type &) __TBB_override {}\n    void internal_delete_built_predecessor(predecessor_type &) __TBB_override {}\n    void copy_predecessors(predecessor_list_type &) __TBB_override {}\n    size_t predecessor_count() __TBB_override { return 0; }\n#endif\n    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override { }\n\n};\n\ntemplate< typename T >\nvoid test_serial_broadcasts() {\n\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<T> b(g);\n\n    for ( int num_receivers = 1; num_receivers < R; ++num_receivers ) {\n        std::vector< counting_array_receiver<T> > receivers(num_receivers, counting_array_receiver<T>(g));\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(b.successor_count() == 0, NULL);\n        ASSERT(b.predecessor_count() == 0, NULL);\n        typename tbb::flow::broadcast_node<T>::successor_list_type my_succs;\n        b.copy_successors(my_succs);\n        ASSERT(my_succs.size() == 0, NULL);\n        typename tbb::flow::broadcast_node<T>::predecessor_list_type my_preds;\n        b.copy_predecessors(my_preds);\n        ASSERT(my_preds.size() == 0, NULL);\n#endif\n\n        for ( int r = 0; r < num_receivers; ++r ) {\n            tbb::flow::make_edge( b, receivers[r] );\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT( b.successor_count() == (size_t)num_receivers, NULL);\n#endif\n\n        for (int n = 0; n < N; ++n ) {\n            ASSERT( b.try_put( (T)n ), NULL );\n        }\n\n        for ( int r = 0; r < num_receivers; ++r ) {\n            for (int n = 0; n < N; ++n ) {\n                ASSERT( receivers[r][n] == 1, NULL );\n            }\n            tbb::flow::remove_edge( b, receivers[r] );\n        }\n        ASSERT( b.try_put( (T)0 ), NULL );\n        for ( int r = 0; r < num_receivers; ++r )\n            ASSERT( receivers[0][0] == 1, NULL );\n    }\n\n}\n\ntemplate< typename T >\nclass native_body : private NoAssign {\n\n    tbb::flow::broadcast_node<T> &my_b;\n\npublic:\n\n    native_body( tbb::flow::broadcast_node<T> &b ) : my_b(b) {}\n\n    void operator()(int) const {\n        for (int n = 0; n < N; ++n ) {\n            ASSERT( my_b.try_put( (T)n ), NULL );\n        }\n    }\n\n};\n\ntemplate< typename T >\nvoid run_parallel_broadcasts(tbb::flow::graph& g, int p, tbb::flow::broadcast_node<T>& b) {\n    for ( int num_receivers = 1; num_receivers < R; ++num_receivers ) {\n        std::vector< counting_array_receiver<T> > receivers(num_receivers, counting_array_receiver<T>(g));\n\n        for ( int r = 0; r < num_receivers; ++r ) {\n            tbb::flow::make_edge( b, receivers[r] );\n        }\n\n        NativeParallelFor( p, native_body<T>( b ) );\n\n        for ( int r = 0; r < num_receivers; ++r ) {\n            for (int n = 0; n < N; ++n ) {\n                ASSERT( (int)receivers[r][n] == p, NULL );\n            }\n            tbb::flow::remove_edge( b, receivers[r] );\n        }\n        ASSERT( b.try_put( (T)0 ), NULL );\n        for ( int r = 0; r < num_receivers; ++r )\n            ASSERT( (int)receivers[r][0] == p, NULL );\n    }\n}\n\ntemplate< typename T >\nvoid test_parallel_broadcasts(int p) {\n\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<T> b(g);\n    run_parallel_broadcasts(g, p, b);\n\n    // test copy constructor\n    tbb::flow::broadcast_node<T> b_copy(b);\n    run_parallel_broadcasts(g, p, b_copy);\n}\n\n// broadcast_node does not allow successors to try_get from it (it does not allow\n// the flow edge to switch) so we only need test the forward direction.\ntemplate<typename T>\nvoid test_resets() {\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<T> b0(g);\n    tbb::flow::broadcast_node<T> b1(g);\n    tbb::flow::queue_node<T> q0(g);\n    tbb::flow::make_edge(b0,b1);\n    tbb::flow::make_edge(b1,q0);\n    T j;\n\n    // test standard reset\n    for(int testNo = 0; testNo < 2; ++testNo) {\n        for(T i= 0; i <= 3; i += 1) {\n            b0.try_put(i);\n        }\n        g.wait_for_all();\n        for(T i= 0; i <= 3; i += 1) {\n            ASSERT(q0.try_get(j) && j == i, \"Bad value in queue\");\n        }\n        ASSERT(!q0.try_get(j), \"extra value in queue\");\n\n        // reset the graph.  It should work as before.\n        if (testNo == 0) g.reset();\n    }\n\n    g.reset(tbb::flow::rf_clear_edges);\n    for(T i= 0; i <= 3; i += 1) {\n        b0.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT(!q0.try_get(j), \"edge between nodes not removed\");\n    for(T i= 0; i <= 3; i += 1) {\n        b1.try_put(i);\n    }\n    g.wait_for_all();\n    ASSERT(!q0.try_get(j), \"edge between nodes not removed\");\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nvoid test_extract() {\n    int dont_care;\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<int> b0(g);\n    tbb::flow::broadcast_node<int> b1(g);\n    tbb::flow::broadcast_node<int> b2(g);\n    tbb::flow::broadcast_node<int> b3(g);\n    tbb::flow::broadcast_node<int> b4(g);\n    tbb::flow::broadcast_node<int> b5(g);\n    tbb::flow::queue_node<int> q0(g);\n    tbb::flow::make_edge(b0,b1);\n    tbb::flow::make_edge(b0,b2);\n    tbb::flow::make_edge(b1,b3);\n    tbb::flow::make_edge(b1,b4);\n    tbb::flow::make_edge(b2,b4);\n    tbb::flow::make_edge(b2,b5);\n    tbb::flow::make_edge(b3,q0);\n    tbb::flow::make_edge(b4,q0);\n    tbb::flow::make_edge(b5,q0);\n\n    /*          b3       */\n    /*         /  \\      */\n    /*        b1   \\     */\n    /*       / \\    \\    */\n    /*     b0   b4---q0  */\n    /*       \\ /    /    */\n    /*        b2   /     */\n    /*         \\  /      */\n    /*          b5       */\n\n    g.wait_for_all();\n    b0.try_put(1);\n    g.wait_for_all();\n    for( int i = 0; i < 4; ++i ) {\n        int j;\n        ASSERT(q0.try_get(j) && j == 1, \"missing or incorrect message\");\n    }\n    ASSERT(!q0.try_get(dont_care), \"extra message in queue\");\n    ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 2, \"improper count for b0\");\n    ASSERT(b1.predecessor_count() == 1 && b1.successor_count() == 2, \"improper count for b1\");\n    ASSERT(b2.predecessor_count() == 1 && b2.successor_count() == 2, \"improper count for b2\");\n    ASSERT(b3.predecessor_count() == 1 && b3.successor_count() == 1, \"improper count for b3\");\n    ASSERT(b4.predecessor_count() == 2 && b4.successor_count() == 1, \"improper count before extract of b4\");\n    ASSERT(b5.predecessor_count() == 1 && b5.successor_count() == 1, \"improper count for b5\");\n    b4.extract();  // remove from tree of nodes.\n    ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 2, \"improper count for b0 after\");\n    ASSERT(b1.predecessor_count() == 1 && b1.successor_count() == 1, \"improper succ count for b1 after\");\n    ASSERT(b2.predecessor_count() == 1 && b2.successor_count() == 1, \"improper succ count for b2 after\");\n    ASSERT(b3.predecessor_count() == 1 && b3.successor_count() == 1, \"improper succ count for b3 after\");\n    ASSERT(b4.predecessor_count() == 0 && b4.successor_count() == 0, \"improper succ count after extract\");\n    ASSERT(b5.predecessor_count() == 1 && b5.successor_count() == 1, \"improper succ count for b5 after\");\n\n    /*          b3       */\n    /*         /  \\      */\n    /*        b1   \\     */\n    /*       /      \\    */\n    /*     b0        q0  */\n    /*       \\      /    */\n    /*        b2   /     */\n    /*         \\  /      */\n    /*          b5       */\n\n    b0.try_put(1);\n    g.wait_for_all();\n    for( int i = 0; i < 2; ++i ) {\n        int j;\n        ASSERT(q0.try_get(j) && j == 1, \"missing or incorrect message\");\n    }\n    ASSERT(!q0.try_get(dont_care), \"extra message in queue\");\n    tbb::flow::make_edge(b0,b4);\n    tbb::flow::make_edge(b4,q0);\n    g.wait_for_all();\n    ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 3, \"improper count for b0 after\");\n    ASSERT(b1.predecessor_count() == 1 && b1.successor_count() == 1, \"improper succ count for b1 after\");\n    ASSERT(b2.predecessor_count() == 1 && b2.successor_count() == 1, \"improper succ count for b2 after\");\n    ASSERT(b3.predecessor_count() == 1 && b3.successor_count() == 1, \"improper succ count for b3 after\");\n    ASSERT(b4.predecessor_count() == 1 && b4.successor_count() == 1, \"improper succ count after extract\");\n    ASSERT(b5.predecessor_count() == 1 && b5.successor_count() == 1, \"improper succ count for b5 after\");\n\n    /*          b3       */\n    /*         /  \\      */\n    /*        b1   \\     */\n    /*       /      \\    */\n    /*     b0---b4---q0  */\n    /*       \\      /    */\n    /*        b2   /     */\n    /*         \\  /      */\n    /*          b5       */\n\n    b0.try_put(1);\n    g.wait_for_all();\n    for( int i = 0; i < 3; ++i ) {\n        int j;\n        ASSERT(q0.try_get(j) && j == 1, \"missing or incorrect message\");\n    }\n    ASSERT(!q0.try_get(dont_care), \"extra message in queue\");\n}\n#endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n\n   test_serial_broadcasts<int>();\n   test_serial_broadcasts<float>();\n   test_serial_broadcasts<int_convertable_type>();\n\n   for( int p=MinThread; p<=MaxThread; ++p ) {\n       test_parallel_broadcasts<int>(p);\n       test_parallel_broadcasts<float>(p);\n       test_parallel_broadcasts<int_convertable_type>(p);\n   }\n\n   test_resets<int>();\n   test_resets<float>();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n   test_extract();\n#endif\n\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_buffer_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness_graph.h\"\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#include <vector>\n#include <algorithm>\n#endif\n\n#define N 1000\n#define C 10\n\ntemplate< typename T >\nvoid spin_try_get( tbb::flow::buffer_node<T> &b, T &value ) {\n    while ( b.try_get(value) != true ) {}\n}\n\ntemplate< typename T >\nvoid check_item( T* count_value, T &value ) {\n    count_value[value / N] += value % N;\n}\n\ntemplate< typename T >\nstruct parallel_puts : NoAssign {\n\n    tbb::flow::buffer_node<T> &my_b;\n\n    parallel_puts( tbb::flow::buffer_node<T> &b ) : my_b(b) {}\n\n    void operator()(int i) const {\n        for (int j = 0; j < N; ++j) {\n            bool msg = my_b.try_put( T(N*i + j) );\n            ASSERT( msg == true, NULL );\n        }\n    }\n};\n\ntemplate< typename T >\nstruct touches {\n\n    bool **my_touches;\n    int my_num_threads;\n\n    touches( int num_threads ) : my_num_threads(num_threads) {\n        my_touches = new bool* [my_num_threads];\n        for ( int p = 0; p < my_num_threads; ++p) {\n            my_touches[p] = new bool[N];\n            for ( int n = 0; n < N; ++n)\n                my_touches[p][n] = false;\n        }\n    }\n\n    ~touches() {\n        for ( int p = 0; p < my_num_threads; ++p) {\n            delete [] my_touches[p];\n        }\n        delete [] my_touches;\n    }\n\n    bool check( T v ) {\n        ASSERT ( my_touches[v/N][v%N] == false, NULL);\n        my_touches[v/N][v%N] = true;\n        return true;\n    }\n\n    bool validate_touches() {\n        for ( int p = 0; p < my_num_threads; ++p) {\n            for ( int n = 0; n < N; ++n) {\n                ASSERT ( my_touches[p][n] == true, NULL);\n            }\n        }\n        return true;\n    }\n};\n\ntemplate< typename T >\nstruct parallel_gets : NoAssign {\n\n    tbb::flow::buffer_node<T> &my_b;\n    touches<T> &my_touches;\n\n    parallel_gets( tbb::flow::buffer_node<T> &b, touches<T> &t) : my_b(b), my_touches(t) {}\n\n    void operator()(int) const {\n        for (int j = 0; j < N; ++j) {\n            T v;\n            spin_try_get( my_b, v );\n            my_touches.check( v );\n        }\n    }\n\n};\n\ntemplate< typename T >\nstruct parallel_put_get : NoAssign {\n\n    tbb::flow::buffer_node<T> &my_b;\n    touches<T> &my_touches;\n\n    parallel_put_get( tbb::flow::buffer_node<T> &b, touches<T> &t ) : my_b(b), my_touches(t) {}\n\n    void operator()(int tid) const {\n\n        for ( int i = 0; i < N; i+=C ) {\n            int j_end = ( N < i + C ) ? N : i + C;\n            // dump about C values into the buffer\n            for ( int j = i; j < j_end; ++j ) {\n                ASSERT( my_b.try_put( T (N*tid + j ) ) == true, NULL );\n            }\n            // receiver about C values from the buffer\n            for ( int j = i; j < j_end; ++j ) {\n                T v;\n                spin_try_get( my_b, v );\n                my_touches.check( v );\n            }\n        }\n    }\n\n};\n\n//\n// Tests\n//\n// Item can be reserved, released, consumed ( single serial receiver )\n//\ntemplate< typename T >\nint test_reservation() {\n    tbb::flow::graph g;\n    T bogus_value(-1);\n\n    // Simple tests\n    tbb::flow::buffer_node<T> b(g);\n\n    b.try_put(T(1));\n    b.try_put(T(2));\n    b.try_put(T(3));\n\n    T v, vsum;\n    ASSERT( b.try_reserve(v) == true, NULL );\n    ASSERT( b.try_release() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_reserve(v) == true, NULL );\n    ASSERT( b.try_consume() == true, NULL );\n    vsum += v;\n    v = bogus_value;\n    g.wait_for_all();\n\n    ASSERT( b.try_get(v) == true, NULL );\n    vsum += v;\n    v = bogus_value;\n    g.wait_for_all();\n\n    ASSERT( b.try_reserve(v) == true, NULL );\n    ASSERT( b.try_release() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_reserve(v) == true, NULL );\n    ASSERT( b.try_consume() == true, NULL );\n    vsum += v;\n    ASSERT( vsum == T(6), NULL);\n    v = bogus_value;\n    g.wait_for_all();\n\n    return 0;\n}\n\n//\n// Tests\n//\n// multilpe parallel senders, items in arbitrary order\n// multilpe parallel senders, multiple parallel receivers, items in arbitrary order and all items received\n//   * overlapped puts / gets\n//   * all puts finished before any getS\n//\ntemplate< typename T >\nint test_parallel(int num_threads) {\n    tbb::flow::graph g;\n    tbb::flow::buffer_node<T> b(g);\n    tbb::flow::buffer_node<T> b2(g);\n    tbb::flow::buffer_node<T> b3(g);\n    T bogus_value(-1);\n    T j = bogus_value;\n\n    NativeParallelFor( num_threads, parallel_puts<T>(b) );\n\n    T *next_value = new T[num_threads];\n    for (int tid = 0; tid < num_threads; ++tid) next_value[tid] = T(0);\n\n    for (int i = 0; i < num_threads * N; ++i ) {\n        spin_try_get( b, j );\n        check_item( next_value, j );\n        j = bogus_value;\n    }\n    for (int tid = 0; tid < num_threads; ++tid)  {\n        ASSERT( next_value[tid] == T((N*(N-1))/2), NULL );\n    }\n\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    NativeParallelFor( num_threads, parallel_puts<T>(b) );\n\n    {\n        touches< T > t( num_threads );\n        NativeParallelFor( num_threads, parallel_gets<T>(b, t) );\n        g.wait_for_all();\n        ASSERT( t.validate_touches(), NULL );\n    }\n    j = bogus_value;\n    ASSERT( b.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    g.wait_for_all();\n    {\n        touches< T > t( num_threads );\n        NativeParallelFor( num_threads, parallel_put_get<T>(b, t) );\n        g.wait_for_all();\n        ASSERT( t.validate_touches(), NULL );\n    }\n    j = bogus_value;\n    ASSERT( b.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::make_edge( b, b2 );\n    tbb::flow::make_edge( b2, b3 );\n\n    NativeParallelFor( num_threads, parallel_puts<T>(b) );\n    {\n        touches< T > t( num_threads );\n        NativeParallelFor( num_threads, parallel_gets<T>(b3, t) );\n        g.wait_for_all();\n        ASSERT( t.validate_touches(), NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b2.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    // test copy constructor\n    ASSERT( b.remove_successor( b2 ), NULL );\n    // fill up b:\n    NativeParallelFor( num_threads, parallel_puts<T>(b) );\n    // copy b:\n    tbb::flow::buffer_node<T> b_copy(b);\n\n    // b_copy should be empty\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b_copy.try_get( j ) == false, NULL );\n\n    // hook them together:\n    ASSERT( b.register_successor(b_copy) == true, NULL );\n    // try to get content from b_copy\n    {\n        touches< T > t( num_threads );\n        NativeParallelFor( num_threads, parallel_gets<T>(b_copy, t) );\n        g.wait_for_all();\n        ASSERT( t.validate_touches(), NULL );\n    }\n    // now both should be empty\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b_copy.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    delete [] next_value;\n    return 0;\n}\n\n//\n// Tests\n//\n// Predecessors cannot be registered\n// Empty buffer rejects item requests\n// Single serial sender, items in arbitrary order\n// Chained buffers ( 2 & 3 ), single sender, items at last buffer in arbitrary order\n//\n\ntemplate< typename T >\nint test_serial() {\n    tbb::flow::graph g;\n    T bogus_value(-1);\n\n    tbb::flow::buffer_node<T> b(g);\n    tbb::flow::buffer_node<T> b2(g);\n    T j = bogus_value;\n\n    //\n    // Rejects attempts to add / remove predecessor\n    // Rejects request from empty buffer\n    //\n    ASSERT( b.register_predecessor( b2 ) == false, NULL );\n    ASSERT( b.remove_predecessor( b2 ) == false, NULL );\n    ASSERT( b.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    //\n    // Simple puts and gets\n    //\n\n    for (int i = 0; i < N; ++i) {\n        bool msg = b.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    T vsum = T(0);\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        spin_try_get( b, j );\n        vsum += j;\n    }\n    ASSERT( vsum == (N*(N-1))/2, NULL);\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::make_edge(b, b2);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT( b.successor_count() == 1, NULL);\n    ASSERT( b.predecessor_count() == 0, NULL);\n    ASSERT( b2.successor_count() == 0, NULL);\n    ASSERT( b2.predecessor_count() == 1, NULL);\n    typename tbb::flow::buffer_node<T>::successor_list_type my_succs;\n    b.copy_successors(my_succs);\n    ASSERT(my_succs.size() == 1, NULL);\n    typename tbb::flow::buffer_node<T>::predecessor_list_type my_preds;\n    b.copy_predecessors(my_preds);\n    ASSERT(my_preds.size() == 0, NULL);\n#endif\n\n    vsum = T(0);\n    for (int i = 0; i < N; ++i) {\n        bool msg = b.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        spin_try_get( b2, j );\n        vsum += j;\n    }\n    ASSERT( vsum == (N*(N-1))/2, NULL);\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::remove_edge(b, b2);\n    ASSERT( b.try_put( 1 ) == true, NULL );\n    g.wait_for_all();\n    ASSERT( b2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == true, NULL );\n    ASSERT( j == 1, NULL );\n\n    tbb::flow::buffer_node<T> b3(g);\n    tbb::flow::make_edge( b, b2 );\n    tbb::flow::make_edge( b2, b3 );\n\n    vsum = T(0);\n    for (int i = 0; i < N; ++i) {\n        bool msg = b.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        spin_try_get( b3, j );\n        vsum += j;\n    }\n    ASSERT( vsum == (N*(N-1))/2, NULL);\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b2.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( b3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::remove_edge(b, b2);\n    ASSERT( b.try_put( 1 ) == true, NULL );\n    g.wait_for_all();\n    ASSERT( b2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( b3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( b.try_get( j ) == true, NULL );\n    ASSERT( j == 1, NULL );\n\n    return 0;\n}\n\nint TestMain() {\n    tbb::tick_count start = tbb::tick_count::now(), stop;\n    for (int p = 2; p <= 4; ++p) {\n        tbb::task_scheduler_init init(p);\n        test_serial<int>();\n        test_parallel<int>(p);\n    }\n    stop = tbb::tick_count::now();\n    REMARK(\"Buffer_Node Time=%6.6f\\n\", (stop-start).seconds());\n    test_resets<int,tbb::flow::buffer_node<int> >();\n    test_resets<float,tbb::flow::buffer_node<float> >();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_buffer_extract<tbb::flow::buffer_node<int> >().run_tests();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_cache_aligned_allocator.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test whether cache_aligned_allocator works with some of the host's STL containers.\n\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_allocator.h\"\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n// the real body of the test is there:\n#include \"test_allocator.h\"\n\ntemplate<>\nstruct is_zero_filling<tbb::zero_allocator<void> > {\n    static const bool value = true;\n};\n\n// Test that NFS_Allocate() throws bad_alloc if cannot allocate memory.\nvoid Test_NFS_Allocate_Throws() {\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    using namespace tbb::internal;\n\n    // First, allocate a reasonably big amount of memory, big enough\n    // to not cause warp around in system allocator after adding object header\n    // during address2 allocation.\n    const size_t itemsize = 1024;\n    const size_t nitems   = 1024;\n    void *address1 = NULL;\n    try {\n        address1 = NFS_Allocate( nitems, itemsize, NULL );\n    } catch( ... ) {\n        // intentionally empty\n    }\n    ASSERT( address1, \"NFS_Allocate unable to obtain 1024*1024 bytes\" );\n\n    bool exception_caught = false;\n    try {\n        // Try allocating more memory than left in the address space; should cause std::bad_alloc\n        (void) NFS_Allocate( 1, ~size_t(0) - itemsize*nitems + NFS_GetLineSize(), NULL);\n    } catch( std::bad_alloc& ) {\n        exception_caught = true;\n    } catch( ... ) {\n        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unexpected exception type (std::bad_alloc was expected)\" );\n        exception_caught = true;\n    }\n    ASSERT( exception_caught, \"NFS_Allocate did not throw bad_alloc\" );\n\n    try {\n        NFS_Free( address1 );\n    } catch( ... ) {\n        ASSERT( false, \"NFS_Free did not accept the address obtained with NFS_Allocate\" );\n    }\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n}\n\nint TestMain () {\n    int result = TestMain<tbb::cache_aligned_allocator<void> >();\n    result += TestMain<tbb::tbb_allocator<void> >();\n    result += TestMain<tbb::zero_allocator<void> >();\n    ASSERT( !result, NULL );\n    Test_NFS_Allocate_Throws();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_cache_aligned_allocator_STL.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test whether cache_aligned_allocator works with some of the host's STL containers.\n\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_allocator.h\"\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"test_allocator_STL.h\"\n\nint TestMain () {\n    TestAllocatorWithSTL<tbb::cache_aligned_allocator<void> >();\n    TestAllocatorWithSTL<tbb::tbb_allocator<void> >();\n    TestAllocatorWithSTL<tbb::zero_allocator<void> >();\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_cilk_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// This file is a common part of test_cilk_interop and test_cilk_dynamic_load tests\n\nint TBB_Fib( int n );\n\nclass FibCilkSubtask: public tbb::task {\n    int n;\n    int& result;\n    task* execute() __TBB_override {\n        if( n<2 ) {\n            result = n;\n        } else {\n            int x, y;\n            x = cilk_spawn TBB_Fib(n-2);\n            y = cilk_spawn TBB_Fib(n-1);\n            cilk_sync;\n            result = x+y;\n        }\n        return NULL;\n    }\npublic:\n    FibCilkSubtask( int& result_, int n_ ) : result(result_), n(n_) {}\n};\n\nclass FibTask: public tbb::task {\n    int n;\n    int& result;\n    task* execute() __TBB_override {\n        if( !g_sandwich && n<2 ) {\n            result = n;\n        } else {\n            int x,y;\n            tbb::task_scheduler_init init(P_nested);\n            task* self0 = &task::self();\n            set_ref_count( 3 );\n            if ( g_sandwich ) {\n                spawn (*new( allocate_child() ) FibCilkSubtask(x,n-1));\n                spawn (*new( allocate_child() ) FibCilkSubtask(y,n-2));\n            }\n            else {\n                spawn (*new( allocate_child() ) FibTask(x,n-1));\n                spawn (*new( allocate_child() ) FibTask(y,n-2));\n            }\n            wait_for_all();\n            task* self1 = &task::self();\n            ASSERT( self0 == self1, \"failed to preserve TBB TLS\" );\n            result = x+y;\n        }\n        return NULL;\n    }\npublic:\n    FibTask( int& result_, int n_ ) : result(result_), n(n_) {}\n};\n\nint TBB_Fib( int n ) {\n    if( n<2 ) {\n        return n;\n    } else {\n        int result;\n        tbb::task_scheduler_init init(P_nested);\n        tbb::task::spawn_root_and_wait(*new( tbb::task::allocate_root()) FibTask(result,n) );\n        return result;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_cilk_dynamic_load.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n// Skip the test if no interoperability with cilkrts\n#define __TBB_CILK_INTEROP   (__TBB_SURVIVE_THREAD_SWITCH && __INTEL_COMPILER>=1200)\n// Skip the test when cilkrts did not have dlopen()/dlclose() start up feature\n#define CILK_SYMBOLS_VISIBLE (_WIN32||_WIN64)\n// The compiler does not add \"-lcilkrts\" linker option on some linux systems\n#define CILK_LINKAGE_BROKEN  (__linux__ && __GNUC__<4 && __INTEL_COMPILER_BUILD_DATE <= 20110427)\n// Currently, the interop doesn't support the situation:\n//1) Intel(R) Threading Building Blocks (Intel(R) TBB) is outermost;\n//2)   Intel(R) Cilk(TM) Plus, and it should be dynamically loaded with dlopen/LoadLibrary (possibly via a 3rd party module);\n//3)     Intel(R) TBB again;\n//4)       Intel(R) Cilk(TM) Plus again.\n#define HEAVY_NESTED_INTEROP_SUPPORT ( __INTEL_COMPILER_BUILD_DATE < 20110427 )\n\n#if __TBB_CILK_INTEROP && CILK_SYMBOLS_VISIBLE && !CILK_LINKAGE_BROKEN && HEAVY_NESTED_INTEROP_SUPPORT\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task.h\"\n\nstatic const int N = 25;\nstatic const int P_outer = 4;\nstatic const int P_nested = 2;\n\n#ifdef _USRDLL\n\n#include <cilk/cilk.h>\n#define HARNESS_CUSTOM_MAIN 1\n#include \"harness.h\"\n#undef HARNESS_CUSTOM_MAIN\n\n#if _WIN32 || _WIN64\n#define CILK_TEST_EXPORT extern \"C\" __declspec(dllexport)\n#else\n#define CILK_TEST_EXPORT extern \"C\"\n#endif /* _WIN32 || _WIN64 */\n\nbool g_sandwich = true; // have to be declare before #include \"test_cilk_common.h\"\n#include \"test_cilk_common.h\"\n\nCILK_TEST_EXPORT int CilkFib( int n )\n{\n    return TBB_Fib(n);\n}\n\nCILK_TEST_EXPORT void CilkShutdown()\n{\n    __cilkrts_end_cilk();\n}\n\n#else /* _USRDLL undefined */\n\n#include \"harness.h\"\n#include \"harness_dynamic_libs.h\"\n\nint SerialFib( int n ) {\n    int a=0, b=1;\n    for( int i=0; i<n; ++i ) {\n        b += a;\n        a = b-a;\n    }\n    return a;\n}\n\nint F = SerialFib(N);\n\ntypedef int (*CILK_CALL)(int);\nCILK_CALL CilkFib = 0;\n\ntypedef void (*CILK_SHUTDOWN)();\nCILK_SHUTDOWN CilkShutdown = 0;\n\nclass FibTask: public tbb::task {\n    int n;\n    int& result;\n    task* execute() __TBB_override {\n        if( n<2 ) {\n            result = n;\n        } else {\n\n            // TODO: why RTLD_LAZY was used here?\n            Harness::LIBRARY_HANDLE hLib =\n                Harness::OpenLibrary(TEST_LIBRARY_NAME(\"test_cilk_dynamic_load_dll\"));\n            CilkFib = (CILK_CALL)Harness::GetAddress(hLib, \"CilkFib\");\n            CilkShutdown = (CILK_SHUTDOWN)Harness::GetAddress(hLib, \"CilkShutdown\");\n\n            int x, y;\n            x = CilkFib(n-2);\n            y = CilkFib(n-1);\n            result = x+y;\n\n            CilkShutdown();\n\n            Harness::CloseLibrary(hLib);\n        }\n        return NULL;\n    }\npublic:\n    FibTask( int& result_, int n_ ) : result(result_), n(n_) {}\n};\n\n\nint TBB_Fib( int n ) {\n    if( n<2 ) {\n        return n;\n    } else {\n        int result;\n        tbb::task_scheduler_init init(P_nested);\n        tbb::task::spawn_root_and_wait(*new( tbb::task::allocate_root()) FibTask(result,n) );\n        return result;\n    }\n}\n\nvoid RunSandwich() {\n    tbb::task_scheduler_init init(P_outer);\n    int m = TBB_Fib(N);\n    ASSERT( m == F, NULL );\n}\n\nint TestMain () {\n    for ( int i = 0; i < 20; ++i )\n        RunSandwich();\n    return Harness::Done;\n}\n\n#endif /* _USRDLL */\n\n#else /* !__TBB_CILK_INTEROP */\n\n#include \"harness.h\"\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_CILK_INTEROP */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_cilk_interop.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include \"harness.h\"\n\n// Skip the test if no interoperability with cilkrts\n#define __TBB_CILK_INTEROP   (__TBB_SURVIVE_THREAD_SWITCH && __INTEL_COMPILER>=1200)\n// The compiler does not add \"-lcilkrts\" linker option on some linux systems\n#define CILK_LINKAGE_BROKEN  (__linux__ && __GNUC__<4 && __INTEL_COMPILER_BUILD_DATE <= 20110427)\n// In U4, cilkrts incorrectly sends the interop notifications to TBB\n#define CILK_NOTIFICATIONS_BROKEN ( __INTEL_COMPILER_BUILD_DATE == 20110427 )\n\n#if __TBB_CILK_INTEROP && !CILK_LINKAGE_BROKEN && !CILK_NOTIFICATIONS_BROKEN\n\nstatic const int N = 14;\nstatic const int P_outer = 4;\nstatic const int P_nested = 2;\n\n#include <cilk/cilk.h>\n#include <cilk/cilk_api.h>\n#define private public\n#include \"tbb/task.h\"\n#undef private\n#include \"tbb/task_scheduler_init.h\"\n#include <cstdio>\n#include <cassert>\n\nenum tbb_sched_injection_mode_t {\n    tbbsched_none = 0,\n    tbbsched_explicit_only = 1,\n    tbbsched_auto_only = 2,\n    tbbsched_mixed = 3\n};\n\ntbb_sched_injection_mode_t g_sim = tbbsched_none;\n\nbool g_sandwich = false; // have to be declare before #include \"test_cilk_common.h\"\n#include \"test_cilk_common.h\"\n\n// A time delay routine\nvoid Delay( int n ) {\n    static volatile int Global;\n    for( int k=0; k<10000; ++k )\n        for( int i=0; i<n; ++i )\n            ++Global;\n}\n\nint SerialFib( int n ) {\n    int a=0, b=1;\n    for( int i=0; i<n; ++i ) {\n        b += a;\n        a = b-a;\n    }\n    return a;\n}\n\nint F = SerialFib(N);\n\nint Fib ( int n ) {\n    if( n < 2 ) {\n        if ( g_sim ) {\n            tbb::task_scheduler_init tsi(P_nested);\n        }\n        return n;\n    } else {\n        tbb::task_scheduler_init *tsi = NULL;\n        tbb::task *cur = NULL;\n        if ( g_sim ) {\n            if ( n % 2 == 0 ) {\n                if ( g_sim == tbbsched_auto_only || (g_sim == tbbsched_mixed && n % 4 == 0) ) {\n                    // Trigger TBB scheduler auto-initialization\n                    cur = &tbb::task::self();\n                }\n                else {\n                    ASSERT ( g_sim == tbbsched_explicit_only || (g_sim == tbbsched_mixed && n % 4 != 0), NULL );\n                    // Initialize TBB scheduler explicitly\n                    tsi = new tbb::task_scheduler_init(P_nested);\n                }\n            }\n        }\n        int x, y;\n        x = cilk_spawn Fib(n-2);\n        y = cilk_spawn Fib(n-1);\n        cilk_sync;\n        if ( tsi )\n            delete tsi;\n        return x+y;\n    }\n}\n\nvoid RunCilkOnly ( tbb_sched_injection_mode_t sim ) {\n    g_sim = sim;\n    int m = Fib(N);\n    ASSERT( m == F, NULL );\n}\n\nstruct FibBody : NoAssign, Harness::NoAfterlife {\n    void operator() ( int ) const {\n        int m = Fib(N);\n        ASSERT( m == F, NULL );\n    }\n};\n\nvoid RunCilkOnlyConcurrently ( tbb_sched_injection_mode_t sim ) {\n    g_sim = sim;\n    NativeParallelFor( P_outer, FibBody() );\n}\n\nvoid RunSandwich( bool sandwich ) {\n    g_sandwich = sandwich;\n    tbb::task_scheduler_init init(P_outer);\n    int m = TBB_Fib(N);\n    ASSERT( g_sandwich == sandwich, \"Memory corruption detected\" );\n    ASSERT( m == F, NULL );\n}\n\nint TestMain () {\n    for ( int i = 0; i < 100; ++i )\n        RunCilkOnlyConcurrently( tbbsched_none );\n    RunCilkOnly( tbbsched_none );\n    RunCilkOnly( tbbsched_explicit_only );\n    RunCilkOnly( tbbsched_auto_only );\n    RunCilkOnly( tbbsched_mixed );\n    RunSandwich( false );\n    for ( int i = 0; i < 10; ++i )\n        RunSandwich( true );\n    __cilkrts_end_cilk();\n    return Harness::Done;\n}\n\n#else /* !__TBB_CILK_INTEROP */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_CILK_INTEROP */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_combinable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 0\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n#define __TBB_EXTRA_DEBUG 1 // for concurrent_hash_map\n#include \"tbb/combinable.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/tbb_thread.h\"\n\n#include <cstring>\n#include <vector>\n#include <utility>\n\n#include \"harness_assert.h\"\n#include \"harness.h\"\n#include \"test_container_move_support.h\"\n\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic ignored \"-Wuninitialized\"\n#endif\n\nstatic tbb::atomic<int> construction_counter;\nstatic tbb::atomic<int> destruction_counter;\n\nconst int REPETITIONS = 10;\nconst int N = 100000;\nconst double EXPECTED_SUM = (REPETITIONS + 1) * N;\n\n//\n// A minimal class\n// Define: default and copy constructor, and allow implicit operator&\n// also operator=\n//\n\nclass minimal {\nprivate:\n    int my_value;\npublic:\n    minimal(int val=0) : my_value(val) { ++construction_counter; }\n    minimal( const minimal &m ) : my_value(m.my_value) { ++construction_counter; }\n    minimal& operator=(const minimal& other) { my_value = other.my_value; return *this; }\n    minimal& operator+=(const minimal& other) { my_value += other.my_value; return *this; }\n    operator int() const { return my_value; }\n    ~minimal() { ++destruction_counter; }\n    void set_value( const int i ) { my_value = i; }\n    int value( ) const { return my_value; }\n};\n\n//// functors for initialization and combine\n\ntemplate <typename T>\nstruct FunctorAddFinit {\n    T operator()() { return 0; }\n};\n\ntemplate <typename T>\nstruct FunctorAddFinit7 {\n    T operator()() { return 7; }\n};\n\ntemplate <typename T>\nstruct FunctorAddCombine {\n    T operator()(T left, T right ) const {\n        return left + right;\n    }\n};\n\ntemplate <typename T>\nstruct FunctorAddCombineRef {\n    T operator()(const T& left, const T& right ) const {\n        return left + right;\n    }\n};\n\ntemplate <typename T>\nT my_combine( T left, T right) { return left + right; }\n\ntemplate <typename T>\nT my_combine_ref( const T &left, const T &right) { return left + right; }\n\ntemplate <typename T>\nclass CombineEachHelper {\npublic:\n    CombineEachHelper(T& _result) : my_result(_result) {}\n    void operator()(const T& new_bit) { my_result +=  new_bit; }\n    CombineEachHelper& operator=(const CombineEachHelper& other) {\n        my_result =  other;\n        return *this;\n    }\nprivate:\n    T& my_result;\n};\n\ntemplate <typename T>\nclass CombineEachHelperCnt {\npublic:\n    CombineEachHelperCnt(T& _result, int& _nbuckets) : my_result(_result), nBuckets(_nbuckets) {}\n    void operator()(const T& new_bit) { my_result +=  new_bit; ++nBuckets; }\n    CombineEachHelperCnt& operator=(const CombineEachHelperCnt& other) {\n        my_result =  other.my_result;\n        nBuckets = other.nBuckets;\n        return *this;\n    }\nprivate:\n    T& my_result;\n    int& nBuckets;\n};\n\ntemplate <typename T>\nclass CombineEachVectorHelper {\npublic:\n    typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;\n    CombineEachVectorHelper(T& _result) : my_result(_result) { }\n    void operator()(const ContainerType& new_bit) {\n        for(typename ContainerType::const_iterator ci = new_bit.begin(); ci != new_bit.end(); ++ci) {\n            my_result +=  *ci;\n        }\n    }\n    CombineEachVectorHelper& operator=(const CombineEachVectorHelper& other) {\n        my_result=other.my_result;\n        return *this;\n    }\n\nprivate:\n    T& my_result;\n};\n\n//// end functors\n\n// parallel body with a test for first access\ntemplate <typename T>\nclass ParallelScalarBody: NoAssign {\n\n    tbb::combinable<T> &sums;\n\npublic:\n\n    ParallelScalarBody ( tbb::combinable<T> &_sums ) : sums(_sums) { }\n\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        for (int i = r.begin(); i != r.end(); ++i) {\n            bool was_there;\n            T& my_local = sums.local(was_there);\n            if(!was_there) my_local = 0;\n             my_local +=  1 ;\n        }\n    }\n\n};\n\n// parallel body with no test for first access\ntemplate <typename T>\nclass ParallelScalarBodyNoInit: NoAssign {\n\n    tbb::combinable<T> &sums;\n\npublic:\n\n    ParallelScalarBodyNoInit ( tbb::combinable<T> &_sums ) : sums(_sums) { }\n\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        for (int i = r.begin(); i != r.end(); ++i) {\n             sums.local() +=  1 ;\n        }\n    }\n\n};\n\ntemplate< typename T >\nvoid RunParallelScalarTests(const char *test_name) {\n\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);\n    for (int p = MinThread; p <= MaxThread; ++p) {\n\n        if (p == 0) continue;\n        REMARK(\"  Testing parallel %s on %d thread(s)...\\n\", test_name, p);\n        init.initialize(p);\n\n        tbb::tick_count t0;\n        T combine_sum(0);\n        T combine_ref_sum(0);\n        T combine_finit_sum(0);\n        T combine_each_sum(0);\n        T copy_construct_sum(0);\n        T copy_assign_sum(0);\n#if __TBB_ETS_USE_CPP11\n        T move_construct_sum(0);\n        T move_assign_sum(0);\n#endif\n        for (int t = -1; t < REPETITIONS; ++t) {\n            if (Verbose && t == 0) t0 = tbb::tick_count::now();\n\n            // test uninitialized parallel combinable\n            tbb::combinable<T> sums;\n            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBody<T>( sums ) );\n            combine_sum += sums.combine(my_combine<T>);\n            combine_ref_sum += sums.combine(my_combine_ref<T>);\n\n            // test parallel combinable preinitialized with a functor that returns 0\n            FunctorAddFinit<T> my_finit_decl;\n            tbb::combinable<T> finit_combinable(my_finit_decl);\n            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBodyNoInit<T>( finit_combinable ) );\n            combine_finit_sum += finit_combinable.combine(my_combine<T>);\n\n            // test another way of combining the elements using CombineEachHelper<T> functor\n            CombineEachHelper<T> my_helper(combine_each_sum);\n            sums.combine_each(my_helper);\n\n            // test copy constructor for parallel combinable\n            tbb::combinable<T> copy_constructed(sums);\n            copy_construct_sum += copy_constructed.combine(my_combine<T>);\n\n            // test copy assignment for uninitialized parallel combinable\n            tbb::combinable<T> assigned;\n            assigned = sums;\n            copy_assign_sum += assigned.combine(my_combine<T>);\n\n#if __TBB_ETS_USE_CPP11\n            // test move constructor for parallel combinable\n            tbb::combinable<T> moved1(std::move(sums));\n            move_construct_sum += moved1.combine(my_combine<T>);\n\n            // test move assignment for uninitialized parallel combinable\n            tbb::combinable<T> moved2;\n            moved2=std::move(finit_combinable);\n            move_assign_sum += moved2.combine(my_combine<T>);\n#endif\n        }\n        // Here and below comparison for equality of float numbers succeeds\n        // as the rounding error doesn't accumulate and doesn't affect the comparison\n        ASSERT( EXPECTED_SUM == combine_sum, NULL);\n        ASSERT( EXPECTED_SUM == combine_ref_sum, NULL);\n        ASSERT( EXPECTED_SUM == combine_finit_sum, NULL);\n        ASSERT( EXPECTED_SUM == combine_each_sum, NULL);\n        ASSERT( EXPECTED_SUM == copy_construct_sum, NULL);\n        ASSERT( EXPECTED_SUM == copy_assign_sum, NULL);\n#if __TBB_ETS_USE_CPP11\n        ASSERT( EXPECTED_SUM == move_construct_sum, NULL);\n        ASSERT( EXPECTED_SUM == move_assign_sum, NULL);\n#endif\n        REMARK(\"  done parallel %s, %d, %g, %g\\n\", test_name, p, static_cast<double>(combine_sum),\n                                                      ( tbb::tick_count::now() - t0).seconds());\n        init.terminate();\n    }\n}\n\ntemplate <typename T>\nclass ParallelVectorForBody: NoAssign {\n\n    tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &locals;\n\npublic:\n\n    ParallelVectorForBody ( tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &_locals ) : locals(_locals) { }\n\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        T one = 1;\n\n        for (int i = r.begin(); i < r.end(); ++i) {\n            locals.local().push_back( one );\n        }\n    }\n\n};\n\ntemplate< typename T >\nvoid RunParallelVectorTests(const char *test_name) {\n\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);\n\n    typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;\n\n    for (int p = MinThread; p <= MaxThread; ++p) {\n\n        if (p == 0) continue;\n        REMARK(\"  Testing parallel %s on %d thread(s)... \\n\", test_name, p);\n        init.initialize(p);\n\n        tbb::tick_count t0;\n        T defaultConstructed_sum(0);\n        T copyConstructed_sum(0);\n        T copyAssigned_sum(0);\n#if __TBB_ETS_USE_CPP11\n        T moveConstructed_sum(0);\n        T moveAssigned_sum(0);\n#endif\n        for (int t = -1; t < REPETITIONS; ++t) {\n            if (Verbose && t == 0) t0 = tbb::tick_count::now();\n\n            typedef typename tbb::combinable< ContainerType > CombinableType;\n\n            // test uninitialized parallel combinable\n            CombinableType vs;\n            tbb::parallel_for( tbb::blocked_range<int> (0, N, 10000), ParallelVectorForBody<T>( vs ) );\n            CombineEachVectorHelper<T> MyCombineEach(defaultConstructed_sum);\n            vs.combine_each(MyCombineEach); // combine_each sums all elements of each vector into the result\n\n            // test copy constructor for parallel combinable with vectors\n            CombinableType vs2(vs);\n            CombineEachVectorHelper<T> MyCombineEach2(copyConstructed_sum);\n            vs2.combine_each(MyCombineEach2);\n\n            // test copy assignment for uninitialized parallel combinable with vectors\n            CombinableType vs3;\n            vs3 = vs;\n            CombineEachVectorHelper<T> MyCombineEach3(copyAssigned_sum);\n            vs3.combine_each(MyCombineEach3);\n\n#if __TBB_ETS_USE_CPP11\n            // test move constructor for parallel combinable with vectors\n            CombinableType vs4(std::move(vs2));\n            CombineEachVectorHelper<T> MyCombineEach4(moveConstructed_sum);\n            vs4.combine_each(MyCombineEach4);\n\n            // test move assignment for uninitialized parallel combinable with vectors\n            vs4=std::move(vs3);\n            CombineEachVectorHelper<T> MyCombineEach5(moveAssigned_sum);\n            vs4.combine_each(MyCombineEach5);\n#endif\n        }\n\n        double ResultValue = defaultConstructed_sum;\n        ASSERT( EXPECTED_SUM == ResultValue, NULL);\n        ResultValue = copyConstructed_sum;\n        ASSERT( EXPECTED_SUM == ResultValue, NULL);\n        ResultValue = copyAssigned_sum;\n        ASSERT( EXPECTED_SUM == ResultValue, NULL);\n#if __TBB_ETS_USE_CPP11\n        ResultValue = moveConstructed_sum;\n        ASSERT( EXPECTED_SUM == ResultValue, NULL);\n        ResultValue = moveAssigned_sum;\n        ASSERT( EXPECTED_SUM == ResultValue, NULL);\n#endif\n        REMARK(\"  done parallel %s, %d, %g, %g\\n\", test_name, p, ResultValue, ( tbb::tick_count::now() - t0).seconds());\n        init.terminate();\n    }\n}\n\nvoid\nRunParallelTests() {\n    REMARK(\"Running RunParallelTests\\n\");\n    RunParallelScalarTests<int>(\"int\");\n    RunParallelScalarTests<double>(\"double\");\n    RunParallelScalarTests<minimal>(\"minimal\");\n    RunParallelVectorTests<int>(\"std::vector<int, tbb::tbb_allocator<int> >\");\n    RunParallelVectorTests<double>(\"std::vector<double, tbb::tbb_allocator<double> >\");\n}\n\ntemplate <typename T>\nvoid\nRunAssignmentAndCopyConstructorTest(const char *test_name) {\n    REMARK(\"  Testing assignment and copy construction for combinable<%s>...\\n\", test_name);\n\n    // test creation with finit function (combine returns finit return value if no threads have created locals)\n    FunctorAddFinit7<T> my_finit7_decl;\n    tbb::combinable<T> create1(my_finit7_decl);\n    ASSERT(7 == create1.combine(my_combine<T>), \"Unexpected combine result for combinable object preinitialized with functor\");\n\n    // test copy construction with function initializer\n    tbb::combinable<T> copy1(create1);\n    ASSERT(7 == copy1.combine(my_combine<T>), \"Unexpected combine result for copy-constructed combinable object\");\n\n    // test copy assignment with function initializer\n    FunctorAddFinit<T> my_finit_decl;\n    tbb::combinable<T> assign1(my_finit_decl);\n    assign1 = create1;\n    ASSERT(7 == assign1.combine(my_combine<T>), \"Unexpected combine result for copy-assigned combinable object\");\n\n#if __TBB_ETS_USE_CPP11\n    // test move construction with function initializer\n    tbb::combinable<T> move1(std::move(create1));\n    ASSERT(7 == move1.combine(my_combine<T>), \"Unexpected combine result for move-constructed combinable object\");\n\n    // test move assignment with function initializer\n    tbb::combinable<T> move2;\n    move2=std::move(copy1);\n    ASSERT(7 == move2.combine(my_combine<T>), \"Unexpected combine result for move-assigned combinable object\");\n#endif\n\n    REMARK(\"  done\\n\");\n\n}\n\nvoid\nRunAssignmentAndCopyConstructorTests() {\n    REMARK(\"Running assignment and copy constructor tests:\\n\");\n    RunAssignmentAndCopyConstructorTest<int>(\"int\");\n    RunAssignmentAndCopyConstructorTest<double>(\"double\");\n    RunAssignmentAndCopyConstructorTest<minimal>(\"minimal\");\n}\n\nvoid\nRunMoveSemanticsForStateTrackableObjectTest() {\n    REMARK(\"Testing move assignment and move construction for combinable<Harness::StateTrackable>...\\n\");\n\n    tbb::combinable< Harness::StateTrackable<true> > create1;\n    ASSERT(create1.local().state == Harness::StateTrackable<true>::DefaultInitialized,\n           \"Unexpected value in default combinable object\");\n\n    // Copy constructing of the new combinable causes copying of stored values\n    tbb::combinable< Harness::StateTrackable<true> > copy1(create1);\n    ASSERT(copy1.local().state == Harness::StateTrackable<true>::CopyInitialized,\n           \"Unexpected value in copy-constructed combinable object\");\n\n    // Copy assignment also causes copying of stored values\n    tbb::combinable< Harness::StateTrackable<true> > copy2;\n    ASSERT(copy2.local().state == Harness::StateTrackable<true>::DefaultInitialized,\n           \"Unexpected value in default combinable object\");\n    copy2=create1;\n    ASSERT(copy2.local().state == Harness::StateTrackable<true>::CopyInitialized,\n           \"Unexpected value in copy-assigned combinable object\");\n\n#if __TBB_ETS_USE_CPP11\n    // Store some marked values in the initial combinable object\n    create1.local().state = Harness::StateTrackableBase::Unspecified;\n\n    // Move constructing of the new combinable must not cause copying of stored values\n    tbb::combinable< Harness::StateTrackable<true> > move1(std::move(create1));\n    ASSERT(move1.local().state == Harness::StateTrackableBase::Unspecified, \"Unexpected value in move-constructed combinable object\");\n\n    // Move assignment must not cause copying of stored values\n    copy1=std::move(move1);\n    ASSERT(copy1.local().state == Harness::StateTrackableBase::Unspecified, \"Unexpected value in move-assigned combinable object\");\n\n    // Make the stored values valid again in order to delete StateTrackable object correctly\n    copy1.local().state = Harness::StateTrackable<true>::MoveAssigned;\n#endif\n\n    REMARK(\"done\\n\");\n}\n\n#include \"harness_barrier.h\"\n\nHarness::SpinBarrier sBarrier;\n\nstruct Body : NoAssign {\n    tbb::combinable<int>* locals;\n    const int nthread;\n    const int nIters;\n    Body( int nthread_, int niters_ ) : nthread(nthread_), nIters(niters_) { sBarrier.initialize(nthread_); }\n\n    void operator()(int thread_id ) const {\n        bool existed;\n        sBarrier.wait();\n        for(int i = 0; i < nIters; ++i ) {\n            existed = thread_id & 1;\n            int oldval = locals->local(existed);\n            ASSERT(existed == (i > 0), \"Error on first reference\");\n            ASSERT(!existed || (oldval == thread_id), \"Error on fetched value\");\n            existed = thread_id & 1;\n            locals->local(existed) = thread_id;\n            ASSERT(existed, \"Error on assignment\");\n        }\n    }\n};\n\nvoid\nTestLocalAllocations( int nthread ) {\n    ASSERT(nthread > 0, \"nthread must be positive\");\n#define NITERATIONS 1000\n    Body myBody(nthread, NITERATIONS);\n    tbb::combinable<int> myCombinable;\n    myBody.locals = &myCombinable;\n\n    NativeParallelFor( nthread, myBody );\n\n    int mySum = 0;\n    int mySlots = 0;\n    CombineEachHelperCnt<int> myCountCombine(mySum, mySlots);\n    myCombinable.combine_each(myCountCombine);\n\n    ASSERT(nthread == mySlots, \"Incorrect number of slots\");\n    ASSERT(mySum == (nthread - 1) * nthread / 2, \"Incorrect values in result\");\n}\n\nvoid\nRunLocalAllocationsTests() {\n    REMARK(\"Testing local() allocations\\n\");\n    for(int i = 1 <= MinThread ? MinThread : 1; i <= MaxThread; ++i) {\n        REMARK(\"  Testing local() allocation with nthreads=%d...\\n\", i);\n        for(int j = 0; j < 100; ++j) {\n            TestLocalAllocations(i);\n        }\n        REMARK(\"  done\\n\");\n    }\n}\n\nint TestMain () {\n    if (MaxThread > 0) {\n        RunParallelTests();\n    }\n    RunAssignmentAndCopyConstructorTests();\n    RunMoveSemanticsForStateTrackableObjectTest();\n    RunLocalAllocationsTests();\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_composite_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n#include \"tbb/flow_graph.h\"\n#include \"harness_graph.h\"\n#include <tuple>\n#include <cmath>\n#include <vector>\n\nstruct passthru_body {\n    int operator()( int i ) {\n        return i;\n    }\n};\n\nclass src_body{\n    int start;\n    int finish;\n    int step;\npublic:\n    src_body(int f, int s) : start(1), finish(f), step(s) {}\n    bool operator()(int &a) {\n       a = start;\n       if (start <= finish) {\n           a = start;\n           start+=step;\n           return true;\n       }\n       else {\n           return false;\n       };\n   }\n};\n\nstruct m_fxn_body{\n    void operator()(int, tbb::flow::multifunction_node<int, tbb::flow::tuple<int,int> >::output_ports_type ) {}\n};\n\nstruct ct_body {\nct_body(){}\n    void operator()(tbb::flow::continue_msg){}\n};\n\nstruct seq_body {\nint operator()(int i){return i;}\n};\n\ntemplate<int N, typename T1, typename T2>\nstruct compare {\n    static void compare_refs(T1 tuple1, T2 tuple2) {\n    ASSERT( &tbb::flow::get<N>(tuple1) == &tbb::flow::get<N>(tuple2), \"ports not set correctly\");\n    compare<N-1, T1, T2>::compare_refs(tuple1, tuple2);\n    }\n};\n\ntemplate<typename T1, typename T2>\nstruct compare<1, T1, T2> {\n    static void compare_refs(T1 tuple1, T2 tuple2) {\n    ASSERT(&tbb::flow::get<0>(tuple1) == &tbb::flow::get<0>(tuple2), \"port 0 not correctly set\");\n    }\n};\n\nvoid add_all_nodes (){\n    tbb::flow::graph g;\n\n    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, int, int, int, int,\n                             int, int, int, int, int, int, int, int > InputTupleType;\n\n    typedef tbb::flow::tuple<tbb::flow::continue_msg, tbb::flow::tuple<int, int>, tbb::flow::tagged_msg<size_t, int, float>,\n                             int, int, int, int, int, int, int, int, int, int, int, int >  OutputTupleType;\n\n    typedef tbb::flow::tuple< > EmptyTupleType;\n\n    typedef tbb::flow::composite_node<InputTupleType, OutputTupleType > input_output_type;\n    typedef tbb::flow::composite_node<InputTupleType, EmptyTupleType > input_only_type;\n    typedef tbb::flow::composite_node<EmptyTupleType, OutputTupleType > output_only_type;\n\n    const size_t NUM_INPUTS = tbb::flow::tuple_size<InputTupleType>::value;\n    const size_t NUM_OUTPUTS = tbb::flow::tuple_size<OutputTupleType>::value;\n\n    //node types\n    tbb::flow::continue_node<tbb::flow::continue_msg> ct(g, ct_body());\n    tbb::flow::split_node< tbb::flow::tuple<int, int> > s(g);\n    tbb::flow::source_node<int> src(g, src_body(20,5), false);\n    tbb::flow::function_node<int, int> fxn(g, tbb::flow::unlimited, passthru_body());\n    tbb::flow::multifunction_node<int, tbb::flow::tuple<int, int> > m_fxn(g, tbb::flow::unlimited, m_fxn_body());\n    tbb::flow::broadcast_node<int> bc(g);\n    tbb::flow::limiter_node<int> lim(g, 2);\n    tbb::flow::indexer_node<int, float> ind(g);\n    tbb::flow::join_node< tbb::flow::tuple< int, int >, tbb::flow::queueing > j(g);\n    tbb::flow::queue_node<int> q(g);\n    tbb::flow::buffer_node<int> bf(g);\n    tbb::flow::priority_queue_node<int> pq(g);\n    tbb::flow::write_once_node<int> wo(g);\n    tbb::flow::overwrite_node<int> ovw(g);\n    tbb::flow::sequencer_node<int> seq(g, seq_body());\n\n#if !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN\n    auto input_tuple = std::tie(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q, tbb::flow::input_port<0>(ind),\n                                pq, ovw, wo, bf, seq);\n    auto output_tuple = std::tie(ct,j, ind, fxn, src, bc, tbb::flow::output_port<0>(s), lim, tbb::flow::output_port<0>(m_fxn),\n                                 q, pq, ovw, wo, bf, seq );\n#else\n    // upcasting from derived to base for a tuple of references created by std::tie\n    // fails on gcc 4.4 (and all icc in that environment)\n    input_output_type::input_ports_type input_tuple(ct, s, m_fxn, fxn, bc, tbb::flow::input_port<0>(j), lim, q,\n                                                    tbb::flow::input_port<0>(ind), pq, ovw, wo, bf, seq);\n\n    input_output_type::output_ports_type output_tuple(ct,j, ind, fxn, src, bc, tbb::flow::output_port<0>(s),\n                                                      lim, tbb::flow::output_port<0>(m_fxn), q, pq, ovw, wo, bf, seq);\n#endif\n\n    //composite_node with both input_ports and output_ports\n    input_output_type a_node(g);\n    a_node.set_external_ports(input_tuple, output_tuple);\n\n    a_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n    a_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n\n    auto a_node_input_ports_ptr = a_node.input_ports();\n    compare<NUM_INPUTS-1, decltype(a_node_input_ports_ptr), decltype(input_tuple)>::compare_refs(a_node_input_ports_ptr, input_tuple);\n    ASSERT (NUM_INPUTS == tbb::flow::tuple_size<decltype(a_node_input_ports_ptr)>::value, \"not all declared input ports were bound to nodes\");\n\n    auto a_node_output_ports_ptr = a_node.output_ports();\n    compare<NUM_OUTPUTS-1, decltype(a_node_output_ports_ptr), decltype(output_tuple)>::compare_refs(a_node_output_ports_ptr, output_tuple);\n    ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<decltype(a_node_output_ports_ptr)>::value, \"not all declared output ports were bound to nodes\");\n\n    //composite_node with only input_ports\n    input_only_type b_node(g);\n    b_node.set_external_ports(input_tuple);\n\n    b_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n    b_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n\n    auto b_node_input_ports_ptr = b_node.input_ports();\n    compare<NUM_INPUTS-1, decltype(b_node_input_ports_ptr), decltype(input_tuple)>::compare_refs(b_node_input_ports_ptr, input_tuple);\n    ASSERT (NUM_INPUTS == tbb::flow::tuple_size<decltype(b_node_input_ports_ptr)>::value, \"not all declared input ports were bound to nodes\");\n\n    //composite_node with only output_ports\n    output_only_type c_node(g);\n    c_node.set_external_ports(output_tuple);\n\n    c_node.add_visible_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n\n    c_node.add_nodes(src, fxn, m_fxn, bc, lim, ind, s, ct, j, q, bf, pq, wo, ovw, seq);\n\n    auto c_node_output_ports_ptr = c_node.output_ports();\n    compare<NUM_OUTPUTS-1, decltype(c_node_output_ports_ptr), decltype(output_tuple)>::compare_refs(c_node_output_ports_ptr, output_tuple);\n    ASSERT (NUM_OUTPUTS == tbb::flow::tuple_size<decltype(c_node_output_ports_ptr)>::value, \"not all declared input ports were bound to nodes\");\n}\n\nstruct tiny_node : public tbb::flow::composite_node< tbb::flow::tuple< int >, tbb::flow::tuple< int > > {\n    tbb::flow::function_node< int, int > f1;\n    tbb::flow::function_node< int, int > f2;\n    typedef tbb::flow::composite_node< tbb::flow::tuple< int >, tbb::flow::tuple< int > > base_type;\n\npublic:\n    tiny_node(tbb::flow::graph &g, bool hidden = false) : base_type(g), f1(g, tbb::flow::unlimited, passthru_body() ), f2(g, tbb::flow::unlimited, passthru_body() ) {\n        tbb::flow::make_edge( f1, f2 );\n\n        tbb::flow::tuple<tbb::flow::function_node< int, int >& > input_tuple(f1);\n        tbb::flow::tuple<tbb::flow::function_node< int, int >& > output_tuple(f2);\n        base_type::set_external_ports( input_tuple, output_tuple );\n\n        if(hidden)\n            base_type::add_nodes(f1, f2);\n        else\n            base_type::add_visible_nodes(f1, f2);\n\n    }\n};\n\nint test_tiny(bool hidden = false) {\n    tbb::flow::graph g;\n    tbb::flow::function_node< int, int > f0( g, tbb::flow::unlimited, passthru_body() );\n    tiny_node t(g, hidden);\n    ASSERT(&tbb::flow::input_port<0>(t) == &t.f1, \"f1 not bound to input port 0 in composite_node t\");\n    ASSERT(&tbb::flow::output_port<0>(t) == &t.f2, \"f2 not bound to output port 0 in composite_node t\");\n\n    tiny_node t1(g, hidden);\n    ASSERT(&tbb::flow::get<0>(t1.input_ports()) == &t1.f1, \"f1 not bound to input port 0 in composite_node t1\");\n    ASSERT(&tbb::flow::get<0>(t1.output_ports()) == &t1.f2, \"f2 not bound to output port 0 in composite_node t1\");\n\n    test_input_ports_return_ref(t1);\n    test_output_ports_return_ref(t1);\n\n    tiny_node t2(g, hidden);\n    ASSERT(&tbb::flow::input_port<0>(t2) == &t2.f1, \"f1 not bound to input port 0 in composite_node t2\");\n    ASSERT(&tbb::flow::output_port<0>(t2) == &t2.f2, \"f2 not bound to output port 0 in composite_node t2\");\n\n    tbb::flow::function_node< int, int > f3( g, tbb::flow::unlimited, passthru_body() );\n    tbb::flow::make_edge( f0, t );\n    tbb::flow::make_edge( t, t1 );\n    tbb::flow::make_edge( t1, t2 );\n    tbb::flow::make_edge( t2 , f3 );\n    tbb::flow::queue_node<int> q(g);\n    tbb::flow::make_edge(f3, q);\n    f0.try_put(1);\n    g.wait_for_all();\n\n    int i, j =0;\n    q.try_get(i);\n    ASSERT( i == 1, \"item did not go through graph\");\n    q.try_get(j);\n    ASSERT( !j, \"unexpected item in graph\");\n    g.wait_for_all();\n\n    tbb::flow::remove_edge(f3, q);\n    tbb::flow::remove_edge(t2, f3);\n    tbb::flow::remove_edge(t1, t2);\n\n    tbb::flow::make_edge( t1 , f3 );\n    tbb::flow::make_edge(f3, q);\n\n    f0.try_put(2);\n    g.wait_for_all();\n\n    q.try_get(i);\n    ASSERT( i == 2, \"item did not go through graph after removal of edge\");\n    q.try_get(j);\n    ASSERT( !j, \"unexpected item in graph after removal of edge\");\n\n    return 0;\n}\n\nclass adder_node : public tbb::flow::composite_node< tbb::flow::tuple< int, int >, tbb::flow::tuple< int > > {\npublic:\n    tbb::flow::join_node< tbb::flow::tuple< int, int >, tbb::flow::queueing > j;\n    tbb::flow::function_node< tbb::flow::tuple< int, int >, int > f;\nprivate:\n    typedef tbb::flow::composite_node< tbb::flow::tuple< int, int >, tbb::flow::tuple< int > > base_type;\n\n    struct f_body {\n        int operator()( const tbb::flow::tuple< int, int > &t ) {\n            return tbb::flow::get<0>(t) + tbb::flow::get<1>(t);\n        }\n    };\n\npublic:\n    adder_node(tbb::flow::graph &g, bool hidden = false) : base_type(g), j(g), f(g, tbb::flow::unlimited, f_body() ) {\n        tbb::flow::make_edge( j, f );\n\n        base_type::set_external_ports(base_type::input_ports_type(tbb::flow::input_port<0>(j), tbb::flow::input_port<1>(j)), base_type::output_ports_type(f));\n\n        if (hidden)\n            base_type::add_nodes(j, f);\n        else\n            base_type::add_visible_nodes(j, f);\n\n    }\n};\n\nstruct square_body { int operator()(int v) { return v*v; } };\nstruct cube_body { int operator()(int v) { return v*v*v; } };\nint adder_sum(int i) {\n    return (int)(pow(3*pow(i,3) + pow(i, 2),2));\n}\nint test_adder(bool hidden = false) {\n    tbb::flow::graph g;\n    tbb::flow::function_node<int,int> s(g, tbb::flow::unlimited, square_body());\n    tbb::flow::function_node<int,int> c(g, tbb::flow::unlimited, cube_body());\n    tbb::flow::function_node<int,int> p(g, tbb::flow::unlimited, passthru_body());\n\n    adder_node a0(g, hidden);\n    ASSERT(&tbb::flow::input_port<0>(a0) == &tbb::flow::input_port<0>(a0.j), \"input_port 0 of j not bound to input port 0 in composite_node a0\");\n    ASSERT(&tbb::flow::input_port<1>(a0) == &tbb::flow::input_port<1>(a0.j), \"input_port 1 of j not bound to input port 1 in composite_node a0\");\n    ASSERT(&tbb::flow::output_port<0>(a0) == &a0.f, \"f not bound to output port 0 in composite_node a0\");\n\n    adder_node a1(g, hidden);\n    ASSERT(&tbb::flow::get<0>(a0.input_ports()) == &tbb::flow::input_port<0>(a0.j), \"input_port 0 of j not bound to input port 0 in composite_node a1\");\n    ASSERT(&tbb::flow::get<1>(a0.input_ports()) == &tbb::flow::input_port<1>(a0.j), \"input_port1 of j not bound to input port 1 in composite_node a1\");\n    ASSERT(&tbb::flow::get<0>(a0.output_ports()) == &a0.f, \"f not bound to output port 0 in composite_node a1\");\n\n    adder_node a2(g, hidden);\n    ASSERT(&tbb::flow::input_port<0>(a2) == &tbb::flow::input_port<0>(a2.j), \"input_port 0 of j not bound to input port 0 in composite_node a2\");\n    ASSERT(&tbb::flow::input_port<1>(a2) == &tbb::flow::input_port<1>(a2.j), \"input_port 1 of j not bound to input port 1 in composite_node a2\");\n    ASSERT(&tbb::flow::output_port<0>(a2) == &a2.f, \"f not bound to output port 0 in composite_node a2\");\n\n    adder_node a3(g, hidden);\n    ASSERT(&tbb::flow::get<0>(a3.input_ports()) == &tbb::flow::input_port<0>(a3.j), \"input_port 0 of j not bound to input port 0 in composite_node a3\");\n    ASSERT(&tbb::flow::get<1>(a3.input_ports()) == &tbb::flow::input_port<1>(a3.j), \"input_port1 of j not bound to input port 1 in composite_node a3\");\n    ASSERT(&tbb::flow::get<0>(a3.output_ports()) == &a3.f, \"f not bound to output port 0 in composite_node a3\");\n\n    tbb::flow::function_node<int,int> s2(g, tbb::flow::unlimited, square_body());\n    tbb::flow::queue_node<int> q(g);\n\n    tbb::flow::make_edge( s, tbb::flow::input_port<0>(a0) );\n    tbb::flow::make_edge( c, tbb::flow::input_port<1>(a0) );\n\n    tbb::flow::make_edge( c, tbb::flow::input_port<0>(a1) );\n    tbb::flow::make_edge( c, tbb::flow::input_port<1>(a1) );\n\n    tbb::flow::make_edge( tbb::flow::output_port<0>(a0), tbb::flow::input_port<0>(a2) );\n    tbb::flow::make_edge( tbb::flow::output_port<0>(a1), tbb::flow::input_port<1>(a2) );\n\n    tbb::flow::make_edge( tbb::flow::output_port<0>(a2), s2 );\n    tbb::flow::make_edge( s2, q );\n\n    int sum_total=0;\n    int result=0;\n    for ( int i = 1; i < 4; ++i ) {\n       s.try_put(i);\n       c.try_put(i);\n       sum_total += adder_sum(i);\n    g.wait_for_all();\n    }\n\n    int j;\n    for ( int i = 1; i < 4; ++i ) {\n        q.try_get(j);\n        result += j;\n    }\n    g.wait_for_all();\n    ASSERT(result == sum_total, \"the sum from the graph does not match the calculated value\");\n\n    tbb::flow::remove_edge(s2, q);\n    tbb::flow::remove_edge( a2, s2 );\n    tbb::flow::make_edge( a0, a3 );\n    tbb::flow::make_edge( a1, tbb::flow::input_port<1>(a3) );\n    tbb::flow::make_edge( a3, s2 );\n    tbb::flow::make_edge( s2, q );\n\n    sum_total=0;\n    result=0;\n    for ( int i = 10; i < 20; ++i ) {\n       s.try_put(i);\n       c.try_put(i);\n       sum_total += adder_sum(i);\n    g.wait_for_all();\n    }\n\n    for ( int i = 10; i < 20; ++i ) {\n        q.try_get(j);\n        result += j;\n    }\n    g.wait_for_all();\n    ASSERT(result == sum_total, \"the new sum after the replacement of the nodes does not match the calculated value\");\n\n    return 0;\n}\n\n/*\n                                              outer composite node (outer_node)\n                                     |-------------------------------------------------------------------|\n                                     |                                                                   |\n                                     |  |------------------|  |------------------|  |------------------| |\n             |---------------------| |--| inner composite  | /| inner composite  | /| inner composite  | | |-------------------|\n             |broadcast node(input)|/|  | node             |/ | node             |/ | node             |-+-| queue node(output)|\n             |---------------------|\\|  |(inner_node1)     |\\ | (inner_node2)    |\\ | (inner_node3)    | | |-------------------|\n                                     |--|                  | \\|                  | \\|                  | |\n                                     |  |------------------|  |------------------|  |------------------| |\n                                     |                                                                   |\n                                     |-------------------------------------------------------------------|\n\n*/\nint test_nested_adder(bool hidden=false) {\n    tbb::flow::graph g;\n    tbb::flow::composite_node<tbb::flow::tuple<int, int>, tbb::flow::tuple<int> > outer_node(g);\n    typedef tbb::flow::composite_node<tbb::flow::tuple<int, int>, tbb::flow::tuple<int> > base_type;\n    tbb::flow::broadcast_node<int> input(g);\n    tbb::flow::queue_node<int> output(g);\n\n    adder_node inner_node1(g, hidden);\n    adder_node inner_node2(g, hidden);\n    adder_node inner_node3(g, hidden);\n\n    outer_node.set_external_ports(base_type::input_ports_type(tbb::flow::input_port<0>(inner_node1), tbb::flow::input_port<1>(inner_node1)), base_type::output_ports_type(tbb::flow::output_port<0>(inner_node3)));\n\n    ASSERT(&tbb::flow::input_port<0>(outer_node) == &tbb::flow::input_port<0>(inner_node1), \"input port 0 of inner_node1 not bound to input port 0 in outer_node\");\n    ASSERT(&tbb::flow::input_port<1>(outer_node) == &tbb::flow::input_port<1>(inner_node1), \"input port 1 of inner_node1 not bound to input port 1 in outer_node\");\n    ASSERT(&tbb::flow::output_port<0>(outer_node) == &tbb::flow::output_port<0>(inner_node3), \"output port 0 of inner_node3 not bound to output port 0 in outer_node\");\n\n    tbb::flow::make_edge(input, tbb::flow::input_port<0>(outer_node)/*inner_node1*/);\n    tbb::flow::make_edge(input, tbb::flow::input_port<1>(outer_node)/*inner_node1*/);\n\n    tbb::flow::make_edge(inner_node1, tbb::flow::input_port<0>(inner_node2));\n    tbb::flow::make_edge(inner_node1, tbb::flow::input_port<1>(inner_node2));\n\n    tbb::flow::make_edge(inner_node2, tbb::flow::input_port<0>(inner_node3));\n    tbb::flow::make_edge(inner_node2, tbb::flow::input_port<1>(inner_node3));\n\n    tbb::flow::make_edge(outer_node/*inner_node3*/, output);\n\n    if(hidden)\n        outer_node.add_nodes(inner_node1, inner_node2, inner_node3);\n    else\n        outer_node.add_visible_nodes(inner_node1, inner_node2, inner_node3);\n\n    int out;\n    for (int i = 1; i < 200000; ++i) {\n        input.try_put(i);\n        g.wait_for_all();\n        output.try_get(out);\n        ASSERT(tbb::flow::output_port<0>(outer_node).try_get(out) == output.try_get(out), \"output from outer_node does not match output from graph\");\n        ASSERT(out == 8*i, \"output from outer_node not correct\");\n    }\n    g.wait_for_all();\n\n    return 0;\n}\n\ntemplate< typename T >\nclass prefix_node : public tbb::flow::composite_node< tbb::flow::tuple< T, T, T, T, T >, tbb::flow::tuple< T, T, T, T, T > > {\n    typedef tbb::flow::tuple< T, T, T, T, T > my_tuple_t;\npublic:\n    tbb::flow::join_node< my_tuple_t, tbb::flow::queueing > j;\n    tbb::flow::split_node< my_tuple_t > s;\nprivate:\n    tbb::flow::function_node< my_tuple_t, my_tuple_t > f;\n    typedef tbb::flow::composite_node< my_tuple_t, my_tuple_t > base_type;\n\n    struct f_body {\n        my_tuple_t operator()( const my_tuple_t &t ) {\n            return my_tuple_t( tbb::flow::get<0>(t),\n                               tbb::flow::get<0>(t) + tbb::flow::get<1>(t),\n                               tbb::flow::get<0>(t) + tbb::flow::get<1>(t) + tbb::flow::get<2>(t),\n                               tbb::flow::get<0>(t) + tbb::flow::get<1>(t) + tbb::flow::get<2>(t) + tbb::flow::get<3>(t),\n                               tbb::flow::get<0>(t) + tbb::flow::get<1>(t) + tbb::flow::get<2>(t) + tbb::flow::get<3>(t) + tbb::flow::get<4>(t) );\n        }\n    };\n\npublic:\n    prefix_node(tbb::flow::graph &g, bool hidden = false ) : base_type(g), j(g), s(g), f(g, tbb::flow::serial, f_body() ) {\n        tbb::flow::make_edge( j, f );\n        tbb::flow::make_edge( f, s );\n\n    typename base_type::input_ports_type input_tuple(tbb::flow::input_port<0>(j), tbb::flow::input_port<1>(j), tbb::flow::input_port<2>(j), tbb::flow::input_port<3>(j), tbb::flow::input_port<4>(j));\n\n    typename base_type::output_ports_type output_tuple(tbb::flow::output_port<0>(s), tbb::flow::output_port<1>(s), tbb::flow::output_port<2>(s), tbb::flow::output_port<3>(s), tbb::flow::output_port<4>(s));\n\n    base_type::set_external_ports(input_tuple, output_tuple);\n\n        if(hidden)\n            base_type::add_nodes(j,s,f);\n        else\n            base_type::add_visible_nodes(j,s,f);\n\n    }\n};\n\nint test_prefix(bool hidden = false) {\n    tbb::flow::graph g;\n    prefix_node<double> p(g, hidden);\n\n    ASSERT(&tbb::flow::get<0>(p.input_ports()) == &tbb::flow::input_port<0>(p.j), \"input port 0 of j is not bound to input port 0 of composite node p\");\n    ASSERT(&tbb::flow::input_port<1>(p.j) == &tbb::flow::input_port<1>(p.j), \"input port 1 of j is not bound to input port 1 of composite node p\");\n    ASSERT(&tbb::flow::get<2>(p.input_ports()) == &tbb::flow::input_port<2>(p.j), \"input port 2 of j is not bound to input port 2 of composite node p\");\n    ASSERT(&tbb::flow::input_port<3>(p.j) == &tbb::flow::input_port<3>(p.j), \"input port 3 of j is not bound to input port 3 of composite node p\");\n    ASSERT(&tbb::flow::get<4>(p.input_ports()) == &tbb::flow::input_port<4>(p.j), \"input port 4 of j is not bound to input port 4 of composite node p\");\n\n\n    ASSERT(&tbb::flow::get<0>(p.output_ports()) == &tbb::flow::output_port<0>(p.s), \"output port 0 of s is not bound to output port 0 of composite node p\");\n    ASSERT(&tbb::flow::output_port<1>(p.s) == &tbb::flow::output_port<1>(p.s), \"output port 1 of s is not bound to output port 1 of composite node p\");\n    ASSERT(&tbb::flow::get<2>(p.output_ports()) == &tbb::flow::output_port<2>(p.s), \"output port 2 of s is not bound to output port 2 of composite node p\");\n    ASSERT(&tbb::flow::output_port<3>(p.s) == &tbb::flow::output_port<3>(p.s), \"output port 3 of s is not bound to output port 3 of composite node p\");\n    ASSERT(&tbb::flow::get<4>(p.output_ports()) == &tbb::flow::output_port<4>(p.s), \"output port 4 of s is not bound to output port 4 of composite node p\");\n\n    std::vector< tbb::flow::queue_node<double> > v( 5, tbb::flow::queue_node<double>(g) );\n    tbb::flow::make_edge( tbb::flow::output_port<0>(p), v[0] );\n    tbb::flow::make_edge( tbb::flow::output_port<1>(p), v[1] );\n    tbb::flow::make_edge( tbb::flow::output_port<2>(p), v[2] );\n    tbb::flow::make_edge( tbb::flow::output_port<3>(p), v[3] );\n    tbb::flow::make_edge( tbb::flow::output_port<4>(p), v[4] );\n\n    for(  double offset = 1; offset < 10000; offset *= 10 ) {\n        tbb::flow::input_port<0>(p).try_put( offset );\n        tbb::flow::input_port<1>(p).try_put( offset + 1 );\n        tbb::flow::input_port<2>(p).try_put( offset + 2 );\n        tbb::flow::input_port<3>(p).try_put( offset + 3 );\n        tbb::flow::input_port<4>(p).try_put( offset + 4 );\n    }\n    g.wait_for_all();\n\n    double x;\n    while ( v[0].try_get(x) ) {\n        g.wait_for_all();\n        for ( int i = 1; i < 5; ++i ) {\n            v[i].try_get(x);\n            g.wait_for_all();\n        }\n    }\n    return 0;\n}\n\nstruct input_only_output_only_seq {\n    int operator()(int i){ return (i + 3) / 4 - 1;}\n};\n\nvoid input_only_output_only_composite(bool hidden) {\n    tbb::flow::graph g;\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > input_output(g, \"test_name\");\n#else\n    tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > input_output(g);\n#endif\n    typedef tbb::flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<> > input_only_composite;\n    typedef tbb::flow::composite_node<tbb::flow::tuple<>, tbb::flow::tuple<int> > output_only_composite;\n    typedef tbb::flow::source_node<int> src_type;\n    typedef tbb::flow::queue_node<int> q_type;\n    typedef tbb::flow::function_node<int, int> f_type;\n    typedef tbb::flow::sequencer_node<int> sequencer_type;\n\n    int num = 0;\n    int finish=1000;\n    int step = 4;\n\n    input_only_composite a_in(g);\n    output_only_composite a_out(g);\n\n    src_type src(g, src_body(finish, step), false);\n    q_type que(g);\n    f_type f(g, 1, passthru_body());\n\n    // Sequencer_node is needed, because serial function_node guarantees only serial body execution,\n    // not a sequential order of messages dispatch\n    sequencer_type seq(g, input_only_output_only_seq());\n\n    tbb::flow::tuple<f_type& > input_tuple(f);\n    a_in.set_external_ports(input_tuple);\n    ASSERT(&tbb::flow::get<0>(a_in.input_ports()) == &f, \"f not bound to input port 0 in composite_node a_in\");\n\n    tbb::flow::tuple<src_type&> output_tuple(src);\n    a_out.set_external_ports(output_tuple);\n    ASSERT(&tbb::flow::get<0>(a_out.output_ports()) == &src, \"src not bound to output port 0 in composite_node a_out\");\n\n    if(hidden) {\n        a_in.add_nodes(f, seq, que);\n        a_out.add_nodes(src);\n    } else {\n        a_in.add_visible_nodes(f, seq, que);\n        a_out.add_visible_nodes(src);\n    }\n\n    tbb::flow::make_edge(a_out, a_in);\n    tbb::flow::make_edge(f, seq);\n    tbb::flow::make_edge(seq, que);\n    src.activate();\n    g.wait_for_all();\n\n    for(int i = 1; i<finish/step; ++i) {\n        que.try_get(num);\n        ASSERT(num == 4*i - 3, \"number does not match position in sequence\");\n    }\n    g.wait_for_all();\n}\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\nint TestMain() {\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n    add_all_nodes();\n    test_tiny(false);\n    test_tiny(true);\n    test_adder(false);\n    test_adder(true);\n    test_nested_adder(true);\n    test_nested_adder(false);\n    test_prefix(false);\n    test_prefix(true);\n    input_only_output_only_composite(true);\n    input_only_output_only_composite(false);\n\n    return Harness::Done;\n#else\n    return Harness::Skipped;\n#endif\n\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_hash_map.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef TBB_USE_PERFORMANCE_WARNINGS\n#define TBB_USE_PERFORMANCE_WARNINGS 1\n#endif\n\n// Our tests usually include the header under test first.  But this test needs\n// to use the preprocessor to edit the identifier runtime_warning in concurrent_hash_map.h.\n// Hence we include a few other headers before doing the abusive edit.\n#include \"tbb/tbb_stddef.h\" /* Defines runtime_warning */\n#include \"harness_assert.h\" /* Prerequisite for defining hooked_warning */\n\n// The symbol internal::runtime_warning is normally an entry point into the TBB library.\n// Here for sake of testing, we define it to be hooked_warning, a routine peculiar to this unit test.\n#define runtime_warning hooked_warning\n\nstatic bool bad_hashing = false;\n\nnamespace tbb {\n    namespace internal {\n        static void hooked_warning( const char* /*format*/, ... ) {\n            ASSERT(bad_hashing, \"unexpected runtime_warning: bad hashing\");\n        }\n    } // namespace internal\n} // namespace tbb\n#define __TBB_EXTRA_DEBUG 1 // enables additional checks\n#include \"tbb/concurrent_hash_map.h\"\n\n// Restore runtime_warning as an entry point into the TBB library.\n#undef runtime_warning\n\nnamespace Jungle {\n    struct Tiger {};\n    size_t tbb_hasher( const Tiger& ) {return 0;}\n}\n\n#if !defined(_MSC_VER) || _MSC_VER>=1400 || __INTEL_COMPILER\nvoid test_ADL() {\n    tbb::tbb_hash_compare<Jungle::Tiger>::hash(Jungle::Tiger()); // Instantiation chain finds tbb_hasher via Argument Dependent Lookup\n}\n#endif\n\nstruct UserDefinedKeyType {\n};\n\nnamespace tbb {\n    // Test whether tbb_hash_compare can be partially specialized as stated in Reference manual.\n    template<> struct tbb_hash_compare<UserDefinedKeyType> {\n        size_t hash( UserDefinedKeyType ) const {return 0;}\n        bool equal( UserDefinedKeyType /*x*/, UserDefinedKeyType /*y*/ ) {return true;}\n    };\n}\n\n#include \"harness_runtime_loader.h\"\n\ntbb::concurrent_hash_map<UserDefinedKeyType,int> TestInstantiationWithUserDefinedKeyType;\n\n// Test whether a sufficient set of headers were included to instantiate a concurrent_hash_map. OSS Bug #120 (& #130):\n// http://www.threadingbuildingblocks.org/bug_desc.php?id=120\ntbb::concurrent_hash_map<std::pair<std::pair<int,std::string>,const char*>,int> TestInstantiation;\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness.h\"\n#include \"harness_allocator.h\"\n\nclass MyException : public std::bad_alloc {\npublic:\n    virtual const char *what() const throw() __TBB_override { return \"out of items limit\"; }\n    virtual ~MyException() throw() {}\n};\n\n/** Has tightly controlled interface so that we can verify\n    that concurrent_hash_map uses only the required interface. */\nclass MyKey {\nprivate:\n    void operator=( const MyKey&  );    // Deny access\n    int key;\n    friend class MyHashCompare;\n    friend class YourHashCompare;\npublic:\n    static MyKey make( int i ) {\n        MyKey result;\n        result.key = i;\n        return result;\n    }\n    int value_of() const {return key;}\n};\n//TODO: unify with Harness::Foo ?\ntbb::atomic<long> MyDataCount;\nlong MyDataCountLimit = 0;\n\nclass MyData {\nprotected:\n    friend class MyData2;\n    int data;\n    enum state_t {\n        LIVE=0x1234,\n        DEAD=0x5678\n    } my_state;\n    void operator=( const MyData& );    // Deny access\npublic:\n    MyData(int i = 0) {\n        my_state = LIVE;\n        data = i;\n        if(MyDataCountLimit && MyDataCount + 1 >= MyDataCountLimit)\n            __TBB_THROW( MyException() );\n        ++MyDataCount;\n    }\n    MyData( const MyData& other ) {\n        ASSERT( other.my_state==LIVE, NULL );\n        my_state = LIVE;\n        data = other.data;\n        if(MyDataCountLimit && MyDataCount + 1 >= MyDataCountLimit)\n            __TBB_THROW( MyException() );\n        ++MyDataCount;\n    }\n    ~MyData() {\n        --MyDataCount;\n        my_state = DEAD;\n    }\n    static MyData make( int i ) {\n        MyData result;\n        result.data = i;\n        return result;\n    }\n    int value_of() const {\n        ASSERT( my_state==LIVE, NULL );\n        return data;\n    }\n    void set_value( int i ) {\n        ASSERT( my_state==LIVE, NULL );\n        data = i;\n    }\n    bool operator==( const MyData& other ) const {\n        ASSERT( other.my_state==LIVE, NULL );\n        ASSERT( my_state==LIVE, NULL );\n        return data == other.data;\n    }\n};\n\nclass MyData2 : public MyData {\npublic:\n    MyData2( ) {}\n    MyData2( const MyData& other ) {\n        ASSERT( other.my_state==LIVE, NULL );\n        ASSERT( my_state==LIVE, NULL );\n        data = other.data;\n    }\n    void operator=( const MyData& other ) {\n        ASSERT( other.my_state==LIVE, NULL );\n        ASSERT( my_state==LIVE, NULL );\n        data = other.data;\n    }\n    void operator=( const MyData2& other ) {\n        ASSERT( other.my_state==LIVE, NULL );\n        ASSERT( my_state==LIVE, NULL );\n        data = other.data;\n    }\n    bool operator==( const MyData2& other ) const {\n        ASSERT( other.my_state==LIVE, NULL );\n        ASSERT( my_state==LIVE, NULL );\n        return data == other.data;\n    }\n};\n\nclass MyHashCompare {\npublic:\n    bool equal( const MyKey& j, const MyKey& k ) const {\n        return j.key==k.key;\n    }\n    unsigned long hash( const MyKey& k ) const {\n        return k.key;\n    }\n};\n\nclass YourHashCompare {\npublic:\n    bool equal( const MyKey& j, const MyKey& k ) const {\n        return j.key==k.key;\n    }\n    unsigned long hash( const MyKey& ) const {\n        return 1;\n    }\n};\n\ntypedef local_counting_allocator<std::allocator<MyData> > MyAllocator;\ntypedef tbb::concurrent_hash_map<MyKey,MyData,MyHashCompare,MyAllocator> MyTable;\ntypedef tbb::concurrent_hash_map<MyKey,MyData2,MyHashCompare> MyTable2;\ntypedef tbb::concurrent_hash_map<MyKey,MyData,YourHashCompare> YourTable;\n\ntemplate<typename MyTable>\ninline void CheckAllocator(MyTable &table, size_t expected_allocs, size_t expected_frees, bool exact = true) {\n    size_t items_allocated = table.get_allocator().items_allocated, items_freed = table.get_allocator().items_freed;\n    size_t allocations = table.get_allocator().allocations, frees = table.get_allocator().frees;\n    REMARK(\"checking allocators: items %u/%u, allocs %u/%u\\n\",\n            unsigned(items_allocated), unsigned(items_freed), unsigned(allocations), unsigned(frees) );\n    ASSERT( items_allocated == allocations, NULL); ASSERT( items_freed == frees, NULL);\n    if(exact) {\n        ASSERT( allocations == expected_allocs, NULL); ASSERT( frees == expected_frees, NULL);\n    } else {\n        ASSERT( allocations >= expected_allocs, NULL); ASSERT( frees >= expected_frees, NULL);\n        ASSERT( allocations - frees == expected_allocs - expected_frees, NULL );\n    }\n}\n\ninline bool UseKey( size_t i ) {\n    return (i&3)!=3;\n}\n\nstruct Insert {\n    static void apply( MyTable& table, int i ) {\n        if( UseKey(i) ) {\n            if( i&4 ) {\n                MyTable::accessor a;\n                table.insert( a, MyKey::make(i) );\n                if( i&1 )\n                    (*a).second.set_value(i*i);\n                else\n                    a->second.set_value(i*i);\n            } else\n                if( i&1 ) {\n                    MyTable::accessor a;\n                    table.insert( a, std::make_pair(MyKey::make(i), MyData(i*i)) );\n                    ASSERT( (*a).second.value_of()==i*i, NULL );\n                } else {\n                    MyTable::const_accessor ca;\n                    table.insert( ca, std::make_pair(MyKey::make(i), MyData(i*i)) );\n                    ASSERT( ca->second.value_of()==i*i, NULL );\n                }\n        }\n    }\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include \"test_container_move_support.h\"\ntypedef tbb::concurrent_hash_map<MyKey,Foo,MyHashCompare> DataStateTrackedTable;\n\nstruct RvalueInsert {\n    static void apply( DataStateTrackedTable& table, int i ) {\n        DataStateTrackedTable::accessor a;\n        ASSERT( (table.insert( a, std::make_pair(MyKey::make(i), Foo(i + 1)))),\"already present while should not ?\" );\n        ASSERT( (*a).second == i + 1, NULL );\n        ASSERT( (*a).second.state == Harness::StateTrackableBase::MoveInitialized, \"\");\n    }\n};\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\nstruct Emplace {\n    static void apply( DataStateTrackedTable& table, int i ) {\n        DataStateTrackedTable::accessor a;\n        ASSERT( (table.emplace( a, MyKey::make(i), (i + 1))),\"already present while should not ?\" );\n        ASSERT( (*a).second == i + 1, NULL );\n        ASSERT( (*a).second.state == Harness::StateTrackableBase::DirectInitialized, \"\");\n    }\n};\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\nstruct InsertInitList {\n    static void apply( MyTable& table, int i ) {\n        if ( UseKey( i ) ) {\n            // TODO: investigate why the following sequence causes an additional allocation sometimes:\n            // table.insert( MyTable::value_type( MyKey::make( i ), i*i ) );\n            // table.insert( MyTable::value_type( MyKey::make( i ), i*i+1 ) );\n            std::initializer_list<MyTable::value_type> il = { MyTable::value_type( MyKey::make( i ), i*i )/*, MyTable::value_type( MyKey::make( i ), i*i+1 ) */ };\n            table.insert( il );\n        }\n    }\n};\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\nstruct Find {\n    static void apply( MyTable& table, int i ) {\n        MyTable::accessor a;\n        const MyTable::accessor& ca = a;\n        bool b = table.find( a, MyKey::make(i) );\n        ASSERT( b==!a.empty(), NULL );\n        if( b ) {\n            if( !UseKey(i) )\n                REPORT(\"Line %d: unexpected key %d present\\n\",__LINE__,i);\n            AssertSameType( &*a, static_cast<MyTable::value_type*>(0) );\n            ASSERT( ca->second.value_of()==i*i, NULL );\n            ASSERT( (*ca).second.value_of()==i*i, NULL );\n            if( i&1 )\n                ca->second.set_value( ~ca->second.value_of() );\n            else\n                (*ca).second.set_value( ~ca->second.value_of() );\n        } else {\n            if( UseKey(i) )\n                REPORT(\"Line %d: key %d missing\\n\",__LINE__,i);\n        }\n    }\n};\n\nstruct FindConst {\n    static void apply( const MyTable& table, int i ) {\n        MyTable::const_accessor a;\n        const MyTable::const_accessor& ca = a;\n        bool b = table.find( a, MyKey::make(i) );\n        ASSERT( b==(table.count(MyKey::make(i))>0), NULL );\n        ASSERT( b==!a.empty(), NULL );\n        ASSERT( b==UseKey(i), NULL );\n        if( b ) {\n            AssertSameType( &*ca, static_cast<const MyTable::value_type*>(0) );\n            ASSERT( ca->second.value_of()==~(i*i), NULL );\n            ASSERT( (*ca).second.value_of()==~(i*i), NULL );\n        }\n    }\n};\n\ntbb::atomic<int> EraseCount;\n\nstruct Erase {\n    static void apply( MyTable& table, int i ) {\n        bool b;\n        if(i&4) {\n            if(i&8) {\n                MyTable::const_accessor a;\n                b = table.find( a, MyKey::make(i) ) && table.erase( a );\n            } else {\n                MyTable::accessor a;\n                b = table.find( a, MyKey::make(i) ) && table.erase( a );\n            }\n        } else\n            b = table.erase( MyKey::make(i) );\n        if( b ) ++EraseCount;\n        ASSERT( table.count(MyKey::make(i)) == 0, NULL );\n    }\n};\n\nstatic const int IE_SIZE = 2;\ntbb::atomic<YourTable::size_type> InsertEraseCount[IE_SIZE];\n\nstruct InsertErase  {\n    static void apply( YourTable& table, int i ) {\n        if ( i%3 ) {\n            int key = i%IE_SIZE;\n            if ( table.insert( std::make_pair(MyKey::make(key), MyData2()) ) )\n                ++InsertEraseCount[key];\n        } else {\n            int key = i%IE_SIZE;\n            if( i&1 ) {\n                YourTable::accessor res;\n                if(table.find( res, MyKey::make(key) ) && table.erase( res ) )\n                    --InsertEraseCount[key];\n            } else {\n                YourTable::const_accessor res;\n                if(table.find( res, MyKey::make(key) ) && table.erase( res ) )\n                    --InsertEraseCount[key];\n            }\n        }\n    }\n};\n\n// Test for the deadlock discussed at:\n// http://softwarecommunity.intel.com/isn/Community/en-US/forums/permalink/30253302/30253302/ShowThread.aspx#30253302\nstruct InnerInsert {\n    static void apply( YourTable& table, int i ) {\n        YourTable::accessor a1, a2;\n        if(i&1) __TBB_Yield();\n        table.insert( a1, MyKey::make(1) );\n        __TBB_Yield();\n        table.insert( a2, MyKey::make(1 + (1<<30)) ); // the same chain\n        table.erase( a2 ); // if erase by key it would lead to deadlock for single thread\n    }\n};\n\n#include \"harness_barrier.h\"\n// Test for the misuse of constness\nstruct FakeExclusive : NoAssign {\n    Harness::SpinBarrier& barrier;\n    YourTable& table;\n    FakeExclusive(Harness::SpinBarrier& b, YourTable&t) : barrier(b), table(t) {}\n    void operator()( int i ) const {\n        if(i) {\n            YourTable::const_accessor real_ca;\n            // const accessor on non-const table acquired as reader (shared)\n            ASSERT( table.find(real_ca,MyKey::make(1)), NULL );\n            barrier.wait(); // item can be erased\n            Harness::Sleep(10); // let it enter the erase\n            real_ca->second.value_of(); // check the state while holding accessor\n        } else {\n            YourTable::accessor fake_ca;\n            const YourTable &const_table = table;\n            // non-const accessor on const table acquired as reader (shared)\n            ASSERT( const_table.find(fake_ca,MyKey::make(1)), NULL );\n            barrier.wait(); // readers acquired\n            // can mistakenly remove the item while other readers still refers to it\n            table.erase( fake_ca );\n        }\n    }\n};\n\ntemplate<typename Op, typename MyTable>\nclass TableOperation: NoAssign {\n    MyTable& my_table;\npublic:\n    void operator()( const tbb::blocked_range<int>& range ) const {\n        for( int i=range.begin(); i!=range.end(); ++i )\n            Op::apply(my_table,i);\n    }\n    TableOperation( MyTable& table ) : my_table(table) {}\n};\n\ntemplate<typename Op, typename TableType>\nvoid DoConcurrentOperations( TableType& table, int n, const char* what, int nthread ) {\n    REMARK(\"testing %s with %d threads\\n\",what,nthread);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for( tbb::blocked_range<int>(0,n,100), TableOperation<Op,TableType>(table) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    REMARK(\"time for %s = %g with %d threads\\n\",what,(t1-t0).seconds(),nthread);\n}\n\n//! Test traversing the table with an iterator.\nvoid TraverseTable( MyTable& table, size_t n, size_t expected_size ) {\n    REMARK(\"testing traversal\\n\");\n    size_t actual_size = table.size();\n    ASSERT( actual_size==expected_size, NULL );\n    size_t count = 0;\n    bool* array = new bool[n];\n    memset( array, 0, n*sizeof(bool) );\n    const MyTable& const_table = table;\n    MyTable::const_iterator ci = const_table.begin();\n    for( MyTable::iterator i = table.begin(); i!=table.end(); ++i ) {\n        // Check iterator\n        int k = i->first.value_of();\n        ASSERT( UseKey(k), NULL );\n        ASSERT( (*i).first.value_of()==k, NULL );\n        ASSERT( 0<=k && size_t(k)<n, \"out of bounds key\" );\n        ASSERT( !array[k], \"duplicate key\" );\n        array[k] = true;\n        ++count;\n\n        // Check lower/upper bounds\n        std::pair<MyTable::iterator, MyTable::iterator> er = table.equal_range(i->first);\n        std::pair<MyTable::const_iterator, MyTable::const_iterator> cer = const_table.equal_range(i->first);\n        ASSERT(cer.first == er.first && cer.second == er.second, NULL);\n        ASSERT(cer.first == i, NULL);\n        ASSERT(std::distance(cer.first, cer.second) == 1, NULL);\n\n        // Check const_iterator\n        MyTable::const_iterator cic = ci++;\n        ASSERT( cic->first.value_of()==k, NULL );\n        ASSERT( (*cic).first.value_of()==k, NULL );\n    }\n    ASSERT( ci==const_table.end(), NULL );\n    delete[] array;\n    if( count!=expected_size ) {\n        REPORT(\"Line %d: count=%ld but should be %ld\\n\",__LINE__,long(count),long(expected_size));\n    }\n}\n\ntypedef tbb::atomic<unsigned char> AtomicByte;\n\ntemplate<typename RangeType>\nstruct ParallelTraverseBody: NoAssign {\n    const size_t n;\n    AtomicByte* const array;\n    ParallelTraverseBody( AtomicByte array_[], size_t n_ ) :\n        n(n_),\n        array(array_)\n    {}\n    void operator()( const RangeType& range ) const {\n        for( typename RangeType::iterator i = range.begin(); i!=range.end(); ++i ) {\n            int k = i->first.value_of();\n            ASSERT( 0<=k && size_t(k)<n, NULL );\n            ++array[k];\n        }\n    }\n};\n\nvoid Check( AtomicByte array[], size_t n, size_t expected_size ) {\n    if( expected_size )\n        for( size_t k=0; k<n; ++k ) {\n            if( array[k] != int(UseKey(k)) ) {\n                REPORT(\"array[%d]=%d != %d=UseKey(%d)\\n\",\n                       int(k), int(array[k]), int(UseKey(k)), int(k));\n                ASSERT(false,NULL);\n            }\n        }\n}\n\n//! Test travering the tabel with a parallel range\nvoid ParallelTraverseTable( MyTable& table, size_t n, size_t expected_size ) {\n    REMARK(\"testing parallel traversal\\n\");\n    ASSERT( table.size()==expected_size, NULL );\n    AtomicByte* array = new AtomicByte[n];\n\n    memset( static_cast<void*>(array), 0, n*sizeof(AtomicByte) );\n    MyTable::range_type r = table.range(10);\n    tbb::parallel_for( r, ParallelTraverseBody<MyTable::range_type>( array, n ));\n    Check( array, n, expected_size );\n\n    const MyTable& const_table = table;\n    memset( static_cast<void*>(array), 0, n*sizeof(AtomicByte) );\n    MyTable::const_range_type cr = const_table.range(10);\n    tbb::parallel_for( cr, ParallelTraverseBody<MyTable::const_range_type>( array, n ));\n    Check( array, n, expected_size );\n\n    delete[] array;\n}\n\nvoid TestInsertFindErase( int nthread ) {\n    int n=250000;\n\n    // compute m = number of unique keys\n    int m = 0;\n    for( int i=0; i<n; ++i )\n        m += UseKey(i);\n\n    MyAllocator a; a.items_freed = a.frees = 100;\n    ASSERT( MyDataCount==0, NULL );\n    MyTable table(a);\n    TraverseTable(table,n,0);\n    ParallelTraverseTable(table,n,0);\n    CheckAllocator(table, 0, 100);\n\n    int expected_allocs = 0, expected_frees = 100;\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    for ( int i = 0; i < 2; ++i ) {\n        if ( i==0 )\n            DoConcurrentOperations<InsertInitList, MyTable>( table, n, \"insert(std::initializer_list)\", nthread );\n        else\n#endif\n            DoConcurrentOperations<Insert, MyTable>( table, n, \"insert\", nthread );\n        ASSERT( MyDataCount == m, NULL );\n        TraverseTable( table, n, m );\n        ParallelTraverseTable( table, n, m );\n        expected_allocs += m;\n        CheckAllocator( table, expected_allocs, expected_frees );\n\n        DoConcurrentOperations<Find, MyTable>( table, n, \"find\", nthread );\n        ASSERT( MyDataCount == m, NULL );\n        CheckAllocator( table, expected_allocs, expected_frees );\n\n        DoConcurrentOperations<FindConst, MyTable>( table, n, \"find(const)\", nthread );\n        ASSERT( MyDataCount == m, NULL );\n        CheckAllocator( table, expected_allocs, expected_frees );\n\n        EraseCount = 0;\n        DoConcurrentOperations<Erase, MyTable>( table, n, \"erase\", nthread );\n        ASSERT( EraseCount == m, NULL );\n        ASSERT( MyDataCount == 0, NULL );\n        TraverseTable( table, n, 0 );\n        expected_frees += m;\n        CheckAllocator( table, expected_allocs, expected_frees );\n\n        bad_hashing = true;\n        table.clear();\n        bad_hashing = false;\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    }\n#endif\n\n    if(nthread > 1) {\n        YourTable ie_table;\n        for( int i=0; i<IE_SIZE; ++i )\n            InsertEraseCount[i] = 0;\n        DoConcurrentOperations<InsertErase,YourTable>(ie_table,n/2,\"insert_erase\",nthread);\n        for( int i=0; i<IE_SIZE; ++i )\n            ASSERT( InsertEraseCount[i]==ie_table.count(MyKey::make(i)), NULL );\n\n        DoConcurrentOperations<InnerInsert,YourTable>(ie_table,2000,\"inner insert\",nthread);\n        Harness::SpinBarrier barrier(nthread);\n        REMARK(\"testing erase on fake exclusive accessor\\n\");\n        NativeParallelFor( nthread, FakeExclusive(barrier, ie_table));\n    }\n}\n\nvolatile int Counter;\n\nclass AddToTable: NoAssign {\n    MyTable& my_table;\n    const int my_nthread;\n    const int my_m;\npublic:\n    AddToTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}\n    void operator()( int ) const {\n        for( int i=0; i<my_m; ++i ) {\n            // Busy wait to synchronize threads\n            int j = 0;\n            while( Counter<i ) {\n                if( ++j==1000000 ) {\n                    // If Counter<i after a million iterations, then we almost surely have\n                    // more logical threads than physical threads, and should yield in\n                    // order to let suspended logical threads make progress.\n                    j = 0;\n                    __TBB_Yield();\n                }\n            }\n            // Now all threads attempt to simultaneously insert a key.\n            int k;\n            {\n                MyTable::accessor a;\n                MyKey key = MyKey::make(i);\n                if( my_table.insert( a, key ) )\n                    a->second.set_value( 1 );\n                else\n                    a->second.set_value( a->second.value_of()+1 );\n                k = a->second.value_of();\n            }\n            if( k==my_nthread )\n                Counter=i+1;\n        }\n    }\n};\n\nclass RemoveFromTable: NoAssign {\n    MyTable& my_table;\n    const int my_nthread;\n    const int my_m;\npublic:\n    RemoveFromTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}\n    void operator()(int) const {\n        for( int i=0; i<my_m; ++i ) {\n            bool b;\n            if(i&4) {\n                if(i&8) {\n                    MyTable::const_accessor a;\n                    b = my_table.find( a, MyKey::make(i) ) && my_table.erase( a );\n                } else {\n                    MyTable::accessor a;\n                    b = my_table.find( a, MyKey::make(i) ) && my_table.erase( a );\n                }\n            } else\n                b = my_table.erase( MyKey::make(i) );\n            if( b ) ++EraseCount;\n        }\n    }\n};\n\n//! Test for memory leak in concurrent_hash_map (TR #153).\nvoid TestConcurrency( int nthread ) {\n    REMARK(\"testing multiple insertions/deletions of same key with %d threads\\n\", nthread);\n    {\n        ASSERT( MyDataCount==0, NULL );\n        MyTable table;\n        const int m = 1000;\n        Counter = 0;\n        tbb::tick_count t0 = tbb::tick_count::now();\n        NativeParallelFor( nthread, AddToTable(table,nthread,m) );\n        tbb::tick_count t1 = tbb::tick_count::now();\n        REMARK(\"time for %u insertions = %g with %d threads\\n\",unsigned(MyDataCount),(t1-t0).seconds(),nthread);\n        ASSERT( MyDataCount==m, \"memory leak detected\" );\n\n        EraseCount = 0;\n        t0 = tbb::tick_count::now();\n        NativeParallelFor( nthread, RemoveFromTable(table,nthread,m) );\n        t1 = tbb::tick_count::now();\n        REMARK(\"time for %u deletions = %g with %d threads\\n\",unsigned(EraseCount),(t1-t0).seconds(),nthread);\n        ASSERT( MyDataCount==0, \"memory leak detected\" );\n        ASSERT( EraseCount==m, \"return value of erase() is broken\" );\n\n        CheckAllocator(table, m, m, /*exact*/nthread <= 1);\n    }\n    ASSERT( MyDataCount==0, \"memory leak detected\" );\n}\n\nvoid TestTypes() {\n    AssertSameType( static_cast<MyTable::key_type*>(0), static_cast<MyKey*>(0) );\n    AssertSameType( static_cast<MyTable::mapped_type*>(0), static_cast<MyData*>(0) );\n    AssertSameType( static_cast<MyTable::value_type*>(0), static_cast<std::pair<const MyKey,MyData>*>(0) );\n    AssertSameType( static_cast<MyTable::accessor::value_type*>(0), static_cast<MyTable::value_type*>(0) );\n    AssertSameType( static_cast<MyTable::const_accessor::value_type*>(0), static_cast<const MyTable::value_type*>(0) );\n    AssertSameType( static_cast<MyTable::size_type*>(0), static_cast<size_t*>(0) );\n    AssertSameType( static_cast<MyTable::difference_type*>(0), static_cast<ptrdiff_t*>(0) );\n}\n\ntemplate<typename Iterator, typename T>\nvoid TestIteratorTraits() {\n    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );\n    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );\n    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );\n    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );\n    T x;\n    typename Iterator::reference xr = x;\n    typename Iterator::pointer xp = &x;\n    ASSERT( &xr==xp, NULL );\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAssignment( Iterator2 j ) {\n    Iterator1 i(j), k;\n    ASSERT( i==j, NULL ); ASSERT( !(i!=j), NULL );\n    k = j;\n    ASSERT( k==j, NULL ); ASSERT( !(k!=j), NULL );\n}\n\ntemplate<typename Range1, typename Range2>\nvoid TestRangeAssignment( Range2 r2 ) {\n    Range1 r1(r2); r1 = r2;\n}\n//------------------------------------------------------------------------\n// Test for copy constructor and assignment\n//------------------------------------------------------------------------\n\ntemplate<typename MyTable>\nstatic void FillTable( MyTable& x, int n ) {\n    for( int i=1; i<=n; ++i ) {\n        MyKey key( MyKey::make(-i) ); // hash values must not be specified in direct order\n        typename MyTable::accessor a;\n        bool b = x.insert(a,key);\n        ASSERT(b, NULL);\n        a->second.set_value( i*i );\n    }\n}\n\ntemplate<typename MyTable>\nstatic void CheckTable( const MyTable& x, int n ) {\n    ASSERT( x.size()==size_t(n), \"table is different size than expected\" );\n    ASSERT( x.empty()==(n==0), NULL );\n    ASSERT( x.size()<=x.max_size(), NULL );\n    for( int i=1; i<=n; ++i ) {\n        MyKey key( MyKey::make(-i) );\n        typename MyTable::const_accessor a;\n        bool b = x.find(a,key);\n        ASSERT( b, NULL );\n        ASSERT( a->second.value_of()==i*i, NULL );\n    }\n    int count = 0;\n    int key_sum = 0;\n    for( typename MyTable::const_iterator i(x.begin()); i!=x.end(); ++i ) {\n        ++count;\n        key_sum += -i->first.value_of();\n    }\n    ASSERT( count==n, NULL );\n    ASSERT( key_sum==n*(n+1)/2, NULL );\n}\n\nstatic void TestCopy() {\n    REMARK(\"testing copy\\n\");\n    MyTable t1;\n    for( int i=0; i<10000; i=(i<100 ? i+1 : i*3) ) {\n        MyDataCount = 0;\n\n        FillTable(t1,i);\n        // Do not call CheckTable(t1,i) before copying, it enforces rehashing\n\n        MyTable t2(t1);\n        // Check that copy constructor did not mangle source table.\n        CheckTable(t1,i);\n        swap(t1, t2);\n        CheckTable(t1,i);\n        ASSERT( !(t1 != t2), NULL );\n\n        // Clear original table\n        t2.clear();\n        swap(t2, t1);\n        CheckTable(t1,0);\n\n        // Verify that copy of t1 is correct, even after t1 is cleared.\n        CheckTable(t2,i);\n        t2.clear();\n        t1.swap( t2 );\n        CheckTable(t1,0);\n        CheckTable(t2,0);\n        ASSERT( MyDataCount==0, \"data leak?\" );\n    }\n}\n\nvoid TestAssignment() {\n    REMARK(\"testing assignment\\n\");\n    for( int i=0; i<1000; i=(i<30 ? i+1 : i*5) ) {\n        for( int j=0; j<1000; j=(j<30 ? j+1 : j*7) ) {\n            MyTable t1;\n            MyTable t2;\n            FillTable(t1,i);\n            FillTable(t2,j);\n            ASSERT( (t1 == t2) == (i == j), NULL );\n            CheckTable(t2,j);\n\n            MyTable& tref = t2=t1;\n            ASSERT( &tref==&t2, NULL );\n            ASSERT( t1 == t2, NULL );\n            CheckTable(t1,i);\n            CheckTable(t2,i);\n\n            t1.clear();\n            CheckTable(t1,0);\n            CheckTable(t2,i);\n            ASSERT( MyDataCount==i, \"data leak?\" );\n\n            t2.clear();\n            CheckTable(t1,0);\n            CheckTable(t2,0);\n            ASSERT( MyDataCount==0, \"data leak?\" );\n        }\n    }\n}\n\nvoid TestIteratorsAndRanges() {\n    REMARK(\"testing iterators compliance\\n\");\n    TestIteratorTraits<MyTable::iterator,MyTable::value_type>();\n    TestIteratorTraits<MyTable::const_iterator,const MyTable::value_type>();\n\n    MyTable v;\n    MyTable const &u = v;\n\n    TestIteratorAssignment<MyTable::const_iterator>( u.begin() );\n    TestIteratorAssignment<MyTable::const_iterator>( v.begin() );\n    TestIteratorAssignment<MyTable::iterator>( v.begin() );\n    // doesn't compile as expected: TestIteratorAssignment<typename V::iterator>( u.begin() );\n\n    // check for non-existing\n    ASSERT(v.equal_range(MyKey::make(-1)) == std::make_pair(v.end(), v.end()), NULL);\n    ASSERT(u.equal_range(MyKey::make(-1)) == std::make_pair(u.end(), u.end()), NULL);\n\n    REMARK(\"testing ranges compliance\\n\");\n    TestRangeAssignment<MyTable::const_range_type>( u.range() );\n    TestRangeAssignment<MyTable::const_range_type>( v.range() );\n    TestRangeAssignment<MyTable::range_type>( v.range() );\n    // doesn't compile as expected: TestRangeAssignment<typename V::range_type>( u.range() );\n\n    REMARK(\"testing construction and insertion from iterators range\\n\");\n    FillTable( v, 1000 );\n    MyTable2 t(v.begin(), v.end());\n    v.rehash();\n    CheckTable(t, 1000);\n    t.insert(v.begin(), v.end()); // do nothing\n    CheckTable(t, 1000);\n    t.clear();\n    t.insert(v.begin(), v.end()); // restore\n    CheckTable(t, 1000);\n\n    REMARK(\"testing comparison\\n\");\n    typedef tbb::concurrent_hash_map<MyKey,MyData2,YourHashCompare,MyAllocator> YourTable1;\n    typedef tbb::concurrent_hash_map<MyKey,MyData2,YourHashCompare> YourTable2;\n    YourTable1 t1;\n    FillTable( t1, 10 );\n    CheckTable(t1, 10 );\n    YourTable2 t2(t1.begin(), t1.end());\n    MyKey key( MyKey::make(-5) ); MyData2 data;\n    ASSERT(t2.erase(key), NULL);\n    YourTable2::accessor a;\n    ASSERT(t2.insert(a, key), NULL);\n    data.set_value(0);   a->second = data;\n    ASSERT( t1 != t2, NULL);\n    data.set_value(5*5); a->second = data;\n    ASSERT( t1 == t2, NULL);\n}\n\nvoid TestRehash() {\n    REMARK(\"testing rehashing\\n\");\n    MyTable w;\n    w.insert( std::make_pair(MyKey::make(-5), MyData()) );\n    w.rehash(); // without this, assertion will fail\n    MyTable::iterator it = w.begin();\n    int i = 0; // check for non-rehashed buckets\n    for( ; it != w.end(); i++ )\n        w.count( (it++)->first );\n    ASSERT( i == 1, NULL );\n    for( i=0; i<1000; i=(i<29 ? i+1 : i*2) ) {\n        for( int j=max(256+i, i*2); j<10000; j*=3 ) {\n            MyTable v;\n            FillTable( v, i );\n            ASSERT(int(v.size()) == i, NULL);\n            ASSERT(int(v.bucket_count()) <= j, NULL);\n            v.rehash( j );\n            ASSERT(int(v.bucket_count()) >= j, NULL);\n            CheckTable( v, i );\n        }\n    }\n}\n\n#if TBB_USE_EXCEPTIONS\nvoid TestExceptions() {\n    typedef local_counting_allocator<tbb::tbb_allocator<MyData2> > allocator_t;\n    typedef tbb::concurrent_hash_map<MyKey,MyData2,MyHashCompare,allocator_t> ThrowingTable;\n    enum methods {\n        zero_method = 0,\n        ctor_copy, op_assign, op_insert,\n        all_methods\n    };\n    REMARK(\"testing exception-safety guarantees\\n\");\n    ThrowingTable src;\n    FillTable( src, 1000 );\n    ASSERT( MyDataCount==1000, NULL );\n\n    try {\n        for(int t = 0; t < 2; t++) // exception type\n        for(int m = zero_method+1; m < all_methods; m++)\n        {\n            allocator_t a;\n            if(t) MyDataCountLimit = 101;\n            else a.set_limits(101);\n            ThrowingTable victim(a);\n            MyDataCount = 0;\n\n            try {\n                switch(m) {\n                case ctor_copy: {\n                        ThrowingTable acopy(src, a);\n                    } break;\n                case op_assign: {\n                        victim = src;\n                    } break;\n                case op_insert: {\n                        FillTable( victim, 1000 );\n                    } break;\n                default:;\n                }\n                ASSERT(false, \"should throw an exception\");\n            } catch(std::bad_alloc &e) {\n                MyDataCountLimit = 0;\n                size_t size = victim.size();\n                switch(m) {\n                case op_assign:\n                    ASSERT( MyDataCount==100, \"data leak?\" );\n                    ASSERT( size>=100, NULL );\n                    CheckAllocator(victim, 100+t, t);\n                    /* Falls through. */\n                case ctor_copy:\n                    CheckTable(src, 1000);\n                    break;\n                case op_insert:\n                    ASSERT( size==size_t(100-t), NULL );\n                    ASSERT( MyDataCount==100-t, \"data leak?\" );\n                    CheckTable(victim, 100-t);\n                    CheckAllocator(victim, 100, t);\n                    break;\n\n                default:; // nothing to check here\n                }\n                REMARK(\"Exception %d: %s\\t- ok ()\\n\", m, e.what());\n            }\n            catch ( ... ) {\n                ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unrecognized exception\" );\n            }\n        }\n    } catch(...) {\n        ASSERT(false, \"unexpected exception\");\n    }\n    src.clear(); MyDataCount = 0;\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include \"test_initializer_list.h\"\n\nstruct test_insert {\n    template<typename container_type, typename element_type>\n    static void do_test( std::initializer_list<element_type> il, container_type const& expected ) {\n        container_type vd;\n        vd.insert( il );\n        ASSERT( vd == expected, \"inserting with an initializer list failed\" );\n    }\n};\n\nvoid TestInitList(){\n    using namespace initializer_list_support_tests;\n    REMARK(\"testing initializer_list methods \\n\");\n\n    typedef tbb::concurrent_hash_map<int,int> ch_map_type;\n    std::initializer_list<ch_map_type::value_type> pairs_il = {{1,1},{2,2},{3,3},{4,4},{5,5}};\n\n    TestInitListSupportWithoutAssign<ch_map_type, test_insert>( pairs_il );\n    TestInitListSupportWithoutAssign<ch_map_type, test_insert>( {} );\n}\n#endif //if __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n#include \"test_range_based_for.h\"\n\nvoid TestRangeBasedFor(){\n    using namespace range_based_for_support_tests;\n\n    REMARK(\"testing range based for loop compatibility \\n\");\n    typedef tbb::concurrent_hash_map<int,int> ch_map;\n    ch_map a_ch_map;\n\n    const int sequence_length = 100;\n    for (int i = 1; i <= sequence_length; ++i){\n        a_ch_map.insert(ch_map::value_type(i,i));\n    }\n\n    ASSERT( range_based_for_accumulate(a_ch_map, pair_second_summer(), 0) == gauss_summ_of_int_sequence(sequence_length), \"incorrect accumulated value generated via range based for ?\");\n}\n#endif //if __TBB_RANGE_BASED_FOR_PRESENT\n\n#include \"harness_defs.h\"\n\n// The helper to run a test only when a default construction is present.\ntemplate <bool default_construction_present> struct do_default_construction_test {\n    template<typename FuncType> void operator() ( FuncType func ) const { func(); }\n};\ntemplate <> struct do_default_construction_test<false> {\n    template<typename FuncType> void operator()( FuncType ) const {}\n};\n\ntemplate <typename Table>\nclass test_insert_by_key : NoAssign {\n    typedef typename Table::value_type value_type;\n    Table &my_c;\n    const value_type &my_value;\npublic:\n    test_insert_by_key( Table &c, const value_type &value ) : my_c(c), my_value(value) {}\n    void operator()() const {\n        {\n            typename Table::accessor a;\n            ASSERT( my_c.insert( a, my_value.first ), NULL );\n            ASSERT( Harness::IsEqual()(a->first, my_value.first), NULL );\n            a->second = my_value.second;\n        } {\n            typename Table::const_accessor ca;\n            ASSERT( !my_c.insert( ca, my_value.first ), NULL );\n            ASSERT( Harness::IsEqual()(ca->first, my_value.first), NULL);\n            ASSERT( Harness::IsEqual()(ca->second, my_value.second), NULL);\n        }\n    }\n};\n\n#include <vector>\n#include <list>\n#include <algorithm>\n#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT\n#include <functional>\n#endif\n\ntemplate <typename Table, typename Iterator, typename Range = typename Table::range_type>\nclass test_range : NoAssign {\n    typedef typename Table::value_type value_type;\n    Table &my_c;\n    const std::list<value_type> &my_lst;\n    std::vector< tbb::atomic<bool> >& my_marks;\npublic:\n    test_range( Table &c, const std::list<value_type> &lst, std::vector< tbb::atomic<bool> > &marks ) : my_c(c), my_lst(lst), my_marks(marks) {\n        std::fill( my_marks.begin(), my_marks.end(), false );\n    }\n    void operator()( const Range &r ) const { do_test_range( r.begin(), r.end() ); }\n    void do_test_range( Iterator i, Iterator j ) const {\n        for ( Iterator it = i; it != j; ) {\n            Iterator it_prev = it++;\n            typename std::list<value_type>::const_iterator it2 = std::search( my_lst.begin(), my_lst.end(), it_prev, it, Harness::IsEqual() );\n            ASSERT( it2 != my_lst.end(), NULL );\n            typename std::list<value_type>::difference_type dist = std::distance( my_lst.begin(), it2 );\n            ASSERT( !my_marks[dist], NULL );\n            my_marks[dist] = true;\n        }\n    }\n};\n\ntemplate <bool default_construction_present, typename Table>\nclass check_value : NoAssign {\n    typedef typename Table::const_iterator const_iterator;\n    typedef typename Table::iterator iterator;\n    typedef typename Table::size_type size_type;\n    Table &my_c;\npublic:\n    check_value( Table &c ) : my_c(c) {}\n    void operator()(const typename Table::value_type &value ) {\n        const Table &const_c = my_c;\n        ASSERT( my_c.count( value.first ) == 1, NULL );\n        { // tests with a const accessor.\n            typename Table::const_accessor ca;\n            // find\n            ASSERT( my_c.find( ca, value.first ), NULL);\n            ASSERT( !ca.empty() , NULL);\n            ASSERT( Harness::IsEqual()(ca->first, value.first), NULL );\n            ASSERT( Harness::IsEqual()(ca->second, value.second), NULL );\n            // erase\n            ASSERT( my_c.erase( ca ), NULL );\n            ASSERT( my_c.count( value.first ) == 0, NULL );\n            // insert (pair)\n            ASSERT( my_c.insert( ca, value ), NULL);\n            ASSERT( Harness::IsEqual()(ca->first, value.first), NULL );\n            ASSERT( Harness::IsEqual()(ca->second, value.second), NULL );\n        } { // tests with a non-const accessor.\n            typename Table::accessor a;\n            // find\n            ASSERT( my_c.find( a, value.first ), NULL);\n            ASSERT( !a.empty() , NULL);\n            ASSERT( Harness::IsEqual()(a->first, value.first), NULL );\n            ASSERT( Harness::IsEqual()(a->second, value.second), NULL );\n            // erase\n            ASSERT( my_c.erase( a ), NULL );\n            ASSERT( my_c.count( value.first ) == 0, NULL );\n            // insert\n            ASSERT( my_c.insert( a, value ), NULL);\n            ASSERT( Harness::IsEqual()(a->first, value.first), NULL );\n            ASSERT( Harness::IsEqual()(a->second, value.second), NULL );\n        }\n        // erase by key\n        ASSERT( my_c.erase( value.first ), NULL );\n        ASSERT( my_c.count( value.first ) == 0, NULL );\n        do_default_construction_test<default_construction_present>()(test_insert_by_key<Table>( my_c, value ));\n        // insert by value\n        ASSERT( my_c.insert( value ) != default_construction_present, NULL );\n        // equal_range\n        std::pair<iterator,iterator> r1 = my_c.equal_range( value.first );\n        iterator r1_first_prev = r1.first++;\n        ASSERT( Harness::IsEqual()( *r1_first_prev, value ) && Harness::IsEqual()( r1.first, r1.second ), NULL );\n        std::pair<const_iterator,const_iterator> r2 = const_c.equal_range( value.first );\n        const_iterator r2_first_prev = r2.first++;\n        ASSERT( Harness::IsEqual()( *r2_first_prev, value ) && Harness::IsEqual()( r2.first, r2.second ), NULL );\n    }\n};\n\n#include \"tbb/task_scheduler_init.h\"\n\ntemplate <typename Value, typename U = Value>\nstruct CompareTables {\n    template <typename T>\n    static bool IsEqual( const T& t1, const T& t2 ) {\n        return (t1 == t2) && !(t1 != t2);\n    }\n};\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\ntemplate <typename U>\nstruct CompareTables< std::pair<const std::weak_ptr<U>, std::weak_ptr<U> > > {\n    template <typename T>\n    static bool IsEqual( const T&, const T& ) {\n        /* do nothing for std::weak_ptr */\n        return true;\n    }\n};\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n\ntemplate <bool default_construction_present, typename Table>\nvoid Examine( Table c, const std::list<typename Table::value_type> &lst) {\n    typedef const Table const_table;\n    typedef typename Table::const_iterator const_iterator;\n    typedef typename Table::iterator iterator;\n    typedef typename Table::value_type value_type;\n    typedef typename Table::size_type size_type;\n\n    ASSERT( !c.empty(), NULL );\n    ASSERT( c.size() == lst.size(), NULL );\n    ASSERT( c.max_size() >= c.size(), NULL );\n\n    const check_value<default_construction_present,Table> cv(c);\n    std::for_each( lst.begin(), lst.end(), cv );\n\n    std::vector< tbb::atomic<bool> > marks( lst.size() );\n\n    test_range<Table,iterator>( c, lst, marks ).do_test_range( c.begin(), c.end() );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    test_range<const_table,const_iterator>( c, lst, marks ).do_test_range( c.begin(), c.end() );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    tbb::task_scheduler_init init;\n\n    typedef typename Table::range_type range_type;\n    tbb::parallel_for( c.range(), test_range<Table,typename range_type::iterator,range_type>( c, lst, marks ) );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    const_table const_c = c;\n    ASSERT( CompareTables<value_type>::IsEqual( c, const_c ), NULL );\n\n    typedef typename const_table::const_range_type const_range_type;\n    tbb::parallel_for( c.range(), test_range<const_table,typename const_range_type::iterator,const_range_type>( const_c, lst, marks ) );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    const size_type new_bucket_count = 2*c.bucket_count();\n    c.rehash( new_bucket_count );\n    ASSERT( c.bucket_count() >= new_bucket_count, NULL );\n\n    Table c2;\n    typename std::list<value_type>::const_iterator begin5 = lst.begin();\n    std::advance( begin5, 5 );\n    c2.insert( lst.begin(), begin5 );\n    std::for_each( lst.begin(), begin5, check_value<default_construction_present, Table>( c2 ) );\n\n    c2.swap( c );\n    ASSERT( CompareTables<value_type>::IsEqual( c2, const_c ), NULL );\n    ASSERT( c.size() == 5, NULL );\n    std::for_each( lst.begin(), lst.end(), check_value<default_construction_present,Table>(c2) );\n\n    tbb::swap( c, c2 );\n    ASSERT( CompareTables<value_type>::IsEqual( c, const_c ), NULL );\n    ASSERT( c2.size() == 5, NULL );\n\n    c2.clear();\n    ASSERT( CompareTables<value_type>::IsEqual( c2, Table() ), NULL );\n\n    typename Table::allocator_type a = c.get_allocator();\n    value_type *ptr = a.allocate(1);\n    ASSERT( ptr, NULL );\n    a.deallocate( ptr, 1 );\n}\n\ntemplate <bool default_construction_present, typename Value>\nvoid TypeTester( const std::list<Value> &lst ) {\n    __TBB_ASSERT( lst.size() >= 5, \"Array should have at least 5 elements\" );\n    typedef typename Value::first_type first_type;\n    typedef typename Value::second_type second_type;\n    typedef tbb::concurrent_hash_map<first_type,second_type> ch_map;\n    // Construct an empty hash map.\n    ch_map c1;\n    c1.insert( lst.begin(), lst.end() );\n    Examine<default_construction_present>( c1, lst );\n#if __TBB_INITIALIZER_LISTS_PRESENT && !__TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n    // Constructor from initializer_list.\n    typename std::list<Value>::const_iterator it = lst.begin();\n    ch_map c2( {*it++, *it++, *it++} );\n    c2.insert( it, lst.end() );\n    Examine<default_construction_present>( c2, lst );\n#endif\n    // Copying constructor.\n    ch_map c3(c1);\n    Examine<default_construction_present>( c3, lst );\n    // Construct with non-default allocator\n    typedef tbb::concurrent_hash_map< first_type,second_type,tbb::tbb_hash_compare<first_type>,debug_allocator<Value> > ch_map_debug_alloc;\n    ch_map_debug_alloc c4;\n    c4.insert( lst.begin(), lst.end() );\n    Examine<default_construction_present>( c4, lst );\n    // Copying constructor for vector with different allocator type.\n    ch_map_debug_alloc c5(c4);\n    Examine<default_construction_present>( c5, lst );\n    // Construction empty table with n preallocated buckets.\n    ch_map c6( lst.size() );\n    c6.insert( lst.begin(), lst.end() );\n    Examine<default_construction_present>( c6, lst );\n    ch_map_debug_alloc c7( lst.size() );\n    c7.insert( lst.begin(), lst.end() );\n    Examine<default_construction_present>( c7, lst );\n    // Construction with copying iteration range and given allocator instance.\n    ch_map c8( c1.begin(), c1.end() );\n    Examine<default_construction_present>( c8, lst );\n    debug_allocator<Value> allocator;\n    ch_map_debug_alloc c9( lst.begin(), lst.end(), allocator );\n    Examine<default_construction_present>( c9, lst );\n}\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\nnamespace tbb {\n    template<> struct tbb_hash_compare< const std::shared_ptr<int> > {\n        static size_t hash( const std::shared_ptr<int>& ptr ) { return static_cast<size_t>( *ptr ) * interface5::internal::hash_multiplier; }\n        static bool equal( const  std::shared_ptr<int>& ptr1, const  std::shared_ptr<int>& ptr2 ) { return ptr1 == ptr2; }\n    };\n    template<> struct tbb_hash_compare< const std::weak_ptr<int> > {\n        static size_t hash( const std::weak_ptr<int>& ptr ) { return static_cast<size_t>( *ptr.lock() ) * interface5::internal::hash_multiplier; }\n        static bool equal( const std::weak_ptr<int>& ptr1, const  std::weak_ptr<int>& ptr2 ) { return ptr1.lock() == ptr2.lock(); }\n    };\n}\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n\nvoid TestCPP11Types() {\n    const int NUMBER = 10;\n\n    typedef std::pair<const int, int> int_int_t;\n    std::list<int_int_t> arrIntInt;\n    for ( int i=0; i<NUMBER; ++i ) arrIntInt.push_back( int_int_t(i, NUMBER-i) );\n    TypeTester</*default_construction_present = */true>( arrIntInt );\n\n#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN\n    typedef std::pair<const std::reference_wrapper<const int>, int> ref_int_t;\n    std::list<ref_int_t> arrRefInt;\n    for ( std::list<int_int_t>::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it )\n        arrRefInt.push_back( ref_int_t( it->first, it->second ) );\n    TypeTester</*default_construction_present = */true>( arrRefInt );\n\n    typedef std::pair< const int, std::reference_wrapper<int> > int_ref_t;\n    std::list<int_ref_t> arrIntRef;\n    for ( std::list<int_int_t>::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it )\n        arrIntRef.push_back( int_ref_t( it->first, it->second ) );\n    TypeTester</*default_construction_present = */false>( arrIntRef );\n#else\n    REPORT(\"Known issue: C++11 reference wrapper tests are skipped.\\n\");\n#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN*/\n\n    typedef std::pair< const int, tbb::atomic<int> > int_tbb_t;\n    std::list<int_tbb_t> arrIntTbb;\n    for ( int i=0; i<NUMBER; ++i ) {\n        tbb::atomic<int> b;\n        b = NUMBER-i;\n        arrIntTbb.push_back( int_tbb_t(i, b) );\n    }\n    TypeTester</*default_construction_present = */true>( arrIntTbb );\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    typedef std::pair< const std::shared_ptr<int>, std::shared_ptr<int> > shr_shr_t;\n    std::list<shr_shr_t> arrShrShr;\n    for ( int i=0; i<NUMBER; ++i ) {\n        const int NUMBER_minus_i = NUMBER - i;\n        arrShrShr.push_back( shr_shr_t( std::make_shared<int>(i), std::make_shared<int>(NUMBER_minus_i) ) );\n    }\n    TypeTester< /*default_construction_present = */true>( arrShrShr );\n\n    typedef std::pair< const std::weak_ptr<int>, std::weak_ptr<int> > wk_wk_t;\n    std::list< wk_wk_t > arrWkWk;\n    std::copy( arrShrShr.begin(), arrShrShr.end(), std::back_inserter(arrWkWk) );\n    TypeTester< /*default_construction_present = */true>( arrWkWk );\n#else\n    REPORT(\"Known issue: C++11 smart pointer tests are skipped.\\n\");\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n\nstruct hash_map_move_traits : default_container_traits {\n    enum{ expected_number_of_items_to_allocate_for_steal_move = 0 };\n\n    template<typename T>\n    struct hash_compare {\n        bool equal( const T& lhs, const T& rhs ) const {\n            return lhs==rhs;\n        }\n        size_t hash( const T& k ) const {\n            return tbb::tbb_hasher(k);\n        }\n    };\n    template<typename element_type, typename allocator_type>\n    struct apply {\n        typedef tbb::concurrent_hash_map<element_type, element_type, hash_compare<element_type>, allocator_type > type;\n    };\n\n    typedef FooPairIterator init_iterator_type;\n    template<typename hash_map_type, typename iterator>\n    static bool equal(hash_map_type const& c, iterator begin, iterator end){\n        bool equal_sizes = ( static_cast<size_t>(std::distance(begin, end)) == c.size() );\n        if (!equal_sizes)\n            return false;\n\n        for (iterator it = begin; it != end; ++it ){\n            if (c.count( (*it).first) == 0){\n                return false;\n            }\n        }\n        return true;\n    }\n};\n\nvoid TestMoveSupport(){\n    TestMoveConstructor<hash_map_move_traits>();\n    TestConstructorWithMoveIterators<hash_map_move_traits>();\n    TestMoveAssignOperator<hash_map_move_traits>();\n#if TBB_USE_EXCEPTIONS\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure<hash_map_move_traits>();\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor<hash_map_move_traits>();\n#else\n    REPORT(\"Known issue: exception safety tests for C++11 move semantics support are skipped.\\n\");\n#endif //TBB_USE_EXCEPTIONS\n}\n#else\nvoid TestMoveSupport(){\n    REPORT(\"Known issue: tests for C++11 move semantics support are skipped.\\n\");\n}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n//------------------------------------------------------------------------\n// Test driver\n//------------------------------------------------------------------------\nint TestMain () {\n    if( MinThread<0 ) {\n        REPORT(\"ERROR: must use at least one thread\\n\");\n        exit(1);\n    }\n    if( MaxThread<2 ) MaxThread=2;\n\n    // Do serial tests\n    TestTypes();\n    TestCopy();\n    TestRehash();\n    TestAssignment();\n    TestIteratorsAndRanges();\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    TestInitList();\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n    TestRangeBasedFor();\n#endif //#if __TBB_RANGE_BASED_FOR_PRESENT\n\n#if TBB_USE_EXCEPTIONS\n    TestExceptions();\n#endif /* TBB_USE_EXCEPTIONS */\n\n    TestMoveSupport();\n    {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb::task_scheduler_init init( 1 );\n        int n=250000;\n        {\n            DataStateTrackedTable table;\n            DoConcurrentOperations<RvalueInsert, DataStateTrackedTable>( table, n, \"rvalue ref insert\", 1 );\n        }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n        {\n            DataStateTrackedTable table;\n            DoConcurrentOperations<Emplace, DataStateTrackedTable>( table, n, \"emplace\", 1 );\n        }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n    }\n\n    // Do concurrency tests.\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        tbb::task_scheduler_init init( nthread );\n        TestInsertFindErase( nthread );\n        TestConcurrency( nthread );\n    }\n    // check linking\n    if(bad_hashing) { //should be false\n        tbb::internal::runtime_warning(\"none\\nERROR: it must not be executed\");\n    }\n\n    TestCPP11Types();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_lru_cache.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER\n    #pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#ifdef TEST_COARSE_GRAINED_LOCK_IMPLEMENTATION\n    #include \"../perf/coarse_grained_raii_lru_cache.h\"\n    #define selected_raii_lru_cache_impl coarse_grained_raii_lru_cache\n#else\n    #define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1\n    #include \"tbb/concurrent_lru_cache.h\"\n    #define selected_raii_lru_cache_impl tbb::concurrent_lru_cache\n#endif\n\n#include \"harness_test_cases_framework.h\"\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n\n#include <utility>\n\n#include \"tbb/task_scheduler_init.h\"\n\nnamespace helpers{\n    // Busy work and calibration helpers\n    unsigned int one_us_iters = 345; // default value\n\n    // if user wants to calibrate to microseconds on particular machine, call\n    // this at beginning of program; sets one_us_iters to number of iters to\n    // busy_wait for approx. 1 us\n//    void calibrate_busy_wait() {\n//        tbb::tick_count t0, t1;\n//\n//        t0 = tbb::tick_count::now();\n//        for (volatile unsigned int i=0; i<1000000; ++i) continue;\n//        t1 = tbb::tick_count::now();\n//\n//        one_us_iters = (unsigned int)((1000000.0/(t1-t0).seconds())*0.000001);\n//        printf(\"one_us_iters: %d\\n\", one_us_iters);\n//    }\n    void busy_wait(int us)\n    {\n        unsigned int iter = us*one_us_iters;\n        for (volatile unsigned int i=0; i<iter; ++i) continue;\n    }\n}\nnamespace helpers{\n    template<class T> void ignore( const T& ) { }\n    //TODO: add test cases for prevent_optimizing_out function\n    template<typename type>\n    void prevent_optimizing_out(type volatile const& s){\n        volatile const type* dummy = &s;\n        ignore(dummy);\n    }\n\n    struct empty_fixture{};\n\n    template<typename argument_type>\n    struct native_for_concurrent_op_repeated:NoAssign{\n        typedef void (*test_function_pointer_type)(argument_type&);\n\n        argument_type& m_counter_ref;\n        test_function_pointer_type m_test_function_pointer_type;\n        std::size_t m_repeat_number;\n        native_for_concurrent_op_repeated(argument_type& counter_ref, test_function_pointer_type action, std::size_t repeat_number)\n            :m_counter_ref(counter_ref), m_test_function_pointer_type(action), m_repeat_number(repeat_number)\n        {}\n        template <typename ignored_parameter_type>\n        void operator()(ignored_parameter_type const&)const{\n            for (size_t i=0; i<m_repeat_number;++i){\n                m_test_function_pointer_type(m_counter_ref);\n            }\n        }\n\n    };\n\n    template <typename counter_type = size_t>\n    struct object_instances_counting_type{\n        counter_type * m_p_count;\n        object_instances_counting_type(): m_p_count (new counter_type){*m_p_count =1; } //to overcome absence of constructor in tbb::atomic\n        ~object_instances_counting_type(){ if (! --(*m_p_count)){delete(m_p_count);}}\n        object_instances_counting_type(object_instances_counting_type const& other): m_p_count(other.m_p_count){\n            ++(*m_p_count);\n        }\n        object_instances_counting_type& operator=(object_instances_counting_type other){\n            std::swap(this->m_p_count,other.m_p_count);\n            return *this;\n        }\n        size_t instances_count()const {return *m_p_count;}\n    };\n    typedef object_instances_counting_type<> object_instances_counting_serial_type;\n    typedef object_instances_counting_type<tbb::atomic<std::size_t> > object_instances_counting_concurrent_type;\n\n    namespace object_instances_counting_type_test_cases{\n        namespace serial_tests{\n            TEST_CASE_WITH_FIXTURE(test_object_instances_counting_type_creation,empty_fixture){\n                ASSERT(object_instances_counting_serial_type().instances_count()==1,\"newly created instance by definition has instances_count equal to 1\");\n            }\n            TEST_CASE_WITH_FIXTURE(test_object_instances_counting_type_copy,empty_fixture){\n                object_instances_counting_serial_type source;\n                ASSERT(object_instances_counting_serial_type(source).instances_count()==2,\"copy should increase ref count\");\n            }\n            TEST_CASE_WITH_FIXTURE(test_object_instances_counting_type_assignment,empty_fixture){\n                object_instances_counting_serial_type source;\n                object_instances_counting_serial_type assigned;\n                assigned = source;\n                ASSERT(source.instances_count()==2,\"assign should increase ref count\");\n                ASSERT(assigned.instances_count()==2,\"assign should increase ref count\");\n            }\n        }\n        namespace concurrent_tests{\n            typedef native_for_concurrent_op_repeated<object_instances_counting_concurrent_type>  native_for_concurrent_op;\n\n            struct native_for_single_op_repeated_fixture{\n                object_instances_counting_concurrent_type source;\n                void run_native_for_and_assert_source_is_unique(native_for_concurrent_op::test_function_pointer_type operation,const char* msg){\n                    //TODO: refactor number of threads into separate fixture\n                    const size_t number_of_threads = min(4,tbb::task_scheduler_init::default_num_threads());\n                    const size_t repeats_per_thread = 1000000;\n\n                    NativeParallelFor(number_of_threads , native_for_concurrent_op(source,operation,repeats_per_thread));\n                    ASSERT(source.instances_count()==1,msg);\n                }\n\n            };\n            TEST_CASE_WITH_FIXTURE(test_object_instances_counting_type_copy,native_for_single_op_repeated_fixture){\n                struct _{ static void copy(object_instances_counting_concurrent_type& a_source){\n                    object_instances_counting_concurrent_type copy(a_source);\n                    helpers::prevent_optimizing_out(copy);\n                }};\n                run_native_for_and_assert_source_is_unique(&_::copy,\"reference counting during copy construction/destruction is not thread safe ?\");\n            }\n            TEST_CASE_WITH_FIXTURE(test_object_instances_counting_type_assignment,native_for_single_op_repeated_fixture){\n                struct _{ static void assign(object_instances_counting_concurrent_type& a_source){\n                    object_instances_counting_concurrent_type assigned;\n                    assigned = a_source;\n                    helpers::prevent_optimizing_out(assigned);\n                }};\n                run_native_for_and_assert_source_is_unique(&_::assign,\"reference counting during assigning/destruction is not thread safe ?\");\n            }\n\n        }\n}\n}\n\nstruct get_lru_cache_type{\n\n    template< typename parameter1, typename parameter2, typename parameter3=void>\n    struct apply{\n        typedef selected_raii_lru_cache_impl<parameter1,parameter2,parameter3> type;\n    };\n    template< typename parameter1, typename parameter2>\n    struct apply<parameter1,parameter2,void>{\n        typedef selected_raii_lru_cache_impl<parameter1,parameter2> type;\n    };\n\n};\n\n// these includes are needed for test_task_handle_mv_sem*\n#include <vector>\n#include <string>\n#include <functional>\n\nnamespace serial_tests{\n    using namespace helpers;\n    namespace usability{\n    namespace compilation_only{\n        TEST_CASE_WITH_FIXTURE(test_creation_and_use_interface,empty_fixture){\n            struct dummy_function{static int _(int key){return key;}};\n            typedef get_lru_cache_type::apply<int,int>::type cache_type;\n            size_t number_of_lru_history_items = 8;\n            cache_type cache((&dummy_function::_),(number_of_lru_history_items));\n            int dummy_key=0;\n            cache_type::handle h = cache[dummy_key];\n            int value = h.value();\n            (void)value;\n        }\n    }\n    namespace behaviour {\n        namespace helpers {\n            template <size_t id> struct tag {};\n            template< typename tag, typename value_and_key_type>\n            struct call_counting_function {\n                static int calls_count;\n                static value_and_key_type _(value_and_key_type key) {\n                    ++calls_count;\n                    return key;\n                }\n            };\n            template< typename tag, typename value_and_key_type>\n            int call_counting_function<tag, value_and_key_type>::calls_count = 0;\n        }\n\n        using std::string;\n        struct mv_sem_fixture {\n            struct item_init{\n                static string init(string key) {\n                    return key;\n                }\n            };\n            typedef tbb::concurrent_lru_cache<string, string> cache_type;\n            typedef cache_type::handle handle_type;\n            cache_type cache;\n            mv_sem_fixture() : cache((&item_init::init), 1) {};\n\n            handle_type default_ctor_check;\n        };\n\n        TEST_CASE_WITH_FIXTURE(test_task_handle_mv_sem, mv_sem_fixture) {\n            handle_type handle;\n            handle_type foobar = handle_type();\n\n            //c++03 : handle_move_t assignment\n            handle = cache[\"handle\"];\n\n            //c++03 : init ctor from handle_move_t\n            handle_type foo = cache[\"bar\"];\n\n            //c++03 : init ctor from handle_move_t\n            handle_type handle1(move(handle));\n\n            //c++03 : handle_move_t assignment\n            handle = move(handle1);\n\n            ASSERT(!handle_type(), \"user-defined to-bool conversion does not work\");\n            ASSERT(handle, \"user-defined to-bool conversion does not work\");\n\n            handle = handle_type();\n        }\n\n        TEST_CASE_WITH_FIXTURE(test_task_handle_mv_sem_certain_case, mv_sem_fixture) {\n            // there is no way to use handle_object as vector argument in C++03\n            // because argument must meet requirements of CopyAssignable and\n            // CopyConstructible (C++ documentation)\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n            // retain handle_object to keep an item in the cache if it is still active without aging\n            handle_type sheep = cache[\"sheep\"];\n            handle_type horse = cache[\"horse\"];\n            handle_type bull = cache[\"bull\"];\n\n            std::vector<handle_type> animals;\n            animals.reserve(5);\n            animals.emplace_back(std::move(sheep));\n            animals.emplace_back(std::move(horse));\n            animals[0] = std::move(bull);\n            // after resize() vec will be full of default constructed handlers with null pointers\n            // on item in cache and on cache which item belongs to\n            animals.resize(10);\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n        }\n\n        TEST_CASE_WITH_FIXTURE(test_cache_returns_only_values_from_value_function,empty_fixture){\n            struct dummy_function{static int _(int /*key*/){return 0xDEADBEEF;}};\n            typedef get_lru_cache_type::apply<int,int>::type cache_type;\n            size_t number_of_lru_history_items = 8;\n            int dummy_key=1;\n            cache_type cache((&dummy_function::_),(number_of_lru_history_items));\n            ASSERT(dummy_function::_(dummy_key)==cache[dummy_key].value(),\"cache operator() must return only values obtained from value_function \");\n        }\n\n        TEST_CASE_WITH_FIXTURE(test_value_function_called_only_on_cache_miss,empty_fixture){\n            typedef helpers::tag<__LINE__> tag;\n            typedef helpers::call_counting_function<tag,int> function;\n            typedef get_lru_cache_type::apply<int,int>::type cache_type;\n            size_t number_of_lru_history_items = 8;\n            cache_type cache((&function::_),(number_of_lru_history_items));\n\n            int dummy_key=0;\n            cache[dummy_key];\n            cache[dummy_key];\n            ASSERT(function::calls_count==1,\"value function should be called only on a cache miss\");\n        }\n        }\n        namespace helpers{\n            using ::helpers::object_instances_counting_serial_type;\n        }\n        namespace helpers{\n            template<typename value_type>\n            struct clonning_function:NoAssign{\n                value_type& m_ref_original;\n                clonning_function(value_type& ref_original):m_ref_original(ref_original){}\n                template<typename key_type>\n                value_type operator()(key_type)const{ return m_ref_original;}\n            };\n        }\n        struct instance_counting_fixture{\n            static const size_t number_of_lru_history_items = 8;\n\n            typedef helpers::clonning_function<helpers::object_instances_counting_serial_type> cloner_type;\n            typedef get_lru_cache_type::apply<size_t,helpers::object_instances_counting_serial_type,cloner_type>::type cache_type;\n            helpers::object_instances_counting_serial_type source;\n            cloner_type cloner;\n            cache_type cache;\n\n            instance_counting_fixture():cloner((source)),cache(cloner,number_of_lru_history_items){}\n        };\n\n        TEST_CASE_WITH_FIXTURE(test_cache_stores_unused_objects,instance_counting_fixture){\n            for (size_t i=0;i<number_of_lru_history_items;++i){\n                cache[i];\n            }\n            ASSERT(source.instances_count()> 1,\"cache should store some unused objects \");\n        }\n\n        TEST_CASE_WITH_FIXTURE(test_cache_stores_no_more_then_X_number_of_unused_objects,instance_counting_fixture){\n            for (size_t i=0;i<number_of_lru_history_items+1;++i){\n                cache[i];\n            }\n            ASSERT(source.instances_count()== number_of_lru_history_items+1,\"cache should respect number of stored unused objects to number passed in constructor\");\n        }\n\n        namespace helpers{\n            template< typename key_type, typename value_type>\n            struct map_searcher:NoAssign{\n                typedef std::map<key_type,value_type> map_type;\n                map_type & m_map_ref;\n                map_searcher(map_type & map_ref): m_map_ref(map_ref) {}\n                value_type& operator()(key_type k){\n                    typename map_type::iterator it =m_map_ref.find(k);\n                    if (it==m_map_ref.end()){\n                        it = m_map_ref.insert(it,std::make_pair(k,value_type()));\n                    }\n                    return it->second;\n                }\n            };\n        }\n\n        struct filled_instance_counting_fixture_with_external_map{\n            static const size_t number_of_lru_history_items = 8;\n\n            typedef helpers::map_searcher<size_t,helpers::object_instances_counting_serial_type> map_searcher_type;\n            typedef map_searcher_type::map_type objects_map_type;\n            typedef get_lru_cache_type::apply<size_t,helpers::object_instances_counting_serial_type,map_searcher_type>::type cache_type;\n            map_searcher_type::map_type objects_map;\n            cache_type cache;\n            filled_instance_counting_fixture_with_external_map():cache(map_searcher_type(objects_map),number_of_lru_history_items){}\n            bool is_evicted(size_t k){\n                objects_map_type::iterator it =objects_map.find(k);\n                ASSERT(it!=objects_map.end(),\"no value for key - error in test logic ?\");\n                return it->second.instances_count()==1;\n            }\n            void fill_up_cache(size_t lower_bound, size_t upper_bound){\n                for (size_t i=lower_bound;i<upper_bound;++i){\n                    cache[i];\n                }\n            }\n        };\n\n        TEST_CASE_WITH_FIXTURE(test_cache_should_evict_unused_objects_lru_order,filled_instance_counting_fixture_with_external_map){\n            ASSERT(number_of_lru_history_items > 2,\"incorrect test setup\");\n            fill_up_cache(0,number_of_lru_history_items);\n            //heat up first element\n            cache[0];\n            //cause eviction\n            cache[number_of_lru_history_items];\n            ASSERT(is_evicted(1) && !is_evicted(0),\"cache should evict items in lru order\");\n        }\n\n        TEST_CASE_WITH_FIXTURE(test_live_handler_object_prevents_item_from_eviction,filled_instance_counting_fixture_with_external_map){\n            cache_type::handle h = cache[0];\n            //cause eviction\n            fill_up_cache(1,number_of_lru_history_items+2);\n            ASSERT(is_evicted(1) && !is_evicted(0),\"cache should not evict items in use\");\n        }\n        TEST_CASE_WITH_FIXTURE(test_live_handler_object_is_ref_counted,filled_instance_counting_fixture_with_external_map){\n            cache_type::handle h = cache[0];\n            {\n                cache_type::handle h1 = cache[0];\n            }\n            //cause eviction\n            fill_up_cache(1,number_of_lru_history_items+2);\n            ASSERT(is_evicted(1) && !is_evicted(0),\"cache should not evict items in use\");\n        }\n    }\n}\n\n\nnamespace concurrency_tests{\n    namespace helpers{\n        using namespace ::helpers;\n    }\n    namespace helpers{\n        //key_type must be convertible to array index\n        template< typename key_type, typename value_type, size_t array_size>\n        struct array_searcher:NoAssign{\n            typedef value_type array_type[array_size];\n            array_type const& m_array_ref;\n            array_searcher(array_type const& array_ref): m_array_ref(array_ref) {}\n            const value_type& operator()(key_type k)const{\n                size_t index = k;\n                ASSERT(k < array_size,\"incorrect test setup\");\n                return m_array_ref[index];\n            }\n        };\n    }\n\n    struct filled_instance_counting_fixture_with_external_array{\n        static const size_t number_of_lru_history_items = 8;\n        static const size_t array_size = 16*number_of_lru_history_items;\n\n        typedef helpers::array_searcher<size_t,helpers::object_instances_counting_concurrent_type,array_size> array_searcher_type;\n        typedef array_searcher_type::array_type objects_array_type;\n        typedef get_lru_cache_type::apply<size_t,helpers::object_instances_counting_concurrent_type,array_searcher_type>::type cache_type;\n        array_searcher_type::array_type objects_array;\n        cache_type cache;\n        filled_instance_counting_fixture_with_external_array():cache(array_searcher_type(objects_array),number_of_lru_history_items){}\n        bool is_evicted(size_t k)const{\n            return array_searcher_type(objects_array)(k).instances_count()==1;\n        }\n        void fill_up_cache(size_t lower_bound, size_t upper_bound){\n            for (size_t i=lower_bound;i<upper_bound;++i){\n                cache[i];\n            }\n        }\n        size_t number_of_non_evicted_from_cache()const{\n            size_t result=0;\n            for (size_t i=0; i<array_size; ++i){\n                if (!this->is_evicted(i)){\n                    ++result;\n                }\n            }\n            return result;\n        }\n    };\n\n\n    //TODO: make this more reproducible\n    //TODO: split this test case in two parts\n    TEST_CASE_WITH_FIXTURE(correctness_of_braces_and_handle_destructor,filled_instance_counting_fixture_with_external_array){\n        typedef correctness_of_braces_and_handle_destructor self_type;\n        struct _{static void use_cache(self_type& tc){\n            for (size_t i=0;i<array_size;++i){\n                cache_type::handle h=tc.cache[i];\n                helpers::prevent_optimizing_out(h.value());\n            }\n\n        }};\n        static const size_t repeat_number = 2;\n        static const size_t number_of_threads = 4 * tbb::task_scheduler_init::default_num_threads(); //have 4x over subscription\n        static const size_t repeats_per_thread = 4;\n\n        for (size_t i=0; i < repeat_number; i++){\n            NativeParallelFor(number_of_threads,helpers::native_for_concurrent_op_repeated<self_type>(*this,&_::use_cache,repeats_per_thread));\n            fill_up_cache(0,array_size);\n            ASSERT(number_of_non_evicted_from_cache()==number_of_lru_history_items,\"thread safety is broken for cache \");\n        }\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_monitor.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 6\n#define HARNESS_DEFAULT_MAX_THREADS 8\n\n#include \"tbb/concurrent_monitor.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"harness.h\"\n#if _WIN32||_WIN64\n#include \"tbb/dynamic_link.cpp\"\n#endif\n\n#include \"tbb/semaphore.cpp\"\n#include \"tbb/concurrent_monitor.cpp\"\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    // Suppress compiler warning about constant conditional expression\n    #pragma warning (disable: 4127)\n#endif\n\nusing namespace tbb;\n\n//! Queuing lock with concurrent_monitor; to test concurrent_monitor::notify( Predicate p )\nclass QueuingMutex {\npublic:\n    //! Construct unacquired mutex.\n    QueuingMutex() { q_tail = NULL; }\n\n    //! The scoped locking pattern\n    class ScopedLock: internal::no_copy {\n        void Initialize() { mutex = NULL; }\n    public:\n        ScopedLock() {Initialize();}\n        ScopedLock( QueuingMutex& m, size_t test_mode ) { Initialize(); Acquire(m,test_mode); }\n        ~ScopedLock() { if( mutex ) Release(); }\n        void Acquire( QueuingMutex& m, size_t test_mode );\n        void Release();\n        void SleepPerhaps();\n\n    private:\n        QueuingMutex* mutex;\n        ScopedLock* next;\n        uintptr_t going;\n        internal::concurrent_monitor::thread_context thr_ctx;\n    };\n\n    friend class ScopedLock;\nprivate:\n    //! The last competitor requesting the lock\n    atomic<ScopedLock*> q_tail;\n    internal::concurrent_monitor waitq;\n};\n\nstruct PredicateEq {\n    uintptr_t p;\n    PredicateEq( uintptr_t p_ ) : p(p_) {}\n    bool operator() ( uintptr_t v ) const {return p==v;}\n};\n\nstruct QueuingMutex_Context {\n    const QueuingMutex::ScopedLock* lck;\n    QueuingMutex_Context( QueuingMutex::ScopedLock* l_ ) : lck(l_) {}\n    uintptr_t operator()() { return uintptr_t(lck); }\n};\n\nstruct QueuingMutex_Until : NoAssign {\n    uintptr_t& flag;\n    QueuingMutex_Until( uintptr_t& f_ ) : flag(f_) {}\n    bool operator()() { return flag!=0ul; }\n};\n\n//! A method to acquire QueuingMutex lock\nvoid QueuingMutex::ScopedLock::Acquire( QueuingMutex& m, size_t test_mode )\n{\n    // Must set all fields before the fetch_and_store, because once the\n    // fetch_and_store executes, *this becomes accessible to other threads.\n    mutex = &m;\n    next  = NULL;\n    going = 0;\n\n    // The fetch_and_store must have release semantics, because we are\n    // \"sending\" the fields initialized above to other processors.\n    ScopedLock* pred = m.q_tail.fetch_and_store<tbb::release>(this);\n    if( pred ) {\n#if TBB_USE_ASSERT\n        __TBB_control_consistency_helper(); // on \"m.q_tail\"\n        ASSERT( !pred->next, \"the predecessor has another successor!\");\n#endif\n        pred->next = this;\n        for( int i=0; i<16; ++i ) {\n            if( going!=0ul ) break;\n            __TBB_Yield();\n        }\n        int x = int( test_mode%3 );\n        switch( x ) {\n        case 0:\n            mutex->waitq.wait( QueuingMutex_Until(going), QueuingMutex_Context(this) );\n            break;\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        case 1:\n            mutex->waitq.wait( [&](){ return going!=0ul; }, [=]() { return (uintptr_t)this; } );\n            break;\n#endif\n        default:\n            SleepPerhaps();\n            break;\n        }\n    }\n\n    // Acquire critical section indirectly from previous owner or directly from predecessor.\n    __TBB_control_consistency_helper(); // on either \"m.q_tail\" or \"going\"\n}\n\n//! A method to release QueuingMutex lock\nvoid QueuingMutex::ScopedLock::Release( )\n{\n    if( !next ) {\n        if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {\n            // this was the only item in the queue, and the queue is now empty.\n            goto done;\n        }\n        // Someone in the queue\n        spin_wait_while_eq( next, (ScopedLock*)0 );\n    }\n    __TBB_store_with_release(next->going, 1);\n    mutex->waitq.notify( PredicateEq(uintptr_t(next)) );\ndone:\n    Initialize();\n}\n\n//! Yield and block; go to sleep\nvoid QueuingMutex::ScopedLock::SleepPerhaps()\n{\n    bool slept = false;\n    internal::concurrent_monitor& mq = mutex->waitq;\n    mq.prepare_wait( thr_ctx, uintptr_t(this) );\n    while( going==0ul ) {\n        if( (slept=mq.commit_wait( thr_ctx ))==true && going!=0ul )\n            break;\n        slept = false;\n        mq.prepare_wait( thr_ctx, uintptr_t(this) );\n    }\n    if( !slept )\n        mq.cancel_wait( thr_ctx );\n}\n\n// Spin lock with concurrent_monitor; to test concurrent_monitor::notify_all() and concurrent_monitor::notify()\nclass SpinMutex {\npublic:\n    //! Construct unacquired mutex.\n    SpinMutex() : toggle(false) { flag = 0; }\n\n    //! The scoped locking pattern\n    class ScopedLock: internal::no_copy {\n        void Initialize() { mutex = NULL; }\n    public:\n        ScopedLock() {Initialize();}\n        ScopedLock( SpinMutex& m, size_t test_mode ) { Initialize(); Acquire(m,test_mode); }\n        ~ScopedLock() { if( mutex ) Release(); }\n        void Acquire( SpinMutex& m, size_t test_mode );\n        void Release();\n        void SleepPerhaps();\n\n    private:\n        SpinMutex* mutex;\n        internal::concurrent_monitor::thread_context thr_ctx;\n    };\n\n    friend class ScopedLock;\n    friend struct SpinMutex_Until;\nprivate:\n    tbb::atomic<unsigned> flag;\n    bool toggle;\n    internal::concurrent_monitor waitq;\n};\n\nstruct SpinMutex_Context {\n    const SpinMutex::ScopedLock* lck;\n    SpinMutex_Context( SpinMutex::ScopedLock* l_ ) : lck(l_) {}\n    uintptr_t operator()() { return uintptr_t(lck); }\n};\n\nstruct SpinMutex_Until {\n    const SpinMutex* mtx;\n    SpinMutex_Until( SpinMutex* m_ ) : mtx(m_) {}\n    bool operator()() { return mtx->flag==0; }\n};\n\n//! A method to acquire SpinMutex lock\nvoid SpinMutex::ScopedLock::Acquire( SpinMutex& m, size_t test_mode )\n{\n    mutex = &m;\nretry:\n    if( m.flag.compare_and_swap( 1, 0 )!=0 ) {\n        int x = int( test_mode%3 );\n        switch( x ) {\n        case 0:\n            mutex->waitq.wait( SpinMutex_Until(mutex), SpinMutex_Context(this) );\n            break;\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        case 1:\n            mutex->waitq.wait( [&](){ return mutex->flag==0; }, [=]() { return (uintptr_t)this; } );\n            break;\n#endif\n        default:\n            SleepPerhaps();\n            break;\n        }\n        goto retry;\n    }\n}\n\n//! A method to release SpinMutex lock\nvoid SpinMutex::ScopedLock::Release()\n{\n    bool old_toggle = mutex->toggle;\n    mutex->toggle = !mutex->toggle;\n    mutex->flag = 0;\n    if( old_toggle )\n        mutex->waitq.notify_one();\n    else\n        mutex->waitq.notify_all();\n}\n\n//! Yield and block; go to sleep\nvoid SpinMutex::ScopedLock::SleepPerhaps()\n{\n    bool slept = false;\n    internal::concurrent_monitor& mq = mutex->waitq;\n    mq.prepare_wait( thr_ctx, uintptr_t(this) );\n    while( mutex->flag ) {\n        if( (slept=mq.commit_wait( thr_ctx ))==true )\n            break;\n        mq.prepare_wait( thr_ctx, uintptr_t(this) );\n    }\n    if( !slept )\n        mq.cancel_wait( thr_ctx );\n}\n\n//! A value protected by a mutex.\ntemplate<typename M>\nstruct Counter {\n    typedef M mutex_type;\n    M mutex;\n    long value;\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename C, int D>\nstruct AddOne: NoAssign {\n    C& counter;\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            typename C::mutex_type::ScopedLock lock(counter.mutex, i);\n            counter.value = counter.value+1;\n            if( D>0 )\n                for( int j=0; j<D; ++j ) __TBB_Yield();\n        }\n    }\n    AddOne( C& counter_ ) : counter(counter_) {}\n};\n\n//! Generic test with TBB mutex type M, max range R, and delay D.\ntemplate<typename M,int R, int D>\nvoid Test( int p ) {\n    Counter<M> counter;\n    counter.value = 0;\n    const int n = R;\n    tbb::task_scheduler_init init(p);\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M>,D>(counter));\n    if( counter.value!=n )\n        REPORT(\"ERROR : counter.value=%ld (instead of %ld)\\n\",counter.value,n);\n}\n\n#if TBB_USE_EXCEPTIONS\n#define NTHRS_USED_IN_DESTRUCTOR_TEST 8\n\natomic<size_t> n_sleepers;\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4244 4267)\n#endif\n\nstruct AllButOneSleep : NoAssign {\n    internal::concurrent_monitor*& mon;\n    static const size_t VLN = 1024*1024;\n    void operator()( int i ) const {\n        internal::concurrent_monitor::thread_context thr_ctx;\n\n        if( i==0 ) {\n            size_t n_expected_sleepers = NTHRS_USED_IN_DESTRUCTOR_TEST-1;\n            while( n_sleepers<n_expected_sleepers )\n                __TBB_Yield();\n            while( n_sleepers.compare_and_swap( VLN+NTHRS_USED_IN_DESTRUCTOR_TEST, n_expected_sleepers )!=n_expected_sleepers )\n                __TBB_Yield();\n\n            for( int j=0; j<100; ++j )\n                Harness::Sleep( 1 );\n            delete mon;\n            mon = NULL;\n        } else {\n            mon->prepare_wait( thr_ctx, uintptr_t(this) );\n            while( n_sleepers<VLN ) {\n                try {\n                    ++n_sleepers;\n                    mon->commit_wait( thr_ctx );\n                    if( --n_sleepers>VLN )\n                        break;\n                } catch( tbb::user_abort& ) {\n                    // can no longer access 'mon'\n                    break;\n                }\n                mon->prepare_wait( thr_ctx, uintptr_t(this) );\n            }\n        }\n    }\n    AllButOneSleep( internal::concurrent_monitor*& m_ ) : mon(m_) {}\n};\n#endif /* TBB_USE_EXCEPTIONS */\n\nvoid TestDestructor() {\n#if TBB_USE_EXCEPTIONS\n    tbb::task_scheduler_init init(NTHRS_USED_IN_DESTRUCTOR_TEST);\n    internal::concurrent_monitor* my_mon = new internal::concurrent_monitor;\n    REMARK( \"testing the destructor\\n\" );\n    n_sleepers = 0;\n    NativeParallelFor(NTHRS_USED_IN_DESTRUCTOR_TEST,AllButOneSleep(my_mon));\n    ASSERT( my_mon==NULL, \"\" );\n#endif /* TBB_USE_EXCEPTIONS */\n}\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK( \"testing with %d workers\\n\", static_cast<int>(p) );\n        // test the predicated notify\n        Test<QueuingMutex,100000,0>( p );\n        Test<QueuingMutex,1000,10000>( p );\n        // test the notify_all method\n        Test<SpinMutex,100000,0>( p );\n        Test<SpinMutex,1000,10000>( p );\n        REMARK( \"calling destructor for task_scheduler_init\\n\" );\n    }\n    TestDestructor();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_priority_queue.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_defs.h\"\n#include \"tbb/concurrent_priority_queue.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/blocked_range.h\"\n#include \"harness.h\"\n#include <functional>\n#include <algorithm>\n#include \"harness_allocator.h\"\n#include <vector>\n#include \"test_container_move_support.h\"\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <climits>\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n\n#if __INTEL_COMPILER && (_WIN32 || _WIN64) && TBB_USE_DEBUG && _CPPLIB_VER<520\n// The Intel Compiler has an issue that causes the Microsoft Iterator\n// Debugging code to crash in vector::pop_back when it is called after a\n// vector::push_back throws an exception.\n// #define _HAS_ITERATOR_DEBUGGING 0 // Setting this to 0 doesn't solve the problem\n                                     // and also provokes a redefinition warning\n#define __TBB_ITERATOR_DEBUGGING_EXCEPTIONS_BROKEN\n#endif\n\nusing namespace tbb;\n\nconst size_t MAX_ITER = 10000;\n\ntbb::atomic<unsigned int> counter;\n\nclass my_data_type {\npublic:\n    int priority;\n    char padding[tbb::internal::NFS_MaxLineSize - sizeof(int) % tbb::internal::NFS_MaxLineSize];\n    my_data_type() {}\n    my_data_type(int init_val) : priority(init_val) {}\n    const my_data_type operator+(const my_data_type& other) const {\n        return my_data_type(priority+other.priority);\n    }\n    bool operator==(const my_data_type& other) const {\n        return this->priority == other.priority;\n    }\n};\n\nconst my_data_type DATA_MIN(INT_MIN);\nconst my_data_type DATA_MAX(INT_MAX);\n\nclass my_less {\npublic:\n    bool operator()(const my_data_type d1, const my_data_type d2) const {\n        return d1.priority<d2.priority;\n    }\n};\n\n#if TBB_USE_EXCEPTIONS\nclass my_throwing_type : public my_data_type {\npublic:\n    static int throw_flag;\n    my_throwing_type() : my_data_type() {}\n    my_throwing_type(const my_throwing_type& src) : my_data_type(src) {\n        if (my_throwing_type::throw_flag) throw 42;\n        priority = src.priority;\n    }\n};\nint my_throwing_type::throw_flag = 0;\n\ntypedef concurrent_priority_queue<my_throwing_type, my_less > cpq_ex_test_type;\n#endif\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT\nconst size_t push_selector_variants = 3;\n#elif __TBB_CPP11_RVALUE_REF_PRESENT\nconst size_t push_selector_variants = 2;\n#else\nconst size_t push_selector_variants = 1;\n#endif\n\ntemplate <typename Q, typename E>\nvoid push_selector(Q& q, E e, size_t i) {\n    switch (i%push_selector_variants) {\n    case 0: q->push(e); break;\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    case 1: q->push(tbb::internal::move(e)); break;\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    case 2: q->emplace(e); break;\n#endif\n#endif\n    }\n}\n\ntemplate<typename T, typename C>\nclass FillBody : NoAssign {\n    int nThread;\n    T my_max, my_min;\n    concurrent_priority_queue<T, C> *q;\n    C less_than;\npublic:\n    FillBody(int nThread_, T max_, T min_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), my_max(max_), my_min(min_), q(q_) {}\n    void operator()(const int threadID) const {\n        T elem = my_min + T(threadID);\n        for (size_t i=0; i<MAX_ITER; ++i) {\n            // do some pushes\n            push_selector(q, elem, i);\n            if (elem == my_max) elem = my_min;\n            elem = elem + T(nThread);\n        }\n    }\n};\n\ntemplate<typename T, typename C>\nstruct EmptyBody : NoAssign {\n    int nThread;\n    T my_max;\n    concurrent_priority_queue<T, C> *q;\n    C less_than;\npublic:\n    EmptyBody(int nThread_, T max_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), my_max(max_), q(q_) {}\n    void operator()(const int /*threadID*/) const {\n        T elem(my_max), last;\n        if (q->try_pop(last)) {\n            ++counter;\n            while(q->try_pop(elem)) {\n                ASSERT(!less_than(last, elem), \"FAILED pop/priority test in EmptyBody.\");\n                last = elem;\n                elem = my_max;\n                ++counter;\n            }\n        }\n    }\n};\n\ntemplate <typename T, typename C>\nclass FloggerBody : NoAssign {\n    int nThread;\n    concurrent_priority_queue<T, C> *q;\npublic:\n    FloggerBody(int nThread_, concurrent_priority_queue<T, C> *q_) :\n        nThread(nThread_), q(q_) {}\n    void operator()(const int threadID) const {\n        T elem = T(threadID+1);\n        for (size_t i=0; i<MAX_ITER; ++i) {\n            push_selector(q, elem, i);\n            (void) q->try_pop(elem);\n        }\n    }\n};\n\nnamespace equality_comparison_helpers {\n    struct to_vector{\n        template <typename element_type, typename compare_t, typename allocator_t>\n        std::vector<element_type> operator()(tbb::concurrent_priority_queue<element_type, compare_t, allocator_t> const& source) const{\n            tbb::concurrent_priority_queue<element_type, compare_t, allocator_t>  cpq((source));\n            std::vector<element_type> v; v.reserve(cpq.size());\n            element_type element;\n            while (cpq.try_pop(element)){ v.push_back(element);}\n            std::reverse(v.begin(),v.end());\n            return v;\n        }\n    };\n}\n//TODO: make CPQ more testable instead of hacking ad-hoc operator ==\n//operator == is required for __TBB_TEST_INIT_LIST_SUITE\ntemplate <typename element_type, typename compare_t, typename allocator_t>\nbool operator==(tbb::concurrent_priority_queue<element_type, compare_t, allocator_t> const& lhs, tbb::concurrent_priority_queue<element_type, compare_t, allocator_t> const& rhs){\n    using equality_comparison_helpers::to_vector;\n    return to_vector()(lhs) == to_vector()(rhs);\n}\n\ntemplate <typename range, typename element_type, typename compare_t, typename allocator_t>\nbool operator==(tbb::concurrent_priority_queue<element_type, compare_t, allocator_t> const& lhs, range const & rhs ){\n    using equality_comparison_helpers::to_vector;\n    return to_vector()(lhs) == std::vector<element_type>(rhs.begin(),rhs.end());\n}\n\nvoid TestToVector(){\n    using equality_comparison_helpers::to_vector;\n    int array[] = {1,5,6,8,4,7};\n    tbb::blocked_range<int *> range =  Harness::make_blocked_range(array);\n    std::vector<int> source(range.begin(),range.end());\n    tbb::concurrent_priority_queue<int> q(source.begin(),source.end());\n    std::vector<int> from_cpq = to_vector()(q);\n    std::sort(source.begin(),source.end());\n    ASSERT(source == from_cpq,\"equality_comparison_helpers::to_vector incorrectly copied items from CPQ?\");\n}\n\nvoid TestHelpers(){\n    TestToVector();\n}\n\nvoid TestConstructorsDestructorsAccessors() {\n    std::vector<int> v;\n    std::allocator<int> a;\n    concurrent_priority_queue<int, std::less<int> > *q, *qo;\n    concurrent_priority_queue<int, std::less<int>, std::allocator<int>  > *qi;\n\n    // Test constructors/destructors\n    REMARK(\"Testing default constructor.\\n\");\n    q = new concurrent_priority_queue<int, std::less<int> >();\n    REMARK(\"Default constructor complete.\\n\");\n    ASSERT(q->size()==0, \"FAILED size test.\");\n    ASSERT(q->empty(), \"FAILED empty test.\");\n    REMARK(\"Testing destructor.\\n\");\n    delete q;\n    REMARK(\"Destruction complete.\\n\");\n\n    REMARK(\"Testing capacity constructor.\\n\");\n    q = new concurrent_priority_queue<int, std::less<int> >(42);\n    REMARK(\"Capacity constructor complete.\\n\");\n    ASSERT(q->size()==0, \"FAILED size test.\");\n    ASSERT(q->empty(), \"FAILED empty test.\");\n    REMARK(\"Testing destructor.\\n\");\n    delete q;\n    REMARK(\"Destruction complete.\\n\");\n\n    REMARK(\"Testing allocator constructor.\\n\");\n    qi = new concurrent_priority_queue<int, std::less<int>, std::allocator<int> >(a);\n    REMARK(\"Allocator constructor complete.\\n\");\n    ASSERT(qi->size()==0, \"FAILED size test.\");\n    ASSERT(qi->empty(), \"FAILED empty test.\");\n    REMARK(\"Testing destructor.\\n\");\n    delete qi;\n    REMARK(\"Destruction complete.\\n\");\n\n    REMARK(\"Testing capacity+allocator constructor.\\n\");\n    qi = new concurrent_priority_queue<int, std::less<int>, std::allocator<int> >(42, a);\n    REMARK(\"Capacity+allocator constructor complete.\\n\");\n    ASSERT(qi->size()==0, \"FAILED size test.\");\n    ASSERT(qi->empty(), \"FAILED empty test.\");\n    REMARK(\"Testing destructor.\\n\");\n    delete qi;\n    REMARK(\"Destruction complete.\\n\");\n\n    REMARK(\"Testing iterator filler constructor.\\n\");\n    for (int i=0; i<42; ++i)\n        v.push_back(i);\n    q = new concurrent_priority_queue<int, std::less<int> >(v.begin(), v.end());\n    REMARK(\"Iterator filler constructor complete.\\n\");\n    ASSERT(q->size()==42, \"FAILED vector/size test.\");\n    ASSERT(!q->empty(), \"FAILED vector/empty test.\");\n    ASSERT(*q == v, \"FAILED vector/equality test.\");\n\n    REMARK(\"Testing copy constructor.\\n\");\n    qo = new concurrent_priority_queue<int, std::less<int> >(*q);\n    REMARK(\"Copy constructor complete.\\n\");\n    ASSERT(qo->size()==42, \"FAILED cpq/size test.\");\n    ASSERT(!qo->empty(), \"FAILED cpq/empty test.\");\n    ASSERT(*q == *qo, \"FAILED cpq/equality test.\");\n\n    REMARK(\"Testing destructor.\\n\");\n    delete q;\n    delete qo;\n    REMARK(\"Destruction complete.\\n\");\n}\n\nvoid TestAssignmentClearSwap() {\n    typedef concurrent_priority_queue<int, std::less<int> > cpq_type;\n    std::vector<int> v;\n    cpq_type *q, *qo;\n    int e;\n\n    for (int i=0; i<42; ++i)\n        v.push_back(i);\n    q = new cpq_type(v.begin(), v.end());\n    qo = new cpq_type();\n\n    REMARK(\"Testing assignment (1).\\n\");\n    *qo = *q;\n    REMARK(\"Assignment complete.\\n\");\n    ASSERT(qo->size()==42, \"FAILED assignment/size test.\");\n    ASSERT(!qo->empty(), \"FAILED assignment/empty test.\");\n    ASSERT(*qo == v,\"FAILED assignment/equality test\");\n\n    cpq_type assigned_q;\n    REMARK(\"Testing assign(begin,end) (2).\\n\");\n    assigned_q.assign(v.begin(), v.end());\n    REMARK(\"Assignment complete.\\n\");\n    ASSERT(assigned_q.size()==42, \"FAILED assignment/size test.\");\n    ASSERT(!assigned_q.empty(), \"FAILED assignment/empty test.\");\n    ASSERT(assigned_q == v,\"FAILED assignment/equality test\");\n\n    REMARK(\"Testing clear.\\n\");\n    q->clear();\n    REMARK(\"Clear complete.\\n\");\n    ASSERT(q->size()==0, \"FAILED clear/size test.\");\n    ASSERT(q->empty(), \"FAILED clear/empty test.\");\n\n    for (size_t i=0; i<5; ++i)\n        (void) qo->try_pop(e);\n\n    REMARK(\"Testing assignment (3).\\n\");\n    *q = *qo;\n    REMARK(\"Assignment complete.\\n\");\n    ASSERT(q->size()==37, \"FAILED assignment/size test.\");\n    ASSERT(!q->empty(), \"FAILED assignment/empty test.\");\n\n    for (size_t i=0; i<5; ++i)\n        (void) qo->try_pop(e);\n\n    REMARK(\"Testing swap.\\n\");\n    q->swap(*qo);\n    REMARK(\"Swap complete.\\n\");\n    ASSERT(q->size()==32, \"FAILED swap/size test.\");\n    ASSERT(!q->empty(), \"FAILED swap/empty test.\");\n    ASSERT(qo->size()==37, \"FAILED swap_operand/size test.\");\n    ASSERT(!qo->empty(), \"FAILED swap_operand/empty test.\");\n    delete q;\n    delete qo;\n}\n\nvoid TestSerialPushPop() {\n    concurrent_priority_queue<int, std::less<int> > *q;\n    int e=42, prev=INT_MAX;\n    size_t count=0;\n\n    q = new concurrent_priority_queue<int, std::less<int> >(MAX_ITER);\n    REMARK(\"Testing serial push.\\n\");\n    for (size_t i=0; i<MAX_ITER; ++i) {\n        push_selector(q, e, i);\n        e = e*-1 + int(i);\n    }\n    REMARK(\"Pushing complete.\\n\");\n    ASSERT(q->size()==MAX_ITER, \"FAILED push/size test.\");\n    ASSERT(!q->empty(), \"FAILED push/empty test.\");\n\n    REMARK(\"Testing serial pop.\\n\");\n    while (!q->empty()) {\n        ASSERT(q->try_pop(e), \"FAILED pop test.\");\n        ASSERT(prev>=e, \"FAILED pop/priority test.\");\n        prev = e;\n        ++count;\n        ASSERT(q->size()==MAX_ITER-count, \"FAILED swap/size test.\");\n        ASSERT(!q->empty() || count==MAX_ITER, \"FAILED swap/empty test.\");\n    }\n    ASSERT(!q->try_pop(e), \"FAILED: successful pop from the empty queue.\");\n    REMARK(\"Popping complete.\\n\");\n    delete q;\n}\n\ntemplate <typename T, typename C>\nvoid TestParallelPushPop(int nThreads, T t_max, T t_min, C /*compare*/) {\n    size_t qsize;\n\n    concurrent_priority_queue<T, C> *q = new concurrent_priority_queue<T, C>(0);\n    FillBody<T, C> filler(nThreads, t_max, t_min, q);\n    EmptyBody<T, C> emptier(nThreads, t_max, q);\n    counter = 0;\n    REMARK(\"Testing parallel push.\\n\");\n    NativeParallelFor(nThreads, filler);\n    REMARK(\"Pushing complete.\\n\");\n    qsize = q->size();\n    ASSERT(q->size()==nThreads*MAX_ITER, \"FAILED push/size test.\");\n    ASSERT(!q->empty(), \"FAILED push/empty test.\");\n\n    REMARK(\"Testing parallel pop.\\n\");\n    NativeParallelFor(nThreads, emptier);\n    REMARK(\"Popping complete.\\n\");\n    ASSERT(counter==qsize, \"FAILED pop/size test.\");\n    ASSERT(q->size()==0, \"FAILED pop/empty test.\");\n\n    q->clear();\n    delete(q);\n}\n\nvoid TestExceptions() {\n#if TBB_USE_EXCEPTIONS\n    const size_t TOO_LARGE_SZ = 1000000000;\n    my_throwing_type elem;\n\n    REMARK(\"Testing basic constructor exceptions.\\n\");\n    // Allocate empty queue should not throw no matter the type\n    try {\n        my_throwing_type::throw_flag = 1;\n        cpq_ex_test_type q;\n    } catch(...) {\n#if !(_MSC_VER==1900)\n        ASSERT(false, \"FAILED: allocating empty queue should not throw exception.\\n\");\n        // VS2015 warns about the code in this catch block being unreachable\n#endif\n    }\n    // Allocate small queue should not throw for reasonably sized type\n    try {\n        my_throwing_type::throw_flag = 1;\n        cpq_ex_test_type q(42);\n    } catch(...) {\n        ASSERT(false, \"FAILED: allocating small queue should not throw exception.\\n\");\n    }\n    // Allocate a queue with too large initial size\n    try {\n        my_throwing_type::throw_flag = 0;\n        cpq_ex_test_type q(TOO_LARGE_SZ);\n        REMARK(\"FAILED: Huge queue did not throw exception.\\n\");\n    } catch(...) {}\n\n    cpq_ex_test_type *pq;\n    try {\n        my_throwing_type::throw_flag = 0;\n        pq = NULL;\n        pq = new cpq_ex_test_type(TOO_LARGE_SZ);\n        REMARK(\"FAILED: Huge queue did not throw exception.\\n\");\n        delete pq;\n    } catch(...) {\n        ASSERT(!pq, \"FAILED: pq should not be touched when constructor throws.\\n\");\n    }\n    REMARK(\"Basic constructor exceptions testing complete.\\n\");\n    REMARK(\"Testing copy constructor exceptions.\\n\");\n    my_throwing_type::throw_flag = 0;\n    cpq_ex_test_type src_q(42);\n    elem.priority = 42;\n    for (size_t i=0; i<42; ++i) src_q.push(elem);\n    try {\n        my_throwing_type::throw_flag = 1;\n        cpq_ex_test_type q(src_q);\n        REMARK(\"FAILED: Copy construct did not throw exception.\\n\");\n    } catch(...) {}\n    try {\n        my_throwing_type::throw_flag = 1;\n        pq = NULL;\n        pq = new concurrent_priority_queue<my_throwing_type, my_less >(src_q);\n        REMARK(\"FAILED: Copy construct did not throw exception.\\n\");\n        delete pq;\n    } catch(...) {\n        ASSERT(!pq, \"FAILED: pq should not be touched when constructor throws.\\n\");\n    }\n    REMARK(\"Copy constructor exceptions testing complete.\\n\");\n    REMARK(\"Testing assignment exceptions.\\n\");\n    // Assignment is copy-swap, so it should be exception safe\n    my_throwing_type::throw_flag = 0;\n    cpq_ex_test_type assign_q(24);\n    try {\n        my_throwing_type::throw_flag = 1;\n        assign_q = src_q;\n        REMARK(\"FAILED: Assign did not throw exception.\\n\");\n    } catch(...) {\n        ASSERT(assign_q.empty(), \"FAILED: assign_q should be empty.\\n\");\n    }\n    REMARK(\"Assignment exceptions testing complete.\\n\");\n#ifndef __TBB_ITERATOR_DEBUGGING_EXCEPTIONS_BROKEN\n    REMARK(\"Testing push exceptions.\\n\");\n    for (size_t i=0; i<push_selector_variants; ++i) {\n        my_throwing_type::throw_flag = 0;\n        pq = new cpq_ex_test_type(3);\n        try {\n            push_selector(pq, elem, i);\n            push_selector(pq, elem, i);\n            push_selector(pq, elem, i);\n        } catch(...) {\n            ASSERT(false, \"FAILED: Push should not throw exception... yet.\\n\");\n        }\n        try { // should crash on copy during expansion of vector\n            my_throwing_type::throw_flag = 1;\n            push_selector(pq, elem, i);\n            REMARK(\"FAILED: Push did not throw exception.\\n\");\n        } catch(...) {\n            ASSERT(!pq->empty(), \"FAILED: pq should not be empty.\\n\");\n            ASSERT(pq->size()==3, \"FAILED: pq should be only three elements.\\n\");\n            ASSERT(pq->try_pop(elem), \"FAILED: pq is not functional.\\n\");\n        }\n        delete pq;\n\n        my_throwing_type::throw_flag = 0;\n        pq = new cpq_ex_test_type(3);\n        try {\n            push_selector(pq, elem, i);\n            push_selector(pq, elem, i);\n        } catch(...) {\n            ASSERT(false, \"FAILED: Push should not throw exception... yet.\\n\");\n        }\n        try { // should crash on push copy of element\n            my_throwing_type::throw_flag = 1;\n            push_selector(pq, elem, i);\n            REMARK(\"FAILED: Push did not throw exception.\\n\");\n        } catch(...) {\n            ASSERT(!pq->empty(), \"FAILED: pq should not be empty.\\n\");\n            ASSERT(pq->size()==2, \"FAILED: pq should be only two elements.\\n\");\n            ASSERT(pq->try_pop(elem), \"FAILED: pq is not functional.\\n\");\n        }\n        delete pq;\n    }\n    REMARK(\"Push exceptions testing complete.\\n\");\n#endif\n#endif // TBB_USE_EXCEPTIONS\n}\n\ntemplate <typename T, typename C>\nvoid TestFlogger(int nThreads, T /*max*/, C /*compare*/) {\n    REMARK(\"Testing queue flogger.\\n\");\n    concurrent_priority_queue<T, C> *q = new concurrent_priority_queue<T, C> (0);\n    NativeParallelFor(nThreads, FloggerBody<T, C >(nThreads, q));\n    ASSERT(q->empty(), \"FAILED flogger/empty test.\");\n    ASSERT(!q->size(), \"FAILED flogger/size test.\");\n    REMARK(\"Flogging complete.\\n\");\n    delete q;\n}\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include \"test_initializer_list.h\"\n\nvoid TestInitList(){\n    REMARK(\"testing initializer_list methods \\n\");\n    using namespace initializer_list_support_tests;\n    TestInitListSupport<tbb::concurrent_priority_queue<char> >({1,2,3,4,5});\n    TestInitListSupport<tbb::concurrent_priority_queue<int> >({});\n}\n#endif //if __TBB_INITIALIZER_LISTS_PRESENT\n\nstruct special_member_calls_t {\n    size_t copy_constructor_called_times;\n    size_t move_constructor_called_times;\n    size_t copy_assignment_called_times;\n    size_t move_assignment_called_times;\n\n    bool friend operator==(special_member_calls_t const& lhs, special_member_calls_t const& rhs){\n        return\n                lhs.copy_constructor_called_times == rhs.copy_constructor_called_times\n             && lhs.move_constructor_called_times == rhs.move_constructor_called_times\n             && lhs.copy_assignment_called_times == rhs.copy_assignment_called_times\n             && lhs.move_assignment_called_times == rhs.move_assignment_called_times;\n    }\n\n};\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nstruct MoveOperationTracker {\n    static size_t copy_constructor_called_times;\n    static size_t move_constructor_called_times;\n    static size_t copy_assignment_called_times;\n    static size_t move_assignment_called_times;\n\n    static special_member_calls_t special_member_calls(){\n        special_member_calls_t calls = {copy_constructor_called_times, move_constructor_called_times, copy_assignment_called_times, move_assignment_called_times};\n        return calls;\n    }\n    static size_t value_counter;\n\n    size_t value;\n\n    MoveOperationTracker() : value(++value_counter) {}\n    MoveOperationTracker( const size_t value_ ) : value( value_ ) {}\n    ~MoveOperationTracker() __TBB_NOEXCEPT( true ) {\n        value = 0;\n    }\n    MoveOperationTracker(const MoveOperationTracker& m) : value(m.value) {\n        ASSERT(m.value, \"The object has been moved or destroyed\");\n        ++copy_constructor_called_times;\n    }\n    MoveOperationTracker(MoveOperationTracker&& m) __TBB_NOEXCEPT(true) : value(m.value) {\n        ASSERT(m.value, \"The object has been moved or destroyed\");\n        m.value = 0;\n        ++move_constructor_called_times;\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker const& m) {\n        ASSERT(m.value, \"The object has been moved or destroyed\");\n        value = m.value;\n        ++copy_assignment_called_times;\n        return *this;\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker&& m) __TBB_NOEXCEPT(true) {\n        ASSERT(m.value, \"The object has been moved or destroyed\");\n        value = m.value;\n        m.value = 0;\n        ++move_assignment_called_times;\n        return *this;\n    }\n\n    bool operator<(MoveOperationTracker const &m) const {\n        ASSERT(value, \"The object has been moved or destroyed\");\n        ASSERT(m.value, \"The object has been moved or destroyed\");\n        return value < m.value;\n    }\n\n    friend bool operator==(MoveOperationTracker const &lhs, MoveOperationTracker const &rhs){\n        return !(lhs < rhs) && !(rhs <lhs);\n    }\n};\nsize_t MoveOperationTracker::copy_constructor_called_times = 0;\nsize_t MoveOperationTracker::move_constructor_called_times = 0;\nsize_t MoveOperationTracker::copy_assignment_called_times = 0;\nsize_t MoveOperationTracker::move_assignment_called_times = 0;\nsize_t MoveOperationTracker::value_counter = 0;\n\ntemplate<typename allocator = tbb::cache_aligned_allocator<MoveOperationTracker> >\nstruct cpq_src_fixture : NoAssign {\n    enum {default_container_size = 100};\n    typedef concurrent_priority_queue<MoveOperationTracker, std::less<MoveOperationTracker>, typename allocator:: template rebind<MoveOperationTracker>::other > cpq_t;\n\n    cpq_t cpq_src;\n    const size_t  container_size;\n\n    void init(){\n        size_t &mcct = MoveOperationTracker::move_constructor_called_times;\n        size_t &ccct = MoveOperationTracker::copy_constructor_called_times;\n        size_t &cact = MoveOperationTracker::copy_assignment_called_times;\n        size_t &mact = MoveOperationTracker::move_assignment_called_times;\n        mcct = ccct = cact = mact = 0;\n\n        for (size_t i=1; i <= container_size; ++i){\n            cpq_src.push(MoveOperationTracker(i));\n        }\n        ASSERT(cpq_src.size() == container_size, \"error in test setup ?\" );\n    }\n\n    cpq_src_fixture(size_t size = default_container_size) : container_size(size){\n        init();\n    }\n\n    cpq_src_fixture(typename cpq_t::allocator_type const& a, size_t size = default_container_size) : cpq_src(a), container_size(size){\n        init();\n    }\n\n};\n\n\nvoid TestStealingMoveConstructor(){\n    typedef cpq_src_fixture<> fixture_t;\n    fixture_t fixture;\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n\n    special_member_calls_t previous = MoveOperationTracker::special_member_calls();\n    fixture_t::cpq_t dst(std::move(fixture.cpq_src));\n    ASSERT(previous == MoveOperationTracker::special_member_calls(), \"stealing move constructor should not create any new elements\");\n\n    ASSERT(dst == src_copy, \"cpq content changed during stealing move ?\");\n}\n\nvoid TestStealingMoveConstructorOtherAllocatorInstance(){\n    typedef two_memory_arenas_fixture<MoveOperationTracker> arena_fixture_t;\n    typedef cpq_src_fixture<arena_fixture_t::allocator_t > fixture_t;\n\n    arena_fixture_t arena_fixture(8 * fixture_t::default_container_size, \"TestStealingMoveConstructorOtherAllocatorInstance\");\n    fixture_t fixture(arena_fixture.source_allocator);\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n\n    special_member_calls_t previous = MoveOperationTracker::special_member_calls();\n    fixture_t::cpq_t dst(std::move(fixture.cpq_src), arena_fixture.source_allocator);\n    ASSERT(previous == MoveOperationTracker::special_member_calls(), \"stealing move constructor should not create any new elements\");\n\n    ASSERT(dst == src_copy, \"cpq content changed during stealing move ?\");\n}\n\nvoid TestPerElementMoveConstructorOtherAllocatorInstance(){\n    typedef two_memory_arenas_fixture<MoveOperationTracker> arena_fixture_t;\n    typedef cpq_src_fixture<arena_fixture_t::allocator_t > fixture_t;\n\n    arena_fixture_t arena_fixture(8 * fixture_t::default_container_size, \"TestPerElementMoveConstructorOtherAllocatorInstance\");\n    fixture_t fixture(arena_fixture.source_allocator);\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n\n    special_member_calls_t move_ctor_called_cpq_size_times = MoveOperationTracker::special_member_calls();\n    move_ctor_called_cpq_size_times.move_constructor_called_times += fixture.container_size;\n\n    fixture_t::cpq_t dst(std::move(fixture.cpq_src), arena_fixture.dst_allocator);\n    ASSERT(move_ctor_called_cpq_size_times == MoveOperationTracker::special_member_calls(), \"Per element move constructor should move initialize all new elements\");\n    ASSERT(dst == src_copy, \"cpq content changed during move ?\");\n}\n\nvoid TestgMoveConstructor(){\n    TestStealingMoveConstructor();\n    TestStealingMoveConstructorOtherAllocatorInstance();\n    TestPerElementMoveConstructorOtherAllocatorInstance();\n}\n\nvoid TestStealingMoveAssignOperator(){\n    typedef cpq_src_fixture<> fixture_t;\n    fixture_t fixture;\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n\n    fixture_t::cpq_t dst;\n    special_member_calls_t previous = MoveOperationTracker::special_member_calls();\n    dst = std::move(fixture.cpq_src);\n    ASSERT(previous == MoveOperationTracker::special_member_calls(), \"stealing move assign operator should not create any new elements\");\n\n    ASSERT(dst == src_copy, \"cpq content changed during stealing move ?\");\n}\n\nvoid TestStealingMoveAssignOperatorWithStatefulAllocator(){\n    //Use stateful allocator which is propagated on assignment , i.e. POCMA = true\n    typedef two_memory_arenas_fixture<MoveOperationTracker, /*pocma =*/Harness::true_type> arena_fixture_t;\n    typedef cpq_src_fixture<arena_fixture_t::allocator_t > fixture_t;\n\n    arena_fixture_t arena_fixture(8 * fixture_t::default_container_size, \"TestStealingMoveAssignOperatorWithStatefullAllocator\");\n    fixture_t fixture(arena_fixture.source_allocator);\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n    fixture_t::cpq_t dst(arena_fixture.dst_allocator);\n\n    special_member_calls_t previous = MoveOperationTracker::special_member_calls();\n    dst = std::move(fixture.cpq_src);\n    ASSERT(previous == MoveOperationTracker::special_member_calls(), \"stealing move assignment operator should not create any new elements\");\n\n    ASSERT(dst == src_copy, \"cpq content changed during stealing move ?\");\n}\n\nvoid TestPerElementMoveAssignOperator(){\n    //use stateful allocator which is not propagate on assignment , i.e. POCMA = false\n    typedef two_memory_arenas_fixture<MoveOperationTracker, /*pocma =*/Harness::false_type> arena_fixture_t;\n    typedef cpq_src_fixture<arena_fixture_t::allocator_t > fixture_t;\n\n    arena_fixture_t arena_fixture(8 * fixture_t::default_container_size, \"TestPerElementMoveAssignOperator\");\n    fixture_t fixture(arena_fixture.source_allocator);\n    fixture_t::cpq_t src_copy(fixture.cpq_src);\n    fixture_t::cpq_t dst(arena_fixture.dst_allocator);\n\n    special_member_calls_t move_ctor_called_cpq_size_times = MoveOperationTracker::special_member_calls();\n    move_ctor_called_cpq_size_times.move_constructor_called_times += fixture.container_size;\n    dst = std::move(fixture.cpq_src);\n    ASSERT(move_ctor_called_cpq_size_times == MoveOperationTracker::special_member_calls(), \"per element move assignment should move initialize new elements\");\n\n    ASSERT(dst == src_copy, \"cpq content changed during per element move ?\");\n}\n\nvoid TestgMoveAssignOperator(){\n    TestStealingMoveAssignOperator();\n#if    __TBB_ALLOCATOR_TRAITS_PRESENT\n    TestStealingMoveAssignOperatorWithStatefulAllocator();\n#endif //__TBB_ALLOCATOR_TRAITS_PRESENT\n    TestPerElementMoveAssignOperator();\n}\n\nstruct ForwardInEmplaceTester {\n    int a;\n    static bool moveCtorCalled;\n    ForwardInEmplaceTester( int a_val ) : a( a_val ) {}\n    ForwardInEmplaceTester( ForwardInEmplaceTester&& obj, int a_val ) : a( obj.a ) {\n        moveCtorCalled = true;\n        obj.a = a_val;\n    }\n    bool operator<( ForwardInEmplaceTester const& ) const { return true; }\n};\nbool ForwardInEmplaceTester::moveCtorCalled = false;\n\nstruct NoDefaultCtorType {\n    size_t value1, value2;\n    NoDefaultCtorType( size_t value1_, size_t value2_ ) : value1( value1_ ), value2( value2_ ) {}\n    bool operator<(NoDefaultCtorType const &m) const {\n        return value1+value2 < m.value1+m.value2;\n    }\n};\n\nvoid TestMoveSupportInPushPop() {\n    REMARK(\"Testing Move Support in Push/Pop...\");\n    size_t &mcct = MoveOperationTracker::move_constructor_called_times;\n    size_t &ccct = MoveOperationTracker::copy_constructor_called_times;\n    size_t &cact = MoveOperationTracker::copy_assignment_called_times;\n    size_t &mact = MoveOperationTracker::move_assignment_called_times;\n    mcct = ccct = cact = mact = 0;\n\n    concurrent_priority_queue<MoveOperationTracker> q1;\n\n    ASSERT(mcct == 0, \"Value must be zero-initialized\");\n    ASSERT(ccct == 0, \"Value must be zero-initialized\");\n\n    q1.push(MoveOperationTracker());\n    ASSERT(mcct > 0, \"Not working push(T&&)?\");\n    ASSERT(ccct == 0, \"Copying of arg occurred during push(T&&)\");\n\n    MoveOperationTracker ob;\n    const size_t prev_mcct = mcct;\n    q1.push(std::move(ob));\n    ASSERT(mcct > prev_mcct, \"Not working push(T&&)?\");\n    ASSERT(ccct == 0, \"Copying of arg occurred during push(T&&)\");\n\n    ASSERT(cact == 0, \"Copy assignment called during push(T&&)\");\n    const size_t prev_mact = mact;\n    q1.try_pop(ob);\n    ASSERT(cact == 0, \"Copy assignment called during try_pop(T&)\");\n    ASSERT(mact > prev_mact, \"Move assignment was not called during try_pop(T&)\");\n\n    REMARK(\" works.\\n\");\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    REMARK(\"Testing Emplace...\");\n\n    concurrent_priority_queue<NoDefaultCtorType> q2;\n    q2.emplace(15, 3);\n    q2.emplace(2, 35);\n    q2.emplace(8, 8);\n\n    NoDefaultCtorType o(0, 0);\n    q2.try_pop(o);\n    ASSERT(o.value1 == 2 && o.value2 == 35, \"Unexpected data popped; possible emplace() failure.\");\n    q2.try_pop(o);\n    ASSERT(o.value1 == 15 && o.value2 == 3, \"Unexpected data popped; possible emplace() failure.\");\n    q2.try_pop(o);\n    ASSERT(o.value1 == 8 && o.value2 == 8, \"Unexpected data popped; possible emplace() failure.\");\n    ASSERT(!q2.try_pop(o), \"The queue should be empty.\");\n\n    //TODO: revise this test\n    concurrent_priority_queue<ForwardInEmplaceTester> q3;\n    ASSERT( ForwardInEmplaceTester::moveCtorCalled == false, NULL );\n    q3.emplace( ForwardInEmplaceTester(5), 2 );\n    ASSERT( ForwardInEmplaceTester::moveCtorCalled == true, \"Not used std::forward in emplace()?\" );\n    ForwardInEmplaceTester obj( 0 );\n    q3.try_pop( obj );\n    ASSERT( obj.a == 5, \"Not used std::forward in emplace()?\" );\n    ASSERT(!q3.try_pop( obj ), \"The queue should be empty.\");\n\n    REMARK(\" works.\\n\");\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\nvoid TestCpqOnNThreads( int nThreads ) {\n    std::less<int> int_compare;\n    my_less data_compare;\n\n    TestConstructorsDestructorsAccessors();\n    TestAssignmentClearSwap();\n    TestSerialPushPop();\n\n    TestParallelPushPop( nThreads, INT_MAX, INT_MIN, int_compare );\n    TestParallelPushPop( nThreads, (unsigned char)CHAR_MAX, (unsigned char)CHAR_MIN, int_compare );\n    TestParallelPushPop( nThreads, DATA_MAX, DATA_MIN, data_compare );\n\n    TestFlogger( nThreads, INT_MAX, int_compare );\n    TestFlogger( nThreads, (unsigned char)CHAR_MAX, int_compare );\n    TestFlogger( nThreads, DATA_MAX, data_compare );\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    MoveOperationTracker::copy_assignment_called_times = 0;\n    TestFlogger( nThreads, MoveOperationTracker(), std::less<MoveOperationTracker>() );\n    ASSERT( MoveOperationTracker::copy_assignment_called_times == 0, \"Copy assignment called during try_pop(T&)?\" );\n#endif\n\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    TestExceptions();\n#else\n    REPORT( \"Known issue: exception handling tests are skipped.\\n\" );\n#endif\n}\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\nstruct SmartPointersCompare {\n    template <typename Type> bool operator() (const std::shared_ptr<Type> &t1, const std::shared_ptr<Type> &t2) {\n        return *t1 < *t2;\n    }\n    template <typename Type> bool operator() (const std::weak_ptr<Type> &t1, const std::weak_ptr<Type> &t2) {\n        return *t1.lock().get() < *t2.lock().get();\n    }\n    template <typename Type> bool operator() (const std::unique_ptr<Type> &t1, const std::unique_ptr<Type> &t2) {\n        return *t1 < *t2;\n    }\n};\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n// The helper calls copying or moving push operator if an element has copy constructor.\n// Otherwise it calls only moving push operator.\ntemplate <bool hasCopyCtor>\nstruct QueuePushHelper {\n    template <typename Q, typename T>\n    static void push( Q &q, T &&t ) {\n        q.push( std::forward<T>(t) );\n    }\n};\ntemplate <>\ntemplate <typename Q, typename T>\nvoid QueuePushHelper<false>::push( Q &q, T &&t ) {\n    q.push( std::move(t) );\n}\n#else\ntemplate <bool hasCopyCtor>\nstruct QueuePushHelper {\n    template <typename Q, typename T>\n    static void push( Q &q, const T &t ) {\n        q.push( t );\n    }\n};\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate <bool hasCopyCtor, typename Queue>\nvoid Examine(Queue &q1, Queue &q2, const std::vector<typename Queue::value_type> &vecSorted) {\n    typedef typename Queue::value_type ValueType;\n\n    ASSERT(!q1.empty() && q1.size() == vecSorted.size(), NULL);\n\n    ValueType elem;\n\n    q2.clear();\n    ASSERT(q2.empty() && !q2.size() && !q2.try_pop(elem), NULL);\n\n    typename std::vector<ValueType>::const_reverse_iterator it1;\n    for (it1 = vecSorted.rbegin(); q1.try_pop(elem); it1++) {\n        ASSERT( Harness::IsEqual()(elem, *it1), NULL );\n        if ( std::distance(vecSorted.rbegin(), it1) % 2 )\n            QueuePushHelper<hasCopyCtor>::push(q2,elem);\n        else\n            QueuePushHelper<hasCopyCtor>::push(q2,tbb::internal::move(elem));\n    }\n    ASSERT(it1 == vecSorted.rend(), NULL);\n    ASSERT(q1.empty() && !q1.size(), NULL);\n    ASSERT(!q2.empty() && q2.size() == vecSorted.size(), NULL);\n\n    q1.swap(q2);\n    ASSERT(q2.empty() && !q2.size(), NULL);\n    ASSERT(!q1.empty() && q1.size() == vecSorted.size(), NULL);\n    for (it1 = vecSorted.rbegin(); q1.try_pop(elem); it1++) ASSERT(Harness::IsEqual()(elem, *it1), NULL);\n    ASSERT(it1 == vecSorted.rend(), NULL);\n\n    typename Queue::allocator_type a = q1.get_allocator();\n    ValueType *ptr = a.allocate(1);\n    ASSERT(ptr, NULL);\n    a.deallocate(ptr, 1);\n}\n\ntemplate <typename Queue>\nvoid Examine(const Queue &q, const std::vector<typename Queue::value_type> &vecSorted) {\n    Queue q1(q), q2(q);\n    Examine</*hasCopyCtor=*/true>( q1, q2, vecSorted );\n}\n\ntemplate <typename ValueType, typename Compare>\nvoid TypeTester(const std::vector<ValueType> &vec, Compare comp) {\n    typedef tbb::concurrent_priority_queue<ValueType, Compare> Queue;\n    typedef tbb::concurrent_priority_queue< ValueType, Compare, debug_allocator<ValueType> > QueueDebugAlloc;\n    __TBB_ASSERT(vec.size() >= 5, \"Array should have at least 5 elements\");\n\n    std::vector<ValueType> vecSorted(vec);\n    std::sort( vecSorted.begin(), vecSorted.end(), comp );\n\n    // Construct an empty queue.\n    Queue q1;\n    q1.assign(vec.begin(), vec.end());\n    Examine(q1, vecSorted);\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    // Constructor from initializer_list.\n    Queue q2({ vec[0], vec[1], vec[2] });\n    for (typename std::vector<ValueType>::const_iterator it = vec.begin() + 3; it != vec.end(); ++it) q2.push(*it);\n    Examine(q2, vecSorted);\n    Queue q3;\n    q3 = { vec[0], vec[1], vec[2] };\n    for (typename std::vector<ValueType>::const_iterator it = vec.begin() + 3; it != vec.end(); ++it) q3.push(*it);\n    Examine(q3, vecSorted);\n#endif\n    // Copying constructor.\n    Queue q4(q1);\n    Examine(q4, vecSorted);\n    // Construct with non-default allocator.\n    QueueDebugAlloc q5;\n    q5.assign(vec.begin(), vec.end());\n    Examine(q5, vecSorted);\n    // Copying constructor for vector with different allocator type.\n    QueueDebugAlloc q6(q5);\n    Examine(q6, vecSorted);\n    // Construction with copying iteration range and given allocator instance.\n    Queue q7(vec.begin(), vec.end());\n    Examine(q7, vecSorted);\n    typename QueueDebugAlloc::allocator_type a;\n    QueueDebugAlloc q8(a);\n    q8.assign(vec.begin(), vec.end());\n    Examine(q8, vecSorted);\n}\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\ntemplate <typename T>\nvoid TypeTesterUniquePtr(const std::vector<T> &vec) {\n    __TBB_ASSERT(vec.size() >= 5, \"Array should have at least 5 elements\");\n\n    typedef std::unique_ptr<T> ValueType;\n    typedef tbb::concurrent_priority_queue<ValueType, SmartPointersCompare> Queue;\n    typedef tbb::concurrent_priority_queue< ValueType, SmartPointersCompare, debug_allocator<ValueType> > QueueDebugAlloc;\n\n    std::vector<ValueType> vecSorted;\n    for ( typename std::vector<T>::const_iterator it = vec.begin(); it != vec.end(); ++it ) {\n        vecSorted.push_back( ValueType(new T(*it)) );\n    }\n    std::sort( vecSorted.begin(), vecSorted.end(), SmartPointersCompare() );\n\n    Queue q1, q1Copy;\n    QueueDebugAlloc q2, q2Copy;\n    for ( typename std::vector<T>::const_iterator it = vec.begin(); it != vec.end(); ++it ) {\n        q1.push( ValueType(new T(*it)) );\n        q1Copy.push( ValueType(new T(*it)) );\n        q2.push( ValueType(new T(*it)) );\n        q2Copy.push( ValueType(new T(*it)) );\n    }\n    Examine</*isCopyCtor=*/false>(q1, q1Copy, vecSorted);\n    Examine</*isCopyCtor=*/false>(q2, q2Copy, vecSorted);\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    Queue q3Copy;\n    QueueDebugAlloc q4Copy;\n\n    q1.clear();\n    q2.clear();\n    for ( typename std::vector<T>::const_iterator it = vec.begin(); it != vec.end(); ++it ) {\n        q1.emplace( new T(*it) );\n        q3Copy.emplace( new T(*it) );\n        q2.emplace( new T(*it) );\n        q4Copy.emplace( new T(*it) );\n    }\n\n    Queue q3( std::move(q1) );\n    QueueDebugAlloc q4( std::move(q2) );\n    Examine</*isCopyCtor=*/false>(q3, q3Copy, vecSorted);\n    Examine</*isCopyCtor=*/false>(q4, q4Copy, vecSorted);\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n}\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT */\n\ntemplate <typename ValueType>\nvoid TypeTester(const std::vector<ValueType> &vec) { TypeTester(vec, std::less<ValueType>()); }\n\nvoid TestTypes() {\n    const int NUMBER = 10;\n\n    Harness::FastRandom rnd(1234);\n\n    std::vector<int> arrInt;\n    for (int i = 0; i<NUMBER; ++i) arrInt.push_back(rnd.get());\n    std::vector< tbb::atomic<int> > arrTbb;\n    for (int i = 0; i<NUMBER; ++i) {\n        tbb::atomic<int> a;\n        a = rnd.get();\n        arrTbb.push_back(a);\n    }\n\n    TypeTester(arrInt);\n    TypeTester(arrTbb);\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    std::vector< std::shared_ptr<int> > arrShr;\n    for (int i = 0; i<NUMBER; ++i) {\n        const int rnd_get = rnd.get();\n        arrShr.push_back(std::make_shared<int>(rnd_get));\n    }\n    std::vector< std::weak_ptr<int> > arrWk;\n    std::copy(arrShr.begin(), arrShr.end(), std::back_inserter(arrWk));\n    TypeTester(arrShr, SmartPointersCompare());\n    TypeTester(arrWk, SmartPointersCompare());\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n#if __TBB_IS_COPY_CONSTRUCTIBLE_BROKEN\n    REPORT( \"Known issue: std::is_copy_constructible is broken for move-only types. So the std::unique_ptr test is skipped.\\n\" );\n#else\n    TypeTesterUniquePtr(arrInt);\n#endif /* __TBB_IS_COPY_CONSTRUCTIBLE_BROKEN */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT */\n#else\n    REPORT( \"Known issue: C++11 smart pointer tests are skipped.\\n\" );\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n\nint TestMain() {\n    if (MinThread < 1)\n        MinThread = 1;\n\n    TestHelpers();\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    TestInitList();\n#else\n    REPORT(\"Known issue: initializer list tests are skipped.\\n\");\n#endif\n\n    TestTypes();\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestgMoveConstructor();\n    TestgMoveAssignOperator();\n    TestMoveSupportInPushPop();\n#else\n    REPORT(\"Known issue: move support tests are skipped.\\n\");\n#endif\n\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        REMARK(\"Testing on %d threads.\\n\", p);\n        TestCpqOnNThreads(p);\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_queue.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define NOMINMAX\n#include \"harness_defs.h\"\n#include \"tbb/concurrent_queue.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness.h\"\n#include \"harness_allocator.h\"\n\nusing tbb::internal::spin_wait_while;\n\n#include <vector>\n\nstatic tbb::atomic<long> FooConstructed;\nstatic tbb::atomic<long> FooDestroyed;\n\nenum state_t{\n    LIVE=0x1234,\n    DEAD=0xDEAD\n};\n\nclass Foo {\n    state_t state;\npublic:\n    int thread_id;\n    int serial;\n    Foo() : state(LIVE), thread_id(0), serial(0) {\n        ++FooConstructed;\n    }\n    Foo( const Foo& item ) : state(LIVE) {\n        ASSERT( item.state==LIVE, NULL );\n        ++FooConstructed;\n        thread_id = item.thread_id;\n        serial = item.serial;\n    }\n    ~Foo() {\n        ASSERT( state==LIVE, NULL );\n        ++FooDestroyed;\n        state=DEAD;\n        thread_id=DEAD;\n        serial=DEAD;\n    }\n    void operator=( const Foo& item ) {\n        ASSERT( item.state==LIVE, NULL );\n        ASSERT( state==LIVE, NULL );\n        thread_id = item.thread_id;\n        serial = item.serial;\n    }\n    bool is_const() {return false;}\n    bool is_const() const {return true;}\n    static void clear_counters() { FooConstructed = 0; FooDestroyed = 0; }\n    static long get_n_constructed() { return FooConstructed; }\n    static long get_n_destroyed() { return FooDestroyed; }\n};\n\n// problem size\nstatic const int N = 50000;     // # of bytes\n\n#if TBB_USE_EXCEPTIONS\n//! Exception for concurrent_queue\nclass Foo_exception : public std::bad_alloc {\npublic:\n    virtual const char *what() const throw() __TBB_override { return \"out of Foo limit\"; }\n    virtual ~Foo_exception() throw() {}\n};\n\nstatic tbb::atomic<long> FooExConstructed;\nstatic tbb::atomic<long> FooExDestroyed;\nstatic tbb::atomic<long> serial_source;\nstatic long MaxFooCount = 0;\nstatic const long Threshold = 400;\n\nclass FooEx {\n    state_t state;\npublic:\n    int serial;\n    FooEx() : state(LIVE) {\n        ++FooExConstructed;\n        serial = serial_source++;\n    }\n    FooEx( const FooEx& item ) : state(LIVE) {\n        ASSERT( item.state == LIVE, NULL );\n        ++FooExConstructed;\n        if( MaxFooCount && (FooExConstructed-FooExDestroyed) >= MaxFooCount ) // in push()\n            throw Foo_exception();\n        serial = item.serial;\n    }\n    ~FooEx() {\n        ASSERT( state==LIVE, NULL );\n        ++FooExDestroyed;\n        state=DEAD;\n        serial=DEAD;\n    }\n    void operator=( FooEx& item ) {\n        ASSERT( item.state==LIVE, NULL );\n        ASSERT( state==LIVE, NULL );\n        serial = item.serial;\n        if( MaxFooCount==2*Threshold && (FooExConstructed-FooExDestroyed) <= MaxFooCount/4 ) // in pop()\n            throw Foo_exception();\n    }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void operator=( FooEx&& item ) {\n        operator=( item );\n        item.serial = 0;\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n} ;\n#endif /* TBB_USE_EXCEPTIONS */\n\nconst size_t MAXTHREAD = 256;\n\nstatic int Sum[MAXTHREAD];\n\n//! Count of various pop operations\n/** [0] = pop_if_present that failed\n    [1] = pop_if_present that succeeded\n    [2] = pop */\nstatic tbb::atomic<long> PopKind[3];\n\nconst int M = 10000;\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT\nconst size_t push_selector_variants = 3;\n#elif __TBB_CPP11_RVALUE_REF_PRESENT\nconst size_t push_selector_variants = 2;\n#else\nconst size_t push_selector_variants = 1;\n#endif\n\ntemplate<typename CQ, typename ValueType, typename CounterType>\nvoid push( CQ& q, ValueType v, CounterType i ) {\n    switch( i % push_selector_variants ) {\n    case 0: q.push( v ); break;\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    case 1: q.push( std::move(v) ); break;\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    case 2: q.emplace( v ); break;\n#endif\n#endif\n    default: ASSERT( false, NULL ); break;\n    }\n}\n\ntemplate<typename CQ,typename T>\nstruct Body: NoAssign {\n    CQ* queue;\n    const int nthread;\n    Body( int nthread_ ) : nthread(nthread_) {}\n    void operator()( int thread_id ) const {\n        long pop_kind[3] = {0,0,0};\n        int serial[MAXTHREAD+1];\n        memset( serial, 0, nthread*sizeof(int) );\n        ASSERT( thread_id<nthread, NULL );\n\n        long sum = 0;\n        for( long j=0; j<M; ++j ) {\n            T f;\n            f.thread_id = DEAD;\n            f.serial = DEAD;\n            bool prepopped = false;\n            if( j&1 ) {\n                prepopped = queue->try_pop( f );\n                ++pop_kind[prepopped];\n            }\n            T g;\n            g.thread_id = thread_id;\n            g.serial = j+1;\n            push( *queue, g, j );\n            if( !prepopped ) {\n                while( !(queue)->try_pop(f) ) __TBB_Yield();\n                ++pop_kind[2];\n            }\n            ASSERT( f.thread_id<=nthread, NULL );\n            ASSERT( f.thread_id==nthread || serial[f.thread_id]<f.serial, \"partial order violation\" );\n            serial[f.thread_id] = f.serial;\n            sum += f.serial-1;\n        }\n        Sum[thread_id] = sum;\n        for( int k=0; k<3; ++k )\n            PopKind[k] += pop_kind[k];\n    }\n};\n\n// Define wrapper classes to test tbb::concurrent_queue<T>\ntemplate<typename T, typename A = tbb::cache_aligned_allocator<T> >\nclass ConcQWithSizeWrapper : public tbb::concurrent_queue<T, A> {\npublic:\n    ConcQWithSizeWrapper() {}\n    ConcQWithSizeWrapper( const ConcQWithSizeWrapper& q ) : tbb::concurrent_queue<T, A>( q ) {}\n    ConcQWithSizeWrapper(const A& a) : tbb::concurrent_queue<T, A>( a ) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    ConcQWithSizeWrapper(ConcQWithSizeWrapper&& q) : tbb::concurrent_queue<T>( std::move(q) ) {}\n    ConcQWithSizeWrapper(ConcQWithSizeWrapper&& q, const A& a)\n        : tbb::concurrent_queue<T, A>( std::move(q), a ) { }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n    template<typename InputIterator>\n    ConcQWithSizeWrapper( InputIterator begin, InputIterator end, const A& a = A())\n        : tbb::concurrent_queue<T, A>(begin,end,a) {}\n    size_t size() const { return this->unsafe_size(); }\n};\n\ntemplate<typename T>\nclass ConcQPushPopWrapper : public tbb::concurrent_queue<T> {\npublic:\n    ConcQPushPopWrapper() : my_capacity( size_t(-1)/(sizeof(void*)+sizeof(T)) ) {}\n    size_t size() const { return this->unsafe_size(); }\n    void   set_capacity( const ptrdiff_t n ) { my_capacity = n; }\n    bool   try_push( const T& source ) { return this->push( source ); }\n    bool   try_pop( T& dest ) { return this->tbb::concurrent_queue<T>::try_pop( dest ); }\n    size_t my_capacity;\n};\n\ntemplate<typename T>\nclass ConcQWithCapacity : public tbb::concurrent_queue<T> {\npublic:\n    ConcQWithCapacity() : my_capacity( size_t(-1)/(sizeof(void*)+sizeof(T)) ) {}\n    size_t size() const { return this->unsafe_size(); }\n    size_t capacity() const { return my_capacity; }\n    void   set_capacity( const int n ) { my_capacity = n; }\n    bool   try_push( const T& source ) { this->push( source ); return (size_t)source.serial<my_capacity; }\n    bool   try_pop( T& dest ) { this->tbb::concurrent_queue<T>::try_pop( dest ); return (size_t)dest.serial<my_capacity; }\n    size_t my_capacity;\n};\n\ntemplate <typename Queue>\nvoid AssertEquality(Queue &q, const std::vector<typename Queue::value_type> &vec) {\n    ASSERT(q.size() == typename Queue::size_type(vec.size()), NULL);\n    ASSERT(std::equal(q.unsafe_begin(), q.unsafe_end(), vec.begin(), Harness::IsEqual()), NULL);\n}\n\ntemplate <typename Queue>\nvoid AssertEmptiness(Queue &q) {\n    ASSERT(q.empty(), NULL);\n    ASSERT(!q.size(), NULL);\n    typename Queue::value_type elem;\n    ASSERT(!q.try_pop(elem), NULL);\n}\n\nenum push_t { push_op, try_push_op };\n\ntemplate<push_t push_op>\nstruct pusher {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename CQ, typename VType>\n    static bool push( CQ& queue, VType&& val ) {\n        queue.push( std::forward<VType>( val ) );\n        return true;\n    }\n#else\n    template<typename CQ, typename VType>\n    static bool push( CQ& queue, const VType& val ) {\n        queue.push( val );\n        return true;\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate<>\nstruct pusher< try_push_op > {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename CQ, typename VType>\n    static bool push( CQ& queue, VType&& val ) {\n        return queue.try_push( std::forward<VType>( val ) );\n    }\n#else\n    template<typename CQ, typename VType>\n    static bool push( CQ& queue, const VType& val ) {\n        return queue.try_push( val );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\nenum pop_t { pop_op, try_pop_op };\n\ntemplate<pop_t pop_op>\nstruct popper {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename CQ, typename VType>\n    static bool pop( CQ& queue, VType&& val ) {\n        if( queue.empty() ) return false;\n        queue.pop( std::forward<VType>( val ) );\n        return true;\n    }\n#else\n    template<typename CQ, typename VType>\n    static bool pop( CQ& queue, VType& val ) {\n        if( queue.empty() ) return false;\n        queue.pop( val );\n        return true;\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate<>\nstruct popper< try_pop_op > {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename CQ, typename VType>\n    static bool pop( CQ& queue, VType&& val ) {\n        return queue.try_pop( std::forward<VType>( val ) );\n    }\n#else\n    template<typename CQ, typename VType>\n    static bool pop( CQ& queue, VType& val ) {\n        return queue.try_pop( val );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate <push_t push_op, typename Queue>\nvoid FillTest(Queue &q, const std::vector<typename Queue::value_type> &vec) {\n    for (typename std::vector<typename Queue::value_type>::const_iterator it = vec.begin(); it != vec.end(); ++it)\n        ASSERT(pusher<push_op>::push(q, *it), NULL);\n    AssertEquality(q, vec);\n}\n\ntemplate <pop_t pop_op, typename Queue>\nvoid EmptyTest(Queue &q, const std::vector<typename Queue::value_type> &vec) {\n    typedef typename Queue::value_type value_type;\n\n    value_type elem;\n    typename std::vector<value_type>::const_iterator it = vec.begin();\n    while (popper<pop_op>::pop(q, elem)) {\n        ASSERT(Harness::IsEqual()(elem, *it), NULL);\n        ++it;\n    }\n    ASSERT(it == vec.end(), NULL);\n    AssertEmptiness(q);\n}\n\ntemplate <typename T, typename A>\nvoid bounded_queue_specific_test(tbb::concurrent_queue<T, A> &, const std::vector<T> &) { /* do nothing */ }\n\ntemplate <typename T, typename A>\nvoid bounded_queue_specific_test(tbb::concurrent_bounded_queue<T, A> &q, const std::vector<T> &vec) {\n    typedef typename tbb::concurrent_bounded_queue<T, A>::size_type size_type;\n\n    FillTest<try_push_op>(q, vec);\n    tbb::concurrent_bounded_queue<T, A> q2 = q;\n    EmptyTest<pop_op>(q, vec);\n\n    // capacity\n    q2.set_capacity(size_type(vec.size()));\n    ASSERT(q2.capacity() == size_type(vec.size()), NULL);\n    ASSERT(q2.size() == size_type(vec.size()), NULL);\n    ASSERT(!q2.try_push(vec[0]), NULL);\n\n#if TBB_USE_EXCEPTIONS\n    q.abort();\n#endif\n}\n\ntemplate<typename CQ, typename T>\nvoid TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {\n    ASSERT( nthread>0, \"nthread must be positive\" );\n    ptrdiff_t signed_prefill = ptrdiff_t(prefill);\n    if( signed_prefill+1>=capacity )\n        return;\n    bool success = false;\n    for( int k=0; k<3; ++k )\n        PopKind[k] = 0;\n    for( int trial=0; !success; ++trial ) {\n        T::clear_counters();\n        Body<CQ,T> body(nthread);\n        CQ queue;\n        queue.set_capacity( capacity );\n        body.queue = &queue;\n        for( size_t i=0; i<prefill; ++i ) {\n            T f;\n            f.thread_id = nthread;\n            f.serial = 1+int(i);\n            push(queue, f, i);\n            ASSERT( unsigned(queue.size())==i+1, NULL );\n            ASSERT( !queue.empty(), NULL );\n        }\n        tbb::tick_count t0 = tbb::tick_count::now();\n        NativeParallelFor( nthread, body );\n        tbb::tick_count t1 = tbb::tick_count::now();\n        double timing = (t1-t0).seconds();\n        REMARK(\"prefill=%d capacity=%d threads=%d time = %g = %g nsec/operation\\n\", int(prefill), int(capacity), nthread, timing, timing/(2*M*nthread)*1.E9);\n        int sum = 0;\n        for( int k=0; k<nthread; ++k )\n            sum += Sum[k];\n        int expected = int(nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2);\n        for( int i=int(prefill); --i>=0; ) {\n            ASSERT( !queue.empty(), NULL );\n            T f;\n            bool result = queue.try_pop(f);\n            ASSERT( result, NULL );\n            ASSERT( int(queue.size())==i, NULL );\n            sum += f.serial-1;\n        }\n        ASSERT( queue.empty(), \"The queue should be empty\" );\n        ASSERT( queue.size()==0, \"The queue should have zero size\" );\n        if( sum!=expected )\n            REPORT(\"sum=%d expected=%d\\n\",sum,expected);\n        ASSERT( T::get_n_constructed()==T::get_n_destroyed(), NULL );\n        // TODO: checks by counting allocators\n\n        success = true;\n        if( nthread>1 && prefill==0 ) {\n            // Check that pop_if_present got sufficient exercise\n            for( int k=0; k<2; ++k ) {\n#if (_WIN32||_WIN64)\n                // The TBB library on Windows seems to have a tough time generating\n                // the desired interleavings for pop_if_present, so the code tries longer, and settles\n                // for fewer desired interleavings.\n                const int max_trial = 100;\n                const int min_requirement = 20;\n#else\n                const int min_requirement = 100;\n                const int max_trial = 20;\n#endif /* _WIN32||_WIN64 */\n                if( PopKind[k]<min_requirement ) {\n                    if( trial>=max_trial ) {\n                        if( Verbose )\n                            REPORT(\"Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). \"\n                               \"This problem may merely be unlucky scheduling. \"\n                               \"Investigate only if it happens repeatedly.\\n\",\n                               nthread, long(PopKind[k]), k==0?\"failed\":\"succeeded\", max_trial, min_requirement);\n                        else\n                            REPORT(\"Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\\n\",\n                               k==0?\"failed\":\"succeeded\", nthread );\n\n                    } else {\n                        success = false;\n                    }\n               }\n            }\n        }\n    }\n}\n\nclass Bar {\n    state_t state;\npublic:\n    static size_t construction_num, destruction_num;\n    ptrdiff_t my_id;\n    Bar() : state(LIVE), my_id(-1) {}\n    Bar(size_t _i) : state(LIVE), my_id(_i) { construction_num++; }\n    Bar( const Bar& a_bar ) : state(LIVE) {\n        ASSERT( a_bar.state==LIVE, NULL );\n        my_id = a_bar.my_id;\n        construction_num++;\n    }\n    ~Bar() {\n        ASSERT( state==LIVE, NULL );\n        state = DEAD;\n        my_id = DEAD;\n        destruction_num++;\n    }\n    void operator=( const Bar& a_bar ) {\n        ASSERT( a_bar.state==LIVE, NULL );\n        ASSERT( state==LIVE, NULL );\n        my_id = a_bar.my_id;\n    }\n    friend bool operator==(const Bar& bar1, const Bar& bar2 ) ;\n} ;\n\nsize_t Bar::construction_num = 0;\nsize_t Bar::destruction_num = 0;\n\nbool operator==(const Bar& bar1, const Bar& bar2) {\n    ASSERT( bar1.state==LIVE, NULL );\n    ASSERT( bar2.state==LIVE, NULL );\n    return bar1.my_id == bar2.my_id;\n}\n\nclass BarIterator\n{\n    Bar* bar_ptr;\n    BarIterator(Bar* bp_) : bar_ptr(bp_) {}\npublic:\n    ~BarIterator() {}\n    BarIterator& operator=( const BarIterator& other ) {\n        bar_ptr = other.bar_ptr;\n        return *this;\n    }\n    Bar& operator*() const {\n        return *bar_ptr;\n    }\n    BarIterator& operator++() {\n        ++bar_ptr;\n        return *this;\n    }\n    Bar* operator++(int) {\n        Bar* result = &operator*();\n        operator++();\n        return result;\n    }\n    friend bool operator==(const BarIterator& bia, const BarIterator& bib) ;\n    friend bool operator!=(const BarIterator& bia, const BarIterator& bib) ;\n    template<typename CQ, typename T, typename TIter, typename CQ_EX, typename T_EX>\n    friend void TestConstructors ();\n} ;\n\nbool operator==(const BarIterator& bia, const BarIterator& bib) {\n    return bia.bar_ptr==bib.bar_ptr;\n}\n\nbool operator!=(const BarIterator& bia, const BarIterator& bib) {\n    return bia.bar_ptr!=bib.bar_ptr;\n}\n\n#if TBB_USE_EXCEPTIONS\nclass Bar_exception : public std::bad_alloc {\npublic:\n    virtual const char *what() const throw() __TBB_override { return \"making the entry invalid\"; }\n    virtual ~Bar_exception() throw() {}\n};\n\nclass BarEx {\n    static int count;\npublic:\n    state_t state;\n    typedef enum {\n        PREPARATION,\n        COPY_CONSTRUCT\n    } mode_t;\n    static mode_t mode;\n    ptrdiff_t my_id;\n    ptrdiff_t my_tilda_id;\n    static int button;\n    BarEx() : state(LIVE), my_id(-1), my_tilda_id(-1) {}\n    BarEx(size_t _i) : state(LIVE), my_id(_i), my_tilda_id(my_id^(-1)) {}\n    BarEx( const BarEx& a_bar ) : state(LIVE) {\n        ASSERT( a_bar.state==LIVE, NULL );\n        my_id = a_bar.my_id;\n        if( mode==PREPARATION )\n            if( !( ++count % 100 ) )\n                throw Bar_exception();\n        my_tilda_id = a_bar.my_tilda_id;\n    }\n    ~BarEx() {\n        ASSERT( state==LIVE, NULL );\n        state = DEAD;\n        my_id = DEAD;\n    }\n    static void set_mode( mode_t m ) { mode = m; }\n    void operator=( const BarEx& a_bar ) {\n        ASSERT( a_bar.state==LIVE, NULL );\n        ASSERT( state==LIVE, NULL );\n        my_id = a_bar.my_id;\n        my_tilda_id = a_bar.my_tilda_id;\n    }\n    friend bool operator==(const BarEx& bar1, const BarEx& bar2 ) ;\n} ;\n\nint    BarEx::count = 0;\nBarEx::mode_t BarEx::mode = BarEx::PREPARATION;\n\nbool operator==(const BarEx& bar1, const BarEx& bar2) {\n    ASSERT( bar1.state==LIVE, NULL );\n    ASSERT( bar2.state==LIVE, NULL );\n    ASSERT( (bar1.my_id ^ bar1.my_tilda_id) == -1, NULL );\n    ASSERT( (bar2.my_id ^ bar2.my_tilda_id) == -1, NULL );\n    return bar1.my_id==bar2.my_id && bar1.my_tilda_id==bar2.my_tilda_id;\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\ntemplate<typename CQ, typename T, typename TIter, typename CQ_EX, typename T_EX>\nvoid TestConstructors ()\n{\n    CQ src_queue;\n    typename CQ::const_iterator dqb;\n    typename CQ::const_iterator dqe;\n    typename CQ::const_iterator iter;\n\n    for( size_t size=0; size<1001; ++size ) {\n        for( size_t i=0; i<size; ++i )\n            src_queue.push(T(i+(i^size)));\n        typename CQ::const_iterator sqb( src_queue.unsafe_begin() );\n        typename CQ::const_iterator sqe( src_queue.unsafe_end()   );\n\n        CQ dst_queue(sqb, sqe);\n\n        ASSERT(src_queue.size()==dst_queue.size(), \"different size\");\n\n        src_queue.clear();\n    }\n\n    T bar_array[1001];\n    for( size_t size=0; size<1001; ++size ) {\n        for( size_t i=0; i<size; ++i )\n            bar_array[i] = T(i+(i^size));\n\n        const TIter sab(bar_array+0);\n        const TIter sae(bar_array+size);\n\n        CQ dst_queue2(sab, sae);\n\n        ASSERT( size==unsigned(dst_queue2.size()), NULL );\n        ASSERT( sab==TIter(bar_array+0), NULL );\n        ASSERT( sae==TIter(bar_array+size), NULL );\n\n        dqb = dst_queue2.unsafe_begin();\n        dqe = dst_queue2.unsafe_end();\n        TIter v_iter(sab);\n        for( ; dqb != dqe; ++dqb, ++v_iter )\n            ASSERT( *dqb == *v_iter, \"unexpected element\" );\n        ASSERT( v_iter==sae, \"different size?\" );\n    }\n\n    src_queue.clear();\n\n    CQ dst_queue3( src_queue );\n    ASSERT( src_queue.size()==dst_queue3.size(), NULL );\n    ASSERT( 0==dst_queue3.size(), NULL );\n\n    int k=0;\n    for( size_t i=0; i<1001; ++i ) {\n        T tmp_bar;\n        src_queue.push(T(++k));\n        src_queue.push(T(++k));\n        src_queue.try_pop(tmp_bar);\n\n        CQ dst_queue4( src_queue );\n\n        ASSERT( src_queue.size()==dst_queue4.size(), NULL );\n\n        dqb = dst_queue4.unsafe_begin();\n        dqe = dst_queue4.unsafe_end();\n        iter = src_queue.unsafe_begin();\n\n        for( ; dqb != dqe; ++dqb, ++iter )\n            ASSERT( *dqb == *iter, \"unexpected element\" );\n\n        ASSERT( iter==src_queue.unsafe_end(), \"different size?\" );\n    }\n\n    CQ dst_queue5( src_queue );\n\n    ASSERT( src_queue.size()==dst_queue5.size(), NULL );\n    dqb = dst_queue5.unsafe_begin();\n    dqe = dst_queue5.unsafe_end();\n    iter = src_queue.unsafe_begin();\n    for( ; dqb != dqe; ++dqb, ++iter )\n        ASSERT( *dqb == *iter, \"unexpected element\" );\n\n    for( size_t i=0; i<100; ++i) {\n        T tmp_bar;\n        src_queue.push(T(i+1000));\n        src_queue.push(T(i+1000));\n        src_queue.try_pop(tmp_bar);\n\n        dst_queue5.push(T(i+1000));\n        dst_queue5.push(T(i+1000));\n        dst_queue5.try_pop(tmp_bar);\n    }\n\n    ASSERT( src_queue.size()==dst_queue5.size(), NULL );\n    dqb = dst_queue5.unsafe_begin();\n    dqe = dst_queue5.unsafe_end();\n    iter = src_queue.unsafe_begin();\n    for( ; dqb != dqe; ++dqb, ++iter )\n        ASSERT( *dqb == *iter, \"unexpected element\" );\n    ASSERT( iter==src_queue.unsafe_end(), \"different size?\" );\n\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN || __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN\n    REPORT(\"Known issue: part of the constructor test is skipped.\\n\");\n#elif TBB_USE_EXCEPTIONS\n    k = 0;\n    typename CQ_EX::size_type n_elements=0;\n    CQ_EX src_queue_ex;\n    for( size_t size=0; size<1001; ++size ) {\n        T_EX tmp_bar_ex;\n        typename CQ_EX::size_type n_successful_pushes=0;\n        T_EX::set_mode( T_EX::PREPARATION );\n        try {\n            src_queue_ex.push(T_EX(k+(k^size)));\n            ++n_successful_pushes;\n        } catch (...) {\n        }\n        ++k;\n        try {\n            src_queue_ex.push(T_EX(k+(k^size)));\n            ++n_successful_pushes;\n        } catch (...) {\n        }\n        ++k;\n        src_queue_ex.try_pop(tmp_bar_ex);\n        n_elements += (n_successful_pushes - 1);\n        ASSERT( src_queue_ex.size()==n_elements, NULL);\n\n        T_EX::set_mode( T_EX::COPY_CONSTRUCT );\n        CQ_EX dst_queue_ex( src_queue_ex );\n\n        ASSERT( src_queue_ex.size()==dst_queue_ex.size(), NULL );\n\n        typename CQ_EX::const_iterator dqb_ex  = dst_queue_ex.unsafe_begin();\n        typename CQ_EX::const_iterator dqe_ex  = dst_queue_ex.unsafe_end();\n        typename CQ_EX::const_iterator iter_ex = src_queue_ex.unsafe_begin();\n\n        for( ; dqb_ex != dqe_ex; ++dqb_ex, ++iter_ex )\n            ASSERT( *dqb_ex == *iter_ex, \"unexpected element\" );\n        ASSERT( iter_ex==src_queue_ex.unsafe_end(), \"different size?\" );\n    }\n#endif /* TBB_USE_EXCEPTIONS */\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    // Testing work of move constructors. TODO: merge into TestMoveConstructors?\n    src_queue.clear();\n\n    typedef typename CQ::size_type qsize_t;\n    for( qsize_t size = 0; size < 1001; ++size ) {\n        for( qsize_t i = 0; i < size; ++i )\n            src_queue.push( T(i + (i ^ size)) );\n        std::vector<const T*> locations(size);\n        typename CQ::const_iterator qit = src_queue.unsafe_begin();\n        for( qsize_t i = 0; i < size; ++i, ++qit )\n            locations[i] = &(*qit);\n\n        qsize_t size_of_queue = src_queue.size();\n        CQ dst_queue( std::move(src_queue) );\n\n        ASSERT( src_queue.empty() && src_queue.size() == 0, \"not working move constructor?\" );\n        ASSERT( size == size_of_queue && size_of_queue == dst_queue.size(),\n                \"not working move constructor?\" );\n\n        qit = dst_queue.unsafe_begin();\n        for( qsize_t i = 0; i < size; ++i, ++qit )\n            ASSERT( locations[i] == &(*qit), \"there was data movement during move constructor\" );\n\n        for( qsize_t i = 0; i < size; ++i ) {\n            T test(i + (i ^ size));\n            T popped;\n            bool pop_result = dst_queue.try_pop( popped );\n\n            ASSERT( pop_result, NULL );\n            ASSERT( test == popped, NULL );\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<class T>\nclass allocator: public tbb::cache_aligned_allocator<T> {\npublic:\n    size_t m_unique_id;\n\n    allocator() : m_unique_id( 0 ) {}\n\n    allocator(size_t unique_id) { m_unique_id = unique_id; }\n\n    template<typename U>\n    allocator(const allocator<U>& a) throw() { m_unique_id = a.m_unique_id; }\n\n    template<typename U>\n    struct rebind { typedef allocator<U> other; };\n\n    friend bool operator==(const allocator& lhs, const allocator& rhs) {\n        return lhs.m_unique_id == rhs.m_unique_id;\n    }\n};\n\n// Checks operability of the queue the data was moved from\ntemplate<typename T, typename CQ>\nvoid TestQueueOperabilityAfterDataMove( CQ& queue ) {\n    const size_t size = 10;\n    std::vector<T> v(size);\n    for( size_t i = 0; i < size; ++i ) v[i] = T( i * i + i );\n\n    FillTest<push_op>(queue, v);\n    EmptyTest<try_pop_op>(queue, v);\n    bounded_queue_specific_test(queue, v);\n}\n\ntemplate<class CQ, class T>\nvoid TestMoveConstructors() {\n    T::construction_num = T::destruction_num = 0;\n    CQ src_queue( allocator<T>(0) );\n    const size_t size = 10;\n    for( size_t i = 0; i < size; ++i )\n        src_queue.push( T(i + (i ^ size)) );\n    ASSERT( T::construction_num == 2 * size, NULL );\n    ASSERT( T::destruction_num == size, NULL );\n\n    const T* locations[size];\n    typename CQ::const_iterator qit = src_queue.unsafe_begin();\n    for( size_t i = 0; i < size; ++i, ++qit )\n        locations[i] = &(*qit);\n\n    // Ensuring allocation operation takes place during move when allocators are different\n    T::construction_num = T::destruction_num = 0;\n    CQ dst_queue( std::move(src_queue), allocator<T>(1) );\n    ASSERT( T::construction_num == size, NULL );\n    ASSERT( T::destruction_num == size+1, NULL ); // One item is used by the queue destructor\n\n    TestQueueOperabilityAfterDataMove<T>( src_queue );\n\n    qit = dst_queue.unsafe_begin();\n    for( size_t i = 0; i < size; ++i, ++qit ) {\n        ASSERT( locations[i] != &(*qit), \"an item should have been copied but was not\" );\n        locations[i] = &(*qit);\n    }\n\n    T::construction_num = T::destruction_num = 0;\n    // Ensuring there is no allocation operation during move with equal allocators\n    CQ dst_queue2( std::move(dst_queue), allocator<T>(1) );\n    ASSERT( T::construction_num == 0, NULL );\n    ASSERT( T::destruction_num == 0, NULL );\n\n    TestQueueOperabilityAfterDataMove<T>( dst_queue );\n\n    qit = dst_queue2.unsafe_begin();\n    for( size_t i = 0; i < size; ++i, ++qit ) {\n        ASSERT( locations[i] == &(*qit), \"an item should have been moved but was not\" );\n    }\n\n    for( size_t i = 0; i < size; ++i) {\n        T test(i + (i ^ size));\n        T popped;\n        bool pop_result = dst_queue2.try_pop( popped );\n        ASSERT( pop_result, NULL );\n        ASSERT( test == popped, NULL );\n    }\n    ASSERT( dst_queue2.empty(), NULL );\n    ASSERT( dst_queue2.size() == 0, NULL );\n}\n\nvoid TestMoveConstruction() {\n    REMARK(\"Testing move constructors with specified allocators...\");\n    TestMoveConstructors< ConcQWithSizeWrapper< Bar, allocator<Bar> >, Bar >();\n    TestMoveConstructors< tbb::concurrent_bounded_queue< Bar, allocator<Bar> >, Bar >();\n    // TODO: add tests with movable data\n    REMARK(\" work\\n\");\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {\n    Iterator1 old_i; // assigned at first iteration below\n    for( int k=0; k<size; ++k ) {\n        ASSERT( i!=j, NULL );\n        ASSERT( !(i==j), NULL );\n        // Test \"->\"\n        ASSERT( k+1==i->serial, NULL );\n        if( k&1 ) {\n            // Test post-increment\n            Foo f = *old_i++;\n            ASSERT( k+1==f.serial, NULL );\n            // Test assignment\n            i = old_i;\n        } else {\n            // Test pre-increment\n            if( k<size-1 ) {\n                Foo f = *++i;\n                ASSERT( k+2==f.serial, NULL );\n            } else ++i;\n            // Test assignment\n            old_i = i;\n        }\n    }\n    ASSERT( !(i!=j), NULL );\n    ASSERT( i==j, NULL );\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAssignment( Iterator2 j ) {\n    Iterator1 i(j);\n    ASSERT( i==j, NULL );\n    ASSERT( !(i!=j), NULL );\n    Iterator1 k;\n    k = j;\n    ASSERT( k==j, NULL );\n    ASSERT( !(k!=j), NULL );\n}\n\ntemplate<typename Iterator, typename T>\nvoid TestIteratorTraits() {\n    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );\n    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );\n    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );\n    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );\n    T x;\n    typename Iterator::reference xr = x;\n    typename Iterator::pointer xp = &x;\n    ASSERT( &xr==xp, NULL );\n}\n\n//! Test the iterators for concurrent_queue\ntemplate<typename CQ>\nvoid TestIterator() {\n    CQ queue;\n    const CQ& const_queue = queue;\n    for( int j=0; j<500; ++j ) {\n        TestIteratorAux( queue.unsafe_begin()      , queue.unsafe_end()      , j );\n        TestIteratorAux( const_queue.unsafe_begin(), const_queue.unsafe_end(), j );\n        TestIteratorAux( const_queue.unsafe_begin(), queue.unsafe_end()      , j );\n        TestIteratorAux( queue.unsafe_begin()      , const_queue.unsafe_end(), j );\n        Foo f;\n        f.serial = j+1;\n        queue.push(f);\n    }\n    TestIteratorAssignment<typename CQ::const_iterator>( const_queue.unsafe_begin() );\n    TestIteratorAssignment<typename CQ::const_iterator>( queue.unsafe_begin() );\n    TestIteratorAssignment<typename CQ::iterator>( queue.unsafe_begin() );\n    TestIteratorTraits<typename CQ::const_iterator, const Foo>();\n    TestIteratorTraits<typename CQ::iterator, Foo>();\n}\n\ntemplate<typename CQ>\nvoid TestConcurrentQueueType() {\n    AssertSameType( typename CQ::value_type(), Foo() );\n    Foo f;\n    const Foo g;\n    typename CQ::reference r = f;\n    ASSERT( &r==&f, NULL );\n    ASSERT( !r.is_const(), NULL );\n    typename CQ::const_reference cr = g;\n    ASSERT( &cr==&g, NULL );\n    ASSERT( cr.is_const(), NULL );\n}\n\ntemplate<typename CQ, typename T>\nvoid TestEmptyQueue() {\n    const CQ queue;\n    ASSERT( queue.size()==0, NULL );\n    ASSERT( queue.capacity()>0, NULL );\n    ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );\n}\n\ntemplate<typename CQ,typename T>\nvoid TestFullQueue() {\n    for( int n=0; n<10; ++n ) {\n        T::clear_counters();\n        CQ queue;\n        queue.set_capacity(n);\n        for( int i=0; i<=n; ++i ) {\n            T f;\n            f.serial = i;\n            bool result = queue.try_push( f );\n            ASSERT( result==(i<n), NULL );\n        }\n        for( int i=0; i<=n; ++i ) {\n            T f;\n            bool result = queue.try_pop( f );\n            ASSERT( result==(i<n), NULL );\n            ASSERT( !result || f.serial==i, NULL );\n        }\n        ASSERT( T::get_n_constructed()==T::get_n_destroyed(), NULL );\n    }\n}\n\ntemplate<typename CQ>\nvoid TestClear() {\n    FooConstructed = 0;\n    FooDestroyed = 0;\n    const unsigned int n=5;\n\n    CQ queue;\n    const int q_capacity=10;\n    queue.set_capacity(q_capacity);\n    for( size_t i=0; i<n; ++i ) {\n        Foo f;\n        f.serial = int(i);\n        queue.push( f );\n    }\n    ASSERT( unsigned(queue.size())==n, NULL );\n    queue.clear();\n    ASSERT( queue.size()==0, NULL );\n    for( size_t i=0; i<n; ++i ) {\n        Foo f;\n        f.serial = int(i);\n        queue.push( f );\n    }\n    ASSERT( unsigned(queue.size())==n, NULL );\n    queue.clear();\n    ASSERT( queue.size()==0, NULL );\n    for( size_t i=0; i<n; ++i ) {\n        Foo f;\n        f.serial = int(i);\n        queue.push( f );\n    }\n    ASSERT( unsigned(queue.size())==n, NULL );\n}\n\ntemplate<typename T>\nstruct TestNegativeQueueBody: NoAssign {\n    tbb::concurrent_bounded_queue<T>& queue;\n    const int nthread;\n    TestNegativeQueueBody( tbb::concurrent_bounded_queue<T>& q, int n ) : queue(q), nthread(n) {}\n    void operator()( int k ) const {\n        if( k==0 ) {\n            int number_of_pops = nthread-1;\n            // Wait for all pops to pend.\n            while( queue.size()>-number_of_pops ) {\n                __TBB_Yield();\n            }\n            for( int i=0; ; ++i ) {\n                ASSERT( queue.size()==i-number_of_pops, NULL );\n                ASSERT( queue.empty()==(queue.size()<=0), NULL );\n                if( i==number_of_pops ) break;\n                // Satisfy another pop\n                queue.push( T() );\n            }\n        } else {\n            // Pop item from queue\n            T item;\n            queue.pop(item);\n        }\n    }\n};\n\n//! Test a queue with a negative size.\ntemplate<typename T>\nvoid TestNegativeQueue( int nthread ) {\n    tbb::concurrent_bounded_queue<T> queue;\n    NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );\n}\n\n#if TBB_USE_EXCEPTIONS\ntemplate<template<typename, typename> class CQ,typename A1,typename A2,typename T>\nvoid TestExceptionBody() {\n    enum methods {\n        m_push = 0,\n        m_pop\n    };\n\n    REMARK(\"Testing exception safety\\n\");\n    MaxFooCount = 5;\n    // verify 'clear()' on exception; queue's destructor calls its clear()\n    // Do test on queues of two different types at the same time to\n    // catch problem with incorrect sharing between templates.\n    {\n        CQ<T,A1> queue0;\n        CQ<int,A1> queue1;\n        for( int i=0; i<2; ++i ) {\n            bool caught = false;\n            try {\n                // concurrent_queue internally rebinds the allocator to the one for 'char'\n                A2::init_counters();\n                A2::set_limits(N/2);\n                for( int k=0; k<N; k++ ) {\n                    if( i==0 )\n                        push(queue0, T(), i);\n                    else\n                        queue1.push( k );\n                }\n            } catch (...) {\n                caught = true;\n            }\n            ASSERT( caught, \"call to push should have thrown exception\" );\n        }\n    }\n    REMARK(\"... queue destruction test passed\\n\");\n\n    try {\n        int n_pushed=0, n_popped=0;\n        for(int t = 0; t <= 1; t++)// exception type -- 0 : from allocator(), 1 : from Foo's constructor\n        {\n            CQ<T,A1> queue_test;\n            for( int m=m_push; m<=m_pop; m++ ) {\n                // concurrent_queue internally rebinds the allocator to the one for 'char'\n                A2::init_counters();\n\n                if(t) MaxFooCount = MaxFooCount + 400;\n                else A2::set_limits(N/2);\n\n                try {\n                    switch(m) {\n                    case m_push:\n                        for( int k=0; k<N; k++ ) {\n                            push( queue_test, T(), k );\n                            n_pushed++;\n                        }\n                        break;\n                    case m_pop:\n                        n_popped=0;\n                        for( int k=0; k<n_pushed; k++ ) {\n                            T elt;\n                            queue_test.try_pop( elt );\n                            n_popped++;\n                        }\n                        n_pushed = 0;\n                        A2::set_limits();\n                        break;\n                    }\n                    if( !t && m==m_push ) ASSERT(false, \"should throw an exception\");\n                } catch ( Foo_exception & ) {\n                    long tc = MaxFooCount;\n                    MaxFooCount = 0; // disable exception\n                    switch(m) {\n                    case m_push:\n                        ASSERT( ptrdiff_t(queue_test.size())==n_pushed, \"incorrect queue size\" );\n                        for( int k=0; k<(int)tc; k++ ) {\n                            push( queue_test, T(), k );\n                            n_pushed++;\n                        }\n                        break;\n                    case m_pop:\n                        n_pushed -= (n_popped+1); // including one that threw the exception\n                        ASSERT( n_pushed>=0, \"n_pushed cannot be less than 0\" );\n                        for( int k=0; k<1000; k++ ) {\n                            push( queue_test, T(), k );\n                            n_pushed++;\n                        }\n                        ASSERT( !queue_test.empty(), \"queue must not be empty\" );\n                        ASSERT( ptrdiff_t(queue_test.size())==n_pushed, \"queue size must be equal to n pushed\" );\n                        for( int k=0; k<n_pushed; k++ ) {\n                            T elt;\n                            queue_test.try_pop( elt );\n                        }\n                        ASSERT( queue_test.empty(), \"queue must be empty\" );\n                        ASSERT( queue_test.size()==0, \"queue must be empty\" );\n                        break;\n                    }\n                    MaxFooCount = tc;\n                } catch ( std::bad_alloc & ) {\n                    A2::set_limits(); // disable exception from allocator\n                    size_t size = queue_test.size();\n                    switch(m) {\n                    case m_push:\n                        ASSERT( size>0, \"incorrect queue size\");\n                        break;\n                    case m_pop:\n                        if( !t ) ASSERT( false, \"should not throw an exception\" );\n                        break;\n                    }\n                }\n                REMARK(\"... for t=%d and m=%d, exception test passed\\n\", t, m);\n            }\n        }\n    } catch(...) {\n        ASSERT(false, \"unexpected exception\");\n    }\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\nvoid TestExceptions() {\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception safety test is skipped.\\n\");\n#elif TBB_USE_EXCEPTIONS\n    typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;\n    typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;\n    TestExceptionBody<ConcQWithSizeWrapper,allocator_t,allocator_char_t,FooEx>();\n    TestExceptionBody<tbb::concurrent_bounded_queue,allocator_t,allocator_char_t,FooEx>();\n#endif /* TBB_USE_EXCEPTIONS */\n}\n\ntemplate<typename CQ, typename T>\nstruct TestQueueElements: NoAssign {\n    CQ& queue;\n    const int nthread;\n    TestQueueElements( CQ& q, int n ) : queue(q), nthread(n) {}\n    void operator()( int k ) const {\n        for( int i=0; i<1000; ++i ) {\n            if( (i&0x1)==0 ) {\n                ASSERT( T(k)<T(nthread), NULL );\n                queue.push( T(k) );\n            } else {\n                // Pop item from queue\n                T item = 0;\n                queue.try_pop(item);\n                ASSERT( item<=T(nthread), NULL );\n            }\n        }\n    }\n};\n\n//! Test concurrent queue with primitive data type\ntemplate<typename CQ, typename T>\nvoid TestPrimitiveTypes( int nthread, T exemplar )\n{\n    CQ queue;\n    for( int i=0; i<100; ++i )\n        queue.push( exemplar );\n    NativeParallelFor( nthread, TestQueueElements<CQ,T>(queue,nthread) );\n}\n\n#include \"harness_m128.h\"\n\n#if HAVE_m128 || HAVE_m256\n\n//! Test concurrent queue with vector types\n/** Type Queue should be a queue of ClassWithSSE/ClassWithAVX. */\ntemplate<typename ClassWithVectorType, typename Queue>\nvoid TestVectorTypes() {\n    Queue q1;\n    for( int i=0; i<100; ++i ) {\n        // VC8 does not properly align a temporary value; to work around, use explicit variable\n        ClassWithVectorType bar(i);\n        q1.push(bar);\n    }\n\n    // Copy the queue\n    Queue q2 = q1;\n    // Check that elements of the copy are correct\n    typename Queue::const_iterator ci = q2.unsafe_begin();\n    for( int i=0; i<100; ++i ) {\n        ClassWithVectorType foo = *ci;\n        ClassWithVectorType bar(i);\n        ASSERT( *ci==bar, NULL );\n        ++ci;\n    }\n\n    for( int i=0; i<101; ++i ) {\n        ClassWithVectorType tmp;\n        bool b = q1.try_pop( tmp );\n        ASSERT( b==(i<100), NULL );\n        ClassWithVectorType bar(i);\n        ASSERT( !b || tmp==bar, NULL );\n    }\n}\n#endif /* HAVE_m128 || HAVE_m256 */\n\nvoid TestEmptiness()\n{\n    REMARK(\" Test Emptiness\\n\");\n    TestEmptyQueue<ConcQWithCapacity<char>, char>();\n    TestEmptyQueue<ConcQWithCapacity<Foo>, Foo>();\n    TestEmptyQueue<tbb::concurrent_bounded_queue<char>, char>();\n    TestEmptyQueue<tbb::concurrent_bounded_queue<Foo>, Foo>();\n}\n\nvoid TestFullness()\n{\n    REMARK(\" Test Fullness\\n\");\n    TestFullQueue<ConcQWithCapacity<Foo>,Foo>();\n    TestFullQueue<tbb::concurrent_bounded_queue<Foo>,Foo>();\n}\n\nvoid TestClearWorks()\n{\n    REMARK(\" Test concurrent_queue::clear() works\\n\");\n    TestClear<ConcQWithCapacity<Foo> >();\n    TestClear<tbb::concurrent_bounded_queue<Foo> >();\n}\n\nvoid TestQueueTypeDeclaration()\n{\n    REMARK(\" Test concurrent_queue's types work\\n\");\n    TestConcurrentQueueType<tbb::concurrent_queue<Foo> >();\n    TestConcurrentQueueType<tbb::concurrent_bounded_queue<Foo> >();\n}\n\nvoid TestQueueIteratorWorks()\n{\n    REMARK(\" Test concurrent_queue's iterators work\\n\");\n    TestIterator<tbb::concurrent_queue<Foo> >();\n    TestIterator<tbb::concurrent_bounded_queue<Foo> >();\n}\n\n#if TBB_USE_EXCEPTIONS\n#define BAR_EX BarEx\n#else\n#define BAR_EX Empty  /* passed as template arg but should not be used */\n#endif\nclass Empty;\n\nvoid TestQueueConstructors()\n{\n    REMARK(\" Test concurrent_queue's constructors work\\n\");\n    TestConstructors<ConcQWithSizeWrapper<Bar>,Bar,BarIterator,ConcQWithSizeWrapper<BAR_EX>,BAR_EX>();\n    TestConstructors<tbb::concurrent_bounded_queue<Bar>,Bar,BarIterator,tbb::concurrent_bounded_queue<BAR_EX>,BAR_EX>();\n}\n\nvoid TestQueueWorksWithPrimitiveTypes()\n{\n    REMARK(\" Test concurrent_queue works with primitive types\\n\");\n    TestPrimitiveTypes<tbb::concurrent_queue<char>, char>( MaxThread, (char)1 );\n    TestPrimitiveTypes<tbb::concurrent_queue<int>, int>( MaxThread, (int)-12 );\n    TestPrimitiveTypes<tbb::concurrent_queue<float>, float>( MaxThread, (float)-1.2f );\n    TestPrimitiveTypes<tbb::concurrent_queue<double>, double>( MaxThread, (double)-4.3 );\n    TestPrimitiveTypes<tbb::concurrent_bounded_queue<char>, char>( MaxThread, (char)1 );\n    TestPrimitiveTypes<tbb::concurrent_bounded_queue<int>, int>( MaxThread, (int)-12 );\n    TestPrimitiveTypes<tbb::concurrent_bounded_queue<float>, float>( MaxThread, (float)-1.2f );\n    TestPrimitiveTypes<tbb::concurrent_bounded_queue<double>, double>( MaxThread, (double)-4.3 );\n}\n\nvoid TestQueueWorksWithSSE()\n{\n    REMARK(\" Test concurrent_queue works with SSE data\\n\");\n#if HAVE_m128\n    TestVectorTypes<ClassWithSSE, tbb::concurrent_queue<ClassWithSSE> >();\n    TestVectorTypes<ClassWithSSE, tbb::concurrent_bounded_queue<ClassWithSSE> >();\n#endif /* HAVE_m128 */\n#if HAVE_m256\n    if( have_AVX() ) {\n        TestVectorTypes<ClassWithAVX, tbb::concurrent_queue<ClassWithAVX> >();\n        TestVectorTypes<ClassWithAVX, tbb::concurrent_bounded_queue<ClassWithAVX> >();\n    }\n#endif /* HAVE_m256 */\n}\n\nvoid TestConcurrentPushPop()\n{\n    REMARK(\" Test concurrent_queue's concurrent push and pop\\n\");\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        REMARK(\" Testing with %d thread(s)\\n\", nthread );\n        TestNegativeQueue<Foo>(nthread);\n        for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {\n            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(-1),nthread);\n            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(1),nthread);\n            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(2),nthread);\n            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(10),nthread);\n            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(100),nthread);\n        }\n        for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {\n            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(-1),nthread);\n            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(1),nthread);\n            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(2),nthread);\n            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(10),nthread);\n            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(100),nthread);\n        }\n    }\n}\n\n#if TBB_USE_EXCEPTIONS\ntbb::atomic<size_t> num_pushed;\ntbb::atomic<size_t> num_popped;\ntbb::atomic<size_t> failed_pushes;\ntbb::atomic<size_t> failed_pops;\n\nclass SimplePushBody {\n    tbb::concurrent_bounded_queue<int>* q;\n    int max;\npublic:\n    SimplePushBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr) : q(_q), max(hi_thr) {}\n    bool operator()() { // predicate for spin_wait_while\n        return q->size()<max;\n    }\n    void operator()(int thread_id) const {\n        if (thread_id == max) {\n            spin_wait_while( *this );\n            q->abort();\n            return;\n        }\n        try {\n            q->push(42);\n            ++num_pushed;\n        } catch ( tbb::user_abort& ) {\n            ++failed_pushes;\n        }\n    }\n};\n\nclass SimplePopBody {\n    tbb::concurrent_bounded_queue<int>* q;\n    int max;\n    int prefill;\npublic:\n    SimplePopBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr, int nitems)\n    : q(_q), max(hi_thr), prefill(nitems) {}\n    bool operator()() { // predicate for spin_wait_while\n        // There should be `max` pops, and `prefill` should succeed\n        return q->size()>prefill-max;\n    }\n    void operator()(int thread_id) const {\n        int e;\n        if (thread_id == max) {\n            spin_wait_while( *this );\n            q->abort();\n            return;\n        }\n        try {\n            q->pop(e);\n            ++num_popped;\n        } catch ( tbb::user_abort& ) {\n            ++failed_pops;\n        }\n    }\n};\n#endif /* TBB_USE_EXCEPTIONS */\n\nvoid TestAbort() {\n#if TBB_USE_EXCEPTIONS\n    for (int nthreads=MinThread; nthreads<=MaxThread; ++nthreads) {\n        REMARK(\"Testing Abort on %d thread(s).\\n\", nthreads);\n\n        REMARK(\"...testing pushing to zero-sized queue\\n\");\n        tbb::concurrent_bounded_queue<int> iq1;\n        iq1.set_capacity(0);\n        for (int i=0; i<10; ++i) {\n            num_pushed = num_popped = failed_pushes = failed_pops = 0;\n            SimplePushBody my_push_body1(&iq1, nthreads);\n            NativeParallelFor( nthreads+1, my_push_body1 );\n            ASSERT(num_pushed == 0, \"no elements should have been pushed to zero-sized queue\");\n            ASSERT((int)failed_pushes == nthreads, \"All threads should have failed to push an element to zero-sized queue\");\n            // Do not test popping each time in order to test queue destruction with no previous pops\n            if (nthreads < (MaxThread+MinThread)/2) {\n                int e;\n                bool queue_empty = !iq1.try_pop(e);\n                ASSERT(queue_empty, \"no elements should have been popped from zero-sized queue\");\n            }\n        }\n\n        REMARK(\"...testing pushing to small-sized queue\\n\");\n        tbb::concurrent_bounded_queue<int> iq2;\n        iq2.set_capacity(2);\n        for (int i=0; i<10; ++i) {\n            num_pushed = num_popped = failed_pushes = failed_pops = 0;\n            SimplePushBody my_push_body2(&iq2, nthreads);\n            NativeParallelFor( nthreads+1, my_push_body2 );\n            ASSERT(num_pushed <= 2, \"at most 2 elements should have been pushed to queue of size 2\");\n            if (nthreads >= 2)\n                ASSERT((int)failed_pushes == nthreads-2, \"nthreads-2 threads should have failed to push an element to queue of size 2\");\n            int e;\n            while (iq2.try_pop(e)) ;\n        }\n\n        REMARK(\"...testing popping from small-sized queue\\n\");\n        tbb::concurrent_bounded_queue<int> iq3;\n        iq3.set_capacity(2);\n        for (int i=0; i<10; ++i) {\n            num_pushed = num_popped = failed_pushes = failed_pops = 0;\n            iq3.push(42);\n            iq3.push(42);\n            SimplePopBody my_pop_body(&iq3, nthreads, 2);\n            NativeParallelFor( nthreads+1, my_pop_body );\n            ASSERT(num_popped <= 2, \"at most 2 elements should have been popped from queue of size 2\");\n            if (nthreads >= 2)\n                ASSERT((int)failed_pops == nthreads-2, \"nthreads-2 threads should have failed to pop an element from queue of size 2\");\n            else {\n                int e;\n                iq3.pop(e);\n            }\n        }\n\n        REMARK(\"...testing pushing and popping from small-sized queue\\n\");\n        tbb::concurrent_bounded_queue<int> iq4;\n        int cap = nthreads/2;\n        if (!cap) cap=1;\n        iq4.set_capacity(cap);\n        for (int i=0; i<10; ++i) {\n            num_pushed = num_popped = failed_pushes = failed_pops = 0;\n            SimplePushBody my_push_body2(&iq4, nthreads);\n            NativeParallelFor( nthreads+1, my_push_body2 );\n            ASSERT((int)num_pushed <= cap, \"at most cap elements should have been pushed to queue of size cap\");\n            if (nthreads >= cap)\n                ASSERT((int)failed_pushes == nthreads-cap, \"nthreads-cap threads should have failed to push an element to queue of size cap\");\n            SimplePopBody my_pop_body(&iq4, nthreads, (int)num_pushed);\n            NativeParallelFor( nthreads+1, my_pop_body );\n            ASSERT((int)num_popped <= cap, \"at most cap elements should have been popped from queue of size cap\");\n            if (nthreads >= cap)\n                ASSERT((int)failed_pops == nthreads-cap, \"nthreads-cap threads should have failed to pop an element from queue of size cap\");\n            else {\n                int e;\n                while (iq4.try_pop(e)) ;\n            }\n        }\n    }\n#endif\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nstruct MoveOperationTracker {\n    static size_t copy_constructor_called_times;\n    static size_t move_constructor_called_times;\n    static size_t copy_assignment_called_times;\n    static size_t move_assignment_called_times;\n\n    MoveOperationTracker() {}\n    MoveOperationTracker(const MoveOperationTracker&) {\n        ++copy_constructor_called_times;\n    }\n    MoveOperationTracker(MoveOperationTracker&&) {\n        ++move_constructor_called_times;\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker const&) {\n        ++copy_assignment_called_times;\n        return *this;\n    }\n    MoveOperationTracker& operator=(MoveOperationTracker&&) {\n        ++move_assignment_called_times;\n        return *this;\n    }\n};\nsize_t MoveOperationTracker::copy_constructor_called_times = 0;\nsize_t MoveOperationTracker::move_constructor_called_times = 0;\nsize_t MoveOperationTracker::copy_assignment_called_times = 0;\nsize_t MoveOperationTracker::move_assignment_called_times = 0;\n\ntemplate <class CQ, push_t push_op, pop_t pop_op>\nvoid TestMoveSupport() {\n    size_t &mcct = MoveOperationTracker::move_constructor_called_times;\n    size_t &ccct = MoveOperationTracker::copy_constructor_called_times;\n    size_t &cact = MoveOperationTracker::copy_assignment_called_times;\n    size_t &mact = MoveOperationTracker::move_assignment_called_times;\n    mcct = ccct = cact = mact = 0;\n\n    CQ q;\n\n    ASSERT(mcct == 0, \"Value must be zero-initialized\");\n    ASSERT(ccct == 0, \"Value must be zero-initialized\");\n    ASSERT(pusher<push_op>::push( q, MoveOperationTracker() ), NULL);\n    ASSERT(mcct == 1, \"Not working push(T&&) or try_push(T&&)?\");\n    ASSERT(ccct == 0, \"Copying of arg occurred during push(T&&) or try_push(T&&)\");\n\n    MoveOperationTracker ob;\n    ASSERT(pusher<push_op>::push( q, std::move(ob) ), NULL);\n    ASSERT(mcct == 2, \"Not working push(T&&) or try_push(T&&)?\");\n    ASSERT(ccct == 0, \"Copying of arg occurred during push(T&&) or try_push(T&&)\");\n\n    ASSERT(cact == 0, \"Copy assignment called during push(T&&) or try_push(T&&)\");\n    ASSERT(mact == 0, \"Move assignment called during push(T&&) or try_push(T&&)\");\n\n    bool result = popper<pop_op>::pop( q, ob );\n    ASSERT(result, NULL);\n    ASSERT(cact == 0, \"Copy assignment called during try_pop(T&&)\");\n    ASSERT(mact == 1, \"Move assignment was not called during try_pop(T&&)\");\n}\n\nvoid TestMoveSupportInPushPop() {\n    REMARK(\"Testing Move Support in Push/Pop...\");\n    TestMoveSupport< tbb::concurrent_queue<MoveOperationTracker>, push_op, try_pop_op >();\n    TestMoveSupport< tbb::concurrent_bounded_queue<MoveOperationTracker>, push_op, pop_op >();\n    TestMoveSupport< tbb::concurrent_bounded_queue<MoveOperationTracker>, try_push_op, try_pop_op >();\n    REMARK(\" works.\\n\");\n}\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\nclass NonTrivialConstructorType {\npublic:\n    NonTrivialConstructorType( int a = 0 ) : m_a( a ), m_str( \"\" ) {}\n    NonTrivialConstructorType( const std::string& str ) : m_a( 0 ), m_str( str ) {}\n    NonTrivialConstructorType( int a, const std::string& str ) : m_a( a ), m_str( str ) {}\n    int get_a() const { return m_a; }\n    std::string get_str() const { return m_str; }\nprivate:\n    int m_a;\n    std::string m_str;\n};\n\nenum emplace_t { emplace_op, try_emplace_op };\n\ntemplate< emplace_t emplace_op >\nstruct emplacer {\n    template< typename CQ, typename... Args>\n    static void emplace( CQ& queue, Args&&... val ) { queue.emplace( std::forward<Args>( val )... ); }\n};\n\ntemplate<>\nstruct emplacer< try_emplace_op > {\n    template<typename CQ, typename... Args>\n    static void emplace( CQ& queue, Args&&... val ) {\n        bool result = queue.try_emplace( std::forward<Args>( val )... );\n        ASSERT( result, \"try_emplace error\\n\" );\n    }\n};\n\ntemplate<typename CQ, emplace_t emplace_op>\nvoid TestEmplaceInQueue() {\n    CQ cq;\n    std::string test_str = \"I'm being emplaced!\";\n    {\n        emplacer<emplace_op>::emplace( cq, 5 );\n        ASSERT( cq.size() == 1, NULL );\n        NonTrivialConstructorType popped( -1 );\n        bool result = cq.try_pop( popped );\n        ASSERT( result, NULL );\n        ASSERT( popped.get_a() == 5, NULL );\n        ASSERT( popped.get_str() == std::string( \"\" ), NULL );\n    }\n\n    ASSERT( cq.empty(), NULL );\n\n    {\n        NonTrivialConstructorType popped( -1 );\n        emplacer<emplace_op>::emplace( cq, std::string(test_str) );\n        bool result = cq.try_pop( popped );\n        ASSERT( result, NULL );\n        ASSERT( popped.get_a() == 0, NULL );\n        ASSERT( popped.get_str() == test_str, NULL );\n    }\n\n    ASSERT( cq.empty(), NULL );\n\n    {\n        NonTrivialConstructorType popped( -1, \"\" );\n        emplacer<emplace_op>::emplace( cq, 5, std::string(test_str) );\n        bool result = cq.try_pop( popped );\n        ASSERT( result, NULL );\n        ASSERT( popped.get_a() == 5, NULL );\n        ASSERT( popped.get_str() == test_str, NULL );\n    }\n}\nvoid TestEmplace() {\n    REMARK(\"Testing support for 'emplace' method...\");\n    TestEmplaceInQueue< ConcQWithSizeWrapper<NonTrivialConstructorType>, emplace_op >();\n    TestEmplaceInQueue< tbb::concurrent_bounded_queue<NonTrivialConstructorType>, emplace_op >();\n    TestEmplaceInQueue< tbb::concurrent_bounded_queue<NonTrivialConstructorType>, try_emplace_op >();\n    REMARK(\" works.\\n\");\n}\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate <typename Queue>\nvoid Examine(Queue q, const std::vector<typename Queue::value_type> &vec) {\n    typedef typename Queue::value_type value_type;\n\n    AssertEquality(q, vec);\n\n    const Queue cq = q;\n    AssertEquality(cq, vec);\n\n    q.clear();\n    AssertEmptiness(q);\n\n    FillTest<push_op>(q, vec);\n    EmptyTest<try_pop_op>(q, vec);\n\n    bounded_queue_specific_test(q, vec);\n\n    typename Queue::allocator_type a = q.get_allocator();\n    value_type *ptr = a.allocate(1);\n    ASSERT(ptr, NULL);\n    a.deallocate(ptr, 1);\n}\n\ntemplate <typename Queue, typename QueueDebugAlloc>\nvoid TypeTester(const std::vector<typename Queue::value_type> &vec) {\n    typedef typename std::vector<typename Queue::value_type>::const_iterator iterator;\n    ASSERT(vec.size() >= 5, \"Array should have at least 5 elements\");\n    // Construct an empty queue.\n    Queue q1;\n    for (iterator it = vec.begin(); it != vec.end(); ++it) q1.push(*it);\n    Examine(q1, vec);\n    // Copying constructor.\n    Queue q3(q1);\n    Examine(q3, vec);\n    // Construct with non-default allocator.\n    QueueDebugAlloc q4;\n    for (iterator it = vec.begin(); it != vec.end(); ++it) q4.push(*it);\n    Examine(q4, vec);\n    // Copying constructor with the same allocator type.\n    QueueDebugAlloc q5(q4);\n    Examine(q5, vec);\n    // Construction with given allocator instance.\n    typename QueueDebugAlloc::allocator_type a;\n    QueueDebugAlloc q6(a);\n    for (iterator it = vec.begin(); it != vec.end(); ++it) q6.push(*it);\n    Examine(q6, vec);\n    // Construction with copying iteration range and given allocator instance.\n    QueueDebugAlloc q7(q1.unsafe_begin(), q1.unsafe_end(), a);\n    Examine<QueueDebugAlloc>(q7, vec);\n}\n\ntemplate <typename value_type>\nvoid TestTypes(const std::vector<value_type> &vec) {\n    TypeTester< ConcQWithSizeWrapper<value_type>, ConcQWithSizeWrapper<value_type, debug_allocator<value_type> > >(vec);\n    TypeTester< tbb::concurrent_bounded_queue<value_type>, tbb::concurrent_bounded_queue<value_type, debug_allocator<value_type> > >(vec);\n}\n\nvoid TestTypes() {\n    const int NUMBER = 10;\n\n    std::vector<int> arrInt;\n    for (int i = 0; i < NUMBER; ++i) arrInt.push_back(i);\n    std::vector< tbb::atomic<int> > arrTbb;\n    for (int i = 0; i < NUMBER; ++i) {\n        tbb::atomic<int> a;\n        a = i;\n        arrTbb.push_back(a);\n    }\n    TestTypes(arrInt);\n    TestTypes(arrTbb);\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    std::vector< std::shared_ptr<int> > arrShr;\n    for (int i = 0; i < NUMBER; ++i) arrShr.push_back(std::make_shared<int>(i));\n    std::vector< std::weak_ptr<int> > arrWk;\n    std::copy(arrShr.begin(), arrShr.end(), std::back_inserter(arrWk));\n    TestTypes(arrShr);\n    TestTypes(arrWk);\n#else\n    REPORT(\"Known issue: C++11 smart pointer tests are skipped.\\n\");\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n\nint TestMain () {\n    TestEmptiness();\n\n    TestFullness();\n\n    TestClearWorks();\n\n    TestQueueTypeDeclaration();\n\n    TestQueueIteratorWorks();\n\n    TestQueueConstructors();\n\n    TestQueueWorksWithPrimitiveTypes();\n\n    TestQueueWorksWithSSE();\n\n    // Test concurrent operations\n    TestConcurrentPushPop();\n\n    TestExceptions();\n\n    TestAbort();\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestMoveSupportInPushPop();\n    TestMoveConstruction();\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    TestEmplace();\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    TestTypes();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_queue_whitebox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFINE_PRIVATE_PUBLIC 1\n#include \"harness_inject_scheduler.h\"\n#define private public\n#define protected public\n#include \"tbb/concurrent_queue.h\"\n#include \"../tbb/concurrent_queue.cpp\"\n#undef protected\n#undef private\n#include \"harness.h\"\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <limits>\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n\ntemplate <typename Q>\nclass FloggerBody : NoAssign {\n    Q& q;\n    size_t elem_num;\npublic:\n    FloggerBody(Q& q_, size_t elem_num_) : q(q_), elem_num(elem_num_) {}\n    void operator()(const int threadID) const {\n        typedef typename Q::value_type value_type;\n        value_type elem = value_type(threadID);\n        for (size_t i = 0; i < elem_num; ++i) {\n            q.push(elem);\n            (void) q.try_pop(elem);\n        }\n    }\n};\n\ntemplate <typename Q>\nvoid TestFloggerHelp(Q& q, size_t items_per_page) {\n    size_t nq = q.my_rep->n_queue;\n    size_t reserved_elem_num = nq * items_per_page - 1;\n    size_t hack_val = std::numeric_limits<std::size_t>::max() & ~reserved_elem_num;\n    q.my_rep->head_counter = hack_val;\n    q.my_rep->tail_counter = hack_val;\n    size_t k = q.my_rep->tail_counter & -(ptrdiff_t)nq;\n\n    for (size_t i=0; i<nq; ++i) {\n        q.my_rep->array[i].head_counter = k;\n        q.my_rep->array[i].tail_counter = k;\n    }\n    NativeParallelFor(MaxThread, FloggerBody<Q>(q, reserved_elem_num + 20)); // to induce the overflow occurrence\n    ASSERT(q.empty(), \"FAILED flogger/empty test.\");\n    ASSERT(q.my_rep->head_counter < hack_val, \"FAILED wraparound test.\");\n}\n\ntemplate <typename T>\nvoid TestFlogger() {\n    {\n        tbb::concurrent_queue<T> q;\n        REMARK(\"Wraparound on strict_ppl::concurrent_queue...\");\n        TestFloggerHelp(q, q.my_rep->items_per_page);\n        REMARK(\" works.\\n\");\n    }\n    {\n        tbb::concurrent_bounded_queue<T> q;\n        REMARK(\"Wraparound on tbb::concurrent_bounded_queue...\");\n        TestFloggerHelp(q, q.items_per_page);\n        REMARK(\" works.\\n\");\n    }\n}\n\nvoid TestWraparound() {\n    REMARK(\"Testing Wraparound...\\n\");\n    TestFlogger<int>();\n    TestFlogger<unsigned char>();\n    REMARK(\"Done Testing Wraparound.\\n\");\n}\n\nint TestMain () {\n    TestWraparound();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_unordered_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Some tests in this source file are based on PPL tests provided by Microsoft. */\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness.h\"\n#include \"test_container_move_support.h\"\n// Test that unordered containers do not require keys have default constructors.\n#define __HARNESS_CHECKTYPE_DEFAULT_CTOR 0\n#include \"harness_checktype.h\"\n#undef  __HARNESS_CHECKTYPE_DEFAULT_CTOR\n#include \"harness_allocator.h\"\n\ntemplate<typename T>\nstruct degenerate_hash {\n    size_t operator()(const T& /*a*/) const {\n        return 1;\n    }\n};\n\n// TestInitListSupportWithoutAssign with an empty initializer list causes internal error in Intel Compiler.\n#define __TBB_ICC_EMPTY_INIT_LIST_TESTS_BROKEN (__INTEL_COMPILER && __INTEL_COMPILER <= 1500)\n\ntypedef local_counting_allocator<debug_allocator<std::pair<const int,int>,std::allocator> > MyAllocator;\n\n#define CheckAllocatorE(t,a,f) CheckAllocator(t,a,f,true,__LINE__)\n#define CheckAllocatorA(t,a,f) CheckAllocator(t,a,f,false,__LINE__)\ntemplate<typename MyTable>\ninline void CheckAllocator(MyTable &table, size_t expected_allocs, size_t expected_frees, bool exact = true, int line = 0) {\n    typename MyTable::allocator_type a = table.get_allocator();\n    REMARK(\"#%d checking allocators: items %u/%u, allocs %u/%u\\n\", line,\n        unsigned(a.items_allocated), unsigned(a.items_freed), unsigned(a.allocations), unsigned(a.frees) );\n    ASSERT( a.items_allocated == a.allocations, NULL); ASSERT( a.items_freed == a.frees, NULL);\n    if(exact) {\n        ASSERT( a.allocations == expected_allocs, NULL); ASSERT( a.frees == expected_frees, NULL);\n    } else {\n        ASSERT( a.allocations >= expected_allocs, NULL); ASSERT( a.frees >= expected_frees, NULL);\n        ASSERT( a.allocations - a.frees == expected_allocs - expected_frees, NULL );\n    }\n}\n\ntemplate<typename T>\nstruct strip_const { typedef T type; };\n\ntemplate<typename T>\nstruct strip_const<const T> { typedef T type; };\n\n// value generator for cumap\ntemplate <typename K, typename V = std::pair<const K, K> >\nstruct ValueFactory {\n    typedef typename strip_const<K>::type Kstrip;\n    static V make(const K &value) { return V(value, value); }\n    static Kstrip key(const V &value) { return value.first; }\n    static Kstrip get(const V &value) { return (Kstrip)value.second; }\n    template< typename U >\n    static U convert(const V &value) { return U(value.second); }\n};\n\n// generator for cuset\ntemplate <typename T>\nstruct ValueFactory<T, T> {\n    static T make(const T &value) { return value; }\n    static T key(const T &value) { return value; }\n    static T get(const T &value) { return value; }\n    template< typename U >\n    static U convert(const T &value) { return U(value); }\n};\n\ntemplate <typename T>\nstruct Value : ValueFactory<typename T::key_type, typename T::value_type> {\n    template<typename U>\n    static bool compare( const typename T::iterator& it, U val ) {\n        return (Value::template convert<U>(*it) == val);\n    }\n};\n\n#if _MSC_VER\n#pragma warning(disable: 4189) // warning 4189 -- local variable is initialized but not referenced\n#pragma warning(disable: 4127) // warning 4127 -- while (true) has a constant expression in it\n#endif\n\ntemplate<typename ContainerType, typename Iterator, typename RangeType>\nstd::pair<intptr_t,intptr_t> CheckRecursiveRange(RangeType range) {\n    std::pair<intptr_t,intptr_t> sum(0, 0); // count, sum\n    for( Iterator i = range.begin(), e = range.end(); i != e; ++i ) {\n        ++sum.first; sum.second += Value<ContainerType>::get(*i);\n    }\n    if( range.is_divisible() ) {\n        RangeType range2( range, tbb::split() );\n        std::pair<intptr_t,intptr_t> sum1 = CheckRecursiveRange<ContainerType,Iterator, RangeType>( range );\n        std::pair<intptr_t,intptr_t> sum2 = CheckRecursiveRange<ContainerType,Iterator, RangeType>( range2 );\n        sum1.first += sum2.first; sum1.second += sum2.second;\n        ASSERT( sum == sum1, \"Mismatched ranges after division\");\n    }\n    return sum;\n}\n\ntemplate <typename T>\nstruct SpecialTests {\n    static void Test(const char *str) {REMARK(\"skipped -- specialized %s tests\\n\", str);}\n};\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\ntemplate<typename container_type>\nbool equal_containers( container_type const& lhs, container_type const& rhs ) {\n    if ( lhs.size() != rhs.size() ) {\n        return false;\n    }\n    return std::equal( lhs.begin(), lhs.end(), rhs.begin(), Harness::IsEqual() );\n}\n\n#include \"test_initializer_list.h\"\n\ntemplate <typename Table, typename MultiTable>\nvoid TestInitList( std::initializer_list<typename Table::value_type> il ) {\n    using namespace initializer_list_support_tests;\n    REMARK(\"testing initializer_list methods \\n\");\n\n    TestInitListSupportWithoutAssign<Table,test_special_insert>(il);\n    TestInitListSupportWithoutAssign<MultiTable, test_special_insert>( il );\n\n#if __TBB_ICC_EMPTY_INIT_LIST_TESTS_BROKEN\n    REPORT( \"Known issue: TestInitListSupportWithoutAssign with an empty initializer list is skipped.\\n\");\n#else\n    TestInitListSupportWithoutAssign<Table, test_special_insert>( {} );\n    TestInitListSupportWithoutAssign<MultiTable, test_special_insert>( {} );\n#endif\n}\n#endif //if __TBB_INITIALIZER_LISTS_PRESENT\n\ntemplate<Harness::StateTrackableBase::StateValue desired_state, typename T>\nvoid check_value_state(/* typename do_check_element_state =*/ tbb::internal::true_type, T const& t, const char* filename, int line )\n{\n    ASSERT_CUSTOM(is_state_f<desired_state>()(t), \"\", filename, line);\n}\n\ntemplate<Harness::StateTrackableBase::StateValue desired_state, typename T>\nvoid check_value_state(/* typename do_check_element_state =*/ tbb::internal::false_type, T const&, const char* , int ) {/*do nothing*/}\n#define ASSERT_VALUE_STATE(do_check_element_state,state,value) check_value_state<state>(do_check_element_state,value,__FILE__,__LINE__)\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T, typename do_check_element_state, typename V>\nvoid test_rvalue_insert(V v1, V v2)\n{\n    typedef T container_t;\n\n    container_t cont;\n\n    std::pair<typename container_t::iterator, bool> ins = cont.insert(Value<container_t>::make(v1));\n    ASSERT(ins.second == true && Value<container_t>::get(*(ins.first)) == v1, \"Element 1 has not been inserted properly\");\n    ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::MoveInitialized,*ins.first);\n\n    typename container_t::iterator it2 = cont.insert(ins.first, Value<container_t>::make(v2));\n    ASSERT(Value<container_t>::get(*(it2)) == v2, \"Element 2 has not been inserted properly\");\n    ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::MoveInitialized,*it2);\n\n}\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n// The test does not use variadic templates, but emplace() does.\n\nnamespace emplace_helpers {\ntemplate<typename container_t, typename arg_t, typename value_t>\nstd::pair<typename container_t::iterator, bool> call_emplace_impl(container_t& c, arg_t&& k, value_t *){\n    // this is a set\n    return c.emplace(std::forward<arg_t>(k));\n}\n\ntemplate<typename container_t, typename arg_t, typename first_t, typename second_t>\nstd::pair<typename container_t::iterator, bool> call_emplace_impl(container_t& c, arg_t&& k, std::pair<first_t, second_t> *){\n    // this is a map\n    return c.emplace(k, std::forward<arg_t>(k));\n}\n\ntemplate<typename container_t, typename arg_t>\nstd::pair<typename container_t::iterator, bool> call_emplace(container_t& c, arg_t&& k){\n    typename container_t::value_type * selector = NULL;\n    return call_emplace_impl(c, std::forward<arg_t>(k), selector);\n}\n\ntemplate<typename container_t, typename arg_t, typename value_t>\ntypename container_t::iterator call_emplace_hint_impl(container_t& c, typename container_t::const_iterator hint, arg_t&& k, value_t *){\n    // this is a set\n    return c.emplace_hint(hint, std::forward<arg_t>(k));\n}\n\ntemplate<typename container_t, typename arg_t, typename first_t, typename second_t>\ntypename container_t::iterator call_emplace_hint_impl(container_t& c, typename container_t::const_iterator hint, arg_t&& k, std::pair<first_t, second_t> *){\n    // this is a map\n    return c.emplace_hint(hint, k, std::forward<arg_t>(k));\n}\n\ntemplate<typename container_t, typename arg_t>\ntypename container_t::iterator call_emplace_hint(container_t& c, typename container_t::const_iterator hint, arg_t&& k){\n    typename container_t::value_type * selector = NULL;\n    return call_emplace_hint_impl(c, hint, std::forward<arg_t>(k), selector);\n}\n}\ntemplate<typename T, typename do_check_element_state, typename V>\nvoid test_emplace_insert(V v1, V v2){\n    typedef T container_t;\n    container_t cont;\n\n    std::pair<typename container_t::iterator, bool> ins = emplace_helpers::call_emplace(cont, v1);\n    ASSERT(ins.second == true && Value<container_t>::compare(ins.first, v1), \"Element 1 has not been inserted properly\");\n    ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::DirectInitialized,*ins.first);\n\n    typename container_t::iterator it2 = emplace_helpers::call_emplace_hint(cont, ins.first, v2);\n    ASSERT(Value<container_t>::compare(it2, v2), \"Element 2 has not been inserted properly\");\n    ASSERT_VALUE_STATE(do_check_element_state(),Harness::StateTrackableBase::DirectInitialized,*it2);\n}\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\ntemplate<typename T, typename do_check_element_state>\nvoid test_basic(const char * str, do_check_element_state)\n{\n    T cont;\n    const T &ccont(cont);\n\n    // bool empty() const;\n    ASSERT(ccont.empty(), \"Concurrent container is not empty after construction\");\n\n    // size_type size() const;\n    ASSERT(ccont.size() == 0, \"Concurrent container is not empty after construction\");\n\n    // size_type max_size() const;\n    ASSERT(ccont.max_size() > 0, \"Concurrent container max size is invalid\");\n\n    //iterator begin();\n    //iterator end();\n    ASSERT(cont.begin() == cont.end(), \"Concurrent container iterators are invalid after construction\");\n    ASSERT(ccont.begin() == ccont.end(), \"Concurrent container iterators are invalid after construction\");\n    ASSERT(cont.cbegin() == cont.cend(), \"Concurrent container iterators are invalid after construction\");\n\n    //std::pair<iterator, bool> insert(const value_type& obj);\n    std::pair<typename T::iterator, bool> ins = cont.insert(Value<T>::make(1));\n    ASSERT(ins.second == true && Value<T>::get(*(ins.first)) == 1, \"Element 1 has not been inserted properly\");\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    test_rvalue_insert<T,do_check_element_state>(1,2);\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    test_emplace_insert<T,do_check_element_state>(1,2);\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    // bool empty() const;\n    ASSERT(!ccont.empty(), \"Concurrent container is empty after adding an element\");\n\n    // size_type size() const;\n    ASSERT(ccont.size() == 1, \"Concurrent container size is incorrect\");\n\n    std::pair<typename T::iterator, bool> ins2 = cont.insert(Value<T>::make(1));\n\n    if (T::allow_multimapping)\n    {\n        // std::pair<iterator, bool> insert(const value_type& obj);\n        ASSERT(ins2.second == true && Value<T>::get(*(ins2.first)) == 1, \"Element 1 has not been inserted properly\");\n\n        // size_type size() const;\n        ASSERT(ccont.size() == 2, \"Concurrent container size is incorrect\");\n\n        // size_type count(const key_type& k) const;\n        ASSERT(ccont.count(1) == 2, \"Concurrent container count(1) is incorrect\");\n\n        // std::pair<iterator, iterator> equal_range(const key_type& k);\n        std::pair<typename T::iterator, typename T::iterator> range = cont.equal_range(1);\n        typename T::iterator it = range.first;\n        ASSERT(it != cont.end() && Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        unsigned int count = 0;\n        for (; it != range.second; it++)\n        {\n            count++;\n            ASSERT(Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        }\n\n        ASSERT(count == 2, \"Range doesn't have the right number of elements\");\n    }\n    else\n    {\n        // std::pair<iterator, bool> insert(const value_type& obj);\n        ASSERT(ins2.second == false && ins2.first == ins.first, \"Element 1 should not be re-inserted\");\n\n        // size_type size() const;\n        ASSERT(ccont.size() == 1, \"Concurrent container size is incorrect\");\n\n        // size_type count(const key_type& k) const;\n        ASSERT(ccont.count(1) == 1, \"Concurrent container count(1) is incorrect\");\n\n        // std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;\n        // std::pair<iterator, iterator> equal_range(const key_type& k);\n        std::pair<typename T::iterator, typename T::iterator> range = cont.equal_range(1);\n        typename T::iterator it = range.first;\n        ASSERT(it != cont.end() && Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        ASSERT(++it == range.second, \"Range doesn't have the right number of elements\");\n    }\n\n    // const_iterator find(const key_type& k) const;\n    // iterator find(const key_type& k);\n    typename T::iterator it = cont.find(1);\n    ASSERT(it != cont.end() && Value<T>::get(*(it)) == 1, \"Element 1 has not been found properly\");\n    ASSERT(ccont.find(1) == it, \"Element 1 has not been found properly\");\n\n    // iterator insert(const_iterator hint, const value_type& obj);\n    typename T::iterator it2 = cont.insert(ins.first, Value<T>::make(2));\n    ASSERT(Value<T>::get(*it2) == 2, \"Element 2 has not been inserted properly\");\n\n    // T(const T& _Umap)\n    T newcont = ccont;\n    ASSERT(T::allow_multimapping ? (newcont.size() == 3) : (newcont.size() == 2), \"Copy construction has not copied the elements properly\");\n\n    // size_type unsafe_erase(const key_type& k);\n    typename T::size_type size = cont.unsafe_erase(1);\n    ASSERT(T::allow_multimapping ? (size == 2) : (size == 1), \"Erase has not removed the right number of elements\");\n\n    // iterator unsafe_erase(const_iterator position);\n    typename T::iterator it4 = cont.unsafe_erase(cont.find(2));\n    ASSERT(it4 == cont.end() && cont.size() == 0, \"Erase has not removed the last element properly\");\n\n    // template<class InputIterator> void insert(InputIterator first, InputIterator last);\n    cont.insert(newcont.begin(), newcont.end());\n    ASSERT(T::allow_multimapping ? (cont.size() == 3) : (cont.size() == 2), \"Range insert has not copied the elements properly\");\n\n    // iterator unsafe_erase(const_iterator first, const_iterator last);\n    std::pair<typename T::iterator, typename T::iterator> range2 = newcont.equal_range(1);\n    newcont.unsafe_erase(range2.first, range2.second);\n    ASSERT(newcont.size() == 1, \"Range erase has not erased the elements properly\");\n\n    // void clear();\n    newcont.clear();\n    ASSERT(newcont.begin() == newcont.end() && newcont.size() == 0, \"Clear has not cleared the container\");\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#if __TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n    REPORT(\"Known issue: the test for insert with initializer_list is skipped.\\n\");\n#else\n    // void insert(const std::initializer_list<value_type> &il);\n    newcont.insert( { Value<T>::make( 1 ), Value<T>::make( 2 ), Value<T>::make( 1 ) } );\n    if (T::allow_multimapping) {\n        ASSERT(newcont.size() == 3, \"Concurrent container size is incorrect\");\n        ASSERT(newcont.count(1) == 2, \"Concurrent container count(1) is incorrect\");\n        ASSERT(newcont.count(2) == 1, \"Concurrent container count(2) is incorrect\");\n        std::pair<typename T::iterator, typename T::iterator> range = cont.equal_range(1);\n        it = range.first;\n        ASSERT(it != newcont.end() && Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        unsigned int count = 0;\n        for (; it != range.second; it++) {\n            count++;\n            ASSERT(Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        }\n        ASSERT(count == 2, \"Range doesn't have the right number of elements\");\n        range = newcont.equal_range(2); it = range.first;\n        ASSERT(it != newcont.end() && Value<T>::get(*it) == 2, \"Element 2 has not been found properly\");\n        count = 0;\n        for (; it != range.second; it++) {\n            count++;\n            ASSERT(Value<T>::get(*it) == 2, \"Element 2 has not been found properly\");\n        }\n        ASSERT(count == 1, \"Range doesn't have the right number of elements\");\n    } else {\n        ASSERT(newcont.size() == 2, \"Concurrent container size is incorrect\");\n        ASSERT(newcont.count(1) == 1, \"Concurrent container count(1) is incorrect\");\n        ASSERT(newcont.count(2) == 1, \"Concurrent container count(2) is incorrect\");\n        std::pair<typename T::iterator, typename T::iterator> range = newcont.equal_range(1);\n        it = range.first;\n        ASSERT(it != newcont.end() && Value<T>::get(*it) == 1, \"Element 1 has not been found properly\");\n        ASSERT(++it == range.second, \"Range doesn't have the right number of elements\");\n        range = newcont.equal_range(2); it = range.first;\n        ASSERT(it != newcont.end() && Value<T>::get(*it) == 2, \"Element 2 has not been found properly\");\n        ASSERT(++it == range.second, \"Range doesn't have the right number of elements\");\n    }\n#endif /* __TBB_CPP11_INIT_LIST_TEMP_OBJS_COMPILATION_BROKEN */\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\n    // T& operator=(const T& _Umap)\n    newcont = ccont;\n    ASSERT(T::allow_multimapping ? (newcont.size() == 3) : (newcont.size() == 2), \"Assignment operator has not copied the elements properly\");\n\n    // void rehash(size_type n);\n    newcont.rehash(16);\n    ASSERT(T::allow_multimapping ? (newcont.size() == 3) : (newcont.size() == 2), \"Rehash should not affect the container elements\");\n\n    // float load_factor() const;\n    // float max_load_factor() const;\n    ASSERT(ccont.load_factor() <= ccont.max_load_factor(), \"Load factor is invalid\");\n\n    // void max_load_factor(float z);\n    cont.max_load_factor(16.0f);\n    ASSERT(ccont.max_load_factor() == 16.0f, \"Max load factor has not been changed properly\");\n\n    // hasher hash_function() const;\n    ccont.hash_function();\n\n    // key_equal key_eq() const;\n    ccont.key_eq();\n\n    cont.clear();\n    CheckAllocatorA(cont, 1, 0); // one dummy is always allocated\n    for (int i = 0; i < 256; i++)\n    {\n        std::pair<typename T::iterator, bool> ins3 = cont.insert(Value<T>::make(i));\n        ASSERT(ins3.second == true && Value<T>::get(*(ins3.first)) == i, \"Element 1 has not been inserted properly\");\n    }\n    ASSERT(cont.size() == 256, \"Wrong number of elements have been inserted\");\n    ASSERT((256 == CheckRecursiveRange<T,typename T::iterator>(cont.range()).first), NULL);\n    ASSERT((256 == CheckRecursiveRange<T,typename T::const_iterator>(ccont.range()).first), NULL);\n\n    // size_type unsafe_bucket_count() const;\n    ASSERT(ccont.unsafe_bucket_count() == 16, \"Wrong number of buckets\");\n\n    // size_type unsafe_max_bucket_count() const;\n    ASSERT(ccont.unsafe_max_bucket_count() > 65536, \"Wrong max number of buckets\");\n\n    for (unsigned int i = 0; i < 256; i++)\n    {\n        typename T::size_type buck = ccont.unsafe_bucket(i);\n\n        // size_type unsafe_bucket(const key_type& k) const;\n        ASSERT(buck < 16, \"Wrong bucket mapping\");\n    }\n\n    typename T::size_type bucketSizeSum = 0;\n    typename T::size_type iteratorSizeSum = 0;\n\n    for (unsigned int i = 0; i < 16; i++)\n    {\n        bucketSizeSum += cont.unsafe_bucket_size(i);\n        for (typename T::iterator bit = cont.unsafe_begin(i); bit != cont.unsafe_end(i); bit++) iteratorSizeSum++;\n    }\n    ASSERT(bucketSizeSum == 256, \"sum of bucket counts incorrect\");\n    ASSERT(iteratorSizeSum == 256, \"sum of iterator counts incorrect\");\n\n    // void swap(T&);\n    cont.swap(newcont);\n    ASSERT(newcont.size() == 256, \"Wrong number of elements after swap\");\n    ASSERT(newcont.count(200) == 1, \"Element with key 200 is not present after swap\");\n    ASSERT(newcont.count(16) == 1, \"Element with key 16 is not present after swap\");\n    ASSERT(newcont.count(99) == 1, \"Element with key 99 is not present after swap\");\n    ASSERT(T::allow_multimapping ? (cont.size() == 3) : (cont.size() == 2), \"Wrong number of elements after swap\");\n\n    REMARK(\"passed -- basic %s tests\\n\", str);\n\n#if defined (VERBOSE)\n    REMARK(\"container dump debug:\\n\");\n    cont._Dump();\n    REMARK(\"container dump release:\\n\");\n    cont.dump();\n    REMARK(\"\\n\");\n#endif\n\n    SpecialTests<T>::Test(str);\n}\n\ntemplate<typename T>\nvoid test_basic(const char * str){\n    test_basic<T>(str, tbb::internal::false_type());\n}\n\nvoid test_machine() {\n    ASSERT(__TBB_ReverseByte(0)==0, NULL );\n    ASSERT(__TBB_ReverseByte(1)==0x80, NULL );\n    ASSERT(__TBB_ReverseByte(0xFE)==0x7F, NULL );\n    ASSERT(__TBB_ReverseByte(0xFF)==0xFF, NULL );\n}\n\ntemplate<typename T>\nclass FillTable: NoAssign {\n    T &table;\n    const int items;\n    bool my_asymptotic;\n    typedef std::pair<typename T::iterator, bool> pairIB;\npublic:\n    FillTable(T &t, int i, bool asymptotic) : table(t), items(i), my_asymptotic(asymptotic) {\n        ASSERT( !(items&1) && items > 100, NULL);\n    }\n    void operator()(int threadn) const {\n        if( threadn == 0 ) { // Fill even keys forward (single thread)\n            bool last_inserted = true;\n            for( int i = 0; i < items; i+=2 ) {\n                pairIB pib = table.insert(Value<T>::make(my_asymptotic?1:i));\n                ASSERT(Value<T>::get(*(pib.first)) == (my_asymptotic?1:i), \"Element not properly inserted\");\n                ASSERT( last_inserted || !pib.second, \"Previous key was not inserted but this is inserted\" );\n                last_inserted = pib.second;\n            }\n        } else if( threadn == 1 ) { // Fill even keys backward (single thread)\n            bool last_inserted = true;\n            for( int i = items-2; i >= 0; i-=2 ) {\n                pairIB pib = table.insert(Value<T>::make(my_asymptotic?1:i));\n                ASSERT(Value<T>::get(*(pib.first)) == (my_asymptotic?1:i), \"Element not properly inserted\");\n                ASSERT( last_inserted || !pib.second, \"Previous key was not inserted but this is inserted\" );\n                last_inserted = pib.second;\n            }\n        } else if( !(threadn&1) ) { // Fill odd keys forward (multiple threads)\n            for( int i = 1; i < items; i+=2 )\n#if __TBB_INITIALIZER_LISTS_PRESENT && !__TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n                if ( i % 32 == 1 && i + 6 < items ) {\n                    if (my_asymptotic) {\n                        table.insert({ Value<T>::make(1), Value<T>::make(1), Value<T>::make(1) });\n                        ASSERT(Value<T>::get(*table.find(1)) == 1, \"Element not properly inserted\");\n                    }\n                    else {\n                        table.insert({ Value<T>::make(i), Value<T>::make(i + 2), Value<T>::make(i + 4) });\n                        ASSERT(Value<T>::get(*table.find(i)) == i, \"Element not properly inserted\");\n                        ASSERT(Value<T>::get(*table.find(i + 2)) == i + 2, \"Element not properly inserted\");\n                        ASSERT(Value<T>::get(*table.find(i + 4)) == i + 4, \"Element not properly inserted\");\n                    }\n                    i += 4;\n                } else\n#endif\n                {\n                    pairIB pib = table.insert(Value<T>::make(my_asymptotic ? 1 : i));\n                    ASSERT(Value<T>::get(*(pib.first)) == (my_asymptotic ? 1 : i), \"Element not properly inserted\");\n                }\n        } else { // Check odd keys backward (multiple threads)\n            if (!my_asymptotic) {\n                bool last_found = false;\n                for( int i = items-1; i >= 0; i-=2 ) {\n                    typename T::iterator it = table.find(i);\n                    if( it != table.end() ) { // found\n                        ASSERT(Value<T>::get(*it) == i, \"Element not properly inserted\");\n                        last_found = true;\n                    } else ASSERT( !last_found, \"Previous key was found but this is not\" );\n                }\n            }\n        }\n    }\n};\n\ntypedef tbb::atomic<unsigned char> AtomicByte;\n\ntemplate<typename ContainerType, typename RangeType>\nstruct ParallelTraverseBody: NoAssign {\n    const int n;\n    AtomicByte* const array;\n    ParallelTraverseBody( AtomicByte an_array[], int a_n ) :\n        n(a_n), array(an_array)\n    {}\n    void operator()( const RangeType& range ) const {\n        for( typename RangeType::iterator i = range.begin(); i!=range.end(); ++i ) {\n            int k = static_cast<int>(Value<ContainerType>::key(*i));\n            ASSERT( k == Value<ContainerType>::get(*i), NULL );\n            ASSERT( 0<=k && k<n, NULL );\n            array[k]++;\n        }\n    }\n};\n\n// if multimapping, oddCount is the value that each odd-indexed array element should have.\n// not meaningful for non-multimapped case.\nvoid CheckRange( AtomicByte array[], int n, bool allowMultiMapping, int oddCount ) {\n    if(allowMultiMapping) {\n        for( int k = 0; k<n; ++k) {\n            if(k%2) {\n                if( array[k] != oddCount ) {\n                    REPORT(\"array[%d]=%d (should be %d)\\n\", k, int(array[k]), oddCount);\n                    ASSERT(false,NULL);\n                }\n            }\n            else {\n                if(array[k] != 2) {\n                    REPORT(\"array[%d]=%d\\n\", k, int(array[k]));\n                    ASSERT(false,NULL);\n                }\n            }\n        }\n    }\n    else {\n        for( int k=0; k<n; ++k ) {\n            if( array[k] != 1 ) {\n                REPORT(\"array[%d]=%d\\n\", k, int(array[k]));\n                ASSERT(false,NULL);\n            }\n        }\n    }\n}\n\ntemplate<typename T>\nclass CheckTable: NoAssign {\n    T &table;\npublic:\n    CheckTable(T &t) : NoAssign(), table(t) {}\n    void operator()(int i) const {\n        int c = (int)table.count( i );\n        ASSERT( c, \"must exist\" );\n    }\n};\n\ntemplate<typename T>\nvoid test_concurrent(const char *tablename, bool asymptotic = false) {\n#if TBB_USE_ASSERT\n    int items = 2000;\n#else\n    int items = 20000;\n#endif\n    int nItemsInserted = 0;\n    int nThreads = 0;\n    T table(items/1000);\n    #if __bgp__\n    nThreads = 6;\n    #else\n    nThreads = 16;\n    #endif\n    if(T::allow_multimapping) {\n        // even passes (threads 0 & 1) put N/2 items each\n        // odd passes  (threads > 1)   put N/2 if thread is odd, else checks if even.\n        items = 4*items / (nThreads + 2);  // approximately same number of items inserted.\n        nItemsInserted = items + (nThreads-2) * items / 4;\n    }\n    else {\n        nItemsInserted = items;\n    }\n    REMARK(\"%s items == %d\\n\", tablename, items);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    NativeParallelFor( nThreads, FillTable<T>(table, items, asymptotic) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    REMARK( \"time for filling '%s' by %d items = %g\\n\", tablename, table.size(), (t1-t0).seconds() );\n    ASSERT( int(table.size()) == nItemsInserted, NULL);\n\n    if(!asymptotic) {\n        AtomicByte* array = new AtomicByte[items];\n        memset( static_cast<void*>(array), 0, items*sizeof(AtomicByte) );\n\n        typename T::range_type r = table.range();\n        std::pair<intptr_t,intptr_t> p = CheckRecursiveRange<T,typename T::iterator>(r);\n        ASSERT((nItemsInserted == p.first), NULL);\n        tbb::parallel_for( r, ParallelTraverseBody<T, typename T::const_range_type>( array, items ));\n        CheckRange( array, items, T::allow_multimapping, (nThreads - 1)/2 );\n\n        const T &const_table = table;\n        memset( static_cast<void*>(array), 0, items*sizeof(AtomicByte) );\n        typename T::const_range_type cr = const_table.range();\n        ASSERT((nItemsInserted == CheckRecursiveRange<T,typename T::const_iterator>(cr).first), NULL);\n        tbb::parallel_for( cr, ParallelTraverseBody<T, typename T::const_range_type>( array, items ));\n        CheckRange( array, items, T::allow_multimapping, (nThreads - 1) / 2 );\n        delete[] array;\n\n        tbb::parallel_for( 0, items, CheckTable<T>( table ) );\n    }\n\n    table.clear();\n    CheckAllocatorA(table, items+1, items); // one dummy is always allocated\n\n}\n\n// The helper to call a function only when a doCall == true.\ntemplate <bool doCall> struct CallIf {\n    template<typename FuncType> void operator() ( FuncType func ) const { func(); }\n};\ntemplate <> struct CallIf<false> {\n    template<typename FuncType> void operator()( FuncType ) const {}\n};\n\n#include <vector>\n#include <list>\n#include <algorithm>\n\ntemplate <typename ValueType>\nclass TestRange : NoAssign {\n    const std::list<ValueType> &my_lst;\n    std::vector< tbb::atomic<bool> > &my_marks;\npublic:\n    TestRange( const std::list<ValueType> &lst, std::vector< tbb::atomic<bool> > &marks ) : my_lst( lst ), my_marks( marks ) {\n        std::fill( my_marks.begin(), my_marks.end(), false );\n    }\n    template <typename Range>\n    void operator()( const Range &r ) const { doTestRange( r.begin(), r.end() ); }\n    template<typename Iterator>\n    void doTestRange( Iterator i, Iterator j ) const {\n        for ( Iterator it = i; it != j; ) {\n            Iterator prev_it = it++;\n            typename std::list<ValueType>::const_iterator it2 = std::search( my_lst.begin(), my_lst.end(), prev_it, it, Harness::IsEqual() );\n            ASSERT( it2 != my_lst.end(), NULL );\n            typename std::list<ValueType>::difference_type dist = std::distance( my_lst.begin( ), it2 );\n            ASSERT( !my_marks[dist], NULL );\n            my_marks[dist] = true;\n        }\n    }\n};\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n// For the sake of simplified testing, make unique_ptr implicitly convertible to/from the pointer\nnamespace test {\n    template<typename T>\n    class unique_ptr : public std::unique_ptr<T> {\n    public:\n        typedef typename std::unique_ptr<T>::pointer pointer;\n        unique_ptr( pointer p ) : std::unique_ptr<T>(p) {}\n        operator pointer() const { return this->get(); }\n    };\n}\n\nnamespace tbb {\n    template<> class tbb_hash< std::shared_ptr<int> > {\n    public:\n        size_t operator()( const std::shared_ptr<int>& key ) const { return tbb_hasher( *key ); }\n    };\n    template<> class tbb_hash< const std::shared_ptr<int> > {\n    public:\n        size_t operator()( const std::shared_ptr<int>& key ) const { return tbb_hasher( *key ); }\n    };\n    template<> class tbb_hash< std::weak_ptr<int> > {\n    public:\n        size_t operator()( const std::weak_ptr<int>& key ) const { return tbb_hasher( *key.lock( ) ); }\n    };\n    template<> class tbb_hash< const std::weak_ptr<int> > {\n    public:\n        size_t operator()( const std::weak_ptr<int>& key ) const { return tbb_hasher( *key.lock( ) ); }\n    };\n    template<> class tbb_hash< test::unique_ptr<int> > {\n    public:\n        size_t operator()( const test::unique_ptr<int>& key ) const { return tbb_hasher( *key ); }\n    };\n    template<> class tbb_hash< const test::unique_ptr<int> > {\n    public:\n        size_t operator()( const test::unique_ptr<int>& key ) const { return tbb_hasher( *key ); }\n    };\n}\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n\ntemplate <bool, typename Table>\nvoid TestMapSpecificMethods( Table &, const typename Table::value_type & ) { /* do nothing for a common case */ }\n\ntemplate <bool defCtorPresent, typename Table>\nclass CheckValue : NoAssign {\n    Table &my_c;\npublic:\n    CheckValue( Table &c ) : my_c( c ) {}\n    void operator()( const typename Table::value_type &value ) {\n        typedef typename Table::iterator Iterator;\n        typedef typename Table::const_iterator ConstIterator;\n        const Table &constC = my_c;\n        ASSERT( my_c.count( Value<Table>::key( value ) ) == 1, NULL );\n        // find\n        ASSERT( Harness::IsEqual()(*my_c.find( Value<Table>::key( value ) ), value), NULL );\n        ASSERT( Harness::IsEqual()(*constC.find( Value<Table>::key( value ) ), value), NULL );\n        // erase\n        ASSERT( my_c.unsafe_erase( Value<Table>::key( value ) ), NULL );\n        ASSERT( my_c.count( Value<Table>::key( value ) ) == 0, NULL );\n        // insert\n        std::pair<Iterator, bool> res = my_c.insert( value );\n        ASSERT( Harness::IsEqual()(*res.first, value), NULL );\n        ASSERT( res.second, NULL);\n        // erase\n        Iterator it = res.first;\n        it++;\n        ASSERT( my_c.unsafe_erase( res.first ) == it, NULL );\n        // insert\n        ASSERT( Harness::IsEqual()(*my_c.insert( my_c.begin(), value ), value), NULL );\n        // equal_range\n        std::pair<Iterator, Iterator> r1 = my_c.equal_range( Value<Table>::key( value ) );\n        ASSERT( Harness::IsEqual()(*r1.first, value) && ++r1.first == r1.second, NULL );\n        std::pair<ConstIterator, ConstIterator> r2 = constC.equal_range( Value<Table>::key( value ) );\n        ASSERT( Harness::IsEqual()(*r2.first, value) && ++r2.first == r2.second, NULL );\n        TestMapSpecificMethods<defCtorPresent>( my_c, value );\n    }\n};\n\n#include \"tbb/task_scheduler_init.h\"\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include \"test_container_move_support.h\"\n\nstruct unordered_move_traits_base {\n    enum{ expected_number_of_items_to_allocate_for_steal_move = 3 };\n\n    template <typename unordered_type, typename iterator_type>\n    static unordered_type& construct_container(tbb::aligned_space<unordered_type> & storage, iterator_type begin, iterator_type end){\n        new (storage.begin()) unordered_type(begin, end);\n        return * storage.begin();\n    }\n\n    template <typename unordered_type, typename iterator_type, typename allocator_type>\n    static unordered_type& construct_container(tbb::aligned_space<unordered_type> & storage, iterator_type begin, iterator_type end, allocator_type const& a ){\n        size_t deault_n_of_buckets = 8; //can not use concurrent_unordered_base::n_of_buckets as it is inaccessible\n        new (storage.begin()) unordered_type(begin, end, deault_n_of_buckets, typename unordered_type::hasher(), typename unordered_type::key_equal(), a);\n        return * storage.begin();\n    }\n\n    template<typename unordered_type, typename iterator>\n    static bool equal(unordered_type const& c, iterator begin, iterator end){\n        bool equal_sizes = ( static_cast<size_t>(std::distance(begin, end)) == c.size() );\n        if (!equal_sizes)\n            return false;\n\n        for (iterator it = begin; it != end; ++it ){\n            if (c.find( Value<unordered_type>::key(*it)) == c.end()){\n                return false;\n            }\n        }\n        return true;\n    }\n};\n\ntemplate<typename container_traits>\nvoid test_rvalue_ref_support(const char* container_name){\n    TestMoveConstructor<container_traits>();\n    TestMoveAssignOperator<container_traits>();\n#if TBB_USE_EXCEPTIONS\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure<container_traits>();\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor<container_traits>();\n#endif //TBB_USE_EXCEPTIONS\n    REMARK(\"passed -- %s move support tests\\n\", container_name);\n}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\ntemplate <bool defCtorPresent, typename Table>\nvoid Examine( Table c, const std::list<typename Table::value_type> &lst ) {\n    typedef typename Table::size_type SizeType;\n    typedef typename Table::value_type ValueType;\n\n    ASSERT( !c.empty() && c.size() == lst.size() && c.max_size() >= c.size(), NULL );\n\n    std::for_each( lst.begin(), lst.end(), CheckValue<defCtorPresent, Table>( c ) );\n\n    std::vector< tbb::atomic<bool> > marks( lst.size() );\n\n    TestRange<ValueType>( lst, marks ).doTestRange( c.begin(), c.end() );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    TestRange<ValueType>( lst, marks ).doTestRange( c.begin(), c.end() );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    const Table constC = c;\n    ASSERT( c.size() == constC.size(), NULL );\n\n    TestRange<ValueType>( lst, marks ).doTestRange( constC.cbegin(), constC.cend() );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    tbb::task_scheduler_init init;\n\n    tbb::parallel_for( c.range(), TestRange<ValueType>( lst, marks ) );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    tbb::parallel_for( constC.range( ), TestRange<ValueType>( lst, marks ) );\n    ASSERT( std::find( marks.begin(), marks.end(), false ) == marks.end(), NULL );\n\n    const SizeType bucket_count = c.unsafe_bucket_count();\n    ASSERT( c.unsafe_max_bucket_count() >= bucket_count, NULL );\n    SizeType counter = SizeType( 0 );\n    for ( SizeType i = 0; i < bucket_count; ++i ) {\n        const SizeType size = c.unsafe_bucket_size( i );\n        typedef typename Table::difference_type diff_type;\n        ASSERT( std::distance( c.unsafe_begin( i ), c.unsafe_end( i ) ) == diff_type( size ), NULL );\n        ASSERT( std::distance( c.unsafe_cbegin( i ), c.unsafe_cend( i ) ) == diff_type( size ), NULL );\n        ASSERT( std::distance( constC.unsafe_begin( i ), constC.unsafe_end( i ) ) == diff_type( size ), NULL );\n        ASSERT( std::distance( constC.unsafe_cbegin( i ), constC.unsafe_cend( i ) ) == diff_type( size ), NULL );\n        counter += size;\n    }\n    ASSERT( counter == lst.size(), NULL );\n\n    typedef typename Table::value_type value_type;\n    for ( typename std::list<value_type>::const_iterator it = lst.begin(); it != lst.end(); ) {\n        const SizeType index = c.unsafe_bucket( Value<Table>::key( *it ) );\n        typename std::list<value_type>::const_iterator prev_it = it++;\n        ASSERT( std::search( c.unsafe_begin( index ), c.unsafe_end( index ), prev_it, it, Harness::IsEqual() ) != c.unsafe_end( index ), NULL );\n    }\n\n    c.rehash( 2 * bucket_count );\n    ASSERT( c.unsafe_bucket_count() > bucket_count, NULL );\n\n    ASSERT( c.load_factor() <= c.max_load_factor(), NULL );\n    c.max_load_factor( 1.0f );\n\n    Table c2;\n    typename std::list<value_type>::const_iterator begin5 = lst.begin();\n    std::advance( begin5, 5 );\n    c2.insert( lst.begin(), begin5 );\n    std::for_each( lst.begin(), begin5, CheckValue<defCtorPresent, Table>( c2 ) );\n\n    c2.swap( c );\n    ASSERT( c2.size() == lst.size(), NULL );\n    ASSERT( c.size() == 5, NULL );\n    std::for_each( lst.begin(), lst.end(), CheckValue<defCtorPresent, Table>( c2 ) );\n\n    c2.clear();\n    ASSERT( c2.size() == 0, NULL );\n\n    typename Table::allocator_type a = c.get_allocator();\n    value_type *ptr = a.allocate( 1 );\n    ASSERT( ptr, NULL );\n    a.deallocate( ptr, 1 );\n\n    c.hash_function();\n    c.key_eq();\n}\n\ntemplate <bool defCtorPresent, typename Table, typename TableDebugAlloc>\nvoid TypeTester( const std::list<typename Table::value_type> &lst ) {\n    ASSERT( lst.size() >= 5, \"Array should have at least 5 elements\" );\n    ASSERT( lst.size() <= 100, \"The test has O(n^2) complexity so a big number of elements can lead long execution time\" );\n    // Construct an empty table.\n    Table c1;\n    c1.insert( lst.begin(), lst.end() );\n    Examine<defCtorPresent>( c1, lst );\n#if __TBB_INITIALIZER_LISTS_PRESENT && !__TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n    // Constructor from an initializer_list.\n    typename std::list<typename Table::value_type>::const_iterator it = lst.begin();\n    Table c2( { *it++, *it++, *it++ } );\n    c2.insert( it, lst.end( ) );\n    Examine<defCtorPresent>( c2, lst );\n#endif\n    // Copying constructor.\n    Table c3( c1 );\n    Examine<defCtorPresent>( c3, lst );\n    // Construct with non-default allocator\n    TableDebugAlloc c4;\n    c4.insert( lst.begin(), lst.end() );\n    Examine<defCtorPresent>( c4, lst );\n    // Copying constructor for a container with a different allocator type.\n    TableDebugAlloc c5( c4 );\n    Examine<defCtorPresent>( c5, lst );\n    // Construction empty table with n preallocated buckets.\n    Table c6( lst.size() );\n    c6.insert( lst.begin(), lst.end() );\n    Examine<defCtorPresent>( c6, lst );\n    TableDebugAlloc c7( lst.size( ) );\n    c7.insert( lst.begin(), lst.end() );\n    Examine<defCtorPresent>( c7, lst );\n    // Construction with a copying iteration range and a given allocator instance.\n    Table c8( c1.begin(), c1.end() );\n    Examine<defCtorPresent>( c8, lst );\n    typename TableDebugAlloc::allocator_type a;\n    TableDebugAlloc c9( a );\n    c9.insert( c7.begin(), c7.end() );\n    Examine<defCtorPresent>( c9, lst );\n}\n\nnamespace test_select_size_t_constant{\n    __TBB_STATIC_ASSERT((tbb::internal::select_size_t_constant<1234,1234>::value == 1234),\"select_size_t_constant::value is not compile time constant\");\n//    There will be two constant used in the test 32 bit and 64 bit one.\n//    The 64 bit constant should chosen so that it 32 bit halves adds up to the 32 bit one ( first constant used in the test).\n//    % ~0U is used to sum up 32bit halves of the 64 constant.  (\"% ~0U\" essentially adds the 32-bit \"digits\", like \"%9\" adds\n//    the digits (modulo 9) of a number in base 10).\n//    So iff select_size_t_constant is correct result of the calculation below will be same on both 32bit and 64bit platforms.\n    __TBB_STATIC_ASSERT((tbb::internal::select_size_t_constant<0x12345678U,0x091A2B3C091A2B3CULL>::value % ~0U == 0x12345678U),\n            \"select_size_t_constant have chosen the wrong constant\");\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_unordered_map.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define __TBB_EXTRA_DEBUG 1\n#if _MSC_VER\n#define _SCL_SECURE_NO_WARNINGS\n#endif\n\n#include \"tbb/concurrent_unordered_map.h\"\n#if __TBB_INITIALIZER_LISTS_PRESENT\n// These operator== are used implicitly in  test_initializer_list.h.\n// For some unknown reason clang is not able to find the if they a declared after the\n// inclusion of test_initializer_list.h.\ntemplate<typename container_type>\nbool equal_containers( container_type const& lhs, container_type const& rhs );\ntemplate<typename Key, typename Value>\nbool operator==( tbb::concurrent_unordered_map<Key, Value> const& lhs, tbb::concurrent_unordered_map<Key, Value> const& rhs ) {\n    return equal_containers( lhs, rhs );\n}\ntemplate<typename Key, typename Value>\nbool operator==( tbb::concurrent_unordered_multimap<Key, Value> const& lhs, tbb::concurrent_unordered_multimap<Key, Value> const& rhs ) {\n    return equal_containers( lhs, rhs );\n}\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n#include \"test_concurrent_unordered_common.h\"\n\ntypedef tbb::concurrent_unordered_map<int, int, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MyMap;\ntypedef tbb::concurrent_unordered_map<int, int, degenerate_hash<int>, std::equal_to<int>, MyAllocator> MyDegenerateMap;\ntypedef tbb::concurrent_unordered_map<int, check_type<int>, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MyCheckedMap;\ntypedef tbb::concurrent_unordered_map<intptr_t, FooWithAssign, tbb::tbb_hash<intptr_t>, std::equal_to<intptr_t>, MyAllocator> MyCheckedStateMap;\ntypedef tbb::concurrent_unordered_multimap<int, int, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MyMultiMap;\ntypedef tbb::concurrent_unordered_multimap<int, int, degenerate_hash<int>, std::equal_to<int>, MyAllocator> MyDegenerateMultiMap;\ntypedef tbb::concurrent_unordered_multimap<int, check_type<int>, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MyCheckedMultiMap;\n\ntemplate <>\nstruct SpecialTests <MyMap> {\n    static void Test( const char *str ) {\n        MyMap cont( 0 );\n        const MyMap &ccont( cont );\n\n        // mapped_type& operator[](const key_type& k);\n        cont[1] = 2;\n\n        // bool empty() const;\n        ASSERT( !ccont.empty( ), \"Concurrent container empty after adding an element\" );\n\n        // size_type size() const;\n        ASSERT( ccont.size( ) == 1, \"Concurrent container size incorrect\" );\n\n        ASSERT( cont[1] == 2, \"Concurrent container value incorrect\" );\n\n        // mapped_type& at( const key_type& k );\n        // const mapped_type& at(const key_type& k) const;\n        ASSERT( cont.at( 1 ) == 2, \"Concurrent container value incorrect\" );\n        ASSERT( ccont.at( 1 ) == 2, \"Concurrent container value incorrect\" );\n\n        // iterator find(const key_type& k);\n        MyMap::const_iterator it = cont.find( 1 );\n        ASSERT( it != cont.end( ) && Value<MyMap>::get( *(it) ) == 2, \"Element with key 1 not properly found\" );\n        cont.unsafe_erase( it );\n        it = cont.find( 1 );\n        ASSERT( it == cont.end( ), \"Element with key 1 not properly erased\" );\n\n        REMARK( \"passed -- specialized %s tests\\n\", str );\n    }\n};\n\nvoid\ncheck_multimap(MyMultiMap &m, int *targets, int tcount, int key) {\n    std::vector<bool> vfound(tcount,false);\n    std::pair<MyMultiMap::iterator, MyMultiMap::iterator> range = m.equal_range( key );\n    for(MyMultiMap::iterator it = range.first; it != range.second; ++it) {\n        bool found = false;\n        for( int i = 0; i < tcount; ++i) {\n            if((*it).second == targets[i]) {\n                if(!vfound[i])  { // we can insert duplicate values\n                    vfound[i] = found = true;\n                    break;\n                }\n            }\n        }\n        // just in case an extra value in equal_range...\n        ASSERT(found, \"extra value from equal range\");\n    }\n    for(int i = 0; i < tcount; ++i) ASSERT(vfound[i], \"missing value\");\n}\n\ntemplate <>\nstruct SpecialTests <MyMultiMap> {\n    static void Test( const char *str ) {\n        int one_values[] = { 7, 2, 13, 23, 13 };\n        int zero_values[] = { 4, 9, 13, 29, 42, 111};\n        int n_zero_values = sizeof(zero_values) / sizeof(int);\n        int n_one_values = sizeof(one_values) / sizeof(int);\n        MyMultiMap cont( 0 );\n        const MyMultiMap &ccont( cont );\n        // mapped_type& operator[](const key_type& k);\n        cont.insert( std::make_pair( 1, one_values[0] ) );\n\n        // bool empty() const;\n        ASSERT( !ccont.empty( ), \"Concurrent container empty after adding an element\" );\n\n        // size_type size() const;\n        ASSERT( ccont.size( ) == 1, \"Concurrent container size incorrect\" );\n        ASSERT( (*(cont.begin( ))).second == one_values[0], \"Concurrent container value incorrect\" );\n        ASSERT( (*(cont.equal_range( 1 )).first).second == one_values[0], \"Improper value from equal_range\" );\n        ASSERT( (cont.equal_range( 1 )).second == cont.end( ), \"Improper iterator from equal_range\" );\n\n        cont.insert( std::make_pair( 1, one_values[1] ) );\n\n        // bool empty() const;\n        ASSERT( !ccont.empty( ), \"Concurrent container empty after adding an element\" );\n\n        // size_type size() const;\n        ASSERT( ccont.size( ) == 2, \"Concurrent container size incorrect\" );\n        check_multimap(cont, one_values, 2, 1);\n\n        // insert the other {1,x} values\n        for( int i = 2; i < n_one_values; ++i ) {\n            cont.insert( std::make_pair( 1, one_values[i] ) );\n        }\n\n        check_multimap(cont, one_values, n_one_values, 1);\n        ASSERT( (cont.equal_range( 1 )).second == cont.end( ), \"Improper iterator from equal_range\" );\n\n        cont.insert( std::make_pair( 0, zero_values[0] ) );\n\n        // bool empty() const;\n        ASSERT( !ccont.empty( ), \"Concurrent container empty after adding an element\" );\n\n        // size_type size() const;\n        ASSERT( ccont.size( ) == (size_t)(n_one_values+1), \"Concurrent container size incorrect\" );\n        check_multimap(cont, one_values, n_one_values, 1);\n        check_multimap(cont, zero_values, 1, 0);\n        ASSERT( (*(cont.begin( ))).second == zero_values[0], \"Concurrent container value incorrect\" );\n        // insert the rest of the zero values\n        for( int i = 1; i < n_zero_values; ++i) {\n            cont.insert( std::make_pair( 0, zero_values[i] ) );\n        }\n        check_multimap(cont, one_values, n_one_values, 1);\n        check_multimap(cont, zero_values, n_zero_values, 0);\n\n        // clear, reinsert interleaved\n        cont.clear();\n        int bigger_num = ( n_one_values > n_zero_values ) ? n_one_values : n_zero_values;\n        for( int i = 0; i < bigger_num; ++i ) {\n            if(i < n_one_values) cont.insert( std::make_pair( 1, one_values[i] ) );\n            if(i < n_zero_values) cont.insert( std::make_pair( 0, zero_values[i] ) );\n        }\n        check_multimap(cont, one_values, n_one_values, 1);\n        check_multimap(cont, zero_values, n_zero_values, 0);\n\n\n        REMARK( \"passed -- specialized %s tests\\n\", str );\n    }\n};\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n#include \"test_range_based_for.h\"\n// Add the similar test for concurrent_unordered_set.\nvoid TestRangeBasedFor() {\n    using namespace range_based_for_support_tests;\n\n    REMARK( \"testing range based for loop compatibility \\n\" );\n    typedef tbb::concurrent_unordered_map<int, int> cu_map;\n    cu_map a_cu_map;\n    const int sequence_length = 100;\n    for ( int i = 1; i <= sequence_length; ++i ) {\n        a_cu_map.insert( cu_map::value_type( i, i ) );\n    }\n\n    ASSERT( range_based_for_accumulate( a_cu_map, pair_second_summer(), 0 ) == gauss_summ_of_int_sequence( sequence_length ), \"incorrect accumulated value generated via range based for ?\" );\n}\n#endif /* __TBB_RANGE_BASED_FOR_PRESENT */\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nstruct cu_map_type : unordered_move_traits_base {\n    template<typename element_type, typename allocator_type>\n    struct apply {\n        typedef tbb::concurrent_unordered_map<element_type, element_type, tbb::tbb_hash<element_type>, std::equal_to<element_type>, allocator_type > type;\n    };\n\n    typedef FooPairIterator init_iterator_type;\n};\n\nstruct cu_multimap_type : unordered_move_traits_base {\n    template<typename element_type, typename allocator_type>\n    struct apply {\n        typedef tbb::concurrent_unordered_multimap<element_type, element_type, tbb::tbb_hash<element_type>, std::equal_to<element_type>, allocator_type > type;\n    };\n\n    typedef FooPairIterator init_iterator_type;\n};\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate <typename Table>\nclass TestOperatorSquareBrackets : NoAssign {\n    typedef typename Table::value_type ValueType;\n    Table &my_c;\n    const ValueType &my_value;\npublic:\n    TestOperatorSquareBrackets( Table &c, const ValueType &value ) : my_c( c ), my_value( value ) {}\n    void operator()() const {\n        ASSERT( Harness::IsEqual()(my_c[my_value.first], my_value.second), NULL );\n    }\n};\n\ntemplate <bool defCtorPresent, typename Key, typename Element, typename Hasher, typename Equality, typename Allocator>\nvoid TestMapSpecificMethods( tbb::concurrent_unordered_map<Key, Element, Hasher, Equality, Allocator> &c,\n    const typename tbb::concurrent_unordered_map<Key, Element, Hasher, Equality, Allocator>::value_type &value ) {\n    typedef tbb::concurrent_unordered_map<Key, Element, Hasher, Equality, Allocator> Table;\n    CallIf<defCtorPresent>()(TestOperatorSquareBrackets<Table>( c, value ));\n    ASSERT( Harness::IsEqual()(c.at( value.first ), value.second), NULL );\n    const Table &constC = c;\n    ASSERT( Harness::IsEqual()(constC.at( value.first ), value.second), NULL );\n}\n\ntemplate <bool defCtorPresent, typename ValueType>\nvoid TestTypesMap( const std::list<ValueType> &lst ) {\n    typedef typename ValueType::first_type KeyType;\n    typedef typename ValueType::second_type ElemType;\n    TypeTester< defCtorPresent, tbb::concurrent_unordered_map<KeyType, ElemType, tbb::tbb_hash<KeyType>, Harness::IsEqual>,\n        tbb::concurrent_unordered_map< KeyType, ElemType, tbb::tbb_hash<KeyType>, Harness::IsEqual, debug_allocator<ValueType> > >( lst );\n    TypeTester< defCtorPresent, tbb::concurrent_unordered_multimap<KeyType, ElemType, tbb::tbb_hash<KeyType>, Harness::IsEqual>,\n        tbb::concurrent_unordered_multimap< KeyType, ElemType, tbb::tbb_hash<KeyType>, Harness::IsEqual, debug_allocator<ValueType> > >( lst );\n}\n\nvoid TestTypes() {\n    const int NUMBER = 10;\n\n    std::list< std::pair<const int, int> > arrIntInt;\n    for ( int i = 0; i < NUMBER; ++i ) arrIntInt.push_back( std::make_pair( i, NUMBER - i ) );\n    TestTypesMap</*def_ctor_present = */true>( arrIntInt );\n\n    std::list< std::pair< const int, tbb::atomic<int> > > arrIntTbb;\n    for ( int i = 0; i < NUMBER; ++i ) {\n        tbb::atomic<int> b;\n        b = NUMBER - i;\n        arrIntTbb.push_back( std::make_pair( i, b ) );\n    }\n    TestTypesMap</*defCtorPresent = */true>( arrIntTbb );\n\n#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN\n    std::list< std::pair<const std::reference_wrapper<const int>, int> > arrRefInt;\n    for ( std::list< std::pair<const int, int> >::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it )\n        arrRefInt.push_back( std::make_pair( std::reference_wrapper<const int>( it->first ), it->second ) );\n    TestTypesMap</*defCtorPresent = */true>( arrRefInt );\n\n    std::list< std::pair<const int, std::reference_wrapper<int> > > arrIntRef;\n    for ( std::list< std::pair<const int, int> >::iterator it = arrIntInt.begin(); it != arrIntInt.end(); ++it ) {\n        // Using std::make_pair below causes compilation issues with early implementations of std::reference_wrapper.\n        arrIntRef.push_back( std::pair<const int, std::reference_wrapper<int> >( it->first, std::reference_wrapper<int>( it->second ) ) );\n    }\n    TestTypesMap</*defCtorPresent = */false>( arrIntRef );\n#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    std::list< std::pair< const std::shared_ptr<int>, std::shared_ptr<int> > > arrShrShr;\n    for ( int i = 0; i < NUMBER; ++i ) {\n        const int NUMBER_minus_i = NUMBER - i;\n        arrShrShr.push_back( std::make_pair( std::make_shared<int>( i ), std::make_shared<int>( NUMBER_minus_i ) ) );\n    }\n    TestTypesMap</*defCtorPresent = */true>( arrShrShr );\n\n    std::list< std::pair< const std::weak_ptr<int>, std::weak_ptr<int> > > arrWkWk;\n    std::copy( arrShrShr.begin(), arrShrShr.end(), std::back_inserter( arrWkWk ) );\n    TestTypesMap</*defCtorPresent = */true>( arrWkWk );\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    // Regression test for a problem with excessive requirements of emplace()\n    test_emplace_insert<tbb::concurrent_unordered_map< int*, test::unique_ptr<int> >,\n                        tbb::internal::false_type>( new int, new int );\n    test_emplace_insert<tbb::concurrent_unordered_multimap< int*, test::unique_ptr<int> >,\n                        tbb::internal::false_type>( new int, new int );\n#endif\n\n#else\n    REPORT( \"Known issue: C++11 smart pointer tests are skipped.\\n\" );\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n\nint TestMain() {\n    test_machine();\n\n    test_basic<MyMap>( \"concurrent unordered Map\" );\n    test_basic<MyDegenerateMap>( \"concurrent unordered degenerate Map\" );\n    test_concurrent<MyMap>( \"concurrent unordered Map\" );\n    test_concurrent<MyDegenerateMap>( \"concurrent unordered degenerate Map\" );\n    test_basic<MyMultiMap>( \"concurrent unordered MultiMap\" );\n    test_basic<MyDegenerateMultiMap>( \"concurrent unordered degenerate MultiMap\" );\n    test_concurrent<MyMultiMap>( \"concurrent unordered MultiMap\" );\n    test_concurrent<MyDegenerateMultiMap>( \"concurrent unordered degenerate MultiMap\" );\n    test_concurrent<MyMultiMap>( \"concurrent unordered MultiMap asymptotic\", true );\n\n    { Check<MyCheckedMap::value_type> checkit; test_basic<MyCheckedMap>( \"concurrent unordered map (checked)\" ); }\n    { Check<MyCheckedMap::value_type> checkit; test_concurrent<MyCheckedMap>( \"concurrent unordered map (checked)\" ); }\n    test_basic<MyCheckedStateMap>(\"concurrent unordered map (checked state of elements)\", tbb::internal::true_type());\n    test_concurrent<MyCheckedStateMap>(\"concurrent unordered map (checked state of elements)\");\n\n    { Check<MyCheckedMultiMap::value_type> checkit; test_basic<MyCheckedMultiMap>( \"concurrent unordered MultiMap (checked)\" ); }\n    { Check<MyCheckedMultiMap::value_type> checkit; test_concurrent<MyCheckedMultiMap>( \"concurrent unordered MultiMap (checked)\" ); }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    TestInitList< tbb::concurrent_unordered_map<int, int>,\n                  tbb::concurrent_unordered_multimap<int, int> >( {{1,1},{2,2},{3,3},{4,4},{5,5}} );\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n    TestRangeBasedFor();\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    test_rvalue_ref_support<cu_map_type>( \"concurrent unordered map\" );\n    test_rvalue_ref_support<cu_multimap_type>( \"concurrent unordered multimap\" );\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    TestTypes();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_unordered_set.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER\n#define _SCL_SECURE_NO_WARNINGS\n#endif\n\n#include \"harness_defs.h\"\n#if !(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN)\n\n#define __TBB_EXTRA_DEBUG 1\n#include \"tbb/concurrent_unordered_set.h\"\n#include \"harness_assert.h\"\n\n#if __TBB_TEST_SECONDARY\n\n#include \"harness_runtime_loader.h\"\n\n#else // __TBB_TEST_SECONDARY\n#if __TBB_INITIALIZER_LISTS_PRESENT\n// These operator== are used implicitly in  test_initializer_list.h.\n// For some unknown reason clang is not able to find the if they a declared after the\n// inclusion of test_initializer_list.h.\ntemplate<typename container_type>\nbool equal_containers( container_type const& lhs, container_type const& rhs );\ntemplate<typename T>\nbool operator==(tbb::concurrent_unordered_set<T> const& lhs, tbb::concurrent_unordered_set<T> const& rhs) {\n    return equal_containers( lhs, rhs );\n}\n\ntemplate<typename T>\nbool operator==(tbb::concurrent_unordered_multiset<T> const& lhs, tbb::concurrent_unordered_multiset<T> const& rhs) {\n    return equal_containers( lhs, rhs );\n}\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n#include \"test_concurrent_unordered_common.h\"\n\ntypedef tbb::concurrent_unordered_set<int, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MySet;\ntypedef tbb::concurrent_unordered_set<int, degenerate_hash<int>, std::equal_to<int>, MyAllocator> MyDegenerateSet;\ntypedef tbb::concurrent_unordered_set<check_type<int>, tbb::tbb_hash<check_type<int> >, std::equal_to<check_type<int> >, MyAllocator> MyCheckedSet;\ntypedef tbb::concurrent_unordered_set<FooWithAssign, tbb::tbb_hash<Foo>, std::equal_to<FooWithAssign>, MyAllocator> MyCheckedStateSet;\ntypedef tbb::concurrent_unordered_multiset<int, tbb::tbb_hash<int>, std::equal_to<int>, MyAllocator> MyMultiSet;\ntypedef tbb::concurrent_unordered_multiset<int, degenerate_hash<int>, std::equal_to<int>, MyAllocator> MyDegenerateMultiSet;\ntypedef tbb::concurrent_unordered_multiset<check_type<int>, tbb::tbb_hash<check_type<int> >, std::equal_to<check_type<int> >, MyAllocator> MyCheckedMultiSet;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nstruct cu_set_type : unordered_move_traits_base {\n    template<typename element_type, typename allocator_type>\n    struct apply {\n        typedef tbb::concurrent_unordered_set<element_type, tbb::tbb_hash<element_type>, std::equal_to<element_type>, allocator_type > type;\n    };\n\n    typedef FooIterator init_iterator_type;\n};\n\nstruct cu_multiset_type : unordered_move_traits_base {\n    template<typename element_type, typename allocator_type>\n    struct apply {\n        typedef tbb::concurrent_unordered_multiset<element_type, tbb::tbb_hash<element_type>, std::equal_to<element_type>, allocator_type > type;\n    };\n\n    typedef FooIterator init_iterator_type;\n};\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\ntemplate <bool defCtorPresent, typename value_type>\nvoid TestTypesSet( const std::list<value_type> &lst ) {\n    TypeTester< defCtorPresent, tbb::concurrent_unordered_set<value_type, tbb::tbb_hash<value_type>, Harness::IsEqual>,\n        tbb::concurrent_unordered_set< value_type, tbb::tbb_hash<value_type>, Harness::IsEqual, debug_allocator<value_type> > >( lst );\n    TypeTester< defCtorPresent, tbb::concurrent_unordered_multiset<value_type, tbb::tbb_hash<value_type>, Harness::IsEqual>,\n        tbb::concurrent_unordered_multiset< value_type, tbb::tbb_hash<value_type>, Harness::IsEqual, debug_allocator<value_type> > >( lst );\n}\n\nvoid TestTypes( ) {\n    const int NUMBER = 10;\n\n    std::list<int> arrInt;\n    for ( int i = 0; i<NUMBER; ++i ) arrInt.push_back( i );\n    TestTypesSet</*defCtorPresent = */true>( arrInt );\n\n    std::list< tbb::atomic<int> > arrTbb(NUMBER);\n    int seq = 0;\n    for ( std::list< tbb::atomic<int> >::iterator it = arrTbb.begin(); it != arrTbb.end(); ++it, ++seq ) *it = seq;\n    TestTypesSet</*defCtorPresent = */true>( arrTbb );\n\n#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN\n    std::list< std::reference_wrapper<int> > arrRef;\n    for ( std::list<int>::iterator it = arrInt.begin( ); it != arrInt.end( ); ++it )\n        arrRef.push_back( std::reference_wrapper<int>(*it) );\n    TestTypesSet</*defCtorPresent = */false>( arrRef );\n#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    std::list< std::shared_ptr<int> > arrShr;\n    for ( int i = 0; i<NUMBER; ++i ) arrShr.push_back( std::make_shared<int>( i ) );\n    TestTypesSet</*defCtorPresent = */true>( arrShr );\n\n    std::list< std::weak_ptr<int> > arrWk;\n    std::copy( arrShr.begin( ), arrShr.end( ), std::back_inserter( arrWk ) );\n    TestTypesSet</*defCtorPresent = */true>( arrWk );\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    // Regression test for a problem with excessive requirements of emplace()\n    test_emplace_insert<tbb::concurrent_unordered_set< test::unique_ptr<int> >,\n                        tbb::internal::false_type>( new int, new int );\n    test_emplace_insert<tbb::concurrent_unordered_multiset< test::unique_ptr<int> >,\n                        tbb::internal::false_type>( new int, new int );\n#endif\n\n#else\n    REPORT( \"Known issue: C++11 smart pointer tests are skipped.\\n\" );\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n#endif // __TBB_TEST_SECONDARY\n\n#if !__TBB_TEST_SECONDARY\n#define INITIALIZATION_TIME_TEST_NAMESPACE            initialization_time_test\n#define TEST_INITIALIZATION_TIME_OPERATIONS_NAME      test_initialization_time_operations\nvoid test_initialization_time_operations_external();\n#else\n#define INITIALIZATION_TIME_TEST_NAMESPACE            initialization_time_test_external\n#define TEST_INITIALIZATION_TIME_OPERATIONS_NAME      test_initialization_time_operations_external\n#endif\n\nnamespace INITIALIZATION_TIME_TEST_NAMESPACE {\n    tbb::concurrent_unordered_set<int> static_init_time_set;\n    int any_non_zero_value = 89432;\n    bool static_init_time_inserted = (static_init_time_set.insert( any_non_zero_value )).second;\n    bool static_init_time_found = ((static_init_time_set.find( any_non_zero_value )) != static_init_time_set.end( ));\n}\nvoid TEST_INITIALIZATION_TIME_OPERATIONS_NAME( ) {\n    using namespace INITIALIZATION_TIME_TEST_NAMESPACE;\n#define LOCATION \",in function: \" __TBB_STRING(TEST_INITIALIZATION_TIME_OPERATIONS_NAME)\n    ASSERT( static_init_time_inserted, \"failed to insert an item during initialization of global objects\" LOCATION );\n    ASSERT( static_init_time_found, \"failed to find an item during initialization of global objects\" LOCATION );\n\n    bool static_init_time_found_in_main = ((static_init_time_set.find( any_non_zero_value )) != static_init_time_set.end( ));\n    ASSERT( static_init_time_found_in_main, \"failed to find during main() an item inserted during initialization of global objects\" LOCATION );\n#undef LOCATION\n}\n\n#if !__TBB_TEST_SECONDARY\nint TestMain() {\n    test_machine( );\n\n    test_basic<MySet>( \"concurrent unordered Set\" );\n    test_basic<MyDegenerateSet>( \"concurrent unordered degenerate Set\" );\n    test_concurrent<MySet>(\"concurrent unordered Set\");\n    test_concurrent<MyDegenerateSet>( \"concurrent unordered degenerate Set\" );\n    test_basic<MyMultiSet>(\"concurrent unordered MultiSet\");\n    test_basic<MyDegenerateMultiSet>(\"concurrent unordered degenerate MultiSet\");\n    test_concurrent<MyMultiSet>( \"concurrent unordered MultiSet\" );\n    test_concurrent<MyDegenerateMultiSet>(\"concurrent unordered degenerate MultiSet\");\n    test_concurrent<MyMultiSet>( \"concurrent unordered MultiSet asymptotic\", true );\n\n    { Check<MyCheckedSet::value_type> checkit; test_basic<MyCheckedSet>( \"concurrent_unordered_set (checked)\" ); }\n    { Check<MyCheckedSet::value_type> checkit; test_concurrent<MyCheckedSet>( \"concurrent unordered set (checked)\" ); }\n    test_basic<MyCheckedStateSet>(\"concurrent unordered set (checked element state)\", tbb::internal::true_type());\n    test_concurrent<MyCheckedStateSet>(\"concurrent unordered set (checked element state)\");\n\n    { Check<MyCheckedMultiSet::value_type> checkit; test_basic<MyCheckedMultiSet>(\"concurrent_unordered_multiset (checked)\"); }\n    { Check<MyCheckedMultiSet::value_type> checkit; test_concurrent<MyCheckedMultiSet>( \"concurrent unordered multiset (checked)\" ); }\n\n    test_initialization_time_operations( );\n#if !__TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN\n    test_initialization_time_operations_external( );\n#else\n    REPORT( \"Known issue: global objects initialization time tests skipped.\\n\" );\n#endif //!__TBB_CPP11_STD_PLACEHOLDERS_LINKING_BROKEN\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    TestInitList< tbb::concurrent_unordered_set<int>,\n                  tbb::concurrent_unordered_multiset<int> >( {1,2,3,4,5} );\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    test_rvalue_ref_support<cu_set_type>( \"concurrent unordered set\" );\n    test_rvalue_ref_support<cu_multiset_type>( \"concurrent unordered multiset\" );\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    TestTypes();\n\n    return Harness::Done;\n}\n#endif //#if !__TBB_TEST_SECONDARY\n#endif //!(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_concurrent_vector.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER\n#define _SCL_SECURE_NO_WARNINGS\n#endif\n\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/tbb_exception.h\"\n#include <cstdio>\n#include <cstdlib>\n#include <functional>\n#include <vector>\n#include <numeric>\n#include \"harness_report.h\"\n#include \"harness_assert.h\"\n#include \"harness_allocator.h\"\n#include \"harness_defs.h\"\n#include \"test_container_move_support.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n    #pragma warning (disable: 4800)\n#endif\n\n#if TBB_USE_EXCEPTIONS\nstatic bool known_issue_verbose = false;\n#define KNOWN_ISSUE(msg) if(!known_issue_verbose) known_issue_verbose = true, REPORT(msg)\n#endif /* TBB_USE_EXCEPTIONS */\n\ninline void NextSize( int& s ) {\n    if( s<=32 ) ++s;\n    else s += s/10;\n}\n\n//! Check vector have expected size and filling\ntemplate<typename vector_t>\nstatic void CheckVector( const vector_t& cv, size_t expected_size, size_t old_size ) {\n    ASSERT( cv.capacity()>=expected_size, NULL );\n    ASSERT( cv.size()==expected_size, NULL );\n    ASSERT( cv.empty()==(expected_size==0), NULL );\n    for( int j=0; j<int(expected_size); ++j ) {\n        if( cv[j].bar()!=~j )\n            REPORT(\"ERROR on line %d for old_size=%ld expected_size=%ld j=%d\\n\",__LINE__,long(old_size),long(expected_size),j);\n    }\n}\n\n//! Test of assign, grow, copying with various sizes\nvoid TestResizeAndCopy() {\n    typedef static_counting_allocator<debug_allocator<Foo,std::allocator>, std::size_t> allocator_t;\n    typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;\n    allocator_t::init_counters();\n    for( int old_size=0; old_size<=128; NextSize( old_size ) ) {\n        for( int new_size=0; new_size<=1280; NextSize( new_size ) ) {\n            size_t count = FooCount;\n            vector_t v;\n            ASSERT( count==FooCount, NULL );\n            v.assign(old_size/2, Foo() );\n            ASSERT( count+old_size/2==FooCount, NULL );\n            for( int j=0; j<old_size/2; ++j )\n                ASSERT( v[j].state == Foo::CopyInitialized, NULL);\n            v.assign(FooIterator(0), FooIterator(old_size));\n            v.resize(new_size, Foo(33) );\n            ASSERT( count+new_size==FooCount, NULL );\n            for( int j=0; j<new_size; ++j ) {\n                int expected = j<old_size ? j : 33;\n                if( v[j].bar()!=expected )\n                    REPORT(\"ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\\n\",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);\n            }\n            ASSERT( v.size()==size_t(new_size), NULL );\n            for( int j=0; j<new_size; ++j ) {\n                v[j].bar() = ~j;\n            }\n            const vector_t& cv = v;\n            // Try copy constructor\n            vector_t copy_of_v(cv);\n            CheckVector(cv,new_size,old_size);\n            ASSERT( !(v != copy_of_v), NULL );\n            v.clear();\n            ASSERT( v.empty(), NULL );\n            swap(v, copy_of_v);\n            ASSERT( copy_of_v.empty(), NULL );\n            CheckVector(v,new_size,old_size);\n        }\n    }\n    ASSERT( allocator_t::items_allocated == allocator_t::items_freed, NULL);\n    ASSERT( allocator_t::allocations == allocator_t::frees, NULL);\n}\n\n//! Test reserve, compact, capacity\nvoid TestCapacity() {\n    typedef static_counting_allocator<debug_allocator<Foo,tbb::cache_aligned_allocator>, std::size_t> allocator_t;\n    typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;\n    allocator_t::init_counters();\n    for( size_t old_size=0; old_size<=11000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {\n        for( size_t new_size=0; new_size<=11000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {\n            size_t count = FooCount;\n            {\n                vector_t v; v.reserve(old_size);\n                ASSERT( v.capacity()>=old_size, NULL );\n                v.reserve( new_size );\n                ASSERT( v.capacity()>=old_size, NULL );\n                ASSERT( v.capacity()>=new_size, NULL );\n                ASSERT( v.empty(), NULL );\n                size_t fill_size = 2*new_size;\n                for( size_t i=0; i<fill_size; ++i ) {\n                    ASSERT( size_t(FooCount)==count+i, NULL );\n                    size_t j = v.grow_by(1) - v.begin();\n                    ASSERT( j==i, NULL );\n                    v[j].bar() = int(~j);\n                }\n                vector_t copy_of_v(v); // should allocate first segment with same size as for shrink_to_fit()\n                if(__TBB_Log2(/*reserved size*/old_size|1) > __TBB_Log2(fill_size|1) )\n                    ASSERT( v.capacity() != copy_of_v.capacity(), NULL );\n                v.shrink_to_fit();\n                ASSERT( v.capacity() == copy_of_v.capacity(), NULL );\n                CheckVector(v, new_size*2, old_size); // check vector correctness\n                ASSERT( v==copy_of_v, NULL ); // TODO: check also segments layout equality\n            }\n            ASSERT( FooCount==count, NULL );\n        }\n    }\n    ASSERT( allocator_t::items_allocated == allocator_t::items_freed, NULL);\n    ASSERT( allocator_t::allocations == allocator_t::frees, NULL);\n}\n\nstruct AssignElement {\n    typedef tbb::concurrent_vector<int>::range_type::iterator iterator;\n    iterator base;\n    void operator()( const tbb::concurrent_vector<int>::range_type& range ) const {\n        for( iterator i=range.begin(); i!=range.end(); ++i ) {\n            if( *i!=0 )\n                REPORT(\"ERROR for v[%ld]\\n\", long(i-base));\n            *i = int(i-base);\n        }\n    }\n    AssignElement( iterator base_ ) : base(base_) {}\n};\n\nstruct CheckElement {\n    typedef tbb::concurrent_vector<int>::const_range_type::iterator iterator;\n    iterator base;\n    void operator()( const tbb::concurrent_vector<int>::const_range_type& range ) const {\n        for( iterator i=range.begin(); i!=range.end(); ++i )\n            if( *i != int(i-base) )\n                REPORT(\"ERROR for v[%ld]\\n\", long(i-base));\n    }\n    CheckElement( iterator base_ ) : base(base_) {}\n};\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/parallel_for.h\"\n#include \"harness.h\"\n\n//! Problem size\nconst size_t N = 500000;\n\n//! Test parallel access by iterators\nvoid TestParallelFor( int nthread ) {\n    typedef tbb::concurrent_vector<int> vector_t;\n    vector_t v;\n    v.resize(N);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    REMARK(\"Calling parallel_for with %ld threads\\n\",long(nthread));\n    tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    const vector_t& u = v;\n    tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );\n    tbb::tick_count t2 = tbb::tick_count::now();\n    REMARK(\"Time for parallel_for: assign time = %8.5f, check time = %8.5f\\n\",\n               (t1-t0).seconds(),(t2-t1).seconds());\n    for( long i=0; size_t(i)<v.size(); ++i )\n        if( v[i]!=i )\n            REPORT(\"ERROR for v[%ld]\\n\", i);\n}\n\ntemplate<typename Iterator1, typename Iterator2>\nvoid TestIteratorAssignment( Iterator2 j ) {\n    Iterator1 i(j);\n    ASSERT( i==j, NULL );\n    ASSERT( !(i!=j), NULL );\n    Iterator1 k;\n    k = j;\n    ASSERT( k==j, NULL );\n    ASSERT( !(k!=j), NULL );\n}\n\ntemplate<typename Range1, typename Range2>\nvoid TestRangeAssignment( Range2 r2 ) {\n    Range1 r1(r2); r1 = r2;\n}\n\ntemplate<typename Iterator, typename T>\nvoid TestIteratorTraits() {\n    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );\n    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );\n    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );\n    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );\n    T x;\n    typename Iterator::reference xr = x;\n    typename Iterator::pointer xp = &x;\n    ASSERT( &xr==xp, NULL );\n}\n\ntemplate<typename Vector, typename Iterator>\nvoid CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {\n    typename Vector::const_reference pref = *cp;\n    if( pref.bar()!=i )\n        REPORT(\"ERROR for u[%ld] using const_iterator\\n\", long(i));\n    typename Vector::difference_type delta = cp-u.begin();\n    ASSERT( delta==i, NULL );\n    if( u[i].bar()!=i )\n        REPORT(\"ERROR for u[%ld] using subscripting\\n\", long(i));\n    ASSERT( u.begin()[i].bar()==i, NULL );\n}\n\ntemplate<typename Iterator1, typename Iterator2, typename V>\nvoid CheckIteratorComparison( V& u ) {\n    V u2 = u;\n    Iterator1 i = u.begin();\n\n    for( int i_count=0; i_count<100; ++i_count ) {\n        Iterator2 j = u.begin();\n        Iterator2 i2 = u2.begin();\n        for( int j_count=0; j_count<100; ++j_count ) {\n            ASSERT( (i==j)==(i_count==j_count), NULL );\n            ASSERT( (i!=j)==(i_count!=j_count), NULL );\n            ASSERT( (i-j)==(i_count-j_count), NULL );\n            ASSERT( (i<j)==(i_count<j_count), NULL );\n            ASSERT( (i>j)==(i_count>j_count), NULL );\n            ASSERT( (i<=j)==(i_count<=j_count), NULL );\n            ASSERT( (i>=j)==(i_count>=j_count), NULL );\n            ASSERT( !(i==i2), NULL );\n            ASSERT( i!=i2, NULL );\n            ++j;\n            ++i2;\n        }\n        ++i;\n    }\n}\n\ntemplate<typename Vector, typename T>\nvoid TestGrowToAtLeastWithSourceParameter(T const& src){\n    static const size_t vector_size = 10;\n    Vector v1(vector_size,src);\n    Vector v2;\n    v2.grow_to_at_least(vector_size,src);\n    ASSERT(v1==v2,\"grow_to_at_least(vector_size,src) did not properly initialize new elements ?\");\n}\n//! Test sequential iterators for vector type V.\n/** Also does timing. */\ntemplate<typename T>\nvoid TestSequentialFor() {\n    typedef tbb::concurrent_vector<FooWithAssign> V;\n    V v(N);\n    ASSERT(v.grow_by(0) == v.grow_by(0, FooWithAssign()), NULL);\n\n    // Check iterator\n    tbb::tick_count t0 = tbb::tick_count::now();\n    typename V::iterator p = v.begin();\n    ASSERT( !(*p).is_const(), NULL );\n    ASSERT( !p->is_const(), NULL );\n    for( int i=0; size_t(i)<v.size(); ++i, ++p ) {\n        if( (*p).state!=Foo::DefaultInitialized )\n            REPORT(\"ERROR for v[%ld]\\n\", long(i));\n        typename V::reference pref = *p;\n        pref.bar() = i;\n        typename V::difference_type delta = p-v.begin();\n        ASSERT( delta==i, NULL );\n        ASSERT( -delta<=0, \"difference type not signed?\" );\n    }\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    // Check const_iterator going forwards\n    const V& u = v;\n    typename V::const_iterator cp = u.begin();\n    ASSERT( cp == v.cbegin(), NULL );\n    ASSERT( (*cp).is_const(), NULL );\n    ASSERT( cp->is_const(), NULL );\n    ASSERT( *cp == v.front(), NULL);\n    for( int i=0; size_t(i)<u.size(); ++i ) {\n        CheckConstIterator(u,i,cp);\n        V::const_iterator &cpr = ++cp;\n        ASSERT( &cpr == &cp, \"pre-increment not returning a reference?\");\n    }\n    tbb::tick_count t2 = tbb::tick_count::now();\n    REMARK(\"Time for serial for:  assign time = %8.5f, check time = %8.5f\\n\",\n               (t1-t0).seconds(),(t2-t1).seconds());\n\n    // Now go backwards\n    cp = u.end();\n    ASSERT( cp == v.cend(), NULL );\n    for( int i=int(u.size()); i>0; ) {\n        --i;\n        V::const_iterator &cpr = --cp;\n        ASSERT( &cpr == &cp, \"pre-decrement not returning a reference?\");\n        if( i>0 ) {\n            typename V::const_iterator cp_old = cp--;\n            intptr_t here = (*cp_old).bar();\n            ASSERT( here==u[i].bar(), NULL );\n            typename V::const_iterator cp_new = cp++;\n            intptr_t prev = (*cp_new).bar();\n            ASSERT( prev==u[i-1].bar(), NULL );\n        }\n        CheckConstIterator(u,i,cp);\n    }\n\n    // Now go forwards and backwards\n    ptrdiff_t k = 0;\n    cp = u.begin();\n    for( size_t i=0; i<u.size(); ++i ) {\n        CheckConstIterator(u,int(k),cp);\n        typename V::difference_type delta = i*3 % u.size();\n        if( 0<=k+delta && size_t(k+delta)<u.size() ) {\n            V::const_iterator &cpr = (cp += delta);\n            ASSERT( &cpr == &cp, \"+= not returning a reference?\");\n            k += delta;\n        }\n        delta = i*7 % u.size();\n        if( 0<=k-delta && size_t(k-delta)<u.size() ) {\n            if( i&1 ) {\n                V::const_iterator &cpr = (cp -= delta);\n                ASSERT( &cpr == &cp, \"-= not returning a reference?\");\n            } else\n                cp = cp - delta;        // Test operator-\n            k -= delta;\n        }\n    }\n\n    for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )\n        for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {\n            ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );\n            ASSERT( (v.begin()+i)[j].bar()==i+j, NULL );\n            ASSERT((v.cbegin()+i)[j].bar()==i+j, NULL );\n            ASSERT( (i+u.begin())[j].bar()==i+j, NULL );\n            ASSERT( (i+v.begin())[j].bar()==i+j, NULL );\n            ASSERT((i+v.cbegin())[j].bar()==i+j, NULL );\n        }\n\n    CheckIteratorComparison<typename V::iterator, typename V::iterator>(v);\n    CheckIteratorComparison<typename V::iterator, typename V::const_iterator>(v);\n    CheckIteratorComparison<typename V::const_iterator, typename V::iterator>(v);\n    CheckIteratorComparison<typename V::const_iterator, typename V::const_iterator>(v);\n\n    TestIteratorAssignment<typename V::const_iterator>( u.begin() );\n    TestIteratorAssignment<typename V::const_iterator>( v.begin() );\n    TestIteratorAssignment<typename V::const_iterator>( v.cbegin() );\n    TestIteratorAssignment<typename V::iterator>( v.begin() );\n    // doesn't compile as expected: TestIteratorAssignment<typename V::iterator>( u.begin() );\n\n    TestRangeAssignment<typename V::const_range_type>( u.range() );\n    TestRangeAssignment<typename V::const_range_type>( v.range() );\n    TestRangeAssignment<typename V::range_type>( v.range() );\n    // doesn't compile as expected: TestRangeAssignment<typename V::range_type>( u.range() );\n\n    // Check reverse_iterator\n    typename V::reverse_iterator rp = v.rbegin();\n    for( size_t i=v.size(); i>0; --i, ++rp ) {\n        typename V::reference pref = *rp;\n        ASSERT( size_t(pref.bar())==i-1, NULL );\n        ASSERT( rp!=v.rend(), NULL );\n    }\n    ASSERT( rp==v.rend(), NULL );\n\n    // Check const_reverse_iterator\n    typename V::const_reverse_iterator crp = u.rbegin();\n    ASSERT( crp == v.crbegin(), NULL );\n    ASSERT( *crp == v.back(), NULL);\n    for( size_t i=v.size(); i>0; --i, ++crp ) {\n        typename V::const_reference cpref = *crp;\n        ASSERT( size_t(cpref.bar())==i-1, NULL );\n        ASSERT( crp!=u.rend(), NULL );\n    }\n    ASSERT( crp == u.rend(), NULL );\n    ASSERT( crp == v.crend(), NULL );\n\n    TestIteratorAssignment<typename V::const_reverse_iterator>( u.rbegin() );\n    TestIteratorAssignment<typename V::reverse_iterator>( v.rbegin() );\n\n    // test compliance with C++ Standard 2003, clause 23.1.1p9\n    {\n        tbb::concurrent_vector<int> v1, v2(1, 100);\n        v1.assign(1, 100); ASSERT(v1 == v2, NULL);\n        ASSERT(v1.size() == 1 && v1[0] == 100, \"used integral iterators\");\n    }\n\n    // cross-allocator tests\n#if !defined(_WIN64) || defined(_CPPLIB_VER)\n    typedef local_counting_allocator<std::allocator<int>, size_t> allocator1_t;\n    typedef tbb::cache_aligned_allocator<void> allocator2_t;\n    typedef tbb::concurrent_vector<FooWithAssign, allocator1_t> V1;\n    typedef tbb::concurrent_vector<FooWithAssign, allocator2_t> V2;\n    V1 v1( v ); // checking cross-allocator copying\n    V2 v2( 10 ); v2 = v1; // checking cross-allocator assignment\n    ASSERT( (v1 == v) && !(v2 != v), NULL);\n    ASSERT( !(v1 < v) && !(v2 > v), NULL);\n    ASSERT( (v1 <= v) && (v2 >= v), NULL);\n#endif\n}\n\nnamespace test_grow_to_at_least_helpers {\n    template<typename MyVector >\n    class GrowToAtLeast: NoAssign {\n        typedef typename MyVector::const_reference const_reference;\n\n        const bool my_use_two_args_form ;\n        MyVector& my_vector;\n        const_reference my_init_from;\n    public:\n        void operator()( const tbb::blocked_range<size_t>& range ) const {\n            for( size_t i=range.begin(); i!=range.end(); ++i ) {\n                size_t n = my_vector.size();\n                size_t req = (i % (2*n+1))+1;\n\n                typename MyVector::iterator p;\n                Foo::State desired_state;\n                if (my_use_two_args_form){\n                    p = my_vector.grow_to_at_least(req,my_init_from);\n                    desired_state = Foo::CopyInitialized;\n                }else{\n                    p = my_vector.grow_to_at_least(req);\n                    desired_state = Foo::DefaultInitialized;\n                }\n                if( p-my_vector.begin() < typename MyVector::difference_type(req) )\n                    ASSERT( p->state == desired_state || p->state == Foo::ZeroInitialized, NULL );\n                ASSERT( my_vector.size()>=req, NULL );\n            }\n        }\n        GrowToAtLeast(bool use_two_args_form, MyVector& vector, const_reference init_from )\n            : my_use_two_args_form(use_two_args_form), my_vector(vector), my_init_from(init_from) {}\n    };\n}\n\ntemplate<bool use_two_arg_form>\nvoid TestConcurrentGrowToAtLeastImpl() {\n    using namespace test_grow_to_at_least_helpers;\n    typedef static_counting_allocator< tbb::zero_allocator<Foo> > MyAllocator;\n    typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;\n    Foo copy_from;\n    MyAllocator::init_counters();\n    MyVector v(2, Foo(), MyAllocator());\n    for( size_t s=1; s<1000; s*=10 ) {\n        tbb::parallel_for( tbb::blocked_range<size_t>(0,10000*s,s), GrowToAtLeast<MyVector>(use_two_arg_form, v, copy_from), tbb::simple_partitioner() );\n    }\n    v.clear();\n    ASSERT( 0 == v.get_allocator().frees, NULL);\n    v.shrink_to_fit();\n    size_t items_allocated = v.get_allocator().items_allocated,\n           items_freed = v.get_allocator().items_freed;\n    size_t allocations = v.get_allocator().allocations,\n           frees = v.get_allocator().frees;\n    ASSERT( items_allocated == items_freed, NULL);\n    ASSERT( allocations == frees, NULL);\n}\n\nvoid TestConcurrentGrowToAtLeast() {\n    TestConcurrentGrowToAtLeastImpl<false>();\n    TestConcurrentGrowToAtLeastImpl<true>();\n}\n\nstruct grain_map: NoAssign {\n    enum grow_method_enum {\n        grow_by_range = 1,\n        grow_by_default,\n        grow_by_copy,\n        grow_by_init_list,\n        push_back,\n        push_back_move,\n        emplace_back,\n        last_method\n    };\n\n    struct range_part {\n        size_t number_of_parts;\n        grain_map::grow_method_enum method;\n        bool distribute;\n        Foo::State expected_element_state;\n    };\n\n    const std::vector<range_part> distributed;\n    const std::vector<range_part> batched;\n    const size_t total_number_of_parts;\n\n    grain_map(const range_part* begin, const range_part* end)\n    : distributed(separate(begin,end, &distributed::is_not))\n    , batched(separate(begin,end, &distributed::is_yes))\n    , total_number_of_parts(std::accumulate(begin, end, (size_t)0, &sum_number_of_parts::sum))\n    {}\n\nprivate:\n    struct sum_number_of_parts{\n        static size_t sum(size_t accumulator, grain_map::range_part const& rp){ return accumulator + rp.number_of_parts;}\n    };\n\n    template <typename functor_t>\n    static std::vector<range_part> separate(const range_part* begin, const range_part* end, functor_t f){\n        std::vector<range_part> part;\n        part.reserve(std::distance(begin,end));\n        //copy all that false==f(*it)\n        std::remove_copy_if(begin, end, std::back_inserter(part), f);\n\n        return part;\n    }\n\n    struct distributed {\n        static bool is_not(range_part const& rp){ return !rp.distribute;}\n        static bool is_yes(range_part const& rp){ return rp.distribute;}\n    };\n};\n\n//! Test concurrent invocations of method concurrent_vector::grow_by\ntemplate<typename MyVector>\nclass GrowBy: NoAssign {\n    MyVector& my_vector;\n    const grain_map& my_grain_map;\n    size_t my_part_weight;\npublic:\n    void operator()( const tbb::blocked_range<size_t>& range ) const {\n        ASSERT( range.begin() < range.end(), NULL );\n\n        size_t current_adding_index_in_cvector = range.begin();\n\n        for(size_t index=0; index < my_grain_map.batched.size(); ++index){\n            const grain_map::range_part& batch_part = my_grain_map.batched[index];\n            const size_t number_of_items_to_add = batch_part.number_of_parts * my_part_weight;\n            const size_t end = current_adding_index_in_cvector + number_of_items_to_add;\n\n            switch(batch_part.method){\n            case grain_map::grow_by_range : {\n                    my_vector.grow_by(FooIterator(current_adding_index_in_cvector),FooIterator(end));\n                } break;\n            case grain_map::grow_by_default : {\n                    typename MyVector::iterator const s = my_vector.grow_by(number_of_items_to_add);\n                    for( size_t k = 0; k < number_of_items_to_add; ++k )\n                        s[k].bar() = current_adding_index_in_cvector + k;\n                } break;\n#if __TBB_INITIALIZER_LISTS_PRESENT\n            case grain_map::grow_by_init_list : {\n                    FooIterator curr(current_adding_index_in_cvector);\n                    for ( size_t k = 0; k < number_of_items_to_add; ++k ) {\n                        if ( k + 4 < number_of_items_to_add ) {\n                            my_vector.grow_by( { *curr++, *curr++, *curr++, *curr++, *curr++ } );\n                            k += 4;\n                        } else {\n                            my_vector.grow_by( { *curr++ } );\n                        }\n                    }\n                    ASSERT( curr == FooIterator(end), NULL );\n                } break;\n#endif\n            default : { ASSERT(false, \"using unimplemented method of batch add in ConcurrentGrow test.\");} break;\n            };\n\n            current_adding_index_in_cvector = end;\n        }\n\n        std::vector<size_t> items_left_to_add(my_grain_map.distributed.size());\n        for (size_t i=0; i<my_grain_map.distributed.size(); ++i ){\n            items_left_to_add[i] = my_grain_map.distributed[i].number_of_parts * my_part_weight;\n        }\n\n        for (;current_adding_index_in_cvector < range.end(); ++current_adding_index_in_cvector){\n            size_t method_index = current_adding_index_in_cvector % my_grain_map.distributed.size();\n\n            if (! items_left_to_add[method_index]) {\n                struct not_zero{\n                    static bool is(size_t items_to_add){ return items_to_add;}\n                };\n                method_index = std::distance(items_left_to_add.begin(), std::find_if(items_left_to_add.begin(), items_left_to_add.end(), &not_zero::is));\n                ASSERT(method_index < my_grain_map.distributed.size(), \"incorrect test setup - wrong expected distribution: left free space but no elements to add?\");\n            };\n\n            ASSERT(items_left_to_add[method_index], \"logic error ?\");\n            const grain_map::range_part& distributed_part = my_grain_map.distributed[method_index];\n\n            typename MyVector::iterator r;\n            typename MyVector::value_type source;\n            source.bar() = current_adding_index_in_cvector;\n\n            switch(distributed_part.method){\n            case grain_map::grow_by_default : {\n                    (r = my_vector.grow_by(1))->bar() = current_adding_index_in_cvector;\n                } break;\n            case grain_map::grow_by_copy : {\n                    r = my_vector.grow_by(1, source);\n                } break;\n            case grain_map::push_back : {\n                    r = my_vector.push_back(source);\n                } break;\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n            case grain_map::push_back_move : {\n                    r = my_vector.push_back(std::move(source));\n                } break;\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n            case grain_map::emplace_back : {\n                    r = my_vector.emplace_back(current_adding_index_in_cvector);\n                } break;\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n            default : { ASSERT(false, \"using unimplemented method of batch add in ConcurrentGrow test.\");} break;\n            };\n\n            ASSERT( static_cast<size_t>(r->bar()) == current_adding_index_in_cvector, NULL );\n            }\n        }\n\n    GrowBy( MyVector& vector, const grain_map& m, size_t part_weight )\n    : my_vector(vector)\n    , my_grain_map(m)\n    , my_part_weight(part_weight)\n    {\n    }\n};\n\nconst grain_map::range_part concurrent_grow_single_range_map [] = {\n//  number_of_parts,         method,             distribute,   expected_element_state\n        {3,           grain_map::grow_by_range,     false,\n                                                            #if  __TBB_CPP11_RVALUE_REF_PRESENT\n                                                                Foo::MoveInitialized\n                                                            #else\n                                                                Foo::CopyInitialized\n                                                            #endif\n        },\n#if __TBB_INITIALIZER_LISTS_PRESENT && !__TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n        {1,           grain_map::grow_by_init_list, false,   Foo::CopyInitialized},\n#endif\n        {2,           grain_map::grow_by_default,   false,   Foo::DefaultInitialized},\n        {1,           grain_map::grow_by_default,   true,    Foo::DefaultInitialized},\n        {1,           grain_map::grow_by_copy,      true,    Foo::CopyInitialized},\n        {1,           grain_map::push_back,         true,    Foo::CopyInitialized},\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        {1,           grain_map::push_back_move,    true,    Foo::MoveInitialized},\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n        {1,           grain_map::emplace_back,      true,    Foo::DirectInitialized},\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n};\n\n//! Test concurrent invocations of grow methods\nvoid TestConcurrentGrowBy( int nthread ) {\n\n    typedef static_counting_allocator<debug_allocator<Foo> > MyAllocator;\n    typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;\n\n#if __TBB_INITIALIZER_LISTS_PRESENT && __TBB_CPP11_INIT_LIST_TEMP_OBJS_LIFETIME_BROKEN\n    static bool is_reported = false;\n    if ( !is_reported ) {\n        REPORT( \"Known issue: concurrent tests of grow_by(std::initializer_list) are skipped.\\n\" );\n        is_reported = true;\n    }\n#endif\n\n    MyAllocator::init_counters();\n    {\n        grain_map m(concurrent_grow_single_range_map, Harness::end(concurrent_grow_single_range_map));\n\n        static const size_t desired_grain_size = 100;\n\n        static const size_t part_weight = desired_grain_size / m.total_number_of_parts;\n        static const size_t grain_size = part_weight * m.total_number_of_parts;\n        static const size_t number_of_grains = 8; //this should be (power of two) in order to get minimal ranges equal to grain_size\n        static const size_t range_size = grain_size * number_of_grains;\n\n        MyAllocator a;\n        MyVector v( a );\n        tbb::parallel_for( tbb::blocked_range<size_t>(0,range_size,grain_size), GrowBy<MyVector>(v, m, part_weight), tbb::simple_partitioner() );\n        ASSERT( v.size()==size_t(range_size), NULL );\n\n        // Verify that v is a permutation of 0..m\n        size_t inversions = 0, direct_inits = 0, def_inits = 0, copy_inits = 0, move_inits = 0;\n        std::vector<bool> found(range_size, 0);\n        for( size_t i=0; i<range_size; ++i ) {\n            if( v[i].state == Foo::DefaultInitialized ) ++def_inits;\n            else if( v[i].state == Foo::DirectInitialized ) ++direct_inits;\n            else if( v[i].state == Foo::CopyInitialized ) ++copy_inits;\n            else if( v[i].state == Foo::MoveInitialized ) ++move_inits;\n            else {\n                REMARK(\"i: %d \", i);\n                ASSERT( false, \"v[i] seems not initialized\");\n            }\n            intptr_t index = v[i].bar();\n            ASSERT( !found[index], NULL );\n            found[index] = true;\n            if( i>0 )\n                inversions += v[i].bar()<v[i-1].bar();\n        }\n        for( size_t i=0; i<range_size; ++i ) {\n            ASSERT( found[i], NULL );\n            ASSERT( nthread>1 || v[i].bar() == static_cast<intptr_t>(i), \"sequential execution is wrong\" );\n        }\n\n        REMARK(\"Initialization by default constructor: %d, by copy: %d, by move: %d\\n\", def_inits, copy_inits, move_inits);\n\n        size_t expected_direct_inits = 0, expected_def_inits = 0, expected_copy_inits = 0, expected_move_inits = 0;\n        for (size_t i=0; i<Harness::array_length(concurrent_grow_single_range_map); ++i){\n            const grain_map::range_part& rp =concurrent_grow_single_range_map[i];\n            switch (rp.expected_element_state){\n            case Foo::DefaultInitialized: { expected_def_inits += rp.number_of_parts ; } break;\n            case Foo::DirectInitialized:  { expected_direct_inits += rp.number_of_parts ;} break;\n            case Foo::MoveInitialized:    { expected_move_inits += rp.number_of_parts ;} break;\n            case Foo::CopyInitialized:    { expected_copy_inits += rp.number_of_parts ;} break;\n            default: {ASSERT(false, \"unexpected expected state\");}break;\n            };\n        }\n\n        expected_def_inits    *= part_weight * number_of_grains;\n        expected_move_inits   *= part_weight * number_of_grains;\n        expected_copy_inits   *= part_weight * number_of_grains;\n        expected_direct_inits *= part_weight * number_of_grains;\n\n        ASSERT( def_inits == expected_def_inits , NULL);\n        ASSERT( copy_inits == expected_copy_inits , NULL);\n        ASSERT( move_inits == expected_move_inits , NULL);\n        ASSERT( direct_inits == expected_direct_inits , NULL);\n\n        if( nthread>1 && inversions<range_size/20 )\n            REPORT(\"Warning: not much concurrency in TestConcurrentGrowBy (%d inversions)\\n\", inversions);\n    }\n    //TODO: factor this into separate thing, as it seems to used in big number of tests\n    size_t items_allocated = MyAllocator::items_allocated,\n           items_freed = MyAllocator::items_freed;\n    size_t allocations = MyAllocator::allocations,\n           frees = MyAllocator::frees;\n    ASSERT( items_allocated == items_freed, NULL);\n    ASSERT( allocations == frees, NULL);\n}\n\ntemplate <typename Vector>\nvoid test_grow_by_empty_range( Vector &v, typename Vector::value_type* range_begin_end ) {\n    const Vector v_copy = v;\n    ASSERT( v.grow_by( range_begin_end, range_begin_end ) == v.end(), \"grow_by(empty_range) returned a wrong iterator.\" );\n    ASSERT( v == v_copy, \"grow_by(empty_range) has changed the vector.\" );\n}\n\nvoid TestSerialGrowByRange( bool fragmented_vector ) {\n    tbb::concurrent_vector<int> v;\n    if ( fragmented_vector ) {\n        v.reserve( 1 );\n    }\n    int init_range[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };\n    ASSERT( v.grow_by( init_range, init_range + (Harness::array_length( init_range )) ) == v.begin(), \"grow_by(I,I) returned a wrong iterator.\" );\n    ASSERT( std::equal( v.begin(), v.end(), init_range ), \"grow_by(I,I) did not properly copied all elements ?\" );\n    test_grow_by_empty_range( v, init_range );\n    test_grow_by_empty_range( v, (int*)NULL );\n}\n\n//TODO: move this to more appropriate place, smth like test_harness.cpp\nvoid TestArrayLength(){\n    int five_element_array[5] = {0};\n    ASSERT(Harness::array_length(five_element_array)==5,\"array_length failed to determine length of non empty non dynamic array\");\n}\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include \"test_initializer_list.h\"\n\nstruct test_grow_by {\n    template<typename container_type, typename element_type>\n    static void do_test( std::initializer_list<element_type> const& il, container_type const& expected ) {\n        container_type vd;\n        vd.grow_by( il );\n        ASSERT( vd == expected, \"grow_by with an initializer list failed\" );\n    }\n};\n\nvoid TestInitList() {\n    REMARK( \"testing initializer_list methods \\n\" );\n    using namespace initializer_list_support_tests;\n    TestInitListSupport<tbb::concurrent_vector<char>, test_grow_by>( { 1, 2, 3, 4, 5 } );\n    TestInitListSupport<tbb::concurrent_vector<int>, test_grow_by>( {} );\n}\n#endif //if __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_RANGE_BASED_FOR_PRESENT\n#include \"test_range_based_for.h\"\n\nvoid TestRangeBasedFor(){\n    using namespace range_based_for_support_tests;\n\n    REMARK(\"testing range based for loop compatibility \\n\");\n    typedef tbb::concurrent_vector<int> c_vector;\n    c_vector a_c_vector;\n\n    const int sequence_length = 100;\n    for (int i =1; i<= sequence_length; ++i){\n        a_c_vector.push_back(i);\n    }\n\n    ASSERT( range_based_for_accumulate(a_c_vector, std::plus<int>(), 0) == gauss_summ_of_int_sequence(sequence_length), \"incorrect accumulated value generated via range based for ?\");\n}\n#endif //if __TBB_RANGE_BASED_FOR_PRESENT\n\n#if TBB_USE_EXCEPTIONS\n#endif //TBB_USE_EXCEPTIONS\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nnamespace move_semantics_helpers{\n    struct move_only_type:NoCopy{\n        const int* my_pointer;\n        move_only_type(move_only_type && other): my_pointer(other.my_pointer){other.my_pointer=NULL;}\n        explicit move_only_type(const int* value): my_pointer(value) {}\n    };\n}\n\nvoid TestPushBackMoveOnlyContainee(){\n    using namespace move_semantics_helpers;\n    typedef tbb::concurrent_vector<move_only_type > vector_t;\n    vector_t v;\n    static const int magic_number =7;\n    move_only_type src(&magic_number);\n    v.push_back(std::move(src));\n    ASSERT(v[0].my_pointer == &magic_number,\"item was incorrectly moved during push_back?\");\n    ASSERT(src.my_pointer == NULL,\"item was incorrectly moved during push_back?\");\n}\n\nnamespace emplace_helpers{\n    struct wrapper_type:NoCopy{\n        int value1;\n        int value2;\n        explicit wrapper_type(int v1, int v2) : value1 (v1), value2(v2) {}\n        friend bool operator==(const wrapper_type& lhs, const wrapper_type& rhs){\n            return (lhs.value1 == rhs.value1) && (lhs.value2 == rhs.value2 );\n        }\n    };\n}\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n//TODO: extend the test to number of types e.g. std::string\nvoid TestEmplaceBack(){\n    using namespace emplace_helpers;\n    typedef tbb::concurrent_vector<wrapper_type > vector_t;\n    vector_t v;\n    v.emplace_back(1,2);\n    ASSERT(v[0] == wrapper_type(1,2),\"incorrectly in-place constructed item during emplace_back?\");\n}\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n//! Test the assignment operator and swap\nvoid TestAssign() {\n    typedef tbb::concurrent_vector<FooWithAssign, local_counting_allocator<std::allocator<FooWithAssign>, size_t > > vector_t;\n    local_counting_allocator<std::allocator<FooWithAssign>, size_t > init_alloc;\n    init_alloc.allocations = 100;\n    for( int dst_size=1; dst_size<=128; NextSize( dst_size ) ) {\n        for( int src_size=2; src_size<=128; NextSize( src_size ) ) {\n            vector_t u(FooIterator(0), FooIterator(src_size), init_alloc);\n            for( int i=0; i<src_size; ++i )\n                ASSERT( u[i].bar()==i, NULL );\n            vector_t v(dst_size, FooWithAssign(), init_alloc);\n            for( int i=0; i<dst_size; ++i ) {\n                ASSERT( v[i].state==Foo::CopyInitialized, NULL );\n                v[i].bar() = ~i;\n            }\n            ASSERT( v != u, NULL);\n            v.swap(u);\n            CheckVector(u, dst_size, src_size);\n            u.swap(v);\n            // using assignment\n            v = u;\n            ASSERT( v == u, NULL);\n            u.clear();\n            ASSERT( u.size()==0, NULL );\n            ASSERT( v.size()==size_t(src_size), NULL );\n            for( int i=0; i<src_size; ++i )\n                ASSERT( v[i].bar()==i, NULL );\n            ASSERT( 0 == u.get_allocator().frees, NULL);\n            u.shrink_to_fit(); // deallocate unused memory\n            size_t items_allocated = u.get_allocator().items_allocated,\n                   items_freed = u.get_allocator().items_freed;\n            size_t allocations = u.get_allocator().allocations,\n                   frees = u.get_allocator().frees + 100;\n            ASSERT( items_allocated == items_freed, NULL);\n            ASSERT( allocations == frees, NULL);\n        }\n    }\n}\n\nstruct c_vector_type : default_container_traits {\n    template<typename element_type, typename allocator_type>\n    struct apply{\n        typedef tbb::concurrent_vector<element_type,  allocator_type > type;\n    };\n\n    typedef FooIterator init_iterator_type;\n    enum{ expected_number_of_items_to_allocate_for_steal_move = 0 };\n\n    template<typename element_type, typename allocator_type, typename iterator>\n    static bool equal(tbb::concurrent_vector<element_type, allocator_type > const& c, iterator begin, iterator end){\n        bool equal_sizes = (size_t)std::distance(begin, end) == c.size();\n        return  equal_sizes && std::equal(c.begin(), c.end(), begin);\n    }\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nvoid TestSerialGrowByWithMoveIterators(){\n    typedef default_stateful_fixture_make_helper<c_vector_type>::type fixture_t;\n    typedef fixture_t::container_t vector_t;\n\n    fixture_t fixture(\"TestSerialGrowByWithMoveIterators\");\n\n    vector_t dst(fixture.dst_allocator);\n    dst.grow_by(std::make_move_iterator(fixture.source.begin()), std::make_move_iterator(fixture.source.end()));\n\n    fixture.verify_content_deep_moved(dst);\n}\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\nnamespace test_move_in_shrink_to_fit_helpers {\n    struct dummy : Harness::StateTrackable<>{\n        int i;\n        dummy(int an_i) __TBB_NOEXCEPT(true) : Harness::StateTrackable<>(0), i(an_i) {}\n#if !__TBB_IMPLICIT_MOVE_PRESENT || __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN\n        dummy(const dummy &src) __TBB_NOEXCEPT(true) : Harness::StateTrackable<>(src), i(src.i) {}\n        dummy(dummy &&src) __TBB_NOEXCEPT(true) : Harness::StateTrackable<>(std::move(src)), i(src.i) {}\n\n        dummy& operator=(dummy &&src) __TBB_NOEXCEPT(true) {\n            Harness::StateTrackable<>::operator=(std::move(src));\n            i = src.i;\n            return *this;\n        }\n\n        //somehow magically this declaration make std::is_nothrow_move_constructible<pod>::value to works correctly on icc14+msvc2013\n        ~dummy() __TBB_NOEXCEPT(true) {}\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT || __TBB_NOTHROW_MOVE_MEMBERS_IMPLICIT_GENERATION_BROKEN\n        friend bool operator== (const dummy &lhs, const dummy &rhs){ return lhs.i == rhs.i; }\n    };\n}\nvoid TestSerialMoveInShrinkToFit(){\n    const char* test_name = \"TestSerialMoveInShrinkToFit\";\n    REMARK(\"running %s \\n\", test_name);\n    using test_move_in_shrink_to_fit_helpers::dummy;\n\n    __TBB_STATIC_ASSERT(std::is_nothrow_move_constructible<dummy>::value,\"incorrect test setup or broken configuration?\");\n    {\n        dummy src(0);\n        ASSERT_IN_TEST(is_state<Harness::StateTrackableBase::MoveInitialized>(dummy(std::move_if_noexcept(src))),\"broken configuration ?\", test_name);\n    }\n    static const size_t sequence_size = 15;\n    typedef  tbb::concurrent_vector<dummy> c_vector_t;\n    std::vector<dummy> source(sequence_size, 0);\n    std::generate_n(source.begin(), source.size(), std::rand);\n\n    c_vector_t c_vector;\n    c_vector.reserve(1); //make it fragmented\n\n    c_vector.assign(source.begin(), source.end());\n    memory_locations c_vector_before_shrink(c_vector);\n    c_vector.shrink_to_fit();\n\n    ASSERT_IN_TEST(c_vector_before_shrink.content_location_changed(c_vector), \"incorrect test setup? shrink_to_fit should cause moving elements to other memory locations while it is not\", test_name);\n    ASSERT_IN_TEST(all_of(c_vector, is_state_f<Harness::StateTrackableBase::MoveInitialized>()), \"container did not move construct some elements?\", test_name);\n    ASSERT_IN_TEST(c_vector == c_vector_t(source.begin(),source.end()),\"\",test_name);\n}\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n#include <string>\n\n// Test the comparison operators\nvoid TestComparison() {\n    std::string str[3]; str[0] = \"abc\";\n    str[1].assign(\"cba\");\n    str[2].assign(\"abc\"); // same as 0th\n    tbb::concurrent_vector<char> var[3];\n    var[0].assign(str[0].begin(), str[0].end());\n    var[1].assign(str[0].rbegin(), str[0].rend());\n    var[2].assign(var[1].rbegin(), var[1].rend()); // same as 0th\n    for (int i = 0; i < 3; ++i) {\n        for (int j = 0; j < 3; ++j) {\n            ASSERT( (var[i] == var[j]) == (str[i] == str[j]), NULL );\n            ASSERT( (var[i] != var[j]) == (str[i] != str[j]), NULL );\n            ASSERT( (var[i] < var[j]) == (str[i] < str[j]), NULL );\n            ASSERT( (var[i] > var[j]) == (str[i] > str[j]), NULL );\n            ASSERT( (var[i] <= var[j]) == (str[i] <= str[j]), NULL );\n            ASSERT( (var[i] >= var[j]) == (str[i] >= str[j]), NULL );\n        }\n    }\n}\n\n//------------------------------------------------------------------------\n// Regression test for problem where on oversubscription caused\n// concurrent_vector::grow_by to run very slowly (TR#196).\n//------------------------------------------------------------------------\n\n#include \"tbb/task_scheduler_init.h\"\n#include <math.h>\n\ntypedef unsigned long Number;\n\nstatic tbb::concurrent_vector<Number> Primes;\n\nclass FindPrimes {\n    bool is_prime( Number val ) const {\n        int limit, factor = 3;\n        if( val<5u )\n            return val==2;\n        else {\n            limit = long(sqrtf(float(val))+0.5f);\n            while( factor<=limit && val % factor )\n                ++factor;\n            return factor>limit;\n        }\n    }\npublic:\n    void operator()( const tbb::blocked_range<Number>& r ) const {\n        for( Number i=r.begin(); i!=r.end(); ++i ) {\n            if( i%2 && is_prime(i) ) {\n                Primes.push_back( i );\n            }\n        }\n    }\n};\n\ndouble TimeFindPrimes( int nthread ) {\n    Primes.clear();\n    Primes.reserve(1000000);// TODO: or compact()?\n    tbb::task_scheduler_init init(nthread);\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for( tbb::blocked_range<Number>(0,1000000,500), FindPrimes() );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    return (t1-t0).seconds();\n}\n\nvoid TestFindPrimes() {\n    // Time fully subscribed run.\n    double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );\n\n    // Time parallel run that is very likely oversubscribed.\n    double t128 = TimeFindPrimes(128);\n    REMARK(\"TestFindPrimes: t2==%g t128=%g k=%g\\n\", t2, t128, t128/t2);\n\n    // We allow the 128-thread run a little extra time to allow for thread overhead.\n    // Theoretically, following test will fail on machine with >128 processors.\n    // But that situation is not going to come up in the near future,\n    // and the generalization to fix the issue is not worth the trouble.\n    if( t128 > 1.3*t2 ) {\n        REPORT(\"Warning: grow_by is pathetically slow: t2==%g t128=%g k=%g\\n\", t2, t128, t128/t2);\n    }\n}\n\n//------------------------------------------------------------------------\n// Test compatibility with STL sort.\n//------------------------------------------------------------------------\n\n#include <algorithm>\n\nvoid TestSort() {\n    for( int n=0; n<100; n=n*3+1 ) {\n        tbb::concurrent_vector<int> array(n);\n        for( int i=0; i<n; ++i )\n            array.at(i) = (i*7)%n;\n        std::sort( array.begin(), array.end() );\n        for( int i=0; i<n; ++i )\n            ASSERT( array[i]==i, NULL );\n    }\n}\n\n#if TBB_USE_EXCEPTIONS\n\ntemplate<typename c_vector>\nsize_t get_early_size(c_vector & v){\n      return v.grow_by(0) - v.begin();\n}\n\nvoid verify_c_vector_size(size_t size, size_t capacity, size_t early_size, const char * const test_name){\n    ASSERT_IN_TEST( size <= capacity, \"\", test_name);\n    ASSERT_IN_TEST( early_size >= size, \"\", test_name);\n}\n\ntemplate<typename c_vector_t>\nvoid verify_c_vector_size(c_vector_t & c_v, const char * const test_name){\n    verify_c_vector_size(c_v.size(), c_v.capacity(), get_early_size(c_v), test_name);\n}\n\nvoid verify_c_vector_capacity_is_below(size_t capacity, size_t high, const char * const test_name){\n    ASSERT_IN_TEST(capacity > 0, \"unexpected capacity\", test_name);\n    ASSERT_IN_TEST(capacity < high, \"unexpected capacity\", test_name);\n}\n\ntemplate<typename vector_t>\nvoid verify_last_segment_allocation_failed(vector_t const& victim, const char* const test_name){\n    ASSERT_THROWS_IN_TEST(victim.at(victim.size()), std::range_error, \"\",test_name );\n}\n\ntemplate<typename vector_t>\nvoid verify_assignment_operator_throws_bad_last_alloc(vector_t & victim, const char* const test_name){\n    vector_t copy_of_victim(victim, victim.get_allocator());\n    ASSERT_THROWS_IN_TEST(victim = copy_of_victim, tbb::bad_last_alloc, \"\", test_name);\n}\n\ntemplate<typename vector_t>\nvoid verify_copy_and_assign_from_produce_the_same(vector_t const& victim, const char* const test_name){\n    //TODO: remove explicit copy of allocator when full support of C++11 allocator_traits in concurrent_vector is present\n    vector_t copy_of_victim(victim, victim.get_allocator());\n    ASSERT_IN_TEST(copy_of_victim == victim, \"copy doesn't match original\", test_name);\n    vector_t copy_of_victim2(10, victim[0], victim.get_allocator());\n    copy_of_victim2 = victim;\n    ASSERT_IN_TEST(copy_of_victim == copy_of_victim2, \"assignment doesn't match copying\", test_name);\n}\n\ntemplate<typename allocator_t>\nvoid verify_vector_partially_copied(\n        tbb::concurrent_vector<FooWithAssign, allocator_t> const& victim, size_t planned_victim_size,\n        tbb::concurrent_vector<FooWithAssign, allocator_t> const& src,  bool is_memory_allocation_failure ,const char* const test_name)\n{\n    if (is_memory_allocation_failure) { // allocator generated exception\n        typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;\n        ASSERT_IN_TEST( victim == vector_t(src.begin(), src.begin() + victim.size(), src.get_allocator()), \"failed to properly copy of source ?\", test_name );\n    }else{\n        ASSERT_IN_TEST( std::equal(victim.begin(), victim.begin() + planned_victim_size, src.begin()), \"failed to properly copy items before the exception?\", test_name );\n        ASSERT_IN_TEST( ::all_of( victim.begin() + planned_victim_size, victim.end(), is_state_f<Foo::ZeroInitialized>() ), \"failed to zero-initialize items left not constructed after the exception?\", test_name );\n    }\n}\n\n//------------------------------------------------------------------------\n// Test exceptions safety (from allocator and items constructors)\n//------------------------------------------------------------------------\nvoid TestExceptions() {\n    typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;\n    typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;\n\n    enum methods {\n        zero_method = 0,\n        ctor_copy, ctor_size, assign_nt, assign_ir, reserve, compact,\n        all_methods\n    };\n    ASSERT( !FooCount, NULL );\n\n    try {\n        vector_t src(FooIterator(0), FooIterator(N)); // original data\n\n        for(int t = 0; t < 2; ++t) // exception type\n        for(int m = zero_method+1; m < all_methods; ++m)\n        {\n            track_foo_count<__LINE__> check_all_foo_destroyed_on_exit(\"TestExceptions\");\n            track_allocator_memory<allocator_t> verify_no_leak_at_exit(\"TestExceptions\");\n            allocator_t::init_counters();\n            if(t) MaxFooCount = FooCount + N/4;\n            else allocator_t::set_limits(N/4);\n            vector_t victim;\n            try {\n                switch(m) {\n                case ctor_copy: {\n                        vector_t acopy(src);\n                    } break; // auto destruction after exception is checked by ~Foo\n                case ctor_size: {\n                        vector_t sized(N);\n                    } break; // auto destruction after exception is checked by ~Foo\n                // Do not test assignment constructor due to reusing of same methods as below\n                case assign_nt: {\n                        victim.assign(N, FooWithAssign());\n                    } break;\n                case assign_ir: {\n                        victim.assign(FooIterator(0), FooIterator(N));\n                    } break;\n                case reserve: {\n                        try {\n                            victim.reserve(victim.max_size()+1);\n                        } catch(std::length_error &) {\n                        } catch(...) {\n                            KNOWN_ISSUE(\"ERROR: unrecognized exception - known compiler issue\\n\");\n                        }\n                        victim.reserve(N);\n                    } break;\n                case compact: {\n                        if(t) MaxFooCount = 0; else allocator_t::set_limits(); // reset limits\n                        victim.reserve(2); victim = src; // fragmented assignment\n                        if(t) MaxFooCount = FooCount + 10; else allocator_t::set_limits(1, false); // block any allocation, check NULL return from allocator\n                        victim.shrink_to_fit(); // should start defragmenting first segment\n                    } break;\n                default:;\n                }\n                if(!t || m != reserve) ASSERT(false, \"should throw an exception\");\n            } catch(std::bad_alloc &e) {\n                allocator_t::set_limits(); MaxFooCount = 0;\n                size_t capacity = victim.capacity();\n                size_t size = victim.size();\n\n                size_t req_size = get_early_size(victim);\n\n                verify_c_vector_size(size, capacity, req_size, \"TestExceptions\");\n\n                switch(m) {\n                case reserve:\n                    if(t) ASSERT(false, NULL);\n                    /* Falls through. */\n                case assign_nt:\n                case assign_ir:\n                    if(!t) {\n                        ASSERT(capacity < N/2, \"unexpected capacity\");\n                        ASSERT(size == 0, \"unexpected size\");\n                        break;\n                    } else {\n                        ASSERT(size == N, \"unexpected size\");\n                        ASSERT(capacity >= N, \"unexpected capacity\");\n                        int i;\n                        for(i = 1; ; ++i)\n                            if(!victim[i].zero_bar()) break;\n                            else ASSERT(victim[i].bar() == (m == assign_ir? i : initial_value_of_bar), NULL);\n                        for(; size_t(i) < size; ++i) ASSERT(!victim[i].zero_bar(), NULL);\n                        ASSERT(size_t(i) == size, NULL);\n                        break;\n                    }\n                case compact:\n                    ASSERT(capacity > 0, \"unexpected capacity\");\n                    ASSERT(victim == src, \"shrink_to_fit() is broken\");\n                    break;\n\n                default:; // nothing to check here\n                }\n                REMARK(\"Exception %d: %s\\t- ok\\n\", m, e.what());\n            }\n        }\n    } catch(...) {\n        ASSERT(false, \"unexpected exception\");\n    }\n}\n\n//TODO: split into two separate tests\n//TODO: remove code duplication in exception safety tests\nvoid TestExceptionSafetyGuaranteesForAssignOperator(){\n    //TODO: use __FUNCTION__ for test name\n    const char* const test_name = \"TestExceptionSafetyGuaranteesForAssignOperator\";\n    typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;\n    typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;\n\n    track_foo_count<__LINE__> check_all_foo_destroyed_on_exit(test_name);\n    track_allocator_memory<allocator_t> verify_no_leak_at_exit(test_name);\n\n    vector_t src(FooIterator(0), FooIterator(N)); // original data\n\n    const size_t planned_victim_size = N/4;\n\n    for(int t = 0; t < 2; ++t) {// exception type\n        vector_t victim;\n        victim.reserve(2); // get fragmented assignment\n\n        ASSERT_THROWS_IN_TEST(\n            {\n                limit_foo_count_in_scope foo_limit(FooCount + planned_victim_size, t);\n                limit_allocated_items_in_scope<allocator_t> allocator_limit(allocator_t::items_allocated + planned_victim_size, !t);\n\n                victim = src; // fragmented assignment\n            },\n            std::bad_alloc, \"\", test_name\n        );\n\n        verify_c_vector_size(victim, test_name);\n\n        if(!t) {\n            verify_c_vector_capacity_is_below(victim.capacity(), N, test_name);\n        }\n\n        verify_vector_partially_copied(victim, planned_victim_size, src, !t, test_name);\n        verify_last_segment_allocation_failed(victim, test_name);\n        verify_copy_and_assign_from_produce_the_same(victim, test_name);\n        verify_assignment_operator_throws_bad_last_alloc(victim, test_name);\n    }\n}\n//TODO: split into two separate tests\nvoid TestExceptionSafetyGuaranteesForConcurrentGrow(){\n    const char* const test_name = \"TestExceptionSafetyGuaranteesForConcurrentGrow\";\n    typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;\n    typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;\n\n    track_foo_count<__LINE__> check_all_foo_destroyed_on_exit(test_name);\n    track_allocator_memory<allocator_t> verify_no_leak_at_exit(test_name);\n\n    vector_t src(FooIterator(0), FooIterator(N)); // original data\n\n    const size_t planned_victim_size = N/4;\n    static const int grain_size = 70;\n\n    tbb::task_scheduler_init init(2);\n\n    for(int t = 0; t < 2; ++t) {// exception type\n        vector_t victim;\n\n#if TBB_USE_CAPTURED_EXCEPTION\n        #define EXPECTED_EXCEPTION    tbb::captured_exception\n#else\n        #define EXPECTED_EXCEPTION    std::bad_alloc\n#endif\n\n        ASSERT_THROWS_IN_TEST(\n            {\n                limit_foo_count_in_scope foo_limit(FooCount +  31, t); // these numbers help to reproduce the live lock for versions < TBB2.2\n                limit_allocated_items_in_scope<allocator_t> allocator_limit(allocator_t::items_allocated + planned_victim_size, !t);\n\n                grain_map m(concurrent_grow_single_range_map, Harness::end(concurrent_grow_single_range_map));\n\n                static const size_t part_weight =  grain_size / m.total_number_of_parts;\n\n                tbb::parallel_for(\n                        tbb::blocked_range<size_t>(0, N, grain_size),\n                        GrowBy<vector_t>(victim, m, part_weight)\n                );\n            },\n            EXPECTED_EXCEPTION, \"\", test_name\n        );\n\n        verify_c_vector_size(victim, test_name);\n\n        if(!t) {\n            verify_c_vector_capacity_is_below(victim.capacity(), N, test_name);\n        }\n\n        for(int i = 0; ; ++i) {\n            try {\n                Foo &foo = victim.at(i);\n                ASSERT( foo.is_valid_or_zero(),\"\" );\n            } catch(std::range_error &) { // skip broken segment\n                ASSERT( size_t(i) < get_early_size(victim), NULL );\n            } catch(std::out_of_range &){\n                ASSERT( i > 0, NULL ); break;\n            } catch(...) {\n                KNOWN_ISSUE(\"ERROR: unrecognized exception - known compiler issue\\n\"); break;\n            }\n        }\n\n        verify_copy_and_assign_from_produce_the_same(victim, test_name);\n    }\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nvoid TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorMemoryFailure(){\n    const char* const test_name = \"TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorMemoryFailure\";\n\n    //TODO: add ability to inject debug_allocator into stateful_allocator_fixture::allocator_t\n    //typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;\n    typedef default_stateful_fixture_make_helper<c_vector_type, Harness::false_type>::type fixture_t;\n    typedef arena_allocator_fixture<FooWithAssign, Harness::false_type> arena_allocator_fixture_t;\n    typedef fixture_t::allocator_t allocator_t;\n    typedef fixture_t::container_t vector_t;\n\n    fixture_t fixture(test_name);\n    arena_allocator_fixture_t arena_allocator_fixture(4 * fixture.container_size);\n\n    const size_t allocation_limit = fixture.container_size/4;\n\n    vector_t victim(arena_allocator_fixture.allocator);\n    victim.reserve(2); // get fragmented assignment\n\n    ASSERT_THROWS_IN_TEST(\n        {\n            limit_allocated_items_in_scope<allocator_t> allocator_limit(allocator_t::items_allocated + allocation_limit);\n            victim = std::move(fixture.source); // fragmented assignment\n        },\n        std::bad_alloc, \"\", test_name\n    );\n\n    verify_c_vector_size(victim, test_name);\n    verify_c_vector_capacity_is_below(victim.capacity(), allocation_limit + 2, test_name);\n\n    fixture.verify_part_of_content_deep_moved(victim, victim.size());\n\n    verify_last_segment_allocation_failed(victim, test_name);\n    verify_copy_and_assign_from_produce_the_same(victim, test_name);\n    verify_assignment_operator_throws_bad_last_alloc(victim, test_name);\n}\n\nvoid TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorExceptionInElementCtor(){\n    const char* const test_name = \"TestExceptionSafetyGuaranteesForMoveAssignOperator\";\n    //typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;\n    typedef default_stateful_fixture_make_helper<c_vector_type, Harness::false_type>::type fixture_t;\n    typedef arena_allocator_fixture<FooWithAssign, Harness::false_type> arena_allocator_fixture_t;\n    typedef fixture_t::container_t vector_t;\n\n    fixture_t fixture(test_name);\n    const size_t planned_victim_size = fixture.container_size/4;\n    arena_allocator_fixture_t arena_allocator_fixture(4 * fixture.container_size);\n\n    vector_t victim(arena_allocator_fixture.allocator);\n    victim.reserve(2); // get fragmented assignment\n\n    ASSERT_THROWS_IN_TEST(\n        {\n            limit_foo_count_in_scope foo_limit(FooCount + planned_victim_size);\n            victim = std::move(fixture.source); // fragmented assignment\n        },\n        std::bad_alloc, \"\", test_name\n    );\n\n    verify_c_vector_size(victim, test_name);\n\n    fixture.verify_part_of_content_deep_moved(victim, planned_victim_size);\n\n    verify_last_segment_allocation_failed(victim, test_name);\n    verify_copy_and_assign_from_produce_the_same(victim, test_name);\n    verify_assignment_operator_throws_bad_last_alloc(victim, test_name);\n}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\nnamespace push_back_exception_safety_helpers{\n    //TODO: remove code duplication with emplace_helpers::wrapper_type\n    struct throwing_foo:Foo{\n        int value1;\n        int value2;\n        explicit throwing_foo(int v1, int v2) : value1 (v1), value2(v2) {        }\n    };\n\n    template< typename foo_t = throwing_foo>\n    struct fixture{\n        typedef tbb::concurrent_vector<foo_t, debug_allocator<foo_t> > vector_t;\n        vector_t v;\n\n        void test( void(*p_test)(vector_t&), const char * test_name){\n            track_foo_count<__LINE__> verify_no_foo_leaked_during_exception(test_name);\n            ASSERT_IN_TEST(v.empty(),\"incorrect test setup?\", test_name );\n            ASSERT_THROWS_IN_TEST(p_test(v), Foo_exception ,\"\", test_name);\n            ASSERT_IN_TEST(is_state<Foo::ZeroInitialized>(v[0]),\"incorrectly filled item during exception in emplace_back?\", test_name);\n        }\n    };\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nvoid TestPushBackMoveExceptionSafety(){\n    typedef push_back_exception_safety_helpers::fixture<Foo> fixture_t;\n    fixture_t t;\n\n    limit_foo_count_in_scope foo_limit(FooCount + 1);\n\n    struct test{\n        static void test_move_push_back(fixture_t::vector_t& v){\n            Foo f;\n            v.push_back(std::move(f));\n        }\n    };\n    t.test(&test::test_move_push_back, \"TestPushBackMoveExceptionSafety\");\n}\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\nvoid TestEmplaceBackExceptionSafety(){\n    typedef push_back_exception_safety_helpers::fixture<> fixture_t;\n    fixture_t t;\n\n    Foo dummy; //make FooCount non zero;\n    Harness::suppress_unused_warning(dummy);\n    limit_foo_count_in_scope foo_limit(FooCount);\n\n    struct test{\n        static void test_emplace(fixture_t::vector_t& v){\n            v.emplace_back(1,2);\n        }\n    };\n    t.test(&test::test_emplace, \"TestEmplaceBackExceptionSafety\");\n}\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n#endif /* TBB_USE_EXCEPTIONS */\n\n//------------------------------------------------------------------------\n// Test support for SIMD instructions\n//------------------------------------------------------------------------\n#include \"harness_m128.h\"\n\n#if HAVE_m128 || HAVE_m256\n\ntemplate<typename ClassWithVectorType>\nvoid TestVectorTypes() {\n    tbb::concurrent_vector<ClassWithVectorType> v;\n    for( int i=0; i<100; ++i ) {\n        // VC8 does not properly align a temporary value; to work around, use explicit variable\n        ClassWithVectorType foo(i);\n        v.push_back(foo);\n        for( int j=0; j<i; ++j ) {\n            ClassWithVectorType bar(j);\n            ASSERT( v[j]==bar, NULL );\n        }\n    }\n}\n#endif /* HAVE_m128 | HAVE_m256 */\n\n//------------------------------------------------------------------------\n\nnamespace v3_backward_compatibility{\n    namespace segment_t_layout_helpers{\n        //this is previous definition of according inner class of concurrent_vector_base_v3\n        struct segment_t_v3 {\n            void* array;\n        };\n        //helper class to access protected members of concurrent_vector_base\n        struct access_vector_fields :tbb::internal::concurrent_vector_base_v3 {\n            using tbb::internal::concurrent_vector_base_v3::segment_t;\n            using tbb::internal::concurrent_vector_base_v3::segment_index_t;\n            using tbb::internal::concurrent_vector_base_v3::pointers_per_long_table;\n            using tbb::internal::concurrent_vector_base_v3::internal_segments_table;\n        };\n        //this is previous definition of according inner class of concurrent_vector_base_v3\n        struct internal_segments_table_v3 {\n            access_vector_fields::segment_index_t first_block;\n            segment_t_v3 table[access_vector_fields::pointers_per_long_table];\n        };\n\n        template <typename checked_type>\n        struct alignment_check_helper{\n            char dummy;\n            checked_type checked;\n        };\n    }\n    void TestSegmentTLayout(){\n        using namespace segment_t_layout_helpers;\n        typedef alignment_check_helper<segment_t_v3> structure_with_old_segment_type;\n        typedef alignment_check_helper<access_vector_fields::segment_t> structure_with_new_segment_type;\n\n        ASSERT((sizeof(structure_with_old_segment_type)==sizeof(structure_with_new_segment_type))\n              ,\"layout of new segment_t and old one differ?\");\n    }\n\n    void TestInternalSegmentsTableLayout(){\n        using namespace segment_t_layout_helpers;\n        typedef alignment_check_helper<internal_segments_table_v3> structure_with_old_segment_table_type;\n        typedef alignment_check_helper<access_vector_fields::internal_segments_table> structure_with_new_segment_table_type;\n\n        ASSERT((sizeof(structure_with_old_segment_table_type)==sizeof(structure_with_new_segment_table_type))\n              ,\"layout of new internal_segments_table and old one differ?\");\n    }\n}\nvoid TestV3BackwardCompatibility(){\n    using namespace v3_backward_compatibility;\n    TestSegmentTLayout();\n    TestInternalSegmentsTableLayout();\n}\n\n#include \"harness_defs.h\"\n\n#include <vector>\n#include <numeric>\n#include <functional>\n\n// The helper to run a test only when a default construction is present.\ntemplate <bool default_construction_present> struct do_default_construction_test {\n    template<typename FuncType> void operator() ( FuncType func ) const { func(); }\n};\ntemplate <> struct do_default_construction_test<false> {\n    template<typename FuncType> void operator()( FuncType ) const {}\n};\n\ntemplate <typename Type, typename Allocator>\nclass test_grow_by_and_resize : NoAssign {\n    tbb::concurrent_vector<Type, Allocator> &my_c;\npublic:\n    test_grow_by_and_resize( tbb::concurrent_vector<Type, Allocator> &c ) : my_c(c) {}\n    void operator()() const {\n        const typename tbb::concurrent_vector<Type, Allocator>::size_type sz = my_c.size();\n        my_c.grow_by( 5 );\n        ASSERT( my_c.size() == sz + 5, NULL );\n        my_c.resize( sz );\n        ASSERT( my_c.size() == sz, NULL );\n    }\n};\n\ntemplate <typename Type, typename Allocator>\nvoid CompareVectors( const tbb::concurrent_vector<Type, Allocator> &c1, const tbb::concurrent_vector<Type, Allocator> &c2 ) {\n    ASSERT( !(c1 == c2) && c1 != c2, NULL );\n    ASSERT( c1 <= c2 && c1 < c2 && c2 >= c1 && c2 > c1, NULL );\n}\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\ntemplate <typename Type, typename Allocator>\nvoid CompareVectors( const tbb::concurrent_vector<std::weak_ptr<Type>, Allocator> &, const tbb::concurrent_vector<std::weak_ptr<Type>, Allocator> & ) {\n    /* do nothing for std::weak_ptr */\n}\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n\ntemplate <bool default_construction_present, typename Type, typename Allocator>\nvoid Examine( tbb::concurrent_vector<Type, Allocator> c, const std::vector<Type> &vec ) {\n    typedef tbb::concurrent_vector<Type, Allocator> vector_t;\n    typedef typename vector_t::size_type size_type_t;\n\n    ASSERT( c.size() == vec.size(), NULL );\n    for ( size_type_t i=0; i<c.size(); ++i ) ASSERT( Harness::IsEqual()(c[i], vec[i]), NULL );\n    do_default_construction_test<default_construction_present>()(test_grow_by_and_resize<Type,Allocator>(c));\n    c.grow_by( size_type_t(5), c[0] );\n    c.grow_to_at_least( c.size()+5, c.at(0) );\n    vector_t c2;\n    c2.reserve( 5 );\n    std::copy( c.begin(), c.begin() + 5, std::back_inserter( c2 ) );\n\n    c.grow_by( c2.begin(), c2.end() );\n    const vector_t& cvcr = c;\n    ASSERT( Harness::IsEqual()(cvcr.front(), *(c2.rend()-1)), NULL );\n    ASSERT( Harness::IsEqual()(cvcr.back(), *c2.rbegin()), NULL);\n    ASSERT( Harness::IsEqual()(*c.cbegin(), *(c.crend()-1)), NULL );\n    ASSERT( Harness::IsEqual()(*(c.cend()-1), *c.crbegin()), NULL );\n    c.swap( c2 );\n    ASSERT( c.size() == 5, NULL );\n    CompareVectors( c, c2 );\n    c.swap( c2 );\n    c2.clear();\n    ASSERT( c2.size() == 0, NULL );\n    c2.shrink_to_fit();\n    Allocator a = c.get_allocator();\n    a.deallocate( a.allocate(1), 1 );\n}\n\ntemplate <typename Type>\nclass test_default_construction : NoAssign {\n    const std::vector<Type> &my_vec;\npublic:\n    test_default_construction( const std::vector<Type> &vec ) : my_vec(vec) {}\n    void operator()() const {\n        // Construction with initial size specified by argument n.\n        tbb::concurrent_vector<Type> c7( my_vec.size() );\n        std::copy( my_vec.begin(), my_vec.end(), c7.begin() );\n        Examine</*default_construction_present = */true>( c7, my_vec );\n        tbb::concurrent_vector< Type, debug_allocator<Type> > c8( my_vec.size() );\n        std::copy( c7.begin(), c7.end(), c8.begin() );\n        Examine</*default_construction_present = */true>( c8, my_vec );\n    }\n};\n\ntemplate <bool default_construction_present, typename Type>\nvoid TypeTester( const std::vector<Type> &vec ) {\n    __TBB_ASSERT( vec.size() >= 5, \"Array should have at least 5 elements\" );\n    // Construct empty vector.\n    tbb::concurrent_vector<Type> c1;\n    std::copy( vec.begin(), vec.end(), std::back_inserter(c1) );\n    Examine<default_construction_present>( c1, vec );\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    // Constructor from initializer_list.\n    tbb::concurrent_vector<Type> c2({vec[0],vec[1],vec[2]});\n    std::copy( vec.begin()+3, vec.end(), std::back_inserter(c2) );\n    Examine<default_construction_present>( c2, vec );\n#endif\n    // Copying constructor.\n    tbb::concurrent_vector<Type> c3(c1);\n    Examine<default_construction_present>( c3, vec );\n    // Construct with non-default allocator\n    tbb::concurrent_vector< Type, debug_allocator<Type> > c4;\n    std::copy( vec.begin(), vec.end(), std::back_inserter(c4) );\n    Examine<default_construction_present>( c4, vec );\n    // Copying constructor for vector with different allocator type.\n    tbb::concurrent_vector<Type> c5(c4);\n    Examine<default_construction_present>( c5, vec );\n    tbb::concurrent_vector< Type, debug_allocator<Type> > c6(c3);\n    Examine<default_construction_present>( c6, vec );\n    // Construction with initial size specified by argument n.\n    do_default_construction_test<default_construction_present>()(test_default_construction<Type>(vec));\n    // Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance.\n    debug_allocator<Type> allocator;\n    tbb::concurrent_vector< Type, debug_allocator<Type> > c9(vec.size(), vec[1], allocator);\n    Examine<default_construction_present>( c9, std::vector<Type>(vec.size(), vec[1]) );\n    // Construction with copying iteration range and given allocator instance.\n    tbb::concurrent_vector< Type, debug_allocator<Type> > c10(c1.begin(), c1.end(), allocator);\n    Examine<default_construction_present>( c10, vec );\n    tbb::concurrent_vector<Type> c11(vec.begin(), vec.end());\n    Examine<default_construction_present>( c11, vec );\n}\n\nvoid TestTypes() {\n    const int NUMBER = 100;\n\n    std::vector<int> intArr;\n    for ( int i=0; i<NUMBER; ++i ) intArr.push_back(i);\n    TypeTester</*default_construction_present = */true>( intArr );\n\n#if __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN\n    std::vector< std::reference_wrapper<int> > refArr;\n    // The constructor of std::reference_wrapper<T> from T& is explicit in some versions of libstdc++.\n    for ( int i=0; i<NUMBER; ++i ) refArr.push_back( std::reference_wrapper<int>(intArr[i]) );\n    TypeTester</*default_construction_present = */false>( refArr );\n#else\n    REPORT( \"Known issue: C++11 reference wrapper tests are skipped.\\n\" );\n#endif /* __TBB_CPP11_REFERENCE_WRAPPER_PRESENT && !__TBB_REFERENCE_WRAPPER_COMPILATION_BROKEN */\n\n    std::vector< tbb::atomic<int> > tbbIntArr( NUMBER );\n    for ( int i=0; i<NUMBER; ++i ) tbbIntArr[i] = i;\n    TypeTester</*default_construction_present = */true>( tbbIntArr );\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT\n    std::vector< std::shared_ptr<int> > shrPtrArr;\n    for ( int i=0; i<NUMBER; ++i ) shrPtrArr.push_back( std::make_shared<int>(i) );\n    TypeTester</*default_construction_present = */true>( shrPtrArr );\n\n    std::vector< std::weak_ptr<int> > wkPtrArr;\n    std::copy( shrPtrArr.begin(), shrPtrArr.end(), std::back_inserter(wkPtrArr) );\n    TypeTester</*default_construction_present = */true>( wkPtrArr );\n#else\n    REPORT( \"Known issue: C++11 smart pointer tests are skipped.\\n\" );\n#endif /* __TBB_CPP11_SMART_POINTERS_PRESENT */\n}\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"ERROR: MinThread=%d, but must be at least 1\\n\",MinThread); MinThread = 1;\n    }\n    TestFoo();\n    TestV3BackwardCompatibility();\n    TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();\n    TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();\n    TestArrayLength();\n    TestAllOf();\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    TestInitList();\n#else\n    REPORT(\"Known issue: initializer list tests are skipped.\\n\");\n#endif\n    TestSequentialFor<FooWithAssign> ();\n    TestResizeAndCopy();\n    TestAssign();\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestMoveConstructor<c_vector_type>();\n    TestMoveAssignOperator<c_vector_type>();\n    TestConstructorWithMoveIterators<c_vector_type>();\n    TestAssignWithMoveIterators<c_vector_type>();\n    TestSerialGrowByWithMoveIterators();\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n    TestSerialMoveInShrinkToFit();\n#endif // __TBB_MOVE_IF_NOEXCEPT_PRESENT\n#else\n    REPORT(\"Known issue: tests for vector move constructor/assignment operator are skipped.\\n\");\n#endif\n    TestGrowToAtLeastWithSourceParameter<tbb::concurrent_vector<int> >(12345);\n    TestSerialGrowByRange(false);\n    TestSerialGrowByRange(true);\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestPushBackMoveOnlyContainee();\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    TestEmplaceBack();\n#endif  //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif  //__TBB_CPP11_RVALUE_REF_PRESENT\n#if HAVE_m128\n    TestVectorTypes<ClassWithSSE>();\n#endif\n#if HAVE_m256\n    if (have_AVX()) TestVectorTypes<ClassWithAVX>();\n#endif\n    TestCapacity();\n    ASSERT( !FooCount, NULL );\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        tbb::task_scheduler_init init( nthread );\n        TestParallelFor( nthread );\n        TestConcurrentGrowToAtLeast();\n        TestConcurrentGrowBy( nthread );\n    }\n    ASSERT( !FooCount, NULL );\n    TestComparison();\n    TestFindPrimes();\n    TestSort();\n#if __TBB_RANGE_BASED_FOR_PRESENT\n    TestRangeBasedFor();\n#endif //if __TBB_RANGE_BASED_FOR_PRESENT\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception safety test is skipped.\\n\");\n#elif TBB_USE_EXCEPTIONS\n    TestExceptions();\n    TestExceptionSafetyGuaranteesForAssignOperator();\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure<c_vector_type>();\n    TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor<c_vector_type>();\n    TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorMemoryFailure();\n    TestExceptionSafetyGuaranteesForMoveAssignOperatorWithUnEqualAllocatorExceptionInElementCtor();\n    TestPushBackMoveExceptionSafety();\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    TestEmplaceBackExceptionSafety();\n#endif /*__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#else\n    REPORT(\"Known issue: exception safety tests for move constructor/assignment operator , grow_by are skipped.\\n\");\n#endif /*__TBB_CPP11_RVALUE_REF_PRESENT */\n#endif /* TBB_USE_EXCEPTIONS */\n    TestTypes();\n    ASSERT( !FooCount, NULL );\n    REMARK(\"sizeof(concurrent_vector<int>) == %d\\n\", (int)sizeof(tbb::concurrent_vector<int>));\n    return Harness::Done;\n}\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4800 is back\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_condition_variable.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/compat/condition_variable\"\n#include \"tbb/mutex.h\"\n#include \"tbb/recursive_mutex.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/atomic.h\"\n\n#include <stdexcept>\n\n#include \"harness.h\"\n\n#if TBB_IMPLEMENT_CPP0X\n// This test deliberately avoids a \"using tbb\" statement,\n// so that the error of putting types in the wrong namespace will be caught.\nusing namespace std;\n#else\nusing namespace tbb::interface5;\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename M>\nvoid TestUniqueLockMoveConstructorAndAssignOp(){\n    typedef unique_lock<M> unique_lock_t;\n\n    static const bool locked = true;\n    static const bool unlocked = false;\n\n    struct Locked{\n        bool value;\n        Locked(bool a_value) : value(a_value) {}\n    };\n\n    typedef Locked destination;\n    typedef Locked source;\n\n    struct MutexAndLockFixture{\n        M mutex;\n        unique_lock_t lock;\n        const bool was_locked;\n\n        MutexAndLockFixture(source lckd_src) : lock(mutex), was_locked(lckd_src.value){\n            if (!lckd_src.value) lock.unlock();\n            ASSERT(was_locked == lock.owns_lock(), \"unlock did not release the mutex while should?\");\n        }\n    };\n\n    struct TestCases{\n        const char* filename;\n        int line;\n\n        TestCases(const char* a_filename, int a_line) : filename(a_filename), line(a_line) {}\n\n        void TestMoveConstructor(source locked_src){\n            MutexAndLockFixture src(locked_src);\n            unique_lock_t dst_lock(std::move(src.lock));\n            AssertOwnershipWasTransfered(dst_lock, src.lock, src.was_locked, &src.mutex);\n        }\n\n        void TestMoveAssignment(source locked_src, destination locked_dest){\n            MutexAndLockFixture src(locked_src);\n            MutexAndLockFixture dst(locked_dest);\n\n            dst.lock = std::move(src.lock);\n            ASSERT_CUSTOM(unique_lock_t(dst.mutex, try_to_lock).owns_lock(), \"unique_lock should release owned mutex on assignment\", filename, line);\n            AssertOwnershipWasTransfered(dst.lock, src.lock, src.was_locked, &src.mutex);\n        }\n\n        void AssertOwnershipWasTransfered(unique_lock_t const& dest_lock, unique_lock_t const& src_lck, const bool was_locked, const M* mutex) {\n            ASSERT_CUSTOM(dest_lock.owns_lock() == was_locked, \"moved to lock object should have the same state as source before move\", filename, line);\n            ASSERT_CUSTOM(dest_lock.mutex() == mutex, \"moved to lock object should have the same state as source before move\", filename, line);\n            ASSERT_CUSTOM(src_lck.owns_lock() == false, \"moved from lock object must not left locked\", filename, line);\n            ASSERT_CUSTOM(src_lck.mutex() == NULL, \"moved from lock object must not has mutex\", filename, line);\n        }\n    };\n//TODO: to rework this with an assertion binder\n#define AT_LOCATION() TestCases( __FILE__, __LINE__) \\\n\n        AT_LOCATION().TestMoveConstructor(source(locked));\n        AT_LOCATION().TestMoveAssignment (source(locked), destination(locked));\n        AT_LOCATION().TestMoveAssignment (source(locked), destination(unlocked));\n        AT_LOCATION().TestMoveConstructor(source(unlocked));\n        AT_LOCATION().TestMoveAssignment (source(unlocked), destination(locked));\n        AT_LOCATION().TestMoveAssignment (source(unlocked), destination(unlocked));\n\n#undef AT_LOCATION\n\n}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\ntemplate<typename M>\nstruct Counter {\n    typedef M mutex_type;\n    M mutex;\n    volatile long value;\n    void flog_once_lock_guard( size_t mode );\n    void flog_once_unique_lock( size_t mode );\n};\n\ntemplate<typename M>\nvoid Counter<M>::flog_once_lock_guard(size_t mode)\n/** Increments counter once for each iteration in the iteration space. */\n{\n    if( mode&1 ) {\n        // Try acquire and release with implicit lock_guard\n        // precondition: if mutex_type is not a recursive mutex, the calling thread does not own the mutex m.\n        // if the precondition is not met, either dead-lock incorrect 'value' would result in.\n        lock_guard<M> lg(mutex);\n        value = value+1;\n    } else {\n        // Try acquire and release with adopt lock_quard\n        // precodition: the calling thread owns the mutex m.\n        // if the precondition is not met, incorrect 'value' would result in because the thread unlocks\n        // mutex that it does not own.\n        mutex.lock();\n        lock_guard<M> lg( mutex, adopt_lock );\n        value = value+1;\n    }\n}\n\ntemplate<typename M>\nvoid Counter<M>::flog_once_unique_lock(size_t mode)\n/** Increments counter once for each iteration in the iteration space. */\n{\n    switch( mode&7 ) {\n    case 0:\n        {// implicitly acquire and release mutex with unique_lock\n          unique_lock<M> ul( mutex );\n          value = value+1;\n          ASSERT( ul==true, NULL );\n        }\n        break;\n    case 1:\n        {// unique_lock with defer_lock\n          unique_lock<M> ul( mutex, defer_lock );\n          ASSERT( ul.owns_lock()==false, NULL );\n          ul.lock();\n          value = value+1;\n          ASSERT( ul.owns_lock()==true, NULL );\n        }\n        break;\n    case 2:\n        {// unique_lock::try_lock() with try_to_lock\n          unique_lock<M> ul( mutex, try_to_lock );\n          if( !ul )\n              while( !ul.try_lock() )\n                  __TBB_Yield();\n          value = value+1;\n        }\n        break;\n    case 3:\n        {// unique_lock::try_lock_for() with try_to_lock\n          unique_lock<M> ul( mutex, defer_lock );\n          tbb::tick_count::interval_t i(1.0);\n          while( !ul.try_lock_for( i ) )\n              ;\n          value = value+1;\n          ASSERT( ul.owns_lock()==true, NULL );\n        }\n        break;\n    case 4:\n        {\n          unique_lock<M> ul_o4;\n          {// unique_lock with adopt_lock\n            mutex.lock();\n            unique_lock<M> ul( mutex, adopt_lock );\n            value = value+1;\n            ASSERT( ul.owns_lock()==true, NULL );\n            ASSERT( ul.mutex()==&mutex, NULL );\n            ASSERT( ul_o4.owns_lock()==false, NULL );\n            ASSERT( ul_o4.mutex()==NULL, NULL );\n            swap( ul, ul_o4 );\n            ASSERT( ul.owns_lock()==false, NULL );\n            ASSERT( ul.mutex()==NULL, NULL );\n            ASSERT( ul_o4.owns_lock()==true, NULL );\n            ASSERT( ul_o4.mutex()==&mutex, NULL );\n            ul_o4.unlock();\n          }\n          ASSERT( ul_o4.owns_lock()==false, NULL );\n        }\n        break;\n    case 5:\n        {\n          unique_lock<M> ul_o5;\n          {// unique_lock with adopt_lock\n            mutex.lock();\n            unique_lock<M> ul( mutex, adopt_lock );\n            value = value+1;\n            ASSERT( ul.owns_lock()==true, NULL );\n            ASSERT( ul.mutex()==&mutex, NULL );\n            ASSERT( ul_o5.owns_lock()==false, NULL );\n            ASSERT( ul_o5.mutex()==NULL, NULL );\n            ul_o5.swap( ul );\n            ASSERT( ul.owns_lock()==false, NULL );\n            ASSERT( ul.mutex()==NULL, NULL );\n            ASSERT( ul_o5.owns_lock()==true, NULL );\n            ASSERT( ul_o5.mutex()==&mutex, NULL );\n            ul_o5.unlock();\n          }\n          ASSERT( ul_o5.owns_lock()==false, NULL );\n        }\n        break;\n    default:\n        {// unique_lock with adopt_lock, and release()\n          mutex.lock();\n          unique_lock<M> ul( mutex, adopt_lock );\n          ASSERT( ul==true, NULL );\n          value = value+1;\n          M* old_m = ul.release();\n          old_m->unlock();\n          ASSERT( ul.owns_lock()==false, NULL );\n        }\n        break;\n    }\n}\n\nstatic tbb::atomic<size_t> Order;\n\ntemplate<typename State, long TestSize>\nstruct WorkForLocks: NoAssign {\n    static const size_t chunk = 100;\n    State& state;\n    WorkForLocks( State& state_ ) : state(state_) {}\n    void operator()( int ) const {\n        size_t step;\n        while( (step=Order.fetch_and_add<tbb::acquire>(chunk))<TestSize ) {\n            for( size_t i=0; i<chunk && step<TestSize; ++i, ++step ) {\n                state.flog_once_lock_guard(step);\n                state.flog_once_unique_lock(step);\n            }\n        }\n    }\n};\n\ntemplate<typename M>\nvoid TestLocks( const char* name, int nthread ) {\n    REMARK(\"testing %s in TestLocks\\n\",name);\n    Counter<M> counter;\n    counter.value = 0;\n    Order = 0;\n    // use the macro because of a gcc 4.6 bug\n#define TEST_SIZE 100000\n    NativeParallelFor( nthread, WorkForLocks<Counter<M>, TEST_SIZE>(counter) );\n\n    if( counter.value!=2*TEST_SIZE )\n        REPORT(\"ERROR for %s in TestLocks: counter.value=%ld != 2 * %ld=test_size\\n\",name,counter.value,TEST_SIZE);\n#undef TEST_SIZE\n}\n\nstatic tbb::atomic<int> barrier;\n\n// Test if the constructor works and if native_handle() works\ntemplate<typename M>\nstruct WorkForCondVarCtor: NoAssign {\n    condition_variable& my_cv;\n    M& my_mtx;\n    WorkForCondVarCtor( condition_variable& cv_, M& mtx_ ) : my_cv(cv_), my_mtx(mtx_) {}\n    void operator()( int tid ) const {\n        ASSERT( tid<=1, NULL ); // test with 2 threads.\n        condition_variable::native_handle_type handle = my_cv.native_handle();\n        if( tid&1 ) {\n            my_mtx.lock();\n            ++barrier;\n#if _WIN32||_WIN64\n            if( !tbb::interface5::internal::internal_condition_variable_wait( *handle, &my_mtx ) ) {\n                int ec = GetLastError();\n                ASSERT( ec!=WAIT_TIMEOUT, NULL );\n                throw_exception( tbb::internal::eid_condvar_wait_failed );\n            }\n#else\n            if( pthread_cond_wait( handle, my_mtx.native_handle() ) )\n                throw_exception( tbb::internal::eid_condvar_wait_failed );\n#endif\n            ++barrier;\n            my_mtx.unlock();\n        } else {\n            bool res;\n            while( (res=my_mtx.try_lock())==true && barrier==0 ) {\n                my_mtx.unlock();\n                __TBB_Yield();\n            }\n            if( res ) my_mtx.unlock();\n            do {\n#if _WIN32||_WIN64\n                tbb::interface5::internal::internal_condition_variable_notify_one( *handle );\n#else\n                pthread_cond_signal( handle );\n#endif\n                __TBB_Yield();\n            } while ( barrier<2 );\n        }\n    }\n};\n\nstatic condition_variable* test_cv;\nstatic tbb::atomic<int> n_waiters;\n\n// Test if the destructor works\ntemplate<typename M>\nstruct WorkForCondVarDtor: NoAssign {\n    int nthread;\n    M& my_mtx;\n    WorkForCondVarDtor( int n, M& mtx_ ) : nthread(n), my_mtx(mtx_) {}\n    void operator()( int tid ) const {\n        if( tid==0 ) {\n            unique_lock<M> ul( my_mtx, defer_lock );\n            test_cv = new condition_variable;\n\n            while( n_waiters<nthread-1 )\n                __TBB_Yield();\n            ul.lock();\n            test_cv->notify_all();\n            ul.unlock();\n            while( n_waiters>0 )\n                __TBB_Yield();\n            delete test_cv;\n        } else {\n            while( test_cv==NULL )\n                __TBB_Yield();\n            unique_lock<M> ul(my_mtx);\n            ++n_waiters;\n            test_cv->wait( ul );\n            --n_waiters;\n        }\n    }\n};\n\nstatic const int max_ticket  = 100;\nstatic const int short_delay = 10;\nstatic const int long_delay  = 100;\n\ntbb::atomic<int> n_signaled;\ntbb::atomic<int> n_done, n_done_1, n_done_2;\ntbb::atomic<int> n_timed_out;\n\nstatic bool false_to_true;\n\nstruct TestPredicateFalseToTrue {\n    TestPredicateFalseToTrue() {}\n    bool operator()() { return false_to_true; }\n};\n\nstruct TestPredicateFalse {\n    TestPredicateFalse() {}\n    bool operator()() { return false; }\n};\n\nstruct TestPredicateTrue {\n    TestPredicateTrue() {}\n    bool operator()() { return true; }\n};\n\n// Test timed wait and timed wait with pred\ntemplate<typename M>\nstruct WorkForCondVarTimedWait: NoAssign {\n    int nthread;\n    condition_variable& test_cv;\n    M& my_mtx;\n    WorkForCondVarTimedWait( int n_, condition_variable& cv_, M& mtx_ ) : nthread(n_), test_cv(cv_), my_mtx(mtx_) {}\n    void operator()( int tid ) const {\n        tbb::tick_count t1, t2;\n\n        unique_lock<M> ul( my_mtx, defer_lock );\n\n        ASSERT( n_timed_out==0, NULL );\n        ++barrier;\n        while( barrier<nthread ) __TBB_Yield();\n\n        // test if a thread times out with wait_for()\n        for( int i=1; i<10; ++i ) {\n            tbb::tick_count::interval_t intv((double)i*0.0999 /*seconds*/);\n            ul.lock();\n            cv_status st = no_timeout;\n            __TBB_TRY {\n                /** Some version of glibc return EINVAL instead 0 when spurious wakeup occurs on pthread_cond_timedwait() **/\n                st = test_cv.wait_for( ul, intv );\n            } __TBB_CATCH( std::runtime_error& ) {}\n            ASSERT( ul, \"mutex should have been reacquired\" );\n            ul.unlock();\n            if( st==timeout )\n                ++n_timed_out;\n        }\n\n        ASSERT( n_timed_out>0, \"should have been timed-out at least once\\n\" );\n        ++n_done_1;\n        while( n_done_1<nthread ) __TBB_Yield();\n\n        for( int i=1; i<10; ++i ) {\n            tbb::tick_count::interval_t intv((double)i*0.0001 /*seconds*/);\n            ul.lock();\n            __TBB_TRY {\n                /** Some version of glibc return EINVAL instead 0 when spurious wakeup occurs on pthread_cond_timedwait() **/\n                ASSERT( false==test_cv.wait_for( ul, intv, TestPredicateFalse()), \"incorrect return value\" );\n            } __TBB_CATCH( std::runtime_error& ) {}\n            ASSERT( ul, \"mutex should have been reacquired\" );\n            ul.unlock();\n        }\n\n        if( tid==0 )\n            n_waiters = 0;\n        // barrier\n        ++n_done_2;\n        while( n_done_2<nthread ) __TBB_Yield();\n\n        // at this point, we know wait_for() successfully times out.\n        // so test if a thread blocked on wait_for() could receive a signal before its waiting time elapses.\n        if( tid==0 ) {\n            // signaler\n            n_signaled = 0;\n            ASSERT( n_waiters==0, NULL );\n            ++n_done_2; // open gate 1\n\n            while( n_waiters<(nthread-1) ) __TBB_Yield(); // wait until all other threads block on cv. flag_1\n\n            ul.lock();\n            test_cv.notify_all();\n            n_waiters = 0;\n            ul.unlock();\n\n            while( n_done_2<2*nthread ) __TBB_Yield();\n            ASSERT( n_signaled>0, \"too small an interval?\" );\n            n_signaled = 0;\n\n        } else {\n            while( n_done_2<nthread+1 ) __TBB_Yield(); // gate 1\n\n            // sleeper\n            tbb::tick_count::interval_t intv((double)2.0 /*seconds*/);\n            ul.lock();\n            ++n_waiters; // raise flag 1/(nthread-1)\n            t1 = tbb::tick_count::now();\n            cv_status st = test_cv.wait_for( ul, intv ); // gate 2\n            t2 = tbb::tick_count::now();\n            ul.unlock();\n            if( st==no_timeout ) {\n                ++n_signaled;\n                ASSERT( (t2-t1).seconds()<intv.seconds(), \"got a signal after timed-out?\" );\n            }\n        }\n\n        ASSERT( n_done==0, NULL );\n        ++n_done_2;\n\n        if( tid==0 ) {\n            ASSERT( n_waiters==0, NULL );\n            ++n_done; // open gate 3\n\n            while( n_waiters<(nthread-1) ) __TBB_Yield(); // wait until all other threads block on cv.\n            for( int i=0; i<2*short_delay; ++i ) __TBB_Yield();  // give some time to waiters so that all of them in the waitq\n            ul.lock();\n            false_to_true = true;\n            test_cv.notify_all(); // open gate 4\n            ul.unlock();\n\n            while( n_done<nthread ) __TBB_Yield(); // wait until all other threads wake up.\n            ASSERT( n_signaled>0, \"too small an interval?\" );\n        } else {\n\n            while( n_done<1 ) __TBB_Yield(); // gate 3\n\n            tbb::tick_count::interval_t intv((double)2.0 /*seconds*/);\n            ul.lock();\n            ++n_waiters;\n            // wait_for w/ predciate\n            t1 = tbb::tick_count::now();\n            ASSERT( test_cv.wait_for( ul, intv, TestPredicateFalseToTrue())==true, NULL ); // gate 4\n            t2 = tbb::tick_count::now();\n            ul.unlock();\n            if( (t2-t1).seconds()<intv.seconds() )\n                ++n_signaled;\n            ++n_done;\n        }\n    }\n};\n\ntbb::atomic<int> ticket_for_sleep, ticket_for_wakeup, signaled_ticket, wokeup_ticket;\ntbb::atomic<unsigned> n_visit_to_waitq;\nunsigned max_waitq_length;\n\ntemplate<typename M>\nstruct WorkForCondVarWaitAndNotifyOne: NoAssign {\n    int nthread;\n    condition_variable& test_cv;\n    M& my_mtx;\n    WorkForCondVarWaitAndNotifyOne( int n_, condition_variable& cv_, M& mtx_ ) : nthread(n_), test_cv(cv_), my_mtx(mtx_) {}\n    void operator()( int tid ) const {\n        if( tid&1 ) {\n            // exercise signal part\n            while( ticket_for_wakeup<max_ticket ) {\n                int my_ticket = ++ticket_for_wakeup; // atomically grab the next ticket\n                if( my_ticket>max_ticket )\n                    break;\n\n                for( ;; ) {\n                    unique_lock<M> ul( my_mtx, defer_lock );\n                    ul.lock();\n                    if( n_waiters>0 && my_ticket<=ticket_for_sleep && my_ticket==(wokeup_ticket+1) ) {\n                        signaled_ticket = my_ticket;\n                        test_cv.notify_one();\n                        ++n_signaled;\n                        ul.unlock();\n                        break;\n                    }\n                    ul.unlock();\n                    __TBB_Yield();\n                }\n\n                // give waiters time to go to sleep.\n                for( int m=0; m<short_delay; ++m )\n                    __TBB_Yield();\n            }\n        } else {\n            while( ticket_for_sleep<max_ticket ) {\n                unique_lock<M> ul( my_mtx, defer_lock );\n                ul.lock();\n                // exercise wait part\n                int my_ticket = ++ticket_for_sleep; // grab my ticket\n                if( my_ticket>max_ticket ) break;\n\n                // each waiter should go to sleep at least once\n                unsigned nw = ++n_waiters;\n                for( ;; ) {\n                    // update to max_waitq_length\n                    if( nw>max_waitq_length ) max_waitq_length = nw;\n                    ++n_visit_to_waitq;\n                    test_cv.wait( ul );\n                    // if( ret==false ) ++n_timedout;\n                    ASSERT( ul, \"mutex should have been locked\" );\n                    --n_waiters;\n                    if( signaled_ticket==my_ticket ) {\n                        wokeup_ticket = my_ticket;\n                        break;\n                    }\n                    if( n_waiters>0 )\n                        test_cv.notify_one();\n                    nw = ++n_waiters; // update to max_waitq_length occurs above\n                }\n\n                ul.unlock();\n                __TBB_Yield(); // give other threads chance to run.\n            }\n        }\n        ++n_done;\n        spin_wait_until_eq( n_done, nthread );\n        ASSERT( n_signaled==max_ticket, \"incorrect number of notifications sent\" );\n    }\n};\n\nstruct TestPredicate1 {\n    int target;\n    TestPredicate1( int i_ ) : target(i_) {}\n    bool operator()( ) { return signaled_ticket==target; }\n};\n\ntemplate<typename M>\nstruct WorkForCondVarWaitPredAndNotifyAll: NoAssign {\n    int nthread;\n    condition_variable& test_cv;\n    M& my_mtx;\n    int multiple;\n    WorkForCondVarWaitPredAndNotifyAll( int n_, condition_variable& cv_, M& mtx_, int m_ ) :\n        nthread(n_), test_cv(cv_), my_mtx(mtx_), multiple(m_) {}\n    void operator()( int tid ) const {\n        if( tid&1 ) {\n            while( ticket_for_sleep<max_ticket ) {\n                unique_lock<M> ul( my_mtx, defer_lock );\n                // exercise wait part\n                int my_ticket = ++ticket_for_sleep; // grab my ticket\n                if( my_ticket>max_ticket )\n                    break;\n\n                ul.lock();\n                ++n_visit_to_waitq;\n                unsigned nw = ++n_waiters;\n                if( nw>max_waitq_length ) max_waitq_length = nw;\n                test_cv.wait( ul, TestPredicate1( my_ticket ) );\n                wokeup_ticket = my_ticket;\n                --n_waiters;\n                ASSERT( ul, \"mutex should have been locked\" );\n                ul.unlock();\n\n                __TBB_Yield(); // give other threads chance to run.\n            }\n        } else {\n            // exercise signal part\n            while( ticket_for_wakeup<max_ticket ) {\n                int my_ticket = ++ticket_for_wakeup; // atomically grab the next ticket\n                if( my_ticket>max_ticket )\n                    break;\n\n                for( ;; ) {\n                    unique_lock<M> ul( my_mtx );\n                    if( n_waiters>0 && my_ticket<=ticket_for_sleep && my_ticket==(wokeup_ticket+1) ) {\n                        signaled_ticket = my_ticket;\n                        test_cv.notify_all();\n                        ++n_signaled;\n                        ul.unlock();\n                        break;\n                    }\n                    ul.unlock();\n                    __TBB_Yield();\n                }\n\n                // give waiters time to go to sleep.\n                for( int m=0; m<long_delay*multiple; ++m )\n                    __TBB_Yield();\n            }\n        }\n        ++n_done;\n        spin_wait_until_eq( n_done, nthread );\n        ASSERT( n_signaled==max_ticket, \"incorrect number of notifications sent\" );\n    }\n};\n\nvoid InitGlobalCounters()\n{\n      ticket_for_sleep = ticket_for_wakeup = signaled_ticket = wokeup_ticket = 0;\n      n_waiters = 0;\n      n_signaled = 0;\n      n_done = n_done_1 = n_done_2 = 0;\n      n_visit_to_waitq = 0;\n      n_timed_out = 0;\n}\n\ntemplate<typename M>\nvoid TestConditionVariable( const char* name, int nthread )\n{\n    REMARK(\"testing %s in TestConditionVariable\\n\",name);\n    Counter<M> counter;\n    M mtx;\n\n    ASSERT( nthread>1, \"at least two threads are needed for testing condition_variable\" );\n    REMARK(\" - constructor\\n\" );\n    // Test constructor.\n    {\n      condition_variable cv1;\n#if _WIN32||_WIN64\n      condition_variable::native_handle_type handle = cv1.native_handle();\n      ASSERT( uintptr_t(&handle->cv_event)==uintptr_t(&handle->cv_native), NULL );\n#endif\n      M mtx1;\n      barrier = 0;\n      NativeParallelFor( 2, WorkForCondVarCtor<M>( cv1, mtx1 ) );\n    }\n\n    REMARK(\" - destructor\\n\" );\n    // Test destructor.\n    {\n      M mtx2;\n      test_cv = NULL;\n      n_waiters = 0;\n      NativeParallelFor( nthread, WorkForCondVarDtor<M>( nthread, mtx2 ) );\n    }\n\n    REMARK(\" - timed_wait (i.e., wait_for)\\n\");\n    // Test timed wait.\n    {\n      condition_variable cv_tw;\n      M mtx_tw;\n      barrier = 0;\n      InitGlobalCounters();\n      int nthr = nthread>4?4:nthread;\n      NativeParallelFor( nthr, WorkForCondVarTimedWait<M>( nthr, cv_tw, mtx_tw ) );\n    }\n\n    REMARK(\" - wait with notify_one\\n\");\n    // Test wait and notify_one\n    do {\n        condition_variable cv3;\n        M mtx3;\n        InitGlobalCounters();\n        NativeParallelFor( nthread, WorkForCondVarWaitAndNotifyOne<M>( nthread, cv3, mtx3 ) );\n    } while( n_visit_to_waitq==0 || max_waitq_length==0 );\n\n    REMARK(\" - predicated wait with notify_all\\n\");\n    // Test wait_pred and notify_all\n    int delay_multiple = 1;\n    do {\n        condition_variable cv4;\n        M mtx4;\n        InitGlobalCounters();\n        NativeParallelFor( nthread, WorkForCondVarWaitPredAndNotifyAll<M>( nthread, cv4, mtx4, delay_multiple ) );\n        if( max_waitq_length<unsigned(nthread/2) )\n            ++delay_multiple;\n    } while( n_visit_to_waitq<=0 || max_waitq_length<unsigned(nthread/2) );\n}\n\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\nstatic tbb::atomic<int> err_count;\n\n#define TRY_AND_CATCH_RUNTIME_ERROR(op,msg) \\\n        try {                             \\\n            op;                           \\\n            ++err_count;                  \\\n        } catch( std::runtime_error& e ) {ASSERT( strstr(e.what(), msg) , NULL );} catch(...) {++err_count;}\n\ntemplate<typename M>\nvoid TestUniqueLockException( const char * name ) {\n    REMARK(\"testing %s TestUniqueLockException\\n\",name);\n    M mtx;\n    unique_lock<M> ul_0;\n    err_count = 0;\n\n    TRY_AND_CATCH_RUNTIME_ERROR( ul_0.lock(), \"Operation not permitted\" );\n    TRY_AND_CATCH_RUNTIME_ERROR( ul_0.try_lock(), \"Operation not permitted\" );\n\n    unique_lock<M> ul_1( mtx );\n\n    TRY_AND_CATCH_RUNTIME_ERROR( ul_1.lock(), \"Resource deadlock\" );\n    TRY_AND_CATCH_RUNTIME_ERROR( ul_1.try_lock(), \"Resource deadlock\" );\n\n    ul_1.unlock();\n    TRY_AND_CATCH_RUNTIME_ERROR( ul_1.unlock(), \"Operation not permitted\" );\n\n    ASSERT( !err_count, \"Some exceptions are not thrown or incorrect ones are thrown\" );\n}\n\ntemplate<typename M>\nvoid TestConditionVariableException( const char * name ) {\n    REMARK(\"testing %s in TestConditionVariableException; yet to be implemented\\n\",name);\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\ntemplate<typename Mutex, typename RecursiveMutex>\nvoid DoCondVarTest()\n{\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestUniqueLockMoveConstructorAndAssignOp<Mutex>();\n    TestUniqueLockMoveConstructorAndAssignOp<RecursiveMutex>();\n#endif\n\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK( \"testing with %d threads\\n\", p );\n        TestLocks<Mutex>( \"mutex\", p );\n        TestLocks<RecursiveMutex>( \"recursive_mutex\", p );\n\n        if( p<=1 ) continue;\n\n        // for testing condition_variable, at least one sleeper and one notifier are needed\n        TestConditionVariable<Mutex>( \"mutex\", p );\n    }\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#elif TBB_USE_EXCEPTIONS\n    TestUniqueLockException<Mutex>( \"mutex\" );\n    TestUniqueLockException<RecursiveMutex>( \"recursive_mutex\" );\n    TestConditionVariableException<Mutex>( \"mutex\" );\n#endif /* TBB_USE_EXCEPTIONS */\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_container_move_support.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_test_container_move_support_H\n#define __TBB_test_container_move_support_H\n\n#include \"harness.h\"\n#include \"harness_assert.h\"\n#include \"harness_allocator.h\"\n#include \"harness_state_trackable.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/aligned_space.h\"\n#include <stdexcept>\n#include <string>\n#include <functional>\n\ntbb::atomic<size_t> FooCount;\nsize_t MaxFooCount = 0;\n\n//! Exception for concurrent_container\nclass Foo_exception : public std::bad_alloc {\npublic:\n    virtual const char *what() const throw() __TBB_override { return \"out of Foo limit\"; }\n    virtual ~Foo_exception() throw() {}\n};\n\nstruct FooLimit {\n    FooLimit(){\n        if(MaxFooCount && FooCount >= MaxFooCount)\n            __TBB_THROW( Foo_exception() );\n    }\n};\n\nstatic const intptr_t initial_value_of_bar = 42;\n\n\nstruct Foo : FooLimit, Harness::StateTrackable<true>{\n    typedef Harness::StateTrackable<true> StateTrackable;\n    intptr_t my_bar;\npublic:\n    bool is_valid_or_zero() const{\n        return is_valid()||(state==ZeroInitialized && !my_bar);\n    }\n    intptr_t& zero_bar(){\n        ASSERT( is_valid_or_zero(), NULL );\n        return my_bar;\n    }\n    intptr_t zero_bar() const{\n        ASSERT( is_valid_or_zero(), NULL );\n        return my_bar;\n    }\n    intptr_t& bar(){\n        ASSERT( is_valid(), NULL );\n        return my_bar;\n    }\n    intptr_t bar() const{\n        ASSERT( is_valid(), NULL );\n        return my_bar;\n    }\n    operator intptr_t() const{\n        return this->bar();\n    }\n    Foo( intptr_t barr ): StateTrackable(0){\n        my_bar = barr;\n        FooCount++;\n    }\n    Foo(){\n        my_bar = initial_value_of_bar;\n        FooCount++;\n    }\n    Foo( const Foo& foo ): FooLimit(), StateTrackable(foo){\n        my_bar = foo.my_bar;\n        FooCount++;\n    }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    Foo( Foo&& foo ): FooLimit(), StateTrackable(std::move(foo)){\n        my_bar = foo.my_bar;\n        //TODO: consider not using constant here, instead something like ~my_bar\n        foo.my_bar = -1;\n        FooCount++;\n    }\n#endif\n    ~Foo(){\n        my_bar = ~initial_value_of_bar;\n        if(state != ZeroInitialized) --FooCount;\n    }\n    friend bool operator==(const int &lhs, const Foo &rhs) {\n        ASSERT( rhs.is_valid_or_zero(), \"comparing invalid objects ?\" );\n        return lhs == rhs.my_bar;\n    }\n    friend bool operator==(const Foo &lhs, const int &rhs) {\n        ASSERT( lhs.is_valid_or_zero(),   \"comparing invalid objects ?\" );\n        return lhs.my_bar == rhs;\n    }\n    friend bool operator==(const Foo &lhs, const Foo &rhs) {\n        ASSERT( lhs.is_valid_or_zero(),   \"comparing invalid objects ?\" );\n        ASSERT( rhs.is_valid_or_zero(), \"comparing invalid objects ?\" );\n        return lhs.my_bar == rhs.my_bar;\n    }\n    friend bool operator<(const Foo &lhs, const Foo &rhs) {\n        ASSERT( lhs.is_valid_or_zero(),   \"comparing invalid objects ?\" );\n        ASSERT( rhs.is_valid_or_zero(), \"comparing invalid objects ?\" );\n        return lhs.my_bar < rhs.my_bar;\n    }\n    bool is_const() const {return true;}\n    bool is_const() {return false;}\nprotected:\n    char reserve[1];\n    Foo& operator=( const Foo& x ) {\n        StateTrackable::operator=(x);\n        my_bar = x.my_bar;\n        return *this;\n    }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    Foo& operator=( Foo&& x ) {\n        ASSERT( x.is_valid_or_zero(), \"bad source for assignment\" );\n        ASSERT( is_valid_or_zero(), NULL );\n        StateTrackable::operator=(std::move(x));\n        my_bar = x.my_bar;\n        x.my_bar = -1;\n        return *this;\n    }\n#endif\n};\n\nstruct FooWithAssign: public Foo {\n    FooWithAssign()                         : Foo(){}\n    FooWithAssign(intptr_t barr)            : Foo(barr){}\n    FooWithAssign(FooWithAssign const& f) : Foo(f) {}\n    FooWithAssign& operator=(FooWithAssign const& f) { return  static_cast<FooWithAssign&>(Foo::operator=(f)); }\n\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    FooWithAssign(FooWithAssign && f)       : Foo(std::move(f)) {}\n    FooWithAssign& operator=(FooWithAssign && f) { return  static_cast<FooWithAssign&>(Foo::operator=(std::move(f))); }\n#endif\n};\n\ntemplate<typename FooIteratorType>\nclass FooIteratorBase {\nprotected:\n    intptr_t x_bar;\nprivate:\n    FooIteratorType& as_derived(){ return *static_cast<FooIteratorType*>(this);}\npublic:\n    FooIteratorBase(intptr_t x) {\n        x_bar = x;\n    }\n    FooIteratorType &operator++() {\n        x_bar++; return as_derived();\n    }\n    FooIteratorType operator++(int) {\n        FooIteratorType tmp(as_derived()); x_bar++; return tmp;\n    }\n    friend bool operator==(const FooIteratorType & lhs, const FooIteratorType & rhs){ return lhs.x_bar == rhs.x_bar; }\n    friend bool operator!=(const FooIteratorType & lhs, const FooIteratorType & rhs){ return !(lhs == rhs); }\n};\n\nclass FooIterator: public std::iterator<std::input_iterator_tag,FooWithAssign>, public FooIteratorBase<FooIterator> {\npublic:\n    FooIterator(intptr_t x): FooIteratorBase<FooIterator>(x) {}\n\n    FooWithAssign operator*() {\n        return FooWithAssign(x_bar);\n    }\n};\n\nclass FooPairIterator: public std::iterator<std::input_iterator_tag, std::pair<FooWithAssign,FooWithAssign> >,  public FooIteratorBase<FooPairIterator> {\npublic:\n    FooPairIterator(intptr_t x): FooIteratorBase<FooPairIterator>(x) {}\n\n    std::pair<FooWithAssign,FooWithAssign> operator*() {\n        FooWithAssign foo; foo.bar() = x_bar;\n\n        return std::make_pair(foo, foo);\n    }\n};\n\nnamespace FooTests{\n    template<typename Foo_type>\n    void TestDefaultConstructor(){\n        Foo_type src;\n        ASSERT(src.state == Foo::DefaultInitialized, \"incorrect state for default constructed Foo (derived) ?\");\n    }\n\n    template<typename Foo_type>\n    void TestDirectConstructor(){\n        Foo_type src(1);\n        ASSERT(src.state == Foo::DirectInitialized, \"incorrect state for direct constructed Foo (derived) ?\");\n    }\n\n    template<typename Foo_type>\n    void TestCopyConstructor(){\n        Foo_type src;\n        Foo_type dst(src);\n        ASSERT(dst.state == Foo::CopyInitialized, \"incorrect state for Copy constructed Foo ?\");\n    }\n\n    template<typename Foo_type>\n    void TestAssignOperator(){\n        Foo_type src;\n        Foo_type dst;\n        dst = (src);\n\n        ASSERT(dst.state == Foo::Assigned, \"incorrect state for Assigned Foo ?\");\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename Foo_type>\n    void TestMoveConstructor(){\n        Foo_type src;\n        Foo_type dst(std::move(src));\n        ASSERT(dst.state == Foo::MoveInitialized, \"incorrect state for Move constructed Foo ?\");\n        ASSERT(src.state == Foo::MovedFrom, \"incorrect state for Move from  Foo ?\");\n    }\n\n    template<typename Foo_type>\n    void TestMoveAssignOperator(){\n        Foo_type src;\n        Foo_type dst;\n        dst = std::move(src);\n\n        ASSERT(dst.state == Foo::MoveAssigned, \"incorrect state for Move Assigned Foo ?\");\n        ASSERT(src.state == Foo::MovedFrom, \"incorrect state for Moved from Foo ?\");\n    }\n#if TBB_USE_EXCEPTIONS\n    void TestMoveConstructorException();\n#endif //TBB_USE_EXCEPTIONS\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n}\n\nvoid TestFoo(){\n    using namespace FooTests;\n    TestDefaultConstructor<Foo>();\n    TestDefaultConstructor<FooWithAssign>();\n    TestDirectConstructor<Foo>();\n    TestDirectConstructor<FooWithAssign>();\n    TestCopyConstructor<Foo>();\n    TestCopyConstructor<FooWithAssign>();\n    TestAssignOperator<FooWithAssign>();\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestMoveConstructor<Foo>();\n    TestMoveConstructor<FooWithAssign>();\n    TestMoveAssignOperator<FooWithAssign>();\n#if TBB_USE_EXCEPTIONS && !__TBB_CPP11_EXCEPTION_IN_STATIC_TEST_BROKEN\n    TestMoveConstructorException();\n#endif //TBB_USE_EXCEPTIONS\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n}\n\n//TODO: replace _IN_TEST with separately defined macro IN_TEST(msg,test_name)\n#define ASSERT_IN_TEST(p,message,test_name) ASSERT(p, (std::string(test_name) + \": \" + message).c_str());\n//TODO: move to harness_assert\n#define ASSERT_THROWS_IN_TEST(expression, exception_type, message, test_name)                  \\\n        try{                                                                                   \\\n                expression;                                                                    \\\n                ASSERT_IN_TEST(false, \"should throw an exception\", test_name);                 \\\n        }catch(exception_type &){                                                              \\\n        }catch(...){ASSERT_IN_TEST(false, \"unexpected exception\", test_name);}                 \\\n\n#define ASSERT_THROWS(expression, exception_type, message)  ASSERT_THROWS_IN_TEST(expression, exception_type, message, \"\")\n\ntemplate<Harness::StateTrackableBase::StateValue desired_state, bool allow_zero_initialized_state>\nbool is_state(Harness::StateTrackable<allow_zero_initialized_state> const& f){ return f.state == desired_state;}\n\ntemplate<Harness::StateTrackableBase::StateValue desired_state>\nstruct is_not_state_f {\n    template <bool allow_zero_initialized_state>\n    bool operator()(Harness::StateTrackable<allow_zero_initialized_state> const& f){ return !is_state<desired_state>(f);}\n};\n\ntemplate<Harness::StateTrackableBase::StateValue desired_state>\nstruct is_state_f {\n    template <bool allow_zero_initialized_state>\n    bool operator()(Harness::StateTrackable<allow_zero_initialized_state> const& f){ return is_state<desired_state>(f); }\n    //TODO: cu_map defines key as a const thus by default it is not moved, instead it is copied. Investigate how std::unordered_map behaves\n    template<typename T1, typename T2>\n    bool operator()(std::pair<T1, T2> const& p){ return /*is_state<desired_state>(p.first) && */is_state<desired_state>(p.second); }\n};\n\ntemplate<typename iterator, typename unary_predicate>\nbool all_of(iterator  begin, iterator const& end, unary_predicate p){\n    for (; begin != end; ++begin){\n        if ( !p(*begin)) return false;\n    }\n    return true;\n}\n\ntemplate<typename container, typename unary_predicate>\nbool all_of(container const& c, unary_predicate p){\n    return ::all_of( c.begin(), c.end(), p );\n}\n\nvoid TestAllOf(){\n    Foo foos[] = {Foo(), Foo(), Foo()};\n    ASSERT(::all_of(foos, Harness::end(foos), is_state_f<Foo::DefaultInitialized>()), \"all_of returned false while true expected\");\n    ASSERT(! ::all_of(foos, Harness::end(foos), is_state_f<Foo::CopyInitialized>()), \"all_of returned true while false expected  \");\n}\n\ntemplate<typename static_counter_allocator_type>\nstruct track_allocator_memory: NoCopy{\n    typedef typename static_counter_allocator_type::counters_t counters_t;\n\n    counters_t previous_state;\n    const char* const test_name;\n    track_allocator_memory(const char* a_test_name): test_name(a_test_name) { static_counter_allocator_type::init_counters(); }\n    ~track_allocator_memory(){verify_no_allocator_memory_leaks();}\n\n    void verify_no_allocator_memory_leaks() const{\n        ASSERT_IN_TEST( static_counter_allocator_type::items_allocated == static_counter_allocator_type::items_freed, \"memory leak?\", test_name );\n        ASSERT_IN_TEST( static_counter_allocator_type::allocations == static_counter_allocator_type::frees, \"memory leak?\", test_name );\n    }\n    void save_allocator_counters(){ previous_state = static_counter_allocator_type::counters(); }\n    void verify_no_more_than_x_memory_items_allocated(size_t  expected_number_of_items_to_allocate){\n        counters_t now = static_counter_allocator_type::counters();\n        ASSERT_IN_TEST( (now.items_allocated - previous_state.items_allocated) <= expected_number_of_items_to_allocate, \"More then excepted memory allocated ?\", test_name );\n    }\n};\n\n#include <vector>\ntemplate<int line_n>\nstruct track_foo_count: NoCopy{\n    bool active;\n    size_t previous_state;\n    const char* const test_name;\n    track_foo_count(const char* a_test_name): active(true), previous_state(FooCount), test_name(a_test_name) { }\n    ~track_foo_count(){\n        if (active){\n            this->verify_no_undestroyed_foo_left_and_dismiss();\n        }\n    }\n\n    //TODO: ideally in most places this check should be replaced with \"no foo created or destroyed\"\n    //TODO: deactivation of the check seems like a hack\n    void verify_no_undestroyed_foo_left_and_dismiss() {\n        ASSERT_IN_TEST( FooCount == previous_state, \"Some instances of Foo were not destroyed ?\", test_name );\n        active = false;\n    }\n};\n\n//TODO: inactive mode in these limiters is a temporary workaround for usage in exception type loop of TestException\n\nstruct limit_foo_count_in_scope: NoCopy{\n    size_t previous_state;\n    bool active;\n    limit_foo_count_in_scope(size_t new_limit, bool an_active = true): previous_state(MaxFooCount), active(an_active) {\n        if (active){\n            MaxFooCount = new_limit;\n        }\n    }\n    ~limit_foo_count_in_scope(){\n        if (active) {\n            MaxFooCount = previous_state;\n        }\n    }\n};\n\ntemplate<typename static_counter_allocator_type>\nstruct limit_allocated_items_in_scope: NoCopy{\n    size_t previous_state;\n    bool active;\n    limit_allocated_items_in_scope(size_t new_limit, bool an_active = true) : previous_state(static_counter_allocator_type::max_items), active(an_active)  {\n        if (active){\n            static_counter_allocator_type::set_limits(new_limit);\n        }\n    }\n    ~limit_allocated_items_in_scope(){\n        if (active) {\n            static_counter_allocator_type::set_limits(previous_state);\n        }\n    }\n};\n\nstruct default_container_traits{\n    template <typename container_type, typename iterator_type>\n    static container_type& construct_container(tbb::aligned_space<container_type> & storage, iterator_type begin, iterator_type end){\n        new (storage.begin()) container_type(begin, end);\n        return *storage.begin();\n    }\n\n    template <typename container_type, typename iterator_type, typename allocator_type>\n    static container_type& construct_container(tbb::aligned_space<container_type> & storage, iterator_type begin, iterator_type end, allocator_type const& a){\n        new (storage.begin()) container_type(begin, end, a);\n        return *storage.begin();\n    }\n};\n\nstruct memory_locations {\n    std::vector<const void*> locations;\n\n    template <typename container_type>\n    memory_locations(container_type const& source) : locations(source.size()){\n        for (typename container_type::const_iterator it = source.begin(); it != source.end(); ++it){locations[std::distance(source.begin(), it)] = & *it;}\n    }\n\n    template <typename container_t>\n    bool content_location_unchanged(container_t const& dst){\n        struct is_same_location{\n            static bool compare(typename container_t::value_type const& v,  const void* location){ return &v == location;}\n        };\n\n        return std::equal(dst.begin(), dst.end(), locations.begin(), &is_same_location::compare);\n    }\n\n    template <typename container_t>\n    bool content_location_changed(container_t const& dst){\n        struct is_not_same_location{\n            static bool compare(typename container_t::value_type const& v,  const void* location){ return &v != location;}\n        };\n\n        return std::equal(dst.begin(), dst.end(), locations.begin(), &is_not_same_location::compare);\n    }\n\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include <algorithm>\nvoid TestMemoryLocaionsHelper(){\n    const size_t test_sequence_len =  15;\n    std::vector<char> source(test_sequence_len, 0);\n    std::generate_n(source.begin(), source.size(), Harness::FastRandomBody<char>(1));\n\n    memory_locations source_memory_locations((source));\n\n    std::vector<char> copy((source));\n    ASSERT(source_memory_locations.content_location_changed(copy), \"\");\n\n    std::vector<char> alias(std::move(source));\n    ASSERT(source_memory_locations.content_location_unchanged(alias), \"\");\n}\nnamespace FooTests{\n#if TBB_USE_EXCEPTIONS\n    void TestMoveConstructorException(){\n        Foo src;\n        const Foo::StateValue source_state_before = src.state;\n        ASSERT_THROWS_IN_TEST(\n            {\n                limit_foo_count_in_scope foo_limit(FooCount);\n                Foo f1(std::move(src));\n            },\n            std::bad_alloc, \"\", \"TestLimitInstancesNumber\"\n        );\n        ASSERT(source_state_before == src.state, \"state of source changed while should not?\");\n    }\n#endif //TBB_USE_EXCEPTIONS\n}\n\ntemplate<typename container_traits, typename allocator_t>\nstruct move_fixture : NoCopy{\n    typedef  typename allocator_t::value_type element_type;\n    typedef  typename container_traits:: template apply<element_type, allocator_t>::type container_t;\n    typedef  typename container_traits::init_iterator_type init_iterator_type;\n    enum {default_container_size = 100};\n    const size_t  container_size;\n    tbb::aligned_space<container_t> source_storage;\n    container_t & source;\n    //check that location of _all_ elements of container under test is changed/unchanged\n    memory_locations locations;\n\n    ~move_fixture(){\n        source_storage.begin()->~container_t();\n    }\n\n    const char* const test_name;\n    move_fixture(const char* a_test_name, size_t a_container_size = default_container_size )\n    :   container_size(a_container_size)\n    ,   source(container_traits::construct_container(source_storage, init_iterator_type(0), init_iterator_type(container_size)))\n    ,   locations(source)\n    ,   test_name(a_test_name)\n    {\n        init(\"move_fixture::move_fixture()\");\n    }\n\n    move_fixture(const char* a_test_name, allocator_t const& a, size_t a_container_size = default_container_size)\n    :   container_size(a_container_size)\n    ,   source(container_traits::construct_container(source_storage, init_iterator_type(0), init_iterator_type(container_size), a))\n    ,   locations(source)\n    ,   test_name(a_test_name)\n    {\n        init(\"move_fixture::move_fixture(allocator_t const& a)\");\n    }\n\n    void init(const std::string& ctor_name){\n        verify_size(source, ctor_name.c_str());\n        verify_content_equal_to_source(source, \"did not properly initialized source? Or can not check container for equality with expected ?: \" + ctor_name);\n        verify_size(locations.locations, \"move_fixture:init \");\n    }\n\n    bool content_location_unchanged(container_t const& dst){\n        return locations.content_location_unchanged(dst);\n    }\n\n    bool content_location_changed(container_t const& dst){\n        return locations.content_location_changed(dst);\n    }\n\n    template<typename container_type>\n    void verify_size(container_type const& dst, const char* a_test_name){\n        ASSERT_IN_TEST(container_size == dst.size(), \"Did not construct all the elements or allocate enough memory?, while should ?\", a_test_name);\n    }\n\n    void verify_content_equal_to_source(container_t const& dst, const std::string& msg){\n        ASSERT_IN_TEST( container_traits::equal(dst, init_iterator_type(0), init_iterator_type(container_size)), msg.c_str(), test_name);\n    }\n\n    void verify_content_equal_to_source(container_t const& dst){\n        verify_content_equal_to_source(dst, \"content changed during move/copy ?\");\n    }\n\n    void verify_content_equal_to_source(container_t const& dst, size_t number_of_constructed_items){\n        ASSERT_IN_TEST(number_of_constructed_items <= dst.size(), \"incorrect test expectation/input parameters?\", test_name);\n        ASSERT_IN_TEST(std::equal(dst.begin(), dst.begin() + number_of_constructed_items, init_iterator_type(0)), \"content changed during move/copy ?\", test_name);\n    }\n\n    //TODO: better name ? e.g. \"content_was_stolen\"\n    void verify_content_shallow_moved(container_t const& dst){\n        verify_size(dst, test_name);\n        ASSERT_IN_TEST(content_location_unchanged(dst), \"container move constructor actually changed element locations, while should not\", test_name);\n        ASSERT_IN_TEST(source.empty(), \"Moved from container instance should not contain any elements\", test_name);\n        verify_content_equal_to_source(dst);\n    }\n\n    //TODO: better name ? e.g. \"element move\"\n    void verify_content_deep_moved(container_t const& dst){\n        verify_size(dst, test_name);\n        ASSERT_IN_TEST(content_location_changed(dst),                \"container actually did not changed element locations for unequal allocators, while should\", test_name);\n        ASSERT_IN_TEST(all_of(dst, is_state_f<Foo::MoveInitialized>()), \"container did not move construct some elements?\", test_name);\n        ASSERT_IN_TEST(all_of(source, is_state_f<Foo::MovedFrom>()),    \"container did not move all the elements?\", test_name);\n        verify_content_equal_to_source(dst);\n    }\n\n    void verify_part_of_content_deep_moved(container_t const& dst, size_t number_of_constructed_items){\n        ASSERT_IN_TEST(content_location_changed(dst),                \"Vector actually did not changed element locations for unequal allocators, while should\", test_name);\n        ASSERT_IN_TEST(::all_of(dst.begin(), dst.begin() + number_of_constructed_items, is_state_f<Foo::MoveInitialized>()), \"Vector did not move construct some elements?\", test_name);\n        if (dst.size() != number_of_constructed_items) {\n            ASSERT_IN_TEST(::all_of(dst.begin() + number_of_constructed_items, dst.end(), is_state_f<Foo::ZeroInitialized>()), \"Failed to zero-initialize items left not constructed after the exception?\", test_name );\n        }\n        verify_content_equal_to_source(dst, number_of_constructed_items);\n\n        ASSERT_IN_TEST(::all_of(source.begin(), source.begin() + number_of_constructed_items, is_state_f<Foo::MovedFrom>()),  \"Vector did not move all the elements?\", test_name);\n        ASSERT_IN_TEST(::all_of(source.begin() + number_of_constructed_items, source.end(), is_not_state_f<Foo::MovedFrom>()),  \"Vector changed elements in source after exception point?\", test_name);\n    }\n};\n\n\ntemplate <typename T, typename pocma = Harness::false_type>\nstruct arena_allocator_fixture : NoCopy{\n    typedef arena<T, pocma>  allocator_t;\n    typedef typename allocator_t::arena_data_t arena_data_t;\n\n    std::vector<tbb::aligned_space<T, 1> > storage;\n    arena_data_t arena_data;\n    allocator_t allocator;\n\n    arena_allocator_fixture(size_t size_to_allocate)\n    :   storage(size_to_allocate)\n    ,   arena_data((*storage.begin()).begin(), storage.size())\n    ,   allocator(arena_data)\n    {}\n};\n\n//TODO: add ability to inject debug_allocator into stateful_allocator_fixture::allocator_t\ntemplate <typename T, typename pocma = Harness::false_type>\nstruct two_memory_arenas_fixture : NoCopy{\n    typedef arena_allocator_fixture<T, pocma> arena_fixture_t;\n    typedef typename arena_fixture_t::allocator_t  allocator_t;\n\n    arena_fixture_t source_arena_fixture;\n    arena_fixture_t dst_arena_fixture;\n\n    allocator_t& source_allocator;\n    allocator_t& dst_allocator;\n\n    const char* test_name;\n\n    two_memory_arenas_fixture(size_t size_to_allocate, const char* a_test_name)\n    :   source_arena_fixture(size_to_allocate)\n    ,   dst_arena_fixture(size_to_allocate)\n    ,   source_allocator(source_arena_fixture.allocator)\n    ,   dst_allocator(dst_arena_fixture.allocator)\n    ,   test_name(a_test_name)\n    {\n        ASSERT_IN_TEST(&*source_arena_fixture.storage.begin() != &*dst_arena_fixture.storage.begin(), \"source and destination arena instances should use different memory regions\", test_name);\n        ASSERT_IN_TEST(source_allocator != dst_allocator, \"arenas using different memory regions should not compare equal\", test_name);\n        ASSERT_IN_TEST(pocma::value == tbb::internal::allocator_traits<allocator_t>::propagate_on_container_move_assignment::value, \"This test require proper allocator_traits support\", test_name);\n\n        //Some ISO C++11 allocator requirements enforcement:\n        allocator_t source_allocator_copy(source_allocator), dst(dst_allocator);\n        allocator_t source_previous_state(source_allocator);\n        ASSERT_IN_TEST(source_previous_state == source_allocator, \"Copy of allocator should compare equal to it's source\", test_name);\n        dst = std::move(source_allocator_copy);\n        ASSERT_IN_TEST(dst == source_previous_state, \"Move initialized instance of allocator should compare equal to it's source state before movement\", test_name);\n    }\n\n    void verify_allocator_was_moved(const allocator_t& result_allocator){\n        //TODO: add assert that allocator move constructor/assignment operator was called\n        ASSERT_IN_TEST(result_allocator == source_allocator, \"allocator was not moved ?\", test_name);\n        ASSERT_IN_TEST(result_allocator != dst_allocator,    \"allocator was not moved ?\", test_name);\n    }\n\n//    template <typename any_allocator_t>\n//    void verify_allocator_was_moved(const any_allocator_t& ){}\n};\n\ntemplate <typename pocma = Harness::false_type>\nstruct std_stateful_allocator : NoCopy {\n    typedef stateful_allocator<FooWithAssign, pocma> allocator_t;\n\n    allocator_t source_allocator;\n    allocator_t dst_allocator;\n\n    const char* test_name;\n\n    std_stateful_allocator(size_t , const char* a_test_name)\n    :   test_name(a_test_name)\n    {}\n\n    template <typename any_allocator_t>\n    void verify_allocator_was_moved(const any_allocator_t& ){}\n\n};\n\ntemplate<typename container_traits, typename pocma = Harness::false_type, typename T = FooWithAssign>\nstruct default_stateful_fixture_make_helper{\n//    typedef std_stateful_allocator<pocma> allocator_fixture_t;\n    typedef two_memory_arenas_fixture<T, pocma> allocator_fixture_t;\n    typedef static_shared_counting_allocator<Harness::int_to_type<__LINE__>, typename allocator_fixture_t::allocator_t, std::size_t> allocator_t;\n\n    typedef move_fixture<container_traits, allocator_t> move_fixture_t;\n    typedef track_allocator_memory<allocator_t> no_leaks_t;\n    typedef track_foo_count<__LINE__> no_foo_leaks_in_fixture_t;\n    typedef track_foo_count<__LINE__> no_foo_leaks_in_test_t;\n\n    struct default_stateful_fixture : no_leaks_t, private no_foo_leaks_in_fixture_t, allocator_fixture_t, move_fixture_t, no_foo_leaks_in_test_t {\n\n        default_stateful_fixture(const char* a_test_name)\n        :   no_leaks_t(a_test_name)\n        ,   no_foo_leaks_in_fixture_t(a_test_name)\n        //TODO: calculate needed size more accurately\n        //allocate twice more storage to handle case when copy constructor called instead of move one\n        ,   allocator_fixture_t(2*4 * move_fixture_t::default_container_size, a_test_name)\n        ,   move_fixture_t(a_test_name, allocator_fixture_t::source_allocator)\n        ,   no_foo_leaks_in_test_t(a_test_name)\n        {\n            no_leaks_t::save_allocator_counters();\n        }\n\n        void verify_no_more_than_x_memory_items_allocated(){\n            no_leaks_t::verify_no_more_than_x_memory_items_allocated(container_traits::expected_number_of_items_to_allocate_for_steal_move);\n        }\n        using no_foo_leaks_in_test_t::verify_no_undestroyed_foo_left_and_dismiss;\n        typedef typename move_fixture_t::container_t::allocator_type allocator_t;\n    };\n\n    typedef default_stateful_fixture type;\n};\n\ntemplate<typename container_traits>\nvoid TestMoveConstructorSingleArgument(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveConstructorSingleArgument\");\n\n    container_t dst(std::move(fixture.source));\n\n    fixture.verify_content_shallow_moved(dst);\n    fixture.verify_allocator_was_moved(dst.get_allocator());\n    fixture.verify_no_more_than_x_memory_items_allocated();\n    fixture.verify_no_undestroyed_foo_left_and_dismiss();\n}\n\ntemplate<typename container_traits>\nvoid TestMoveConstructorWithEqualAllocator(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveConstructorWithEqualAllocator\");\n\n    container_t dst(std::move(fixture.source), fixture.source.get_allocator());\n\n    fixture.verify_content_shallow_moved(dst);\n    fixture.verify_no_more_than_x_memory_items_allocated();\n    fixture.verify_no_undestroyed_foo_left_and_dismiss();\n}\n\ntemplate<typename container_traits>\nvoid TestMoveConstructorWithUnEqualAllocator(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveConstructorWithUnEqualAllocator\");\n\n    container_t dst(std::move(fixture.source), fixture.dst_allocator);\n\n    fixture.verify_content_deep_moved(dst);\n}\n\ntemplate<typename container_traits>\nvoid TestMoveConstructor(){\n    TestMoveConstructorSingleArgument<container_traits>();\n    TestMoveConstructorWithEqualAllocator<container_traits>();\n    TestMoveConstructorWithUnEqualAllocator<container_traits>();\n}\n\ntemplate<typename container_traits>\nvoid TestMoveAssignOperatorPOCMAStateful(){\n    typedef typename default_stateful_fixture_make_helper<container_traits, Harness::true_type>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveAssignOperatorPOCMAStateful\");\n\n    container_t dst(fixture.dst_allocator);\n\n    fixture.save_allocator_counters();\n\n    dst = std::move(fixture.source);\n\n    fixture.verify_content_shallow_moved(dst);\n    fixture.verify_allocator_was_moved(dst.get_allocator());\n    fixture.verify_no_more_than_x_memory_items_allocated();\n    fixture.verify_no_undestroyed_foo_left_and_dismiss();\n}\n\ntemplate<typename container_traits>\nvoid TestMoveAssignOperatorPOCMANonStateful(){\n    typedef std::allocator<FooWithAssign>  allocator_t;\n\n    typedef move_fixture<container_traits, allocator_t> fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveAssignOperatorPOCMANonStateful\");\n\n    ASSERT(fixture.source.get_allocator() == allocator_t(), \"Incorrect test setup: allocator is stateful while should not?\");\n\n    container_t dst;\n    dst = std::move(fixture.source);\n\n    fixture.verify_content_shallow_moved(dst);\n    //TODO: add an assert that allocator was \"moved\" when POCMA is set\n}\n\ntemplate<typename container_traits>\nvoid TestMoveAssignOperatorNotPOCMAWithUnEqualAllocator(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestMoveAssignOperatorNotPOCMAWithUnEqualAllocator\");\n\n    container_t dst(fixture.dst_allocator);\n    dst = std::move(fixture.source);\n\n    fixture.verify_content_deep_moved(dst);\n}\n\ntemplate<typename container_traits>\nvoid TestMoveAssignOperatorNotPOCMAWithEqualAllocator(){\n    typedef typename default_stateful_fixture_make_helper<container_traits, Harness::false_type>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n    fixture_t fixture(\"TestMoveAssignOperatorNotPOCMAWithEqualAllocator\");\n\n    container_t dst(fixture.source_allocator);\n    ASSERT(fixture.source.get_allocator() == dst.get_allocator(), \"Incorrect test setup: allocators are not equal while should be?\");\n\n    fixture.save_allocator_counters();\n\n    dst = std::move(fixture.source);\n\n    fixture.verify_content_shallow_moved(dst);\n    fixture.verify_no_more_than_x_memory_items_allocated();\n    fixture.verify_no_undestroyed_foo_left_and_dismiss();\n}\n\ntemplate<typename container_traits>\nvoid TestMoveAssignOperator(){\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n    TestMoveAssignOperatorPOCMANonStateful<container_traits>();\n    TestMoveAssignOperatorPOCMAStateful<container_traits>();\n#endif\n    TestMoveAssignOperatorNotPOCMAWithUnEqualAllocator<container_traits>();\n    TestMoveAssignOperatorNotPOCMAWithEqualAllocator<container_traits>();\n}\n\ntemplate<typename container_traits>\nvoid TestConstructorWithMoveIterators(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestConstructorWithMoveIterators\");\n\n    container_t dst(std::make_move_iterator(fixture.source.begin()), std::make_move_iterator(fixture.source.end()), fixture.dst_allocator);\n\n    fixture.verify_content_deep_moved(dst);\n}\n\ntemplate<typename container_traits>\nvoid TestAssignWithMoveIterators(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    fixture_t fixture(\"TestAssignWithMoveIterators\");\n\n    container_t dst(fixture.dst_allocator);\n    dst.assign(std::make_move_iterator(fixture.source.begin()), std::make_move_iterator(fixture.source.end()));\n\n    fixture.verify_content_deep_moved(dst);\n}\n\n#if  TBB_USE_EXCEPTIONS\ntemplate<typename container_traits>\nvoid TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n    typedef typename container_t::allocator_type allocator_t;\n    const char* test_name = \"TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorMemoryFailure\";\n    fixture_t fixture(test_name);\n\n    limit_allocated_items_in_scope<allocator_t> allocator_limit(allocator_t::items_allocated + fixture.container_size/4);\n    ASSERT_THROWS_IN_TEST(container_t dst(std::move(fixture.source), fixture.dst_allocator), std::bad_alloc, \"\", test_name);\n}\n\n//TODO: add tests that verify that stealing move constructors/assign operators does not throw exceptions\ntemplate<typename container_traits>\nvoid TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor(){\n    typedef typename default_stateful_fixture_make_helper<container_traits>::type fixture_t;\n    typedef typename fixture_t::container_t container_t;\n\n    const char* test_name = \"TestExceptionSafetyGuaranteesMoveConstructorWithUnEqualAllocatorExceptionInElementCtor\";\n    fixture_t fixture(test_name);\n\n    limit_foo_count_in_scope foo_limit(FooCount + fixture.container_size/4);\n    ASSERT_THROWS_IN_TEST(container_t dst(std::move(fixture.source), fixture.dst_allocator), std::bad_alloc, \"\", test_name);\n}\n#endif /* TBB_USE_EXCEPTIONS */\n#endif//__TBB_CPP11_RVALUE_REF_PRESENT\n\nnamespace helper_stuff_tests {\n    void inline TestArena(){\n        typedef int arena_element;\n\n        arena_element arena_storage[10] = {0};\n        typedef arena<arena_element> arena_t;\n\n        arena_t::arena_data_t arena_data(arena_storage,Harness::array_length(arena_storage));\n        arena_t a(arena_data);\n\n        ASSERT(a.allocate(1) == arena_storage, \"\");\n        ASSERT(a.allocate(2) == &arena_storage[1], \"\");\n        ASSERT(a.allocate(2) == &arena_storage[2+1], \"\");\n    }\n\n    template<typename static_counting_allocator_type>\n    void inline TestStaticCountingAllocatorRebound(){\n        static_counting_allocator_type::set_limits(1);\n        typedef typename static_counting_allocator_type:: template rebind<std::pair<int,int> >::other rebound_type;\n        ASSERT(rebound_type::max_items == static_counting_allocator_type::max_items, \"rebound allocator should use the same limits\");\n        static_counting_allocator_type::set_limits(0);\n    }\n\n    void inline TestStatefulAllocator(){\n        stateful_allocator<int> a1,a2;\n        stateful_allocator<int> copy_of_a1(a1);\n        ASSERT(a1 != a2,\"non_equal_allocator are designed to simulate stateful allocators\");\n        ASSERT(copy_of_a1 == a1,\"\");\n    }\n}\nstruct TestHelperStuff{\n    TestHelperStuff(){\n        using namespace helper_stuff_tests;\n        TestFoo();\n        TestAllOf();\n        TestArena();\n        TestStaticCountingAllocatorRebound<static_shared_counting_allocator<int, arena<int> > >();\n        TestStatefulAllocator();\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        TestMemoryLocaionsHelper();\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n    }\n};\nstatic TestHelperStuff TestHelperStuff_s;\n#endif /* __TBB_test_container_move_support_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_continue_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_graph.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#define N 1000\n#define MAX_NODES 4\n#define C 8\n\nstruct empty_no_assign : private NoAssign {\n   empty_no_assign() {}\n   empty_no_assign( int ) {}\n   operator int() { return 0; }\n};\n\n// A class to use as a fake predecessor of continue_node\nstruct fake_continue_sender : public tbb::flow::sender<tbb::flow::continue_msg>\n{\n    typedef tbb::flow::sender<tbb::flow::continue_msg>::successor_type successor_type;\n    // Define implementations of virtual methods that are abstract in the base class\n    bool register_successor( successor_type& ) __TBB_override { return false; }\n    bool remove_successor( successor_type& )   __TBB_override { return false; }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef tbb::flow::sender<tbb::flow::continue_msg>::built_successors_type built_successors_type;\n    built_successors_type bst;\n    built_successors_type &built_successors() __TBB_override { return bst; }\n    void internal_add_built_successor( successor_type &) __TBB_override { }\n    void internal_delete_built_successor( successor_type &) __TBB_override { }\n    void copy_successors(successor_list_type &) __TBB_override {}\n    size_t successor_count() __TBB_override {return 0;}\n#endif\n};\n\ntemplate< typename InputType >\nstruct parallel_puts : private NoAssign {\n\n    tbb::flow::receiver< InputType > * const my_exe_node;\n\n    parallel_puts( tbb::flow::receiver< InputType > &exe_node ) : my_exe_node(&exe_node) {}\n\n    void operator()( int ) const  {\n        for ( int i = 0; i < N; ++i ) {\n            // the nodes will accept all puts\n            ASSERT( my_exe_node->try_put( InputType() ) == true, NULL );\n        }\n    }\n\n};\n\ntemplate< typename OutputType >\nvoid run_continue_nodes( int p, tbb::flow::graph& g, tbb::flow::continue_node< OutputType >& n ) {\n    fake_continue_sender fake_sender;\n    for (size_t i = 0; i < N; ++i) {\n        n.register_predecessor( fake_sender );\n    }\n\n    for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n        std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n        harness_graph_executor<tbb::flow::continue_msg, OutputType>::execute_count = 0;\n\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            tbb::flow::make_edge( n, receivers[r] );\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(n.successor_count() == (size_t)num_receivers, NULL);\n        ASSERT(n.predecessor_count() == 0, NULL);\n        typename tbb::flow::continue_node<OutputType>::successor_list_type my_succs;\n        typedef typename tbb::flow::continue_node<OutputType>::successor_list_type::iterator sv_iter_type;\n        n.copy_successors(my_succs);\n        ASSERT(my_succs.size() == num_receivers, NULL);\n#endif\n\n        NativeParallelFor( p, parallel_puts<tbb::flow::continue_msg>(n) );\n        g.wait_for_all();\n\n        // 2) the nodes will receive puts from multiple predecessors simultaneously,\n        size_t ec = harness_graph_executor<tbb::flow::continue_msg, OutputType>::execute_count;\n        ASSERT( (int)ec == p, NULL );\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            size_t c = receivers[r].my_count;\n            // 3) the nodes will send to multiple successors.\n            ASSERT( (int)c == p, NULL );\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        for(sv_iter_type si=my_succs.begin(); si != my_succs.end(); ++si) {\n            tbb::flow::remove_edge( n, **si );\n        }\n#else\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            tbb::flow::remove_edge( n, receivers[r] );\n        }\n#endif\n    }\n}\n\ntemplate< typename OutputType, typename Body >\nvoid continue_nodes( Body body ) {\n    for (int p = 1; p < 2*MaxThread; ++p) {\n        tbb::flow::graph g;\n        tbb::flow::continue_node< OutputType > exe_node( g, body );\n        run_continue_nodes( p, g, exe_node);\n        exe_node.try_put(tbb::flow::continue_msg());\n        tbb::flow::continue_node< OutputType > exe_node_copy( exe_node );\n        run_continue_nodes( p, g, exe_node_copy);\n    }\n}\n\nconst size_t Offset = 123;\ntbb::atomic<size_t> global_execute_count;\n\ntemplate< typename OutputType >\nstruct inc_functor {\n\n    tbb::atomic<size_t> local_execute_count;\n    inc_functor( ) { local_execute_count = 0; }\n    inc_functor( const inc_functor &f ) { local_execute_count = f.local_execute_count; }\n    void operator=(const inc_functor &f) { local_execute_count = f.local_execute_count; }\n\n    OutputType operator()( tbb::flow::continue_msg ) {\n       ++global_execute_count;\n       ++local_execute_count;\n       return OutputType();\n    }\n\n};\n\ntemplate< typename OutputType >\nvoid continue_nodes_with_copy( ) {\n\n    for (int p = 1; p < 2*MaxThread; ++p) {\n        tbb::flow::graph g;\n        inc_functor<OutputType> cf;\n        cf.local_execute_count = Offset;\n        global_execute_count = Offset;\n\n        tbb::flow::continue_node< OutputType > exe_node( g, cf );\n        fake_continue_sender fake_sender;\n        for (size_t i = 0; i < N; ++i) {\n           exe_node.register_predecessor( fake_sender );\n        }\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n            std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::make_edge( exe_node, receivers[r] );\n            }\n\n            NativeParallelFor( p, parallel_puts<tbb::flow::continue_msg>(exe_node) );\n            g.wait_for_all();\n\n            // 2) the nodes will receive puts from multiple predecessors simultaneously,\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                size_t c = receivers[r].my_count;\n                // 3) the nodes will send to multiple successors.\n                ASSERT( (int)c == p, NULL );\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( exe_node, receivers[r] );\n            }\n        }\n\n        // validate that the local body matches the global execute_count and both are correct\n        inc_functor<OutputType> body_copy = tbb::flow::copy_body< inc_functor<OutputType> >( exe_node );\n        const size_t expected_count = p*MAX_NODES + Offset;\n        size_t global_count = global_execute_count;\n        size_t inc_count = body_copy.local_execute_count;\n        ASSERT( global_count == expected_count && global_count == inc_count, NULL );\n        g.reset(tbb::flow::rf_reset_bodies);\n        body_copy = tbb::flow::copy_body< inc_functor<OutputType> >( exe_node );\n        inc_count = body_copy.local_execute_count;\n        ASSERT( Offset == inc_count, \"reset(rf_reset_bodies) did not reset functor\" );\n\n    }\n}\n\ntemplate< typename OutputType >\nvoid run_continue_nodes() {\n    harness_graph_executor< tbb::flow::continue_msg, OutputType>::max_executors = 0;\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    continue_nodes<OutputType>( []( tbb::flow::continue_msg i ) -> OutputType { return harness_graph_executor<tbb::flow::continue_msg, OutputType>::func(i); } );\n    #endif\n    continue_nodes<OutputType>( &harness_graph_executor<tbb::flow::continue_msg, OutputType>::func );\n    continue_nodes<OutputType>( typename harness_graph_executor<tbb::flow::continue_msg, OutputType>::functor() );\n    continue_nodes_with_copy<OutputType>();\n}\n\n//! Tests limited concurrency cases for nodes that accept data messages\nvoid test_concurrency(int num_threads) {\n    tbb::task_scheduler_init init(num_threads);\n    run_continue_nodes<tbb::flow::continue_msg>();\n    run_continue_nodes<int>();\n    run_continue_nodes<empty_no_assign>();\n}\n/*\n * Connection of two graphs is not currently supported, but works to some limited extent.\n * This test is included to check for backward compatibility. It checks that a continue_node\n * with predecessors in two different graphs receives the required\n * number of continue messages before it executes.\n */\nusing namespace tbb::flow;\n\nstruct add_to_counter {\n    int* counter;\n    add_to_counter(int& var):counter(&var){}\n    void operator()(continue_msg){*counter+=1;}\n};\n\nvoid test_two_graphs(){\n    int count=0;\n\n    //graph g with broadcast_node and continue_node\n    graph g;\n    broadcast_node<continue_msg> start_g(g);\n    continue_node<continue_msg> first_g(g, add_to_counter(count));\n\n    //graph h with broadcast_node\n    graph h;\n    broadcast_node<continue_msg> start_h(h);\n\n    //making two edges to first_g from the two graphs\n    make_edge(start_g,first_g);\n    make_edge(start_h, first_g);\n\n    //two try_puts from the two graphs\n    start_g.try_put(continue_msg());\n    start_h.try_put(continue_msg());\n    g.wait_for_all();\n    ASSERT(count==1, \"Not all continue messages received\");\n\n    //two try_puts from the graph that doesn't contain the node\n    count=0;\n    start_h.try_put(continue_msg());\n    start_h.try_put(continue_msg());\n    g.wait_for_all();\n    ASSERT(count==1, \"Not all continue messages received -1\");\n\n    //only one try_put\n    count=0;\n    start_g.try_put(continue_msg());\n    g.wait_for_all();\n    ASSERT(count==0, \"Node executed without waiting for all predecessors\");\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nvoid test_extract() {\n    int my_count = 0;\n    tbb::flow::continue_msg cm;\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> b0(g);\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> b1(g);\n    tbb::flow::continue_node<tbb::flow::continue_msg>  c0(g, add_to_counter(my_count));\n    tbb::flow::queue_node<tbb::flow::continue_msg> q0(g);\n\n    tbb::flow::make_edge(b0, c0);\n    tbb::flow::make_edge(b1, c0);\n    tbb::flow::make_edge(c0, q0);\n    for( int i = 0; i < 2; ++i ) {\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(c0.predecessor_count() == 2 && c0.successor_count() == 1, \"c0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n\n        /* b0         */\n        /*   \\        */\n        /*    c0 - q0 */\n        /*   /        */\n        /* b1         */\n\n        b0.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(my_count == 0, \"continue_node fired too soon\");\n        b1.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(my_count == 1, \"continue_node didn't fire\");\n        ASSERT(q0.try_get(cm), \"continue_node didn't forward\");\n\n        b0.extract();\n\n        /* b0         */\n        /*            */\n        /*    c0 - q0 */\n        /*   /        */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(c0.predecessor_count() == 1 && c0.successor_count() == 1, \"c0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(tbb::flow::continue_msg());\n        b0.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(my_count == 1, \"b0 messages being forwarded to continue_node even though it is disconnected\");\n        b1.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"continue_node didn't fire though it has only one predecessor\");\n        ASSERT(q0.try_get(cm), \"continue_node didn't forward second time\");\n\n        c0.extract();\n\n        /* b0         */\n        /*            */\n        /*    c0   q0 */\n        /*            */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(c0.predecessor_count() == 0 && c0.successor_count() == 0, \"c0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(tbb::flow::continue_msg());\n        b0.try_put(tbb::flow::continue_msg());\n        b1.try_put(tbb::flow::continue_msg());\n        b1.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"continue didn't fire though it has only one predecessor\");\n        ASSERT(!q0.try_get(cm), \"continue_node forwarded though it shouldn't\");\n        make_edge(b0, c0);\n\n        /* b0         */\n        /*   \\        */\n        /*    c0   q0 */\n        /*            */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(c0.predecessor_count() == 1 && c0.successor_count() == 0, \"c0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n\n        b0.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n\n        ASSERT(my_count == 3, \"continue didn't fire though it has only one predecessor\");\n        ASSERT(!q0.try_get(cm), \"continue_node forwarded though it shouldn't\");\n\n        tbb::flow::make_edge(b1, c0);\n        tbb::flow::make_edge(c0, q0);\n        my_count = 0;\n    }\n}\n#endif\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\nstruct lightweight_policy_body {\n    const tbb::tbb_thread::id my_thread_id;\n    tbb::atomic<int> my_count;\n\n    lightweight_policy_body() : my_thread_id(tbb::this_tbb_thread::get_id()) {\n        my_count = 0;\n    }\n    void operator()(tbb::flow::continue_msg) {\n        ++my_count;\n        tbb::tbb_thread::id body_thread_id = tbb::this_tbb_thread::get_id();\n        ASSERT(body_thread_id == my_thread_id, \"Body executed as not lightweight\");\n    }\n};\n\nvoid test_lightweight_policy() {\n    tbb::flow::graph g;\n    tbb::flow::continue_node<tbb::flow::continue_msg, tbb::flow::lightweight> node1(g, lightweight_policy_body());\n    tbb::flow::continue_node<tbb::flow::continue_msg, tbb::flow::lightweight> node2(g, lightweight_policy_body());\n\n    tbb::flow::make_edge(node1, node2);\n    const int n = 10;\n    for(size_t i = 0; i < n; ++i) {\n        node1.try_put(tbb::flow::continue_msg());\n    }\n    g.wait_for_all();\n\n    lightweight_policy_body body1 = tbb::flow::copy_body<lightweight_policy_body>(node1);\n    lightweight_policy_body body2 = tbb::flow::copy_body<lightweight_policy_body>(node2);\n    ASSERT(int(body1.my_count) == n, \"Body of the first node needs to be executed N times\");\n    ASSERT(int(body2.my_count) == n, \"Body of the second node needs to be executed N times\");\n}\n#endif\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n       test_concurrency(p);\n   }\n   test_two_graphs();\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n   test_lightweight_policy();\n#endif\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n   test_extract();\n#endif\n   return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_critical_section.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// test critical section\n//\n#include \"tbb/critical_section.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness_assert.h\"\n#include \"harness.h\"\n#include <math.h>\n\n#include \"harness_barrier.h\"\nHarness::SpinBarrier sBarrier;\ntbb::critical_section cs;\nconst int MAX_WORK = 300;\n\nstruct BusyBody : NoAssign {\n    tbb::enumerable_thread_specific<double> &locals;\n    const int nThread;\n    const int WorkRatiox100;\n    int &unprotected_count;\n    bool test_throw;\n\n    BusyBody( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :\n        locals(locals_),\n        nThread(nThread_),\n        WorkRatiox100(workRatiox100_),\n        unprotected_count(unprotected_count_),\n        test_throw(test_throw_) {\n        sBarrier.initialize(nThread_);\n    }\n\n    void operator()(const int /* threadID */ ) const {\n        int nIters = MAX_WORK/nThread;\n        sBarrier.wait();\n        tbb::tick_count t0 = tbb::tick_count::now();\n        for(int j = 0; j < nIters; j++) {\n\n            for(int i = 0; i < MAX_WORK * (100 - WorkRatiox100); i++) {\n                locals.local() += 1.0;\n            }\n            cs.lock();\n            ASSERT( !cs.try_lock(), \"recursive try_lock must fail\" );\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n            if(test_throw && j == (nIters / 2)) {\n                bool was_caught = false,\n                     unknown_exception = false;\n                try {\n                    cs.lock();\n                }\n                catch(tbb::improper_lock& e) {\n                    ASSERT( e.what(), \"Error message is absent\" );\n                    was_caught = true;\n                }\n                catch(...) {\n                    was_caught = unknown_exception = true;\n                }\n                ASSERT(was_caught, \"Recursive lock attempt did not throw\");\n                ASSERT(!unknown_exception, \"tbb::improper_lock exception is expected\");\n            }\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN  */\n            for(int i = 0; i < MAX_WORK * WorkRatiox100; i++) {\n                locals.local() += 1.0;\n            }\n            unprotected_count++;\n            cs.unlock();\n        }\n        locals.local() = (tbb::tick_count::now() - t0).seconds();\n    }\n};\n\nstruct BusyBodyScoped : NoAssign {\n    tbb::enumerable_thread_specific<double> &locals;\n    const int nThread;\n    const int WorkRatiox100;\n    int &unprotected_count;\n    bool test_throw;\n\n    BusyBodyScoped( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :\n        locals(locals_),\n        nThread(nThread_),\n        WorkRatiox100(workRatiox100_),\n        unprotected_count(unprotected_count_),\n        test_throw(test_throw_) {\n        sBarrier.initialize(nThread_);\n    }\n\n    void operator()(const int /* threadID */ ) const {\n        int nIters = MAX_WORK/nThread;\n        sBarrier.wait();\n        tbb::tick_count t0 = tbb::tick_count::now();\n        for(int j = 0; j < nIters; j++) {\n\n            for(int i = 0; i < MAX_WORK * (100 - WorkRatiox100); i++) {\n                locals.local() += 1.0;\n            }\n            {\n                tbb::critical_section::scoped_lock my_lock(cs);\n                for(int i = 0; i < MAX_WORK * WorkRatiox100; i++) {\n                    locals.local() += 1.0;\n                }\n                unprotected_count++;\n            }\n        }\n        locals.local() = (tbb::tick_count::now() - t0).seconds();\n    }\n};\n\nvoid\nRunOneCriticalSectionTest(int nThreads, int csWorkRatio, bool test_throw) {\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);\n    tbb::enumerable_thread_specific<double> test_locals;\n    int myCount = 0;\n    BusyBody myBody(nThreads, csWorkRatio, test_locals, myCount, test_throw);\n    BusyBodyScoped myScopedBody(nThreads, csWorkRatio, test_locals, myCount, test_throw);\n    init.initialize(nThreads);\n    tbb::tick_count t0;\n    {\n        t0 = tbb::tick_count::now();\n        myCount = 0;\n        NativeParallelFor(nThreads, myBody);\n        ASSERT(myCount == (MAX_WORK - (MAX_WORK % nThreads)), NULL);\n        REMARK(\"%d threads, work ratio %d per cent, time %g\", nThreads, csWorkRatio, (tbb::tick_count::now() - t0).seconds());\n        if (nThreads > 1) {\n            double etsSum = 0;\n            double etsMax = 0;\n            double etsMin = 0;\n            double etsSigmaSq = 0;\n            double etsSigma = 0;\n\n            for(tbb::enumerable_thread_specific<double>::const_iterator ci = test_locals.begin(); ci != test_locals.end(); ci++) {\n                etsSum += *ci;\n                if(etsMax==0.0) {\n                    etsMin = *ci;\n                }\n                else {\n                    if(etsMin > *ci) etsMin = *ci;\n                }\n                if(etsMax < *ci) etsMax = *ci;\n            }\n            double etsAvg = etsSum / (double)nThreads;\n            for(tbb::enumerable_thread_specific<double>::const_iterator ci = test_locals.begin(); ci != test_locals.end(); ci++) {\n                etsSigma = etsAvg - *ci;\n                etsSigmaSq += etsSigma * etsSigma;\n            }\n            // an attempt to gauge the \"fairness\" of the scheduling of the threads.  We figure\n            // the standard deviation, and compare it with the maximum deviation from the\n            // average time.  If the difference is 0 that means all threads finished in the same\n            // amount of time.  If non-zero, the difference is divided by the time, and the\n            // negative log is taken.  If > 2, then the difference is on the order of 0.01*t\n            // where T is the average time.  We aritrarily define this as \"fair.\"\n            etsSigma = sqrt(etsSigmaSq/double(nThreads));\n            etsMax -= etsAvg;  // max - a == delta1\n            etsMin = etsAvg - etsMin;  // a - min == delta2\n            if(etsMax < etsMin) etsMax = etsMin;\n            etsMax -= etsSigma;\n            // ASSERT(etsMax >= 0, NULL);  // shouldn't the maximum difference from the mean be > the stddev?\n            etsMax = (etsMax > 0.0) ? etsMax : 0.0;  // possible rounding error\n            double fairness = etsMax / etsAvg;\n            if(fairness == 0.0) {\n                fairness = 100.0;\n            }\n            else fairness = - log10(fairness);\n            if(fairness > 2.0 ) {\n                REMARK(\"  Fair (%g)\\n\", fairness);\n            }\n            else {\n                REMARK(\"  Unfair (%g)\\n\", fairness);\n            }\n        }\n        myCount = 0;\n        NativeParallelFor(nThreads, myScopedBody);\n        ASSERT(myCount == (MAX_WORK - (MAX_WORK % nThreads)), NULL);\n\n    }\n\n    init.terminate();\n}\n\nvoid\nRunParallelTests() {\n    for(int p = MinThread; p <= MaxThread; p++) {\n        for(int cs_ratio = 1; cs_ratio < 95; cs_ratio *= 2) {\n            RunOneCriticalSectionTest(p, cs_ratio, /*test_throw*/true);\n        }\n    }\n}\n\nint TestMain () {\n    if(MinThread <= 0) MinThread = 1;\n\n    if(MaxThread > 0) {\n        RunParallelTests();\n    }\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_dynamic_link.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nenum FOO_TYPE {\n    FOO_DUMMY,\n    FOO_IMPLEMENTATION\n};\n\n#if _WIN32 || _WIN64\n#define TEST_EXPORT\n#else\n#define TEST_EXPORT extern \"C\"\n#endif /* _WIN32 || _WIN64 */\n\n// foo \"implementations\".\nTEST_EXPORT FOO_TYPE foo1() { return FOO_IMPLEMENTATION; }\nTEST_EXPORT FOO_TYPE foo2() { return FOO_IMPLEMENTATION; }\n// foo \"dummies\".\nFOO_TYPE dummy_foo1() { return FOO_DUMMY; }\nFOO_TYPE dummy_foo2() { return FOO_DUMMY; }\n\n// Handlers.\nstatic FOO_TYPE (*foo1_handler)() = &dummy_foo1;\nstatic FOO_TYPE (*foo2_handler)() = &dummy_foo2;\n\n#include \"tbb/tbb_config.h\"\n// Suppress the weak symbol mechanism to avoid surplus compiler warnings.\n#ifdef __TBB_WEAK_SYMBOLS_PRESENT\n#undef __TBB_WEAK_SYMBOLS_PRESENT\n#endif\n// Use of harness assert to avoid the dependency on TBB\n#include \"harness_assert.h\"\n#define LIBRARY_ASSERT(p,message) ASSERT(p,message)\n#include \"tbb/dynamic_link.h\"\n// Table describing how to link the handlers.\nstatic const tbb::internal::dynamic_link_descriptor LinkTable[] = {\n    { \"foo1\", (tbb::internal::pointer_to_handler*)(void*)(&foo1_handler) },\n    { \"foo2\", (tbb::internal::pointer_to_handler*)(void*)(&foo2_handler) }\n};\n\n// The direct include since we want to test internal functionality.\n#include \"tbb/dynamic_link.cpp\"\n#include \"harness_dynamic_libs.h\"\n#include \"harness.h\"\n\n#if !HARNESS_SKIP_TEST\nint TestMain () {\n#if !_WIN32\n    // Check if the executable exports its symbols.\n    ASSERT( Harness::GetAddress( Harness::OpenLibrary(NULL), \"foo1\" ) && Harness::GetAddress( Harness::OpenLibrary(NULL), \"foo2\" ),\n            \"The executable doesn't export its symbols. Is the -rdynamic switch set during linking?\" );\n#endif /* !_WIN32 */\n    // We want to link (or fail to link) to the symbols available from the\n    // executable so it doesn't matter what the library name is specified in\n    // the dynamic_link call - let it be an empty string.\n    // Generally speaking the test has sense only on Linux but on Windows it\n    // checks the dynamic_link graceful behavior with incorrect library name.\n    if ( tbb::internal::dynamic_link( \"\", LinkTable, sizeof(LinkTable)/sizeof(LinkTable[0]) ) ) {\n        ASSERT( foo1_handler && foo2_handler, \"The symbols are corrupted by dynamic_link\" );\n        ASSERT( foo1_handler() == FOO_IMPLEMENTATION && foo2_handler() == FOO_IMPLEMENTATION,\n                \"dynamic_link returned the successful code but symbol(s) are wrong\" );\n    } else {\n        ASSERT( foo1_handler==dummy_foo1 && foo2_handler==dummy_foo2, \"The symbols are corrupted by dynamic_link\" );\n    }\n    return Harness::Done;\n}\n#endif // HARNESS_SKIP_TEST\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_eh_algorithms.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 2\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n#include \"harness.h\"\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#include <limits.h> // for INT_MAX\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"tbb/task.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/parallel_do.h\"\n#include \"tbb/pipeline.h\"\n#include \"tbb/parallel_scan.h\"\n#include \"tbb/blocked_range.h\"\n#include \"harness_assert.h\"\n\n#define FLAT_RANGE  100000\n#define FLAT_GRAIN  100\n#define OUTER_RANGE  100\n#define OUTER_GRAIN  10\n#define INNER_RANGE  (FLAT_RANGE / OUTER_RANGE)\n#define INNER_GRAIN  (FLAT_GRAIN / OUTER_GRAIN)\n\ntbb::atomic<intptr_t> g_FedTasksCount; // number of tasks added by parallel_do feeder\ntbb::atomic<intptr_t> g_OuterParCalls;  // number of actual invocations of the outer construct executed.\ntbb::atomic<intptr_t> g_TGCCancelled;  // Number of times a task sees its group cancelled at start\n\ninline intptr_t Existed () { return INT_MAX; }\n\n#include \"harness_eh.h\"\n/********************************\n      Variables in test\n\n__ Test control variables\n      g_ExceptionInMaster -- only the master thread is allowed to throw.  If false, the master cannot throw\n      g_SolitaryException -- only one throw may be executed.\n\n-- controls for ThrowTestException for pipeline tests\n      g_NestedPipelines -- are inner pipelines being run?\n      g_PipelinesStarted -- how many pipelines have run their first filter at least once.\n\n-- Information variables\n\n   g_Master -- Thread ID of the \"master\" thread\n      In pipelines sometimes the master thread does not participate, so the tests have to be resilient to this.\n\n-- Measurement variables\n\n   g_OuterParCalls -- how many outer parallel ranges or filters started\n   g_TGCCancelled --  how many inner parallel ranges or filters saw task::self().is_cancelled()\n   g_ExceptionsThrown -- number of throws executed (counted in ThrowTestException)\n   g_MasterExecutedThrow -- number of times master thread actually executed a throw\n   g_NonMasterExecutedThrow -- number of times non-master thread actually executed a throw\n   g_ExceptionCaught -- one of PropagatedException or unknown exception was caught.  (Other exceptions cause assertions.)\n\n   --  Tallies for the task bodies which have executed (counted in each inner body, sampled in ThrowTestException)\n      g_CurExecuted -- total number of inner ranges or filters which executed\n      g_ExecutedAtLastCatch -- value of g_CurExecuted when last catch was made, 0 if none.\n      g_ExecutedAtFirstCatch -- value of g_CurExecuted when first catch is made, 0 if none.\n  *********************************/\n\ninline void ResetGlobals (  bool throwException = true, bool flog = false ) {\n    ResetEhGlobals( throwException, flog );\n    g_FedTasksCount = 0;\n    g_OuterParCalls = 0;\n    g_NestedPipelines = false;\n    g_TGCCancelled = 0;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Tests for tbb::parallel_for and tbb::parallel_reduce\n\ntypedef size_t count_type;\ntypedef tbb::blocked_range<count_type> range_type;\n\ninline intptr_t CountSubranges(range_type r) {\n    if(!r.is_divisible()) return intptr_t(1);\n    range_type r2(r,tbb::split());\n    return CountSubranges(r) + CountSubranges(r2);\n}\n\ninline intptr_t NumSubranges ( intptr_t length, intptr_t grain ) {\n    return CountSubranges(range_type(0,length,grain));\n}\n\ntemplate<class Body>\nintptr_t TestNumSubrangesCalculation ( intptr_t length, intptr_t grain, intptr_t inner_length, intptr_t inner_grain ) {\n    ResetGlobals();\n    g_ThrowException = false;\n    intptr_t outerCalls = NumSubranges(length, grain),\n             innerCalls = NumSubranges(inner_length, inner_grain),\n             maxExecuted = outerCalls * (innerCalls + 1);\n    tbb::parallel_for( range_type(0, length, grain), Body() );\n    ASSERT (g_CurExecuted == maxExecuted, \"Wrong estimation of bodies invocation count\");\n    return maxExecuted;\n}\n\nclass NoThrowParForBody {\npublic:\n    void operator()( const range_type& r ) const {\n        volatile count_type x = 0;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        count_type end = r.end();\n        for( count_type i=r.begin(); i<end; ++i )\n            x += i;\n    }\n};\n\n#if TBB_USE_EXCEPTIONS\n\nvoid Test0 () {\n    ResetGlobals();\n    tbb::simple_partitioner p;\n    for( size_t i=0; i<10; ++i ) {\n        tbb::parallel_for( range_type(0, 0, 1), NoThrowParForBody() );\n        tbb::parallel_for( range_type(0, 0, 1), NoThrowParForBody(), p );\n        tbb::parallel_for( range_type(0, 128, 8), NoThrowParForBody() );\n        tbb::parallel_for( range_type(0, 128, 8), NoThrowParForBody(), p );\n    }\n} // void Test0 ()\n\n//! Template that creates a functor suitable for parallel_reduce from a functor for parallel_for.\ntemplate<typename ParForBody>\nclass SimpleParReduceBody: NoAssign {\n    ParForBody m_Body;\npublic:\n    void operator()( const range_type& r ) const { m_Body(r); }\n    SimpleParReduceBody() {}\n    SimpleParReduceBody( SimpleParReduceBody& left, tbb::split ) : m_Body(left.m_Body) {}\n    void join( SimpleParReduceBody& /*right*/ ) {}\n}; // SimpleParReduceBody\n\n//! Test parallel_for and parallel_reduce for a given partitioner.\n/** The Body need only be suitable for a parallel_for. */\ntemplate<typename ParForBody, typename Partitioner>\nvoid TestParallelLoopAux() {\n    Partitioner partitioner;\n    for( int i=0; i<2; ++i ) {\n        ResetGlobals();\n        TRY();\n            if( i==0 )\n                tbb::parallel_for( range_type(0, FLAT_RANGE, FLAT_GRAIN), ParForBody(), partitioner );\n            else {\n                SimpleParReduceBody<ParForBody> rb;\n                tbb::parallel_reduce( range_type(0, FLAT_RANGE, FLAT_GRAIN), rb, partitioner );\n            }\n        CATCH_AND_ASSERT();\n        // two cases: g_SolitaryException and !g_SolitaryException\n        //   1) g_SolitaryException: only one thread actually threw.  There is only one context, so the exception\n        //      (when caught) will cause that context to be cancelled.  After this event, there may be one or\n        //      more threads which are \"in-flight\", up to g_NumThreads, but no more will be started.  The threads,\n        //      when they start, if they see they are cancelled, TGCCancelled is incremented.\n        //   2) !g_SolitaryException: more than one thread can throw.  The number of threads that actually\n        //      threw is g_MasterExecutedThrow if only the master is allowed, else g_NonMasterExecutedThrow.\n        //      Only one context, so TGCCancelled should be <= g_NumThreads.\n        //\n        // the reasoning is similar for nested algorithms in a single context (Test2).\n        //\n        // If a thread throws in a context, more than one subsequent task body may see the\n        // cancelled state (if they are scheduled before the state is propagated.) this is\n        // infrequent, but it occurs.  So what was to be an assertion must be a remark.\n        ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks ran after exception thrown\");\n        if( g_TGCCancelled > g_NumThreads) REMARK( \"Too many tasks ran after exception thrown (%d vs. %d)\\n\",\n                (int)g_TGCCancelled, (int)g_NumThreads);\n        ASSERT(g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n        if ( g_SolitaryException ) {\n            ASSERT(g_NumExceptionsCaught == 1, \"No try_blocks in any body expected in this test\");\n            ASSERT(g_NumExceptionsCaught == (g_ExceptionInMaster ? g_MasterExecutedThrow : g_NonMasterExecutedThrow),\n                \"Not all throws were caught\");\n            ASSERT(g_ExecutedAtFirstCatch == g_ExecutedAtLastCatch, \"Too many exceptions occurred\");\n        }\n        else {\n            ASSERT(g_NumExceptionsCaught >= 1, \"No try blocks in any body expected in this test\");\n        }\n    }\n}  // TestParallelLoopAux\n\n//! Test with parallel_for and parallel_reduce, over all three kinds of partitioners.\n/** The Body only needs to be suitable for tbb::parallel_for. */\ntemplate<typename Body>\nvoid TestParallelLoop() {\n    // The simple and auto partitioners should be const, but not the affinity partitioner.\n    TestParallelLoopAux<Body, const tbb::simple_partitioner  >();\n    TestParallelLoopAux<Body, const tbb::auto_partitioner    >();\n#define __TBB_TEMPORARILY_DISABLED 1\n#if !__TBB_TEMPORARILY_DISABLED\n    // TODO: Improve the test so that it tolerates delayed start of tasks with affinity_partitioner\n    TestParallelLoopAux<Body, /***/ tbb::affinity_partitioner>();\n#endif\n#undef __TBB_TEMPORARILY_DISABLED\n}\n\nclass SimpleParForBody: NoAssign {\npublic:\n    void operator()( const range_type& r ) const {\n        Harness::ConcurrencyTracker ct;\n        volatile long x = 0;\n        ++g_CurExecuted;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        for( count_type i = r.begin(); i != r.end(); ++i )\n            x += 0;\n        WaitUntilConcurrencyPeaks();\n        ThrowTestException(1);\n    }\n};\n\nvoid Test1() {\n    // non-nested parallel_for/reduce with throwing body, one context\n    TestParallelLoop<SimpleParForBody>();\n} // void Test1 ()\n\nclass OuterParForBody: NoAssign {\npublic:\n    void operator()( const range_type& ) const {\n        Harness::ConcurrencyTracker ct;\n        ++g_OuterParCalls;\n        tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody() );\n    }\n};\n\n//! Uses parallel_for body containing an inner parallel_for with the default context not wrapped by a try-block.\n/** Inner algorithms are spawned inside the new bound context by default. Since\n    exceptions thrown from the inner parallel_for are not handled by the caller\n    (outer parallel_for body) in this test, they will cancel all the sibling inner\n    algorithms. **/\nvoid Test2 () {\n    TestParallelLoop<OuterParForBody>();\n} // void Test2 ()\n\nclass OuterParForBodyWithIsolatedCtx {\npublic:\n    void operator()( const range_type& ) const {\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        ++g_OuterParCalls;\n        tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );\n    }\n};\n\n//! Uses parallel_for body invoking an inner parallel_for with an isolated context without a try-block.\n/** Even though exceptions thrown from the inner parallel_for are not handled\n    by the caller in this test, they will not affect sibling inner algorithms\n    already running because of the isolated contexts. However because the first\n    exception cancels the root parallel_for only the first g_NumThreads subranges\n    will be processed (which launch inner parallel_fors) **/\nvoid Test3 () {\n    ResetGlobals();\n    typedef OuterParForBodyWithIsolatedCtx body_type;\n    intptr_t  innerCalls = NumSubranges(INNER_RANGE, INNER_GRAIN),\n            // we expect one thread to throw without counting, the rest to run to completion\n            // this formula assumes g_numThreads outer pfor ranges will be started, but that is not the\n            // case; the SimpleParFor subranges are started up as part of the outer ones, and when\n            // the amount of concurrency reaches g_NumThreads no more outer Pfor ranges are started.\n            // so we have to count the number of outer Pfors actually started.\n            minExecuted = (g_NumThreads - 1) * innerCalls;\n    TRY();\n        tbb::parallel_for( range_type(0, OUTER_RANGE, OUTER_GRAIN), body_type() );\n    CATCH_AND_ASSERT();\n    minExecuted = (g_OuterParCalls - 1) * innerCalls;  // see above\n\n    // The first formula above assumes all ranges of the outer parallel for are executed, and one\n    // cancels.  In the event, we have a smaller number of ranges that start before the exception\n    // is caught.\n    //\n    //  g_SolitaryException:One inner range throws.  Outer parallel_For is cancelled, but sibling\n    //                      parallel_fors continue to completion (unless the threads that execute\n    //                      are not allowed to throw, in which case we will not see any exceptions).\n    // !g_SolitaryException:multiple inner ranges may throw.  Any which throws will stop, and the\n    //                      corresponding range of the outer pfor will stop also.\n    //\n    // In either case, once the outer pfor gets the exception it will stop executing further ranges.\n\n    // if the only threads executing were not allowed to throw, then not seeing an exception is okay.\n    bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecuted) || (!g_ExceptionInMaster && !g_NonMasterExecuted);\n    if ( g_SolitaryException ) {\n        ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");\n        ASSERT (g_CurExecuted > minExecuted, \"Too few tasks survived exception\");\n        ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtLastCatch + g_NumThreads), \"Too many tasks survived exception\");\n        ASSERT (g_NumExceptionsCaught == 1 || okayNoExceptionsCaught, \"No try_blocks in any body expected in this test\");\n    }\n    else {\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n        ASSERT (g_NumExceptionsCaught >= 1 || okayNoExceptionsCaught, \"No try_blocks in any body expected in this test\");\n    }\n} // void Test3 ()\n\nclass OuterParForExceptionSafeBody {\npublic:\n    void operator()( const range_type& ) const {\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        ++g_OuterParCalls;\n        TRY();\n            tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );\n        CATCH();  // this macro sets g_ExceptionCaught\n    }\n};\n\n//! Uses parallel_for body invoking an inner parallel_for (with isolated context) inside a try-block.\n/** Since exception(s) thrown from the inner parallel_for are handled by the caller\n    in this test, they do not affect neither other tasks of the the root parallel_for\n    nor sibling inner algorithms. **/\nvoid Test4 () {\n    ResetGlobals( true, true );\n    intptr_t  innerCalls = NumSubranges(INNER_RANGE, INNER_GRAIN),\n            outerCalls = NumSubranges(OUTER_RANGE, OUTER_GRAIN);\n    TRY();\n        tbb::parallel_for( range_type(0, OUTER_RANGE, OUTER_GRAIN), OuterParForExceptionSafeBody() );\n    CATCH();\n    // g_SolitaryException  : one inner pfor will throw, the rest will execute to completion.\n    //                        so the count should be (outerCalls -1) * innerCalls, if a throw happened.\n    // !g_SolitaryException : possible multiple inner pfor throws.  Should be approximately\n    //                        (outerCalls - g_NumExceptionsCaught) * innerCalls, give or take a few\n    intptr_t  minExecuted = (outerCalls - g_NumExceptionsCaught) * innerCalls;\n    bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecuted) || (!g_ExceptionInMaster && !g_NonMasterExecuted);\n    if ( g_SolitaryException ) {\n        // only one task had exception thrown. That task had at least one execution (the one that threw).\n        // There may be an arbitrary number of ranges executed after the throw but before the exception\n        // is caught in the scheduler and cancellation is signaled.  (seen 9, 11 and 62 (!) for 8 threads)\n        ASSERT (g_NumExceptionsCaught == 1 || okayNoExceptionsCaught, \"No exception registered\");\n        ASSERT (g_CurExecuted >= minExecuted, \"Too few tasks executed\");\n        ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");\n        // a small number of threads can execute in a throwing sub-pfor, if the task which is\n        // to do the solitary throw swaps out after registering its intent to throw but before it\n        // actually does so.  (Or is this caused by the extra threads participating? No, the\n        // number of extra tasks is sometimes far greater than the number of extra threads.)\n        ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, \"Too many tasks survived exception\");\n        if(g_CurExecuted > minExecuted + g_NumThreads) REMARK(\"Unusual number of tasks executed after signal (%d vs. %d)\\n\",\n                (int)g_CurExecuted, minExecuted + g_NumThreads);\n    }\n    else {\n        ASSERT ((g_NumExceptionsCaught >= 1 && g_NumExceptionsCaught <= outerCalls) || okayNoExceptionsCaught, \"Unexpected actual number of exceptions\");\n        ASSERT (g_CurExecuted >= minExecuted, \"Too few executed tasks reported\");\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived multiple exceptions\");\n        if(g_CurExecuted > g_ExecutedAtLastCatch + g_NumThreads) REMARK(\"Unusual number of tasks executed after signal (%d vs. %d)\\n\",\n                (int)g_CurExecuted, g_ExecutedAtLastCatch + g_NumThreads);\n        ASSERT (g_CurExecuted <= outerCalls * (1 + g_NumThreads), \"Too many tasks survived exception\");\n    }\n} // void Test4 ()\n\n#endif /* TBB_USE_EXCEPTIONS */\n\nclass ParForBodyToCancel {\npublic:\n    void operator()( const range_type& ) const {\n        ++g_CurExecuted;\n        CancellatorTask::WaitUntilReady();\n    }\n};\n\ntemplate<class B>\nclass ParForLauncherTask : public tbb::task {\n    tbb::task_group_context &my_ctx;\n\n    tbb::task* execute () __TBB_override {\n        tbb::parallel_for( range_type(0, FLAT_RANGE, FLAT_GRAIN), B(), tbb::simple_partitioner(), my_ctx );\n        return NULL;\n    }\npublic:\n    ParForLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\nvoid TestCancelation1 () {\n    ResetGlobals( false );\n    RunCancellationTest<ParForLauncherTask<ParForBodyToCancel>, CancellatorTask>( NumSubranges(FLAT_RANGE, FLAT_GRAIN) / 4 );\n}\n\nclass CancellatorTask2 : public tbb::task {\n    tbb::task_group_context &m_GroupToCancel;\n\n    tbb::task* execute () __TBB_override {\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n        m_GroupToCancel.cancel_group_execution();\n        g_ExecutedAtLastCatch = g_CurExecuted;\n        return NULL;\n    }\npublic:\n    CancellatorTask2 ( tbb::task_group_context& ctx, intptr_t ) : m_GroupToCancel(ctx) {}\n};\n\nclass ParForBodyToCancel2 {\npublic:\n    void operator()( const range_type& ) const {\n        ++g_CurExecuted;\n        Harness::ConcurrencyTracker ct;\n        // The test will hang (and be timed out by the test system) if is_cancelled() is broken\n        while( !tbb::task::self().is_cancelled() )\n            __TBB_Yield();\n    }\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\n/** This version also tests task::is_cancelled() method. **/\nvoid TestCancelation2 () {\n    ResetGlobals();\n    RunCancellationTest<ParForLauncherTask<ParForBodyToCancel2>, CancellatorTask2>();\n    ASSERT (g_ExecutedAtLastCatch < g_NumThreads, \"Somehow worker tasks started their execution before the cancellator task\");\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived cancellation\");\n    ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Some tasks were executed after cancellation\");\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Regression test based on the contribution by the author of the following forum post:\n// http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30254959.aspx\n\nclass Worker {\n    static const int max_nesting = 3;\n    static const int reduce_range = 1024;\n    static const int reduce_grain = 256;\npublic:\n    int DoWork (int level);\n    int Validate (int start_level) {\n        int expected = 1; // identity for multiplication\n        for(int i=start_level+1; i<max_nesting; ++i)\n             expected *= reduce_range;\n        return expected;\n    }\n};\n\nclass RecursiveParReduceBodyWithSharedWorker {\n    Worker * m_SharedWorker;\n    int m_NestingLevel;\n    int m_Result;\npublic:\n    RecursiveParReduceBodyWithSharedWorker ( RecursiveParReduceBodyWithSharedWorker& src, tbb::split )\n        : m_SharedWorker(src.m_SharedWorker)\n        , m_NestingLevel(src.m_NestingLevel)\n        , m_Result(0)\n    {}\n    RecursiveParReduceBodyWithSharedWorker ( Worker *w, int outer )\n        : m_SharedWorker(w)\n        , m_NestingLevel(outer)\n        , m_Result(0)\n    {}\n\n    void operator() ( const tbb::blocked_range<size_t>& r ) {\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        for (size_t i = r.begin (); i != r.end (); ++i) {\n            m_Result += m_SharedWorker->DoWork (m_NestingLevel);\n        }\n    }\n    void join (const RecursiveParReduceBodyWithSharedWorker & x) {\n        m_Result += x.m_Result;\n    }\n    int result () { return m_Result; }\n};\n\nint Worker::DoWork ( int level ) {\n    ++level;\n    if ( level < max_nesting ) {\n        RecursiveParReduceBodyWithSharedWorker rt (this, level);\n        tbb::parallel_reduce (tbb::blocked_range<size_t>(0, reduce_range, reduce_grain), rt);\n        return rt.result();\n    }\n    else\n        return 1;\n}\n\n//! Regression test for hanging that occurred with the first version of cancellation propagation\nvoid TestCancelation3 () {\n    Worker w;\n    int result   = w.DoWork (0);\n    int expected = w.Validate(0);\n    ASSERT ( result == expected, \"Wrong calculation result\");\n}\n\nstruct StatsCounters {\n    tbb::atomic<size_t> my_total_created;\n    tbb::atomic<size_t> my_total_deleted;\n    StatsCounters() {\n        my_total_created = 0;\n        my_total_deleted = 0;\n    }\n};\n\nclass ParReduceBody {\n    StatsCounters* my_stats;\n    size_t my_id;\n    bool my_exception;\n\npublic:\n    ParReduceBody( StatsCounters& s_, bool e_ ) : my_stats(&s_), my_exception(e_) {\n        my_id = my_stats->my_total_created++;\n    }\n\n    ParReduceBody( const ParReduceBody& lhs ) {\n        my_stats = lhs.my_stats;\n        my_id = my_stats->my_total_created++;\n    }\n\n    ParReduceBody( ParReduceBody& lhs, tbb::split ) {\n        my_stats = lhs.my_stats;\n        my_id = my_stats->my_total_created++;\n    }\n\n    ~ParReduceBody(){ ++my_stats->my_total_deleted; }\n\n    void operator()( const tbb::blocked_range<std::size_t>& /*range*/ ) const {\n        //Do nothing, except for one task (chosen arbitrarily)\n        if( my_id >= 12 ) {\n            if( my_exception )\n                ThrowTestException(1);\n            else\n                tbb::task::self().cancel_group_execution();\n        }\n    }\n\n    void join( ParReduceBody& /*rhs*/ ) {}\n};\n\nvoid TestCancelation4() {\n    StatsCounters statsObj;\n    __TBB_TRY {\n        tbb::task_group_context tgc1, tgc2;\n        ParReduceBody body_for_cancellation(statsObj, false), body_for_exception(statsObj, true);\n        tbb::parallel_reduce( tbb::blocked_range<std::size_t>(0,100000000,100), body_for_cancellation, tbb::simple_partitioner(), tgc1 );\n        tbb::parallel_reduce( tbb::blocked_range<std::size_t>(0,100000000,100), body_for_exception, tbb::simple_partitioner(), tgc2 );\n    } __TBB_CATCH(...) {}\n    ASSERT ( statsObj.my_total_created==statsObj.my_total_deleted, \"Not all parallel_reduce body objects created were reclaimed\");\n}\n\nvoid RunParForAndReduceTests () {\n    REMARK( \"parallel for and reduce tests\\n\" );\n    tbb::task_scheduler_init init (g_NumThreads);\n    g_Master = Harness::CurrentTid();\n\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    Test0();\n    Test1();\n    Test2();\n    Test3();\n    Test4();\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n    TestCancelation1();\n    TestCancelation2();\n    TestCancelation3();\n    TestCancelation4();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Tests for tbb::parallel_do\n\n#define ITER_RANGE          1000\n#define ITEMS_TO_FEED       50\n#define INNER_ITER_RANGE   100\n#define OUTER_ITER_RANGE  50\n\n#define PREPARE_RANGE(Iterator, rangeSize)  \\\n    size_t test_vector[rangeSize + 1]; \\\n    for (int i =0; i < rangeSize; i++) \\\n        test_vector[i] = i; \\\n    Iterator begin(&test_vector[0]); \\\n    Iterator end(&test_vector[rangeSize])\n\nvoid Feed ( tbb::parallel_do_feeder<size_t> &feeder, size_t val ) {\n    if (g_FedTasksCount < ITEMS_TO_FEED) {\n        ++g_FedTasksCount;\n        feeder.add(val);\n    }\n}\n\n#include \"harness_iterator.h\"\n\n#if TBB_USE_EXCEPTIONS\n\n// Simple functor object with exception\nclass SimpleParDoBody {\npublic:\n    void operator() ( size_t &value ) const {\n        ++g_CurExecuted;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        Harness::ConcurrencyTracker ct;\n        value += 1000;\n        WaitUntilConcurrencyPeaks();\n        ThrowTestException(1);\n    }\n};\n\n// Simple functor object with exception and feeder\nclass SimpleParDoBodyWithFeeder : SimpleParDoBody {\npublic:\n    void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        Feed(feeder, 0);\n        SimpleParDoBody::operator()(value);\n    }\n};\n\n// Tests exceptions without nesting\ntemplate <class Iterator, class simple_body>\nvoid Test1_parallel_do () {\n    ResetGlobals();\n    PREPARE_RANGE(Iterator, ITER_RANGE);\n    TRY();\n        tbb::parallel_do<Iterator, simple_body>(begin, end, simple_body() );\n    CATCH_AND_ASSERT();\n    ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived cancellation\");\n    ASSERT (g_NumExceptionsCaught == 1, \"No try_blocks in any body expected in this test\");\n    if ( !g_SolitaryException )\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n\n} // void Test1_parallel_do ()\n\ntemplate <class Iterator>\nclass OuterParDoBody {\npublic:\n    void operator()( size_t& /*value*/ ) const {\n        ++g_OuterParCalls;\n        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);\n        tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody());\n    }\n};\n\ntemplate <class Iterator>\nclass OuterParDoBodyWithFeeder : OuterParDoBody<Iterator> {\npublic:\n    void operator()( size_t& value, tbb::parallel_do_feeder<size_t>& feeder ) const {\n        Feed(feeder, 0);\n        OuterParDoBody<Iterator>::operator()(value);\n    }\n};\n\n//! Uses parallel_do body containing an inner parallel_do with the default context not wrapped by a try-block.\n/** Inner algorithms are spawned inside the new bound context by default. Since\n    exceptions thrown from the inner parallel_do are not handled by the caller\n    (outer parallel_do body) in this test, they will cancel all the sibling inner\n    algorithms. **/\ntemplate <class Iterator, class outer_body>\nvoid Test2_parallel_do () {\n    ResetGlobals();\n    PREPARE_RANGE(Iterator, ITER_RANGE);\n    TRY();\n        tbb::parallel_do<Iterator, outer_body >(begin, end, outer_body() );\n    CATCH_AND_ASSERT();\n    //if ( g_SolitaryException )\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived cancellation\");\n    ASSERT (g_NumExceptionsCaught == 1, \"No try_blocks in any body expected in this test\");\n    if ( !g_SolitaryException )\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n} // void Test2_parallel_do ()\n\ntemplate <class Iterator>\nclass OuterParDoBodyWithIsolatedCtx {\npublic:\n    void operator()( size_t& /*value*/ ) const {\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        ++g_OuterParCalls;\n        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);\n        tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);\n    }\n};\n\ntemplate <class Iterator>\nclass OuterParDoBodyWithIsolatedCtxWithFeeder : OuterParDoBodyWithIsolatedCtx<Iterator> {\npublic:\n    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        Feed(feeder, 0);\n        OuterParDoBodyWithIsolatedCtx<Iterator>::operator()(value);\n    }\n};\n\n//! Uses parallel_do body invoking an inner parallel_do with an isolated context without a try-block.\n/** Even though exceptions thrown from the inner parallel_do are not handled\n    by the caller in this test, they will not affect sibling inner algorithms\n    already running because of the isolated contexts. However because the first\n    exception cancels the root parallel_do, at most the first g_NumThreads subranges\n    will be processed (which launch inner parallel_dos) **/\ntemplate <class Iterator, class outer_body>\nvoid Test3_parallel_do () {\n    ResetGlobals();\n    PREPARE_RANGE(Iterator, OUTER_ITER_RANGE);\n    intptr_t innerCalls = INNER_ITER_RANGE,\n             // The assumption here is the same as in outer parallel fors.\n             minExecuted = (g_NumThreads - 1) * innerCalls;\n    g_Master = Harness::CurrentTid();\n    TRY();\n        tbb::parallel_do<Iterator, outer_body >(begin, end, outer_body());\n    CATCH_AND_ASSERT();\n    // figure actual number of expected executions given the number of outer PDos started.\n    minExecuted = (g_OuterParCalls - 1) * innerCalls;\n    // one extra thread may run a task that sees cancellation.  Infrequent but possible\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");\n    if(g_TGCCancelled > g_NumThreads) REMARK(\"Extra thread(s) executed after cancel (%d vs. %d)\\n\",\n            (int)g_TGCCancelled, (int)g_NumThreads);\n    if ( g_SolitaryException ) {\n        ASSERT (g_CurExecuted > minExecuted, \"Too few tasks survived exception\");\n        ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtLastCatch + g_NumThreads), \"Too many tasks survived exception\");\n    }\n    ASSERT (g_NumExceptionsCaught == 1, \"No try_blocks in any body expected in this test\");\n    if ( !g_SolitaryException )\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n} // void Test3_parallel_do ()\n\ntemplate <class Iterator>\nclass OuterParDoWithEhBody {\npublic:\n    void operator()( size_t& /*value*/ ) const {\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        ++g_OuterParCalls;\n        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);\n        TRY();\n            tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);\n        CATCH();\n    }\n};\n\ntemplate <class Iterator>\nclass OuterParDoWithEhBodyWithFeeder : NoAssign, OuterParDoWithEhBody<Iterator> {\npublic:\n    void operator()( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        Feed(feeder, 0);\n        OuterParDoWithEhBody<Iterator>::operator()(value);\n    }\n};\n\n//! Uses parallel_for body invoking an inner parallel_for (with default bound context) inside a try-block.\n/** Since exception(s) thrown from the inner parallel_for are handled by the caller\n    in this test, they do not affect neither other tasks of the the root parallel_for\n    nor sibling inner algorithms. **/\ntemplate <class Iterator, class outer_body_with_eh>\nvoid Test4_parallel_do () {\n    ResetGlobals( true, true );\n    PREPARE_RANGE(Iterator, OUTER_ITER_RANGE);\n    g_Master = Harness::CurrentTid();\n    TRY();\n        tbb::parallel_do<Iterator, outer_body_with_eh>(begin, end, outer_body_with_eh());\n    CATCH();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"All exceptions must have been handled in the parallel_do body\");\n    intptr_t innerCalls = INNER_ITER_RANGE,\n             outerCalls = OUTER_ITER_RANGE + g_FedTasksCount,\n             maxExecuted = outerCalls * innerCalls,\n             minExecuted = 0;\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");\n    if ( g_SolitaryException ) {\n        minExecuted = maxExecuted - innerCalls;\n        ASSERT (g_NumExceptionsCaught == 1, \"No exception registered\");\n        ASSERT (g_CurExecuted >= minExecuted, \"Too few tasks executed\");\n        // This test has the same property as Test4 (parallel_for); the exception can be\n        // thrown, but some number of tasks from the outer Pdo can execute after the throw but\n        // before the cancellation is signaled (have seen 36).\n        ASSERT_WARNING(g_CurExecuted < maxExecuted || g_TGCCancelled, \"All tasks survived exception. Oversubscription?\");\n    }\n    else {\n        minExecuted = g_NumExceptionsCaught;\n        ASSERT (g_NumExceptionsCaught > 1 && g_NumExceptionsCaught <= outerCalls, \"Unexpected actual number of exceptions\");\n        ASSERT (g_CurExecuted >= minExecuted, \"Too many executed tasks reported\");\n        ASSERT (g_CurExecuted < g_ExecutedAtLastCatch + g_NumThreads + outerCalls, \"Too many tasks survived multiple exceptions\");\n        ASSERT (g_CurExecuted <= outerCalls * (1 + g_NumThreads), \"Too many tasks survived exception\");\n    }\n} // void Test4_parallel_do ()\n\n// This body throws an exception only if the task was added by feeder\nclass ParDoBodyWithThrowingFeederTasks {\npublic:\n    //! This form of the function call operator can be used when the body needs to add more work during the processing\n    void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        ++g_CurExecuted;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        Feed(feeder, 1);\n        if (value == 1)\n            ThrowTestException(1);\n    }\n}; // class ParDoBodyWithThrowingFeederTasks\n\n// Test exception in task, which was added by feeder.\ntemplate <class Iterator>\nvoid Test5_parallel_do () {\n    ResetGlobals();\n    PREPARE_RANGE(Iterator, ITER_RANGE);\n    g_Master = Harness::CurrentTid();\n    TRY();\n        tbb::parallel_do<Iterator, ParDoBodyWithThrowingFeederTasks>(begin, end, ParDoBodyWithThrowingFeederTasks());\n    CATCH();\n    if (g_SolitaryException) {\n        // Failure occurs when g_ExceptionInMaster is false, but all the 1 values in the range\n        // are handled by the master thread.  In this case no throw occurs.\n        ASSERT (l_ExceptionCaughtAtCurrentLevel     // we saw an exception\n                || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) // non-master throws but none tried\n                || (g_ExceptionInMaster && !g_MasterExecutedThrow)     // master throws but master didn't try\n                , \"At least one exception should occur\");\n        if(!g_ExceptionCaught) {\n            if(g_ExceptionInMaster)\n                REMARK(\"PDo exception not thrown; non-masters handled all throwing values.\\n\");\n            else\n                REMARK(\"PDo exception not thrown; master handled all throwing values.\\n\");\n        }\n    }\n} // void Test5_parallel_do ()\n\n#endif /* TBB_USE_EXCEPTIONS */\n\nclass ParDoBodyToCancel {\npublic:\n    void operator()( size_t& /*value*/ ) const {\n        ++g_CurExecuted;\n        CancellatorTask::WaitUntilReady();\n    }\n};\n\nclass ParDoBodyToCancelWithFeeder : ParDoBodyToCancel {\npublic:\n    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        Feed(feeder, 0);\n        ParDoBodyToCancel::operator()(value);\n    }\n};\n\ntemplate<class B, class Iterator>\nclass ParDoWorkerTask : public tbb::task {\n    tbb::task_group_context &my_ctx;\n\n    tbb::task* execute () __TBB_override {\n        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);\n        tbb::parallel_do<Iterator, B>( begin, end, B(), my_ctx );\n        return NULL;\n    }\npublic:\n    ParDoWorkerTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\ntemplate <class Iterator, class body_to_cancel>\nvoid TestCancelation1_parallel_do () {\n    ResetGlobals( false );\n    intptr_t  threshold = 10;\n    tbb::task_group_context  ctx;\n    ctx.reset();\n    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    r.set_ref_count(3);\n    r.spawn( *new( r.allocate_child() ) CancellatorTask(ctx, threshold) );\n    __TBB_Yield();\n    r.spawn( *new( r.allocate_child() ) ParDoWorkerTask<body_to_cancel, Iterator>(ctx) );\n    TRY();\n        r.wait_for_all();\n    CATCH_AND_FAIL();\n    ASSERT (g_CurExecuted < g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks were executed after cancellation\");\n    r.destroy(r);\n}\n\nclass ParDoBodyToCancel2 {\npublic:\n    void operator()( size_t& /*value*/ ) const {\n        ++g_CurExecuted;\n        Harness::ConcurrencyTracker ct;\n        // The test will hang (and be timed out by the test system) if is_cancelled() is broken\n        while( !tbb::task::self().is_cancelled() )\n            __TBB_Yield();\n    }\n};\n\nclass ParDoBodyToCancel2WithFeeder : ParDoBodyToCancel2 {\npublic:\n    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {\n        Feed(feeder, 0);\n        ParDoBodyToCancel2::operator()(value);\n    }\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\n/** This version also tests task::is_cancelled() method. **/\ntemplate <class Iterator, class body_to_cancel>\nvoid TestCancelation2_parallel_do () {\n    ResetGlobals();\n    RunCancellationTest<ParDoWorkerTask<body_to_cancel, Iterator>, CancellatorTask2>();\n}\n\n#define RunWithSimpleBody(func, body)       \\\n    func<Harness::RandomIterator<size_t>, body>();           \\\n    func<Harness::RandomIterator<size_t>, body##WithFeeder>();  \\\n    func<Harness::ForwardIterator<size_t>, body>();         \\\n    func<Harness::ForwardIterator<size_t>, body##WithFeeder>()\n\n#define RunWithTemplatedBody(func, body)       \\\n    func<Harness::RandomIterator<size_t>, body<Harness::RandomIterator<size_t> > >();           \\\n    func<Harness::RandomIterator<size_t>, body##WithFeeder<Harness::RandomIterator<size_t> > >();  \\\n    func<Harness::ForwardIterator<size_t>, body<Harness::ForwardIterator<size_t> > >();         \\\n    func<Harness::ForwardIterator<size_t>, body##WithFeeder<Harness::ForwardIterator<size_t> > >()\n\nvoid RunParDoTests() {\n    REMARK( \"parallel do tests\\n\" );\n    tbb::task_scheduler_init init (g_NumThreads);\n    g_Master = Harness::CurrentTid();\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    RunWithSimpleBody(Test1_parallel_do, SimpleParDoBody);\n    RunWithTemplatedBody(Test2_parallel_do, OuterParDoBody);\n    RunWithTemplatedBody(Test3_parallel_do, OuterParDoBodyWithIsolatedCtx);\n    RunWithTemplatedBody(Test4_parallel_do, OuterParDoWithEhBody);\n    Test5_parallel_do<Harness::ForwardIterator<size_t> >();\n    Test5_parallel_do<Harness::RandomIterator<size_t> >();\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n    RunWithSimpleBody(TestCancelation1_parallel_do, ParDoBodyToCancel);\n    RunWithSimpleBody(TestCancelation2_parallel_do, ParDoBodyToCancel2);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Tests for tbb::pipeline\n\n#define NUM_ITEMS   100\n\nconst size_t c_DataEndTag = size_t(~0);\n\nint g_NumTokens = 0;\n\n// Simple input filter class, it assigns 1 to all array members\n// It stops when it receives item equal to -1\nclass InputFilter: public tbb::filter {\n    tbb::atomic<size_t> m_Item;\n    size_t m_Buffer[NUM_ITEMS + 1];\npublic:\n    InputFilter() : tbb::filter(parallel) {\n        m_Item = 0;\n        for (size_t i = 0; i < NUM_ITEMS; ++i )\n            m_Buffer[i] = 1;\n        m_Buffer[NUM_ITEMS] = c_DataEndTag;\n    }\n\n    void* operator()( void* ) __TBB_override {\n        size_t item = m_Item.fetch_and_increment();\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        if(item == 1) {\n            ++g_PipelinesStarted;   // count on emitting the first item.\n        }\n        if ( item >= NUM_ITEMS )\n            return NULL;\n        m_Buffer[item] = 1;\n        return &m_Buffer[item];\n    }\n\n    size_t* buffer() { return m_Buffer; }\n}; // class InputFilter\n\n// Pipeline filter, without exceptions throwing\nclass NoThrowFilter : public tbb::filter {\n    size_t m_Value;\npublic:\n    enum operation {\n        addition,\n        subtraction,\n        multiplication\n    } m_Operation;\n\n    NoThrowFilter(operation _operation, size_t value, bool is_parallel)\n        : filter(is_parallel? tbb::filter::parallel : tbb::filter::serial_in_order),\n        m_Value(value), m_Operation(_operation)\n    {}\n    void* operator()(void* item) __TBB_override {\n        size_t &value = *(size_t*)item;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        ASSERT(value != c_DataEndTag, \"terminator element is being processed\");\n        switch (m_Operation){\n            case addition:\n                value += m_Value;\n                break;\n            case subtraction:\n                value -= m_Value;\n                break;\n            case multiplication:\n                value *= m_Value;\n                break;\n            default:\n                ASSERT(0, \"Wrong operation parameter passed to NoThrowFilter\");\n        } // switch (m_Operation)\n        return item;\n    }\n};\n\n// Test pipeline without exceptions throwing\nvoid Test0_pipeline () {\n    ResetGlobals();\n    // Run test when serial filter is the first non-input filter\n    InputFilter inputFilter;  //Emits NUM_ITEMS items\n    NoThrowFilter filter1(NoThrowFilter::addition, 99, false);\n    NoThrowFilter filter2(NoThrowFilter::subtraction, 90, true);\n    NoThrowFilter filter3(NoThrowFilter::multiplication, 5, false);\n    // Result should be 50 for all items except the last\n    tbb::pipeline p;\n    p.add_filter(inputFilter);\n    p.add_filter(filter1);\n    p.add_filter(filter2);\n    p.add_filter(filter3);\n    p.run(8);\n    for (size_t i = 0; i < NUM_ITEMS; ++i)\n        ASSERT(inputFilter.buffer()[i] == 50, \"pipeline didn't process items properly\");\n} // void Test0_pipeline ()\n\n#if TBB_USE_EXCEPTIONS\n\n// Simple filter with exception throwing.  If parallel, will wait until\n// as many parallel filters start as there are threads.\nclass SimpleFilter : public tbb::filter {\n    bool m_canThrow;\npublic:\n    SimpleFilter (tbb::filter::mode _mode, bool canThrow ) : filter (_mode), m_canThrow(canThrow) {}\n    void* operator()(void* item) __TBB_override {\n        ++g_CurExecuted;\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled() ) ++g_TGCCancelled;\n        if ( m_canThrow ) {\n            if ( !is_serial() ) {\n                Harness::ConcurrencyTracker ct;\n                WaitUntilConcurrencyPeaks( min(g_NumTokens, g_NumThreads) );\n            }\n            ThrowTestException(1);\n        }\n        return item;\n    }\n}; // class SimpleFilter\n\n// This enumeration represents filters order in pipeline\nstruct FilterSet {\n    tbb::filter::mode   mode1,\n                        mode2;\n    bool                throw1,\n                        throw2;\n\n    FilterSet( tbb::filter::mode m1, tbb::filter::mode m2, bool t1, bool t2 )\n        : mode1(m1), mode2(m2), throw1(t1), throw2(t2)\n    {}\n}; // struct FilterSet\n\nFilterSet serial_parallel( tbb::filter::serial, tbb::filter::parallel, /*throw1*/false, /*throw2*/true );\n\ntemplate<typename InFilter, typename Filter>\nclass CustomPipeline : protected tbb::pipeline {\n    InFilter inputFilter;\n    Filter filter1;\n    Filter filter2;\npublic:\n    CustomPipeline( const FilterSet& filters )\n        : filter1(filters.mode1, filters.throw1), filter2(filters.mode2, filters.throw2)\n    {\n       add_filter(inputFilter);\n       add_filter(filter1);\n       add_filter(filter2);\n    }\n    void run () { tbb::pipeline::run(g_NumTokens); }\n    void run ( tbb::task_group_context& ctx ) { tbb::pipeline::run(g_NumTokens, ctx); }\n\n    using tbb::pipeline::add_filter;\n};\n\ntypedef CustomPipeline<InputFilter, SimpleFilter> SimplePipeline;\n\n// Tests exceptions without nesting\nvoid Test1_pipeline ( const FilterSet& filters ) {\n    ResetGlobals();\n    SimplePipeline testPipeline(filters);\n    TRY();\n        testPipeline.run();\n        if ( g_CurExecuted == 2 * NUM_ITEMS ) {\n            // all the items were processed, though an exception was supposed to occur.\n            if(!g_ExceptionInMaster && g_NonMasterExecutedThrow > 0) {\n                // if !g_ExceptionInMaster, the master thread is not allowed to throw.\n                // if g_nonMasterExcutedThrow > 0 then a thread besides the master tried to throw.\n                ASSERT(filters.mode1 != tbb::filter::parallel && filters.mode2 != tbb::filter::parallel, \"Unusual count\");\n            }\n            else {\n                REMARK(\"test1_Pipeline with %d threads: Only the master thread tried to throw, and it is not allowed to.\\n\", (int)g_NumThreads);\n            }\n            // In case of all serial filters they might be all executed in the thread(s)\n            // where exceptions are not allowed by the common test logic. So we just quit.\n            return;\n        }\n    CATCH_AND_ASSERT();\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");\n    ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n    ASSERT (g_NumExceptionsCaught == 1, \"No try_blocks in any body expected in this test\");\n    if ( !g_SolitaryException )\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n\n} // void Test1_pipeline ()\n\n// Filter with nesting\nclass OuterFilter : public tbb::filter {\npublic:\n    OuterFilter (tbb::filter::mode _mode, bool ) : filter (_mode) {}\n\n    void* operator()(void* item) __TBB_override {\n        ++g_OuterParCalls;\n        SimplePipeline testPipeline(serial_parallel);\n        testPipeline.run();\n        return item;\n    }\n}; // class OuterFilter\n\n//! Uses pipeline containing an inner pipeline with the default context not wrapped by a try-block.\n/** Inner algorithms are spawned inside the new bound context by default. Since\n    exceptions thrown from the inner pipeline are not handled by the caller\n    (outer pipeline body) in this test, they will cancel all the sibling inner\n    algorithms. **/\nvoid Test2_pipeline ( const FilterSet& filters ) {\n    ResetGlobals();\n    g_NestedPipelines = true;\n    CustomPipeline<InputFilter, OuterFilter> testPipeline(filters);\n    TRY();\n        testPipeline.run();\n    CATCH_AND_ASSERT();\n    bool okayNoExceptionCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow);\n    ASSERT (g_NumExceptionsCaught == 1 || okayNoExceptionCaught, \"No try_blocks in any body expected in this test\");\n    if ( g_SolitaryException ) {\n        if( g_TGCCancelled > g_NumThreads) REMARK( \"Extra tasks ran after exception thrown (%d vs. %d)\\n\",\n                (int)g_TGCCancelled, (int)g_NumThreads);\n    }\n    else {\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived exception\");\n    }\n} // void Test2_pipeline ()\n\n//! creates isolated inner pipeline and runs it.\nclass OuterFilterWithIsolatedCtx : public tbb::filter {\npublic:\n    OuterFilterWithIsolatedCtx(tbb::filter::mode m, bool ) : filter(m) {}\n\n    void* operator()(void* item) __TBB_override {\n        ++g_OuterParCalls;\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        // create inner pipeline with serial input, parallel output filter, second filter throws\n        SimplePipeline testPipeline(serial_parallel);\n        testPipeline.run(ctx);\n        return item;\n    }\n}; // class OuterFilterWithIsolatedCtx\n\n//! Uses pipeline invoking an inner pipeline with an isolated context without a try-block.\n/** Even though exceptions thrown from the inner pipeline are not handled\n    by the caller in this test, they will not affect sibling inner algorithms\n    already running because of the isolated contexts. However because the first\n    exception cancels the root parallel_do only the first g_NumThreads subranges\n    will be processed (which launch inner pipelines) **/\nvoid Test3_pipeline ( const FilterSet& filters ) {\n    for( int nTries = 1; nTries <= 4; ++nTries) {\n        ResetGlobals();\n        g_NestedPipelines = true;\n        g_Master = Harness::CurrentTid();\n        intptr_t innerCalls = NUM_ITEMS,\n                 minExecuted = (g_NumThreads - 1) * innerCalls;\n        CustomPipeline<InputFilter, OuterFilterWithIsolatedCtx> testPipeline(filters);\n        TRY();\n            testPipeline.run();\n        CATCH_AND_ASSERT();\n\n        bool okayNoExceptionCaught = (g_ExceptionInMaster && !g_MasterExecuted) ||\n            (!g_ExceptionInMaster && !g_NonMasterExecuted);\n        // only test assertions if the test threw an exception (or we don't care)\n        bool testSucceeded = okayNoExceptionCaught || g_NumExceptionsCaught > 0;\n        if(testSucceeded) {\n            if (g_SolitaryException) {\n\n                // The test is one outer pipeline with two NestedFilters that each start an inner pipeline.\n                // Each time the input filter of a pipeline delivers its first item, it increments\n                // g_PipelinesStarted.  When g_SolitaryException, the throw will not occur until\n                // g_PipelinesStarted >= 3.  (This is so at least a second pipeline in its own isolated\n                // context will start; that is what we're testing.)\n                //\n                // There are two pipelines which will NOT run to completion when a solitary throw\n                // happens in an isolated inner context: the outer pipeline and the pipeline which\n                // throws.  All the other pipelines which start should run to completion.  But only\n                // inner body invocations are counted.\n                //\n                // So g_CurExecuted should be about\n                //\n                //   (2*NUM_ITEMS) * (g_PipelinesStarted - 2) + 1\n                //   ^ executions for each completed pipeline\n                //                   ^ completing pipelines (remembering two will not complete)\n                //                                              ^ one for the inner throwing pipeline\n\n                minExecuted = (2*NUM_ITEMS) * (g_PipelinesStarted - 2) + 1;\n                // each failing pipeline must execute at least two tasks\n                ASSERT(g_CurExecuted >= minExecuted, \"Too few tasks survived exception\");\n                // no more than g_NumThreads tasks will be executed in a cancelled context.  Otherwise\n                // tasks not executing at throw were scheduled.\n                ASSERT( g_TGCCancelled <= g_NumThreads, \"Tasks not in-flight were executed\");\n                ASSERT(g_NumExceptionsCaught == 1, \"Should have only one exception\");\n                // if we're only throwing from the master thread, and that thread didn't\n                // participate in the pipelines, then no throw occurred.\n                if(g_ExceptionInMaster && !g_MasterExecuted) {\n                    REMARK_ONCE(\"Master expected to throw, but didn't participate.\\n\");\n                }\n                else if(!g_ExceptionInMaster && !g_NonMasterExecuted) {\n                    REMARK_ONCE(\"Non-master expected to throw, but didn't participate.\\n\");\n                }\n            }\n            ASSERT (g_NumExceptionsCaught == 1 || okayNoExceptionCaught, \"No try_blocks in any body expected in this test\");\n            ASSERT ((g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads) || okayNoExceptionCaught, \"Too many tasks survived exception\");\n            if(nTries > 1) REMARK(\"Test3_pipeline succeeeded on try %d\\n\", nTries);\n            return;\n        }\n    }\n    REMARK_ONCE(\"Test3_pipeline failed for g_NumThreads==%d, g_ExceptionInMaster==%s , g_SolitaryException==%s\\n\",\n            g_NumThreads, g_ExceptionInMaster?\"T\":\"F\", g_SolitaryException?\"T\":\"F\");\n} // void Test3_pipeline ()\n\nclass OuterFilterWithEhBody : public tbb::filter {\npublic:\n    OuterFilterWithEhBody(tbb::filter::mode m, bool ) : filter(m) {}\n\n    void* operator()(void* item) __TBB_override {\n        tbb::task_group_context ctx(tbb::task_group_context::isolated);\n        ++g_OuterParCalls;\n        SimplePipeline testPipeline(serial_parallel);\n        TRY();\n            testPipeline.run(ctx);\n        CATCH();\n        return item;\n    }\n}; // class OuterFilterWithEhBody\n\n//! Uses pipeline body invoking an inner pipeline (with isolated context) inside a try-block.\n/** Since exception(s) thrown from the inner pipeline are handled by the caller\n    in this test, they do not affect other tasks of the the root pipeline\n    nor sibling inner algorithms. **/\nvoid Test4_pipeline ( const FilterSet& filters ) {\n#if __GNUC__ && !__INTEL_COMPILER\n    if ( strncmp(__VERSION__, \"4.1.0\", 5) == 0 ) {\n        REMARK_ONCE(\"Known issue: one of exception handling tests is skipped.\\n\");\n        return;\n    }\n#endif\n    ResetGlobals( true, true );\n    // each outer pipeline stage will start NUM_ITEMS inner pipelines.\n    // each inner pipeline that doesn't throw will process NUM_ITEMS items.\n    // for solitary exception there will be one pipeline that only processes one stage, one item.\n    // innerCalls should be 2*NUM_ITEMS\n    intptr_t innerCalls = 2*NUM_ITEMS,\n             outerCalls = 2 * NUM_ITEMS,\n             maxExecuted = outerCalls * innerCalls;  // the number of invocations of the inner pipelines\n    CustomPipeline<InputFilter, OuterFilterWithEhBody> testPipeline(filters);\n    TRY();\n        testPipeline.run();\n    CATCH_AND_ASSERT();\n    intptr_t  minExecuted = 0;\n    bool okayNoExceptionCaught = (g_ExceptionInMaster && !g_MasterExecuted) ||\n        (!g_ExceptionInMaster && !g_NonMasterExecuted);\n    if ( g_SolitaryException ) {\n        minExecuted = maxExecuted - innerCalls;  // one throwing inner pipeline\n        ASSERT (g_NumExceptionsCaught == 1 || okayNoExceptionCaught, \"No exception registered\");\n        ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived exception\");  // probably will assert.\n    }\n    else {\n        // we assume throwing pipelines will not count\n        minExecuted = (outerCalls - g_NumExceptionsCaught) * innerCalls;\n        ASSERT((g_NumExceptionsCaught >= 1 && g_NumExceptionsCaught <= outerCalls)||okayNoExceptionCaught, \"Unexpected actual number of exceptions\");\n        ASSERT (g_CurExecuted >= minExecuted, \"Too many executed tasks reported\");\n        // too many already-scheduled tasks are started after the first exception is\n        // thrown.  And g_ExecutedAtLastCatch is updated every time an exception is caught.\n        // So with multiple exceptions there are a variable number of tasks that have been\n        // discarded because of the signals.\n        // each throw is caught, so we will see many cancelled tasks.  g_ExecutedAtLastCatch is\n        // updated with each throw, so the value will be the number of tasks executed at the last\n        ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks survived multiple exceptions\");\n    }\n} // void Test4_pipeline ()\n\n//! Testing filter::finalize method\n#define BUFFER_SIZE     32\n#define NUM_BUFFERS     1024\n\ntbb::atomic<size_t> g_AllocatedCount; // Number of currently allocated buffers\ntbb::atomic<size_t> g_TotalCount; // Total number of allocated buffers\n\n//! Base class for all filters involved in finalize method testing\nclass FinalizationBaseFilter : public tbb::filter {\npublic:\n    FinalizationBaseFilter ( tbb::filter::mode m ) : filter(m) {}\n\n    // Deletes buffers if exception occurred\n    virtual void finalize( void* item ) __TBB_override {\n        size_t* m_Item = (size_t*)item;\n        delete[] m_Item;\n        --g_AllocatedCount;\n    }\n};\n\n//! Input filter to test finalize method\nclass InputFilterWithFinalization: public FinalizationBaseFilter {\npublic:\n    InputFilterWithFinalization() : FinalizationBaseFilter(tbb::filter::serial) {\n        g_TotalCount = 0;\n    }\n    void* operator()( void* ) __TBB_override {\n        if (g_TotalCount == NUM_BUFFERS)\n            return NULL;\n        size_t* item = new size_t[BUFFER_SIZE];\n        for (int i = 0; i < BUFFER_SIZE; i++)\n            item[i] = 1;\n        ++g_TotalCount;\n        ++g_AllocatedCount;\n        return item;\n    }\n};\n\n// The filter multiplies each buffer item by 10.\nclass ProcessingFilterWithFinalization : public FinalizationBaseFilter {\npublic:\n    ProcessingFilterWithFinalization (tbb::filter::mode _mode, bool) : FinalizationBaseFilter (_mode) {}\n\n    void* operator()( void* item) __TBB_override {\n        if(g_Master == Harness::CurrentTid()) g_MasterExecuted = true;\n        else g_NonMasterExecuted = true;\n        if( tbb::task::self().is_cancelled()) ++g_TGCCancelled;\n        if (g_TotalCount > NUM_BUFFERS / 2)\n            ThrowTestException(1);\n        size_t* m_Item = (size_t*)item;\n        for (int i = 0; i < BUFFER_SIZE; i++)\n            m_Item[i] *= 10;\n        return item;\n    }\n};\n\n// Output filter deletes previously allocated buffer\nclass OutputFilterWithFinalization : public FinalizationBaseFilter {\npublic:\n    OutputFilterWithFinalization (tbb::filter::mode m) : FinalizationBaseFilter (m) {}\n\n    void* operator()( void* item) __TBB_override {\n        size_t* m_Item = (size_t*)item;\n        delete[] m_Item;\n        --g_AllocatedCount;\n        return NULL;\n    }\n};\n\n//! Tests filter::finalize method\nvoid Test5_pipeline ( const FilterSet& filters ) {\n    ResetGlobals();\n    g_AllocatedCount = 0;\n    CustomPipeline<InputFilterWithFinalization, ProcessingFilterWithFinalization> testPipeline(filters);\n    OutputFilterWithFinalization my_output_filter(tbb::filter::parallel);\n\n    testPipeline.add_filter(my_output_filter);\n    TRY();\n        testPipeline.run();\n    CATCH();\n    ASSERT (g_AllocatedCount == 0, \"Memory leak: Some my_object weren't destroyed\");\n} // void Test5_pipeline ()\n\n//! Tests pipeline function passed with different combination of filters\ntemplate<void testFunc(const FilterSet&)>\nvoid TestWithDifferentFilters() {\n    const int NumFilterTypes = 3;\n    const tbb::filter::mode modes[NumFilterTypes] = {\n            tbb::filter::parallel,\n            tbb::filter::serial,\n            tbb::filter::serial_out_of_order\n        };\n    for ( int i = 0; i < NumFilterTypes; ++i ) {\n        for ( int j = 0; j < NumFilterTypes; ++j ) {\n            for ( int k = 0; k < 2; ++k )\n                testFunc( FilterSet(modes[i], modes[j], k == 0, k != 0) );\n        }\n    }\n}\n\n#endif /* TBB_USE_EXCEPTIONS */\n\nclass FilterToCancel : public tbb::filter {\npublic:\n    FilterToCancel(bool is_parallel)\n        : filter( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order )\n    {}\n    void* operator()(void* item) __TBB_override {\n        ++g_CurExecuted;\n        CancellatorTask::WaitUntilReady();\n        return item;\n    }\n}; // class FilterToCancel\n\ntemplate <class Filter_to_cancel>\nclass PipelineLauncherTask : public tbb::task {\n    tbb::task_group_context &my_ctx;\npublic:\n    PipelineLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}\n\n    tbb::task* execute () __TBB_override {\n        // Run test when serial filter is the first non-input filter\n        InputFilter inputFilter;\n        Filter_to_cancel filterToCancel(true);\n        tbb::pipeline p;\n        p.add_filter(inputFilter);\n        p.add_filter(filterToCancel);\n        p.run(g_NumTokens, my_ctx);\n        return NULL;\n    }\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\nvoid TestCancelation1_pipeline () {\n    ResetGlobals();\n    g_ThrowException = false;\n    intptr_t  threshold = 10;\n    tbb::task_group_context ctx;\n    ctx.reset();\n    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    r.set_ref_count(3);\n    r.spawn( *new( r.allocate_child() ) CancellatorTask(ctx, threshold) );\n    __TBB_Yield();\n    r.spawn( *new( r.allocate_child() ) PipelineLauncherTask<FilterToCancel>(ctx) );\n    TRY();\n        r.wait_for_all();\n    CATCH_AND_FAIL();\n    r.destroy(r);\n    ASSERT( g_TGCCancelled <= g_NumThreads, \"Too many tasks survived cancellation\");\n    ASSERT (g_CurExecuted < g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks were executed after cancellation\");\n}\n\nclass FilterToCancel2 : public tbb::filter {\npublic:\n    FilterToCancel2(bool is_parallel)\n        : filter ( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order)\n    {}\n\n    void* operator()(void* item) __TBB_override {\n        ++g_CurExecuted;\n        Harness::ConcurrencyTracker ct;\n        // The test will hang (and be timed out by the test system) if is_cancelled() is broken\n        while( !tbb::task::self().is_cancelled() )\n            __TBB_Yield();\n        return item;\n    }\n};\n\n//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).\n/** This version also tests task::is_cancelled() method. **/\nvoid TestCancelation2_pipeline () {\n    ResetGlobals();\n    RunCancellationTest<PipelineLauncherTask<FilterToCancel2>, CancellatorTask2>();\n    // g_CurExecuted is always >= g_ExecutedAtLastCatch, because the latter is always a snapshot of the\n    // former, and g_CurExecuted is monotonic increasing.  so the comparison should be at least ==.\n    // If another filter is started after cancel but before cancellation is propagated, then the\n    // number will be larger.\n    ASSERT (g_CurExecuted <= g_ExecutedAtLastCatch, \"Some tasks were executed after cancellation\");\n}\n\nvoid RunPipelineTests() {\n    REMARK( \"pipeline tests\\n\" );\n    tbb::task_scheduler_init init (g_NumThreads);\n    g_Master = Harness::CurrentTid();\n    g_NumTokens = 2 * g_NumThreads;\n\n    Test0_pipeline();\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    TestWithDifferentFilters<Test1_pipeline>();\n    TestWithDifferentFilters<Test2_pipeline>();\n    TestWithDifferentFilters<Test3_pipeline>();\n    TestWithDifferentFilters<Test4_pipeline>();\n    TestWithDifferentFilters<Test5_pipeline>();\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n    TestCancelation1_pipeline();\n    TestCancelation2_pipeline();\n}\n\n\n#if TBB_USE_EXCEPTIONS\n\nclass MyCapturedException : public tbb::captured_exception {\npublic:\n    static int m_refCount;\n\n    MyCapturedException () : tbb::captured_exception(\"MyCapturedException\", \"test\") { ++m_refCount; }\n    ~MyCapturedException () throw() { --m_refCount; }\n\n    MyCapturedException* move () throw() __TBB_override {\n        MyCapturedException* movee = (MyCapturedException*)malloc(sizeof(MyCapturedException));\n        return ::new (movee) MyCapturedException;\n    }\n    void destroy () throw() __TBB_override {\n        this->~MyCapturedException();\n        free(this);\n    }\n    void operator delete ( void* p ) { free(p); }\n};\n\nint MyCapturedException::m_refCount = 0;\n\nvoid DeleteTbbException ( volatile tbb::tbb_exception* pe ) {\n    delete pe;\n}\n\nvoid TestTbbExceptionAPI () {\n    const char *name = \"Test captured exception\",\n               *reason = \"Unit testing\";\n    tbb::captured_exception e(name, reason);\n    ASSERT (strcmp(e.name(), name) == 0, \"Setting captured exception name failed\");\n    ASSERT (strcmp(e.what(), reason) == 0, \"Setting captured exception reason failed\");\n    tbb::captured_exception c(e);\n    ASSERT (strcmp(c.name(), e.name()) == 0, \"Copying captured exception name failed\");\n    ASSERT (strcmp(c.what(), e.what()) == 0, \"Copying captured exception reason failed\");\n    tbb::captured_exception *m = e.move();\n    ASSERT (strcmp(m->name(), name) == 0, \"Moving captured exception name failed\");\n    ASSERT (strcmp(m->what(), reason) == 0, \"Moving captured exception reason failed\");\n    ASSERT (!e.name() && !e.what(), \"Moving semantics broken\");\n    m->destroy();\n\n    MyCapturedException mce;\n    MyCapturedException *mmce = mce.move();\n    ASSERT( MyCapturedException::m_refCount == 2, NULL );\n    DeleteTbbException(mmce);\n    ASSERT( MyCapturedException::m_refCount == 1, NULL );\n}\n\n#endif /* TBB_USE_EXCEPTIONS */\n\n/** If min and max thread numbers specified on the command line are different,\n    the test is run only for 2 sizes of the thread pool (MinThread and MaxThread)\n    to be able to test the high and low contention modes while keeping the test reasonably fast **/\nint TestMain () {\n    if(tbb::task_scheduler_init::default_num_threads() == 1) {\n        REPORT(\"Known issue: tests require multiple hardware threads\\n\");\n        return Harness::Skipped;\n    }\n    REMARK (\"Using %s\\n\", TBB_USE_CAPTURED_EXCEPTION ? \"tbb:captured_exception\" : \"exact exception propagation\");\n    MinThread = min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread));\n    MaxThread = max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread));\n    ASSERT (FLAT_RANGE >= FLAT_GRAIN * MaxThread, \"Fix defines\");\n    int step = max((MaxThread - MinThread + 1)/2, 1);\n    for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; g_NumThreads += step ) {\n        REMARK (\"Number of threads %d\\n\", g_NumThreads);\n        // Execute in all the possible modes\n        for ( size_t j = 0; j < 4; ++j ) {\n            g_ExceptionInMaster = (j & 1) != 0;\n            g_SolitaryException = (j & 2) != 0;\n            REMARK(\"g_ExceptionInMaster==%s, g_SolitaryException==%s\\n\", g_ExceptionInMaster?\"T\":\"F\", g_SolitaryException?\"T\":\"F\");\n            RunParForAndReduceTests();\n            RunParDoTests();\n            RunPipelineTests();\n        }\n    }\n#if TBB_USE_EXCEPTIONS\n    TestTbbExceptionAPI();\n#endif\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#endif\n    return Harness::Done;\n}\n\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_eh_flow_graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 2\n#define HARNESS_DEFAULT_MAX_THREADS 4\n#include \"harness_defs.h\"\n\n#if _MSC_VER\n    #pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Suppress \"unreachable code\" warning by VC++ 17.0-18.0 (VS 2012 or newer)\n    #pragma warning (disable: 4702)\n#endif\n\n#include \"harness.h\"\n\n// global task_scheduler_observer is an imperfect tool to find how many threads are really\n// participating.  That was the hope, but it counts the entries into the marketplace,\n// not the arena.\n// #define USE_TASK_SCHEDULER_OBSERVER 1\n\n#if _MSC_VER && defined(__INTEL_COMPILER) && !TBB_USE_DEBUG\n    #define TBB_RUN_BUFFERING_TEST __INTEL_COMPILER > 1210\n#else\n    #define TBB_RUN_BUFFERING_TEST 1\n#endif\n\n#if TBB_USE_EXCEPTIONS\n#if USE_TASK_SCHEDULER_OBSERVER\n#include \"tbb/task_scheduler_observer.h\"\n#endif\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include <iostream>\n#include <vector>\n#include \"harness_assert.h\"\n#include \"harness_checktype.h\"\n\ninline intptr_t Existed() { return INT_MAX; }  // resolve Existed in harness_eh.h\n\n#include \"harness_eh.h\"\n#include <stdexcept>\n\n#define NUM_ITEMS 15\nint g_NumItems;\n\ntbb::atomic<unsigned> nExceptions;\ntbb::atomic<intptr_t> g_TGCCancelled;\n\nenum TestNodeTypeEnum { nonThrowing, isThrowing };\n\nstatic const size_t unlimited_type = 0;\nstatic const size_t serial_type = 1;\nstatic const size_t limited_type = 4;\n\ntemplate<TestNodeTypeEnum T> struct TestNodeTypeName;\ntemplate<> struct TestNodeTypeName<nonThrowing> { static const char *name() { return \"nonThrowing\"; } };\ntemplate<> struct TestNodeTypeName<isThrowing> { static const char *name() { return \"isThrowing\"; } };\n\ntemplate<size_t Conc> struct concurrencyName;\ntemplate<> struct concurrencyName<serial_type>{ static const char *name() { return \"serial\"; } };\ntemplate<> struct concurrencyName<unlimited_type>{ static const char *name() { return \"unlimited\"; } };\ntemplate<> struct concurrencyName<limited_type>{ static const char *name() { return \"limited\"; } };\n\n// Class that provides waiting and throwing behavior.  If we are not throwing, do nothing\n// If serial, we can't wait for concurrency to peak; we may be the bottleneck and will\n// stop further processing.  We will execute g_NumThreads + 10 times (the \"10\" is somewhat\n// arbitrary, and just makes sure there are enough items in the graph to keep it flowing),\n// If parallel or serial and throwing, use Harness::ConcurrencyTracker to wait.\n\ntemplate<size_t Conc, TestNodeTypeEnum t = nonThrowing>\nclass WaitThrow;\n\ntemplate<>\nclass WaitThrow<serial_type,nonThrowing> {\nprotected:\n    void WaitAndThrow(int cnt, const char * /*name*/) {\n        if(cnt > g_NumThreads + 10) {\n            Harness::ConcurrencyTracker ct;\n            WaitUntilConcurrencyPeaks();\n        }\n    }\n};\n\ntemplate<>\nclass WaitThrow<serial_type,isThrowing> {\nprotected:\n    void WaitAndThrow(int cnt, const char * /*name*/) {\n        if(cnt > g_NumThreads + 10) {\n            Harness::ConcurrencyTracker ct;\n            WaitUntilConcurrencyPeaks();\n            ThrowTestException(1);\n        }\n    }\n};\n\n// for nodes with limited concurrency, if that concurrency is < g_NumThreads, we need\n// to make sure enough other nodes wait for concurrency to peak.  If we are attached to\n// N successors, for each item we pass to a successor, we will get N executions of the\n// \"absorbers\" (because we broadcast to successors.)  for an odd number of threads we\n// need (g_NumThreads - limited + 1) / 2 items (that will give us one extra execution\n// of an \"absorber\", but we can't change that without changing the behavior of the node.)\ntemplate<>\nclass WaitThrow<limited_type,nonThrowing> {\nprotected:\n    void WaitAndThrow(int cnt, const char * /*name*/) {\n        if(cnt <= (g_NumThreads - (int)limited_type + 1)/2) {\n            return;\n        }\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n    }\n};\n\ntemplate<>\nclass WaitThrow<limited_type,isThrowing> {\nprotected:\n    void WaitAndThrow(int cnt, const char * /*name*/) {\n        Harness::ConcurrencyTracker ct;\n        if(cnt <= (g_NumThreads - (int)limited_type + 1)/2) {\n            return;\n        }\n        WaitUntilConcurrencyPeaks();\n        ThrowTestException(1);\n    }\n};\n\ntemplate<>\nclass WaitThrow<unlimited_type,nonThrowing> {\nprotected:\n    void WaitAndThrow(int /*cnt*/, const char * /*name*/) {\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n    }\n};\n\ntemplate<>\nclass WaitThrow<unlimited_type,isThrowing> {\nprotected:\n    void WaitAndThrow(int /*cnt*/, const char * /*name*/) {\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n        ThrowTestException(1);\n    }\n};\n\nvoid\nResetGlobals(bool throwException = true, bool flog = false) {\n    nExceptions = 0;\n    g_TGCCancelled = 0;\n    ResetEhGlobals(throwException, flog);\n}\n\n// -------source_node body ------------------\ntemplate <class OutputType, TestNodeTypeEnum TType>\nclass test_source_body : WaitThrow<serial_type, TType> {\n    using WaitThrow<serial_type, TType>::WaitAndThrow;\n    tbb::atomic<int> *my_current_val;\n    int my_mult;\npublic:\n    test_source_body(tbb::atomic<int> &my_cnt, int multiplier = 1) : my_current_val(&my_cnt), my_mult(multiplier) {\n        REMARK(\"- --------- - - -   constructed %lx\\n\", (size_t)(my_current_val));\n    }\n\n    bool operator()(OutputType & out) {\n        UPDATE_COUNTS();\n        out = OutputType(my_mult * ++(*my_current_val));\n        REMARK(\"xx(%lx) out == %d\\n\", (size_t)(my_current_val), (int)out);\n        if(*my_current_val > g_NumItems) {\n            REMARK(\" ------ End of the line!\\n\");\n            *my_current_val = g_NumItems;\n            return false;\n        }\n        WaitAndThrow((int)out,\"test_source_body\");\n        return true;\n    }\n\n    int count_value() { return (int)*my_current_val; }\n};\n\ntemplate <TestNodeTypeEnum TType>\nclass test_source_body<tbb::flow::continue_msg, TType> : WaitThrow<serial_type, TType> {\n    using WaitThrow<serial_type, TType>::WaitAndThrow;\n    tbb::atomic<int> *my_current_val;\npublic:\n    test_source_body(tbb::atomic<int> &my_cnt) : my_current_val(&my_cnt) { }\n\n    bool operator()(tbb::flow::continue_msg & out) {\n        UPDATE_COUNTS();\n        int outint = ++(*my_current_val);\n        out = tbb::flow::continue_msg();\n        if(*my_current_val > g_NumItems) {\n            *my_current_val = g_NumItems;\n            return false;\n        }\n        WaitAndThrow(outint,\"test_source_body\");\n        return true;\n    }\n\n    int count_value() { return (int)*my_current_val; }\n};\n\n// -------{function/continue}_node body ------------------\ntemplate<class InputType, class OutputType, TestNodeTypeEnum T, size_t Conc>\nclass absorber_body : WaitThrow<Conc,T> {\n    using WaitThrow<Conc,T>::WaitAndThrow;\n    tbb::atomic<int> *my_count;\npublic:\n    absorber_body(tbb::atomic<int> &my_cnt) : my_count(&my_cnt) { }\n    OutputType operator()(const InputType &/*p_in*/) {\n        UPDATE_COUNTS();\n        int out = ++(*my_count);\n        WaitAndThrow(out,\"absorber_body\");\n        return OutputType();\n    }\n    int count_value() { return *my_count; }\n};\n\n// -------multifunction_node body ------------------\n\n// helper classes\ntemplate<int N,class PortsType>\nstruct IssueOutput {\n    typedef typename tbb::flow::tuple_element<N-1,PortsType>::type::output_type my_type;\n\n    static void issue_tuple_element( PortsType &my_ports) {\n        ASSERT(tbb::flow::get<N-1>(my_ports).try_put(my_type()), \"Error putting to successor\");\n        IssueOutput<N-1,PortsType>::issue_tuple_element(my_ports);\n    }\n};\n\ntemplate<class PortsType>\nstruct IssueOutput<1,PortsType> {\n    typedef typename tbb::flow::tuple_element<0,PortsType>::type::output_type my_type;\n\n    static void issue_tuple_element( PortsType &my_ports) {\n        ASSERT(tbb::flow::get<0>(my_ports).try_put(my_type()), \"Error putting to successor\");\n    }\n};\n\ntemplate<class InputType, class OutputTupleType, TestNodeTypeEnum T, size_t Conc>\nclass multifunction_node_body : WaitThrow<Conc,T> {\n    using WaitThrow<Conc,T>::WaitAndThrow;\n    static const int N = tbb::flow::tuple_size<OutputTupleType>::value;\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTupleType> NodeType;\n    typedef typename NodeType::output_ports_type PortsType;\n    tbb::atomic<int> *my_count;\npublic:\n    multifunction_node_body(tbb::atomic<int> &my_cnt) : my_count(&my_cnt) { }\n    void operator()(const InputType& /*in*/, PortsType &my_ports) {\n        UPDATE_COUNTS();\n        int out = ++(*my_count);\n        WaitAndThrow(out,\"multifunction_node_body\");\n        // issue an item to each output port.\n        IssueOutput<N,PortsType>::issue_tuple_element(my_ports);\n    }\n\n    int count_value() { return *my_count; }\n};\n\n// --------- body to sort items in sequencer_node\ntemplate<class BufferItemType>\nstruct sequencer_body {\n    size_t operator()(const BufferItemType &s) {\n        ASSERT(s, \"sequencer item out of range (== 0)\");\n        return size_t(s) - 1;\n    }\n};\n\n// --------- body to compare the \"priorities\" of objects for priority_queue_node  five priority levels 0-4.\ntemplate<class T>\nstruct myLess {\n    bool operator()(const T &t1, const T &t2) {\n        return (int(t1) % 5) < (int(t2) % 5);\n    }\n};\n\n// --------- type for < comparison in priority_queue_node.\ntemplate<class ItemType>\nstruct less_body {\n    bool operator()(const ItemType &lhs, const ItemType &rhs) {\n        return (int(lhs) % 3) < (int(rhs) % 3);\n    }\n};\n\n// --------- tag methods for tag_matching join_node\ntemplate<typename TT>\nclass tag_func {\n    TT my_mult;\npublic:\n    tag_func(TT multiplier) : my_mult(multiplier) { }\n    void operator=( const tag_func& other){my_mult = other.my_mult;}\n    // operator() will return [0 .. Count)\n    tbb::flow::tag_value operator()( TT v) {\n        tbb::flow::tag_value t = tbb::flow::tag_value(v / my_mult);\n        return t;\n    }\n};\n\n// --------- Source body for split_node test.\ntemplate <class OutputTuple, TestNodeTypeEnum TType>\nclass tuple_test_source_body : WaitThrow<serial_type, TType> {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type ItemType0;\n    typedef typename tbb::flow::tuple_element<1,OutputTuple>::type ItemType1;\n    using WaitThrow<serial_type, TType>::WaitAndThrow;\n    tbb::atomic<int> *my_current_val;\npublic:\n    tuple_test_source_body(tbb::atomic<int> &my_cnt) : my_current_val(&my_cnt) { }\n\n    bool operator()(OutputTuple & out) {\n        UPDATE_COUNTS();\n        int ival = ++(*my_current_val);\n        out = OutputTuple(ItemType0(ival),ItemType1(ival));\n        if(*my_current_val > g_NumItems) {\n            *my_current_val = g_NumItems;  // jam the final value; we assert on it later.\n            return false;\n        }\n        WaitAndThrow(ival,\"tuple_test_source_body\");\n        return true;\n    }\n\n    int count_value() { return (int)*my_current_val; }\n};\n\n// ------- end of node bodies\n\n// source_node is only-serial.  source_node can throw, or the function_node can throw.\n// graph being tested is\n//\n//      source_node+---+parallel function_node\n//\n//    After each run the graph is reset(), to test the reset functionality.\n//\n\n\ntemplate<class ItemType, TestNodeTypeEnum srcThrowType, TestNodeTypeEnum absorbThrowType>\nvoid run_one_source_node_test(bool throwException, bool flog) {\n    typedef test_source_body<ItemType,srcThrowType> src_body_type;\n    typedef absorber_body<ItemType, tbb::flow::continue_msg, absorbThrowType, unlimited_type> parallel_absorb_body_type;\n    tbb::atomic<int> source_body_count;\n    tbb::atomic<int> absorber_body_count;\n    source_body_count = 0;\n    absorber_body_count = 0;\n\n    tbb::flow::graph g;\n\n    g_Master = Harness::CurrentTid();\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n\n    tbb::flow::source_node<ItemType> sn(g, src_body_type(source_body_count),/*is_active*/false);\n    parallel_absorb_body_type ab2(absorber_body_count);\n    tbb::flow::function_node<ItemType> parallel_fn(g,tbb::flow::unlimited,ab2);\n    make_edge(sn, parallel_fn);\n    for(int runcnt = 0; runcnt < 2; ++runcnt) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                sn.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                sn.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int src_cnt = tbb::flow::copy_body<src_body_type>(sn).count_value();\n        int sink_cnt = tbb::flow::copy_body<parallel_absorb_body_type>(parallel_fn).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception flag in flow::graph not set\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"canceled flag not set\");\n            ASSERT(src_cnt <= g_NumItems, \"Too many source_node items emitted\");\n            ASSERT(sink_cnt <= src_cnt, \"Too many source_node items received\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(src_cnt == g_NumItems, \"Incorrect # source_node items emitted\");\n            ASSERT(sink_cnt == src_cnt, \"Incorrect # source_node items received\");\n        }\n        g.reset();  // resets the body of the source_node and the absorb_nodes.\n        source_body_count = 0;\n        absorber_body_count = 0;\n        ASSERT(!g.exception_thrown(), \"Reset didn't clear exception_thrown()\");\n        ASSERT(!g.is_cancelled(), \"Reset didn't clear is_cancelled()\");\n        src_cnt = tbb::flow::copy_body<src_body_type>(sn).count_value();\n        sink_cnt = tbb::flow::copy_body<parallel_absorb_body_type>(parallel_fn).count_value();\n        ASSERT(src_cnt == 0, \"source_node count not reset\");\n        ASSERT(sink_cnt == 0, \"sink_node count not reset\");\n    }\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}  // run_one_source_node_test\n\n\ntemplate<class ItemType, TestNodeTypeEnum srcThrowType, TestNodeTypeEnum absorbThrowType>\nvoid run_source_node_test() {\n    run_one_source_node_test<ItemType,srcThrowType,absorbThrowType>(false,false);\n    run_one_source_node_test<ItemType,srcThrowType,absorbThrowType>(true,false);\n    run_one_source_node_test<ItemType,srcThrowType,absorbThrowType>(true,true);\n}  // run_source_node_test\n\nvoid test_source_node() {\n    REMARK(\"Testing source_node\\n\");\n    check_type<int>::check_type_counter = 0;\n    g_Wakeup_Msg = \"source_node(1): Missed wakeup or machine is overloaded?\";\n    run_source_node_test<check_type<int>, isThrowing, nonThrowing>();\n    ASSERT(!check_type<int>::check_type_counter, \"Some items leaked in test\");\n    g_Wakeup_Msg = \"source_node(2): Missed wakeup or machine is overloaded?\";\n    run_source_node_test<int, isThrowing, nonThrowing>();\n    g_Wakeup_Msg = \"source_node(3): Missed wakeup or machine is overloaded?\";\n    run_source_node_test<int, nonThrowing, isThrowing>();\n    g_Wakeup_Msg = \"source_node(4): Missed wakeup or machine is overloaded?\";\n    run_source_node_test<int, isThrowing, isThrowing>();\n    g_Wakeup_Msg = \"source_node(5): Missed wakeup or machine is overloaded?\";\n    run_source_node_test<check_type<int>, isThrowing, isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n    ASSERT(!check_type<int>::check_type_counter, \"Some items leaked in test\");\n}\n\n// -------- utilities & types to test function_node and multifunction_node.\n\n// need to tell the template which node type I am using so it attaches successors correctly.\nenum NodeFetchType { func_node_type, multifunc_node_type };\n\ntemplate<class NodeType, class ItemType, int indx, NodeFetchType NFT>\nstruct AttachPoint;\n\ntemplate<class NodeType, class ItemType, int indx>\nstruct AttachPoint<NodeType,ItemType,indx,multifunc_node_type> {\n    static tbb::flow::sender<ItemType> &GetSender(NodeType &n) {\n        return tbb::flow::output_port<indx>(n);\n    }\n};\n\ntemplate<class NodeType, class ItemType, int indx>\nstruct AttachPoint<NodeType,ItemType,indx,func_node_type> {\n    static tbb::flow::sender<ItemType> &GetSender(NodeType &n) {\n        return n;\n    }\n};\n\n\n// common template for running function_node, multifunction_node.  continue_node\n// has different firing requirements, so it needs a different graph topology.\ntemplate<\n    class SourceNodeType,\n    class SourceNodeBodyType0,\n    class SourceNodeBodyType1,\n    NodeFetchType NFT,\n    class TestNodeType,\n    class TestNodeBodyType,\n    class TypeToSink0,          // what kind of item are we sending to sink0\n    class TypeToSink1,          // what kind of item are we sending to sink1\n    class SinkNodeType0,        // will be same for function;\n    class SinkNodeType1,        // may differ for multifunction_node\n    class SinkNodeBodyType0,\n    class SinkNodeBodyType1,\n    size_t Conc\n    >\nvoid\nrun_one_functype_node_test(bool throwException, bool flog, const char * /*name*/) {\n\n    char mymsg[132];\n    char *saved_msg = const_cast<char *>(g_Wakeup_Msg);\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source0_count;\n    tbb::atomic<int> source1_count;\n    tbb::atomic<int> sink0_count;\n    tbb::atomic<int> sink1_count;\n    tbb::atomic<int> test_count;\n    source0_count = source1_count = sink0_count = sink1_count = test_count = 0;\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source0(g, SourceNodeBodyType0(source0_count),/*is_active*/false);\n    SourceNodeType source1(g, SourceNodeBodyType1(source1_count),/*is_active*/false);\n    TestNodeType node_to_test(g, Conc, TestNodeBodyType(test_count));\n    SinkNodeType0 sink0(g,tbb::flow::unlimited,SinkNodeBodyType0(sink0_count));\n    SinkNodeType1 sink1(g,tbb::flow::unlimited,SinkNodeBodyType1(sink1_count));\n    make_edge(source0, node_to_test);\n    make_edge(source1, node_to_test);\n    make_edge(AttachPoint<TestNodeType, TypeToSink0, 0, NFT>::GetSender(node_to_test), sink0);\n    make_edge(AttachPoint<TestNodeType, TypeToSink1, 1, NFT>::GetSender(node_to_test), sink1);\n\n    for(int iter = 0; iter < 2; ++iter) {  // run, reset, run again\n        sprintf(mymsg, \"%s iter=%d, threads=%d, throw=%s, flog=%s\", saved_msg, iter, g_NumThreads,\n               throwException?\"T\":\"F\", flog?\"T\":\"F\");\n        g_Wakeup_Msg = mymsg;\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source0.activate();\n                source1.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source0.activate();\n                source1.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb0_cnt = tbb::flow::copy_body<SourceNodeBodyType0>(source0).count_value();\n        int sb1_cnt = tbb::flow::copy_body<SourceNodeBodyType1>(source1).count_value();\n        int t_cnt   = tbb::flow::copy_body<TestNodeBodyType>(node_to_test).count_value();\n        int nb0_cnt = tbb::flow::copy_body<SinkNodeBodyType0>(sink0).count_value();\n        int nb1_cnt = tbb::flow::copy_body<SinkNodeBodyType1>(sink1).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb0_cnt + sb1_cnt <= 2*g_NumItems, \"Too many items sent by sources\");\n            ASSERT(sb0_cnt + sb1_cnt >= t_cnt, \"Too many items received by test node\");\n            ASSERT(nb0_cnt + nb1_cnt <= t_cnt*2, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb0_cnt + sb1_cnt == 2*g_NumItems, \"Missing invocations of source_nodes\");\n            ASSERT(t_cnt == 2*g_NumItems, \"Not all items reached test node\");\n            ASSERT(nb0_cnt == 2*g_NumItems && nb1_cnt == 2*g_NumItems, \"Missing items in absorbers\");\n        }\n        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.\n        source0_count = source1_count = sink0_count = sink1_count = test_count = 0;\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType0>(source0).count_value(),\"Reset source 0 failed\");\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType1>(source1).count_value(),\"Reset source 1 failed\");\n        ASSERT(0 == tbb::flow::copy_body<TestNodeBodyType>(node_to_test).count_value(),\"Reset test_node failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType0>(sink0).count_value(),\"Reset sink 0 failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType1>(sink1).count_value(),\"Reset sink 1 failed\");\n\n        g_Wakeup_Msg = saved_msg;\n    }\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\n//  Test function_node\n//\n// graph being tested is\n//\n//        source_node -\\                 /- parallel function_node\n//                      \\               /\n//                       +function_node+\n//                      /               \\                                  x\n//        source_node -/                 \\- parallel function_node\n//\n//    After each run the graph is reset(), to test the reset functionality.\n//\ntemplate<\n    TestNodeTypeEnum SType1,                          // does source node 1 throw?\n    TestNodeTypeEnum SType2,                          // does source node 2 throw?\n    class Item12,                                     // type of item passed between sources and test node\n    TestNodeTypeEnum FType,                           // does function node throw?\n    class Item23,                                     // type passed from function_node to sink nodes\n    TestNodeTypeEnum NType1,                          // does sink node 1 throw?\n    TestNodeTypeEnum NType2,                          // does sink node 1 throw?\n    class NodePolicy,                                 // rejecting,queueing\n    size_t Conc                                       // is node concurrent? {serial | limited | unlimited}\n>\nvoid run_function_node_test() {\n\n    typedef test_source_body<Item12,SType1> SBodyType1;\n    typedef test_source_body<Item12,SType2> SBodyType2;\n    typedef absorber_body<Item12, Item23, FType, Conc> TestBodyType;\n    typedef absorber_body<Item23,tbb::flow::continue_msg, NType1, unlimited_type> SinkBodyType1;\n    typedef absorber_body<Item23,tbb::flow::continue_msg, NType2, unlimited_type> SinkBodyType2;\n\n    typedef tbb::flow::source_node<Item12> SrcType;\n    typedef tbb::flow::function_node<Item12, Item23, NodePolicy> TestType;\n    typedef tbb::flow::function_node<Item23,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i ) {\n        if(i != 2) {  // doesn't make sense to flog a non-throwing test\n            bool doThrow = (i & 0x1) != 0;\n            bool doFlog = (i & 0x2) != 0;\n            run_one_functype_node_test<\n                /*SourceNodeType*/      SrcType,\n                /*SourceNodeBodyType0*/ SBodyType1,\n                /*SourceNodeBodyType1*/ SBodyType2,\n                /* NFT */               func_node_type,\n                /*TestNodeType*/        TestType,\n                /*TestNodeBodyType*/    TestBodyType,\n                /*TypeToSink0 */        Item23,\n                /*TypeToSink1 */        Item23,\n                /*SinkNodeType0*/       SnkType,\n                /*SinkNodeType1*/       SnkType,\n                /*SinkNodeBodyType1*/   SinkBodyType1,\n                /*SinkNodeBodyType2*/   SinkBodyType2,\n                /*Conc*/                Conc>\n                    (doThrow,doFlog,\"function_node\");\n        }\n    }\n}  // run_function_node_test\n\nvoid test_function_node() {\n    REMARK(\"Testing function_node\\n\");\n    // serial rejecting\n    g_Wakeup_Msg = \"function_node(1a): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n    g_Wakeup_Msg = \"function_node(1b): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<nonThrowing, nonThrowing, int, isThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n    g_Wakeup_Msg = \"function_node(1c): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<nonThrowing, nonThrowing, int, nonThrowing, int, isThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n\n    // serial queueing\n    g_Wakeup_Msg = \"function_node(2): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, isThrowing, int, nonThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, nonThrowing, int, isThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    check_type<int>::check_type_counter = 0;\n    run_function_node_test<nonThrowing, nonThrowing, check_type<int>, nonThrowing, check_type<int>, isThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    ASSERT(!check_type<int>::check_type_counter, \"Some items leaked in test\");\n\n    // unlimited parallel rejecting\n    g_Wakeup_Msg = \"function_node(3): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, unlimited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, isThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, unlimited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, isThrowing, tbb::flow::rejecting, unlimited_type>();\n\n    // limited parallel rejecting\n    g_Wakeup_Msg = \"function_node(4): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, limited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, isThrowing, int, nonThrowing, nonThrowing, tbb::flow::rejecting, (size_t)limited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, isThrowing, tbb::flow::rejecting, (size_t)limited_type>();\n\n    // limited parallel queueing\n    g_Wakeup_Msg = \"function_node(5): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, nonThrowing, tbb::flow::queueing, (size_t)limited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, isThrowing, int, nonThrowing, nonThrowing, tbb::flow::queueing, (size_t)limited_type>();\n    run_function_node_test<nonThrowing, nonThrowing, int, nonThrowing, int, nonThrowing, isThrowing, tbb::flow::queueing, (size_t)limited_type>();\n\n    // everyone throwing\n    g_Wakeup_Msg = \"function_node(6): Missed wakeup or machine is overloaded?\";\n    run_function_node_test<isThrowing, isThrowing, int, isThrowing, int, isThrowing, isThrowing, tbb::flow::rejecting, unlimited_type>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ----------------------------------- multifunction_node ----------------------------------\n//  Test multifunction_node.\n//\n// graph being tested is\n//\n//        source_node -\\                      /- parallel function_node\n//                      \\                    /\n//                       +multifunction_node+\n//                      /                    \\                                  x\n//        source_node -/                      \\- parallel function_node\n//\n//    After each run the graph is reset(), to test the reset functionality.  The\n//    multifunction_node will put an item to each successor for every item\n//    received.\n//\ntemplate<\n    TestNodeTypeEnum SType0,                          // does source node 1 throw?\n    TestNodeTypeEnum SType1,                          // does source node 2 thorw?\n    class Item12,                                 // type of item passed between sources and test node\n    TestNodeTypeEnum FType,                           // does multifunction node throw?\n    class ItemTuple,                              // tuple of types passed from multifunction_node to sink nodes\n    TestNodeTypeEnum NType1,                          // does sink node 1 throw?\n    TestNodeTypeEnum NType2,                          // does sink node 2 throw?\n    class  NodePolicy,                            // rejecting,queueing\n    size_t Conc                                   // is node concurrent? {serial | limited | unlimited}\n>\nvoid run_multifunction_node_test() {\n\n    typedef typename tbb::flow::tuple_element<0,ItemTuple>::type Item23Type0;\n    typedef typename tbb::flow::tuple_element<1,ItemTuple>::type Item23Type1;\n    typedef test_source_body<Item12,SType0> SBodyType1;\n    typedef test_source_body<Item12,SType1> SBodyType2;\n    typedef multifunction_node_body<Item12, ItemTuple, FType, Conc> TestBodyType;\n    typedef absorber_body<Item23Type0,tbb::flow::continue_msg, NType1, unlimited_type> SinkBodyType1;\n    typedef absorber_body<Item23Type1,tbb::flow::continue_msg, NType2, unlimited_type> SinkBodyType2;\n\n    typedef tbb::flow::source_node<Item12> SrcType;\n    typedef tbb::flow::multifunction_node<Item12, ItemTuple, NodePolicy> TestType;\n    typedef tbb::flow::function_node<Item23Type0,tbb::flow::continue_msg> SnkType0;\n    typedef tbb::flow::function_node<Item23Type1,tbb::flow::continue_msg> SnkType1;\n\n    for(int i = 0; i < 4; ++i ) {\n        if(i != 2) {  // doesn't make sense to flog a non-throwing test\n            bool doThrow = (i & 0x1) != 0;\n            bool doFlog = (i & 0x2) != 0;\n    run_one_functype_node_test<\n        /*SourceNodeType*/      SrcType,\n        /*SourceNodeBodyType0*/ SBodyType1,\n        /*SourceNodeBodyType1*/ SBodyType2,\n        /*NFT*/                 multifunc_node_type,\n        /*TestNodeType*/        TestType,\n        /*TestNodeBodyType*/    TestBodyType,\n        /*TypeToSink0*/         Item23Type0,\n        /*TypeToSink1*/         Item23Type1,\n        /*SinkNodeType0*/       SnkType0,\n        /*SinkNodeType1*/       SnkType1,\n        /*SinkNodeBodyType0*/   SinkBodyType1,\n        /*SinkNodeBodyType1*/   SinkBodyType2,\n        /*Conc*/                Conc>\n            (doThrow,doFlog,\"multifunction_node\");\n        }\n    }\n}  // run_multifunction_node_test\n\nvoid test_multifunction_node() {\n    REMARK(\"Testing multifunction_node\\n\");\n    g_Wakeup_Msg = \"multifunction_node(source throws,rejecting,serial): Missed wakeup or machine is overloaded?\";\n    // serial rejecting\n    run_multifunction_node_test<isThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,float>, nonThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n    g_Wakeup_Msg = \"multifunction_node(test throws,rejecting,serial): Missed wakeup or machine is overloaded?\";\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, isThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n    g_Wakeup_Msg = \"multifunction_node(sink throws,rejecting,serial): Missed wakeup or machine is overloaded?\";\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, isThrowing, nonThrowing, tbb::flow::rejecting, serial_type>();\n\n    g_Wakeup_Msg = \"multifunction_node(2): Missed wakeup or machine is overloaded?\";\n    // serial queueing\n    run_multifunction_node_test<isThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, isThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, isThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    check_type<int>::check_type_counter = 0;\n    run_multifunction_node_test<nonThrowing, nonThrowing, check_type<int>, nonThrowing, tbb::flow::tuple<check_type<int>, check_type<int> >, isThrowing, nonThrowing, tbb::flow::queueing, serial_type>();\n    ASSERT(!check_type<int>::check_type_counter, \"Some items leaked in test\");\n\n    g_Wakeup_Msg = \"multifunction_node(3): Missed wakeup or machine is overloaded?\";\n    // unlimited parallel rejecting\n    run_multifunction_node_test<isThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::rejecting, unlimited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, isThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::rejecting, unlimited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, isThrowing, tbb::flow::rejecting, unlimited_type>();\n\n    g_Wakeup_Msg = \"multifunction_node(4): Missed wakeup or machine is overloaded?\";\n    // limited parallel rejecting\n    run_multifunction_node_test<isThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::rejecting, limited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, isThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::rejecting, (size_t)limited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, isThrowing, tbb::flow::rejecting, (size_t)limited_type>();\n\n    g_Wakeup_Msg = \"multifunction_node(5): Missed wakeup or machine is overloaded?\";\n    // limited parallel queueing\n    run_multifunction_node_test<isThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::queueing, (size_t)limited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, isThrowing, tbb::flow::tuple<int,int>, nonThrowing, nonThrowing, tbb::flow::queueing, (size_t)limited_type>();\n    run_multifunction_node_test<nonThrowing, nonThrowing, int, nonThrowing, tbb::flow::tuple<int,int>, nonThrowing, isThrowing, tbb::flow::queueing, (size_t)limited_type>();\n\n    g_Wakeup_Msg = \"multifunction_node(6): Missed wakeup or machine is overloaded?\";\n    // everyone throwing\n    run_multifunction_node_test<isThrowing, isThrowing, int, isThrowing, tbb::flow::tuple<int,int>, isThrowing, isThrowing, tbb::flow::rejecting, unlimited_type>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n//\n// Continue node has T predecessors.  when it receives messages (continue_msg) on T predecessors\n// it executes the body of the node, and forwards a continue_msg to its successors.\n// However many predecessors the continue_node has, that's how many continue_msgs it receives\n// on input before forwarding a message.\n//\n// The graph will look like\n//\n//                                          +broadcast_node+\n//                                         /                \\             ___\n//      source_node+------>+broadcast_node+                  +continue_node+--->+absorber\n//                                         \\                /\n//                                          +broadcast_node+\n//\n// The continue_node has unlimited parallelism, no input buffering, and broadcasts to successors.\n// The absorber is parallel, so each item emitted by the source will result in one thread\n// spinning.  So for N threads we pass N-1 continue_messages, then spin wait and then throw if\n// we are allowed to.\n\ntemplate < class SourceNodeType, class SourceNodeBodyType, class TTestNodeType, class TestNodeBodyType,\n        class SinkNodeType, class SinkNodeBodyType>\nvoid run_one_continue_node_test (bool throwException, bool flog) {\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> test_count;\n    tbb::atomic<int> sink_count;\n    source_count = test_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source(g, SourceNodeBodyType(source_count),/*is_active*/false);\n    TTestNodeType node_to_test(g, TestNodeBodyType(test_count));\n    SinkNodeType sink(g,tbb::flow::unlimited,SinkNodeBodyType(sink_count));\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> b1(g), b2(g), b3(g);\n    make_edge(source, b1);\n    make_edge(b1,b2);\n    make_edge(b1,b3);\n    make_edge(b2,node_to_test);\n    make_edge(b3,node_to_test);\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceNodeBodyType>(source).count_value();\n        int t_cnt   = tbb::flow::copy_body<TestNodeBodyType>(node_to_test).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(sb_cnt >= t_cnt, \"Too many items received by test node\");\n            ASSERT(nb_cnt <= t_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb_cnt == g_NumItems, \"Missing invocations of source_node\");\n            ASSERT(t_cnt == g_NumItems, \"Not all items reached test node\");\n            ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n        }\n        g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.\n        source_count = test_count = sink_count = 0;\n        ASSERT(0 == (int)test_count, \"Atomic wasn't reset properly\");\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<TestNodeBodyType>(node_to_test).count_value(),\"Reset test_node failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<\n    class ItemType,\n    TestNodeTypeEnum SType,   // does source node throw?\n    TestNodeTypeEnum CType,   // does continue_node throw?\n    TestNodeTypeEnum AType>    // does absorber throw\nvoid run_continue_node_test() {\n    typedef test_source_body<tbb::flow::continue_msg,SType> SBodyType;\n    typedef absorber_body<tbb::flow::continue_msg,ItemType,CType,unlimited_type> ContBodyType;\n    typedef absorber_body<ItemType,tbb::flow::continue_msg, AType, unlimited_type> SinkBodyType;\n\n    typedef tbb::flow::source_node<tbb::flow::continue_msg> SrcType;\n    typedef tbb::flow::continue_node<ItemType> TestType;\n    typedef tbb::flow::function_node<ItemType,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i ) {\n        if(i == 2) continue;  // don't run (false,true); it doesn't make sense.\n        bool doThrow = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_continue_node_test<\n            /*SourceNodeType*/      SrcType,\n            /*SourceNodeBodyType*/  SBodyType,\n            /*TestNodeType*/        TestType,\n            /*TestNodeBodyType*/    ContBodyType,\n            /*SinkNodeType*/        SnkType,\n            /*SinkNodeBodyType*/    SinkBodyType>\n            (doThrow,doFlog);\n    }\n}\n\n//\nvoid test_continue_node() {\n    REMARK(\"Testing continue_node\\n\");\n    g_Wakeup_Msg = \"buffer_node(non,is,non): Missed wakeup or machine is overloaded?\";\n    run_continue_node_test<int,nonThrowing,isThrowing,nonThrowing>();\n    g_Wakeup_Msg = \"buffer_node(non,non,is): Missed wakeup or machine is overloaded?\";\n    run_continue_node_test<int,nonThrowing,nonThrowing,isThrowing>();\n    g_Wakeup_Msg = \"buffer_node(is,non,non): Missed wakeup or machine is overloaded?\";\n    run_continue_node_test<int,isThrowing,nonThrowing,nonThrowing>();\n    g_Wakeup_Msg = \"buffer_node(is,is,is): Missed wakeup or machine is overloaded?\";\n    run_continue_node_test<int,isThrowing,isThrowing,isThrowing>();\n    check_type<double>::check_type_counter = 0;\n    run_continue_node_test<check_type<double>,isThrowing,isThrowing,isThrowing>();\n    ASSERT(!check_type<double>::check_type_counter, \"Dropped objects in continue_node test\");\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ---------- buffer_node queue_node overwrite_node --------------\n\ntemplate<\n    class BufferItemType,       //\n    class SourceNodeType,\n    class SourceNodeBodyType,\n    class TestNodeType,\n    class SinkNodeType,\n    class SinkNodeBodyType >\nvoid run_one_buffer_node_test(bool throwException,bool flog) {\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> sink_count;\n    source_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source(g, SourceNodeBodyType(source_count),/*is_active*/false);\n    TestNodeType node_to_test(g);\n    SinkNodeType sink(g,tbb::flow::unlimited,SinkNodeBodyType(sink_count));\n    make_edge(source,node_to_test);\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceNodeBodyType>(source).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(nb_cnt <= sb_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb_cnt == g_NumItems, \"Missing invocations of source_node\");\n            ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n        }\n        if(iter == 0) {\n            remove_edge(node_to_test, sink);\n            node_to_test.try_put(BufferItemType());\n            g.wait_for_all();\n            g.reset();\n            source_count = sink_count = 0;\n            BufferItemType tmp;\n            ASSERT(!node_to_test.try_get(tmp), \"node not empty\");\n            make_edge(node_to_test, sink);\n            g.wait_for_all();\n        }\n        else {\n            g.reset();\n            source_count = sink_count = 0;\n        }\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\ntemplate<class BufferItemType,\n         TestNodeTypeEnum SourceThrowType,\n         TestNodeTypeEnum SinkThrowType>\nvoid run_buffer_queue_and_overwrite_node_test() {\n    typedef test_source_body<BufferItemType,SourceThrowType> SourceBodyType;\n    typedef absorber_body<BufferItemType,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n\n    typedef tbb::flow::source_node<BufferItemType> SrcType;\n    typedef tbb::flow::buffer_node<BufferItemType> BufType;\n    typedef tbb::flow::queue_node<BufferItemType>  QueType;\n    typedef tbb::flow::overwrite_node<BufferItemType>  OvrType;\n    typedef tbb::flow::function_node<BufferItemType,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(i == 2) continue;  // no need to test flog w/o throws\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n#if TBB_RUN_BUFFERING_TEST\n        run_one_buffer_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        BufType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n        run_one_buffer_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        QueType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n#endif\n        run_one_buffer_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        OvrType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n    }\n}\n\nvoid test_buffer_queue_and_overwrite_node() {\n    REMARK(\"Testing buffer_node, queue_node and overwrite_node\\n\");\n#if TBB_RUN_BUFFERING_TEST\n#else\n    REMARK(\"skip buffer and queue test (known issue)\\n\");\n#endif\n    g_Wakeup_Msg = \"buffer, queue, overwrite(is,non): Missed wakeup or machine is overloaded?\";\n    run_buffer_queue_and_overwrite_node_test<int,isThrowing,nonThrowing>();\n    g_Wakeup_Msg = \"buffer, queue, overwrite(non,is): Missed wakeup or machine is overloaded?\";\n    run_buffer_queue_and_overwrite_node_test<int,nonThrowing,isThrowing>();\n    g_Wakeup_Msg = \"buffer, queue, overwrite(is,is): Missed wakeup or machine is overloaded?\";\n    run_buffer_queue_and_overwrite_node_test<int,isThrowing,isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ---------- sequencer_node -------------------------\n\n\ntemplate<\n    class BufferItemType,       //\n    class SourceNodeType,\n    class SourceNodeBodyType,\n    class TestNodeType,\n    class SeqBodyType,\n    class SinkNodeType,\n    class SinkNodeBodyType >\nvoid run_one_sequencer_node_test(bool throwException,bool flog) {\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> sink_count;\n    source_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source(g, SourceNodeBodyType(source_count),/*is_active*/false);\n    TestNodeType node_to_test(g,SeqBodyType());\n    SinkNodeType sink(g,tbb::flow::unlimited,SinkNodeBodyType(sink_count));\n    make_edge(source,node_to_test);\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceNodeBodyType>(source).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(nb_cnt <= sb_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb_cnt == g_NumItems, \"Missing invocations of source_node\");\n            ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n        }\n        if(iter == 0) {\n            remove_edge(node_to_test, sink);\n            node_to_test.try_put(BufferItemType(g_NumItems + 1));\n            node_to_test.try_put(BufferItemType(1));\n            g.wait_for_all();\n            g.reset();\n            source_count = sink_count = 0;\n            make_edge(node_to_test, sink);\n            g.wait_for_all();\n        }\n        else {\n            g.reset();\n            source_count = sink_count = 0;\n        }\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<class BufferItemType,\n         TestNodeTypeEnum SourceThrowType,\n         TestNodeTypeEnum SinkThrowType>\nvoid run_sequencer_node_test() {\n    typedef test_source_body<BufferItemType,SourceThrowType> SourceBodyType;\n    typedef absorber_body<BufferItemType,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n    typedef sequencer_body<BufferItemType> SeqBodyType;\n\n    typedef tbb::flow::source_node<BufferItemType> SrcType;\n    typedef tbb::flow::sequencer_node<BufferItemType>  SeqType;\n    typedef tbb::flow::function_node<BufferItemType,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(i == 2) continue;  // no need to test flog w/o throws\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_sequencer_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        SeqType,\n            /*class SeqBodyType*/         SeqBodyType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n    }\n}\n\n\n\nvoid test_sequencer_node() {\n    REMARK(\"Testing sequencer_node\\n\");\n    g_Wakeup_Msg = \"sequencer_node(is,non): Missed wakeup or machine is overloaded?\";\n    run_sequencer_node_test<int, isThrowing,nonThrowing>();\n    check_type<int>::check_type_counter = 0;\n    g_Wakeup_Msg = \"sequencer_node(non,is): Missed wakeup or machine is overloaded?\";\n    run_sequencer_node_test<check_type<int>, nonThrowing,isThrowing>();\n    ASSERT(!check_type<int>::check_type_counter, \"Dropped objects in sequencer_node test\");\n    g_Wakeup_Msg = \"sequencer_node(is,is): Missed wakeup or machine is overloaded?\";\n    run_sequencer_node_test<int, isThrowing,isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ------------ priority_queue_node ------------------\n\ntemplate<\n    class BufferItemType,\n    class SourceNodeType,\n    class SourceNodeBodyType,\n    class TestNodeType,\n    class SinkNodeType,\n    class SinkNodeBodyType >\nvoid run_one_priority_queue_node_test(bool throwException,bool flog) {\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> sink_count;\n    source_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source(g, SourceNodeBodyType(source_count),/*is_active*/false);\n\n    TestNodeType node_to_test(g);\n\n    SinkNodeType sink(g,tbb::flow::unlimited,SinkNodeBodyType(sink_count));\n\n    make_edge(source,node_to_test);\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceNodeBodyType>(source).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(nb_cnt <= sb_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb_cnt == g_NumItems, \"Missing invocations of source_node\");\n            ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n        }\n        if(iter == 0) {\n            remove_edge(node_to_test, sink);\n            node_to_test.try_put(BufferItemType(g_NumItems + 1));\n            node_to_test.try_put(BufferItemType(g_NumItems + 2));\n            node_to_test.try_put(BufferItemType());\n            g.wait_for_all();\n            g.reset();\n            source_count = sink_count = 0;\n            make_edge(node_to_test, sink);\n            g.wait_for_all();\n        }\n        else {\n            g.reset();\n            source_count = sink_count = 0;\n        }\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<class BufferItemType,\n         TestNodeTypeEnum SourceThrowType,\n         TestNodeTypeEnum SinkThrowType>\nvoid run_priority_queue_node_test() {\n    typedef test_source_body<BufferItemType,SourceThrowType> SourceBodyType;\n    typedef absorber_body<BufferItemType,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n    typedef less_body<BufferItemType> LessBodyType;\n\n    typedef tbb::flow::source_node<BufferItemType> SrcType;\n    typedef tbb::flow::priority_queue_node<BufferItemType,LessBodyType>  PrqType;\n    typedef tbb::flow::function_node<BufferItemType,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(i == 2) continue;  // no need to test flog w/o throws\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_priority_queue_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        PrqType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n    }\n}\n\nvoid test_priority_queue_node() {\n    REMARK(\"Testing priority_queue_node\\n\");\n    g_Wakeup_Msg = \"priority_queue_node(is,non): Missed wakeup or machine is overloaded?\";\n    run_priority_queue_node_test<int, isThrowing,nonThrowing>();\n    check_type<int>::check_type_counter = 0;\n    g_Wakeup_Msg = \"priority_queue_node(non,is): Missed wakeup or machine is overloaded?\";\n    run_priority_queue_node_test<check_type<int>, nonThrowing,isThrowing>();\n    ASSERT(!check_type<int>::check_type_counter, \"Dropped objects in priority_queue_node test\");\n    g_Wakeup_Msg = \"priority_queue_node(is,is): Missed wakeup or machine is overloaded?\";\n    run_priority_queue_node_test<int, isThrowing,isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ------------------- join_node ----------------\ntemplate<class JP> struct graph_policy_name{\n    static const char* name() {return \"unknown\"; }\n};\ntemplate<> struct graph_policy_name<tbb::flow::queueing>  {\n    static const char* name() {return \"queueing\"; }\n};\ntemplate<> struct graph_policy_name<tbb::flow::reserving> {\n    static const char* name() {return \"reserving\"; }\n};\ntemplate<> struct graph_policy_name<tbb::flow::tag_matching> {\n    static const char* name() {return \"tag_matching\"; }\n};\n\n\ntemplate<\n    class JP,\n    class OutputTuple,\n    class SourceType0,\n    class SourceBodyType0,\n    class SourceType1,\n    class SourceBodyType1,\n    class TestJoinType,\n    class SinkType,\n    class SinkBodyType\n    >\nstruct run_one_join_node_test {\n    run_one_join_node_test() {}\n    static void execute_test(bool throwException,bool flog) {\n        typedef typename tbb::flow::tuple_element<0,OutputTuple>::type ItemType0;\n        typedef typename tbb::flow::tuple_element<1,OutputTuple>::type ItemType1;\n\n        tbb::flow::graph g;\n        tbb::atomic<int>source0_count;\n        tbb::atomic<int>source1_count;\n        tbb::atomic<int>sink_count;\n        source0_count = source1_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n        eh_test_observer o;\n        o.observe(true);\n#endif\n        g_Master = Harness::CurrentTid();\n        SourceType0 source0(g, SourceBodyType0(source0_count),/*is_active*/false);\n        SourceType1 source1(g, SourceBodyType1(source1_count),/*is_active*/false);\n        TestJoinType node_to_test(g);\n        SinkType sink(g,tbb::flow::unlimited,SinkBodyType(sink_count));\n        make_edge(source0,tbb::flow::input_port<0>(node_to_test));\n        make_edge(source1,tbb::flow::input_port<1>(node_to_test));\n        make_edge(node_to_test, sink);\n        for(int iter = 0; iter < 2; ++iter) {\n            ResetGlobals(throwException,flog);\n            if(throwException) {\n                TRY();\n                    source0.activate();\n                    source1.activate();\n                    g.wait_for_all();\n                CATCH_AND_ASSERT();\n            }\n            else {\n                TRY();\n                    source0.activate();\n                    source1.activate();\n                    g.wait_for_all();\n                CATCH_AND_FAIL();\n            }\n            bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n            int sb0_cnt = tbb::flow::copy_body<SourceBodyType0>(source0).count_value();\n            int sb1_cnt = tbb::flow::copy_body<SourceBodyType1>(source1).count_value();\n            int nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n            if(throwException) {\n                ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n                ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n                ASSERT(sb0_cnt <= g_NumItems && sb1_cnt <= g_NumItems, \"Too many items sent by sources\");\n                ASSERT(nb_cnt <= ((sb0_cnt < sb1_cnt) ? sb0_cnt : sb1_cnt), \"Too many items received by sink nodes\");\n            }\n            else {\n                ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n                ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n                if(sb0_cnt != g_NumItems) {\n                    REMARK(\"throwException == %s\\n\", throwException ? \"true\" : \"false\");\n                    REMARK(\"iter == %d\\n\", (int)iter);\n                    REMARK(\"sb0_cnt == %d\\n\", (int)sb0_cnt);\n                    REMARK(\"g_NumItems == %d\\n\", (int)g_NumItems);\n                }\n                ASSERT(sb0_cnt == g_NumItems, \"Missing invocations of source_node0\");  // this one\n                ASSERT(sb1_cnt == g_NumItems, \"Missing invocations of source_node1\");\n                ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n            }\n            if(iter == 0) {\n                remove_edge(node_to_test, sink);\n                tbb::flow::input_port<0>(node_to_test).try_put(ItemType0(g_NumItems + 1));\n                tbb::flow::input_port<1>(node_to_test).try_put(ItemType1(g_NumItems + 2));\n                g.wait_for_all();\n                g.reset();\n                source0_count = source1_count = sink_count = 0;\n                make_edge(node_to_test, sink);\n                g.wait_for_all();\n            }\n            else {\n                g.wait_for_all();\n                g.reset();\n                source0_count = source1_count = sink_count = 0;\n            }\n            ASSERT(0 == tbb::flow::copy_body<SourceBodyType0>(source0).count_value(),\"Reset source failed\");\n            ASSERT(0 == tbb::flow::copy_body<SourceBodyType1>(source1).count_value(),\"Reset source failed\");\n            nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n            ASSERT(0 == tbb::flow::copy_body<SinkBodyType>(sink).count_value(),\"Reset sink failed\");\n        }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n        o.observe(false);\n#endif\n    }\n};  // run_one_join_node_test\n\ntemplate<\n    class OutputTuple,\n    class SourceType0,\n    class SourceBodyType0,\n    class SourceType1,\n    class SourceBodyType1,\n    class TestJoinType,\n    class SinkType,\n    class SinkBodyType\n    >\nstruct run_one_join_node_test<\n        tbb::flow::tag_matching,\n        OutputTuple,\n        SourceType0,\n        SourceBodyType0,\n        SourceType1,\n        SourceBodyType1,\n        TestJoinType,\n        SinkType,\n        SinkBodyType\n    > {\n    run_one_join_node_test() {}\n    static void execute_test(bool throwException,bool flog) {\n        typedef typename tbb::flow::tuple_element<0,OutputTuple>::type ItemType0;\n        typedef typename tbb::flow::tuple_element<1,OutputTuple>::type ItemType1;\n\n        tbb::flow::graph g;\n\n        tbb::atomic<int>source0_count;\n        tbb::atomic<int>source1_count;\n        tbb::atomic<int>sink_count;\n        source0_count = source1_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n        eh_test_observer o;\n        o.observe(true);\n#endif\n        g_Master = Harness::CurrentTid();\n        SourceType0 source0(g, SourceBodyType0(source0_count, 2),/*is_active*/false);\n        SourceType1 source1(g, SourceBodyType1(source1_count, 3),/*is_active*/false);\n        TestJoinType node_to_test(g, tag_func<ItemType0>(ItemType0(2)), tag_func<ItemType1>(ItemType1(3)));\n        SinkType sink(g,tbb::flow::unlimited,SinkBodyType(sink_count));\n        make_edge(source0,tbb::flow::input_port<0>(node_to_test));\n        make_edge(source1,tbb::flow::input_port<1>(node_to_test));\n        make_edge(node_to_test, sink);\n        for(int iter = 0; iter < 2; ++iter) {\n            ResetGlobals(throwException,flog);\n            if(throwException) {\n                TRY();\n                    source0.activate();\n                    source1.activate();\n                    g.wait_for_all();\n                CATCH_AND_ASSERT();\n            }\n            else {\n                TRY();\n                    source0.activate();\n                    source1.activate();\n                    g.wait_for_all();\n                CATCH_AND_FAIL();\n            }\n            bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n            int sb0_cnt = tbb::flow::copy_body<SourceBodyType0>(source0).count_value();\n            int sb1_cnt = tbb::flow::copy_body<SourceBodyType1>(source1).count_value();\n            int nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n            if(throwException) {\n                ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n                ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n                ASSERT(sb0_cnt <= g_NumItems && sb1_cnt <= g_NumItems, \"Too many items sent by sources\");\n                ASSERT(nb_cnt <= ((sb0_cnt < sb1_cnt) ? sb0_cnt : sb1_cnt), \"Too many items received by sink nodes\");\n            }\n            else {\n                ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n                ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n                ASSERT(sb0_cnt == g_NumItems, \"Missing invocations of source_node0\");\n                ASSERT(sb1_cnt == g_NumItems, \"Missing invocations of source_node1\");\n                ASSERT(nb_cnt == g_NumItems, \"Missing items in absorbers\");\n            }\n            if(iter == 0) {\n                remove_edge(node_to_test, sink);\n                tbb::flow::input_port<0>(node_to_test).try_put(ItemType0(g_NumItems + 4));\n                tbb::flow::input_port<1>(node_to_test).try_put(ItemType1(g_NumItems + 2));\n                g.wait_for_all();   // have to wait for the graph to stop again....\n                g.reset();  // resets the body of the source_nodes, test_node and the absorb_nodes.\n                source0_count = source1_count = sink_count = 0;\n                make_edge(node_to_test, sink);\n                g.wait_for_all();   // have to wait for the graph to stop again....\n            }\n            else {\n                g.wait_for_all();\n                g.reset();\n                source0_count = source1_count = sink_count = 0;\n            }\n            ASSERT(0 == tbb::flow::copy_body<SourceBodyType0>(source0).count_value(),\"Reset source failed\");\n            ASSERT(0 == tbb::flow::copy_body<SourceBodyType1>(source1).count_value(),\"Reset source failed\");\n            nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n            ASSERT(0 == tbb::flow::copy_body<SinkBodyType>(sink).count_value(),\"Reset sink failed\");\n        }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n        o.observe(false);\n#endif\n    }\n};  // run_one_join_node_test<tag_matching>\n\ntemplate<class JP, class OutputTuple,\n             TestNodeTypeEnum SourceThrowType,\n             TestNodeTypeEnum SinkThrowType>\nvoid run_join_node_test() {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type ItemType0;\n    typedef typename tbb::flow::tuple_element<1,OutputTuple>::type ItemType1;\n    typedef test_source_body<ItemType0,SourceThrowType> SourceBodyType0;\n    typedef test_source_body<ItemType1,SourceThrowType> SourceBodyType1;\n    typedef absorber_body<OutputTuple,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n\n    typedef typename tbb::flow::source_node<ItemType0> SourceType0;\n    typedef typename tbb::flow::source_node<ItemType1> SourceType1;\n    typedef typename tbb::flow::join_node<OutputTuple,JP> TestJoinType;\n    typedef typename tbb::flow::function_node<OutputTuple,tbb::flow::continue_msg> SinkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(2 == i) continue;\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_join_node_test<\n             JP,\n             OutputTuple,\n             SourceType0,\n             SourceBodyType0,\n             SourceType1,\n             SourceBodyType1,\n             TestJoinType,\n             SinkType,\n             SinkBodyType>::execute_test(throwException,doFlog);\n    }\n}\n\ntemplate<class JP>\nvoid test_join_node() {\n    REMARK(\"Testing join_node<%s>\\n\", graph_policy_name<JP>::name());\n    // only doing two-input joins\n    g_Wakeup_Msg = \"join(is,non): Missed wakeup or machine is overloaded?\";\n    run_join_node_test<JP, tbb::flow::tuple<int,int>,  isThrowing, nonThrowing>();\n    check_type<int>::check_type_counter = 0;\n    g_Wakeup_Msg = \"join(non,is): Missed wakeup or machine is overloaded?\";\n    run_join_node_test<JP, tbb::flow::tuple<check_type<int>,int>, nonThrowing, isThrowing>();\n    ASSERT(!check_type<int>::check_type_counter, \"Dropped items in test\");\n    g_Wakeup_Msg = \"join(is,is): Missed wakeup or machine is overloaded?\";\n    run_join_node_test<JP, tbb::flow::tuple<int,int>,  isThrowing, isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// ------------------- limiter_node -------------\n\ntemplate<\n    class BufferItemType,       //\n    class SourceNodeType,\n    class SourceNodeBodyType,\n    class TestNodeType,\n    class SinkNodeType,\n    class SinkNodeBodyType >\nvoid run_one_limiter_node_test(bool throwException,bool flog) {\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> sink_count;\n    source_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceNodeType source(g, SourceNodeBodyType(source_count),/*is_active*/false);\n    TestNodeType node_to_test(g,g_NumThreads + 1);\n    SinkNodeType sink(g,tbb::flow::unlimited,SinkNodeBodyType(sink_count));\n    make_edge(source,node_to_test);\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceNodeBodyType>(source).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(nb_cnt <= sb_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            // we stop after limiter's limit, which is g_NumThreads + 1.  The source_node\n            // is invoked one extra time, filling its buffer, so its limit is g_NumThreads + 2.\n            ASSERT(sb_cnt == g_NumThreads + 2, \"Missing invocations of source_node\");\n            ASSERT(nb_cnt == g_NumThreads + 1, \"Missing items in absorbers\");\n        }\n        if(iter == 0) {\n            remove_edge(node_to_test, sink);\n            node_to_test.try_put(BufferItemType());\n            node_to_test.try_put(BufferItemType());\n            g.wait_for_all();\n            g.reset();\n            source_count = sink_count = 0;\n            BufferItemType tmp;\n            ASSERT(!node_to_test.try_get(tmp), \"node not empty\");\n            make_edge(node_to_test, sink);\n            g.wait_for_all();\n        }\n        else {\n            g.reset();\n            source_count = sink_count = 0;\n        }\n        ASSERT(0 == tbb::flow::copy_body<SourceNodeBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkNodeBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<class BufferItemType,\n         TestNodeTypeEnum SourceThrowType,\n         TestNodeTypeEnum SinkThrowType>\nvoid run_limiter_node_test() {\n    typedef test_source_body<BufferItemType,SourceThrowType> SourceBodyType;\n    typedef absorber_body<BufferItemType,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n\n    typedef tbb::flow::source_node<BufferItemType> SrcType;\n    typedef tbb::flow::limiter_node<BufferItemType>  LmtType;\n    typedef tbb::flow::function_node<BufferItemType,tbb::flow::continue_msg> SnkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(i == 2) continue;  // no need to test flog w/o throws\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_limiter_node_test<\n            /* class BufferItemType*/     BufferItemType,\n            /*class SourceNodeType*/      SrcType,\n            /*class SourceNodeBodyType*/  SourceBodyType,\n            /*class TestNodeType*/        LmtType,\n            /*class SinkNodeType*/        SnkType,\n            /*class SinkNodeBodyType*/    SinkBodyType\n            >(throwException, doFlog);\n    }\n}\n\nvoid test_limiter_node() {\n    REMARK(\"Testing limiter_node\\n\");\n    g_Wakeup_Msg = \"limiter_node(is,non): Missed wakeup or machine is overloaded?\";\n    run_limiter_node_test<int,isThrowing,nonThrowing>();\n    g_Wakeup_Msg = \"limiter_node(non,is): Missed wakeup or machine is overloaded?\";\n    run_limiter_node_test<int,nonThrowing,isThrowing>();\n    g_Wakeup_Msg = \"limiter_node(is,is): Missed wakeup or machine is overloaded?\";\n    run_limiter_node_test<int,isThrowing,isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// -------- split_node --------------------\n\ntemplate<\n    class InputTuple,\n    class SourceType,\n    class SourceBodyType,\n    class TestSplitType,\n    class SinkType0,\n    class SinkBodyType0,\n    class SinkType1,\n    class SinkBodyType1>\nvoid run_one_split_node_test(bool throwException, bool flog) {\n\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source_count;\n    tbb::atomic<int> sink0_count;\n    tbb::atomic<int> sink1_count;\n    source_count = sink0_count = sink1_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n\n    g_Master = Harness::CurrentTid();\n    SourceType source(g, SourceBodyType(source_count),/*is_active*/false);\n    TestSplitType node_to_test(g);\n    SinkType0 sink0(g,tbb::flow::unlimited,SinkBodyType0(sink0_count));\n    SinkType1 sink1(g,tbb::flow::unlimited,SinkBodyType1(sink1_count));\n    make_edge(source, node_to_test);\n    make_edge(tbb::flow::output_port<0>(node_to_test), sink0);\n    make_edge(tbb::flow::output_port<1>(node_to_test), sink1);\n\n    for(int iter = 0; iter < 2; ++iter) {  // run, reset, run again\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb_cnt = tbb::flow::copy_body<SourceBodyType>(source).count_value();\n        int nb0_cnt = tbb::flow::copy_body<SinkBodyType0>(sink0).count_value();\n        int nb1_cnt = tbb::flow::copy_body<SinkBodyType1>(sink1).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb_cnt <= 2*g_NumItems, \"Too many items sent by source\");\n            ASSERT(nb0_cnt + nb1_cnt <= sb_cnt*2, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb_cnt == g_NumItems, \"Missing invocations of source_nodes\");\n            ASSERT(nb0_cnt == g_NumItems && nb1_cnt == g_NumItems, \"Missing items in absorbers\");\n        }\n        g.reset();  // resets the body of the source_nodes and the absorb_nodes.\n        source_count = sink0_count = sink1_count = 0;\n        ASSERT(0 == tbb::flow::copy_body<SourceBodyType>(source).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkBodyType0>(sink0).count_value(),\"Reset sink 0 failed\");\n        ASSERT(0 == tbb::flow::copy_body<SinkBodyType1>(sink1).count_value(),\"Reset sink 1 failed\");\n    }\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<class InputTuple,\n             TestNodeTypeEnum SourceThrowType,\n             TestNodeTypeEnum SinkThrowType>\nvoid run_split_node_test() {\n    typedef typename tbb::flow::tuple_element<0,InputTuple>::type ItemType0;\n    typedef typename tbb::flow::tuple_element<1,InputTuple>::type ItemType1;\n    typedef tuple_test_source_body<InputTuple,SourceThrowType> SourceBodyType;\n    typedef absorber_body<ItemType0,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType0;\n    typedef absorber_body<ItemType1,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType1;\n\n    typedef typename tbb::flow::source_node<InputTuple> SourceType;\n    typedef typename tbb::flow::split_node<InputTuple> TestSplitType;\n    typedef typename tbb::flow::function_node<ItemType0,tbb::flow::continue_msg> SinkType0;\n    typedef typename tbb::flow::function_node<ItemType1,tbb::flow::continue_msg> SinkType1;\n\n    for(int i = 0; i < 4; ++i) {\n        if(2 == i) continue;\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_split_node_test<\n            InputTuple,\n            SourceType,\n            SourceBodyType,\n            TestSplitType,\n            SinkType0,\n            SinkBodyType0,\n            SinkType1,\n            SinkBodyType1>\n                (throwException,doFlog);\n    }\n}\n\nvoid test_split_node() {\n    REMARK(\"Testing split_node\\n\");\n    g_Wakeup_Msg = \"split_node(is,non): Missed wakeup or machine is overloaded?\";\n    run_split_node_test<tbb::flow::tuple<int,int>, isThrowing, nonThrowing>();\n    g_Wakeup_Msg = \"split_node(non,is): Missed wakeup or machine is overloaded?\";\n    run_split_node_test<tbb::flow::tuple<int,int>, nonThrowing, isThrowing>();\n    g_Wakeup_Msg = \"split_node(is,is): Missed wakeup or machine is overloaded?\";\n    run_split_node_test<tbb::flow::tuple<int,int>, isThrowing,  isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;\n}\n\n// --------- indexer_node ----------------------\n\ntemplate < class InputTuple,\n    class SourceType0,\n    class SourceBodyType0,\n    class SourceType1,\n    class SourceBodyType1,\n    class TestNodeType,\n    class SinkType,\n    class SinkBodyType>\nvoid run_one_indexer_node_test(bool throwException,bool flog) {\n    typedef typename tbb::flow::tuple_element<0,InputTuple>::type ItemType0;\n    typedef typename tbb::flow::tuple_element<1,InputTuple>::type ItemType1;\n\n    tbb::flow::graph g;\n\n    tbb::atomic<int> source0_count;\n    tbb::atomic<int> source1_count;\n    tbb::atomic<int> sink_count;\n    source0_count = source1_count = sink_count = 0;\n#if USE_TASK_SCHEDULER_OBSERVER\n    eh_test_observer o;\n    o.observe(true);\n#endif\n    g_Master = Harness::CurrentTid();\n    SourceType0 source0(g, SourceBodyType0(source0_count),/*is_active*/false);\n    SourceType1 source1(g, SourceBodyType1(source1_count),/*is_active*/false);\n    TestNodeType node_to_test(g);\n    SinkType sink(g,tbb::flow::unlimited,SinkBodyType(sink_count));\n    make_edge(source0,tbb::flow::input_port<0>(node_to_test));\n    make_edge(source1,tbb::flow::input_port<1>(node_to_test));\n    make_edge(node_to_test, sink);\n    for(int iter = 0; iter < 2; ++iter) {\n        ResetGlobals(throwException,flog);\n        if(throwException) {\n            TRY();\n                source0.activate();\n                source1.activate();\n                g.wait_for_all();\n            CATCH_AND_ASSERT();\n        }\n        else {\n            TRY();\n                source0.activate();\n                source1.activate();\n                g.wait_for_all();\n            CATCH_AND_FAIL();\n        }\n        bool okayNoExceptionsCaught = (g_ExceptionInMaster && !g_MasterExecutedThrow) || (!g_ExceptionInMaster && !g_NonMasterExecutedThrow) || !throwException;\n        int sb0_cnt = tbb::flow::copy_body<SourceBodyType0>(source0).count_value();\n        int sb1_cnt = tbb::flow::copy_body<SourceBodyType1>(source1).count_value();\n        int nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n        if(throwException) {\n            ASSERT(g.exception_thrown() || okayNoExceptionsCaught, \"Exception not caught by graph\");\n            ASSERT(g.is_cancelled() || okayNoExceptionsCaught, \"Cancellation not signalled in graph\");\n            ASSERT(sb0_cnt <= g_NumItems && sb1_cnt <= g_NumItems, \"Too many items sent by sources\");\n            ASSERT(nb_cnt <= sb0_cnt + sb1_cnt, \"Too many items received by sink nodes\");\n        }\n        else {\n            ASSERT(!g.exception_thrown(), \"Exception flag in flow::graph set but no throw occurred\");\n            ASSERT(!g.is_cancelled(), \"canceled flag set but no throw occurred\");\n            ASSERT(sb0_cnt == g_NumItems, \"Missing invocations of source_node0\");\n            ASSERT(sb1_cnt == g_NumItems, \"Missing invocations of source_node1\");\n            ASSERT(nb_cnt == 2*g_NumItems, \"Missing items in absorbers\");\n        }\n        if(iter == 0) {\n            remove_edge(node_to_test, sink);\n            tbb::flow::input_port<0>(node_to_test).try_put(ItemType0(g_NumItems + 4));\n            tbb::flow::input_port<1>(node_to_test).try_put(ItemType1(g_NumItems + 2));\n            g.wait_for_all();\n            g.reset();\n            source0_count = source1_count = sink_count = 0;\n            make_edge(node_to_test, sink);\n            g.wait_for_all();\n        }\n        else {\n            g.wait_for_all();\n            g.reset();\n            source0_count = source1_count = sink_count = 0;\n        }\n        ASSERT(0 == tbb::flow::copy_body<SourceBodyType0>(source0).count_value(),\"Reset source failed\");\n        ASSERT(0 == tbb::flow::copy_body<SourceBodyType1>(source1).count_value(),\"Reset source failed\");\n        nb_cnt = tbb::flow::copy_body<SinkBodyType>(sink).count_value();\n        ASSERT(0 == tbb::flow::copy_body<SinkBodyType>(sink).count_value(),\"Reset sink failed\");\n    }\n\n#if USE_TASK_SCHEDULER_OBSERVER\n    o.observe(false);\n#endif\n}\n\ntemplate<class InputTuple,\n    TestNodeTypeEnum SourceThrowType,\n    TestNodeTypeEnum SinkThrowType>\nvoid run_indexer_node_test() {\n    typedef typename tbb::flow::tuple_element<0,InputTuple>::type ItemType0;\n    typedef typename tbb::flow::tuple_element<1,InputTuple>::type ItemType1;\n    typedef test_source_body<ItemType0,SourceThrowType> SourceBodyType0;\n    typedef test_source_body<ItemType1,SourceThrowType> SourceBodyType1;\n    typedef typename tbb::flow::indexer_node<ItemType0, ItemType1> TestNodeType;\n    typedef absorber_body<typename TestNodeType::output_type,tbb::flow::continue_msg,SinkThrowType,unlimited_type> SinkBodyType;\n\n    typedef typename tbb::flow::source_node<ItemType0> SourceType0;\n    typedef typename tbb::flow::source_node<ItemType1> SourceType1;\n    typedef typename tbb::flow::function_node<typename TestNodeType::output_type,tbb::flow::continue_msg> SinkType;\n\n    for(int i = 0; i < 4; ++i) {\n        if(2 == i) continue;\n        bool throwException = (i & 0x1) != 0;\n        bool doFlog = (i & 0x2) != 0;\n        run_one_indexer_node_test<\n             InputTuple,\n             SourceType0,\n             SourceBodyType0,\n             SourceType1,\n             SourceBodyType1,\n             TestNodeType,\n             SinkType,\n             SinkBodyType>(throwException,doFlog);\n    }\n}\n\nvoid test_indexer_node() {\n    REMARK(\"Testing indexer_node\\n\");\n    g_Wakeup_Msg = \"indexer_node(is,non): Missed wakeup or machine is overloaded?\";\n    run_indexer_node_test<tbb::flow::tuple<int,int>, isThrowing, nonThrowing>();\n    g_Wakeup_Msg = \"indexer_node(non,is): Missed wakeup or machine is overloaded?\";\n    run_indexer_node_test<tbb::flow::tuple<int,int>, nonThrowing, isThrowing>();\n    g_Wakeup_Msg = \"indexer_node(is,is): Missed wakeup or machine is overloaded?\";\n    run_indexer_node_test<tbb::flow::tuple<int,int>, isThrowing,  isThrowing>();\n    g_Wakeup_Msg = g_Orig_Wakeup_Msg;;\n}\n\n///////////////////////////////////////////////\n// whole-graph exception test\n\nclass Foo {\nprivate:\n    // std::vector<int>& m_vec;\n    std::vector<int>* m_vec;\npublic:\n    Foo(std::vector<int>& vec) : m_vec(&vec) { }\n    void operator() (tbb::flow::continue_msg) const {\n        ++nExceptions;\n        m_vec->at(m_vec->size()); // Will throw out_of_range exception\n        ASSERT(false, \"Exception not thrown by invalid access\");\n    }\n};\n\n// test from user ahelwer: http://software.intel.com/en-us/forums/showthread.php?t=103786\n// exception thrown in graph node, not caught in wait_for_all()\nvoid\ntest_flow_graph_exception0() {\n    // Initializes body\n    std::vector<int> vec;\n    vec.push_back(0);\n    Foo f(vec);\n    nExceptions = 0;\n\n    // Construct graph and nodes\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> start(g);\n    tbb::flow::continue_node<tbb::flow::continue_msg> fooNode(g, f);\n\n    // Construct edge\n    tbb::flow::make_edge(start, fooNode);\n\n    // Execute graph\n    ASSERT(!g.exception_thrown(), \"exception_thrown flag already set\");\n    ASSERT(!g.is_cancelled(), \"canceled flag already set\");\n    try {\n        start.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(false, \"Exception not thrown\");\n    }\n    catch(std::out_of_range& ex) {\n        REMARK(\"Exception: %s (expected)\\n\", ex.what());\n    }\n    catch(...) {\n        REMARK(\"Unknown exception caught (expected)\\n\");\n    }\n    ASSERT(nExceptions > 0, \"Exception caught, but no body signaled exception being thrown\");\n    nExceptions = 0;\n    ASSERT(g.exception_thrown(), \"Exception not intercepted\");\n    // if exception set, cancellation also set.\n    ASSERT(g.is_cancelled(), \"Exception cancellation not signaled\");\n    // in case we got an exception\n    try {\n        g.wait_for_all();  // context still signalled canceled, my_exception still set.\n    }\n    catch(...) {\n        ASSERT(false, \"Second exception thrown but no task executing\");\n    }\n    ASSERT(nExceptions == 0, \"body signaled exception being thrown, but no body executed\");\n    ASSERT(!g.exception_thrown(), \"exception_thrown flag not reset\");\n    ASSERT(!g.is_cancelled(), \"canceled flag not reset\");\n}\n\nvoid TestOneThreadNum(int nThread) {\n    REMARK(\"Testing %d threads\\n\", nThread);\n    g_NumItems = ((nThread > NUM_ITEMS) ? nThread *2 : NUM_ITEMS);\n    g_NumThreads = nThread;\n    tbb::task_scheduler_init init(nThread);\n    // whole-graph exception catch and rethrow test\n    test_flow_graph_exception0();\n    for(int i = 0; i < 4; ++i) {\n        g_ExceptionInMaster = (i & 1) != 0;\n        g_SolitaryException = (i & 2) != 0;\n        REMARK(\"g_ExceptionInMaster == %s, g_SolitaryException == %s\\n\",\n                g_ExceptionInMaster ? \"T\":\"F\",\n                g_SolitaryException ? \"T\":\"F\");\n        test_source_node();\n        test_function_node();\n        test_continue_node();  // also test broadcast_node\n        test_multifunction_node();\n        // single- and multi-item buffering nodes\n        test_buffer_queue_and_overwrite_node();\n        test_sequencer_node();\n        test_priority_queue_node();\n\n        // join_nodes\n        test_join_node<tbb::flow::queueing>();\n        test_join_node<tbb::flow::reserving>();\n        test_join_node<tbb::flow::tag_matching>();\n\n        test_limiter_node();\n        test_split_node();\n        // graph for write_once_node will be complicated by the fact the node will\n        // not do try_puts after it has been set.  To get parallelism of N we have\n        // to attach N successor nodes to the write_once (or play some similar game).\n        // test_write_once_node();\n        test_indexer_node();\n    }\n}\n#endif // TBB_USE_EXCEPTIONS\n\n#if TBB_USE_EXCEPTIONS\nint TestMain() {\n    // reversing the order of tests\n    for(int nThread=MaxThread; nThread >= MinThread; --nThread) {\n        TestOneThreadNum(nThread);\n    }\n\n    return Harness::Done;\n}\n#else\nint TestMain() {\n    return Harness::Skipped;\n}\n#endif // TBB_USE_EXCEPTIONS\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_eh_tasks.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 2\n#define HARNESS_DEFAULT_MAX_THREADS 4\n#define __TBB_SHUFFLE_PRESENT (_MSC_VER >= 1910 || __cplusplus >= 201103L && (__TBB_GLIBCXX_VERSION >= 40800 || _LIBCPP_VERSION))\n\n#include \"harness.h\"\n\n#if __TBB_SHUFFLE_PRESENT\n#include <random>\n#endif\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#define __TBB_ATOMICS_CODEGEN_BROKEN __SUNPRO_CC\n\n#define private public\n#include \"tbb/task.h\"\n#undef private\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/tick_count.h\"\n\n#include <string>\n\n#define NUM_CHILD_TASKS                 256\n#define NUM_ROOT_TASKS                  32\n#define NUM_ROOTS_IN_GROUP              8\n\n//! Statistics about number of tasks in different states\nclass TaskStats {\n    typedef tbb::spin_mutex::scoped_lock lock_t;\n    //! Number of tasks allocated that was ever allocated\n    volatile intptr_t m_Existed;\n    //! Number of tasks executed to the moment\n    volatile intptr_t m_Executed;\n    //! Number of tasks allocated but not yet destroyed to the moment\n    volatile intptr_t m_Existing;\n\n    mutable tbb::spin_mutex  m_Mutex;\npublic:\n    //! Assumes that assignment is noncontended for the left-hand operand\n    const TaskStats& operator= ( const TaskStats& rhs ) {\n        if ( this != &rhs ) {\n            lock_t lock(rhs.m_Mutex);\n            m_Existed = rhs.m_Existed;\n            m_Executed = rhs.m_Executed;\n            m_Existing = rhs.m_Existing;\n        }\n        return *this;\n    }\n    intptr_t Existed() const { return m_Existed; }\n    intptr_t Executed() const { return m_Executed; }\n    intptr_t Existing() const { return m_Existing; }\n    void IncExisted() { lock_t lock(m_Mutex); ++m_Existed; ++m_Existing; }\n    void IncExecuted() { lock_t lock(m_Mutex); ++m_Executed; }\n    void DecExisting() { lock_t lock(m_Mutex); --m_Existing; }\n    //! Assumed to be used in uncontended manner only\n    void Reset() { m_Executed = m_Existing = m_Existed = 0; }\n};\n\nTaskStats g_CurStat;\n\ninline intptr_t Existed () { return g_CurStat.Existed(); }\n\n#include \"harness_eh.h\"\n\nbool g_BoostExecutedCount = true;\nvolatile bool g_TaskWasCancelled = false;\n\ninline void ResetGlobals () {\n    ResetEhGlobals();\n    g_BoostExecutedCount = true;\n    g_TaskWasCancelled = false;\n    g_CurStat.Reset();\n}\n\n#define ASSERT_TEST_POSTCOND() \\\n    ASSERT (g_CurStat.Existed() >= g_CurStat.Executed(), \"Total number of tasks is less than executed\");  \\\n    ASSERT (!g_CurStat.Existing(), \"Not all task objects have been destroyed\"); \\\n    ASSERT (!tbb::task::self().is_cancelled(), \"Scheduler's default context has not been cleaned up properly\");\n\ninline void WaitForException () {\n    int n = 0;\n    while ( ++n < c_Timeout && !__TBB_load_with_acquire(g_ExceptionCaught) )\n        __TBB_Yield();\n    ASSERT_WARNING( n < c_Timeout, \"WaitForException failed\" );\n}\n\nclass TaskBase : public tbb::task {\n    tbb::task* execute () __TBB_override {\n        tbb::task* t = NULL;\n        __TBB_TRY {\n            t = do_execute();\n        } __TBB_CATCH( ... ) {\n            g_CurStat.IncExecuted();\n            __TBB_RETHROW();\n        }\n        g_CurStat.IncExecuted();\n        return t;\n    }\nprotected:\n    TaskBase ( bool throwException = true ) : m_Throw(throwException) { g_CurStat.IncExisted(); }\n    ~TaskBase () { g_CurStat.DecExisting(); }\n\n    virtual tbb::task* do_execute () = 0;\n\n    bool m_Throw;\n}; // class TaskBase\n\nclass LeafTask : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n        if ( g_BoostExecutedCount )\n            ++g_CurExecuted;\n        if ( m_Throw )\n            ThrowTestException(NUM_CHILD_TASKS/2);\n        if ( !g_ThrowException )\n            __TBB_Yield();\n        return NULL;\n    }\npublic:\n    LeafTask ( bool throw_exception = true ) : TaskBase(throw_exception) {}\n};\n\nclass SimpleRootTask : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        set_ref_count(NUM_CHILD_TASKS + 1);\n        for ( size_t i = 0; i < NUM_CHILD_TASKS; ++i )\n            spawn( *new( allocate_child() ) LeafTask(m_Throw) );\n        wait_for_all();\n        return NULL;\n    }\npublic:\n    SimpleRootTask ( bool throw_exception = true ) : TaskBase(throw_exception) {}\n};\n\n#if TBB_USE_EXCEPTIONS\n\nclass SimpleThrowingTask : public tbb::task {\npublic:\n    tbb::task* execute () __TBB_override { throw 0; }\n    ~SimpleThrowingTask() {}\n};\n\n//! Checks if innermost running task information is updated correctly during cancellation processing\nvoid Test0 () {\n    tbb::task_scheduler_init init (1);\n    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task_list tl;\n    tl.push_back( *new( r.allocate_child() ) SimpleThrowingTask );\n    tl.push_back( *new( r.allocate_child() ) SimpleThrowingTask );\n    r.set_ref_count( 3 );\n    try {\n        r.spawn_and_wait_for_all( tl );\n    }\n    catch (...) {}\n    r.destroy( r );\n}\n\n//! Default exception behavior test.\n/** Allocates a root task that spawns a bunch of children, one or several of which throw\n    a test exception in a worker or master thread (depending on the global setting). **/\nvoid Test1 () {\n    ResetGlobals();\n    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(),\n            \"something wrong with the task accounting\");\n    r.set_ref_count(NUM_CHILD_TASKS + 1);\n    for ( int i = 0; i < NUM_CHILD_TASKS; ++i )\n        r.spawn( *new( r.allocate_child() ) LeafTask );\n    TRY();\n        r.wait_for_all();\n    CATCH_AND_ASSERT();\n    r.destroy(r);\n    ASSERT_TEST_POSTCOND();\n} // void Test1 ()\n\n//! Default exception behavior test.\n/** Allocates and spawns root task that runs a bunch of children, one of which throws\n    a test exception in a worker thread. (Similar to Test1, except that the root task\n    is spawned by the test function, and children are created by the root task instead\n    of the test function body.) **/\nvoid Test2 () {\n    ResetGlobals();\n    SimpleRootTask &r = *new( tbb::task::allocate_root() ) SimpleRootTask;\n    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(),\n            \"something wrong with the task accounting\");\n    TRY();\n        tbb::task::spawn_root_and_wait(r);\n    CATCH_AND_ASSERT();\n    ASSERT (g_ExceptionCaught, \"no exception occurred\");\n    ASSERT_TEST_POSTCOND();\n} // void Test2 ()\n\n//! The same as Test2() except the root task has explicit context.\n/** The context is initialized as bound in order to check correctness of its associating\n    with a root task. **/\nvoid Test3 () {\n    ResetGlobals();\n    tbb::task_group_context  ctx(tbb::task_group_context::bound);\n    SimpleRootTask &r = *new( tbb::task::allocate_root(ctx) ) SimpleRootTask;\n    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(),\n            \"something wrong with the task accounting\");\n    TRY();\n        tbb::task::spawn_root_and_wait(r);\n    CATCH_AND_ASSERT();\n    ASSERT (g_ExceptionCaught, \"no exception occurred\");\n    ASSERT_TEST_POSTCOND();\n} // void Test2 ()\n\nclass RootLauncherTask : public TaskBase {\n    tbb::task_group_context::kind_type m_CtxKind;\n\n    tbb::task* do_execute () __TBB_override {\n        tbb::task_group_context  ctx(m_CtxKind);\n        SimpleRootTask &r = *new( allocate_root() ) SimpleRootTask;\n        r.change_group(ctx);\n        TRY();\n            spawn_root_and_wait(r);\n            // Give a child of our siblings a chance to throw the test exception\n            WaitForException();\n        CATCH();\n        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, \"unknown exception was caught\");\n        return NULL;\n    }\npublic:\n    RootLauncherTask ( tbb::task_group_context::kind_type ctx_kind = tbb::task_group_context::isolated ) : m_CtxKind(ctx_kind) {}\n};\n\n/** Allocates and spawns a bunch of roots, which allocate and spawn new root with\n    isolated context, which at last spawns a bunch of children each, one of which\n    throws a test exception in a worker thread. **/\nvoid Test4 () {\n    ResetGlobals();\n    tbb::task_list  tl;\n    for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )\n        tl.push_back( *new( tbb::task::allocate_root() ) RootLauncherTask );\n    TRY();\n        tbb::task::spawn_root_and_wait(tl);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"exception in this scope is unexpected\");\n    intptr_t  num_tasks_expected = NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 2);\n    ASSERT (g_CurStat.Existed() == num_tasks_expected, \"Wrong total number of tasks\");\n    if ( g_SolitaryException )\n        ASSERT (g_CurStat.Executed() >= num_tasks_expected - NUM_CHILD_TASKS, \"Unexpected number of executed tasks\");\n    ASSERT_TEST_POSTCOND();\n} // void Test4 ()\n\n/** The same as Test4, except the contexts are bound. **/\nvoid Test4_1 () {\n    ResetGlobals();\n    tbb::task_list  tl;\n    for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )\n        tl.push_back( *new( tbb::task::allocate_root() ) RootLauncherTask(tbb::task_group_context::bound) );\n    TRY();\n        tbb::task::spawn_root_and_wait(tl);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"exception in this scope is unexpected\");\n    intptr_t  num_tasks_expected = NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 2);\n    ASSERT (g_CurStat.Existed() == num_tasks_expected, \"Wrong total number of tasks\");\n    if ( g_SolitaryException )\n        ASSERT (g_CurStat.Executed() >= num_tasks_expected - NUM_CHILD_TASKS, \"Unexpected number of executed tasks\");\n    ASSERT_TEST_POSTCOND();\n} // void Test4_1 ()\n\n\nclass RootsGroupLauncherTask : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        tbb::task_group_context  ctx (tbb::task_group_context::isolated);\n        tbb::task_list  tl;\n        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )\n            tl.push_back( *new( allocate_root(ctx) ) SimpleRootTask );\n        TRY();\n            spawn_root_and_wait(tl);\n            // Give worker a chance to throw exception\n            WaitForException();\n        CATCH_AND_ASSERT();\n        return NULL;\n    }\n};\n\n/** Allocates and spawns a bunch of roots, which allocate and spawn groups of roots\n    with an isolated context shared by all group members, which at last spawn a bunch\n    of children each, one of which throws a test exception in a worker thread. **/\nvoid Test5 () {\n    ResetGlobals();\n    tbb::task_list  tl;\n    for ( size_t i = 0; i < NUM_ROOTS_IN_GROUP; ++i )\n        tl.push_back( *new( tbb::task::allocate_root() ) RootsGroupLauncherTask );\n    TRY();\n        tbb::task::spawn_root_and_wait(tl);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception intercepted\");\n    if ( g_SolitaryException )  {\n        intptr_t  num_tasks_expected = NUM_ROOTS_IN_GROUP * (1 + NUM_ROOT_TASKS * (1 + NUM_CHILD_TASKS));\n        intptr_t  min_num_tasks_executed = num_tasks_expected - NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 1);\n        ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, \"Too few tasks executed\");\n    }\n    ASSERT_TEST_POSTCOND();\n} // void Test5 ()\n\nclass ThrowingRootLauncherTask : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        tbb::task_group_context  ctx (tbb::task_group_context::bound);\n        SimpleRootTask &r = *new( allocate_root(ctx) ) SimpleRootTask(false);\n        TRY();\n            spawn_root_and_wait(r);\n        CATCH();\n        ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception intercepted\");\n        ThrowTestException(NUM_CHILD_TASKS);\n        g_TaskWasCancelled |= is_cancelled();\n        return NULL;\n    }\n};\n\nclass BoundHierarchyLauncherTask : public TaskBase {\n    bool m_Recover;\n\n    void alloc_roots ( tbb::task_group_context& ctx, tbb::task_list& tl ) {\n        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )\n            tl.push_back( *new( allocate_root(ctx) ) ThrowingRootLauncherTask );\n    }\n\n    tbb::task* do_execute () __TBB_override {\n        tbb::task_group_context  ctx (tbb::task_group_context::isolated);\n        tbb::task_list tl;\n        alloc_roots(ctx, tl);\n        TRY();\n            spawn_root_and_wait(tl);\n        CATCH_AND_ASSERT();\n        ASSERT (l_ExceptionCaughtAtCurrentLevel, \"no exception occurred\");\n        ASSERT (!tl.empty(), \"task list was cleared somehow\");\n        if ( g_SolitaryException )\n            ASSERT (g_TaskWasCancelled, \"No tasks were cancelled despite of exception\");\n        if ( m_Recover ) {\n            // Test task_group_context::unbind and task_group_context::reset methods\n            g_ThrowException = false;\n            l_ExceptionCaughtAtCurrentLevel = false;\n            tl.clear();\n            alloc_roots(ctx, tl);\n            ctx.reset();\n            try {\n                spawn_root_and_wait(tl);\n            }\n            catch (...) {\n                l_ExceptionCaughtAtCurrentLevel = true;\n            }\n            ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception occurred\");\n        }\n        return NULL;\n    }\npublic:\n    BoundHierarchyLauncherTask ( bool recover = false ) : m_Recover(recover) {}\n\n}; // class BoundHierarchyLauncherTask\n\n//! Test for bound contexts forming 2 level tree. Exception is thrown on the 1st (root) level.\n/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing\n    the same isolated context, each of which in their turn spawns a single 3rd level\n    root with  the bound context, and these 3rd level roots spawn bunches of leaves\n    in the end. Leaves do not generate exceptions. The test exception is generated\n    by one of the 2nd level roots. **/\nvoid Test6 () {\n    ResetGlobals();\n    BoundHierarchyLauncherTask &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask;\n    TRY();\n        tbb::task::spawn_root_and_wait(r);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception intercepted\");\n    // After the first of the branches (ThrowingRootLauncherTask) completes,\n    // the rest of the task tree may be collapsed before having a chance to execute leaves.\n    // A number of branches running concurrently with the first one will be able to spawn leaves though.\n    /// \\todo: If additional checkpoints are added to scheduler the following assertion must weaken\n    intptr_t  num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);\n    intptr_t  min_num_tasks_created = 1 + g_NumThreads * 2 + NUM_CHILD_TASKS;\n    // 2 stands for BoundHierarchyLauncherTask and SimpleRootTask\n    // 1 corresponds to BoundHierarchyLauncherTask\n    intptr_t  min_num_tasks_executed = 2 + 1 + NUM_CHILD_TASKS;\n    ASSERT (g_CurStat.Existed() <= num_tasks_expected, \"Number of expected tasks is calculated incorrectly\");\n    ASSERT (g_CurStat.Existed() >= min_num_tasks_created, \"Too few tasks created\");\n    ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, \"Too few tasks executed\");\n    ASSERT_TEST_POSTCOND();\n} // void Test6 ()\n\n//! Tests task_group_context::unbind and task_group_context::reset methods.\n/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing\n    the same isolated context, each of which in their turn spawns a single 3rd level\n    root with  the bound context, and these 3rd level roots spawn bunches of leaves\n    in the end. Leaves do not generate exceptions. The test exception is generated\n    by one of the 2nd level roots. **/\nvoid Test7 () {\n    ResetGlobals();\n    BoundHierarchyLauncherTask &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask;\n    TRY();\n        tbb::task::spawn_root_and_wait(r);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception intercepted\");\n    ASSERT_TEST_POSTCOND();\n} // void Test6 ()\n\nclass BoundHierarchyLauncherTask2 : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        tbb::task_group_context  ctx;\n        tbb::task_list  tl;\n        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )\n            tl.push_back( *new( allocate_root(ctx) ) RootLauncherTask(tbb::task_group_context::bound) );\n        TRY();\n            spawn_root_and_wait(tl);\n        CATCH_AND_ASSERT();\n        // Exception must be intercepted by RootLauncherTask\n        ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"no exception occurred\");\n        return NULL;\n    }\n}; // class BoundHierarchyLauncherTask2\n\n//! Test for bound contexts forming 2 level tree. Exception is thrown in the 2nd (outer) level.\n/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing\n    the same isolated context, each of which in their turn spawns a single 3rd level\n    root with  the bound context, and these 3rd level roots spawn bunches of leaves\n    in the end. The test exception is generated by one of the leaves. **/\nvoid Test8 () {\n    ResetGlobals();\n    BoundHierarchyLauncherTask2 &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask2;\n    TRY();\n        tbb::task::spawn_root_and_wait(r);\n    CATCH_AND_ASSERT();\n    ASSERT (!l_ExceptionCaughtAtCurrentLevel, \"unexpected exception intercepted\");\n    if ( g_SolitaryException )  {\n        intptr_t  num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);\n        intptr_t  min_num_tasks_created = 1 + g_NumThreads * (2 + NUM_CHILD_TASKS);\n        intptr_t  min_num_tasks_executed = num_tasks_expected - (NUM_CHILD_TASKS + 1);\n        ASSERT (g_CurStat.Existed() <= num_tasks_expected, \"Number of expected tasks is calculated incorrectly\");\n        ASSERT (g_CurStat.Existed() >= min_num_tasks_created, \"Too few tasks created\");\n        ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, \"Too few tasks executed\");\n    }\n    ASSERT_TEST_POSTCOND();\n} // void Test8 ()\n\ntemplate<typename T>\nvoid ThrowMovableException ( intptr_t threshold, const T& data ) {\n    if ( !IsThrowingThread() )\n        return;\n    if ( !g_SolitaryException ) {\n#if __TBB_ATOMICS_CODEGEN_BROKEN\n        g_ExceptionsThrown = g_ExceptionsThrown + 1;\n#else\n        ++g_ExceptionsThrown;\n#endif\n        throw tbb::movable_exception<T>(data);\n    }\n    while ( g_CurStat.Existed() < threshold )\n        __TBB_Yield();\n    if ( g_ExceptionsThrown.compare_and_swap(1, 0) == 0 )\n        throw tbb::movable_exception<T>(data);\n}\n\nconst int g_IntExceptionData = -375;\nconst std::string g_StringExceptionData = \"My test string\";\n\n// Exception data class implementing minimal requirements of tbb::movable_exception\nclass ExceptionData {\n    const ExceptionData& operator = ( const ExceptionData& src );\n    explicit ExceptionData ( int n ) : m_Int(n), m_String(g_StringExceptionData) {}\npublic:\n    ExceptionData ( const ExceptionData& src ) : m_Int(src.m_Int), m_String(src.m_String) {}\n    ~ExceptionData () {}\n\n    int m_Int;\n    std::string m_String;\n\n    // Simple way to provide an instance when all initializing constructors are private\n    // and to avoid memory reclamation problems.\n    static ExceptionData s_data;\n};\n\nExceptionData ExceptionData::s_data(g_IntExceptionData);\n\ntypedef tbb::movable_exception<int> SolitaryMovableException;\ntypedef tbb::movable_exception<ExceptionData> MultipleMovableException;\n\nclass LeafTaskWithMovableExceptions : public TaskBase {\n    tbb::task* do_execute () __TBB_override {\n        Harness::ConcurrencyTracker ct;\n        WaitUntilConcurrencyPeaks();\n        if ( g_SolitaryException )\n            ThrowMovableException<int>(NUM_CHILD_TASKS/2, g_IntExceptionData);\n        else\n            ThrowMovableException<ExceptionData>(NUM_CHILD_TASKS/2, ExceptionData::s_data);\n        return NULL;\n    }\n};\n\nvoid CheckException ( tbb::tbb_exception& e ) {\n    ASSERT (strcmp(e.name(), (g_SolitaryException ? typeid(SolitaryMovableException)\n                                                   : typeid(MultipleMovableException)).name() ) == 0,\n                                                   \"Unexpected original exception name\");\n    ASSERT (strcmp(e.what(), \"tbb::movable_exception\") == 0, \"Unexpected original exception info \");\n    if ( g_SolitaryException ) {\n        SolitaryMovableException& me = dynamic_cast<SolitaryMovableException&>(e);\n        ASSERT (me.data() == g_IntExceptionData, \"Unexpected solitary movable_exception data\");\n    }\n    else {\n        MultipleMovableException& me = dynamic_cast<MultipleMovableException&>(e);\n        ASSERT (me.data().m_Int == g_IntExceptionData, \"Unexpected multiple movable_exception int data\");\n        ASSERT (me.data().m_String == g_StringExceptionData, \"Unexpected multiple movable_exception string data\");\n    }\n}\n\nvoid CheckException () {\n    try {\n        throw;\n    } catch ( tbb::tbb_exception& e ) {\n        CheckException(e);\n    }\n    catch ( ... ) {\n    }\n}\n\n//! Test for movable_exception behavior, and external exception recording.\n/** Allocates a root task that spawns a bunch of children, one or several of which throw\n    a movable exception in a worker or master thread (depending on the global settings).\n    The test also checks the correctness of multiple rethrowing of the pending exception. **/\nvoid TestMovableException () {\n    REMARK( \"TestMovableException\\n\" );\n    ResetGlobals();\n    bool bUnsupported = false;\n    tbb::task_group_context ctx;\n    tbb::empty_task *r = new( tbb::task::allocate_root() ) tbb::empty_task;\n    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(),\n            \"something wrong with the task accounting\");\n    r->set_ref_count(NUM_CHILD_TASKS + 1);\n    for ( int i = 0; i < NUM_CHILD_TASKS; ++i )\n        r->spawn( *new( r->allocate_child() ) LeafTaskWithMovableExceptions );\n    TRY()\n        r->wait_for_all();\n    } catch ( ... ) {\n        ASSERT (!ctx.is_group_execution_cancelled(), \"\");\n        CheckException();\n        try {\n            throw;\n        } catch ( tbb::tbb_exception& e ) {\n            CheckException(e);\n            g_ExceptionCaught = l_ExceptionCaughtAtCurrentLevel = true;\n        }\n        catch ( ... ) {\n            g_ExceptionCaught = true;\n            g_UnknownException = unknownException = true;\n        }\n        try {\n            ctx.register_pending_exception();\n        } catch ( ... ) {\n            bUnsupported = true;\n            REPORT( \"Warning: register_pending_exception() failed. This is expected in case of linking with static msvcrt\\n\" );\n        }\n        ASSERT (ctx.is_group_execution_cancelled() || bUnsupported, \"After exception registration the context must be in the cancelled state\");\n    }\n    r->destroy(*r);\n    ASSERT_EXCEPTION();\n    ASSERT_TEST_POSTCOND();\n\n    r = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;\n    r->set_ref_count(1);\n    g_ExceptionCaught = g_UnknownException = false;\n    try {\n        r->wait_for_all();\n    } catch ( tbb::tbb_exception& e ) {\n        CheckException(e);\n        g_ExceptionCaught = true;\n    }\n    catch ( ... ) {\n        g_ExceptionCaught = true;\n        g_UnknownException = true;\n    }\n    ASSERT (g_ExceptionCaught || bUnsupported, \"no exception occurred\");\n    ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException  || bUnsupported, \"unknown exception was caught\");\n    r->destroy(*r);\n} // void Test10 ()\n\n#endif /* TBB_USE_EXCEPTIONS */\n\ntemplate<class T>\nclass CtxLauncherTask : public tbb::task {\n    tbb::task_group_context &m_Ctx;\n\n    tbb::task* execute () __TBB_override {\n        spawn_root_and_wait( *new( allocate_root(m_Ctx) ) T );\n        return NULL;\n    }\npublic:\n    CtxLauncherTask ( tbb::task_group_context& ctx ) : m_Ctx(ctx) {}\n};\n\n//! Test for cancelling a task hierarchy from outside (from a task running in parallel with it).\nvoid TestCancelation () {\n    ResetGlobals();\n    g_ThrowException = false;\n    tbb::task_group_context  ctx;\n    tbb::task_list  tl;\n    tl.push_back( *new( tbb::task::allocate_root() ) CtxLauncherTask<SimpleRootTask>(ctx) );\n    tl.push_back( *new( tbb::task::allocate_root() ) CancellatorTask(ctx, NUM_CHILD_TASKS / 4) );\n    TRY();\n        tbb::task::spawn_root_and_wait(tl);\n    CATCH_AND_FAIL();\n    ASSERT (g_CurStat.Executed() <= g_ExecutedAtLastCatch + g_NumThreads, \"Too many tasks were executed after cancellation\");\n    ASSERT_TEST_POSTCOND();\n} // void Test9 ()\n\nclass CtxDestroyerTask : public tbb::task {\n    int m_nestingLevel;\n\n    tbb::task* execute () __TBB_override {\n        ASSERT ( m_nestingLevel >= 0 && m_nestingLevel < MaxNestingDepth, \"Wrong nesting level. The test is broken\" );\n        tbb::task_group_context  ctx;\n        tbb::task *t = new( allocate_root(ctx) ) tbb::empty_task;\n        int level = ++m_nestingLevel;\n        if ( level < MaxNestingDepth ) {\n            execute();\n        }\n        else {\n            if ( !CancellatorTask::WaitUntilReady() )\n                REPORT( \"Warning: missing wakeup\\n\" );\n            ++g_CurExecuted;\n        }\n        if ( ctx.is_group_execution_cancelled() )\n            ++s_numCancelled;\n        t->destroy(*t);\n        return NULL;\n    }\npublic:\n    CtxDestroyerTask () : m_nestingLevel(0) { s_numCancelled = 0; }\n\n    static const int MaxNestingDepth = 256;\n    static int s_numCancelled;\n};\n\nint CtxDestroyerTask::s_numCancelled = 0;\n\n//! Test for data race between cancellation propagation and context destruction.\n/** If the data race ever occurs, an assertion inside TBB will be triggered. **/\nvoid TestCtxDestruction () {\n    REMARK( \"TestCtxDestruction\\n\" );\n    for ( size_t i = 0; i < 10; ++i ) {\n        tbb::task_group_context  ctx;\n        tbb::task_list  tl;\n        ResetGlobals();\n        g_BoostExecutedCount = false;\n        g_ThrowException = false;\n        CancellatorTask::Reset();\n\n        tl.push_back( *new( tbb::task::allocate_root() ) CtxLauncherTask<CtxDestroyerTask>(ctx) );\n        tl.push_back( *new( tbb::task::allocate_root() ) CancellatorTask(ctx, 1) );\n        tbb::task::spawn_root_and_wait(tl);\n        ASSERT( g_CurExecuted == 1, \"Test is broken\" );\n        ASSERT( CtxDestroyerTask::s_numCancelled <= CtxDestroyerTask::MaxNestingDepth, \"Test is broken\" );\n    }\n} // void TestCtxDestruction()\n\n#include <algorithm>\n#include \"harness_barrier.h\"\n\nclass CtxConcurrentDestroyer : NoAssign, Harness::NoAfterlife {\n    static const int ContextsPerThread = 512;\n\n    static int s_Concurrency;\n    static int s_NumContexts;\n    static tbb::task_group_context** s_Contexts;\n    static char* s_Buffer;\n    static Harness::SpinBarrier s_Barrier;\n    static Harness::SpinBarrier s_ExitBarrier;\n\n    struct Shuffler {\n        void operator() () const {\n#if __TBB_SHUFFLE_PRESENT\n            std::shuffle(s_Contexts, s_Contexts + s_NumContexts, std::mt19937(std::random_device()()));\n#else\n            std::random_shuffle(s_Contexts, s_Contexts + s_NumContexts);\n#endif\n        }\n    };\npublic:\n    static void Init ( int p ) {\n        s_Concurrency = p;\n        s_NumContexts = p * ContextsPerThread;\n        s_Contexts = new tbb::task_group_context*[s_NumContexts];\n        s_Buffer = new char[s_NumContexts * sizeof(tbb::task_group_context)];\n        s_Barrier.initialize( p );\n        s_ExitBarrier.initialize( p );\n    }\n    static void Uninit () {\n        for ( int i = 0; i < s_NumContexts; ++i ) {\n            tbb::internal::context_list_node_t &node = s_Contexts[i]->my_node;\n            ASSERT( !node.my_next && !node.my_prev, \"Destroyed context was written to during context chain update\" );\n        }\n        delete []s_Contexts;\n        delete []s_Buffer;\n    }\n\n    void operator() ( int id ) const {\n        int begin = ContextsPerThread * id,\n            end = begin + ContextsPerThread;\n        for ( int i = begin; i < end; ++i )\n            s_Contexts[i] = new( s_Buffer + i * sizeof(tbb::task_group_context) ) tbb::task_group_context;\n        s_Barrier.wait( Shuffler() );\n        for ( int i = begin; i < end; ++i ) {\n            s_Contexts[i]->tbb::task_group_context::~task_group_context();\n            memset( static_cast<void*>(s_Contexts[i]), 0, sizeof(tbb::task_group_context) );\n        }\n        s_ExitBarrier.wait();\n    }\n}; // class CtxConcurrentDestroyer\n\nint CtxConcurrentDestroyer::s_Concurrency;\nint CtxConcurrentDestroyer::s_NumContexts;\ntbb::task_group_context** CtxConcurrentDestroyer::s_Contexts;\nchar* CtxConcurrentDestroyer::s_Buffer;\nHarness::SpinBarrier CtxConcurrentDestroyer::s_Barrier;\nHarness::SpinBarrier CtxConcurrentDestroyer::s_ExitBarrier;\n\nvoid TestConcurrentCtxDestruction () {\n    REMARK( \"TestConcurrentCtxDestruction\\n\" );\n    CtxConcurrentDestroyer::Init(g_NumThreads);\n    NativeParallelFor( g_NumThreads, CtxConcurrentDestroyer() );\n    CtxConcurrentDestroyer::Uninit();\n}\n\nvoid RunTests () {\n    REMARK (\"Number of threads %d\\n\", g_NumThreads);\n    tbb::task_scheduler_init init (g_NumThreads);\n    g_Master = Harness::CurrentTid();\n#if TBB_USE_EXCEPTIONS\n    Test1();\n    Test2();\n    Test3();\n    Test4();\n    Test4_1();\n    Test5();\n    Test6();\n    Test7();\n    Test8();\n    TestMovableException();\n#endif /* TBB_USE_EXCEPTIONS */\n    TestCancelation();\n    TestCtxDestruction();\n#if !RML_USE_WCRM\n    TestConcurrentCtxDestruction();\n#endif\n}\n\nint TestMain () {\n    REMARK (\"Using %s\\n\", TBB_USE_CAPTURED_EXCEPTION ? \"tbb:captured_exception\" : \"exact exception propagation\");\n    MinThread = min(NUM_ROOTS_IN_GROUP, min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread)));\n    MaxThread = min(NUM_ROOTS_IN_GROUP, max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread)));\n    ASSERT (NUM_ROOTS_IN_GROUP < NUM_ROOT_TASKS, \"Fix defines\");\n#if TBB_USE_EXCEPTIONS\n    // Test0 always runs on one thread\n    Test0();\n#endif /* TBB_USE_EXCEPTIONS */\n    g_SolitaryException = 0;\n    for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; ++g_NumThreads )\n        RunTests();\n    return Harness::Done;\n}\n\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_enumerable_thread_specific.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 0\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n#include \"tbb/enumerable_thread_specific.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/atomic.h\"\n\n#include <cstring>\n#include <vector>\n#include <deque>\n#include <list>\n#include <map>\n#include <utility>\n\n#include \"harness_assert.h\"\n#include \"harness.h\"\n#include \"harness_checktype.h\"\n\n#include \"../tbbmalloc/shared_utils.h\"\nusing rml::internal::estimatedCacheLineSize;\n\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic ignored \"-Wuninitialized\"\n#endif\n\nstatic tbb::atomic<int> construction_counter;\nstatic tbb::atomic<int> destruction_counter;\n\n#if TBB_USE_DEBUG\nconst int REPETITIONS = 4;\nconst int N = 10000;\nconst int RANGE_MIN=1000;\n#else\nconst int REPETITIONS = 10;\nconst int N = 100000;\nconst int RANGE_MIN=10000;\n#endif\nconst int VALID_NUMBER_OF_KEYS = 100;\nconst double EXPECTED_SUM = (REPETITIONS + 1) * N;\n\n//! A minimal class that occupies N bytes.\n/** Defines default and copy constructor, and allows implicit operator&.\n    Hides operator=. */\ntemplate<size_t N=tbb::internal::NFS_MaxLineSize>\nclass minimal: NoAssign {\nprivate:\n    int my_value;\n    bool is_constructed;\n    char pad[N-sizeof(int) - sizeof(bool)];\npublic:\n    minimal() : NoAssign(), my_value(0) { ++construction_counter; is_constructed = true; }\n    minimal( const minimal &m ) : NoAssign(), my_value(m.my_value) { ++construction_counter; is_constructed = true; }\n    ~minimal() { ++destruction_counter; ASSERT(is_constructed, NULL); is_constructed = false; }\n    void set_value( const int i ) { ASSERT(is_constructed, NULL); my_value = i; }\n    int value( ) const { ASSERT(is_constructed, NULL); return my_value; }\n};\n\nstatic size_t AlignMask = 0;  // set to cache-line-size - 1\n\ntemplate<typename T>\nT& check_alignment(T& t, const char *aname) {\n    if( !tbb::internal::is_aligned(&t, AlignMask)) {\n        REPORT_ONCE(\"alignment error with %s allocator (%x)\\n\", aname, (int)size_t(&t) & (AlignMask-1));\n    }\n    return t;\n}\n\ntemplate<typename T>\nconst T& check_alignment(const T& t, const char *aname) {\n    if( !tbb::internal::is_aligned(&t, AlignMask)) {\n        REPORT_ONCE(\"alignment error with %s allocator (%x)\\n\", aname, (int)size_t(&t) & (AlignMask-1));\n    }\n    return t;\n}\n\n// Test constructors which throw.  If an ETS constructor throws before completion,\n// the already-built objects are un-constructed.  Do not call the destructor if\n// this occurs.\n\nstatic tbb::atomic<int> gThrowValue;\nstatic int targetThrowValue = 3;\n\nclass Thrower {\npublic:\n    Thrower() {\n#if TBB_USE_EXCEPTIONS\n        if(++gThrowValue == targetThrowValue) {\n            throw std::bad_alloc();\n        }\n#endif\n    }\n};\n\n// MyThrower field of ThrowingConstructor will throw after a certain number of\n// construction calls.  The constructor unwinder wshould unconstruct the instance\n// of check_type<int> that was constructed just before.\nclass ThrowingConstructor {\n    check_type<int> m_checktype;\n    Thrower m_throwing_field;\npublic:\n    int m_cnt;\n    ThrowingConstructor() : m_checktype(), m_throwing_field() { m_cnt = 0;}\nprivate:\n};\n\n//\n// A helper class that simplifies writing the tests since minimal does not\n// define = or + operators.\n//\n\ntemplate< typename T >\nstruct test_helper {\n   static inline void init(T &e) { e = static_cast<T>(0); }\n   static inline void sum(T &e, const int addend ) { e += static_cast<T>(addend); }\n   static inline void sum(T &e, const double addend ) { e += static_cast<T>(addend); }\n   static inline void set(T &e, const int value ) { e = static_cast<T>(value); }\n   static inline double get(const T &e ) { return static_cast<double>(e); }\n};\n\ntemplate<size_t N>\nstruct test_helper<minimal<N> > {\n   static inline void init(minimal<N> &sum) { sum.set_value( 0 ); }\n   static inline void sum(minimal<N> &sum, const int addend ) { sum.set_value( sum.value() + addend); }\n   static inline void sum(minimal<N> &sum, const double addend ) { sum.set_value( sum.value() + static_cast<int>(addend)); }\n   static inline void sum(minimal<N> &sum, const minimal<N> &addend ) { sum.set_value( sum.value() + addend.value()); }\n   static inline void set(minimal<N> &v, const int value ) { v.set_value( static_cast<int>(value) ); }\n   static inline double get(const minimal<N> &sum ) { return static_cast<double>(sum.value()); }\n};\n\ntemplate<>\nstruct test_helper<ThrowingConstructor> {\n   static inline void init(ThrowingConstructor &sum) { sum.m_cnt = 0; }\n   static inline void sum(ThrowingConstructor &sum, const int addend ) { sum.m_cnt += addend; }\n   static inline void sum(ThrowingConstructor &sum, const double addend ) { sum.m_cnt += static_cast<int>(addend); }\n   static inline void sum(ThrowingConstructor &sum, const ThrowingConstructor &addend ) { sum.m_cnt += addend.m_cnt; }\n   static inline void set(ThrowingConstructor &v, const int value ) { v.m_cnt = static_cast<int>(value); }\n   static inline double get(const ThrowingConstructor &sum ) { return static_cast<double>(sum.m_cnt); }\n};\n\n//! Tag class used to make certain constructors hard to invoke accidentally.\nstruct SecretTagType {} SecretTag;\n\n//// functors and routines for initialization and combine\n\n//! Counts instances of FunctorFinit\nstatic tbb::atomic<int> FinitCounter;\n\ntemplate <typename T, int Value>\nstruct FunctorFinit {\n    FunctorFinit( const FunctorFinit& ) {++FinitCounter;}\n    FunctorFinit( SecretTagType ) {++FinitCounter;}\n    ~FunctorFinit() {--FinitCounter;}\n    T operator()() { return Value; }\n};\n\ntemplate <int Value>\nstruct FunctorFinit<ThrowingConstructor,Value> {\n    FunctorFinit( const FunctorFinit& ) {++FinitCounter;}\n    FunctorFinit( SecretTagType ) {++FinitCounter;}\n    ~FunctorFinit() {--FinitCounter;}\n    ThrowingConstructor operator()() { ThrowingConstructor temp; temp.m_cnt = Value; return temp; }\n};\n\ntemplate <size_t N, int Value>\nstruct FunctorFinit<minimal<N>,Value> {\n    FunctorFinit( const FunctorFinit& ) {++FinitCounter;}\n    FunctorFinit( SecretTagType ) {++FinitCounter;}\n    ~FunctorFinit() {--FinitCounter;}\n    minimal<N> operator()() {\n        minimal<N> result;\n        result.set_value( Value );\n        return result;\n    }\n};\n\n// Addition\n\ntemplate <typename T>\nstruct FunctorAddCombineRef {\n    T operator()(const T& left, const T& right) const {\n        return left+right;\n    }\n};\n\ntemplate <size_t N>\nstruct FunctorAddCombineRef<minimal<N> > {\n    minimal<N> operator()(const minimal<N>& left, const minimal<N>& right) const {\n        minimal<N> result;\n        result.set_value( left.value() + right.value() );\n        return result;\n    }\n};\n\ntemplate <>\nstruct FunctorAddCombineRef<ThrowingConstructor> {\n    ThrowingConstructor operator()(const ThrowingConstructor& left, const ThrowingConstructor& right) const {\n        ThrowingConstructor result;\n        result.m_cnt = ( left.m_cnt + right.m_cnt );\n        return result;\n    }\n};\n\ntemplate <typename T>\nstruct FunctorAddCombine {\n    T operator()(T left, T right ) const {\n        return FunctorAddCombineRef<T>()( left, right );\n    }\n};\n\ntemplate <typename T>\nT FunctionAddByRef( const T &left, const T &right) {\n    return FunctorAddCombineRef<T>()( left, right );\n}\n\ntemplate <typename T>\nT FunctionAdd( T left, T right) { return FunctionAddByRef(left,right); }\n\ntemplate <typename T>\nclass Accumulator {\npublic:\n    Accumulator(T& _result) : my_result(_result) {}\n    Accumulator& operator=(const Accumulator& other) {\n        test_helper<T>::set(my_result, test_helper<T>::get(other));\n        return *this;\n    }\n    void operator()(const T& new_bit) { test_helper<T>::sum(my_result, new_bit); }\nprivate:\n    T& my_result;\n};\n\ntemplate <typename T>\nclass ClearingAccumulator {\npublic:\n    ClearingAccumulator(T& _result) : my_result(_result) {}\n    ClearingAccumulator& operator=(const ClearingAccumulator& other) {\n        test_helper<T>::set(my_result, test_helper<T>::get(other));\n        return *this;\n    }\n    void operator()(T& new_bit) {\n        test_helper<T>::sum(my_result, new_bit);\n        test_helper<T>::init(new_bit);\n    }\n    static void AssertClean(const T& thread_local_value) {\n        T zero;\n        test_helper<T>::init(zero);\n        ASSERT(test_helper<T>::get(thread_local_value)==test_helper<T>::get(zero),\n               \"combine_each does not allow to modify thread local values?\");\n    }\nprivate:\n    T& my_result;\n};\n\n//// end functors and routines\n\ntemplate< typename T >\nvoid run_serial_scalar_tests(const char *test_name) {\n    tbb::tick_count t0;\n    T sum;\n    test_helper<T>::init(sum);\n\n    REMARK(\"Testing serial %s... \", test_name);\n    for (int t = -1; t < REPETITIONS; ++t) {\n        if (Verbose && t == 0) t0 = tbb::tick_count::now();\n        for (int i = 0; i < N; ++i) {\n            test_helper<T>::sum(sum,1);\n        }\n    }\n\n    double result_value = test_helper<T>::get(sum);\n    ASSERT( EXPECTED_SUM == result_value, NULL);\n    REMARK(\"done\\nserial %s, 0, %g, %g\\n\", test_name, result_value, ( tbb::tick_count::now() - t0).seconds());\n}\n\n\ntemplate <typename T, template<class> class Allocator>\nclass parallel_scalar_body: NoAssign {\n    typedef tbb::enumerable_thread_specific<T, Allocator<T> > ets_type;\n    ets_type &sums;\n    const char* allocator_name;\n\npublic:\n\n    parallel_scalar_body ( ets_type &_sums, const char *alloc_name ) : sums(_sums), allocator_name(alloc_name) { }\n\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        for (int i = r.begin(); i != r.end(); ++i)\n            test_helper<T>::sum( check_alignment(sums.local(),allocator_name), 1 );\n    }\n\n};\n\ntemplate< typename T, template<class> class Allocator>\nvoid run_parallel_scalar_tests_nocombine(const char *test_name, const char *allocator_name) {\n\n    typedef tbb::enumerable_thread_specific<T, Allocator<T> > ets_type;\n\n    Check<T> my_check;\n    gThrowValue = 0;\n    {\n        // We assume that static_sums zero-initialized or has a default constructor that zeros it.\n        static ets_type static_sums = ets_type( T() );\n\n        T exemplar;\n        test_helper<T>::init(exemplar);\n\n        for (int p = MinThread; p <= MaxThread; ++p) {\n            REMARK(\"Testing parallel %s with allocator %s on %d thread(s)... \", test_name, allocator_name, p);\n            tbb::task_scheduler_init init(p);\n            tbb::tick_count t0;\n\n            T iterator_sum;\n            test_helper<T>::init(iterator_sum);\n\n            T finit_ets_sum;\n            test_helper<T>::init(finit_ets_sum);\n\n            T const_iterator_sum;\n            test_helper<T>::init(const_iterator_sum);\n\n            T range_sum;\n            test_helper<T>::init(range_sum);\n\n            T const_range_sum;\n            test_helper<T>::init(const_range_sum);\n\n            T cconst_sum;\n            test_helper<T>::init(cconst_sum);\n\n            T assign_sum;\n            test_helper<T>::init(assign_sum);\n\n            T cassgn_sum;\n            test_helper<T>::init(cassgn_sum);\n            T non_cassgn_sum;\n            test_helper<T>::init(non_cassgn_sum);\n\n            T static_sum;\n            test_helper<T>::init(static_sum);\n\n            for (int t = -1; t < REPETITIONS; ++t) {\n                if (Verbose && t == 0) t0 = tbb::tick_count::now();\n\n                static_sums.clear();\n\n                ets_type sums(exemplar);\n                FunctorFinit<T,0> my_finit(SecretTag);\n                ets_type finit_ets(my_finit);\n\n                ASSERT( sums.empty(), NULL);\n                tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ), parallel_scalar_body<T,Allocator>( sums, allocator_name ) );\n                ASSERT( !sums.empty(), NULL);\n\n                ASSERT( finit_ets.empty(), NULL);\n                tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ), parallel_scalar_body<T,Allocator>( finit_ets, allocator_name ) );\n                ASSERT( !finit_ets.empty(), NULL);\n\n                ASSERT(static_sums.empty(), NULL);\n                tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ), parallel_scalar_body<T,Allocator>( static_sums, allocator_name ) );\n                ASSERT( !static_sums.empty(), NULL);\n\n                // use iterator\n                typename ets_type::size_type size = 0;\n                for ( typename ets_type::iterator i = sums.begin(); i != sums.end(); ++i ) {\n                     ++size;\n                     test_helper<T>::sum(iterator_sum, *i);\n                }\n                ASSERT( sums.size() == size, NULL);\n\n                // use const_iterator\n                for ( typename ets_type::const_iterator i = sums.begin(); i != sums.end(); ++i ) {\n                     test_helper<T>::sum(const_iterator_sum, *i);\n                }\n\n                // use range_type\n                typename ets_type::range_type r = sums.range();\n                for ( typename ets_type::range_type::const_iterator i = r.begin(); i != r.end(); ++i ) {\n                     test_helper<T>::sum(range_sum, *i);\n                }\n\n                // use const_range_type\n                typename ets_type::const_range_type cr = sums.range();\n                for ( typename ets_type::const_range_type::iterator i = cr.begin(); i != cr.end(); ++i ) {\n                     test_helper<T>::sum(const_range_sum, *i);\n                }\n\n                // test copy constructor, with TLS-cached locals\n                typedef typename tbb::enumerable_thread_specific<T, Allocator<T>, tbb::ets_key_per_instance> cached_ets_type;\n\n                cached_ets_type cconst(sums);\n\n                for ( typename cached_ets_type::const_iterator i = cconst.begin(); i != cconst.end(); ++i ) {\n                     test_helper<T>::sum(cconst_sum, *i);\n                }\n\n                // test assignment\n                ets_type assigned;\n                assigned = sums;\n\n                for ( typename ets_type::const_iterator i = assigned.begin(); i != assigned.end(); ++i ) {\n                     test_helper<T>::sum(assign_sum, *i);\n                }\n\n                // test assign to and from cached locals\n                cached_ets_type cassgn;\n                cassgn = sums;\n                for ( typename cached_ets_type::const_iterator i = cassgn.begin(); i != cassgn.end(); ++i ) {\n                     test_helper<T>::sum(cassgn_sum, *i);\n                }\n\n                ets_type non_cassgn;\n                non_cassgn = cassgn;\n                for ( typename ets_type::const_iterator i = non_cassgn.begin(); i != non_cassgn.end(); ++i ) {\n                     test_helper<T>::sum(non_cassgn_sum, *i);\n                }\n\n                // test finit-initialized ets\n                for(typename ets_type::const_iterator i = finit_ets.begin(); i != finit_ets.end(); ++i) {\n                    test_helper<T>::sum(finit_ets_sum, *i);\n                }\n\n                // test static ets\n                for(typename ets_type::const_iterator i = static_sums.begin(); i != static_sums.end(); ++i) {\n                    test_helper<T>::sum(static_sum, *i);\n                }\n\n            }\n\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(iterator_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(const_iterator_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(range_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(const_range_sum), NULL);\n\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(cconst_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(assign_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(cassgn_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(non_cassgn_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(finit_ets_sum), NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(static_sum), NULL);\n\n            REMARK(\"done\\nparallel %s, %d, %g, %g\\n\", test_name, p, test_helper<T>::get(iterator_sum),\n                                                          ( tbb::tick_count::now() - t0).seconds());\n        }\n    }  // Check block\n}\n\ntemplate< typename T, template<class> class Allocator>\nvoid run_parallel_scalar_tests(const char *test_name, const char *allocator_name) {\n\n    typedef tbb::enumerable_thread_specific<T, Allocator<T> > ets_type;\n    bool exception_caught = false;\n\n    // We assume that static_sums zero-initialized or has a default constructor that zeros it.\n    static ets_type static_sums = ets_type( T() );\n\n    T exemplar;\n    test_helper<T>::init(exemplar);\n\n    int test_throw_count = 10;\n    // the test will be performed repeatedly until it does not throw.  For non-throwing types\n    // this means once; for the throwing type test it may loop two or three times.  The\n    // value of targetThrowValue will determine when and if the test will throw.\n    do {\n        targetThrowValue = test_throw_count;  // keep testing until we get no exception\n        exception_caught = false;\n#if TBB_USE_EXCEPTIONS\n        try {\n#endif\n            run_parallel_scalar_tests_nocombine<T,Allocator>(test_name, allocator_name);\n#if TBB_USE_EXCEPTIONS\n        }\n        catch(...) {\n            REMARK(\"Exception caught %d\\n\", targetThrowValue);\n        }\n#endif\n        for (int p = MinThread; p <= MaxThread; ++p) {\n            REMARK(\"Testing parallel %s with allocator %s on %d thread(s)... \", test_name, allocator_name, p);\n            tbb::task_scheduler_init init(p);\n            tbb::tick_count t0;\n\n            gThrowValue = 0;\n\n            T combine_sum;\n            test_helper<T>::init(combine_sum);\n\n            T combine_ref_sum;\n            test_helper<T>::init(combine_ref_sum);\n\n            T accumulator_sum;\n            test_helper<T>::init(accumulator_sum);\n\n            T static_sum;\n            test_helper<T>::init(static_sum);\n\n            T clearing_accumulator_sum;\n            test_helper<T>::init(clearing_accumulator_sum);\n\n            {\n                Check<T> my_check;\n#if TBB_USE_EXCEPTIONS\n                try\n#endif\n                {\n                    for (int t = -1; t < REPETITIONS; ++t) {\n                        if (Verbose && t == 0) t0 = tbb::tick_count::now();\n\n                        static_sums.clear();\n\n                        ets_type sums(exemplar);\n\n                        ASSERT( sums.empty(), NULL);\n                        tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ),\n                                parallel_scalar_body<T,Allocator>( sums, allocator_name ) );\n                        ASSERT( !sums.empty(), NULL);\n\n                        ASSERT(static_sums.empty(), NULL);\n                        tbb::parallel_for( tbb::blocked_range<int>( 0, N, RANGE_MIN ),\n                                parallel_scalar_body<T,Allocator>( static_sums, allocator_name ) );\n                        ASSERT( !static_sums.empty(), NULL);\n\n                        // Use combine\n                        test_helper<T>::sum(combine_sum, sums.combine(FunctionAdd<T>));\n                        test_helper<T>::sum(combine_ref_sum, sums.combine(FunctionAddByRef<T>));\n                        test_helper<T>::sum(static_sum, static_sums.combine(FunctionAdd<T>));\n\n                        // Accumulate with combine_each\n                        sums.combine_each(Accumulator<T>(accumulator_sum));\n                        // Accumulate and clear thread-local values\n                        sums.combine_each(ClearingAccumulator<T>(clearing_accumulator_sum));\n                        // Check that the values were cleared\n                        sums.combine_each(ClearingAccumulator<T>::AssertClean);\n                    }\n                }\n#if TBB_USE_EXCEPTIONS\n                catch(...) {\n                    REMARK(\"Exception caught %d\\n\", targetThrowValue);\n                    exception_caught = true;\n                }\n#endif\n            }\n\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(combine_sum) || exception_caught, NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(combine_ref_sum) || exception_caught, NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(static_sum) || exception_caught, NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(accumulator_sum) || exception_caught, NULL);\n            ASSERT( EXPECTED_SUM == test_helper<T>::get(clearing_accumulator_sum) || exception_caught, NULL);\n\n            REMARK(\"done\\nparallel combine %s, %d, %g, %g\\n\", test_name, p, test_helper<T>::get(combine_sum),\n                                                          ( tbb::tick_count::now() - t0).seconds());\n        }  // MinThread .. MaxThread\n        test_throw_count += 10;  // keep testing until we don't get an exception\n    } while (exception_caught && test_throw_count < 200);\n    ASSERT(!exception_caught, \"No non-exception test completed\");\n}\n\ntemplate <typename T, template<class> class Allocator>\nclass parallel_vector_for_body: NoAssign {\n    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;\n    typedef tbb::enumerable_thread_specific< container_type, Allocator<container_type> > ets_type;\n    ets_type &locals;\n    const char *allocator_name;\n\npublic:\n\n    parallel_vector_for_body ( ets_type &_locals, const char *aname ) : locals(_locals), allocator_name(aname) { }\n\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        T one;\n        test_helper<T>::set(one, 1);\n\n        for (int i = r.begin(); i < r.end(); ++i) {\n            check_alignment(locals.local(),allocator_name).push_back( one );\n        }\n    }\n\n};\n\ntemplate <typename R, typename T>\nstruct parallel_vector_reduce_body {\n\n    T sum;\n    size_t count;\n    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;\n\n    parallel_vector_reduce_body ( ) : count(0) { test_helper<T>::init(sum); }\n    parallel_vector_reduce_body ( parallel_vector_reduce_body<R, T> &, tbb::split ) : count(0) {  test_helper<T>::init(sum); }\n\n    void operator()( const R &r ) {\n        for (typename R::iterator ri = r.begin(); ri != r.end(); ++ri) {\n            const container_type &v = *ri;\n            ++count;\n            for (typename container_type::const_iterator vi = v.begin(); vi != v.end(); ++vi) {\n                test_helper<T>::sum(sum, *vi);\n            }\n        }\n    }\n\n    void join( const parallel_vector_reduce_body &b ) {\n        test_helper<T>::sum(sum,b.sum);\n        count += b.count;\n    }\n\n};\n\ntemplate< typename T, template<class> class Allocator>\nvoid run_parallel_vector_tests(const char *test_name, const char *allocator_name) {\n    tbb::tick_count t0;\n    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;\n    typedef tbb::enumerable_thread_specific< container_type, Allocator<container_type> > ets_type;\n\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        REMARK(\"Testing parallel %s with allocator %s on %d thread(s)... \", test_name, allocator_name, p);\n        tbb::task_scheduler_init init(p);\n\n        T sum;\n        test_helper<T>::init(sum);\n\n        for (int t = -1; t < REPETITIONS; ++t) {\n            if (Verbose && t == 0) t0 = tbb::tick_count::now();\n            ets_type vs;\n\n            ASSERT( vs.empty(), NULL );\n            tbb::parallel_for( tbb::blocked_range<int> (0, N, RANGE_MIN),\n                               parallel_vector_for_body<T,Allocator>( vs, allocator_name ) );\n            ASSERT( !vs.empty(), NULL );\n\n            // copy construct\n            ets_type vs2(vs); // this causes an assertion failure, related to allocators...\n\n            // assign\n            ets_type vs3;\n            vs3 = vs;\n\n            parallel_vector_reduce_body< typename ets_type::const_range_type, T > pvrb;\n            tbb::parallel_reduce ( vs.range(1), pvrb );\n\n            test_helper<T>::sum(sum, pvrb.sum);\n\n            ASSERT( vs.size() == pvrb.count, NULL );\n            ASSERT( vs2.size() == pvrb.count, NULL );\n            ASSERT( vs3.size() == pvrb.count, NULL );\n\n            tbb::flattened2d<ets_type> fvs = flatten2d(vs);\n            size_t ccount = fvs.size();\n            ASSERT( ccount == size_t(N), NULL );\n            size_t elem_cnt = 0;\n            for(typename tbb::flattened2d<ets_type>::const_iterator i = fvs.begin(); i != fvs.end(); ++i) {\n                ++elem_cnt;\n            };\n            ASSERT( ccount == elem_cnt, NULL );\n\n            elem_cnt = 0;\n            for(typename tbb::flattened2d<ets_type>::iterator i = fvs.begin(); i != fvs.end(); ++i) {\n                ++elem_cnt;\n            };\n            ASSERT( ccount == elem_cnt, NULL );\n\n#if __TBB_ETS_USE_CPP11\n            // Test the ETS constructor with multiple args\n            T minus_one;\n            test_helper<T>::set(minus_one, -1);\n            // Set ETS to construct \"local\" vectors pre-occupied with 25 \"minus_one\"s\n            // Cast 25 to size_type to prevent Intel Compiler SFINAE compilation issues with gcc 5.\n            ets_type vvs( typename container_type::size_type(25), minus_one, tbb::tbb_allocator<T>() );\n            ASSERT( vvs.empty(), NULL );\n            tbb::parallel_for ( tbb::blocked_range<int> (0, N, RANGE_MIN), parallel_vector_for_body<T,Allocator>( vvs, allocator_name ) );\n            ASSERT( !vvs.empty(), NULL );\n\n            parallel_vector_reduce_body< typename ets_type::const_range_type, T > pvrb2;\n            tbb::parallel_reduce ( vvs.range(1), pvrb2 );\n            ASSERT( pvrb2.count == vvs.size(), NULL );\n            ASSERT( test_helper<T>::get(pvrb2.sum) == N-pvrb2.count*25, NULL );\n\n            tbb::flattened2d<ets_type> fvvs = flatten2d(vvs);\n            ccount = fvvs.size();\n            ASSERT( ccount == N+pvrb2.count*25, NULL );\n#endif\n        }\n\n        double result_value = test_helper<T>::get(sum);\n        ASSERT( EXPECTED_SUM == result_value, NULL);\n        REMARK(\"done\\nparallel %s, %d, %g, %g\\n\", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());\n    }\n}\n\ntemplate<typename T, template<class> class Allocator>\nvoid run_cross_type_vector_tests(const char *test_name) {\n    tbb::tick_count t0;\n    const char* allocator_name = \"default\";\n    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;\n\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        REMARK(\"Testing parallel %s on %d thread(s)... \", test_name, p);\n        tbb::task_scheduler_init init(p);\n\n        T sum;\n        test_helper<T>::init(sum);\n\n        for (int t = -1; t < REPETITIONS; ++t) {\n            if (Verbose && t == 0) t0 = tbb::tick_count::now();\n            typedef typename tbb::enumerable_thread_specific< container_type, Allocator<container_type>, tbb::ets_no_key > ets_nokey_type;\n            typedef typename tbb::enumerable_thread_specific< container_type, Allocator<container_type>, tbb::ets_key_per_instance > ets_tlskey_type;\n            ets_nokey_type vs;\n\n            ASSERT( vs.empty(), NULL);\n            tbb::parallel_for ( tbb::blocked_range<int> (0, N, RANGE_MIN), parallel_vector_for_body<T, Allocator>( vs, allocator_name ) );\n            ASSERT( !vs.empty(), NULL);\n\n            // copy construct\n            ets_tlskey_type vs2(vs);\n\n            // assign\n            ets_nokey_type vs3;\n            vs3 = vs2;\n\n            parallel_vector_reduce_body< typename ets_nokey_type::const_range_type, T > pvrb;\n            tbb::parallel_reduce ( vs3.range(1), pvrb );\n\n            test_helper<T>::sum(sum, pvrb.sum);\n\n            ASSERT( vs3.size() == pvrb.count, NULL);\n\n            tbb::flattened2d<ets_nokey_type> fvs = flatten2d(vs3);\n            size_t ccount = fvs.size();\n            size_t elem_cnt = 0;\n            for(typename tbb::flattened2d<ets_nokey_type>::const_iterator i = fvs.begin(); i != fvs.end(); ++i) {\n                ++elem_cnt;\n            };\n            ASSERT(ccount == elem_cnt, NULL);\n\n            elem_cnt = 0;\n            for(typename tbb::flattened2d<ets_nokey_type>::iterator i = fvs.begin(); i != fvs.end(); ++i) {\n                ++elem_cnt;\n            };\n            ASSERT(ccount == elem_cnt, NULL);\n        }\n\n        double result_value = test_helper<T>::get(sum);\n        ASSERT( EXPECTED_SUM == result_value, NULL);\n        REMARK(\"done\\nparallel %s, %d, %g, %g\\n\", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());\n    }\n}\n\ntemplate< typename T >\nvoid run_serial_vector_tests(const char *test_name) {\n    tbb::tick_count t0;\n    T sum;\n    test_helper<T>::init(sum);\n    T one;\n    test_helper<T>::set(one, 1);\n\n    REMARK(\"Testing serial %s... \", test_name);\n    for (int t = -1; t < REPETITIONS; ++t) {\n        if (Verbose && t == 0) t0 = tbb::tick_count::now();\n        std::vector<T, tbb::tbb_allocator<T> > v;\n        for (int i = 0; i < N; ++i) {\n            v.push_back( one );\n        }\n        for (typename std::vector<T, tbb::tbb_allocator<T> >::const_iterator i = v.begin(); i != v.end(); ++i)\n            test_helper<T>::sum(sum, *i);\n    }\n\n    double result_value = test_helper<T>::get(sum);\n    ASSERT( EXPECTED_SUM == result_value, NULL);\n    REMARK(\"done\\nserial %s, 0, %g, %g\\n\", test_name, result_value, ( tbb::tick_count::now() - t0).seconds());\n}\n\nconst size_t line_size = tbb::internal::NFS_MaxLineSize;\n\nvoid run_serial_tests() {\n    run_serial_scalar_tests<int>(\"int\");\n    run_serial_scalar_tests<double>(\"double\");\n    run_serial_scalar_tests<minimal<> >(\"minimal<>\");\n    run_serial_vector_tests<int>(\"std::vector<int, tbb::tbb_allocator<int> >\");\n    run_serial_vector_tests<double>(\"std::vector<double, tbb::tbb_allocator<double> >\");\n}\n\ntemplate<template<class>class Allocator>\nvoid run_parallel_tests(const char *allocator_name) {\n    run_parallel_scalar_tests<int, Allocator>(\"int\",allocator_name);\n    run_parallel_scalar_tests<double, Allocator>(\"double\",allocator_name);\n    run_parallel_scalar_tests_nocombine<minimal<>,Allocator>(\"minimal<>\",allocator_name);\n    run_parallel_scalar_tests<ThrowingConstructor, Allocator>(\"ThrowingConstructor\", allocator_name);\n    run_parallel_vector_tests<int, Allocator>(\"std::vector<int, tbb::tbb_allocator<int> >\",allocator_name);\n    run_parallel_vector_tests<double, Allocator>(\"std::vector<double, tbb::tbb_allocator<double> >\",allocator_name);\n}\n\nvoid run_cross_type_tests() {\n    // cross-type scalar tests are part of run_parallel_scalar_tests_nocombine\n    run_cross_type_vector_tests<int, tbb::tbb_allocator>(\"std::vector<int, tbb::tbb_allocator<int> >\");\n    run_cross_type_vector_tests<double, tbb::tbb_allocator>(\"std::vector<double, tbb::tbb_allocator<double> >\");\n}\n\ntypedef tbb::enumerable_thread_specific<minimal<line_size> > flogged_ets;\n\nclass set_body {\n    flogged_ets *a;\n\npublic:\n    set_body( flogged_ets*_a ) : a(_a) { }\n\n    void operator() ( ) const {\n        for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {\n            check_alignment(a[i].local(), \"default\").set_value(i + 1);\n        }\n    }\n\n};\n\nvoid do_tbb_threads( int max_threads, flogged_ets a[] ) {\n    std::vector< tbb::tbb_thread * > threads;\n\n    for (int p = 0; p < max_threads; ++p) {\n        threads.push_back( new tbb::tbb_thread ( set_body( a ) ) );\n    }\n\n    for (int p = 0; p < max_threads; ++p) {\n        threads[p]->join();\n    }\n\n    for(int p = 0; p < max_threads; ++p) {\n        delete threads[p];\n    }\n}\n\nvoid flog_key_creation_and_deletion() {\n    const int FLOG_REPETITIONS = 100;\n\n    for (int p = MinThread; p <= MaxThread; ++p) {\n        REMARK(\"Testing repeated deletes on %d threads... \", p);\n\n        for (int j = 0; j < FLOG_REPETITIONS; ++j) {\n            construction_counter = 0;\n            destruction_counter = 0;\n\n            // causes VALID_NUMBER_OF_KEYS exemplar instances to be constructed\n            flogged_ets* a = new flogged_ets[VALID_NUMBER_OF_KEYS];\n            ASSERT(int(construction_counter) == 0, NULL);   // no exemplars or actual locals have been constructed\n            ASSERT(int(destruction_counter) == 0, NULL);    // and none have been destroyed\n\n            // causes p * VALID_NUMBER_OF_KEYS minimals to be created\n            do_tbb_threads(p, a);\n\n            for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {\n                int pcnt = 0;\n                for ( flogged_ets::iterator tli = a[i].begin(); tli != a[i].end(); ++tli ) {\n                    ASSERT( (*tli).value() == i+1, NULL );\n                    ++pcnt;\n                }\n                ASSERT( pcnt == p, NULL);  // should be one local per thread.\n            }\n            delete[] a;\n        }\n\n        ASSERT( int(construction_counter) == (p)*VALID_NUMBER_OF_KEYS, NULL );\n        ASSERT( int(destruction_counter) == (p)*VALID_NUMBER_OF_KEYS, NULL );\n\n        REMARK(\"done\\nTesting repeated clears on %d threads... \", p);\n\n        construction_counter = 0;\n        destruction_counter = 0;\n\n        // causes VALID_NUMBER_OF_KEYS exemplar instances to be constructed\n        flogged_ets* a = new flogged_ets[VALID_NUMBER_OF_KEYS];\n\n        for (int j = 0; j < FLOG_REPETITIONS; ++j) {\n\n            // causes p * VALID_NUMBER_OF_KEYS minimals to be created\n            do_tbb_threads(p, a);\n\n            for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {\n                for ( flogged_ets::iterator tli = a[i].begin(); tli != a[i].end(); ++tli ) {\n                    ASSERT( (*tli).value() == i+1, NULL );\n                }\n                a[i].clear();\n                ASSERT( static_cast<int>(a[i].end() - a[i].begin()) == 0, NULL );\n            }\n\n        }\n\n        delete[] a;\n\n        ASSERT( int(construction_counter) == (FLOG_REPETITIONS*p)*VALID_NUMBER_OF_KEYS, NULL );\n        ASSERT( int(destruction_counter) == (FLOG_REPETITIONS*p)*VALID_NUMBER_OF_KEYS, NULL );\n\n        REMARK(\"done\\n\");\n    }\n\n}\n\ntemplate <typename inner_container>\nvoid flog_segmented_interator() {\n\n    bool found_error = false;\n    typedef typename inner_container::value_type T;\n    typedef std::vector< inner_container > nested_vec;\n    inner_container my_inner_container;\n    my_inner_container.clear();\n    nested_vec my_vec;\n\n    // simple nested vector (neither level empty)\n    const int maxval = 10;\n    for(int i=0; i < maxval; i++) {\n        my_vec.push_back(my_inner_container);\n        for(int j = 0; j < maxval; j++) {\n            my_vec.at(i).push_back((T)(maxval * i + j));\n        }\n    }\n\n    tbb::internal::segmented_iterator<nested_vec, T> my_si(my_vec);\n\n    T ii;\n    for(my_si=my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {\n        if((*my_si) != ii) {\n            found_error = true;\n            REMARK( \"*my_si=%d\\n\", int(*my_si));\n        }\n    }\n\n    // outer level empty\n    my_vec.clear();\n    for(my_si=my_vec.begin(); my_si != my_vec.end(); ++my_si) {\n        found_error = true;\n    }\n\n    // inner levels empty\n    my_vec.clear();\n    for(int i =0; i < maxval; ++i) {\n        my_vec.push_back(my_inner_container);\n    }\n    for(my_si = my_vec.begin(); my_si != my_vec.end(); ++my_si) {\n        found_error = true;\n    }\n\n    // every other inner container is empty\n    my_vec.clear();\n    for(int i=0; i < maxval; ++i) {\n        my_vec.push_back(my_inner_container);\n        if(i%2) {\n            for(int j = 0; j < maxval; ++j) {\n                my_vec.at(i).push_back((T)(maxval * (i/2) + j));\n            }\n        }\n    }\n    for(my_si = my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {\n        if((*my_si) != ii) {\n            found_error = true;\n            REMARK(\"*my_si=%d, ii=%d\\n\", (int)(*my_si), (int)ii);\n        }\n    }\n\n    tbb::internal::segmented_iterator<nested_vec, const T> my_csi(my_vec);\n    for(my_csi=my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {\n        if((*my_csi) != ii) {\n            found_error = true;\n            REMARK( \"*my_csi=%d\\n\", int(*my_csi));\n        }\n    }\n\n    // outer level empty\n    my_vec.clear();\n    for(my_csi=my_vec.begin(); my_csi != my_vec.end(); ++my_csi) {\n        found_error = true;\n    }\n\n    // inner levels empty\n    my_vec.clear();\n    for(int i =0; i < maxval; ++i) {\n        my_vec.push_back(my_inner_container);\n    }\n    for(my_csi = my_vec.begin(); my_csi != my_vec.end(); ++my_csi) {\n        found_error = true;\n    }\n\n    // every other inner container is empty\n    my_vec.clear();\n    for(int i=0; i < maxval; ++i) {\n        my_vec.push_back(my_inner_container);\n        if(i%2) {\n            for(int j = 0; j < maxval; ++j) {\n                my_vec.at(i).push_back((T)(maxval * (i/2) + j));\n            }\n        }\n    }\n    for(my_csi = my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {\n        if((*my_csi) != ii) {\n            found_error = true;\n            REMARK(\"*my_csi=%d, ii=%d\\n\", (int)(*my_csi), (int)ii);\n        }\n    }\n\n\n    if(found_error) REPORT(\"segmented_iterator failed\\n\");\n}\n\ntemplate <typename Key, typename Val>\nvoid flog_segmented_iterator_map() {\n   typedef typename std::map<Key, Val> my_map;\n   typedef std::vector< my_map > nested_vec;\n   my_map my_inner_container;\n   my_inner_container.clear();\n   nested_vec my_vec;\n   my_vec.clear();\n   bool found_error = false;\n\n   // simple nested vector (neither level empty)\n   const int maxval = 4;\n   for(int i=0; i < maxval; i++) {\n       my_vec.push_back(my_inner_container);\n       for(int j = 0; j < maxval; j++) {\n           my_vec.at(i).insert(std::make_pair<Key,Val>(maxval * i + j, 2*(maxval*i + j)));\n       }\n   }\n\n   tbb::internal::segmented_iterator<nested_vec, std::pair<const Key, Val> > my_si(my_vec);\n   Key ii;\n   for(my_si=my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {\n       if(((*my_si).first != ii) || ((*my_si).second != 2*ii)) {\n           found_error = true;\n           REMARK( \"ii=%d, (*my_si).first=%d, second=%d\\n\",ii, int((*my_si).first), int((*my_si).second));\n       }\n   }\n\n   tbb::internal::segmented_iterator<nested_vec, const std::pair<const Key, Val> > my_csi(my_vec);\n   for(my_csi=my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {\n       if(((*my_csi).first != ii) || ((*my_csi).second != 2*ii)) {\n           found_error = true;\n           REMARK( \"ii=%d, (*my_csi).first=%d, second=%d\\n\",ii, int((*my_csi).first), int((*my_csi).second));\n       }\n   }\n   if(found_error) REPORT(\"segmented_iterator_map failed\\n\");\n}\n\nvoid run_segmented_iterator_tests() {\n   // only the following containers can be used with the segmented iterator.\n   REMARK(\"Running Segmented Iterator Tests\\n\");\n   flog_segmented_interator<std::vector< int > >();\n   flog_segmented_interator<std::vector< double > >();\n   flog_segmented_interator<std::deque< int > >();\n   flog_segmented_interator<std::deque< double > >();\n   flog_segmented_interator<std::list< int > >();\n   flog_segmented_interator<std::list< double > >();\n\n   flog_segmented_iterator_map<int, int>();\n   flog_segmented_iterator_map<int, double>();\n}\n\ntemplate<typename T, template<class> class Allocator, typename Init>\ntbb::enumerable_thread_specific<T,Allocator<T> > MakeETS( Init init ) {\n    return tbb::enumerable_thread_specific<T,Allocator<T> >(init);\n}\n#if __TBB_ETS_USE_CPP11\n// In some GCC versions, parameter packs in lambdas might cause compile errors\ntemplate<typename ETS, typename... P>\nstruct MakeETS_Functor {\n    ETS operator()( typename tbb::internal::strip<P>::type&&... params ) {\n        return ETS(std::move(params)...);\n    }\n};\ntemplate<typename T, template<class> class Allocator, typename... P>\ntbb::enumerable_thread_specific<T,Allocator<T> > MakeETS( tbb::internal::stored_pack<P...> pack ) {\n    typedef tbb::enumerable_thread_specific<T,Allocator<T> > result_type;\n    return tbb::internal::call_and_return< result_type >(\n        MakeETS_Functor<result_type,P...>(), std::move(pack)\n    );\n}\n#endif\n\ntemplate<typename T, template<class> class Allocator, typename InitSrc, typename InitDst, typename Validator>\nvoid ets_copy_assign_test( InitSrc init1, InitDst init2, Validator check, const char *allocator_name ) {\n    typedef tbb::enumerable_thread_specific<T, Allocator<T> > ets_type;\n\n    // Create the source instance\n    const ets_type& cref_binder = MakeETS<T, Allocator>(init1);\n    ets_type& source = const_cast<ets_type&>(cref_binder);\n    check(check_alignment(source.local(),allocator_name));\n\n    // Test copy construction\n    bool existed = false;\n    ets_type copy(source);\n    check(check_alignment(copy.local(existed),allocator_name));\n    ASSERT(existed, \"Local data not created by ETS copy constructor\");\n    copy.clear();\n    check(check_alignment(copy.local(),allocator_name));\n\n    // Test assignment\n    existed = false;\n    ets_type assign(init2);\n    assign = source;\n    check(check_alignment(assign.local(existed),allocator_name));\n    ASSERT(existed, \"Local data not created by ETS assignment\");\n    assign.clear();\n    check(check_alignment(assign.local(),allocator_name));\n\n#if __TBB_ETS_USE_CPP11\n    // Create the source instance\n    ets_type&& rvref_binder = MakeETS<T, Allocator>(init1);\n    check(check_alignment(rvref_binder.local(),allocator_name));\n\n    // Test move construction\n    existed = false;\n    ets_type moved(rvref_binder);\n    check(check_alignment(moved.local(existed),allocator_name));\n    ASSERT(existed, \"Local data not created by ETS move constructor\");\n    moved.clear();\n    check(check_alignment(moved.local(),allocator_name));\n\n    // Test assignment\n    existed = false;\n    ets_type move_assign(init2);\n    move_assign = std::move(moved);\n    check(check_alignment(move_assign.local(existed),allocator_name));\n    ASSERT(existed, \"Local data not created by ETS move assignment\");\n    move_assign.clear();\n    check(check_alignment(move_assign.local(),allocator_name));\n#endif\n}\n\ntemplate<typename T, int Expected>\nstruct Validator {\n    void operator()( const T& value ) {\n        ASSERT(test_helper<T>::get(value) == Expected, NULL);\n    }\n    void operator()( const std::pair<int,T>& value ) {\n        ASSERT(value.first > 0, NULL);\n        ASSERT(test_helper<T>::get(value.second) == Expected*value.first, NULL);\n    }\n};\n\ntemplate <typename T, template<class> class Allocator>\nvoid run_assign_and_copy_constructor_test(const char *test_name, const char *allocator_name) {\n    REMARK(\"Testing assignment and copy construction for %s with allocator %s\\n\", test_name, allocator_name);\n    #define EXPECTED 3142\n\n    // test with exemplar initializer\n    T src_init;\n    test_helper<T>::set(src_init,EXPECTED);\n    T other_init;\n    test_helper<T>::init(other_init);\n    ets_copy_assign_test<T, Allocator>(src_init, other_init, Validator<T,EXPECTED>(), allocator_name);\n\n    // test with function initializer\n    FunctorFinit<T,EXPECTED> src_finit(SecretTag);\n    FunctorFinit<T,0> other_finit(SecretTag);\n    ets_copy_assign_test<T, Allocator>(src_finit, other_finit, Validator<T,EXPECTED>(), allocator_name);\n\n#if __TBB_ETS_USE_CPP11\n    // test with multi-argument \"emplace\" initializer\n    // The arguments are wrapped into tbb::internal::stored_pack to avoid variadic templates in ets_copy_assign_test.\n    test_helper<T>::set(src_init,EXPECTED*17);\n    ets_copy_assign_test< std::pair<int,T>, Allocator>(tbb::internal::save_pack(17,src_init), std::make_pair(-1,T()), Validator<T,EXPECTED>(), allocator_name);\n#endif\n    #undef EXPECTED\n}\n\ntemplate< template<class> class Allocator>\nvoid run_assignment_and_copy_constructor_tests(const char* allocator_name) {\n    REMARK(\"Running assignment and copy constructor tests\\n\");\n    run_assign_and_copy_constructor_test<int, Allocator>(\"int\", allocator_name);\n    run_assign_and_copy_constructor_test<double, Allocator>(\"double\", allocator_name);\n    // Try class sizes that are close to a cache line in size, in order to check padding calculations.\n    run_assign_and_copy_constructor_test<minimal<line_size-1>, Allocator >(\"minimal<line_size-1>\", allocator_name);\n    run_assign_and_copy_constructor_test<minimal<line_size>, Allocator >(\"minimal<line_size>\", allocator_name);\n    run_assign_and_copy_constructor_test<minimal<line_size+1>, Allocator >(\"minimal<line_size+1>\", allocator_name);\n    ASSERT(FinitCounter==0, NULL);\n}\n\n// Class with no default constructor\nclass HasNoDefaultConstructor {\n    HasNoDefaultConstructor();\npublic:\n    HasNoDefaultConstructor( SecretTagType ) {}\n};\n// Initialization functor for HasNoDefaultConstructor\nstruct HasNoDefaultConstructorFinit {\n    HasNoDefaultConstructor operator()() {\n        return HasNoDefaultConstructor(SecretTag);\n    }\n};\n// Combine functor for HasNoDefaultConstructor\nstruct HasNoDefaultConstructorCombine {\n    HasNoDefaultConstructor operator()( HasNoDefaultConstructor, HasNoDefaultConstructor ) {\n        return HasNoDefaultConstructor(SecretTag);\n    }\n};\n\n#if __TBB_ETS_USE_CPP11\n// Class that only has a constructor with multiple parameters and a move constructor\nclass HasSpecialAndMoveCtor : NoCopy {\n    HasSpecialAndMoveCtor();\npublic:\n    HasSpecialAndMoveCtor( SecretTagType, size_t = size_t(0), const char* = \"\" ) {}\n    HasSpecialAndMoveCtor( HasSpecialAndMoveCtor&& ) {}\n};\n#endif\n\n// No-op combine-each functor\ntemplate<typename V>\nstruct EmptyCombineEach {\n    void operator()( const V& ) { }\n};\n\nint\nalign_val(void * const p) {\n    size_t tmp = (size_t)p;\n    int a = 1;\n    while((tmp&0x1) == 0) { a <<=1; tmp >>= 1; }\n    return a;\n}\n\nbool is_between(void* lowp, void *highp, void *testp) {\n    if((size_t)lowp < (size_t)testp && (size_t)testp < (size_t)highp) return true;\n    return (size_t)lowp > (size_t)testp && (size_t)testp > (size_t)highp;\n}\n\ntemplate<class U> struct alignment_of {\n    typedef struct { char t; U    padded; } test_alignment;\n    static const size_t value = sizeof(test_alignment) - sizeof(U);\n};\nusing tbb::interface6::internal::ets_element;\ntemplate<typename T, typename OtherType>\nvoid allocate_ets_element_on_stack(const char *name) {\n    typedef T aligning_element_type;\n    const size_t my_align = alignment_of<aligning_element_type>::value;\n    OtherType c1;\n    ets_element<aligning_element_type> my_stack_element;\n    OtherType c2;\n    ets_element<aligning_element_type> my_stack_element2;\n    struct {\n        OtherType cxx;\n        ets_element<aligning_element_type> my_struct_element;\n    } mystruct1;\n    tbb::internal::suppress_unused_warning(c1,c2);\n    REMARK(\"using %s, c1 address == %lx (alignment %d), c2 address == %lx (alignment %d)\\n\", name, &c1, align_val(&c1), &c2, align_val(&c2));\n    REMARK(\" ---- my_align == %d\\n\", (int)my_align);\n    REMARK(\"    my_stack_element == %lx (alignment %d), my_stack_element2 == %lx (alignment %d)\\n\",\n            &my_stack_element, align_val(&my_stack_element), &my_stack_element2, align_val(&my_stack_element2));\n    if(is_between(&c1,&c2,&my_stack_element)) REMARK(\"my_struct_element is in the middle\\n\");\n    if(is_between(&c1,&c2,&my_stack_element2)) REMARK(\"my_struct_element2 is in the middle\\n\");\n    if(!is_between(&c1,&c2,&my_stack_element) && !is_between(&c1,&c2,&my_stack_element2)) REMARK(\"stack vars reorganized\\n\");\n    REMARK(\"   structure field address == %lx, alignment %d\\n\",\n            mystruct1.my_struct_element.value(),\n            align_val(mystruct1.my_struct_element.value())\n            );\n    ASSERT(tbb::internal::is_aligned(my_stack_element.value(), my_align), \"Error in first stack alignment\" );\n    ASSERT(tbb::internal::is_aligned(my_stack_element2.value(), my_align), \"Error in second stack alignment\" );\n    ASSERT(tbb::internal::is_aligned(mystruct1.my_struct_element.value(), my_align), \"Error in struct element alignment\" );\n}\n\n//! Test situations where only default constructor or copy constructor is required.\ntemplate<template<class> class Allocator>\nvoid TestInstantiation(const char *allocator_name) {\n    REMARK(\"TestInstantiation<%s>\\n\", allocator_name);\n    // Test instantiation is possible when copy constructor is not required.\n    tbb::enumerable_thread_specific<NoCopy, Allocator<NoCopy> > ets1;\n    ets1.local();\n    ets1.combine_each(EmptyCombineEach<NoCopy>());\n\n    // Test instantiation when default constructor is not required, because exemplar is provided.\n    HasNoDefaultConstructor x(SecretTag);\n    tbb::enumerable_thread_specific<HasNoDefaultConstructor, Allocator<HasNoDefaultConstructor> > ets2(x);\n    ets2.local();\n    ets2.combine(HasNoDefaultConstructorCombine());\n\n    // Test instantiation when default constructor is not required, because init function is provided.\n    HasNoDefaultConstructorFinit f;\n    tbb::enumerable_thread_specific<HasNoDefaultConstructor, Allocator<HasNoDefaultConstructor> > ets3(f);\n    ets3.local();\n    ets3.combine(HasNoDefaultConstructorCombine());\n\n#if __TBB_ETS_USE_CPP11\n    // Test instantiation with multiple arguments\n    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor, Allocator<HasSpecialAndMoveCtor> > ets4(SecretTag, 0x42, \"meaningless\");\n    ets4.local();\n    ets4.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());\n    // Test instantiation with one argument that should however use the variadic constructor\n    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor, Allocator<HasSpecialAndMoveCtor> > ets5(SecretTag);\n    ets5.local();\n    ets5.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());\n    // Test that move operations do not impose extra requirements\n    // Default allocator is used. If it does not match Allocator, there will be elementwise move\n    tbb::enumerable_thread_specific<HasSpecialAndMoveCtor> ets6( std::move(ets4) );\n    ets6.combine_each(EmptyCombineEach<HasSpecialAndMoveCtor>());\n    ets6 = std::move(ets5);\n#endif\n}\n\nclass BigType {\npublic:\n    BigType() { /* avoid cl warning C4345 about default initialization of POD types */ }\n    char my_data[12 * 1024 * 1024];\n};\n\ntemplate<template<class> class Allocator>\nvoid TestConstructorWithBigType(const char *allocator_name) {\n    typedef tbb::enumerable_thread_specific<BigType, Allocator<BigType> > CounterBigType;\n    REMARK(\"TestConstructorWithBigType<%s>\\n\", allocator_name);\n    // Test default constructor\n    CounterBigType MyCounters;\n    // Create a local instance.\n    typename CounterBigType::reference my_local = MyCounters.local();\n    my_local.my_data[0] = 'a';\n    // Test copy constructor\n    CounterBigType MyCounters2(MyCounters);\n    ASSERT(check_alignment(MyCounters2.local(), allocator_name).my_data[0]=='a', NULL);\n}\n\nint TestMain () {\n    size_t tbb_allocator_mask;\n    size_t cache_allocator_mask = tbb::internal::NFS_GetLineSize();\n    REMARK(\"estimatedCacheLineSize == %d, NFS_GetLineSize() returns %d\\n\",\n                (int)estimatedCacheLineSize, (int)tbb::internal::NFS_GetLineSize());\n    //TODO: use __TBB_alignof(T) to check for local() results instead of using internal knowledges of ets element padding\n    if(tbb::tbb_allocator<int>::allocator_type() == tbb::tbb_allocator<int>::standard) {\n        // scalable allocator is not available.\n        tbb_allocator_mask = 1;\n        REMARK(\"tbb::tbb_allocator is not available\\n\");\n    }\n    else {\n        // this value is for large objects, but will be correct for small.\n        tbb_allocator_mask = estimatedCacheLineSize;\n    }\n    AlignMask = cache_allocator_mask;\n    TestInstantiation<tbb::cache_aligned_allocator>(\"tbb::cache_aligned_allocator\");\n    AlignMask = tbb_allocator_mask;\n    TestInstantiation<tbb::tbb_allocator>(\"tbb::tbb_allocator\");\n    AlignMask = cache_allocator_mask;\n    run_assignment_and_copy_constructor_tests<tbb::cache_aligned_allocator>(\"tbb::cache_aligned_allocator\");\n    AlignMask = tbb_allocator_mask;\n    run_assignment_and_copy_constructor_tests<tbb::tbb_allocator>(\"tbb::tbb_allocator\");\n    run_segmented_iterator_tests();\n    flog_key_creation_and_deletion();\n\n    if (MinThread == 0) {\n        run_serial_tests();\n        MinThread = 1;\n    }\n    if (MaxThread > 0) {\n        AlignMask = cache_allocator_mask;\n        run_parallel_tests<tbb::cache_aligned_allocator>(\"tbb::cache_aligned_allocator\");\n        AlignMask = tbb_allocator_mask;\n        run_parallel_tests<tbb::tbb_allocator>(\"tbb::tbb_allocator\");\n        run_cross_type_tests();\n    }\n\n    AlignMask = cache_allocator_mask;\n    TestConstructorWithBigType<tbb::cache_aligned_allocator>(\"tbb::cache_aligned_allocator\");\n    AlignMask = tbb_allocator_mask;\n    TestConstructorWithBigType<tbb::tbb_allocator>(\"tbb::tbb_allocator\");\n\n    allocate_ets_element_on_stack<int,char>(\"int vs. char\");\n    allocate_ets_element_on_stack<int,short>(\"int vs. short\");\n    allocate_ets_element_on_stack<int,char[3]>(\"int vs. char[3]\");\n    allocate_ets_element_on_stack<float,char>(\"float vs. char\");\n    allocate_ets_element_on_stack<float,short>(\"float vs. short\");\n    allocate_ets_element_on_stack<float,char[3]>(\"float vs. char[3]\");\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_examples_common_utility.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if __TBB_TEST_USE_WSUGGEST_OVERRIDE\n// __TBB_override may not be used in the tested header file\n#pragma GCC diagnostic ignored \"-Wsuggest-override\"\n#undef __TBB_TEST_USE_WSUGGEST_OVERRIDE\n#endif\n\n#include \"harness_defs.h\" // for suppress_unused_warning\n\n#if TBB_USE_EXCEPTIONS\n#include \"harness_assert.h\"\n#include \"../../examples/common/utility/utility.h\"\n#include <sstream>\n\nnamespace implementation_unit_tests {\n    namespace argument_dest_test_suite{\n        void test_type_impl_parse_and_store_simple_parse(){\n            int a=0;\n            utility::internal::type_impl<int> a_(\"\",\"\",a);\n            a_.parse_and_store(\"9\");\n            ASSERT(a==9,\"\");\n        }\n        void test_default_value_of_is_matched(){\n            //Testing for result of is_matched() for arguments not yet tried to be parsed.\n            //I.e. values were set up by argument::constructor.\n            using  utility::internal::argument;\n            int i;\n            argument b(\"\",\"\",i);\n            ASSERT(!b.is_matched(),\"\");\n\n            argument c = b;\n            ASSERT(!c.is_matched(),\"\");\n\n            argument d = b;\n            d = c;\n            ASSERT(!d.is_matched(),\"\");\n        }\n    }\n    //TODO: test cases  for argument type management\n    namespace compile_only{\n        //TODO: enhance these to actually do checks  by a negative test, or (if possible)\n        //by a positive test that at compile time selects between two alternatives,\n        //depending on whether operators exist or not (yes, SFINAE :)) -\n        //as non_pod class does provide the operators, and test  do not check that compiler\n        //will reject types which don't have those.\n        using utility::cli_argument_pack;\n        void arg_chain(){\n            cli_argument_pack p;\n            int size=0;\n            p.arg(size,\"size\",\"size\");\n        }\n        namespace tc_helper{\n            struct non_pod{\n                std::string s;\n                friend std::ostream& operator<<(std::ostream& o, non_pod){ return o;}\n                friend std::istream& operator>>(std::istream& i, non_pod){ return i;}\n            };\n        }\n        void non_pod_dest_type(){\n            cli_argument_pack p;\n            tc_helper::non_pod np;\n            p.arg(np,\"\",\"\");\n        }\n    }\n    namespace cli_argument_pack_suite{\n        void test_copy_assign(){\n            using utility::cli_argument_pack;\n            int i=9;\n            std::stringstream expected_output; using std::endl;\n            expected_output\n                 << \" Program usage is:\" << endl\n                 << \" the_binary_name [i=value]\"\n                 << endl << endl\n                 << \" where:\" << endl\n                 << \" i - i desc (9)\" << endl\n            ;\n            cli_argument_pack copy(cli_argument_pack().arg(i,\"i\",\"i desc\"));\n            ASSERT(copy.usage_string(\"the_binary_name\") == expected_output.str(),\"usage string is not as expected\");\n            cli_argument_pack assignee; assignee = copy;\n            ASSERT(assignee.usage_string(\"the_binary_name\") == expected_output.str(),\"Copying of cli_argument_pack breaks generation of usage string?\");\n        }\n    }\n}\n\n#include <utility>\nnamespace high_level_api_tests {\n    using utility::cli_argument_pack;\n    using utility::internal::array_length;\n\n    static const char * wrong_exception = \"wrong exception thrown\";\n    static const char * wrong_exception_description = \"caught exception has wrong description\";\n    void test_parse_basic(){\n        char const* argv[]={\"some.exe\",\"1\",\"a\"};\n        cli_argument_pack p;\n        int i=0; char a=' ';\n        p.positional_arg(i,\"int\",\"\").positional_arg(a,\"char\",\"\");\n        p.parse(array_length(argv),argv);\n        ASSERT(i==1,\"\");\n        ASSERT(a=='a',\"\");\n    }\n    //helper function for test of named flag parsing\n    template<typename T, size_t N>\n    bool parse_silent_flag( T(& argv)[N]){\n        cli_argument_pack p;\n        bool silent=false;\n        p.arg(silent,\"silent\",\"is extra info needed\");\n        p.parse(array_length(argv),argv);\n        return  silent;\n    }\n    void test_named_flags_success(){\n        char const* argv[]={\"some.exe\",\"silent\"};\n        ASSERT(true == parse_silent_flag(argv),\"\");\n    }\n\n    void test_named_flags_failure(){\n        try {\n            char const* argv[]={\"some.exe\",\"1\"};\n            parse_silent_flag(argv);\n            ASSERT(false,\"exception was expected due to invalid argument, but not caught\");\n        }\n        catch(std::invalid_argument& e){\n            ASSERT(e.what()==std::string(\"unknown parameter starting at:'1'\"),wrong_exception_description);\n        }\n        catch(...){ASSERT(false,wrong_exception);}\n    }\n\n    //helper function for test of named flag parsing\n    template<typename T, size_t N>\n    std::pair<bool,int> parse_silent_flag_and_int( T(& argv)[N]){\n        cli_argument_pack p;\n        bool silent=false;\n        int i=125;\n        p\n            .arg(silent,\"silent\",\"is extra info needed\")\n            .positional_arg(i,\"int\",\"\");\n        p.parse(array_length(argv),argv);\n        return  std::make_pair(silent,i);\n    }\n\n    void test_named_flags_failure_and_other_arg(){\n        char const* argv[]={\"some.exe\",\"1\"};\n        ASSERT(std::make_pair(false,1) == parse_silent_flag_and_int(argv),\"\");\n    }\n\n    void test_named_flags_and_other_arg(){\n        char const* argv[]={\"some.exe\",\"silent\",\"7\"};\n        ASSERT(std::make_pair(true,7) == parse_silent_flag_and_int(argv),\"\");\n    }\n\n    void test_named_flags_and_other_arg_different_order(){\n        char const* argv[]={\"some.exe\",\"7\",\"silent\"};\n        ASSERT(std::make_pair(true,7) == parse_silent_flag_and_int(argv),\"\");\n    }\n\n    void test_flags_only_others_default(){\n        char const* argv[]={\"some.exe\",\"silent\"};\n        ASSERT(std::make_pair(true,125) == parse_silent_flag_and_int(argv),\"\");\n    }\n\n    namespace parameters_validation_test_suite{\n        namespace test_validation_function_called_helpers{\n            struct validator{\n                static bool called;\n                static bool accept(const int & ){\n                    called = true;\n                    return true;\n                }\n            };\n            bool validator::called =false;\n        }\n        void test_validation_function_called(){\n            using test_validation_function_called_helpers::validator;\n\n            char const* argv[]={\"some.exe\",\"7\"};\n            cli_argument_pack p;\n            int size =0;\n            p.positional_arg(size,\"size\",\"\",validator::accept);\n            p.parse(array_length(argv),argv);\n            ASSERT((validator::called),\"validation function has not been called\");\n        }\n        void test_validation_failed(){\n            struct validator{\n                static bool reject(const int &){\n                    return false;\n                }\n            };\n            char const* argv[]={\"some.exe\",\"7\"};\n            cli_argument_pack p;\n            int size =0;\n            p.positional_arg(size,\"size\",\"\",validator::reject);\n            try {\n                p.parse(array_length(argv),argv);\n                ASSERT((false),\"An exception was expected due to failed argument validation, \"\n                        \"but no exception thrown\");\n            }\n            catch(std::invalid_argument& e){\n                std::string error_msg(\"'7' is invalid value for argument 'size'\");\n                ASSERT(e.what()==error_msg , wrong_exception_description);\n            }\n            catch(...){ASSERT((false),wrong_exception);}\n        }\n    }\n    namespace error_handling {\n        void test_wrong_input(){\n            char const* argv[]={\"some.exe\",\"silent\"};\n            cli_argument_pack p;\n            int size =0;\n            p.positional_arg(size,\"size\",\"\");\n            try{\n                p.parse(array_length(argv),argv);\n                ASSERT(false,\"An exception was expected due to wrong input, but no exception thrown\");\n            }\n            catch(std::invalid_argument & e){\n                std::string error_msg(\"'silent' is incorrect input for argument 'size' (error converting string 'silent')\");\n                ASSERT(e.what()==error_msg, wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n        }\n        void test_duplicate_arg_names(){\n            cli_argument_pack p;\n            int a=0;\n            p.arg(a,\"a\",\"\");\n            try{\n                int dup_a=0;\n                p.arg(dup_a,\"a\",\"\");\n                ASSERT(false, \"An exception was expected due adding duplicate parameter name, but not thrown\");\n            }\n            catch(std::invalid_argument& e){\n                ASSERT(e.what()==std::string(\"argument with name: 'a' already registered\"),wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n        }\n        void test_duplicate_positional_arg_names(){\n            cli_argument_pack p;\n            int a=0;\n            p.positional_arg(a,\"a\",\"\");\n            try{\n                int dup_a=0;\n                p.positional_arg(dup_a,\"a\",\"\");\n                ASSERT(false, \"An exception was expected due adding duplicate parameter name, but not thrown\");\n            }\n            catch(std::invalid_argument& e){\n                ASSERT(e.what()==std::string(\"argument with name: 'a' already registered\"),wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n        }\n    }\n    namespace usage_string {\n        void test_one_arg(){\n            cli_argument_pack p;\n            int size =9;\n            p.arg(size,\"size\",\"size of problem domain\");\n            std::string const binary_name = \"binary.exe\";\n            std::stringstream expected_output;\n            using std::endl;\n            expected_output << \" Program usage is:\" << endl\n                 << \" \" << binary_name << \" [size=value]\"\n                 << endl << endl\n                 << \" where:\" << endl\n                 << \" size - size of problem domain (9)\" << endl\n            ;\n            std::string usage= p.usage_string(binary_name);\n            ASSERT(usage==expected_output.str(),\"\");\n        }\n        void test_named_and_postional_args(){\n            cli_argument_pack p;\n            int size =9;\n            int length =8;\n            int stride = 7;\n            p\n                .arg(size,\"size\",\"\")\n                .positional_arg(length,\"length\",\"\")\n                .positional_arg(stride,\"stride\",\"\");\n            std::string const binary_name = \"binary.exe\";\n            std::stringstream expected_output;\n            using std::endl;\n            expected_output << \" Program usage is:\" << endl\n                 << \" \" << binary_name << \" [size=value] [length=value] [stride=value] [length [stride]]\"\n                 << endl << endl\n                 << \" where:\" << endl\n                 << \" size -  (9)\" << endl\n                 << \" length -  (8)\" << endl\n                 << \" stride -  (7)\" << endl\n            ;\n            std::string usage= p.usage_string(binary_name);\n            ASSERT(usage==expected_output.str(),\"\");\n        }\n        void test_bool_flag(){\n            bool flag=false;\n            cli_argument_pack p;\n            p.arg(flag,\"flag\",\"\");\n            std::string const binary_name = \"binary.exe\";\n            std::stringstream expected_output;\n            using std::endl;\n            expected_output << \" Program usage is:\" << endl\n                 << \" \" << binary_name << \" [flag]\"\n                 << endl << endl\n                 << \" where:\" << endl\n                 << \" flag -  (0)\" << endl\n            ;\n            std::string usage= p.usage_string(binary_name);\n            ASSERT(usage==expected_output.str(),\"\");\n\n        }\n\n    }\n    namespace name_positional_syntax {\n        void test_basic(){\n            cli_argument_pack p;\n            int size =0;\n            int time = 0;\n            p\n                .positional_arg(size,\"size\",\"\")\n                .positional_arg(time,\"time\",\"\");\n            char const* argv[]={\"some.exe\",\"1\",\"2\"};\n            p.parse(array_length(argv),argv);\n            ASSERT(size==1,\"\");\n            ASSERT(time==2,\"\");\n        }\n        void test_positional_args_explicitly_named(){\n            const char* no_or_wrong_exception_error_msg = \"exception was expected but not thrown, or wrong exception caught\";\n            //TODO: Similar functionality is used all over the test. Generalize this helper further, and use as wide within the test as possible?\n            struct failed_with_exception{\n                static bool _(cli_argument_pack & p, std::size_t argc, char const* argv[]){\n                    try{\n                        p.parse(argc,argv);\n                        return false;\n                    }\n                    catch(std::exception &){\n                        return true;\n                    }\n                    catch(...){\n                        return false;\n                    }\n                }\n            };\n            {\n                cli_argument_pack p;\n                int a,b,c,d;\n                p\n                    .positional_arg(a,\"a\",\"\")\n                    .positional_arg(b,\"b\",\"\")\n                    .positional_arg(c,\"c\",\"\")\n                    .positional_arg(d,\"d\",\"\");\n                char const* argv[]={\"some.exe\",\"a=7\",\"0\",\"1\",\"2\",\"4\"};\n                ASSERT(failed_with_exception::_(p,array_length(argv),argv),no_or_wrong_exception_error_msg);\n            }\n            {\n                cli_argument_pack p;\n                int a,b,c,d;\n                p\n                    .positional_arg(a,\"a\",\"\")\n                    .positional_arg(b,\"b\",\"\")\n                    .positional_arg(c,\"c\",\"\")\n                    .positional_arg(d,\"d\",\"\");\n                char const* argv[]={\"some.exe\",\"a=7\",\"0\",\"1\",\"2\"};\n                ASSERT(failed_with_exception::_(p,array_length(argv),argv),no_or_wrong_exception_error_msg);\n            }\n            {\n                cli_argument_pack p;\n                int a=-1,b=-1,c = -1,d=-1;\n                p\n                    .positional_arg(a,\"a\",\"\")\n                    .positional_arg(b,\"b\",\"\")\n                    .positional_arg(c,\"c\",\"\")\n                    .positional_arg(d,\"d\",\"\");\n                char const* argv[]={\"some.exe\",\"0\",\"1\",\"d=7\",};\n                ASSERT(!failed_with_exception::_(p,array_length(argv),argv),\"unexpected exception\");\n                ASSERT(a==0,\"\"); ASSERT(b==1,\"\"); ASSERT(c==-1,\"\");ASSERT(d==7,\"\");\n            }\n        }\n    }\n    namespace name_value_syntax {\n        void test_basic(){\n            cli_argument_pack p;\n            int size =0;\n            p.arg(size,\"size\",\"size of problem domain\");\n            char const* argv[]={\"some.exe\",\"size=7\"};\n            p.parse(array_length(argv),argv);\n            ASSERT(size==7,\"\");\n        }\n\n        void test_relaxed_order(){\n            cli_argument_pack p;\n            int size =0;\n            int time=0;\n            p\n                .arg(size,\"size\",\"\")\n                .arg(time,\"time\",\"\");\n            char const* argv[]={\"some.exe\",\"time=1\",\"size=2\"};\n            p.parse(array_length(argv),argv);\n            ASSERT(size==2,\"\");\n            ASSERT(time==1,\"\");\n        }\n\n    }\n    namespace number_of_argument_value{\n        void test_only_single_values_allowed(){\n            cli_argument_pack p;\n            int a=0;\n            p.arg(a,\"a\",\"\");\n            const char* argv[] = {\"\",\"a=7\",\"a=8\"};\n            try {\n                p.parse(array_length(argv),argv);\n                ASSERT(false,\"exception was expected due to duplicated values provided in input, but not thrown\");\n            }\n            catch(std::invalid_argument& e){\n                //TODO: use patterns (regexp ?) to generate /validate exception descriptions\n                ASSERT(e.what() == std::string(\"several values specified for: 'a' argument\"),wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n        }\n    }\n    namespace thread_range_tests{\n        using utility::thread_number_range;\n        using utility::internal::thread_range_step;\n        using utility::internal::step_function_multiply;\n        using utility::internal::step_function_plus;\n        using utility::internal::step_function_power2_ladder;\n\n        int auto_value(){\n            return 100;\n        }\n        bool operator ==(thread_range_step const& left, utility::internal::thread_range_step const& right){\n            return (left.step_function == right.step_function)\n                   && (left.step_function_argument == right.step_function_argument)\n            ;\n        }\n\n        bool operator ==(thread_number_range const& left, thread_number_range const& right){\n            return (left.auto_number_of_threads==right.auto_number_of_threads)\n                    && (left.first == right.first)\n                    && (left.last == right.last)\n                    && (left.step == right.step)\n            ;\n        }\n\n        void constructor_default_values(){\n            thread_number_range r(auto_value);\n            const int default_num_threads = auto_value();\n            ASSERT((r.first==1)&&(r.last==default_num_threads),\"\");\n        }\n        void validation(){\n            try{\n                thread_number_range range(auto_value,12,6);\n                Harness::suppress_unused_warning(range);\n                ASSERT(false,\"exception was expected due to invalid range specified, but not thrown\");\n            }\n            catch(std::invalid_argument& e){\n                ASSERT(e.what() == std::string(\"decreasing sequence not allowed\"), wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n        }\n\n        thread_number_range thread_number_range_from_string(std::string const& string_to_parse){\n            thread_number_range r(auto_value,0,0);\n            std::stringstream str(string_to_parse); str>>r;\n            return r;\n        }\n        static const char* thread_range_parse_failed = \"error parsing thread range string\";\n        void post_process_single_value(){\n            ASSERT(thread_number_range_from_string(\"auto\") ==\n                    thread_number_range(auto_value,auto_value(),auto_value())\n                  ,thread_range_parse_failed\n            );\n        }\n        void post_process_pair_value(){\n            ASSERT(thread_number_range_from_string(\"1:auto\") ==\n                    thread_number_range(auto_value,1,auto_value())\n                  ,thread_range_parse_failed\n            );\n\n            ASSERT(thread_number_range_from_string(\"auto:auto\") ==\n                    thread_number_range(auto_value,auto_value(),auto_value())\n                  ,thread_range_parse_failed\n            );\n        }\n\n        void post_process_troika_value_with_plus_step(){\n            ASSERT(thread_number_range_from_string(\"1:auto:+2\") ==\n                    thread_number_range(auto_value,1,auto_value(),thread_range_step(step_function_plus,2))\n                  ,thread_range_parse_failed\n            );\n        }\n\n        void post_process_troika_value_with_multiply_step(){\n            ASSERT(thread_number_range_from_string(\"1:auto:*2.6\") ==\n                    thread_number_range(auto_value,1,auto_value(),thread_range_step(step_function_multiply,2.6))\n                  ,thread_range_parse_failed\n            );\n        }\n\n        void post_process_troika_value_with_ladder_step(){\n            try{\n                thread_number_range range = thread_number_range_from_string(\"1:16:#3\");\n                Harness::suppress_unused_warning(range);\n                ASSERT(false,\"exception was expected due to invalid range specified, but not thrown\");\n            }\n            catch(std::invalid_argument& e){\n                ASSERT(e.what() == std::string(\"the argument of # should be a power of 2\"), wrong_exception_description);\n            }\n            catch(...){ASSERT(false,wrong_exception);}\n\n            ASSERT(thread_number_range_from_string(\"1:32:#4\") ==\n                    thread_number_range(auto_value,1,32,thread_range_step(step_function_power2_ladder,4))\n                  ,thread_range_parse_failed\n            );\n        }\n\n        void test_print_content(){\n            std::stringstream str;\n            str<<thread_number_range(auto_value,1,8,thread_range_step(step_function_multiply,2));\n            ASSERT(str.str() == \"1:8:*2\",\"Unexpected string\");\n        }\n    }\n}\n\nvoid run_implementation_unit_tests(){\n    using namespace implementation_unit_tests;\n    argument_dest_test_suite::test_type_impl_parse_and_store_simple_parse();\n    argument_dest_test_suite::test_default_value_of_is_matched();\n\n    cli_argument_pack_suite::test_copy_assign();\n}\nvoid run_high_level_api_tests(){\n    using namespace  high_level_api_tests;\n\n    test_parse_basic();\n    test_named_flags_success();\n    test_named_flags_failure();\n    test_named_flags_failure_and_other_arg();\n    test_named_flags_and_other_arg();\n    test_flags_only_others_default();\n    test_named_flags_and_other_arg_different_order();\n\n    usage_string::test_one_arg();\n    usage_string::test_named_and_postional_args();\n    usage_string::test_bool_flag();\n\n    parameters_validation_test_suite::test_validation_function_called();\n    parameters_validation_test_suite::test_validation_failed();\n\n    name_value_syntax::test_basic();\n    name_value_syntax::test_relaxed_order();\n\n    number_of_argument_value::test_only_single_values_allowed();\n\n    name_positional_syntax::test_basic();\n    name_positional_syntax::test_positional_args_explicitly_named();\n\n    error_handling::test_wrong_input();\n    error_handling::test_duplicate_arg_names();\n    error_handling::test_duplicate_positional_arg_names();\n\n    thread_range_tests::constructor_default_values();\n    thread_range_tests::validation();\n    thread_range_tests::post_process_single_value();\n    thread_range_tests::post_process_pair_value();\n    thread_range_tests::post_process_troika_value_with_plus_step();\n    thread_range_tests::post_process_troika_value_with_multiply_step();\n    thread_range_tests::post_process_troika_value_with_ladder_step();\n    thread_range_tests::test_print_content();\n}\n#endif // TBB_USE_EXCEPTIONS\n\n#include \"harness.h\"\nint TestMain(){\n#if TBB_USE_EXCEPTIONS\n    Harness::suppress_unused_warning(utility::thread_number_range_desc);\n    try{\n        run_implementation_unit_tests();\n        run_high_level_api_tests();\n    }catch(std::exception& e){\n        //something went wrong , dump any possible details\n        std::stringstream str; str<< \"run time error: \" << e.what()<<std::endl;\n        ASSERT(false,str.str().c_str());\n    }\n    return Harness::Done;\n#else\n    REPORT(\"Known issue: the test cannot work with exceptions disabled\\n\");\n    return Harness::Done;\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_fast_random.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/**\n    The test checks that for different ranges of random numbers (from 0 to\n    [MinThread, MaxThread]) generated with different seeds the probability\n    of each number in the range deviates from the ideal random distribution\n    by no more than AcceptableDeviation percent.\n**/\n\n#define HARNESS_DEFAULT_MIN_THREADS 2\n#define HARNESS_DEFAULT_MAX_THREADS 32\n\n#define HARNESS_DEFINE_PRIVATE_PUBLIC 1\n#include \"harness_inject_scheduler.h\"\n\n#define TEST_TOTAL_SEQUENCE 0\n\n#include \"harness.h\"\n#include \"tbb/atomic.h\"\n\n//! Coefficient defining tolerable deviation from ideal random distribution\nconst double AcceptableDeviation = 2.1;\n//! Tolerable probability of failure to achieve tolerable distribution\nconst double AcceptableProbabilityOfOutliers = 1e-5;\n//! Coefficient defining the length of random numbers series used to estimate the distribution\n/** Number of random values generated per each range element. I.e. the larger is\n    the range, the longer is the series of random values. **/\nconst uintptr_t SeriesBaseLen = 100;\n//! Number of random numbers series to generate\nconst uintptr_t NumSeries = 100;\n//! Number of random number generation series with different seeds\nconst uintptr_t NumSeeds = 100;\n\ntbb::atomic<uintptr_t> NumHighOutliers;\ntbb::atomic<uintptr_t> NumLowOutliers;\n\ninline void CheckProbability ( double probability, double expectedProbability, int index, int numIndices, void* seed ) {\n    double lowerBound = expectedProbability / AcceptableDeviation,\n           upperBound = expectedProbability * AcceptableDeviation;\n    if ( probability < lowerBound ) {\n        if ( !NumLowOutliers )\n            REMARK( \"Warning: Probability %.3f of hitting index %d among %d elements is out of acceptable range (%.3f - %.3f) for seed %p\\n\",\n                    probability, index, numIndices, lowerBound, upperBound, seed );\n        ++NumLowOutliers;\n    }\n    else if ( probability > upperBound ) {\n        if ( !NumHighOutliers )\n            REMARK( \"Warning: Probability %.3f of hitting index %d among %d elements is out of acceptable range (%.3f - %.3f) for seed %p\\n\",\n                    probability, index, numIndices, lowerBound, upperBound, seed );\n        ++NumHighOutliers;\n    }\n}\n\nstruct CheckDistributionBody {\n    void operator() ( int id ) const {\n        uintptr_t randomRange = id + MinThread;\n        uintptr_t *curHits = new uintptr_t[randomRange]\n#if TEST_TOTAL_SEQUENCE\n                , *totalHits = new uintptr_t[randomRange]\n#endif\n        ;\n        double expectedProbability = 1./randomRange;\n        // Loop through different seeds\n        for ( uintptr_t i = 0; i < NumSeeds; ++i ) {\n            // Seed value mimics the one used by the TBB task scheduler\n            void* seed = (char*)&curHits + i * 16;\n            tbb::internal::FastRandom random( seed );\n            // According to Section 3.2.1.2 of Volume 2 of Knuth's Art of Computer Programming\n            // the following conditions must be hold for m=2^32:\n            ASSERT((random.c&1)!=0, \"c is relatively prime to m\");\n            ASSERT((random.a-1)%4==0, \"a-1 is a multiple of p, for every prime p dividing m.\"\n                   \" And a-1 is a multiple of 4, if m is a multiple of 4\");\n\n            memset( curHits, 0, randomRange * sizeof(uintptr_t) );\n#if TEST_TOTAL_SEQUENCE\n            memset( totalHits, 0, randomRange * sizeof(uintptr_t) );\n#endif\n            const uintptr_t seriesLen = randomRange * SeriesBaseLen,\n                            experimentLen = NumSeries * seriesLen;\n            uintptr_t *curSeries = new uintptr_t[seriesLen],  // circular buffer\n                       randsGenerated = 0;\n            // Initialize statistics\n            while ( randsGenerated < seriesLen ) {\n                uintptr_t idx = random.get() % randomRange;\n                ++curHits[idx];\n#if TEST_TOTAL_SEQUENCE\n                ++totalHits[idx];\n#endif\n                curSeries[randsGenerated++] = idx;\n            }\n            while ( randsGenerated < experimentLen ) {\n                for ( uintptr_t j = 0; j < randomRange; ++j ) {\n                    CheckProbability( double(curHits[j])/seriesLen, expectedProbability, j, randomRange, seed );\n#if TEST_TOTAL_SEQUENCE\n                    CheckProbability( double(totalHits[j])/randsGenerated, expectedProbability, j, randomRange, seed );\n#endif\n                }\n                --curHits[curSeries[randsGenerated % seriesLen]];\n                int idx = random.get() % randomRange;\n                ++curHits[idx];\n#if TEST_TOTAL_SEQUENCE\n                ++totalHits[idx];\n#endif\n                curSeries[randsGenerated++ % seriesLen] = idx;\n            }\n            delete [] curSeries;\n        }\n        delete [] curHits;\n#if TEST_TOTAL_SEQUENCE\n        delete [] totalHits;\n#endif\n    }\n};\n\nstruct rng {\n    tbb::internal::FastRandom my_fast_random;\n    rng (unsigned seed):my_fast_random(seed) {}\n    unsigned short operator()(){return my_fast_random.get();}\n};\n\ntemplate <std::size_t seriesLen >\nstruct SingleCheck{\n    bool operator()(unsigned seed)const{\n        std::size_t series1[seriesLen]={0};\n        std::size_t series2[seriesLen]={0};\n        std::generate(series1,series1+seriesLen,rng(seed));\n        std::generate(series2,series2+seriesLen,rng(seed));\n        return std::equal(series1,series1+seriesLen,series2);\n    }\n};\n\ntemplate <std::size_t seriesLen ,size_t seedsNum>\nstruct CheckReproducibilityBody:NoAssign{\n    unsigned short seeds[seedsNum];\n    const std::size_t grainSize;\n    CheckReproducibilityBody(std::size_t GrainSize): grainSize(GrainSize){\n       //first generate seeds to check on, and make sure that sequence is reproducible\n       ASSERT(SingleCheck<seedsNum>()(0),\"Series generated by FastRandom must be reproducible\");\n       std::generate(seeds,seeds+seedsNum,rng(0));\n    }\n\n    void operator()(int id)const{\n       for (size_t i=id*grainSize; (i<seedsNum)&&(i< ((id+1)*grainSize));++i ){\n           ASSERT(SingleCheck<seriesLen>()(i),\"Series generated by FastRandom must be reproducible\");\n       }\n    }\n\n};\n#include \"tbb/tbb_thread.h\"\n\nint TestMain () {\n    ASSERT( AcceptableDeviation < 100, NULL );\n    MinThread = max(MinThread, 2);\n    MaxThread = max(MinThread, MaxThread);\n    double NumChecks = double(NumSeeds) * (MaxThread - MinThread + 1) * (MaxThread + MinThread) / 2.0 * (SeriesBaseLen * NumSeries - SeriesBaseLen);\n    REMARK( \"Number of distribution quality checks %g\\n\", NumChecks );\n    NumLowOutliers = NumHighOutliers = 0;\n    // Parallelism is used in this test only to speed up the long serial checks\n    // Essentially it is a loop over random number ranges\n    // Ideally tbb::parallel_for could be used to parallelize the outermost loop\n    // in CheckDistributionBody, but it is not used to avoid unit test contamination.\n    int P = tbb::tbb_thread::hardware_concurrency();\n    enum {reproducibilitySeedsToTest=1000};\n    enum {reproducibilitySeriesLen=100};\n    CheckReproducibilityBody<reproducibilitySeriesLen,reproducibilitySeedsToTest>  CheckReproducibility(reproducibilitySeedsToTest/MaxThread);\n    while ( MinThread <= MaxThread ) {\n        int ThreadsToRun = min(P, MaxThread - MinThread + 1);\n        REMARK(\"Checking random range [%d;%d)\\n\", MinThread, MinThread+ThreadsToRun);\n        NativeParallelFor( ThreadsToRun, CheckDistributionBody() );\n        NativeParallelFor( ThreadsToRun, CheckReproducibility );\n        MinThread += P;\n    }\n    double observedProbabilityOfOutliers = (NumLowOutliers + NumHighOutliers) / NumChecks;\n    if ( observedProbabilityOfOutliers > AcceptableProbabilityOfOutliers ) {\n        if ( NumLowOutliers )\n            REPORT( \"Warning: %d cases of too low probability of a given number detected\\n\", (int)NumLowOutliers );\n        if ( NumHighOutliers )\n            REPORT( \"Warning: %d cases of too high probability of a given number detected\\n\", (int)NumHighOutliers );\n        ASSERT( observedProbabilityOfOutliers <= AcceptableProbabilityOfOutliers, NULL );\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_flow_graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_graph.h\"\n#include \"harness_barrier.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst int T = 4;\nconst int W = 4;\n\nstruct decrement_wait : NoAssign {\n\n    tbb::flow::graph * const my_graph;\n    bool * const my_done_flag;\n\n    decrement_wait( tbb::flow::graph &h, bool *done_flag ) : my_graph(&h), my_done_flag(done_flag) {}\n\n    void operator()(int i) const {\n        Harness::Sleep(10*i);\n        my_done_flag[i] = true;\n        my_graph->decrement_wait_count();\n    }\n};\n\nstatic void test_wait_count() {\n   tbb::flow::graph h;\n   for (int i = 0; i < T; ++i ) {\n       bool done_flag[W];\n       for (int j = 0; j < W; ++j ) {\n           for ( int w = 0; w < W; ++w ) done_flag[w] = false;\n           for ( int w = 0; w < j; ++w ) h.increment_wait_count();\n\n           NativeParallelFor( j, decrement_wait(h, done_flag) );\n           h.wait_for_all();\n           for ( int w = 0; w < W; ++w ) {\n              if ( w < j ) ASSERT( done_flag[w] == true, NULL );\n              else ASSERT( done_flag[w] == false, NULL );\n           }\n       }\n   }\n}\n\nconst int F = 100;\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\nbool lambda_flag[F];\n#endif\nbool functor_flag[F];\n\nstruct set_functor {\n    int my_i;\n    set_functor( int i ) : my_i(i) {}\n    void operator()() { functor_flag[my_i] = true; }\n};\n\nstruct return_functor {\n    int my_i;\n    return_functor( int i ) : my_i(i) {}\n    int operator()() { return my_i; }\n};\n\nstatic void test_run() {\n    tbb::flow::graph h;\n    for (int i = 0; i < T; ++i ) {\n\n        // Create receivers and flag arrays\n        #if __TBB_CPP11_LAMBDAS_PRESENT\n        harness_mapped_receiver<int> lambda_r(h);\n        lambda_r.initialize_map( F, 1 );\n        #endif\n        harness_mapped_receiver<int> functor_r(h);\n        functor_r.initialize_map( F, 1 );\n\n        // Initialize flag arrays\n        for (int j = 0; j < F; ++j ) {\n            #if __TBB_CPP11_LAMBDAS_PRESENT\n            lambda_flag[j] = false;\n            #endif\n            functor_flag[j] = false;\n        }\n\n        for ( int j = 0; j < F; ++j ) {\n            #if __TBB_CPP11_LAMBDAS_PRESENT\n                h.run( [=]() { lambda_flag[j] = true; } );\n                h.run( lambda_r, [=]() { return j; } );\n            #endif\n            h.run( set_functor(j) );\n            h.run( functor_r, return_functor(j) );\n        }\n        h.wait_for_all();\n        for ( int j = 0; j < F; ++j ) {\n        #if __TBB_CPP11_LAMBDAS_PRESENT\n            ASSERT( lambda_flag[i] == true, NULL );\n        #endif\n            ASSERT( functor_flag[i] == true, NULL );\n        }\n        #if __TBB_CPP11_LAMBDAS_PRESENT\n        lambda_r.validate();\n        #endif\n        functor_r.validate();\n    }\n}\n\n// Encapsulate object we want to store in vector (because contained type must have\n// copy constructor and assignment operator\nclass my_int_buffer {\n    tbb::flow::buffer_node<int> *b;\n    tbb::flow::graph& my_graph;\npublic:\n    my_int_buffer(tbb::flow::graph &g) : my_graph(g) { b = new tbb::flow::buffer_node<int>(my_graph); }\n    my_int_buffer(const my_int_buffer& other) : my_graph(other.my_graph) {\n        b = new tbb::flow::buffer_node<int>(my_graph);\n    }\n    ~my_int_buffer() { delete b; }\n    my_int_buffer& operator=(const my_int_buffer& /*other*/) {\n        return *this;\n    }\n};\n\n// test the graph iterator, delete nodes from graph, test again\nvoid test_iterator() {\n   tbb::flow::graph g;\n   my_int_buffer a_buffer(g);\n   my_int_buffer b_buffer(g);\n   my_int_buffer c_buffer(g);\n   my_int_buffer *d_buffer = new my_int_buffer(g);\n   my_int_buffer e_buffer(g);\n   std::vector< my_int_buffer > my_buffer_vector(10, c_buffer);\n\n   int count = 0;\n   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {\n       count++;\n   }\n   ASSERT(count==15, \"error in iterator count\");\n\n   delete d_buffer;\n\n   count = 0;\n   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {\n       count++;\n   }\n   ASSERT(count==14, \"error in iterator count\");\n\n   my_buffer_vector.clear();\n\n   count = 0;\n   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {\n       count++;\n   }\n   ASSERT(count==4, \"error in iterator count\");\n}\n\nclass AddRemoveBody : NoAssign {\n    tbb::flow::graph& g;\n    int nThreads;\n    Harness::SpinBarrier &barrier;\npublic:\n    AddRemoveBody(int nthr, Harness::SpinBarrier &barrier_, tbb::flow::graph& _g) :\n        g(_g), nThreads(nthr), barrier(barrier_)\n    {}\n    void operator()(const int /*threadID*/) const {\n        my_int_buffer b(g);\n        {\n            std::vector<my_int_buffer> my_buffer_vector(100, b);\n            barrier.wait();  // wait until all nodes are created\n            // now test that the proper number of nodes were created\n            int count = 0;\n            for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {\n                count++;\n            }\n            ASSERT(count==101*nThreads, \"error in iterator count\");\n            barrier.wait();  // wait until all threads are done counting\n        } // all nodes but for the initial node on this thread are deleted\n        barrier.wait(); // wait until all threads have deleted all nodes in their vectors\n        // now test that all the nodes were deleted except for the initial node\n        int count = 0;\n        for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {\n            count++;\n        }\n        ASSERT(count==nThreads, \"error in iterator count\");\n        barrier.wait();  // wait until all threads are done counting\n    } // initial node gets deleted\n};\n\nvoid test_parallel(int nThreads) {\n    tbb::flow::graph g;\n    Harness::SpinBarrier barrier(nThreads);\n    AddRemoveBody body(nThreads, barrier, g);\n    NativeParallelFor(nThreads, body);\n}\n\n/*\n * Functors for graph arena spawn tests\n */\n\ninline void check_arena(tbb::task_arena* a) {\n    ASSERT(a->max_concurrency() == 2, NULL);\n    ASSERT(tbb::this_task_arena::max_concurrency() == 1, NULL);\n}\n\nstruct run_functor {\n    tbb::task_arena* my_a;\n    int return_value;\n    run_functor(tbb::task_arena* a) : my_a(a), return_value(1) {}\n    int operator()() {\n        check_arena(my_a);\n        return return_value;\n    }\n};\n\ntemplate < typename T >\nstruct function_body {\n    tbb::task_arena* my_a;\n    function_body(tbb::task_arena* a) : my_a(a) {}\n    tbb::flow::continue_msg operator()(const T& /*arg*/) {\n        check_arena(my_a);\n        return tbb::flow::continue_msg();\n    }\n};\n\ntypedef tbb::flow::multifunction_node< int, tbb::flow::tuple< int > > mf_node;\n\nstruct multifunction_body {\n    tbb::task_arena* my_a;\n    multifunction_body(tbb::task_arena* a) : my_a(a) {}\n    void operator()(const int& /*arg*/, mf_node::output_ports_type& /*outports*/) {\n        check_arena(my_a);\n    }\n};\n\nstruct source_body {\n    tbb::task_arena* my_a;\n    int counter;\n    source_body(tbb::task_arena* a) : my_a(a), counter(0) {}\n    bool operator()(const int& /*i*/) {\n        check_arena(my_a);\n        if (counter < 1) {\n          ++counter;\n          return true;\n       }\n       return false;\n    }\n};\n\nstruct run_test_functor : tbb::internal::no_assign {\n    tbb::task_arena* fg_arena;\n    tbb::flow::graph& my_graph;\n\n    run_test_functor(tbb::task_arena* a, tbb::flow::graph& g) : fg_arena(a), my_graph(g) {}\n    void operator()() const {\n        harness_mapped_receiver<int> functor_r(my_graph);\n        functor_r.initialize_map(F, 1);\n\n        my_graph.run(run_functor(fg_arena));\n        my_graph.run(functor_r, run_functor(fg_arena));\n\n        my_graph.wait_for_all();\n    }\n};\n\nstruct nodes_test_functor : tbb::internal::no_assign {\n    tbb::task_arena* fg_arena;\n    tbb::flow::graph& my_graph;\n\n    nodes_test_functor(tbb::task_arena* a, tbb::flow::graph& g) : fg_arena(a), my_graph(g) {}\n    void operator()() const {\n\n        // Define test nodes\n        // Continue, function, source nodes\n        tbb::flow::continue_node< tbb::flow::continue_msg > c_n(my_graph, function_body<tbb::flow::continue_msg>(fg_arena));\n        tbb::flow::function_node< int > f_n(my_graph, tbb::flow::unlimited, function_body<int>(fg_arena));\n        tbb::flow::source_node< int > s_n(my_graph, source_body(fg_arena), false);\n\n        // Multifunction node\n        mf_node m_n(my_graph, tbb::flow::unlimited, multifunction_body(fg_arena));\n\n        // Join node\n        tbb::flow::function_node< tbb::flow::tuple< int, int > > join_f_n(my_graph, tbb::flow::unlimited, function_body< tbb::flow::tuple< int, int > >(fg_arena));\n        tbb::flow::join_node< tbb::flow::tuple< int, int > > j_n(my_graph);\n        make_edge(j_n, join_f_n);\n\n        // Split node\n        tbb::flow::function_node< int > split_f_n1 = f_n;\n        tbb::flow::function_node< int > split_f_n2 = f_n;\n        tbb::flow::split_node< tbb::flow::tuple< int, int > > sp_n(my_graph);\n        make_edge(tbb::flow::output_port<0>(sp_n), split_f_n1);\n        make_edge(tbb::flow::output_port<1>(sp_n), split_f_n2);\n\n        // Overwrite node\n        tbb::flow::function_node< int > ow_f_n = f_n;\n        tbb::flow::overwrite_node< int > ow_n(my_graph);\n        make_edge(ow_n, ow_f_n);\n\n        // Write once node\n        tbb::flow::function_node< int > w_f_n = f_n;\n        tbb::flow::write_once_node< int > w_n(my_graph);\n        make_edge(w_n, w_f_n);\n\n        // Buffer node\n        tbb::flow::function_node< int > buf_f_n = f_n;\n        tbb::flow::buffer_node< int > buf_n(my_graph);\n        make_edge(w_n, buf_f_n);\n\n        // Limiter node\n        tbb::flow::function_node< int > l_f_n = f_n;\n        tbb::flow::limiter_node< int > l_n(my_graph, 1);\n        make_edge(l_n, l_f_n);\n\n        // Execute nodes\n        c_n.try_put( tbb::flow::continue_msg() );\n        f_n.try_put(1);\n        m_n.try_put(1);\n        s_n.activate();\n\n        tbb::flow::input_port<0>(j_n).try_put(1);\n        tbb::flow::input_port<1>(j_n).try_put(1);\n\n        tbb::flow::tuple< int, int > sp_tuple(1, 1);\n        sp_n.try_put(sp_tuple);\n\n        ow_n.try_put(1);\n        w_n.try_put(1);\n        buf_n.try_put(1);\n        l_n.try_put(1);\n\n        my_graph.wait_for_all();\n    }\n};\n\nvoid test_graph_arena() {\n    // There is only one thread for execution (master thread).\n    // So, if graph's tasks get spawned in different arena\n    // master thread won't be able to find them in its own arena.\n    // In this case test should hang.\n    tbb::task_scheduler_init init(1);\n\n    tbb::flow::graph g;\n    tbb::task_arena fg_arena;\n    fg_arena.initialize(2);\n    fg_arena.execute(run_test_functor(&fg_arena, g));\n    fg_arena.execute(nodes_test_functor(&fg_arena, g));\n}\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n       tbb::task_scheduler_init init(p);\n       test_wait_count();\n       test_run();\n       test_iterator();\n       test_parallel(p);\n   }\n   test_graph_arena();\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_flow_graph_whitebox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 3\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n#if _MSC_VER\n    #pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n    #if _MSC_VER==1700 && !defined(__INTEL_COMPILER)\n        // Suppress \"unreachable code\" warning by VC++ 17.0 (VS 2012)\n        #pragma warning (disable: 4702)\n    #endif\n#endif\n\n#include \"harness.h\"\n#include <string> // merely prevents LNK2001 error to happen (on ICL+VC9 configurations)\n\n// need these to get proper external names for private methods in library.\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/task.h\"\n#include \"tbb/task_arena.h\"\n\n#define private public\n#define protected public\n#include \"tbb/flow_graph.h\"\n#undef protected\n#undef private\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness_graph.h\"\n\ntemplate<typename T>\nstruct receiverBody {\n    tbb::flow::continue_msg operator()(const T &/*in*/) {\n        return tbb::flow::continue_msg();\n    }\n};\n\n// split_nodes cannot have predecessors\n// they do not reject messages and always forward.\n// they reject edge reversals from successors.\nvoid TestSplitNode() {\n    typedef tbb::flow::split_node<tbb::flow::tuple<int> > snode_type;\n    tbb::flow::graph g;\n    snode_type snode(g);\n    tbb::flow::function_node<int> rcvr(g,tbb::flow::unlimited, receiverBody<int>());\n    REMARK(\"Testing split_node\\n\");\n    ASSERT(tbb::flow::output_port<0>(snode).my_successors.empty(), \"Constructed split_node has successors\");\n    // tbb::flow::output_port<0>(snode)\n    tbb::flow::make_edge(tbb::flow::output_port<0>(snode), rcvr);\n    ASSERT(!(tbb::flow::output_port<0>(snode).my_successors.empty()), \"after make_edge, split_node has no successor.\");\n    snode.try_put(tbb::flow::tuple<int>(1));\n    g.wait_for_all();\n    g.reset();\n    ASSERT(!(tbb::flow::output_port<0>(snode).my_successors.empty()), \"after reset(), split_node has no successor.\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(tbb::flow::output_port<0>(snode).my_successors.empty(), \"after reset(rf_clear_edges), split_node has a successor.\");\n}\n\n// buffering nodes cannot have predecessors\n// they do not reject messages and always save or forward\n// they allow edge reversals from successors\ntemplate< typename B >\nvoid TestBufferingNode(const char * name) {\n    tbb::flow::graph g;\n    B                bnode(g);\n    tbb::flow::function_node<int,int,tbb::flow::rejecting> fnode(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state0));\n    REMARK(\"Testing %s:\", name);\n    for(int icnt = 0; icnt < 2; icnt++) {\n        bool reverse_edge = (icnt & 0x2) != 0;\n        serial_fn_state0 = 0;  // reset to waiting state.\n        REMARK(\" make_edge\");\n        tbb::flow::make_edge(bnode, fnode);\n        ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after make_edge\");\n        REMARK(\" try_put\");\n        bnode.try_put(1);  // will forward to the fnode\n        BACKOFF_WAIT(serial_fn_state0 == 0, \"Timed out waiting for first put\");\n        if(reverse_edge) {\n            REMARK(\" try_put2\");\n            bnode.try_put(2);  // will reverse the edge\n            // cannot do a wait_for_all here; the function_node is still executing\n            BACKOFF_WAIT(!bnode.my_successors.empty(), \"Timed out waiting after 2nd put\");\n            // at this point the only task running is the one for the function_node.\n            ASSERT(bnode.my_successors.empty(), \"successor not removed\");\n        }\n        else {\n            ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after forwarding message\");\n        }\n        serial_fn_state0 = 0;  // release the function_node.\n        if(reverse_edge) {\n            // have to do a second release because the function_node will get the 2nd item\n            BACKOFF_WAIT( serial_fn_state0 == 0, \"Timed out waiting after 2nd put\");\n            serial_fn_state0 = 0;  // release the function_node.\n        }\n        g.wait_for_all();\n        REMARK(\" remove_edge\");\n        tbb::flow::remove_edge(bnode, fnode);\n        ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after remove_edge\");\n    }\n    tbb::flow::join_node<tbb::flow::tuple<int,int>,tbb::flow::reserving> jnode(g);\n    tbb::flow::make_edge(bnode, tbb::flow::input_port<0>(jnode));  // will spawn a task\n    g.wait_for_all();\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after attaching to join\");\n    REMARK(\" reverse\");\n    bnode.try_put(1);  // the edge should reverse\n    g.wait_for_all();\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after reserving\");\n    REMARK(\" reset()\");\n    g.wait_for_all();\n    g.reset();  // should be in forward direction again\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after reset()\");\n    REMARK(\" remove_edge\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after reset(rf_clear_edges)\");\n    tbb::flow::make_edge(bnode, tbb::flow::input_port<0>(jnode));  // add edge again\n    // reverse edge by adding to buffer.\n    bnode.try_put(1);  // the edge should reverse\n    g.wait_for_all();\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after reserving\");\n    REMARK(\" remove_edge(reversed)\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(bnode.my_successors.empty(), \"buffering node has no successor after reset()\");\n    ASSERT(tbb::flow::input_port<0>(jnode).my_predecessors.empty(), \"predecessor not reset\");\n    REMARK(\"  done\\n\");\n    g.wait_for_all();\n}\n\n// continue_node has only predecessor count\n// they do not have predecessors, only the counts\n// successor edges cannot be reversed\nvoid TestContinueNode() {\n    tbb::flow::graph g;\n    tbb::flow::function_node<int> fnode0(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state0));\n    tbb::flow::continue_node<int> cnode(g, 1, serial_continue_body<int>(serial_continue_state0));\n    tbb::flow::function_node<int> fnode1(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state1));\n    tbb::flow::make_edge(fnode0, cnode);\n    tbb::flow::make_edge(cnode, fnode1);\n    REMARK(\"Testing continue_node:\");\n    for( int icnt = 0; icnt < 2; ++icnt ) {\n        REMARK( \" initial%d\", icnt);\n        ASSERT(cnode.my_predecessor_count == 2, \"predecessor addition didn't increment count\");\n        ASSERT(!cnode.successors().empty(), \"successors empty though we added one\");\n        ASSERT(cnode.my_current_count == 0, \"state of continue_receiver incorrect\");\n        serial_continue_state0 = 0;\n        serial_fn_state0 = 0;\n        serial_fn_state1 = 0;\n\n        fnode0.try_put(1);  // start the first function node.\n        BACKOFF_WAIT(!serial_fn_state0, \"Timed out waiting for function_node to start\");\n        // Now the body of function_node 0 is executing.\n        serial_fn_state0 = 0;  // release the node\n        // wait for node to count the message (or for the node body to execute, which would be wrong)\n        BACKOFF_WAIT(serial_continue_state0 == 0 && cnode.my_current_count == 0, \"Timed out waiting for continue_state0 to change\");\n        ASSERT(serial_continue_state0 == 0, \"Improperly released continue_node\");\n        ASSERT(cnode.my_current_count == 1, \"state of continue_receiver incorrect\");\n        if(icnt == 0) {  // first time through, let the continue_node fire\n            REMARK(\" firing\");\n            fnode0.try_put(1);  // second message\n            BACKOFF_WAIT(serial_fn_state0 == 0, \"timeout waiting for continue_body to execute\");\n            // Now the body of function_node 0 is executing.\n            serial_fn_state0 = 0;  // release the node\n\n            BACKOFF_WAIT(!serial_continue_state0,\"continue_node didn't start\");  // now we wait for the continue_node.\n            ASSERT(cnode.my_current_count == 0, \" my_current_count not reset before body of continue_node started\");\n            serial_continue_state0 = 0;  // release the continue_node\n            BACKOFF_WAIT(!serial_fn_state1,\"successor function_node didn't start\");    // wait for the successor function_node to enter body\n            serial_fn_state1 = 0;  // release successor function_node.\n            g.wait_for_all();\n\n            // try a try_get()\n            {\n                int i;\n                ASSERT(!cnode.try_get(i), \"try_get not rejected\");\n            }\n\n            REMARK(\" reset\");\n            ASSERT(!cnode.my_successors.empty(), \"Empty successors in built graph (before reset)\");\n            ASSERT(cnode.my_predecessor_count == 2, \"predecessor_count reset (before reset)\");\n            g.reset();  // should still be the same\n            ASSERT(!cnode.my_successors.empty(), \"Empty successors in built graph (after reset)\" );\n            ASSERT(cnode.my_predecessor_count == 2, \"predecessor_count reset (after reset)\");\n        }\n        else {  // we're going to see if the rf_clear_edges resets things.\n            g.wait_for_all();\n            REMARK(\" reset(rf_clear_edges)\");\n            ASSERT(!cnode.my_successors.empty(), \"Empty successors in built graph (before reset)\");\n            ASSERT(cnode.my_predecessor_count == 2, \"predecessor_count reset (before reset)\");\n            g.reset(tbb::flow::rf_clear_edges);  // should be in forward direction again\n            ASSERT(cnode.my_current_count == 0, \"state of continue_receiver incorrect after reset(rf_clear_edges)\");\n            ASSERT(cnode.my_successors.empty(), \"buffering node has a successor after reset(rf_clear_edges)\");\n            ASSERT(cnode.my_predecessor_count == cnode.my_initial_predecessor_count, \"predecessor count not reset\");\n        }\n    }\n\n    REMARK(\" done\\n\");\n\n}\n\n// function_node has predecessors and successors\n// try_get() rejects\n// successor edges cannot be reversed\n// predecessors will reverse (only rejecting will reverse)\nvoid TestFunctionNode() {\n    tbb::flow::graph g;\n    tbb::flow::queue_node<int> qnode0(g);\n    tbb::flow::function_node<int,int, tbb::flow::rejecting > fnode0(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state0));\n    // queueing function node\n    tbb::flow::function_node<int,int> fnode1(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state0));\n\n    tbb::flow::queue_node<int> qnode1(g);\n\n    tbb::flow::make_edge(fnode0, qnode1);\n    tbb::flow::make_edge(qnode0, fnode0);\n\n    serial_fn_state0 = 2;  // just let it go\n    // see if the darned thing will work....\n    qnode0.try_put(1);\n    g.wait_for_all();\n    int ii;\n    ASSERT(qnode1.try_get(ii) && ii == 1, \"output not passed\");\n    tbb::flow::remove_edge(qnode0, fnode0);\n    tbb::flow::remove_edge(fnode0, qnode1);\n\n    tbb::flow::make_edge(fnode1, qnode1);\n    tbb::flow::make_edge(qnode0, fnode1);\n\n    serial_fn_state0 = 2;  // just let it go\n    // see if the darned thing will work....\n    qnode0.try_put(1);\n    g.wait_for_all();\n    ASSERT(qnode1.try_get(ii) && ii == 1, \"output not passed\");\n    tbb::flow::remove_edge(qnode0, fnode1);\n    tbb::flow::remove_edge(fnode1, qnode1);\n\n    // rejecting\n    serial_fn_state0 = 0;\n    tbb::flow::make_edge(fnode0, qnode1);\n    tbb::flow::make_edge(qnode0, fnode0);\n    REMARK(\"Testing rejecting function_node:\");\n    ASSERT(!fnode0.my_queue, \"node should have no queue\");\n    ASSERT(!fnode0.my_successors.empty(), \"successor edge not added\");\n    qnode0.try_put(1);\n    BACKOFF_WAIT(!serial_fn_state0,\"rejecting function_node didn't start\");\n    qnode0.try_put(2);   // rejecting node should reject, reverse.\n    BACKOFF_WAIT(fnode0.my_predecessors.empty(), \"Missing predecessor ---\");\n    serial_fn_state0 = 2;   // release function_node body.\n    g.wait_for_all();\n    REMARK(\" reset\");\n    g.reset();  // should reverse the edge from the input to the function node.\n    ASSERT(!qnode0.my_successors.empty(), \"empty successors after reset()\");\n    ASSERT(fnode0.my_predecessors.empty(), \"predecessor not reversed\");\n    tbb::flow::remove_edge(qnode0, fnode0);\n    tbb::flow::remove_edge(fnode0, qnode1);\n    REMARK(\"\\n\");\n\n    // queueing\n    tbb::flow::make_edge(fnode1, qnode1);\n    REMARK(\"Testing queueing function_node:\");\n    ASSERT(fnode1.my_queue, \"node should have no queue\");\n    ASSERT(!fnode1.my_successors.empty(), \"successor edge not added\");\n    REMARK(\" add_pred\");\n    ASSERT(fnode1.register_predecessor(qnode0), \"Cannot register as predecessor\");\n    ASSERT(!fnode1.my_predecessors.empty(), \"Missing predecessor\");\n    REMARK(\" reset\");\n    g.wait_for_all();\n    g.reset();  // should reverse the edge from the input to the function node.\n    ASSERT(!qnode0.my_successors.empty(), \"empty successors after reset()\");\n    ASSERT(fnode1.my_predecessors.empty(), \"predecessor not reversed\");\n    tbb::flow::remove_edge(qnode0, fnode1);\n    tbb::flow::remove_edge(fnode1, qnode1);\n    REMARK(\"\\n\");\n\n    serial_fn_state0 = 0;  // make the function_node wait\n    tbb::flow::make_edge(qnode0, fnode0);\n    REMARK(\" start_func\");\n    qnode0.try_put(1);\n    BACKOFF_WAIT(serial_fn_state0 == 0, \"Timed out waiting after 1st put\");\n    // now if we put an item to the queues the edges to the function_node will reverse.\n    REMARK(\" put_node(2)\");\n    qnode0.try_put(2);   // start queue node.\n    // wait for the edges to reverse\n    BACKOFF_WAIT(fnode0.my_predecessors.empty(), \"Timed out waiting\");\n    ASSERT(!fnode0.my_predecessors.empty(), \"function_node edge not reversed\");\n    g.my_root_task->cancel_group_execution();\n    // release the function_node\n    serial_fn_state0 = 2;\n    g.wait_for_all();\n    ASSERT(!fnode0.my_predecessors.empty() && qnode0.my_successors.empty(), \"function_node edge not reversed\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(fnode0.my_predecessors.empty() && qnode0.my_successors.empty(), \"function_node edge not removed\");\n    ASSERT(fnode0.my_successors.empty(), \"successor to fnode not removed\");\n    REMARK(\" done\\n\");\n}\n\ntemplate<typename TT>\nclass tag_func {\n    TT my_mult;\npublic:\n    tag_func(TT multiplier) : my_mult(multiplier) { }\n    void operator=( const tag_func& other){my_mult = other.my_mult;}\n    // operator() will return [0 .. Count)\n    tbb::flow::tag_value operator()( TT v) {\n        tbb::flow::tag_value t = tbb::flow::tag_value(v / my_mult);\n        return t;\n    }\n};\n\ntemplate<typename JNODE_TYPE>\nvoid\nTestSimpleSuccessorArc(const char *name) {\n    tbb::flow::graph g;\n    {\n        REMARK(\"Join<%s> successor test \", name);\n        tbb::flow::join_node<tbb::flow::tuple<int>, JNODE_TYPE> qj(g);\n        tbb::flow::broadcast_node<tbb::flow::tuple<int> > bnode(g);\n        tbb::flow::make_edge(qj, bnode);\n        ASSERT(!qj.my_successors.empty(),\"successor missing after linking\");\n        g.reset();\n        ASSERT(!qj.my_successors.empty(),\"successor missing after reset()\");\n        g.reset(tbb::flow::rf_clear_edges);\n        ASSERT(qj.my_successors.empty(), \"successors not removed after reset(rf_clear_edges)\");\n    }\n}\n\ntemplate<>\nvoid\nTestSimpleSuccessorArc<tbb::flow::tag_matching>(const char *name) {\n    tbb::flow::graph g;\n    {\n        REMARK(\"Join<%s> successor test \", name);\n        typedef tbb::flow::tuple<int,int> my_tuple;\n        tbb::flow::join_node<my_tuple, tbb::flow::tag_matching> qj(g,\n                tag_func<int>(1),\n                tag_func<int>(1)\n                );\n        tbb::flow::broadcast_node<my_tuple > bnode(g);\n        tbb::flow::make_edge(qj, bnode);\n        ASSERT(!qj.my_successors.empty(),\"successor missing after linking\");\n        g.reset();\n        ASSERT(!qj.my_successors.empty(),\"successor missing after reset()\");\n        g.reset(tbb::flow::rf_clear_edges);\n        ASSERT(qj.my_successors.empty(), \"successors not removed after reset(rf_clear_edges)\");\n    }\n}\n\nvoid\nTestJoinNode() {\n    tbb::flow::graph g;\n\n    TestSimpleSuccessorArc<tbb::flow::queueing>(\"queueing\");\n    TestSimpleSuccessorArc<tbb::flow::reserving>(\"reserving\");\n    TestSimpleSuccessorArc<tbb::flow::tag_matching>(\"tag_matching\");\n\n    // queueing and tagging join nodes have input queues, so the input ports do not reverse.\n    REMARK(\" reserving preds\");\n    {\n        tbb::flow::join_node<tbb::flow::tuple<int,int>, tbb::flow::reserving> rj(g);\n        tbb::flow::queue_node<int> q0(g);\n        tbb::flow::queue_node<int> q1(g);\n        tbb::flow::make_edge(q0,tbb::flow::input_port<0>(rj));\n        tbb::flow::make_edge(q1,tbb::flow::input_port<1>(rj));\n        q0.try_put(1);\n        g.wait_for_all();  // quiesce\n        ASSERT(!(tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"reversed port missing predecessor\");\n        ASSERT((tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"non-reversed port has pred\");\n        g.reset();\n        ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"reversed port has pred after reset()\");\n        ASSERT((tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"non-reversed port has pred after reset()\");\n        q1.try_put(2);\n        g.wait_for_all();  // quiesce\n        ASSERT(!(tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"reversed port missing predecessor\");\n        ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"non-reversed port has pred\");\n        g.reset();\n        ASSERT((tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"reversed port has pred after reset()\");\n        ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"non-reversed port has pred after reset()\");\n        // should reset predecessors just as regular reset.\n        q1.try_put(3);\n        g.wait_for_all();  // quiesce\n        ASSERT(!(tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"reversed port missing predecessor\");\n        ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"non-reversed port has pred\");\n        g.reset(tbb::flow::rf_clear_edges);\n        ASSERT((tbb::flow::input_port<1>(rj).my_predecessors.empty()),\"reversed port has pred after reset()\");\n        ASSERT((tbb::flow::input_port<0>(rj).my_predecessors.empty()),\"non-reversed port has pred after reset()\");\n        ASSERT(q0.my_successors.empty(), \"edge not removed by reset(rf_clear_edges)\");\n        ASSERT(q1.my_successors.empty(), \"edge not removed by reset(rf_clear_edges)\");\n    }\n    REMARK(\" done\\n\");\n}\n\nvoid\nTestLimiterNode() {\n    int out_int;\n    tbb::flow::graph g;\n    tbb::flow::limiter_node<int> ln(g,1);\n    REMARK(\"Testing limiter_node: preds and succs\");\n    ASSERT(ln.decrement.my_predecessor_count == 0, \"error in pred count\");\n    ASSERT(ln.decrement.my_initial_predecessor_count == 0, \"error in initial pred count\");\n    ASSERT(ln.decrement.my_current_count == 0, \"error in current count\");\n    ASSERT(ln.init_decrement_predecessors == 0, \"error in decrement predecessors\");\n    ASSERT(ln.my_threshold == 1, \"error in my_threshold\");\n    tbb::flow::queue_node<int> inq(g);\n    tbb::flow::queue_node<int> outq(g);\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> bn(g);\n\n    tbb::flow::make_edge(inq,ln);\n    tbb::flow::make_edge(ln,outq);\n    tbb::flow::make_edge(bn,ln.decrement);\n\n    g.wait_for_all();\n    ASSERT(!(ln.my_successors.empty()),\"successors empty after make_edge\");\n    ASSERT(ln.my_predecessors.empty(), \"input edge reversed\");\n    inq.try_put(1);\n    g.wait_for_all();\n    ASSERT(outq.try_get(out_int) && out_int == 1, \"limiter_node didn't pass first value\");\n    ASSERT(ln.my_predecessors.empty(), \"input edge reversed\");\n    inq.try_put(2);\n    g.wait_for_all();\n    ASSERT(!outq.try_get(out_int), \"limiter_node incorrectly passed second input\");\n    ASSERT(!ln.my_predecessors.empty(), \"input edge to limiter_node not reversed\");\n    bn.try_put(tbb::flow::continue_msg());\n    g.wait_for_all();\n    ASSERT(outq.try_get(out_int) && out_int == 2, \"limiter_node didn't pass second value\");\n    g.wait_for_all();\n    ASSERT(!ln.my_predecessors.empty(), \"input edge was reversed(after try_get())\");\n    g.reset();\n    ASSERT(ln.my_predecessors.empty(), \"input edge not reset\");\n    inq.try_put(3);\n    g.wait_for_all();\n    ASSERT(outq.try_get(out_int) && out_int == 3, \"limiter_node didn't pass third value\");\n\n    REMARK(\" rf_clear_edges\");\n    // currently the limiter_node will not pass another message\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(ln.decrement.my_predecessor_count == 0, \"error in pred count\");\n    ASSERT(ln.decrement.my_initial_predecessor_count == 0, \"error in initial pred count\");\n    ASSERT(ln.decrement.my_current_count == 0, \"error in current count\");\n    ASSERT(ln.init_decrement_predecessors == 0, \"error in decrement predecessors\");\n    ASSERT(ln.my_threshold == 1, \"error in my_threshold\");\n    ASSERT(ln.my_predecessors.empty(), \"preds not reset(rf_clear_edges)\");\n    ASSERT(ln.my_successors.empty(), \"preds not reset(rf_clear_edges)\");\n    ASSERT(inq.my_successors.empty(), \"Arc not removed on reset(rf_clear_edges)\");\n    ASSERT(inq.my_successors.empty(), \"Arc not removed on reset(rf_clear_edges)\");\n    ASSERT(bn.my_successors.empty(), \"control edge not removed on reset(rf_clear_edges)\");\n    tbb::flow::make_edge(inq,ln);\n    tbb::flow::make_edge(ln,outq);\n    inq.try_put(4);\n    inq.try_put(5);\n    g.wait_for_all();\n    ASSERT(outq.try_get(out_int),\"missing output after reset(rf_clear_edges)\");\n    ASSERT(out_int == 4, \"input incorrect (4)\");\n    bn.try_put(tbb::flow::continue_msg());\n    g.wait_for_all();\n    ASSERT(!outq.try_get(out_int),\"second output incorrectly passed (rf_clear_edges)\");\n    REMARK(\" done\\n\");\n}\n\ntemplate<typename MF_TYPE>\nstruct mf_body {\n    tbb::atomic<int> *_flag;\n    mf_body( tbb::atomic<int> &myatomic) : _flag(&myatomic) { }\n    void operator()( const int& in, typename MF_TYPE::output_ports_type &outports) {\n        if(*_flag == 0) {\n            *_flag = 1;\n            BACKOFF_WAIT(*_flag == 1, \"multifunction_node not released\");\n        }\n\n        if(in & 0x1) tbb::flow::get<1>(outports).try_put(in);\n        else         tbb::flow::get<0>(outports).try_put(in);\n    }\n};\n\ntemplate<typename P, typename T>\nstruct test_reversal;\ntemplate<typename T>\nstruct test_reversal<tbb::flow::queueing, T> {\n    test_reversal() { REMARK(\"<queueing>\"); }\n    // queueing node will not reverse.\n    bool operator()( T &node) { return node.my_predecessors.empty(); }\n};\n\ntemplate<typename T>\nstruct test_reversal<tbb::flow::rejecting, T> {\n    test_reversal() { REMARK(\"<rejecting>\"); }\n    bool operator()( T &node) { return !node.my_predecessors.empty(); }\n};\n\ntemplate<typename P>\nvoid\nTestMultifunctionNode() {\n    typedef tbb::flow::multifunction_node<int, tbb::flow::tuple<int, int>, P> multinode_type;\n    REMARK(\"Testing multifunction_node\");\n    test_reversal<P,multinode_type> my_test;\n    REMARK(\":\");\n    tbb::flow::graph g;\n    multinode_type mf(g, tbb::flow::serial, mf_body<multinode_type>(serial_fn_state0));\n    tbb::flow::queue_node<int> qin(g);\n    tbb::flow::queue_node<int> qodd_out(g);\n    tbb::flow::queue_node<int> qeven_out(g);\n    tbb::flow::make_edge(qin,mf);\n    tbb::flow::make_edge(tbb::flow::output_port<0>(mf), qeven_out);\n    tbb::flow::make_edge(tbb::flow::output_port<1>(mf), qodd_out);\n    g.wait_for_all();\n    for( int ii = 0; ii < 2 ; ++ii) {\n        serial_fn_state0 = 0;\n        if(ii == 0) REMARK(\" reset preds\"); else REMARK(\" 2nd\");\n        qin.try_put(0);\n        // wait for node to be active\n        BACKOFF_WAIT(serial_fn_state0 == 0, \"timed out waiting for first put\");\n        qin.try_put(1);\n        BACKOFF_WAIT((!my_test(mf)), \"Timed out waiting\");\n        ASSERT(my_test(mf), \"fail second put test\");\n        g.my_root_task->cancel_group_execution();\n        // release node\n        serial_fn_state0 = 2;\n        g.wait_for_all();\n        ASSERT(my_test(mf), \"fail cancel group test\");\n        if( ii == 1) {\n            REMARK(\" rf_clear_edges\");\n            g.reset(tbb::flow::rf_clear_edges);\n            ASSERT(tbb::flow::output_port<0>(mf).my_successors.empty(), \"output_port<0> not reset (rf_clear_edges)\");\n            ASSERT(tbb::flow::output_port<1>(mf).my_successors.empty(), \"output_port<1> not reset (rf_clear_edges)\");\n        }\n        else\n        {\n            g.reset();\n        }\n        ASSERT(mf.my_predecessors.empty(), \"edge didn't reset\");\n        ASSERT((ii == 0 && !qin.my_successors.empty()) || (ii == 1 && qin.my_successors.empty()), \"edge didn't reset\");\n    }\n    REMARK(\" done\\n\");\n}\n\n// indexer_node is like a broadcast_node, in that none of its inputs reverse, and it\n// never allows a successor to reverse its edge, so we only need test the successors.\nvoid\nTestIndexerNode() {\n    tbb::flow::graph g;\n    typedef tbb::flow::indexer_node< int, int > indexernode_type;\n    indexernode_type inode(g);\n    REMARK(\"Testing indexer_node:\");\n    tbb::flow::queue_node<indexernode_type::output_type> qout(g);\n    tbb::flow::make_edge(inode,qout);\n    g.wait_for_all();\n    ASSERT(!inode.my_successors.empty(), \"successor of indexer_node missing\");\n    g.reset();\n    ASSERT(!inode.my_successors.empty(), \"successor of indexer_node missing after reset\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(inode.my_successors.empty(), \"successor of indexer_node not removed by reset(rf_clear_edges)\");\n    REMARK(\" done\\n\");\n}\n\ntemplate<typename Node>\nvoid\nTestScalarNode(const char *name) {\n    tbb::flow::graph g;\n    Node on(g);\n    tbb::flow::queue_node<int> qout(g);\n    REMARK(\"Testing %s:\", name);\n    tbb::flow::make_edge(on,qout);\n    g.wait_for_all();\n    ASSERT(!on.my_successors.empty(), \"edge not added\");\n    g.reset();\n    ASSERT(!on.my_successors.empty(), \"edge improperly removed\");\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(on.my_successors.empty(), \"edge not removed by reset(rf_clear_edges)\");\n    REMARK(\" done\\n\");\n}\n\nstruct seq_body {\n    size_t operator()(const int &in) {\n        return size_t(in / 3);\n    }\n};\n\n// sequencer_node behaves like a queueing node, but requires a different constructor.\nvoid\nTestSequencerNode() {\n    tbb::flow::graph g;\n    tbb::flow::sequencer_node<int> bnode(g, seq_body());\n    REMARK(\"Testing sequencer_node:\");\n    tbb::flow::function_node<int> fnode(g, tbb::flow::serial, serial_fn_body<int>(serial_fn_state0));\n    REMARK(\"Testing sequencer_node:\");\n    serial_fn_state0 = 0;  // reset to waiting state.\n    REMARK(\" make_edge\");\n    tbb::flow::make_edge(bnode, fnode);\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after make_edge\");\n    REMARK(\" try_put\");\n    bnode.try_put(0);  // will forward to the fnode\n    BACKOFF_WAIT( serial_fn_state0 == 0, \"timeout waiting for function_node\");  // wait for the function_node to fire up\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after forwarding message\");\n    serial_fn_state0 = 0;\n    g.wait_for_all();\n    REMARK(\" remove_edge\");\n    tbb::flow::remove_edge(bnode, fnode);\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after remove_edge\");\n    tbb::flow::join_node<tbb::flow::tuple<int,int>,tbb::flow::reserving> jnode(g);\n    tbb::flow::make_edge(bnode, tbb::flow::input_port<0>(jnode));  // will spawn a task\n    g.wait_for_all();\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after attaching to join\");\n    REMARK(\" reverse\");\n    bnode.try_put(3);  // the edge should reverse\n    g.wait_for_all();\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after reserving\");\n    REMARK(\" reset()\");\n    g.wait_for_all();\n    g.reset();  // should be in forward direction again\n    ASSERT(!bnode.my_successors.empty(), \"buffering node has no successor after reset()\");\n    REMARK(\" remove_edge\");\n    g.reset(tbb::flow::rf_clear_edges);  // should be in forward direction again\n    ASSERT(bnode.my_successors.empty(), \"buffering node has a successor after reset(rf_clear_edges)\");\n    ASSERT(fnode.my_predecessors.empty(), \"buffering node reversed after reset(rf_clear_edges)\");\n    REMARK(\"  done\\n\");\n    g.wait_for_all();\n}\n\nstruct snode_body {\n    int max_cnt;\n    int my_cnt;\n    snode_body( const int &in) : max_cnt(in) { my_cnt = 0; }\n    bool operator()(int &out) {\n        if(max_cnt <= my_cnt++) return false;\n        out = my_cnt;\n        return true;\n    }\n};\n\nvoid\nTestSourceNode() {\n    tbb::flow::graph g;\n    tbb::flow::source_node<int> sn(g, snode_body(4), false);\n    REMARK(\"Testing source_node:\");\n    tbb::flow::queue_node<int> qin(g);\n    tbb::flow::join_node<tbb::flow::tuple<int,int>, tbb::flow::reserving> jn(g);\n    tbb::flow::queue_node<tbb::flow::tuple<int,int> > qout(g);\n\n    REMARK(\" make_edges\");\n    tbb::flow::make_edge(sn, tbb::flow::input_port<0>(jn));\n    tbb::flow::make_edge(qin, tbb::flow::input_port<1>(jn));\n    tbb::flow::make_edge(jn,qout);\n    ASSERT(!sn.my_successors.empty(), \"source node has no successor after make_edge\");\n    g.wait_for_all();\n    g.reset();\n    ASSERT(!sn.my_successors.empty(), \"source node has no successor after reset\");\n    g.wait_for_all();\n    g.reset(tbb::flow::rf_clear_edges);\n    ASSERT(sn.my_successors.empty(), \"source node has successor after reset(rf_clear_edges)\");\n    tbb::flow::make_edge(sn, tbb::flow::input_port<0>(jn));\n    tbb::flow::make_edge(qin, tbb::flow::input_port<1>(jn));\n    tbb::flow::make_edge(jn,qout);\n    g.wait_for_all();\n    REMARK(\" activate\");\n    sn.activate();  // will forward to the fnode\n    REMARK(\" wait1\");\n    BACKOFF_WAIT( !sn.my_successors.empty(), \"Timed out waiting for edge to reverse\");\n    ASSERT(sn.my_successors.empty(), \"source node has no successor after forwarding message\");\n\n    g.wait_for_all();\n    g.reset();\n    ASSERT(!sn.my_successors.empty(), \"source_node has no successors after reset\");\n    ASSERT(tbb::flow::input_port<0>(jn).my_predecessors.empty(), \"successor if source_node has pred after reset.\");\n    REMARK(\" done\\n\");\n}\n\nint TestMain() {\n\n    if(MinThread < 3) MinThread = 3;\n    tbb::task_scheduler_init init(MinThread);  // tests presume at least three threads\n\n    TestBufferingNode< tbb::flow::buffer_node<int> >(\"buffer_node\");\n    TestBufferingNode< tbb::flow::priority_queue_node<int> >(\"priority_queue_node\");\n    TestBufferingNode< tbb::flow::queue_node<int> >(\"queue_node\");\n    TestSequencerNode();\n\n    TestMultifunctionNode<tbb::flow::rejecting>();\n    TestMultifunctionNode<tbb::flow::queueing>();\n    TestSourceNode();\n    TestContinueNode();\n    TestFunctionNode();\n\n    TestJoinNode();\n\n    TestLimiterNode();\n    TestIndexerNode();\n    TestSplitNode();\n    TestScalarNode<tbb::flow::broadcast_node<int> >(\"broadcast_node\");\n    TestScalarNode<tbb::flow::overwrite_node<int> >(\"overwrite_node\");\n    TestScalarNode<tbb::flow::write_once_node<int> >(\"write_once_node\");\n\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_fp.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/** This test checks the automatic propagation of master thread FPU settings\n    into the worker threads. **/\n\n#include \"harness_fp.h\"\n#include \"harness.h\"\n#define private public\n#include \"tbb/task.h\"\n#undef private\n#include \"tbb/parallel_for.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst int N = 500000;\n\n#if ( __TBB_x86_32 || __TBB_x86_64 ) && __TBB_CPU_CTL_ENV_PRESENT && !defined(__TBB_WIN32_USE_CL_BUILTINS)\n#include \"harness_barrier.h\"\n\nclass CheckNoSseStatusPropagationBody : public NoAssign {\n    Harness::SpinBarrier &barrier;\npublic:\n    CheckNoSseStatusPropagationBody( Harness::SpinBarrier &_barrier ) : barrier(_barrier) {}\n    void operator()( const tbb::blocked_range<int>& ) const {\n        barrier.wait();\n        tbb::internal::cpu_ctl_env ctl;\n        ctl.get_env();\n        ASSERT( (ctl.mxcsr & SSE_STATUS_MASK) == 0, \"FPU control status bits have been propagated.\" );\n    }\n};\n\nvoid CheckNoSseStatusPropagation() {\n    tbb::internal::cpu_ctl_env ctl;\n    ctl.get_env();\n    ctl.mxcsr |= SSE_STATUS_MASK;\n    ctl.set_env();\n    const int num_threads = tbb::task_scheduler_init::default_num_threads();\n    Harness::SpinBarrier barrier(num_threads);\n    tbb::task_scheduler_init init(num_threads);\n    tbb::parallel_for( tbb::blocked_range<int>(0, num_threads), CheckNoSseStatusPropagationBody(barrier) );\n    ctl.mxcsr &= ~SSE_STATUS_MASK;\n    ctl.set_env();\n}\n#else /* Other archs */\nvoid CheckNoSseStatusPropagation() {}\n#endif /* Other archs */\n\nclass RoundingModeCheckBody {\n    int m_mode;\n    int m_sseMode;\npublic:\n    void operator() ( int /*iter*/ ) const {\n        ASSERT( GetRoundingMode() == m_mode, \"FPU control state has not been propagated.\" );\n        ASSERT( GetSseMode() == m_sseMode, \"SSE control state has not been propagated.\" );\n    }\n\n    RoundingModeCheckBody ( int mode, int sseMode ) : m_mode(mode), m_sseMode(sseMode) {}\n};\n\nvoid TestArenaFpuEnvPropagation( int id ) {\n    // TBB scheduler instance in a master thread captures the FPU control state\n    // at the moment of its initialization and passes it to the workers toiling\n    // on its behalf.\n    for( int k = 0; k < NumSseModes; ++k ) {\n        int sse_mode = SseModes[(k + id) % NumSseModes];\n        SetSseMode( sse_mode );\n        for( int i = 0; i < NumRoundingModes; ++i ) {\n            int mode = RoundingModes[(i + id) % NumRoundingModes];\n            SetRoundingMode( mode );\n            // New mode must be set before TBB scheduler is initialized\n            tbb::task_scheduler_init init;\n            tbb::parallel_for( 0, N, 1, RoundingModeCheckBody(mode, sse_mode) );\n            ASSERT( GetRoundingMode() == mode, NULL );\n        }\n    }\n}\n\n#if __TBB_FP_CONTEXT\nvoid TestArenaFpuEnvPersistence( int id ) {\n    // Since the following loop uses auto-initialization, the scheduler instance\n    // implicitly created by the first parallel_for invocation will persist\n    // until the thread ends, and thus workers will use the mode set by the\n    // first iteration.\n    int captured_mode = RoundingModes[id % NumRoundingModes];\n    int captured_sse_mode = SseModes[id % NumSseModes];\n    for( int k = 0; k < NumSseModes; ++k ) {\n        int sse_mode = SseModes[(k + id) % NumSseModes];\n        SetSseMode( sse_mode );\n        for( int i = 0; i < NumRoundingModes; ++i ) {\n            int mode = RoundingModes[(i + id) % NumRoundingModes];\n            SetRoundingMode( mode );\n            tbb::parallel_for( 0, N, 1, RoundingModeCheckBody(captured_mode, captured_sse_mode) );\n            ASSERT( GetRoundingMode() == mode, NULL );\n        }\n    }\n}\n#endif\n\nclass LauncherBody {\npublic:\n    void operator() ( int id ) const {\n        TestArenaFpuEnvPropagation( id );\n#if __TBB_FP_CONTEXT\n        TestArenaFpuEnvPersistence( id );\n#endif\n    }\n};\n\nvoid TestFpuEnvPropagation () {\n    const int p = tbb::task_scheduler_init::default_num_threads();\n    // The test should be run in an oversubscription mode. So create 4*p threads but\n    // limit the oversubscription for big machines (p>32) with 4*32+(p-32) threads.\n    const int num_threads = p + (NumRoundingModes-1)*min(p,32);\n    NativeParallelFor ( num_threads, LauncherBody() );\n}\n\nvoid TestCpuCtlEnvApi () {\n    for( int k = 0; k < NumSseModes; ++k ) {\n        SetSseMode( SseModes[k] );\n        for( int i = 0; i < NumRoundingModes; ++i ) {\n            SetRoundingMode( RoundingModes[i] );\n            ASSERT( GetRoundingMode() == RoundingModes[i], NULL );\n            ASSERT( GetSseMode() == SseModes[k], NULL );\n        }\n    }\n}\n\n#if __TBB_FP_CONTEXT\nconst int numModes = NumRoundingModes*NumSseModes;\nconst int numArenas = 4;\ntbb::task_group_context *contexts[numModes];\n// +1 for a default context\nint roundingModes[numModes+numArenas];\nint sseModes[numModes+numArenas];\n\nclass TestContextFpuEnvBody {\n    int arenaNum;\n    int mode;\n    int depth;\npublic:\n    TestContextFpuEnvBody( int _arenaNum, int _mode, int _depth = 0 ) : arenaNum(_arenaNum), mode(_mode), depth(_depth) {}\n    void operator()( const tbb::blocked_range<int> &r ) const;\n};\n\ninline void SetMode( int mode ) {\n    SetRoundingMode( roundingModes[mode] );\n    SetSseMode( sseModes[mode] );\n}\n\ninline void AssertMode( int mode ) {\n    ASSERT( GetRoundingMode() == roundingModes[mode], \"FPU control state has not been set correctly.\" );\n    ASSERT( GetSseMode() == sseModes[mode], \"SSE control state has not been set correctly.\" );\n}\n\ninline int SetNextMode( int mode, int step ) {\n    const int nextMode = (mode+step)%numModes;\n    SetMode( nextMode );\n    return nextMode;\n}\n\nclass TestContextFpuEnvTask : public tbb::task {\n    int arenaNum;\n    int mode;\n    int depth;\n#if __TBB_CPU_CTL_ENV_PRESENT\n    static const int MAX_DEPTH = 3;\n#else\n    static const int MAX_DEPTH = 4;\n#endif\npublic:\n    TestContextFpuEnvTask( int _arenaNum, int _mode, int _depth = 0 ) : arenaNum(_arenaNum), mode(_mode), depth(_depth) {}\n    tbb::task* execute() __TBB_override {\n        AssertMode( mode );\n        if ( depth < MAX_DEPTH ) {\n            // Test default context.\n            const int newMode1 = SetNextMode( mode, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, mode, depth+1 ) );\n            AssertMode( newMode1 );\n\n            // Test user default context.\n            const int newMode2 = SetNextMode( newMode1, depth+1 );\n            tbb::task_group_context ctx1;\n            const int newMode3 = SetNextMode( newMode2, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, mode, depth+1 ), ctx1 );\n            AssertMode( newMode3 );\n\n            // Test user context which captured FPU control settings.\n            const int newMode4 = SetNextMode( newMode3, depth+1 );\n            // Capture newMode4\n            ctx1.capture_fp_settings();\n            const int newMode5 = SetNextMode( newMode4, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, newMode4, depth+1 ), ctx1 );\n            AssertMode( newMode5 );\n\n            // And again test user context which captured FPU control settings to check multiple captures.\n            const int newMode6 = SetNextMode( newMode5, depth+1 );\n            // Capture newMode6\n            ctx1.capture_fp_settings();\n            const int newMode7 = SetNextMode( newMode6, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, newMode6, depth+1 ), ctx1 );\n            AssertMode( newMode7 );\n\n            // Test an isolated context. The isolated context should use default FPU control settings.\n            const int newMode8 = SetNextMode( newMode7, depth+1 );\n            tbb::task_group_context ctx2( tbb::task_group_context::isolated );\n            const int newMode9 = SetNextMode( newMode8, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, numModes+arenaNum, depth+1 ), ctx2 );\n            AssertMode( newMode9 );\n\n            // The binding should not owerrite captured FPU control settings.\n            const int newMode10 = SetNextMode( newMode9, depth+1 );\n            tbb::task_group_context ctx3;\n            ctx3.capture_fp_settings();\n            const int newMode11 = SetNextMode( newMode10, depth+1 );\n            tbb::parallel_for( tbb::blocked_range<int>(0, numModes+1), TestContextFpuEnvBody( arenaNum, newMode10, depth+1 ), ctx3 );\n            AssertMode( newMode11 );\n\n            // Restore initial mode since user code in tbb::task::execute should not change FPU settings.\n            SetMode( mode );\n        }\n\n        return NULL;\n    }\n};\n\nvoid TestContextFpuEnvBody::operator()( const tbb::blocked_range<int> &r ) const {\n    AssertMode( mode );\n\n    const int newMode = SetNextMode( mode, depth+2 );\n\n    int end = r.end();\n    if ( end-1 == numModes ) {\n        // For a default context our mode should be inherited.\n        tbb::task::spawn_root_and_wait(\n            *new( tbb::task::allocate_root() ) TestContextFpuEnvTask( arenaNum, mode, depth ) );\n        AssertMode( newMode );\n        end--;\n    }\n    for ( int i=r.begin(); i<end; ++i ) {\n        tbb::task::spawn_root_and_wait(\n            *new( tbb::task::allocate_root(*contexts[i]) ) TestContextFpuEnvTask( arenaNum, i, depth ) );\n        AssertMode( newMode );\n    }\n\n    // Restore initial mode since user code in tbb::task::execute should not change FPU settings.\n    SetMode( mode );\n}\n\nclass TestContextFpuEnvNativeLoopBody {\npublic:\n    void operator() ( int arenaNum ) const {\n        SetMode(numModes+arenaNum);\n        tbb::task_scheduler_init init;\n        tbb::task::spawn_root_and_wait( *new (tbb::task::allocate_root() ) TestContextFpuEnvTask( arenaNum, numModes+arenaNum ) );\n    }\n};\n\n#if TBB_USE_EXCEPTIONS\nconst int NUM_ITERS = 1000;\nclass TestContextFpuEnvEhBody {\n    int mode;\n    int eh_iter;\n    int depth;\npublic:\n    TestContextFpuEnvEhBody( int _mode, int _eh_iter, int _depth = 0 ) : mode(_mode), eh_iter(_eh_iter), depth(_depth) {}\n    void operator()( const tbb::blocked_range<int> &r ) const {\n        AssertMode( mode );\n        if ( depth < 1 ) {\n            const int newMode1 = SetNextMode( mode, 1 );\n            tbb::task_group_context ctx;\n            ctx.capture_fp_settings();\n            const int newMode2 = SetNextMode( newMode1, 1 );\n            try {\n                tbb::parallel_for( tbb::blocked_range<int>(0, NUM_ITERS), TestContextFpuEnvEhBody(newMode1,rand()%NUM_ITERS,1), tbb::simple_partitioner(), ctx );\n            } catch (...) {\n                AssertMode( newMode2 );\n                if ( r.begin() == eh_iter ) throw;\n            }\n            AssertMode( newMode2 );\n            SetMode( mode );\n        } else if ( r.begin() == eh_iter ) throw 0;\n    }\n};\n\nclass TestContextFpuEnvEhNativeLoopBody {\npublic:\n    void operator() ( int arenaNum ) const {\n        SetMode( arenaNum%numModes );\n        try {\n            tbb::parallel_for( tbb::blocked_range<int>(0, NUM_ITERS), TestContextFpuEnvEhBody((arenaNum+1)%numModes,rand()%NUM_ITERS),\n                tbb::simple_partitioner(), *contexts[(arenaNum+1)%numModes] );\n            ASSERT( false, \"parallel_for has not thrown an exception.\" );\n        } catch (...) {\n            AssertMode( arenaNum%numModes );\n        }\n    }\n};\n#endif /* TBB_USE_EXCEPTIONS */\n\nvoid TestContextFpuEnv() {\n    // Prepare contexts' fp modes.\n    for ( int i = 0, modeNum = 0; i < NumRoundingModes; ++i ) {\n        const int roundingMode = RoundingModes[i];\n        SetRoundingMode( roundingMode );\n        for( int j = 0; j < NumSseModes; ++j, ++modeNum ) {\n            const int sseMode = SseModes[j];\n            SetSseMode( sseMode );\n\n            contexts[modeNum] = new tbb::task_group_context( tbb::task_group_context::isolated,\n                tbb::task_group_context::default_traits | tbb::task_group_context::fp_settings );\n            roundingModes[modeNum] = roundingMode;\n            sseModes[modeNum] = sseMode;\n        }\n    }\n    // Prepare arenas' fp modes.\n    for ( int arenaNum = 0; arenaNum < numArenas; ++arenaNum ) {\n        roundingModes[numModes+arenaNum] = roundingModes[arenaNum%numModes];\n        sseModes[numModes+arenaNum] = sseModes[arenaNum%numModes];\n    }\n    NativeParallelFor( numArenas, TestContextFpuEnvNativeLoopBody() );\n#if TBB_USE_EXCEPTIONS\n    NativeParallelFor( numArenas, TestContextFpuEnvEhNativeLoopBody() );\n#endif\n    for ( int modeNum = 0; modeNum < numModes; ++modeNum )\n        delete contexts[modeNum];\n}\n\ntbb::task_group_context glbIsolatedCtx( tbb::task_group_context::isolated );\nint glbIsolatedCtxMode = -1;\n\nstruct TestGlobalIsolatedContextTask : public tbb::task {\n    tbb::task* execute() __TBB_override {\n        AssertFPMode( glbIsolatedCtxMode );\n        return NULL;\n    }\n};\n\n#include \"tbb/mutex.h\"\n\nstruct TestGlobalIsolatedContextNativeLoopBody {\n    void operator()( int threadId ) const {\n        FPModeContext fpGuard( threadId );\n        static tbb::mutex rootAllocMutex;\n        rootAllocMutex.lock();\n        if ( glbIsolatedCtxMode == -1 )\n            glbIsolatedCtxMode = threadId;\n        tbb::task &root = *new (tbb::task::allocate_root( glbIsolatedCtx )) TestGlobalIsolatedContextTask();\n        rootAllocMutex.unlock();\n        tbb::task::spawn_root_and_wait( root );\n    }\n};\n\nvoid TestGlobalIsolatedContext() {\n    ASSERT( numArenas > 1, NULL );\n    NativeParallelFor( numArenas, TestGlobalIsolatedContextNativeLoopBody() );\n}\n#endif /* __TBB_FP_CONTEXT */\n\nint TestMain () {\n    TestCpuCtlEnvApi();\n    TestFpuEnvPropagation();\n    CheckNoSseStatusPropagation();\n#if __TBB_FP_CONTEXT\n    TestContextFpuEnv();\n    TestGlobalIsolatedContext();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_function_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_graph.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/spin_rw_mutex.h\"\n\n#define N 100\n#define MAX_NODES 4\n\n//! Performs test on function nodes with limited concurrency and buffering\n/** Theses tests check:\n    1) that the number of executing copies never exceed the concurrency limit\n    2) that the node never rejects\n    3) that no items are lost\n    and 4) all of this happens even if there are multiple predecessors and successors\n*/\n\ntemplate< typename InputType >\nstruct parallel_put_until_limit : private NoAssign {\n\n    harness_counting_sender<InputType> *my_senders;\n\n    parallel_put_until_limit( harness_counting_sender<InputType> *senders ) : my_senders(senders) {}\n\n    void operator()( int i ) const  {\n        if ( my_senders ) {\n            my_senders[i].try_put_until_limit();\n        }\n    }\n\n};\n\ntemplate<typename IO>\nstruct pass_through {\n    IO operator()(const IO& i) { return i; }\n};\n\ntemplate< typename InputType, typename OutputType, typename Body >\nvoid buffered_levels( size_t concurrency, Body body ) {\n\n   // Do for lc = 1 to concurrency level\n   for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n   tbb::flow::graph g;\n\n   // Set the execute_counter back to zero in the harness\n   harness_graph_executor<InputType, OutputType>::execute_count = 0;\n   // Set the number of current executors to zero.\n   harness_graph_executor<InputType, OutputType>::current_executors = 0;\n   // Set the max allowed executors to lc.  There is a check in the functor to make sure this is never exceeded.\n   harness_graph_executor<InputType, OutputType>::max_executors = lc;\n\n   // Create the function_node with the appropriate concurrency level, and use default buffering\n   tbb::flow::function_node< InputType, OutputType > exe_node( g, lc, body );\n   tbb::flow::function_node<InputType, InputType> pass_thru( g, tbb::flow::unlimited, pass_through<InputType>());\n\n   // Create a vector of identical exe_nodes and pass_thrus\n   std::vector< tbb::flow::function_node< InputType, OutputType > > exe_vec(2, exe_node);\n   std::vector< tbb::flow::function_node< InputType, InputType > > pass_thru_vec(2, pass_thru);\n   // Attach each pass_thru to its corresponding exe_node\n   for (size_t node_idx=0; node_idx<exe_vec.size(); ++node_idx) {\n       tbb::flow::make_edge(pass_thru_vec[node_idx], exe_vec[node_idx]);\n   }\n\n   // TODO: why the test is executed serially for the node pairs, not concurrently?\n   for (size_t node_idx=0; node_idx<exe_vec.size(); ++node_idx) {\n   // For num_receivers = 1 to MAX_NODES\n   for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n        // Create num_receivers counting receivers and connect the exe_vec[node_idx] to them.\n        std::vector< harness_mapped_receiver<OutputType>* > receivers(num_receivers);\n        for (size_t i = 0; i < num_receivers; i++) {\n            receivers[i] = new harness_mapped_receiver<OutputType>(g);\n        }\n\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            tbb::flow::make_edge( exe_vec[node_idx], *receivers[r] );\n        }\n\n        // Do the test with varying numbers of senders\n        harness_counting_sender<InputType> *senders = NULL;\n        for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n            // Create num_senders senders, set there message limit each to N, and connect them to pass_thru_vec[node_idx]\n            senders = new harness_counting_sender<InputType>[num_senders];\n            for (size_t s = 0; s < num_senders; ++s ) {\n               senders[s].my_limit = N;\n               senders[s].register_successor(pass_thru_vec[node_idx] );\n            }\n\n            // Initialize the receivers so they know how many senders and messages to check for\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                 receivers[r]->initialize_map( N, num_senders );\n            }\n\n            // Do the test\n            NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );\n            g.wait_for_all();\n\n            // confirm that each sender was requested from N times\n            for (size_t s = 0; s < num_senders; ++s ) {\n                size_t n = senders[s].my_received;\n                ASSERT( n == N, NULL );\n                ASSERT( senders[s].my_receiver == &pass_thru_vec[node_idx], NULL );\n            }\n            // validate the receivers\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                receivers[r]->validate();\n            }\n            delete [] senders;\n        }\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            tbb::flow::remove_edge( exe_vec[node_idx], *receivers[r] );\n        }\n        ASSERT( exe_vec[node_idx].try_put( InputType() ) == true, NULL );\n        g.wait_for_all();\n        for (size_t r = 0; r < num_receivers; ++r ) {\n            // since it's detached, nothing should have changed\n            receivers[r]->validate();\n        }\n\n        for (size_t i = 0; i < num_receivers; i++) {\n            delete receivers[i];\n        }\n\n    } // for num_receivers\n    } // for node_idx\n    } // for concurrency level lc\n}\n\nconst size_t Offset = 123;\ntbb::atomic<size_t> global_execute_count;\n\nstruct inc_functor {\n\n    tbb::atomic<size_t> local_execute_count;\n    inc_functor( ) { local_execute_count = 0; }\n    inc_functor( const inc_functor &f ) { local_execute_count = f.local_execute_count; }\n    void operator=( const inc_functor &f ) { local_execute_count = f.local_execute_count; }\n\n    int operator()( int i ) {\n       ++global_execute_count;\n       ++local_execute_count;\n       return i;\n    }\n\n};\n\ntemplate< typename InputType, typename OutputType >\nvoid buffered_levels_with_copy( size_t concurrency ) {\n\n    // Do for lc = 1 to concurrency level\n    for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n        tbb::flow::graph g;\n\n        inc_functor cf;\n        cf.local_execute_count = Offset;\n        global_execute_count = Offset;\n\n        tbb::flow::function_node< InputType, OutputType > exe_node( g, lc, cf );\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n\n           std::vector< harness_mapped_receiver<OutputType>* > receivers(num_receivers);\n           for (size_t i = 0; i < num_receivers; i++) {\n               receivers[i] = new harness_mapped_receiver<OutputType>(g);\n           }\n\n           for (size_t r = 0; r < num_receivers; ++r ) {\n               tbb::flow::make_edge( exe_node, *receivers[r] );\n            }\n\n            harness_counting_sender<InputType> *senders = NULL;\n            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n                senders = new harness_counting_sender<InputType>[num_senders];\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    senders[s].my_limit = N;\n                    tbb::flow::make_edge( senders[s], exe_node );\n                }\n\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    receivers[r]->initialize_map( N, num_senders );\n                }\n\n                NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );\n                g.wait_for_all();\n\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    size_t n = senders[s].my_received;\n                    ASSERT( n == N, NULL );\n                    ASSERT( senders[s].my_receiver == &exe_node, NULL );\n                }\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    receivers[r]->validate();\n                }\n                delete [] senders;\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( exe_node, *receivers[r] );\n            }\n            ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n            g.wait_for_all();\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                receivers[r]->validate();\n            }\n\n            for (size_t i = 0; i < num_receivers; i++) {\n                delete receivers[i];\n            }\n        }\n\n        // validate that the local body matches the global execute_count and both are correct\n        inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );\n        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset;\n        size_t global_count = global_execute_count;\n        size_t inc_count = body_copy.local_execute_count;\n        ASSERT( global_count == expected_count && global_count == inc_count, NULL );\n        g.reset(tbb::flow::rf_reset_bodies);\n        body_copy = tbb::flow::copy_body<inc_functor>( exe_node );\n        inc_count = body_copy.local_execute_count;\n        ASSERT( Offset == inc_count, \"reset(rf_reset_bodies) did not reset functor\" );\n    }\n}\n\ntemplate< typename InputType, typename OutputType >\nvoid run_buffered_levels( int c ) {\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    buffered_levels<InputType,OutputType>( c, []( InputType i ) -> OutputType { return harness_graph_executor<InputType, OutputType>::func(i); } );\n    #endif\n    buffered_levels<InputType,OutputType>( c, &harness_graph_executor<InputType, OutputType>::func );\n    buffered_levels<InputType,OutputType>( c, typename harness_graph_executor<InputType, OutputType>::functor() );\n    buffered_levels_with_copy<InputType,OutputType>( c );\n}\n\n\n//! Performs test on executable nodes with limited concurrency\n/** Theses tests check:\n    1) that the nodes will accepts puts up to the concurrency limit,\n    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor),\n    3) the nodes will receive puts from multiple successors simultaneously,\n    and 4) the nodes will send to multiple predecessors.\n    There is no checking of the contents of the messages for corruption.\n*/\n\ntemplate< typename InputType, typename OutputType, typename Body >\nvoid concurrency_levels( size_t concurrency, Body body ) {\n\n   for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n       tbb::flow::graph g;\n\n       // Set the execute_counter back to zero in the harness\n       harness_graph_executor<InputType, OutputType>::execute_count = 0;\n       // Set the number of current executors to zero.\n       harness_graph_executor<InputType, OutputType>::current_executors = 0;\n       // Set the max allowed executors to lc. There is a check in the functor to make sure this is never exceeded.\n       harness_graph_executor<InputType, OutputType>::max_executors = lc;\n\n       typedef tbb::flow::function_node< InputType, OutputType, tbb::flow::rejecting > fnode_type;\n       fnode_type exe_node( g, lc, body );\n\n       for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n\n            std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            ASSERT(exe_node.successor_count() == 0, NULL);\n            ASSERT(exe_node.predecessor_count() == 0, NULL);\n#endif\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::make_edge( exe_node, receivers[r] );\n            }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            ASSERT(exe_node.successor_count() == num_receivers, NULL);\n            typename fnode_type::successor_list_type my_succs;\n            exe_node.copy_successors(my_succs);\n            ASSERT(my_succs.size() == num_receivers, NULL);\n            typename fnode_type::predecessor_list_type my_preds;\n            exe_node.copy_predecessors(my_preds);\n            ASSERT(my_preds.size() == 0, NULL);\n#endif\n\n            harness_counting_sender<InputType> *senders = NULL;\n\n            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n                senders = new harness_counting_sender<InputType>[num_senders];\n                {\n                    // Exclusively lock m to prevent exe_node from finishing\n                    tbb::spin_rw_mutex::scoped_lock l( harness_graph_executor<InputType, OutputType>::template mutex_holder<tbb::spin_rw_mutex>::mutex );\n\n                    // put to lc level, it will accept and then block at m\n                    for ( size_t c = 0 ; c < lc ; ++c ) {\n                        ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n                    }\n                    // it only accepts to lc level\n                    ASSERT( exe_node.try_put( InputType() ) == false, NULL );\n\n                    for (size_t s = 0; s < num_senders; ++s ) {\n                       // register a sender\n                       senders[s].my_limit = N;\n                       exe_node.register_predecessor( senders[s] );\n                    }\n\n                } // release lock at end of scope, setting the exe node free to continue\n                // wait for graph to settle down\n                g.wait_for_all();\n\n                // confirm that each sender was requested from N times\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    size_t n = senders[s].my_received;\n                    ASSERT( n == N, NULL );\n                    ASSERT( senders[s].my_receiver == &exe_node, NULL );\n                }\n                // confirm that each receivers got N * num_senders + the initial lc puts\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    size_t n = receivers[r].my_count;\n                    ASSERT( n == num_senders*N+lc, NULL );\n                    receivers[r].my_count = 0;\n                }\n                delete [] senders;\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( exe_node, receivers[r] );\n            }\n            ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n            g.wait_for_all();\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                ASSERT( int(receivers[r].my_count) == 0, NULL );\n            }\n        }\n    }\n}\n\n\ntemplate< typename InputType, typename OutputType >\nvoid run_concurrency_levels( int c ) {\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    concurrency_levels<InputType,OutputType>( c, []( InputType i ) -> OutputType { return harness_graph_executor<InputType, OutputType>::template tfunc<tbb::spin_rw_mutex>(i); } );\n    #endif\n    concurrency_levels<InputType,OutputType>( c, &harness_graph_executor<InputType, OutputType>::template tfunc<tbb::spin_rw_mutex> );\n    concurrency_levels<InputType,OutputType>( c, typename harness_graph_executor<InputType, OutputType>::template tfunctor<tbb::spin_rw_mutex>() );\n}\n\n\nstruct empty_no_assign {\n   empty_no_assign() {}\n   empty_no_assign( int ) {}\n   operator int() { return 0; }\n};\n\ntemplate< typename InputType >\nstruct parallel_puts : private NoAssign {\n\n    tbb::flow::receiver< InputType > * const my_exe_node;\n\n    parallel_puts( tbb::flow::receiver< InputType > &exe_node ) : my_exe_node(&exe_node) {}\n\n    void operator()( int ) const  {\n        for ( int i = 0; i < N; ++i ) {\n            // the nodes will accept all puts\n            ASSERT( my_exe_node->try_put( InputType() ) == true, NULL );\n        }\n    }\n\n};\n\n//! Performs test on executable nodes with unlimited concurrency\n/** Theses tests check:\n    1) that the nodes will accept all puts\n    2) the nodes will receive puts from multiple predecessors simultaneously,\n    and 3) the nodes will send to multiple successors.\n    There is no checking of the contents of the messages for corruption.\n*/\n\ntemplate< typename InputType, typename OutputType, typename Body >\nvoid unlimited_concurrency( Body body ) {\n\n    for (int p = 1; p < 2*MaxThread; ++p) {\n        tbb::flow::graph g;\n        tbb::flow::function_node< InputType, OutputType, tbb::flow::rejecting > exe_node( g, tbb::flow::unlimited, body );\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n\n            std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n            harness_graph_executor<InputType, OutputType>::execute_count = 0;\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::make_edge( exe_node, receivers[r] );\n            }\n\n            NativeParallelFor( p, parallel_puts<InputType>(exe_node) );\n            g.wait_for_all();\n\n            // 2) the nodes will receive puts from multiple predecessors simultaneously,\n            size_t ec = harness_graph_executor<InputType, OutputType>::execute_count;\n            ASSERT( (int)ec == p*N, NULL );\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                size_t c = receivers[r].my_count;\n                // 3) the nodes will send to multiple successors.\n                ASSERT( (int)c == p*N, NULL );\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( exe_node, receivers[r] );\n            }\n            }\n        }\n    }\n\ntemplate< typename InputType, typename OutputType >\nvoid run_unlimited_concurrency() {\n    harness_graph_executor<InputType, OutputType>::max_executors = 0;\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    unlimited_concurrency<InputType,OutputType>( []( InputType i ) -> OutputType { return harness_graph_executor<InputType, OutputType>::func(i); } );\n    #endif\n    unlimited_concurrency<InputType,OutputType>( &harness_graph_executor<InputType, OutputType>::func );\n    unlimited_concurrency<InputType,OutputType>( typename harness_graph_executor<InputType, OutputType>::functor() );\n}\n\nstruct continue_msg_to_int {\n    int my_int;\n    continue_msg_to_int(int x) : my_int(x) {}\n    int operator()(tbb::flow::continue_msg) { return my_int; }\n};\n\nvoid test_function_node_with_continue_msg_as_input() {\n    // If this function terminates, then this test is successful\n    tbb::flow::graph g;\n\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> Start(g);\n\n    tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN1( g, tbb::flow::serial, continue_msg_to_int(42));\n    tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN2( g, tbb::flow::serial, continue_msg_to_int(43));\n\n    tbb::flow::make_edge( Start, FN1 );\n    tbb::flow::make_edge( Start, FN2 );\n\n    Start.try_put( tbb::flow::continue_msg() );\n    g.wait_for_all();\n}\n\n//! Tests limited concurrency cases for nodes that accept data messages\nvoid test_concurrency(int num_threads) {\n    tbb::task_scheduler_init init(num_threads);\n    run_concurrency_levels<int,int>(num_threads);\n    run_concurrency_levels<int,tbb::flow::continue_msg>(num_threads);\n    run_buffered_levels<int, int>(num_threads);\n    run_unlimited_concurrency<int,int>();\n    run_unlimited_concurrency<int,empty_no_assign>();\n    run_unlimited_concurrency<empty_no_assign,int>();\n    run_unlimited_concurrency<empty_no_assign,empty_no_assign>();\n    run_unlimited_concurrency<int,tbb::flow::continue_msg>();\n    run_unlimited_concurrency<empty_no_assign,tbb::flow::continue_msg>();\n    test_function_node_with_continue_msg_as_input();\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nstruct add_to_counter {\n    int* counter;\n    add_to_counter(int& var):counter(&var){}\n    int operator()(int i){*counter+=1; return i + 1;}\n};\n\ntemplate<typename FTYPE>\nvoid test_extract() {\n    int my_count = 0;\n    int cm;\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<int> b0(g);\n    tbb::flow::broadcast_node<int> b1(g);\n    tbb::flow::function_node<int, int, FTYPE> f0(g, tbb::flow::unlimited, add_to_counter(my_count));\n    tbb::flow::queue_node<int> q0(g);\n\n    tbb::flow::make_edge(b0, f0);\n    tbb::flow::make_edge(b1, f0);\n    tbb::flow::make_edge(f0, q0);\n    for( int i = 0; i < 2; ++i ) {\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(f0.predecessor_count() == 2 && f0.successor_count() == 1, \"f0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n\n        /* b0         */\n        /*   \\        */\n        /*    f0 - q0 */\n        /*   /        */\n        /* b1         */\n\n        b0.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 1, \"function_node didn't fire\");\n        ASSERT(q0.try_get(cm), \"function_node didn't forward\");\n        b1.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"function_node didn't fire\");\n        ASSERT(q0.try_get(cm), \"function_node didn't forward\");\n\n        b0.extract();\n\n        /* b0         */\n        /*            */\n        /*    f0 - q0 */\n        /*   /        */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(f0.predecessor_count() == 1 && f0.successor_count() == 1, \"f0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(1);\n        b0.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"b0 messages being forwarded to function_node even though it is disconnected\");\n        b1.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 3, \"function_node didn't fire though it has only one predecessor\");\n        ASSERT(q0.try_get(cm), \"function_node didn't forward second time\");\n\n        f0.extract();\n\n        /* b0         */\n        /*            */\n        /*    f0   q0 */\n        /*            */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(f0.predecessor_count() == 0 && f0.successor_count() == 0, \"f0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(1);\n        b0.try_put(1);\n        b1.try_put(1);\n        b1.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 3, \"function_node didn't fire though it has only one predecessor\");\n        ASSERT(!q0.try_get(cm), \"function_node forwarded though it shouldn't\");\n        make_edge(b0, f0);\n\n        /* b0         */\n        /*   \\        */\n        /*    f0   q0 */\n        /*            */\n        /* b1         */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(f0.predecessor_count() == 1 && f0.successor_count() == 0, \"f0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n\n        b0.try_put(int());\n        g.wait_for_all();\n\n        ASSERT(my_count == 4, \"function_node didn't fire though it has only one predecessor\");\n        ASSERT(!q0.try_get(cm), \"function_node forwarded though it shouldn't\");\n\n        tbb::flow::make_edge(b1, f0);\n        tbb::flow::make_edge(f0, q0);\n        my_count = 0;\n    }\n}\n#endif\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n       test_concurrency(p);\n   }\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n   lightweight_testing::test<tbb::flow::function_node>(10);\n#endif\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract<tbb::flow::rejecting>();\n    test_extract<tbb::flow::queueing>();\n#endif\n   return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_gfx_factory.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE\n\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/gfx_factory.h\"\n\n#include <cilk/cilk.h>\n\n#include \"harness.h\"\n#include \"harness_assert.h\"\n\nusing namespace tbb::flow;\n\n//---------------------------------------------------------------------------------------------------------------------------------\n// Helpers\n//---------------------------------------------------------------------------------------------------------------------------------\n\ntypedef tuple< gfx_buffer<int>, size_t > kernel_args;\ntypedef streaming_node< kernel_args, queueing, gfx_factory > gfx_node;\n\ntemplate <typename T>\nvoid init_random_buffer(gfx_buffer<T>& buf) {\n    Harness::FastRandom rnd(42);\n    std::generate(buf.begin(), buf.end(), [&rnd]() { return rnd.get(); });\n}\n\ntemplate <typename T>\nvoid copy_buffer_to_vector(gfx_buffer<T>& buf, std::vector<T>& vect) {\n    std::copy(buf.begin(), buf.end(), std::back_inserter(vect));\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------\n\n// GFX functions to offload\nstatic __declspec(target(gfx_kernel))\nvoid sq_vec(int *v, size_t n) {\n    cilk_for(size_t i = 0; i < n; ++i) {\n        v[i] = v[i] * v[i];\n    }\n}\n\n// Reference function\nvoid sq_vec_ref(std::vector<int>& v) {\n    for (size_t i = 0; i < v.size(); ++i) {\n        v[i] = v[i] * v[i];\n    }\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------\n\nvoid TestDynamicKernelArgs_finalize() {\n    REMARK(\"    TestDynamicKernelArgs_finalize: \");\n\n    // Initialize input data\n    const size_t array_size = 1000;\n    gfx_buffer<int> buffer(array_size);\n\n    // Generate random buffer values\n    init_random_buffer(buffer);\n\n    // Copy buffer to vector for the next validation\n    std::vector<int> check_vec;\n    copy_buffer_to_vector(buffer, check_vec);\n\n    // Obtain reference result\n    sq_vec_ref(check_vec);\n\n    graph g;\n    gfx_factory factory(g);\n\n    gfx_node streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);\n\n    streaming_n.set_args(port_ref<0, 1>);\n    input_port<0>(streaming_n).try_put(buffer);\n    input_port<1>(streaming_n).try_put(array_size);\n\n    g.wait_for_all();\n\n    ASSERT((buffer.size() == check_vec.size()), \"Validation has failed\");\n    ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), \"Validation has failed\");\n    REMARK(\"done\\n\");\n}\n\nvoid TestConstantKernelArgs_finalize() {\n    REMARK(\"    TestConstantKernelArgs_finalize: \");\n\n    // Initialize input data\n    const size_t array_size = 1000;\n    gfx_buffer<int> buffer(array_size);\n\n    // Generate random buffer values\n    init_random_buffer(buffer);\n\n    // Copy buffer to vector for the next validation\n    std::vector<int> check_vec;\n    copy_buffer_to_vector(buffer, check_vec);\n\n    // Obtain reference result\n    sq_vec_ref(check_vec);\n\n    graph g;\n    gfx_factory factory(g);\n\n    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);\n\n    streaming_n.set_args(port_ref<0>(), array_size);\n    input_port<0>(streaming_n).try_put(buffer);\n\n    g.wait_for_all();\n\n    ASSERT((buffer.size() == check_vec.size()), \"Validation has failed\");\n    ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), \"Validation has failed\");\n\n    REMARK(\"done\\n\");\n}\n\nvoid TestGfxStreamingFactory_finalize() {\n    REMARK(\"TestGfxStreamingFactory_finalize: \");\n    TestDynamicKernelArgs_finalize();\n    TestConstantKernelArgs_finalize();\n    REMARK(\"done\\n\");\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------\n\nvoid TestDynamicKernelArgs_send_kernel() {\n    REMARK(\"    TestDynamicKernelArgs_send_kernel: \");\n\n    // Initialize input data\n    const size_t array_size = 1000;\n    gfx_buffer<int> buffer(array_size);\n\n    // Generate random buffer values\n    init_random_buffer(buffer);\n\n    // Copy buffer to vector for the next validation\n    std::vector<int> check_vec;\n    copy_buffer_to_vector(buffer, check_vec);\n\n    // Obtain reference result\n    sq_vec_ref(check_vec);\n\n    graph g;\n    gfx_factory factory(g);\n\n    gfx_node streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);\n\n    join_node< kernel_args > join_n(g);\n    function_node< kernel_args > function_n(g, unlimited, [&check_vec](const kernel_args& result) {\n        gfx_buffer<int> buffer = get<0>(result);\n\n        ASSERT((buffer.size() == check_vec.size()), \"Validation has failed\");\n        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));\n    make_edge(output_port<1>(streaming_n), input_port<1>(join_n));\n    make_edge(join_n, function_n);\n\n    streaming_n.set_args(port_ref<0, 1>);\n    input_port<0>(streaming_n).try_put(buffer);\n    input_port<1>(streaming_n).try_put(array_size);\n\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\nvoid TestConstantKernelArgs_send_kernel() {\n    REMARK(\"    TestConstantKernelArgs_send_kernel: \");\n\n    // Initialize input data\n    const size_t array_size = 1000;\n    gfx_buffer<int> buffer(array_size);\n\n    // Generate random buffer values\n    init_random_buffer(buffer);\n\n    // Copy buffer to vector for the next validation\n    std::vector<int> check_vec;\n    copy_buffer_to_vector(buffer, check_vec);\n\n    // Obtain reference result\n    sq_vec_ref(check_vec);\n\n    graph g;\n    gfx_factory factory(g);\n\n    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);\n\n    join_node< tuple< gfx_buffer<int> > > join_n(g);\n    function_node< tuple< gfx_buffer<int> > > function_n(g, unlimited, [&check_vec](const tuple< gfx_buffer<int> >& result) {\n        gfx_buffer<int> buffer = get<0>(result);\n\n        ASSERT((buffer.size() == check_vec.size()), \"Validation has failed\");\n        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));\n    make_edge(join_n, function_n);\n\n    streaming_n.set_args(port_ref<0>(), array_size);\n    input_port<0>(streaming_n).try_put(buffer);\n\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\nvoid TestGfxStreamingFactory_send_kernel() {\n    REMARK(\"TestGfxStreamingFactory_send_kernel:\\n\");\n    TestDynamicKernelArgs_send_kernel();\n    TestConstantKernelArgs_send_kernel();\n    REMARK(\"done\\n\");\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------\n\nvoid ConcurrencyTest() {\n    REMARK(\"ConcurrencyTest: \");\n\n    // Initialize input data\n    const size_t array_size = 1000;\n    gfx_buffer<int> buffer(array_size);\n\n    // Generate random buffer values\n    init_random_buffer(buffer);\n\n    // Copy buffer to vector for the next validation\n    std::vector<int> check_vec;\n    copy_buffer_to_vector(buffer, check_vec);\n\n    // Obtain reference result\n    sq_vec_ref(check_vec);\n\n    graph g;\n    gfx_factory factory(g);\n\n    streaming_node< tuple< gfx_buffer<int> >, queueing, gfx_factory > streaming_n(g, sq_vec, gfx_factory::dummy_device_selector(), factory);\n\n    join_node< tuple< gfx_buffer<int> > > join_n(g);\n    function_node< tuple< gfx_buffer<int> > > function_n(g, unlimited, [&check_vec](const tuple< gfx_buffer<int> >& result) {\n        gfx_buffer<int> buffer = get<0>(result);\n\n        ASSERT((buffer.size() == check_vec.size()), \"Validation has failed\");\n        ASSERT((std::equal(buffer.begin(), buffer.end(), check_vec.begin())), \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(streaming_n), input_port<0>(join_n));\n    make_edge(join_n, function_n);\n\n    streaming_n.set_args(port_ref<0>(), array_size);\n\n    for (int i = 0; i < 100; i++) {\n        gfx_buffer<int> input(array_size);\n\n        for (int i = 0; i < buffer.size(); i++) {\n            input[i] = buffer[i];\n        }\n\n        input_port<0>(streaming_n).try_put(input);\n    }\n\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------\n\nint TestMain() {\n    TestGfxStreamingFactory_finalize();\n    TestGfxStreamingFactory_send_kernel();\n    ConcurrencyTest();\n    return Harness::Done;\n}\n\n#else\n#define HARNESS_SKIP_TEST 1\n#include \"harness.h\"\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_global_control.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#include \"tbb/global_control.h\"\n#include \"harness.h\"\n#define TBB_PREVIEW_LOCAL_OBSERVER 1\n#include \"tbb/task_scheduler_observer.h\"\n\nconst size_t MB = 1024*1024;\nconst double BARRIER_TIMEOUT = 10.;\n\nvoid TestStackSizeSimpleControl()\n{\n    {\n        tbb::global_control s0(tbb::global_control::thread_stack_size, 1*MB);\n\n        {\n            tbb::global_control s1(tbb::global_control::thread_stack_size, 8*MB);\n\n            ASSERT(8*MB == tbb::global_control::active_value(tbb::global_control::thread_stack_size), NULL);\n        }\n        ASSERT(1*MB == tbb::global_control::active_value(tbb::global_control::thread_stack_size), NULL);\n    }\n}\n\n#include \"harness_concurrency_tracker.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include <limits.h>   // for UINT_MAX\n\nstruct StackSizeRun: NoAssign {\n    int                   num_threads;\n    Harness::SpinBarrier *barr1, *barr2;\n\n    StackSizeRun(int threads, Harness::SpinBarrier *b1, Harness::SpinBarrier *b2) :\n        num_threads(threads), barr1(b1), barr2(b2) {}\n    void operator()( int id ) const {\n        tbb::global_control s1(tbb::global_control::thread_stack_size, (1+id)*MB);\n\n        barr1->timed_wait(BARRIER_TIMEOUT);\n\n        ASSERT(num_threads*MB == tbb::global_control::active_value(tbb::global_control::thread_stack_size), NULL);\n        barr2->timed_wait(BARRIER_TIMEOUT);\n    }\n};\n\nvoid TestStackSizeThreadsControl()\n{\n    int threads = 4;\n    Harness::SpinBarrier barr1(threads), barr2(threads);\n    NativeParallelFor( threads, StackSizeRun(threads, &barr1, &barr2) );\n}\n\nvoid RunWorkersLimited(int tsi_max_threads, size_t parallelism, bool wait)\n{\n    tbb::global_control s(tbb::global_control::max_allowed_parallelism, parallelism);\n    // try both configuration with already sleeping workers and with not yet sleeping\n    if (wait)\n        Harness::Sleep(100);\n    const size_t expected_threads = tsi_max_threads>0?\n        min( (unsigned)tsi_max_threads, parallelism )\n        : ( tbb::tbb_thread::hardware_concurrency()==1? 1 : parallelism );\n    Harness::ExactConcurrencyLevel::check(expected_threads);\n}\n\nclass blocking_task_scheduler_init {\n    tbb::task_scheduler_init init;\npublic:\n    blocking_task_scheduler_init(int num_threads = tbb::task_scheduler_init::automatic) : init(num_threads) {}\n    ~blocking_task_scheduler_init() {\n        bool ok = init.blocking_terminate(std::nothrow);\n        ASSERT(ok, \"blocking_terminate has failed\");\n    }\n};\n\nvoid TSI_and_RunWorkers(int tsi_max_threads, size_t parallelism, size_t max_value)\n{\n    blocking_task_scheduler_init tsi(tsi_max_threads);\n    size_t active = tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    ASSERT(active == max(2U, max_value), \"active_value must not be changed by task_scheduler_init\");\n    RunWorkersLimited(tsi_max_threads, parallelism, /*wait=*/false);\n}\n\n#include \"tbb/tbb_thread.h\"\n\nvoid TestWorkers(size_t curr_par)\n{\n    const size_t max_parallelism =\n        tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    ASSERT(max(2U, tbb::tbb_thread::hardware_concurrency()) == max_parallelism, NULL);\n    {\n        const unsigned h_c = tbb::tbb_thread::hardware_concurrency();\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, curr_par);\n        size_t v = tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n        ASSERT(!curr_par || max((size_t)2, curr_par) == v, NULL);\n        if (h_c > 1)\n            TSI_and_RunWorkers(tbb::task_scheduler_init::automatic, min(h_c, curr_par), curr_par);\n        if (curr_par) // do not call task_scheduler_init t(0);\n            TSI_and_RunWorkers((int)curr_par, curr_par, curr_par);\n        if (curr_par > 2) { // check that min(tsi, parallelism) is active\n            TSI_and_RunWorkers((int)curr_par-1, curr_par, curr_par);\n            TSI_and_RunWorkers((int)curr_par, curr_par-1, curr_par);\n        }\n        // check constrains on control's value: it can't be increased\n        tbb::global_control c1(tbb::global_control::max_allowed_parallelism, curr_par+1);\n        v = tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n        if (curr_par)\n            ASSERT(max(2U, curr_par) == v, \"It's impossible to increase maximal parallelism.\");\n        else\n            ASSERT(2 == v, NULL);\n    }\n    ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n           == max_parallelism,\n           \"max parallelism has been restored successfully after decreasing/increasing\");\n}\n\nvoid TestWorkersConstraints() {\n    const size_t max_parallelism =\n        tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    blocking_task_scheduler_init tsi;\n    if (max_parallelism > 3) {\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, max_parallelism-1);\n        ASSERT(max_parallelism-1 ==\n               tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism),\n               \"Allowed parallelism must be decreasable.\");\n        tbb::global_control c1(tbb::global_control::max_allowed_parallelism, max_parallelism-2);\n        ASSERT(max_parallelism-2 ==\n               tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism),\n               \"Allowed parallelism must be decreasable.\");\n    }\n    const size_t limit_par = min(max_parallelism, 4U);\n    // check that constrains are really met\n    for (int wait=0; wait<2; wait++) {\n        for (size_t num=2; num<limit_par; num++)\n            RunWorkersLimited(tbb::task_scheduler_init::automatic, num, wait==1);\n        for (size_t num=limit_par; num>1; num--)\n            RunWorkersLimited(tbb::task_scheduler_init::automatic, num, wait==1);\n    }\n}\n\nstruct DummyBody {\n    void operator()(int) const {\n        __TBB_Pause(1);\n    }\n};\n\nvoid RunParallelWork() {\n    const int LOOP_ITERS = 10*1000;\n    tbb::parallel_for(0, LOOP_ITERS, DummyBody(), tbb::simple_partitioner());\n}\n\nstruct SetUseRun: NoAssign {\n    Harness::SpinBarrier *barr;\n\n    SetUseRun(Harness::SpinBarrier *b) : barr(b) {}\n    void operator()( int id ) const {\n        if (id == 0) {\n            for (int i=0; i<10; i++) {\n                blocking_task_scheduler_init tsi;\n                RunParallelWork();\n                barr->timed_wait(BARRIER_TIMEOUT);\n            }\n        } else {\n            for (int i=0; i<10; i++) {\n                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 8);\n                barr->timed_wait(BARRIER_TIMEOUT);\n            }\n        }\n    }\n};\n\nvoid TestConcurrentSetUseConcurrency()\n{\n    Harness::SpinBarrier barr(2);\n    NativeParallelFor( 2, SetUseRun(&barr) );\n}\n\n// check number of workers after autoinitialization\nvoid TestAutoInit()\n{\n    const size_t max_parallelism =\n        tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    const unsigned expected_threads = tbb::tbb_thread::hardware_concurrency()==1?\n        1 : (unsigned)max_parallelism;\n    Harness::ExactConcurrencyLevel::check(expected_threads);\n    ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n           == max_parallelism, \"max_allowed_parallelism must not be changed after auto init\");\n    if (max_parallelism > 2) {\n        // after autoinit it's possible to decrease workers number\n        tbb::global_control s(tbb::global_control::max_allowed_parallelism, max_parallelism-1);\n        Harness::ExactConcurrencyLevel::check(max_parallelism-1);\n    }\n}\n\n// need this to use TRY_BAD_EXPR_ENABLED when TBB_USE_ASSERT is not defined\n#undef TBB_USE_ASSERT\n#define TBB_USE_ASSERT 1\n\n#include \"harness_bad_expr.h\"\n\nvoid TestInvalidParallelism()\n{\n#if TRY_BAD_EXPR_ENABLED\n    const size_t max_parallelism =\n        tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    {\n        tbb::set_assertion_handler( AssertionFailureHandler );\n        TRY_BAD_EXPR( tbb::global_control c(tbb::global_control::max_allowed_parallelism, 0),\n                       \"max_allowed_parallelism cannot be 0.\" );\n        tbb::set_assertion_handler( ReportError );\n        ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n               == max_parallelism, NULL);\n    }\n    {\n        const size_t P = 2;\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, P);\n        ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n               == P, NULL);\n        tbb::set_assertion_handler( AssertionFailureHandler );\n        TRY_BAD_EXPR( tbb::global_control cZ(tbb::global_control::max_allowed_parallelism, 0),\n                      \"max_allowed_parallelism cannot be 0.\" );\n        tbb::set_assertion_handler( ReportError );\n        ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n               == P, NULL);\n    }\n    ASSERT(tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism)\n           == max_parallelism, NULL);\n#endif /* TRY_BAD_EXPR_ENABLED */\n}\n\nvoid TestTooBigStack()\n{\n#if __TBB_x86_32\n    const size_t stack_sizes[] = {512*MB, 2*1024*MB, UINT_MAX};\n#else\n    const size_t stack_sizes[] = {512*MB, 2*1024*MB, UINT_MAX, 10LU*1024*MB};\n#endif\n\n#if __TBB_WIN8UI_SUPPORT\n    size_t default_ss = tbb::global_control::active_value(tbb::global_control::thread_stack_size);\n#endif\n    for (unsigned i = 0; i<Harness::array_length(stack_sizes); i++) {\n        // as no stack size setting for Windows Store* apps, skip it\n#if TRY_BAD_EXPR_ENABLED && __TBB_x86_64 && (_WIN32 || _WIN64) && !__TBB_WIN8UI_SUPPORT\n        if (stack_sizes[i] != (unsigned)stack_sizes[i]) {\n            size_t curr_ss = tbb::global_control::active_value(tbb::global_control::thread_stack_size);\n            tbb::set_assertion_handler( AssertionFailureHandler );\n            TRY_BAD_EXPR( tbb::global_control s1(tbb::global_control::thread_stack_size, stack_sizes[i]), \"Stack size is limited to unsigned int range\" );\n            tbb::set_assertion_handler( ReportError );\n            ASSERT(curr_ss == tbb::global_control::active_value(tbb::global_control::thread_stack_size), \"Changing of stack size is not expected.\");\n            continue;\n        }\n#endif\n        tbb::global_control s1(tbb::global_control::thread_stack_size, stack_sizes[i]);\n        size_t actual_stack_sz = tbb::global_control::active_value(tbb::global_control::thread_stack_size);\n#if __TBB_WIN8UI_SUPPORT\n        ASSERT(actual_stack_sz == default_ss, \"It's ignored for Windows Store* apps\");\n#else\n        ASSERT(actual_stack_sz==stack_sizes[i], NULL);\n#endif\n    }\n}\n\nstruct ParallelForRun: NoAssign {\n    int                   num_threads;\n    Harness::SpinBarrier *barr1, *barr2;\n\n    ParallelForRun(Harness::SpinBarrier *b1, Harness::SpinBarrier *b2) :\n        barr1(b1), barr2(b2) {}\n    void operator()( int /*id*/ ) const {\n        barr1->timed_wait(BARRIER_TIMEOUT);\n        RunParallelWork();\n        barr2->timed_wait(BARRIER_TIMEOUT);\n    }\n};\n\nclass FFTask: public tbb::task {\n    tbb::atomic<int> *counter;\n    tbb::task* execute() __TBB_override {\n        (*counter)++;\n       return NULL;\n   }\npublic:\n    FFTask(tbb::atomic<int> *counter_) : counter(counter_) {}\n};\n\nclass WaiterTask: public tbb::task {\n    tbb::atomic<bool> *flag;\n    tbb::task* execute() __TBB_override {\n        while(!*flag)\n            __TBB_Yield();\n       return NULL;\n   }\npublic:\n    WaiterTask(tbb::atomic<bool> *flag_) : flag(flag_) {}\n};\n\nclass WorkAndEnqueueTask: public tbb::task {\n    tbb::atomic<int> *counter;\n    tbb::atomic<bool> *signalToLeave;\n    tbb::task* execute() __TBB_override {\n        RunParallelWork();\n        *signalToLeave = true;\n        for (int i=0; i<ENQUEUE_TASKS; i++) {\n            FFTask* t = new( tbb::task::allocate_root() ) FFTask(counter);\n            tbb::task::enqueue(*t);\n        }\n\n        return NULL;\n   }\npublic:\n    static const int ENQUEUE_TASKS = 10;\n    WorkAndEnqueueTask(tbb::atomic<int> *counter_, tbb::atomic<bool> *signal_)\n        : counter(counter_), signalToLeave(signal_) {}\n};\n\n#if __TBB_TASK_PRIORITY\ntbb::priority_t getPriorityByInt(int i) {\n    return i%3==0? tbb::priority_low : (i%3==1? tbb::priority_normal :\n                                        tbb::priority_high);\n}\n#endif\n\nclass FFTasksRun: NoAssign {\n    void enqTasks(int id) const {\n        for (int i=0; i<ITERS; i++) {\n            FFTask* t = new( tbb::task::allocate_root() ) FFTask(cnt);\n#if __TBB_TASK_PRIORITY\n            tbb::priority_t p = getPriorityByInt(i+id);\n            tbb::task::enqueue(*t, p);\n#else\n            tbb::internal::suppress_unused_warning(id);\n            tbb::task::enqueue(*t);\n#endif\n        }\n    }\npublic:\n    static const int ITERS = 20;\n    Harness::SpinBarrier *barr;\n    tbb::atomic<int> *cnt;\n\n    FFTasksRun(Harness::SpinBarrier *b, tbb::atomic<int> *c) :\n        barr(b), cnt(c) {}\n    void operator()(int id) const {\n        if (id)\n            enqTasks(id);\n        barr->wait();\n        if (!id)\n            enqTasks(id);\n    }\n};\n\nvoid TestTaskEnqueue()\n{\n    {\n        blocking_task_scheduler_init tsi(20);\n        tbb::atomic<int> flag;\n        tbb::atomic<bool> taskDoneFlag;\n        flag = 0;\n        taskDoneFlag = false;\n\n        for (int i=0; i<10; i++) {\n            WaiterTask* w = new( tbb::task::allocate_root() ) WaiterTask(&taskDoneFlag);\n            tbb::task::enqueue(*w);\n        }\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n        taskDoneFlag = true;\n\n        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n        tbb::task::enqueue(*t);\n        while(!flag)\n            __TBB_Yield();\n    }\n    {\n        blocking_task_scheduler_init tsi(1);\n        tbb::atomic<int> flag;\n        tbb::atomic<bool> taskDoneFlag;\n        flag = 0;\n        taskDoneFlag = false;\n\n        WaiterTask* w = new( tbb::task::allocate_root() ) WaiterTask(&taskDoneFlag);\n        tbb::task::enqueue(*w);\n        taskDoneFlag = true;\n\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n\n        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n        tbb::task::enqueue(*t);\n        while(!flag)\n            __TBB_Yield();\n    }\n    {\n        blocking_task_scheduler_init tsi(2);\n        tbb::atomic<int> flag;\n        flag = 0;\n\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n\n        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n        tbb::task::enqueue(*t);\n        while(!flag)\n            __TBB_Yield();\n    }\n    {\n        blocking_task_scheduler_init tsi(2);\n        tbb::atomic<int> flag;\n        flag = 0;\n\n        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n        tbb::task::enqueue(*t);\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n\n        while(!flag)\n            __TBB_Yield();\n    }\n\n    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n\n    { // check that enqueue() guarantee mandatory parallelism\n        blocking_task_scheduler_init tsi(1);\n        tbb::atomic<int> flag;\n        flag = 0;\n\n        FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n        tbb::task::enqueue(*t);\n        while(!flag)\n            __TBB_Yield();\n    }\n    {\n        tbb::atomic<int> flag;\n        flag = 0;\n        {\n            blocking_task_scheduler_init tsi(1);\n\n            for (int i=0; i<10; i++) {\n                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n#if __TBB_TASK_PRIORITY\n                const tbb::priority_t p = getPriorityByInt(i);\n                tbb::task::enqueue(*t, p);\n#else\n                tbb::task::enqueue(*t);\n#endif\n            }\n        }\n        ASSERT(flag==10, \"The tasks must be terminated when task_scheduler_init destroyed.\");\n    }\n    const unsigned threads = 2;\n    {\n        blocking_task_scheduler_init tsi(1);\n        Harness::SpinBarrier barr1(threads), barr2(threads);\n        RunWorkersLimited(1, 1, false);\n\n        NativeParallelFor( threads, ParallelForRun(&barr1, &barr2) );\n    }\n\n    tbb::atomic<int> counter;\n    counter = 0;\n    {\n        blocking_task_scheduler_init tsi(1);\n        Harness::SpinBarrier barr(threads);\n        RunWorkersLimited(1, 1, false);\n\n        NativeParallelFor( threads, FFTasksRun(&barr, &counter) );\n    }\n    ASSERT(counter == threads*FFTasksRun::ITERS, \"All tasks must be done when task_scheduler_init destroyed.\");\n    counter = 0;\n    { // an enqueued task can enqueue other tasks and calls parallel_for\n        tbb::atomic<bool> signalToLeave;\n        blocking_task_scheduler_init tsi(1);\n\n        signalToLeave = false;\n        WorkAndEnqueueTask *t = new( tbb::task::allocate_root() )\n            WorkAndEnqueueTask(&counter, &signalToLeave);\n        tbb::task::enqueue(*t);\n        RunParallelWork();\n\n        while (!signalToLeave)\n            __TBB_Yield();\n    }\n    ASSERT(counter == WorkAndEnqueueTask::ENQUEUE_TASKS, \"All tasks must be done when task_scheduler_init destroyed.\");\n}\n\nclass CountWorkersTask: public tbb::task {\n    tbb::atomic<bool> *flag;\n    // count unique worker threads\n    static tbb::combinable<size_t> uniqThreads;\n\n    tbb::task* execute() __TBB_override {\n        uniqThreads.local() = 1;\n        Harness::Sleep(10);\n        *flag = 1;\n        return NULL;\n   }\npublic:\n    CountWorkersTask(tbb::atomic<bool> *flag_) : flag(flag_) {}\n    static size_t observedThreads() {\n        return uniqThreads.combine(std::plus<size_t>());\n    }\n};\n\ntbb::combinable<size_t> CountWorkersTask::uniqThreads;\n\ntbb::atomic<int> activeArenas;\n\nclass ArenaObserver: public tbb::task_scheduler_observer {\npublic:\n    ArenaObserver() : tbb::task_scheduler_observer(/*local=*/true) {\n    }\n    void on_scheduler_entry( bool worker ) __TBB_override {\n        if (worker) {\n            ++activeArenas;\n        }\n    }\n    void on_scheduler_exit( bool worker ) __TBB_override {\n        if (worker) {\n            --activeArenas;\n        }\n    }\n};\n\nArenaObserver observers[2];\n\nstruct ArenasObserveRun: NoAssign {\n    Harness::SpinBarrier *barr;\n\n    ArenasObserveRun(Harness::SpinBarrier *b) : barr(b) {}\n    void operator()( int id ) const {\n        observers[id].observe(true);\n        ArenaObserver o;\n        tbb::atomic<bool> flag;\n        flag = false;\n\n        CountWorkersTask* t = new( tbb::task::allocate_root() )\n            CountWorkersTask(&flag);\n        barr->wait();\n        tbb::task::enqueue(*t);\n        while(!flag)\n            __TBB_Yield();\n    }\n};\n\nstruct ArenaRun: NoAssign {\n    tbb::atomic<int> *counter;\n\n    ArenaRun(tbb::atomic<int> *counter_) : counter(counter_) {}\n    void operator()() const {\n        (*counter)++;\n    }\n};\n\nstruct ArenaUserRun: NoAssign {\n    static const int ENQUEUE_TASKS = 10;\n    tbb::task_arena *arena;\n    Harness::SpinBarrier *barr;\n    tbb::atomic<int> *counter;\n\n    ArenaUserRun(tbb::task_arena *a, Harness::SpinBarrier *b, tbb::atomic<int> *c) :\n        arena(a), barr(b), counter(c)  {}\n    void operator()( int id ) const {\n\n        for (int i=0; i<ENQUEUE_TASKS; i++)\n            arena->enqueue(ArenaRun(counter));\n        barr->wait();\n        if (!id)\n            arena->terminate();\n    }\n};\n\nvoid TestConcurrentArenas()\n{\n    Harness::SpinBarrier barrier(2);\n    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n    {\n        blocking_task_scheduler_init tsi(2);\n        ArenaObserver observer;\n        observer.observe(true);\n\n        Harness::ExactConcurrencyLevel::check(1); // must have 0 worker threads\n\n        NativeParallelFor( 2, ArenasObserveRun(&barrier) );\n        ASSERT(1 == CountWorkersTask::observedThreads(),\n               \"Single worker is expecting to serve mandatory parallelism.\");\n        while(activeArenas) // wait till single worker termination\n            __TBB_Yield();\n\n        // check that without mandatory parallelism, still have 0 worker threads\n        Harness::ExactConcurrencyLevel::check(1);\n    }\n    tbb::atomic<int> counter;\n    counter = 0;\n    {\n        blocking_task_scheduler_init tsi(1);\n        tbb::task_arena arena(2);\n\n        NativeParallelFor( 2, ArenaUserRun(&arena, &barrier, &counter) );\n    }\n    ASSERT(counter == 2*ArenaUserRun::ENQUEUE_TASKS, \"All tasks must be done.\");\n}\n\nvoid TestParallelismRestored()\n{\n    const int TASKS = 5;\n    tbb::atomic<int> counter;\n    counter = 0;\n    {\n        const int P = 4;\n        blocking_task_scheduler_init tsi(P);\n        {\n            tbb::global_control s(tbb::global_control::max_allowed_parallelism, 1);\n            Harness::ExactConcurrencyLevel::check(1);\n            // create enforced concurrency in the arena\n            for (int i=0; i<TASKS; i++) {\n                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&counter);\n                tbb::task::enqueue(*t);\n            }\n        }\n        // global control is off, check that concurrency P is available\n        Harness::ExactConcurrencyLevel::check(P);\n    }\n    ASSERT(counter==TASKS, \"The tasks must be executed at this point.\");\n}\n\nclass NoUnwantedEnforcedRun {\n    Harness::SpinBarrier *globalBarrier;\npublic:\n    NoUnwantedEnforcedRun(Harness::SpinBarrier *b) : globalBarrier(b) {}\n    void operator()( int id ) const {\n        Harness::SpinBarrier barr(1);\n\n        tbb::combinable<size_t> uniqThreads;\n        Harness::ExactConcurrencyLevel::check(1);\n        globalBarrier->wait();\n        if (id) {\n            for (int i=0; i<20; i++) {\n                Harness::ExactConcurrencyLevel::check(1); // no workers expected in the thread\n            }\n        } else {\n            // create enforced concurrency in a separate thread, thus provoke enforced worker without\n            // work to do to join arena with parallel_for\n            for (int i=0; i<10; i++) {\n                tbb::atomic<int> flag;\n                flag = 0;\n                FFTask* t = new( tbb::task::allocate_root() ) FFTask(&flag);\n                tbb::task::enqueue(*t);\n                Harness::ExactConcurrencyLevel::checkLessOrEqual(2, &uniqThreads);\n                size_t seen = uniqThreads.combine(std::plus<size_t>());\n                ASSERT(seen==1 || seen==2, NULL);\n                while(!flag)\n                    __TBB_Yield();\n            }\n        }\n    }\n};\n\n// test that enforced concurrency from one thread doesn't affect another\nvoid TestNoUnwantedEnforced()\n{\n    Harness::SpinBarrier barrier(2);\n    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n    blocking_task_scheduler_init tsi(4);\n    NativeParallelFor( 2, NoUnwantedEnforcedRun(&barrier) );\n}\n\nclass TestMultipleControlsRun {\n    Harness::SpinBarrier *barrier;\npublic:\n    TestMultipleControlsRun(Harness::SpinBarrier *b) : barrier(b) {}\n    void operator()( int id ) const {\n        barrier->wait();\n        if (id) {\n            {\n                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n                Harness::ExactConcurrencyLevel::check(1);\n                barrier->wait();\n            }\n            Harness::ExactConcurrencyLevel::check(1);\n            barrier->wait();\n            {\n                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 2);\n                Harness::ExactConcurrencyLevel::check(1);\n                barrier->wait();\n                Harness::ExactConcurrencyLevel::check(2);\n                barrier->wait();\n            }\n        } else {\n            {\n                Harness::ExactConcurrencyLevel::check(1);\n                tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n                barrier->wait();\n                Harness::ExactConcurrencyLevel::check(1);\n                barrier->wait();\n                Harness::ExactConcurrencyLevel::check(1);\n                barrier->wait();\n            }\n            Harness::ExactConcurrencyLevel::check(2);\n            barrier->wait();\n        }\n    }\n};\n\n// test that global controls from different thread with overlapping lifetime\n// still keep parallelism under control\nvoid TestMultipleControls()\n{\n    blocking_task_scheduler_init tsi(2); // to prevent autoinitialization\n    Harness::SpinBarrier barrier(2);\n    NativeParallelFor( 2, TestMultipleControlsRun(&barrier) );\n}\n\n// enqueued tasks with priority below current must not be forgotten,\n// when enqueue enforced priority is enabled\nvoid TestForgottenEnqueuedTasks()\n{\n    tbb::task_scheduler_init tsi(2);\n    tbb::atomic<int> counter;\n    tbb::atomic<bool> waitFlag;\n\n    waitFlag = false;\n    counter = 0;\n    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    r.set_ref_count(3);\n    for (int i=0; i<2; i++) {\n        tbb::task &t = *new( r.allocate_child() ) WaiterTask(&waitFlag);\n        tbb::task::spawn(t);\n    }\n    // all workers are occupied by blocked WaiterTask()\n    FFTask* t = new( tbb::task::allocate_root() ) FFTask(&counter);\n    tbb::task::enqueue(*t, tbb::priority_low);\n    {\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n        waitFlag = true; // WaiterTask() done, workers ready to use\n        while (!counter) // wait till FFTask() executed\n            __TBB_Yield();\n    }\n    r.wait_for_all();\n    tbb::task::destroy(r);\n}\n\nint TestMain()\n{\n    TestTaskEnqueue();\n    TestConcurrentArenas();\n    TestMultipleControls();\n    TestNoUnwantedEnforced();\n    const unsigned h_c = tbb::tbb_thread::hardware_concurrency();\n    bool excessHC;\n    {\n        tbb::task_scheduler_init t(h_c+1);\n        excessHC = Harness::ExactConcurrencyLevel::isEqual(h_c+1);\n    }\n    if (h_c>2)\n        TestWorkers(h_c-1);\n    if (excessHC)  // requires hardware concurrency +1, otherwise hangs\n        TestWorkers(h_c+1);\n    if (excessHC || h_c >= 2)\n        TestWorkers(2);\n    if (excessHC || h_c >= 3)\n        TestWorkers(3);\n    TestWorkersConstraints();\n    TestConcurrentSetUseConcurrency();\n    TestInvalidParallelism();\n    TestAutoInit(); // auto-initialization done at this point\n\n    size_t default_ss = tbb::global_control::active_value(tbb::global_control::thread_stack_size);\n    ASSERT(default_ss, NULL);\n#if !__TBB_WIN8UI_SUPPORT\n    // it's impossible to change stack size for Windows Store* apps, so skip the tests\n    TestStackSizeSimpleControl();\n    TestStackSizeThreadsControl();\n#endif\n    TestTooBigStack();\n    ASSERT(default_ss == tbb::global_control::active_value(tbb::global_control::thread_stack_size), NULL);\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_global_control_whitebox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFINE_PRIVATE_PUBLIC 1\n#include \"harness_inject_scheduler.h\"\n#include \"harness.h\"\n\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#include \"tbb/global_control.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\nbool allWorkersSleep() {\n    using namespace tbb::internal;\n    using namespace tbb::internal::rml;\n\n    unsigned sleeping_threads = 0;\n    unsigned threads = ((private_server*)market::theMarket->my_server)->my_n_thread;\n\n    for (private_worker *l = ((private_server*)market::theMarket->my_server)->my_asleep_list_root;\n         l; l = l->my_next)\n        sleeping_threads++;\n\n    return threads == sleeping_threads;\n}\n\nclass ThreadsTask {\npublic:\n    void operator() (const tbb::blocked_range<int> &) const { }\n    ThreadsTask() {}\n};\n\nstatic void RunAndCheckSleeping()\n{\n    Harness::Sleep(100);\n    ASSERT(allWorkersSleep(), NULL);\n    tbb::parallel_for(tbb::blocked_range<int>(0, 100*1000, 1),\n                      ThreadsTask(), tbb::simple_partitioner());\n    Harness::Sleep(100);\n    ASSERT(allWorkersSleep(), NULL);\n}\n\n// test that all workers are sleeping, not spinning\nvoid TestWorkersSleep() {\n    tbb::task_scheduler_init tsi(8);\n    const size_t max_parallelism =\n        tbb::global_control::active_value(tbb::global_control::max_allowed_parallelism);\n    if (max_parallelism > 2) {\n        tbb::global_control c(tbb::global_control::max_allowed_parallelism, max_parallelism-1);\n    }\n    RunAndCheckSleeping();\n    tbb::global_control c(tbb::global_control::max_allowed_parallelism, max_parallelism+1);\n    RunAndCheckSleeping();\n}\n\nint TestMain () {\n    {\n        tbb::task_scheduler_init tsi;\n        if (!tbb::internal::governor::UsePrivateRML)\n            return Harness::Skipped;\n    }\n    TestWorkersSleep();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_halt.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 4\n#define HARNESS_DEFAULT_MAX_THREADS 8\n\n#include \"harness_defs.h\"\n#include <cstdio>\n#include <cstdlib>\n#include <cassert>\n#include <utility>\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"harness.h\"\n\nusing namespace std;\nusing namespace tbb;\n\n///////////////////// Parallel methods ////////////////////////\n\n// *** Serial shared by mutexes *** //\nint SharedI = 1, SharedN;\ntemplate<typename M>\nclass SharedSerialFibBody: NoAssign {\n    M &mutex;\npublic:\n    SharedSerialFibBody( M &m ) : mutex( m ) {}\n    //! main loop\n    void operator()( const blocked_range<int>& /*range*/ ) const {\n        for(;;) {\n            typename M::scoped_lock lock( mutex );\n            if(SharedI >= SharedN) break;\n            volatile double sum = 7.3;\n            sum *= 11.17;\n            ++SharedI;\n        }\n    }\n};\n\n//! Root function\ntemplate<class M>\nvoid SharedSerialFib(int n)\n{\n    SharedI = 1;\n    SharedN = n;\n    M mutex;\n    parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );\n}\n\n/////////////////////////// Main ////////////////////////////////////////////////////\n\ndouble Tsum = 0; int Tnum = 0;\n\ntypedef void (*MeasureFunc)(int);\n//! Measure ticks count in loop [2..n]\nvoid Measure(const char *name, MeasureFunc func, int n)\n{\n    tick_count t0;\n    tick_count::interval_t T;\n    REMARK(\"%s\",name);\n    t0 = tick_count::now();\n    for(int number = 2; number <= n; number++)\n        func(number);\n    T = tick_count::now() - t0;\n    double avg = Tnum? Tsum/Tnum : 1;\n    if (avg == 0.0) avg = 1;\n    if(avg * 100 < T.seconds()) {\n        REPORT(\"Warning: halting detected (%g sec, av: %g)\\n\", T.seconds(), avg);\n        ASSERT(avg * 1000 > T.seconds(), \"Too long halting period\");\n    } else {\n        Tsum += T.seconds(); Tnum++;\n    }\n    REMARK(\"\\t- in %f msec\\n\", T.seconds()*1000);\n}\n\nint TestMain () {\n    MinThread = max(2, MinThread);\n    int NumbersCount = 100;\n    short recycle = 100;\n    do {\n        for(int threads = MinThread; threads <= MaxThread; threads++) {\n            task_scheduler_init scheduler_init(threads);\n            REMARK(\"Threads number is %d\\t\", threads);\n            Measure(\"Shared serial (wrapper mutex)\\t\", SharedSerialFib<mutex>, NumbersCount);\n            //sum = Measure(\"Shared serial (spin_mutex)\", SharedSerialFib<tbb::spin_mutex>, NumbersCount);\n            //sum = Measure(\"Shared serial (queuing_mutex)\", SharedSerialFib<tbb::queuing_mutex>, NumbersCount);\n        }\n    } while(--recycle);\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_handle_perror.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Program for basic correctness of handle_perror, which is internal\n// to the TBB shared library.\n\n#include <cerrno>\n#include <stdexcept>\n\n#include \"../tbb/tbb_misc.h\"\n#include \"harness.h\"\n\n#if TBB_USE_EXCEPTIONS\n\nstatic void TestHandlePerror() {\n    bool caught = false;\n    try {\n        tbb::internal::handle_perror( EAGAIN, \"apple\" );\n    } catch( std::runtime_error& e ) {\n#if TBB_USE_EXCEPTIONS\n        REMARK(\"caught runtime_exception('%s')\\n\",e.what());\n        ASSERT( memcmp(e.what(),\"apple: \",7)==0, NULL );\n        ASSERT( strlen(strstr(e.what(), strerror(EAGAIN))), \"bad error message?\" );\n#endif /* TBB_USE_EXCEPTIONS */\n        caught = true;\n    }\n    ASSERT( caught, NULL );\n}\n\nint TestMain () {\n    TestHandlePerror();\n    return Harness::Done;\n}\n\n#else /* !TBB_USE_EXCEPTIONS */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* TBB_USE_EXCEPTIONS */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_hw_concurrency.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_defs.h\"\n\n#if __TBB_TEST_SKIP_AFFINITY\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\nint TestMain() {\n    return Harness::Skipped;\n}\n#else /* affinity mask can be set and used by TBB */\n\n#include \"harness.h\"\n#include \"harness_concurrency.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\n// The declaration of a global ETS object is needed to check that\n// it does not initialize the task scheduler, and in particular\n// does not set the default thread number. TODO: add other objects\n// that should not initialize the scheduler.\ntbb::enumerable_thread_specific<std::size_t> ets;\n\nint TestMain () {\n    int maxProcs = Harness::GetMaxProcs();\n\n    if ( maxProcs < 2 )\n        return Harness::Skipped;\n\n    int availableProcs = maxProcs/2;\n    ASSERT( Harness::LimitNumberOfThreads( availableProcs ) == availableProcs, \"LimitNumberOfThreads has not set the requested limitation.\" );\n    ASSERT( tbb::task_scheduler_init::default_num_threads() == availableProcs, NULL );\n    ASSERT( (int)tbb::tbb_thread::hardware_concurrency() == availableProcs, NULL );\n    return Harness::Done;\n}\n#endif /* __TBB_TEST_SKIP_AFFINITY */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_indexer_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_graph.h\"\n#include \"tbb/flow_graph.h\"\n\n//\n// Tests\n//\n\n#if defined(_MSC_VER) && _MSC_VER < 1600\n    #pragma warning (disable : 4503) //disabling the \"decorated name length exceeded\" warning for VS2008 and earlier\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\ntemplate< typename T >\nclass test_indexer_extract {\nprotected:\n    typedef tbb::flow::indexer_node<T, T> my_node_t;\n    typedef tbb::flow::queue_node<T> in_node_t;\n    typedef tbb::flow::queue_node<typename my_node_t::output_type> out_node_t;\n\n    tbb::flow::graph g;\n    in_node_t in0;\n    in_node_t in1;\n    in_node_t in2;\n    my_node_t middle;\n    out_node_t out0;\n    out_node_t out1;\n    in_node_t *ins[3];\n    out_node_t *outs[2];\n    typename in_node_t::successor_type *ms_p0_ptr;\n    typename in_node_t::successor_type *ms_p1_ptr;\n    typename out_node_t::predecessor_type *mp_ptr;\n    typename in_node_t::predecessor_list_type in0_p_list;\n    typename in_node_t::successor_list_type in0_s_list;\n    typename in_node_t::predecessor_list_type in1_p_list;\n    typename in_node_t::successor_list_type in1_s_list;\n    typename in_node_t::predecessor_list_type in2_p_list;\n    typename in_node_t::successor_list_type in2_s_list;\n    typename out_node_t::predecessor_list_type out0_p_list;\n    typename out_node_t::successor_list_type out0_s_list;\n    typename out_node_t::predecessor_list_type out1_p_list;\n    typename out_node_t::successor_list_type out1_s_list;\n    typename in_node_t::predecessor_list_type mp0_list;\n    typename in_node_t::predecessor_list_type mp1_list;\n    typename out_node_t::successor_list_type ms_list;\n\n    virtual void set_up_lists() {\n        in0_p_list.clear();\n        in0_s_list.clear();\n        in1_p_list.clear();\n        in1_s_list.clear();\n        in2_p_list.clear();\n        in2_s_list.clear();\n        out0_p_list.clear();\n        out0_s_list.clear();\n        out1_p_list.clear();\n        out1_s_list.clear();\n        mp0_list.clear();\n        mp1_list.clear();\n        ms_list.clear();\n\n        in0.copy_predecessors(in0_p_list);\n        in0.copy_successors(in0_s_list);\n        in1.copy_predecessors(in1_p_list);\n        in1.copy_successors(in1_s_list);\n        in2.copy_predecessors(in2_p_list);\n        in2.copy_successors(in2_s_list);\n        tbb::flow::input_port<0>(middle).copy_predecessors(mp0_list);\n        tbb::flow::input_port<1>(middle).copy_predecessors(mp1_list);\n        middle.copy_successors(ms_list);\n        out0.copy_predecessors(out0_p_list);\n        out0.copy_successors(out0_s_list);\n        out1.copy_predecessors(out1_p_list);\n        out1.copy_successors(out1_s_list);\n    }\n\n    void check_output(int &r, typename my_node_t::output_type &v) {\n        T t = tbb::flow::cast_to<T>(v);\n        if ( t == 1 || t == 2 ) {\n            ASSERT( v.tag() == 0, \"value came in on wrong port\" );\n        } else if ( t == 4 || t == 8 ) {\n            ASSERT( v.tag() == 1, \"value came in on wrong port\" );\n        } else {\n            ASSERT( false, \"incorrect value passed through indexer_node\" );\n        }\n        ASSERT( (r&t) == 0, \"duplicate value passed through indexer_node\" );\n        r |= t;\n    }\n\n    void make_and_validate_full_graph() {\n        /*     in0                         */\n        /*         \\                       */\n        /*           port0          out0   */\n        /*         /       |      /        */\n        /*     in1         middle          */\n        /*                 |      \\        */\n        /*     in2 - port1          out1   */\n        tbb::flow::make_edge( in0, tbb::flow::input_port<0>(middle) );\n        tbb::flow::make_edge( in1, tbb::flow::input_port<0>(middle) );\n        tbb::flow::make_edge( in2, tbb::flow::input_port<1>(middle) );\n        tbb::flow::make_edge( middle, out0 );\n        tbb::flow::make_edge( middle, out1 );\n\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 1 && in0_s_list.size() == 1 && *(in0_s_list.begin()) == ms_p0_ptr, \"expected 1 successor\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 1 && in1_s_list.size() == 1 && *(in1_s_list.begin()) == ms_p0_ptr, \"expected 1 successor\" );\n        ASSERT( in2.predecessor_count() == 0 && in2_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in2.successor_count() == 1 && in2_s_list.size() == 1 && *(in2_s_list.begin()) == ms_p1_ptr, \"expected 1 successor\" );\n        ASSERT( tbb::flow::input_port<0>(middle).predecessor_count() == 2 && mp0_list.size() == 2, \"expected 2 predecessors\" );\n        ASSERT( tbb::flow::input_port<1>(middle).predecessor_count() == 1 && mp1_list.size() == 1, \"expected 1 predecessors\" );\n        ASSERT( middle.successor_count() == 2 && ms_list.size() == 2, \"expected 2 successors\" );\n        ASSERT( out0.predecessor_count() == 1 && out0_p_list.size() == 1 && *(out0_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 1 && out1_p_list.size() == 1 && *(out1_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        int first_pred = *(mp0_list.begin()) == ins[0] ? 0 : ( *(mp0_list.begin()) == ins[1] ? 1 : -1 );\n        typename in_node_t::predecessor_list_type::iterator piv = mp0_list.begin();++piv;\n        int second_pred = *piv == ins[0] ? 0 : ( *piv == ins[1] ? 1 : -1 );\n        ASSERT( first_pred != -1 && second_pred != -1 && first_pred != second_pred, \"bad predecessor(s) for middle port 0\" );\n\n        ASSERT( *(mp1_list.begin()) == ins[2], \"bad predecessor for middle port 1\" );\n\n        int first_succ = *(ms_list.begin()) == outs[0] ? 0 : ( *(ms_list.begin()) == outs[1] ? 1 : -1 );\n        typename out_node_t::successor_list_type::iterator ms_vec_iter = ms_list.begin(); ++ms_vec_iter;\n        int second_succ = *ms_vec_iter == outs[0] ? 0 : ( *ms_vec_iter == outs[1] ? 1 : -1 );\n        ASSERT( first_succ != -1 && second_succ != -1 && first_succ != second_succ, \"bad successor(s) for middle\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n\n        ASSERT( in0.try_get(v_in) == false, \"buffer should not have a value\" );\n        ASSERT( in1.try_get(v_in) == false, \"buffer should not have a value\" );\n        ASSERT( in1.try_get(v_in) == false, \"buffer should not have a value\" );\n        ASSERT( in2.try_get(v_in) == false, \"buffer should not have a value\" );\n        ASSERT( in2.try_get(v_in) == false, \"buffer should not have a value\" );\n\n        typename my_node_t::output_type v;\n        T r = 0;\n        while ( out0.try_get(v) ) {\n            check_output(r,v);\n            g.wait_for_all();\n        }\n        ASSERT( r == 15, \"not all values received\" );\n\n        r = 0;\n        while ( out1.try_get(v) ) {\n            check_output(r,v);\n            g.wait_for_all();\n        }\n        ASSERT( r == 15, \"not all values received\" );\n        g.wait_for_all();\n    }\n\n    void validate_partial_graph() {\n        /*     in0                         */\n        /*                                 */\n        /*           port0          out0   */\n        /*         /       |               */\n        /*     in1         middle          */\n        /*                 |      \\        */\n        /*     in2 - port1          out1   */\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 0 && in0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 1 && in1_s_list.size() == 1 && *(in1_s_list.begin()) == ms_p0_ptr, \"expected 1 successor\" );\n        ASSERT( in2.predecessor_count() == 0 && in2_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in2.successor_count() == 1 && in2_s_list.size() == 1 && *(in2_s_list.begin()) == ms_p1_ptr, \"expected 1 successor\" );\n        ASSERT( tbb::flow::input_port<0>(middle).predecessor_count() == 1 && mp0_list.size() == 1 && *(mp0_list.begin()) == ins[1], \"expected 1 predecessor\" );\n        ASSERT( tbb::flow::input_port<1>(middle).predecessor_count() == 1 && mp1_list.size() == 1 && *(mp1_list.begin()) == ins[2], \"expected 1 predecessor\" );\n        ASSERT( middle.successor_count() == 1 && ms_list.size() == 1 && *(ms_list.begin()) == outs[1], \"expected 1 successor\" );\n        ASSERT( out0.predecessor_count() == 0 && out0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 1 && out1_p_list.size() == 1 && *(out1_p_list.begin()) == mp_ptr, \"expected 1 predecessor\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n        typename my_node_t::output_type v;\n\n        ASSERT( in0.try_get(v_in) == true && v_in == 1, \"buffer should have a value of 1\" );\n        ASSERT( in1.try_get(v_in) == false, \"buffer should not have a value\" );\n        ASSERT( out0.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( in0.try_get(v_in) == false, \"buffer should not have a value\" );\n\n        T r = 0;\n        while ( out1.try_get(v) ) {\n            check_output(r,v);\n            g.wait_for_all();\n        }\n        ASSERT( r == 14, \"not all values received\" );\n        g.wait_for_all();\n    }\n\n    void validate_empty_graph() {\n        /*     in0                         */\n        /*                                 */\n        /*            port0         out0   */\n        /*                |                */\n        /*     in1         middle          */\n        /*                 |               */\n        /*     in2   port1          out1   */\n        set_up_lists();\n\n        ASSERT( in0.predecessor_count() == 0 && in0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in0.successor_count() == 0 && in0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( in1.predecessor_count() == 0 && in1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in1.successor_count() == 0 && in1_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( in2.predecessor_count() == 0 && in2_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( in2.successor_count() == 0 && in2_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( tbb::flow::input_port<0>(middle).predecessor_count() == 0 && mp0_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( tbb::flow::input_port<1>(middle).predecessor_count() == 0 && mp1_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( middle.successor_count() == 0 && ms_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out0.predecessor_count() == 0 && out0_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out0.successor_count() == 0 && out0_s_list.size() == 0, \"expected 0 successors\" );\n        ASSERT( out1.predecessor_count() == 0 && out1_p_list.size() == 0, \"expected 0 predecessors\" );\n        ASSERT( out1.successor_count() == 0 && out1_s_list.size() == 0, \"expected 0 successors\" );\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n        typename my_node_t::output_type v;\n\n        ASSERT( in0.try_get(v_in) == true && v_in == 1, \"buffer should have a value of 1\" );\n        ASSERT( in1.try_get(v_in) == true && v_in == 2, \"buffer should have a value of 2\" );\n        ASSERT( in2.try_get(v_in) == true && v_in == 8, \"buffer should have a value of 8\" );\n        ASSERT( in2.try_get(v_in) == true && v_in == 4, \"buffer should have a value of 4\" );\n        ASSERT( out0.try_get(v) == false, \"buffer should not have a value\" );\n        ASSERT( out1.try_get(v) == false, \"buffer should not have a value\" );\n        g.wait_for_all();\n        g.reset(); // NOTE: this should not be necessary!!!!!  But it is!!!!\n    }\n\npublic:\n\n    test_indexer_extract() : in0(g), in1(g), in2(g), middle(g), out0(g), out1(g) {\n        ins[0] = &in0;\n        ins[1] = &in1;\n        ins[2] = &in2;\n        outs[0] = &out0;\n        outs[1] = &out1;\n        ms_p0_ptr = static_cast< typename in_node_t::successor_type * >(&tbb::flow::input_port<0>(middle));\n        ms_p1_ptr = static_cast< typename in_node_t::successor_type * >(&tbb::flow::input_port<1>(middle));\n        mp_ptr = static_cast< typename out_node_t::predecessor_type *>(&middle);\n    }\n\n    virtual ~test_indexer_extract() {}\n\n    void run_tests() {\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        in0.extract();\n        out0.extract();\n        REMARK(\"partial graph\\n\");\n        validate_partial_graph();\n\n        in1.extract();\n        in2.extract();\n        out1.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        in0.extract();\n        in1.extract();\n        in2.extract();\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        out0.extract();\n        out1.extract();\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n    }\n};\n#endif\n\nconst int Count = 150;\nconst int MaxPorts = 10;\nconst int MaxNSources = 5; // max # of source_nodes to register for each indexer_node input in parallel test\nbool outputCheck[MaxPorts][Count];  // for checking output\n\nvoid\ncheck_outputCheck( int nUsed, int maxCnt) {\n    for(int i=0; i < nUsed; ++i) {\n        for( int j = 0; j < maxCnt; ++j) {\n            ASSERT(outputCheck[i][j], NULL);\n        }\n    }\n}\n\nvoid\nreset_outputCheck( int nUsed, int maxCnt) {\n    for(int i=0; i < nUsed; ++i) {\n        for( int j = 0; j < maxCnt; ++j) {\n            outputCheck[i][j] = false;\n        }\n    }\n}\n\nclass test_class {\n    public:\n        test_class() { my_val = 0; }\n        test_class(int i) { my_val = i; }\n        operator int() { return my_val; }\n    private:\n        int my_val;\n};\n\ntemplate<typename T>\nclass name_of {\npublic:\n    static const char* name() { return  \"Unknown\"; }\n};\ntemplate<>\nclass name_of<int> {\npublic:\n    static const char* name() { return  \"int\"; }\n};\ntemplate<>\nclass name_of<float> {\npublic:\n    static const char* name() { return  \"float\"; }\n};\ntemplate<>\nclass name_of<double> {\npublic:\n    static const char* name() { return  \"double\"; }\n};\ntemplate<>\nclass name_of<long> {\npublic:\n    static const char* name() { return  \"long\"; }\n};\ntemplate<>\nclass name_of<short> {\npublic:\n    static const char* name() { return  \"short\"; }\n};\ntemplate<>\nclass name_of<test_class> {\npublic:\n    static const char* name() { return  \"test_class\"; }\n};\n\n// TT must be arithmetic, and shouldn't wrap around for reasonable sizes of Count (which is now 150, and maxPorts is 10,\n// so the max number generated right now is 1500 or so.)  Source will generate a series of TT with value\n// (init_val + (i-1)*addend) * my_mult, where i is the i-th invocation of the body.  We are attaching addend\n// source nodes to a indexer_port, and each will generate part of the numerical series the port is expecting\n// to receive.  If there is only one source node, the series order will be maintained; if more than one,\n// this is not guaranteed.\n// The manual specifies bodies can be assigned, so we can't hide the operator=.\ntemplate<typename TT>\nclass source_body {\n    TT my_mult;\n    int my_count;\n    int addend;\npublic:\n    source_body(TT multiplier, int init_val, int addto) : my_mult(multiplier), my_count(init_val), addend(addto) { }\n    bool operator()( TT &v) {\n        int lc = my_count;\n        v = my_mult * (TT)my_count;\n        my_count += addend;\n        return lc < Count;\n    }\n};\n\n// allocator for indexer_node.\n\ntemplate<typename IType>\nclass makeIndexer {\npublic:\n    static IType *create() {\n        IType *temp = new IType();\n        return temp;\n    }\n    static void destroy(IType *p) { delete p; }\n};\n\ntemplate<int ELEM, typename INT>\nstruct getval_helper {\n\n    typedef typename INT::output_type OT;\n    typedef typename tbb::flow::tuple_element<ELEM-1, typename INT::tuple_types>::type stored_type;\n\n    static int get_integer_val(OT const &o) {\n        stored_type res = tbb::flow::cast_to<stored_type>(o);\n        return (int)res;\n    }\n};\n\n// holder for source_node pointers for eventual deletion\n\nstatic void* all_source_nodes[MaxPorts][MaxNSources];\n\ntemplate<int ELEM, typename INT>\nclass source_node_helper {\npublic:\n    typedef INT indexer_node_type;\n    typedef typename indexer_node_type::output_type TT;\n    typedef typename tbb::flow::tuple_element<ELEM-1,typename INT::tuple_types>::type IT;\n    typedef typename tbb::flow::source_node<IT> my_source_node_type;\n    static void print_remark() {\n        source_node_helper<ELEM-1,INT>::print_remark();\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void add_source_nodes(indexer_node_type &my_indexer, tbb::flow::graph &g, int nInputs) {\n        for(int i=0; i < nInputs; ++i) {\n            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)(ELEM+1), i, nInputs));\n            tbb::flow::make_edge(*new_node, tbb::flow::input_port<ELEM-1>(my_indexer));\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            ASSERT(new_node->successor_count() == 1, NULL);\n#endif\n            all_source_nodes[ELEM-1][i] = (void *)new_node;\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(tbb::flow::input_port<ELEM-1>(my_indexer).predecessor_count() == (size_t)nInputs, NULL);\n#endif\n        // add the next source_node\n        source_node_helper<ELEM-1, INT>::add_source_nodes(my_indexer, g, nInputs);\n    }\n    static void check_value(TT &v) {\n        if(v.tag() == ELEM-1) {\n            int ival = getval_helper<ELEM,INT>::get_integer_val(v);\n            ASSERT(!(ival%(ELEM+1)), NULL);\n            ival /= (ELEM+1);\n            ASSERT(!outputCheck[ELEM-1][ival], NULL);\n            outputCheck[ELEM-1][ival] = true;\n        }\n        else {\n            source_node_helper<ELEM-1,INT>::check_value(v);\n        }\n    }\n\n    static void remove_source_nodes(indexer_node_type& my_indexer, int nInputs) {\n        for(int i=0; i< nInputs; ++i) {\n            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[ELEM-1][i]);\n            tbb::flow::remove_edge(*dp, tbb::flow::input_port<ELEM-1>(my_indexer));\n            delete dp;\n        }\n        source_node_helper<ELEM-1, INT>::remove_source_nodes(my_indexer, nInputs);\n    }\n};\n\ntemplate<typename INT>\nclass source_node_helper<1, INT> {\n    typedef INT indexer_node_type;\n    typedef typename indexer_node_type::output_type TT;\n    typedef typename tbb::flow::tuple_element<0, typename INT::tuple_types>::type IT;\n    typedef typename tbb::flow::source_node<IT> my_source_node_type;\npublic:\n    static void print_remark() {\n        REMARK(\"Parallel test of indexer_node< %s\", name_of<IT>::name());\n    }\n    static void add_source_nodes(indexer_node_type &my_indexer, tbb::flow::graph &g, int nInputs) {\n        for(int i=0; i < nInputs; ++i) {\n            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)2, i, nInputs));\n            tbb::flow::make_edge(*new_node, tbb::flow::input_port<0>(my_indexer));\n            all_source_nodes[0][i] = (void *)new_node;\n        }\n    }\n    static void check_value(TT &v) {\n        int ival = getval_helper<1,INT>::get_integer_val(v);\n        ASSERT(!(ival%2), NULL);\n        ival /= 2;\n        ASSERT(!outputCheck[0][ival], NULL);\n        outputCheck[0][ival] = true;\n    }\n    static void remove_source_nodes(indexer_node_type& my_indexer, int nInputs) {\n        for(int i=0; i < nInputs; ++i) {\n            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[0][i]);\n            tbb::flow::remove_edge(*dp, tbb::flow::input_port<0>(my_indexer));\n            delete dp;\n        }\n    }\n};\n\ntemplate<typename IType>\nclass parallel_test {\npublic:\n    typedef typename IType::output_type TType;\n    typedef typename IType::tuple_types union_types;\n    static const int SIZE = tbb::flow::tuple_size<union_types>::value;\n    static void test() {\n        TType v;\n        source_node_helper<SIZE,IType>::print_remark();\n        REMARK(\" >\\n\");\n        for(int i=0; i < MaxPorts; ++i) {\n            for(int j=0; j < MaxNSources; ++j) {\n                all_source_nodes[i][j] = NULL;\n            }\n        }\n        for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {\n            tbb::flow::graph g;\n            IType* my_indexer = new IType(g); //makeIndexer<IType>::create();\n            tbb::flow::queue_node<TType> outq1(g);\n            tbb::flow::queue_node<TType> outq2(g);\n\n            tbb::flow::make_edge(*my_indexer, outq1);\n            tbb::flow::make_edge(*my_indexer, outq2);\n\n            source_node_helper<SIZE, IType>::add_source_nodes((*my_indexer), g, nInputs);\n\n            g.wait_for_all();\n\n            reset_outputCheck(SIZE, Count);\n            for(int i=0; i < Count*SIZE; ++i) {\n                ASSERT(outq1.try_get(v), NULL);\n                source_node_helper<SIZE, IType>::check_value(v);\n            }\n\n            check_outputCheck(SIZE, Count);\n            reset_outputCheck(SIZE, Count);\n\n            for(int i=0; i < Count*SIZE; i++) {\n                ASSERT(outq2.try_get(v), NULL);;\n                source_node_helper<SIZE, IType>::check_value(v);\n            }\n            check_outputCheck(SIZE, Count);\n\n            ASSERT(!outq1.try_get(v), NULL);\n            ASSERT(!outq2.try_get(v), NULL);\n\n            source_node_helper<SIZE, IType>::remove_source_nodes((*my_indexer), nInputs);\n            tbb::flow::remove_edge(*my_indexer, outq1);\n            tbb::flow::remove_edge(*my_indexer, outq2);\n            makeIndexer<IType>::destroy(my_indexer);\n        }\n    }\n};\n\nstd::vector<int> last_index_seen;\n\ntemplate<int ELEM, typename IType>\nclass serial_queue_helper {\npublic:\n    typedef typename IType::output_type OT;\n    typedef typename IType::tuple_types TT;\n    typedef typename tbb::flow::tuple_element<ELEM-1,TT>::type IT;\n    static void print_remark() {\n        serial_queue_helper<ELEM-1,IType>::print_remark();\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void fill_one_queue(int maxVal, IType &my_indexer) {\n        // fill queue to \"left\" of me\n        serial_queue_helper<ELEM-1,IType>::fill_one_queue(maxVal,my_indexer);\n        for(int i = 0; i < maxVal; ++i) {\n            ASSERT(tbb::flow::input_port<ELEM-1>(my_indexer).try_put((IT)(i*(ELEM+1))), NULL);\n        }\n    }\n    static void put_one_queue_val(int myVal, IType &my_indexer) {\n        // put this val to my \"left\".\n        serial_queue_helper<ELEM-1,IType>::put_one_queue_val(myVal, my_indexer);\n        ASSERT(tbb::flow::input_port<ELEM-1>(my_indexer).try_put((IT)(myVal*(ELEM+1))), NULL);\n    }\n    static void check_queue_value(OT &v) {\n        if(ELEM - 1 == v.tag()) {\n            // this assumes each or node input is queueing.\n            int rval = getval_helper<ELEM,IType>::get_integer_val(v);\n            ASSERT( rval == (last_index_seen[ELEM-1]+1)*(ELEM+1), NULL);\n            last_index_seen[ELEM-1] = rval / (ELEM+1);\n        }\n        else {\n            serial_queue_helper<ELEM-1,IType>::check_queue_value(v);\n        }\n    }\n};\n\ntemplate<typename IType>\nclass serial_queue_helper<1, IType> {\npublic:\n    typedef typename IType::output_type OT;\n    typedef typename IType::tuple_types TT;\n    typedef typename tbb::flow::tuple_element<0,TT>::type IT;\n    static void print_remark() {\n        REMARK(\"Serial test of indexer_node< %s\", name_of<IT>::name());\n    }\n    static void fill_one_queue(int maxVal, IType &my_indexer) {\n        for(int i = 0; i < maxVal; ++i) {\n            ASSERT(tbb::flow::input_port<0>(my_indexer).try_put((IT)(i*2)), NULL);\n        }\n    }\n    static void put_one_queue_val(int myVal, IType &my_indexer) {\n        ASSERT(tbb::flow::input_port<0>(my_indexer).try_put((IT)(myVal*2)), NULL);\n    }\n    static void check_queue_value(OT &v) {\n        ASSERT(v.tag() == 0, NULL);  // won't get here unless true\n        int rval = getval_helper<1,IType>::get_integer_val(v);\n        ASSERT( rval == (last_index_seen[0]+1)*2, NULL);\n        last_index_seen[0] = rval / 2;\n    }\n};\n\ntemplate<typename IType, typename TType, int SIZE>\nvoid test_one_serial( IType &my_indexer, tbb::flow::graph &g) {\n    last_index_seen.clear();\n    for(int ii=0; ii < SIZE; ++ii) last_index_seen.push_back(-1);\n\n    typedef TType q3_input_type;\n    tbb::flow::queue_node< q3_input_type >  q3(g);\n    q3_input_type v;\n\n    tbb::flow::make_edge(my_indexer, q3);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(my_indexer.successor_count() == 1, NULL);\n    ASSERT(tbb::flow::input_port<0>(my_indexer).predecessor_count() == 0, NULL);\n#endif\n\n    // fill each queue with its value one-at-a-time\n    for (int i = 0; i < Count; ++i ) {\n        serial_queue_helper<SIZE,IType>::put_one_queue_val(i,my_indexer);\n    }\n\n    g.wait_for_all();\n    for (int i = 0; i < Count * SIZE; ++i ) {\n        g.wait_for_all();\n        ASSERT(q3.try_get( v ), \"Error in try_get()\");\n        {\n            serial_queue_helper<SIZE,IType>::check_queue_value(v);\n        }\n    }\n    ASSERT(!q3.try_get( v ), \"extra values in output queue\");\n    for(int ii=0; ii < SIZE; ++ii) last_index_seen[ii] = -1;\n\n    // fill each queue completely before filling the next.\n    serial_queue_helper<SIZE, IType>::fill_one_queue(Count,my_indexer);\n\n    g.wait_for_all();\n    for (int i = 0; i < Count*SIZE; ++i ) {\n        g.wait_for_all();\n        ASSERT(q3.try_get( v ), \"Error in try_get()\");\n        {\n            serial_queue_helper<SIZE,IType>::check_queue_value(v);\n        }\n    }\n    ASSERT(!q3.try_get( v ), \"extra values in output queue\");\n}\n\n//\n// Single predecessor at each port, single accepting successor\n//   * put to buffer before port0, then put to buffer before port1, ...\n//   * fill buffer before port0 then fill buffer before port1, ...\n\ntemplate<typename IType>\nclass serial_test {\n    typedef typename IType::output_type TType;  // this is the union\n    typedef typename IType::tuple_types union_types;\n    static const int SIZE = tbb::flow::tuple_size<union_types>::value;\npublic:\nstatic void test() {\n    tbb::flow::graph g;\n    static const int ELEMS = 3;\n    IType* my_indexer = new IType(g); //makeIndexer<IType>::create(g);\n\n    test_input_ports_return_ref(*my_indexer);\n\n    serial_queue_helper<SIZE, IType>::print_remark(); REMARK(\" >\\n\");\n\n    test_one_serial<IType,TType,SIZE>(*my_indexer, g);\n\n    std::vector<IType> indexer_vector(ELEMS,*my_indexer);\n\n    makeIndexer<IType>::destroy(my_indexer);\n\n    for(int e = 0; e < ELEMS; ++e) {\n        test_one_serial<IType,TType,SIZE>(indexer_vector[e], g);\n    }\n}\n\n}; // serial_test\n\ntemplate<\n      template<typename> class TestType,  // serial_test or parallel_test\n      typename T0, typename T1=void, typename T2=void, typename T3=void, typename T4=void,\n      typename T5=void, typename T6=void, typename T7=void, typename T8=void, typename T9=void> // type of the inputs to the indexer_node\nclass generate_test {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\n//specializations for indexer node inputs\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3, typename T4,\n      typename T5, typename T6, typename T7, typename T8>\nclass generate_test<TestType, T0, T1, T2, T3, T4, T5, T6, T7, T8> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3, typename T4,\n      typename T5, typename T6, typename T7>\nclass generate_test<TestType, T0, T1, T2, T3, T4, T5, T6, T7> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6, T7>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3, typename T4,\n      typename T5, typename T6>\nclass generate_test<TestType, T0, T1, T2, T3, T4, T5, T6> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5, T6>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3, typename T4,\n      typename T5>\nclass generate_test<TestType, T0, T1, T2, T3, T4, T5>  {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4, T5>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3, typename T4>\nclass generate_test<TestType, T0, T1, T2, T3, T4>  {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3, T4>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2, typename T3>\nclass generate_test<TestType, T0, T1, T2, T3> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2, T3>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1, typename T2>\nclass generate_test<TestType, T0, T1, T2> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1, T2>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0, typename T1>\nclass generate_test<TestType, T0, T1> {\npublic:\n    typedef tbb::flow::indexer_node<T0, T1>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\ntemplate<\n      template<typename> class TestType,\n      typename T0>\nclass generate_test<TestType, T0> {\npublic:\n    typedef tbb::flow::indexer_node<T0>  indexer_node_type;\n    static void do_test() {\n        TestType<indexer_node_type>::test();\n    }\n};\n\nint TestMain() {\n    REMARK(\"Testing indexer_node, \");\n#if __TBB_USE_TBB_TUPLE\n    REMARK(\"using TBB tuple\\n\");\n#else\n    REMARK(\"using platform tuple\\n\");\n#endif\n\n   for (int p = 0; p < 2; ++p) {\n       generate_test<serial_test, float>::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 4\n       generate_test<serial_test, float, double, int>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 6\n       generate_test<serial_test, double, double, int, long, int, short>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 8\n       generate_test<serial_test, float, double, double, double, float, int, float, long>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 10\n       generate_test<serial_test, float, double, int, double, double, float, long, int, float, long>::do_test();\n#endif\n       generate_test<parallel_test, float, double>::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 3\n       generate_test<parallel_test, float, int, long>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 5\n       generate_test<parallel_test, double, double, int, int, short>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 7\n       generate_test<parallel_test, float, int, double, float, long, float, long>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 9\n       generate_test<parallel_test, float, double, int, double, double, long, int, float, long>::do_test();\n#endif\n   }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n   test_indexer_extract<int>().run_tests();\n#endif\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_initializer_list.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_test_initializer_list_H\n#define __TBB_test_initializer_list_H\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include <initializer_list>\n#include <vector>\n#include \"harness_defs.h\" //for int_to_type\n\nnamespace initializer_list_support_tests{\n    template<typename container_type, typename element_type>\n    void test_constructor(std::initializer_list<element_type> il, container_type const& expected){\n        container_type vd (il);\n        ASSERT(vd == expected,\"initialization via explicit constructor call with init list failed\");\n    }\n\n\n    template<typename container_type, typename element_type>\n    void test_assignment_operator(std::initializer_list<element_type> il, container_type const& expected){\n        container_type va;\n        va = il;\n        ASSERT(va == expected,\"init list operator= failed\");\n    }\n\n    struct skip_test {\n        template<typename container_type, typename element_type>\n        static void do_test(std::initializer_list<element_type>, container_type const&) { /* do nothing */ }\n    };\n\n    struct test_assign {\n        template<typename container_type, typename element_type>\n        static void do_test( std::initializer_list<element_type> il, container_type const& expected ) {\n            container_type vae;\n            vae.assign( il );\n            ASSERT( vae == expected, \"init list assign(begin,end) failed\" );\n        }\n    };\n\n    struct test_special_insert {\n        template<typename container_type, typename element_type>\n        static void do_test( std::initializer_list<element_type> il, container_type const& expected ) {\n            container_type vd;\n            vd.insert( il );\n            ASSERT( vd == expected, \"inserting with an initializer list failed\" );\n        }\n    };\n\n    template <typename container_type, typename test_assign, typename test_special>\n    void TestInitListSupport(std::initializer_list<typename container_type::value_type> il){\n        typedef typename container_type::value_type element_type;\n        std::vector<element_type> test_seq(il.begin(),il.end());\n        container_type expected(test_seq.begin(), test_seq.end());\n\n        test_constructor<container_type,element_type>(il, expected);\n        test_assignment_operator<container_type,element_type>(il, expected);\n        test_assign::do_test(il, expected);\n        test_special::do_test(il, expected);\n    }\n\n    template <typename container_type, typename test_special = skip_test>\n    void TestInitListSupport(std::initializer_list<typename container_type::value_type> il) {\n        TestInitListSupport<container_type, test_assign, test_special>(il);\n    }\n\n    template <typename container_type, typename test_special = skip_test>\n    void TestInitListSupportWithoutAssign(std::initializer_list<typename container_type::value_type> il){\n        TestInitListSupport<container_type, skip_test, test_special>(il);\n    }\n\n    //TODO: add test for no leaks, and correct element lifetime\n    //the need for macro comes from desire to test different scenarios where initializer sequence is compile time constant\n    #define __TBB_TEST_INIT_LIST_SUITE_SINGLE(FUNC_NAME, CONTAINER, ELEMENT_TYPE, INIT_SEQ)                                                           \\\n    void FUNC_NAME(){                                                                                                                                 \\\n        typedef ELEMENT_TYPE element_type;                                                                                                            \\\n        typedef CONTAINER<element_type> container_type;                                                                                               \\\n        element_type test_seq[] = INIT_SEQ;                                                                                                           \\\n        container_type expected(test_seq,test_seq + Harness::array_length(test_seq));                                                                 \\\n                                                                                                                                                      \\\n        /*test for explicit contructor call*/                                                                                                         \\\n        container_type vd INIT_SEQ;                                                                                                                   \\\n        ASSERT(vd == expected,\"initialization via explicit constructor call with init list failed\");                                                  \\\n        /*test for explicit contructor call with std::initializer_list*/                                                                              \\\n                                                                                                                                                      \\\n        std::initializer_list<element_type> init_list = INIT_SEQ;                                                                                     \\\n        container_type v1 (init_list);                                                                                                                \\\n        ASSERT(v1 == expected,\"initialization via explicit constructor call with std::initializer_list failed\");                                      \\\n                                                                                                                                                      \\\n        /*implicit constructor call test*/                                                                                                            \\\n        container_type v = INIT_SEQ;                                                                                                                  \\\n        ASSERT(v == expected,\"init list constructor failed\");                                                                                         \\\n                                                                                                                                                      \\\n        /*assignment operator test*/                                                                                                                  \\\n        /*TODO: count created and destroyed injects to assert that no extra copy of vector was created implicitly*/                                   \\\n        container_type va;                                                                                                                            \\\n        va = INIT_SEQ;                                                                                                                                \\\n        ASSERT(va == expected,\"init list operator= failed\");                                                                                          \\\n        /*assign(begin,end) test*/                                                                                                                    \\\n        container_type vae;                                                                                                                           \\\n        vae.assign(INIT_SEQ);                                                                                                                         \\\n        ASSERT(vae == expected,\"init list assign(begin,end) failed\");                                                                                 \\\n    }                                                                                                                                                 \\\n\n    namespace initializer_list_helpers{\n        template<typename T>\n        class ad_hoc_container{\n            std::vector<T> vec;\n            public:\n            ad_hoc_container(){}\n            template<typename InputIterator>\n            ad_hoc_container(InputIterator begin, InputIterator end) : vec(begin,end) {}\n            ad_hoc_container(std::initializer_list<T> il) : vec(il.begin(),il.end()) {}\n            ad_hoc_container(ad_hoc_container const& other) : vec(other.vec) {}\n            ad_hoc_container& operator=(ad_hoc_container const& rhs){ vec=rhs.vec; return *this;}\n            ad_hoc_container& operator=(std::initializer_list<T> il){ vec.assign(il.begin(),il.end()); return *this;}\n            template<typename InputIterator>\n            void assign(InputIterator begin, InputIterator end){ vec.assign(begin,end);}\n            void assign(std::initializer_list<T> il){ vec.assign(il.begin(),il.end());}\n            friend bool operator==(ad_hoc_container<T> const& lhs, ad_hoc_container<T> const& rhs){ return lhs.vec==rhs.vec;}\n        };\n    }\n\n    #define AD_HOC_INIT_SEQ {1,2,3,4}\n    __TBB_TEST_INIT_LIST_SUITE_SINGLE(TestCompilerSupportInt, initializer_list_helpers::ad_hoc_container, int, AD_HOC_INIT_SEQ )\n    #undef AD_HOC_INIT_SEQ\n\n    #if __TBB_CPP11_INIT_LIST_TEST_BROKEN\n        void TestCompilerSupportIntPair(){\n            REPORT(\"Known issue: skip initializer_list compiler test for std::pair list elements.\\n\");\n        }\n    #else\n        #define AD_HOC_PAIR_INIT_SEQ {{1,1}, {2,2},{3,3}, {4,4}}\n        #define AD_HOC_INIT_SEQ_PAIR_TYPE std::pair<int,int>\n        __TBB_TEST_INIT_LIST_SUITE_SINGLE(TestCompilerSupportIntPair, initializer_list_helpers::ad_hoc_container, AD_HOC_INIT_SEQ_PAIR_TYPE, AD_HOC_PAIR_INIT_SEQ )\n        #undef AD_HOC_INIT_SEQ_PAIR_TYPE\n        #undef AD_HOC_PAIR_INIT_SEQ\n    #endif\n\n    bool TestCompilerForInitializerList();\n    namespace  {\n        const bool conpiler_init_list_tests_are_run =  TestCompilerForInitializerList();\n    }\n\n    //TODO: move this to test_compiler\n    bool TestCompilerForInitializerList(){\n        TestCompilerSupportInt();\n        TestCompilerSupportIntPair();\n        tbb::internal::suppress_unused_warning(conpiler_init_list_tests_are_run);\n        return true;\n    }\n} // namespace initializer_list_support_tests\n\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n#endif //__TBB_test_initializer_list_H\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_inits_loop.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if __APPLE__\n\n#define HARNESS_CUSTOM_MAIN 1\n#include \"harness.h\"\n#include <cstdlib>\n#include \"tbb/task_scheduler_init.h\"\n\n#include <sys/types.h>\n#include <sys/wait.h>\n#include <unistd.h>\n#include <signal.h>\n#include <errno.h>\n\nbool exec_test(const char *self) {\n    int status = 1;\n    pid_t p = fork();\n    if(p < 0) {\n        REPORT(\"fork error: errno=%d: %s\\n\", errno, strerror(errno));\n        return true;\n    }\n    else if(p) { // parent\n        if(waitpid(p, &status, 0) != p) {\n            REPORT(\"wait error: errno=%d: %s\\n\", errno, strerror(errno));\n            return true;\n        }\n        if(WIFEXITED(status)) {\n            if(!WEXITSTATUS(status)) return false; // ok\n            else REPORT(\"child has exited with return code 0x%x\\n\", WEXITSTATUS(status));\n        } else {\n            REPORT(\"child error 0x%x:%s%s \", status, WIFSIGNALED(status)?\" signalled\":\"\",\n                WIFSTOPPED(status)?\" stopped\":\"\");\n            if(WIFSIGNALED(status))\n                REPORT(\"%s%s\", sys_siglist[WTERMSIG(status)], WCOREDUMP(status)?\" core dumped\":\"\");\n            if(WIFSTOPPED(status))\n                REPORT(\"with %d stop-code\", WSTOPSIG(status));\n            REPORT(\"\\n\");\n        }\n    }\n    else { // child\n        // reproduces error much often\n        execl(self, self, \"0\", NULL);\n        REPORT(\"exec fails %s: %d: %s\\n\", self, errno, strerror(errno));\n        exit(2);\n    }\n    return true;\n}\n\nHARNESS_EXPORT\nint main( int argc, char * argv[] ) {\n    MinThread = 3000;\n    ParseCommandLine( argc, argv );\n    if( MinThread <= 0 ) {\n        tbb::task_scheduler_init init( 2 ); // even number required for an error\n    } else {\n        for(int i = 0; i<MinThread; i++) {\n            if(exec_test(argv[0])) {\n                REPORT(\"ERROR: execution fails at %d-th iteration!\\n\", i);\n                exit(1);\n            }\n        }\n        REPORT(\"done\\n\");\n    }\n}\n\n#else /* !__APPLE__ */\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__APPLE__ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_intrusive_list.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\n#include \"../tbb/intrusive_list.h\"\n\nusing tbb::internal::intrusive_list_node;\n\n// Machine word filled with repeated pattern of FC bits\nconst uintptr_t NoliMeTangere = ~uintptr_t(0)/0xFF*0xFC;\n\nstruct VerificationBase : Harness::NoAfterlife {\n    uintptr_t m_Canary;\n    VerificationBase () : m_Canary(NoliMeTangere) {}\n};\n\nstruct DataItemWithInheritedNodeBase : intrusive_list_node {\n    int m_Data;\npublic:\n    DataItemWithInheritedNodeBase ( int value ) : m_Data(value) {}\n\n    int Data() const { return m_Data; }\n};\n\nclass DataItemWithInheritedNode : public VerificationBase, public DataItemWithInheritedNodeBase {\n    friend class tbb::internal::intrusive_list<DataItemWithInheritedNode>;\npublic:\n    DataItemWithInheritedNode ( int value ) : DataItemWithInheritedNodeBase(value) {}\n};\n\nstruct DataItemWithMemberNodeBase {\n    int m_Data;\npublic:\n    // Cannot be used by member_intrusive_list to form lists of objects derived from DataItemBase\n    intrusive_list_node m_BaseNode;\n\n    DataItemWithMemberNodeBase ( int value ) : m_Data(value) {}\n\n    int Data() const { return m_Data; }\n};\n\nclass DataItemWithMemberNodes : public VerificationBase, public DataItemWithMemberNodeBase {\npublic:\n    intrusive_list_node m_Node;\n\n    DataItemWithMemberNodes ( int value ) : DataItemWithMemberNodeBase(value) {}\n};\n\ntypedef tbb::internal::intrusive_list<DataItemWithInheritedNode> IntrusiveList1;\ntypedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes,\n        DataItemWithMemberNodeBase, &DataItemWithMemberNodeBase::m_BaseNode> IntrusiveList2;\ntypedef tbb::internal::memptr_intrusive_list<DataItemWithMemberNodes,\n        DataItemWithMemberNodes, &DataItemWithMemberNodes::m_Node> IntrusiveList3;\n\nconst int NumElements = 256 * 1024;\n\n//! Iterates through the list forward and backward checking the validity of values stored by the list nodes\ntemplate<class List, class Iterator>\nvoid CheckListNodes ( List& il, int valueStep ) {\n    ASSERT( il.size()==unsigned(NumElements/valueStep), \"Wrong size of the list\" );\n    ASSERT( !il.empty(), \"Incorrect result of empty() or the list is corrupted\" );\n    int i;\n    Iterator it = il.begin();\n    for ( i = valueStep - 1; it != il.end(); ++it, i += valueStep ) {\n        ASSERT( it->Data() == i, \"Unexpected node value while iterating forward\" );\n        ASSERT( (*it).m_Canary == NoliMeTangere, \"Memory corruption\" );\n    }\n    ASSERT( i == NumElements + valueStep - 1, \"Wrong number of list elements while iterating forward\" );\n    it = il.end();\n    for ( i = NumElements - 1, it--; it != il.end(); --it, i -= valueStep ) {\n        ASSERT( (*it).Data() == i, \"Unexpected node value while iterating backward\" );\n        ASSERT( it->m_Canary == NoliMeTangere, \"Memory corruption\" );\n    }\n    ASSERT( i == -1, \"Wrong number of list elements while iterating backward\" );\n}\n\ntemplate<class List, class Item>\nvoid TestListOperations () {\n    typedef typename List::iterator iterator;\n    List il;\n    for ( int i = NumElements - 1; i >= 0; --i )\n        il.push_front( *new Item(i) );\n    CheckListNodes<const List, typename List::const_iterator>( il, 1 );\n    iterator it = il.begin();\n    for ( ; it != il.end(); ++it ) {\n        Item &item = *it;\n        it = il.erase( it ); // also advances the iterator\n        delete &item;\n    }\n    CheckListNodes<List, iterator>( il, 2 );\n    for ( it = il.begin(); it != il.end(); ++it ) {\n        Item &item = *it;\n        il.remove( *it++ ); // extra advance here as well\n        delete &item;\n    }\n    CheckListNodes<List, iterator>( il, 4 );\n    for ( it = il.begin(); it != il.end(); ) {\n        Item &item = *it++; // the iterator advances only here\n        il.remove( item );\n        delete &item;\n    }\n    ASSERT( il.size()==0, \"The list has wrong size or not all items were removed\" );\n    ASSERT( il.empty(), \"Incorrect result of empty() or not all items were removed\" );\n}\n\n#include \"harness_bad_expr.h\"\n\ntemplate<class List, class Item>\nvoid TestListAssertions () {\n#if TRY_BAD_EXPR_ENABLED\n    tbb::set_assertion_handler( AssertionFailureHandler );\n    List il1, il2;\n    Item n1(1), n2(2), n3(3);\n    il1.push_front(n1);\n    TRY_BAD_EXPR( il2.push_front(n1), \"only one intrusive list\" );\n    TRY_BAD_EXPR( il1.push_front(n1), \"only one intrusive list\" );\n    il2.push_front(n2);\n    TRY_BAD_EXPR( il1.remove(n3), \"not in the list\" );\n    tbb::set_assertion_handler( ReportError );\n#endif /* TRY_BAD_EXPR_ENABLED */\n}\n\nint TestMain () {\n    TestListOperations<IntrusiveList1, DataItemWithInheritedNode>();\n    TestListOperations<IntrusiveList2, DataItemWithMemberNodes>();\n    TestListOperations<IntrusiveList3, DataItemWithMemberNodes>();\n    TestListAssertions<IntrusiveList1, DataItemWithInheritedNode>();\n    TestListAssertions<IntrusiveList2, DataItemWithMemberNodes>();\n    TestListAssertions<IntrusiveList3, DataItemWithMemberNodes>();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_ittnotify.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 2\n#define HARNESS_DEFAULT_MAX_THREADS 2\n\n#if !TBB_USE_THREADING_TOOLS\n    #define TBB_USE_THREADING_TOOLS 1\n#endif\n\n#include \"harness.h\"\n\n#if DO_ITT_NOTIFY\n\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/recursive_mutex.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n\n#include \"../tbb/itt_notify.h\"\n\n\ntemplate<typename M>\nclass WorkEmulator: NoAssign {\n    M& m_mutex;\n    static volatile size_t s_anchor;\npublic:\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            typename M::scoped_lock lock(m_mutex);\n            for ( size_t j = 0; j!=range.end(); ++j )\n                s_anchor = (s_anchor - i) / 2 + (s_anchor + j) / 2;\n        }\n    }\n    WorkEmulator( M& mutex ) : m_mutex(mutex) {}\n};\n\ntemplate<typename M>\nvolatile size_t WorkEmulator<M>::s_anchor = 0;\n\n\ntemplate<class M>\nvoid Test( const char * name ) {\n    REMARK(\"Testing %s\\n\",name);\n    M mtx;\n    tbb::profiling::set_name(mtx, name);\n\n    const int n = 10000;\n    tbb::parallel_for( tbb::blocked_range<size_t>(0,n,n/100), WorkEmulator<M>(mtx) );\n}\n\n    #define TEST_MUTEX(type, name)  Test<tbb::type>( name )\n\n#endif /* !DO_ITT_NOTIFY */\n\nint TestMain () {\n#if DO_ITT_NOTIFY\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK( \"testing with %d workers\\n\", p );\n        tbb::task_scheduler_init init( p );\n        TEST_MUTEX( spin_mutex, \"Spin Mutex\" );\n        TEST_MUTEX( queuing_mutex, \"Queuing Mutex\" );\n        TEST_MUTEX( queuing_rw_mutex, \"Queuing RW Mutex\" );\n        TEST_MUTEX( spin_rw_mutex, \"Spin RW Mutex\" );\n    }\n    return Harness::Done;\n#else /* !DO_ITT_NOTIFY */\n    return Harness::Skipped;\n#endif /* !DO_ITT_NOTIFY */\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_join_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"test_join_node.h\"\n\nstatic tbb::atomic<int> output_count;\n\n// get the tag from the output tuple and emit it.\n// the first tuple component is tag * 2 cast to the type\ntemplate<typename OutputTupleType>\nclass recirc_output_func_body {\npublic:\n    // we only need this to use source_node_helper\n    typedef typename tbb::flow::join_node<OutputTupleType, tbb::flow::tag_matching> join_node_type;\n    static const int N = tbb::flow::tuple_size<OutputTupleType>::value;\n    int operator()(const OutputTupleType &v) {\n        int out = int(tbb::flow::get<0>(v))/2;\n        source_node_helper<N, join_node_type>::only_check_value(out, v);\n        ++output_count;\n        return out;\n    }\n};\n\ntemplate<typename JType>\nclass tag_recirculation_test {\npublic:\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple<int, tbb::flow::continue_msg> input_tuple_type;\n    typedef tbb::flow::join_node<input_tuple_type, tbb::flow::reserving> input_join_type;\n    static const int N = tbb::flow::tuple_size<TType>::value;\n    static void test() {\n        source_node_helper<N, JType>::print_remark(\"Recirculation test of tag-matching join\");\n        REMARK(\" >\\n\");\n        for(int maxTag = 1; maxTag <10; maxTag *= 3) {\n            for(int i = 0; i < N; ++i) all_source_nodes[i][0] = NULL;\n\n            tbb::flow::graph g;\n            // this is the tag-matching join we're testing\n            JType * my_join = makeJoin<N, JType, tbb::flow::tag_matching>::create(g);\n            // source_node for continue messages\n            tbb::flow::source_node<tbb::flow::continue_msg> snode(g, recirc_source_node_body(), false);\n            // reserving join that matches recirculating tags with continue messages.\n            input_join_type * my_input_join = makeJoin<2, input_join_type, tbb::flow::reserving>::create(g);\n            // tbb::flow::make_edge(snode, tbb::flow::input_port<1>(*my_input_join));\n            tbb::flow::make_edge(snode, tbb::flow::get<1>(my_input_join->input_ports()));\n            // queue to hold the tags\n            tbb::flow::queue_node<int> tag_queue(g);\n            tbb::flow::make_edge(tag_queue, tbb::flow::input_port<0>(*my_input_join));\n            // add all the function_nodes that are inputs to the tag-matching join\n            source_node_helper<N, JType>::add_recirc_func_nodes(*my_join, *my_input_join, g);\n            // add the function_node that accepts the output of the join and emits the int tag it was based on\n            tbb::flow::function_node<TType, int> recreate_tag(g, tbb::flow::unlimited, recirc_output_func_body<TType>());\n            tbb::flow::make_edge(*my_join, recreate_tag);\n            // now the recirculating part (output back to the queue)\n            tbb::flow::make_edge(recreate_tag, tag_queue);\n\n            // put the tags into the queue\n            for(int t = 1; t<=maxTag; ++t) tag_queue.try_put(t);\n\n            input_count = Recirc_count;\n            output_count = 0;\n\n            // start up the source node to get things going\n            snode.activate();\n\n            // wait for everything to stop\n            g.wait_for_all();\n\n            ASSERT(output_count==Recirc_count, \"not all instances were received\");\n\n            int j;\n            // grab the tags from the queue, record them\n            std::vector<bool> out_tally(maxTag, false);\n            for(int i = 0; i < maxTag; ++i) {\n                ASSERT(tag_queue.try_get(j), \"not enough tags in queue\");\n                ASSERT(!out_tally.at(j-1), \"duplicate tag from queue\");\n                out_tally[j-1] = true;\n            }\n            ASSERT(!tag_queue.try_get(j), \"Extra tags in recirculation queue\");\n\n            // deconstruct graph\n            source_node_helper<N, JType>::remove_recirc_func_nodes(*my_join, *my_input_join);\n            tbb::flow::remove_edge(*my_join, recreate_tag);\n            makeJoin<N, JType, tbb::flow::tag_matching>::destroy(my_join);\n            tbb::flow::remove_edge(tag_queue, tbb::flow::input_port<0>(*my_input_join));\n            tbb::flow::remove_edge(snode, tbb::flow::input_port<1>(*my_input_join));\n            makeJoin<2, input_join_type, tbb::flow::reserving>::destroy(my_input_join);\n        }\n    }\n};\n\ntemplate<typename JType>\nclass generate_recirc_test {\npublic:\n    typedef tbb::flow::join_node<JType, tbb::flow::tag_matching> join_node_type;\n    static void do_test() {\n        tag_recirculation_test<join_node_type>::test();\n    }\n};\n\nint TestMain() {\n#if __TBB_USE_TBB_TUPLE\n    REMARK(\"  Using TBB tuple\\n\");\n#else\n    REMARK(\"  Using platform tuple\\n\");\n#endif\n\n    TestTaggedBuffers();\n    test_main<tbb::flow::queueing>();\n    test_main<tbb::flow::reserving>();\n    test_main<tbb::flow::tag_matching>();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_join_node.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef tbb_test_join_node_H\n#define tbb_test_join_node_H\n\n#if _MSC_VER\n// Suppress \"decorated name length exceeded, name was truncated\" warning\n#if __INTEL_COMPILER\n#pragma warning( disable: 2586 )\n#else\n#pragma warning( disable: 4503 )\n#endif\n#endif\n\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n#include \"harness_graph.h\"\n#include \"harness_checktype.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#define __TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN __TBB_MIC_OFFLOAD\n\nconst char *names[] = {\n    \"Adam\", \"Bruce\", \"Charles\", \"Daniel\", \"Evan\", \"Frederich\", \"George\", \"Hiram\", \"Ichabod\",\n    \"John\", \"Kevin\", \"Leonard\", \"Michael\", \"Ned\", \"Olin\", \"Paul\", \"Quentin\", \"Ralph\", \"Steven\",\n    \"Thomas\", \"Ulysses\", \"Victor\", \"Walter\", \"Xerxes\", \"Yitzhak\", \"Zebediah\", \"Anne\", \"Bethany\",\n    \"Clarisse\", \"Dorothy\", \"Erin\", \"Fatima\", \"Gabrielle\", \"Helen\", \"Irene\", \"Jacqueline\",\n    \"Katherine\", \"Lana\", \"Marilyn\", \"Noelle\", \"Okiilani\", \"Pauline\", \"Querida\", \"Rose\", \"Sybil\",\n    \"Tatiana\", \"Umiko\", \"Victoria\", \"Wilma\", \"Xena\", \"Yolanda\", \"Zoe\", \"Algernon\", \"Benjamin\",\n    \"Caleb\", \"Dylan\", \"Ezra\", \"Felix\", \"Gabriel\", \"Henry\", \"Issac\", \"Jasper\", \"Keifer\",\n    \"Lincoln\", \"Milo\", \"Nathaniel\", \"Owen\", \"Peter\", \"Quincy\", \"Ronan\", \"Silas\", \"Theodore\",\n    \"Uriah\", \"Vincent\", \"Wilbur\", \"Xavier\", \"Yoda\", \"Zachary\", \"Amelia\", \"Brielle\", \"Charlotte\",\n    \"Daphne\", \"Emma\", \"Fiona\", \"Grace\", \"Hazel\", \"Isla\", \"Juliet\", \"Keira\", \"Lily\", \"Mia\",\n    \"Nora\", \"Olivia\", \"Penelope\", \"Quintana\", \"Ruby\", \"Sophia\", \"Tessa\", \"Ursula\", \"Violet\",\n    \"Willow\", \"Xanthe\", \"Yvonne\", \"ZsaZsa\", \"Asher\", \"Bennett\", \"Connor\", \"Dominic\", \"Ethan\",\n    \"Finn\", \"Grayson\", \"Hudson\", \"Ian\", \"Jackson\", \"Kent\", \"Liam\", \"Matthew\", \"Noah\", \"Oliver\",\n    \"Parker\", \"Quinn\", \"Rhys\", \"Sebastian\", \"Taylor\", \"Umberto\", \"Vito\", \"William\", \"Xanto\",\n    \"Yogi\", \"Zane\", \"Ava\", \"Brenda\", \"Chloe\", \"Delilah\", \"Ella\", \"Felicity\", \"Genevieve\",\n    \"Hannah\", \"Isabella\", \"Josephine\", \"Kacie\", \"Lucy\", \"Madeline\", \"Natalie\", \"Octavia\",\n    \"Piper\", \"Qismah\", \"Rosalie\", \"Scarlett\", \"Tanya\", \"Uta\", \"Vivian\", \"Wendy\", \"Xola\",\n    \"Yaritza\", \"Zanthe\"};\n\nstatic const int NameCnt = sizeof(names)/sizeof(char *);\n\ntemplate<typename K>\nstruct index_to_key {\n    K operator()(const int indx) {\n        return (K)(3*indx+1);\n    }\n};\n\ntemplate<>\nstruct index_to_key<std::string> {\n    std::string operator()(const int indx) {\n        return std::string(names[indx % NameCnt]);\n    }\n};\n\ntemplate<typename K>\nstruct K_deref {\n    typedef K type;\n};\n\ntemplate<typename K>\nstruct K_deref<K&> {\n    typedef K type;\n};\n\ntemplate<typename K, typename V>\nstruct MyKeyFirst {\n    K my_key;\n    V my_value;\n    MyKeyFirst(int i = 0, int v = 0): my_key(index_to_key<K>()(i)), my_value((V)v) {\n    }\n    void print_val() const {\n        REMARK(\"MyKeyFirst{\"); print_my_value(my_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n};\n\ntemplate<typename K, typename V>\nstruct MyKeySecond {\n    V my_value;\n    K my_key;\n    MyKeySecond(int i = 0, int v = 0): my_value((V)v), my_key(index_to_key<K>()(i)) {\n    }\n    void print_val() const {\n        REMARK(\"MyKeySecond{\"); print_my_value(my_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n};\n\ntemplate<typename K, typename V>\nstruct MyMessageKeyWithoutKey {\n    V my_value;\n    K my_message_key;\n    MyMessageKeyWithoutKey(int i = 0, int v = 0): my_value((V)v), my_message_key(index_to_key<K>()(i)) {\n    }\n    void print_val() const {\n        REMARK(\"MyMessageKeyWithoutKey{\"); print_my_value(my_message_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n    const K& key() const {\n        return my_message_key;\n    }\n};\n\ntemplate<typename K, typename V>\nstruct MyMessageKeyWithBrokenKey {\n    V my_value;\n    K my_key;\n    K my_message_key;\n    MyMessageKeyWithBrokenKey(int i = 0, int v = 0): my_value((V)v), my_key(), my_message_key(index_to_key<K>()(i)) {\n    }\n    void print_val() const {\n        REMARK(\"MyMessageKeyWithBrokenKey{\"); print_my_value(my_message_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n    const K& key() const {\n        return my_message_key;\n    }\n\n};\n\ntemplate<typename K, typename V>\nstruct MyKeyWithBrokenMessageKey {\n    V my_value;\n    K my_key;\n    MyKeyWithBrokenMessageKey(int i = 0, int v = 0): my_value((V)v), my_key(index_to_key<K>()(i)) {\n    }\n    void print_val() const {\n        REMARK(\"MyKeyWithBrokenMessageKey{\"); print_my_value(my_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n    K key() const {\n        ASSERT(false, \"The method should never be called\");\n        return K();\n    }\n};\n\ntemplate<typename K, typename V>\nstruct MyMessageKeyWithoutKeyMethod {\n    V my_value;\n    K my_message_key;\n    MyMessageKeyWithoutKeyMethod(int i = 0, int v = 0): my_value((V)v), my_message_key(index_to_key<K>()(i)) {\n    }\n    void print_val() const {\n        REMARK(\"MyMessageKeyWithoutKeyMethod{\"); print_my_value(my_message_key); REMARK(\",\"); print_my_value(my_value); REMARK(\"}\");\n    }\n    operator int() const { return (int)my_value; }\n#if __TBB_COMPLICATED_ADL_BROKEN\n    const K& key() const { return my_message_key; }\n#endif\n    //K key() const; // Do not define\n};\n\n// Overload for MyMessageKeyWithoutKeyMethod\ntemplate <typename K, typename V>\nK key_from_message(const MyMessageKeyWithoutKeyMethod<typename tbb::internal::strip<K>::type, V> &m) {\n    return m.my_message_key;\n}\n\n\n// pattern for creating values in the tag_matching and key_matching, given an integer and the index in the tuple\ntemplate<typename TT, size_t INDEX>\nstruct make_thingie {\n    TT operator()(int const &i) {\n        return TT(i * (INDEX+1));\n    }\n};\n\ntemplate<template <typename, typename> class T, typename K, typename V, size_t INDEX>\nstruct make_thingie<T<K, V>, INDEX> {\n    T<K, V> operator()(int const &i) {\n        return T<K, V>(i, i*(INDEX+1));\n    }\n};\n\n// cast_from<T>::my_int_val(i);\ntemplate<typename T>\nstruct cast_from {\n    static int my_int_val(T const &i) { return (int)i; }\n};\n\ntemplate<typename K, typename V>\nstruct cast_from<MyKeyFirst<K, V> > {\n    static int my_int_val(MyKeyFirst<K, V> const &i) { return (int)(i.my_value); }\n};\n\ntemplate<typename K, typename V>\nstruct cast_from<MyKeySecond<K, V> > {\n    static int my_int_val(MyKeySecond<K, V> const &i) { return (int)(i.my_value); }\n};\n\ntemplate<typename T>\nvoid print_my_value(T const &i) {\n    REMARK(\" %d \", cast_from<T>::my_int_val(i));\n}\n\ntemplate<typename K, typename V>\nvoid print_my_value(MyKeyFirst<K, V> const &i) {\n    i.print_val();\n}\n\ntemplate<typename K, typename V>\nvoid print_my_value(MyKeySecond<K, V> const &i) {\n    i.print_val();\n}\n\ntemplate<>\nvoid print_my_value(std::string const &i) {\n    REMARK(\"\\\"%s\\\"\", i.c_str());\n}\n\n//\n// Tests\n//\n\n//!\n// my_struct_key == given a type V with a field named my_key of type K, will return a copy of my_key\ntemplate<class K, typename V>\nstruct my_struct_key {\n    K operator()(const V& mv) {\n        return mv.my_key;\n    }\n};\n\n// specialization returning reference to my_key.\ntemplate<class K, typename V>\nstruct my_struct_key<K&, V> {\n    const K& operator()(const V& mv) {\n        return const_cast<const K&>(mv.my_key);\n    }\n};\n\nusing tbb::internal::is_ref;\n\ntemplate<class K, class V> struct VtoKFB {\n    typedef tbb::flow::interface10::internal::type_to_key_function_body<V, K> type;\n};\n\ntemplate<typename K> struct make_hash_compare { typedef typename tbb::tbb_hash_compare<K> type; };\n\ntemplate<typename K, class V>\nvoid hash_buffer_test(const char *sname) {\n    typedef typename K_deref<K>::type KnoR;\n    tbb::flow::interface10::internal::hash_buffer<\n        K,\n        V,\n        typename VtoKFB<K, V>::type,\n        tbb::tbb_hash_compare<KnoR>\n    > my_hash_buffer;\n    const bool k_is_ref = is_ref<K>::value;\n    typedef tbb::flow::interface10::internal::type_to_key_function_body_leaf<\n        V, K, my_struct_key<K, V> > my_func_body_type;\n    typename VtoKFB<K, V>::type *kp = new my_func_body_type(my_struct_key<K, V>());\n    my_hash_buffer.set_key_func(kp);\n    REMARK(\"Running hash_buffer test on %s; is ref == %s\\n\", sname, k_is_ref ? \"true\" : \"false\");\n    V mv1, mv0;\n    bool res;\n    for(int cnt = 0; cnt < 2; ++cnt) {\n        // insert 50 items after checking they are not already in the table\n        for(int i = 0; i < 50; ++i) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            mv1.my_key = kk;\n            mv1.my_value = 0.5*i;\n            res = my_hash_buffer.find_with_key(kk, mv0);\n            ASSERT(!res, \"Found non-inserted item\");\n            res = my_hash_buffer.insert_with_key(mv1);\n            ASSERT(res, \"insert failed\");\n            res = my_hash_buffer.find_with_key(kk, mv0);\n            ASSERT(res, \"not found after insert\");\n            ASSERT(mv0.my_value==mv1.my_value, \"result not correct\");\n        }\n        // go backwards checking they are still there.\n        for(int i = 49; i>=0; --i) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            double value = 0.5*i;\n            res = my_hash_buffer.find_with_key(kk, mv0);\n            ASSERT(res, \"find failed\");\n            ASSERT(mv0.my_value==value, \"result not correct\");\n        }\n        // delete every third item, check they are gone\n        for(int i = 0; i < 50; i += 3) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            my_hash_buffer.delete_with_key(kk);\n            res = my_hash_buffer.find_with_key(kk, mv0);\n            ASSERT(!res, \"Found deleted item\");\n        }\n        // check the deleted items are gone, the non-deleted items are there.\n        for(int i = 0; i < 50; ++i) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            double value = 0.5*i;\n            if(i%3==0) {\n                res = my_hash_buffer.find_with_key(kk, mv0);\n                ASSERT(!res, \"found an item that was previously deleted\");\n            }\n            else {\n                res = my_hash_buffer.find_with_key(kk, mv0);\n                ASSERT(res, \"find failed\");\n                ASSERT(mv0.my_value==value, \"result not correct\");\n            }\n        }\n        // insert new items, check the deleted items return true, the non-deleted items return false.\n        for(int i = 0; i < 50; ++i) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            double value = 1.5*i;\n            mv1.my_key = kk;\n            mv1.my_value = value;\n            res = my_hash_buffer.insert_with_key(mv1);\n            if(i%3==0) {\n                ASSERT(res, \"didn't insert in empty slot\");\n            }\n            else {\n                ASSERT(!res, \"slot was empty on insert\");\n            }\n        }\n        // delete all items\n        for(int i = 0; i < 50; ++i) {\n            KnoR kk = index_to_key<KnoR>()(i);\n            my_hash_buffer.delete_with_key(kk);\n            res = my_hash_buffer.find_with_key(kk, mv0);\n            ASSERT(!res, \"Found deleted item\");\n        }\n    }  // perform tasks twice\n}\n\nvoid\nTestTaggedBuffers() {\n    hash_buffer_test<int, MyKeyFirst<int, double> >(\"MyKeyFirst<int,double>\");\n    hash_buffer_test<int&, MyKeyFirst<int, double> >(\"MyKeyFirst<int,double> with int&\");\n    hash_buffer_test<int, MyKeySecond<int, double> >(\"MyKeySecond<int,double>\");\n\n    hash_buffer_test<std::string, MyKeyFirst<std::string, double> >(\"MyKeyFirst<std::string,double>\");\n    hash_buffer_test<std::string&, MyKeySecond<std::string, double> >(\"MyKeySecond<std::string,double> with std::string&\");\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\ntemplate< typename T, typename NODE_TYPE >\nclass test_join_base_extract : NoAssign {\nprotected:\n    typedef typename NODE_TYPE::output_type tuple_t;\n    typedef tbb::flow::queue_node<T> in_queue_t;\n    typedef tbb::flow::queue_node<tuple_t> out_queue_t;\n\n    tbb::flow::graph &g;\n    in_queue_t &in0;\n    in_queue_t &in1;\n    in_queue_t &in2;\n    NODE_TYPE &middle;\n    out_queue_t &out0;\n    out_queue_t &out1;\n    in_queue_t *ins[3];\n    out_queue_t *outs[2];\n    typename in_queue_t::successor_type *ms_p0_ptr;\n    typename in_queue_t::successor_type *ms_p1_ptr;\n    typename out_queue_t::predecessor_type *mp_ptr;\n    typename in_queue_t::predecessor_list_type in0_p_list;\n    typename in_queue_t::successor_list_type in0_s_list;\n    typename in_queue_t::predecessor_list_type in1_p_list;\n    typename in_queue_t::successor_list_type in1_s_list;\n    typename in_queue_t::predecessor_list_type in2_p_list;\n    typename in_queue_t::successor_list_type in2_s_list;\n    typename out_queue_t::predecessor_list_type out0_p_list;\n    typename out_queue_t::successor_list_type out0_s_list;\n    typename out_queue_t::predecessor_list_type out1_p_list;\n    typename out_queue_t::successor_list_type out1_s_list;\n    typename in_queue_t::predecessor_list_type mp0_list;\n    typename in_queue_t::predecessor_list_type mp1_list;\n    typename out_queue_t::successor_list_type ms_list;\n\n    virtual void set_up_lists() {\n        in0_p_list.clear();\n        in0_s_list.clear();\n        in1_p_list.clear();\n        in1_s_list.clear();\n        in2_p_list.clear();\n        in2_s_list.clear();\n        out0_p_list.clear();\n        out0_s_list.clear();\n        out1_p_list.clear();\n        out1_s_list.clear();\n        mp0_list.clear();\n        mp1_list.clear();\n        ms_list.clear();\n\n        in0.copy_predecessors(in0_p_list);\n        in0.copy_successors(in0_s_list);\n        in1.copy_predecessors(in1_p_list);\n        in1.copy_successors(in1_s_list);\n        in2.copy_predecessors(in2_p_list);\n        in2.copy_successors(in2_s_list);\n        tbb::flow::input_port<0>(middle).copy_predecessors(mp0_list);\n        tbb::flow::input_port<1>(middle).copy_predecessors(mp1_list);\n        middle.copy_successors(ms_list);\n        out0.copy_predecessors(out0_p_list);\n        out0.copy_successors(out0_s_list);\n        out1.copy_predecessors(out1_p_list);\n        out1.copy_successors(out1_s_list);\n    }\n\n    void check_tuple(T &r, tuple_t &v) {\n        T t0 = tbb::flow::get<0>(v);\n        T t1 = tbb::flow::get<1>(v);\n        ASSERT((t0==1||t0==2)&&(t0&r)==0, \"duplicate value\");\n        r |= t0;\n        ASSERT((t1==4||t1==8)&&(t1&r)==0, \"duplicate value\");\n        r |= t1;\n    }\n\n    void make_and_validate_full_graph() {\n        /*     in0                         */\n        /*         \\                       */\n        /*           port0          out0   */\n        /*         /       |      /        */\n        /*     in1         middle          */\n        /*                 |      \\        */\n        /*     in2 - port1          out1   */\n        tbb::flow::make_edge(in0, tbb::flow::input_port<0>(middle));\n        tbb::flow::make_edge(in1, tbb::flow::input_port<0>(middle));\n        tbb::flow::make_edge(in2, tbb::flow::input_port<1>(middle));\n        tbb::flow::make_edge(middle, out0);\n        tbb::flow::make_edge(middle, out1);\n\n        set_up_lists();\n\n        ASSERT(in0.predecessor_count()==0&&in0_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in0.successor_count()==1&&in0_s_list.size()==1&&*(in0_s_list.begin())==ms_p0_ptr, \"expected 1 successor\");\n        ASSERT(in1.predecessor_count()==0&&in1_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in1.successor_count()==1&&in1_s_list.size()==1&&*(in1_s_list.begin())==ms_p0_ptr, \"expected 1 successor\");\n        ASSERT(in2.predecessor_count()==0&&in2_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in2.successor_count()==1&&in2_s_list.size()==1&&*(in2_s_list.begin())==ms_p1_ptr, \"expected 1 successor\");\n        ASSERT(tbb::flow::input_port<0>(middle).predecessor_count()==2&&mp0_list.size()==2, \"expected 2 predecessors\");\n        ASSERT(tbb::flow::input_port<1>(middle).predecessor_count()==1&&mp1_list.size()==1, \"expected 1 predecessors\");\n        ASSERT(middle.successor_count()==2&&ms_list.size()==2, \"expected 2 successors\");\n        ASSERT(out0.predecessor_count()==1&&out0_p_list.size()==1&&*(out0_p_list.begin())==mp_ptr, \"expected 1 predecessor\");\n        ASSERT(out0.successor_count()==0&&out0_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(out1.predecessor_count()==1&&out1_p_list.size()==1&&*(out1_p_list.begin())==mp_ptr, \"expected 1 predecessor\");\n        ASSERT(out1.successor_count()==0&&out1_s_list.size()==0, \"expected 0 successors\");\n\n        typename in_queue_t::predecessor_list_type::iterator mp0_list_iter = mp0_list.begin(); ++mp0_list_iter;\n        int first_pred = *(mp0_list.begin())==ins[0] ? 0 : (*(mp0_list.begin())==ins[1] ? 1 : -1);\n        int second_pred = *mp0_list_iter==ins[0] ? 0 : (*mp0_list_iter==ins[1] ? 1 : -1);\n        ASSERT(first_pred!=-1&&second_pred!=-1&&first_pred!=second_pred, \"bad predecessor(s) for middle port 0\");\n\n        ASSERT(*(mp1_list.begin())==ins[2], \"bad predecessor for middle port 1\");\n\n        typename out_queue_t::successor_list_type::iterator ms_list_iter = ms_list.begin(); ++ms_list_iter;\n        int first_succ = *(ms_list.begin())==outs[0] ? 0 : (*(ms_list.begin())==outs[1] ? 1 : -1);\n        int second_succ = *ms_list_iter==outs[0] ? 0 : (*ms_list_iter==outs[1] ? 1 : -1);\n        ASSERT(first_succ!=-1&&second_succ!=-1&&first_succ!=second_succ, \"bad successor(s) for middle\");\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n        tuple_t v;\n\n        ASSERT(in0.try_get(v_in)==false, \"buffer should not have a value\");\n        ASSERT(in1.try_get(v_in)==false, \"buffer should not have a value\");\n        ASSERT(in1.try_get(v_in)==false, \"buffer should not have a value\");\n        ASSERT(in2.try_get(v_in)==false, \"buffer should not have a value\");\n        ASSERT(in2.try_get(v_in)==false, \"buffer should not have a value\");\n\n        T r = 0;\n        while(out0.try_get(v)) {\n            check_tuple(r, v);\n            g.wait_for_all();\n        }\n        ASSERT(r==15, \"not all values received\");\n\n        r = 0;\n        while(out1.try_get(v)) {\n            check_tuple(r, v);\n            g.wait_for_all();\n        }\n        ASSERT(r==15, \"not all values received\");\n        g.wait_for_all();\n    }\n\n    void validate_partial_graph() {\n        /*     in0                         */\n        /*                                 */\n        /*           port0          out0   */\n        /*         /       |               */\n        /*     in1         middle          */\n        /*                 |      \\        */\n        /*     in2 - port1          out1   */\n        set_up_lists();\n\n        ASSERT(in0.predecessor_count()==0&&in0_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in0.successor_count()==0&&in0_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(in1.predecessor_count()==0&&in1_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in1.successor_count()==1&&in1_s_list.size()==1&&*(in1_s_list.begin())==ms_p0_ptr, \"expected 1 successor\");\n        ASSERT(in2.predecessor_count()==0&&in2_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in2.successor_count()==1&&in2_s_list.size()==1&&*(in2_s_list.begin())==ms_p1_ptr, \"expected 1 successor\");\n        ASSERT(tbb::flow::input_port<0>(middle).predecessor_count()==1&&mp0_list.size()==1&&*(mp0_list.begin())==ins[1], \"expected 1 predecessor\");\n        ASSERT(tbb::flow::input_port<1>(middle).predecessor_count()==1&&mp1_list.size()==1&&*(mp1_list.begin())==ins[2], \"expected 1 predecessor\");\n        ASSERT(middle.successor_count()==1&&ms_list.size()==1&&*(ms_list.begin())==outs[1], \"expected 1 successor\");\n        ASSERT(out0.predecessor_count()==0&&out0_p_list.size()==0, \"expected 1 predecessor\");\n        ASSERT(out0.successor_count()==0&&out0_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(out1.predecessor_count()==1&&out1_p_list.size()==1&&*(out1_p_list.begin())==mp_ptr, \"expected 1 predecessor\");\n        ASSERT(out1.successor_count()==0&&out1_s_list.size()==0, \"expected 0 successors\");\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n        tuple_t v;\n\n        ASSERT(in0.try_get(v_in)==true&&v_in==1, \"buffer should have a value of 1\");\n        ASSERT(in1.try_get(v_in)==false, \"buffer should not have a value\");\n        ASSERT(out0.try_get(v)==false, \"buffer should not have a value\");\n        ASSERT(out1.try_get(v)==true&&tbb::flow::get<0>(v)==2&&tbb::flow::get<1>(v)==8, \"buffer should have a value of < 2, 8 >\");\n        ASSERT(in0.try_get(v_in)==false, \"buffer should not have a value\");\n        g.wait_for_all();\n        g.reset();  // for queueing and tag_matching the 4 is now in the join\n    }\n\n    void validate_empty_graph() {\n        /*     in0                         */\n        /*                                 */\n        /*            port0         out0   */\n        /*                |                */\n        /*     in1         middle          */\n        /*                 |               */\n        /*     in2   port1          out1   */\n        set_up_lists();\n\n        ASSERT(in0.predecessor_count()==0&&in0_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in0.successor_count()==0&&in0_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(in1.predecessor_count()==0&&in1_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in1.successor_count()==0&&in1_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(in2.predecessor_count()==0&&in2_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(in2.successor_count()==0&&in2_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(tbb::flow::input_port<0>(middle).predecessor_count()==0&&mp0_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(tbb::flow::input_port<1>(middle).predecessor_count()==0&&mp1_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(middle.successor_count()==0&&ms_list.size()==0, \"expected 0 successors\");\n        ASSERT(out0.predecessor_count()==0&&out0_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(out0.successor_count()==0&&out0_s_list.size()==0, \"expected 0 successors\");\n        ASSERT(out1.predecessor_count()==0&&out1_p_list.size()==0, \"expected 0 predecessors\");\n        ASSERT(out1.successor_count()==0&&out1_s_list.size()==0, \"expected 0 successors\");\n\n        in0.try_put(1);\n        in1.try_put(2);\n        in2.try_put(8);\n        in2.try_put(4);\n        g.wait_for_all();\n\n        T v_in;\n        tuple_t v;\n\n        ASSERT(in0.try_get(v_in)==true&&v_in==1, \"buffer should have a value of 1\");\n        ASSERT(in1.try_get(v_in)==true&&v_in==2, \"buffer should have a value of 2\");\n        ASSERT(in2.try_get(v_in)==true&&v_in==8, \"buffer should have a value of 8\");\n        ASSERT(in2.try_get(v_in)==true&&v_in==4, \"buffer should have a value of 4\");\n        ASSERT(out0.try_get(v)==false, \"buffer should not have a value\");\n        ASSERT(out1.try_get(v)==false, \"buffer should not have a value\");\n        g.wait_for_all();\n        g.reset(); // NOTE: this should not be necessary!!!!!  But it is!!!!\n    }\n\npublic:\n\n    test_join_base_extract(tbb::flow::graph &_g, in_queue_t &_in0, in_queue_t &_in1, in_queue_t &_in2, NODE_TYPE &m, out_queue_t &_out0, out_queue_t &_out1):\n        g(_g), in0(_in0), in1(_in1), in2(_in2), middle(m), out0(_out0), out1(_out1) {\n        ins[0] = &in0;\n        ins[1] = &in1;\n        ins[2] = &in2;\n        outs[0] = &out0;\n        outs[1] = &out1;\n        ms_p0_ptr = static_cast< typename in_queue_t::successor_type * >(&tbb::flow::input_port<0>(middle));\n        ms_p1_ptr = static_cast< typename in_queue_t::successor_type * >(&tbb::flow::input_port<1>(middle));\n        mp_ptr = static_cast< typename out_queue_t::predecessor_type *>(&middle);\n    }\n\n    virtual ~test_join_base_extract() {}\n\n    void run_tests() {\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        in0.extract();\n        out0.extract();\n        REMARK(\"partial graph\\n\");\n        validate_partial_graph();\n\n        in1.extract();\n        in2.extract();\n        out1.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        in0.extract();\n        in1.extract();\n        in2.extract();\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n\n        out0.extract();\n        out1.extract();\n        middle.extract();\n        REMARK(\"empty graph\\n\");\n        validate_empty_graph();\n\n        REMARK(\"full graph\\n\");\n        make_and_validate_full_graph();\n    }\n};\n\ntemplate< typename T, typename NODE_TYPE >\nclass test_join_extract : public test_join_base_extract< T, NODE_TYPE > {\nprotected:\n    typedef typename NODE_TYPE::output_type tuple_t;\n    typedef tbb::flow::queue_node<T> in_queue_t;\n    typedef tbb::flow::queue_node<tuple_t> out_queue_t;\n\n    tbb::flow::graph my_g;\n    in_queue_t my_in0;\n    in_queue_t my_in1;\n    in_queue_t my_in2;\n    NODE_TYPE my_middle;\n    out_queue_t my_out0;\n    out_queue_t my_out1;\n\npublic:\n    test_join_extract(): test_join_base_extract<T, NODE_TYPE>(my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1),\n        my_in0(my_g), my_in1(my_g), my_in2(my_g), my_middle(my_g), my_out0(my_g), my_out1(my_g) { }\n};\n\ntemplate< typename T >\nclass test_join_extract<T, tbb::flow::join_node< tbb::flow::tuple<T, T>, tbb::flow::tag_matching> > :\n    public test_join_base_extract< T, tbb::flow::join_node< tbb::flow::tuple<T, T>, tbb::flow::tag_matching> > {\nprotected:\n    typedef tbb::flow::join_node< tbb::flow::tuple<T, T>, tbb::flow::tag_matching> my_node_t;\n\n    typedef typename my_node_t::output_type tuple_t;\n    typedef tbb::flow::queue_node<T> in_queue_t;\n    typedef tbb::flow::queue_node<tuple_t> out_queue_t;\n\n    tbb::flow::graph my_g;\n    in_queue_t my_in0;\n    in_queue_t my_in1;\n    in_queue_t my_in2;\n    my_node_t my_middle;\n    out_queue_t my_out0;\n    out_queue_t my_out1;\n    struct tag_match_0 { size_t operator()(T v) { return v; } };\n    struct tag_match_1 { size_t operator()(T v) { return v/4; } };\npublic:\n    test_join_extract(): test_join_base_extract<T, my_node_t>(my_g, my_in0, my_in1, my_in2, my_middle, my_out0, my_out1),\n        my_in0(my_g), my_in1(my_g), my_in2(my_g), my_middle(my_g, tag_match_0(), tag_match_1()), my_out0(my_g), my_out1(my_g) { }\n};\n#endif\n\nstruct threebyte {\n    unsigned char b1;\n    unsigned char b2;\n    unsigned char b3;\n    threebyte(int i = 0) {\n        b1 = (unsigned char)(i&0xFF);\n        b2 = (unsigned char)((i>>8)&0xFF);\n        b3 = (unsigned char)((i>>16)&0xFF);\n    }\n    threebyte(const threebyte &other): b1(other.b1), b2(other.b2), b3(other.b3) { }\n    operator int() const { return (int)(b1+(b2<<8)+(b3<<16)); }\n};\n\nconst int Count = 150;\n\nconst int Recirc_count = 1000;  // number of tuples to be generated\nconst int MaxPorts = 10;\nconst int MaxNSources = 5; // max # of source_nodes to register for each join_node input in parallel test\nbool outputCheck[MaxPorts][Count];  // for checking output\n\nvoid\ncheck_outputCheck(int nUsed, int maxCnt) {\n    for(int i = 0; i < nUsed; ++i) {\n        for(int j = 0; j < maxCnt; ++j) {\n            ASSERT(outputCheck[i][j], NULL);\n        }\n    }\n}\n\nvoid\nreset_outputCheck(int nUsed, int maxCnt) {\n    for(int i = 0; i < nUsed; ++i) {\n        for(int j = 0; j < maxCnt; ++j) {\n            outputCheck[i][j] = false;\n        }\n    }\n}\n\ntemplate<typename T>\nclass name_of {\npublic:\n    static const char* name() { return  \"Unknown\"; }\n};\ntemplate<typename T>\nclass name_of<check_type<T> > {\npublic:\n    static const char* name() { return \"checktype\"; }\n};\ntemplate<>\nclass name_of<int> {\npublic:\n    static const char* name() { return  \"int\"; }\n};\ntemplate<>\nclass name_of<float> {\npublic:\n    static const char* name() { return  \"float\"; }\n};\ntemplate<>\nclass name_of<double> {\npublic:\n    static const char* name() { return  \"double\"; }\n};\ntemplate<>\nclass name_of<long> {\npublic:\n    static const char* name() { return  \"long\"; }\n};\ntemplate<>\nclass name_of<short> {\npublic:\n    static const char* name() { return  \"short\"; }\n};\ntemplate<>\nclass name_of<threebyte> {\npublic:\n    static const char* name() { return \"threebyte\"; }\n};\ntemplate<>\nclass name_of<std::string> {\npublic:\n    static const char* name() { return \"std::string\"; }\n};\ntemplate<typename K, typename V>\nclass name_of<MyKeyFirst<K, V> > {\npublic:\n    static const char* name() { return \"MyKeyFirst<K,V>\"; }\n};\ntemplate<typename K, typename V>\nclass name_of<MyKeySecond<K, V> > {\npublic:\n    static const char* name() { return \"MyKeySecond<K,V>\"; }\n};\n\n// The additional policy to differ message based key matching from usual key matching.\n// It only has sense for the test because join_node is created with the key_matching policy for the both cases.\ntemplate <typename K, typename KHash = tbb::tbb_hash_compare<typename tbb::internal::strip<K>::type > >\nstruct message_based_key_matching {};\n\n// test for key_matching\ntemplate<class JP>\nstruct is_key_matching_join {\n    static const bool value;\n    typedef int key_type;  // have to define it to something\n};\n\ntemplate<class JP>\nconst bool is_key_matching_join<JP>::value = false;\n\ntemplate<class K, class KHash>\nstruct is_key_matching_join<tbb::flow::key_matching<K, KHash> > {\n    static const bool value;\n    typedef K key_type;\n};\n\ntemplate<class K, class KHash>\nconst bool is_key_matching_join<tbb::flow::key_matching<K, KHash> >::value = true;\n\ntemplate<class K, class KHash>\nstruct is_key_matching_join<message_based_key_matching<K, KHash> > {\n    static const bool value;\n    typedef K key_type;\n};\n\ntemplate<class K, class KHash>\nconst bool is_key_matching_join<message_based_key_matching<K, KHash> >::value = true;\n\n// for recirculating tags, input is tuple<index,continue_msg>\n// output is index*my_mult cast to the right type\ntemplate<typename TT>\nclass recirc_func_body {\n    TT my_mult;\npublic:\n    typedef tbb::flow::tuple<int, tbb::flow::continue_msg> input_type;\n    recirc_func_body(TT multiplier): my_mult(multiplier) {}\n    recirc_func_body(const recirc_func_body &other): my_mult(other.my_mult) { }\n    void operator=(const recirc_func_body &other) { my_mult = other.my_mult; }\n    TT operator()(const input_type &v) {\n        return TT(tbb::flow::get<0>(v)) * my_mult;\n    }\n};\n\nstatic int input_count;  // source_nodes are serial\n\n// emit input_count continue_msg\nclass recirc_source_node_body {\npublic:\n    bool operator()(tbb::flow::continue_msg &v) {\n        --input_count;\n        v = tbb::flow::continue_msg();\n        return 0<=input_count;\n    }\n};\n\n// T must be arithmetic, and shouldn't wrap around for reasonable sizes of Count (which is now 150, and maxPorts is 10,\n// so the max number generated right now is 1500 or so.)  Source will generate a series of TT with value\n// (init_val + (i-1)*addend) * my_mult, where i is the i-th invocation of the body.  We are attaching addend\n// source nodes to a join_port, and each will generate part of the numerical series the port is expecting\n// to receive.  If there is only one source node, the series order will be maintained; if more than one,\n// this is not guaranteed.\ntemplate<typename TT, size_t INDEX>\nclass source_body {\n    int my_count;\n    int addend;\npublic:\n    source_body(int init_val, int addto): my_count(init_val), addend(addto) { }\n    void operator=(const source_body& other) { my_count = other.my_count; addend = other.addend; }\n    bool operator()(TT &v) {\n        int lc = my_count;\n        v = make_thingie<TT, INDEX>()(my_count);\n        my_count += addend;\n        return lc < Count;\n    }\n};\n\ntemplate<typename TT>\nclass tag_func {\n    TT my_mult;\npublic:\n    tag_func(TT multiplier): my_mult(multiplier) { }\n    void operator=(const tag_func& other) { my_mult = other.my_mult; }\n    // operator() will return [0 .. Count)\n    tbb::flow::tag_value operator()(TT v) {\n        tbb::flow::tag_value t = tbb::flow::tag_value(v/my_mult);\n        return t;\n    }\n};\n\ntemplate <class JP>\nstruct filter_out_message_based_key_matching {\n    typedef JP policy;\n};\n\ntemplate <typename K, typename KHash>\nstruct filter_out_message_based_key_matching<message_based_key_matching<K, KHash> > {\n    // To have message based key matching in join_node, the key_matchig policy should be specified.\n    typedef tbb::flow::key_matching<K, KHash> policy;\n};\n\n// allocator for join_node.  This is specialized for tag_matching and key_matching joins because they require a variable number\n// of tag_value methods passed to the constructor\n\ntemplate<int N, typename JType, class JP>\nclass makeJoin {\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g);\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\n// for general key_matching case, each type in the tuple is a class that has the my_key field and the my_value field.\n//\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<2, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<2, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\n#if MAX_TUPLE_TEST_SIZE >= 3\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<3, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<3, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 4\n\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<4, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<4, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 5\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<5, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<5, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 6\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<6, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>(),\n            my_struct_key<K, T5>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<6, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6)),\n            tag_func<T5>(T5(7))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n\n#if MAX_TUPLE_TEST_SIZE >= 7\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<7, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>(),\n            my_struct_key<K, T5>(),\n            my_struct_key<K, T6>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<7, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6)),\n            tag_func<T5>(T5(7)),\n            tag_func<T6>(T6(8))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n\n#if MAX_TUPLE_TEST_SIZE >= 8\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<8, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>(),\n            my_struct_key<K, T5>(),\n            my_struct_key<K, T6>(),\n            my_struct_key<K, T7>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<8, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6)),\n            tag_func<T5>(T5(7)),\n            tag_func<T6>(T6(8)),\n            tag_func<T7>(T7(9))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n\n#if MAX_TUPLE_TEST_SIZE >= 9\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<9, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\n    typedef typename tbb::flow::tuple_element<8, TType>::type T8;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>(),\n            my_struct_key<K, T5>(),\n            my_struct_key<K, T6>(),\n            my_struct_key<K, T7>(),\n            my_struct_key<K, T8>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<9, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\n    typedef typename tbb::flow::tuple_element<8, TType>::type T8;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6)),\n            tag_func<T5>(T5(7)),\n            tag_func<T6>(T6(8)),\n            tag_func<T7>(T7(9)),\n            tag_func<T8>(T8(10))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n\n#if MAX_TUPLE_TEST_SIZE >= 10\ntemplate<typename JType, typename K, typename KHash>\nclass makeJoin<10, JType, tbb::flow::key_matching<K, KHash> > {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\n    typedef typename tbb::flow::tuple_element<8, TType>::type T8;\n    typedef typename tbb::flow::tuple_element<9, TType>::type T9;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            my_struct_key<K, T0>(),\n            my_struct_key<K, T1>(),\n            my_struct_key<K, T2>(),\n            my_struct_key<K, T3>(),\n            my_struct_key<K, T4>(),\n            my_struct_key<K, T5>(),\n            my_struct_key<K, T6>(),\n            my_struct_key<K, T7>(),\n            my_struct_key<K, T8>(),\n            my_struct_key<K, T9>()\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n\ntemplate<typename JType>\nclass makeJoin<10, JType, tbb::flow::tag_matching> {\n    typedef typename JType::output_type TType;\n    typedef typename tbb::flow::tuple_element<0, TType>::type T0;\n    typedef typename tbb::flow::tuple_element<1, TType>::type T1;\n    typedef typename tbb::flow::tuple_element<2, TType>::type T2;\n    typedef typename tbb::flow::tuple_element<3, TType>::type T3;\n    typedef typename tbb::flow::tuple_element<4, TType>::type T4;\n    typedef typename tbb::flow::tuple_element<5, TType>::type T5;\n    typedef typename tbb::flow::tuple_element<6, TType>::type T6;\n    typedef typename tbb::flow::tuple_element<7, TType>::type T7;\n    typedef typename tbb::flow::tuple_element<8, TType>::type T8;\n    typedef typename tbb::flow::tuple_element<9, TType>::type T9;\npublic:\n    static JType *create(tbb::flow::graph& g) {\n        JType *temp = new JType(g,\n            tag_func<T0>(T0(2)),\n            tag_func<T1>(T1(3)),\n            tag_func<T2>(T2(4)),\n            tag_func<T3>(T3(5)),\n            tag_func<T4>(T4(6)),\n            tag_func<T5>(T5(7)),\n            tag_func<T6>(T6(8)),\n            tag_func<T7>(T7(9)),\n            tag_func<T8>(T8(10)),\n            tag_func<T9>(T9(11))\n        );\n        return temp;\n    }\n    static void destroy(JType *p) { delete p; }\n};\n#endif\n\n// holder for source_node pointers for eventual deletion\n\nstatic void* all_source_nodes[MaxPorts][MaxNSources];\n\ntemplate<int ELEM, typename JNT>\nclass source_node_helper {\npublic:\n    typedef JNT join_node_type;\n    typedef tbb::flow::join_node<tbb::flow::tuple<int, tbb::flow::continue_msg>, tbb::flow::reserving> input_join_type;\n    typedef typename join_node_type::output_type TT;\n    typedef typename tbb::flow::tuple_element<ELEM-1, TT>::type IT;\n    typedef typename tbb::flow::source_node<IT> my_source_node_type;\n    typedef typename tbb::flow::function_node<tbb::flow::tuple<int, tbb::flow::continue_msg>, IT> my_recirc_function_type;\n    static void print_remark(const char * str) {\n        source_node_helper<ELEM-1, JNT>::print_remark(str);\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {\n        for(int i = 0; i < nInputs; ++i) {\n            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT, ELEM>(i, nInputs));\n            tbb::flow::make_edge(*new_node, tbb::flow::input_port<ELEM-1>(my_join));\n            all_source_nodes[ELEM-1][i] = (void *)new_node;\n        }\n        // add the next source_node\n        source_node_helper<ELEM-1, JNT>::add_source_nodes(my_join, g, nInputs);\n    }\n\n    static void add_recirc_func_nodes(join_node_type &my_join, input_join_type &my_input, tbb::flow::graph &g) {\n        my_recirc_function_type *new_node = new my_recirc_function_type(g, tbb::flow::unlimited, recirc_func_body<IT>((IT)(ELEM+1)));\n        tbb::flow::make_edge(*new_node, tbb::flow::input_port<ELEM-1>(my_join));\n        tbb::flow::make_edge(my_input, *new_node);\n        all_source_nodes[ELEM-1][0] = (void *)new_node;\n        source_node_helper<ELEM-1, JNT>::add_recirc_func_nodes(my_join, my_input, g);\n    }\n\n    static void only_check_value(const int i, const TT &v) {\n        ASSERT(tbb::flow::get<ELEM-1>(v)==(IT)(i*(ELEM+1)), NULL);\n        source_node_helper<ELEM-1, JNT>::only_check_value(i, v);\n    }\n\n    static void check_value(int i, TT &v, bool is_serial) {\n        // the fetched value will match only if there is only one source_node.\n        ASSERT(!is_serial||tbb::flow::get<ELEM-1>(v)==(IT)(i*(ELEM+1)), NULL);\n        // tally the fetched value.\n        int ival = (int)tbb::flow::get<ELEM-1>(v);\n        ASSERT(!(ival%(ELEM+1)), NULL);\n        ival /= (ELEM+1);\n        ASSERT(!outputCheck[ELEM-1][ival], NULL);\n        outputCheck[ELEM-1][ival] = true;\n        source_node_helper<ELEM-1, JNT>::check_value(i, v, is_serial);\n    }\n    static void remove_source_nodes(join_node_type& my_join, int nInputs) {\n        for(int i = 0; i< nInputs; ++i) {\n            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[ELEM-1][i]);\n            tbb::flow::remove_edge(*dp, tbb::flow::input_port<ELEM-1>(my_join));\n            delete dp;\n        }\n        source_node_helper<ELEM-1, JNT>::remove_source_nodes(my_join, nInputs);\n    }\n\n    static void remove_recirc_func_nodes(join_node_type& my_join, input_join_type &my_input) {\n        my_recirc_function_type *fn = reinterpret_cast<my_recirc_function_type *>(all_source_nodes[ELEM-1][0]);\n        tbb::flow::remove_edge(*fn, tbb::flow::input_port<ELEM-1>(my_join));\n        tbb::flow::remove_edge(my_input, *fn);\n        delete fn;\n        source_node_helper<ELEM-1, JNT>::remove_recirc_func_nodes(my_join, my_input);\n    }\n};\n\ntemplate<typename JNT>\nclass source_node_helper<1, JNT> {\n    typedef JNT join_node_type;\n    typedef tbb::flow::join_node<tbb::flow::tuple<int, tbb::flow::continue_msg>, tbb::flow::reserving> input_join_type;\n    typedef typename join_node_type::output_type TT;\n    typedef typename tbb::flow::tuple_element<0, TT>::type IT;\n    typedef typename tbb::flow::source_node<IT> my_source_node_type;\n    typedef typename tbb::flow::function_node<tbb::flow::tuple<int, tbb::flow::continue_msg>, IT> my_recirc_function_type;\npublic:\n    static void print_remark(const char * str) {\n        REMARK(\"%s< %s\", str, name_of<IT>::name());\n    }\n    static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {\n        for(int i = 0; i < nInputs; ++i) {\n            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT, 1>(i, nInputs));\n            tbb::flow::make_edge(*new_node, tbb::flow::input_port<0>(my_join));\n            all_source_nodes[0][i] = (void *)new_node;\n        }\n    }\n\n    static void add_recirc_func_nodes(join_node_type &my_join, input_join_type &my_input, tbb::flow::graph &g) {\n        my_recirc_function_type *new_node = new my_recirc_function_type(g, tbb::flow::unlimited, recirc_func_body<IT>((IT)(2)));\n        tbb::flow::make_edge(*new_node, tbb::flow::input_port<0>(my_join));\n        tbb::flow::make_edge(my_input, *new_node);\n        all_source_nodes[0][0] = (void *)new_node;\n    }\n\n    static void only_check_value(const int i, const TT &v) {\n        ASSERT(tbb::flow::get<0>(v)==(IT)(i*2), NULL);\n    }\n\n    static void check_value(int i, TT &v, bool is_serial) {\n        ASSERT(!is_serial||tbb::flow::get<0>(v)==(IT)(i*(2)), NULL);\n        int ival = (int)tbb::flow::get<0>(v);\n        ASSERT(!(ival%2), NULL);\n        ival /= 2;\n        ASSERT(!outputCheck[0][ival], NULL);\n        outputCheck[0][ival] = true;\n    }\n    static void remove_source_nodes(join_node_type& my_join, int nInputs) {\n        for(int i = 0; i < nInputs; ++i) {\n            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[0][i]);\n            tbb::flow::remove_edge(*dp, tbb::flow::input_port<0>(my_join));\n            delete dp;\n        }\n    }\n\n    static void remove_recirc_func_nodes(join_node_type& my_join, input_join_type &my_input) {\n        my_recirc_function_type *fn = reinterpret_cast<my_recirc_function_type *>(all_source_nodes[0][0]);\n        tbb::flow::remove_edge(*fn, tbb::flow::input_port<0>(my_join));\n        tbb::flow::remove_edge(my_input, *fn);\n        delete fn;\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n// Suppress \"conditional expression is constant\" warning.\n#pragma warning( push )\n#pragma warning( disable: 4127 )\n#endif\n\ntemplate<typename JType, class JP>\nclass parallel_test {\npublic:\n    typedef typename JType::output_type TType;\n    typedef typename is_key_matching_join<JP>::key_type            key_type;\n    static void test() {\n        const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;\n        const bool is_key_matching = is_key_matching_join<JP>::value;\n\n        TType v;\n        source_node_helper<TUPLE_SIZE, JType>::print_remark(\"Parallel test of join_node\");\n        REMARK(\" > \");\n        if(is_key_matching) {\n            REMARK(\"with K == %s\", name_of<typename K_deref<typename is_key_matching_join<JP>::key_type>::type >::name());\n            if(is_ref<typename is_key_matching_join<JP>::key_type>::value) {\n                REMARK(\"&\");\n            }\n        }\n        REMARK(\"\\n\");\n        for(int i = 0; i < MaxPorts; ++i) {\n            for(int j = 0; j < MaxNSources; ++j) {\n                all_source_nodes[i][j] = NULL;\n            }\n        }\n        for(int nInputs = 1; nInputs<=MaxNSources; ++nInputs) {\n            tbb::flow::graph g;\n            bool not_out_of_order = (nInputs==1)&&(!is_key_matching);\n            JType* my_join = makeJoin<TUPLE_SIZE, JType, JP>::create(g);\n            tbb::flow::queue_node<TType> outq1(g);\n            tbb::flow::queue_node<TType> outq2(g);\n\n            tbb::flow::make_edge(*my_join, outq1);\n            tbb::flow::make_edge(*my_join, outq2);\n\n            source_node_helper<TUPLE_SIZE, JType>::add_source_nodes((*my_join), g, nInputs);\n\n            g.wait_for_all();\n\n            reset_outputCheck(TUPLE_SIZE, Count);\n            for(int i = 0; i < Count; ++i) {\n                ASSERT(outq1.try_get(v), NULL);\n                source_node_helper<TUPLE_SIZE, JType>::check_value(i, v, not_out_of_order);\n            }\n\n            check_outputCheck(TUPLE_SIZE, Count);\n            reset_outputCheck(TUPLE_SIZE, Count);\n\n            for(int i = 0; i < Count; i++) {\n                ASSERT(outq2.try_get(v), NULL);;\n                source_node_helper<TUPLE_SIZE, JType>::check_value(i, v, not_out_of_order);\n            }\n            check_outputCheck(TUPLE_SIZE, Count);\n\n            ASSERT(!outq1.try_get(v), NULL);\n            ASSERT(!outq2.try_get(v), NULL);\n\n            source_node_helper<TUPLE_SIZE, JType>::remove_source_nodes((*my_join), nInputs);\n            tbb::flow::remove_edge(*my_join, outq1);\n            tbb::flow::remove_edge(*my_join, outq2);\n            makeJoin<TUPLE_SIZE, JType, JP>::destroy(my_join);\n        }\n    }\n};\n\n\ntemplate<int ELEM, typename JType>\nclass serial_queue_helper {\npublic:\n    typedef typename JType::output_type TT;\n    typedef typename tbb::flow::tuple_element<ELEM-1, TT>::type IT;\n    typedef typename tbb::flow::queue_node<IT> my_queue_node_type;\n    static void print_remark() {\n        serial_queue_helper<ELEM-1, JType>::print_remark();\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void add_queue_nodes(tbb::flow::graph &g, JType &my_join) {\n        serial_queue_helper<ELEM-1, JType>::add_queue_nodes(g, my_join);\n        my_queue_node_type *new_node = new my_queue_node_type(g);\n        tbb::flow::make_edge(*new_node, tbb::flow::get<ELEM-1>(my_join.input_ports()));\n        all_source_nodes[ELEM-1][0] = (void *)new_node;\n    }\n\n    static void fill_one_queue(int maxVal) {\n        // fill queue to \"left\" of me\n        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);\n        serial_queue_helper<ELEM-1, JType>::fill_one_queue(maxVal);\n        for(int i = 0; i < maxVal; ++i) {\n            ASSERT(qptr->try_put(make_thingie<IT, ELEM>()(i)), NULL);\n        }\n    }\n\n    static void put_one_queue_val(int myVal) {\n        // put this val to my \"left\".\n        serial_queue_helper<ELEM-1, JType>::put_one_queue_val(myVal);\n        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);\n        ASSERT(qptr->try_put(make_thingie<IT, ELEM>()(myVal)), NULL);\n    }\n\n    static void check_queue_value(int i, TT &v) {\n        serial_queue_helper<ELEM-1, JType>::check_queue_value(i, v);\n        ASSERT(cast_from<IT>::my_int_val(tbb::flow::get<ELEM-1>(v))==i * (ELEM+1), NULL);\n    }\n\n    static void remove_queue_nodes(JType &my_join) {\n        my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);\n        tbb::flow::remove_edge(*vptr, tbb::flow::get<ELEM-1>(my_join.input_ports()));\n        serial_queue_helper<ELEM-1, JType>::remove_queue_nodes(my_join);\n        delete vptr;\n    }\n};\n\ntemplate<typename JType>\nclass serial_queue_helper<1, JType> {\npublic:\n    typedef typename JType::output_type TT;\n    typedef typename tbb::flow::tuple_element<0, TT>::type IT;\n    typedef typename tbb::flow::queue_node<IT> my_queue_node_type;\n    static void print_remark() {\n        REMARK(\"Serial test of join_node< %s\", name_of<IT>::name());\n    }\n\n    static void add_queue_nodes(tbb::flow::graph &g, JType &my_join) {\n        my_queue_node_type *new_node = new my_queue_node_type(g);\n        tbb::flow::make_edge(*new_node, tbb::flow::input_port<0>(my_join));\n        all_source_nodes[0][0] = (void *)new_node;\n    }\n\n    static void fill_one_queue(int maxVal) {\n        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);\n        for(int i = 0; i < maxVal; ++i) {\n            ASSERT(qptr->try_put(make_thingie<IT, 1>()(i)), NULL);\n        }\n    }\n\n    static void put_one_queue_val(int myVal) {\n        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);\n        IT my_val = make_thingie<IT, 1>()(myVal);\n        ASSERT(qptr->try_put(my_val), NULL);\n    }\n\n    static void check_queue_value(int i, TT &v) {\n        ASSERT(cast_from<IT>::my_int_val(tbb::flow::get<0>(v))==i*2, NULL);\n    }\n\n    static void remove_queue_nodes(JType &my_join) {\n        my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);\n        tbb::flow::remove_edge(*vptr, tbb::flow::get<0>(my_join.input_ports()));\n        delete vptr;\n    }\n};\n\n//\n// Single reservable predecessor at each port, single accepting successor\n//   * put to buffer before port0, then put to buffer before port1, ...\n//   * fill buffer before port0 then fill buffer before port1, ...\n\ntemplate<typename JType, class JP>\nvoid test_one_serial(JType &my_join, tbb::flow::graph &g) {\n    typedef typename JType::output_type TType;\n    static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;\n    bool is_key_matching = is_key_matching_join<JP>::value;\n    std::vector<bool> flags;\n    serial_queue_helper<TUPLE_SIZE, JType>::add_queue_nodes(g, my_join);\n    typedef TType q3_input_type;\n    tbb::flow::queue_node< q3_input_type >  q3(g);\n\n    tbb::flow::make_edge(my_join, q3);\n\n    // fill each queue with its value one-at-a-time\n    flags.clear();\n    for(int i = 0; i < Count; ++i) {\n        serial_queue_helper<TUPLE_SIZE, JType>::put_one_queue_val(i);\n        flags.push_back(false);\n    }\n\n    g.wait_for_all();\n    for(int i = 0; i < Count; ++i) {\n        q3_input_type v;\n        g.wait_for_all();\n        ASSERT(q3.try_get(v), \"Error in try_get()\");\n        if(is_key_matching) {\n            // because we look up tags in the hash table, the output may be out of order.\n            int j = int(tbb::flow::get<0>(v))/2;  // figure what the index should be\n            serial_queue_helper<TUPLE_SIZE, JType>::check_queue_value(j, v);\n            flags[j] = true;\n        }\n        else {\n            serial_queue_helper<TUPLE_SIZE, JType>::check_queue_value(i, v);\n        }\n    }\n\n    if(is_key_matching) {\n        for(int i = 0; i < Count; ++i) {\n            ASSERT(flags[i], NULL);\n            flags[i] = false;\n        }\n    }\n\n    // fill each queue completely before filling the next.\n    serial_queue_helper<TUPLE_SIZE, JType>::fill_one_queue(Count);\n\n    g.wait_for_all();\n    for(int i = 0; i < Count; ++i) {\n        q3_input_type v;\n        g.wait_for_all();\n        ASSERT(q3.try_get(v), \"Error in try_get()\");\n        if(is_key_matching) {\n            int j = int(tbb::flow::get<0>(v))/2;\n            serial_queue_helper<TUPLE_SIZE, JType>::check_queue_value(j, v);\n            flags[i] = true;\n        }\n        else {\n            serial_queue_helper<TUPLE_SIZE, JType>::check_queue_value(i, v);\n        }\n    }\n\n    if(is_key_matching) {\n        for(int i = 0; i < Count; ++i) {\n            ASSERT(flags[i], NULL);\n        }\n    }\n\n    serial_queue_helper<TUPLE_SIZE, JType>::remove_queue_nodes(my_join);\n\n}\n\ntemplate<typename JType, class JP>\nclass serial_test {\n    typedef typename JType::output_type TType;\npublic:\n    static void test() {\n        tbb::flow::graph g;\n        std::vector<bool> flags;\n        bool is_key_matching = is_key_matching_join<JP>::value;\n        flags.reserve(Count);\n\n        const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;\n        static const int ELEMS = 3;\n\n        JType* my_join = makeJoin<TUPLE_SIZE, JType, JP>::create(g);\n        test_input_ports_return_ref(*my_join);\n        serial_queue_helper<TUPLE_SIZE, JType>::print_remark(); REMARK(\" >\");\n        if(is_key_matching) {\n            REMARK(\"with K == %s\", name_of<typename K_deref<typename is_key_matching_join<JP>::key_type>::type >::name());\n            if(is_ref<typename is_key_matching_join<JP>::key_type>::value) {\n                REMARK(\"&\");\n            }\n        }\n        REMARK(\"\\n\");\n\n        test_one_serial<JType, JP>(*my_join, g);\n        // build the vector with copy construction from the used join node.\n        std::vector<JType>join_vector(ELEMS, *my_join);\n        // destroy the tired old join_node in case we're accidentally reusing pieces of it.\n        makeJoin<TUPLE_SIZE, JType, JP>::destroy(my_join);\n\n        for(int e = 0; e < ELEMS; ++e) {  // exercise each of the vector elements\n            test_one_serial<JType, JP>(join_vector[e], g);\n        }\n    }\n\n}; // serial_test\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif\n\ntemplate<\n    template<typename, class > class TestType,  // serial_test or parallel_test\n    typename OutputTupleType,           // type of the output of the join\n    class J>                 // graph_buffer_policy (reserving, queueing, tag_matching or key_matching)\n    class generate_test {\n    public:\n        typedef tbb::flow::join_node<OutputTupleType, typename filter_out_message_based_key_matching<J>::policy> join_node_type;\n        static void do_test() {\n            TestType<join_node_type, J>::test();\n        }\n};\n\ntemplate<class JP>\nvoid test_input_port_policies();\n\n// join_node (reserving) does not consume inputs until an item is available at\n// every input.  It tries to reserve each input, and if any fails it releases the\n// reservation.  When it builds a tuple it broadcasts to all its successors and\n// consumes all the inputs.\n//\n// So our test will put an item at one input port, then attach another node to the\n// same node (a queue node in this case).  The second successor should receive the\n// item in the queue, emptying it.\n//\n// We then place an item in the second input queue, and check the output queues; they\n// should still be empty.  Then we place an item in the first queue; the output queues\n// should then receive a tuple.\n//\n// we then attach another function node to the second input.  It should not receive\n// an item, verifying that the item in the queue is consumed.\ntemplate<>\nvoid test_input_port_policies<tbb::flow::reserving>() {\n    tbb::flow::graph g;\n    typedef tbb::flow::join_node<tbb::flow::tuple<int, int>, tbb::flow::reserving > JType; // two-phase is the default policy\n                                                                                           // create join_node<type0,type1> jn\n    JType jn(g);\n    // create output_queue oq0, oq1\n    typedef JType::output_type OQType;\n    tbb::flow::queue_node<OQType> oq0(g);\n    tbb::flow::queue_node<OQType> oq1(g);\n    // create iq0, iq1\n    typedef tbb::flow::queue_node<int> IQType;\n    IQType iq0(g);\n    IQType iq1(g);\n    // create qnp, qnq\n    IQType qnp(g);\n    IQType qnq(g);\n    REMARK(\"Testing policies of join_node<reserving> input ports\\n\");\n    // attach jn to oq0, oq1\n    tbb::flow::make_edge(jn, oq0);\n    tbb::flow::make_edge(jn, oq1);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(jn.successor_count()==2, NULL);\n    JType::successor_list_type my_succs;\n    jn.copy_successors(my_succs);\n    ASSERT(my_succs.size()==2, NULL);\n#endif\n    // attach iq0, iq1 to jn\n    tbb::flow::make_edge(iq0, tbb::flow::get<0>(jn.input_ports()));\n    tbb::flow::make_edge(iq1, tbb::flow::get<1>(jn.input_ports()));\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(tbb::flow::get<0>(jn.input_ports()).predecessor_count()==1, NULL);\n    tbb::flow::tuple_element<0, JType::input_type>::type::predecessor_list_type my_0preds;\n    tbb::flow::input_port<0>(jn).copy_predecessors(my_0preds);\n    ASSERT(my_0preds.size()==1, NULL);\n#endif\n    for(int loop = 0; loop < 3; ++loop) {\n        // place one item in iq0\n        ASSERT(iq0.try_put(1), \"Error putting to iq1\");\n        // attach iq0 to qnp\n        tbb::flow::make_edge(iq0, qnp);\n        // qnp should have an item in it.\n        g.wait_for_all();\n        {\n            int i;\n            ASSERT(qnp.try_get(i)&&i==1, \"Error in item fetched by qnp\");\n        }\n        // place item in iq1\n        ASSERT(iq1.try_put(2), \"Error putting to iq1\");\n        // oq0, oq1 should be empty\n        g.wait_for_all();\n        {\n            OQType t1;\n            ASSERT(!oq0.try_get(t1)&&!oq1.try_get(t1), \"oq0 and oq1 not empty\");\n        }\n        // detach qnp from iq0\n        tbb::flow::remove_edge(iq0, qnp); // if we don't remove qnp it will gobble any values we put in iq0\n                                          // place item in iq0\n        ASSERT(iq0.try_put(3), \"Error on second put to iq0\");\n        // oq0, oq1 should have items in them\n        g.wait_for_all();\n        {\n            OQType t0;\n            OQType t1;\n            ASSERT(oq0.try_get(t0)&&tbb::flow::get<0>(t0)==3&&tbb::flow::get<1>(t0)==2, \"Error in oq0 output\");\n            ASSERT(oq1.try_get(t1)&&tbb::flow::get<0>(t1)==3&&tbb::flow::get<1>(t1)==2, \"Error in oq1 output\");\n        }\n        // attach qnp to iq0, qnq to iq1\n        // qnp and qnq should be empty\n        tbb::flow::make_edge(iq0, qnp);\n        tbb::flow::make_edge(iq1, qnq);\n        g.wait_for_all();\n        {\n            int i;\n            ASSERT(!qnp.try_get(i), \"iq0 still had value in it\");\n            ASSERT(!qnq.try_get(i), \"iq1 still had value in it\");\n        }\n        tbb::flow::remove_edge(iq0, qnp);\n        tbb::flow::remove_edge(iq1, qnq);\n    } // for ( int loop ...\n}\n\n// join_node (queueing) consumes inputs as soon as they are available at\n// any input.  When it builds a tuple it broadcasts to all its successors and\n// discards the broadcast values.\n//\n// So our test will put an item at one input port, then attach another node to the\n// same node (a queue node in this case).  The second successor should not receive\n// an item (because the join consumed it).\n//\n// We then place an item in the second input queue, and check the output queues; they\n// should each have a tuple.\n//\n// we then attach another function node to the second input.  It should not receive\n// an item, verifying that the item in the queue is consumed.\ntemplate<>\nvoid test_input_port_policies<tbb::flow::queueing>() {\n    tbb::flow::graph g;\n    typedef tbb::flow::join_node<tbb::flow::tuple<int, int>, tbb::flow::queueing > JType;\n    // create join_node<type0,type1> jn\n    JType jn(g);\n    // create output_queue oq0, oq1\n    typedef JType::output_type OQType;\n    tbb::flow::queue_node<OQType> oq0(g);\n    tbb::flow::queue_node<OQType> oq1(g);\n    // create iq0, iq1\n    typedef tbb::flow::queue_node<int> IQType;\n    IQType iq0(g);\n    IQType iq1(g);\n    // create qnp, qnq\n    IQType qnp(g);\n    IQType qnq(g);\n    REMARK(\"Testing policies of join_node<queueing> input ports\\n\");\n    // attach jn to oq0, oq1\n    tbb::flow::make_edge(jn, oq0);\n    tbb::flow::make_edge(jn, oq1);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(jn.successor_count()==2, NULL);\n    JType::successor_list_type my_succs;\n    jn.copy_successors(my_succs);\n    ASSERT(my_succs.size()==2, NULL);\n#endif\n    // attach iq0, iq1 to jn\n    tbb::flow::make_edge(iq0, tbb::flow::get<0>(jn.input_ports()));\n    tbb::flow::make_edge(iq1, tbb::flow::get<1>(jn.input_ports()));\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(tbb::flow::get<0>(jn.input_ports()).predecessor_count()==1, NULL);\n    tbb::flow::tuple_element<0, JType::input_type>::type::predecessor_list_type my_0preds;\n    tbb::flow::input_port<0>(jn).copy_predecessors(my_0preds);\n    ASSERT(my_0preds.size()==1, NULL);\n#endif\n    for(int loop = 0; loop < 3; ++loop) {\n        // place one item in iq0\n        ASSERT(iq0.try_put(1), \"Error putting to iq1\");\n        // attach iq0 to qnp\n        tbb::flow::make_edge(iq0, qnp);\n        // qnp should have an item in it.\n        g.wait_for_all();\n        {\n            int i;\n            ASSERT(!qnp.try_get(i), \"Item was received by qnp\");\n        }\n        // place item in iq1\n        ASSERT(iq1.try_put(2), \"Error putting to iq1\");\n        // oq0, oq1 should have items\n        g.wait_for_all();\n        {\n            OQType t0;\n            OQType t1;\n            ASSERT(oq0.try_get(t0)&&tbb::flow::get<0>(t0)==1&&tbb::flow::get<1>(t0)==2, \"Error in oq0 output\");\n            ASSERT(oq1.try_get(t1)&&tbb::flow::get<0>(t1)==1&&tbb::flow::get<1>(t1)==2, \"Error in oq1 output\");\n        }\n        // attach qnq to iq1\n        // qnp and qnq should be empty\n        tbb::flow::make_edge(iq1, qnq);\n        g.wait_for_all();\n        {\n            int i;\n            ASSERT(!qnp.try_get(i), \"iq0 still had value in it\");\n            ASSERT(!qnq.try_get(i), \"iq1 still had value in it\");\n        }\n        tbb::flow::remove_edge(iq0, qnp);\n        tbb::flow::remove_edge(iq1, qnq);\n    } // for ( int loop ...\n}\n\ntemplate<typename T>\nstruct myTagValue {\n    tbb::flow::tag_value operator()(T i) { return tbb::flow::tag_value(i); }\n};\n\ntemplate<>\nstruct myTagValue<check_type<int> > {\n    tbb::flow::tag_value operator()(check_type<int> i) { return tbb::flow::tag_value((int)i); }\n};\n\n// join_node (tag_matching) consumes inputs as soon as they are available at\n// any input.  When it builds a tuple it broadcasts to all its successors and\n// discards the broadcast values.\n//\n// It chooses the tuple it broadcasts by matching the tag values returned by the\n// methods given the constructor of the join, in this case the method just casts\n// the value in each port to tag_value.\n//\n// So our test will put an item at one input port, then attach another node to the\n// same node (a queue node in this case).  The second successor should not receive\n// an item (because the join consumed it).\n//\n// We then place an item in the second input queue, and check the output queues; they\n// should each have a tuple.\n//\n// we then attach another queue node to the second input.  It should not receive\n// an item, verifying that the item in the queue is consumed.\n//\n// We will then exercise the join with a bunch of values, and the output order should\n// be determined by the order we insert items into the second queue.  (Each tuple set\n// corresponding to a tag will be complete when the second item is inserted.)\ntemplate<>\nvoid test_input_port_policies<tbb::flow::tag_matching>() {\n    tbb::flow::graph g;\n    typedef tbb::flow::join_node<tbb::flow::tuple<int, check_type<int> >, tbb::flow::tag_matching > JoinNodeType;\n    typedef JoinNodeType::output_type CheckTupleType;\n    JoinNodeType testJoinNode(g, myTagValue<int>(), myTagValue<check_type<int> >());\n    tbb::flow::queue_node<CheckTupleType> checkTupleQueue0(g);\n    tbb::flow::queue_node<CheckTupleType> checkTupleQueue1(g);\n    {\n        Check<check_type<int> > my_check;\n\n\n        typedef tbb::flow::queue_node<int> IntQueueType;\n        typedef tbb::flow::queue_node<check_type<int> > CheckQueueType;\n        IntQueueType intInputQueue(g);\n        CheckQueueType checkInputQueue(g);\n        IntQueueType intEmptyTestQueue(g);\n        CheckQueueType checkEmptyTestQueue(g);\n        REMARK(\"Testing policies of join_node<tag_matching> input ports\\n\");\n        // attach testJoinNode to checkTupleQueue0, checkTupleQueue1\n        tbb::flow::make_edge(testJoinNode, checkTupleQueue0);\n        tbb::flow::make_edge(testJoinNode, checkTupleQueue1);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(testJoinNode.successor_count()==2, NULL);\n        JoinNodeType::successor_list_type my_succs;\n        testJoinNode.copy_successors(my_succs);\n        ASSERT(my_succs.size()==2, NULL);\n#endif\n        // attach intInputQueue, checkInputQueue to testJoinNode\n        tbb::flow::make_edge(intInputQueue, tbb::flow::input_port<0>(testJoinNode));\n        tbb::flow::make_edge(checkInputQueue, tbb::flow::input_port<1>(testJoinNode));\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(tbb::flow::input_port<0>(testJoinNode).predecessor_count()==1, NULL);\n        tbb::flow::tuple_element<0, JoinNodeType::input_type>::type::predecessor_list_type my_0preds;\n        tbb::flow::input_port<0>(testJoinNode).copy_predecessors(my_0preds);\n        ASSERT(my_0preds.size()==1, NULL);\n#endif\n\n        // we'll put four discrete values in the inputs to the join_node.  Each\n        // set of inputs should result in one output.\n        for(int loop = 0; loop < 4; ++loop) {\n            // place one item in intInputQueue\n            ASSERT(intInputQueue.try_put(loop), \"Error putting to intInputQueue\");\n            // attach intInputQueue to intEmptyTestQueue\n            tbb::flow::make_edge(intInputQueue, intEmptyTestQueue);\n            // intEmptyTestQueue should not have an item in it.  (the join consumed it.)\n            g.wait_for_all();\n            {\n                int intVal0;\n                ASSERT(!intEmptyTestQueue.try_get(intVal0), \"Item was received by intEmptyTestQueue\");\n            }\n            // place item in checkInputQueue\n            check_type<int> checkVal0(loop);\n            ASSERT(checkInputQueue.try_put(checkVal0), \"Error putting to checkInputQueue\");\n            // checkTupleQueue0, checkTupleQueue1 should have items\n            g.wait_for_all();\n            {\n                CheckTupleType t0;\n                CheckTupleType t1;\n                ASSERT(checkTupleQueue0.try_get(t0)&&tbb::flow::get<0>(t0)==loop&&(int)tbb::flow::get<1>(t0)==loop, \"Error in checkTupleQueue0 output\");\n                ASSERT(checkTupleQueue1.try_get(t1)&&tbb::flow::get<0>(t1)==loop&&(int)tbb::flow::get<1>(t1)==loop, \"Error in checkTupleQueue1 output\");\n                ASSERT(!checkTupleQueue0.try_get(t0), \"extra object in output queue checkTupleQueue0\");\n                ASSERT(!checkTupleQueue1.try_get(t0), \"extra object in output queue checkTupleQueue1\");\n            }\n            // attach checkEmptyTestQueue to checkInputQueue\n            // intEmptyTestQueue and checkEmptyTestQueue should be empty\n            tbb::flow::make_edge(checkInputQueue, checkEmptyTestQueue);\n            g.wait_for_all();\n            {\n                int intVal1;\n                check_type<int> checkVal1;\n                ASSERT(!intEmptyTestQueue.try_get(intVal1), \"intInputQueue still had value in it\");\n                ASSERT(!checkEmptyTestQueue.try_get(checkVal1), \"checkInputQueue still had value in it\");\n            }\n            tbb::flow::remove_edge(intInputQueue, intEmptyTestQueue);\n            tbb::flow::remove_edge(checkInputQueue, checkEmptyTestQueue);\n        } // for ( int loop ...\n\n          // Now we'll put [4 .. nValues - 1] in intInputQueue, and then put [4 .. nValues - 1] in checkInputQueue in\n          // a different order.  We should see tuples in the output queues in the order we inserted\n          // the integers into checkInputQueue.\n        const int nValues = 100;\n        const int nIncr = 31;  // relatively prime to nValues\n\n        for(int loop = 4; loop < 4+nValues; ++loop) {\n            // place one item in intInputQueue\n            ASSERT(intInputQueue.try_put(loop), \"Error putting to intInputQueue\");\n            g.wait_for_all();\n            {\n                CheckTupleType t3;\n                ASSERT(!checkTupleQueue0.try_get(t3), \"Object in output queue\");\n                ASSERT(!checkTupleQueue1.try_get(t3), \"Object in output queue\");\n            }\n        } // for ( int loop ...\n\n        for(int loop = 1; loop<=nValues; ++loop) {\n            int lp1 = 4+(loop * nIncr)%nValues;\n            // place item in checkInputQueue\n            ASSERT(checkInputQueue.try_put(lp1), \"Error putting to checkInputQueue\");\n            // checkTupleQueue0, checkTupleQueue1 should have items\n            g.wait_for_all();\n            {\n                CheckTupleType t0;\n                CheckTupleType t1;\n                ASSERT(checkTupleQueue0.try_get(t0)&&tbb::flow::get<0>(t0)==lp1 && tbb::flow::get<1>(t0)==lp1, \"Error in checkTupleQueue0 output\");\n                ASSERT(checkTupleQueue1.try_get(t1)&&tbb::flow::get<0>(t1)==lp1 && tbb::flow::get<1>(t1)==lp1, \"Error in checkTupleQueue1 output\");\n                ASSERT(!checkTupleQueue0.try_get(t0), \"extra object in output queue checkTupleQueue0\");\n                ASSERT(!checkTupleQueue1.try_get(t0), \"extra object in output queue checkTupleQueue1\");\n            }\n        } // for ( int loop ...\n    } // Check\n}\n\ntemplate<typename Policy> struct policy_name {};\n\ntemplate<> struct policy_name<tbb::flow::queueing> {\nconst char* msg_beg() { return \"queueing\\n\";}\nconst char* msg_end() { return \"test queueing extract\\n\";} \n};\n\ntemplate<> struct policy_name<tbb::flow::reserving> {\nconst char* msg_beg() { return \"reserving\\n\";}\nconst char* msg_end() { return \"test reserving extract\\n\";}\n};\n\ntemplate<> struct policy_name<tbb::flow::tag_matching> {\nconst char* msg_beg() { return \"tag_matching\\n\";}\nconst char* msg_end() { return \"test tag_matching extract\\n\";}\n};\n\ntemplate<typename Policy>\nvoid test_main() {\n    test_input_port_policies<Policy>();\n    for(int p = 0; p < 2; ++p) {\n        REMARK(policy_name<Policy>().msg_beg());\n        generate_test<serial_test, tbb::flow::tuple<threebyte, double>, Policy>::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 4\n        {\n            Check<check_type<int> > my_check;\n            generate_test<serial_test, tbb::flow::tuple<float, double, check_type<int>, long>, Policy>::do_test();\n        }\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 6\n        generate_test<serial_test, tbb::flow::tuple<double, double, int, long, int, short>, Policy>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 8\n        generate_test<serial_test, tbb::flow::tuple<float, double, double, double, float, int, float, long>, Policy>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 10\n        generate_test<serial_test, tbb::flow::tuple<float, double, int, double, double, float, long, int, float, long>, Policy>::do_test();\n#endif\n        {\n            Check<check_type<int> > my_check1;\n            generate_test<parallel_test, tbb::flow::tuple<float, check_type<int> >, Policy>::do_test();\n        }\n#if MAX_TUPLE_TEST_SIZE >= 3\n        generate_test<parallel_test, tbb::flow::tuple<float, int, long>, Policy>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 5\n        generate_test<parallel_test, tbb::flow::tuple<double, double, int, int, short>, Policy>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 7\n        generate_test<parallel_test, tbb::flow::tuple<float, int, double, float, long, float, long>, Policy>::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 9\n        generate_test<parallel_test, tbb::flow::tuple<float, double, int, double, double, long, int, float, long>, Policy>::do_test();\n#endif\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    REMARK(policy_name<Policy>().msg_end());\n    test_join_extract<int, tbb::flow::join_node< tbb::flow::tuple<int, int>, Policy> >().run_tests();\n#endif\n}\n\n#endif /* tbb_test_join_node_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_join_node_key_matching.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"test_join_node.h\"\n\nint TestMain() {\n#if __TBB_USE_TBB_TUPLE\n    REMARK(\"  Using TBB tuple\\n\");\n#else\n    REMARK(\"  Using platform tuple\\n\");\n#endif\n\n    REMARK(\"key_matching\\n\");\n    generate_test<serial_test, tbb::flow::tuple<MyKeyFirst<int, double>, MyKeySecond<int, float> >, tbb::flow::key_matching<int> >::do_test();\n    generate_test<serial_test, tbb::flow::tuple<MyKeyFirst<std::string, double>, MyKeySecond<std::string, float> >, tbb::flow::key_matching<std::string> >::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 3\n    generate_test<serial_test, tbb::flow::tuple<MyKeyFirst<std::string, double>, MyKeySecond<std::string, float>, MyKeyWithBrokenMessageKey<std::string, int> >, tbb::flow::key_matching<std::string&> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 7\n    generate_test<serial_test, tbb::flow::tuple<\n        MyKeyFirst<std::string, double>,\n        MyKeyWithBrokenMessageKey<std::string, int>,\n        MyKeyFirst<std::string, int>,\n        MyKeySecond<std::string, size_t>,\n        MyKeyWithBrokenMessageKey<std::string, int>,\n        MyKeySecond<std::string, short>,\n        MyKeySecond<std::string, threebyte>\n    >, tbb::flow::key_matching<std::string&> >::do_test();\n#endif\n\n    generate_test<parallel_test, tbb::flow::tuple<MyKeyFirst<int, double>, MyKeySecond<int, float> >, tbb::flow::key_matching<int> >::do_test();\n    generate_test<parallel_test, tbb::flow::tuple<MyKeyFirst<int, double>, MyKeySecond<int, float> >, tbb::flow::key_matching<int&> >::do_test();\n    generate_test<parallel_test, tbb::flow::tuple<MyKeyFirst<std::string, double>, MyKeySecond<std::string, float> >, tbb::flow::key_matching<std::string&> >::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 10\n    generate_test<parallel_test, tbb::flow::tuple<\n        MyKeyFirst<std::string, double>,\n        MyKeySecond<std::string, int>,\n        MyKeyFirst<std::string, int>,\n        MyKeyWithBrokenMessageKey<std::string, size_t>,\n        MyKeyWithBrokenMessageKey<std::string, int>,\n        MyKeySecond<std::string, short>,\n        MyKeySecond<std::string, threebyte>,\n        MyKeyFirst<std::string, int>,\n        MyKeySecond<std::string, threebyte>,\n        MyKeyWithBrokenMessageKey<std::string, size_t>\n    >, tbb::flow::key_matching<std::string&> >::do_test();\n#endif\n\n    REMARK(\"message based key_matching\\n\");\n    generate_test<serial_test, tbb::flow::tuple<MyMessageKeyWithBrokenKey<int, double>, MyMessageKeyWithoutKey<int, float> >, message_based_key_matching<int> >::do_test();\n    generate_test<serial_test, tbb::flow::tuple<MyMessageKeyWithoutKeyMethod<std::string, double>, MyMessageKeyWithBrokenKey<std::string, float> >, message_based_key_matching<std::string> >::do_test();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_join_node_msg_key_matching.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"test_join_node.h\"\n\nint TestMain() {\n#if __TBB_USE_TBB_TUPLE\n    REMARK(\"  Using TBB tuple\\n\");\n#else\n    REMARK(\"  Using platform tuple\\n\");\n#endif\n\n#if !__TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN\n#if MAX_TUPLE_TEST_SIZE >= 3\n    generate_test<serial_test, tbb::flow::tuple<MyMessageKeyWithoutKey<std::string, double>, MyMessageKeyWithoutKeyMethod<std::string, float>, MyMessageKeyWithBrokenKey<std::string, int> >, message_based_key_matching<std::string&> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 7\n    generate_test<serial_test, tbb::flow::tuple<\n        MyMessageKeyWithoutKey<std::string, double>,\n        MyMessageKeyWithoutKeyMethod<std::string, int>,\n        MyMessageKeyWithBrokenKey<std::string, int>,\n        MyMessageKeyWithoutKey<std::string, size_t>,\n        MyMessageKeyWithoutKeyMethod<std::string, int>,\n        MyMessageKeyWithBrokenKey<std::string, short>,\n        MyMessageKeyWithoutKey<std::string, threebyte>\n    >, message_based_key_matching<std::string&> >::do_test();\n#endif\n\n    generate_test<parallel_test, tbb::flow::tuple<MyMessageKeyWithBrokenKey<int, double>, MyMessageKeyWithoutKey<int, float> >, message_based_key_matching<int> >::do_test();\n    generate_test<parallel_test, tbb::flow::tuple<MyMessageKeyWithoutKeyMethod<int, double>, MyMessageKeyWithBrokenKey<int, float> >, message_based_key_matching<int&> >::do_test();\n    generate_test<parallel_test, tbb::flow::tuple<MyMessageKeyWithoutKey<std::string, double>, MyMessageKeyWithoutKeyMethod<std::string, float> >, message_based_key_matching<std::string&> >::do_test();\n\n#if MAX_TUPLE_TEST_SIZE >= 10\n    generate_test<parallel_test, tbb::flow::tuple<\n        MyMessageKeyWithoutKeyMethod<std::string, double>,\n        MyMessageKeyWithBrokenKey<std::string, int>,\n        MyMessageKeyWithoutKey<std::string, int>,\n        MyMessageKeyWithoutKeyMethod<std::string, size_t>,\n        MyMessageKeyWithBrokenKey<std::string, int>,\n        MyMessageKeyWithoutKeyMethod<std::string, short>,\n        MyMessageKeyWithoutKeyMethod<std::string, threebyte>,\n        MyMessageKeyWithBrokenKey<std::string, int>,\n        MyMessageKeyWithoutKeyMethod<std::string, threebyte>,\n        MyMessageKeyWithBrokenKey<std::string, size_t>\n    >, message_based_key_matching<std::string&> >::do_test();\n#endif\n#endif /* __TBB_MIC_OFFLOAD_TEST_COMPILATION_BROKEN */\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_lambda.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_defs.h\"\n#if __TBB_TEST_SKIP_LAMBDA\n\n#include \"harness.h\"\nint TestMain() {\n    REPORT(\"Known issue: lambdas are not properly supported on the platform \\n\");\n    return Harness::Skipped;\n}\n\n#else /*__TBB_TEST_SKIP_LAMBDA*/\n\n#define NOMINMAX\n#include \"tbb/tbb.h\"\n#include \"tbb/combinable.h\"\n#include <cstdio>\n#include <list>\n\nusing namespace std;\nusing namespace tbb;\n\ntypedef pair<int,int> max_element_t;\n\nvoid f(int val, int *arr, int start, int stop) {\n    for (int i=start; i<=stop; ++i) {\n        arr[i] = val;\n    }\n}\n\n#include \"harness.h\"\n\n#if __TBB_TASK_GROUP_CONTEXT\nint Fib(int n) {\n    if( n<2 ) {\n        return n;\n    } else {\n        int x=0, y=0;\n        task_group g;\n        g.run( [&]{x=Fib(n-1);} ); // spawn a task\n        g.run( [&]{y=Fib(n-2);} ); // spawn another task\n        g.wait();                  // wait for both tasks to complete\n        return x+y;\n    }\n}\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n\n#include \"harness_report.h\"\n#include \"harness_assert.h\"\n\nint TestMain () {\n    const int N = 1000;\n    const int Grainsize = N/1000;\n    int a[N];\n    int max_sum;\n    ASSERT( MinThread>=1, \"Error: Number of threads must be positive.\\n\");\n\n    for(int p=MinThread; p<=MaxThread; ++p) {\n        task_scheduler_init init(p);\n\n        REMARK(\"Running lambda expression tests on %d threads...\\n\", p);\n\n        //test parallel_for\n        REMARK(\"Testing parallel_for... \");\n        parallel_for(blocked_range<int>(0,N,Grainsize),\n                     [&] (blocked_range<int>& r) {\n                         for (int i=r.begin(); i!=r.end(); ++i)    a[i] = i;\n                     });\n        ASSERT(a[0]==0 && a[N-1]==N-1, \"parallel_for w/lambdas failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test parallel_reduce\n        REMARK(\"Testing parallel_reduce... \");\n        int sum = parallel_reduce(blocked_range<int>(0,N,Grainsize), int(0),\n                                  [&] (blocked_range<int>& r, int current_sum) -> int {\n                                      for (int i=r.begin(); i!=r.end(); ++i)\n                                          current_sum += a[i]*(1000-i);\n                                      return current_sum;\n                                  },\n                                  [] (const int x1, const int x2) {\n                                      return x1+x2;\n                                  } );\n\n        max_element_t max_el =\n            parallel_reduce(blocked_range<int>(0,N,Grainsize), make_pair(a[0], 0),\n                            [&] (blocked_range<int>& r, max_element_t current_max)\n                            -> max_element_t {\n                                for (int i=r.begin(); i!=r.end(); ++i)\n                                    if (a[i]>current_max.first)\n                                        current_max = make_pair(a[i], i);\n                                return current_max;\n                            },\n                            [] (const max_element_t x1, const max_element_t x2) {\n                                return (x1.first>x2.first)?x1:x2;\n                            });\n        ASSERT(sum==166666500 && max_el.first==999 && max_el.second==999,\n               \"parallel_reduce w/lambdas failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test parallel_do\n        REMARK(\"Testing parallel_do... \");\n        list<int> s;\n        s.push_back(0);\n\n        parallel_do(s.begin(), s.end(),\n                    [&](int foo, parallel_do_feeder<int>& feeder) {\n                        if (foo == 42) return;\n                        else if (foo>42) {\n                            s.push_back(foo-3);\n                            feeder.add(foo-3);\n                        } else {\n                            s.push_back(foo+5);\n                            feeder.add(foo+5);\n                        }\n                    });\n        ASSERT(s.back()==42, \"parallel_do w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test parallel_invoke\n        REMARK(\"Testing parallel_invoke... \");\n        parallel_invoke([&]{ f(2, a, 0, N/3); },\n                        [&]{ f(1, a, N/3+1, 2*(N/3)); },\n                        [&]{ f(0, a, 2*(N/3)+1, N-1); });\n        ASSERT(a[0]==2.0 && a[N-1]==0.0, \"parallel_invoke w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test tbb_thread\n        REMARK(\"Testing tbb_thread... \");\n        tbb_thread::id myId;\n        tbb_thread myThread([](int x, int y) {\n                                ASSERT(x==42 && y==64, \"tbb_thread w/lambda failed.\\n\");\n                                REMARK(\"passed.\\n\");\n                            }, 42, 64);\n        myThread.join();\n\n#if __TBB_TASK_GROUP_CONTEXT\n        // test task_group\n        REMARK(\"Testing task_group... \");\n        int result;\n        result = Fib(32);\n        ASSERT(result==2178309, \"task_group w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        // Reset array a to index values\n        parallel_for(blocked_range<int>(0,N,Grainsize),\n                     [&] (blocked_range<int>& r) {\n                         for (int i=r.begin(); i!=r.end(); ++i)    a[i] = i;\n                     });\n        // test parallel_sort\n        REMARK(\"Testing parallel_sort... \");\n        int pivot = 42;\n\n        // sort nearest by increasing distance from pivot\n        parallel_sort(a, a+N,\n                      [&](int x, int y) { return(abs(pivot-x) < abs(pivot-y)); });\n        ASSERT(a[0]==42 && a[N-1]==N-1, \"parallel_sort w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test combinable\n        REMARK(\"Testing combinable... \");\n        combinable<std::pair<int,int> > minmax_c([&]() { return std::make_pair(a[0], a[0]); } );\n\n        parallel_for(blocked_range<int>(0,N),\n                     [&] (const blocked_range<int> &r) {\n                         std::pair<int,int>& mmr = minmax_c.local();\n                         for(int i=r.begin(); i!=r.end(); ++i) {\n                             if (mmr.first > a[i]) mmr.first = a[i];\n                             if (mmr.second < a[i]) mmr.second = a[i];\n                         }\n                     });\n        max_sum = 0;\n        minmax_c.combine_each([&max_sum](std::pair<int,int> x) {\n                                  int tsum = x.first + x.second;\n                                  if( tsum>max_sum ) max_sum = tsum;\n                              });\n        ASSERT( (N-1)<=max_sum && max_sum<=a[0]+N-1, \"combinable::combine_each /w lambda failed.\" );\n\n        std::pair<int,int> minmax_result_c;\n        minmax_result_c =\n            minmax_c.combine([](std::pair<int,int> x, std::pair<int,int> y) {\n                                 return std::make_pair(x.first<y.first?x.first:y.first,\n                                                       x.second>y.second?x.second:y.second);\n                             });\n        ASSERT(minmax_result_c.first==0 && minmax_result_c.second==999,\n               \"combinable w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n\n        //test enumerable_thread_specific\n        REMARK(\"Testing enumerable_thread_specific... \");\n        enumerable_thread_specific< std::pair<int,int> > minmax_ets([&]() { return std::make_pair(a[0], a[0]); } );\n\n        max_sum = 0;\n        parallel_for(blocked_range<int>(0,N),\n                     [&] (const blocked_range<int> &r) {\n                         std::pair<int,int>& mmr = minmax_ets.local();\n                         for(int i=r.begin(); i!=r.end(); ++i) {\n                             if (mmr.first > a[i]) mmr.first = a[i];\n                             if (mmr.second < a[i]) mmr.second = a[i];\n                         }\n                     });\n        minmax_ets.combine_each([&max_sum](std::pair<int,int> x) {\n                                  int tsum = x.first + x.second;\n                                  if( tsum>max_sum ) max_sum = tsum;\n                                });\n        ASSERT( (N-1)<=max_sum && max_sum<=a[0]+N-1, \"enumerable_thread_specific::combine_each /w lambda failed.\" );\n\n        std::pair<int,int> minmax_result_ets;\n        minmax_result_ets =\n            minmax_ets.combine([](std::pair<int,int> x, std::pair<int,int> y) {\n                                   return std::make_pair(x.first<y.first?x.first:y.first,\n                                                         x.second>y.second?x.second:y.second);\n                               });\n        ASSERT(minmax_result_ets.first==0 && minmax_result_ets.second==999,\n               \"enumerable_thread_specific w/lambda failed.\\n\");\n        REMARK(\"passed.\\n\");\n    }\n    return Harness::Done;\n}\n#endif /* __TBB_TEST_SKIP_LAMBDA */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_limiter_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#include \"harness_graph.h\"\n#endif\n#include \"tbb/flow_graph.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst int L = 10;\nconst int N = 1000;\n\nusing tbb::flow::internal::SUCCESSFULLY_ENQUEUED;\n\ntemplate< typename T >\nstruct serial_receiver : public tbb::flow::receiver<T>, NoAssign {\n   T next_value;\n   tbb::flow::graph& my_graph;\n\n   serial_receiver(tbb::flow::graph& g) : next_value(T(0)), my_graph(g) {}\n\n   tbb::task *try_put_task( const T &v ) __TBB_override {\n       ASSERT( next_value++  == v, NULL );\n       return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);\n   }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n    built_predecessors_type bpt;\n    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }\n    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }\n    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }\n    void copy_predecessors( predecessor_list_type & ) __TBB_override { }\n    size_t predecessor_count() __TBB_override { return 0; }\n#endif\n\n   void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {next_value = T(0);}\n};\n\ntemplate< typename T >\nstruct parallel_receiver : public tbb::flow::receiver<T>, NoAssign {\n\n    tbb::atomic<int> my_count;\n    tbb::flow::graph& my_graph;\n\n    parallel_receiver(tbb::flow::graph& g) : my_graph(g) { my_count = 0; }\n\n    tbb::task *try_put_task( const T &/*v*/ ) __TBB_override {\n       ++my_count;\n       return const_cast<tbb::task *>(tbb::flow::internal::SUCCESSFULLY_ENQUEUED);\n    }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n    built_predecessors_type bpt;\n    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }\n    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }\n    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }\n    void copy_predecessors( predecessor_list_type & ) __TBB_override { }\n    size_t predecessor_count( ) __TBB_override { return 0; }\n#endif\n    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {my_count = 0;}\n};\n\ntemplate< typename T >\nstruct empty_sender : public tbb::flow::sender<T> {\n        typedef typename tbb::flow::sender<T>::successor_type successor_type;\n\n        bool register_successor( successor_type & ) __TBB_override { return false; }\n        bool remove_successor( successor_type & ) __TBB_override { return false; }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename tbb::flow::sender<T>::built_successors_type built_successors_type;\n        typedef typename tbb::flow::sender<T>::successor_list_type successor_list_type;\n        built_successors_type bst;\n        built_successors_type &built_successors() __TBB_override { return bst; }\n        void    internal_add_built_successor( successor_type & ) __TBB_override { }\n        void internal_delete_built_successor( successor_type & ) __TBB_override { }\n        void copy_successors( successor_list_type & ) __TBB_override { }\n        size_t successor_count() __TBB_override { return 0; }\n#endif\n};\n\n\ntemplate< typename T >\nstruct put_body : NoAssign {\n\n    tbb::flow::limiter_node<T> &my_lim;\n    tbb::atomic<int> &my_accept_count;\n\n    put_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) :\n        my_lim(lim), my_accept_count(accept_count) {}\n\n    void operator()( int ) const {\n        for ( int i = 0; i < L; ++i ) {\n            bool msg = my_lim.try_put( T(i) );\n            if ( msg == true )\n               ++my_accept_count;\n        }\n    }\n};\n\ntemplate< typename T >\nstruct put_dec_body : NoAssign {\n\n    tbb::flow::limiter_node<T> &my_lim;\n    tbb::atomic<int> &my_accept_count;\n\n    put_dec_body( tbb::flow::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) :\n        my_lim(lim), my_accept_count(accept_count) {}\n\n    void operator()( int ) const {\n        int local_accept_count = 0;\n        while ( local_accept_count < N ) {\n            bool msg = my_lim.try_put( T(local_accept_count) );\n            if ( msg == true ) {\n                ++local_accept_count;\n                ++my_accept_count;\n                my_lim.decrement.try_put( tbb::flow::continue_msg() );\n            }\n        }\n    }\n\n};\n\ntemplate< typename T >\nvoid test_puts_with_decrements( int num_threads, tbb::flow::limiter_node< T >& lim , tbb::flow::graph& g) {\n    parallel_receiver<T> r(g);\n    empty_sender< tbb::flow::continue_msg > s;\n    tbb::atomic<int> accept_count;\n    accept_count = 0;\n    tbb::flow::make_edge( lim, r );\n    tbb::flow::make_edge(s, lim.decrement);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(lim.decrement.predecessor_count() == 1, NULL);\n    ASSERT(lim.successor_count() == 1, NULL);\n    ASSERT(lim.predecessor_count() == 0, NULL);\n    typename tbb::flow::interface10::internal::decrementer<tbb::flow::limiter_node<T> >::predecessor_list_type dec_preds;\n    lim.decrement.copy_predecessors(dec_preds);\n    ASSERT(dec_preds.size() == 1, NULL);\n#endif\n    // test puts with decrements\n    NativeParallelFor( num_threads, put_dec_body<T>(lim, accept_count) );\n    int c = accept_count;\n    ASSERT( c == N*num_threads, NULL );\n    ASSERT( r.my_count == N*num_threads, NULL );\n}\n\n//\n// Tests\n//\n// limiter only forwards below the limit, multiple parallel senders / single receiver\n// mutiple parallel senders that put to decrement at each accept, limiter accepts new messages\n//\n//\ntemplate< typename T >\nint test_parallel(int num_threads) {\n\n   // test puts with no decrements\n   for ( int i = 0; i < L; ++i ) {\n       tbb::flow::graph g;\n       tbb::flow::limiter_node< T > lim(g, i);\n       parallel_receiver<T> r(g);\n       tbb::atomic<int> accept_count;\n       accept_count = 0;\n       tbb::flow::make_edge( lim, r );\n       // test puts with no decrements\n       NativeParallelFor( num_threads, put_body<T>(lim, accept_count) );\n       g.wait_for_all();\n       int c = accept_count;\n       ASSERT( c == i, NULL );\n   }\n\n   // test puts with decrements\n   for ( int i = 1; i < L; ++i ) {\n       tbb::flow::graph g;\n       tbb::flow::limiter_node< T > lim(g, i);\n       test_puts_with_decrements(num_threads, lim, g);\n       tbb::flow::limiter_node< T > lim_copy( lim );\n       test_puts_with_decrements(num_threads, lim_copy, g);\n   }\n\n   return 0;\n}\n\n//\n// Tests\n//\n// limiter only forwards below the limit, single sender / single receiver\n// at reject, a put to decrement, will cause next message to be accepted\n//\ntemplate< typename T >\nint test_serial() {\n\n   // test puts with no decrements\n   for ( int i = 0; i < L; ++i ) {\n       tbb::flow::graph g;\n       tbb::flow::limiter_node< T > lim(g, i);\n       serial_receiver<T> r(g);\n       tbb::flow::make_edge( lim, r );\n       for ( int j = 0; j < L; ++j ) {\n           bool msg = lim.try_put( T(j) );\n           ASSERT( ( j < i && msg == true ) || ( j >= i && msg == false ), NULL );\n       }\n       g.wait_for_all();\n   }\n\n   // test puts with decrements\n   for ( int i = 1; i < L; ++i ) {\n       tbb::flow::graph g;\n       tbb::flow::limiter_node< T > lim(g, i);\n       serial_receiver<T> r(g);\n       empty_sender< tbb::flow::continue_msg > s;\n       tbb::flow::make_edge( lim, r );\n       tbb::flow::make_edge(s, lim.decrement);\n       for ( int j = 0; j < N; ++j ) {\n           bool msg = lim.try_put( T(j) );\n           ASSERT( ( j < i && msg == true ) || ( j >= i && msg == false ), NULL );\n           if ( msg == false ) {\n               lim.decrement.try_put( tbb::flow::continue_msg() );\n               msg = lim.try_put( T(j) );\n               ASSERT( msg == true, NULL );\n           }\n       }\n   }\n   return 0;\n}\n\n// reported bug in limiter (http://software.intel.com/en-us/comment/1752355)\n#define DECREMENT_OUTPUT 1  // the port number of the decrement output of the multifunction_node\n#define LIMITER_OUTPUT 0    // port number of the integer output\n\ntypedef tbb::flow::multifunction_node<int, tbb::flow::tuple<int,tbb::flow::continue_msg> > mfnode_type;\n\ntbb::atomic<size_t> emit_count;\ntbb::atomic<size_t> emit_sum;\ntbb::atomic<size_t> receive_count;\ntbb::atomic<size_t> receive_sum;\n\nstruct mfnode_body {\n    int max_cnt;\n    tbb::atomic<int>* my_cnt;\n    mfnode_body(const int& _max, tbb::atomic<int> &_my) : max_cnt(_max), my_cnt(&_my)  { }\n    void operator()(const int &/*in*/, mfnode_type::output_ports_type &out) {\n        int lcnt = ++(*my_cnt);\n        if(lcnt > max_cnt) {\n            return;\n        }\n        // put one continue_msg to the decrement of the limiter.\n        if(!tbb::flow::get<DECREMENT_OUTPUT>(out).try_put(tbb::flow::continue_msg())) {\n            ASSERT(false,\"Unexpected rejection of decrement\");\n        }\n        {\n            // put messages to the input of the limiter_node until it rejects.\n            while( tbb::flow::get<LIMITER_OUTPUT>(out).try_put(lcnt) ) {\n                emit_sum += lcnt;\n                ++emit_count;\n            }\n        }\n    }\n};\n\nstruct fn_body {\n    int operator()(const int &in) {\n        receive_sum += in;\n        ++receive_count;\n        return in;\n    }\n};\n\n//                   +------------+\n//    +---------+    |            v\n//    | mf_node |0---+       +----------+          +----------+\n// +->|         |1---------->| lim_node |--------->| fn_node  |--+\n// |  +---------+            +----------+          +----------+  |\n// |                                                             |\n// |                                                             |\n// +-------------------------------------------------------------+\n//\nvoid\ntest_multifunction_to_limiter(int _max, int _nparallel) {\n    tbb::flow::graph g;\n    emit_count = 0;\n    emit_sum = 0;\n    receive_count = 0;\n    receive_sum = 0;\n    tbb::atomic<int> local_cnt;\n    local_cnt = 0;\n    mfnode_type mf_node(g, tbb::flow::unlimited, mfnode_body(_max, local_cnt));\n    tbb::flow::function_node<int, int> fn_node(g, tbb::flow::unlimited, fn_body());\n    tbb::flow::limiter_node<int> lim_node(g, _nparallel);\n    tbb::flow::make_edge(tbb::flow::output_port<LIMITER_OUTPUT>(mf_node), lim_node);\n    tbb::flow::make_edge(tbb::flow::output_port<DECREMENT_OUTPUT>(mf_node), lim_node.decrement);\n    tbb::flow::make_edge(lim_node, fn_node);\n    tbb::flow::make_edge(fn_node, mf_node);\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    REMARK(\"pred cnt == %d\\n\",(int)(lim_node.predecessor_count()));\n    REMARK(\"succ cnt == %d\\n\",(int)(lim_node.successor_count()));\n    tbb::flow::limiter_node<int>::successor_list_type my_succs;\n    lim_node.copy_successors(my_succs);\n    REMARK(\"succ cnt from vector  == %d\\n\",(int)(my_succs.size()));\n    tbb::flow::limiter_node<int>::predecessor_list_type my_preds;\n    lim_node.copy_predecessors(my_preds);\n    REMARK(\"pred cnt from vector  == %d\\n\",(int)(my_preds.size()));\n#endif\n    mf_node.try_put(1);\n    g.wait_for_all();\n    ASSERT(emit_count == receive_count, \"counts do not match\");\n    ASSERT(emit_sum == receive_sum, \"sums do not match\");\n\n    // reset, test again\n    g.reset();\n    emit_count = 0;\n    emit_sum = 0;\n    receive_count = 0;\n    receive_sum = 0;\n    local_cnt = 0;;\n    mf_node.try_put(1);\n    g.wait_for_all();\n    ASSERT(emit_count == receive_count, \"counts do not match\");\n    ASSERT(emit_sum == receive_sum, \"sums do not match\");\n}\n\n\nvoid\ntest_continue_msg_reception() {\n    tbb::flow::graph g;\n    tbb::flow::limiter_node<int> ln(g,2);\n    tbb::flow::queue_node<int>   qn(g);\n    tbb::flow::make_edge(ln, qn);\n    ln.decrement.try_put(tbb::flow::continue_msg());\n    ln.try_put(42);\n    g.wait_for_all();\n    int outint;\n    ASSERT(qn.try_get(outint) && outint == 42, \"initial put to decrement stops node\");\n}\n\n\n//\n// This test ascertains that if a message is not successfully put\n// to a successor, the message is not dropped but released.\n//\n\nusing namespace tbb::flow;\nvoid test_reserve_release_messages() {\n    graph g;\n\n    //making two queue_nodes: one broadcast_node and one limiter_node\n    queue_node<int> input_queue(g);\n    queue_node<int> output_queue(g);\n    broadcast_node<continue_msg> broad(g);\n    limiter_node<int> limit(g,2,1); //threshold of 2\n\n    //edges\n    make_edge(input_queue, limit);\n    make_edge(limit, output_queue);\n    make_edge(broad,limit.decrement);\n\n    int list[4] = {19, 33, 72, 98}; //list to be put to the input queue\n\n    input_queue.try_put(list[0]); // succeeds\n    input_queue.try_put(list[1]); // succeeds\n    input_queue.try_put(list[2]); // fails, stored in upstream buffer\n    g.wait_for_all();\n\n    remove_edge(limit, output_queue); //remove successor\n\n    //sending continue messages to the decrement port of the limiter\n    broad.try_put(continue_msg());\n    broad.try_put(continue_msg()); //failed message retrieved.\n    g.wait_for_all();\n\n    make_edge(limit, output_queue); //putting the successor back\n\n    broad.try_put(continue_msg());\n    broad.try_put(continue_msg());  //drop the count\n\n    input_queue.try_put(list[3]);  //success\n    g.wait_for_all();\n\n    int var=0;\n\n    for (int i=0; i<4; i++){\n    output_queue.try_get(var);\n    ASSERT(var==list[i], \"some data dropped, input does not match output\");\n    g.wait_for_all();\n  }\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nvoid test_extract() {\n    tbb::flow::graph g;\n    int j;\n    tbb::flow::limiter_node<int> node0(g, /*threshold*/1);\n    tbb::flow::queue_node<int> q0(g);\n    tbb::flow::queue_node<int> q1(g);\n    tbb::flow::queue_node<int> q2(g);\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> b0(g);\n    tbb::flow::broadcast_node<tbb::flow::continue_msg> b1(g);\n\n    for( int i = 0; i < 2; ++i ) {\n        REMARK(\"At pass %d\\n\", i);\n        ASSERT(node0.predecessor_count() == 0, \"incorrect predecessor count at start\");\n        ASSERT(node0.successor_count() == 0, \"incorrect successor count at start\");\n        ASSERT(node0.decrement.predecessor_count() == 0, \"incorrect decrement pred count at start\");\n\n        tbb::flow::make_edge(q0, node0);\n        tbb::flow::make_edge(q1, node0);\n        tbb::flow::make_edge(node0, q2);\n        tbb::flow::make_edge(b0, node0.decrement);\n        tbb::flow::make_edge(b1, node0.decrement);\n        g.wait_for_all();\n\n        /*    b0   b1              */\n        /*      \\  |               */\n        /*  q0\\  \\ |               */\n        /*     \\  \\|               */\n        /*      +-node0---q2       */\n        /*     /                   */\n        /*  q1/                    */\n\n        q0.try_put(i);\n        g.wait_for_all();\n        ASSERT(node0.predecessor_count() == 2, \"incorrect predecessor count after construction\");\n        ASSERT(node0.successor_count() == 1, \"incorrect successor count after construction\");\n        ASSERT(node0.decrement.predecessor_count() == 2, \"incorrect decrement pred count after construction\");\n        ASSERT(q2.try_get(j), \"fetch of value forwarded to output queue failed\");\n        ASSERT(j == i, \"improper value forwarded to output queue\");\n        q0.try_put(2*i);\n        g.wait_for_all();\n        ASSERT(!q2.try_get(j), \"limiter_node forwarded item improperly\");\n        b0.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(!q2.try_get(j), \"limiter_node forwarded item improperly\");\n        b0.try_put(tbb::flow::continue_msg());\n        g.wait_for_all();\n        ASSERT(q2.try_get(j) && j == 2*i, \"limiter_node failed to forward item\");\n\n        tbb::flow::limiter_node<int>::successor_list_type sv;\n        tbb::flow::limiter_node<int>::predecessor_list_type pv;\n        tbb::flow::continue_receiver::predecessor_list_type dv;\n        tbb::flow::limiter_node<int>::successor_list_type sv1;\n        tbb::flow::limiter_node<int>::predecessor_list_type pv1;\n        tbb::flow::continue_receiver::predecessor_list_type dv1;\n\n        node0.copy_predecessors(pv);\n        node0.copy_successors(sv);\n        node0.decrement.copy_predecessors(dv);\n        pv1.push_back(&(q0));\n        pv1.push_back(&(q1));\n        sv1.push_back(&(q2));\n        dv1.push_back(&(b0));\n        dv1.push_back(&(b1));\n\n        ASSERT(pv.size() == 2, \"improper size for predecessors\");\n        ASSERT(sv.size() == 1, \"improper size for successors\");\n        ASSERT(lists_match(pv,pv1), \"predecessor lists do not match\");\n        ASSERT(lists_match(sv,sv1), \"successor lists do not match\");\n        ASSERT(lists_match(dv,dv1), \"successor lists do not match\");\n\n        if(i == 0) {\n            node0.extract();\n            ASSERT(node0.predecessor_count() == 0, \"incorrect predecessor count after extraction\");\n            ASSERT(node0.successor_count() == 0, \"incorrect successor count after extraction\");\n            ASSERT(node0.decrement.predecessor_count() == 0, \"incorrect decrement pred count after extraction\");\n        }\n        else {\n            q0.extract();\n            b0.extract();\n            q2.extract();\n\n            ASSERT(node0.predecessor_count() == 1, \"incorrect predecessor count after extract second iter\");\n            ASSERT(node0.successor_count() == 0, \"incorrect successor count after extract second iter\");\n            ASSERT(node0.decrement.predecessor_count() == 1, \"incorrect decrement pred count after extract second iter\");\n\n            node0.copy_predecessors(pv);\n            node0.copy_successors(sv);\n            node0.decrement.copy_predecessors(dv);\n            pv1.clear();\n            sv1.clear();\n            dv1.clear();\n            pv1.push_back(&(q1));\n            dv1.push_back(&(b1));\n\n            ASSERT(lists_match(pv,pv1), \"predecessor lists do not match second iter\");\n            ASSERT(lists_match(sv,sv1), \"successor lists do not match second iter\");\n            ASSERT(lists_match(dv,dv1), \"successor lists do not match second iter\");\n\n            q1.extract();\n            b1.extract();\n        }\n        ASSERT(node0.predecessor_count() == 0, \"incorrect predecessor count after extract\");\n        ASSERT(node0.successor_count() == 0, \"incorrect successor count after extract\");\n        ASSERT(node0.decrement.predecessor_count() == 0, \"incorrect decrement pred count after extract\");\n\n    }\n\n}\n#endif  // TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\nint TestMain() {\n    for (int i = 1; i <= 8; ++i) {\n        tbb::task_scheduler_init init(i);\n        test_serial<int>();\n        test_parallel<int>(i);\n    }\n    test_continue_msg_reception();\n    test_multifunction_to_limiter(30,3);\n    test_multifunction_to_limiter(300,13);\n    test_multifunction_to_limiter(3000,1);\n    test_reserve_release_messages();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract();\n#endif\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_atexit.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Regression test against a bug in TBB allocator manifested when\n   dynamic library calls atexit() or registers dtors of static objects.\n   If the allocator is not initialized yet, we can get deadlock,\n   because allocator library has static object dtors as well, they\n   registered during allocator initialization, and atexit() is protected\n   by non-recursive mutex in some versions of GLIBC.\n */\n\n#include <stdlib.h>\n#include \"harness_allocator_overload.h\"\n\n// __TBB_malloc_safer_msize() returns 0 for unknown objects,\n// thus we can detect ownership\n#if _USRDLL\n #if _WIN32||_WIN64\nextern __declspec(dllexport)\n #endif\nbool dll_isMallocOverloaded()\n#else\nbool exe_isMallocOverloaded()\n#endif\n{\n    const size_t reqSz = 8;\n    void *o = malloc(reqSz);\n    bool ret = __TBB_malloc_safer_msize(o, NULL) >= reqSz;\n    free(o);\n    return ret;\n}\n\n#if _USRDLL\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\n#define HARNESS_CUSTOM_MAIN 1\n#include \"harness.h\"\n\n#include <dlfcn.h>\n#if __APPLE__\n#include <malloc/malloc.h>\n#define malloc_usable_size(p) malloc_size(p)\n#else\n#include <malloc.h>\n#endif\n#include <signal.h>\n\n#if __linux__ && !__ANDROID__\nextern \"C\" {\nvoid __libc_free(void *ptr);\nvoid *__libc_realloc(void *ptr, size_t size);\n\n// check that such kind of free/realloc overload works correctly\nvoid free(void *ptr)\n{\n    __libc_free(ptr);\n}\n\nvoid *realloc(void *ptr, size_t size)\n{\n    return __libc_realloc(ptr, size);\n}\n} // extern \"C\"\n#endif // __linux__ && !__ANDROID__\n\n#endif // MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\n// Even when the test is skipped, dll source must not be empty to generate .lib to link with.\n\n#ifndef _PGO_INSTRUMENT\nvoid dummyFunction() {}\n\n// TODO: enable the check under Android\n#if (MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED) && !__ANDROID__\ntypedef void *(malloc_type)(size_t);\n\nstatic void SigSegv(int)\n{\n    REPORT(\"Known issue: SIGSEGV during work with memory allocated by replaced allocator.\\n\"\n           \"skip\\n\");\n    exit(0);\n}\n\n// TODO: Using of SIGSEGV can be eliminated via parsing /proc/self/maps\n// and series of system malloc calls.\nvoid TestReplacedAllocFunc()\n{\n    struct sigaction sa, sa_default;\n    malloc_type *orig_malloc = (malloc_type*)dlsym(RTLD_NEXT, \"malloc\");\n    void *p = (*orig_malloc)(16);\n\n    // protect potentially unsafe actions\n    sigemptyset(&sa.sa_mask);\n    sa.sa_flags = 0;\n    sa.sa_handler = SigSegv;\n    if (sigaction(SIGSEGV, &sa, &sa_default))\n        ASSERT(0, \"sigaction failed\");\n\n    ASSERT(malloc_usable_size(p) >= 16, NULL);\n    free(p);\n    // no more unsafe actions, restore SIGSEGV\n    if (sigaction(SIGSEGV, &sa_default, NULL))\n        ASSERT(0, \"sigaction failed\");\n}\n#else\nvoid TestReplacedAllocFunc() { }\n#endif\n\nclass Foo {\npublic:\n    Foo() {\n        // add a lot of exit handlers to cause memory allocation\n        for (int i=0; i<1024; i++)\n            atexit(dummyFunction);\n        TestReplacedAllocFunc();\n    }\n};\n\nstatic Foo f;\n#endif\n\n#else // _USRDLL\n#include \"harness.h\"\n\n#if _WIN32||_WIN64\n#include \"tbb/tbbmalloc_proxy.h\"\n\nextern __declspec(dllimport)\n#endif\nbool dll_isMallocOverloaded();\n\nint TestMain () {\n#ifdef _PGO_INSTRUMENT\n    REPORT(\"Known issue: test_malloc_atexit hangs if compiled with -prof-genx\\n\");\n    return Harness::Skipped;\n#else\n    ASSERT( dll_isMallocOverloaded(), \"malloc was not replaced\" );\n    ASSERT( exe_isMallocOverloaded(), \"malloc was not replaced\" );\n    return Harness::Done;\n#endif\n}\n\n#endif // _USRDLL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_compliance.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nbool __tbb_test_errno = false;\n\n#define __STDC_LIMIT_MACROS 1 // to get SIZE_MAX from stdint.h\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_WIN8UI_SUPPORT\n// testing allocator itself not iterfaces\n// so we can use desktop functions\n#define _CRT_USE_WINAPI_FAMILY_DESKTOP_APP !_M_ARM\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n// FIXME: fix the test to support New Windows *8 Store Apps mode.\nint TestMain() {\n    return Harness::Skipped;\n}\n#else /* __TBB_WIN8UI_SUPPORT\t */\n\n#include \"harness_defs.h\"\n#include \"harness_report.h\"\n\n#if _WIN32 || _WIN64\n/* _WIN32_WINNT should be defined at the very beginning,\n   because other headers might include <windows.h>\n*/\n#undef _WIN32_WINNT\n#define _WIN32_WINNT 0x0501\n#include \"tbb/machine/windows_api.h\"\n#include <stdio.h>\n\n#if _MSC_VER && defined(_MT) && defined(_DLL)\n    #pragma comment(lib, \"version.lib\")  // to use GetFileVersionInfo*\n#endif\n\nvoid limitMem( size_t limit )\n{\n    static HANDLE hJob = NULL;\n    JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo;\n\n    jobInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY;\n    jobInfo.ProcessMemoryLimit = limit? limit*MByte : 2*MByte*1024;\n    if (NULL == hJob) {\n        if (NULL == (hJob = CreateJobObject(NULL, NULL))) {\n            REPORT(\"Can't assign create job object: %ld\\n\", GetLastError());\n            exit(1);\n        }\n        if (0 == AssignProcessToJobObject(hJob, GetCurrentProcess())) {\n            REPORT(\"Can't assign process to job object: %ld\\n\", GetLastError());\n            exit(1);\n        }\n    }\n    if (0 == SetInformationJobObject(hJob, JobObjectExtendedLimitInformation,\n                                     &jobInfo, sizeof(jobInfo))) {\n        REPORT(\"Can't set limits: %ld\\n\", GetLastError());\n        exit(1);\n    }\n}\n// Do not test errno with static VC runtime\n#else // _WIN32 || _WIN64\n#include <sys/resource.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <errno.h>\n#include <sys/types.h>  // uint64_t on FreeBSD, needed for rlim_t\n#include <stdint.h>     // SIZE_MAX\n\nvoid limitMem( size_t limit )\n{\n    rlimit rlim;\n    int ret = getrlimit(RLIMIT_AS,&rlim);\n    if (0 != ret) {\n        REPORT(\"getrlimit() returned an error: errno %d\\n\", errno);\n        exit(1);\n    }\n    if (rlim.rlim_max==(rlim_t)RLIM_INFINITY)\n        rlim.rlim_cur = (limit > 0) ? limit*MByte : rlim.rlim_max;\n    else rlim.rlim_cur = (limit > 0 && limit<rlim.rlim_max) ? limit*MByte : rlim.rlim_max;\n    ret = setrlimit(RLIMIT_AS,&rlim);\n    if (0 != ret) {\n        REPORT(\"Can't set limits: errno %d\\n\", errno);\n        exit(1);\n    }\n}\n#endif  // _WIN32 || _WIN64\n\n#define ASSERT_ERRNO(cond, msg)  ASSERT( !__tbb_test_errno || (cond), msg )\n#define CHECK_ERRNO(cond) (__tbb_test_errno && (cond))\n\n#include <time.h>\n#include <errno.h>\n#include <limits.h> // for CHAR_BIT\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#include \"tbb/scalable_allocator.h\"\n\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n#if !__TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"harness_tbb_independence.h\"\n#endif\n#if __linux__\n#include <stdint.h> // uintptr_t\n#endif\n#if _WIN32 || _WIN64\n#include <malloc.h> // _aligned_(malloc|free|realloc)\n#if __MINGW64__\n// Workaround a bug in MinGW64 headers with _aligned_(malloc|free) not declared by default\nextern \"C\" void __cdecl _aligned_free(void *);\nextern \"C\" void *__cdecl _aligned_malloc(size_t,size_t);\n#endif\n#endif\n\n#include <vector>\n\nconst int COUNT_ELEM = 25000;\nconst size_t MAX_SIZE = 1000;\nconst int COUNTEXPERIMENT = 10000;\n\nconst char strError[]=\"failed\";\nconst char strOk[]=\"done\";\n\ntypedef unsigned int UINT;\ntypedef unsigned char UCHAR;\ntypedef unsigned long DWORD;\ntypedef unsigned char BYTE;\n\n\ntypedef void* TestMalloc(size_t size);\ntypedef void* TestCalloc(size_t num, size_t size);\ntypedef void* TestRealloc(void* memblock, size_t size);\ntypedef void  TestFree(void* memblock);\ntypedef int   TestPosixMemalign(void **memptr, size_t alignment, size_t size);\ntypedef void* TestAlignedMalloc(size_t size, size_t alignment);\ntypedef void* TestAlignedRealloc(void* memblock, size_t size, size_t alignment);\ntypedef void  TestAlignedFree(void* memblock);\n\n// pointers to tested functions\nTestMalloc*  Rmalloc;\nTestCalloc*  Rcalloc;\nTestRealloc* Rrealloc;\nTestFree*    Tfree;\nTestPosixMemalign*  Rposix_memalign;\nTestAlignedMalloc*  Raligned_malloc;\nTestAlignedRealloc* Raligned_realloc;\nTestAlignedFree* Taligned_free;\n\n// call functions via pointer and check result's alignment\nvoid* Tmalloc(size_t size);\nvoid* Tcalloc(size_t num, size_t size);\nvoid* Trealloc(void* memblock, size_t size);\nint   Tposix_memalign(void **memptr, size_t alignment, size_t size);\nvoid* Taligned_malloc(size_t size, size_t alignment);\nvoid* Taligned_realloc(void* memblock, size_t size, size_t alignment);\n\n\nbool error_occurred = false;\n\n#if __APPLE__\n// Tests that use the variables are skipped on macOS*\n#else\nconst size_t COUNT_ELEM_CALLOC = 2;\nconst int COUNT_TESTS = 1000;\nstatic bool perProcessLimits = true;\n#endif\n\nconst size_t POWERS_OF_2 = 20;\n\nstruct MemStruct\n{\n    void* Pointer;\n    UINT Size;\n\n    MemStruct() : Pointer(NULL), Size(0) {}\n    MemStruct(void* ptr, UINT sz) : Pointer(ptr), Size(sz) {}\n};\n\nclass CMemTest: NoAssign\n{\n    UINT CountErrors;\n    bool FullLog;\n    Harness::SpinBarrier *limitBarrier;\n    static bool firstTime;\n\npublic:\n    CMemTest(Harness::SpinBarrier *barrier, bool isVerbose=false) :\n        CountErrors(0), limitBarrier(barrier)\n        {\n            srand((UINT)time(NULL));\n            FullLog=isVerbose;\n        }\n    void NULLReturn(UINT MinSize, UINT MaxSize, int total_threads); // NULL pointer + check errno\n    void UniquePointer(); // unique pointer - check with padding\n    void AddrArifm(); // unique pointer - check with pointer arithmetic\n    bool ShouldReportError();\n    void Free_NULL(); //\n    void Zerofilling(); // check if arrays are zero-filled\n    void TestAlignedParameters();\n    void RunAllTests(int total_threads);\n    ~CMemTest() {}\n};\n\nclass Limit {\n    size_t limit;\npublic:\n    Limit(size_t a_limit) : limit(a_limit) {}\n    void operator() () const {\n        limitMem(limit);\n    }\n};\n\nint argC;\nchar** argV;\n\nstruct RoundRobin: NoAssign {\n    const long number_of_threads;\n    mutable CMemTest test;\n\n    RoundRobin( long p, Harness::SpinBarrier *limitBarrier, bool verbose ) :\n        number_of_threads(p), test(limitBarrier, verbose) {}\n    void operator()( int /*id*/ ) const\n        {\n            test.RunAllTests(number_of_threads);\n        }\n};\n\nbool CMemTest::firstTime = true;\n\ninline size_t choose_random_alignment() {\n    return sizeof(void*)<<(rand() % POWERS_OF_2);\n}\n\nstatic void setSystemAllocs()\n{\n    Rmalloc=malloc;\n    Rrealloc=realloc;\n    Rcalloc=calloc;\n    Tfree=free;\n#if _WIN32 || _WIN64\n    Raligned_malloc=_aligned_malloc;\n    Raligned_realloc=_aligned_realloc;\n    Taligned_free=_aligned_free;\n    Rposix_memalign=0;\n#elif  __APPLE__ || __sun || __ANDROID__\n// macOS, Solaris*, and Android* don't have posix_memalign\n    Raligned_malloc=0;\n    Raligned_realloc=0;\n    Taligned_free=0;\n    Rposix_memalign=0;\n#else\n    Raligned_malloc=0;\n    Raligned_realloc=0;\n    Taligned_free=0;\n    Rposix_memalign=posix_memalign;\n#endif\n}\n\n// check that realloc works as free and as malloc\nvoid ReallocParam()\n{\n    const int ITERS = 1000;\n    int i;\n    void *bufs[ITERS];\n\n    bufs[0] = Trealloc(NULL, 30*MByte);\n    ASSERT(bufs[0], \"Can't get memory to start the test.\");\n\n    for (i=1; i<ITERS; i++)\n    {\n        bufs[i] = Trealloc(NULL, 30*MByte);\n        if (NULL == bufs[i])\n            break;\n    }\n    ASSERT(i<ITERS, \"Limits should be decreased for the test to work.\");\n\n    Trealloc(bufs[0], 0);\n    /* There is a race for the free space between different threads at\n       this point. So, have to run the test sequentially.\n    */\n    bufs[0] = Trealloc(NULL, 30*MByte);\n    ASSERT(bufs[0], NULL);\n\n    for (int j=0; j<i; j++)\n        Trealloc(bufs[j], 0);\n}\n\nvoid CheckArgumentsOverflow()\n{\n    void *p;\n    const size_t params[] = {SIZE_MAX, SIZE_MAX-16};\n\n    for (unsigned i=0; i<Harness::array_length(params); i++) {\n        p = Tmalloc(params[i]);\n        ASSERT(!p, NULL);\n        ASSERT_ERRNO(errno==ENOMEM, NULL);\n        p = Trealloc(NULL, params[i]);\n        ASSERT(!p, NULL);\n        ASSERT_ERRNO(errno==ENOMEM, NULL);\n        p = Tcalloc(1, params[i]);\n        ASSERT(!p, NULL);\n        ASSERT_ERRNO(errno==ENOMEM, NULL);\n        p = Tcalloc(params[i], 1);\n        ASSERT(!p, NULL);\n        ASSERT_ERRNO(errno==ENOMEM, NULL);\n    }\n    const size_t max_alignment = size_t(1) << (sizeof(size_t)*CHAR_BIT - 1);\n    if (Rposix_memalign) {\n        int ret = Rposix_memalign(&p, max_alignment, ~max_alignment);\n        ASSERT(ret == ENOMEM, NULL);\n        for (unsigned i=0; i<Harness::array_length(params); i++) {\n            ret = Rposix_memalign(&p, max_alignment, params[i]);\n            ASSERT(ret == ENOMEM, NULL);\n            ret = Rposix_memalign(&p, sizeof(void*), params[i]);\n            ASSERT(ret == ENOMEM, NULL);\n        }\n    }\n    if (Raligned_malloc) {\n        p = Raligned_malloc(~max_alignment, max_alignment);\n        ASSERT(!p, NULL);\n        for (unsigned i=0; i<Harness::array_length(params); i++) {\n            p = Raligned_malloc(params[i], max_alignment);\n            ASSERT(!p, NULL);\n            ASSERT_ERRNO(errno==ENOMEM, NULL);\n            p = Raligned_malloc(params[i], sizeof(void*));\n            ASSERT(!p, NULL);\n            ASSERT_ERRNO(errno==ENOMEM, NULL);\n        }\n    }\n\n    p = Tcalloc(SIZE_MAX/2-16, SIZE_MAX/2-16);\n    ASSERT(!p, NULL);\n    ASSERT_ERRNO(errno==ENOMEM, NULL);\n    p = Tcalloc(SIZE_MAX/2, SIZE_MAX/2);\n    ASSERT(!p, NULL);\n    ASSERT_ERRNO(errno==ENOMEM, NULL);\n}\n\nvoid InvariantDataRealloc(bool aligned, size_t maxAllocSize, bool checkData)\n{\n    Harness::FastRandom fastRandom(1);\n    size_t size = 0, start = 0;\n    char *ptr = NULL,\n        // master to create copies and compare ralloc result against it\n        *master = (char*)Tmalloc(2*maxAllocSize);\n\n    ASSERT(master, NULL);\n    ASSERT(!(2*maxAllocSize%sizeof(unsigned short)),\n           \"The loop below expects that 2*maxAllocSize contains sizeof(unsigned short)\");\n    for (size_t k = 0; k<2*maxAllocSize; k+=sizeof(unsigned short))\n        *(unsigned short*)(master+k) = fastRandom.get();\n\n    for (int i=0; i<100; i++) {\n        // don't want sizeNew==0 here\n        const size_t sizeNew = fastRandom.get() % (maxAllocSize-1) + 1;\n        char *ptrNew = aligned?\n            (char*)Taligned_realloc(ptr, sizeNew, choose_random_alignment())\n            : (char*)Trealloc(ptr, sizeNew);\n        ASSERT(ptrNew, NULL);\n        // check that old data not changed\n        if (checkData)\n            ASSERT(!memcmp(ptrNew, master+start, min(size, sizeNew)), \"broken data\");\n\n        // prepare fresh data, copying them from random position in master\n        size = sizeNew;\n        ptr = ptrNew;\n        if (checkData) {\n            start = fastRandom.get() % maxAllocSize;\n            memcpy(ptr, master+start, size);\n        }\n    }\n    if (aligned)\n        Taligned_realloc(ptr, 0, choose_random_alignment());\n    else\n        Trealloc(ptr, 0);\n    Tfree(master);\n}\n\n#include \"harness_memory.h\"\n\nvoid CheckReallocLeak()\n{\n    int i;\n    const int ITER_TO_STABILITY = 10;\n    // do bootstrap\n    for (int k=0; k<3; k++)\n        InvariantDataRealloc(/*aligned=*/false, 128*MByte, /*checkData=*/false);\n    size_t prev = GetMemoryUsage(peakUsage);\n    // expect realloc to not increase peak memory consumption after ITER_TO_STABILITY-1 iterations\n    for (i=0; i<ITER_TO_STABILITY; i++) {\n        for (int k=0; k<3; k++)\n            InvariantDataRealloc(/*aligned=*/false, 128*MByte, /*checkData=*/false);\n        size_t curr = GetMemoryUsage(peakUsage);\n        if (prev == curr)\n            break;\n        prev = curr;\n    }\n    ASSERT(i < ITER_TO_STABILITY, \"Can't stabilize memory consumption.\");\n}\n\nHARNESS_EXPORT\nint main(int argc, char* argv[]) {\n    argC=argc;\n    argV=argv;\n    MaxThread = MinThread = 1;\n    Rmalloc=scalable_malloc;\n    Rrealloc=scalable_realloc;\n    Rcalloc=scalable_calloc;\n    Tfree=scalable_free;\n    Rposix_memalign=scalable_posix_memalign;\n    Raligned_malloc=scalable_aligned_malloc;\n    Raligned_realloc=scalable_aligned_realloc;\n    Taligned_free=scalable_aligned_free;\n\n    // check if we were called to test standard behavior\n    for (int i=1; i< argc; i++) {\n        if (strcmp((char*)*(argv+i),\"-s\")==0)\n        {\n#if __INTEL_COMPILER == 1400 && __linux__\n            // Workaround for Intel(R) C++ Compiler XE, version 14.0.0.080:\n            // unable to call setSystemAllocs() in such configuration.\n            REPORT(\"Known issue: Standard allocator testing is not supported.\\n\");\n            REPORT( \"skip\\n\" );\n            return 0;\n#else\n            setSystemAllocs();\n            argC--;\n            break;\n#endif\n        }\n    }\n\n    ParseCommandLine( argC, argV );\n#if __linux__\n    /* According to man pthreads\n       \"NPTL threads do not share resource limits (fixed in kernel 2.6.10)\".\n       Use per-threads limits for affected systems.\n     */\n    if ( LinuxKernelVersion() < 2*1000000 + 6*1000 + 10)\n        perProcessLimits = false;\n#endif\n    //-------------------------------------\n#if __APPLE__\n    /* Skip due to lack of memory limit enforcing under macOS. */\n#else\n    limitMem(200);\n    ReallocParam();\n    limitMem(0);\n#endif\n\n//for linux and dynamic runtime errno is used to check allocator functions\n//check if library compiled with /MD(d) and we can use errno\n#if _MSC_VER\n#if defined(_MT) && defined(_DLL) //check errno if test itself compiled with /MD(d) only\n    char*  version_info_block = NULL;\n    int version_info_block_size;\n    LPVOID comments_block = NULL;\n    UINT comments_block_size;\n#ifdef _DEBUG\n#define __TBBMALLOCDLL \"tbbmalloc_debug.dll\"\n#else  //_DEBUG\n#define __TBBMALLOCDLL \"tbbmalloc.dll\"\n#endif //_DEBUG\n    version_info_block_size = GetFileVersionInfoSize( __TBBMALLOCDLL, (LPDWORD)&version_info_block_size );\n    if( version_info_block_size\n        && ((version_info_block = (char*)malloc(version_info_block_size)) != NULL)\n        && GetFileVersionInfo(  __TBBMALLOCDLL, NULL, version_info_block_size, version_info_block )\n        && VerQueryValue( version_info_block, \"\\\\StringFileInfo\\\\000004b0\\\\Comments\", &comments_block, &comments_block_size )\n        && strstr( (char*)comments_block, \"/MD\" )\n        ){\n            __tbb_test_errno = true;\n     }\n     if( version_info_block ) free( version_info_block );\n#endif // defined(_MT) && defined(_DLL)\n#else  // _MSC_VER\n    __tbb_test_errno = true;\n#endif // _MSC_VER\n\n    CheckArgumentsOverflow();\n    CheckReallocLeak();\n    for( int p=MaxThread; p>=MinThread; --p ) {\n        REMARK(\"testing with %d threads\\n\", p );\n        for (int limit=0; limit<2; limit++) {\n            int ret = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT,\n                                               16*1024*limit);\n            ASSERT(ret==TBBMALLOC_OK, NULL);\n            Harness::SpinBarrier *barrier = new Harness::SpinBarrier(p);\n            NativeParallelFor( p, RoundRobin(p, barrier, Verbose) );\n            delete barrier;\n        }\n    }\n    int ret = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, 0);\n    ASSERT(ret==TBBMALLOC_OK, NULL);\n    if( !error_occurred )\n        REPORT(\"done\\n\");\n    return 0;\n}\n\n// if non-zero byte found, returns bad value address plus 1\nsize_t NonZero(void *ptr, size_t size)\n{\n    size_t words = size / sizeof(intptr_t);\n    size_t tailSz = size % sizeof(intptr_t);\n    intptr_t *buf =(intptr_t*)ptr;\n    char *bufTail =(char*)(buf+words);\n\n    for (size_t i=0; i<words; i++)\n        if (buf[i]) {\n            for (unsigned b=0; b<sizeof(intptr_t); b++)\n                if (((char*)(buf+i))[b])\n                    return sizeof(intptr_t)*i + b + 1;\n        }\n    for (size_t i=0; i<tailSz; i++)\n        if (bufTail[i]) {\n            return words*sizeof(intptr_t)+i+1;\n        }\n    return 0;\n}\n\nstruct TestStruct\n{\n    DWORD field1:2;\n    DWORD field2:6;\n    double field3;\n    UCHAR field4[100];\n    TestStruct* field5;\n    std::vector<int> field7;\n    double field8;\n};\n\nvoid* Tmalloc(size_t size)\n{\n    // For compatibility, on 64-bit systems malloc should align to 16 bytes\n    size_t alignment = (sizeof(intptr_t)>4 && size>8) ? 16 : 8;\n    void *ret = Rmalloc(size);\n    if (0 != ret)\n        ASSERT(0==((uintptr_t)ret & (alignment-1)),\n               \"allocation result should be properly aligned\");\n    return ret;\n}\nvoid* Tcalloc(size_t num, size_t size)\n{\n    // For compatibility, on 64-bit systems calloc should align to 16 bytes\n    size_t alignment = (sizeof(intptr_t)>4 && num && size>8) ? 16 : 8;\n    void *ret = Rcalloc(num, size);\n    if (0 != ret)\n        ASSERT(0==((uintptr_t)ret & (alignment-1)),\n               \"allocation result should be properly aligned\");\n    return ret;\n}\nvoid* Trealloc(void* memblock, size_t size)\n{\n    // For compatibility, on 64-bit systems realloc should align to 16 bytes\n    size_t alignment = (sizeof(intptr_t)>4 && size>8) ? 16 : 8;\n    void *ret = Rrealloc(memblock, size);\n    if (0 != ret)\n        ASSERT(0==((uintptr_t)ret & (alignment-1)),\n               \"allocation result should be properly aligned\");\n    return ret;\n}\nint Tposix_memalign(void **memptr, size_t alignment, size_t size)\n{\n    int ret = Rposix_memalign(memptr, alignment, size);\n    if (0 == ret)\n        ASSERT(0==((uintptr_t)*memptr & (alignment-1)),\n               \"allocation result should be aligned\");\n    return ret;\n}\nvoid* Taligned_malloc(size_t size, size_t alignment)\n{\n    void *ret = Raligned_malloc(size, alignment);\n    if (0 != ret)\n        ASSERT(0==((uintptr_t)ret & (alignment-1)),\n               \"allocation result should be aligned\");\n    return ret;\n}\nvoid* Taligned_realloc(void* memblock, size_t size, size_t alignment)\n{\n    void *ret = Raligned_realloc(memblock, size, alignment);\n    if (0 != ret)\n        ASSERT(0==((uintptr_t)ret & (alignment-1)),\n               \"allocation result should be aligned\");\n    return ret;\n}\n\nstruct PtrSize {\n    void  *ptr;\n    size_t size;\n};\n\nstatic int cmpAddrs(const void *p1, const void *p2)\n{\n    const PtrSize *a = (const PtrSize *)p1;\n    const PtrSize *b = (const PtrSize *)p2;\n\n    return a->ptr < b->ptr ? -1 : ( a->ptr == b->ptr ? 0 : 1);\n}\n\nvoid CMemTest::AddrArifm()\n{\n    PtrSize *arr = (PtrSize*)Tmalloc(COUNT_ELEM*sizeof(PtrSize));\n\n    if (FullLog) REPORT(\"\\nUnique pointer using Address arithmetics\\n\");\n    if (FullLog) REPORT(\"malloc....\");\n    ASSERT(arr, NULL);\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        arr[i].size=rand()%MAX_SIZE;\n        arr[i].ptr=Tmalloc(arr[i].size);\n    }\n    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);\n\n    for (int i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)\n            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,\n                   \"intersection detected\");\n    }\n    //----------------------------------------------------------------\n    if (FullLog) REPORT(\"realloc....\");\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        size_t count=arr[i].size*2;\n        void *tmpAddr=Trealloc(arr[i].ptr,count);\n        if (NULL!=tmpAddr) {\n            arr[i].ptr = tmpAddr;\n            arr[i].size = count;\n        } else if (count==0) { // because realloc(..., 0) works as free\n            arr[i].ptr = NULL;\n            arr[i].size = 0;\n        }\n    }\n    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);\n\n    for (int i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)\n            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,\n                   \"intersection detected\");\n    }\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        Tfree(arr[i].ptr);\n    }\n    //-------------------------------------------\n    if (FullLog) REPORT(\"calloc....\");\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        arr[i].size=rand()%MAX_SIZE;\n        arr[i].ptr=Tcalloc(arr[i].size,1);\n    }\n    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);\n\n    for (int i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)\n            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,\n                   \"intersection detected\");\n    }\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        Tfree(arr[i].ptr);\n    }\n    Tfree(arr);\n}\n\nvoid CMemTest::Zerofilling()\n{\n    TestStruct* TSMas;\n    size_t CountElement;\n    CountErrors=0;\n    if (FullLog) REPORT(\"\\nzeroings elements of array....\");\n    //test struct\n    for (int i=0; i<COUNTEXPERIMENT; i++)\n    {\n        CountElement=rand()%MAX_SIZE;\n        TSMas=(TestStruct*)Tcalloc(CountElement,sizeof(TestStruct));\n        if (NULL == TSMas)\n            continue;\n        for (size_t j=0; j<CountElement; j++)\n        {\n            if (NonZero(TSMas+j, sizeof(TestStruct)))\n            {\n                CountErrors++;\n                if (ShouldReportError()) REPORT(\"detect nonzero element at TestStruct\\n\");\n            }\n        }\n        Tfree(TSMas);\n    }\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n}\n\n#if !__APPLE__\n\nvoid myMemset(void *ptr, int c, size_t n)\n{\n#if  __linux__ &&  __i386__\n// memset in Fedora 13 not always correctly sets memory to required values.\n    char *p = (char*)ptr;\n    for (size_t i=0; i<n; i++)\n        p[i] = c;\n#else\n    memset(ptr, c, n);\n#endif\n}\n\n// This test requires more than TOTAL_MB_ALLOC MB of RAM.\n#if __ANDROID__\n// Android requires lower limit due to lack of virtual memory.\n#define TOTAL_MB_ALLOC\t200\n#else\n#define TOTAL_MB_ALLOC  800\n#endif\nvoid CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)\n{\n    const int MB_PER_THREAD = TOTAL_MB_ALLOC / total_threads;\n    // find size to guarantee getting NULL for 1024 B allocations\n    const int MAXNUM_1024 = (MB_PER_THREAD + (MB_PER_THREAD>>2)) * 1024;\n\n    std::vector<MemStruct> PointerList;\n    void *tmp;\n    CountErrors=0;\n    int CountNULL, num_1024;\n    if (FullLog) REPORT(\"\\nNULL return & check errno:\\n\");\n    UINT Size;\n    Limit limit_total(TOTAL_MB_ALLOC), no_limit(0);\n    void **buf_1024 = (void**)Tmalloc(MAXNUM_1024*sizeof(void*));\n\n    ASSERT(buf_1024, NULL);\n    /* We must have space for pointers when memory limit is hit.\n       Reserve enough for the worst case, taking into account race for\n       limited space between threads.\n    */\n    PointerList.reserve(TOTAL_MB_ALLOC*MByte/MinSize);\n\n    /* There is a bug in the specific version of GLIBC (2.5-12) shipped\n       with RHEL5 that leads to erroneous working of the test\n       on Intel(R) 64 and Itanium(R) architecture when setrlimit-related part is enabled.\n       Switching to GLIBC 2.5-18 from RHEL5.1 resolved the issue.\n     */\n    if (perProcessLimits)\n        limitBarrier->wait(limit_total);\n    else\n        limitMem(MB_PER_THREAD);\n\n    /* regression test against the bug in allocator when it dereference NULL\n       while lack of memory\n    */\n    for (num_1024=0; num_1024<MAXNUM_1024; num_1024++) {\n        buf_1024[num_1024] = Tcalloc(1024, 1);\n        if (! buf_1024[num_1024]) {\n            ASSERT_ERRNO(errno == ENOMEM, NULL);\n            break;\n        }\n    }\n    for (int i=0; i<num_1024; i++)\n        Tfree(buf_1024[i]);\n    Tfree(buf_1024);\n\n    do {\n        Size=rand()%(MaxSize-MinSize)+MinSize;\n        tmp=Tmalloc(Size);\n        if (tmp != NULL)\n        {\n            myMemset(tmp, 0, Size);\n            PointerList.push_back(MemStruct(tmp, Size));\n        }\n    } while(tmp != NULL);\n    ASSERT_ERRNO(errno == ENOMEM, NULL);\n    if (FullLog) REPORT(\"\\n\");\n\n    // preparation complete, now running tests\n    // malloc\n    if (FullLog) REPORT(\"malloc....\");\n    CountNULL = 0;\n    while (CountNULL==0)\n        for (int j=0; j<COUNT_TESTS; j++)\n        {\n            Size=rand()%(MaxSize-MinSize)+MinSize;\n            errno = ENOMEM+j+1;\n            tmp=Tmalloc(Size);\n            if (tmp == NULL)\n            {\n                CountNULL++;\n                if ( CHECK_ERRNO(errno != ENOMEM) ) {\n                    CountErrors++;\n                    if (ShouldReportError()) REPORT(\"NULL returned, error: errno (%d) != ENOMEM\\n\", errno);\n                }\n            }\n            else\n            {\n                // Technically, if malloc returns a non-NULL pointer, it is allowed to set errno anyway.\n                // However, on most systems it does not set errno.\n                bool known_issue = false;\n#if __linux__ || __ANDROID__\n                if( CHECK_ERRNO(errno==ENOMEM) ) known_issue = true;\n#endif /* __linux__ */\n                if ( CHECK_ERRNO(errno != ENOMEM+j+1) && !known_issue) {\n                    CountErrors++;\n                    if (ShouldReportError()) REPORT(\"error: errno changed to %d though valid pointer was returned\\n\", errno);\n                }\n                myMemset(tmp, 0, Size);\n                PointerList.push_back(MemStruct(tmp, Size));\n            }\n        }\n    if (FullLog) REPORT(\"end malloc\\n\");\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n\n    CountErrors=0;\n    //calloc\n    if (FullLog) REPORT(\"calloc....\");\n    CountNULL = 0;\n    while (CountNULL==0)\n        for (int j=0; j<COUNT_TESTS; j++)\n        {\n            Size=rand()%(MaxSize-MinSize)+MinSize;\n            errno = ENOMEM+j+1;\n            tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);\n            if (tmp == NULL)\n            {\n                CountNULL++;\n                if ( CHECK_ERRNO(errno != ENOMEM) ){\n                    CountErrors++;\n                    if (ShouldReportError()) REPORT(\"NULL returned, error: errno(%d) != ENOMEM\\n\", errno);\n                }\n            }\n            else\n            {\n                // Technically, if calloc returns a non-NULL pointer, it is allowed to set errno anyway.\n                // However, on most systems it does not set errno.\n                bool known_issue = false;\n#if __linux__\n                if( CHECK_ERRNO(errno==ENOMEM) ) known_issue = true;\n#endif /* __linux__ */\n                if ( CHECK_ERRNO(errno != ENOMEM+j+1) && !known_issue ) {\n                    CountErrors++;\n                    if (ShouldReportError()) REPORT(\"error: errno changed to %d though valid pointer was returned\\n\", errno);\n                }\n                PointerList.push_back(MemStruct(tmp, Size));\n            }\n        }\n    if (FullLog) REPORT(\"end calloc\\n\");\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n    CountErrors=0;\n    if (FullLog) REPORT(\"realloc....\");\n    CountNULL = 0;\n    if (PointerList.size() > 0)\n        while (CountNULL==0)\n            for (size_t i=0; i<(size_t)COUNT_TESTS && i<PointerList.size(); i++)\n            {\n                errno = 0;\n                tmp=Trealloc(PointerList[i].Pointer,PointerList[i].Size*2);\n                if (tmp != NULL) // same or another place\n                {\n                    bool known_issue = false;\n#if __linux__\n                    if( errno==ENOMEM ) known_issue = true;\n#endif /* __linux__ */\n                    if (errno != 0 && !known_issue) {\n                        CountErrors++;\n                        if (ShouldReportError()) REPORT(\"valid pointer returned, error: errno not kept\\n\");\n                    }\n                    // newly allocated area have to be zeroed\n                    myMemset((char*)tmp + PointerList[i].Size, 0, PointerList[i].Size);\n                    PointerList[i].Pointer = tmp;\n                    PointerList[i].Size *= 2;\n                } else {\n                    CountNULL++;\n                    if ( CHECK_ERRNO(errno != ENOMEM) )\n                    {\n                        CountErrors++;\n                        if (ShouldReportError()) REPORT(\"NULL returned, error: errno(%d) != ENOMEM\\n\", errno);\n                    }\n                    // check data integrity\n                    if (NonZero(PointerList[i].Pointer, PointerList[i].Size)) {\n                        CountErrors++;\n                        if (ShouldReportError()) REPORT(\"NULL returned, error: data changed\\n\");\n                    }\n                }\n            }\n    if (FullLog) REPORT(\"realloc end\\n\");\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n    for (UINT i=0; i<PointerList.size(); i++)\n    {\n        Tfree(PointerList[i].Pointer);\n    }\n\n    if (perProcessLimits)\n        limitBarrier->wait(no_limit);\n    else\n        limitMem(0);\n}\n#endif /* #if !__APPLE__ */\n\nvoid CMemTest::UniquePointer()\n{\n    CountErrors=0;\n    int **MasPointer = (int **)Tmalloc(sizeof(int*)*COUNT_ELEM);\n    size_t *MasCountElem = (size_t*)Tmalloc(sizeof(size_t)*COUNT_ELEM);\n    if (FullLog) REPORT(\"\\nUnique pointer using 0\\n\");\n    ASSERT(MasCountElem && MasPointer, NULL);\n    //\n    //-------------------------------------------------------\n    //malloc\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        MasCountElem[i]=rand()%MAX_SIZE;\n        MasPointer[i]=(int*)Tmalloc(MasCountElem[i]*sizeof(int));\n        if (NULL == MasPointer[i])\n            MasCountElem[i]=0;\n        memset(MasPointer[i], 0, sizeof(int)*MasCountElem[i]);\n    }\n    if (FullLog) REPORT(\"malloc....\");\n    for (UINT i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (size_t badOff = NonZero(MasPointer[i], sizeof(int)*MasCountElem[i])) {\n            CountErrors++;\n            if (ShouldReportError())\n                REPORT(\"error, detect non-zero at %p\\n\", (char*)MasPointer[i]+badOff-1);\n        }\n        memset(MasPointer[i], 1, sizeof(int)*MasCountElem[i]);\n    }\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n    //----------------------------------------------------------\n    //calloc\n    for (int i=0; i<COUNT_ELEM; i++)\n        Tfree(MasPointer[i]);\n    CountErrors=0;\n    for (long i=0; i<COUNT_ELEM; i++)\n    {\n        MasPointer[i]=(int*)Tcalloc(MasCountElem[i]*sizeof(int),2);\n        if (NULL == MasPointer[i])\n            MasCountElem[i]=0;\n    }\n    if (FullLog) REPORT(\"calloc....\");\n    for (int i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (size_t badOff = NonZero(MasPointer[i], sizeof(int)*MasCountElem[i])) {\n            CountErrors++;\n            if (ShouldReportError())\n                REPORT(\"error, detect non-zero at %p\\n\", (char*)MasPointer[i]+badOff-1);\n        }\n        memset(MasPointer[i], 1, sizeof(int)*MasCountElem[i]);\n    }\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n    //---------------------------------------------------------\n    //realloc\n    CountErrors=0;\n    for (int i=0; i<COUNT_ELEM; i++)\n    {\n        MasCountElem[i]*=2;\n        *(MasPointer+i)=\n            (int*)Trealloc(*(MasPointer+i),MasCountElem[i]*sizeof(int));\n        if (NULL == MasPointer[i])\n            MasCountElem[i]=0;\n        memset(MasPointer[i], 0, sizeof(int)*MasCountElem[i]);\n    }\n    if (FullLog) REPORT(\"realloc....\");\n    for (int i=0; i<COUNT_ELEM-1; i++)\n    {\n        if (NonZero(MasPointer[i], sizeof(int)*MasCountElem[i]))\n            CountErrors++;\n        memset(MasPointer[i], 1, sizeof(int)*MasCountElem[i]);\n    }\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n    for (int i=0; i<COUNT_ELEM; i++)\n        Tfree(MasPointer[i]);\n    Tfree(MasCountElem);\n    Tfree(MasPointer);\n}\n\nbool CMemTest::ShouldReportError()\n{\n    if (FullLog)\n        return true;\n    else\n        if (firstTime) {\n            firstTime = false;\n            return true;\n        } else\n            return false;\n}\n\nvoid CMemTest::Free_NULL()\n{\n    CountErrors=0;\n    if (FullLog) REPORT(\"\\ncall free with parameter NULL....\");\n    errno = 0;\n    for (int i=0; i<COUNTEXPERIMENT; i++)\n    {\n        Tfree(NULL);\n        if (CHECK_ERRNO(errno))\n        {\n            CountErrors++;\n            if (ShouldReportError()) REPORT(\"error is found by a call free with parameter NULL\\n\");\n        }\n    }\n    if (CountErrors) REPORT(\"%s\\n\",strError);\n    else if (FullLog) REPORT(\"%s\\n\",strOk);\n    error_occurred |= ( CountErrors>0 ) ;\n}\n\nvoid CMemTest::TestAlignedParameters()\n{\n    void *memptr;\n    int ret;\n\n    if (Rposix_memalign) {\n        // alignment isn't power of 2\n        for (int bad_align=3; bad_align<16; bad_align++)\n            if (bad_align&(bad_align-1)) {\n                ret = Tposix_memalign(NULL, bad_align, 100);\n                ASSERT(EINVAL==ret, NULL);\n            }\n\n        memptr = &ret;\n        ret = Tposix_memalign(&memptr, 5*sizeof(void*), 100);\n        ASSERT(memptr == &ret,\n               \"memptr should not be changed after unsuccessful call\");\n        ASSERT(EINVAL==ret, NULL);\n\n        // alignment is power of 2, but not a multiple of sizeof(void *),\n        // we expect that sizeof(void*) > 2\n        ret = Tposix_memalign(NULL, 2, 100);\n        ASSERT(EINVAL==ret, NULL);\n    }\n    if (Raligned_malloc) {\n        // alignment isn't power of 2\n        for (int bad_align=3; bad_align<16; bad_align++)\n            if (bad_align&(bad_align-1)) {\n                memptr = Taligned_malloc(100, bad_align);\n                ASSERT(NULL==memptr, NULL);\n                ASSERT_ERRNO(EINVAL==errno, NULL);\n            }\n\n        // size is zero\n        memptr = Taligned_malloc(0, 16);\n        ASSERT(NULL==memptr, \"size is zero, so must return NULL\");\n        ASSERT_ERRNO(EINVAL==errno, NULL);\n    }\n    if (Taligned_free) {\n        // NULL pointer is OK to free\n        errno = 0;\n        Taligned_free(NULL);\n        /* As there is no return value for free, strictly speaking we can't\n           check errno here. But checked implementations obey the assertion.\n        */\n        ASSERT_ERRNO(0==errno, NULL);\n    }\n    if (Raligned_realloc) {\n        for (int i=1; i<20; i++) {\n            // checks that calls work correctly in presence of non-zero errno\n            errno = i;\n            void *ptr = Taligned_malloc(i*10, 128);\n            ASSERT(NULL!=ptr, NULL);\n            ASSERT_ERRNO(0!=errno, NULL);\n            // if size is zero and pointer is not NULL, works like free\n            memptr = Taligned_realloc(ptr, 0, 64);\n            ASSERT(NULL==memptr, NULL);\n            ASSERT_ERRNO(0!=errno, NULL);\n        }\n        // alignment isn't power of 2\n        for (int bad_align=3; bad_align<16; bad_align++)\n            if (bad_align&(bad_align-1)) {\n                void *ptr = &bad_align;\n                memptr = Taligned_realloc(&ptr, 100, bad_align);\n                ASSERT(NULL==memptr, NULL);\n                ASSERT(&bad_align==ptr, NULL);\n                ASSERT_ERRNO(EINVAL==errno, NULL);\n            }\n    }\n}\n\nvoid CMemTest::RunAllTests(int total_threads)\n{\n    Zerofilling();\n    Free_NULL();\n    InvariantDataRealloc(/*aligned=*/false, 8*MByte, /*checkData=*/true);\n    if (Raligned_realloc)\n        InvariantDataRealloc(/*aligned=*/true, 8*MByte, /*checkData=*/true);\n    TestAlignedParameters();\n    UniquePointer();\n    AddrArifm();\n#if __APPLE__\n    REPORT(\"Known issue: some tests are skipped on macOS\\n\");\n#else\n    NULLReturn(1*MByte,100*MByte,total_threads);\n#endif\n    if (FullLog) REPORT(\"Tests for %d threads ended\\n\", total_threads);\n}\n\n#endif /* __TBB_WIN8UI_SUPPORT\t */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_init_shutdown.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/scalable_allocator.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/aligned_space.h\"\n\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n#if !__TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"harness_tbb_independence.h\"\n#endif\n\ntbb::atomic<int> FinishedTasks;\nconst int MaxTasks = 16;\n\n/*--------------------------------------------------------------------*/\n// The regression test against a bug triggered when malloc initialization\n// and thread shutdown were called simultaneously, in which case\n// Windows dynamic loader lock and allocator initialization/termination lock\n// were taken in different order.\n\nclass TestFunc1 {\n    Harness::SpinBarrier* my_barr;\npublic:\n    TestFunc1 (Harness::SpinBarrier& barr) : my_barr(&barr) {}\n    void operator() (bool do_malloc) const {\n        my_barr->wait();\n        if (do_malloc) scalable_malloc(10);\n        ++FinishedTasks;\n    }\n};\n\ntypedef NativeParallelForTask<bool,TestFunc1> TestTask1;\n\nvoid Test1 () {\n    int NTasks = min(MaxTasks, max(2, MaxThread));\n    Harness::SpinBarrier barr(NTasks);\n    TestFunc1 tf(barr);\n    FinishedTasks = 0;\n    tbb::aligned_space<TestTask1,MaxTasks> tasks;\n\n    for(int i=0; i<NTasks; ++i) {\n        TestTask1* t = tasks.begin()+i;\n        new(t) TestTask1(i%2==0, tf);\n        t->start();\n    }\n\n    Harness::Sleep(1000); // wait a second :)\n    ASSERT( FinishedTasks==NTasks, \"Some threads appear to deadlock\" );\n\n    for(int i=0; i<NTasks; ++i) {\n        TestTask1* t = tasks.begin()+i;\n        t->wait_to_finish();\n        t->~TestTask1();\n    }\n}\n\n/*--------------------------------------------------------------------*/\n// The regression test against a bug when cross-thread deallocation\n// caused livelock at thread shutdown.\n\nvoid* gPtr = NULL;\n\nclass TestFunc2a {\n    Harness::SpinBarrier* my_barr;\npublic:\n    TestFunc2a (Harness::SpinBarrier& barr) : my_barr(&barr) {}\n    void operator() (int) const {\n        gPtr = scalable_malloc(8);\n        my_barr->wait();\n        ++FinishedTasks;\n    }\n};\n\ntypedef NativeParallelForTask<int,TestFunc2a> TestTask2a;\n\nclass TestFunc2b: NoAssign {\n    Harness::SpinBarrier* my_barr;\n    TestTask2a& my_ward;\npublic:\n    TestFunc2b (Harness::SpinBarrier& barr, TestTask2a& t) : my_barr(&barr), my_ward(t) {}\n    void operator() (int) const {\n        tbb::internal::spin_wait_while_eq(gPtr, (void*)NULL);\n        scalable_free(gPtr);\n        my_barr->wait();\n        my_ward.wait_to_finish();\n        ++FinishedTasks;\n    }\n};\nvoid Test2() {\n    Harness::SpinBarrier barr(2);\n    TestFunc2a func2a(barr);\n    TestTask2a t2a(0, func2a);\n    TestFunc2b func2b(barr, t2a);\n    NativeParallelForTask<int,TestFunc2b> t2b(1, func2b);\n    FinishedTasks = 0;\n    t2a.start(); t2b.start();\n    Harness::Sleep(1000); // wait a second :)\n    ASSERT( FinishedTasks==2, \"Threads appear to deadlock\" );\n    t2b.wait_to_finish(); // t2a is monitored by t2b\n}\n\n#if _WIN32||_WIN64\n\nvoid TestKeyDtor() {}\n\n#else\n\nvoid *currSmall, *prevSmall, *currLarge, *prevLarge;\n\nextern \"C\" void threadDtor(void*) {\n    // First, release memory that was allocated before;\n    // it will not re-initialize the thread-local data if already deleted\n    prevSmall = currSmall;\n    scalable_free(currSmall);\n    prevLarge = currLarge;\n    scalable_free(currLarge);\n    // Then, allocate more memory.\n    // It will re-initialize the allocator data in the thread.\n    scalable_free(scalable_malloc(8));\n}\n\ninline bool intersectingObjects(const void *p1, const void *p2, size_t n)\n{\n    return p1>p2 ? ((uintptr_t)p1-(uintptr_t)p2)<n : ((uintptr_t)p2-(uintptr_t)p1)<n;\n}\n\nstruct TestThread: NoAssign {\n    TestThread(int ) {}\n\n    void operator()( int /*id*/ ) const {\n        pthread_key_t key;\n\n        currSmall = scalable_malloc(8);\n        ASSERT(!prevSmall || currSmall==prevSmall, \"Possible memory leak\");\n        currLarge = scalable_malloc(32*1024);\n        // intersectingObjects takes into account object shuffle\n        ASSERT(!prevLarge || intersectingObjects(currLarge, prevLarge, 32*1024), \"Possible memory leak\");\n        pthread_key_create( &key, &threadDtor );\n        pthread_setspecific(key, (const void*)42);\n    }\n};\n\n// test releasing memory from pthread key destructor\nvoid TestKeyDtor() {\n    for (int i=0; i<4; i++)\n        NativeParallelFor( 1, TestThread(1) );\n}\n\n#endif // _WIN32||_WIN64\n\nint TestMain () {\n    Test1(); // requires malloc initialization so should be first\n    Test2();\n    TestKeyDtor();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_lib_unload.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _USRDLL\n\n#include <stdlib.h> // for NULL\n#include \"harness_assert.h\"\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\nconst char *globalCallMsg = \"A TBB allocator function call is resolved into wrong implementation.\";\n\n#if _WIN32||_WIN64\n// must be defined in DLL for linker to not drop the dependency on the DLL.\nextern \"C\" {\n    extern __declspec(dllexport) void *scalable_malloc(size_t);\n    extern __declspec(dllexport) void scalable_free (void *);\n    extern __declspec(dllexport) void safer_scalable_free (void *, void (*)(void*));\n    extern __declspec(dllexport) void *scalable_realloc(void *, size_t);\n    extern __declspec(dllexport) void *safer_scalable_realloc(void *, size_t, void *);\n    extern __declspec(dllexport) void *scalable_calloc(size_t, size_t);\n    extern __declspec(dllexport) int scalable_posix_memalign(void **, size_t, size_t);\n    extern __declspec(dllexport) void *scalable_aligned_malloc(size_t, size_t);\n    extern __declspec(dllexport) void *scalable_aligned_realloc(void *, size_t, size_t);\n    extern __declspec(dllexport) void *safer_scalable_aligned_realloc(void *, size_t, size_t, void *);\n    extern __declspec(dllexport) void scalable_aligned_free(void *);\n    extern __declspec(dllexport) size_t scalable_msize(void *);\n    extern __declspec(dllexport) size_t safer_scalable_msize (void *, size_t (*)(void*));\n}\n#endif\n\n// Those functions must not be called instead of presented in dynamic library.\nextern \"C\" void *scalable_malloc(size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void scalable_free (void *)\n{\n    ASSERT(0, globalCallMsg);\n}\nextern \"C\" void safer_scalable_free (void *, void (*)(void*))\n{\n    ASSERT(0, globalCallMsg);\n}\nextern \"C\" void *scalable_realloc(void *, size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void *safer_scalable_realloc(void *, size_t, void *)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void *scalable_calloc(size_t, size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" int scalable_posix_memalign(void **, size_t, size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return 0;\n}\nextern \"C\" void *scalable_aligned_malloc(size_t, size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void *scalable_aligned_realloc(void *, size_t, size_t)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void *safer_scalable_aligned_realloc(void *, size_t, size_t, void *)\n{\n    ASSERT(0, globalCallMsg);\n    return NULL;\n}\nextern \"C\" void scalable_aligned_free(void *)\n{\n    ASSERT(0, globalCallMsg);\n}\nextern \"C\" size_t scalable_msize(void *)\n{\n    ASSERT(0, globalCallMsg);\n    return 0;\n}\nextern \"C\" size_t safer_scalable_msize (void *, size_t (*)(void*))\n{\n    ASSERT(0, globalCallMsg);\n    return 0;\n}\n\n#else  // _USRDLL\n\n// harness_defs.h must be included before tbb_stddef.h to overcome exception-dependent\n// system headers that come from tbb_stddef.h\n#include \"harness_defs.h\"\n#include \"tbb/tbb_stddef.h\"\n#if __TBB_WIN8UI_SUPPORT || __TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_MIC_OFFLOAD\n// The test does not work if dynamic load is unavailable.\n// For MIC offload, it fails because liboffload brings libiomp which observes and uses the fake scalable_* calls.\n#define HARNESS_SKIP_TEST 1\n#endif\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n#include \"harness.h\"\n\n#if !HARNESS_SKIP_TEST\n\n#include \"harness_dynamic_libs.h\"\n#include \"harness_memory.h\"\n\nextern \"C\" {\n#if _WIN32||_WIN64\nextern __declspec(dllimport)\n#endif\nvoid *scalable_malloc(size_t);\n}\n\nstruct Run {\n    void operator()( int /*id*/ ) const {\n        using namespace Harness;\n\n        void* (*malloc_ptr)(std::size_t);\n        void (*free_ptr)(void*);\n\n        void* (*aligned_malloc_ptr)(size_t size, size_t alignment);\n        void  (*aligned_free_ptr)(void*);\n\n        const char* actual_name;\n        LIBRARY_HANDLE lib = OpenLibrary(actual_name = MALLOCLIB_NAME1);\n        if (!lib)      lib = OpenLibrary(actual_name = MALLOCLIB_NAME2);\n        if (!lib) {\n            REPORT(\"Can't load \" MALLOCLIB_NAME1 \" or \" MALLOCLIB_NAME2 \"\\n\");\n            exit(1);\n        }\n        (FunctionAddress&)malloc_ptr = GetAddress(lib, \"scalable_malloc\");\n        (FunctionAddress&)free_ptr = GetAddress(lib, \"scalable_free\");\n        (FunctionAddress&)aligned_malloc_ptr = GetAddress(lib, \"scalable_aligned_malloc\");\n        (FunctionAddress&)aligned_free_ptr = GetAddress(lib, \"scalable_aligned_free\");\n\n        for (size_t sz = 1024; sz <= 10*1024 ; sz*=10) {\n            void *p1 = aligned_malloc_ptr(sz, 16);\n            memset(p1, 0, sz);\n            aligned_free_ptr(p1);\n        }\n\n        void *p = malloc_ptr(100);\n        memset(p, 1, 100);\n        free_ptr(p);\n\n        CloseLibrary(lib);\n#if _WIN32 || _WIN64\n        ASSERT(GetModuleHandle(actual_name),\n               \"allocator library must not be unloaded\");\n#else\n        ASSERT(dlsym(RTLD_DEFAULT, \"scalable_malloc\"),\n               \"allocator library must not be unloaded\");\n#endif\n    }\n};\n\nint TestMain () {\n    int i;\n    std::ptrdiff_t memory_leak;\n\n    // warm-up run\n    NativeParallelFor( 1, Run() );\n\n    {\n      /* 1st call to GetMemoryUsage() allocate some memory,\n         but it seems memory consumption stabilized after this.\n      */\n      GetMemoryUsage();\n      std::size_t memory_in_use = GetMemoryUsage();\n      ASSERT(memory_in_use == GetMemoryUsage(),\n             \"Memory consumption should not increase after 1st GetMemoryUsage() call\");\n    }\n    {\n        // expect that memory consumption stabilized after several runs\n        for (i=0; i<3; i++) {\n            std::size_t memory_in_use = GetMemoryUsage();\n            for (int j=0; j<10; j++)\n                NativeParallelFor( 1, Run() );\n            memory_leak = GetMemoryUsage() - memory_in_use;\n            if (memory_leak == 0)  // possibly too strong?\n                break;\n        }\n    }\n    if(3==i) {\n        // not stabilized, could be leak\n        REPORT( \"Error: memory leak of up to %ld bytes\\n\", static_cast<long>(memory_leak));\n        exit(1);\n    }\n\n    return Harness::Done;\n}\n\n#endif /* HARNESS_SKIP_TEST */\n\n#endif // _USRDLL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_overload.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#if (_WIN32 || _WIN64)\n// As the test is intentionally build with /EHs-, suppress multiple VS2005's\n// warnings like C4530: C++ exception handler used, but unwind semantics are not enabled\n#if defined(_MSC_VER) && !__INTEL_COMPILER\n/* ICC 10.1 and 11.0 generates code that uses std::_Raise_handler,\n   but it's only defined in libcpmt(d), which the test doesn't linked with.\n */\n#undef  _HAS_EXCEPTIONS\n#define _HAS_EXCEPTIONS _CPPUNWIND\n#endif\n// to use strdup w/o warnings\n#define _CRT_NONSTDC_NO_DEPRECATE 1\n#endif // _WIN32 || _WIN64\n\n#define _ISOC11_SOURCE 1 // to get C11 declarations for GLIBC\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n\n#include \"harness_allocator_overload.h\"\n\n#if MALLOC_WINDOWS_OVERLOAD_ENABLED\n#include \"tbb/tbbmalloc_proxy.h\"\n#endif\n\n#include \"harness.h\"\n\n#if !HARNESS_SKIP_TEST\n\n#if __ANDROID__\n  #include <android/api-level.h> // for __ANDROID_API__\n#endif\n\n#define __TBB_POSIX_MEMALIGN_PRESENT (__linux__ && !__ANDROID__) || __APPLE__\n#define __TBB_PVALLOC_PRESENT __linux__ && !__ANDROID__\n#if __GLIBC__\n  // aligned_alloc available since GLIBC 2.16\n  #define __TBB_ALIGNED_ALLOC_PRESENT __GLIBC_PREREQ(2, 16)\n#endif // __GLIBC__\n // later Android doesn't have valloc or dlmalloc_usable_size\n#define __TBB_VALLOC_PRESENT (__linux__ && __ANDROID_API__<21) || __APPLE__\n#define __TBB_DLMALLOC_USABLE_SIZE_PRESENT  __ANDROID__ && __ANDROID_API__<21\n\n#include \"harness_report.h\"\n#include \"harness_assert.h\"\n#include <stdlib.h>\n#include <string.h>\n#if !__APPLE__\n#include <malloc.h>\n#endif\n#include <stdio.h>\n#include <new>\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n#include <unistd.h> // for sysconf\n#include <dlfcn.h>\n#endif\n\n#if __linux__\n#include <stdint.h> // for uintptr_t\n\nextern \"C\" {\nvoid *__libc_malloc(size_t size);\nvoid *__libc_realloc(void *ptr, size_t size);\nvoid *__libc_calloc(size_t num, size_t size);\nvoid __libc_free(void *ptr);\nvoid *__libc_memalign(size_t alignment, size_t size);\nvoid *__libc_pvalloc(size_t size);\nvoid *__libc_valloc(size_t size);\n#if __TBB_DLMALLOC_USABLE_SIZE_PRESENT\n#define malloc_usable_size(p) dlmalloc_usable_size(p)\nsize_t dlmalloc_usable_size(const void *ptr);\n#endif\n}\n\n#elif __APPLE__\n\n#include <malloc/malloc.h>\n#define malloc_usable_size(p) malloc_size(p)\n\n#elif _WIN32\n#include <stddef.h>\n#if __MINGW32__\n#include <unistd.h>\n#else\ntypedef unsigned __int16 uint16_t;\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n#endif\n\n#endif /* OS selection */\n\n#if _WIN32\n// On Windows, the trick with string \"dependency on msvcpXX.dll\" is necessary to create\n// dependency on msvcpXX.dll, for sake of a regression test.\n// On Linux, C++ RTL headers are undesirable because of breaking strict ANSI mode.\n#if defined(_MSC_VER) && _MSC_VER >= 1300 && _MSC_VER <= 1310 && !defined(__INTEL_COMPILER)\n/* Fixing compilation error reported by VS2003 for exception class\n   when _HAS_EXCEPTIONS is 0:\n   bad_cast that inherited from exception is not in std namespace.\n*/\nusing namespace std;\n#endif\n#include <string>\n#endif\n\n#include \"../tbbmalloc/shared_utils.h\"  // alignDown, alignUp, estimatedCacheLineSize\n\n/* start of code replicated from src/tbbmalloc */\n\nclass BackRefIdx { // composite index to backreference array\nprivate:\n    uint16_t master;      // index in BackRefMaster\n    uint16_t largeObj:1;  // is this object \"large\"?\n    uint16_t offset  :15; // offset from beginning of BackRefBlock\npublic:\n    BackRefIdx() : master((uint16_t)-1) {}\n    bool isInvalid() { return master == (uint16_t)-1; }\n    bool isLargeObject() const { return largeObj; }\n    uint16_t getMaster() const { return master; }\n    uint16_t getOffset() const { return offset; }\n\n    // only newBackRef can modify BackRefIdx\n    static BackRefIdx newBackRef(bool largeObj);\n};\n\nclass MemoryPool;\nclass ExtMemoryPool;\n\nclass BlockI {\n    intptr_t     blockState[2];\n};\n\nstruct LargeMemoryBlock : public BlockI {\n    MemoryPool       *pool;          // owner pool\n    LargeMemoryBlock *next,          // ptrs in list of cached blocks\n                     *prev,\n                     *gPrev,         // in pool's global list\n                     *gNext;\n    uintptr_t         age;           // age of block while in cache\n    size_t            objectSize;    // the size requested by a client\n    size_t            unalignedSize; // the size requested from getMemory\n    bool              fromMapMemory;\n    BackRefIdx        backRefIdx;    // cached here, used copy is in LargeObjectHdr\n    void registerInPool(ExtMemoryPool *extMemPool);\n    void unregisterFromPool(ExtMemoryPool *extMemPool);\n};\n\nstruct LargeObjectHdr {\n    LargeMemoryBlock *memoryBlock;\n    /* Have to duplicate it here from CachedObjectHdr,\n       as backreference must be checked without further pointer dereference.\n       Points to LargeObjectHdr. */\n    BackRefIdx       backRefIdx;\n};\n\n/*\n * Objects of size minLargeObjectSize and larger are considered large objects.\n */\nconst uintptr_t blockSize = 16*1024;\nconst uint32_t fittingAlignment = rml::internal::estimatedCacheLineSize;\n#define SET_FITTING_SIZE(N) ( (blockSize-2*rml::internal::estimatedCacheLineSize)/N ) & ~(fittingAlignment-1)\nconst uint32_t fittingSize5 = SET_FITTING_SIZE(2); // 8128/8064\n#undef SET_FITTING_SIZE\nconst uint32_t minLargeObjectSize = fittingSize5 + 1;\n\n/* end of code replicated from src/tbbmalloc */\n\nstatic void scalableMallocCheckSize(void *object, size_t size)\n{\n#if __clang__\n// This prevents Clang from throwing out the calls to new & delete in CheckNewDeleteOverload().\n    static void *v = object;\n#endif\n    ASSERT(object, NULL);\n    if (size >= minLargeObjectSize) {\n        LargeMemoryBlock *lmb = ((LargeObjectHdr*)object-1)->memoryBlock;\n        ASSERT(uintptr_t(lmb)<uintptr_t(((LargeObjectHdr*)object-1))\n               && lmb->objectSize >= size, NULL);\n    }\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n    ASSERT(malloc_usable_size(object) >= size, NULL);\n#elif MALLOC_WINDOWS_OVERLOAD_ENABLED\n    // Check that _msize works correctly\n    ASSERT(_msize(object) >= size, NULL);\n    ASSERT(size<8 || _aligned_msize(object,8,0) >= size, NULL);\n#endif\n}\n\nvoid CheckStdFuncOverload(void *(*malloc_p)(size_t), void *(*calloc_p)(size_t, size_t),\n                          void *(*realloc_p)(void *, size_t), void (*free_p)(void *))\n{\n    void *ptr = malloc_p(minLargeObjectSize);\n    scalableMallocCheckSize(ptr, minLargeObjectSize);\n    free(ptr);\n\n    ptr = calloc_p(minLargeObjectSize, 2);\n    scalableMallocCheckSize(ptr, 2*minLargeObjectSize);\n    void *ptr1 = realloc_p(ptr, 10*minLargeObjectSize);\n    scalableMallocCheckSize(ptr1, 10*minLargeObjectSize);\n    free_p(ptr1);\n}\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\nvoid CheckMemalignFuncOverload(void *(*memalign_p)(size_t, size_t),\n                               void (*free_p)(void*))\n{\n    void *ptr = memalign_p(128, 4*minLargeObjectSize);\n    scalableMallocCheckSize(ptr, 4*minLargeObjectSize);\n    ASSERT(is_aligned(ptr, 128), NULL);\n    free_p(ptr);\n}\n\nvoid CheckVallocFuncOverload(void *(*valloc_p)(size_t), void (*free_p)(void*))\n{\n    void *ptr = valloc_p(minLargeObjectSize);\n    scalableMallocCheckSize(ptr, minLargeObjectSize);\n    ASSERT(is_aligned(ptr, sysconf(_SC_PAGESIZE)), NULL);\n    free_p(ptr);\n}\n\nvoid CheckPvalloc(void *(*pvalloc_p)(size_t), void (*free_p)(void*))\n{\n    const long memoryPageSize = sysconf(_SC_PAGESIZE);\n    // request large object with not power-of-2 size\n    const size_t largeSz = alignUp(minLargeObjectSize, 16*1024) + 1;\n\n    for (size_t sz = 0; sz<=largeSz; sz+=largeSz) {\n        void *ptr = pvalloc_p(sz);\n        scalableMallocCheckSize(ptr, sz? alignUp(sz, memoryPageSize) : memoryPageSize);\n        ASSERT(is_aligned(ptr, memoryPageSize), NULL);\n        free_p(ptr);\n    }\n}\n\n#endif // MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\n// regression test: on macOS scalable_free() treated small aligned object,\n// placed in large block, as small block\nvoid CheckFreeAligned() {\n    size_t sz[] = {8, 4*1024, 16*1024, 0};\n    size_t align[] = {8, 4*1024, 16*1024, 0};\n\n    for (int s=0; sz[s]; s++)\n        for (int a=0; align[a]; a++) {\n            void *ptr = NULL;\n#if __TBB_POSIX_MEMALIGN_PRESENT\n            int ret = posix_memalign(&ptr, align[a], sz[s]);\n            ASSERT(!ret, NULL);\n#elif MALLOC_WINDOWS_OVERLOAD_ENABLED\n            ptr = _aligned_malloc(sz[s], align[a]);\n#endif\n            ASSERT(is_aligned(ptr, align[a]), NULL);\n            free(ptr);\n        }\n}\n\n#if __ANDROID__\n// Workaround for an issue with strdup somehow bypassing our malloc replacement on Android.\nchar *strdup(const char *str) {\n    REPORT( \"Known issue: malloc replacement does not work for strdup on Android.\\n\" );\n    size_t len = strlen(str)+1;\n    void *new_str = malloc(len);\n    return new_str ? reinterpret_cast<char *>(memcpy(new_str, str, len)) : 0;\n}\n#endif\n\n#if __APPLE__\n#include <mach/mach.h>\n\n// regression test: malloc_usable_size() that was passed to zone interface\n// called system malloc_usable_size(), so for object that was not allocated\n// by tbbmalloc non-zero was returned, so such objects were passed to\n// tbbmalloc's free(), that is incorrect\nvoid TestZoneOverload() {\n    vm_address_t *zones;\n    unsigned zones_num;\n\n    kern_return_t ret = malloc_get_all_zones(mach_task_self(), NULL, &zones, &zones_num);\n    ASSERT(!ret && zones_num>1, NULL);\n    malloc_zone_t *sys_zone = (malloc_zone_t*)zones[1];\n    ASSERT(strcmp(\"tbbmalloc\", malloc_get_zone_name(sys_zone)),\n                  \"zone 1 expected to be not tbbmalloc\");\n    void *p = malloc_zone_malloc(sys_zone, 16);\n    free(p);\n}\n#else\n#define TestZoneOverload()\n#endif\n\n#if _WIN32\n// regression test: certain MSVC runtime functions use \"public\" allocation functions\n// but internal free routines, causing crashes if tbbmalloc_proxy does not intercept the latter.\nvoid TestRuntimeRoutines() {\n    system(\"rem should be a safe command to call\");\n}\n#else\n#define TestRuntimeRoutines()\n#endif\n\nstruct BigStruct {\n    char f[minLargeObjectSize];\n};\n\nvoid CheckNewDeleteOverload() {\n    BigStruct *s1, *s2, *s3, *s4;\n\n    s1 = new BigStruct;\n    scalableMallocCheckSize(s1, sizeof(BigStruct));\n    delete s1;\n\n    s2 = new BigStruct[10];\n    scalableMallocCheckSize(s2, 10*sizeof(BigStruct));\n    delete []s2;\n\n    s3 = new(std::nothrow) BigStruct;\n    scalableMallocCheckSize(s3, sizeof(BigStruct));\n    delete s3;\n\n    s4 = new(std::nothrow) BigStruct[2];\n    scalableMallocCheckSize(s4, 2*sizeof(BigStruct));\n    delete []s4;\n}\n\nint TestMain() {\n    void *ptr, *ptr1;\n\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n    ASSERT(dlsym(RTLD_DEFAULT, \"scalable_malloc\"),\n           \"Lost dependency on malloc_proxy or LD_PRELOAD was not set?\");\n#endif\n\n/* On Windows, memory block size returned by _msize() is sometimes used\n   to calculate the size for an extended block. Substituting _msize,\n   scalable_msize initially returned 0 for regions not allocated by the scalable\n   allocator, which led to incorrect memory reallocation and subsequent crashes.\n   It was found that adding a new environment variable triggers the error.\n*/\n    ASSERT(getenv(\"PATH\"), \"We assume that PATH is set everywhere.\");\n    char *pathCopy = strdup(getenv(\"PATH\"));\n#if __ANDROID__\n    ASSERT(strcmp(pathCopy,getenv(\"PATH\")) == 0, \"strdup workaround does not work as expected.\");\n#endif\n    const char *newEnvName = \"__TBBMALLOC_OVERLOAD_REGRESSION_TEST_FOR_REALLOC_AND_MSIZE\";\n    ASSERT(!getenv(newEnvName), \"Environment variable should not be used before.\");\n    int r = Harness::SetEnv(newEnvName,\"1\");\n    ASSERT(!r, NULL);\n    char *path = getenv(\"PATH\");\n    ASSERT(path && 0==strcmp(path, pathCopy), \"Environment was changed erroneously.\");\n    free(pathCopy);\n\n    CheckStdFuncOverload(malloc, calloc, realloc, free);\n#if MALLOC_UNIXLIKE_OVERLOAD_ENABLED || MALLOC_ZONE_OVERLOAD_ENABLED\n\n#if __TBB_POSIX_MEMALIGN_PRESENT\n    int ret = posix_memalign(&ptr, 1024, 3*minLargeObjectSize);\n    scalableMallocCheckSize(ptr, 3*minLargeObjectSize);\n    ASSERT(0==ret && is_aligned(ptr, 1024), NULL);\n    free(ptr);\n#endif\n\n#if __TBB_VALLOC_PRESENT\n    CheckVallocFuncOverload(valloc, free);\n#endif\n#if __TBB_PVALLOC_PRESENT\n    CheckPvalloc(pvalloc, free);\n#endif\n#if __linux__\n    CheckMemalignFuncOverload(memalign, free);\n#if __TBB_ALIGNED_ALLOC_PRESENT\n    CheckMemalignFuncOverload(aligned_alloc, free);\n#endif\n\n    struct mallinfo info = mallinfo();\n    // right now mallinfo initialized by zero\n    ASSERT(!info.arena && !info.ordblks && !info.smblks && !info.hblks\n           && !info.hblkhd && !info.usmblks && !info.fsmblks\n           && !info.uordblks && !info.fordblks && !info.keepcost, NULL);\n\n #if !__ANDROID__\n    // These non-standard functions are exported by GLIBC, and might be used\n    // in conjunction with standard malloc/free. Test that we overload them as well.\n    // Bionic doesn't have them.\n    CheckStdFuncOverload(__libc_malloc, __libc_calloc, __libc_realloc, __libc_free);\n    CheckMemalignFuncOverload(__libc_memalign, __libc_free);\n    CheckVallocFuncOverload(__libc_valloc, __libc_free);\n    CheckPvalloc(__libc_pvalloc, __libc_free);\n #endif\n#endif // __linux__\n\n#else // MALLOC_WINDOWS_OVERLOAD_ENABLED\n\n    ptr = _aligned_malloc(minLargeObjectSize, 16);\n    scalableMallocCheckSize(ptr, minLargeObjectSize);\n    ASSERT(is_aligned(ptr, 16), NULL);\n\n    // Testing of workaround for vs \"is power of 2 pow N\" bug that accepts zeros\n    ptr1 = _aligned_malloc(minLargeObjectSize, 0);\n    scalableMallocCheckSize(ptr, minLargeObjectSize);\n    ASSERT(is_aligned(ptr, sizeof(void*)), NULL);\n    _aligned_free(ptr1);\n\n    ptr1 = _aligned_realloc(ptr, minLargeObjectSize*10, 16);\n    scalableMallocCheckSize(ptr1, minLargeObjectSize*10);\n    ASSERT(is_aligned(ptr, 16), NULL);\n    _aligned_free(ptr1);\n\n#endif\n    CheckFreeAligned();\n\n    CheckNewDeleteOverload();\n#if _WIN32\n    std::string stdstring = \"dependency on msvcpXX.dll\";\n    ASSERT(strcmp(stdstring.c_str(), \"dependency on msvcpXX.dll\") == 0, NULL);\n#endif\n    TestZoneOverload();\n    TestRuntimeRoutines();\n\n    return Harness::Done;\n}\n#endif // !HARNESS_SKIP_TEST\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_pools.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/scalable_allocator.h\"\n#include \"tbb/atomic.h\"\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n#include \"harness_tls.h\"\n#if !__TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"harness_tbb_independence.h\"\n#endif\n\ntemplate<typename T>\nstatic inline T alignUp  (T arg, uintptr_t alignment) {\n    return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));\n}\n\nstruct PoolSpace: NoCopy {\n    size_t pos;\n    int    regions;\n    size_t bufSize;\n    char  *space;\n\n    static const size_t BUF_SIZE = 8*1024*1024;\n\n    PoolSpace(size_t bufSz = BUF_SIZE) :\n        pos(0), regions(0),\n        bufSize(bufSz), space(new char[bufSize]) {\n        memset(space, 0, bufSize);\n    }\n    ~PoolSpace() {\n        delete []space;\n    }\n};\n\nstatic PoolSpace *poolSpace;\n\nstruct MallocPoolHeader {\n    void  *rawPtr;\n    size_t userSize;\n};\n\nstatic tbb::atomic<int> liveRegions;\n\nstatic void *getMallocMem(intptr_t /*pool_id*/, size_t &bytes)\n{\n    void *rawPtr = malloc(bytes+sizeof(MallocPoolHeader)+1);\n    if (!rawPtr)\n        return NULL;\n    // +1 to check working with unaligned space\n    void *ret = (void *)((uintptr_t)rawPtr+sizeof(MallocPoolHeader)+1);\n\n    MallocPoolHeader *hdr = (MallocPoolHeader*)ret-1;\n    hdr->rawPtr = rawPtr;\n    hdr->userSize = bytes;\n\n    liveRegions++;\n\n    return ret;\n}\n\nstatic int putMallocMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)\n{\n    MallocPoolHeader *hdr = (MallocPoolHeader*)ptr-1;\n    ASSERT(bytes == hdr->userSize, \"Invalid size in pool callback.\");\n    free(hdr->rawPtr);\n\n    liveRegions--;\n\n    return 0;\n}\n\nvoid TestPoolReset()\n{\n    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);\n    rml::MemoryPool *pool;\n\n    pool_create_v1(0, &pol, &pool);\n    for (int i=0; i<100; i++) {\n        ASSERT(pool_malloc(pool, 8), NULL);\n        ASSERT(pool_malloc(pool, 50*1024), NULL);\n    }\n    int regionsBeforeReset = liveRegions;\n    bool ok = pool_reset(pool);\n    ASSERT(ok, NULL);\n    for (int i=0; i<100; i++) {\n        ASSERT(pool_malloc(pool, 8), NULL);\n        ASSERT(pool_malloc(pool, 50*1024), NULL);\n    }\n    ASSERT(regionsBeforeReset == liveRegions,\n           \"Expected no new regions allocation.\");\n    ok = pool_destroy(pool);\n    ASSERT(ok, NULL);\n    ASSERT(!liveRegions, \"Expected all regions were released.\");\n}\n\nclass SharedPoolRun: NoAssign {\n    static long                 threadNum;\n    static Harness::SpinBarrier startB,\n                                mallocDone;\n    static rml::MemoryPool     *pool;\n    static void               **crossThread,\n                              **afterTerm;\npublic:\n    static const int OBJ_CNT = 100;\n\n    static void init(int num, rml::MemoryPool *pl, void **crThread, void **aTerm) {\n        threadNum = num;\n        pool = pl;\n        crossThread = crThread;\n        afterTerm = aTerm;\n        startB.initialize(threadNum);\n        mallocDone.initialize(threadNum);\n    }\n\n    void operator()( int id ) const {\n        const int ITERS = 1000;\n        void *local[ITERS];\n\n        startB.wait();\n        for (int i=id*OBJ_CNT; i<(id+1)*OBJ_CNT; i++) {\n            afterTerm[i] = pool_malloc(pool, i%2? 8*1024 : 9*1024);\n            memset(afterTerm[i], i, i%2? 8*1024 : 9*1024);\n            crossThread[i] = pool_malloc(pool, i%2? 9*1024 : 8*1024);\n            memset(crossThread[i], i, i%2? 9*1024 : 8*1024);\n        }\n\n        for (int i=1; i<ITERS; i+=2) {\n            local[i-1] = pool_malloc(pool, 6*1024);\n            memset(local[i-1], i, 6*1024);\n            local[i] = pool_malloc(pool, 16*1024);\n            memset(local[i], i, 16*1024);\n        }\n        mallocDone.wait();\n        int myVictim = threadNum-id-1;\n        for (int i=myVictim*OBJ_CNT; i<(myVictim+1)*OBJ_CNT; i++)\n            pool_free(pool, crossThread[i]);\n        for (int i=0; i<ITERS; i++)\n            pool_free(pool, local[i]);\n    }\n};\n\nlong                 SharedPoolRun::threadNum;\nHarness::SpinBarrier SharedPoolRun::startB,\n                     SharedPoolRun::mallocDone;\nrml::MemoryPool     *SharedPoolRun::pool;\nvoid               **SharedPoolRun::crossThread,\n                   **SharedPoolRun::afterTerm;\n\n// single pool shared by different threads\nvoid TestSharedPool()\n{\n    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);\n    rml::MemoryPool *pool;\n\n    pool_create_v1(0, &pol, &pool);\n    void **crossThread = new void*[MaxThread * SharedPoolRun::OBJ_CNT];\n    void **afterTerm = new void*[MaxThread * SharedPoolRun::OBJ_CNT];\n\n    for (int p=MinThread; p<=MaxThread; p++) {\n        SharedPoolRun::init(p, pool, crossThread, afterTerm);\n        SharedPoolRun thr;\n\n        void *hugeObj = pool_malloc(pool, 10*1024*1024);\n        ASSERT(hugeObj, NULL);\n\n        NativeParallelFor( p, thr );\n\n        pool_free(pool, hugeObj);\n        for (int i=0; i<p*SharedPoolRun::OBJ_CNT; i++)\n            pool_free(pool, afterTerm[i]);\n    }\n    delete []afterTerm;\n    delete []crossThread;\n\n    bool ok = pool_destroy(pool);\n    ASSERT(ok, NULL);\n    ASSERT(!liveRegions, \"Expected all regions were released.\");\n}\n\nvoid *CrossThreadGetMem(intptr_t pool_id, size_t &bytes)\n{\n    if (poolSpace[pool_id].pos + bytes > poolSpace[pool_id].bufSize)\n        return NULL;\n\n    void *ret = poolSpace[pool_id].space + poolSpace[pool_id].pos;\n    poolSpace[pool_id].pos += bytes;\n    poolSpace[pool_id].regions++;\n\n    return ret;\n}\n\nint CrossThreadPutMem(intptr_t pool_id, void* /*raw_ptr*/, size_t /*raw_bytes*/)\n{\n    poolSpace[pool_id].regions--;\n    return 0;\n}\n\nclass CrossThreadRun: NoAssign {\n    static long number_of_threads;\n    static Harness::SpinBarrier barrier;\n    static rml::MemoryPool **pool;\n    static char **obj;\npublic:\n    static void initBarrier(unsigned thrds) { barrier.initialize(thrds); }\n    static void init(long num) {\n        number_of_threads = num;\n        pool = new rml::MemoryPool*[number_of_threads];\n        poolSpace = new PoolSpace[number_of_threads];\n        obj = new char*[number_of_threads];\n    }\n    static void destroy() {\n        for (long i=0; i<number_of_threads; i++)\n            ASSERT(!poolSpace[i].regions, \"Memory leak detected\");\n        delete []pool;\n        delete []poolSpace;\n        delete []obj;\n    }\n    CrossThreadRun() {}\n    void operator()( int id ) const {\n        rml::MemPoolPolicy pol(CrossThreadGetMem, CrossThreadPutMem);\n        const int objLen = 10*id;\n\n        pool_create_v1(id, &pol, &pool[id]);\n        obj[id] = (char*)pool_malloc(pool[id], objLen);\n        ASSERT(obj[id], NULL);\n        memset(obj[id], id, objLen);\n\n        {\n            const size_t lrgSz = 2*16*1024;\n            void *ptrLarge = pool_malloc(pool[id], lrgSz);\n            ASSERT(ptrLarge, NULL);\n            memset(ptrLarge, 1, lrgSz);\n\n            // consume all small objects\n            while (pool_malloc(pool[id], 5*1024))\n                ;\n            // releasing of large object can give a chance to allocate more\n            pool_free(pool[id], ptrLarge);\n\n            ASSERT(pool_malloc(pool[id], 5*1024), NULL);\n        }\n\n        barrier.wait();\n        int myPool = number_of_threads-id-1;\n        for (int i=0; i<10*myPool; i++)\n            ASSERT(myPool==obj[myPool][i], NULL);\n        pool_free(pool[myPool], obj[myPool]);\n        bool ok = pool_destroy(pool[myPool]);\n        ASSERT(ok, NULL);\n    }\n};\n\nlong CrossThreadRun::number_of_threads;\nHarness::SpinBarrier CrossThreadRun::barrier;\nrml::MemoryPool **CrossThreadRun::pool;\nchar **CrossThreadRun::obj;\n\n// pools created, used and destroyed by different threads\nvoid TestCrossThreadPools()\n{\n    for (int p=MinThread; p<=MaxThread; p++) {\n        CrossThreadRun::initBarrier(p);\n        CrossThreadRun::init(p);\n        NativeParallelFor( p, CrossThreadRun() );\n        for (int i=0; i<p; i++)\n            ASSERT(!poolSpace[i].regions, \"Region leak detected\");\n        CrossThreadRun::destroy();\n    }\n}\n\n// buffer is too small to pool be created, but must not leak resources\nvoid TestTooSmallBuffer()\n{\n    poolSpace = new PoolSpace(8*1024);\n\n    rml::MemPoolPolicy pol(CrossThreadGetMem, CrossThreadPutMem);\n    rml::MemoryPool *pool;\n    pool_create_v1(0, &pol, &pool);\n    bool ok = pool_destroy(pool);\n    ASSERT(ok, NULL);\n    ASSERT(!poolSpace[0].regions, \"No leaks.\");\n\n    delete poolSpace;\n}\n\nclass FixedPoolHeadBase : NoAssign {\n    size_t   size;\n    intptr_t used;\n    char    *data;\npublic:\n    FixedPoolHeadBase(size_t s) : size(s), used(false) {\n        data = new char[size];\n    }\n    void *useData(size_t &bytes) {\n        intptr_t wasUsed = __TBB_FetchAndStoreW(&used, true);\n        ASSERT(!wasUsed, \"The buffer must not be used twice.\");\n        bytes = size;\n        return data;\n    }\n    ~FixedPoolHeadBase() {\n        delete []data;\n    }\n};\n\ntemplate<size_t SIZE>\nclass FixedPoolHead : FixedPoolHeadBase {\npublic:\n    FixedPoolHead() : FixedPoolHeadBase(SIZE) { }\n};\n\nstatic void *fixedBufGetMem(intptr_t pool_id, size_t &bytes)\n{\n    return ((FixedPoolHeadBase*)pool_id)->useData(bytes);\n}\n\nclass FixedPoolUse: NoAssign {\n    static Harness::SpinBarrier startB;\n    rml::MemoryPool *pool;\n    size_t reqSize;\n    int iters;\npublic:\n    FixedPoolUse(unsigned threads, rml::MemoryPool *p, size_t sz, int it) :\n        pool(p), reqSize(sz), iters(it) {\n        startB.initialize(threads);\n    }\n    void operator()( int /*id*/ ) const {\n        startB.wait();\n        for (int i=0; i<iters; i++) {\n            void *o = pool_malloc(pool, reqSize);\n            ASSERT(o, NULL);\n            pool_free(pool, o);\n        }\n    }\n};\n\nHarness::SpinBarrier FixedPoolUse::startB;\n\nclass FixedPoolNomem: NoAssign {\n    Harness::SpinBarrier *startB;\n    rml::MemoryPool *pool;\npublic:\n    FixedPoolNomem(Harness::SpinBarrier *b, rml::MemoryPool *p) :\n        startB(b), pool(p) {}\n    void operator()(int id) const {\n        startB->wait();\n        void *o = pool_malloc(pool, id%2? 64 : 128*1024);\n        ASSERT(!o, \"All memory must be consumed.\");\n    }\n};\n\nclass FixedPoolSomeMem: NoAssign {\n    Harness::SpinBarrier *barrier;\n    rml::MemoryPool *pool;\npublic:\n    FixedPoolSomeMem(Harness::SpinBarrier *b, rml::MemoryPool *p) :\n        barrier(b), pool(p) {}\n    void operator()(int id) const {\n        barrier->wait();\n        Harness::Sleep(2*id);\n        void *o = pool_malloc(pool, id%2? 64 : 128*1024);\n        barrier->wait();\n        pool_free(pool, o);\n    }\n};\n\nbool haveEnoughSpace(rml::MemoryPool *pool, size_t sz)\n{\n    if (void *p = pool_malloc(pool, sz)) {\n        pool_free(pool, p);\n        return true;\n    }\n    return false;\n}\n\nvoid TestFixedBufferPool()\n{\n    const int ITERS = 7;\n    const size_t MAX_OBJECT = 7*1024*1024;\n    void *ptrs[ITERS];\n    rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,\n                           /*keepMemTillDestroy=*/false);\n    rml::MemoryPool *pool;\n    {\n        FixedPoolHead<MAX_OBJECT + 1024*1024> head;\n\n        pool_create_v1((intptr_t)&head, &pol, &pool);\n        {\n            NativeParallelFor( 1, FixedPoolUse(1, pool, MAX_OBJECT, 2) );\n\n            for (int i=0; i<ITERS; i++) {\n                ptrs[i] = pool_malloc(pool, MAX_OBJECT/ITERS);\n                ASSERT(ptrs[i], NULL);\n            }\n            for (int i=0; i<ITERS; i++)\n                pool_free(pool, ptrs[i]);\n\n            NativeParallelFor( 1, FixedPoolUse(1, pool, MAX_OBJECT, 1) );\n        }\n        // each thread asks for an MAX_OBJECT/p/2 object,\n        // /2 is to cover fragmentation\n        for (int p=MinThread; p<=MaxThread; p++)\n            NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 10000) );\n        {\n            const int p=128;\n            NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 1) );\n        }\n        {\n            size_t maxSz;\n            const int p = 512;\n            Harness::SpinBarrier barrier(p);\n\n            // Find maximal useful object size. Start with MAX_OBJECT/2,\n            // as the pool might be fragmented by BootStrapBlocks consumed during\n            // FixedPoolRun.\n            size_t l, r;\n            ASSERT(haveEnoughSpace(pool, MAX_OBJECT/2), NULL);\n            for (l = MAX_OBJECT/2, r = MAX_OBJECT + 1024*1024; l < r-1; ) {\n                size_t mid = (l+r)/2;\n                if (haveEnoughSpace(pool, mid))\n                    l = mid;\n                else\n                    r = mid;\n            }\n            maxSz = l;\n            ASSERT(!haveEnoughSpace(pool, maxSz+1), \"Expect to find boundary value.\");\n            // consume all available memory\n            void *largeObj = pool_malloc(pool, maxSz);\n            ASSERT(largeObj, NULL);\n            void *o = pool_malloc(pool, 64);\n            if (o) // pool fragmented, skip FixedPoolNomem\n                pool_free(pool, o);\n            else\n                NativeParallelFor( p, FixedPoolNomem(&barrier, pool) );\n            pool_free(pool, largeObj);\n            // keep some space unoccupied\n            largeObj = pool_malloc(pool, maxSz-512*1024);\n            ASSERT(largeObj, NULL);\n            NativeParallelFor( p, FixedPoolSomeMem(&barrier, pool) );\n            pool_free(pool, largeObj);\n        }\n        bool ok = pool_destroy(pool);\n        ASSERT(ok, NULL);\n    }\n    // check that fresh untouched pool can successfully fulfil requests from 128 threads\n    {\n        FixedPoolHead<MAX_OBJECT + 1024*1024> head;\n        pool_create_v1((intptr_t)&head, &pol, &pool);\n        int p=128;\n        NativeParallelFor( p, FixedPoolUse(p, pool, MAX_OBJECT/p/2, 1) );\n        bool ok = pool_destroy(pool);\n        ASSERT(ok, NULL);\n    }\n}\n\nstatic size_t currGranularity;\n\nstatic void *getGranMem(intptr_t /*pool_id*/, size_t &bytes)\n{\n    ASSERT(!(bytes%currGranularity), \"Region size mismatch granularity.\");\n    return malloc(bytes);\n}\n\nstatic int putGranMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)\n{\n    ASSERT(!(bytes%currGranularity), \"Region size mismatch granularity.\");\n    free(ptr);\n    return 0;\n}\n\nvoid TestPoolGranularity()\n{\n    rml::MemPoolPolicy pol(getGranMem, putGranMem);\n    const size_t grans[] = {4*1024, 2*1024*1024, 6*1024*1024, 10*1024*1024};\n\n    for (unsigned i=0; i<sizeof(grans)/sizeof(grans[0]); i++) {\n        pol.granularity = currGranularity = grans[i];\n        rml::MemoryPool *pool;\n\n        pool_create_v1(0, &pol, &pool);\n        for (int sz=500*1024; sz<16*1024*1024; sz+=101*1024) {\n            void *p = pool_malloc(pool, sz);\n            ASSERT(p, \"Can't allocate memory in pool.\");\n            pool_free(pool, p);\n        }\n        bool ok = pool_destroy(pool);\n        ASSERT(ok, NULL);\n    }\n}\n\nstatic size_t putMemAll, getMemAll, getMemSuccessful;\n\nstatic void *getMemMalloc(intptr_t /*pool_id*/, size_t &bytes)\n{\n    getMemAll++;\n    void *p = malloc(bytes);\n    if (p)\n        getMemSuccessful++;\n    return p;\n}\n\nstatic int putMemFree(intptr_t /*pool_id*/, void *ptr, size_t /*bytes*/)\n{\n    putMemAll++;\n    free(ptr);\n    return 0;\n}\n\nvoid TestPoolKeepTillDestroy()\n{\n    const int ITERS = 50*1024;\n    void *ptrs[2*ITERS+1];\n    rml::MemPoolPolicy pol(getMemMalloc, putMemFree);\n    rml::MemoryPool *pool;\n\n    // 1st create default pool that returns memory back to callback,\n    // then use keepMemTillDestroy policy\n    for (int keep=0; keep<2; keep++) {\n        getMemAll = putMemAll = 0;\n        if (keep)\n            pol.keepAllMemory = 1;\n        pool_create_v1(0, &pol, &pool);\n        for (int i=0; i<2*ITERS; i+=2) {\n            ptrs[i] = pool_malloc(pool, 7*1024);\n            ptrs[i+1] = pool_malloc(pool, 10*1024);\n        }\n        ptrs[2*ITERS] = pool_malloc(pool, 8*1024*1024);\n        ASSERT(!putMemAll, NULL);\n        for (int i=0; i<2*ITERS; i++)\n            pool_free(pool, ptrs[i]);\n        pool_free(pool, ptrs[2*ITERS]);\n        size_t totalPutMemCalls = putMemAll;\n        if (keep)\n            ASSERT(!putMemAll, NULL);\n        else {\n            ASSERT(putMemAll, NULL);\n            putMemAll = 0;\n        }\n        size_t getCallsBefore = getMemAll;\n        void *p = pool_malloc(pool, 8*1024*1024);\n        ASSERT(p, NULL);\n        if (keep)\n            ASSERT(getCallsBefore == getMemAll, \"Must not lead to new getMem call\");\n        size_t putCallsBefore = putMemAll;\n        bool ok = pool_reset(pool);\n        ASSERT(ok, NULL);\n        ASSERT(putCallsBefore == putMemAll, \"Pool is not releasing memory during reset.\");\n        ok = pool_destroy(pool);\n        ASSERT(ok, NULL);\n        ASSERT(putMemAll, NULL);\n        totalPutMemCalls += putMemAll;\n        ASSERT(getMemAll == totalPutMemCalls, \"Memory leak detected.\");\n    }\n\n}\n\nstatic bool memEqual(char *buf, size_t size, int val)\n{\n    bool memEq = true;\n    for (size_t k=0; k<size; k++)\n        if (buf[k] != val)\n             memEq = false;\n    return memEq;\n}\n\nvoid TestEntries()\n{\n    const int SZ = 4;\n    const int ALGN = 4;\n    size_t size[SZ] = {8, 8000, 9000, 100*1024};\n    size_t algn[ALGN] = {8, 64, 4*1024, 8*1024*1024};\n\n    rml::MemPoolPolicy pol(getGranMem, putGranMem);\n    currGranularity = 1; // not check granularity in the test\n    rml::MemoryPool *pool;\n\n    pool_create_v1(0, &pol, &pool);\n    for (int i=0; i<SZ; i++)\n        for (int j=0; j<ALGN; j++) {\n            char *p = (char*)pool_aligned_malloc(pool, size[i], algn[j]);\n            ASSERT(p && 0==((uintptr_t)p & (algn[j]-1)), NULL);\n            memset(p, j, size[i]);\n\n            size_t curr_algn = algn[rand() % ALGN];\n            size_t curr_sz = size[rand() % SZ];\n            char *p1 = (char*)pool_aligned_realloc(pool, p, curr_sz, curr_algn);\n            ASSERT(p1 && 0==((uintptr_t)p1 & (curr_algn-1)), NULL);\n            ASSERT(memEqual(p1, min(size[i], curr_sz), j), NULL);\n\n            memset(p1, j+1, curr_sz);\n            size_t curr_sz1 = size[rand() % SZ];\n            char *p2 = (char*)pool_realloc(pool, p1, curr_sz1);\n            ASSERT(p2, NULL);\n            ASSERT(memEqual(p2, min(curr_sz1, curr_sz), j+1), NULL);\n\n            pool_free(pool, p2);\n        }\n\n    bool ok = pool_destroy(pool);\n    ASSERT(ok, NULL);\n\n    bool fail = rml::pool_destroy(NULL);\n    ASSERT(!fail, NULL);\n    fail = rml::pool_reset(NULL);\n    ASSERT(!fail, NULL);\n}\n\nrml::MemoryPool *CreateUsablePool(size_t size)\n{\n    rml::MemoryPool *pool;\n    rml::MemPoolPolicy okPolicy(getMemMalloc, putMemFree);\n\n    putMemAll = getMemAll = getMemSuccessful = 0;\n    rml::MemPoolError res = pool_create_v1(0, &okPolicy, &pool);\n    if (res != rml::POOL_OK) {\n        ASSERT(!getMemAll && !putMemAll, \"No callbacks after fail.\");\n        return NULL;\n    }\n    void *o = pool_malloc(pool, size);\n    if (!getMemSuccessful) {\n        // no memory from callback, valid reason to leave\n        ASSERT(!o, \"The pool must be unusable.\");\n        return NULL;\n    }\n    ASSERT(o, \"Created pool must be useful.\");\n    ASSERT(getMemSuccessful == 1 || getMemAll > getMemSuccessful,\n           \"Multiple requests are allowed only when unsuccessful request occurred.\");\n    ASSERT(!putMemAll, NULL);\n    pool_free(pool, o);\n\n    return pool;\n}\n\nvoid CheckPoolLeaks(size_t poolsAlwaysAvailable)\n{\n    const size_t MAX_POOLS = 16*1000;\n    const int ITERS = 20, CREATED_STABLE = 3;\n    rml::MemoryPool *pools[MAX_POOLS];\n    size_t created, maxCreated = MAX_POOLS;\n    int maxNotChangedCnt = 0;\n\n    // expecting that for ITERS runs, max number of pools that can be created\n    // can be stabilized and still stable CREATED_STABLE times\n    for (int j=0; j<ITERS && maxNotChangedCnt<CREATED_STABLE; j++) {\n        for (created=0; created<maxCreated; created++) {\n            rml::MemoryPool *p = CreateUsablePool(1024);\n            if (!p)\n                break;\n            pools[created] = p;\n        }\n        ASSERT(created>=poolsAlwaysAvailable,\n               \"Expect that the reasonable number of pools can be always created.\");\n        for (size_t i=0; i<created; i++) {\n            bool ok = pool_destroy(pools[i]);\n            ASSERT(ok, NULL);\n        }\n        if (created < maxCreated) {\n            maxCreated = created;\n            maxNotChangedCnt = 0;\n        } else\n            maxNotChangedCnt++;\n    }\n    ASSERT(maxNotChangedCnt == CREATED_STABLE, \"The number of created pools must be stabilized.\");\n}\n\nvoid TestPoolCreation()\n{\n    putMemAll = getMemAll = getMemSuccessful = 0;\n\n    rml::MemPoolPolicy nullPolicy(NULL, putMemFree),\n        emptyFreePolicy(getMemMalloc, NULL),\n        okPolicy(getMemMalloc, putMemFree);\n    rml::MemoryPool *pool;\n\n    rml::MemPoolError res = pool_create_v1(0, &nullPolicy, &pool);\n    ASSERT(res==rml::INVALID_POLICY, \"pool with empty pAlloc can't be created\");\n    res = pool_create_v1(0, &emptyFreePolicy, &pool);\n    ASSERT(res==rml::INVALID_POLICY, \"pool with empty pFree can't be created\");\n    ASSERT(!putMemAll && !getMemAll, \"no callback calls are expected\");\n    res = pool_create_v1(0, &okPolicy, &pool);\n    ASSERT(res==rml::POOL_OK, NULL);\n    bool ok = pool_destroy(pool);\n    ASSERT(ok, NULL);\n    ASSERT(putMemAll == getMemSuccessful, \"no leaks after pool_destroy\");\n\n    // 32 is a guess for a number of pools that is acceptable everywere\n    CheckPoolLeaks(32);\n    // try to consume all but 16 TLS keys\n    LimitTLSKeysTo limitTLSTo(16);\n    // ...and check that we can create at least 16 pools\n    CheckPoolLeaks(16);\n}\n\nstruct AllocatedObject {\n    rml::MemoryPool *pool;\n};\n\nconst size_t BUF_SIZE = 1024*1024;\n\nclass PoolIdentityCheck : NoAssign {\n    rml::MemoryPool** const pools;\n    AllocatedObject** const objs;\npublic:\n    PoolIdentityCheck(rml::MemoryPool** p, AllocatedObject** o) : pools(p), objs(o) {}\n    void operator()(int id) const {\n        objs[id] = (AllocatedObject*)pool_malloc(pools[id], BUF_SIZE/2);\n        ASSERT(objs[id], NULL);\n        rml::MemoryPool *act_pool = rml::pool_identify(objs[id]);\n        ASSERT(act_pool == pools[id], NULL);\n\n        for (size_t total=0; total<2*BUF_SIZE; total+=256) {\n            AllocatedObject *o = (AllocatedObject*)pool_malloc(pools[id], 256);\n            ASSERT(o, NULL);\n            act_pool = rml::pool_identify(o);\n            ASSERT(act_pool == pools[id], NULL);\n            pool_free(act_pool, o);\n        }\n        if( id&1 ) { // make every second returned object \"small\"\n            pool_free(act_pool, objs[id]);\n            objs[id] = (AllocatedObject*)pool_malloc(pools[id], 16);\n            ASSERT(objs[id], NULL);\n        }\n        objs[id]->pool = act_pool;\n    }\n};\n\nvoid TestPoolDetection()\n{\n    const int POOLS = 4;\n    rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,\n                           /*keepMemTillDestroy=*/false);\n    rml::MemoryPool *pools[POOLS];\n    FixedPoolHead<BUF_SIZE*POOLS> head[POOLS];\n    AllocatedObject *objs[POOLS];\n\n    for (int i=0; i<POOLS; i++)\n        pool_create_v1((intptr_t)(head+i), &pol, &pools[i]);\n    // if object somehow released to different pools, subsequent allocation\n    // from affected pools became impossible\n    for (int k=0; k<10; k++) {\n        PoolIdentityCheck check(pools, objs);\n        if( k&1 )\n            NativeParallelFor( POOLS, check);\n        else \n            for (int i=0; i<POOLS; i++) check(i);\n\n        for (int i=0; i<POOLS; i++) {\n            rml::MemoryPool *p = rml::pool_identify(objs[i]);\n            ASSERT(p == objs[i]->pool, NULL);\n            pool_free(p, objs[i]);\n        }\n    }\n    for (int i=0; i<POOLS; i++) {\n        bool ok = pool_destroy(pools[i]);\n        ASSERT(ok, NULL);\n    }\n}\n\nvoid TestLazyBootstrap()\n{\n    rml::MemPoolPolicy pol(getMemMalloc, putMemFree);\n    const size_t sizes[] = {8, 9*1024, 0};\n\n    for (int i=0; sizes[i]; i++) {\n        rml::MemoryPool *pool = CreateUsablePool(sizes[i]);\n        bool ok = pool_destroy(pool);\n        ASSERT(ok, NULL);\n        ASSERT(getMemSuccessful == putMemAll, \"No leak.\");\n    }\n}\n\nclass NoLeakOnDestroyRun: NoAssign {\n    rml::MemoryPool      *pool;\n    Harness::SpinBarrier *barrier;\npublic:\n    NoLeakOnDestroyRun(rml::MemoryPool *p, Harness::SpinBarrier *b) : pool(p), barrier(b) {}\n    void operator()(int id) const {\n        void *p = pool_malloc(pool, id%2? 8 : 9000);\n        ASSERT(p && liveRegions, NULL);\n        barrier->wait();\n        if (!id) {\n            bool ok = pool_destroy(pool);\n            ASSERT(ok, NULL);\n            ASSERT(!liveRegions, \"Expected all regions were released.\");\n        }\n        // other threads must wait till pool destruction,\n        // to not call thread destruction cleanup before this\n        barrier->wait();\n    }\n};\n\nvoid TestNoLeakOnDestroy()\n{\n    liveRegions = 0;\n    for (int p=MinThread; p<=MaxThread; p++) {\n        rml::MemPoolPolicy pol(getMallocMem, putMallocMem);\n        Harness::SpinBarrier barrier(p);\n        rml::MemoryPool *pool;\n\n        pool_create_v1(0, &pol, &pool);\n        NativeParallelFor(p, NoLeakOnDestroyRun(pool, &barrier));\n    }\n}\n\n\nstatic int putMallocMemError(intptr_t /*pool_id*/, void *ptr, size_t bytes)\n{\n    MallocPoolHeader *hdr = (MallocPoolHeader*)ptr-1;\n    ASSERT(bytes == hdr->userSize, \"Invalid size in pool callback.\");\n    free(hdr->rawPtr);\n\n    liveRegions--;\n\n    return -1;\n}\n\nvoid TestDestroyFailed()\n{\n    rml::MemPoolPolicy pol(getMallocMem, putMallocMemError);\n    rml::MemoryPool *pool;\n    pool_create_v1(0, &pol, &pool);\n    void *ptr = pool_malloc(pool, 16);\n    ASSERT(ptr, NULL);\n    bool fail = pool_destroy(pool);\n    ASSERT(fail==false, \"putMemPolicyError callback returns error, \"\n           \"expect pool_destroy() failure\");\n}\n\nint TestMain () {\n    TestTooSmallBuffer();\n    TestPoolReset();\n    TestSharedPool();\n    TestCrossThreadPools();\n    TestFixedBufferPool();\n    TestPoolGranularity();\n    TestPoolKeepTillDestroy();\n    TestEntries();\n    TestPoolCreation();\n    TestPoolDetection();\n    TestLazyBootstrap();\n    TestNoLeakOnDestroy();\n    TestDestroyFailed();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_pure_c.c",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifdef __cplusplus\n#error For testing purpose, this file should be compiled with a C compiler, not C++\n#endif /*__cplusplus */\n\n#include \"tbb/scalable_allocator.h\"\n#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h> /* for atexit */\n\n/*\n *  The test is to check if the scalable_allocator.h and its functions\n *  can be used from pure C programs; also some regression checks are done\n */\n\n#if __linux__\n/* huge pages supported only under Linux so far */\nconst int ExpectedResultHugePages = TBBMALLOC_OK;\n#else\nconst int ExpectedResultHugePages = TBBMALLOC_NO_EFFECT;\n#endif\n\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"../tbbmalloc/tbbmalloc_internal_api.h\"\n#else\n#define __TBB_mallocProcessShutdownNotification()\n#endif\n\n/* test that it's possible to call allocation function from atexit\n   after mallocProcessShutdownNotification() called */\nstatic void MyExit(void) {\n    void *p = scalable_malloc(32);\n    assert(p);\n    scalable_free(p);\n    __TBB_mallocProcessShutdownNotification();\n}\n\nint main(void) {\n    size_t i, j;\n    int curr_mode, res;\n    void *p1, *p2;\n\n    atexit( MyExit );\n    for ( curr_mode = 0; curr_mode<=1; curr_mode++) {\n        assert(ExpectedResultHugePages ==\n               scalable_allocation_mode(TBBMALLOC_USE_HUGE_PAGES, !curr_mode));\n        p1 = scalable_malloc(10*1024*1024);\n        assert(p1);\n        assert(ExpectedResultHugePages ==\n               scalable_allocation_mode(TBBMALLOC_USE_HUGE_PAGES, curr_mode));\n        scalable_free(p1);\n    }\n    /* note that huge pages (if supported) are still enabled at this point */\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n    assert(TBBMALLOC_OK ==\n           scalable_allocation_mode(TBBMALLOC_INTERNAL_SOURCE_INCLUDED, 0));\n#endif\n\n    for( i=0; i<=1<<16; ++i) {\n        p1 = scalable_malloc(i);\n        if( !p1 )\n            printf(\"Warning: there should be memory but scalable_malloc returned NULL\\n\");\n        scalable_free(p1);\n    }\n    p1 = p2 = NULL;\n    for( i=1024*1024; ; i/=2 )\n    {\n        scalable_free(p1);\n        p1 = scalable_realloc(p2, i);\n        p2 = scalable_calloc(i, 32);\n        if (p2) {\n            if (i<sizeof(size_t)) {\n                for (j=0; j<i; j++)\n                    assert(0==*((char*)p2+j));\n            } else {\n                for (j=0; j<i; j+=sizeof(size_t))\n                    assert(0==*((size_t*)p2+j));\n            }\n        }\n        scalable_free(p2);\n        p2 = scalable_malloc(i);\n        if (i==0) break;\n    }\n    for( i=1; i<1024*1024; i*=2 )\n    {\n        scalable_free(p1);\n        p1 = scalable_realloc(p2, i);\n        p2 = scalable_malloc(i);\n    }\n    scalable_free(p1);\n    scalable_free(p2);\n    res = scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, NULL);\n    assert(res == TBBMALLOC_OK);\n    res = scalable_allocation_command(TBBMALLOC_CLEAN_THREAD_BUFFERS, NULL);\n    /* expect all caches cleaned before, so got nothing from CLEAN_THREAD_BUFFERS */\n    assert(res == TBBMALLOC_NO_EFFECT);\n    /* check that invalid param argument give expected result*/\n    res = scalable_allocation_command(TBBMALLOC_CLEAN_THREAD_BUFFERS,\n                                      (void*)(intptr_t)1);\n    assert(res == TBBMALLOC_INVALID_PARAM);\n    __TBB_mallocProcessShutdownNotification();\n    printf(\"done\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_regression.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n\n#include <stdio.h>\n#include \"tbb/scalable_allocator.h\"\n\nclass minimalAllocFree {\npublic:\n    void operator()(int size) const {\n        tbb::scalable_allocator<char> a;\n        char* str = a.allocate( size );\n        a.deallocate( str, size );\n    }\n};\n\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n#include \"harness.h\"\n\ntemplate<typename Body, typename Arg>\nvoid RunThread(const Body& body, const Arg& arg) {\n    NativeParallelForTask<Arg,Body> job(arg, body);\n    job.start();\n    job.wait_to_finish();\n}\n\n/*--------------------------------------------------------------------*/\n// The regression test against bug #1518 where thread bootstrap allocations \"leaked\"\n\n#include \"harness_memory.h\"\n\nbool TestBootstrapLeak() {\n    /* In the bug 1518, each thread leaked ~384 bytes.\n       Initially, scalable allocator maps 1MB. Thus it is necessary to take out most of this space.\n       1MB is chunked into 16K blocks; of those, one block is for thread bootstrap, and one more\n       should be reserved for the test body. 62 blocks left, each can serve 15 objects of 1024 bytes.\n    */\n    const int alloc_size = 1024;\n    const int take_out_count = 15*62;\n\n    tbb::scalable_allocator<char> a;\n    char* array[take_out_count];\n    for( int i=0; i<take_out_count; ++i )\n        array[i] = a.allocate( alloc_size );\n\n    RunThread( minimalAllocFree(), alloc_size ); // for threading library to take some memory\n    size_t memory_in_use = GetMemoryUsage();\n    // Wait for memory usage data to \"stabilize\". The test number (1000) has nothing underneath.\n    for( int i=0; i<1000; i++) {\n        if( GetMemoryUsage()!=memory_in_use ) {\n            memory_in_use = GetMemoryUsage();\n            i = -1;\n        }\n    }\n\n    ptrdiff_t memory_leak = 0;\n    // Note that 16K bootstrap memory block is enough to serve 42 threads.\n    const int num_thread_runs = 200;\n    for (int run=0; run<3; run++) {\n        memory_in_use = GetMemoryUsage();\n        for( int i=0; i<num_thread_runs; ++i )\n            RunThread( minimalAllocFree(), alloc_size );\n\n        memory_leak = GetMemoryUsage() - memory_in_use;\n        if (!memory_leak)\n            break;\n    }\n    if( memory_leak>0 ) { // possibly too strong?\n        REPORT( \"Error: memory leak of up to %ld bytes\\n\", static_cast<long>(memory_leak));\n    }\n\n    for( int i=0; i<take_out_count; ++i )\n        a.deallocate( array[i], alloc_size );\n\n    return memory_leak<=0;\n}\n\n/*--------------------------------------------------------------------*/\n// The regression test against a bug with incompatible semantics of msize and realloc\n\nbool TestReallocMsize(size_t startSz) {\n    bool passed = true;\n\n    char *buf = (char*)scalable_malloc(startSz);\n    ASSERT(buf, \"\");\n    size_t realSz = scalable_msize(buf);\n    ASSERT(realSz>=startSz, \"scalable_msize must be not less then allocated size\");\n    memset(buf, 'a', realSz-1);\n    buf[realSz-1] = 0;\n    char *buf1 = (char*)scalable_realloc(buf, 2*realSz);\n    ASSERT(buf1, \"\");\n    ASSERT(scalable_msize(buf1)>=2*realSz,\n           \"scalable_msize must be not less then allocated size\");\n    buf1[2*realSz-1] = 0;\n    if ( strspn(buf1, \"a\") < realSz-1 ) {\n        REPORT( \"Error: data broken for %d Bytes object.\\n\", startSz);\n        passed = false;\n    }\n    scalable_free(buf1);\n\n    return passed;\n}\n\n// regression test against incorrect work of msize/realloc\n// for aligned objects\nvoid TestAlignedMsize()\n{\n    const int NUM = 4;\n    char *p[NUM];\n    size_t objSizes[NUM];\n    size_t allocSz[] = {4, 8, 512, 2*1024, 4*1024, 8*1024, 16*1024, 0};\n    size_t align[] = {8, 512, 2*1024, 4*1024, 8*1024, 16*1024, 0};\n\n    for (int a=0; align[a]; a++)\n        for (int s=0; allocSz[s]; s++) {\n            for (int i=0; i<NUM; i++) {\n                p[i] = (char*)scalable_aligned_malloc(allocSz[s], align[a]);\n                ASSERT(is_aligned(p[i], align[a]), NULL);\n            }\n\n            for (int i=0; i<NUM; i++) {\n                objSizes[i] = scalable_msize(p[i]);\n                ASSERT(objSizes[i] >= allocSz[s],\n                       \"allocated size must be not less than requested\");\n                memset(p[i], i, objSizes[i]);\n            }\n            for (int i=0; i<NUM; i++) {\n                for (unsigned j=0; j<objSizes[i]; j++)\n                    ASSERT(((char*)p[i])[j] == i, \"Error: data broken\");\n            }\n\n            for (int i=0; i<NUM; i++) {\n                p[i] = (char*)scalable_aligned_realloc(p[i], 2*allocSz[s], align[a]);\n                ASSERT(is_aligned(p[i], align[a]), NULL);\n                memset((char*)p[i]+allocSz[s], i+1, allocSz[s]);\n            }\n            for (int i=0; i<NUM; i++) {\n                for (unsigned j=0; j<allocSz[s]; j++)\n                    ASSERT(((char*)p[i])[j] == i, \"Error: data broken\");\n                for (size_t j=allocSz[s]; j<2*allocSz[s]; j++)\n                    ASSERT(((char*)p[i])[j] == i+1, \"Error: data broken\");\n            }\n            for (int i=0; i<NUM; i++)\n                scalable_free(p[i]);\n        }\n}\n\n/*--------------------------------------------------------------------*/\n// The main test function\n\nint TestMain () {\n    bool passed = true;\n    // Check whether memory usage data can be obtained; if not, skip test_bootstrap_leak.\n    if( GetMemoryUsage() )\n        passed &= TestBootstrapLeak();\n\n    // TestReallocMsize runs for each power of 2 and each Fibonacci number below 64K\n    for (size_t a=1, b=1, sum=1; sum<=64*1024; ) {\n        passed &= TestReallocMsize(sum);\n        a = b;\n        b = sum;\n        sum = a+b;\n    }\n    for (size_t a=2; a<=64*1024; a*=2)\n        passed &= TestReallocMsize(a);\n\n    ASSERT( passed, \"Test failed\" );\n\n    TestAlignedMsize();\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_used_by_lib.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _USRDLL\n\n#include <stdlib.h>\n#include \"harness_defs.h\"\n#include \"tbb/scalable_allocator.h\"\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n#include \"../tbbmalloc/tbbmalloc_internal_api.h\"\n#endif\n\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n#include \"harness_assert.h\"\n\n#if _WIN32||_WIN64\nextern \"C\" {\n    extern __declspec(dllexport) void callDll();\n}\n#endif\n\nextern \"C\" void callDll()\n{\n    static const int NUM = 20;\n    void *ptrs[NUM];\n\n    for (int i=0; i<NUM; i++) {\n        ptrs[i] = scalable_malloc(i*1024);\n        ASSERT(ptrs[i], NULL);\n    }\n    for (int i=0; i<NUM; i++)\n        scalable_free(ptrs[i]);\n}\n\n#if __TBB_SOURCE_DIRECTLY_INCLUDED\n\nstruct RegisterProcessShutdownNotification {\n    ~RegisterProcessShutdownNotification() {\n        __TBB_mallocProcessShutdownNotification();\n    }\n};\n\nstatic RegisterProcessShutdownNotification reg;\n\n#endif\n\n#else // _USRDLL\n\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#include \"harness_dynamic_libs.h\"\n#if __TBB_WIN8UI_SUPPORT\n// FIXME: fix the test to support Windows* 8 Store Apps mode.\n#define HARNESS_SKIP_TEST 1\n#endif\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\n#if !HARNESS_SKIP_TEST\n\n#include \"harness_memory.h\"\n#include \"harness_tbb_independence.h\"\n#include \"harness_barrier.h\"\n\nclass UseDll {\n    Harness::FunctionAddress run;\npublic:\n    UseDll(Harness::FunctionAddress runPtr) : run(runPtr) { }\n    void operator()( int /*id*/ ) const {\n        (*run)();\n    }\n};\n\nvoid LoadThreadsUnload()\n{\n    Harness::LIBRARY_HANDLE lib =\n        Harness::OpenLibrary(TEST_LIBRARY_NAME(\"test_malloc_used_by_lib_dll\"));\n    ASSERT(lib, \"Can't load \" TEST_LIBRARY_NAME(\"test_malloc_used_by_lib_dll\"));\n    NativeParallelFor( 4, UseDll( Harness::GetAddress(lib, \"callDll\") ) );\n    Harness::CloseLibrary(lib);\n}\n\nstruct UnloadCallback {\n    Harness::LIBRARY_HANDLE lib;\n\n    void operator() () const {\n        Harness::CloseLibrary(lib);\n    }\n};\n\nstruct RunWithLoad : NoAssign {\n    static Harness::SpinBarrier startBarr, endBarr;\n    static UnloadCallback unloadCallback;\n    static Harness::FunctionAddress runPtr;\n\n    void operator()(int id) const {\n        if (!id) {\n            Harness::LIBRARY_HANDLE lib =\n                Harness::OpenLibrary(TEST_LIBRARY_NAME(\"test_malloc_used_by_lib_dll\"));\n            ASSERT(lib, \"Can't load \" TEST_LIBRARY_NAME(\"test_malloc_used_by_lib_dll\"));\n            runPtr = Harness::GetAddress(lib, \"callDll\");\n            unloadCallback.lib = lib;\n        }\n        startBarr.wait();\n        (*runPtr)();\n        endBarr.wait(unloadCallback);\n    }\n};\n\nHarness::SpinBarrier RunWithLoad::startBarr, RunWithLoad::endBarr;\nUnloadCallback RunWithLoad::unloadCallback;\nHarness::FunctionAddress RunWithLoad::runPtr;\n\nvoid ThreadsLoadUnload()\n{\n    const int threads = 4;\n\n    RunWithLoad::startBarr.initialize(threads);\n    RunWithLoad::endBarr.initialize(threads);\n    NativeParallelFor(threads, RunWithLoad());\n}\n\nint TestMain () {\n    const int ITERS = 20;\n    int i;\n    std::ptrdiff_t memory_leak = 0;\n\n    GetMemoryUsage();\n\n    for (int run = 0; run<2; run++) {\n        // expect that memory consumption stabilized after several runs\n        for (i=0; i<ITERS; i++) {\n            std::size_t memory_in_use = GetMemoryUsage();\n            if (run)\n                LoadThreadsUnload();\n            else\n                ThreadsLoadUnload();\n            memory_leak = GetMemoryUsage() - memory_in_use;\n            if (memory_leak == 0)  // possibly too strong?\n                break;\n        }\n        if(i==ITERS) {\n            // not stabilized, could be leak\n            REPORT( \"Error: memory leak of up to %ld bytes\\n\", static_cast<long>(memory_leak));\n            exit(1);\n        }\n    }\n\n    return Harness::Done;\n}\n\n#endif /* HARNESS_SKIP_TEST */\n#endif // _USRDLL\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_malloc_whitebox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* to prevent loading dynamic TBBmalloc at startup, that is not needed\n   for the whitebox test */\n#define __TBB_SOURCE_DIRECTLY_INCLUDED 1\n\n// According to C99 standard INTPTR_MIN defined for C++\n// iff __STDC_LIMIT_MACROS pre-defined\n#define __STDC_LIMIT_MACROS 1\n\n#define HARNESS_TBBMALLOC_THREAD_SHUTDOWN 1\n\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n\n// To not depends on ITT support stuff\n#ifdef DO_ITT_NOTIFY\n#undef DO_ITT_NOTIFY\n#endif\n\n#define __TBB_MALLOC_WHITEBOX_TEST 1 // to get access to allocator internals\n// help trigger rare race condition\n#define WhiteboxTestingYield() (__TBB_Yield(), __TBB_Yield(), __TBB_Yield(), __TBB_Yield())\n\n#if __INTEL_COMPILER && __TBB_MIC_OFFLOAD\n// 2571 is variable has not been declared with compatible \"target\" attribute\n// 3218 is class/struct may fail when offloaded because this field is misaligned\n//         or contains data that is misaligned\n    #pragma warning(push)\n    #pragma warning(disable:2571 3218)\n#endif\n#define protected public\n#define private public\n#include \"../tbbmalloc/frontend.cpp\"\n#undef protected\n#undef private\n#if __INTEL_COMPILER && __TBB_MIC_OFFLOAD\n    #pragma warning(pop)\n#endif\n#include \"../tbbmalloc/backend.cpp\"\n#include \"../tbbmalloc/backref.cpp\"\n\nnamespace tbbmalloc_whitebox {\n    size_t locGetProcessed = 0;\n    size_t locPutProcessed = 0;\n}\n#include \"../tbbmalloc/large_objects.cpp\"\n#include \"../tbbmalloc/tbbmalloc.cpp\"\n\nconst int LARGE_MEM_SIZES_NUM = 10;\n\nclass AllocInfo {\n    int *p;\n    int val;\n    int size;\npublic:\n    AllocInfo() : p(NULL), val(0), size(0) {}\n    explicit AllocInfo(int sz) : p((int*)scalable_malloc(sz*sizeof(int))),\n                                   val(rand()), size(sz) {\n        ASSERT(p, NULL);\n        for (int k=0; k<size; k++)\n            p[k] = val;\n    }\n    void check() const {\n        for (int k=0; k<size; k++)\n            ASSERT(p[k] == val, NULL);\n    }\n    void clear() {\n        scalable_free(p);\n    }\n};\n\nclass SimpleBarrier: NoAssign {\nprotected:\n    static Harness::SpinBarrier barrier;\npublic:\n    static void initBarrier(unsigned thrds) { barrier.initialize(thrds); }\n};\n\nHarness::SpinBarrier SimpleBarrier::barrier;\n\nclass TestLargeObjCache: public SimpleBarrier {\npublic:\n    static int largeMemSizes[LARGE_MEM_SIZES_NUM];\n\n    TestLargeObjCache( ) {}\n\n    void operator()( int /*mynum*/ ) const {\n        AllocInfo allocs[LARGE_MEM_SIZES_NUM];\n\n        // push to maximal cache limit\n        for (int i=0; i<2; i++) {\n            const int sizes[] = { MByte/sizeof(int),\n                                  (MByte-2*LargeObjectCache::largeBlockCacheStep)/sizeof(int) };\n            for (int q=0; q<2; q++) {\n                size_t curr = 0;\n                for (int j=0; j<LARGE_MEM_SIZES_NUM; j++, curr++)\n                    new (allocs+curr) AllocInfo(sizes[q]);\n\n                for (size_t j=0; j<curr; j++) {\n                    allocs[j].check();\n                    allocs[j].clear();\n                }\n            }\n        }\n\n        barrier.wait();\n\n        // check caching correctness\n        for (int i=0; i<1000; i++) {\n            size_t curr = 0;\n            for (int j=0; j<LARGE_MEM_SIZES_NUM-1; j++, curr++)\n                new (allocs+curr) AllocInfo(largeMemSizes[j]);\n\n            new (allocs+curr)\n                AllocInfo((int)(4*minLargeObjectSize +\n                                2*minLargeObjectSize*(1.*rand()/RAND_MAX)));\n            curr++;\n\n            for (size_t j=0; j<curr; j++) {\n                allocs[j].check();\n                allocs[j].clear();\n            }\n        }\n    }\n};\n\nint TestLargeObjCache::largeMemSizes[LARGE_MEM_SIZES_NUM];\n\nvoid TestLargeObjectCache()\n{\n    for (int i=0; i<LARGE_MEM_SIZES_NUM; i++)\n        TestLargeObjCache::largeMemSizes[i] =\n            (int)(minLargeObjectSize + 2*minLargeObjectSize*(1.*rand()/RAND_MAX));\n\n    for( int p=MaxThread; p>=MinThread; --p ) {\n        TestLargeObjCache::initBarrier( p );\n        NativeParallelFor( p, TestLargeObjCache() );\n    }\n}\n\n#if MALLOC_CHECK_RECURSION\n\nclass TestStartupAlloc: public SimpleBarrier {\n    struct TestBlock {\n        void *ptr;\n        size_t sz;\n    };\n    static const int ITERS = 100;\npublic:\n    TestStartupAlloc() {}\n    void operator()(int) const {\n        TestBlock blocks1[ITERS], blocks2[ITERS];\n\n        barrier.wait();\n\n        for (int i=0; i<ITERS; i++) {\n            blocks1[i].sz = rand() % minLargeObjectSize;\n            blocks1[i].ptr = StartupBlock::allocate(blocks1[i].sz);\n            ASSERT(blocks1[i].ptr && StartupBlock::msize(blocks1[i].ptr)>=blocks1[i].sz\n                   && 0==(uintptr_t)blocks1[i].ptr % sizeof(void*), NULL);\n            memset(blocks1[i].ptr, i, blocks1[i].sz);\n        }\n        for (int i=0; i<ITERS; i++) {\n            blocks2[i].sz = rand() % minLargeObjectSize;\n            blocks2[i].ptr = StartupBlock::allocate(blocks2[i].sz);\n            ASSERT(blocks2[i].ptr && StartupBlock::msize(blocks2[i].ptr)>=blocks2[i].sz\n                   && 0==(uintptr_t)blocks2[i].ptr % sizeof(void*), NULL);\n            memset(blocks2[i].ptr, i, blocks2[i].sz);\n\n            for (size_t j=0; j<blocks1[i].sz; j++)\n                ASSERT(*((char*)blocks1[i].ptr+j) == i, NULL);\n            Block *block = (Block *)alignDown(blocks1[i].ptr, slabSize);\n            ((StartupBlock *)block)->free(blocks1[i].ptr);\n        }\n        for (int i=ITERS-1; i>=0; i--) {\n            for (size_t j=0; j<blocks2[i].sz; j++)\n                ASSERT(*((char*)blocks2[i].ptr+j) == i, NULL);\n            Block *block = (Block *)alignDown(blocks2[i].ptr, slabSize);\n            ((StartupBlock *)block)->free(blocks2[i].ptr);\n        }\n    }\n};\n\n#endif /* MALLOC_CHECK_RECURSION */\n\n#include <deque>\n\ntemplate<int ITERS>\nclass BackRefWork: NoAssign {\n    struct TestBlock {\n        BackRefIdx idx;\n        char       data;\n        TestBlock(BackRefIdx idx_) : idx(idx_) {}\n    };\npublic:\n    BackRefWork() {}\n    void operator()(int) const {\n        size_t cnt;\n        // it's important to not invalidate pointers to the contents of the container\n        std::deque<TestBlock> blocks;\n\n        // for ITERS==0 consume all available backrefs\n        for (cnt=0; !ITERS || cnt<ITERS; cnt++) {\n            BackRefIdx idx = BackRefIdx::newBackRef(/*largeObj=*/false);\n            if (idx.isInvalid())\n                break;\n            blocks.push_back(TestBlock(idx));\n            setBackRef(blocks.back().idx, &blocks.back().data);\n        }\n        for (size_t i=0; i<cnt; i++)\n            ASSERT((Block*)&blocks[i].data == getBackRef(blocks[i].idx), NULL);\n        for (size_t i=cnt; i>0; i--)\n            removeBackRef(blocks[i-1].idx);\n    }\n};\n\nclass LocalCachesHit: NoAssign {\n    // set ITERS to trigger possible leak of backreferences\n    // during cleanup on cache overflow and on thread termination\n    static const int ITERS = 2*(FreeBlockPool::POOL_HIGH_MARK +\n                                LocalLOC::LOC_HIGH_MARK);\npublic:\n    LocalCachesHit() {}\n    void operator()(int) const {\n        void *objsSmall[ITERS], *objsLarge[ITERS];\n\n        for (int i=0; i<ITERS; i++) {\n            objsSmall[i] = scalable_malloc(minLargeObjectSize-1);\n            objsLarge[i] = scalable_malloc(minLargeObjectSize);\n        }\n        for (int i=0; i<ITERS; i++) {\n            scalable_free(objsSmall[i]);\n            scalable_free(objsLarge[i]);\n        }\n    }\n};\n\nstatic size_t allocatedBackRefCount()\n{\n    size_t cnt = 0;\n    for (int i=0; i<=backRefMaster->lastUsed; i++)\n        cnt += backRefMaster->backRefBl[i]->allocatedCount;\n    return cnt;\n}\n\nclass TestInvalidBackrefs: public SimpleBarrier {\n#if __ANDROID__\n    // Android requires lower iters due to lack of virtual memory.\n    static const int BACKREF_GROWTH_ITERS = 50*1024;\n#else\n    static const int BACKREF_GROWTH_ITERS = 200*1024;\n#endif\n\n    static tbb::atomic<bool> backrefGrowthDone;\n    static void *ptrs[BACKREF_GROWTH_ITERS];\npublic:\n    TestInvalidBackrefs() {}\n    void operator()(int id) const {\n\n        if (!id) {\n            backrefGrowthDone = false;\n            barrier.wait();\n\n            for (int i=0; i<BACKREF_GROWTH_ITERS; i++)\n                ptrs[i] = scalable_malloc(minLargeObjectSize);\n            backrefGrowthDone = true;\n            for (int i=0; i<BACKREF_GROWTH_ITERS; i++)\n                scalable_free(ptrs[i]);\n        } else {\n            void *p2 = scalable_malloc(minLargeObjectSize-1);\n            char *p1 = (char*)scalable_malloc(minLargeObjectSize-1);\n            LargeObjectHdr *hdr =\n                (LargeObjectHdr*)(p1+minLargeObjectSize-1 - sizeof(LargeObjectHdr));\n            hdr->backRefIdx.master = 7;\n            hdr->backRefIdx.largeObj = 1;\n            hdr->backRefIdx.offset = 2000;\n\n            barrier.wait();\n\n            while (!backrefGrowthDone) {\n                scalable_free(p2);\n                p2 = scalable_malloc(minLargeObjectSize-1);\n            }\n            scalable_free(p1);\n            scalable_free(p2);\n        }\n    }\n};\n\ntbb::atomic<bool> TestInvalidBackrefs::backrefGrowthDone;\nvoid *TestInvalidBackrefs::ptrs[BACKREF_GROWTH_ITERS];\n\nvoid TestBackRef() {\n    size_t beforeNumBackRef, afterNumBackRef;\n\n    beforeNumBackRef = allocatedBackRefCount();\n    for( int p=MaxThread; p>=MinThread; --p )\n        NativeParallelFor( p, BackRefWork<2*BR_MAX_CNT+2>() );\n    afterNumBackRef = allocatedBackRefCount();\n    ASSERT(beforeNumBackRef==afterNumBackRef, \"backreference leak detected\");\n\n    // lastUsed marks peak resource consumption. As we allocate below the mark,\n    // it must not move up, otherwise there is a resource leak.\n    int sustLastUsed = backRefMaster->lastUsed;\n    NativeParallelFor( 1, BackRefWork<2*BR_MAX_CNT+2>() );\n    ASSERT(sustLastUsed == backRefMaster->lastUsed, \"backreference leak detected\");\n\n    // check leak of back references while per-thread caches are in use\n    // warm up needed to cover bootStrapMalloc call\n    NativeParallelFor( 1, LocalCachesHit() );\n    beforeNumBackRef = allocatedBackRefCount();\n    NativeParallelFor( 2, LocalCachesHit() );\n    int res = scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, NULL);\n    ASSERT(res == TBBMALLOC_OK, NULL);\n    afterNumBackRef = allocatedBackRefCount();\n    ASSERT(beforeNumBackRef>=afterNumBackRef, \"backreference leak detected\");\n\n    // This is a regression test against race condition between backreference\n    // extension and checking invalid BackRefIdx.\n    // While detecting is object large or small, scalable_free 1st check for\n    // large objects, so there is a chance to prepend small object with\n    // seems valid BackRefIdx for large objects, and thus trigger the bug.\n    TestInvalidBackrefs::initBarrier(MaxThread);\n    NativeParallelFor( MaxThread, TestInvalidBackrefs() );\n    // Consume all available backrefs and check they work correctly.\n    // For now test 32-bit machines only, because for 64-bit memory consumption is too high.\n    if (sizeof(uintptr_t) == 4)\n        NativeParallelFor( MaxThread, BackRefWork<0>() );\n}\n\nvoid *getMem(intptr_t /*pool_id*/, size_t &bytes)\n{\n    const size_t BUF_SIZE = 8*1024*1024;\n    static char space[BUF_SIZE];\n    static size_t pos;\n\n    if (pos + bytes > BUF_SIZE)\n        return NULL;\n\n    void *ret = space + pos;\n    pos += bytes;\n\n    return ret;\n}\n\nint putMem(intptr_t /*pool_id*/, void* /*raw_ptr*/, size_t /*raw_bytes*/)\n{\n    return 0;\n}\n\nstruct MallocPoolHeader {\n    void  *rawPtr;\n    size_t userSize;\n};\n\nvoid *getMallocMem(intptr_t /*pool_id*/, size_t &bytes)\n{\n    void *rawPtr = malloc(bytes+sizeof(MallocPoolHeader));\n    void *ret = (void *)((uintptr_t)rawPtr+sizeof(MallocPoolHeader));\n\n    MallocPoolHeader *hdr = (MallocPoolHeader*)ret-1;\n    hdr->rawPtr = rawPtr;\n    hdr->userSize = bytes;\n\n    return ret;\n}\n\nint putMallocMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)\n{\n    MallocPoolHeader *hdr = (MallocPoolHeader*)ptr-1;\n    ASSERT(bytes == hdr->userSize, \"Invalid size in pool callback.\");\n    free(hdr->rawPtr);\n\n    return 0;\n}\n\nclass StressLOCacheWork: NoAssign {\n    rml::MemoryPool *my_mallocPool;\npublic:\n    StressLOCacheWork(rml::MemoryPool *mallocPool) : my_mallocPool(mallocPool) {}\n    void operator()(int) const {\n        for (size_t sz=minLargeObjectSize; sz<1*1024*1024;\n             sz+=LargeObjectCache::largeBlockCacheStep) {\n            void *ptr = pool_malloc(my_mallocPool, sz);\n            ASSERT(ptr, \"Memory was not allocated\");\n            memset(ptr, sz, sz);\n            pool_free(my_mallocPool, ptr);\n        }\n    }\n};\n\nvoid TestPools() {\n    rml::MemPoolPolicy pol(getMem, putMem);\n    size_t beforeNumBackRef, afterNumBackRef;\n\n    rml::MemoryPool *pool1;\n    rml::MemoryPool *pool2;\n    pool_create_v1(0, &pol, &pool1);\n    pool_create_v1(0, &pol, &pool2);\n    pool_destroy(pool1);\n    pool_destroy(pool2);\n\n    scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, NULL);\n    beforeNumBackRef = allocatedBackRefCount();\n    rml::MemoryPool *fixedPool;\n\n    pool_create_v1(0, &pol, &fixedPool);\n    pol.pAlloc = getMallocMem;\n    pol.pFree = putMallocMem;\n    pol.granularity = 8;\n    rml::MemoryPool *mallocPool;\n\n    pool_create_v1(0, &pol, &mallocPool);\n/* check that large object cache (LOC) returns correct size for cached objects\n   passBackendSz Byte objects are cached in LOC, but bypassed the backend, so\n   memory requested directly from allocation callback.\n   nextPassBackendSz Byte objects must fit to another LOC bin,\n   so that their allocation/realeasing leads to cache cleanup.\n   All this is expecting to lead to releasing of passBackendSz Byte object\n   from LOC during LOC cleanup, and putMallocMem checks that returned size\n   is correct.\n*/\n    const size_t passBackendSz = Backend::maxBinned_HugePage+1,\n        anotherLOCBinSz = minLargeObjectSize+1;\n    for (int i=0; i<10; i++) { // run long enough to be cached\n        void *p = pool_malloc(mallocPool, passBackendSz);\n        ASSERT(p, \"Memory was not allocated\");\n        pool_free(mallocPool, p);\n    }\n    // run long enough to passBackendSz allocation was cleaned from cache\n    // and returned back to putMallocMem for size checking\n    for (int i=0; i<1000; i++) {\n        void *p = pool_malloc(mallocPool, anotherLOCBinSz);\n        ASSERT(p, \"Memory was not allocated\");\n        pool_free(mallocPool, p);\n    }\n\n    void *smallObj =  pool_malloc(fixedPool, 10);\n    ASSERT(smallObj, \"Memory was not allocated\");\n    memset(smallObj, 1, 10);\n    void *ptr = pool_malloc(fixedPool, 1024);\n    ASSERT(ptr, \"Memory was not allocated\");\n    memset(ptr, 1, 1024);\n    void *largeObj = pool_malloc(fixedPool, minLargeObjectSize);\n    ASSERT(largeObj, \"Memory was not allocated\");\n    memset(largeObj, 1, minLargeObjectSize);\n    ptr = pool_malloc(fixedPool, minLargeObjectSize);\n    ASSERT(ptr, \"Memory was not allocated\");\n    memset(ptr, minLargeObjectSize, minLargeObjectSize);\n    pool_malloc(fixedPool, 10*minLargeObjectSize); // no leak for unsuccessful allocations\n    pool_free(fixedPool, smallObj);\n    pool_free(fixedPool, largeObj);\n\n    // provoke large object cache cleanup and hope no leaks occurs\n    for( int p=MaxThread; p>=MinThread; --p )\n        NativeParallelFor( p, StressLOCacheWork(mallocPool) );\n    pool_destroy(mallocPool);\n    pool_destroy(fixedPool);\n\n    scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, NULL);\n    afterNumBackRef = allocatedBackRefCount();\n    ASSERT(beforeNumBackRef==afterNumBackRef, \"backreference leak detected\");\n\n    {\n        // test usedSize/cachedSize and LOC bitmask correctness\n        void *p[5];\n        pool_create_v1(0, &pol, &mallocPool);\n        const LargeObjectCache *loc = &((rml::internal::MemoryPool*)mallocPool)->extMemPool.loc;\n        p[3] = pool_malloc(mallocPool, minLargeObjectSize+2*LargeObjectCache::largeBlockCacheStep);\n        for (int i=0; i<10; i++) {\n            p[0] = pool_malloc(mallocPool, minLargeObjectSize);\n            p[1] = pool_malloc(mallocPool, minLargeObjectSize+LargeObjectCache::largeBlockCacheStep);\n            pool_free(mallocPool, p[0]);\n            pool_free(mallocPool, p[1]);\n        }\n        ASSERT(loc->getUsedSize(), NULL);\n        pool_free(mallocPool, p[3]);\n        ASSERT(loc->getLOCSize() < 3*(minLargeObjectSize+LargeObjectCache::largeBlockCacheStep), NULL);\n        const size_t maxLocalLOCSize = LocalLOCImpl<3,30>::getMaxSize();\n        ASSERT(loc->getUsedSize() <= maxLocalLOCSize, NULL);\n        for (int i=0; i<3; i++)\n            p[i] = pool_malloc(mallocPool, minLargeObjectSize+i*LargeObjectCache::largeBlockCacheStep);\n        size_t currUser = loc->getUsedSize();\n        ASSERT(!loc->getLOCSize() && currUser >= 3*(minLargeObjectSize+LargeObjectCache::largeBlockCacheStep), NULL);\n        p[4] = pool_malloc(mallocPool, minLargeObjectSize+3*LargeObjectCache::largeBlockCacheStep);\n        ASSERT(loc->getUsedSize() - currUser >= minLargeObjectSize+3*LargeObjectCache::largeBlockCacheStep, NULL);\n        pool_free(mallocPool, p[4]);\n        ASSERT(loc->getUsedSize() <= currUser+maxLocalLOCSize, NULL);\n        pool_reset(mallocPool);\n        ASSERT(!loc->getLOCSize() && !loc->getUsedSize(), NULL);\n        pool_destroy(mallocPool);\n    }\n    // To test LOC we need bigger lists than released by current LocalLOC\n    //   in production code. Create special LocalLOC.\n    {\n        LocalLOCImpl<2, 20> lLOC;\n        pool_create_v1(0, &pol, &mallocPool);\n        rml::internal::ExtMemoryPool *mPool = &((rml::internal::MemoryPool*)mallocPool)->extMemPool;\n        const LargeObjectCache *loc = &((rml::internal::MemoryPool*)mallocPool)->extMemPool.loc;\n        for (int i=0; i<22; i++) {\n            void *o = pool_malloc(mallocPool, minLargeObjectSize+i*LargeObjectCache::largeBlockCacheStep);\n            bool ret = lLOC.put(((LargeObjectHdr*)o - 1)->memoryBlock, mPool);\n            ASSERT(ret, NULL);\n\n            o = pool_malloc(mallocPool, minLargeObjectSize+i*LargeObjectCache::largeBlockCacheStep);\n            ret = lLOC.put(((LargeObjectHdr*)o - 1)->memoryBlock, mPool);\n            ASSERT(ret, NULL);\n        }\n        lLOC.externalCleanup(mPool);\n        ASSERT(!loc->getUsedSize(), NULL);\n\n        pool_destroy(mallocPool);\n    }\n}\n\nvoid TestObjectRecognition() {\n    size_t headersSize = sizeof(LargeMemoryBlock)+sizeof(LargeObjectHdr);\n    unsigned falseObjectSize = 113; // unsigned is the type expected by getObjectSize\n    size_t obtainedSize;\n\n    ASSERT(sizeof(BackRefIdx)==sizeof(uintptr_t), \"Unexpected size of BackRefIdx\");\n    ASSERT(getObjectSize(falseObjectSize)!=falseObjectSize, \"Error in test: bad choice for false object size\");\n\n    void* mem = scalable_malloc(2*slabSize);\n    ASSERT(mem, \"Memory was not allocated\");\n    Block* falseBlock = (Block*)alignUp((uintptr_t)mem, slabSize);\n    falseBlock->objectSize = falseObjectSize;\n    char* falseSO = (char*)falseBlock + falseObjectSize*7;\n    ASSERT(alignDown(falseSO, slabSize)==(void*)falseBlock, \"Error in test: false object offset is too big\");\n\n    void* bufferLOH = scalable_malloc(2*slabSize + headersSize);\n    ASSERT(bufferLOH, \"Memory was not allocated\");\n    LargeObjectHdr* falseLO =\n        (LargeObjectHdr*)alignUp((uintptr_t)bufferLOH + headersSize, slabSize);\n    LargeObjectHdr* headerLO = (LargeObjectHdr*)falseLO-1;\n    headerLO->memoryBlock = (LargeMemoryBlock*)bufferLOH;\n    headerLO->memoryBlock->unalignedSize = 2*slabSize + headersSize;\n    headerLO->memoryBlock->objectSize = slabSize + headersSize;\n    headerLO->backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true);\n    setBackRef(headerLO->backRefIdx, headerLO);\n    ASSERT(scalable_msize(falseLO) == slabSize + headersSize,\n           \"Error in test: LOH falsification failed\");\n    removeBackRef(headerLO->backRefIdx);\n\n    const int NUM_OF_IDX = BR_MAX_CNT+2;\n    BackRefIdx idxs[NUM_OF_IDX];\n    for (int cnt=0; cnt<2; cnt++) {\n        for (int master = -10; master<10; master++) {\n            falseBlock->backRefIdx.master = (uint16_t)master;\n            headerLO->backRefIdx.master = (uint16_t)master;\n\n            for (int bl = -10; bl<BR_MAX_CNT+10; bl++) {\n                falseBlock->backRefIdx.offset = (uint16_t)bl;\n                headerLO->backRefIdx.offset = (uint16_t)bl;\n\n                for (int largeObj = 0; largeObj<2; largeObj++) {\n                    falseBlock->backRefIdx.largeObj = largeObj;\n                    headerLO->backRefIdx.largeObj = largeObj;\n\n                    obtainedSize = __TBB_malloc_safer_msize(falseSO, NULL);\n                    ASSERT(obtainedSize==0, \"Incorrect pointer accepted\");\n                    obtainedSize = __TBB_malloc_safer_msize(falseLO, NULL);\n                    ASSERT(obtainedSize==0, \"Incorrect pointer accepted\");\n                }\n            }\n        }\n        if (cnt == 1) {\n            for (int i=0; i<NUM_OF_IDX; i++)\n                removeBackRef(idxs[i]);\n            break;\n        }\n        for (int i=0; i<NUM_OF_IDX; i++) {\n            idxs[i] = BackRefIdx::newBackRef(/*largeObj=*/false);\n            setBackRef(idxs[i], NULL);\n        }\n    }\n    char *smallPtr = (char*)scalable_malloc(falseObjectSize);\n    obtainedSize = __TBB_malloc_safer_msize(smallPtr, NULL);\n    ASSERT(obtainedSize==getObjectSize(falseObjectSize), \"Correct pointer not accepted?\");\n    scalable_free(smallPtr);\n\n    obtainedSize = __TBB_malloc_safer_msize(mem, NULL);\n    ASSERT(obtainedSize>=2*slabSize, \"Correct pointer not accepted?\");\n    scalable_free(mem);\n    scalable_free(bufferLOH);\n}\n\nclass TestBackendWork: public SimpleBarrier {\n    struct TestBlock {\n        intptr_t   data;\n        BackRefIdx idx;\n    };\n    static const int ITERS = 20;\n\n    rml::internal::Backend *backend;\npublic:\n    TestBackendWork(rml::internal::Backend *bknd) : backend(bknd) {}\n    void operator()(int) const {\n        barrier.wait();\n\n        for (int i=0; i<ITERS; i++) {\n            BlockI *slabBlock = backend->getSlabBlock(1);\n            ASSERT(slabBlock, \"Memory was not allocated\");\n            LargeMemoryBlock *lmb = backend->getLargeBlock(8*1024);\n            backend->putSlabBlock(slabBlock);\n            backend->putLargeBlock(lmb);\n        }\n    }\n};\n\nvoid TestBackend()\n{\n    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);\n    rml::MemoryPool *mPool;\n    pool_create_v1(0, &pol, &mPool);\n    rml::internal::ExtMemoryPool *ePool =\n        &((rml::internal::MemoryPool*)mPool)->extMemPool;\n    rml::internal::Backend *backend = &ePool->backend;\n\n    for( int p=MaxThread; p>=MinThread; --p ) {\n        // regression test against an race condition in backend synchronization,\n        // triggered only when WhiteboxTestingYield() call yields\n        for (int i=0; i<100; i++) {\n            TestBackendWork::initBarrier(p);\n            NativeParallelFor( p, TestBackendWork(backend) );\n        }\n    }\n\n    BlockI *block = backend->getSlabBlock(1);\n    ASSERT(block, \"Memory was not allocated\");\n    backend->putSlabBlock(block);\n\n    // Checks if the backend increases and decreases the amount of allocated memory when memory is allocated.\n    const size_t memSize0 = backend->getTotalMemSize();\n    LargeMemoryBlock *lmb = backend->getLargeBlock(4*MByte);\n    ASSERT( lmb, ASSERT_TEXT );\n\n    const size_t memSize1 = backend->getTotalMemSize();\n    ASSERT( (intptr_t)(memSize1-memSize0) >= 4*MByte, \"The backend has not increased the amount of using memory.\" );\n\n    backend->putLargeBlock(lmb);\n    const size_t memSize2 = backend->getTotalMemSize();\n    ASSERT( memSize2 == memSize0, \"The backend has not decreased the amount of using memory.\" );\n\n    pool_destroy(mPool);\n}\n\nvoid TestBitMask()\n{\n    BitMaskMin<256> mask;\n\n    mask.reset();\n    mask.set(10, 1);\n    mask.set(5, 1);\n    mask.set(1, 1);\n    ASSERT(mask.getMinTrue(2) == 5, NULL);\n\n    mask.reset();\n    mask.set(0, 1);\n    mask.set(64, 1);\n    mask.set(63, 1);\n    mask.set(200, 1);\n    mask.set(255, 1);\n    ASSERT(mask.getMinTrue(0) == 0, NULL);\n    ASSERT(mask.getMinTrue(1) == 63, NULL);\n    ASSERT(mask.getMinTrue(63) == 63, NULL);\n    ASSERT(mask.getMinTrue(64) == 64, NULL);\n    ASSERT(mask.getMinTrue(101) == 200, NULL);\n    ASSERT(mask.getMinTrue(201) == 255, NULL);\n    mask.set(255, 0);\n    ASSERT(mask.getMinTrue(201) == -1, NULL);\n}\n\nsize_t getMemSize()\n{\n    return defaultMemPool->extMemPool.backend.getTotalMemSize();\n}\n\nclass CheckNotCached {\n    static size_t memSize;\npublic:\n    void operator() () const {\n        int res = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, 1);\n        ASSERT(res == TBBMALLOC_OK, NULL);\n        if (memSize==(size_t)-1) {\n            memSize = getMemSize();\n        } else {\n            ASSERT(getMemSize() == memSize, NULL);\n            memSize=(size_t)-1;\n        }\n    }\n};\n\nsize_t CheckNotCached::memSize = (size_t)-1;\n\nclass RunTestHeapLimit: public SimpleBarrier {\npublic:\n    void operator()( int /*mynum*/ ) const {\n        // Provoke bootstrap heap initialization before recording memory size.\n        // NOTE: The initialization should be processed only with a \"large\"\n        // object. Since the \"small\" object allocation lead to blocking of a\n        // slab as an active block and it is impossible to release it with\n        // foreign thread.\n        scalable_free(scalable_malloc(minLargeObjectSize));\n        barrier.wait(CheckNotCached());\n        for (size_t n = minLargeObjectSize; n < 5*1024*1024; n += 128*1024)\n            scalable_free(scalable_malloc(n));\n        barrier.wait(CheckNotCached());\n    }\n};\n\nvoid TestHeapLimit()\n{\n    if(!isMallocInitialized()) doInitialization();\n    // tiny limit to stop caching\n    int res = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, 1);\n    ASSERT(res == TBBMALLOC_OK, NULL);\n     // Provoke bootstrap heap initialization before recording memory size.\n    scalable_free(scalable_malloc(8));\n    size_t n, sizeBefore = getMemSize();\n\n    // Try to provoke call to OS for memory to check that\n    // requests are not fulfilled from caches.\n    // Single call is not enough here because of backend fragmentation.\n    for (n = minLargeObjectSize; n < 10*1024*1024; n += 16*1024) {\n        void *p = scalable_malloc(n);\n        bool leave = (sizeBefore != getMemSize());\n        scalable_free(p);\n        if (leave)\n            break;\n        ASSERT(sizeBefore == getMemSize(), \"No caching expected\");\n    }\n    ASSERT(n < 10*1024*1024, \"scalable_malloc doesn't provoke OS request for memory, \"\n           \"is some internal cache still used?\");\n\n    for( int p=MaxThread; p>=MinThread; --p ) {\n        RunTestHeapLimit::initBarrier( p );\n        NativeParallelFor( p, RunTestHeapLimit() );\n    }\n    // it's try to match limit as well as set limit, so call here\n    res = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, 1);\n    ASSERT(res == TBBMALLOC_OK, NULL);\n    size_t m = getMemSize();\n    ASSERT(sizeBefore == m, NULL);\n    // restore default\n    res = scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, 0);\n    ASSERT(res == TBBMALLOC_OK, NULL);\n}\n\nvoid checkNoHugePages()\n{\n    ASSERT(!hugePages.isEnabled, \"scalable_allocation_mode \"\n           \"must have priority over environment variable\");\n}\n\n/*---------------------------------------------------------------------------*/\n// The regression test against bugs in TBBMALLOC_CLEAN_ALL_BUFFERS allocation command.\n// The idea is to allocate and deallocate a set of objects randomly in parallel.\n// For large sizes (16K), it forces conflicts in backend during coalescing.\n// For small sizes (4K), it forces cross-thread deallocations and then orphaned slabs.\n// Global cleanup should process orphaned slabs and the queue of postponed coalescing\n// requests, otherwise it will not be able to unmap all unused memory.\n\nconst int num_allocs = 10*1024;\nvoid *ptrs[num_allocs];\ntbb::atomic<int> alloc_counter;\n\ntemplate<int AllocSize>\nstruct TestCleanAllBuffersBody : public SimpleBarrier {\n    void operator() ( int ) const {\n        barrier.wait();\n        for( int i = alloc_counter++; i < num_allocs; i = alloc_counter++ ) {\n           ptrs[i] = scalable_malloc( AllocSize );\n           ASSERT( ptrs[i] != NULL, \"scalable_malloc returned zero.\" );\n        }\n        barrier.wait();\n        for( int i = --alloc_counter; i >= 0; i = --alloc_counter )\n           if (i<num_allocs) scalable_free( ptrs[i] );\n    }\n};\n\ntemplate<int AllocSize>\nvoid TestCleanAllBuffers() {\n    const int num_threads = 8;\n    // Clean up if something was allocated before the test\n    scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS,0);\n\n    size_t memory_in_use_before = getMemSize();\n    alloc_counter = 0;\n    TestCleanAllBuffersBody<AllocSize>::initBarrier(num_threads);\n    NativeParallelFor(num_threads, TestCleanAllBuffersBody<AllocSize>());\n    // TODO: reproduce the bug conditions more reliably\n    if ( defaultMemPool->extMemPool.backend.coalescQ.blocksToFree == NULL )\n        REMARK( \"Warning: The queue of postponed coalescing requests is empty. Unable to create the condition for bug reproduction.\\n\" );\n    int result = scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS,0);\n    ASSERT( result == TBBMALLOC_OK, \"The cleanup request has not cleaned anything.\" );\n    size_t memory_in_use_after = getMemSize();\n\n    size_t memory_leak = memory_in_use_after - memory_in_use_before;\n    REMARK( \"memory_in_use_before = %ld\\nmemory_in_use_after = %ld\\n\", memory_in_use_before, memory_in_use_after );\n    ASSERT( memory_leak == 0, \"Cleanup was unable to release all allocated memory.\" );\n}\n/*---------------------------------------------------------------------------*/\n/*------------------------- Large Object Cache tests ------------------------*/\n#if _MSC_VER==1600 || _MSC_VER==1500\n    // ignore C4275: non dll-interface class 'stdext::exception' used as\n    // base for dll-interface class 'std::bad_cast'\n    #pragma warning (disable: 4275)\n#endif\n#include <vector>\n#include <list>\n#include __TBB_STD_SWAP_HEADER\n\n// default constructor of CacheBin\ntemplate<typename Props>\nrml::internal::LargeObjectCacheImpl<Props>::CacheBin::CacheBin() {}\n\ntemplate<typename Props>\nclass CacheBinModel {\n\n    typedef typename rml::internal::LargeObjectCacheImpl<Props>::CacheBin CacheBinType;\n\n    // The emulated cache bin.\n    CacheBinType cacheBinModel;\n    // The reference to real cahce bin inside the large object cache.\n    CacheBinType &cacheBin;\n\n    const size_t size;\n\n    // save only current time\n    std::list<uintptr_t> objects;\n\n    void doCleanup() {\n        if ( cacheBinModel.cachedSize > Props::TooLargeFactor*cacheBinModel.usedSize ) tooLargeLOC++;\n        else tooLargeLOC = 0;\n\n        if (tooLargeLOC>3 && cacheBinModel.ageThreshold)\n            cacheBinModel.ageThreshold = (cacheBinModel.ageThreshold + cacheBinModel.meanHitRange)/2;\n\n        uintptr_t currTime = cacheCurrTime;\n        while (!objects.empty() && (intptr_t)(currTime - objects.front()) > cacheBinModel.ageThreshold) {\n            cacheBinModel.cachedSize -= size;\n            cacheBinModel.lastCleanedAge = objects.front();\n            objects.pop_front();\n        }\n\n        cacheBinModel.oldest = objects.empty() ? 0 : objects.front();\n    }\n\npublic:\n    CacheBinModel(CacheBinType &_cacheBin, size_t allocSize) : cacheBin(_cacheBin), size(allocSize) {\n        cacheBinModel.oldest = cacheBin.oldest;\n        cacheBinModel.lastCleanedAge = cacheBin.lastCleanedAge;\n        cacheBinModel.ageThreshold = cacheBin.ageThreshold;\n        cacheBinModel.usedSize = cacheBin.usedSize;\n        cacheBinModel.cachedSize = cacheBin.cachedSize;\n        cacheBinModel.meanHitRange = cacheBin.meanHitRange;\n        cacheBinModel.lastGet = cacheBin.lastGet;\n    }\n    void get() {\n        uintptr_t currTime = ++cacheCurrTime;\n\n        if ( objects.empty() ) {\n            const uintptr_t sinceLastGet = currTime - cacheBinModel.lastGet;\n            if ( ( cacheBinModel.ageThreshold && sinceLastGet > Props::LongWaitFactor*cacheBinModel.ageThreshold ) ||\n                 ( cacheBinModel.lastCleanedAge && sinceLastGet > Props::LongWaitFactor*(cacheBinModel.lastCleanedAge - cacheBinModel.lastGet) ) )\n                cacheBinModel.lastCleanedAge = cacheBinModel.ageThreshold = 0;\n\n            if (cacheBinModel.lastCleanedAge)\n                cacheBinModel.ageThreshold = Props::OnMissFactor*(currTime - cacheBinModel.lastCleanedAge);\n        } else {\n            uintptr_t obj_age = objects.back();\n            objects.pop_back();\n            if ( objects.empty() ) cacheBinModel.oldest = 0;\n\n            intptr_t hitRange = currTime - obj_age;\n            cacheBinModel.meanHitRange = cacheBinModel.meanHitRange? (cacheBinModel.meanHitRange + hitRange)/2 : hitRange;\n\n            cacheBinModel.cachedSize -= size;\n        }\n\n        cacheBinModel.usedSize += size;\n        cacheBinModel.lastGet = currTime;\n\n        if ( currTime % rml::internal::cacheCleanupFreq == 0 ) doCleanup();\n    }\n\n    void putList( int num ) {\n        uintptr_t currTime = cacheCurrTime;\n        cacheCurrTime += num;\n\n        cacheBinModel.usedSize -= num*size;\n\n        bool cleanUpNeeded = false;\n        if ( !cacheBinModel.lastCleanedAge ) {\n            cacheBinModel.lastCleanedAge = ++currTime;\n            cleanUpNeeded |= currTime % rml::internal::cacheCleanupFreq == 0;\n            num--;\n        }\n\n        for ( int i=1; i<=num; ++i ) {\n            currTime+=1;\n            cleanUpNeeded |= currTime % rml::internal::cacheCleanupFreq == 0;\n            if ( objects.empty() )\n                cacheBinModel.oldest = currTime;\n            objects.push_back(currTime);\n        }\n\n        cacheBinModel.cachedSize += num*size;\n\n        if ( cleanUpNeeded ) doCleanup();\n    }\n\n    void check() {\n        ASSERT(cacheBinModel.oldest == cacheBin.oldest, ASSERT_TEXT);\n        ASSERT(cacheBinModel.lastCleanedAge == cacheBin.lastCleanedAge, ASSERT_TEXT);\n        ASSERT(cacheBinModel.ageThreshold == cacheBin.ageThreshold, ASSERT_TEXT);\n        ASSERT(cacheBinModel.usedSize == cacheBin.usedSize, ASSERT_TEXT);\n        ASSERT(cacheBinModel.cachedSize == cacheBin.cachedSize, ASSERT_TEXT);\n        ASSERT(cacheBinModel.meanHitRange == cacheBin.meanHitRange, ASSERT_TEXT);\n        ASSERT(cacheBinModel.lastGet == cacheBin.lastGet, ASSERT_TEXT);\n    }\n\n    static uintptr_t cacheCurrTime;\n    static intptr_t tooLargeLOC;\n};\n\ntemplate<typename Props> uintptr_t CacheBinModel<Props>::cacheCurrTime;\ntemplate<typename Props> intptr_t CacheBinModel<Props>::tooLargeLOC;\n\ntemplate <typename Scenarion>\nvoid LOCModelTester() {\n    defaultMemPool->extMemPool.loc.cleanAll();\n    defaultMemPool->extMemPool.loc.reset();\n\n    const size_t size = 16 * 1024;\n    const size_t headersSize = sizeof(rml::internal::LargeMemoryBlock)+sizeof(rml::internal::LargeObjectHdr);\n    const size_t allocationSize = LargeObjectCache::alignToBin(size+headersSize+rml::internal::largeObjectAlignment);\n    const int binIdx = defaultMemPool->extMemPool.loc.largeCache.sizeToIdx( allocationSize );\n\n    CacheBinModel<rml::internal::LargeObjectCache::LargeCacheTypeProps>::cacheCurrTime = defaultMemPool->extMemPool.loc.cacheCurrTime;\n    CacheBinModel<rml::internal::LargeObjectCache::LargeCacheTypeProps>::tooLargeLOC = defaultMemPool->extMemPool.loc.largeCache.tooLargeLOC;\n    CacheBinModel<rml::internal::LargeObjectCache::LargeCacheTypeProps> cacheBinModel(defaultMemPool->extMemPool.loc.largeCache.bin[binIdx], allocationSize);\n\n    Scenarion scen;\n    for (rml::internal::LargeMemoryBlock *lmb = scen.next(); (intptr_t)lmb != (intptr_t)-1; lmb = scen.next()) {\n        if ( lmb ) {\n            int num=1;\n            for (rml::internal::LargeMemoryBlock *curr = lmb; curr->next; curr=curr->next) num+=1;\n            defaultMemPool->extMemPool.freeLargeObject(lmb);\n            cacheBinModel.putList(num);\n        } else {\n            scen.saveLmb(defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize));\n            cacheBinModel.get();\n        }\n\n        cacheBinModel.check();\n    }\n}\n\nclass TestBootstrap {\n    bool allocating;\n    std::vector<rml::internal::LargeMemoryBlock*> lmbArray;\npublic:\n    TestBootstrap() : allocating(true) {}\n\n    rml::internal::LargeMemoryBlock* next() {\n        if ( allocating )\n            return NULL;\n        if ( !lmbArray.empty() ) {\n            rml::internal::LargeMemoryBlock *ret = lmbArray.back();\n            lmbArray.pop_back();\n            return ret;\n        }\n        return (rml::internal::LargeMemoryBlock*)-1;\n    }\n\n    void saveLmb( rml::internal::LargeMemoryBlock *lmb ) {\n        lmb->next = NULL;\n        lmbArray.push_back(lmb);\n        if ( lmbArray.size() == 1000 ) allocating = false;\n    }\n};\n\nclass TestRandom {\n    std::vector<rml::internal::LargeMemoryBlock*> lmbArray;\n    int numOps;\npublic:\n    TestRandom() : numOps(100000) {\n        srand(1234);\n    }\n\n    rml::internal::LargeMemoryBlock* next() {\n        if ( numOps-- ) {\n            if ( lmbArray.empty() || rand() / (RAND_MAX>>1) == 0 )\n                return NULL;\n            size_t ind = rand()%lmbArray.size();\n            if ( ind != lmbArray.size()-1 ) std::swap(lmbArray[ind],lmbArray[lmbArray.size()-1]);\n            rml::internal::LargeMemoryBlock *lmb = lmbArray.back();\n            lmbArray.pop_back();\n            return lmb;\n        }\n        return (rml::internal::LargeMemoryBlock*)-1;\n    }\n\n    void saveLmb( rml::internal::LargeMemoryBlock *lmb ) {\n        lmb->next = NULL;\n        lmbArray.push_back(lmb);\n    }\n};\n\nclass TestCollapsingMallocFree : public SimpleBarrier {\npublic:\n    static const int NUM_ALLOCS = 100000;\n    const int num_threads;\n\n    TestCollapsingMallocFree( int _num_threads ) : num_threads(_num_threads) {\n        initBarrier( num_threads );\n    }\n\n    void operator() ( int ) const {\n        const size_t size = 16 * 1024;\n        const size_t headersSize = sizeof(rml::internal::LargeMemoryBlock)+sizeof(rml::internal::LargeObjectHdr);\n        const size_t allocationSize = LargeObjectCache::alignToBin(size+headersSize+rml::internal::largeObjectAlignment);\n\n        barrier.wait();\n        for ( int i=0; i<NUM_ALLOCS; ++i ) {\n            defaultMemPool->extMemPool.freeLargeObject(\n                defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize) );\n        }\n    }\n\n    void check() {\n        ASSERT( tbbmalloc_whitebox::locGetProcessed == tbbmalloc_whitebox::locPutProcessed, ASSERT_TEXT );\n        ASSERT( tbbmalloc_whitebox::locGetProcessed < num_threads*NUM_ALLOCS, \"No one Malloc/Free pair was collapsed.\" );\n    }\n};\n\nclass TestCollapsingBootstrap : public SimpleBarrier {\n    class CheckNumAllocs {\n        const int num_threads;\n    public:\n        CheckNumAllocs( int _num_threads ) : num_threads(_num_threads) {}\n        void operator()() const {\n            ASSERT( tbbmalloc_whitebox::locGetProcessed == num_threads*NUM_ALLOCS, ASSERT_TEXT );\n            ASSERT( tbbmalloc_whitebox::locPutProcessed == 0, ASSERT_TEXT );\n        }\n    };\npublic:\n    static const int NUM_ALLOCS = 1000;\n    const int num_threads;\n\n    TestCollapsingBootstrap( int _num_threads ) : num_threads(_num_threads) {\n        initBarrier( num_threads );\n    }\n\n    void operator() ( int ) const {\n        const size_t size = 16 * 1024;\n        size_t headersSize = sizeof(rml::internal::LargeMemoryBlock)+sizeof(rml::internal::LargeObjectHdr);\n        size_t allocationSize = LargeObjectCache::alignToBin(size+headersSize+rml::internal::largeObjectAlignment);\n\n        barrier.wait();\n        rml::internal::LargeMemoryBlock *lmbArray[NUM_ALLOCS];\n        for ( int i=0; i<NUM_ALLOCS; ++i )\n            lmbArray[i] = defaultMemPool->extMemPool.mallocLargeObject(defaultMemPool, allocationSize);\n\n        barrier.wait(CheckNumAllocs(num_threads));\n        for ( int i=0; i<NUM_ALLOCS; ++i )\n            defaultMemPool->extMemPool.freeLargeObject( lmbArray[i] );\n    }\n\n    void check() {\n        ASSERT( tbbmalloc_whitebox::locGetProcessed == tbbmalloc_whitebox::locPutProcessed, ASSERT_TEXT );\n        ASSERT( tbbmalloc_whitebox::locGetProcessed == num_threads*NUM_ALLOCS, ASSERT_TEXT );\n    }\n};\n\ntemplate <typename Scenario>\nvoid LOCCollapsingTester( int num_threads ) {\n    tbbmalloc_whitebox::locGetProcessed = 0;\n    tbbmalloc_whitebox::locPutProcessed = 0;\n    defaultMemPool->extMemPool.loc.cleanAll();\n    defaultMemPool->extMemPool.loc.reset();\n\n    Scenario scen(num_threads);\n    NativeParallelFor(num_threads, scen);\n\n    scen.check();\n}\n\nvoid TestLOC() {\n    LOCModelTester<TestBootstrap>();\n    LOCModelTester<TestRandom>();\n\n    const int num_threads = 16;\n    LOCCollapsingTester<TestCollapsingBootstrap>( num_threads );\n    if ( num_threads > 1 ) {\n        REMARK( \"num_threads = %d\\n\", num_threads );\n        LOCCollapsingTester<TestCollapsingMallocFree>( num_threads );\n    } else {\n        REPORT( \"Warning: concurrency is too low for TestMallocFreeCollapsing ( num_threads = %d )\\n\", num_threads );\n    }\n}\n/*---------------------------------------------------------------------------*/\n\nvoid *findCacheLine(void *p) {\n    return (void*)alignDown((uintptr_t)p, estimatedCacheLineSize);\n}\n\n// test that internals of Block are at expected cache lines\nvoid TestSlabAlignment() {\n    const size_t min_sz = 8;\n    const int space = 2*16*1024; // fill at least 2 slabs\n    void *pointers[space / min_sz];  // the worst case is min_sz byte object\n\n    for (size_t sz = min_sz; sz <= 64; sz *= 2) {\n        for (size_t i = 0; i < space/sz; i++) {\n            pointers[i] = scalable_malloc(sz);\n            Block *block = (Block *)alignDown(pointers[i], slabSize);\n            MALLOC_ASSERT(findCacheLine(&block->isFull) != findCacheLine(pointers[i]),\n                          \"A user object must not share a cache line with slab control structures.\");\n            MALLOC_ASSERT(findCacheLine(&block->next) != findCacheLine(&block->nextPrivatizable),\n                          \"GlobalBlockFields and LocalBlockFields must be on different cache lines.\");\n        }\n        for (size_t i = 0; i < space/sz; i++)\n            scalable_free(pointers[i]);\n    }\n}\n\n#include \"harness.h\"\n#include \"harness_memory.h\"\n\n// TODO: Consider adding Huge Pages support on macOS (special mmap flag).\n// Transparent Huge pages support could be enabled by different system parsing mechanism,\n// because there is no /proc/meminfo on macOS\n#if __linux__\nvoid TestTHP() {\n    // Get backend from default memory pool\n    rml::internal::Backend *backend = &(defaultMemPool->extMemPool.backend);\n\n    // Configure malloc to use huge pages\n    scalable_allocation_mode(USE_HUGE_PAGES, 1);\n    MALLOC_ASSERT(hugePages.isEnabled, \"Huge pages should be enabled via scalable_allocation_mode\");\n\n    const int HUGE_PAGE_SIZE = 2 * 1024 * 1024;\n\n    // allocCount transparent huge pages should be allocated\n    const int allocCount = 10;\n\n    // Allocate huge page aligned memory regions to track system\n    // counters for transparent huge pages\n    void*  allocPtrs[allocCount];\n\n    // Wait for the system to update process memory info files after other tests\n    Harness::Sleep(4000);\n\n    // Parse system info regarding current THP status\n    size_t currentSystemTHPCount = getSystemTHPCount();\n    size_t currentSystemTHPAllocatedSize = getSystemTHPAllocatedSize();\n\n    for (int i = 0; i < allocCount; i++) {\n        // Allocation size have to be aligned on page size\n        size_t allocSize = HUGE_PAGE_SIZE - (i * 1000);\n\n        // Map memory\n        allocPtrs[i] = backend->allocRawMem(allocSize);\n\n        MALLOC_ASSERT(allocPtrs[i], \"Allocation not succeded.\");\n        MALLOC_ASSERT(allocSize == HUGE_PAGE_SIZE,\n            \"Allocation size have to be aligned on Huge Page size internaly.\");\n\n        // First touch policy - no real pages allocated by OS without accessing the region\n        memset(allocPtrs[i], 1, allocSize);\n\n        MALLOC_ASSERT(isAligned(allocPtrs[i], HUGE_PAGE_SIZE),\n            \"The pointer returned by scalable_malloc is not alligned on huge page size.\");\n    }\n\n    // Wait for the system to update process memory info files after allocations\n    Harness::Sleep(4000);\n\n    // Generaly, kernel tries to allocate transparent huge pages, but sometimes it cannot do this\n    // (tested on SLES 11/12), so consider this system info checks as a remark.\n    // Also, some systems can allocate more memory then needed in background (tested on Ubuntu 14.04)\n    size_t newSystemTHPCount = getSystemTHPCount();\n    size_t newSystemTHPAllocatedSize = getSystemTHPAllocatedSize();\n    if ((newSystemTHPCount - currentSystemTHPCount) < allocCount\n            && (newSystemTHPAllocatedSize - currentSystemTHPAllocatedSize) / (2 * 1024) < allocCount) {\n        REPORT( \"Warning: the system didn't allocate needed amount of THPs.\\n\" );\n    } \n\n    // Test memory unmap\n    for (int i = 0; i < allocCount; i++) {\n        MALLOC_ASSERT(backend->freeRawMem(allocPtrs[i], HUGE_PAGE_SIZE),\n                \"Something went wrong during raw memory free\");\n    }\n}\n#endif // __linux__\n\nint TestMain () {\n    scalable_allocation_mode(USE_HUGE_PAGES, 0);\n#if !__TBB_WIN8UI_SUPPORT\n    Harness::SetEnv(\"TBB_MALLOC_USE_HUGE_PAGES\",\"yes\");\n#endif\n    checkNoHugePages();\n    // backreference requires that initialization was done\n    if(!isMallocInitialized()) doInitialization();\n    checkNoHugePages();\n    // to succeed, leak detection must be the 1st memory-intensive test\n    TestBackRef();\n    TestCleanAllBuffers<4*1024>();\n    TestCleanAllBuffers<16*1024>();\n    TestPools();\n    TestBackend();\n\n#if MALLOC_CHECK_RECURSION\n    for( int p=MaxThread; p>=MinThread; --p ) {\n        TestStartupAlloc::initBarrier( p );\n        NativeParallelFor( p, TestStartupAlloc() );\n        ASSERT(!firstStartupBlock, \"Startup heap memory leak detected\");\n    }\n#endif\n\n    TestLargeObjectCache();\n    TestObjectRecognition();\n    TestBitMask();\n    TestHeapLimit();\n    TestLOC();\n    TestSlabAlignment();\n\n#if __linux__\n    if (isTHPEnabledOnMachine()) {\n        TestTHP();\n    } else {\n        REMARK(\"Transparent Huge Pages is not supported on the system - skipped the test\\n\");\n    }\n#endif\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_model_plugin.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 4\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n// Need to include \"tbb/tbb_config.h\" to obtain the definition of __TBB_DEFINE_MIC.\n#include \"tbb/tbb_config.h\"\n\n#if !__TBB_TODO || __TBB_WIN8UI_SUPPORT\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\nint TestMain() {\n    return Harness::Skipped;\n}\n#else /* __TBB_TODO */\n// TODO: There are a lot of problems with unloading DLL which uses TBB with automatic initialization\n\n#if __TBB_DEFINE_MIC\n\n#ifndef _USRDLL\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\nint TestMain() {\n    return Harness::Skipped;\n}\n#endif\n\n#else /* !__MIC__ */\n\n#if _WIN32 || _WIN64\n#include \"tbb/machine/windows_api.h\"\n#else\n#include <dlfcn.h>\n#endif\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdexcept>\n\n#if TBB_USE_EXCEPTIONS\n    #include \"harness_report.h\"\n#endif\n\n#ifdef _USRDLL\n#include \"tbb/task_scheduler_init.h\"\n\nclass CModel {\npublic:\n    CModel(void) {};\n    static tbb::task_scheduler_init tbb_init;\n\n    void init_and_terminate( int );\n};\n\ntbb::task_scheduler_init CModel::tbb_init(1);\n\n//! Test that task::initialize and task::terminate work when doing nothing else.\n/** maxthread is treated as the \"maximum\" number of worker threads. */\nvoid CModel::init_and_terminate( int maxthread ) {\n    for( int i=0; i<200; ++i ) {\n        switch( i&3 ) {\n            default: {\n                tbb::task_scheduler_init init( rand() % maxthread + 1 );\n                break;\n            }\n            case 0: {\n                tbb::task_scheduler_init init;\n                break;\n            }\n            case 1: {\n                tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );\n                break;\n            }\n            case 2: {\n                tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );\n                init.initialize( rand() % maxthread + 1 );\n                init.terminate();\n                break;\n            }\n        }\n    }\n}\n\nextern \"C\"\n#if _WIN32 || _WIN64\n__declspec(dllexport)\n#endif\nvoid plugin_call(int maxthread)\n{\n    srand(2);\n    __TBB_TRY {\n        CModel model;\n        model.init_and_terminate(maxthread);\n    } __TBB_CATCH( std::runtime_error& error ) {\n#if TBB_USE_EXCEPTIONS\n        REPORT(\"ERROR: %s\\n\", error.what());\n#endif /* TBB_USE_EXCEPTIONS */\n    }\n}\n\n#else /* _USRDLL undefined */\n\n#include \"harness.h\"\n#include \"harness_dynamic_libs.h\"\n#include \"harness_tls.h\"\n\nextern \"C\" void plugin_call(int);\n\nvoid report_error_in(const char* function_name)\n{\n#if _WIN32 || _WIN64\n    char* message;\n    int code = GetLastError();\n\n    FormatMessage(\n        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,\n        NULL, code,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n        (char*)&message, 0, NULL );\n#else\n    char* message = (char*)dlerror();\n    int code = 0;\n#endif\n    REPORT( \"%s failed with error %d: %s\\n\", function_name, code, message);\n\n#if _WIN32 || _WIN64\n    LocalFree(message);\n#endif\n}\n\ntypedef void (*PLUGIN_CALL)(int);\n\n#if __linux__\n    #define RML_LIBRARY_NAME(base) TEST_LIBRARY_NAME(base) \".1\"\n#else\n    #define RML_LIBRARY_NAME(base) TEST_LIBRARY_NAME(base)\n#endif\n\nint TestMain () {\n#if !RML_USE_WCRM\n    PLUGIN_CALL my_plugin_call;\n\n    LimitTLSKeysTo limitTLS(10);\n\n    Harness::LIBRARY_HANDLE hLib;\n#if _WIN32 || _WIN64\n    hLib = LoadLibrary(\"irml.dll\");\n    if ( !hLib )\n        hLib = LoadLibrary(\"irml_debug.dll\");\n    if ( !hLib )\n        return Harness::Skipped; // No shared RML, skip the test\n    FreeLibrary(hLib);\n#else /* !WIN */\n#if __TBB_ARENA_PER_MASTER\n    hLib = dlopen(RML_LIBRARY_NAME(\"libirml\"), RTLD_LAZY);\n    if ( !hLib )\n        hLib = dlopen(RML_LIBRARY_NAME(\"libirml_debug\"), RTLD_LAZY);\n    if ( !hLib )\n        return Harness::Skipped;\n    dlclose(hLib);\n#endif /* __TBB_ARENA_PER_MASTER */\n#endif /* OS */\n    for( int i=1; i<100; ++i ) {  \n        REMARK(\"Iteration %d, loading plugin library...\\n\", i);\n        hLib = Harness::OpenLibrary(TEST_LIBRARY_NAME(\"test_model_plugin_dll\"));\n        if ( !hLib ) {\n#if !__TBB_NO_IMPLICIT_LINKAGE\n#if _WIN32 || _WIN64\n            report_error_in(\"LoadLibrary\");\n#else\n            report_error_in(\"dlopen\");\n#endif\n            return -1;\n#else\n            return Harness::Skipped;\n#endif\n        }\n        my_plugin_call = (PLUGIN_CALL)Harness::GetAddress(hLib, \"plugin_call\");\n        if (my_plugin_call==NULL) {\n#if _WIN32 || _WIN64\n            report_error_in(\"GetProcAddress\");\n#else\n            report_error_in(\"dlsym\");\n#endif\n            return -1;\n        }\n        REMARK(\"Calling plugin method...\\n\");\n        my_plugin_call(MaxThread);\n\n        REMARK(\"Unloading plugin library...\\n\");\n        Harness::CloseLibrary(hLib);\n    } // end for(1,100)\n\n    return Harness::Done;\n#else\n    return Harness::Skipped;\n#endif /* !RML_USE_WCRM */\n}\n\n#endif//_USRDLL\n#endif//__MIC__\n\n#endif /*__TBB_WIN8UI_SUPPORT*/\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_multifunction_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_graph.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/spin_rw_mutex.h\"\n\n#if TBB_USE_DEBUG\n#define N 16\n#else\n#define N 100\n#endif\n#define MAX_NODES 4\n\n//! Performs test on function nodes with limited concurrency and buffering\n/** Theses tests check:\n    1) that the number of executing copies never exceed the concurrency limit\n    2) that the node never rejects\n    3) that no items are lost\n    and 4) all of this happens even if there are multiple predecessors and successors\n*/\n\ntemplate< typename InputType >\nstruct parallel_put_until_limit : private NoAssign {\n\n    harness_counting_sender<InputType> *my_senders;\n\n    parallel_put_until_limit( harness_counting_sender<InputType> *senders ) : my_senders(senders) {}\n\n    void operator()( int i ) const  {\n        if ( my_senders ) {\n            my_senders[i].try_put_until_limit();\n        }\n    }\n\n};\n\n//! exercise buffered multifunction_node.\ntemplate< typename InputType, typename OutputTuple, typename Body >\nvoid buffered_levels( size_t concurrency, Body body ) {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;\n    // Do for lc = 1 to concurrency level\n    for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n        tbb::flow::graph g;\n\n        // Set the execute_counter back to zero in the harness\n        harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count = 0;\n        // Set the number of current executors to zero.\n        harness_graph_multifunction_executor<InputType, OutputTuple>::current_executors = 0;\n        // Set the max allowed executors to lc.  There is a check in the functor to make sure this is never exceeded.\n        harness_graph_multifunction_executor<InputType, OutputTuple>::max_executors = lc;\n\n        // Create the function_node with the appropriate concurrency level, and use default buffering\n        tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, body );\n\n        //Create a vector of identical exe_nodes\n        std::vector< tbb::flow::multifunction_node< InputType, OutputTuple > > exe_vec(2, exe_node);\n\n        // exercise each of the copied nodes\n        for (size_t node_idx=0; node_idx<exe_vec.size(); ++node_idx) {\n            for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n                // Create num_receivers counting receivers and connect the exe_vec[node_idx] to them.\n                std::vector< harness_mapped_receiver<OutputType>* > receivers(num_receivers);\n                for (size_t i = 0; i < num_receivers; i++) {\n                    receivers[i] = new harness_mapped_receiver<OutputType>(g);\n                }\n\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    tbb::flow::make_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), *receivers[r] );\n                }\n\n                // Do the test with varying numbers of senders\n                harness_counting_sender<InputType> *senders = NULL;\n                for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n                    // Create num_senders senders, set their message limit each to N, and connect them to the exe_vec[node_idx]\n                    senders = new harness_counting_sender<InputType>[num_senders];\n                    for (size_t s = 0; s < num_senders; ++s ) {\n                        senders[s].my_limit = N;\n                        tbb::flow::make_edge( senders[s], exe_vec[node_idx] );\n                    }\n\n                    // Initialize the receivers so they know how many senders and messages to check for\n                    for (size_t r = 0; r < num_receivers; ++r ) {\n                         receivers[r]->initialize_map( N, num_senders );\n                    }\n\n                    // Do the test\n                    NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );\n                    g.wait_for_all();\n\n                    // confirm that each sender was requested from N times\n                    for (size_t s = 0; s < num_senders; ++s ) {\n                        size_t n = senders[s].my_received;\n                        ASSERT( n == N, NULL );\n                        ASSERT( senders[s].my_receiver == &exe_vec[node_idx], NULL );\n                    }\n                    // validate the receivers\n                    for (size_t r = 0; r < num_receivers; ++r ) {\n                        receivers[r]->validate();\n                    }\n                    delete [] senders;\n                }\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), *receivers[r] );\n                }\n                ASSERT( exe_vec[node_idx].try_put( InputType() ) == true, NULL );\n                g.wait_for_all();\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    // since it's detached, nothing should have changed\n                    receivers[r]->validate();\n                }\n\n                for (size_t i = 0; i < num_receivers; i++) {\n                    delete receivers[i];\n                }\n            }\n        }\n    }\n}\n\nconst size_t Offset = 123;\ntbb::atomic<size_t> global_execute_count;\n\nstruct inc_functor {\n\n    tbb::atomic<size_t> local_execute_count;\n    inc_functor( ) { local_execute_count = 0; }\n    inc_functor( const inc_functor &f ) { local_execute_count = f.local_execute_count; }\n\n    template<typename output_ports_type>\n    void operator()( int i, output_ports_type &p ) {\n       ++global_execute_count;\n       ++local_execute_count;\n       (void)tbb::flow::get<0>(p).try_put(i);\n    }\n\n};\n\ntemplate< typename InputType, typename OutputTuple >\nvoid buffered_levels_with_copy( size_t concurrency ) {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;\n    // Do for lc = 1 to concurrency level\n    for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n        tbb::flow::graph g;\n\n        inc_functor cf;\n        cf.local_execute_count = Offset;\n        global_execute_count = Offset;\n\n        tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, cf );\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n\n            std::vector< harness_mapped_receiver<OutputType>* > receivers(num_receivers);\n            for (size_t i = 0; i < num_receivers; i++) {\n                receivers[i] = new harness_mapped_receiver<OutputType>(g);\n            }\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n               tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), *receivers[r] );\n            }\n\n            harness_counting_sender<InputType> *senders = NULL;\n            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n                senders = new harness_counting_sender<InputType>[num_senders];\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    senders[s].my_limit = N;\n                    tbb::flow::make_edge( senders[s], exe_node );\n                }\n\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    receivers[r]->initialize_map( N, num_senders );\n                }\n\n                NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );\n                g.wait_for_all();\n\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    size_t n = senders[s].my_received;\n                    ASSERT( n == N, NULL );\n                    ASSERT( senders[s].my_receiver == &exe_node, NULL );\n                }\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    receivers[r]->validate();\n                }\n                delete [] senders;\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), *receivers[r] );\n            }\n            ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n            g.wait_for_all();\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                receivers[r]->validate();\n            }\n\n            for (size_t i = 0; i < num_receivers; i++) {\n                delete receivers[i];\n            }\n        }\n\n        // validate that the local body matches the global execute_count and both are correct\n        inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );\n        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset;\n        size_t global_count = global_execute_count;\n        size_t inc_count = body_copy.local_execute_count;\n        ASSERT( global_count == expected_count && global_count == inc_count, NULL );\n    }\n}\n\ntemplate< typename InputType, typename OutputTuple >\nvoid run_buffered_levels( int c ) {\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;\n    buffered_levels<InputType,OutputTuple>( c, []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple>::func(i,p); } );\n    #endif\n    buffered_levels<InputType,OutputTuple>( c, &harness_graph_multifunction_executor<InputType, OutputTuple>::func );\n    buffered_levels<InputType,OutputTuple>( c, typename harness_graph_multifunction_executor<InputType, OutputTuple>::functor() );\n    buffered_levels_with_copy<InputType,OutputTuple>( c );\n}\n\n\n//! Performs test on executable nodes with limited concurrency\n/** Theses tests check:\n    1) that the nodes will accepts puts up to the concurrency limit,\n    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor),\n    3) the nodes will receive puts from multiple successors simultaneously,\n    and 4) the nodes will send to multiple predecessors.\n    There is no checking of the contents of the messages for corruption.\n*/\n\ntemplate< typename InputType, typename OutputTuple, typename Body >\nvoid concurrency_levels( size_t concurrency, Body body ) {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;\n    for ( size_t lc = 1; lc <= concurrency; ++lc ) {\n        tbb::flow::graph g;\n\n        // Set the execute_counter back to zero in the harness\n        harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count = 0;\n        // Set the number of current executors to zero.\n        harness_graph_multifunction_executor<InputType, OutputTuple>::current_executors = 0;\n        // Set the max allowed executors to lc.  There is a check in the functor to make sure this is never exceeded.\n        harness_graph_multifunction_executor<InputType, OutputTuple>::max_executors = lc;\n\n\n        tbb::flow::multifunction_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, lc, body );\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n\n            std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );\n            }\n\n            harness_counting_sender<InputType> *senders = NULL;\n\n            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {\n                {\n                    // Exclusively lock m to prevent exe_node from finishing\n                    tbb::spin_rw_mutex::scoped_lock l( harness_graph_multifunction_executor< InputType, OutputTuple>::template mutex_holder<tbb::spin_rw_mutex>::mutex );\n\n                    // put to lc level, it will accept and then block at m\n                    for ( size_t c = 0 ; c < lc ; ++c ) {\n                        ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n                    }\n                    // it only accepts to lc level\n                    ASSERT( exe_node.try_put( InputType() ) == false, NULL );\n\n                    senders = new harness_counting_sender<InputType>[num_senders];\n                    for (size_t s = 0; s < num_senders; ++s ) {\n                       // register a sender\n                       senders[s].my_limit = N;\n                       exe_node.register_predecessor( senders[s] );\n                    }\n\n                } // release lock at end of scope, setting the exe node free to continue\n                // wait for graph to settle down\n                g.wait_for_all();\n\n                // confirm that each sender was requested from N times\n                for (size_t s = 0; s < num_senders; ++s ) {\n                    size_t n = senders[s].my_received;\n                    ASSERT( n == N, NULL );\n                    ASSERT( senders[s].my_receiver == &exe_node, NULL );\n                }\n                // confirm that each receivers got N * num_senders + the initial lc puts\n                for (size_t r = 0; r < num_receivers; ++r ) {\n                    size_t n = receivers[r].my_count;\n                    ASSERT( n == num_senders*N+lc, NULL );\n                    receivers[r].my_count = 0;\n                }\n                delete [] senders;\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );\n            }\n            ASSERT( exe_node.try_put( InputType() ) == true, NULL );\n            g.wait_for_all();\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                ASSERT( int(receivers[r].my_count) == 0, NULL );\n            }\n        }\n    }\n}\n\ntemplate< typename InputType, typename OutputTuple >\nvoid run_concurrency_levels( int c ) {\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;\n    concurrency_levels<InputType,OutputTuple>( c, []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple>::template tfunc<tbb::spin_rw_mutex>(i,p); } );\n    #endif\n    concurrency_levels<InputType,OutputTuple>( c, &harness_graph_multifunction_executor<InputType, OutputTuple>::template tfunc<tbb::spin_rw_mutex> );\n    concurrency_levels<InputType,OutputTuple>( c, typename harness_graph_multifunction_executor<InputType, OutputTuple>::template tfunctor<tbb::spin_rw_mutex>() );\n}\n\n\nstruct empty_no_assign {\n   empty_no_assign() {}\n   empty_no_assign( int ) {}\n   operator int() { return 0; }\n   operator int() const { return 0; }\n};\n\ntemplate< typename InputType >\nstruct parallel_puts : private NoAssign {\n\n    tbb::flow::receiver< InputType > * const my_exe_node;\n\n    parallel_puts( tbb::flow::receiver< InputType > &exe_node ) : my_exe_node(&exe_node) {}\n\n    void operator()( int ) const  {\n        for ( int i = 0; i < N; ++i ) {\n            // the nodes will accept all puts\n            ASSERT( my_exe_node->try_put( InputType() ) == true, NULL );\n        }\n    }\n\n};\n\n//! Performs test on executable nodes with unlimited concurrency\n/** These tests check:\n    1) that the nodes will accept all puts\n    2) the nodes will receive puts from multiple predecessors simultaneously,\n    and 3) the nodes will send to multiple successors.\n    There is no checking of the contents of the messages for corruption.\n*/\n\ntemplate< typename InputType, typename OutputTuple, typename Body >\nvoid unlimited_concurrency( Body body ) {\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type OutputType;\n\n    for (int p = 1; p < 2*MaxThread; ++p) {\n        tbb::flow::graph g;\n        tbb::flow::multifunction_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, tbb::flow::unlimited, body );\n\n        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {\n            std::vector< harness_counting_receiver<OutputType> > receivers(num_receivers, harness_counting_receiver<OutputType>(g));\n\n            harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count = 0;\n\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );\n            }\n\n            NativeParallelFor( p, parallel_puts<InputType>(exe_node) );\n            g.wait_for_all();\n\n            // 2) the nodes will receive puts from multiple predecessors simultaneously,\n            size_t ec = harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count;\n            ASSERT( (int)ec == p*N, NULL );\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                size_t c = receivers[r].my_count;\n                // 3) the nodes will send to multiple successors.\n                ASSERT( (int)c == p*N, NULL );\n            }\n            for (size_t r = 0; r < num_receivers; ++r ) {\n                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );\n            }\n        }\n    }\n}\n\ntemplate< typename InputType, typename OutputTuple >\nvoid run_unlimited_concurrency() {\n    harness_graph_multifunction_executor<InputType, OutputTuple>::max_executors = 0;\n    #if __TBB_CPP11_LAMBDAS_PRESENT\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;\n    unlimited_concurrency<InputType,OutputTuple>( []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple>::func(i,p); } );\n    #endif\n    unlimited_concurrency<InputType,OutputTuple>( &harness_graph_multifunction_executor<InputType, OutputTuple>::func );\n    unlimited_concurrency<InputType,OutputTuple>( typename harness_graph_multifunction_executor<InputType, OutputTuple>::functor() );\n}\n\ntemplate<typename InputType, typename OutputTuple>\nstruct oddEvenBody {\n    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type EvenType;\n    typedef typename tbb::flow::tuple_element<1,OutputTuple>::type OddType;\n    void operator() (const InputType &i, output_ports_type &p) {\n        if((int)i % 2) {\n            (void)tbb::flow::get<1>(p).try_put(OddType(i));\n        }\n        else {\n            (void)tbb::flow::get<0>(p).try_put(EvenType(i));\n        }\n    }\n};\n\ntemplate<typename InputType, typename OutputTuple >\nvoid run_multiport_test(int num_threads) {\n    typedef typename tbb::flow::multifunction_node<InputType, OutputTuple> mo_node_type;\n    typedef typename tbb::flow::tuple_element<0,OutputTuple>::type EvenType;\n    typedef typename tbb::flow::tuple_element<1,OutputTuple>::type OddType;\n    tbb::task_scheduler_init init(num_threads);\n    tbb::flow::graph g;\n    mo_node_type mo_node(g, tbb::flow::unlimited, oddEvenBody<InputType, OutputTuple>() );\n\n    tbb::flow::queue_node<EvenType> q0(g);\n    tbb::flow::queue_node<OddType> q1(g);\n\n    tbb::flow::make_edge(tbb::flow::output_port<0>(mo_node), q0);\n    tbb::flow::make_edge(tbb::flow::output_port<1>(mo_node), q1);\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    ASSERT(mo_node.predecessor_count() == 0, NULL);\n    ASSERT(tbb::flow::output_port<0>(mo_node).successor_count() == 1, NULL);\n    typedef typename mo_node_type::output_ports_type oports_type;\n    typedef typename tbb::flow::tuple_element<0,oports_type>::type port0_type;\n    typename port0_type::successor_list_type my_0succs;\n    tbb::flow::output_port<0>(mo_node).copy_successors(my_0succs);\n    ASSERT(my_0succs.size() == 1, NULL);\n    typename mo_node_type::predecessor_list_type my_preds;\n    mo_node.copy_predecessors(my_preds);\n    ASSERT(my_preds.size() == 0, NULL);\n#endif\n\n    for(InputType i = 0; i < N; ++i) {\n        mo_node.try_put(i);\n    }\n\n    g.wait_for_all();\n    for(int i = 0; i < N/2; ++i) {\n        EvenType e;\n        OddType o;\n        ASSERT(q0.try_get(e) && (int)e % 2 == 0, NULL);\n        ASSERT(q1.try_get(o) && (int)o % 2 == 1, NULL);\n    }\n}\n\n//! Tests limited concurrency cases for nodes that accept data messages\nvoid test_concurrency(int num_threads) {\n    tbb::task_scheduler_init init(num_threads);\n    run_concurrency_levels<int,tbb::flow::tuple<int> >(num_threads);\n    run_concurrency_levels<int,tbb::flow::tuple<tbb::flow::continue_msg> >(num_threads);\n    run_buffered_levels<int, tbb::flow::tuple<int> >(num_threads);\n    run_unlimited_concurrency<int, tbb::flow::tuple<int> >();\n    run_unlimited_concurrency<int,tbb::flow::tuple<empty_no_assign> >();\n    run_unlimited_concurrency<empty_no_assign,tbb::flow::tuple<int> >();\n    run_unlimited_concurrency<empty_no_assign,tbb::flow::tuple<empty_no_assign> >();\n    run_unlimited_concurrency<int,tbb::flow::tuple<tbb::flow::continue_msg> >();\n    run_unlimited_concurrency<empty_no_assign,tbb::flow::tuple<tbb::flow::continue_msg> >();\n    run_multiport_test<int, tbb::flow::tuple<int, int> >(num_threads);\n    run_multiport_test<float, tbb::flow::tuple<int, double> >(num_threads);\n}\n\ntemplate<typename Policy>\nvoid test_ports_return_references() {\n    tbb::flow::graph g;\n    typedef int InputType;\n    typedef tbb::flow::tuple<int> OutputTuple;\n    tbb::flow::multifunction_node<InputType, OutputTuple, Policy> mf_node(\n        g, tbb::flow::unlimited,\n        &harness_graph_multifunction_executor<InputType, OutputTuple>::empty_func );\n    test_output_ports_return_ref(mf_node);\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n// the integer received indicates which output ports should succeed and which should fail\n// on try_put().\ntypedef tbb::flow::multifunction_node<int, tbb::flow::tuple<int, int> > mf_node;\n\nstruct add_to_counter {\n    int my_invocations;\n    int *counter;\n    add_to_counter(int& var):counter(&var){ my_invocations = 0;}\n    void operator()(const int &i, mf_node::output_ports_type &outports) {\n        *counter+=1;\n        ++my_invocations;\n        if(i & 0x1) {\n            ASSERT(tbb::flow::get<0>(outports).try_put(i), \"port 0 expected to succeed\");\n        }\n        else {\n            ASSERT(!tbb::flow::get<0>(outports).try_put(i), \"port 0 expected to fail\");\n        }\n        if(i & 0x2) {\n            ASSERT(tbb::flow::get<1>(outports).try_put(i), \"port 1 expected to succeed\");\n        }\n        else {\n            ASSERT(!tbb::flow::get<1>(outports).try_put(i), \"port 1 expected to fail\");\n        }\n    }\n    int my_inner() { return my_invocations; }\n};\n\ntemplate<class FTYPE>\nvoid test_extract() {\n    int my_count = 0;\n    int cm;\n    tbb::flow::graph g;\n    tbb::flow::broadcast_node<int> b0(g);\n    tbb::flow::broadcast_node<int> b1(g);\n    tbb::flow::multifunction_node<int, tbb::flow::tuple<int,int>, FTYPE> mf0(g, tbb::flow::unlimited, add_to_counter(my_count));\n    tbb::flow::queue_node<int> q0(g);\n    tbb::flow::queue_node<int> q1(g);\n\n    tbb::flow::make_edge(b0, mf0);\n    tbb::flow::make_edge(b1, mf0);\n    tbb::flow::make_edge(tbb::flow::output_port<0>(mf0), q0);\n    tbb::flow::make_edge(tbb::flow::output_port<1>(mf0), q1);\n    for( int i = 0; i < 2; ++i ) {\n\n        /* b0          */\n        /*   \\   |--q0 */\n        /*    mf0+     */\n        /*   /   |--q1 */\n        /* b1          */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(mf0.predecessor_count() == 2\n                && tbb::flow::output_port<0>(mf0).successor_count() == 1\n                && tbb::flow::output_port<1>(mf0).successor_count() == 1\n                , \"mf0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        ASSERT(q1.predecessor_count() == 1 && q1.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(3);\n        g.wait_for_all();\n        ASSERT(my_count == 1, \"multifunction_node didn't fire\");\n        ASSERT(q0.try_get(cm), \"multifunction_node didn't forward to 0\");\n        ASSERT(q1.try_get(cm), \"multifunction_node didn't forward to 1\");\n        b1.try_put(3);\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"multifunction_node didn't fire\");\n        ASSERT(q0.try_get(cm), \"multifunction_node didn't forward to 0\");\n        ASSERT(q1.try_get(cm), \"multifunction_node didn't forward to 1\");\n\n        b0.extract();\n\n\n        /* b0          */\n        /*       |--q0 */\n        /*    mf0+     */\n        /*   /   |--q1 */\n        /* b1          */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(mf0.predecessor_count() == 1\n                && tbb::flow::output_port<0>(mf0).successor_count() == 1\n                && tbb::flow::output_port<1>(mf0).successor_count() == 1\n                , \"mf0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 1 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        ASSERT(q1.predecessor_count() == 1 && q1.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(1);\n        b0.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 2, \"b0 messages being forwarded to multifunction_node even though it is disconnected\");\n        b1.try_put(3);\n        g.wait_for_all();\n        ASSERT(my_count == 3, \"multifunction_node didn't fire though it has only one predecessor\");\n        ASSERT(q0.try_get(cm), \"multifunction_node didn't forward second time\");\n        ASSERT(q1.try_get(cm), \"multifunction_node didn't forward second time\");\n\n        q0.extract();\n\n        /* b0          */\n        /*       |  q0 */\n        /*    mf0+     */\n        /*   /   |--q1 */\n        /* b1          */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 1, \"b1 has incorrect counts\");\n        ASSERT(mf0.predecessor_count() == 1\n                && tbb::flow::output_port<0>(mf0).successor_count() == 0\n                && tbb::flow::output_port<1>(mf0).successor_count() == 1\n                , \"mf0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        ASSERT(q1.predecessor_count() == 1 && q1.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(1);\n        b0.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 3, \"b0 messages being forwarded to multifunction_node even though it is disconnected\");\n        b1.try_put(2);\n        g.wait_for_all();\n        ASSERT(my_count == 4, \"multifunction_node didn't fire though it has one predecessor\");\n        ASSERT(!q0.try_get(cm), \"multifunction_node forwarded\");\n        ASSERT(q1.try_get(cm), \"multifunction_node forwarded\");\n        mf0.extract();\n\n        if(i == 0) {\n        }\n        else {\n            g.reset(tbb::flow::rf_reset_bodies);\n        }\n\n\n        /* b0          */\n        /*       |  q0 */\n        /*    mf0+     */\n        /*       |  q1 */\n        /* b1          */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 0, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(mf0.predecessor_count() == 0\n                && tbb::flow::output_port<0>(mf0).successor_count() == 0\n                && tbb::flow::output_port<1>(mf0).successor_count() == 0\n                , \"mf0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        ASSERT(q1.predecessor_count() == 0 && q1.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(1);\n        b0.try_put(1);\n        g.wait_for_all();\n        ASSERT(my_count == 4, \"b0 messages being forwarded to multifunction_node even though it is disconnected\");\n        b1.try_put(2);\n        g.wait_for_all();\n        ASSERT(my_count == 4, \"b1 messages being forwarded to multifunction_node even though it is disconnected\");\n        ASSERT(!q0.try_get(cm), \"multifunction_node forwarded\");\n        ASSERT(!q1.try_get(cm), \"multifunction_node forwarded\");\n        make_edge(b0, mf0);\n\n        /* b0          */\n        /*   \\   |  q0 */\n        /*    mf0+     */\n        /*       |  q1 */\n        /* b1          */\n\n        ASSERT(b0.predecessor_count() == 0 && b0.successor_count() == 1, \"b0 has incorrect counts\");\n        ASSERT(b1.predecessor_count() == 0 && b1.successor_count() == 0, \"b1 has incorrect counts\");\n        ASSERT(mf0.predecessor_count() == 1\n                && tbb::flow::output_port<0>(mf0).successor_count() == 0\n                && tbb::flow::output_port<1>(mf0).successor_count() == 0\n                , \"mf0 has incorrect counts\");\n        ASSERT(q0.predecessor_count() == 0 && q0.successor_count() == 0, \"q0 has incorrect counts\");\n        ASSERT(q1.predecessor_count() == 0 && q1.successor_count() == 0, \"q0 has incorrect counts\");\n        b0.try_put(0);\n        g.wait_for_all();\n        ASSERT(my_count == 5, \"multifunction_node didn't fire though it has one predecessor\");\n        b1.try_put(2);\n        g.wait_for_all();\n        ASSERT(my_count == 5, \"multifunction_node fired though it has only one predecessor\");\n        ASSERT(!q0.try_get(cm), \"multifunction_node forwarded\");\n        ASSERT(!q1.try_get(cm), \"multifunction_node forwarded\");\n\n        tbb::flow::make_edge(b1, mf0);\n        tbb::flow::make_edge(tbb::flow::output_port<0>(mf0), q0);\n        tbb::flow::make_edge(tbb::flow::output_port<1>(mf0), q1);\n        ASSERT( ( i == 0 && tbb::flow::copy_body<add_to_counter>(mf0).my_inner() == 5 ) ||\n               ( i == 1 && tbb::flow::copy_body<add_to_counter>(mf0).my_inner() == 1 ) , \"reset_bodies failed\");\n        my_count = 0;\n    }\n}\n#endif\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n       test_concurrency(p);\n    }\n    test_ports_return_references<tbb::flow::queueing>();\n    test_ports_return_references<tbb::flow::rejecting>();\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    lightweight_testing::test<tbb::flow::multifunction_node>(10);\n#endif\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract<tbb::flow::rejecting>();\n    test_extract<tbb::flow::queueing>();\n#endif\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_mutex.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//------------------------------------------------------------------------\n// Test TBB mutexes when used with parallel_for.h\n//\n// Usage: test_Mutex.exe [-v] nthread\n//\n// The -v option causes timing information to be printed.\n//\n// Compile with _OPENMP and -openmp\n//------------------------------------------------------------------------\n#include \"harness_defs.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/critical_section.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/recursive_mutex.h\"\n#include \"tbb/null_mutex.h\"\n#include \"tbb/null_rw_mutex.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/atomic.h\"\n#include \"harness.h\"\n#include <cstdlib>\n#include <cstdio>\n#if _OPENMP\n#include \"test/OpenMP_Mutex.h\"\n#endif /* _OPENMP */\n#include \"tbb/tbb_profiling.h\"\n\n#ifndef TBB_TEST_LOW_WORKLOAD\n    #define TBB_TEST_LOW_WORKLOAD TBB_USE_THREADING_TOOLS\n#endif\n\n// This test deliberately avoids a \"using tbb\" statement,\n// so that the error of putting types in the wrong namespace will be caught.\n\ntemplate<typename M>\nstruct Counter {\n    typedef M mutex_type;\n    M mutex;\n    volatile long value;\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename C>\nstruct AddOne: NoAssign {\n    C& counter;\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            if( i&1 ) {\n                // Try implicit acquire and explicit release\n                typename C::mutex_type::scoped_lock lock(counter.mutex);\n                counter.value = counter.value+1;\n                lock.release();\n            } else {\n                // Try explicit acquire and implicit release\n                typename C::mutex_type::scoped_lock lock;\n                lock.acquire(counter.mutex);\n                counter.value = counter.value+1;\n            }\n        }\n    }\n    AddOne( C& counter_ ) : counter(counter_) {}\n};\n\n//! Adaptor for using ISO C++0x style mutex as a TBB-style mutex.\ntemplate<typename M>\nclass TBB_MutexFromISO_Mutex {\n    M my_iso_mutex;\npublic:\n    typedef TBB_MutexFromISO_Mutex mutex_type;\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    class scoped_lock {\n        mutex_type* my_mutex;\n    public:\n        scoped_lock() : my_mutex(NULL) {}\n        scoped_lock( mutex_type& m ) : my_mutex(NULL) {\n            acquire(m);\n        }\n        scoped_lock( mutex_type& m, bool is_writer ) : my_mutex(NULL) {\n            acquire(m,is_writer);\n        }\n        void acquire( mutex_type& m ) {\n            m.my_iso_mutex.lock();\n            my_mutex = &m;\n        }\n        bool try_acquire( mutex_type& m ) {\n            if( m.my_iso_mutex.try_lock() ) {\n                my_mutex = &m;\n                return true;\n            } else {\n                return false;\n            }\n        }\n        void release() {\n            my_mutex->my_iso_mutex.unlock();\n            my_mutex = NULL;\n        }\n\n        // Methods for reader-writer mutex\n        // These methods can be instantiated only if M supports lock_read() and try_lock_read().\n\n        void acquire( mutex_type& m, bool is_writer ) {\n            if( is_writer ) m.my_iso_mutex.lock();\n            else m.my_iso_mutex.lock_read();\n            my_mutex = &m;\n        }\n        bool try_acquire( mutex_type& m, bool is_writer ) {\n            if( is_writer ? m.my_iso_mutex.try_lock() : m.my_iso_mutex.try_lock_read() ) {\n                my_mutex = &m;\n                return true;\n            } else {\n                return false;\n            }\n        }\n        bool upgrade_to_writer() {\n            my_mutex->my_iso_mutex.unlock();\n            my_mutex->my_iso_mutex.lock();\n            return false;\n        }\n        bool downgrade_to_reader() {\n            my_mutex->my_iso_mutex.unlock();\n            my_mutex->my_iso_mutex.lock_read();\n            return false;\n        }\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n    };\n\n    static const bool is_recursive_mutex = M::is_recursive_mutex;\n    static const bool is_rw_mutex = M::is_rw_mutex;\n};\n\nnamespace tbb {\n    namespace profiling {\n        template<typename M>\n        void set_name( const TBB_MutexFromISO_Mutex<M>&, const char* ) {}\n    }\n}\n\n//! Generic test of a TBB mutex type M.\n/** Does not test features specific to reader-writer locks. */\ntemplate<typename M>\nvoid Test( const char * name ) {\n    REMARK(\"%s size == %d, time = \",name, sizeof(M));\n    Counter<M> counter;\n    counter.value = 0;\n    tbb::profiling::set_name(counter.mutex, name);\n#if TBB_TEST_LOW_WORKLOAD\n    const int n = 10000;\n#else\n    const int n = 100000;\n#endif /* TBB_TEST_LOW_WORKLOAD */\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M> >(counter));\n    tbb::tick_count t1 = tbb::tick_count::now();\n    REMARK(\"%g usec\\n\",(t1-t0).seconds());\n    if( counter.value!=n )\n        REPORT(\"ERROR for %s: counter.value=%ld\\n\",name,counter.value);\n}\n\ntemplate<typename M, size_t N>\nstruct Invariant {\n    typedef M mutex_type;\n    M mutex;\n    const char* mutex_name;\n    volatile long value[N];\n    Invariant( const char* mutex_name_ ) :\n        mutex_name(mutex_name_)\n    {\n        for( size_t k=0; k<N; ++k )\n            value[k] = 0;\n        tbb::profiling::set_name(mutex, mutex_name_);\n    }\n    ~Invariant() {\n    }\n    void update() {\n        for( size_t k=0; k<N; ++k )\n            ++value[k];\n    }\n    bool value_is( long expected_value ) const {\n        long tmp;\n        for( size_t k=0; k<N; ++k )\n            if( (tmp=value[k])!=expected_value ) {\n                REPORT(\"ERROR: %ld!=%ld\\n\", tmp, expected_value);\n                return false;\n            }\n        return true;\n    }\n    bool is_okay() {\n        return value_is( value[0] );\n    }\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename I>\nstruct TwiddleInvariant: NoAssign {\n    I& invariant;\n    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}\n\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            //! Every 8th access is a write access\n            const bool write = (i%8)==7;\n            bool okay = true;\n            bool lock_kept = true;\n            if( (i/8)&1 ) {\n                // Try implicit acquire and explicit release\n                typename I::mutex_type::scoped_lock lock(invariant.mutex,write);\n                execute_aux(lock, i, write, /*ref*/okay, /*ref*/lock_kept);\n                lock.release();\n            } else {\n                // Try explicit acquire and implicit release\n                typename I::mutex_type::scoped_lock lock;\n                lock.acquire(invariant.mutex,write);\n                execute_aux(lock, i, write, /*ref*/okay, /*ref*/lock_kept);\n            }\n            if( !okay ) {\n                REPORT( \"ERROR for %s at %ld: %s %s %s %s\\n\",invariant.mutex_name, long(i),\n                        write     ? \"write,\"                  : \"read,\",\n                        write     ? (i%16==7?\"downgrade,\":\"\") : (i%8==3?\"upgrade,\":\"\"),\n                        lock_kept ? \"lock kept,\"              : \"lock not kept,\", // TODO: only if downgrade/upgrade\n                        (i/8)&1   ? \"impl/expl\"               : \"expl/impl\" );\n            }\n        }\n    }\nprivate:\n    void execute_aux(typename I::mutex_type::scoped_lock & lock, const size_t i, const bool write, bool & okay, bool & lock_kept) const {\n        if( write ) {\n            long my_value = invariant.value[0];\n            invariant.update();\n            if( i%16==7 ) {\n                lock_kept = lock.downgrade_to_reader();\n                if( !lock_kept )\n                    my_value = invariant.value[0] - 1;\n                okay = invariant.value_is(my_value+1);\n            }\n        } else {\n            okay = invariant.is_okay();\n            if( i%8==3 ) {\n                long my_value = invariant.value[0];\n                lock_kept = lock.upgrade_to_writer();\n                if( !lock_kept )\n                    my_value = invariant.value[0];\n                invariant.update();\n                okay = invariant.value_is(my_value+1);\n            }\n        }\n    }\n};\n\n/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */\ntemplate<typename M>\nvoid TestReaderWriterLock( const char * mutex_name ) {\n    REMARK( \"%s readers & writers time = \", mutex_name );\n    Invariant<M,8> invariant(mutex_name);\n#if TBB_TEST_LOW_WORKLOAD\n    const size_t n = 10000;\n#else\n    const size_t n = 500000;\n#endif /* TBB_TEST_LOW_WORKLOAD */\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/100),TwiddleInvariant<Invariant<M,8> >(invariant));\n    tbb::tick_count t1 = tbb::tick_count::now();\n    // There is either a writer or a reader upgraded to a writer for each 4th iteration\n    long expected_value = n/4;\n    if( !invariant.value_is(expected_value) )\n        REPORT(\"ERROR for %s: final invariant value is wrong\\n\",mutex_name);\n    REMARK( \"%g usec\\n\", (t1-t0).seconds() );\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n\n/** Test try_acquire_reader functionality of a non-reenterable reader-writer mutex */\ntemplate<typename M>\nvoid TestTryAcquireReader_OneThread( const char * mutex_name ) {\n    M tested_mutex;\n    typename M::scoped_lock lock1;\n    if( M::is_rw_mutex ) {\n        if( lock1.try_acquire(tested_mutex, false) )\n            lock1.release();\n        else\n            REPORT(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n        {\n            typename M::scoped_lock lock2(tested_mutex, false);   // read lock\n            if( lock1.try_acquire(tested_mutex) )                 // attempt to acquire read\n                REPORT(\"ERROR for %s: try_acquire succeeded though it should not (1)\\n\", mutex_name);\n            lock2.release();                                      // unlock\n            lock2.acquire(tested_mutex, true);                    // write lock\n            if( lock1.try_acquire(tested_mutex, false) )          // attempt to acquire read\n                REPORT(\"ERROR for %s: try_acquire succeeded though it should not (2)\\n\", mutex_name);\n        }\n        if( lock1.try_acquire(tested_mutex, false) )\n            lock1.release();\n        else\n            REPORT(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n    }\n}\n\n/** Test try_acquire functionality of a non-reenterable mutex */\ntemplate<typename M>\nvoid TestTryAcquire_OneThread( const char * mutex_name ) {\n    M tested_mutex;\n    typename M::scoped_lock lock1;\n    if( lock1.try_acquire(tested_mutex) )\n        lock1.release();\n    else\n        REPORT(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n    {\n        if( M::is_recursive_mutex ) {\n            typename M::scoped_lock lock2(tested_mutex);\n            if( lock1.try_acquire(tested_mutex) )\n                lock1.release();\n            else\n                REPORT(\"ERROR for %s: try_acquire on recursive lock failed though it should not\\n\", mutex_name);\n            //windows.. -- both are recursive\n        } else {\n            typename M::scoped_lock lock2(tested_mutex);\n            if( lock1.try_acquire(tested_mutex) )\n                REPORT(\"ERROR for %s: try_acquire succeeded though it should not (3)\\n\", mutex_name);\n        }\n    }\n    if( lock1.try_acquire(tested_mutex) )\n        lock1.release();\n    else\n        REPORT(\"ERROR for %s: try_acquire failed though it should not\\n\", mutex_name);\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif\n\nconst int RecurN = 4;\nint RecurArray[ RecurN ];\ntbb::recursive_mutex RecurMutex[ RecurN ];\n\nstruct RecursiveAcquisition {\n    /** x = number being decoded in base N\n        max_lock = index of highest lock acquired so far\n        mask = bit mask; ith bit set if lock i has been acquired. */\n    void Body( size_t x, int max_lock=-1, unsigned int mask=0 ) const\n    {\n        int i = (int) (x % RecurN);\n        bool first = (mask&1U<<i)==0;\n        if( first ) {\n            // first time to acquire lock\n            if( i<max_lock )\n                // out of order acquisition might lead to deadlock, so stop\n                return;\n            max_lock = i;\n        }\n\n        if( (i&1)!=0 ) {\n            // acquire lock on location RecurArray[i] using explicit acquire\n            tbb::recursive_mutex::scoped_lock r_lock;\n            r_lock.acquire( RecurMutex[i] );\n            int a = RecurArray[i];\n            ASSERT( (a==0)==first, \"should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise\" );\n            ++RecurArray[i];\n            if( x )\n                Body( x/RecurN, max_lock, mask|1U<<i );\n            --RecurArray[i];\n            ASSERT( a==RecurArray[i], \"a is not equal to RecurArray[i]\" );\n\n            // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one\n            if( (i&2)!=0 ) r_lock.release();\n        } else {\n            // acquire lock on location RecurArray[i] using implicit acquire\n            tbb::recursive_mutex::scoped_lock r_lock( RecurMutex[i] );\n            int a = RecurArray[i];\n\n            ASSERT( (a==0)==first, \"should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise\" );\n\n            ++RecurArray[i];\n            if( x )\n                Body( x/RecurN, max_lock, mask|1U<<i );\n            --RecurArray[i];\n\n            ASSERT( a==RecurArray[i], \"a is not equal to RecurArray[i]\" );\n\n            // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one\n            if( (i&2)!=0 ) r_lock.release();\n        }\n    }\n\n    void operator()( const tbb::blocked_range<size_t> &r ) const\n    {\n        for( size_t x=r.begin(); x<r.end(); x++ ) {\n            Body( x );\n        }\n    }\n};\n\n/** This test is generic so that we may test other kinds of recursive mutexes.*/\ntemplate<typename M>\nvoid TestRecursiveMutex( const char * mutex_name )\n{\n    for ( int i = 0; i < RecurN; ++i ) {\n        tbb::profiling::set_name(RecurMutex[i], mutex_name);\n    }\n    tbb::tick_count t0 = tbb::tick_count::now();\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,10000,500), RecursiveAcquisition());\n    tbb::tick_count t1 = tbb::tick_count::now();\n    REMARK( \"%s recursive mutex time = %g usec\\n\", mutex_name, (t1-t0).seconds() );\n}\n\ntemplate<typename C>\nstruct NullRecursive: NoAssign {\n    void recurse_till( size_t i, size_t till ) const {\n        if( i==till ) {\n            counter.value = counter.value+1;\n            return;\n        }\n        if( i&1 ) {\n            typename C::mutex_type::scoped_lock lock2(counter.mutex);\n            recurse_till( i+1, till );\n            lock2.release();\n        } else {\n            typename C::mutex_type::scoped_lock lock2;\n            lock2.acquire(counter.mutex);\n            recurse_till( i+1, till );\n        }\n    }\n\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        typename C::mutex_type::scoped_lock lock(counter.mutex);\n        recurse_till( range.begin(), range.end() );\n    }\n    NullRecursive( C& counter_ ) : counter(counter_) {\n        ASSERT( C::mutex_type::is_recursive_mutex, \"Null mutex should be a recursive mutex.\" );\n    }\n    C& counter;\n};\n\ntemplate<typename M>\nstruct NullUpgradeDowngrade: NoAssign {\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        typename M::scoped_lock lock2;\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            if( i&1 ) {\n                typename M::scoped_lock lock1(my_mutex, true) ;\n                if( lock1.downgrade_to_reader()==false )\n                    REPORT(\"ERROR for %s: downgrade should always succeed\\n\", name);\n            } else {\n                lock2.acquire( my_mutex, false );\n                if( lock2.upgrade_to_writer()==false )\n                    REPORT(\"ERROR for %s: upgrade should always succeed\\n\", name);\n                lock2.release();\n            }\n        }\n    }\n\n    NullUpgradeDowngrade( M& m_, const char* n_ ) : my_mutex(m_), name(n_) {}\n    M& my_mutex;\n    const char* name;\n} ;\n\ntemplate<typename M>\nvoid TestNullMutex( const char * name ) {\n    Counter<M> counter;\n    counter.value = 0;\n    const int n = 100;\n    REMARK(\"TestNullMutex<%s>\",name);\n    {\n        tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),AddOne<Counter<M> >(counter));\n    }\n    counter.value = 0;\n    {\n        tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullRecursive<Counter<M> >(counter));\n    }\n    REMARK(\"\\n\");\n}\n\ntemplate<typename M>\nvoid TestNullRWMutex( const char * name ) {\n    REMARK(\"TestNullRWMutex<%s>\",name);\n    const int n = 100;\n    M m;\n    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullUpgradeDowngrade<M>(m, name));\n    REMARK(\"\\n\");\n}\n\n//! Test ISO C++0x compatibility portion of TBB mutex\ntemplate<typename M>\nvoid TestISO( const char * name ) {\n    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;\n    Test<tbb_from_iso>( name );\n}\n\n//! Test ISO C++0x try_lock functionality of a non-reenterable mutex */\ntemplate<typename M>\nvoid TestTryAcquire_OneThreadISO( const char * name ) {\n    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;\n    TestTryAcquire_OneThread<tbb_from_iso>( name );\n}\n\n//! Test ISO-like C++0x compatibility portion of TBB reader-writer mutex\ntemplate<typename M>\nvoid TestReaderWriterLockISO( const char * name ) {\n    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;\n    TestReaderWriterLock<tbb_from_iso>( name );\n    TestTryAcquireReader_OneThread<tbb_from_iso>( name );\n}\n\n//! Test ISO C++0x compatibility portion of TBB recursive mutex\ntemplate<typename M>\nvoid TestRecursiveMutexISO( const char * name ) {\n    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;\n    TestRecursiveMutex<tbb_from_iso>(name);\n}\n\n#include \"harness_tsx.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#if __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER\n\n//! Function object for use with parallel_for.h to see if a transaction is actually attempted.\ntbb::atomic<size_t> n_transactions_attempted;\ntemplate<typename C>\nstruct AddOne_CheckTransaction: NoAssign {\n    C& counter;\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( tbb::blocked_range<size_t>& range ) const {\n        for( size_t i=range.begin(); i!=range.end(); ++i ) {\n            bool transaction_attempted = false;\n            {\n              typename C::mutex_type::scoped_lock lock(counter.mutex);\n              if( IsInsideTx() ) transaction_attempted = true;\n              counter.value = counter.value+1;\n            }\n            if( transaction_attempted ) ++n_transactions_attempted;\n            __TBB_Pause(i);\n        }\n    }\n    AddOne_CheckTransaction( C& counter_ ) : counter(counter_) {}\n};\n\n/* TestTransaction() checks if a speculative mutex actually uses transactions. */\ntemplate<typename M>\nvoid TestTransaction( const char * name )\n{\n    Counter<M> counter;\n#if TBB_TEST_LOW_WORKLOAD\n    const int n = 100;\n#else\n    const int n = 1000;\n#endif\n    REMARK(\"TestTransaction with %s: \",name);\n\n    n_transactions_attempted = 0;\n    tbb::tick_count start, stop;\n    for( int i=0; i<5 && n_transactions_attempted==0; ++i ) {\n        counter.value = 0;\n        start = tbb::tick_count::now();\n        tbb::parallel_for(tbb::blocked_range<size_t>(0,n,2),AddOne_CheckTransaction<Counter<M> >(counter));\n        stop = tbb::tick_count::now();\n        if( counter.value!=n ) {\n            REPORT(\"ERROR for %s: counter.value=%ld\\n\",name,counter.value);\n            break;\n        }\n    }\n\n    if( n_transactions_attempted==0 )\n        REPORT( \"ERROR: transactions were never attempted\\n\" );\n    else\n        REMARK(\"%d successful transactions in %6.6f seconds\\n\", (int)n_transactions_attempted, (stop - start).seconds());\n}\n#endif  /* __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER */\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n        REMARK( \"testing with %d workers\\n\", static_cast<int>(p) );\n#if TBB_TEST_LOW_WORKLOAD\n        // The amount of work is decreased in this mode to bring the length\n        // of the runs under tools into the tolerable limits.\n        const int n = 1;\n#else\n        const int n = 3;\n#endif\n        // Run each test several times.\n        for( int i=0; i<n; ++i ) {\n            TestNullMutex<tbb::null_mutex>( \"Null Mutex\" );\n            TestNullMutex<tbb::null_rw_mutex>( \"Null RW Mutex\" );\n            TestNullRWMutex<tbb::null_rw_mutex>( \"Null RW Mutex\" );\n            Test<tbb::spin_mutex>( \"Spin Mutex\" );\n            Test<tbb::speculative_spin_mutex>( \"Spin Mutex/speculative\" );\n#if _OPENMP\n            Test<OpenMP_Mutex>( \"OpenMP_Mutex\" );\n#endif /* _OPENMP */\n            Test<tbb::queuing_mutex>( \"Queuing Mutex\" );\n            Test<tbb::mutex>( \"Wrapper Mutex\" );\n            Test<tbb::recursive_mutex>( \"Recursive Mutex\" );\n            Test<tbb::queuing_rw_mutex>( \"Queuing RW Mutex\" );\n            Test<tbb::spin_rw_mutex>( \"Spin RW Mutex\" );\n            Test<tbb::speculative_spin_rw_mutex>( \"Spin RW Mutex/speculative\" );\n\n            TestTryAcquire_OneThread<tbb::spin_mutex>(\"Spin Mutex\");\n            TestTryAcquire_OneThread<tbb::speculative_spin_mutex>(\"Spin Mutex/speculative\");\n            TestTryAcquire_OneThread<tbb::queuing_mutex>(\"Queuing Mutex\");\n#if USE_PTHREAD\n            // under ifdef because on Windows tbb::mutex is reenterable and the test will fail\n            TestTryAcquire_OneThread<tbb::mutex>(\"Wrapper Mutex\");\n#endif /* USE_PTHREAD */\n            TestTryAcquire_OneThread<tbb::recursive_mutex>( \"Recursive Mutex\" );\n            TestTryAcquire_OneThread<tbb::spin_rw_mutex>(\"Spin RW Mutex\"); // only tests try_acquire for writers\n            TestTryAcquire_OneThread<tbb::speculative_spin_rw_mutex>(\"Spin RW Mutex/speculative\"); // only tests try_acquire for writers\n            TestTryAcquire_OneThread<tbb::queuing_rw_mutex>(\"Queuing RW Mutex\"); // only tests try_acquire for writers\n\n            TestTryAcquireReader_OneThread<tbb::spin_rw_mutex>(\"Spin RW Mutex\");\n            TestTryAcquireReader_OneThread<tbb::speculative_spin_rw_mutex>(\"Spin RW Mutex/speculative\");\n            TestTryAcquireReader_OneThread<tbb::queuing_rw_mutex>(\"Queuing RW Mutex\");\n\n            TestReaderWriterLock<tbb::queuing_rw_mutex>( \"Queuing RW Mutex\" );\n            TestReaderWriterLock<tbb::spin_rw_mutex>( \"Spin RW Mutex\" );\n            TestReaderWriterLock<tbb::speculative_spin_rw_mutex>( \"Spin RW Mutex/speculative\" );\n\n            TestRecursiveMutex<tbb::recursive_mutex>( \"Recursive Mutex\" );\n\n            // Test ISO C++11 interface\n            TestISO<tbb::spin_mutex>( \"ISO Spin Mutex\" );\n            TestISO<tbb::mutex>( \"ISO Mutex\" );\n            TestISO<tbb::spin_rw_mutex>( \"ISO Spin RW Mutex\" );\n            TestISO<tbb::recursive_mutex>( \"ISO Recursive Mutex\" );\n            TestISO<tbb::critical_section>( \"ISO Critical Section\" );\n            TestTryAcquire_OneThreadISO<tbb::spin_mutex>( \"ISO Spin Mutex\" );\n#if USE_PTHREAD\n            // under ifdef because on Windows tbb::mutex is reenterable and the test will fail\n            TestTryAcquire_OneThreadISO<tbb::mutex>( \"ISO Mutex\" );\n#endif /* USE_PTHREAD */\n            TestTryAcquire_OneThreadISO<tbb::spin_rw_mutex>( \"ISO Spin RW Mutex\" );\n            TestTryAcquire_OneThreadISO<tbb::recursive_mutex>( \"ISO Recursive Mutex\" );\n            TestTryAcquire_OneThreadISO<tbb::critical_section>( \"ISO Critical Section\" );\n            TestReaderWriterLockISO<tbb::spin_rw_mutex>( \"ISO Spin RW Mutex\" );\n            TestRecursiveMutexISO<tbb::recursive_mutex>( \"ISO Recursive Mutex\" );\n        }\n    }\n\n#if __TBB_TSX_TESTING_ENABLED_FOR_THIS_COMPILER\n    // additional test for speculative mutexes to see if we actually attempt lock elisions\n    if( have_TSX() ) {\n        tbb::task_scheduler_init init( MaxThread );\n        TestTransaction<tbb::speculative_spin_mutex>( \"Spin Mutex/speculative\" );\n        TestTransaction<tbb::speculative_spin_rw_mutex>( \"Spin RW Mutex/speculative\" );\n    }\n    else {\n        REMARK(\"Hardware transactions not supported\\n\");\n    }\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_mutex_native_threads.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"tbb/mutex.h\"\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/atomic.h\"\n\n#include \"harness.h\"\n\n// This test deliberately avoids a \"using tbb\" statement,\n// so that the error of putting types in the wrong namespace will be caught.\n\ntemplate<typename M>\nstruct Counter {\n    typedef M mutex_type;\n    M mutex;\n    volatile long value;\n    void flog_once( size_t mode );\n};\n\ntemplate<typename M>\nvoid Counter<M>::flog_once(size_t mode)\n/** Increments counter once for each iteration in the iteration space. */\n{\n    if( mode&1 ) {\n        // Try implicit acquire and explicit release\n        typename mutex_type::scoped_lock lock(mutex);\n        value = value+1;\n        lock.release();\n    } else {\n        // Try explicit acquire and implicit release\n        typename mutex_type::scoped_lock lock;\n        lock.acquire(mutex);\n        value = value+1;\n    }\n}\n\ntemplate<typename M, long N>\nstruct Invariant {\n    typedef M mutex_type;\n    M mutex;\n    const char* mutex_name;\n    volatile long value[N];\n    Invariant( const char* mutex_name_ ) :\n        mutex_name(mutex_name_)\n    {\n        for( long k=0; k<N; ++k )\n            value[k] = 0;\n    }\n    void update() {\n        for( long k=0; k<N; ++k )\n            ++value[k];\n    }\n    bool value_is( long expected_value ) const {\n        long tmp;\n        for( long k=0; k<N; ++k )\n            if( (tmp=value[k])!=expected_value ) {\n                REPORT(\"ERROR: %ld!=%ld\\n\", tmp, expected_value);\n                return false;\n            }\n        return true;\n    }\n    bool is_okay() {\n        return value_is( value[0] );\n    }\n    void flog_once( size_t mode );\n};\n\ntemplate<typename M, long N>\nvoid Invariant<M,N>::flog_once( size_t mode )\n{\n    //! Every 8th access is a write access\n    bool write = (mode%8)==7;\n    bool okay = true;\n    bool lock_kept = true;\n    if( (mode/8)&1 ) {\n        // Try implicit acquire and explicit release\n        typename mutex_type::scoped_lock lock(mutex,write);\n        if( write ) {\n            long my_value = value[0];\n            update();\n            if( mode%16==7 ) {\n                lock_kept = lock.downgrade_to_reader();\n                if( !lock_kept )\n                    my_value = value[0] - 1;\n                okay = value_is(my_value+1);\n            }\n        } else {\n            okay = is_okay();\n            if( mode%8==3 ) {\n                long my_value = value[0];\n                lock_kept = lock.upgrade_to_writer();\n                if( !lock_kept )\n                    my_value = value[0];\n                update();\n                okay = value_is(my_value+1);\n            }\n        }\n        lock.release();\n    } else {\n        // Try explicit acquire and implicit release\n        typename mutex_type::scoped_lock lock;\n        lock.acquire(mutex,write);\n        if( write ) {\n            long my_value = value[0];\n            update();\n            if( mode%16==7 ) {\n                lock_kept = lock.downgrade_to_reader();\n                if( !lock_kept )\n                    my_value = value[0] - 1;\n                okay = value_is(my_value+1);\n            }\n        } else {\n            okay = is_okay();\n            if( mode%8==3 ) {\n                long my_value = value[0];\n                lock_kept = lock.upgrade_to_writer();\n                if( !lock_kept )\n                    my_value = value[0];\n                update();\n                okay = value_is(my_value+1);\n            }\n        }\n    }\n    if( !okay ) {\n        REPORT( \"ERROR for %s at %ld: %s %s %s %s\\n\",mutex_name, long(mode),\n                write?\"write,\":\"read,\", write?(mode%16==7?\"downgrade,\":\"\"):(mode%8==3?\"upgrade,\":\"\"),\n                lock_kept?\"lock kept,\":\"lock not kept,\", (mode/8)&1?\"imp/exp\":\"exp/imp\" );\n    }\n}\n\nstatic tbb::atomic<size_t> Order;\n\ntemplate<typename State, long TestSize>\nstruct Work: NoAssign {\n    static const size_t chunk = 100;\n    State& state;\n    Work( State& state_ ) : state(state_) {}\n    void operator()( int ) const {\n        size_t step;\n        while( (step=Order.fetch_and_add<tbb::acquire>(chunk))<TestSize )\n            for( size_t i=0; i<chunk && step<TestSize; ++i, ++step )\n                state.flog_once(step);\n    }\n};\n\n//! Generic test of a TBB Mutex type M.\n/** Does not test features specific to reader-writer locks. */\ntemplate<typename M>\nvoid Test( const char * name, int nthread ) {\n    REMARK(\"testing %s\\n\",name);\n    Counter<M> counter;\n    counter.value = 0;\n    Order = 0;\n    // use the macro because of a gcc 4.6 bug\n#define TEST_SIZE 100000\n    tbb::tick_count t0 = tbb::tick_count::now();\n    NativeParallelFor( nthread, Work<Counter<M>, TEST_SIZE>(counter) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    REMARK(\"%s time = %g usec\\n\",name, (t1-t0).seconds() );\n    if( counter.value!=TEST_SIZE )\n        REPORT(\"ERROR for %s: counter.value=%ld != %ld=test_size\\n\",name,counter.value,TEST_SIZE);\n#undef TEST_SIZE\n}\n\n\n//! Generic test of TBB ReaderWriterMutex type M\ntemplate<typename M>\nvoid TestReaderWriter( const char * mutex_name, int nthread ) {\n    REMARK(\"testing %s\\n\",mutex_name);\n    Invariant<M,8> invariant(mutex_name);\n    Order = 0;\n    // use the macro because of a gcc 4.6 bug\n#define TEST_SIZE 1000000\n    tbb::tick_count t0 = tbb::tick_count::now();\n    NativeParallelFor( nthread, Work<Invariant<M,8>, TEST_SIZE>(invariant) );\n    tbb::tick_count t1 = tbb::tick_count::now();\n    // There is either a writer or a reader upgraded to a writer for each 4th iteration\n    long expected_value = TEST_SIZE/4;\n    if( !invariant.value_is(expected_value) )\n        REPORT(\"ERROR for %s: final invariant value is wrong\\n\",mutex_name);\n    REMARK(\"%s readers & writers time = %g usec\\n\",mutex_name,(t1-t0).seconds());\n#undef TEST_SIZE\n}\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK( \"testing with %d threads\\n\", p );\n        Test<tbb::spin_mutex>( \"spin_mutex\", p );\n        Test<tbb::queuing_mutex>( \"queuing_mutex\", p );\n        Test<tbb::queuing_rw_mutex>( \"queuing_rw_mutex\", p );\n        Test<tbb::spin_rw_mutex>( \"spin_rw_mutex\", p );\n        Test<tbb::mutex>( \"mutex\", p );\n        TestReaderWriter<tbb::queuing_rw_mutex>( \"queuing_rw_mutex\", p );\n        TestReaderWriter<tbb::spin_rw_mutex>( \"spin_rw_mutex\", p );\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_opencl_node.cl",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nstatic size_t my_strlen( __constant char* str ) {\n    size_t len = 0;\n    if ( str ) while ( *str++ ) ++len;\n    return len;\n}\n\nstatic void my_strcpy(__global char *dest, __constant char *src, size_t n) {\n    while ( n-- ) *dest++ = *src++;\n}\n\nstatic void set_error_msg( __global char *error_msg, size_t error_msg_size, __constant char *msg ) {\n    const size_t msg_len = my_strlen(msg);\n    const size_t len  = msg_len < error_msg_size ? msg_len : error_msg_size-1;\n    my_strcpy( error_msg, msg, len );\n    error_msg[len] = 0;\n}\n\n__kernel\nvoid TestArgumentPassing( \n    __global int *b1, __global int *b2, int stride_x, int stride_y, int stride_z, int dim, __global char *error_msg, int error_msg_size ) {\n    const int x = get_global_id(0);\n    const int y = get_global_id(1);\n    const int z = get_global_id(2);\n    \n    if ( dim < 2 ) {\n        if ( y != 0 ) {\n            set_error_msg( error_msg, (size_t)error_msg_size, \"Y dimension does not equal 0\" );\n            return;\n        }\n        if ( stride_y != 0 ) {\n            set_error_msg( error_msg, (size_t)error_msg_size, \"stride_y does not equal 0\" );\n            return;\n        }\n    }\n    \n    if ( dim < 3 ) {\n        if ( z != 0 ) {\n            set_error_msg( error_msg, (size_t)error_msg_size, \"Z dimension does not equal 0\" );\n            return;\n        }\n        if ( stride_z != 0 ) {\n            set_error_msg( error_msg, (size_t)error_msg_size, \"stride_z does not equal 0\" );\n            return;\n        }\n    }\n    \n    const int index = x*stride_x+y*stride_y+z*stride_z;\n    b2[index] = b1[index];\n    \n    set_error_msg( error_msg, (size_t)error_msg_size, \"Done\" );\n}\n\n__kernel\nvoid Sum(\n       __global float *b1, __global float *b2 )\n{\n    const int index = get_global_id(0);\n    b2[index] += b1[index];\n}\n\n__kernel\nvoid Mul(\n       __global int *b1, __global int *b2 )\n{\n    const int index = get_global_id(0);\n    b1[index] *= b2[index];\n}\n\n__kernel\nvoid Sqr(\n    __global float *b2, __global float *b3   )\n{\n    const int index = get_global_id(0);\n    b3[index] = b2[index]*b2[index];\n}\n\n__kernel\nvoid DiamondDependencyTestFill(\n    __global short *b, short v )\n{\n    const int index = get_global_id(0);\n    b[index] = v;\n}\n\n__kernel\nvoid DiamondDependencyTestSquare(\n    __global short *b1, __global int *b2 )\n{\n    const int index = get_global_id(0);\n    b2[index] = b1[index]*b1[index];\n}\n\n__kernel\nvoid DiamondDependencyTestCube(\n    __global short *b1, __global int *b2 )\n{\n    const int index = get_global_id(0);\n    b2[index] = b1[index]*b1[index]*b1[index];\n}\n\n__kernel\nvoid DiamondDependencyTestDivision(\n    __global short *b, __global int *b1, __global int *b2 )\n{\n    const int index = get_global_id(0);\n    b[index] *= b2[index]/b1[index];\n}\n\n__kernel\nvoid LoopTestIter( __global long *b1, __global long *b2 ) {\n    const int index = get_global_id(0);\n    b1[index] += b2[index]++;\n}\n\n__kernel\nvoid ConcurrencyTestIter( __global char *b1, __global short *b2 ) {\n    const int index = get_global_id(0);\n    b2[index] += b1[index];\n}\n\n__kernel\nvoid BroadcastTest( __global int *b1, __global int *b2 ) {\n    const int index = get_global_id(0);\n    b2[index] = b1[index];\n}\n\n#if __IMAGE_SUPPORT__\nconst sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_NONE | CLK_FILTER_NEAREST;\n\n__kernel\nvoid Image2dTest (\n    __read_only image2d_t src,\n    __write_only image2d_t dst,\n    char type)\n{\n    const int x = get_global_id(0);\n    const int y = get_global_id(1);\n    int2 coord = (int2)(x, y);\n    switch ( type ) { \n    case 'f':\n        write_imagef(dst, coord, read_imagef( src, sampler, coord )) ;\n        break;\n    case 'i':\n        write_imagei(dst, coord, read_imagei( src, sampler, coord )) ;\n        break;\n    case 'u':\n        write_imageui(dst, coord, read_imageui( src, sampler, coord )) ;\n        break;\n    }\n\n}\n\n__kernel\nvoid Image2dTestDepth (\n#if __OPENCL_VERSION__ >= 200\n    __read_only image2d_depth_t src,\n    __write_only image2d_depth_t dst,\n#else\n    __read_only image2d_t src,\n    __write_only image2d_t dst,\n#endif\n    char type )\n{\n    const int x = get_global_id(0);\n    const int y = get_global_id(1);\n    int2 coord = (int2)(x, y);\n    write_imagef(dst, coord, read_imagef( src, sampler, coord )) ;\n}\n#endif /* __IMAGE_SUPPORT__ */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_opencl_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n\n// The old versions of MSVC 2013 fail to compile the test with fatal error\n#define __TBB_MSVC_TEST_COMPILATION_BROKEN (_MSC_VER && _MSC_FULL_VER <= 180021005 && !__INTEL_COMPILER)\n\n#if __TBB_PREVIEW_OPENCL_NODE && !__TBB_MSVC_TEST_COMPILATION_BROKEN\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n#include <iterator>\n#include \"tbb/task_scheduler_init.h\"\n#include <vector>\n#include <iostream>\n\n#include \"tbb/flow_graph_opencl_node.h\"\nusing namespace tbb::flow;\n\n#include \"harness_assert.h\"\n\n#if ( __INTEL_COMPILER && __INTEL_COMPILER <= 1500 ) || __clang__\n// In some corner cases the compiler fails to perform automatic type deduction for function pointer.\n// Workaround is to replace a function pointer with a function call.\n#define BROKEN_FUNCTION_POINTER_DEDUCTION(...) __VA_ARGS__()\n#else\n#define BROKEN_FUNCTION_POINTER_DEDUCTION(...) __VA_ARGS__\n#endif\n\n#if _MSC_VER <= 1800 && !__INTEL_COMPILER\n// In some corner cases the compiler fails to perform automatic std::initializer_list deduction for curly brackets.\n// Workaround is to perform implicit conversion.\ntemplate <typename T>\nstd::initializer_list<T> make_initializer_list( std::initializer_list<T> il ) { return il; }\n#define BROKEN_INITIALIZER_LIST_DEDUCTION(...) make_initializer_list(__VA_ARGS__)\n#else\n#define BROKEN_INITIALIZER_LIST_DEDUCTION(...) __VA_ARGS__\n#endif\n\n#include \"harness.h\"\n\n#include <mutex>\nstd::once_flag tbbRootFlag;\nchar *tbbRoot = NULL;\nstd::string PathToFile(const std::string& fileName) {\n    std::call_once(tbbRootFlag, [] { tbbRoot = Harness::GetEnv(\"tbb_root\"); });\n    std::string prefix = tbbRoot ? tbbRoot : \"../..\";\n    return prefix + \"/src/test/\" + fileName;\n}\n\n// Global test variables and types\ntypedef tbb::flow::opencl_range OCLRange;\nstruct test_default_device_filter {\n    opencl_device_list operator()(const opencl_device_list &devices) {\n        opencl_device_list dl;\n        dl.add(*devices.begin());\n        return dl;\n    }\n};\ntypedef opencl_factory<test_default_device_filter> DefaultFactoryType;\n\nstruct test_default_device_selector {\npublic:\n    template <typename DeviceFilter>\n    tbb::flow::opencl_device operator()(tbb::flow::opencl_factory<DeviceFilter>& f) {\n        // This is the device filter result\n        const tbb::flow::opencl_device_list &devices = f.devices();\n\n        // Get total number of available platforms:\n        cl_uint num_of_platforms = 0;\n        clGetPlatformIDs(0, 0, &num_of_platforms);\n        cl_platform_id* platforms = new cl_platform_id[num_of_platforms];\n\n        // Get IDs for all platforms:\n        clGetPlatformIDs(num_of_platforms, platforms, 0);\n\n        // By default device filter selects the first platform\n        cl_uint selected_platform_index = 0;\n        cl_platform_id platform = platforms[selected_platform_index];\n\n        // Count the number of plaform devices and compare with selector list\n        cl_uint device_count;\n        clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &device_count);\n        // It should be the same\n        ASSERT(device_count == devices.size(), \"Default device filter returned not all devices from the platform\");\n\n        // Retrieve device ids from the platform\n        cl_device_id* queuered_devices = (cl_device_id*) malloc(sizeof(cl_device_id) * device_count);\n        clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, device_count, queuered_devices, NULL);\n\n        // Compare retrieved device ids with defaults\n        for (unsigned int i = 0; i < device_count; i++) {\n            cl_device_id searched_id = queuered_devices[i];\n\n            tbb::flow::opencl_device_list::const_iterator it = std::find_if(devices.cbegin(), devices.cend(),\n                [&searched_id](const tbb::flow::opencl_device &d) {\n                    return d.device_id() == searched_id;\n            });\n\n            ASSERT(it != devices.cend(), \"Devices parsed from the first platform and filtered devices are not the same\");\n        }\n\n        return *(f.devices().begin());\n    }\n};\n\nvoid TestArgumentPassing() {\n    REMARK( \"TestArgumentPassing: \" );\n\n    graph g;\n    test_default_device_selector test_device_selector;\n    opencl_node <tuple<opencl_buffer<int>, opencl_buffer<int>, OCLRange>> k( g,\n        opencl_program<>( PathToFile( \"test_opencl_node.cl\" ) ).get_kernel( \"TestArgumentPassing\" ), test_device_selector );\n    split_node <tuple<opencl_buffer<int>, opencl_buffer<int>, OCLRange>> s( g );\n\n    make_edge( output_port<0>( s ), input_port<0>( k ) );\n    make_edge( output_port<1>( s ), input_port<1>( k ) );\n    make_edge( output_port<2>( s ), input_port<2>( k ) );\n\n    const int N = 1 * 1024 * 1024;\n    opencl_buffer<int> b1( N ), b2( N );\n\n    const int err_size = 128;\n    opencl_buffer<char> err( err_size );\n\n    OCLRange l;\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 1 );\n    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );\n    k.set_args( port_ref<0, 1>(), /* stride_x */ 1, /* stride_y */ 0, /* stride_z */ 0, /* dim */ 1, err, err_size );\n    s.try_put( std::tie( b1, b2, l ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 1; } ), \"Validation has failed\" );\n\n    // By default, the first device is used.\n    opencl_device d = *interface10::opencl_info::available_devices().begin();\n    std::array<size_t, 3> maxSizes = d.max_work_item_sizes();\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 2 );\n    int stride_x = 1;\n    k.set_args( port_ref<0>(), BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<1, 1> ), stride_x, /* stride_y */ 1024, /* stride_z */ 0, /* dim */ 2, err, err_size );\n    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ 1024, 1024 }),\n                   BROKEN_INITIALIZER_LIST_DEDUCTION({ 16, min( (int)maxSizes[1], 16 ) }) } );\n    s.try_put( std::tie( b1, b2, l ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 2; } ), \"Validation has failed\" );\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 3 );\n    stride_x = 2; // Nothing should be changed\n    s.try_put( std::tie( b1, b2, l ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 3; } ), \"Validation has failed\" );\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 4 );\n    int stride_z = 64 * 64;\n    ASSERT( stride_z * 64 < N, NULL );\n    k.set_args( port_ref<0>(), BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<1> ), /* stride_x */ 1, /* stride_y */ 64, /* stride_z */ stride_z, /* dim */ 3, err, err_size );\n    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ 64, 64, 64 }),\n                   BROKEN_INITIALIZER_LIST_DEDUCTION({ 4, min( (int)maxSizes[1], 4 ), min( (int)maxSizes[2], 4 ) }) } );\n    s.try_put( std::make_tuple( b1, b2, OCLRange() ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin(), b2.begin() + stride_z * 64, []( int c ) { return c == 4; } ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin() + stride_z * 64, b2.end(), []( int c ) { return c == 3; } ), \"Validation has failed\" );\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 5 );\n    ASSERT( 2 * 64 * 64 < N, NULL );\n    k.set_args( port_ref<0, 1>(), /* stride_x */ 2, /* stride_y */ 2 * 64, /* stride_z */ 2 * 64 * 64, /* dim */ 3, err, err_size );\n    k.set_range( BROKEN_FUNCTION_POINTER_DEDUCTION( port_ref<2> ) );\n    l = { BROKEN_INITIALIZER_LIST_DEDUCTION({ 64, 64, 64 }),\n          BROKEN_INITIALIZER_LIST_DEDUCTION({ 4, min( (int)maxSizes[1], 4 ), min( (int)maxSizes[2], 4 ) }) };\n    s.try_put( std::make_tuple( b1, b2, l ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    auto it = b2.begin();\n    for ( size_t i = 0; i < 64 * 64 * 64; ++i ) ASSERT( it[i] == (i % 2 ? 4 : 5), \"Validation has failed\" );\n    for ( size_t i = 64 * 64 * 64; i < 2 * 64 * 64 * 64; ++i ) ASSERT( it[i] == (i % 2 ? 3 : 5), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin() + 2 * stride_z * 64, b2.end(), []( int c ) { return c == 3; } ), \"Validation has failed\" );\n\n    *err.data() = 0; ASSERT( err.data() != std::string( \"Done\" ), NULL );\n    std::fill( b1.begin(), b1.end(), 6 );\n    k.set_args( port_ref<0, 1>(), /* stride_x */ 1, /* stride_y */ 1024, /* stride_z */ 0, /* dim */ 2, err, err_size );\n    k.set_range( std::deque<int>( { 1024, 1024 } ) );\n    s.try_put( std::make_tuple( b1, b2, l ) );\n    g.wait_for_all();\n    ASSERT( err.data() == std::string( \"Done\" ), \"Validation has failed\" );\n    ASSERT( std::all_of( b2.begin(), b2.end(), []( int c ) { return c == 6; } ), \"Validation has failed\" );\n    REMARK( \"done\\n\" );\n}\n\nvoid SimpleDependencyTest() {\n    REMARK( \"SimpleDependencyTest: \" );\n\n    const int N = 1 * 1024 * 1024;\n    opencl_buffer<float> b1( N ), b2( N ), b3( N );\n    std::vector<float> v1( N ), v2( N ), v3( N );\n\n    auto i1 = b1.access<write_only>();\n    auto i2 = b2.access<write_only>();\n\n    for ( int i = 0; i < N; ++i ) {\n        i1[i] = v1[i] = float( i );\n        i2[i] = v2[i] = float( 2 * i );\n    }\n\n    graph g;\n    opencl_program<> p( PathToFile(\"test_opencl_node.cl\") ) ;\n    opencl_node< tuple<opencl_buffer<float>, opencl_buffer<float>> > k1( g, p.get_kernel( \"Sum\" ) );\n    k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );\n\n    opencl_node < tuple<opencl_buffer<float>, opencl_buffer<float>> > k2( g, p.get_kernel( \"Sqr\" ) );\n    k2.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );\n\n    make_edge( output_port<1>( k1 ), input_port<0>( k2 ) );\n\n    split_node< tuple<opencl_buffer<float>, opencl_buffer<float>, opencl_buffer<float>> > s( g );\n\n    make_edge( output_port<0>( s ), input_port<0>( k1 ) );\n    make_edge( output_port<1>( s ), input_port<1>( k1 ) );\n    make_edge( output_port<2>( s ), input_port<1>( k2 ) );\n\n    s.try_put( std::tie( b1, b2, b3 ) );\n\n    g.wait_for_all();\n\n    // validation\n    for ( int i = 0; i < N; ++i ) {\n        v2[i] += v1[i];\n        v3[i] = v2[i] * v2[i];\n    }\n\n    auto o2 = b2.access<read_only>();\n    auto o3 = b3.access<read_only>();\n\n    ASSERT( memcmp( &o2[0], &v2[0], N*sizeof( float ) ) == 0, \"Validation has failed\" );\n    ASSERT( memcmp( &o3[0], &v3[0], N*sizeof( float ) ) == 0, \"Validation has failed\" );\n    REMARK( \"done\\n\" );\n}\n\nclass device_selector {\n    enum state {\n        DEFAULT_INITIALIZED,\n        COPY_INITIALIZED,\n        DELETED\n    };\n    state my_state;\npublic:\n    device_selector() : my_state( DEFAULT_INITIALIZED ) {}\n    device_selector( const device_selector& ) : my_state( COPY_INITIALIZED ) {}\n    device_selector( device_selector&& ) : my_state( COPY_INITIALIZED ) {}\n    ~device_selector() { my_state = DELETED; }\n\n    template <typename D>\n    opencl_device operator()( opencl_factory<D> &f ) {\n        ASSERT( my_state == COPY_INITIALIZED, NULL );\n        ASSERT( ! f.devices().empty(), NULL );\n        return *( f.devices().begin() );\n    }\n};\n\nvoid BroadcastTest() {\n    REMARK( \"BroadcastTest: \" );\n\n    graph g;\n\n    const int N = 1 * 1024;\n    opencl_buffer<cl_int> b( N );\n\n    const int numNodes = 4 * tbb::task_scheduler_init::default_num_threads();\n    typedef opencl_node <tuple<opencl_buffer<cl_int>, opencl_buffer<cl_int>>> NodeType;\n    std::vector<NodeType> nodes( numNodes, NodeType( g,\n        opencl_program<>( PathToFile(\"test_opencl_node.cl\") ).get_kernel( \"BroadcastTest\" ),\n        device_selector() ) );\n\n    for ( std::vector<NodeType>::iterator it = nodes.begin(); it != nodes.end(); ++it )\n        it->set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }), BROKEN_INITIALIZER_LIST_DEDUCTION({ 16 }) } );\n\n    broadcast_node<opencl_buffer<cl_int>> bc( g );\n    for ( auto &x : nodes ) make_edge( bc, x );\n\n    std::vector<opencl_buffer<cl_int>> res;\n    for ( int i = 0; i < numNodes; ++i ) res.emplace_back( N );\n\n    for ( cl_int r = 1; r < 100; ++r ) {\n        std::fill( b.begin(), b.end(), r );\n        bc.try_put( b );\n        for ( int i = 0; i < numNodes; ++i ) input_port<1>( nodes[i] ).try_put( res[i] );\n        g.wait_for_all();\n\n        ASSERT( std::all_of( res.begin(), res.end(), [r]( const opencl_buffer<cl_int> &buf ) {\n            return std::all_of( buf.begin(), buf.end(), [r]( cl_int c ) { return c == r; } );\n        } ), \"Validation has failed\" );\n    }\n    REMARK( \"done\\n\" );\n}\n\nvoid DiamondDependencyTest() {\n    REMARK( \"DiamondDependencyTest: \" );\n\n    const int N = 1 * 1024 * 1024;\n    opencl_buffer<cl_short> b( N );\n    opencl_buffer<cl_int> b1( N ), b2( N );\n\n    graph g;\n    device_selector d;\n    opencl_program<> p( PathToFile(\"test_opencl_node.cl\") );\n    opencl_node <tuple<opencl_buffer<cl_short>, cl_short>> k0( g, p.get_kernel( \"DiamondDependencyTestFill\" ), d );\n    k0.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>>> k1( g, p.get_kernel( \"DiamondDependencyTestSquare\" ) );\n    k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>>> k2( g, p.get_kernel( \"DiamondDependencyTestCube\" ) );\n    k2.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n    opencl_node <tuple<opencl_buffer<cl_short>, opencl_buffer<cl_int>, opencl_buffer<cl_int>>> k3( g, p.get_kernel( \"DiamondDependencyTestDivision\" ) );\n    k3.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n\n    make_edge( output_port<0>( k0 ), input_port<0>( k1 ) );\n    make_edge( output_port<0>( k0 ), input_port<0>( k2 ) );\n    make_edge( output_port<0>( k0 ), input_port<0>( k3 ) );\n\n    make_edge( output_port<1>( k1 ), input_port<1>( k3 ) );\n    make_edge( output_port<1>( k2 ), input_port<2>( k3 ) );\n\n    split_node< tuple<opencl_buffer<cl_short>, cl_short, opencl_buffer<cl_int>, opencl_buffer<cl_int>> > s( g );\n\n    make_edge( output_port<0>( s ), input_port<0>( k0 ) );\n    make_edge( output_port<1>( s ), input_port<1>( k0 ) );\n    make_edge( output_port<2>( s ), input_port<1>( k1 ) );\n    make_edge( output_port<3>( s ), input_port<1>( k2 ) );\n\n    for ( cl_short i = 1; i < 10; ++i ) {\n        s.try_put( std::tie( b, i, b1, b2 ) );\n        g.wait_for_all();\n        ASSERT( std::all_of( b.begin(), b.end(), [i]( cl_short c ) {return c == i*i; } ), \"Validation has failed\" );\n    }\n    REMARK( \"done\\n\" );\n}\n\nvoid LoopTest() {\n    REMARK( \"LoopTest: \" );\n\n    const int N = 1 * 1024;\n    opencl_buffer<cl_long> b1( N ), b2( N );\n\n    std::fill( b1.begin(), b1.end(), 0 );\n    std::fill( b2.begin(), b2.end(), 1 );\n\n    graph g;\n    opencl_node <tuple<opencl_buffer<cl_long>, opencl_buffer<cl_long>>> k( g,\n        opencl_program<>( PathToFile(\"test_opencl_node.cl\") ).get_kernel( \"LoopTestIter\" ) );\n    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n\n    make_edge( output_port<1>( k ), input_port<1>( k ) );\n\n    const cl_long numIters = 1000;\n    cl_long iter = 0;\n    typedef multifunction_node < opencl_buffer<cl_long>, tuple < opencl_buffer<cl_long>, opencl_buffer<cl_long> > > multinode;\n    multinode mf( g, serial, [&iter, numIters]( const opencl_buffer<cl_long> &b, multinode::output_ports_type& op ) {\n        if ( ++iter < numIters ) get<1>( op ).try_put( b );\n        else get<0>( op ).try_put( b );\n    } );\n\n    make_edge( output_port<1>( mf ), input_port<0>( k ) );\n    make_edge( output_port<0>( k ), mf );\n\n    function_node<opencl_buffer<cl_long>> f( g, unlimited, [numIters]( const opencl_buffer<cl_long> &b ) {\n        ASSERT( std::all_of( b.begin(), b.end(), [numIters]( cl_long c ) { return c == numIters*(numIters + 1) / 2; } ), \"Validation has failed\" );\n    } );\n\n    make_edge( output_port<0>( mf ), f );\n\n    split_node< tuple<opencl_buffer<cl_long>, opencl_buffer<cl_long> > > s( g );\n\n    make_edge( output_port<0>( s ), input_port<0>( k ) );\n    make_edge( output_port<1>( s ), input_port<1>( k ) );\n\n    s.try_put( std::tie( b1, b2 ) );\n    g.wait_for_all();\n    REMARK( \"done\\n\" );\n}\n\n#include \"harness_barrier.h\"\n\ntemplate <typename Factory>\nstruct ConcurrencyTestBodyData {\n    typedef opencl_node< tuple<opencl_buffer<cl_char, Factory>, opencl_subbuffer<cl_short, Factory>>, queueing, Factory > NodeType;\n    typedef std::vector< NodeType* > VectorType;\n\n    Harness::SpinBarrier barrier;\n    VectorType nodes;\n    function_node< opencl_subbuffer<cl_short, Factory> > validationNode;\n    tbb::atomic<int> numChecks;\n\n    ConcurrencyTestBodyData( graph &g, int numThreads ) : barrier( numThreads ), nodes(numThreads),\n        validationNode( g, unlimited, [numThreads, this]( const opencl_subbuffer<cl_short, Factory> &b ) {\n            ASSERT( std::all_of( b.begin(), b.end(), [numThreads]( cl_short c ) { return c == numThreads; } ), \"Validation has failed\" );\n            --numChecks;\n        } )\n    {\n        numChecks = 100;\n        // The test creates subbers in pairs so numChecks should be even.\n        ASSERT( numChecks % 2 == 0, NULL );\n    }\n\n    ~ConcurrencyTestBodyData() {\n        ASSERT( numChecks == 0, NULL );\n        for ( NodeType *n : nodes ) delete n;\n    }\n};\n\ntemplate <typename Factory>\nclass ConcurrencyTestBody : NoAssign {\n    graph &g;\n    std::shared_ptr<ConcurrencyTestBodyData<Factory>> data;\n    Factory &f;\n    const std::vector<opencl_device> &filteredDevices;\n\n    class RoundRobinDeviceSelector : NoAssign {\n    public:\n        RoundRobinDeviceSelector( size_t cnt_, int num_checks_, const std::vector<opencl_device> &filteredDevices_ )\n            : cnt( cnt_ ), num_checks( num_checks_ ), filteredDevices( filteredDevices_ ) {\n        }\n        RoundRobinDeviceSelector( const RoundRobinDeviceSelector &src )\n            : cnt( src.cnt ), num_checks( src.num_checks ), filteredDevices( src.filteredDevices ) {\n            ASSERT( src.num_checks, \"The source has already been copied\" );\n            src.num_checks = 0;\n        }\n        ~RoundRobinDeviceSelector() {\n            ASSERT( !num_checks, \"Device Selector has not been called required number of times\" );\n        }\n        opencl_device operator()( Factory &f ) {\n            const opencl_device_list& devices = f.devices();\n            ASSERT( filteredDevices.size() == devices.size(), \"Incorrect list of devices\" );\n            std::vector<opencl_device>::const_iterator it = filteredDevices.cbegin();\n            for ( auto d = devices.begin(); d != devices.end(); ++d ) ASSERT( (*d) == *it++, \"Incorrect list of devices\" );\n            --num_checks;\n            return *(devices.begin() + cnt++ % devices.size());\n        }\n    private:\n        size_t cnt;\n        mutable int num_checks;\n        const std::vector<opencl_device> &filteredDevices;\n    };\n\npublic:\n    ConcurrencyTestBody( graph &g_, int numThreads, Factory &f_, const std::vector<opencl_device> &filteredDevices_ )\n        : g( g_ )\n        , data( std::make_shared<ConcurrencyTestBodyData<Factory>>( g, numThreads ) )\n        , f( f_ )\n        , filteredDevices( filteredDevices_ ) {\n    }\n    void operator()( int idx ) const {\n        data->barrier.wait();\n\n        const int N = 1 * 1024;\n        const int numChecks = data->numChecks;\n\n        typedef typename ConcurrencyTestBodyData<Factory>::NodeType NodeType;\n        NodeType *n1 = new NodeType( g,\n            opencl_program<Factory>( f, PathToFile( \"test_opencl_node.cl\" ) ).get_kernel( \"ConcurrencyTestIter\" ),\n            RoundRobinDeviceSelector( idx, numChecks, filteredDevices ), f );\n        // n2 is used to test the copy constructor\n        NodeType *n2 = new NodeType( *n1 );\n        delete n1;\n        data->nodes[idx] = n2;\n        n2->set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n\n        data->barrier.wait();\n\n        for ( size_t i = 0; i < data->nodes.size() - 1; ++i ) {\n            make_edge( output_port<0>( *data->nodes[i] ), input_port<0>( *data->nodes[i + 1] ) );\n            make_edge( output_port<1>( *data->nodes[i] ), input_port<1>( *data->nodes[i + 1] ) );\n        }\n        make_edge( output_port<1>( *data->nodes.back() ), data->validationNode );\n        for ( size_t i = 0; i < data->nodes.size() - 1; ++i ) {\n            remove_edge( output_port<0>( *data->nodes[i] ), input_port<0>( *data->nodes[i + 1] ) );\n            if ( i != (size_t)idx )\n                remove_edge( output_port<1>( *data->nodes[i] ), input_port<1>( *data->nodes[i + 1] ) );\n        }\n        if ( (size_t)idx != data->nodes.size() - 1 )\n            remove_edge( output_port<1>( *data->nodes.back() ), data->validationNode );\n\n        data->barrier.wait();\n        if ( idx == 0 ) {\n            // The first node needs two buffers.\n           Harness::FastRandom rnd(42);\n            cl_uint alignment = 0;\n            for (  auto d = filteredDevices.begin(); d != filteredDevices.end(); ++d ) {\n                cl_uint deviceAlignment;\n                (*d).info( CL_DEVICE_MEM_BASE_ADDR_ALIGN, deviceAlignment );\n                alignment = max( alignment, deviceAlignment );\n            }\n            alignment /= CHAR_BIT;\n            cl_uint alignmentMask = ~(alignment-1);\n            for ( int i = 0; i < numChecks; i += 2 ) {\n                for ( int j = 0; j < 2; ++j ) {\n                    opencl_buffer<cl_char, Factory> b1( f, N );\n                    std::fill( b1.begin(), b1.end(), cl_char(1) );\n                    input_port<0>( *n2 ).try_put( b1 );\n                }\n\n                // The subbers are created in pairs from one big buffer\n                opencl_buffer<cl_short, Factory> b( f, 4*N );\n                size_t id0 = (rnd.get() % N) & alignmentMask;\n                opencl_subbuffer<cl_short, Factory> sb1( b, id0, N );\n                std::fill( sb1.begin(), sb1.end(), cl_short(0) );\n                input_port<1>( *n2 ).try_put( sb1 );\n\n                size_t id1 = (rnd.get() % N) & alignmentMask;\n                opencl_subbuffer<cl_short, Factory> sb2 = b.subbuffer( 2*N + id1, N );\n                std::fill( sb2.begin(), sb2.end(), cl_short(0) );\n                input_port<1>( *n2 ).try_put( sb2 );\n            }\n        } else {\n            // Other nodes need only one buffer each because input_port<1> is connected with\n            // output_port<1> of the previous node.\n            for ( int i = 0; i < numChecks; ++i ) {\n                opencl_buffer<cl_char, Factory> b( f, N );\n                std::fill( b.begin(), b.end(), cl_char(1) );\n                input_port<0>( *n2 ).try_put( b );\n            }\n        }\n\n        g.wait_for_all();\n\n        // n2 will be deleted in destructor of ConcurrencyTestBodyData\n    }\n};\n\nconst int concurrencyTestNumRepeats = 5;\n\ntemplate <typename Factory = DefaultFactoryType>\nvoid ConcurrencyTest( const std::vector<opencl_device> &filteredDevices ) {\n    const int numThreads = min( tbb::task_scheduler_init::default_num_threads(), 8 );\n    for ( int i = 0; i < concurrencyTestNumRepeats; ++i ) {\n        tbb::task_group_context ctx( tbb::task_group_context::isolated, tbb::task_group_context::default_traits | tbb::task_group_context::concurrent_wait );\n        graph g( ctx );\n        opencl_device_list dl;\n        Factory f;\n        ConcurrencyTestBody<Factory> body( g, numThreads, f, filteredDevices );\n        NativeParallelFor( numThreads, body );\n    }\n}\n\n#include <unordered_map>\n\nenum FilterPolicy {\n    MAX_DEVICES,\n    ONE_DEVICE\n};\n\ntemplate <FilterPolicy Policy>\nstruct DeviceFilter {\n    DeviceFilter() {\n        filteredDevices.clear();\n    }\n    opencl_device_list operator()( opencl_device_list device_list ) {\n        ASSERT( filteredDevices.size() == 0, NULL );\n        switch ( Policy ) {\n        case MAX_DEVICES:\n        {\n            std::unordered_map<std::string, std::vector<opencl_device>> platforms;\n            for (auto d = device_list.begin(); d != device_list.end(); ++d) {\n                platforms[(*d).platform_name()].push_back(*d);\n            }\n\n            // Select a platform with maximum number of devices.\n            filteredDevices = std::max_element( platforms.begin(), platforms.end(),\n                []( const std::pair<std::string, std::vector<opencl_device>>& p1, const std::pair<std::string, std::vector<opencl_device>>& p2 ) {\n                return p1.second.size() < p2.second.size();\n            } )->second;\n\n            if ( !numRuns ) {\n                REMARK( \"  Chosen devices from the same platform (%s):\\n\", filteredDevices[0].platform_name().c_str() );\n                for ( auto d = filteredDevices.begin(); d != filteredDevices.end(); d++ ) {\n                    REMARK( \"    %s\\n\", (*d).name().c_str() );\n                }\n            }\n\n            if ( filteredDevices.size() < 2 )\n                REPORT_ONCE( \"Known issue: the system does not have several devices in one platform\\n\" );\n            break;\n        }\n        case ONE_DEVICE:\n        {\n            ASSERT( deviceNum < device_list.size(), NULL );\n            opencl_device_list::iterator it = device_list.begin();\n            std::advance( it, deviceNum );\n            filteredDevices.push_back( *it );\n            break;\n        }\n        default:\n            ASSERT( false, NULL );\n        }\n        opencl_device_list dl;\n        for ( auto d = filteredDevices.begin(); d != filteredDevices.end(); ++d ) dl.add( *d );\n\n        ++numRuns;\n\n        return dl;\n    }\n    static opencl_device_list::size_type deviceNum;\n    static int numRuns;\n    static std::vector<opencl_device> filteredDevices;\n};\n\ntemplate <FilterPolicy Policy>\nopencl_device_list::size_type DeviceFilter<Policy>::deviceNum;\ntemplate <FilterPolicy Policy>\nint DeviceFilter<Policy>::numRuns;\ntemplate <FilterPolicy Policy>\nstd::vector<opencl_device> DeviceFilter<Policy>::filteredDevices;\n\nvoid CustomFactoryTest() {\n    REMARK( \"CustomFactoryTest:\\n\" );\n    REMARK( \"  Multi device test:\\n\" );\n    DeviceFilter<MAX_DEVICES>::numRuns = 0;\n    typedef tbb::flow::opencl_factory <DeviceFilter<MAX_DEVICES>> custom_factory;\n    ConcurrencyTest<custom_factory>( DeviceFilter<MAX_DEVICES>::filteredDevices );\n    ASSERT( DeviceFilter<MAX_DEVICES>::numRuns == concurrencyTestNumRepeats, NULL );\n\n    REMARK( \"  One device tests:\\n\" );\n    graph g;\n    opencl_device_list all_devices = interface10::opencl_info::available_devices();\n    for ( int i = 0; i < (int)all_devices.size(); ++i ) {\n        opencl_device_list::const_iterator it = all_devices.begin();\n        std::advance( it, i );\n        REMARK( \"    %s: \", it->name().c_str() );\n        DeviceFilter<ONE_DEVICE>::numRuns = 0;\n        DeviceFilter<ONE_DEVICE>::deviceNum = i;\n        typedef tbb::flow::opencl_factory <DeviceFilter<ONE_DEVICE>> one_device_factory;\n        ConcurrencyTest<one_device_factory>( DeviceFilter<ONE_DEVICE>::filteredDevices );\n        ASSERT( DeviceFilter<ONE_DEVICE>::numRuns == concurrencyTestNumRepeats, NULL );\n        ASSERT( DeviceFilter<ONE_DEVICE>::filteredDevices[0] == *it, NULL );\n        REMARK( \"done\\n\" );\n    }\n    REMARK( \"CustomFactoryTest: done\\n\" );\n}\n\nvoid DefaultConcurrencyTest() {\n    REMARK( \"DefaultConcurrencyTest: \" );\n    // By default, the first device is selected.\n    ConcurrencyTest( { *interface10::opencl_info::available_devices().begin() } );\n    REMARK( \"done\\n\" );\n}\n\n\nvoid SpirKernelTest() {\n    REMARK( \"SpirKernelTest:\\n\" );\n\n    const opencl_device_list devices = interface10::opencl_info::available_devices();\n\n    for( auto d = devices.begin(); d != devices.end(); d++ ) {\n        if( !(*d).extension_available( \"cl_khr_spir\" ) ) {\n            REMARK( \"  Extension 'cl_khr_spir' is not available on the device '%s'\\n\", (*d).name().c_str() );\n            continue;\n        }\n\n        graph g;\n        DefaultFactoryType factory;\n\n        bool init = factory.init( { *d } );\n        ASSERT( init, \"It should be the first initialization\" );\n\n        std::string path_to_file = PathToFile(std::string(\"test_opencl_kernel_\") +\n                                              std::to_string((*d).address_bits()) + std::string(\".spir\") );\n        REMARK(\"  Using SPIR file '%s' on device '%s'\\n\", path_to_file.c_str(), (*d).name().c_str());\n        const int N = 1 * 1024 * 1024;\n        opencl_buffer<float, DefaultFactoryType> b1( factory, N ), b2( factory, N );\n        std::vector<float> v1( N ), v2( N );\n\n        auto i1 = b1.access<write_only>();\n        auto i2 = b2.access<write_only>();\n\n        for ( int i = 0; i < N; ++i ) {\n            i1[i] = v1[i] = float( i );\n            i2[i] = v2[i] = float( 2 * i );\n        }\n\n        typedef opencl_node< tuple<opencl_buffer<float, DefaultFactoryType>, opencl_buffer<float, DefaultFactoryType> >, queueing, DefaultFactoryType > OpenCLNodeType;\n\n        OpenCLNodeType k1( g, opencl_program<DefaultFactoryType>( factory, opencl_program_type::SPIR, path_to_file ).get_kernel( \"custom_summer\" ), factory );\n        k1.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n\n        input_port<0>(k1).try_put( b1 );\n        input_port<1>(k1).try_put( b2 );\n\n        g.wait_for_all();\n\n        // validation\n        for ( int i = 0; i < N; ++i ) {\n            v2[i] += v1[i];\n        }\n\n        ASSERT( memcmp( &b2[0], &v2[0], N*sizeof( float ) ) == 0, \"Validation has failed\" );\n    }\n    REMARK( \"done\\n\" );\n}\n\nvoid PrecompiledKernelTest() {\n    REMARK( \"PrecompiledKernelTest:\\n\" );\n\n    graph g;\n    DefaultFactoryType factory;\n\n    const opencl_device_list devices = interface10::opencl_info::available_devices();\n    opencl_device_list::const_iterator it = std::find_if(\n        devices.cbegin(), devices.cend(),\n        []( const opencl_device &d ) {\n            std::string vendor_name = d.vendor();\n            return std::string::npos != vendor_name.find( \"Intel\" ) && CL_DEVICE_TYPE_GPU == d.type();\n        } );\n\n    if ( it == devices.cend() ) {\n        REPORT( \"Known issue: there is no device in the system that supports the precompiled GPU kernel.\\n\" );\n        return;\n    }\n    bool init = factory.init( { *it } );\n    ASSERT( init, \"It should be the first initialization\" );\n    REMARK( \"  Device name '%s', %s:\", it->name().c_str(), it->version().c_str() );\n\n    const int N = 1 * 1024 * 1024;\n    opencl_buffer<float, DefaultFactoryType> b1( factory, N ), b2( factory, N );\n    std::vector<float> v1( N ), v2( N );\n\n    auto i1 = b1.access<write_only>();\n    auto i2 = b2.access<write_only>();\n\n    for ( int i = 0; i < N; ++i ) {\n        i1[i] = v1[i] = float( i );\n        i2[i] = v2[i] = float( 2 * i );\n    }\n\n    std::string path_to_file = PathToFile(std::string(\"test_opencl_precompiled_kernel_gpu_\") + std::to_string((*it).address_bits()) + std::string(\".ir\"));\n\n    opencl_program<DefaultFactoryType> p( factory, opencl_program_type::PRECOMPILED, path_to_file);\n    opencl_node < tuple<opencl_buffer<float, DefaultFactoryType>, opencl_buffer<float, DefaultFactoryType> >, queueing, DefaultFactoryType > k1(g, p.get_kernel(\"custom_subtractor\"), factory);\n    k1.set_range({ BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) });\n\n    input_port<0>(k1).try_put( b1 );\n    input_port<1>(k1).try_put( b2 );\n\n    g.wait_for_all();\n\n    // validation\n    for ( int i = 0; i < N; ++i ) {\n        v2[i] -= v1[i];\n    }\n\n    ASSERT( memcmp( &b2[0], &v2[0], N*sizeof( float ) ) == 0, \"Validation has failed\" );\n    REMARK( \" done\\n\" );\n}\n\n/*\n    /--functional_node-\\   /-functional_node-\\                       /--functional_node-\\\n    |                  |   |                 |   /--opencl_node--\\   |                  |\n    O Buffer generator O---O  Buffer filler  O---O               O---O Result validator O\n    |                  |   |                 |   |               |   |                  |\n    \\------------------/   \\-----------------/   |               |   \\------------------/\n    |   Multiplier  |\n    /--functional_node-\\   /-functional_node-\\   |               |\n    |                  |   |                 |   |               |\n    O Buffer generator O---O  Buffer filler  O---O               O\n    |                  |   |                 |   \\---------------/\n    \\------------------/   \\-----------------/\n    */\n\ntemplate <typename Key>\nstruct BufferWithKey : public opencl_buffer<int> {\n    typedef typename std::decay<Key>::type KeyType;\n    KeyType my_key;\n    int my_idx;\n\n    // TODO: investigate why defaul ctor is required\n    BufferWithKey() {}\n    BufferWithKey( size_t N, int idx ) : opencl_buffer<int>( N ), my_idx( idx ) {}\n    const KeyType& key() const { return my_key; }\n};\n\ntemplate <typename Key>\nKey KeyGenerator( int i );\n\ntemplate <>\nint KeyGenerator<int>( int i ) { return i; }\n\ntemplate <>\nstd::string KeyGenerator<std::string>( int i ) { return std::to_string( i ); }\n\ntemplate <typename Key>\nBufferWithKey<Key> GenerateRandomBuffer( BufferWithKey<Key> b ) {\n    b.my_key = KeyGenerator<typename std::decay<Key>::type>( b.my_idx );\n    Harness::FastRandom r( b.my_idx );\n    std::generate( b.begin(), b.end(), [&r]() { return r.get(); } );\n    return b;\n}\n\ntemplate <typename Key, typename JP>\nbool KeyMatchingTest() {\n    const int N = 1000;\n    const int numMessages = 100;\n\n    graph g;\n    broadcast_node<int> b( g );\n\n    // Use opencl_async_msg's to have non-blocking map to host\n    function_node<int, opencl_async_msg<BufferWithKey<Key>>>\n        bufGenerator1( g, unlimited, [N]( int i ) { return opencl_async_msg<BufferWithKey<Key>>( BufferWithKey<Key >(N, i) ); } ),\n        bufGenerator2 = bufGenerator1;\n\n    function_node<BufferWithKey<Key>, BufferWithKey<Key>>\n        bufFiller1( g, unlimited, []( const BufferWithKey<Key> &b ) { return GenerateRandomBuffer<Key>( b ); } ),\n        bufFiller2 = bufFiller1;\n\n    opencl_node< tuple< BufferWithKey<Key>, BufferWithKey<Key> >, JP > k( g,\n        opencl_program<>( PathToFile( \"test_opencl_node.cl\" ) ).get_kernel( \"Mul\" ) );\n    k.set_range( { BROKEN_INITIALIZER_LIST_DEDUCTION({ N }) } );\n\n    bool success = true;\n    function_node<BufferWithKey<Key>> checker( g, unlimited, [&success, N]( BufferWithKey<Key> b ) {\n        Harness::FastRandom r( b.my_idx );\n        std::for_each( b.begin(), b.end(), [&success, &r]( int bv ) {\n            const int rv = r.get();\n            if ( bv != rv*rv ) {\n                success = false;\n                return;\n            }\n        } );\n    } );\n\n    make_edge( bufGenerator1, bufFiller1 );\n    make_edge( bufGenerator2, bufFiller2 );\n    make_edge( bufFiller1, input_port<0>( k ) );\n    make_edge( bufFiller2, input_port<1>( k ) );\n    make_edge( output_port<0>( k ), checker );\n\n    for ( int i = 0; i < numMessages; ++i ) {\n        bufGenerator1.try_put( i );\n        bufGenerator2.try_put( numMessages - i - 1 );\n    }\n\n    g.wait_for_all();\n\n    return success;\n}\n\nvoid KeyMatchingTest() {\n    REMARK( \"KeyMatchingTest:\\n\" );\n    REMARK( \"  Queueing negative test: \" );\n    bool res = !KeyMatchingTest<int, queueing>(); // The test should fail with the queueing policy, so the negative result is expected.\n    ASSERT( res, \"Queueing negative test has failed\" );\n    REMARK( \"done\\n  key_matching<int> test: \" );\n    res = KeyMatchingTest<int, key_matching<int>>();\n    ASSERT( res, \"key_matching<int> test has failed\" );\n    REMARK( \"done\\n  key_matching<string&> test: \" );\n    res = KeyMatchingTest<std::string&, key_matching<std::string&>>();\n    ASSERT( res, \"key_matching<string&> test has failed\" );\n    REMARK( \"done\\n\" );\n    REMARK( \"KeyMatchingTest: done\\n\" );\n}\n\nint TestMain() {\n\n\n    TestArgumentPassing();\n\n    SimpleDependencyTest();\n    BroadcastTest();\n    DiamondDependencyTest();\n    LoopTest();\n\n    DefaultConcurrencyTest();\n    CustomFactoryTest();\n\n    SpirKernelTest();\n#if !__APPLE__\n    // Consider better support for precompiled programs on Apple\n    PrecompiledKernelTest();\n#endif\n\n    KeyMatchingTest();\n\n    return Harness::Done;\n}\n#else\n#define HARNESS_SKIP_TEST 1\n#include \"harness.h\"\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_openmp.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test mixing OpenMP and TBB\n\n/* SCR #471\n Below is workaround to compile test within environment of Intel Compiler\n but by Microsoft Compiler. So, there is wrong \"omp.h\" file included and\n manifest section is missed from .exe file - restoring here.\n\n As of Visual Studio 2010, crtassem.h is no longer shipped.\n */\n#if !defined(__INTEL_COMPILER) && _MSC_VER >= 1400 && _MSC_VER < 1600\n    #include <crtassem.h>\n    #if !defined(_OPENMP)\n        #define _OPENMP\n        #if defined(_DEBUG)\n            #pragma comment(lib, \"vcompd\")\n        #else   // _DEBUG\n            #pragma comment(lib, \"vcomp\")\n        #endif  // _DEBUG\n    #endif // _OPENMP\n\n    #if defined(_DEBUG)\n        #if defined(_M_IX86)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".DebugOpenMP' \"      \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='x86' \"                                  \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #elif defined(_M_X64)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".DebugOpenMP' \"      \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='amd64' \"                                \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #elif defined(_M_IA64)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".DebugOpenMP' \"      \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='ia64' \"                                 \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #endif\n    #else   // _DEBUG\n        #if defined(_M_IX86)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".OpenMP' \"           \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='x86' \"                                  \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #elif defined(_M_X64)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".OpenMP' \"           \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='amd64' \"                                \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #elif defined(_M_IA64)\n            #pragma comment(linker,\"/manifestdependency:\\\"type='win32' \"        \\\n                \"name='\" __LIBRARIES_ASSEMBLY_NAME_PREFIX \".OpenMP' \"           \\\n                \"version='\" _CRT_ASSEMBLY_VERSION \"' \"                          \\\n                \"processorArchitecture='ia64' \"                                 \\\n                \"publicKeyToken='\" _VC_ASSEMBLY_PUBLICKEYTOKEN \"'\\\"\")\n        #endif\n    #endif  // _DEBUG\n    #define _OPENMP_NOFORCE_MANIFEST\n#endif\n\n#include <omp.h>\n\n\ntypedef short T;\n\nvoid SerialConvolve( T c[], const T a[], int m, const T b[], int n ) {\n    for( int i=0; i<m+n-1; ++i ) {\n        int start = i<n ? 0 : i-n+1;\n        int finish = i<m ? i+1 : m;\n        T sum = 0;\n        for( int j=start; j<finish; ++j )\n            sum += a[j]*b[i-j];\n        c[i] = sum;\n    }\n}\n\n#define OPENMP_ASYNC_SHUTDOWN_BROKEN (__INTEL_COMPILER<=1400 && __linux__)\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness.h\"\n\nusing namespace tbb;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous warning about short+=short\n    #pragma warning( push )\n    #pragma warning( disable: 4244 )\n#endif\n\nclass InnerBody: NoAssign {\n    const T* my_a;\n    const T* my_b;\n    const int i;\npublic:\n    T sum;\n    InnerBody( T /*c*/[], const T a[], const T b[], int ii ) :\n        my_a(a), my_b(b), i(ii), sum(0)\n    {}\n    InnerBody( InnerBody& x, split ) :\n        my_a(x.my_a), my_b(x.my_b), i(x.i), sum(0)\n    {\n    }\n    void join( InnerBody& x ) {sum += x.sum;}\n    void operator()( const blocked_range<int>& range ) {\n        for( int j=range.begin(); j!=range.end(); ++j )\n            sum += my_a[j]*my_b[i-j];\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif\n\n//! Test OpenMMP loop around TBB loop\nvoid OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {\n    REMARK(\"testing OpenMP loop around TBB loop\\n\");\n#pragma omp parallel\n    {\n        task_scheduler_init init;\n#pragma omp for\n        for( int i=0; i<m+n-1; ++i ) {\n            int start = i<n ? 0 : i-n+1;\n            int finish = i<m ? i+1 : m;\n            InnerBody body(c,a,b,i);\n            parallel_reduce( blocked_range<int>(start,finish,10), body );\n            c[i] = body.sum;\n        }\n    }\n}\n\nclass OuterBody: NoAssign {\n    const T* my_a;\n    const T* my_b;\n    T* my_c;\n    const int m;\n    const int n;\npublic:\n    OuterBody( T c[], const T a[], int m_, const T b[], int n_ ) :\n        my_a(a), my_b(b), my_c(c), m(m_), n(n_)\n    {}\n    void operator()( const blocked_range<int>& range ) const {\n        for( int i=range.begin(); i!=range.end(); ++i ) {\n            int start = i<n ? 0 : i-n+1;\n            int finish = i<m ? i+1 : m;\n            T sum = 0;\n#pragma omp parallel for reduction(+:sum)\n            for( int j=start; j<finish; ++j )\n                sum += my_a[j]*my_b[i-j];\n            my_c[i] = sum;\n        }\n    }\n};\n\n//! Test TBB loop around OpenMP loop\nvoid TBB_OpenMP_Convolve( T c[], const T a[], int m, const T b[], int n ) {\n    REMARK(\"testing TBB loop around OpenMP loop\\n\");\n    parallel_for( blocked_range<int>(0,m+n-1,10), OuterBody( c, a, m, b, n ) );\n}\n\n#if __INTEL_COMPILER\n// A regression test on OpenMP affinity settings affecting TBB.\n// Testing only with __INTEL_COMPILER because we do not provide interoperability with other OpenMP implementations.\n\n#define __TBB_NUM_THREADS_AFFECTED_BY_LIBIOMP (KMP_VERSION_BUILD<20150922)\n\nvoid TestNumThreads() {\n#if __TBB_NUM_THREADS_AFFECTED_BY_LIBIOMP\n    REPORT(\"Known issue: the default number of threads is affected by OpenMP affinity\\n\");\n#else\n    REMARK(\"Compare default number of threads for OpenMP and TBB\\n\");\n    Harness::SetEnv(\"KMP_AFFINITY\",\"compact\");\n    // Make an OpenMP call before initializing TBB\n    int omp_nthreads = omp_get_max_threads();\n    #pragma omp parallel\n    {}\n    int tbb_nthreads = tbb::task_scheduler_init::default_num_threads();\n    REMARK(\"# of threads (OpenMP): %d\\n\", omp_nthreads);\n    REMARK(\"# of threads (TBB): %d\\n\", tbb_nthreads);\n    // For the purpose of testing, assume that OpenMP and TBB should utilize the same # of threads.\n    // If it's not true on some platforms, the test will need to be adjusted.\n    ASSERT( tbb_nthreads==omp_nthreads, \"Initialization of TBB is possibly affected by OpenMP\");\n#endif\n}\n#endif // __INTEL_COMPILER\n\nconst int M = 17*17;\nconst int N = 13*13;\nT A[M], B[N];\nT expected[M+N], actual[M+N];\n\ntemplate <class Func>\nvoid RunTest( Func F, int m, int n, int p, bool wait_workers = false ) {\n    task_scheduler_init init( p );\n    memset( actual, -1, (m+n)*sizeof(T) );\n    F( actual, A, m, B, n );\n    ASSERT( memcmp(actual, expected, (m+n-1)*sizeof(T))==0, NULL );\n    if (wait_workers) init.blocking_terminate(std::nothrow);\n    else              init.terminate();\n}\n\nint TestMain () {\n#if __INTEL_COMPILER\n    TestNumThreads(); // Testing initialization-related behavior; must be the first\n#endif // __INTEL_COMPILER\n    MinThread = 1;\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        for( int m=1; m<=M; m*=17 ) {\n            for( int n=1; n<=N; n*=13 ) {\n                for( int i=0; i<m; ++i ) A[i] = T(1+i/5);\n                for( int i=0; i<n; ++i ) B[i] = T(1+i/7);\n                SerialConvolve( expected, A, m, B, n );\n                RunTest( OpenMP_TBB_Convolve, m, n, p );\n                RunTest( TBB_OpenMP_Convolve, m, n, p\n#if OPENMP_ASYNC_SHUTDOWN_BROKEN\n                    ,true\n#endif\n                    );\n            }\n        }\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_overwrite_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#define TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE 1\n#endif\n\n#include \"harness_graph.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#define N 300\n#define T 4\n#define M 5\n\ntemplate< typename R >\nvoid simple_read_write_tests() {\n    tbb::flow::graph g;\n    tbb::flow::overwrite_node<R> n(g);\n\n    for ( int t = 0; t < T; ++t ) {\n        R v0(N+1);\n        std::vector< harness_counting_receiver<R> > r(M, harness_counting_receiver<R>(g));\n\n        ASSERT( n.is_valid() == false, NULL );\n        ASSERT( n.try_get( v0 ) == false, NULL );\n        if ( t % 2 ) {\n            ASSERT( n.try_put( static_cast<R>(N) ), NULL );\n            ASSERT( n.is_valid() == true, NULL );\n            ASSERT( n.try_get( v0 ) == true, NULL );\n            ASSERT( v0 == R(N), NULL );\n       }\n\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::make_edge( n, r[i] );\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        ASSERT(n.successor_count() == M, NULL);\n        typename tbb::flow::overwrite_node<R>::successor_list_type my_succs;\n        n.copy_successors(my_succs);\n        ASSERT(my_succs.size() == M, NULL);\n        ASSERT(n.predecessor_count() == 0, NULL);\n#endif\n\n        for (int i = 0; i < N; ++i ) {\n            R v1(static_cast<R>(i));\n            ASSERT( n.try_put( v1 ), NULL );\n            ASSERT( n.is_valid() == true, NULL );\n            for (int j = 0; j < N; ++j ) {\n                R v2(0);\n                ASSERT( n.try_get( v2 ), NULL );\n                ASSERT( v1 == v2, NULL );\n            }\n        }\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == N+t%2, NULL );\n        }\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::remove_edge( n, r[i] );\n        }\n        ASSERT( n.try_put( R(0) ), NULL );\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == N+t%2, NULL );\n        }\n        n.clear();\n        ASSERT( n.is_valid() == false, NULL );\n        ASSERT( n.try_get( v0 ) == false, NULL );\n    }\n}\n\ntemplate< typename R >\nclass native_body : NoAssign {\n    tbb::flow::overwrite_node<R> &my_node;\n\npublic:\n\n     native_body( tbb::flow::overwrite_node<R> &n ) : my_node(n) {}\n\n     void operator()( int i ) const {\n         R v1(static_cast<R>(i));\n         ASSERT( my_node.try_put( v1 ), NULL );\n         ASSERT( my_node.is_valid() == true, NULL );\n     }\n};\n\ntemplate< typename R >\nvoid parallel_read_write_tests() {\n    tbb::flow::graph g;\n    tbb::flow::overwrite_node<R> n(g);\n    //Create a vector of identical nodes\n    std::vector< tbb::flow::overwrite_node<R> > ow_vec(2, n);\n\n    for (size_t node_idx=0; node_idx<ow_vec.size(); ++node_idx) {\n    for ( int t = 0; t < T; ++t ) {\n        std::vector< harness_counting_receiver<R> > r(M, harness_counting_receiver<R>(g));\n\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::make_edge( ow_vec[node_idx], r[i] );\n        }\n        R v0;\n        ASSERT( ow_vec[node_idx].is_valid() == false, NULL );\n        ASSERT( ow_vec[node_idx].try_get( v0 ) == false, NULL );\n\n        NativeParallelFor( N, native_body<R>( ow_vec[node_idx] ) );\n\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == N, NULL );\n        }\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::remove_edge( ow_vec[node_idx], r[i] );\n        }\n        ASSERT( ow_vec[node_idx].try_put( R(0) ), NULL );\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == N, NULL );\n        }\n        ow_vec[node_idx].clear();\n        ASSERT( ow_vec[node_idx].is_valid() == false, NULL );\n        ASSERT( ow_vec[node_idx].try_get( v0 ) == false, NULL );\n    }\n    }\n}\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    simple_read_write_tests<int>();\n    simple_read_write_tests<float>();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        parallel_read_write_tests<int>();\n        parallel_read_write_tests<float>();\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n        test_reserving_nodes<tbb::flow::overwrite_node, int>();\n#endif\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract_on_node<tbb::flow::overwrite_node, int>();\n    test_extract_on_node<tbb::flow::overwrite_node, float>();\n#endif\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_do.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_do.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n#include \"harness.h\"\n#include \"harness_cpu.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif /* _MSC_VER && _Wp64 */\n\n#define N_DEPTHS     20\n\nstatic tbb::atomic<int> g_values_counter;\n\nclass value_t {\n    size_t x;\n    value_t& operator= ( const value_t& );\npublic:\n    value_t ( size_t xx ) : x(xx) { ++g_values_counter; }\n    value_t ( const value_t& v ) : x(v.x) { ++g_values_counter; }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    value_t ( value_t&& v ) : x(v.x) { ++g_values_counter; }\n#endif\n    ~value_t () { --g_values_counter; }\n    size_t value() const volatile { return x; }\n};\n\n#include \"harness_iterator.h\"\n\nstatic size_t g_tasks_expected = 0;\nstatic tbb::atomic<size_t> g_tasks_observed;\n\nsize_t FindNumOfTasks ( size_t max_depth ) {\n    if( max_depth == 0 )\n        return 1;\n    return  max_depth * FindNumOfTasks( max_depth - 1 ) + 1;\n}\n\n//! Simplest form of the parallel_do functor object.\nclass FakeTaskGeneratorBody {\npublic:\n    //! The simplest form of the function call operator\n    /** It does not allow adding new tasks during its execution. **/\n    void operator() ( value_t depth ) const {\n        g_tasks_observed += FindNumOfTasks(depth.value());\n    }\n};\n\n/** Work item is passed by reference here. **/\nclass FakeTaskGeneratorBody_RefVersion {\npublic:\n    void operator() ( value_t& depth ) const {\n        g_tasks_observed += FindNumOfTasks(depth.value());\n    }\n};\n\n/** Work item is passed by reference to const here. **/\nclass FakeTaskGeneratorBody_ConstRefVersion {\npublic:\n    void operator() ( const value_t& depth ) const {\n        g_tasks_observed += FindNumOfTasks(depth.value());\n    }\n};\n\n/** Work item is passed by reference to volatile here. **/\nclass FakeTaskGeneratorBody_VolatileRefVersion {\npublic:\n    void operator() ( volatile value_t& depth, tbb::parallel_do_feeder<value_t>& ) const {\n        g_tasks_observed += FindNumOfTasks(depth.value());\n    }\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n/** Work item is passed by rvalue reference here. **/\nclass FakeTaskGeneratorBody_RvalueRefVersion {\npublic:\n    void operator() ( value_t&& depth ) const {\n        g_tasks_observed += FindNumOfTasks(depth.value());\n    }\n};\n#endif\n\nvoid do_work ( const value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) {\n    ++g_tasks_observed;\n    value_t new_value(depth.value()-1);\n    for( size_t i = 0; i < depth.value(); ++i) {\n        if (i%2) feeder.add( new_value ); // pass lvalue\n        else     feeder.add( value_t(depth.value()-1) ); // pass rvalue\n    }\n}\n\n//! Standard form of the parallel_do functor object.\n/** Allows adding new work items on the fly. **/\nclass TaskGeneratorBody\n{\npublic:\n    //! This form of the function call operator can be used when the body needs to add more work during the processing\n    void operator() ( value_t depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(depth, feeder);\n    }\nprivate:\n    // Assert that parallel_do does not ever access body constructors\n    TaskGeneratorBody () {}\n    TaskGeneratorBody ( const TaskGeneratorBody& );\n    // These functions need access to the default constructor\n    template<class Body, class Iterator> friend void TestBody( size_t );\n    template<class Body, class Iterator> friend void TestBody_MoveOnly( size_t );\n};\n\n/** Work item is passed by reference here. **/\nclass TaskGeneratorBody_RefVersion\n{\npublic:\n    void operator() ( value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(depth, feeder);\n    }\n};\n\n/** Work item is passed as const here. Compilers must ignore the const qualifier. **/\nclass TaskGeneratorBody_ConstVersion\n{\npublic:\n    void operator() ( const value_t depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(depth, feeder);\n    }\n};\n\n/** Work item is passed by reference to const here. **/\nclass TaskGeneratorBody_ConstRefVersion\n{\npublic:\n    void operator() ( const value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(depth, feeder);\n    }\n};\n\n/** Work item is passed by reference to volatile here. **/\nclass TaskGeneratorBody_VolatileRefVersion\n{\npublic:\n    void operator() ( volatile value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(const_cast<value_t&>(depth), feeder);\n    }\n};\n\n/** Work item is passed by reference to const volatile here. **/\nclass TaskGeneratorBody_ConstVolatileRefVersion\n{\npublic:\n    void operator() ( const volatile value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(const_cast<value_t&>(depth), feeder);\n    }\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n/** Work item is passed by rvalue reference here. **/\nclass TaskGeneratorBody_RvalueRefVersion\n{\npublic:\n    void operator() ( value_t&& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {\n        do_work(depth, feeder);\n    }\n};\n#endif\n\nstatic value_t g_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<class Body, class Iterator>\nvoid TestBody_MoveIter ( const Body& body, Iterator begin, Iterator end  ) {\n    typedef std::move_iterator<Iterator> MoveIterator;\n    MoveIterator mbegin(begin);\n    MoveIterator mend(end);\n    g_tasks_observed = 0;\n    tbb::parallel_do(mbegin, mend, body);\n    ASSERT (g_tasks_observed == g_tasks_expected, NULL);\n}\n\ntemplate<class Body, class Iterator>\nvoid TestBody_MoveOnly ( size_t depth ) {\n    typedef typename std::iterator_traits<Iterator>::value_type value_type;\n    value_type a_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};\n    TestBody_MoveIter( Body(), Iterator(a_depths), Iterator(a_depths + depth));\n}\n#endif\n\ntemplate<class Body, class Iterator>\nvoid TestBody ( size_t depth ) {\n    typedef typename std::iterator_traits<Iterator>::value_type value_type;\n    value_type a_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};\n    Body body;\n    Iterator begin(a_depths);\n    Iterator end(a_depths + depth);\n    g_tasks_observed = 0;\n    tbb::parallel_do(begin, end, body);\n    ASSERT (g_tasks_observed == g_tasks_expected, NULL);\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestBody_MoveIter( body, Iterator(a_depths), Iterator(a_depths + depth) );\n#endif\n}\n\ntemplate<class Iterator>\nvoid TestIterator_Common ( size_t depth ) {\n    TestBody<FakeTaskGeneratorBody, Iterator> (depth);\n    TestBody<FakeTaskGeneratorBody_ConstRefVersion, Iterator> (depth);\n    TestBody<TaskGeneratorBody, Iterator> (depth);\n    TestBody<TaskGeneratorBody_ConstVersion, Iterator> (depth);\n    TestBody<TaskGeneratorBody_ConstRefVersion, Iterator> (depth);\n}\n\ntemplate<class Iterator>\nvoid TestIterator_Const ( size_t depth ) {\n    TestIterator_Common<Iterator>(depth);\n    TestBody<TaskGeneratorBody_ConstVolatileRefVersion, Iterator> (depth);\n}\n\ntemplate<class Iterator>\nvoid TestIterator_Modifiable ( size_t depth ) {\n    TestIterator_Const<Iterator>(depth);\n    TestBody<FakeTaskGeneratorBody_RefVersion, Iterator> (depth);\n    TestBody<FakeTaskGeneratorBody_VolatileRefVersion, Iterator> (depth);\n    TestBody<TaskGeneratorBody_RefVersion, Iterator> (depth);\n    TestBody<TaskGeneratorBody_VolatileRefVersion, Iterator> (depth);\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestBody_MoveOnly<FakeTaskGeneratorBody_RvalueRefVersion, Iterator> (depth);\n    TestBody_MoveOnly<TaskGeneratorBody_RvalueRefVersion, Iterator> (depth);\n#endif\n}\n\ntemplate<class Iterator>\nvoid TestIterator_Movable ( size_t depth ) {\n    TestIterator_Common<Iterator>(depth);\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestBody<FakeTaskGeneratorBody_RvalueRefVersion, Iterator> (depth);\n    TestBody<TaskGeneratorBody_RvalueRefVersion, Iterator> (depth);\n#endif\n}\n\nvoid Run( int /*nthread*/ ) {\n    for( size_t depth = 0; depth <= N_DEPTHS; ++depth ) {\n        g_tasks_expected = 0;\n        for ( size_t i=0; i < depth; ++i )\n            g_tasks_expected += FindNumOfTasks( g_depths[i].value() );\n        // Test for iterators over values convertible to work item type\n        TestIterator_Movable<size_t*>(depth);\n        // Test for random access iterators\n        TestIterator_Modifiable<value_t*>(depth);\n        // Test for input iterators\n        TestIterator_Modifiable<Harness::InputIterator<value_t> >(depth);\n        // Test for forward iterators\n        TestIterator_Modifiable<Harness::ForwardIterator<value_t> >(depth);\n        // Test for const random access iterators\n        TestIterator_Const<Harness::ConstRandomIterator<value_t> >(depth);\n    }\n}\n\nconst size_t elements = 10000;\nconst size_t init_sum = 0;\ntbb::atomic<size_t> element_counter;\n\ntemplate<size_t K>\nstruct set_to {\n    void operator()(size_t& x) const {\n        x = K;\n        ++element_counter;\n    }\n};\n\n#include \"test_range_based_for.h\"\n#include <functional>\n#include <deque>\n\nvoid range_do_test() {\n    using namespace range_based_for_support_tests;\n    std::deque<size_t> v(elements, 0);\n\n    // iterator, const and non-const range check\n    element_counter = 0;\n    tbb::parallel_do(v.begin(), v.end(), set_to<1>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    element_counter = 0;\n    tbb::parallel_do(v, set_to<0>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum, \"elements of v not all zeros\");\n\n    element_counter = 0;\n    tbb::parallel_do(tbb::blocked_range<std::deque<size_t>::iterator>(v.begin(), v.end()), set_to<1>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    // same as above with context group\n    element_counter = 0;\n    tbb::task_group_context context;\n    tbb::parallel_do(v.begin(), v.end(), set_to<0>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum, \"elements of v not all ones\");\n\n    element_counter = 0;\n    tbb::parallel_do(v, set_to<1>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    element_counter = 0;\n    tbb::parallel_do(tbb::blocked_range<std::deque<size_t>::iterator>(v.begin(), v.end()), set_to<0>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum, \"elements of v not all zeros\");\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nnamespace TestMoveSem {\n    struct MovePreferable : Movable {\n        MovePreferable() : Movable(), addtofeed(true) {}\n        MovePreferable(bool addtofeed_) : Movable(), addtofeed(addtofeed_) {}\n        MovePreferable(MovePreferable&& other) : Movable(std::move(other)), addtofeed(other.addtofeed) {};\n        // base class is explicitly initialized in the copy ctor to avoid -Wextra warnings\n        MovePreferable(const MovePreferable& other) : Movable(other) { REPORT(\"Error: copy ctor prefered.\\n\"); };\n        MovePreferable& operator=(const MovePreferable&) { REPORT(\"Error: copy assing operator prefered.\\n\"); return *this; }\n        bool addtofeed;\n    };\n    struct MoveOnly : MovePreferable, NoCopy {\n        MoveOnly() : MovePreferable() {}\n        MoveOnly(bool addtofeed_) : MovePreferable(addtofeed_) {}\n        MoveOnly(MoveOnly&& other) : MovePreferable(std::move(other)) {};\n    };\n}\n\ntemplate<typename T>\nvoid RecordAndAdd(const T& in, tbb::parallel_do_feeder<T>& feeder) {\n    ASSERT(in.alive, \"Got dead object in body\");\n    size_t i = ++g_tasks_observed;\n    if (in.addtofeed) {\n        if (i%2) feeder.add(T(false));\n        else {\n            T a(false);\n            feeder.add(std::move(a));\n        }\n    }\n}\n// Take an item by rvalue reference\ntemplate<typename T>\nstruct TestMoveIteratorBody {\n    void operator() (T&& in, tbb::parallel_do_feeder<T>& feeder) const { RecordAndAdd(in, feeder); }\n};\n// Take an item by value\ntemplate<typename T>\nstruct TestMoveIteratorBodyByValue {\n    void operator() (T in, tbb::parallel_do_feeder<T>& feeder) const { RecordAndAdd(in, feeder); }\n};\n\ntemplate<typename Iterator, typename Body>\nvoid TestMoveIterator() {\n    typedef typename std::iterator_traits<Iterator>::value_type value_type;\n\n    Body body;\n    const size_t size = 65;\n    g_tasks_observed = 0;\n    value_type a[size];\n    tbb::parallel_do( std::make_move_iterator(Iterator(a)), std::make_move_iterator(Iterator(a+size)), body );\n    ASSERT(size * 2  == g_tasks_observed, NULL);\n}\n\ntemplate<typename T>\nvoid DoTestMoveSemantics() {\n    TestMoveIterator< Harness::InputIterator<T>, TestMoveIteratorBody<T> >();\n    TestMoveIterator< Harness::ForwardIterator<T>, TestMoveIteratorBody<T> >();\n    TestMoveIterator< Harness::RandomIterator<T>, TestMoveIteratorBody<T> >();\n\n    TestMoveIterator< Harness::InputIterator<T>, TestMoveIteratorBodyByValue<T> >();\n    TestMoveIterator< Harness::ForwardIterator<T>, TestMoveIteratorBodyByValue<T> >();\n    TestMoveIterator< Harness::RandomIterator<T>, TestMoveIteratorBodyByValue<T> >();\n}\n\nvoid TestMoveSemantics() {\n    DoTestMoveSemantics<TestMoveSem::MovePreferable>();\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT && !__TBB_IS_COPY_CONSTRUCTIBLE_BROKEN\n    //  parallel_do uses is_copy_constructible to support non-copyable types\n    DoTestMoveSemantics<TestMoveSem::MoveOnly>();\n#endif\n}\n#else /* __TBB_CPP11_RVALUE_REF_PRESENT */\nvoid TestMoveSemantics() {\n    REPORT(\"Known issue: move support tests are skipped.\\n\");\n}\n#endif\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    g_values_counter = 0;\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n        Run(p);\n        range_do_test();\n        // Test that all workers sleep when no work\n        TestCPUUserTime(p);\n    }\n    // This check must be performed after the scheduler terminated because only in this\n    // case there is a guarantee that the workers already destroyed their last tasks.\n    ASSERT( g_values_counter == 0, \"Value objects were leaked\" );\n\n    TestMoveSemantics();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_for.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test for function template parallel_for.h\n\n// These features are pure additions and thus can be always \"on\" in the test\n#define TBB_PREVIEW_SERIAL_SUBSET 1\n#include \"harness_defs.h\"\n\n#if _MSC_VER\n#pragma warning (push)\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Suppress pointless \"unreachable code\" warning.\n    #pragma warning (disable: 4702)\n#endif\n#if defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif\n\n#define _SCL_SECURE_NO_WARNINGS\n#endif //#if _MSC_VER\n\n#include \"harness_defs.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/atomic.h\"\n#include \"harness_assert.h\"\n#include \"harness.h\"\n\nstatic tbb::atomic<int> FooBodyCount;\n\n//! A range object whose only public members are those required by the Range concept.\ntemplate<size_t Pad>\nclass FooRange {\n    //! Start of range\n    int start;\n\n    //! Size of range\n    int size;\n    FooRange( int start_, int size_ ) : start(start_), size(size_) {\n        zero_fill<char>(pad, Pad);\n        pad[Pad-1] = 'x';\n    }\n    template<typename Flavor_, size_t Pad_> friend void Flog( int nthread );\n    template<size_t Pad_> friend class FooBody;\n    void operator&();\n\n    char pad[Pad];\npublic:\n    bool empty() const {return size==0;}\n    bool is_divisible() const {return size>1;}\n    FooRange( FooRange& original, tbb::split ) : size(original.size/2) {\n        original.size -= size;\n        start = original.start+original.size;\n        ASSERT( original.pad[Pad-1]=='x', NULL );\n        pad[Pad-1] = 'x';\n    }\n};\n\n//! A range object whose only public members are those required by the parallel_for.h body concept.\ntemplate<size_t Pad>\nclass FooBody {\n    static const int LIVE = 0x1234;\n    tbb::atomic<int>* array;\n    int state;\n    friend class FooRange<Pad>;\n    template<typename Flavor_, size_t Pad_> friend void Flog( int nthread );\n    FooBody( tbb::atomic<int>* array_ ) : array(array_), state(LIVE) {}\npublic:\n    ~FooBody() {\n        --FooBodyCount;\n        for( size_t i=0; i<sizeof(*this); ++i )\n            reinterpret_cast<char*>(this)[i] = -1;\n    }\n    //! Copy constructor\n    FooBody( const FooBody& other ) : array(other.array), state(other.state) {\n        ++FooBodyCount;\n        ASSERT( state==LIVE, NULL );\n    }\n    void operator()( FooRange<Pad>& r ) const {\n        for( int k=0; k<r.size; ++k ) {\n            const int i = array[r.start+k]++;\n            ASSERT( i==0, NULL );\n        }\n    }\n};\n\n#include \"tbb/tick_count.h\"\n\nstatic const int N = 500;\nstatic tbb::atomic<int> Array[N];\n\nstruct serial_tag {};\nstruct parallel_tag {};\nstruct empty_partitioner_tag {};\n\ntemplate <typename Flavor, typename Partitioner, typename Range, typename Body>\nstruct Invoker;\n\n#if TBB_PREVIEW_SERIAL_SUBSET\ntemplate <typename Range, typename Body>\nstruct Invoker<serial_tag, empty_partitioner_tag, Range, Body> {\n    void operator()( const Range& r, const Body& body, empty_partitioner_tag& ) {\n        tbb::serial:: parallel_for( r, body );\n    }\n};\ntemplate <typename Partitioner, typename Range, typename Body>\nstruct Invoker<serial_tag, Partitioner, Range, Body> {\n    void operator()( const Range& r, const Body& body, Partitioner& p ) {\n        tbb::serial:: parallel_for( r, body, p );\n    }\n};\n#endif\n\ntemplate <typename Range, typename Body>\nstruct Invoker<parallel_tag, empty_partitioner_tag, Range, Body> {\n    void operator()( const Range& r, const Body& body, empty_partitioner_tag& ) {\n        tbb:: parallel_for( r, body );\n    }\n};\n\ntemplate <typename Partitioner, typename Range, typename Body>\nstruct Invoker<parallel_tag, Partitioner, Range, Body> {\n    void operator()( const Range& r, const Body& body, Partitioner& p ) {\n        tbb:: parallel_for( r, body, p );\n    }\n};\n\ntemplate <typename Flavor, typename Partitioner, typename T, typename Body>\nstruct InvokerStep;\n\n#if TBB_PREVIEW_SERIAL_SUBSET\ntemplate <typename T, typename Body>\nstruct InvokerStep<serial_tag, empty_partitioner_tag, T, Body> {\n    void operator()( const T& first, const T& last, const Body& f, empty_partitioner_tag& ) {\n        tbb::serial:: parallel_for( first, last, f );\n    }\n    void operator()( const T& first, const T& last, const T& step, const Body& f, empty_partitioner_tag& ) {\n        tbb::serial:: parallel_for( first, last, step, f );\n    }\n};\n\ntemplate <typename Partitioner, typename T, typename Body>\nstruct InvokerStep<serial_tag, Partitioner, T, Body> {\n    void operator()( const T& first, const T& last, const Body& f, Partitioner& p ) {\n        tbb::serial:: parallel_for( first, last, f, p);\n    }\n    void operator()( const T& first, const T& last, const T& step, const Body& f, Partitioner& p ) {\n        tbb::serial:: parallel_for( first, last, step, f, p );\n    }\n};\n#endif\n\ntemplate <typename T, typename Body>\nstruct InvokerStep<parallel_tag, empty_partitioner_tag, T, Body> {\n    void operator()( const T& first, const T& last, const Body& f, empty_partitioner_tag& ) {\n        tbb:: parallel_for( first, last, f );\n    }\n    void operator()( const T& first, const T& last, const T& step, const Body& f, empty_partitioner_tag& ) {\n        tbb:: parallel_for( first, last, step, f );\n    }\n};\n\ntemplate <typename Partitioner, typename T, typename Body>\nstruct InvokerStep<parallel_tag, Partitioner, T, Body> {\n    void operator()( const T& first, const T& last, const Body& f, Partitioner& p ) {\n        tbb:: parallel_for( first, last, f, p );\n    }\n    void operator()( const T& first, const T& last, const T& step, const Body& f, Partitioner& p ) {\n        tbb:: parallel_for( first, last, step, f, p );\n    }\n};\n\ntemplate<typename Flavor, size_t Pad>\nvoid Flog( int nthread ) {\n    tbb::tick_count T0 = tbb::tick_count::now();\n    for( int i=0; i<N; ++i ) {\n        for ( int mode = 0; mode < 4; ++mode) {\n            FooRange<Pad> r( 0, i );\n            const FooRange<Pad> rc = r;\n            FooBody<Pad> f( Array );\n            const FooBody<Pad> fc = f;\n            memset( Array, 0, sizeof(Array) );\n            FooBodyCount = 1;\n            switch (mode) {\n            case 0: {\n                empty_partitioner_tag p;\n                Invoker< Flavor, empty_partitioner_tag, FooRange<Pad>, FooBody<Pad> > invoke_for;\n                invoke_for( rc, fc, p );\n            }\n                break;\n            case 1: {\n                Invoker< Flavor, const tbb::simple_partitioner, FooRange<Pad>, FooBody<Pad> > invoke_for;\n                invoke_for( rc, fc, tbb::simple_partitioner() );\n            }\n                break;\n            case 2: {\n                Invoker< Flavor, const tbb::auto_partitioner, FooRange<Pad>, FooBody<Pad> > invoke_for;\n                invoke_for( rc, fc, tbb::auto_partitioner() );\n            }\n                break;\n            case 3: {\n                static tbb::affinity_partitioner affinity;\n                Invoker< Flavor, tbb::affinity_partitioner, FooRange<Pad>, FooBody<Pad> > invoke_for;\n                invoke_for( rc, fc, affinity );\n            }\n                break;\n            }\n            for( int j=0; j<i; ++j )\n                ASSERT( Array[j]==1, NULL );\n            for( int j=i; j<N; ++j )\n                ASSERT( Array[j]==0, NULL );\n            ASSERT( FooBodyCount==1, NULL );\n        }\n    }\n    tbb::tick_count T1 = tbb::tick_count::now();\n    REMARK(\"time=%g\\tnthread=%d\\tpad=%d\\n\",(T1-T0).seconds(),nthread,int(Pad));\n}\n\n// Testing parallel_for with step support\nconst size_t PFOR_BUFFER_TEST_SIZE = 1024;\n// test_buffer has some extra items beyond its right bound\nconst size_t PFOR_BUFFER_ACTUAL_SIZE = PFOR_BUFFER_TEST_SIZE + 1024;\nsize_t pfor_buffer[PFOR_BUFFER_ACTUAL_SIZE];\n\ntemplate<typename T>\nclass TestFunctor{\npublic:\n    void operator ()(T index) const {\n        pfor_buffer[index]++;\n    }\n};\n\n#include <stdexcept> // std::invalid_argument\n\ntemplate <typename Flavor, typename T, typename Partitioner>\nvoid TestParallelForWithStepSupportHelper(Partitioner& p)\n{\n    const T pfor_buffer_test_size = static_cast<T>(PFOR_BUFFER_TEST_SIZE);\n    const T pfor_buffer_actual_size = static_cast<T>(PFOR_BUFFER_ACTUAL_SIZE);\n    // Testing parallel_for with different step values\n    InvokerStep< Flavor, Partitioner, T, TestFunctor<T> > invoke_for;\n    for (T begin = 0; begin < pfor_buffer_test_size - 1; begin += pfor_buffer_test_size / 10 + 1) {\n        T step;\n        for (step = 1; step < pfor_buffer_test_size; step++) {\n            memset(pfor_buffer, 0, pfor_buffer_actual_size * sizeof(size_t));\n            if (step == 1){\n                invoke_for(begin, pfor_buffer_test_size, TestFunctor<T>(), p);\n            } else {\n                invoke_for(begin, pfor_buffer_test_size, step, TestFunctor<T>(), p);\n            }\n            // Verifying that parallel_for processed all items it should\n            for (T i = begin; i < pfor_buffer_test_size; i = i + step) {\n                ASSERT(pfor_buffer[i] == 1, \"parallel_for didn't process all required elements\");\n                pfor_buffer[i] = 0;\n            }\n            // Verifying that no extra items were processed and right bound of array wasn't crossed\n            for (T i = 0; i < pfor_buffer_actual_size; i++) {\n                ASSERT(pfor_buffer[i] == 0, \"parallel_for processed an extra element\");\n            }\n        }\n    }\n}\n\ntemplate <typename Flavor, typename T>\nvoid TestParallelForWithStepSupport()\n{\n    static tbb::affinity_partitioner affinity_p;\n    tbb::auto_partitioner auto_p;\n    tbb::simple_partitioner simple_p;\n    empty_partitioner_tag p;\n\n    // Try out all partitioner combinations\n    TestParallelForWithStepSupportHelper< Flavor,T,empty_partitioner_tag >(p);\n    TestParallelForWithStepSupportHelper< Flavor,T,const tbb::auto_partitioner >(auto_p);\n    TestParallelForWithStepSupportHelper< Flavor,T,const tbb::simple_partitioner >(simple_p);\n    TestParallelForWithStepSupportHelper< Flavor,T,tbb::affinity_partitioner >(affinity_p);\n\n    // Testing some corner cases\n    tbb::parallel_for(static_cast<T>(2), static_cast<T>(1), static_cast<T>(1), TestFunctor<T>());\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    try{\n        tbb::parallel_for(static_cast<T>(1), static_cast<T>(100), static_cast<T>(0), TestFunctor<T>());  // should cause std::invalid_argument\n    }catch(std::invalid_argument&){\n        return;\n    }\n    catch ( ... ) {\n        ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unrecognized exception. std::invalid_argument is expected\" );\n    }\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n// Exception support test\n#define HARNESS_EH_SIMPLE_MODE 1\n#include \"tbb/tbb_exception.h\"\n#include \"harness_eh.h\"\n\n#if TBB_USE_EXCEPTIONS\nclass test_functor_with_exception {\npublic:\n    void operator ()(size_t) const { ThrowTestException(); }\n};\n\nvoid TestExceptionsSupport() {\n    REMARK (__FUNCTION__);\n    { // Tests version with a step provided\n        ResetEhGlobals();\n        TRY();\n            tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, (size_t)1, test_functor_with_exception());\n        CATCH_AND_ASSERT();\n    }\n    { // Tests version without a step\n        ResetEhGlobals();\n        TRY();\n            tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, test_functor_with_exception());\n        CATCH_AND_ASSERT();\n    }\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n// Cancellation support test\nclass functor_to_cancel {\npublic:\n    void operator()(size_t) const {\n        ++g_CurExecuted;\n        CancellatorTask::WaitUntilReady();\n    }\n};\n\nsize_t g_worker_task_step = 0;\n\nclass my_worker_pfor_step_task : public tbb::task\n{\n    tbb::task_group_context &my_ctx;\n\n    tbb::task* execute () __TBB_override {\n        if (g_worker_task_step == 0){\n            tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, functor_to_cancel(), my_ctx);\n        }else{\n            tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, g_worker_task_step, functor_to_cancel(), my_ctx);\n        }\n        return NULL;\n    }\npublic:\n    my_worker_pfor_step_task ( tbb::task_group_context &context_) : my_ctx(context_) { }\n};\n\nvoid TestCancellation()\n{\n    // tests version without a step\n    g_worker_task_step = 0;\n    ResetEhGlobals();\n    RunCancellationTest<my_worker_pfor_step_task, CancellatorTask>();\n\n    // tests version with step\n    g_worker_task_step = 1;\n    ResetEhGlobals();\n    RunCancellationTest<my_worker_pfor_step_task, CancellatorTask>();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#include \"harness_m128.h\"\n\n#if (HAVE_m128 || HAVE_m256) && !__TBB_SSE_STACK_ALIGNMENT_BROKEN\ntemplate<typename ClassWithVectorType>\nstruct SSE_Functor {\n    ClassWithVectorType* Src, * Dst;\n    SSE_Functor( ClassWithVectorType* src, ClassWithVectorType* dst ) : Src(src), Dst(dst) {}\n\n    void operator()( tbb::blocked_range<int>& r ) const {\n        for( int i=r.begin(); i!=r.end(); ++i )\n            Dst[i] = Src[i];\n    }\n};\n\n//! Test that parallel_for works with stack-allocated __m128\ntemplate<typename ClassWithVectorType>\nvoid TestVectorTypes() {\n    ClassWithVectorType Array1[N], Array2[N];\n    for( int i=0; i<N; ++i ) {\n        // VC8 does not properly align a temporary value; to work around, use explicit variable\n        ClassWithVectorType foo(i);\n        Array1[i] = foo;\n    }\n    tbb::parallel_for( tbb::blocked_range<int>(0,N), SSE_Functor<ClassWithVectorType>(Array1, Array2) );\n    for( int i=0; i<N; ++i ) {\n        ClassWithVectorType foo(i);\n        ASSERT( Array2[i]==foo, NULL ) ;\n    }\n}\n#endif /* HAVE_m128 || HAVE_m256 */\n\n#include <vector>\n#include <sstream>\n#include <tbb/blocked_range.h>\n\nstruct TestSimplePartitionerStabilityFunctor:NoAssign{\n  std::vector<int> & ranges;\n  TestSimplePartitionerStabilityFunctor(std::vector<int> & theRanges):ranges(theRanges){}\n  void operator()(tbb::blocked_range<size_t>& r)const{\n      ranges.at(r.begin())=true;\n  }\n};\nvoid TestSimplePartitionerStability(){\n    const std::size_t repeat_count= 10;\n    const std::size_t rangeToSplitSize=1000000;\n    const std::size_t grainsizeStep=rangeToSplitSize/repeat_count;\n    typedef TestSimplePartitionerStabilityFunctor FunctorType;\n\n    for (std::size_t i=0 , grainsize=grainsizeStep; i<repeat_count;i++, grainsize+=grainsizeStep){\n        std::vector<int> firstSeries(rangeToSplitSize,0);\n        std::vector<int> secondSeries(rangeToSplitSize,0);\n\n        tbb::parallel_for(tbb::blocked_range<size_t>(0,rangeToSplitSize,grainsize),FunctorType(firstSeries),tbb::simple_partitioner());\n        tbb::parallel_for(tbb::blocked_range<size_t>(0,rangeToSplitSize,grainsize),FunctorType(secondSeries),tbb::simple_partitioner());\n        std::stringstream str; str<<i;\n        ASSERT(firstSeries==secondSeries,(\"splitting range with tbb::simple_partitioner must be reproducible; i=\" +str.str()).c_str() );\n    }\n}\n#include <cstdio>\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness_cpu.h\"\n#include \"harness_barrier.h\"\n#include \"test_partitioner.h\"\n\nnamespace interaction_with_range_and_partitioner {\n\n// Test checks compatibility of parallel_for algorithm with various range implementations\n\nvoid test() {\n    using namespace test_partitioner_utils::interaction_with_range_and_partitioner;\n\n    test_partitioner_utils::SimpleBody b;\n    tbb::affinity_partitioner ap;\n\n    parallel_for(Range1(true, false), b, ap);\n    parallel_for(Range2(true, false), b, ap);\n    parallel_for(Range3(true, false), b, ap);\n    parallel_for(Range4(false, true), b, ap);\n    parallel_for(Range5(false, true), b, ap);\n    parallel_for(Range6(false, true), b, ap);\n\n    parallel_for(Range1(false, true), b, tbb::simple_partitioner());\n    parallel_for(Range2(false, true), b, tbb::simple_partitioner());\n    parallel_for(Range3(false, true), b, tbb::simple_partitioner());\n    parallel_for(Range4(false, true), b, tbb::simple_partitioner());\n    parallel_for(Range5(false, true), b, tbb::simple_partitioner());\n    parallel_for(Range6(false, true), b, tbb::simple_partitioner());\n\n    parallel_for(Range1(false, true), b, tbb::auto_partitioner());\n    parallel_for(Range2(false, true), b, tbb::auto_partitioner());\n    parallel_for(Range3(false, true), b, tbb::auto_partitioner());\n    parallel_for(Range4(false, true), b, tbb::auto_partitioner());\n    parallel_for(Range5(false, true), b, tbb::auto_partitioner());\n    parallel_for(Range6(false, true), b, tbb::auto_partitioner());\n}\n\n} // namespace interaction_with_range_and_partitioner\n\nnamespace various_range_implementations {\n\nusing namespace test_partitioner_utils;\nusing namespace test_partitioner_utils::TestRanges;\n\n// Body ensures that initial work distribution is done uniformly through affinity mechanism and not\n// through work stealing\nclass Body {\n    Harness::SpinBarrier &m_sb;\npublic:\n    Body(Harness::SpinBarrier& sb) : m_sb(sb) { }\n    Body(Body& b, tbb::split) : m_sb(b.m_sb) { }\n    Body& operator =(const Body&) { return *this; }\n    template <typename Range>\n    void operator()(Range& r) const {\n        REMARK(\"Executing range [%lu, %lu)\\n\", r.begin(), r.end());\n        m_sb.timed_wait(10); // waiting for all threads\n    }\n};\n\nnamespace correctness {\n\n/* Testing only correctness (that is parallel_for does not hang) */\ntemplate <typename RangeType, bool /* feedback */, bool ensure_non_emptiness>\nvoid test() {\n    static const int thread_num = tbb::task_scheduler_init::default_num_threads();\n    RangeType range( 0, thread_num, NULL, false, ensure_non_emptiness );\n    tbb::affinity_partitioner ap;\n    tbb::parallel_for( range, SimpleBody(), ap );\n}\n\n} // namespace correctness\n\nnamespace uniform_distribution {\n\n/* Body of parallel_for algorithm would hang if non-uniform work distribution happened  */\ntemplate <typename RangeType, bool feedback, bool ensure_non_emptiness>\nvoid test() {\n    static const int thread_num = tbb::task_scheduler_init::default_num_threads();\n    Harness::SpinBarrier sb( thread_num );\n    RangeType range(0, thread_num, NULL, feedback, ensure_non_emptiness);\n    const Body sync_body( sb );\n    tbb::affinity_partitioner ap;\n    tbb::parallel_for( range, sync_body, ap );\n    tbb::parallel_for( range, sync_body, tbb::static_partitioner() );\n}\n\n} // namespace uniform_distribution\n\nvoid test() {\n    const bool provide_feedback = __TBB_ENABLE_RANGE_FEEDBACK;\n    const bool ensure_non_empty_range = true;\n\n    // BlockedRange does not take into account feedback and non-emptiness settings but uses the\n    // tbb::blocked_range implementation\n    uniform_distribution::test<BlockedRange, !provide_feedback, !ensure_non_empty_range>();\n\n#if __TBB_ENABLE_RANGE_FEEDBACK\n    using uniform_distribution::test; // if feedback is enabled ensure uniform work distribution\n#else\n    using correctness::test;\n#endif\n\n    {\n        test<RoundedDownRange, provide_feedback, ensure_non_empty_range>();\n        test<RoundedDownRange, provide_feedback, !ensure_non_empty_range>();\n#if __TBB_ENABLE_RANGE_FEEDBACK && !__TBB_MIC_NATIVE\n        // due to fast division algorithm on MIC\n        test<RoundedDownRange, !provide_feedback, ensure_non_empty_range>();\n        test<RoundedDownRange, !provide_feedback, !ensure_non_empty_range>();\n#endif\n    }\n\n    {\n        test<RoundedUpRange, provide_feedback, ensure_non_empty_range>();\n        test<RoundedUpRange, provide_feedback, !ensure_non_empty_range>();\n#if __TBB_ENABLE_RANGE_FEEDBACK && !__TBB_MIC_NATIVE\n        // due to fast division algorithm on MIC\n        test<RoundedUpRange, !provide_feedback, ensure_non_empty_range>();\n        test<RoundedUpRange, !provide_feedback, !ensure_non_empty_range>();\n#endif\n    }\n\n    // Testing that parallel_for algorithm works with such weird ranges\n    correctness::test<Range1_2, /* provide_feedback= */ false, !ensure_non_empty_range>();\n    correctness::test<Range1_999, /* provide_feedback= */ false, !ensure_non_empty_range>();\n    correctness::test<Range999_1, /* provide_feedback= */ false, !ensure_non_empty_range>();\n\n    // The following ranges do not comply with the proportion suggested by partitioner. Therefore\n    // they have to provide the proportion in which they were actually split back to partitioner and\n    // ensure theirs non-emptiness\n    test<Range1_2, provide_feedback, ensure_non_empty_range>();\n    test<Range1_999, provide_feedback, ensure_non_empty_range>();\n    test<Range999_1, provide_feedback, ensure_non_empty_range>();\n}\n\n} // namespace various_range_implementations\n\n#include <map>\n#include <utility>\n#include \"tbb/task_arena.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\nnamespace parallel_for_within_task_arena {\n\nusing namespace test_partitioner_utils::TestRanges;\nusing tbb::split;\nusing tbb::proportional_split;\n\nclass BlockedRangeWhitebox;\n\ntypedef std::pair<size_t, size_t> range_borders;\ntypedef std::multimap<BlockedRangeWhitebox*, range_borders> MapType;\ntypedef tbb::enumerable_thread_specific<MapType> ETSType;\nETSType ets;\n\nclass BlockedRangeWhitebox : public BlockedRange {\npublic:\n    static const bool is_splittable_in_proportion = true;\n    BlockedRangeWhitebox(size_t _begin, size_t _end)\n        : BlockedRange(_begin, _end, NULL, false, false) { }\n\n    BlockedRangeWhitebox(BlockedRangeWhitebox& r, proportional_split& p)\n        :BlockedRange(r, p) {\n        update_ets(r);\n        update_ets(*this);\n    }\n\n    BlockedRangeWhitebox(BlockedRangeWhitebox& r, split)\n        :BlockedRange(r, split()) { }\n\n    void update_ets(BlockedRangeWhitebox& range) {\n        std::pair<MapType::iterator, MapType::iterator> equal_range = ets.local().equal_range(&range);\n        for (MapType::iterator it = equal_range.first; it != equal_range.second;++it) {\n            if (it->second.first <= range.begin() && range.end() <= it->second.second) {\n                ASSERT(!(it->second.first == range.begin() && it->second.second == range.end()), \"Only one border of the range should be equal to the original\");\n                it->second.first = range.begin();\n                it->second.second = range.end();\n                return;\n            }\n        }\n        ets.local().insert(std::make_pair<BlockedRangeWhitebox*, range_borders>(&range, range_borders(range.begin(), range.end())));\n    }\n};\n\ntemplate <typename Partitioner>\nstruct ArenaBody {\n    size_t range_begin;\n    size_t range_end;\n\n    ArenaBody(size_t _range_begin, size_t _range_end)\n        :range_begin(_range_begin), range_end(_range_end) { }\n\n    void operator()() const {\n        Partitioner my_partitioner;\n        tbb::parallel_for(BlockedRangeWhitebox(range_begin, range_end), test_partitioner_utils::SimpleBody(), my_partitioner);\n    }\n};\n\nstruct CombineBody {\n    MapType operator()(MapType x, const MapType& y) const {\n        x.insert(y.begin(), y.end());\n        for (MapType::iterator it = x.begin(); it != x.end();++it)\n            for (MapType::iterator internal_it = x.begin(); internal_it != x.end(); ++internal_it) {\n                if (it != internal_it && internal_it->second.first <= it->second.first && it->second.second <= internal_it->second.second) {\n                    x.erase(internal_it);\n                    break;\n                }\n            }\n        return x;\n    }\n};\n\nrange_borders combine_range(const MapType& map) {\n    range_borders result_range = map.begin()->second;\n    for (MapType::const_iterator it = map.begin(); it != map.end(); it++)\n        result_range = range_borders((std::min)(result_range.first, it->second.first), (std::max)(result_range.second, it->second.second));\n    return result_range;\n}\n\ntemplate <typename Partitioner>\nvoid test_body() {\n    for (unsigned int num_threads = tbb::tbb_thread::hardware_concurrency() / 4 + 1; num_threads < tbb::tbb_thread::hardware_concurrency(); num_threads *= 2)\n        for (size_t range_begin = 0, range_end = num_threads * 10 - 1, i = 0; i < 3; range_begin += num_threads, range_end += num_threads + 1, ++i) {\n            ets = ETSType(MapType());\n            tbb::task_arena limited(num_threads);\n            limited.execute(ArenaBody<Partitioner>(range_begin, range_end));\n            MapType combined_map = ets.combine(CombineBody());\n            range_borders result_borders = combine_range(combined_map);\n            ASSERT(result_borders.first == range_begin, \"Restored range begin does not match initial one\");\n            ASSERT(result_borders.second == range_end, \"Restored range end does not match initial one\");\n            ASSERT((combined_map.size() == num_threads), \"Incorrect number or post-proportional split ranges\");\n            size_t expected_size = (range_end - range_begin) / num_threads;\n            for (MapType::iterator it = combined_map.begin(); it != combined_map.end(); ++it) {\n                size_t size = it->second.second - it->second.first;\n                ASSERT((size == expected_size || size == expected_size + 1), \"Incorrect post-proportional range size\");\n            }\n        }\n\n}\n\nvoid test() {\n    test_body<tbb::affinity_partitioner>();\n    test_body<tbb::static_partitioner>();\n}\n\n} // namespace parallel_for_within_task_arena\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        if( p>0 ) {\n            tbb::task_scheduler_init init( p );\n            Flog<parallel_tag,1>(p);\n            Flog<parallel_tag,10>(p);\n            Flog<parallel_tag,100>(p);\n            Flog<parallel_tag,1000>(p);\n            Flog<parallel_tag,10000>(p);\n\n            // Testing with different integer types\n            TestParallelForWithStepSupport<parallel_tag,short>();\n            TestParallelForWithStepSupport<parallel_tag,unsigned short>();\n            TestParallelForWithStepSupport<parallel_tag,int>();\n            TestParallelForWithStepSupport<parallel_tag,unsigned int>();\n            TestParallelForWithStepSupport<parallel_tag,long>();\n            TestParallelForWithStepSupport<parallel_tag,unsigned long>();\n            TestParallelForWithStepSupport<parallel_tag,long long>();\n            TestParallelForWithStepSupport<parallel_tag,unsigned long long>();\n            TestParallelForWithStepSupport<parallel_tag,size_t>();\n\n#if TBB_PREVIEW_SERIAL_SUBSET\n            // This is for testing serial implementation.\n            if( p == MaxThread ) {\n                Flog<serial_tag,1>(p);\n                Flog<serial_tag,10>(p);\n                Flog<serial_tag,100>(p);\n                TestParallelForWithStepSupport<serial_tag,short>();\n                TestParallelForWithStepSupport<serial_tag,unsigned short>();\n                TestParallelForWithStepSupport<serial_tag,int>();\n                TestParallelForWithStepSupport<serial_tag,unsigned int>();\n                TestParallelForWithStepSupport<serial_tag,long>();\n                TestParallelForWithStepSupport<serial_tag,unsigned long>();\n                TestParallelForWithStepSupport<serial_tag,long long>();\n                TestParallelForWithStepSupport<serial_tag,unsigned long long>();\n                TestParallelForWithStepSupport<serial_tag,size_t>();\n            }\n#endif\n\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n            TestExceptionsSupport();\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n#if __TBB_TASK_GROUP_CONTEXT\n            if ( p > 1 )\n                TestCancellation();\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n#if !__TBB_SSE_STACK_ALIGNMENT_BROKEN\n    #if HAVE_m128\n            TestVectorTypes<ClassWithSSE>();\n    #endif\n    #if HAVE_m256\n            if (have_AVX()) TestVectorTypes<ClassWithAVX>();\n    #endif\n#endif /*!__TBB_SSE_STACK_ALIGNMENT_BROKEN*/\n            // Test that all workers sleep when no work\n            TestCPUUserTime(p);\n            TestSimplePartitionerStability();\n        }\n    }\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#endif\n#if (HAVE_m128 || HAVE_m256) && __TBB_SSE_STACK_ALIGNMENT_BROKEN\n    REPORT(\"Known issue: stack alignment for SIMD instructions not tested.\\n\");\n#endif\n\n    various_range_implementations::test();\n    interaction_with_range_and_partitioner::test();\n    parallel_for_within_task_arena::test();\n    return Harness::Done;\n}\n\n#if _MSC_VER\n#pragma warning (pop)\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_for_each.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning(disable: 4180) // \"qualifier applied to function type has no meaning; ignored\"\n#endif\n\n#include \"tbb/parallel_for_each.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n#include \"harness.h\"\n#include \"harness_iterator.h\"\n#include <list>\n\n// Some old compilers can't deduce template paremeter type for parallel_for_each\n// if the function name is passed without explicit cast to function pointer.\ntypedef void (*TestFunctionType)(size_t);\n\ntbb::atomic<size_t> sum;\n\n// This function is called via parallel_for_each\nvoid TestFunction (size_t value) {\n    sum += (unsigned int)value;\n}\n\nconst size_t NUMBER_OF_ELEMENTS = 1000;\n\n// Tests tbb::parallel_for_each functionality\ntemplate <typename Iterator>\nvoid RunPForEachTests()\n{\n    size_t test_vector[NUMBER_OF_ELEMENTS + 1];\n\n    sum = 0;\n    size_t test_sum = 0;\n\n    for (size_t i =0; i < NUMBER_OF_ELEMENTS; i++) {\n        test_vector[i] = i;\n        test_sum += i;\n    }\n    test_vector[NUMBER_OF_ELEMENTS] = 1000000; // parallel_for_each shouldn't touch this element\n\n    Iterator begin(&test_vector[0]);\n    Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);\n\n    tbb::parallel_for_each(begin, end, (TestFunctionType)TestFunction);\n    ASSERT(sum == test_sum, \"Not all items of test vector were processed by parallel_for_each\");\n    ASSERT(test_vector[NUMBER_OF_ELEMENTS] == 1000000, \"parallel_for_each processed an extra element\");\n}\n\ntypedef void (*TestMutatorType)(size_t&);\n\nvoid TestMutator(size_t& value) {\n    ASSERT(value==0,NULL);\n    ++sum;\n    ++value;\n}\n\n//! Test that tbb::parallel_for_each works for mutable iterators.\ntemplate <typename Iterator>\nvoid RunMutablePForEachTests() {\n    size_t test_vector[NUMBER_OF_ELEMENTS];\n    for( size_t i=0; i<NUMBER_OF_ELEMENTS; ++i )\n        test_vector[i] = 0;\n    sum = 0;\n    tbb::parallel_for_each( Iterator(test_vector), Iterator(test_vector+NUMBER_OF_ELEMENTS), (TestMutatorType)TestMutator );\n    ASSERT( sum==NUMBER_OF_ELEMENTS, \"parallel_for_each called function wrong number of times\" );\n    for( size_t i=0; i<NUMBER_OF_ELEMENTS; ++i )\n        ASSERT( test_vector[i]==1, \"parallel_for_each did not process each element exactly once\" );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n#define HARNESS_EH_SIMPLE_MODE 1\n#include \"tbb/tbb_exception.h\"\n#include \"harness_eh.h\"\n\n#if TBB_USE_EXCEPTIONS\nvoid test_function_with_exception(size_t) {\n    ThrowTestException();\n}\n\ntemplate <typename Iterator>\nvoid TestExceptionsSupport()\n{\n    REMARK (__FUNCTION__);\n    size_t test_vector[NUMBER_OF_ELEMENTS + 1];\n\n    for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) {\n        test_vector[i] = i;\n    }\n\n    Iterator begin(&test_vector[0]);\n    Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);\n\n    TRY();\n       tbb::parallel_for_each(begin, end, (TestFunctionType)test_function_with_exception);\n    CATCH_AND_ASSERT();\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n// Cancellation support test\nvoid function_to_cancel(size_t ) {\n    ++g_CurExecuted;\n    CancellatorTask::WaitUntilReady();\n}\n\ntemplate <typename Iterator>\nclass my_worker_pforeach_task : public tbb::task\n{\n    tbb::task_group_context &my_ctx;\n\n    tbb::task* execute () __TBB_override {\n        size_t test_vector[NUMBER_OF_ELEMENTS + 1];\n        for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) {\n            test_vector[i] = i;\n        }\n        Iterator begin(&test_vector[0]);\n        Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);\n\n        tbb::parallel_for_each(begin, end, (TestFunctionType)function_to_cancel);\n\n        return NULL;\n    }\npublic:\n    my_worker_pforeach_task ( tbb::task_group_context &ctx) : my_ctx(ctx) { }\n};\n\ntemplate <typename Iterator>\nvoid TestCancellation()\n{\n    REMARK (__FUNCTION__);\n    ResetEhGlobals();\n    RunCancellationTest<my_worker_pforeach_task<Iterator>, CancellatorTask>();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#include \"harness_cpu.h\"\n\nconst size_t elements = 10000;\nconst size_t init_sum = 0;\ntbb::atomic<size_t> element_counter;\n\ntemplate<size_t K>\nstruct set_to {\n    void operator()(size_t& x) const {\n        x = K;\n        ++element_counter;\n    }\n};\n\n#include \"test_range_based_for.h\"\n#include <functional>\n\nvoid range_for_each_test() {\n    using namespace range_based_for_support_tests;\n    std::list<size_t> v(elements, 0);\n\n    // iterator, const and non-const range check\n    element_counter = 0;\n    tbb::parallel_for_each(v.begin(), v.end(), set_to<1>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    element_counter = 0;\n    tbb::parallel_for_each(v, set_to<0>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum , \"elements of v not all zeros\");\n\n    element_counter = 0;\n    tbb::parallel_for_each(tbb::blocked_range<std::list<size_t>::iterator>(v.begin(), v.end()), set_to<1>());\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    // iterator, const and non-const range check with context\n    element_counter = 0;\n    tbb::task_group_context context;\n    tbb::parallel_for_each(v.begin(), v.end(), set_to<0>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum , \"elements of v not all zeros\");\n\n    element_counter = 0;\n    tbb::parallel_for_each(v, set_to<1>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == v.size(), \"elements of v not all ones\");\n\n    element_counter = 0;\n    tbb::parallel_for_each(tbb::blocked_range<std::list<size_t>::iterator>(v.begin(), v.end()), set_to<0>(), context);\n    ASSERT(element_counter == v.size() && element_counter == elements, \"not all elements were set\");\n    ASSERT(range_based_for_accumulate(v, std::plus<size_t>(), init_sum) == init_sum , \"elements of v not all zeros\");\n}\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n\n        RunPForEachTests<Harness::RandomIterator<size_t> >();\n        RunPForEachTests<Harness::ConstRandomIterator<size_t> >();\n        RunPForEachTests<Harness::InputIterator<size_t> >();\n        RunPForEachTests<Harness::ForwardIterator<size_t> >();\n\n        RunMutablePForEachTests<Harness::RandomIterator<size_t> >();\n        RunMutablePForEachTests<Harness::ForwardIterator<size_t> >();\n\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n        TestExceptionsSupport<Harness::RandomIterator<size_t> >();\n        TestExceptionsSupport<Harness::InputIterator<size_t> >();\n        TestExceptionsSupport<Harness::ForwardIterator<size_t> >();\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n\n#if __TBB_TASK_GROUP_CONTEXT\n        if (p > 1) {\n            TestCancellation<Harness::RandomIterator<size_t> >();\n            TestCancellation<Harness::InputIterator<size_t> >();\n            TestCancellation<Harness::ForwardIterator<size_t> >();\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        range_for_each_test();\n\n        // Test that all workers sleep when no work\n        TestCPUUserTime(p);\n    }\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_for_vectorization.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// The test checks if the vectorization happens when PPL-style parallel_for is\n// used. The test implements two ideas:\n// 1. \"pragma always assert\" issues a compiler-time error if the vectorization\n// cannot be produced;\n// 2. \"#pragma ivdep\" has a peculiarity which also can be used for detection of\n// successful vectorization. See the comment below.\n\n// For now, only Intel(R) C++ Compiler 14.0 and later is supported. Also, no\n// sense to run the test in debug mode.\n#define HARNESS_SKIP_TEST ( __INTEL_COMPILER < 1400  || TBB_USE_DEBUG )\n\n// __TBB_ASSERT_ON_VECTORIZATION_FAILURE enables \"pragma always assert\" for\n// Intel(R) C++ Compiler.\n#define __TBB_ASSERT_ON_VECTORIZATION_FAILURE ( !HARNESS_SKIP_TEST )\n#include \"tbb/parallel_for.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"harness.h\"\n#include \"harness_assert.h\"\n\n#include <algorithm>\n\nclass Body : NoAssign {\n    int *out_, *in_;\npublic:\n    Body( int* out, int *in ) : out_(out), in_(in) {}\n    void operator() ( int i ) const {\n        out_[i] = in_[i] + 1;\n    }\n};\n\nint TestMain () {\n    // Should be big enough that the partitioner generated at least a one range\n    // with a size greater than 1. See the comment below.\n    const int N = 10000;\n    tbb::task_scheduler_init init(1);\n    int array1[N];\n    std::fill( array1, array1+N, 0 );\n    // Use the same array (with a shift) for both input and output\n    tbb::parallel_for( 0, N-1, Body(array1+1, array1) );\n\n    int array2[N];\n    std::fill( array2, array2+N, 0 );\n    Body b(array2+1, array2);\n    for ( int i=0; i<N-1; ++i )\n        b(i);\n\n    // The ppl-style parallel_for implementation has pragma ivdep before the\n    // range loop. This pragma suppresses the dependency of overlapping arrays\n    // in \"Body\". Thus the vectorizer should generate code that produces incorrect\n    // results.\n    ASSERT( !std::equal( array1, array1+N, array2 ), \"The loop was not vectorized.\" );\n\n    return  Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_invoke.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning(disable: 4180) // \"qualifier applied to function type has no meaning; ignored\"\n#endif\n\n#ifndef TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE\n    #define TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE __TBB_CPF_BUILD\n#endif\n\n#include \"tbb/parallel_invoke.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"harness.h\"\n\n#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER <= 1400 || __GNUC__==3 && __GNUC_MINOR__<=3 || __SUNPRO_CC)\n    #define __TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN 1\n#endif\n\ntbb::atomic<size_t> function_counter;\n\n// Some macros to make the test easier to read\n\n// 10 functions test0 ... test9 are defined\n// pointer to each function is also defined\n\n#define TEST_FUNCTION(value) void test##value () \\\n{   \\\n    ASSERT(!(function_counter & (1 << value)), \"Test function has already been called\"); \\\n    function_counter += 1 << value; \\\n}   \\\nvoid (*test_pointer##value)(void) = test##value;\n\nTEST_FUNCTION(0)\nTEST_FUNCTION(1)\nTEST_FUNCTION(2)\nTEST_FUNCTION(3)\nTEST_FUNCTION(4)\nTEST_FUNCTION(5)\nTEST_FUNCTION(6)\nTEST_FUNCTION(7)\nTEST_FUNCTION(8)\nTEST_FUNCTION(9)\n\n// The same with functors\n#define TEST_FUNCTOR(value) class test_functor##value  \\\n{   \\\npublic: \\\n    void operator() () const {  \\\n        function_counter += 1 << value;   \\\n    }   \\\n} functor##value;\n\nTEST_FUNCTOR(0)\nTEST_FUNCTOR(1)\nTEST_FUNCTOR(2)\nTEST_FUNCTOR(3)\nTEST_FUNCTOR(4)\nTEST_FUNCTOR(5)\nTEST_FUNCTOR(6)\nTEST_FUNCTOR(7)\nTEST_FUNCTOR(8)\nTEST_FUNCTOR(9)\n\n#define INIT_TEST function_counter = 0;\n\n#define VALIDATE_INVOKE_RUN(number_of_args, test_type) \\\n    ASSERT( size_t(function_counter) == (size_t(1) << number_of_args) - 1, \"parallel_invoke called with \" #number_of_args \" arguments didn't process all \" #test_type);\n\n// Calls parallel_invoke for different number of arguments\n// It can be called with and without user context\ntemplate <typename F0, typename F1, typename F2, typename F3, typename F4, typename F5,\n    typename F6, typename F7, typename F8, typename F9>\nvoid call_parallel_invoke( size_t n, F0& f0, F1& f1, F2& f2, F3& f3, F4 &f4, F5 &f5,\n                          F6& f6, F7 &f7, F8 &f8, F9 &f9, tbb::task_group_context* context) {\n    switch(n) {\n    default:\n        ASSERT(false, \"number of arguments must be between 2 and 10\");\n        /* Falls through. */\n    case 2:\n        if (context)\n            tbb::parallel_invoke (f0, f1, *context);\n        else\n            tbb::parallel_invoke (f0, f1);\n        break;\n    case 3:\n        if (context)\n            tbb::parallel_invoke (f0, f1, f2, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2);\n        break;\n    case 4:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3);\n        break;\n    case 5:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4);\n        break;\n    case 6:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5);\n        break;\n    case 7:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6);\n        break;\n    case 8:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7);\n        break;\n    case 9:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8);\n        break;\n    case 10:\n        if(context)\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, *context);\n        else\n            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);\n        break;\n    }\n}\n\n#if !__TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN\ntemplate<typename function> void aux_invoke(const function& f) {\n    f();\n}\n\nbool function_by_constref_in_template_codegen_broken() {\n    function_counter = 0;\n    aux_invoke(test1);\n    return function_counter==0;\n}\n#endif /* !__TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN */\n\nvoid test_parallel_invoke()\n{\n    REMARK (__FUNCTION__);\n    // Testing with pointers to functions\n    for (int n = 2; n <=10; n++)\n    {\n        INIT_TEST;\n        call_parallel_invoke(n, test_pointer0, test_pointer1, test_pointer2, test_pointer3, test_pointer4,\n            test_pointer5, test_pointer6, test_pointer7, test_pointer8, test_pointer9, NULL);\n        VALIDATE_INVOKE_RUN(n, \"pointers to function\");\n    }\n\n    // Testing parallel_invoke with functors\n    for (int n = 2; n <=10; n++)\n    {\n        INIT_TEST;\n        call_parallel_invoke(n, functor0, functor1, functor2, functor3, functor4,\n            functor5, functor6, functor7, functor8, functor9, NULL);\n        VALIDATE_INVOKE_RUN(n, \"functors\");\n    }\n\n#if __TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN\n    // some old compilers can't cope with passing function name into parallel_invoke\n#else\n    // and some compile but generate broken code that does not call the function\n    if (function_by_constref_in_template_codegen_broken())\n        return;\n\n    // Testing parallel_invoke with functions\n    for (int n = 2; n <=10; n++)\n    {\n        INIT_TEST;\n        call_parallel_invoke(n, test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, NULL);\n        VALIDATE_INVOKE_RUN(n, \"functions\");\n    }\n#endif\n}\n\n// Exception handling support test\n\n#if __TBB_TASK_GROUP_CONTEXT\n#define HARNESS_EH_SIMPLE_MODE 1\n#include \"harness_eh.h\"\n\n#if TBB_USE_EXCEPTIONS\nvolatile size_t exception_mask; // each bit represents whether the function should throw exception or not\n\n// throws exception if corresponding exception_mask bit is set\n#define TEST_FUNCTOR_WITH_THROW(value) \\\nstruct throwing_functor##value { \\\n    void operator() () const {  \\\n        if (exception_mask & (1 << value))   \\\n            ThrowTestException();    \\\n    }   \\\n} test_with_throw##value;\n\nTEST_FUNCTOR_WITH_THROW(0)\nTEST_FUNCTOR_WITH_THROW(1)\nTEST_FUNCTOR_WITH_THROW(2)\nTEST_FUNCTOR_WITH_THROW(3)\nTEST_FUNCTOR_WITH_THROW(4)\nTEST_FUNCTOR_WITH_THROW(5)\nTEST_FUNCTOR_WITH_THROW(6)\nTEST_FUNCTOR_WITH_THROW(7)\nTEST_FUNCTOR_WITH_THROW(8)\nTEST_FUNCTOR_WITH_THROW(9)\n\nvoid TestExceptionHandling()\n{\n    REMARK (__FUNCTION__);\n    for( size_t n = 2; n <= 10; ++n ) {\n        for( exception_mask = 1; exception_mask < (size_t(1) << n); ++exception_mask ) {\n            ResetEhGlobals();\n            TRY();\n                REMARK(\"Calling parallel_invoke, number of functions = %d, exception_mask = %d\\n\", n, exception_mask);\n                call_parallel_invoke(n, test_with_throw0, test_with_throw1, test_with_throw2, test_with_throw3,\n                    test_with_throw4, test_with_throw5, test_with_throw6, test_with_throw7, test_with_throw8, test_with_throw9, NULL);\n            CATCH_AND_ASSERT();\n        }\n    }\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n// Cancellation support test\nvoid function_to_cancel() {\n    ++g_CurExecuted;\n    CancellatorTask::WaitUntilReady();\n}\n\n// The function is used to test cancellation\nvoid simple_test_nothrow (){\n    ++g_CurExecuted;\n}\n\nsize_t g_numFunctions,\n       g_functionToCancel;\n\nclass ParInvokeLauncherTask : public tbb::task\n{\n    tbb::task_group_context &my_ctx;\n    void(*func_array[10])(void);\n\n    tbb::task* execute () __TBB_override {\n        func_array[g_functionToCancel] = &function_to_cancel;\n        call_parallel_invoke(g_numFunctions, func_array[0], func_array[1], func_array[2], func_array[3],\n            func_array[4], func_array[5], func_array[6], func_array[7], func_array[8], func_array[9], &my_ctx);\n        return NULL;\n    }\npublic:\n    ParInvokeLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {\n        for (int i = 0; i <=9; ++i)\n            func_array[i] = &simple_test_nothrow;\n    }\n};\n\nvoid TestCancellation ()\n{\n    REMARK (__FUNCTION__);\n    for ( int n = 2; n <= 10; ++n ) {\n        for ( int m = 0; m <= n - 1; ++m ) {\n            g_numFunctions = n;\n            g_functionToCancel = m;\n            ResetEhGlobals();\n            RunCancellationTest<ParInvokeLauncherTask, CancellatorTask>();\n        }\n    }\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//------------------------------------------------------------------------\n// Entry point\n//------------------------------------------------------------------------\n\n#include \"harness_cpu.h\"\n\nint TestMain () {\n    MinThread = min(MinThread, MaxThread);\n    ASSERT (MinThread>=1, \"Minimal number of threads must be 1 or more\");\n    for ( int p = MinThread; p <= MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        test_parallel_invoke();\n        if (p > 1) {\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n            REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#elif TBB_USE_EXCEPTIONS\n            TestExceptionHandling();\n#endif /* TBB_USE_EXCEPTIONS */\n#if __TBB_TASK_GROUP_CONTEXT\n            TestCancellation();\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        }\n        TestCPUUserTime(p);\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_pipeline.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Before including pipeline.h, set up the variable to count heap allocated\n// filter_node objects, and make it known for the header.\nint filter_node_count = 0;\n#define __TBB_TEST_FILTER_NODE_COUNT filter_node_count\n#include \"tbb/pipeline.h\"\n\n#include \"tbb/atomic.h\"\n#include \"harness.h\"\n#include <string.h>\n\n#include \"tbb/tbb_allocator.h\"\n#include \"tbb/spin_mutex.h\"\n\nconst unsigned n_tokens = 8;\n// we can conceivably have two buffers used in the middle filter for every token in flight, so\n// we must allocate two buffers for every token.  Unlikely, but possible.\nconst unsigned n_buffers = 2*n_tokens;\nconst int max_counter = 16;\nstatic tbb::atomic<int> output_counter;\nstatic tbb::atomic<int> input_counter;\nstatic tbb::atomic<int> non_pointer_specialized_calls;\nstatic tbb::atomic<int> pointer_specialized_calls;\nstatic tbb::atomic<int> first_pointer_specialized_calls;\nstatic tbb::atomic<int> second_pointer_specialized_calls;\nstatic tbb::spin_mutex buffer_mutex;\n\nstatic int intbuffer[max_counter];  // store results for <int,int> parallel pipeline test\nstatic bool check_intbuffer;\n\nstatic void* buffers[n_buffers];\nstatic bool buf_available[n_buffers];\n\nvoid *fetchNextBuffer() {\n    tbb::spin_mutex::scoped_lock sl1(buffer_mutex);\n    for(size_t icnt = 0; icnt < n_buffers; ++icnt) {\n        if(buf_available[icnt]) {\n            buf_available[icnt] = false;\n            return buffers[icnt];\n        }\n    }\n    ASSERT(0, \"Ran out of buffers\");\n    return 0;\n}\nvoid freeBuffer(void *buf) {\n    for(size_t i=0; i < n_buffers;++i) {\n        if(buffers[i] == buf) {\n            buf_available[i] = true;\n            return;\n        }\n    }\n    ASSERT(0, \"Tried to free a buffer not in our list\");\n}\n\ntemplate<typename T>\nclass free_on_scope_exit {\npublic:\n    free_on_scope_exit(T *p) : my_p(p) {}\n    ~free_on_scope_exit() { if(!my_p) return; my_p->~T(); freeBuffer(my_p); }\nprivate:\n    T *my_p;\n};\n\n#include \"harness_checktype.h\"\n\n// methods for testing check_type< >, that return okay values for other types.\ntemplate<typename T>\nbool middle_is_ready(T &/*p*/) { return false; }\n\ntemplate<typename U>\nbool middle_is_ready(check_type<U> &p) { return p.is_ready(); }\n\ntemplate<typename T>\nbool output_is_ready(T &/*p*/) { return true; }\n\ntemplate<typename U>\nbool output_is_ready(check_type<U> &p) { return p.is_ready(); }\n\ntemplate<typename T>\nint middle_my_id( T &/*p*/) { return 0; }\n\ntemplate<typename U>\nint middle_my_id(check_type<U> &p) { return p.my_id(); }\n\ntemplate<typename T>\nint output_my_id( T &/*p*/) { return 1; }\n\ntemplate<typename U>\nint output_my_id(check_type<U> &p) { return p.my_id(); }\n\ntemplate<typename T>\nvoid my_function(T &p) { p = 0; }\n\ntemplate<typename U>\nvoid my_function(check_type<U> &p) { p.function(); }\n\n// Filters must be copy-constructible, and be const-qualifiable.\ntemplate<typename U>\nclass input_filter : Harness::NoAfterlife {\npublic:\n    U operator()( tbb::flow_control& control ) const {\n        AssertLive();\n        if( --input_counter < 0 ) {\n            control.stop();\n        }\n        else  // only count successful reads\n            ++non_pointer_specialized_calls;\n        return U();  // default constructed\n    }\n\n};\n\n// specialization for pointer\ntemplate<typename U>\nclass input_filter<U*> : Harness::NoAfterlife {\npublic:\n    U* operator()(tbb::flow_control& control) const {\n        AssertLive();\n        int ival = --input_counter;\n        if(ival < 0) {\n            control.stop();\n            return NULL;\n        }\n        ++pointer_specialized_calls;\n        if(ival == max_counter / 2) {\n            return NULL;  // non-stop NULL\n        }\n        U* myReturn = new(fetchNextBuffer()) U();\n        return myReturn;\n    }\n};\n\ntemplate<>\nclass input_filter<void> : Harness::NoAfterlife {\npublic:\n    void operator()( tbb::flow_control& control ) const {\n        AssertLive();\n        if( --input_counter < 0 ) {\n            control.stop();\n        }\n        else\n            ++non_pointer_specialized_calls;\n    }\n\n};\n\n// specialization for int that passes back a sequence of integers\ntemplate<>\nclass input_filter<int> : Harness::NoAfterlife {\npublic:\n    int\n    operator()(tbb::flow_control& control ) const {\n        AssertLive();\n        int oldval = --input_counter;\n        if( oldval < 0 ) {\n            control.stop();\n        }\n        else\n            ++non_pointer_specialized_calls;\n        return oldval+1;\n    }\n};\n\ntemplate<typename T, typename U>\nclass middle_filter : Harness::NoAfterlife {\npublic:\n    U operator()(T t) const {\n        AssertLive();\n        ASSERT(!middle_my_id(t), \"bad id value\");\n        ASSERT(!middle_is_ready(t), \"Already ready\" );\n        U out;\n        my_function(out);\n        ++non_pointer_specialized_calls;\n        return out;\n    }\n};\n\ntemplate<typename T, typename U>\nclass middle_filter<T*,U> : Harness::NoAfterlife {\npublic:\n    U operator()(T* my_storage) const {\n        free_on_scope_exit<T> my_ptr(my_storage);  // free_on_scope_exit marks the buffer available\n        AssertLive();\n        if(my_storage) {  // may have been passed in a NULL\n            ASSERT(!middle_my_id(*my_storage), \"bad id value\");\n            ASSERT(!middle_is_ready(*my_storage), \"Already ready\" );\n        }\n        ++first_pointer_specialized_calls;\n        U out;\n        my_function(out);\n        return out;\n    }\n};\n\ntemplate<typename T, typename U>\nclass middle_filter<T,U*> : Harness::NoAfterlife {\npublic:\n    U* operator()(T my_storage) const {\n        AssertLive();\n        ASSERT(!middle_my_id(my_storage), \"bad id value\");\n        ASSERT(!middle_is_ready(my_storage), \"Already ready\" );\n        // allocate new space from buffers\n        U* my_return = new(fetchNextBuffer()) U();\n        my_function(*my_return);\n        ++second_pointer_specialized_calls;\n        return my_return;\n    }\n};\n\ntemplate<typename T, typename U>\nclass middle_filter<T*,U*> : Harness::NoAfterlife {\npublic:\n    U* operator()(T* my_storage) const {\n        free_on_scope_exit<T> my_ptr(my_storage);  // free_on_scope_exit marks the buffer available\n        AssertLive();\n        if(my_storage) {\n            ASSERT(!middle_my_id(*my_storage), \"bad id value\");\n            ASSERT(!middle_is_ready(*my_storage), \"Already ready\" );\n        }\n        // may have been passed a NULL\n        ++pointer_specialized_calls;\n        if(!my_storage) return NULL;\n        ASSERT(!middle_my_id(*my_storage), \"bad id value\");\n        ASSERT(!middle_is_ready(*my_storage), \"Already ready\" );\n        U* my_return = new(fetchNextBuffer()) U();\n        my_function(*my_return);\n        return my_return;\n    }\n};\n\n// specialization for int that squares the input and returns that.\ntemplate<>\nclass middle_filter<int,int> : Harness::NoAfterlife {\npublic:\n    int operator()(int my_input) const {\n        AssertLive();\n        ++non_pointer_specialized_calls;\n        return my_input*my_input;\n    }\n};\n\n// ---------------------------------\ntemplate<typename T>\nclass output_filter : Harness::NoAfterlife {\npublic:\n    void operator()(T c) const {\n        AssertLive();\n        ASSERT(output_my_id(c), \"unset id value\");\n        ASSERT(output_is_ready(c), \"not yet ready\");\n        ++non_pointer_specialized_calls;\n        output_counter++;\n    }\n};\n\n// specialization for int that puts the received value in an array\ntemplate<>\nclass output_filter<int> : Harness::NoAfterlife {\npublic:\n    void operator()(int my_input) const {\n        AssertLive();\n        ++non_pointer_specialized_calls;\n        int myindx = output_counter++;\n        intbuffer[myindx] = my_input;\n    }\n};\n\n\ntemplate<typename T>\nclass output_filter<T*> : Harness::NoAfterlife {\npublic:\n    void operator()(T* c) const {\n        free_on_scope_exit<T> my_ptr(c);\n        AssertLive();\n        if(c) {\n            ASSERT(output_my_id(*c), \"unset id value\");\n            ASSERT(output_is_ready(*c), \"not yet ready\");\n        }\n        output_counter++;\n        ++pointer_specialized_calls;\n    }\n};\n\ntypedef enum {\n    no_pointer_counts,\n    assert_nonpointer,\n    assert_firstpointer,\n    assert_secondpointer,\n    assert_allpointer\n} final_assert_type;\n\nvoid resetCounters() {\n    output_counter = 0;\n    input_counter = max_counter;\n    non_pointer_specialized_calls = 0;\n    pointer_specialized_calls = 0;\n    first_pointer_specialized_calls = 0;\n    second_pointer_specialized_calls = 0;\n    // we have to reset the buffer flags because our input filters return allocated space on end-of-input,\n    // (on eof a default-constructed object is returned) and they do not pass through the filter further.\n    for(size_t i = 0; i < n_buffers; ++i)\n        buf_available[i] = true;\n}\n\nvoid checkCounters(final_assert_type my_t) {\n    ASSERT(output_counter == max_counter, \"not all tokens were passed through pipeline\");\n    switch(my_t) {\n        case assert_nonpointer:\n            ASSERT(pointer_specialized_calls+first_pointer_specialized_calls+second_pointer_specialized_calls == 0, \"non-pointer filters specialized to pointer\");\n            ASSERT(non_pointer_specialized_calls == 3*max_counter, \"bad count for non-pointer filters\");\n            if(check_intbuffer) {\n                for(int i = 1; i <= max_counter; ++i) {\n                    int j = i*i;\n                    bool found_val = false;\n                    for(int k = 0; k < max_counter; ++k) {\n                        if(intbuffer[k] == j) {\n                            found_val = true;\n                            break;\n                        }\n                    }\n                    ASSERT(found_val, \"Missing value in output array\" );\n                }\n            }\n            break;\n        case assert_firstpointer:\n            ASSERT(pointer_specialized_calls == max_counter &&  // input filter extra invocation\n                    first_pointer_specialized_calls == max_counter &&\n                    non_pointer_specialized_calls == max_counter &&\n                    second_pointer_specialized_calls == 0, \"incorrect specialization for firstpointer\");\n            break;\n        case assert_secondpointer:\n            ASSERT(pointer_specialized_calls == max_counter &&\n                    first_pointer_specialized_calls == 0 &&\n                    non_pointer_specialized_calls == max_counter &&  // input filter\n                    second_pointer_specialized_calls == max_counter, \"incorrect specialization for firstpointer\");\n            break;\n        case assert_allpointer:\n            ASSERT(non_pointer_specialized_calls+first_pointer_specialized_calls+second_pointer_specialized_calls == 0, \"pointer filters specialized to non-pointer\");\n            ASSERT(pointer_specialized_calls == 3*max_counter, \"bad count for pointer filters\");\n            break;\n        case no_pointer_counts:\n            break;\n    }\n}\n\nstatic const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order};\nconst unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);\n\ntypedef tbb::filter_t<void, void> filter_chain;\ntypedef tbb::filter::mode mode_array;\n\n// The filters are passed by value, which forces a temporary copy to be created.  This is\n// to reproduce the bug where a filter_chain uses refs to filters, which after a call\n// would be references to destructed temporaries.\ntemplate<typename type1, typename type2>\nvoid fill_chain( filter_chain &my_chain, mode_array *filter_type, input_filter<type1> i_filter,\n         middle_filter<type1, type2> m_filter, output_filter<type2> o_filter ) {\n    my_chain = tbb::make_filter<void, type1>(filter_type[0], i_filter) &\n        tbb::make_filter<type1, type2>(filter_type[1], m_filter) &\n        tbb::make_filter<type2, void>(filter_type[2], o_filter);\n}\n\nvoid run_function_spec() {\n    ASSERT(!filter_node_count, NULL);\n    REMARK(\"Testing < void, void > (single filter in pipeline)\");\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    REMARK( \" ( + lambdas)\");\n#endif\n    REMARK(\"\\n\");\n    input_filter<void> i_filter;\n    // Test pipeline that contains only one filter\n    for( unsigned i = 0; i<number_of_filter_types; i++) {\n        tbb::filter_t<void, void> one_filter( filter_table[i], i_filter );\n        ASSERT(filter_node_count==1, \"some filter nodes left after previous iteration?\");\n        resetCounters();\n        tbb::parallel_pipeline( n_tokens, one_filter );\n        // no need to check counters\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        tbb::atomic<int> counter;\n        counter = max_counter;\n        // Construct filter using lambda-syntax when parallel_pipeline() is being run;\n        tbb::parallel_pipeline( n_tokens,\n            tbb::make_filter<void, void>(filter_table[i], [&counter]( tbb::flow_control& control ) {\n                    if( counter-- == 0 )\n                        control.stop();\n                    }\n            )\n        );\n#endif\n    }\n    ASSERT(!filter_node_count, \"filter_node objects leaked\");\n}\n\ntemplate<typename t1, typename t2>\nvoid run_filter_set(\n        input_filter<t1>& i_filter,\n        middle_filter<t1,t2>& m_filter,\n        output_filter<t2>& o_filter,\n        mode_array *filter_type,\n        final_assert_type my_t) {\n    tbb::filter_t<void, t1> filter1( filter_type[0], i_filter );\n    tbb::filter_t<t1, t2> filter2( filter_type[1], m_filter );\n    tbb::filter_t<t2, void> filter3( filter_type[2], o_filter );\n    ASSERT(filter_node_count==3, \"some filter nodes left after previous iteration?\");\n    resetCounters();\n    // Create filters sequence when parallel_pipeline() is being run\n    tbb::parallel_pipeline( n_tokens, filter1 & filter2 & filter3 );\n    checkCounters(my_t);\n\n    // Create filters sequence partially outside parallel_pipeline() and also when parallel_pipeline() is being run\n    tbb::filter_t<void, t2> filter12;\n    filter12 = filter1 & filter2;\n    resetCounters();\n    tbb::parallel_pipeline( n_tokens, filter12 & filter3 );\n    checkCounters(my_t);\n\n    tbb::filter_t<void, void> filter123 = filter12 & filter3;\n    // Run pipeline twice with the same filter sequence\n    for( unsigned i = 0; i<2; i++ ) {\n        resetCounters();\n        tbb::parallel_pipeline( n_tokens, filter123 );\n        checkCounters(my_t);\n    }\n\n    // Now copy-construct another filter_t instance, and use it to run pipeline\n    {\n        tbb::filter_t<void, void> copy123( filter123 );\n        resetCounters();\n        tbb::parallel_pipeline( n_tokens, copy123 );\n        checkCounters(my_t);\n    }\n\n    // Construct filters and create the sequence when parallel_pipeline() is being run\n    resetCounters();\n    tbb::parallel_pipeline( n_tokens,\n               tbb::make_filter<void, t1>(filter_type[0], i_filter) &\n               tbb::make_filter<t1, t2>(filter_type[1], m_filter) &\n               tbb::make_filter<t2, void>(filter_type[2], o_filter) );\n    checkCounters(my_t);\n\n    // Construct filters, make a copy, destroy the original filters, and run with the copy\n    int cnt = filter_node_count;\n    {\n        tbb::filter_t<void, void>* p123 = new tbb::filter_t<void,void> (\n               tbb::make_filter<void, t1>(filter_type[0], i_filter) &\n               tbb::make_filter<t1, t2>(filter_type[1], m_filter) &\n               tbb::make_filter<t2, void>(filter_type[2], o_filter) );\n        ASSERT(filter_node_count==cnt+5, \"filter node accounting error?\");\n        tbb::filter_t<void, void> copy123( *p123 );\n        delete p123;\n        ASSERT(filter_node_count==cnt+5, \"filter nodes deleted prematurely?\");\n        resetCounters();\n        tbb::parallel_pipeline( n_tokens, copy123 );\n        checkCounters(my_t);\n    }\n\n    // construct a filter with temporaries\n    {\n        tbb::filter_t<void, void> my_filter;\n        fill_chain<t1,t2>( my_filter, filter_type, i_filter, m_filter, o_filter );\n        resetCounters();\n        tbb::parallel_pipeline( n_tokens, my_filter );\n        checkCounters(my_t);\n    }\n    ASSERT(filter_node_count==cnt, \"scope ended but filter nodes not deleted?\");\n}\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\ntemplate <typename t1, typename t2>\nvoid run_lambdas_test( mode_array *filter_type ) {\n    tbb::atomic<int> counter;\n    counter = max_counter;\n    // Construct filters using lambda-syntax and create the sequence when parallel_pipeline() is being run;\n    resetCounters();  // only need the output_counter reset.\n    tbb::parallel_pipeline( n_tokens,\n        tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {\n                if( --counter < 0 )\n                    control.stop();\n                return t1(); }\n        ) &\n        tbb::make_filter<t1, t2>(filter_type[1], []( t1 /*my_storage*/ ) -> t2 {\n                return t2(); }\n        ) &\n        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 ) -> void {\n                output_counter++; }\n        )\n    );\n    checkCounters(no_pointer_counts);  // don't have to worry about specializations\n    counter = max_counter;\n    // pointer filters\n    resetCounters();\n    tbb::parallel_pipeline( n_tokens,\n        tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {\n                if( --counter < 0 ) {\n                    control.stop();\n                    return NULL;\n                }\n                return new(fetchNextBuffer()) t1(); }\n        ) &\n        tbb::make_filter<t1*, t2*>(filter_type[1], []( t1* my_storage ) -> t2* {\n                tbb::tbb_allocator<t1>().destroy(my_storage); // my_storage->~t1();\n                return new(my_storage) t2(); }\n        ) &\n        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage ) -> void {\n                tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();\n                freeBuffer(my_storage);\n                output_counter++; }\n        )\n    );\n    checkCounters(no_pointer_counts);\n    // first filter outputs pointer\n    counter = max_counter;\n    resetCounters();\n    tbb::parallel_pipeline( n_tokens,\n        tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {\n                if( --counter < 0 ) {\n                    control.stop();\n                    return NULL;\n                }\n                return new(fetchNextBuffer()) t1(); }\n        ) &\n        tbb::make_filter<t1*, t2>(filter_type[1], []( t1* my_storage ) -> t2 {\n                tbb::tbb_allocator<t1>().destroy(my_storage);   // my_storage->~t1();\n                freeBuffer(my_storage);\n                return t2(); }\n        ) &\n        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 /*my_storage*/) -> void {\n                output_counter++; }\n        )\n    );\n    checkCounters(no_pointer_counts);\n    // second filter outputs pointer\n    counter = max_counter;\n    resetCounters();\n    tbb::parallel_pipeline( n_tokens,\n        tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {\n                if( --counter < 0 ) {\n                    control.stop();\n                }\n                return t1(); }\n        ) &\n        tbb::make_filter<t1, t2*>(filter_type[1], []( t1 /*my_storage*/ ) -> t2* {\n                return new(fetchNextBuffer()) t2(); }\n        ) &\n        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage) -> void {\n                tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();\n                freeBuffer(my_storage);\n                output_counter++; }\n        )\n    );\n    checkCounters(no_pointer_counts);\n}\n#endif\n\ntemplate<typename type1, typename type2>\nvoid run_function(const char *l1, const char *l2) {\n    ASSERT(!filter_node_count, NULL);\n    REMARK(\"Testing < %s, %s >\", l1, l2 );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    REMARK( \" ( + lambdas)\");\n#endif\n    check_intbuffer = (!strcmp(l1,\"int\") && !strcmp(l2,\"int\"));\n    if(check_intbuffer) REMARK(\", check output of filters\");\n    REMARK(\"\\n\");\n\n    Check<type1> check1;  // check constructions/destructions\n    Check<type2> check2;  // for type1 or type2 === check_type<T>\n\n    const size_t number_of_filters = 3;\n\n    input_filter<type1> i_filter;\n    input_filter<type1*> p_i_filter;\n\n    middle_filter<type1, type2> m_filter;\n    middle_filter<type1*, type2> pr_m_filter;\n    middle_filter<type1, type2*> rp_m_filter;\n    middle_filter<type1*, type2*> pp_m_filter;\n\n    output_filter<type2> o_filter;\n    output_filter<type2*> p_o_filter;\n\n    // allocate the buffers for the filters\n    unsigned max_size = (sizeof(type1) > sizeof(type2) ) ? sizeof(type1) : sizeof(type2);\n    for(unsigned i = 0; i < (unsigned)n_buffers; ++i) {\n        buffers[i] = malloc(max_size);\n        buf_available[i] = true;\n    }\n\n    unsigned limit = 1;\n    // Test pipeline that contains number_of_filters filters\n    for( unsigned i=0; i<number_of_filters; ++i)\n        limit *= number_of_filter_types;\n    // Iterate over possible filter sequences\n    for( unsigned numeral=0; numeral<limit; ++numeral ) {\n        unsigned temp = numeral;\n        tbb::filter::mode filter_type[number_of_filter_types];\n        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types )\n            filter_type[i] = filter_table[temp%number_of_filter_types];\n\n        run_filter_set<type1,type2>(i_filter, m_filter, o_filter, filter_type, assert_nonpointer );\n        run_filter_set<type1*,type2>(p_i_filter, pr_m_filter, o_filter, filter_type, assert_firstpointer);\n        run_filter_set<type1,type2*>(i_filter, rp_m_filter, p_o_filter, filter_type, assert_secondpointer);\n        run_filter_set<type1*,type2*>(p_i_filter, pp_m_filter, p_o_filter, filter_type, assert_allpointer);\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        run_lambdas_test<type1,type2>(filter_type);\n#endif\n    }\n    ASSERT(!filter_node_count, \"filter_node objects leaked\");\n\n    for(unsigned i = 0; i < (unsigned)n_buffers; ++i) {\n        free(buffers[i]);\n    }\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain() {\n#if TBB_USE_DEBUG\n    // size and copyability.\n    REMARK(\"is_large_object<int>::value=%d\\n\", tbb::interface6::internal::is_large_object<int>::value);\n    REMARK(\"is_large_object<double>::value=%d\\n\", tbb::interface6::internal::is_large_object<double>::value);\n    REMARK(\"is_large_object<int *>::value=%d\\n\", tbb::interface6::internal::is_large_object<int *>::value);\n    REMARK(\"is_large_object<check_type<int> >::value=%d\\n\", tbb::interface6::internal::is_large_object<check_type<int> >::value);\n    REMARK(\"is_large_object<check_type<int>* >::value=%d\\n\", tbb::interface6::internal::is_large_object<check_type<int>* >::value);\n    REMARK(\"is_large_object<check_type<short> >::value=%d\\n\\n\", tbb::interface6::internal::is_large_object<check_type<short> >::value);\n#endif\n    // Test with varying number of threads.\n    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        // Initialize TBB task scheduler\n        REMARK(\"\\nTesting with nthread=%d\\n\", nthread);\n        tbb::task_scheduler_init init(nthread);\n\n        // Run test several times with different types\n        run_function_spec();\n        run_function<size_t,int>(\"size_t\", \"int\");\n        run_function<int,double>(\"int\", \"double\");\n        run_function<size_t,double>(\"size_t\", \"double\");\n        run_function<size_t,bool>(\"size_t\", \"bool\");\n        run_function<int,int>(\"int\",\"int\");\n        run_function<check_type<unsigned int>,size_t>(\"check_type<unsigned int>\", \"size_t\");\n        run_function<check_type<unsigned short>,size_t>(\"check_type<unsigned short>\", \"size_t\");\n        run_function<check_type<unsigned int>, check_type<unsigned int> >(\"check_type<unsigned int>\", \"check_type<unsigned int>\");\n        run_function<check_type<unsigned int>, check_type<unsigned short> >(\"check_type<unsigned int>\", \"check_type<unsigned short>\");\n        run_function<check_type<unsigned short>, check_type<unsigned short> >(\"check_type<unsigned short>\", \"check_type<unsigned short>\");\n        run_function<double, check_type<unsigned short> >(\"double\", \"check_type<unsigned short>\");\n    }\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_reduce.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/atomic.h\"\n#include \"harness_assert.h\"\n\nusing namespace std;\n\nstatic tbb::atomic<long> ForkCount;\nstatic tbb::atomic<long> FooBodyCount;\n\n//! Class with public interface that is exactly minimal requirements for Range concept\nclass MinimalRange {\n    size_t begin, end;\n    friend class FooBody;\n    explicit MinimalRange( size_t i ) : begin(0), end(i) {}\n    friend void Flog( int nthread, bool inteference );\npublic:\n    MinimalRange( MinimalRange& r, tbb::split ) : end(r.end) {\n        begin = r.end = (r.begin+r.end)/2;\n    }\n    bool is_divisible() const {return end-begin>=2;}\n    bool empty() const {return begin==end;}\n};\n\n//! Class with public interface that is exactly minimal requirements for Body of a parallel_reduce\nclass FooBody {\nprivate:\n    FooBody( const FooBody& );          // Deny access\n    void operator=( const FooBody& );   // Deny access\n    friend void Flog( int nthread, bool interference );\n    //! Parent that created this body via split operation.  NULL if original body.\n    FooBody* parent;\n    //! Total number of index values processed by body and its children.\n    size_t sum;\n    //! Number of join operations done so far on this body and its children.\n    long join_count;\n    //! Range that has been processed so far by this body and its children.\n    size_t begin, end;\n    //! True if body has not yet been processed at least once by operator().\n    bool is_new;\n    //! 1 if body was created by split; 0 if original body.\n    int forked;\n    FooBody() {++FooBodyCount;}\npublic:\n    ~FooBody() {\n        forked = 0xDEADBEEF;\n        sum=0xDEADBEEF;\n        join_count=0xDEADBEEF;\n        --FooBodyCount;\n    }\n    FooBody( FooBody& other, tbb::split ) {\n        ++FooBodyCount;\n        ++ForkCount;\n        sum = 0;\n        parent = &other;\n        join_count = 0;\n        is_new = true;\n        forked = 1;\n    }\n    void join( FooBody& s ) {\n        ASSERT( s.forked==1, NULL );\n        ASSERT( this!=&s, NULL );\n        ASSERT( this==s.parent, NULL );\n        ASSERT( end==s.begin, NULL );\n        end = s.end;\n        sum += s.sum;\n        join_count += s.join_count + 1;\n        s.forked = 2;\n    }\n    void operator()( const MinimalRange& r ) {\n        for( size_t k=r.begin; k<r.end; ++k )\n            ++sum;\n        if( is_new ) {\n            is_new = false;\n            begin = r.begin;\n        } else\n            ASSERT( end==r.begin, NULL );\n        end = r.end;\n    }\n};\n\n#include <cstdio>\n#include \"harness.h\"\n#include \"tbb/tick_count.h\"\n\nvoid Flog( int nthread, bool interference=false ) {\n    for (int mode = 0;  mode < 4; mode++) {\n        tbb::tick_count T0 = tbb::tick_count::now();\n        long join_count = 0;\n        tbb::affinity_partitioner ap;\n        for( size_t i=0; i<=1000; ++i ) {\n            FooBody f;\n            f.sum = 0;\n            f.parent = NULL;\n            f.join_count = 0;\n            f.is_new = true;\n            f.forked = 0;\n            f.begin = ~size_t(0);\n            f.end = ~size_t(0);\n            ASSERT( FooBodyCount==1, NULL );\n            switch (mode) {\n                case 0:\n                    tbb::parallel_reduce( MinimalRange(i), f );\n                    break;\n                case 1:\n                    tbb::parallel_reduce( MinimalRange(i), f, tbb::simple_partitioner() );\n                    break;\n                case 2:\n                    tbb::parallel_reduce( MinimalRange(i), f, tbb::auto_partitioner() );\n                    break;\n                case 3:\n                    tbb::parallel_reduce( MinimalRange(i), f, ap );\n                    break;\n            }\n            join_count += f.join_count;\n            ASSERT( FooBodyCount==1, NULL );\n            ASSERT( f.sum==i, NULL );\n            ASSERT( f.begin==(i==0 ? ~size_t(0) : 0), NULL );\n            ASSERT( f.end==(i==0 ? ~size_t(0) : i), NULL );\n        }\n        tbb::tick_count T1 = tbb::tick_count::now();\n        REMARK(\"time=%g join_count=%ld ForkCount=%ld nthread=%d%s\\n\",\n                   (T1-T0).seconds(),join_count,long(ForkCount), nthread, interference ? \" with interference\":\"\");\n    }\n}\n\n#include \"tbb/blocked_range.h\"\n\n#if _MSC_VER\n    typedef tbb::internal::uint64_t ValueType;\n#else\n    typedef uint64_t ValueType;\n#endif\n\nstruct Sum {\n    template<typename T>\n    T operator() ( const T& v1, const T& v2 ) const {\n        return v1 + v2;\n    }\n};\n\nstruct Accumulator {\n    ValueType operator() ( const tbb::blocked_range<ValueType*>& r, ValueType value ) const {\n        for ( ValueType* pv = r.begin(); pv != r.end(); ++pv )\n            value += *pv;\n        return value;\n    }\n};\n\nclass ParallelSumTester: public NoAssign {\npublic:\n    ParallelSumTester() : m_range(NULL, NULL) {\n        m_array = new ValueType[unsigned(N)];\n        for ( ValueType i = 0; i < N; ++i )\n            m_array[i] = i + 1;\n        m_range = tbb::blocked_range<ValueType*>( m_array, m_array + N );\n    }\n    ~ParallelSumTester() { delete[] m_array; }\n    template<typename Partitioner>\n    void CheckParallelReduce() {\n        Partitioner partitioner;\n        ValueType r1 = tbb::parallel_reduce( m_range, I, Accumulator(), Sum(), partitioner );\n        ASSERT( r1 == R, NULL );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        ValueType r2 = tbb::parallel_reduce(\n            m_range, I,\n            [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType {\n                for ( const ValueType* pv = r.begin(); pv != r.end(); ++pv )\n                    value += *pv;\n                return value;\n            },\n            Sum(),\n            partitioner\n        );\n        ASSERT( r2 == R, NULL );\n#endif /* LAMBDAS */\n    }\n    void CheckParallelReduceDefault() {\n        ValueType r1 = tbb::parallel_reduce( m_range, I, Accumulator(), Sum() );\n        ASSERT( r1 == R, NULL );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        ValueType r2 = tbb::parallel_reduce(\n            m_range, I,\n            [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType {\n                for ( const ValueType* pv = r.begin(); pv != r.end(); ++pv )\n                    value += *pv;\n                return value;\n            },\n            Sum()\n        );\n        ASSERT( r2 == R, NULL );\n#endif /* LAMBDAS */\n    }\nprivate:\n    ValueType* m_array;\n    tbb::blocked_range<ValueType*> m_range;\n    static const ValueType I, N, R;\n};\n\nconst ValueType ParallelSumTester::I = 0;\nconst ValueType ParallelSumTester::N = 1000000;\nconst ValueType ParallelSumTester::R = N * (N + 1) / 2;\n\nvoid ParallelSum () {\n    ParallelSumTester pst;\n    pst.CheckParallelReduceDefault();\n    pst.CheckParallelReduce<tbb::simple_partitioner>();\n    pst.CheckParallelReduce<tbb::auto_partitioner>();\n    pst.CheckParallelReduce<tbb::affinity_partitioner>();\n    pst.CheckParallelReduce<tbb::static_partitioner>();\n}\n\n#include \"harness_concurrency_tracker.h\"\n\nclass RotOp {\npublic:\n    typedef int Type;\n    int operator() ( int x, int i ) const {\n        return ( x<<1 ) ^ i;\n    }\n    int join( int x, int y ) const {\n        return operator()( x, y );\n    }\n};\n\ntemplate <class Op>\nstruct ReduceBody {\n    typedef typename Op::Type result_type;\n    result_type my_value;\n\n    ReduceBody() : my_value() {}\n    ReduceBody( ReduceBody &, tbb::split ) : my_value() {}\n\n    void operator() ( const tbb::blocked_range<int>& r ) {\n        Harness::ConcurrencyTracker ct;\n        for ( int i = r.begin(); i != r.end(); ++i ) {\n            Op op;\n            my_value = op(my_value, i);\n        }\n    }\n\n    void join( const ReduceBody& y ) {\n        Op op;\n        my_value = op.join(my_value, y.my_value);\n    }\n};\n\n//! Type-tag for automatic testing algorithm deduction\nstruct harness_default_partitioner {};\n\ntemplate<typename Body, typename Partitioner>\nstruct parallel_deterministic_reduce_invoker {\n    template<typename Range>\n    static typename Body::result_type run( const Range& range ) {\n        Body body;\n        tbb::parallel_deterministic_reduce(range, body, Partitioner());\n        return body.my_value;\n    }\n};\n\ntemplate<typename Body>\nstruct parallel_deterministic_reduce_invoker<Body, harness_default_partitioner> {\n    template<typename Range>\n    static typename Body::result_type run( const Range& range ) {\n        Body body;\n        tbb::parallel_deterministic_reduce(range, body);\n        return body.my_value;\n    }\n};\n\ntemplate<typename ResultType, typename Partitioner>\nstruct parallel_deterministic_reduce_lambda_invoker {\n    template<typename Range, typename Func, typename Reduction>\n    static ResultType run( const Range& range, Func f, Reduction r ) {\n        return tbb::parallel_deterministic_reduce(range, ResultType(), f, r, Partitioner());\n    }\n};\n\ntemplate<typename ResultType>\nstruct parallel_deterministic_reduce_lambda_invoker<ResultType, harness_default_partitioner> {\n    template<typename Range, typename Func, typename Reduction>\n    static ResultType run(const Range& range, Func f, Reduction r) {\n        return tbb::parallel_deterministic_reduce(range, ResultType(), f, r);\n    }\n};\n\n//! Define overloads of parallel_deterministic_reduce that accept \"undesired\" types of partitioners\nnamespace unsupported {\n\n    template<typename Range, typename Body>\n    void parallel_deterministic_reduce(const Range&, Body&, const tbb::auto_partitioner&) { }\n\n    template<typename Range, typename Body>\n    void parallel_deterministic_reduce(const Range&, Body&, tbb::affinity_partitioner&) { }\n\n    template<typename Range, typename Value, typename RealBody, typename Reduction>\n    Value parallel_deterministic_reduce(const Range& , const Value& identity, const RealBody& , const Reduction& , const tbb::auto_partitioner&) {\n        return identity;\n    }\n\n    template<typename Range, typename Value, typename RealBody, typename Reduction>\n    Value parallel_deterministic_reduce(const Range& , const Value& identity, const RealBody& , const Reduction& , tbb::affinity_partitioner&) {\n        return identity;\n    }\n\n}\n\nstruct Body {\n    float value;\n    Body() : value(0) {}\n    Body(Body&, tbb::split) { value = 0; }\n    void operator()(const tbb::blocked_range<int>&) {}\n    void join(Body&) {}\n};\n\n//! Check that other types of partitioners are not supported (auto, affinity)\n//! In the case of \"unsupported\" API unexpectedly sneaking into namespace tbb,\n//! this test should result in a compilation error due to overload resolution ambiguity\nstatic void TestUnsupportedPartitioners() {\n    using namespace tbb;\n    using namespace unsupported;\n    Body body;\n    parallel_deterministic_reduce(blocked_range<int>(0, 10), body, tbb::auto_partitioner());\n\n    tbb::affinity_partitioner ap;\n    parallel_deterministic_reduce(blocked_range<int>(0, 10), body, ap);\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_deterministic_reduce(\n        blocked_range<int>(0, 10),\n        0,\n        [](const blocked_range<int>&, int init)->int {\n            return init;\n        },\n        [](int x, int y)->int {\n            return x + y;\n        },\n        tbb::auto_partitioner()\n    );\n    parallel_deterministic_reduce(\n        blocked_range<int>(0, 10),\n        0,\n        [](const blocked_range<int>&, int init)->int {\n            return init;\n        },\n        [](int x, int y)->int {\n            return x + y;\n        },\n        ap\n    );\n#endif /* LAMBDAS */\n}\n\ntemplate <class Partitioner>\nvoid TestDeterministicReductionFor() {\n    const int N = 1000;\n    const tbb::blocked_range<int> range(0, N);\n    typedef ReduceBody<RotOp> BodyType;\n    BodyType::result_type R1 =\n        parallel_deterministic_reduce_invoker<BodyType, Partitioner>::run(range);\n    for ( int i=0; i<100; ++i ) {\n        BodyType::result_type R2 =\n            parallel_deterministic_reduce_invoker<BodyType, Partitioner>::run(range);\n        ASSERT( R1 == R2, \"parallel_deterministic_reduce behaves differently from run to run\" );\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        typedef RotOp::Type Type;\n        Type R3 = parallel_deterministic_reduce_lambda_invoker<Type, Partitioner>::run(\n            range,\n            [](const tbb::blocked_range<int>& br, Type value) -> Type {\n                Harness::ConcurrencyTracker ct;\n                for ( int ii = br.begin(); ii != br.end(); ++ii ) {\n                    RotOp op;\n                    value = op(value, ii);\n                }\n                return value;\n            },\n            [](const Type& v1, const Type& v2) -> Type {\n                RotOp op;\n                return op.join(v1,v2);\n            }\n        );\n        ASSERT( R1 == R3, \"lambda-based parallel_deterministic_reduce behaves differently from run to run\" );\n#endif /* LAMBDAS */\n    }\n}\n\nvoid TestDeterministicReduction () {\n    TestDeterministicReductionFor<tbb::simple_partitioner>();\n    TestDeterministicReductionFor<tbb::static_partitioner>();\n    TestDeterministicReductionFor<harness_default_partitioner>();\n    ASSERT_WARNING((Harness::ConcurrencyTracker::PeakParallelism() > 1), \"no parallel execution\\n\");\n}\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness_cpu.h\"\n#include \"test_partitioner.h\"\n\nnamespace interaction_with_range_and_partitioner {\n\n// Test checks compatibility of parallel_reduce algorithm with various range implementations\n\nvoid test() {\n    using namespace test_partitioner_utils::interaction_with_range_and_partitioner;\n\n    test_partitioner_utils::SimpleReduceBody body;\n    tbb::affinity_partitioner ap;\n\n    parallel_reduce(Range1(/*assert_in_split*/ true, /*assert_in_proportional_split*/ false), body, ap);\n    parallel_reduce(Range2(true, false), body, ap);\n    parallel_reduce(Range3(true, false), body, ap);\n    parallel_reduce(Range4(false, true), body, ap);\n    parallel_reduce(Range5(false, true), body, ap);\n    parallel_reduce(Range6(false, true), body, ap);\n\n    parallel_reduce(Range1(/*assert_in_split*/ true, /*assert_in_proportional_split*/ false),\n                           body, tbb::static_partitioner());\n    parallel_reduce(Range2(true, false), body, tbb::static_partitioner());\n    parallel_reduce(Range3(true, false), body, tbb::static_partitioner());\n    parallel_reduce(Range4(false, true), body, tbb::static_partitioner());\n    parallel_reduce(Range5(false, true), body, tbb::static_partitioner());\n    parallel_reduce(Range6(false, true), body, tbb::static_partitioner());\n\n    parallel_reduce(Range1(/*assert_in_split*/ false, /*assert_in_proportional_split*/ true),\n                           body, tbb::simple_partitioner());\n    parallel_reduce(Range2(false, true), body, tbb::simple_partitioner());\n    parallel_reduce(Range3(false, true), body, tbb::simple_partitioner());\n    parallel_reduce(Range4(false, true), body, tbb::simple_partitioner());\n    parallel_reduce(Range5(false, true), body, tbb::simple_partitioner());\n    parallel_reduce(Range6(false, true), body, tbb::simple_partitioner());\n\n    parallel_reduce(Range1(/*assert_in_split*/ false, /*assert_in_proportional_split*/ true),\n                           body, tbb::auto_partitioner());\n    parallel_reduce(Range2(false, true), body, tbb::auto_partitioner());\n    parallel_reduce(Range3(false, true), body, tbb::auto_partitioner());\n    parallel_reduce(Range4(false, true), body, tbb::auto_partitioner());\n    parallel_reduce(Range5(false, true), body, tbb::auto_partitioner());\n    parallel_reduce(Range6(false, true), body, tbb::auto_partitioner());\n\n    parallel_deterministic_reduce(Range1(/*assert_in_split*/true, /*assert_in_proportional_split*/ false),\n                                         body, tbb::static_partitioner());\n    parallel_deterministic_reduce(Range2(true, false), body, tbb::static_partitioner());\n    parallel_deterministic_reduce(Range3(true, false), body, tbb::static_partitioner());\n    parallel_deterministic_reduce(Range4(false, true), body, tbb::static_partitioner());\n    parallel_deterministic_reduce(Range5(false, true), body, tbb::static_partitioner());\n    parallel_deterministic_reduce(Range6(false, true), body, tbb::static_partitioner());\n\n    parallel_deterministic_reduce(Range1(/*assert_in_split*/false, /*assert_in_proportional_split*/ true),\n                                         body, tbb::simple_partitioner());\n    parallel_deterministic_reduce(Range2(false, true), body, tbb::simple_partitioner());\n    parallel_deterministic_reduce(Range3(false, true), body, tbb::simple_partitioner());\n    parallel_deterministic_reduce(Range4(false, true), body, tbb::simple_partitioner());\n    parallel_deterministic_reduce(Range5(false, true), body, tbb::simple_partitioner());\n    parallel_deterministic_reduce(Range6(false, true), body, tbb::simple_partitioner());\n}\n\n} // interaction_with_range_and_partitioner\n\nint TestMain () {\n    TestUnsupportedPartitioners();\n    if( MinThread<0 ) {\n        REPORT(\"Usage: nthread must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n        Flog(p);\n        ParallelSum();\n        if ( p>=2 )\n            TestDeterministicReduction();\n        // Test that all workers sleep when no work\n        TestCPUUserTime(p);\n    }\n    interaction_with_range_and_partitioner::test();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_scan.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_scan.h\"\n#include \"tbb/blocked_range.h\"\n#include \"harness_assert.h\"\n#include <vector>\n\ntypedef tbb::blocked_range<long> Range;\n\nstatic volatile bool ScanIsRunning = false;\n\n//! Sum of 0..i with wrap around on overflow.\ninline int TriangularSum( int i ) {\n    return i&1 ? ((i>>1)+1)*i : (i>>1)*(i+1);\n}\n\n#include \"harness.h\"\n\n//! Verify that sum is init plus sum of integers in closed interval [0..finish_index].\n/** line should be the source line of the caller */\nvoid VerifySum( int init, long finish_index, int sum, int line ) {\n    int expected = init + TriangularSum(finish_index);\n    if (expected != sum) {\n        REPORT(\"line %d: sum[0..%ld] should be = %d, but was computed as %d\\n\",\n            line, finish_index, expected, sum);\n        abort();\n    }\n}\n\nconst int MAXN = 2000;\n\nenum AddendFlag {\n    UNUSED=0,\n    USED_NONFINAL=1,\n    USED_FINAL=2\n};\n\n//! Array recording how each addend was used.\n/** 'unsigned char' instead of AddendFlag for sake of compactness. */\nstatic unsigned char AddendHistory[MAXN];\n\n//! Set to 1 for debugging output\n#define PRINT_DEBUG 0\n\n#include \"tbb/atomic.h\"\n#if PRINT_DEBUG\n#include <stdio.h>\n#include \"harness_report.h\"\ntbb::atomic<long> NextBodyId;\n#endif /* PRINT_DEBUG */\n\nstruct BodyId {\n#if PRINT_DEBUG\n    const int id;\n    BodyId() : id(NextBodyId++) {}\n#endif /* PRINT_DEBUG */\n};\n\ntbb::atomic<long> NumberOfLiveStorage;\n\nstatic void Snooze( bool scan_should_be_running ) {\n    ASSERT( ScanIsRunning==scan_should_be_running, NULL );\n}\n\ntemplate<typename T>\nstruct Storage {\n    T my_total;\n    Range my_range;\n    Storage(T init) :\n        my_total(init), my_range(-1, -1, 1) {\n        ++NumberOfLiveStorage;\n    }\n    ~Storage() {\n        --NumberOfLiveStorage;\n    }\n    Storage(const Storage& strg) :\n        my_total(strg.my_total), my_range(strg.my_range) {\n        ++NumberOfLiveStorage;\n    }\n    Storage & operator=(const Storage& strg) {\n        my_total = strg.my_total;\n        my_range = strg.my_range;\n        return *this;\n    }\n};\n\ntemplate<typename T>\nvoid JoinStorages(const Storage<T>& left, Storage<T>& right) {\n    Snooze(true);\n    ASSERT(ScanIsRunning, NULL);\n    ASSERT(left.my_range.end() == right.my_range.begin(), NULL);\n    right.my_total += left.my_total;\n    right.my_range = Range(left.my_range.begin(), right.my_range.end(), 1);\n    ASSERT(ScanIsRunning, NULL);\n    Snooze(true);\n    ASSERT(ScanIsRunning, NULL);\n}\n\ntemplate<typename T>\nvoid Scan(const Range & r, bool is_final, Storage<T> & storage, std::vector<T> & sum, const std::vector<T> & addend) {\n    ASSERT(!is_final || (storage.my_range.begin() == 0 && storage.my_range.end() == r.begin()) || (storage.my_range.empty() && r.begin() == 0), NULL);\n    for (long i = r.begin(); i < r.end(); ++i) {\n        storage.my_total += addend[i];\n        if (is_final) {\n            ASSERT(AddendHistory[i] < USED_FINAL, \"addend used 'finally' twice?\");\n            AddendHistory[i] |= USED_FINAL;\n            sum[i] = storage.my_total;\n            VerifySum(42, i, int(sum[i]), __LINE__);\n        }\n        else {\n            ASSERT(AddendHistory[i] == UNUSED, \"addend used too many times\");\n            AddendHistory[i] |= USED_NONFINAL;\n        }\n    }\n    if (storage.my_range.empty())\n        storage.my_range = r;\n    else\n        storage.my_range = Range(storage.my_range.begin(), r.end(), 1);\n    Snooze(true);\n}\n\ntemplate<typename T>\nStorage<T> ScanWithInit(const Range & r, T init, bool is_final, Storage<T> & storage, std::vector<T> & sum, const std::vector<T> & addend) {\n    if (r.begin() == 0)\n        storage.my_total = init;\n    Scan(r, is_final, storage, sum, addend);\n    return storage;\n}\n\ntemplate<typename T>\nclass Accumulator: BodyId {\n    const  std::vector<T> &my_array;\n    std::vector<T> & my_sum;\n    Storage<T> storage;\n    enum state_type {\n        full,       // Accumulator has sufficient information for final scan,\n                    // i.e. has seen all iterations to its left.\n                    // It's either the original Accumulator provided by the user\n                    // or a Accumulator constructed by a splitting constructor *and* subsequently\n                    // subjected to a reverse_join with a full accumulator.\n\n        partial,    // Accumulator has only enough information for pre_scan.\n                    // i.e. has not seen all iterations to its left.\n                    // It's an Accumulator created by a splitting constructor that\n                    // has not yet been subjected to a reverse_join with a full accumulator.\n\n        summary,    // Accumulator has summary of iterations processed, but not necessarily\n                    // the information required for a final_scan or pre_scan.\n                    // It's the result of \"assign\".\n\n        trash       // Accumulator with possibly no useful information.\n                    // It was the source for \"assign\".\n\n    };\n    mutable state_type my_state;\n    //! Equals this while object is fully constructed, NULL otherwise.\n    /** Used to detect premature destruction and accidental bitwise copy. */\n    Accumulator* self;\n    Accumulator& operator= (const Accumulator& other);\npublic:\n    Accumulator( T init, const std::vector<T> & array, std::vector<T> & sum ) :\n        my_array(array), my_sum(sum), storage(init), my_state(full)\n    {\n        // Set self as last action of constructor, to indicate that object is fully constructed.\n        self = this;\n    }\n#if PRINT_DEBUG\n    void print() const {\n        REPORT(\"%d [%ld..%ld)\\n\", id, storage.my_range.begin(), storage.my_range.end() );\n    }\n#endif /* PRINT_DEBUG */\n    ~Accumulator() {\n#if PRINT_DEBUG\n        REPORT(\"%d [%ld..%ld) destroyed\\n\",id, storage.my_range.begin(), storage.my_range.end() );\n#endif /* PRINT_DEBUG */\n        // Clear self as first action of destructor, to indicate that object is not fully constructed.\n        self = 0;\n    }\n    Accumulator( Accumulator& a, tbb::split ) :\n        my_array(a.my_array), my_sum(a.my_sum), storage(0), my_state(partial)\n    {\n        ASSERT(a.my_state==full || a.my_state==partial, NULL);\n#if PRINT_DEBUG\n        REPORT(\"%d forked from %d\\n\",id,a.id);\n#endif /* PRINT_DEBUG */\n        Snooze(true);\n        // Set self as last action of constructor, to indicate that object is fully constructed.\n        self = this;\n    }\n    template<typename Tag>\n    void operator()( const Range& r, Tag /*tag*/ ) {\n        ASSERT( Tag::is_final_scan() ? my_state==full : my_state==partial, NULL );\n#if PRINT_DEBUG\n        if(storage.my_range.empty() )\n            REPORT(\"%d computing %s [%ld..%ld)\\n\",id,Tag::is_final_scan()?\"final\":\"lookahead\",r.begin(),r.end() );\n        else\n            REPORT(\"%d computing %s [%ld..%ld) [%ld..%ld)\\n\",id,Tag::is_final_scan()?\"final\":\"lookahead\", storage.my_range.begin(), storage.my_range.end(),r.begin(),r.end());\n#endif /* PRINT_DEBUG */\n        Scan(r, Tag::is_final_scan(), storage, my_sum, my_array);\n        ASSERT( self==this, \"this Accumulator corrupted or prematurely destroyed\" );\n    }\n    void reverse_join( const Accumulator& left_body) {\n#if PRINT_DEBUG\n        REPORT(\"reverse join %d [%ld..%ld) %d [%ld..%ld)\\n\",\n               left_body.id, left_body.storage.my_range.begin(), left_body.storage.my_range.end(),\n               id, storage.my_range.begin(), storage.my_range.end());\n#endif /* PRINT_DEBUG */\n        const Storage<T> & left = left_body.storage;\n        Storage<T> & right = storage;\n        ASSERT(my_state==partial, NULL );\n        ASSERT(left_body.my_state==full || left_body.my_state==partial, NULL );\n\n        JoinStorages(left, right);\n\n        ASSERT(left_body.self==&left_body, NULL );\n        my_state = left_body.my_state;\n    }\n    void assign( const Accumulator& other ) {\n        ASSERT(other.my_state==full, NULL);\n        ASSERT(my_state==full, NULL);\n        storage.my_total = other.storage.my_total;\n        storage.my_range = other.storage.my_range;\n        ASSERT( self==this, NULL );\n        ASSERT( other.self==&other, \"other Accumulator corrupted or prematurely destroyed\" );\n        my_state = summary;\n        other.my_state = trash;\n    }\n    T get_total() {\n        return storage.my_total;\n    }\n};\n\n#include \"tbb/tick_count.h\"\n\ntemplate<typename T, typename Scan, typename ReverseJoin>\nT ParallelScanFunctionalInvoker(const Range& range, T idx, const Scan& scan, const ReverseJoin& reverse_join, int mode) {\n    switch (mode%3) {\n    case 0:\n        return tbb::parallel_scan(range, idx, scan, reverse_join);\n        break;\n    case 1:\n        return tbb::parallel_scan(range, idx, scan, reverse_join, tbb::simple_partitioner());\n        break;\n    default:\n        return tbb::parallel_scan(range, idx, scan, reverse_join, tbb::auto_partitioner());\n    }\n}\n\ntemplate<typename T>\nclass ScanBody {\n    const std::vector<T> &my_addend;\n    std::vector<T> &my_sum;\n    const T my_init;\n    ScanBody& operator= (const ScanBody&);\npublic:\n    ScanBody(T init, const std::vector<T> &addend, std::vector<T> &sum) :my_addend(addend), my_sum(sum), my_init(init) {}\n    template<typename Tag>\n    Storage<T> operator()(const Range& r, Storage<T> storage, Tag) const {\n        return ScanWithInit(r, my_init, Tag::is_final_scan(), storage, my_sum, my_addend);\n    }\n};\n\ntemplate<typename T>\nclass JoinBody {\npublic:\n    Storage<T> operator()(const Storage<T>& left, Storage<T>& right) const {\n        JoinStorages(left, right);\n        return right;\n    }\n};\n\ntemplate<typename T>\nT ParallelScanTemplateFunctor(Range range, T init, const std::vector<T> &addend, std::vector<T> &sum, int mode) {\n    for (long i = 0; i<MAXN; ++i) {\n        AddendHistory[i] = UNUSED;\n    }\n    ScanIsRunning = true;\n    ScanBody<T> sb(init, addend, sum);\n    JoinBody<T> jb;\n    Storage<T> res = ParallelScanFunctionalInvoker(range, Storage<T>(0), sb, jb, mode);\n    ScanIsRunning = false;\n    if (range.empty())\n        res.my_total = init;\n    return res.my_total;\n}\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\ntemplate<typename T>\nT ParallelScanLambda(Range range, T init, const std::vector<T> &addend, std::vector<T> &sum, int mode) {\n    for (long i = 0; i<MAXN; ++i) {\n        AddendHistory[i] = UNUSED;\n    }\n    ScanIsRunning = true;\n    Storage<T> res = ParallelScanFunctionalInvoker(range, Storage<T>(0),\n        [&addend, &sum, init](const Range& r, Storage<T> storage, bool is_final_scan /*tag*/) -> Storage<T> {\n            return ScanWithInit(r, init, is_final_scan, storage, sum, addend);\n        },\n        [](const Storage<T>& left, Storage<T>& right) -> Storage<T> {\n            JoinStorages(left, right);\n            return right;\n        },\n        mode);\n    ScanIsRunning = false;\n    if (range.empty())\n        res.my_total = init;\n    return res.my_total;\n}\n\n#if __TBB_CPP14_GENERIC_LAMBDAS_PRESENT\ntemplate<typename T>\nT ParallelScanGenericLambda(Range range, T init, const std::vector<T> &addend, std::vector<T> &sum, int mode) {\n    for (long i = 0; i<MAXN; ++i) {\n        AddendHistory[i] = UNUSED;\n    }\n    ScanIsRunning = true;\n    Storage<T> res = ParallelScanFunctionalInvoker(range, Storage<T>(0),\n        [&addend, &sum, init](const Range& rng, Storage<T> storage, auto scan_tag) {\n            return ScanWithInit(rng, init, scan_tag.is_final_scan(), storage, sum, addend);\n        },\n        [](const Storage<T>& left, Storage<T>& right) {\n            JoinStorages(left, right);\n            return right;\n        },\n        mode);\n    ScanIsRunning = false;\n    if (range.empty())\n        res.my_total = init;\n    return res.my_total;\n}\n#endif/* GENERIC_LAMBDAS */\n#endif/* LAMBDAS */\n\nvoid TestAccumulator( int mode, int nthread ) {\n    typedef int T;\n    std::vector<T> addend(MAXN);\n    std::vector<T> sum(MAXN);\n    for( long n=0; n<=MAXN; ++n ) {\n        for( long i=0; i<MAXN; ++i ) {\n            addend[i] = -1;\n            sum[i] = -2;\n            AddendHistory[i] = UNUSED;\n        }\n        for( long i=0; i<n; ++i )\n            addend[i] = i;\n\n        Accumulator<T> acc( 42, addend, sum );\n        tbb::tick_count t0 = tbb::tick_count::now();\n#if PRINT_DEBUG\n        REPORT(\"--------- mode=%d range=[0..%ld)\\n\",mode,n);\n#endif /* PRINT_DEBUG */\n        ScanIsRunning = true;\n\n        switch (mode) {\n            case 0:\n                tbb::parallel_scan( Range( 0, n, 1 ), acc );\n            break;\n            case 1:\n                tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::simple_partitioner() );\n            break;\n            case 2:\n                tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::auto_partitioner() );\n            break;\n        }\n\n        ScanIsRunning = false;\n#if PRINT_DEBUG\n        REPORT(\"=========\\n\");\n#endif /* PRINT_DEBUG */\n        Snooze(false);\n        tbb::tick_count t1 = tbb::tick_count::now();\n        long used_once_count = 0;\n        for( long i=0; i<n; ++i )\n            if( !(AddendHistory[i]&USED_FINAL) ) {\n                REPORT(\"failed to use addend[%ld] %s\\n\",i,AddendHistory[i]&USED_NONFINAL?\"(but used nonfinal)\":\"\");\n            }\n        for( long i=0; i<n; ++i ) {\n            VerifySum( 42, i, sum[i], __LINE__ );\n            used_once_count += AddendHistory[i]==USED_FINAL;\n        }\n        if( n )\n            ASSERT( acc.get_total()==sum[n-1], NULL );\n        else\n            ASSERT( acc.get_total()==42, NULL );\n        REMARK(\"time [n=%ld] = %g\\tused_once%% = %g\\tnthread=%d\\n\",n,(t1-t0).seconds(), n==0 ? 0 : 100.0*used_once_count/n,nthread);\n\n\n       std::vector<T> sum_tmplt(MAXN);\n        for (long i = 0; i<MAXN; ++i)\n            sum_tmplt[i] = -2;\n        T total_tmplt = ParallelScanTemplateFunctor(Range(0, n, 1), 42, addend, sum_tmplt, mode);\n\n        ASSERT(acc.get_total() == total_tmplt, \"Parallel prefix sum with lambda interface is not equal to body interface\");\n        ASSERT(sum == sum_tmplt, \"Parallel prefix vector with lambda interface is not equal to body interface\");\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        std::vector<T> sum_lambda(MAXN);\n        for (long i = 0; i<MAXN; ++i)\n            sum_lambda[i] = -2;\n        T total_lambda = ParallelScanLambda(Range(0, n, 1), 42, addend, sum_lambda, mode);\n\n        ASSERT(acc.get_total() == total_lambda, \"Parallel prefix sum with lambda interface is not equal to body interface\");\n        ASSERT(sum == sum_lambda, \"Parallel prefix vector with lambda interface is not equal to body interface\");\n\n#if __TBB_CPP14_GENERIC_LAMBDAS_PRESENT\n        std::vector<T> sum_generic_lambda(MAXN);\n        for (long i = 0; i<MAXN; ++i)\n            sum_generic_lambda[i] = -2;\n        T total_generic_lambda = ParallelScanGenericLambda(Range(0, n, 1), 42, addend, sum_generic_lambda, mode);\n\n        ASSERT(acc.get_total() == total_generic_lambda, \"Parallel prefix sum with lambda (generic) interface is not equal to body interface\");\n        ASSERT(sum == sum_generic_lambda, \"Parallel prefix vector with lambda (generic) interface is not equal to body interface\");\n\n#endif /* GENERIC_LAMBDAS */\n#endif /* LAMBDAS */\n    }\n}\n\nstatic void TestScanTags() {\n    ASSERT( tbb::pre_scan_tag::is_final_scan()==false, NULL );\n    ASSERT( tbb::final_scan_tag::is_final_scan()==true, NULL );\n    ASSERT( tbb::pre_scan_tag() == false, NULL );\n    ASSERT( tbb::final_scan_tag() == true, NULL );\n}\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness_cpu.h\"\n\nint TestMain () {\n    TestScanTags();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        for (int mode = 0; mode < 3; mode++) {\n            tbb::task_scheduler_init init(p);\n            NumberOfLiveStorage = 0;\n            TestAccumulator(mode, p);\n            // Test that all workers sleep when no work\n            TestCPUUserTime(p);\n\n            // Checking has to be done late, because when parallel_scan makes copies of\n            // the user's \"Body\", the copies might be destroyed slightly after parallel_scan\n            // returns.\n            ASSERT( NumberOfLiveStorage==0, NULL );\n        }\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_sort.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_sort.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/concurrent_vector.h\"\n#include \"harness.h\"\n#include <math.h>\n#include <vector>\n#include <exception>\n#include <algorithm>\n#include <iterator>\n#include <functional>\n#include <string>\n#include <cstring>\n\n/** Has tightly controlled interface so that we can verify\n    that parallel_sort uses only the required interface. */\nclass Minimal {\n    int val;\npublic:\n    Minimal() {}\n    void set_val(int i) { val = i; }\n    static bool CompareWith (const Minimal &a, const Minimal &b) {\n        return (a.val < b.val);\n    }\n    static bool AreEqual( Minimal &a,  Minimal &b) {\n       return a.val == b.val;\n    }\n};\n\n//! Defines a comparison function object for Minimal\nclass MinimalCompare {\npublic:\n    bool operator() (const Minimal &a, const Minimal &b) const {\n        return Minimal::CompareWith(a,b);\n    }\n};\n\n//! The default validate; but it uses operator== which is not required\ntemplate<typename RandomAccessIterator>\nbool Validate(RandomAccessIterator a, RandomAccessIterator b, size_t n) {\n    for (size_t i = 0; i < n; i++) {\n        ASSERT( a[i] == b[i], NULL );\n    }\n    return true;\n}\n\n//! A Validate specialized to string for debugging-only\ntemplate<>\nbool Validate<std::string *>(std::string * a, std::string * b, size_t n) {\n    for (size_t i = 0; i < n; i++) {\n        if ( Verbose && a[i] != b[i]) {\n          for (size_t j = 0; j < n; j++) {\n              REPORT(\"a[%llu] == %s and b[%llu] == %s\\n\", static_cast<unsigned long long>(j), a[j].c_str(), static_cast<unsigned long long>(j), b[j].c_str());\n          }\n        }\n        ASSERT( a[i] == b[i], NULL );\n    }\n    return true;\n}\n\n//! A Validate specialized to Minimal since it does not define an operator==\ntemplate<>\nbool Validate<Minimal *>(Minimal *a, Minimal *b, size_t n) {\n    for (size_t i = 0; i < n; i++) {\n        ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );\n    }\n    return true;\n}\n\n//! A Validate specialized to concurrent_vector<Minimal> since it does not define an operator==\ntemplate<>\nbool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<Minimal>::iterator a,\n                                                         tbb::concurrent_vector<Minimal>::iterator b, size_t n) {\n    for (size_t i = 0; i < n; i++) {\n        ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );\n    }\n    return true;\n}\n\n//! used in Verbose mode for identifying which data set is being used\nstatic std::string test_type;\n\n//! The default initialization routine.\n/*! This routine assumes that you can assign to the elements from a float.\n    It assumes that iter and sorted_list have already been allocated. It fills\n    them according to the current data set (tracked by a local static variable).\n    Returns true if a valid test has been setup, or false if there is no test to\n    perform.\n*/\n\ntemplate < typename RandomAccessIterator, typename Compare >\nbool init_iter(RandomAccessIterator iter, RandomAccessIterator sorted_list, size_t n, const Compare &compare, bool reset) {\n    static char test_case = 0;\n    const char num_cases = 3;\n\n    if (reset) test_case = 0;\n\n    if (test_case < num_cases) {\n        // switch on the current test case, filling the iter and sorted_list appropriately\n        switch(test_case) {\n            case 0:\n                /* use sin to generate the values */\n                test_type = \"sin\";\n                for (size_t i = 0; i < n; i++)\n                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(sin(float(i)));\n                break;\n            case 1:\n                /* presorted list */\n                test_type = \"pre-sorted\";\n                for (size_t i = 0; i < n; i++)\n                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(i);\n                break;\n            case 2:\n                /* reverse-sorted list */\n                test_type = \"reverse-sorted\";\n                for (size_t i = 0; i < n; i++)\n                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(n - i);\n                break;\n        }\n\n        // pre-sort sorted_list for later validity testing\n        std::sort(sorted_list, sorted_list + n, compare);\n        test_case++;\n        return true;\n    }\n    return false;\n}\n\ntemplate < typename T, typename Compare >\nbool init_iter(T * iter, T * sorted_list, size_t n, const Compare &compare, bool reset) {\n    static char test_case = 0;\n    const char num_cases = 3;\n\n    if (reset) test_case = 0;\n\n    if (test_case < num_cases) {\n        // switch on the current test case, filling the iter and sorted_list appropriately\n        switch(test_case) {\n            case 0:\n                /* use sin to generate the values */\n                test_type = \"sin\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i] = T(sin(float(i)));\n                    sorted_list[i] = T(sin(float(i)));\n                }\n                break;\n            case 1:\n                /* presorted list */\n                test_type = \"pre-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i] = T(i);\n                    sorted_list[i] = T(i);\n                }\n                break;\n            case 2:\n                /* reverse-sorted list */\n                test_type = \"reverse-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i] = T(n - i);\n                    sorted_list[i] = T(n - i);\n                }\n                break;\n        }\n\n        // pre-sort sorted_list for later validity testing\n        std::sort(sorted_list, sorted_list + n, compare);\n        test_case++;\n        return true;\n    }\n    return false;\n}\n\n\n//! The initialization routine specialized to the class Minimal\n/*! Minimal cannot have floats assigned to it.  This function uses the set_val method\n*/\n\ntemplate < >\nbool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalCompare &compare, bool reset) {\n    static char test_case = 0;\n    const char num_cases = 3;\n\n    if (reset) test_case = 0;\n\n    if (test_case < num_cases) {\n        switch(test_case) {\n            case 0:\n                /* use sin to generate the values */\n                test_type = \"sin\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int( sin( float(i) ) * 1000.f) );\n                    sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );\n                }\n                break;\n            case 1:\n                /* presorted list */\n                test_type = \"pre-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int(i) );\n                    sorted_list[i].set_val( int(i) );\n                }\n                break;\n            case 2:\n                /* reverse-sorted list */\n                test_type = \"reverse-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int(n-i) );\n                    sorted_list[i].set_val( int(n-i) );\n                }\n                break;\n        }\n        std::sort(sorted_list, sorted_list + n, compare);\n        test_case++;\n        return true;\n    }\n    return false;\n}\n\n//! The initialization routine specialized to the class concurrent_vector<Minimal>\n/*! Minimal cannot have floats assigned to it.  This function uses the set_val method\n*/\n\ntemplate < >\nbool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_vector<Minimal>::iterator sorted_list,\n               size_t n, const MinimalCompare &compare, bool reset) {\n    static char test_case = 0;\n    const char num_cases = 3;\n\n    if (reset) test_case = 0;\n\n    if (test_case < num_cases) {\n        switch(test_case) {\n            case 0:\n                /* use sin to generate the values */\n                test_type = \"sin\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int( sin( float(i) ) * 1000.f) );\n                    sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );\n                }\n                break;\n            case 1:\n                /* presorted list */\n                test_type = \"pre-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int(i) );\n                    sorted_list[i].set_val( int(i) );\n                }\n                break;\n            case 2:\n                /* reverse-sorted list */\n                test_type = \"reverse-sorted\";\n                for (size_t i = 0; i < n; i++) {\n                    iter[i].set_val( int(n-i) );\n                    sorted_list[i].set_val( int(n-i) );\n                }\n                break;\n        }\n        std::sort(sorted_list, sorted_list + n, compare);\n        test_case++;\n        return true;\n    }\n    return false;\n}\n\n//! The initialization routine specialized to the class string\n/*! strings are created from floats.\n*/\n\ntemplate<>\nbool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std::less<std::string> &compare, bool reset) {\n    static char test_case = 0;\n    const char num_cases = 1;\n\n    if (reset) test_case = 0;\n\n    if (test_case < num_cases) {\n        switch(test_case) {\n            case 0:\n                /* use sin to generate the values */\n                test_type = \"sin\";\n                for (size_t i = 0; i < n; i++) {\n                    char buffer[20];\n// Getting rid of secure warning issued by VC 14 and newer\n#if _MSC_VER && __STDC_SECURE_LIB__>=200411\n                    sprintf_s(buffer, sizeof(buffer), \"%f\", float(sin(float(i))));\n#else\n                    sprintf(buffer, \"%f\", float(sin(float(i))));\n#endif\n                    sorted_list[i] = iter[i] = std::string(buffer);\n                }\n                break;\n        }\n        std::sort(sorted_list, sorted_list + n, compare);\n        test_case++;\n        return true;\n    }\n    return false;\n}\n\n//! The current number of threads in use (for Verbose only)\nstatic size_t current_p;\n\n//! The current data type being sorted (for Verbose only)\nstatic std::string current_type;\n\n//! The default test routine.\n/*! Tests all data set sizes from 0 to N, all grainsizes from 0 to G=10, and selects from\n    all possible interfaces to parallel_sort depending on whether a scratch space and\n    compare have been provided.\n*/\ntemplate<typename RandomAccessIterator, typename Compare>\nbool parallel_sortTest(size_t n, RandomAccessIterator iter, RandomAccessIterator sorted_list, const Compare *comp) {\n    bool passed = true;\n\n    Compare local_comp;\n\n    init_iter(iter, sorted_list, n, local_comp, true);\n    do {\n        REMARK(\"%s %s p=%llu n=%llu :\",current_type.c_str(), test_type.c_str(),\n                   static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));\n        if (comp != NULL) {\n            tbb::parallel_sort(iter, iter + n, local_comp );\n         } else {\n            tbb::parallel_sort(iter, iter + n );\n         }\n        if (!Validate(iter, sorted_list, n))\n            passed = false;\n        REMARK(\"passed\\n\");\n    } while (init_iter(iter, sorted_list, n, local_comp, false));\n    return passed;\n}\n\n//! The test routine specialize to Minimal, since it does not have a less defined for it\ntemplate<>\nbool parallel_sortTest(size_t n, Minimal * iter, Minimal * sorted_list, const MinimalCompare *compare) {\n    bool passed = true;\n\n    if (compare == NULL) return passed;\n\n    init_iter(iter, sorted_list, n, *compare, true);\n    do {\n        REMARK(\"%s %s p=%llu n=%llu :\",current_type.c_str(), test_type.c_str(),\n                    static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));\n\n        tbb::parallel_sort(iter, iter + n, *compare );\n\n        if (!Validate(iter, sorted_list, n))\n            passed = false;\n        REMARK(\"passed\\n\");\n    } while (init_iter(iter, sorted_list, n, *compare, false));\n    return passed;\n}\n\n//! The test routine specialize to concurrent_vector of Minimal, since it does not have a less defined for it\ntemplate<>\nbool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter,\n                       tbb::concurrent_vector<Minimal>::iterator sorted_list, const MinimalCompare *compare) {\n    bool passed = true;\n\n    if (compare == NULL) return passed;\n\n    init_iter(iter, sorted_list, n, *compare, true);\n    do {\n        REMARK(\"%s %s p=%llu n=%llu :\",current_type.c_str(), test_type.c_str(),\n                    static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));\n\n        tbb::parallel_sort(iter, iter + n, *compare );\n\n        if (!Validate(iter, sorted_list, n))\n            passed = false;\n        REMARK(\"passed\\n\");\n    } while (init_iter(iter, sorted_list, n, *compare, false));\n    return passed;\n}\n\n//! The main driver for the tests.\n/*! Minimal, float and string types are used.  All interfaces to parallel_sort that are usable\n    by each type are tested.\n*/\nvoid Flog() {\n    // For each type create:\n    // the list to be sorted by parallel_sort (array)\n    // the list to be sort by STL sort (array_2)\n    // and a less function object\n\n    const size_t N = 50000;\n\n    Minimal *minimal_array = new Minimal[N];\n    Minimal *minimal_array_2 = new Minimal[N];\n    MinimalCompare minimal_less;\n\n    float *float_array = new float[N];\n    float *float_array_2 = new float[N];\n    std::less<float> float_less;\n\n    tbb::concurrent_vector<float> float_cv1;\n    tbb::concurrent_vector<float> float_cv2;\n    float_cv1.grow_to_at_least(N);\n    float_cv2.grow_to_at_least(N);\n\n    std::string *string_array = new std::string[N];\n    std::string *string_array_2 = new std::string[N];\n    std::less<std::string> string_less;\n\n    tbb::concurrent_vector<Minimal> minimal_cv1;\n    tbb::concurrent_vector<Minimal> minimal_cv2;\n    minimal_cv1.grow_to_at_least(N);\n    minimal_cv2.grow_to_at_least(N);\n\n\n    // run the appropriate tests for each type\n\n    current_type = \"Minimal(less)\";\n    parallel_sortTest(0, minimal_array, minimal_array_2, &minimal_less);\n    parallel_sortTest(1, minimal_array, minimal_array_2, &minimal_less);\n    parallel_sortTest(10, minimal_array, minimal_array_2, &minimal_less);\n    parallel_sortTest(9999, minimal_array, minimal_array_2, &minimal_less);\n    parallel_sortTest(50000, minimal_array, minimal_array_2, &minimal_less);\n\n    current_type = \"float (no less)\";\n    parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(10, float_array, float_array_2, static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(9999, float_array, float_array_2, static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(50000, float_array, float_array_2, static_cast<std::less<float> *>(NULL));\n\n    current_type = \"float (less)\";\n    parallel_sortTest(0, float_array, float_array_2, &float_less);\n    parallel_sortTest(1, float_array, float_array_2, &float_less);\n    parallel_sortTest(10, float_array, float_array_2, &float_less);\n    parallel_sortTest(9999, float_array, float_array_2, &float_less);\n    parallel_sortTest(50000, float_array, float_array_2, &float_less);\n\n    current_type = \"concurrent_vector<float> (no less)\";\n    parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));\n    parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));\n\n    current_type = \"concurrent_vector<float> (less)\";\n    parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), &float_less);\n    parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), &float_less);\n    parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), &float_less);\n    parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), &float_less);\n    parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), &float_less);\n\n    current_type = \"string (no less)\";\n    parallel_sortTest(0, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));\n    parallel_sortTest(1, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));\n    parallel_sortTest(10, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));\n    parallel_sortTest(9999, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));\n    parallel_sortTest(50000, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));\n\n    current_type = \"string (less)\";\n    parallel_sortTest(0, string_array, string_array_2, &string_less);\n    parallel_sortTest(1, string_array, string_array_2, &string_less);\n    parallel_sortTest(10, string_array, string_array_2, &string_less);\n    parallel_sortTest(9999, string_array, string_array_2, &string_less);\n    parallel_sortTest(50000, string_array, string_array_2, &string_less);\n\n    current_type = \"concurrent_vector<Minimal> (less)\";\n    parallel_sortTest(0, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);\n    parallel_sortTest(1, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);\n    parallel_sortTest(10, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);\n    parallel_sortTest(9999, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);\n    parallel_sortTest(50000, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);\n\n    delete [] minimal_array;\n    delete [] minimal_array_2;\n\n    delete [] float_array;\n    delete [] float_array_2;\n\n    delete [] string_array;\n    delete [] string_array_2;\n}\n\nconst int elements = 10000;\n\nvoid rand_vec(std::vector<int> &v) {\n    for (int i=0; i<elements; ++i) {\n        (v.push_back(rand()%elements*10));\n    }\n}\n\nvoid range_sort_test() {\n    std::vector<int> v;\n\n    typedef std::vector<int>::iterator itor;\n    // iterator checks\n    rand_vec(v);\n    tbb::parallel_sort(v.begin(), v.end());\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a <= *(a+1), \"v not sorted\");\n    v.clear();\n\n    rand_vec(v);\n    tbb::parallel_sort(v.begin(), v.end(), std::greater<int>());\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a >= *(a+1), \"v not sorted\");\n    v.clear();\n\n    // range checks\n    rand_vec(v);\n    tbb::parallel_sort(v);\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a <= *(a+1), \"v not sorted\");\n    v.clear();\n\n    rand_vec(v);\n    tbb::parallel_sort(v, std::greater<int>());\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a >= *(a+1), \"v not sorted\");\n    v.clear();\n\n    // const range checks\n    rand_vec(v);\n    tbb::parallel_sort(tbb::blocked_range<std::vector<int>::iterator>(v.begin(), v.end()));\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a <= *(a+1), \"v not sorted\");\n    v.clear();\n\n    rand_vec(v);\n    tbb::parallel_sort(tbb::blocked_range<std::vector<int>::iterator>(v.begin(), v.end()), std::greater<int>());\n    for(itor a=v.begin(); a<v.end()-1; ++a) ASSERT(*a >= *(a+1), \"v not sorted\");\n    v.clear();\n\n    // array tests\n    int arr[elements];\n    for(int i=0; i<elements; ++i) arr[i] = rand()%(elements*10);\n    tbb::parallel_sort(arr);\n    for(int i=0; i<elements-1; ++i) ASSERT(arr[i] <= arr[i+1], \"arr not sorted\");\n}\n\n#include <cstdio>\n#include \"harness_cpu.h\"\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"Usage: number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        if( p>0 ) {\n            tbb::task_scheduler_init init( p );\n            current_p = p;\n            Flog();\n            range_sort_test();\n\n            // Test that all workers sleep when no work\n            TestCPUUserTime(p);\n        }\n    }\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_parallel_while.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_while.h\"\n#include \"harness.h\"\n\nconst int N = 200;\n\ntypedef int Element;\n\n//! Representation of an array index with only those signatures required by parallel_while.\nclass MinimalArgumentType {\n    void operator=( const MinimalArgumentType& );\n    long my_value;\n    enum {\n        DEAD=0xDEAD,\n        LIVE=0x2718,\n        INITIALIZED=0x3141\n    } my_state;\npublic:\n    ~MinimalArgumentType() {\n        ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );\n        my_state = DEAD;\n    }\n    MinimalArgumentType() {\n        my_state = LIVE;\n    }\n    void set_value( long i ) {\n        ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );\n        my_value = i;\n        my_state = INITIALIZED;\n    }\n    long get_value() const {\n        ASSERT( my_state==INITIALIZED, NULL );\n        return my_value;\n    }\n};\n\nclass IntegerStream {\n    long my_limit;\n    long my_index;\npublic:\n    IntegerStream( long n ) : my_limit(n), my_index(0) {}\n    bool pop_if_present( MinimalArgumentType& v ) {\n        if( my_index>=my_limit )\n            return false;\n        v.set_value( my_index );\n        my_index+=2;\n        return true;\n    }\n};\n\nclass MatrixMultiplyBody: NoAssign {\n    Element (*a)[N];\n    Element (*b)[N];\n    Element (*c)[N];\n    const int n;\n    tbb::parallel_while<MatrixMultiplyBody>& my_while;\npublic:\n    typedef MinimalArgumentType argument_type;\n    void operator()( argument_type i_arg ) const {\n        long i = i_arg.get_value();\n        if( (i&1)==0 && i+1<N ) {\n            MinimalArgumentType value;\n            value.set_value(i+1);\n            my_while.add( value );\n        }\n        for( int j=0; j<n; ++j )\n            c[i][j] = 0;\n        for( int k=0; k<n; ++k ) {\n            Element aik = a[i][k];\n            for( int j=0; j<n; ++j )\n                c[i][j] += aik*b[k][j];\n        }\n    }\n    MatrixMultiplyBody( tbb::parallel_while<MatrixMultiplyBody>& w, Element c_[N][N], Element a_[N][N], Element b_[N][N], int n_ ) :\n        a(a_), b(b_), c(c_), n(n_),  my_while(w)\n    {}\n};\n\nvoid WhileMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {\n    IntegerStream stream( N );\n    tbb::parallel_while<MatrixMultiplyBody> w;\n    MatrixMultiplyBody body(w,c,a,b,n);\n    w.run( stream, body );\n}\n\n#include \"tbb/tick_count.h\"\n#include <cstdlib>\n#include <cstdio>\nusing namespace std;\n\nstatic long Iterations = 5;\n\nstatic void SerialMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {\n    for( int i=0; i<n; ++i ) {\n        for( int j=0; j<n; ++j )\n            c[i][j] = 0;\n        for( int k=0; k<n; ++k ) {\n            Element aik = a[i][k];\n            for( int j=0; j<n; ++j )\n                c[i][j] += aik*b[k][j];\n        }\n    }\n}\n\nstatic void InitializeMatrix( Element x[N][N], int n, int salt ) {\n    for( int i=0; i<n; ++i )\n        for( int j=0; j<n; ++j )\n            x[i][j] = (i*n+j)^salt;\n}\n\nstatic Element A[N][N], B[N][N], C[N][N], D[N][N];\n\nstatic void Run( int nthread, int n ) {\n    /* Initialize matrices */\n    InitializeMatrix(A,n,5);\n    InitializeMatrix(B,n,10);\n    InitializeMatrix(C,n,0);\n    InitializeMatrix(D,n,15);\n\n    tbb::tick_count t0 = tbb::tick_count::now();\n    for( long i=0; i<Iterations; ++i ) {\n        WhileMatrixMultiply( C, A, B, n );\n    }\n    tbb::tick_count t1 = tbb::tick_count::now();\n    SerialMatrixMultiply( D, A, B, n );\n\n    // Check result\n    for( int i=0; i<n; ++i )\n        for( int j=0; j<n; ++j )\n            ASSERT( C[i][j]==D[i][j], NULL );\n    REMARK(\"time=%g\\tnthread=%d\\tn=%d\\n\",(t1-t0).seconds(),nthread,n);\n}\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"harness_cpu.h\"\n\nint TestMain () {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init( p );\n        for( int n=N/4; n<=N; n+=N/4 )\n            Run(p,n);\n\n        // Test that all workers sleep when no work\n        TestCPUUserTime(p);\n    }\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_partitioner.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 has an issue in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <cmath>\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n#include \"tbb/tbb_stddef.h\"\n#include \"harness.h\"\n#include <vector>\n\nnamespace test_partitioner_utils {\n\nstruct RangeStatisticData {\n    // denotes the number of range objects\n    size_t m_rangeNum;\n\n    // store minimal and maximal range sizes (in terms of number of iterations)\n    size_t m_minRangeSize;\n    size_t m_maxRangeSize;\n\n    bool m_wasMinRangeSizeWritten; // shows whether relevant field was written or not\n};\n\nusing tbb::internal::uint64_t;\nusing tbb::split;\nusing tbb::proportional_split;\nusing tbb::blocked_range;\n\n// helper for calculating number of range objects created before balancing phase is started\n// and for finding maximum and minimum number of iterations among all such ranges\n// Note: class does not provide exclusive access to members\nclass RangeStatisticCollector {\npublic:\n    RangeStatisticCollector(RangeStatisticData *statisticData) :\n        m_statData(statisticData)\n    {\n        m_called = false;\n        if (m_statData)\n            m_statData->m_rangeNum = 1;\n    }\n\n    // constructor is called from non-proportional split constructor of derived Range\n    RangeStatisticCollector(RangeStatisticCollector& sc, size_t rangeSize) {\n        if (!sc.m_called) {\n            // this is the first time non-proportional split constructor is called\n            // it means that work distribution phase has been completed and\n            // work balancing phase has been just started\n            sc.m_called = true;\n\n            if (sc.m_statData) {\n                size_t *minRangeSize = &sc.m_statData->m_minRangeSize;\n                if (*minRangeSize > rangeSize || !sc.m_statData->m_wasMinRangeSizeWritten) { // if minimum is not an actual minimum\n                    *minRangeSize = rangeSize;\n                    sc.m_statData->m_wasMinRangeSizeWritten = true;\n                }\n                size_t *maxRangeSize = &sc.m_statData->m_maxRangeSize;\n                if (*maxRangeSize < rangeSize) { // if maximum is not an actual maximum\n                    *maxRangeSize = rangeSize;\n                }\n            }\n        }\n        *this = sc;\n        // constructor is used on work balancing phase only, so no need to increment\n        // number of range objects created\n    }\n\n    RangeStatisticCollector(RangeStatisticCollector& sc, proportional_split&) {\n        if (sc.m_statData)\n            sc.m_statData->m_rangeNum++;\n        *this = sc;\n    }\n\nprivate:\n    RangeStatisticData *m_statData;\n\n    // turns to 'true' when non-proportional split constructor is called first time\n    bool m_called;\n};\n\n// Base class for fake ranges used in vaious tests for parallel\n// algorithms as well as for partitioner\ntemplate <typename DerivedRange, typename T>\nclass RangeBase: public RangeStatisticCollector {\nprotected:\n    size_t my_begin, my_end;\n    bool m_provide_feedback;\n    bool m_ensure_non_empty_size;\npublic:\n    RangeBase(size_t _begin, size_t _end, RangeStatisticData *statData,\n              bool provide_feedback, bool ensure_non_empty_size)\n        : RangeStatisticCollector(statData)\n        , my_begin(_begin), my_end(_end)\n        , m_provide_feedback(provide_feedback)\n        , m_ensure_non_empty_size(ensure_non_empty_size)\n        { }\n    RangeBase(RangeBase& r, tbb::split) : RangeStatisticCollector(r, r.size()) {\n        *this = r;\n        size_t middle = r.my_begin + (r.my_end - r.my_begin) / 2u;\n        r.my_end = my_begin = middle;\n    }\n\n    RangeBase(RangeBase& r, proportional_split& p) : RangeStatisticCollector(r, p) {\n        *this = r;\n        size_t original_size = r.size();\n        T right = self().compute_right_part(r, p);\n        size_t right_part = self().round(right);\n        if( m_ensure_non_empty_size ) {\n            right_part = (original_size == right_part) ? (original_size - 1) : right_part;\n            right_part = (right_part != 0) ? right_part : 1;\n        }\n        r.my_end = my_begin = r.my_end - right_part;\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        if( m_provide_feedback )\n            p.set_proportion(original_size - right_part, right_part);\n#endif\n        if( m_ensure_non_empty_size )\n            ASSERT(r.my_end != r.my_begin && my_end != my_begin, \"Incorrect range split\");\n    }\n\n    size_t begin() const { return my_begin; }\n    size_t end() const { return my_end; }\n    bool is_divisible() const { return (my_end - my_begin) > 1; }\n    bool empty() const { return my_end == my_begin; }\n    size_t size() const { return my_end - my_begin; }\n\n    // helper methods (not part of the range concept)\n    DerivedRange& self() { return static_cast<DerivedRange&>(*this); }\n    size_t round(T part) { return size_t(part); }\n    T compute_right_part(RangeBase& r, proportional_split& p) {\n        return T(r.size() * T(p.right())) / T(p.left() + p.right());\n    }\n    bool is_ensure_non_emptiness() { return m_ensure_non_empty_size; }\n};\n\nnamespace TestRanges {\n/*\n * RoundedUpRange rounds result up\n * RoundedDownRange rounds result down\n * Range1_2 forces proportion always to be 1:2 and rounds up\n * Range1_999 uses weird proportion 1:999 and rounds up\n * Range1_999 uses weird proportion 999:1 and rounds up\n * BlockedRange uses tbb::blocked_range formula for proportion calculation\n * InvertedProportionRange inverts proportion suggested by partitioner (e.g. 1:3 --> 3:1)\n * ExactSplitRange uses integer arithmetic for accurate splitting\n */\n\nclass RoundedDownRange: public RangeBase<RoundedDownRange, float> {\npublic:\n    RoundedDownRange(size_t _begin, size_t _end, RangeStatisticData *statData,\n                     bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<RoundedDownRange, float>(_begin, _end, statData, provide_feedback,\n                                             ensure_non_empty_size) { }\n    RoundedDownRange(RoundedDownRange& r, tbb::split)\n        : RangeBase<RoundedDownRange, float>(r, tbb::split()) { }\n    RoundedDownRange(RoundedDownRange& r, proportional_split& p)\n        : RangeBase<RoundedDownRange, float>(r, p) { }\n    // uses default implementation of RangeBase::round() which rounds down\n    static const bool is_splittable_in_proportion = true;\n};\n\nclass RoundedUpRange: public RangeBase<RoundedUpRange, float> {\npublic:\n    RoundedUpRange(size_t _begin, size_t _end, RangeStatisticData *statData,\n                   bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<RoundedUpRange, float>(_begin, _end, statData, provide_feedback,\n                                           ensure_non_empty_size) { }\n    RoundedUpRange(RoundedUpRange& r, tbb::split)\n        : RangeBase<RoundedUpRange, float>(r, tbb::split()) { }\n    RoundedUpRange(RoundedUpRange& r, proportional_split& p)\n        : RangeBase<RoundedUpRange, float>(r, p) { }\n    size_t round(float part) { return size_t(std::ceil(part)); }\n    static const bool is_splittable_in_proportion = true;\n};\n\nclass Range1_2: public RangeBase<Range1_2, float> {\npublic:\n    Range1_2(size_t _begin, size_t _end, RangeStatisticData *statData,\n             bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<Range1_2, float>(_begin, _end, statData, provide_feedback,\n                                     ensure_non_empty_size) { }\n    Range1_2(Range1_2& r, tbb::split) : RangeBase<Range1_2, float>(r, tbb::split()) { }\n    Range1_2(Range1_2& r, proportional_split& p) : RangeBase<Range1_2, float>(r, p) { }\n    static const bool is_splittable_in_proportion = true;\n    float compute_right_part(RangeBase<Range1_2, float>& r, proportional_split&) {\n        return float(r.size() * 2) / 3.0f;\n    }\n    // uses default implementation of RangeBase::round() which rounds down\n};\n\nclass Range1_999: public RangeBase<Range1_999, float> {\npublic:\n    Range1_999(size_t _begin, size_t _end, RangeStatisticData *statData,\n               bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<Range1_999, float>(_begin, _end, statData, provide_feedback,\n                                       ensure_non_empty_size) { }\n    Range1_999(Range1_999& r, tbb::split) : RangeBase<Range1_999, float>(r, tbb::split()) { }\n    Range1_999(Range1_999& r, proportional_split& p) : RangeBase<Range1_999, float>(r, p) { }\n    static const bool is_splittable_in_proportion = true;\n    float compute_right_part(RangeBase<Range1_999, float>& r, proportional_split&) {\n        return float(r.size() * 999) / 1000.0f;\n    }\n    // uses default implementation of RangeBase::round() which rounds down\n};\n\nclass Range999_1: public RangeBase<Range999_1, float> {\npublic:\n    Range999_1(size_t _begin, size_t _end, RangeStatisticData *statData,\n               bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<Range999_1, float>(_begin, _end, statData, provide_feedback,\n                                       ensure_non_empty_size) { }\n    Range999_1(Range999_1& r, tbb::split) : RangeBase<Range999_1, float>(r, tbb::split()) { }\n    Range999_1(Range999_1& r, proportional_split& p) : RangeBase<Range999_1, float>(r, p) { }\n    static const bool is_splittable_in_proportion = true;\n    float compute_right_part(RangeBase<Range999_1, float>& r, proportional_split&) {\n        return float(r.size()) / 1000.0f;\n    }\n    // uses default implementation of RangeBase::round() which rounds down\n};\n\nclass BlockedRange: public RangeStatisticCollector, public blocked_range<size_t>  {\npublic:\n    BlockedRange(size_t _begin, size_t _end, RangeStatisticData *statData, bool, bool)\n        : RangeStatisticCollector(statData), blocked_range<size_t>(_begin, _end) { }\n    BlockedRange(BlockedRange& r, split)\n        : RangeStatisticCollector(r, r.size()), blocked_range<size_t>(r, split()) { }\n    BlockedRange(BlockedRange& r, proportional_split& p)\n        : RangeStatisticCollector(r, p), blocked_range<size_t>(r, p) { }\n    static const bool is_splittable_in_proportion = true;\n    bool is_ensure_non_emptiness() { return false; }\n};\n\nclass InvertedProportionRange: public RangeBase<InvertedProportionRange, float> {\npublic:\n    InvertedProportionRange(size_t _begin, size_t _end, RangeStatisticData *statData,\n                            bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<InvertedProportionRange, float>(_begin, _end, statData, provide_feedback,\n                                                    ensure_non_empty_size) { }\n    InvertedProportionRange(InvertedProportionRange& r, split)\n        : RangeBase<InvertedProportionRange, float>(r, split()) { }\n    InvertedProportionRange(InvertedProportionRange& r, proportional_split& p)\n        : RangeBase<InvertedProportionRange, float>(r, p) { }\n    float compute_right_part(RangeBase<InvertedProportionRange, float>& r,\n                             proportional_split& p) {\n        return float(r.size() * float(p.left())) / float(p.left() + p.right());\n    }\n    static const bool is_splittable_in_proportion = true;\n};\n\nclass ExactSplitRange: public RangeBase<ExactSplitRange, size_t> {\npublic:\n    ExactSplitRange(size_t _begin, size_t _end, RangeStatisticData *statData,\n                    bool provide_feedback, bool ensure_non_empty_size)\n        : RangeBase<ExactSplitRange, size_t>(_begin, _end, statData, provide_feedback,\n                                             ensure_non_empty_size) { }\n    ExactSplitRange(ExactSplitRange& r, split)\n        : RangeBase<ExactSplitRange, size_t>(r, split()) { }\n    ExactSplitRange(ExactSplitRange& r, proportional_split& p)\n        : RangeBase<ExactSplitRange, size_t>(r, p) { }\n    size_t compute_right_part(RangeBase<ExactSplitRange, size_t>& r, proportional_split& p) {\n        size_t parts = size_t(p.left() + p.right());\n        size_t currSize = r.size();\n        size_t int_part = currSize / parts * p.right();\n        size_t remainder = currSize % parts * p.right();\n        int_part += remainder / parts;\n        remainder %= parts;\n        size_t right_part = int_part + (remainder > parts/2 ? 1 : 0);\n        return right_part;\n    }\n    static const bool is_splittable_in_proportion = true;\n};\n\n} // namespace TestRanges\n\nstruct TreeNode {\n    size_t m_affinity;\n    size_t m_range_begin, m_range_end;\n    TreeNode *m_left, *m_right;\nprivate:\n    TreeNode(size_t range_begin, size_t range_end, size_t affinity,\n             TreeNode* left, TreeNode* right)\n        : m_affinity(affinity), m_range_begin(range_begin), m_range_end(range_end),\n          m_left(left), m_right(right) { }\n\n    friend TreeNode* make_node(size_t range_begin, size_t range_end, size_t affinity,\n                               TreeNode *left, TreeNode *right);\n};\n\nTreeNode* make_node(size_t range_begin, size_t range_end, size_t affinity,\n                    TreeNode* left = NULL, TreeNode* right = NULL) {\n    ASSERT(range_begin <= range_end, \"Incorrect range interval\");\n    return new TreeNode(range_begin, range_end, affinity, left, right);\n}\n\n// Class stores nodes as a binary tree\n// (marshals TreeNode objects in accordance with values of range intervals)\n// Note: BinaryTree deletes all TreeNode objects pushed into it in a destruction phase\nclass BinaryTree {\npublic:\n    BinaryTree() : m_root(NULL) { }\n    ~BinaryTree() {\n        if (m_root)\n            remove_node_recursively(m_root);\n    }\n\n    // pushed node must be within subrange of the parent nodes\n    void push_node(TreeNode* node) {\n        if (!node)\n            return;\n\n        if (m_root) {\n            ASSERT(node->m_range_begin >= m_root->m_range_begin &&\n                         node->m_range_end <= m_root->m_range_end,\n                         \"Cannot push node not from subrange\");\n        }\n\n        push_subnode(m_root, node);\n    }\n\n    void visualize() {\n        if (!m_root) { // nothing to visualize\n            REPORT(\"Tree is empty\\n\");\n            return;\n        }\n        visualize_node(m_root);\n    }\n\n    bool operator ==(const BinaryTree& other_tree) const { return compare_nodes(m_root, other_tree.m_root); }\n    void fill_leafs(std::vector<TreeNode*>& leafs) const { fill_leafs_impl(m_root, leafs); }\n\nprivate:\n    TreeNode *m_root;\n\n    void push_subnode(TreeNode *&root_node, TreeNode *node) {\n        if (!root_node) {\n            root_node = node;\n            return;\n        } else if (are_nodes_equal(root_node, node)) {\n            // no need to push the same node\n            return;\n        }\n\n        if (!has_children(root_node)) {\n            // if current root_node does not have children passed node\n            // should has one of the interval bounds to be equal to\n            // the same bound in the root_node\n            if (is_look_like_left_sibling(root_node, node))\n                push_subnode(root_node->m_left, node);\n            else\n                push_subnode(root_node->m_right, node);\n            return;\n        }\n\n        if (has_left_child(root_node)) {\n            if (is_subnode(root_node->m_left, node)) {\n                push_subnode(root_node->m_left, node);\n                return;\n            }\n            push_subnode(root_node->m_right, node);\n            return;\n        }\n\n        ASSERT(root_node->m_right != NULL, \"Right child is NULL but must be present\");\n        if (is_subnode(root_node->m_right, node)) {\n            push_subnode(root_node->m_right, node);\n            return;\n        }\n        push_subnode(root_node->m_left, node);\n        return;\n    }\n\n    bool has_children(TreeNode *node) { return node->m_left || node->m_right; }\n\n    bool is_look_like_left_sibling(TreeNode *root_node, TreeNode *node) {\n        if (root_node->m_range_begin == node->m_range_begin)\n            return true;\n        ASSERT(root_node->m_range_end == node->m_range_end, NULL);\n        return false;\n    }\n\n    bool has_left_child(TreeNode *node) { return node->m_left != NULL; }\n\n    bool is_subnode(TreeNode *root_node, TreeNode *node) {\n        return root_node->m_range_begin <= node->m_range_begin &&\n            node->m_range_end <= root_node->m_range_end;\n    }\n\n    bool are_nodes_equal(TreeNode *node1, TreeNode *node2) const {\n        return node1->m_range_begin == node2->m_range_begin &&\n            node1->m_range_end == node2->m_range_end;\n    }\n\n    void remove_node_recursively(TreeNode *node) {\n        if (node->m_left)\n            remove_node_recursively(node->m_left);\n        if (node->m_right)\n            remove_node_recursively(node->m_right);\n        delete node;\n    }\n\n    static void visualize_node(const TreeNode* node, unsigned indent = 0) {\n        // respecting indent\n        const char *indentStep = \"    \";\n        for (unsigned i = 0; i < indent; ++i)\n            REPORT(\"%s\", indentStep);\n\n        size_t rangeSize = node->m_range_end - node->m_range_begin;\n        REPORT(\"[%llu, %llu)%%%llu@%llu\\n\", uint64_t(node->m_range_begin), uint64_t(node->m_range_end),\n               uint64_t(rangeSize), uint64_t(node->m_affinity));\n\n        if (node->m_left)\n            visualize_node(node->m_left, indent + 1);\n        if (node->m_right)\n            visualize_node(node->m_right, indent + 1);\n    }\n\n    bool compare_nodes(TreeNode* node1, TreeNode* node2) const {\n        if (node1 == NULL && node2 == NULL) return true;\n        if (node1 == NULL || node2 == NULL) return false;\n        return are_nodes_equal(node1, node2) && compare_nodes(node1->m_left, node2->m_left)\n            && compare_nodes(node1->m_right, node2->m_right);\n    }\n\n    void fill_leafs_impl(TreeNode* node, std::vector<TreeNode*>& leafs) const {\n        if (node->m_left == NULL && node->m_right == NULL)\n            leafs.push_back(node);\n        if (node->m_left != NULL) fill_leafs_impl(node->m_left, leafs);\n        if (node->m_right != NULL) fill_leafs_impl(node->m_right, leafs);\n    }\n};\n\nclass SimpleBody {\npublic:\n    SimpleBody() { }\n    template <typename Range>\n    void operator()(Range&) const { }\n};\n\nclass SimpleReduceBody {\npublic:\n    SimpleReduceBody() { }\n    SimpleReduceBody(SimpleReduceBody&, tbb::split) { }\n    template <typename Range>\n    void operator()(Range&) { }\n    void join(SimpleReduceBody&) { }\n};\n\nnamespace interaction_with_range_and_partitioner {\n\nclass SplitConstructorAssertedRange {\n    mutable bool is_divisible_called;\n    mutable bool is_empty_called;\n    bool my_assert_in_nonproportional, my_assert_in_proportional;\npublic:\n    SplitConstructorAssertedRange(bool assert_in_nonproportional, bool assert_in_proportional)\n        : is_divisible_called(false),\n          is_empty_called(false),\n          my_assert_in_nonproportional(assert_in_nonproportional),\n          my_assert_in_proportional(assert_in_proportional) { }\n    SplitConstructorAssertedRange(SplitConstructorAssertedRange& r, tbb::split) {\n        *this = r;\n        ASSERT( !my_assert_in_nonproportional, \"Disproportional splitting constructor was called but should not been\" );\n    }\n    SplitConstructorAssertedRange(SplitConstructorAssertedRange& r, proportional_split&) {\n        *this = r;\n        ASSERT( !my_assert_in_proportional, \"Proportional splitting constructor was called but should not been\" );\n    }\n    bool is_divisible() const {\n        if (!is_divisible_called) {\n            is_divisible_called = true;\n            return true;\n        }\n        return false;\n    }\n    bool empty() const {\n        if (!is_empty_called) {\n            is_empty_called = true;\n            return false;\n        }\n        return true;\n    }\n};\n\n/*\n * Possible use cases are:\n * -------------------------------------------------------------------------------------------------------------\n * Range#  is_splittable_in_proportion   Range proportional ctor      Used partitioner          Result Effect\n * -------------------------------------------------------------------------------------------------------------\n *   1           true                       available                proportional             pMN, r(p), part(p)\n * -------------------------------------------------------------------------------------------------------------\n *   2           false                      available                proportional             p11, r(p), part(p)\n * -------------------------------------------------------------------------------------------------------------\n *   3        not defined                   available                proportional             p11, r(p), part(p)\n * -------------------------------------------------------------------------------------------------------------\n *   4           true                     not available              proportional             pMN, r(s), part(p)  *\n * -------------------------------------------------------------------------------------------------------------\n *   5           false                    not available              proportional             p11, r(s), part(p)\n * -------------------------------------------------------------------------------------------------------------\n *   6        not defined                 not available              proportional             p11, r(s), part(p)\n * -------------------------------------------------------------------------------------------------------------\n *   1           true                       available                   simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *   2           false                      available                   simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *   3        not defined                   available                   simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *   4           true                     not available                 simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *   5           false                    not available                 simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *   6        not defined                 not available                 simple                s, r(s), part(s)\n * -------------------------------------------------------------------------------------------------------------\n *\n * Legend:\n *   proportional - with proportional splits (e.g. affinity_partitioner)\n *   simple  - without proportional splits (e.g. simple_partitioner, auto_partitioner)\n *   pMN     - proportional_split object with proportion M to N is created. (p11 - proportion 1 to 1)\n *   s       - split object is created\n *   r(p)    - range's proportional split constructor is called\n *   r(s)    - range's ordinary split constructor is called\n *   part(p) - partitioner's proportional split constructor is called\n *   part(s) - partitioner's ordinary split constructor is called\n *      *    - incorrect split behavior is possible (e.g. partitioner divides at an arbitrary ratio while\n *             range divides into halves)\n */\n\n\n// is_splittable_in_proportion = true, proportional_split ctor\nclass Range1: public SplitConstructorAssertedRange {\npublic:\n    Range1(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range1( Range1& r, tbb::split ) : SplitConstructorAssertedRange(r, tbb::split()) { }\n    Range1( Range1& r, proportional_split& proportion ) : SplitConstructorAssertedRange(r, proportion) { }\n    static const bool is_splittable_in_proportion = true;\n};\n\n// is_splittable_in_proportion = false, proportional_split ctor\nclass Range2: public SplitConstructorAssertedRange {\npublic:\n    Range2(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range2(Range2& r, tbb::split) : SplitConstructorAssertedRange(r, tbb::split()) { }\n    Range2(Range2& r, proportional_split& p) : SplitConstructorAssertedRange(r, p) {\n        // TODO: add check that 'is_splittable_in_proportion==false' results only in 1:1 proportions\n    }\n    static const bool is_splittable_in_proportion = false;\n};\n\n// is_splittable_in_proportion is not defined, proportional_split ctor\nclass Range3: public SplitConstructorAssertedRange {\npublic:\n    Range3(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range3(Range3& r, tbb::split) : SplitConstructorAssertedRange(r, tbb::split()) { }\n    Range3(Range3& r, proportional_split& p) : SplitConstructorAssertedRange(r, p) {\n        // TODO: add check that absence of 'is_splittable_in_proportion' results only in 1:1 proportions\n    }\n};\n\n// is_splittable_in_proportion = true, proportional_split ctor is not defined\nclass Range4: public SplitConstructorAssertedRange {\npublic:\n    Range4(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range4(Range4& r, tbb::split) : SplitConstructorAssertedRange(r, tbb::split()) { }\n    static const bool is_splittable_in_proportion = true;\n};\n\n// is_splittable_in_proportion = false, proportional_split ctor is not defined\nclass Range5: public SplitConstructorAssertedRange {\npublic:\n    Range5(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range5(Range5& r, tbb::split) : SplitConstructorAssertedRange(r, tbb::split()) { }\n    static const bool is_splittable_in_proportion = false;\n};\n\n// is_splittable_in_proportion is not defined, proportional_split ctor is not defined\nclass Range6: public SplitConstructorAssertedRange {\npublic:\n    Range6(bool assert_in_nonproportional, bool assert_in_proportional)\n        : SplitConstructorAssertedRange(assert_in_nonproportional, assert_in_proportional) { }\n    Range6(Range6& r, tbb::split) : SplitConstructorAssertedRange(r, tbb::split()) { }\n};\n\n} // namespace interaction_with_range_and_partitioner\n\n} // namespace test_partitioner_utils\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_partitioner_whitebox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_assert.h\"\n#include \"test_partitioner_whitebox.h\"\n\nusing uniform_iterations_distribution::ParallelTestBody;\n\ntemplate<typename Partitioner>\nclass ParallelBody: public ParallelTestBody {\npublic:\n    ParallelBody(size_t parallel_group_thread_starting_index)\n        : ParallelTestBody(parallel_group_thread_starting_index) { }\n\n    void operator()(size_t relative_thread_index) const {\n        use_case_settings_t settings = {\n            m_parallel_group_thread_starting_index + relative_thread_index, // thread_num\n            0,                                                              // factors_array_len\n            0,                                                              // range_begin\n            false,                                                          // provide_feedback (disabled)\n            true,                                                           // ensure_non_empty_size\n            0,                                                              // above_threads_size_tolerance\n            0,                                                              // below_threads_size_tolerance\n            0,                                                              // between_min_max_ranges_tolerance\n            &ParallelTestBody::uniform_distribution_checker                 // checker function for a particular test case\n        };\n        g_threadNums.local() = settings.thread_num;\n        using namespace test_partitioner_utils::TestRanges;\n        {\n            size_t factors[] = { 1, 2, 3, 4, 5, 7, 9, 13, 27, 29, 30, 31, 32 };\n            settings.factors_array_len = sizeof(factors) / sizeof(factors[0]);\n\n            settings.between_min_max_ranges_tolerance = 0; // it should be equal to zero for blocked_range\n            test<BlockedRange, Partitioner>(settings, factors);\n\n            settings.checker = &ParallelTestBody::nonuniform_distribution_checker;\n            test<InvertedProportionRange, Partitioner>(settings, factors);\n            test<RoundedDownRange, Partitioner>(settings, factors);\n            test<RoundedUpRange, Partitioner>(settings, factors);\n\n            test<Range1_2, Partitioner>(settings, factors);\n            test<Range1_999, Partitioner>(settings, factors);\n            test<Range999_1, Partitioner>(settings, factors);\n        }\n\n        {\n            // iterations might not be distributed uniformly\n            float factors[] = { 1.2f, 2.5f, 3.7f, 4.2f, 5.1f, 8.9f, 27.8f };\n            settings.factors_array_len = sizeof(factors) / sizeof(factors[0]);\n\n            settings.between_min_max_ranges_tolerance = 1; // it should be equal to one for blocked_range\n            settings.checker = &ParallelTestBody::uniform_distribution_checker;\n            test<BlockedRange, Partitioner>(settings, factors);\n\n            settings.checker = &ParallelTestBody::nonuniform_distribution_checker;\n            test<InvertedProportionRange, Partitioner>(settings, factors);\n            test<RoundedDownRange, Partitioner>(settings, factors);\n            test<RoundedUpRange, Partitioner>(settings, factors);\n\n            test<Range1_2, Partitioner>(settings, factors);\n            test<Range1_999, Partitioner>(settings, factors);\n            test<Range999_1, Partitioner>(settings, factors);\n        }\n\n        {\n            // iterations might not be distributed uniformly\n            size_t factors[] = { 1, 2, 3, 4, 5, 7, 9, 11, 13, 27, 29, 30, 31, 32 };\n            settings.factors_array_len = sizeof(factors) / sizeof(factors[0]);\n\n            settings.checker = &ParallelTestBody::uniform_distribution_checker;\n            test<BlockedRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<BlockedRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            settings.checker = &ParallelTestBody::nonuniform_distribution_checker;\n            test<InvertedProportionRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<InvertedProportionRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            test<RoundedDownRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<RoundedDownRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            test<RoundedUpRange, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<RoundedUpRange, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            test<Range1_2, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<Range1_2, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            test<Range1_999, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<Range1_999, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n\n            test<Range999_1, Partitioner>(settings, factors, &shifted_left_range_size_generator);\n            test<Range999_1, Partitioner>(settings, factors, &shifted_right_range_size_generator);\n        }\n\n        {\n            settings.factors_array_len = 1;\n            settings.between_min_max_ranges_tolerance = 1; // since range iterations are not divided without remainder\n            settings.checker = &ParallelTestBody::uniform_distribution_checker;\n            test<ExactSplitRange, Partitioner, size_t>(settings, NULL, &max_range_size_generator);\n            settings.range_begin = size_t(-1) - 10000;\n            test<ExactSplitRange, Partitioner, size_t>(settings, NULL, &max_range_size_generator);\n        }\n\n        {\n            settings.range_begin = 0;\n            settings.factors_array_len = 2 * unsigned(settings.thread_num);\n            settings.checker = &ParallelTestBody::nonuniform_distribution_checker;\n\n            test<RoundedUpRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<RoundedDownRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n\n            test<InvertedProportionRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range1_2, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range1_999, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range999_1, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n\n            settings.ensure_non_empty_size = false;\n            test<RoundedUpRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<RoundedDownRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n\n            test<InvertedProportionRange, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range1_2, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range1_999, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n            test<Range999_1, Partitioner, size_t>(settings, NULL, &simple_size_generator);\n        }\n    }\n};\n\nint TestMain() {\n    uniform_iterations_distribution::test<ParallelBody <tbb::affinity_partitioner> >();\n    uniform_iterations_distribution::test<ParallelBody <tbb::static_partitioner> >();\n    uniform_iterations_distribution::test_task_affinity<tbb::affinity_partitioner>();\n    uniform_iterations_distribution::test_task_affinity<tbb::static_partitioner>();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_partitioner_whitebox.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Common part for the partitioner whitebox tests */\n\n#include <typeinfo>\n\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\n#include \"string.h\"\n#include \"harness_assert.h\"\n#include \"test_partitioner.h\"\n#include <numeric>\n\n#if TBB_USE_DEBUG\n// reducing number of simulations due to test timeout\nconst size_t max_simulated_threads = 256;\n#else\nconst size_t max_simulated_threads = 640;\n#endif\n\ntypedef tbb::enumerable_thread_specific<size_t> ThreadNumsType;\nsize_t g_threadNumInitialValue = 10;\nThreadNumsType g_threadNums(g_threadNumInitialValue);\n\nnamespace whitebox_simulation {\nsize_t whitebox_thread_index = 0;\ntest_partitioner_utils::BinaryTree reference_tree;\n}\n\n// simulate a subset of task.h\nnamespace tbb {\nnamespace internal {\ntypedef unsigned short affinity_id;\n}\nclass fake_task {\npublic:\n    typedef internal::affinity_id affinity_id;\n    void set_affinity(affinity_id a) { my_affinity = a; }\n    affinity_id affinity() const { return my_affinity; }\n    void set_parent(fake_task* p) { my_parent = p; }\n    fake_task *parent() const { return my_parent; }\n    bool is_stolen_task() const { return false; }\n    intptr_t ref_count() const { return 1; }\n    bool is_cancelled() const { return false; }\n    static void spawn(fake_task &) {} // for legacy in partitioner.h\n    virtual fake_task* execute() = 0; // enables dynamic_cast\n\n    fake_task() : my_parent(0), my_affinity(0) {}\n    virtual ~fake_task() {}\nprivate:\n    fake_task *my_parent;\n    affinity_id my_affinity;\n};\nnamespace task_arena {\nstatic const int not_initialized = -2;//should match corresponding value in task_arena.h\n}//namespace task_arena\nnamespace this_task_arena {\ninline int current_thread_index() { return (int)whitebox_simulation::whitebox_thread_index; }\n}\n}//namespace tbb\n\n#define __TBB_task_H\n#define __TBB_task_arena_H\n#define get_initial_auto_partitioner_divisor my_get_initial_auto_partitioner_divisor\n#define affinity_partitioner_base_v3 my_affinity_partitioner_base_v3\n#define task fake_task\n#define __TBB_STATIC_THRESHOLD 0\n#include \"tbb/partitioner.h\"\n#undef __TBB_STATIC_THRESHOLD\n#undef task\n#undef affinity_partitioner_base_v3\n#undef get_initial_auto_partitioner_divisor\n\n// replace library functions to simulate concurrency\nnamespace tbb {\nnamespace internal {\nsize_t my_get_initial_auto_partitioner_divisor() {\n    const size_t X_FACTOR = 4;\n    return X_FACTOR * g_threadNums.local();\n}\n\nvoid* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );\nvoid __TBB_EXPORTED_FUNC NFS_Free( void* );\n\nvoid my_affinity_partitioner_base_v3::resize( unsigned factor ) {\n    // Check factor to avoid asking for number of workers while there might be no arena.\n    size_t new_size = factor ? factor * g_threadNums.local() : 0;\n    if (new_size != my_size) {\n        if (my_array) {\n            NFS_Free(my_array);\n            // Following two assignments must be done here for sake of exception safety.\n            my_array = NULL;\n            my_size = 0;\n        }\n        if (new_size) {\n            my_array = static_cast<affinity_id*>(NFS_Allocate(new_size, sizeof(affinity_id), NULL ));\n            memset(my_array, 0, sizeof(affinity_id) * new_size);\n            my_size = new_size;\n        }\n    }\n}\n\n} //namespace internal\n// simulate a subset of parallel_for\nnamespace interface9 {\nnamespace internal {\n\n// parallel_for algorithm that executes sequentially\ntemplate<typename Range, typename Body, typename Partitioner>\nclass start_for : public fake_task {\n    Range my_range;\n    Body my_body;\n    typename Partitioner::task_partition_type my_partition;\n    size_t m_executedBegin, m_executedEnd;\n    bool m_firstTimeRun;\n    size_t m_joinedBegin, m_joinedEnd;\n    test_partitioner_utils::BinaryTree* m_tree;\npublic:\n    start_for( const Range& range, const Body& body, Partitioner& partitioner,\n               test_partitioner_utils::BinaryTree* tree ) :\n        my_range(range), my_body(body), my_partition(partitioner),\n        m_executedBegin(0), m_executedEnd(0), m_firstTimeRun(true),\n        m_joinedBegin(/* grows left */ range.end()), m_joinedEnd(range.end()), m_tree(tree)\n    {\n        if (m_tree) {\n            m_tree->push_node( test_partitioner_utils::make_node(my_range.begin(), my_range.end(), affinity()) );\n        }\n    }\n    //! Splitting constructor used to generate children.\n    /** parent_ becomes left child.  Newly constructed object is right child. */\n    start_for( start_for& parent_, typename Partitioner::split_type& split_obj) :\n        my_range(parent_.my_range, split_obj),\n        my_body(parent_.my_body),\n        my_partition(parent_.my_partition, split_obj),\n        m_executedBegin(0), m_executedEnd(0), m_firstTimeRun(true),\n        m_joinedBegin(/* grows left */ my_range.end()), m_joinedEnd(my_range.end()),\n        m_tree(parent_.m_tree)\n    {\n        set_parent(parent_.parent());\n        my_partition.set_affinity(*this);\n\n        if (m_tree) {\n            // collecting splitting statistics\n            m_tree->push_node( test_partitioner_utils::make_node(my_range.begin(),\n                                                                 my_range.end(),\n                                                                 affinity()) );\n            m_tree->push_node( test_partitioner_utils::make_node(parent_.my_range.begin(),\n                                                                 parent_.my_range.end(),\n                                                                 parent_.affinity()) );\n        }\n    }\n    //! Construct right child from the given range as response to the demand.\n    /** parent_ remains left child.  Newly constructed object is right child. */\n    start_for( start_for& parent_, const Range& r, depth_t d ) :\n        my_range(r),\n        my_body(parent_.my_body),\n        my_partition(parent_.my_partition, tbb::split()),\n        m_executedBegin(0), m_executedEnd(0), m_firstTimeRun(true),\n        m_joinedBegin(/* grows left */ r.end()), m_joinedEnd(r.end()),\n        m_tree(parent_.m_tree)\n    {\n        set_parent(parent_.parent());\n        my_partition.set_affinity(*this);\n        my_partition.align_depth( d );\n    }\n    fake_task* execute() __TBB_override {\n        my_partition.check_being_stolen( *this );\n        size_t origBegin = my_range.begin();\n        size_t origEnd = my_range.end();\n\n        my_partition.execute(*this, my_range);\n\n        ASSERT(m_executedEnd == m_joinedBegin, \"Non-continuous execution\");\n        m_executedEnd = m_joinedEnd;\n\n        ASSERT(origBegin == m_executedBegin && origEnd == m_executedEnd,\n               \"Not all iterations were processed\");\n        return NULL;\n    }\n    //! Run body for range, serves as callback for partitioner\n    void run_body( Range &r ) {\n        if( r.is_ensure_non_emptiness() )\n            ASSERT( !r.empty(), \"Empty ranges are not allowed\" );\n        my_body(r);\n        if (m_firstTimeRun) {\n            m_firstTimeRun = false;\n            m_executedBegin = m_executedEnd = r.begin();\n        }\n        ASSERT(m_executedBegin <= r.begin() && m_executedEnd <= r.end(),\n               \"Non-continuous execution\");\n        m_executedEnd = r.end();\n    }\n    //! spawn right task, serves as callback for partitioner\n    void offer_work(typename Partitioner::split_type& split_obj) {\n        start_for sibling(*this, split_obj);\n        sibling.execute();\n        join(sibling.m_executedBegin, sibling.m_executedEnd);\n    }\n    //! spawn right task, serves as callback for partitioner\n    void offer_work(const Range& r, depth_t d = 0) {\n        start_for sibling(*this, r, d);\n        sibling.execute();\n        join(sibling.m_executedBegin, sibling.m_executedEnd);\n    }\n    void join(size_t siblingExecutedBegin, size_t siblingExecutedEnd) {\n        ASSERT(siblingExecutedEnd == m_joinedBegin, \"?\");\n        m_joinedBegin = siblingExecutedBegin;\n    }\n};\n\n} //namespace internal\n} //namespace interfaceX\n} //namespace tbb\n\nnamespace whitebox_simulation {\nusing namespace tbb::interface9::internal;\ntemplate<typename Range, typename Body, typename Partitioner>\nvoid parallel_for( const Range& range, const Body& body, Partitioner& partitioner,\n                   test_partitioner_utils::BinaryTree* tree = NULL) {\n    if (!range.empty()) {\n        flag_task parent;\n        start_for<Range, Body, Partitioner> start(range, body, partitioner, tree);\n        start.set_parent(&parent);\n        start.execute();\n    }\n}\n\n} //namespace whitebox_simulation\n\ntemplate <typename Range, typename Body, typename Partitioner>\nvoid test_case(Range& range, const Body& body, Partitioner& partitioner,\n               test_partitioner_utils::BinaryTree* tree = NULL) {\n    whitebox_simulation::parallel_for(range, body, partitioner, tree);\n}\n\n// Functions generate size for range objects used in tests\ntemplate <typename T>\nsize_t default_range_size_generator(T* factor, unsigned index, size_t thread_num) {\n    return size_t(factor[index] * thread_num);\n}\n\nsize_t shifted_left_range_size_generator(size_t* factor, unsigned index, size_t thread_num) {\n    return factor[index] * thread_num - 1;\n}\n\nsize_t shifted_right_range_size_generator(size_t* factor, unsigned index, size_t thread_num) {\n    return factor[index] * thread_num + 1;\n}\n\nsize_t max_range_size_generator(size_t*, unsigned, size_t) {\n    return size_t(-1);\n}\n\nsize_t simple_size_generator(size_t*, unsigned index, size_t) {\n    return index;\n}\n\nnamespace uniform_iterations_distribution {\n\n/*\n * Test checks uniform distribution of range's iterations among all tasks just after\n * work distribution phase has been completed and just before work balancing phase has been started\n */\n\nusing namespace test_partitioner_utils;\n\nclass ParallelTestBody {\npublic:\n    struct use_case_settings_t;\n\n    typedef void (*CheckerFuncType)(const char*, size_t, const use_case_settings_t*, const RangeStatisticData&);\n\n    struct use_case_settings_t {\n        size_t thread_num;                         // number of threads used during current use case\n        unsigned factors_array_len;                // size of 'factors' array\n        size_t range_begin;                        // beginning of range iterations\n        bool provide_feedback;                     // 'true' if range should give feedback\n        bool ensure_non_empty_size;                // don't allow empty size ranges\n\n        size_t above_threads_size_tolerance;       // allowed value for number of created ranges\n                                                   // when initial size of the range was greater or\n                                                   // equal to number of threads\n\n        size_t below_threads_size_tolerance;       // allowed value for number of created ranges\n                                                   // when initial size of the range was less than\n                                                   // number of threads\n\n        size_t between_min_max_ranges_tolerance;   // allowed value for difference of iterations\n                                                   // between bigger and lesser ranges\n\n        CheckerFuncType checker;                   // checker function for a particular test case\n    };\n\n    ParallelTestBody(size_t parallel_group_thread_starting_index)\n        : m_parallel_group_thread_starting_index(parallel_group_thread_starting_index) { }\n\n    void operator()(size_t) const { ASSERT( false, \"Empty ParallelTestBody called\" ); }\n\n    static void uniform_distribution_checker(const char* rangeName, size_t rangeSize, const use_case_settings_t* settings,\n        const RangeStatisticData& stat)\n    {\n        // Checking that all threads were given a task\n        if (rangeSize >= settings->thread_num) {\n            uint64_t disparity =\n                max(stat.m_rangeNum, settings->thread_num) - min(stat.m_rangeNum, settings->thread_num);\n            if (disparity > settings->above_threads_size_tolerance) {\n                REPORT(\"ERROR: '%s (f=%d|e=%d)': |#ranges(%llu)-#threads(%llu)|=%llu > %llu=tolerance\\n\",\n                    rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size), stat.m_rangeNum,\n                    settings->thread_num, disparity, uint64_t(settings->above_threads_size_tolerance));\n                ASSERT(disparity <= settings->above_threads_size_tolerance, \"Incorrect number of range \"\n                    \"objects was created before work balancing phase started\");\n            }\n        } else if (settings->ensure_non_empty_size && rangeSize != 0) {\n            uint64_t disparity = max(stat.m_rangeNum, rangeSize) - min(stat.m_rangeNum, rangeSize);\n            if (disparity > settings->below_threads_size_tolerance ) {\n                REPORT(\"ERROR: '%s (f=%d|e=%d)': |#ranges-range size|=%llu > %llu=tolerance\\n\",\n                    rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size),\n                    disparity, uint64_t(settings->below_threads_size_tolerance));\n                ASSERT(disparity <= settings->below_threads_size_tolerance, \"Incorrect number of range objects\"\n                    \" was created before work balancing phase started\");\n            }\n        }\n        // Checking difference between min and max number of range iterations\n        size_t diff = stat.m_maxRangeSize - stat.m_minRangeSize;\n        if (diff > settings->between_min_max_ranges_tolerance) {\n            REPORT(\"ERROR: '%s (f=%d|e=%d)': range size difference=%llu > %llu=tolerance\\n\",\n                rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size),\n                uint64_t(diff), uint64_t(settings->between_min_max_ranges_tolerance));\n            ASSERT(diff <= settings->between_min_max_ranges_tolerance, \"Uniform iteration distribution error\");\n        }\n    }\n    // Checker for test cases where ranges don't provide feedback during proportional split to\n    // partitioner and differ from tbb::blocked_range implementation in their splitting algorithm\n    static void nonuniform_distribution_checker(const char* rangeName, size_t rangeSize, const use_case_settings_t* settings,\n        const RangeStatisticData& stat)\n    {\n        if (stat.m_rangeNum > settings->thread_num) {\n            REPORT(\"ERROR: '%s (f=%d|e=%d)': %llu=#ranges > #threads=%llu\\n\",\n                rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size),\n                uint64_t(stat.m_rangeNum), uint64_t(settings->thread_num));\n            ASSERT(stat.m_rangeNum <= settings->thread_num,\n                \"Incorrect number of range objects was created before work balancing phase started\");\n        }\n        // Checking difference between min and max number of range iterations\n        size_t diff = stat.m_maxRangeSize - stat.m_minRangeSize;\n        if (diff > rangeSize) {\n            REPORT(\"ERROR: '%s (f=%d|e=%d)': range size difference=%llu > %llu=initial range size\\n\",\n                rangeName, int(settings->provide_feedback), int(settings->ensure_non_empty_size),\n                uint64_t(diff), uint64_t(rangeSize));\n            ASSERT(diff <= rangeSize, \"Iteration distribution error\");\n        }\n    }\n\nprotected:\n    size_t m_parallel_group_thread_starting_index; // starting index of thread\n\n    template <typename Range, typename Partitioner, typename T>\n    void test(use_case_settings_t& settings, T factors[], size_t (*rsgFunc)(T*, unsigned, size_t)\n        = &default_range_size_generator<T>) const\n    {\n        for (unsigned i = 0; i < settings.factors_array_len; ++i) {\n            size_t range_end = rsgFunc(factors, i, settings.thread_num);\n            RangeStatisticData stat = { /*range num=*/ 0, /*minimal size of range=*/ 0,\n                /*maximal size of range=*/ 0, /*minimal size of range was not rewritten yet=*/ false };\n            Range range = Range(settings.range_begin, range_end, &stat, settings.provide_feedback,\n                                settings.ensure_non_empty_size);\n            Partitioner my_partitioner;\n            test_case(range, SimpleBody(), my_partitioner, NULL);\n            size_t range_size = range_end - settings.range_begin;\n            const char* rangeName = typeid(range).name();\n            settings.checker(rangeName, range_size, &settings, stat);\n        }\n    }\n};\n\ntemplate <typename ParallelTestBody>\nvoid test() {\n    size_t hw_threads_num = tbb::tbb_thread::hardware_concurrency();\n    size_t threadsToRunOn = std::min<size_t>(max_simulated_threads, hw_threads_num);\n\n    size_t parallel_group_thread_starting_index = 1;\n    while( parallel_group_thread_starting_index <= max_simulated_threads - threadsToRunOn ) {\n        NativeParallelFor(threadsToRunOn, ParallelTestBody(parallel_group_thread_starting_index));\n        parallel_group_thread_starting_index += threadsToRunOn;\n    }\n    NativeParallelFor(max_simulated_threads - parallel_group_thread_starting_index,\n        ParallelTestBody(parallel_group_thread_starting_index));\n}\n\nnamespace task_affinity_whitebox {\nsize_t range_begin = 0;\nsize_t range_end = 20;\n}\n\ntemplate<typename Partitioner>\nvoid check_tree(const test_partitioner_utils::BinaryTree&);\n\ntemplate<>\nvoid check_tree<tbb::affinity_partitioner>(const test_partitioner_utils::BinaryTree& tree) {\n    ASSERT(tree == whitebox_simulation::reference_tree,\n        \"affinity_partitioner distributes tasks differently from run to run\");\n}\n\ntemplate<>\nvoid check_tree<tbb::static_partitioner>(const test_partitioner_utils::BinaryTree& tree) {\n    std::vector<test_partitioner_utils::TreeNode* > tree_leafs;\n    tree.fill_leafs(tree_leafs);\n    typedef std::vector<size_t> Slots;\n    Slots affinity_slots(tree_leafs.size() + 1, 0);\n\n    for (std::vector<test_partitioner_utils::TreeNode*>::iterator i = tree_leafs.begin(); i != tree_leafs.end(); ++i) {\n        affinity_slots[(*i)->m_affinity]++;\n        if ((*i)->m_affinity == 0)\n            ASSERT((*i)->m_range_begin == task_affinity_whitebox::range_begin,\n                \"Task with affinity 0 was executed with wrong range\");\n    }\n\n    typedef std::iterator_traits<Slots::iterator>::difference_type slots_difference_type;\n    ASSERT(std::count(affinity_slots.begin(), affinity_slots.end(), size_t(0)) == slots_difference_type(1),\n        \"static_partitioner incorrectly distributed tasks by threads\");\n    ASSERT(std::count(affinity_slots.begin(), affinity_slots.end(), size_t(1)) == slots_difference_type(g_threadNums.local()),\n        \"static_partitioner incorrectly distributed tasks by threads\");\n    ASSERT(affinity_slots[tbb::this_task_arena::current_thread_index() + 1] == 0,\n        \"static_partitioner incorrectly assigns task with 0 affinity\");\n    ASSERT(std::accumulate(affinity_slots.begin(), affinity_slots.end(), size_t(0)) == g_threadNums.local(),\n        \"static_partitioner has created more tasks than the number of threads\");\n}\n\ntemplate<typename Partitioner>\nvoid test_task_affinity() {\n    using namespace task_affinity_whitebox;\n    test_partitioner_utils::SimpleBody body;\n    for (size_t p = 1; p <= 50; ++p) {\n        g_threadNums.local() = p;\n        whitebox_simulation::whitebox_thread_index = 0;\n        test_partitioner_utils::TestRanges::BlockedRange range(range_begin, range_end, /*statData*/NULL,\n                                            /*provide_feedback*/false, /*ensure_non_empty_size*/false);\n        Partitioner partitioner;\n        whitebox_simulation::reference_tree = test_partitioner_utils::BinaryTree();\n        whitebox_simulation::parallel_for(range, body, partitioner, &(whitebox_simulation::reference_tree));\n        while (whitebox_simulation::whitebox_thread_index < p) {\n            test_partitioner_utils::BinaryTree tree;\n            whitebox_simulation::parallel_for(range, body, partitioner, &tree);\n            check_tree<Partitioner>(tree);\n            whitebox_simulation::whitebox_thread_index++;\n        }\n        range_begin++;\n        range_end += 2;\n    }\n}\n\n} /* namespace uniform_iterations_distribution */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_pipeline.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/pipeline.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/atomic.h\"\n#include <cstdlib>\n#include <cstdio>\n#include \"harness.h\"\n\n// In the test, variables related to token counting are declared\n// as unsigned long to match definition of tbb::internal::Token.\n\nstruct Buffer {\n    //! Indicates that the buffer is not used.\n    static const unsigned long unused = ~0ul;\n    unsigned long id;\n    //! True if Buffer is in use.\n    bool is_busy;\n    unsigned long sequence_number;\n    Buffer() : id(unused), is_busy(false), sequence_number(unused) {}\n};\n\nclass waiting_probe {\n    size_t check_counter;\npublic:\n    waiting_probe() : check_counter(0) {}\n    bool required( ) {\n        ++check_counter;\n        return !((check_counter+1)&size_t(0x7FFF));\n    }\n    void probe( ); // defined below\n};\n\nstatic const unsigned MaxStreamSize = 8000;\nstatic const unsigned MaxStreamItemsPerThread = 1000;\n//! Maximum number of filters allowed\nstatic const unsigned MaxFilters = 5;\nstatic unsigned StreamSize;\nstatic const unsigned MaxBuffer = 8;\nstatic bool Done[MaxFilters][MaxStreamSize];\nstatic waiting_probe WaitTest;\nstatic unsigned out_of_order_count;\n\n#include \"harness_concurrency_tracker.h\"\n\nclass BaseFilter: public tbb::filter {\n    bool* const my_done;\n    const bool my_is_last;\n    bool my_is_running;\npublic:\n    tbb::atomic<tbb::internal::Token> current_token;\n    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) :\n        filter(type),\n        my_done(done),\n        my_is_last(is_last),\n        my_is_running(false),\n        current_token()\n    {}\n    virtual Buffer* get_buffer( void* item ) {\n        current_token++;\n        return static_cast<Buffer*>(item);\n    }\n    void* operator()( void* item ) __TBB_override {\n        Harness::ConcurrencyTracker ct;\n        if( is_serial() )\n            ASSERT( !my_is_running, \"premature entry to serial stage\" );\n        my_is_running = true;\n        Buffer* b = get_buffer(item);\n        if( b ) {\n            if( is_ordered() ) {\n                if( b->sequence_number == Buffer::unused )\n                    b->sequence_number = current_token-1;\n                else\n                    ASSERT( b->sequence_number==current_token-1, \"item arrived out of order\" );\n            } else if( is_serial() ) {\n                if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )\n                    out_of_order_count++;\n            }\n            ASSERT( b->id < StreamSize, NULL );\n            ASSERT( !my_done[b->id], \"duplicate processing of token?\" );\n            ASSERT( b->is_busy, NULL );\n            my_done[b->id] = true;\n            if( my_is_last ) {\n                b->id = Buffer::unused;\n                b->sequence_number = Buffer::unused;\n                __TBB_store_with_release(b->is_busy, false);\n            }\n        }\n        my_is_running = false;\n        return b;\n    }\n};\n\nclass InputFilter: public BaseFilter {\n    tbb::spin_mutex input_lock;\n    Buffer buffer[MaxBuffer];\n    const tbb::internal::Token my_number_of_tokens;\npublic:\n    InputFilter( tbb::filter::mode type, tbb::internal::Token ntokens, bool done[], bool is_last ) :\n        BaseFilter(type, done, is_last),\n        my_number_of_tokens(ntokens)\n    {}\n    Buffer* get_buffer( void* ) __TBB_override {\n        unsigned long next_input;\n        unsigned free_buffer = 0;\n        { // lock protected scope\n            tbb::spin_mutex::scoped_lock lock(input_lock);\n            if( current_token>=StreamSize )\n                return NULL;\n            next_input = current_token++;\n            // once in a while, emulate waiting for input; this only makes sense for serial input\n            if( is_serial() && WaitTest.required() )\n                WaitTest.probe( );\n            while( free_buffer<MaxBuffer )\n                if( __TBB_load_with_acquire(buffer[free_buffer].is_busy) )\n                    ++free_buffer;\n                else {\n                    buffer[free_buffer].is_busy = true;\n                    break;\n                }\n        }\n        ASSERT( free_buffer<my_number_of_tokens, \"premature reuse of buffer\" );\n        Buffer* b = &buffer[free_buffer];\n        ASSERT( &buffer[0] <= b, NULL );\n        ASSERT( b <= &buffer[MaxBuffer-1], NULL );\n        ASSERT( b->id == Buffer::unused, NULL);\n        b->id = next_input;\n        ASSERT( b->sequence_number == Buffer::unused, NULL);\n        return b;\n    }\n};\n\n//! The struct below repeats layout of tbb::pipeline.\nstruct hacked_pipeline {\n    tbb::filter* filter_list;\n    tbb::filter* filter_end;\n    tbb::empty_task* end_counter;\n    tbb::atomic<tbb::internal::Token> input_tokens;\n    tbb::atomic<tbb::internal::Token> token_counter;\n    bool end_of_input;\n    bool has_thread_bound_filters;\n\n    virtual ~hacked_pipeline();\n};\n\n//! The struct below repeats layout of tbb::internal::input_buffer.\nstruct hacked_input_buffer {\n    void* array; // This should be changed to task_info* if ever used\n    void* my_sem; // This should be changed to semaphore* if ever used\n    tbb::internal::Token array_size;\n    tbb::internal::Token low_token;\n    tbb::spin_mutex array_mutex;\n    tbb::internal::Token high_token;\n    bool is_ordered;\n    bool is_bound;\n};\n\n//! The struct below repeats layout of tbb::filter.\nstruct hacked_filter {\n    tbb::filter* next_filter_in_pipeline;\n    hacked_input_buffer* my_input_buffer;\n    unsigned char my_filter_mode;\n    tbb::filter* prev_filter_in_pipeline;\n    tbb::pipeline* my_pipeline;\n    tbb::filter* next_segment;\n\n    virtual ~hacked_filter();\n};\n\nbool do_hacking_tests = true;\nconst tbb::internal::Token tokens_before_wraparound = 0xF;\n\nvoid TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {\n    // There are 3 filter types: parallel, serial_in_order and serial_out_of_order\n    static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order};\n    const unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);\n    REMARK( \"testing with %lu threads and %lu filters\\n\", nthread, number_of_filters );\n    ASSERT( number_of_filters<=MaxFilters, \"too many filters\" );\n    ASSERT( sizeof(hacked_pipeline) == sizeof(tbb::pipeline), \"layout changed for tbb::pipeline?\" );\n    ASSERT( sizeof(hacked_filter) == sizeof(tbb::filter), \"layout changed for tbb::filter?\" );\n    tbb::internal::Token ntokens = nthread<MaxBuffer ? nthread : MaxBuffer;\n    // Count maximum iterations number\n    unsigned limit = 1;\n    for( unsigned i=0; i<number_of_filters; ++i)\n        limit *= number_of_filter_types;\n    // Iterate over possible filter sequences\n    for( unsigned numeral=0; numeral<limit; ++numeral ) {\n        // Build pipeline\n        tbb::pipeline pipeline;\n        if( do_hacking_tests ) {\n            // A private member of pipeline is hacked there for sake of testing wrap-around immunity.\n            tbb::internal::punned_cast<hacked_pipeline*>(&pipeline)->token_counter = ~tokens_before_wraparound;\n        }\n        tbb::filter* filter[MaxFilters];\n        unsigned temp = numeral;\n        // parallelism_limit is the upper bound on the possible parallelism\n        unsigned parallelism_limit = 0;\n        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {\n            tbb::filter::mode filter_type = filter_table[temp%number_of_filter_types];\n            const bool is_last = i==number_of_filters-1;\n            if( i==0 )\n                filter[i] = new InputFilter(filter_type,ntokens,Done[i],is_last);\n            else\n                filter[i] = new BaseFilter(filter_type,Done[i],is_last);\n            pipeline.add_filter(*filter[i]);\n            // The ordered buffer of serial filters is hacked as well.\n            if ( filter[i]->is_serial() ) {\n                if( do_hacking_tests ) {\n                    ((hacked_filter*)(void*)filter[i])->my_input_buffer->low_token = ~tokens_before_wraparound;\n                    ((hacked_filter*)(void*)filter[i])->my_input_buffer->high_token = ~tokens_before_wraparound;\n                }\n                parallelism_limit += 1;\n            } else {\n                parallelism_limit = nthread;\n            }\n        }\n        // Account for clipping of parallelism.\n        if( parallelism_limit>nthread )\n            parallelism_limit = nthread;\n        if( parallelism_limit>ntokens )\n            parallelism_limit = (unsigned)ntokens;\n        Harness::ConcurrencyTracker::Reset();\n        unsigned streamSizeLimit = min( MaxStreamSize, nthread * MaxStreamItemsPerThread );\n        for( StreamSize=0; StreamSize<=streamSizeLimit; ) {\n            memset( Done, 0, sizeof(Done) );\n            for( unsigned i=0; i<number_of_filters; ++i ) {\n                static_cast<BaseFilter*>(filter[i])->current_token=0;\n            }\n            pipeline.run( ntokens );\n            ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), \"filter still running?\" );\n            for( unsigned i=0; i<number_of_filters; ++i )\n                ASSERT( static_cast<BaseFilter*>(filter[i])->current_token==StreamSize, NULL );\n            for( unsigned i=0; i<MaxFilters; ++i )\n                for( unsigned j=0; j<StreamSize; ++j ) {\n                    ASSERT( Done[i][j]==(i<number_of_filters), NULL );\n                }\n            if( StreamSize < min(nthread*8, 32u) ) {\n                ++StreamSize;\n            } else {\n                StreamSize = StreamSize*8/3;\n            }\n        }\n        if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit )\n            REMARK( \"nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\\n\",\n                nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );\n        for( unsigned i=0; i < number_of_filters; ++i ) {\n            delete filter[i];\n            filter[i] = NULL;\n        }\n        pipeline.clear();\n    }\n}\n\n#include \"harness_cpu.h\"\n\nstatic int nthread; // knowing number of threads is necessary to call TestCPUUserTime\n\nvoid waiting_probe::probe( ) {\n    if( nthread==1 ) return;\n    REMARK(\"emulating wait for input\\n\");\n    // Test that threads sleep while no work.\n    // The master doesn't sleep so there could be 2 active threads if a worker is waiting for input\n    TestCPUUserTime(nthread, 2);\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    out_of_order_count = 0;\n    if( MinThread<1 ) {\n        REPORT(\"must have at least one thread\");\n        exit(1);\n    }\n    if( tbb::TBB_runtime_interface_version()>TBB_INTERFACE_VERSION) {\n        REMARK(\"Warning: implementation dependent tests disabled\\n\");\n        do_hacking_tests = false;\n    }\n\n    // Test with varying number of threads.\n    for( nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        // Initialize TBB task scheduler\n        tbb::task_scheduler_init init(nthread);\n\n        // Test pipelines with n filters\n        for( unsigned n=0; n<=MaxFilters; ++n )\n            TestTrivialPipeline(nthread,n);\n\n        // Test that all workers sleep when no work\n        TestCPUUserTime(nthread);\n    }\n    if( !out_of_order_count )\n        REPORT(\"Warning: out of order serial filter received tokens in order\\n\");\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_pipeline_with_tbf.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/pipeline.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_thread.h\"\n#include <cstdlib>\n#include <cstdio>\n#include \"harness.h\"\n\n// In the test, variables related to token counting are declared\n// as unsigned long to match definition of tbb::internal::Token.\n\n//! Id of thread that first executes work on non-thread-bound stages\ntbb::tbb_thread::id thread_id;\n//! Zero thread id\ntbb::tbb_thread::id id0;\n//! True if non-thread-bound stages must be executed on one thread\nbool is_serial_execution;\ndouble sleeptime; // how long is a non-thread-bound stage to sleep?\n\nstruct Buffer {\n    //! Indicates that the buffer is not used.\n    static const unsigned long unused = ~0ul;\n    unsigned long id;\n    //! True if Buffer is in use.\n    bool is_busy;\n    unsigned long sequence_number;\n    Buffer() : id(unused), is_busy(false), sequence_number(unused) {}\n};\n\nclass waiting_probe {\n    size_t check_counter;\npublic:\n    waiting_probe() : check_counter(0) {}\n    bool required( ) {\n        ++check_counter;\n        return !((check_counter+1)&size_t(0x7FFF));\n    }\n    void probe( ); // defined below\n};\n\nstatic const unsigned MaxStreamSize = 8000;\n//! Maximum number of filters allowed\nstatic const unsigned MaxFilters = 4;\nstatic unsigned StreamSize;\nstatic const unsigned MaxBuffer = 8;\nstatic bool Done[MaxFilters][MaxStreamSize];\nstatic waiting_probe WaitTest;\nstatic unsigned out_of_order_count;\n\n#include \"harness_concurrency_tracker.h\"\n\ntemplate<typename T>\nclass BaseFilter: public T {\n    bool* const my_done;\n    const bool my_is_last;\n    bool my_is_running;\npublic:\n    tbb::atomic<tbb::internal::Token> current_token;\n    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) :\n        T(type),\n        my_done(done),\n        my_is_last(is_last),\n        my_is_running(false),\n        current_token()\n    {}\n    virtual Buffer* get_buffer( void* item ) {\n        current_token++;\n        return static_cast<Buffer*>(item);\n    }\n    void* operator()( void* item ) __TBB_override {\n        // Check if work is done only on one thread when ntokens==1 or\n        // when pipeline has only one filter that is serial and non-thread-bound\n        if( is_serial_execution && !this->is_bound() ) {\n            // Get id of current thread\n            tbb::tbb_thread::id id = tbb::this_tbb_thread::get_id();\n            // At first execution, set thread_id to current thread id.\n            // Serialized execution is expected, so there should be no race.\n            if( thread_id == id0 )\n                thread_id = id;\n            // Check if work is done on one thread\n            ASSERT( thread_id == id, \"non-thread-bound stages executed on different threads when must be executed on a single one\");\n        }\n        Harness::ConcurrencyTracker ct;\n        if( this->is_serial() )\n            ASSERT( !my_is_running, \"premature entry to serial stage\" );\n        my_is_running = true;\n        Buffer* b = get_buffer(item);\n        if( b ) {\n            if(!this->is_bound() && sleeptime > 0) {\n                if(this->is_serial()) {\n                    Harness::Sleep((int)sleeptime);\n                }\n                else {\n                    // early parallel tokens sleep longer...\n                    int i = (int)((5 - b->sequence_number) * sleeptime);\n                    if(i < (int)sleeptime) i = (int)sleeptime;\n                    Harness::Sleep(i);\n                }\n            }\n            if( this->is_ordered() ) {\n                if( b->sequence_number == Buffer::unused )\n                    b->sequence_number = current_token-1;\n                else\n                    ASSERT( b->sequence_number==current_token-1, \"item arrived out of order\" );\n            } else if( this->is_serial() ) {\n                if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )\n                    out_of_order_count++;\n            }\n            ASSERT( b->id < StreamSize, NULL );\n            ASSERT( !my_done[b->id], \"duplicate processing of token?\" );\n            ASSERT( b->is_busy, NULL );\n            my_done[b->id] = true;\n            if( my_is_last ) {\n                b->id = Buffer::unused;\n                b->sequence_number = Buffer::unused;\n                __TBB_store_with_release(b->is_busy, false);\n            }\n        }\n        my_is_running = false;\n        return b;\n    }\n};\n\ntemplate<typename T>\nclass InputFilter: public BaseFilter<T> {\n    tbb::spin_mutex input_lock;\n    Buffer buffer[MaxBuffer];\n    const tbb::internal::Token my_number_of_tokens;\npublic:\n    InputFilter( tbb::filter::mode type, tbb::internal::Token ntokens, bool done[], bool is_last ) :\n        BaseFilter<T>(type, done, is_last),\n        my_number_of_tokens(ntokens)\n    {}\n    Buffer* get_buffer( void* ) __TBB_override {\n        unsigned long next_input;\n        unsigned free_buffer = 0;\n        { // lock protected scope\n            tbb::spin_mutex::scoped_lock lock(input_lock);\n            if( this->current_token>=StreamSize )\n                return NULL;\n            next_input = this->current_token++;\n            // once in a while, emulate waiting for input; this only makes sense for serial input\n            if( this->is_serial() && WaitTest.required() )\n                WaitTest.probe( );\n            while( free_buffer<MaxBuffer )\n                if( __TBB_load_with_acquire(buffer[free_buffer].is_busy) )\n                    ++free_buffer;\n                else {\n                    buffer[free_buffer].is_busy = true;\n                    break;\n                }\n        }\n        ASSERT( free_buffer<my_number_of_tokens, \"premature reuse of buffer\" );\n        Buffer* b = &buffer[free_buffer];\n        ASSERT( &buffer[0] <= b, NULL );\n        ASSERT( b <= &buffer[MaxBuffer-1], NULL );\n        ASSERT( b->id == Buffer::unused, NULL);\n        b->id = next_input;\n        ASSERT( b->sequence_number == Buffer::unused, NULL);\n        return b;\n    }\n};\n\nclass process_loop {\npublic:\n    void operator()( tbb::thread_bound_filter* tbf ) {\n        tbb::thread_bound_filter::result_type flag;\n        do\n            flag = tbf->process_item();\n        while( flag != tbb::thread_bound_filter::end_of_stream );\n    }\n};\n\n//! The struct below repeats layout of tbb::pipeline.\nstruct hacked_pipeline {\n    tbb::filter* filter_list;\n    tbb::filter* filter_end;\n    tbb::empty_task* end_counter;\n    tbb::atomic<tbb::internal::Token> input_tokens;\n    tbb::atomic<tbb::internal::Token> global_token_counter;\n    bool end_of_input;\n    bool has_thread_bound_filters;\n\n    virtual ~hacked_pipeline();\n};\n\n//! The struct below repeats layout of tbb::internal::ordered_buffer.\nstruct hacked_ordered_buffer {\n    void* array; // This should be changed to task_info* if ever used\n    tbb::internal::Token array_size;\n    tbb::internal::Token low_token;\n    tbb::spin_mutex array_mutex;\n    tbb::internal::Token high_token;\n    bool is_ordered;\n    bool is_bound;\n};\n\n//! The struct below repeats layout of tbb::filter.\nstruct hacked_filter {\n    tbb::filter* next_filter_in_pipeline;\n    hacked_ordered_buffer* input_buffer;\n    unsigned char my_filter_mode;\n    tbb::filter* prev_filter_in_pipeline;\n    tbb::pipeline* my_pipeline;\n    tbb::filter* next_segment;\n\n    virtual ~hacked_filter();\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    // Suppress compiler warning about constant conditional expression\n    #pragma warning (disable: 4127)\n#endif\n\nvoid clear_global_state() {\n    Harness::ConcurrencyTracker::Reset();\n    memset( Done, 0, sizeof(Done) );\n    thread_id = id0;\n    is_serial_execution = false;\n}\n\n\nclass PipelineTest {\n    // There are 3 non-thread-bound filter types: serial_in_order and serial_out_of_order, parallel\n    static const tbb::filter::mode non_tb_filters_table[3]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel};\n    // There are 2 thread-bound filter types: serial_in_order and serial_out_of_order\n    static const tbb::filter::mode tb_filters_table[2]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order };\n\n    static const unsigned number_of_non_tb_filter_types = sizeof(non_tb_filters_table)/sizeof(non_tb_filters_table[0]);\n    static const unsigned number_of_tb_filter_types = sizeof(tb_filters_table)/sizeof(tb_filters_table[0]);\n    static const unsigned number_of_filter_types = number_of_non_tb_filter_types + number_of_tb_filter_types;\n    // static unsigned my_nthread;\n    public:\n    static double TestOneConfiguration( unsigned numeral, unsigned nthread, unsigned number_of_filters, tbb::internal::Token ntokens);\n    static void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters );\n    static void TestIdleSpinning(unsigned nthread);\n\n    static void PrintConfiguration(unsigned numeral, unsigned nFilters) {\n        REMARK( \"{ \");\n        for( unsigned i = 0; i < nFilters; ++i) {\n            switch( numeral % number_of_filter_types ) {\n                case 0: REMARK(\"s  \"); break;\n                case 1: REMARK(\"B  \"); break;\n                case 2: REMARK(\"o  \"); break;\n                case 3: REMARK(\"Bo \"); break;\n                case 4: REMARK(\"P  \"); break;\n                default: REMARK(\" ** ERROR** \"); break;\n            }\n            numeral /= number_of_filter_types;\n        }\n        REMARK(\"}\");\n    }\n    static bool ContainsBoundFilter(unsigned numeral) {\n        for( ;numeral != 0; numeral /= number_of_filter_types)\n            if(numeral & 0x1) return true;\n        return false;\n    }\n};\n\nconst tbb::filter::mode PipelineTest::non_tb_filters_table[3] = {\n    tbb::filter::serial_in_order,       // 0\n    tbb::filter::serial_out_of_order,   // 2\n    tbb::filter::parallel               // 4\n};\nconst tbb::filter::mode PipelineTest::tb_filters_table[2] = {\n    tbb::filter::serial_in_order,       // 1\n    tbb::filter::serial_out_of_order    // 3\n};\n\n#include \"harness_cpu.h\"\n\ndouble PipelineTest::TestOneConfiguration(unsigned numeral, unsigned nthread, unsigned number_of_filters, tbb::internal::Token ntokens)\n{\n    // Build pipeline\n    tbb::pipeline pipeline;\n    tbb::filter* filter[MaxFilters];\n    unsigned temp = numeral;\n    // parallelism_limit is the upper bound on the possible parallelism\n    unsigned parallelism_limit = 0;\n    // number of thread-bound-filters in the current sequence\n    unsigned number_of_tb_filters = 0;\n    // ordinal numbers of thread-bound-filters in the current sequence\n    unsigned array_of_tb_filter_numbers[MaxFilters];\n    if(!ContainsBoundFilter(numeral)) return 0.0;\n    for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {\n        bool is_bound = temp%number_of_filter_types&0x1;\n        tbb::filter::mode filter_type;\n        if( is_bound ) {\n            filter_type = tb_filters_table[temp%number_of_filter_types/number_of_non_tb_filter_types];\n        } else\n            filter_type = non_tb_filters_table[temp%number_of_filter_types/number_of_tb_filter_types];\n        const bool is_last = i==number_of_filters-1;\n        if( is_bound ) {\n            if( i == 0 )\n                filter[i] = new InputFilter<tbb::thread_bound_filter>(filter_type,ntokens,Done[i],is_last);\n            else\n                filter[i] = new BaseFilter<tbb::thread_bound_filter>(filter_type,Done[i],is_last);\n            array_of_tb_filter_numbers[number_of_tb_filters] = i;\n            number_of_tb_filters++;\n        } else {\n            if( i == 0 )\n                filter[i] = new InputFilter<tbb::filter>(filter_type,ntokens,Done[i],is_last);\n            else\n                filter[i] = new BaseFilter<tbb::filter>(filter_type,Done[i],is_last);\n        }\n        pipeline.add_filter(*filter[i]);\n        if ( filter[i]->is_serial() ) {\n            parallelism_limit += 1;\n        } else {\n            parallelism_limit = nthread;\n        }\n    }\n    ASSERT(number_of_tb_filters,NULL);\n    clear_global_state();\n    // Account for clipping of parallelism.\n    if( parallelism_limit>nthread )\n        parallelism_limit = nthread;\n    if( parallelism_limit>ntokens )\n        parallelism_limit = (unsigned)ntokens;\n    StreamSize = nthread; // min( MaxStreamSize, nthread * MaxStreamItemsPerThread );\n\n    for( unsigned i=0; i<number_of_filters; ++i ) {\n        static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token=0;\n    }\n    tbb::tbb_thread* t[MaxFilters];\n    for( unsigned j = 0; j<number_of_tb_filters; j++)\n        t[j] = new tbb::tbb_thread(process_loop(), static_cast<tbb::thread_bound_filter*>(filter[array_of_tb_filter_numbers[j]]));\n    if( ntokens == 1 || ( number_of_filters == 1 && number_of_tb_filters == 0 && filter[0]->is_serial() ))\n        is_serial_execution = true;\n    double strttime = GetCPUUserTime();\n    pipeline.run( ntokens );\n    double endtime = GetCPUUserTime();\n    for( unsigned j = 0; j<number_of_tb_filters; j++)\n        t[j]->join();\n    ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), \"filter still running?\" );\n    for( unsigned i=0; i<number_of_filters; ++i )\n        ASSERT( static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token==StreamSize, NULL );\n    for( unsigned i=0; i<MaxFilters; ++i )\n        for( unsigned j=0; j<StreamSize; ++j ) {\n            ASSERT( Done[i][j]==(i<number_of_filters), NULL );\n        }\n    if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit )\n        REMARK( \"nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\\n\",\n            nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );\n    for( unsigned i=0; i < number_of_filters; ++i ) {\n        delete filter[i];\n        filter[i] = NULL;\n    }\n    for( unsigned j = 0; j<number_of_tb_filters; j++)\n        delete t[j];\n    pipeline.clear();\n    return endtime - strttime;\n} // TestOneConfiguration\n\nvoid PipelineTest::TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {\n\n    REMARK( \"testing with %lu threads and %lu filters\\n\", nthread, number_of_filters );\n    ASSERT( number_of_filters<=MaxFilters, \"too many filters\" );\n    tbb::internal::Token max_tokens = nthread < MaxBuffer ? nthread : MaxBuffer;\n    // The loop has 1 iteration if max_tokens=1 and 2 iterations if max_tokens>1:\n    // one iteration for ntokens=1 and second for ntokens=max_tokens\n    // Iteration for ntokens=1 is required in each test case to check if pipeline run only on one thread\n    unsigned max_iteration = max_tokens > 1 ? 2 : 1;\n    tbb::internal::Token ntokens = 1;\n    for( unsigned iteration = 0; iteration < max_iteration; iteration++) {\n        if( iteration > 0 )\n            ntokens = max_tokens;\n        // Count maximum iterations number\n        unsigned limit = 1;\n        for( unsigned i=0; i<number_of_filters; ++i)\n            limit *= number_of_filter_types;\n        // Iterate over possible filter sequences\n        for( unsigned numeral=0; numeral<limit; ++numeral ) {\n            REMARK( \"testing configuration %lu of %lu\\n\", numeral, limit );\n            (void)TestOneConfiguration(numeral, nthread, number_of_filters, ntokens);\n        }\n    }\n}\n\n// varying times for sleep result in different user times for all pipelines.\n// So we compare the running time of an all non-TBF pipeline with different (with\n// luck representative) TBF configurations.\n//\n// We run the tests multiple times and compare the average runtimes for those cases\n// that don't return 0 user time.  configurations that exceed the allowable extra\n// time are reported.\nvoid PipelineTest::TestIdleSpinning( unsigned nthread)  {\n    unsigned sample_setups[] = {\n        // in the comments below, s == serial, o == serial out-of-order,\n        // B == thread bound, Bo == thread bound out-of-order, p == parallel\n        1,   // B  s  s  s\n        5,   // s  B  s  s\n        25,  // s  s  B  s\n        125, // s  s  s  B\n        6,   // B  B  s  s\n        26,  // B  s  B  s\n        126, // B  s  s  B\n        30,  // s  B  B  s\n        130, // s  B  s  B\n        150, // s  s  B  B\n        31,  // B  B  B  s\n        131, // B  B  s  B\n        155, // s  B  B  B\n        495, // s  p  p  Bo\n        71,  // B  p  o  s\n        355, // s  B  p  o\n        95,  // s  p  Bo s\n        475, // s  s  p  Bo\n    };\n    const int nsetups = sizeof(sample_setups) / sizeof(unsigned);\n    const int ntests = 4;\n    const double bignum = 1000000000.0;\n    const double allowable_slowdown = 3.5;\n    unsigned zero_count = 0;\n\n    REMARK( \"testing idle spinning with %lu threads\\n\", nthread );\n    tbb::internal::Token max_tokens = nthread < MaxBuffer ? nthread : MaxBuffer;\n    for( int i=0; i<nsetups; ++i ) {\n        unsigned numeral = sample_setups[i];\n        unsigned temp = numeral;\n        unsigned nbound = 0;\n        while(temp) {\n            if((temp%number_of_filter_types)&0x01) nbound++;\n            temp /= number_of_filter_types;\n        }\n        sleeptime = 20.0;\n        double s0 = bignum;\n        double s1 = bignum;\n        int v0cnt = 0;\n        int v1cnt = 0;\n        double s0sum = 0.0;\n        double s1sum = 0.0;\n        REMARK(\" TestOneConfiguration, pipeline == \");\n        PrintConfiguration(numeral, MaxFilters);\n        REMARK(\", max_tokens== %d\\n\", (int)max_tokens);\n        for(int j = 0; j < ntests; ++j) {\n            double s1a = TestOneConfiguration(numeral, nthread, MaxFilters, max_tokens);\n            double s0a = TestOneConfiguration((unsigned)0, nthread, MaxFilters, max_tokens);\n            s1sum += s1a;\n            s0sum += s0a;\n            if(s0a > 0.0) {\n                ++v0cnt;\n                s0 = (s0a < s0) ? s0a : s0;\n            }\n            else {\n                ++zero_count;\n            }\n            if(s1a > 0.0) {\n                ++v1cnt;\n                s1 = (s1a < s1) ? s1a : s1;\n            }\n            else {\n                ++zero_count;\n            }\n        }\n        if(s0 == bignum || s1 == bignum) continue;\n        s0sum /= (double)v0cnt;\n        s1sum /= (double)v1cnt;\n        double slowdown = (s1sum-s0sum)/s0sum;\n        if(slowdown > allowable_slowdown)\n            REMARK( \"with %lu threads configuration %lu has slowdown > %g (%g)\\n\", nthread, numeral, allowable_slowdown, slowdown );\n    }\n    REMARK(\"Total of %lu zero times\\n\", zero_count);\n}\n\nstatic int nthread; // knowing number of threads is necessary to call TestCPUUserTime\n\nvoid waiting_probe::probe( ) {\n    if( nthread==1 ) return;\n    REMARK(\"emulating wait for input\\n\");\n    // Test that threads sleep while no work.\n    // The master doesn't sleep so there could be 2 active threads if a worker is waiting for input\n    TestCPUUserTime(nthread, 2);\n}\n\n#include \"tbb/task_scheduler_init.h\"\n\nint TestMain () {\n    out_of_order_count = 0;\n    if( MinThread<1 ) {\n        REPORT(\"must have at least one thread\");\n        exit(1);\n    }\n\n    // Test with varying number of threads.\n    for( nthread=MinThread; nthread<=MaxThread; ++nthread ) {\n        // Initialize TBB task scheduler\n        tbb::task_scheduler_init init(nthread);\n        sleeptime = 0.0;  // msec : 0 == no_timing, > 0, each filter stage sleeps for sleeptime\n\n        // Test pipelines with 1 and maximal number of filters\n        for( unsigned n=1; n<=MaxFilters; n*=MaxFilters ) {\n            // Thread-bound stages are serviced by user-created threads; those\n            // don't run the pipeline and don't service non-thread-bound stages\n            PipelineTest::TestTrivialPipeline(nthread,n);\n        }\n\n        // Test that all workers sleep when no work\n        TestCPUUserTime(nthread);\n        if((unsigned)nthread >= MaxFilters)  // test works when number of threads >= number of stages\n            PipelineTest::TestIdleSpinning(nthread);\n    }\n    if( !out_of_order_count )\n        REPORT(\"Warning: out of order serial filter received tokens in order\\n\");\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_priority_queue_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// TO DO: Add overlapping put / receive tests\n\n#include \"harness.h\"\n#include \"tbb/flow_graph.h\"\n#include \"harness_checktype.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness_graph.h\"\n\n#include <cstdio>\n\n#define N 10\n#define C 10\n\ntemplate< typename T >\nvoid spin_try_get( tbb::flow::priority_queue_node<T> &q, T &value ) {\n    while ( q.try_get(value) != true ) ;\n}\n\ntemplate< typename T >\nvoid check_item( T* next_value, T &value ) {\n    int tid = value / N;\n    int offset = value % N;\n    ASSERT( next_value[tid] == T(offset), NULL );\n    ++next_value[tid];\n}\n\ntemplate< typename T >\nstruct parallel_puts : NoAssign {\n    tbb::flow::priority_queue_node<T> &my_q;\n    parallel_puts( tbb::flow::priority_queue_node<T> &q ) : my_q(q) {}\n    void operator()(int i) const {\n        for (int j = 0; j < N; ++j) {\n            bool msg = my_q.try_put( T(N*i + j) );\n            ASSERT( msg == true, NULL );\n        }\n    }\n};\n\ntemplate< typename T >\nstruct parallel_gets : NoAssign {\n    tbb::flow::priority_queue_node<T> &my_q;\n    parallel_gets( tbb::flow::priority_queue_node<T> &q) : my_q(q) {}\n    void operator()(int) const {\n        T prev;\n        spin_try_get( my_q, prev );\n        for (int j = 0; j < N-1; ++j) {\n            T v;\n            spin_try_get( my_q, v );\n            ASSERT(v < prev, NULL);\n        }\n    }\n};\n\ntemplate< typename T >\nstruct parallel_put_get : NoAssign {\n    tbb::flow::priority_queue_node<T> &my_q;\n    parallel_put_get( tbb::flow::priority_queue_node<T> &q ) : my_q(q) {}\n    void operator()(int tid) const {\n        for ( int i = 0; i < N; i+=C ) {\n            int j_end = ( N < i + C ) ? N : i + C;\n            // dump about C values into the Q\n            for ( int j = i; j < j_end; ++j ) {\n                ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );\n            }\n            // receive about C values from the Q\n            for ( int j = i; j < j_end; ++j ) {\n                T v;\n                spin_try_get( my_q, v );\n            }\n        }\n    }\n};\n\n//\n// Tests\n//\n// Item can be reserved, released, consumed ( single serial receiver )\n//\ntemplate< typename T >\nint test_reservation(int) {\n    tbb::flow::graph g;\n\n    // Simple tests\n    tbb::flow::priority_queue_node<T> q(g);\n\n    {\n\n        T bogus_value(-1);\n\n        q.try_put(T(1));\n        q.try_put(T(2));\n        q.try_put(T(3));\n        g.wait_for_all();\n\n        T v=bogus_value, w=bogus_value;\n        ASSERT( q.try_reserve(v) == true, NULL );\n        ASSERT( v == T(3), NULL );\n        ASSERT( q.try_release() == true, NULL );\n        v = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_reserve(v) == true, NULL );\n        ASSERT( v == T(3), NULL );\n        ASSERT( q.try_consume() == true, NULL );\n        v = bogus_value;\n        g.wait_for_all();\n\n        ASSERT( q.try_get(v) == true, NULL );\n        ASSERT( v == T(2), NULL );\n        v = bogus_value;\n        g.wait_for_all();\n\n        ASSERT( q.try_reserve(v) == true, NULL );\n        ASSERT( v == T(1), NULL );\n        ASSERT( q.try_reserve(w) == false, NULL );\n        ASSERT( w == bogus_value, NULL );\n        ASSERT( q.try_get(w) == false, NULL );\n        ASSERT( w == bogus_value, NULL );\n        ASSERT( q.try_release() == true, NULL );\n        v = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_reserve(v) == true, NULL );\n        ASSERT( v == T(1), NULL );\n        ASSERT( q.try_consume() == true, NULL );\n        v = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get(v) == false, NULL );\n    }\n    return 0;\n}\n\n//\n// Tests\n//\n// multilpe parallel senders, items in FIFO (relatively to sender) order\n// multilpe parallel senders, multiple parallel receivers, items in FIFO order (relative to sender/receiver) and all items received\n//   * overlapped puts / gets\n//   * all puts finished before any getS\n//\ntemplate< typename T >\nint test_parallel(int num_threads) {\n    tbb::flow::graph g;\n    tbb::flow::priority_queue_node<T> q(g);\n    tbb::flow::priority_queue_node<T> q2(g);\n    tbb::flow::priority_queue_node<T> q3(g);\n    T bogus_value(-1);\n    T j = bogus_value;\n\n    NativeParallelFor( num_threads, parallel_puts<T>(q) );\n    for (int i = num_threads*N -1; i>=0; --i) {\n        spin_try_get( q, j );\n        ASSERT(j == i, NULL);\n        j = bogus_value;\n    }\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    NativeParallelFor( num_threads, parallel_puts<T>(q) );\n    g.wait_for_all();\n    NativeParallelFor( num_threads, parallel_gets<T>(q) );\n    g.wait_for_all();\n    j = bogus_value;\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    NativeParallelFor( num_threads, parallel_put_get<T>(q) );\n    g.wait_for_all();\n    j = bogus_value;\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::make_edge( q, q2 );\n    tbb::flow::make_edge( q2, q3 );\n    NativeParallelFor( num_threads, parallel_puts<T>(q) );\n    g.wait_for_all();\n    NativeParallelFor( num_threads, parallel_gets<T>(q3) );\n    g.wait_for_all();\n    j = bogus_value;\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( q2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( q3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    // test copy constructor\n    ASSERT( q.remove_successor( q2 ) == true, NULL );\n    NativeParallelFor( num_threads, parallel_puts<T>(q) );\n    tbb::flow::priority_queue_node<T> q_copy(q);\n    g.wait_for_all();\n    j = bogus_value;\n    ASSERT( q_copy.try_get( j ) == false, NULL );\n    ASSERT( q.register_successor( q_copy ) == true, NULL );\n    for (int i = num_threads*N -1; i>=0; --i) {\n        spin_try_get( q_copy, j );\n        ASSERT(j == i, NULL);\n        j = bogus_value;\n    }\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( q_copy.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    return 0;\n}\n\n//\n// Tests\n//\n// Predecessors cannot be registered\n// Empty Q rejects item requests\n// Single serial sender, items in FIFO order\n// Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order\n//\n\ntemplate< typename T >\nint test_serial() {\n    tbb::flow::graph g;\n    T bogus_value(-1);\n\n    tbb::flow::priority_queue_node<T> q(g);\n    tbb::flow::priority_queue_node<T> q2(g);\n    T j = bogus_value;\n\n    //\n    // Rejects attempts to add / remove predecessor\n    // Rejects request from empty Q\n    //\n    ASSERT( q.register_predecessor( q2 ) == false, NULL );\n    ASSERT( q.remove_predecessor( q2 ) == false, NULL );\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    //\n    // Simple puts and gets\n    //\n\n    for (int i = 0; i < N; ++i)\n        ASSERT( q.try_put( T(i) ), NULL );\n    for (int i = N-1; i >=0; --i) {\n        j = bogus_value;\n        spin_try_get( q, j );\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::make_edge( q, q2 );\n\n    for (int i = 0; i < N; ++i)\n        ASSERT( q.try_put( T(i) ), NULL );\n    g.wait_for_all();\n    for (int i = N-1; i >= 0; --i) {\n        j = bogus_value;\n        spin_try_get( q2, j );\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( q2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::remove_edge( q, q2 );\n    ASSERT( q.try_put( 1 ) == true, NULL );\n    g.wait_for_all();\n    ASSERT( q2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == true, NULL );\n    ASSERT( j == 1, NULL );\n\n    tbb::flow::priority_queue_node<T> q3(g);\n    tbb::flow::make_edge( q, q2 );\n    tbb::flow::make_edge( q2, q3 );\n\n    for (int i = 0; i < N; ++i)\n        ASSERT(  q.try_put( T(i) ), NULL );\n    g.wait_for_all();\n    for (int i = N-1; i >= 0; --i) {\n        j = bogus_value;\n        spin_try_get( q3, j );\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( q2.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( q3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    tbb::flow::remove_edge( q,  q2 );\n    ASSERT( q.try_put( 1 ) == true, NULL );\n    g.wait_for_all();\n    ASSERT( q2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( q3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n    ASSERT( q.try_get( j ) == true, NULL );\n    ASSERT( j == 1, NULL );\n\n    return 0;\n}\n\nint TestMain() {\n    tbb::tick_count start = tbb::tick_count::now(), stop;\n    for (int p = 2; p <= 4; ++p) {\n        tbb::task_scheduler_init init(p);\n        test_serial<int>();\n        test_reservation<int>(p);\n        test_reservation<check_type<int> >(p);\n        test_parallel<int>(p);\n    }\n    stop = tbb::tick_count::now();\n    REMARK(\"Priority_Queue_Node Time=%6.6f\\n\", (stop-start).seconds());\n    REMARK(\"Testing resets\\n\");\n    test_resets<int,tbb::flow::priority_queue_node<int> >();\n    test_resets<float,tbb::flow::priority_queue_node<float> >();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_buffer_extract<tbb::flow::priority_queue_node<int> >().run_tests();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_queue_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// TO DO: Add overlapping put / receive tests\n\n#include \"harness.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness_checktype.h\"\n#include \"harness_graph.h\"\n\n#include <cstdio>\n\n#define N 1000\n#define C 10\n\ntemplate< typename T >\nvoid spin_try_get( tbb::flow::queue_node<T> &q, T &value ) {\n    while ( q.try_get(value) != true ) ;\n}\n\ntemplate< typename T >\nvoid check_item( T* next_value, T &value ) {\n    int tid = value / N;\n    int offset = value % N;\n    ASSERT( next_value[tid] == T(offset), NULL );\n    ++next_value[tid];\n}\n\ntemplate< typename T >\nstruct parallel_puts : NoAssign {\n\n    tbb::flow::queue_node<T> &my_q;\n\n    parallel_puts( tbb::flow::queue_node<T> &q ) : my_q(q) {}\n\n    void operator()(int i) const {\n        for (int j = 0; j < N; ++j) {\n            bool msg = my_q.try_put( T(N*i + j) );\n            ASSERT( msg == true, NULL );\n        }\n    }\n\n};\n\n\n\ntemplate< typename T >\nstruct touches {\n\n    bool **my_touches;\n    T **my_last_touch;\n    int my_num_threads;\n\n    touches( int num_threads ) : my_num_threads(num_threads) {\n        my_last_touch = new T* [my_num_threads];\n        my_touches = new bool* [my_num_threads];\n        for ( int p = 0; p < my_num_threads; ++p) {\n            my_last_touch[p] = new T[my_num_threads];\n            for ( int p2 = 0; p2 < my_num_threads; ++p2)\n                my_last_touch[p][p2] = -1;\n\n            my_touches[p] = new bool[N*my_num_threads];\n            for ( int n = 0; n < N*my_num_threads; ++n)\n                my_touches[p][n] = false;\n        }\n    }\n\n    ~touches() {\n        for ( int p = 0; p < my_num_threads; ++p) {\n            delete [] my_touches[p];\n            delete [] my_last_touch[p];\n        }\n        delete [] my_touches;\n        delete [] my_last_touch;\n    }\n\n    bool check( int tid, T v ) {\n        int v_tid = v / N;\n        if ( my_touches[tid][v] != false ) {\n            printf(\"Error: value seen twice by local thread\\n\");\n            return false;\n        }\n        if ( v <= my_last_touch[tid][v_tid] ) {\n            printf(\"Error: value seen in wrong order by local thread\\n\");\n            return false;\n        }\n        my_last_touch[tid][v_tid] = v;\n        my_touches[tid][v] = true;\n        return true;\n    }\n\n    bool validate_touches() {\n        bool *all_touches = new bool[N*my_num_threads];\n        for ( int n = 0; n < N*my_num_threads; ++n)\n            all_touches[n] = false;\n\n        for ( int p = 0; p < my_num_threads; ++p) {\n            for ( int n = 0; n < N*my_num_threads; ++n) {\n                if ( my_touches[p][n] == true ) {\n                    ASSERT( all_touches[n] == false, \"value see by more than one thread\\n\" );\n                    all_touches[n] = true;\n                }\n            }\n        }\n        for ( int n = 0; n < N*my_num_threads; ++n) {\n            if ( !all_touches[n] )\n                printf(\"No touch at %d, my_num_threads = %d\\n\", n, my_num_threads);\n            //ASSERT( all_touches[n] == true, \"value not seen by any thread\\n\" );\n        }\n        delete [] all_touches;\n        return true;\n    }\n\n};\n\ntemplate< typename T >\nstruct parallel_gets : NoAssign {\n\n    tbb::flow::queue_node<T> &my_q;\n    touches<T> &my_touches;\n\n    parallel_gets( tbb::flow::queue_node<T> &q, touches<T> &t) : my_q(q), my_touches(t) {}\n\n    void operator()(int tid) const {\n        for (int j = 0; j < N; ++j) {\n            T v;\n            spin_try_get( my_q, v );\n            my_touches.check( tid, v );\n        }\n    }\n\n};\n\ntemplate< typename T >\nstruct parallel_put_get : NoAssign {\n\n    tbb::flow::queue_node<T> &my_q;\n    touches<T> &my_touches;\n\n    parallel_put_get( tbb::flow::queue_node<T> &q, touches<T> &t ) : my_q(q), my_touches(t) {}\n\n    void operator()(int tid) const {\n\n        for ( int i = 0; i < N; i+=C ) {\n            int j_end = ( N < i + C ) ? N : i + C;\n            // dump about C values into the Q\n            for ( int j = i; j < j_end; ++j ) {\n                ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );\n            }\n            // receiver about C values from the Q\n            for ( int j = i; j < j_end; ++j ) {\n                T v;\n                spin_try_get( my_q, v );\n                my_touches.check( tid, v );\n            }\n        }\n    }\n\n};\n\n//\n// Tests\n//\n// Item can be reserved, released, consumed ( single serial receiver )\n//\ntemplate< typename T >\nint test_reservation() {\n    tbb::flow::graph g;\n    T bogus_value(-1);\n\n    // Simple tests\n    tbb::flow::queue_node<T> q(g);\n\n    q.try_put(T(1));\n    q.try_put(T(2));\n    q.try_put(T(3));\n\n    T v;\n    ASSERT( q.reserve_item(v) == true, NULL );\n    ASSERT( v == T(1), NULL );\n    ASSERT( q.release_reservation() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n    ASSERT( q.reserve_item(v) == true, NULL );\n    ASSERT( v == T(1), NULL );\n    ASSERT( q.consume_reservation() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n\n    ASSERT( q.try_get(v) == true, NULL );\n    ASSERT( v == T(2), NULL );\n    v = bogus_value;\n    g.wait_for_all();\n\n    ASSERT( q.reserve_item(v) == true, NULL );\n    ASSERT( v == T(3), NULL );\n    ASSERT( q.release_reservation() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n    ASSERT( q.reserve_item(v) == true, NULL );\n    ASSERT( v == T(3), NULL );\n    ASSERT( q.consume_reservation() == true, NULL );\n    v = bogus_value;\n    g.wait_for_all();\n\n    return 0;\n}\n\n//\n// Tests\n//\n// multilpe parallel senders, items in FIFO (relatively to sender) order\n// multilpe parallel senders, multiple parallel receivers, items in FIFO order (relative to sender/receiver) and all items received\n//   * overlapped puts / gets\n//   * all puts finished before any getS\n//\ntemplate< typename T >\nint test_parallel(int num_threads) {\n    tbb::flow::graph g;\n    tbb::flow::queue_node<T> q(g);\n    tbb::flow::queue_node<T> q2(g);\n    tbb::flow::queue_node<T> q3(g);\n    {\n        Check< T > my_check;\n        T bogus_value(-1);\n        T j = bogus_value;\n        NativeParallelFor( num_threads, parallel_puts<T>(q) );\n\n        T *next_value = new T[num_threads];\n        for (int tid = 0; tid < num_threads; ++tid) next_value[tid] = T(0);\n\n        for (int i = 0; i < num_threads * N; ++i ) {\n            spin_try_get( q, j );\n            check_item( next_value, j );\n            j = bogus_value;\n        }\n        for (int tid = 0; tid < num_threads; ++tid)  {\n            ASSERT( next_value[tid] == T(N), NULL );\n        }\n        delete[] next_value;\n\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        NativeParallelFor( num_threads, parallel_puts<T>(q) );\n\n        {\n            touches< T > t( num_threads );\n            NativeParallelFor( num_threads, parallel_gets<T>(q, t) );\n            g.wait_for_all();\n            ASSERT( t.validate_touches(), NULL );\n        }\n        j = bogus_value;\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        g.wait_for_all();\n        {\n            touches< T > t2( num_threads );\n            NativeParallelFor( num_threads, parallel_put_get<T>(q, t2) );\n            g.wait_for_all();\n            ASSERT( t2.validate_touches(), NULL );\n        }\n        j = bogus_value;\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        tbb::flow::make_edge( q, q2 );\n        tbb::flow::make_edge( q2, q3 );\n\n        NativeParallelFor( num_threads, parallel_puts<T>(q) );\n        {\n            touches< T > t3( num_threads );\n            NativeParallelFor( num_threads, parallel_gets<T>(q3, t3) );\n            g.wait_for_all();\n            ASSERT( t3.validate_touches(), NULL );\n        }\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == false, NULL );\n        g.wait_for_all();\n        ASSERT( q2.try_get( j ) == false, NULL );\n        g.wait_for_all();\n        ASSERT( q3.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        // test copy constructor\n        ASSERT( q.remove_successor( q2 ), NULL );\n        NativeParallelFor( num_threads, parallel_puts<T>(q) );\n        tbb::flow::queue_node<T> q_copy(q);\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q_copy.try_get( j ) == false, NULL );\n        ASSERT( q.register_successor( q_copy ) == true, NULL );\n        {\n            touches< T > t( num_threads );\n            NativeParallelFor( num_threads, parallel_gets<T>(q_copy, t) );\n            g.wait_for_all();\n            ASSERT( t.validate_touches(), NULL );\n        }\n        j = bogus_value;\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n        ASSERT( q_copy.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n    }\n\n    return 0;\n}\n\n//\n// Tests\n//\n// Predecessors cannot be registered\n// Empty Q rejects item requests\n// Single serial sender, items in FIFO order\n// Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order\n//\n\ntemplate< typename T >\nint test_serial() {\n    tbb::flow::graph g;\n    tbb::flow::queue_node<T> q(g);\n    tbb::flow::queue_node<T> q2(g);\n    {   // destroy the graph after manipulating it, and see if all the items in the buffers\n        // have been destroyed before the graph\n        Check<T> my_check;  // if check_type< U > count constructions and destructions\n        T bogus_value(-1);\n        T j = bogus_value;\n\n        //\n        // Rejects attempts to add / remove predecessor\n        // Rejects request from empty Q\n        //\n        ASSERT( q.register_predecessor( q2 ) == false, NULL );\n        ASSERT( q.remove_predecessor( q2 ) == false, NULL );\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        //\n        // Simple puts and gets\n        //\n\n        for (int i = 0; i < N; ++i) {\n            bool msg = q.try_put( T(i) );\n            ASSERT( msg == true, NULL );\n        }\n\n\n        for (int i = 0; i < N; ++i) {\n            j = bogus_value;\n            spin_try_get( q, j );\n            ASSERT( i == j, NULL );\n        }\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        tbb::flow::make_edge( q, q2 );\n\n        for (int i = 0; i < N; ++i) {\n            bool msg = q.try_put( T(i) );\n            ASSERT( msg == true, NULL );\n        }\n\n\n        for (int i = 0; i < N; ++i) {\n            j = bogus_value;\n            spin_try_get( q2, j );\n            ASSERT( i == j, NULL );\n        }\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == false, NULL );\n        g.wait_for_all();\n        ASSERT( q2.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        tbb::flow::remove_edge( q, q2 );\n        ASSERT( q.try_put( 1 ) == true, NULL );\n        g.wait_for_all();\n        ASSERT( q2.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == true, NULL );\n        ASSERT( j == 1, NULL );\n\n        tbb::flow::queue_node<T> q3(g);\n        tbb::flow::make_edge( q, q2 );\n        tbb::flow::make_edge( q2, q3 );\n\n        for (int i = 0; i < N; ++i) {\n            bool msg = q.try_put( T(i) );\n            ASSERT( msg == true, NULL );\n        }\n\n        for (int i = 0; i < N; ++i) {\n            j = bogus_value;\n            spin_try_get( q3, j );\n            ASSERT( i == j, NULL );\n        }\n        j = bogus_value;\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == false, NULL );\n        g.wait_for_all();\n        ASSERT( q2.try_get( j ) == false, NULL );\n        g.wait_for_all();\n        ASSERT( q3.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n\n        tbb::flow::remove_edge( q,  q2 );\n        ASSERT( q.try_put( 1 ) == true, NULL );\n        g.wait_for_all();\n        ASSERT( q2.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n        g.wait_for_all();\n        ASSERT( q3.try_get( j ) == false, NULL );\n        ASSERT( j == bogus_value, NULL );\n        g.wait_for_all();\n        ASSERT( q.try_get( j ) == true, NULL );\n        ASSERT( j == 1, NULL );\n    }\n\n    return 0;\n}\n\nint TestMain() {\n    tbb::tick_count start = tbb::tick_count::now(), stop;\n    for (int p = 2; p <= 4; ++p) {\n        tbb::task_scheduler_init init(p);\n        test_serial<int>();\n        test_serial<check_type<int> >();\n        test_parallel<int>(p);\n        test_parallel<check_type<int> >(p);\n    }\n    stop = tbb::tick_count::now();\n    REMARK(\"Queue_Node Time=%6.6f\\n\", (stop-start).seconds());\n    REMARK(\"Testing resets\\n\");\n    test_resets<int, tbb::flow::queue_node<int> >();\n    test_resets<float, tbb::flow::queue_node<float> >();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_buffer_extract<tbb::flow::queue_node<int> >().run_tests();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_range_based_for.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_test_range_based_for_H\n#define __TBB_test_range_based_for_H\n\n#include <utility> //for std::pair\nnamespace range_based_for_support_tests{\n\n    template<typename value_type, typename container, typename binary_op_type, typename init_value_type>\n    inline init_value_type range_based_for_accumulate(container const& c, binary_op_type accumulator, init_value_type init )\n    {\n        init_value_type range_for_accumulated = init;\n        #if __TBB_RANGE_BASED_FOR_PRESENT\n        for (value_type  x : c) {\n            range_for_accumulated = accumulator(range_for_accumulated, x);\n        }\n        #else\n        for (typename container::const_iterator x =c.begin(); x != c.end(); ++x) {\n            range_for_accumulated = accumulator(range_for_accumulated, *x);\n        }\n        #endif\n        return range_for_accumulated;\n    }\n\n    template<typename container, typename binary_op_type, typename init_value_type>\n    inline init_value_type range_based_for_accumulate(container const& c, binary_op_type accumulator, init_value_type init )\n    {\n        typedef typename container::value_type value_type;\n        return range_based_for_accumulate<value_type>(c,accumulator,init);\n    }\n\n    template <typename integral_type >\n    integral_type gauss_summ_of_int_sequence(integral_type sequence_length){\n        return (sequence_length +1)* sequence_length /2;\n    }\n\n    struct pair_second_summer{\n        template<typename first_type, typename second_type>\n        second_type operator() (second_type const& lhs, std::pair<first_type, second_type> const& rhs) const\n        {\n            return lhs + rhs.second;\n        }\n    };\n}\n\n#endif /* __TBB_test_range_based_for_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_reader_writer_lock.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// test reader_writer_lock\n#include \"tbb/reader_writer_lock.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_exception.h\"\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n\ntbb::reader_writer_lock the_mutex;\nconst int MAX_WORK = 10000;\n\ntbb::atomic<size_t> active_readers, active_writers;\ntbb::atomic<bool> sim_readers;\nsize_t n_tested__sim_readers;\n\n\nint BusyWork(int percentOfMaxWork) {\n  int iters = 0;\n  for (int i=0; i<MAX_WORK*((double)percentOfMaxWork/100.0); ++i) {\n      iters++;\n  }\n  return iters;\n}\n\nstruct StressRWLBody : NoAssign {\n    const int nThread;\n    const int percentMax;\n\n    StressRWLBody(int nThread_, int percentMax_) : nThread(nThread_), percentMax(percentMax_) {}\n\n    void operator()(const int /* threadID */ ) const {\n        int nIters = 100;\n        int r_result=0, w_result=0;\n        for(int i=0; i<nIters; ++i) {\n            // test unscoped blocking write lock\n            the_mutex.lock();\n            w_result += BusyWork(percentMax);\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n            // test exception for recursive write lock\n            bool was_caught = false;\n            try {\n                the_mutex.lock();\n            }\n            catch(tbb::improper_lock& ex) {\n                REMARK(\"improper_lock: %s\\n\", ex.what());\n                was_caught = true;\n            }\n            catch(...) {\n                REPORT(\"Wrong exception caught during recursive lock attempt.\");\n            }\n            ASSERT(was_caught, \"Recursive lock attempt exception not caught properly.\");\n            // test exception for recursive read lock\n            was_caught = false;\n            try {\n                the_mutex.lock_read();\n            }\n            catch(tbb::improper_lock& ex) {\n                REMARK(\"improper_lock: %s\\n\", ex.what());\n                was_caught = true;\n            }\n            catch(...) {\n                REPORT(\"Wrong exception caught during recursive lock attempt.\");\n            }\n            ASSERT(was_caught, \"Recursive lock attempt exception not caught properly.\");\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n            the_mutex.unlock();\n            // test unscoped non-blocking write lock\n            if (the_mutex.try_lock()) {\n                w_result += BusyWork(percentMax);\n                the_mutex.unlock();\n            }\n            // test unscoped blocking read lock\n            the_mutex.lock_read();\n            r_result += BusyWork(percentMax);\n            the_mutex.unlock();\n            // test unscoped non-blocking read lock\n            if(the_mutex.try_lock_read()) {\n                r_result += BusyWork(percentMax);\n                the_mutex.unlock();\n            }\n            { // test scoped blocking write lock\n                tbb::reader_writer_lock::scoped_lock my_lock(the_mutex);\n                w_result += BusyWork(percentMax);\n            }\n            { // test scoped blocking read lock\n                tbb::reader_writer_lock::scoped_lock_read my_lock(the_mutex);\n                r_result += BusyWork(percentMax);\n            }\n        }\n        REMARK(\" R%d/W%d\", r_result, w_result); // reader/writer iterations of busy work completed\n    }\n};\n\nstruct CorrectRWLScopedBody : NoAssign {\n    const int nThread;\n    Harness::SpinBarrier& my_barrier;\n\n    CorrectRWLScopedBody(int nThread_, Harness::SpinBarrier& b_) : nThread(nThread_),my_barrier(b_) {}\n\n    void operator()(const int /* threadID */ ) const {\n        my_barrier.wait();\n        for (int i=0; i<50; i++) {\n            const bool is_reader = i%5==0; // 1 writer for every 4 readers\n\n            if (is_reader) {\n                tbb::reader_writer_lock::scoped_lock_read my_lock(the_mutex);\n                active_readers++;\n                if (active_readers > 1) sim_readers = true;\n                ASSERT(active_writers==0, \"Active writers in read-locked region.\");\n                Harness::Sleep(10);\n                active_readers--;\n            }\n            else { // is writer\n                tbb::reader_writer_lock::scoped_lock my_lock(the_mutex);\n                active_writers++;\n                ASSERT(active_readers==0, \"Active readers in write-locked region.\");\n                ASSERT(active_writers<=1, \"More than one active writer in write-locked region.\");\n                Harness::Sleep(10);\n                active_writers--;\n            }\n        }\n    }\n};\n\nstruct CorrectRWLBody : NoAssign {\n    const int nThread;\n    Harness::SpinBarrier& my_barrier;\n\n    CorrectRWLBody(int nThread_, Harness::SpinBarrier& b_ ) : nThread(nThread_), my_barrier(b_) {}\n\n    void operator()(const int /* threadID */ ) const {\n        my_barrier.wait();\n        for (int i=0; i<50; i++) {\n            const bool is_reader = i%5==0; // 1 writer for every 4 readers\n\n            if (is_reader) {\n                the_mutex.lock_read();\n                active_readers++;\n                if (active_readers > 1) sim_readers = true;\n                ASSERT(active_writers==0, \"Active writers in read-locked region.\");\n            }\n            else { // is writer\n                the_mutex.lock();\n                active_writers++;\n                ASSERT(active_readers==0, \"Active readers in write-locked region.\");\n                ASSERT(active_writers<=1, \"More than one active writer in write-locked region.\");\n            }\n            Harness::Sleep(10);\n            if (is_reader) {\n                active_readers--;\n            }\n            else { // is writer\n                active_writers--;\n            }\n            the_mutex.unlock();\n        }\n    }\n};\n\nvoid TestReaderWriterLockOnNThreads(int nThreads) {\n    // Stress-test all interfaces\n    for (int pc=0; pc<=100; pc+=20) {\n        REMARK(\"Testing with %d threads, percent of MAX_WORK=%d...\", nThreads, pc);\n        StressRWLBody myStressBody(nThreads, pc);\n        NativeParallelFor(nThreads, myStressBody);\n        REMARK(\" OK.\\n\");\n    }\n\n    int i;\n    n_tested__sim_readers = 0;\n    REMARK(\"Testing with %d threads, direct/unscoped locking mode...\", nThreads); // TODO: choose direct or unscoped?\n    // TODO: refactor the following two for loops into a shared function \n    for( i=0; i<100; ++i ) {\n        Harness::SpinBarrier bar0(nThreads);\n\n        CorrectRWLBody myCorrectBody(nThreads,bar0);\n        active_writers = active_readers = 0;\n        sim_readers = false;\n        NativeParallelFor(nThreads, myCorrectBody);\n\n        if( sim_readers || nThreads==1 ) {\n            if( ++n_tested__sim_readers>5 )\n                break;\n        }\n    }\n    ASSERT(i<100, \"There were no simultaneous readers.\");\n    REMARK(\" OK.\\n\");\n\n    n_tested__sim_readers = 0;\n    REMARK(\"Testing with %d threads, scoped locking mode...\", nThreads);\n    for( i=0; i<100; ++i ) {\n        Harness::SpinBarrier bar0(nThreads);\n        CorrectRWLScopedBody myCorrectScopedBody(nThreads, bar0);\n        active_writers = active_readers = 0;\n        sim_readers = false;\n        NativeParallelFor(nThreads, myCorrectScopedBody);\n        if( sim_readers || nThreads==1 ) {\n            if( ++n_tested__sim_readers>5 )\n                break;\n        }\n    }\n    ASSERT(i<100, \"There were no simultaneous readers.\");\n    REMARK(\" OK.\\n\");\n}\n\nvoid TestReaderWriterLock() {\n    for(int p = MinThread; p <= MaxThread; p++) {\n        TestReaderWriterLockOnNThreads(p);\n    }\n}\n\n\nint TestMain() {\n    if(MinThread <= 0) MinThread = 1;\n    if(MaxThread > 0) {\n        TestReaderWriterLock();\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_runtime_loader.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !(_WIN32||_WIN64) || (__MINGW64__||__MINGW32__)\n\n#include \"harness.h\"\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#else // !(_WIN32||_WIN64)\n\n#define TBB_PREVIEW_RUNTIME_LOADER 1\n#include \"tbb/runtime_loader.h\"\n#include \"tbb/tbb_stddef.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_exception.h\"\n\n#include <cstdio>\n#include <cstdlib>\n#include <cerrno>\n#include <vector>\n#include <string>\n#include <utility>\n#include <typeinfo>\n#include <stdexcept>\n\n#ifdef HARNESS_USE_RUNTIME_LOADER\n    #undef HARNESS_USE_RUNTIME_LOADER    // We do not want harness to preload tbb.\n#endif\n#include \"harness.h\"\n\nstatic int errors = 0;\n\n#define CHECK( cond ) {                                                  \\\n    if ( ! (cond) ) {                                                    \\\n        ++ errors;                                                       \\\n        REPORT( \"%s:%d: --- TEST FAILED ---\\n\", __FILE__, __LINE__ );    \\\n    };                                                                   \\\n}\n\n#define SAY( msg ) \\\n    REMARK( \"%s:%d: %s\\n\", __FILE__, __LINE__, msg )\n\ntypedef int (*int_func_t)();\n\nnamespace tbb {\nnamespace interface6 {\nnamespace internal {\nnamespace runtime_loader {\n    extern tbb::runtime_loader::error_mode stub_mode;\n} } } } // namespaces runtime_loader, internal, interface6, tbb\n\nusing tbb::interface6::internal::runtime_loader::stub_mode;\n\n#define _CHECK_TBB( code ) {                           \\\n    stub_mode = tbb::runtime_loader::em_status;        \\\n    int ver = tbb::TBB_runtime_interface_version();    \\\n    stub_mode = tbb::runtime_loader::em_abort;         \\\n    CHECK( ver == code );                              \\\n}\n\n#define CHECK_TBB_IS_LOADED()                          \\\n    _CHECK_TBB( TBB_INTERFACE_VERSION )\n\n#define CHECK_TBB_IS_NOT_LOADED()                      \\\n    _CHECK_TBB( tbb::runtime_loader::ec_no_lib )\n\nint TestMain() {\n\n\n    __TBB_TRY {\n\n        {\n            SAY( \"Call a function when library is not yet loaded, stub should return a error.\" );\n            CHECK_TBB_IS_NOT_LOADED();\n        }\n\n        {\n            SAY( \"Create a runtime_loader object, do not load library but make some bad calls.\" );\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_status );\n            SAY( \"After creating status should be ok.\" );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_ok );\n            SAY( \"Call a function, stub should return a error.\" );\n            CHECK_TBB_IS_NOT_LOADED();\n        }\n\n        {\n            SAY( \"Create a runtime_loader object and call load() with bad arguments.\" );\n            char const * path[] = { \".\", NULL };\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_status );\n            SAY( \"Min version is bad.\" );\n            rtl.load( path, -1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_bad_arg );\n            SAY( \"Max version is bad.\" );\n            rtl.load( path, TBB_INTERFACE_VERSION, -1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_bad_arg );\n            SAY( \"Both versions are bad.\" );\n            rtl.load( path, -1, -1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_bad_arg );\n            SAY( \"Min is bigger than max.\" );\n            rtl.load( path, TBB_INTERFACE_VERSION + 1, TBB_INTERFACE_VERSION - 1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_bad_arg );\n        }\n\n        {\n            SAY( \"Create a proxy object and call load() with good arguments but not available version.\" );\n            char const * path[] = { \".\", NULL };\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_status );\n            SAY( \"Min version too big.\" );\n            rtl.load( path, TBB_INTERFACE_VERSION + 1, TBB_INTERFACE_VERSION + 1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_no_lib );\n            SAY( \"Max version is too small.\" );\n            rtl.load( path, TBB_INTERFACE_VERSION - 1, TBB_INTERFACE_VERSION - 1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_no_lib );\n        }\n\n        {\n            SAY( \"Test em_throw mode.\" );\n            char const * path[] = { \".\", NULL };\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_throw );\n            tbb::runtime_loader::error_code code = tbb::runtime_loader::ec_ok;\n            __TBB_TRY {\n                rtl.load( path, -1 );\n            } __TBB_CATCH ( tbb::runtime_loader::error_code c ) {\n                code = c;\n            }; // __TBB_TRY\n            CHECK( code == tbb::runtime_loader::ec_bad_arg );\n            __TBB_TRY {\n                rtl.load( path, TBB_INTERFACE_VERSION + 1 );\n            } __TBB_CATCH ( tbb::runtime_loader::error_code c ) {\n                code = c;\n            }; // __TBB_TRY\n            CHECK( code == tbb::runtime_loader::ec_no_lib );\n        }\n\n        {\n            SAY( \"Load current version, but specify wrong directories.\" );\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_status );\n            SAY( \"Specify no directories.\" );\n            char const * path0[] = { NULL };\n            rtl.load( path0 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_no_lib );\n            SAY( \"Specify directories without library.\" );\n            char const * path1[] = { \"..\", \"/\", NULL };\n            rtl.load( path1 );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_no_lib );\n        }\n\n        {\n            SAY( \"Now really load library and do various tests.\" );\n            char const * path[] = { \".\", NULL };\n            tbb::runtime_loader rtl( tbb::runtime_loader::em_status );\n            SAY( \"Load current version.\" );\n            rtl.load( path, TBB_INTERFACE_VERSION, TBB_INTERFACE_VERSION );\n            CHECK( rtl.status() == tbb::runtime_loader::ec_ok );\n            if ( rtl.status() == tbb::runtime_loader::ec_ok ) {\n                {\n                    SAY( \"Make sure the library really loaded.\" );\n                    CHECK_TBB_IS_LOADED();\n                }\n                SAY( \"Call load() again, it should return a error.\" );\n                rtl.load( path, TBB_INTERFACE_VERSION, TBB_INTERFACE_VERSION );\n                CHECK( rtl.status() == tbb::runtime_loader::ec_bad_call );\n                {\n                    SAY( \"Initialize task_scheduler.\" );\n                    tbb::task_scheduler_init init( 1 );\n                    // Check what?\n                }\n\n                // There was a problem on Linux* OS, and still a problem on macOS*.\n                SAY( \"Throw an exception.\" );\n                // Iterate through all the ids first.\n                for ( int id = 1; id < tbb::internal::eid_max; ++ id ) {\n                    bool ex_caught = false;\n                    __TBB_TRY {\n                        tbb::internal::throw_exception( tbb::internal::exception_id( id ) );\n                    } __TBB_CATCH ( std::exception const & ) {\n                        SAY( \"Expected exception caught.\" );\n                        ex_caught = true;\n                    } __TBB_CATCH ( ... ) {\n                        SAY( \"Unexpected exception caught.\" );\n                    }; // try\n                    CHECK( ex_caught );\n                }; // for\n                // Now try to catch exceptions of specific types.\n                #define CHECK_EXCEPTION( id, type )                                 \\\n                    {                                                               \\\n                        SAY( \"Trowing \" #id \" exception of \" #type \" type...\" );    \\\n                        bool ex_caught = false;                                     \\\n                        __TBB_TRY {                                                 \\\n                            tbb::internal::throw_exception( tbb::internal::id );    \\\n                        } __TBB_CATCH ( type const & ) {                            \\\n                            SAY( #type \" exception caught.\" );                      \\\n                            ex_caught = true;                                       \\\n                        } __TBB_CATCH ( ... ) {                                     \\\n                            SAY( \"Unexpected exception caught.\" );                  \\\n                        }; /* try */                                                \\\n                        CHECK( ex_caught );                                         \\\n                    }\n                CHECK_EXCEPTION( eid_bad_alloc,                   std::bad_alloc                   );\n                CHECK_EXCEPTION( eid_bad_last_alloc,              tbb::bad_last_alloc              );\n                CHECK_EXCEPTION( eid_nonpositive_step,            std::invalid_argument            );\n                CHECK_EXCEPTION( eid_out_of_range,                std::out_of_range                );\n                CHECK_EXCEPTION( eid_segment_range_error,         std::range_error                 );\n                CHECK_EXCEPTION( eid_missing_wait,                tbb::missing_wait                );\n                CHECK_EXCEPTION( eid_invalid_multiple_scheduling, tbb::invalid_multiple_scheduling );\n                CHECK_EXCEPTION( eid_improper_lock,               tbb::improper_lock               );\n                CHECK_EXCEPTION( eid_possible_deadlock,           std::runtime_error               );\n                CHECK_EXCEPTION( eid_reservation_length_error,    std::length_error                );\n                CHECK_EXCEPTION( eid_user_abort,                  tbb::user_abort                  );\n                #undef CHECK_EXCEPTION\n                {\n                    bool ex_caught = false;\n                    __TBB_TRY {\n                        tbb::internal::handle_perror( EAGAIN, \"apple\" );\n                    } __TBB_CATCH ( std::runtime_error const & ) {\n                        SAY( \"Expected exception caught.\" );\n                        ex_caught = true;\n                    } __TBB_CATCH ( ... ) {\n                        SAY( \"Unexpected exception caught.\" );\n                    }; // try\n                    CHECK( ex_caught );\n                }\n            }; // if\n        }\n\n        {\n            SAY( \"Test multiple proxies.\" );\n            char const * path[] = { \".\", NULL };\n            tbb::runtime_loader rtl0( tbb::runtime_loader::em_status );\n            tbb::runtime_loader rtl1( tbb::runtime_loader::em_status );\n            CHECK( rtl0.status() == tbb::runtime_loader::ec_ok );\n            CHECK( rtl1.status() == tbb::runtime_loader::ec_ok );\n            SAY( \"Load current version with the first rtl.\" );\n            rtl0.load( path );\n            CHECK( rtl0.status() == tbb::runtime_loader::ec_ok );\n            CHECK_TBB_IS_LOADED();\n            SAY( \"Load another version with the second proxy, it should return a error.\" );\n            rtl1.load( path, TBB_INTERFACE_VERSION + 1 );\n            CHECK( rtl1.status() == tbb::runtime_loader::ec_bad_ver );\n            SAY( \"Load the same version with the second proxy, it should return ok.\" );\n            rtl1.load( path );\n            CHECK( rtl1.status() == tbb::runtime_loader::ec_ok );\n            CHECK_TBB_IS_LOADED();\n        }\n\n    } __TBB_CATCH( ... ) {\n\n        ASSERT( 0, \"unexpected exception\" );\n\n    }; // __TBB_TRY\n\n    if ( errors > 0 ) {\n        REPORT( \"Some tests failed.\\n\" );\n        exit( 1 );\n    }; // if\n\n    return Harness::Done;\n\n} // main\n\n#endif // !(_WIN32||_WIN64)\n\n// end of file //\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_rwm_upgrade_downgrade.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS 4\n#define HARNESS_DEFAULT_MAX_THREADS 4\n\n#include \"tbb/queuing_rw_mutex.h\"\n#include \"tbb/spin_rw_mutex.h\"\n#include \"harness.h\"\n\nusing namespace tbb;\n\nvolatile int Count;\n\ntemplate<typename RWMutex>\nstruct Hammer: NoAssign {\n    RWMutex &MutexProtectingCount;\n    mutable volatile int dummy;\n\n    Hammer(RWMutex &m): MutexProtectingCount(m) {}\n    void operator()( int /*thread_id*/ ) const {\n        for( int j=0; j<100000; ++j ) {\n            typename RWMutex::scoped_lock lock(MutexProtectingCount,false);\n            int c = Count;\n            for( int k=0; k<10; ++k ) {\n                ++dummy;\n            }\n            if( lock.upgrade_to_writer() ) {\n                // The upgrade succeeded without any intervening writers\n                ASSERT( c==Count, \"another thread modified Count while I held a read lock\" );\n            } else {\n                c = Count;\n            }\n            for( int k=0; k<10; ++k ) {\n                ++Count;\n            }\n            lock.downgrade_to_reader();\n            for( int k=0; k<10; ++k ) {\n                ++dummy;\n            }\n        }\n    }\n};\n\nqueuing_rw_mutex QRW_mutex;\nspin_rw_mutex SRW_mutex;\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK(\"Testing on %d threads\", p);\n        Count = 0;\n        NativeParallelFor( p, Hammer<queuing_rw_mutex>(QRW_mutex) );\n        Count = 0;\n        NativeParallelFor( p, Hammer<spin_rw_mutex>(SRW_mutex) );\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_semaphore.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Test for counting semaphore.\n//\n// set semaphore to N\n// create N + M threads\n// have each thread\n//   A. P()\n//   B. increment atomic count\n//   C. spin for awhile checking the value of the count; make sure it doesn't exceed N\n//   D. decrement atomic count\n//   E. V()\n//\n\n#include \"../tbb/semaphore.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/blocked_range.h\"\n\n#include <vector>\nusing std::vector;\n\n#include \"harness_assert.h\"\n#include \"harness.h\"\n\nusing tbb::internal::semaphore;\n\n#include \"harness_barrier.h\"\n\ntbb::atomic<int> pCount;\n\nHarness::SpinBarrier sBarrier;\n\n#include \"tbb/tick_count.h\"\n// semaphore basic function:\n//   set semaphore to initial value\n//   see that semaphore only allows that number of threads to be active\nclass Body: NoAssign {\n    const int nThreads;\n    const int nIters;\n    tbb::internal::semaphore &mySem;\n    vector<int> &ourCounts;\n    vector<double> &tottime;\n    static const int tickCounts = 1;  // millisecond\n    static const int innerWait = 5; // millisecond\npublic:\n    Body(int nThread_, int nIter_, semaphore &mySem_,\n            vector<int>& ourCounts_,\n            vector<double>& tottime_\n            ) : nThreads(nThread_), nIters(nIter_), mySem(mySem_), ourCounts(ourCounts_), tottime(tottime_) { sBarrier.initialize(nThread_); pCount = 0; }\nvoid operator()(const int tid) const {\n    sBarrier.wait();\n    for(int i=0; i < nIters; ++i) {\n        Harness::Sleep( tid * tickCounts );\n        tbb::tick_count t0 = tbb::tick_count::now();\n        mySem.P();\n        tbb::tick_count t1 = tbb::tick_count::now();\n        tottime[tid] += (t1-t0).seconds();\n        int curval = ++pCount;\n        if(curval > ourCounts[tid]) ourCounts[tid] = curval;\n        Harness::Sleep( innerWait );\n        --pCount;\n        ASSERT((int)pCount >= 0, NULL);\n        mySem.V();\n    }\n}\n};\n\n\nvoid testSemaphore( int semInitCnt, int extraThreads ) {\n    semaphore my_sem(semInitCnt);\n    // tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);\n    int nThreads = semInitCnt + extraThreads;\n    vector<int> maxVals(nThreads);\n    vector<double> totTimes(nThreads);\n    int nIters = 10;\n    Body myBody(nThreads, nIters, my_sem, maxVals, totTimes);\n\n    REMARK( \" sem(%d) with %d extra threads\\n\", semInitCnt, extraThreads);\n    pCount = 0;\n    NativeParallelFor(nThreads, myBody);\n    if(extraThreads == 0) {\n        double allPWaits = 0;\n        for(vector<double>::const_iterator j = totTimes.begin(); j != totTimes.end(); ++j) {\n            allPWaits += *j;\n        }\n        allPWaits /= static_cast<double>(nThreads * nIters);\n        REMARK(\"Average wait for P() in uncontested case for nThreads = %d is %g\\n\", nThreads, allPWaits);\n    }\n    ASSERT(!pCount, \"not all threads decremented pCount\");\n    int maxCount = -1;\n    for(vector<int>::const_iterator i=maxVals.begin(); i!= maxVals.end();++i) {\n        maxCount = max(maxCount,*i);\n    }\n    ASSERT(maxCount <= semInitCnt,\"too many threads in semaphore-protected increment\");\n    if(maxCount < semInitCnt) {\n        REMARK(\"Not enough threads in semaphore-protected region (%d < %d)\\n\", static_cast<int>(maxCount), semInitCnt);\n    }\n}\n\n#include \"../tbb/semaphore.cpp\"\n#if _WIN32||_WIN64\n#include \"../tbb/dynamic_link.cpp\"\n\nvoid testOSVersion() {\n#if __TBB_USE_SRWLOCK\n     BOOL bIsWindowsVistaOrLater;\n#if  __TBB_WIN8UI_SUPPORT\n     bIsWindowsVistaOrLater = true;\n#else\n     OSVERSIONINFO osvi;\n\n     memset( (void*)&osvi, 0, sizeof(OSVERSIONINFO) );\n     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n     GetVersionEx(&osvi);\n     bIsWindowsVistaOrLater = (osvi.dwMajorVersion >= 6 );\n#endif\n\n     if( bIsWindowsVistaOrLater ) {\n        REMARK(\"Checking SRWLock is loaded\\n\");\n        tbb::internal::binary_semaphore s;\n        ASSERT( (uintptr_t)tbb::internal::__TBB_init_binsem!=(uintptr_t)&tbb::internal::init_binsem_using_event, NULL );\n        ASSERT( (uintptr_t)tbb::internal::__TBB_acquire_binsem!=(uintptr_t)&tbb::internal::acquire_binsem_using_event, NULL );\n        ASSERT( (uintptr_t)tbb::internal::__TBB_release_binsem!=(uintptr_t)&tbb::internal::release_binsem_using_event, NULL );\n     }\n#endif /* __TBB_USE_SRWLOCK */\n}\n#endif /* _WIN32||_WIN64 */\n\n#define N_TIMES 1000\n\ntemplate<typename S>\nstruct Counter {\n    volatile long value;\n    S my_sem;\n    Counter() : value(0) {}\n};\n\n//! Function object for use with parallel_for.h.\ntemplate<typename C>\nstruct AddOne: NoAssign {\n    C& my_counter;\n    /** Increments counter once for each iteration in the iteration space. */\n    void operator()( int /*tid*/ ) const {\n        for( size_t i=0; i<N_TIMES; ++i ) {\n            my_counter.my_sem.P();\n            my_counter.value = my_counter.value + 1;\n            my_counter.my_sem.V();\n        }\n    }\n    AddOne( C& c_ ) : my_counter(c_) { my_counter.my_sem.V(); }\n};\n\nvoid testBinarySemaphore( int nThreads ) {\n    REMARK(\"Testing binary semaphore\\n\");\n    Counter<tbb::internal::binary_semaphore> counter;\n    AddOne<Counter<tbb::internal::binary_semaphore> > myAddOne(counter);\n    NativeParallelFor( nThreads, myAddOne );\n    ASSERT( nThreads*N_TIMES==counter.value, \"Binary semaphore operations P()/V() have a race\");\n}\n\n// Power of 2, the most tokens that can be in flight.\n#define MAX_TOKENS 32\nenum FilterType { imaProducer, imaConsumer };\nclass FilterBase : NoAssign {\nprotected:\n    FilterType ima;\n    unsigned totTokens;  // total number of tokens to be emitted, only used by producer\n    tbb::atomic<unsigned>& myTokens;\n    tbb::atomic<unsigned>& otherTokens;\n    unsigned myWait;\n    semaphore &mySem;\n    semaphore &nextSem;\n    unsigned* myBuffer;\n    unsigned* nextBuffer;\n    unsigned curToken;\npublic:\n    FilterBase( FilterType ima_\n            ,unsigned totTokens_\n            ,tbb::atomic<unsigned>& myTokens_\n            ,tbb::atomic<unsigned>& otherTokens_\n            ,unsigned myWait_\n            ,semaphore &mySem_\n            ,semaphore &nextSem_\n            ,unsigned* myBuffer_\n            ,unsigned* nextBuffer_\n            )\n        : ima(ima_),totTokens(totTokens_),myTokens(myTokens_),otherTokens(otherTokens_),myWait(myWait_),mySem(mySem_),\n          nextSem(nextSem_),myBuffer(myBuffer_),nextBuffer(nextBuffer_)\n    {\n        curToken = 0;\n    }\n    void Produce(const int tid);\n    void Consume(const int tid);\n    void operator()(const int tid) { if(ima == imaConsumer) Consume(tid); else Produce(tid); }\n};\n\nclass ProduceConsumeBody {\n    FilterBase** myFilters;\n    public:\n    ProduceConsumeBody(FilterBase** myFilters_) : myFilters(myFilters_) {}\n    void operator()(const int tid) const {\n        myFilters[tid]->operator()(tid);\n    }\n};\n\n// send a bunch of non-Null \"tokens\" to consumer, then a NULL.\nvoid FilterBase::Produce(const int /*tid*/) {\n    nextBuffer[0] = 0;  // just in case we provide no tokens\n    sBarrier.wait();\n    while(totTokens) {\n        while(!myTokens)\n            mySem.P();\n        // we have a slot available.\n        --myTokens;  // moving this down reduces spurious wakeups\n        --totTokens;\n        if(totTokens)\n            nextBuffer[curToken&(MAX_TOKENS-1)] = curToken*3+1;\n        else\n            nextBuffer[curToken&(MAX_TOKENS-1)] = 0;\n        ++curToken;\n        Harness::Sleep(myWait);\n        unsigned temp = ++otherTokens;\n        if(temp == 1)\n            nextSem.V();\n    }\n    nextSem.V();  // final wakeup\n}\n\nvoid FilterBase::Consume(const int /*tid*/) {\n    unsigned myToken;\n    sBarrier.wait();\n    do {\n        while(!myTokens)\n            mySem.P();\n        // we have a slot available.\n        --myTokens;  // moving this down reduces spurious wakeups\n        myToken = myBuffer[curToken&(MAX_TOKENS-1)];\n        if(myToken) {\n            ASSERT(myToken == curToken*3+1, \"Error in received token\");\n            ++curToken;\n            Harness::Sleep(myWait);\n            unsigned temp = ++otherTokens;\n            if(temp == 1)\n                nextSem.V();\n        }\n    } while(myToken);\n    // end of processing\n    ASSERT(curToken + 1 == totTokens, \"Didn't receive enough tokens\");\n}\n\n// -- test of producer/consumer with atomic buffer cnt and semaphore\n// nTokens are total number of tokens through the pipe\n// pWait is the wait time for the producer\n// cWait is the wait time for the consumer\nvoid testProducerConsumer( unsigned totTokens, unsigned nTokens, unsigned pWait, unsigned cWait) {\n    semaphore pSem;\n    semaphore cSem;\n    tbb::atomic<unsigned> pTokens;\n    tbb::atomic<unsigned> cTokens;\n    cTokens = 0;\n    unsigned cBuffer[MAX_TOKENS];\n    FilterBase* myFilters[2];  // one producer, one consumer\n    REMARK(\"Testing producer/consumer with %lu total tokens, %lu tokens at a time, producer wait(%lu), consumer wait (%lu)\\n\", totTokens, nTokens, pWait, cWait);\n    ASSERT(nTokens <= MAX_TOKENS, \"Not enough slots for tokens\");\n    myFilters[0] = new FilterBase(imaProducer, totTokens, pTokens, cTokens, pWait, cSem, pSem, (unsigned *)NULL, &(cBuffer[0]));\n    myFilters[1] = new FilterBase(imaConsumer, totTokens, cTokens, pTokens, cWait, pSem, cSem, cBuffer, (unsigned *)NULL);\n    pTokens = nTokens;\n    ProduceConsumeBody myBody(myFilters);\n    sBarrier.initialize(2);\n    NativeParallelFor(2, myBody);\n    delete myFilters[0];\n    delete myFilters[1];\n}\n\nint TestMain() {\n    REMARK(\"Started\\n\");\n#if _WIN32||_WIN64\n    testOSVersion();\n#endif\n    if(MaxThread > 0) {\n        testBinarySemaphore( MaxThread );\n        for(int semSize = 1; semSize <= MaxThread; ++semSize) {\n            for(int exThreads = 0; exThreads <= MaxThread - semSize; ++exThreads) {\n                testSemaphore( semSize, exThreads );\n            }\n        }\n    }\n    // Test producer/consumer with varying execution times and buffer sizes\n    // ( total tokens, tokens in buffer, sleep for producer, sleep for consumer )\n    testProducerConsumer( 10, 2, 5, 5 );\n    testProducerConsumer( 10, 2, 20, 5 );\n    testProducerConsumer( 10, 2, 5, 20 );\n    testProducerConsumer( 10, 1, 5, 5 );\n    testProducerConsumer( 20, 10, 5, 20 );\n    testProducerConsumer( 64, 32, 1, 20 );\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_sequencer_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/atomic.h\"\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#include \"harness_graph.h\"\n#endif\n\n#include <cstdio>\n\n#define N 1000\n#define C 10\n\ntemplate< typename T >\nstruct seq_inspector {\n    size_t operator()(const T &v) const { return size_t(v); }\n};\n\ntemplate< typename T >\nbool wait_try_get( tbb::flow::graph &g, tbb::flow::sequencer_node<T> &q, T &value ) {\n    g.wait_for_all();\n    return q.try_get(value);\n}\n\ntemplate< typename T >\nvoid spin_try_get( tbb::flow::queue_node<T> &q, T &value ) {\n    while ( q.try_get(value) != true ) ;\n}\n\ntemplate< typename T >\nstruct parallel_puts : NoAssign {\n\n    tbb::flow::sequencer_node<T> &my_q;\n    int my_num_threads;\n\n    parallel_puts( tbb::flow::sequencer_node<T> &q, int num_threads ) : my_q(q), my_num_threads(num_threads) {}\n\n    void operator()(int tid) const {\n        for (int j = tid; j < N; j+=my_num_threads) {\n            bool msg = my_q.try_put( T(j) );\n            ASSERT( msg == true, NULL );\n        }\n    }\n\n};\n\ntemplate< typename T >\nstruct touches {\n\n    bool **my_touches;\n    T *my_last_touch;\n    int my_num_threads;\n\n    touches( int num_threads ) : my_num_threads(num_threads) {\n        my_last_touch = new T[my_num_threads];\n        my_touches = new bool* [my_num_threads];\n        for ( int p = 0; p < my_num_threads; ++p) {\n            my_last_touch[p] = T(-1);\n            my_touches[p] = new bool[N];\n            for ( int n = 0; n < N; ++n)\n                my_touches[p][n] = false;\n        }\n    }\n\n    ~touches() {\n        for ( int p = 0; p < my_num_threads; ++p) {\n            delete [] my_touches[p];\n        }\n        delete [] my_touches;\n        delete [] my_last_touch;\n    }\n\n    bool check( int tid, T v ) {\n        if ( my_touches[tid][v] != false ) {\n            printf(\"Error: value seen twice by local thread\\n\");\n            return false;\n        }\n        if ( v <= my_last_touch[tid] ) {\n            printf(\"Error: value seen in wrong order by local thread\\n\");\n            return false;\n        }\n        my_last_touch[tid] = v;\n        my_touches[tid][v] = true;\n        return true;\n    }\n\n    bool validate_touches() {\n        bool *all_touches = new bool[N];\n        for ( int n = 0; n < N; ++n)\n            all_touches[n] = false;\n\n        for ( int p = 0; p < my_num_threads; ++p) {\n            for ( int n = 0; n < N; ++n) {\n                if ( my_touches[p][n] == true ) {\n                    ASSERT( all_touches[n] == false, \"value see by more than one thread\\n\" );\n                    all_touches[n] = true;\n                }\n            }\n        }\n        for ( int n = 0; n < N; ++n) {\n            if ( !all_touches[n] )\n                printf(\"No touch at %d, my_num_threads = %d\\n\", n, my_num_threads);\n            //ASSERT( all_touches[n] == true, \"value not seen by any thread\\n\" );\n        }\n        delete [] all_touches;\n        return true;\n    }\n\n};\n\ntemplate< typename T >\nstruct parallel_gets : NoAssign {\n\n    tbb::flow::sequencer_node<T> &my_q;\n    int my_num_threads;\n    touches<T> &my_touches;\n\n    parallel_gets( tbb::flow::sequencer_node<T> &q, int num_threads, touches<T> &t ) : my_q(q), my_num_threads(num_threads), my_touches(t) {}\n\n    void operator()(int tid) const {\n        for (int j = tid; j < N; j+=my_num_threads) {\n            T v;\n            spin_try_get( my_q, v );\n            my_touches.check( tid, v );\n        }\n    }\n\n};\n\ntemplate< typename T >\nstruct parallel_put_get : NoAssign {\n\n    tbb::flow::sequencer_node<T> &my_s1;\n    tbb::flow::sequencer_node<T> &my_s2;\n    int my_num_threads;\n    tbb::atomic< int > &my_counter;\n    touches<T> &my_touches;\n\n    parallel_put_get( tbb::flow::sequencer_node<T> &s1, tbb::flow::sequencer_node<T> &s2, int num_threads,\n                      tbb::atomic<int> &counter, touches<T> &t ) : my_s1(s1), my_s2(s2), my_num_threads(num_threads), my_counter(counter), my_touches(t) {}\n\n    void operator()(int tid) const {\n        int i_start = 0;\n\n        while ( (i_start = my_counter.fetch_and_add(C)) < N ) {\n            int i_end = ( N < i_start + C ) ? N : i_start + C;\n            for (int i = i_start; i < i_end; ++i) {\n                bool msg = my_s1.try_put( T(i) );\n                ASSERT( msg == true, NULL );\n            }\n\n            for (int i = i_start; i < i_end; ++i) {\n                T v;\n                spin_try_get( my_s2, v );\n                my_touches.check( tid, v );\n            }\n        }\n    }\n\n};\n\n//\n// Tests\n//\n// multiple parallel senders, multiple receivers, properly sequenced (relative to receiver) at output\n// chained sequencers, multiple parallel senders, multiple receivers, properly sequenced (relative to receiver) at output\n//\n\ntemplate< typename T >\nint test_parallel(int num_threads) {\n    tbb::flow::graph g;\n\n    tbb::flow::sequencer_node<T> s(g, seq_inspector<T>());\n    NativeParallelFor( num_threads, parallel_puts<T>(s, num_threads) );\n    {\n        touches<T> t( num_threads );\n        NativeParallelFor( num_threads, parallel_gets<T>(s, num_threads, t) );\n        g.wait_for_all();\n        ASSERT( t.validate_touches(), NULL );\n    }\n    T bogus_value(-1);\n    T j = bogus_value;\n    ASSERT( s.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    g.wait_for_all();\n\n    tbb::flow::sequencer_node<T> s1(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s2(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s3(g, seq_inspector<T>());\n    tbb::flow::make_edge( s1, s2 );\n    tbb::flow::make_edge( s2, s3 );\n\n    {\n        touches<T> t( num_threads );\n        tbb::atomic<int> counter;\n        counter = 0;\n        NativeParallelFor( num_threads, parallel_put_get<T>(s1, s3, num_threads, counter, t) );\n        g.wait_for_all();\n        t.validate_touches();\n    }\n    g.wait_for_all();\n    ASSERT( s1.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( s2.try_get( j ) == false, NULL );\n    g.wait_for_all();\n    ASSERT( s3.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    // test copy constructor\n    tbb::flow::sequencer_node<T> s_copy(s);\n    NativeParallelFor( num_threads, parallel_puts<T>(s_copy, num_threads) );\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        spin_try_get( s_copy, j );\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( s_copy.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    return 0;\n}\n\n\n//\n// Tests\n//\n// No predecessors can be registered\n// Request from empty buffer fails\n// In-order puts, single sender, single receiver, properly sequenced at output\n// Reverse-order puts, single sender, single receiver, properly sequenced at output\n// Chained sequencers (3), in-order and reverse-order tests, properly sequenced at output\n//\n\ntemplate< typename T >\nint test_serial() {\n    tbb::flow::graph g;\n    T bogus_value(-1);\n\n    tbb::flow::sequencer_node<T> s(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s2(g, seq_inspector<T>());\n    T j = bogus_value;\n\n    //\n    // Rejects attempts to add / remove predecessor\n    // Rejects request from empty Q\n    //\n    ASSERT( s.register_predecessor( s2 ) == false, NULL );\n    ASSERT( s.remove_predecessor( s2 ) == false, NULL );\n    ASSERT( s.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    //\n    // In-order simple puts and gets\n    //\n\n    for (int i = 0; i < N; ++i) {\n        bool msg = s.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n        ASSERT(!s.try_put( T(i) ), NULL);  // second attempt to put should reject\n    }\n\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        ASSERT(wait_try_get( g, s, j ) == true, NULL);\n        ASSERT( i == j, NULL );\n        ASSERT(!s.try_put( T(i) ),NULL );  // after retrieving value, subsequent put should fail\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( s.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    //\n    // Reverse-order simple puts and gets\n    //\n\n    for (int i = N-1; i >= 0; --i) {\n        bool msg = s2.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        ASSERT(wait_try_get( g, s2, j ) == true, NULL);\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    g.wait_for_all();\n    ASSERT( s2.try_get( j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    //\n    // Chained in-order simple puts and gets\n    //\n\n    tbb::flow::sequencer_node<T> s3(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s4(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s5(g, seq_inspector<T>());\n    tbb::flow::make_edge( s3, s4 );\n    tbb::flow::make_edge( s4, s5 );\n\n    for (int i = 0; i < N; ++i) {\n        bool msg = s3.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        ASSERT(wait_try_get( g, s5, j ) == true, NULL);\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    ASSERT( wait_try_get( g, s3, j ) == false, NULL );\n    ASSERT( wait_try_get( g, s4, j ) == false, NULL );\n    ASSERT( wait_try_get( g, s5, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    g.wait_for_all();\n    tbb::flow::remove_edge( s3, s4 );\n    ASSERT( s3.try_put( N ) == true, NULL );\n    ASSERT( wait_try_get( g, s4, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( wait_try_get( g, s5, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( wait_try_get( g, s3, j ) == true, NULL );\n    ASSERT( j == N, NULL );\n\n    //\n    // Chained reverse-order simple puts and gets\n    //\n\n    tbb::flow::sequencer_node<T> s6(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s7(g, seq_inspector<T>());\n    tbb::flow::sequencer_node<T> s8(g, seq_inspector<T>());\n    tbb::flow::make_edge( s6, s7 );\n    tbb::flow::make_edge( s7, s8 );\n\n    for (int i = N-1; i >= 0; --i) {\n        bool msg = s6.try_put( T(i) );\n        ASSERT( msg == true, NULL );\n    }\n\n    for (int i = 0; i < N; ++i) {\n        j = bogus_value;\n        ASSERT( wait_try_get( g, s8, j ) == true, NULL );\n        ASSERT( i == j, NULL );\n    }\n    j = bogus_value;\n    ASSERT( wait_try_get( g, s6, j ) == false, NULL );\n    ASSERT( wait_try_get( g, s7, j ) == false, NULL );\n    ASSERT( wait_try_get( g, s8, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n\n    g.wait_for_all();\n    tbb::flow::remove_edge( s6, s7 );\n    ASSERT( s6.try_put( N ) == true, NULL );\n    ASSERT( wait_try_get( g, s7, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( wait_try_get( g, s8, j ) == false, NULL );\n    ASSERT( j == bogus_value, NULL );\n    ASSERT( wait_try_get( g, s6, j ) == true, NULL );\n    ASSERT( j == N, NULL );\n\n    return 0;\n}\n\nint TestMain() {\n    tbb::tick_count start = tbb::tick_count::now(), stop;\n    for (int p = 2; p <= 4; ++p) {\n        tbb::task_scheduler_init init(p);\n        test_serial<int>();\n        test_parallel<int>(p);\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_buffer_extract<tbb::flow::sequencer_node<int> >().run_tests();\n#endif\n    stop = tbb::tick_count::now();\n    REMARK(\"Sequencer_Node Time=%6.6f\\n\", (stop-start).seconds());\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_source_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// have to expose the reset_node method to be able to reset a function_body\n#include \"harness.h\"\n#include \"harness_graph.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst int N = 1000;\n\ntemplate< typename T >\nclass test_push_receiver : public tbb::flow::receiver<T>, NoAssign {\n\n    tbb::atomic<int> my_counters[N];\n    tbb::flow::graph& my_graph;\n\npublic:\n\n    test_push_receiver(tbb::flow::graph& g) : my_graph(g) {\n        for (int i = 0; i < N; ++i )\n            my_counters[i] = 0;\n    }\n\n    int get_count( int i ) {\n       int v = my_counters[i];\n       return v;\n    }\n\n    typedef typename tbb::flow::receiver<T>::predecessor_type predecessor_type;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename tbb::flow::receiver<T>::built_predecessors_type built_predecessors_type;\n    typedef typename tbb::flow::receiver<T>::predecessor_list_type predecessor_list_type;\n    built_predecessors_type bpt;\n    built_predecessors_type &built_predecessors() __TBB_override { return bpt; }\n    void internal_add_built_predecessor( predecessor_type & ) __TBB_override { }\n    void internal_delete_built_predecessor( predecessor_type & ) __TBB_override { }\n    void copy_predecessors( predecessor_list_type & ) __TBB_override { }\n    size_t predecessor_count() __TBB_override { return 0; }\n#endif\n\n    tbb::task *try_put_task( const T &v ) __TBB_override {\n       int i = (int)v;\n       ++my_counters[i];\n       return const_cast<tbb::task *>(SUCCESSFULLY_ENQUEUED);\n    }\n\n    tbb::flow::graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(tbb::flow::reset_flags /*f*/) __TBB_override {}\n};\n\ntemplate< typename T >\nclass source_body {\n\n   tbb::atomic<int> my_count;\n   int *ninvocations;\n\npublic:\n\n   source_body() : ninvocations(NULL) { my_count = 0; }\n   source_body(int &_inv) : ninvocations(&_inv)  { my_count = 0; }\n\n   bool operator()( T &v ) {\n      v = (T)my_count.fetch_and_increment();\n      if(ninvocations) ++(*ninvocations);\n      if ( (int)v < N )\n         return true;\n      else\n         return false;\n   }\n\n};\n\ntemplate< typename T >\nclass function_body {\n\n    tbb::atomic<int> *my_counters;\n\npublic:\n\n    function_body( tbb::atomic<int> *counters ) : my_counters(counters) {\n        for (int i = 0; i < N; ++i )\n            my_counters[i] = 0;\n    }\n\n    bool operator()( T v ) {\n        ++my_counters[(int)v];\n        return true;\n    }\n\n};\n\ntemplate< typename T >\nvoid test_single_dest() {\n\n   // push only\n   tbb::flow::graph g;\n   tbb::flow::source_node<T> src(g, source_body<T>() );\n   test_push_receiver<T> dest(g);\n   tbb::flow::make_edge( src, dest );\n   g.wait_for_all();\n   for (int i = 0; i < N; ++i ) {\n       ASSERT( dest.get_count(i) == 1, NULL );\n   }\n\n   // push only\n   tbb::atomic<int> counters3[N];\n   tbb::flow::source_node<T> src3(g, source_body<T>() );\n   function_body<T> b3( counters3 );\n   tbb::flow::function_node<T,bool> dest3(g, tbb::flow::unlimited, b3 );\n   tbb::flow::make_edge( src3, dest3 );\n   g.wait_for_all();\n   for (int i = 0; i < N; ++i ) {\n       int v = counters3[i];\n       ASSERT( v == 1, NULL );\n   }\n\n   // push & pull\n   tbb::flow::source_node<T> src2(g, source_body<T>() );\n   tbb::atomic<int> counters2[N];\n   function_body<T> b2( counters2 );\n   tbb::flow::function_node<T,bool> dest2(g, tbb::flow::serial, b2 );\n   tbb::flow::make_edge( src2, dest2 );\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n   ASSERT(src2.successor_count() == 1, NULL);\n   typename tbb::flow::source_node<T>::successor_list_type my_succs;\n   src2.copy_successors(my_succs);\n   ASSERT(my_succs.size() == 1, NULL);\n#endif\n   g.wait_for_all();\n   for (int i = 0; i < N; ++i ) {\n       int v = counters2[i];\n       ASSERT( v == 1, NULL );\n   }\n\n   // test copy constructor\n   tbb::flow::source_node<T> src_copy(src);\n   test_push_receiver<T> dest_c(g);\n   ASSERT( src_copy.register_successor(dest_c), NULL );\n   g.wait_for_all();\n   for (int i = 0; i < N; ++i ) {\n       ASSERT( dest_c.get_count(i) == 1, NULL );\n   }\n}\n\nvoid test_reset() {\n    //    source_node -> function_node\n    tbb::flow::graph g;\n    tbb::atomic<int> counters3[N];\n    tbb::flow::source_node<int> src3(g, source_body<int>() );\n    tbb::flow::source_node<int> src_inactive(g, source_body<int>(), /*active*/ false );\n    function_body<int> b3( counters3 );\n    tbb::flow::function_node<int,bool> dest3(g, tbb::flow::unlimited, b3 );\n    tbb::flow::make_edge( src3, dest3 );\n    //    source_node already in active state.  Let the graph run,\n    g.wait_for_all();\n    //    check the array for each value.\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 1, NULL );\n        counters3[i] = 0;\n    }\n    g.reset(tbb::flow::rf_reset_bodies);  // <-- re-initializes the counts.\n    // and spawns task to run source\n    g.wait_for_all();\n    //    check output queue again.  Should be the same contents.\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 1, NULL );\n        counters3[i] = 0;\n    }\n    g.reset();  // doesn't reset the source_node_body to initial state, but does spawn a task\n                // to run the source_node.\n\n    g.wait_for_all();\n    // array should be all zero\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 0, NULL );\n    }\n\n    remove_edge(src3, dest3);\n    make_edge(src_inactive, dest3);\n\n    // src_inactive doesn't run\n    g.wait_for_all();\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 0, NULL );\n    }\n\n    // run graph\n    src_inactive.activate();\n    g.wait_for_all();\n    // check output\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 1, NULL );\n        counters3[i] = 0;\n    }\n    g.reset(tbb::flow::rf_reset_bodies);  // <-- reinitializes the counts\n    // src_inactive doesn't run\n    g.wait_for_all();\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 0, NULL );\n    }\n\n    // start it up\n    src_inactive.activate();\n    g.wait_for_all();\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 1, NULL );\n        counters3[i] = 0;\n    }\n    g.reset();  // doesn't reset the source_node_body to initial state, and doesn't\n                // spawn a task to run the source_node.\n\n    g.wait_for_all();\n    // array should be all zero\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 0, NULL );\n    }\n    src_inactive.activate();\n    // source_node_body is already in final state, so source_node will not forward a message.\n    g.wait_for_all();\n    for (int i = 0; i < N; ++i ) {\n        int v = counters3[i];\n        ASSERT( v == 0, NULL );\n    }\n}\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nvoid test_extract() {\n    int counts = 0;\n    tbb::flow::tuple<int,int> dont_care;\n    tbb::flow::graph g;\n    typedef tbb::flow::source_node<int> snode_type;\n    typedef snode_type::successor_list_type successor_list_type;\n    snode_type s0(g, source_body<int>(counts), /*is_active*/false );\n    tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j0(g);\n    tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j1(g);\n    tbb::flow::join_node< tbb::flow::tuple<int,int>, tbb::flow::reserving > j2(g);\n    tbb::flow::queue_node<int> q0(g);\n    tbb::flow::queue_node<tbb::flow::tuple<int,int> > q1(g);\n    tbb::flow::make_edge(s0, tbb::flow::get<0>(j0.input_ports()));\n    /*  s0 ----+    */\n    /*         | j0 */\n    /*         +    */\n    ASSERT(!counts, \"source_node activated too soon\");\n    s0.activate();\n    g.wait_for_all();  // should produce one value, buffer it.\n    ASSERT(counts == 1, \"source_node did not react to activation\");\n\n    g.reset(tbb::flow::rf_reset_bodies);\n    counts = 0;\n    s0.extract();\n    /*  s0     +    */\n    /*         | j0 */\n    /*         +    */\n    s0.activate();\n    g.wait_for_all();  // no successors, so the body will not execute\n    ASSERT(counts == 0, \"source_node shouldn't forward (no successors)\");\n    g.reset(tbb::flow::rf_reset_bodies);\n\n    tbb::flow::make_edge(s0, tbb::flow::get<0>(j0.input_ports()));\n    tbb::flow::make_edge(s0, tbb::flow::get<0>(j1.input_ports()));\n    tbb::flow::make_edge(s0, tbb::flow::get<0>(j2.input_ports()));\n\n    /*        /+    */\n    /*       / | j0 */\n    /*      /  +    */\n    /*     /        */\n    /*    / /--+    */\n    /*  s0-/   | j1 */\n    /*    \\    +    */\n    /*     \\        */\n    /*      \\--+    */\n    /*         | j2 */\n    /*         +    */\n\n    // do all joins appear in successor list?\n    successor_list_type jv1;\n    jv1.push_back(&(tbb::flow::get<0>(j0.input_ports())));\n    jv1.push_back(&(tbb::flow::get<0>(j1.input_ports())));\n    jv1.push_back(&(tbb::flow::get<0>(j2.input_ports())));\n    snode_type::successor_list_type sv;\n    s0.copy_successors(sv);\n    ASSERT(lists_match(sv, jv1), \"mismatch in successor list\");\n\n    tbb::flow::make_edge(q0, tbb::flow::get<1>(j2.input_ports()));\n    tbb::flow::make_edge(j2, q1);\n    s0.activate();\n\n    /*        /+           */\n    /*       / | j0        */\n    /*      /  +           */\n    /*     /               */\n    /*    / /--+           */\n    /*  s0-/   | j1        */\n    /*    \\    +           */\n    /*     \\               */\n    /*      \\--+           */\n    /*         | j2----q1  */\n    /*  q0-----+           */\n\n    q0.try_put(1);\n    g.wait_for_all();\n    ASSERT(q1.try_get(dont_care), \"join did not emit result\");\n    j2.extract();\n    tbb::flow::make_edge(q0, tbb::flow::get<1>(j2.input_ports()));\n    tbb::flow::make_edge(j2, q1);\n\n    /*        /+           */\n    /*       / | j0        */\n    /*      /  +           */\n    /*     /               */\n    /*    / /--+           */\n    /*  s0-/   | j1        */\n    /*         +           */\n    /*                     */\n    /*         +           */\n    /*         | j2----q1  */\n    /*  q0-----+           */\n\n    jv1.clear();\n    jv1.push_back(&(tbb::flow::get<0>(j0.input_ports())));\n    jv1.push_back(&(tbb::flow::get<0>(j1.input_ports())));\n    s0.copy_successors(sv);\n    ASSERT(lists_match(sv, jv1), \"mismatch in successor list\");\n\n    q0.try_put(1);\n    g.wait_for_all();\n    ASSERT(!q1.try_get(dont_care), \"extract of successor did not remove pred link\");\n\n    s0.extract();\n\n    /*         +           */\n    /*         | j0        */\n    /*         +           */\n    /*                     */\n    /*         +           */\n    /*  s0     | j1        */\n    /*         +           */\n    /*                     */\n    /*         +           */\n    /*         | j2----q1  */\n    /*  q0-----+           */\n\n    ASSERT(s0.successor_count() == 0, \"successor list not cleared\");\n    s0.copy_successors(sv);\n    ASSERT(sv.size() == 0, \"non-empty successor list\");\n\n    tbb::flow::make_edge(s0, tbb::flow::get<0>(j2.input_ports()));\n\n    /*         +           */\n    /*         | j0        */\n    /*         +           */\n    /*                     */\n    /*         +           */\n    /*  s0     | j1        */\n    /*    \\    +           */\n    /*     \\               */\n    /*      \\--+           */\n    /*         | j2----q1  */\n    /*  q0-----+           */\n\n    jv1.clear();\n    jv1.push_back(&(tbb::flow::get<0>(j2.input_ports())));\n    s0.copy_successors(sv);\n    ASSERT(lists_match(sv, jv1), \"mismatch in successor list\");\n\n    q0.try_put(1);\n    g.wait_for_all();\n    ASSERT(!q1.try_get(dont_care), \"extract of successor did not remove pred link\");\n}\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nint TestMain() {\n    if( MinThread<1 ) {\n        REPORT(\"number of threads must be positive\\n\");\n        exit(1);\n    }\n    for ( int p = MinThread; p < MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        test_single_dest<int>();\n        test_single_dest<float>();\n    }\n    test_reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract();\n#endif\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_split_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness.h\"\n#include \"harness_graph.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#if defined(_MSC_VER) && _MSC_VER < 1600\n    #pragma warning (disable : 4503) //disabling the \"decorated name length exceeded\" warning for VS2008 and earlier\n#endif\n\n//\n// Tests\n//\n\nconst int Count = 300;\nconst int MaxPorts = 10;\nconst int MaxNSources = 5; // max # of source_nodes to register for each split_node input in parallel test\n\nstd::vector<bool> flags;   // for checking output\n\ntemplate<typename T>\nclass name_of {\npublic:\n    static const char* name() { return  \"Unknown\"; }\n};\ntemplate<>\nclass name_of<int> {\npublic:\n    static const char* name() { return  \"int\"; }\n};\ntemplate<>\nclass name_of<float> {\npublic:\n    static const char* name() { return  \"float\"; }\n};\ntemplate<>\nclass name_of<double> {\npublic:\n    static const char* name() { return  \"double\"; }\n};\ntemplate<>\nclass name_of<long> {\npublic:\n    static const char* name() { return  \"long\"; }\n};\ntemplate<>\nclass name_of<short> {\npublic:\n    static const char* name() { return  \"short\"; }\n};\n\n// T must be arithmetic, and shouldn't wrap around for reasonable sizes of Count (which is now 150, and maxPorts is 10,\n// so the max number generated right now is 1500 or so.)  Source will generate a series of TT with value\n// (init_val + (i-1)*addend) * my_mult, where i is the i-th invocation of the body.  We are attaching addend\n// source nodes to a join_port, and each will generate part of the numerical series the port is expecting\n// to receive.  If there is only one source node, the series order will be maintained; if more than one,\n// this is not guaranteed.\n\ntemplate<int N>\nstruct tuple_helper {\n    template<typename TupleType>\n    static void set_element( TupleType &t, int i) {\n        tbb::flow::get<N-1>(t) = (typename tbb::flow::tuple_element<N-1,TupleType>::type)(i * (N+1));\n        tuple_helper<N-1>::set_element(t, i);\n    }\n};\n\ntemplate<>\nstruct tuple_helper<1> {\n    template<typename TupleType>\n    static void set_element(TupleType &t, int i) {\n        tbb::flow::get<0>(t) = (typename tbb::flow::tuple_element<0,TupleType>::type)(i * 2);\n    }\n};\n\n// if we start N source_bodys they will all have the addend N, and my_count should be initialized to 0 .. N-1.\n// the output tuples should have all the sequence, but the order will in general vary.\ntemplate<typename TupleType>\nclass source_body {\n    typedef TupleType TT;\n    static const int N = tbb::flow::tuple_size<TT>::value;\n    int my_count;\n    int addend;\npublic:\n    source_body(int init_val, int addto) : my_count(init_val), addend(addto) { }\n    void operator=( const source_body& other) { my_count = other.my_count; addend = other.addend; }\n    bool operator()( TT &v) {\n        if(my_count >= Count) return false;\n        tuple_helper<N>::set_element(v, my_count);\n        my_count += addend;\n        return true;\n    }\n};\n\n// allocator for split_node.\n\ntemplate<int N, typename SType>\nclass makeSplit {\npublic:\n    static SType *create(tbb::flow::graph& g) {\n        SType *temp = new SType(g);\n        return temp;\n    }\n    static void destroy(SType *p) { delete p; }\n};\n\n// holder for sink_node pointers for eventual deletion\n\nstatic void* all_sink_nodes[MaxPorts];\n\n\ntemplate<int ELEM, typename SType>\nclass sink_node_helper {\npublic:\n    typedef typename SType::input_type TT;\n    typedef typename tbb::flow::tuple_element<ELEM-1,TT>::type IT;\n    typedef typename tbb::flow::queue_node<IT> my_sink_node_type;\n    static void print_parallel_remark() {\n        sink_node_helper<ELEM-1,SType>::print_parallel_remark();\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void print_serial_remark() {\n        sink_node_helper<ELEM-1,SType>::print_serial_remark();\n        REMARK(\", %s\", name_of<IT>::name());\n    }\n    static void add_sink_nodes(SType &my_split, tbb::flow::graph &g) {\n        my_sink_node_type *new_node = new my_sink_node_type(g);\n        tbb::flow::make_edge( tbb::flow::output_port<ELEM-1>(my_split) , *new_node);\n        all_sink_nodes[ELEM-1] = (void *)new_node;\n        sink_node_helper<ELEM-1, SType>::add_sink_nodes(my_split, g);\n    }\n\n    static void check_sink_values() {\n        my_sink_node_type *dp = reinterpret_cast<my_sink_node_type *>(all_sink_nodes[ELEM-1]);\n        for(int i = 0; i < Count; ++i) {\n            IT v;\n            ASSERT(dp->try_get(v), NULL);\n            flags[((int)v) / (ELEM+1)] = true;\n        }\n        for(int i = 0; i < Count; ++i) {\n            ASSERT(flags[i], NULL);\n            flags[i] = false;  // reset for next test\n        }\n        sink_node_helper<ELEM-1,SType>::check_sink_values();\n    }\n    static void remove_sink_nodes(SType& my_split) {\n        my_sink_node_type *dp = reinterpret_cast<my_sink_node_type *>(all_sink_nodes[ELEM-1]);\n        tbb::flow::remove_edge( tbb::flow::output_port<ELEM-1>(my_split) , *dp);\n        delete dp;\n        sink_node_helper<ELEM-1, SType>::remove_sink_nodes(my_split);\n    }\n};\n\ntemplate<typename SType>\nclass sink_node_helper<1, SType> {\n    typedef typename SType::input_type TT;\n    typedef typename tbb::flow::tuple_element<0,TT>::type IT;\n    typedef typename tbb::flow::queue_node<IT> my_sink_node_type;\npublic:\n    static void print_parallel_remark() {\n        REMARK(\"Parallel test of split_node< %s\", name_of<IT>::name());\n    }\n    static void print_serial_remark() {\n        REMARK(\"Serial test of split_node< %s\", name_of<IT>::name());\n    }\n    static void add_sink_nodes(SType &my_split, tbb::flow::graph &g) {\n        my_sink_node_type *new_node = new my_sink_node_type(g);\n        tbb::flow::make_edge( tbb::flow::output_port<0>(my_split) , *new_node);\n        all_sink_nodes[0] = (void *)new_node;\n    }\n    static void check_sink_values() {\n        my_sink_node_type *dp = reinterpret_cast<my_sink_node_type *>(all_sink_nodes[0]);\n        for(int i = 0; i < Count; ++i) {\n            IT v;\n            ASSERT(dp->try_get(v), NULL);\n            flags[((int)v) / 2] = true;\n        }\n        for(int i = 0; i < Count; ++i) {\n            ASSERT(flags[i], NULL);\n            flags[i] = false;  // reset for next test\n        }\n    }\n    static void remove_sink_nodes(SType& my_split) {\n        my_sink_node_type *dp = reinterpret_cast<my_sink_node_type *>(all_sink_nodes[0]);\n        tbb::flow::remove_edge( tbb::flow::output_port<0>(my_split) , *dp);\n        delete dp;\n    }\n};\n\n// parallel_test: create source_nodes that feed tuples into the split node\n//    and queue_nodes that receive the output.\ntemplate<typename SType>\nclass parallel_test {\npublic:\n    typedef typename SType::input_type TType;\n    typedef tbb::flow::source_node<TType> source_type;\n    static const int N = tbb::flow::tuple_size<TType>::value;\n    static void test() {\n        TType v;\n        source_type* all_source_nodes[MaxNSources];\n        sink_node_helper<N,SType>::print_parallel_remark();\n        REMARK(\" >\\n\");\n        for(int i=0; i < MaxPorts; ++i) {\n            all_sink_nodes[i] = NULL;\n        }\n        // try test for # sources 1 .. MaxNSources\n        for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {\n            tbb::flow::graph g;\n            SType* my_split = makeSplit<N,SType>::create(g);\n\n            // add sinks first so when sources start spitting out values they are there to catch them\n            sink_node_helper<N, SType>::add_sink_nodes((*my_split), g);\n\n            // now create nInputs source_nodes, each spitting out i, i+nInputs, i+2*nInputs ...\n            // each element of the tuple is i*(n+1), where n is the tuple element index (1-N)\n            for(int i = 0; i < nInputs; ++i) {\n                // create source node\n                source_type *s = new source_type(g, source_body<TType>(i, nInputs) );\n                tbb::flow::make_edge(*s, *my_split);\n                all_source_nodes[i] = s;\n            }\n\n            g.wait_for_all();\n\n            // check that we got Count values in each output queue, and all the index values\n            // are there.\n            sink_node_helper<N, SType>::check_sink_values();\n\n            sink_node_helper<N, SType>::remove_sink_nodes(*my_split);\n            for(int i = 0; i < nInputs; ++i) {\n                delete all_source_nodes[i];\n            }\n            makeSplit<N,SType>::destroy(my_split);\n        }\n    }\n};\n\n//\n// Single predecessor, single accepting successor at each port\n\ntemplate<typename SType>\nvoid test_one_serial( SType &my_split, tbb::flow::graph &g) {\n    typedef typename SType::input_type TType;\n    static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;\n    sink_node_helper<TUPLE_SIZE, SType>::add_sink_nodes(my_split,g);\n    typedef TType q3_input_type;\n    tbb::flow::queue_node< q3_input_type >  q3(g);\n\n    tbb::flow::make_edge( q3, my_split );\n\n    // fill the  queue with its value one-at-a-time\n    flags.clear();\n    for (int i = 0; i < Count; ++i ) {\n        TType v;\n        tuple_helper<TUPLE_SIZE>::set_element(v, i);\n        ASSERT(my_split.try_put(v), NULL);\n        flags.push_back(false);\n    }\n\n    g.wait_for_all();\n\n    sink_node_helper<TUPLE_SIZE,SType>::check_sink_values();\n\n    sink_node_helper<TUPLE_SIZE, SType>::remove_sink_nodes(my_split);\n\n}\n\ntemplate<typename SType>\nclass serial_test {\n    typedef typename SType::input_type TType;\n    static const int TUPLE_SIZE = tbb::flow::tuple_size<TType>::value;\n    static const int ELEMS = 3;\npublic:\nstatic void test() {\n    tbb::flow::graph g;\n    flags.reserve(Count);\n    SType* my_split = makeSplit<TUPLE_SIZE,SType>::create(g);\n    sink_node_helper<TUPLE_SIZE, SType>::print_serial_remark(); REMARK(\" >\\n\");\n\n    test_output_ports_return_ref(*my_split);\n\n    test_one_serial<SType>(*my_split, g);\n    // build the vector with copy construction from the used split node.\n    std::vector<SType>split_vector(ELEMS, *my_split);\n    // destroy the tired old split_node in case we're accidentally reusing pieces of it.\n    makeSplit<TUPLE_SIZE,SType>::destroy(my_split);\n\n\n    for(int e = 0; e < ELEMS; ++e) {  // exercise each of the vector elements\n        test_one_serial<SType>(split_vector[e], g);\n    }\n}\n\n}; // serial_test\n\ntemplate<\n      template<typename> class TestType,  // serial_test or parallel_test\n      typename TupleType >                               // type of the input of the split\nstruct generate_test {\n    typedef tbb::flow::split_node<TupleType> split_node_type;\n    static void do_test() {\n        TestType<split_node_type>::test();\n    }\n}; // generate_test\n\nint TestMain() {\n#if __TBB_USE_TBB_TUPLE\n    REMARK(\"  Using TBB tuple\\n\");\n#else\n    REMARK(\"  Using platform tuple\\n\");\n#endif\n   for (int p = 0; p < 2; ++p) {\n       generate_test<serial_test, tbb::flow::tuple<float, double> >::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 4\n       generate_test<serial_test, tbb::flow::tuple<float, double, int, long> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 6\n       generate_test<serial_test, tbb::flow::tuple<double, double, int, long, int, short> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 8\n       generate_test<serial_test, tbb::flow::tuple<float, double, double, double, float, int, float, long> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 10\n       generate_test<serial_test, tbb::flow::tuple<float, double, int, double, double, float, long, int, float, long> >::do_test();\n#endif\n       generate_test<parallel_test, tbb::flow::tuple<float, double> >::do_test();\n#if MAX_TUPLE_TEST_SIZE >= 3\n       generate_test<parallel_test, tbb::flow::tuple<float, int, long> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 5\n       generate_test<parallel_test, tbb::flow::tuple<double, double, int, int, short> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 7\n       generate_test<parallel_test, tbb::flow::tuple<float, int, double, float, long, float, long> >::do_test();\n#endif\n#if MAX_TUPLE_TEST_SIZE >= 9\n       generate_test<parallel_test, tbb::flow::tuple<float, double, int, double, double, long, int, float, long> >::do_test();\n#endif\n   }\n   return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_static_assert.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_stddef.h\"\n\nvoid TestInsideFunction(){\n    __TBB_STATIC_ASSERT(sizeof(char)>=1,\"\");\n}\nvoid TestTwiceAtTheSameLine(){\n//    for current implementation it is not possible to use\n//    two __TBB_STATIC_ASSERT on a same line\n//    __TBB_STATIC_ASSERT(true,\"\"); __TBB_STATIC_ASSERT(true,\"\");\n}\n\nvoid TestInsideStructure(){\n    struct helper{\n        __TBB_STATIC_ASSERT(true,\"\");\n    };\n}\n\nvoid TestTwiceInsideStructure(){\n    struct helper{\n        //for current implementation it is not possible to use\n        //two __TBB_STATIC_ASSERT on a same line inside a class definition\n        //__TBB_STATIC_ASSERT(true,\"\");__TBB_STATIC_ASSERT(true,\"\");\n\n        __TBB_STATIC_ASSERT(true,\"\");\n        __TBB_STATIC_ASSERT(true,\"\");\n    };\n}\n\nnamespace TestTwiceInsideNamespaceHelper{\n    __TBB_STATIC_ASSERT(true,\"\");\n    __TBB_STATIC_ASSERT(true,\"\");\n}\n\nnamespace TestTwiceInsideClassTemplateHelper{\n    template <typename T>\n    struct template_struct{\n        __TBB_STATIC_ASSERT(true,\"\");\n        __TBB_STATIC_ASSERT(true,\"\");\n    };\n}\n\nvoid TestTwiceInsideTemplateClass(){\n    using namespace TestTwiceInsideClassTemplateHelper;\n    typedef template_struct<int> template_struct_int_typedef;\n    typedef template_struct<char> template_struct_char_typedef;\n    tbb::internal::suppress_unused_warning(template_struct_int_typedef(), template_struct_char_typedef());\n}\n\ntemplate<typename T>\nvoid TestTwiceInsideTemplateFunction(){\n    __TBB_STATIC_ASSERT(sizeof(T)>=1,\"\");\n    __TBB_STATIC_ASSERT(true,\"\");\n}\n\n#include \"harness.h\"\nint TestMain() {\n    #if __TBB_STATIC_ASSERT_PRESENT\n        REPORT(\"Known issue: %s\\n\", \"no need to test ad-hoc implementation as native feature of C++11 is used\");\n        return Harness::Skipped;\n    #else\n        TestInsideFunction();\n        TestInsideStructure();\n        TestTwiceAtTheSameLine();\n        TestTwiceInsideStructure();\n        TestTwiceInsideTemplateClass();\n        TestTwiceInsideTemplateFunction<char>();\n        return Harness::Done;\n    #endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_std_thread.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_IMPLEMENT_CPP0X 1\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_WIN8UI_SUPPORT\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\nint TestMain() {\n    return Harness::Skipped;\n}\n#else\n#include \"tbb/compat/thread\"\n#define THREAD std::thread\n#define THIS_THREAD std::this_thread\n#define THIS_THREAD_SLEEP THIS_THREAD::sleep_for\n#include \"test_thread.h\"\n#include \"harness.h\"\n\nint TestMain () {\n    CheckSignatures();\n    RunTests();\n    return Harness::Done;\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_streaming_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_PREVIEW_STREAMING_NODE\n\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#pragma warning (disable: 4702) // Suppress \"unreachable code\" warning\n#endif\n\n#include <functional>\n#include <iostream>\n\n#include \"harness.h\"\n#include \"harness_assert.h\"\n\n#include \"tbb/concurrent_queue.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tbb_thread.h\"\n\nusing namespace tbb::flow;\n\n//--------------------------------------------------------------------------------\n//--------------------------------TEST HELPERS------------------------------------\n//--------------------------------------------------------------------------------\n\ntemplate <typename ...A>\nstruct tuples_equal : std::false_type { };\n\ntemplate <typename ...A>\nstruct tuples_equal<std::tuple<A...>, std::tuple<>> : std::false_type { };\n\ntemplate <typename ...B>\nstruct tuples_equal<std::tuple<>, std::tuple<B...>> : std::false_type { };\n\ntemplate <>\nstruct tuples_equal<std::tuple<>, std::tuple<>> : std::true_type { };\n\ntemplate <typename A1, typename ...Aother, typename B1, typename ...Bother>\nstruct tuples_equal<std::tuple<A1, Aother...>, std::tuple<B1, Bother...>>\n{\n    static const bool value = std::is_same<A1, B1>::value && tuples_equal<std::tuple<Aother...>, std::tuple<Bother...>>::value;\n};\n\ntemplate<typename...A>\nstruct first_variadic {\n    template<typename...B>\n    static void is_equal_to_second()\n    {\n        ASSERT((tuples_equal< std::tuple<A...>, std::tuple<B...> >::value), \"Unexpected variadic types\");\n    }\n};\n\n//--------------------------------------------------------------------------------\n\ntemplate<typename T>\nclass factory_msg : public async_msg<T> {\npublic:\n    factory_msg() {}\n    factory_msg(const T& input_data) : m_data(input_data) {}\n\n    const T& data() const { return m_data; }\n    void update_data(T value) { m_data = value; }\nprivate:\n    T m_data;\n};\n\n//--------------------------------------------------------------------------------\n\nclass base_streaming_factory : NoCopy {\npublic:\n\n    typedef int device_type;\n    typedef int kernel_type;\n\n    template<typename T> using async_msg_type = factory_msg<T>;\n\n    base_streaming_factory() : devices_list(1) {}\n\n    std::vector<device_type> devices() {\n        return devices_list;\n    }\n\n    template <typename ...Args>\n    void send_result_forward(Args&... args) {\n        deviceResult = doDeviceWork();\n        send_result(args...);\n    }\n\n    void clear_factory() {\n        arguments_list.clear();\n    }\n\n    void process_arg_list() {}\n\n    template <typename T, typename ...Rest>\n    void process_arg_list(T& arg, Rest&... args) {\n        process_one_arg(arg);\n        process_arg_list(args...);\n    }\n\nprivate:\n\n    int doDeviceWork() {\n        int result = 0;\n        for (size_t i = 0; i < arguments_list.size(); i++)\n            result += arguments_list[i];\n        return result;\n    }\n\n    // Pass calculation result to the next node\n    template <typename ...Args>\n    void set_result(Args...) {}\n\n    template <typename T>\n    void set_result(async_msg_type<T>& msg) {\n        msg.set(deviceResult);\n    }\n\n    // Variadic functions for result processing\n    // and sending them to all async_msgs\n    void send_result() {}\n\n    template <typename T, typename ...Rest>\n    void send_result(T& arg, Rest&... args) {\n        set_result(arg);\n        send_result(args...);\n    }\n\n    // Retrieve values from async_msg objects\n    // and store them in vector\n    template <typename T>\n    void process_one_arg(async_msg_type<T>& msg) {\n        arguments_list.push_back(msg.data());\n    }\n\n    template <typename T>\n    void process_one_arg(const async_msg_type<T>& msg) {\n        arguments_list.push_back(msg.data());\n    }\n\n    std::vector<device_type> devices_list;\n    std::vector<int> arguments_list;\n\n    int deviceResult;\n};\n\ntemplate<typename ...ExpectedArgs>\nclass test_streaming_factory : public base_streaming_factory {\npublic:\n\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... /*args*/) {}\n\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... args) {\n        check_arguments(args...);\n        process_arg_list(args...);\n        send_result_forward(args...);\n        clear_factory();\n    }\n\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... args) {\n        check_arguments(args...);\n        fn();\n    }\n\n    template<typename ...Args>\n    void check_arguments(Args&... /*args*/) {\n        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();\n    }\n};\n\n//--------------------------------------------------------------------------------\n\ntemplate<typename Factory>\nclass device_selector {\npublic:\n    device_selector() : my_state(DEFAULT_INITIALIZED) {}\n    device_selector(const device_selector&) : my_state(COPY_INITIALIZED) {}\n    device_selector(device_selector&&) : my_state(COPY_INITIALIZED) {}\n    ~device_selector() { my_state = DELETED; }\n\n    typename Factory::device_type operator()(Factory &f) {\n        ASSERT(my_state == COPY_INITIALIZED, NULL);\n        ASSERT(!f.devices().empty(), NULL);\n        return *(f.devices().begin());\n    }\n\nprivate:\n    enum state {\n        DEFAULT_INITIALIZED,\n        COPY_INITIALIZED,\n        DELETED\n    };\n    state my_state;\n};\n\n//--------------------------------------------------------------------------------\n\nvoid TestWithoutSetArgs() {\n    graph g;\n\n    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n    // test finalize function\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    make_edge(output_port<0>(streaming_n), function_n);\n    expected_result = 30;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSetArgsOnly() {\n    graph g;\n\n    typedef test_streaming_factory< const factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n    streaming_n.set_args(100);\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSetPortRefOnly() {\n    graph g;\n\n    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n\n    streaming_n.set_args(port_ref<0, 1>());\n\n    // test finalize function\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    make_edge(output_port<0>(streaming_n), function_n);\n    expected_result = 30;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSetArgsAndPortRef1() {\n    graph g;\n\n    typedef test_streaming_factory< const factory_msg<int>, factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n    streaming_n.set_args(100, port_ref<0, 1>());\n\n    // test finalize function\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    make_edge(output_port<0>(streaming_n), function_n);\n    expected_result = 130;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSetArgsAndPortRef2() {\n    graph g;\n\n    typedef test_streaming_factory< const factory_msg<int>, factory_msg<int>,\n        const factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n    streaming_n.set_args(100, port_ref<0>(), 200, port_ref<1>());\n\n    // test finalize function\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    make_edge(output_port<0>(streaming_n), function_n);\n    expected_result = 330;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\ntemplate <typename ...ExpectedArgs>\nclass send_data_factory : public base_streaming_factory {\npublic:\n\n    send_data_factory() : send_data_counter(0) {}\n\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... /*args*/) {\n        switch (send_data_counter) {\n        case 0:\n            first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();\n            break;\n        case 1:\n            first_variadic< Args... >::template is_equal_to_second< factory_msg<int> >();\n            break;\n        case 2:\n            first_variadic< Args... >::template is_equal_to_second< factory_msg<int> >();\n            break;\n        default:\n            break;\n        }\n        send_data_counter++;\n    }\n\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... /*args*/) {\n        ASSERT(send_data_counter == 3, \"send_data() was called not enough times\");\n        send_data_counter = 0;\n    }\n\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {\n        fn();\n    }\n\nprivate:\n    int send_data_counter;\n};\n\nvoid TestSendData_withoutSetArgs() {\n    graph g;\n\n    typedef send_data_factory< tbb::flow::interface10::internal::port_ref_impl<0, 1> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    input_port<0>(streaming_n).try_put(10);\n    input_port<1>(streaming_n).try_put(20);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSendData_setArgsOnly() {\n    graph g;\n\n    typedef send_data_factory< factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    streaming_n.set_args(100);\n    input_port<0>(streaming_n).try_put(10);\n    input_port<1>(streaming_n).try_put(20);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSendData_portRefOnly() {\n    graph g;\n\n    typedef send_data_factory< tbb::flow::interface10::internal::port_ref_impl<0,1> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    streaming_n.set_args(port_ref<0,1>());\n    input_port<0>(streaming_n).try_put(10);\n    input_port<1>(streaming_n).try_put(20);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSendData_setArgsAndPortRef1() {\n    graph g;\n\n    typedef send_data_factory< factory_msg<int>, tbb::flow::interface10::internal::port_ref_impl<0, 1> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    streaming_n.set_args(100, port_ref<0,1>());\n    input_port<0>(streaming_n).try_put(10);\n    input_port<1>(streaming_n).try_put(20);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestSendData_setArgsAndPortRef2() {\n    graph g;\n\n    typedef send_data_factory< factory_msg<int>, tbb::flow::interface10::internal::port_ref_impl<0,0>,\n                               factory_msg<int>, tbb::flow::interface10::internal::port_ref_impl<1,1> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    streaming_n.set_args(100, port_ref<0>(), 200, port_ref<1>());\n    input_port<0>(streaming_n).try_put(10);\n    input_port<1>(streaming_n).try_put(20);\n    g.wait_for_all();\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestArgumentsPassing() {\n    REMARK(\"TestArgumentsPassing: \");\n    TestWithoutSetArgs();\n    TestSetArgsOnly();\n    TestSetPortRefOnly();\n    TestSetArgsAndPortRef1();\n    TestSetArgsAndPortRef2();\n\n    TestSendData_withoutSetArgs();\n    TestSendData_setArgsOnly();\n    TestSendData_portRefOnly();\n    TestSendData_setArgsAndPortRef1();\n    TestSendData_setArgsAndPortRef2();\n    REMARK(\"done\\n\");\n}\n\n//--------------------------------------------------------------------------------\n\ntemplate<typename... ExpectedArgs>\nclass range_streaming_factory : public base_streaming_factory {\npublic:\n\n    typedef std::array<int, 2> range_type;\n\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... /*args*/) {\n    }\n\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, const range_type& work_size, Args&... args) {\n        ASSERT(work_size[0] == 1024, \"Range was set incorrectly\");\n        ASSERT(work_size[1] == 720, \"Range was set incorrectly\");\n        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();\n        process_arg_list(args...);\n        send_result_forward(args...);\n        clear_factory();\n    }\n\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {\n        first_variadic< Args... >::template is_equal_to_second< ExpectedArgs... >();\n        fn();\n    }\n\n};\n\nvoid TestSetRange() {\n    REMARK(\"TestSetRange: \");\n\n    graph g;\n\n    typedef range_streaming_factory< const factory_msg<int>, factory_msg<int>,\n        const factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n));\n\n    const int first_arg = 10;\n    const int second_arg = 20;\n    std::tuple<int, int> args_tuple = std::make_tuple(first_arg, second_arg);\n\n    streaming_n.set_args(100, port_ref<0>(), 200, port_ref<1>());\n\n    // test version for GCC <= 4.7.2 (unsupported conversion from initializer_list to std::array)\n#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ <= 7 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2)))\n    std::array<int, 2> device_range;\n    device_range[0] = 1024;\n    device_range[1] = 720;\n    streaming_n.set_range(device_range);\n#else\n    std::array<int, 2> device_range = { 1024,720 };\n    streaming_n.set_range(device_range);\n#endif\n\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    make_edge(output_port<0>(streaming_n), function_n);\n    expected_result = 330;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\n//-------------------------------------------------------------------------------------------------------------------------------------------\n\ntemplate <typename T>\nclass user_async_msg : public tbb::flow::async_msg<T>\n{\npublic:\n    user_async_msg() {}\n    user_async_msg(T value) : m_data(value) {}\n    void finalize() const __TBB_override;\nprivate:\n    T m_data;\n};\n\nclass user_async_activity { // Async activity singleton\npublic:\n\n    static user_async_activity* instance() {\n        if (s_Activity == NULL) {\n            s_Activity = new user_async_activity();\n        }\n        return s_Activity;\n    }\n\n    static void destroy() {\n        ASSERT(s_Activity != NULL, \"destroyed twice\");\n        s_Activity->myThread.join();\n        delete s_Activity;\n        s_Activity = NULL;\n    }\n\n    template <typename FinalizeFn>\n    static void finish(FinalizeFn fn) {\n        ASSERT(user_async_activity::s_Activity != NULL, \"activity must be alive\");\n        user_async_activity::s_Activity->finishTaskQueue(fn);\n    }\n\n    static void finish(const user_async_msg<int>& msg) {\n        ASSERT(user_async_activity::s_Activity != NULL, \"activity must be alive\");\n        user_async_activity::s_Activity->finishTaskQueue(msg);\n    }\n\n    static int getResult() {\n        ASSERT(user_async_activity::s_Activity != NULL, \"activity must be alive\");\n        return user_async_activity::s_Activity->myQueueSum;\n    }\n\n    void addWork(int addValue, int timeout = 0) {\n        myQueue.push(my_task(addValue, timeout));\n    }\n\n    template <typename FinalizeFn>\n    void finishTaskQueue(FinalizeFn fn) {\n        myFinalizer = fn;\n        myQueue.push(my_task(0, 0, true));\n    }\n\n    void finishTaskQueue(const user_async_msg<int>& msg) {\n        myMsg = msg;\n        myQueue.push(my_task(0, 0, true));\n    }\n\nprivate:\n\n    struct my_task {\n        my_task(int addValue = 0, int timeout = 0, bool finishFlag = false)\n            : myAddValue(addValue), myTimeout(timeout), myFinishFlag(finishFlag) {}\n\n        int     myAddValue;\n        int     myTimeout;\n        bool    myFinishFlag;\n    };\n\n    static void threadFunc(user_async_activity* activity) {\n        for (;;) {\n            my_task work;\n            activity->myQueue.pop(work);\n            Harness::Sleep(work.myTimeout);\n            if (work.myFinishFlag) {\n                break;\n            }\n            activity->myQueueSum += work.myAddValue;\n        }\n\n        // Send result back to the graph\n        if (activity->myFinalizer) {\n            activity->myFinalizer();\n        }\n        activity->myMsg.set(activity->myQueueSum);\n\n    }\n\n    user_async_activity() : myQueueSum(0), myThread(&user_async_activity::threadFunc, this) {}\n\n    tbb::concurrent_bounded_queue<my_task>   myQueue;\n    int                                      myQueueSum;\n    user_async_msg<int>                      myMsg;\n    std::function<void(void)>                myFinalizer;\n    tbb::tbb_thread                          myThread;\n\n    static user_async_activity*              s_Activity;\n};\n\nuser_async_activity* user_async_activity::s_Activity = NULL;\n\ntemplate <typename T>\nvoid user_async_msg<T>::finalize() const {\n    user_async_activity::finish(*this);\n}\n\nclass data_streaming_factory {\npublic:\n\n    typedef int device_type;\n    typedef int kernel_type;\n\n    template<typename T> using async_msg_type = user_async_msg<T>;\n\n    data_streaming_factory() : devices_list(1) {}\n\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... /*args*/) {}\n\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& /*kernel*/, Args&... args) {\n        process_arg_list(args...);\n    }\n\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {\n        user_async_activity::finish(fn);\n    }\n\n    // Retrieve values from async_msg objects\n    // and store them in vector\n    void process_arg_list() {}\n\n    template <typename T, typename ...Rest>\n    void process_arg_list(T& arg, Rest&... args) {\n        process_one_arg(arg);\n        process_arg_list(args...);\n    }\n\n    template <typename T>\n    void process_one_arg(async_msg_type<T>& /*msg*/) {\n        user_async_activity::instance()->addWork(1, 10);\n    }\n\n    template <typename ...Args>\n    void process_one_arg(Args&... /*args*/) {}\n\n    std::vector<device_type> devices() {\n        return devices_list;\n    }\n\nprivate:\n    std::vector<device_type> devices_list;\n};\n\nvoid TestChaining() {\n    REMARK(\"TestChaining: \");\n\n    graph g;\n    typedef streaming_node< tuple<int>, queueing, data_streaming_factory > streaming_node_type;\n    typedef std::vector< streaming_node_type > nodes_vector_type;\n\n    data_streaming_factory factory;\n    device_selector<data_streaming_factory> device_selector;\n    data_streaming_factory::kernel_type kernel(0);\n\n    const int STREAMING_GRAPH_CHAIN_LENGTH = 1000;\n    nodes_vector_type nodes_vector;\n    for (int i = 0; i < STREAMING_GRAPH_CHAIN_LENGTH; i++) {\n        nodes_vector.emplace_back(g, kernel, device_selector, factory);\n    }\n\n    function_node< int, int > source_n(g, unlimited, [&g](const int& value) -> int {\n        return value;\n    });\n\n    function_node< int > destination_n(g, unlimited, [&g, &STREAMING_GRAPH_CHAIN_LENGTH](const int& result) {\n        ASSERT(result == STREAMING_GRAPH_CHAIN_LENGTH, \"calculation chain result is wrong\");\n    });\n\n    make_edge(source_n, input_port<0>(nodes_vector.front()));\n    for (size_t i = 0; i < nodes_vector.size() - 1; i++) {\n        make_edge(output_port<0>(nodes_vector[i]), input_port<0>(nodes_vector[i + 1]));\n        nodes_vector[i].set_args(port_ref<0>());\n    }\n    nodes_vector.back().set_args(port_ref<0>());\n    make_edge(output_port<0>(nodes_vector.back()), destination_n);\n\n    source_n.try_put(0);\n    g.wait_for_all();\n\n    REMARK(\"result = %d; expected = %d\\n\", user_async_activity::getResult(), STREAMING_GRAPH_CHAIN_LENGTH);\n    ASSERT(user_async_activity::getResult() == STREAMING_GRAPH_CHAIN_LENGTH, \"calculation chain result is wrong\");\n\n    user_async_activity::destroy();\n\n    REMARK(\"done\\n\");\n}\n\n//--------------------------------------------------------------------------------\n\nvoid TestCopyConstructor() {\n    REMARK(\"TestCopyConstructor: \");\n\n    graph g;\n\n    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    // Testing copy constructor\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n_copied(streaming_n);\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n_copied));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n_copied));\n    make_edge(output_port<0>(streaming_n_copied), function_n);\n\n    std::tuple<int, int> args_tuple = std::make_tuple(10, 20);\n    expected_result = 30;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\nvoid TestMoveConstructor() {\n    REMARK(\"TestMoveConstructor: \");\n\n    graph g;\n\n    typedef test_streaming_factory< factory_msg<int>, factory_msg<int> > device_factory;\n\n    device_factory factory;\n    device_selector<device_factory> device_selector;\n    device_factory::kernel_type kernel(0);\n\n    int expected_result;\n    split_node < tuple<int, int> > split_n(g);\n    function_node< int > function_n(g, unlimited, [&expected_result](const int& result) {\n        ASSERT(expected_result == result, \"Validation has failed\");\n    });\n\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n(g, kernel, device_selector, factory);\n\n    // Testing move constructor\n    streaming_node< tuple<int, int>, queueing, device_factory > streaming_n_moved(std::move(streaming_n));\n\n    make_edge(output_port<0>(split_n), input_port<0>(streaming_n_moved));\n    make_edge(output_port<1>(split_n), input_port<1>(streaming_n_moved));\n    make_edge(output_port<0>(streaming_n_moved), function_n);\n\n    std::tuple<int, int> args_tuple = std::make_tuple(10, 20);\n    expected_result = 30;\n    split_n.try_put(args_tuple);\n    g.wait_for_all();\n\n    REMARK(\"done\\n\");\n}\n\nvoid TestConstructor() {\n    TestCopyConstructor();\n    TestMoveConstructor();\n}\n\n//--------------------------------------------------------------------------------\n\nint TestMain() {\n    TestArgumentsPassing();\n    TestSetRange();\n    TestChaining();\n    TestConstructor();\n    return Harness::Done;\n}\n#else\n#define HARNESS_SKIP_TEST 1\n#include \"harness.h\"\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tagged_msg.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define _VARIADIC_MAX 10   // Visual Studio 2012\n#include \"harness.h\"\n#include \"tbb/atomic.h\"\n#include \"harness_checktype.h\"\n\n#include \"tbb/flow_graph.h\"\n#include <cstdio>\n#include <stdexcept>\n#include <vector>\n\n#if __TBB_GCC_STRICT_ALIASING_BROKEN\n    #pragma GCC diagnostic ignored \"-Wstrict-aliasing\"\n#endif\n\n// given a tuple, return the type of the element that has the maximum alignment requirement.\n// Given a tuple and that type, return the number of elements of the object with the max\n// alignment requirement that is at least as big as the largest object in the tuple.\n\nusing tbb::flow::tuple_element;\nusing tbb::flow::tuple_size;\nusing tbb::flow::cast_to;\nusing tbb::flow::is_a;\n\ntypedef int *int_ptr;\ntypedef char odd_array_type[15];\ntypedef char odder_array[17];\ntypedef check_type<int> counted_array_type[12];\ntypedef std::vector<double> d_vector;\ntypedef std::vector<int> i_vector;\ntypedef i_vector i_vector_array[2];\ntypedef tbb::flow::tagged_msg<size_t, int, char, double, odd_array_type, odder_array, d_vector, check_type<int>, counted_array_type, i_vector_array> tagged_msg_type;\n\n// test base of tagged_msg\nvoid TestWrapper() {\n    using tbb::flow::interface10::internal::Wrapper;\n    Wrapper<int> wi(42);\n    Wrapper<int> wic(23);\n\n    REMARK(\"Value of wic is %d\\n\", wic.value());\n\n    // pointer-type creation\n    int point_to_me = 23;\n    Wrapper<int_ptr> wip(&point_to_me);\n    ASSERT(*(wip.value()) == 23, \"Error in wip value\");\n\n    odd_array_type ww;\n    for(int ii = 0; ii < 15; ++ii) { ww[ii] = char('0' + ii); } ww[14] = 0;\n\n    Wrapper<odd_array_type> ci(ww);\n    ASSERT(!strncmp(ci.value(), ww, 14), \"odd_array_type ci not properly-constructed\" );\n\n    Wrapper<odd_array_type> ci2(ci);\n\n    ASSERT(!strncmp(ci2.value(), ww, 14), \"odd_array_type ci2 not properly-constructed\" );\n\n    d_vector di;\n    di.clear();\n    di.push_back(2.0);\n    Wrapper<d_vector> dvec(di);\n    ASSERT(dvec.value()[0] == 2.0, \"incorrect value in vector\");\n\n    // test array of non-PODs.\n    i_vector_array oia;\n    oia[0].clear();\n    oia[1].clear();\n    oia[0].push_back(3);\n    oia[1].push_back(2);\n    Wrapper<i_vector_array> ia(oia);\n    ASSERT((ia.value()[1])[0] == 2, \"integer vector array element[1] misbehaved\");\n    ASSERT((ia.value()[0])[0] == 3, \"integer vector array element[0] misbehaved\");\n    Wrapper<i_vector_array> iac(ia);\n    ASSERT((iac.value()[1])[0] == 2, \"integer vector array element[1] misbehaved\");\n    ASSERT((iac.value()[0])[0] == 3, \"integer vector array element[0] misbehaved\");\n\n    // counted_array\n    counted_array_type cat_orig;\n    for(int i = 0; i < 12; ++i) cat_orig[i] = i + 1;\n    Wrapper<counted_array_type> cat(cat_orig);\n    for(int j = 0; j < 12; ++j)\n        ASSERT(1 + j == cat.value()[j], \"Error in cat array\");\n\n    int i = wi.value();\n    ASSERT(i == 42, \"Assignment to i failed\");\n    ASSERT(wi.value() == 42, \"Assignment to wi failed\");\n    double d = wi.value();\n    ASSERT(d == 42, \"Implicit cast in assign to double failed\");\n    int_ptr ip = wip.value();\n    ASSERT(ip == &(point_to_me), \"Error in assignment of pointer\");\n}\n\nvoid RunTests() {\n    tagged_msg_type def;\n    tagged_msg_type i(1,3);\n    check_type<int>::check_type_counter = 0;\n    int z;\n    #if TBB_USE_EXCEPTIONS\n    try {\n        z = cast_to<int>(def); // disallowed (non-array returning int)\n        ASSERT(false, \"should not allow cast to int of non-array\");\n    }\n    catch(...) {\n        REMARK(\"cast of non-array to int disallowed (okay)\\n\");\n    }\n    #endif\n    z = cast_to<int>(i);\n    ASSERT(is_a<int>(i), \"wrong type for i ( == int)\");\n    ASSERT(!(is_a<double>(i)), \"Wrong type for i ( != double)\");\n    z = 5;\n    z = cast_to<int>(i);\n\n    const int &ref_i(cast_to<int>(i));\n    ASSERT(ref_i == 3, \"ref_i got wrong value\");\n    tagged_msg_type j(2,4);\n    i = j;\n    ASSERT(ref_i == 4, \"assign to i did not affect ref_i\");\n\n    ASSERT( z == 3, \"Error retrieving value from i\");\n\n    //updating and retrieving tags\n    ASSERT(j.tag() == 2, \"Error retrieving tag for j\");\n    j.set_tag(10);\n    ASSERT(j.tag() == 10, \"Error updating tag for j\");\n\n    tbb::flow::tagged_msg<char, int, char, double> k('a', 4);\n    k.set_tag('b');\n    ASSERT(k.tag() == 'b', \"Error updating char tag\");\n\n    tagged_msg_type double_tagged_msg(3, 8.0);\n    ASSERT(is_a<double>(double_tagged_msg), \"Wrong type for double_tagged_msg (== double)\");\n    ASSERT(!is_a<char>(double_tagged_msg), \"Wrong type for double_tagged_msg (!= char)\");\n    ASSERT(!is_a<int>(double_tagged_msg), \"Wrong type for double_tagged_msg (!= int)\");\n    tagged_msg_type copytype(double_tagged_msg);\n    ASSERT(is_a<double>(copytype), \"Wrong type for double_tagged_msg (== double)\");\n    ASSERT(!is_a<char>(copytype), \"Wrong type for double_tagged_msg (!= char)\");\n    ASSERT(!is_a<int>(copytype), \"Wrong type for double_tagged_msg (!= int)\");\n    tagged_msg_type default_tagged_msg;\n    ASSERT(!(is_a<double>(default_tagged_msg)), \"wrong type for default ( != double)\");\n    ASSERT(!(is_a<int>(default_tagged_msg)), \"wrong type for default ( != int)\");\n    ASSERT(!(is_a<bool>(default_tagged_msg)), \"wrong type for default ( != bool)\");\n    check_type<int> c;\n    ASSERT(check_type<int>::check_type_counter == 1, \"Incorrect number of check_type<int>s created\");\n    tagged_msg_type cnt_type(4, c);\n    ASSERT(check_type<int>::check_type_counter == 2, \"Incorrect number of check_type<int>s created\");\n    ASSERT(is_a<check_type<int> >(cnt_type), \"Incorrect type for cnt_type\");\n    cnt_type = default_tagged_msg;\n    ASSERT(check_type<int>::check_type_counter == 1, \"Incorrect number of check_type<int>s after reassignment\");\n    ASSERT(cnt_type.is_default_constructed(), \"Assigned check_type<int>s is not default-constructed\");\n    // having problem with init on gcc 3.4.6 (fxeolin16)  constructor for elements of array not called\n    // for this version.\n    // counted_array_type counted_array;\n    check_type<int> counted_array[12];  // this is okay\n    ASSERT(check_type<int>::check_type_counter == 13, \"Incorrect number of check_type<int>s after counted_array construction\");\n    tagged_msg_type counted_array_tagged_msg(5, counted_array);\n    // the is_a<>() should return exact type matches.\n    ASSERT(!is_a<check_type<int> *>(counted_array_tagged_msg), \"Test of is_a for counted_array_tagged_msg fails\");\n    #if TBB_USE_EXCEPTIONS\n    try {\n        int *iip = cast_to<int *>(counted_array_tagged_msg);\n        ASSERT(false, \"did not throw on invalid cast\");\n        *iip = 2;  // avoids \"ipp set but not used\" warning\n    }\n    catch(std::runtime_error &re) {\n        REMARK(\"attempt to cast to invalid type caught %s\\n\", re.what());\n    }\n    ASSERT(is_a<counted_array_type>(counted_array_tagged_msg), \"testing\");\n    const check_type<int> *ctip = cast_to<counted_array_type>(counted_array_tagged_msg);\n\n    ASSERT((int)(*ctip) == 0, \"ctip incorrect\");\n\n    ASSERT(check_type<int>::check_type_counter == 25, \"Incorrect number of check_type<int>s after counted_array_tagged_msg construction\");\n    counted_array_tagged_msg = default_tagged_msg;\n    ASSERT(check_type<int>::check_type_counter == 13, \"Incorrect number of check_type<int>s after counted_array_tagged_msg destruction\");\n    ASSERT(counted_array_tagged_msg.is_default_constructed(), \"Assigned counted_array_type is not default-constructed\");\n\n    default_tagged_msg = double_tagged_msg;\n    const double my_dval = cast_to<double>(default_tagged_msg);\n    ASSERT(my_dval == 8.0, \"did not retrieve correct value from assigned default_tagged_msg\");\n\n    {\n        odd_array_type my_b;\n        for(size_t ii=0; ii < 14;++ii) {\n            my_b[ii] = (char)('0' + ii);\n        }\n        my_b[14] = 0;\n        {\n            tagged_msg_type odd_array_tagged_msg(6, my_b);\n            const char *my_copy = cast_to<odd_array_type>(odd_array_tagged_msg);\n            ASSERT(!strncmp(my_b, my_copy, 14), \"copied char array not correct value\");\n            default_tagged_msg = odd_array_tagged_msg;\n            try {\n                const char *my_copy2 = cast_to<odd_array_type>(default_tagged_msg);\n                ASSERT(!strncmp(my_b, my_copy2, 14), \"char array from default tagged_msg assign not correct value\");\n            }\n            catch(...) {\n                ASSERT(false, \"Bad cast\");\n            }\n        }\n    }\n\n    ASSERT(!is_a<double>(i), \"bad type for i\");\n    try {\n        double y = cast_to<double>(i);\n        // use '&' to force eval of RHS (fixes \"initialized but not referenced\" vs2012 warnings)\n        ASSERT(false & (0 != y), \"Error: cast to type in tuple did not get exception\");\n    }\n    catch(std::runtime_error &bc) {\n        ASSERT(0 == strcmp(bc.what(), \"Illegal tagged_msg cast\"), \"Incorrect std:runtime_error\");\n    }\n    catch(...) {\n        ASSERT(false & cast_to<int>(i), \"Error: improper exception thrown\");\n    }\n\n    try {\n        int *ip = cast_to<int *>(i);\n        ASSERT(false & (NULL!=ip), \"Error: non-array cast to pointer type.\");\n    }\n    catch(std::runtime_error &bc) {\n        ASSERT(0 == strcmp(bc.what(), \"Illegal tagged_msg cast\"), \"Incorrect std:runtime_error\");\n    }\n    catch(...) {\n        ASSERT(false, \"did not get runtime_error exception in casting non-array to pointer\");\n    }\n\n    try {\n        bool b = cast_to<bool>(i);\n        ASSERT(false & b, \"Error: cast against type did not get exception\");\n    }\n    catch(std::runtime_error &bc) {\n        ASSERT(0 == strcmp(bc.what(), \"Illegal tagged_msg cast\"), \"Incorrect std:runtime_error\");\n    }\n    catch(...) {\n        ASSERT(false, \"did not get runtime_error exception casting to disparate types\");\n    }\n    #endif //TBB_USE_EXCEPTIONS\n}\n\nint TestMain() {\n    TestWrapper();\n    ASSERT(check_type<int>::check_type_counter == 0, \"After TestWrapper return not all check_type<int>s were destroyed\");\n    RunTests();\n    ASSERT(check_type<int>::check_type_counter == 0, \"After RunTests return not all check_type<int>s were destroyed\");\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_task.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include <cstdlib>\n\n//------------------------------------------------------------------------\n// Test for task::spawn_children and task_list\n//------------------------------------------------------------------------\n\nclass UnboundedlyRecursiveOnUnboundedStealingTask : public tbb::task {\n    typedef UnboundedlyRecursiveOnUnboundedStealingTask this_type;\n\n    this_type *m_Parent;\n    const int m_Depth;\n    volatile bool m_GoAhead;\n\n    // Well, virtually unboundedly, for any practical purpose\n    static const int max_depth = 1000000;\n\npublic:\n    UnboundedlyRecursiveOnUnboundedStealingTask( this_type *parent_ = NULL, int depth_ = max_depth )\n        : m_Parent(parent_)\n        , m_Depth(depth_)\n        , m_GoAhead(true)\n    {}\n\n    tbb::task* execute() __TBB_override {\n        // Using large padding array speeds up reaching stealing limit\n        const int paddingSize = 16 * 1024;\n        volatile char padding[paddingSize];\n        if( !m_Parent || (m_Depth > 0 &&  m_Parent->m_GoAhead) ) {\n            if ( m_Parent ) {\n                // We are stolen, let our parent start waiting for us\n                m_Parent->m_GoAhead = false;\n            }\n            tbb::task &t = *new( allocate_child() ) this_type(this, m_Depth - 1);\n            set_ref_count( 2 );\n            spawn( t );\n            // Give a willing thief a chance to steal\n            for( int i = 0; i < 1000000 && m_GoAhead; ++i ) {\n                ++padding[i % paddingSize];\n                __TBB_Yield();\n            }\n            // If our child has not been stolen yet, then prohibit it siring ones\n            // of its own (when this thread executes it inside the next wait_for_all)\n            m_GoAhead = false;\n            wait_for_all();\n        }\n        return NULL;\n    }\n}; // UnboundedlyRecursiveOnUnboundedStealingTask\n\ntbb::atomic<int> Count;\n\nclass RecursiveTask: public tbb::task {\n    const int m_ChildCount;\n    const int m_Depth;\n    //! Spawn tasks in list.  Exact method depends upon m_Depth&bit_mask.\n    void SpawnList( tbb::task_list& list, int bit_mask ) {\n        if( m_Depth&bit_mask ) {\n            // Take address to check that signature of spawn(task_list&) is static.\n            void (*s)(tbb::task_list&) = &tbb::task::spawn;\n            (*s)(list);\n            ASSERT( list.empty(), NULL );\n            wait_for_all();\n        } else {\n            spawn_and_wait_for_all(list);\n            ASSERT( list.empty(), NULL );\n        }\n    }\npublic:\n    RecursiveTask( int child_count, int depth_ ) : m_ChildCount(child_count), m_Depth(depth_) {}\n    tbb::task* execute() __TBB_override {\n        ++Count;\n        if( m_Depth>0 ) {\n            tbb::task_list list;\n            ASSERT( list.empty(), NULL );\n            for( int k=0; k<m_ChildCount; ++k ) {\n                list.push_back( *new( allocate_child() ) RecursiveTask(m_ChildCount/2,m_Depth-1 ) );\n                ASSERT( !list.empty(), NULL );\n            }\n            set_ref_count( m_ChildCount+1 );\n            SpawnList( list, 1 );\n            // Now try reusing this as the parent.\n            set_ref_count(2);\n            list.push_back( *new ( allocate_child() ) tbb::empty_task() );\n            SpawnList( list, 2 );\n        }\n        return NULL;\n    }\n};\n\n//! Compute what Count should be after RecursiveTask(child_count,depth) runs.\nstatic int Expected( int child_count, int depth ) {\n    return depth<=0 ? 1 : 1+child_count*Expected(child_count/2,depth-1);\n}\n\nvoid TestStealLimit( int nthread ) {\n#if __TBB_DEFINE_MIC\n    REMARK( \"skipping steal limiting heuristics for %d threads\\n\", nthread );\n#else// !_TBB_DEFINE_MIC\n    REMARK( \"testing steal limiting heuristics for %d threads\\n\", nthread );\n    tbb::task_scheduler_init init(nthread);\n    tbb::task &t = *new( tbb::task::allocate_root() ) UnboundedlyRecursiveOnUnboundedStealingTask();\n    tbb::task::spawn_root_and_wait(t);\n#endif// _TBB_DEFINE_MIC\n}\n\n//! Test task::spawn( task_list& )\nvoid TestSpawnChildren( int nthread ) {\n    REMARK(\"testing task::spawn(task_list&) for %d threads\\n\",nthread);\n    tbb::task_scheduler_init init(nthread);\n    for( int j=0; j<50; ++j ) {\n        Count = 0;\n        RecursiveTask& p = *new( tbb::task::allocate_root() ) RecursiveTask(j,4);\n        tbb::task::spawn_root_and_wait(p);\n        int expected = Expected(j,4);\n        ASSERT( Count==expected, NULL );\n    }\n}\n\n//! Test task::spawn_root_and_wait( task_list& )\nvoid TestSpawnRootList( int nthread ) {\n    REMARK(\"testing task::spawn_root_and_wait(task_list&) for %d threads\\n\",nthread);\n    tbb::task_scheduler_init init(nthread);\n    for( int j=0; j<5; ++j )\n        for( int k=0; k<10; ++k ) {\n            Count = 0;\n            tbb::task_list list;\n            for( int i=0; i<k; ++i )\n                list.push_back( *new( tbb::task::allocate_root() ) RecursiveTask(j,4) );\n            tbb::task::spawn_root_and_wait(list);\n            int expected = k*Expected(j,4);\n            ASSERT( Count==expected, NULL );\n        }\n}\n\n//------------------------------------------------------------------------\n// Test for task::recycle_as_safe_continuation\n//------------------------------------------------------------------------\n\nvoid TestSafeContinuation( int nthread ) {\n    REMARK(\"testing task::recycle_as_safe_continuation for %d threads\\n\",nthread);\n    tbb::task_scheduler_init init(nthread);\n    for( int j=8; j<33; ++j ) {\n        TaskGenerator& p = *new( tbb::task::allocate_root() ) TaskGenerator(j,5);\n        tbb::task::spawn_root_and_wait(p);\n    }\n}\n\n//------------------------------------------------------------------------\n// Test affinity interface\n//------------------------------------------------------------------------\ntbb::atomic<int> TotalCount;\n\nstruct AffinityTask: public tbb::task {\n    const affinity_id expected_affinity_id;\n    bool noted;\n    /** Computing affinities is NOT supported by TBB, and may disappear in the future.\n        It is done here for sake of unit testing. */\n    AffinityTask( int expected_affinity_id_ ) :\n        expected_affinity_id(affinity_id(expected_affinity_id_)),\n        noted(false)\n    {\n        set_affinity(expected_affinity_id);\n        ASSERT( 0u-expected_affinity_id>0u, \"affinity_id not an unsigned integral type?\" );\n        ASSERT( affinity()==expected_affinity_id, NULL );\n    }\n    tbb::task* execute() __TBB_override {\n        ++TotalCount;\n        return NULL;\n    }\n    void note_affinity( affinity_id id ) __TBB_override {\n        // There is no guarantee in TBB that a task runs on its affinity thread.\n        // However, the current implementation does accidentally guarantee it\n        // under certain conditions, such as the conditions here.\n        // We exploit those conditions for sake of unit testing.\n        ASSERT( id!=expected_affinity_id, NULL );\n        ASSERT( !noted, \"note_affinity_id called twice!\" );\n        ASSERT ( &self() == (tbb::task*)this, \"Wrong innermost running task\" );\n        noted = true;\n    }\n};\n\n/** Note: This test assumes a lot about the internal implementation of affinity.\n    Do NOT use this as an example of good programming practice with TBB */\nvoid TestAffinity( int nthread ) {\n    TotalCount = 0;\n    int n = tbb::task_scheduler_init::default_num_threads();\n    if( n>nthread )\n        n = nthread;\n    tbb::task_scheduler_init init(n);\n    tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task::affinity_id affinity_id = t->affinity();\n    ASSERT( affinity_id==0, NULL );\n    // Set ref_count for n-1 children, plus 1 for the wait.\n    t->set_ref_count(n);\n    // Spawn n-1 affinitized children.\n    for( int i=1; i<n; ++i )\n        tbb::task::spawn( *new(t->allocate_child()) AffinityTask(i) );\n    if( n>1 ) {\n        // Keep master from stealing\n        while( TotalCount!=n-1 )\n            __TBB_Yield();\n    }\n    // Wait for the children\n    t->wait_for_all();\n    int k = 0;\n    GetTaskPtr(k)->destroy(*t);\n    ASSERT(k==1,NULL);\n}\n\nstruct NoteAffinityTask: public tbb::task {\n    bool noted;\n    NoteAffinityTask( int id ) : noted(false)\n    {\n        set_affinity(affinity_id(id));\n    }\n    ~NoteAffinityTask () {\n        ASSERT (noted, \"note_affinity has not been called\");\n    }\n    tbb::task* execute() __TBB_override {\n        return NULL;\n    }\n    void note_affinity( affinity_id /*id*/ ) __TBB_override {\n        noted = true;\n        ASSERT ( &self() == (tbb::task*)this, \"Wrong innermost running task\" );\n    }\n};\n\n// This test checks one of the paths inside the scheduler by affinitizing the child task\n// to non-existent thread so that it is proxied in the local task pool but not retrieved\n// by another thread.\n// If no workers requested, the extra slot #2 is allocated for a worker thread to serve\n// \"enqueued\" tasks. In this test, it is used only for the affinity purpose.\nvoid TestNoteAffinityContext() {\n    tbb::task_scheduler_init init(1);\n    tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;\n    t->set_ref_count(2);\n    // This master in the absence of workers will have an affinity id of 1.\n    // So use another number to make the task get proxied.\n    tbb::task::spawn( *new(t->allocate_child()) NoteAffinityTask(2) );\n    t->wait_for_all();\n    tbb::task::destroy(*t);\n}\n\n//------------------------------------------------------------------------\n// Test that recovery actions work correctly for task::allocate_* methods\n// when a task's constructor throws an exception.\n//------------------------------------------------------------------------\n\n#if TBB_USE_EXCEPTIONS\nstatic int TestUnconstructibleTaskCount;\n\nstruct ConstructionFailure {\n};\n\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Suppress pointless \"unreachable code\" warning.\n    #pragma warning (push)\n    #pragma warning (disable: 4702)\n#endif\n\n//! Task that cannot be constructed.\ntemplate<size_t N>\nstruct UnconstructibleTask: public tbb::empty_task {\n    char space[N];\n    UnconstructibleTask() {\n        throw ConstructionFailure();\n    }\n};\n\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    #pragma warning (pop)\n#endif\n\n#define TRY_BAD_CONSTRUCTION(x)                  \\\n    {                                            \\\n        try {                                    \\\n            new(x) UnconstructibleTask<N>;       \\\n        } catch( const ConstructionFailure& ) {                                                    \\\n            ASSERT( parent()==original_parent, NULL ); \\\n            ASSERT( ref_count()==original_ref_count, \"incorrectly changed ref_count\" );\\\n            ++TestUnconstructibleTaskCount;      \\\n        }                                        \\\n    }\n\ntemplate<size_t N>\nstruct RootTaskForTestUnconstructibleTask: public tbb::task {\n    tbb::task* execute() __TBB_override {\n        tbb::task* original_parent = parent();\n        ASSERT( original_parent!=NULL, NULL );\n        int original_ref_count = ref_count();\n        TRY_BAD_CONSTRUCTION( allocate_root() );\n        TRY_BAD_CONSTRUCTION( allocate_child() );\n        TRY_BAD_CONSTRUCTION( allocate_continuation() );\n        TRY_BAD_CONSTRUCTION( allocate_additional_child_of(*this) );\n        return NULL;\n    }\n};\n\ntemplate<size_t N>\nvoid TestUnconstructibleTask() {\n    TestUnconstructibleTaskCount = 0;\n    tbb::task_scheduler_init init;\n    tbb::task* t = new( tbb::task::allocate_root() ) RootTaskForTestUnconstructibleTask<N>;\n    tbb::task::spawn_root_and_wait(*t);\n    ASSERT( TestUnconstructibleTaskCount==4, NULL );\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n//------------------------------------------------------------------------\n// Test for alignment problems with task objects.\n//------------------------------------------------------------------------\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for pointless warning \"structure was padded due to __declspec(align())\n    #pragma warning (push)\n    #pragma warning (disable: 4324)\n#endif\n\n//! Task with members of type T.\n/** The task recursively creates tasks. */\ntemplate<typename T>\nclass TaskWithMember: public tbb::task {\n    T x;\n    T y;\n    unsigned char count;\n    tbb::task* execute() __TBB_override {\n        x = y;\n        if( count>0 ) {\n            set_ref_count(2);\n            tbb::task* t = new( allocate_child() ) TaskWithMember<T>(count-1);\n            spawn_and_wait_for_all(*t);\n        }\n        return NULL;\n    }\npublic:\n    TaskWithMember( unsigned char n ) : count(n) {}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif\n\ntemplate<typename T>\nvoid TestAlignmentOfOneClass() {\n    typedef TaskWithMember<T> task_type;\n    tbb::task* t = new( tbb::task::allocate_root() ) task_type(10);\n    tbb::task::spawn_root_and_wait(*t);\n}\n\n#include \"harness_m128.h\"\n\nvoid TestAlignment() {\n    REMARK(\"testing alignment\\n\");\n    tbb::task_scheduler_init init;\n    // Try types that have variety of alignments\n    TestAlignmentOfOneClass<char>();\n    TestAlignmentOfOneClass<short>();\n    TestAlignmentOfOneClass<int>();\n    TestAlignmentOfOneClass<long>();\n    TestAlignmentOfOneClass<void*>();\n    TestAlignmentOfOneClass<float>();\n    TestAlignmentOfOneClass<double>();\n#if HAVE_m128\n    TestAlignmentOfOneClass<__m128>();\n#endif\n#if HAVE_m256\n    if (have_AVX()) TestAlignmentOfOneClass<__m256>();\n#endif\n}\n\n//------------------------------------------------------------------------\n// Test for recursing on left while spawning on right\n//------------------------------------------------------------------------\n\nint Fib( int n );\n\nstruct RightFibTask: public tbb::task {\n    int* y;\n    const int n;\n    RightFibTask( int* y_, int n_ ) : y(y_), n(n_) {}\n    task* execute() __TBB_override {\n        *y = Fib(n-1);\n        return 0;\n    }\n};\n\nint Fib( int n ) {\n    if( n<2 ) {\n        return n;\n    } else {\n        // y actually does not need to be initialized.  It is initialized solely to suppress\n        // a gratuitous warning \"potentially uninitialized local variable\".\n        int y=-1;\n        tbb::task* root_task = new( tbb::task::allocate_root() ) tbb::empty_task;\n        root_task->set_ref_count(2);\n        tbb::task::spawn( *new( root_task->allocate_child() ) RightFibTask(&y,n) );\n        int x = Fib(n-2);\n        root_task->wait_for_all();\n        tbb::task::destroy(*root_task);\n        return y+x;\n    }\n}\n\nvoid TestLeftRecursion( int p ) {\n    REMARK(\"testing non-spawned roots for %d threads\\n\",p);\n    tbb::task_scheduler_init init(p);\n    int sum = 0;\n    for( int i=0; i<100; ++i )\n        sum +=Fib(10);\n    ASSERT( sum==5500, NULL );\n}\n\n//------------------------------------------------------------------------\n// Test for computing with DAG of tasks.\n//------------------------------------------------------------------------\n\nclass DagTask: public tbb::task {\n    typedef unsigned long long number_t;\n    const int i, j;\n    number_t sum_from_left, sum_from_above;\n    void check_sum( number_t sum ) {\n        number_t expected_sum = 1;\n        for( int k=i+1; k<=i+j; ++k )\n            expected_sum *= k;\n        for( int k=1; k<=j; ++k )\n            expected_sum /= k;\n        ASSERT(sum==expected_sum, NULL);\n    }\npublic:\n    DagTask *successor_to_below, *successor_to_right;\n    DagTask( int i_, int j_ ) : i(i_), j(j_), sum_from_left(0), sum_from_above(0) {}\n    task* execute() __TBB_override {\n        ASSERT( ref_count()==0, NULL );\n        number_t sum = i==0 && j==0 ? 1 : sum_from_left+sum_from_above;\n        check_sum(sum);\n        ++execution_count;\n        if( DagTask* t = successor_to_right ) {\n            t->sum_from_left = sum;\n            if( t->decrement_ref_count()==0 )\n                // Test using spawn to evaluate DAG\n                spawn( *t );\n        }\n        if( DagTask* t = successor_to_below ) {\n            t->sum_from_above = sum;\n            if( t->add_ref_count(-1)==0 )\n                // Test using bypass to evaluate DAG\n                return t;\n        }\n        return NULL;\n    }\n    ~DagTask() {++destruction_count;}\n    static tbb::atomic<int> execution_count;\n    static tbb::atomic<int> destruction_count;\n};\n\ntbb::atomic<int> DagTask::execution_count;\ntbb::atomic<int> DagTask::destruction_count;\n\nvoid TestDag( int p ) {\n    REMARK(\"testing evaluation of DAG for %d threads\\n\",p);\n    tbb::task_scheduler_init init(p);\n    DagTask::execution_count=0;\n    DagTask::destruction_count=0;\n    const int n = 10;\n    DagTask* a[n][n];\n    for( int i=0; i<n; ++i )\n        for( int j=0; j<n; ++j )\n            a[i][j] = new( tbb::task::allocate_root() ) DagTask(i,j);\n    for( int i=0; i<n; ++i )\n        for( int j=0; j<n; ++j ) {\n            a[i][j]->successor_to_below = i+1<n ? a[i+1][j] : NULL;\n            a[i][j]->successor_to_right = j+1<n ? a[i][j+1] : NULL;\n            a[i][j]->set_ref_count((i>0)+(j>0));\n        }\n    a[n-1][n-1]->increment_ref_count();\n    a[n-1][n-1]->spawn_and_wait_for_all(*a[0][0]);\n    ASSERT( DagTask::execution_count == n*n - 1, NULL );\n    tbb::task::destroy(*a[n-1][n-1]);\n    ASSERT( DagTask::destruction_count > n*n - p, NULL );\n    while ( DagTask::destruction_count != n*n )\n        __TBB_Yield();\n}\n\n#include \"harness_barrier.h\"\n\nclass RelaxedOwnershipTask: public tbb::task {\n    tbb::task &m_taskToSpawn,\n              &m_taskToDestroy,\n              &m_taskToExecute;\n    static Harness::SpinBarrier m_barrier;\n\n    tbb::task* execute () __TBB_override {\n        tbb::task &p = *parent();\n        tbb::task &r = *new( allocate_root() ) tbb::empty_task;\n        r.set_ref_count( 1 );\n        m_barrier.wait();\n        p.spawn( *new(p.allocate_child()) tbb::empty_task );\n        p.spawn( *new(task::allocate_additional_child_of(p)) tbb::empty_task );\n        p.spawn( m_taskToSpawn );\n        p.destroy( m_taskToDestroy );\n        r.spawn_and_wait_for_all( m_taskToExecute );\n        p.destroy( r );\n        return NULL;\n    }\npublic:\n    RelaxedOwnershipTask ( tbb::task& toSpawn, tbb::task& toDestroy, tbb::task& toExecute )\n        : m_taskToSpawn(toSpawn)\n        , m_taskToDestroy(toDestroy)\n        , m_taskToExecute(toExecute)\n    {}\n    static void SetBarrier ( int numThreads ) { m_barrier.initialize( numThreads ); }\n};\n\nHarness::SpinBarrier RelaxedOwnershipTask::m_barrier;\n\nvoid TestRelaxedOwnership( int p ) {\n    if ( p < 2 )\n        return;\n\n    if( unsigned(p)>tbb::tbb_thread::hardware_concurrency() )\n        return;\n\n    REMARK(\"testing tasks exercising relaxed ownership freedom for %d threads\\n\", p);\n    tbb::task_scheduler_init init(p);\n    RelaxedOwnershipTask::SetBarrier(p);\n    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task_list tl;\n    for ( int i = 0; i < p; ++i ) {\n        tbb::task &tS = *new( r.allocate_child() ) tbb::empty_task,\n                  &tD = *new( r.allocate_child() ) tbb::empty_task,\n                  &tE = *new( r.allocate_child() ) tbb::empty_task;\n        tl.push_back( *new( r.allocate_child() ) RelaxedOwnershipTask(tS, tD, tE) );\n    }\n    r.set_ref_count( 5 * p + 1 );\n    int k=0;\n    GetTaskPtr(k)->spawn( tl );\n    ASSERT(k==1,NULL);\n    r.wait_for_all();\n    r.destroy( r );\n}\n\n//------------------------------------------------------------------------\n// Test for running TBB scheduler on user-created thread.\n//------------------------------------------------------------------------\n\nvoid RunSchedulerInstanceOnUserThread( int n_child ) {\n    tbb::task* e = new( tbb::task::allocate_root() ) tbb::empty_task;\n    e->set_ref_count(1+n_child);\n    for( int i=0; i<n_child; ++i )\n        tbb::task::spawn( *new(e->allocate_child()) tbb::empty_task );\n    e->wait_for_all();\n    e->destroy(*e);\n}\n\nvoid TestUserThread( int p ) {\n    tbb::task_scheduler_init init(p);\n    // Try with both 0 and 1 children.  Only the latter scenario permits stealing.\n    for( int n_child=0; n_child<2; ++n_child ) {\n        tbb::tbb_thread t( RunSchedulerInstanceOnUserThread, n_child );\n        t.join();\n    }\n}\n\nclass TaskWithChildToSteal : public tbb::task {\n    const int m_Depth;\n    volatile bool m_GoAhead;\n\npublic:\n    TaskWithChildToSteal( int depth_ )\n        : m_Depth(depth_)\n        , m_GoAhead(false)\n    {}\n\n    tbb::task* execute() __TBB_override {\n        m_GoAhead = true;\n        if ( m_Depth > 0 ) {\n            TaskWithChildToSteal &t = *new( allocate_child() ) TaskWithChildToSteal(m_Depth - 1);\n            t.SpawnAndWaitOnParent();\n        }\n        else\n            Harness::Sleep(50); // The last task in chain sleeps for 50 ms\n        return NULL;\n    }\n\n    void SpawnAndWaitOnParent() {\n        parent()->set_ref_count( 2 );\n        parent()->spawn( *this );\n        while (!this->m_GoAhead )\n            __TBB_Yield();\n        parent()->wait_for_all();\n    }\n}; // TaskWithChildToSteal\n\n// Success criterion of this test is not hanging\nvoid TestDispatchLoopResponsiveness() {\n    REMARK(\"testing that dispatch loops do not go into eternal sleep when all remaining children are stolen\\n\");\n    // Recursion depth values test the following sorts of dispatch loops\n    // 0 - master's outermost\n    // 1 - worker's nested\n    // 2 - master's nested\n    tbb::task_scheduler_init init(2);\n    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    for ( int depth = 0; depth < 3; ++depth ) {\n        TaskWithChildToSteal &t = *new( r.allocate_child() ) TaskWithChildToSteal(depth);\n        t.SpawnAndWaitOnParent();\n    }\n    r.destroy(r);\n}\n\nvoid TestWaitDiscriminativenessWithoutStealing() {\n    REMARK( \"testing that task::wait_for_all is specific to the root it is called on (no workers)\\n\" );\n    // The test relies on the strict LIFO scheduling order in the absence of workers\n    tbb::task_scheduler_init init(1);\n    tbb::task &r1 = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task &r2 = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    const int NumChildren = 10;\n    r1.set_ref_count( NumChildren + 1 );\n    r2.set_ref_count( NumChildren + 1 );\n    for( int i=0; i < NumChildren; ++i ) {\n        tbb::empty_task &t1 = *new( r1.allocate_child() ) tbb::empty_task;\n        tbb::empty_task &t2 = *new( r2.allocate_child() ) tbb::empty_task;\n        tbb::task::spawn(t1);\n        tbb::task::spawn(t2);\n    }\n    r2.wait_for_all();\n    ASSERT( r2.ref_count() <= 1, \"Not all children of r2 executed\" );\n    ASSERT( r1.ref_count() > 1, \"All children of r1 prematurely executed\" );\n    r1.wait_for_all();\n    ASSERT( r1.ref_count() <= 1, \"Not all children of r1 executed\" );\n    r1.destroy(r1);\n    r2.destroy(r2);\n}\n\n\nusing tbb::internal::spin_wait_until_eq;\n\n//! Deterministic emulation of a long running task\nclass LongRunningTask : public tbb::task {\n    volatile bool& m_CanProceed;\n\n    tbb::task* execute() __TBB_override {\n        spin_wait_until_eq( m_CanProceed, true );\n        return NULL;\n    }\npublic:\n    LongRunningTask ( volatile bool& canProceed ) : m_CanProceed(canProceed) {}\n};\n\nvoid TestWaitDiscriminativenessWithStealing() {\n    if( tbb::tbb_thread::hardware_concurrency() < 2 )\n        return;\n    REMARK( \"testing that task::wait_for_all is specific to the root it is called on (one worker)\\n\" );\n    volatile bool canProceed = false;\n    tbb::task_scheduler_init init(2);\n    tbb::task &r1 = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task &r2 = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    r1.set_ref_count( 2 );\n    r2.set_ref_count( 2 );\n    tbb::task& t1 = *new( r1.allocate_child() ) tbb::empty_task;\n    tbb::task& t2 = *new( r2.allocate_child() ) LongRunningTask(canProceed);\n    tbb::task::spawn(t2);\n    tbb::task::spawn(t1);\n    r1.wait_for_all();\n    ASSERT( r1.ref_count() <= 1, \"Not all children of r1 executed\" );\n    ASSERT( r2.ref_count() == 2, \"All children of r2 prematurely executed\" );\n    canProceed = true;\n    r2.wait_for_all();\n    ASSERT( r2.ref_count() <= 1, \"Not all children of r2 executed\" );\n    r1.destroy(r1);\n    r2.destroy(r2);\n}\n\nstruct MasterBody : NoAssign, Harness::NoAfterlife {\n    static Harness::SpinBarrier my_barrier;\n\n    class BarrenButLongTask : public tbb::task {\n        volatile bool& m_Started;\n        volatile bool& m_CanProceed;\n\n        tbb::task* execute() __TBB_override {\n            m_Started = true;\n            spin_wait_until_eq( m_CanProceed, true );\n            volatile int k = 0;\n            for ( int i = 0; i < 1000000; ++i ) ++k;\n            return NULL;\n        }\n    public:\n        BarrenButLongTask ( volatile bool& started, volatile bool& can_proceed )\n            : m_Started(started), m_CanProceed(can_proceed)\n        {}\n    };\n\n    class BinaryRecursiveTask : public tbb::task {\n        int m_Depth;\n\n        tbb::task* execute() __TBB_override {\n            if( !m_Depth )\n                return NULL;\n            set_ref_count(3);\n            spawn( *new( allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );\n            spawn( *new( allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );\n            wait_for_all();\n            return NULL;\n        }\n\n        void note_affinity( affinity_id ) __TBB_override {\n            ASSERT( false, \"These tasks cannot be stolen\" );\n        }\n    public:\n        BinaryRecursiveTask ( int depth_ ) : m_Depth(depth_) {}\n    };\n\n    void operator() ( int id ) const {\n        if ( id ) {\n            tbb::task_scheduler_init init(2);\n            volatile bool child_started = false,\n                          can_proceed = false;\n            tbb::task& r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n            r.set_ref_count(2);\n            r.spawn( *new(r.allocate_child()) BarrenButLongTask(child_started, can_proceed) );\n            spin_wait_until_eq( child_started, true );\n            my_barrier.wait();\n            can_proceed = true;\n            r.wait_for_all();\n            r.destroy(r);\n        }\n        else {\n            my_barrier.wait();\n            tbb::task_scheduler_init init(1);\n            Count = 0;\n            int depth = 16;\n            BinaryRecursiveTask& r = *new( tbb::task::allocate_root() ) BinaryRecursiveTask(depth);\n            tbb::task::spawn_root_and_wait(r);\n        }\n    }\npublic:\n    MasterBody ( int num_masters ) { my_barrier.initialize(num_masters); }\n};\n\nHarness::SpinBarrier MasterBody::my_barrier;\n\n/** Ensures that tasks spawned by a master thread or one of the workers servicing\n    it cannot be stolen by another master thread. **/\nvoid TestMastersIsolation ( int p ) {\n    // The test requires at least 3-way parallelism to work correctly\n    if ( p > 2 && tbb::task_scheduler_init::default_num_threads() >= p ) {\n        tbb::task_scheduler_init init(p);\n        NativeParallelFor( p, MasterBody(p) );\n    }\n}\n\nstruct waitable_task : tbb::task {\n    tbb::task* execute() __TBB_override {\n        recycle_as_safe_continuation(); // do not destroy the task after execution\n        set_parent(this);               // decrement its own ref_count after completion\n        __TBB_Yield();\n        return NULL;\n    }\n};\nvoid TestWaitableTask() {\n    waitable_task &wt = *new( tbb::task::allocate_root() ) waitable_task;\n    for( int i = 0; i < 100000; i++ ) {\n        wt.set_ref_count(2);            // prepare for waiting on it\n        wt.spawn(wt);\n        if( i&1 ) __TBB_Yield();\n        wt.wait_for_all();\n    }\n    wt.set_parent(NULL);                // prevents assertions and atomics in task::destroy\n    tbb::task::destroy(wt);\n}\n\nint TestMain () {\n#if TBB_USE_EXCEPTIONS\n    TestUnconstructibleTask<1>();\n    TestUnconstructibleTask<10000>();\n#endif\n    TestAlignment();\n    TestNoteAffinityContext();\n    TestDispatchLoopResponsiveness();\n    TestWaitDiscriminativenessWithoutStealing();\n    TestWaitDiscriminativenessWithStealing();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        TestSpawnChildren( p );\n        TestSpawnRootList( p );\n        TestSafeContinuation( p );\n        TestLeftRecursion( p );\n        TestDag( p );\n        TestAffinity( p );\n        TestUserThread( p );\n        TestStealLimit( p );\n        TestRelaxedOwnership( p );\n        TestMastersIsolation( p );\n    }\n    TestWaitableTask();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_arena.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_LOCAL_OBSERVER 1\n#define __TBB_EXTRA_DEBUG 1\n\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\n#include \"harness_fp.h\"\n\n#if __TBB_TASK_ISOLATION\n// Whitebox stuff for TestIsolatedExecuteNS::ContinuationTest().\n// TODO: Consider better approach instead of the whitebox approach.\n#define private public\n#include \"tbb/task.h\"\n#undef private\n#endif /* __TBB_TASK_ISOLATION */\n\n#include \"tbb/task_arena.h\"\n#include \"tbb/task_scheduler_observer.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\n#include \"harness_assert.h\"\n#include \"harness.h\"\n#include \"harness_barrier.h\"\n\n#if _MSC_VER\n// plays around __TBB_NO_IMPLICIT_LINKAGE. __TBB_LIB_NAME should be defined (in makefiles)\n#pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n#endif\n\n//--------------------------------------------------//\n// Test that task_arena::initialize and task_arena::terminate work when doing nothing else.\n/* maxthread is treated as the biggest possible concurrency level. */\nvoid InitializeAndTerminate( int maxthread ) {\n    __TBB_TRY {\n        for( int i=0; i<200; ++i ) {\n            switch( i&3 ) {\n                // Arena is created inactive, initialization is always explicit. Lazy initialization is covered by other test functions.\n                // Explicit initialization can either keep the original values or change those.\n                // Arena termination can be explicit or implicit (in the destructor).\n                // TODO: extend with concurrency level checks if such a method is added.\n                default: {\n                    tbb::task_arena arena( std::rand() % maxthread + 1 );\n                    ASSERT(!arena.is_active(), \"arena should not be active until initialized\");\n                    arena.initialize();\n                    ASSERT(arena.is_active(), NULL);\n                    arena.terminate();\n                    ASSERT(!arena.is_active(), \"arena should not be active; it was terminated\");\n                    break;\n                }\n                case 0: {\n                    tbb::task_arena arena( 1 );\n                    ASSERT(!arena.is_active(), \"arena should not be active until initialized\");\n                    arena.initialize( std::rand() % maxthread + 1 ); // change the parameters\n                    ASSERT(arena.is_active(), NULL);\n                    break;\n                }\n                case 1: {\n                    tbb::task_arena arena( tbb::task_arena::automatic );\n                    ASSERT(!arena.is_active(), NULL);\n                    arena.initialize();\n                    ASSERT(arena.is_active(), NULL);\n                    break;\n                }\n                case 2: {\n                    tbb::task_arena arena;\n                    ASSERT(!arena.is_active(), \"arena should not be active until initialized\");\n                    arena.initialize( std::rand() % maxthread + 1 );\n                    ASSERT(arena.is_active(), NULL);\n                    arena.terminate();\n                    ASSERT(!arena.is_active(), \"arena should not be active; it was terminated\");\n                    break;\n                }\n            }\n        }\n    } __TBB_CATCH( std::runtime_error& error ) {\n#if TBB_USE_EXCEPTIONS\n        REPORT(\"ERROR: %s\\n\", error.what() );\n#endif /* TBB_USE_EXCEPTIONS */\n    }\n}\n\n//--------------------------------------------------//\n// Definitions used in more than one test\ntypedef tbb::blocked_range<int> Range;\n\n// slot_id value: -1 is reserved by current_slot(), -2 is set in on_scheduler_exit() below\nstatic tbb::enumerable_thread_specific<int> local_id, old_id, slot_id(-3);\n\nvoid ResetTLS() {\n    local_id.clear();\n    old_id.clear();\n    slot_id.clear();\n}\n\nclass ArenaObserver : public tbb::task_scheduler_observer {\n    int myId;               // unique observer/arena id within a test\n    int myMaxConcurrency;   // concurrency of the associated arena\n    int myNumReservedSlots; // reserved slots in the associated arena\n    void on_scheduler_entry( bool is_worker ) __TBB_override {\n        int current_index = tbb::this_task_arena::current_thread_index();\n        REMARK(\"a %s #%p is entering arena %d from %d on slot %d\\n\", is_worker?\"worker\":\"master\",\n                &local_id.local(), myId, local_id.local(), current_index );\n        ASSERT(current_index<(myMaxConcurrency>1?myMaxConcurrency:2), NULL);\n        if(is_worker) ASSERT(current_index>=myNumReservedSlots, NULL);\n\n        ASSERT(!old_id.local(), \"double call to on_scheduler_entry\");\n        old_id.local() = local_id.local();\n        ASSERT(old_id.local() != myId, \"double entry to the same arena\");\n        local_id.local() = myId;\n        slot_id.local() = current_index;\n    }\n    void on_scheduler_exit( bool is_worker ) __TBB_override {\n        REMARK(\"a %s #%p is leaving arena %d to %d\\n\", is_worker?\"worker\":\"master\",\n                &local_id.local(), myId, old_id.local());\n        ASSERT(local_id.local() == myId, \"nesting of arenas is broken\");\n        ASSERT(slot_id.local() == tbb::this_task_arena::current_thread_index(), NULL);\n         //!deprecated, remove when tbb::task_arena::current_thread_index is removed.\n        ASSERT(slot_id.local() == tbb::task_arena::current_thread_index(), NULL);\n        slot_id.local() = -2;\n        local_id.local() = old_id.local();\n        old_id.local() = 0;\n    }\npublic:\n    ArenaObserver(tbb::task_arena &a, int maxConcurrency, int numReservedSlots, int id)\n        : tbb::task_scheduler_observer(a)\n        , myId(id)\n        , myMaxConcurrency(maxConcurrency)\n        , myNumReservedSlots(numReservedSlots) {\n        ASSERT(myId, NULL);\n        observe(true);\n    }\n    ~ArenaObserver () {\n        ASSERT(!old_id.local(), \"inconsistent observer state\");\n    }\n};\n\nstruct IndexTrackingBody { // Must be used together with ArenaObserver\n    void operator() ( const Range& ) const {\n        ASSERT(slot_id.local() == tbb::this_task_arena::current_thread_index(), NULL);\n        //!deprecated, remove when tbb::task_arena::current_thread_index is removed.\n        ASSERT(slot_id.local() == tbb::task_arena::current_thread_index(), NULL);\n        for ( volatile int i = 0; i < 50000; ++i )\n            ;\n    }\n};\n\nstruct AsynchronousWork : NoAssign {\n    Harness::SpinBarrier &my_barrier;\n    bool my_is_blocking;\n    AsynchronousWork(Harness::SpinBarrier &a_barrier, bool blocking = true)\n    : my_barrier(a_barrier), my_is_blocking(blocking) {}\n    void operator()() const {\n        ASSERT(local_id.local() != 0, \"not in explicit arena\");\n        tbb::parallel_for(Range(0,500), IndexTrackingBody(), tbb::simple_partitioner(), *tbb::task::self().group());\n        if(my_is_blocking) my_barrier.timed_wait(10); // must be asynchronous to master thread\n        else my_barrier.signal_nowait();\n    }\n};\n\n//--------------------------------------------------//\n// Test that task_arenas might be created and used from multiple application threads.\n// Also tests arena observers. The parameter p is the index of an app thread running this test.\nvoid TestConcurrentArenasFunc(int idx) {\n    tbb::task_arena a1;\n    a1.initialize(1,0);\n    ArenaObserver o1(a1, 1, 0, idx*2+1); // the last argument is a \"unique\" observer/arena id for the test\n    tbb::task_arena a2(2,1);\n    ArenaObserver o2(a2, 2, 1, idx*2+2);\n    Harness::SpinBarrier barrier(2);\n    AsynchronousWork work(barrier);\n    a1.enqueue(work); // put async work\n    barrier.timed_wait(10);\n    a2.enqueue(work); // another work\n    a2.execute(work); // my_barrier.timed_wait(10) inside\n    a1.debug_wait_until_empty();\n    a2.debug_wait_until_empty();\n}\n\nvoid TestConcurrentArenas(int p) {\n    ResetTLS();\n    NativeParallelFor( p, &TestConcurrentArenasFunc );\n}\n\n//--------------------------------------------------//\n// Test multiple application threads working with a single arena at the same time.\nclass MultipleMastersPart1 : NoAssign {\n    tbb::task_arena &my_a;\n    Harness::SpinBarrier &my_b1, &my_b2;\npublic:\n    MultipleMastersPart1( tbb::task_arena &a, Harness::SpinBarrier &b1, Harness::SpinBarrier &b2)\n        : my_a(a), my_b1(b1), my_b2(b2) {}\n    void operator()(int) const {\n        my_a.execute(AsynchronousWork(my_b2, /*blocking=*/false));\n        my_b1.timed_wait(10);\n        // A regression test for bugs 1954 & 1971\n        my_a.enqueue(AsynchronousWork(my_b2, /*blocking=*/false));\n    }\n};\n\nclass MultipleMastersPart2 : NoAssign {\n    tbb::task_arena &my_a;\n    Harness::SpinBarrier &my_b;\npublic:\n    MultipleMastersPart2( tbb::task_arena &a, Harness::SpinBarrier &b) : my_a(a), my_b(b) {}\n    void operator()(int) const {\n        my_a.execute(AsynchronousWork(my_b, /*blocking=*/false));\n    }\n};\n\nclass MultipleMastersPart3 : NoAssign {\n    tbb::task_arena &my_a;\n    Harness::SpinBarrier &my_b;\n\n    struct Runner : NoAssign {\n        tbb::task* const a_task;\n        Runner(tbb::task* const t) : a_task(t) {}\n        void operator()() const {\n            for ( volatile int i = 0; i < 10000; ++i )\n                ;\n            a_task->decrement_ref_count();\n        }\n    };\n\n    struct Waiter : NoAssign {\n        tbb::task* const a_task;\n        Waiter(tbb::task* const t) : a_task(t) {}\n        void operator()() const {\n            a_task->wait_for_all();\n        }\n    };\n\npublic:\n    MultipleMastersPart3(tbb::task_arena &a, Harness::SpinBarrier &b)\n        : my_a(a), my_b(b) {}\n    void operator()(int idx) const {\n        tbb::empty_task* root_task = new(tbb::task::allocate_root()) tbb::empty_task;\n        my_b.timed_wait(10); // increases chances for task_arena initialization contention\n        for( int i=0; i<100; ++i) {\n            root_task->set_ref_count(2);\n            my_a.enqueue(Runner(root_task));\n            my_a.execute(Waiter(root_task));\n        }\n        tbb::task::destroy(*root_task);\n        REMARK(\"Master #%d: job completed, wait for others\\n\", idx);\n        my_b.timed_wait(10);\n    }\n};\n\nclass MultipleMastersPart4 : NoAssign {\n    tbb::task_arena &my_a;\n    Harness::SpinBarrier &my_b;\n    tbb::task_group_context *my_ag;\n\n    struct Getter : NoAssign {\n        tbb::task_group_context *& my_g;\n        Getter(tbb::task_group_context *&a_g) : my_g(a_g) {}\n        void operator()() const {\n            my_g = tbb::task::self().group();\n        }\n    };\n    struct Checker : NoAssign {\n        tbb::task_group_context *my_g;\n        Checker(tbb::task_group_context *a_g) : my_g(a_g) {}\n        void operator()() const {\n            ASSERT(my_g == tbb::task::self().group(), NULL);\n            tbb::task *t = new( tbb::task::allocate_root() ) tbb::empty_task;\n            ASSERT(my_g == t->group(), NULL);\n            tbb::task::destroy(*t);\n        }\n    };\n    struct NestedChecker : NoAssign {\n        const MultipleMastersPart4 &my_body;\n        NestedChecker(const MultipleMastersPart4 &b) : my_body(b) {}\n        void operator()() const {\n            tbb::task_group_context *nested_g = tbb::task::self().group();\n            ASSERT(my_body.my_ag != nested_g, NULL);\n            tbb::task *t = new( tbb::task::allocate_root() ) tbb::empty_task;\n            ASSERT(nested_g == t->group(), NULL);\n            tbb::task::destroy(*t);\n            my_body.my_a.enqueue(Checker(my_body.my_ag));\n        }\n    };\npublic:\n    MultipleMastersPart4( tbb::task_arena &a, Harness::SpinBarrier &b) : my_a(a), my_b(b) {\n        my_a.execute(Getter(my_ag));\n    }\n    // NativeParallelFor's functor\n    void operator()(int) const {\n        my_a.execute(*this);\n    }\n    // Arena's functor\n    void operator()() const {\n        Checker check(my_ag);\n        check();\n        tbb::task_arena nested(1,1);\n        nested.execute(NestedChecker(*this)); // change arena\n        tbb::parallel_for(Range(0,1),*this); // change group context only\n        my_b.timed_wait(10);\n        my_a.execute(check);\n        check();\n    }\n    // parallel_for's functor\n    void operator()(const Range &) const {\n        NestedChecker(*this)();\n        my_a.execute(Checker(my_ag)); // restore arena context\n    }\n};\n\nvoid TestMultipleMasters(int p) {\n    {\n        REMARK(\"multiple masters, part 1\\n\");\n        ResetTLS();\n        tbb::task_arena a(1,0);\n        a.initialize();\n        ArenaObserver o(a, 1, 0, 1);\n        Harness::SpinBarrier barrier1(p), barrier2(2*p+1); // each of p threads will submit two tasks signaling the barrier\n        NativeParallelFor( p, MultipleMastersPart1(a, barrier1, barrier2) );\n        barrier2.timed_wait(10);\n        a.debug_wait_until_empty();\n    } {\n        REMARK(\"multiple masters, part 2\\n\");\n        ResetTLS();\n        tbb::task_arena a(2,1);\n        ArenaObserver o(a, 2, 1, 2);\n        Harness::SpinBarrier barrier(p+2);\n        a.enqueue(AsynchronousWork(barrier, /*blocking=*/true)); // occupy the worker, a regression test for bug 1981\n        NativeParallelFor( p, MultipleMastersPart2(a, barrier) );\n        barrier.timed_wait(10);\n        a.debug_wait_until_empty();\n    } {\n        // Regression test for the bug 1981 part 2 (task_arena::execute() with wait_for_all for an enqueued task)\n        REMARK(\"multiple masters, part 3: wait_for_all() in execute()\\n\");\n        tbb::task_arena a(p,1);\n        Harness::SpinBarrier barrier(p+1); // for masters to avoid endless waiting at least in some runs\n        // \"Oversubscribe\" the arena by 1 master thread\n        NativeParallelFor( p+1, MultipleMastersPart3(a, barrier) );\n        a.debug_wait_until_empty();\n    } {\n        int c = p%3? (p%2? p : 2) : 3;\n        REMARK(\"multiple masters, part 4: contexts, arena(%d)\\n\", c);\n        ResetTLS();\n        tbb::task_arena a(c, 1);\n        ArenaObserver o(a, c, 1, c);\n        Harness::SpinBarrier barrier(c);\n        MultipleMastersPart4 test(a, barrier);\n        NativeParallelFor(p, test);\n        a.debug_wait_until_empty();\n    }\n}\n\n//--------------------------------------------------//\n// TODO: explain what TestArenaEntryConsistency does\n#include <sstream>\n#if TBB_USE_EXCEPTIONS\n#include <stdexcept>\n#include \"tbb/tbb_exception.h\"\n#endif\n\nstruct TestArenaEntryBody : FPModeContext {\n    tbb::atomic<int> &my_stage; // each execute increases it\n    std::stringstream my_id;\n    bool is_caught, is_expected;\n    enum { arenaFPMode = 1 };\n\n    TestArenaEntryBody(tbb::atomic<int> &s, int idx, int i)  // init thread-specific instance\n    :   FPModeContext(idx+i)\n    ,   my_stage(s)\n    ,   is_caught(false)\n    ,   is_expected( (idx&(1<<i)) != 0 && (TBB_USE_EXCEPTIONS) != 0 )\n    {\n        my_id << idx << ':' << i << '@';\n    }\n    void operator()() { // inside task_arena::execute()\n        // synchronize with other stages\n        int stage = my_stage++;\n        int slot = tbb::this_task_arena::current_thread_index();\n        ASSERT(slot >= 0 && slot <= 1, \"master or the only worker\");\n        // wait until the third stage is delegated and then starts on slot 0\n        while(my_stage < 2+slot) __TBB_Yield();\n        // deduct its entry type and put it into id, it helps to find source of a problem\n        my_id << (stage < 3 ? (tbb::this_task_arena::current_thread_index()?\n                              \"delegated_to_worker\" : stage < 2? \"direct\" : \"delegated_to_master\")\n                            : stage == 3? \"nested_same_ctx\" : \"nested_alien_ctx\");\n        REMARK(\"running %s\\n\", my_id.str().c_str());\n        AssertFPMode(arenaFPMode);\n        if(is_expected)\n            __TBB_THROW(std::logic_error(my_id.str()));\n        // no code can be put here since exceptions can be thrown\n    }\n    void on_exception(const char *e) { // outside arena, in catch block\n        is_caught = true;\n        REMARK(\"caught %s\\n\", e);\n        ASSERT(my_id.str() == e, NULL);\n        assertFPMode();\n    }\n    void after_execute() { // outside arena and catch block\n        REMARK(\"completing %s\\n\", my_id.str().c_str() );\n        ASSERT(is_caught == is_expected, NULL);\n        assertFPMode();\n    }\n};\n\nclass ForEachArenaEntryBody : NoAssign {\n    tbb::task_arena &my_a; // expected task_arena(2,1)\n    tbb::atomic<int> &my_stage; // each execute increases it\n    int my_idx;\n\npublic:\n    ForEachArenaEntryBody(tbb::task_arena &a, tbb::atomic<int> &c)\n    : my_a(a), my_stage(c), my_idx(0) {}\n\n    void test(int idx) {\n        my_idx = idx;\n        my_stage = 0;\n        NativeParallelFor(3, *this); // test cross-arena calls\n        ASSERT(my_stage == 3, NULL);\n        my_a.execute(*this); // test nested calls\n        ASSERT(my_stage == 5, NULL);\n    }\n\n    // task_arena functor for nested tests\n    void operator()() const {\n        test_arena_entry(3); // in current task group context\n        tbb::parallel_for(4, 5, *this); // in different context\n    }\n\n    // NativeParallelFor & parallel_for functor\n    void operator()(int i) const {\n        test_arena_entry(i);\n    }\n\nprivate:\n    void test_arena_entry(int i) const {\n        TestArenaEntryBody scoped_functor(my_stage, my_idx, i);\n        __TBB_TRY {\n            my_a.execute(scoped_functor);\n        }\n#if TBB_USE_EXCEPTIONS\n        catch(tbb::captured_exception &e) {\n            scoped_functor.on_exception(e.what());\n            ASSERT_WARNING(TBB_USE_CAPTURED_EXCEPTION, \"Caught captured_exception while expecting exact one\");\n        } catch(std::logic_error &e) {\n            scoped_functor.on_exception(e.what());\n            ASSERT(!TBB_USE_CAPTURED_EXCEPTION, \"Caught exception of wrong type\");\n        } catch(...) { ASSERT(false, \"Unexpected exception type\"); }\n#endif //TBB_USE_EXCEPTIONS\n        scoped_functor.after_execute();\n    }\n};\n\nvoid TestArenaEntryConsistency() {\n    REMARK(\"test arena entry consistency\\n\");\n\n    tbb::task_arena a(2, 1);\n    tbb::atomic<int> c;\n    ForEachArenaEntryBody body(a, c);\n\n    FPModeContext fp_scope(TestArenaEntryBody::arenaFPMode);\n    a.initialize(); // capture FP settings to arena\n    fp_scope.setNextFPMode();\n\n    for (int i = 0; i < 100; i++) // not less than 32 = 2^5 of entry types\n        body.test(i);\n}\n\n//--------------------------------------------------\n// Test that the requested degree of concurrency for task_arena is achieved in various conditions\nclass TestArenaConcurrencyBody : NoAssign {\n    tbb::task_arena &my_a;\n    int my_max_concurrency;\n    int my_reserved_slots;\n    Harness::SpinBarrier *my_barrier;\n    Harness::SpinBarrier *my_worker_barrier;\npublic:\n    TestArenaConcurrencyBody( tbb::task_arena &a, int max_concurrency, int reserved_slots, Harness::SpinBarrier *b = NULL, Harness::SpinBarrier *wb = NULL )\n    : my_a(a), my_max_concurrency(max_concurrency), my_reserved_slots(reserved_slots), my_barrier(b), my_worker_barrier(wb) {}\n    // NativeParallelFor's functor\n    void operator()( int ) const {\n        ASSERT( local_id.local() == 0, \"TLS was not cleaned?\" );\n        local_id.local() = 1;\n        my_a.execute( *this );\n    }\n    // Arena's functor\n    void operator()() const {\n        ASSERT( tbb::task_arena::current_thread_index() == tbb::this_task_arena::current_thread_index(), NULL );\n        int idx = tbb::this_task_arena::current_thread_index();\n        ASSERT( idx < (my_max_concurrency > 1 ? my_max_concurrency : 2), NULL );\n        ASSERT( my_a.max_concurrency() == tbb::this_task_arena::max_concurrency(), NULL );\n        int max_arena_concurrency = tbb::this_task_arena::max_concurrency();\n        ASSERT( max_arena_concurrency == my_max_concurrency, NULL );\n        if ( my_worker_barrier ) {\n            if ( local_id.local() == 1 ) {\n                // Master thread in a reserved slot\n                ASSERT( idx < my_reserved_slots, \"Masters are supposed to use only reserved slots in this test\" );\n            } else {\n                // Worker thread\n                ASSERT( idx >= my_reserved_slots, NULL );\n                my_worker_barrier->timed_wait( 10 );\n            }\n        } else if ( my_barrier )\n            ASSERT( local_id.local() == 1, \"Workers are not supposed to enter the arena in this test\" );\n        if ( my_barrier ) my_barrier->timed_wait( 10 );\n        else Harness::Sleep( 10 );\n    }\n};\n\nvoid TestArenaConcurrency( int p, int reserved = 0, int step = 1) {\n    for (; reserved <= p; reserved += step) {\n        REMARK(\"TestArenaConcurrency: %d slots, %d reserved\\n\", p, reserved);\n        tbb::task_arena a( p, reserved );\n        { // Check concurrency with worker & reserved master threads.\n            ResetTLS();\n            Harness::SpinBarrier b( p );\n            Harness::SpinBarrier wb( p-reserved );\n            TestArenaConcurrencyBody test( a, p, reserved, &b, &wb );\n            for ( int i = reserved; i < p; ++i )\n                a.enqueue( test );\n            if ( reserved==1 )\n                test( 0 ); // calls execute()\n            else\n                NativeParallelFor( reserved, test );\n            a.debug_wait_until_empty();\n        } { // Check if multiple masters alone can achieve maximum concurrency.\n            ResetTLS();\n            Harness::SpinBarrier b( p );\n            NativeParallelFor( p, TestArenaConcurrencyBody( a, p, reserved, &b ) );\n            a.debug_wait_until_empty();\n        } { // Check oversubscription by masters.\n            ResetTLS();\n            NativeParallelFor( 2*p, TestArenaConcurrencyBody( a, p, reserved ) );\n            a.debug_wait_until_empty();\n        }\n    }\n}\n\n//--------------------------------------------------//\n// Test creation/initialization of a task_arena that references an existing arena (aka attach).\n// This part of the test uses the knowledge of task_arena internals\n\ntypedef tbb::interface7::internal::task_arena_base task_arena_internals;\n\nstruct TaskArenaValidator : public task_arena_internals {\n    int my_slot_at_construction;\n    TaskArenaValidator( const task_arena_internals& other )\n    : task_arena_internals(other) /*copies the internal state of other*/ {\n        my_slot_at_construction = tbb::this_task_arena::current_thread_index();\n    }\n    // Inspect the internal state\n    int concurrency() { return my_max_concurrency; }\n    int reserved_for_masters() { return (int)my_master_slots; }\n\n    // This method should be called in task_arena::execute() for a captured arena\n    // by the same thread that created the validator.\n    void operator()() {\n        ASSERT( tbb::this_task_arena::current_thread_index()==my_slot_at_construction,\n                \"Current thread index has changed since the validator construction\" );\n        //!deprecated\n        ASSERT( tbb::task_arena::current_thread_index()==my_slot_at_construction,\n                \"Current thread index has changed since the validator construction\" );\n    }\n};\n\nvoid ValidateAttachedArena( tbb::task_arena& arena, bool expect_activated,\n                            int expect_concurrency, int expect_masters ) {\n    ASSERT( arena.is_active()==expect_activated, \"Unexpected activation state\" );\n    if( arena.is_active() ) {\n        TaskArenaValidator validator( arena );\n        ASSERT( validator.concurrency()==expect_concurrency, \"Unexpected arena size\" );\n        ASSERT( validator.reserved_for_masters()==expect_masters, \"Unexpected # of reserved slots\" );\n        if ( tbb::this_task_arena::current_thread_index() != tbb::task_arena::not_initialized ) {\n            ASSERT( tbb::task_arena::current_thread_index() >= 0 &&\n                tbb::this_task_arena::current_thread_index() >= 0, NULL);\n            // for threads already in arena, check that the thread index remains the same\n            arena.execute( validator );\n        } else { // not_initialized\n            // Test the deprecated method\n            ASSERT( tbb::task_arena::current_thread_index()==-1, NULL);\n        }\n\n        // Ideally, there should be a check for having the same internal arena object,\n        // but that object is not easily accessible for implicit arenas.\n    }\n}\n\nstruct TestAttachBody : NoAssign {\n    mutable int my_idx; // safe to modify and use within the NativeParallelFor functor\n    const int maxthread;\n    TestAttachBody( int max_thr ) : maxthread(max_thr) {}\n\n    // The functor body for NativeParallelFor\n    void operator()( int idx ) const {\n        my_idx = idx;\n        int default_threads = tbb::task_scheduler_init::default_num_threads();\n\n        tbb::task_arena arena = tbb::task_arena( tbb::task_arena::attach() );\n        ValidateAttachedArena( arena, false, -1, -1 ); // Nothing yet to attach to\n\n        { // attach to an arena created via task_scheduler_init\n            tbb::task_scheduler_init init( idx+1 );\n\n            tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );\n            ValidateAttachedArena( arena2, true, idx+1, 1 );\n\n            arena.initialize( tbb::task_arena::attach() );\n        }\n        ValidateAttachedArena( arena, true, idx+1, 1 );\n\n        arena.terminate();\n        ValidateAttachedArena( arena, false, -1, -1 );\n\n        // Check default behavior when attach cannot succeed\n        switch (idx%2) {\n        case 0:\n            { // construct as attached, then initialize\n                tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );\n                ValidateAttachedArena( arena2, false, -1, -1 );\n                arena2.initialize(); // must be initialized with default parameters\n                ValidateAttachedArena( arena2, true, default_threads, 1 );\n            }\n            break;\n        case 1:\n            { // default-construct, then initialize as attached\n                tbb::task_arena arena2;\n                ValidateAttachedArena( arena2, false, -1, -1 );\n                arena2.initialize( tbb::task_arena::attach() ); // must use default parameters\n                ValidateAttachedArena( arena2, true, default_threads, 1 );\n            }\n            break;\n        } // switch\n\n        // attach to an auto-initialized arena\n        tbb::empty_task& tsk = *new (tbb::task::allocate_root()) tbb::empty_task;\n        tbb::task::spawn_root_and_wait(tsk);\n        tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );\n        ValidateAttachedArena( arena2, true, default_threads, 1 );\n\n        // attach to another task_arena\n        arena.initialize( maxthread, min(maxthread,idx) );\n        arena.execute( *this );\n    }\n\n    // The functor body for task_arena::execute above\n    void operator()() const {\n        tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );\n        ValidateAttachedArena( arena2, true, maxthread, min(maxthread,my_idx) );\n    }\n\n    // The functor body for tbb::parallel_for\n    void operator()( const Range& r ) const {\n        for( int i = r.begin(); i<r.end(); ++i ) {\n            tbb::task_arena arena2 = tbb::task_arena( tbb::task_arena::attach() );\n            ValidateAttachedArena( arena2, true, maxthread+1, 1 ); // +1 to match initialization in TestMain\n        }\n    }\n};\n\nvoid TestAttach( int maxthread ) {\n    REMARK( \"Testing attached task_arenas\\n\" );\n    // Externally concurrent, but no concurrency within a thread\n    NativeParallelFor( max(maxthread,4), TestAttachBody( maxthread ) );\n    // Concurrent within the current arena; may also serve as a stress test\n    tbb::parallel_for( Range(0,10000*maxthread), TestAttachBody( maxthread ) );\n}\n\n//--------------------------------------------------//\n// Test that task_arena::enqueue does not tolerate a non-const functor.\n// TODO: can it be reworked as SFINAE-based compile-time check?\nstruct TestFunctor {\n    void operator()() { ASSERT( false, \"Non-const operator called\" ); }\n    void operator()() const { /* library requires this overload only */ }\n};\n\nvoid TestConstantFunctorRequirement() {\n    tbb::task_arena a;\n    TestFunctor tf;\n    a.enqueue( tf );\n#if __TBB_TASK_PRIORITY\n    a.enqueue( tf, tbb::priority_normal );\n#endif\n}\n//--------------------------------------------------//\n#if __TBB_TASK_ISOLATION\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/parallel_invoke.h\"\n// Test this_task_arena::isolate\nnamespace TestIsolatedExecuteNS {\n    //--------------------------------------------------//\n    template <typename NestedPartitioner>\n    class NestedParFor : NoAssign {\n    public:\n        NestedParFor() {}\n        void operator()() const {\n            NestedPartitioner p;\n            tbb::parallel_for( 0, 10, Harness::DummyBody( 10 ), p );\n        }\n    };\n\n    template <typename NestedPartitioner>\n    class ParForBody : NoAssign {\n        bool myOuterIsolation;\n        tbb::enumerable_thread_specific<int> &myEts;\n        tbb::atomic<bool> &myIsStolen;\n    public:\n        ParForBody( bool outer_isolation, tbb::enumerable_thread_specific<int> &ets, tbb::atomic<bool> &is_stolen )\n            : myOuterIsolation( outer_isolation ), myEts( ets ), myIsStolen( is_stolen ) {}\n        void operator()( int ) const {\n            int &e = myEts.local();\n            if ( e++ > 0 ) myIsStolen = true;\n            if ( myOuterIsolation )\n                NestedParFor<NestedPartitioner>()();\n            else\n                tbb::this_task_arena::isolate( NestedParFor<NestedPartitioner>() );\n            --e;\n        }\n    };\n\n    template <typename OuterPartitioner, typename NestedPartitioner>\n    class OuterParFor : NoAssign {\n        bool myOuterIsolation;\n        tbb::atomic<bool> &myIsStolen;\n    public:\n        OuterParFor( bool outer_isolation, tbb::atomic<bool> &is_stolen ) : myOuterIsolation( outer_isolation ), myIsStolen( is_stolen ) {}\n        void operator()() const {\n            tbb::enumerable_thread_specific<int> ets( 0 );\n            OuterPartitioner p;\n            tbb::parallel_for( 0, 1000, ParForBody<NestedPartitioner>( myOuterIsolation, ets, myIsStolen ), p );\n        }\n    };\n\n    template <typename OuterPartitioner, typename NestedPartitioner>\n    void TwoLoopsTest( bool outer_isolation ) {\n        tbb::atomic<bool> is_stolen;\n        is_stolen = false;\n        const int max_repeats = 100;\n        if ( outer_isolation ) {\n            for ( int i = 0; i <= max_repeats; ++i ) {\n                tbb::this_task_arena::isolate( OuterParFor<OuterPartitioner, NestedPartitioner>( outer_isolation, is_stolen ) );\n                if ( is_stolen ) break;\n            }\n            ASSERT_WARNING( is_stolen, \"isolate() should not block stealing on nested levels without isolation\" );\n        } else {\n            for ( int i = 0; i <= max_repeats; ++i ) {\n                OuterParFor<OuterPartitioner, NestedPartitioner>( outer_isolation, is_stolen )();\n            }\n            ASSERT( !is_stolen, \"isolate() on nested levels should prevent stealing from outer leves\" );\n        }\n    }\n\n    void TwoLoopsTest( bool outer_isolation ) {\n        TwoLoopsTest<tbb::simple_partitioner, tbb::simple_partitioner>( outer_isolation );\n        TwoLoopsTest<tbb::simple_partitioner, tbb::affinity_partitioner>( outer_isolation );\n        TwoLoopsTest<tbb::affinity_partitioner, tbb::simple_partitioner>( outer_isolation );\n        TwoLoopsTest<tbb::affinity_partitioner, tbb::affinity_partitioner>( outer_isolation );\n    }\n\n    void TwoLoopsTest() {\n        TwoLoopsTest( true );\n        TwoLoopsTest( false );\n    }\n    //--------------------------------------------------//\n    class HeavyMixTestBody : NoAssign {\n        tbb::enumerable_thread_specific<Harness::FastRandom>& myRandom;\n        tbb::enumerable_thread_specific<int>& myIsolatedLevel;\n        int myNestedLevel;\n        bool myHighPriority;\n\n        template <typename Partitioner, typename Body>\n        static void RunTwoBodies( Harness::FastRandom& rnd, const Body &body, Partitioner& p, tbb::task_group_context* ctx = NULL ) {\n            if ( rnd.get() % 2 )\n                if  (ctx )\n                    tbb::parallel_for( 0, 2, body, p, *ctx );\n                else\n                    tbb::parallel_for( 0, 2, body, p );\n            else\n                tbb::parallel_invoke( body, body );\n        }\n\n        template <typename Partitioner>\n        class IsolatedBody : NoAssign {\n            const HeavyMixTestBody &myHeavyMixTestBody;\n            Partitioner &myPartitioner;\n        public:\n            IsolatedBody( const HeavyMixTestBody &body, Partitioner &partitioner )\n                : myHeavyMixTestBody( body ), myPartitioner( partitioner ) {}\n            void operator()() const {\n                RunTwoBodies( myHeavyMixTestBody.myRandom.local(),\n                    HeavyMixTestBody( myHeavyMixTestBody.myRandom, myHeavyMixTestBody.myIsolatedLevel,\n                        myHeavyMixTestBody.myNestedLevel + 1, myHeavyMixTestBody.myHighPriority ),\n                    myPartitioner );\n            }\n        };\n\n        template <typename Partitioner>\n        void RunNextLevel( Harness::FastRandom& rnd, int &isolated_level ) const {\n            Partitioner p;\n            switch ( rnd.get() % 3 ) {\n                case 0: {\n                    // No features\n                    tbb::task_group_context ctx;\n                    if ( myHighPriority )\n                        ctx.set_priority( tbb::priority_high );\n                    RunTwoBodies( rnd, HeavyMixTestBody(myRandom, myIsolatedLevel, myNestedLevel + 1, myHighPriority), p, &ctx );\n                    break;\n                }\n                case 1: {\n                    // High priority\n                    tbb::task_group_context ctx;\n                    ctx.set_priority( tbb::priority_high );\n                    RunTwoBodies( rnd, HeavyMixTestBody(myRandom, myIsolatedLevel, myNestedLevel + 1, true), p, &ctx );\n                    break;\n                }\n                case 2: {\n                    // Isolation\n                    int previous_isolation = isolated_level;\n                    isolated_level = myNestedLevel;\n                    tbb::this_task_arena::isolate( IsolatedBody<Partitioner>( *this, p ) );\n                    isolated_level = previous_isolation;\n                    break;\n                }\n            }\n        }\n    public:\n        HeavyMixTestBody( tbb::enumerable_thread_specific<Harness::FastRandom>& random,\n            tbb::enumerable_thread_specific<int>& isolated_level, int nested_level, bool high_priority )\n            : myRandom( random ), myIsolatedLevel( isolated_level )\n            , myNestedLevel( nested_level ), myHighPriority( high_priority ) {}\n        void operator()() const {\n            int &isolated_level = myIsolatedLevel.local();\n            ASSERT( myNestedLevel > isolated_level, \"The outer-level task should not be stolen on isolated level\" );\n            if ( myNestedLevel == 20 )\n                return;\n            Harness::FastRandom &rnd = myRandom.local();\n            if ( rnd.get() % 2 == 1 ) {\n                RunNextLevel<tbb::auto_partitioner>( rnd, isolated_level );\n            } else {\n                RunNextLevel<tbb::affinity_partitioner>( rnd, isolated_level );\n            }\n        }\n        void operator()(int) const {\n            this->operator()();\n        }\n    };\n\n    struct RandomInitializer {\n        Harness::FastRandom operator()() {\n            return Harness::FastRandom( tbb::this_task_arena::current_thread_index() );\n        }\n    };\n\n    void HeavyMixTest() {\n        tbb::task_scheduler_init init( tbb::task_scheduler_init::default_num_threads() < 3 ? 3 : tbb::task_scheduler_init::automatic );\n        RandomInitializer init_random;\n        tbb::enumerable_thread_specific<Harness::FastRandom> random( init_random );\n        tbb::enumerable_thread_specific<int> isolated_level( 0 );\n        for ( int i = 0; i < 5; ++i ) {\n            HeavyMixTestBody b( random, isolated_level, 1, false );\n            b( 0 );\n            REMARK( \"\\rHeavyMixTest: %d of 10\", i+1 );\n        }\n        REMARK( \"\\n\" );\n    }\n    //--------------------------------------------------//\n    struct ContinuationTestReduceBody : NoAssign {\n        tbb::internal::isolation_tag myIsolation;\n        ContinuationTestReduceBody( tbb::internal::isolation_tag isolation ) : myIsolation( isolation ) {}\n        ContinuationTestReduceBody( ContinuationTestReduceBody& b, tbb::split ) : myIsolation( b.myIsolation ) {}\n        void operator()( tbb::blocked_range<int> ) {}\n        void join( ContinuationTestReduceBody& ) {\n            tbb::internal::isolation_tag isolation = tbb::task::self().prefix().isolation;\n            ASSERT( isolation == myIsolation, \"The continuations should preserve children's isolation\" );\n        }\n    };\n    struct ContinuationTestIsolated {\n        void operator()() const {\n            ContinuationTestReduceBody b( tbb::task::self().prefix().isolation );\n            tbb::parallel_deterministic_reduce( tbb::blocked_range<int>( 0, 100 ), b );\n        }\n    };\n    struct ContinuationTestParForBody : NoAssign {\n        tbb::enumerable_thread_specific<int> &myEts;\n    public:\n        ContinuationTestParForBody( tbb::enumerable_thread_specific<int> &ets ) : myEts( ets ){}\n        void operator()( int ) const {\n            int &e = myEts.local();\n            ++e;\n            ASSERT( e==1, \"The task is stolen on isolated level\" );\n            tbb::this_task_arena::isolate( ContinuationTestIsolated() );\n            --e;\n        }\n    };\n    void ContinuationTest() {\n        for ( int i = 0; i < 5; ++i ) {\n            tbb::enumerable_thread_specific<int> myEts;\n            tbb::parallel_for( 0, 100, ContinuationTestParForBody( myEts ), tbb::simple_partitioner() );\n        }\n    }\n    //--------------------------------------------------//\n#if TBB_USE_EXCEPTIONS\n    struct MyException {};\n    struct IsolatedBodyThrowsException {\n        void operator()() const {\n            __TBB_THROW( MyException() );\n        }\n    };\n    struct ExceptionTestBody : NoAssign {\n        tbb::enumerable_thread_specific<int>& myEts;\n        tbb::atomic<bool>& myIsStolen;\n        ExceptionTestBody( tbb::enumerable_thread_specific<int>& ets, tbb::atomic<bool>& is_stolen )\n            : myEts( ets ), myIsStolen( is_stolen ) {}\n        void operator()( int i ) const {\n            try {\n                tbb::this_task_arena::isolate( IsolatedBodyThrowsException() );\n                ASSERT( false, \"The exception has been lost\" );\n            }\n            catch ( MyException ) {}\n            catch ( ... ) {\n                ASSERT( false, \"Unexpected exception\" );\n            }\n            // Check that nested algorithms can steal outer-level tasks\n            int &e = myEts.local();\n            if ( e++ > 0 ) myIsStolen = true;\n            // work imbalance increases chances for stealing\n            tbb::parallel_for( 0, 10+i, Harness::DummyBody( 100 ) );\n            --e;\n        }\n    };\n\n#endif /* TBB_USE_EXCEPTIONS */\n    void ExceptionTest() {\n#if TBB_USE_EXCEPTIONS\n        tbb::enumerable_thread_specific<int> ets;\n        tbb::atomic<bool> is_stolen;\n        is_stolen = false;\n        for ( int i = 0; i<10; ++i ) {\n            tbb::parallel_for( 0, 1000, ExceptionTestBody( ets, is_stolen ) );\n            if ( is_stolen ) break;\n        }\n        ASSERT( is_stolen, \"isolate should not affect non-isolated work\" );\n#endif /* TBB_USE_EXCEPTIONS */\n    }\n\n    struct NonConstBody {\n        unsigned int state;\n        void operator()() {\n            state ^= ~0u;\n        }\n    };\n\n    void TestNonConstBody() {\n        NonConstBody body;\n        body.state = 0x6c97d5ed;\n        tbb::this_task_arena::isolate(body);\n        ASSERT(body.state == 0x93682a12, \"The wrong state\");\n    }\n}\n\nvoid TestIsolatedExecute() {\n    // At least 3 threads (owner + 2 thieves) are required to reproduce a situation when the owner steals outer\n    // level task on a nested level. If we have only one thief then it will execute outer level tasks first and\n    // the owner will not have a possibility to steal outer level tasks.\n    int num_threads = min( tbb::task_scheduler_init::default_num_threads(), 3 );\n    {\n        // Too many threads require too many work to reproduce the stealing from outer level.\n        tbb::task_scheduler_init init( max(num_threads, 7) );\n        TestIsolatedExecuteNS::TwoLoopsTest();\n        TestIsolatedExecuteNS::HeavyMixTest();\n        TestIsolatedExecuteNS::ContinuationTest();\n        TestIsolatedExecuteNS::ExceptionTest();\n    }\n    tbb::task_scheduler_init init(num_threads);\n    TestIsolatedExecuteNS::HeavyMixTest();\n    TestIsolatedExecuteNS::ContinuationTest();\n    TestIsolatedExecuteNS::TestNonConstBody();\n}\n#endif /* __TBB_TASK_ISOLATION */\n//--------------------------------------------------//\n//--------------------------------------------------//\n\nclass TestDelegatedSpawnWaitBody : NoAssign {\n    tbb::task_arena &my_a;\n    Harness::SpinBarrier &my_b1, &my_b2;\n\n    struct Spawner : NoAssign {\n        tbb::task* const a_task;\n        Spawner(tbb::task* const t) : a_task(t) {}\n        void operator()() const {\n            tbb::task::spawn( *new(a_task->allocate_child()) tbb::empty_task );\n        }\n    };\n\n    struct Waiter : NoAssign {\n        tbb::task* const a_task;\n        Waiter(tbb::task* const t) : a_task(t) {}\n        void operator()() const {\n            a_task->wait_for_all();\n        }\n    };\n\npublic:\n    TestDelegatedSpawnWaitBody( tbb::task_arena &a, Harness::SpinBarrier &b1, Harness::SpinBarrier &b2)\n        : my_a(a), my_b1(b1), my_b2(b2) {}\n    // NativeParallelFor's functor\n    void operator()(int idx) const {\n        if ( idx==0 ) { // thread 0 works in the arena, thread 1 waits for it (to prevent test hang)\n            for( int i=0; i<2; ++i ) my_a.enqueue(*this); // tasks to sync with workers\n            tbb::empty_task* root_task = new(tbb::task::allocate_root()) tbb::empty_task;\n            root_task->set_ref_count(100001);\n            my_b1.timed_wait(10); // sync with the workers\n            for( int i=0; i<100000; ++i) {\n                my_a.execute(Spawner(root_task));\n            }\n            my_a.execute(Waiter(root_task));\n            tbb::task::destroy(*root_task);\n        }\n        my_b2.timed_wait(10); // sync both threads\n    }\n    // Arena's functor\n    void operator()() const {\n        my_b1.timed_wait(10); // sync with the arena master\n    }\n};\n\nvoid TestDelegatedSpawnWait() {\n    // Regression test for a bug with missed wakeup notification from a delegated task\n    REMARK( \"Testing delegated spawn & wait\\n\" );\n    tbb::task_arena a(2,0);\n    a.initialize();\n    Harness::SpinBarrier barrier1(3), barrier2(2);\n    NativeParallelFor( 2, TestDelegatedSpawnWaitBody(a, barrier1, barrier2) );\n    a.debug_wait_until_empty();\n}\n\nclass TestMultipleWaitsArenaWait : NoAssign {\npublic:\n    TestMultipleWaitsArenaWait( int idx, int bunch_size, int num_tasks, tbb::task** waiters, tbb::atomic<int>& processed )\n        : my_idx( idx ), my_bunch_size( bunch_size ), my_num_tasks(num_tasks), my_waiters( waiters ), my_processed( processed ) {}\n    void operator()() const {\n        ++my_processed;\n        // Wait for all tasks\n        if ( my_idx < my_num_tasks )\n            my_waiters[my_idx]->wait_for_all();\n        // Signal waiting tasks\n        if ( my_idx >= my_bunch_size )\n            my_waiters[my_idx-my_bunch_size]->decrement_ref_count();\n    }\nprivate:\n    int my_idx;\n    int my_bunch_size;\n    int my_num_tasks;\n    tbb::task** my_waiters;\n    tbb::atomic<int>& my_processed;\n};\n\nclass TestMultipleWaitsThreadBody : NoAssign {\npublic:\n    TestMultipleWaitsThreadBody( int bunch_size, int num_tasks, tbb::task_arena& a, tbb::task** waiters, tbb::atomic<int>& processed )\n        : my_bunch_size( bunch_size ), my_num_tasks( num_tasks ), my_arena( a ), my_waiters( waiters ), my_processed( processed ) {}\n    void operator()( int idx ) const {\n        my_arena.execute( TestMultipleWaitsArenaWait( idx, my_bunch_size, my_num_tasks, my_waiters, my_processed ) );\n        --my_processed;\n    }\nprivate:\n    int my_bunch_size;\n    int my_num_tasks;\n    tbb::task_arena& my_arena;\n    tbb::task** my_waiters;\n    tbb::atomic<int>& my_processed;\n};\n\n#include \"tbb/tbb_thread.h\"\n\nvoid TestMultipleWaits( int num_threads, int num_bunches, int bunch_size ) {\n    tbb::task_arena a( num_threads );\n    const int num_tasks = (num_bunches-1)*bunch_size;\n    tbb::task** tasks = new tbb::task*[num_tasks];\n    for ( int i = 0; i<num_tasks; ++i )\n        tasks[i] = new (tbb::task::allocate_root()) tbb::empty_task();\n    tbb::atomic<int> processed;\n    processed = 0;\n    for ( int repeats = 0; repeats<10; ++repeats ) {\n        int idx = 0;\n        for ( int bunch = 0; bunch < num_bunches-1; ++bunch ) {\n            // Sync with the previous bunch of tasks to prevent \"false\" nested dependicies (when a nested task waits for an outer task).\n            while ( processed < bunch*bunch_size ) __TBB_Yield();\n            // Run the bunch of threads/tasks that depend on the next bunch of threads/tasks.\n            for ( int i = 0; i<bunch_size; ++i ) {\n                tasks[idx]->set_ref_count( 2 );\n                tbb::tbb_thread( TestMultipleWaitsThreadBody( bunch_size, num_tasks, a, tasks, processed ), idx++ ).detach();\n            }\n        }\n        // No sync because the threads of the last bunch do not call wait_for_all.\n        // Run the last bunch of threads.\n        for ( int i = 0; i<bunch_size; ++i )\n            tbb::tbb_thread( TestMultipleWaitsThreadBody( bunch_size, num_tasks, a, tasks, processed ), idx++ ).detach();\n        while ( processed ) __TBB_Yield();\n    }\n    for ( int i = 0; i<num_tasks; ++i )\n        tbb::task::destroy( *tasks[i] );\n    delete[] tasks;\n}\n\nvoid TestMultipleWaits() {\n    REMARK( \"Testing multiple waits\\n\" );\n    // Limit the number of threads to prevent heavy oversubscription.\n    const int max_threads = min( 16, tbb::task_scheduler_init::default_num_threads() );\n\n    Harness::FastRandom rnd(1234);\n    for ( int threads = 1; threads <= max_threads; threads += max( threads/2, 1 ) ) {\n        for ( int i = 0; i<3; ++i ) {\n            const int num_bunches = 3 + rnd.get()%3;\n            const int bunch_size = max_threads + rnd.get()%max_threads;\n            TestMultipleWaits( threads, num_bunches, bunch_size );\n        }\n    }\n}\n//--------------------------------------------------//\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#include \"tbb/global_control.h\"\n\nvoid TestSmallStackSize() {\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic,\n        tbb::global_control::active_value(tbb::global_control::thread_stack_size) / 2 );\n    // The test produces the warning (not a error) if fails. So the test is run many times\n    // to make the log annoying (to force to consider it as an error).\n    for (int i = 0; i < 100; ++i) {\n        tbb::task_arena a;\n        a.initialize();\n    }\n}\n//--------------------------------------------------//\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nnamespace TestMoveSemanticsNS {\n    struct TestFunctor {\n        void operator()() const {};\n    };\n\n    struct MoveOnlyFunctor : MoveOnly, TestFunctor {\n        MoveOnlyFunctor() : MoveOnly() {};\n        MoveOnlyFunctor(MoveOnlyFunctor&& other) : MoveOnly(std::move(other)) {};\n    };\n\n    struct MovePreferableFunctor : Movable, TestFunctor {\n        MovePreferableFunctor() : Movable() {};\n        MovePreferableFunctor(MovePreferableFunctor&& other) : Movable( std::move(other) ) {};\n        MovePreferableFunctor(const MovePreferableFunctor& other) : Movable(other) {};\n    };\n\n    struct NoMoveNoCopyFunctor : NoCopy, TestFunctor {\n        NoMoveNoCopyFunctor() : NoCopy() {};\n        // mv ctor is not allowed as cp ctor from parent NoCopy\n    private:\n        NoMoveNoCopyFunctor(NoMoveNoCopyFunctor&&);\n    };\n\n\n    void TestFunctors() {\n        tbb::task_arena ta;\n        MovePreferableFunctor mpf;\n        // execute() doesn't have any copies or moves of arguments inside the impl\n        ta.execute( NoMoveNoCopyFunctor() );\n\n        ta.enqueue( MoveOnlyFunctor() );\n        ta.enqueue( mpf );\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n        ta.enqueue( std::move(mpf) );\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n#if __TBB_TASK_PRIORITY\n        ta.enqueue( MoveOnlyFunctor(), tbb::priority_normal );\n        ta.enqueue( mpf, tbb::priority_normal );\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n        ta.enqueue( std::move(mpf), tbb::priority_normal );\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n#endif\n    }\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\nvoid TestMoveSemantics() {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestMoveSemanticsNS::TestFunctors();\n#else\n    REPORT(\"Known issue: move support tests are skipped.\\n\");\n#endif\n}\n//--------------------------------------------------//\n#if __TBB_CPP11_DECLTYPE_PRESENT && !__TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN\n#include <vector>\n#include \"harness_state_trackable.h\"\n\nnamespace TestReturnValueNS {\n    struct noDefaultTag {};\n    class ReturnType : public Harness::StateTrackable<> {\n        static const int SIZE = 42;\n        std::vector<int> data;\n    public:\n        ReturnType(noDefaultTag) : Harness::StateTrackable<>(0) {}\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n        // Define copy constructor to test that it is never called\n        ReturnType(const ReturnType& r) : Harness::StateTrackable<>(r), data(r.data) {}\n        ReturnType(ReturnType&& r) : Harness::StateTrackable<>(std::move(r)), data(std::move(r.data)) {}\n#endif\n        void fill() {\n            for (int i = 0; i < SIZE; ++i)\n                data.push_back(i);\n        }\n        void check() {\n            ASSERT(data.size() == unsigned(SIZE), NULL);\n            for (int i = 0; i < SIZE; ++i)\n                ASSERT(data[i] == i, NULL);\n            Harness::StateTrackableCounters::counters_t& cnts = Harness::StateTrackableCounters::counters;\n            ASSERT((cnts[Harness::StateTrackableBase::DefaultInitialized] == 0), NULL);\n            ASSERT(cnts[Harness::StateTrackableBase::DirectInitialized] == 1, NULL);\n            std::size_t copied = cnts[Harness::StateTrackableBase::CopyInitialized];\n            std::size_t moved = cnts[Harness::StateTrackableBase::MoveInitialized];\n            ASSERT(cnts[Harness::StateTrackableBase::Destroyed] == copied + moved, NULL);\n            // The number of copies/moves should not exceed 3: function return, store to an internal storage,\n            // acquire internal storage.\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n            ASSERT(copied == 0 && moved <=3, NULL);\n#else\n            ASSERT(copied <= 3 && moved == 0, NULL);\n#endif\n        }\n    };\n\n    template <typename R>\n    R function() {\n        noDefaultTag tag;\n        R r(tag);\n        r.fill();\n        return r;\n    }\n\n    template <>\n    void function<void>() {}\n\n    template <typename R>\n    struct Functor {\n        R operator()() const {\n            return function<R>();\n        }\n    };\n\n    tbb::task_arena& arena() {\n        static tbb::task_arena a;\n        return a;\n    }\n\n    template <typename F>\n    void TestExecute(F &f) {\n        Harness::StateTrackableCounters::reset();\n        ReturnType r = arena().execute(f);\n        r.check();\n    }\n\n    template <typename F>\n    void TestExecute(const F &f) {\n        Harness::StateTrackableCounters::reset();\n        ReturnType r = arena().execute(f);\n        r.check();\n    }\n#if TBB_PREVIEW_TASK_ISOLATION\n    template <typename F>\n    void TestIsolate(F &f) {\n        Harness::StateTrackableCounters::reset();\n        ReturnType r = tbb::this_task_arena::isolate(f);\n        r.check();\n    }\n\n    template <typename F>\n    void TestIsolate(const F &f) {\n        Harness::StateTrackableCounters::reset();\n        ReturnType r = tbb::this_task_arena::isolate(f);\n        r.check();\n    }\n#endif\n\n    void Test() {\n        TestExecute(Functor<ReturnType>());\n        Functor<ReturnType> f1;\n        TestExecute(f1);\n        TestExecute(function<ReturnType>);\n\n        arena().execute(Functor<void>());\n        Functor<void> f2;\n        arena().execute(f2);\n        arena().execute(function<void>);\n#if TBB_PREVIEW_TASK_ISOLATION\n        TestIsolate(Functor<ReturnType>());\n        TestIsolate(f1);\n        TestIsolate(function<ReturnType>);\n        tbb::this_task_arena::isolate(Functor<void>());\n        tbb::this_task_arena::isolate(f2);\n        tbb::this_task_arena::isolate(function<void>);\n#endif\n    }\n}\n#endif /* __TBB_CPP11_DECLTYPE_PRESENT */\n\nvoid TestReturnValue() {\n#if __TBB_CPP11_DECLTYPE_PRESENT && !__TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN\n    TestReturnValueNS::Test();\n#endif\n}\n//--------------------------------------------------//\nvoid TestConcurrentFunctionality(int min_thread_num = MinThread, int max_thread_num = MaxThread) {\n    InitializeAndTerminate(max_thread_num);\n    for (int p = min_thread_num; p <= max_thread_num; ++p) {\n        REMARK(\"testing with %d threads\\n\", p);\n        TestConcurrentArenas(p);\n        TestMultipleMasters(p);\n        TestArenaConcurrency(p);\n    }\n}\n//--------------------------------------------------//\nstruct DefaultCreatedWorkersAmountBody {\n    int my_threadnum;\n    DefaultCreatedWorkersAmountBody(int threadnum) : my_threadnum(threadnum) {}\n    void operator()(int) const {\n        ASSERT(my_threadnum == tbb::this_task_arena::max_concurrency(), \"concurrency level is not equal specified threadnum\");\n        ASSERT(tbb::this_task_arena::current_thread_index() < tbb::this_task_arena::max_concurrency(), \"amount of created threads is more than specified by default\");\n        local_id.local() = 1;\n        Harness::Sleep(1);\n    }\n};\n\nstruct NativeParallelForBody {\n    int my_thread_num;\n    int iterations;\n    NativeParallelForBody(int thread_num, int multiplier = 100) : my_thread_num(thread_num), iterations(multiplier * thread_num) {}\n    void operator()(int idx) const {\n        ASSERT(idx == 0, \"more than 1 thread is going to reset TLS\");\n        ResetTLS();\n        tbb::parallel_for(0, iterations, DefaultCreatedWorkersAmountBody(my_thread_num), tbb::simple_partitioner());\n        ASSERT(local_id.size() == size_t(my_thread_num), \"amount of created threads is not equal to default num\");\n    }\n};\n\nvoid TestDefaultCreatedWorkersAmount() {\n    NativeParallelFor(1, NativeParallelForBody(tbb::task_scheduler_init::default_num_threads()));\n}\n\nvoid TestAbilityToCreateWorkers(int thread_num) {\n    tbb::task_scheduler_init init_market_with_necessary_amount_plus_one(thread_num);\n    // Checks only some part of reserved-master threads amount:\n    // 0 and 1 reserved threads are important cases but it is also needed\n    // to collect some statistic data with other amount and to not consume\n    // whole test sesion time checking each amount\n    TestArenaConcurrency(thread_num - 1, 0, int(thread_num / 2.72));\n    TestArenaConcurrency(thread_num, 1, int(thread_num / 3.14));\n}\n\nvoid TestDefaultWorkersLimit() {\n    TestDefaultCreatedWorkersAmount();\n    // Shared RML might limit the number of workers even if you specify the limits\n    // by the reason of (default_concurrency==max_concurrency) for shared RML\n#ifndef RML_USE_WCRM\n    TestAbilityToCreateWorkers(256);\n#endif\n}\n//--------------------------------------------------//\n\nint TestMain () {\n#if __TBB_TASK_ISOLATION\n    TestIsolatedExecute();\n#endif /* __TBB_TASK_ISOLATION */\n    TestSmallStackSize();\n    TestDefaultWorkersLimit();\n    // The test uses up to MaxThread workers (in arenas with no master thread),\n    // so the runtime should be initialized appropriately.\n    tbb::task_scheduler_init init_market_p_plus_one(MaxThread + 1);\n    TestConcurrentFunctionality();\n    TestArenaEntryConsistency();\n    TestAttach(MaxThread);\n    TestConstantFunctorRequirement();\n    TestDelegatedSpawnWait();\n    TestMultipleWaits();\n    TestMoveSemantics();\n    TestReturnValue();\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_assertions.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test correctness of forceful TBB initialization before any dynamic initialization\n// of static objects inside the library took place.\nnamespace tbb {\nnamespace internal {\n    // Forward declaration of the TBB general initialization routine from task.cpp\n    void DoOneTimeInitializations();\n}}\n\nstruct StaticInitializationChecker {\n    StaticInitializationChecker () { tbb::internal::DoOneTimeInitializations(); }\n} theChecker;\n\n//------------------------------------------------------------------------\n// Test that important assertions in class task fail as expected.\n//------------------------------------------------------------------------\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness_inject_scheduler.h\"\n#include \"harness.h\"\n#include \"harness_bad_expr.h\"\n\n#if TRY_BAD_EXPR_ENABLED\n//! Task that will be abused.\ntbb::task* volatile AbusedTask;\n\n//! Number of times that AbuseOneTask\nint AbuseOneTaskRan;\n\n//! Body used to create task in thread 0 and abuse it in thread 1.\nstruct AbuseOneTask {\n    void operator()( int ) const {\n        tbb::task_scheduler_init init;\n        // Thread 1 attempts to incorrectly use the task created by thread 0.\n        tbb::task_list list;\n        // spawn_root_and_wait over empty list should vacuously succeed.\n        tbb::task::spawn_root_and_wait(list);\n\n        // Check that spawn_root_and_wait fails on non-empty list.\n        list.push_back(*AbusedTask);\n\n        // Try abusing recycle_as_continuation\n        TRY_BAD_EXPR(AbusedTask->recycle_as_continuation(), \"execute\" );\n        TRY_BAD_EXPR(AbusedTask->recycle_as_safe_continuation(), \"execute\" );\n        TRY_BAD_EXPR(AbusedTask->recycle_to_reexecute(), \"execute\" );\n        ++AbuseOneTaskRan;\n    }\n};\n\n//! Test various __TBB_ASSERT assertions related to class tbb::task.\nvoid TestTaskAssertions() {\n    // Catch assertion failures\n    tbb::set_assertion_handler( AssertionFailureHandler );\n    tbb::task_scheduler_init init;\n    // Create task to be abused\n    AbusedTask = new( tbb::task::allocate_root() ) tbb::empty_task;\n    NativeParallelFor( 1, AbuseOneTask() );\n    ASSERT( AbuseOneTaskRan==1, NULL );\n    tbb::task::destroy(*AbusedTask);\n    // Restore normal assertion handling\n    tbb::set_assertion_handler( ReportError );\n}\n\nint TestMain () {\n    TestTaskAssertions();\n    return Harness::Done;\n}\n\n#else /* !TRY_BAD_EXPR_ENABLED */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !TRY_BAD_EXPR_ENABLED */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_auto_init.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Testing automatic initialization of TBB task scheduler, so do not use task_scheduler_init anywhere.\n\n#include \"tbb/task.h\"\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n#include \"tbb/atomic.h\"\n\nstatic tbb::atomic<int> g_NumTestsExecuted;\n\n#define TEST_PROLOGUE() ++g_NumTestsExecuted\n\n// Global data used in testing use cases with cross-thread usage of TBB objects\nstatic tbb::task *g_Root1 = NULL,\n                 *g_Root2 = NULL,\n                 *g_Root3 = NULL,\n                 *g_Task = NULL;\n\n#if __TBB_TASK_GROUP_CONTEXT\nstatic tbb::task_group_context* g_Ctx = NULL;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n\nvoid TestTaskSelf () {\n    TEST_PROLOGUE();\n    tbb::task& t = tbb::task::self();\n    ASSERT( !t.parent() && t.ref_count() == 1 && !t.affinity(), \"Master's default task properties changed?\" );\n}\n\nvoid TestRootAllocation () {\n    TEST_PROLOGUE();\n    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    tbb::task::spawn_root_and_wait(r);\n}\n\ninline void ExecuteChildAndCleanup ( tbb::task &r, tbb::task &t ) {\n    r.set_ref_count(2);\n    r.spawn_and_wait_for_all(t);\n    r.destroy(r);\n}\n\nvoid TestChildAllocation () {\n    TEST_PROLOGUE();\n    tbb::task &t = *new( g_Root1->allocate_child() ) tbb::empty_task;\n    ExecuteChildAndCleanup( *g_Root1, t );\n}\n\nvoid TestAdditionalChildAllocation () {\n    TEST_PROLOGUE();\n    tbb::task &t = *new( tbb::task::allocate_additional_child_of(*g_Root2) ) tbb::empty_task;\n    ExecuteChildAndCleanup( *g_Root2, t );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\nvoid TestTaskGroupContextCreation () {\n    TEST_PROLOGUE();\n    tbb::task_group_context ctx;\n    tbb::task &r = *new( tbb::task::allocate_root(ctx) ) tbb::empty_task;\n    tbb::task::spawn_root_and_wait(r);\n}\n\nvoid TestRootAllocationWithContext () {\n    TEST_PROLOGUE();\n    tbb::task* root = new( tbb::task::allocate_root(*g_Ctx) ) tbb::empty_task;\n    tbb::task::spawn_root_and_wait(*root);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\nvoid TestSpawn () {\n    TEST_PROLOGUE();\n    tbb::task::spawn(*g_Task);\n}\n\nvoid TestWaitForAll () {\n    TEST_PROLOGUE();\n    g_Root3->wait_for_all();\n    tbb::task::destroy(*g_Root3);\n}\n\ntypedef void (*TestFnPtr)();\n\nconst TestFnPtr TestFuncsTable[] = {\n        TestTaskSelf, TestRootAllocation, TestChildAllocation, TestAdditionalChildAllocation,\n#if __TBB_TASK_GROUP_CONTEXT\n        TestTaskGroupContextCreation, TestRootAllocationWithContext,\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        TestSpawn, TestWaitForAll };\n\nconst int NumTestFuncs = sizeof(TestFuncsTable) / sizeof(TestFnPtr);\n\nstruct TestThreadBody : NoAssign, Harness::NoAfterlife {\n    // Each invocation of operator() happens in a fresh thread with zero-based ID\n    // id, and checks a specific auto-initialization scenario.\n    void operator() ( int id ) const {\n        ASSERT( id >= 0 && id < NumTestFuncs, \"Test diver: NativeParallelFor is used incorrectly\" );\n        TestFuncsTable[id]();\n    }\n};\n\n\n#include \"../tbb/tls.h\"\n\nvoid UseAFewNewTlsKeys () {\n    tbb::internal::tls<intptr_t> tls1, tls2, tls3, tls4;\n    tls1 = tls2 = tls3 = tls4 = -1;\n}\n\nusing tbb::internal::spin_wait_until_eq;\n\nvolatile bool FafStarted   = false,\n              FafCanFinish = false,\n              FafCompleted = false;\n\n//! This task is supposed to be executed during termination of an auto-initialized master thread\nclass FireAndForgetTask : public tbb::task {\n    tbb::task* execute () __TBB_override {\n        // Let another master thread proceed requesting new TLS keys\n        FafStarted = true;\n        UseAFewNewTlsKeys();\n        // Wait while another master thread dirtied its new TLS slots\n        spin_wait_until_eq( FafCanFinish, true );\n        FafCompleted = true;\n        return NULL;\n    }\npublic: // to make gcc 3.2.3 happy\n    ~FireAndForgetTask() {\n        ASSERT(FafCompleted, \"FireAndForgetTask got erroneously cancelled?\");\n    }\n};\n\n#include \"harness_barrier.h\"\nHarness::SpinBarrier driver_barrier(2);\n\nstruct DriverThreadBody : NoAssign, Harness::NoAfterlife {\n    void operator() ( int id ) const {\n        ASSERT( id < 2, \"Only two test driver threads are expected\" );\n        // a barrier is required to ensure both threads started; otherwise the test may deadlock:\n        // the first thread would execute FireAndForgetTask at shutdown and wait for FafCanFinish,\n        // while the second thread wouldn't even start waiting for the loader lock hold by the first one.\n        if ( id == 0 ) {\n            driver_barrier.wait();\n            // Prepare global data\n            g_Root1 = new( tbb::task::allocate_root() ) tbb::empty_task;\n            g_Root2 = new( tbb::task::allocate_root() ) tbb::empty_task;\n            g_Root3 = new( tbb::task::allocate_root() ) tbb::empty_task;\n            g_Task = new( g_Root3->allocate_child() ) tbb::empty_task;\n            g_Root3->set_ref_count(2);\n            // Run tests\n            NativeParallelFor( NumTestFuncs, TestThreadBody() );\n            ASSERT( g_NumTestsExecuted == NumTestFuncs, \"Test driver: Wrong number of tests executed\" );\n\n            // This test checks the validity of temporarily restoring the value of\n            // the last TLS slot for a given key during the termination of an\n            // auto-initialized master thread (in governor::auto_terminate).\n            // If anything goes wrong, generic_scheduler::cleanup_master() will assert.\n            // The context for this task must be valid till the task completion.\n#if __TBB_TASK_GROUP_CONTEXT\n            tbb::task &r = *new( tbb::task::allocate_root(*g_Ctx) ) FireAndForgetTask;\n#else\n            tbb::task &r = *new( tbb::task::allocate_root() ) FireAndForgetTask;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n            tbb::task::spawn(r);\n        }\n        else {\n#if __TBB_TASK_GROUP_CONTEXT\n            tbb::task_group_context ctx;\n            g_Ctx = &ctx;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n            driver_barrier.wait();\n            spin_wait_until_eq( FafStarted, true );\n            UseAFewNewTlsKeys();\n            FafCanFinish = true;\n            spin_wait_until_eq( FafCompleted, true );\n        }\n    }\n};\n\nint TestMain () {\n    // Do not use any TBB functionality in the main thread!\n    NativeParallelFor( 2, DriverThreadBody() );\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_enqueue.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_task.h\"\n#include \"harness_barrier.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n\n////////////////////////////////////////////////////////////////////////////////\n// Test for basic FIFO scheduling functionality\n\nconst int PairsPerTrack = 100;\n\nclass EnqueuedTask : public tbb::task {\n    task* my_successor;\n    int my_enqueue_order;\n    int* my_track;\n    tbb::task* execute() __TBB_override {\n        // Capture execution order in the very beginning\n        int execution_order = 2 - my_successor->decrement_ref_count();\n        // Create some local work.\n        TaskGenerator& p = *new( allocate_root() ) TaskGenerator(2,2);\n        spawn_root_and_wait(p);\n        if( execution_order==2 ) { // the \"slower\" of two peer tasks\n            ++nCompletedPairs;\n            // Of course execution order can differ from dequeue order.\n            // But there is no better approximation at hand; and a single worker\n            // will execute in dequeue order, which is enough for our check.\n            if (my_enqueue_order==execution_order)\n                ++nOrderedPairs;\n            FireTwoTasks(my_track);\n            destroy(*my_successor);\n        }\n        return NULL;\n    }\npublic:\n    EnqueuedTask( task* successor, int enq_order, int* track )\n    : my_successor(successor), my_enqueue_order(enq_order), my_track(track) {}\n\n    // Create and enqueue two tasks\n    static void FireTwoTasks( int* track ) {\n        int progress = ++*track;\n        if( progress < PairsPerTrack ) {\n            task* successor = new (allocate_root()) tbb::empty_task;\n            successor->set_ref_count(2);\n            enqueue( *new (allocate_root()) EnqueuedTask(successor, 1, track) );\n            enqueue( *new (allocate_root()) EnqueuedTask(successor, 2, track) );\n        }\n    }\n\n    static tbb::atomic<int> nCompletedPairs;\n    static tbb::atomic<int> nOrderedPairs;\n};\n\ntbb::atomic<int> EnqueuedTask::nCompletedPairs;\ntbb::atomic<int> EnqueuedTask::nOrderedPairs;\n\nconst int nTracks = 10;\nstatic int TaskTracks[nTracks];\nconst int stall_threshold = 1000000; // 1 sec\n\nvoid TimedYield( double pause_time ) {\n    tbb::tick_count start = tbb::tick_count::now();\n    while( (tbb::tick_count::now()-start).seconds() < pause_time )\n        tbb::this_tbb_thread::sleep(tbb::tick_count::interval_t(pause_time));\n}\n\nclass ProgressMonitor {\npublic:\n    void operator() ( ) {\n        int track_snapshot[nTracks];\n        int stall_count = 0, uneven_progress_count = 0, last_progress_mask = 0;\n        for(int i=0; i<nTracks; ++i)\n            track_snapshot[i]=0;\n        bool completed;\n        do {\n            // Yield repeatedly for at least 1 usec\n            TimedYield( 1E-6 );\n            int overall_progress = 0, progress_mask = 0;\n            const int all_progressed = (1<<nTracks) - 1;\n            completed = true;\n            for(int i=0; i<nTracks; ++i) {\n                int ti = TaskTracks[i];\n                int pi = ti-track_snapshot[i];\n                if( pi ) progress_mask |= 1<<i;\n                overall_progress += pi;\n                completed = completed && ti==PairsPerTrack;\n                track_snapshot[i]=ti;\n            }\n            // The constants in the next asserts are subjective and may need correction.\n            if( overall_progress )\n                stall_count=0;\n            else {\n                ++stall_count;\n                // no progress; consider it dead.\n                ASSERT(stall_count < stall_threshold, \"no progress on enqueued tasks; deadlock, or the machine is heavily oversubscribed?\");\n            }\n            if( progress_mask==all_progressed || progress_mask^last_progress_mask ) {\n                uneven_progress_count = 0;\n                last_progress_mask = progress_mask;\n            }\n            else if ( overall_progress > 2 ) {\n                ++uneven_progress_count;\n                // The threshold of 32 is 4x bigger than what was observed on a 8-core machine with oversubscription.\n                ASSERT_WARNING(uneven_progress_count < 32,\n                    \"some enqueued tasks seem stalling; no simultaneous progress, or the machine is oversubscribed? Investigate if repeated\");\n            }\n        } while( !completed );\n    }\n};\n\nvoid TestEnqueue( int p ) {\n    REMARK(\"Testing task::enqueue for %d threads\\n\", p);\n    for(int mode=0;mode<3;++mode) {\n        tbb::task_scheduler_init init(p);\n        EnqueuedTask::nCompletedPairs = EnqueuedTask::nOrderedPairs = 0;\n        for(int i=0; i<nTracks; ++i) {\n            TaskTracks[i] = -1; // to accommodate for the starting call\n            EnqueuedTask::FireTwoTasks(TaskTracks+i);\n        }\n        ProgressMonitor pm;\n        tbb::tbb_thread thr( pm );\n        if(mode==1) {\n            // do some parallel work in the meantime\n            for(int i=0; i<10; i++) {\n                TaskGenerator& g = *new( tbb::task::allocate_root() ) TaskGenerator(2,5);\n                tbb::task::spawn_root_and_wait(g);\n                TimedYield( 1E-6 );\n            }\n        }\n        if( mode==2 ) {\n            // Additionally enqueue a bunch of empty tasks. The goal is to test that tasks\n            // allocated and enqueued by a thread are safe to use after the thread leaves TBB.\n            tbb::task* root = new (tbb::task::allocate_root()) tbb::empty_task;\n            root->set_ref_count(100);\n            for( int i=0; i<100; ++i )\n                tbb::task::enqueue( *new (root->allocate_child()) tbb::empty_task );\n            init.terminate(); // master thread deregistered\n        }\n        thr.join();\n        ASSERT(EnqueuedTask::nCompletedPairs==nTracks*PairsPerTrack, NULL);\n        ASSERT(EnqueuedTask::nOrderedPairs<EnqueuedTask::nCompletedPairs,\n            \"all task pairs executed in enqueue order; de facto guarantee is too strong?\");\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Tests for Fire-And-Forget scheduling functionality\n\nint NumRepeats = 200;\nconst int MaxNumThreads = 16;\nstatic volatile bool Finished[MaxNumThreads] = {};\n\nstatic volatile bool CanStart;\n\n//! Custom user task interface\nclass ITask {\npublic:\n    virtual ~ITask() {}\n    virtual void Execute() = 0;\n    virtual void Release() { delete this; }\n};\n\nclass TestTask : public ITask {\n    volatile bool *m_pDone;\npublic:\n    TestTask ( volatile bool *pDone ) : m_pDone(pDone) {}\n\n    void Execute() __TBB_override {\n        *m_pDone = true;\n    }\n};\n\nclass CarrierTask : public tbb::task {\n    ITask* m_pTask;\npublic:\n    CarrierTask(ITask* pTask) : m_pTask(pTask) {}\n\n    task* execute() __TBB_override {\n        m_pTask->Execute();\n        m_pTask->Release();\n        return NULL;\n    }\n};\n\nclass SpawnerTask : public ITask {\n    ITask* m_taskToSpawn;\npublic:\n    SpawnerTask(ITask* job) : m_taskToSpawn(job) {}\n\n    void Execute() __TBB_override {\n        while ( !CanStart )\n            __TBB_Yield();\n        Harness::Sleep(10); // increases probability of the bug\n        tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(m_taskToSpawn) );\n    }\n};\n\nclass EnqueuerBody {\npublic:\n    void operator() ( int id ) const {\n        tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);\n\n        SpawnerTask* pTask = new SpawnerTask( new TestTask(Finished + id) );\n        tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(pTask) );\n    }\n};\n\n//! Regression test for a bug that caused premature arena destruction\nvoid TestCascadedEnqueue () {\n    REMARK(\"Testing cascaded enqueue\\n\");\n    tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);\n\n    int minNumThreads = min(tbb::task_scheduler_init::default_num_threads(), MaxNumThreads) / 2;\n    int maxNumThreads = min(tbb::task_scheduler_init::default_num_threads() * 2, MaxNumThreads);\n\n    for ( int numThreads = minNumThreads; numThreads <= maxNumThreads; ++numThreads ) {\n        for ( int i = 0; i < NumRepeats; ++i ) {\n            CanStart = false;\n            __TBB_Yield();\n            NativeParallelFor( numThreads, EnqueuerBody() );\n            CanStart = true;\n            int j = 0;\n            while ( j < numThreads ) {\n                if ( Finished[j] )\n                    ++j;\n                else\n                    __TBB_Yield();\n            }\n            for ( j = 0; j < numThreads; ++j )\n                Finished[j] = false;\n            REMARK(\"\\r%02d threads; Iteration %03d\", numThreads, i);\n        }\n    }\n    REMARK( \"\\r                                 \\r\" );\n}\n\nclass DummyTask : public tbb::task {\npublic:\n    task *execute() __TBB_override {\n        Harness::Sleep(1);\n        return NULL;\n    }\n};\n\nclass SharedRootBody {\n    tbb::task *my_root;\npublic:\n    SharedRootBody ( tbb::task *root ) : my_root(root) {}\n\n    void operator() ( int ) const {\n        tbb::task::enqueue( *new( tbb::task::allocate_additional_child_of(*my_root) ) DummyTask );\n    }\n};\n\n//! Test for enqueuing children of the same root from different master threads\nvoid TestSharedRoot ( int p ) {\n    REMARK(\"Testing enqueuing siblings from different masters\\n\");\n    tbb::task_scheduler_init init(p);\n    tbb::task *root =  new ( tbb::task::allocate_root() ) tbb::empty_task;\n    root->set_ref_count(1);\n    for( int n = MinThread; n <= MaxThread; ++n ) {\n        REMARK(\"%d masters, %d requested workers\\r\", n, p-1);\n        NativeParallelFor( n, SharedRootBody(root) );\n    }\n    REMARK( \"                                    \\r\" );\n    root->wait_for_all();\n    tbb::task::destroy(*root);\n}\n\nclass BlockingTask : public tbb::task {\n    Harness::SpinBarrier &m_Barrier;\n\n    tbb::task* execute () __TBB_override {\n        m_Barrier.wait();\n        return 0;\n    }\n\npublic:\n    BlockingTask ( Harness::SpinBarrier& bar ) : m_Barrier(bar) {}\n};\n\n//! Test making sure that masters can dequeue tasks\n/** Success criterion is not hanging. **/\nvoid TestDequeueByMaster () {\n    REMARK(\"Testing task dequeuing by master\\n\");\n    tbb::task_scheduler_init init(1);\n    Harness::SpinBarrier bar(2);\n    tbb::task &r = *new ( tbb::task::allocate_root() ) tbb::empty_task;\n    r.set_ref_count(3);\n    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) );\n    tbb::task::enqueue( *new(r.allocate_child()) BlockingTask(bar) );\n    r.wait_for_all();\n    tbb::task::destroy(r);\n}\n\n////////////////////// Missed wake-ups ///////\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n\nstatic const int NUM_TASKS    = 4;\nstatic const size_t NUM_REPEATS = TBB_USE_DEBUG ? 50000 : 100000;\nstatic tbb::task_group_context persistent_context(tbb::task_group_context::isolated);\n\nstruct Functor : NoAssign\n{\n    Harness::SpinBarrier &my_barrier;\n    Functor(Harness::SpinBarrier &a_barrier) : my_barrier(a_barrier) { }\n    void operator()(const tbb::blocked_range<int>& r) const\n    {\n        ASSERT(r.size() == 1, NULL);\n        // allocate_root() uses current context of parallel_for which is destroyed when it finishes.\n        // But enqueued tasks can outlive parallel_for execution. Thus, use a persistent context.\n        tbb::task *t = new(tbb::task::allocate_root(persistent_context)) tbb::empty_task();\n        tbb::task::enqueue(*t); // ensure no missing wake-ups\n        my_barrier.timed_wait(10, \"Attention: poorly reproducible event, if seen stress testing required\" );\n    }\n};\n\nvoid TestWakeups()\n{\n    tbb::task_scheduler_init my(tbb::task_scheduler_init::deferred);\n    if( tbb::task_scheduler_init::default_num_threads() <= NUM_TASKS )\n        my.initialize(NUM_TASKS*2);\n    else // workaround issue #1996 for TestCascadedEnqueue\n        my.initialize(tbb::task_scheduler_init::default_num_threads()+1);\n    Harness::SpinBarrier barrier(NUM_TASKS);\n    REMARK(\"Missing wake-up: affinity_partitioner\\n\");\n    tbb::affinity_partitioner aff;\n    for (size_t i = 0; i < NUM_REPEATS; ++i)\n        tbb::parallel_for(tbb::blocked_range<int>(0, NUM_TASKS), Functor(barrier), aff);\n    REMARK(\"Missing wake-up: simple_partitioner\\n\");\n    for (size_t i = 0; i < NUM_REPEATS; ++i)\n        tbb::parallel_for(tbb::blocked_range<int>(0, NUM_TASKS), Functor(barrier), tbb::simple_partitioner());\n    REMARK(\"Missing wake-up: auto_partitioner\\n\");\n    for (size_t i = 0; i < NUM_REPEATS; ++i)\n        tbb::parallel_for(tbb::blocked_range<int>(0, NUM_TASKS), Functor(barrier)); // auto\n}\n\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#include \"tbb/global_control.h\"\n\nint TestMain () {\n\n    TestWakeups();         // 1st because requests oversubscription\n    for (int i=0; i<2; i++) {\n        tbb::global_control *c = i?\n            new tbb::global_control(tbb::global_control::max_allowed_parallelism, 1) : NULL;\n        if (i) // decrease workload for max_allowed_parallelism == 1\n            NumRepeats = 10;\n\n        TestCascadedEnqueue(); // needs oversubscription\n        if (!c)\n            TestDequeueByMaster(); // no oversubscription needed\n        for( int p=MinThread; p<=MaxThread; ++p ) {\n            TestEnqueue(p);\n            TestSharedRoot(p);\n        }\n        delete c;\n    }\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_group.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"harness_defs.h\"\n\n//Concurrency scheduler is not supported by Windows* new UI apps\n//TODO: check whether we can test anything here\n#include \"tbb/tbb_config.h\"\n#if !__TBB_WIN8UI_SUPPORT\n#ifndef TBBTEST_USE_TBB\n    #define TBBTEST_USE_TBB 1\n#endif\n#else\n    #define TBBTEST_USE_TBB 0\n    #undef __TBB_TASK_GROUP_CONTEXT\n    #define __TBB_TASK_GROUP_CONTEXT 0\n#endif\n\n#if !TBBTEST_USE_TBB\n    #if defined(_MSC_VER) && _MSC_VER < 1600\n        #ifdef TBBTEST_USE_TBB\n            #undef TBBTEST_USE_TBB\n        #endif\n        #define TBBTEST_USE_TBB 1\n    #endif\n#endif\n\n#if TBBTEST_USE_TBB\n\n    #include \"tbb/compat/ppl.h\"\n    #include \"tbb/task_scheduler_init.h\"\n\n    #if _MSC_VER\n        typedef tbb::internal::uint32_t uint_t;\n    #else\n        typedef uint32_t uint_t;\n    #endif\n\n#else /* !TBBTEST_USE_TBB */\n\n    #if defined(_MSC_VER)\n    #pragma warning(disable: 4100 4180)\n    #endif\n\n    #include <ppl.h>\n\n    typedef unsigned int uint_t;\n\n    // Bug in this ConcRT version results in task_group::wait() rethrowing\n    // internal cancellation exception propagated by the scheduler from the nesting\n    // task group.\n    #define __TBB_SILENT_CANCELLATION_BROKEN  (_MSC_VER == 1600)\n\n#endif /* !TBBTEST_USE_TBB */\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#include \"tbb/atomic.h\"\n#include \"tbb/aligned_space.h\"\n#include \"harness.h\"\n#include \"harness_concurrency_tracker.h\"\n\nunsigned g_MaxConcurrency = 0;\n\ntypedef tbb::atomic<uint_t> atomic_t;\ntypedef Concurrency::task_handle<void(*)()> handle_type;\n\n//------------------------------------------------------------------------\n// Tests for the thread safety of the task_group manipulations\n//------------------------------------------------------------------------\n\n#include \"harness_barrier.h\"\n\nenum SharingMode {\n    VagabondGroup = 1,\n    ParallelWait = 2\n};\n\nclass  SharedGroupBodyImpl : NoCopy, Harness::NoAfterlife {\n    static const uint_t c_numTasks0 = 4096,\n                        c_numTasks1 = 1024;\n\n    const uint_t m_numThreads;\n    const uint_t m_sharingMode;\n\n    Concurrency::task_group *m_taskGroup;\n    atomic_t m_tasksSpawned,\n             m_threadsReady;\n    Harness::SpinBarrier m_barrier;\n\n    static atomic_t s_tasksExecuted;\n\n    struct TaskFunctor {\n        SharedGroupBodyImpl *m_pOwner;\n        void operator () () const {\n            if ( m_pOwner->m_sharingMode & ParallelWait ) {\n                while ( Harness::ConcurrencyTracker::PeakParallelism() < m_pOwner->m_numThreads )\n                    __TBB_Yield();\n            }\n            ++s_tasksExecuted;\n        }\n    };\n\n    TaskFunctor m_taskFunctor;\n\n    void Spawn ( uint_t numTasks ) {\n        for ( uint_t i = 0; i < numTasks; ++i ) {\n            ++m_tasksSpawned;\n            Harness::ConcurrencyTracker ct;\n            m_taskGroup->run( m_taskFunctor );\n        }\n        ++m_threadsReady;\n    }\n\n    void DeleteTaskGroup () {\n        delete m_taskGroup;\n        m_taskGroup = NULL;\n    }\n\n    void Wait () {\n        while ( m_threadsReady != m_numThreads )\n            __TBB_Yield();\n        const uint_t numSpawned = c_numTasks0 + c_numTasks1 * (m_numThreads - 1);\n        ASSERT ( m_tasksSpawned == numSpawned, \"Wrong number of spawned tasks. The test is broken\" );\n        REMARK(\"Max spawning parallelism is %u out of %u\\n\", Harness::ConcurrencyTracker::PeakParallelism(), g_MaxConcurrency);\n        if ( m_sharingMode & ParallelWait ) {\n            m_barrier.wait( &Harness::ConcurrencyTracker::Reset );\n            {\n                Harness::ConcurrencyTracker ct;\n                m_taskGroup->wait();\n            }\n            if ( Harness::ConcurrencyTracker::PeakParallelism() == 1 )\n                REPORT ( \"Warning: No parallel waiting detected in TestParallelWait\\n\" );\n            m_barrier.wait();\n        }\n        else\n            m_taskGroup->wait();\n        ASSERT ( m_tasksSpawned == numSpawned, \"No tasks should be spawned after wait starts. The test is broken\" );\n        ASSERT ( s_tasksExecuted == numSpawned, \"Not all spawned tasks were executed\" );\n    }\n\npublic:\n    SharedGroupBodyImpl ( uint_t numThreads, uint_t sharingMode = 0 )\n        : m_numThreads(numThreads)\n        , m_sharingMode(sharingMode)\n        , m_taskGroup(NULL)\n        , m_barrier(numThreads)\n    {\n        ASSERT ( m_numThreads > 1, \"SharedGroupBody tests require concurrency\" );\n        ASSERT ( !(m_sharingMode & VagabondGroup) || m_numThreads == 2, \"In vagabond mode SharedGroupBody must be used with 2 threads only\" );\n        Harness::ConcurrencyTracker::Reset();\n        s_tasksExecuted = 0;\n        m_tasksSpawned = 0;\n        m_threadsReady = 0;\n        m_taskFunctor.m_pOwner = this;\n    }\n\n    void Run ( uint_t idx ) {\n#if TBBTEST_USE_TBB\n        tbb::task_scheduler_init init(g_MaxConcurrency);\n#endif\n        AssertLive();\n        if ( idx == 0 ) {\n            ASSERT ( !m_taskGroup && !m_tasksSpawned, \"SharedGroupBody must be reset before reuse\");\n            m_taskGroup = new Concurrency::task_group;\n            Spawn( c_numTasks0 );\n            Wait();\n            if ( m_sharingMode & VagabondGroup )\n                m_barrier.wait();\n            else\n                DeleteTaskGroup();\n        }\n        else {\n            while ( m_tasksSpawned == 0 )\n                __TBB_Yield();\n            ASSERT ( m_taskGroup, \"Task group is not initialized\");\n            Spawn (c_numTasks1);\n            if ( m_sharingMode & ParallelWait )\n                Wait();\n            if ( m_sharingMode & VagabondGroup ) {\n                ASSERT ( idx == 1, \"In vagabond mode SharedGroupBody must be used with 2 threads only\" );\n                m_barrier.wait();\n                DeleteTaskGroup();\n            }\n        }\n        AssertLive();\n    }\n};\n\natomic_t SharedGroupBodyImpl::s_tasksExecuted;\n\nclass  SharedGroupBody : NoAssign, Harness::NoAfterlife {\n    bool m_bOwner;\n    SharedGroupBodyImpl *m_pImpl;\npublic:\n    SharedGroupBody ( uint_t numThreads, uint_t sharingMode = 0 )\n        : m_bOwner(true)\n        , m_pImpl( new SharedGroupBodyImpl(numThreads, sharingMode) )\n    {}\n    SharedGroupBody ( const SharedGroupBody& src )\n        : NoAssign()\n        , Harness::NoAfterlife()\n        , m_bOwner(false)\n        , m_pImpl(src.m_pImpl)\n    {}\n    ~SharedGroupBody () {\n        if ( m_bOwner )\n            delete m_pImpl;\n    }\n    void operator() ( uint_t idx ) const { m_pImpl->Run(idx); }\n};\n\nclass RunAndWaitSyncronizationTestBody {\n    Harness::SpinBarrier& m_barrier;\n    tbb::atomic<bool>& m_completed;\n    tbb::task_group& m_tg;\npublic:\n    RunAndWaitSyncronizationTestBody(Harness::SpinBarrier& barrier, tbb::atomic<bool>& completed, tbb::task_group& tg)\n        : m_barrier(barrier), m_completed(completed), m_tg(tg) {}\n\n    void operator()() const {\n        m_barrier.wait();\n        for (volatile int i = 0; i < 100000; ++i) {}\n        m_completed = true;\n    }\n\n    void operator()(int id) const {\n        if (id == 0) {\n            m_tg.run_and_wait(*this);\n        } else {\n            m_barrier.wait();\n            m_tg.wait();\n            ASSERT(m_completed, \"A concurrent waiter has left the wait method earlier than work has finished\");\n        }\n    }\n};\n\nvoid TestParallelSpawn () {\n    NativeParallelFor( g_MaxConcurrency, SharedGroupBody(g_MaxConcurrency) );\n}\n\nvoid TestParallelWait () {\n    NativeParallelFor( g_MaxConcurrency, SharedGroupBody(g_MaxConcurrency, ParallelWait) );\n\n    Harness::SpinBarrier barrier(g_MaxConcurrency);\n    tbb::atomic<bool> completed;\n    completed = false;\n    tbb::task_group tg;\n    RunAndWaitSyncronizationTestBody b(barrier, completed, tg);\n    NativeParallelFor( g_MaxConcurrency, b );\n}\n\n// Tests non-stack-bound task group (the group that is allocated by one thread and destroyed by the other)\nvoid TestVagabondGroup () {\n    NativeParallelFor( 2, SharedGroupBody(2, VagabondGroup) );\n}\n\n//------------------------------------------------------------------------\n// Common requisites of the Fibonacci tests\n//------------------------------------------------------------------------\n\nconst uint_t N = 20;\nconst uint_t F = 6765;\n\natomic_t g_Sum;\n\n#define FIB_TEST_PROLOGUE() \\\n    const unsigned numRepeats = g_MaxConcurrency * (TBB_USE_DEBUG ? 4 : 16);    \\\n    Harness::ConcurrencyTracker::Reset()\n\n#define FIB_TEST_EPILOGUE(sum) \\\n    ASSERT( sum == numRepeats * F, NULL ); \\\n    REMARK(\"Realized parallelism in Fib test is %u out of %u\\n\", Harness::ConcurrencyTracker::PeakParallelism(), g_MaxConcurrency)\n\n//------------------------------------------------------------------------\n// Test for a complex tree of task groups\n//\n// The test executes a tree of task groups of the same sort with asymmetric\n// descendant nodes distribution at each level at each level.\n//\n// The chores are specified as functor objects. Each task group contains only one chore.\n//------------------------------------------------------------------------\n\ntemplate<uint_t Func(uint_t)>\nstruct FibTask : NoAssign, Harness::NoAfterlife {\n    uint_t* m_pRes;\n    const uint_t m_Num;\n    FibTask( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}\n    void operator() () const {\n        *m_pRes = Func(m_Num);\n    }\n};\n\nuint_t Fib_SpawnRightChildOnly ( uint_t n ) {\n    Harness::ConcurrencyTracker ct;\n    if( n<2 ) {\n        return n;\n    } else {\n        uint_t y = ~0u;\n        Concurrency::task_group tg;\n        tg.run( FibTask<Fib_SpawnRightChildOnly>(&y, n-1) );\n        uint_t x = Fib_SpawnRightChildOnly(n-2);\n        tg.wait();\n        return y+x;\n    }\n}\n\nvoid TestFib1 () {\n    FIB_TEST_PROLOGUE();\n    uint_t sum = 0;\n    for( unsigned i = 0; i < numRepeats; ++i )\n        sum += Fib_SpawnRightChildOnly(N);\n    FIB_TEST_EPILOGUE(sum);\n}\n\n\n//------------------------------------------------------------------------\n// Test for a mixed tree of task groups.\n//\n// The test executes a tree with multiple task of one sort at the first level,\n// each of which originates in its turn a binary tree of descendant task groups.\n//\n// The chores are specified both as functor objects and as function pointers\n//------------------------------------------------------------------------\n\nuint_t Fib_SpawnBothChildren( uint_t n ) {\n    Harness::ConcurrencyTracker ct;\n    if( n<2 ) {\n        return n;\n    } else {\n        uint_t  y = ~0u,\n                x = ~0u;\n        Concurrency::task_group tg;\n        tg.run( FibTask<Fib_SpawnBothChildren>(&x, n-2) );\n        tg.run( FibTask<Fib_SpawnBothChildren>(&y, n-1) );\n        tg.wait();\n        return y + x;\n    }\n}\n\nvoid RunFib2 () {\n    g_Sum += Fib_SpawnBothChildren(N);\n}\n\nvoid TestFib2 () {\n    FIB_TEST_PROLOGUE();\n    g_Sum = 0;\n    Concurrency::task_group rg;\n    for( unsigned i = 0; i < numRepeats - 1; ++i )\n        rg.run( &RunFib2 );\n    rg.wait();\n    rg.run( &RunFib2 );\n    rg.wait();\n    FIB_TEST_EPILOGUE(g_Sum);\n}\n\n\n//------------------------------------------------------------------------\n// Test for a complex tree of task groups\n// The chores are specified as task handles for recursive functor objects.\n//------------------------------------------------------------------------\n\nclass FibTask_SpawnRightChildOnly : NoAssign, Harness::NoAfterlife {\n    uint_t* m_pRes;\n    mutable uint_t m_Num;\n\npublic:\n    FibTask_SpawnRightChildOnly( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}\n    void operator() () const {\n        Harness::ConcurrencyTracker ct;\n        AssertLive();\n        if( m_Num < 2 ) {\n            *m_pRes = m_Num;\n        } else {\n            uint_t y = ~0u;\n            Concurrency::task_group tg;\n            Concurrency::task_handle<FibTask_SpawnRightChildOnly> h = FibTask_SpawnRightChildOnly(&y, m_Num-1);\n            tg.run( h );\n            m_Num -= 2;\n            tg.run_and_wait( *this );\n            *m_pRes += y;\n        }\n    }\n};\n\nuint_t RunFib3 ( uint_t n ) {\n    uint_t res = ~0u;\n    FibTask_SpawnRightChildOnly func(&res, n);\n    func();\n    return res;\n}\n\nvoid TestTaskHandle () {\n    FIB_TEST_PROLOGUE();\n    uint_t sum = 0;\n    for( unsigned i = 0; i < numRepeats; ++i )\n        sum += RunFib3(N);\n    FIB_TEST_EPILOGUE(sum);\n}\n\n//------------------------------------------------------------------------\n// Test for a mixed tree of task groups.\n// The chores are specified as task handles for both functor objects and function pointers\n//------------------------------------------------------------------------\n\ntemplate<class task_group_type>\nclass FibTask_SpawnBothChildren : NoAssign, Harness::NoAfterlife {\n    uint_t* m_pRes;\n    uint_t m_Num;\npublic:\n    FibTask_SpawnBothChildren( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}\n    void operator() () const {\n        Harness::ConcurrencyTracker ct;\n        AssertLive();\n        if( m_Num < 2 ) {\n            *m_pRes = m_Num;\n        } else {\n            uint_t  x = ~0u, // initialized only to suppress warning\n                    y = ~0u;\n            task_group_type tg;\n            Concurrency::task_handle<FibTask_SpawnBothChildren> h1 = FibTask_SpawnBothChildren(&y, m_Num-1),\n                                                                h2 = FibTask_SpawnBothChildren(&x, m_Num-2);\n            tg.run( h1 );\n            tg.run( h2 );\n            tg.wait();\n            *m_pRes = x + y;\n        }\n    }\n};\n\ntemplate<class task_group_type>\nvoid RunFib4 () {\n    uint_t res = ~0u;\n    FibTask_SpawnBothChildren<task_group_type> func(&res, N);\n    func();\n    g_Sum += res;\n}\n\ntemplate<class task_group_type>\nvoid TestTaskHandle2 () {\n    FIB_TEST_PROLOGUE();\n    g_Sum = 0;\n    task_group_type rg;\n    typedef tbb::aligned_space<handle_type> handle_space_t;\n    handle_space_t *handles = new handle_space_t[numRepeats];\n    handle_type *h = NULL;\n#if __TBB_ipf && __TBB_GCC_VERSION==40601\n    volatile // Workaround for unexpected exit from the loop below after the exception was caught\n#endif\n    unsigned i = 0;\n    for( ;; ++i ) {\n        h = handles[i].begin();\n#if __TBB_FUNC_PTR_AS_TEMPL_PARAM_BROKEN\n        new ( h ) handle_type((void(*)())RunFib4<task_group_type>);\n#else\n        new ( h ) handle_type(RunFib4<task_group_type>);\n#endif\n        if ( i == numRepeats - 1 )\n            break;\n        rg.run( *h );\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n        bool caught = false;\n        try {\n            if( i&1 ) rg.run( *h );\n            else rg.run_and_wait( *h );\n        }\n        catch ( Concurrency::invalid_multiple_scheduling& e ) {\n            ASSERT( e.what(), \"Error message is absent\" );\n            caught = true;\n        }\n        catch ( ... ) {\n            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unrecognized exception\" );\n        }\n        ASSERT ( caught, \"Expected invalid_multiple_scheduling exception is missing\" );\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n    }\n    ASSERT( i == numRepeats - 1, \"unexpected exit from the loop\" );\n    rg.run_and_wait( *h );\n\n    for( i = 0; i < numRepeats; ++i )\n#if __TBB_UNQUALIFIED_CALL_OF_DTOR_BROKEN\n        handles[i].begin()->Concurrency::task_handle<void(*)()>::~task_handle();\n#else\n        handles[i].begin()->~handle_type();\n#endif\n    delete []handles;\n    FIB_TEST_EPILOGUE(g_Sum);\n}\n\n#if __TBB_CPP11_LAMBDAS_PRESENT\n//------------------------------------------------------------------------\n// Test for a mixed tree of task groups.\n// The chores are specified as lambdas\n//------------------------------------------------------------------------\n\nvoid TestFibWithLambdas () {\n    REMARK (\"Lambdas test\");\n    FIB_TEST_PROLOGUE();\n    atomic_t sum;\n    sum = 0;\n    Concurrency::task_group rg;\n    for( unsigned i = 0; i < numRepeats; ++i )\n        rg.run( [&](){sum += Fib_SpawnBothChildren(N);} );\n    rg.wait();\n    FIB_TEST_EPILOGUE(sum);\n}\n\n//------------------------------------------------------------------------\n// Test for make_task.\n// The chores are specified as lambdas converted to task_handles.\n//------------------------------------------------------------------------\n\nvoid TestFibWithMakeTask () {\n    REMARK (\"Make_task test\\n\");\n    atomic_t sum;\n    sum = 0;\n    Concurrency::task_group rg;\n    const auto &h1 = Concurrency::make_task( [&](){sum += Fib_SpawnBothChildren(N);} );\n    const auto &h2 = Concurrency::make_task( [&](){sum += Fib_SpawnBothChildren(N);} );\n    rg.run( h1 );\n    rg.run_and_wait( h2 );\n    ASSERT( sum == 2 * F, NULL );\n}\n#endif /* __TBB_CPP11_LAMBDAS_PRESENT */\n\n\n//------------------------------------------------------------------------\n// Tests for exception handling and cancellation behavior.\n//------------------------------------------------------------------------\n\nclass test_exception : public std::exception\n{\n    const char* m_strDescription;\npublic:\n    test_exception ( const char* descr ) : m_strDescription(descr) {}\n\n    const char* what() const throw() __TBB_override { return m_strDescription; }\n};\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    #include \"tbb/tbb_exception.h\"\n    typedef tbb::captured_exception TestException;\n#else\n    typedef test_exception TestException;\n#endif\n\n#include <string.h>\n\n#define NUM_CHORES      512\n#define NUM_GROUPS      64\n#define SKIP_CHORES     (NUM_CHORES/4)\n#define SKIP_GROUPS     (NUM_GROUPS/4)\n#define EXCEPTION_DESCR1 \"Test exception 1\"\n#define EXCEPTION_DESCR2 \"Test exception 2\"\n\natomic_t g_ExceptionCount;\natomic_t g_TaskCount;\nunsigned g_ExecutedAtCancellation;\nbool g_Rethrow;\nbool g_Throw;\n#if __TBB_SILENT_CANCELLATION_BROKEN\n    volatile bool g_CancellationPropagationInProgress;\n    #define CATCH_ANY()                                     \\\n        __TBB_CATCH( ... ) {                                \\\n            if ( g_CancellationPropagationInProgress ) {    \\\n                if ( g_Throw ) {                            \\\n                    exceptionCaught = true;                 \\\n                    ++g_ExceptionCount;                     \\\n                }                                           \\\n            } else                                          \\\n                ASSERT( false, \"Unknown exception\" );       \\\n        }\n#else\n    #define CATCH_ANY()  __TBB_CATCH( ... ) { ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unknown exception\" ); }\n#endif\n\ninline\nvoid ResetGlobals ( bool bThrow, bool bRethrow ) {\n    g_Throw = bThrow;\n    g_Rethrow = bRethrow;\n#if __TBB_SILENT_CANCELLATION_BROKEN\n    g_CancellationPropagationInProgress = false;\n#endif\n    g_ExceptionCount = 0;\n    g_TaskCount = 0;\n    Harness::ConcurrencyTracker::Reset();\n}\n\nclass ThrowingTask : NoAssign, Harness::NoAfterlife {\n    atomic_t &m_TaskCount;\npublic:\n    ThrowingTask( atomic_t& counter ) : m_TaskCount(counter) {}\n    void operator() () const {\n        Harness::ConcurrencyTracker ct;\n        AssertLive();\n        if ( g_Throw ) {\n            if ( ++m_TaskCount == SKIP_CHORES )\n                __TBB_THROW( test_exception(EXCEPTION_DESCR1) );\n            __TBB_Yield();\n        }\n        else {\n            ++g_TaskCount;\n            while( !Concurrency::is_current_task_group_canceling() )\n                __TBB_Yield();\n        }\n    }\n};\n\nvoid LaunchChildren () {\n    atomic_t count;\n    count = 0;\n    Concurrency::task_group g;\n    bool exceptionCaught = false;\n    for( unsigned i = 0; i < NUM_CHORES; ++i )\n        g.run( ThrowingTask(count) );\n    Concurrency::task_group_status status = Concurrency::not_complete;\n    __TBB_TRY {\n        status = g.wait();\n    } __TBB_CATCH ( TestException& e ) {\n#if TBB_USE_EXCEPTIONS\n        ASSERT( e.what(), \"Empty what() string\" );\n        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR1) == 0, \"Unknown exception\" );\n#endif /* TBB_USE_EXCEPTIONS */\n        exceptionCaught = true;\n        ++g_ExceptionCount;\n    } CATCH_ANY();\n    ASSERT( !g_Throw || exceptionCaught || status == Concurrency::canceled, \"No exception in the child task group\" );\n    if ( g_Rethrow && g_ExceptionCount > SKIP_GROUPS ) {\n#if __TBB_SILENT_CANCELLATION_BROKEN\n        g_CancellationPropagationInProgress = true;\n#endif\n        __TBB_THROW( test_exception(EXCEPTION_DESCR2) );\n    }\n}\n\n#if TBB_USE_EXCEPTIONS\nvoid TestEh1 () {\n    ResetGlobals( true, false );\n    Concurrency::task_group rg;\n    for( unsigned i = 0; i < NUM_GROUPS; ++i )\n        // TBB version does not require taking function address\n        rg.run( &LaunchChildren );\n    try {\n        rg.wait();\n    } catch ( ... ) {\n        ASSERT( false, \"Unexpected exception\" );\n    }\n    ASSERT( g_ExceptionCount <= NUM_GROUPS, \"Too many exceptions from the child groups. The test is broken\" );\n    ASSERT( g_ExceptionCount == NUM_GROUPS, \"Not all child groups threw the exception\" );\n}\n\nvoid TestEh2 () {\n    ResetGlobals( true, true );\n    Concurrency::task_group rg;\n    bool exceptionCaught = false;\n    for( unsigned i = 0; i < NUM_GROUPS; ++i )\n        // TBB version does not require taking function address\n        rg.run( &LaunchChildren );\n    try {\n        rg.wait();\n    } catch ( TestException& e ) {\n        ASSERT( e.what(), \"Empty what() string\" );\n        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR2) == 0, \"Unknown exception\" );\n        ASSERT ( !rg.is_canceling(), \"wait() has not reset cancellation state\" );\n        exceptionCaught = true;\n    } CATCH_ANY();\n    ASSERT( exceptionCaught, \"No exception thrown from the root task group\" );\n    ASSERT( g_ExceptionCount >= SKIP_GROUPS, \"Too few exceptions from the child groups. The test is broken\" );\n    ASSERT( g_ExceptionCount <= NUM_GROUPS - SKIP_GROUPS, \"Too many exceptions from the child groups. The test is broken\" );\n    ASSERT( g_ExceptionCount < NUM_GROUPS - SKIP_GROUPS, \"None of the child groups was cancelled\" );\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n//------------------------------------------------------------------------\n// Tests for manual cancellation of the task_group hierarchy\n//------------------------------------------------------------------------\n\nvoid TestCancellation1 () {\n    ResetGlobals( false, false );\n    Concurrency::task_group rg;\n    for( unsigned i = 0; i < NUM_GROUPS; ++i )\n        // TBB version does not require taking function address\n        rg.run( &LaunchChildren );\n    ASSERT ( !Concurrency::is_current_task_group_canceling(), \"Unexpected cancellation\" );\n    ASSERT ( !rg.is_canceling(), \"Unexpected cancellation\" );\n#if __TBB_SILENT_CANCELLATION_BROKEN\n    g_CancellationPropagationInProgress = true;\n#endif\n    while ( g_MaxConcurrency > 1 && g_TaskCount == 0 )\n        __TBB_Yield();\n    rg.cancel();\n    g_ExecutedAtCancellation = g_TaskCount;\n    ASSERT ( rg.is_canceling(), \"No cancellation reported\" );\n    rg.wait();\n    ASSERT( g_TaskCount <= NUM_GROUPS * NUM_CHORES, \"Too many tasks reported. The test is broken\" );\n    ASSERT( g_TaskCount < NUM_GROUPS * NUM_CHORES, \"No tasks were cancelled. Cancellation model changed?\" );\n    ASSERT( g_TaskCount <= g_ExecutedAtCancellation + Harness::ConcurrencyTracker::PeakParallelism(), \"Too many tasks survived cancellation\" );\n}\n\n//------------------------------------------------------------------------\n// Tests for manual cancellation of the structured_task_group hierarchy\n//------------------------------------------------------------------------\n\nvoid StructuredLaunchChildren () {\n    atomic_t count;\n    count = 0;\n    Concurrency::structured_task_group g;\n    bool exceptionCaught = false;\n    typedef Concurrency::task_handle<ThrowingTask> throwing_handle_type;\n    tbb::aligned_space<throwing_handle_type,NUM_CHORES> handles;\n    for( unsigned i = 0; i < NUM_CHORES; ++i ) {\n        throwing_handle_type *h = handles.begin()+i;\n        new ( h ) throwing_handle_type( ThrowingTask(count) );\n        g.run( *h );\n    }\n    __TBB_TRY {\n        g.wait();\n    } __TBB_CATCH( TestException& e ) {\n#if TBB_USE_EXCEPTIONS\n        ASSERT( e.what(), \"Empty what() string\" );\n        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR1) == 0, \"Unknown exception\" );\n#endif /* TBB_USE_EXCEPTIONS */\n#if __TBB_SILENT_CANCELLATION_BROKEN\n        ASSERT ( !g.is_canceling() || g_CancellationPropagationInProgress, \"wait() has not reset cancellation state\" );\n#else\n        ASSERT ( !g.is_canceling(), \"wait() has not reset cancellation state\" );\n#endif\n        exceptionCaught = true;\n        ++g_ExceptionCount;\n    } CATCH_ANY();\n    ASSERT( !g_Throw || exceptionCaught, \"No exception in the child task group\" );\n    for( unsigned i = 0; i < NUM_CHORES; ++i )\n        (handles.begin()+i)->~throwing_handle_type();\n    if ( g_Rethrow && g_ExceptionCount > SKIP_GROUPS ) {\n#if __TBB_SILENT_CANCELLATION_BROKEN\n        g_CancellationPropagationInProgress = true;\n#endif\n        __TBB_THROW( test_exception(EXCEPTION_DESCR2) );\n    }\n}\n\nclass StructuredCancellationTestDriver {\n    tbb::aligned_space<handle_type,NUM_CHORES> m_handles;\n\npublic:\n    void Launch ( Concurrency::structured_task_group& rg ) {\n        ResetGlobals( false, false );\n        for( unsigned i = 0; i < NUM_GROUPS; ++i ) {\n            handle_type *h = m_handles.begin()+i;\n            new ( h ) handle_type( StructuredLaunchChildren );\n            rg.run( *h );\n        }\n        ASSERT ( !Concurrency::is_current_task_group_canceling(), \"Unexpected cancellation\" );\n        ASSERT ( !rg.is_canceling(), \"Unexpected cancellation\" );\n#if __TBB_SILENT_CANCELLATION_BROKEN\n        g_CancellationPropagationInProgress = true;\n#endif\n        while ( g_MaxConcurrency > 1 && g_TaskCount == 0 )\n            __TBB_Yield();\n    }\n\n    void Finish () {\n        for( unsigned i = 0; i < NUM_GROUPS; ++i )\n            (m_handles.begin()+i)->~handle_type();\n        ASSERT( g_TaskCount <= NUM_GROUPS * NUM_CHORES, \"Too many tasks reported. The test is broken\" );\n        ASSERT( g_TaskCount < NUM_GROUPS * NUM_CHORES, \"No tasks were cancelled. Cancellation model changed?\" );\n        ASSERT( g_TaskCount <= g_ExecutedAtCancellation + g_MaxConcurrency, \"Too many tasks survived cancellation\" );\n    }\n}; // StructuredCancellationTestDriver\n\nvoid TestStructuredCancellation1 () {\n    StructuredCancellationTestDriver driver;\n    Concurrency::structured_task_group sg;\n    driver.Launch( sg );\n    sg.cancel();\n    g_ExecutedAtCancellation = g_TaskCount;\n    ASSERT ( sg.is_canceling(), \"No cancellation reported\" );\n    sg.wait();\n    driver.Finish();\n}\n\n#if TBB_USE_EXCEPTIONS\n#if defined(_MSC_VER)\n    #pragma warning (disable: 4127)\n#endif\n\ntemplate<bool Throw>\nvoid TestStructuredCancellation2 () {\n    bool exception_occurred = false,\n         unexpected_exception = false;\n    StructuredCancellationTestDriver driver;\n    try {\n        Concurrency::structured_task_group tg;\n        driver.Launch( tg );\n        if ( Throw )\n            throw int(); // Initiate stack unwinding\n    }\n    catch ( const Concurrency::missing_wait& e ) {\n        ASSERT( e.what(), \"Error message is absent\" );\n        exception_occurred = true;\n        unexpected_exception = Throw;\n    }\n    catch ( int ) {\n        exception_occurred = true;\n        unexpected_exception = !Throw;\n    }\n    catch ( ... ) {\n        exception_occurred = unexpected_exception = true;\n    }\n    ASSERT( exception_occurred, NULL );\n    ASSERT( !unexpected_exception, NULL );\n    driver.Finish();\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\nvoid EmptyFunction () {}\n\nvoid TestStructuredWait () {\n    Concurrency::structured_task_group sg;\n    handle_type h(EmptyFunction);\n    sg.run(h);\n    sg.wait();\n    handle_type h2(EmptyFunction);\n    sg.run(h2);\n    sg.wait();\n}\n\nstruct TestFunctor {\n    void operator()() { ASSERT( false, \"Non-const operator called\" ); }\n    void operator()() const { /* library requires this overload only */ }\n};\n\nvoid TestConstantFunctorRequirement() {\n    tbb::task_group g;\n    TestFunctor tf;\n    g.run( tf ); g.wait();\n    g.run_and_wait( tf );\n}\n//------------------------------------------------------------------------\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nnamespace TestMoveSemanticsNS {\n    struct TestFunctor {\n        void operator()() const {};\n    };\n\n    struct MoveOnlyFunctor : MoveOnly, TestFunctor {\n        MoveOnlyFunctor() : MoveOnly() {};\n        MoveOnlyFunctor(MoveOnlyFunctor&& other) : MoveOnly(std::move(other)) {};\n    };\n\n    struct MovePreferableFunctor : Movable, TestFunctor {\n        MovePreferableFunctor() : Movable() {};\n        MovePreferableFunctor(MovePreferableFunctor&& other) : Movable(std::move(other)) {};\n        MovePreferableFunctor(const MovePreferableFunctor& other) : Movable(other) {};\n    };\n\n    struct NoMoveNoCopyFunctor : NoCopy, TestFunctor {\n        NoMoveNoCopyFunctor() : NoCopy() {};\n        // mv ctor is not allowed as cp ctor from parent NoCopy\n    private:\n        NoMoveNoCopyFunctor(NoMoveNoCopyFunctor&&);\n    };\n\n    void TestFunctorsWithinTaskHandles() {\n        // working with task_handle rvalues is not supported in task_group\n\n        tbb::task_group tg;\n        MovePreferableFunctor mpf;\n        typedef tbb::task_handle<MoveOnlyFunctor> th_mv_only_type;\n        typedef tbb::task_handle<MovePreferableFunctor> th_mv_pref_type;\n\n        th_mv_only_type th_mv_only = th_mv_only_type(MoveOnlyFunctor());\n        tg.run_and_wait(th_mv_only);\n\n        th_mv_only_type th_mv_only1 = th_mv_only_type(MoveOnlyFunctor());\n        tg.run(th_mv_only1);\n        tg.wait();\n\n        th_mv_pref_type th_mv_pref = th_mv_pref_type(mpf);\n        tg.run_and_wait(th_mv_pref);\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n\n        th_mv_pref_type th_mv_pref1 = th_mv_pref_type(std::move(mpf));\n        tg.run_and_wait(th_mv_pref1);\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n\n        th_mv_pref_type th_mv_pref2 = th_mv_pref_type(mpf);\n        tg.run(th_mv_pref2);\n        tg.wait();\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n\n        th_mv_pref_type th_mv_pref3 = th_mv_pref_type(std::move(mpf));\n        tg.run(th_mv_pref3);\n        tg.wait();\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n    }\n\n    void TestBareFunctors() {\n        tbb::task_group tg;\n        MovePreferableFunctor mpf;\n        // run_and_wait() doesn't have any copies or moves of arguments inside the impl\n        tg.run_and_wait( NoMoveNoCopyFunctor() );\n\n        tg.run( MoveOnlyFunctor() );\n        tg.wait();\n\n        tg.run( mpf );\n        tg.wait();\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n\n        tg.run( std::move(mpf) );\n        tg.wait();\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n    }\n\n    void TestMakeTask() {\n        MovePreferableFunctor mpf;\n\n        tbb::make_task( MoveOnly() );\n\n        tbb::make_task( mpf );\n        ASSERT(mpf.alive, \"object was moved when was passed by lval\");\n        mpf.Reset();\n\n        tbb::make_task( std::move(mpf) );\n        ASSERT(!mpf.alive, \"object was copied when was passed by rval\");\n        mpf.Reset();\n    }\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\nvoid TestMoveSemantics() {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    TestMoveSemanticsNS::TestBareFunctors();\n    TestMoveSemanticsNS::TestFunctorsWithinTaskHandles();\n    TestMoveSemanticsNS::TestMakeTask();\n#else\n    REPORT(\"Known issue: move support tests are skipped.\\n\");\n#endif\n}\n//------------------------------------------------------------------------\n\n\nint TestMain () {\n    REMARK (\"Testing %s task_group functionality\\n\", TBBTEST_USE_TBB ? \"TBB\" : \"PPL\");\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        g_MaxConcurrency = p;\n#if TBBTEST_USE_TBB\n        tbb::task_scheduler_init init(p);\n#else\n        Concurrency::SchedulerPolicy sp( 4,\n                                Concurrency::SchedulerKind, Concurrency::ThreadScheduler,\n                                Concurrency::MinConcurrency, 1,\n                                Concurrency::MaxConcurrency, p,\n                                Concurrency::TargetOversubscriptionFactor, 1);\n        Concurrency::Scheduler  *s = Concurrency::Scheduler::Create( sp );\n#endif /* !TBBTEST_USE_TBB */\n        if ( p > 1 ) {\n            TestParallelSpawn();\n            TestParallelWait();\n            TestVagabondGroup();\n        }\n        TestFib1();\n        TestFib2();\n        TestTaskHandle();\n        TestTaskHandle2<Concurrency::task_group>();\n        TestTaskHandle2<Concurrency::structured_task_group>();\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        TestFibWithLambdas();\n        TestFibWithMakeTask();\n#endif\n        TestCancellation1();\n        TestStructuredCancellation1();\n#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n        TestEh1();\n        TestEh2();\n        TestStructuredWait();\n        TestStructuredCancellation2<true>();\n#if !(__TBB_THROW_FROM_DTOR_BROKEN || __TBB_STD_UNCAUGHT_EXCEPTION_BROKEN)\n        TestStructuredCancellation2<false>();\n#else\n        REPORT(\"Known issue: TestStructuredCancellation2<false>() is skipped.\\n\");\n#endif\n#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */\n#if !TBBTEST_USE_TBB\n        s->Release();\n#endif\n    }\n    TestConstantFunctorRequirement();\n#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n    REPORT(\"Known issue: exception handling tests are skipped.\\n\");\n#endif\n    TestMoveSemantics();\n    return Harness::Done;\n}\n\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n\n#include \"harness.h\"\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_leaks.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*  The test uses \"single produces multiple consumers\" (SPMC )pattern to check\n    if the memory of the tasks stolen by consumer threads is returned to the\n    producer thread and is reused.\n\n    The test consists of a series of iterations, which execute a task tree.\n    the test fails is the memory consumption is not stabilized during some\n    number of iterations.\n\n    After the memory consumption stabilized the memory state is perturbed by\n    switching producer thread, and the check is repeated.\n*/\n\n#define HARNESS_DEFAULT_MIN_THREADS -1\n\n#define  __TBB_COUNT_TASK_NODES 1\n#include \"harness_inject_scheduler.h\"\n\n#include \"tbb/atomic.h\"\n#include \"harness_assert.h\"\n#include <cstdlib>\n\n\n// Test configuration parameters\n\n//! Maximal number of test iterations\nconst int MaxIterations = 600;\n//! Number of iterations during which the memory consumption must stabilize\nconst int AsymptoticRange = 100;\n//! Number of times the memory state is perturbed to repeat the check\nconst int NumProducerSwitches = 2;\n//! Number of iterations after which the success of producer switch is checked\nconst int ProducerCheckTimeout = 10;\n//! Number of initial iteration used to collect statistics to be used in later checks\nconst int InitialStatsIterations = 20;\n//! Inner iterations of RunTaskGenerators()\nconst int TaskGeneratorsIterations = TBB_USE_DEBUG ? 30 : 100;\n\ntbb::atomic<int> Count;\ntbb::atomic<tbb::task*> Exchanger;\ntbb::internal::scheduler* Producer;\n\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"harness.h\"\n\nusing namespace tbb;\nusing namespace tbb::internal;\n\nclass ChangeProducer: public tbb::task {\npublic:\n    tbb::task* execute() __TBB_override {\n        if( is_stolen_task() ) {\n            Producer = internal::governor::local_scheduler();\n        }\n        return NULL;\n    }\n};\n\nclass TaskGenerator: public tbb::task {\n    const int my_child_count;\n    int my_depth;\npublic:\n    TaskGenerator(int child_count, int d) : my_child_count(child_count), my_depth(d) {\n        ASSERT(my_child_count>1, \"The TaskGenerator should produce at least two children\");\n    }\n    tbb::task* execute() __TBB_override {\n        if( my_depth>0 ) {\n            int child_count = my_child_count;\n            scheduler* my_sched = internal::governor::local_scheduler();\n            tbb::task& c  = *new( allocate_continuation() ) tbb::empty_task;\n            c.set_ref_count( child_count );\n            recycle_as_child_of(c);\n            --child_count;\n            if( Producer==my_sched ) {\n                // produce a task and put it into Exchanger\n                tbb::task* t = new( c.allocate_child() ) tbb::empty_task;\n                --child_count;\n                t = Exchanger.fetch_and_store(t);\n                if( t ) spawn(*t);\n            } else {\n                tbb::task* t = Exchanger.fetch_and_store(NULL);\n                if( t ) spawn(*t);\n            }\n            while( child_count ) {\n                tbb::task* t = new( c.allocate_child() ) TaskGenerator(my_child_count, my_depth-1);\n                if( my_depth >4 ) enqueue(*t);\n                else              spawn(*t);\n                --child_count;\n            }\n            --my_depth;\n            return this;\n        } else {\n            tbb::task* t = Exchanger.fetch_and_store(NULL);\n            if( t ) spawn(*t);\n            return NULL;\n        }\n    }\n};\n\n#include \"harness_memory.h\"\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n    // VS2008/VC9 seems to have an issue\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <math.h>\n#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif\n\nvoid RunTaskGenerators( bool switchProducer = false, bool checkProducer = false ) {\n    if( switchProducer )\n        Producer = NULL;\n    tbb::task* dummy_root = new( tbb::task::allocate_root() ) tbb::empty_task;\n    dummy_root->set_ref_count( 2 );\n    // If no producer, start elections; some worker will take the role\n    if( Producer )\n        tbb::task::spawn( *new( dummy_root->allocate_child() ) tbb::empty_task );\n    else\n        tbb::task::spawn( *new( dummy_root->allocate_child() ) ChangeProducer );\n    if( checkProducer && !Producer )\n        REPORT(\"Warning: producer has not changed after 10 attempts; running on a single core?\\n\");\n    for( int j=0; j<TaskGeneratorsIterations; ++j ) {\n        if( j&1 ) {\n            tbb::task& t = *new( tbb::task::allocate_root() ) TaskGenerator(/*child_count=*/4, /*depth=*/6);\n            tbb::task::spawn_root_and_wait(t);\n        } else {\n            tbb::task& t = *new (tbb::task::allocate_additional_child_of(*dummy_root))\n                                TaskGenerator(/*child_count=*/4, /*depth=*/6);\n            tbb::task::enqueue(t);\n        }\n    }\n    dummy_root->wait_for_all();\n    tbb::task::destroy( *dummy_root );\n}\n\nclass TaskList: public tbb::task {\n    const int my_num_childs;\npublic:\n    TaskList(const int num_childs) : my_num_childs(num_childs) {}\n    tbb::task* execute() __TBB_override {\n        tbb::task_list list;\n        for (int i=0; i<my_num_childs; ++i)\n        {\n            list.push_back( *new( allocate_child() ) tbb::empty_task );\n        }\n        set_ref_count(my_num_childs+1);\n        spawn(list);\n\n        wait_for_all();\n        return 0;\n    }\n};\n\nvoid RunTaskListGenerator()\n{\n    const int max_num_childs = 10000;\n    int num_childs=3;\n\n    while ( num_childs < max_num_childs )\n    {\n        tbb::task& root = *new( tbb::task::allocate_root() ) TaskList(num_childs);\n\n        tbb::task::spawn_root_and_wait(root);\n\n        num_childs = 3 * num_childs;\n    }\n}\n\n//! Tests whether task scheduler allows thieves to hoard task objects.\n/** The test takes a while to run, so we run it only with the default\n    number of threads. */\nvoid TestTaskReclamation() {\n    REMARK(\"testing task reclamation\\n\");\n\n    size_t initial_amount_of_memory = 0;\n    double task_count_sum = 0;\n    double task_count_sum_square = 0;\n    double average, sigma;\n\n    tbb::task_scheduler_init init (MinThread);\n    REMARK(\"Starting with %d threads\\n\", MinThread);\n    // For now, the master will produce \"additional\" tasks; later a worker will replace it;\n    Producer  = internal::governor::local_scheduler();\n    int N = InitialStatsIterations;\n    // First N iterations fill internal buffers and collect initial statistics\n    for( int i=0; i<N; ++i ) {\n        // First N iterations fill internal buffers and collect initial statistics\n        RunTaskGenerators();\n        RunTaskListGenerator();\n\n        size_t m = GetMemoryUsage();\n        if( m-initial_amount_of_memory > 0)\n            initial_amount_of_memory = m;\n\n        intptr_t n = internal::governor::local_scheduler()->get_task_node_count( /*count_arena_workers=*/true );\n        task_count_sum += n;\n        task_count_sum_square += n*n;\n\n        REMARK( \"Consumed %ld bytes and %ld objects (iteration=%d)\\n\", long(m), long(n), i );\n    }\n    // Calculate statistical values\n    average = task_count_sum / N;\n    sigma   = sqrt( (task_count_sum_square - task_count_sum*task_count_sum/N)/N );\n    REMARK(\"Average task count: %g, sigma: %g, sum: %g, square sum:%g \\n\", average, sigma, task_count_sum, task_count_sum_square);\n\n    int     last_error_iteration = 0,\n            producer_switch_iteration = 0,\n            producer_switches = 0;\n    bool    switchProducer = false,\n            checkProducer = false;\n    for( int i=0; i < MaxIterations; ++i ) {\n        // These iterations check for excessive memory use and unreasonable task count\n        RunTaskGenerators( switchProducer, checkProducer );\n        RunTaskListGenerator();\n\n        intptr_t n = internal::governor::local_scheduler()->get_task_node_count( /*count_arena_workers=*/true );\n        size_t m = GetMemoryUsage();\n\n        if( (m-initial_amount_of_memory > 0) && (n > average+4*sigma) ) {\n            // Use 4*sigma interval (for normal distribution, 3*sigma contains ~99% of values).\n            REMARK( \"Warning: possible leak of up to %ld bytes; currently %ld cached task objects (iteration=%d)\\n\",\n                    static_cast<unsigned long>(m-initial_amount_of_memory), long(n), i );\n            last_error_iteration = i;\n            initial_amount_of_memory = m;\n        } else {\n            REMARK( \"Consumed %ld bytes and %ld objects (iteration=%d)\\n\", long(m), long(n), i );\n        }\n        if ( i == last_error_iteration + AsymptoticRange ) {\n            if ( producer_switches++ == NumProducerSwitches )\n                break;\n            else {\n                last_error_iteration = producer_switch_iteration = i;\n                switchProducer = true;\n            }\n        }\n        else {\n            switchProducer = false;\n            checkProducer = producer_switch_iteration && (i == producer_switch_iteration + ProducerCheckTimeout);\n        }\n    }\n    ASSERT( last_error_iteration < MaxIterations - AsymptoticRange, \"The amount of allocated tasks keeps growing. Leak is possible.\" );\n}\n\nint TestMain () {\n    if( !GetMemoryUsage() ) {\n        REMARK(\"GetMemoryUsage is not implemented for this platform\\n\");\n        return Harness::Skipped;\n    }\n    TestTaskReclamation();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_priority.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include \"harness.h\"\n\n#if __TBB_GCC_STRICT_ALIASING_BROKEN\n    #pragma GCC diagnostic ignored \"-Wstrict-aliasing\"\n#endif\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n#include <cstdlib>\n\n#if _MSC_VER && __TBB_NO_IMPLICIT_LINKAGE\n// plays around __TBB_NO_IMPLICIT_LINKAGE. __TBB_LIB_NAME should be defined (in makefiles)\n    #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n#endif\n\nconst int NumIterations = 100;\nconst int NumLeafTasks = 2;\nint MinBaseDepth = 8;\nint MaxBaseDepth = 10;\nint BaseDepth = 0;\n\nconst int DesiredNumThreads = 12;\n\nconst int NumTests = 8;\nint TestSwitchBetweenMastersRepeats = 4;\n\nint g_NumMasters = 0;\nvolatile intptr_t *g_LeavesExecuted = NULL;\n\nint g_TestFailures[NumTests];\nint g_CurConfig = 0;\n\nint P = 0;\n\n#if !__TBB_TASK_PRIORITY\nnamespace tbb {\n    enum priority_t {\n        priority_low = 0,\n        priority_normal = 1,\n        priority_high = 2\n    };\n}\n#endif /* __TBB_TASK_PRIORITY */\n\ntbb::priority_t Low,\n                High;\nint PreemptionActivatorId = 1;\n\nenum Options {\n    NoPriorities = 0,\n    TestPreemption = 1,\n    Flog = 2,\n    FlogEncloser = Flog | 4\n};\n\nconst char *PriorityName(tbb::priority_t p) {\n    if( p == tbb::priority_high ) return \"high\";\n    if( p == tbb::priority_normal ) return \"normal\";\n    if( p == tbb::priority_low ) return \"low\";\n    return \"bad\";\n}\n\nvoid PrepareGlobals ( int numMasters ) {\n    ASSERT( !g_NumMasters && !g_LeavesExecuted, NULL );\n    g_NumMasters = numMasters;\n    if ( !g_LeavesExecuted )\n        g_LeavesExecuted = new intptr_t[numMasters];\n    g_CurConfig = 0;\n    memset( const_cast<intptr_t*>(g_LeavesExecuted), 0, sizeof(intptr_t) * numMasters );\n    memset( g_TestFailures, 0, sizeof(int) * NumTests );\n}\n\nvoid ClearGlobals () {\n    ASSERT( g_LeavesExecuted, NULL );\n    delete [] g_LeavesExecuted;\n    g_LeavesExecuted = NULL;\n    g_NumMasters = 0;\n    REMARK(\"\\r                                                             \\r\");\n}\n\nclass LeafTask : public tbb::task {\n    int m_tid;\n    uintptr_t m_opts;\n\n    tbb::task* execute () __TBB_override {\n        volatile int anchor = 0;\n        for ( int i = 0; i < NumIterations; ++i )\n            anchor += i;\n        __TBB_FetchAndAddW(g_LeavesExecuted + m_tid, 1);\n#if __TBB_TASK_PRIORITY\n        ASSERT( !m_opts || (m_opts & Flog) || (!(m_opts & TestPreemption) ^ (m_tid == PreemptionActivatorId)), NULL );\n        if ( (m_opts & TestPreemption) && g_LeavesExecuted[0] > P && group_priority() == tbb::priority_normal ) {\n            ASSERT( m_tid == PreemptionActivatorId, NULL );\n            ASSERT( (PreemptionActivatorId == 1 ? High > tbb::priority_normal : Low < tbb::priority_normal), NULL );\n            set_group_priority( PreemptionActivatorId == 1 ? High : Low );\n        }\n#endif /* __TBB_TASK_PRIORITY */\n        return NULL;\n    }\npublic:\n    LeafTask ( int tid, uintptr_t opts ) : m_tid(tid), m_opts(opts) {\n        ASSERT( tid < g_NumMasters, NULL );\n    }\n};\n\ntemplate<class NodeType>\nclass NodeTask : public tbb::task {\nprotected:\n    int m_tid;\n    int m_depth;\n    uintptr_t m_opts;\n    task *m_root;\n\n    void SpawnChildren ( task* parent_node ) {\n        ASSERT( m_depth > 0, NULL );\n        if ( g_LeavesExecuted[m_tid] % (100 / m_depth) == 0 ) {\n            if ( m_opts & Flog ) {\n#if __TBB_TASK_PRIORITY\n                task *r = m_opts & FlogEncloser ? this : m_root;\n                tbb::priority_t p = r->group_priority();\n                r->set_group_priority( p == Low ? High : Low );\n#endif /* __TBB_TASK_PRIORITY */\n            }\n            else\n                __TBB_Yield();\n        }\n        parent_node->set_ref_count(NumLeafTasks + 1);\n        --m_depth;\n        for ( int i = 0; i < NumLeafTasks; ++i ) {\n            task *t = m_depth ? (task*) new(parent_node->allocate_child()) NodeType(m_tid, m_depth, m_opts, m_root)\n                              : (task*) new(parent_node->allocate_child()) LeafTask(m_tid, m_opts);\n            task::spawn(*t);\n        }\n    }\n\npublic:\n    NodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )\n        : m_tid(tid), m_depth(_depth), m_opts(opts), m_root(r)\n    {}\n};\n\nclass NestedGroupNodeTask : public NodeTask<NestedGroupNodeTask> {\n    task* execute () __TBB_override {\n        tbb::task_group_context ctx; // Use bound context\n        tbb::empty_task &r = *new( task::allocate_root(ctx) ) tbb::empty_task;\n        SpawnChildren(&r);\n        r.wait_for_all();\n        task::destroy(r);\n        return NULL;\n    }\npublic:\n    NestedGroupNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )\n        : NodeTask<NestedGroupNodeTask>(tid, _depth, opts, r)\n    {}\n};\n\nclass BlockingNodeTask : public NodeTask<BlockingNodeTask> {\n    task* execute () __TBB_override {\n        SpawnChildren(this);\n        wait_for_all();\n        return NULL;\n    }\npublic:\n    BlockingNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )\n        : NodeTask<BlockingNodeTask>(tid, _depth, opts, r) {}\n};\n\nclass NonblockingNodeTask : public NodeTask<NonblockingNodeTask> {\n    task* execute () __TBB_override {\n        if ( m_depth < 0 )\n            return NULL; // I'm just a continuation now\n        recycle_as_safe_continuation();\n        SpawnChildren(this);\n        m_depth = -1;\n        return NULL;\n    }\npublic:\n    NonblockingNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )\n        : NodeTask<NonblockingNodeTask>(tid, _depth, opts, r)\n    {}\n};\n\ntemplate<class NodeType>\nclass MasterBodyBase : NoAssign, Harness::NoAfterlife {\nprotected:\n    uintptr_t m_opts;\n\npublic:\n    void RunTaskForest ( int id ) const {\n        ASSERT( id < g_NumMasters, NULL );\n        g_LeavesExecuted[id] = 0;\n        int d = BaseDepth + id;\n        tbb::task_scheduler_init init(P-1);\n        tbb::task_group_context ctx (tbb::task_group_context::isolated);\n        tbb::empty_task &r = *new( tbb::task::allocate_root(ctx) ) tbb::empty_task;\n        const int R = 4;\n        r.set_ref_count( R * P + 1 );\n        // Only PreemptionActivator thread changes its task tree priority in preemption test mode\n        const uintptr_t opts = (id == PreemptionActivatorId) ? m_opts : (m_opts & ~(uintptr_t)TestPreemption);\n        for ( int i = 0; i < R; ++i ) {\n            for ( int j = 1; j < P; ++j )\n                r.spawn( *new(r.allocate_child()) NodeType(id, MinBaseDepth + id, opts, &r) );\n            r.spawn( *new(r.allocate_child()) NodeType(id, d, opts, &r) );\n        }\n        int count = 1;\n        intptr_t lastExecuted = 0;\n        while ( r.ref_count() > 1 ) {\n            // Give workers time to make some progress.\n            for ( int i = 0; i < 10 * count; ++i )\n                __TBB_Yield();\n#if __TBB_TASK_PRIORITY\n            if ( lastExecuted == g_LeavesExecuted[id] ) {\n                // No progress. Likely all workers left to higher priority arena,\n                // and then returned to RML. Request workers back from RML.\n                tbb::task::enqueue( *new(tbb::task::allocate_root() ) tbb::empty_task, id == 0 ? Low : High );\n                Harness::Sleep(count);\n#if __TBB_ipf\n                // Increased sleep periods are required on systems with unfair hyperthreading (Itanium(R) 2 processor)\n                count += 10;\n#endif\n            }\n            else {\n                count = 1;\n                lastExecuted = g_LeavesExecuted[id];\n            }\n#else /* !__TBB_TASK_PRIORITY */\n            (void)lastExecuted;\n            tbb::task::enqueue( *new(tbb::task::allocate_root() ) tbb::empty_task );\n#endif /* !__TBB_TASK_PRIORITY */\n        }\n        ASSERT( g_LeavesExecuted[id] == R * ((1 << d) + ((P - 1) * (1 << (MinBaseDepth + id)))), NULL );\n        g_LeavesExecuted[id] = -1;\n        tbb::task::destroy(r);\n    }\n\n    MasterBodyBase ( uintptr_t opts ) : m_opts(opts) {}\n};\n\ntemplate<class NodeType>\nclass MasterBody : public MasterBodyBase<NodeType> {\n    int m_testIndex;\npublic:\n    void operator() ( int id ) const {\n        this->RunTaskForest(id);\n        if ( this->m_opts & Flog )\n            return;\n        if ( this->m_opts & TestPreemption ) {\n            if ( id == 1 && g_LeavesExecuted[0] == -1 ) {\n                //REMARK( \"Warning: Low priority master finished too early [depth %d]\\n\", Depth );\n                ++g_TestFailures[m_testIndex];\n            }\n        }\n        else {\n            if ( id == 0 && g_LeavesExecuted[1] == -1 ) {\n                //REMARK( \"Warning: Faster master takes too long [depth %d]\\n\", Depth );\n                ++g_TestFailures[m_testIndex];\n            }\n        }\n    }\n\n    MasterBody ( int idx, uintptr_t opts ) : MasterBodyBase<NodeType>(opts), m_testIndex(idx) {}\n};\n\ntemplate<class NodeType>\nvoid RunPrioritySwitchBetweenTwoMasters ( int idx, uintptr_t opts ) {\n    ASSERT( idx < NumTests, NULL );\n    REMARK( \"Config %d: idx=%i, opts=%u\\r\", ++g_CurConfig, idx, (unsigned)opts );\n    NativeParallelFor ( 2, MasterBody<NodeType>(idx, opts) );\n    Harness::Sleep(50);\n}\n\nvoid TestPrioritySwitchBetweenTwoMasters () {\n    if ( P > DesiredNumThreads ) {\n        REPORT_ONCE( \"Known issue: TestPrioritySwitchBetweenTwoMasters is skipped for big number of threads\\n\" );\n        return;\n    }\n    tbb::task_scheduler_init init; // keeps the market alive to reduce the amount of TBB warnings\n    REMARK( \"Stress tests: %s / %s \\n\", Low == tbb::priority_low ? \"Low\" : \"Normal\", High == tbb::priority_normal ? \"Normal\" : \"High\" );\n    PrepareGlobals( 2 );\n    for ( int i = 0; i < TestSwitchBetweenMastersRepeats; ++i ) {\n        for ( BaseDepth = MinBaseDepth; BaseDepth <= MaxBaseDepth; ++BaseDepth ) {\n            RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 0, NoPriorities );\n            RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 1, TestPreemption );\n            RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 2, NoPriorities );\n            RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 3, TestPreemption );\n            if ( i == 0 ) {\n                RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 4, Flog );\n                RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 5, Flog );\n                RunPrioritySwitchBetweenTwoMasters<NestedGroupNodeTask>( 6, Flog );\n                RunPrioritySwitchBetweenTwoMasters<NestedGroupNodeTask>( 7, FlogEncloser );\n            }\n        }\n    }\n#if __TBB_TASK_PRIORITY\n    const int NumRuns = TestSwitchBetweenMastersRepeats * (MaxBaseDepth - MinBaseDepth + 1);\n    for ( int i = 0; i < NumTests; ++i ) {\n        if ( g_TestFailures[i] )\n            REMARK( \"Test %d: %d failures in %d runs\\n\", i, g_TestFailures[i], NumRuns );\n        if ( g_TestFailures[i] * 100 / NumRuns > 50 ) {\n            if ( i == 1 )\n                REPORT_ONCE( \"Known issue: priority effect is limited in case of blocking-style nesting\\n\" );\n            else\n                REPORT( \"Warning: test %d misbehaved too often (%d out of %d)\\n\", i, g_TestFailures[i], NumRuns );\n        }\n    }\n#endif /* __TBB_TASK_PRIORITY */\n    ClearGlobals();\n}\n\nclass SingleChildRootTask : public tbb::task {\n    tbb::task* execute () __TBB_override {\n        set_ref_count(2);\n        spawn ( *new(allocate_child()) tbb::empty_task );\n        wait_for_all();\n        return NULL;\n    }\n};\n\nint TestSimplePriorityOps ( tbb::priority_t prio ) {\n    tbb::task_scheduler_init init;\n    tbb::task_group_context ctx;\n#if __TBB_TASK_PRIORITY\n    ctx.set_priority( prio );\n#else /* !__TBB_TASK_PRIORITY */\n    (void)prio;\n#endif /* !__TBB_TASK_PRIORITY */\n    tbb::task *r = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;\n    r->set_ref_count(2);\n    r->spawn ( *new(r->allocate_child()) tbb::empty_task );\n    REMARK( \"TestSimplePriorityOps: waiting for a child\\n\" );\n    r->wait_for_all();\n    ASSERT( !r->ref_count(), NULL );\n    REMARK( \"TestLowPriority: executing an empty root\\n\" );\n    tbb::task::spawn_root_and_wait(*r);\n    r = new( tbb::task::allocate_root(ctx) ) SingleChildRootTask;\n    REMARK( \"TestLowPriority: executing a root with a single child\\n\" );\n    tbb::task::spawn_root_and_wait(*r);\n    return 0;\n}\n\n#include \"tbb/parallel_for.h\"\n\nvoid EmulateWork( int ) {\n    for ( int i = 0; i < 1000; ++i )\n        __TBB_Yield();\n}\n\nclass PeriodicActivitiesBody {\npublic:\n    static const int parallelIters[2];\n    static const int seqIters[2];\n    static int mode;\n    void operator() ( int id ) const {\n        tbb::task_group_context ctx;\n#if __TBB_TASK_PRIORITY\n        ctx.set_priority( id ? High : Low );\n#else /* !__TBB_TASK_PRIORITY */\n        (void)id;\n#endif /* !__TBB_TASK_PRIORITY */\n        for ( int i = 0; i < seqIters[mode]; ++i ) {\n            tbb::task_scheduler_init init;\n            tbb::parallel_for( 1, parallelIters[mode], &EmulateWork, ctx );\n        }\n    }\n};\n\nconst int PeriodicActivitiesBody::parallelIters[] = {10000, 100};\nconst int PeriodicActivitiesBody::seqIters[] = {5, 2};\nint PeriodicActivitiesBody::mode = 0;\n\nvoid TestPeriodicConcurrentActivities () {\n    REMARK( \"TestPeriodicConcurrentActivities: %s / %s \\n\", Low == tbb::priority_low ? \"Low\" : \"Normal\", High == tbb::priority_normal ? \"Normal\" : \"High\" );\n    NativeParallelFor ( 2, PeriodicActivitiesBody() );\n}\n\n#include \"harness_bad_expr.h\"\n\nvoid TestPriorityAssertions () {\n#if TRY_BAD_EXPR_ENABLED && __TBB_TASK_PRIORITY\n    REMARK( \"TestPriorityAssertions\\n\" );\n    tbb::task_scheduler_init init; // to avoid autoinit that'd affect subsequent tests\n    tbb::priority_t bad_low_priority = tbb::priority_t( tbb::priority_low - 1 ),\n                    bad_high_priority = tbb::priority_t( tbb::priority_high + 1 );\n    tbb::task_group_context ctx;\n    // Catch assertion failures\n    tbb::set_assertion_handler( AssertionFailureHandler );\n    TRY_BAD_EXPR( ctx.set_priority( bad_low_priority ), \"Invalid priority level value\" );\n    tbb::task &t = *new( tbb::task::allocate_root() ) tbb::empty_task;\n    TRY_BAD_EXPR( tbb::task::enqueue( t, bad_high_priority ), \"Invalid priority level value\" );\n    // Restore normal assertion handling\n    tbb::set_assertion_handler( ReportError );\n#endif /* TRY_BAD_EXPR_ENABLED && __TBB_TASK_PRIORITY */\n}\n\n#if __TBB_TASK_PRIORITY\n\ntbb::atomic<tbb::priority_t> g_order;\ntbb::atomic<bool> g_order_established;\ntbb::atomic<int> g_num_tasks;\ntbb::atomic<bool> g_all_tasks_enqueued;\nint g_failures;\nclass OrderedTask : public tbb::task {\n    tbb::priority_t my_priority;\npublic:\n    OrderedTask(tbb::priority_t p) : my_priority(p) {\n        ++g_num_tasks;\n    }\n    tbb::task* execute() __TBB_override {\n        tbb::priority_t prev = g_order.fetch_and_store(my_priority);\n        if( my_priority != prev) {\n            REMARK(\"prev:%s --> new:%s\\n\", PriorityName(prev), PriorityName(my_priority));\n            // TODO: improve the test for concurrent workers\n            if(!g_order_established) {\n                // initial transition path allowed low->[normal]->high\n                if(my_priority == tbb::priority_high)\n                    g_order_established = true;\n                else ASSERT(my_priority == tbb::priority_normal && prev == tbb::priority_low, NULL);\n            } else { //transition path allowed high->normal->low\n                bool fail = prev==tbb::priority_high && my_priority!=tbb::priority_normal; // previous priority is high - bad order\n                fail |= prev==tbb::priority_normal && my_priority!=tbb::priority_low; // previous priority is normal - bad order\n                fail |= prev==tbb::priority_low; // transition from low priority but not during initialization\n                if ( fail ) {\n                    if ( g_all_tasks_enqueued )\n                        REPORT_ONCE( \"ERROR: Bad order: prev = %s, my_priority = %s\\n\", PriorityName( prev ), PriorityName( my_priority ) );\n                    ++g_failures;\n                }\n            }\n        }\n        EmulateWork(0);\n        --g_num_tasks;\n        return NULL;\n    }\n    static void start(int i) {\n        tbb::priority_t p = i%3==0? tbb::priority_low : (i%3==1? tbb::priority_normal : tbb::priority_high );\n        OrderedTask &t = *new(tbb::task::allocate_root()) OrderedTask(p);\n        tbb::task::enqueue(t, p);\n    }\n};\n\n//Look for discussion of the issue at http://software.intel.com/en-us/forums/showthread.php?t=102159\nvoid TestEnqueueOrder () {\n    REMARK(\"Testing order of enqueued tasks\\n\");\n    tbb::task_scheduler_init init(1); // to simplify transition checks only one extra worker for enqueue\n    g_order = tbb::priority_low;\n    g_order_established = false;\n    g_all_tasks_enqueued = false;\n    g_failures = 0;\n    for( int i = 0; i < 1000; i++)\n        OrderedTask::start(i);\n    if ( int curr_num_tasks = g_num_tasks ) {\n        // Sync with worker not to set g_all_tasks_enqueued too early.\n        while ( curr_num_tasks == g_num_tasks ) __TBB_Yield();\n    }\n    g_all_tasks_enqueued = true;\n    while( g_order == tbb::priority_low && g_num_tasks>0 ) __TBB_Yield();\n    while( g_order != tbb::priority_low && g_num_tasks>0 ) __TBB_Yield();\n    // We cannot differentiate if this misbehavior is caused by the test or by the implementation.\n    // Howerever, we do not promise mandatory priorities so we can state that the misbehavior in less\n    // than 1% cases is our best effort.\n    ASSERT( g_failures < 5, \"Too many failures\" );\n}\n\nnamespace test_propagation {\n\n// This test creates two binary trees of task_group_context objects.\n// Indices in a binary tree have the following layout:\n//  [1]--> [2] -> [4],[5]\n//     \\-> [3] -> [6],[7]\nstatic const int first = 1, last = 7;\ntbb::task_group_context* g_trees[2][/*last+1*/8];\ntbb::task_group_context* g_default_ctx;\ntbb::atomic<int> g_barrier;\ntbb::atomic<bool> is_finished;\n\nclass TestSetPriorityTask : public tbb::task {\n    const int m_tree, m_i;\npublic:\n    TestSetPriorityTask(int t, int i) : m_tree(t), m_i(i) {}\n    tbb::task* execute() __TBB_override {\n        if( !m_i ) { // the first task creates two trees\n            g_default_ctx = group();\n            for( int i = 0; i <= 1; ++i ) {\n                g_trees[i][1] = new tbb::task_group_context( tbb::task_group_context::isolated );\n                tbb::task::spawn(*new(tbb::task::allocate_root(*g_trees[i][1])) TestSetPriorityTask(i, 1));\n            }\n        }\n        else if( m_i <= last/2 ) { // is divisible\n            for( int i = 0; i <= 1; ++i ) {\n                const int index = 2*m_i + i;\n                g_trees[m_tree][index] = new tbb::task_group_context ( tbb::task_group_context::bound );\n                tbb::task::spawn(*new(tbb::task::allocate_root(*g_trees[m_tree][index])) TestSetPriorityTask(m_tree, index));\n            }\n        }\n        --g_barrier;\n        //REMARK(\"Task %i executing\\n\", m_i);\n        while (!is_finished) __TBB_Yield();\n        change_group(*g_default_ctx); // avoid races with destruction of custom contexts\n        --g_barrier;\n        return NULL;\n    }\n};\n\n// Tests task_group_context state propagation, also for cancellation.\nvoid TestSetPriority() {\n    REMARK(\"Testing set_priority() with existing forest\\n\");\n    const int workers = last*2+1; // +1 is worker thread executing the first task\n    const int max_workers = 4*tbb::task_scheduler_init::default_num_threads();\n    if ( workers+1 > max_workers ) {\n        REPORT( \"Known issue: TestSetPriority requires %d threads but due to 4P hard limit the maximum number of threads is %d\\n\", workers+1, max_workers );\n        return;\n    }\n    tbb::task_scheduler_init init(workers+1); // +1 is master thread\n    g_barrier = workers;\n    is_finished = false;\n    tbb::task::spawn(*new(tbb::task::allocate_root()) TestSetPriorityTask(0,0));\n    while(g_barrier) __TBB_Yield();\n    g_trees[0][2]->set_priority(tbb::priority_high);\n    g_trees[0][4]->set_priority(tbb::priority_normal);\n    g_trees[1][3]->set_priority(tbb::priority_high); // Regression test: it must not set priority_high to g_trees[0][4]\n    //                                         -  1  2  3  4  5  6  7\n    const int expected_priority[2][last+1] = {{0, 0, 1, 0, 0, 1, 0, 0},\n                                              {0, 0, 0, 1, 0, 0, 1, 1}};\n    for (int t = 0; t < 2; ++t)\n        for (int i = first; i <= last; ++i) {\n            REMARK(\"\\r                    \\rTask %i... \", i);\n            ASSERT(g_trees[t][i]->priority() == (expected_priority[t][i]? tbb::priority_high : tbb::priority_normal), NULL);\n            REMARK(\"OK\");\n        }\n    REMARK(\"\\r                    \\r\");\n    REMARK(\"Also testing cancel_group_execution()\\n\"); // cancellation shares propagation logic with set_priority() but there are also differences\n    g_trees[0][4]->cancel_group_execution();\n    g_trees[0][5]->cancel_group_execution();\n    g_trees[1][3]->cancel_group_execution();\n    //                                             -  1  2  3  4  5  6  7\n    const int expected_cancellation[2][last+1] = {{0, 0, 0, 0, 1, 1, 0, 0},\n                                                  {0, 0, 0, 1, 0, 0, 1, 1}};\n    for (int t = 0; t < 2; ++t)\n        for (int i = first; i <= last; ++i) {\n            REMARK(\"\\r                    \\rTask %i... \", i);\n            ASSERT( g_trees[t][i]->is_group_execution_cancelled() == (expected_cancellation[t][i]==1), NULL);\n            REMARK(\"OK\");\n        }\n    REMARK(\"\\r                    \\r\");\n    g_barrier = workers;\n    is_finished = true;\n    REMARK(\"waiting tasks to terminate\\n\");\n    while(g_barrier) __TBB_Yield();\n    for (int t = 0; t < 2; ++t)\n        for (int i = first; i <= last; ++i)\n            delete g_trees[t][i];\n}\n}//namespace test_propagation\n\nstruct OuterParFor {\n    void operator()(int) const {\n        tbb::affinity_partitioner ap;\n        tbb::task_group_context ctx;\n        ctx.set_priority(tbb::priority_high);\n        tbb::parallel_for(0, 100, Harness::DummyBody(1000), ap, ctx);\n    }\n};\n\n// Test priorities with affinity tasks.\nvoid TestAffinityTasks() {\n    REMARK(\"Test priorities with affinity tasks\\n\");\n    tbb::task_scheduler_init init;\n    tbb::affinity_partitioner ap;\n    for (int i = 0; i < 10; ++i)\n        tbb::parallel_for(0, 100, OuterParFor(), ap);\n}\n\nnamespace regression {\n// This is a regression test for a bug with task_group_context used from a thread that created its local scheduler but not the implicit arena\nclass TestTGContext {\npublic:\n    void operator() (int) const {\n        tbb::task_group_context ctx;\n        ctx.cancel_group_execution();   // initializes the local weak scheduler on the thread\n        ctx.set_priority(tbb::priority_high);\n    }\n};\n\nvoid TestTGContextOnNewThread() {\n    REMARK(\"Testing a regression for a bug with task_group_context\\n\");\n    TestTGContext body;\n    NativeParallelFor(1, body);\n}\n}//namespace regression_priorities\n#endif /* __TBB_TASK_PRIORITY */\n\n#if !__TBB_TEST_SKIP_AFFINITY\n#include \"harness_concurrency.h\"\n#endif\n\nint RunTests () {\n#if __TBB_TASK_PRIORITY\n    TestEnqueueOrder();\n#endif /* __TBB_TASK_PRIORITY */\n    TestPriorityAssertions();\n    TestSimplePriorityOps(tbb::priority_low);\n    TestSimplePriorityOps(tbb::priority_high);\n    P = tbb::task_scheduler_init::default_num_threads();\n    REMARK( \"The number of threads: %d\\n\", P );\n    if ( P < 3 )\n        return Harness::Skipped;\n    Low = tbb::priority_normal;\n    High = tbb::priority_high;\n    TestPeriodicConcurrentActivities();\n    TestPrioritySwitchBetweenTwoMasters();\n    Low = tbb::priority_low;\n    High = tbb::priority_normal;\n    PreemptionActivatorId = 0;\n    TestPeriodicConcurrentActivities();\n    TestPrioritySwitchBetweenTwoMasters();\n    High = tbb::priority_high;\n    TestPeriodicConcurrentActivities();\n    TestPrioritySwitchBetweenTwoMasters();\n    PreemptionActivatorId = 1;\n    TestPrioritySwitchBetweenTwoMasters();\n    TestAffinityTasks();\n    regression::TestTGContextOnNewThread();\n\n    return Harness::Done;\n}\n\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#include \"tbb/global_control.h\"\n\nint TestMain () {\n#if !__TBB_TEST_SKIP_AFFINITY\n    Harness::LimitNumberOfThreads( DesiredNumThreads );\n#endif\n#if !__TBB_TASK_PRIORITY\n    REMARK( \"Priorities disabled: Running as just yet another task scheduler test\\n\" );\n#else\n    test_propagation::TestSetPriority(); // TODO: move down when bug 1996 is fixed\n#endif /* __TBB_TASK_PRIORITY */\n\n    RunTests();\n    tbb::global_control c(tbb::global_control::max_allowed_parallelism, 1);\n    PeriodicActivitiesBody::mode = 1;\n    TestSwitchBetweenMastersRepeats = 1;\n    return RunTests();\n}\n\n#else /* !__TBB_TASK_GROUP_CONTEXT */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_scheduler_init.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// We want to test waiting for workers feature with non-preview binaries. However,\n// we want to have some testing of task_scheduler_init without this macro.\n#if !__TBB_CPF_BUILD\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n#endif\n\n#include \"tbb/task_scheduler_init.h\"\n#include <cstdlib>\n#include <cstdio>\n#if TBB_USE_EXCEPTIONS\n#include <stdexcept>\n#endif\n\n#include \"harness_assert.h\"\n#if _MSC_VER\n#pragma warning (push)\n    // MSVC discovers that ASSERT(false) inside TestBlockingTerminateNS::ExceptionTest2::Body makes the code\n    // in parallel_for after the body call unreachable. So supress the warning.\n#pragma warning (disable: 4702)\n#endif\n#include \"tbb/parallel_for.h\"\n#if _MSC_VER\n#pragma warning (pop)\n#endif\n\n#include \"harness_concurrency_tracker.h\"\n#include \"harness_task.h\"\n#include \"harness.h\"\n\nconst int DefaultThreads = tbb::task_scheduler_init::default_num_threads();\n\nnamespace tbb { namespace internal {\nsize_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();\n}}\n\nint ArenaConcurrency() {\n    return int(tbb::internal::get_initial_auto_partitioner_divisor()/4); // TODO: expose through task_arena interface?\n}\n\n// Generally, TBB does not guarantee mandatory parallelism. This test uses some whitebox knowledge about when all the threads can be available\nbool test_mandatory_parallelism = true;\n\n//! Test that task::initialize and task::terminate work when doing nothing else.\n/** maxthread is treated as the \"maximum\" number of worker threads. */\nvoid InitializeAndTerminate( int maxthread ) {\n    __TBB_TRY {\n        for( int i=0; i<256; ++i ) {\n            int threads = (std::rand() % maxthread) + 1;\n            switch( i&3 ) {\n                default: {\n                    tbb::task_scheduler_init init( threads );\n                    ASSERT(init.is_active(), NULL);\n                    ASSERT(ArenaConcurrency()==(threads==1?2:threads), NULL);\n                    if (test_mandatory_parallelism)\n                        Harness::ExactConcurrencyLevel::check(threads, Harness::ExactConcurrencyLevel::Serialize);\n                    if(i&0x20) tbb::task::enqueue( (*new( tbb::task::allocate_root() ) TaskGenerator(2,6)) ); // a work deferred to workers\n                    break;\n                }\n                case 0: {\n                    tbb::task_scheduler_init init;\n                    ASSERT(init.is_active(), NULL);\n                    ASSERT(ArenaConcurrency()==(DefaultThreads==1?2:init.default_num_threads()), NULL);\n                    if (test_mandatory_parallelism)\n                        Harness::ExactConcurrencyLevel::check(init.default_num_threads(), Harness::ExactConcurrencyLevel::Serialize);\n                    if(i&0x40) tbb::task::enqueue( (*new( tbb::task::allocate_root() ) TaskGenerator(3,5)) ); // a work deferred to workers\n                    break;\n                }\n                case 1: {\n                    tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );\n                    ASSERT(!init.is_active(), \"init should not be active; initialization was deferred\");\n                    init.initialize( threads );\n                    ASSERT(init.is_active(), NULL);\n                    ASSERT(ArenaConcurrency()==(threads==1?2:threads), NULL);\n                    if (test_mandatory_parallelism)\n                        Harness::ExactConcurrencyLevel::check(threads, Harness::ExactConcurrencyLevel::Serialize);\n                    init.terminate();\n                    ASSERT(!init.is_active(), \"init should not be active; it was terminated\");\n                    break;\n                }\n                case 2: {\n                    tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );\n                    ASSERT(init.is_active(), NULL);\n                    ASSERT(ArenaConcurrency()==(DefaultThreads==1?2:init.default_num_threads()), NULL);\n                    if (test_mandatory_parallelism)\n                        Harness::ExactConcurrencyLevel::check(init.default_num_threads(), Harness::ExactConcurrencyLevel::Serialize);\n                    break;\n                }\n            }\n        }\n    } __TBB_CATCH( std::runtime_error& error ) {\n#if TBB_USE_EXCEPTIONS\n        REPORT(\"ERROR: %s\\n\", error.what() );\n#endif /* TBB_USE_EXCEPTIONS */\n    }\n}\n\n#if _WIN64\nnamespace std {      // 64-bit Windows compilers have not caught up with 1998 ISO C++ standard\n    using ::srand;\n}\n#endif /* _WIN64 */\n\nstruct ThreadedInit {\n    void operator()( int ) const {\n        InitializeAndTerminate(MaxThread);\n    }\n};\n\n#if _MSC_VER\n#include \"tbb/machine/windows_api.h\"\n#include <tchar.h>\n#endif /* _MSC_VER */\n\n/** The test will fail in particular if task_scheduler_init mistakenly hooks up\n    auto-initialization mechanism. **/\nvoid AssertExplicitInitIsNotSupplanted () {\n    tbb::task_scheduler_init init(1);\n\n    Harness::ExactConcurrencyLevel::check(1);\n}\n\nstruct TestNoWorkerSurplusRun {\n    void operator() (int) const {\n        const unsigned THREADS = tbb::tbb_thread::hardware_concurrency()*2/3;\n        for (int j=0; j<10; j++) {\n            tbb::task_scheduler_init t(THREADS);\n            Harness::ExactConcurrencyLevel::Combinable unique;\n\n            for (int i=0; i<50; i++)\n                Harness::ExactConcurrencyLevel::checkLessOrEqual(THREADS, &unique);\n        }\n    }\n};\n\nvoid TestNoWorkerSurplus () {\n    // Run the test in a special thread because otherwise the surplus issue\n    // is not observed for some hardware configurations\n    NativeParallelFor( 1, TestNoWorkerSurplusRun() );\n}\n\n#if TBB_PREVIEW_WAITING_FOR_WORKERS\n#include \"tbb/task_group.h\"\n#include \"tbb/task_arena.h\"\n\nnamespace TestBlockingTerminateNS {\n    struct EmptyBody {\n        void operator()() const {}\n        void operator()( int ) const {}\n    };\n\n    struct TestAutoInitBody {\n        void operator()( int ) const {\n            tbb::parallel_for( 0, 100, EmptyBody() );\n        }\n    };\n\n    static tbb::atomic<int> gSeed;\n    static tbb::atomic<int> gNumSuccesses;\n\n    class TestMultpleWaitBody {\n        bool myAutoInit;\n    public:\n        TestMultpleWaitBody( bool autoInit = false ) : myAutoInit( autoInit ) {}\n        void operator()( int ) const {\n            tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );\n            if ( !myAutoInit )\n                init.initialize( tbb::task_scheduler_init::automatic );\n            Harness::FastRandom rnd( ++gSeed );\n            // In case of auto init sub-tests we skip\n            //  - case #4 to avoid recursion\n            //  - case #5 because it is explicit initialization\n            const int numCases = myAutoInit ? 4 : 6;\n            switch ( rnd.get() % numCases ) {\n            case 0: {\n                tbb::task_arena a;\n                a.enqueue( EmptyBody() );\n                break;\n            }\n            case 1: {\n                tbb::task_group tg;\n                tg.run( EmptyBody() );\n                tg.wait();\n                break;\n            }\n            case 2:\n                tbb::parallel_for( 0, 100, EmptyBody() );\n                break;\n            case 3:\n                /* do nothing */\n                break;\n            case 4:\n                // Create and join several threads with auto initialized scheduler.\n                NativeParallelFor( rnd.get() % 5 + 1, TestMultpleWaitBody( true ) );\n                break;\n            case 5:\n                {\n                    tbb::task_scheduler_init init2;\n                    bool res = init2.blocking_terminate( std::nothrow );\n                    ASSERT( !res, NULL );\n                }\n                break;\n            }\n            if ( !myAutoInit && init.blocking_terminate( std::nothrow ) )\n                ++gNumSuccesses;\n        }\n    };\n\n    void TestMultpleWait() {\n        const int minThreads = 1;\n        const int maxThreads = 16;\n        const int numRepeats = 5;\n        // Initialize seed with different values on different machines.\n        gSeed = tbb::task_scheduler_init::default_num_threads();\n        for ( int repeats = 0; repeats<numRepeats; ++repeats ) {\n            for ( int threads = minThreads; threads<maxThreads; ++threads ) {\n                gNumSuccesses = 0;\n                NativeParallelFor( threads, TestMultpleWaitBody() );\n                ASSERT( gNumSuccesses > 0, \"At least one blocking terminate must return 'true'\" );\n            }\n        }\n    }\n\n#if TBB_USE_EXCEPTIONS\n    template <typename F>\n    void TestException( F &f ) {\n        Harness::suppress_unused_warning( f );\n        bool caught = false;\n        try {\n            f();\n            ASSERT( false, NULL );\n        }\n        catch ( const std::runtime_error& ) {\n            caught = true;\n        }\n#if TBB_USE_CAPTURED_EXCEPTION\n        catch ( const tbb::captured_exception& ) {\n            caught = true;\n        }\n#endif\n        catch ( ... ) {\n            ASSERT( false, NULL );\n        }\n        ASSERT( caught, NULL );\n    }\n\n    class ExceptionTest1 {\n        tbb::task_scheduler_init tsi1;\n        int myIndex;\n    public:\n        ExceptionTest1( int index ) : myIndex( index ) {}\n\n        void operator()() {\n            tbb::task_scheduler_init tsi2;\n            (myIndex == 0 ? tsi1 : tsi2).blocking_terminate();\n            ASSERT( false, \"Blocking terminate did not throw the exception\" );\n        }\n    };\n\n    struct ExceptionTest2 {\n        class Body {\n            Harness::SpinBarrier& myBarrier;\n        public:\n            Body( Harness::SpinBarrier& barrier ) : myBarrier( barrier ) {}\n            void operator()( int ) const {\n                myBarrier.wait();\n                tbb::task_scheduler_init init;\n                init.blocking_terminate();\n                ASSERT( false, \"Blocking terminate did not throw the exception inside the parallel region\" );\n            }\n        };\n        void operator()() {\n            const int numThreads = 4;\n            tbb::task_scheduler_init init( numThreads );\n            Harness::SpinBarrier barrier( numThreads );\n            tbb::parallel_for( 0, numThreads, Body( barrier ) );\n            ASSERT( false, \"Parallel loop did not throw the exception\" );\n        }\n    };\n#endif /* TBB_USE_EXCEPTIONS */\n\n    void TestExceptions() {\n        for ( int i = 0; i<2; ++i ) {\n            tbb::task_scheduler_init tsi[2];\n            bool res1 = tsi[i].blocking_terminate( std::nothrow );\n            ASSERT( !res1, NULL );\n            bool res2 = tsi[1-i].blocking_terminate( std::nothrow );\n            ASSERT( res2, NULL );\n        }\n#if TBB_USE_EXCEPTIONS\n        ExceptionTest1 Test1(0), Test2(1);\n        TestException( Test1 );\n        TestException( Test2 );\n        ExceptionTest2 Test3;\n        TestException( Test3 );\n#endif\n    }\n}\n\nvoid TestBlockingTerminate() {\n    TestBlockingTerminateNS::TestExceptions();\n    TestBlockingTerminateNS::TestMultpleWait();\n}\n#endif /* TBB_PREVIEW_WAITING_FOR_WORKERS */\n\nint TestMain () {\n    // Do not use tbb::task_scheduler_init directly in the scope of main's body,\n    // as a static variable, or as a member of a static variable.\n#if _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE && !defined(__TBB_LIB_NAME)\n    #ifdef _DEBUG\n        ASSERT(!GetModuleHandle(_T(\"tbb.dll\")) && GetModuleHandle(_T(\"tbb_debug.dll\")),\n            \"test linked with wrong (non-debug) tbb library\");\n    #else\n        ASSERT(!GetModuleHandle(_T(\"tbb_debug.dll\")) && GetModuleHandle(_T(\"tbb.dll\")),\n            \"test linked with wrong (debug) tbb library\");\n    #endif\n#endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE && !__TBB_LIB_NAME */\n    std::srand(2);\n    REMARK(\"testing master thread\\n\");\n    int threads = DefaultThreads*2;\n    {   // work-around shared RML\n        tbb::task_scheduler_init init( threads );\n        if( !Harness::ExactConcurrencyLevel::isEqual( threads ) ) {\n            threads = DefaultThreads;\n            if( MaxThread > DefaultThreads )\n                MaxThread = DefaultThreads;\n#if RML_USE_WCRM\n            REPORT(\"Known issue: shared RML for ConcRT does not support oversubscription\\n\");\n            test_mandatory_parallelism = false; // we cannot rely on ConcRT to provide all the requested threads\n#else\n            REPORT(\"Known issue: machine is heavy loaded or shared RML which does not support oversubscription is loaded\\n\");\n#endif\n        }\n    }\n    InitializeAndTerminate( threads ); // test initialization of more than default number of threads\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK(\"testing with %d threads\\n\", p );\n        // protect market with excess threads from default initializations\n        // TODO IDEA: enhance task_scheduler_init to serve as global_control setting so that\n        // number of threads > default concurrency will be requested from market.\n        // Such settings must be aggregated via 'max' function and 'max_allowed_parallelism' control\n        // (which has 'min' aggregation) will have precedence over it.\n        tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );\n        if( MaxThread > DefaultThreads ) init.initialize( MaxThread );\n        NativeParallelFor( p, ThreadedInit() );\n    }\n    AssertExplicitInitIsNotSupplanted();\n#if TBB_PREVIEW_WAITING_FOR_WORKERS\n    TestBlockingTerminate();\n#endif\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_scheduler_observer.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if __TBB_CPF_BUILD\n#define TEST_SLEEP_PERMISSION 1\n#define TBB_USE_PREVIEW_BINARY 1\n#endif\n// undefine __TBB_CPF_BUILD to simulate user's setup\n#undef __TBB_CPF_BUILD\n\n#define TBB_PREVIEW_LOCAL_OBSERVER 1\n\n#include \"tbb/tbb_config.h\"\n#include \"harness.h\"\n\n#if __TBB_SCHEDULER_OBSERVER\n#include \"tbb/task_scheduler_observer.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/task.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n#include \"../tbb/tls.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness_barrier.h\"\n\n#if _MSC_VER && __TBB_NO_IMPLICIT_LINKAGE\n// plays around __TBB_NO_IMPLICIT_LINKAGE. __TBB_LIB_NAME should be defined (in makefiles)\n    #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n#endif\n\nconst int MaxFlagIndex = sizeof(uintptr_t)*8-1;\n\nstruct ObserverStats {\n    tbb::atomic<int> m_entries;\n    tbb::atomic<int> m_exits;\n    tbb::atomic<int> m_workerEntries;\n    tbb::atomic<int> m_workerSleeps;\n    tbb::atomic<int> m_workerExits;\n\n    void Reset () {\n        m_entries = m_exits = m_workerEntries = m_workerSleeps = m_workerExits = 0;\n    }\n\n    void operator += ( const ObserverStats& s ) {\n        m_entries += s.m_entries;\n        m_exits += s.m_exits;\n        m_workerEntries += s.m_workerEntries;\n        m_workerSleeps += s.m_workerSleeps;\n        m_workerExits += s.m_workerExits;\n    }\n};\n\nstruct ThreadState {\n    uintptr_t m_flags;\n    tbb::task_scheduler_observer *m_dyingObserver;\n    uintptr_t m_maySleepCalls;\n    bool m_canSleep;\n    bool m_isMaster;\n    ThreadState() { reset(); }\n    void reset() {\n        m_maySleepCalls = m_flags = 0;\n        m_dyingObserver = NULL;\n        m_canSleep = m_isMaster = false;\n    }\n    static ThreadState &get();\n};\n\ntbb::enumerable_thread_specific<ThreadState> theLocalState;\ntbb::internal::tls<intptr_t> theThreadPrivate;\n\nThreadState &ThreadState::get() {\n    bool exists;\n    ThreadState& state = theLocalState.local(exists);\n    // ETS will not detect that a thread was allocated with the same id as a destroyed thread\n    if( exists && theThreadPrivate.get() == 0 ) state.reset();\n    theThreadPrivate = 1; // mark thread constructed\n    return state;\n}\n\nstatic ObserverStats theStats;\nstatic tbb::atomic<int> theNumObservers;\n\nconst int P = min( tbb::task_scheduler_init::default_num_threads(), (int)sizeof(int) * CHAR_BIT );\n\nenum TestMode {\n    //! Ensure timely workers destruction in order to guarantee all exit notification are fired.\n    tmSynchronized = 1,\n    //! Use local observer.\n    tmLocalObservation = 2,\n    //! Observer causes autoinitialization of the scheduler\n    tmAutoinitialization = 4,\n    //! test may_sleep\n    tmLeavingControl = 8\n};\n\nuintptr_t theTestMode,\n          thePrevMode = 0;\n\nclass MyObserver : public tbb::task_scheduler_observer, public ObserverStats {\n    uintptr_t m_flag;\n    tbb::atomic<int> m_leave_ticket;\n    tbb::atomic<bool> m_dying;\n\n    void on_scheduler_entry( bool is_worker ) __TBB_override {\n        ThreadState& state = ThreadState::get();\n        ASSERT( is_worker==!state.m_isMaster, NULL );\n        if ( theTestMode & tmLeavingControl )\n            ASSERT( m_leave_ticket, NULL );\n        if ( thePrevMode & tmSynchronized ) {\n            ASSERT( !(state.m_flags & m_flag), \"Observer repeatedly invoked for the same thread\" );\n            if ( theTestMode & tmLocalObservation )\n                ASSERT( !state.m_flags, \"Observer locality breached\" );\n        }\n        if ( m_dying && theTestMode & tmLocalObservation ) {\n            // In case of local observation a worker may enter the arena after\n            // the wait for lagging on_entry calls in the MyObserver destructor\n            // succeeds but before its base class tbb::task_scheduler_observer\n            // destructor removes it from the internal list maintained by the\n            // task scheduler. This will result in on_entry notification without,\n            // subsequent on_exit as the observer is likely to be destroyed before\n            // the worker discovers that the arena is empty and leaves it.\n            //\n            // To prevent statistics distortion, ignore the notifications for\n            // observers about to be destroyed.\n            ASSERT( !state.m_dyingObserver || state.m_dyingObserver != this || thePrevMode & tmSynchronized, NULL );\n            state.m_dyingObserver = this;\n            return;\n        }\n        state.m_dyingObserver = NULL;\n        ++m_entries;\n        state.m_flags |= m_flag;\n        if ( is_worker )\n            ++m_workerEntries;\n    }\n    void on_scheduler_exit( bool is_worker ) __TBB_override {\n        ThreadState& state = ThreadState::get();\n        ASSERT( is_worker==!state.m_isMaster, NULL );\n        if ( m_dying && state.m_dyingObserver ) {\n            ASSERT( state.m_dyingObserver == this, \"Exit without entry (for a dying observer)\" );\n            state.m_dyingObserver = NULL;\n            return;\n        }\n        ASSERT( state.m_flags & m_flag, \"Exit without entry\" );\n        state.m_flags &= ~m_flag;\n        ++m_exits;\n        if ( is_worker )\n            ++m_workerExits;\n    }\n    bool may_sleep() __TBB_override {\n        ThreadState& state = ThreadState::get();\n        ++state.m_maySleepCalls;\n        Harness::Sleep(10);     // helps to reproduce the issues\n        ASSERT( !state.m_isMaster, NULL );\n        if( m_dying ) {         // check the anti-starvation logic\n            return keep_awake;  // thread should exit despite the return value\n        }\n        if( state.m_canSleep ) {// the permission for sleep was previously received\n            // though, it is an important check for the test, we still do not guarantee this condition\n            ASSERT_WARNING( !(theTestMode & tmLeavingControl), \"may_sleep() called again after leaving permission was granted once, check if repeated\");\n            return allow_sleep;\n        }\n        // note, may_sleep can be called before on_entry()\n        if( !(theTestMode & tmLeavingControl) || m_leave_ticket.fetch_and_store(-1) > 0 ) {\n            state.m_canSleep = true;\n            ++m_workerSleeps;\n            return allow_sleep;\n        }\n        return keep_awake;\n    }\npublic:\n    // the method is called before the work in new arena starts enabling the leaving test mode\n    // in this mode may_sleep() does not allow a thread to fall asleep unless permitted below\n    void enable_leaving_test() {\n        ASSERT(theTestMode & tmLeavingControl, NULL);\n        m_leave_ticket.store<tbb::relaxed>(-1);\n        ASSERT(!is_observing(), NULL);\n        observe(true);\n    }\n\n    // the work is just done in the only arena, assume workers start entering may_sleep\n    void test_leaving() {\n#if TEST_SLEEP_PERMISSION\n        if( !(theTestMode & tmLeavingControl) )\n            return; // second call to the test TODO: extend the test for the second round as well\n        REMARK( \"Testing may_sleep()\\n\");\n        ASSERT( !m_workerSleeps, \"permission for sleep was given before the test starts?\");\n        ASSERT( (theTestMode & tmSynchronized) && m_workerEntries >= P-1, \"test_leaving assumes full subscription of the only arena\");\n        for ( int j = 0; j < m_workerEntries; j++ ) {\n            REMARK( \"Round %d: entries %d, sleeps %d\\n\", j, (int)m_workerEntries, (int)m_workerSleeps );\n            ASSERT( m_leave_ticket == -1, \"unexpected mode, signal was not consumed by a worker?\" );\n            m_leave_ticket = 1; // dismiss one\n            double n_seconds = 10;\n            (Harness::TimedWaitWhileEq(n_seconds))(m_workerSleeps, j);\n            ASSERT( n_seconds >= 0, \"Time out while waiting for a worker to call may_sleep for the first time\");\n            __TBB_Yield();\n        }\n        // the first time this method is called the work will be executed again,\n        // the next time time, the scheduler will start shutting down\n        theTestMode &= ~tmLeavingControl;\n        m_leave_ticket = m_workerSleeps = 0; // reset for the next round\n#endif\n    }\n\n    MyObserver( uintptr_t flag )\n        : tbb::task_scheduler_observer(theTestMode & tmLocalObservation ? true : false)\n        , m_flag(flag)\n    {\n        m_leave_ticket.store<tbb::relaxed>(0);\n        ++theNumObservers;\n        Reset();\n        m_dying = false;\n        // Local observer causes automatic scheduler initialization\n        // in the current thread, so here, we must postpone the activation.\n        if ( !(theTestMode & tmLocalObservation) && !(theTestMode & tmLeavingControl) )\n            observe(true);\n    }\n\n    ~MyObserver () {\n        m_dying = true;\n        ASSERT( m_exits <= m_entries, NULL );\n        if ( theTestMode & tmSynchronized ) {\n            tbb::tick_count t0 = tbb::tick_count::now();\n            while ( m_exits < m_entries && (tbb::tick_count::now() - t0).seconds() < 5 )\n                Harness::Sleep(10);\n            if ( m_exits < m_entries )\n                REPORT( \"Warning: Entry/exit count mismatch (%d, %d). Observer is broken or machine is overloaded.\\n\", (int)m_entries, (int)m_exits );\n        }\n        theStats += *this;\n        --theNumObservers;\n        // it is recommended to disable observation before destructor of the base class starts,\n        // otherwise it can lead to concurrent notification callback on partly destroyed object,\n        // which in turn can harm (in addition) if derived class has new virtual methods.\n        // This class has no, and for test purposes we rely on implementation failsafe mechanism.\n        //observe(false);\n    }\n}; // class MyObserver\n\nHarness::SpinBarrier theGlobalBarrier;\nbool theGlobalBarrierActive = true;\n\nclass FibTask : public tbb::task {\n    const int N;\n    uintptr_t m_flag;\n    MyObserver &m_observer;\npublic:\n    FibTask( int n, uintptr_t flags, MyObserver &obs ) : N(n), m_flag(flags), m_observer(obs) {}\n\n    tbb::task* execute() __TBB_override {\n        ThreadState& s = ThreadState::get();\n        ASSERT( !(~s.m_flags & m_flag), NULL );\n        if( N < 2 )\n            return NULL;\n        bool globalBarrierActive = false;\n        if ( s.m_isMaster ) {\n            if ( theGlobalBarrierActive ) {\n                // This is the root task. Its N is equal to the number of threads.\n                // Spawn a task for each worker.\n                set_ref_count(N);\n                for ( int i = 1; i < N; ++i )\n                    spawn( *new( allocate_child() ) FibTask(20, m_flag, m_observer) );\n                if ( theTestMode & tmSynchronized ) {\n                    theGlobalBarrier.wait();\n                    ASSERT( m_observer.m_entries >= N, \"Wrong number of on_entry calls after the first barrier\" );\n                    // All the spawned tasks have been stolen by workers.\n                    // Now wait for workers to spawn some more tasks for this thread to steal back.\n                    theGlobalBarrier.wait();\n                    ASSERT( !theGlobalBarrierActive, \"Workers are expected to have reset this flag\" );\n                }\n                else\n                    theGlobalBarrierActive = false;\n                wait_for_all();\n                return NULL;\n            }\n        }\n        else {\n            if ( theGlobalBarrierActive ) {\n                if ( theTestMode & tmSynchronized ) {\n                    theGlobalBarrier.wait();\n                    globalBarrierActive = true;\n                }\n                theGlobalBarrierActive = false;\n            }\n        }\n        set_ref_count(3);\n        spawn( *new( allocate_child() ) FibTask(N-1, m_flag, m_observer) );\n        spawn( *new( allocate_child() ) FibTask(N-2, m_flag, m_observer) );\n        if ( globalBarrierActive ) {\n            // It's the first task executed by a worker. Release the master thread.\n            theGlobalBarrier.wait();\n        }\n        wait_for_all();\n        return NULL;\n    }\n}; // class FibTask\n\nHarness::SpinBarrier theMasterBarrier;\n\nclass TestBody {\n    int m_numThreads;\npublic:\n    TestBody( int numThreads ) : m_numThreads(numThreads) {}\n\n    void operator()( int i ) const {\n        ThreadState &state = ThreadState::get();\n        ASSERT( !state.m_isMaster, \"should be newly initialized thread\");\n        state.m_isMaster = true;\n        uintptr_t f = i <= MaxFlagIndex ? 1<<i : 0;\n        MyObserver o(f);\n        if ( theTestMode & tmSynchronized )\n            theMasterBarrier.wait();\n        // when mode is local observation but not synchronized and when num threads == default\n        if ( theTestMode & tmAutoinitialization )\n            o.observe(true); // test autoinitialization can be done by observer\n        // when mode is synchronized observation and when num threads == default\n        if ( theTestMode & tmLeavingControl )\n            o.enable_leaving_test();\n        // Observer in enabled state must outlive the scheduler to ensure that\n        // all exit notifications are called.\n        tbb::task_scheduler_init init(m_numThreads);\n        // when local & non-autoinitialized observation mode\n        if ( theTestMode & tmLocalObservation )\n            o.observe(true);\n        for ( int j = 0; j < 2; ++j ) {\n            tbb::task &t = *new( tbb::task::allocate_root() ) FibTask(m_numThreads, f, o);\n            tbb::task::spawn_root_and_wait(t);\n            if ( theTestMode & tmLeavingControl )\n                o.test_leaving();\n            thePrevMode = theTestMode;\n        }\n    }\n}; // class TestBody\n\nvoid TestObserver( int M, int T, uintptr_t testMode ) {\n    theLocalState.clear();\n    theStats.Reset();\n    theGlobalBarrierActive = true;\n    theTestMode = testMode;\n    NativeParallelFor( M, TestBody(T) );\n    // When T (number of threads in arena, i.e. master + workers) is less than P\n    // (hardware concurrency), more than T-1 workers can visit the same arena. This\n    // is possible in case of imbalance or when other arenas are activated/deactivated\n    // concurrently).\n    ASSERT( !theNumObservers, \"Unexpected alive observer(s)\" );\n    REMARK( \"Entries %d / %d, exits %d\\n\", (int)theStats.m_entries, (int)theStats.m_workerEntries, (int)theStats.m_exits );\n    if ( testMode & tmSynchronized ) {\n        if ( testMode & tmLocalObservation ) {\n            ASSERT( theStats.m_entries >= M * T, \"Too few on_entry calls\" );\n            ASSERT( theStats.m_workerEntries >= M * (T - 1), \"Too few worker entries\" );\n        }\n        else {\n            ASSERT( theStats.m_entries >= M * M * T, \"Too few on_entry calls\" );\n            ASSERT( theStats.m_entries <= M * (P + 1), \"Too many on_entry calls\" );\n            ASSERT( theStats.m_workerEntries >= M * M * (T - 1), \"Too few worker entries\" );\n            ASSERT( theStats.m_workerEntries <= M * (P - 1), \"Too many worker entries\" );\n        }\n        ASSERT( theStats.m_entries == theStats.m_exits, \"Entries/exits mismatch\" );\n    }\n    else {\n        ASSERT( theStats.m_entries >= M, \"Too few on_entry calls\" );\n        ASSERT( theStats.m_exits >= M || (testMode & tmAutoinitialization), \"Too few on_exit calls\" );\n        if ( !(testMode & tmLocalObservation) ) {\n            ASSERT( theStats.m_entries <= M * M * P, \"Too many on_entry calls\" );\n            ASSERT( theStats.m_exits <= M * M * T, \"Too many on_exit calls\" );\n        }\n        ASSERT( theStats.m_entries >= theStats.m_exits, \"More exits than entries\" );\n    }\n}\n\nint TestMain () {\n    if ( P < 2 )\n        return Harness::Skipped;\n    theNumObservers = 0;\n    // Fully- and under-utilized mode\n    for ( int M = 1; M < P; M <<= 1 ) {\n        if ( M > P/2 ) {\n            ASSERT( P & (P-1), \"Can get here only in case of non power of two cores\" );\n            M = P/2;\n            if ( M==1 || (M & (M-1)) )\n                break; // Already tested this configuration\n        }\n        int T = P / M;\n        ASSERT( T > 1, NULL );\n        REMARK( \"Masters: %d; Arena size: %d\\n\", M, T );\n        theMasterBarrier.initialize(M);\n        theGlobalBarrier.initialize(M * T);\n        TestObserver(M, T, 0);\n        TestObserver(M, T, tmSynchronized | tmLocalObservation );\n        TestObserver(M, T, tmSynchronized | ( T==P? tmLeavingControl : 0));\n        // keep tmAutoInitialization the last, as it does not release worker threads\n        TestObserver(M, T, tmLocalObservation | ( T==P? tmAutoinitialization : 0) );\n    }\n    // Oversubscribed mode\n    for ( int i = 0; i < 4; ++i ) {\n        REMARK( \"Masters: %d; Arena size: %d\\n\", P-1, P );\n        TestObserver(P-1, P, 0);\n        TestObserver(P-1, P, tmLocalObservation);\n    }\n    Harness::Sleep(20);\n    return Harness::Done;\n}\n\n#else /* !__TBB_SCHEDULER_OBSERVER */\n\nint TestMain () {\n    return Harness::Skipped;\n}\n#endif /* !__TBB_SCHEDULER_OBSERVER */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_task_steal_limit.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/task.h\"\n#include \"harness.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nusing tbb::task;\n\n#if __TBB_ipf\n    const unsigned StackSize = 1024*1024*6;\n#else /*  */\n    const unsigned StackSize = 1024*1024*3;\n#endif\n\n// GCC and ICC on Linux store TLS data in the stack space. This test makes sure\n// that the stealing limiting heuristic used by the task scheduler does not\n// switch off stealing when a large amount of TLS data is reserved.\n#if _MSC_VER\n__declspec(thread)\n#elif __linux__ || ((__MINGW32__ || __MINGW64__) && __TBB_GCC_VERSION >= 40500)\n__thread\n#endif\n    char map2[1024*1024*2];\n\nclass TestTask : public task {\npublic:\n    static volatile int completed;\n    task* execute() __TBB_override {\n        completed = 1;\n        return NULL;\n    };\n};\n\nvolatile int TestTask::completed = 0;\n\nvoid TestStealingIsEnabled () {\n    tbb::task_scheduler_init init(2, StackSize);\n    task &r = *new( task::allocate_root() ) tbb::empty_task;\n    task &t = *new( r.allocate_child() ) TestTask;\n    r.set_ref_count(2);\n    r.spawn(t);\n    int count = 0;\n    while ( !TestTask::completed && ++count < 6 )\n        Harness::Sleep(1000);\n    ASSERT( TestTask::completed, \"Stealing is disabled or the machine is heavily oversubscribed\" );\n    r.wait_for_all();\n    task::destroy(r);\n}\n\nint TestMain () {\n#if !__TBB_THREAD_LOCAL_VARIABLES_PRESENT\n    REPORT( \"Known issue: Test skipped because no compiler support for __thread keyword.\\n\" );\n    return Harness::Skipped;\n#endif\n    if ( tbb::task_scheduler_init::default_num_threads() == 1 ) {\n        REPORT( \"Known issue: Test requires at least 2 hardware threads.\\n\" );\n        return Harness::Skipped;\n    }\n    TestStealingIsEnabled();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tbb_condition_variable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n\n#include \"test_condition_variable.h\"\n\nint TestMain() {\n    REMARK( \"testing with tbb condvar\\n\" );\n    DoCondVarTest<tbb::mutex,tbb::recursive_mutex>();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tbb_fork.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/parallel_for.h\"\n\n#define HARNESS_DEFAULT_MIN_THREADS (tbb::task_scheduler_init::default_num_threads())\n#define HARNESS_DEFAULT_MAX_THREADS (4*tbb::task_scheduler_init::default_num_threads())\n#if __bg__\n// CNK does not support fork()\n#define HARNESS_SKIP_TEST 1\n#endif\n#include \"harness.h\"\n\n#if _WIN32||_WIN64\n#include \"tbb/concurrent_hash_map.h\"\n\nHANDLE getCurrentThreadHandle()\n{\n    HANDLE hProc = GetCurrentProcess(), hThr = INVALID_HANDLE_VALUE;\n#if TBB_USE_ASSERT\n    BOOL res =\n#endif\n    DuplicateHandle( hProc, GetCurrentThread(), hProc, &hThr, 0, FALSE, DUPLICATE_SAME_ACCESS );\n    __TBB_ASSERT( res, \"Retrieving current thread handle failed\" );\n    return hThr;\n}\n\nbool threadTerminated(HANDLE h)\n{\n    DWORD ret = WaitForSingleObjectEx(h, 0, FALSE);\n    return WAIT_OBJECT_0 == ret;\n}\n\nstruct Data {\n    HANDLE h;\n};\n\ntypedef tbb::concurrent_hash_map<DWORD, Data> TidTableType;\n\nstatic TidTableType tidTable;\n\n#else\n\n#if __sun || __SUNPRO_CC\n#define _POSIX_PTHREAD_SEMANTICS 1 // to get standard-conforming sigwait(2)\n#endif\n#include <signal.h>\n#include <sys/types.h>\n#include <unistd.h>\n#include <sys/wait.h>\n#include <sched.h>\n\n#include \"tbb/tick_count.h\"\n\nvoid SigHandler(int) { }\n\n#endif // _WIN32||_WIN64\n\nclass AllocTask {\npublic:\n    void operator() (const tbb::blocked_range<int> &r) const {\n#if _WIN32||_WIN64\n        HANDLE h = getCurrentThreadHandle();\n        DWORD tid = GetCurrentThreadId();\n        {\n            TidTableType::accessor acc;\n            if (tidTable.insert(acc, tid)) {\n                acc->second.h = h;\n            }\n        }\n#endif\n        for (int y = r.begin(); y != r.end(); ++y) {\n            void *p = tbb::internal::NFS_Allocate(1, 7000, NULL);\n            tbb::internal::NFS_Free(p);\n        }\n    }\n    AllocTask() {}\n};\n\nvoid CallParallelFor()\n{\n    tbb::parallel_for(tbb::blocked_range<int>(0, 10000, 1), AllocTask(),\n                      tbb::simple_partitioner());\n}\n\n/* Regression test against data race between termination of workers\n   and setting blocking terination mode in main thread. */\nclass RunWorkersBody : NoAssign {\n    bool wait_workers;\npublic:\n    RunWorkersBody(bool waitWorkers) : wait_workers(waitWorkers) {}\n    void operator()(const int /*threadID*/) const {\n        tbb::task_scheduler_init sch(MaxThread);\n        CallParallelFor();\n        if (wait_workers) {\n            bool ok = sch.blocking_terminate(std::nothrow);\n            ASSERT(ok, NULL);\n        }\n    }\n};\n\nvoid TestBlockNonblock()\n{\n    for (int i=0; i<100; i++) {\n        REMARK(\"\\rIteration %d \", i);\n        NativeParallelFor(4, RunWorkersBody(/*wait_workers=*/false));\n        RunWorkersBody(/*wait_workers=*/true)(0);\n    }\n}\n\nclass RunInNativeThread : NoAssign {\n    bool create_tsi,\n        blocking;\npublic:\n    RunInNativeThread(bool create_tsi_, bool blocking_) :\n        create_tsi(create_tsi_), blocking(blocking_) {}\n    void operator()(const int /*threadID*/) const {\n        // nested TSI or auto-initialized TSI can be terminated when\n        // wait_workers is true (deferred TSI means auto-initialization)\n        tbb::task_scheduler_init tsi(create_tsi? 2 : tbb::task_scheduler_init::deferred);\n        CallParallelFor();\n        if (blocking) {\n            bool ok = tsi.blocking_terminate(std::nothrow);\n            // all usages are nested\n            ASSERT(!ok, \"Nested blocking terminate must fail.\");\n        }\n    }\n};\n\nvoid TestTasksInThread()\n{\n    tbb::task_scheduler_init sch(2);\n    CallParallelFor();\n    for (int i=0; i<2; i++)\n        NativeParallelFor(2, RunInNativeThread(/*create_tsi=*/1==i, /*blocking=*/false));\n    bool ok = sch.blocking_terminate(std::nothrow);\n    ASSERT(ok, NULL);\n}\n\n#include \"harness_memory.h\"\n\n// check for memory leak during TBB task scheduler init/terminate life cycle\n// TODO: move to test_task_scheduler_init after workers waiting productization\nvoid TestSchedulerMemLeaks()\n{\n    const int ITERS = 10;\n    int it;\n\n    for (it=0; it<ITERS; it++) {\n        size_t memBefore = GetMemoryUsage();\n#if _MSC_VER && _DEBUG\n        // _CrtMemCheckpoint() and _CrtMemDifference are non-empty only in _DEBUG\n        _CrtMemState stateBefore, stateAfter, diffState;\n        _CrtMemCheckpoint(&stateBefore);\n#endif\n        for (int i=0; i<100; i++) {\n            tbb::task_scheduler_init sch(1);\n            for (int k=0; k<10; k++) {\n                tbb::empty_task *t = new( tbb::task::allocate_root() ) tbb::empty_task();\n                tbb::task::enqueue(*t);\n            }\n            bool ok = sch.blocking_terminate(std::nothrow);\n            ASSERT(ok, NULL);\n        }\n#if _MSC_VER && _DEBUG\n        _CrtMemCheckpoint(&stateAfter);\n        int ret = _CrtMemDifference(&diffState, &stateBefore, &stateAfter);\n        ASSERT(!ret, \"It must be no memory leaks at this point.\");\n#endif\n        if (GetMemoryUsage() <= memBefore)\n            break;\n    }\n    ASSERT(it < ITERS, \"Memory consumption has not stabilized. Memory Leak?\");\n}\n\nvoid TestNestingTSI()\n{\n    // nesting with and without blocking is possible\n    for (int i=0; i<2; i++) {\n        tbb::task_scheduler_init schBlock(2);\n        CallParallelFor();\n        tbb::task_scheduler_init schBlock1(2);\n        CallParallelFor();\n        if (i)\n            schBlock1.terminate();\n        else {\n            bool ok = schBlock1.blocking_terminate(std::nothrow);\n            ASSERT(!ok, \"Nested blocking terminate must fail.\");\n        }\n        bool ok = schBlock.blocking_terminate(std::nothrow);\n        ASSERT(ok, NULL);\n    }\n    {\n        tbb::task_scheduler_init schBlock(2);\n        NativeParallelFor(1, RunInNativeThread(/*create_tsi=*/true, /*blocking=*/true));\n        bool ok = schBlock.blocking_terminate(std::nothrow);\n        ASSERT(ok, NULL);\n    }\n}\n\nvoid TestAutoInit()\n{\n    CallParallelFor(); // autoinit\n    // creation of blocking scheduler is possible, but one is not block\n    NativeParallelFor(1, RunInNativeThread(/*create_tsi=*/true, /*blocking=*/true));\n}\n\nint TestMain()\n{\n    using namespace Harness;\n\n    TestNestingTSI();\n    TestBlockNonblock();\n    TestTasksInThread();\n    TestSchedulerMemLeaks();\n\n    bool child = false;\n#if _WIN32||_WIN64\n    DWORD masterTid = GetCurrentThreadId();\n#else\n    struct sigaction sa;\n    sigset_t sig_set;\n\n    sigemptyset(&sa.sa_mask);\n    sa.sa_flags = 0;\n    sa.sa_handler = SigHandler;\n    if (sigaction(SIGCHLD, &sa, NULL))\n        ASSERT(0, \"sigaction failed\");\n    if (sigaction(SIGALRM, &sa, NULL))\n        ASSERT(0, \"sigaction failed\");\n    // block SIGCHLD and SIGALRM, the mask is inherited by worker threads\n    sigemptyset(&sig_set);\n    sigaddset(&sig_set, SIGCHLD);\n    sigaddset(&sig_set, SIGALRM);\n    if (pthread_sigmask(SIG_BLOCK, &sig_set, NULL))\n        ASSERT(0, \"pthread_sigmask failed\");\n#endif\n    for (int threads=MinThread; threads<=MaxThread; threads+=MinThread) {\n        for (int i=0; i<20; i++) {\n            if (!child)\n                REMARK(\"\\rThreads %d %d \", threads, i);\n            {\n                tbb::task_scheduler_init sch(threads);\n                bool ok = sch.blocking_terminate(std::nothrow);\n                ASSERT(ok, NULL);\n            }\n            tbb::task_scheduler_init sch(threads);\n\n            CallParallelFor();\n            bool ok = sch.blocking_terminate(std::nothrow);\n            ASSERT(ok, NULL);\n\n#if _WIN32||_WIN64\n            // check that there is no alive threads after terminate()\n            for (TidTableType::const_iterator it = tidTable.begin();\n                 it != tidTable.end(); ++it) {\n                if (masterTid != it->first) {\n                    ASSERT(threadTerminated(it->second.h), NULL);\n                }\n            }\n            tidTable.clear();\n#else // _WIN32||_WIN64\n            if (child)\n                exit(0);\n            else {\n                pid_t pid = fork();\n                if (!pid) {\n                    i = -1;\n                    child = true;\n                } else {\n                    int sig;\n                    pid_t w_ret = 0;\n                    // wait for SIGCHLD up to timeout\n                    alarm(30);\n                    if (0 != sigwait(&sig_set, &sig))\n                        ASSERT(0, \"sigwait failed\");\n                    alarm(0);\n                    w_ret = waitpid(pid, NULL, WNOHANG);\n                    ASSERT(w_ret>=0, \"waitpid failed\");\n                    if (!w_ret) {\n                        ASSERT(!kill(pid, SIGKILL), NULL);\n                        w_ret = waitpid(pid, NULL, 0);\n                        ASSERT(w_ret!=-1, \"waitpid failed\");\n\n                        ASSERT(0, \"Hang after fork\");\n                    }\n                    // clean pending signals (if any occurs since sigwait)\n                    sigset_t p_mask;\n                    for (;;) {\n                        sigemptyset(&p_mask);\n                        sigpending(&p_mask);\n                        if (sigismember(&p_mask, SIGALRM)\n                            || sigismember(&p_mask, SIGCHLD)) {\n                            if (0 != sigwait(&p_mask, &sig))\n                                ASSERT(0, \"sigwait failed\");\n                        } else\n                            break;\n                    }\n                }\n            }\n#endif // _WIN32||_WIN64\n        }\n    }\n    // auto initialization at this point\n    TestAutoInit();\n\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tbb_header.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/**\n    This test ensures that tbb.h brings in all the public TBB interface definitions,\n    and if all the necessary symbols are exported from the library.\n\n    Most of the checks happen at the compilation or link phases.\n**/\n#if __TBB_CPF_BUILD\n// Add testing of preview features\n#define TBB_PREVIEW_AGGREGATOR 1\n#define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1\n#define TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE 1\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#endif\n\n#if __TBB_TEST_SECONDARY\n    // Test _DEBUG macro custom definitions.\n    #if TBB_USE_DEBUG\n        #ifdef _DEBUG\n            #undef _DEBUG\n        #endif /* _DEBUG */\n        // Check that empty value successfully enables the debug mode.\n        #define _DEBUG\n        static bool isDebugExpected = true;\n    #else\n        // Check that zero value does not enable the debug mode.\n        #define _DEBUG 0x0\n        static bool isDebugExpected = false;\n    #endif /* TBB_USE_DEBUG */\n    #define DO_TEST_DEBUG_MACRO 1\n#else\n    // Test default definitions of _DEBUG.\n    #if _DEBUG\n        static bool isDebugExpected = true;\n        #define DO_TEST_DEBUG_MACRO 1\n    #elif _MSC_VER\n        // for MSVC, _DEBUG not defined indicates a release mode.\n        static bool isDebugExpected = false;\n        #define DO_TEST_DEBUG_MACRO 1\n    #endif /* _DEBUG */\n#endif /* __TBB_TEST_SECONDARY */\n\n#if DO_TEST_DEBUG_MACRO\n// Reset TBB_USE_DEBUG defined in makefiles.\n#undef TBB_USE_DEBUG\n#endif /* DO_TEST_DEBUG_MACRO */\n#define __TBB_CONFIG_PREPROC_ONLY _MSC_VER // For MSVC, prevent including standard headers in tbb_config.h\n#include \"tbb/tbb_config.h\"\n\n#if !TBB_USE_DEBUG && defined(_DEBUG)\n// TBB_USE_DEBUG is 0 but _DEBUG is defined, it means that _DEBUG is 0\n// MSVC C++ headers consider any definition of _DEBUG, including 0, as debug mode\n#undef _DEBUG\n#endif /* !TBB_USE_DEBUG && defined(_DEBUG) */\n\n#include \"harness_defs.h\"\n#if _MSC_VER\n#pragma warning (disable : 4503)      // decorated name length exceeded, name was truncated\n#endif\n\n#if !(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN)\n\n#include \"tbb/tbb.h\"\n\nstatic volatile size_t g_sink;\n\n#define TestTypeDefinitionPresence( Type ) g_sink = sizeof(tbb::Type);\n#define TestTypeDefinitionPresence2(TypeStart, TypeEnd) g_sink = sizeof(tbb::TypeStart,TypeEnd);\n#define TestFuncDefinitionPresence(Fn, Args, ReturnType) { ReturnType (*pfn)Args = &tbb::Fn; (void)pfn; }\n\nstruct Body {\n    void operator() () const {}\n};\nstruct Body1 {\n    void operator() ( int ) const {}\n};\nstruct Body1a {\n    int operator() ( const tbb::blocked_range<int>&, const int ) const { return 0; }\n};\nstruct Body1b {\n    int operator() ( const int, const int ) const { return 0; }\n};\nstruct Body2 {\n    Body2 () {}\n    Body2 ( const Body2&, tbb::split ) {}\n    void operator() ( const tbb::blocked_range<int>& ) const {}\n    void join( const Body2& ) {}\n};\nstruct Body3 {\n    Body3 () {}\n    Body3 ( const Body3&, tbb::split ) {}\n    void operator() ( const tbb::blocked_range2d<int>&, tbb::pre_scan_tag ) const {}\n    void operator() ( const tbb::blocked_range2d<int>&, tbb::final_scan_tag ) const {}\n    void reverse_join( Body3& ) {}\n    void assign( const Body3& ) {}\n};\n\n#if !__TBB_TEST_SECONDARY\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\n\n// Test if all the necessary symbols are exported for the exceptions thrown by TBB.\n// Missing exports result either in link error or in runtime assertion failure.\n#include <stdexcept>\n\ntemplate <typename E>\nvoid TestExceptionClassExports ( const E& exc, tbb::internal::exception_id eid ) {\n    // The assertion here serves to shut up warnings about \"eid not used\".\n    ASSERT( eid<tbb::internal::eid_max, NULL );\n#if TBB_USE_EXCEPTIONS\n    for ( int i = 0; i < 2; ++i ) {\n        try {\n            if ( i == 0 )\n                throw exc;\n#if !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN\n            else\n                tbb::internal::throw_exception( eid );\n#endif\n        }\n        catch ( E& e ) {\n            ASSERT ( e.what(), \"Missing what() string\" );\n        }\n        catch ( ... ) {\n            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, \"Unrecognized exception. Likely RTTI related exports are missing\" );\n        }\n    }\n#else /* TBB_USE_EXCEPTIONS */\n    (void)exc;\n#endif /* TBB_USE_EXCEPTIONS */\n}\n\nvoid TestExceptionClassesExports () {\n    TestExceptionClassExports( std::bad_alloc(), tbb::internal::eid_bad_alloc );\n    TestExceptionClassExports( tbb::bad_last_alloc(), tbb::internal::eid_bad_last_alloc );\n    TestExceptionClassExports( std::invalid_argument(\"test\"), tbb::internal::eid_nonpositive_step );\n    TestExceptionClassExports( std::out_of_range(\"test\"), tbb::internal::eid_out_of_range );\n    TestExceptionClassExports( std::range_error(\"test\"), tbb::internal::eid_segment_range_error );\n    TestExceptionClassExports( std::range_error(\"test\"), tbb::internal::eid_index_range_error );\n    TestExceptionClassExports( tbb::missing_wait(), tbb::internal::eid_missing_wait );\n    TestExceptionClassExports( tbb::invalid_multiple_scheduling(), tbb::internal::eid_invalid_multiple_scheduling );\n    TestExceptionClassExports( tbb::improper_lock(), tbb::internal::eid_improper_lock );\n    TestExceptionClassExports( std::runtime_error(\"test\"), tbb::internal::eid_possible_deadlock );\n    TestExceptionClassExports( std::runtime_error(\"test\"), tbb::internal::eid_operation_not_permitted );\n    TestExceptionClassExports( std::runtime_error(\"test\"), tbb::internal::eid_condvar_wait_failed );\n    TestExceptionClassExports( std::out_of_range(\"test\"), tbb::internal::eid_invalid_load_factor );\n    TestExceptionClassExports( std::invalid_argument(\"test\"), tbb::internal::eid_invalid_swap );\n    TestExceptionClassExports( std::length_error(\"test\"), tbb::internal::eid_reservation_length_error );\n    TestExceptionClassExports( std::out_of_range(\"test\"), tbb::internal::eid_invalid_key );\n    TestExceptionClassExports( tbb::user_abort(), tbb::internal::eid_user_abort );\n    TestExceptionClassExports( std::runtime_error(\"test\"), tbb::internal::eid_bad_tagged_msg_cast );\n}\n#endif /* !__TBB_TEST_SECONDARY */\n\n#if __TBB_CPF_BUILD\n// These names are only tested in \"preview\" configuration\n// When a feature becomes fully supported, its names should be moved to the main test\nstruct Handler {\n    void operator()( tbb::aggregator_operation* ) {}\n};\nstatic void TestPreviewNames() {\n    TestTypeDefinitionPresence( aggregator );\n    TestTypeDefinitionPresence( aggregator_ext<Handler> );\n    TestTypeDefinitionPresence2(concurrent_lru_cache<int, int> );\n    #if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    TestTypeDefinitionPresence2( flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > );\n    #endif\n    TestTypeDefinitionPresence( static_partitioner );\n}\n#endif\n\n#if __TBB_TEST_SECONDARY\n/* This mode is used to produce a secondary object file that is linked with\n   the main one in order to detect \"multiple definition\" linker error.\n*/\n#include \"harness_assert.h\"\nbool Secondary()\n#else\nbool Secondary();\nint TestMain ()\n#endif\n{\n    #if __TBB_CPP11_STD_PLACEHOLDERS_LINKAGE_BROKEN\n        REPORT(\"Known issue: \\\"multiple definition\\\" linker error detection test skipped.\\n\");\n    #endif\n    TestTypeDefinitionPresence( aligned_space<int> );\n    TestTypeDefinitionPresence( atomic<int> );\n    TestTypeDefinitionPresence( cache_aligned_allocator<int> );\n    TestTypeDefinitionPresence( tbb_hash_compare<int> );\n    TestTypeDefinitionPresence2(concurrent_hash_map<int, int> );\n    TestTypeDefinitionPresence2(concurrent_unordered_map<int, int> );\n    TestTypeDefinitionPresence2(concurrent_unordered_multimap<int, int> );\n    TestTypeDefinitionPresence( concurrent_unordered_set<int> );\n    TestTypeDefinitionPresence( concurrent_unordered_multiset<int> );\n    TestTypeDefinitionPresence( concurrent_bounded_queue<int> );\n    TestTypeDefinitionPresence( concurrent_queue<int> );\n    TestTypeDefinitionPresence( strict_ppl::concurrent_queue<int> );\n    TestTypeDefinitionPresence( concurrent_priority_queue<int> );\n    TestTypeDefinitionPresence( combinable<int> );\n    TestTypeDefinitionPresence( concurrent_vector<int> );\n    TestTypeDefinitionPresence( enumerable_thread_specific<int> );\n    /* Flow graph names */\n    TestTypeDefinitionPresence( flow::graph );\n    // TODO: add a check for make_edge and maybe other functions in tbb::flow\n    TestTypeDefinitionPresence( flow::source_node<int> );\n    TestTypeDefinitionPresence2(flow::function_node<int, int> );\n    typedef tbb::flow::tuple<int, int> intpair;\n    TestTypeDefinitionPresence2(flow::multifunction_node<int, intpair> );\n    TestTypeDefinitionPresence( flow::split_node<intpair> );\n    TestTypeDefinitionPresence( flow::continue_node<int> );\n    TestTypeDefinitionPresence( flow::overwrite_node<int> );\n    TestTypeDefinitionPresence( flow::write_once_node<int> );\n    TestTypeDefinitionPresence( flow::broadcast_node<int> );\n    TestTypeDefinitionPresence( flow::buffer_node<int> );\n    TestTypeDefinitionPresence( flow::queue_node<int> );\n    TestTypeDefinitionPresence( flow::sequencer_node<int> );\n    TestTypeDefinitionPresence( flow::priority_queue_node<int> );\n    TestTypeDefinitionPresence( flow::limiter_node<int> );\n    TestTypeDefinitionPresence2(flow::indexer_node<int, int> );\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    TestTypeDefinitionPresence2( flow::composite_node<tbb::flow::tuple<int>, tbb::flow::tuple<int> > );\n#endif\n    using tbb::flow::queueing;\n    TestTypeDefinitionPresence2( flow::join_node< intpair, queueing > );\n    /* Mutex names */\n    TestTypeDefinitionPresence( mutex );\n    TestTypeDefinitionPresence( null_mutex );\n    TestTypeDefinitionPresence( null_rw_mutex );\n    TestTypeDefinitionPresence( queuing_mutex );\n    TestTypeDefinitionPresence( queuing_rw_mutex );\n    TestTypeDefinitionPresence( recursive_mutex );\n    TestTypeDefinitionPresence( spin_mutex );\n    TestTypeDefinitionPresence( spin_rw_mutex );\n    TestTypeDefinitionPresence( speculative_spin_mutex );\n    TestTypeDefinitionPresence( speculative_spin_rw_mutex );\n    TestTypeDefinitionPresence( critical_section );\n    TestTypeDefinitionPresence( reader_writer_lock );\n#if __TBB_TASK_GROUP_CONTEXT\n    TestTypeDefinitionPresence( tbb_exception );\n    TestTypeDefinitionPresence( captured_exception );\n    TestTypeDefinitionPresence( movable_exception<int> );\n#if !TBB_USE_CAPTURED_EXCEPTION\n    TestTypeDefinitionPresence( internal::tbb_exception_ptr );\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n    TestTypeDefinitionPresence( task_group_context );\n    TestTypeDefinitionPresence( task_group );\n    TestTypeDefinitionPresence( structured_task_group );\n    TestTypeDefinitionPresence( task_handle<Body> );\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    TestTypeDefinitionPresence( blocked_range3d<int> );\n    TestFuncDefinitionPresence( parallel_invoke, (const Body&, const Body&), void );\n    TestFuncDefinitionPresence( parallel_do, (int*, int*, const Body1&), void );\n    TestFuncDefinitionPresence( parallel_for_each, (int*, int*, const Body1&), void );\n    TestFuncDefinitionPresence( parallel_for, (int, int, int, const Body1&), void );\n    TestFuncDefinitionPresence( parallel_for, (const tbb::blocked_range<int>&, const Body2&, const tbb::simple_partitioner&), void );\n    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, const int&, const Body1a&, const Body1b&, const tbb::auto_partitioner&), int );\n    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, Body2&, tbb::affinity_partitioner&), void );\n    TestFuncDefinitionPresence( parallel_deterministic_reduce, (const tbb::blocked_range<int>&, const int&, const Body1a&, const Body1b&), int );\n    TestFuncDefinitionPresence( parallel_deterministic_reduce, (const tbb::blocked_range<int>&, Body2&), void );\n    TestFuncDefinitionPresence( parallel_scan, (const tbb::blocked_range2d<int>&, Body3&, const tbb::auto_partitioner&), void );\n    TestFuncDefinitionPresence( parallel_sort, (int*, int*), void );\n    TestTypeDefinitionPresence( pipeline );\n    TestFuncDefinitionPresence( parallel_pipeline, (size_t, const tbb::filter_t<void,void>&), void );\n    TestTypeDefinitionPresence( task );\n    TestTypeDefinitionPresence( empty_task );\n    TestTypeDefinitionPresence( task_list );\n    TestTypeDefinitionPresence( task_arena );\n    TestTypeDefinitionPresence( task_scheduler_init );\n    TestTypeDefinitionPresence( task_scheduler_observer );\n    TestTypeDefinitionPresence( tbb_thread );\n    TestTypeDefinitionPresence( tbb_allocator<int> );\n    TestTypeDefinitionPresence( zero_allocator<int> );\n    TestTypeDefinitionPresence( tick_count );\n#if TBB_PREVIEW_GLOBAL_CONTROL\n    TestTypeDefinitionPresence( global_control );\n#endif\n    TestFuncDefinitionPresence( parallel_for, (int, int, int, const Body1&, const tbb::static_partitioner&), void );\n    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, Body2&, const tbb::static_partitioner&), void );\n\n#if __TBB_CPF_BUILD\n    TestPreviewNames();\n#endif\n#ifdef DO_TEST_DEBUG_MACRO\n#if TBB_USE_DEBUG\n    ASSERT( isDebugExpected, \"Debug mode is observed while release mode is expected.\" );\n#else\n    ASSERT( !isDebugExpected, \"Release mode is observed while debug mode is expected.\" );\n#endif /* TBB_USE_DEBUG */\n#endif /* DO_TEST_DEBUG_MACRO */\n#if __TBB_TEST_SECONDARY\n    return true;\n#else\n    TestExceptionClassesExports();\n    Secondary();\n    return Harness::Done;\n#endif /* __TBB_TEST_SECONDARY */\n}\n#endif //!(__TBB_TEST_SECONDARY && __TBB_CPP11_STD_PLACEHOLDERS_LINKING_BROKEN)\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tbb_thread.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_thread.h\"\n#define THREAD tbb::tbb_thread\n#define THIS_THREAD tbb::this_tbb_thread\n#define THIS_THREAD_SLEEP THIS_THREAD::sleep\n#include \"test_thread.h\"\n#include \"harness.h\"\n\n/* we want to test tbb::tbb_thread */\nint TestMain () {\n    CheckSignatures();\n    RunTests();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tbb_version.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_stddef.h\"\n\n#if __TBB_WIN8UI_SUPPORT\n// TODO: figure out how the test can be enabled for win8ui\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness.h\"\nint TestMain() {\n    return Harness::Skipped;\n}\n#else\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <vector>\n#include <string>\n#include <utility>\n\n#include \"tbb/task_scheduler_init.h\"\n\n#define HARNESS_CUSTOM_MAIN 1\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#define HARNESS_NO_MAIN_ARGS 0\n#include \"harness.h\"\n\n#if defined (_WIN32) || defined (_WIN64)\n#define TEST_SYSTEM_COMMAND \"test_tbb_version.exe @\"\n#elif __APPLE__\n// DYLD_LIBRARY_PATH is purged for OS X 10.11, set it again\n#define TEST_SYSTEM_COMMAND \"DYLD_LIBRARY_PATH=. ./test_tbb_version.exe @\"\n#else\n#define TEST_SYSTEM_COMMAND \"./test_tbb_version.exe @\"\n#endif\n\nenum string_required {\n    required,\n    optional,\n    optional_multiple\n    };\n\ntypedef std::pair <std::string, string_required> string_pair;\n\nvoid initialize_strings_vector(std::vector <string_pair>* vector);\n\nconst char stderr_stream[] = \"version_test.err\";\nconst char stdout_stream[] = \"version_test.out\";\n\nHARNESS_EXPORT\nint main(int argc, char *argv[] ) {\n    const size_t psBuffer_len = 2048;\n    char psBuffer[psBuffer_len];\n/* We first introduced runtime version identification in 3014 */\n#if TBB_INTERFACE_VERSION>=3014\n    // For now, just test that run-time TBB version matches the compile-time version,\n    // since otherwise the subsequent test of \"TBB: INTERFACE VERSION\" string will fail anyway.\n    // We need something more clever in future.\n    if ( tbb::TBB_runtime_interface_version()!=TBB_INTERFACE_VERSION ){\n        snprintf( psBuffer, psBuffer_len,\n                  \"%s %s %d %s %d.\",\n                  \"Running with the library of different version than the test was compiled against.\",\n                  \"Expected\",\n                  TBB_INTERFACE_VERSION,\n                  \"- got\",\n                  tbb::TBB_runtime_interface_version()\n                  );\n        ASSERT( tbb::TBB_runtime_interface_version()==TBB_INTERFACE_VERSION, psBuffer );\n    }\n#endif\n#if __TBB_MIC_OFFLOAD\n    // Skip the test in offload mode.\n    // Run the test in 'true' native mode (because 'system()' works in 'true' native mode).\n    (argc, argv);\n    REPORT(\"skip\\n\");\n#elif __TBB_MPI_INTEROP || __bg__\n    (void) argc; // unused\n    (void) argv; // unused\n    REPORT(\"skip\\n\");\n#else\n    __TBB_TRY {\n        FILE *stream_out;\n        FILE *stream_err;\n\n        if(argc>1 && argv[1][0] == '@' ) {\n            stream_err = freopen( stderr_stream, \"w\", stderr );\n            if( stream_err == NULL ){\n                REPORT( \"Internal test error (freopen)\\n\" );\n                exit( 1 );\n            }\n            stream_out = freopen( stdout_stream, \"w\", stdout );\n            if( stream_out == NULL ){\n                REPORT( \"Internal test error (freopen)\\n\" );\n                exit( 1 );\n            }\n            {\n                tbb::task_scheduler_init init(1);\n            }\n            fclose( stream_out );\n            fclose( stream_err );\n            exit(0);\n        }\n        //1st step check that output is empty if TBB_VERSION is not defined.\n        if ( getenv(\"TBB_VERSION\") ){\n            REPORT( \"TBB_VERSION defined, skipping step 1 (empty output check)\\n\" );\n        }else{\n            if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){\n                REPORT( \"Error (step 1): Internal test error\\n\" );\n                exit( 1 );\n            }\n            //Checking output streams - they should be empty\n            stream_err = fopen( stderr_stream, \"r\" );\n            if( stream_err == NULL ){\n                REPORT( \"Error (step 1):Internal test error (stderr open)\\n\" );\n                exit( 1 );\n            }\n            while( !feof( stream_err ) ) {\n                if( fgets( psBuffer, psBuffer_len, stream_err ) != NULL ){\n                    REPORT( \"Error (step 1): stderr should be empty\\n\" );\n                    exit( 1 );\n                }\n            }\n            fclose( stream_err );\n            stream_out = fopen( stdout_stream, \"r\" );\n            if( stream_out == NULL ){\n                REPORT( \"Error (step 1):Internal test error (stdout open)\\n\" );\n                exit( 1 );\n            }\n            while( !feof( stream_out ) ) {\n                if( fgets( psBuffer, psBuffer_len, stream_out ) != NULL ){\n                    REPORT( \"Error (step 1): stdout should be empty\\n\" );\n                    exit( 1 );\n                }\n            }\n            fclose( stream_out );\n        }\n\n        //Setting TBB_VERSION in case it is not set\n        if ( !getenv(\"TBB_VERSION\") ){\n            Harness::SetEnv(\"TBB_VERSION\",\"1\");\n        }\n\n        if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){\n            REPORT( \"Error (step 2):Internal test error\\n\" );\n            exit( 1 );\n        }\n        //Checking pipe - it should contain version data\n        std::vector <string_pair> strings_vector;\n        std::vector <string_pair>::iterator strings_iterator;\n\n        initialize_strings_vector( &strings_vector );\n        strings_iterator = strings_vector.begin();\n\n        stream_out = fopen( stdout_stream, \"r\" );\n        if( stream_out == NULL ){\n            REPORT( \"Error (step 2):Internal test error (stdout open)\\n\" );\n            exit( 1 );\n        }\n        while( !feof( stream_out ) ) {\n            if( fgets( psBuffer, psBuffer_len, stream_out ) != NULL ){\n                REPORT( \"Error (step 2): stdout should be empty\\n\" );\n                exit( 1 );\n            }\n        }\n        fclose( stream_out );\n\n        stream_err = fopen( stderr_stream, \"r\" );\n        if( stream_err == NULL ){\n            REPORT( \"Error (step 1):Internal test error (stderr open)\\n\" );\n            exit( 1 );\n        }\n\n        while( !feof( stream_err ) ) {\n            if( fgets( psBuffer, psBuffer_len, stream_err ) != NULL ){\n                if (strstr( psBuffer, \"TBBmalloc: \" )) {\n                    // TBB allocator might or might not be here, ignore it\n                    continue;\n                }\n                bool match_found = false;\n                do{\n                    if ( strings_iterator == strings_vector.end() ){\n                        REPORT( \"Error: version string dictionary ended prematurely.\\n\" );\n                        REPORT( \"No match for: \\t%s\", psBuffer );\n                        exit( 1 );\n                    }\n                    if ( strstr( psBuffer, strings_iterator->first.c_str() ) == NULL ){ // mismatch\n                        if( strings_iterator->second == required ){\n                            REPORT( \"Error: version strings do not match.\\n\" );\n                            REPORT( \"Expected \\\"%s\\\" not found in:\\n\\t%s\", strings_iterator->first.c_str(), psBuffer );\n                            exit( 1 );\n                        }\n                        ++strings_iterator;\n                    }else{\n                        match_found = true;\n                        if( strings_iterator->second != optional_multiple )\n                            ++strings_iterator;\n                    }\n                }while( !match_found );\n            }\n        }\n        fclose( stream_err );\n    } __TBB_CATCH(...) {\n        ASSERT( 0,\"unexpected exception\" );\n    }\n    REPORT(\"done\\n\");\n#endif //__TBB_MIC_OFFLOAD, __TBB_MPI_INTEROP etc\n    return 0;\n}\n\n\n// Fill dictionary with version strings for platforms\nvoid initialize_strings_vector(std::vector <string_pair>* vector)\n{\n    vector->push_back(string_pair(\"TBB: VERSION\\t\\t2018.0\", required));       // check TBB_VERSION\n    vector->push_back(string_pair(\"TBB: INTERFACE VERSION\\t10006\", required)); // check TBB_INTERFACE_VERSION\n    vector->push_back(string_pair(\"TBB: BUILD_DATE\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_HOST\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_OS\", required));\n#if _WIN32||_WIN64\n#if !__MINGW32__\n    vector->push_back(string_pair(\"TBB: BUILD_CL\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_COMPILER\", required));\n#else\n    vector->push_back(string_pair(\"TBB: BUILD_GCC\", required));\n#endif\n#elif __APPLE__\n    vector->push_back(string_pair(\"TBB: BUILD_KERNEL\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_CLANG\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_XCODE\", optional));\n    vector->push_back(string_pair(\"TBB: BUILD_COMPILER\", optional)); //if( getenv(\"COMPILER_VERSION\") )\n#elif __sun\n    vector->push_back(string_pair(\"TBB: BUILD_KERNEL\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_SUNCC\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_COMPILER\", optional)); //if( getenv(\"COMPILER_VERSION\") )\n#else // We use version_info_linux.sh for unsupported OSes\n#if !__ANDROID__\n    vector->push_back(string_pair(\"TBB: BUILD_KERNEL\", required));\n#endif\n    vector->push_back(string_pair(\"TBB: BUILD_GCC\", optional));\n    vector->push_back(string_pair(\"TBB: BUILD_CLANG\", optional));\n    vector->push_back(string_pair(\"TBB: BUILD_TARGET_CXX\", optional));\n    vector->push_back(string_pair(\"TBB: BUILD_COMPILER\", optional)); //if( getenv(\"COMPILER_VERSION\") )\n#if __ANDROID__\n    vector->push_back(string_pair(\"TBB: BUILD_NDK\", optional));\n    vector->push_back(string_pair(\"TBB: BUILD_LD\", optional));\n#else\n    vector->push_back(string_pair(\"TBB: BUILD_LIBC\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_LD\", required));\n#endif // !__ANDROID__\n#endif // OS\n    vector->push_back(string_pair(\"TBB: BUILD_TARGET\", required));\n    vector->push_back(string_pair(\"TBB: BUILD_COMMAND\", required));\n    vector->push_back(string_pair(\"TBB: TBB_USE_DEBUG\", required));\n    vector->push_back(string_pair(\"TBB: TBB_USE_ASSERT\", required));\n#if __TBB_CPF_BUILD\n    vector->push_back(string_pair(\"TBB: TBB_PREVIEW_BINARY\", required));\n#endif\n    vector->push_back(string_pair(\"TBB: DO_ITT_NOTIFY\", required));\n    vector->push_back(string_pair(\"TBB: ITT\", optional)); //#ifdef DO_ITT_NOTIFY\n    vector->push_back(string_pair(\"TBB: ALLOCATOR\", required));\n#if _WIN32||_WIN64\n    vector->push_back(string_pair(\"TBB: Processor groups\", required));\n    vector->push_back(string_pair(\"TBB: ----- Group\", optional_multiple));\n#endif\n    vector->push_back(string_pair(\"TBB: RML\", optional));\n    vector->push_back(string_pair(\"TBB: Intel(R) RML library built:\", optional));\n    vector->push_back(string_pair(\"TBB: Intel(R) RML library version:\", optional));\n    vector->push_back(string_pair(\"TBB: Tools support\", required));\n    return;\n}\n#endif /* __TBB_WIN8UI_SUPPORT */\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_thread.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/atomic.h\"\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include <utility> // std::move\n#endif\n\n#define HARNESS_NO_PARSE_COMMAND_LINE 1\n#include \"harness_report.h\"\n#include \"harness_assert.h\"\n\nbool CheckSignatures() {\n    // Checks that thread ids can be compared, in the way users would do it\n    THREAD::id id1, id2;\n    bool result = id1 == id2;\n    result |= id1 != id2;\n    result |= id1 < id2;\n    result |= id1 > id2;\n    result |= id1 <= id2;\n    result |= id1 >= id2;\n    tbb::tbb_hash<THREAD::id> hash;\n    return result |= hash(id1)==hash(id2);\n}\n\nstatic const int THRDS = 3;\nstatic const int THRDS_DETACH = 2;\nstatic tbb::atomic<int> sum;\nstatic tbb::atomic<int> BaseCount;\nstatic THREAD::id real_ids[THRDS+THRDS_DETACH];\n\nclass Base {\n    mutable int copy_throws;\n    friend void RunTests();\n    friend void CheckExceptionSafety();\n    void operator=( const Base& );   // Deny access\nprotected:\n    Base() : copy_throws(100) {++BaseCount;}\n    Base( const Base& c ) : copy_throws(c.copy_throws) {\n        if( --copy_throws<=0 )\n            __TBB_THROW(0);\n        ++BaseCount;\n    }\n    ~Base() {--BaseCount;}\n};\n\ntemplate<int N>\nclass Data: Base {\n    Data();                          // Deny access\n    explicit Data(int v) : value(v) {}\n\n    friend void RunTests();\n    friend void CheckExceptionSafety();\npublic:\n    int value;\n};\n\n#include \"harness_barrier.h\"\n\nclass ThreadFunc: Base {\n    ThreadFunc() {}\n\n    static Harness::SpinBarrier init_barrier;\n\n    friend void RunTests();\npublic:\n    void operator()(){\n        real_ids[0] = THIS_THREAD::get_id();\n        init_barrier.wait();\n\n        sum.fetch_and_add(1);\n    }\n    void operator()(int num){\n        real_ids[num] = THIS_THREAD::get_id();\n        init_barrier.wait();\n\n        sum.fetch_and_add(num);\n    }\n    void operator()(int num, Data<0> dx) {\n        real_ids[num] = THIS_THREAD::get_id();\n\n        const double WAIT = .1;\n#if _WIN32 || _WIN64\n        const double LONG_TOLERANCE = 0.120;  // maximal scheduling quantum for Windows Server\n#else\n        const double LONG_TOLERANCE = 0.200;  // reasonable upper bound\n#endif\n        tbb::tick_count::interval_t test_interval(WAIT);\n        tbb::tick_count t0 = tbb::tick_count::now();\n        THIS_THREAD_SLEEP ( test_interval );\n        tbb::tick_count t1 = tbb::tick_count::now();\n        double delta = ((t1-t0)-test_interval).seconds();\n        if(delta < 0.0)\n            REPORT(\"ERROR: Sleep interval too short (%g < %g)\\n\",\n                (t1-t0).seconds(), test_interval.seconds() );\n        if(delta > LONG_TOLERANCE)\n            REPORT(\"Warning: Sleep interval too long (%g outside long tolerance(%g))\\n\",\n                (t1-t0).seconds(), test_interval.seconds() + LONG_TOLERANCE);\n        init_barrier.wait();\n\n        sum.fetch_and_add(num);\n        sum.fetch_and_add(dx.value);\n    }\n    void operator()(Data<0> d) {\n        THIS_THREAD_SLEEP ( tbb::tick_count::interval_t(d.value*1.) );\n    }\n};\n\nHarness::SpinBarrier ThreadFunc::init_barrier(THRDS);\n\nvoid CheckRelations( const THREAD::id ids[], int n, bool duplicates_allowed ) {\n    for( int i=0; i<n; ++i ) {\n        const THREAD::id x = ids[i];\n        for( int j=0; j<n; ++j ) {\n            const THREAD::id y = ids[j];\n            ASSERT( (x==y)==!(x!=y), NULL );\n            ASSERT( (x<y)==!(x>=y), NULL );\n            ASSERT( (x>y)==!(x<=y), NULL );\n            ASSERT( (x<y)+(x==y)+(x>y)==1, NULL );\n            ASSERT( x!=y || i==j || duplicates_allowed, NULL );\n            for( int k=0; k<n; ++k ) {\n                const THREAD::id z = ids[j];\n                ASSERT( !(x<y && y<z) || x<z, \"< is not transitive\" );\n            }\n        }\n    }\n}\n\nclass AnotherThreadFunc: Base {\npublic:\n    void operator()() {}\n    void operator()(const Data<1>&) {}\n    void operator()(const Data<1>&, const Data<2>&) {}\n    friend void CheckExceptionSafety();\n};\n\n#if TBB_USE_EXCEPTIONS\nvoid CheckExceptionSafety() {\n    int original_count = BaseCount;\n    // d loops over number of copies before throw occurs\n    for( int d=1; d<=3; ++d ) {\n        // Try all combinations of throw/nothrow for f, x, and y's copy constructor.\n        for( int i=0; i<8; ++i ) {\n            {\n                const AnotherThreadFunc f = AnotherThreadFunc();\n                if( i&1 ) f.copy_throws = d;\n                const Data<1> x(0);\n                if( i&2 ) x.copy_throws = d;\n                const Data<2> y(0);\n                if( i&4 ) y.copy_throws = d;\n                bool exception_caught = false;\n                for( int j=0; j<3; ++j ) {\n                    try {\n                        switch(j) {\n                            case 0: {THREAD t(f); t.join();} break;\n                            case 1: {THREAD t(f,x); t.join();} break;\n                            case 2: {THREAD t(f,x,y); t.join();} break;\n                        }\n                    } catch(...) {\n                        exception_caught = true;\n                    }\n                    ASSERT( !exception_caught||(i&((1<<(j+1))-1))!=0, NULL );\n                }\n            }\n            ASSERT( BaseCount==original_count, \"object leak detected\" );\n        }\n    }\n}\n#endif /* TBB_USE_EXCEPTIONS */\n\n#include <cstdio>\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nTHREAD returnThread() {\n    return THREAD();\n}\n#endif\n\nvoid RunTests() {\n\n    ThreadFunc t;\n    Data<0> d100(100), d1(1), d0(0);\n    const THREAD::id id_zero;\n    THREAD::id id0, uniq_ids[THRDS];\n\n    THREAD thrs[THRDS];\n    THREAD thr;\n    THREAD thr0(t);\n    THREAD thr1(t, 2);\n    THREAD thr2(t, 1, d100);\n\n    ASSERT( thr0.get_id() != id_zero, NULL );\n    id0 = thr0.get_id();\n    tbb::move(thrs[0], thr0);\n    ASSERT( thr0.get_id() == id_zero, NULL );\n    ASSERT( thrs[0].get_id() == id0, NULL );\n\n    THREAD::native_handle_type h1 = thr1.native_handle();\n    THREAD::native_handle_type h2 = thr2.native_handle();\n    THREAD::id id1 = thr1.get_id();\n    THREAD::id id2 = thr2.get_id();\n    tbb::swap(thr1, thr2);\n    ASSERT( thr1.native_handle() == h2, NULL );\n    ASSERT( thr2.native_handle() == h1, NULL );\n    ASSERT( thr1.get_id() == id2, NULL );\n    ASSERT( thr2.get_id() == id1, NULL );\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    {\n        THREAD tmp_thr(std::move(thr1));\n        ASSERT( tmp_thr.native_handle() == h2 && tmp_thr.get_id() == id2, NULL );\n        thr1 = std::move(tmp_thr);\n        ASSERT( thr1.native_handle() == h2 && thr1.get_id() == id2, NULL );\n    }\n#endif\n\n    thr1.swap(thr2);\n    ASSERT( thr1.native_handle() == h1, NULL );\n    ASSERT( thr2.native_handle() == h2, NULL );\n    ASSERT( thr1.get_id() == id1, NULL );\n    ASSERT( thr2.get_id() == id2, NULL );\n    thr1.swap(thr2);\n\n    tbb::move(thrs[1], thr1);\n    ASSERT( thr1.get_id() == id_zero, NULL );\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    thrs[2] = returnThread();\n    ASSERT( thrs[2].get_id() == id_zero, NULL );\n#endif\n    tbb::move(thrs[2], thr2);\n    ASSERT( thr2.get_id() == id_zero, NULL );\n\n    for (int i=0; i<THRDS; i++)\n        uniq_ids[i] = thrs[i].get_id();\n\n    ASSERT( thrs[2].joinable(), NULL );\n\n    for (int i=0; i<THRDS; i++)\n        thrs[i].join();\n\n#if !__TBB_WIN8UI_SUPPORT\n    //  TODO: to find out the way to find thread_id without GetThreadId and other\n    //  desktop functions.\n    //  Now tbb_thread does have its own thread_id that stores std::thread object\n    //  Test will fail in case it is run in desktop mode against New Windows*8 UI library\n    for (int i=0; i<THRDS; i++)\n        ASSERT(  real_ids[i] == uniq_ids[i], NULL );\n#endif\n\n    int current_sum = sum;\n    ASSERT( current_sum == 104, NULL );\n    ASSERT( ! thrs[2].joinable(), NULL );\n    ASSERT( BaseCount==4, \"object leak detected\" );\n\n#if TBB_USE_EXCEPTIONS\n    CheckExceptionSafety();\n#endif\n\n    // Note: all tests involving BaseCount should be put before the tests\n    // involing detached threads, because there is no way of knowing when\n    // a detached thread destroys its arguments.\n\n    THREAD thr_detach_0(t, d0);\n    real_ids[THRDS] = thr_detach_0.get_id();\n    thr_detach_0.detach();\n    ASSERT( thr_detach_0.get_id() == id_zero, NULL );\n\n    THREAD thr_detach_1(t, d1);\n    real_ids[THRDS+1] = thr_detach_1.get_id();\n    thr_detach_1.detach();\n    ASSERT( thr_detach_1.get_id() == id_zero, NULL );\n\n    CheckRelations(real_ids, THRDS+THRDS_DETACH, true);\n\n    CheckRelations(uniq_ids, THRDS, false);\n\n    for (int i=0; i<2; i++) {\n        AnotherThreadFunc empty_func;\n        THREAD thr_to(empty_func), thr_from(empty_func);\n        THREAD::id from_id = thr_from.get_id();\n        if (i) thr_to.join();\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        thr_to = std::move(thr_from);\n#else\n        thr_to = thr_from;\n#endif\n        ASSERT( thr_from.get_id() == THREAD::id(), NULL );\n        ASSERT( thr_to.get_id() == from_id, NULL );\n    }\n\n    ASSERT( THREAD::hardware_concurrency() > 0, NULL);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tick_count.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tick_count.h\"\n#include \"harness_assert.h\"\n\n//! Assert that two times in seconds are very close.\nvoid AssertNear( double x, double y ) {\n    ASSERT( -1.0E-10 <= x-y && x-y <=1.0E-10, NULL );\n}\n\n//! Test arithmetic operators on tick_count::interval_t\nvoid TestArithmetic( const tbb::tick_count& t0, const tbb::tick_count& t1, const tbb::tick_count& t2 ) {\n    tbb::tick_count::interval_t i= t1-t0;\n    tbb::tick_count::interval_t j = t2-t1;\n    tbb::tick_count::interval_t k = t2-t0;\n    AssertSameType( tbb::tick_count::interval_t(), i-j );\n    AssertSameType( tbb::tick_count::interval_t(), i+j );\n    ASSERT( i.seconds()>1E-9, NULL );\n    ASSERT( j.seconds()>1E-9, NULL );\n    ASSERT( k.seconds()>2E-9, NULL );\n    AssertNear( (i+j).seconds(), k.seconds() );\n    AssertNear( (k-j).seconds(), i.seconds() );\n    AssertNear( ((k-j)+(j-i)).seconds(), k.seconds()-i.seconds() );\n    tbb::tick_count::interval_t sum;\n    sum += i;\n    sum += j;\n    AssertNear( sum.seconds(), k.seconds() );\n    sum -= i;\n    AssertNear( sum.seconds(), j.seconds() );\n    sum -= j;\n    AssertNear( sum.seconds(), 0.0 );\n}\n\n//------------------------------------------------------------------------\n// Test for overhead in calls to tick_count\n//------------------------------------------------------------------------\n\n//! Wait for given duration.\n/** The duration parameter is in units of seconds. */\nstatic void WaitForDuration( double duration ) {\n    tbb::tick_count start = tbb::tick_count::now();\n    while( (tbb::tick_count::now()-start).seconds() < duration )\n        continue;\n}\n\n#include \"harness.h\"\n\n//! Test that average timer overhead is within acceptable limit.\n/** The 'tolerance' value inside the test specifies the limit. */\nvoid TestSimpleDelay( int ntrial, double duration, double tolerance ) {\n    double total_worktime = 0;\n    // Iteration -1 warms up the code cache.\n    for( int trial=-1; trial<ntrial; ++trial ) {\n        tbb::tick_count t0 = tbb::tick_count::now();\n        if( duration ) WaitForDuration(duration);\n        tbb::tick_count t1 = tbb::tick_count::now();\n        if( trial>=0 ) {\n            total_worktime += (t1-t0).seconds();\n        }\n    }\n    // Compute average worktime and average delta\n    double worktime = total_worktime/ntrial;\n    double delta = worktime-duration;\n    REMARK(\"worktime=%g delta=%g tolerance=%g\\n\", worktime, delta, tolerance);\n\n    // Check that delta is acceptable\n    if( delta<0 )\n        REPORT(\"ERROR: delta=%g < 0\\n\",delta);\n    if( delta>tolerance )\n        REPORT(\"%s: delta=%g > %g=tolerance where duration=%g\\n\",delta>3*tolerance?\"ERROR\":\"Warning\",delta,tolerance,duration);\n}\n\n//------------------------------------------------------------------------\n// Test for subtracting calls to tick_count from different threads.\n//------------------------------------------------------------------------\n\n#include \"tbb/atomic.h\"\nstatic tbb::atomic<int> Counter1, Counter2;\nstatic tbb::atomic<bool> Flag1, Flag2;\nstatic tbb::tick_count *tick_count_array;\nstatic double barrier_time;\n\nstruct TickCountDifferenceBody {\n    TickCountDifferenceBody( int num_threads ) {\n        Counter1 = Counter2 = num_threads;\n        Flag1 = Flag2 = false;\n    }\n    void operator()( int id ) const {\n        bool last = false;\n        // The first barrier.\n        if ( --Counter1 == 0 ) last = true;\n        while ( !last && !Flag1.load<tbb::acquire>() ) __TBB_Pause( 1 );\n        // Save a time stamp of the first barrier releasing.\n        tick_count_array[id] = tbb::tick_count::now();\n\n        // The second barrier.\n        if ( --Counter2 == 0 ) Flag2.store<tbb::release>(true);\n        // The last thread should release threads from the first barrier after it reaches the second\n        // barrier to avoid a deadlock.\n        if ( last ) Flag1.store<tbb::release>(true);\n        // After the last thread releases threads from the first barrier it waits for a signal from\n        // the second barrier.\n        while ( !Flag2.load<tbb::acquire>() ) __TBB_Pause( 1 );\n\n        if ( last )\n            // We suppose that the barrier time is a time interval between the moment when the last\n            // thread reaches the first barrier and the moment when the same thread is released from\n            // the second barrier. This time is not accurate time of two barriers but it is\n            // guaranteed that it does not exceed it.\n            barrier_time = (tbb::tick_count::now() - tick_count_array[id]).seconds() / 2;\n    }\n    ~TickCountDifferenceBody() {\n        ASSERT( Counter1 == 0 && Counter2 == 0, NULL );\n    }\n};\n\n//! Test that two tick_count values recorded on different threads can be meaningfully subtracted.\nvoid TestTickCountDifference( int n ) {\n    const double tolerance = 3E-4;\n    tick_count_array = new tbb::tick_count[n];\n\n    int num_trials = 0;\n    tbb::tick_count start_time = tbb::tick_count::now();\n    do {\n        NativeParallelFor( n, TickCountDifferenceBody( n ) );\n        if ( barrier_time > tolerance )\n            // The machine seems to be oversubscibed so skip the test.\n            continue;\n        for ( int i = 0; i < n; ++i ) {\n            for ( int j = 0; j < i; ++j ) {\n                double diff = (tick_count_array[i] - tick_count_array[j]).seconds();\n                if ( diff < 0 ) diff = -diff;\n                if ( diff > tolerance )\n                    REPORT( \"Warning: cross-thread tick_count difference = %g > %g = tolerance\\n\", diff, tolerance );\n                ASSERT( diff < 3 * tolerance, \"Too big difference.\" );\n            }\n        }\n        // During 5 seconds we are trying to get 10 successful trials.\n    } while ( ++num_trials < 10 && (tbb::tick_count::now() - start_time).seconds() < 5 );\n    REMARK( \"Difference test time: %g sec\\n\", (tbb::tick_count::now() - start_time).seconds() );\n    ASSERT( num_trials == 10, \"The machine seems to be heavily oversubscibed, difference test was skipped.\" );\n    delete[] tick_count_array;\n}\n\nvoid TestResolution() {\n    static double target_value = 0.314159265358979323846264338327950288419;\n    static double step_value = 0.00027182818284590452353602874713526624977572;\n    static int range_value = 100;\n    double avg_diff = 0.0;\n    double max_diff = 0.0;\n    for( int i = -range_value; i <= range_value; ++i ) {\n        double my_time = target_value + step_value * i;\n        tbb::tick_count::interval_t t0(my_time);\n        double interval_time = t0.seconds();\n        avg_diff += (my_time - interval_time);\n        if ( max_diff < my_time-interval_time) max_diff = my_time-interval_time;\n        // time always truncates\n        ASSERT(interval_time >= 0 && my_time - interval_time < tbb::tick_count::resolution(), \"tick_count resolution out of range\");\n    }\n    avg_diff = (avg_diff/(2*range_value+1))/tbb::tick_count::resolution();\n    max_diff /= tbb::tick_count::resolution();\n    REMARK(\"avg_diff = %g ticks, max_diff = %g ticks\\n\", avg_diff, max_diff);\n}\n\n#include \"tbb/tbb_thread.h\"\n\nint TestMain () {\n    // Increased tolerance for Virtual Machines\n    double tolerance_multiplier = Harness::GetEnv( \"VIRTUAL_MACHINE\" ) ? 50. : 1.;\n    REMARK( \"tolerance_multiplier = %g \\n\", tolerance_multiplier );\n\n    tbb::tick_count t0 = tbb::tick_count::now();\n    TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0,    /*tolerance=*/2E-6 * tolerance_multiplier);\n    tbb::tick_count t1 = tbb::tick_count::now();\n    TestSimpleDelay(/*ntrial=*/1000,   /*duration=*/0.001,/*tolerance=*/5E-6 * tolerance_multiplier);\n    tbb::tick_count t2 = tbb::tick_count::now();\n    TestArithmetic(t0,t1,t2);\n\n    TestResolution();\n\n    int num_threads = tbb::tbb_thread::hardware_concurrency();\n    ASSERT( num_threads > 0, \"tbb::thread::hardware_concurrency() has returned an incorrect value\" );\n    if ( num_threads > 1 ) {\n        REMARK( \"num_threads = %d\\n\", num_threads );\n        TestTickCountDifference( num_threads );\n    } else {\n        REPORT( \"Warning: concurrency is too low for TestTickCountDifference ( num_threads = %d )\\n\", num_threads );\n    }\n\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_tuple.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// tbb::flow::tuple (implementation used in tbb::flow)\n// if <tuple> is available on the compiler/platform, that version should be the\n// one tested.\n\n#include \"harness.h\"\n// this test should match that in graph.h, so we test whatever tuple is\n// being used by the join_node.\n#if __TBB_CPP11_TUPLE_PRESENT\n#define __TESTING_STD_TUPLE__ 1\n#include <tuple>\nusing namespace std;\n#else\n#define __TESTING_STD_TUPLE__ 0\n#include \"tbb/compat/tuple\"\nusing namespace tbb::flow;\n#endif /*!__TBB_CPP11_TUPLE_PRESENT*/\n#include <string>\n#include <iostream>\n\nclass non_trivial {\npublic:\n    non_trivial() {}\n    ~non_trivial() {}\n    non_trivial(const non_trivial& other) : my_int(other.my_int), my_float(other.my_float) { }\n    int get_int() const { return my_int; }\n    float get_float() const { return my_float; }\n    void set_int(int newval) { my_int = newval; }\n    void set_float(float newval) { my_float = newval; }\nprivate:\n    int my_int;\n    float my_float;\n};\n\ntemplate<typename T1, typename T2, typename T3, typename U1, typename U2, typename U3>\nvoid RunOneComparisonTest() {\n    typedef tuple<T1,T2,T3> t_tuple;\n    typedef tuple<U1,U2,U3> u_tuple;\n\n    ASSERT(t_tuple((T1)1,(T2)1,(T3)1) == u_tuple((U1)1,(U2)1,(U3)1),NULL);\n    ASSERT(t_tuple((T1)1,(T2)0,(T3)1) <  u_tuple((U1)1,(U2)1,(U3)1),NULL);\n    ASSERT(t_tuple((T1)1,(T2)1,(T3)1) >  u_tuple((U1)1,(U2)1,(U3)0),NULL);\n    ASSERT(t_tuple((T1)1,(T2)0,(T3)1) != u_tuple((U1)1,(U2)1,(U3)1),NULL);\n    ASSERT(t_tuple((T1)1,(T2)0,(T3)1) <= u_tuple((U1)1,(U2)1,(U3)0),NULL);\n    ASSERT(t_tuple((T1)1,(T2)0,(T3)0) <= u_tuple((U1)1,(U2)0,(U3)0),NULL);\n    ASSERT(t_tuple((T1)1,(T2)1,(T3)1) >= u_tuple((U1)1,(U2)0,(U3)1),NULL);\n    ASSERT(t_tuple((T1)0,(T2)1,(T3)1) >= u_tuple((U1)0,(U2)1,(U3)1),NULL);\n\n    ASSERT(!(t_tuple((T1)2,(T2)1,(T3)1) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n    ASSERT(!(t_tuple((T1)1,(T2)2,(T3)1) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n    ASSERT(!(t_tuple((T1)1,(T2)1,(T3)2) == u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n\n    ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) <  u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n    ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) >  u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n    ASSERT(!(t_tuple((T1)1,(T2)1,(T3)1) !=  u_tuple((U1)1,(U2)1,(U3)1)),NULL);\n\n    ASSERT(t_tuple((T1)1,(T2)1,(T3)1) <= u_tuple((U1)1,(U2)1,(U3)1),NULL);\n    ASSERT(t_tuple((T1)1,(T2)1,(T3)1) >= u_tuple((U1)1,(U2)1,(U3)1),NULL);\n\n}\n\n#include \"harness_defs.h\"\n\nvoid RunTests() {\n\n#if __TESTING_STD_TUPLE__\n    REMARK(\"Testing platform tuple\\n\");\n#else\n    REMARK(\"Testing compat/tuple\\n\");\n#endif\n    tuple<int> ituple1(3);\n    tuple<int> ituple2(5);\n    tuple<double> ftuple2(4.1);\n\n    ASSERT(!(ituple1 == ituple2), NULL);\n    ASSERT(ituple1 != ituple2, NULL);\n    ASSERT(!(ituple1 > ituple2), NULL);\n    ASSERT(ituple1 < ituple2, NULL);\n    ASSERT(ituple1 <= ituple2, NULL);\n    ASSERT(!(ituple1 >= ituple2), NULL);\n    ASSERT(ituple1 < ftuple2, NULL);\n\n    typedef tuple<int,double,float> tuple_type1;\n    typedef tuple<int,int,int> int_tuple_type;\n    typedef tuple<int,non_trivial,int> non_trivial_tuple_type;\n    typedef tuple<double,std::string,char> stringy_tuple_type;\n    const tuple_type1 tup1(42,3.14159,2.0f);\n    int_tuple_type int_tup(4, 5, 6);\n    non_trivial_tuple_type nti;\n    stringy_tuple_type stv;\n    get<1>(stv) = \"hello\";\n    get<2>(stv) = 'x';\n\n    ASSERT(get<0>(stv) == 0.0, NULL);\n    ASSERT(get<1>(stv) == \"hello\", NULL);\n    ASSERT(get<2>(stv) == 'x', NULL);\n\n    ASSERT(tuple_size<tuple_type1>::value == 3, NULL);\n    ASSERT(get<0>(tup1) == 42, NULL);\n    ASSERT(get<1>(tup1) == 3.14159, NULL);\n    ASSERT(get<2>(tup1) == 2.0, NULL);\n\n    get<1>(nti).set_float(1.0);\n    get<1>(nti).set_int(32);\n    ASSERT(get<1>(nti).get_int() == 32, NULL);\n    ASSERT(get<1>(nti).get_float() == 1.0, NULL);\n\n    // converting constructor\n    tuple<double,double,double> tup2(1,2.0,3.0f);\n    tuple<double,double,double> tup3(9,4.0,7.0f);\n    ASSERT(tup2 != tup3, NULL);\n\n    ASSERT(tup2 < tup3, NULL);\n\n    // assignment\n    tup2 = tup3;\n    ASSERT(tup2 == tup3, NULL);\n\n    tup2 = int_tup;\n    ASSERT(get<0>(tup2) == 4, NULL);\n    ASSERT(get<1>(tup2) == 5, NULL);\n    ASSERT(get<2>(tup2) == 6, NULL);\n\n    // increment component of tuple\n    get<0>(tup2) += 1;\n    ASSERT(get<0>(tup2) == 5, NULL);\n\n    std::pair<int,int> two_pair( 4, 8);\n    tuple<int,int> two_pair_tuple;\n    two_pair_tuple = two_pair;\n    ASSERT(get<0>(two_pair_tuple) == 4, NULL);\n    ASSERT(get<1>(two_pair_tuple) == 8, NULL);\n\n    //relational ops\n    ASSERT(int_tuple_type(1,1,0) == int_tuple_type(1,1,0),NULL);\n    ASSERT(int_tuple_type(1,0,1) <  int_tuple_type(1,1,1),NULL);\n    ASSERT(int_tuple_type(1,0,0) >  int_tuple_type(0,1,0),NULL);\n    ASSERT(int_tuple_type(0,0,0) != int_tuple_type(1,0,1),NULL);\n    ASSERT(int_tuple_type(0,1,0) <= int_tuple_type(0,1,1),NULL);\n    ASSERT(int_tuple_type(0,0,1) <= int_tuple_type(0,0,1),NULL);\n    ASSERT(int_tuple_type(1,1,1) >= int_tuple_type(1,0,0),NULL);\n    ASSERT(int_tuple_type(0,1,1) >= int_tuple_type(0,1,1),NULL);\n\n#if !__TBB_TUPLE_COMPARISON_COMPILATION_BROKEN\n    typedef tuple<int,float,double,char> mixed_tuple_left;\n    typedef tuple<float,int,char,double> mixed_tuple_right;\n\n    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1),NULL);\n    ASSERT(mixed_tuple_left(1,0.f,1,char(1)) <  mixed_tuple_right(1.f,1,char(1),1),NULL);\n    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) >  mixed_tuple_right(1.f,1,char(0),1),NULL);\n    ASSERT(mixed_tuple_left(1,1.f,1,char(0)) != mixed_tuple_right(1.f,1,char(1),1),NULL);\n    ASSERT(mixed_tuple_left(1,0.f,1,char(1)) <= mixed_tuple_right(1.f,1,char(0),1),NULL);\n    ASSERT(mixed_tuple_left(1,0.f,0,char(1)) <= mixed_tuple_right(1.f,0,char(0),1),NULL);\n    ASSERT(mixed_tuple_left(1,1.f,1,char(0)) >= mixed_tuple_right(1.f,0,char(1),1),NULL);\n    ASSERT(mixed_tuple_left(0,1.f,1,char(0)) >= mixed_tuple_right(0.f,1,char(1),0),NULL);\n\n    ASSERT(!(mixed_tuple_left(2,1.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);\n    ASSERT(!(mixed_tuple_left(1,2.f,1,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);\n    ASSERT(!(mixed_tuple_left(1,1.f,2,char(1)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);\n    ASSERT(!(mixed_tuple_left(1,1.f,1,char(2)) == mixed_tuple_right(1.f,1,char(1),1)),NULL);\n\n    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) <  mixed_tuple_right(1.f,1,char(1),1)),NULL);\n    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) >  mixed_tuple_right(1.f,1,char(1),1)),NULL);\n    ASSERT(!(mixed_tuple_left(1,1.f,1,char(1)) != mixed_tuple_right(1.f,1,char(1),1)),NULL);\n\n    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) <= mixed_tuple_right(1.f,1,char(1),1),NULL);\n    ASSERT(mixed_tuple_left(1,1.f,1,char(1)) >= mixed_tuple_right(1.f,1,char(1),1),NULL);\n\n    RunOneComparisonTest<int,float,char,float,char,int>();\n    RunOneComparisonTest<double,float,char,float,double,int>();\n    RunOneComparisonTest<int,float,char,short,char,short>();\n    RunOneComparisonTest<double,float,short,float,char,int>();\n#endif /* __TBB_TUPLE_COMPARISON_COMPILATION_BROKEN */\n\n\n    // the following should result in a syntax error\n    // typedef tuple<float,float> mixed_short_tuple;\n    // ASSERT(mixed_tuple_left(1,1.f,1,1) != mixed_short_tuple(1.f,1.f),NULL);\n\n}\n\nint TestMain() {\n    RunTests();\n    return Harness::Done;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_write_once_node.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#define TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE 1\n#endif\n\n#include \"harness_graph.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#define N 300\n#define T 4\n#define M 4\n\ntemplate< typename R >\nvoid simple_read_write_tests() {\n    tbb::flow::graph g;\n    tbb::flow::write_once_node<R> n(g);\n\n    for ( int t = 0; t < T; ++t ) {\n        R v0(0);\n        std::vector< harness_counting_receiver<R> > r(M, harness_counting_receiver<R>(g));\n\n        ASSERT( n.is_valid() == false, NULL );\n        ASSERT( n.try_get( v0 ) == false, NULL );\n\n        if ( t % 2 ) {\n            ASSERT( n.try_put( static_cast<R>(N+1) ), NULL );\n            ASSERT( n.is_valid() == true, NULL );\n            ASSERT( n.try_get( v0 ) == true, NULL );\n            ASSERT( v0 == R(N+1), NULL );\n       }\n\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::make_edge( n, r[i] );\n        }\n\n        if ( t%2 ) {\n            for (int i = 0; i < M; ++i) {\n                 size_t c = r[i].my_count;\n                 ASSERT( int(c) == 1, NULL );\n            }\n        }\n\n        for (int i = 1; i <= N; ++i ) {\n            R v1(static_cast<R>(i));\n\n            bool result = n.try_put( v1 );\n            if ( !(t%2) && i == 1 )\n                ASSERT( result == true, NULL );\n            else\n                ASSERT( result == false, NULL );\n\n            ASSERT( n.is_valid() == true, NULL );\n\n            for (int j = 0; j < N; ++j ) {\n                R v2(0);\n                ASSERT( n.try_get( v2 ), NULL );\n                if ( t%2 )\n                    ASSERT( R(N+1) == v2, NULL );\n                else\n                    ASSERT( R(1) == v2, NULL );\n            }\n        }\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == 1, NULL );\n        }\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::remove_edge( n, r[i] );\n        }\n        ASSERT( n.try_put( R(0) ) == false, NULL );\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == 1, NULL );\n        }\n        n.clear();\n        ASSERT( n.is_valid() == false, NULL );\n        ASSERT( n.try_get( v0 ) == false, NULL );\n    }\n}\n\ntemplate< typename R >\nclass native_body : NoAssign {\n    tbb::flow::write_once_node<R> &my_node;\n\npublic:\n\n     native_body( tbb::flow::write_once_node<R> &n ) : my_node(n) {}\n\n     void operator()( int i ) const {\n         R v1(static_cast<R>(i));\n         ASSERT( my_node.try_put( v1 ) == false, NULL );\n         ASSERT( my_node.is_valid() == true, NULL );\n         ASSERT( my_node.try_get( v1 ) == true, NULL );\n         ASSERT( v1 == R(-1), NULL );\n     }\n};\n\ntemplate< typename R >\nvoid parallel_read_write_tests() {\n    tbb::flow::graph g;\n    tbb::flow::write_once_node<R> n(g);\n    //Create a vector of identical nodes\n    std::vector< tbb::flow::write_once_node<R> > wo_vec(2, n);\n\n    for (size_t node_idx=0; node_idx<wo_vec.size(); ++node_idx) {\n    for ( int t = 0; t < T; ++t ) {\n        std::vector< harness_counting_receiver<R> > r(M, harness_counting_receiver<R>(g));\n\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::make_edge( wo_vec[node_idx], r[i] );\n        }\n        R v0;\n        ASSERT( wo_vec[node_idx].is_valid() == false, NULL );\n        ASSERT( wo_vec[node_idx].try_get( v0 ) == false, NULL );\n\n        ASSERT( wo_vec[node_idx].try_put( R(-1) ), NULL );\n\n        NativeParallelFor( N, native_body<R>( wo_vec[node_idx] ) );\n\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == 1, NULL );\n        }\n        for (int i = 0; i < M; ++i) {\n           tbb::flow::remove_edge( wo_vec[node_idx], r[i] );\n        }\n        ASSERT( wo_vec[node_idx].try_put( R(0) ) == false, NULL );\n        for (int i = 0; i < M; ++i) {\n             size_t c = r[i].my_count;\n             ASSERT( int(c) == 1, NULL );\n        }\n        wo_vec[node_idx].clear();\n        ASSERT( wo_vec[node_idx].is_valid() == false, NULL );\n        ASSERT( wo_vec[node_idx].try_get( v0 ) == false, NULL );\n    }\n    }\n}\n\nint TestMain() {\n    simple_read_write_tests<int>();\n    simple_read_write_tests<float>();\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        tbb::task_scheduler_init init(p);\n        parallel_read_write_tests<int>();\n        parallel_read_write_tests<float>();\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n        test_reserving_nodes<tbb::flow::write_once_node, int>();\n#endif\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    test_extract_on_node<tbb::flow::write_once_node, int>();\n#endif\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb-2018_U6/src/test/test_yield.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Test that __TBB_Yield works.\n// On Red Hat EL4 U1, it does not work, because sched_yield is broken.\n\n#define HARNESS_DEFAULT_MIN_THREADS 4\n#define HARNESS_DEFAULT_MAX_THREADS 8\n\n#include \"tbb/tbb_machine.h\"\n#include \"tbb/tick_count.h\"\n#include \"harness.h\"\n\nstatic volatile long CyclicCounter;\nstatic volatile bool Quit;\ndouble SingleThreadTime;\n\nstruct RoundRobin: NoAssign {\n    const int number_of_threads;\n    RoundRobin( long p ) : number_of_threads(p) {}\n    void operator()( long k ) const {\n        tbb::tick_count t0 = tbb::tick_count::now();\n        for( long i=0; i<10000; ++i ) {\n            // Wait for previous thread to notify us\n            for( int j=0; CyclicCounter!=k && !Quit; ++j ) {\n                __TBB_Yield();\n                if( j%100==0 ) {\n                    tbb::tick_count t1 = tbb::tick_count::now();\n                    if( (t1-t0).seconds()>=1.0*number_of_threads ) {\n                        REPORT(\"Warning: __TBB_Yield failing to yield with %d threads (or system is heavily loaded)\\n\",number_of_threads);\n                        Quit = true;\n                        return;\n                    }\n                }\n            }\n            // Notify next thread that it can run\n            CyclicCounter = (k+1)%number_of_threads;\n        }\n    }\n};\n\nint TestMain () {\n    for( int p=MinThread; p<=MaxThread; ++p ) {\n        REMARK(\"testing with %d threads\\n\", p );\n        CyclicCounter = 0;\n        Quit = false;\n        NativeParallelFor( long(p), RoundRobin(p) );\n    }\n    return Harness::Done;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/CHANGES",
    "content": "------------------------------------------------------------------------\nThe list of most significant changes made over time in\nIntel(R) Threading Building Blocks (Intel(R) TBB).\n\nIntel TBB 2018 Update 6\nTBB_INTERFACE_VERSION == 10006\n\nChanges (w.r.t. Intel TBB 2018 Update 5):\n\nBugs fixed:\n\n- Fixed an issue with dynamic memory allocation replacement on Windows*\n    occurred for some versions of ucrtbase.dll.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 5\nTBB_INTERFACE_VERSION == 10005\n\nChanges (w.r.t. Intel TBB 2018 Update 4):\n\nPreview Features:\n\n- Added user event tracing API for Intel(R) VTune(TM) Amplifier and\n    Flow Graph Analyzer.\n\nBugs fixed:\n\n- Fixed the memory allocator to properly support transparent huge pages.\n- Removed dynamic exception specifications in tbbmalloc_proxy for C++11\n    and later (https://github.com/01org/tbb/issues/41).\n- Added -flifetime-dse=1 option when building with GCC on macOS*\n    (https://github.com/01org/tbb/issues/60).\n\nOpen-source contributions integrated:\n\n- Added ARMv8 support by Siddhesh Poyarekar.\n- Avoid GCC warnings for clearing an object of non-trivial type\n    (https://github.com/01org/tbb/issues/54) by Daniel Arndt.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 4\nTBB_INTERFACE_VERSION == 10004\n\nChanges (w.r.t. Intel TBB 2018 Update 3):\n\nPreview Features:\n\n- Improved support for Flow Graph Analyzer and Intel(R) VTune(TM)\n    Amplifier in the task scheduler and generic parallel algorithms.\n- Default device set for opencl_node now includes all the devices from\n    the first available OpenCL* platform.\n- Added lightweight policy for functional nodes in the flow graph. It\n    indicates that the node body has little work and should, if possible,\n    be executed immediately upon receiving a message, avoiding task\n    scheduling overhead.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 3\nTBB_INTERFACE_VERSION == 10003\n\nChanges (w.r.t. Intel TBB 2018 Update 2):\n\nPreview Features:\n\n- Added template class blocked_rangeNd for a generic multi-dimensional\n    range (requires C++11). Inspired by a contribution from Jeff Hammond.\n\nBugs fixed:\n\n- Fixed a crash with dynamic memory allocation replacement on\n    Windows* for applications using system() function.\n- Fixed parallel_deterministic_reduce to split range correctly when used\n     with static_partitioner.\n- Fixed a synchronization issue in task_group::run_and_wait() which\n    caused a simultaneous call to task_group::wait() to return\n    prematurely.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 2\nTBB_INTERFACE_VERSION == 10002\n\nChanges (w.r.t. Intel TBB 2018 Update 1):\n\n- Added support for Android* NDK r16, macOS* 10.13, Fedora* 26.\n- Binaries for Universal Windows Driver (vc14_uwd) now link with static\n    Microsoft* runtime libraries, and are only available in commercial\n    releases.\n- Extended flow graph documentation with more code samples.\n\nPreview Features:\n\n- Added a Python* module for multi-processing computations in numeric\n    Python* libraries.\n\nBugs fixed:\n\n- Fixed constructors of concurrent_hash_map to be exception-safe.\n- Fixed auto-initialization in the main thread to be cleaned up at\n    shutdown.\n- Fixed a crash when tbbmalloc_proxy is used together with dbghelp.\n- Fixed static_partitioner to assign tasks properly in case of nested\n    parallelism.\n\n------------------------------------------------------------------------\nIntel TBB 2018 Update 1\nTBB_INTERFACE_VERSION == 10001\n\nChanges (w.r.t. Intel TBB 2018):\n\n- Added lambda-friendly overloads for parallel_scan.\n- Added support of static and simple partitioners in\n    parallel_deterministic_reduce.\n\nPreview Features:\n\n- Added initial support for Flow Graph Analyzer to parallel_for.\n- Added reservation support in overwrite_node and write_once_node.\n\nBugs fixed:\n\n- Fixed a potential deadlock scenario in the flow graph that affected\n    Intel TBB 2018.\n\n------------------------------------------------------------------------\nIntel TBB 2018\nTBB_INTERFACE_VERSION == 10000\n\nChanges (w.r.t. Intel TBB 2017 Update 7):\n\n- Introduced Parallel STL, an implementation of the C++ standard\n    library algorithms with support for execution policies. For more\n    information, see Getting Started with Parallel STL\n    (https://software.intel.com/en-us/get-started-with-pstl).\n- this_task_arena::isolate() function is now a fully supported feature.\n- this_task_arena::isolate() function and task_arena::execute() method\n    were extended to pass on the value returned by the executed functor\n    (requires C++11).\n- task_arena::enqueue() and task_group::run() methods extended to accept\n    move-only functors.\n- A flow graph now spawns all tasks into the same task arena,\n    and waiting for graph completion also happens in that arena.\n- Improved support for Flow Graph Analyzer in async_node, opencl_node,\n    and composite_node.\n- Added support for Android* NDK r15, r15b.\n- Added support for Universal Windows Platform.\n- Increased minimally supported version of macOS*\n    (MACOSX_DEPLOYMENT_TARGET) to 10.11.\n\nChanges affecting backward compatibility:\n\n- Internal layout changes in some flow graph classes;\n- Several undocumented methods are removed from class graph,\n    including set_active() and is_active().\n- Due to incompatible changes, the namespace version is updated\n    for the flow graph; recompilation is recommended for all\n    binaries that use the flow graph classes.\n\nPreview Features:\n\n- opencl_node can be used with any graph object; class opencl_graph\n    is removed.\n- graph::wait_for_all() now automatically waits for all not yet consumed\n    async_msg objects.\n- Improved concurrent_lru_cache::handle_object to support C++11 move\n    semantics, default construction, and conversion to bool.\n\nBugs fixed:\n\n- Fixed a bug preventing use of streaming_node and opencl_node with\n    Clang; inspired by a contribution from Francisco Facioni.\n- Fixed this_task_arena::isolate() function to work correctly with\n    parallel_invoke and parallel_do algorithms.\n- Fixed a memory leak in composite_node.\n- Fixed an assertion failure in debug tbbmalloc binaries when\n    TBBMALLOC_CLEAN_ALL_BUFFERS is used.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 8\nTBB_INTERFACE_VERSION == 9108\n\nChanges (w.r.t. Intel TBB 2017 Update 7):\n\nBugs fixed:\n\n- Fixed an assertion failure in debug tbbmalloc binaries when\n    TBBMALLOC_CLEAN_ALL_BUFFERS is used.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 7\nTBB_INTERFACE_VERSION == 9107\n\nChanges (w.r.t. Intel TBB 2017 Update 6):\n\n- In the huge pages mode, the memory allocator now is also able to use\n    transparent huge pages.\n\nPreview Features:\n\n- Added support for Intel TBB integration into CMake-aware\n    projects, with valuable guidance and feedback provided by Brad King\n    (Kitware).\n\nBugs fixed:\n\n- Fixed scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, 0)\n    to process memory left after exited threads.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 6\nTBB_INTERFACE_VERSION == 9106\n\nChanges (w.r.t. Intel TBB 2017 Update 5):\n\n- Added support for Android* NDK r14.\n\nPreview Features:\n\n- Added a blocking terminate extension to the task_scheduler_init class\n    that allows an object to wait for termination of worker threads.\n\nBugs fixed:\n\n- Fixed compilation and testing issues with MinGW (GCC 6).\n- Fixed compilation with /std:c++latest option of VS 2017\n    (https://github.com/01org/tbb/issues/13).\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 5\nTBB_INTERFACE_VERSION == 9105\n\nChanges (w.r.t. Intel TBB 2017 Update 4):\n\n- Added support for Microsoft* Visual Studio* 2017.\n- Added graph/matmult example to demonstrate support for compute offload\n    to Intel(R) Graphics Technology in the flow graph API.\n- The \"compiler\" build option now allows to specify a full path to the\n    compiler.\n\nChanges affecting backward compatibility:\n\n- Constructors for many classes, including graph nodes, concurrent\n    containers, thread-local containers, etc., are declared explicit and\n    cannot be used for implicit conversions anymore.\n\nBugs fixed:\n\n- Added a workaround for bug 16657 in the GNU C Library (glibc)\n    affecting the debug version of tbb::mutex.\n- Fixed a crash in pool_identify() called for an object allocated in\n    another thread.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 4\nTBB_INTERFACE_VERSION == 9104\n\nChanges (w.r.t. Intel TBB 2017 Update 3):\n\n- Added support for C++11 move semantics in parallel_do.\n- Added support for FreeBSD* 11.\n\nChanges affecting backward compatibility:\n\n- Minimal compiler versions required for support of C++11 move semantics\n    raised to GCC 4.5, VS 2012, and Intel(R) C++ Compiler 14.0.\n\nBugs fixed:\n\n- The workaround for crashes in the library compiled with GCC 6\n    (-flifetime-dse=1) was extended to Windows*.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 3\nTBB_INTERFACE_VERSION == 9103\n\nChanges (w.r.t. Intel TBB 2017 Update 2):\n\n- Added support for Android* 7.0 and Android* NDK r13, r13b.\n\nPreview Features:\n\n- Added template class gfx_factory to the flow graph API. It implements\n    the Factory concept for streaming_node to offload computations to\n    Intel(R) processor graphics.\n\nBugs fixed:\n\n- Fixed a possible deadlock caused by missed wakeup signals in\n    task_arena::execute().\n\nOpen-source contributions integrated:\n\n- A build fix for Linux* s390x platform by Jerry J.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 2\nTBB_INTERFACE_VERSION == 9102\n\nChanges (w.r.t. Intel TBB 2017 Update 1):\n\n- Removed the long-outdated support for Xbox* consoles.\n\nBugs fixed:\n\n- Fixed the issue with task_arena::execute() not being processed when\n    the calling thread cannot join the arena.\n- Fixed dynamic memory allocation replacement failure on macOS* 10.12.\n\n------------------------------------------------------------------------\nIntel TBB 2017 Update 1\nTBB_INTERFACE_VERSION == 9101\n\nChanges (w.r.t. Intel TBB 2017):\n\nBugs fixed:\n\n- Fixed dynamic memory allocation replacement failures on Windows* 10\n    Anniversary Update.\n- Fixed emplace() method of concurrent unordered containers to not\n    require a copy constructor.\n\n------------------------------------------------------------------------\nIntel TBB 2017\nTBB_INTERFACE_VERSION == 9100\n\nChanges (w.r.t. Intel TBB 4.4 Update 5):\n\n- static_partitioner class is now a fully supported feature.\n- async_node class is now a fully supported feature.\n- Improved dynamic memory allocation replacement on Windows* OS to skip\n    DLLs for which replacement cannot be done, instead of aborting.\n- Intel TBB no longer performs dynamic memory allocation replacement\n    for Microsoft* Visual Studio* 2008.\n- For 64-bit platforms, quadrupled the worst-case limit on the amount\n    of memory the Intel TBB allocator can handle.\n- Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU\n    libstdc++ when it cannot be properly recognized, e.g. when used\n    with Clang on Linux* OS. Inspired by a contribution from David A.\n- Added graph/stereo example to demostrate tbb::flow::async_msg.\n- Removed a few cases of excessive user data copying in the flow graph.\n- Reworked split_node to eliminate unnecessary overheads.\n- Added support for C++11 move semantics to the argument of\n    tbb::parallel_do_feeder::add() method.\n- Added C++11 move constructor and assignment operator to\n    tbb::combinable template class.\n- Added tbb::this_task_arena::max_concurrency() function and\n    max_concurrency() method of class task_arena returning the maximal\n    number of threads that can work inside an arena.\n- Deprecated tbb::task_arena::current_thread_index() static method;\n    use tbb::this_task_arena::current_thread_index() function instead.\n- All examples for commercial version of library moved online:\n    https://software.intel.com/en-us/product-code-samples. Examples are\n    available as a standalone package or as a part of Intel(R) Parallel\n    Studio XE or Intel(R) System Studio Online Samples packages.\n\nChanges affecting backward compatibility:\n\n- Renamed following methods and types in async_node class:\n    Old                   New\n    async_gateway_type => gateway_type\n    async_gateway()    => gateway()\n    async_try_put()    => try_put()\n    async_reserve()    => reserve_wait()\n    async_commit()     => release_wait()\n- Internal layout of some flow graph nodes has changed; recompilation\n    is recommended for all binaries that use the flow graph.\n\nPreview Features:\n\n- Added template class streaming_node to the flow graph API. It allows\n    a flow graph to offload computations to other devices through\n    streaming or offloading APIs.\n- Template class opencl_node reimplemented as a specialization of\n    streaming_node that works with OpenCL*.\n- Added tbb::this_task_arena::isolate() function to isolate execution\n    of a group of tasks or an algorithm from other tasks submitted\n    to the scheduler.\n\nBugs fixed:\n\n- Added a workaround for GCC bug #62258 in std::rethrow_exception()\n    to prevent possible problems in case of exception propagation.\n- Fixed parallel_scan to provide correct result if the initial value\n    of an accumulator is not the operation identity value.\n- Fixed a memory corruption in the memory allocator when it meets\n    internal limits.\n- Fixed the memory allocator on 64-bit platforms to align memory\n    to 16 bytes by default for all allocations bigger than 8 bytes.\n- As a workaround for crashes in the Intel TBB library compiled with\n    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.\n- Fixed a race in the flow graph implementation.\n\nOpen-source contributions integrated:\n\n- Enabling use of C++11 'override' keyword by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 6\nTBB_INTERFACE_VERSION == 9006\n\nChanges (w.r.t. Intel TBB 4.4 Update 5):\n\n- For 64-bit platforms, quadrupled the worst-case limit on the amount\n    of memory the Intel TBB allocator can handle.\n\nBugs fixed:\n\n- Fixed a memory corruption in the memory allocator when it meets\n    internal limits.\n- Fixed the memory allocator on 64-bit platforms to align memory\n    to 16 bytes by default for all allocations bigger than 8 bytes.\n- Fixed parallel_scan to provide correct result if the initial value\n    of an accumulator is not the operation identity value.\n- As a workaround for crashes in the Intel TBB library compiled with\n    GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 5\nTBB_INTERFACE_VERSION == 9005\n\nChanges (w.r.t. Intel TBB 4.4 Update 4):\n\n- Modified graph/fgbzip2 example to remove unnecessary data queuing.\n\nPreview Features:\n\n- Added a Python* module which is able to replace Python's thread pool\n    class with the implementation based on Intel TBB task scheduler.\n\nBugs fixed:\n\n- Fixed the implementation of 64-bit tbb::atomic for IA-32 architecture\n    to work correctly with GCC 5.2 in C++11/14 mode.\n- Fixed a possible crash when tasks with affinity (e.g. specified via\n    affinity_partitioner) are used simultaneously with task priority\n    changes.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 4\nTBB_INTERFACE_VERSION == 9004\n\nChanges (w.r.t. Intel TBB 4.4 Update 3):\n\n- Removed a few cases of excessive user data copying in the flow graph.\n- Improved robustness of concurrent_bounded_queue::abort() in case of\n    simultaneous push and pop operations.\n\nPreview Features:\n\n- Added tbb::flow::async_msg, a special message type to support\n    communications between the flow graph and external asynchronous\n    activities.\n- async_node modified to support use with C++03 compilers.\n\nBugs fixed:\n\n- Fixed a bug in dynamic memory allocation replacement for Windows* OS.\n- Fixed excessive memory consumption on Linux* OS caused by enabling\n    zero-copy realloc.\n- Fixed performance regression on Intel(R) Xeon Phi(tm) coprocessor with\n    auto_partitioner.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 3\nTBB_INTERFACE_VERSION == 9003\n\nChanges (w.r.t. Intel TBB 4.4 Update 2):\n\n- Modified parallel_sort to not require a default constructor for values\n    and to use iter_swap() for value swapping.\n- Added support for creating or initializing a task_arena instance that\n    is connected to the arena currently used by the thread.\n- graph/binpack example modified to use multifunction_node.\n- For performance analysis, use Intel(R) VTune(TM) Amplifier XE 2015\n    and higher; older versions are no longer supported.\n- Improved support for compilation with disabled RTTI, by omitting its use\n    in auxiliary code, such as assertions. However some functionality,\n    particularly the flow graph, does not work if RTTI is disabled.\n- The tachyon example for Android* can be built using Android Studio 1.5\n    and higher with experimental Gradle plugin 0.4.0.\n\nPreview Features:\n\n- Added class opencl_subbufer that allows using OpenCL* sub-buffer\n    objects with opencl_node.\n- Class global_control supports the value of 1 for\n    max_allowed_parallelism.\n\nBugs fixed:\n\n- Fixed a race causing \"TBB Warning: setaffinity syscall failed\" message.\n- Fixed a compilation issue on OS X* with Intel(R) C++ Compiler 15.0.\n- Fixed a bug in queuing_rw_mutex::downgrade() that could temporarily\n    block new readers.\n- Fixed speculative_spin_rw_mutex to stop using the lazy subscription\n    technique due to its known flaws.\n- Fixed memory leaks in the tool support code.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 2\nTBB_INTERFACE_VERSION == 9002\n\nChanges (w.r.t. Intel TBB 4.4 Update 1):\n\n- Improved interoperability with Intel(R) OpenMP RTL (libiomp) on Linux:\n    OpenMP affinity settings do not affect the default number of threads\n    used in the task scheduler. Intel(R) C++ Compiler 16.0 Update 1\n    or later is required.\n- Added a new flow graph example with different implementations of the\n    Cholesky Factorization algorithm.\n\nPreview Features:\n\n- Added template class opencl_node to the flow graph API. It allows a\n    flow graph to offload computations to OpenCL* devices.\n- Extended join_node to use type-specified message keys. It simplifies\n    the API of the node by obtaining message keys via functions\n    associated with the message type (instead of node ports).\n- Added static_partitioner that minimizes overhead of parallel_for and\n    parallel_reduce for well-balanced workloads.\n- Improved template class async_node in the flow graph API to support\n    user settable concurrency limits.\n\nBugs fixed:\n\n- Fixed a possible crash in the GUI layer for library examples on Linux.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 1\nTBB_INTERFACE_VERSION == 9001\n\nChanges (w.r.t. Intel TBB 4.4):\n\n- Added support for Microsoft* Visual Studio* 2015.\n- Intel TBB no longer performs dynamic replacement of memory allocation\n    functions for Microsoft Visual Studio 2005 and earlier versions.\n- For GCC 4.7 and higher, the intrinsics-based platform isolation layer\n    uses __atomic_* built-ins instead of the legacy __sync_* ones.\n    This change is inspired by a contribution from Mathieu Malaterre.\n- Improvements in task_arena:\n    Several application threads may join a task_arena and execute tasks\n    simultaneously. The amount of concurrency reserved for application\n    threads at task_arena construction can be set to any value between\n    0 and the arena concurrency limit.\n- The fractal example was modified to demonstrate class task_arena\n    and moved to examples/task_arena/fractal.\n\nBugs fixed:\n\n- Fixed a deadlock during destruction of task_scheduler_init objects\n    when one of destructors is set to wait for worker threads.\n- Added a workaround for a possible crash on OS X* when dynamic memory\n    allocator replacement (libtbbmalloc_proxy) is used and memory is\n    released during application startup.\n- Usage of mutable functors with task_group::run_and_wait() and\n    task_arena::enqueue() is disabled. An attempt to pass a functor\n    which operator()() is not const will produce compilation errors.\n- Makefiles and environment scripts now properly recognize GCC 5.0 and\n    higher.\n\nOpen-source contributions integrated:\n\n- Improved performance of parallel_for_each for inputs allowing random\n    access, by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.4\nTBB_INTERFACE_VERSION == 9000\n\nChanges (w.r.t. Intel TBB 4.3 Update 6):\n\n- The following features are now fully supported:\n    tbb::flow::composite_node;\n    additional policies of tbb::flow::graph_node::reset().\n- Platform abstraction layer for Windows* OS updated to use compiler\n    intrinsics for most atomic operations.\n- The tbb/compat/thread header updated to automatically include\n    C++11 <thread> where available.\n- Fixes and refactoring in the task scheduler and class task_arena.\n- Added key_matching policy to tbb::flow::join_node, which removes\n    the restriction on the type that can be compared-against.\n- For tag_matching join_node, tag_value is redefined to be 64 bits\n    wide on all architectures.\n- Expanded the documentation for the flow graph with details about\n    node semantics and behavior.\n- Added dynamic replacement of C11 standard function aligned_alloc()\n    under Linux* OS.\n- Added C++11 move constructors and assignment operators to\n    tbb::enumerable_thread_specific container.\n- Added hashing support for tbb::tbb_thread::id.\n- On OS X*, binaries that depend on libstdc++ are not provided anymore.\n    In the makefiles, libc++ is now used by default; for building with\n    libstdc++, specify stdlib=libstdc++ in the make command line.\n\nPreview Features:\n\n- Added a new example, graph/fgbzip2, that shows usage of\n    tbb::flow::async_node.\n- Modification to the low-level API for memory pools:\n    added a function for finding a memory pool by an object allocated\n    from that pool.\n- tbb::memory_pool now does not request memory till the first allocation\n    from the pool.\n\nChanges affecting backward compatibility:\n\n- Internal layout of flow graph nodes has changed; recompilation is\n    recommended for all binaries that use the flow graph.\n- Resetting a tbb::flow::source_node will immediately activate it,\n    unless it was created in inactive state.\n\nBugs fixed:\n\n- Failure at creation of a memory pool will not cause process\n    termination anymore.\n\nOpen-source contributions integrated:\n\n- Supported building TBB with Clang on AArch64 with use of built-in\n    intrinsics by David A.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 6\nTBB_INTERFACE_VERSION == 8006\n\nChanges (w.r.t. Intel TBB 4.3 Update 5):\n\n- Supported zero-copy realloc for objects >1MB under Linux* via\n    mremap system call.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent_hash_map container.\n- install_name is set to @rpath/<library name> on OS X*.\n\nPreview Features:\n\n- Added template class async_node to the flow graph API. It allows a\n    flow graph to communicate with an external activity managed by\n    the user or another runtime.\n- Improved speed of flow::graph::reset() clearing graph edges.\n    rf_extract flag has been renamed rf_clear_edges.\n- extract() method of graph nodes now takes no arguments.\n\nBugs fixed:\n\n- concurrent_unordered_{set,map} behaves correctly for degenerate\n    hashes.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 5\nTBB_INTERFACE_VERSION == 8005\n\nChanges (w.r.t. Intel TBB 4.3 Update 4):\n\n- Added add_ref_count() method of class tbb::task.\n\nPreview Features:\n\n- Added class global_control for application-wide control of allowed\n    parallelism and thread stack size.\n- memory_pool_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Exceptions thrown for by memory pool constructors changed from\n    std::bad_alloc to std::invalid_argument and std::runtime_error.\n\nBugs fixed:\n\n- scalable_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n- A new scheduler created right after destruction of the previous one\n    might be unable to modify the number of worker threads.\n\nOpen-source contributions integrated:\n\n- (Added but not enabled) push_front() method of class tbb::task_list\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 4\nTBB_INTERFACE_VERSION == 8004\n\nChanges (w.r.t. Intel TBB 4.3 Update 3):\n\n- Added a C++11 variadic constructor for enumerable_thread_specific.\n    The arguments from this constructor are used to construct\n    thread-local values.\n- Improved exception safety for enumerable_thread_specific.\n- Added documentation for tbb::flow::tagged_msg class and\n    tbb::flow::output_port function.\n- Fixed build errors for systems that do not support dynamic linking.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent unordered containers.\n\nPreview Features:\n\n- Interface-breaking change: typedefs changed for node predecessor and\n    successor lists, affecting copy_predecessors and copy_successors\n    methods.\n- Added template class composite_node to the flow graph API. It packages\n    a subgraph to represent it as a first-class flow graph node.\n- make_edge and remove_edge now accept multiport nodes as arguments,\n    automatically using the node port with index 0 for an edge.\n\nOpen-source contributions integrated:\n\n- Draft code for enumerable_thread_specific constructor with multiple\n    arguments (see above) by Adrien Guinet.\n- Fix for GCC invocation on IBM* Blue Gene*\n    by Jeff Hammond and Raf Schietekat.\n- Extended testing with smart pointers for Clang & libc++\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 3\nTBB_INTERFACE_VERSION == 8003\n\nChanges (w.r.t. Intel TBB 4.3 Update 2):\n\n- Move constructor and assignment operator were added to unique_lock.\n\nPreview Features:\n\n- Time overhead for memory pool destruction was reduced.\n\nOpen-source contributions integrated:\n\n- Build error fix for iOS* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 2\nTBB_INTERFACE_VERSION == 8002\n\nChanges (w.r.t. Intel TBB 4.3 Update 1):\n\n- Binary files for 64-bit Android* applications were added as part of the\n    Linux* OS package.\n- Exact exception propagation is enabled for Intel C++ Compiler on OS X*.\n- concurrent_vector::shrink_to_fit was optimized for types that support\n    C++11 move semantics.\n\nBugs fixed:\n\n- Fixed concurrent unordered containers to insert elements much faster\n    in debug mode.\n- Fixed concurrent priority queue to support types that do not have\n    copy constructors.\n- Fixed enumerable_thread_specific to forbid copying from an instance\n    with a different value type.\n\nOpen-source contributions integrated:\n\n- Support for PathScale* EKOPath* Compiler by Erik Lindahl.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 1\nTBB_INTERFACE_VERSION == 8001\n\nChanges (w.r.t. Intel TBB 4.3):\n\n- The ability to split blocked_ranges in a proportion, used by\n    affinity_partitioner since version 4.2 Update 4, became a formal\n    extension of the Range concept.\n- More checks for an incorrect address to release added to the debug\n    version of the memory allocator.\n- Different kind of solutions for each TBB example were merged.\n\nPreview Features:\n\n- Task priorities are re-enabled in preview binaries.\n\nBugs fixed:\n\n- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is\n    used in multiple compilation units.\n- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04.\n- Fixed a crash in memory release after dynamic replacement of the\n    OS X* memory allocator.\n- Fixed incorrect indexing of arrays in seismic example.\n- Fixed a data race in lazy initialization of task_arena.\n\nOpen-source contributions integrated:\n\n- Fix for dumping information about gcc and clang compiler versions\n    by Misty De Meo.\n\n------------------------------------------------------------------------\nIntel TBB 4.3\nTBB_INTERFACE_VERSION == 8000\n\nChanges (w.r.t. Intel TBB 4.2 Update 5):\n\n- The following features are now fully supported: flow::indexer_node,\n    task_arena, speculative_spin_rw_mutex.\n- Compatibility with C++11 standard improved for tbb/compat/thread\n    and tbb::mutex.\n- C++11 move constructors have been added to concurrent_queue and\n    concurrent_bounded_queue.\n- C++11 move constructors and assignment operators have been added to\n    concurrent_vector, concurrent_hash_map, concurrent_priority_queue,\n    concurrent_unordered_{set,multiset,map,multimap}.\n- C++11 move-aware emplace/push/pop methods have been added to\n    concurrent_vector, concurrent_queue, concurrent_bounded_queue,\n    concurrent_priority_queue.\n- Methods to insert a C++11 initializer list have been added:\n    concurrent_vector::grow_by(), concurrent_hash_map::insert(),\n    concurrent_unordered_{set,multiset,map,multimap}::insert().\n- Testing for compatibility of containers with some C++11 standard\n    library types has been added.\n- Dynamic replacement of standard memory allocation routines has been\n    added for OS X*.\n- Microsoft* Visual Studio* projects for Intel TBB examples updated\n    to VS 2010.\n- For open-source packages, debugging information (line numbers) in\n    precompiled binaries now matches the source code.\n- Debug information was added to release builds for OS X*, Solaris*,\n    FreeBSD* operating systems and MinGW*.\n- Various improvements in documentation, debug diagnostics and examples.\n\nPreview Features:\n\n- Additional actions on reset of graphs, and extraction of individual\n    nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES).\n- Support for an arbitrary number of arguments in parallel_invoke\n   (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE).\n\nChanges affecting backward compatibility:\n\n- For compatibility with C++11 standard, copy and move constructors and\n    assignment operators are disabled for all mutex classes. To allow\n    the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro.\n- flow::sequencer_node rejects messages with repeating sequence numbers.\n- Changed internal interface between tbbmalloc and tbbmalloc_proxy.\n- Following deprecated functionality has been removed:\n    old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS;\n    no-op depth-related methods in class task;\n    tbb::deprecated::concurrent_queue;\n    deprecated variants of concurrent_vector methods.\n- register_successor() and remove_successor() are deprecated as methods\n    to add and remove edges in flow::graph; use make_edge() and\n    remove_edge() instead.\n\nBugs fixed:\n\n- Fixed incorrect scalable_msize() implementation for aligned objects.\n- Flow graph buffering nodes now destroy their copy of forwarded items.\n- Multiple fixes in task_arena implementation, including for:\n    inconsistent task scheduler state inside executed functions;\n    incorrect floating-point settings and exception propagation;\n    possible stalls in concurrent invocations of execute().\n- Fixed floating-point settings propagation when the same instance of\n    task_group_context is used in different arenas.\n- Fixed compilation error in pipeline.h with Intel Compiler on OS X*.\n- Added missed headers for individual components to tbb.h.\n\nOpen-source contributions integrated:\n\n- Range interface addition to parallel_do, parallel_for_each and\n    parallel_sort by Stephan Dollberg.\n- Variadic template implementation of parallel_invoke\n    by Kizza George Mbidde (see Preview Features).\n- Improvement in Seismic example for MacBook Pro* with Retina* display\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 5\nTBB_INTERFACE_VERSION == 7005\n\nChanges (w.r.t. Intel TBB 4.2 Update 4):\n\n- The second template argument of class aligned_space<T,N> now is set\n    to 1 by default.\n\nPreview Features:\n\n- Better support for exception safety, task priorities and floating\n    point settings in class task_arena.\n- task_arena::current_slot() has been renamed to\n    task_arena::current_thread_index().\n\nBugs fixed:\n\n- Task priority change possibly ignored by a worker thread entering\n    a nested parallel construct.\n- Memory leaks inside the task scheduler when running on\n    Intel(R) Xeon Phi(tm) coprocessor.\n\nOpen-source contributions integrated:\n\n- Improved detection of X Window support for Intel TBB examples\n    and other feedback by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 4\nTBB_INTERFACE_VERSION == 7004\n\nChanges (w.r.t. Intel TBB 4.2 Update 3):\n\n- Added possibility to specify floating-point settings at invocation\n    of most parallel algorithms (including flow::graph) via\n    task_group_context.\n- Added dynamic replacement of malloc_usable_size() under\n    Linux*/Android* and dlmalloc_usable_size() under Android*.\n- Added new methods to concurrent_vector:\n    grow_by() that appends a sequence between two given iterators;\n    grow_to_at_least() that initializes new elements with a given value.\n- Improved affinity_partitioner for better performance on balanced\n    workloads.\n- Improvements in the task scheduler, including better scalability\n    when threads search for a task arena, and better diagnostics.\n- Improved allocation performance for workloads that do intensive\n    allocation/releasing of same-size objects larger than ~8KB from\n    multiple threads.\n- Exception support is enabled by default for 32-bit MinGW compilers.\n- The tachyon example for Android* can be built for all targets\n    supported by the installed NDK.\n- Added Windows Store* version of the tachyon example.\n- GettingStarted/sub_string_finder example ported to offload execution\n    on Windows* for Intel(R) Many Integrated Core Architecture.\n\nPreview Features:\n\n- Removed task_scheduler_observer::on_scheduler_leaving() callback.\n- Added task_scheduler_observer::may_sleep() callback.\n- The CPF or_node has been renamed indexer_node. The input to\n    indexer_node is now a list of types. The output of indexer_node is\n    a tagged_msg type composed of a tag and a value. For indexer_node,\n    the tag is a size_t.\n\nBugs fixed:\n\n- Fixed data races in preview extensions of task_scheduler_observer.\n- Added noexcept(false) for destructor of task_group_base to avoid\n    crash on cancellation of structured task group in C++11.\n\nOpen-source contributions integrated:\n\n- Improved concurrency detection for BG/Q, and other improvements\n    by Raf Schietekat.\n- Fix for crashes in enumerable_thread_specific in case if a contained\n    object is too big to be constructed on the stack by Adrien Guinet.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 3\nTBB_INTERFACE_VERSION == 7003\n\nChanges (w.r.t. Intel TBB 4.2 Update 2):\n\n- Added support for Microsoft* Visual Studio* 2013.\n- Improved Microsoft* PPL-compatible form of parallel_for for better\n    support of auto-vectorization.\n- Added a new example for cancellation and reset in the flow graph:\n    Kohonen self-organizing map (examples/graph/som).\n- Various improvements in source code, tests, and makefiles.\n\nBugs fixed:\n\n- Added dynamic replacement of _aligned_msize() previously missed.\n- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling\n    exception if the specified task handle is already scheduled.\n\nOpen-source contributions integrated:\n\n- A fix for ARM* processors by Steve Capper.\n- Improvements in std::swap calls by Robert Maynard.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 2\nTBB_INTERFACE_VERSION == 7002\n\nChanges (w.r.t. Intel TBB 4.2 Update 1):\n\n- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview.\n- Added a test for compatibility of TBB containers with C++11\n    range-based for loop.\n\nChanges affecting backward compatibility:\n\n- Internal layout changed for class tbb::flow::limiter_node.\n\nPreview Features:\n\n- Added speculative_spin_rw_mutex, a read-write lock class which uses\n    Intel(R) Transactional Synchronization Extensions.\n\nBugs fixed:\n\n- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs\n    no longer require explicit linking with librt and libpthread.\n\nOpen-source contributions integrated:\n\n- Fixes for ARM* processors by Steve Capper, Leif Lindholm\n    and Steven Noonan.\n- Support for Clang on Linux by Raf Schietekat.\n- Typo correction in scheduler.cpp by Julien Schueller.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 1\nTBB_INTERFACE_VERSION == 7001\n\nChanges (w.r.t. Intel TBB 4.2):\n\n- Added project files for Microsoft* Visual Studio* 2010.\n- Initial support of Microsoft* Visual Studio* 2013 Preview.\n- Enable C++11 features available in Intel(R) C++ Compiler 14.0.\n- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, <size>) can be\n    used to urge releasing memory from tbbmalloc internal buffers when\n    the given limit is exceeded.\n\nPreview Features:\n\n- Class task_arena no longer requires linking with a preview library,\n    though still remains a community preview feature.\n- The method task_arena::wait_until_empty() is removed.\n- The method task_arena::current_slot() now returns -1 if\n    the task scheduler is not initialized in the thread.\n\nChanges affecting backward compatibility:\n\n- Because of changes in internal layout of graph nodes, the namespace\n    interface number of flow::graph has been incremented from 6 to 7.\n\nBugs fixed:\n\n- Fixed a race in lazy initialization of task_arena.\n- Fixed flow::graph::reset() to prevent situations where tasks would be\n    spawned in the process of resetting the graph to its initial state.\n- Fixed decrement bug in limiter_node.\n- Fixed a race in arc deletion in the flow graph.\n\nOpen-source contributions integrated:\n\n- Improved support for IBM* Blue Gene* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2\nTBB_INTERFACE_VERSION == 7000\n\nChanges (w.r.t. Intel TBB 4.1 Update 4):\n\n- Added speculative_spin_mutex, which uses Intel(R) Transactional\n    Synchronization Extensions when they are supported by hardware.\n- Binary files linked with libc++ (the C++ standard library in Clang)\n    were added on OS X*.\n- For OS X* exact exception propagation is supported with Clang;\n    it requires use of libc++ and corresponding Intel TBB binaries.\n- Support for C++11 initializer lists in constructor and assigment\n    has been added to concurrent_hash_map, concurrent_unordered_set,\n    concurrent_unordered_multiset, concurrent_unordered_map,\n    concurrent_unordered_multimap.\n- The memory allocator may now clean its per-thread memory caches\n    when it cannot get more memory.\n- Added the scalable_allocation_command() function for on-demand\n    cleaning of internal memory caches.\n- Reduced the time overhead for freeing memory objects smaller than ~8K.\n- Simplified linking with the debug library for applications that use\n    Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors.\n    See an example in\n    examples/GettingStarted/sub_string_finder/Makefile.\n- Various improvements in source code, scripts and makefiles.\n\nChanges affecting backward compatibility:\n\n- tbb::flow::graph has been modified to spawn its tasks;\n    the old behaviour (task enqueuing) is deprecated. This change may\n    impact applications that expected a flow graph to make progress\n    without calling wait_for_all(), which is no longer guaranteed. See\n    the documentation for more details.\n- Changed the return values of the scalable_allocation_mode() function.\n\nBugs fixed:\n\n- Fixed a leak of parallel_reduce body objects when execution is\n    cancelled or an exception is thrown, as suggested by Darcy Harrison.\n- Fixed a race in the task scheduler which can lower the effective\n    priority despite the existence of higher priority tasks.\n- On Linux an error during destruction of the internal thread local\n    storage no longer results in an exception.\n\nOpen-source contributions integrated:\n\n- Fixed task_group_context state propagation to unrelated context trees\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 4\nTBB_INTERFACE_VERSION == 6105\n\nChanges (w.r.t. Intel TBB 4.1 Update 3):\n\n- Use /volatile:iso option with VS 2012 to disable extended\n    semantics for volatile variables.\n- Various improvements in affinity_partitioner, scheduler,\n    tests, examples, makefiles.\n- Concurrent_priority_queue class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>).\n\nBugs fixed:\n\n- Fixed more possible stalls in concurrent invocations of\n    task_arena::execute(), especially waiting for enqueued tasks.\n- Fixed requested number of workers for task_arena(P,0).\n- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in\n    case of using task_arena::enqueue() from a terminating thread.\n\nOpen-source contributions integrated:\n\n- Type fixes, cleanups, and code beautification by Raf Schietekat.\n- Improvements in atomic operations for big endian platforms\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 3\nTBB_INTERFACE_VERSION == 6103\n\nChanges (w.r.t. Intel TBB 4.1 Update 2):\n\n- Binary files for Android* applications were added to the Linux* OS\n    package.\n- Binary files for Windows Store* applications were added to the\n    Windows* OS package.\n- Exact exception propagation (exception_ptr) support on Linux OS is\n    now turned on by default for GCC 4.4 and higher.\n- Stopped implicit use of large memory pages by tbbmalloc (Linux-only).\n    Now use of large pages must be explicitly enabled with\n    scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES\n    environment variable.\n\nCommunity Preview Features:\n\n- Extended class task_arena constructor and method initialize() to\n    allow some concurrency to be reserved strictly for application\n    threads.\n- New methods terminate() and is_active() were added to class\n    task_arena.\n\nBugs fixed:\n\n- Fixed initialization of hashing helper constant in the hash\n    containers.\n- Fixed possible stalls in concurrent invocations of\n    task_arena::execute() when no worker thread is available to make\n    progress.\n- Fixed incorrect calculation of hardware concurrency in the presence\n    of inactive processor groups, particularly on systems running\n    Windows* 8 and Windows* Server 2012.\n\nOpen-source contributions integrated:\n\n- The fix for the GUI examples on OS X* systems by Raf Schietekat.\n- Moved some power-of-2 calculations to functions to improve readability\n    by Raf Schietekat.\n- C++11/Clang support improvements by arcata.\n- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara\n    (ARM).\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 2\nTBB_INTERFACE_VERSION == 6102\n\nChanges (w.r.t. Intel TBB 4.1 Update 1):\n\n- Objects up to 128 MB are now cached by the tbbmalloc. Previously\n    the threshold was 8MB. Objects larger than 128 MB are still\n    processed by direct OS calls.\n- concurrent_unordered_multiset and concurrent_unordered_multimap\n    have been added, based on Microsoft* PPL prototype.\n- Ability to value-initialize a tbb::atomic<T> variable on construction\n    in C++11, with const expressions properly supported.\n\nCommunity Preview Features:\n\n- Added a possibility to wait until all worker threads terminate.\n    This is necessary before calling fork() from an application.\n\nBugs fixed:\n\n- Fixed data race in tbbmalloc that might lead to memory leaks\n    for large object allocations.\n- Fixed task_arena::enqueue() to use task_group_context of target arena.\n- Improved implementation of 64 bit atomics on ia32.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 1\nTBB_INTERFACE_VERSION == 6101\n\nChanges (w.r.t. Intel TBB 4.1):\n\n- concurrent_vector class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>)\n- Added implementation of the platform isolation layer based on\n    Intel compiler atomic built-ins; it is supposed to work on\n    any platform supported by compiler version 12.1 and newer.\n- Using GetNativeSystemInfo() instead of GetSystemInfo() to support\n    more than 32 processors for 32-bit applications under WOW64.\n- The following form of parallel_for:\n    parallel_for(first, last, [step,] f[, context]) now accepts an\n    optional partitioner parameter after the function f.\n\nBackward-incompatible API changes:\n\n- The library no longer injects tuple in to namespace std.\n    In previous releases, tuple was injected into namespace std by\n    flow_graph.h when std::tuple was not available.  In this release,\n    flow_graph.h now uses tbb::flow::tuple.  On platforms where\n    std::tuple is available, tbb::flow::tuple is typedef'ed to\n    std::tuple.  On all other platforms, tbb::flow::tuple provides\n    a subset of the functionality defined by std::tuple. Users of\n    flow_graph.h may need to change their uses of std::tuple to\n    tbb::flow::tuple to ensure compatibility with non-C++11 compliant\n    compilers.\n\nBugs fixed:\n\n- Fixed local observer to be able to override propagated CPU state and\n    to provide correct value of task_arena::current_slot() in callbacks.\n\n------------------------------------------------------------------------\nIntel TBB 4.1\nTBB_INTERFACE_VERSION == 6100\n\nChanges (w.r.t. Intel TBB 4.0 Update 5):\n\n- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB\n    on Microsoft* Windows*.\n- parallel_deterministic_reduce template function is fully supported.\n- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC\n    and Intel(R) Compiler.\n- C++11 std::make_exception_ptr is used where available, instead of\n    std::copy_exception from earlier C++0x implementations.\n- Improvements in the TBB allocator to reduce extra memory consumption.\n- Partial refactoring of the task scheduler data structures.\n- TBB examples allow more flexible specification of the thread number,\n    including arithmetic and geometric progression.\n\nBugs fixed:\n\n- On Linux & OS X*, pre-built TBB binaries do not yet support exact\n    exception propagation via C++11 exception_ptr. To prevent run time\n    errors, by default TBB headers disable exact exception propagation\n    even if the C++ implementation provides exception_ptr.\n\nCommunity Preview Features:\n\n- Added: class task_arena, for work submission by multiple application\n    threads with thread-independent control of concurrency level.\n- Added: task_scheduler_observer can be created as local to a master\n    thread, to observe threads that work on behalf of that master.\n    Local observers may have new on_scheduler_leaving() callback.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 5\nTBB_INTERFACE_VERSION == 6005\n\nChanges (w.r.t. Intel TBB 4.0 Update 4):\n\n- Parallel pipeline optimization (directly storing small objects in the\n    interstage data buffers) limited to trivially-copyable types for\n    C++11 and a short list of types for earlier compilers.\n- _VARIADIC_MAX switch is honored for TBB tuple implementation\n    and flow::graph nodes based on tuple.\n- Support of Cocoa framework was added to the GUI examples on OS X*\n    systems.\n\nBugs fixed:\n\n- Fixed a tv_nsec overflow bug in condition_variable::wait_for.\n- Fixed execution order of enqueued tasks with different priorities.\n- Fixed a bug with task priority changes causing lack of progress\n    for fire-and-forget tasks when TBB was initialized to use 1 thread.\n- Fixed duplicate symbol problem when linking multiple compilation\n    units that include flow_graph.h on VC 10.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 4\nTBB_INTERFACE_VERSION == 6004\n\nChanges (w.r.t. Intel TBB 4.0 Update 3):\n\n- The TBB memory allocator transparently supports large pages on Linux.\n- A new flow_graph example, logic_sim, was added.\n- Support for DirectX* 9 was added to GUI examples.\n\nCommunity Preview Features:\n\n- Added: aggregator, a new concurrency control mechanism.\n\nBugs fixed:\n\n- The abort operation on concurrent_bounded_queue now leaves the queue\n    in a reusable state. If a bad_alloc or bad_last_alloc exception is\n    thrown while the queue is recovering from an abort, that exception\n    will be reported instead of user_abort on the thread on which it\n    occurred, and the queue will not be reusable.\n- Steal limiting heuristic fixed to avoid premature stealing disabling\n    when large amount of __thread data is allocated on thread stack.\n- Fixed a low-probability leak of arenas in the task scheduler.\n- In STL-compatible allocator classes, the method construct() was fixed\n    to comply with C++11 requirements.\n- Fixed a bug that prevented creation of fixed-size memory pools\n    smaller than 2M.\n- Significantly reduced the amount of warnings from various compilers.\n\nOpen-source contributions integrated:\n\n- Multiple improvements by Raf Schietekat.\n- Basic support for Clang on OS X* by Blas Rodriguez Somoza.\n- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza\n    and Edward Lam.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 3\nTBB_INTERFACE_VERSION == 6003\n\nChanges (w.r.t. Intel TBB 4.0 Update 2):\n\n- Modifications to the low-level API for memory pools:\n    added support for aligned allocations;\n    pool policies reworked to allow backward-compatible extensions;\n    added a policy to not return memory space till destruction;\n    pool_reset() does not return memory space anymore.\n- Class tbb::flow::graph_iterator added to iterate over all nodes\n    registered with a graph instance.\n- multioutput_function_node has been renamed multifunction_node.\n    multifunction_node and split_node are now fully-supported features.\n- For the tagged join node, the policy for try_put of an item with\n    already existing tag has been defined: the item will be rejected.\n- Matching the behavior on Windows, on other platforms the optional\n    shared libraries (libtbbmalloc, libirml) now are also searched\n    only in the directory where libtbb is located.\n- The platform isolation layer based on GCC built-ins is extended.\n\nBackward-incompatible API changes:\n\n- a graph reference parameter is now required to be passed to the\n    constructors of the following flow graph nodes: overwrite_node,\n    write_once_node, broadcast_node, and the CPF or_node.\n- the following tbb::flow node methods and typedefs have been renamed:\n       Old                             New\n    join_node and or_node:\n       inputs()                 ->     input_ports()\n       input_ports_tuple_type   ->     input_ports_type\n    multifunction_node and split_node:\n       ports_type               ->     output_ports_type\n\nBugs fixed:\n\n- Not all logical processors were utilized on systems with more than\n    64 cores split by Windows into several processor groups.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 6002\n\nChanges (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):\n\n- concurrent_bounded_queue now has an abort() operation that releases\n    threads involved in pending push or pop operations. The released\n    threads will receive a tbb::user_abort exception.\n- Added Community Preview Feature:  concurrent_lru_cache container,\n    a concurrent implementation of LRU (least-recently-used) cache.\n\nBugs fixed:\n\n- fixed a race condition in the TBB scalable allocator.\n- concurrent_queue counter wraparound bug was fixed, which occurred when\n    the number of push and pop operations exceeded ~>4 billion on IA32.\n- fixed races in the TBB scheduler that could put workers asleep too\n    early, especially in presence of affinitized tasks.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 4.0 commercial-aligned release):\n\n- Memory leaks fixed in binpack example.\n- Improvements and fixes in the TBB allocator.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000\n\nChanges (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release):\n\n- concurrent_priority_queue is now a fully supported feature.\n    Capacity control methods were removed.\n- Flow graph is now a fully supported feature.\n- A new memory backend has been implemented in the TBB allocator.\n    It can reuse freed memory for both small and large objects, and\n    returns unused memory blocks to the OS more actively.\n- Improved partitioning algorithms for parallel_for and parallel_reduce\n    to better handle load imbalance.\n- The convex_hull example has been refactored for reproducible\n    performance results.\n- The major interface version has changed from 5 to 6.\n    Deprecated interfaces might be removed in future releases.\n\nCommunity Preview Features:\n\n- Added: serial subset, i.e. sequential implementations of TBB generic\n    algorithms (currently, only provided for parallel_for).\n- Preview of new flow graph nodes:\n    or_node (accepts multiple inputs, forwards each input separately\n      to all successors),\n    split_node (accepts tuples, and forwards each element of a tuple\n      to a corresponding successor), and\n    multioutput_function_node (accepts one input, and passes the input\n    and a tuple of output ports to the function body to support outputs\n    to multiple successors).\n- Added: memory pools for more control on memory source, grouping,\n    and collective deallocation.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 8 commercial-aligned release\nTBB_INTERFACE_VERSION == 5008\n\nChanges (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release):\n\n- Task priorities become an official feature of TBB,\n    not community preview as before.\n- Atomics API extended, and implementation refactored.\n- Added task::set_parent() method.\n- Added concurrent_unordered_set container.\n\nOpen-source contributions integrated:\n\n- PowerPC support by Raf Schietekat.\n- Fix of potential task pool overrun and other improvements\n    in the task scheduler by Raf Schietekat.\n- Fix in parallel_for_each to work with std::set in Visual* C++ 2010.\n\nCommunity Preview Features:\n\n- Graph community preview feature was renamed to flow graph.\n    Multiple improvements in the implementation.\n    Binpack example was added for the feature.\n- A number of improvements to concurrent_priority_queue.\n    Shortpath example was added for the feature.\n- TBB runtime loaded functionality was added (Windows*-only).\n    It allows to specify which versions of TBB should be used,\n    as well as to set directories for the library search.\n- parallel_deterministic_reduce template function was added.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 7 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):\n\n- Added implementation of the platform isolation layer based on\n    GCC atomic built-ins; it is supposed to work on any platform\n    where GCC has these built-ins.\n\nCommunity Preview Features:\n\n- Graph's dining_philosophers example added.\n- A number of improvements to graph and concurrent_priority_queue.\n\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 6 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006\n\nChanges (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release):\n\n- Added Community Preview feature: task and task group priority, and\n    Fractal example demonstrating it.\n- parallel_pipeline optimized for data items of small and large sizes.\n- Graph's join_node is now parametrized with a tuple of up to 10 types.\n- Improved performance of concurrent_priority_queue.\n\nOpen-source contributions integrated:\n\n- Initial NetBSD support by Aleksej Saushev.\n\nBugs fixed:\n\n- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime\n    library, and a crash caused by invoking the interoperability layer\n    after one of the libraries was unloaded.\n- Data race that could result in concurrent_unordered_map structure\n    corruption after call to clear() method.\n- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel\n    compiler on Linux.\n- Inconsistency of exception propagation mode possible when application\n    built with Microsoft* Visual Studio* 2008 or earlier uses TBB built\n    with Microsoft* Visual Studio* 2010.\n- Affinitizing master thread to a subset of available CPUs after TBB\n    scheduler was initialized tied all worker threads to the same CPUs.\n- Method is_stolen_task() always returned 'false' for affinitized tasks.\n- write_once_node and overwrite_node did not immediately send buffered\n    items to successors\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 5 commercial-aligned release\nTBB_INTERFACE_VERSION == 5005\n\nChanges (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release):\n\n- Added Community Preview feature: graph.\n- Added automatic propagation of master thread FPU settings to\n    TBB worker threads.\n- Added a public function to perform a sequentially consistent full\n    memory fence: tbb::atomic_fence() in tbb/atomic.h.\n\nBugs fixed:\n\n- Data race that could result in scheduler data structures corruption\n    when using fire-and-forget tasks.\n- Potential referencing of destroyed concurrent_hash_map element after\n    using erase(accessor&A) method with A acquired as const_accessor.\n- Fixed a correctness bug in the convex hull example.\n\nOpen-source contributions integrated:\n\n- Patch for calls to internal::atomic_do_once() by Andrey Semashev.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 5004\n\nChanges (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):\n\n- Added Community Preview feature: concurrent_priority_queue.\n- Fixed library loading to avoid possibility for remote code execution,\n    see http://www.microsoft.com/technet/security/advisory/2269637.mspx.\n- Added support of more than 64 cores for appropriate Microsoft*\n    Windows* versions. For more details, see\n    http://msdn.microsoft.com/en-us/library/dd405503.aspx.\n- Default number of worker threads is adjusted in accordance with\n    process affinity mask.\n\nBugs fixed:\n\n- Calls of scalable_* functions from inside the allocator library\n    caused issues if the functions were overridden by another module.\n- A crash occurred if methods run() and wait() were called concurrently\n    for an empty tbb::task_group (1736).\n- The tachyon example exhibited build problems associated with\n    bug 554339 on Microsoft* Visual Studio* 2010. Project files were\n    modified as a partial workaround to overcome the problem. See\n    http://connect.microsoft.com/VisualStudio/feedback/details/554339.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 5003\n\nChanges (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release):\n\n- cache_aligned_allocator class reworked to use scalable_aligned_malloc.\n- Improved performance of count() and equal_range() methods\n    in concurrent_unordered_map.\n- Improved implementation of 64-bit atomic loads and stores on 32-bit\n    platforms, including compilation with VC 7.1.\n- Added implementation of atomic operations on top of OSAtomic API\n    provided by OS X*.\n- Removed gratuitous try/catch blocks surrounding thread function calls\n  in tbb_thread.\n- Xcode* projects were added for sudoku and game_of_life examples.\n- Xcode* projects were updated to work without TBB framework.\n\nBugs fixed:\n\n- Fixed a data race in task scheduler destruction that on rare occasion\n    could result in memory corruption.\n- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).\n\nOpen-source contributions integrated:\n\n- MinGW-64 basic support by brsomoza (partially).\n- Patch for atomic.h by Andrey Semashev.\n- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.\n- Various improvements by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 5002\n\nChanges (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release):\n\n- Destructor of tbb::task_group class throws missing_wait exception\n    if there are tasks running when it is invoked.\n- Interoperability layer with Intel Cilk Plus runtime library added\n    to protect TBB TLS in case of nested usage with Intel Cilk Plus.\n- Compilation fix for dependent template names in concurrent_queue.\n- Memory allocator code refactored to ease development and maintenance.\n\nBugs fixed:\n\n- Improved interoperability with other Intel software tools on Linux in\n    case of dynamic replacement of memory allocator (1700)\n- Fixed install issues that prevented installation on\n    Mac OS* X 10.6.4 (1711).\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 commercial-aligned release):\n\n- Decreased memory fragmentation by allocations bigger than 8K.\n- Lazily allocate worker threads, to avoid creating unnecessary stacks.\n\nBugs fixed:\n\n- TBB allocator used much more memory than malloc (1703) - see above.\n- Deadlocks happened in some specific initialization scenarios\n    of the TBB allocator (1701, 1704).\n- Regression in enumerable_thread_specific: excessive requirements\n    for object constructors.\n- A bug in construction of parallel_pipeline filters when body instance\n    was a temporary object.\n- Incorrect usage of memory fences on PowerPC and XBOX360 platforms.\n- A subtle issue in task group context binding that could result\n    in cancellation signal being missed by nested task groups.\n- Incorrect construction of concurrent_unordered_map if specified\n    number of buckets is not power of two.\n- Broken count() and equal_range() of concurrent_unordered_map.\n- Return type of postfix form of operator++ for hash map's iterators.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- All open-source-release changes down to TBB 2.2 U3 below\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20100406 open-source release\n\nChanges (w.r.t. 20100310 open-source release):\n\n- Added support for Microsoft* Visual Studio* 2010, including binaries.\n- Added a PDF file with recommended Design Patterns for TBB.\n- Added parallel_pipeline function and companion classes and functions\n    that provide a strongly typed lambda-friendly pipeline interface.\n- Reworked enumerable_thread_specific to use a custom implementation of\n    hash map that is more efficient for ETS usage models.\n- Added example for class task_group; see examples/task_group/sudoku.\n- Removed two examples, as they were long outdated and superceded:\n    pipeline/text_filter (use pipeline/square);\n    parallel_while/parallel_preorder (use parallel_do/parallel_preorder).\n- PDF documentation updated.\n- Other fixes and changes in code, tests, and examples.\n\nBugs fixed:\n\n- Eliminated build errors with MinGW32.\n- Fixed post-build step and other issues in VS projects for examples.\n- Fixed discrepancy between scalable_realloc and scalable_msize that\n    caused crashes with malloc replacement on Windows.\n\n------------------------------------------------------------------------\n20100310 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- Version macros changed in anticipation of a future release.\n- Directory structure aligned with Intel(R) C++ Compiler;\n    now TBB binaries reside in <arch>/<os_key>/[bin|lib]\n    (in TBB 2.x, it was [bin|lib]/<arch>/<os_key>).\n- Visual Studio projects changed for examples: instead of separate set\n    of files for each VS version, now there is single 'msvs' directory\n    that contains workspaces for MS C++ compiler (<example>_cl.sln) and\n    Intel C++ compiler (<example>_icl.sln). Works with VS 2005 and above.\n- The name versioning scheme for backward compatibility was improved;\n    now compatibility-breaking changes are done in a separate namespace.\n- Added concurrent_unordered_map implementation based on a prototype\n    developed in Microsoft for a future version of PPL.\n- Added PPL-compatible writer-preference RW lock (reader_writer_lock).\n- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names\n    implemented in TBB into namespace std.\n- Added almost-C++0x-compatible std::condition_variable, plus a bunch\n    of other C++0x classes required by condition_variable.\n- With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread.\n- task.cpp was split into several translation units to structure\n    TBB scheduler sources layout. Static data layout and library\n    initialization logic were also updated.\n- TBB scheduler reworked to prevent master threads from stealing\n    work belonging to other masters.\n- Class task was extended with enqueue() method, and slightly changed\n    semantics of methods spawn() and destroy(). For exact semantics,\n    refer to TBB Reference manual.\n- task_group_context now allows for destruction by non-owner threads.\n- Added TBB_USE_EXCEPTIONS macro to control use of exceptions in TBB\n    headers. It turns off (i.e. sets to 0) automatically if specified\n    compiler options disable exception handling.\n- TBB is enabled to run on top of Microsoft's Concurrency Runtime\n    on Windows* 7 (via our worker dispatcher known as RML).\n- Removed old unused busy-waiting code in concurrent_queue.\n- Described the advanced build & test options in src/index.html.\n- Warning level for GCC raised with -Wextra and a few other options.\n- Multiple fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- Xbox support by Roman Lut (Deep Shadows), though further changes are\n    required to make it working; e.g. post-2.1 entry points are missing.\n- \"Eventcount\" by Dmitry Vyukov evolved into concurrent_monitor,\n    an internal class used in the implementation of concurrent_queue.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 4003\n\nChanges (w.r.t. Intel TBB 2.2 Update 2 commercial-aligned release):\n\n- PDF documentation updated.\n\nBugs fixed:\n\n- concurrent_hash_map compatibility issue exposed on Linux in case\n    two versions of the container were used by different modules.\n- enforce 16 byte stack alignment for consistence with GCC; required\n    to work correctly with 128-bit variables processed by SSE.\n- construct() methods of allocator classes now use global operator new.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4002\n\nChanges (w.r.t. Intel TBB 2.2 Update 1 commercial-aligned release):\n\n- parallel_invoke and parallel_for_each now take function objects\n    by const reference, not by value.\n- Building TBB with /MT is supported, to avoid dependency on particular\n    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT\n    are located in vc_mt directory.\n- Class critical_section introduced.\n- Improvements in exception support: new exception classes introduced,\n    all exceptions are thrown via an out-of-line internal method.\n- Improvements and fixes in the TBB allocator and malloc replacement,\n    including robust memory identification, and more reliable dynamic\n    function substitution on Windows*.\n- Method swap() added to class tbb_thread.\n- Methods rehash() and bucket_count() added to concurrent_hash_map.\n- Added support for Visual Studio* 2010 Beta2. No special binaries\n    provided, but CRT-independent DLLs (vc_mt) should work.\n- Other fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- The fix to build 32-bit TBB on Mac OS* X 10.6.\n- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of\n    earlier work by Raf Schietekat.\n\nBugs fixed:\n\n- 159 - TBB build for PowerPC* running Mac OS* X.\n- 160 - IBM* Java segfault if used with TBB allocator.\n- crash in concurrent_queue<char> (1616).\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 4001\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Documentation was updated.\n- TBB scheduler auto-initialization now covers all possible use cases.\n- concurrent_queue: made argument types of sizeof used in paddings\n  consistent with those actually used.\n- Memory allocator was improved: supported corner case of user's malloc\n    calling scalable_malloc (non-Windows), corrected processing of\n    memory allocation requests during tbb memory allocator startup\n    (Linux).\n- Windows malloc replacement has got better support for static objects.\n- In pipeline setups that do not allow actual parallelism, execution\n    by a single thread is guaranteed, idle spinning eliminated, and\n    performance improved.\n- RML refactoring and clean-up.\n- New constructor for concurrent_hash_map allows reserving space for\n    a number of items.\n- Operator delete() added to the TBB exception classes.\n- Lambda support was improved in parallel_reduce.\n- gcc 4.3 warnings were fixed for concurrent_queue.\n- Fixed possible initialization deadlock in modules using TBB entities\n    during construction of global static objects.\n- Copy constructor in concurrent_hash_map was fixed.\n- Fixed a couple of rare crashes in the scheduler possible before\n    in very specific use cases.\n- Fixed a rare crash in the TBB allocator running out of memory.\n- New tests were implemented, including test_lambda.cpp that checks\n    support for lambda expressions.\n- A few other small changes in code, tests, and documentation.\n\n------------------------------------------------------------------------\n20090809 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Fixed known exception safety issues in concurrent_vector.\n- Better concurrency of simultaneous grow requests in concurrent_vector.\n- TBB allocator further improves performance of large object allocation.\n- Problem with source of text relocations was fixed on Linux\n- Fixed bugs related to malloc replacement under Windows\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4000\n\nChanges (w.r.t. Intel TBB 2.1 U4 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Architecture folders renamed from em64t to intel64 and from itanium\n    to ia64.\n- Major Interface version changed from 3 to 4. Deprecated interfaces\n    might be removed in future releases.\n- Parallel algorithms that use partitioners have switched to use\n    the auto_partitioner by default.\n- Improved memory allocator performance for allocations bigger than 8K.\n- Added new thread-bound filters functionality for pipeline.\n- New implementation of concurrent_hash_map that improves performance\n    significantly.\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\n20090511 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Basic support for MinGW32 development kit.\n- Added tbb::zero_allocator class that initializes memory with zeros.\n    It can be used as an adaptor to any STL-compatible allocator class.\n- Added tbb::parallel_for_each template function as alias to parallel_do.\n- Added more overloads for tbb::parallel_for.\n- Added support for exact exception propagation (can only be used with\n    compilers that support C++0x std::exception_ptr).\n- tbb::atomic template class can be used with enumerations.\n- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended\n    with explicit lock/unlock methods.\n- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector\n    to provide space allocation guarantees. More methods added for\n    compatibility with std::vector, including some from C++0x.\n- Preview of a lambda-friendly interface for low-level use of tasks.\n- scalable_msize function added to the scalable allocator (Windows only).\n- Rationalized internal auxiliary functions for spin-waiting and backoff.\n- Several tests undergo decent refactoring.\n\nChanges affecting backward compatibility:\n\n- Improvements in concurrent_queue, including limited API changes.\n    The previous version is deprecated; its functionality is accessible\n    via methods of the new tbb::concurrent_bounded_queue class.\n- grow* and push_back methods of concurrent_vector changed to return\n    iterators; old semantics is deprecated.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 3016\n\nChanges (w.r.t. Intel TBB 2.1 U3 commercial-aligned release):\n\n- Added tests for aligned memory allocations and malloc replacement.\n- Several improvements for better bundling with Intel(R) C++ Compiler.\n- A few other small changes in code and documentaion.\n\nBugs fixed:\n\n- 150 - request to build TBB examples with debug info in release mode.\n- backward compatibility issue with concurrent_queue on Windows.\n- dependency on VS 2005 SP1 runtime libraries removed.\n- compilation of GUI examples under Xcode* 3.1 (1577).\n- On Windows, TBB allocator classes can be instantiated with const types\n    for compatibility with MS implementation of STL containers (1566).\n\n------------------------------------------------------------------------\n20090313 open-source release\n\nChanges (w.r.t. 20081109 open-source release):\n\n- Includes all changes introduced in TBB 2.1 Update 2 & Update 3\n    commercial-aligned releases (see below for details).\n- Added tbb::parallel_invoke template function. It runs up to 10\n    user-defined functions in parallel and waits for them to complete.\n- Added a special library providing ability to replace the standard\n    memory allocation routines in Microsoft* C/C++ RTL (malloc/free,\n    global new/delete, etc.) with the TBB memory allocator.\n    Usage details are described in include/tbb/tbbmalloc_proxy.h file.\n- Task scheduler switched to use new implementation of its core\n    functionality (deque based task pool, new structure of arena slots).\n- Preview of Microsoft* Visual Studio* 2005 project files for\n    building the library is available in build/vsproject folder.\n- Added tests for aligned memory allocations and malloc replacement.\n- Added parallel_for/game_of_life.net example (for Windows only)\n    showing TBB usage in a .NET application.\n- A number of other fixes and improvements to code, tests, makefiles,\n    examples and documents.\n\nBugs fixed:\n\n- The same list as in TBB 2.1 Update 4 right above.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 3015\n\nChanges (w.r.t. Intel TBB 2.1 U2 commercial-aligned release):\n\n- Added support for aligned allocations to the TBB memory allocator.\n- Added a special library to use with LD_PRELOAD on Linux* in order to\n    replace the standard memory allocation routines in C/C++ with the\n    TBB memory allocator.\n- Added null_mutex and null_rw_mutex: no-op classes interface-compliant\n    to other TBB mutexes.\n- Improved performance of parallel_sort, to close most of the serial gap\n    with std::sort, and beat it on 2 and more cores.\n- A few other small changes.\n\nBugs fixed:\n\n- the problem where parallel_for hanged after exception throw\n    if affinity_partitioner was used (1556).\n- get rid of VS warnings about mbstowcs deprecation (1560),\n    as well as some other warnings.\n- operator== for concurrent_vector::iterator fixed to work correctly\n    with different vector instances.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 3014\n\nChanges (w.r.t. Intel TBB 2.1 U1 commercial-aligned release):\n\n- Incorporates all open-source-release changes down to TBB 2.1 U1,\n    except for:\n    - 20081019 addition of enumerable_thread_specific;\n- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;\n    warnings found on this level were cleaned or suppressed.\n- Added TBB_runtime_interface_version API function.\n- Added new example: pipeline/square.\n- Added exception handling and cancellation support\n    for parallel_do and pipeline.\n- Added copy constructor and [begin,end) constructor to concurrent_queue.\n- Added some support for beta version of Intel(R) Parallel Amplifier.\n- Added scripts to set environment for cross-compilation of 32-bit\n    applications on 64-bit Linux with Intel(R) C++ Compiler.\n- Fixed semantics of concurrent_vector::clear() to not deallocate\n    internal arrays. Fixed compact() to perform such deallocation later.\n- Fixed the issue with atomic<T*> when T is incomplete type.\n- Improved support for PowerPC* Macintosh*, including the fix\n    for a bug in masked compare-and-swap reported by a customer.\n- As usual, a number of other improvements everywhere.\n\n------------------------------------------------------------------------\n20081109 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added new serial out of order filter for tbb::pipeline.\n- Fixed the issue with atomic<T*>::operator= reported at the forum.\n- Fixed the issue with using tbb::task::self() in task destructor\n    reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n- Changes in the memory allocator were partially integrated.\n\n------------------------------------------------------------------------\n20081019 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced enumerable_thread_specific<T>.  This new class provides a\n    wrapper around native thread local storage as well as iterators and\n    ranges for accessing the thread local copies (1533).\n- Improved support for Intel(R) Threading Analysis Tools\n    on Intel(R) 64 architecture.\n- Dependency from Microsoft* CRT was integrated to the libraries using\n    manifests, to avoid issues if called from code that uses different\n    version of Visual C++* runtime than the library.\n- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,\n    TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n\n- linker optimization: /incremental:no .\n\n------------------------------------------------------------------------\n20080925 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.\n- Improved support for lambda functions.\n- Fixed more concurrent_queue issues reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3013\n\nChanges (w.r.t. Intel TBB 2.1 commercial-aligned release):\n\n- Fixed small memory leak in the memory allocator.\n- Incorporates all open-source-release changes since TBB 2.1,\n    except for:\n    - 20080825 changes for parallel_do;\n\n------------------------------------------------------------------------\n20080825 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added exception handling and cancellation support for parallel_do.\n- Added default HashCompare template argument for concurrent_hash_map.\n- Fixed concurrent_queue.clear() issues due to incorrect assumption\n    about clear() being private method.\n- Added the possibility to use TBB in applications that change\n    default calling conventions (Windows* only).\n- Many improvements to code, tests, examples, makefiles and documents.\n\nBugs fixed:\n\n- 120, 130 - memset declaration missed in concurrent_hash_map.h\n\n------------------------------------------------------------------------\n20080724 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Inline assembly for atomic operations improved for gcc 4.3\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\n20080709 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- operator=() was added to the tbb_thread class according to\n    the current working draft for std::thread.\n- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.\n\nBugs fixed:\n\n- 127 - concurrent_hash_map::range fixed to split correctly.\n\nOpen-source contributions integrated:\n\n- fix_set_midpoint.diff by jyasskin\n- SPARC* support in makefiles by Raf Schietekat\n\n------------------------------------------------------------------------\n20080622 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a hang that rarely happened on Linux\n    during deinitialization of the TBB scheduler.\n- Improved support for Intel(R) Thread Checker.\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3011\n\nChanges (w.r.t. Intel TBB 2.0 U3 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0 below,\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20080605 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Explicit control of exported symbols by version scripts added on Linux.\n- Interfaces polished for exception handling & algorithm cancellation.\n- Cache behavior improvements in the scalable allocator.\n- Improvements in text_filter, polygon_overlay, and other examples.\n- A lot of other stability improvements in code, tests, and makefiles.\n- First release where binary packages include headers/docs/examples, so\n    binary packages are now self-sufficient for using TBB.\n\nOpen-source contributions integrated:\n\n- atomics patch (partially).\n- tick_count warning patch.\n\nBugs fixed:\n\n- 118 - fix for boost compatibility.\n- 123 - fix for tbb_machine.h.\n\n------------------------------------------------------------------------\n20080512 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a problem with backward binary compatibility\n    of debug Linux builds.\n- Sun* Studio* support added.\n- soname support added on Linux via linker script. To restore backward\n    binary compatibility, *.so -> *.so.2 softlinks should be created.\n- concurrent_hash_map improvements - added few new forms of insert()\n    method and fixed precondition and guarantees of erase() methods.\n    Added runtime warning reporting about bad hash function used for\n    the container. Various improvements for performance and concurrency.\n- Cancellation mechanism reworked so that it does not hurt scalability.\n- Algorithm parallel_do reworked. Requirement for Body::argument_type\n    definition removed, and work item argument type can be arbitrarily\n    cv-qualified.\n- polygon_overlay example added.\n- A few more improvements to code, tests, examples and Makefiles.\n\nOpen-source contributions integrated:\n\n- Soname support patch for Bugzilla #112.\n\nBugs fixed:\n\n- 112 - fix for soname support.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)\n\nCorresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U2 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U2.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- A few more small bug fixes from open-source releases below.\n\n------------------------------------------------------------------------\n20080408 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- count_strings example reworked: new word generator implemented, hash\n    function replaced, and tbb_allocator is used with std::string class.\n- Static methods of spin_rw_mutex were replaced by normal member\n    functions, and the class name was versioned.\n- tacheon example was renamed to tachyon.\n- Improved support for Intel(R) Thread Checker.\n- A few more minor improvements.\n\nOpen-source contributions integrated:\n\n- Two sets of Sun patches for IA Solaris support.\n\n------------------------------------------------------------------------\n20080402 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Exception handling and cancellation support for tasks and algorithms\n    fully enabled.\n- Exception safety guaranties defined and fixed for all concurrent\n    containers.\n- User-defined memory allocator support added to all concurrent\n    containers.\n- Performance improvement of concurrent_hash_map, spin_rw_mutex.\n- Critical fix for a rare race condition during scheduler\n    initialization/de-initialization.\n- New methods added for concurrent containers to be closer to STL,\n    as well as automatic filters removal from pipeline\n    and __TBB_AtomicAND function.\n- The volatile keyword dropped from where it is not really needed.\n- A few more minor improvements.\n\n------------------------------------------------------------------------\n20080319 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for gcc version 4.3 was added.\n- tbb_thread class, near compatible with std::thread expected in C++0x,\n    was added.\n\nBugs fixed:\n\n- 116 - fix for compilation issues with gcc version 4.2.1.\n- 120 - fix for compilation issues with gcc version 4.3.\n\n------------------------------------------------------------------------\n20080311 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- An enumerator added for pipeline filter types (serial vs. parallel).\n- New task_scheduler_observer class introduced, to observe when\n    threads start and finish interacting with the TBB task scheduler.\n- task_scheduler_init reverted to not use internal versioned class;\n    binary compatibility guaranteed with stable releases only.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\n20080304 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support, previously kept under a macro,\n    now fully legalized.\n- Work-in-progress on cache_aligned_allocator improvements.\n- Pipeline really supports parallel input stage; it's no more serialized.\n- Various improvements to code, tests, examples and Makefiles.\n\nBugs fixed:\n\n- 119 - fix for scalable_malloc sometimes failing to return a big block.\n- TR575 - fixed a deadlock occurring on Windows in startup/shutdown\n    under some conditions.\n\n------------------------------------------------------------------------\n20080226 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced tbb_allocator to select between standard allocator and\n    tbb::scalable_allocator when available.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- Improved performance of concurrent_hash_map by using tbb_allocator.\n- Improved support for Intel(R) Thread Checker.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)\n\nCorresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U1.\n- Add support for Microsoft* Visual Studio* 2008, including binary\n    libraries and VS2008 projects for examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Enhancements to Doxygen-readable comments in source code.\n- A few more small bug fixes from open-source releases below.\n\nBugs fixed:\n\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080207 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Improvements and minor fixes in VS2008 projects for examples.\n- Improvements in code for gating worker threads that wait for work,\n  previously consolidated under #if IMPROVED_GATING, now legalized.\n- Cosmetic changes in code, examples, tests.\n\nBugs fixed:\n\n- 113 - Iterators and ranges should be convertible to their const\n    counterparts.\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080122 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Updated examples/parallel_for/seismic to improve the visuals and to\n    use the affinity_partitioner (20071127 and forward) for better\n    performance.\n- Minor improvements to unittests and performance tests.\n\n------------------------------------------------------------------------\n20080115 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Cleanup, simplifications and enhancements to the Makefiles for\n    building the libraries (see build/index.html for high-level\n    changes) and the examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Engineering work-in-progress on exception safety/support.\n- Engineering work-in-progress on affinity_partitioner for\n    parallel_reduce.\n- Engineering work-in-progress on improved gating for worker threads\n    (idle workers now block in the OS instead of spinning).\n- Enhancements to Doxygen-readable comments in source code.\n\nBugs fixed:\n\n- 102 - Support for parallel build with gmake -j\n- 114 - /Wp64 build warning on Windows*.\n\n------------------------------------------------------------------------\n20071218 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Full support for Microsoft* Visual Studio* 2008 in open-source.\n    Binaries for vc9/ will be available in future stable releases.\n- New recursive_mutex class.\n- Full support for 32-bit PowerMac including export files for builds.\n- Improvements to parallel_do.\n\n------------------------------------------------------------------------\n20071206 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for Microsoft* Visual Studio* 2008 in building libraries\n    from source as well as in vc9/ projects for examples.\n- Small fixes to the affinity_partitioner first introduced in 20071127.\n- Small fixes to the thread-stack size hook first introduced in 20071127.\n- Engineering work in progress on concurrent_vector.\n- Engineering work in progress on exception behavior.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20071127 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support (affinity partitioner) first appears.\n- More work on concurrent_vector.\n- New parallel_do algorithm (function-style version of parallel while)\n    and parallel_do/parallel_preorder example.\n- New task_scheduler_init() hooks for getting default_num_threads() and\n    for setting thread stack size.\n- Support for weak memory consistency models in the code base.\n- Futex usage in the task scheduler (Linux).\n- Started adding 32-bit PowerMac support.\n- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler\n    version.\n- TBB libraries added to link line automatically on Microsoft Windows*\n    systems via #pragma comment linker directives.\n\nOpen-source contributions integrated:\n\n- FreeBSD platform support patches.\n- AIX weak memory model patch.\n\nBugs fixed:\n\n- 108 - Removed broken affinity.h reference.\n- 101 - Does not build on Debian Lenny (replaced arch with uname -m).\n\n------------------------------------------------------------------------\n20071030 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- More work on concurrent_vector.\n- Better support for building with -Wall -Werror (or not) as desired.\n- A few fixes to eliminate extraneous warnings.\n- Begin introduction of versioning hooks so that the internal/API\n    version is tracked via TBB_INTERFACE_VERSION.  The newest binary\n    libraries should always work with previously-compiled code when-\n    ever possible.\n- Engineering work in progress on using futex inside the mutexes (Linux).\n- Engineering work in progress on exception behavior.\n- Engineering work in progress on a new parallel_do algorithm.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20070927 open-source release\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Minor update to TBB 2.0 U1 below.\n- Begin introduction of new concurrent_vector interfaces not released\n    with TBB 2.0 U1.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)\n\nCorresponds to commercial 014 (for Linux*, 016) packages.\n\nChanges (w.r.t. Intel TBB 2.0 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0\n    below, were incorporated into this release.\n- Made a number of changes to the officially supported OS list:\n    Added Linux* OSs:\n\tAsianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,\n\tTurbo Linux* 11, Ubuntu* 7.04;\n    Dropped Linux* OSs:\n\tAsianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,\n\tMandriva/Mandrake* 10.1, Miracle Linux* 4.0,\n\tRed Flag* DC Server 5.0;\n    Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and\n\tforward) are now supported.\n- Commercial installers on Linux* fixed to recommend the correct\n    binaries to use in more cases, with less unnecessary warnings.\n- Changes to eliminate spurious build warnings.\n\nOpen-source contributions integrated:\n\n- Two small header guard macro patches; it also fixed bug #94.\n- New blocked_range3d class.\n\nBugs fixed:\n\n- 93 - Removed misleading comments in task.h.\n- 94 - See above.\n\n------------------------------------------------------------------------\n20070815 open-source release\n\nChanges:\n\n- Changes to eliminate spurious build warnings.\n- Engineering work in progress on concurrent_vector allocator behavior.\n- Added hooks to use the Intel(R) compiler code coverage tools.\n\nOpen-source contributions integrated:\n\n- Mac OS* X build warning patch.\n\nBugs fixed:\n\n- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are\n    installed.\n\n------------------------------------------------------------------------\n20070719 open-source release\n\nChanges:\n\n- Minor update to TBB 2.0 commercial-aligned release below.\n- Changes to eliminate spurious build warnings.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 commercial-aligned release (package 010, July 19, 2007)\n\nCorresponds to commercial 010 (for Linux*, 012) packages.\n\n- TBB open-source debut release.\n\n------------------------------------------------------------------------\nIntel TBB 1.1 commercial release (April 10, 2007)\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- auto_partitioner which offered an automatic alternative to specifying\n    a grain size parameter to estimate the best granularity for tasks.\n- The release was added to the Intel(R) C++ Compiler 10.0 Pro.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 2 commercial release\n\nChanges (w.r.t. Intel TBB 1.0 Update 1 commercial release):\n\n- Mac OS* X 64-bit support added.\n- Source packages for commercial releases introduced.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 1 commercial-aligned release\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- Fix for critical package issue on Mac OS* X.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 commercial release (August 29, 2006)\n\nChanges (w.r.t. Intel TBB 1.0 beta commercial release):\n\n- New namespace (and compatibility headers for old namespace).\n    Namespaces are tbb and tbb::internal and all classes are in the\n    underscore_style not the WindowsStyle.\n- New class: scalable_allocator (and cache_aligned_allocator using that\n    if it exists).\n- Added parallel_for/tacheon example.\n- Removed C-style casts from headers for better C++ compliance.\n- Bug fixes.\n- Documentation improvements.\n- Improved performance of the concurrent_hash_map class.\n- Upgraded parallel_sort() to support STL-style random-access iterators\n    instead of just pointers.\n- The Windows vs7_1 directories renamed to vs7.1 in examples.\n- New class: spin version of reader-writer lock.\n- Added push_back() interface to concurrent_vector().\n\n------------------------------------------------------------------------\nIntel TBB 1.0 beta commercial release\n\nInitial release.\n\nFeatures / APIs:\n\n- Concurrent containers: ConcurrentHashTable, ConcurrentVector,\n    ConcurrentQueue.\n- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan,\n    ParallelWhile, Pipeline, ParallelSort.\n- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D\n- Task scheduler with multi-master support.\n- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap.\n- Locks: spin, reader-writer, queuing, OS-wrapper.\n- Memory allocation: STL-style memory allocator that avoids false\n    sharing.\n- Timers.\n\nTools Support:\n- Intel(R) Thread Checker 3.0.\n- Intel(R) Thread Profiler 3.0.\n\nDocumentation:\n- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,\n    Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf.\n- Class hierarchy HTML pages (Doxygen).\n- Tree of index.html pages for navigating the installed package, esp.\n    for the examples.\n\nExamples:\n- One for each of these TBB features: ConcurrentHashTable, ParallelFor,\n    ParallelReduce, ParallelWhile, Pipeline, Task.\n- Live copies of examples from Getting_Started.pdf.\n- TestAll example that exercises every class and header in the package\n    (i.e., a \"liveness test\").\n- Compilers: see Release_Notes.txt.\n- APIs: OpenMP, WinThreads, Pthreads.\n\nPackaging:\n- Package for Windows installs IA-32 and EM64T bits.\n- Package for Linux installs IA-32, EM64T and IPF bits.\n- Package for Mac OS* X installs IA-32 bits.\n- All packages support Intel(R) software setup assistant (ISSA) and\n    install-time FLEXlm license checking.\n- ISSA support allows license file to be specified directly in case of\n    no Internet connection or problems with IRC or serial #s.\n- Linux installer allows root or non-root, RPM or non-RPM installs.\n- FLEXlm license servers (for those who need floating/counted licenses)\n    are provided separately on Intel(R) Premier.\n\n------------------------------------------------------------------------\nIntel, the Intel logo, Xeon, Intel Xeon Phi, and Cilk are registered\ntrademarks or trademarks of Intel Corporation or its subsidiaries in\nthe United States and other countries.\n\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/README",
    "content": "Intel(R) Threading Building Blocks - README\n\nSee index.html for directions and documentation.\n\nIf source is present (./Makefile and src/ directories),\ntype 'gmake' in this directory to build and test.\n\nSee examples/index.html for runnable examples and directions.\n\nSee http://threadingbuildingblocks.org for full documentation\nand software information.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/README.md",
    "content": "# Intel(R) Threading Building Blocks 2018 Update 5\n[![Stable release](https://img.shields.io/badge/version-2018_U5-green.svg)](https://github.com/01org/tbb/releases/tag/2018_U5)\n[![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](LICENSE)\n\nIntel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that take\nfull advantage of multicore performance, that are portable, composable and have future-proof scalability.\n\n## Release Information\nHere are the latest [Changes](CHANGES) and [Release Notes](doc/Release_Notes.txt) (contains system requirements and known issues).\n\nSince [2018 U5](https://github.com/01org/tbb/releases/tag/2018_U5) TBB binary packages include [Parallel STL](https://github.com/intel/parallelstl) as a high-level component.\n\n## Documentation\n* Intel(R) TBB [tutorial](https://software.intel.com/en-us/tbb-tutorial)\n* Intel(R) TBB general documentation: [stable](https://software.intel.com/en-us/tbb-documentation)\nand [latest](https://www.threadingbuildingblocks.org/docs/help/index.htm)\n\n## Support\nPlease report issues and suggestions via\n[GitHub issues](https://github.com/01org/tbb/issues) or start a topic on the\n[Intel(R) TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/).\n\n## How to Contribute\nPlease, read the instructions on the official [Intel(R) TBB open source site](https://www.threadingbuildingblocks.org/submit-contribution).\n\n## Engineering team contacts\n* [E-mail us.](mailto:inteltbbdevelopers@intel.com)\n\n------------------------------------------------------------------------\nIntel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.\n\n\\* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/bin/tbbvars.csh",
    "content": "#!/bin/csh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Parsing script arguments\n# Arg1 represents target architecture. Its possible values are 'ia32' or 'intel64',\n# default value equals to the value of $COMPILERVARS_ARCHITECTURE environment variable.\n\nset TBB_TARGET_ARCH=\"\"\n\nif ($?COMPILERVARS_ARCHITECTURE) then\n    set TBB_TARGET_ARCH=\"$COMPILERVARS_ARCHITECTURE\"\nendif\n\nif (\"$1\" != \"\") then\n    set TBB_TARGET_ARCH=\"$1\"\nendif\n\nif (\"$TBB_TARGET_ARCH\" != \"\") then\n    if (\"$TBB_TARGET_ARCH\" != \"ia32\" && \"$TBB_TARGET_ARCH\" != \"intel64\") then\n        echo \"ERROR: Unknown switch '$TBB_TARGET_ARCH'. Accepted values: ia32, intel64\"\n        set TBB_TARGET_ARCH=\"\"\n        exit 1\n    endif\nelse\n    echo \"ERROR: Architecture is not defined. Accepted values: ia32, intel64\"\n    exit 1\nendif\n\n# Arg2 represents target platform. Its possible values are 'android' or 'linux'.\n# If $COMPILERVARS_PLATFORM environment variable is defined,\n# the default value of $TBB_TARGET_PLATFORM equals to its value.\n# Otherwise it equals to 'linux'.\nif (\"$2\" == \"linux\" || \"$2\" == \"android\") then\n    set TBB_TARGET_PLATFORM=$2\nelse\n    if ($?COMPILERVARS_PLATFORM) then\n        if (\"$COMPILERVARS_PLATFORM\" == \"linux\" || \"$COMPILERVARS_PLATFORM\" == \"android\") then\n            set TBB_TARGET_PLATFORM=$COMPILERVARS_PLATFORM\n        else\n            set TBB_TARGET_PLATFORM=\"linux\"\n        endif\n    else\n        set TBB_TARGET_PLATFORM=\"linux\"\n    endif\nendif\n\n# Arg3 represents TBBROOT detection method. Its possible value is 'auto_tbbroot'. In which case\n# the environment variable TBBROOT is detected automatically by using the script directory path.\nif (\"$3\" == \"auto_tbbroot\") then\n    set sourced=($_)\n    if (\"$sourced\" != '') then # if the script was sourced\n        set script_name=`readlink -f $sourced[2]`\n    else # if the script was run => \"$_\" is empty\n        set script_name=`readlink -f $0`\n    endif\n    set script_dir=`dirname $script_name`\n    setenv TBBROOT \"$script_dir/..\"\nelse\n    setenv TBBROOT \"SUBSTITUTE_INSTALL_DIR_HERE\"\nendif\n\nset LIBTBB_NAME=\"libtbb.so.2\"\nif (\"$TBB_TARGET_PLATFORM\" != \"android\") then\n    which gcc >/dev/null\n    if ($status == 0) then\n        set gcc_version_full=`gcc --version | grep \"gcc\"| egrep -o \" [0-9]+\\.[0-9]+\\.[0-9]+.*\" | sed -e \"s/^\\ //\"`\n        if ($status == 0) then\n            set gcc_version=`echo \"$gcc_version_full\" | egrep -o \"^[0-9]+\\.[0-9]+\\.[0-9]+\"`\n        endif\n        switch (\"$gcc_version\")\n        case 4.[7-9]*:\n        case [5-9]*:\n            set library_directory=\"${TBB_TARGET_ARCH}/gcc4.7\"\n            breaksw\n        case 4.[4-6]*:\n            set library_directory=\"${TBB_TARGET_ARCH}/gcc4.4\"\n            breaksw\n        default:\n            set library_directory=\"${TBB_TARGET_ARCH}/gcc4.1\"\n            breaksw\n        endsw\n    else\n        echo \"WARNING: 'gcc' was not found\"\n        set library_directory=\"${TBB_TARGET_ARCH}/gcc4.1\"\n    endif\nelse\n    if ($TBB_TARGET_PLATFORM == \"android\") then\n        if ($TBB_TARGET_ARCH == \"ia32\") then\n            set library_directory=$TBB_TARGET_PLATFORM\n        else\n            if ($TBB_TARGET_ARCH == \"intel64\") then\n                set library_directory=\"${TBB_TARGET_PLATFORM}/x86_64\"\n            endif\n        endif\n        set LIBTBB_NAME=\"libtbb.so\"\n    else\n        set library_directory=\"\"\n    endif\nendif\n\nif (-e \"${TBBROOT}/lib/${library_directory}/${LIBTBB_NAME}\") then\n\n    if (! $?LD_LIBRARY_PATH) then\n        setenv LD_LIBRARY_PATH \"${TBBROOT}/lib/${library_directory}\"\n    else\n        setenv LD_LIBRARY_PATH \"${TBBROOT}/lib/${library_directory}:$LD_LIBRARY_PATH\"\n    endif\n\n    if (! $?LIBRARY_PATH) then\n        setenv LIBRARY_PATH \"${TBBROOT}/lib/${library_directory}\"\n    else\n        setenv LIBRARY_PATH \"${TBBROOT}/lib/${library_directory}:$LIBRARY_PATH\"\n    endif\n\n    if (! $?CPATH) then\n        setenv CPATH \"${TBBROOT}/include\"\n    else\n        setenv CPATH \"${TBBROOT}/include:$CPATH\"\n    endif\n\nelse\n    echo \"ERROR: ${LIBTBB_NAME} library does not exist in ${TBBROOT}/lib/${library_directory}.\"\n    unsetenv TBBROOT\n    exit 1\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/bin/tbbvars.sh",
    "content": "#!/bin/sh\n#\n# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nget_library_directory () {\n    gcc_version_full=$(gcc --version | grep \"gcc\" | egrep -o \" [0-9]+\\.[0-9]+\\.[0-9]+.*\" | sed -e \"s/^\\ //\")\n    if [ $? -eq 0 ]; then\n        gcc_version=$(echo \"$gcc_version_full\" | egrep -o \"^[0-9]+\\.[0-9]+\\.[0-9]+\")\n    fi\n    case \"${gcc_version}\" in\n    4.[7-9]*|[5-9]* )\n        lib_dir=\"gcc4.7\";;\n    4.[4-6]* )\n        lib_dir=\"gcc4.4\";;\n    * )\n        lib_dir=\"gcc4.1\";;\n    esac\n    echo $lib_dir\n}\n\n# Parsing script arguments\n# Arg1 represents target architecture. Its possible values are 'ia32' or 'intel64',\n# default value equals to the value of $COMPILERVARS_ARCHITECTURE environment variable.\n\nTBB_TARGET_ARCH=\n\nif [ -n \"${COMPILERVARS_ARCHITECTURE}\" ]; then\n    TBB_TARGET_ARCH=$COMPILERVARS_ARCHITECTURE\nfi\n\nif [ -n \"$1\" ]; then\n    TBB_TARGET_ARCH=$1\nfi\n\nif [ -n \"${TBB_TARGET_ARCH}\" ]; then\n    if [ \"$TBB_TARGET_ARCH\" != \"ia32\" -a \"$TBB_TARGET_ARCH\" != \"intel64\" ]; then\n        echo \"ERROR: Unknown switch '$TBB_TARGET_ARCH'. Accepted values: ia32, intel64\"\n        TBB_TARGET_ARCH=\n        return 1;\n    fi\nelse\n    echo \"ERROR: Architecture is not defined. Accepted values: ia32, intel64\"\n    return 1;\nfi\n\n# Arg2 represents target platform. Its possible values are 'android' or 'linux'.\n# If $COMPILERVARS_PLATFORM environment variable is defined,\n# the default value of $TBB_TARGET_PLATFORM equals to its value.\n# Otherwise it equals to 'linux'.\nif [ \"$2\" = \"linux\" -o \"$2\" = \"android\" ]; then\n    TBB_TARGET_PLATFORM=$2\nelif [ \"$COMPILERVARS_PLATFORM\" = \"linux\" -o \"$COMPILERVARS_PLATFORM\" = \"android\" ]; then\n    TBB_TARGET_PLATFORM=$COMPILERVARS_PLATFORM\nelse\n    TBB_TARGET_PLATFORM=\"linux\"\nfi\n\n# Arg3 represents TBBROOT detection method. Its possible value is 'auto_tbbroot'. In which case\n# the environment variable TBBROOT is detected automatically by using the script directory path.\nTBBROOT=SUBSTITUTE_INSTALL_DIR_HERE\nif [ -n \"${BASH_SOURCE}\" ]; then\n    if [ \"$3\" = \"auto_tbbroot\" ]; then\n       TBBROOT=$(cd $(dirname ${BASH_SOURCE}) && pwd -P)/..\n    fi\nfi\n\nLIBTBB_NAME=\"libtbb.so.2\"\nif [ \"$TBB_TARGET_PLATFORM\" != \"android\" ]; then\n    which gcc >/dev/null 2>&1\n    if [ $? -eq 0 ]; then\n        library_directory=\"$TBB_TARGET_ARCH/$(get_library_directory)\"\n    else\n        echo \"WARNING: 'gcc' was not found\"\n        library_directory=\"$TBB_TARGET_ARCH/gcc4.1\"\n    fi\nelif [ \"$TBB_TARGET_PLATFORM\" = \"android\" ]; then\n    if [ \"$TBB_TARGET_ARCH\" = \"ia32\" ]; then\n        library_directory=\"$TBB_TARGET_PLATFORM\"\n    elif [ \"$TBB_TARGET_ARCH\" = \"intel64\" ]; then\n        library_directory=\"$TBB_TARGET_PLATFORM/x86_64\"\n    fi\n    LIBTBB_NAME=\"libtbb.so\"\nelse\n    library_directory=\"\"\nfi\n\nif [ -e \"$TBBROOT/lib/$library_directory/$LIBTBB_NAME\" ]; then\n    export TBBROOT\n    if [ -z \"${LD_LIBRARY_PATH}\" ]; then\n        LD_LIBRARY_PATH=\"$TBBROOT/lib/$library_directory\"; export LD_LIBRARY_PATH\n    else\n        LD_LIBRARY_PATH=\"$TBBROOT/lib/$library_directory:${LD_LIBRARY_PATH}\"; export LD_LIBRARY_PATH\n    fi\n    if [ -z \"${LIBRARY_PATH}\" ]; then\n        LIBRARY_PATH=\"$TBBROOT/lib/$library_directory\"; export LIBRARY_PATH\n    else\n        LIBRARY_PATH=\"$TBBROOT/lib/$library_directory:${LIBRARY_PATH}\"; export LIBRARY_PATH\n    fi\n    if [ -z \"${CPATH}\" ]; then\n        CPATH=\"${TBBROOT}/include\"; export CPATH\n    else\n        CPATH=\"${TBBROOT}/include:$CPATH\"; export CPATH\n    fi\nelse\n    echo \"ERROR: $LIBTBB_NAME library does not exist in $TBBROOT/lib/$library_directory.\"\n    return 2\nfi\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/README.rst",
    "content": ".. contents::\n\nIntroduction\n------------\nMany developers use CMake to manage their development projects, so the Intel(R) Threading Building Blocks (Intel(R) TBB)\nteam created the set of CMake modules to simplify integration of the Intel TBB library into a CMake project.\nThe modules are available starting from Intel TBB 2017 U7 in `<tbb_root>/cmake <https://github.com/01org/tbb/tree/tbb_2017/cmake>`_.\n\nAbout Intel TBB\n^^^^^^^^^^^^^^^\nIntel TBB is a library that supports scalable parallel programming using standard ISO C++ code. It does not require special languages or compilers. It is designed to promote scalable data parallel programming. Additionally, it fully supports nested parallelism, so you can build larger parallel components from smaller parallel components. To use the library, you specify tasks, not threads, and let the library map tasks onto threads in an efficient manner.\n\nMany of the library interfaces employ generic programming, in which interfaces are defined by requirements on types and not specific types. The C++ Standard Template Library (STL) is an example of generic programming. Generic programming enables Intel TBB to be flexible yet efficient. The generic interfaces enable you to customize components to your specific needs.\n\nThe net result is that Intel TBB enables you to specify parallelism far more conveniently than using raw threads, and at the same time can improve performance.\n\nReferences\n^^^^^^^^^^\n* `Official Intel TBB open source site <https://www.threadingbuildingblocks.org/>`_\n* `Official GitHub repository <https://github.com/01org/tbb>`_\n\nEngineering team contacts\n^^^^^^^^^^^^^^^^^^^^^^^^^\nThe Intel TBB team is very interested in convenient integration of the Intel TBB library into customer projects. These CMake modules were created to provide such a possibility for CMake projects using a simple but powerful interface. We hope you will try these modules and we are looking forward to receiving your feedback!\n\nE-mail us: `inteltbbdevelopers@intel.com <mailto:inteltbbdevelopers@intel.com>`_.\n\nVisit our `forum <https://software.intel.com/en-us/forums/intel-threading-building-blocks/>`_.\n\nRelease Notes\n-------------\n* Minimum supported CMake version: ``3.0.0``.\n* Intel TBB versioning via `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ has restricted functionality: compatibility of update numbers (as well as interface versions) is not checked. Supported versioning: ``find_package(TBB <major>.<minor> ...)``. Intel TBB interface version can be obtained in the customer project via the ``TBB_INTERFACE_VERSION`` variable.\n\nUse cases of Intel TBB integration into CMake-aware projects\n------------------------------------------------------------\nThere are two types of Intel TBB packages:\n * Binary packages with pre-built binaries for Windows* OS, Linux* OS and macOS*. They are available on the releases page of the Github repository: https://github.com/01org/tbb/releases. The main purpose of the binary package integration is the ability to build Intel TBB header files and binaries into your CMake-aware project.\n * A source package is also available to download from the release page via the \"Source code\" link. In addition, it can be cloned from the repository by ``git clone https://github.com/01org/tbb.git``. The main purpose of the source package integration is to allow you to do a custom build of the Intel TBB library from the source files and then build that into your CMake-aware project.\n\nThere are four types of CMake modules that can be used to integrate Intel TBB: `TBBConfig`, `TBBGet`, `TBBMakeConfig` and `TBBBuild`. See `Technical documentation for CMake modules`_ section for additional details.\n\nBinary package integration\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe following use case is valid for packages starting from Intel TBB 2017 U7:\n\n* Download package manually and make integration.\n\n Pre-condition: Location of TBBConfig.cmake is available via ``TBB_DIR`` or ``CMAKE_PREFIX_PATH`` contains path to Intel TBB root.\n\n CMake code for integration:\n\n  .. code:: cmake\n\n   find_package(TBB <options>)\n\nThe following use case is valid for all Intel TBB 2017 packages.\n\n* Download package using TBBGet_ and make integration.\n\n Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)\n   tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\nSource package integration\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n* Build Intel TBB from existing source files using TBBBuild_ and make integration.\n\n Pre-condition: Intel TBB source code is available via <tbb_root> and Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)\n   tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\n* Download Intel TBB source files using TBBGet_, build it using TBBBuild_ and make integration.\n\n Pre-condition: Intel TBB CMake modules are available via <path-to-tbb-cmake-modules>.\n\n CMake code for integration:\n  .. code:: cmake\n\n   include(<path-to-tbb-cmake-modules>/TBBGet.cmake)\n   include(<path-to-tbb-cmake-modules>/TBBBuild.cmake)\n   tbb_get(TBB_ROOT tbb_root SOURCE_CODE)\n   tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR)\n   find_package(TBB <options>)\n\nTutorials: Intel TBB integration using CMake\n--------------------------------------------\nBinary Intel TBB integration to the sub_string_finder sample (Windows* OS)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn this example, we will integrate binary Intel TBB package into the sub_string_finder sample on Windows* OS (Microsoft* Visual Studio).\nThis example is also applicable for other platforms with slight changes.\nPlace holders <version> and <date> should be replaced with the actual values for the Intel TBB package being used. The example is written for `CMake 3.7.1`.\n\nPrecondition:\n  * `Microsoft* Visual Studio 11` or higher.\n  * `CMake 3.0.0` or higher.\n\n#. Download the latest binary package for Windows from `this page <https://github.com/01org/tbb/releases/latest>`_ and unpack it to the directory ``C:\\demo_tbb_cmake``.\n#. In the directory ``C:\\demo_tbb_cmake\\tbb<version>_<date>oss\\examples\\GettingStarted\\sub_string_finder`` create ``CMakeLists.txt`` file with the following content:\n    .. code:: cmake\n\n        cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)\n\n        project(sub_string_finder CXX)\n        add_executable(sub_string_finder sub_string_finder.cpp)\n\n        # find_package will search for available TBBConfig using variables CMAKE_PREFIX_PATH and TBB_DIR.\n        find_package(TBB REQUIRED tbb)\n\n        # Link Intel TBB imported targets to the executable;\n        # \"TBB::tbb\" can be used instead of \"${TBB_IMPORTED_TARGETS}\".\n        target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})\n#. Run CMake GUI and:\n    * Fill the following fields (you can use the buttons ``Browse Source...`` and ``Browse Build...`` accordingly)\n\n     * Where is the source code: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder``\n     * Where to build the binaries: ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build``\n\n    * Add new cache entry using button ``Add Entry`` to let CMake know where to search for TBBConfig:\n\n     * Name: ``CMAKE_PREFIX_PATH``\n     * Type: ``PATH``\n     * Value: ``C:/demo_tbb_cmake/tbb<version>_<date>oss``\n\n    * Push the button ``Generate`` and choose a proper generator for your Microsoft* Visual Studio version.\n#. Now you can open the generated solution ``C:/demo_tbb_cmake/tbb<version>_<date>oss/examples/GettingStarted/sub_string_finder/build/sub_string_finder.sln`` in your Microsoft* Visual Studio and build it.\n\nSource code integration of Intel TBB to the sub_string_finder sample (Linux* OS)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn this example, we will build Intel TBB from source code with enabled Community Preview Features and link the sub_string_finder sample with the built library.\nThis example is also applicable for other platforms with slight changes.\n\nPrecondition:\n  * `CMake 3.0.0` or higher.\n  * `Git` (to clone the Intel TBB repository from GitHub)\n\n#. Create the directory ``~/demo_tbb_cmake``, go to the created directory and clone the Intel TBB repository there:\n    ``mkdir ~/demo_tbb_cmake ; cd ~/demo_tbb_cmake ; git clone https://github.com/01org/tbb.git``\n#. In the directory ``~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder`` create ``CMakeLists.txt`` file with following content:\n    .. code:: cmake\n\n     cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)\n\n     project(sub_string_finder CXX)\n     add_executable(sub_string_finder sub_string_finder.cpp)\n\n     include(${TBB_ROOT}/cmake/TBBBuild.cmake)\n\n     # Build Intel TBB with enabled Community Preview Features (CPF).\n     tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1)\n\n     find_package(TBB REQUIRED tbb_preview)\n\n     # Link Intel TBB imported targets to the executable;\n     # \"TBB::tbb_preview\" can be used instead of \"${TBB_IMPORTED_TARGETS}\".\n     target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})\n#. Create a build directory for the sub_string_finder sample to perform build out of source, go to the created directory\n    ``mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build ; cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build``\n#. Run CMake to prepare Makefile for the sub_string_finder sample and provide Intel TBB location (root) where to perform build:\n    ``cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..``\n#. Make an executable and run it:\n    ``make ; ./sub_string_finder``\n\nTechnical documentation for CMake modules\n-----------------------------------------\nTBBConfig\n^^^^^^^^^\n\nConfiguration module for ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library.\n\nHow to use this module in your CMake project:\n #. Add location of Intel TBB (root) to `CMAKE_PREFIX_PATH <https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html>`_\n    or specify location of TBBConfig.cmake in ``TBB_DIR``.\n #. Use `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_ to configure Intel TBB.\n #. Use provided variables and/or imported targets (described below) to work with Intel TBB.\n\nIntel TBB components can be passed to `find_package <https://cmake.org/cmake/help/latest/command/find_package.html>`_\nafter keyword ``COMPONENTS`` or ``REQUIRED``.\nUse basic names of components (``tbb``, ``tbbmalloc``, ``tbb_preview``, etc.).\n\nIf components are not specified then default are used: ``tbb``, ``tbbmalloc`` and ``tbbmalloc_proxy``.\n\nIf ``tbbmalloc_proxy`` is requested, ``tbbmalloc`` component will also be added and set as dependency for ``tbbmalloc_proxy``.\n\nTBBConfig creates `imported targets <https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#imported-targets>`_ as\nshared libraries using the following format: ``TBB::<component>`` (for example, ``TBB::tbb``, ``TBB::tbbmalloc``).\n\nVariables set during Intel TBB configuration:\n\n=========================  ================================================\n         Variable                            Description\n=========================  ================================================\n``TBB_FOUND``              Intel TBB library is found\n``TBB_<component>_FOUND``  specific Intel TBB component is found\n``TBB_IMPORTED_TARGETS``   all created Intel TBB imported targets\n``TBB_VERSION``            Intel TBB version (format: ``<major>.<minor>``)\n``TBB_INTERFACE_VERSION``  Intel TBB interface version\n=========================  ================================================\n\nTBBGet\n^^^^^^\n\nModule for getting ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from `GitHub <https://github.com/01org/tbb>`_.\n\nProvides the following functions:\n ``tbb_get(TBB_ROOT <variable> [RELEASE_TAG <release_tag>|LATEST] [SAVE_TO <path>] [SYSTEM_NAME Linux|Windows|Darwin] [CONFIG_DIR <variable> | SOURCE_CODE])``\n  downloads Intel TBB from GitHub and creates TBBConfig for the downloaded binary package if there is no TBBConfig.\n\n  ====================================  ====================================\n                     Parameter                       Description\n  ====================================  ====================================\n  ``TBB_ROOT <variable>``               a variable to save Intel TBB root in, ``<variable>-NOTFOUND`` will be provided in case ``tbb_get`` is unsuccessful\n  ``RELEASE_TAG <release_tag>|LATEST``  Intel TBB release tag to be downloaded (for example, ``2017_U6``), ``LATEST`` is used by default\n  ``SAVE_TO <path>``                    path to location at which to unpack downloaded Intel TBB, ``${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded`` is used by default\n  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name to download a binary package for,\n                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default\n  ``CONFIG_DIR <variable>``             a variable to save location of TBBConfig.cmake and TBBConfigVersion.cmake. Ignored if ``SOURCE_CODE`` specified\n  ``SOURCE_CODE``                       flag to get Intel TBB source code (instead of binary package)\n  ====================================  ====================================\n\nTBBMakeConfig\n^^^^^^^^^^^^^\n\nModule for making TBBConfig in ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` binary package.\n\nThis module is to be used for packages that do not have TBBConfig.\n\nProvides the following functions:\n ``tbb_make_config(TBB_ROOT <path> CONFIG_DIR <variable> [SYSTEM_NAME Linux|Windows|Darwin])``\n  creates CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) for Intel TBB binary package.\n\n  ====================================  ====================================\n                     Parameter                       Description\n  ====================================  ====================================\n  ``TBB_ROOT <variable>``               path to Intel TBB root\n  ``CONFIG_DIR <variable>``             a variable to store location of the created configuration files\n  ``SYSTEM_NAME Linux|Windows|Darwin``  operating system name of the binary Intel TBB package,\n                                        value of `CMAKE_SYSTEM_NAME <https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html>`_ is used by default\n  ====================================  ====================================\n\nTBBBuild\n^^^^^^^^\n\nModule for building ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from the source code.\n\nProvides the following functions:\n ``tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR <variable> [MAKE_ARGS <custom_make_arguments>])``\n  builds Intel TBB from source code using the ``Makefile``, creates and provides the location of the CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) .\n\n  =====================================  ====================================\n                Parameter                             Description\n  =====================================  ====================================\n  ``TBB_ROOT <variable>``                path to Intel TBB root\n  ``CONFIG_DIR <variable>``              a variable to store location of the created configuration files,\n                                         ``<variable>-NOTFOUND`` will be provided in case ``tbb_build`` is unsuccessful\n  ``MAKE_ARGS <custom_make_arguments>``  custom arguments to be passed to ``make`` tool.\n\n                                         The following arguments are always passed with automatically detected values to\n                                         ``make`` tool if they are not redefined in ``<custom_make_arguments>``:\n\n                                           - ``compiler=<compiler>``\n                                           - ``tbb_build_dir=<tbb_build_dir>``\n                                           - ``tbb_build_prefix=<tbb_build_prefix>``\n                                           - ``-j<n>``\n  =====================================  ====================================\n\n\n------------\n\nIntel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.\n\n``*`` Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/TBBBuild.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#\n# Usage:\n#  include(TBBBuild.cmake)\n#  tbb_build(ROOT <tbb_root> MAKE_ARGS <arg1> [... <argN>])\n#  find_package(TBB <options>)\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\n##\n# Builds Intel TBB.\n#\n# Parameters:\n#  TBB_ROOT   <directory> - path to Intel TBB root directory (with sources);\n#  MAKE_ARGS  <list>      - user-defined arguments to be passed to make-tool;\n#  CONFIG_DIR <variable>  - store location of the created TBBConfig if the build was ok, store <variable>-NOTFOUND otherwise.\n#\nfunction(tbb_build)\n    # NOTE: internal function are used to hide them from user.\n\n    ##\n    # Provides arguments for make-command to build Intel TBB.\n    #\n    # Following arguments are provided automatically if they are not defined by user:\n    #  compiler=<value>\n    #  tbb_build_dir=<value>\n    #  tbb_build_prefix=<value>\n    #  -j<n>\n    #\n    # Parameters:\n    #  USER_DEFINED_ARGS <list> - list of user-defined arguments;\n    #  RESULT <variable> - resulting list of 'make' arguments.\n    #\n    function(tbb_get_make_args)\n        set(oneValueArgs RESULT)\n        set(multiValueArgs USER_DEFINED_ARGS)\n        cmake_parse_arguments(tbb_GMA \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n        set(result ${tbb_GMA_USER_DEFINED_ARGS})\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"compiler=\")\n            # TODO: add other supported compilers.\n            if (CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\")\n                set(compiler gcc)\n            elseif (CMAKE_CXX_COMPILER_ID STREQUAL \"Intel\")\n                set(compiler icc)\n                if (CMAKE_SYSTEM_NAME MATCHES \"Windows\")\n                    set(compiler icl)\n                endif()\n            elseif (MSVC)\n                set(compiler cl)\n            elseif (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n                set(compiler clang)\n            endif()\n\n            set(result \"compiler=${compiler}\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"tbb_build_dir=\")\n            set(result \"tbb_build_dir=${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"tbb_build_prefix=\")\n            set(result \"tbb_build_prefix=tbb_cmake_build_subdir\" ${result})\n        endif()\n\n        if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES \"(;|^) *\\\\-j[0-9]* *(;|$)\")\n            include(ProcessorCount)\n            ProcessorCount(num_of_cores)\n            if (NOT num_of_cores EQUAL 0)\n                set(result \"-j${num_of_cores}\" ${result})\n            endif()\n        endif()\n\n        if (CMAKE_SYSTEM_NAME MATCHES \"Android\")\n            set(result target=android ${result})\n        endif()\n\n        set(${tbb_GMA_RESULT} ${result} PARENT_SCOPE)\n    endfunction()\n\n    ##\n    # Provides release and debug directories basing on 'make' arguments.\n    #\n    # Following 'make' arguments are parsed: tbb_build_dir, tbb_build_prefix\n    #\n    # Parameters:\n    #  MAKE_ARGS   <list>     - 'make' arguments (tbb_build_dir and tbb_build_prefix are required)\n    #  RELEASE_DIR <variable> - store normalized (CMake) path to release directory\n    #  DEBUG_DIR   <variable> - store normalized (CMake) path to debug directory\n    #\n    function(tbb_get_build_paths_from_make_args)\n        set(oneValueArgs RELEASE_DIR DEBUG_DIR)\n        set(multiValueArgs MAKE_ARGS)\n        cmake_parse_arguments(tbb_GBPFMA \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n        foreach(arg ${tbb_GBPFMA_MAKE_ARGS})\n            if (arg MATCHES \"tbb_build_dir=\")\n                string(REPLACE \"tbb_build_dir=\" \"\" tbb_build_dir \"${arg}\")\n            elseif (arg MATCHES \"tbb_build_prefix=\")\n                string(REPLACE \"tbb_build_prefix=\" \"\" tbb_build_prefix \"${arg}\")\n            endif()\n        endforeach()\n\n        set(tbb_release_dir \"${tbb_build_dir}/${tbb_build_prefix}_release\")\n        set(tbb_debug_dir \"${tbb_build_dir}/${tbb_build_prefix}_debug\")\n\n        file(TO_CMAKE_PATH \"${tbb_release_dir}\" tbb_release_dir)\n        file(TO_CMAKE_PATH \"${tbb_debug_dir}\" tbb_debug_dir)\n\n        set(${tbb_GBPFMA_RELEASE_DIR} ${tbb_release_dir} PARENT_SCOPE)\n        set(${tbb_GBPFMA_DEBUG_DIR} ${tbb_debug_dir} PARENT_SCOPE)\n    endfunction()\n\n    # -------------------- #\n    # Function entry point #\n    # -------------------- #\n    set(oneValueArgs TBB_ROOT CONFIG_DIR)\n    set(multiValueArgs MAKE_ARGS)\n    cmake_parse_arguments(tbb_build \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    if (NOT EXISTS \"${tbb_build_TBB_ROOT}/Makefile\" OR NOT EXISTS \"${tbb_build_TBB_ROOT}/src\")\n        message(STATUS \"Intel TBB can not be built: Makefile or src directory was not found in ${tbb_build_TBB_ROOT}\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    set(make_tool_name make)\n    if (CMAKE_SYSTEM_NAME MATCHES \"Windows\")\n        set(make_tool_name gmake)\n    elseif (CMAKE_SYSTEM_NAME MATCHES \"Android\")\n        set(make_tool_name ndk-build)\n    endif()\n\n    find_program(TBB_MAKE_TOOL ${make_tool_name} DOC \"Make-tool to build Intel TBB.\")\n    mark_as_advanced(TBB_MAKE_TOOL)\n\n    if (NOT TBB_MAKE_TOOL)\n        message(STATUS \"Intel TBB can not be built: required make-tool (${make_tool_name}) was not found\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    tbb_get_make_args(USER_DEFINED_ARGS ${tbb_build_MAKE_ARGS} RESULT tbb_make_args)\n\n    set(tbb_build_cmd ${TBB_MAKE_TOOL} ${tbb_make_args})\n\n    string(REPLACE \";\" \" \" tbb_build_cmd_str \"${tbb_build_cmd}\")\n    message(STATUS \"Building Intel TBB: ${tbb_build_cmd_str}\")\n    execute_process(COMMAND ${tbb_build_cmd}\n                    WORKING_DIRECTORY ${tbb_build_TBB_ROOT}\n                    RESULT_VARIABLE tbb_build_result\n                    ERROR_VARIABLE tbb_build_error_output\n                    OUTPUT_QUIET)\n\n    if (NOT tbb_build_result EQUAL 0)\n        message(STATUS \"Building is unsuccessful (${tbb_build_result}): ${tbb_build_error_output}\")\n        set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    tbb_get_build_paths_from_make_args(MAKE_ARGS ${tbb_make_args}\n                                       RELEASE_DIR tbb_release_dir\n                                       DEBUG_DIR tbb_debug_dir)\n\n    include(${_tbb_cmake_module_path}/TBBMakeConfig.cmake)\n    tbb_make_config(TBB_ROOT ${tbb_build_TBB_ROOT}\n                    SYSTEM_NAME ${CMAKE_SYSTEM_NAME}\n                    CONFIG_DIR tbb_config_dir\n                    CONFIG_FOR_SOURCE\n                    TBB_RELEASE_DIR ${tbb_release_dir}\n                    TBB_DEBUG_DIR ${tbb_debug_dir})\n\n    set(${tbb_build_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/TBBConfig.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.\n# Handling of TBB_VERSION is in TBBConfigVersion.cmake.\n\nif (NOT TBB_FIND_COMPONENTS)\n    set(TBB_FIND_COMPONENTS \"tbb;tbbmalloc;tbbmalloc_proxy\")\n    foreach (_tbb_component ${TBB_FIND_COMPONENTS})\n        set(TBB_FIND_REQUIRED_${_tbb_component} 1)\n    endforeach()\nendif()\n\n# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc\nlist(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)\nif (NOT _tbbmalloc_proxy_ix EQUAL -1)\n    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)\n    if (_tbbmalloc_ix EQUAL -1)\n        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)\n        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})\n    endif()\nendif()\n\nset(TBB_INTERFACE_VERSION 10006)\n\nget_filename_component(_tbb_root \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_tbb_root \"${_tbb_root}\" PATH)\n\nset(_tbb_x32_subdir ia32)\nset(_tbb_x64_subdir intel64)\n\nif (CMAKE_SIZEOF_VOID_P EQUAL 8)\n    set(_tbb_arch_subdir ${_tbb_x64_subdir})\nelse()\n    set(_tbb_arch_subdir ${_tbb_x32_subdir})\nendif()\n\nif (CMAKE_CXX_COMPILER_LOADED)\n    set(_tbb_compiler_id ${CMAKE_CXX_COMPILER_ID})\n    set(_tbb_compiler_ver ${CMAKE_CXX_COMPILER_VERSION})\nelseif (CMAKE_C_COMPILER_LOADED)\n    set(_tbb_compiler_id ${CMAKE_C_COMPILER_ID})\n    set(_tbb_compiler_ver ${CMAKE_C_COMPILER_VERSION})\nendif()\n\n# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory.\nif (NOT _tbb_compiler_id STREQUAL \"GNU\")\n    execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET)\n    string(REGEX REPLACE \".*gcc.*([0-9]+\\\\.[0-9]+)\\\\.[0-9]+.*\" \"\\\\1\" _tbb_compiler_ver \"${_tbb_gcc_ver_output}\")\n    if (NOT _tbb_compiler_ver)\n        message(FATAL_ERROR \"This Intel TBB package is intended to be used only environment with available 'gcc'\")\n    endif()\n    unset(_tbb_gcc_ver_output)\nendif()\n\nset(_tbb_compiler_subdir gcc4.1)\nforeach (_tbb_gcc_version 4.1 4.4 4.7)\n    if (NOT _tbb_compiler_ver VERSION_LESS ${_tbb_gcc_version})\n        set(_tbb_compiler_subdir gcc${_tbb_gcc_version})\n    endif()\nendforeach()\n\nunset(_tbb_compiler_id)\nunset(_tbb_compiler_ver)\n\nget_filename_component(_tbb_lib_path \"${_tbb_root}/lib/${_tbb_arch_subdir}/${_tbb_compiler_subdir}\" ABSOLUTE)\n\nforeach (_tbb_component ${TBB_FIND_COMPONENTS})\n    set(_tbb_release_lib \"${_tbb_lib_path}/lib${_tbb_component}.so.2\")\n    set(_tbb_debug_lib \"${_tbb_lib_path}/lib${_tbb_component}_debug.so.2\")\n\n    if (EXISTS \"${_tbb_release_lib}\" AND EXISTS \"${_tbb_debug_lib}\")\n        add_library(TBB::${_tbb_component} SHARED IMPORTED)\n        set_target_properties(TBB::${_tbb_component} PROPERTIES\n                              IMPORTED_CONFIGURATIONS \"RELEASE;DEBUG\"\n                              IMPORTED_LOCATION_RELEASE     \"${_tbb_release_lib}\"\n                              IMPORTED_LOCATION_DEBUG       \"${_tbb_debug_lib}\"\n                              INTERFACE_INCLUDE_DIRECTORIES \"${_tbb_root}/include\")\n\n        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc\n        if (_tbb_component STREQUAL tbbmalloc_proxy)\n            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)\n        endif()\n\n        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})\n        set(TBB_${_tbb_component}_FOUND 1)\n    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})\n        message(FATAL_ERROR \"Missed required Intel TBB component: ${_tbb_component}\")\n    endif()\nendforeach()\n\nunset(_tbb_x32_subdir)\nunset(_tbb_x64_subdir)\nunset(_tbb_arch_subdir)\nunset(_tbb_compiler_subdir)\nunset(_tbbmalloc_proxy_ix)\nunset(_tbbmalloc_ix)\nunset(_tbb_lib_path)\nunset(_tbb_release_lib)\nunset(_tbb_debug_lib)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/TBBConfigVersion.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nset(PACKAGE_VERSION 2018.0)\n\nif (\"${PACKAGE_VERSION}\" VERSION_LESS \"${PACKAGE_FIND_VERSION}\")\n    set(PACKAGE_VERSION_COMPATIBLE FALSE)\nelse()\n    set(PACKAGE_VERSION_COMPATIBLE TRUE)\n    if (\"${PACKAGE_VERSION}\" VERSION_EQUAL \"${PACKAGE_FIND_VERSION}\")\n        set(PACKAGE_VERSION_EXACT TRUE)\n    endif()\nendif()\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/TBBGet.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\n##\n# Downloads file.\n#\n# Parameters:\n#  URL     <url>      - URL to download data from;\n#  SAVE_AS <filename> - filename there to save downloaded data;\n#  INFO    <string>   - text description of content to be downloaded;\n#                       will be printed as message in format is \"Downloading <INFO>: <URL>;\n#  FORCE              - option to delete local file from SAVE_AS if it exists;\n#\nfunction(_tbb_download_file)\n    set(options FORCE)\n    set(oneValueArgs URL RELEASE SAVE_AS INFO)\n    cmake_parse_arguments(tbb_df \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    if (tbb_df_FORCE AND EXISTS \"${tbb_df_SAVE_AS}\")\n        file(REMOVE ${tbb_df_SAVE_AS})\n    endif()\n\n    if (NOT EXISTS \"${tbb_df_SAVE_AS}\")\n        set(_show_progress)\n        if (TBB_DOWNLOADING_PROGRESS)\n            set(_show_progress SHOW_PROGRESS)\n        endif()\n\n        message(STATUS \"Downloading ${tbb_df_INFO}: ${tbb_df_URL}\")\n        file(DOWNLOAD ${tbb_df_URL} ${tbb_df_SAVE_AS} ${_show_progress} STATUS download_status)\n\n        list(GET download_status 0 download_status_num)\n        if (NOT download_status_num EQUAL 0)\n            message(STATUS \"Unsuccessful downloading: ${download_status}\")\n            file(REMOVE ${tbb_df_SAVE_AS})\n            return()\n        endif()\n    else()\n        message(STATUS \"Needed file was found locally ${tbb_df_SAVE_AS}. Remove it if you still want to download a new one\")\n    endif()\nendfunction()\n\n##\n# Checks if specified Intel TBB release is available on GitHub.\n#\n# tbb_check_git_release(<release> <result>)\n# Parameters:\n#  <release_tag> - release to be checked;\n#  <result>  - store result (TRUE/FALSE).\n#\nfunction(_tbb_check_git_release_tag _tbb_release_tag _tbb_release_tag_avail)\n    if (_tbb_release_tag STREQUAL LATEST)\n        set(${_tbb_release_tag_avail} TRUE PARENT_SCOPE)\n        return()\n    endif()\n\n    set(tbb_releases_file \"${CMAKE_CURRENT_BINARY_DIR}/tbb_releases.json\")\n\n    _tbb_download_file(URL     \"${tbb_github_api}/releases\"\n                       SAVE_AS ${tbb_releases_file}\n                       INFO    \"information from GitHub about Intel TBB releases\"\n                       FORCE)\n\n    if (NOT EXISTS \"${tbb_releases_file}\")\n        set(${_tbb_release_tag_avail} FALSE PARENT_SCOPE)\n        return()\n    endif()\n\n    file(READ ${tbb_releases_file} tbb_releases)\n\n    string(REPLACE \"\\\"\" \"\" tbb_releases ${tbb_releases})\n    string(REGEX MATCHALL \"tag_name: *([A-Za-z0-9_\\\\.]+)\" tbb_releases ${tbb_releases})\n\n    set(_release_available FALSE)\n    foreach(tbb_rel ${tbb_releases})\n        string(REGEX REPLACE \"tag_name: *\" \"\" tbb_rel_cut ${tbb_rel})\n        list(REMOVE_ITEM tbb_releases ${tbb_rel})\n        list(APPEND tbb_releases ${tbb_rel_cut})\n        if (_tbb_release_tag STREQUAL tbb_rel_cut)\n            set(_release_available TRUE)\n            break()\n        endif()\n    endforeach()\n\n    if (NOT _release_available)\n        string(REPLACE \";\" \", \" tbb_releases_str \"${tbb_releases}\")\n        message(STATUS \"Requested release tag ${_tbb_release_tag} is not available. Available Intel TBB release tags: ${tbb_releases_str}\")\n    endif()\n\n    set(${_tbb_release_tag_avail} ${_release_available} PARENT_SCOPE)\nendfunction()\n\n##\n# Compares two Intel TBB releases and provides result\n# TRUE if the first release is less than the second, FALSE otherwise.\n#\n# tbb_is_release_less(<rel1> <rel2> <result>)\n#\nfunction(_tbb_is_release_less rel1 rel2 result)\n    # Convert release to numeric representation to compare it using \"if\" with VERSION_LESS.\n    string(REGEX REPLACE \"[A-Za-z]\" \"\" rel1 \"${rel1}\")\n    string(REPLACE \"_\" \".\" rel1 \"${rel1}\")\n    string(REGEX REPLACE \"[A-Za-z]\" \"\" rel2 \"${rel2}\")\n    string(REPLACE \"_\" \".\" rel2 \"${rel2}\")\n\n    if (${rel1} VERSION_LESS ${rel2})\n        set(${result} TRUE PARENT_SCOPE)\n        return()\n    endif()\n\n    set(${result} FALSE PARENT_SCOPE)\nendfunction()\n\n##\n# Finds exact URL to download Intel TBB basing on provided parameters.\n#\n# Usage:\n#  _tbb_get_url(URL <var_to_save_url> RELEASE_TAG <release_tag|LATEST> OS <os> [SOURCE_CODE])\n#\nfunction(_tbb_get_url)\n    set(oneValueArgs URL RELEASE_TAG OS)\n    set(options SOURCE_CODE)\n    cmake_parse_arguments(tbb_get_url \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_github_api \"https://api.github.com/repos/01org/tbb\")\n\n    _tbb_check_git_release_tag(${tbb_get_url_RELEASE_TAG} tbb_release_available)\n    if (NOT tbb_release_available)\n        set(${tbb_download_FULL_PATH} ${tbb_download_FULL_PATH}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)\n        set(tbb_rel_info_api_url \"${tbb_github_api}/releases/latest\")\n    else()\n        set(tbb_rel_info_api_url \"${tbb_github_api}/releases/tags/${tbb_get_url_RELEASE_TAG}\")\n    endif()\n\n    set(tbb_release_info_file \"${CMAKE_CURRENT_BINARY_DIR}/tbb_${tbb_get_url_RELEASE_TAG}_info.json\")\n\n    _tbb_download_file(URL     ${tbb_rel_info_api_url}\n                       SAVE_AS ${tbb_release_info_file}\n                       INFO    \"information from GitHub about packages for Intel TBB ${tbb_get_url_RELEASE_TAG}\"\n                       FORCE)\n\n    if (NOT EXISTS \"${tbb_release_info_file}\")\n        set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    file(STRINGS ${tbb_release_info_file} tbb_release_info)\n\n    if (tbb_get_url_SOURCE_CODE)\n        # Find name of the latest release to get link to source archive.\n        if (tbb_get_url_RELEASE_TAG STREQUAL LATEST)\n            string(REPLACE \"\\\"\" \"\" tbb_release_info ${tbb_release_info})\n            string(REGEX REPLACE \".*tag_name: *([A-Za-z0-9_\\\\.]+).*\" \"\\\\1\" tbb_get_url_RELEASE_TAG \"${tbb_release_info}\")\n        endif()\n\n        set(${tbb_get_url_URL} \"https://github.com/01org/tbb/archive/${tbb_get_url_RELEASE_TAG}.tar.gz\" PARENT_SCOPE)\n    else()\n        if (tbb_get_url_OS MATCHES \"Linux\")\n            set(tbb_lib_archive_suffix lin.tgz)\n        elseif (tbb_get_url_OS MATCHES \"Windows\")\n            set(tbb_lib_archive_suffix win.zip)\n        elseif (tbb_get_url_OS MATCHES \"Darwin\")\n            set(tbb_lib_archive_suffix mac.tgz)\n\n            # Since 2017_U4 release archive for Apple has suffix \"mac.tgz\" instead of \"osx.tgz\".\n            if (NOT tbb_get_url_RELEASE_TAG STREQUAL \"LATEST\")\n                _tbb_is_release_less(${tbb_get_url_RELEASE_TAG} 2017_U4 release_less)\n                if (release_less)\n                    set(tbb_lib_archive_suffix osx.tgz)\n                endif()\n            endif()\n        elseif (tbb_get_url_OS MATCHES \"Android\")\n            set(tbb_lib_archive_suffix and.tgz)\n        else()\n            message(STATUS \"Currently prebuilt Intel TBB is not available for your OS (${tbb_get_url_OS})\")\n            set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE)\n            return()\n        endif()\n\n        string(REGEX REPLACE \".*(https.*oss_${tbb_lib_archive_suffix}).*\" \"\\\\1\" tbb_bin_url \"${tbb_release_info}\")\n\n        set(${tbb_get_url_URL} ${tbb_bin_url} PARENT_SCOPE)\n    endif()\nendfunction()\n\nfunction(tbb_get)\n    set(oneValueArgs RELEASE_TAG SYSTEM_NAME SAVE_TO TBB_ROOT CONFIG_DIR)\n    set(options SOURCE_CODE)\n    cmake_parse_arguments(tbb_get \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_os ${CMAKE_SYSTEM_NAME})\n    if (tbb_get_SYSTEM_NAME)\n        set(tbb_os ${tbb_get_SYSTEM_NAME})\n    endif()\n\n    set(tbb_release_tag LATEST)\n    if (tbb_get_RELEASE_TAG)\n        set(tbb_release_tag ${tbb_get_RELEASE_TAG})\n    endif()\n\n    set(tbb_save_to ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded)\n    if (tbb_get_SAVE_TO)\n        set(tbb_save_to ${tbb_get_SAVE_TO})\n    endif()\n\n    if (tbb_get_SOURCE_CODE)\n        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os} SOURCE_CODE)\n    else()\n        _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os})\n    endif()\n\n    if (NOT tbb_url)\n        message(STATUS \"URL to download Intel TBB has not been found\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(filename ${tbb_url} NAME)\n    set(local_file \"${CMAKE_CURRENT_BINARY_DIR}/${filename}\")\n\n    _tbb_download_file(URL     ${tbb_url}\n                       SAVE_AS ${local_file}\n                       INFO    \"Intel TBB library\")\n\n    if (NOT EXISTS \"${local_file}\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(subdir_name ${filename} NAME_WE)\n    file(MAKE_DIRECTORY ${tbb_save_to}/${subdir_name})\n    if (NOT EXISTS \"${tbb_save_to}/${subdir_name}\")\n        message(STATUS \"${tbb_save_to}/${subdir_name} can not be created\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    message(STATUS \"Unpacking ${local_file} to ${tbb_save_to}/${subdir_name}\")\n    execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${local_file}\n                    WORKING_DIRECTORY ${tbb_save_to}/${subdir_name}\n                    RESULT_VARIABLE unpacking_result)\n\n    if (NOT unpacking_result EQUAL 0)\n        message(STATUS \"Unsuccessful unpacking: ${unpacking_result}\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    file(GLOB_RECURSE tbb_h ${tbb_save_to}/${subdir_name}/*/include/tbb/tbb.h)\n    list(GET tbb_h 0 tbb_h)\n\n    if (NOT EXISTS \"${tbb_h}\")\n        message(STATUS \"tbb/tbb.h has not been found in the downloaded package\")\n        set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE)\n        return()\n    endif()\n\n    get_filename_component(tbb_root \"${tbb_h}\" PATH)\n    get_filename_component(tbb_root \"${tbb_root}\" PATH)\n    get_filename_component(tbb_root \"${tbb_root}\" PATH)\n\n    if (NOT tbb_get_SOURCE_CODE)\n        set(tbb_config_dir ${tbb_root}/cmake)\n\n        if (NOT EXISTS \"${tbb_config_dir}\")\n            tbb_make_config(TBB_ROOT ${tbb_root} CONFIG_DIR tbb_config_dir)\n        endif()\n\n        set(${tbb_get_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\n    endif()\n\n    set(${tbb_get_TBB_ROOT} ${tbb_root} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/TBBMakeConfig.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n#\n# Usage:\n#   include(TBBMakeConfig.cmake)\n#   tbb_make_config(TBB_ROOT <tbb_root> SYSTEM_NAME <system_name> CONFIG_DIR <var_to_store_config_dir> [SAVE_TO] [CONFIG_FOR_SOURCE TBB_RELEASE_DIR <tbb_release_dir> TBB_DEBUG_DIR <tbb_debug_dir>])\n#\n\ninclude(CMakeParseArguments)\n\n# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions,\n# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html\nset(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR})\n\nfunction(tbb_make_config)\n    set(oneValueArgs TBB_ROOT SYSTEM_NAME CONFIG_DIR SAVE_TO TBB_RELEASE_DIR TBB_DEBUG_DIR)\n    set(options CONFIG_FOR_SOURCE)\n    cmake_parse_arguments(tbb_MK \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN})\n\n    set(tbb_system_name ${CMAKE_SYSTEM_NAME})\n    if (tbb_MK_SYSTEM_NAME)\n        set(tbb_system_name ${tbb_MK_SYSTEM_NAME})\n    endif()\n\n    set(tbb_config_dir ${tbb_MK_TBB_ROOT}/cmake)\n    if (tbb_MK_SAVE_TO)\n        set(tbb_config_dir ${tbb_MK_SAVE_TO})\n    endif()\n\n    file(MAKE_DIRECTORY ${tbb_config_dir})\n\n    set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy)\n\n    if (tbb_MK_CONFIG_FOR_SOURCE)\n        set(TBB_RELEASE_DIR ${tbb_MK_TBB_RELEASE_DIR})\n        set(TBB_DEBUG_DIR ${tbb_MK_TBB_DEBUG_DIR})\n    endif()\n\n    if (tbb_system_name STREQUAL \"Linux\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \"ia32\")\n        set(TBB_X64_SUBDIR \"intel64\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"so.2\")\n\n        # Note: multiline variable\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"if (CMAKE_CXX_COMPILER_LOADED)\n    set(_tbb_compiler_id \\${CMAKE_CXX_COMPILER_ID})\n    set(_tbb_compiler_ver \\${CMAKE_CXX_COMPILER_VERSION})\nelseif (CMAKE_C_COMPILER_LOADED)\n    set(_tbb_compiler_id \\${CMAKE_C_COMPILER_ID})\n    set(_tbb_compiler_ver \\${CMAKE_C_COMPILER_VERSION})\nendif()\n\n# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory.\nif (NOT _tbb_compiler_id STREQUAL \\\"GNU\\\")\n    execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET)\n    string(REGEX REPLACE \\\".*gcc.*([0-9]+\\\\\\\\.[0-9]+)\\\\\\\\.[0-9]+.*\\\" \\\"\\\\\\\\1\\\" _tbb_compiler_ver \\\"\\${_tbb_gcc_ver_output}\\\")\n    if (NOT _tbb_compiler_ver)\n        message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only environment with available 'gcc'\\\")\n    endif()\n    unset(_tbb_gcc_ver_output)\nendif()\n\nset(_tbb_compiler_subdir gcc4.1)\nforeach (_tbb_gcc_version 4.1 4.4 4.7)\n    if (NOT _tbb_compiler_ver VERSION_LESS \\${_tbb_gcc_version})\n        set(_tbb_compiler_subdir gcc\\${_tbb_gcc_version})\n    endif()\nendforeach()\n\nunset(_tbb_compiler_id)\nunset(_tbb_compiler_ver)\")\n\n    elseif (tbb_system_name STREQUAL \"Windows\")\n        set(TBB_SHARED_LIB_DIR \"bin\")\n        set(TBB_X32_SUBDIR \"ia32\")\n        set(TBB_X64_SUBDIR \"intel64\")\n        set(TBB_LIB_PREFIX \"\")\n        set(TBB_LIB_EXT \"dll\")\n\n        # Note: multiline variable\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"if (NOT MSVC)\n    message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only in the project with MSVC\\\")\nendif()\n\n# Detect the most relevant MSVC subdirectory\nset(_tbb_msvc_1700_subdir vc11)\nset(_tbb_msvc_1800_subdir vc12)\nset(_tbb_msvc_1900_subdir vc14)\nset(_tbb_msvc_ver \\${MSVC_VERSION})\nif (MSVC_VERSION VERSION_LESS 1700)\n    message(FATAL_ERROR \\\"This Intel TBB package is intended to be used only in the project with MSVC version 1700 (vc11) or higher\\\")\nelseif (MSVC_VERSION VERSION_GREATER 1900)\n    set(_tbb_msvc_ver 1900)\nendif()\nset(_tbb_compiler_subdir \\${_tbb_msvc_\\${_tbb_msvc_ver}_subdir})\nunset(_tbb_msvc_1700_subdir)\nunset(_tbb_msvc_1800_subdir)\nunset(_tbb_msvc_1900_subdir)\n\nif (WINDOWS_STORE)\n    set(_tbb_compiler_subdir \\${_tbb_compiler_subdir}_ui)\nendif()\")\n\n        if (tbb_MK_CONFIG_FOR_SOURCE)\n            set(TBB_IMPLIB_RELEASE \"\\nIMPORTED_IMPLIB_RELEASE \\\"${tbb_MK_TBB_RELEASE_DIR}/\\${_tbb_component}.lib\\\"\")\n            set(TBB_IMPLIB_DEBUG \"\\nIMPORTED_IMPLIB_DEBUG \\\"${tbb_MK_TBB_DEBUG_DIR}/\\${_tbb_component}_debug.lib\\\"\")\n        else()\n            # Note: multiline variable\n            set(TBB_IMPLIB \"\n                              IMPORTED_IMPLIB_RELEASE       \\\"\\${_tbb_root}/lib/\\${_tbb_arch_subdir}/\\${_tbb_compiler_subdir}/\\${_tbb_component}.lib\\\"\n                              IMPORTED_IMPLIB_DEBUG         \\\"\\${_tbb_root}/lib/\\${_tbb_arch_subdir}/\\${_tbb_compiler_subdir}/\\${_tbb_component}_debug.lib\\\"\")\n        endif()\n\n        # Note: multiline variable\n        # tbb/internal/_tbb_windef.h (included via tbb/tbb_stddef.h) does implicit linkage of some .lib files, use a special define to avoid it\n        set(TBB_COMPILE_DEFINITIONS \"\n                              INTERFACE_COMPILE_DEFINITIONS \\\"__TBB_NO_IMPLICIT_LINKAGE=1\\\"\")\n    elseif (tbb_system_name STREQUAL \"Darwin\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \".\")\n        set(TBB_X64_SUBDIR \".\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"dylib\")\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"set(_tbb_compiler_subdir .)\")\n    elseif (tbb_system_name STREQUAL \"Android\")\n        set(TBB_SHARED_LIB_DIR \"lib\")\n        set(TBB_X32_SUBDIR \".\")\n        set(TBB_X64_SUBDIR \"x86_64\")\n        set(TBB_LIB_PREFIX \"lib\")\n        set(TBB_LIB_EXT \"so\")\n        set(TBB_CHOOSE_COMPILER_SUBDIR \"set(_tbb_compiler_subdir .)\")\n    else()\n        message(FATAL_ERROR \"Unsupported OS name: ${tbb_system_name}\")\n    endif()\n\n    file(READ \"${tbb_MK_TBB_ROOT}/include/tbb/tbb_stddef.h\" _tbb_stddef)\n    string(REGEX REPLACE \".*#define TBB_VERSION_MAJOR ([0-9]+).*\" \"\\\\1\" _tbb_ver_major \"${_tbb_stddef}\")\n    string(REGEX REPLACE \".*#define TBB_VERSION_MINOR ([0-9]+).*\" \"\\\\1\" _tbb_ver_minor \"${_tbb_stddef}\")\n    string(REGEX REPLACE \".*#define TBB_INTERFACE_VERSION ([0-9]+).*\" \"\\\\1\" TBB_INTERFACE_VERSION \"${_tbb_stddef}\")\n    set(TBB_VERSION \"${_tbb_ver_major}.${_tbb_ver_minor}\")\n\n    if (tbb_MK_CONFIG_FOR_SOURCE)\n        set(_tbb_config_template TBBConfigForSource.cmake.in)\n    else()\n        set(_tbb_config_template TBBConfig.cmake.in)\n    endif()\n    configure_file(${_tbb_cmake_module_path}/templates/${_tbb_config_template}   ${tbb_config_dir}/TBBConfig.cmake @ONLY)\n    configure_file(${_tbb_cmake_module_path}/templates/TBBConfigVersion.cmake.in ${tbb_config_dir}/TBBConfigVersion.cmake @ONLY)\n\n    set(${tbb_MK_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/tbb_config_generator.cmake",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nfunction(tbb_conf_gen_print_help)\n    message(\"Usage: cmake -DTBB_ROOT=<tbb_root> -DTBB_OS=Linux|Windows|Darwin [-DSAVE_TO=<path>] -P tbb_config_generator.cmake\")\nendfunction()\n\nif (NOT DEFINED TBB_ROOT)\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"Required parameter TBB_ROOT is not defined\")\nendif()\n\nif (NOT EXISTS \"${TBB_ROOT}\")\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"TBB_ROOT=${TBB_ROOT} does not exist\")\nendif()\n\nif (NOT DEFINED TBB_OS)\n    tbb_conf_gen_print_help()\n    message(FATAL_ERROR \"Required parameter TBB_OS is not defined\")\nendif()\n\nif (DEFINED SAVE_TO)\n    set(tbb_conf_gen_save_to_param SAVE_TO ${SAVE_TO})\nendif()\n\ninclude(${CMAKE_CURRENT_LIST_DIR}/TBBMakeConfig.cmake)\ntbb_make_config(TBB_ROOT ${TBB_ROOT} CONFIG_DIR tbb_config_dir SYSTEM_NAME ${TBB_OS} ${tbb_conf_gen_save_to_param})\n\nmessage(STATUS \"TBBConfig files were created in ${tbb_config_dir}\")\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/templates/TBBConfig.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.\n# Handling of TBB_VERSION is in TBBConfigVersion.cmake.\n\nif (NOT TBB_FIND_COMPONENTS)\n    set(TBB_FIND_COMPONENTS \"@TBB_DEFAULT_COMPONENTS@\")\n    foreach (_tbb_component ${TBB_FIND_COMPONENTS})\n        set(TBB_FIND_REQUIRED_${_tbb_component} 1)\n    endforeach()\nendif()\n\n# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc\nlist(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)\nif (NOT _tbbmalloc_proxy_ix EQUAL -1)\n    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)\n    if (_tbbmalloc_ix EQUAL -1)\n        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)\n        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})\n    endif()\nendif()\n\nset(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)\n\nget_filename_component(_tbb_root \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_tbb_root \"${_tbb_root}\" PATH)\n\nset(_tbb_x32_subdir @TBB_X32_SUBDIR@)\nset(_tbb_x64_subdir @TBB_X64_SUBDIR@)\n\nif (CMAKE_SIZEOF_VOID_P EQUAL 8)\n    set(_tbb_arch_subdir ${_tbb_x64_subdir})\nelse()\n    set(_tbb_arch_subdir ${_tbb_x32_subdir})\nendif()\n\n@TBB_CHOOSE_COMPILER_SUBDIR@\n\nget_filename_component(_tbb_lib_path \"${_tbb_root}/@TBB_SHARED_LIB_DIR@/${_tbb_arch_subdir}/${_tbb_compiler_subdir}\" ABSOLUTE)\n\nforeach (_tbb_component ${TBB_FIND_COMPONENTS})\n    set(_tbb_release_lib \"${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@\")\n    set(_tbb_debug_lib \"${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@\")\n\n    if (EXISTS \"${_tbb_release_lib}\" AND EXISTS \"${_tbb_debug_lib}\")\n        add_library(TBB::${_tbb_component} SHARED IMPORTED)\n        set_target_properties(TBB::${_tbb_component} PROPERTIES\n                              IMPORTED_CONFIGURATIONS \"RELEASE;DEBUG\"\n                              IMPORTED_LOCATION_RELEASE     \"${_tbb_release_lib}\"\n                              IMPORTED_LOCATION_DEBUG       \"${_tbb_debug_lib}\"\n                              INTERFACE_INCLUDE_DIRECTORIES \"${_tbb_root}/include\"@TBB_IMPLIB@@TBB_COMPILE_DEFINITIONS@)\n\n        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc\n        if (_tbb_component STREQUAL tbbmalloc_proxy)\n            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)\n        endif()\n\n        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})\n        set(TBB_${_tbb_component}_FOUND 1)\n    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})\n        message(FATAL_ERROR \"Missed required Intel TBB component: ${_tbb_component}\")\n    endif()\nendforeach()\n\nunset(_tbb_x32_subdir)\nunset(_tbb_x64_subdir)\nunset(_tbb_arch_subdir)\nunset(_tbb_compiler_subdir)\nunset(_tbbmalloc_proxy_ix)\nunset(_tbbmalloc_ix)\nunset(_tbb_lib_path)\nunset(_tbb_release_lib)\nunset(_tbb_debug_lib)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/templates/TBBConfigForSource.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# TBB_FOUND should not be set explicitly. It is defined automatically by CMake.\n# Handling of TBB_VERSION is in TBBConfigVersion.cmake.\n\nif (NOT TBB_FIND_COMPONENTS)\n    set(TBB_FIND_COMPONENTS \"@TBB_DEFAULT_COMPONENTS@\")\n    foreach (_tbb_component ${TBB_FIND_COMPONENTS})\n        set(TBB_FIND_REQUIRED_${_tbb_component} 1)\n    endforeach()\nendif()\n\n# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc\nlist(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix)\nif (NOT _tbbmalloc_proxy_ix EQUAL -1)\n    list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix)\n    if (_tbbmalloc_ix EQUAL -1)\n        list(APPEND TBB_FIND_COMPONENTS tbbmalloc)\n        set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy})\n    endif()\nendif()\n\nset(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@)\n\nget_filename_component(_tbb_root \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_tbb_root \"${_tbb_root}\" PATH)\n\nforeach (_tbb_component ${TBB_FIND_COMPONENTS})\n    set(_tbb_release_lib \"@TBB_RELEASE_DIR@/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@\")\n    set(_tbb_debug_lib \"@TBB_DEBUG_DIR@/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@\")\n\n    if (EXISTS \"${_tbb_release_lib}\" OR EXISTS \"${_tbb_debug_lib}\")\n        add_library(TBB::${_tbb_component} SHARED IMPORTED)\n        set_target_properties(TBB::${_tbb_component} PROPERTIES\n                              INTERFACE_INCLUDE_DIRECTORIES \"${_tbb_root}/include\"@TBB_COMPILE_DEFINITIONS@)\n\n\n        if (EXISTS \"${_tbb_release_lib}\")\n            set_target_properties(TBB::${_tbb_component} PROPERTIES\n                                  IMPORTED_LOCATION_RELEASE \"${_tbb_release_lib}\"@TBB_IMPLIB_RELEASE@)\n            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)\n        endif()\n\n        if (EXISTS \"${_tbb_debug_lib}\")\n            set_target_properties(TBB::${_tbb_component} PROPERTIES\n                                  IMPORTED_LOCATION_DEBUG \"${_tbb_debug_lib}\"@TBB_IMPLIB_DEBUG@)\n            set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)\n        endif()\n\n        # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc\n        if (_tbb_component STREQUAL tbbmalloc_proxy)\n            set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc)\n        endif()\n\n        list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component})\n        set(TBB_${_tbb_component}_FOUND 1)\n    elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component})\n        message(FATAL_ERROR \"Missed required Intel TBB component: ${_tbb_component}\")\n    endif()\nendforeach()\n\nunset(_tbbmalloc_proxy_ix)\nunset(_tbbmalloc_ix)\nunset(_tbb_lib_path)\nunset(_tbb_release_lib)\nunset(_tbb_debug_lib)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/cmake/templates/TBBConfigVersion.cmake.in",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\nset(PACKAGE_VERSION @TBB_VERSION@)\n\nif (\"${PACKAGE_VERSION}\" VERSION_LESS \"${PACKAGE_FIND_VERSION}\")\n    set(PACKAGE_VERSION_COMPATIBLE FALSE)\nelse()\n    set(PACKAGE_VERSION_COMPATIBLE TRUE)\n    if (\"${PACKAGE_VERSION}\" VERSION_EQUAL \"${PACKAGE_FIND_VERSION}\")\n        set(PACKAGE_VERSION_EXACT TRUE)\n    endif()\nendif()\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/Release_Notes.txt",
    "content": "------------------------------------------------------------------------\nIntel(R) Threading Building Blocks - Release Notes\n                   Version 2018\n------------------------------------------------------------------------\n\n\nSystem Requirements\n-------------------\n\nIntel(R) Threading Building Blocks (Intel(R) TBB) is available\ncommercially (see http://software.intel.com/en-us/intel-tbb) as a\nbinary distribution, and in open source, in both source and binary\nforms (see http://threadingbuildingblocks.org).\n\nWhen built from source, Intel(R) TBB is intended to be highly portable\nand so supports a wide variety of operating systems and platforms (see\nhttp://threadingbuildingblocks.org for more details).\n\nBinary distributions, including commercial distributions, are validated\nand officially supported for the hardware, software, operating systems\nand compilers listed here.\n\nHardware - Recommended\n\n    Microsoft* Windows* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    Linux* Systems\n        Intel(R) Core(TM) processor family\n        Intel(R) Xeon(R) processor family\n        Intel(R) Xeon Phi(TM) processor family\n    macOS* Systems\n        Intel(R) Core(TM) processor family\n    Android* Systems\n        Intel(R) Atom(TM) processor family\n\nHardware - Supported\n\n    Intel(R) Pentium(R) 4 processor family\n    Intel(R) Xeon Phi(TM) coprocessor\n    Intel(R) Atom(TM) processor family\n    Non Intel(R) processors compatible with the above processors\n\nSoftware - Minimum Requirements\n\n    Supported operating system (see below)\n    Supported compiler (see below)\n\nSoftware - Recommended\n\n    Intel(R) Parallel Studio XE 2017, 2018\n    Intel(R) System Studio 2017, 2018\n\nSoftware - Supported Operating Systems\n\n    Systems with Microsoft* Windows* operating systems\n        Microsoft* Windows* 10\n        Microsoft* Windows* 8.1\n        Microsoft* Windows* 7 SP1\n        Microsoft* Windows* Server 2016\n        Microsoft* Windows* Server 2012 R2\n        Microsoft* Windows* Server 2008 R2 SP1\n        Windows* Embedded 10\n        Windows* Embedded 8.1\n    Systems with Linux* operating systems\n        CentOS 7.1\n        Debian* 8, 9\n        Fedora* 24, 25, 26\n        Intel(R) Cluster Ready\n        Red Hat* Enterprise Linux* 6, 7\n        SuSE* Linux* Enterprise Server 11, 12\n        Ubuntu* 14.04 LTS, 16.04 LTS, 17.04\n        WindRiver* Linux 8, 9\n        Yocto 2.2, 2.3\n    Systems with OS X* or macOS* operating systems\n        OS X* 10.10, 10.11\n        macOS* 10.12, 10.13\n    Systems with Android* operating systems\n        Android* 5.x, 6.x, 7.x, 8.x\n\nSoftware - Supported Compilers\n\n    Intel(R) C++ Compiler 16, 17 and 18 version\n    Microsoft* Visual C++ 12.0 (Microsoft* Visual Studio* 2013,\n        Windows* OS only)\n    Microsoft* Visual C++ 14.0 (Microsoft* Visual Studio* 2015,\n        Windows* OS only)\n    Microsoft* Visual C++ 14.1 (Microsoft* Visual Studio* 2017,\n        Windows* OS only)\n    Microsoft* Windows* Software Development Kit for Windows* 8.1\n    Microsoft* Windows* Software Development Kit for Windows* 10\n    For each supported Linux* operating system, the standard gcc\n        version provided with that operating system is supported\n            GNU Compilers (gcc) 4.1 - 7.1\n            GNU C Library (glibc) version 2.4 - 2.19\n    Xcode* 6.3 - 9.1\n    Android* NDK r10e - r16\n\nSoftware - Supported Performance Analysis Tools\n\n    Intel(R) VTune(TM) Amplifier XE 2017, 2018.\n    Intel(R) Inspector XE 2017, 2018.\n    Intel(R) Advisor XE 2017, 2018.\n\nKnown Issues\n------------\n\nBelow is the list of known issues in this release of\nIntel(R) Threading Building Blocks (Intel(R) TBB).\nSee the \"Known Issues\" appendix in the Intel(R) TBB Developer\nReference for notes applicable to multiple releases of Intel(R) TBB.\n\nLibrary Issues\n\n    - If you build Intel(R) TBB from sources with GCC 6, specify\n        the -flifetime-dse=1 option to prevent crashes at runtime,\n        or use Intel(R) TBB makefiles that automatically set this option.\n\n    - The current implementation of gfx_factory does not allow memory\n        buffer objects to be used concurrently. As a result, several\n        streaming nodes customized with gfx_factory cannot be connected\n        with each other directly.\n\n------------------------------------------------------------------------\n(C) 2018 Intel Corporation\n\nIntel, the Intel logo, Intel Core, Intel Atom, Xeon, Intel Xeon Phi and\nPentium are trademarks of Intel Corporation in the U.S. and/or other\ncountries.\n\n* Other names and brands may be claimed as the property of others.\n\nThird Party and Open Source Licenses\n\nContent of some examples or binaries may be covered by various open-source\nlicenses. See the index.html file in each respective folder for details.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00002.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on range concept</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on range concept </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>R</code> implementing the concept of range must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">R::R( <span class=\"keyword\">const</span> R&amp; ); </div>\n</div><!-- fragment --> Copy constructor</li>\n<li><div class=\"fragment\"><div class=\"line\">R::~R(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> R::is_divisible() <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> True if range can be partitioned into two subranges</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> R::empty() <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> True if range is empty</li>\n<li><div class=\"fragment\"><div class=\"line\">R::R( R&amp; r, split ); </div>\n</div><!-- fragment --> Split range <code>r</code> into two subranges. </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00004.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_for body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_for body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_for body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( <span class=\"keyword\">const</span> Body&amp; ); </div>\n</div><!-- fragment --> Copy constructor</li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( Range&amp; r ) <span class=\"keyword\">const</span>; </div>\n</div><!-- fragment --> Function call operator applying the body to range <code>r</code>. </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00006.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_reduce body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_reduce body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_reduce body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( Body&amp;, split ); </div>\n</div><!-- fragment --> Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> </li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( Range&amp; r ); </div>\n</div><!-- fragment --> Function call operator applying body to range <code>r</code> and accumulating the result</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::join( Body&amp; b ); </div>\n</div><!-- fragment --> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00008.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_reduce anonymous function objects (lambda functions) </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>TO BE DOCUMENTED </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00010.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on parallel_scan body</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on parallel_scan body </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Class <code>Body</code> implementing the concept of parallel_scan body must define:</p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\">Body::Body( Body&amp;, split ); </div>\n</div><!-- fragment --> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately</li>\n<li><div class=\"fragment\"><div class=\"line\">Body::~Body(); </div>\n</div><!-- fragment --> Destructor</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( <span class=\"keyword\">const</span> Range&amp; r, pre_scan_tag ); </div>\n</div><!-- fragment --> Preprocess iterations for range <code>r</code> </li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::operator()( <span class=\"keyword\">const</span> Range&amp; r, final_scan_tag ); </div>\n</div><!-- fragment --> Do final processing for iterations of range <code>r</code> </li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> Body::reverse_join( Body&amp; a ); </div>\n</div><!-- fragment --> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00012.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Requirements on iterators for parallel_sort</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Requirements on iterators for parallel_sort </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Requirements on the iterator type <code>It</code> and its value type <code>T</code> for <code>parallel_sort:</code> </p>\n<ul>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">void</span> iter_swap( It a, It b ) </div>\n</div><!-- fragment --> Swaps the values of the elements the given iterators <code>a</code> and <code>b</code> are pointing to. <code>It</code> should be a random access iterator.</li>\n<li><div class=\"fragment\"><div class=\"line\"><span class=\"keywordtype\">bool</span> Compare::operator()( <span class=\"keyword\">const</span> T&amp; x, <span class=\"keyword\">const</span> T&amp; y ) </div>\n</div><!-- fragment --> True if x comes before y; </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00014.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>TBB concepts</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00015.html\">Main Page</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">TBB concepts </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).</p>\n<p>All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class=\"el\" href=\"a00002.html\">ranges</a>), while other ones must always be implemented by the user.</p>\n<p>TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:</p>\n<ul>\n<li><a class=\"el\" href=\"a00002.html\">Requirements on range concept</a></li>\n<li>parallel_do_body_req</li>\n<li><a class=\"el\" href=\"a00004.html\">Requirements on parallel_for body</a></li>\n<li><a class=\"el\" href=\"a00006.html\">Requirements on parallel_reduce body</a></li>\n<li><a class=\"el\" href=\"a00010.html\">Requirements on parallel_scan body</a></li>\n<li><a class=\"el\" href=\"a00012.html\">Requirements on iterators for parallel_sort</a> </li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00016.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>__TBB_malloc_proxy_caller Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"a00278.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">__TBB_malloc_proxy_caller Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbbmalloc_proxy.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00017.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00017.html\">accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00377.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allows write access to elements and combines data access, locking, and garbage collection.  \n <a href=\"a00017.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00017.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_map\">\n<area href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \" alt=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor\" shape=\"rect\" coords=\"0,56,488,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a850178bbdcdbc4cf5955cab37eb8c42c\"></a>\ntypedef <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">value_type</a></td></tr>\n<tr class=\"memdesc:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:a850178bbdcdbc4cf5955cab37eb8c42c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa8ca5aef4ee14b7eddb64767b8cd5fda\"></a>\ntypedef const <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a></td></tr>\n<tr class=\"memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:aa8ca5aef4ee14b7eddb64767b8cd5fda inherit pub_types_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4e03905a33fbdafdb99113cc68d2bd4b\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a4e03905a33fbdafdb99113cc68d2bd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab04f73bd4a4ca7df0dc91a7b4d66f987\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:ab04f73bd4a4ca7df0dc91a7b4d66f987\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6299b523d2ae8e2613f1bc160ca99b85\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if result is empty. <br/></td></tr>\n<tr class=\"separator:a6299b523d2ae8e2613f1bc160ca99b85 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18390cb369369d72bdf7c867755b5190\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a> ()</td></tr>\n<tr class=\"memdesc:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to null. <br/></td></tr>\n<tr class=\"separator:a18390cb369369d72bdf7c867755b5190 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8adf04e33e7c8c876ba849f26807713a\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a8adf04e33e7c8c876ba849f26807713a inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28fa9b9e6c35d7e80217e69a7afe1ee5\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a28fa9b9e6c35d7e80217e69a7afe1ee5 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b26d22d228cf0d8678c9b346c63752c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create empty result. <br/></td></tr>\n<tr class=\"separator:a7b26d22d228cf0d8678c9b346c63752c inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc0c85a146c912b9a0f94a7695957c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy result after releasing the underlying reference. <br/></td></tr>\n<tr class=\"separator:afbc0c85a146c912b9a0f94a7695957c7 inherit pub_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05b74d408d8cd7773f7b5edfef97da1b\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_writer</b> ()</td></tr>\n<tr class=\"separator:a05b74d408d8cd7773f7b5edfef97da1b inherit pro_methods_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00061\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00061')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td></tr>\n<tr class=\"memitem:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9b96f45483ddbff95a95e8e666a8f28\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_node</b></td></tr>\n<tr class=\"separator:ac9b96f45483ddbff95a95e8e666a8f28 inherit pro_attribs_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5034084f595666b47734f99a6eaefa9f\"></a>\nhashcode_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash</b></td></tr>\n<tr class=\"separator:a5034084f595666b47734f99a6eaefa9f inherit pro_attribs_a00061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</h3>\n\n<p>Allows write access to elements and combines data access, locking, and garbage collection. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00018.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00378.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a28b496c90f07e4557a6dfa5a8dd3f4e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28b496c90f07e4557a6dfa5a8dd3f4e1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a28b496c90f07e4557a6dfa5a8dd3f4e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00019.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00019.html\">aggregator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00397.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Basic aggregator interface.  \n <a href=\"a00019.html#details\">More...</a></p>\n\n<p><code>#include &lt;aggregator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00019.png\" usemap=\"#tbb::interface6::aggregator_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_map\" name=\"tbb::interface6::aggregator_map\">\n<area href=\"a00020.html\" alt=\"tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;\" shape=\"rect\" coords=\"0,0,335,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Body &gt; </td></tr>\n<tr class=\"memitem:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">execute</a> (const Body &amp;b)</td></tr>\n<tr class=\"memdesc:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.  <a href=\"#aa7cc924b6f0d17578d61fd9002f59f84\">More...</a><br/></td></tr>\n<tr class=\"separator:aa7cc924b6f0d17578d61fd9002f59f84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Basic aggregator interface. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa7cc924b6f0d17578d61fd9002f59f84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::aggregator::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>BASIC INTERFACE: Enter a function for exclusive execution by the aggregator. </p>\n<p>The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00020.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator_ext&lt; handler_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00396.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_ext&lt; handler_type &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Aggregator base class and expert interface.  \n <a href=\"a00020.html#details\">More...</a></p>\n\n<p><code>#include &lt;aggregator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator_ext&lt; handler_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00020.png\" usemap=\"#tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\" name=\"tbb::interface6::aggregator_ext&lt; handler_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8ae120a21264cc1ea0a9cfafaa0634e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ae120a21264cc1ea0a9cfafaa0634e4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_ext</b> (const handler_type &amp;h)</td></tr>\n<tr class=\"separator:a8ae120a21264cc1ea0a9cfafaa0634e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *op)</td></tr>\n<tr class=\"memdesc:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href=\"#ae55b16ec6af204aa00d6a716fccec9f7\">More...</a><br/></td></tr>\n<tr class=\"separator:ae55b16ec6af204aa00d6a716fccec9f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:ad376e5c31d10e885f33964592aa629d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> &amp;op)</td></tr>\n<tr class=\"separator:ad376e5c31d10e885f33964592aa629d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename handler_type&gt;<br/>\nclass tbb::interface6::aggregator_ext&lt; handler_type &gt;</h3>\n\n<p>Aggregator base class and expert interface. </p>\n<p>An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad376e5c31d10e885f33964592aa629d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename handler_type&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext</a>&lt; handler_type &gt;::execute_impl </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>op</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae55b16ec6af204aa00d6a716fccec9f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename handler_type&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext</a>&lt; handler_type &gt;::process </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td>\n          <td class=\"paramname\"><em>op</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. </p>\n<p>Details of user-made operations must be handled by user-provided handler </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00021.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::aggregator_operation Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00395.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_operation Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::aggregator_operation:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00021.png\" usemap=\"#tbb::interface6::aggregator_operation_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::aggregator_operation_map\" name=\"tbb::interface6::aggregator_operation_map\">\n<area href=\"a00033.html\" alt=\"tbb::interface6::internal::basic_operation_base\" shape=\"rect\" coords=\"0,56,289,80\"/>\n<area href=\"a00032.html\" alt=\"tbb::interface6::internal::basic_operation&lt; Body &gt;\" shape=\"rect\" coords=\"0,112,289,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7f6e7d315f893b1b66d06ffdad12038e\"></a>\ntemplate&lt;typename handler_type &gt; </td></tr>\n<tr class=\"memitem:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>aggregator_ext</b></td></tr>\n<tr class=\"separator:a7f6e7d315f893b1b66d06ffdad12038e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ac7edadfe74f475783f3b429904e7010a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::aggregator_operation::finish </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Call finish when done handling this operation. </p>\n<p>The operation will be released to its originating thread, and possibly deleted. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00022.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::aligned_space&lt; T, N &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00280.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::aligned_space&lt; T, N &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Block of space aligned sufficiently to construct an array T with N elements.  \n <a href=\"a00022.html#details\">More...</a></p>\n\n<p><code>#include &lt;aligned_space.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aefcd343548f92c6e738febedf1d75f74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aefcd343548f92c6e738febedf1d75f74\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">begin</a> () const </td></tr>\n<tr class=\"memdesc:aefcd343548f92c6e738febedf1d75f74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to beginning of array. <br/></td></tr>\n<tr class=\"separator:aefcd343548f92c6e738febedf1d75f74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2ec5fe3a8f1641884358740766fde34\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">end</a> () const </td></tr>\n<tr class=\"memdesc:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to one past last element in array. <br/></td></tr>\n<tr class=\"separator:aa2ec5fe3a8f1641884358740766fde34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, size_t N = 1&gt;<br/>\nclass tbb::aligned_space&lt; T, N &gt;</h3>\n\n<p>Block of space aligned sufficiently to construct an array T with N elements. </p>\n<p>The elements are not constructed or destroyed by this class. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>aligned_space.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00023.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00023.html\">async_helpers</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00365.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9a483310f1b2e6cfd952906124a09ebb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a483310f1b2e6cfd952906124a09ebb\"></a>\ntypedef <a class=\"el\" href=\"a00025.html\">async_msg</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_type</b></td></tr>\n<tr class=\"separator:a9a483310f1b2e6cfd952906124a09ebb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcefe402ace161e17c974ae2dd3b458a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcefe402ace161e17c974ae2dd3b458a\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:abcefe402ace161e17c974ae2dd3b458a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a2236321141eea81b8367f8786f62c656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2236321141eea81b8367f8786f62c656\"></a>\nstatic const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:a2236321141eea81b8367f8786f62c656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4b81efe81c177c1fb61142c1655a340\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4b81efe81c177c1fb61142c1655a340\"></a>\nstatic void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (T &amp;t)</td></tr>\n<tr class=\"separator:ac4b81efe81c177c1fb61142c1655a340\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac43a4547e19a30fb2156eb7e59f22c61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac43a4547e19a30fb2156eb7e59f22c61\"></a>\nstatic const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (const void *p)</td></tr>\n<tr class=\"separator:ac43a4547e19a30fb2156eb7e59f22c61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70bb7b481e7b4786edf07881b7114b09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a70bb7b481e7b4786edf07881b7114b09\"></a>\nstatic T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (void *p)</td></tr>\n<tr class=\"separator:a70bb7b481e7b4786edf07881b7114b09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8737716155b1acede28ae85dc00edaef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8737716155b1acede28ae85dc00edaef\"></a>\nstatic task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper_impl</b> (<a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt; *const this_recv, const void *p, bool is_async)</td></tr>\n<tr class=\"separator:a8737716155b1acede28ae85dc00edaef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a77c7b633889eff6fbf768a09515c8cfe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a77c7b633889eff6fbf768a09515c8cfe\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_async_type</b> = false</td></tr>\n<tr class=\"separator:a77c7b633889eff6fbf768a09515c8cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00024.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00024.html\">async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00366.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a087d75662143ef3819379262e52fb1a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a087d75662143ef3819379262e52fb1a9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_type</b></td></tr>\n<tr class=\"separator:a087d75662143ef3819379262e52fb1a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99b3ba7bf9185ece5fc65a014e26e048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99b3ba7bf9185ece5fc65a014e26e048\"></a>\ntypedef T::async_msg_data_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a99b3ba7bf9185ece5fc65a014e26e048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:af303cbf389e29ff0de60ee6d824c07e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af303cbf389e29ff0de60ee6d824c07e5\"></a>\nstatic const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:af303cbf389e29ff0de60ee6d824c07e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24cfe0e9b862f04412c6174b6f9f3b69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24cfe0e9b862f04412c6174b6f9f3b69\"></a>\nstatic void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>to_void_ptr</b> (T &amp;t)</td></tr>\n<tr class=\"separator:a24cfe0e9b862f04412c6174b6f9f3b69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff46d0962be22746402cf3a2a4a4e8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff46d0962be22746402cf3a2a4a4e8ea\"></a>\nstatic const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (const void *p)</td></tr>\n<tr class=\"separator:aff46d0962be22746402cf3a2a4a4e8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a448f6a16e2831f45d959628bd6296a7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a448f6a16e2831f45d959628bd6296a7c\"></a>\nstatic T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>from_void_ptr</b> (void *p)</td></tr>\n<tr class=\"separator:a448f6a16e2831f45d959628bd6296a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afaba573c1bf66e75146ef561767576eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afaba573c1bf66e75146ef561767576eb\"></a>\nstatic task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper_impl</b> (<a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt; *const this_recv, const void *p, bool is_async)</td></tr>\n<tr class=\"separator:afaba573c1bf66e75146ef561767576eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:aef518cf077f5d7658c49e81bf451cd2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef518cf077f5d7658c49e81bf451cd2b\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_async_type</b> = true</td></tr>\n<tr class=\"separator:aef518cf077f5d7658c49e81bf451cd2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00025.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::async_msg&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00025.html\">async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::async_msg&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::async_msg&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00025.png\" usemap=\"#tbb::flow::interface10::async_msg&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::async_msg&lt; T &gt;_map\" name=\"tbb::flow::interface10::async_msg&lt; T &gt;_map\">\n<area href=\"a00102.html\" alt=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,56,326,80\"/>\n</map>\n </div></div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00026.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::async_storage&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00026.html\">async_storage</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_storage&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00027.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::atomic&lt; T &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00027.html\">atomic</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00281.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; T &gt; Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Primary template for atomic.  \n <a href=\"a00027.html#details\">More...</a></p>\n\n<p><code>#include &lt;atomic.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::atomic&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00027.png\" usemap=\"#tbb::atomic&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::atomic&lt; T &gt;_map\" name=\"tbb::atomic&lt; T &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8624826901f5a3267853386bf880bd88\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8624826901f5a3267853386bf880bd88\"></a>\nconstexpr&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic</b> (T arg)</td></tr>\n<tr class=\"separator:a8624826901f5a3267853386bf880bd88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5942feb81281f810edddc61a48dd7a39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5942feb81281f810edddc61a48dd7a39\"></a>\nT&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (T rhs)</td></tr>\n<tr class=\"separator:a5942feb81281f810edddc61a48dd7a39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d65b6cae3bd11c79a8e51e25055be52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d65b6cae3bd11c79a8e51e25055be52\"></a>\n<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a7d65b6cae3bd11c79a8e51e25055be52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nstruct tbb::atomic&lt; T &gt;</h3>\n\n<p>Primary template for atomic. </p>\n<p>See the Reference for details. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>atomic.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00028.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::atomic&lt; void * &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00028.html\">atomic< void * ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00282.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; void * &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  \n <a href=\"a00028.html#details\">More...</a></p>\n\n<p><code>#include &lt;atomic.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::atomic&lt; void * &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00028.png\" usemap=\"#tbb::atomic&lt; void * &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::atomic&lt; void * &gt;_map\" name=\"tbb::atomic&lt; void * &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a744970055554db56a922b83dd1125dcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a744970055554db56a922b83dd1125dcf\"></a>\nconstexpr&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic</b> (void *arg)</td></tr>\n<tr class=\"separator:a744970055554db56a922b83dd1125dcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3da2906b224154d9961054f07b2e310b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3da2906b224154d9961054f07b2e310b\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (void *rhs)</td></tr>\n<tr class=\"separator:a3da2906b224154d9961054f07b2e310b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8cb22d05fe655337f6129dc8f3ab6783\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8cb22d05fe655337f6129dc8f3ab6783\"></a>\n<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; void * &gt; &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; void * &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a8cb22d05fe655337f6129dc8f3ab6783\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nstruct tbb::atomic&lt; void * &gt;</h3>\n\n<p>Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>atomic.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00029.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface7::task_arena::attach Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00029.html\">attach</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena::attach Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Tag class used to indicate the \"attaching\" constructor.  \n <a href=\"a00029.html#details\">More...</a></p>\n\n<p><code>#include &lt;task_arena.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Tag class used to indicate the \"attaching\" constructor. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>task_arena.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00030.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::bad_last_alloc Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00333.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::bad_last_alloc Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for concurrent containers.  \n <a href=\"a00030.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::bad_last_alloc:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00030.png\" usemap=\"#tbb::bad_last_alloc_map\" alt=\"\"/>\n  <map id=\"tbb::bad_last_alloc_map\" name=\"tbb::bad_last_alloc_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad26fe8a6bd71e097ab339f3d3895d07c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad26fe8a6bd71e097ab339f3d3895d07c\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:ad26fe8a6bd71e097ab339f3d3895d07c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for concurrent containers. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00031.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_handler Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00031.html\">basic_handler</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00413.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_handler Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afb0dec67968e9abdabb5a0e3ec8064a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb0dec67968e9abdabb5a0e3ec8064a4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *op_list) const </td></tr>\n<tr class=\"separator:afb0dec67968e9abdabb5a0e3ec8064a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00032.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_operation&lt; Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00032.html\">basic_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00412.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation&lt; Body &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::internal::basic_operation&lt; Body &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00032.png\" usemap=\"#tbb::interface6::internal::basic_operation&lt; Body &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::internal::basic_operation&lt; Body &gt;_map\" name=\"tbb::interface6::internal::basic_operation&lt; Body &gt;_map\">\n<area href=\"a00033.html\" alt=\"tbb::interface6::internal::basic_operation_base\" shape=\"rect\" coords=\"0,56,289,80\"/>\n<area href=\"a00021.html\" alt=\"tbb::interface6::aggregator_operation\" shape=\"rect\" coords=\"0,0,289,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:adf48b2339f7de2f002c24c8951a03057\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf48b2339f7de2f002c24c8951a03057\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>basic_operation</b> (const Body &amp;b)</td></tr>\n<tr class=\"separator:adf48b2339f7de2f002c24c8951a03057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00033.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::basic_operation_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00411.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation_base Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::internal::basic_operation_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00033.png\" usemap=\"#tbb::interface6::internal::basic_operation_base_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::internal::basic_operation_base_map\" name=\"tbb::interface6::internal::basic_operation_base_map\">\n<area href=\"a00021.html\" alt=\"tbb::interface6::aggregator_operation\" shape=\"rect\" coords=\"0,0,289,24\"/>\n<area href=\"a00032.html\" alt=\"tbb::interface6::internal::basic_operation&lt; Body &gt;\" shape=\"rect\" coords=\"0,112,289,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afe66260da7455bea5b701a3d8a537ba7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afe66260da7455bea5b701a3d8a537ba7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>basic_handler</b></td></tr>\n<tr class=\"separator:afe66260da7455bea5b701a3d8a537ba7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator_operation_status</b> { <b>agg_waiting</b> =0, \n<b>agg_finished</b>\n }</td></tr>\n<tr class=\"separator:a855dc55cb1823ed4845f4ed6b0a87700 inherit pub_types_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00021\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00021')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td></tr>\n<tr class=\"memitem:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc0e032aa604f1da85ffc7ec269b157f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a> ()</td></tr>\n<tr class=\"memdesc:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call start before handling this operation. <br/></td></tr>\n<tr class=\"separator:adc0e032aa604f1da85ffc7ec269b157f inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a> ()</td></tr>\n<tr class=\"memdesc:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Call finish when done handling this operation.  <a href=\"#ac7edadfe74f475783f3b429904e7010a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac7edadfe74f475783f3b429904e7010a inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbce3d13545770501b54df153bf1e690\"></a>\n<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>next</b> ()</td></tr>\n<tr class=\"separator:acbce3d13545770501b54df153bf1e690 inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03cf9fad0ca21da61b83325a50e17d0b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_next</b> (<a class=\"el\" href=\"a00021.html\">aggregator_operation</a> *n)</td></tr>\n<tr class=\"separator:a03cf9fad0ca21da61b83325a50e17d0b inherit pub_methods_a00021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>aggregator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00034.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range&lt; Value &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00283.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range&lt; Value &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A range over which to iterate.  \n <a href=\"a00034.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad56ca70af46acf8870b4970d8a809791\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef Value&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a></td></tr>\n<tr class=\"memdesc:ad56ca70af46acf8870b4970d8a809791\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of a value.  <a href=\"#ad56ca70af46acf8870b4970d8a809791\">More...</a><br/></td></tr>\n<tr class=\"separator:ad56ca70af46acf8870b4970d8a809791\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a89b300cecd9d617e4ee801c786756e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a89b300cecd9d617e4ee801c786756e55\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a></td></tr>\n<tr class=\"memdesc:a89b300cecd9d617e4ee801c786756e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of a range. <br/></td></tr>\n<tr class=\"separator:a89b300cecd9d617e4ee801c786756e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">blocked_range</a> ()</td></tr>\n<tr class=\"memdesc:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct range with default-constructed values for begin, end, and grainsize.  <a href=\"#aad176ab2cbd0bd73c3c2065761af3ccc\">More...</a><br/></td></tr>\n<tr class=\"separator:aad176ab2cbd0bd73c3c2065761af3ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49a97576004711b7159170fcaf488e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a97576004711b7159170fcaf488e4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a49a97576004711b7159170fcaf488e4e\">blocked_range</a> (Value begin_, Value end_, <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> grainsize_=1)</td></tr>\n<tr class=\"memdesc:a49a97576004711b7159170fcaf488e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct range over half-open interval [begin,end), with the given grainsize. <br/></td></tr>\n<tr class=\"separator:a49a97576004711b7159170fcaf488e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae225fa10454b0fa33533dfb56f5060a2\"></a>\n<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">begin</a> () const </td></tr>\n<tr class=\"memdesc:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Beginning of range. <br/></td></tr>\n<tr class=\"separator:ae225fa10454b0fa33533dfb56f5060a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99f829599d3e51b181a30b4cd57b06c6\"></a>\n<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">end</a> () const </td></tr>\n<tr class=\"memdesc:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">One past last value in range. <br/></td></tr>\n<tr class=\"separator:a99f829599d3e51b181a30b4cd57b06c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a347ef8caa40edca3b7f475f182281140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">size</a> () const </td></tr>\n<tr class=\"memdesc:a347ef8caa40edca3b7f475f182281140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Size of the range.  <a href=\"#a347ef8caa40edca3b7f475f182281140\">More...</a><br/></td></tr>\n<tr class=\"separator:a347ef8caa40edca3b7f475f182281140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab408f3cf90c85fa9203df5641a2f9bb1\"></a>\n<a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">grainsize</a> () const </td></tr>\n<tr class=\"memdesc:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The grain size for this range. <br/></td></tr>\n<tr class=\"separator:ab408f3cf90c85fa9203df5641a2f9bb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59dec03416b3fefbf69600f798177710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59dec03416b3fefbf69600f798177710\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a59dec03416b3fefbf69600f798177710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:a59dec03416b3fefbf69600f798177710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible.  <a href=\"#ad90ad1db0d4d9a301ef1c9e17712e8a0\">More...</a><br/></td></tr>\n<tr class=\"separator:ad90ad1db0d4d9a301ef1c9e17712e8a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75cae12286f4d5492970ea630a9783b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">blocked_range</a> (<a class=\"el\" href=\"a00034.html\">blocked_range</a> &amp;r, split)</td></tr>\n<tr class=\"memdesc:a75cae12286f4d5492970ea630a9783b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Split range.  <a href=\"#a75cae12286f4d5492970ea630a9783b9\">More...</a><br/></td></tr>\n<tr class=\"separator:a75cae12286f4d5492970ea630a9783b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#a1f53fbb10b8b04a515f382704b00ed14\">blocked_range</a> (<a class=\"el\" href=\"a00034.html\">blocked_range</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"memdesc:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Split range.  <a href=\"#a1f53fbb10b8b04a515f382704b00ed14\">More...</a><br/></td></tr>\n<tr class=\"separator:a1f53fbb10b8b04a515f382704b00ed14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:ae2b0210e2468092b408123adeb54b01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2b0210e2468092b408123adeb54b01c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:ae2b0210e2468092b408123adeb54b01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:ae2b0210e2468092b408123adeb54b01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa504612e6c1ba07b8846bcd323847680\"></a>\ntemplate&lt;typename RowValue , typename ColValue &gt; </td></tr>\n<tr class=\"memitem:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_range2d</b></td></tr>\n<tr class=\"separator:aa504612e6c1ba07b8846bcd323847680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a83f67fe3b421dbaeee9040aae730d5e8\"></a>\ntemplate&lt;typename RowValue , typename ColValue , typename PageValue &gt; </td></tr>\n<tr class=\"memitem:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_range3d</b></td></tr>\n<tr class=\"separator:a83f67fe3b421dbaeee9040aae730d5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a873fd9208a42597b138e780a32b83381\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a873fd9208a42597b138e780a32b83381\"></a>\ntemplate&lt;typename DimValue , unsigned int N, typename &gt; </td></tr>\n<tr class=\"memitem:a873fd9208a42597b138e780a32b83381\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::blocked_rangeNd_impl</b></td></tr>\n<tr class=\"separator:a873fd9208a42597b138e780a32b83381\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Value&gt;<br/>\nclass tbb::blocked_range&lt; Value &gt;</h3>\n\n<p>A range over which to iterate. </p>\n</div><h2 class=\"groupheader\">Member Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ad56ca70af46acf8870b4970d8a809791\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef Value <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type of a value. </p>\n<p>Called a const_iterator for sake of algorithms that need to treat a <a class=\"el\" href=\"a00034.html\" title=\"A range over which to iterate. \">blocked_range</a> as an STL container. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"aad176ab2cbd0bd73c3c2065761af3ccc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct range with default-constructed values for begin, end, and grainsize. </p>\n<p>Requires that Value have a default constructor. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a75cae12286f4d5492970ea630a9783b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; Value &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">split&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Split range. </p>\n<p>The new Range *this has the second part, the old range r has the first part. Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a> or !is_divisible(). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1f53fbb10b8b04a515f382704b00ed14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::<a class=\"el\" href=\"a00034.html\">blocked_range</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; Value &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">proportional_split &amp;&#160;</td>\n          <td class=\"paramname\"><em>proportion</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Split range. </p>\n<p>The new Range *this has the second part split according to specified proportion, the old range r has the first part. Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a> or !is_divisible(). </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad90ad1db0d4d9a301ef1c9e17712e8a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::is_divisible </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if range is divisible. </p>\n<p>Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;::is_divisible()</a>, and <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;::is_divisible()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a347ef8caa40edca3b7f475f182281140\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Value&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> <a class=\"el\" href=\"a00034.html\">tbb::blocked_range</a>&lt; Value &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Size of the range. </p>\n<p>Unspecified if <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\" title=\"One past last value in range. \">end()</a>&lt;<a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\" title=\"Beginning of range. \">begin()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; I &gt;::is_divisible()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00035.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00284.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A 2-dimensional range that models the Range concept.  \n <a href=\"a00035.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range2d.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ada609b296a9af0591cc34761b8538100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada609b296a9af0591cc34761b8538100\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; RowValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a></td></tr>\n<tr class=\"memdesc:ada609b296a9af0591cc34761b8538100\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of an iteration range. <br/></td></tr>\n<tr class=\"separator:ada609b296a9af0591cc34761b8538100\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9820ed2f2560633d18bf35cece8b6493\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9820ed2f2560633d18bf35cece8b6493\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; ColValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>col_range_type</b></td></tr>\n<tr class=\"separator:a9820ed2f2560633d18bf35cece8b6493\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5aa4e2c389c4b833937fcad66efe2b6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5aa4e2c389c4b833937fcad66efe2b6a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">col_range_type::size_type</a> col_grainsize)</td></tr>\n<tr class=\"separator:a5aa4e2c389c4b833937fcad66efe2b6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf45f93921022437fdcb500585768a5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf45f93921022437fdcb500585768a5e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>\n<tr class=\"separator:aaf45f93921022437fdcb500585768a5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5805972c8c41b2681d286f9c9771cf52\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:a5805972c8c41b2681d286f9c9771cf52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac84c6cc2ff8b0974ffa719fed804f586\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible into two pieces. <br/></td></tr>\n<tr class=\"separator:ac84c6cc2ff8b0974ffa719fed804f586\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0e752d01b661b01c9a473473bea43fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0e752d01b661b01c9a473473bea43fc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (<a class=\"el\" href=\"a00035.html\">blocked_range2d</a> &amp;r, split)</td></tr>\n<tr class=\"separator:af0e752d01b661b01c9a473473bea43fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ebbf0fa580c0553ec2e3c5997b9799c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ebbf0fa580c0553ec2e3c5997b9799c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d</b> (<a class=\"el\" href=\"a00035.html\">blocked_range2d</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"separator:a9ebbf0fa580c0553ec2e3c5997b9799c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f7299e74c40df57dee2433c07ce65ae\"></a>\nconst <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">rows</a> () const </td></tr>\n<tr class=\"memdesc:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The rows of the iteration space. <br/></td></tr>\n<tr class=\"separator:a4f7299e74c40df57dee2433c07ce65ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3bccfaf90126b285491096f78ca9473\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af3bccfaf90126b285491096f78ca9473\"></a>\nconst <a class=\"el\" href=\"a00034.html\">col_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">cols</a> () const </td></tr>\n<tr class=\"memdesc:af3bccfaf90126b285491096f78ca9473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The columns of the iteration space. <br/></td></tr>\n<tr class=\"separator:af3bccfaf90126b285491096f78ca9473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:aa0519760654368000f7ebc87d9bfe898\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0519760654368000f7ebc87d9bfe898\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:aa0519760654368000f7ebc87d9bfe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:aa0519760654368000f7ebc87d9bfe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename RowValue, typename ColValue = RowValue&gt;<br/>\nclass tbb::blocked_range2d&lt; RowValue, ColValue &gt;</h3>\n\n<p>A 2-dimensional range that models the Range concept. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range2d.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00036.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00285.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A 3-dimensional range that models the Range concept.  \n <a href=\"a00036.html#details\">More...</a></p>\n\n<p><code>#include &lt;blocked_range3d.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8cdc866378a12ce198da870d0439676f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8cdc866378a12ce198da870d0439676f\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; PageValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a></td></tr>\n<tr class=\"memdesc:a8cdc866378a12ce198da870d0439676f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for size of an iteration range. <br/></td></tr>\n<tr class=\"separator:a8cdc866378a12ce198da870d0439676f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe15e1e06f47809a477272f733a8abf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe15e1e06f47809a477272f733a8abf8\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; RowValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>row_range_type</b></td></tr>\n<tr class=\"separator:abe15e1e06f47809a477272f733a8abf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3bffd5ffb14ad9897b1a9bf22980768\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3bffd5ffb14ad9897b1a9bf22980768\"></a>\ntypedef <a class=\"el\" href=\"a00034.html\">blocked_range</a>&lt; ColValue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>col_range_type</b></td></tr>\n<tr class=\"separator:ab3bffd5ffb14ad9897b1a9bf22980768\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa5159e07e2d601319eece538edb8add0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa5159e07e2d601319eece538edb8add0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>\n<tr class=\"separator:aa5159e07e2d601319eece538edb8add0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a671a22033260fa02734c5a1113dcf1ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a671a22033260fa02734c5a1113dcf1ac\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">col_range_type::size_type</a> col_grainsize)</td></tr>\n<tr class=\"separator:a671a22033260fa02734c5a1113dcf1ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea992e0cd3d105f964a633b1a0a1a05f\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is empty. <br/></td></tr>\n<tr class=\"separator:aea992e0cd3d105f964a633b1a0a1a05f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fce6bcae6269c37623c3a2cdbb8bcf0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">is_divisible</a> () const </td></tr>\n<tr class=\"memdesc:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if range is divisible into two pieces. <br/></td></tr>\n<tr class=\"separator:a0fce6bcae6269c37623c3a2cdbb8bcf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a788ebedfb4a2eaa4bee11c2c967e0768\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a788ebedfb4a2eaa4bee11c2c967e0768\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (<a class=\"el\" href=\"a00036.html\">blocked_range3d</a> &amp;r, split)</td></tr>\n<tr class=\"separator:a788ebedfb4a2eaa4bee11c2c967e0768\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e5fdb794ec7bfc5f21a59ddd466d8e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e5fdb794ec7bfc5f21a59ddd466d8e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d</b> (<a class=\"el\" href=\"a00036.html\">blocked_range3d</a> &amp;r, proportional_split &amp;proportion)</td></tr>\n<tr class=\"separator:a0e5fdb794ec7bfc5f21a59ddd466d8e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b794fd53ba92106aeafa4eed85731d4\"></a>\nconst <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">pages</a> () const </td></tr>\n<tr class=\"memdesc:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The pages of the iteration space. <br/></td></tr>\n<tr class=\"separator:a5b794fd53ba92106aeafa4eed85731d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeac1def585af81467573f30ebb42cb4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeac1def585af81467573f30ebb42cb4f\"></a>\nconst <a class=\"el\" href=\"a00034.html\">row_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">rows</a> () const </td></tr>\n<tr class=\"memdesc:aeac1def585af81467573f30ebb42cb4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The rows of the iteration space. <br/></td></tr>\n<tr class=\"separator:aeac1def585af81467573f30ebb42cb4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a308d7089a1d53ff26770a7040ed817cd\"></a>\nconst <a class=\"el\" href=\"a00034.html\">col_range_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">cols</a> () const </td></tr>\n<tr class=\"memdesc:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The columns of the iteration space. <br/></td></tr>\n<tr class=\"separator:a308d7089a1d53ff26770a7040ed817cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5940c1bd6ba0e8184ef83dea0ae56884\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">is_splittable_in_proportion</a> = true</td></tr>\n<tr class=\"memdesc:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static field to support proportional split. <br/></td></tr>\n<tr class=\"separator:a5940c1bd6ba0e8184ef83dea0ae56884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue&gt;<br/>\nclass tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</h3>\n\n<p>A 3-dimensional range that models the Range concept. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range3d.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00037.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_range.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00038.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl< Value, N, index_sequence< Is...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00416.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a5011dca34818237ef9dec22973ca3e36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5011dca34818237ef9dec22973ca3e36\"></a>\nusing&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">value_type</a> = Value</td></tr>\n<tr class=\"memdesc:a5011dca34818237ef9dec22973ca3e36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of a value. <br/></td></tr>\n<tr class=\"separator:a5011dca34818237ef9dec22973ca3e36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab95cb7c03dc5a1e600105e3ac019287b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">blocked_rangeNd_impl</a> (const <a class=\"el\" href=\"a00034.html\">dim_type_helper</a>&lt; Is &gt; &amp;...args)</td></tr>\n<tr class=\"memdesc:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs N-dimensional range over N half-open intervals each represented as tbb::blocked_range&lt;Value&gt;. <br/></td></tr>\n<tr class=\"separator:ab95cb7c03dc5a1e600105e3ac019287b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeae30e80615d71a369e449748e5f841d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeae30e80615d71a369e449748e5f841d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd_impl</b> (<a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> &amp;r, proportional_split proportion)</td></tr>\n<tr class=\"separator:aeae30e80615d71a369e449748e5f841d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af177d8e969525bd79cd2616b941d8c57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af177d8e969525bd79cd2616b941d8c57\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd_impl</b> (<a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> &amp;r, split proportion)</td></tr>\n<tr class=\"separator:af177d8e969525bd79cd2616b941d8c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>blocked_rangeNd.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00039.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00039.html\">broadcast_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00040.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00379.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket  \n <a href=\"a00040.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00040.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab8dc51ef88ff53cc6cc4e40e2c2818eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8dc51ef88ff53cc6cc4e40e2c2818eb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>bucket_accessor</b> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>\n<tr class=\"separator:ab8dc51ef88ff53cc6cc4e40e2c2818eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d7d8f3d101bb18056b8e5d4d2c8b079\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">acquire</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>\n<tr class=\"memdesc:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br/></td></tr>\n<tr class=\"separator:a0d7d8f3d101bb18056b8e5d4d2c8b079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa8167e2961330435fd23eb92127805c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa8167e2961330435fd23eb92127805c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">is_writer</a> ()</td></tr>\n<tr class=\"memdesc:aaa8167e2961330435fd23eb92127805c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">check whether bucket is locked for write <br/></td></tr>\n<tr class=\"separator:aaa8167e2961330435fd23eb92127805c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a16e714a5e77dbf8daf81973df30722d4\"></a>\nbucket *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">operator()</a> ()</td></tr>\n<tr class=\"memdesc:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">get bucket pointer <br/></td></tr>\n<tr class=\"separator:a16e714a5e77dbf8daf81973df30722d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</h3>\n\n<p>bucket accessor is to find, rehash, acquire a lock, and access a bucket </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00041.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00286.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00041.html#details\">More...</a></p>\n\n<p><code>#include &lt;cache_aligned_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00123.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a7aba3042b0a1c934879d5299f0c20e7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7aba3042b0a1c934879d5299f0c20e7e\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a7aba3042b0a1c934879d5299f0c20e7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fabbb51a8fd7b270b94fc4d9548847b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6fabbb51a8fd7b270b94fc4d9548847b\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a6fabbb51a8fd7b270b94fc4d9548847b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a35edf40f1bb3418f61e7d33c9f796824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35edf40f1bb3418f61e7d33c9f796824\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a35edf40f1bb3418f61e7d33c9f796824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9f2f6c7ca74e1f3968d838eec2c4dcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9f2f6c7ca74e1f3968d838eec2c4dcb\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:ac9f2f6c7ca74e1f3968d838eec2c4dcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af50d27e385aea41dbb8a9cd0734f1c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af50d27e385aea41dbb8a9cd0734f1c84\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:af50d27e385aea41dbb8a9cd0734f1c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a51eed827a49fd636d1d6c73908f9635b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a51eed827a49fd636d1d6c73908f9635b\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a51eed827a49fd636d1d6c73908f9635b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8bf47c52cdeee1bc0dcd410cc97faeec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8bf47c52cdeee1bc0dcd410cc97faeec\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a8bf47c52cdeee1bc0dcd410cc97faeec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a11b1921251262137671599e99fbe8d4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a11b1921251262137671599e99fbe8d4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cache_aligned_allocator</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a11b1921251262137671599e99fbe8d4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab5a78cc56dcc0851117b3c88bb3af16a\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>cache_aligned_allocator</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:ab5a78cc56dcc0851117b3c88bb3af16a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39aa68042abff22210f801eab98f6dfa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39aa68042abff22210f801eab98f6dfa\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a39aa68042abff22210f801eab98f6dfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bd8fe0e5de894404c8b868b37a0fe53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bd8fe0e5de894404c8b868b37a0fe53\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:a5bd8fe0e5de894404c8b868b37a0fe53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99d05096f80877849cb31d80247e0f85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99d05096f80877849cb31d80247e0f85\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">allocate</a> (size_type n, const void *hint=0)</td></tr>\n<tr class=\"memdesc:a99d05096f80877849cb31d80247e0f85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects, starting on a cache/sector line. <br/></td></tr>\n<tr class=\"separator:a99d05096f80877849cb31d80247e0f85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f7310e046c4b6b8618864de8e27a471\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free block of memory that starts on a cache line. <br/></td></tr>\n<tr class=\"separator:a7f7310e046c4b6b8618864de8e27a471\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b945b3180ea3dfe16dfa048f4591c6d\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a4b945b3180ea3dfe16dfa048f4591c6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab316f80a66b991801b4ec4ea88b852d9\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ab316f80a66b991801b4ec4ea88b852d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5b39984a3eee60e5bf0f10ef609dc4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5b39984a3eee60e5bf0f10ef609dc4c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:ac5b39984a3eee60e5bf0f10ef609dc4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5086d395a952eb13eb7d72bb0cb26937\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5086d395a952eb13eb7d72bb0cb26937\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a5086d395a952eb13eb7d72bb0cb26937\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af2fd054d055403d4ea669fd3af661cc8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:af2fd054d055403d4ea669fd3af661cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::cache_aligned_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00042.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00288.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00042.html#details\">More...</a></p>\n\n<p><code>#include &lt;cache_aligned_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a630325567e2ede3937a0d2e0f2da6a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a630325567e2ede3937a0d2e0f2da6a3f\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a630325567e2ede3937a0d2e0f2da6a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36f63efa0a37d205705b9d5944432864\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a36f63efa0a37d205705b9d5944432864\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a36f63efa0a37d205705b9d5944432864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af7f973d0bb12319600505cf9c1fb35b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af7f973d0bb12319600505cf9c1fb35b0\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:af7f973d0bb12319600505cf9c1fb35b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::cache_aligned_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00043.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00380.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b242f28514cb0e4fb2e462c8fead03e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b242f28514cb0e4fb2e462c8fead03e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call_clear_on_leave</b> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *a_ch_map)</td></tr>\n<tr class=\"separator:a4b242f28514cb0e4fb2e462c8fead03e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e56acf6cbc5a9bc38018a8640050054\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e56acf6cbc5a9bc38018a8640050054\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>dismiss</b> ()</td></tr>\n<tr class=\"separator:a0e56acf6cbc5a9bc38018a8640050054\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a22e1559dccd2fd4345ca0ff389c6ad29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a22e1559dccd2fd4345ca0ff389c6ad29\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_ch_map</b></td></tr>\n<tr class=\"separator:a22e1559dccd2fd4345ca0ff389c6ad29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00044.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::callback&lt; Callback, T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00044.html\">callback</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00354.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback&lt; Callback, T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::callback&lt; Callback, T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00044.png\" usemap=\"#tbb::flow::interface10::callback&lt; Callback, T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::callback&lt; Callback, T &gt;_map\" name=\"tbb::flow::interface10::callback&lt; Callback, T &gt;_map\">\n<area href=\"a00045.html\" alt=\"tbb::flow::interface10::callback_base\" shape=\"rect\" coords=\"0,56,270,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4dc2b032a93148fd48a7034532328e18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4dc2b032a93148fd48a7034532328e18\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>callback</b> (Callback c, const T &amp;t)</td></tr>\n<tr class=\"separator:a4dc2b032a93148fd48a7034532328e18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0b459c3cb4e56835c06434ee769c156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0b459c3cb4e56835c06434ee769c156\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call</b> () __TBB_override</td></tr>\n<tr class=\"separator:aa0b459c3cb4e56835c06434ee769c156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00045.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::callback_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00045.html\">callback_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00353.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback_base Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::callback_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00045.png\" usemap=\"#tbb::flow::interface10::callback_base_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::callback_base_map\" name=\"tbb::flow::interface10::callback_base_map\">\n<area href=\"a00044.html\" alt=\"tbb::flow::interface10::callback&lt; Callback, T &gt;\" shape=\"rect\" coords=\"0,112,270,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad46b9f76e7c7f26d23698935bb6d7f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad46b9f76e7c7f26d23698935bb6d7f39\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>call</b> ()=0</td></tr>\n<tr class=\"separator:ad46b9f76e7c7f26d23698935bb6d7f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00046.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::captured_exception Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00339.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::captured_exception Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This class is used by TBB to propagate information about unhandled exceptions into the root thread.  \n <a href=\"a00046.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::captured_exception:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00046.png\" usemap=\"#tbb::captured_exception_map\" alt=\"\"/>\n  <map id=\"tbb::captured_exception_map\" name=\"tbb::captured_exception_map\">\n<area href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\" alt=\"tbb::tbb_exception\" shape=\"rect\" coords=\"0,56,146,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a56f6c51b6d4f8ce31669457ff8f0c07f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56f6c51b6d4f8ce31669457ff8f0c07f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>captured_exception</b> (const <a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a56f6c51b6d4f8ce31669457ff8f0c07f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3d72662db6a2badffa95a649a6c0bdd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3d72662db6a2badffa95a649a6c0bdd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>captured_exception</b> (const char *name_, const char *info)</td></tr>\n<tr class=\"separator:ab3d72662db6a2badffa95a649a6c0bdd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78a66603238d40da9ec6a750b6a2425c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a78a66603238d40da9ec6a750b6a2425c\"></a>\n<a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a78a66603238d40da9ec6a750b6a2425c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00046.html\">captured_exception</a> <br class=\"typebreak\"/>\n*__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">move</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a3b75205c631b51a00faf98c9e107f78a\">More...</a><br/></td></tr>\n<tr class=\"separator:a3b75205c631b51a00faf98c9e107f78a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">destroy</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#abfc1220a6f9da0361082a3f3ad80cdc9\">More...</a><br/></td></tr>\n<tr class=\"separator:abfc1220a6f9da0361082a3f3ad80cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">throw_self</a> () __TBB_override</td></tr>\n<tr class=\"memdesc:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#a6df0d3a1943ca6f84a9a9aca25e9633d\">More...</a><br/></td></tr>\n<tr class=\"separator:a6df0d3a1943ca6f84a9a9aca25e9633d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a543e1a18c9a3f3b093c8c2bd927a6d12\"></a>\nconst char *__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:a543e1a18c9a3f3b093c8c2bd927a6d12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e9d36a304dd7e49906754a0cb72da2e\"></a>\nconst char *__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">what</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:a1e9d36a304dd7e49906754a0cb72da2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa72deb29316e8c08700f7e6afa4a48e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa72deb29316e8c08700f7e6afa4a48e8\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set</b> (const char *<a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a>, const char *info)  throw ()</td></tr>\n<tr class=\"separator:aa72deb29316e8c08700f7e6afa4a48e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b160c0fc5d2fab90df2be96ea14088a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b160c0fc5d2fab90df2be96ea14088a\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()  throw ()</td></tr>\n<tr class=\"separator:a0b160c0fc5d2fab90df2be96ea14088a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00169\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00169')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>This class is used by TBB to propagate information about unhandled exceptions into the root thread. </p>\n<p>Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. </p>\n<dl class=\"section see\"><dt>See Also</dt><dd><a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> </dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"abfc1220a6f9da0361082a3f3ad80cdc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3b75205c631b51a00faf98c9e107f78a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00046.html\">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6df0d3a1943ca6f84a9a9aca25e9633d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::captured_exception::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00047.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::combinable&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00047.html\">combinable</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00290.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::combinable&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Thread-local storage with optional reduction.  \n <a href=\"a00047.html#details\">More...</a></p>\n\n<p><code>#include &lt;combinable.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab3c539d5731faaafd81979b207a4fa1f\"></a>\ntemplate&lt;typename finit &gt; </td></tr>\n<tr class=\"memitem:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combinable</b> (finit _finit)</td></tr>\n<tr class=\"separator:ab3c539d5731faaafd81979b207a4fa1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a52f00cf262d768048db72ab73c8f3ca4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">~combinable</a> ()</td></tr>\n<tr class=\"memdesc:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destructor <br/></td></tr>\n<tr class=\"separator:a52f00cf262d768048db72ab73c8f3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a376f44cba71450fc18ccddaad61b76cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a376f44cba71450fc18ccddaad61b76cc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable</b> (const <a class=\"el\" href=\"a00047.html\">combinable</a> &amp;other)</td></tr>\n<tr class=\"separator:a376f44cba71450fc18ccddaad61b76cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae227b3906cd4ee6e5e2e5e840a3ff8e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae227b3906cd4ee6e5e2e5e840a3ff8e6\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable</b> (<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:ae227b3906cd4ee6e5e2e5e840a3ff8e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab011fbe2f0600900b6e1b9760d82aead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab011fbe2f0600900b6e1b9760d82aead\"></a>\n<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00047.html\">combinable</a> &amp;other)</td></tr>\n<tr class=\"separator:ab011fbe2f0600900b6e1b9760d82aead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a780f6aeeed80b1c974f22c76907df8c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a780f6aeeed80b1c974f22c76907df8c9\"></a>\n<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00047.html\">combinable</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:a780f6aeeed80b1c974f22c76907df8c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ecfe80161a59f04ffd9676e79701de6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ecfe80161a59f04ffd9676e79701de6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a8ecfe80161a59f04ffd9676e79701de6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae47f982dbd396d225f0f546e60690d42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae47f982dbd396d225f0f546e60690d42\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local</b> ()</td></tr>\n<tr class=\"separator:ae47f982dbd396d225f0f546e60690d42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2433d2b3b53b9979d0b3bb2a175abc9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2433d2b3b53b9979d0b3bb2a175abc9b\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local</b> (bool &amp;exists)</td></tr>\n<tr class=\"separator:a2433d2b3b53b9979d0b3bb2a175abc9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3d564f6d480e0c7fe8e756d1de1cf0e2\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:a3d564f6d480e0c7fe8e756d1de1cf0e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aadadee714004d977f0e95a479bfb80ac\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine_each</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:aadadee714004d977f0e95a479bfb80ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::combinable&lt; T &gt;</h3>\n\n<p>Thread-local storage with optional reduction. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>combinable.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00048.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00048.html\">concrete_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00049.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00291.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A high-performance thread-safe blocking concurrent bounded queue.  \n <a href=\"a00049.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_queue.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_bounded_queue&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00049.png\" usemap=\"#tbb::concurrent_bounded_queue&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_bounded_queue&lt; T, A &gt;_map\" name=\"tbb::concurrent_bounded_queue&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6eb564625fef03dd9a5881d5d4e52f9f\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">value_type</a></td></tr>\n<tr class=\"memdesc:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:a6eb564625fef03dd9a5881d5d4e52f9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbfceb845de1c770e2b56409f09b0364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbfceb845de1c770e2b56409f09b0364\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a></td></tr>\n<tr class=\"memdesc:acbfceb845de1c770e2b56409f09b0364\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:acbfceb845de1c770e2b56409f09b0364\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fa4002bcd265d9d3ed305e3b686f1da\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">reference</a></td></tr>\n<tr class=\"memdesc:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:a5fa4002bcd265d9d3ed305e3b686f1da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af838e520ce0db2c22369748c019b11cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af838e520ce0db2c22369748c019b11cb\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">const_reference</a></td></tr>\n<tr class=\"memdesc:af838e520ce0db2c22369748c019b11cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:af838e520ce0db2c22369748c019b11cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef std::ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a></td></tr>\n<tr class=\"memdesc:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue.  <a href=\"#ae73fa352d781bdb9d01bfb77f2a8bc28\">More...</a><br/></td></tr>\n<tr class=\"separator:ae73fa352d781bdb9d01bfb77f2a8bc28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72725361e050c5a981035a20ef1b773e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72725361e050c5a981035a20ef1b773e\"></a>\ntypedef std::ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">difference_type</a></td></tr>\n<tr class=\"memdesc:a72725361e050c5a981035a20ef1b773e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:a72725361e050c5a981035a20ef1b773e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42dfb71b1e4bdc0da3c1217d0d40ddd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a42dfb71b1e4bdc0da3c1217d0d40ddd5\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a42dfb71b1e4bdc0da3c1217d0d40ddd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18049841284051e18b854692bd04602c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18049841284051e18b854692bd04602c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a>, <br class=\"typebreak\"/>\nconst T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a18049841284051e18b854692bd04602c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85f8a800cae02b601f36ad7a655a0126\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a85f8a800cae02b601f36ad7a655a0126\">concurrent_bounded_queue</a> (const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty queue. <br/></td></tr>\n<tr class=\"separator:a85f8a800cae02b601f36ad7a655a0126\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad6fd2353d64c2c31d074cd99df58c02\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#aad6fd2353d64c2c31d074cd99df58c02\">concurrent_bounded_queue</a> (const <a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;src, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:aad6fd2353d64c2c31d074cd99df58c02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a228b9d3bf3158a9379748894a93fbe55\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">concurrent_bounded_queue</a> (<a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructors. <br/></td></tr>\n<tr class=\"separator:a228b9d3bf3158a9379748894a93fbe55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed0303dafc38c5088ae62ac023fffb4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed0303dafc38c5088ae62ac023fffb4e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_bounded_queue</b> (<a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"separator:aed0303dafc38c5088ae62ac023fffb4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afcfdc998e106fdb7b2dfa5df880cd9cf\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#afcfdc998e106fdb7b2dfa5df880cd9cf\">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:afcfdc998e106fdb7b2dfa5df880cd9cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1291bf6837ecfb8836c24dde5dd80b5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">~concurrent_bounded_queue</a> ()</td></tr>\n<tr class=\"memdesc:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy queue. <br/></td></tr>\n<tr class=\"separator:ab1291bf6837ecfb8836c24dde5dd80b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae5e9051772bbc93b2ccb8fd0a98a21f5\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:ae5e9051772bbc93b2ccb8fd0a98a21f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a62a03e9c185562254ecb4104f38c106d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a62a03e9c185562254ecb4104f38c106d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">push</a> (T &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:a62a03e9c185562254ecb4104f38c106d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:a62a03e9c185562254ecb4104f38c106d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab9009e8a1bdf70623f6480681bb6b56a\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:ab9009e8a1bdf70623f6480681bb6b56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">pop</a> (T &amp;destination)</td></tr>\n<tr class=\"memdesc:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dequeue item from head of queue.  <a href=\"#a87926c31967a918ce80690a9ed5d6fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:a87926c31967a918ce80690a9ed5d6fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77a755d94cabf5208905d10d5b57419c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a77a755d94cabf5208905d10d5b57419c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">abort</a> ()</td></tr>\n<tr class=\"memdesc:a77a755d94cabf5208905d10d5b57419c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Abort all pending queue operations. <br/></td></tr>\n<tr class=\"separator:a77a755d94cabf5208905d10d5b57419c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03d93a240841a21788396bebd71c51bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a03d93a240841a21788396bebd71c51bd\">try_push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:a03d93a240841a21788396bebd71c51bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue if queue is not already full.  <a href=\"#a03d93a240841a21788396bebd71c51bd\">More...</a><br/></td></tr>\n<tr class=\"separator:a03d93a240841a21788396bebd71c51bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">try_push</a> (T &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move an item at tail of queue if queue is not already full.  <a href=\"#a93f35e9d9381629e0a2993f9fdd96d92\">More...</a><br/></td></tr>\n<tr class=\"separator:a93f35e9d9381629e0a2993f9fdd96d92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0a4351eb8c93b6b2d9feaff0c7088ee8\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a0a4351eb8c93b6b2d9feaff0c7088ee8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">try_pop</a> (T &amp;destination)</td></tr>\n<tr class=\"memdesc:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attempt to dequeue an item from head of queue.  <a href=\"#a3086cb4dcdeee245ef5cf34f72fb3e10\">More...</a><br/></td></tr>\n<tr class=\"separator:a3086cb4dcdeee245ef5cf34f72fb3e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">size</a> () const </td></tr>\n<tr class=\"memdesc:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return number of pushes minus number of pops.  <a href=\"#a9d6c20fd8c193c12b6a7b0c3101fd966\">More...</a><br/></td></tr>\n<tr class=\"separator:a9d6c20fd8c193c12b6a7b0c3101fd966\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8c59578f28c5fb4718b0eff43776e879\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Equivalent to <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\" title=\"Return number of pushes minus number of pops. \">size()</a>&lt;=0. <br/></td></tr>\n<tr class=\"separator:a8c59578f28c5fb4718b0eff43776e879\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a526487063242569685af8c8d778d39e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a526487063242569685af8c8d778d39e0\"></a>\n<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">capacity</a> () const </td></tr>\n<tr class=\"memdesc:a526487063242569685af8c8d778d39e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of allowed elements. <br/></td></tr>\n<tr class=\"separator:a526487063242569685af8c8d778d39e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a768699675813575eec08c1f43afda395\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">set_capacity</a> (<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> new_capacity)</td></tr>\n<tr class=\"memdesc:a768699675813575eec08c1f43afda395\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set the capacity.  <a href=\"#a768699675813575eec08c1f43afda395\">More...</a><br/></td></tr>\n<tr class=\"separator:a768699675813575eec08c1f43afda395\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeba11bbcd368a7a3a6e6e2dd3082c9c\"></a>\n<a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:aaeba11bbcd368a7a3a6e6e2dd3082c9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a246be3920e079ea4847933f106baa98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a246be3920e079ea4847933f106baa98f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a246be3920e079ea4847933f106baa98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">clear the queue. not thread-safe. <br/></td></tr>\n<tr class=\"separator:a246be3920e079ea4847933f106baa98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0c931eaa1ddc30025e49d06cc383703\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac0c931eaa1ddc30025e49d06cc383703\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> ()</td></tr>\n<tr class=\"separator:ac0c931eaa1ddc30025e49d06cc383703\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a634cece9742cbaba56ba6f7777568e4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a634cece9742cbaba56ba6f7777568e4c\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> ()</td></tr>\n<tr class=\"separator:a634cece9742cbaba56ba6f7777568e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ed2f8130fd679e89327cb292fb25510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2ed2f8130fd679e89327cb292fb25510\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> () const </td></tr>\n<tr class=\"separator:a2ed2f8130fd679e89327cb292fb25510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a873d62f59fd79959c0204f5fb44c774d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a873d62f59fd79959c0204f5fb44c774d\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> () const </td></tr>\n<tr class=\"separator:a873d62f59fd79959c0204f5fb44c774d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1f5eec0de2e660ea5372d19393f0920b\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concurrent_queue_iterator</b></td></tr>\n<tr class=\"separator:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::concurrent_bounded_queue&lt; T, A &gt;</h3>\n\n<p>A high-performance thread-safe blocking concurrent bounded queue. </p>\n<p>This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>\n</div><h2 class=\"groupheader\">Member Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ae73fa352d781bdb9d01bfb77f2a8bc28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef std::ptrdiff_t <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::<a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Integral type for representing size of the queue. </p>\n<p>Note that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a87926c31967a918ce80690a9ed5d6fa8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>destination</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Dequeue item from head of queue. </p>\n<p>Block until an item becomes available, and then dequeue it. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a768699675813575eec08c1f43afda395\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::set_capacity </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a>&#160;</td>\n          <td class=\"paramname\"><em>new_capacity</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set the capacity. </p>\n<p>Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9d6c20fd8c193c12b6a7b0c3101fd966\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Return number of pushes minus number of pops. </p>\n<p>Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\" title=\"Maximum number of allowed elements. \">capacity()</a> if there are push operations in flight. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3086cb4dcdeee245ef5cf34f72fb3e10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>destination</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attempt to dequeue an item from head of queue. </p>\n<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a03d93a240841a21788396bebd71c51bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_push </td>\n          <td>(</td>\n          <td class=\"paramtype\">const T &amp;&#160;</td>\n          <td class=\"paramname\"><em>source</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enqueue an item at tail of queue if queue is not already full. </p>\n<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a93f35e9d9381629e0a2993f9fdd96d92\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , class A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_push </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>source</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move an item at tail of queue if queue is not already full. </p>\n<p>Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00050.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00376.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Unordered map from Key to T.  \n <a href=\"a00050.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00050.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows write access to elements and combines data access, locking, and garbage collection.  <a href=\"a00017.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href=\"a00040.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Combines data access, locking, and garbage collection.  <a href=\"a00061.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">node</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a73476eabf0605a4a17e33eca379b567c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73476eabf0605a4a17e33eca379b567c\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a73476eabf0605a4a17e33eca379b567c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09f82b7e1255cd4a7ab13f694f04e0a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a09f82b7e1255cd4a7ab13f694f04e0a2\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a09f82b7e1255cd4a7ab13f694f04e0a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10da770ec791fd8f3bddbf19d852b2f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10da770ec791fd8f3bddbf19d852b2f6\"></a>\ntypedef std::pair&lt; const Key, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a10da770ec791fd8f3bddbf19d852b2f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4346b898af1007960c70b1d5a12b3dda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4346b898af1007960c70b1d5a12b3dda\"></a>\ntypedef hash_map_base::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a4346b898af1007960c70b1d5a12b3dda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae6344f41fc1b2aae8b310442f609db0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae6344f41fc1b2aae8b310442f609db0\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:aae6344f41fc1b2aae8b310442f609db0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8fca882f67e98d54a675c9b75db3cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af8fca882f67e98d54a675c9b75db3cc0\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:af8fca882f67e98d54a675c9b75db3cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acaf14214618545aa7e0aa59a3af4a6bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acaf14214618545aa7e0aa59a3af4a6bd\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:acaf14214618545aa7e0aa59a3af4a6bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5064777ff7c17e294d74ca60f96f28db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5064777ff7c17e294d74ca60f96f28db\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a5064777ff7c17e294d74ca60f96f28db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6291ee6059597aac8f59dc8fd5558036\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6291ee6059597aac8f59dc8fd5558036\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a6291ee6059597aac8f59dc8fd5558036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6af7bf91f1cbd859aef1ffc6197b41a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae6af7bf91f1cbd859aef1ffc6197b41a\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a>, <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:ae6af7bf91f1cbd859aef1ffc6197b41a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af416067eaf691c88e6b73bf3b3323f66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af416067eaf691c88e6b73bf3b3323f66\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a>, const <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:af416067eaf691c88e6b73bf3b3323f66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69508e67134dd5282b89e1847e71c31b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69508e67134dd5282b89e1847e71c31b\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_range<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a69508e67134dd5282b89e1847e71c31b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b9d06751969eacda84b01582e4aa1d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b9d06751969eacda84b01582e4aa1d2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::hash_map_range<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a0b9d06751969eacda84b01582e4aa1d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85c266c1560f7faa64772d349d0280a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85c266c1560f7faa64772d349d0280a4\"></a>\ntypedef Allocator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a85c266c1560f7faa64772d349d0280a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa3a9767b525144a2afb69ed125714c53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3a9767b525144a2afb69ed125714c53\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">concurrent_hash_map</a> (const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aa3a9767b525144a2afb69ed125714c53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table. <br/></td></tr>\n<tr class=\"separator:aa3a9767b525144a2afb69ed125714c53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae76e1252b56b107685f8746e0f6a1f4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aae76e1252b56b107685f8746e0f6a1f4\">concurrent_hash_map</a> (size_type n, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>\n<tr class=\"separator:aae76e1252b56b107685f8746e0f6a1f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a73b86f9a5e9836b38713e56c546654\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8a73b86f9a5e9836b38713e56c546654\">concurrent_hash_map</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:a8a73b86f9a5e9836b38713e56c546654\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2bd04845683b15a590913a72a19fa3dc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2bd04845683b15a590913a72a19fa3dc\">concurrent_hash_map</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"memdesc:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:a2bd04845683b15a590913a72a19fa3dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad642e497153df5669e6454acef095675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad642e497153df5669e6454acef095675\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad642e497153df5669e6454acef095675\">concurrent_hash_map</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table, const allocator_type &amp;a)</td></tr>\n<tr class=\"memdesc:ad642e497153df5669e6454acef095675\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:ad642e497153df5669e6454acef095675\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad56fc19d656099d49051f3c363cefc89\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad56fc19d656099d49051f3c363cefc89\">concurrent_hash_map</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:ad56fc19d656099d49051f3c363cefc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with copying iteration range and given allocator instance. <br/></td></tr>\n<tr class=\"separator:ad56fc19d656099d49051f3c363cefc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57149f90060b033b1f2493f2a88ef291\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a57149f90060b033b1f2493f2a88ef291\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a57149f90060b033b1f2493f2a88ef291\">concurrent_hash_map</a> (std::initializer_list&lt; value_type &gt; il, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a57149f90060b033b1f2493f2a88ef291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br/></td></tr>\n<tr class=\"separator:a57149f90060b033b1f2493f2a88ef291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63e01b1f79c287ae0257ccfd483fd90a\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">operator=</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table)</td></tr>\n<tr class=\"memdesc:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:a63e01b1f79c287ae0257ccfd483fd90a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92b506ceed93d1c25979948961054380\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a92b506ceed93d1c25979948961054380\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">operator=</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"memdesc:a92b506ceed93d1c25979948961054380\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move Assignment. <br/></td></tr>\n<tr class=\"separator:a92b506ceed93d1c25979948961054380\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aac73665b1a55e3de7332f36598488252\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aac73665b1a55e3de7332f36598488252\"></a>\n<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">operator=</a> (std::initializer_list&lt; value_type &gt; il)</td></tr>\n<tr class=\"memdesc:aac73665b1a55e3de7332f36598488252\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:aac73665b1a55e3de7332f36598488252\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf1fa9470c605731063e5949f0418eb7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">rehash</a> (size_type n=0)</td></tr>\n<tr class=\"memdesc:adf1fa9470c605731063e5949f0418eb7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rehashes and optionally resizes the whole table.  <a href=\"#adf1fa9470c605731063e5949f0418eb7\">More...</a><br/></td></tr>\n<tr class=\"separator:adf1fa9470c605731063e5949f0418eb7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8295bc260b5e4df883fef11574b84c6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear table. <br/></td></tr>\n<tr class=\"separator:ab8295bc260b5e4df883fef11574b84c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ce9ab8c954bf6979c2c57d10fd8a8ed\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">~concurrent_hash_map</a> ()</td></tr>\n<tr class=\"memdesc:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear table and destroy it. <br/></td></tr>\n<tr class=\"separator:a9ce9ab8c954bf6979c2c57d10fd8a8ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10dc8d8b91878b211c12a3e6b1bb38bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10dc8d8b91878b211c12a3e6b1bb38bb\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range</b> (size_type grainsize=1)</td></tr>\n<tr class=\"separator:a10dc8d8b91878b211c12a3e6b1bb38bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8698274a4ffb94bb0468c387ffdc2e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8698274a4ffb94bb0468c387ffdc2e56\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range</b> (size_type grainsize=1) const </td></tr>\n<tr class=\"separator:a8698274a4ffb94bb0468c387ffdc2e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a38b7d6443502ee9f4c2374d34ea8d742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a38b7d6443502ee9f4c2374d34ea8d742\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a38b7d6443502ee9f4c2374d34ea8d742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa85633d3fc7494f49728b4064db59f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa85633d3fc7494f49728b4064db59f6\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:afa85633d3fc7494f49728b4064db59f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46aa6dc98653a88d410d0cfddd514f0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46aa6dc98653a88d410d0cfddd514f0d\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a46aa6dc98653a88d410d0cfddd514f0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ed8cd11a3a5c400d9bc11492d136dfd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0ed8cd11a3a5c400d9bc11492d136dfd\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a0ed8cd11a3a5c400d9bc11492d136dfd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01a1c3032bb193a5c4f37425adbe306c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01a1c3032bb193a5c4f37425adbe306c\"></a>\nstd::pair&lt; iterator, iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>equal_range</b> (const Key &amp;key)</td></tr>\n<tr class=\"separator:a01a1c3032bb193a5c4f37425adbe306c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af368c8d8f49a9a74706c9ed11f8fd7e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af368c8d8f49a9a74706c9ed11f8fd7e4\"></a>\nstd::pair&lt; const_iterator, <br class=\"typebreak\"/>\nconst_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>equal_range</b> (const Key &amp;key) const </td></tr>\n<tr class=\"separator:af368c8d8f49a9a74706c9ed11f8fd7e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2ce6da7cd62bc7425f0a29498332ab4\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">size</a> () const </td></tr>\n<tr class=\"memdesc:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of items in table. <br/></td></tr>\n<tr class=\"separator:ad2ce6da7cd62bc7425f0a29498332ab4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e05f2a1ca3accfb4252d7ee82d1e990\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\" title=\"Number of items in table. \">size()</a>==0. <br/></td></tr>\n<tr class=\"separator:a5e05f2a1ca3accfb4252d7ee82d1e990\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea0a0e5220a0dcb67da57d0280d36005\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">max_size</a> () const </td></tr>\n<tr class=\"memdesc:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upper bound on size. <br/></td></tr>\n<tr class=\"separator:aea0a0e5220a0dcb67da57d0280d36005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa067a2a4db1d96f38555369a89deee64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa067a2a4db1d96f38555369a89deee64\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">bucket_count</a> () const </td></tr>\n<tr class=\"memdesc:aa067a2a4db1d96f38555369a89deee64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the current number of buckets. <br/></td></tr>\n<tr class=\"separator:aa067a2a4db1d96f38555369a89deee64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a121865c574f8ae5cae69ed3d6b7e0511\"></a>\nallocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:a121865c574f8ae5cae69ed3d6b7e0511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c8edf603bc776a6c84c007702c1808e\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">swap</a> (<a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;table)</td></tr>\n<tr class=\"memdesc:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">swap two instances. Iterators are invalidated <br/></td></tr>\n<tr class=\"separator:a4c8edf603bc776a6c84c007702c1808e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac375d3884bf9c80efe56117757c822e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac375d3884bf9c80efe56117757c822e7\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">count</a> (const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:ac375d3884bf9c80efe56117757c822e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return count of items (0 or 1) <br/></td></tr>\n<tr class=\"separator:ac375d3884bf9c80efe56117757c822e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">find</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find item and acquire a read lock on the item.  <a href=\"#a27a3f296dc170ae25f8e3fd9efa93cff\">More...</a><br/></td></tr>\n<tr class=\"separator:a27a3f296dc170ae25f8e3fd9efa93cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b61799e2018381b5ee4b78752a41483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a6b61799e2018381b5ee4b78752a41483\">find</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a6b61799e2018381b5ee4b78752a41483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find item and acquire a write lock on the item.  <a href=\"#a6b61799e2018381b5ee4b78752a41483\">More...</a><br/></td></tr>\n<tr class=\"separator:a6b61799e2018381b5ee4b78752a41483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item (if not already present) and acquire a read lock on the item.  <a href=\"#aaebb10a9e9dcb24e63860caa745a281d\">More...</a><br/></td></tr>\n<tr class=\"separator:aaebb10a9e9dcb24e63860caa745a281d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a766c6033c203e8f342501d85a7cf3405\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a766c6033c203e8f342501d85a7cf3405\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a766c6033c203e8f342501d85a7cf3405\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item (if not already present) and acquire a write lock on the item.  <a href=\"#a766c6033c203e8f342501d85a7cf3405\">More...</a><br/></td></tr>\n<tr class=\"separator:a766c6033c203e8f342501d85a7cf3405\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#ae0b420cdb752e749790c8a7daa15c3c2\">More...</a><br/></td></tr>\n<tr class=\"separator:ae0b420cdb752e749790c8a7daa15c3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2047214e041b7674c3b83e204d0d6c6a\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a2047214e041b7674c3b83e204d0d6c6a\">More...</a><br/></td></tr>\n<tr class=\"separator:a2047214e041b7674c3b83e204d0d6c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8e39501f9edb3210504c9c4ca05384b7\">insert</a> (const value_type &amp;value)</td></tr>\n<tr class=\"memdesc:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#a8e39501f9edb3210504c9c4ca05384b7\">More...</a><br/></td></tr>\n<tr class=\"separator:a8e39501f9edb3210504c9c4ca05384b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a446910c1ca4818bdb00f4ffa91b9108a\">insert</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#a446910c1ca4818bdb00f4ffa91b9108a\">More...</a><br/></td></tr>\n<tr class=\"separator:a446910c1ca4818bdb00f4ffa91b9108a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50c929e78ecfa36986c8821287665a70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">insert</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a50c929e78ecfa36986c8821287665a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a50c929e78ecfa36986c8821287665a70\">More...</a><br/></td></tr>\n<tr class=\"separator:a50c929e78ecfa36986c8821287665a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">insert</a> (value_type &amp;&amp;value)</td></tr>\n<tr class=\"memdesc:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">More...</a><br/></td></tr>\n<tr class=\"separator:a5d3da283d2e74c7ff0ecb0dfd4d371fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">emplace</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href=\"#a382178ea2f00f69096c91bcf76ae7913\">More...</a><br/></td></tr>\n<tr class=\"separator:a382178ea2f00f69096c91bcf76ae7913\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a17e51c8864282c35aa4d23f22909cc4a\">emplace</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href=\"#a17e51c8864282c35aa4d23f22909cc4a\">More...</a><br/></td></tr>\n<tr class=\"separator:a17e51c8864282c35aa4d23f22909cc4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">emplace</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert item by copying if there is no such key present already.  <a href=\"#acbe1d0f3a87786a83a7021af2ef52ee0\">More...</a><br/></td></tr>\n<tr class=\"separator:acbe1d0f3a87786a83a7021af2ef52ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab84dfd77316252cbf39c7ae89e365a00\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#ab84dfd77316252cbf39c7ae89e365a00\">insert</a> (I first, I last)</td></tr>\n<tr class=\"memdesc:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert range [first, last) <br/></td></tr>\n<tr class=\"separator:ab84dfd77316252cbf39c7ae89e365a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a580fdba266e87106ad41470479f641d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a580fdba266e87106ad41470479f641d6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a580fdba266e87106ad41470479f641d6\">insert</a> (std::initializer_list&lt; value_type &gt; il)</td></tr>\n<tr class=\"memdesc:a580fdba266e87106ad41470479f641d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert initializer list. <br/></td></tr>\n<tr class=\"separator:a580fdba266e87106ad41470479f641d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5144122dbb946d933b94a92117543b33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a5144122dbb946d933b94a92117543b33\">erase</a> (const Key &amp;key)</td></tr>\n<tr class=\"memdesc:a5144122dbb946d933b94a92117543b33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item.  <a href=\"#a5144122dbb946d933b94a92117543b33\">More...</a><br/></td></tr>\n<tr class=\"separator:a5144122dbb946d933b94a92117543b33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">erase</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item by <a class=\"el\" href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \">const_accessor</a>.  <a href=\"#a2ec6f95ed9beda9d32df56cdd45c1842\">More...</a><br/></td></tr>\n<tr class=\"separator:a2ec6f95ed9beda9d32df56cdd45c1842\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">erase</a> (<a class=\"el\" href=\"a00017.html\">accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Erase item by accessor.  <a href=\"#a3ed0fbcc6cfd4db8242e100355ac1fa5\">More...</a><br/></td></tr>\n<tr class=\"separator:a3ed0fbcc6cfd4db8242e100355ac1fa5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a81dddc5d509f7f074d84d9c38e83efb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a81dddc5d509f7f074d84d9c38e83efb9\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; <a class=\"el\" href=\"a00098.html\">node</a> &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node_allocator_type</b></td></tr>\n<tr class=\"separator:a81dddc5d509f7f074d84d9c38e83efb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:aed0e0def29516d9ee7aab2192727b69b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed0e0def29516d9ee7aab2192727b69b\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>delete_node</b> (node_base *n)</td></tr>\n<tr class=\"separator:aed0e0def29516d9ee7aab2192727b69b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae44a70417f9674a2169f9a1fd437a3bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae44a70417f9674a2169f9a1fd437a3bd\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>search_bucket</b> (const key_type &amp;key, bucket *b) const </td></tr>\n<tr class=\"separator:ae44a70417f9674a2169f9a1fd437a3bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b57e036f82bc2b1ef1ede41b02d46b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b57e036f82bc2b1ef1ede41b02d46b5\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>\n<tr class=\"separator:a1b57e036f82bc2b1ef1ede41b02d46b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a319cf46fb9cf9a88aab6c0a20c98b3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">lookup</a> (bool op_insert, const Key &amp;key, const T *t, <a class=\"el\" href=\"a00061.html\">const_accessor</a> *result, bool write, <a class=\"el\" href=\"a00098.html\">node</a> *(*allocate_node)(node_allocator_type &amp;, const Key &amp;, const T *), <a class=\"el\" href=\"a00098.html\">node</a> *tmp_n=0)</td></tr>\n<tr class=\"memdesc:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Insert or find item and optionally acquire a lock on the item. <br/></td></tr>\n<tr class=\"separator:a2a319cf46fb9cf9a88aab6c0a20c98b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6204ad5c57618556931e4c90e1938d1e\"></a>\ntemplate&lt;typename Accessor &gt; </td></tr>\n<tr class=\"memitem:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>generic_move_insert</b> (Accessor &amp;&amp;result, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:a6204ad5c57618556931e4c90e1938d1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a81c0a242bf8d4a210d74d551dbc61c18\"></a>\ntemplate&lt;typename Accessor , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>generic_emplace</b> (Accessor &amp;&amp;result, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a81c0a242bf8d4a210d74d551dbc61c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6fec452b31b8f0e185dc2de64b7128b2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">exclude</a> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;item_accessor)</td></tr>\n<tr class=\"memdesc:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">delete item by accessor <br/></td></tr>\n<tr class=\"separator:a6fec452b31b8f0e185dc2de64b7128b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8603f5288db63ec35a16844427e97e42\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8603f5288db63ec35a16844427e97e42\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a8603f5288db63ec35a16844427e97e42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::pair&lt; I, I &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">internal_equal_range</a> (const Key &amp;key, I end) const </td></tr>\n<tr class=\"memdesc:a8603f5288db63ec35a16844427e97e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true) <br/></td></tr>\n<tr class=\"separator:a8603f5288db63ec35a16844427e97e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0bc3593f82b3b4f9839fc051780212ab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">internal_copy</a> (const <a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> &amp;source)</td></tr>\n<tr class=\"memdesc:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy \"source\" to *this, where *this must start out empty. <br/></td></tr>\n<tr class=\"separator:a0bc3593f82b3b4f9839fc051780212ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76750c61ad670e130850148543f67147\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a76750c61ad670e130850148543f67147\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a76750c61ad670e130850148543f67147\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_copy</b> (I first, I last, size_type reserve_size)</td></tr>\n<tr class=\"separator:a76750c61ad670e130850148543f67147\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">internal_fast_find</a> (const Key &amp;key) const </td></tr>\n<tr class=\"memdesc:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href=\"#acbb5b18c097fb32f264b7b5fe8d9fdd4\">More...</a><br/></td></tr>\n<tr class=\"separator:acbb5b18c097fb32f264b7b5fe8d9fdd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:aa220373171ca2feccb74c23823c6329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa220373171ca2feccb74c23823c6329f\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_copy_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *t)</td></tr>\n<tr class=\"separator:aa220373171ca2feccb74c23823c6329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59416689b95d20f4d69e43a23aa4f300\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59416689b95d20f4d69e43a23aa4f300\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_move_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *t)</td></tr>\n<tr class=\"separator:a59416689b95d20f4d69e43a23aa4f300\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8e8388c1d433042b67d3cc12181189c3\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>allocate_node_emplace_construct</b> (node_allocator_type &amp;allocator, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a8e8388c1d433042b67d3cc12181189c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f92f68816357df14d30650b29ab94cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f92f68816357df14d30650b29ab94cb\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate_node_default_construct</b> (node_allocator_type &amp;allocator, const Key &amp;key, const T *)</td></tr>\n<tr class=\"separator:a1f92f68816357df14d30650b29ab94cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a684cc0d3eb4b6ba8b88a14189c40bb20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a684cc0d3eb4b6ba8b88a14189c40bb20\"></a>\nstatic <a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>do_not_allocate_node</b> (node_allocator_type &amp;, const Key &amp;, const T *)</td></tr>\n<tr class=\"separator:a684cc0d3eb4b6ba8b88a14189c40bb20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a2f3f082b2719a9e3c3c15a51a9564202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2f3f082b2719a9e3c3c15a51a9564202\"></a>\nnode_allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_allocator</b></td></tr>\n<tr class=\"separator:a2f3f082b2719a9e3c3c15a51a9564202\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae67c3c723768e7e396104f84577f7240\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67c3c723768e7e396104f84577f7240\"></a>\nHashCompare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ae67c3c723768e7e396104f84577f7240\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0ecadabdc31088d7bace5a0b6e5ee3f9\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::hash_map_iterator</b></td></tr>\n<tr class=\"separator:a0ecadabdc31088d7bace5a0b6e5ee3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad49112156111ee1b85be9f4b89e410ca\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::hash_map_range</b></td></tr>\n<tr class=\"separator:ad49112156111ee1b85be9f4b89e410ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584bf754a8408612d4bfd33a3eafd80d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a584bf754a8408612d4bfd33a3eafd80d\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_accessor</b></td></tr>\n<tr class=\"separator:a584bf754a8408612d4bfd33a3eafd80d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e234c756e22e65a3c99771fdeb67d7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e234c756e22e65a3c99771fdeb67d7a\"></a>\n<a class=\"el\" href=\"a00061.html\">const_accessor</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor_location</b> (<a class=\"el\" href=\"a00018.html\">accessor_not_used</a> const &amp;)</td></tr>\n<tr class=\"separator:a6e234c756e22e65a3c99771fdeb67d7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0216633e60539f42cf9d645d3f3b7117\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0216633e60539f42cf9d645d3f3b7117\"></a>\n<a class=\"el\" href=\"a00061.html\">const_accessor</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor_location</b> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;a)</td></tr>\n<tr class=\"separator:a0216633e60539f42cf9d645d3f3b7117\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa491682f70c12a8c7f783a427791ce4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa491682f70c12a8c7f783a427791ce4\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00017.html\">accessor</a> const &amp;)</td></tr>\n<tr class=\"separator:afa491682f70c12a8c7f783a427791ce4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34c835f5e1b689d1fbbff61519c0ef5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34c835f5e1b689d1fbbff61519c0ef5f\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00061.html\">const_accessor</a> const &amp;)</td></tr>\n<tr class=\"separator:a34c835f5e1b689d1fbbff61519c0ef5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b4bdfdc062d155dc1ace8cc18acc8d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b4bdfdc062d155dc1ace8cc18acc8d6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_write_access_needed</b> (<a class=\"el\" href=\"a00018.html\">accessor_not_used</a> const &amp;)</td></tr>\n<tr class=\"separator:a7b4bdfdc062d155dc1ace8cc18acc8d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</h3>\n\n<p>Unordered map from Key to T. </p>\n<pre class=\"fragment\">concurrent_hash_map is associative container with concurrent access.\n</pre><dl class=\"section user\"><dt>Compatibility</dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>\n<dl class=\"section user\"><dt>Exception Safety</dt><dd><ul>\n<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li>\n<li>If exception happens during <a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\" title=\"Insert item (if not already present) and acquire a read lock on the item. \">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li>\n<li>If exception happens during <a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\" title=\"Assignment. \">operator=()</a> operation, the container can have a part of source items, and methods <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\" title=\"Number of items in table. \">size()</a> and <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\" title=\"True if size()==0. \">empty()</a> can return wrong results.</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.1</dt><dd><ul>\n<li>Replaced internal algorithm and data structure. Patent is pending.</li>\n<li>Added buckets number argument for constructor</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.0</dt><dd><ul>\n<li>Fixed exception-safety</li>\n<li>Added template argument for allocator</li>\n<li>Added allocator argument in constructors</li>\n<li>Added constructor from a range of iterators</li>\n<li>Added several new overloaded <a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\" title=\"Insert item (if not already present) and acquire a read lock on the item. \">insert()</a> methods</li>\n<li>Added <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\" title=\"return allocator object \">get_allocator()</a></li>\n<li>Added <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\" title=\"swap two instances. Iterators are invalidated \">swap()</a></li>\n<li>Added <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\" title=\"Return count of items (0 or 1) \">count()</a></li>\n<li>Added overloaded <a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\" title=\"Erase item by accessor. \">erase(accessor &amp;)</a> and <a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\" title=\"Erase item by const_accessor. \">erase(const_accessor&amp;)</a></li>\n<li>Added equal_range() [const]</li>\n<li>Added [const_]pointer, [const_]reference, and allocator_type types</li>\n<li>Added global functions: operator==(), operator!=(), and <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\" title=\"swap two instances. Iterators are invalidated \">swap()</a> </li>\n</ul>\n</dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a382178ea2f00f69096c91bcf76ae7913\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a17e51c8864282c35aa4d23f22909cc4a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acbe1d0f3a87786a83a7021af2ef52ee0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5144122dbb946d933b94a92117543b33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Erase item. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n<p>References <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor::is_writer()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2ec6f95ed9beda9d32df56cdd45c1842\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item_accessor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Erase item by <a class=\"el\" href=\"a00061.html\" title=\"Combines data access, locking, and garbage collection. \">const_accessor</a>. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3ed0fbcc6cfd4db8242e100355ac1fa5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item_accessor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Erase item by accessor. </p>\n<p>Return true if item was erased by particularly this call. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a27a3f296dc170ae25f8e3fd9efa93cff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::find </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Find item and acquire a read lock on the item. </p>\n<p>Return true if item is found, false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6b61799e2018381b5ee4b78752a41483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::find </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Find item and acquire a write lock on the item. </p>\n<p>Return true if item is found, false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaebb10a9e9dcb24e63860caa745a281d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item (if not already present) and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a766c6033c203e8f342501d85a7cf3405\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item (if not already present) and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae0b420cdb752e749790c8a7daa15c3c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2047214e041b7674c3b83e204d0d6c6a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n<p>References <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor::release()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8e39501f9edb3210504c9c4ca05384b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\">const value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a446910c1ca4818bdb00f4ffa91b9108a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00061.html\">const_accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a read lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a50c929e78ecfa36986c8821287665a70\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00017.html\">accessor</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already and acquire a write lock on the item. </p>\n<p>Returns true if item is new. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5d3da283d2e74c7ff0ecb0dfd4d371fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::insert </td>\n          <td>(</td>\n          <td class=\"paramtype\">value_type &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Insert item by copying if there is no such key present already. </p>\n<p>Returns true if item is inserted. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acbb5b18c097fb32f264b7b5fe8d9fdd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare  = tbb_hash_compare&lt;Key&gt;, typename A  = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const_pointer <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::internal_fast_find </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Key &amp;&#160;</td>\n          <td class=\"paramname\"><em>key</em></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Fast find when no concurrent erasure is used. For internal use inside TBB only! </p>\n<p>Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adf1fa9470c605731063e5949f0418eb7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::rehash </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em> = <code>0</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rehashes and optionally resizes the whole table. </p>\n<p>Useful to optimize performance before or after concurrent operations. Also enables using of <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\" title=\"Find item and acquire a read lock on the item. \">find()</a> and <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\" title=\"Return count of items (0 or 1) \">count()</a> concurrent methods in serial context. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00051.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00398.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00051.png\" usemap=\"#tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\" name=\"tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac498dc4d73a75cbc0d50a15622f06e13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac498dc4d73a75cbc0d50a15622f06e13\"></a>\ntypedef handle_object&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>handle</b></td></tr>\n<tr class=\"separator:ac498dc4d73a75cbc0d50a15622f06e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad4c0b512bb4ad5109eaae1519ba06d98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4c0b512bb4ad5109eaae1519ba06d98\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_lru_cache</b> (value_function_type f, std::size_t number_of_lru_history_items)</td></tr>\n<tr class=\"separator:ad4c0b512bb4ad5109eaae1519ba06d98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a632c3911a55cfda997acce279c471ec3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a632c3911a55cfda997acce279c471ec3\"></a>\nhandle_object&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (key_type k)</td></tr>\n<tr class=\"separator:a632c3911a55cfda997acce279c471ec3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ab9fb998ff3f90c4dc7cefd09f8ff1365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab9fb998ff3f90c4dc7cefd09f8ff1365\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::internal::aggregating_functor&lt; self_type, aggregated_operation_type &gt;</b></td></tr>\n<tr class=\"separator:ab9fb998ff3f90c4dc7cefd09f8ff1365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_lru_cache.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00052.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00383.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Concurrent priority queue.  \n <a href=\"a00052.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_priority_queue.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c75d97ae429019363ab6fd1a872512e\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a></td></tr>\n<tr class=\"memdesc:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:a2c75d97ae429019363ab6fd1a872512e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4b7ed2ddc8ec6cc910f935c9d299c7a\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a></td></tr>\n<tr class=\"memdesc:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:ae4b7ed2ddc8ec6cc910f935c9d299c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0bd617fe8e4657777e86f0ae15d8094f\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a></td></tr>\n<tr class=\"memdesc:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:a0bd617fe8e4657777e86f0ae15d8094f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d3da9b47ec58e1c09e3550f702edcfc\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a></td></tr>\n<tr class=\"memdesc:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue. <br/></td></tr>\n<tr class=\"separator:a7d3da9b47ec58e1c09e3550f702edcfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae010b1fa9c0942504737228474b51a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae010b1fa9c0942504737228474b51a0b\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">difference_type</a></td></tr>\n<tr class=\"memdesc:ae010b1fa9c0942504737228474b51a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:ae010b1fa9c0942504737228474b51a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1d2cebf242fa83d88eebdc3ad6891fb1\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a></td></tr>\n<tr class=\"memdesc:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:a1d2cebf242fa83d88eebdc3ad6891fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a405be01bac4048f214797c287e2571a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a405be01bac4048f214797c287e2571a1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a405be01bac4048f214797c287e2571a1\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a405be01bac4048f214797c287e2571a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00052.html\" title=\"Concurrent priority queue. \">concurrent_priority_queue</a> with default capacity. <br/></td></tr>\n<tr class=\"separator:a405be01bac4048f214797c287e2571a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a43c3917ea8a19cf1fec947e29ad4ff3e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a43c3917ea8a19cf1fec947e29ad4ff3e\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> init_capacity, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00052.html\" title=\"Concurrent priority queue. \">concurrent_priority_queue</a> with init_sz capacity. <br/></td></tr>\n<tr class=\"separator:a43c3917ea8a19cf1fec947e29ad4ff3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0cebee26cc0d00d4dcbb1c74e08029f7\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a0cebee26cc0d00d4dcbb1c74e08029f7\">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:a0cebee26cc0d00d4dcbb1c74e08029f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa8ac175143e12db29a014674a392b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa8ac175143e12db29a014674a392b38\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aaa8ac175143e12db29a014674a392b38\">concurrent_priority_queue</a> (std::initializer_list&lt; T &gt; init_list, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:aaa8ac175143e12db29a014674a392b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from std::initializer_list. <br/></td></tr>\n<tr class=\"separator:aaa8ac175143e12db29a014674a392b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a332d26234f9c37a6b7ba269c648815d0\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src)</td></tr>\n<tr class=\"memdesc:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor.  <a href=\"#a332d26234f9c37a6b7ba269c648815d0\">More...</a><br/></td></tr>\n<tr class=\"separator:a332d26234f9c37a6b7ba269c648815d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa52cea369b6630699ee78cc42622be9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aa52cea369b6630699ee78cc42622be9d\">concurrent_priority_queue</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"memdesc:aa52cea369b6630699ee78cc42622be9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor with specific allocator.  <a href=\"#aa52cea369b6630699ee78cc42622be9d\">More...</a><br/></td></tr>\n<tr class=\"separator:aa52cea369b6630699ee78cc42622be9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">operator=</a> (const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;src)</td></tr>\n<tr class=\"memdesc:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment operator.  <a href=\"#ac0c3f41b10f04547f3438517c40cf8a5\">More...</a><br/></td></tr>\n<tr class=\"separator:ac0c3f41b10f04547f3438517c40cf8a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ae9ac965bbac3933c7db89f512adfcbcb\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor.  <a href=\"#ae9ac965bbac3933c7db89f512adfcbcb\">More...</a><br/></td></tr>\n<tr class=\"separator:ae9ac965bbac3933c7db89f512adfcbcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">concurrent_priority_queue</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"memdesc:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor with specific allocator.  <a href=\"#a14dd20a4673f77cff3eb6f269a888016\">More...</a><br/></td></tr>\n<tr class=\"separator:a14dd20a4673f77cff3eb6f269a888016\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">operator=</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move assignment operator.  <a href=\"#a9b21bd56aff8c412c5fcdd0d88b48c98\">More...</a><br/></td></tr>\n<tr class=\"separator:a9b21bd56aff8c412c5fcdd0d88b48c98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac64c7b627708f0d6b2e5421fb0d49150\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac64c7b627708f0d6b2e5421fb0d49150\">assign</a> (InputIterator begin, InputIterator end)</td></tr>\n<tr class=\"memdesc:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign the queue from [begin,end) range, not thread-safe. <br/></td></tr>\n<tr class=\"separator:ac64c7b627708f0d6b2e5421fb0d49150\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1b3a945aac5a17c85d56756cc6aa3d1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">assign</a> (std::initializer_list&lt; T &gt; il)</td></tr>\n<tr class=\"memdesc:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign the queue from std::initializer_list, not thread-safe. <br/></td></tr>\n<tr class=\"separator:ac1b3a945aac5a17c85d56756cc6aa3d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7eaa05dcb74604e45e0e2c55e1e456e9\"></a>\n<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">operator=</a> (std::initializer_list&lt; T &gt; il)</td></tr>\n<tr class=\"memdesc:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assign from std::initializer_list, not thread-safe. <br/></td></tr>\n<tr class=\"separator:a7eaa05dcb74604e45e0e2c55e1e456e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if empty, false otherwise.  <a href=\"#a8dec2dd0e8b22af14f1753eaef1bf5eb\">More...</a><br/></td></tr>\n<tr class=\"separator:a8dec2dd0e8b22af14f1753eaef1bf5eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">size</a> () const </td></tr>\n<tr class=\"memdesc:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the current number of elements contained in the queue.  <a href=\"#a7d86ba200474b51ec99a6b917429c6bb\">More...</a><br/></td></tr>\n<tr class=\"separator:a7d86ba200474b51ec99a6b917429c6bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">push</a> (<a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a> elem)</td></tr>\n<tr class=\"memdesc:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href=\"#a1bfa0e7269b3407d6bb5c706264d2406\">More...</a><br/></td></tr>\n<tr class=\"separator:a1bfa0e7269b3407d6bb5c706264d2406\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">push</a> (<a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> &amp;&amp;elem)</td></tr>\n<tr class=\"memdesc:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href=\"#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">More...</a><br/></td></tr>\n<tr class=\"separator:a72ff26945c61b4ce3ce7ca0f9b9aaa48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">emplace</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new element using args as the arguments for its construction and pushes it onto the queue */.  <a href=\"#a278d208cd92e5aeccc9c7f6fc192e3ce\">More...</a><br/></td></tr>\n<tr class=\"separator:a278d208cd92e5aeccc9c7f6fc192e3ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">try_pop</a> (<a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a> elem)</td></tr>\n<tr class=\"memdesc:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a reference to and removes highest priority element.  <a href=\"#a954177b09e184cf3db47f1b180a7ef5e\">More...</a><br/></td></tr>\n<tr class=\"separator:a954177b09e184cf3db47f1b180a7ef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2459166998a4103880d603b237c429e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a2459166998a4103880d603b237c429e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear the queue; not thread-safe.  <a href=\"#a2459166998a4103880d603b237c429e6\">More...</a><br/></td></tr>\n<tr class=\"separator:a2459166998a4103880d603b237c429e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">swap</a> (<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> &amp;q)</td></tr>\n<tr class=\"memdesc:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Swap this queue with another; not thread-safe.  <a href=\"#aa6ee6d356e538b67a7cb4e242e6e36c9\">More...</a><br/></td></tr>\n<tr class=\"separator:aa6ee6d356e538b67a7cb4e242e6e36c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a312e88e51246da4c516d35abbb30721a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a312e88e51246da4c516d35abbb30721a\"></a>\n<a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a312e88e51246da4c516d35abbb30721a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return allocator object. <br/></td></tr>\n<tr class=\"separator:a312e88e51246da4c516d35abbb30721a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename Compare = std::less&lt;T&gt;, typename A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</h3>\n\n<p>Concurrent priority queue. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a332d26234f9c37a6b7ba269c648815d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Copy constructor. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa52cea369b6630699ee78cc42622be9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Copy constructor with specific allocator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae9ac965bbac3933c7db89f512adfcbcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move constructor. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a14dd20a4673f77cff3eb6f269a888016\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::<a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move constructor with specific allocator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a2459166998a4103880d603b237c429e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::clear </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clear the queue; not thread-safe. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a278d208cd92e5aeccc9c7f6fc192e3ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::emplace </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Constructs a new element using args as the arguments for its construction and pushes it onto the queue */. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8dec2dd0e8b22af14f1753eaef1bf5eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::empty </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if empty, false otherwise. </p>\n<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac0c3f41b10f04547f3438517c40cf8a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&amp; <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::operator= </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Assignment operator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9b21bd56aff8c412c5fcdd0d88b48c98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&amp; <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::operator= </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>src</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Move assignment operator. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the src queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1bfa0e7269b3407d6bb5c706264d2406\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::push </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a>&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a72ff26945c61b4ce3ce7ca0f9b9aaa48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::push </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pushes elem onto the queue, increasing capacity of queue if necessary. </p>\n<p>This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7d86ba200474b51ec99a6b917429c6bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns the current number of elements contained in the queue. </p>\n<p>Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa6ee6d356e538b67a7cb4e242e6e36c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::swap </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a>&lt; T, Compare, A &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Swap this queue with another; not thread-safe. </p>\n<p>This operation is unsafe if there are pending concurrent operations on the queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a954177b09e184cf3db47f1b180a7ef5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename Compare  = std::less&lt;T&gt;, typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue</a>&lt; T, Compare, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a>&#160;</td>\n          <td class=\"paramname\"><em>elem</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a reference to and removes highest priority element. </p>\n<p>If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or emplace operations. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00053.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>strict_ppl</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00430.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A high-performance thread-safe non-blocking concurrent queue.  \n <a href=\"a00053.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_queue.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::strict_ppl::concurrent_queue&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00053.png\" usemap=\"#tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\" name=\"tbb::strict_ppl::concurrent_queue&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeeee93a7ac2eecc80bbf3e857e900538\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">value_type</a></td></tr>\n<tr class=\"memdesc:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Element type in the queue. <br/></td></tr>\n<tr class=\"separator:aeeee93a7ac2eecc80bbf3e857e900538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab26ddf11b15d61ac87e6c1ae67af92a2\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">reference</a></td></tr>\n<tr class=\"memdesc:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reference type. <br/></td></tr>\n<tr class=\"separator:ab26ddf11b15d61ac87e6c1ae67af92a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a478c2b7f763b2e821e01cc14e13baf4c\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">const_reference</a></td></tr>\n<tr class=\"memdesc:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Const reference type. <br/></td></tr>\n<tr class=\"separator:a478c2b7f763b2e821e01cc14e13baf4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f883e49afea16293ba92da779981bb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f883e49afea16293ba92da779981bb8\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a></td></tr>\n<tr class=\"memdesc:a9f883e49afea16293ba92da779981bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Integral type for representing size of the queue. <br/></td></tr>\n<tr class=\"separator:a9f883e49afea16293ba92da779981bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63b42d83a9ed13fc6741e0b4388b0e96\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">difference_type</a></td></tr>\n<tr class=\"memdesc:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Difference type for iterator. <br/></td></tr>\n<tr class=\"separator:a63b42d83a9ed13fc6741e0b4388b0e96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbdd1a5bd034358fb0774b322a66b1ed\"></a>\ntypedef A&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a></td></tr>\n<tr class=\"memdesc:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocator type. <br/></td></tr>\n<tr class=\"separator:acbdd1a5bd034358fb0774b322a66b1ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1361aa7fd454fe593609be740ab8a4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1361aa7fd454fe593609be740ab8a4c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00053.html\">concurrent_queue</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:ab1361aa7fd454fe593609be740ab8a4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a674e375edf0a3463ae1cec5d6158593d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a674e375edf0a3463ae1cec5d6158593d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_queue_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00053.html\">concurrent_queue</a>, const T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a674e375edf0a3463ae1cec5d6158593d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49b2e16902577cd3174355be0fa684e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b2e16902577cd3174355be0fa684e5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">concurrent_queue</a> (const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a49b2e16902577cd3174355be0fa684e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty queue. <br/></td></tr>\n<tr class=\"separator:a49b2e16902577cd3174355be0fa684e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a43ac953152e60815c09fe4a4d4a623a9\"></a>\ntemplate&lt;typename InputIterator &gt; </td></tr>\n<tr class=\"memitem:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a43ac953152e60815c09fe4a4d4a623a9\">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">[begin,end) constructor <br/></td></tr>\n<tr class=\"separator:a43ac953152e60815c09fe4a4d4a623a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae918807d098d5d5b41cc6d606fa2e7a1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ae918807d098d5d5b41cc6d606fa2e7a1\">concurrent_queue</a> (const <a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;src, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a=<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>())</td></tr>\n<tr class=\"memdesc:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:ae918807d098d5d5b41cc6d606fa2e7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc04574f4d7d41fd5cad779508394740\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc04574f4d7d41fd5cad779508394740\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#acc04574f4d7d41fd5cad779508394740\">concurrent_queue</a> (<a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;&amp;src)</td></tr>\n<tr class=\"memdesc:acc04574f4d7d41fd5cad779508394740\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructors. <br/></td></tr>\n<tr class=\"separator:acc04574f4d7d41fd5cad779508394740\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a22f35cb396178d494a3756d5700e2865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a22f35cb396178d494a3756d5700e2865\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_queue</b> (<a class=\"el\" href=\"a00053.html\">concurrent_queue</a> &amp;&amp;src, const <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> &amp;a)</td></tr>\n<tr class=\"separator:a22f35cb396178d494a3756d5700e2865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0056b242f280f5e25332ce998f9f670\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0056b242f280f5e25332ce998f9f670\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">~concurrent_queue</a> ()</td></tr>\n<tr class=\"memdesc:aa0056b242f280f5e25332ce998f9f670\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy queue. <br/></td></tr>\n<tr class=\"separator:aa0056b242f280f5e25332ce998f9f670\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9330ca6590980d80ef7b1ea3613a699a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">push</a> (const T &amp;source)</td></tr>\n<tr class=\"memdesc:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enqueue an item at tail of queue. <br/></td></tr>\n<tr class=\"separator:a9330ca6590980d80ef7b1ea3613a699a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a40f743f7eb92bb709cb7feb86d340885\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a40f743f7eb92bb709cb7feb86d340885\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>push</b> (T &amp;&amp;source)</td></tr>\n<tr class=\"separator:a40f743f7eb92bb709cb7feb86d340885\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4647d9bf5fd03b0850ada381916e9728\"></a>\ntemplate&lt;typename... Arguments&gt; </td></tr>\n<tr class=\"memitem:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>emplace</b> (Arguments &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a4647d9bf5fd03b0850ada381916e9728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">try_pop</a> (T &amp;result)</td></tr>\n<tr class=\"memdesc:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attempt to dequeue an item from head of queue.  <a href=\"#aabb1acef18196fa11ed7db8e046c3943\">More...</a><br/></td></tr>\n<tr class=\"separator:aabb1acef18196fa11ed7db8e046c3943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad4b253ba595637b0b146eb6565556f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad4b253ba595637b0b146eb6565556f2\"></a>\n<a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">unsafe_size</a> () const </td></tr>\n<tr class=\"memdesc:aad4b253ba595637b0b146eb6565556f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the number of items in the queue; thread unsafe. <br/></td></tr>\n<tr class=\"separator:aad4b253ba595637b0b146eb6565556f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeda3156929d0c250faed7b807ca6ab0e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Equivalent to size()==0. <br/></td></tr>\n<tr class=\"separator:aeda3156929d0c250faed7b807ca6ab0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3384818fb6350a494d5ec62445e59ee\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear the queue. not thread-safe. <br/></td></tr>\n<tr class=\"separator:ad3384818fb6350a494d5ec62445e59ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f2b39f350281590b86db906eca6c480\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f2b39f350281590b86db906eca6c480\"></a>\n<a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a7f2b39f350281590b86db906eca6c480\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return allocator object. <br/></td></tr>\n<tr class=\"separator:a7f2b39f350281590b86db906eca6c480\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6658faeae3c10135a553fedadddde239\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6658faeae3c10135a553fedadddde239\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> ()</td></tr>\n<tr class=\"separator:a6658faeae3c10135a553fedadddde239\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa7593de5e76006ed3adef4d060f0009c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa7593de5e76006ed3adef4d060f0009c\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> ()</td></tr>\n<tr class=\"separator:aa7593de5e76006ed3adef4d060f0009c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f84b37020f4267f17c7e91acfc0c446\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f84b37020f4267f17c7e91acfc0c446\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_begin</b> () const </td></tr>\n<tr class=\"separator:a0f84b37020f4267f17c7e91acfc0c446\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a118a79d7e20cdbd807fa7fccc2a5b848\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a118a79d7e20cdbd807fa7fccc2a5b848\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unsafe_end</b> () const </td></tr>\n<tr class=\"separator:a118a79d7e20cdbd807fa7fccc2a5b848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1f5eec0de2e660ea5372d19393f0920b\"></a>\ntemplate&lt;typename Container , typename Value &gt; </td></tr>\n<tr class=\"memitem:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concurrent_queue_iterator</b></td></tr>\n<tr class=\"separator:a1f5eec0de2e660ea5372d19393f0920b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</h3>\n\n<p>A high-performance thread-safe non-blocking concurrent queue. </p>\n<p>Multiple threads may each push and pop concurrently. Assignment construction is not allowed. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aabb1acef18196fa11ed7db8e046c3943\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T , typename A  = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue</a>&lt; T, A &gt;::try_pop </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>result</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attempt to dequeue an item from head of queue. </p>\n<p>Does not wait for item to become available. Returns true if successful; false otherwise. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00054.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00385.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00054.png\" usemap=\"#tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a35d2ace709769b7059e8f8b2a144f8b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35d2ace709769b7059e8f8b2a144f8b9\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a35d2ace709769b7059e8f8b2a144f8b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9260034417dde6b3810347c5e347a9f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9260034417dde6b3810347c5e347a9f8\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a9260034417dde6b3810347c5e347a9f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ece8ff3de51bc415d8fc1338f793cbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ece8ff3de51bc415d8fc1338f793cbf\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a8ece8ff3de51bc415d8fc1338f793cbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afeef87b046af352e20cd92e56c0fcf34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afeef87b046af352e20cd92e56c0fcf34\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:afeef87b046af352e20cd92e56c0fcf34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21f5f2fbf3b1f721051c6b4c5fa2a735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21f5f2fbf3b1f721051c6b4c5fa2a735\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a21f5f2fbf3b1f721051c6b4c5fa2a735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa15c94df26d89ef38daa7516df5e0729\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa15c94df26d89ef38daa7516df5e0729\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:aa15c94df26d89ef38daa7516df5e0729\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1acd4ab50584a9dc55712e0e113583e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1acd4ab50584a9dc55712e0e113583e2\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a1acd4ab50584a9dc55712e0e113583e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e29fb2f75cdec0746afdbed0b9c5451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e29fb2f75cdec0746afdbed0b9c5451\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a7e29fb2f75cdec0746afdbed0b9c5451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5d26f7002e7810e4c02890a1d7bdc41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5d26f7002e7810e4c02890a1d7bdc41\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:ab5d26f7002e7810e4c02890a1d7bdc41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01e118e1e0bfe57083d8f76f4f848d2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01e118e1e0bfe57083d8f76f4f848d2b\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a01e118e1e0bfe57083d8f76f4f848d2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad1072935f6765abe3ec1b04f24f80deb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1072935f6765abe3ec1b04f24f80deb\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:ad1072935f6765abe3ec1b04f24f80deb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae31360122b604d6735b12fc027f10924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae31360122b604d6735b12fc027f10924\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ae31360122b604d6735b12fc027f10924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f903f0ca898b0aa80e3a6b921b8f21a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f903f0ca898b0aa80e3a6b921b8f21a\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a0f903f0ca898b0aa80e3a6b921b8f21a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a267aff808d10aa0c437fd9261286467e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a267aff808d10aa0c437fd9261286467e\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a267aff808d10aa0c437fd9261286467e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c2d1a61d1e6ed09fb3df14270d61a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5c2d1a61d1e6ed09fb3df14270d61a01\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a5c2d1a61d1e6ed09fb3df14270d61a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a744c0cf93efb5a134d6ddfb3a5fb75d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a744c0cf93efb5a134d6ddfb3a5fb75d3\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a744c0cf93efb5a134d6ddfb3a5fb75d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5df36261f0e5a1aea64235702fdacb62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5df36261f0e5a1aea64235702fdacb62\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:a5df36261f0e5a1aea64235702fdacb62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aeeabd4bffe47ad7a300ae896c06dc46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeeabd4bffe47ad7a300ae896c06dc46c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:aeeabd4bffe47ad7a300ae896c06dc46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad0e15127e237c29c923db83fb509f624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad0e15127e237c29c923db83fb509f624\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ad0e15127e237c29c923db83fb509f624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab494f2ac22495884f64985fba6ade501\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab494f2ac22495884f64985fba6ade501\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:ab494f2ac22495884f64985fba6ade501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:ab494f2ac22495884f64985fba6ade501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a788a7225915574c1a349abc0f1f653c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a788a7225915574c1a349abc0f1f653c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">concurrent_unordered_map</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a788a7225915574c1a349abc0f1f653c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a788a7225915574c1a349abc0f1f653c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1593b0f93256736d163cfbcc23c7de26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1593b0f93256736d163cfbcc23c7de26\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table)</td></tr>\n<tr class=\"separator:a1593b0f93256736d163cfbcc23c7de26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47b4eec40fac7fb8b6a8023758c1a34c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47b4eec40fac7fb8b6a8023758c1a34c\"></a>\n<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table)</td></tr>\n<tr class=\"separator:a47b4eec40fac7fb8b6a8023758c1a34c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a53dcf022c4bd65f438b377a23a9c1bae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a53dcf022c4bd65f438b377a23a9c1bae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a53dcf022c4bd65f438b377a23a9c1bae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73f8e707280b4e55a9ead393fbb012c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73f8e707280b4e55a9ead393fbb012c8\"></a>\n<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a73f8e707280b4e55a9ead393fbb012c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab22288d418827a312aee4191bb6a7f11\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab22288d418827a312aee4191bb6a7f11\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (<a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ab22288d418827a312aee4191bb6a7f11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e1cce13f9fa458a616b424c84790c25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2e1cce13f9fa458a616b424c84790c25\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map</b> (const <a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a2e1cce13f9fa458a616b424c84790c25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae49177d89c80434a30aa346201abb986\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae49177d89c80434a30aa346201abb986\"></a>\nmapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (const key_type &amp;key)</td></tr>\n<tr class=\"separator:ae49177d89c80434a30aa346201abb986\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2e1ccbd986686ef2e93c880a965e861\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af2e1ccbd986686ef2e93c880a965e861\"></a>\nmapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>at</b> (const key_type &amp;key)</td></tr>\n<tr class=\"separator:af2e1ccbd986686ef2e93c880a965e861\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a54173c11cd3bc91b491b3f83375868e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a54173c11cd3bc91b491b3f83375868e4\"></a>\nconst mapped_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>at</b> (const key_type &amp;key) const </td></tr>\n<tr class=\"separator:a54173c11cd3bc91b491b3f83375868e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00055.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00384.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a3a4d3aae580451e86649ce3a3ae38894\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>allow_multimapping</b> = Allow_multimapping\n }</td></tr>\n<tr class=\"separator:a3a4d3aae580451e86649ce3a3ae38894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0c77b12f17473e24cda4b60b38e847fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0c77b12f17473e24cda4b60b38e847fd\"></a>\ntypedef std::pair&lt; const Key, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a0c77b12f17473e24cda4b60b38e847fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a133cf0868239271387488f6067ce56ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a133cf0868239271387488f6067ce56ee\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a133cf0868239271387488f6067ce56ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdf65dc261abb44bd733ebab0f54f01b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afdf65dc261abb44bd733ebab0f54f01b\"></a>\ntypedef Hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hash_compare</b></td></tr>\n<tr class=\"separator:afdf65dc261abb44bd733ebab0f54f01b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5f015ac2f9770d8cd69d0656447b66ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f015ac2f9770d8cd69d0656447b66ac\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; value_type &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a5f015ac2f9770d8cd69d0656447b66ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:ae9e1e3147bd444fb77c544ef7ecb5bef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9e1e3147bd444fb77c544ef7ecb5bef\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map_traits</b> (const hash_compare &amp;hc)</td></tr>\n<tr class=\"separator:ae9e1e3147bd444fb77c544ef7ecb5bef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a561f2cf05060387c8282ad57f5c816ca\"></a>\ntemplate&lt;class Type1 , class Type2 &gt; </td></tr>\n<tr class=\"memitem:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static const Key &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>get_key</b> (const std::pair&lt; Type1, Type2 &gt; &amp;value)</td></tr>\n<tr class=\"separator:a561f2cf05060387c8282ad57f5c816ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ad8f108aa7fc21e9e38050a9d56e691b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad8f108aa7fc21e9e38050a9d56e691b7\"></a>\nhash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ad8f108aa7fc21e9e38050a9d56e691b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00056.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00386.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00056.png\" usemap=\"#tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a13c740f45a112984c9a0c6d0d0a1a4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a13c740f45a112984c9a0c6d0d0a1a4d8\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a13c740f45a112984c9a0c6d0d0a1a4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b89d9eeca4d1c194433b40671da2bf2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b89d9eeca4d1c194433b40671da2bf2\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a1b89d9eeca4d1c194433b40671da2bf2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a627d86449ed7299d1baa4b09b6dd93f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a627d86449ed7299d1baa4b09b6dd93f6\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a627d86449ed7299d1baa4b09b6dd93f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8485b8d61b666ac6ddd81e1d4b286d5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8485b8d61b666ac6ddd81e1d4b286d5e\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:a8485b8d61b666ac6ddd81e1d4b286d5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72a124e1c8c64499677e58171a7b9383\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72a124e1c8c64499677e58171a7b9383\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a72a124e1c8c64499677e58171a7b9383\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ecb30201df0bd885fbba309b2392bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ecb30201df0bd885fbba309b2392bd4\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:a6ecb30201df0bd885fbba309b2392bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaeeee0c045e0003b85f60a6851d1d827\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeeee0c045e0003b85f60a6851d1d827\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:aaeeee0c045e0003b85f60a6851d1d827\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a029187ffe49ae876f41dfca39fe6f288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a029187ffe49ae876f41dfca39fe6f288\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a029187ffe49ae876f41dfca39fe6f288\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55c029b4a58d1201e08ef5ba14fc0a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a55c029b4a58d1201e08ef5ba14fc0a66\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a55c029b4a58d1201e08ef5ba14fc0a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4613be39e17bc83cf85d3b90a13fa09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4613be39e17bc83cf85d3b90a13fa09\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:ac4613be39e17bc83cf85d3b90a13fa09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b9ef2bc9a8574b16ef678e838ff4e96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b9ef2bc9a8574b16ef678e838ff4e96\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a0b9ef2bc9a8574b16ef678e838ff4e96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49038d8ed5f392bce440d7906b39ee53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49038d8ed5f392bce440d7906b39ee53\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a49038d8ed5f392bce440d7906b39ee53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a517a0b94b44d429f7f23b6d9f5366b36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a517a0b94b44d429f7f23b6d9f5366b36\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a517a0b94b44d429f7f23b6d9f5366b36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a494392b2f3400393ae2696a70e2411f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a494392b2f3400393ae2696a70e2411f4\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a494392b2f3400393ae2696a70e2411f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2460242ba39d70a0473eac4ee62b898c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2460242ba39d70a0473eac4ee62b898c\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a2460242ba39d70a0473eac4ee62b898c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75ad2607efde410d591002203deb65e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a75ad2607efde410d591002203deb65e6\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a75ad2607efde410d591002203deb65e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7647068dd628f35d3e3f7ed161b3fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7647068dd628f35d3e3f7ed161b3fc0\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:ab7647068dd628f35d3e3f7ed161b3fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4ea5780bcc8664253e2180987bc775d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ea5780bcc8664253e2180987bc775d0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a4ea5780bcc8664253e2180987bc775d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2fe78524a0f0cd268194cf2461e3ab0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2fe78524a0f0cd268194cf2461e3ab0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:ae2fe78524a0f0cd268194cf2461e3ab0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a174ad09d37e0f648e06ded3abfa65bed\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a174ad09d37e0f648e06ded3abfa65bed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5957d29e5fa9f8c53538de3f7a41ebc9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">concurrent_unordered_multimap</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a5957d29e5fa9f8c53538de3f7a41ebc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aacf347cd41c61dd026e844fa9311130c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aacf347cd41c61dd026e844fa9311130c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table)</td></tr>\n<tr class=\"separator:aacf347cd41c61dd026e844fa9311130c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a58939ac30bfced4b6e2cf0377c1b7d71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a58939ac30bfced4b6e2cf0377c1b7d71\"></a>\n<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table)</td></tr>\n<tr class=\"separator:a58939ac30bfced4b6e2cf0377c1b7d71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac339429f4f36730ff3614cb7fcb257cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac339429f4f36730ff3614cb7fcb257cb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:ac339429f4f36730ff3614cb7fcb257cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e9a928751361cec49b26afa38018208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e9a928751361cec49b26afa38018208\"></a>\n<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a5e9a928751361cec49b26afa38018208\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a040b7c942e77cca30b0ab423ae7a2d87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a040b7c942e77cca30b0ab423ae7a2d87\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (<a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a040b7c942e77cca30b0ab423ae7a2d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34148bd7279ce189a6c0c26380df0a2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34148bd7279ce189a6c0c26380df0a2a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multimap</b> (const <a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a34148bd7279ce189a6c0c26380df0a2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00057.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00389.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00057.png\" usemap=\"#tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:af1eb846a05a4e2d30a3ff7f66acad7c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1eb846a05a4e2d30a3ff7f66acad7c7\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:af1eb846a05a4e2d30a3ff7f66acad7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a559df68fc84a16b494a9638085c7379b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a559df68fc84a16b494a9638085c7379b\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a559df68fc84a16b494a9638085c7379b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada492d245619aac2683b57c9f52106c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada492d245619aac2683b57c9f52106c7\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:ada492d245619aac2683b57c9f52106c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6b0ed8e5a20690cc06644520d0e5ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6b0ed8e5a20690cc06644520d0e5ef3\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:ab6b0ed8e5a20690cc06644520d0e5ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3d8b36c79741c229cf9a5c9d93516b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3d8b36c79741c229cf9a5c9d93516b7\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:aa3d8b36c79741c229cf9a5c9d93516b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ec7f32ab51ebbfdb06d57ab8b17044b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ec7f32ab51ebbfdb06d57ab8b17044b\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:a8ec7f32ab51ebbfdb06d57ab8b17044b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f89a49912b58d42ddbb3f344b6304ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f89a49912b58d42ddbb3f344b6304ca\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a1f89a49912b58d42ddbb3f344b6304ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4ff41efe0ead5030b011c999dd748de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4ff41efe0ead5030b011c999dd748de\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:ad4ff41efe0ead5030b011c999dd748de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4327ff04c8a5dc7653b47763263b9f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4327ff04c8a5dc7653b47763263b9f9\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:ab4327ff04c8a5dc7653b47763263b9f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef5518b17cd9da59b9e6d9b9374f5245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef5518b17cd9da59b9e6d9b9374f5245\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:aef5518b17cd9da59b9e6d9b9374f5245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7084b7dd3f9b1df0ffdd520529e87f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7084b7dd3f9b1df0ffdd520529e87f3c\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a7084b7dd3f9b1df0ffdd520529e87f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad04d6c35ee079e8a49d38744c8f305b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad04d6c35ee079e8a49d38744c8f305b3\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ad04d6c35ee079e8a49d38744c8f305b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e9babf06dc79948bb787793a7cb0d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e9babf06dc79948bb787793a7cb0d37\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a6e9babf06dc79948bb787793a7cb0d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a229ae1c0786ea9509c66256fcf1c8f47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a229ae1c0786ea9509c66256fcf1c8f47\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a229ae1c0786ea9509c66256fcf1c8f47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69ed6ae85fe54e53b2804b61a6f30fa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69ed6ae85fe54e53b2804b61a6f30fa2\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a69ed6ae85fe54e53b2804b61a6f30fa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a532cdc67028e27231846b41bfd9a0e26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a532cdc67028e27231846b41bfd9a0e26\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:a532cdc67028e27231846b41bfd9a0e26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4f42202dd9f2bc114c9411928431217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af4f42202dd9f2bc114c9411928431217\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:af4f42202dd9f2bc114c9411928431217\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afa7c1f095ac1f56c7811811aabe6b77c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa7c1f095ac1f56c7811811aabe6b77c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:afa7c1f095ac1f56c7811811aabe6b77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf8c095a7be6913dd96e22a6ce9af187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf8c095a7be6913dd96e22a6ce9af187\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:adf8c095a7be6913dd96e22a6ce9af187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2eede1ccad9975aac7acbffbd991e26c\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:a2eede1ccad9975aac7acbffbd991e26c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15631f048043195863c66bad6533bccb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15631f048043195863c66bad6533bccb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">concurrent_unordered_multiset</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a15631f048043195863c66bad6533bccb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a15631f048043195863c66bad6533bccb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3110fb1a6f8e2a3071d2acbe4b7b154b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3110fb1a6f8e2a3071d2acbe4b7b154b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table)</td></tr>\n<tr class=\"separator:a3110fb1a6f8e2a3071d2acbe4b7b154b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1fb116ee3fdf6c6c810fe21eb01e209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1fb116ee3fdf6c6c810fe21eb01e209\"></a>\n<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table)</td></tr>\n<tr class=\"separator:ac1fb116ee3fdf6c6c810fe21eb01e209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb435d8d31e95357c2f59656ec96dbbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb435d8d31e95357c2f59656ec96dbbb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:aeb435d8d31e95357c2f59656ec96dbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6c980c4bf29824a52610d94e6597b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6c980c4bf29824a52610d94e6597b28\"></a>\n<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:ab6c980c4bf29824a52610d94e6597b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa0a295004627bb5473b4371c6e20c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa0a295004627bb5473b4371c6e20c80\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (<a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:aaa0a295004627bb5473b4371c6e20c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a229089da66522fd4f3d77e9f57e19fbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a229089da66522fd4f3d77e9f57e19fbb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_multiset</b> (const <a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a229089da66522fd4f3d77e9f57e19fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00058.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00388.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00058.png\" usemap=\"#tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\" name=\"tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:afad91155e1803ee686e5f42637594e7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afad91155e1803ee686e5f42637594e7b\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:afad91155e1803ee686e5f42637594e7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a461fe414bf3ae73e7cc57e851ff592e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a461fe414bf3ae73e7cc57e851ff592e4\"></a>\ntypedef base_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a461fe414bf3ae73e7cc57e851ff592e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3a64703b55d07509d5c88810c2342ba5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3a64703b55d07509d5c88810c2342ba5\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mapped_type</b></td></tr>\n<tr class=\"separator:a3a64703b55d07509d5c88810c2342ba5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6952de8a7ff93025c1065bb3e729da72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6952de8a7ff93025c1065bb3e729da72\"></a>\ntypedef Hasher&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hasher</b></td></tr>\n<tr class=\"separator:a6952de8a7ff93025c1065bb3e729da72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a376a7355aa091fff6a30689141407acd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a376a7355aa091fff6a30689141407acd\"></a>\ntypedef Key_equality&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_equal</b></td></tr>\n<tr class=\"separator:a376a7355aa091fff6a30689141407acd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc450473249e39658c46596d8252eef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc450473249e39658c46596d8252eef0\"></a>\ntypedef hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_compare</b></td></tr>\n<tr class=\"separator:acc450473249e39658c46596d8252eef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2010e490e8bfb13d9b969ec2fd5e4de4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2010e490e8bfb13d9b969ec2fd5e4de4\"></a>\ntypedef base_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a2010e490e8bfb13d9b969ec2fd5e4de4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5a8c52d4a2b57b9b4b5d889e96d88f44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5a8c52d4a2b57b9b4b5d889e96d88f44\"></a>\ntypedef base_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a5a8c52d4a2b57b9b4b5d889e96d88f44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a281276279a33ef1c5dfba5c196118ae7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a281276279a33ef1c5dfba5c196118ae7\"></a>\ntypedef base_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a281276279a33ef1c5dfba5c196118ae7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aec3d473d0fa601d51f13efe605cd9862\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aec3d473d0fa601d51f13efe605cd9862\"></a>\ntypedef base_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:aec3d473d0fa601d51f13efe605cd9862\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7da53912d0deffca91618b73ed4995f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7da53912d0deffca91618b73ed4995f\"></a>\ntypedef base_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:ab7da53912d0deffca91618b73ed4995f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5808a50995fc228f114c3c93aeddf331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5808a50995fc228f114c3c93aeddf331\"></a>\ntypedef base_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a5808a50995fc228f114c3c93aeddf331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7aaed1937820a90cb657a824e1391c1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7aaed1937820a90cb657a824e1391c1f\"></a>\ntypedef base_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a7aaed1937820a90cb657a824e1391c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abb76557f1755f96dc2e78728cb231e57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abb76557f1755f96dc2e78728cb231e57\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:abb76557f1755f96dc2e78728cb231e57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a983d10264bc785a59b11dc94001e0042\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a983d10264bc785a59b11dc94001e0042\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a983d10264bc785a59b11dc94001e0042\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acb12b4b1df9a7108a5193b0d3bbfc677\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acb12b4b1df9a7108a5193b0d3bbfc677\"></a>\ntypedef base_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_iterator</b></td></tr>\n<tr class=\"separator:acb12b4b1df9a7108a5193b0d3bbfc677\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af111bc738ee2a1b4b1cf2967a1252322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af111bc738ee2a1b4b1cf2967a1252322\"></a>\ntypedef base_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_local_iterator</b></td></tr>\n<tr class=\"separator:af111bc738ee2a1b4b1cf2967a1252322\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aad5e3bd7fa156e5d8aa81a8ff560d84e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad5e3bd7fa156e5d8aa81a8ff560d84e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:aad5e3bd7fa156e5d8aa81a8ff560d84e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d307ae4ebb3e2d46b0a75713824d109\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2d307ae4ebb3e2d46b0a75713824d109\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a2d307ae4ebb3e2d46b0a75713824d109\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afd4bc55194c4473e81398d8456a5c68a\"></a>\ntemplate&lt;typename Iterator &gt; </td></tr>\n<tr class=\"memitem:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"separator:afd4bc55194c4473e81398d8456a5c68a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f6d5ecff239ff13000848e925904fe7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">concurrent_unordered_set</a> (std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:a6f6d5ecff239ff13000848e925904fe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3c68d5286d6ca29fba2b38c59bdbc66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac3c68d5286d6ca29fba2b38c59bdbc66\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table)</td></tr>\n<tr class=\"separator:ac3c68d5286d6ca29fba2b38c59bdbc66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39097dddf99fd057919197b8293bd807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39097dddf99fd057919197b8293bd807\"></a>\n<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table)</td></tr>\n<tr class=\"separator:a39097dddf99fd057919197b8293bd807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9dde7a48af7449fde97d4449691207c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9dde7a48af7449fde97d4449691207c5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a9dde7a48af7449fde97d4449691207c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49ad03a5e20f90beac704325aaa6567f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49ad03a5e20f90beac704325aaa6567f\"></a>\n<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table)</td></tr>\n<tr class=\"separator:a49ad03a5e20f90beac704325aaa6567f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ef0de826333371f1e9cb33349b35baf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ef0de826333371f1e9cb33349b35baf\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (<a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;&amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:a6ef0de826333371f1e9cb33349b35baf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecea62fe5c8beab0d7907dbc33ef583f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecea62fe5c8beab0d7907dbc33ef583f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set</b> (const <a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> &amp;table, const Allocator &amp;a)</td></tr>\n<tr class=\"separator:aecea62fe5c8beab0d7907dbc33ef583f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00059.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00387.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a10fca95c59a7c0542d2d6bc1b8306e1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>allow_multimapping</b> = Allow_multimapping\n }</td></tr>\n<tr class=\"separator:a10fca95c59a7c0542d2d6bc1b8306e1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a935ab6e249964c5a7e1caffd308bf008\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a935ab6e249964c5a7e1caffd308bf008\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a935ab6e249964c5a7e1caffd308bf008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b1d770b7db20b5d0d51af0b910aebb2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b1d770b7db20b5d0d51af0b910aebb2\"></a>\ntypedef Key&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>key_type</b></td></tr>\n<tr class=\"separator:a8b1d770b7db20b5d0d51af0b910aebb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3c1ef314e63eb78db91ce99cb8617b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3c1ef314e63eb78db91ce99cb8617b87\"></a>\ntypedef Hash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>hash_compare</b></td></tr>\n<tr class=\"separator:a3c1ef314e63eb78db91ce99cb8617b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a453126bb05d3c798914cb91852e0b3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a453126bb05d3c798914cb91852e0b3a5\"></a>\ntypedef Allocator::template <br class=\"typebreak\"/>\nrebind&lt; value_type &gt;::other&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a453126bb05d3c798914cb91852e0b3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a958c02e4dbd967575a9f03290bb0cad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a958c02e4dbd967575a9f03290bb0cad3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set_traits</b> (const hash_compare &amp;hc)</td></tr>\n<tr class=\"separator:a958c02e4dbd967575a9f03290bb0cad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a3f4bfe96ddb3db04d4701e06611fc73d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3f4bfe96ddb3db04d4701e06611fc73d\"></a>\nstatic const Key &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_key</b> (const value_type &amp;value)</td></tr>\n<tr class=\"separator:a3f4bfe96ddb3db04d4701e06611fc73d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ae134f56adf668d7bd31f7ee8fb36ead5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae134f56adf668d7bd31f7ee8fb36ead5\"></a>\nhash_compare&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash_compare</b></td></tr>\n<tr class=\"separator:ae134f56adf668d7bd31f7ee8fb36ead5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_unordered_set.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00060.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_vector&lt; T, A &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00292.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Concurrent vector container.  \n <a href=\"a00060.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_vector.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_vector&lt; T, A &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00060.png\" usemap=\"#tbb::concurrent_vector&lt; T, A &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_vector&lt; T, A &gt;_map\" name=\"tbb::concurrent_vector&lt; T, A &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ada098ff121699bfed7ae37e759eff93d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada098ff121699bfed7ae37e759eff93d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::concurrent_vector_base_v3::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ada098ff121699bfed7ae37e759eff93d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7560567b5735c57159e55b12d20b6710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7560567b5735c57159e55b12d20b6710\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_base&lt; T, A &gt;<br class=\"typebreak\"/>\n::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a7560567b5735c57159e55b12d20b6710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf801a503d4e5fe739f53d7321dd2ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf801a503d4e5fe739f53d7321dd2ef\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a5cf801a503d4e5fe739f53d7321dd2ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bb52adb877d3b680dac5f0bd289700b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bb52adb877d3b680dac5f0bd289700b\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a1bb52adb877d3b680dac5f0bd289700b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a412441e93ad8656f96b14c5ecb9d817f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a412441e93ad8656f96b14c5ecb9d817f\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a412441e93ad8656f96b14c5ecb9d817f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ecbb1eb2c7264df9d58255ce211207c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ecbb1eb2c7264df9d58255ce211207c\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a5ecbb1eb2c7264df9d58255ce211207c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2c4f00678df69d2d11497e8dd6ed9cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2c4f00678df69d2d11497e8dd6ed9cf\"></a>\ntypedef T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:aa2c4f00678df69d2d11497e8dd6ed9cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa0d28eb686589cbaf4733ca0eabc071\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa0d28eb686589cbaf4733ca0eabc071\"></a>\ntypedef const T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:afa0d28eb686589cbaf4733ca0eabc071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4cee8eaee236867c0b6e87309380cb0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4cee8eaee236867c0b6e87309380cb0f\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::vector_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>, T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a4cee8eaee236867c0b6e87309380cb0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa9a55035528c055ae985db2a61c8b0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa9a55035528c055ae985db2a61c8b0b2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::vector_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>, const T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:aa9a55035528c055ae985db2a61c8b0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1623110816f9ef8f08e7bf6768aed273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1623110816f9ef8f08e7bf6768aed273\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reverse_iterator</b></td></tr>\n<tr class=\"separator:a1623110816f9ef8f08e7bf6768aed273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada43b048144c3814036da624d3bb8c58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ada43b048144c3814036da624d3bb8c58\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reverse_iterator</b></td></tr>\n<tr class=\"separator:ada43b048144c3814036da624d3bb8c58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbeeef740ea402fa136ca3962fc0c307\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeeef740ea402fa136ca3962fc0c307\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; iterator, T, T &amp;, T * &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reverse_iterator</b></td></tr>\n<tr class=\"separator:adbeeef740ea402fa136ca3962fc0c307\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a705a54ffc90b914fc9c30d4177e8228a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a705a54ffc90b914fc9c30d4177e8228a\"></a>\ntypedef std::reverse_iterator<br class=\"typebreak\"/>\n&lt; const_iterator, T, const T <br class=\"typebreak\"/>\n&amp;, const T * &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reverse_iterator</b></td></tr>\n<tr class=\"separator:a705a54ffc90b914fc9c30d4177e8228a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a443492ee9918c9e3372b5daca82314ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a443492ee9918c9e3372b5daca82314ca\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a443492ee9918c9e3372b5daca82314ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1312eb29abf7ca07aa365c727b7844e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1312eb29abf7ca07aa365c727b7844e3\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a1312eb29abf7ca07aa365c727b7844e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5bd95c2241653c760704a92b2c887a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bd95c2241653c760704a92b2c887a48\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">concurrent_vector</a> (const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a5bd95c2241653c760704a92b2c887a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty vector. <br/></td></tr>\n<tr class=\"separator:a5bd95c2241653c760704a92b2c887a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa25dccd2f65fbfa148e92d01a11c20ff\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa25dccd2f65fbfa148e92d01a11c20ff\">concurrent_vector</a> (std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor from initializer_list. <br/></td></tr>\n<tr class=\"separator:aa25dccd2f65fbfa148e92d01a11c20ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03b5a0e9069b30dc4e2e5fc2f191ccb6\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6\">concurrent_vector</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copying constructor. <br/></td></tr>\n<tr class=\"separator:a03b5a0e9069b30dc4e2e5fc2f191ccb6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aafb048cfda83d0e7803888ead76c06a9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aafb048cfda83d0e7803888ead76c06a9\">concurrent_vector</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;source)</td></tr>\n<tr class=\"memdesc:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move constructor. <br/></td></tr>\n<tr class=\"separator:aafb048cfda83d0e7803888ead76c06a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef020f41f3017fecc43e70a22d3e0fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef020f41f3017fecc43e70a22d3e0fc0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_vector</b> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;source, const allocator_type &amp;a)</td></tr>\n<tr class=\"separator:aef020f41f3017fecc43e70a22d3e0fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abb0e376a31c3fdb91beaaa98441735f5\"></a>\ntemplate&lt;class M &gt; </td></tr>\n<tr class=\"memitem:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abb0e376a31c3fdb91beaaa98441735f5\">concurrent_vector</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copying constructor for vector with different allocator type. <br/></td></tr>\n<tr class=\"separator:abb0e376a31c3fdb91beaaa98441735f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa898a39aad73711ceca70cd465dc0b4f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">concurrent_vector</a> (size_type n)</td></tr>\n<tr class=\"memdesc:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with initial size specified by argument n. <br/></td></tr>\n<tr class=\"separator:aa898a39aad73711ceca70cd465dc0b4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a736c6e35f1df11625636968ea546e21f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a736c6e35f1df11625636968ea546e21f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a736c6e35f1df11625636968ea546e21f\">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:a736c6e35f1df11625636968ea546e21f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br/></td></tr>\n<tr class=\"separator:a736c6e35f1df11625636968ea546e21f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae0d384ec56032d18f63e26960029d3ce\"></a>\ntemplate&lt;class I &gt; </td></tr>\n<tr class=\"memitem:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae0d384ec56032d18f63e26960029d3ce\">concurrent_vector</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>\n<tr class=\"memdesc:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construction with copying iteration range and given allocator instance. <br/></td></tr>\n<tr class=\"separator:ae0d384ec56032d18f63e26960029d3ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a920384aece0eb8beea3049956320ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a920384aece0eb8beea3049956320ec91\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">operator=</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector)</td></tr>\n<tr class=\"memdesc:a920384aece0eb8beea3049956320ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment. <br/></td></tr>\n<tr class=\"separator:a920384aece0eb8beea3049956320ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d26889a94203cdb5f5460fade7497c7\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0d26889a94203cdb5f5460fade7497c7\">operator=</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&amp;other)</td></tr>\n<tr class=\"memdesc:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Move assignment. <br/></td></tr>\n<tr class=\"separator:a0d26889a94203cdb5f5460fade7497c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1fe7f0b60bbf304890a9293a35e6819d\"></a>\ntemplate&lt;class M &gt; </td></tr>\n<tr class=\"memitem:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">operator=</a> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, M &gt; &amp;vector)</td></tr>\n<tr class=\"memdesc:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment for vector with different allocator type. <br/></td></tr>\n<tr class=\"separator:a1fe7f0b60bbf304890a9293a35e6819d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8498a1335a3bbac2f4925a4e8d70cdb8\"></a>\n<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">operator=</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"memdesc:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Assignment for initializer_list. <br/></td></tr>\n<tr class=\"separator:a8498a1335a3bbac2f4925a4e8d70cdb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab89c2db5358048debdc282ff995caffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab89c2db5358048debdc282ff995caffb\">grow_by</a> (size_type delta)</td></tr>\n<tr class=\"memdesc:ab89c2db5358048debdc282ff995caffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Grow by \"delta\" elements.  <a href=\"#ab89c2db5358048debdc282ff995caffb\">More...</a><br/></td></tr>\n<tr class=\"separator:ab89c2db5358048debdc282ff995caffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">grow_by</a> (size_type delta, const_reference t)</td></tr>\n<tr class=\"memdesc:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Grow by \"delta\" elements using copying constructor.  <a href=\"#aa11fc991cda82cf93789fce31b37a16c\">More...</a><br/></td></tr>\n<tr class=\"separator:aa11fc991cda82cf93789fce31b37a16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#acfd74483ff523213b78f44fb914c8eb4\">grow_by</a> (I first, I last)</td></tr>\n<tr class=\"separator:acfd74483ff523213b78f44fb914c8eb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95f57f1529e0ebd1ca6bd2d60003fcab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a95f57f1529e0ebd1ca6bd2d60003fcab\">grow_by</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"separator:a95f57f1529e0ebd1ca6bd2d60003fcab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\">grow_to_at_least</a> (size_type n)</td></tr>\n<tr class=\"memdesc:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Append minimal sequence of elements such that <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>&gt;=n.  <a href=\"#ae9ef9895e88f9bf036b379035c18f035\">More...</a><br/></td></tr>\n<tr class=\"separator:ae9ef9895e88f9bf036b379035c18f035\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a422d9689ed72a5ef2b6b72f28e4143a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">grow_to_at_least</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"separator:a422d9689ed72a5ef2b6b72f28e4143a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad68d1675fedef232bfae35f200ba007d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad68d1675fedef232bfae35f200ba007d\">push_back</a> (const_reference item)</td></tr>\n<tr class=\"memdesc:ad68d1675fedef232bfae35f200ba007d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item.  <a href=\"#ad68d1675fedef232bfae35f200ba007d\">More...</a><br/></td></tr>\n<tr class=\"separator:ad68d1675fedef232bfae35f200ba007d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">push_back</a> (T &amp;&amp;item)</td></tr>\n<tr class=\"memdesc:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item, move-aware.  <a href=\"#ac29a9f08c0fac7c20786c7b8f4f0321a\">More...</a><br/></td></tr>\n<tr class=\"separator:ac29a9f08c0fac7c20786c7b8f4f0321a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">emplace_back</a> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Push item, create item \"in place\" with provided arguments.  <a href=\"#afae4c378515b89cc2b0a11c8cf1bcc50\">More...</a><br/></td></tr>\n<tr class=\"separator:afae4c378515b89cc2b0a11c8cf1bcc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">operator[]</a> (size_type index)</td></tr>\n<tr class=\"memdesc:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get reference to element at given index.  <a href=\"#a3097cb46511504acfc9de7da5235f4a6\">More...</a><br/></td></tr>\n<tr class=\"separator:a3097cb46511504acfc9de7da5235f4a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abd6ca67f2f97fafca48395af2e693e73\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">operator[]</a> (size_type index) const </td></tr>\n<tr class=\"memdesc:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const reference to element at given index. <br/></td></tr>\n<tr class=\"separator:abd6ca67f2f97fafca48395af2e693e73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a629a29eb21e528414b9d5c9becfe05cd\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">at</a> (size_type index)</td></tr>\n<tr class=\"memdesc:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get reference to element at given index. Throws exceptions on errors. <br/></td></tr>\n<tr class=\"separator:a629a29eb21e528414b9d5c9becfe05cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">at</a> (size_type index) const </td></tr>\n<tr class=\"memdesc:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const reference to element at given index. Throws exceptions on errors. <br/></td></tr>\n<tr class=\"separator:ae4dc6c1b55c0e0b73f0a8675ef2b60a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8201f65735edcc28aeec95b6e73d75b6\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">range</a> (size_t grainsize=1)</td></tr>\n<tr class=\"memdesc:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get range for iterating with parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a8201f65735edcc28aeec95b6e73d75b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8fcc32ec9ccb48c3327a88fe288c7538\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8fcc32ec9ccb48c3327a88fe288c7538\">range</a> (size_t grainsize=1) const </td></tr>\n<tr class=\"memdesc:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const range for iterating with parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a8fcc32ec9ccb48c3327a88fe288c7538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a803268c16e3688ff4681251947d257c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a803268c16e3688ff4681251947d257c7\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">size</a> () const </td></tr>\n<tr class=\"memdesc:a803268c16e3688ff4681251947d257c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return size of vector. It may include elements under construction. <br/></td></tr>\n<tr class=\"separator:a803268c16e3688ff4681251947d257c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3f6774107e65642f73c0dcc9a962fe7\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">empty</a> () const </td></tr>\n<tr class=\"memdesc:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return false if vector is not empty or has elements under construction at least. <br/></td></tr>\n<tr class=\"separator:aa3f6774107e65642f73c0dcc9a962fe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a96c2ae9dfedc24d62554feb627df76c3\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">capacity</a> () const </td></tr>\n<tr class=\"memdesc:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br/></td></tr>\n<tr class=\"separator:a96c2ae9dfedc24d62554feb627df76c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b3284684328c58c0228c9a697ef3594\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">reserve</a> (size_type n)</td></tr>\n<tr class=\"memdesc:a0b3284684328c58c0228c9a697ef3594\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate enough space to grow to size n without having to allocate more memory later.  <a href=\"#a0b3284684328c58c0228c9a697ef3594\">More...</a><br/></td></tr>\n<tr class=\"separator:a0b3284684328c58c0228c9a697ef3594\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65e53a98a1e1fdb515fdc2b84e2314e8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\">resize</a> (size_type n)</td></tr>\n<tr class=\"memdesc:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resize the vector. Not thread-safe. <br/></td></tr>\n<tr class=\"separator:a65e53a98a1e1fdb515fdc2b84e2314e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a941917a8a840ff08ce8810ca9476ff46\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">resize</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"memdesc:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resize the vector, copy t for new elements. Not thread-safe. <br/></td></tr>\n<tr class=\"separator:a941917a8a840ff08ce8810ca9476ff46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba805b5225ad3399550f78ea15e51e93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba805b5225ad3399550f78ea15e51e93\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">shrink_to_fit</a> ()</td></tr>\n<tr class=\"memdesc:aba805b5225ad3399550f78ea15e51e93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Optimize memory usage and fragmentation. <br/></td></tr>\n<tr class=\"separator:aba805b5225ad3399550f78ea15e51e93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0ec9c3ab3360e04bdaa5174956a3206d\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">max_size</a> () const </td></tr>\n<tr class=\"memdesc:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upper bound on argument to reserve. <br/></td></tr>\n<tr class=\"separator:a0ec9c3ab3360e04bdaa5174956a3206d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab55636c80368ad7d400f3200313fcf5f\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">begin</a> ()</td></tr>\n<tr class=\"memdesc:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start iterator <br/></td></tr>\n<tr class=\"separator:ab55636c80368ad7d400f3200313fcf5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad2c07653375e4a5f89c33b375eda610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad2c07653375e4a5f89c33b375eda610\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">end</a> ()</td></tr>\n<tr class=\"memdesc:aad2c07653375e4a5f89c33b375eda610\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end iterator <br/></td></tr>\n<tr class=\"separator:aad2c07653375e4a5f89c33b375eda610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3eb33d1b10a988a87cc708ceb08f3a9\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">begin</a> () const </td></tr>\n<tr class=\"memdesc:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start const iterator <br/></td></tr>\n<tr class=\"separator:ad3eb33d1b10a988a87cc708ceb08f3a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a4ad0795a19d94df24595e748f0b193\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a6a4ad0795a19d94df24595e748f0b193\">end</a> () const </td></tr>\n<tr class=\"memdesc:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a6a4ad0795a19d94df24595e748f0b193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7a1c5441fa480c07ef37d9206b6260cc\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">cbegin</a> () const </td></tr>\n<tr class=\"memdesc:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">start const iterator <br/></td></tr>\n<tr class=\"separator:a7a1c5441fa480c07ef37d9206b6260cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9ea80faf139feb54d6576c036e4ba898\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">cend</a> () const </td></tr>\n<tr class=\"memdesc:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a9ea80faf139feb54d6576c036e4ba898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a2f8dce0adcbef8e29273c23723a78e\"></a>\nreverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">rbegin</a> ()</td></tr>\n<tr class=\"memdesc:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start iterator <br/></td></tr>\n<tr class=\"separator:a9a2f8dce0adcbef8e29273c23723a78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a618f38279a370c18f73ea2c29ded9cb9\"></a>\nreverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">rend</a> ()</td></tr>\n<tr class=\"memdesc:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end iterator <br/></td></tr>\n<tr class=\"separator:a618f38279a370c18f73ea2c29ded9cb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a976b0bed19de9ab93f78c10184a4e38f\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a976b0bed19de9ab93f78c10184a4e38f\">rbegin</a> () const </td></tr>\n<tr class=\"memdesc:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start const iterator <br/></td></tr>\n<tr class=\"separator:a976b0bed19de9ab93f78c10184a4e38f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abdb98e17cb65d9c445d7fd1e662c2699\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">rend</a> () const </td></tr>\n<tr class=\"memdesc:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end const iterator <br/></td></tr>\n<tr class=\"separator:abdb98e17cb65d9c445d7fd1e662c2699\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2627db4a7949522ea4727320b23a6348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2627db4a7949522ea4727320b23a6348\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">crbegin</a> () const </td></tr>\n<tr class=\"memdesc:a2627db4a7949522ea4727320b23a6348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse start const iterator <br/></td></tr>\n<tr class=\"separator:a2627db4a7949522ea4727320b23a6348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad097225c529dbb24cc0e13a444ab4752\"></a>\nconst_reverse_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">crend</a> () const </td></tr>\n<tr class=\"memdesc:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">reverse end const iterator <br/></td></tr>\n<tr class=\"separator:ad097225c529dbb24cc0e13a444ab4752\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9bfc6d733cf543280b691ed8d7b7908a\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">front</a> ()</td></tr>\n<tr class=\"memdesc:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the first item <br/></td></tr>\n<tr class=\"separator:a9bfc6d733cf543280b691ed8d7b7908a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9067259572c2c41d014840d0f9d3cdce\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a9067259572c2c41d014840d0f9d3cdce\">front</a> () const </td></tr>\n<tr class=\"memdesc:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the first item const <br/></td></tr>\n<tr class=\"separator:a9067259572c2c41d014840d0f9d3cdce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaee3ddf1d05238a8a6887f6d824b76f8\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">back</a> ()</td></tr>\n<tr class=\"memdesc:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the last item <br/></td></tr>\n<tr class=\"separator:aaee3ddf1d05238a8a6887f6d824b76f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf66eb1e82dbcb430d9926a23711c720\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#acf66eb1e82dbcb430d9926a23711c720\">back</a> () const </td></tr>\n<tr class=\"memdesc:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">the last item const <br/></td></tr>\n<tr class=\"separator:acf66eb1e82dbcb430d9926a23711c720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88b62a9614d3f2b59c9c7c1a2143fb1e\"></a>\nallocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">get_allocator</a> () const </td></tr>\n<tr class=\"memdesc:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">return allocator object <br/></td></tr>\n<tr class=\"separator:a88b62a9614d3f2b59c9c7c1a2143fb1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a87355dce93d0882aa73333a35c9b367c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a87355dce93d0882aa73333a35c9b367c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">assign</a> (size_type n, const_reference t)</td></tr>\n<tr class=\"memdesc:a87355dce93d0882aa73333a35c9b367c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assign n items by copying t item <br/></td></tr>\n<tr class=\"separator:a87355dce93d0882aa73333a35c9b367c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7bb5399a8499f88cf859eab39f0ed9e0\"></a>\ntemplate&lt;class I &gt; </td></tr>\n<tr class=\"memitem:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">assign</a> (I first, I last)</td></tr>\n<tr class=\"memdesc:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assign range [first, last) <br/></td></tr>\n<tr class=\"separator:a7bb5399a8499f88cf859eab39f0ed9e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584d6cda5794441b19d4f02bde399dff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a584d6cda5794441b19d4f02bde399dff\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">assign</a> (std::initializer_list&lt; T &gt; init_list)</td></tr>\n<tr class=\"memdesc:a584d6cda5794441b19d4f02bde399dff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">assigns an initializer list <br/></td></tr>\n<tr class=\"separator:a584d6cda5794441b19d4f02bde399dff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8603bd57324fb6b60ba006884c95279d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8603bd57324fb6b60ba006884c95279d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">swap</a> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a> &amp;vector)</td></tr>\n<tr class=\"memdesc:a8603bd57324fb6b60ba006884c95279d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">swap two instances <br/></td></tr>\n<tr class=\"separator:a8603bd57324fb6b60ba006884c95279d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a526ba408fb3064ef846940d633b8f365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a526ba408fb3064ef846940d633b8f365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear container while keeping memory allocated.  <a href=\"#a526ba408fb3064ef846940d633b8f365\">More...</a><br/></td></tr>\n<tr class=\"separator:a526ba408fb3064ef846940d633b8f365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5bcaededc9a00e7aaecd6c262fd0b38\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">~concurrent_vector</a> ()</td></tr>\n<tr class=\"memdesc:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clear and destroy vector. <br/></td></tr>\n<tr class=\"separator:ab5bcaededc9a00e7aaecd6c262fd0b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a675f1b62a651d350eb0d778a271e31e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a675f1b62a651d350eb0d778a271e31e5\"></a>\nconst <br class=\"typebreak\"/>\ninternal::concurrent_vector_base_v3 &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_vector_base</b> () const </td></tr>\n<tr class=\"separator:a675f1b62a651d350eb0d778a271e31e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a96e2626d160361d8c6f4193ca0c7a4dd\"></a>\ntemplate&lt;typename I &gt; </td></tr>\n<tr class=\"memitem:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>copy_range</b> (void *dst, const void *p_type_erased_iterator, size_type n)</td></tr>\n<tr class=\"separator:a96e2626d160361d8c6f4193ca0c7a4dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a134b00c8dd9200b9e45fe81919c66b11\"></a>\ntemplate&lt;typename C , typename U &gt; </td></tr>\n<tr class=\"memitem:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::vector_iterator</b></td></tr>\n<tr class=\"separator:a134b00c8dd9200b9e45fe81919c66b11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br/>\nclass tbb::concurrent_vector&lt; T, A &gt;</h3>\n\n<p>Concurrent vector container. </p>\n<pre class=\"fragment\">concurrent_vector is a container having the following main properties:\n- It provides random indexed access to its elements. The index of the first element is 0.\n- It ensures safe concurrent growing its size (different threads can safely append new elements).\n- Adding new elements does not invalidate existing iterators and does not change indices of existing items.\n</pre><dl class=\"section user\"><dt>Compatibility</dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>\n<dl class=\"section user\"><dt>Exception Safety</dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>\n<li>Throwing an exception is forbidden for destructor of T.</li>\n<li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li>\n</ul>\nOtherwise, the program's behavior is undefined. </dd></dl>\n<dl class=\"section user\"><dt></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>\n<li>There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li>\n<li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li>\n<li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li>\n<li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\" title=\"Get reference to element at given index. Throws exceptions on errors. \">at()</a> method a C++ exception is thrown.</li>\n</ul>\nIf a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>\n<dl class=\"section user\"><dt>Fragmentation</dt><dd>Unlike an STL vector, a <a class=\"el\" href=\"a00060.html\" title=\"Concurrent vector container. \">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be optimized by method compact() that merges several smaller arrays into one solid.</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.1</dt><dd><ul>\n<li>Fixed guarantees of <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">concurrent_vector::size()</a> and <a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\" title=\"Append minimal sequence of elements such that size()&gt;=n. \">grow_to_at_least()</a> methods to assure elements are allocated.</li>\n<li>Methods <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\" title=\"end iterator \">end()</a>/rbegin()/back() are partly thread-safe since they use <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a> to get the end of vector</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\" title=\"Resize the vector. Not thread-safe. \">resize()</a> methods (not thread-safe)</li>\n<li>Added cbegin/cend/crbegin/crend methods</li>\n<li>Changed return type of methods grow* and push_back to iterator</li>\n</ul>\n</dd></dl>\n<dl class=\"section user\"><dt>Changes since TBB 2.0</dt><dd><ul>\n<li>Implemented exception-safety guarantees</li>\n<li>Added template argument for allocator</li>\n<li>Added allocator argument in constructors</li>\n<li>Faster index calculation</li>\n<li>First growth call specifies a number of segments to be merged in the first allocation.</li>\n<li>Fixed memory blow up for swarm of vector's instances of small size</li>\n<li>Added <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\" title=\"Grow by &quot;delta&quot; elements using copying constructor. \">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li>\n<li>Added STL-like constructors.</li>\n<li>Added operators ==, &lt; and derivatives</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\" title=\"Get reference to element at given index. Throws exceptions on errors. \">at()</a> method, approved for using after an exception was thrown inside the vector</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\" title=\"return allocator object \">get_allocator()</a> method.</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\" title=\"assign n items by copying t item \">assign()</a> methods</li>\n<li>Added compact() method to defragment first segments</li>\n<li>Added <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\" title=\"swap two instances \">swap()</a> method</li>\n<li><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\" title=\"Get range for iterating with parallel algorithms. \">range()</a> defaults on grainsize = 1 supporting auto grainsize algorithms. </li>\n</ul>\n</dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a526ba408fb3064ef846940d633b8f365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::clear </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clear container while keeping memory allocated. </p>\n<p>To free up the memory, use in conjunction with method compact(). Not thread safe </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afae4c378515b89cc2b0a11c8cf1bcc50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename... Args&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::emplace_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">Args &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>args</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item, create item \"in place\" with provided arguments. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab89c2db5358048debdc282ff995caffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>delta</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Grow by \"delta\" elements. </p>\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa11fc991cda82cf93789fce31b37a16c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>delta</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>t</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Grow by \"delta\" elements using copying constructor. </p>\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acfd74483ff523213b78f44fb914c8eb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename I &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">I&#160;</td>\n          <td class=\"paramname\"><em>first</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">I&#160;</td>\n          <td class=\"paramname\"><em>last</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a95f57f1529e0ebd1ca6bd2d60003fcab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by </td>\n          <td>(</td>\n          <td class=\"paramtype\">std::initializer_list&lt; T &gt;&#160;</td>\n          <td class=\"paramname\"><em>init_list</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns iterator pointing to the first new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae9ef9895e88f9bf036b379035c18f035\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Append minimal sequence of elements such that <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>&gt;=n. </p>\n<p>The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a422d9689ed72a5ef2b6b72f28e4143a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>t</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Analogous to <a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\" title=\"Append minimal sequence of elements such that size()&gt;=n. \">grow_to_at_least( size_type n )</a> with exception that the new elements are initialized by copying of t instead of default construction. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3097cb46511504acfc9de7da5235f4a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">reference <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::operator[] </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>index</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Get reference to element at given index. </p>\n<p>This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index &lt; <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\" title=\"Return size of vector. It may include elements under construction. \">size()</a>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad68d1675fedef232bfae35f200ba007d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::push_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">const_reference&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac29a9f08c0fac7c20786c7b8f4f0321a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">iterator <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::push_back </td>\n          <td>(</td>\n          <td class=\"paramtype\">T &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Push item, move-aware. </p>\n<p>Returns iterator pointing to the new element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0b3284684328c58c0228c9a697ef3594\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector</a>&lt; T, A &gt;::reserve </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_type&#160;</td>\n          <td class=\"paramname\"><em>n</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allocate enough space to grow to size n without having to allocate more memory later. </p>\n<p>Like most of the methods provided for STL compatibility, this method is <em>not</em> thread safe. The capacity afterwards may be bigger than the requested reservation. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_vector.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00061.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00381.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Combines data access, locking, and garbage collection.  \n <a href=\"a00061.html#details\">More...</a></p>\n\n<p><code>#include &lt;concurrent_hash_map.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00061.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor_map\">\n<area href=\"a00017.html\" title=\"Allows write access to elements and combines data access, locking, and garbage collection. \" alt=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor\" shape=\"rect\" coords=\"0,112,488,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa8ca5aef4ee14b7eddb64767b8cd5fda\"></a>\ntypedef const <br class=\"typebreak\"/>\nconcurrent_hash_map::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a></td></tr>\n<tr class=\"memdesc:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of value. <br/></td></tr>\n<tr class=\"separator:aa8ca5aef4ee14b7eddb64767b8cd5fda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6299b523d2ae8e2613f1bc160ca99b85\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a> () const </td></tr>\n<tr class=\"memdesc:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if result is empty. <br/></td></tr>\n<tr class=\"separator:a6299b523d2ae8e2613f1bc160ca99b85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a18390cb369369d72bdf7c867755b5190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a18390cb369369d72bdf7c867755b5190\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a> ()</td></tr>\n<tr class=\"memdesc:a18390cb369369d72bdf7c867755b5190\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to null. <br/></td></tr>\n<tr class=\"separator:a18390cb369369d72bdf7c867755b5190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8adf04e33e7c8c876ba849f26807713a\"></a>\nconst_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a> () const </td></tr>\n<tr class=\"memdesc:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return reference to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a8adf04e33e7c8c876ba849f26807713a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28fa9b9e6c35d7e80217e69a7afe1ee5\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a> () const </td></tr>\n<tr class=\"memdesc:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pointer to associated value in hash table. <br/></td></tr>\n<tr class=\"separator:a28fa9b9e6c35d7e80217e69a7afe1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7b26d22d228cf0d8678c9b346c63752c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create empty result. <br/></td></tr>\n<tr class=\"separator:a7b26d22d228cf0d8678c9b346c63752c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc0c85a146c912b9a0f94a7695957c7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a> ()</td></tr>\n<tr class=\"memdesc:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy result after releasing the underlying reference. <br/></td></tr>\n<tr class=\"separator:afbc0c85a146c912b9a0f94a7695957c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a05b74d408d8cd7773f7b5edfef97da1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05b74d408d8cd7773f7b5edfef97da1b\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_writer</b> ()</td></tr>\n<tr class=\"separator:a05b74d408d8cd7773f7b5edfef97da1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ac9b96f45483ddbff95a95e8e666a8f28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9b96f45483ddbff95a95e8e666a8f28\"></a>\n<a class=\"el\" href=\"a00098.html\">node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_node</b></td></tr>\n<tr class=\"separator:ac9b96f45483ddbff95a95e8e666a8f28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5034084f595666b47734f99a6eaefa9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5034084f595666b47734f99a6eaefa9f\"></a>\nhashcode_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_hash</b></td></tr>\n<tr class=\"separator:a5034084f595666b47734f99a6eaefa9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a9a30829231c2a2f13cb12430992a0701\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a30829231c2a2f13cb12430992a0701\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b></td></tr>\n<tr class=\"separator:a9a30829231c2a2f13cb12430992a0701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1dfccf6cc719ff15006a2b05cf70dd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1dfccf6cc719ff15006a2b05cf70dd7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>accessor</b></td></tr>\n<tr class=\"separator:ab1dfccf6cc719ff15006a2b05cf70dd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Key, typename T, typename HashCompare = tbb_hash_compare&lt;Key&gt;, typename A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt;&gt;<br/>\nclass tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</h3>\n\n<p>Combines data access, locking, and garbage collection. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00062.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::continue_msg Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00062.html\">continue_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_msg Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>An empty class used for messages that mean \"I'm done\".  \n <a href=\"a00062.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>An empty class used for messages that mean \"I'm done\". </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00063.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::continue_receiver Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00345.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_receiver Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Base class for receivers of completion messages.  \n <a href=\"a00063.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::continue_receiver:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00063.png\" usemap=\"#tbb::flow::interface10::continue_receiver_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::continue_receiver_map\" name=\"tbb::flow::interface10::continue_receiver_map\">\n<area href=\"a00133.html\" alt=\"tbb::flow::interface10::receiver&lt; continue_msg &gt;\" shape=\"rect\" coords=\"0,56,283,80\"/>\n<area href=\"a00178.html\" alt=\"tbb::flow::interface10::internal::untyped_receiver\" shape=\"rect\" coords=\"0,0,283,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24e64153a8f1bf284d5d7ba980ac0866\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a></td></tr>\n<tr class=\"memdesc:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type. <br/></td></tr>\n<tr class=\"separator:a24e64153a8f1bf284d5d7ba980ac0866\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01d35fb1cb3e447929219ed6f61314ec\"></a>\ntypedef <a class=\"el\" href=\"a00133.html\">receiver</a>&lt; <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:a01d35fb1cb3e447929219ed6f61314ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb2e17fdd70345d3291cb1eb9d37fa84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb2e17fdd70345d3291cb1eb9d37fa84\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:aeb2e17fdd70345d3291cb1eb9d37fa84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c34b0f5b4588b9edbc60b69e554ee85\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c34b0f5b4588b9edbc60b69e554ee85\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a4c34b0f5b4588b9edbc60b69e554ee85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef <a class=\"el\" href=\"a00062.html\">continue_msg</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ed56cc8468b7e29c39c04dcb1b59f9b inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ed56cc8468b7e29c39c04dcb1b59f9b\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a8ed56cc8468b7e29c39c04dcb1b59f9b inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abca607a1fa7f7ad0d55d374e4416fe7e\"></a>\ntypedef <a class=\"el\" href=\"a00153.html\">sender</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:abca607a1fa7f7ad0d55d374e4416fe7e inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affeefcd8a802c09194c27555188a95a2 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affeefcd8a802c09194c27555188a95a2\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:affeefcd8a802c09194c27555188a95a2 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e5331f73255893c402e844eba978578 inherit pub_types_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e5331f73255893c402e844eba978578\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a7e5331f73255893c402e844eba978578 inherit pub_types_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6525c867f797a1feb9b77b5bb39f155f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">continue_receiver</a> (int number_of_predecessors=0)</td></tr>\n<tr class=\"memdesc:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor. <br/></td></tr>\n<tr class=\"separator:a6525c867f797a1feb9b77b5bb39f155f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac860c7f19e8aaf7c26128b05920afa96\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">continue_receiver</a> (const <a class=\"el\" href=\"a00063.html\">continue_receiver</a> &amp;src)</td></tr>\n<tr class=\"memdesc:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy constructor. <br/></td></tr>\n<tr class=\"separator:ac860c7f19e8aaf7c26128b05920afa96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a74596e8e05663573189d7b6c66dfad7c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Increments the trigger threshold. <br/></td></tr>\n<tr class=\"separator:a74596e8e05663573189d7b6c66dfad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decrements the trigger threshold.  <a href=\"#adb90a3427caad6c4ef6d3d590de988bc\">More...</a><br/></td></tr>\n<tr class=\"separator:adb90a3427caad6c4ef6d3d590de988bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeca3f784d8d038f1d921de4462660864\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeca3f784d8d038f1d921de4462660864\"></a>\n<a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> () __TBB_override</td></tr>\n<tr class=\"separator:aeca3f784d8d038f1d921de4462660864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8bd80818067d300506d2414ad9d538ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8bd80818067d300506d2414ad9d538ba\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;s) __TBB_override</td></tr>\n<tr class=\"separator:a8bd80818067d300506d2414ad9d538ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af391292d8fc91b05a9463c9de5650eb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af391292d8fc91b05a9463c9de5650eb3\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;s) __TBB_override</td></tr>\n<tr class=\"separator:af391292d8fc91b05a9463c9de5650eb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aee2377550449825b0449968611cf04eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aee2377550449825b0449968611cf04eb\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;v) __TBB_override</td></tr>\n<tr class=\"separator:aee2377550449825b0449968611cf04eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20bd723b393799ecef6ea764296f6f81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20bd723b393799ecef6ea764296f6f81\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> () __TBB_override</td></tr>\n<tr class=\"separator:a20bd723b393799ecef6ea764296f6f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6545b1434a16ee261ed6c4ee7f9044a6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;::<a class=\"el\" href=\"a00062.html\">filtered_type</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a6545b1434a16ee261ed6c4ee7f9044a6 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4f0b65672f9c488e6c8e069e1afaebd inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4f0b65672f9c488e6c8e069e1afaebd\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put</b> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; <a class=\"el\" href=\"a00062.html\">continue_msg</a> &gt;::async_type &amp;t)</td></tr>\n<tr class=\"separator:ac4f0b65672f9c488e6c8e069e1afaebd inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9717a7ab9ad56f3210c08dbb320def77\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a> (const <a class=\"el\" href=\"a00062.html\">continue_msg</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a9717a7ab9ad56f3210c08dbb320def77 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2f3f8570b3fed4148baf16e72b04f38\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a> ()</td></tr>\n<tr class=\"memdesc:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:ad2f3f8570b3fed4148baf16e72b04f38 inherit pub_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a67ded0141aa65e09633d50421b1ffea8\"></a>\ntask *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task</a> (const <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> &amp;) __TBB_override</td></tr>\n<tr class=\"memdesc:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:a67ded0141aa65e09633d50421b1ffea8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d3c9bfbf36e9e743bb7f5954e061d49\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">reset_receiver</a> (reset_flags f) __TBB_override</td></tr>\n<tr class=\"memdesc:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a8d3c9bfbf36e9e743bb7f5954e061d49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">execute</a> ()=0</td></tr>\n<tr class=\"memdesc:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Does whatever should happen when the threshold is reached.  <a href=\"#a3efb5c784ac38993df3bbcee009add6a\">More...</a><br/></td></tr>\n<tr class=\"separator:a3efb5c784ac38993df3bbcee009add6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83eea0e877f085b052c5e2e759a80d9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83eea0e877f085b052c5e2e759a80d9e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> () __TBB_override</td></tr>\n<tr class=\"separator:a83eea0e877f085b052c5e2e759a80d9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00133\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00133')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td></tr>\n<tr class=\"memitem:afa535fb621f3744149fb97da1d020503 inherit pro_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa535fb621f3744149fb97da1d020503\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:afa535fb621f3744149fb97da1d020503 inherit pro_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab54afb91692e9cfb10470c575e46ac0a inherit pro_methods_a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab54afb91692e9cfb10470c575e46ac0a\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:ab54afb91692e9cfb10470c575e46ac0a inherit pro_methods_a00133\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ab7ecac3889ffd28178d06b1bcf0d32c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7ecac3889ffd28178d06b1bcf0d32c9\"></a>\n<a class=\"el\" href=\"a00070.html\">built_predecessors_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_built_predecessors</b></td></tr>\n<tr class=\"separator:ab7ecac3889ffd28178d06b1bcf0d32c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e2d98eca7c559c4d40b4deabbca20b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6e2d98eca7c559c4d40b4deabbca20b5\"></a>\n<a class=\"el\" href=\"a00154.html\">spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_mutex</b></td></tr>\n<tr class=\"separator:a6e2d98eca7c559c4d40b4deabbca20b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5047ebc93e5fc6001d2e2dab649ba9f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5047ebc93e5fc6001d2e2dab649ba9f0\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_predecessor_count</b></td></tr>\n<tr class=\"separator:a5047ebc93e5fc6001d2e2dab649ba9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a243f873da0d37967f79f0214ac23ce16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a243f873da0d37967f79f0214ac23ce16\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_current_count</b></td></tr>\n<tr class=\"separator:a243f873da0d37967f79f0214ac23ce16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae4e90ceedd72a6089cf05f81db0bc4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aae4e90ceedd72a6089cf05f81db0bc4c\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_initial_predecessor_count</b></td></tr>\n<tr class=\"separator:aae4e90ceedd72a6089cf05f81db0bc4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename R , typename B &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_put_task</b></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>limiter_node</b></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename TT , typename M &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Base class for receivers of completion messages. </p>\n<p>These receivers automatically reset, but cannot be explicitly waited on </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a3efb5c784ac38993df3bbcee009add6a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual task* tbb::flow::interface10::continue_receiver::execute </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Does whatever should happen when the threshold is reached. </p>\n<p>This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\" title=\"Put an item to the receiver. \">try_put()</a>. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adb90a3427caad6c4ef6d3d590de988bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::flow::interface10::continue_receiver::remove_predecessor </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Decrements the trigger threshold. </p>\n<p>Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00064.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::critical_section_v4 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00417.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::critical_section_v4:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00064.png\" usemap=\"#tbb::internal::critical_section_v4_map\" alt=\"\"/>\n  <map id=\"tbb::internal::critical_section_v4_map\" name=\"tbb::internal::critical_section_v4_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab661617ca865c4af0f34e07276f73c9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab661617ca865c4af0f34e07276f73c9e\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:ab661617ca865c4af0f34e07276f73c9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb1ccdfc59fdd3f5a3a8db17c56102e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb1ccdfc59fdd3f5a3a8db17c56102e8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>lock</b> ()</td></tr>\n<tr class=\"separator:afb1ccdfc59fdd3f5a3a8db17c56102e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbbd611ea04432e112b08e56251bc8b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbbd611ea04432e112b08e56251bc8b5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_lock</b> ()</td></tr>\n<tr class=\"separator:adbbd611ea04432e112b08e56251bc8b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a081d4eae71879fd7dcf2c4ca9ea7fb67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a081d4eae71879fd7dcf2c4ca9ea7fb67\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unlock</b> ()</td></tr>\n<tr class=\"separator:a081d4eae71879fd7dcf2c4ca9ea7fb67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a7a62f98ad578ec8ac01d88de55bd271c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7a62f98ad578ec8ac01d88de55bd271c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a7a62f98ad578ec8ac01d88de55bd271c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47f75eb62f02cbdee0d602dff38075e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47f75eb62f02cbdee0d602dff38075e9\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a47f75eb62f02cbdee0d602dff38075e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a12f986c4c554db133c2ae657acf2a496\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a12f986c4c554db133c2ae657acf2a496\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a12f986c4c554db133c2ae657acf2a496\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>critical_section.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00065.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_device_filter Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00370.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_filter Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab69d0762f7468fb4aca8aa9c279647c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab69d0762f7468fb4aca8aa9c279647c7\"></a>\n<a class=\"el\" href=\"a00106.html\">opencl_device_list</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;devices)</td></tr>\n<tr class=\"separator:ab69d0762f7468fb4aca8aa9c279647c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00066.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00369.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab6a7568e4dad182e2b9757e53e6dc30e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab6a7568e4dad182e2b9757e53e6dc30e\"></a>\n<a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:ab6a7568e4dad182e2b9757e53e6dc30e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00067.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00371.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_info::default_opencl_factory:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00067.png\" usemap=\"#tbb::flow::interface10::opencl_info::default_opencl_factory_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_info::default_opencl_factory_map\" name=\"tbb::flow::interface10::opencl_info::default_opencl_factory_map\">\n<area href=\"a00107.html\" alt=\"tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;\" shape=\"rect\" coords=\"0,0,358,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a0c095d88947ac14555f550103fc074d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0c095d88947ac14555f550103fc074d9\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a0c095d88947ac14555f550103fc074d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> &gt;</td></tr>\n<tr class=\"separator:a0c095d88947ac14555f550103fc074d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00107\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00107')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14 inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f11e7a88d0f3cbd236d6a272a9c2d14\"></a>\nusing&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00107.html\">opencl_factory</a>&lt; default_device_filter &gt;&gt;</td></tr>\n<tr class=\"separator:a9f11e7a88d0f3cbd236d6a272a9c2d14 inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93525acca7352e5e06674f350a146d18 inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93525acca7352e5e06674f350a146d18\"></a>\ntypedef <a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_type</b></td></tr>\n<tr class=\"separator:a93525acca7352e5e06674f350a146d18 inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0915b7bee4b372111c2698bbac15577f inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0915b7bee4b372111c2698bbac15577f\"></a>\ntypedef kernel&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a0915b7bee4b372111c2698bbac15577f inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6838f796f49054a40f86d60bfdba7fb inherit pub_types_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6838f796f49054a40f86d60bfdba7fb\"></a>\ntypedef <a class=\"el\" href=\"a00114.html\">opencl_range</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:aa6838f796f49054a40f86d60bfdba7fb inherit pub_types_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aab6e65faffa5aa3e58dd54805424cefd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aab6e65faffa5aa3e58dd54805424cefd\"></a>\n<a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>default_factory</b> ()</td></tr>\n<tr class=\"separator:aab6e65faffa5aa3e58dd54805424cefd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_methods_a00107\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00107')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td></tr>\n<tr class=\"memitem:a083fe6b14159cc159862ec5ae3ba9835 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a083fe6b14159cc159862ec5ae3ba9835\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>init</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;device_list)</td></tr>\n<tr class=\"separator:a083fe6b14159cc159862ec5ae3ba9835 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99f0be9c0e4beab8c827fb267e035c8c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const kernel_type &amp;kernel, const <a class=\"el\" href=\"a00114.html\">range_type</a> &amp;work_size, Args &amp;...args)</td></tr>\n<tr class=\"separator:a99f0be9c0e4beab8c827fb267e035c8c inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae225724eca814f88041fc7ad3e067424\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, T &amp;t, Rest &amp;...args)</td></tr>\n<tr class=\"separator:ae225724eca814f88041fc7ad3e067424 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28f06cdb00ed4a1e457c2ada04ba06b4 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28f06cdb00ed4a1e457c2ada04ba06b4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>)</td></tr>\n<tr class=\"separator:a28f06cdb00ed4a1e457c2ada04ba06b4 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30d7b701d89615b0fc98a2e6af448dee\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, FinalizeFn fn, Args &amp;...args)</td></tr>\n<tr class=\"separator:a30d7b701d89615b0fc98a2e6af448dee inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc10f0ed4303bff542facde82142b283 inherit pub_methods_a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abc10f0ed4303bff542facde82142b283\"></a>\nconst <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>devices</b> ()</td></tr>\n<tr class=\"separator:abc10f0ed4303bff542facde82142b283 inherit pub_methods_a00107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00068.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory::device_type Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00068.html\">device_type</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::device_type Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00069.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00375.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b3ff6023818444a3a74c08c426e0f6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b3ff6023818444a3a74c08c426e0f6a\"></a>\n<a class=\"el\" href=\"a00068.html\">device_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> (<a class=\"el\" href=\"a00082.html\">gfx_factory</a> &amp;)</td></tr>\n<tr class=\"separator:a4b3ff6023818444a3a74c08c426e0f6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00070.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::edge_container&lt; C &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00070.html\">edge_container</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00364.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::edge_container&lt; C &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a41bb4911e3531237e81d34f3dd5f4d45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a41bb4911e3531237e81d34f3dd5f4d45\"></a>\ntypedef std::list&lt; C <br class=\"typebreak\"/>\n*, <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator</a>&lt; C * &gt; &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>edge_list_type</b></td></tr>\n<tr class=\"separator:a41bb4911e3531237e81d34f3dd5f4d45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c4ece243e17e343d81cf4114cc06034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c4ece243e17e343d81cf4114cc06034\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>add_edge</b> (C &amp;s)</td></tr>\n<tr class=\"separator:a1c4ece243e17e343d81cf4114cc06034\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07fd404cc50c3519d506983622ff5b70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07fd404cc50c3519d506983622ff5b70\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>delete_edge</b> (C &amp;s)</td></tr>\n<tr class=\"separator:a07fd404cc50c3519d506983622ff5b70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05399c87d86ca67c1c966b7755c3be93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a05399c87d86ca67c1c966b7755c3be93\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_edges</b> (edge_list_type &amp;v)</td></tr>\n<tr class=\"separator:a05399c87d86ca67c1c966b7755c3be93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b5b447f8180115f2e76a45785803177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b5b447f8180115f2e76a45785803177\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>edge_count</b> ()</td></tr>\n<tr class=\"separator:a3b5b447f8180115f2e76a45785803177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a870d3089574c9bab1c2046a292a42b30\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a870d3089574c9bab1c2046a292a42b30\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a870d3089574c9bab1c2046a292a42b30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091feefc1f4667b387586ead10b477c6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a091feefc1f4667b387586ead10b477c6\"></a>\ntemplate&lt;typename S &gt; </td></tr>\n<tr class=\"memitem:a091feefc1f4667b387586ead10b477c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>sender_extract</b> (S &amp;s)</td></tr>\n<tr class=\"separator:a091feefc1f4667b387586ead10b477c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a38a1f599419331fa0280c32affd9aa1f\"></a>\ntemplate&lt;typename R &gt; </td></tr>\n<tr class=\"memitem:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>receiver_extract</b> (R &amp;r)</td></tr>\n<tr class=\"separator:a38a1f599419331fa0280c32affd9aa1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00071.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li><li class=\"navelem\"><b>push_back_helper</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00071.html\">element_construction_guard</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00293.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00071.png\" usemap=\"#tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\" alt=\"\"/>\n  <map id=\"tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\" name=\"tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab4eaaf8394013e2af109f6228ab1bebe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4eaaf8394013e2af109f6228ab1bebe\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>element_construction_guard</b> (pointer an_element)</td></tr>\n<tr class=\"separator:ab4eaaf8394013e2af109f6228ab1bebe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adcc00c3764106ca035731a44b92238a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adcc00c3764106ca035731a44b92238a8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>dismiss</b> ()</td></tr>\n<tr class=\"separator:adcc00c3764106ca035731a44b92238a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:abdb5e90a894c8d1f19a1a0c53f8779e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abdb5e90a894c8d1f19a1a0c53f8779e8\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>element</b></td></tr>\n<tr class=\"separator:abdb5e90a894c8d1f19a1a0c53f8779e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_vector.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00072.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00399.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00272.html\">Containers</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container.  \n <a href=\"a00072.html#details\">More...</a></p>\n\n<p><code>#include &lt;enumerable_thread_specific.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00072.png\" usemap=\"#tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\" name=\"tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad50ceae1b0e91d0fd31fe506e690692b\"></a>\ntypedef Allocator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">allocator_type</a></td></tr>\n<tr class=\"memdesc:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Basic types. <br/></td></tr>\n<tr class=\"separator:ad50ceae1b0e91d0fd31fe506e690692b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a931b97e237cd2ed6eabe0d939bd141da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a931b97e237cd2ed6eabe0d939bd141da\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a931b97e237cd2ed6eabe0d939bd141da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353a42e7bdda1720b7150cca99cf730b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353a42e7bdda1720b7150cca99cf730b\"></a>\ntypedef T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a353a42e7bdda1720b7150cca99cf730b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6c722a4b20fb6cae21316240b61d98d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6c722a4b20fb6cae21316240b61d98d2\"></a>\ntypedef const T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a6c722a4b20fb6cae21316240b61d98d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad88abc185701214e53e81973235ab6de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad88abc185701214e53e81973235ab6de\"></a>\ntypedef T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:ad88abc185701214e53e81973235ab6de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4aff438f46812452ab4a6f893df94fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4aff438f46812452ab4a6f893df94fc3\"></a>\ntypedef const T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a4aff438f46812452ab4a6f893df94fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a65e9cdc58e19d96b31b467c70c79122d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65e9cdc58e19d96b31b467c70c79122d\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal_collection_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a65e9cdc58e19d96b31b467c70c79122d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b6f002367fa7ca2e3e245e76d91ea7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0b6f002367fa7ca2e3e245e76d91ea7e\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal_collection_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a0b6f002367fa7ca2e3e245e76d91ea7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a713e97c954eef04e3fda62cf8c8bd63f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a713e97c954eef04e3fda62cf8c8bd63f\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::enumerable_thread_specific_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">internal_collection_type</a>, <br class=\"typebreak\"/>\nvalue_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a713e97c954eef04e3fda62cf8c8bd63f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9dacd1e38e45ee787faafd3a71b23fc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9dacd1e38e45ee787faafd3a71b23fc2\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::enumerable_thread_specific_iterator<br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00060.html\">internal_collection_type</a>, <br class=\"typebreak\"/>\nconst value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a9dacd1e38e45ee787faafd3a71b23fc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2200200e24eaf5ed6496ff3eaa6c4dcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2200200e24eaf5ed6496ff3eaa6c4dcc\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:a2200200e24eaf5ed6496ff3eaa6c4dcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9877dc4e09dc6c625a86a463f56f180d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9877dc4e09dc6c625a86a463f56f180d\"></a>\ntypedef generic_range_type<br class=\"typebreak\"/>\n&lt; const_iterator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_range_type</b></td></tr>\n<tr class=\"separator:a9877dc4e09dc6c625a86a463f56f180d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad95ccef01367c0b6d75f6f91f5bf5315\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">enumerable_thread_specific</a> ()</td></tr>\n<tr class=\"memdesc:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Each local instance of T is default constructed. <br/></td></tr>\n<tr class=\"separator:ad95ccef01367c0b6d75f6f91f5bf5315\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aafd6049aa255826c712aaba778524a7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aafd6049aa255826c712aaba778524a7c\"></a>\ntemplate&lt;typename Finit#if __TBB_ETS_USE_CPP11, typename  = typename internal::enable_if&lt;internal::is_callable_no_args&lt;typename internal::strip&lt;Finit&gt;::type&gt;::value&gt;::type #endif&gt; </td></tr>\n<tr class=\"memitem:aafd6049aa255826c712aaba778524a7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aafd6049aa255826c712aaba778524a7c\">enumerable_thread_specific</a> (Finit finit)</td></tr>\n<tr class=\"memdesc:aafd6049aa255826c712aaba778524a7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br/></td></tr>\n<tr class=\"separator:aafd6049aa255826c712aaba778524a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f0249ee95fa56665da4b6984f3a685a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a6f0249ee95fa56665da4b6984f3a685a\">enumerable_thread_specific</a> (const T &amp;exemplar)</td></tr>\n<tr class=\"memdesc:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar. <br/></td></tr>\n<tr class=\"separator:a6f0249ee95fa56665da4b6984f3a685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0db9450c25a0d0bc94bf8d77e51653d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0db9450c25a0d0bc94bf8d77e51653d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (T &amp;&amp;exemplar)</td></tr>\n<tr class=\"separator:a0db9450c25a0d0bc94bf8d77e51653d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa636348d57b1fc5127c7d642af51f6da\"></a>\ntemplate&lt;typename P1 , typename... P, typename  = typename internal::enable_if&lt;!internal::is_callable_no_args&lt;typename internal::strip&lt;P1&gt;::type&gt;::value                                                          &amp;&amp; !internal::is_compatible_ets&lt;T, typename internal::strip&lt;P1&gt;::type&gt;::value                                                          &amp;&amp; !internal::is_same_type&lt;T, typename internal::strip&lt;P1&gt;::type&gt;::value                                                         &gt;::type&gt; </td></tr>\n<tr class=\"memitem:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">enumerable_thread_specific</a> (P1 &amp;&amp;arg1, P &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Variadic constructor with initializer arguments. Each local instance of T is constructed by T(args...) <br/></td></tr>\n<tr class=\"separator:aa636348d57b1fc5127c7d642af51f6da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ea8d717f770acb63efc406df52d4585\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ea8d717f770acb63efc406df52d4585\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">~enumerable_thread_specific</a> ()</td></tr>\n<tr class=\"memdesc:a6ea8d717f770acb63efc406df52d4585\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a6ea8d717f770acb63efc406df52d4585\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aea846c6cbafbe2ff6bde6e8c2a2ee97e\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">local</a> ()</td></tr>\n<tr class=\"memdesc:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">returns reference to local, discarding exists <br/></td></tr>\n<tr class=\"separator:aea846c6cbafbe2ff6bde6e8c2a2ee97e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abbbc24a5816dc163d5df057c5e7f379d\"></a>\nreference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">local</a> (bool &amp;exists)</td></tr>\n<tr class=\"memdesc:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns reference to calling thread's local copy, creating one if necessary. <br/></td></tr>\n<tr class=\"separator:abbbc24a5816dc163d5df057c5e7f379d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c33c5390783e17daf2b25d53ae919fb\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">size</a> () const </td></tr>\n<tr class=\"memdesc:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the number of local copies. <br/></td></tr>\n<tr class=\"separator:a4c33c5390783e17daf2b25d53ae919fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adfa4b2e13e47ab825dc40c4f195d2bc5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">empty</a> () const </td></tr>\n<tr class=\"memdesc:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">true if there have been no local copies created <br/></td></tr>\n<tr class=\"separator:adfa4b2e13e47ab825dc40c4f195d2bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a070d26debf1f65c83de13f64f91aefdc\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">begin</a> ()</td></tr>\n<tr class=\"memdesc:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">begin iterator <br/></td></tr>\n<tr class=\"separator:a070d26debf1f65c83de13f64f91aefdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad225e2e8a968b131bf05d72f5686b924\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">end</a> ()</td></tr>\n<tr class=\"memdesc:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end iterator <br/></td></tr>\n<tr class=\"separator:ad225e2e8a968b131bf05d72f5686b924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa097383eb6f90e4a551830fc00b60b3a\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">begin</a> () const </td></tr>\n<tr class=\"memdesc:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">begin const iterator <br/></td></tr>\n<tr class=\"separator:aa097383eb6f90e4a551830fc00b60b3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ed0248f10a7aa5045d2cda77dad9588\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">end</a> () const </td></tr>\n<tr class=\"memdesc:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">end const iterator <br/></td></tr>\n<tr class=\"separator:a5ed0248f10a7aa5045d2cda77dad9588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac94dd896ed78df240da4a450defbca6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac94dd896ed78df240da4a450defbca6c\"></a>\nrange_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#ac94dd896ed78df240da4a450defbca6c\">range</a> (size_t grainsize=1)</td></tr>\n<tr class=\"memdesc:ac94dd896ed78df240da4a450defbca6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get range for parallel algorithms. <br/></td></tr>\n<tr class=\"separator:ac94dd896ed78df240da4a450defbca6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25b9153dfe994c8122a7f0227cffe793\"></a>\nconst_range_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">range</a> (size_t grainsize=1) const </td></tr>\n<tr class=\"memdesc:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get const range for parallel algorithms. <br/></td></tr>\n<tr class=\"separator:a25b9153dfe994c8122a7f0227cffe793\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a85a0d8f088ef1ee07aeb2c0e944a4a5e\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys local copies. <br/></td></tr>\n<tr class=\"separator:a85a0d8f088ef1ee07aeb2c0e944a4a5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b614f913497b8dc168a8e6ea03eac48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6b614f913497b8dc168a8e6ea03eac48\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;other)</td></tr>\n<tr class=\"separator:a6b614f913497b8dc168a8e6ea03eac48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15960d5f730ea183a581730e912700c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a15960d5f730ea183a581730e912700c8\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a15960d5f730ea183a581730e912700c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;other)</td></tr>\n<tr class=\"separator:a15960d5f730ea183a581730e912700c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04038b049009e17c637cc62a175afa29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04038b049009e17c637cc62a175afa29\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:a04038b049009e17c637cc62a175afa29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a33e410c904bc378c66e8e6724ea16671\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;&amp;other)</td></tr>\n<tr class=\"separator:a33e410c904bc378c66e8e6724ea16671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7af8784cd0d0f04b3f9f50988b8f0885\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7af8784cd0d0f04b3f9f50988b8f0885\"></a>\n<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;other)</td></tr>\n<tr class=\"separator:a7af8784cd0d0f04b3f9f50988b8f0885\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a5e2cfddffa47dd0eb042cf6cbcea815f\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;other)</td></tr>\n<tr class=\"separator:a5e2cfddffa47dd0eb042cf6cbcea815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae01add07bc8d4fbda9db79f692c1ae8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae01add07bc8d4fbda9db79f692c1ae8b\"></a>\n<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&amp;other)</td></tr>\n<tr class=\"separator:ae01add07bc8d4fbda9db79f692c1ae8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a324887df609279ad02d36b3b8e238729\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a324887df609279ad02d36b3b8e238729\"></a>\ntemplate&lt;typename Alloc , ets_key_usage_type Cachetype&gt; </td></tr>\n<tr class=\"memitem:a324887df609279ad02d36b3b8e238729\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a>&lt; T, Alloc, Cachetype &gt; &amp;&amp;other)</td></tr>\n<tr class=\"separator:a324887df609279ad02d36b3b8e238729\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:a7ab62b7fd2aeeb12e1a3b93c9ce99f27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae644ea36b776fdc698d87a60ef4a3179\"></a>\ntemplate&lt;typename combine_func_t &gt; </td></tr>\n<tr class=\"memitem:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>combine_each</b> (combine_func_t f_combine)</td></tr>\n<tr class=\"separator:ae644ea36b776fdc698d87a60ef4a3179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a408a399f5d1ceaf6d0adc9451932a96a\"></a>\ntemplate&lt;typename U , typename A , ets_key_usage_type C&gt; </td></tr>\n<tr class=\"memitem:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enumerable_thread_specific</b></td></tr>\n<tr class=\"separator:a408a399f5d1ceaf6d0adc9451932a96a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename Allocator, ets_key_usage_type ETS_key_type&gt;<br/>\nclass tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</h3>\n\n<p>The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container. </p>\n<pre class=\"fragment\">enumerable_thread_specific has the following properties:\n- thread-local copies are lazily created, with default, exemplar or function initialization.\n- thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.\n- the contained objects need not have operator=() defined if combine is not used.\n- enumerable_thread_specific containers may be copy-constructed or assigned.\n- thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.\n- outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods\n</pre><dl class=\"section user\"><dt>Segmented iterator</dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>\n<dl class=\"section user\"><dt>combine and combine_each</dt><dd><ul>\n<li>Both methods are defined for <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a>.</li>\n<li>combine() requires the type T have operator=() defined.</li>\n<li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li>\n<li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li>\n</ul>\n</dd></dl>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>enumerable_thread_specific.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00073.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::profiling::interface10::event Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>profiling</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00073.html\">event</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00429.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::profiling::interface10::event Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a30cfa97e0e6a87a9872756e0309bf9e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30cfa97e0e6a87a9872756e0309bf9e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>event</b> (const std::string &amp;input)</td></tr>\n<tr class=\"separator:a30cfa97e0e6a87a9872756e0309bf9e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf2739e7b1b9d40255e8c53a52b93ce9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> ()</td></tr>\n<tr class=\"separator:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac74f3476fb9c31c0da70d23a0310e8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac74f3476fb9c31c0da70d23a0310e8ea\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>event</b> (const std::string &amp;)</td></tr>\n<tr class=\"separator:ac74f3476fb9c31c0da70d23a0310e8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf2739e7b1b9d40255e8c53a52b93ce9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> ()</td></tr>\n<tr class=\"separator:aaf2739e7b1b9d40255e8c53a52b93ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a042ca8adf8c68c4c9355d03b30a6cd4a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a042ca8adf8c68c4c9355d03b30a6cd4a\"></a>\nstatic void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> (const std::string &amp;description)</td></tr>\n<tr class=\"separator:a042ca8adf8c68c4c9355d03b30a6cd4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4abc8ca3a9f40c9b088665f28b2b329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4abc8ca3a9f40c9b088665f28b2b329f\"></a>\nstatic void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>emit</b> (const std::string &amp;)</td></tr>\n<tr class=\"separator:a4abc8ca3a9f40c9b088665f28b2b329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_profiling.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00074.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::filter Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00074.html\">filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pro-static-attribs\">Static Protected Attributes</a> &#124;\n<a href=\"a00304.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::filter Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A stage in a pipeline.  \n <a href=\"a00074.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::filter:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00074.png\" usemap=\"#tbb::filter_map\" alt=\"\"/>\n  <map id=\"tbb::filter_map\" name=\"tbb::filter_map\">\n<area href=\"a00172.html\" title=\"A stage in a pipeline served by a user thread. \" alt=\"tbb::thread_bound_filter\" shape=\"rect\" coords=\"0,112,145,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-attribs\"></a>\nStatic Protected Attributes</h2></td></tr>\n<tr class=\"memitem:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9dab2e01b0963b341ab04b59eec1475\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a> = 0x1</td></tr>\n<tr class=\"memdesc:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>\n<tr class=\"separator:ae9dab2e01b0963b341ab04b59eec1475\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a> = 0x1&lt;&lt;4</td></tr>\n<tr class=\"memdesc:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4th bit distinguishes ordered vs unordered filters.  <a href=\"#a091fcf6abc79edfa5c8bf01f742e2392\">More...</a><br/></td></tr>\n<tr class=\"separator:a091fcf6abc79edfa5c8bf01f742e2392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1382f216bd094064a18eb48ecc43c86b\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a> = 0x1&lt;&lt;5</td></tr>\n<tr class=\"memdesc:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>\n<tr class=\"separator:a1382f216bd094064a18eb48ecc43c86b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6645ec56872b6ba2056dcaa467e292f7\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a> = 0x1&lt;&lt;6</td></tr>\n<tr class=\"memdesc:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">6th bit marks input filters emitting small objects <br/></td></tr>\n<tr class=\"separator:a6645ec56872b6ba2056dcaa467e292f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td></tr>\n<tr class=\"memdesc:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">7th bit defines exception propagation mode expected by the application.  <a href=\"#aab9689e23a96c6c9bf1c8caae74d92ee\">More...</a><br/></td></tr>\n<tr class=\"separator:aab9689e23a96c6c9bf1c8caae74d92ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A stage in a pipeline. </p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"aab9689e23a96c6c9bf1c8caae74d92ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char tbb::filter::exact_exception_propagation</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<b>Initial value:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\"><span class=\"preprocessor\">#if TBB_USE_CAPTURED_EXCEPTION</span></div>\n<div class=\"line\"><span class=\"preprocessor\">            0x0</span></div>\n</div><!-- fragment -->\n<p>7th bit defines exception propagation mode expected by the application. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a091fcf6abc79edfa5c8bf01f742e2392\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char tbb::filter::filter_is_out_of_order = 0x1&lt;&lt;4</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>4th bit distinguishes ordered vs unordered filters. </p>\n<p>The bit was not set for parallel filters in TBB 2.1 and earlier, but is_ordered() function always treats parallel filters as out of order. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00075.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::filter_t&lt; T, U &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00075.html\">filter_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00408.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::filter_t&lt; T, U &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Class representing a chain of type-safe pipeline filters.  \n <a href=\"a00075.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a291e76dc7ae92a66109a102904836b62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a291e76dc7ae92a66109a102904836b62\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filter_t</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T, U &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a291e76dc7ae92a66109a102904836b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a86c29832da3f4941254b8dce9e1ff6f0\"></a>\ntemplate&lt;typename Body &gt; </td></tr>\n<tr class=\"memitem:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>filter_t</b> (tbb::filter::mode mode, const Body &amp;body)</td></tr>\n<tr class=\"separator:a86c29832da3f4941254b8dce9e1ff6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae765b59c54ca11f9cdb9f7f2c6c3bd68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae765b59c54ca11f9cdb9f7f2c6c3bd68\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T, U &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:ae765b59c54ca11f9cdb9f7f2c6c3bd68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a445602c2d364b5bbcd8cc9e0b7f37376\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a445602c2d364b5bbcd8cc9e0b7f37376\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear</b> ()</td></tr>\n<tr class=\"separator:a445602c2d364b5bbcd8cc9e0b7f37376\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a49b422a3c97d5dc848d177246de4c149\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b422a3c97d5dc848d177246de4c149\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_proxy</b></td></tr>\n<tr class=\"separator:a49b422a3c97d5dc848d177246de4c149\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21460fde704da22caa222778f5abb140\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a21460fde704da22caa222778f5abb140\"></a>\ntemplate&lt;typename T_ , typename U_ , typename Body &gt; </td></tr>\n<tr class=\"memitem:a21460fde704da22caa222778f5abb140\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, U_ &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">make_filter</a> (tbb::filter::mode, const Body &amp;)</td></tr>\n<tr class=\"memdesc:a21460fde704da22caa222778f5abb140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a filter to participate in parallel_pipeline. <br/></td></tr>\n<tr class=\"separator:a21460fde704da22caa222778f5abb140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa80730e1b71fa4266ca0d1dc12da6caa\"></a>\ntemplate&lt;typename T_ , typename V_ , typename U_ &gt; </td></tr>\n<tr class=\"memitem:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, U_ &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&amp;</b> (const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; T_, V_ &gt; &amp;, const <a class=\"el\" href=\"a00075.html\">filter_t</a>&lt; V_, U_ &gt; &amp;)</td></tr>\n<tr class=\"separator:aa80730e1b71fa4266ca0d1dc12da6caa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename U&gt;<br/>\nclass tbb::interface6::filter_t&lt; T, U &gt;</h3>\n\n<p>Class representing a chain of type-safe pipeline filters. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00076.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::final_scan_tag Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00302.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::final_scan_tag Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Used to indicate that the final scan is being performed.  \n <a href=\"a00076.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_scan.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c30c3fe5fb9ca6cf9c567dcda123610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c30c3fe5fb9ca6cf9c567dcda123610\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator bool</b> ()</td></tr>\n<tr class=\"separator:a1c30c3fe5fb9ca6cf9c567dcda123610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:add2b3159a444aad51e3cf7ffe4d1d636\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add2b3159a444aad51e3cf7ffe4d1d636\"></a>\nstatic bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_final_scan</b> ()</td></tr>\n<tr class=\"separator:add2b3159a444aad51e3cf7ffe4d1d636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Used to indicate that the final scan is being performed. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_scan.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00077.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::fixed_pool Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00406.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::fixed_pool Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::fixed_pool:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00077.png\" usemap=\"#tbb::interface6::fixed_pool_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::fixed_pool_map\" name=\"tbb::interface6::fixed_pool_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3811fe3d437ba2eefa926d52732491a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">fixed_pool</a> (void *buf, size_t size)</td></tr>\n<tr class=\"memdesc:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">construct pool with underlying allocator <br/></td></tr>\n<tr class=\"separator:aa3811fe3d437ba2eefa926d52732491a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab854a85575e5c1e9c9f4d3eafcc28044\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">~fixed_pool</a> ()</td></tr>\n<tr class=\"memdesc:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destroy pool <br/></td></tr>\n<tr class=\"separator:ab854a85575e5c1e9c9f4d3eafcc28044\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00078.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::flattened2d&lt; Container &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00078.html\">flattened2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00400.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flattened2d&lt; Container &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b84f8f2cc4499f49d17141eaedc99c0\"></a>\ntypedef conval_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a></td></tr>\n<tr class=\"memdesc:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Basic types. <br/></td></tr>\n<tr class=\"separator:a8b84f8f2cc4499f49d17141eaedc99c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab0352636ee7434478866739224852d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab0352636ee7434478866739224852d32\"></a>\ntypedef <br class=\"typebreak\"/>\nconval_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:ab0352636ee7434478866739224852d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a426e0eab82833206df0dc36648419647\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a426e0eab82833206df0dc36648419647\"></a>\ntypedef conval_type::allocator_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocator_type</b></td></tr>\n<tr class=\"separator:a426e0eab82833206df0dc36648419647\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7070453b83df5930615d4307eb2f38b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7070453b83df5930615d4307eb2f38b5\"></a>\ntypedef conval_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a7070453b83df5930615d4307eb2f38b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92b8ef6b07970e3f973b3ece9d2a6201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a92b8ef6b07970e3f973b3ece9d2a6201\"></a>\ntypedef conval_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a92b8ef6b07970e3f973b3ece9d2a6201\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9715dae5bf107ca3530a8c5bea12739c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9715dae5bf107ca3530a8c5bea12739c\"></a>\ntypedef <br class=\"typebreak\"/>\nconval_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a9715dae5bf107ca3530a8c5bea12739c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14285cc70108c2f0bc417bb034484a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a14285cc70108c2f0bc417bb034484a0b\"></a>\ntypedef conval_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a14285cc70108c2f0bc417bb034484a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f67e5e005e394746b4c6d54a5c2748c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f67e5e005e394746b4c6d54a5c2748c\"></a>\ntypedef conval_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a4f67e5e005e394746b4c6d54a5c2748c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a14b3602cf1c408c89015d7bf6bf59072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a14b3602cf1c408c89015d7bf6bf59072\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::segmented_iterator<br class=\"typebreak\"/>\n&lt; Container, value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a14b3602cf1c408c89015d7bf6bf59072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a295c0b8755120359595a1b1f7447bbc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a295c0b8755120359595a1b1f7447bbc8\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::segmented_iterator<br class=\"typebreak\"/>\n&lt; Container, const value_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a295c0b8755120359595a1b1f7447bbc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a96d4bef4d78e9e04f43a4ce0855f2ec7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a96d4bef4d78e9e04f43a4ce0855f2ec7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flattened2d</b> (const Container &amp;c, typename Container::const_iterator b, typename Container::const_iterator e)</td></tr>\n<tr class=\"separator:a96d4bef4d78e9e04f43a4ce0855f2ec7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcc3a2e4b1eae8ef6ee1dfba8b030680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcc3a2e4b1eae8ef6ee1dfba8b030680\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flattened2d</b> (const Container &amp;c)</td></tr>\n<tr class=\"separator:abcc3a2e4b1eae8ef6ee1dfba8b030680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a783ca9408f58ca7f5df00bc1035ff6b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a783ca9408f58ca7f5df00bc1035ff6b2\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a783ca9408f58ca7f5df00bc1035ff6b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab722e1c2b58641d516cb98b0360b9734\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab722e1c2b58641d516cb98b0360b9734\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:ab722e1c2b58641d516cb98b0360b9734\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf0c0dff2b7b8530f06e6aa22b9a79ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf0c0dff2b7b8530f06e6aa22b9a79ea\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:acf0c0dff2b7b8530f06e6aa22b9a79ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b79fe79b6939327ab74628283974226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b79fe79b6939327ab74628283974226\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a5b79fe79b6939327ab74628283974226\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade48bc8ab723d06790e5d98365e8a4f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ade48bc8ab723d06790e5d98365e8a4f5\"></a>\n<a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ade48bc8ab723d06790e5d98365e8a4f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>enumerable_thread_specific.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00079.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::flow_control Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00079.html\">flow_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00407.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flow_control Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>input_filter control to signal end-of-input for parallel_pipeline  \n <a href=\"a00079.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a21a61b812ca97a6eb5549dab4b4ae490\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21a61b812ca97a6eb5549dab4b4ae490\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>stop</b> ()</td></tr>\n<tr class=\"separator:a21a61b812ca97a6eb5549dab4b4ae490\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae4743f434cefacb6650e3e736daf9392\"></a>\ntemplate&lt;typename T , typename U , typename Body &gt; </td></tr>\n<tr class=\"memitem:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::concrete_filter</b></td></tr>\n<tr class=\"separator:ae4743f434cefacb6650e3e736daf9392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>input_filter control to signal end-of-input for parallel_pipeline </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00080.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_async_msg&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00373.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_async_msg&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface9::gfx_async_msg&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00080.png\" usemap=\"#tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\" name=\"tbb::flow::interface9::gfx_async_msg&lt; T &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a98cc30d2957b8a1a571d237d733d6ae4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98cc30d2957b8a1a571d237d733d6ae4\"></a>\ntypedef gfx_offload::task_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_id_type</b></td></tr>\n<tr class=\"separator:a98cc30d2957b8a1a571d237d733d6ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab32f15e9fc934c2e9bd7ea6766d0c5dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab32f15e9fc934c2e9bd7ea6766d0c5dd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_async_msg</b> (const T &amp;input_data)</td></tr>\n<tr class=\"separator:ab32f15e9fc934c2e9bd7ea6766d0c5dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8a27be7f50b5e6f5a43485d9212c87b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af8a27be7f50b5e6f5a43485d9212c87b\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()</td></tr>\n<tr class=\"separator:af8a27be7f50b5e6f5a43485d9212c87b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad1af996a1c91b974832c98fe7c88022a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1af996a1c91b974832c98fe7c88022a\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:ad1af996a1c91b974832c98fe7c88022a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93093df4f22379a96ec253fc22db1b42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93093df4f22379a96ec253fc22db1b42\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_task_id</b> (kernel_id_type id)</td></tr>\n<tr class=\"separator:a93093df4f22379a96ec253fc22db1b42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28a3c2a0b608b2dbc1cc012361c72357\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28a3c2a0b608b2dbc1cc012361c72357\"></a>\nkernel_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_id</b> () const </td></tr>\n<tr class=\"separator:a28a3c2a0b608b2dbc1cc012361c72357\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00081.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_buffer&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00372.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_buffer&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a201b594a833fcd334ca256d6fbbceaa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a201b594a833fcd334ca256d6fbbceaa2\"></a>\ntypedef std::vector&lt; T &gt;::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a201b594a833fcd334ca256d6fbbceaa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac35ff3055f507c9de417f1be90b801bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac35ff3055f507c9de417f1be90b801bf\"></a>\ntypedef std::vector&lt; T &gt;<br class=\"typebreak\"/>\n::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:ac35ff3055f507c9de417f1be90b801bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a458b3a7e4674b4f70405049bce00939c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a458b3a7e4674b4f70405049bce00939c\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a458b3a7e4674b4f70405049bce00939c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a008bcf0693109dcd376871bcff0378bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a008bcf0693109dcd376871bcff0378bd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_buffer</b> (size_type size)</td></tr>\n<tr class=\"separator:a008bcf0693109dcd376871bcff0378bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a919ae73a47d2ef2809fb65e10c9e0145\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a919ae73a47d2ef2809fb65e10c9e0145\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()</td></tr>\n<tr class=\"separator:a919ae73a47d2ef2809fb65e10c9e0145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17627787221944d6cc7154a2863582b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a17627787221944d6cc7154a2863582b2\"></a>\nconst T *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a17627787221944d6cc7154a2863582b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7dd0d1242b09bd3532cc8953f8551d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad7dd0d1242b09bd3532cc8953f8551d1\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ad7dd0d1242b09bd3532cc8953f8551d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae3b0ac3d0426f0492806b2031e561352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3b0ac3d0426f0492806b2031e561352\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cbegin</b> () const </td></tr>\n<tr class=\"separator:ae3b0ac3d0426f0492806b2031e561352\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a11a2e545a8538312360d69d95ff07269\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a11a2e545a8538312360d69d95ff07269\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cend</b> () const </td></tr>\n<tr class=\"separator:a11a2e545a8538312360d69d95ff07269\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3637182841db17a6e7a56d819ddb94d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3637182841db17a6e7a56d819ddb94d2\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:a3637182841db17a6e7a56d819ddb94d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28b98e880f24b77243ac8c4c22b63177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28b98e880f24b77243ac8c4c22b63177\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:a28b98e880f24b77243ac8c4c22b63177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a743acfba864a10b8dad3c119db735425\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a743acfba864a10b8dad3c119db735425\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (size_type pos)</td></tr>\n<tr class=\"separator:a743acfba864a10b8dad3c119db735425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2146f49b0d2f5d87b7b6721babcd42e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2146f49b0d2f5d87b7b6721babcd42e6\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (size_type pos) const </td></tr>\n<tr class=\"separator:a2146f49b0d2f5d87b7b6721babcd42e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00082.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface9::gfx_factory Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00374.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">device_type</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad7170d237ab8e643a73adbe258527eca\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00080.html\">gfx_async_msg</a>&lt; T &gt;</td></tr>\n<tr class=\"separator:ad7170d237ab8e643a73adbe258527eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c26133f572549b4730f33d951bfcccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9c26133f572549b4730f33d951bfcccf\"></a>\ntypedef func_wrapper&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a9c26133f572549b4730f33d951bfcccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a437863d05736e2fb9efead005bb009ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a437863d05736e2fb9efead005bb009ca\"></a>\ntypedef gfx_offload::task_id_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_id_type</b></td></tr>\n<tr class=\"separator:a437863d05736e2fb9efead005bb009ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ae67f4514754d58e524c30b6567f3829b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67f4514754d58e524c30b6567f3829b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_factory</b> (tbb::flow::graph &amp;g)</td></tr>\n<tr class=\"separator:ae67f4514754d58e524c30b6567f3829b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8ba5e88a76a43cd85e122d30e25761ce\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, Args &amp;...args)</td></tr>\n<tr class=\"separator:a8ba5e88a76a43cd85e122d30e25761ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad02cbeeadac99f4ebecfb849439a3eb6\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, const kernel_type &amp;kernel, Args &amp;...args)</td></tr>\n<tr class=\"separator:ad02cbeeadac99f4ebecfb849439a3eb6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae01ef652b38b2ef99729a39bd26eac5a\"></a>\ntemplate&lt;typename FinalizeFn , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00068.html\">device_type</a>, FinalizeFn fn, Args &amp;...)</td></tr>\n<tr class=\"separator:ae01ef652b38b2ef99729a39bd26eac5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>gfx_factory.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00083.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface9::global_control Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00083.html\">global_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00415.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface9::global_control Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a04221b8e619bef332234db90d31f3e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parameter</b> { <b>max_allowed_parallelism</b>, \n<b>thread_stack_size</b>, \n<b>parameter_max</b>\n }</td></tr>\n<tr class=\"separator:a04221b8e619bef332234db90d31f3e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a5375ee43ca415f20f3c1f47db5220302\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5375ee43ca415f20f3c1f47db5220302\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_control</b> (parameter p, size_t value)</td></tr>\n<tr class=\"separator:a5375ee43ca415f20f3c1f47db5220302\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a8451d931cfc205d896ca2da26fe123ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8451d931cfc205d896ca2da26fe123ff\"></a>\nstatic size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>active_value</b> (parameter p)</td></tr>\n<tr class=\"separator:a8451d931cfc205d896ca2da26fe123ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>global_control.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00084.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::graph_proxy Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00346.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::graph_proxy Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Pure virtual template classes that define interfaces for async communication.  \n <a href=\"a00084.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph_abstractions.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::graph_proxy:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00084.png\" usemap=\"#tbb::flow::interface10::graph_proxy_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::graph_proxy_map\" name=\"tbb::flow::interface10::graph_proxy_map\">\n<area href=\"a00134.html\" alt=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;\" shape=\"rect\" coords=\"0,56,287,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a9be5db28923f84cfc468d39139fb3\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>\n<tr class=\"separator:a49a9be5db28923f84cfc468d39139fb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4e11378739911c10db09ba71abe7c1a\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>\n<tr class=\"separator:ad4e11378739911c10db09ba71abe7c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Pure virtual template classes that define interfaces for async communication. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_abstractions.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00085.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_thread_v3::id Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00085.html\">id</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00428.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3::id Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:aa08381fcad9d2adc0bf8fb009ad38366\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa08381fcad9d2adc0bf8fb009ad38366\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread_v3</b></td></tr>\n<tr class=\"separator:aa08381fcad9d2adc0bf8fb009ad38366\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ffa9d9b2f7e18d73535b2879ba64ae0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ffa9d9b2f7e18d73535b2879ba64ae0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a1ffa9d9b2f7e18d73535b2879ba64ae0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3be52bbc6138f2d2180d89d588b5c404\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3be52bbc6138f2d2180d89d588b5c404\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator!=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a3be52bbc6138f2d2180d89d588b5c404\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cd4a67d579d3ea07557ce6a632bdff0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cd4a67d579d3ea07557ce6a632bdff0\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&lt;</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a5cd4a67d579d3ea07557ce6a632bdff0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf358e695ce2c3bc64029bb69b6b7841\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf358e695ce2c3bc64029bb69b6b7841\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&lt;=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:aaf358e695ce2c3bc64029bb69b6b7841\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&gt;</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ad9277ffe4c9b7cdd4687d0cab4bf8cd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f559c30c06931effca0ee4a351d8fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f559c30c06931effca0ee4a351d8fff\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator&gt;=</b> (<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> x, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> y) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a9f559c30c06931effca0ee4a351d8fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8dcf9ef009469428dc3752f54240eb69\"></a>\ntemplate&lt;class charT , class traits &gt; </td></tr>\n<tr class=\"memitem:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::basic_ostream&lt; charT, <br class=\"typebreak\"/>\ntraits &gt; &amp;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;&lt;</b> (std::basic_ostream&lt; charT, traits &gt; &amp;out, <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> <a class=\"el\" href=\"a00085.html\">id</a>)</td></tr>\n<tr class=\"separator:a8dcf9ef009469428dc3752f54240eb69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a77bf86c87119e219bb508d787d97da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a77bf86c87119e219bb508d787d97da\"></a>\n<a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> <br class=\"typebreak\"/>\n__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_get_id_v3</b> ()</td></tr>\n<tr class=\"separator:a0a77bf86c87119e219bb508d787d97da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9245f821db4ab0e093ec5e7b7f02eb8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9245f821db4ab0e093ec5e7b7f02eb8b\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_hasher</b> (const <a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> &amp;<a class=\"el\" href=\"a00085.html\">id</a>)</td></tr>\n<tr class=\"separator:a9245f821db4ab0e093ec5e7b7f02eb8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6fded011b60cda6876a33f68b2368ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af6fded011b60cda6876a33f68b2368ee\"></a>\n<a class=\"el\" href=\"a00085.html\">id</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic_compare_and_swap</b> (<a class=\"el\" href=\"a00085.html\">id</a> &amp;location, const <a class=\"el\" href=\"a00085.html\">id</a> &amp;value, const <a class=\"el\" href=\"a00085.html\">id</a> &amp;comparand)</td></tr>\n<tr class=\"separator:af6fded011b60cda6876a33f68b2368ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00086.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::improper_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00334.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::improper_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for PPL locks.  \n <a href=\"a00086.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::improper_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00086.png\" usemap=\"#tbb::improper_lock_map\" alt=\"\"/>\n  <map id=\"tbb::improper_lock_map\" name=\"tbb::improper_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a21c70e6c3868a93a7cd0e725d411da50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21c70e6c3868a93a7cd0e725d411da50\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a21c70e6c3868a93a7cd0e725d411da50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for PPL locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00087.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tick_count::interval_t Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00087.html\">interval_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00342.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count::interval_t Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Relative time interval.  \n <a href=\"a00087.html#details\">More...</a></p>\n\n<p><code>#include &lt;tick_count.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a95e3e14750bebafe719856176e2737db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a95e3e14750bebafe719856176e2737db\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">interval_t</a> ()</td></tr>\n<tr class=\"memdesc:a95e3e14750bebafe719856176e2737db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct a time interval representing zero time duration. <br/></td></tr>\n<tr class=\"separator:a95e3e14750bebafe719856176e2737db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73b462297173f6bffa15bc5a86c30ef4\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">interval_t</a> (double sec)</td></tr>\n<tr class=\"memdesc:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct a time interval representing sec seconds time duration. <br/></td></tr>\n<tr class=\"separator:a73b462297173f6bffa15bc5a86c30ef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe81446bbbb6b6e98d854b91acf47809\"></a>\ndouble&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">seconds</a> () const </td></tr>\n<tr class=\"memdesc:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the length of a time interval in seconds. <br/></td></tr>\n<tr class=\"separator:abe81446bbbb6b6e98d854b91acf47809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19bf32f4541252daaa6b09fd33fa9177\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">operator+=</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i)</td></tr>\n<tr class=\"memdesc:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Accumulation operator. <br/></td></tr>\n<tr class=\"separator:a19bf32f4541252daaa6b09fd33fa9177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3394d9f3678e6a4c3d6e1be840fe2ff2\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">operator-=</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i)</td></tr>\n<tr class=\"memdesc:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtraction operator. <br/></td></tr>\n<tr class=\"separator:a3394d9f3678e6a4c3d6e1be840fe2ff2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a68e741a8f6e2384027e93d1f654ad100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a68e741a8f6e2384027e93d1f654ad100\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::tick_count</b></td></tr>\n<tr class=\"separator:a68e741a8f6e2384027e93d1f654ad100\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5ceaed3ebf5a0d41088a5bc7c8dc653\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the intervals from the tick_counts and subtract them. <br/></td></tr>\n<tr class=\"separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8910ee3b69f68eb905af787c273e9a8\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">operator+</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i, const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;j)</td></tr>\n<tr class=\"memdesc:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add two intervals. <br/></td></tr>\n<tr class=\"separator:ac8910ee3b69f68eb905af787c273e9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d11133daa9a7d3c903d070293278f8f\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">operator-</a> (const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;i, const <a class=\"el\" href=\"a00087.html\">interval_t</a> &amp;j)</td></tr>\n<tr class=\"memdesc:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtract two intervals. <br/></td></tr>\n<tr class=\"separator:a3d11133daa9a7d3c903d070293278f8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Relative time interval. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tick_count.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00088.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::invalid_multiple_scheduling Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00337.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::invalid_multiple_scheduling Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>.  \n <a href=\"a00088.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::invalid_multiple_scheduling:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00088.png\" usemap=\"#tbb::invalid_multiple_scheduling_map\" alt=\"\"/>\n  <map id=\"tbb::invalid_multiple_scheduling_map\" name=\"tbb::invalid_multiple_scheduling_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a602e4e959e7320daca2f31ea912a7538\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a602e4e959e7320daca2f31ea912a7538\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a602e4e959e7320daca2f31ea912a7538\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00089.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00089.html\">kernel</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00349.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00089.png\" usemap=\"#tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\" name=\"tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6033ba751776076bc4a1bb96943769ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6033ba751776076bc4a1bb96943769ac\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel</b> (const <a class=\"el\" href=\"a00089.html\">kernel</a> &amp;k)</td></tr>\n<tr class=\"separator:a6033ba751776076bc4a1bb96943769ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter_ &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00090.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::limiter_node&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00090.html\">limiter_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::limiter_node&lt; T &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00091.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool&lt; Alloc &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00091.html\">memory_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00405.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool&lt; Alloc &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Thread-safe growable pool allocator for variable-size requests.  \n <a href=\"a00091.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::memory_pool&lt; Alloc &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00091.png\" usemap=\"#tbb::interface6::memory_pool&lt; Alloc &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::memory_pool&lt; Alloc &gt;_map\" name=\"tbb::interface6::memory_pool&lt; Alloc &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:af4c36829a159eac04d630ac5a99b9354\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af4c36829a159eac04d630ac5a99b9354\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">memory_pool</a> (const Alloc &amp;src=Alloc())</td></tr>\n<tr class=\"memdesc:af4c36829a159eac04d630ac5a99b9354\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">construct pool with underlying allocator <br/></td></tr>\n<tr class=\"separator:af4c36829a159eac04d630ac5a99b9354\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2c7645b39b7280b1b3cf393d05fbaf7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">~memory_pool</a> ()</td></tr>\n<tr class=\"memdesc:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">destroy pool <br/></td></tr>\n<tr class=\"separator:ad2c7645b39b7280b1b3cf393d05fbaf7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Alloc&gt;<br/>\nclass tbb::interface6::memory_pool&lt; Alloc &gt;</h3>\n\n<p>Thread-safe growable pool allocator for variable-size requests. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00092.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; T, P &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00401.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00092.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6202050e0edbded0b0534ea4be9547e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6202050e0edbded0b0534ea4be9547e0\"></a>\ntypedef <br class=\"typebreak\"/>\ntbb::internal::allocator_type<br class=\"typebreak\"/>\n&lt; T &gt;::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a6202050e0edbded0b0534ea4be9547e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07450f397df1af8096f31bfa8f2e1722\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07450f397df1af8096f31bfa8f2e1722\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a07450f397df1af8096f31bfa8f2e1722\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a972521ed466cc8140d386331a25e895a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a972521ed466cc8140d386331a25e895a\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a972521ed466cc8140d386331a25e895a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83b91759effc3a452fc565ac3bb45613\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83b91759effc3a452fc565ac3bb45613\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a83b91759effc3a452fc565ac3bb45613\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15abe537e2dad4132c956c08d9d0a27e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15abe537e2dad4132c956c08d9d0a27e\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a15abe537e2dad4132c956c08d9d0a27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac20767f3b7a8fcdc1aff0b0874245d3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac20767f3b7a8fcdc1aff0b0874245d3a\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ac20767f3b7a8fcdc1aff0b0874245d3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23267e855e2427b401b99ce4b547f83e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23267e855e2427b401b99ce4b547f83e\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a23267e855e2427b401b99ce4b547f83e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a384be31e682a3b86b5b11e635232c9c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a384be31e682a3b86b5b11e635232c9c5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (pool_type &amp;pool)  throw ()</td></tr>\n<tr class=\"separator:a384be31e682a3b86b5b11e635232c9c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2b4cf16b566e40ddb196c371e5ae96e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa2b4cf16b566e40ddb196c371e5ae96e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:aa2b4cf16b566e40ddb196c371e5ae96e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad32ad8245399fbdb38a0a41e912d86d9\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, P &gt; &amp;src)  throw ()</td></tr>\n<tr class=\"separator:ad32ad8245399fbdb38a0a41e912d86d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55653a8c539901be6ca24a120a5d7b72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a55653a8c539901be6ca24a120a5d7b72\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a55653a8c539901be6ca24a120a5d7b72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a3e4236f6e1266f126dac557906ce2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a3e4236f6e1266f126dac557906ce2c\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:a8a3e4236f6e1266f126dac557906ce2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10b9888883a3dbd66e87c4a7f874ef28\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:a10b9888883a3dbd66e87c4a7f874ef28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9fcf288f2d653972d1bdc0c65abebed4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a9fcf288f2d653972d1bdc0c65abebed4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2bded8e3fb2cec32b48771e7a1bbb838\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a2bded8e3fb2cec32b48771e7a1bbb838\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac51b34ef90ecabdd2e0483e25603a15b\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ac51b34ef90ecabdd2e0483e25603a15b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8be8f1b38d4b1b6bea2d83f611bf66e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8be8f1b38d4b1b6bea2d83f611bf66e7\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:a8be8f1b38d4b1b6bea2d83f611bf66e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affac76f7742c4d8ea6345e0aad82792a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affac76f7742c4d8ea6345e0aad82792a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:affac76f7742c4d8ea6345e0aad82792a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2223b6469f88aadc432a4b3f88728d0f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:a2223b6469f88aadc432a4b3f88728d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:aecd858782faee0fb5fa707671cfc49aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecd858782faee0fb5fa707671cfc49aa\"></a>\ntypedef P&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_type</b></td></tr>\n<tr class=\"separator:aecd858782faee0fb5fa707671cfc49aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a0fbd737811d556f1d2898d3722e85f32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fbd737811d556f1d2898d3722e85f32\"></a>\npool_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_pool</b></td></tr>\n<tr class=\"separator:a0fbd737811d556f1d2898d3722e85f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c34ee2e5a57845f050b507cc516a005\"></a>\ntemplate&lt;typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b></td></tr>\n<tr class=\"separator:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac8c26a64f4e012f2a9cf6035cf029905\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2f7230e5bc817e7512e18b5311b3371b\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, typename P = internal::pool_base&gt;<br/>\nclass tbb::interface6::memory_pool_allocator&lt; T, P &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00093.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; void, P &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00403.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00093.html#details\">More...</a></p>\n\n<p><code>#include &lt;memory_pool.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00124.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa4a3be261ace6f19c3c40ef2503c4984\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4a3be261ace6f19c3c40ef2503c4984\"></a>\ntypedef P&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_type</b></td></tr>\n<tr class=\"separator:aa4a3be261ace6f19c3c40ef2503c4984\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb58c3e8f2e0a8f9152eae641ee420fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb58c3e8f2e0a8f9152eae641ee420fa\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:afb58c3e8f2e0a8f9152eae641ee420fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e53158493ed0d617460e8dd6534a525\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e53158493ed0d617460e8dd6534a525\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a5e53158493ed0d617460e8dd6534a525\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a676a2c2649d6ffc45466d94555d71df2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a676a2c2649d6ffc45466d94555d71df2\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a676a2c2649d6ffc45466d94555d71df2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8e697e2d03e8f69de1728409bec4f7b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8e697e2d03e8f69de1728409bec4f7b5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (pool_type &amp;pool)  throw ()</td></tr>\n<tr class=\"separator:a8e697e2d03e8f69de1728409bec4f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a001103c81ba25e645305f19a82db2e4a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a001103c81ba25e645305f19a82db2e4a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a001103c81ba25e645305f19a82db2e4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d3db3082c1fa40ccb3997626f61e61e\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, P &gt; &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a8d3db3082c1fa40ccb3997626f61e61e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a1e497d3d88dcb063ab6594eb4ad3dc35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e497d3d88dcb063ab6594eb4ad3dc35\"></a>\npool_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_pool</b></td></tr>\n<tr class=\"separator:a1e497d3d88dcb063ab6594eb4ad3dc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c34ee2e5a57845f050b507cc516a005\"></a>\ntemplate&lt;typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>memory_pool_allocator</b></td></tr>\n<tr class=\"separator:a6c34ee2e5a57845f050b507cc516a005\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac8c26a64f4e012f2a9cf6035cf029905\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac8c26a64f4e012f2a9cf6035cf029905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2f7230e5bc817e7512e18b5311b3371b\"></a>\ntemplate&lt;typename V , typename U , typename R &gt; </td></tr>\n<tr class=\"memitem:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; V, R &gt; &amp;a, const <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a>&lt; U, R &gt; &amp;b)</td></tr>\n<tr class=\"separator:a2f7230e5bc817e7512e18b5311b3371b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename P&gt;<br/>\nclass tbb::interface6::memory_pool_allocator&lt; void, P &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00094.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>rml::MemPoolPolicy Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00246.html\">rml</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00279.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rml::MemPoolPolicy Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:afec5c1b4036a54bbae8678e469e5b2bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>TBBMALLOC_POOL_VERSION</b> = 1\n }</td></tr>\n<tr class=\"separator:afec5c1b4036a54bbae8678e469e5b2bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a73e485e36709acc04a9448eaa95bb666\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73e485e36709acc04a9448eaa95bb666\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolPolicy</b> (rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false)</td></tr>\n<tr class=\"separator:a73e485e36709acc04a9448eaa95bb666\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a0935ae38d632881a6d6cccb675cb6f27\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0935ae38d632881a6d6cccb675cb6f27\"></a>\nrawAllocType&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pAlloc</b></td></tr>\n<tr class=\"separator:a0935ae38d632881a6d6cccb675cb6f27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a221c0a53496a391c60d2f452fc9d76ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a221c0a53496a391c60d2f452fc9d76ae\"></a>\nrawFreeType&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pFree</b></td></tr>\n<tr class=\"separator:a221c0a53496a391c60d2f452fc9d76ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac91fffeccd1f4255bbb5719f25785bce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac91fffeccd1f4255bbb5719f25785bce\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>granularity</b></td></tr>\n<tr class=\"separator:ac91fffeccd1f4255bbb5719f25785bce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaea7ca6973332913c839073822352046\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaea7ca6973332913c839073822352046\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>version</b></td></tr>\n<tr class=\"separator:aaea7ca6973332913c839073822352046\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab00be5199577e8dd87f25c867a488aaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab00be5199577e8dd87f25c867a488aaf\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>fixedPool</b>: 1</td></tr>\n<tr class=\"separator:ab00be5199577e8dd87f25c867a488aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afc2ea43e020580853224fa430736d38a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afc2ea43e020580853224fa430736d38a\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>keepAllMemory</b>: 1</td></tr>\n<tr class=\"separator:afc2ea43e020580853224fa430736d38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe8bde7ec5c0f347f5c8e648c92c612\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe8bde7ec5c0f347f5c8e648c92c612\"></a>\nunsigned&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reserved</b>: 30</td></tr>\n<tr class=\"separator:a2fe8bde7ec5c0f347f5c8e648c92c612\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00095.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::missing_wait Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00336.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::missing_wait Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>.  \n <a href=\"a00095.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::missing_wait:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00095.png\" usemap=\"#tbb::missing_wait_map\" alt=\"\"/>\n  <map id=\"tbb::missing_wait_map\" name=\"tbb::missing_wait_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a04602f54c8ae5d83a5410ebc0a5adf80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04602f54c8ae5d83a5410ebc0a5adf80\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a04602f54c8ae5d83a5410ebc0a5adf80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00096.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00340.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  \n <a href=\"a00096.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::movable_exception&lt; ExceptionData &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00096.png\" usemap=\"#tbb::movable_exception&lt; ExceptionData &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::movable_exception&lt; ExceptionData &gt;_map\" name=\"tbb::movable_exception&lt; ExceptionData &gt;_map\">\n<area href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\" alt=\"tbb::tbb_exception\" shape=\"rect\" coords=\"0,56,248,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a785b749022a1e6a7486d315b84bd37e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a785b749022a1e6a7486d315b84bd37e5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>movable_exception</b> (const ExceptionData &amp;data_)</td></tr>\n<tr class=\"separator:a785b749022a1e6a7486d315b84bd37e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7be7103edd861653baebbca5aeed5205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7be7103edd861653baebbca5aeed5205\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>movable_exception</b> (const <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;src)  throw ()</td></tr>\n<tr class=\"separator:a7be7103edd861653baebbca5aeed5205\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a35a4bf997b56ea221ae1bd9bb17cd33b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a35a4bf997b56ea221ae1bd9bb17cd33b\"></a>\nconst <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00096.html\">movable_exception</a> &amp;src)</td></tr>\n<tr class=\"separator:a35a4bf997b56ea221ae1bd9bb17cd33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4eac52bc2a10d4bfcd74ad85c2853740\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4eac52bc2a10d4bfcd74ad85c2853740\"></a>\nExceptionData &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> ()  throw ()</td></tr>\n<tr class=\"separator:a4eac52bc2a10d4bfcd74ad85c2853740\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a394c11a07cfcd4977327f58362aa1439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a394c11a07cfcd4977327f58362aa1439\"></a>\nconst ExceptionData &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const   throw ()</td></tr>\n<tr class=\"separator:a394c11a07cfcd4977327f58362aa1439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae74fdea1aac39197bc1f5026dfd0a840\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">name</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:ae74fdea1aac39197bc1f5026dfd0a840\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59040b31c3147f7c77232a6cbc76ba05\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">what</a> () const __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:a59040b31c3147f7c77232a6cbc76ba05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00096.html\">movable_exception</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">move</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a46eee42a3279007f48c9e8f11d074d16\">More...</a><br/></td></tr>\n<tr class=\"separator:a46eee42a3279007f48c9e8f11d074d16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">destroy</a> () __TBB_override  throw ()</td></tr>\n<tr class=\"memdesc:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#aa4be7e2bf375edcb218fb5d7ed8e279b\">More...</a><br/></td></tr>\n<tr class=\"separator:aa4be7e2bf375edcb218fb5d7ed8e279b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">throw_self</a> () __TBB_override</td></tr>\n<tr class=\"memdesc:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#a0e9ac8a4468eb0ff3b2bb246b806a10e\">More...</a><br/></td></tr>\n<tr class=\"separator:a0e9ac8a4468eb0ff3b2bb246b806a10e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00169\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00169')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd inherit pub_methods_a00169\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:adba063da80054afe64d5268711084d9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adba063da80054afe64d5268711084d9b\"></a>\nExceptionData&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">my_exception_data</a></td></tr>\n<tr class=\"memdesc:adba063da80054afe64d5268711084d9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">User data. <br/></td></tr>\n<tr class=\"separator:adba063da80054afe64d5268711084d9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename ExceptionData&gt;<br/>\nclass tbb::movable_exception&lt; ExceptionData &gt;</h3>\n\n<p>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. </p>\n<p>Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). </p>\n<dl class=\"section see\"><dt>See Also</dt><dd><a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> </dd></dl>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa4be7e2bf375edcb218fb5d7ed8e279b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a46eee42a3279007f48c9e8f11d074d16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00096.html\">movable_exception</a>* <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0e9ac8a4468eb0ff3b2bb246b806a10e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename ExceptionData &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00096.html\">tbb::movable_exception</a>&lt; ExceptionData &gt;::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implements <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00097.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00294.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Wrapper around the platform's native lock.  \n <a href=\"a00097.html#details\">More...</a></p>\n\n<p><code>#include &lt;mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00097.png\" usemap=\"#tbb::mutex_map\" alt=\"\"/>\n  <map id=\"tbb::mutex_map\" name=\"tbb::mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00150.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad35737cbe356d6814f59abba680ab067\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>state_t</b> { <b>INITIALIZED</b> =0x1234, \n<b>DESTROYED</b> =0x789A, \n<b>HELD</b> =0x56CD\n }</td></tr>\n<tr class=\"separator:ad35737cbe356d6814f59abba680ab067\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abbe0cd12246121753ace00a5a12a90b0\"></a>\ntypedef LPCRITICAL_SECTION&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a></td></tr>\n<tr class=\"memdesc:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return native_handle. <br/></td></tr>\n<tr class=\"separator:abbe0cd12246121753ace00a5a12a90b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d992511dfc6f47295b10eb7fc0813d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0d992511dfc6f47295b10eb7fc0813d4\"></a>\ntypedef pthread_mutex_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a0d992511dfc6f47295b10eb7fc0813d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1b280c954ffc8b8b3e63e4ee4144035\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">mutex</a> ()</td></tr>\n<tr class=\"memdesc:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:ad1b280c954ffc8b8b3e63e4ee4144035\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95ff02ee699b34696001db4003c11a3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a95ff02ee699b34696001db4003c11a3a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a95ff02ee699b34696001db4003c11a3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a95ff02ee699b34696001db4003c11a3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a480283933106941125717499f9c5ad42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a480283933106941125717499f9c5ad42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a480283933106941125717499f9c5ad42\">More...</a><br/></td></tr>\n<tr class=\"separator:a480283933106941125717499f9c5ad42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a721eeae7ba16f8b92535f4534b583874\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a721eeae7ba16f8b92535f4534b583874\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:a721eeae7ba16f8b92535f4534b583874\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a721eeae7ba16f8b92535f4534b583874\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af69874d93822c905bdea0ab9e5ca5b89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af69874d93822c905bdea0ab9e5ca5b89\"></a>\n<a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:af69874d93822c905bdea0ab9e5ca5b89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0857c4596d7d5de09fe402ccd41d3e42\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">set_state</a> (state_t to)</td></tr>\n<tr class=\"memdesc:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set the internal state. <br/></td></tr>\n<tr class=\"separator:a0857c4596d7d5de09fe402ccd41d3e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a2677d672446faa842de9de38b3aff80a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2677d672446faa842de9de38b3aff80a\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a2677d672446faa842de9de38b3aff80a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf7e9e11c47cc869d219298232d6c0a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf7e9e11c47cc869d219298232d6c0a1\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:adf7e9e11c47cc869d219298232d6c0a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab729ebd784af412184653c4fa90468d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab729ebd784af412184653c4fa90468d0\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:ab729ebd784af412184653c4fa90468d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Wrapper around the platform's native lock. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a480283933106941125717499f9c5ad42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock::try_acquire()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00098.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00098.html\">node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00382.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00098.png\" usemap=\"#tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\" name=\"tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ace61f7bd9d097375f6e33fea4758fbf9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ace61f7bd9d097375f6e33fea4758fbf9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key)</td></tr>\n<tr class=\"separator:ace61f7bd9d097375f6e33fea4758fbf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6755d387982f27a06d859811699e40b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6755d387982f27a06d859811699e40b7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key, const T &amp;t)</td></tr>\n<tr class=\"separator:a6755d387982f27a06d859811699e40b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61f7e6e835b09c4387fd0c8498fbf603\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61f7e6e835b09c4387fd0c8498fbf603\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const Key &amp;key, T &amp;&amp;t)</td></tr>\n<tr class=\"separator:a61f7e6e835b09c4387fd0c8498fbf603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac28d72d857eccf6e7cc06a9ee146d416\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac28d72d857eccf6e7cc06a9ee146d416\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (value_type &amp;&amp;i)</td></tr>\n<tr class=\"separator:ac28d72d857eccf6e7cc06a9ee146d416\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7c083b7efff342469789f487e3561ec\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae7c083b7efff342469789f487e3561ec\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:ae7c083b7efff342469789f487e3561ec\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>node</b> (Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:ae7c083b7efff342469789f487e3561ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7a5d977900af48a359f428658e2876b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad7a5d977900af48a359f428658e2876b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (value_type &amp;i)</td></tr>\n<tr class=\"separator:ad7a5d977900af48a359f428658e2876b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbdc995156da4cf9b11561d006cf6821\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acbdc995156da4cf9b11561d006cf6821\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>node</b> (const value_type &amp;i)</td></tr>\n<tr class=\"separator:acbdc995156da4cf9b11561d006cf6821\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15b3c8955eb1b104db439e9caf3737c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15b3c8955eb1b104db439e9caf3737c3\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t, node_allocator_type &amp;a)</td></tr>\n<tr class=\"separator:a15b3c8955eb1b104db439e9caf3737c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3115742612b79db574914741f2fff45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3115742612b79db574914741f2fff45\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr, node_allocator_type &amp;a)</td></tr>\n<tr class=\"separator:aa3115742612b79db574914741f2fff45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a6977520eaa2f1dee220f726c8a884b46\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6977520eaa2f1dee220f726c8a884b46\"></a>\nvalue_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>item</b></td></tr>\n<tr class=\"separator:a6977520eaa2f1dee220f726c8a884b46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_hash_map.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00099.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00296.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A mutex which does nothing.  \n <a href=\"a00099.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00099.png\" usemap=\"#tbb::null_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::null_mutex_map\" name=\"tbb::null_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00145.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a20ed8301299d9ec166588401269d1788\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20ed8301299d9ec166588401269d1788\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a20ed8301299d9ec166588401269d1788\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49bd7f5da83382e39f898d06cbf0e23e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49bd7f5da83382e39f898d06cbf0e23e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:a49bd7f5da83382e39f898d06cbf0e23e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4684b268ff379a69cd1fe93718ee7fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae4684b268ff379a69cd1fe93718ee7fc\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:ae4684b268ff379a69cd1fe93718ee7fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A mutex which does nothing. </p>\n<p>A <a class=\"el\" href=\"a00099.html\" title=\"A mutex which does nothing. \">null_mutex</a> does no operation and simulates success. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00100.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_rw_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00298.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A rw mutex which does nothing.  \n <a href=\"a00100.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_rw_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00100.png\" usemap=\"#tbb::null_rw_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::null_rw_mutex_map\" name=\"tbb::null_rw_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00151.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a2a676977ac67532f5f35f849ec7eac8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a676977ac67532f5f35f849ec7eac8c\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:a2a676977ac67532f5f35f849ec7eac8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab153992db6e44aee96ce8c1b2d495c94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab153992db6e44aee96ce8c1b2d495c94\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:ab153992db6e44aee96ce8c1b2d495c94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8500b8a645b1c03221fd1fb4156fa78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8500b8a645b1c03221fd1fb4156fa78\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:ab8500b8a645b1c03221fd1fb4156fa78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A rw mutex which does nothing. </p>\n<p>A <a class=\"el\" href=\"a00100.html\" title=\"A rw mutex which does nothing. \">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00101.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::null_type Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00101.html\">null_type</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::null_type Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A generic null type.  \n <a href=\"a00101.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A generic null type. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00102.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00355.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00102.png\" usemap=\"#tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;_map\">\n<area href=\"a00025.html\" alt=\"tbb::flow::interface10::async_msg&lt; T &gt;\" shape=\"rect\" coords=\"0,0,326,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa3c63f3f5da681da27e2aa133f8bffd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3c63f3f5da681da27e2aa133f8bffd2\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:aa3c63f3f5da681da27e2aa133f8bffd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aadd4b2e6518cf36405fd47ac87db7f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aadd4b2e6518cf36405fd47ac87db7f19\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const T &amp;data)</td></tr>\n<tr class=\"separator:aadd4b2e6518cf36405fd47ac87db7f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4371b06eb85a3abaf7ba0ca3d66bc5cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4371b06eb85a3abaf7ba0ca3d66bc5cc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const T &amp;data, cl_event event)</td></tr>\n<tr class=\"separator:a4371b06eb85a3abaf7ba0ca3d66bc5cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a163f1a440bcddf34dc8b06eb61b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a163f1a440bcddf34dc8b06eb61b21\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> (bool wait=true)</td></tr>\n<tr class=\"separator:ac8a163f1a440bcddf34dc8b06eb61b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae47837a584dc42f4c7bd44dad7708e9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae47837a584dc42f4c7bd44dad7708e9d\"></a>\nconst T &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> (bool wait=true) const </td></tr>\n<tr class=\"separator:ae47837a584dc42f4c7bd44dad7708e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46fe2dd1ef8547701e58e14a483e0de3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46fe2dd1ef8547701e58e14a483e0de3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;dmsg)</td></tr>\n<tr class=\"separator:a46fe2dd1ef8547701e58e14a483e0de3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa70010c232651e11ff07e88991717745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa70010c232651e11ff07e88991717745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_async_msg</b> (<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;&amp;dmsg)</td></tr>\n<tr class=\"separator:aa70010c232651e11ff07e88991717745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a384293c9b08c51e87164e1e4fffbeddf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a384293c9b08c51e87164e1e4fffbeddf\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> &amp;dmsg)</td></tr>\n<tr class=\"separator:a384293c9b08c51e87164e1e4fffbeddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae07788102cdb52b24ffa3c60bf35b561\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae07788102cdb52b24ffa3c60bf35b561\"></a>\ncl_event const *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_event</b> () const </td></tr>\n<tr class=\"separator:ae07788102cdb52b24ffa3c60bf35b561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a030a92451783a9c07287983339b927d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a030a92451783a9c07287983339b927d4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_event</b> (cl_event e) const </td></tr>\n<tr class=\"separator:a030a92451783a9c07287983339b927d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93064e1bfa9bb387c650faa75401981a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93064e1bfa9bb387c650faa75401981a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>clear_event</b> () const </td></tr>\n<tr class=\"separator:a93064e1bfa9bb387c650faa75401981a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af267060e5a040c3db3c26ae16e088914\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af267060e5a040c3db3c26ae16e088914\"></a>\ntemplate&lt;typename Callback &gt; </td></tr>\n<tr class=\"memitem:af267060e5a040c3db3c26ae16e088914\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>register_callback</b> (Callback c) const </td></tr>\n<tr class=\"separator:af267060e5a040c3db3c26ae16e088914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator T &amp;</b> ()</td></tr>\n<tr class=\"separator:ac1c1cf1accbc0f7b9b2e9104dcfdc0c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6c7c0102d601788ff6c54f34b066293\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae6c7c0102d601788ff6c54f34b066293\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator const T &amp;</b> () const </td></tr>\n<tr class=\"separator:ae6c7c0102d601788ff6c54f34b066293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a15d3b949f1ce48860a05fb3e0a537907\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15d3b949f1ce48860a05fb3e0a537907\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>finalize</b> () const __TBB_override</td></tr>\n<tr class=\"separator:a15d3b949f1ce48860a05fb3e0a537907\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00103.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00359.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00103.png\" usemap=\"#tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;_map\">\n<area href=\"a00115.html\" alt=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,56,317,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a617261c096aa90e9ea0ca4a63225bc6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a617261c096aa90e9ea0ca4a63225bc6a\"></a>\ntypedef cl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object_type</b></td></tr>\n<tr class=\"separator:a617261c096aa90e9ea0ca4a63225bc6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a051eb49af1f1573b96bb425c13784219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a051eb49af1f1573b96bb425c13784219\"></a>\ntypedef <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object_type</b></td></tr>\n<tr class=\"separator:a051eb49af1f1573b96bb425c13784219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a918d4534226f0ae3639136953817e565\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a918d4534226f0ae3639136953817e565\"></a>\ntypedef Factory&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_factory_type</b></td></tr>\n<tr class=\"separator:a918d4534226f0ae3639136953817e565\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a42372f458b493d1c748ca01bb811d831\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>iterator</b> = T *</td></tr>\n<tr class=\"separator:a42372f458b493d1c748ca01bb811d831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad841d68e0d62385b7e3d6dbc3255c51f\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>access</b> () const </td></tr>\n<tr class=\"separator:ad841d68e0d62385b7e3d6dbc3255c51f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34e9721ad01f57bdb6cd7135cd681924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34e9721ad01f57bdb6cd7135cd681924\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a34e9721ad01f57bdb6cd7135cd681924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9adeb803f65739a617e7363eef2725fe\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a9adeb803f65739a617e7363eef2725fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2e2c887ab99d86b54b8bef14f21d4954\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a2e2c887ab99d86b54b8bef14f21d4954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a653086e25f39f175b5bf33f6767b5bf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a653086e25f39f175b5bf33f6767b5bf8\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a653086e25f39f175b5bf33f6767b5bf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb7b3759979dc6414687016028d59b61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adb7b3759979dc6414687016028d59b61\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (ptrdiff_t k)</td></tr>\n<tr class=\"separator:adb7b3759979dc6414687016028d59b61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a753e6325d84b7147ff73777c5938cdae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a753e6325d84b7147ff73777c5938cdae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (size_t size)</td></tr>\n<tr class=\"separator:a753e6325d84b7147ff73777c5938cdae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353f4d0793c6e494fe7182e368ee1123\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353f4d0793c6e494fe7182e368ee1123\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (Factory &amp;f, size_t size)</td></tr>\n<tr class=\"separator:a353f4d0793c6e494fe7182e368ee1123\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a860ba9221e7a5624e409153247cb16e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a860ba9221e7a5624e409153247cb16e5\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object</b> () const </td></tr>\n<tr class=\"separator:a860ba9221e7a5624e409153247cb16e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56871e2809e64ff842091611b3e7a5a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56871e2809e64ff842091611b3e7a5a4\"></a>\nconst <a class=\"el\" href=\"a00103.html\">opencl_buffer</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object</b> () const </td></tr>\n<tr class=\"separator:a56871e2809e64ff842091611b3e7a5a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac10f3ba6b90c0be794c810c8925898f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac10f3ba6b90c0be794c810c8925898f1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:ac10f3ba6b90c0be794c810c8925898f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d1916fe58794e9d5d2d22a8d3de4e19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d1916fe58794e9d5d2d22a8d3de4e19\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:a5d1916fe58794e9d5d2d22a8d3de4e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6adb29445e259b24bd7a40a1e0818f07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6adb29445e259b24bd7a40a1e0818f07\"></a>\n<a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a>&lt; T, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>\n<tr class=\"separator:a6adb29445e259b24bd7a40a1e0818f07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a518ac9631dff44b959b95caa4d9d69d8\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_subbuffer</b></td></tr>\n<tr class=\"separator:a518ac9631dff44b959b95caa4d9d69d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e5bdf00651720250e564d13b624863c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4e5bdf00651720250e564d13b624863c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;lhs, const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;rhs)</td></tr>\n<tr class=\"separator:a4e5bdf00651720250e564d13b624863c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00104.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00357.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00104.png\" usemap=\"#tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;_map\">\n<area href=\"a00108.html\" alt=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;\" shape=\"rect\" coords=\"0,0,310,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9eb47e63b791c3a7303d39b11b07426c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9eb47e63b791c3a7303d39b11b07426c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b> (size_t size, Factory &amp;f)</td></tr>\n<tr class=\"separator:a9eb47e63b791c3a7303d39b11b07426c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3dd302f13fcf4d4d2991622994c889d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3dd302f13fcf4d4d2991622994c889d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b> (cl_mem m, size_t index, size_t size, Factory &amp;f)</td></tr>\n<tr class=\"separator:a3dd302f13fcf4d4d2991622994c889d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04b6504c149f284e8c023e85767d94af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a04b6504c149f284e8c023e85767d94af\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a04b6504c149f284e8c023e85767d94af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e286d72cca9546685491ac801f22011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e286d72cca9546685491ac801f22011\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>map_memory</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt; &amp;dmsg) __TBB_override</td></tr>\n<tr class=\"separator:a5e286d72cca9546685491ac801f22011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00108\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00108')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td></tr>\n<tr class=\"memitem:a49b698e30ef6c1d61567b5b4a6154011 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b698e30ef6c1d61567b5b4a6154011\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_memory</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:a49b698e30ef6c1d61567b5b4a6154011 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc1f16b817e3e3447972755790dee9a inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc1f16b817e3e3447972755790dee9a\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_cl_mem</b> () const </td></tr>\n<tr class=\"separator:afbc1f16b817e3e3447972755790dee9a inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaddceaa2aca7b20a7b50211c197a13e4 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaddceaa2aca7b20a7b50211c197a13e4\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_host_ptr</b> ()</td></tr>\n<tr class=\"separator:aaddceaa2aca7b20a7b50211c197a13e4 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0253a1634ffe97391bd03bea316b9a96 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0253a1634ffe97391bd03bea316b9a96\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>factory</b> () const </td></tr>\n<tr class=\"separator:a0253a1634ffe97391bd03bea316b9a96 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a9939b7b7b075bf61bef86fe329637 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a9939b7b7b075bf61bef86fe329637\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const cl_event *e)</td></tr>\n<tr class=\"separator:ac8a9939b7b7b075bf61bef86fe329637 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02033b43f73ac54a43d583491c4dff10 inherit pub_methods_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a02033b43f73ac54a43d583491c4dff10\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const cl_event *e)</td></tr>\n<tr class=\"separator:a02033b43f73ac54a43d583491c4dff10 inherit pub_methods_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6560a38156dede308dcb1703a057c1b9\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer</b></td></tr>\n<tr class=\"separator:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_attribs_a00108\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00108')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td></tr>\n<tr class=\"memitem:ac31c58c66af5a41aef80409209a69ff8 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac31c58c66af5a41aef80409209a69ff8\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_cl_mem</b></td></tr>\n<tr class=\"separator:ac31c58c66af5a41aef80409209a69ff8 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fffcf5942aaa88ef5c9eb07f42402d5 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fffcf5942aaa88ef5c9eb07f42402d5\"></a>\n<a class=\"el\" href=\"a00027.html\">tbb::atomic</a><br class=\"typebreak\"/>\n&lt; opencl_device::device_id_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_curr_device_id</b></td></tr>\n<tr class=\"separator:a0fffcf5942aaa88ef5c9eb07f42402d5 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff8f9c238a49c19b3c4a05ff79641570 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff8f9c238a49c19b3c4a05ff79641570\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_host_ptr</b></td></tr>\n<tr class=\"separator:aff8f9c238a49c19b3c4a05ff79641570 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a519ad1b638e5208a03947f13da666d03 inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a519ad1b638e5208a03947f13da666d03\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_factory</b></td></tr>\n<tr class=\"separator:a519ad1b638e5208a03947f13da666d03 inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a9ed1f969879f90f00d8214ac1a236f inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a9ed1f969879f90f00d8214ac1a236f\"></a>\n<a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_lock</b></td></tr>\n<tr class=\"separator:a9a9ed1f969879f90f00d8214ac1a236f inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a179edb1d281d792a725312c41f40510d inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a179edb1d281d792a725312c41f40510d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event_present</b></td></tr>\n<tr class=\"separator:a179edb1d281d792a725312c41f40510d inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a806cf9699c54646ec18b2647c136eb6d inherit pro_attribs_a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a806cf9699c54646ec18b2647c136eb6d\"></a>\ncl_event&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event</b></td></tr>\n<tr class=\"separator:a806cf9699c54646ec18b2647c136eb6d inherit pro_attribs_a00108\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00105.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_device Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00105.html\">opencl_device</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00351.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1ac9d90a9ffaec522789a4136e1dae17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">: device_id_type { <b>unknown</b> = device_id_type( -2 ), \n<b>host</b> = device_id_type( -1 )\n }</td></tr>\n<tr class=\"separator:a1ac9d90a9ffaec522789a4136e1dae17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e378c47a10a0bb6985ba9e75ac166fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e378c47a10a0bb6985ba9e75ac166fc\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_id_type</b></td></tr>\n<tr class=\"separator:a0e378c47a10a0bb6985ba9e75ac166fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device</b> (cl_device_id d_id)</td></tr>\n<tr class=\"separator:ab09d0237aab0b4cd68ca2ef4ff9e7ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebf2866d260c9763d08cf10beb5d3730\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aebf2866d260c9763d08cf10beb5d3730\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device</b> (cl_device_id cl_d_id, device_id_type device_id)</td></tr>\n<tr class=\"separator:aebf2866d260c9763d08cf10beb5d3730\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59b59acd1418c07d04f49580bc793a35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59b59acd1418c07d04f49580bc793a35\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_profile</b> () const </td></tr>\n<tr class=\"separator:a59b59acd1418c07d04f49580bc793a35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad0202c850c0936628ed740839cccfb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad0202c850c0936628ed740839cccfb71\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_version</b> () const </td></tr>\n<tr class=\"separator:ad0202c850c0936628ed740839cccfb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a148f3ac5df2a2de33f74ba1f67ea3173\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a148f3ac5df2a2de33f74ba1f67ea3173\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_name</b> () const </td></tr>\n<tr class=\"separator:a148f3ac5df2a2de33f74ba1f67ea3173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a028a03c1bcd6bcc3dddfc1b4ff53ec76\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a028a03c1bcd6bcc3dddfc1b4ff53ec76\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_vendor</b> () const </td></tr>\n<tr class=\"separator:a028a03c1bcd6bcc3dddfc1b4ff53ec76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe3d3aeec9f54f073eaf49eff890e46a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe3d3aeec9f54f073eaf49eff890e46a\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_extensions</b> () const </td></tr>\n<tr class=\"separator:abe3d3aeec9f54f073eaf49eff890e46a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0f444a4a60b9cc7b53de34a1bdf73b4a\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>info</b> (cl_device_info i, T &amp;t) const </td></tr>\n<tr class=\"separator:a0f444a4a60b9cc7b53de34a1bdf73b4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a710f43cd3e6b76fca52e7412d18ca637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a710f43cd3e6b76fca52e7412d18ca637\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>version</b> () const </td></tr>\n<tr class=\"separator:a710f43cd3e6b76fca52e7412d18ca637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad65f29cae883b26e433fdfc7f478a6fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad65f29cae883b26e433fdfc7f478a6fd\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>major_version</b> () const </td></tr>\n<tr class=\"separator:ad65f29cae883b26e433fdfc7f478a6fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88c2f6ed5bcccddbcf809fc3d8d47808\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88c2f6ed5bcccddbcf809fc3d8d47808\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>minor_version</b> () const </td></tr>\n<tr class=\"separator:a88c2f6ed5bcccddbcf809fc3d8d47808\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d4b1f62bedee57ec79c9dd105437ad7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d4b1f62bedee57ec79c9dd105437ad7\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>out_of_order_exec_mode_on_host_present</b> () const </td></tr>\n<tr class=\"separator:a7d4b1f62bedee57ec79c9dd105437ad7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72ff05d3420e9fe0094f3f5974b4b0a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a72ff05d3420e9fe0094f3f5974b4b0a5\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>out_of_order_exec_mode_on_device_present</b> () const </td></tr>\n<tr class=\"separator:a72ff05d3420e9fe0094f3f5974b4b0a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a621c8a568400eb84d5b26e9ebc6f433b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a621c8a568400eb84d5b26e9ebc6f433b\"></a>\nstd::array&lt; size_t, 3 &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>max_work_item_sizes</b> () const </td></tr>\n<tr class=\"separator:a621c8a568400eb84d5b26e9ebc6f433b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79b601e753b0ead6a8174c02aa4ca490\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a79b601e753b0ead6a8174c02aa4ca490\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>max_work_group_size</b> () const </td></tr>\n<tr class=\"separator:a79b601e753b0ead6a8174c02aa4ca490\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a4ae272f64808f9b62a8abc37a49215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8a4ae272f64808f9b62a8abc37a49215\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_in_kernel_available</b> (const std::string &amp;k) const </td></tr>\n<tr class=\"separator:a8a4ae272f64808f9b62a8abc37a49215\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa654547f0b53f99cf6238a8c5dd6a2b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa654547f0b53f99cf6238a8c5dd6a2b4\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_in_kernels</b> () const </td></tr>\n<tr class=\"separator:aa654547f0b53f99cf6238a8c5dd6a2b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d16c58da69b81bbc6bc4e216115208e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d16c58da69b81bbc6bc4e216115208e\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>name</b> () const </td></tr>\n<tr class=\"separator:a8d16c58da69b81bbc6bc4e216115208e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7cf87806657f5a92f1320c923f84415d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7cf87806657f5a92f1320c923f84415d\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>available</b> () const </td></tr>\n<tr class=\"separator:a7cf87806657f5a92f1320c923f84415d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac100871628e92da33834b6ce989ff59f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac100871628e92da33834b6ce989ff59f\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compiler_available</b> () const </td></tr>\n<tr class=\"separator:ac100871628e92da33834b6ce989ff59f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af532566a5da4d9ac29cbd203473c4d2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af532566a5da4d9ac29cbd203473c4d2c\"></a>\ncl_bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>linker_available</b> () const </td></tr>\n<tr class=\"separator:af532566a5da4d9ac29cbd203473c4d2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a29b847db2ffd40f6783f9f6f3917c7d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a29b847db2ffd40f6783f9f6f3917c7d3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>extension_available</b> (const std::string &amp;ext) const </td></tr>\n<tr class=\"separator:a29b847db2ffd40f6783f9f6f3917c7d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>extensions</b> () const </td></tr>\n<tr class=\"separator:ab8eb3ebdac35e3b5c33ac1913a5eb2e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d390b48fa23fbec0bb17227f7e1aff6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d390b48fa23fbec0bb17227f7e1aff6\"></a>\ncl_device_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b> () const </td></tr>\n<tr class=\"separator:a3d390b48fa23fbec0bb17227f7e1aff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7cf740400af84346bc8216e5b66dad98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7cf740400af84346bc8216e5b66dad98\"></a>\nstd::string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>vendor</b> () const </td></tr>\n<tr class=\"separator:a7cf740400af84346bc8216e5b66dad98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0df74e8654df0f3137056d0e8897b1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0df74e8654df0f3137056d0e8897b1d\"></a>\ncl_uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address_bits</b> () const </td></tr>\n<tr class=\"separator:aa0df74e8654df0f3137056d0e8897b1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab0abb9fdd30077508fed78734e01f622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab0abb9fdd30077508fed78734e01f622\"></a>\ncl_device_id&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_id</b> () const </td></tr>\n<tr class=\"separator:ab0abb9fdd30077508fed78734e01f622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbeb17d503ad00deae784b19fb3860ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeb17d503ad00deae784b19fb3860ef\"></a>\ncl_command_queue&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>command_queue</b> () const </td></tr>\n<tr class=\"separator:adbeb17d503ad00deae784b19fb3860ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d57fd7f4f33c0fd4f6ed607863e1f57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d57fd7f4f33c0fd4f6ed607863e1f57\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>set_command_queue</b> (cl_command_queue cmd_queue)</td></tr>\n<tr class=\"separator:a8d57fd7f4f33c0fd4f6ed607863e1f57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9ed534cdc07f0bdd0f776468d6cc3ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9ed534cdc07f0bdd0f776468d6cc3ad\"></a>\ncl_platform_id&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>platform_id</b> () const </td></tr>\n<tr class=\"separator:ac9ed534cdc07f0bdd0f776468d6cc3ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a563313182c8258bf25535dab83a3ca27\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_memory</b></td></tr>\n<tr class=\"separator:a563313182c8258bf25535dab83a3ca27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6560a38156dede308dcb1703a057c1b9\"></a>\ntemplate&lt;typename T , typename Factory &gt; </td></tr>\n<tr class=\"memitem:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer</b></td></tr>\n<tr class=\"separator:a6560a38156dede308dcb1703a057c1b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc0eaf33faca7708edf37103a3805da4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc0eaf33faca7708edf37103a3805da4\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator==</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> d1, <a class=\"el\" href=\"a00105.html\">opencl_device</a> d2)</td></tr>\n<tr class=\"separator:acc0eaf33faca7708edf37103a3805da4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00106.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_device_list Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00352.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device_list Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a75b3bfeffc2f97f63a02d6fc6c072328\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a75b3bfeffc2f97f63a02d6fc6c072328\"></a>\ntypedef container_type::iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>iterator</b></td></tr>\n<tr class=\"separator:a75b3bfeffc2f97f63a02d6fc6c072328\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48bae7cd08dc3fc6711384fa0ffcbc56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a48bae7cd08dc3fc6711384fa0ffcbc56\"></a>\ntypedef <br class=\"typebreak\"/>\ncontainer_type::const_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_iterator</b></td></tr>\n<tr class=\"separator:a48bae7cd08dc3fc6711384fa0ffcbc56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a186c5fc190f0a570e13e646f5d2fd9c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a186c5fc190f0a570e13e646f5d2fd9c6\"></a>\ntypedef container_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a186c5fc190f0a570e13e646f5d2fd9c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a19e2ab162c113a7ede0f574b44d25516\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19e2ab162c113a7ede0f574b44d25516\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_device_list</b> (std::initializer_list&lt; <a class=\"el\" href=\"a00105.html\">opencl_device</a> &gt; il)</td></tr>\n<tr class=\"separator:a19e2ab162c113a7ede0f574b44d25516\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5f2dcec269732a38f3f32cf2488ba3d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f2dcec269732a38f3f32cf2488ba3d2\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>add</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> d)</td></tr>\n<tr class=\"separator:a5f2dcec269732a38f3f32cf2488ba3d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae68d768313d70a68fcd8c72af3e3eb54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae68d768313d70a68fcd8c72af3e3eb54\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:ae68d768313d70a68fcd8c72af3e3eb54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ef9ccaa28c5688caeb7afe73ead7b07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ef9ccaa28c5688caeb7afe73ead7b07\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>empty</b> () const </td></tr>\n<tr class=\"separator:a6ef9ccaa28c5688caeb7afe73ead7b07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:addec4ed607d1278273b0ca3372722c7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"addec4ed607d1278273b0ca3372722c7f\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> ()</td></tr>\n<tr class=\"separator:addec4ed607d1278273b0ca3372722c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc39a537e23b7265b5c432559074396\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4fc39a537e23b7265b5c432559074396\"></a>\niterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> ()</td></tr>\n<tr class=\"separator:a4fc39a537e23b7265b5c432559074396\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae57cdf037269eb83dc2df130f5cf91dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae57cdf037269eb83dc2df130f5cf91dc\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:ae57cdf037269eb83dc2df130f5cf91dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1573ecfb7672aeab71b3c90d14aa09f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1573ecfb7672aeab71b3c90d14aa09f1\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a1573ecfb7672aeab71b3c90d14aa09f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af520860cbb1e78737f93a366f47f37d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af520860cbb1e78737f93a366f47f37d4\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cbegin</b> () const </td></tr>\n<tr class=\"separator:af520860cbb1e78737f93a366f47f37d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a712d456e2310603f9b94fd15857b19f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a712d456e2310603f9b94fd15857b19f9\"></a>\nconst_iterator&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cend</b> () const </td></tr>\n<tr class=\"separator:a712d456e2310603f9b94fd15857b19f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00107.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00348.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">kernel</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9f11e7a88d0f3cbd236d6a272a9c2d14\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>async_msg_type</b> = <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; T, <a class=\"el\" href=\"a00107.html\">opencl_factory</a>&lt; DeviceFilter &gt;&gt;</td></tr>\n<tr class=\"separator:a9f11e7a88d0f3cbd236d6a272a9c2d14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93525acca7352e5e06674f350a146d18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a93525acca7352e5e06674f350a146d18\"></a>\ntypedef <a class=\"el\" href=\"a00105.html\">opencl_device</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>device_type</b></td></tr>\n<tr class=\"separator:a93525acca7352e5e06674f350a146d18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0915b7bee4b372111c2698bbac15577f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0915b7bee4b372111c2698bbac15577f\"></a>\ntypedef <a class=\"el\" href=\"a00089.html\">kernel</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a0915b7bee4b372111c2698bbac15577f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6838f796f49054a40f86d60bfdba7fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6838f796f49054a40f86d60bfdba7fb\"></a>\ntypedef <a class=\"el\" href=\"a00114.html\">opencl_range</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_type</b></td></tr>\n<tr class=\"separator:aa6838f796f49054a40f86d60bfdba7fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a083fe6b14159cc159862ec5ae3ba9835\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a083fe6b14159cc159862ec5ae3ba9835\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>init</b> (const <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;device_list)</td></tr>\n<tr class=\"separator:a083fe6b14159cc159862ec5ae3ba9835\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a99f0be9c0e4beab8c827fb267e035c8c\"></a>\ntemplate&lt;typename... Args&gt; </td></tr>\n<tr class=\"memitem:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_kernel</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const <a class=\"el\" href=\"a00089.html\">kernel_type</a> &amp;<a class=\"el\" href=\"a00089.html\">kernel</a>, const <a class=\"el\" href=\"a00114.html\">range_type</a> &amp;work_size, Args &amp;...args)</td></tr>\n<tr class=\"separator:a99f0be9c0e4beab8c827fb267e035c8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae225724eca814f88041fc7ad3e067424\"></a>\ntemplate&lt;typename T , typename... Rest&gt; </td></tr>\n<tr class=\"memitem:ae225724eca814f88041fc7ad3e067424\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, T &amp;t, Rest &amp;...args)</td></tr>\n<tr class=\"separator:ae225724eca814f88041fc7ad3e067424\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28f06cdb00ed4a1e457c2ada04ba06b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28f06cdb00ed4a1e457c2ada04ba06b4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send_data</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>)</td></tr>\n<tr class=\"separator:a28f06cdb00ed4a1e457c2ada04ba06b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a30d7b701d89615b0fc98a2e6af448dee\"></a>\ntemplate&lt;typename FinalizeFn , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>finalize</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, FinalizeFn fn, Args &amp;...args)</td></tr>\n<tr class=\"separator:a30d7b701d89615b0fc98a2e6af448dee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc10f0ed4303bff542facde82142b283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abc10f0ed4303bff542facde82142b283\"></a>\nconst <a class=\"el\" href=\"a00106.html\">opencl_device_list</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>devices</b> ()</td></tr>\n<tr class=\"separator:abc10f0ed4303bff542facde82142b283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a083a3933f9cd414d4b5cabb4c5c3ad7c\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_program</b></td></tr>\n<tr class=\"separator:a083a3933f9cd414d4b5cabb4c5c3ad7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af173b1e5b45e0a6f9f12e6db5f6d2250\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_buffer_impl</b></td></tr>\n<tr class=\"separator:af173b1e5b45e0a6f9f12e6db5f6d2250\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a563313182c8258bf25535dab83a3ca27\"></a>\ntemplate&lt;typename Factory &gt; </td></tr>\n<tr class=\"memitem:a563313182c8258bf25535dab83a3ca27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_memory</b></td></tr>\n<tr class=\"separator:a563313182c8258bf25535dab83a3ca27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00108.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_memory&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00356.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_memory&lt; Factory &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_memory&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00108.png\" usemap=\"#tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_memory&lt; Factory &gt;_map\">\n<area href=\"a00104.html\" alt=\"tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;\" shape=\"rect\" coords=\"0,56,310,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a49b698e30ef6c1d61567b5b4a6154011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49b698e30ef6c1d61567b5b4a6154011\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_memory</b> (Factory &amp;f)</td></tr>\n<tr class=\"separator:a49b698e30ef6c1d61567b5b4a6154011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbc1f16b817e3e3447972755790dee9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afbc1f16b817e3e3447972755790dee9a\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_cl_mem</b> () const </td></tr>\n<tr class=\"separator:afbc1f16b817e3e3447972755790dee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaddceaa2aca7b20a7b50211c197a13e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaddceaa2aca7b20a7b50211c197a13e4\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_host_ptr</b> ()</td></tr>\n<tr class=\"separator:aaddceaa2aca7b20a7b50211c197a13e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0253a1634ffe97391bd03bea316b9a96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0253a1634ffe97391bd03bea316b9a96\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>factory</b> () const </td></tr>\n<tr class=\"separator:a0253a1634ffe97391bd03bea316b9a96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac8a9939b7b7b075bf61bef86fe329637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac8a9939b7b7b075bf61bef86fe329637\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const cl_event *e)</td></tr>\n<tr class=\"separator:ac8a9939b7b7b075bf61bef86fe329637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02033b43f73ac54a43d583491c4dff10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a02033b43f73ac54a43d583491c4dff10\"></a>\n<a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, const cl_event *e)</td></tr>\n<tr class=\"separator:a02033b43f73ac54a43d583491c4dff10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2f2336197858e31b6c9ae7f166350c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae2f2336197858e31b6c9ae7f166350c4\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>map_memory</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a>, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; void *, Factory &gt; &amp;)=0</td></tr>\n<tr class=\"separator:ae2f2336197858e31b6c9ae7f166350c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ac31c58c66af5a41aef80409209a69ff8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac31c58c66af5a41aef80409209a69ff8\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_cl_mem</b></td></tr>\n<tr class=\"separator:ac31c58c66af5a41aef80409209a69ff8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fffcf5942aaa88ef5c9eb07f42402d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0fffcf5942aaa88ef5c9eb07f42402d5\"></a>\n<a class=\"el\" href=\"a00027.html\">tbb::atomic</a><br class=\"typebreak\"/>\n&lt; opencl_device::device_id_type &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_curr_device_id</b></td></tr>\n<tr class=\"separator:a0fffcf5942aaa88ef5c9eb07f42402d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aff8f9c238a49c19b3c4a05ff79641570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff8f9c238a49c19b3c4a05ff79641570\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_host_ptr</b></td></tr>\n<tr class=\"separator:aff8f9c238a49c19b3c4a05ff79641570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a519ad1b638e5208a03947f13da666d03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a519ad1b638e5208a03947f13da666d03\"></a>\nFactory *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_factory</b></td></tr>\n<tr class=\"separator:a519ad1b638e5208a03947f13da666d03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a9ed1f969879f90f00d8214ac1a236f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a9ed1f969879f90f00d8214ac1a236f\"></a>\n<a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_lock</b></td></tr>\n<tr class=\"separator:a9a9ed1f969879f90f00d8214ac1a236f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a179edb1d281d792a725312c41f40510d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a179edb1d281d792a725312c41f40510d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event_present</b></td></tr>\n<tr class=\"separator:a179edb1d281d792a725312c41f40510d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a806cf9699c54646ec18b2647c136eb6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a806cf9699c54646ec18b2647c136eb6d\"></a>\ncl_event&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_sending_event</b></td></tr>\n<tr class=\"separator:a806cf9699c54646ec18b2647c136eb6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00109.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; Args &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00109.html\">opencl_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; Args &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00110.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00110.html\">opencl_node< tuple< Ports...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00363.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00110.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;_map\">\n<area href=\"a00109.html\" alt=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, queueing, opencl_info::default_opencl_factory &gt;\" shape=\"rect\" coords=\"0,0,589,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:af1d60f38b8a698e759f4cab8d73e553d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1d60f38b8a698e759f4cab8d73e553d\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:af1d60f38b8a698e759f4cab8d73e553d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0aa3821bfbc93eb7e14ccf593d957b3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0aa3821bfbc93eb7e14ccf593d957b3f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:a0aa3821bfbc93eb7e14ccf593d957b3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1e861e0b3c64867ad23c21e289ef3f85\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d)</td></tr>\n<tr class=\"separator:a1e861e0b3c64867ad23c21e289ef3f85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00111.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00111.html\">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00362.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00111.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;_map\">\n<area href=\"a00109.html\" alt=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, opencl_info::default_opencl_factory &gt;\" shape=\"rect\" coords=\"0,0,553,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a7e935e7ba97a2d0d9c2b5efe1b36086a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e935e7ba97a2d0d9c2b5efe1b36086a\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a7e935e7ba97a2d0d9c2b5efe1b36086a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a01e42b38b2605b5b0ea20e1442123b54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a01e42b38b2605b5b0ea20e1442123b54\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:a01e42b38b2605b5b0ea20e1442123b54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a04f4c143fb2ed48e1917bf7af88cac9a\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d)</td></tr>\n<tr class=\"separator:a04f4c143fb2ed48e1917bf7af88cac9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00112.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00112.html\">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00361.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00112.png\" usemap=\"#tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a10d80c9707b89b8d3d96f0e7a7b11d35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a10d80c9707b89b8d3d96f0e7a7b11d35\"></a>\ntypedef base_type::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a10d80c9707b89b8d3d96f0e7a7b11d35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aef536f96cdf0e008b87892a2523842b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aef536f96cdf0e008b87892a2523842b0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel)</td></tr>\n<tr class=\"separator:aef536f96cdf0e008b87892a2523842b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeac46cd85f792eaf66b33ee4e3691251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeac46cd85f792eaf66b33ee4e3691251\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, Factory &amp;f)</td></tr>\n<tr class=\"separator:aeac46cd85f792eaf66b33ee4e3691251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac9a8f3aaddd6830f2b823813cf5d6c2e\"></a>\ntemplate&lt;typename DeviceSelector &gt; </td></tr>\n<tr class=\"memitem:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_node</b> (graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d, Factory &amp;f)</td></tr>\n<tr class=\"separator:ac9a8f3aaddd6830f2b823813cf5d6c2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00113.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_program&lt; Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00113.html\">opencl_program</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00350.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_program&lt; Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_program&lt; Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00113.png\" usemap=\"#tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_program&lt; Factory &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8d3995abd89b7933f9155a71b468329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d3995abd89b7933f9155a71b468329f\"></a>\ntypedef Factory::kernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>kernel_type</b></td></tr>\n<tr class=\"separator:a8d3995abd89b7933f9155a71b468329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aba6fe821c084403ed21fc7ae20f6fe77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba6fe821c084403ed21fc7ae20f6fe77\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, opencl_program_type type, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:aba6fe821c084403ed21fc7ae20f6fe77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7ea8bee6439e9cd71aa017b2d80ad04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7ea8bee6439e9cd71aa017b2d80ad04\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, const char *program_name)</td></tr>\n<tr class=\"separator:ab7ea8bee6439e9cd71aa017b2d80ad04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab065ffc8d739872373e76f5fa2feddf1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab065ffc8d739872373e76f5fa2feddf1\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (Factory &amp;factory, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:ab065ffc8d739872373e76f5fa2feddf1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d553a0a47923e9febbff7e2fcf527fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d553a0a47923e9febbff7e2fcf527fd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (opencl_program_type type, const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:a5d553a0a47923e9febbff7e2fcf527fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a673eda1eee74b84795f1f54cad6a7c3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a673eda1eee74b84795f1f54cad6a7c3e\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const char *program_name)</td></tr>\n<tr class=\"separator:a673eda1eee74b84795f1f54cad6a7c3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ff9429c5ae7799272dfb1d79adf055d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6ff9429c5ae7799272dfb1d79adf055d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const std::string &amp;program_name)</td></tr>\n<tr class=\"separator:a6ff9429c5ae7799272dfb1d79adf055d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a400e941b0e338907e001dc46dfdbf735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a400e941b0e338907e001dc46dfdbf735\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (opencl_program_type type)</td></tr>\n<tr class=\"separator:a400e941b0e338907e001dc46dfdbf735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abee242124a40c35771d4ec1135e86d15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abee242124a40c35771d4ec1135e86d15\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_program</b> (const <a class=\"el\" href=\"a00113.html\">opencl_program</a> &amp;src)</td></tr>\n<tr class=\"separator:abee242124a40c35771d4ec1135e86d15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a420dfd39624af3d089ac9589373ebb82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a420dfd39624af3d089ac9589373ebb82\"></a>\nkernel_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_kernel</b> (const std::string &amp;k) const </td></tr>\n<tr class=\"separator:a420dfd39624af3d089ac9589373ebb82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a357c187838aa075f23be7b8c86ddcbd3\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory</b></td></tr>\n<tr class=\"separator:a357c187838aa075f23be7b8c86ddcbd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae5c7df2a18ff72b1c110470e8e28d8b7\"></a>\ntemplate&lt;typename DeviceFilter &gt; </td></tr>\n<tr class=\"memitem:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_factory&lt; DeviceFilter &gt;::kernel</b></td></tr>\n<tr class=\"separator:ae5c7df2a18ff72b1c110470e8e28d8b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00114.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_range Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00114.html\">opencl_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00360.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_range Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac096f58fdc32351a11d7bc3926ef5251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac096f58fdc32351a11d7bc3926ef5251\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>range_index_type</b></td></tr>\n<tr class=\"separator:ac096f58fdc32351a11d7bc3926ef5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a757f32424b3588cf9147b281d0bb2f55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a757f32424b3588cf9147b281d0bb2f55\"></a>\ntypedef std::array<br class=\"typebreak\"/>\n&lt; range_index_type, 3 &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>nd_range_type</b></td></tr>\n<tr class=\"separator:a757f32424b3588cf9147b281d0bb2f55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a24ad17ef536995e48d97364068dad332\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a24ad17ef536995e48d97364068dad332\"></a>\ntemplate&lt;typename G  = std::initializer_list&lt;int&gt;, typename L  = std::initializer_list&lt;int&gt;, typename  = typename std::enable_if&lt;!std::is_same&lt;typename std::decay&lt;G&gt;::type, opencl_range&gt;::value&gt;::type&gt; </td></tr>\n<tr class=\"memitem:a24ad17ef536995e48d97364068dad332\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>opencl_range</b> (G &amp;&amp;global_work=std::initializer_list&lt; int &gt;({0}), L &amp;&amp;local_work=std::initializer_list&lt; int &gt;({0, 0, 0}))</td></tr>\n<tr class=\"separator:a24ad17ef536995e48d97364068dad332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a191c3c9373afde6abd1819c164a10e69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a191c3c9373afde6abd1819c164a10e69\"></a>\nconst nd_range_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_range</b> () const </td></tr>\n<tr class=\"separator:a191c3c9373afde6abd1819c164a10e69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91080d6d64ece228c447980ca7b7d4a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91080d6d64ece228c447980ca7b7d4a5\"></a>\nconst nd_range_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>local_range</b> () const </td></tr>\n<tr class=\"separator:a91080d6d64ece228c447980ca7b7d4a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00115.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00358.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00115.png\" usemap=\"#tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\" name=\"tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;_map\">\n<area href=\"a00103.html\" alt=\"tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;\" shape=\"rect\" coords=\"0,0,317,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad6f2ce5cbe4c109adff30995abf8e653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad6f2ce5cbe4c109adff30995abf8e653\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_subbuffer</b> (const <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&lt; T, Factory &gt; &amp;owner, size_t index, size_t size)</td></tr>\n<tr class=\"separator:ad6f2ce5cbe4c109adff30995abf8e653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00103\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00103')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ad841d68e0d62385b7e3d6dbc3255c51f\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>access</b> () const </td></tr>\n<tr class=\"separator:ad841d68e0d62385b7e3d6dbc3255c51f inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a34e9721ad01f57bdb6cd7135cd681924 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a34e9721ad01f57bdb6cd7135cd681924\"></a>\nT *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>data</b> () const </td></tr>\n<tr class=\"separator:a34e9721ad01f57bdb6cd7135cd681924 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9adeb803f65739a617e7363eef2725fe\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>begin</b> () const </td></tr>\n<tr class=\"separator:a9adeb803f65739a617e7363eef2725fe inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a2e2c887ab99d86b54b8bef14f21d4954\"></a>\ntemplate&lt;access_type a = read_write&gt; </td></tr>\n<tr class=\"memitem:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">iterator&lt; a &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>end</b> () const </td></tr>\n<tr class=\"separator:a2e2c887ab99d86b54b8bef14f21d4954 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a653086e25f39f175b5bf33f6767b5bf8 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a653086e25f39f175b5bf33f6767b5bf8\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size</b> () const </td></tr>\n<tr class=\"separator:a653086e25f39f175b5bf33f6767b5bf8 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb7b3759979dc6414687016028d59b61 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adb7b3759979dc6414687016028d59b61\"></a>\nT &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator[]</b> (ptrdiff_t k)</td></tr>\n<tr class=\"separator:adb7b3759979dc6414687016028d59b61 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a753e6325d84b7147ff73777c5938cdae inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a753e6325d84b7147ff73777c5938cdae\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (size_t size)</td></tr>\n<tr class=\"separator:a753e6325d84b7147ff73777c5938cdae inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a353f4d0793c6e494fe7182e368ee1123 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a353f4d0793c6e494fe7182e368ee1123\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_buffer</b> (Factory &amp;f, size_t size)</td></tr>\n<tr class=\"separator:a353f4d0793c6e494fe7182e368ee1123 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a860ba9221e7a5624e409153247cb16e5 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a860ba9221e7a5624e409153247cb16e5\"></a>\ncl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object</b> () const </td></tr>\n<tr class=\"separator:a860ba9221e7a5624e409153247cb16e5 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56871e2809e64ff842091611b3e7a5a4 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56871e2809e64ff842091611b3e7a5a4\"></a>\nconst <a class=\"el\" href=\"a00103.html\">opencl_buffer</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object</b> () const </td></tr>\n<tr class=\"separator:a56871e2809e64ff842091611b3e7a5a4 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac10f3ba6b90c0be794c810c8925898f1 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac10f3ba6b90c0be794c810c8925898f1\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>send</b> (<a class=\"el\" href=\"a00105.html\">opencl_device</a> device, <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:ac10f3ba6b90c0be794c810c8925898f1 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d1916fe58794e9d5d2d22a8d3de4e19 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d1916fe58794e9d5d2d22a8d3de4e19\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>receive</b> (const <a class=\"el\" href=\"a00102.html\">opencl_async_msg</a>&lt; <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>, Factory &gt; &amp;dependency) const </td></tr>\n<tr class=\"separator:a5d1916fe58794e9d5d2d22a8d3de4e19 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6adb29445e259b24bd7a40a1e0818f07 inherit pub_methods_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6adb29445e259b24bd7a40a1e0818f07\"></a>\n<a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a>&lt; T, Factory &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>subbuffer</b> (size_t index, size_t size) const </td></tr>\n<tr class=\"separator:a6adb29445e259b24bd7a40a1e0818f07 inherit pub_methods_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_types_a00103\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00103')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td></tr>\n<tr class=\"memitem:a617261c096aa90e9ea0ca4a63225bc6a inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a617261c096aa90e9ea0ca4a63225bc6a\"></a>\ntypedef cl_mem&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_object_type</b></td></tr>\n<tr class=\"separator:a617261c096aa90e9ea0ca4a63225bc6a inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a051eb49af1f1573b96bb425c13784219 inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a051eb49af1f1573b96bb425c13784219\"></a>\ntypedef <a class=\"el\" href=\"a00103.html\">opencl_buffer</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>memory_object_type</b></td></tr>\n<tr class=\"separator:a051eb49af1f1573b96bb425c13784219 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a918d4534226f0ae3639136953817e565 inherit pub_types_a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a918d4534226f0ae3639136953817e565\"></a>\ntypedef Factory&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>opencl_factory_type</b></td></tr>\n<tr class=\"separator:a918d4534226f0ae3639136953817e565 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a42372f458b493d1c748ca01bb811d831\"></a>\ntemplate&lt;access_type a&gt; </td></tr>\n<tr class=\"memitem:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>iterator</b> = T *</td></tr>\n<tr class=\"separator:a42372f458b493d1c748ca01bb811d831 inherit pub_types_a00103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_opencl_node.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00116.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::parallel_while&lt; Body &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00303.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::parallel_while&lt; Body &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Parallel iteration over a stream, with optional addition of more work.  \n <a href=\"a00116.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_while.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::parallel_while&lt; Body &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00116.png\" usemap=\"#tbb::parallel_while&lt; Body &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::parallel_while&lt; Body &gt;_map\" name=\"tbb::parallel_while&lt; Body &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2442f019427e608d46801376267e44a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2442f019427e608d46801376267e44a8\"></a>\ntypedef Body::argument_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a></td></tr>\n<tr class=\"memdesc:a2442f019427e608d46801376267e44a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of items. <br/></td></tr>\n<tr class=\"separator:a2442f019427e608d46801376267e44a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a220a7307358aa36802c8754ea45ca385\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a220a7307358aa36802c8754ea45ca385\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">parallel_while</a> ()</td></tr>\n<tr class=\"memdesc:a220a7307358aa36802c8754ea45ca385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty non-running parallel while. <br/></td></tr>\n<tr class=\"separator:a220a7307358aa36802c8754ea45ca385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2fd559c8a38639fa1ba97a0d5639ca8\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">~parallel_while</a> ()</td></tr>\n<tr class=\"memdesc:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor cleans up data members before returning. <br/></td></tr>\n<tr class=\"separator:ac2fd559c8a38639fa1ba97a0d5639ca8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20607ba5faa958144787d980aa850c16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Stream &gt; </td></tr>\n<tr class=\"memitem:a20607ba5faa958144787d980aa850c16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">run</a> (Stream &amp;stream, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:a20607ba5faa958144787d980aa850c16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Apply body.apply to each item in the stream.  <a href=\"#a20607ba5faa958144787d980aa850c16\">More...</a><br/></td></tr>\n<tr class=\"separator:a20607ba5faa958144787d980aa850c16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">add</a> (const <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> &amp;item)</td></tr>\n<tr class=\"memdesc:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a work item while running.  <a href=\"#a4861989d7f5e3111d264d4d6013e8fe1\">More...</a><br/></td></tr>\n<tr class=\"separator:a4861989d7f5e3111d264d4d6013e8fe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Body&gt;<br/>\nclass tbb::parallel_while&lt; Body &gt;</h3>\n\n<p>Parallel iteration over a stream, with optional addition of more work. </p>\n<p>The Body b has the requirement: <br/>\n \"b(v)\" <br/>\n \"b.argument_type\" <br/>\nwhere v is an argument_type </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a4861989d7f5e3111d264d4d6013e8fe1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00116.html\">tbb::parallel_while</a>&lt; Body &gt;::add </td>\n          <td>(</td>\n          <td class=\"paramtype\">const <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Add a work item while running. </p>\n<p>Should be executed only by body.apply or a thread spawned therefrom. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a20607ba5faa958144787d980aa850c16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Body &gt; </div>\n<div class=\"memtemplate\">\ntemplate&lt;typename Stream &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void <a class=\"el\" href=\"a00116.html\">tbb::parallel_while</a>&lt; Body &gt;::run </td>\n          <td>(</td>\n          <td class=\"paramtype\">Stream &amp;&#160;</td>\n          <td class=\"paramname\"><em>stream</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Apply body.apply to each item in the stream. </p>\n<p>A Stream s has the requirements <br/>\n \"S::value_type\" <br/>\n \"s.pop_if_present(value) is convertible to bool </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>parallel_while.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00117.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::pipeline Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00117.html\">pipeline</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00306.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pipeline Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A processing pipeline that applies filters to items.  \n <a href=\"a00117.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afe7b7bd9b2617c2b69170675a478b2bd\"></a>\n__TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">pipeline</a> ()</td></tr>\n<tr class=\"memdesc:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct empty pipeline. <br/></td></tr>\n<tr class=\"separator:afe7b7bd9b2617c2b69170675a478b2bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3a7b33217b3f3bb0682ec3a40fd2c39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">~pipeline</a> ()</td></tr>\n<tr class=\"separator:ac3a7b33217b3f3bb0682ec3a40fd2c39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8eb83014bd53b184e0ed50f120ca310b\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">add_filter</a> (<a class=\"el\" href=\"a00074.html\">filter</a> &amp;filter_)</td></tr>\n<tr class=\"memdesc:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add filter to end of pipeline. <br/></td></tr>\n<tr class=\"separator:a8eb83014bd53b184e0ed50f120ca310b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac9ee9080cfc080c40a7ee7cb03a62637\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ac9ee9080cfc080c40a7ee7cb03a62637\">run</a> (size_t max_number_of_live_tokens)</td></tr>\n<tr class=\"memdesc:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Run the pipeline to completion. <br/></td></tr>\n<tr class=\"separator:ac9ee9080cfc080c40a7ee7cb03a62637\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a270dba81f7dd9935be7f3d69db907ff4\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">run</a> (size_t max_number_of_live_tokens, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Run the pipeline to completion with user-supplied context. <br/></td></tr>\n<tr class=\"separator:a270dba81f7dd9935be7f3d69db907ff4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae53edbda1771eeaa254d78ae6100a762\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">clear</a> ()</td></tr>\n<tr class=\"memdesc:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove all filters from the pipeline. <br/></td></tr>\n<tr class=\"separator:ae53edbda1771eeaa254d78ae6100a762\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a88bd11ed4d74f6de43a7d3b0bc05f2c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a88bd11ed4d74f6de43a7d3b0bc05f2c3\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::stage_task</b></td></tr>\n<tr class=\"separator:a88bd11ed4d74f6de43a7d3b0bc05f2c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6f9dcf41617866d7bf0e72d8efc11e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6f9dcf41617866d7bf0e72d8efc11e7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_root_task</b></td></tr>\n<tr class=\"separator:aa6f9dcf41617866d7bf0e72d8efc11e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adcddbbe2df37193795a145ef8aac7954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adcddbbe2df37193795a145ef8aac7954\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filter</b></td></tr>\n<tr class=\"separator:adcddbbe2df37193795a145ef8aac7954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4463cf8612c362ee109224e45fad104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4463cf8612c362ee109224e45fad104\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_bound_filter</b></td></tr>\n<tr class=\"separator:ab4463cf8612c362ee109224e45fad104\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39b28579343dc2cdb67fe3fbffe731a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39b28579343dc2cdb67fe3fbffe731a8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::pipeline_cleaner</b></td></tr>\n<tr class=\"separator:a39b28579343dc2cdb67fe3fbffe731a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0307e203ca37529138734040c3881a35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0307e203ca37529138734040c3881a35\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::interface6::internal::pipeline_proxy</b></td></tr>\n<tr class=\"separator:a0307e203ca37529138734040c3881a35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A processing pipeline that applies filters to items. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"ac3a7b33217b3f3bb0682ec3a40fd2c39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00118.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::pre_scan_tag Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00301.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pre_scan_tag Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Used to indicate that the initial scan is being performed.  \n <a href=\"a00118.html#details\">More...</a></p>\n\n<p><code>#include &lt;parallel_scan.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ae0e7d5d6eb7a47654bb019f9ca6aea77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae0e7d5d6eb7a47654bb019f9ca6aea77\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator bool</b> ()</td></tr>\n<tr class=\"separator:ae0e7d5d6eb7a47654bb019f9ca6aea77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a1d71947e8273d28e01620f92a292be59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1d71947e8273d28e01620f92a292be59\"></a>\nstatic bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_final_scan</b> ()</td></tr>\n<tr class=\"separator:a1d71947e8273d28e01620f92a292be59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Used to indicate that the initial scan is being performed. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_scan.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00119.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00119.html\">predecessor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00120.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00307.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Queuing mutex with local-only spinning.  \n <a href=\"a00120.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00120.png\" usemap=\"#tbb::queuing_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_mutex_map\" name=\"tbb::queuing_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00142.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0e58fce2062ae349a30b320b7fdc9155\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">queuing_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:a0e58fce2062ae349a30b320b7fdc9155\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae475e98e804c75239748b293e7e0feff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae475e98e804c75239748b293e7e0feff\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:ae475e98e804c75239748b293e7e0feff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a504f3af8a939468f1514604c0941bc62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a504f3af8a939468f1514604c0941bc62\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a504f3af8a939468f1514604c0941bc62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47ad4cdac79581c01a66241e2e5c2c07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47ad4cdac79581c01a66241e2e5c2c07\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a47ad4cdac79581c01a66241e2e5c2c07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b4833b97208bd699cba061dfc3057cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b4833b97208bd699cba061dfc3057cc\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a5b4833b97208bd699cba061dfc3057cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Queuing mutex with local-only spinning. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00121.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_rw_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00309.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Queuing reader-writer mutex with local-only spinning.  \n <a href=\"a00121.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_rw_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00121.png\" usemap=\"#tbb::queuing_rw_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_rw_mutex_map\" name=\"tbb::queuing_rw_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00149.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23de1ac415b6f54b778c8fd6ec6073e0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">queuing_rw_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:a23de1ac415b6f54b778c8fd6ec6073e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae67fe828d7e07222e7876ef9fd780fcc\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">~queuing_rw_mutex</a> ()</td></tr>\n<tr class=\"memdesc:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br/></td></tr>\n<tr class=\"separator:ae67fe828d7e07222e7876ef9fd780fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd032e7e13804cd4d1cd8fce60d773f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afd032e7e13804cd4d1cd8fce60d773f8\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_construct</b> ()</td></tr>\n<tr class=\"separator:afd032e7e13804cd4d1cd8fce60d773f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:ae3dbfbf71bfa9c662a59688cd86bfbd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3dbfbf71bfa9c662a59688cd86bfbd7\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:ae3dbfbf71bfa9c662a59688cd86bfbd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae8c3ee1f5ab3af3954abeec1d165ea8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae8c3ee1f5ab3af3954abeec1d165ea8e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:ae8c3ee1f5ab3af3954abeec1d165ea8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4704d512922b4b5d21c97901f9f7abd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4704d512922b4b5d21c97901f9f7abd0\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = true</td></tr>\n<tr class=\"separator:a4704d512922b4b5d21c97901f9f7abd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Queuing reader-writer mutex with local-only spinning. </p>\n<p>Adapted from Krieger, Stumm, et al. pseudocode at <a href=\"http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93\">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a> </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00122.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00390.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Writer-preference reader-writer lock with local-only spinning on readers.  \n <a href=\"a00122.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00122.png\" usemap=\"#tbb::interface5::reader_writer_lock_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock_map\" name=\"tbb::interface5::reader_writer_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped lock pattern for write locks.  <a href=\"a00143.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped lock pattern for read locks.  <a href=\"a00152.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">status_t</a> { <b>waiting_nonblocking</b>, \n<b>waiting</b>, \n<b>active</b>, \n<b>invalid</b>\n }</td></tr>\n<tr class=\"memdesc:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Status type for nodes associated with lock instances.  <a href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">More...</a><br/></td></tr>\n<tr class=\"separator:a29bbf9ca21c12b313d9fa5326feaf3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abceda6c50b0c36eacbef51f4682742f3\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">reader_writer_lock</a> ()</td></tr>\n<tr class=\"memdesc:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a new <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a>. <br/></td></tr>\n<tr class=\"separator:abceda6c50b0c36eacbef51f4682742f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeee96b648c7b5ff6126c8a2e13ec7241\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">~reader_writer_lock</a> ()</td></tr>\n<tr class=\"memdesc:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructs a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> object. <br/></td></tr>\n<tr class=\"separator:aeee96b648c7b5ff6126c8a2e13ec7241\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a> ()</td></tr>\n<tr class=\"memdesc:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write.  <a href=\"#af92eb949fc491af8f7e350869ea0a0d1\">More...</a><br/></td></tr>\n<tr class=\"separator:af92eb949fc491af8f7e350869ea0a0d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write.  <a href=\"#a1739e842af52925a2d4a7e821b9b3b8d\">More...</a><br/></td></tr>\n<tr class=\"separator:a1739e842af52925a2d4a7e821b9b3b8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">lock_read</a> ()</td></tr>\n<tr class=\"memdesc:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read.  <a href=\"#a6fd4fcdf0e5c0425d1cc736d644f234f\">More...</a><br/></td></tr>\n<tr class=\"separator:a6fd4fcdf0e5c0425d1cc736d644f234f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">try_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read.  <a href=\"#a9c7aa04e00202c9a1197cb6d870cabb4\">More...</a><br/></td></tr>\n<tr class=\"separator:a9c7aa04e00202c9a1197cb6d870cabb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c55c4dbde63e950fdc843c9b01a174f\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a>. <br/></td></tr>\n<tr class=\"separator:a4c55c4dbde63e950fdc843c9b01a174f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock_read</b></td></tr>\n<tr class=\"separator:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Writer-preference reader-writer lock with local-only spinning on readers. </p>\n<p>Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href=\"http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp\">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> </p>\n</div><h2 class=\"groupheader\">Member Enumeration Documentation</h2>\n<a class=\"anchor\" id=\"a29bbf9ca21c12b313d9fa5326feaf3ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock::status_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Status type for nodes associated with lock instances. </p>\n<p>waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.</p>\n<p>waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.</p>\n<p>active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion</p>\n<p>invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed</p>\n<p>The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.</p>\n<p>State diagram for <a class=\"el\" href=\"a00143.html\" title=\"The scoped lock pattern for write locks. \">scoped_lock</a> status:</p>\n<p>waiting -------&mdash;&gt; waiting_nonblocking | _____________/ | V V V active --------------&mdash;&gt; invalid</p>\n<p>State diagram for <a class=\"el\" href=\"a00152.html\" title=\"The scoped lock pattern for read locks. \">scoped_lock_read</a> status:</p>\n<p>waiting | V active --------------&mdash;&gt;invalid </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"af92eb949fc491af8f7e350869ea0a0d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write. </p>\n<p>If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class=\"el\" href=\"a00086.html\" title=\"Exception for PPL locks. \">improper_lock</a> The context tries to acquire a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> that it already has write ownership of. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6fd4fcdf0e5c0425d1cc736d644f234f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Acquires the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read. </p>\n<p>If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class=\"el\" href=\"a00086.html\" title=\"Exception for PPL locks. \">improper_lock</a> The context tries to acquire a <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> that it already has write ownership of. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1739e842af52925a2d4a7e821b9b3b8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for write. </p>\n<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\" title=\"Tries to acquire the reader_writer_lock for write. \">try_lock()</a> returns false. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9c7aa04e00202c9a1197cb6d870cabb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Tries to acquire the <a class=\"el\" href=\"a00122.html\" title=\"Writer-preference reader-writer lock with local-only spinning on readers. \">reader_writer_lock</a> for read. </p>\n<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00123.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00123.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00287.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1bb89d2224e26a9dfee7ef1adbac8b3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bb89d2224e26a9dfee7ef1adbac8b3d\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a1bb89d2224e26a9dfee7ef1adbac8b3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00124.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00124.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00404.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4a2190850873b9f2bc63c28dfd336dd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4a2190850873b9f2bc63c28dfd336dd9\"></a>\ntypedef <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a><br class=\"typebreak\"/>\n&lt; U, P &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a4a2190850873b9f2bc63c28dfd336dd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00125.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00125.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00289.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9a8756c2c1d9425bdf7490943ae0b189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a8756c2c1d9425bdf7490943ae0b189\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a9a8756c2c1d9425bdf7490943ae0b189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>cache_aligned_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00126.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00126.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00314.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4f44c77105a911769353936a23b780a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4f44c77105a911769353936a23b780a6\"></a>\ntypedef <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a4f44c77105a911769353936a23b780a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00127.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00127.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00316.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a37986044aa989f9c1f9edef6ab79435d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a37986044aa989f9c1f9edef6ab79435d\"></a>\ntypedef <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a37986044aa989f9c1f9edef6ab79435d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00128.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00128.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00328.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8f3c27dc0f43be2eafdfe8c6f222c44c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8f3c27dc0f43be2eafdfe8c6f222c44c\"></a>\ntypedef <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a8f3c27dc0f43be2eafdfe8c6f222c44c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00129.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00129.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00330.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aab450b73dbeb738f88700ac54ce04ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aab450b73dbeb738f88700ac54ce04ce9\"></a>\ntypedef <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U, <br class=\"typebreak\"/>\nAllocator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:aab450b73dbeb738f88700ac54ce04ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00130.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00130.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00332.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a6a001a156c058ee1194ba55ce534a43e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a001a156c058ee1194ba55ce534a43e\"></a>\ntypedef <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U, <br class=\"typebreak\"/>\nAllocator &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a6a001a156c058ee1194ba55ce534a43e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00131.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00131.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00326.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:adbeadd225df01e2cde9ffe5d92293671\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adbeadd225df01e2cde9ffe5d92293671\"></a>\ntypedef <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:adbeadd225df01e2cde9ffe5d92293671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00132.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00132.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00402.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a1e9f9c6f0163df16980598fcafca665b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e9f9c6f0163df16980598fcafca665b\"></a>\ntypedef <a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a><br class=\"typebreak\"/>\n&lt; U, P &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>other</b></td></tr>\n<tr class=\"separator:a1e9f9c6f0163df16980598fcafca665b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00133.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::receiver&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00133.html\">receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00344.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver&lt; T &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Pure virtual template class that defines a receiver of messages of type T.  \n <a href=\"a00133.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::receiver&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00133.png\" usemap=\"#tbb::flow::interface10::receiver&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::receiver&lt; T &gt;_map\" name=\"tbb::flow::interface10::receiver&lt; T &gt;_map\">\n<area href=\"a00178.html\" alt=\"tbb::flow::interface10::internal::untyped_receiver\" shape=\"rect\" coords=\"0,0,282,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ed56cc8468b7e29c39c04dcb1b59f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ed56cc8468b7e29c39c04dcb1b59f9b\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a8ed56cc8468b7e29c39c04dcb1b59f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0777fdc008e74f63bef8557c8afea5f9\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a></td></tr>\n<tr class=\"memdesc:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The input type of this receiver. <br/></td></tr>\n<tr class=\"separator:a0777fdc008e74f63bef8557c8afea5f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abca607a1fa7f7ad0d55d374e4416fe7e\"></a>\ntypedef <a class=\"el\" href=\"a00153.html\">sender</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:abca607a1fa7f7ad0d55d374e4416fe7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affeefcd8a802c09194c27555188a95a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affeefcd8a802c09194c27555188a95a2\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:affeefcd8a802c09194c27555188a95a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e5331f73255893c402e844eba978578\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e5331f73255893c402e844eba978578\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a7e5331f73255893c402e844eba978578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531 inherit pub_types_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6545b1434a16ee261ed6c4ee7f9044a6\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;::<a class=\"el\" href=\"a00062.html\">filtered_type</a> &amp;t)</td></tr>\n<tr class=\"memdesc:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a6545b1434a16ee261ed6c4ee7f9044a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4f0b65672f9c488e6c8e069e1afaebd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac4f0b65672f9c488e6c8e069e1afaebd\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put</b> (const typename <a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;::async_type &amp;t)</td></tr>\n<tr class=\"separator:ac4f0b65672f9c488e6c8e069e1afaebd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad2f3f8570b3fed4148baf16e72b04f38\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a> ()</td></tr>\n<tr class=\"memdesc:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:ad2f3f8570b3fed4148baf16e72b04f38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9717a7ab9ad56f3210c08dbb320def77\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a> (const T &amp;t)</td></tr>\n<tr class=\"memdesc:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a9717a7ab9ad56f3210c08dbb320def77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9e6f87b3c25f7d6b5d92226e36c0b830\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a predecessor to the node. <br/></td></tr>\n<tr class=\"separator:a9e6f87b3c25f7d6b5d92226e36c0b830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab3ce4335dd5d73823c6568f3dfd704f0\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove a predecessor from the node. <br/></td></tr>\n<tr class=\"separator:ab3ce4335dd5d73823c6568f3dfd704f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a165adb1746f97516c459e96474427aca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a165adb1746f97516c459e96474427aca\"></a>\nvirtual <a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> ()=0</td></tr>\n<tr class=\"separator:a165adb1746f97516c459e96474427aca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17f59f569f953220cf104dcb2a195eae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a17f59f569f953220cf104dcb2a195eae\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a17f59f569f953220cf104dcb2a195eae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1549dbcb01fc1b0619fda4b6f77fa58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae1549dbcb01fc1b0619fda4b6f77fa58\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:ae1549dbcb01fc1b0619fda4b6f77fa58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a115d6316079c74764b7eb1eab6df6de9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a115d6316079c74764b7eb1eab6df6de9\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:a115d6316079c74764b7eb1eab6df6de9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a68b606e7803719a7117f1b4bc0063c50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a68b606e7803719a7117f1b4bc0063c50\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> ()=0</td></tr>\n<tr class=\"separator:a68b606e7803719a7117f1b4bc0063c50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81 inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a inherit pub_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:afa535fb621f3744149fb97da1d020503\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa535fb621f3744149fb97da1d020503\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:afa535fb621f3744149fb97da1d020503\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ef34fd20efbb9e5dcb18877c38881d6\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">try_put_task</a> (const T &amp;t)=0</td></tr>\n<tr class=\"memdesc:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ef34fd20efbb9e5dcb18877c38881d6\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task</b> (const T &amp;t)=0</td></tr>\n<tr class=\"separator:a1ef34fd20efbb9e5dcb18877c38881d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab54afb91692e9cfb10470c575e46ac0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab54afb91692e9cfb10470c575e46ac0a\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:ab54afb91692e9cfb10470c575e46ac0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab2805ed9ad8baaa027676e024de59fb1\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>\n<tr class=\"memdesc:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:ab2805ed9ad8baaa027676e024de59fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59f3e796705b03165af16b42fd7f35dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59f3e796705b03165af16b42fd7f35dd\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> ()</td></tr>\n<tr class=\"separator:a59f3e796705b03165af16b42fd7f35dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00178\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00178')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8 inherit pro_methods_a00178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::async_storage</b></td></tr>\n<tr class=\"separator:ae4f7ceb1e5cf2e99e594ca4fe604ceb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac37955c25251d60e0279db6d239268a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac37955c25251d60e0279db6d239268a9\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:ac37955c25251d60e0279db6d239268a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">struct&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::async_helpers</b></td></tr>\n<tr class=\"separator:ac37955c25251d60e0279db6d239268a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename R , typename B &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">run_and_put_task</a></td></tr>\n<tr class=\"memdesc:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put item to successor; return task to run the successor if possible. <br/></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename X , typename Y &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">limiter_node</a></td></tr>\n<tr class=\"memdesc:a05ec930a348f7eed564236d00edbda24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename TT , typename M &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af80b784f4606fcda66eb0059fdf6af07\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>proxy_dependency_receiver</b></td></tr>\n<tr class=\"separator:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::flow::interface10::receiver&lt; T &gt;</h3>\n\n<p>Pure virtual template class that defines a receiver of messages of type T. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00134.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::receiver_gateway&lt; Input &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00347.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver_gateway&lt; Input &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::receiver_gateway&lt; Input &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00134.png\" usemap=\"#tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\" name=\"tbb::flow::interface10::receiver_gateway&lt; Input &gt;_map\">\n<area href=\"a00084.html\" title=\"Pure virtual template classes that define interfaces for async communication. \" alt=\"tbb::flow::interface10::graph_proxy\" shape=\"rect\" coords=\"0,0,287,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3a879651cc5c433929bd9c67e6b400ad\"></a>\ntypedef Input&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a></td></tr>\n<tr class=\"memdesc:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of inputing data into FG. <br/></td></tr>\n<tr class=\"separator:a3a879651cc5c433929bd9c67e6b400ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2e65f3f68b97122cf16f81de057d5f0\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">try_put</a> (const <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a> &amp;)=0</td></tr>\n<tr class=\"memdesc:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Submit signal from an asynchronous activity to FG. <br/></td></tr>\n<tr class=\"separator:ac2e65f3f68b97122cf16f81de057d5f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00084\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00084')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td></tr>\n<tr class=\"memitem:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a49a9be5db28923f84cfc468d39139fb3\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that messages may come from outside, to prevent premature graph completion. <br/></td></tr>\n<tr class=\"separator:a49a9be5db28923f84cfc468d39139fb3 inherit pub_methods_a00084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad4e11378739911c10db09ba71abe7c1a\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a> ()=0</td></tr>\n<tr class=\"memdesc:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inform a graph that a previous call to reserve_wait is no longer in effect. <br/></td></tr>\n<tr class=\"separator:ad4e11378739911c10db09ba71abe7c1a inherit pub_methods_a00084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>flow_graph_abstractions.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00135.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::recursive_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00311.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Mutex that allows recursive mutex acquisition.  \n <a href=\"a00135.html#details\">More...</a></p>\n\n<p><code>#include &lt;recursive_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::recursive_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00135.png\" usemap=\"#tbb::recursive_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::recursive_mutex_map\" name=\"tbb::recursive_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00147.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d40334b0e26d5addfde5596e7f9aaec\"></a>\ntypedef LPCRITICAL_SECTION&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a></td></tr>\n<tr class=\"memdesc:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return native_handle. <br/></td></tr>\n<tr class=\"separator:a3d40334b0e26d5addfde5596e7f9aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59f90e65656fec5a07e375c6e7cd39f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59f90e65656fec5a07e375c6e7cd39f3\"></a>\ntypedef pthread_mutex_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a59f90e65656fec5a07e375c6e7cd39f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47eb6e7e7ffa5d35341125792b17236b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">recursive_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a47eb6e7e7ffa5d35341125792b17236b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adea997b45dc4a360f38d14bde9c991f2\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">lock</a> ()</td></tr>\n<tr class=\"memdesc:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:adea997b45dc4a360f38d14bde9c991f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b181d9aaa95444145222cfe206e8094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a8b181d9aaa95444145222cfe206e8094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a8b181d9aaa95444145222cfe206e8094\">More...</a><br/></td></tr>\n<tr class=\"separator:a8b181d9aaa95444145222cfe206e8094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af57e8d25e0e7614e98bcfa50bc9416c8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:af57e8d25e0e7614e98bcfa50bc9416c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a050ca2a8d3b5c98f9d6c1252856436db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a050ca2a8d3b5c98f9d6c1252856436db\"></a>\n<a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:a050ca2a8d3b5c98f9d6c1252856436db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a668511b8520c41a342c038ba26ce70ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a668511b8520c41a342c038ba26ce70ff\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a668511b8520c41a342c038ba26ce70ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2817cf2c1a7875590548f49a834ca668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2817cf2c1a7875590548f49a834ca668\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = true</td></tr>\n<tr class=\"separator:a2817cf2c1a7875590548f49a834ca668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcc4a830c307cb4d25311550a527fe4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcc4a830c307cb4d25311550a527fe4d\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:abcc4a830c307cb4d25311550a527fe4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Mutex that allows recursive mutex acquisition. </p>\n<p>Mutex that allows recursive mutex acquisition. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a8b181d9aaa95444145222cfe206e8094\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::recursive_mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock::try_acquire()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>recursive_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00136.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00136.html\">reservable_predecessor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00137.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00137.html\">round_robin_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00138.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::run_and_put_task&lt; R, B &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00138.html\">run_and_put_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00139.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::runtime_loader Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00409.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::runtime_loader Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Load TBB at runtime.  \n <a href=\"a00139.html#details\">More...</a></p>\n\n<p><code>#include &lt;runtime_loader.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::runtime_loader:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00139.png\" usemap=\"#tbb::interface6::runtime_loader_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::runtime_loader_map\" name=\"tbb::interface6::runtime_loader_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> { <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">em_status</a>, \n<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">em_throw</a>, \n<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>\n }</td></tr>\n<tr class=\"memdesc:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Error mode constants.  <a href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">More...</a><br/></td></tr>\n<tr class=\"separator:ab85c82f9c0ccd91905f2795a79ac1295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> { <br/>\n&#160;&#160;<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">ec_ok</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">ec_bad_call</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">ec_bad_arg</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">ec_bad_lib</a>, \n<br/>\n&#160;&#160;<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">ec_bad_ver</a>, \n<a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">ec_no_lib</a>\n<br/>\n }</td></tr>\n<tr class=\"memdesc:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Error codes.  <a href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">More...</a><br/></td></tr>\n<tr class=\"separator:a264674772d9f4240d89aa9d939c1eef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2f87eaf99564c705aa140f2eb8848eaa\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">runtime_loader</a> (<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> mode=<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>)</td></tr>\n<tr class=\"memdesc:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize object but do not load TBB. <br/></td></tr>\n<tr class=\"separator:a2f87eaf99564c705aa140f2eb8848eaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> mode=<a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a>)</td></tr>\n<tr class=\"memdesc:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize object and load TBB.  <a href=\"#a3e0932074d2f3ad04605e7e5da88c561\">More...</a><br/></td></tr>\n<tr class=\"separator:a3e0932074d2f3ad04605e7e5da88c561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa3b96f53e165e3d692c3c36292ba0737\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">~runtime_loader</a> ()</td></tr>\n<tr class=\"memdesc:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy object. <br/></td></tr>\n<tr class=\"separator:aa3b96f53e165e3d692c3c36292ba0737\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td></tr>\n<tr class=\"memdesc:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Load TBB.  <a href=\"#ae2949e9adcac56a2cb9864437be8e22e\">More...</a><br/></td></tr>\n<tr class=\"separator:ae2949e9adcac56a2cb9864437be8e22e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">status</a> ()</td></tr>\n<tr class=\"memdesc:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Report status.  <a href=\"#a85bf9ee021a2076a3ac7cfd70aae7345\">More...</a><br/></td></tr>\n<tr class=\"separator:a85bf9ee021a2076a3ac7cfd70aae7345\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Load TBB at runtime. </p>\n<p><b>Usage:</b> </p>\n<p>In source code:</p>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &quot;tbb/runtime_loader.h&quot;</span></div>\n<div class=\"line\"></div>\n<div class=\"line\"><span class=\"keywordtype\">char</span> <span class=\"keyword\">const</span> * path[] = { <span class=\"stringliteral\">&quot;&lt;install dir&gt;/lib/ia32&quot;</span>, NULL };</div>\n<div class=\"line\">tbb::runtime_loader loader( path );</div>\n<div class=\"line\"></div>\n<div class=\"line\"><span class=\"comment\">// Now use TBB.</span></div>\n</div><!-- fragment --><p>Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).</p>\n<p>TBB library will be loaded at runtime from <code></code> &lt;install dir&gt;=\"\"&gt;/lib/ia32 directory.</p>\n<p><b>Attention:</b> </p>\n<p>All <code><a class=\"el\" href=\"a00139.html\" title=\"Load TBB at runtime. \">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications: </p>\n<pre class=\"fragment\">-   Only one TBB library can be loaded per module.\n\n-   If one object has already loaded TBB library, another object will not load TBB.\n    If the loaded TBB library is suitable for the second object, both will use TBB\n    cooperatively, otherwise the second object will report an error.\n\n-   \\c runtime_loader objects will not work (correctly) in parallel due to absence of\n    synchronization.</pre> </div><h2 class=\"groupheader\">Member Enumeration Documentation</h2>\n<a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader::error_code</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Error codes. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\"></a>ec_ok</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No errors. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\"></a>ec_bad_call</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid function call (e. g. <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\" title=\"Load TBB. \">load()</a> called when TBB is already loaded). </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\"></a>ec_bad_arg</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid argument passed. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\"></a>ec_bad_lib</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\"></a>ec_bad_ver</em>&nbsp;</td><td class=\"fielddoc\">\n<p>TBB found but version is not suitable. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\"></a>ec_no_lib</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No suitable TBB library found. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader::error_mode</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Error mode constants. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\"></a>em_status</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Save status of operation and continue. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\"></a>em_throw</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Throw an exception of tbb::runtime_loader::error_code type. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\"></a>em_abort</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Print message to <code>stderr</code> and call <code>abort()</code>. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a3e0932074d2f3ad04605e7e5da88c561\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::runtime_loader::runtime_loader </td>\n          <td>(</td>\n          <td class=\"paramtype\">char const *&#160;</td>\n          <td class=\"paramname\"><em>path</em>[], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_ver</em> = <code>INT_MAX</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a>&#160;</td>\n          <td class=\"paramname\"><em>mode</em> = <code><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initialize object and load TBB. </p>\n<p>See <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\" title=\"Load TBB. \">load()</a> for details.</p>\n<p>If error mode is <code>em_status</code>, call <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\" title=\"Report status. \">status()</a> to check whether TBB was loaded or not. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">path</td><td>List of directories to search TBB in. </td></tr>\n    <tr><td class=\"paramname\">min_ver</td><td>Minimal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">max_ver</td><td>Maximal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">mode</td><td>Error mode for this object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ae2949e9adcac56a2cb9864437be8e22e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> tbb::interface6::runtime_loader::load </td>\n          <td>(</td>\n          <td class=\"paramtype\">char const *&#160;</td>\n          <td class=\"paramname\"><em>path</em>[], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_ver</em> = <code>INT_MAX</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Load TBB. </p>\n<p>The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.</p>\n<p><b>Note:</b> </p>\n<p>For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>\".\"</code>), parent (<code>\"..\"</code>) or any other relative directory (like <code>\"lib\"</code> ). Use only absolute directory names (e. g. \"/usr/local/lib\").</p>\n<p>For the same security reasons, avoid using system default directories (<code>\"\"</code>) on Windows. (See <a href=\"http://www.microsoft.com/technet/security/advisory/2269637.mspx\">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)</p>\n<p>Neglecting these rules may cause your program to execute 3-rd party malicious code.</p>\n<p><b>Errors:</b> </p>\n<ul>\n<li><code>ec_bad_call</code> - TBB already loaded by this object.</li>\n<li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> &gt; <code>max_ver</code>.</li>\n<li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li>\n<li><code>ec_no_lib</code> - No suitable library found. </li>\n</ul>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">path</td><td>List of directories to search TBB in. </td></tr>\n    <tr><td class=\"paramname\">min_ver</td><td>Minimal suitable version of TBB. </td></tr>\n    <tr><td class=\"paramname\">max_ver</td><td>Maximal suitable version of TBB. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a85bf9ee021a2076a3ac7cfd70aae7345\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> tbb::interface6::runtime_loader::status </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Report status. </p>\n<p>If error mode is <code>em_status</code>, the function returns status of the last operation. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>runtime_loader.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00140.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00313.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00140.html#details\">More...</a></p>\n\n<p><code>#include &lt;scalable_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:aa9171ca5fc6dc349ae95a28cd16b504c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa9171ca5fc6dc349ae95a28cd16b504c\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:aa9171ca5fc6dc349ae95a28cd16b504c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af5352e44d6bcde3d0bdf8368acd3c84c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af5352e44d6bcde3d0bdf8368acd3c84c\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:af5352e44d6bcde3d0bdf8368acd3c84c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9722dbf8015bed6319bc16996d45546f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9722dbf8015bed6319bc16996d45546f\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a9722dbf8015bed6319bc16996d45546f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3c8f5f07f47672c0c97fab799807728\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af3c8f5f07f47672c0c97fab799807728\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:af3c8f5f07f47672c0c97fab799807728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4de1dd8be241f945d464cbef0dd6c5b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4de1dd8be241f945d464cbef0dd6c5b8\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a4de1dd8be241f945d464cbef0dd6c5b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2376f6bacc6dcb3aa37f27a78681e89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac2376f6bacc6dcb3aa37f27a78681e89\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:ac2376f6bacc6dcb3aa37f27a78681e89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a751a0d5a410244226f62914cbde260ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a751a0d5a410244226f62914cbde260ff\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:a751a0d5a410244226f62914cbde260ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a276a735dca4ba6abbe3b251d4c003ea7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a276a735dca4ba6abbe3b251d4c003ea7\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scalable_allocator</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a276a735dca4ba6abbe3b251d4c003ea7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ae680426a4dfbd51a7447d12354679c6e\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>scalable_allocator</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:ae680426a4dfbd51a7447d12354679c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a647d824ce9396c3c4cb4450b0c2b7b3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a647d824ce9396c3c4cb4450b0c2b7b3c\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:a647d824ce9396c3c4cb4450b0c2b7b3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab30cf9e0d0bef7ba8567edc6efb045e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab30cf9e0d0bef7ba8567edc6efb045e4\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:ab30cf9e0d0bef7ba8567edc6efb045e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf24945c12dc0586dfb1f8638daf7838\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:acf24945c12dc0586dfb1f8638daf7838\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0632b19f25e5d5f86f18b3101925f488\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a0632b19f25e5d5f86f18b3101925f488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afaa85d739b466699cf669116fd10d175\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afaa85d739b466699cf669116fd10d175\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:afaa85d739b466699cf669116fd10d175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:afaa85d739b466699cf669116fd10d175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a0502de23b9ed7c1611703fe725cb4cd3\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>construct</b> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"separator:a0502de23b9ed7c1611703fe725cb4cd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecd5a33086abab6860105ef9856e2786\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aecd5a33086abab6860105ef9856e2786\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:aecd5a33086abab6860105ef9856e2786\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13115cd358c7be350dbeb5271181ae26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a13115cd358c7be350dbeb5271181ae26\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a13115cd358c7be350dbeb5271181ae26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac79ddb098880d8bde6097ac11f641188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac79ddb098880d8bde6097ac11f641188\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>destroy</b> (pointer p)</td></tr>\n<tr class=\"separator:ac79ddb098880d8bde6097ac11f641188\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::scalable_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00141.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::scalable_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00315.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00141.html#details\">More...</a></p>\n\n<p><code>#include &lt;scalable_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a4220fdea504929811e9c083da3ec24cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4220fdea504929811e9c083da3ec24cd\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a4220fdea504929811e9c083da3ec24cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ae27d63cd7df1dc8d2a47c89aad8bba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2ae27d63cd7df1dc8d2a47c89aad8bba\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a2ae27d63cd7df1dc8d2a47c89aad8bba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a968aea700a5f30ad613a84a474b00ba4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a968aea700a5f30ad613a84a474b00ba4\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a968aea700a5f30ad613a84a474b00ba4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::scalable_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00142.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00308.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00142.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00142.png\" usemap=\"#tbb::queuing_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_mutex::scoped_lock_map\" name=\"tbb::queuing_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a0afe0107eb0aae613e726f67624d2fca\">More...</a><br/></td></tr>\n<tr class=\"separator:a0afe0107eb0aae613e726f67624d2fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa82d9da0dcfe5b21f1c08473f8223105\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">scoped_lock</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:aa82d9da0dcfe5b21f1c08473f8223105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a469ec43836a8dd250ce0a22b02945630\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a469ec43836a8dd250ce0a22b02945630\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a469ec43836a8dd250ce0a22b02945630\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a469ec43836a8dd250ce0a22b02945630\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abf8aa7ccd48d54dcb53665700a17d02a\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">acquire</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:abf8aa7ccd48d54dcb53665700a17d02a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4800ba9e743cd91f152036a6689b0e9\"></a>\nbool __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">try_acquire</a> (<a class=\"el\" href=\"a00120.html\">queuing_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>\n<tr class=\"separator:ab4800ba9e743cd91f152036a6689b0e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaa065e48b428b8d43e9bb931ba9e6f6c\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">release</a> ()</td></tr>\n<tr class=\"memdesc:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:aaa065e48b428b8d43e9bb931ba9e6f6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a0afe0107eb0aae613e726f67624d2fca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::queuing_mutex::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00143.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00391.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped lock pattern for write locks.  \n <a href=\"a00143.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00143.png\" usemap=\"#tbb::interface5::reader_writer_lock::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock::scoped_lock_map\" name=\"tbb::interface5::reader_writer_lock::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaed982d8c3f1e84298f9842063694f3c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">scoped_lock</a> (<a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> &amp;<a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>)</td></tr>\n<tr class=\"memdesc:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct with blocking attempt to acquire write lock on the passed-in lock. <br/></td></tr>\n<tr class=\"separator:aaed982d8c3f1e84298f9842063694f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a41e77cf094ed30b0a9a39ee217c3653b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor, releases the write lock. <br/></td></tr>\n<tr class=\"separator:a41e77cf094ed30b0a9a39ee217c3653b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bca00f4788ed8f635a8383a25a10ec8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5bca00f4788ed8f635a8383a25a10ec8\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t s)</td></tr>\n<tr class=\"separator:a5bca00f4788ed8f635a8383a25a10ec8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3ef0de25ee6d7897198fcf09471bf24f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3ef0de25ee6d7897198fcf09471bf24f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *p)</td></tr>\n<tr class=\"separator:a3ef0de25ee6d7897198fcf09471bf24f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afb01bc2e211c782503ef5088003f120f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb01bc2e211c782503ef5088003f120f\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock</b></td></tr>\n<tr class=\"separator:afb01bc2e211c782503ef5088003f120f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped lock pattern for write locks. </p>\n<p>Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00144.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00320.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00144.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00144.png\" usemap=\"#tbb::spin_rw_mutex_v3::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::spin_rw_mutex_v3::scoped_lock_map\" name=\"tbb::spin_rw_mutex_v3::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a285b355121772c874a7ecaaf4d347224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a285b355121772c874a7ecaaf4d347224\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a285b355121772c874a7ecaaf4d347224\">More...</a><br/></td></tr>\n<tr class=\"separator:a285b355121772c874a7ecaaf4d347224\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a2e15358575f7651446bca13a5a2674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a2e15358575f7651446bca13a5a2674\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a0a2e15358575f7651446bca13a5a2674\">scoped_lock</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a0a2e15358575f7651446bca13a5a2674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a0a2e15358575f7651446bca13a5a2674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5c27ca2e0c9db960a9a7430082ff7edd\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a5c27ca2e0c9db960a9a7430082ff7edd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6d49df365396ab314e78ba07c6b96433\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6d49df365396ab314e78ba07c6b96433\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a6d49df365396ab314e78ba07c6b96433\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a6d49df365396ab314e78ba07c6b96433\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer</a> ()</td></tr>\n<tr class=\"memdesc:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upgrade reader to become a writer.  <a href=\"#afbe5de57eadc457518df7a1bb0d30c00\">More...</a><br/></td></tr>\n<tr class=\"separator:afbe5de57eadc457518df7a1bb0d30c00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99e279a995a51abfb87b865e886949f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a99e279a995a51abfb87b865e886949f8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release</a> ()</td></tr>\n<tr class=\"memdesc:a99e279a995a51abfb87b865e886949f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a99e279a995a51abfb87b865e886949f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa693c05221d977856a98270a255fe5df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa693c05221d977856a98270a255fe5df\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader</a> ()</td></tr>\n<tr class=\"memdesc:aa693c05221d977856a98270a255fe5df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Downgrade writer to become a reader. <br/></td></tr>\n<tr class=\"separator:aa693c05221d977856a98270a255fe5df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf17ada91882fd70f139c503c0220f16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abf17ada91882fd70f139c503c0220f16\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire</a> (<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:abf17ada91882fd70f139c503c0220f16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:abf17ada91882fd70f139c503c0220f16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8d70c5a2348e30a6979bfbf677328dc4\"></a>\n<a class=\"el\" href=\"a00155.html\">spin_rw_mutex</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">mutex</a></td></tr>\n<tr class=\"memdesc:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The pointer to the current mutex that is held, or NULL if no mutex is held. <br/></td></tr>\n<tr class=\"separator:a8d70c5a2348e30a6979bfbf677328dc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfd129dc5106ad1129ba803e67311050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a></td></tr>\n<tr class=\"memdesc:acfd129dc5106ad1129ba803e67311050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href=\"#acfd129dc5106ad1129ba803e67311050\">More...</a><br/></td></tr>\n<tr class=\"separator:acfd129dc5106ad1129ba803e67311050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ad3297bb1f91f2e12c4f3fb3e68f135bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad3297bb1f91f2e12c4f3fb3e68f135bb\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b></td></tr>\n<tr class=\"separator:ad3297bb1f91f2e12c4f3fb3e68f135bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a285b355121772c874a7ecaaf4d347224\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"afbe5de57eadc457518df7a1bb0d30c00\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Upgrade reader to become a writer. </p>\n<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>\n\n<p>References <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"acfd129dc5106ad1129ba803e67311050\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::scoped_lock::is_writer</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. </p>\n<p>Not defined if not holding a lock. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire()</a>, <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader()</a>, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release()</a>, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire()</a>, and <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00145.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00297.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00145.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00145.png\" usemap=\"#tbb::null_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::null_mutex::scoped_lock_map\" name=\"tbb::null_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:af71834d1fc4c7406595e9df5b43ab7bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af71834d1fc4c7406595e9df5b43ab7bb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:af71834d1fc4c7406595e9df5b43ab7bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d541c92b1678a7dde6a45783a02160f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7d541c92b1678a7dde6a45783a02160f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>acquire</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:a7d541c92b1678a7dde6a45783a02160f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5d4d5a4182091ea13fb5d38667f6449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5d4d5a4182091ea13fb5d38667f6449\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_acquire</b> (<a class=\"el\" href=\"a00099.html\">null_mutex</a> &amp;)</td></tr>\n<tr class=\"separator:ac5d4d5a4182091ea13fb5d38667f6449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21f848f83dfa6504381e3da4de7a9e00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a21f848f83dfa6504381e3da4de7a9e00\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a21f848f83dfa6504381e3da4de7a9e00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00146.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::critical_section_v4::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00418.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::critical_section_v4::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00146.png\" usemap=\"#tbb::internal::critical_section_v4::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::internal::critical_section_v4::scoped_lock_map\" name=\"tbb::internal::critical_section_v4::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a3d2a294e9d790bdeba9ca3ff60e75d53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3d2a294e9d790bdeba9ca3ff60e75d53\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00064.html\">critical_section_v4</a> &amp;lock_me)</td></tr>\n<tr class=\"separator:a3d2a294e9d790bdeba9ca3ff60e75d53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>critical_section.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00147.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::recursive_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00312.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00147.html#details\">More...</a></p>\n\n<p><code>#include &lt;recursive_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::recursive_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00147.png\" usemap=\"#tbb::recursive_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::recursive_mutex::scoped_lock_map\" name=\"tbb::recursive_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a9962a3932cfbd0d12cb197494f951b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a0a9962a3932cfbd0d12cb197494f951b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab42cb541abb9647cac23b1db9a4db93d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#ab42cb541abb9647cac23b1db9a4db93d\">scoped_lock</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab42cb541abb9647cac23b1db9a4db93d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a90a966e19120aac99b36a3d6d04af1a2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a90a966e19120aac99b36a3d6d04af1a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5450ce6a5813f395afaa434384c6539\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac5450ce6a5813f395afaa434384c6539\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">acquire</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ac5450ce6a5813f395afaa434384c6539\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ac5450ce6a5813f395afaa434384c6539\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a160bba506f4033980ddb69ab7a02c4fb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">try_acquire</a> (<a class=\"el\" href=\"a00135.html\">recursive_mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given <a class=\"el\" href=\"a00135.html\" title=\"Mutex that allows recursive mutex acquisition. \">recursive_mutex</a>. <br/></td></tr>\n<tr class=\"separator:a160bba506f4033980ddb69ab7a02c4fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe3246ffc26bdb5a58f33ca513b6c0f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">release</a> ()</td></tr>\n<tr class=\"memdesc:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a2fe3246ffc26bdb5a58f33ca513b6c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a1bdb637fe5c9412323bf92846b40682e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1bdb637fe5c9412323bf92846b40682e\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>recursive_mutex</b></td></tr>\n<tr class=\"separator:a1bdb637fe5c9412323bf92846b40682e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>recursive_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00148.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00318.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00148.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00148.png\" usemap=\"#tbb::spin_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::spin_mutex::scoped_lock_map\" name=\"tbb::spin_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4287be975cf2448c95f068b065c45107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4287be975cf2448c95f068b065c45107\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a4287be975cf2448c95f068b065c45107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct without acquiring a mutex. <br/></td></tr>\n<tr class=\"separator:a4287be975cf2448c95f068b065c45107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a73f7381a9a112b9f5a856b1face525fb\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a73f7381a9a112b9f5a856b1face525fb\">scoped_lock</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct and acquire lock on a mutex. <br/></td></tr>\n<tr class=\"separator:a73f7381a9a112b9f5a856b1face525fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7c702117f08ae82d034a98b3d5510ffc\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">acquire</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a7c702117f08ae82d034a98b3d5510ffc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">try_acquire</a> (<a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;m)</td></tr>\n<tr class=\"memdesc:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a76acbd67c74906f6ea33a1de6fd443ce\">More...</a><br/></td></tr>\n<tr class=\"separator:a76acbd67c74906f6ea33a1de6fd443ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7e801b0c28fd8395fec400b96acc5c34\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">release</a> ()</td></tr>\n<tr class=\"memdesc:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a7e801b0c28fd8395fec400b96acc5c34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9940d6e494466d9c53846ed347d79d83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9940d6e494466d9c53846ed347d79d83\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a9940d6e494466d9c53846ed347d79d83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy lock. If holding a lock, releases the lock first. <br/></td></tr>\n<tr class=\"separator:a9940d6e494466d9c53846ed347d79d83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:adf989c33fa5ee03e75925c2d0f86b89e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adf989c33fa5ee03e75925c2d0f86b89e\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_mutex</b></td></tr>\n<tr class=\"separator:adf989c33fa5ee03e75925c2d0f86b89e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a76acbd67c74906f6ea33a1de6fd443ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_mutex::scoped_lock::try_acquire </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a> &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00149.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::queuing_rw_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00310.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00149.html#details\">More...</a></p>\n\n<p><code>#include &lt;queuing_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::queuing_rw_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00149.png\" usemap=\"#tbb::queuing_rw_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::queuing_rw_mutex::scoped_lock_map\" name=\"tbb::queuing_rw_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex.  <a href=\"#a1ae3792726dcff8da1f2c5366fb2b754\">More...</a><br/></td></tr>\n<tr class=\"separator:a1ae3792726dcff8da1f2c5366fb2b754\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1b55ca1839c9c7c2cd779cd2dd9c474\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">scoped_lock</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:af1b55ca1839c9c7c2cd779cd2dd9c474\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cb16cc55f884bbbd5a69430c47b288f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a6cb16cc55f884bbbd5a69430c47b288f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab4bf2fb86d6a418f9ea36474eb8893f9\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">acquire</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab4bf2fb86d6a418f9ea36474eb8893f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4843d40dddc37c1aa3444e27d35d2433\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">try_acquire</a> (<a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>\n<tr class=\"memdesc:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex if free (i.e. non-blocking) <br/></td></tr>\n<tr class=\"separator:a4843d40dddc37c1aa3444e27d35d2433\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50fb02b77f02a01c74754d163157ec77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a50fb02b77f02a01c74754d163157ec77\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">release</a> ()</td></tr>\n<tr class=\"memdesc:a50fb02b77f02a01c74754d163157ec77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a50fb02b77f02a01c74754d163157ec77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">upgrade_to_writer</a> ()</td></tr>\n<tr class=\"memdesc:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Upgrade reader to become a writer.  <a href=\"#ae0f28ecfbbc5f8b3024cd47048b72b5b\">More...</a><br/></td></tr>\n<tr class=\"separator:ae0f28ecfbbc5f8b3024cd47048b72b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0af63035147a3d8422f8c8d7b8d2629\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">downgrade_to_reader</a> ()</td></tr>\n<tr class=\"memdesc:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Downgrade writer to become a reader. <br/></td></tr>\n<tr class=\"separator:af0af63035147a3d8422f8c8d7b8d2629\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a1ae3792726dcff8da1f2c5366fb2b754\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct lock that has not acquired a mutex. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ae0f28ecfbbc5f8b3024cd47048b72b5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Upgrade reader to become a writer. </p>\n<p>Returns whether the upgrade happened without releasing and re-acquiring the lock </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>queuing_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00150.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00295.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped locking pattern.  \n <a href=\"a00150.html#details\">More...</a></p>\n\n<p><code>#include &lt;mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00150.png\" usemap=\"#tbb::mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::mutex::scoped_lock_map\" name=\"tbb::mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a23122745ccd5fc2498fcbbd5ced09e06\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct lock that has not acquired a mutex. <br/></td></tr>\n<tr class=\"separator:a23122745ccd5fc2498fcbbd5ced09e06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7c2074543443824790433d3d6c3fece\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab7c2074543443824790433d3d6c3fece\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#ab7c2074543443824790433d3d6c3fece\">scoped_lock</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:ab7c2074543443824790433d3d6c3fece\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:ab7c2074543443824790433d3d6c3fece\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a08c399ee0bb9762039b29e570ec46fe9\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">~scoped_lock</a> ()</td></tr>\n<tr class=\"memdesc:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock (if lock is held). <br/></td></tr>\n<tr class=\"separator:a08c399ee0bb9762039b29e570ec46fe9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9fce3e2e9f592315dc9c1ada72ae5e3c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">acquire</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a9fce3e2e9f592315dc9c1ada72ae5e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a46f983371aa852d2427ce69f9a571f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a46f983371aa852d2427ce69f9a571f78\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">try_acquire</a> (<a class=\"el\" href=\"a00097.html\">mutex</a> &amp;<a class=\"el\" href=\"a00097.html\">mutex</a>)</td></tr>\n<tr class=\"memdesc:a46f983371aa852d2427ce69f9a571f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquire lock on given mutex. <br/></td></tr>\n<tr class=\"separator:a46f983371aa852d2427ce69f9a571f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a1590281ccca912229a689d920fd78a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a1590281ccca912229a689d920fd78a\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">release</a> ()</td></tr>\n<tr class=\"memdesc:a1a1590281ccca912229a689d920fd78a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:a1a1590281ccca912229a689d920fd78a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6f4535025b9df015e1a7d35f4e2bbee7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6f4535025b9df015e1a7d35f4e2bbee7\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mutex</b></td></tr>\n<tr class=\"separator:a6f4535025b9df015e1a7d35f4e2bbee7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped locking pattern. </p>\n<p>It helps to avoid the common problem of forgetting to release lock. It also nicely provides the \"node\" for queuing locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00151.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::null_rw_mutex::scoped_lock Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00299.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex::scoped_lock Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Represents acquisition of a mutex.  \n <a href=\"a00151.html#details\">More...</a></p>\n\n<p><code>#include &lt;null_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::null_rw_mutex::scoped_lock:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00151.png\" usemap=\"#tbb::null_rw_mutex::scoped_lock_map\" alt=\"\"/>\n  <map id=\"tbb::null_rw_mutex::scoped_lock_map\" name=\"tbb::null_rw_mutex::scoped_lock_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b7f9a3976c7744a96e435e027c6262c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b7f9a3976c7744a96e435e027c6262c\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:a4b7f9a3976c7744a96e435e027c6262c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a251d45c5c42ac6c6006d0463c2173bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a251d45c5c42ac6c6006d0463c2173bc8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>acquire</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:a251d45c5c42ac6c6006d0463c2173bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07ed8c0c225fec43b96dcec5b4d4380d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a07ed8c0c225fec43b96dcec5b4d4380d\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>upgrade_to_writer</b> ()</td></tr>\n<tr class=\"separator:a07ed8c0c225fec43b96dcec5b4d4380d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a899c14f8d077edd2fe7925bb82a94686\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a899c14f8d077edd2fe7925bb82a94686\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>downgrade_to_reader</b> ()</td></tr>\n<tr class=\"separator:a899c14f8d077edd2fe7925bb82a94686\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdb10af455fa8730b1a9bc8d5ca16c41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afdb10af455fa8730b1a9bc8d5ca16c41\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_acquire</b> (<a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> &amp;, bool=true)</td></tr>\n<tr class=\"separator:afdb10af455fa8730b1a9bc8d5ca16c41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57d0613ea1614fe9c7daa0706e56efab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a57d0613ea1614fe9c7daa0706e56efab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>release</b> ()</td></tr>\n<tr class=\"separator:a57d0613ea1614fe9c7daa0706e56efab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Represents acquisition of a mutex. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>null_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00152.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00392.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The scoped lock pattern for read locks.  \n <a href=\"a00152.html#details\">More...</a></p>\n\n<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock_read:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00152.png\" usemap=\"#tbb::interface5::reader_writer_lock::scoped_lock_read_map\" alt=\"\"/>\n  <map id=\"tbb::interface5::reader_writer_lock::scoped_lock_read_map\" name=\"tbb::interface5::reader_writer_lock::scoped_lock_read_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9d3120a23016dabd4cc2683fa561ee5a\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">scoped_lock_read</a> (<a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> &amp;<a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>)</td></tr>\n<tr class=\"memdesc:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct with blocking attempt to acquire read lock on the passed-in lock. <br/></td></tr>\n<tr class=\"separator:a9d3120a23016dabd4cc2683fa561ee5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf0e23fb4d3aeb6bde18d5d1236bd9d5\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">~scoped_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor, releases the read lock. <br/></td></tr>\n<tr class=\"separator:acf0e23fb4d3aeb6bde18d5d1236bd9d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9eb8c7a64912a1c74ea76a01a20a1621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9eb8c7a64912a1c74ea76a01a20a1621\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t s)</td></tr>\n<tr class=\"separator:a9eb8c7a64912a1c74ea76a01a20a1621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a6c15dfdbe1bc7a6648ed836ebd8de6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a6c15dfdbe1bc7a6648ed836ebd8de6\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *p)</td></tr>\n<tr class=\"separator:a1a6c15dfdbe1bc7a6648ed836ebd8de6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afb01bc2e211c782503ef5088003f120f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb01bc2e211c782503ef5088003f120f\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock</b></td></tr>\n<tr class=\"separator:afb01bc2e211c782503ef5088003f120f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The scoped lock pattern for read locks. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>reader_writer_lock.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00153.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::sender&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00153.html\">sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00343.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::sender&lt; T &gt; Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Forward declaration section.  \n <a href=\"a00153.html#details\">More...</a></p>\n\n<p><code>#include &lt;flow_graph.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::sender&lt; T &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00153.png\" usemap=\"#tbb::flow::interface10::sender&lt; T &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::sender&lt; T &gt;_map\" name=\"tbb::flow::interface10::sender&lt; T &gt;_map\">\n<area href=\"a00179.html\" alt=\"tbb::flow::interface10::internal::untyped_sender\" shape=\"rect\" coords=\"0,0,273,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20d6033fb4111199cf5e86b0bab955be\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a></td></tr>\n<tr class=\"memdesc:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The output type of this sender. <br/></td></tr>\n<tr class=\"separator:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c80af8f5073a43d576c8140e67cebf9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4c80af8f5073a43d576c8140e67cebf9\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00023.html\">internal::async_helpers</a>&lt; T &gt;<br class=\"typebreak\"/>\n::<a class=\"el\" href=\"a00062.html\">filtered_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>filtered_type</b></td></tr>\n<tr class=\"separator:a4c80af8f5073a43d576c8140e67cebf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20d6033fb4111199cf5e86b0bab955be\"></a>\ntypedef T&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a></td></tr>\n<tr class=\"memdesc:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The output type of this sender. <br/></td></tr>\n<tr class=\"separator:a20d6033fb4111199cf5e86b0bab955be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af40d268fffdc3c6b8bca87aa0c49c016\"></a>\ntypedef <a class=\"el\" href=\"a00133.html\">receiver</a>&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">successor_type</a></td></tr>\n<tr class=\"memdesc:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:af40d268fffdc3c6b8bca87aa0c49c016\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fc0721b7adea4fc3eea480066fcaab1\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:a5fc0721b7adea4fc3eea480066fcaab1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac200261e6534ca73fec6d3eb920e18c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac200261e6534ca73fec6d3eb920e18c2\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:ac200261e6534ca73fec6d3eb920e18c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_types_a00179\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_types_a00179')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Types inherited from <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"memitem:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abaf68da3fb70e918f608d49d19d21861\"></a>\ntypedef <a class=\"el\" href=\"a00178.html\">untyped_receiver</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a></td></tr>\n<tr class=\"memdesc:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:abaf68da3fb70e918f608d49d19d21861 inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa17d0e3c683db8ee91589546f00e74d3\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:aa17d0e3c683db8ee91589546f00e74d3 inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf9e1bebbdb2359b70e651d375f49be inherit pub_types_a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf9e1bebbdb2359b70e651d375f49be\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:a5cf9e1bebbdb2359b70e651d375f49be inherit pub_types_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6881b9c5dc024a34ed72b0ffc567083a\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1006dd4583ea4049888c15810c8cb98f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad400086a57cb5efd351dbef833f208fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad400086a57cb5efd351dbef833f208fa\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">register_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:ad400086a57cb5efd351dbef833f208fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a new successor to this node. <br/></td></tr>\n<tr class=\"separator:ad400086a57cb5efd351dbef833f208fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a073d7519ae90412ace6cfda4f86dc0d7\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">remove_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Removes a successor from this node. <br/></td></tr>\n<tr class=\"separator:a073d7519ae90412ace6cfda4f86dc0d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6881b9c5dc024a34ed72b0ffc567083a\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a6881b9c5dc024a34ed72b0ffc567083a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1006dd4583ea4049888c15810c8cb98f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a> (T &amp;)</td></tr>\n<tr class=\"memdesc:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:a1006dd4583ea4049888c15810c8cb98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adc1d83d8b2c81d3905e545b05373f5aa\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">try_release</a> ()</td></tr>\n<tr class=\"memdesc:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the reserved item. <br/></td></tr>\n<tr class=\"separator:adc1d83d8b2c81d3905e545b05373f5aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad394242fdfaef49f4be80dc3b113b92d\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">try_consume</a> ()</td></tr>\n<tr class=\"memdesc:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Consumes the reserved item. <br/></td></tr>\n<tr class=\"separator:ad394242fdfaef49f4be80dc3b113b92d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed19a0d1b36c31bc9421ee8c7aaed08e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed19a0d1b36c31bc9421ee8c7aaed08e\"></a>\nvirtual <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_successors</b> ()=0</td></tr>\n<tr class=\"separator:aed19a0d1b36c31bc9421ee8c7aaed08e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42bc3042f4bc13670a48b7f8316efd19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a42bc3042f4bc13670a48b7f8316efd19\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a42bc3042f4bc13670a48b7f8316efd19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d7c005f9cc4d3697b663216f886bfcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d7c005f9cc4d3697b663216f886bfcc\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a5d7c005f9cc4d3697b663216f886bfcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1d76bf33a62fe61b3798dc43ad5bc04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab1d76bf33a62fe61b3798dc43ad5bc04\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_successors</b> (successor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:ab1d76bf33a62fe61b3798dc43ad5bc04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16f06fb1ae8e1dcdd4a5d7733e44a059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a16f06fb1ae8e1dcdd4a5d7733e44a059\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_count</b> ()=0</td></tr>\n<tr class=\"separator:a16f06fb1ae8e1dcdd4a5d7733e44a059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a1ff65ffb8cd89587e25d466e1bf656b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1ff65ffb8cd89587e25d466e1bf656b3\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_get_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:a1ff65ffb8cd89587e25d466e1bf656b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a60e16b7b038edfbf3efba16eb74c095c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60e16b7b038edfbf3efba16eb74c095c\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_reserve_wrapper</b> (void *p, bool is_async) __TBB_override</td></tr>\n<tr class=\"separator:a60e16b7b038edfbf3efba16eb74c095c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_methods_a00179\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00179')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a41064c305f60fb0431b914573b070615\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a41064c305f60fb0431b914573b070615 inherit pro_methods_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac92c0a8321811fe2a76310f423b7c2ef\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:ac92c0a8321811fe2a76310f423b7c2ef inherit pro_methods_a00179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::flow::interface10::sender&lt; T &gt;</h3>\n\n<p>Forward declaration section. </p>\n<p>Pure virtual template class that defines a sender of messages of type T. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00154.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_mutex Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00317.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A lock that occupies a single byte.  \n <a href=\"a00154.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_mutex:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00154.png\" usemap=\"#tbb::spin_mutex_map\" alt=\"\"/>\n  <map id=\"tbb::spin_mutex_map\" name=\"tbb::spin_mutex_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Represents acquisition of a mutex.  <a href=\"a00148.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a6c96196965bf7df426311d282ad3c378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">spin_mutex</a> ()</td></tr>\n<tr class=\"memdesc:a6c96196965bf7df426311d282ad3c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired lock.  <a href=\"#a6c96196965bf7df426311d282ad3c378\">More...</a><br/></td></tr>\n<tr class=\"separator:a6c96196965bf7df426311d282ad3c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ec484f4df6ec5595ec821ef20bd6cd7\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct</a> ()</td></tr>\n<tr class=\"memdesc:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Internal constructor with ITT instrumentation. <br/></td></tr>\n<tr class=\"separator:a4ec484f4df6ec5595ec821ef20bd6cd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8957e40b0781192419d01d28e5205ec4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8957e40b0781192419d01d28e5205ec4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a8957e40b0781192419d01d28e5205ec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire lock. <br/></td></tr>\n<tr class=\"separator:a8957e40b0781192419d01d28e5205ec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring lock (non-blocking)  <a href=\"#a003ffb196d22bf22ca22142338b7eeab\">More...</a><br/></td></tr>\n<tr class=\"separator:a003ffb196d22bf22ca22142338b7eeab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"adfcf8fe840aa73c08c2cadd570fd48fd\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:adfcf8fe840aa73c08c2cadd570fd48fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a7c3354db4bd5cc81bccee9f249abb9e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7c3354db4bd5cc81bccee9f249abb9e8\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = false</td></tr>\n<tr class=\"separator:a7c3354db4bd5cc81bccee9f249abb9e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0cae048c5dc5deffe75464e4a3a2b752\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0cae048c5dc5deffe75464e4a3a2b752\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a0cae048c5dc5deffe75464e4a3a2b752\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad00ec9a97f34c9160300950b36deac3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad00ec9a97f34c9160300950b36deac3e\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:ad00ec9a97f34c9160300950b36deac3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afcf922650b2fd9d76b7b939d8511bbd8\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>scoped_lock</b></td></tr>\n<tr class=\"separator:afcf922650b2fd9d76b7b939d8511bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A lock that occupies a single byte. </p>\n<p>A <a class=\"el\" href=\"a00154.html\" title=\"A lock that occupies a single byte. \">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a6c96196965bf7df426311d282ad3c378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::spin_mutex::spin_mutex </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct unacquired lock. </p>\n<p>Equivalent to zero-initialization of *this. </p>\n\n<p>References <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct()</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a003ffb196d22bf22ca22142338b7eeab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_mutex::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n<p>References <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;::begin()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00155.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::spin_rw_mutex_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#pro-types\">Protected Types</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#pro-static-attribs\">Static Protected Attributes</a> &#124;\n<a href=\"a00319.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3 Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00274.html\">Synchronization</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  \n <a href=\"a00155.html#details\">More...</a></p>\n\n<p><code>#include &lt;spin_rw_mutex.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::spin_rw_mutex_v3:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00155.png\" usemap=\"#tbb::spin_rw_mutex_v3_map\" alt=\"\"/>\n  <map id=\"tbb::spin_rw_mutex_v3_map\" name=\"tbb::spin_rw_mutex_v3_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The scoped locking pattern.  <a href=\"a00144.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad30fc1ffa0a2b8134e177e02c5821d7f\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">spin_rw_mutex_v3</a> ()</td></tr>\n<tr class=\"memdesc:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct unacquired mutex. <br/></td></tr>\n<tr class=\"separator:ad30fc1ffa0a2b8134e177e02c5821d7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc7cf2e4b14d3a2a591a3552d74ba99d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">~spin_rw_mutex_v3</a> ()</td></tr>\n<tr class=\"memdesc:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor asserts if the mutex is acquired, i.e. state is zero. <br/></td></tr>\n<tr class=\"separator:acc7cf2e4b14d3a2a591a3552d74ba99d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a51e207646300a4c242bb4aaa4e04e9b8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">lock</a> ()</td></tr>\n<tr class=\"memdesc:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire writer lock. <br/></td></tr>\n<tr class=\"separator:a51e207646300a4c242bb4aaa4e04e9b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">try_lock</a> ()</td></tr>\n<tr class=\"memdesc:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring writer lock (non-blocking)  <a href=\"#ab6ec20b1ec43a49c8c2908984e35b5e8\">More...</a><br/></td></tr>\n<tr class=\"separator:ab6ec20b1ec43a49c8c2908984e35b5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab04321ed2cdf12ac5825c54591028fc0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock</a> ()</td></tr>\n<tr class=\"memdesc:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Release lock. <br/></td></tr>\n<tr class=\"separator:ab04321ed2cdf12ac5825c54591028fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa0e3bb644e9021d0f80ee36b03f228e4\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">lock_read</a> ()</td></tr>\n<tr class=\"memdesc:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Acquire reader lock. <br/></td></tr>\n<tr class=\"separator:aa0e3bb644e9021d0f80ee36b03f228e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">try_lock_read</a> ()</td></tr>\n<tr class=\"memdesc:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try acquiring reader lock (non-blocking)  <a href=\"#ac932f65b0b66320688e7957ce9c3e2c1\">More...</a><br/></td></tr>\n<tr class=\"separator:ac932f65b0b66320688e7957ce9c3e2c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:addc8223faacc1bb2cc8626b609ab2c49\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"addc8223faacc1bb2cc8626b609ab2c49\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_rw_mutex</b> = true</td></tr>\n<tr class=\"separator:addc8223faacc1bb2cc8626b609ab2c49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_recursive_mutex</b> = false</td></tr>\n<tr class=\"separator:a7f6aa8fe3e9c7c4ee4cdec6d221ffe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affd403f6e3822589e985a2c23505fbd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"affd403f6e3822589e985a2c23505fbd1\"></a>\nstatic const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_fair_mutex</b> = false</td></tr>\n<tr class=\"separator:affd403f6e3822589e985a2c23505fbd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-types\"></a>\nProtected Types</h2></td></tr>\n<tr class=\"memitem:a27adc7d791dfaa4a60638313b9d1c1f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a27adc7d791dfaa4a60638313b9d1c1f4\"></a>\ntypedef intptr_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>state_t</b></td></tr>\n<tr class=\"separator:a27adc7d791dfaa4a60638313b9d1c1f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">state</a></td></tr>\n<tr class=\"memdesc:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">State of lock.  <a href=\"#aa28625051072472ccd8a2b19405d6fb3\">More...</a><br/></td></tr>\n<tr class=\"separator:aa28625051072472ccd8a2b19405d6fb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-attribs\"></a>\nStatic Protected Attributes</h2></td></tr>\n<tr class=\"memitem:aaeec59dde09fe92be196ecddb480777b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaeec59dde09fe92be196ecddb480777b\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>WRITER</b> = 1</td></tr>\n<tr class=\"separator:aaeec59dde09fe92be196ecddb480777b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b321914828e5e21baf24d58f32c66d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b321914828e5e21baf24d58f32c66d5\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>WRITER_PENDING</b> = 2</td></tr>\n<tr class=\"separator:a5b321914828e5e21baf24d58f32c66d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>READERS</b> = ~(WRITER | WRITER_PENDING)</td></tr>\n<tr class=\"separator:a6cc93cdcf4ad43f6bf8b0f76cde66f9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1386a2fa5979432e4a58b94e68db23f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af1386a2fa5979432e4a58b94e68db23f\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ONE_READER</b> = 4</td></tr>\n<tr class=\"separator:af1386a2fa5979432e4a58b94e68db23f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a811c72bd7e5ad6a3a9161ee05e298c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6a811c72bd7e5ad6a3a9161ee05e298c\"></a>\nstatic const state_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>BUSY</b> = WRITER | READERS</td></tr>\n<tr class=\"separator:a6a811c72bd7e5ad6a3a9161ee05e298c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Fast, unfair, spinning reader-writer lock with backoff and writer-preference. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ab6ec20b1ec43a49c8c2908984e35b5e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::try_lock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring writer lock (non-blocking) </p>\n<p>Return true if lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac932f65b0b66320688e7957ce9c3e2c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::spin_rw_mutex_v3::try_lock_read </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try acquiring reader lock (non-blocking) </p>\n<p>Return true if reader lock acquired; false otherwise. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a class=\"anchor\" id=\"aa28625051072472ccd8a2b19405d6fb3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">state_t tbb::spin_rw_mutex_v3::state</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>State of lock. </p>\n<p>Bit 0 = writer is holding lock Bit 1 = request by a writer to acquire lock (hint to readers to wait) Bit 2..N = number of readers holding lock </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock::release()</a>, and <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>spin_rw_mutex.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::structured_task_group Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00323.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::structured_task_group Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::structured_task_group:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00156.png\" usemap=\"#tbb::structured_task_group_map\" alt=\"\"/>\n  <map id=\"tbb::structured_task_group_map\" name=\"tbb::structured_task_group_map\">\n<area href=\"a00160.html\" alt=\"tbb::internal::task_group_base\" shape=\"rect\" coords=\"0,56,179,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab6812c9b682cec4b1a93da169b6fffc7\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:ab6812c9b682cec4b1a93da169b6fffc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0578ff577290a108d395ab29a0a04e04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0578ff577290a108d395ab29a0a04e04\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a0578ff577290a108d395ab29a0a04e04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00157.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::successor_cache&lt; T, M &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00157.html\">successor_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00158.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface7::task_arena Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00414.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;task_arena.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface7::task_arena:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00158.png\" usemap=\"#tbb::interface7::task_arena_map\" alt=\"\"/>\n  <map id=\"tbb::interface7::task_arena_map\" name=\"tbb::interface7::task_arena_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">attach</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Tag class used to indicate the \"attaching\" constructor.  <a href=\"a00029.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">task_arena</a> (int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td></tr>\n<tr class=\"memdesc:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates <a class=\"el\" href=\"a00158.html\">task_arena</a> with certain concurrency limits.  <a href=\"#abe92eac81ca849b110de69e6efd0e5aa\">More...</a><br/></td></tr>\n<tr class=\"separator:abe92eac81ca849b110de69e6efd0e5aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a70d122b3e6e4760c6053c5c230c715ef\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a70d122b3e6e4760c6053c5c230c715ef\">task_arena</a> (const <a class=\"el\" href=\"a00158.html\">task_arena</a> &amp;s)</td></tr>\n<tr class=\"memdesc:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copies settings from another <a class=\"el\" href=\"a00158.html\">task_arena</a>. <br/></td></tr>\n<tr class=\"separator:a70d122b3e6e4760c6053c5c230c715ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a84dfcfd70fd08d383b8d4e8b96fa4a0d\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d\">task_arena</a> (<a class=\"el\" href=\"a00029.html\">attach</a>)</td></tr>\n<tr class=\"memdesc:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an instance of <a class=\"el\" href=\"a00158.html\">task_arena</a> attached to the current arena of the thread. <br/></td></tr>\n<tr class=\"separator:a84dfcfd70fd08d383b8d4e8b96fa4a0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a955131a79f8dc5a0a5c9ffa66a7e7140\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">initialize</a> ()</td></tr>\n<tr class=\"memdesc:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forces allocation of the resources for the <a class=\"el\" href=\"a00158.html\">task_arena</a> as specified in constructor arguments. <br/></td></tr>\n<tr class=\"separator:a955131a79f8dc5a0a5c9ffa66a7e7140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7986309715cf224f5320dc06ee7d335\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae7986309715cf224f5320dc06ee7d335\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ae7986309715cf224f5320dc06ee7d335\">initialize</a> (int max_concurrency_, unsigned reserved_for_masters=1)</td></tr>\n<tr class=\"memdesc:ae7986309715cf224f5320dc06ee7d335\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Overrides concurrency level and forces initialization of internal representation. <br/></td></tr>\n<tr class=\"separator:ae7986309715cf224f5320dc06ee7d335\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aace9ac1366eb3e0ec921da11699ba236\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">initialize</a> (<a class=\"el\" href=\"a00029.html\">attach</a>)</td></tr>\n<tr class=\"memdesc:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attaches this instance to the current arena of the thread. <br/></td></tr>\n<tr class=\"separator:aace9ac1366eb3e0ec921da11699ba236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecb3eedeacfe8469a91c17525dae7fc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">terminate</a> ()</td></tr>\n<tr class=\"separator:aecb3eedeacfe8469a91c17525dae7fc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ff5a35a219953a4f3d99b833fa5f683\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">~task_arena</a> ()</td></tr>\n<tr class=\"separator:a9ff5a35a219953a4f3d99b833fa5f683\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad85856cefa30d42155a2b122b03efd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">is_active</a> () const </td></tr>\n<tr class=\"separator:ad85856cefa30d42155a2b122b03efd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab183022f20a7f622b581729e56c585a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ab183022f20a7f622b581729e56c585a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">enqueue</a> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:ab183022f20a7f622b581729e56c585a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8034275ed2fffa68f70484043b90d406\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8034275ed2fffa68f70484043b90d406\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8034275ed2fffa68f70484043b90d406\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>enqueue</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a8034275ed2fffa68f70484043b90d406\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">enqueue</a> (F &amp;&amp;f, priority_t p)</td></tr>\n<tr class=\"separator:a0c8d4caa8f2902cf06100cc926347bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734b8ce1d75d735736d0fd5b47a74092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a734b8ce1d75d735736d0fd5b47a74092\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enqueue</b> (const F &amp;f, priority_t p)</td></tr>\n<tr class=\"separator:a734b8ce1d75d735736d0fd5b47a74092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">internal::return_type_or_void<br class=\"typebreak\"/>\n&lt; F &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute</a> (F &amp;f)</td></tr>\n<tr class=\"separator:ad6e39e1bd277960c1d1d3637e9ba3501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">internal::return_type_or_void<br class=\"typebreak\"/>\n&lt; F &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">execute</a> (const F &amp;f)</td></tr>\n<tr class=\"separator:a9ff5c301ba9f7121bb0ace48a8c387f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a07d87dff8c6116ee349684e10f754aeb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">debug_wait_until_empty</a> ()</td></tr>\n<tr class=\"separator:a07d87dff8c6116ee349684e10f754aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2977b0fba9253e6cab31570f4992c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2977b0fba9253e6cab31570f4992c998\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">max_concurrency</a> () const </td></tr>\n<tr class=\"memdesc:a2977b0fba9253e6cab31570f4992c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximal number of threads that can work inside the arena. <br/></td></tr>\n<tr class=\"separator:a2977b0fba9253e6cab31570f4992c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:af695a8aa3d2a4f498067c662e287dd8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">current_thread_index</a> ()</td></tr>\n<tr class=\"separator:af695a8aa3d2a4f498067c662e287dd8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a6887d06dd0f104ab6c06fdddca4d2471\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6887d06dd0f104ab6c06fdddca4d2471\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>\n<tr class=\"separator:a6887d06dd0f104ab6c06fdddca4d2471\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a591c8245104c8eeade3e577df3951feb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a591c8245104c8eeade3e577df3951feb\"></a>\nint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::this_task_arena::max_concurrency</b> ()</td></tr>\n<tr class=\"separator:a591c8245104c8eeade3e577df3951feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>1-to-1 proxy representation class of scheduler's arena Constructors set up settings only, real construction is deferred till the first method invocation Destructor only removes one of the references to the inner arena representation. Final destruction happens when all the references (and the work) are gone. </p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"abe92eac81ca849b110de69e6efd0e5aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface7::task_arena::task_arena </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>max_concurrency_</em> = <code>automatic</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned&#160;</td>\n          <td class=\"paramname\"><em>reserved_for_masters</em> = <code>1</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates <a class=\"el\" href=\"a00158.html\">task_arena</a> with certain concurrency limits. </p>\n<p>Sets up settings only, real construction is deferred till the first method invocation </p>\n<ul>\n<li>max_concurrency specifies total number of slots in arena where threads work </li>\n<li>reserved_for_masters specifies number of slots to be used by master threads only. Value of 1 is default and reflects behavior of implicit arenas. </li>\n</ul>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ff5a35a219953a4f3d99b833fa5f683\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface7::task_arena::~task_arena </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Removes the reference to the internal arena representation, and destroys the external object. Not thread safe wrt concurrent invocations of other methods. </p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"af695a8aa3d2a4f498067c662e287dd8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static int tbb::interface7::task_arena::current_thread_index </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns the index, aka slot number, of the calling thread in its current arena This method is deprecated and replaced with this_task_arena::current_thread_index() </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a07d87dff8c6116ee349684e10f754aeb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::debug_wait_until_empty </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Wait for all work in the arena to be completed Even submitted by other application threads Joins arena if/when possible (in the same way as <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute()</a>) </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab183022f20a7f622b581729e56c585a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::enqueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Enqueues a task into the arena to process a functor, and immediately returns. Does not require the calling thread to join the arena </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0c8d4caa8f2902cf06100cc926347bee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::enqueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">priority_t&#160;</td>\n          <td class=\"paramname\"><em>p</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Enqueues a task with priority p into the arena to process a functor f, and immediately returns. Does not require the calling thread to join the arena </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad6e39e1bd277960c1d1d3637e9ba3501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">internal::return_type_or_void&lt;F&gt;::type tbb::interface7::task_arena::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">F &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Joins the arena and executes a mutable functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ff5c301ba9f7121bb0ace48a8c387f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">internal::return_type_or_void&lt;F&gt;::type tbb::interface7::task_arena::execute </td>\n          <td>(</td>\n          <td class=\"paramtype\">const F &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Joins the arena and executes a constant functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad85856cefa30d42155a2b122b03efd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool tbb::interface7::task_arena::is_active </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td> const</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Returns true if the arena is active (initialized); false otherwise. The name was chosen to match a <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> method with the same semantics. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aecb3eedeacfe8469a91c17525dae7fc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface7::task_arena::terminate </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Removes the reference to the internal arena representation. Not thread safe wrt concurrent invocations of other methods. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_arena.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00159.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_group Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00159.html\">task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00322.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_group:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00159.png\" usemap=\"#tbb::task_group_map\" alt=\"\"/>\n  <map id=\"tbb::task_group_map\" name=\"tbb::task_group_map\">\n<area href=\"a00160.html\" alt=\"tbb::internal::task_group_base\" shape=\"rect\" coords=\"0,56,179,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abe756667c1272f714ad388aa31f2d29e\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:abe756667c1272f714ad388aa31f2d29e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4ef4629d2e629237a87f8d600fb8b281\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:a4ef4629d2e629237a87f8d600fb8b281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6355cce7750b1367fb98924af151e8b2\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a6355cce7750b1367fb98924af151e8b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aeef1b473ff0edaf3f356722b13e877b0\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:aeef1b473ff0edaf3f356722b13e877b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a543903ef748fd10eb864c27a2e8ac18b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_wait</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a543903ef748fd10eb864c27a2e8ac18b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2 inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f inherit pub_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795 inherit pro_methods_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_a00160\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_a00160')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89 inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d inherit pro_attribs_a00160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00160.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_group_base Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00160.html\">task_group_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"a00420.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_group_base Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_group_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00160.png\" usemap=\"#tbb::internal::task_group_base_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_group_base_map\" name=\"tbb::internal::task_group_base_map\">\n<area href=\"a00156.html\" alt=\"tbb::structured_task_group\" shape=\"rect\" coords=\"0,112,179,136\"/>\n<area href=\"a00159.html\" alt=\"tbb::task_group\" shape=\"rect\" coords=\"189,112,368,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac846a7be5035e1f5c929bda05e1b4401\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac846a7be5035e1f5c929bda05e1b4401\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_base</b> (uintptr_t traits=0)</td></tr>\n<tr class=\"separator:ac846a7be5035e1f5c929bda05e1b4401\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a8d8398153ad19d83a629aeb46991620b\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:a8d8398153ad19d83a629aeb46991620b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a05d8b3350796df951c701978cec816\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9a05d8b3350796df951c701978cec816\"></a>\ntask_group_status&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>wait</b> ()</td></tr>\n<tr class=\"separator:a9a05d8b3350796df951c701978cec816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91b0943033a9e802cea00ac4af9e4ae2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a91b0943033a9e802cea00ac4af9e4ae2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_canceling</b> ()</td></tr>\n<tr class=\"separator:a91b0943033a9e802cea00ac4af9e4ae2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c2b1b967f4d1924cf15c19e3854ff2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c2b1b967f4d1924cf15c19e3854ff2f\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cancel</b> ()</td></tr>\n<tr class=\"separator:a2c2b1b967f4d1924cf15c19e3854ff2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a4efe5bdeaa3c874a36e7d95d76ad1367\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4efe5bdeaa3c874a36e7d95d76ad1367\"></a>\ntask &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>owner</b> ()</td></tr>\n<tr class=\"separator:a4efe5bdeaa3c874a36e7d95d76ad1367\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef3561e83c11cde7299a34db1064f420\"></a>\ntemplate&lt;typename F &gt; </td></tr>\n<tr class=\"memitem:aef3561e83c11cde7299a34db1064f420\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task_group_status&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run_and_wait</b> (F &amp;f)</td></tr>\n<tr class=\"separator:aef3561e83c11cde7299a34db1064f420\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4f1ecc025eae93b49c2b136526f46795\"></a>\ntemplate&lt;typename Task , typename F &gt; </td></tr>\n<tr class=\"memitem:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal_run</b> (__TBB_FORWARDING_REF(F) f)</td></tr>\n<tr class=\"separator:a4f1ecc025eae93b49c2b136526f46795\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a60fb257f34f63428032f93e9b3b50a89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a60fb257f34f63428032f93e9b3b50a89\"></a>\nempty_task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_root</b></td></tr>\n<tr class=\"separator:a60fb257f34f63428032f93e9b3b50a89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa2bb3845517c6b2f9e29a4e3b08a62d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afa2bb3845517c6b2f9e29a4e3b08a62d\"></a>\n<a class=\"el\" href=\"a00161.html\">task_group_context</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>my_context</b></td></tr>\n<tr class=\"separator:afa2bb3845517c6b2f9e29a4e3b08a62d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00161.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_group_context Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00300.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group_context Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;parallel_invoke.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a2c3cdbc6da08799d0d1ee48d8ccbb13b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2c3cdbc6da08799d0d1ee48d8ccbb13b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_context</b> (tbb::internal::string_index)</td></tr>\n<tr class=\"separator:a2c3cdbc6da08799d0d1ee48d8ccbb13b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>parallel_invoke.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00162.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_handle&lt; F &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00162.html\">task_handle</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00321.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_handle&lt; F &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_handle&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00162.png\" usemap=\"#tbb::task_handle&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::task_handle&lt; F &gt;_map\" name=\"tbb::task_handle&lt; F &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1e213e12e1c2d789c22e56901b53b1d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1e213e12e1c2d789c22e56901b53b1d2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a1e213e12e1c2d789c22e56901b53b1d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7afdf774a18e0b8e8ba8766015505889\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7afdf774a18e0b8e8ba8766015505889\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:a7afdf774a18e0b8e8ba8766015505889\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab09a19aa92286d48cc42d3e9cd60b5d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab09a19aa92286d48cc42d3e9cd60b5d8\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator()</b> () const </td></tr>\n<tr class=\"separator:ab09a19aa92286d48cc42d3e9cd60b5d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a70a59090420eb9c76bd067b3ed3f1e72\"></a>\ntemplate&lt;typename _F &gt; </td></tr>\n<tr class=\"memitem:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::task_handle_task</b></td></tr>\n<tr class=\"separator:a70a59090420eb9c76bd067b3ed3f1e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe85fe1f158cb2a40cd7203854b9460a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abe85fe1f158cb2a40cd7203854b9460a\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group</b></td></tr>\n<tr class=\"separator:abe85fe1f158cb2a40cd7203854b9460a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2913777f78e95f9ea09d788b12db6b62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2913777f78e95f9ea09d788b12db6b62\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>structured_task_group</b></td></tr>\n<tr class=\"separator:a2913777f78e95f9ea09d788b12db6b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00163.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_handle_task&lt; F &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00419.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_handle_task&lt; F &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_handle_task&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00163.png\" usemap=\"#tbb::internal::task_handle_task&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_handle_task&lt; F &gt;_map\" name=\"tbb::internal::task_handle_task&lt; F &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abcddb511967aa06d264ac6c06c4fb08b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abcddb511967aa06d264ac6c06c4fb08b\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_handle_task</b> (<a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt; &amp;h)</td></tr>\n<tr class=\"separator:abcddb511967aa06d264ac6c06c4fb08b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_group.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00164.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::task_scheduler_init Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"a00324.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_scheduler_init Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00276.html\">Task Scheduling</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Class delimiting the scope of task scheduler activity.  \n <a href=\"a00164.html#details\">More...</a></p>\n\n<p><code>#include &lt;task_scheduler_init.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::task_scheduler_init:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00164.png\" usemap=\"#tbb::task_scheduler_init_map\" alt=\"\"/>\n  <map id=\"tbb::task_scheduler_init_map\" name=\"tbb::task_scheduler_init_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a485028b867bffef5829209330e79e64c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">initialize</a> (int number_of_threads=<a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a>)</td></tr>\n<tr class=\"memdesc:a485028b867bffef5829209330e79e64c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Ensure that scheduler exists for this thread.  <a href=\"#a485028b867bffef5829209330e79e64c\">More...</a><br/></td></tr>\n<tr class=\"separator:a485028b867bffef5829209330e79e64c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a0f5294f74b123a646a1762c68d11e39a\">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>\n<tr class=\"memdesc:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The overloaded method with stack size parameter.  <a href=\"#a0f5294f74b123a646a1762c68d11e39a\">More...</a><br/></td></tr>\n<tr class=\"separator:a0f5294f74b123a646a1762c68d11e39a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15d5dca7f79c5769bb96f674e4da0c04\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">terminate</a> ()</td></tr>\n<tr class=\"memdesc:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse of method initialize. <br/></td></tr>\n<tr class=\"separator:a15d5dca7f79c5769bb96f674e4da0c04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae261cf6c54a3689ef4e2c079fe0f67d0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#ae261cf6c54a3689ef4e2c079fe0f67d0\">blocking_terminate</a> ()</td></tr>\n<tr class=\"memdesc:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\" title=\"Inverse of method initialize. \">terminate()</a> that waits for worker threads termination. Throws exception on error. <br/></td></tr>\n<tr class=\"separator:ae261cf6c54a3689ef4e2c079fe0f67d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2721ff874fb21f97b470d14a5ec151f3\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">blocking_terminate</a> (const std::nothrow_t &amp;) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\" title=\"Inverse of method initialize. \">terminate()</a> that waits for worker threads termination. Returns false on error. <br/></td></tr>\n<tr class=\"separator:a2721ff874fb21f97b470d14a5ec151f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8b2657d9b7c39fede2d19507d0e94688\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init</a> (int number_of_threads=<a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>\n<tr class=\"memdesc:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Shorthand for default constructor followed by call to initialize(number_of_threads). <br/></td></tr>\n<tr class=\"separator:a8b2657d9b7c39fede2d19507d0e94688\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a20b121334ec39c1d91bd4fe9a51892b0\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">~task_scheduler_init</a> ()</td></tr>\n<tr class=\"memdesc:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br/></td></tr>\n<tr class=\"separator:a20b121334ec39c1d91bd4fe9a51892b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed5505d7fed9d5493676aa15c176512c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aed5505d7fed9d5493676aa15c176512c\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">is_active</a> () const </td></tr>\n<tr class=\"memdesc:aed5505d7fed9d5493676aa15c176512c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if scheduler is active (initialized); false otherwise. <br/></td></tr>\n<tr class=\"separator:aed5505d7fed9d5493676aa15c176512c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">default_num_threads</a> ()</td></tr>\n<tr class=\"memdesc:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of threads TBB scheduler would create if initialized by default.  <a href=\"#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">More...</a><br/></td></tr>\n<tr class=\"separator:aa0c0d46ec09bedc1ee876aa8aa87c3d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a945886f5ef48300a8ebff2d077c166b1\"></a>\nstatic const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a> = -1</td></tr>\n<tr class=\"memdesc:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Typedef for number of threads that is automatic. <br/></td></tr>\n<tr class=\"separator:a945886f5ef48300a8ebff2d077c166b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af0e49ff2f59a4e53c9c07897b57f084d\"></a>\nstatic const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">deferred</a> = -2</td></tr>\n<tr class=\"memdesc:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Argument to <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\" title=\"Ensure that scheduler exists for this thread. \">initialize()</a> or constructor that causes initialization to be deferred. <br/></td></tr>\n<tr class=\"separator:af0e49ff2f59a4e53c9c07897b57f084d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Class delimiting the scope of task scheduler activity. </p>\n<p>A thread can construct a <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).</p>\n<p>This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.</p>\n<p>If a parallel construct is used without <a class=\"el\" href=\"a00164.html\" title=\"Class delimiting the scope of task scheduler activity. \">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\" title=\"Ensure that scheduler exists for this thread. \">task_scheduler_init::initialize()</a>. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"aa0c0d46ec09bedc1ee876aa8aa87c3d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of threads TBB scheduler would create if initialized by default. </p>\n<p>Result returned by this method does not depend on whether the scheduler has already been initialized.</p>\n<p>Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state.</p>\n<p>Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>\n<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a485028b867bffef5829209330e79e64c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>number_of_threads</em> = <code><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a></code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Ensure that scheduler exists for this thread. </p>\n<p>A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.</p>\n<p>The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0f5294f74b123a646a1762c68d11e39a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>number_of_threads</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">stack_size_type&#160;</td>\n          <td class=\"paramname\"><em>thread_stack_size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The overloaded method with stack size parameter. </p>\n<p>Overloading is necessary to preserve ABI compatibility </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_init.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00165.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface6::task_scheduler_observer Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00410.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::task_scheduler_observer Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::interface6::task_scheduler_observer:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00165.png\" usemap=\"#tbb::interface6::task_scheduler_observer_map\" alt=\"\"/>\n  <map id=\"tbb::interface6::task_scheduler_observer_map\" name=\"tbb::interface6::task_scheduler_observer_map\">\n<area href=\"a00166.html\" alt=\"tbb::internal::task_scheduler_observer_v3\" shape=\"rect\" coords=\"0,0,247,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\">{ <b>keep_awake</b> = false, \n<b>allow_sleep</b> = true\n }</td></tr>\n<tr class=\"memdesc:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return commands for <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\" title=\"The callback can be invoked by a worker thread before it goes to sleep. \">may_sleep()</a> <br/></td></tr>\n<tr class=\"separator:a998642ddbd1b2b4282ad28224cc9f4fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">task_scheduler_observer</a> (bool local=false)</td></tr>\n<tr class=\"memdesc:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct local or global observer in inactive state (observation disabled).  <a href=\"#a89025b1e1d42e97d6fe114c0c331f730\">More...</a><br/></td></tr>\n<tr class=\"separator:a89025b1e1d42e97d6fe114c0c331f730\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a36e7e0c466320029d5a3e50a573e04c1\">task_scheduler_observer</a> (task_arena &amp;a)</td></tr>\n<tr class=\"memdesc:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct local observer for a given arena in inactive state (observation disabled).  <a href=\"#a36e7e0c466320029d5a3e50a573e04c1\">More...</a><br/></td></tr>\n<tr class=\"separator:a36e7e0c466320029d5a3e50a573e04c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ef3f1853439b46e5a9db7fd1c0f9116\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer</a> ()</td></tr>\n<tr class=\"separator:a9ef3f1853439b46e5a9db7fd1c0f9116\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#ad5b33790cea52c61e1fb004a8ed26365\">More...</a><br/></td></tr>\n<tr class=\"separator:ad5b33790cea52c61e1fb004a8ed26365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2390325945912ee7ce58cd9700664ea4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">may_sleep</a> ()</td></tr>\n<tr class=\"memdesc:a2390325945912ee7ce58cd9700664ea4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The callback can be invoked by a worker thread before it goes to sleep.  <a href=\"#a2390325945912ee7ce58cd9700664ea4\">More...</a><br/></td></tr>\n<tr class=\"separator:a2390325945912ee7ce58cd9700664ea4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00166\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00166')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td></tr>\n<tr class=\"memitem:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#a40209b347e3c82bb5bfda05941304309\">More...</a><br/></td></tr>\n<tr class=\"separator:a40209b347e3c82bb5bfda05941304309 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a31abaf256f7172f010cfb2259c7787bb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a> () const </td></tr>\n<tr class=\"memdesc:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if observation is enabled, false otherwise. <br/></td></tr>\n<tr class=\"separator:a31abaf256f7172f010cfb2259c7787bb inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25bffb05efaaab36bc58590969e29745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct observer with observation disabled. <br/></td></tr>\n<tr class=\"separator:a25bffb05efaaab36bc58590969e29745 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a> (bool)</td></tr>\n<tr class=\"memdesc:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Entry notification.  <a href=\"#af4282a27725fbe86052bb785bdd9c5d3\">More...</a><br/></td></tr>\n<tr class=\"separator:af4282a27725fbe86052bb785bdd9c5d3 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a> (bool)</td></tr>\n<tr class=\"memdesc:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exit notification.  <a href=\"#a657e90f833568e217b807d0122fa7668\">More...</a><br/></td></tr>\n<tr class=\"separator:a657e90f833568e217b807d0122fa7668 inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a151e475ebba39172fcc13f43bed426cc\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor automatically switches observation off if it is enabled. <br/></td></tr>\n<tr class=\"separator:a151e475ebba39172fcc13f43bed426cc inherit pub_methods_a00166\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a567691ababd2dee2c44d1d6d4b9b093a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a567691ababd2dee2c44d1d6d4b9b093a\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::task_scheduler_observer_v3</b></td></tr>\n<tr class=\"separator:a567691ababd2dee2c44d1d6d4b9b093a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae3fb165cd890fab10c1d09823dcb0ac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae3fb165cd890fab10c1d09823dcb0ac9\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::observer_proxy</b></td></tr>\n<tr class=\"separator:ae3fb165cd890fab10c1d09823dcb0ac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d0d193bf27a1606466663c68e05e1b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5d0d193bf27a1606466663c68e05e1b3\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal::observer_list</b></td></tr>\n<tr class=\"separator:a5d0d193bf27a1606466663c68e05e1b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a class=\"anchor\" id=\"a89025b1e1d42e97d6fe114c0c331f730\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>local</em> = <code>false</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct local or global observer in inactive state (observation disabled). </p>\n<p>For a local observer entry/exit notifications are invoked whenever a worker thread joins/leaves the arena of the observer's owner thread. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. TODO: Obsolete. Global observer semantics is obsolete as it violates master thread isolation guarantees and is not composable. Thus the current default behavior of the constructor is obsolete too and will be changed in one of the future versions of the library. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a36e7e0c466320029d5a3e50a573e04c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">tbb::interface6::task_scheduler_observer::task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramtype\">task_arena &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Construct local observer for a given arena in inactive state (observation disabled). </p>\n<p>entry/exit notifications are invoked whenever a thread joins/leaves arena. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9ef3f1853439b46e5a9db7fd1c0f9116\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual tbb::interface6::task_scheduler_observer::~task_scheduler_observer </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Destructor protects instance of the observer from concurrent notification. It is recommended to disable observation before destructor of a derived class starts, otherwise it can lead to concurrent notification callback on partly destroyed object </p>\n\n<p>References <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe()</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a2390325945912ee7ce58cd9700664ea4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool tbb::interface6::task_scheduler_observer::may_sleep </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>The callback can be invoked by a worker thread before it goes to sleep. </p>\n<p>If it returns false ('keep_awake'), the thread will keep spinning and looking for work. It will not be called for master threads. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad5b33790cea52c61e1fb004a8ed26365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::interface6::task_scheduler_observer::observe </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enable or disable observation. </p>\n<p>Warning: concurrent invocations of this method are not safe. Repeated calls with the same state are no-ops. </p>\n\n<p>References <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3::observe()</a>, and <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb::relaxed</a>.</p>\n\n<p>Referenced by <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer()</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_observer.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00166.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::task_scheduler_observer_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00421.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_scheduler_observer_v3 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::task_scheduler_observer_v3:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00166.png\" usemap=\"#tbb::internal::task_scheduler_observer_v3_map\" alt=\"\"/>\n  <map id=\"tbb::internal::task_scheduler_observer_v3_map\" name=\"tbb::internal::task_scheduler_observer_v3_map\">\n<area href=\"a00165.html\" alt=\"tbb::interface6::task_scheduler_observer\" shape=\"rect\" coords=\"0,56,247,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a40209b347e3c82bb5bfda05941304309\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a> (bool state=true)</td></tr>\n<tr class=\"memdesc:a40209b347e3c82bb5bfda05941304309\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable or disable observation.  <a href=\"#a40209b347e3c82bb5bfda05941304309\">More...</a><br/></td></tr>\n<tr class=\"separator:a40209b347e3c82bb5bfda05941304309\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a31abaf256f7172f010cfb2259c7787bb\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a> () const </td></tr>\n<tr class=\"memdesc:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if observation is enabled, false otherwise. <br/></td></tr>\n<tr class=\"separator:a31abaf256f7172f010cfb2259c7787bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25bffb05efaaab36bc58590969e29745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25bffb05efaaab36bc58590969e29745\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a25bffb05efaaab36bc58590969e29745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct observer with observation disabled. <br/></td></tr>\n<tr class=\"separator:a25bffb05efaaab36bc58590969e29745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a> (bool)</td></tr>\n<tr class=\"memdesc:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Entry notification.  <a href=\"#af4282a27725fbe86052bb785bdd9c5d3\">More...</a><br/></td></tr>\n<tr class=\"separator:af4282a27725fbe86052bb785bdd9c5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a657e90f833568e217b807d0122fa7668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a> (bool)</td></tr>\n<tr class=\"memdesc:a657e90f833568e217b807d0122fa7668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exit notification.  <a href=\"#a657e90f833568e217b807d0122fa7668\">More...</a><br/></td></tr>\n<tr class=\"separator:a657e90f833568e217b807d0122fa7668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a151e475ebba39172fcc13f43bed426cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a151e475ebba39172fcc13f43bed426cc\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a> ()</td></tr>\n<tr class=\"memdesc:a151e475ebba39172fcc13f43bed426cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor automatically switches observation off if it is enabled. <br/></td></tr>\n<tr class=\"separator:a151e475ebba39172fcc13f43bed426cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a897b52f8da750f35b9b2ef410eae7181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a897b52f8da750f35b9b2ef410eae7181\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>observer_proxy</b></td></tr>\n<tr class=\"separator:a897b52f8da750f35b9b2ef410eae7181\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a232d1ae378b2c82f9788c5611429298b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a232d1ae378b2c82f9788c5611429298b\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>observer_list</b></td></tr>\n<tr class=\"separator:a232d1ae378b2c82f9788c5611429298b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad972d2c44eeed885d9df2b75e7231277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad972d2c44eeed885d9df2b75e7231277\"></a>\nclass&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>interface6::task_scheduler_observer</b></td></tr>\n<tr class=\"separator:ad972d2c44eeed885d9df2b75e7231277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a40209b347e3c82bb5bfda05941304309\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_METHOD tbb::internal::task_scheduler_observer_v3::observe </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Enable or disable observation. </p>\n<p>For local observers the method can be used only when the current thread has the task scheduler initialized or is attached to an arena.</p>\n<p>Repeated calls with the same state are no-ops. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer::observe()</a>, and <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af4282a27725fbe86052bb785bdd9c5d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_entry </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Entry notification. </p>\n<p>Invoked from inside observe(true) call and whenever a worker enters the arena this observer is associated with. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.</p>\n<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a657e90f833568e217b807d0122fa7668\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_exit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Exit notification. </p>\n<p>Invoked from inside observe(false) call and whenever a worker leaves the arena this observer is associated with.</p>\n<p>Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>task_scheduler_observer.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; T &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00325.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00167.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a60463a571d5c20f7762112367261ad94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a> { <b>scalable</b>, \n<b>standard</b>\n }</td></tr>\n<tr class=\"memdesc:a60463a571d5c20f7762112367261ad94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specifies current allocator. <br/></td></tr>\n<tr class=\"separator:a60463a571d5c20f7762112367261ad94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a26be966de4164e37002247c2c2266df9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a26be966de4164e37002247c2c2266df9\"></a>\ntypedef <br class=\"typebreak\"/>\ninternal::allocator_type&lt; T &gt;<br class=\"typebreak\"/>\n::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a26be966de4164e37002247c2c2266df9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a452a6c09408f425c9a005b5f2aad1761\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a452a6c09408f425c9a005b5f2aad1761\"></a>\ntypedef value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a452a6c09408f425c9a005b5f2aad1761\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63122d559635096a2618aecd1ba6664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63122d559635096a2618aecd1ba6664b\"></a>\ntypedef const value_type *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a63122d559635096a2618aecd1ba6664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"></a>\ntypedef value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a5ec6bd5e8cdd5b7abb99f5d72760c7a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24d98ce3ab908bc4b10d21dad6622364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a24d98ce3ab908bc4b10d21dad6622364\"></a>\ntypedef const value_type &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a24d98ce3ab908bc4b10d21dad6622364\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a812817d50e8df15df54998caec9892eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a812817d50e8df15df54998caec9892eb\"></a>\ntypedef size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a812817d50e8df15df54998caec9892eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acba390757f664df03a15e933e3e34941\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acba390757f664df03a15e933e3e34941\"></a>\ntypedef ptrdiff_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:acba390757f664df03a15e933e3e34941\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a8371538bc959f41f342012e363564aed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8371538bc959f41f342012e363564aed\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_allocator</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a> &amp;)  throw ()</td></tr>\n<tr class=\"separator:a8371538bc959f41f342012e363564aed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9faff9ae2c2cd3ed2ca064b562224974\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb_allocator</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>\n<tr class=\"separator:a9faff9ae2c2cd3ed2ca064b562224974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac1370dbb1f06fed57273bddcae688255\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac1370dbb1f06fed57273bddcae688255\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (reference x) const </td></tr>\n<tr class=\"separator:ac1370dbb1f06fed57273bddcae688255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb9c91d548d4a5affe3ec1de1c1b9327\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb9c91d548d4a5affe3ec1de1c1b9327\"></a>\nconst_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>address</b> (const_reference x) const </td></tr>\n<tr class=\"separator:afb9c91d548d4a5affe3ec1de1c1b9327\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afedd8a64eed9692083c708f419338e0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afedd8a64eed9692083c708f419338e0c\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">allocate</a> (size_type n, const void *=0)</td></tr>\n<tr class=\"memdesc:afedd8a64eed9692083c708f419338e0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allocate space for n objects. <br/></td></tr>\n<tr class=\"separator:afedd8a64eed9692083c708f419338e0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28e333e0fff56dd53c20b82cfee430ab\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">deallocate</a> (pointer p, size_type)</td></tr>\n<tr class=\"memdesc:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Free previously allocated block of memory. <br/></td></tr>\n<tr class=\"separator:a28e333e0fff56dd53c20b82cfee430ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0a2676fb8a2f931961d373b88848c93e\"></a>\nsize_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">max_size</a> () const   throw ()</td></tr>\n<tr class=\"memdesc:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Largest value for which method allocate might succeed. <br/></td></tr>\n<tr class=\"separator:a0a2676fb8a2f931961d373b88848c93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af54fa3029e33cebe5ba64a8538306fdf\"></a>\ntemplate&lt;typename U , typename... Args&gt; </td></tr>\n<tr class=\"memitem:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">construct</a> (U *p, Args &amp;&amp;...args)</td></tr>\n<tr class=\"memdesc:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Copy-construct value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:af54fa3029e33cebe5ba64a8538306fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aefbb273663853a665e51dcfa053d12a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aefbb273663853a665e51dcfa053d12a0\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, value_type &amp;&amp;value)</td></tr>\n<tr class=\"separator:aefbb273663853a665e51dcfa053d12a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a694e266db657afba34ecb60111b2e2d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a694e266db657afba34ecb60111b2e2d3\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>construct</b> (pointer p, const value_type &amp;value)</td></tr>\n<tr class=\"separator:a694e266db657afba34ecb60111b2e2d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac7b1b393a8ff3399079328c0971c1996\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">destroy</a> (pointer p)</td></tr>\n<tr class=\"memdesc:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroy value at location pointed to by p. <br/></td></tr>\n<tr class=\"separator:ac7b1b393a8ff3399079328c0971c1996\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:aa4606cff0156ec4237c1571204851bfb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4606cff0156ec4237c1571204851bfb\"></a>\nstatic <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">allocator_type</a> ()</td></tr>\n<tr class=\"memdesc:aa4606cff0156ec4237c1571204851bfb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns current allocator. <br/></td></tr>\n<tr class=\"separator:aa4606cff0156ec4237c1571204851bfb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T&gt;<br/>\nclass tbb::tbb_allocator&lt; T &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00168.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_allocator&lt; void &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00327.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00168.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a8fda536620d85d53caa82c45ffa49dd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8fda536620d85d53caa82c45ffa49dd8\"></a>\ntypedef void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:a8fda536620d85d53caa82c45ffa49dd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a401d3c91a38b09410a20fe69d4d9745d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a401d3c91a38b09410a20fe69d4d9745d\"></a>\ntypedef const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a401d3c91a38b09410a20fe69d4d9745d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afef43ed21663982050fbae7b970e33f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afef43ed21663982050fbae7b970e33f6\"></a>\ntypedef void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:afef43ed21663982050fbae7b970e33f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;&gt;<br/>\nclass tbb::tbb_allocator&lt; void &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00169.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tbb_exception Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00338.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_exception Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  \n <a href=\"a00169.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::tbb_exception:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00169.png\" usemap=\"#tbb::tbb_exception_map\" alt=\"\"/>\n  <map id=\"tbb::tbb_exception_map\" name=\"tbb::tbb_exception_map\">\n<area href=\"a00046.html\" title=\"This class is used by TBB to propagate information about unhandled exceptions into the root thread...\" alt=\"tbb::captured_exception\" shape=\"rect\" coords=\"0,112,248,136\"/>\n<area href=\"a00096.html\" title=\"Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...\" alt=\"tbb::movable_exception&lt; ExceptionData &gt;\" shape=\"rect\" coords=\"258,112,506,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual <a class=\"el\" href=\"a00169.html\">tbb_exception</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">move</a> ()=0  throw ()</td></tr>\n<tr class=\"memdesc:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates and returns pointer to the deep copy of this exception object.  <a href=\"#a4bd4ba0d501021013d1473d21b020b69\">More...</a><br/></td></tr>\n<tr class=\"separator:a4bd4ba0d501021013d1473d21b020b69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">destroy</a> ()=0  throw ()</td></tr>\n<tr class=\"memdesc:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys objects created by the <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method.  <a href=\"#ad3bc09bf78c33f19a0bcdf882fdf9d41\">More...</a><br/></td></tr>\n<tr class=\"separator:ad3bc09bf78c33f19a0bcdf882fdf9d41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">throw_self</a> ()=0</td></tr>\n<tr class=\"memdesc:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws this exception object.  <a href=\"#ae45c08d36c7ec7ae91785da3515a8828\">More...</a><br/></td></tr>\n<tr class=\"separator:ae45c08d36c7ec7ae91785da3515a8828\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a282bb7dce5f157d044d14d50cd6ff35c\"></a>\nvirtual const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">name</a> () const =0  throw ()</td></tr>\n<tr class=\"memdesc:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns RTTI name of the originally intercepted exception. <br/></td></tr>\n<tr class=\"separator:a282bb7dce5f157d044d14d50cd6ff35c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6739787c42d80943e18913cce47f42f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6739787c42d80943e18913cce47f42f\"></a>\nvirtual const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">what</a> () const __TBB_override=0  throw ()</td></tr>\n<tr class=\"memdesc:aa6739787c42d80943e18913cce47f42f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the result of originally intercepted exception's <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\" title=\"Returns the result of originally intercepted exception&#39;s what() method. \">what()</a> method. <br/></td></tr>\n<tr class=\"separator:aa6739787c42d80943e18913cce47f42f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a973c37078afedf7d457ff4704bf8cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a> (void *p)</td></tr>\n<tr class=\"separator:a6a973c37078afedf7d457ff4704bf8cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. </p>\n<p>If an unhandled exception of the type derived from <a class=\"el\" href=\"a00169.html\" title=\"Interface to be implemented by all exceptions TBB recognizes and propagates across the threads...\">tbb::tbb_exception</a> is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class=\"el\" href=\"a00161.html\">task_group_context</a> with the guilty algorithm/task (the one that threw the exception first).</p>\n<p>Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.</p>\n<p>NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the \"throw;\" operator.</p>\n<p>TBB provides two implementations of this interface: <a class=\"el\" href=\"a00046.html\" title=\"This class is used by TBB to propagate information about unhandled exceptions into the root thread...\">tbb::captured_exception</a> and template class <a class=\"el\" href=\"a00096.html\" title=\"Template that can be used to implement exception that transfers arbitrary ExceptionData to the root t...\">tbb::movable_exception</a>. See their declarations for more info. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ad3bc09bf78c33f19a0bcdf882fdf9d41\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::tbb_exception::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Destroys objects created by the <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> method. </p>\n<p>Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4bd4ba0d501021013d1473d21b020b69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual <a class=\"el\" href=\"a00169.html\">tbb_exception</a>* tbb::tbb_exception::move </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates and returns pointer to the deep copy of this exception object. </p>\n<p>Move semantics is allowed. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6a973c37078afedf7d457ff4704bf8cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::tbb_exception::operator delete </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<p>Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> operation on an exception thrown out of TBB scheduler.</p>\n<p>When overriding method <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\" title=\"Creates and returns pointer to the deep copy of this exception object. \">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae45c08d36c7ec7ae91785da3515a8828\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void tbb::tbb_exception::throw_self </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Throws this exception object. </p>\n<p>Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as \"throw *this;\". Failure to do this will result in exception of a base class type being thrown. </p>\n\n<p>Implemented in <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>, and <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00170.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_exception_ptr Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"a00422.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_exception_ptr Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception container that preserves the exact copy of the original exception.  \n <a href=\"a00170.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">destroy</a> ()  throw ()</td></tr>\n<tr class=\"memdesc:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destroys this objects.  <a href=\"#a38d3ca480e2758a67bcd7427b156daae\">More...</a><br/></td></tr>\n<tr class=\"separator:a38d3ca480e2758a67bcd7427b156daae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1713aa9a6a3850049d34358397a8ed81\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">throw_self</a> ()</td></tr>\n<tr class=\"memdesc:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Throws the contained exception . <br/></td></tr>\n<tr class=\"separator:a1713aa9a6a3850049d34358397a8ed81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a83d4cb04d89ed11b5e030fe4db2d5e5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a83d4cb04d89ed11b5e030fe4db2d5e5f\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> ()</td></tr>\n<tr class=\"separator:a83d4cb04d89ed11b5e030fe4db2d5e5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae54ded5f55ad39805e6cb967fc710346\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae54ded5f55ad39805e6cb967fc710346\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> (const <a class=\"el\" href=\"a00169.html\">tbb_exception</a> &amp;tag)</td></tr>\n<tr class=\"separator:ae54ded5f55ad39805e6cb967fc710346\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abfbea91401d2594deb04ea331734171c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abfbea91401d2594deb04ea331734171c\"></a>\nstatic <a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">allocate</a> (<a class=\"el\" href=\"a00046.html\">captured_exception</a> &amp;src)</td></tr>\n<tr class=\"memdesc:abfbea91401d2594deb04ea331734171c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This overload uses move semantics (i.e. it empties src) <br/></td></tr>\n<tr class=\"separator:abfbea91401d2594deb04ea331734171c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception container that preserves the exact copy of the original exception. </p>\n<p>This class can be used only when the appropriate runtime support (mandated by C++11) is present </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a38d3ca480e2758a67bcd7427b156daae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::internal::tbb_exception_ptr::destroy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n        <tr>\n          <td align=\"right\">throw </td><td>(</td><td colspan=\"2\"></td>\n        </tr>\n        <tr>\n          <td align=\"right\"></td><td>)</td><td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Destroys this objects. </p>\n<p>Note that objects of this type can be created only by the allocate() method. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00171.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::tbb_thread_v3 Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00427.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3 Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Versioned thread class.  \n <a href=\"a00171.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_thread.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00085.html\">id</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:acf81b6411caec392fc62fdfbf72560ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acf81b6411caec392fc62fdfbf72560ac\"></a>\ntypedef HANDLE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:acf81b6411caec392fc62fdfbf72560ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30e64e2a6bef43e2fd847e6c60a31207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a30e64e2a6bef43e2fd847e6c60a31207\"></a>\ntypedef pthread_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle_type</b></td></tr>\n<tr class=\"separator:a30e64e2a6bef43e2fd847e6c60a31207\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad9acae61c47fad5cf88869061ead3022\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad9acae61c47fad5cf88869061ead3022\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread_v3</b> (const <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;)</td></tr>\n<tr class=\"separator:ad9acae61c47fad5cf88869061ead3022\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15b84e454eb0179e010b90a88baa0933\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a15b84e454eb0179e010b90a88baa0933\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb_thread_v3</a> () __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a15b84e454eb0179e010b90a88baa0933\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs a thread object that does not represent a thread of execution. <br/></td></tr>\n<tr class=\"separator:a15b84e454eb0179e010b90a88baa0933\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a9c5587ab76ca1aa98bae7fe69a459466\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a9c5587ab76ca1aa98bae7fe69a459466\">tbb_thread_v3</a> (F f)</td></tr>\n<tr class=\"memdesc:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f() in a new thread. <br/></td></tr>\n<tr class=\"separator:a9c5587ab76ca1aa98bae7fe69a459466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a672a5367e687635c869926bf8a986296\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a672a5367e687635c869926bf8a986296\"></a>\ntemplate&lt;class F , class X &gt; </td></tr>\n<tr class=\"memitem:a672a5367e687635c869926bf8a986296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a672a5367e687635c869926bf8a986296\">tbb_thread_v3</a> (F f, X x)</td></tr>\n<tr class=\"memdesc:a672a5367e687635c869926bf8a986296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f(x) in a new thread. <br/></td></tr>\n<tr class=\"separator:a672a5367e687635c869926bf8a986296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac3f57678f2a289084a6d275f8f8fbc62\"></a>\ntemplate&lt;class F , class X , class Y &gt; </td></tr>\n<tr class=\"memitem:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#ac3f57678f2a289084a6d275f8f8fbc62\">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>\n<tr class=\"memdesc:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructs an object and executes f(x,y) in a new thread. <br/></td></tr>\n<tr class=\"separator:ac3f57678f2a289084a6d275f8f8fbc62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4f68564c30ee6f59bab29c3b3216623\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa4f68564c30ee6f59bab29c3b3216623\"></a>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;x)</td></tr>\n<tr class=\"separator:aa4f68564c30ee6f59bab29c3b3216623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2e10af48f3f2482e9e7236f2e05714c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab2e10af48f3f2482e9e7236f2e05714c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ab2e10af48f3f2482e9e7236f2e05714c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ddee0e2030f8fa947fd93f403178104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4ddee0e2030f8fa947fd93f403178104\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>joinable</b> () const __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a4ddee0e2030f8fa947fd93f403178104\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a044c8727c51e921b0cc43a6b057eb559\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">join</a> ()</td></tr>\n<tr class=\"memdesc:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The completion of the thread represented by *this happens before <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\" title=\"The completion of the thread represented by *this happens before join() returns. \">join()</a> returns. <br/></td></tr>\n<tr class=\"separator:a044c8727c51e921b0cc43a6b057eb559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a80a31a41708872af5557b907f129b19b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a80a31a41708872af5557b907f129b19b\"></a>\nvoid __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">detach</a> ()</td></tr>\n<tr class=\"memdesc:a80a31a41708872af5557b907f129b19b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">When <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\" title=\"When detach() returns, *this no longer represents the possibly continuing thread of execution...\">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br/></td></tr>\n<tr class=\"separator:a80a31a41708872af5557b907f129b19b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae98915bfeccaa90d6f13add0ee1ab33a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae98915bfeccaa90d6f13add0ee1ab33a\"></a>\n<a class=\"el\" href=\"a00085.html\">id</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>get_id</b> () const __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:ae98915bfeccaa90d6f13add0ee1ab33a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98e89e22e11fb6cab05f0f7839c79310\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98e89e22e11fb6cab05f0f7839c79310\"></a>\nnative_handle_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>native_handle</b> ()</td></tr>\n<tr class=\"separator:a98e89e22e11fb6cab05f0f7839c79310\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static unsigned __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">hardware_concurrency</a> () __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"memdesc:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The number of hardware thread contexts.  <a href=\"#a23d7a420709b2e2b29b42dea897bd8bc\">More...</a><br/></td></tr>\n<tr class=\"separator:a23d7a420709b2e2b29b42dea897bd8bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a7646cb0b0cc070a6dd962afbaaec3ec8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7646cb0b0cc070a6dd962afbaaec3ec8\"></a>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a>(<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> <br class=\"typebreak\"/>\n&amp;&amp;x) __TBB_NOEXCEPT(true) <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator=</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;&amp;x) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a7646cb0b0cc070a6dd962afbaaec3ec8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a9b8a2643aa337c0ec7f68cc2797a10ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9b8a2643aa337c0ec7f68cc2797a10ba\"></a>\nvoid __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>move_v3</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t2)</td></tr>\n<tr class=\"separator:a9b8a2643aa337c0ec7f68cc2797a10ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a190e47ee761e8647e79cdd3cccff618c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a190e47ee761e8647e79cdd3cccff618c\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::swap</b> (<a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> &amp;t2) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a190e47ee761e8647e79cdd3cccff618c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Versioned thread class. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"a23d7a420709b2e2b29b42dea897bd8bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static unsigned __TBB_EXPORTED_FUNC tbb::internal::tbb_thread_v3::hardware_concurrency </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>The number of hardware thread contexts. </p>\n<p>Before TBB 3.0 U4 this methods returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.</p>\n<p>NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00172.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::thread_bound_filter Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"a00305.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::thread_bound_filter Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00271.html\">Algorithms</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>A stage in a pipeline served by a user thread.  \n <a href=\"a00172.html#details\">More...</a></p>\n\n<p><code>#include &lt;pipeline.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::thread_bound_filter:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00172.png\" usemap=\"#tbb::thread_bound_filter_map\" alt=\"\"/>\n  <map id=\"tbb::thread_bound_filter_map\" name=\"tbb::thread_bound_filter_map\">\n<area href=\"a00074.html\" title=\"A stage in a pipeline. \" alt=\"tbb::filter\" shape=\"rect\" coords=\"0,56,145,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a2425d6944a22a57c906945df57290e9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>result_type</b> { <b>success</b>, \n<b>item_not_available</b>, \n<b>end_of_stream</b>\n }</td></tr>\n<tr class=\"separator:a2425d6944a22a57c906945df57290e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">result_type __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">try_process_item</a> ()</td></tr>\n<tr class=\"memdesc:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If a data item is available, invoke operator() on that item.  <a href=\"#a12cfa43c620066a8783529cc8519c6f9\">More...</a><br/></td></tr>\n<tr class=\"separator:a12cfa43c620066a8783529cc8519c6f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac99258407f382d84568a510075074fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">result_type __TBB_EXPORTED_METHOD&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">process_item</a> ()</td></tr>\n<tr class=\"memdesc:ac99258407f382d84568a510075074fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wait until a data item becomes available, and invoke operator() on that item.  <a href=\"#ac99258407f382d84568a510075074fc7\">More...</a><br/></td></tr>\n<tr class=\"separator:ac99258407f382d84568a510075074fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a5f236956f85f28c783127c949e902610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5f236956f85f28c783127c949e902610\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_bound_filter</b> (mode filter_mode)</td></tr>\n<tr class=\"separator:a5f236956f85f28c783127c949e902610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_static_attribs_a00074\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_static_attribs_a00074')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Protected Attributes inherited from <a class=\"el\" href=\"a00074.html\">tbb::filter</a></td></tr>\n<tr class=\"memitem:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae9dab2e01b0963b341ab04b59eec1475\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a> = 0x1</td></tr>\n<tr class=\"memdesc:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The lowest bit 0 is for parallel vs. serial. <br/></td></tr>\n<tr class=\"separator:ae9dab2e01b0963b341ab04b59eec1475 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a> = 0x1&lt;&lt;4</td></tr>\n<tr class=\"memdesc:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4th bit distinguishes ordered vs unordered filters.  <a href=\"#a091fcf6abc79edfa5c8bf01f742e2392\">More...</a><br/></td></tr>\n<tr class=\"separator:a091fcf6abc79edfa5c8bf01f742e2392 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1382f216bd094064a18eb48ecc43c86b\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a> = 0x1&lt;&lt;5</td></tr>\n<tr class=\"memdesc:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">5th bit distinguishes thread-bound and regular filters. <br/></td></tr>\n<tr class=\"separator:a1382f216bd094064a18eb48ecc43c86b inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6645ec56872b6ba2056dcaa467e292f7\"></a>\nstatic const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a> = 0x1&lt;&lt;6</td></tr>\n<tr class=\"memdesc:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">6th bit marks input filters emitting small objects <br/></td></tr>\n<tr class=\"separator:a6645ec56872b6ba2056dcaa467e292f7 inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td></tr>\n<tr class=\"memdesc:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">7th bit defines exception propagation mode expected by the application.  <a href=\"#aab9689e23a96c6c9bf1c8caae74d92ee\">More...</a><br/></td></tr>\n<tr class=\"separator:aab9689e23a96c6c9bf1c8caae74d92ee inherit pro_static_attribs_a00074\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A stage in a pipeline served by a user thread. </p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a class=\"anchor\" id=\"ac99258407f382d84568a510075074fc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Wait until a data item becomes available, and invoke operator() on that item. </p>\n<p>This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a12cfa43c620066a8783529cc8519c6f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>If a data item is available, invoke operator() on that item. </p>\n<p>This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. </p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>pipeline.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00173.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_0&lt; F &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00424.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_0&lt; F &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_0&lt; F &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00173.png\" usemap=\"#tbb::internal::thread_closure_0&lt; F &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_0&lt; F &gt;_map\" name=\"tbb::internal::thread_closure_0&lt; F &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,214,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a538aa9db5b40cf64cdafc0af0649a7f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a538aa9db5b40cf64cdafc0af0649a7f2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_0</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a538aa9db5b40cf64cdafc0af0649a7f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a4b9e7370103f473212ccb10e65d676fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4b9e7370103f473212ccb10e65d676fb\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>start_routine</b> (void *c)</td></tr>\n<tr class=\"separator:a4b9e7370103f473212ccb10e65d676fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:aff55f3266cccfbb2d296aa9b07239ce8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aff55f3266cccfbb2d296aa9b07239ce8\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:aff55f3266cccfbb2d296aa9b07239ce8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00174.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_1&lt; F, X &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00425.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_1&lt; F, X &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Structure used to pass user function with 1 argument to thread.  \n <a href=\"a00174.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_thread.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_1&lt; F, X &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00174.png\" usemap=\"#tbb::internal::thread_closure_1&lt; F, X &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_1&lt; F, X &gt;_map\" name=\"tbb::internal::thread_closure_1&lt; F, X &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,232,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:afef38584bcf65f3f71700cfec80b8b18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afef38584bcf65f3f71700cfec80b8b18\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_1</b> (const F &amp;f, const X &amp;x)</td></tr>\n<tr class=\"separator:afef38584bcf65f3f71700cfec80b8b18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a33d533b3301c45708c6252d040f855a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a33d533b3301c45708c6252d040f855a6\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">start_routine</a> (void *c)</td></tr>\n<tr class=\"memdesc:a33d533b3301c45708c6252d040f855a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>\n<tr class=\"separator:a33d533b3301c45708c6252d040f855a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a39a5a39b2a7513868944ffe7ffd89640\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a39a5a39b2a7513868944ffe7ffd89640\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:a39a5a39b2a7513868944ffe7ffd89640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a607886c68ca8bdd984b9b4f6ec744dea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a607886c68ca8bdd984b9b4f6ec744dea\"></a>\nX&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg1</b></td></tr>\n<tr class=\"separator:a607886c68ca8bdd984b9b4f6ec744dea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;class F, class X&gt;<br/>\nstruct tbb::internal::thread_closure_1&lt; F, X &gt;</h3>\n\n<p>Structure used to pass user function with 1 argument to thread. </p>\n</div><hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00175.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_2&lt; F, X, Y &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"a00426.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_2&lt; F, X, Y &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_2&lt; F, X, Y &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00175.png\" usemap=\"#tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\" name=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;_map\">\n<area href=\"a00176.html\" alt=\"tbb::internal::thread_closure_base\" shape=\"rect\" coords=\"0,0,250,24\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:aa5f65ba1d019063487f425021ca2ba59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa5f65ba1d019063487f425021ca2ba59\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>thread_closure_2</b> (const F &amp;f, const X &amp;x, const Y &amp;y)</td></tr>\n<tr class=\"separator:aa5f65ba1d019063487f425021ca2ba59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_a00176\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_a00176')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5 inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d inherit pub_methods_a00176\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a29003179f98d768622c72b9ab5cfe8f6\"></a>\nstatic __TBB_NATIVE_THREAD_ROUTINE&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">start_routine</a> (void *c)</td></tr>\n<tr class=\"memdesc:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br/></td></tr>\n<tr class=\"separator:a29003179f98d768622c72b9ab5cfe8f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a247bf0a01f8a390031b71c9b85fb8b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a247bf0a01f8a390031b71c9b85fb8b24\"></a>\nF&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>function</b></td></tr>\n<tr class=\"separator:a247bf0a01f8a390031b71c9b85fb8b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36f694b6dcc91c92b09d3deee24e4732\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a36f694b6dcc91c92b09d3deee24e4732\"></a>\nX&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg1</b></td></tr>\n<tr class=\"separator:a36f694b6dcc91c92b09d3deee24e4732\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47f0e53fc6b9026d9529a3bf1cc4fa72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a47f0e53fc6b9026d9529a3bf1cc4fa72\"></a>\nY&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>arg2</b></td></tr>\n<tr class=\"separator:a47f0e53fc6b9026d9529a3bf1cc4fa72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00176.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::internal::thread_closure_base Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00423.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_base Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::internal::thread_closure_base:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00176.png\" usemap=\"#tbb::internal::thread_closure_base_map\" alt=\"\"/>\n  <map id=\"tbb::internal::thread_closure_base_map\" name=\"tbb::internal::thread_closure_base_map\">\n<area href=\"a00173.html\" alt=\"tbb::internal::thread_closure_0&lt; F &gt;\" shape=\"rect\" coords=\"0,56,250,80\"/>\n<area href=\"a00174.html\" title=\"Structure used to pass user function with 1 argument to thread. \" alt=\"tbb::internal::thread_closure_1&lt; F, X &gt;\" shape=\"rect\" coords=\"260,56,510,80\"/>\n<area href=\"a00175.html\" alt=\"tbb::internal::thread_closure_2&lt; F, X, Y &gt;\" shape=\"rect\" coords=\"520,56,770,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a624f5a5a40051faf39444ad3a9f36df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a624f5a5a40051faf39444ad3a9f36df5\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator new</b> (size_t size)</td></tr>\n<tr class=\"separator:a624f5a5a40051faf39444ad3a9f36df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56e1bfd2ca46abcc3c3f265eff10360d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a56e1bfd2ca46abcc3c3f265eff10360d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator delete</b> (void *ptr)</td></tr>\n<tr class=\"separator:a56e1bfd2ca46abcc3c3f265eff10360d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>tbb_thread.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00177.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::tick_count Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00341.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00275.html\">Timing</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Absolute timestamp.  \n <a href=\"a00177.html#details\">More...</a></p>\n\n<p><code>#include &lt;tick_count.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html\">interval_t</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Relative time interval.  <a href=\"a00087.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9f1daa0b7a4feb800f802b4be1f1e497\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tick_count</a> ()</td></tr>\n<tr class=\"memdesc:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Construct an absolute timestamp initialized to zero. <br/></td></tr>\n<tr class=\"separator:a9f1daa0b7a4feb800f802b4be1f1e497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a74dcecde7431ff4591d7c46fc1d50d7e\"></a>\nstatic <a class=\"el\" href=\"a00177.html\">tick_count</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">now</a> ()</td></tr>\n<tr class=\"memdesc:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return current time. <br/></td></tr>\n<tr class=\"separator:a74dcecde7431ff4591d7c46fc1d50d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaf6a0d91e7d40f7d68e0ad6b79350e58\"></a>\nstatic double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">resolution</a> ()</td></tr>\n<tr class=\"memdesc:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the resolution of the clock in seconds per tick. <br/></td></tr>\n<tr class=\"separator:aaf6a0d91e7d40f7d68e0ad6b79350e58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab5ceaed3ebf5a0d41088a5bc7c8dc653\"></a>\n<a class=\"el\" href=\"a00087.html\">interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"memdesc:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtract two timestamps to get the time interval between. <br/></td></tr>\n<tr class=\"separator:ab5ceaed3ebf5a0d41088a5bc7c8dc653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Absolute timestamp. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tick_count.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00178.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::untyped_receiver Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00368.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_receiver Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::internal::untyped_receiver:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00178.png\" usemap=\"#tbb::flow::interface10::internal::untyped_receiver_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::internal::untyped_receiver_map\" name=\"tbb::flow::interface10::internal::untyped_receiver_map\">\n<area href=\"a00133.html\" alt=\"tbb::flow::interface10::receiver&lt; continue_msg &gt;\" shape=\"rect\" coords=\"0,56,283,80\"/>\n<area href=\"a00133.html\" title=\"Pure virtual template class that defines a receiver of messages of type T. \" alt=\"tbb::flow::interface10::receiver&lt; T &gt;\" shape=\"rect\" coords=\"293,56,576,80\"/>\n<area href=\"a00063.html\" title=\"Base class for receivers of completion messages. \" alt=\"tbb::flow::interface10::continue_receiver\" shape=\"rect\" coords=\"0,112,283,136\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ac67c0cefe2663c84854a299384934688\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac67c0cefe2663c84854a299384934688\"></a>\ntypedef <a class=\"el\" href=\"a00179.html\">untyped_sender</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a></td></tr>\n<tr class=\"memdesc:ac67c0cefe2663c84854a299384934688\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The predecessor type for this node. <br/></td></tr>\n<tr class=\"separator:ac67c0cefe2663c84854a299384934688\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acda6799ff2917d379ef014caf5f6c8c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acda6799ff2917d379ef014caf5f6c8c7\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors_type</b></td></tr>\n<tr class=\"separator:acda6799ff2917d379ef014caf5f6c8c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00437a347902916781c4878aaf1ee531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a00437a347902916781c4878aaf1ee531\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_predecessors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_list_type</b></td></tr>\n<tr class=\"separator:a00437a347902916781c4878aaf1ee531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3526273f06127ae9eaaa1a18744d0a81\"></a>\nvirtual&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a> ()</td></tr>\n<tr class=\"memdesc:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Destructor. <br/></td></tr>\n<tr class=\"separator:a3526273f06127ae9eaaa1a18744d0a81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a92cf020b790bb8edfb0e0c6e4192b72a\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a> (const X &amp;t)</td></tr>\n<tr class=\"memdesc:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Put an item to the receiver. <br/></td></tr>\n<tr class=\"separator:a92cf020b790bb8edfb0e0c6e4192b72a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa804e9e4040859e05989e2297d2e7216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa804e9e4040859e05989e2297d2e7216\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">register_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:aa804e9e4040859e05989e2297d2e7216\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a predecessor to the node. <br/></td></tr>\n<tr class=\"separator:aa804e9e4040859e05989e2297d2e7216\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a03e9c0578f5724dd82381777d3c6c799\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">remove_predecessor</a> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)</td></tr>\n<tr class=\"memdesc:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Remove a predecessor from the node. <br/></td></tr>\n<tr class=\"separator:a03e9c0578f5724dd82381777d3c6c799\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae8e692b6c073ec3407745a76f08abf43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae8e692b6c073ec3407745a76f08abf43\"></a>\nvirtual <a class=\"el\" href=\"a00070.html\">built_predecessors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_predecessors</b> ()=0</td></tr>\n<tr class=\"separator:ae8e692b6c073ec3407745a76f08abf43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98fe810713f2bc391a1e4c038f4938df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a98fe810713f2bc391a1e4c038f4938df\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a98fe810713f2bc391a1e4c038f4938df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25edabe194adb185ab2ceb9fce15f5c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25edabe194adb185ab2ceb9fce15f5c4\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_predecessor</b> (<a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a25edabe194adb185ab2ceb9fce15f5c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe633b68d3d89bcddaeb46e5311c1b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2fe633b68d3d89bcddaeb46e5311c1b1\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_predecessors</b> (predecessor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:a2fe633b68d3d89bcddaeb46e5311c1b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb29301785c66fb791427e2c7a40b47d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeb29301785c66fb791427e2c7a40b47d\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>predecessor_count</b> ()=0</td></tr>\n<tr class=\"separator:aeb29301785c66fb791427e2c7a40b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1d7af888a2ea8e0034c7c84cab813eb8\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">task *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>try_put_task</b> (const X &amp;t)</td></tr>\n<tr class=\"separator:a1d7af888a2ea8e0034c7c84cab813eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:add6c382a09c52cc1532caf73424ac4f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"add6c382a09c52cc1532caf73424ac4f3\"></a>\nvirtual task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_put_task_wrapper</b> (const void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:add6c382a09c52cc1532caf73424ac4f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4810a50f43ffde5761636ef40ad599eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a4810a50f43ffde5761636ef40ad599eb\"></a>\nvirtual graph &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>graph_reference</b> ()=0</td></tr>\n<tr class=\"separator:a4810a50f43ffde5761636ef40ad599eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a721fc420f0483e9c6b2d6fbad4ba5b20\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">reset_receiver</a> (reset_flags f=rf_reset_protocol)=0</td></tr>\n<tr class=\"memdesc:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">put receiver back in initial state <br/></td></tr>\n<tr class=\"separator:a721fc420f0483e9c6b2d6fbad4ba5b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac560b27968e570096bdcc79a9ddf0aa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac560b27968e570096bdcc79a9ddf0aa2\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_continue_receiver</b> ()</td></tr>\n<tr class=\"separator:ac560b27968e570096bdcc79a9ddf0aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abaf9bf74ca5f2854d09f5f07337280eb\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>run_and_put_task</b></td></tr>\n<tr class=\"separator:abaf9bf74ca5f2854d09f5f07337280eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05ec930a348f7eed564236d00edbda24\"></a>\ntemplate&lt;typename &gt; </td></tr>\n<tr class=\"memitem:a05ec930a348f7eed564236d00edbda24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>limiter_node</b></td></tr>\n<tr class=\"separator:a05ec930a348f7eed564236d00edbda24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1360e38efe396058978cf3754ad620f5\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a1360e38efe396058978cf3754ad620f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::broadcast_cache</b></td></tr>\n<tr class=\"separator:a1360e38efe396058978cf3754ad620f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"acbd9ac2610587a99cd7d43344297cc49\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::round_robin_cache</b></td></tr>\n<tr class=\"separator:acbd9ac2610587a99cd7d43344297cc49\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a73cd25db4e6e9497940262f70f3ffc54\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::successor_cache</b></td></tr>\n<tr class=\"separator:a73cd25db4e6e9497940262f70f3ffc54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af80b784f4606fcda66eb0059fdf6af07\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>proxy_dependency_receiver</b></td></tr>\n<tr class=\"separator:af80b784f4606fcda66eb0059fdf6af07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00179.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::flow::interface10::internal::untyped_sender Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"a00367.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_sender Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"dynheader\">\nInheritance diagram for tbb::flow::interface10::internal::untyped_sender:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00179.png\" usemap=\"#tbb::flow::interface10::internal::untyped_sender_map\" alt=\"\"/>\n  <map id=\"tbb::flow::interface10::internal::untyped_sender_map\" name=\"tbb::flow::interface10::internal::untyped_sender_map\">\n<area href=\"a00153.html\" title=\"Forward declaration section. \" alt=\"tbb::flow::interface10::sender&lt; T &gt;\" shape=\"rect\" coords=\"0,56,273,80\"/>\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:abaf68da3fb70e918f608d49d19d21861\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"abaf68da3fb70e918f608d49d19d21861\"></a>\ntypedef <a class=\"el\" href=\"a00178.html\">untyped_receiver</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a></td></tr>\n<tr class=\"memdesc:abaf68da3fb70e918f608d49d19d21861\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The successor type for this node. <br/></td></tr>\n<tr class=\"separator:abaf68da3fb70e918f608d49d19d21861\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa17d0e3c683db8ee91589546f00e74d3\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00070.html\">internal::edge_container</a><br class=\"typebreak\"/>\n&lt; <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a></td></tr>\n<tr class=\"memdesc:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">interface to record edges for traversal &amp; deletion <br/></td></tr>\n<tr class=\"separator:aa17d0e3c683db8ee91589546f00e74d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5cf9e1bebbdb2359b70e651d375f49be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5cf9e1bebbdb2359b70e651d375f49be\"></a>\ntypedef <br class=\"typebreak\"/>\nbuilt_successors_type::edge_list_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_list_type</b></td></tr>\n<tr class=\"separator:a5cf9e1bebbdb2359b70e651d375f49be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac741e0b13af8918175b46e5b2aa0de06\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">register_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add a new successor to this node. <br/></td></tr>\n<tr class=\"separator:ac741e0b13af8918175b46e5b2aa0de06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63f227b9cb89c86d9ab42c2c7f541321\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">remove_successor</a> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;r)=0</td></tr>\n<tr class=\"memdesc:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Removes a successor from this node. <br/></td></tr>\n<tr class=\"separator:a63f227b9cb89c86d9ab42c2c7f541321\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7993fddebe9e449b8e71c4f7d402134d\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">try_release</a> ()</td></tr>\n<tr class=\"memdesc:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Releases the reserved item. <br/></td></tr>\n<tr class=\"separator:a7993fddebe9e449b8e71c4f7d402134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1339d605facfdeccbeb3486a6ed4bb28\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">try_consume</a> ()</td></tr>\n<tr class=\"memdesc:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Consumes the reserved item. <br/></td></tr>\n<tr class=\"separator:a1339d605facfdeccbeb3486a6ed4bb28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a181d18c32dd12c8ee24f8b2d94a9ccbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a181d18c32dd12c8ee24f8b2d94a9ccbb\"></a>\nvirtual <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> &amp;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>built_successors</b> ()=0</td></tr>\n<tr class=\"separator:a181d18c32dd12c8ee24f8b2d94a9ccbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27ecc8dacffa726d87f8164acfbad34c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a27ecc8dacffa726d87f8164acfbad34c\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_add_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a27ecc8dacffa726d87f8164acfbad34c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1f814545565252971e13ff957f179085\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1f814545565252971e13ff957f179085\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>internal_delete_built_successor</b> (<a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> &amp;)=0</td></tr>\n<tr class=\"separator:a1f814545565252971e13ff957f179085\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeca51c7f32d3d8a95e01c7dee3bbbaf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aeca51c7f32d3d8a95e01c7dee3bbbaf0\"></a>\nvirtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>copy_successors</b> (successor_list_type &amp;)=0</td></tr>\n<tr class=\"separator:aeca51c7f32d3d8a95e01c7dee3bbbaf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3f082345d5b1f7109883a769f7cc9974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3f082345d5b1f7109883a769f7cc9974\"></a>\nvirtual size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>successor_count</b> ()=0</td></tr>\n<tr class=\"separator:a3f082345d5b1f7109883a769f7cc9974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a41064c305f60fb0431b914573b070615\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:a41064c305f60fb0431b914573b070615\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:a41064c305f60fb0431b914573b070615\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Request an item from the sender. <br/></td></tr>\n<tr class=\"separator:a41064c305f60fb0431b914573b070615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac92c0a8321811fe2a76310f423b7c2ef\"></a>\ntemplate&lt;typename X &gt; </td></tr>\n<tr class=\"memitem:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a> (X &amp;t)</td></tr>\n<tr class=\"memdesc:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reserves an item in the sender. <br/></td></tr>\n<tr class=\"separator:ac92c0a8321811fe2a76310f423b7c2ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba6fcef2dff001f31b6a6296f4f5c16f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba6fcef2dff001f31b6a6296f4f5c16f\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_get_wrapper</b> (void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:aba6fcef2dff001f31b6a6296f4f5c16f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa139dba68fa499db956741fd3b811f6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa139dba68fa499db956741fd3b811f6c\"></a>\nvirtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>try_reserve_wrapper</b> (void *p, bool is_async)=0</td></tr>\n<tr class=\"separator:aa139dba68fa499db956741fd3b811f6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3cdf409b9c27b036b9cb0fd9ae00a4a8\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::predecessor_cache</b></td></tr>\n<tr class=\"separator:a3cdf409b9c27b036b9cb0fd9ae00a4a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a3175bd06b97cbe15f7135fa6e0960d19\"></a>\ntemplate&lt;typename , typename &gt; </td></tr>\n<tr class=\"memitem:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>internal::reservable_predecessor_cache</b></td></tr>\n<tr class=\"separator:a3175bd06b97cbe15f7135fa6e0960d19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00180.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00393.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25d9b19a018725ea8696ac4124a1780b\"></a>\ntypedef tbb::internal::true_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a25d9b19a018725ea8696ac4124a1780b\"></a>\ntypedef tbb::internal::true_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a25d9b19a018725ea8696ac4124a1780b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00181.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Struct Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor< T, false ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00394.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Struct Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a9e9ba0ae863e93a1e02e6a98d5ad4865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9e9ba0ae863e93a1e02e6a98d5ad4865\"></a>\ntypedef tbb::internal::false_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type</b></td></tr>\n<tr class=\"separator:a9e9ba0ae863e93a1e02e6a98d5ad4865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>concurrent_priority_queue.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00182.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::user_abort Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00182.html\">user_abort</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00335.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::user_abort Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exception for user-initiated abort.  \n <a href=\"a00182.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_exception.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::user_abort:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00182.png\" usemap=\"#tbb::user_abort_map\" alt=\"\"/>\n  <map id=\"tbb::user_abort_map\" name=\"tbb::user_abort_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c748ebe62fc8bff1e194adcb21c5a8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1c748ebe62fc8bff1e194adcb21c5a8a\"></a>\nconst char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>what</b> () const __TBB_override  throw ()</td></tr>\n<tr class=\"separator:a1c748ebe62fc8bff1e194adcb21c5a8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Exception for user-initiated abort. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_exception.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00183.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"a00329.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  \n <a href=\"a00183.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::zero_allocator&lt; T, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00183.png\" usemap=\"#tbb::zero_allocator&lt; T, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::zero_allocator&lt; T, Allocator &gt;_map\" name=\"tbb::zero_allocator&lt; T, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00129.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:a62f27899a40c4bfaa6ba4313ffc833ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a62f27899a40c4bfaa6ba4313ffc833ef\"></a>\ntypedef Allocator&lt; T &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>base_allocator_type</b></td></tr>\n<tr class=\"separator:a62f27899a40c4bfaa6ba4313ffc833ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a906f5c2d47fff1bf4fd868a2441752d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a906f5c2d47fff1bf4fd868a2441752d1\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a906f5c2d47fff1bf4fd868a2441752d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb9458462ffca5d8734968862c9c4e6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afb9458462ffca5d8734968862c9c4e6b\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:afb9458462ffca5d8734968862c9c4e6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2a08548bf83e153b40029de72738b60f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a2a08548bf83e153b40029de72738b60f\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a2a08548bf83e153b40029de72738b60f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0afb88e128fc595c62f24e34f445d834\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0afb88e128fc595c62f24e34f445d834\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reference</b></td></tr>\n<tr class=\"separator:a0afb88e128fc595c62f24e34f445d834\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a28180fc12dc69c275983f6400526ba01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a28180fc12dc69c275983f6400526ba01\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_reference&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_reference</b></td></tr>\n<tr class=\"separator:a28180fc12dc69c275983f6400526ba01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8e741b3db82dfdce3f68cfd6d66901ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8e741b3db82dfdce3f68cfd6d66901ce\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::size_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>size_type</b></td></tr>\n<tr class=\"separator:a8e741b3db82dfdce3f68cfd6d66901ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba68dc670e813a0c5c7f06e262b66187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aba68dc670e813a0c5c7f06e262b66187\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::difference_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>difference_type</b></td></tr>\n<tr class=\"separator:aba68dc670e813a0c5c7f06e262b66187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a9080a874dd20d0ca8e404683113990f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9080a874dd20d0ca8e404683113990f2\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>zero_allocator</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a> &amp;a)  throw ()</td></tr>\n<tr class=\"separator:a9080a874dd20d0ca8e404683113990f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab417c217e597c6f412c5a630ba18bc32\"></a>\ntemplate&lt;typename U &gt; </td></tr>\n<tr class=\"memitem:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>zero_allocator</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; U &gt; &amp;a)  throw ()</td></tr>\n<tr class=\"separator:ab417c217e597c6f412c5a630ba18bc32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b9fe1273c2332e3c0b571d7bf1ba615\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1b9fe1273c2332e3c0b571d7bf1ba615\"></a>\npointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>\n<tr class=\"separator:a1b9fe1273c2332e3c0b571d7bf1ba615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename T, template&lt; typename X &gt; class Allocator = tbb_allocator&gt;<br/>\nclass tbb::zero_allocator&lt; T, Allocator &gt;</h3>\n\n<p>Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5. </p>\n<p>The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00184.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#pub-types\">Public Types</a> &#124;\n<a href=\"a00331.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00273.html\">Memory Allocation</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  \n <a href=\"a00184.html#details\">More...</a></p>\n\n<p><code>#include &lt;tbb_allocator.h&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for tbb::zero_allocator&lt; void, Allocator &gt;:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"a00184.png\" usemap=\"#tbb::zero_allocator&lt; void, Allocator &gt;_map\" alt=\"\"/>\n  <map id=\"tbb::zero_allocator&lt; void, Allocator &gt;_map\" name=\"tbb::zero_allocator&lt; void, Allocator &gt;_map\">\n</map>\n </div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00130.html\">rebind</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-types\"></a>\nPublic Types</h2></td></tr>\n<tr class=\"memitem:ad760fbbdefc95c096c94521316e9e091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad760fbbdefc95c096c94521316e9e091\"></a>\ntypedef Allocator&lt; void &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>base_allocator_type</b></td></tr>\n<tr class=\"separator:ad760fbbdefc95c096c94521316e9e091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a392c9d2f51594e7372e5e73e4bf805ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a392c9d2f51594e7372e5e73e4bf805ff\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::value_type&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>value_type</b></td></tr>\n<tr class=\"separator:a392c9d2f51594e7372e5e73e4bf805ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6c02215a540d3f5dd4cb4739bd05bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa6c02215a540d3f5dd4cb4739bd05bcf\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pointer</b></td></tr>\n<tr class=\"separator:aa6c02215a540d3f5dd4cb4739bd05bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0f2fa4e1a995d60f763595ef4b91dd9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0f2fa4e1a995d60f763595ef4b91dd9a\"></a>\ntypedef <br class=\"typebreak\"/>\nbase_allocator_type::const_pointer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>const_pointer</b></td></tr>\n<tr class=\"separator:a0f2fa4e1a995d60f763595ef4b91dd9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;template&lt; typename T &gt; class Allocator&gt;<br/>\nclass tbb::zero_allocator&lt; void, Allocator &gt;</h3>\n\n<p>Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. </p>\n</div><hr/>The documentation for this class was generated from the following file:<ul>\n<li>tbb_allocator.h</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00203.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>flow_graph.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">flow_graph.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The graph related classes and functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">tbb::flow::interface10::null_type</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A generic null type.  <a href=\"a00101.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">tbb::flow::interface10::continue_msg</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">An empty class used for messages that mean \"I'm done\".  <a href=\"a00062.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00090.html\">tbb::flow::interface10::limiter_node&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00138.html\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00157.html\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00039.html\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00136.html\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00025.html\">tbb::flow::interface10::async_msg&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">tbb::flow::interface10::internal::async_storage&lt; T &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Forward declaration section.  <a href=\"a00153.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pure virtual template class that defines a receiver of messages of type T.  <a href=\"a00133.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Base class for receivers of completion messages.  <a href=\"a00063.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrency</b> { <b>unlimited</b> = 0, \n<b>serial</b> = 1\n }</td></tr>\n<tr class=\"memdesc:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br/></td></tr>\n<tr class=\"separator:a7bec4a3445fea3cd5974119730dea98f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a69076d97267af5d3009b43a8edad1342\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a69076d97267af5d3009b43a8edad1342\"></a>\nstatic tbb::task *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb::flow::interface10::combine_tasks</b> (graph &amp;g, tbb::task *left, tbb::task *right)</td></tr>\n<tr class=\"separator:a69076d97267af5d3009b43a8edad1342\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a44f9db9a75974b985b424a8e3a06c1cc\"></a>\ntemplate&lt;typename K , typename T &gt; </td></tr>\n<tr class=\"memitem:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">K&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::flow::key_from_message</b> (const T &amp;t)</td></tr>\n<tr class=\"separator:a44f9db9a75974b985b424a8e3a06c1cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The graph related classes and functions. </p>\n<p>There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applications. </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00208.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>memory_pool.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">memory_pool.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00092.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00093.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-safe growable pool allocator for variable-size requests.  <a href=\"a00091.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a21dc513d4407872bb3b257870c6d77b2\"></a>\ntemplate&lt;typename T , typename U , typename P &gt; </td></tr>\n<tr class=\"memitem:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::interface6::operator==</b> (const memory_pool_allocator&lt; T, P &gt; &amp;a, const memory_pool_allocator&lt; U, P &gt; &amp;b)</td></tr>\n<tr class=\"separator:a21dc513d4407872bb3b257870c6d77b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aed6a6d87d04444c2619b6f0136ab0702\"></a>\ntemplate&lt;typename T , typename U , typename P &gt; </td></tr>\n<tr class=\"memitem:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator&lt; T, P &gt; &amp;a, const memory_pool_allocator&lt; U, P &gt; &amp;b)</td></tr>\n<tr class=\"separator:aed6a6d87d04444c2619b6f0136ab0702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00227.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>scalable_allocator.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalable_allocator.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:a00246\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html\">rml</a></td></tr>\n<tr class=\"memdesc:a00246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The namespace rml contains components of low-level memory pool interface. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">tbb</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph class. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae13d09a0a00d9cae537655207c8560a2\"></a>\ntypedef void *(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::rawAllocType</b> )(intptr_t pool_id, size_t &amp;bytes)</td></tr>\n<tr class=\"separator:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a44f982f3478d462e81a1300dd516cb8e\"></a>\ntypedef int(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>\n<tr class=\"separator:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:abd5aafe33a307bbbe334f0049e625cd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ScalableAllocationResult</b> { <br/>\n&#160;&#160;<b>TBBMALLOC_OK</b>, \n<b>TBBMALLOC_INVALID_PARAM</b>, \n<b>TBBMALLOC_UNSUPPORTED</b>, \n<b>TBBMALLOC_NO_MEMORY</b>, \n<br/>\n&#160;&#160;<b>TBBMALLOC_NO_EFFECT</b>\n<br/>\n }</td></tr>\n<tr class=\"separator:abd5aafe33a307bbbe334f0049e625cd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75085058c147f85d8897858363b6e99c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>AllocationModeParam</b> { <b>TBBMALLOC_USE_HUGE_PAGES</b>, \n<b>USE_HUGE_PAGES</b> = TBBMALLOC_USE_HUGE_PAGES, \n<b>TBBMALLOC_SET_SOFT_HEAP_LIMIT</b>\n }</td></tr>\n<tr class=\"separator:a75085058c147f85d8897858363b6e99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57dd71201713941030ef626baa8fa0eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>ScalableAllocationCmd</b> { <b>TBBMALLOC_CLEAN_ALL_BUFFERS</b>, \n<b>TBBMALLOC_CLEAN_THREAD_BUFFERS</b>\n }</td></tr>\n<tr class=\"separator:a57dd71201713941030ef626baa8fa0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolError</b> { <br/>\n&#160;&#160;<b>POOL_OK</b> = TBBMALLOC_OK, \n<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, \n<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, \n<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, \n<br/>\n&#160;&#160;<b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT\n<br/>\n }</td></tr>\n<tr class=\"separator:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_malloc</a> (size_t size)</td></tr>\n<tr class=\"separator:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_realloc</a> (void *ptr, size_t size)</td></tr>\n<tr class=\"separator:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>\n<tr class=\"separator:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>\n<tr class=\"separator:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_aligned_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_msize</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>\n<tr class=\"separator:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocation_command</a> (int cmd, void *param)</td></tr>\n<tr class=\"separator:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a152cad3c009030ad9364bc1f3ff0c648\"></a>\nMemPoolError&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>\n<tr class=\"separator:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19a32c0a2ff3a0d8c3eeba0ac894f887\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e8b6e757a521a8f2a186b8577aefb98\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>\n<tr class=\"separator:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af9ac1381bacb2cbe1f4bca08e99dd2ee\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>\n<tr class=\"separator:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ac1e82af435d8bef5f7c21506c5f831\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61700754fe0ba9d761fab34ad51e3bc2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a06eff2efabb77248f880b86eecc08c6e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</td></tr>\n<tr class=\"separator:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab747521ef3669775b3310f5bc541919c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab747521ef3669775b3310f5bc541919c\"></a>\nMemoryPool *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rml::pool_identify</b> (void *object)</td></tr>\n<tr class=\"separator:ab747521ef3669775b3310f5bc541919c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a17323bcd620e6e3e4091e2e5568f97d3\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::operator==</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af3fb987bb18adf8384db9c9713b81588\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::operator!=</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00246.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>rml Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rml Namespace Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The namespace rml contains components of low-level memory pool interface.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ae13d09a0a00d9cae537655207c8560a2\"></a>\ntypedef void *(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rawAllocType</b> )(intptr_t pool_id, size_t &amp;bytes)</td></tr>\n<tr class=\"separator:ae13d09a0a00d9cae537655207c8560a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a44f982f3478d462e81a1300dd516cb8e\"></a>\ntypedef int(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>rawFreeType</b> )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</td></tr>\n<tr class=\"separator:a44f982f3478d462e81a1300dd516cb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>MemPoolError</b> { <br/>\n&#160;&#160;<b>POOL_OK</b> = TBBMALLOC_OK, \n<b>INVALID_POLICY</b> = TBBMALLOC_INVALID_PARAM, \n<b>UNSUPPORTED_POLICY</b> = TBBMALLOC_UNSUPPORTED, \n<b>NO_MEMORY</b> = TBBMALLOC_NO_MEMORY, \n<br/>\n&#160;&#160;<b>NO_EFFECT</b> = TBBMALLOC_NO_EFFECT\n<br/>\n }</td></tr>\n<tr class=\"separator:a09eea006328e62aac7cbbbd9a3fb7958\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a152cad3c009030ad9364bc1f3ff0c648\"></a>\nMemPoolError&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_create_v1</b> (intptr_t pool_id, const <a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a> *policy, rml::MemoryPool **pool)</td></tr>\n<tr class=\"separator:a152cad3c009030ad9364bc1f3ff0c648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a19a32c0a2ff3a0d8c3eeba0ac894f887\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_destroy</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a19a32c0a2ff3a0d8c3eeba0ac894f887\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5e8b6e757a521a8f2a186b8577aefb98\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>\n<tr class=\"separator:a5e8b6e757a521a8f2a186b8577aefb98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af9ac1381bacb2cbe1f4bca08e99dd2ee\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>\n<tr class=\"separator:af9ac1381bacb2cbe1f4bca08e99dd2ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a8ac1e82af435d8bef5f7c21506c5f831\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a8ac1e82af435d8bef5f7c21506c5f831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"></a>\nvoid *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:a3b2c69d3eae3f7bdcf36df5af9b2eb2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a61700754fe0ba9d761fab34ad51e3bc2\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_reset</b> (MemoryPool *memPool)</td></tr>\n<tr class=\"separator:a61700754fe0ba9d761fab34ad51e3bc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a06eff2efabb77248f880b86eecc08c6e\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_free</b> (MemoryPool *memPool, void *object)</td></tr>\n<tr class=\"separator:a06eff2efabb77248f880b86eecc08c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab747521ef3669775b3310f5bc541919c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ab747521ef3669775b3310f5bc541919c\"></a>\nMemoryPool *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pool_identify</b> (void *object)</td></tr>\n<tr class=\"separator:ab747521ef3669775b3310f5bc541919c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The namespace rml contains components of low-level memory pool interface. </p>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00249.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Namespace Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>The graph class.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Block of space aligned sufficiently to construct an array T with N elements.  <a href=\"a00022.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">atomic</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Primary template for atomic.  <a href=\"a00027.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00028.html\">atomic&lt; void * &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  <a href=\"a00028.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A range over which to iterate.  <a href=\"a00034.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 2-dimensional range that models the Range concept.  <a href=\"a00035.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 3-dimensional range that models the Range concept.  <a href=\"a00036.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00041.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00042.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">combinable</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-local storage with optional reduction.  <a href=\"a00047.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe blocking concurrent bounded queue.  <a href=\"a00049.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Concurrent vector container.  <a href=\"a00060.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrapper around the platform's native lock.  <a href=\"a00097.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A mutex which does nothing.  <a href=\"a00099.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A rw mutex which does nothing.  <a href=\"a00100.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the initial scan is being performed.  <a href=\"a00118.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the final scan is being performed.  <a href=\"a00076.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over a stream, with optional addition of more work.  <a href=\"a00116.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline.  <a href=\"a00074.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline served by a user thread.  <a href=\"a00172.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">pipeline</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A processing pipeline that applies filters to items.  <a href=\"a00117.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing mutex with local-only spinning.  <a href=\"a00120.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing reader-writer mutex with local-only spinning.  <a href=\"a00121.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mutex that allows recursive mutex acquisition.  <a href=\"a00135.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A lock that occupies a single byte.  <a href=\"a00154.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href=\"a00155.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00162.html\">task_handle</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00159.html\">task_group</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class delimiting the scope of task scheduler activity.  <a href=\"a00164.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00167.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">tbb_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00168.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00183.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">zero_allocator&lt; void, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00184.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for concurrent containers.  <a href=\"a00030.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for PPL locks.  <a href=\"a00086.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">user_abort</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for user-initiated abort.  <a href=\"a00182.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a>.  <a href=\"a00095.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a>.  <a href=\"a00088.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  <a href=\"a00169.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This class is used by TBB to propagate information about unhandled exceptions into the root thread.  <a href=\"a00046.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  <a href=\"a00096.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">tick_count</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Absolute timestamp.  <a href=\"a00177.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"abd2b5f25b51182dd2826ecd4d46d98a9\"></a>\ntemplate&lt;typename Value , unsigned int N&gt; </td></tr>\n<tr class=\"memitem:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>blocked_rangeNd</b> = <a class=\"el\" href=\"a00037.html\">internal::blocked_rangeNd_impl</a>&lt; Value, N &gt;</td></tr>\n<tr class=\"separator:abd2b5f25b51182dd2826ecd4d46d98a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a889d8f126388fdc24c597d195a4d7028\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a889d8f126388fdc24c597d195a4d7028\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00064.html\">internal::critical_section_v4</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>critical_section</b></td></tr>\n<tr class=\"separator:a889d8f126388fdc24c597d195a4d7028\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; interface7::internal::x86_eliding_mutex, <br class=\"typebreak\"/>\nfalse &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">speculative_spin_mutex</a></td></tr>\n<tr class=\"memdesc:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin mutex with speculative lock acquisition.  <a href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cc3d02744cab8ac389919806d47e417\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6cc3d02744cab8ac389919806d47e417\"></a>\ntypedef <a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_rw_mutex</b></td></tr>\n<tr class=\"separator:a6cc3d02744cab8ac389919806d47e417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1a268320974a3357e9609a2f98be5090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1a268320974a3357e9609a2f98be5090\"></a>\ntypedef std::size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>stack_size_type</b></td></tr>\n<tr class=\"separator:a1a268320974a3357e9609a2f98be5090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af58de4ab3200dd2bd621f052c6f677e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"af58de4ab3200dd2bd621f052c6f677e4\"></a>\ntypedef <br class=\"typebreak\"/>\n<a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_observer</b></td></tr>\n<tr class=\"separator:af58de4ab3200dd2bd621f052c6f677e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7805ca254302ff88b566f7dcde7e56b0\"></a>\ntypedef <a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a></td></tr>\n<tr class=\"memdesc:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Users reference thread class by name tbb_thread. <br/></td></tr>\n<tr class=\"separator:a7805ca254302ff88b566f7dcde7e56b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">memory_semantics</a> { <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">full_fence</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">acquire</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">release</a>, \n<a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">relaxed</a>\n }</td></tr>\n<tr class=\"memdesc:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specifies memory semantics.  <a href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">More...</a><br/></td></tr>\n<tr class=\"separator:adb86d08473679d6fe0eabcdc766ffe3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, \n<b>ets_no_key</b>\n }</td></tr>\n<tr class=\"memdesc:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">enum for selecting between single key and key-per-instance versions <br/></td></tr>\n<tr class=\"separator:ac5bcb6154c8307fa9f97806afddf2288\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4454db821441ca68bad263d82c40fb7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group_status</b> { <b>not_complete</b>, \n<b>complete</b>, \n<b>canceled</b>\n }</td></tr>\n<tr class=\"separator:a4454db821441ca68bad263d82c40fb7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a5fefe7ed201b920d3fd6c390849c1ccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5fefe7ed201b920d3fd6c390849c1ccf\"></a>\n&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">__TBB_DECL_ATOMIC_ALT</a>(unsigned</td></tr>\n<tr class=\"separator:a5fefe7ed201b920d3fd6c390849c1ccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59425abdcb421136e9f5954cfb975e5f\"></a>\nsize_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">__TBB_DECL_ATOMIC_ALT</a> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template&lt; typename T &gt; struct <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T * &gt;</td></tr>\n<tr class=\"memdesc:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Specialization for atomic&lt;T*&gt; with arithmetic and operator-&gt;. <br/></td></tr>\n<tr class=\"separator:a59425abdcb421136e9f5954cfb975e5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aed82c77b389b208a1c27012a2fc0b5fd\"></a>\ntemplate&lt;memory_semantics M, typename T &gt; </td></tr>\n<tr class=\"memitem:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>load</b> (const <a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;a)</td></tr>\n<tr class=\"separator:aed82c77b389b208a1c27012a2fc0b5fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a219b97248f55c909aa3d84e43934b105\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a219b97248f55c909aa3d84e43934b105\"></a>\ntemplate&lt;memory_semantics M, typename T &gt; </td></tr>\n<tr class=\"memitem:a219b97248f55c909aa3d84e43934b105\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>store</b> (<a class=\"el\" href=\"a00027.html\">atomic</a>&lt; T &gt; &amp;a, T value)</td></tr>\n<tr class=\"separator:a219b97248f55c909aa3d84e43934b105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a49a6826cf4fb8845d26d8d1f1ad0b5fa\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a49a6826cf4fb8845d26d8d1f1ad0b5fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"afdaaf3f3248efc804c6f6fe35855704d\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:afdaaf3f3248efc804c6f6fe35855704d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1db9470dd2871cb7394ab262dca2051a\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A1 , typename A2 &gt; </td></tr>\n<tr class=\"memitem:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a1db9470dd2871cb7394ab262dca2051a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a05667bcb12f763124fcda402d3720c6a\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A1 , typename A2 &gt; </td></tr>\n<tr class=\"memitem:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a05667bcb12f763124fcda402d3720c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a16dc40ac2badc8b36b8cc70f92801b76\"></a>\ntemplate&lt;typename Key , typename T , typename HashCompare , typename A &gt; </td></tr>\n<tr class=\"memitem:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>swap</b> (concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;a, concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;b)</td></tr>\n<tr class=\"separator:a16dc40ac2badc8b36b8cc70f92801b76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a79ecee2d23f2486c03e720ab9e3ac36c\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a79ecee2d23f2486c03e720ab9e3ac36c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ab7258c4acabadf94d03dc62e29396ea0\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:ab7258c4acabadf94d03dc62e29396ea0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a1523d0389a8cbda80c17ae4f45caa3a6\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a1523d0389a8cbda80c17ae4f45caa3a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78cfed58bfde865b68859beb54805019\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a78cfed58bfde865b68859beb54805019\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:a78cfed58bfde865b68859beb54805019\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&gt;</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a78cfed58bfde865b68859beb54805019\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac6009f009cd331952d8944bcc9733375\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ac6009f009cd331952d8944bcc9733375\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:ac6009f009cd331952d8944bcc9733375\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&lt;=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:ac6009f009cd331952d8944bcc9733375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aa0d82e59919a1f2c7caa06d061b2480f\"></a>\ntemplate&lt;typename T , class A1 , class A2 &gt; </td></tr>\n<tr class=\"memitem:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator&gt;=</b> (const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:aa0d82e59919a1f2c7caa06d061b2480f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a4cd91084f08db8c2d23c6a0362e0c441\"></a>\ntemplate&lt;typename T , class A &gt; </td></tr>\n<tr class=\"memitem:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A &gt; &amp;a, <a class=\"el\" href=\"a00060.html\">concurrent_vector</a>&lt; T, A &gt; &amp;b)</td></tr>\n<tr class=\"separator:a4cd91084f08db8c2d23c6a0362e0c441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a17323bcd620e6e3e4091e2e5568f97d3\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a17323bcd620e6e3e4091e2e5568f97d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af3fb987bb18adf8384db9c9713b81588\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00140.html\">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af3fb987bb18adf8384db9c9713b81588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaef1698b222ba9312ab24dcdcd98bbd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aaef1698b222ba9312ab24dcdcd98bbd8\"></a>\nbool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>is_current_task_group_canceling</b> ()</td></tr>\n<tr class=\"separator:aaef1698b222ba9312ab24dcdcd98bbd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"aef8de49be152674baa036585a6fdb3cd\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; typename <br class=\"typebreak\"/>\ninternal::strip&lt; F &gt;::type &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>make_task</b> (F &amp;&amp;f)</td></tr>\n<tr class=\"separator:aef8de49be152674baa036585a6fdb3cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a6c291402bcc0ba9263cf08b76faf7a2c\"></a>\ntemplate&lt;class F &gt; </td></tr>\n<tr class=\"memitem:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a>&lt; F &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>make_task</b> (const F &amp;f)</td></tr>\n<tr class=\"separator:a6c291402bcc0ba9263cf08b76faf7a2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"af1595d1bfc4f7be923c17b4ee5c556ae\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:af1595d1bfc4f7be923c17b4ee5c556ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a82ff968904aaa1bb0e2152f590c47be6\"></a>\ntemplate&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; T &gt; &amp;, const <a class=\"el\" href=\"a00167.html\">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>\n<tr class=\"separator:a82ff968904aaa1bb0e2152f590c47be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a7bf465e2f6730e2cea0c9531bec9fb2f\"></a>\ntemplate&lt;typename T1 , template&lt; typename X1 &gt; class B1, typename T2 , template&lt; typename X2 &gt; class B2&gt; </td></tr>\n<tr class=\"memitem:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator==</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a7bf465e2f6730e2cea0c9531bec9fb2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a606762cf7c614cb5a1631955938737cd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"a606762cf7c614cb5a1631955938737cd\"></a>\ntemplate&lt;typename T1 , template&lt; typename X1 &gt; class B1, typename T2 , template&lt; typename X2 &gt; class B2&gt; </td></tr>\n<tr class=\"memitem:a606762cf7c614cb5a1631955938737cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>operator!=</b> (const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class=\"el\" href=\"a00183.html\">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>\n<tr class=\"separator:a606762cf7c614cb5a1631955938737cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">TBB_runtime_interface_version</a> ()</td></tr>\n<tr class=\"memdesc:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The function returns the interface version of the TBB shared library being used.  <a href=\"#ade8a8bc300d5ef09d38cbfb8baff5cd2\">More...</a><br/></td></tr>\n<tr class=\"separator:ade8a8bc300d5ef09d38cbfb8baff5cd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a467930903ce9b7c240c4ad8f0fb8ae3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a467930903ce9b7c240c4ad8f0fb8ae3d\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>swap</b> (<a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a> &amp;t1, <a class=\"el\" href=\"a00171.html\">internal::tbb_thread_v3</a> &amp;t2) __TBB_NOEXCEPT(true)</td></tr>\n<tr class=\"separator:a467930903ce9b7c240c4ad8f0fb8ae3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac41903d6b80e61bd6c605412e7820e08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ac41903d6b80e61bd6c605412e7820e08\"></a>\nvoid&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>move</b> (<a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a> &amp;t1, <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb_thread</a> &amp;t2)</td></tr>\n<tr class=\"separator:ac41903d6b80e61bd6c605412e7820e08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa037c1f149250d61cd2fad4541a5e6cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aa037c1f149250d61cd2fad4541a5e6cb\"></a>\n<a class=\"el\" href=\"a00087.html\">tick_count::interval_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>operator-</b> (const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t1, const <a class=\"el\" href=\"a00177.html\">tick_count</a> &amp;t0)</td></tr>\n<tr class=\"separator:aa037c1f149250d61cd2fad4541a5e6cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_for</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00004.html\">parallel_for Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner.  <a href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner.  <a href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">More...</a><br/></td></tr>\n<tr class=\"separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad6c4b06f96ae33cefe78235841791902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner.  <a href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">More...</a><br/></td></tr>\n<tr class=\"separator:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner.  <a href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">More...</a><br/></td></tr>\n<tr class=\"separator:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner.  <a href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">parallel_for</a> (const Range &amp;range, const Body &amp;body, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga93a621202db94665144de38c0b09bdad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner and user-supplied context.  <a href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">More...</a><br/></td></tr>\n<tr class=\"separator:ga93a621202db94665144de38c0b09bdad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner and user-supplied context.  <a href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner and user-supplied context.  <a href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">More...</a><br/></td></tr>\n<tr class=\"separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_for_each</div></td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac9225af45fd0468843b3fc32608c71de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from [first, last) interval using user-supplied context.  <a href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">More...</a><br/></td></tr>\n<tr class=\"separator:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">parallel_for_each</a> (Range &amp;rng, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga72131543fd218b67dbb048b768d534e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from rng using user-supplied context.  <a href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">parallel_for_each</a> (const Range &amp;rng, const Function &amp;f, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from const rng user-supplied context.  <a href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">More...</a><br/></td></tr>\n<tr class=\"separator:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga21c63dee10188196a2f0514afa81ff1f\"></a>\ntemplate&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga21c63dee10188196a2f0514afa81ff1f\">parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5868cd01f2126b139ab5809f64632db1\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5868cd01f2126b139ab5809f64632db1\">parallel_for_each</a> (Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b\">parallel_for_each</a> (const Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_invoke</div></td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F0 , typename F1 , typename... F&gt; </td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">parallel_invoke</a> (F0 &amp;&amp;f0, F1 &amp;&amp;f1, F &amp;&amp;...f)</td></tr>\n<tr class=\"memdesc:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga14459dcbcd631194df803b155a7f610b\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaaea3f3a8883128afb596a963e856277f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga74932e64ede5047387108fa45f1af96f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaefc1ba8f73cbdd094575f6db454fc6b5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga3f02dfbb94238b2cf2ef8f20844b03af\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad8c1220bbd59e3b8e7bbcdcfdda8047e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5ee83a66397ee0b15c77756cb5e5168e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1af92ebd06f6cdf5ee668b1fe62657bd\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga65846bc3b2f63ed1448b6cdfea9e1c80\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga6b1c36ece1d3950677dd01ef0863648c\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1)</td></tr>\n<tr class=\"separator:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa979656a4c207782b74800c6c42982f5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2)</td></tr>\n<tr class=\"separator:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga219cb8061b7cf5454c0bc4d67cff1e34\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3)</td></tr>\n<tr class=\"separator:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8319ee980cd7cfb03f12ffc2a5ea4895\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4)</td></tr>\n<tr class=\"separator:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga295daf6f7394fba29a979b914be09fc6\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5)</td></tr>\n<tr class=\"separator:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga7652a01622a2f28df1e0edf40b691190\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6)</td></tr>\n<tr class=\"separator:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gadd8826371866c58e41dee3546c35d2c8\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7)</td></tr>\n<tr class=\"separator:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaeca8b72507d67dd023dae728bdc89896\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8)</td></tr>\n<tr class=\"separator:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga17c9f95fac24b2b7b62f325f511ee7be\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9)</td></tr>\n<tr class=\"separator:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_reduce</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00006.html\">parallel_reduce Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">More...</a><br/></td></tr>\n<tr class=\"separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">More...</a><br/></td></tr>\n<tr class=\"separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">More...</a><br/></td></tr>\n<tr class=\"separator:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">More...</a><br/></td></tr>\n<tr class=\"separator:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">More...</a><br/></td></tr>\n<tr class=\"separator:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaa872944de4b5f753f74b874707bce379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa872944de4b5f753f74b874707bce379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">More...</a><br/></td></tr>\n<tr class=\"separator:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">More...</a><br/></td></tr>\n<tr class=\"separator:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf1c05004d0970bd199518f568779429a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1c05004d0970bd199518f568779429a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:ga24758356e0e29013807ab12127d06f7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, <a class=\"el\" href=\"a00161.html\">task_group_context</a> &amp;context)</td></tr>\n<tr class=\"memdesc:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_scan</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00010.html\">parallel_scan Body</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">More...</a><br/></td></tr>\n<tr class=\"separator:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join)</td></tr>\n<tr class=\"memdesc:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gadbc46558909fe3720e95a18241dda603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">More...</a><br/></td></tr>\n<tr class=\"separator:gadbc46558909fe3720e95a18241dda603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">parallel_sort</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p>See also requirements on <a class=\"el\" href=\"a00012.html\">iterators for parallel_sort</a>. </p>\n</div></td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator , typename Compare &gt; </td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) using the given comparator.  <a href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">More...</a><br/></td></tr>\n<tr class=\"separator:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator &gt; </td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>\n<tr class=\"memdesc:ga73b58ac9249f49587d0b081c152af551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">More...</a><br/></td></tr>\n<tr class=\"separator:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">parallel_sort</a> (Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng using the given comparator.  <a href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">More...</a><br/></td></tr>\n<tr class=\"separator:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">parallel_sort</a> (const Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga541b2fd91e88842a7b823161107779e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng using the given comparator.  <a href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">parallel_sort</a> (Range &amp;rng)</td></tr>\n<tr class=\"memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">parallel_sort</a> (const Range &amp;rng)</td></tr>\n<tr class=\"memdesc:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">parallel_sort</a> (T *begin, T *end)</td></tr>\n<tr class=\"memdesc:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>  <a href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The graph class. </p>\n<p>The namespace tbb contains all components of the library. </p>\n</div><h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb::memory_semantics</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Specifies memory semantics. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\"></a>full_fence</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Sequential consistency. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\"></a>acquire</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Acquire. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\"></a>release</em>&nbsp;</td><td class=\"fielddoc\">\n<p>Release. </p>\n</td></tr>\n<tr><td class=\"fieldname\"><em><a class=\"anchor\" id=\"adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\"></a>relaxed</em>&nbsp;</td><td class=\"fielddoc\">\n<p>No ordering. </p>\n</td></tr>\n</table>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ade8a8bc300d5ef09d38cbfb8baff5cd2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The function returns the interface version of the TBB shared library being used. </p>\n<p>The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00271.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Algorithms</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Algorithms</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A range over which to iterate.  <a href=\"a00034.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 2-dimensional range that models the Range concept.  <a href=\"a00035.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A 3-dimensional range that models the Range concept.  <a href=\"a00036.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the initial scan is being performed.  <a href=\"a00118.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to indicate that the final scan is being performed.  <a href=\"a00076.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over a stream, with optional addition of more work.  <a href=\"a00116.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline.  <a href=\"a00074.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A stage in a pipeline served by a user thread.  <a href=\"a00172.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A processing pipeline that applies filters to items.  <a href=\"a00117.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_for</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp020f371880777e82219a69f8a512e874\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00004.html\">parallel_for Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa8444c29dc4d2e527a1036717d109aef\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>\n<tr class=\"memdesc:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner.  <a href=\"#gaa8444c29dc4d2e527a1036717d109aef\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa8444c29dc4d2e527a1036717d109aef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner.  <a href=\"#ga9722d2bc7e5edb4fae9f3b55268a1ecc\">More...</a><br/></td></tr>\n<tr class=\"separator:ga9722d2bc7e5edb4fae9f3b55268a1ecc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad6c4b06f96ae33cefe78235841791902\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad6c4b06f96ae33cefe78235841791902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner.  <a href=\"#gad6c4b06f96ae33cefe78235841791902\">More...</a><br/></td></tr>\n<tr class=\"separator:gad6c4b06f96ae33cefe78235841791902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner.  <a href=\"#ga14ae8670bd55620f906aa06e073bd225\">More...</a><br/></td></tr>\n<tr class=\"separator:ga14ae8670bd55620f906aa06e073bd225\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf3d39e372d825bf54283b5ceafa90057\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner.  <a href=\"#gaf3d39e372d825bf54283b5ceafa90057\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf3d39e372d825bf54283b5ceafa90057\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga93a621202db94665144de38c0b09bdad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga93a621202db94665144de38c0b09bdad\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga93a621202db94665144de38c0b09bdad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with default partitioner and user-supplied context.  <a href=\"#ga93a621202db94665144de38c0b09bdad\">More...</a><br/></td></tr>\n<tr class=\"separator:ga93a621202db94665144de38c0b09bdad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with simple partitioner and user-supplied context.  <a href=\"#ga5b7fab9d6ffe7a9345e9349a5a007bd4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5b7fab9d6ffe7a9345e9349a5a007bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4c9935d8710a5cf786a92f3522ab2976\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with auto_partitioner and user-supplied context.  <a href=\"#ga4c9935d8710a5cf786a92f3522ab2976\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4c9935d8710a5cf786a92f3522ab2976\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga4bb3d8cf616632476ca923eb056ee07d\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with static_partitioner and user-supplied context.  <a href=\"#ga4bb3d8cf616632476ca923eb056ee07d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga4bb3d8cf616632476ca923eb056ee07d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration over range with affinity_partitioner and user-supplied context.  <a href=\"#ga62b1a9ac304ba1eb4f87ab8cc18dd281\">More...</a><br/></td></tr>\n<tr class=\"separator:ga62b1a9ac304ba1eb4f87ab8cc18dd281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_for_each</h2></td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac9225af45fd0468843b3fc32608c71de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from [first, last) interval using user-supplied context.  <a href=\"#gac9225af45fd0468843b3fc32608c71de\">More...</a><br/></td></tr>\n<tr class=\"separator:gac9225af45fd0468843b3fc32608c71de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">tbb::parallel_for_each</a> (Range &amp;rng, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga72131543fd218b67dbb048b768d534e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from rng using user-supplied context.  <a href=\"#ga72131543fd218b67dbb048b768d534e4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga72131543fd218b67dbb048b768d534e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad7d0702d16fbd7554584ab735eed39ba\">tbb::parallel_for_each</a> (const Range &amp;rng, const Function &amp;f, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calls function f for all items from const rng user-supplied context.  <a href=\"#gad7d0702d16fbd7554584ab735eed39ba\">More...</a><br/></td></tr>\n<tr class=\"separator:gad7d0702d16fbd7554584ab735eed39ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga21c63dee10188196a2f0514afa81ff1f\"></a>\ntemplate&lt;typename Iterator , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga21c63dee10188196a2f0514afa81ff1f\">tbb::parallel_for_each</a> (Iterator first, Iterator last, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga21c63dee10188196a2f0514afa81ff1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5868cd01f2126b139ab5809f64632db1\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5868cd01f2126b139ab5809f64632db1\">tbb::parallel_for_each</a> (Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga5868cd01f2126b139ab5809f64632db1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"></a>\ntemplate&lt;typename Range , typename Function &gt; </td></tr>\n<tr class=\"memitem:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga33463c8b0d0104cf9d9e0f9cb3c0b26b\">tbb::parallel_for_each</a> (const Range &amp;rng, const Function &amp;f)</td></tr>\n<tr class=\"memdesc:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Uses default context. <br/></td></tr>\n<tr class=\"separator:ga33463c8b0d0104cf9d9e0f9cb3c0b26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_invoke</h2></td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename F0 , typename F1 , typename... F&gt; </td></tr>\n<tr class=\"memitem:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb::parallel_invoke</a> (F0 &amp;&amp;f0, F1 &amp;&amp;f1, F &amp;&amp;...f)</td></tr>\n<tr class=\"memdesc:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executes a list of tasks in parallel and waits for all tasks to complete.  <a href=\"#ga3c6fe4bf1076c82132e666fb545451cd\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3c6fe4bf1076c82132e666fb545451cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga14459dcbcd631194df803b155a7f610b\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga14459dcbcd631194df803b155a7f610b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaaea3f3a8883128afb596a963e856277f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaaea3f3a8883128afb596a963e856277f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga74932e64ede5047387108fa45f1af96f\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga74932e64ede5047387108fa45f1af96f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaefc1ba8f73cbdd094575f6db454fc6b5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gaefc1ba8f73cbdd094575f6db454fc6b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga3f02dfbb94238b2cf2ef8f20844b03af\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga3f02dfbb94238b2cf2ef8f20844b03af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad8c1220bbd59e3b8e7bbcdcfdda8047e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:gad8c1220bbd59e3b8e7bbcdcfdda8047e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5ee83a66397ee0b15c77756cb5e5168e\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga5ee83a66397ee0b15c77756cb5e5168e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1af92ebd06f6cdf5ee668b1fe62657bd\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga1af92ebd06f6cdf5ee668b1fe62657bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga65846bc3b2f63ed1448b6cdfea9e1c80\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9, <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a> &amp;context)</td></tr>\n<tr class=\"separator:ga65846bc3b2f63ed1448b6cdfea9e1c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga6b1c36ece1d3950677dd01ef0863648c\"></a>\ntemplate&lt;typename F0 , typename F1 &gt; </td></tr>\n<tr class=\"memitem:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1)</td></tr>\n<tr class=\"separator:ga6b1c36ece1d3950677dd01ef0863648c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa979656a4c207782b74800c6c42982f5\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 &gt; </td></tr>\n<tr class=\"memitem:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2)</td></tr>\n<tr class=\"separator:gaa979656a4c207782b74800c6c42982f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga219cb8061b7cf5454c0bc4d67cff1e34\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 &gt; </td></tr>\n<tr class=\"memitem:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3)</td></tr>\n<tr class=\"separator:ga219cb8061b7cf5454c0bc4d67cff1e34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8319ee980cd7cfb03f12ffc2a5ea4895\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 &gt; </td></tr>\n<tr class=\"memitem:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4)</td></tr>\n<tr class=\"separator:ga8319ee980cd7cfb03f12ffc2a5ea4895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga295daf6f7394fba29a979b914be09fc6\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 &gt; </td></tr>\n<tr class=\"memitem:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5)</td></tr>\n<tr class=\"separator:ga295daf6f7394fba29a979b914be09fc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga7652a01622a2f28df1e0edf40b691190\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 &gt; </td></tr>\n<tr class=\"memitem:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6)</td></tr>\n<tr class=\"separator:ga7652a01622a2f28df1e0edf40b691190\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gadd8826371866c58e41dee3546c35d2c8\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 &gt; </td></tr>\n<tr class=\"memitem:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7)</td></tr>\n<tr class=\"separator:gadd8826371866c58e41dee3546c35d2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaeca8b72507d67dd023dae728bdc89896\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 &gt; </td></tr>\n<tr class=\"memitem:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8)</td></tr>\n<tr class=\"separator:gaeca8b72507d67dd023dae728bdc89896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga17c9f95fac24b2b7b62f325f511ee7be\"></a>\ntemplate&lt;typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 &gt; </td></tr>\n<tr class=\"memitem:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>tbb::parallel_invoke</b> (const F0 &amp;f0, const F1 &amp;f1, const F2 &amp;f2, const F3 &amp;f3, const F4 &amp;f4, const F5 &amp;f5, const F6 &amp;f6, const F7 &amp;f7, const F8 &amp;f8, const F9 &amp;f9)</td></tr>\n<tr class=\"separator:ga17c9f95fac24b2b7b62f325f511ee7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_reduce</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp949e4773fffd16cb2d32f76af48627d2\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00006.html\">parallel_reduce Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7b1ce9568e0a0efe1bd2d55677bc6687\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"#ga7b1ce9568e0a0efe1bd2d55677bc6687\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7b1ce9568e0a0efe1bd2d55677bc6687\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"#gaebb92b593827f9c3f5e1f8ee2f7d5f82\">More...</a><br/></td></tr>\n<tr class=\"separator:gaebb92b593827f9c3f5e1f8ee2f7d5f82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3011e7266fb1e43d307060fe75be2c6e\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"#ga3011e7266fb1e43d307060fe75be2c6e\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3011e7266fb1e43d307060fe75be2c6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf15a4b0e2174dce3a12b70a89bbcdc63\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"#gaf15a4b0e2174dce3a12b70a89bbcdc63\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf15a4b0e2174dce3a12b70a89bbcdc63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6e83e121490df24fa5893b14e68f5e2a\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"#ga6e83e121490df24fa5893b14e68f5e2a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6e83e121490df24fa5893b14e68f5e2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac57281bea03450ccb2d098ee8c7ab697\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"#gac57281bea03450ccb2d098ee8c7ab697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac57281bea03450ccb2d098ee8c7ab697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5f3ebf50ab7f5e53fd936817c866f7be\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"#ga5f3ebf50ab7f5e53fd936817c866f7be\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5f3ebf50ab7f5e53fd936817c866f7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf049e6d185c38c2d9e153b0edd3a9015\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"#gaf049e6d185c38c2d9e153b0edd3a9015\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf049e6d185c38c2d9e153b0edd3a9015\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga5df3f3a9618fd35931107819cb43fce6\">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"#ga5df3f3a9618fd35931107819cb43fce6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga5df3f3a9618fd35931107819cb43fce6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and default partitioner.  <a href=\"#ga1c9b66fa25cadee9ca3bff75a6609b05\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1c9b66fa25cadee9ca3bff75a6609b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and simple_partitioner.  <a href=\"#ga0b22fd1de0e8bbaf46587d3c63a1ed93\">More...</a><br/></td></tr>\n<tr class=\"separator:ga0b22fd1de0e8bbaf46587d3c63a1ed93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga56e6b6e2eee521f532c00d855280be69\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and auto_partitioner.  <a href=\"#ga56e6b6e2eee521f532c00d855280be69\">More...</a><br/></td></tr>\n<tr class=\"separator:ga56e6b6e2eee521f532c00d855280be69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac0d4eb5ab127b185a92720eff1136fa8\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and static_partitioner.  <a href=\"#gac0d4eb5ab127b185a92720eff1136fa8\">More...</a><br/></td></tr>\n<tr class=\"separator:gac0d4eb5ab127b185a92720eff1136fa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac26c35d1983e7ac2ab003cc8e49dd7e6\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction and affinity_partitioner.  <a href=\"#gac26c35d1983e7ac2ab003cc8e49dd7e6\">More...</a><br/></td></tr>\n<tr class=\"separator:gac26c35d1983e7ac2ab003cc8e49dd7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga518ef2653004d60319bdfc1c6bce86b6\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, simple partitioner and user-supplied context.  <a href=\"#ga518ef2653004d60319bdfc1c6bce86b6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga518ef2653004d60319bdfc1c6bce86b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24ba50caf5a7c32cbd38912508cb69a4\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, auto_partitioner and user-supplied context.  <a href=\"#ga24ba50caf5a7c32cbd38912508cb69a4\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24ba50caf5a7c32cbd38912508cb69a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1507205a91a8fd26bd7d9bbcb74ad98b\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, static_partitioner and user-supplied context.  <a href=\"#ga1507205a91a8fd26bd7d9bbcb74ad98b\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1507205a91a8fd26bd7d9bbcb74ad98b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga367a8e77c4dac3f8764785afdc6c9299\">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with reduction, affinity_partitioner and user-supplied context.  <a href=\"#ga367a8e77c4dac3f8764785afdc6c9299\">More...</a><br/></td></tr>\n<tr class=\"separator:ga367a8e77c4dac3f8764785afdc6c9299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gaa872944de4b5f753f74b874707bce379\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaa872944de4b5f753f74b874707bce379\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaa872944de4b5f753f74b874707bce379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"#gaa872944de4b5f753f74b874707bce379\">More...</a><br/></td></tr>\n<tr class=\"separator:gaa872944de4b5f753f74b874707bce379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga1b1907e38efdefdce193ff289e18e86a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"#ga1b1907e38efdefdce193ff289e18e86a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga1b1907e38efdefdce193ff289e18e86a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga361201f81b4ec7b86f81b579d2db647a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"#ga361201f81b4ec7b86f81b579d2db647a\">More...</a><br/></td></tr>\n<tr class=\"separator:ga361201f81b4ec7b86f81b579d2db647a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadc5031d9c9fbab8160639f6ca1505cff\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"#gadc5031d9c9fbab8160639f6ca1505cff\">More...</a><br/></td></tr>\n<tr class=\"separator:gadc5031d9c9fbab8160639f6ca1505cff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8710b9baa5067e2391fca1026a5a2c03\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, Body &amp;body, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"#ga8710b9baa5067e2391fca1026a5a2c03\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8710b9baa5067e2391fca1026a5a2c03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>\n<tr class=\"memdesc:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and default simple partitioner.  <a href=\"#ga7f69e6a632acb51ed26a43ebd331f349\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7f69e6a632acb51ed26a43ebd331f349\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gad9f444ac5712fe11053e9ce6b147640a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and simple partitioner.  <a href=\"#gad9f444ac5712fe11053e9ce6b147640a\">More...</a><br/></td></tr>\n<tr class=\"separator:gad9f444ac5712fe11053e9ce6b147640a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gaf1c05004d0970bd199518f568779429a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1c05004d0970bd199518f568779429a\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gaf1c05004d0970bd199518f568779429a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction and static partitioner.  <a href=\"#gaf1c05004d0970bd199518f568779429a\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1c05004d0970bd199518f568779429a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga69b4eea059a62cbbf409cbad02b70bfa\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.  <a href=\"#ga69b4eea059a62cbbf409cbad02b70bfa\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69b4eea059a62cbbf409cbad02b70bfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga24758356e0e29013807ab12127d06f7d\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:ga24758356e0e29013807ab12127d06f7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.  <a href=\"#ga24758356e0e29013807ab12127d06f7d\">More...</a><br/></td></tr>\n<tr class=\"separator:ga24758356e0e29013807ab12127d06f7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </td></tr>\n<tr class=\"memitem:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gac3c66b6e36066e270e4d27ad41e33697\">tbb::parallel_deterministic_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const static_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>\n<tr class=\"memdesc:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel iteration with deterministic reduction, static partitioner and user-supplied context.  <a href=\"#gac3c66b6e36066e270e4d27ad41e33697\">More...</a><br/></td></tr>\n<tr class=\"separator:gac3c66b6e36066e270e4d27ad41e33697\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_scan</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrpea856f699c9d234ea9f5ed535b0b16bb\"></a>See also requirements on <a class=\"el\" href=\"a00002.html\">Range</a> and <a class=\"el\" href=\"a00010.html\">parallel_scan Body</a>. </p>\n</td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>\n<tr class=\"memdesc:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"#gae7eaaf124471a6c603b28fc925e8fbbb\">More...</a><br/></td></tr>\n<tr class=\"separator:gae7eaaf124471a6c603b28fc925e8fbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7ddacf5e49f1bea9b67803f2d0f57531\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"#ga7ddacf5e49f1bea9b67803f2d0f57531\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7ddacf5e49f1bea9b67803f2d0f57531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Body &gt; </td></tr>\n<tr class=\"memitem:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga3548041731b7fa14f30f155541ceebb9\">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"#ga3548041731b7fa14f30f155541ceebb9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga3548041731b7fa14f30f155541ceebb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join)</td></tr>\n<tr class=\"memdesc:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with default partitioner.  <a href=\"#ga7dd68a232bb3102788792fcf081a2ab6\">More...</a><br/></td></tr>\n<tr class=\"separator:ga7dd68a232bb3102788792fcf081a2ab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:gadbc46558909fe3720e95a18241dda603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const simple_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:gadbc46558909fe3720e95a18241dda603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with simple_partitioner.  <a href=\"#gadbc46558909fe3720e95a18241dda603\">More...</a><br/></td></tr>\n<tr class=\"separator:gadbc46558909fe3720e95a18241dda603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </td></tr>\n<tr class=\"memitem:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Value&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga6dda983975483bbc5dc95558c1ad3d88\">tbb::parallel_scan</a> (const Range &amp;range, const Value &amp;identity, const Scan &amp;scan, const ReverseJoin &amp;reverse_join, const auto_partitioner &amp;partitioner)</td></tr>\n<tr class=\"memdesc:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parallel prefix with auto_partitioner.  <a href=\"#ga6dda983975483bbc5dc95558c1ad3d88\">More...</a><br/></td></tr>\n<tr class=\"separator:ga6dda983975483bbc5dc95558c1ad3d88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"member-group\"></a>\nparallel_sort</h2></td></tr>\n<tr><td class=\"ititle\" colspan=\"2\"><p><a class=\"anchor\" id=\"amgrp507087c4dcfb051fe7d24227c3a34024\"></a>See also requirements on <a class=\"el\" href=\"a00012.html\">iterators for parallel_sort</a>. </p>\n</td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator , typename Compare &gt; </td></tr>\n<tr class=\"memitem:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) using the given comparator.  <a href=\"#gabdc90813499f91d3e32298cd6dc2fe45\">More...</a><br/></td></tr>\n<tr class=\"separator:gabdc90813499f91d3e32298cd6dc2fe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename RandomAccessIterator &gt; </td></tr>\n<tr class=\"memitem:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>\n<tr class=\"memdesc:ga73b58ac9249f49587d0b081c152af551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#ga73b58ac9249f49587d0b081c152af551\">More...</a><br/></td></tr>\n<tr class=\"separator:ga73b58ac9249f49587d0b081c152af551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga61ce8ba64868c5c15f9d98840193b9bf\">tbb::parallel_sort</a> (Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng using the given comparator.  <a href=\"#ga61ce8ba64868c5c15f9d98840193b9bf\">More...</a><br/></td></tr>\n<tr class=\"separator:ga61ce8ba64868c5c15f9d98840193b9bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range , typename Compare &gt; </td></tr>\n<tr class=\"memitem:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga541b2fd91e88842a7b823161107779e9\">tbb::parallel_sort</a> (const Range &amp;rng, const Compare &amp;comp)</td></tr>\n<tr class=\"memdesc:ga541b2fd91e88842a7b823161107779e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng using the given comparator.  <a href=\"#ga541b2fd91e88842a7b823161107779e9\">More...</a><br/></td></tr>\n<tr class=\"separator:ga541b2fd91e88842a7b823161107779e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb::parallel_sort</a> (Range &amp;rng)</td></tr>\n<tr class=\"memdesc:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">More...</a><br/></td></tr>\n<tr class=\"separator:gaf1fb3ae3aab1213cb9bcf56e30c164bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename Range &gt; </td></tr>\n<tr class=\"memitem:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga60bbc3d7699f09618bd8b5114e4277cb\">tbb::parallel_sort</a> (const Range &amp;rng)</td></tr>\n<tr class=\"memdesc:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>  <a href=\"#ga60bbc3d7699f09618bd8b5114e4277cb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga60bbc3d7699f09618bd8b5114e4277cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga8f176cdc232a6e5907456656a24983a8\">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>\n<tr class=\"memdesc:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>  <a href=\"#ga8f176cdc232a6e5907456656a24983a8\">More...</a><br/></td></tr>\n<tr class=\"separator:ga8f176cdc232a6e5907456656a24983a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1fd7e3c43592dfe1ae3e3572bd80d4f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and default simple partitioner. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga7f69e6a632acb51ed26a43ebd331f349\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa872944de4b5f753f74b874707bce379\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b1907e38efdefdce193ff289e18e86a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and static partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga361201f81b4ec7b86f81b579d2db647a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc5031d9c9fbab8160639f6ca1505cff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8710b9baa5067e2391fca1026a5a2c03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, static partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f69e6a632acb51ed26a43ebd331f349\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and default simple partitioner. </p>\n<p>parallel_reduce overloads that work with anonymous function objects (see also <a class=\"el\" href=\"a00008.html\">requirements on parallel_reduce anonymous function objects</a>). </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9f444ac5712fe11053e9ce6b147640a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1c05004d0970bd199518f568779429a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction and static partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga69b4eea059a62cbbf409cbad02b70bfa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb::parallel_deterministic_reduce()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24758356e0e29013807ab12127d06f7d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3c66b6e36066e270e4d27ad41e33697\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_deterministic_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with deterministic reduction, static partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa8444c29dc4d2e527a1036717d109aef\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with default partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9722d2bc7e5edb4fae9f3b55268a1ecc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with simple partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6c4b06f96ae33cefe78235841791902\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14ae8670bd55620f906aa06e073bd225\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3d39e372d825bf54283b5ceafa90057\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93a621202db94665144de38c0b09bdad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with default partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b7fab9d6ffe7a9345e9349a5a007bd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4c9935d8710a5cf786a92f3522ab2976\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bb3d8cf616632476ca923eb056ee07d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62b1a9ac304ba1eb4f87ab8cc18dd281\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration over range with affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9225af45fd0468843b3fc32608c71de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Iterator , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">Iterator&#160;</td>\n          <td class=\"paramname\"><em>first</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Iterator&#160;</td>\n          <td class=\"paramname\"><em>last</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from [first, last) interval using user-supplied context. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga72131543fd218b67dbb048b768d534e4\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga72131543fd218b67dbb048b768d534e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from rng using user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7d0702d16fbd7554584ab735eed39ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Function &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_for_each </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Function &amp;&#160;</td>\n          <td class=\"paramname\"><em>f</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calls function f for all items from const rng user-supplied context. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb::parallel_for_each()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c6fe4bf1076c82132e666fb545451cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename F0 , typename F1 , typename... F&gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_invoke </td>\n          <td>(</td>\n          <td class=\"paramtype\">F0 &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">F1 &amp;&amp;&#160;</td>\n          <td class=\"paramname\"><em>f1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">F &amp;&amp;...&#160;</td>\n          <td class=\"paramname\"><em>f</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Executes a list of tasks in parallel and waits for all tasks to complete. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b1ce9568e0a0efe1bd2d55677bc6687\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and default partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebb92b593827f9c3f5e1f8ee2f7d5f82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3011e7266fb1e43d307060fe75be2c6e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf15a4b0e2174dce3a12b70a89bbcdc63\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e83e121490df24fa5893b14e68f5e2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac57281bea03450ccb2d098ee8c7ab697\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f3ebf50ab7f5e53fd936817c866f7be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf049e6d185c38c2d9e153b0edd3a9015\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5df3f3a9618fd35931107819cb43fce6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c9b66fa25cadee9ca3bff75a6609b05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and default partitioner. </p>\n<p>parallel_reduce overloads that work with anonymous function objects (see also <a class=\"el\" href=\"a00008.html\">requirements on parallel_reduce anonymous function objects</a>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b22fd1de0e8bbaf46587d3c63a1ed93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56e6b6e2eee521f532c00d855280be69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0d4eb5ab127b185a92720eff1136fa8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and static_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac26c35d1983e7ac2ab003cc8e49dd7e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction and affinity_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga518ef2653004d60319bdfc1c6bce86b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, simple partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24ba50caf5a7c32cbd38912508cb69a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, auto_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1507205a91a8fd26bd7d9bbcb74ad98b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const static_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, static_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga367a8e77c4dac3f8764785afdc6c9299\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename RealBody , typename Reduction &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_reduce </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const RealBody &amp;&#160;</td>\n          <td class=\"paramname\"><em>real_body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Reduction &amp;&#160;</td>\n          <td class=\"paramname\"><em>reduction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">affinity_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">task_group_context &amp;&#160;</td>\n          <td class=\"paramname\"><em>context</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel iteration with reduction, affinity_partitioner and user-supplied context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7eaaf124471a6c603b28fc925e8fbbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with default partitioner. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga7dd68a232bb3102788792fcf081a2ab6\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ddacf5e49f1bea9b67803f2d0f57531\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with simple_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3548041731b7fa14f30f155541ceebb9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Body &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">Body &amp;&#160;</td>\n          <td class=\"paramname\"><em>body</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with auto_partitioner. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dd68a232bb3102788792fcf081a2ab6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with default partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbc46558909fe3720e95a18241dda603\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const simple_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with simple_partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6dda983975483bbc5dc95558c1ad3d88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Value , typename Scan , typename ReverseJoin &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Value tbb::parallel_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>range</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Value &amp;&#160;</td>\n          <td class=\"paramname\"><em>identity</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Scan &amp;&#160;</td>\n          <td class=\"paramname\"><em>scan</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const ReverseJoin &amp;&#160;</td>\n          <td class=\"paramname\"><em>reverse_join</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const auto_partitioner &amp;&#160;</td>\n          <td class=\"paramname\"><em>partitioner</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Parallel prefix with auto_partitioner. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gae7eaaf124471a6c603b28fc925e8fbbb\">tbb::parallel_scan()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabdc90813499f91d3e32298cd6dc2fe45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename RandomAccessIterator , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>end</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in [begin,end) using the given comparator. </p>\n<p>The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00271.html#ga73b58ac9249f49587d0b081c152af551\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73b58ac9249f49587d0b081c152af551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename RandomAccessIterator &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">RandomAccessIterator&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61ce8ba64868c5c15f9d98840193b9bf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in rng using the given comparator. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga541b2fd91e88842a7b823161107779e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range , typename Compare &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const Compare &amp;&#160;</td>\n          <td class=\"paramname\"><em>comp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in const rng using the given comparator. </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1fb3ae3aab1213cb9bcf56e30c164bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60bbc3d7699f09618bd8b5114e4277cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Range &gt; </div>\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">const Range &amp;&#160;</td>\n          <td class=\"paramname\"><em>rng</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in const rng with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f176cdc232a6e5907456656a24983a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename T &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void tbb::parallel_sort </td>\n          <td>(</td>\n          <td class=\"paramtype\">T *&#160;</td>\n          <td class=\"paramname\"><em>begin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T *&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code> </p>\n\n<p>References <a class=\"el\" href=\"a00271.html#gabdc90813499f91d3e32298cd6dc2fe45\">tbb::parallel_sort()</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00272.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Containers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Containers</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Thread-local storage with optional reduction.  <a href=\"a00047.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unordered map from Key to T.  <a href=\"a00050.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe non-blocking concurrent queue.  <a href=\"a00053.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A high-performance thread-safe blocking concurrent bounded queue.  <a href=\"a00049.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Concurrent vector container.  <a href=\"a00060.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container.  <a href=\"a00072.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00273.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Memory Allocation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Memory Allocation</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Block of space aligned sufficiently to construct an array T with N elements.  <a href=\"a00022.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00041.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00042.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00092.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00093.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00140.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00141.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00167.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00168.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5.  <a href=\"a00183.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href=\"a00184.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_malloc</a> (size_t size)</td></tr>\n<tr class=\"separator:ga2a5bdc71439a70b20f2eadf6e1a489e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2ad3952b8c4dd7d293e02ae18fc37b84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_realloc</a> (void *ptr, size_t size)</td></tr>\n<tr class=\"separator:ga40d6e0bc19cdfa3005b2b935c62077a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>\n<tr class=\"separator:ga3b4ff39555cd9e929fce2958325cd8ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>\n<tr class=\"separator:gaf117b4994f719d539804da8dd115e28c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:ga903307de17bc1611515f8e6ae782a3d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *__TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>\n<tr class=\"separator:gaa07391c54330b2e4dd1743ae9c9c4f2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_aligned_free</a> (void *ptr)</td></tr>\n<tr class=\"separator:gad9aa7595581a7bc5be193d7e034c8f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_msize</a> (void *ptr)</td></tr>\n<tr class=\"separator:ga2b718206e50acb6392b86e4877d98213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocation_mode</a> (int param, intptr_t value)</td></tr>\n<tr class=\"separator:ga7f5029970f72ebbffee896c46a23958e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int __TBB_EXPORTED_FUNC&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocation_command</a> (int cmd, void *param)</td></tr>\n<tr class=\"separator:gabe5acd876b4d89bf89787c4e779c2518\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad9aa7595581a7bc5be193d7e034c8f61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_FUNC scalable_aligned_free </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_free\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga903307de17bc1611515f8e6ae782a3d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_malloc\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07391c54330b2e4dd1743ae9c9c4f2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"_aligned_realloc\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe5acd876b4d89bf89787c4e779c2518\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_allocation_command </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>cmd</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>param</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Call TBB allocator-specific commands. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f5029970f72ebbffee896c46a23958e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_allocation_mode </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>param</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">intptr_t&#160;</td>\n          <td class=\"paramname\"><em>value</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Set TBB allocator-specific allocation modes. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b4ff39555cd9e929fce2958325cd8ea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_calloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>nobj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"calloc\" analogue complementing scalable_malloc. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ad3952b8c4dd7d293e02ae18fc37b84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void __TBB_EXPORTED_FUNC scalable_free </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"free\" analogue to discard a previously allocated piece of memory. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;::deallocate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a5bdc71439a70b20f2eadf6e1a489e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_malloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"malloc\" analogue to allocate block of memory of size bytes. </p>\n\n<p>Referenced by <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;::allocate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b718206e50acb6392b86e4877d98213\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t __TBB_EXPORTED_FUNC scalable_msize </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The analogue of <em>msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable</em>*, or 0 (zero) if ptr does not point to such a block. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf117b4994f719d539804da8dd115e28c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int __TBB_EXPORTED_FUNC scalable_posix_memalign </td>\n          <td>(</td>\n          <td class=\"paramtype\">void **&#160;</td>\n          <td class=\"paramname\"><em>memptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>alignment</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"posix_memalign\" analogue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40d6e0bc19cdfa3005b2b935c62077a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* __TBB_EXPORTED_FUNC scalable_realloc </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>ptr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The \"realloc\" analogue complementing scalable_malloc. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00274.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Synchronization</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Synchronization</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Primary template for atomic.  <a href=\"a00027.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrapper around the platform's native lock.  <a href=\"a00097.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A mutex which does nothing.  <a href=\"a00099.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A rw mutex which does nothing.  <a href=\"a00100.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing mutex with local-only spinning.  <a href=\"a00120.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queuing reader-writer mutex with local-only spinning.  <a href=\"a00121.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Writer-preference reader-writer lock with local-only spinning on readers.  <a href=\"a00122.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mutex that allows recursive mutex acquisition.  <a href=\"a00135.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A lock that occupies a single byte.  <a href=\"a00154.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href=\"a00155.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; interface7::internal::x86_eliding_mutex, <br class=\"typebreak\"/>\nfalse &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb::speculative_spin_mutex</a></td></tr>\n<tr class=\"memdesc:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin mutex with speculative lock acquisition.  <a href=\"#ga69722571e9e4406693c4a1379f0b47eb\">More...</a><br/></td></tr>\n<tr class=\"separator:ga69722571e9e4406693c4a1379f0b47eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <br class=\"typebreak\"/>\ninterface7::internal::padded_mutex<br class=\"typebreak\"/>\n&lt; tbb::interface8::internal::x86_rtm_rw_mutex, <br class=\"typebreak\"/>\ntrue &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga97d0da95fd4f92af12de15e1a8b5c780\">tbb::interface8::speculative_spin_rw_mutex</a></td></tr>\n<tr class=\"memdesc:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">A cross-platform spin reader/writer mutex with speculative lock acquisition.  <a href=\"#ga97d0da95fd4f92af12de15e1a8b5c780\">More...</a><br/></td></tr>\n<tr class=\"separator:ga97d0da95fd4f92af12de15e1a8b5c780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga69722571e9e4406693c4a1379f0b47eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef interface7::internal::padded_mutex&lt; spin_mutex, false &gt; <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb::speculative_spin_mutex</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>A cross-platform spin mutex with speculative lock acquisition. </p>\n<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a <a class=\"el\" href=\"a00154.html\" title=\"A lock that occupies a single byte. \">spin_mutex</a>. It should be used for locking short critical sections where the lock is contended but the data it protects are not. If zero-initialized, the mutex is considered unheld. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97d0da95fd4f92af12de15e1a8b5c780\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef interface7::internal::padded_mutex&lt; <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex</a>, true &gt; <a class=\"el\" href=\"a00274.html#ga97d0da95fd4f92af12de15e1a8b5c780\">tbb::interface8::speculative_spin_rw_mutex</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>A cross-platform spin reader/writer mutex with speculative lock acquisition. </p>\n<p>On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_rw_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00275.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Timing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Timing</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Absolute timestamp.  <a href=\"a00177.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00276.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Task Scheduling</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Task Scheduling</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class delimiting the scope of task scheduler activity.  <a href=\"a00164.html#details\">More...</a><br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00278.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">__TBB_malloc_proxy_caller Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>__TBB_malloc_proxy_caller</b>() (defined in <a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00279.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00246.html\">rml</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rml::MemPoolPolicy Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>fixedPool</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>granularity</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>keepAllMemory</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>MemPoolPolicy</b>(rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false) (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pAlloc</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pFree</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reserved</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>TBBMALLOC_POOL_VERSION</b> enum value (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>version</b> (defined in <a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00094.html\">rml::MemPoolPolicy</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00280.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00022.html\">aligned_space</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::aligned_space&lt; T, N &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00022.html\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00281.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00027.html\">atomic</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic</b>()=default (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>atomic</b>(T arg) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(T rhs) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const atomic&lt; T &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00027.html\">tbb::atomic&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00282.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00028.html\">atomic< void * ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::atomic&lt; void * &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic</b>()=default (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>atomic</b>(void *arg) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(void *rhs) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const atomic&lt; void * &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00028.html\">tbb::atomic&lt; void * &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00283.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00034.html\">blocked_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range&lt; Value &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">blocked_range</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a49a97576004711b7159170fcaf488e4e\">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">blocked_range</a>(blocked_range &amp;r, split)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a1f53fbb10b8b04a515f382704b00ed14\">blocked_range</a>(blocked_range &amp;r, proportional_split &amp;proportion)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">const_iterator</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">grainsize</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::blocked_rangeNd_impl</b> (defined in <a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00034.html\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00284.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range2d&lt; RowValue, ColValue &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range2d</b>(blocked_range2d &amp;r, split) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range2d</b>(blocked_range2d &amp;r, proportional_split &amp;proportion) (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>col_range_type</b> typedef (defined in <a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">cols</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">row_range_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">rows</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00035.html\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00285.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_range3d</b>(blocked_range3d &amp;r, split) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_range3d</b>(blocked_range3d &amp;r, proportional_split &amp;proportion) (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>col_range_type</b> typedef (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">cols</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">is_divisible</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">is_splittable_in_proportion</a></td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">page_range_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">pages</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>row_range_type</b> typedef (defined in <a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">rows</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00036.html\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00286.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">allocate</a>(size_type n, const void *hint=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cache_aligned_allocator</b>() (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cache_aligned_allocator</b>(const cache_aligned_allocator &amp;) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cache_aligned_allocator</b>(const cache_aligned_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00041.html\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00287.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00123.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00123.html\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00288.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00042.html\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00289.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00125.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00125.html\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00290.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00047.html\">combinable</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::combinable&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combinable</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combinable</b>(finit _finit) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combinable</b>(const combinable &amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combinable</b>(combinable &amp;&amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combine</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local</b>() (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>local</b>(bool &amp;exists) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const combinable &amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(combinable &amp;&amp;other) (defined in <a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">~combinable</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00047.html\">tbb::combinable&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00291.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_bounded_queue&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">abort</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">capacity</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a85f8a800cae02b601f36ad7a655a0126\">concurrent_bounded_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#aad6fd2353d64c2c31d074cd99df58c02\">concurrent_bounded_queue</a>(const concurrent_bounded_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">concurrent_bounded_queue</a>(concurrent_bounded_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_bounded_queue</b>(concurrent_bounded_queue &amp;&amp;src, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#afcfdc998e106fdb7b2dfa5df880cd9cf\">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::concurrent_queue_iterator</b> (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">pop</a>(T &amp;destination)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">push</a>(T &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">set_capacity</a>(size_type new_capacity)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">try_pop</a>(T &amp;destination)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a03d93a240841a21788396bebd71c51bd\">try_push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">try_push</a>(T &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_begin</b>() (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_begin</b>() const  (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_end</b>() (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_end</b>() const  (defined in <a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">~concurrent_bounded_queue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00049.html\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00292.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">assign</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">assign</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">assign</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">at</a>(size_type index)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">at</a>(size_type index) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">back</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#acf66eb1e82dbcb430d9926a23711c720\">back</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">capacity</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">cbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">cend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">concurrent_vector</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa25dccd2f65fbfa148e92d01a11c20ff\">concurrent_vector</a>(std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a03b5a0e9069b30dc4e2e5fc2f191ccb6\">concurrent_vector</a>(const concurrent_vector &amp;vector, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aafb048cfda83d0e7803888ead76c06a9\">concurrent_vector</a>(concurrent_vector &amp;&amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_vector</b>(concurrent_vector &amp;&amp;source, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abb0e376a31c3fdb91beaaa98441735f5\">concurrent_vector</a>(const concurrent_vector&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">concurrent_vector</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a736c6e35f1df11625636968ea546e21f\">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae0d384ec56032d18f63e26960029d3ce\">concurrent_vector</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>copy_range</b>(void *dst, const void *p_type_erased_iterator, size_type n) (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">crbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">crend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">emplace_back</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">end</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a6a4ad0795a19d94df24595e748f0b193\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">front</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9067259572c2c41d014840d0f9d3cdce\">front</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab89c2db5358048debdc282ff995caffb\">grow_by</a>(size_type delta)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">grow_by</a>(size_type delta, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#acfd74483ff523213b78f44fb914c8eb4\">grow_by</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a95f57f1529e0ebd1ca6bd2d60003fcab\">grow_by</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ae9ef9895e88f9bf036b379035c18f035\">grow_to_at_least</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">grow_to_at_least</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::vector_iterator</b> (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_vector_base</b>() const  (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">operator=</a>(const concurrent_vector &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0d26889a94203cdb5f5460fade7497c7\">operator=</a>(concurrent_vector &amp;&amp;other)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">operator=</a>(const concurrent_vector&lt; T, M &gt; &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">operator=</a>(std::initializer_list&lt; T &gt; init_list)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">operator[]</a>(size_type index)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">operator[]</a>(size_type index) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ad68d1675fedef232bfae35f200ba007d\">push_back</a>(const_reference item)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">push_back</a>(T &amp;&amp;item)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">range</a>(size_t grainsize=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8fcc32ec9ccb48c3327a88fe288c7538\">range</a>(size_t grainsize=1) const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">rbegin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a976b0bed19de9ab93f78c10184a4e38f\">rbegin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">rend</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">rend</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">reserve</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a65e53a98a1e1fdb515fdc2b84e2314e8\">resize</a>(size_type n)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">resize</a>(size_type n, const_reference t)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reverse_iterator</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">shrink_to_fit</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">swap</a>(concurrent_vector &amp;vector)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">~concurrent_vector</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00060.html\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00293.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a></li><li class=\"navelem\"><b>push_back_helper</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00071.html\">element_construction_guard</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>dismiss</b>() (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>element</b> (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>element_construction_guard</b>(pointer an_element) (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~element_construction_guard</b>() (defined in <a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00071.html\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00294.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>DESTROYED</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>HELD</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>INITIALIZED</b> enum value (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">native_handle_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">set_state</a>(state_t to)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>state_t</b> enum name (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~mutex</b>() (defined in <a class=\"el\" href=\"a00097.html\">tbb::mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00097.html\">tbb::mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00295.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00097.html\">mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00150.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">acquire</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>mutex</b> (defined in <a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#ab7c2074543443824790433d3d6c3fece\">scoped_lock</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">try_acquire</a>(mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00150.html\">tbb::mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00296.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>null_mutex</b>() (defined in <a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00099.html\">tbb::null_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00297.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00099.html\">null_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00145.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>acquire</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_acquire</b>(null_mutex &amp;) (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00145.html\">tbb::null_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00298.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>null_rw_mutex</b>() (defined in <a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00100.html\">tbb::null_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00299.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00151.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::null_rw_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>downgrade_to_reader</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>upgrade_to_writer</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00151.html\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00300.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00161.html\">task_group_context</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group_context Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group_context</b>(tbb::internal::string_index) (defined in <a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00161.html\">tbb::task_group_context</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00301.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pre_scan_tag Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_final_scan</b>() (defined in <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator bool</b>() (defined in <a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00118.html\">tbb::pre_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00302.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::final_scan_tag Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_final_scan</b>() (defined in <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator bool</b>() (defined in <a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00076.html\">tbb::final_scan_tag</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00303.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00116.html\">parallel_while</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::parallel_while&lt; Body &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">add</a>(const value_type &amp;item)</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">parallel_while</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">run</a>(Stream &amp;stream, const Body &amp;body)</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">~parallel_while</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00116.html\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00304.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00074.html\">filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00074.html\">tbb::filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00305.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::thread_bound_filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end_of_stream</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">exact_exception_propagation</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">filter_is_bound</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">filter_is_out_of_order</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">filter_is_serial</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">filter_may_emit_null</a></td><td class=\"entry\"><a class=\"el\" href=\"a00074.html\">tbb::filter</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>item_not_available</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">process_item</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>result_type</b> enum name (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>success</b> enum value (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">try_process_item</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00172.html\">tbb::thread_bound_filter</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00306.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00117.html\">pipeline</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::pipeline Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">add_filter</a>(filter &amp;filter_)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filter</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::pipeline_cleaner</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::pipeline_root_task</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::stage_task</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">pipeline</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ac9ee9080cfc080c40a7ee7cb03a62637\">run</a>(size_t max_number_of_live_tokens)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &amp;context)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_bound_filter</b> (defined in <a class=\"el\" href=\"a00117.html\">tbb::pipeline</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">~pipeline</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00117.html\">tbb::pipeline</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00307.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">queuing_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00120.html\">tbb::queuing_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00308.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00142.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">acquire</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">scoped_lock</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">try_acquire</a>(queuing_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00142.html\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00309.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">queuing_rw_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">~queuing_rw_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00121.html\">tbb::queuing_rw_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00310.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00149.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::queuing_rw_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">downgrade_to_reader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">scoped_lock</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">try_acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">upgrade_to_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00149.html\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00311.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">native_handle_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">recursive_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~recursive_mutex</b>() (defined in <a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00135.html\">tbb::recursive_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00312.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00147.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::recursive_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">acquire</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>recursive_mutex</b> (defined in <a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#ab42cb541abb9647cac23b1db9a4db93d\">scoped_lock</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">try_acquire</a>(recursive_mutex &amp;mutex)</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00147.html\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00313.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(U *p, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>destroy</b>(pointer p) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable_allocator</b>() (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scalable_allocator</b>(const scalable_allocator &amp;) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable_allocator</b>(const scalable_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00140.html\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00314.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00126.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00126.html\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00315.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00141.html\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00316.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00141.html\">scalable_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00127.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00127.html\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00317.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">internal_construct</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">spin_mutex</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00154.html\">tbb::spin_mutex</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00318.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00148.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_mutex::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">acquire</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a73f7381a9a112b9f5a856b1face525fb\">scoped_lock</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>spin_mutex</b> (defined in <a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">try_acquire</a>(spin_mutex &amp;m)</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00148.html\">tbb::spin_mutex::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00319.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>BUSY</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>ONE_READER</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>READERS</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">spin_rw_mutex_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">state</a></td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>state_t</b> typedef (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">try_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>WRITER</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>WRITER_PENDING</b> (defined in <a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">~spin_rw_mutex_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00155.html\">tbb::spin_rw_mutex_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00320.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00144.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::spin_rw_mutex_v3::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">downgrade_to_reader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">is_writer</a></td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">mutex</a></td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a0a2e15358575f7651446bca13a5a2674\">scoped_lock</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::interface8::internal::x86_rtm_rw_mutex</b> (defined in <a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">try_acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">upgrade_to_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00144.html\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00321.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00162.html\">task_handle</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_handle&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::task_handle_task</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator()</b>() const  (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>structured_task_group</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group</b> (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_handle</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_handle</b>(F &amp;&amp;f) (defined in <a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00162.html\">tbb::task_handle&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00322.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00159.html\">task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_group Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run</b>(F &amp;&amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_wait</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run_and_wait</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group</b>() (defined in <a class=\"el\" href=\"a00159.html\">tbb::task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00159.html\">tbb::task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00323.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::structured_task_group Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_wait</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00156.html\">tbb::structured_task_group</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00324.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::task_scheduler_init Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">automatic</a></td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#ae261cf6c54a3689ef4e2c079fe0f67d0\">blocking_terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">blocking_terminate</a>(const std::nothrow_t &amp;) __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">default_num_threads</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">deferred</a></td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">initialize</a>(int number_of_threads=automatic)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a0f5294f74b123a646a1762c68d11e39a\">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">is_active</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">~task_scheduler_init</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00164.html\">tbb::task_scheduler_init</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00325.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">allocator_type</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">malloc_type</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scalable</b> enum value (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>standard</b> enum value (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_allocator</b>() (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb_allocator</b>(const tbb_allocator &amp;) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_allocator</b>(const tbb_allocator&lt; U &gt; &amp;) (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00167.html\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00326.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00131.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00131.html\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00327.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00168.html\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00328.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00168.html\">tbb_allocator< void ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00128.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00128.html\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00329.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>base_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>zero_allocator</b>() (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>zero_allocator</b>(const zero_allocator &amp;a) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>zero_allocator</b>(const zero_allocator&lt; U &gt; &amp;a) (defined in <a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00183.html\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00330.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00129.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00129.html\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00331.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>base_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00184.html\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00332.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00184.html\">zero_allocator< void, Allocator ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00130.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00130.html\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00333.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::bad_last_alloc Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~bad_last_alloc</b>() __TBB_override (defined in <a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00030.html\">tbb::bad_last_alloc</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00334.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00086.html\">improper_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::improper_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00086.html\">tbb::improper_lock</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00335.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00182.html\">user_abort</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::user_abort Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00182.html\">tbb::user_abort</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00182.html\">tbb::user_abort</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00182.html\">tbb::user_abort</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00336.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00095.html\">missing_wait</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::missing_wait Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00095.html\">tbb::missing_wait</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00337.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::invalid_multiple_scheduling Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>what</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00088.html\">tbb::invalid_multiple_scheduling</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00338.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tbb_exception Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">destroy</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">move</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">name</a>() const =0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">throw_self</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">what</a>() const __TBB_override=0</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00339.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00046.html\">captured_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::captured_exception Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>captured_exception</b>(const captured_exception &amp;src) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>captured_exception</b>(const char *name_, const char *info) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">destroy</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">move</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">name</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const captured_exception &amp;src) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set</b>(const char *name, const char *info) (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">throw_self</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">what</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~captured_exception</b>() (defined in <a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00046.html\">tbb::captured_exception</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00340.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00096.html\">movable_exception</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::movable_exception&lt; ExceptionData &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">destroy</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>movable_exception</b>(const ExceptionData &amp;data_) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>movable_exception</b>(const movable_exception &amp;src) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">move</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">my_exception_data</a></td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">name</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">operator delete</a>(void *p)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const movable_exception &amp;src) (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">throw_self</a>() __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">what</a>() const __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~movable_exception</b>() (defined in <a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00096.html\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~tbb_exception</b>() (defined in <a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00169.html\">tbb::tbb_exception</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00341.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00177.html\">tbb::tick_count</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">now</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">resolution</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tick_count</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00177.html\">tbb::tick_count</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00342.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00177.html\">tick_count</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00087.html\">interval_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::tick_count::interval_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">interval_t</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">interval_t</a>(double sec)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">operator+</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">operator+=</a>(const interval_t &amp;i)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">operator-</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">operator-=</a>(const interval_t &amp;i)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">seconds</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::tick_count</b> (defined in <a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00087.html\">tbb::tick_count::interval_t</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00343.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00153.html\">sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::sender&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_successors</b>()=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">built_successors_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_successors</b>(successor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">output_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">register_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">remove_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>successor_count</b>()=0 (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>successor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">successor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">try_consume</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">try_get</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender::try_get</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_get_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">try_release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">try_reserve</a>(T &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender::try_reserve</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_reserve_wrapper</b>(void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~sender</b>() (defined in <a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00153.html\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~untyped_sender</b>() (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00344.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00133.html\">receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::async_helpers</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::async_storage</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_continue_receiver</b>() (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">limiter_node</a> class</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_count</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>proxy_dependency_receiver</b> (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">register_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">remove_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">run_and_put_task</a> class</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a>(const typename internal::async_helpers&lt; T &gt;::filtered_type &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put</b>(const typename internal::async_helpers&lt; T &gt;::async_type &amp;t) (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a>(const T &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver::try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">try_put_task</a>(const T &amp;t)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task</b>(const T &amp;t)=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00345.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::continue_receiver Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">continue_receiver</a>(int number_of_predecessors=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">continue_receiver</a>(const continue_receiver &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;v) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">execute</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;s) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;s) __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_continue_receiver</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>limiter_node</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_built_predecessors</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_current_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_initial_predecessor_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_mutex</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_predecessor_count</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_count</b>() __TBB_override (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">register_predecessor</a>(predecessor_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">remove_predecessor</a>(predecessor_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">reset_receiver</a>(reset_flags f) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run_and_put_task</b> (defined in <a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">try_put</a>(const typename internal::async_helpers&lt; continue_msg &gt;::filtered_type &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put</b>(const typename internal::async_helpers&lt; continue_msg &gt;::async_type &amp;t) (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">try_put</a>(const continue_msg &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver::try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">try_put_task</a>(const input_type &amp;) __TBB_override</td><td class=\"entry\"><a class=\"el\" href=\"a00063.html\">tbb::flow::interface10::continue_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async) __TBB_override (defined in <a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">~receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00133.html\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00346.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::graph_proxy Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~graph_proxy</b>() (defined in <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00347.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::receiver_gateway&lt; Input &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">input_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">release_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">reserve_wait</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">try_put</a>(const input_type &amp;)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00134.html\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~graph_proxy</b>() (defined in <a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00084.html\">tbb::flow::interface10::graph_proxy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00348.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>device_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>devices</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>init</b>(const opencl_device_list &amp;device_list) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer_impl</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(opencl_device device, T &amp;t, Rest &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_data</b>(opencl_device) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_kernel</b>(opencl_device device, const kernel_type &amp;kernel, const range_type &amp;work_size, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00349.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00089.html\">kernel</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel</b>(const kernel &amp;k) (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~kernel</b>() (defined in <a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00089.html\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00350.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00113.html\">opencl_program</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_program&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_kernel</b>(const std::string &amp;k) const  (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory&lt; DeviceFilter &gt;::kernel</b> (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, opencl_program_type type, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, const char *program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(Factory &amp;factory, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(opencl_program_type type, const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(const char *program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(const std::string &amp;program_name) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b>(opencl_program_type type) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_program</b>(const opencl_program &amp;src) (defined in <a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00113.html\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00351.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00105.html\">opencl_device</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address_bits</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_in_kernel_available</b>(const std::string &amp;k) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_in_kernels</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>command_queue</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>compiler_available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>device_id</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>device_id_type</b> typedef (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>extension_available</b>(const std::string &amp;ext) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>extensions</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>host</b> enum value (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>info</b>(cl_device_info i, T &amp;t) const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>linker_available</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>major_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>max_work_group_size</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>max_work_item_sizes</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>minor_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>name</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device</b>() (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_device</b>(cl_device_id d_id) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device</b>(cl_device_id cl_d_id, device_id_type device_id) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_program</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>out_of_order_exec_mode_on_device_present</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>out_of_order_exec_mode_on_host_present</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_extensions</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_id</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_name</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_profile</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>platform_vendor</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>platform_version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_command_queue</b>(cl_command_queue cmd_queue) (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>type</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unknown</b> enum value (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>vendor</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>version</b>() const  (defined in <a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00105.html\">tbb::flow::interface10::opencl_device</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00352.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_device_list Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>add</b>(opencl_device d) (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cbegin</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cend</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>empty</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_device_list</b>() (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_device_list</b>(std::initializer_list&lt; opencl_device &gt; il) (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00106.html\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00353.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00045.html\">callback_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call</b>()=0 (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~callback_base</b>() (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00354.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00044.html\">callback</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::callback&lt; Callback, T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call</b>() __TBB_override (defined in <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>callback</b>(Callback c, const T &amp;t) (defined in <a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00044.html\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~callback_base</b>() (defined in <a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00045.html\">tbb::flow::interface10::callback_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00355.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear_event</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>(bool wait=true) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>(bool wait=true) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>() const __TBB_override (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_event</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_async_msg</b>(const T &amp;data) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>(const T &amp;data, cl_event event) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_async_msg</b>(const opencl_async_msg &amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_async_msg</b>(opencl_async_msg &amp;&amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator const T &amp;</b>() const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator T &amp;</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(const opencl_async_msg &amp;dmsg) (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>register_callback</b>(Callback c) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_event</b>(cl_event e) const  (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_async_msg</b>() (defined in <a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00102.html\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00356.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_memory&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>factory</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_cl_mem</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_host_ptr</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>map_memory</b>(opencl_device, opencl_async_msg&lt; void *, Factory &gt; &amp;)=0 (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_cl_mem</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_curr_device_id</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_factory</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_host_ptr</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_event</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_sending_event_present</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_lock</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>receive</b>(const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send</b>(opencl_device device, const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00357.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>factory</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_cl_mem</b>() const  (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_host_ptr</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>map_memory</b>(opencl_device device, opencl_async_msg&lt; void *, Factory &gt; &amp;dmsg) __TBB_override (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_cl_mem</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_curr_device_id</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_factory</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_host_ptr</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_event</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_sending_event_present</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_sending_lock</b> (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b> (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer_impl</b>(size_t size, Factory &amp;f) (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer_impl</b>(cl_mem m, size_t index, size_t size, Factory &amp;f) (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_memory</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receive</b>(const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send</b>(opencl_device device, const cl_event *e) (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00104.html\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~opencl_memory</b>() (defined in <a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00108.html\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00358.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>access</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>() (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b>(size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>(Factory &amp;f, size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_subbuffer</b>() (defined in <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_subbuffer</b>(const opencl_buffer&lt; T, Factory &gt; &amp;owner, size_t index, size_t size) (defined in <a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00115.html\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(ptrdiff_t k) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receive</b>(const opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send</b>(opencl_device device, opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00359.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>access</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_object</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_object_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>() (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_buffer</b>(size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_buffer</b>(Factory &amp;f, size_t size) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_factory</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory_type</b> typedef (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_subbuffer</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(ptrdiff_t k) (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>receive</b>(const opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send</b>(opencl_device device, opencl_async_msg&lt; opencl_buffer, Factory &gt; &amp;dependency) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>subbuffer</b>(size_t index, size_t size) const  (defined in <a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00103.html\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00360.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00114.html\">opencl_range</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_range Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>global_range</b>() const  (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_range</b>() const  (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>nd_range_type</b> typedef (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_range</b>(G &amp;&amp;global_work=std::initializer_list&lt; int &gt;({0}), L &amp;&amp;local_work=std::initializer_list&lt; int &gt;({0, 0, 0})) (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_index_type</b> typedef (defined in <a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00114.html\">tbb::flow::interface10::opencl_range</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00361.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00112.html\">opencl_node< tuple< Ports...>, JP, Factory ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, Factory &amp;f) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d, Factory &amp;f) (defined in <a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00112.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00362.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00111.html\">opencl_node< tuple< Ports...>, JP ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d) (defined in <a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00111.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00363.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00110.html\">opencl_node< tuple< Ports...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel) (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>opencl_node</b>(graph &amp;g, const kernel_type &amp;kernel, DeviceSelector d) (defined in <a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00110.html\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00364.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00070.html\">edge_container</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::edge_container&lt; C &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>add_edge</b>(C &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_edges</b>(edge_list_type &amp;v) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>delete_edge</b>(C &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>edge_count</b>() (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>edge_list_type</b> typedef (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>receiver_extract</b>(R &amp;r) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>sender_extract</b>(S &amp;s) (defined in <a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00070.html\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00365.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00023.html\">async_helpers</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_type</b> typedef (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>from_void_ptr</b>(const void *p) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>from_void_ptr</b>(void *p) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_async_type</b> (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>to_void_ptr</b>(const T &amp;t) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>to_void_ptr</b>(T &amp;t) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper_impl</b>(receiver&lt; T &gt; *const this_recv, const void *p, bool is_async) (defined in <a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00023.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00366.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00024.html\">async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_type</b> typedef (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filtered_type</b> typedef (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>from_void_ptr</b>(const void *p) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>from_void_ptr</b>(void *p) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_async_type</b> (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>to_void_ptr</b>(const T &amp;t) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>to_void_ptr</b>(T &amp;t) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper_impl</b>(receiver&lt; T &gt; *const this_recv, const void *p, bool is_async) (defined in <a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00024.html\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00367.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_sender Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_successors</b>()=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">built_successors_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_successors</b>(successor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::predecessor_cache</b> (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::reservable_predecessor_cache</b> (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_add_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_delete_built_successor</b>(successor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">register_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">remove_successor</a>(successor_type &amp;r)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>successor_count</b>()=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>successor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">successor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">try_consume</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">try_get</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_get_wrapper</b>(void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">try_release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">try_reserve</a>(X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_reserve_wrapper</b>(void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~untyped_sender</b>() (defined in <a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00179.html\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00368.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::internal::untyped_receiver Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>built_predecessors</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>built_predecessors_type</b> typedef (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>copy_predecessors</b>(predecessor_list_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>graph_reference</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::broadcast_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::round_robin_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::successor_cache</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_add_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_delete_built_predecessor</b>(predecessor_type &amp;)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_continue_receiver</b>() (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>limiter_node</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>predecessor_count</b>()=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>predecessor_list_type</b> typedef (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">predecessor_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>proxy_dependency_receiver</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">register_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">remove_predecessor</a>(predecessor_type &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">reset_receiver</a>(reset_flags f=rf_reset_protocol)=0</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>run_and_put_task</b> (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">try_put</a>(const X &amp;t)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_put_task</b>(const X &amp;t) (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>try_put_task_wrapper</b>(const void *p, bool is_async)=0 (defined in <a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">~untyped_receiver</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00178.html\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00369.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(Factory &amp;f) (defined in <a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00066.html\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00370.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_device_filter Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(const opencl_device_list &amp;devices) (defined in <a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00065.html\">tbb::flow::interface10::opencl_info::default_device_filter</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00371.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><b>opencl_info</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface10::opencl_info::default_opencl_factory Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>default_factory</b> (defined in <a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00067.html\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>device_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>devices</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>finalize</b>(opencl_device device, FinalizeFn fn, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>init</b>(const opencl_device_list &amp;device_list) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(opencl_device device, T &amp;t, Rest &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_data</b>(opencl_device) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_kernel</b>(opencl_device device, const kernel_type &amp;kernel, const range_type &amp;work_size, Args &amp;...args) (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~opencl_factory</b>() (defined in <a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00107.html\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00372.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_buffer&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>cbegin</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cend</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>gfx_buffer</b>() (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_buffer</b>(size_type size) (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(size_type pos) (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(size_type pos) const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00081.html\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00373.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_async_msg&lt; T &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>data</b>() (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>data</b>() const  (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_async_msg</b>() (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>gfx_async_msg</b>(const T &amp;input_data) (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_id_type</b> typedef (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>set_task_id</b>(kernel_id_type id) (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_id</b>() const  (defined in <a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00080.html\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00374.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>async_msg_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>finalize</b>(device_type, FinalizeFn fn, Args &amp;...) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>gfx_factory</b>(tbb::flow::graph &amp;g) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>kernel_id_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>kernel_type</b> typedef (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>send_data</b>(device_type, Args &amp;...args) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>send_kernel</b>(device_type, const kernel_type &amp;kernel, Args &amp;...args) (defined in <a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00082.html\">tbb::flow::interface9::gfx_factory</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00375.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>flow</b></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00069.html\">dummy_device_selector</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::flow::interface9::gfx_factory::dummy_device_selector Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator()</b>(gfx_factory &amp;) (defined in <a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00069.html\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00376.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>accessor_location</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>accessor_location</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate_node_copy_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *t) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate_node_default_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate_node_emplace_construct</b>(node_allocator_type &amp;allocator, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate_node_move_construct</b>(node_allocator_type &amp;allocator, const Key &amp;key, const T *t) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">bucket_count</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">concurrent_hash_map</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aae76e1252b56b107685f8746e0f6a1f4\">concurrent_hash_map</a>(size_type n, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8a73b86f9a5e9836b38713e56c546654\">concurrent_hash_map</a>(const concurrent_hash_map &amp;table, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2bd04845683b15a590913a72a19fa3dc\">concurrent_hash_map</a>(concurrent_hash_map &amp;&amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad642e497153df5669e6454acef095675\">concurrent_hash_map</a>(concurrent_hash_map &amp;&amp;table, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad56fc19d656099d49051f3c363cefc89\">concurrent_hash_map</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a57149f90060b033b1f2493f2a88ef291\">concurrent_hash_map</a>(std::initializer_list&lt; value_type &gt; il, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_accessor</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">count</a>(const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>delete_node</b>(node_base *n) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>do_not_allocate_node</b>(node_allocator_type &amp;, const Key &amp;, const T *) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">emplace</a>(const_accessor &amp;result, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a17e51c8864282c35aa4d23f22909cc4a\">emplace</a>(accessor &amp;result, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">emplace</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>equal_range</b>(const Key &amp;key) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>equal_range</b>(const Key &amp;key) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5144122dbb946d933b94a92117543b33\">erase</a>(const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">erase</a>(const_accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">erase</a>(accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">exclude</a>(const_accessor &amp;item_accessor)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">find</a>(const_accessor &amp;result, const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a6b61799e2018381b5ee4b78752a41483\">find</a>(accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>generic_emplace</b>(Accessor &amp;&amp;result, Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>generic_move_insert</b>(Accessor &amp;&amp;result, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aaebb10a9e9dcb24e63860caa745a281d\">insert</a>(const_accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a766c6033c203e8f342501d85a7cf3405\">insert</a>(accessor &amp;result, const Key &amp;key)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">insert</a>(const_accessor &amp;result, const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2047214e041b7674c3b83e204d0d6c6a\">insert</a>(accessor &amp;result, const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8e39501f9edb3210504c9c4ca05384b7\">insert</a>(const value_type &amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a446910c1ca4818bdb00f4ffa91b9108a\">insert</a>(const_accessor &amp;result, value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">insert</a>(accessor &amp;result, value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a5d3da283d2e74c7ff0ecb0dfd4d371fd\">insert</a>(value_type &amp;&amp;value)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ab84dfd77316252cbf39c7ae89e365a00\">insert</a>(I first, I last)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a580fdba266e87106ad41470479f641d6\">insert</a>(std::initializer_list&lt; value_type &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::hash_map_iterator</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::hash_map_range</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">internal_copy</a>(const concurrent_hash_map &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_copy</b>(I first, I last, size_type reserve_size) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">internal_equal_range</a>(const Key &amp;key, I end) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">internal_fast_find</a>(const Key &amp;key) const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_write_access_needed</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">lookup</a>(bool op_insert, const Key &amp;key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &amp;, const Key &amp;, const T *), node *tmp_n=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_allocator</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node_allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">operator=</a>(const concurrent_hash_map &amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">operator=</a>(concurrent_hash_map &amp;&amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">operator=</a>(std::initializer_list&lt; value_type &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range</b>(size_type grainsize=1) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range</b>(size_type grainsize=1) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">rehash</a>(size_type n=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>search_bucket</b>(const key_type &amp;key, bucket *b) const  (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">swap</a>(concurrent_hash_map &amp;table)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">~concurrent_hash_map</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00050.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00377.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00017.html\">accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_writer</b>() (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_node</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">operator*</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">operator-&gt;</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00017.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00378.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00018.html\">accessor_not_used</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>release</b>() (defined in <a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00018.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00379.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00040.html\">bucket_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">is_writer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">operator()</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00040.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00380.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00043.html\">call_clear_on_leave</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>call_clear_on_leave</b>(concurrent_hash_map *a_ch_map) (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>dismiss</b>() (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_ch_map</b> (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~call_clear_on_leave</b>() (defined in <a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00043.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00381.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00061.html\">const_accessor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>accessor</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_writer</b>() (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_node</b> (defined in <a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">operator*</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">operator-&gt;</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">release</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">~const_accessor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00061.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00382.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00098.html\">node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>item</b> (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const Key &amp;key) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(const Key &amp;key, const T &amp;t) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const Key &amp;key, T &amp;&amp;t) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(value_type &amp;&amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(Args &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>node</b>(value_type &amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>node</b>(const value_type &amp;i) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr, node_allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t, node_allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00098.html\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00383.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac64c7b627708f0d6b2e5421fb0d49150\">assign</a>(InputIterator begin, InputIterator end)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">assign</a>(std::initializer_list&lt; T &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a405be01bac4048f214797c287e2571a1\">concurrent_priority_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a43c3917ea8a19cf1fec947e29ad4ff3e\">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a0cebee26cc0d00d4dcbb1c74e08029f7\">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aaa8ac175143e12db29a014674a392b38\">concurrent_priority_queue</a>(std::initializer_list&lt; T &gt; init_list, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a332d26234f9c37a6b7ba269c648815d0\">concurrent_priority_queue</a>(const concurrent_priority_queue &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aa52cea369b6630699ee78cc42622be9d\">concurrent_priority_queue</a>(const concurrent_priority_queue &amp;src, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae9ac965bbac3933c7db89f512adfcbcb\">concurrent_priority_queue</a>(concurrent_priority_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">concurrent_priority_queue</a>(concurrent_priority_queue &amp;&amp;src, const allocator_type &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">emplace</a>(Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">operator=</a>(const concurrent_priority_queue &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">operator=</a>(concurrent_priority_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">operator=</a>(std::initializer_list&lt; T &gt; il)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">push</a>(const_reference elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">push</a>(value_type &amp;&amp;elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">swap</a>(concurrent_priority_queue &amp;q)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">try_pop</a>(reference elem)</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00052.html\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00384.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allow_multimapping</b> enum value (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map_traits</b>() (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map_traits</b>(const hash_compare &amp;hc) (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_key</b>(const std::pair&lt; Type1, Type2 &gt; &amp;value) (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>hash_compare</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00055.html\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00385.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>at</b>(const key_type &amp;key) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>at</b>(const key_type &amp;key) const  (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">concurrent_unordered_map</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(concurrent_unordered_map &amp;&amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_map</b>(concurrent_unordered_map &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_map</b>(const concurrent_unordered_map &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_map &amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_map &amp;&amp;table) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator[]</b>(const key_type &amp;key) (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00054.html\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00386.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">concurrent_unordered_multimap</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &amp;&amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(concurrent_unordered_multimap &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multimap</b>(const concurrent_unordered_multimap &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_multimap &amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_multimap &amp;&amp;table) (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00056.html\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00387.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allow_multimapping</b> enum value (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set_traits</b>() (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set_traits</b>(const hash_compare &amp;hc) (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>get_key</b>(const value_type &amp;value) (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>hash_compare</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_hash_compare</b> (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00059.html\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00388.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">concurrent_unordered_set</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(concurrent_unordered_set &amp;&amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_set</b>(concurrent_unordered_set &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_set</b>(const concurrent_unordered_set &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_set &amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_set &amp;&amp;table) (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00058.html\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00389.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;_Hasher=hasher(), const key_equal &amp;_Key_equality=key_equal(), const allocator_type &amp;a=allocator_type()) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">concurrent_unordered_multiset</a>(std::initializer_list&lt; value_type &gt; il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &amp;a_hasher=hasher(), const key_equal &amp;a_keyeq=key_equal(), const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &amp;&amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(concurrent_unordered_multiset &amp;&amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_unordered_multiset</b>(const concurrent_unordered_multiset &amp;table, const Allocator &amp;a) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>hasher</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_compare</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>key_equal</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>key_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>local_iterator</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>mapped_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const concurrent_unordered_multiset &amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(concurrent_unordered_multiset &amp;&amp;table) (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00057.html\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00390.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>active</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>invalid</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">reader_writer_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>scoped_lock</b> (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock_read</b> (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">status_t</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">try_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">try_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">unlock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>waiting</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>waiting_nonblocking</b> enum value (defined in <a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">~reader_writer_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00122.html\">tbb::interface5::reader_writer_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00391.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00143.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *p) (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t s) (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reader_writer_lock</b> (defined in <a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">scoped_lock</a>(reader_writer_lock &amp;lock)</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">~scoped_lock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00143.html\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00392.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00152.html\">scoped_lock_read</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::reader_writer_lock::scoped_lock_read Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *p) (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t s) (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>reader_writer_lock</b> (defined in <a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">scoped_lock_read</a>(reader_writer_lock &amp;lock)</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">~scoped_lock_read</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00152.html\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00393.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00180.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00394.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface5</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor< T, false ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>type</b> typedef (defined in <a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00181.html\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00395.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_operation Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_ext</b> (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00396.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator_ext&lt; handler_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_ext</b>(const handler_type &amp;h) (defined in <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a>(aggregator_operation &amp;op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a>(aggregator_operation *op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00397.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00019.html\">aggregator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::aggregator Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator</b>() (defined in <a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_ext</b>(const internal::basic_handler &amp;h) (defined in <a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">execute</a>(const Body &amp;b)</td><td class=\"entry\"><a class=\"el\" href=\"a00019.html\">tbb::interface6::aggregator</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">execute_impl</a>(aggregator_operation &amp;op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">process</a>(aggregator_operation *op)</td><td class=\"entry\"><a class=\"el\" href=\"a00020.html\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00398.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_lru_cache</b>(value_function_type f, std::size_t number_of_lru_history_items) (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>handle</b> typedef (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator[]</b>(key_type k) (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::internal::aggregating_functor&lt; self_type, aggregated_operation_type &gt;</b> (defined in <a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00051.html\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00399.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">begin</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>combine</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>combine_each</b>(combine_func_t f_combine) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_range_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">end</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">end</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b> (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">enumerable_thread_specific</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aafd6049aa255826c712aaba778524a7c\">enumerable_thread_specific</a>(Finit finit)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a6f0249ee95fa56665da4b6984f3a685a\">enumerable_thread_specific</a>(const T &amp;exemplar)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(T &amp;&amp;exemplar) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">enumerable_thread_specific</a>(P1 &amp;&amp;arg1, P &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(const enumerable_thread_specific &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enumerable_thread_specific</b>(const enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>enumerable_thread_specific</b>(enumerable_thread_specific &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enumerable_thread_specific</b>(enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">local</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">local</a>(bool &amp;exists)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const enumerable_thread_specific &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(const enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(enumerable_thread_specific &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(enumerable_thread_specific&lt; T, Alloc, Cachetype &gt; &amp;&amp;other) (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#ac94dd896ed78df240da4a450defbca6c\">range</a>(size_t grainsize=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">range</a>(size_t grainsize=1) const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>range_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">~enumerable_thread_specific</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00072.html\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00400.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00078.html\">flattened2d</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flattened2d&lt; Container &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocator_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>begin</b>() (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>begin</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>end</b>() (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>end</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>flattened2d</b>(const Container &amp;c, typename Container::const_iterator b, typename Container::const_iterator e) (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>flattened2d</b>(const Container &amp;c) (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size</b>() const  (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00078.html\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00401.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>address</b>(reference x) const  (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>address</b>(const_reference x) const  (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">allocate</a>(size_type n, const void *=0)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_reference</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">construct</a>(U *p, Args &amp;&amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>construct</b>(pointer p, value_type &amp;&amp;value) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>construct</b>(pointer p, const value_type &amp;value) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">deallocate</a>(pointer p, size_type)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">destroy</a>(pointer p)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>difference_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">max_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(pool_type &amp;pool) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator &amp;src) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator&lt; U, P &gt; &amp;src) (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_pool</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pool_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>reference</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>size_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00092.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00402.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00132.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00132.html\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00403.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>const_pointer</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(pool_type &amp;pool) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator &amp;src) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>memory_pool_allocator</b>(const memory_pool_allocator&lt; U, P &gt; &amp;src) (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_pool</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>pointer</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>pool_type</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>value_type</b> typedef (defined in <a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00093.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00404.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator< void, P ></a></li><li class=\"navelem\"><a class=\"el\" href=\"a00124.html\">rebind</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>other</b> typedef (defined in <a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00124.html\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00405.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00091.html\">memory_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::memory_pool&lt; Alloc &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">memory_pool</a>(const Alloc &amp;src=Alloc())</td><td class=\"entry\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">~memory_pool</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00091.html\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00406.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::fixed_pool Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">fixed_pool</a>(void *buf, size_t size)</td><td class=\"entry\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">~fixed_pool</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00077.html\">tbb::interface6::fixed_pool</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00407.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00079.html\">flow_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::flow_control Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::concrete_filter</b> (defined in <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>stop</b>() (defined in <a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00079.html\">tbb::interface6::flow_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00408.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00075.html\">filter_t</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::filter_t&lt; T, U &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>clear</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filter_t</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>filter_t</b>(const filter_t&lt; T, U &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>filter_t</b>(tbb::filter::mode mode, const Body &amp;body) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::pipeline_proxy</b> (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">make_filter</a>(tbb::filter::mode, const Body &amp;)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&amp;</b> (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b>(const filter_t&lt; T, U &gt; &amp;rhs) (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~filter_t</b>() (defined in <a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00075.html\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00409.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::runtime_loader Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">ec_bad_arg</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">ec_bad_call</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">ec_bad_lib</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">ec_bad_ver</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">ec_no_lib</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">ec_ok</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">em_abort</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">em_status</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">em_throw</a> enum value</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">error_code</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">error_mode</a> enum name</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">runtime_loader</a>(error_mode mode=em_abort)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">status</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">~runtime_loader</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00139.html\">tbb::interface6::runtime_loader</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00410.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::task_scheduler_observer Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allow_sleep</b> enum value (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::observer_list</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal::observer_proxy</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::task_scheduler_observer_v3</b> (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>keep_awake</b> enum value (defined in <a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">may_sleep</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">observe</a>(bool state=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">task_scheduler_observer</a>(bool local=false)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a36e7e0c466320029d5a3e50a573e04c1\">task_scheduler_observer</a>(task_arena &amp;a)</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">~task_scheduler_observer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00165.html\">tbb::interface6::task_scheduler_observer</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00411.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_handler</b> (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00412.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00032.html\">basic_operation</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_operation&lt; Body &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>agg_finished</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>agg_waiting</b> enum value (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>aggregator_operation</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>aggregator_operation_status</b> enum name (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_operation</b>(const Body &amp;b) (defined in <a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00032.html\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">finish</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>next</b>() (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>set_next</b>(aggregator_operation *n) (defined in <a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">start</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00021.html\">tbb::interface6::aggregator_operation</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~basic_operation_base</b>() (defined in <a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00033.html\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00413.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface6</b></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00031.html\">basic_handler</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface6::internal::basic_handler Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>basic_handler</b>() (defined in <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator()</b>(aggregator_operation *op_list) const  (defined in <a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00031.html\">tbb::interface6::internal::basic_handler</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00414.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface7</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00158.html\">task_arena</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface7::task_arena Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">current_thread_index</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">debug_wait_until_empty</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">enqueue</a>(F &amp;&amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enqueue</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">enqueue</a>(F &amp;&amp;f, priority_t p)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>enqueue</b>(const F &amp;f, priority_t p) (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">execute</a>(F &amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">execute</a>(const F &amp;f)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">initialize</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ae7986309715cf224f5320dc06ee7d335\">initialize</a>(int max_concurrency_, unsigned reserved_for_masters=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">initialize</a>(attach)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">is_active</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">max_concurrency</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">task_arena</a>(int max_concurrency_=automatic, unsigned reserved_for_masters=1)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a70d122b3e6e4760c6053c5c230c715ef\">task_arena</a>(const task_arena &amp;s)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a84dfcfd70fd08d383b8d4e8b96fa4a0d\">task_arena</a>(attach)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::internal::task_scheduler_observer_v3</b> (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb::this_task_arena::max_concurrency</b> (defined in <a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">terminate</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">~task_arena</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00158.html\">tbb::interface7::task_arena</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00415.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>interface9</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00083.html\">global_control</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::interface9::global_control Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>active_value</b>(parameter p) (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>global_control</b>(parameter p, size_t value) (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>max_allowed_parallelism</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>parameter</b> enum name (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>parameter_max</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_stack_size</b> enum value (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~global_control</b>() (defined in <a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00083.html\">tbb::interface9::global_control</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00416.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl< Value, N, index_sequence< Is...> ></a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>()=delete (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">blocked_rangeNd_impl</a>(const dim_type_helper&lt; Is &gt; &amp;...args)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>(blocked_rangeNd_impl &amp;r, proportional_split proportion) (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>blocked_rangeNd_impl</b>(blocked_rangeNd_impl &amp;r, split proportion) (defined in <a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00038.html\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00417.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>critical_section_v4</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_construct</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_fair_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_recursive_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>is_rw_mutex</b> (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>lock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>try_lock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unlock</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~critical_section_v4</b>() (defined in <a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00064.html\">tbb::internal::critical_section_v4</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00418.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00146.html\">scoped_lock</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::critical_section_v4::scoped_lock Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>scoped_lock</b>(critical_section_v4 &amp;lock_me) (defined in <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>~scoped_lock</b>() (defined in <a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00146.html\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00419.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_handle_task&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_handle_task</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00163.html\">tbb::internal::task_handle_task&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00420.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00160.html\">task_group_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_group_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>cancel</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal_run</b>(__TBB_FORWARDING_REF(F) f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>internal_run_and_wait</b>(F &amp;f) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>is_canceling</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>my_context</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>my_root</b> (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>owner</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>run</b>(task_handle&lt; F &gt; &amp;h) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>task_group_base</b>(uintptr_t traits=0) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>wait</b>() (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~task_group_base</b>() __TBB_NOEXCEPT(false) (defined in <a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00160.html\">tbb::internal::task_group_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00421.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::task_scheduler_observer_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>interface6::task_scheduler_observer</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">is_observing</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">observe</a>(bool state=true)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>observer_list</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>observer_proxy</b> (defined in <a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">on_scheduler_entry</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">on_scheduler_exit</a>(bool)</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">~task_scheduler_observer_v3</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00166.html\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00422.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_exception_ptr Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>allocate</b>() (defined in <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>allocate</b>(const tbb_exception &amp;tag) (defined in <a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">allocate</a>(captured_exception &amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">destroy</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">throw_self</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00170.html\">tbb::internal::tbb_exception_ptr</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00423.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_base Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00424.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_0&lt; F &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>start_routine</b>(void *c) (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_closure_0</b>(const F &amp;f) (defined in <a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00173.html\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00425.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_1&lt; F, X &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>arg1</b> (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">start_routine</a>(void *c)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_closure_1</b>(const F &amp;f, const X &amp;x) (defined in <a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00174.html\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00426.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::thread_closure_2&lt; F, X, Y &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>arg1</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>arg2</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>function</b> (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator delete</b>(void *ptr) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator new</b>(size_t size) (defined in <a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00176.html\">tbb::internal::thread_closure_base</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">start_routine</a>(void *c)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>thread_closure_2</b>(const F &amp;f, const X &amp;x, const Y &amp;y) (defined in <a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00175.html\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00427.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3 Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">detach</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>get_id</b>() const __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">hardware_concurrency</a>() __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">join</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>joinable</b>() const __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>move_v3</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle</b>() (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>native_handle_type</b> typedef (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator=</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator=</b>(tbb_thread_v3 &amp;x) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>swap</b>(tbb_thread_v3 &amp;t) __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb::swap</b> (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_thread_v3</b>(const tbb_thread_v3 &amp;) (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb_thread_v3</a>() __TBB_NOEXCEPT(true)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a9c5587ab76ca1aa98bae7fe69a459466\">tbb_thread_v3</a>(F f)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00171.html#a672a5367e687635c869926bf8a986296\">tbb_thread_v3</a>(F f, X x)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00171.html#ac3f57678f2a289084a6d275f8f8fbc62\">tbb_thread_v3</a>(F f, X x, Y y)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>~tbb_thread_v3</b>() (defined in <a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00171.html\">tbb::internal::tbb_thread_v3</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00428.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>internal</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a></li><li class=\"navelem\"><a class=\"el\" href=\"a00085.html\">id</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::internal::tbb_thread_v3::id Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>atomic_compare_and_swap</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>id</b>() __TBB_NOEXCEPT(true) (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator!=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&lt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&lt;&lt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&lt;=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator==</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>operator&gt;</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>operator&gt;=</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>tbb_hasher</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>tbb_thread_v3</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>thread_get_id_v3</b> (defined in <a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00085.html\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00429.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>profiling</b></li><li class=\"navelem\"><b>interface10</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00073.html\">event</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::profiling::interface10::event Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emit</b>() (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>emit</b>(const std::string &amp;description) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emit</b>() (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>emit</b>(const std::string &amp;) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>event</b>(const std::string &amp;input) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>event</b>(const std::string &amp;) (defined in <a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00073.html\">tbb::profiling::interface10::event</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/a00430.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"a00249.html\">tbb</a></li><li class=\"navelem\"><b>strict_ppl</b></li><li class=\"navelem\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">allocator_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">concurrent_queue</a>(const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">explicit</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a43ac953152e60815c09fe4a4d4a623a9\">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ae918807d098d5d5b41cc6d606fa2e7a1\">concurrent_queue</a>(const concurrent_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#acc04574f4d7d41fd5cad779508394740\">concurrent_queue</a>(concurrent_queue &amp;&amp;src)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>concurrent_queue</b>(concurrent_queue &amp;&amp;src, const allocator_type &amp;a) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>const_iterator</b> typedef (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">const_reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">difference_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>emplace</b>(Arguments &amp;&amp;...args) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">empty</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">get_allocator</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>internal::concurrent_queue_iterator</b> (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>iterator</b> typedef (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">push</a>(const T &amp;source)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>push</b>(T &amp;&amp;source) (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">reference</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">size_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">try_pop</a>(T &amp;result)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_begin</b>() (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_begin</b>() const  (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\" class=\"even\"><td class=\"entry\"><b>unsafe_end</b>() (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr bgcolor=\"#f0f0f0\"><td class=\"entry\"><b>unsafe_end</b>() const  (defined in <a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">unsafe_size</a>() const </td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">value_type</a> typedef</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">~concurrent_queue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"a00053.html\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span><span onclick=\"javascript:toggleLevel(4);\">4</span><span onclick=\"javascript:toggleLevel(5);\">5</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img id=\"arr_0_\" src=\"ftv2mnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00246.html\" target=\"_self\">rml</a></td><td class=\"desc\">The namespace rml contains components of low-level memory pool interface </td></tr>\n<tr id=\"row_0_0_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00094.html\" target=\"_self\">MemPoolPolicy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\" class=\"even\"><td class=\"entry\"><img id=\"arr_1_\" src=\"ftv2mnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00249.html\" target=\"_self\">tbb</a></td><td class=\"desc\">The graph class </td></tr>\n<tr id=\"row_1_0_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>flow</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface10</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00157.html\" target=\"_self\">successor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00039.html\" target=\"_self\">broadcast_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00137.html\" target=\"_self\">round_robin_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00119.html\" target=\"_self\">predecessor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00136.html\" target=\"_self\">reservable_predecessor_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">edge_container</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00026.html\" target=\"_self\">async_storage</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00023.html\" target=\"_self\">async_helpers</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00024.html\" target=\"_self\">async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00179.html\" target=\"_self\">untyped_sender</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_0_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00178.html\" target=\"_self\">untyped_receiver</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>opencl_info</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00066.html\" target=\"_self\">default_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00065.html\" target=\"_self\">default_device_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00101.html\" target=\"_self\">null_type</a></td><td class=\"desc\">A generic null type </td></tr>\n<tr id=\"row_1_0_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00062.html\" target=\"_self\">continue_msg</a></td><td class=\"desc\">An empty class used for messages that mean \"I'm done\" </td></tr>\n<tr id=\"row_1_0_0_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00153.html\" target=\"_self\">sender</a></td><td class=\"desc\">Forward declaration section </td></tr>\n<tr id=\"row_1_0_0_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">receiver</a></td><td class=\"desc\">Pure virtual template class that defines a receiver of messages of type T </td></tr>\n<tr id=\"row_1_0_0_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00090.html\" target=\"_self\">limiter_node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00138.html\" target=\"_self\">run_and_put_task</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00025.html\" target=\"_self\">async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00063.html\" target=\"_self\">continue_receiver</a></td><td class=\"desc\">Base class for receivers of completion messages </td></tr>\n<tr id=\"row_1_0_0_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00084.html\" target=\"_self\">graph_proxy</a></td><td class=\"desc\">Pure virtual template classes that define interfaces for async communication </td></tr>\n<tr id=\"row_1_0_0_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00134.html\" target=\"_self\">receiver_gateway</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_0_12_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_0_12_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_12_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00089.html\" target=\"_self\">kernel</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00113.html\" target=\"_self\">opencl_program</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00105.html\" target=\"_self\">opencl_device</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00106.html\" target=\"_self\">opencl_device_list</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00045.html\" target=\"_self\">callback_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00044.html\" target=\"_self\">callback</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00102.html\" target=\"_self\">opencl_async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00108.html\" target=\"_self\">opencl_memory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00104.html\" target=\"_self\">opencl_buffer_impl</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00115.html\" target=\"_self\">opencl_subbuffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00103.html\" target=\"_self\">opencl_buffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00114.html\" target=\"_self\">opencl_range</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">opencl_node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00112.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00111.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_0_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00110.html\" target=\"_self\">opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_1_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface9</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00081.html\" target=\"_self\">gfx_buffer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00080.html\" target=\"_self\">gfx_async_msg</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img id=\"arr_1_0_1_2_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_0_1_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00082.html\" target=\"_self\">gfx_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00068.html\" target=\"_self\">device_type</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_1_2_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00069.html\" target=\"_self\">dummy_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface5</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00180.html\" target=\"_self\">use_element_copy_constructor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_0_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00181.html\" target=\"_self\">use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_1_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_1_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00050.html\" target=\"_self\">concurrent_hash_map</a></td><td class=\"desc\">Unordered map from Key to T </td></tr>\n<tr id=\"row_1_1_1_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00017.html\" target=\"_self\">accessor</a></td><td class=\"desc\">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_1_1_1_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00018.html\" target=\"_self\">accessor_not_used</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00040.html\" target=\"_self\">bucket_accessor</a></td><td class=\"desc\">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>\n<tr id=\"row_1_1_1_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00043.html\" target=\"_self\">call_clear_on_leave</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_1_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00061.html\" target=\"_self\">const_accessor</a></td><td class=\"desc\">Combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_1_1_1_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00098.html\" target=\"_self\">node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00052.html\" target=\"_self\">concurrent_priority_queue</a></td><td class=\"desc\">Concurrent priority queue </td></tr>\n<tr id=\"row_1_1_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00055.html\" target=\"_self\">concurrent_unordered_map_traits</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00054.html\" target=\"_self\">concurrent_unordered_map</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00056.html\" target=\"_self\">concurrent_unordered_multimap</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00059.html\" target=\"_self\">concurrent_unordered_set_traits</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00058.html\" target=\"_self\">concurrent_unordered_set</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_8_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00057.html\" target=\"_self\">concurrent_unordered_multiset</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_1_9_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_1_9_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_1_9_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00122.html\" target=\"_self\">reader_writer_lock</a></td><td class=\"desc\">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>\n<tr id=\"row_1_1_9_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00143.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped lock pattern for write locks </td></tr>\n<tr id=\"row_1_1_9_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00152.html\" target=\"_self\">scoped_lock_read</a></td><td class=\"desc\">The scoped lock pattern for read locks </td></tr>\n<tr id=\"row_1_2_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface6</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00033.html\" target=\"_self\">basic_operation_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">basic_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00031.html\" target=\"_self\">basic_handler</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_0_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00048.html\" target=\"_self\">concrete_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00021.html\" target=\"_self\">aggregator_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">aggregator_ext</a></td><td class=\"desc\">Aggregator base class and expert interface </td></tr>\n<tr id=\"row_1_2_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00019.html\" target=\"_self\">aggregator</a></td><td class=\"desc\">Basic aggregator interface </td></tr>\n<tr id=\"row_1_2_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00051.html\" target=\"_self\">concurrent_lru_cache</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00072.html\" target=\"_self\">enumerable_thread_specific</a></td><td class=\"desc\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container </td></tr>\n<tr id=\"row_1_2_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00078.html\" target=\"_self\">flattened2d</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_7_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_7_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00092.html\" target=\"_self\">memory_pool_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_2_7_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00132.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_2_8_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_2_8_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00093.html\" target=\"_self\">memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_2_8_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00124.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00091.html\" target=\"_self\">memory_pool</a></td><td class=\"desc\">Thread-safe growable pool allocator for variable-size requests </td></tr>\n<tr id=\"row_1_2_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00077.html\" target=\"_self\">fixed_pool</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_2_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00079.html\" target=\"_self\">flow_control</a></td><td class=\"desc\">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>\n<tr id=\"row_1_2_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00075.html\" target=\"_self\">filter_t</a></td><td class=\"desc\">Class representing a chain of type-safe pipeline filters </td></tr>\n<tr id=\"row_1_2_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00139.html\" target=\"_self\">runtime_loader</a></td><td class=\"desc\">Load TBB at runtime </td></tr>\n<tr id=\"row_1_2_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00165.html\" target=\"_self\">task_scheduler_observer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_3_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface7</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_3_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_3_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00158.html\" target=\"_self\">task_arena</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_3_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00029.html\" target=\"_self\">attach</a></td><td class=\"desc\">Tag class used to indicate the \"attaching\" constructor </td></tr>\n<tr id=\"row_1_4_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_4_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_4_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface9</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_4_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00083.html\" target=\"_self\">global_control</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>internal</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00037.html\" target=\"_self\">blocked_rangeNd_impl</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00038.html\" target=\"_self\">blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00064.html\" target=\"_self\">critical_section_v4</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_2_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00146.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00163.html\" target=\"_self\">task_handle_task</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00160.html\" target=\"_self\">task_group_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00166.html\" target=\"_self\">task_scheduler_observer_v3</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00170.html\" target=\"_self\">tbb_exception_ptr</a></td><td class=\"desc\">Exception container that preserves the exact copy of the original exception </td></tr>\n<tr id=\"row_1_5_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00176.html\" target=\"_self\">thread_closure_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_8_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00173.html\" target=\"_self\">thread_closure_0</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_9_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00174.html\" target=\"_self\">thread_closure_1</a></td><td class=\"desc\">Structure used to pass user function with 1 argument to thread </td></tr>\n<tr id=\"row_1_5_10_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00175.html\" target=\"_self\">thread_closure_2</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_5_11_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_5_11_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_5_11_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00171.html\" target=\"_self\">tbb_thread_v3</a></td><td class=\"desc\">Versioned thread class </td></tr>\n<tr id=\"row_1_5_11_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00085.html\" target=\"_self\">id</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_6_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_6_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>profiling</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_6_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_6_0_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>interface10</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_6_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00073.html\" target=\"_self\">event</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_7_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_7_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_7_')\"/><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><b>strict_ppl</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_7_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00053.html\" target=\"_self\">concurrent_queue</a></td><td class=\"desc\">A high-performance thread-safe non-blocking concurrent queue </td></tr>\n<tr id=\"row_1_8_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00022.html\" target=\"_self\">aligned_space</a></td><td class=\"desc\">Block of space aligned sufficiently to construct an array T with N elements </td></tr>\n<tr id=\"row_1_9_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">atomic</a></td><td class=\"desc\">Primary template for atomic </td></tr>\n<tr id=\"row_1_10_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00028.html\" target=\"_self\">atomic&lt; void * &gt;</a></td><td class=\"desc\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt; </td></tr>\n<tr id=\"row_1_11_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">blocked_range</a></td><td class=\"desc\">A range over which to iterate </td></tr>\n<tr id=\"row_1_12_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00035.html\" target=\"_self\">blocked_range2d</a></td><td class=\"desc\">A 2-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_1_13_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00036.html\" target=\"_self\">blocked_range3d</a></td><td class=\"desc\">A 3-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_1_14_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_14_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_14_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00041.html\" target=\"_self\">cache_aligned_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_14_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00123.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_15_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_15_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_15_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00042.html\" target=\"_self\">cache_aligned_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_15_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00125.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_16_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00047.html\" target=\"_self\">combinable</a></td><td class=\"desc\">Thread-local storage with optional reduction </td></tr>\n<tr id=\"row_1_17_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00049.html\" target=\"_self\">concurrent_bounded_queue</a></td><td class=\"desc\">A high-performance thread-safe blocking concurrent bounded queue </td></tr>\n<tr id=\"row_1_18_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">concurrent_vector</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_1_19_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_19_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_19_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00097.html\" target=\"_self\">mutex</a></td><td class=\"desc\">Wrapper around the platform's native lock </td></tr>\n<tr id=\"row_1_19_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00150.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_20_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_20_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_20_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00099.html\" target=\"_self\">null_mutex</a></td><td class=\"desc\">A mutex which does nothing </td></tr>\n<tr id=\"row_1_20_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00145.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_21_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_21_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_21_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00100.html\" target=\"_self\">null_rw_mutex</a></td><td class=\"desc\">A rw mutex which does nothing </td></tr>\n<tr id=\"row_1_21_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00151.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_22_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00161.html\" target=\"_self\">task_group_context</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_23_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00118.html\" target=\"_self\">pre_scan_tag</a></td><td class=\"desc\">Used to indicate that the initial scan is being performed </td></tr>\n<tr id=\"row_1_24_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00076.html\" target=\"_self\">final_scan_tag</a></td><td class=\"desc\">Used to indicate that the final scan is being performed </td></tr>\n<tr id=\"row_1_25_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00116.html\" target=\"_self\">parallel_while</a></td><td class=\"desc\">Parallel iteration over a stream, with optional addition of more work </td></tr>\n<tr id=\"row_1_26_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00074.html\" target=\"_self\">filter</a></td><td class=\"desc\">A stage in a pipeline </td></tr>\n<tr id=\"row_1_27_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00172.html\" target=\"_self\">thread_bound_filter</a></td><td class=\"desc\">A stage in a pipeline served by a user thread </td></tr>\n<tr id=\"row_1_28_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00117.html\" target=\"_self\">pipeline</a></td><td class=\"desc\">A processing pipeline that applies filters to items </td></tr>\n<tr id=\"row_1_29_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_29_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_29_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00120.html\" target=\"_self\">queuing_mutex</a></td><td class=\"desc\">Queuing mutex with local-only spinning </td></tr>\n<tr id=\"row_1_29_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00142.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_30_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_30_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_30_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00121.html\" target=\"_self\">queuing_rw_mutex</a></td><td class=\"desc\">Queuing reader-writer mutex with local-only spinning </td></tr>\n<tr id=\"row_1_30_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00149.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_31_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_31_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_31_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00135.html\" target=\"_self\">recursive_mutex</a></td><td class=\"desc\">Mutex that allows recursive mutex acquisition </td></tr>\n<tr id=\"row_1_31_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00147.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_32_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_32_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_32_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00140.html\" target=\"_self\">scalable_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_32_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00126.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_33_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_33_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_33_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00141.html\" target=\"_self\">scalable_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_33_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00127.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_34_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_34_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_34_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00154.html\" target=\"_self\">spin_mutex</a></td><td class=\"desc\">A lock that occupies a single byte </td></tr>\n<tr id=\"row_1_34_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00148.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_1_35_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_35_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_35_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00155.html\" target=\"_self\">spin_rw_mutex_v3</a></td><td class=\"desc\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>\n<tr id=\"row_1_35_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00144.html\" target=\"_self\">scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_1_36_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00162.html\" target=\"_self\">task_handle</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_37_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00159.html\" target=\"_self\">task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_38_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00156.html\" target=\"_self\">structured_task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_39_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00164.html\" target=\"_self\">task_scheduler_init</a></td><td class=\"desc\">Class delimiting the scope of task scheduler activity </td></tr>\n<tr id=\"row_1_40_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_40_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_40_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00167.html\" target=\"_self\">tbb_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_40_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00131.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_41_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_41_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_41_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00168.html\" target=\"_self\">tbb_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_41_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00128.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_42_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_42_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_42_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00183.html\" target=\"_self\">zero_allocator</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_1_42_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00129.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_43_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_43_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_43_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00184.html\" target=\"_self\">zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_1_43_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00130.html\" target=\"_self\">rebind</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_44_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00030.html\" target=\"_self\">bad_last_alloc</a></td><td class=\"desc\">Exception for concurrent containers </td></tr>\n<tr id=\"row_1_45_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00086.html\" target=\"_self\">improper_lock</a></td><td class=\"desc\">Exception for PPL locks </td></tr>\n<tr id=\"row_1_46_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00182.html\" target=\"_self\">user_abort</a></td><td class=\"desc\">Exception for user-initiated abort </td></tr>\n<tr id=\"row_1_47_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00095.html\" target=\"_self\">missing_wait</a></td><td class=\"desc\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a> </td></tr>\n<tr id=\"row_1_48_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00088.html\" target=\"_self\">invalid_multiple_scheduling</a></td><td class=\"desc\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a> </td></tr>\n<tr id=\"row_1_49_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00169.html\" target=\"_self\">tbb_exception</a></td><td class=\"desc\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>\n<tr id=\"row_1_50_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00046.html\" target=\"_self\">captured_exception</a></td><td class=\"desc\">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>\n<tr id=\"row_1_51_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00096.html\" target=\"_self\">movable_exception</a></td><td class=\"desc\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>\n<tr id=\"row_1_52_\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_1_52_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('1_52_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00177.html\" target=\"_self\">tick_count</a></td><td class=\"desc\">Absolute timestamp </td></tr>\n<tr id=\"row_1_52_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00087.html\" target=\"_self\">interval_t</a></td><td class=\"desc\">Relative time interval </td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00016.html\" target=\"_self\">__TBB_malloc_proxy_caller</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Index</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_A\">A</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_B\">B</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_C\">C</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_D\">D</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_E\">E</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_F\">F</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_G\">G</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_I\">I</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_K\">K</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_L\">L</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_M\">M</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_N\">N</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_O\">O</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_P\">P</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Q\">Q</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_R\">R</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_S\">S</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_T\">T</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_U\">U</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Z\">Z</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter__\">_</a></div>\n<table style=\"margin: 10px; white-space: nowrap;\" align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_A\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;A&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00054.html\">concurrent_unordered_map</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00087.html\">tick_count::interval_t</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00118.html\">pre_scan_tag</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00155.html\">spin_rw_mutex_v3</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00055.html\">concurrent_unordered_map_traits</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00088.html\">invalid_multiple_scheduling</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00119.html\">predecessor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00156.html\">structured_task_group</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00017.html\">concurrent_hash_map::accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00056.html\">concurrent_unordered_multimap</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_K\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;K&#160;&#160;</div></td></tr></table>\n</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_Q\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;Q&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00157.html\">successor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00018.html\">concurrent_hash_map::accessor_not_used</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00057.html\">concurrent_unordered_multiset</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_T\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;T&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00019.html\">aggregator</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00058.html\">concurrent_unordered_set</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00089.html\">opencl_factory::kernel</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00120.html\">queuing_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00020.html\">aggregator_ext</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00059.html\">concurrent_unordered_set_traits</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_L\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;L&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00121.html\">queuing_rw_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00158.html\">task_arena</a> (tbb::interface7)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00021.html\">aggregator_operation</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00060.html\">concurrent_vector</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_R\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;R&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00159.html\">task_group</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00022.html\">aligned_space</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00061.html\">concurrent_hash_map::const_accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00090.html\">limiter_node</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00160.html\">task_group_base</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00023.html\">async_helpers</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00062.html\">continue_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_M\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;M&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00122.html\">reader_writer_lock</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00161.html\">task_group_context</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00024.html\">async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00063.html\">continue_receiver</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00132.html\">memory_pool_allocator::rebind</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00162.html\">task_handle</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00025.html\">async_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00064.html\">critical_section_v4</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00091.html\">memory_pool</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00131.html\">tbb_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00163.html\">task_handle_task</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00026.html\">async_storage</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_D\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;D&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00092.html\">memory_pool_allocator</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00130.html\">zero_allocator&lt; void, Allocator &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00164.html\">task_scheduler_init</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00027.html\">atomic</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00093.html\">memory_pool_allocator&lt; void, P &gt;</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00129.html\">zero_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00165.html\">task_scheduler_observer</a> (tbb::interface6)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00028.html\">atomic&lt; void * &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00065.html\">default_device_filter</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00094.html\">MemPoolPolicy</a> (<a class=\"el\" href=\"a00246.html\">rml</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00128.html\">tbb_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00166.html\">task_scheduler_observer_v3</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00029.html\">task_arena::attach</a> (tbb::interface7)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00066.html\">default_device_selector</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00095.html\">missing_wait</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00127.html\">scalable_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00167.html\">tbb_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_B\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;B&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00067.html\">default_opencl_factory</a> (tbb::flow::interface10::opencl_info)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00096.html\">movable_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00126.html\">scalable_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00168.html\">tbb_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00068.html\">gfx_factory::device_type</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00097.html\">mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00125.html\">cache_aligned_allocator&lt; void &gt;::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00169.html\">tbb_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00030.html\">bad_last_alloc</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00069.html\">gfx_factory::dummy_device_selector</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_N\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;N&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00124.html\">memory_pool_allocator&lt; void, P &gt;::rebind</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00170.html\">tbb_exception_ptr</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00031.html\">basic_handler</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_E\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;E&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00123.html\">cache_aligned_allocator::rebind</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00171.html\">tbb_thread_v3</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00032.html\">basic_operation</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00098.html\">concurrent_hash_map::node</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00133.html\">receiver</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00172.html\">thread_bound_filter</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00033.html\">basic_operation_base</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00070.html\">edge_container</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00099.html\">null_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00134.html\">receiver_gateway</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00173.html\">thread_closure_0</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00034.html\">blocked_range</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00071.html\">concurrent_vector::push_back_helper::element_construction_guard</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00100.html\">null_rw_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00135.html\">recursive_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00174.html\">thread_closure_1</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00035.html\">blocked_range2d</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00072.html\">enumerable_thread_specific</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00101.html\">null_type</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00136.html\">reservable_predecessor_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00175.html\">thread_closure_2</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00036.html\">blocked_range3d</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00073.html\">event</a> (tbb::profiling::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_O\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;O&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00137.html\">round_robin_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00176.html\">thread_closure_base</a> (tbb::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00037.html\">blocked_rangeNd_impl</a> (tbb::internal)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_F\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;F&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00138.html\">run_and_put_task</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00177.html\">tick_count</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00038.html\">blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00102.html\">opencl_async_msg</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00139.html\">runtime_loader</a> (tbb::interface6)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_U\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;U&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00039.html\">broadcast_cache</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00074.html\">filter</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00103.html\">opencl_buffer</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_S\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;S&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00040.html\">concurrent_hash_map::bucket_accessor</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00075.html\">filter_t</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00104.html\">opencl_buffer_impl</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00178.html\">untyped_receiver</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_C\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;C&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00076.html\">final_scan_tag</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00105.html\">opencl_device</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00140.html\">scalable_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00179.html\">untyped_sender</a> (tbb::flow::interface10::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00077.html\">fixed_pool</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00106.html\">opencl_device_list</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00141.html\">scalable_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00180.html\">use_element_copy_constructor</a> (tbb::interface5::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00041.html\">cache_aligned_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00078.html\">flattened2d</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00107.html\">opencl_factory</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00151.html\">null_rw_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00181.html\">use_element_copy_constructor&lt; T, false &gt;</a> (tbb::interface5::internal)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00042.html\">cache_aligned_allocator&lt; void &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00079.html\">flow_control</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00108.html\">opencl_memory</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00150.html\">mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00182.html\">user_abort</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00043.html\">concurrent_hash_map::call_clear_on_leave</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_G\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;G&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00109.html\">opencl_node</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00149.html\">queuing_rw_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_Z\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;Z&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00044.html\">callback</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00110.html\">opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00148.html\">spin_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00045.html\">callback_base</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00080.html\">gfx_async_msg</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00111.html\">opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00147.html\">recursive_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00183.html\">zero_allocator</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00046.html\">captured_exception</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00081.html\">gfx_buffer</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00112.html\">opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00146.html\">critical_section_v4::scoped_lock</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00184.html\">zero_allocator&lt; void, Allocator &gt;</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00047.html\">combinable</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00082.html\">gfx_factory</a> (tbb::flow::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00113.html\">opencl_program</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00145.html\">null_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter__\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;_&#160;&#160;</div></td></tr></table>\n</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00048.html\">concrete_filter</a> (tbb::interface6::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00083.html\">global_control</a> (tbb::interface9)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00114.html\">opencl_range</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00144.html\">spin_rw_mutex_v3::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00049.html\">concurrent_bounded_queue</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00084.html\">graph_proxy</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00115.html\">opencl_subbuffer</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00143.html\">reader_writer_lock::scoped_lock</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00016.html\">__TBB_malloc_proxy_caller</a>&#160;&#160;&#160;</td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00050.html\">concurrent_hash_map</a> (tbb::interface5)&#160;&#160;&#160;</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_I\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;I&#160;&#160;</div></td></tr></table>\n</td><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_P\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;P&#160;&#160;</div></td></tr></table>\n</td><td valign=\"top\"><a class=\"el\" href=\"a00142.html\">queuing_mutex::scoped_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00051.html\">concurrent_lru_cache</a> (tbb::interface6)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00152.html\">reader_writer_lock::scoped_lock_read</a> (tbb::interface5)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00052.html\">concurrent_priority_queue</a> (tbb::interface5)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00085.html\">tbb_thread_v3::id</a> (tbb::internal)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00116.html\">parallel_while</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00153.html\">sender</a> (tbb::flow::interface10)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"a00053.html\">concurrent_queue</a> (tbb::strict_ppl)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00086.html\">improper_lock</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00117.html\">pipeline</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td valign=\"top\"><a class=\"el\" href=\"a00154.html\">spin_mutex</a> (<a class=\"el\" href=\"a00249.html\">tbb</a>)&#160;&#160;&#160;</td><td></td></tr>\n<tr><td></td><td></td><td></td><td></td><td></td></tr>\n</table>\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_A\">A</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_B\">B</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_C\">C</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_D\">D</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_E\">E</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_F\">F</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_G\">G</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_I\">I</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_K\">K</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_L\">L</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_M\">M</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_N\">N</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_O\">O</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_P\">P</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Q\">Q</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_R\">R</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_S\">S</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_T\">T</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_U\">U</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_Z\">Z</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter__\">_</a></div>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_b9976680b2be72d2d0b8fca1c31202a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/dir_63fb2cc293d133785b96e521fa051167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>include Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">include Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_87119f26c7695cbc270003e99bc7f49f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>tbb Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_87119f26c7695cbc270003e99bc7f49f.html\">tbb</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">tbb Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aggregator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>aligned_space.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>atomic.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range2d.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_range3d.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00191\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>blocked_rangeNd.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00192\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>cache_aligned_allocator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>combinable.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_hash_map.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_lru_cache.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_priority_queue.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_queue.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_map.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00199\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_unordered_set.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00200\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>concurrent_vector.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>critical_section.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>enumerable_thread_specific.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00203.html\">flow_graph.h</a></td></tr>\n<tr class=\"memdesc:a00203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The graph related classes and functions. <br/></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00204\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flow_graph_abstractions.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>flow_graph_opencl_node.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00206\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>gfx_factory.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>global_control.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00208.html\">memory_pool.h</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>null_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00211\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>null_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00212\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_do.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_for.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00214\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_for_each.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_invoke.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_reduce.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_scan.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_sort.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>parallel_while.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>partitioner.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>pipeline.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00222\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>queuing_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>queuing_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>reader_writer_lock.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>recursive_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>runtime_loader.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">scalable_allocator.h</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>spin_rw_mutex.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00231\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_arena.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_group.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00233\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_init.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>task_scheduler_observer.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00235\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00236\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_allocator.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00237\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_config.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00238\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_disable_exceptions.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00239\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_exception.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00240\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_machine.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_profiling.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00242\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_stddef.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00243\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbb_thread.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00244\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tbbmalloc_proxy.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>tick_count.h</b></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>1.0 Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_525f2cc589630bacbdc3bb450847427e.html\">tbb</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b9976680b2be72d2d0b8fca1c31202a2.html\">1.0</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">1.0 Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_63fb2cc293d133785b96e521fa051167\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_63fb2cc293d133785b96e521fa051167.html\">include</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.5 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tfont-size: 150%;\n}\n\n.title {\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #879ECB;\n\tcolor: #354C7B;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd, p.starttd {\n\tmargin-top: 2px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #C4CFE5;\n        background-color: #FBFCFD;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n        padding: 0px;\n        margin: 0px;\n\tbackground-color: #FBFCFD;\n\tborder: 1px solid #C4CFE5;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n        font-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n        white-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground-color: white;\n\tcolor: black;\n        margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 12px;\n\tmargin-right: 8px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n        white-space: nowrap;\n        vertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #DEE4F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #A8B8D9;\n        border-left: 1px solid #A8B8D9;\n        border-right: 1px solid #A8B8D9;\n        padding: 6px 0px 6px 0px;\n        color: #253555;\n        font-weight: bold;\n        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #A8B8D9;      \n        border-left: 1px solid #A8B8D9;      \n        border-right: 1px solid #A8B8D9; \n        padding: 6px 10px 2px 10px;\n        background-color: #FBFCFD;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFFFF;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n        background-color: #728DC1;\n        border-top:1px solid #5373B4;\n        border-left:1px solid #5373B4;\n        border-right:1px solid #C4CFE5;\n        border-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view when not used as main index */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n        margin: 0px;\n        padding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n        white-space: nowrap;\n        padding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n        width: 100%;\n        padding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #F7F8FB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n        cursor: pointer;\n        padding-left: 2px;\n        padding-right: 2px;\n\tcolor: #3D578C;\n}\n\ndiv.dynheader {\n        margin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n        margin-top: 4px;\n        margin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #283A5D;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#364D7C;\n        font-size: 8pt;\n}\n\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}       \n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n        background-image:url('nav_h.png');\n        background-repeat:repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin:  0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00C0E0;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n        font-weight: bold;\n        color: gray;\n        cursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/dynsections.js",
    "content": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n } \n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function(){ \n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.attr('src','ftv2folderopen.png');\n      a.attr('src','ftv2mnode.png');\n      $(this).show();\n    } else if (l==level+1) {\n      i.attr('src','ftv2folderclosed.png');\n      a.attr('src','ftv2pnode.png');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  //The clicked row\n  var currentRow = $('#row_'+id);\n  var currentRowImages = currentRow.find(\"img\");\n\n  //All rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  //Only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() {\n    var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n    return this.id.match(re);\n  });\n\n  //First row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    currentRowImages.filter(\"[id^=arr]\").attr('src', 'ftv2pnode.png');\n    currentRowImages.filter(\"[id^=img]\").attr('src', 'ftv2folderclosed.png');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide();\n  } else { //We are SHOWING\n    //All sub images\n    var childImages = childRows.find(\"img\");\n    var childImg = childImages.filter(\"[id^=img]\");\n    var childArr = childImages.filter(\"[id^=arr]\");\n\n    currentRow.find(\"[id^=arr]\").attr('src', 'ftv2mnode.png'); //open row\n    currentRow.find(\"[id^=img]\").attr('src', 'ftv2folderopen.png'); //open row\n    childImg.attr('src','ftv2folderclosed.png'); //children closed\n    childArr.attr('src','ftv2pnode.png'); //children closed\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">File List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented files with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00203.html\" target=\"_self\">flow_graph.h</a></td><td class=\"desc\">The graph related classes and functions </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00208.html\" target=\"_self\">memory_pool.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2doc.png\" alt=\"*\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00227.html\" target=\"_self\">scalable_allocator.h</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>abort()\n: <a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>acquire()\n: <a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">tbb::spin_mutex::scoped_lock</a>\n</li>\n<li>add()\n: <a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>add_filter()\n: <a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">tbb::pipeline</a>\n</li>\n<li>allocate()\n: <a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">tbb::internal::tbb_exception_ptr</a>\n</li>\n<li>allocator_type\n: <a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>assign()\n: <a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a87355dce93d0882aa73333a35c9b367c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>at()\n: <a class=\"el\" href=\"a00060.html#a629a29eb21e528414b9d5c9becfe05cd\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>automatic\n: <a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">tbb::task_scheduler_init</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>back()\n: <a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>begin()\n: <a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>blocked_range()\n: <a class=\"el\" href=\"a00034.html#a75cae12286f4d5492970ea630a9783b9\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>blocked_rangeNd_impl()\n: <a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n</li>\n<li>blocking_terminate()\n: <a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">tbb::task_scheduler_init</a>\n</li>\n<li>bucket_count()\n: <a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>built_successors_type\n: <a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity()\n: <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cbegin()\n: <a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cend()\n: <a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>cols()\n: <a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>concurrent_priority_queue()\n: <a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_unordered_map()\n: <a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multimap()\n: <a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multiset()\n: <a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_set()\n: <a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#aa898a39aad73711ceca70cd465dc0b4f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>const_accessor()\n: <a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>const_iterator\n: <a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>const_reference\n: <a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>construct()\n: <a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n</li>\n<li>continue_receiver()\n: <a class=\"el\" href=\"a00063.html#ac860c7f19e8aaf7c26128b05920afa96\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>crbegin()\n: <a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>crend()\n: <a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>current_thread_index()\n: <a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">tbb::interface7::task_arena</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>deallocate()\n: <a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;</a>\n</li>\n<li>debug_wait_until_empty()\n: <a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">tbb::interface7::task_arena</a>\n</li>\n<li>default_num_threads()\n: <a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">tbb::task_scheduler_init</a>\n</li>\n<li>deferred\n: <a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">tbb::task_scheduler_init</a>\n</li>\n<li>destroy()\n: <a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">tbb::internal::tbb_exception_ptr</a>\n</li>\n<li>detach()\n: <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>difference_type\n: <a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>downgrade_to_reader()\n: <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">tbb::queuing_rw_mutex::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>ec_bad_arg\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_call\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_ver\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_no_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_ok\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_abort\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_status\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_throw\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">tbb::interface6::runtime_loader</a>\n</li>\n<li>emplace()\n: <a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>emplace_back()\n: <a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>empty()\n: <a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>end()\n: <a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a5ed0248f10a7aa5045d2cda77dad9588\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>enqueue()\n: <a class=\"el\" href=\"a00158.html#a0c8d4caa8f2902cf06100cc926347bee\">tbb::interface7::task_arena</a>\n</li>\n<li>enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#ad95ccef01367c0b6d75f6f91f5bf5315\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>erase()\n: <a class=\"el\" href=\"a00050.html#a3ed0fbcc6cfd4db8242e100355ac1fa5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>error_code\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader</a>\n</li>\n<li>error_mode\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader</a>\n</li>\n<li>exact_exception_propagation\n: <a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">tbb::filter</a>\n</li>\n<li>exclude()\n: <a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>execute()\n: <a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">tbb::interface6::aggregator</a>\n, <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">tbb::interface7::task_arena</a>\n</li>\n<li>execute_impl()\n: <a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>filter_is_bound\n: <a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">tbb::filter</a>\n</li>\n<li>filter_is_out_of_order\n: <a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">tbb::filter</a>\n</li>\n<li>filter_is_serial\n: <a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">tbb::filter</a>\n</li>\n<li>filter_may_emit_null\n: <a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">tbb::filter</a>\n</li>\n<li>find()\n: <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>finish()\n: <a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>fixed_pool()\n: <a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">tbb::interface6::fixed_pool</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>get_allocator()\n: <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>grainsize()\n: <a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>grow_by()\n: <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>grow_to_at_least()\n: <a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>initialize()\n: <a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">tbb::interface7::task_arena</a>\n</li>\n<li>input_type\n: <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>insert()\n: <a class=\"el\" href=\"a00050.html#a50c929e78ecfa36986c8821287665a70\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_construct()\n: <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">tbb::spin_mutex</a>\n</li>\n<li>internal_copy()\n: <a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_equal_range()\n: <a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_fast_find()\n: <a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>interval_t()\n: <a class=\"el\" href=\"a00087.html#a73b462297173f6bffa15bc5a86c30ef4\">tbb::tick_count::interval_t</a>\n</li>\n<li>is_active()\n: <a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">tbb::interface7::task_arena</a>\n</li>\n<li>is_divisible()\n: <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_observing()\n: <a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>is_splittable_in_proportion\n: <a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_writer()\n: <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x6a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_j\"></a>- j -</h3><ul>\n<li>join()\n: <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>limiter_node\n: <a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>load()\n: <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">tbb::interface6::runtime_loader</a>\n</li>\n<li>local()\n: <a class=\"el\" href=\"a00072.html#abbbc24a5816dc163d5df057c5e7f379d\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>lock()\n: <a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>lock_read()\n: <a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>lookup()\n: <a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>make_filter\n: <a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">tbb::interface6::filter_t&lt; T, U &gt;</a>\n</li>\n<li>malloc_type\n: <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>max_concurrency()\n: <a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">tbb::interface7::task_arena</a>\n</li>\n<li>max_size()\n: <a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n</li>\n<li>may_sleep()\n: <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>memory_pool()\n: <a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>move()\n: <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>\n</li>\n<li>mutex()\n: <a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>my_exception_data\n: <a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>name()\n: <a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>native_handle_type\n: <a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">tbb::recursive_mutex</a>\n</li>\n<li>now()\n: <a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">tbb::tick_count</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>observe()\n: <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3</a>\n, <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>on_scheduler_entry()\n: <a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>on_scheduler_exit()\n: <a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>operator delete()\n: <a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">tbb::tbb_exception</a>\n</li>\n<li>operator()()\n: <a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n<li>operator*()\n: <a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator+\n: <a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator+=()\n: <a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-\n: <a class=\"el\" href=\"a00087.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count::interval_t</a>\n, <a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count</a>\n</li>\n<li>operator-=()\n: <a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-&gt;()\n: <a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator=()\n: <a class=\"el\" href=\"a00050.html#aac73665b1a55e3de7332f36598488252\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>operator[]()\n: <a class=\"el\" href=\"a00060.html#a3097cb46511504acfc9de7da5235f4a6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>output_type\n: <a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>page_range_type\n: <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>pages()\n: <a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>parallel_while()\n: <a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>pipeline()\n: <a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">tbb::pipeline</a>\n</li>\n<li>pop()\n: <a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>predecessor_type\n: <a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>process()\n: <a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n<li>process_item()\n: <a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">tbb::thread_bound_filter</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a72ff26945c61b4ce3ce7ca0f9b9aaa48\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>push_back()\n: <a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>queuing_mutex()\n: <a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">tbb::queuing_mutex</a>\n</li>\n<li>queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">tbb::queuing_rw_mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>range()\n: <a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>rbegin()\n: <a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">tbb::recursive_mutex</a>\n</li>\n<li>reference\n: <a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>register_predecessor()\n: <a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>register_successor()\n: <a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n<li>rehash()\n: <a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>release()\n: <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>release_wait()\n: <a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>remove_predecessor()\n: <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>remove_successor()\n: <a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>rend()\n: <a class=\"el\" href=\"a00060.html#abdb98e17cb65d9c445d7fd1e662c2699\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve()\n: <a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve_wait()\n: <a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>reset_receiver()\n: <a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n<li>resize()\n: <a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>resolution()\n: <a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">tbb::tick_count</a>\n</li>\n<li>row_range_type\n: <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>rows()\n: <a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>run()\n: <a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>run_and_put_task\n: <a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>runtime_loader()\n: <a class=\"el\" href=\"a00139.html#a2f87eaf99564c705aa140f2eb8848eaa\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>seconds()\n: <a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">tbb::tick_count::interval_t</a>\n</li>\n<li>set_capacity()\n: <a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>set_state()\n: <a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">tbb::mutex</a>\n</li>\n<li>shrink_to_fit()\n: <a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>size_type\n: <a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">tbb::interface6::flattened2d&lt; Container &gt;</a>\n</li>\n<li>spin_mutex()\n: <a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">tbb::spin_mutex</a>\n</li>\n<li>spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>start()\n: <a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>start_routine()\n: <a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>\n, <a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>status()\n: <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">tbb::interface6::runtime_loader</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>successor_type\n: <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>swap()\n: <a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>task_arena()\n: <a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">tbb::interface7::task_arena</a>\n</li>\n<li>task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">tbb::task_scheduler_init</a>\n</li>\n<li>task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>tbb_thread_v3()\n: <a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>terminate()\n: <a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">tbb::task_scheduler_init</a>\n</li>\n<li>throw_self()\n: <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>\n</li>\n<li>tick_count()\n: <a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tbb::tick_count</a>\n</li>\n<li>try_acquire()\n: <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>try_consume()\n: <a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_get()\n: <a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">tbb::mutex</a>\n</li>\n<li>try_lock_read()\n: <a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>try_pop()\n: <a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_process_item()\n: <a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">tbb::thread_bound_filter</a>\n</li>\n<li>try_push()\n: <a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_put()\n: <a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>try_put_task()\n: <a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>try_release()\n: <a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_reserve()\n: <a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">tbb::recursive_mutex</a>\n</li>\n<li>unsafe_size()\n: <a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>upgrade_to_writer()\n: <a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value_type\n: <a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n, <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>what()\n: <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">tbb::captured_exception</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_0x7e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented class members with links to the class documentation for each member:</div>\n\n<h3><a class=\"anchor\" id=\"index_0x7e\"></a>- ~ -</h3><ul>\n<li>~combinable()\n: <a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">tbb::combinable&lt; T &gt;</a>\n</li>\n<li>~concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>~concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>~const_accessor()\n: <a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>~enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>~fixed_pool()\n: <a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">tbb::interface6::fixed_pool</a>\n</li>\n<li>~memory_pool()\n: <a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>~parallel_while()\n: <a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>~pipeline()\n: <a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">tbb::pipeline</a>\n</li>\n<li>~queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">tbb::queuing_rw_mutex</a>\n</li>\n<li>~reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>~receiver()\n: <a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>~runtime_loader()\n: <a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">tbb::interface6::runtime_loader</a>\n</li>\n<li>~scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>~scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>~spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>~task_arena()\n: <a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">tbb::interface7::task_arena</a>\n</li>\n<li>~task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">tbb::task_scheduler_init</a>\n</li>\n<li>~task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>~task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>~untyped_receiver()\n: <a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Enumerations</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li class=\"current\"><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>error_code\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7\">tbb::interface6::runtime_loader</a>\n</li>\n<li>error_mode\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295\">tbb::interface6::runtime_loader</a>\n</li>\n<li>malloc_type\n: <a class=\"el\" href=\"a00167.html#a60463a571d5c20f7762112367261ad94\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed\">tbb::interface5::reader_writer_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Enumerator</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>ec_bad_arg\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afd928f63eb3da0980e746d58374b07c3\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_call\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a670e4d0a5a3c1bbcdff9e5ee16dc9c01\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a71f874957c0322f499ba764dd0bb8732\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_bad_ver\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7aae7497a49ceae69d06d6ab9fef636064\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_no_lib\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7a5e694560f3ada80d2cc25881b5ae43dd\">tbb::interface6::runtime_loader</a>\n</li>\n<li>ec_ok\n: <a class=\"el\" href=\"a00139.html#a264674772d9f4240d89aa9d939c1eef7afc7eba28f2fc936312f041cf85276434\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_abort\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295ac41f8e03c7e8bfc6a420be035d59cc35\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_status\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295af9c9137d6acdb0fd37f1a92b5cdaeb36\">tbb::interface6::runtime_loader</a>\n</li>\n<li>em_throw\n: <a class=\"el\" href=\"a00139.html#ab85c82f9c0ccd91905f2795a79ac1295a17ec1019cffa635146eaefb042e28a2c\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>abort()\n: <a class=\"el\" href=\"a00049.html#a77a755d94cabf5208905d10d5b57419c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>acquire()\n: <a class=\"el\" href=\"a00040.html#a0d7d8f3d101bb18056b8e5d4d2c8b079\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n, <a class=\"el\" href=\"a00142.html#abf8aa7ccd48d54dcb53665700a17d02a\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a6d49df365396ab314e78ba07c6b96433\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#ab4bf2fb86d6a418f9ea36474eb8893f9\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00150.html#a9fce3e2e9f592315dc9c1ada72ae5e3c\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#ac5450ce6a5813f395afaa434384c6539\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7c702117f08ae82d034a98b3d5510ffc\">tbb::spin_mutex::scoped_lock</a>\n</li>\n<li>add()\n: <a class=\"el\" href=\"a00116.html#a4861989d7f5e3111d264d4d6013e8fe1\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>add_filter()\n: <a class=\"el\" href=\"a00117.html#a8eb83014bd53b184e0ed50f120ca310b\">tbb::pipeline</a>\n</li>\n<li>allocate()\n: <a class=\"el\" href=\"a00170.html#abfbea91401d2594deb04ea331734171c\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00041.html#a99d05096f80877849cb31d80247e0f85\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a10b9888883a3dbd66e87c4a7f874ef28\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00140.html#acf24945c12dc0586dfb1f8638daf7838\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#afedd8a64eed9692083c708f419338e0c\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>allocator_type()\n: <a class=\"el\" href=\"a00167.html#aa4606cff0156ec4237c1571204851bfb\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>assign()\n: <a class=\"el\" href=\"a00060.html#a7bb5399a8499f88cf859eab39f0ed9e0\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac1b3a945aac5a17c85d56756cc6aa3d1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a584d6cda5794441b19d4f02bde399dff\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>at()\n: <a class=\"el\" href=\"a00060.html#ae4dc6c1b55c0e0b73f0a8675ef2b60a4\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>back()\n: <a class=\"el\" href=\"a00060.html#aaee3ddf1d05238a8a6887f6d824b76f8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>begin()\n: <a class=\"el\" href=\"a00034.html#ae225fa10454b0fa33533dfb56f5060a2\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00072.html#aa097383eb6f90e4a551830fc00b60b3a\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ab55636c80368ad7d400f3200313fcf5f\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00022.html#aefcd343548f92c6e738febedf1d75f74\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00060.html#ad3eb33d1b10a988a87cc708ceb08f3a9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a070d26debf1f65c83de13f64f91aefdc\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>blocked_range()\n: <a class=\"el\" href=\"a00034.html#aad176ab2cbd0bd73c3c2065761af3ccc\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>blocked_rangeNd_impl()\n: <a class=\"el\" href=\"a00038.html#ab95cb7c03dc5a1e600105e3ac019287b\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n</li>\n<li>blocking_terminate()\n: <a class=\"el\" href=\"a00164.html#a2721ff874fb21f97b470d14a5ec151f3\">tbb::task_scheduler_init</a>\n</li>\n<li>bucket_count()\n: <a class=\"el\" href=\"a00050.html#aa067a2a4db1d96f38555369a89deee64\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity()\n: <a class=\"el\" href=\"a00049.html#a526487063242569685af8c8d778d39e0\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a96c2ae9dfedc24d62554feb627df76c3\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cbegin()\n: <a class=\"el\" href=\"a00060.html#a7a1c5441fa480c07ef37d9206b6260cc\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>cend()\n: <a class=\"el\" href=\"a00060.html#a9ea80faf139feb54d6576c036e4ba898\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"a00049.html#a246be3920e079ea4847933f106baa98f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a526ba408fb3064ef846940d633b8f365\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ab8295bc260b5e4df883fef11574b84c6\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a85a0d8f088ef1ee07aeb2c0e944a4a5e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00117.html#ae53edbda1771eeaa254d78ae6100a762\">tbb::pipeline</a>\n, <a class=\"el\" href=\"a00052.html#a2459166998a4103880d603b237c429e6\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ad3384818fb6350a494d5ec62445e59ee\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>cols()\n: <a class=\"el\" href=\"a00035.html#af3bccfaf90126b285491096f78ca9473\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a308d7089a1d53ff26770a7040ed817cd\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#a228b9d3bf3158a9379748894a93fbe55\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#aa3a9767b525144a2afb69ed125714c53\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>concurrent_priority_queue()\n: <a class=\"el\" href=\"a00052.html#a14dd20a4673f77cff3eb6f269a888016\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n<li>concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#a49b2e16902577cd3174355be0fa684e5\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>concurrent_unordered_map()\n: <a class=\"el\" href=\"a00054.html#a788a7225915574c1a349abc0f1f653c7\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multimap()\n: <a class=\"el\" href=\"a00056.html#a5957d29e5fa9f8c53538de3f7a41ebc9\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_multiset()\n: <a class=\"el\" href=\"a00057.html#a15631f048043195863c66bad6533bccb\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_unordered_set()\n: <a class=\"el\" href=\"a00058.html#a6f6d5ecff239ff13000848e925904fe7\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a>\n</li>\n<li>concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#a5bd95c2241653c760704a92b2c887a48\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>const_accessor()\n: <a class=\"el\" href=\"a00061.html#a7b26d22d228cf0d8678c9b346c63752c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>construct()\n: <a class=\"el\" href=\"a00167.html#af54fa3029e33cebe5ba64a8538306fdf\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#ac51b34ef90ecabdd2e0483e25603a15b\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00041.html#ab316f80a66b991801b4ec4ea88b852d9\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n</li>\n<li>continue_receiver()\n: <a class=\"el\" href=\"a00063.html#a6525c867f797a1feb9b77b5bb39f155f\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>count()\n: <a class=\"el\" href=\"a00050.html#ac375d3884bf9c80efe56117757c822e7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>crbegin()\n: <a class=\"el\" href=\"a00060.html#a2627db4a7949522ea4727320b23a6348\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>crend()\n: <a class=\"el\" href=\"a00060.html#ad097225c529dbb24cc0e13a444ab4752\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>current_thread_index()\n: <a class=\"el\" href=\"a00158.html#af695a8aa3d2a4f498067c662e287dd8f\">tbb::interface7::task_arena</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>deallocate()\n: <a class=\"el\" href=\"a00041.html#a7f7310e046c4b6b8618864de8e27a471\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a9fcf288f2d653972d1bdc0c65abebed4\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a28e333e0fff56dd53c20b82cfee430ab\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00140.html#a0632b19f25e5d5f86f18b3101925f488\">tbb::scalable_allocator&lt; T &gt;</a>\n</li>\n<li>debug_wait_until_empty()\n: <a class=\"el\" href=\"a00158.html#a07d87dff8c6116ee349684e10f754aeb\">tbb::interface7::task_arena</a>\n</li>\n<li>default_num_threads()\n: <a class=\"el\" href=\"a00164.html#aa0c0d46ec09bedc1ee876aa8aa87c3d1\">tbb::task_scheduler_init</a>\n</li>\n<li>destroy()\n: <a class=\"el\" href=\"a00046.html#abfc1220a6f9da0361082a3f3ad80cdc9\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00170.html#a38d3ca480e2758a67bcd7427b156daae\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00092.html#a2223b6469f88aadc432a4b3f88728d0f\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00167.html#ac7b1b393a8ff3399079328c0971c1996\">tbb::tbb_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00041.html#af2fd054d055403d4ea669fd3af661cc8\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00169.html#ad3bc09bf78c33f19a0bcdf882fdf9d41\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#aa4be7e2bf375edcb218fb5d7ed8e279b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>detach()\n: <a class=\"el\" href=\"a00171.html#a80a31a41708872af5557b907f129b19b\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>downgrade_to_reader()\n: <a class=\"el\" href=\"a00144.html#aa693c05221d977856a98270a255fe5df\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af0af63035147a3d8422f8c8d7b8d2629\">tbb::queuing_rw_mutex::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>emplace()\n: <a class=\"el\" href=\"a00050.html#a382178ea2f00f69096c91bcf76ae7913\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a278d208cd92e5aeccc9c7f6fc192e3ce\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#acbe1d0f3a87786a83a7021af2ef52ee0\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>emplace_back()\n: <a class=\"el\" href=\"a00060.html#afae4c378515b89cc2b0a11c8cf1bcc50\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>empty()\n: <a class=\"el\" href=\"a00036.html#aea992e0cd3d105f964a633b1a0a1a05f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00061.html#a6299b523d2ae8e2613f1bc160ca99b85\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00050.html#a5e05f2a1ca3accfb4252d7ee82d1e990\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a8dec2dd0e8b22af14f1753eaef1bf5eb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a59dec03416b3fefbf69600f798177710\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeda3156929d0c250faed7b807ca6ab0e\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a8c59578f28c5fb4718b0eff43776e879\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a5805972c8c41b2681d286f9c9771cf52\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aa3f6774107e65642f73c0dcc9a962fe7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#adfa4b2e13e47ab825dc40c4f195d2bc5\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>end()\n: <a class=\"el\" href=\"a00022.html#aa2ec5fe3a8f1641884358740766fde34\">tbb::aligned_space&lt; T, N &gt;</a>\n, <a class=\"el\" href=\"a00034.html#a99f829599d3e51b181a30b4cd57b06c6\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00060.html#aad2c07653375e4a5f89c33b375eda610\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#ad225e2e8a968b131bf05d72f5686b924\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>enqueue()\n: <a class=\"el\" href=\"a00158.html#ab183022f20a7f622b581729e56c585a3\">tbb::interface7::task_arena</a>\n</li>\n<li>enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#aa636348d57b1fc5127c7d642af51f6da\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>erase()\n: <a class=\"el\" href=\"a00050.html#a2ec6f95ed9beda9d32df56cdd45c1842\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>exclude()\n: <a class=\"el\" href=\"a00050.html#a6fec452b31b8f0e185dc2de64b7128b2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>execute()\n: <a class=\"el\" href=\"a00158.html#ad6e39e1bd277960c1d1d3637e9ba3501\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00019.html#aa7cc924b6f0d17578d61fd9002f59f84\">tbb::interface6::aggregator</a>\n, <a class=\"el\" href=\"a00158.html#a9ff5c301ba9f7121bb0ace48a8c387f7\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00063.html#a3efb5c784ac38993df3bbcee009add6a\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>execute_impl()\n: <a class=\"el\" href=\"a00020.html#ad376e5c31d10e885f33964592aa629d4\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>find()\n: <a class=\"el\" href=\"a00050.html#a27a3f296dc170ae25f8e3fd9efa93cff\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>finish()\n: <a class=\"el\" href=\"a00021.html#ac7edadfe74f475783f3b429904e7010a\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>fixed_pool()\n: <a class=\"el\" href=\"a00077.html#aa3811fe3d437ba2eefa926d52732491a\">tbb::interface6::fixed_pool</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"a00060.html#a9bfc6d733cf543280b691ed8d7b7908a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x67.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>get_allocator()\n: <a class=\"el\" href=\"a00050.html#a121865c574f8ae5cae69ed3d6b7e0511\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a312e88e51246da4c516d35abbb30721a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#aaeba11bbcd368a7a3a6e6e2dd3082c9c\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a88b62a9614d3f2b59c9c7c1a2143fb1e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a7f2b39f350281590b86db906eca6c480\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>grainsize()\n: <a class=\"el\" href=\"a00034.html#ab408f3cf90c85fa9203df5641a2f9bb1\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>grow_by()\n: <a class=\"el\" href=\"a00060.html#aa11fc991cda82cf93789fce31b37a16c\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>grow_to_at_least()\n: <a class=\"el\" href=\"a00060.html#a422d9689ed72a5ef2b6b72f28e4143a2\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>hardware_concurrency()\n: <a class=\"el\" href=\"a00171.html#a23d7a420709b2e2b29b42dea897bd8bc\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>initialize()\n: <a class=\"el\" href=\"a00158.html#a955131a79f8dc5a0a5c9ffa66a7e7140\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a485028b867bffef5829209330e79e64c\">tbb::task_scheduler_init</a>\n, <a class=\"el\" href=\"a00158.html#aace9ac1366eb3e0ec921da11699ba236\">tbb::interface7::task_arena</a>\n</li>\n<li>insert()\n: <a class=\"el\" href=\"a00050.html#ae0b420cdb752e749790c8a7daa15c3c2\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_construct()\n: <a class=\"el\" href=\"a00154.html#a4ec484f4df6ec5595ec821ef20bd6cd7\">tbb::spin_mutex</a>\n</li>\n<li>internal_copy()\n: <a class=\"el\" href=\"a00050.html#a0bc3593f82b3b4f9839fc051780212ab\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_equal_range()\n: <a class=\"el\" href=\"a00050.html#a8603f5288db63ec35a16844427e97e42\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>internal_fast_find()\n: <a class=\"el\" href=\"a00050.html#acbb5b18c097fb32f264b7b5fe8d9fdd4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>interval_t()\n: <a class=\"el\" href=\"a00087.html#a95e3e14750bebafe719856176e2737db\">tbb::tick_count::interval_t</a>\n</li>\n<li>is_active()\n: <a class=\"el\" href=\"a00158.html#ad85856cefa30d42155a2b122b03efd8c\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#aed5505d7fed9d5493676aa15c176512c\">tbb::task_scheduler_init</a>\n</li>\n<li>is_divisible()\n: <a class=\"el\" href=\"a00034.html#ad90ad1db0d4d9a301ef1c9e17712e8a0\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00035.html#ac84c6cc2ff8b0974ffa719fed804f586\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a0fce6bcae6269c37623c3a2cdbb8bcf0\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_observing()\n: <a class=\"el\" href=\"a00166.html#a31abaf256f7172f010cfb2259c7787bb\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>is_writer()\n: <a class=\"el\" href=\"a00040.html#aaa8167e2961330435fd23eb92127805c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x6a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_j\"></a>- j -</h3><ul>\n<li>join()\n: <a class=\"el\" href=\"a00171.html#a044c8727c51e921b0cc43a6b057eb559\">tbb::internal::tbb_thread_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>load()\n: <a class=\"el\" href=\"a00139.html#ae2949e9adcac56a2cb9864437be8e22e\">tbb::interface6::runtime_loader</a>\n</li>\n<li>local()\n: <a class=\"el\" href=\"a00072.html#aea846c6cbafbe2ff6bde6e8c2a2ee97e\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>lock()\n: <a class=\"el\" href=\"a00097.html#a95ff02ee699b34696001db4003c11a3a\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00155.html#a51e207646300a4c242bb4aaa4e04e9b8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00154.html#a8957e40b0781192419d01d28e5205ec4\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00122.html#af92eb949fc491af8f7e350869ea0a0d1\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00135.html#adea997b45dc4a360f38d14bde9c991f2\">tbb::recursive_mutex</a>\n</li>\n<li>lock_read()\n: <a class=\"el\" href=\"a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00155.html#aa0e3bb644e9021d0f80ee36b03f228e4\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>lookup()\n: <a class=\"el\" href=\"a00050.html#a2a319cf46fb9cf9a88aab6c0a20c98b3\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>max_concurrency()\n: <a class=\"el\" href=\"a00158.html#a2977b0fba9253e6cab31570f4992c998\">tbb::interface7::task_arena</a>\n</li>\n<li>max_size()\n: <a class=\"el\" href=\"a00041.html#a4b945b3180ea3dfe16dfa048f4591c6d\">tbb::cache_aligned_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a0ec9c3ab3360e04bdaa5174956a3206d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00092.html#a2bded8e3fb2cec32b48771e7a1bbb838\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a>\n, <a class=\"el\" href=\"a00050.html#aea0a0e5220a0dcb67da57d0280d36005\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00140.html#afaa85d739b466699cf669116fd10d175\">tbb::scalable_allocator&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00167.html#a0a2676fb8a2f931961d373b88848c93e\">tbb::tbb_allocator&lt; T &gt;</a>\n</li>\n<li>may_sleep()\n: <a class=\"el\" href=\"a00165.html#a2390325945912ee7ce58cd9700664ea4\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>memory_pool()\n: <a class=\"el\" href=\"a00091.html#af4c36829a159eac04d630ac5a99b9354\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>move()\n: <a class=\"el\" href=\"a00096.html#a46eee42a3279007f48c9e8f11d074d16\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a3b75205c631b51a00faf98c9e107f78a\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00169.html#a4bd4ba0d501021013d1473d21b020b69\">tbb::tbb_exception</a>\n</li>\n<li>mutex()\n: <a class=\"el\" href=\"a00097.html#ad1b280c954ffc8b8b3e63e4ee4144035\">tbb::mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>name()\n: <a class=\"el\" href=\"a00169.html#a282bb7dce5f157d044d14d50cd6ff35c\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a543e1a18c9a3f3b093c8c2bd927a6d12\">tbb::captured_exception</a>\n, <a class=\"el\" href=\"a00096.html#ae74fdea1aac39197bc1f5026dfd0a840\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>now()\n: <a class=\"el\" href=\"a00177.html#a74dcecde7431ff4591d7c46fc1d50d7e\">tbb::tick_count</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>observe()\n: <a class=\"el\" href=\"a00166.html#a40209b347e3c82bb5bfda05941304309\">tbb::internal::task_scheduler_observer_v3</a>\n, <a class=\"el\" href=\"a00165.html#ad5b33790cea52c61e1fb004a8ed26365\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>on_scheduler_entry()\n: <a class=\"el\" href=\"a00166.html#af4282a27725fbe86052bb785bdd9c5d3\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>on_scheduler_exit()\n: <a class=\"el\" href=\"a00166.html#a657e90f833568e217b807d0122fa7668\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>operator delete()\n: <a class=\"el\" href=\"a00169.html#a6a973c37078afedf7d457ff4704bf8cd\">tbb::tbb_exception</a>\n</li>\n<li>operator()()\n: <a class=\"el\" href=\"a00040.html#a16e714a5e77dbf8daf81973df30722d4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a>\n</li>\n<li>operator*()\n: <a class=\"el\" href=\"a00017.html#a4e03905a33fbdafdb99113cc68d2bd4b\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#a8adf04e33e7c8c876ba849f26807713a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>operator+=()\n: <a class=\"el\" href=\"a00087.html#a19bf32f4541252daaa6b09fd33fa9177\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-=()\n: <a class=\"el\" href=\"a00087.html#a3394d9f3678e6a4c3d6e1be840fe2ff2\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-&gt;()\n: <a class=\"el\" href=\"a00061.html#a28fa9b9e6c35d7e80217e69a7afe1ee5\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n, <a class=\"el\" href=\"a00017.html#ab04f73bd4a4ca7df0dc91a7b4d66f987\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n</li>\n<li>operator=()\n: <a class=\"el\" href=\"a00050.html#a63e01b1f79c287ae0257ccfd483fd90a\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a9b21bd56aff8c412c5fcdd0d88b48c98\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a920384aece0eb8beea3049956320ec91\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#ac0c3f41b10f04547f3438517c40cf8a5\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a1fe7f0b60bbf304890a9293a35e6819d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7eaa05dcb74604e45e0e2c55e1e456e9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a8498a1335a3bbac2f4925a4e8d70cdb8\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a92b506ceed93d1c25979948961054380\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>operator[]()\n: <a class=\"el\" href=\"a00060.html#abd6ca67f2f97fafca48395af2e693e73\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>pages()\n: <a class=\"el\" href=\"a00036.html#a5b794fd53ba92106aeafa4eed85731d4\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>parallel_while()\n: <a class=\"el\" href=\"a00116.html#a220a7307358aa36802c8754ea45ca385\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>pipeline()\n: <a class=\"el\" href=\"a00117.html#afe7b7bd9b2617c2b69170675a478b2bd\">tbb::pipeline</a>\n</li>\n<li>pop()\n: <a class=\"el\" href=\"a00049.html#a87926c31967a918ce80690a9ed5d6fa8\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>process()\n: <a class=\"el\" href=\"a00020.html#ae55b16ec6af204aa00d6a716fccec9f7\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a>\n</li>\n<li>process_item()\n: <a class=\"el\" href=\"a00172.html#ac99258407f382d84568a510075074fc7\">tbb::thread_bound_filter</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"a00049.html#ae5e9051772bbc93b2ccb8fd0a98a21f5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a1bfa0e7269b3407d6bb5c706264d2406\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a62a03e9c185562254ecb4104f38c106d\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9330ca6590980d80ef7b1ea3613a699a\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>push_back()\n: <a class=\"el\" href=\"a00060.html#ac29a9f08c0fac7c20786c7b8f4f0321a\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>queuing_mutex()\n: <a class=\"el\" href=\"a00120.html#a0e58fce2062ae349a30b320b7fdc9155\">tbb::queuing_mutex</a>\n</li>\n<li>queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#a23de1ac415b6f54b778c8fd6ec6073e0\">tbb::queuing_rw_mutex</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>range()\n: <a class=\"el\" href=\"a00060.html#a8201f65735edcc28aeec95b6e73d75b6\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a25b9153dfe994c8122a7f0227cffe793\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>rbegin()\n: <a class=\"el\" href=\"a00060.html#a9a2f8dce0adcbef8e29273c23723a78e\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#abceda6c50b0c36eacbef51f4682742f3\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>recursive_mutex()\n: <a class=\"el\" href=\"a00135.html#a47eb6e7e7ffa5d35341125792b17236b\">tbb::recursive_mutex</a>\n</li>\n<li>register_predecessor()\n: <a class=\"el\" href=\"a00178.html#aa804e9e4040859e05989e2297d2e7216\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a9e6f87b3c25f7d6b5d92226e36c0b830\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a74596e8e05663573189d7b6c66dfad7c\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>register_successor()\n: <a class=\"el\" href=\"a00179.html#ac741e0b13af8918175b46e5b2aa0de06\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad400086a57cb5efd351dbef833f208fa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>rehash()\n: <a class=\"el\" href=\"a00050.html#adf1fa9470c605731063e5949f0418eb7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>release()\n: <a class=\"el\" href=\"a00150.html#a1a1590281ccca912229a689d920fd78a\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aaa065e48b428b8d43e9bb931ba9e6f6c\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a50fb02b77f02a01c74754d163157ec77\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a2fe3246ffc26bdb5a58f33ca513b6c0f\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a7e801b0c28fd8395fec400b96acc5c34\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a99e279a995a51abfb87b865e886949f8\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00061.html#a18390cb369369d72bdf7c867755b5190\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>release_wait()\n: <a class=\"el\" href=\"a00084.html#ad4e11378739911c10db09ba71abe7c1a\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>remove_predecessor()\n: <a class=\"el\" href=\"a00178.html#a03e9c0578f5724dd82381777d3c6c799\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#ab3ce4335dd5d73823c6568f3dfd704f0\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#adb90a3427caad6c4ef6d3d590de988bc\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>remove_successor()\n: <a class=\"el\" href=\"a00153.html#a073d7519ae90412ace6cfda4f86dc0d7\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#a63f227b9cb89c86d9ab42c2c7f541321\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n<li>rend()\n: <a class=\"el\" href=\"a00060.html#a618f38279a370c18f73ea2c29ded9cb9\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve()\n: <a class=\"el\" href=\"a00060.html#a0b3284684328c58c0228c9a697ef3594\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>reserve_wait()\n: <a class=\"el\" href=\"a00084.html#a49a9be5db28923f84cfc468d39139fb3\">tbb::flow::interface10::graph_proxy</a>\n</li>\n<li>reset_receiver()\n: <a class=\"el\" href=\"a00178.html#a721fc420f0483e9c6b2d6fbad4ba5b20\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#ab2805ed9ad8baaa027676e024de59fb1\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a8d3c9bfbf36e9e743bb7f5954e061d49\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>resize()\n: <a class=\"el\" href=\"a00060.html#a941917a8a840ff08ce8810ca9476ff46\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>resolution()\n: <a class=\"el\" href=\"a00177.html#aaf6a0d91e7d40f7d68e0ad6b79350e58\">tbb::tick_count</a>\n</li>\n<li>rows()\n: <a class=\"el\" href=\"a00036.html#aeac1def585af81467573f30ebb42cb4f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00035.html#a4f7299e74c40df57dee2433c07ce65ae\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n<li>run()\n: <a class=\"el\" href=\"a00116.html#a20607ba5faa958144787d980aa850c16\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00117.html#a270dba81f7dd9935be7f3d69db907ff4\">tbb::pipeline</a>\n</li>\n<li>runtime_loader()\n: <a class=\"el\" href=\"a00139.html#a3e0932074d2f3ad04605e7e5da88c561\">tbb::interface6::runtime_loader</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a23122745ccd5fc2498fcbbd5ced09e06\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#aa82d9da0dcfe5b21f1c08473f8223105\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a0a9962a3932cfbd0d12cb197494f951b\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a1ae3792726dcff8da1f2c5366fb2b754\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a4287be975cf2448c95f068b065c45107\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a0afe0107eb0aae613e726f67624d2fca\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#af1b55ca1839c9c7c2cd779cd2dd9c474\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a285b355121772c874a7ecaaf4d347224\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#aaed982d8c3f1e84298f9842063694f3c\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#a9d3120a23016dabd4cc2683fa561ee5a\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>seconds()\n: <a class=\"el\" href=\"a00087.html#abe81446bbbb6b6e98d854b91acf47809\">tbb::tick_count::interval_t</a>\n</li>\n<li>set_capacity()\n: <a class=\"el\" href=\"a00049.html#a768699675813575eec08c1f43afda395\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>set_state()\n: <a class=\"el\" href=\"a00097.html#a0857c4596d7d5de09fe402ccd41d3e42\">tbb::mutex</a>\n</li>\n<li>shrink_to_fit()\n: <a class=\"el\" href=\"a00060.html#aba805b5225ad3399550f78ea15e51e93\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"a00034.html#a347ef8caa40edca3b7f475f182281140\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00050.html#ad2ce6da7cd62bc7425f0a29498332ab4\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d86ba200474b51ec99a6b917429c6bb\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a9d6c20fd8c193c12b6a7b0c3101fd966\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#a4c33c5390783e17daf2b25d53ae919fb\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00060.html#a803268c16e3688ff4681251947d257c7\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>spin_mutex()\n: <a class=\"el\" href=\"a00154.html#a6c96196965bf7df426311d282ad3c378\">tbb::spin_mutex</a>\n</li>\n<li>spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#ad30fc1ffa0a2b8134e177e02c5821d7f\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>start()\n: <a class=\"el\" href=\"a00021.html#adc0e032aa604f1da85ffc7ec269b157f\">tbb::interface6::aggregator_operation</a>\n</li>\n<li>start_routine()\n: <a class=\"el\" href=\"a00174.html#a33d533b3301c45708c6252d040f855a6\">tbb::internal::thread_closure_1&lt; F, X &gt;</a>\n, <a class=\"el\" href=\"a00175.html#a29003179f98d768622c72b9ab5cfe8f6\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a>\n</li>\n<li>status()\n: <a class=\"el\" href=\"a00139.html#a85bf9ee021a2076a3ac7cfd70aae7345\">tbb::interface6::runtime_loader</a>\n</li>\n<li>swap()\n: <a class=\"el\" href=\"a00060.html#a8603bd57324fb6b60ba006884c95279d\">tbb::concurrent_vector&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#aa6ee6d356e538b67a7cb4e242e6e36c9\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00050.html#a4c8edf603bc776a6c84c007702c1808e\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>task_arena()\n: <a class=\"el\" href=\"a00158.html#abe92eac81ca849b110de69e6efd0e5aa\">tbb::interface7::task_arena</a>\n</li>\n<li>task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a8b2657d9b7c39fede2d19507d0e94688\">tbb::task_scheduler_init</a>\n</li>\n<li>task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a89025b1e1d42e97d6fe114c0c331f730\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a25bffb05efaaab36bc58590969e29745\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>tbb_thread_v3()\n: <a class=\"el\" href=\"a00171.html#a15b84e454eb0179e010b90a88baa0933\">tbb::internal::tbb_thread_v3</a>\n</li>\n<li>terminate()\n: <a class=\"el\" href=\"a00158.html#aecb3eedeacfe8469a91c17525dae7fc9\">tbb::interface7::task_arena</a>\n, <a class=\"el\" href=\"a00164.html#a15d5dca7f79c5769bb96f674e4da0c04\">tbb::task_scheduler_init</a>\n</li>\n<li>throw_self()\n: <a class=\"el\" href=\"a00096.html#a0e9ac8a4468eb0ff3b2bb246b806a10e\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00170.html#a1713aa9a6a3850049d34358397a8ed81\">tbb::internal::tbb_exception_ptr</a>\n, <a class=\"el\" href=\"a00169.html#ae45c08d36c7ec7ae91785da3515a8828\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00046.html#a6df0d3a1943ca6f84a9a9aca25e9633d\">tbb::captured_exception</a>\n</li>\n<li>tick_count()\n: <a class=\"el\" href=\"a00177.html#a9f1daa0b7a4feb800f802b4be1f1e497\">tbb::tick_count</a>\n</li>\n<li>try_acquire()\n: <a class=\"el\" href=\"a00150.html#a46f983371aa852d2427ce69f9a571f78\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#ab4800ba9e743cd91f152036a6689b0e9\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a4843d40dddc37c1aa3444e27d35d2433\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a160bba506f4033980ddb69ab7a02c4fb\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a76acbd67c74906f6ea33a1de6fd443ce\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#abf17ada91882fd70f139c503c0220f16\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>try_consume()\n: <a class=\"el\" href=\"a00179.html#a1339d605facfdeccbeb3486a6ed4bb28\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#ad394242fdfaef49f4be80dc3b113b92d\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_get()\n: <a class=\"el\" href=\"a00179.html#a41064c305f60fb0431b914573b070615\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a6881b9c5dc024a34ed72b0ffc567083a\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_lock()\n: <a class=\"el\" href=\"a00135.html#a8b181d9aaa95444145222cfe206e8094\">tbb::recursive_mutex</a>\n, <a class=\"el\" href=\"a00154.html#a003ffb196d22bf22ca22142338b7eeab\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab6ec20b1ec43a49c8c2908984e35b5e8\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a1739e842af52925a2d4a7e821b9b3b8d\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00097.html#a480283933106941125717499f9c5ad42\">tbb::mutex</a>\n</li>\n<li>try_lock_read()\n: <a class=\"el\" href=\"a00155.html#ac932f65b0b66320688e7957ce9c3e2c1\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>try_pop()\n: <a class=\"el\" href=\"a00052.html#a954177b09e184cf3db47f1b180a7ef5e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aabb1acef18196fa11ed7db8e046c3943\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a3086cb4dcdeee245ef5cf34f72fb3e10\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_process_item()\n: <a class=\"el\" href=\"a00172.html#a12cfa43c620066a8783529cc8519c6f9\">tbb::thread_bound_filter</a>\n</li>\n<li>try_push()\n: <a class=\"el\" href=\"a00049.html#a93f35e9d9381629e0a2993f9fdd96d92\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>try_put()\n: <a class=\"el\" href=\"a00178.html#a92cf020b790bb8edfb0e0c6e4192b72a\">tbb::flow::interface10::internal::untyped_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a6545b1434a16ee261ed6c4ee7f9044a6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#ac2e65f3f68b97122cf16f81de057d5f0\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00133.html#a9717a7ab9ad56f3210c08dbb320def77\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>try_put_task()\n: <a class=\"el\" href=\"a00133.html#a1ef34fd20efbb9e5dcb18877c38881d6\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a67ded0141aa65e09633d50421b1ffea8\">tbb::flow::interface10::continue_receiver</a>\n</li>\n<li>try_release()\n: <a class=\"el\" href=\"a00179.html#a7993fddebe9e449b8e71c4f7d402134d\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#adc1d83d8b2c81d3905e545b05373f5aa\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n<li>try_reserve()\n: <a class=\"el\" href=\"a00179.html#ac92c0a8321811fe2a76310f423b7c2ef\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a1006dd4583ea4049888c15810c8cb98f\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unlock()\n: <a class=\"el\" href=\"a00097.html#a721eeae7ba16f8b92535f4534b583874\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00122.html#a4c55c4dbde63e950fdc843c9b01a174f\">tbb::interface5::reader_writer_lock</a>\n, <a class=\"el\" href=\"a00154.html#adfcf8fe840aa73c08c2cadd570fd48fd\">tbb::spin_mutex</a>\n, <a class=\"el\" href=\"a00155.html#ab04321ed2cdf12ac5825c54591028fc0\">tbb::spin_rw_mutex_v3</a>\n, <a class=\"el\" href=\"a00135.html#af57e8d25e0e7614e98bcfa50bc9416c8\">tbb::recursive_mutex</a>\n</li>\n<li>unsafe_size()\n: <a class=\"el\" href=\"a00053.html#aad4b253ba595637b0b146eb6565556f2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>upgrade_to_writer()\n: <a class=\"el\" href=\"a00149.html#ae0f28ecfbbc5f8b3024cd47048b72b5b\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#afbe5de57eadc457518df7a1bb0d30c00\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>what()\n: <a class=\"el\" href=\"a00169.html#aa6739787c42d80943e18913cce47f42f\">tbb::tbb_exception</a>\n, <a class=\"el\" href=\"a00096.html#a59040b31c3147f7c77232a6cbc76ba05\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n, <a class=\"el\" href=\"a00046.html#a1e9d36a304dd7e49906754a0cb72da2e\">tbb::captured_exception</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_func_0x7e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_func.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_func_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_func_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_func_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_func_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_func_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_func_0x67.html#index_g\"><span>g</span></a></li>\n      <li><a href=\"functions_func_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_func_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_func_0x6a.html#index_j\"><span>j</span></a></li>\n      <li><a href=\"functions_func_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_func_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_func_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_func_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_func_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_func_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_func_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_func_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_func_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_func_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_func_0x77.html#index_w\"><span>w</span></a></li>\n      <li class=\"current\"><a href=\"functions_func_0x7e.html#index_0x7e\"><span>~</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_0x7e\"></a>- ~ -</h3><ul>\n<li>~combinable()\n: <a class=\"el\" href=\"a00047.html#a52f00cf262d768048db72ab73c8f3ca4\">tbb::combinable&lt; T &gt;</a>\n</li>\n<li>~concurrent_bounded_queue()\n: <a class=\"el\" href=\"a00049.html#ab1291bf6837ecfb8836c24dde5dd80b5\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_hash_map()\n: <a class=\"el\" href=\"a00050.html#a9ce9ab8c954bf6979c2c57d10fd8a8ed\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a>\n</li>\n<li>~concurrent_queue()\n: <a class=\"el\" href=\"a00053.html#aa0056b242f280f5e25332ce998f9f670\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>~concurrent_vector()\n: <a class=\"el\" href=\"a00060.html#ab5bcaededc9a00e7aaecd6c262fd0b38\">tbb::concurrent_vector&lt; T, A &gt;</a>\n</li>\n<li>~const_accessor()\n: <a class=\"el\" href=\"a00061.html#afbc0c85a146c912b9a0f94a7695957c7\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n<li>~enumerable_thread_specific()\n: <a class=\"el\" href=\"a00072.html#a6ea8d717f770acb63efc406df52d4585\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n</li>\n<li>~fixed_pool()\n: <a class=\"el\" href=\"a00077.html#ab854a85575e5c1e9c9f4d3eafcc28044\">tbb::interface6::fixed_pool</a>\n</li>\n<li>~memory_pool()\n: <a class=\"el\" href=\"a00091.html#ad2c7645b39b7280b1b3cf393d05fbaf7\">tbb::interface6::memory_pool&lt; Alloc &gt;</a>\n</li>\n<li>~parallel_while()\n: <a class=\"el\" href=\"a00116.html#ac2fd559c8a38639fa1ba97a0d5639ca8\">tbb::parallel_while&lt; Body &gt;</a>\n</li>\n<li>~pipeline()\n: <a class=\"el\" href=\"a00117.html#ac3a7b33217b3f3bb0682ec3a40fd2c39\">tbb::pipeline</a>\n</li>\n<li>~queuing_rw_mutex()\n: <a class=\"el\" href=\"a00121.html#ae67fe828d7e07222e7876ef9fd780fcc\">tbb::queuing_rw_mutex</a>\n</li>\n<li>~reader_writer_lock()\n: <a class=\"el\" href=\"a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241\">tbb::interface5::reader_writer_lock</a>\n</li>\n<li>~receiver()\n: <a class=\"el\" href=\"a00133.html#ad2f3f8570b3fed4148baf16e72b04f38\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>~runtime_loader()\n: <a class=\"el\" href=\"a00139.html#aa3b96f53e165e3d692c3c36292ba0737\">tbb::interface6::runtime_loader</a>\n</li>\n<li>~scoped_lock()\n: <a class=\"el\" href=\"a00150.html#a08c399ee0bb9762039b29e570ec46fe9\">tbb::mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00142.html#a469ec43836a8dd250ce0a22b02945630\">tbb::queuing_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00149.html#a6cb16cc55f884bbbd5a69430c47b288f\">tbb::queuing_rw_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00148.html#a9940d6e494466d9c53846ed347d79d83\">tbb::spin_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00147.html#a90a966e19120aac99b36a3d6d04af1a2\">tbb::recursive_mutex::scoped_lock</a>\n, <a class=\"el\" href=\"a00144.html#a5c27ca2e0c9db960a9a7430082ff7edd\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n, <a class=\"el\" href=\"a00143.html#a41e77cf094ed30b0a9a39ee217c3653b\">tbb::interface5::reader_writer_lock::scoped_lock</a>\n</li>\n<li>~scoped_lock_read()\n: <a class=\"el\" href=\"a00152.html#acf0e23fb4d3aeb6bde18d5d1236bd9d5\">tbb::interface5::reader_writer_lock::scoped_lock_read</a>\n</li>\n<li>~spin_rw_mutex_v3()\n: <a class=\"el\" href=\"a00155.html#acc7cf2e4b14d3a2a591a3552d74ba99d\">tbb::spin_rw_mutex_v3</a>\n</li>\n<li>~task_arena()\n: <a class=\"el\" href=\"a00158.html#a9ff5a35a219953a4f3d99b833fa5f683\">tbb::interface7::task_arena</a>\n</li>\n<li>~task_scheduler_init()\n: <a class=\"el\" href=\"a00164.html#a20b121334ec39c1d91bd4fe9a51892b0\">tbb::task_scheduler_init</a>\n</li>\n<li>~task_scheduler_observer()\n: <a class=\"el\" href=\"a00165.html#a9ef3f1853439b46e5a9db7fd1c0f9116\">tbb::interface6::task_scheduler_observer</a>\n</li>\n<li>~task_scheduler_observer_v3()\n: <a class=\"el\" href=\"a00166.html#a151e475ebba39172fcc13f43bed426cc\">tbb::internal::task_scheduler_observer_v3</a>\n</li>\n<li>~untyped_receiver()\n: <a class=\"el\" href=\"a00178.html#a3526273f06127ae9eaaa1a18744d0a81\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_rela.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Related Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li class=\"current\"><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>limiter_node\n: <a class=\"el\" href=\"a00133.html#a05ec930a348f7eed564236d00edbda24\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n<li>make_filter\n: <a class=\"el\" href=\"a00075.html#a21460fde704da22caa222778f5abb140\">tbb::interface6::filter_t&lt; T, U &gt;</a>\n</li>\n<li>operator+\n: <a class=\"el\" href=\"a00087.html#ac8910ee3b69f68eb905af787c273e9a8\">tbb::tick_count::interval_t</a>\n</li>\n<li>operator-\n: <a class=\"el\" href=\"a00177.html#ab5ceaed3ebf5a0d41088a5bc7c8dc653\">tbb::tick_count</a>\n, <a class=\"el\" href=\"a00087.html#a3d11133daa9a7d3c903d070293278f8f\">tbb::tick_count::interval_t</a>\n</li>\n<li>run_and_put_task\n: <a class=\"el\" href=\"a00133.html#abaf9bf74ca5f2854d09f5f07337280eb\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Typedefs</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li class=\"current\"><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_a\"><span>a</span></a></li>\n      <li><a href=\"#index_b\"><span>b</span></a></li>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_d\"><span>d</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_n\"><span>n</span></a></li>\n      <li><a href=\"#index_o\"><span>o</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_v\"><span>v</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>allocator_type\n: <a class=\"el\" href=\"a00052.html#a1d2cebf242fa83d88eebdc3ad6891fb1\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00072.html#ad50ceae1b0e91d0fd31fe506e690692b\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>\n, <a class=\"el\" href=\"a00049.html#acbfceb845de1c770e2b56409f09b0364\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#acbdd1a5bd034358fb0774b322a66b1ed\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>built_successors_type\n: <a class=\"el\" href=\"a00179.html#aa17d0e3c683db8ee91589546f00e74d3\">tbb::flow::interface10::internal::untyped_sender</a>\n, <a class=\"el\" href=\"a00153.html#a5fc0721b7adea4fc3eea480066fcaab1\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>const_iterator\n: <a class=\"el\" href=\"a00034.html#ad56ca70af46acf8870b4970d8a809791\">tbb::blocked_range&lt; Value &gt;</a>\n</li>\n<li>const_reference\n: <a class=\"el\" href=\"a00049.html#af838e520ce0db2c22369748c019b11cb\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a478c2b7f763b2e821e01cc14e13baf4c\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a0bd617fe8e4657777e86f0ae15d8094f\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>difference_type\n: <a class=\"el\" href=\"a00052.html#ae010b1fa9c0942504737228474b51a0b\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a72725361e050c5a981035a20ef1b773e\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a63b42d83a9ed13fc6741e0b4388b0e96\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>input_type\n: <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00134.html#a3a879651cc5c433929bd9c67e6b400ad\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a>\n, <a class=\"el\" href=\"a00063.html#a24e64153a8f1bf284d5d7ba980ac0866\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00133.html#a0777fdc008e74f63bef8557c8afea5f9\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>native_handle_type\n: <a class=\"el\" href=\"a00097.html#abbe0cd12246121753ace00a5a12a90b0\">tbb::mutex</a>\n, <a class=\"el\" href=\"a00135.html#a3d40334b0e26d5addfde5596e7f9aaec\">tbb::recursive_mutex</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>output_type\n: <a class=\"el\" href=\"a00153.html#a20d6033fb4111199cf5e86b0bab955be\">tbb::flow::interface10::sender&lt; T &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>page_range_type\n: <a class=\"el\" href=\"a00036.html#a8cdc866378a12ce198da870d0439676f\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>predecessor_type\n: <a class=\"el\" href=\"a00063.html#a01d35fb1cb3e447929219ed6f61314ec\">tbb::flow::interface10::continue_receiver</a>\n, <a class=\"el\" href=\"a00133.html#abca607a1fa7f7ad0d55d374e4416fe7e\">tbb::flow::interface10::receiver&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00178.html#ac67c0cefe2663c84854a299384934688\">tbb::flow::interface10::internal::untyped_receiver</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>reference\n: <a class=\"el\" href=\"a00052.html#ae4b7ed2ddc8ec6cc910f935c9d299c7a\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#ab26ddf11b15d61ac87e6c1ae67af92a2\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a5fa4002bcd265d9d3ed305e3b686f1da\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n</li>\n<li>row_range_type\n: <a class=\"el\" href=\"a00035.html#ada609b296a9af0591cc34761b8538100\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>size_type\n: <a class=\"el\" href=\"a00034.html#a89b300cecd9d617e4ee801c786756e55\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a7d3da9b47ec58e1c09e3550f702edcfc\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00049.html#ae73fa352d781bdb9d01bfb77f2a8bc28\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00078.html#a8b84f8f2cc4499f49d17141eaedc99c0\">tbb::interface6::flattened2d&lt; Container &gt;</a>\n, <a class=\"el\" href=\"a00053.html#a9f883e49afea16293ba92da779981bb8\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n</li>\n<li>successor_type\n: <a class=\"el\" href=\"a00153.html#af40d268fffdc3c6b8bca87aa0c49c016\">tbb::flow::interface10::sender&lt; T &gt;</a>\n, <a class=\"el\" href=\"a00179.html#abaf68da3fb70e918f608d49d19d21861\">tbb::flow::interface10::internal::untyped_sender</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value_type\n: <a class=\"el\" href=\"a00038.html#a5011dca34818237ef9dec22973ca3e36\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a>\n, <a class=\"el\" href=\"a00116.html#a2442f019427e608d46801376267e44a8\">tbb::parallel_while&lt; Body &gt;</a>\n, <a class=\"el\" href=\"a00049.html#a6eb564625fef03dd9a5881d5d4e52f9f\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00053.html#aeeee93a7ac2eecc80bbf3e857e900538\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>\n, <a class=\"el\" href=\"a00052.html#a2c75d97ae429019363ab6fd1a872512e\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a>\n, <a class=\"el\" href=\"a00017.html#a850178bbdcdbc4cf5955cab37eb8c42c\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a>\n, <a class=\"el\" href=\"a00061.html#aa8ca5aef4ee14b7eddb64767b8cd5fda\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/functions_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n      <li><a href=\"functions_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"functions_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"functions_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"functions_rela.html\"><span>Related&#160;Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>automatic\n: <a class=\"el\" href=\"a00164.html#a945886f5ef48300a8ebff2d077c166b1\">tbb::task_scheduler_init</a>\n</li>\n<li>deferred\n: <a class=\"el\" href=\"a00164.html#af0e49ff2f59a4e53c9c07897b57f084d\">tbb::task_scheduler_init</a>\n</li>\n<li>exact_exception_propagation\n: <a class=\"el\" href=\"a00074.html#aab9689e23a96c6c9bf1c8caae74d92ee\">tbb::filter</a>\n</li>\n<li>filter_is_bound\n: <a class=\"el\" href=\"a00074.html#a1382f216bd094064a18eb48ecc43c86b\">tbb::filter</a>\n</li>\n<li>filter_is_out_of_order\n: <a class=\"el\" href=\"a00074.html#a091fcf6abc79edfa5c8bf01f742e2392\">tbb::filter</a>\n</li>\n<li>filter_is_serial\n: <a class=\"el\" href=\"a00074.html#ae9dab2e01b0963b341ab04b59eec1475\">tbb::filter</a>\n</li>\n<li>filter_may_emit_null\n: <a class=\"el\" href=\"a00074.html#a6645ec56872b6ba2056dcaa467e292f7\">tbb::filter</a>\n</li>\n<li>is_splittable_in_proportion\n: <a class=\"el\" href=\"a00034.html#ae2b0210e2468092b408123adeb54b01c\">tbb::blocked_range&lt; Value &gt;</a>\n, <a class=\"el\" href=\"a00035.html#aa0519760654368000f7ebc87d9bfe898\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>\n, <a class=\"el\" href=\"a00036.html#a5940c1bd6ba0e8184ef83dea0ae56884\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>\n</li>\n<li>is_writer\n: <a class=\"el\" href=\"a00144.html#acfd129dc5106ad1129ba803e67311050\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>mutex\n: <a class=\"el\" href=\"a00144.html#a8d70c5a2348e30a6979bfbf677328dc4\">tbb::spin_rw_mutex_v3::scoped_lock</a>\n</li>\n<li>my_exception_data\n: <a class=\"el\" href=\"a00096.html#adba063da80054afe64d5268711084d9b\">tbb::movable_exception&lt; ExceptionData &gt;</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"a00155.html#aa28625051072472ccd8a2b19405d6fb3\">tbb::spin_rw_mutex_v3</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented file members with links to the documentation:</div><ul>\n<li>scalable_aligned_free()\n: <a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_malloc()\n: <a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_realloc()\n: <a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_command()\n: <a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_mode()\n: <a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocator.h</a>\n</li>\n<li>scalable_calloc()\n: <a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_allocator.h</a>\n</li>\n<li>scalable_free()\n: <a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_allocator.h</a>\n</li>\n<li>scalable_malloc()\n: <a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_allocator.h</a>\n</li>\n<li>scalable_msize()\n: <a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_allocator.h</a>\n</li>\n<li>scalable_posix_memalign()\n: <a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_allocator.h</a>\n</li>\n<li>scalable_realloc()\n: <a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_allocator.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/globals_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>File&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"globals_func.html\"><span>Functions</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>scalable_aligned_free()\n: <a class=\"el\" href=\"a00273.html#gad9aa7595581a7bc5be193d7e034c8f61\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_malloc()\n: <a class=\"el\" href=\"a00273.html#ga903307de17bc1611515f8e6ae782a3d6\">scalable_allocator.h</a>\n</li>\n<li>scalable_aligned_realloc()\n: <a class=\"el\" href=\"a00273.html#gaa07391c54330b2e4dd1743ae9c9c4f2d\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_command()\n: <a class=\"el\" href=\"a00273.html#gabe5acd876b4d89bf89787c4e779c2518\">scalable_allocator.h</a>\n</li>\n<li>scalable_allocation_mode()\n: <a class=\"el\" href=\"a00273.html#ga7f5029970f72ebbffee896c46a23958e\">scalable_allocator.h</a>\n</li>\n<li>scalable_calloc()\n: <a class=\"el\" href=\"a00273.html#ga3b4ff39555cd9e929fce2958325cd8ea\">scalable_allocator.h</a>\n</li>\n<li>scalable_free()\n: <a class=\"el\" href=\"a00273.html#ga2ad3952b8c4dd7d293e02ae18fc37b84\">scalable_allocator.h</a>\n</li>\n<li>scalable_malloc()\n: <a class=\"el\" href=\"a00273.html#ga2a5bdc71439a70b20f2eadf6e1a489e1\">scalable_allocator.h</a>\n</li>\n<li>scalable_msize()\n: <a class=\"el\" href=\"a00273.html#ga2b718206e50acb6392b86e4877d98213\">scalable_allocator.h</a>\n</li>\n<li>scalable_posix_memalign()\n: <a class=\"el\" href=\"a00273.html#gaf117b4994f719d539804da8dd115e28c\">scalable_allocator.h</a>\n</li>\n<li>scalable_realloc()\n: <a class=\"el\" href=\"a00273.html#ga40d6e0bc19cdfa3005b2b935c62077a1\">scalable_allocator.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/hierarchy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Class Hierarchy</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Class&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"hierarchy.html\"><span>Class&#160;Hierarchy</span></a></li>\n      <li><a href=\"functions.html\"><span>Class&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Hierarchy</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00016.html\" target=\"_self\">__TBB_malloc_proxy_caller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00018.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor_not_used</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img id=\"arr_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00021.html\" target=\"_self\">tbb::interface6::aggregator_operation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_2_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('2_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00033.html\" target=\"_self\">tbb::interface6::internal::basic_operation_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00022.html\" target=\"_self\">tbb::aligned_space&lt; T, N &gt;</a></td><td class=\"desc\">Block of space aligned sufficiently to construct an array T with N elements </td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><img id=\"arr_4_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('4_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>Allocator</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00183.html\" target=\"_self\">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_4_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00184.html\" target=\"_self\">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><img id=\"arr_5_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('5_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>allocator_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; padded_element, padded_allocator_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00023.html\" target=\"_self\">tbb::flow::interface10::internal::async_helpers&lt; T, typename &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00024.html\" target=\"_self\">tbb::flow::interface10::internal::async_helpers&lt; T, typename std::enable_if&lt; std::is_base_of&lt; async_msg&lt; typename T::async_msg_data_type &gt;, T &gt;::value &gt;::type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><img id=\"arr_8_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('8_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00025.html\" target=\"_self\">tbb::flow::interface10::async_msg&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00102.html\" target=\"_self\">tbb::flow::interface10::opencl_async_msg&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><img id=\"arr_9_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('9_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>async_msg</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00080.html\" target=\"_self\">tbb::flow::interface9::gfx_async_msg&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00026.html\" target=\"_self\">tbb::flow::interface10::internal::async_storage&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><img id=\"arr_11_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('11_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>atomic_impl</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; internal::Token &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; intptr_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; state_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; status_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::flow::interface10::opencl_device::device_id_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface5::reader_writer_lock::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface5::reader_writer_lock::scoped_lock_read * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::interface6::aggregator_operation * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::queuing_mutex::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; tbb::queuing_rw_mutex::scoped_lock * &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; uintptr_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00027.html\" target=\"_self\">tbb::atomic&lt; T &gt;</a></td><td class=\"desc\">Primary template for atomic </td></tr>\n<tr id=\"row_11_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00028.html\" target=\"_self\">tbb::atomic&lt; void * &gt;</a></td><td class=\"desc\">Specialization for <a class=\"el\" href=\"a00028.html\" title=\"Specialization for atomic&lt;void*&gt;, for sake of not allowing arithmetic or operator-&gt;. \">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt; </td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00029.html\" target=\"_self\">tbb::interface7::task_arena::attach</a></td><td class=\"desc\">Tag class used to indicate the \"attaching\" constructor </td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><img id=\"arr_13_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('13_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>bad_alloc</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00030.html\" target=\"_self\">tbb::bad_last_alloc</a></td><td class=\"desc\">Exception for concurrent containers </td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00031.html\" target=\"_self\">tbb::interface6::internal::basic_handler</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; Value &gt;</a></td><td class=\"desc\">A range over which to iterate </td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00035.html\" target=\"_self\">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class=\"desc\">A 2-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_17_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00036.html\" target=\"_self\">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class=\"desc\">A 3-dimensional range that models the Range concept </td></tr>\n<tr id=\"row_18_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; ColValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_19_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; I &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_20_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; PageValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_21_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00034.html\" target=\"_self\">tbb::blocked_range&lt; RowValue &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_22_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00037.html\" target=\"_self\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, typename &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_23_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00038.html\" target=\"_self\">tbb::internal::blocked_rangeNd_impl&lt; Value, N, index_sequence&lt; Is...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_24_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00039.html\" target=\"_self\">tbb::flow::interface10::internal::broadcast_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_25_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00041.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_26_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00042.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_27_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00043.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::call_clear_on_leave</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_28_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00047.html\" target=\"_self\">tbb::combinable&lt; T &gt;</a></td><td class=\"desc\">Thread-local storage with optional reduction </td></tr>\n<tr id=\"row_29_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00048.html\" target=\"_self\">tbb::interface6::internal::concrete_filter&lt; T, U, Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_30_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00052.html\" target=\"_self\">tbb::interface5::concurrent_priority_queue&lt; T, Compare, A &gt;</a></td><td class=\"desc\">Concurrent priority queue </td></tr>\n<tr id=\"row_31_\"><td class=\"entry\"><img id=\"arr_31_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('31_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_queue_base_v3</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_31_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00053.html\" target=\"_self\">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class=\"desc\">A high-performance thread-safe non-blocking concurrent queue </td></tr>\n<tr id=\"row_32_\" class=\"even\"><td class=\"entry\"><img id=\"arr_32_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('32_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_queue_base_v8</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_32_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00049.html\" target=\"_self\">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class=\"desc\">A high-performance thread-safe blocking concurrent bounded queue </td></tr>\n<tr id=\"row_33_\"><td class=\"entry\"><img id=\"arr_33_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('33_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_unordered_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00054.html\" target=\"_self\">tbb::interface5::concurrent_unordered_map&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00056.html\" target=\"_self\">tbb::interface5::concurrent_unordered_multimap&lt; Key, T, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00057.html\" target=\"_self\">tbb::interface5::concurrent_unordered_multiset&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_33_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00058.html\" target=\"_self\">tbb::interface5::concurrent_unordered_set&lt; Key, Hasher, Key_equality, Allocator &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_34_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00055.html\" target=\"_self\">tbb::interface5::concurrent_unordered_map_traits&lt; Key, T, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_35_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00059.html\" target=\"_self\">tbb::interface5::concurrent_unordered_set_traits&lt; Key, Hash_compare, Allocator, Allow_multimapping &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_\" class=\"even\"><td class=\"entry\"><img id=\"arr_36_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('36_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>concurrent_vector_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; padded_element, padded_allocator_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_36_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00060.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class=\"desc\">Concurrent vector container </td></tr>\n<tr id=\"row_37_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00062.html\" target=\"_self\">tbb::flow::interface10::continue_msg</a></td><td class=\"desc\">An empty class used for messages that mean \"I'm done\" </td></tr>\n<tr id=\"row_38_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00065.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_device_filter</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_39_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00066.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_device_selector&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_40_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00068.html\" target=\"_self\">tbb::flow::interface9::gfx_factory::device_type</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_41_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00069.html\" target=\"_self\">tbb::flow::interface9::gfx_factory::dummy_device_selector</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_42_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">tbb::flow::interface10::internal::edge_container&lt; C &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_43_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00070.html\" target=\"_self\">tbb::flow::interface10::internal::edge_container&lt; predecessor_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_44_\" class=\"even\"><td class=\"entry\"><img id=\"arr_44_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('44_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>ets_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_44_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00072.html\" target=\"_self\">tbb::interface6::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class=\"desc\">The <a class=\"el\" href=\"a00072.html\" title=\"The enumerable_thread_specific container. \">enumerable_thread_specific</a> container </td></tr>\n<tr id=\"row_45_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00073.html\" target=\"_self\">tbb::profiling::interface10::event</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_46_\" class=\"even\"><td class=\"entry\"><img id=\"arr_46_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('46_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>exception</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_46_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00086.html\" target=\"_self\">tbb::improper_lock</a></td><td class=\"desc\">Exception for PPL locks </td></tr>\n<tr id=\"row_46_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00088.html\" target=\"_self\">tbb::invalid_multiple_scheduling</a></td><td class=\"desc\">Exception for repeated scheduling of the same <a class=\"el\" href=\"a00162.html\">task_handle</a> </td></tr>\n<tr id=\"row_46_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00095.html\" target=\"_self\">tbb::missing_wait</a></td><td class=\"desc\">Exception for missing wait on <a class=\"el\" href=\"a00156.html\">structured_task_group</a> </td></tr>\n<tr id=\"row_46_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_46_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('46_3_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00169.html\" target=\"_self\">tbb::tbb_exception</a></td><td class=\"desc\">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>\n<tr id=\"row_46_3_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00046.html\" target=\"_self\">tbb::captured_exception</a></td><td class=\"desc\">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>\n<tr id=\"row_46_3_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00096.html\" target=\"_self\">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class=\"desc\">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>\n<tr id=\"row_46_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00182.html\" target=\"_self\">tbb::user_abort</a></td><td class=\"desc\">Exception for user-initiated abort </td></tr>\n<tr id=\"row_47_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00075.html\" target=\"_self\">tbb::interface6::filter_t&lt; T, U &gt;</a></td><td class=\"desc\">Class representing a chain of type-safe pipeline filters </td></tr>\n<tr id=\"row_48_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00076.html\" target=\"_self\">tbb::final_scan_tag</a></td><td class=\"desc\">Used to indicate that the final scan is being performed </td></tr>\n<tr id=\"row_49_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00078.html\" target=\"_self\">tbb::interface6::flattened2d&lt; Container &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_50_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00079.html\" target=\"_self\">tbb::interface6::flow_control</a></td><td class=\"desc\">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>\n<tr id=\"row_51_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00081.html\" target=\"_self\">tbb::flow::interface9::gfx_buffer&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_52_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00082.html\" target=\"_self\">tbb::flow::interface9::gfx_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_53_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00083.html\" target=\"_self\">tbb::interface9::global_control</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_54_\" class=\"even\"><td class=\"entry\"><img id=\"arr_54_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('54_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00084.html\" target=\"_self\">tbb::flow::interface10::graph_proxy</a></td><td class=\"desc\">Pure virtual template classes that define interfaces for async communication </td></tr>\n<tr id=\"row_54_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00134.html\" target=\"_self\">tbb::flow::interface10::receiver_gateway&lt; Input &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_55_\"><td class=\"entry\"><img id=\"arr_55_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('55_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>hash_map_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_55_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00050.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;</a></td><td class=\"desc\">Unordered map from Key to T </td></tr>\n<tr id=\"row_56_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00085.html\" target=\"_self\">tbb::internal::tbb_thread_v3::id</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_57_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00087.html\" target=\"_self\">tbb::tick_count::interval_t</a></td><td class=\"desc\">Relative time interval </td></tr>\n<tr id=\"row_58_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00090.html\" target=\"_self\">tbb::flow::interface10::limiter_node&lt; T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_59_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00092.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_60_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00093.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_61_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00094.html\" target=\"_self\">rml::MemPoolPolicy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_62_\" class=\"even\"><td class=\"entry\"><img id=\"arr_62_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('62_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>mutex_copy_deprecated_and_disabled</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_62_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00097.html\" target=\"_self\">tbb::mutex</a></td><td class=\"desc\">Wrapper around the platform's native lock </td></tr>\n<tr id=\"row_62_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00099.html\" target=\"_self\">tbb::null_mutex</a></td><td class=\"desc\">A mutex which does nothing </td></tr>\n<tr id=\"row_62_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00100.html\" target=\"_self\">tbb::null_rw_mutex</a></td><td class=\"desc\">A rw mutex which does nothing </td></tr>\n<tr id=\"row_62_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00120.html\" target=\"_self\">tbb::queuing_mutex</a></td><td class=\"desc\">Queuing mutex with local-only spinning </td></tr>\n<tr id=\"row_62_4_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00121.html\" target=\"_self\">tbb::queuing_rw_mutex</a></td><td class=\"desc\">Queuing reader-writer mutex with local-only spinning </td></tr>\n<tr id=\"row_62_5_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00135.html\" target=\"_self\">tbb::recursive_mutex</a></td><td class=\"desc\">Mutex that allows recursive mutex acquisition </td></tr>\n<tr id=\"row_62_6_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00154.html\" target=\"_self\">tbb::spin_mutex</a></td><td class=\"desc\">A lock that occupies a single byte </td></tr>\n<tr id=\"row_62_7_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00155.html\" target=\"_self\">tbb::spin_rw_mutex_v3</a></td><td class=\"desc\">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>\n<tr id=\"row_63_\"><td class=\"entry\"><img id=\"arr_63_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('63_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_assign</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_63_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00032.html\" target=\"_self\">tbb::interface6::internal::basic_operation&lt; Body &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_\" class=\"even\"><td class=\"entry\"><img id=\"arr_64_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('64_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_assign</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00089.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;::kernel</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_1_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00113.html\" target=\"_self\">tbb::flow::interface10::opencl_program&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_2_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00051.html\" target=\"_self\">tbb::interface6::concurrent_lru_cache&lt; key_type, value_type, value_functor_type &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_64_3_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00162.html\" target=\"_self\">tbb::task_handle&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_\"><td class=\"entry\"><img id=\"arr_65_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>no_copy</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">tbb::interface6::aggregator_ext&lt; internal::basic_handler &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00019.html\" target=\"_self\">tbb::interface6::aggregator</a></td><td class=\"desc\">Basic aggregator interface </td></tr>\n<tr id=\"row_65_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00071.html\" target=\"_self\">tbb::concurrent_vector&lt; T, A &gt;::push_back_helper::element_construction_guard</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_2_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_2_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00074.html\" target=\"_self\">tbb::filter</a></td><td class=\"desc\">A stage in a pipeline </td></tr>\n<tr id=\"row_65_2_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00172.html\" target=\"_self\">tbb::thread_bound_filter</a></td><td class=\"desc\">A stage in a pipeline served by a user thread </td></tr>\n<tr id=\"row_65_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_3_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_3_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00045.html\" target=\"_self\">tbb::flow::interface10::callback_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_3_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00044.html\" target=\"_self\">tbb::flow::interface10::callback&lt; Callback, T &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00122.html\" target=\"_self\">tbb::interface5::reader_writer_lock</a></td><td class=\"desc\">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>\n<tr id=\"row_65_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00143.html\" target=\"_self\">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class=\"desc\">The scoped lock pattern for write locks </td></tr>\n<tr id=\"row_65_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00152.html\" target=\"_self\">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class=\"desc\">The scoped lock pattern for read locks </td></tr>\n<tr id=\"row_65_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00020.html\" target=\"_self\">tbb::interface6::aggregator_ext&lt; handler_type &gt;</a></td><td class=\"desc\">Aggregator base class and expert interface </td></tr>\n<tr id=\"row_65_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00139.html\" target=\"_self\">tbb::interface6::runtime_loader</a></td><td class=\"desc\">Load TBB at runtime </td></tr>\n<tr id=\"row_65_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00064.html\" target=\"_self\">tbb::internal::critical_section_v4</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00146.html\" target=\"_self\">tbb::internal::critical_section_v4::scoped_lock</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_65_12_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('65_12_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00160.html\" target=\"_self\">tbb::internal::task_group_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00156.html\" target=\"_self\">tbb::structured_task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_12_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00159.html\" target=\"_self\">tbb::task_group</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_65_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00150.html\" target=\"_self\">tbb::mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00145.html\" target=\"_self\">tbb::null_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00151.html\" target=\"_self\">tbb::null_rw_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00116.html\" target=\"_self\">tbb::parallel_while&lt; Body &gt;</a></td><td class=\"desc\">Parallel iteration over a stream, with optional addition of more work </td></tr>\n<tr id=\"row_65_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00142.html\" target=\"_self\">tbb::queuing_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00149.html\" target=\"_self\">tbb::queuing_rw_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00147.html\" target=\"_self\">tbb::recursive_mutex::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00148.html\" target=\"_self\">tbb::spin_mutex::scoped_lock</a></td><td class=\"desc\">Represents acquisition of a mutex </td></tr>\n<tr id=\"row_65_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00144.html\" target=\"_self\">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class=\"desc\">The scoped locking pattern </td></tr>\n<tr id=\"row_65_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00164.html\" target=\"_self\">tbb::task_scheduler_init</a></td><td class=\"desc\">Class delimiting the scope of task scheduler activity </td></tr>\n<tr id=\"row_66_\" class=\"even\"><td class=\"entry\"><img id=\"arr_66_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('66_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>node_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_66_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00098.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_67_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00101.html\" target=\"_self\">tbb::flow::interface10::null_type</a></td><td class=\"desc\">A generic null type </td></tr>\n<tr id=\"row_68_\" class=\"even\"><td class=\"entry\"><img id=\"arr_68_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('68_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00103.html\" target=\"_self\">tbb::flow::interface10::opencl_buffer&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_68_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00115.html\" target=\"_self\">tbb::flow::interface10::opencl_subbuffer&lt; T, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_69_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00105.html\" target=\"_self\">tbb::flow::interface10::opencl_device</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_70_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00106.html\" target=\"_self\">tbb::flow::interface10::opencl_device_list</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_71_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; DeviceFilter &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_72_\" class=\"even\"><td class=\"entry\"><img id=\"arr_72_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('72_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00107.html\" target=\"_self\">tbb::flow::interface10::opencl_factory&lt; default_device_filter &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_72_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00067.html\" target=\"_self\">tbb::flow::interface10::opencl_info::default_opencl_factory</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_73_\"><td class=\"entry\"><img id=\"arr_73_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('73_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00108.html\" target=\"_self\">tbb::flow::interface10::opencl_memory&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_73_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00104.html\" target=\"_self\">tbb::flow::interface10::opencl_buffer_impl&lt; Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_74_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; Args &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_75_\"><td class=\"entry\"><img id=\"arr_75_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('75_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, opencl_info::default_opencl_factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_75_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00111.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_76_\" class=\"even\"><td class=\"entry\"><img id=\"arr_76_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('76_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00109.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, queueing, opencl_info::default_opencl_factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_76_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00110.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt; &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_77_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00114.html\" target=\"_self\">tbb::flow::interface10::opencl_range</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_78_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00117.html\" target=\"_self\">tbb::pipeline</a></td><td class=\"desc\">A processing pipeline that applies filters to items </td></tr>\n<tr id=\"row_79_\"><td class=\"entry\"><img id=\"arr_79_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('79_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>pool_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_79_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00077.html\" target=\"_self\">tbb::interface6::fixed_pool</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_79_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00091.html\" target=\"_self\">tbb::interface6::memory_pool&lt; Alloc &gt;</a></td><td class=\"desc\">Thread-safe growable pool allocator for variable-size requests </td></tr>\n<tr id=\"row_80_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00118.html\" target=\"_self\">tbb::pre_scan_tag</a></td><td class=\"desc\">Used to indicate that the initial scan is being performed </td></tr>\n<tr id=\"row_81_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00119.html\" target=\"_self\">tbb::flow::interface10::internal::predecessor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_82_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00123.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_83_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00124.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; void, P &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_84_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00125.html\" target=\"_self\">tbb::cache_aligned_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_85_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00126.html\" target=\"_self\">tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_86_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00127.html\" target=\"_self\">tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_87_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00128.html\" target=\"_self\">tbb::tbb_allocator&lt; void &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_88_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00129.html\" target=\"_self\">tbb::zero_allocator&lt; T, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_89_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00130.html\" target=\"_self\">tbb::zero_allocator&lt; void, Allocator &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_90_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00131.html\" target=\"_self\">tbb::tbb_allocator&lt; T &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_91_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00132.html\" target=\"_self\">tbb::interface6::memory_pool_allocator&lt; T, P &gt;::rebind&lt; U &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_92_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00136.html\" target=\"_self\">tbb::flow::interface10::internal::reservable_predecessor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_93_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00137.html\" target=\"_self\">tbb::flow::interface10::internal::round_robin_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_94_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00138.html\" target=\"_self\">tbb::flow::interface10::run_and_put_task&lt; R, B &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_95_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00140.html\" target=\"_self\">tbb::scalable_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_96_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00141.html\" target=\"_self\">tbb::scalable_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_97_\"><td class=\"entry\"><img id=\"arr_97_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('97_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>scoped_t</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_97_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_97_0_\" src=\"ftv2plastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" onclick=\"toggleFolder('97_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00061.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::const_accessor</a></td><td class=\"desc\">Combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_97_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2blank.png\" alt=\"&#160;\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00017.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::accessor</a></td><td class=\"desc\">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>\n<tr id=\"row_98_\" class=\"even\"><td class=\"entry\"><img id=\"arr_98_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('98_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>scoped_t</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_98_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00040.html\" target=\"_self\">tbb::interface5::concurrent_hash_map&lt; Key, T, HashCompare, A &gt;::bucket_accessor</a></td><td class=\"desc\">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>\n<tr id=\"row_99_\"><td class=\"entry\"><img id=\"arr_99_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('99_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>streaming_node</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_99_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00112.html\" target=\"_self\">tbb::flow::interface10::opencl_node&lt; tuple&lt; Ports...&gt;, JP, Factory &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_100_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00157.html\" target=\"_self\">tbb::flow::interface10::internal::successor_cache&lt; T, M &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_101_\"><td class=\"entry\"><img id=\"arr_101_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('101_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>task</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_101_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00163.html\" target=\"_self\">tbb::internal::task_handle_task&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_102_\" class=\"even\"><td class=\"entry\"><img id=\"arr_102_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('102_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><b>task_arena_base</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_102_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00158.html\" target=\"_self\">tbb::interface7::task_arena</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_103_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00161.html\" target=\"_self\">tbb::task_group_context</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_104_\" class=\"even\"><td class=\"entry\"><img id=\"arr_104_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('104_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00166.html\" target=\"_self\">tbb::internal::task_scheduler_observer_v3</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_104_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00165.html\" target=\"_self\">tbb::interface6::task_scheduler_observer</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_105_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00167.html\" target=\"_self\">tbb::tbb_allocator&lt; T &gt;</a></td><td class=\"desc\">Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>\n<tr id=\"row_106_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00168.html\" target=\"_self\">tbb::tbb_allocator&lt; void &gt;</a></td><td class=\"desc\">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>\n<tr id=\"row_107_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00170.html\" target=\"_self\">tbb::internal::tbb_exception_ptr</a></td><td class=\"desc\">Exception container that preserves the exact copy of the original exception </td></tr>\n<tr id=\"row_108_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00171.html\" target=\"_self\">tbb::internal::tbb_thread_v3</a></td><td class=\"desc\">Versioned thread class </td></tr>\n<tr id=\"row_109_\"><td class=\"entry\"><img id=\"arr_109_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('109_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00176.html\" target=\"_self\">tbb::internal::thread_closure_base</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_109_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00173.html\" target=\"_self\">tbb::internal::thread_closure_0&lt; F &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_109_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00174.html\" target=\"_self\">tbb::internal::thread_closure_1&lt; F, X &gt;</a></td><td class=\"desc\">Structure used to pass user function with 1 argument to thread </td></tr>\n<tr id=\"row_109_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00175.html\" target=\"_self\">tbb::internal::thread_closure_2&lt; F, X, Y &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_110_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00177.html\" target=\"_self\">tbb::tick_count</a></td><td class=\"desc\">Absolute timestamp </td></tr>\n<tr id=\"row_111_\"><td class=\"entry\"><img id=\"arr_111_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('111_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00178.html\" target=\"_self\">tbb::flow::interface10::internal::untyped_receiver</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_111_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img id=\"arr_111_0_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('111_0_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">tbb::flow::interface10::receiver&lt; continue_msg &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_111_0_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00063.html\" target=\"_self\">tbb::flow::interface10::continue_receiver</a></td><td class=\"desc\">Base class for receivers of completion messages </td></tr>\n<tr id=\"row_111_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00133.html\" target=\"_self\">tbb::flow::interface10::receiver&lt; T &gt;</a></td><td class=\"desc\">Pure virtual template class that defines a receiver of messages of type T </td></tr>\n<tr id=\"row_112_\" class=\"even\"><td class=\"entry\"><img id=\"arr_112_\" src=\"ftv2pnode.png\" alt=\"o\" width=\"16\" height=\"22\" onclick=\"toggleFolder('112_')\"/><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00179.html\" target=\"_self\">tbb::flow::interface10::internal::untyped_sender</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_112_0_\" style=\"display:none;\"><td class=\"entry\"><img src=\"ftv2vertline.png\" alt=\"|\" width=\"16\" height=\"22\" /><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00153.html\" target=\"_self\">tbb::flow::interface10::sender&lt; T &gt;</a></td><td class=\"desc\">Forward declaration section </td></tr>\n<tr id=\"row_113_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00180.html\" target=\"_self\">tbb::interface5::internal::use_element_copy_constructor&lt; T, C &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_114_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2cl.png\" alt=\"C\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00181.html\" target=\"_self\">tbb::interface5::internal::use_element_copy_constructor&lt; T, false &gt;</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Main Page</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Main Page </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Click the tabs above for information about the</p>\n<ul>\n<li><a href=\"./modules.html\">Modules</a> (groups of functionality) implemented by the library</li>\n<li><a href=\"./annotated.html\">Classes</a> provided by the library</li>\n<li><a href=\"./files.html\">Files</a> constituting the library.</li>\n</ul>\n<p>Please note that significant part of TBB functionality is implemented in the form of template functions, descriptions of which are not accessible on the <a href=\"./annotated.html\">Classes</a> tab. Use <a href=\"./modules.html\">Modules</a> or <a href=\"./namespacemembers.html\">Namespace/Namespace Members</a> tabs to find them.</p>\n<p>Additional pieces of information can be found here</p>\n<ul>\n<li><a class=\"el\" href=\"a00014.html\">TBB concepts</a></li>\n</ul>\n</div></div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))\n}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;\nif(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false\n}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1\n},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);\nax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;\nif(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)\n}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b\n})}})(window);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/modules.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Modules</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li class=\"current\"><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Modules</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all modules:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00271.html\" target=\"_self\">Algorithms</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00272.html\" target=\"_self\">Containers</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00273.html\" target=\"_self\">Memory Allocation</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00274.html\" target=\"_self\">Synchronization</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00275.html\" target=\"_self\">Timing</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00276.html\" target=\"_self\">Task Scheduling</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespacemembers.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index__\"><span>_</span></a></li>\n      <li><a href=\"#index_a\"><span>a</span></a></li>\n      <li><a href=\"#index_e\"><span>e</span></a></li>\n      <li><a href=\"#index_f\"><span>f</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_r\"><span>r</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented namespace members with links to the namespaces they belong to:</div>\n\n<h3><a class=\"anchor\" id=\"index__\"></a>- _ -</h3><ul>\n<li>__TBB_DECL_ATOMIC_ALT()\n: <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>acquire\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>ets_key_usage_type\n: <a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>full_fence\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>memory_semantics\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>parallel_deterministic_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb</a>\n</li>\n<li>parallel_for()\n: <a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb</a>\n</li>\n<li>parallel_for_each()\n: <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb</a>\n</li>\n<li>parallel_invoke()\n: <a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb</a>\n</li>\n<li>parallel_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb</a>\n</li>\n<li>parallel_scan()\n: <a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb</a>\n</li>\n<li>parallel_sort()\n: <a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>relaxed\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb</a>\n</li>\n<li>release\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>speculative_spin_mutex\n: <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>TBB_runtime_interface_version()\n: <a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">tbb</a>\n</li>\n<li>tbb_thread\n: <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespacemembers_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>ets_key_usage_type\n: <a class=\"el\" href=\"a00249.html#ac5bcb6154c8307fa9f97806afddf2288\">tbb</a>\n</li>\n<li>memory_semantics\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3a\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespacemembers_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>acquire\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aaa92646b4dc7618530d3a9f51dd10a418\">tbb</a>\n</li>\n<li>full_fence\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa6a315190cf4509ec388ecb423432f36a\">tbb</a>\n</li>\n<li>relaxed\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa73cb2e2bcb94442b8b2b72e93a76f2e5\">tbb</a>\n</li>\n<li>release\n: <a class=\"el\" href=\"a00249.html#adb86d08473679d6fe0eabcdc766ffe3aa412563418e657114a102db610f726632\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespacemembers_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index__\"><span>_</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index__\"></a>- _ -</h3><ul>\n<li>__TBB_DECL_ATOMIC_ALT()\n: <a class=\"el\" href=\"a00249.html#a59425abdcb421136e9f5954cfb975e5f\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>parallel_deterministic_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1fd7e3c43592dfe1ae3e3572bd80d4f6\">tbb</a>\n</li>\n<li>parallel_for()\n: <a class=\"el\" href=\"a00271.html#ga14ae8670bd55620f906aa06e073bd225\">tbb</a>\n</li>\n<li>parallel_for_each()\n: <a class=\"el\" href=\"a00271.html#gac9225af45fd0468843b3fc32608c71de\">tbb</a>\n</li>\n<li>parallel_invoke()\n: <a class=\"el\" href=\"a00271.html#ga3c6fe4bf1076c82132e666fb545451cd\">tbb</a>\n</li>\n<li>parallel_reduce()\n: <a class=\"el\" href=\"a00271.html#ga1c9b66fa25cadee9ca3bff75a6609b05\">tbb</a>\n</li>\n<li>parallel_scan()\n: <a class=\"el\" href=\"a00271.html#gadbc46558909fe3720e95a18241dda603\">tbb</a>\n</li>\n<li>parallel_sort()\n: <a class=\"el\" href=\"a00271.html#gaf1fb3ae3aab1213cb9bcf56e30c164bb\">tbb</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>TBB_runtime_interface_version()\n: <a class=\"el\" href=\"a00249.html#ade8a8bc300d5ef09d38cbfb8baff5cd2\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespacemembers_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"namespacemembers.html\"><span>All</span></a></li>\n      <li><a href=\"namespacemembers_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"namespacemembers_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"namespacemembers_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"namespacemembers_eval.html\"><span>Enumerator</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"contents\">\n&#160;<ul>\n<li>speculative_spin_mutex\n: <a class=\"el\" href=\"a00274.html#ga69722571e9e4406693c4a1379f0b47eb\">tbb</a>\n</li>\n<li>tbb_thread\n: <a class=\"el\" href=\"a00249.html#a7805ca254302ff88b566f7dcde7e56b0\">tbb</a>\n</li>\n</ul>\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/namespaces.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Namespace List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"namespaces.html\"><span>Namespace&#160;List</span></a></li>\n      <li><a href=\"namespacemembers.html\"><span>Namespace&#160;Members</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Namespace List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented namespaces with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2node.png\" alt=\"o\" width=\"16\" height=\"22\" /><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00246.html\" target=\"_self\">rml</a></td><td class=\"desc\">The namespace rml contains components of low-level memory pool interface </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><img src=\"ftv2ns.png\" alt=\"N\" width=\"24\" height=\"22\" /><a class=\"el\" href=\"a00249.html\" target=\"_self\">tbb</a></td><td class=\"desc\">The graph class </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/pages.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.5\"/>\n<title>Related Pages</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.5 -->\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"pages.html\"><span>Related&#160;Pages</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"namespaces.html\"><span>Namespaces</span></a></li>\n      <li><a href=\"annotated.html\"><span>Classes</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Related Pages</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all related documentation pages:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><img src=\"ftv2lastnode.png\" alt=\"\\\" width=\"16\" height=\"22\" /><a class=\"el\" href=\"a00008.html\" target=\"_self\">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<hr>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<p></p>\nIntel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are\nregistered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/doc/html/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Getting Started Samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Getting Started Samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains the examples referenced by the Intel&reg; Threading Building Blocks <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a>.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sub_string_finder/readme.html\">sub_string_finder</a>\n\t\t\t\t<dd>Finds largest matching substrings.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/sub_string_finder/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=sub_string_finder_extended\nARGS=\nLIGHT_PROG=sub_string_finder\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifneq (,$(findstring mic, $(offload)))\noverride CXXFLAGS += -qoffload-arch=$(offload) -qopt-report-phase:offload -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -qoffload-option,mic,ld,\"-ltbb_debug\"\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\nifeq ($(offload),)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB) $(LIBS)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp $(TBBLIB) $(LIBS)\nendif\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB) $(LIBS)\n\ndebug: *.cpp\nifeq ($(offload),)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB_DEBUG) $(LIBS)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp  $(TBBLIB_DEBUG) $(LIBS)\nendif\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(LIGHT_PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/sub_string_finder/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Sub_string_finder sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Sub_string_finder sample</h1>\n\t</div>\n\n\t<p>\n\t\tA simple example that uses the parallel_for template in a substring matching program.\n\t\tThe Intel&reg; Threading Building Blocks <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a> describes this example.\n\t<br><br>\n\t\tFor each position \n\t\tin a string, the program displays the length of the largest matching substring elsewhere in the string. \n\t\tThe program also displays the location of a largest match for each position.  Consider the string \"babba\" \n\t\tas an example. Starting at position 0, \"ba\" is the largest substring with a match elsewhere in the \n\t\tstring (position 3). \n\t<br><br>\n\t\tThe code located in the <a href=\"sub_string_finder_extended.cpp\">sub_string_finder_extended.cpp</a> file \n\t\tdemonstrates offload programming for Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sub_string_finder.cpp\">sub_string_finder.cpp</a>\n\t\t\t\t<dd>The example as it appears in the Getting Started Guide.\n\t\t\t\t<dt><a href=\"sub_string_finder_extended.cpp\">sub_string_finder_extended.cpp</a>\n\t\t\t\t<dd>An example similar to the one in the Getting Started Guide, but with an added sequential\n\t\t\t\t\timplementation, and with an offload region added that can be executed on Intel&reg; MIC Architecture based coprocessor.\n\t\t\t\t\tThe three implementations are timed, by using tick_count,\n\t\t\t\t\tand the speedup of the parallel version and \n\t\t\t\t\tthe speedup of the parallel version and, if applicable, the offload version is calculated and displayed.\n\t\t\t\t<dt><a href=\"sub_string_finder_pretty.cpp\">sub_string_finder_pretty.cpp</a>\n\t\t\t\t<dd>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>sub_string_finder</tt>\n\t\t\t\t<dd>Runs the example as it appears in the Getting Started Guide.\n\t\t\t\t<dt><tt>sub_string_finder_pretty</tt>\n\t\t\t\t<dd>Runs the similar example with more attractive printing of the results.\n\t\t\t\t<dt><tt>sub_string_finder_extended</tt>\n\t\t\t\t<dd>Runs the example extended with a sequential implementation and an offload region that can be executed on Intel&reg; MIC Architecture based coprocessor.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the <tt>sub_string_finder_pretty</tt> example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it, e.g., <tt>sub_string_finder_pretty</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n#include <vector>\n#include <algorithm>    //std::max\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic const std::size_t N = 23;\n\nclass SubStringFinder {\n    const std::string &str;\n    std::vector<std::size_t> &max_array;\n    std::vector<std::size_t> &pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t> &r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < str.size(); ++j) {\n                if (j != i) {\n                    std::size_t limit = str.size()-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k > max_size) {\n                            max_size = k;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n\n    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :\n        str(s), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n\n    std::vector<std::size_t> max(num_elem);\n    std::vector<std::size_t> pos(num_elem);\n\n    tbb::parallel_for( tbb::blocked_range<std::size_t>( 0, num_elem ),\n                SubStringFinder( to_scan, max, pos ) );\n\n    for (std::size_t i = 0; i < num_elem; ++i)\n        std::cout << \" \" << max[i] << \"(\" << pos[i] << \")\" << std::endl;\n\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include <iostream>\n#include <string>\n#include <vector>\n#include <algorithm>    //std::max\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n\nclass __declspec(target(mic)) SubStringFinder;\n#endif // __TBB_MIC_OFFLOAD\n\nstatic const std::size_t N = 22;\n\nvoid SerialSubStringFinder ( const std::string &str, std::vector<std::size_t> &max_array, std::vector<std::size_t> &pos_array ) {\n    for (std::size_t i = 0; i < str.size(); ++i) {\n        std::size_t max_size = 0, max_pos = 0;\n        for (std::size_t j = 0; j < str.size(); ++j)\n            if (j != i) {\n                std::size_t limit = str.size()-(std::max)(i,j);\n                for (std::size_t k = 0; k < limit; ++k) {\n                    if (str[i + k] != str[j + k])\n                        break;\n                    if (k > max_size) {\n                        max_size = k;\n                        max_pos = j;\n                    }\n                }\n            }\n        max_array[i] = max_size;\n        pos_array[i] = max_pos;\n    }\n}\n\nclass SubStringFinder {\n    const char *str;\n    const std::size_t len;\n    std::size_t *max_array;\n    std::size_t *pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < len; ++j) {\n                if (j != i) {\n                    std::size_t limit = len-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k > max_size) {\n                            max_size = k;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n    // We do not use std::vector for compatibility with offload execution\n    SubStringFinder( const char *s, const std::size_t s_len, std::size_t *m, std::size_t *p ) :\n        str(s), len(s_len), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    using namespace tbb;\n\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n\n    std::vector<std::size_t> max1(num_elem);\n    std::vector<std::size_t> pos1(num_elem);\n    std::vector<std::size_t> max2(num_elem);\n    std::vector<std::size_t> pos2(num_elem);\n\n    std::cout << \" Done building string.\" << std::endl;\n\n    tick_count serial_t0 = tick_count::now();\n    SerialSubStringFinder( to_scan, max2, pos2 );\n    tick_count serial_t1 = tick_count::now();\n    std::cout << \" Done with serial version.\" << std::endl;\n\n    tick_count parallel_t0 = tick_count::now();\n    parallel_for(blocked_range<std::size_t>(0, num_elem, 100),\n            SubStringFinder( to_scan.c_str(), num_elem, &max1[0], &pos1[0] ) );\n    tick_count parallel_t1 = tick_count::now();\n    std::cout << \" Done with parallel version.\" << std::endl;\n\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        if (max1[i] != max2[i] || pos1[i] != pos2[i]) {\n            std::cout << \"ERROR: Serial and Parallel Results are Different!\" << std::endl;\n            break;\n        }\n    }\n    std::cout << \" Done validating results.\" << std::endl;\n\n    std::cout << \"Serial version ran in \" << (serial_t1 - serial_t0).seconds() << \" seconds\" << std::endl\n              << \"Parallel version ran in \" <<  (parallel_t1 - parallel_t0).seconds() << \" seconds\" << std::endl\n              << \"Resulting in a speedup of \" << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << std::endl;\n\n#if __TBB_MIC_OFFLOAD\n    // Do offloadable version. Do the timing on host.\n\n    std::vector<std::size_t> max3(num_elem);\n    std::vector<std::size_t> pos3(num_elem);\n\n    std::size_t *max3_array = &max3[0];   // method data() for vector is not available in C++03\n    std::size_t *pos3_array = &pos3[0];\n    tick_count parallel_tt0 = tick_count::now();\n    const char *to_scan_str = to_scan.c_str();  // Offload the string as a char array.\n    #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3_array,pos3_array:length(num_elem))\n    {\n        parallel_for(blocked_range<std::size_t>(0, num_elem, 100),\n                SubStringFinder ( to_scan_str, num_elem, max3_array, pos3_array ) );\n    }\n    tick_count parallel_tt1 = tick_count::now();\n    std::cout << \" Done with offloadable version.\" << std::endl;\n\n    // Do validation of offloadable results on host.\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        if (max1[i] != max3[i] || pos1[i] != pos3[i]) {\n            std::cout << \"ERROR: Serial and Offloadable Results are Different!\" << std::endl;\n            break;\n        }\n    }\n    std::cout << \" Done validating offloadable results.\" << std::endl;\n\n    std::cout << \"Offloadable version ran in \" << (parallel_tt1 - parallel_tt0).seconds() << \" seconds\" << std::endl\n              << \"Resulting in a speedup of \" << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds()\n              << \" of offloadable version\" << std::endl;\n\n#endif // __TBB_MIC_OFFLOAD\n\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n#include <algorithm>\n#include <vector>\n#include <algorithm>    //std::max\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic const std::size_t N = 9;\n\nclass SubStringFinder {\n    const std::string &str;\n    std::vector<std::size_t> &max_array;\n    std::vector<std::size_t> &pos_array;\npublic:\n    void operator() ( const tbb::blocked_range<std::size_t>& r ) const {\n        for (std::size_t i = r.begin(); i != r.end(); ++i) {\n            std::size_t max_size = 0, max_pos = 0;\n            for (std::size_t j = 0; j < str.size(); ++j) {\n                if (j != i) {\n                    std::size_t limit = str.size()-(std::max)(i,j);\n                    for (std::size_t k = 0; k < limit; ++k) {\n                        if (str[i + k] != str[j + k])\n                            break;\n                        if (k+1 > max_size) {\n                            max_size = k+1;\n                            max_pos = j;\n                        }\n                    }\n                }\n            }\n            max_array[i] = max_size;\n            pos_array[i] = max_pos;\n        }\n    }\n\n    SubStringFinder( const std::string &s, std::vector<std::size_t> &m, std::vector<std::size_t> &p ) :\n        str(s), max_array(m), pos_array(p) { }\n};\n\nint main() {\n    using namespace tbb;\n\n    std::string str[N] = { std::string(\"a\"), std::string(\"b\") };\n    for (std::size_t i = 2; i < N; ++i)\n        str[i] = str[i-1]+str[i-2];\n    std::string &to_scan = str[N-1];\n    const std::size_t num_elem = to_scan.size();\n    std::cout << \"String to scan: \" << to_scan << std::endl;\n\n    std::vector<std::size_t> max( num_elem );\n    std::vector<std::size_t> pos( num_elem );\n\n    parallel_for( blocked_range<std::size_t>( 0, num_elem, 100 ),\n            SubStringFinder( to_scan, max, pos ) );\n\n    for (std::size_t i = 0; i < num_elem; ++i) {\n        for (std::size_t j = 0; j < num_elem; ++j) {\n            if (j >= i && j < i + max[i])\n                std::cout << \"_\";\n            else\n                std::cout << \" \";\n        }\n        std::cout << std::endl << to_scan << std::endl;\n\n        for (std::size_t j = 0; j < num_elem; ++j) {\n            if (j >= pos[i] && j < pos[i] + max[i])\n                std::cout << \"*\";\n            else\n                std::cout << \" \";\n        }\n        std::cout << std::endl;\n    }\n\n    return 0;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/examples-common.inc",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# detect if a compiler can support C++11\n# If CXX0XFLAGS already set, do not change it\nifneq (,$(findstring $(CXX), icc icpc clang++))\n    # every supported icc or clang is OK\n    CXX0XFLAGS ?= -std=c++0x\nelse\n    ifneq (,$(findstring $(CXX), g++ gcc))\n        ifneq (, $(strip $(shell $(CXX) -v 2>&1 | grep \"clang-\")))\n            # This is clang actually,\n            # every supported clang is OK\n            CXX0XFLAGS ?= -std=c++0x\n        else\n            # support of lambda started GCC 4.5\n            ifneq (, $(strip $(shell g++ -dumpversion | egrep \"^(4\\.[5-9]|[5-9])\")))\n               CXX0XFLAGS ?= -std=c++0x\n            endif\n        endif\n    endif\nendif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/Makefile.gmake",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# The C++ compiler\n#CXX=g++\n\n# detecting MS Windows (for MinGW support)\nifeq ($(OS), Windows_NT)\nRM = cmd /C del /Q /F\nRD = cmd /C rmdir\nUI = con\nEXE = $(NAME)$(SUFFIX).exe\n\nelse\nRM = rm -f\nRD = rmdir -r\n\n# detecting 64-bit platform\narch ?= $(shell uname -m)\n# Possible values of interest: intel64 x86_64 amd64 ia64 ppc64 sparc sparc64\nx64 ?= $(findstring 64,$(subst sparc,sparc64,$(arch)))\n\n# see https://wiki.debian.org/Multiarch/Tuples\nMULTIARCH = $(arch)\nifeq ($(arch),ia32)\nMULTIARCH = i386\nendif\nifeq ($(arch),intel64)\nMULTIARCH = x86_64\nendif\nifeq ($(arch),ppc32)\nMULTIARCH = powerpc\nendif\nifeq ($(arch),sparc)\nMULTIARCH = sparc64\nendif\nMULTIARCHTUPLE ?= $(MULTIARCH)-linux-gnu\n\n# detecting UI (\"mac\", \"x\" or \"con\")\nifeq ($(shell uname),Darwin)\n  UI ?= mac\nelse\n  UI ?= $(shell sh -c \"[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libX11.so ] && echo x\")\nendif\n\nifeq ($(UI),x)\n  EXE = $(NAME)$(SUFFIX)\n  UI_CXXFLAGS += -I/usr/X11R6/include\n  LIBS += -lpthread -L/usr/X11R6/lib$(x64) -lX11\n  # detect if libXext can be found\n  ifeq ($(shell sh -c \"[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libXext.so ] && echo 0\"),0)\n    LIBS += -lXext\n  else  # no libXext\n    UI_CXXFLAGS += -DX_NOSHMEM\n  endif # libXext\n\nelse # ! X\n  ifeq ($(UI),mac)\n    CXX_UI?=g++\n    LIBS += -framework OpenGL -framework Foundation -framework Cocoa\n    MACUISOURCES = ../../common/gui/xcode/tbbExample/OpenGLView.m ../../common/gui/xcode/tbbExample/main.m ../../common/gui/xcode/tbbExample/tbbAppDelegate.m \n    MACUIOBJS = OpenGLView.o main.o tbbAppDelegate.o\n    APPRES = $(NAME)$(SUFFIX).app/Contents/Resources\n    EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX)\n\n  else # ! macOS*\n\n    EXE = $(NAME)$(SUFFIX)\n    ifeq (,$(strip $(UI)))\n       UI = con\n       $(warning Note: no graphics output capability detected, building for console output.)\n    endif\n  endif # macOS\nendif # X\nendif # Windows vs. other\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/Makefile.win",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)\n\n# Base compile/link options\nMYCXXFLAGS = /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE /MP $(CXXFLAGS)\nMYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS)\nCXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG\nCXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG\n\n# Specify library directory for Direct X SDK\nDDLIB_DIR=$(DXSDK_DIR)\\lib\\$(XARCH:AMD64=x64)\n\n# Input and output files\n#SOURCE = v\n#RCNAME = specified externaly\n#EXE =    ^\n# defaults on XARCH = x86\nUISRC = ../../common/gui/$(UI)video.cpp\n\ndefault:\n\nbuild_echo:\n\t-@echo Building$(DEBUG) $(EXE) with UI=$(UI) XARCH=$(XARCH)\n\nbuild_one:\tbuild_echo build_$(UI)$(DEBUG)\n\nbuild_con: $(SOURCE) $(UISRC) compiler_check\n\t$(CXX) $(CXXFLAGS_NDEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /subsystem:console /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_con_debug: $(SOURCE) $(UISRC) compiler_check\n\t$(CXX) $(CXXFLAGS_DEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /debug /subsystem:console /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_gdi: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t$(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_gdi_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t$(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_d2d: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t-@echo Using DirectX SDK from \"$(DDLIB_DIR)\"\n\t$(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) /I \"$(DXSDK_DIR)\\include\" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:\"$(DDLIB_DIR)\" msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nbuild_d2d_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check\n\t-@echo Using DirectX SDK from \"$(DDLIB_DIR)\"\n\t$(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) /I \"$(DXSDK_DIR)\\include\" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:\"$(DDLIB_DIR)\" msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)\n\t@cmd.exe /C del *.obj\n\nmsvs/$(RCNAME).res:\n\trc /r msvs/$(RCNAME)\ncompiler_check:\n\t@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo \"$(CXX) command not found. Check if CXX=$(CXX) is set properly\"\n\t@cmd.exe /C del compiler_test\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/convideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"video.h\"\n#include <cassert>\n#include <stdio.h>\n\nunsigned int *              g_pImg = 0;\nint                         g_sizex, g_sizey;\nstatic video *g_video = 0;\nstatic int g_fps = 0;\n\n#if _WIN32 || _WIN64\n\nstatic DWORD g_msec = 0;\n\n#ifdef _WINDOWS\nHINSTANCE video::win_hInstance = 0;\nint video::win_iCmdShow = 0;\nvoid video::win_set_class(WNDCLASSEX &wcex) { }\nvoid video::win_load_accelerators(int idc)  { }\n#endif //_WINDOWS\n\n#else\n#include <sched.h>\n#include <sys/time.h>\nstruct timeval g_time;\n#endif //_WIN32||_WIN64\n\n#define CALC_FPS_ENABLED ((WINAPI_FAMILY != WINAPI_FAMILY_APP) && (!__ANDROID__))\n\nvideo::video()\n    // OpenGL* RGBA byte order for little-endian CPU\n    : depth(24), red_shift(0), green_shift(8), blue_shift(16),\n      red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; updating = calc_fps = false;\n}\n\nbool video::init_window(int x, int y)\n{\n    g_sizex = x; g_sizey = y;\n    g_pImg = new unsigned int[x*y];\n    running = true;\n    return false;\n}\n\nbool video::init_console()\n{\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n#if CALC_FPS_ENABLED\n    if(calc_fps) {\n        double fps = g_fps;\n#if _WIN32 || _WIN64\n        fps /= (GetTickCount()-g_msec)/1000.0;\n#else\n        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);\n        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n#endif\n        printf(\"%s: %.1f fps\\n\", title, fps);\n    }\n#endif\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\n//! Count and display FPS count in titlebar\nbool video::next_frame()\n{\n#if CALC_FPS_ENABLED\n    if(calc_fps){\n        if(!g_fps) {\n#if _WIN32 || _WIN64\n            g_msec = GetTickCount();\n#else\n            struct timezone tz; gettimeofday(&g_time, &tz);\n#endif\n        }\n        g_fps++;\n    }\n#endif\n    return running;\n}\n\n//! Do standard loop\nvoid video::main_loop()\n{\n    on_process();\n}\n\n//! Change window title\nvoid video::show_title()\n{\n}\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update() {}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/d2dvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// common Windows parts\n#include \"winvideo.h\"\n\n// and another headers\n#include <cassert>\n#include <stdio.h>\n#include <dxsdkver.h>\n#if _DXSDK_PRODUCT_MAJOR < 9\n#error DXSDK Version 9 and above required.\n#endif\n#include <d2d1.h>\n#include <d2d1helper.h>\n#pragma comment(lib, \"d2d1.lib\")\n\nID2D1Factory *m_pD2DFactory;\nID2D1HwndRenderTarget *m_pRenderTarget;\nID2D1Bitmap *m_pBitmap;\nD2D1_SIZE_U bitmapSize;\n\nHANDLE g_hVSync;\n\n#include <DXErr.h>\n#pragma comment(lib, \"DxErr.lib\")\n\n//! Create a dialog box and tell the user what went wrong\nbool DisplayError(LPSTR lpstrErr, HRESULT hres)\n{\n    if(hres != S_OK){\n        static bool InError = false;\n        int retval = 0;\n        if (!InError)\n        {\n            InError = true;\n            const char *message = hres?DXGetErrorString(hres):0;\n            retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:\"Error!\", MB_OK|MB_ICONERROR);\n            InError = false;\n        }\n    }\n    return false;\n}\n\nvoid DrawBitmap()\n{\n    HRESULT hr = S_OK;\n    if (m_pRenderTarget) {\n        m_pRenderTarget->BeginDraw();\n        if (m_pBitmap)\n            hr = m_pBitmap->CopyFromMemory(NULL,(BYTE*)g_pImg, 4*g_sizex);\n        DisplayError( \"DrawBitmap error\", hr );\n        m_pRenderTarget->DrawBitmap(m_pBitmap);\n        m_pRenderTarget->EndDraw();\n    }\n    return;\n}\n\ninline void mouse(int k, LPARAM lParam)\n{\n    int x = (int)LOWORD(lParam);\n    int y = (int)HIWORD(lParam);\n    RECT rc;\n    GetClientRect(g_hAppWnd, &rc);\n    g_video->on_mouse( x*g_sizex/(rc.right - rc.left), y*g_sizey/(rc.bottom - rc.top), k );\n}\n\n//! Win event processing function\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\n{\n    switch (iMsg)\n    {\n        case WM_MOVE:\n            // Check to make sure our window exists before we tell it to repaint.\n            // This will fail the first time (while the window is being created).\n            if (hwnd) {\n                InvalidateRect(hwnd, NULL, FALSE);\n                UpdateWindow(hwnd);\n            }\n            return 0L;\n\n        case WM_SIZE:\n        case WM_PAINT:\n            if( g_video->running && g_video->updating ) {\n                DrawBitmap();\n                Sleep(0);\n            }\n            break;\n        // Process all mouse and keyboard events\n        case WM_LBUTTONDOWN:    mouse( 1, lParam ); break;\n        case WM_LBUTTONUP:      mouse(-1, lParam ); break;\n        case WM_RBUTTONDOWN:    mouse( 2, lParam ); break;\n        case WM_RBUTTONUP:      mouse(-2, lParam ); break;\n        case WM_MBUTTONDOWN:    mouse( 3, lParam ); break;\n        case WM_MBUTTONUP:      mouse(-3, lParam ); break;\n        case WM_CHAR:           g_video->on_key( (int)wParam); break;\n\n        // some useless stuff\n        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop\n        case WM_DISPLAYCHANGE:  return 0;\n\n        // Now, shut down the window...\n        case WM_DESTROY:        PostQuitMessage(0); return 0;\n    }\n    // call user defined proc, if exists\n    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);\n}\n\nbool video::init_window(int sizex, int sizey)\n{\n    assert(win_hInstance != 0);\n    g_sizex = sizex; g_sizey = sizey;\n    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false)) {\n        DisplayError(\"Unable to initialize the program's window.\");\n        return false;\n    }\n    ShowWindow(g_hAppWnd, SW_SHOW);\n    g_pImg = new unsigned int[sizex*sizey];\n\n    HRESULT hr = S_OK;\n\n    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);\n    // Create a Direct2D render target.\n    if (SUCCEEDED(hr) && !m_pRenderTarget){\n        RECT rc;\n        GetClientRect(g_hAppWnd, &rc);\n\n        bitmapSize = D2D1::SizeU(\n            rc.right - rc.left,\n            rc.bottom - rc.top\n            );\n\n        hr = m_pD2DFactory->CreateHwndRenderTarget(\n            D2D1::RenderTargetProperties(),\n            D2D1::HwndRenderTargetProperties(g_hAppWnd, bitmapSize),\n            &m_pRenderTarget\n            );\n        if (SUCCEEDED(hr) && !m_pBitmap){\n            D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(\n                DXGI_FORMAT_B8G8R8A8_UNORM,\n                D2D1_ALPHA_MODE_IGNORE\n                );\n            D2D1_BITMAP_PROPERTIES bitmapProperties;\n            bitmapProperties.pixelFormat = pixelFormat;\n            m_pRenderTarget->GetDpi( &bitmapProperties.dpiX, &bitmapProperties.dpiY );\n            m_pRenderTarget->CreateBitmap(bitmapSize,bitmapProperties,&m_pBitmap);\n            m_pRenderTarget->DrawBitmap(m_pBitmap);\n        }\n    }\n\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if (m_pBitmap) m_pBitmap->Release();\n    if (m_pRenderTarget) m_pRenderTarget->Release();\n    if (m_pD2DFactory) m_pD2DFactory->Release();\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\n//////////// drawing area constructor & destructor /////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(g_video->updating) {\n        RECT r;\n        r.left = start_x; r.right  = start_x + size_x;\n        r.top  = start_y; r.bottom = start_y + size_y;\n        InvalidateRect(g_hAppWnd, &r, false);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/dxcheck.bat",
    "content": "@echo off\nREM\nREM Copyright (c) 2005-2018 Intel Corporation\nREM\nREM Licensed under the Apache License, Version 2.0 (the \"License\");\nREM you may not use this file except in compliance with the License.\nREM You may obtain a copy of the License at\nREM\nREM     http://www.apache.org/licenses/LICENSE-2.0\nREM\nREM Unless required by applicable law or agreed to in writing, software\nREM distributed under the License is distributed on an \"AS IS\" BASIS,\nREM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nREM See the License for the specific language governing permissions and\nREM limitations under the License.\nREM\nREM\nREM\nREM\nREM\nif \"%DXSDK_DIR%\"==\"\" goto error_no_DXSDK\ngoto end\n\n:error_no_DXSDK\necho DirectX SDK Check : error : This example requires the DirectX SDK.  Either (re)-install the DirectX SDK, or set the DXSDK_DIR environment variable to indicate where it is installed.\n\n:end\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/gdivideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// common Windows parts\n#include \"winvideo.h\"\n// include GDI+ headers\n#include <gdiplus.h>\n// and another headers\n#include <stdio.h>\n\n// tag linking library\n#pragma comment(lib, \"gdiplus.lib\")\n\n// global specific variables\nGdiplus::Bitmap *           g_pBitmap;           // main drawing bitmap\nULONG_PTR                   gdiplusToken;\nGdiplus::GdiplusStartupInput gdiplusStartupInput;// GDI+\n\n//! display system error\nbool DisplayError(LPSTR lpstrErr, HRESULT hres)\n{\n    static bool InError = false;\n    int retval = 0;\n    if (!InError)\n    {\n        InError = true;\n        LPCSTR lpMsgBuf;\n        if(!hres) hres = GetLastError();\n        FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n                               NULL, hres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );\n        retval = MessageBox(g_hAppWnd, lpstrErr, lpMsgBuf, MB_OK|MB_ICONERROR);\n        LocalFree( (HLOCAL)lpMsgBuf );\n        InError = false;\n    }\n    return false;\n}\n\n//! Win event processing function\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\n{\n    switch (iMsg)\n    {\n        case WM_MOVE:\n            // Check to make sure our window exists before we tell it to repaint.\n            // This will fail the first time (while the window is being created).\n            if (hwnd) {\n                InvalidateRect(hwnd, NULL, FALSE);\n                UpdateWindow(hwnd);\n            }\n            return 0L;\n\n        case WM_PAINT:\n            {\n                PAINTSTRUCT ps;\n                Gdiplus::Graphics graphics( BeginPaint(hwnd, &ps) );\n                // redraw just requested area. This call is as fast as simple DrawImage() call.\n                if(g_video->updating) graphics.DrawImage(g_pBitmap, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.left, ps.rcPaint.top,\n                                    ps.rcPaint.right, ps.rcPaint.bottom, Gdiplus::UnitPixel);\n                EndPaint(hwnd, &ps);\n            }\n            return 0L;\n\n        // Process all mouse and keyboard events\n        case WM_LBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 1); break;\n        case WM_LBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -1); break;\n        case WM_RBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 2); break;\n        case WM_RBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -2); break;\n        case WM_MBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 3); break;\n        case WM_MBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -3); break;\n        case WM_CHAR:           g_video->on_key( (int)wParam); break;\n\n        // some useless stuff\n        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop\n        case WM_DISPLAYCHANGE:  return 0;\n\n        // Now, shut down the window...\n        case WM_DESTROY:        PostQuitMessage(0); return 0;\n    }\n    // call user defined proc, if exists\n    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);\n}\n\n///////////// video functions ////////////////\n\nbool video::init_window(int sizex, int sizey)\n{\n    assert(win_hInstance != 0);\n    g_sizex = sizex; g_sizey = sizey;\n    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, true)) {\n        DisplayError(\"Unable to initialize the program's window.\");\n        return false;\n    }\n    ShowWindow(g_hAppWnd, SW_SHOW);\n    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);\n    g_pImg = new unsigned int[sizex*sizey];\n    g_pBitmap = new Gdiplus::Bitmap(g_sizex, g_sizey, 4*g_sizex, PixelFormat32bppRGB, (BYTE*)g_pImg );\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if(g_pBitmap) { delete g_pBitmap; g_pBitmap = 0; }\n    Gdiplus::GdiplusShutdown(gdiplusToken);\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\n//////////// drawing area constructor & destructor /////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n      pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(g_video->updating) {\n        RECT r;\n        r.left = start_x; r.right  = start_x + size_x;\n        r.top  = start_y; r.bottom = start_y + size_y;\n        InvalidateRect(g_hAppWnd, &r, false);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/macvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"video.h\"\n#include <cassert>\n#include <stdio.h>\n#include <iostream>\n#include <pthread.h>\n\nunsigned int* g_pImg = 0;\nint g_sizex=0, g_sizey=0;\nstatic video *g_video = 0;\nstatic int g_fps = 0;\nchar *window_title=NULL;\n#define WINDOW_TITLE_SIZE 256\nint cocoa_update=0;\n\n#include <sched.h>\n#include <sys/time.h>\nstruct timeval g_time;\n\nvideo::video()\n#if __TBB_IOS\n    : depth(24), red_shift(0), green_shift(8), blue_shift(16),\n    red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000)\n#else\n    : depth(24), red_shift(16), green_shift(8), blue_shift(0),\n    red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)\n#endif\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; cocoa_update=1; updating = true; calc_fps = false;\n}\n\nbool video::init_window(int x, int y)\n{\n    g_sizex = x; g_sizey = y;\n    g_pImg = new unsigned int[x*y];\n    if( window_title==NULL )\n        window_title = (char*)malloc(WINDOW_TITLE_SIZE);\n    strncpy( window_title, title, WINDOW_TITLE_SIZE-1 );\n    running = true;\n    return true;\n}\n\nbool video::init_console()\n{\n    running = true;\n    return true;\n}\n\nvoid video::terminate()\n{\n    if(calc_fps) {\n        double fps = g_fps;\n        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);\n        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n        printf(\"%s: %.1f fps\\n\", title, fps);\n    }\n    g_video = 0; running = false;\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\n//! Count and display FPS count in titlebar\nbool video::next_frame()\n{\n    if(calc_fps){\n        if(!g_fps) {\n            struct timezone tz; gettimeofday(&g_time, &tz);\n        }\n        g_fps++;\n    }\n    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);\n    double sec=((now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0));\n    if( sec>1 ){\n        if(calc_fps) {\n            memcpy(&g_time, &now_time, sizeof(g_time));\n            int fps;\n            fps = g_fps/sec;\n            cocoa_update = (int)updating;\n            snprintf(window_title,WINDOW_TITLE_SIZE, \"%s%s: %d fps\", title, updating?\"\":\" (no updating)\", int(fps));\n            g_fps=0;\n        }\n    }\n    return running;\n}\n\n\nvoid* thread_func(void*)\n{\n    g_video->on_process();\n    exit(EXIT_SUCCESS);\n}\n\nextern \"C\" void on_mouse_func(int x, int y, int k)\n{\n    g_video->on_mouse(x, y, k);\n    return;\n}\n\nextern \"C\" void on_key_func(int x)\n{\n    g_video->on_key(x);\n    return;\n}\n\nextern \"C\" int cocoa_main( int argc, char *argv[] );\n//! Do standard loop\nvoid video::main_loop()\n{\n    pthread_t handle;\n    pthread_attr_t attr;\n    pthread_attr_init(&attr);\n    pthread_create(&handle,&attr,&thread_func,(void*)NULL);\n    pthread_detach(handle);\n    cocoa_main( 0, NULL );\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(title)\n        strncpy( window_title, title, WINDOW_TITLE_SIZE );\n    return;\n}\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    //nothing to do, updating via timer in cocoa part.\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __VIDEO_H__\n#define __VIDEO_H__\n\n#include <cassert>\n#if _MSC_VER\n#include <stddef.h> // for uintptr_t\n#else\n#include <stdint.h> // for uintptr_t\n#endif\n#if _WIN32 || _WIN64\n#include <windows.h>\n#else\n#include <unistd.h>\n#endif\n\ntypedef unsigned int color_t;\ntypedef unsigned char colorcomp_t;\ntypedef signed char depth_t;\n\n//! Class for getting access to drawing memory\nclass drawing_memory\n{\n#ifdef __TBB_MIC_OFFLOAD\n    // The address is kept as uintptr_t since\n    // the compiler could not offload a pointer\n#endif\n    uintptr_t   my_address;\npublic:\n    depth_t     pixel_depth;\n    int         sizex, sizey;\n    //! Get drawing memory\n    inline char* get_address() const { return reinterpret_cast<char*>(my_address); }\n    //! Get drawing memory size\n    inline int get_size() const { return ((pixel_depth>16) ? 4:2) * sizex * sizey; }\n    //! Set drawing memory\n    inline void set_address(char *mem) { my_address = reinterpret_cast<uintptr_t>(mem); }\n\n    friend class drawing_area;\n    friend class video;\n};\n\n//! Simple proxy class for managing of different video systems\nclass video\n{\n    //! colorspace information\n    depth_t depth, red_shift, green_shift, blue_shift;\n    color_t red_mask, green_mask, blue_mask;\n    friend class drawing_area;\n\npublic:\n    //! Constructor\n    video();\n    //! Destructor\n    ~video();\n    //! member to set window name\n    const char *title;\n    //! true is enable to show fps\n    bool calc_fps;\n    //! if true: on windows fork processing thread for on_process(), on non-windows note that next_frame() is called concurrently.\n    bool threaded;\n    //! true while running within main_loop()\n    bool running;\n    //! if true, do gui updating\n    bool updating;\n    //! initialize graphical video system\n    bool init_window(int sizex, int sizey);\n    //! initialize console. returns true if console is available\n    bool init_console();\n    //! terminate video system\n    void terminate();\n    //! Do standard event & processing loop. Use threaded = true to separate event/updating loop from frame processing\n    void main_loop();\n    //! Process next frame\n    bool next_frame();\n    //! Change window title\n    void show_title();\n    //! translate RGB components into packed type\n    inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const;\n    //! Get drawing memory descriptor\n    inline drawing_memory get_drawing_memory() const;\n\n    //! code of the ESCape key\n    static const int esc_key = 27;\n    //! Mouse events handler.\n    virtual void on_mouse(int x, int y, int key) { }\n    //! Mouse events handler.\n    virtual void on_key(int key) { }\n    //! Main processing loop. Redefine with your own\n    virtual void on_process() { while(next_frame()); }\n\n#ifdef _WINDOWS\n    //! Windows specific members\n    //! if VIDEO_WINMAIN isn't defined then set this just before init() by arguments of WinMain\n    static HINSTANCE win_hInstance; static int win_iCmdShow;\n    //! optionally call it just before init() to set own. Use ascii strings convention\n    void win_set_class(WNDCLASSEX &);\n    //! load and set accelerator table from resources\n    void win_load_accelerators(int idc);\n#endif\n};\n\n//! Drawing class\nclass drawing_area\n{\n    const size_t base_index, max_index, index_stride;\n    const depth_t pixel_depth;\n    unsigned int * const ptr32;\n    size_t index;\npublic:\n    const int start_x, start_y, size_x, size_y;\n    //! constructors\n    drawing_area(int x, int y, int sizex, int sizey);\n    inline drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem);\n    //! destructor\n    inline ~drawing_area();\n    //! update the image\n    void update();\n    //! set current position. local_x could be bigger then size_x\n    inline void set_pos(int local_x, int local_y);\n    //! put pixel in current position with incremental address calculating to next right pixel\n    inline void put_pixel(color_t color);\n    //! draw pixel at position by packed color\n    void set_pixel(int localx, int localy, color_t color)\n        { set_pos(localx, localy); put_pixel(color); }\n};\n\nextern int g_sizex;\nextern int g_sizey;\nextern unsigned int *g_pImg;\n\ninline drawing_memory video::get_drawing_memory() const\n{\n    drawing_memory dmem;\n    dmem.pixel_depth = depth;\n    dmem.my_address = reinterpret_cast<uintptr_t>(g_pImg);\n    dmem.sizex = g_sizex;\n    dmem.sizey = g_sizey;\n    return dmem;\n}\n\ninline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const\n{\n    if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift\n        return (red<<16) | (green<<8) | blue;\n    else if(depth >= 24)\n        return\n#if __ANDROID__\n                // Setting Alpha to 0xFF\n                0xFF000000 |\n#endif\n                (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);\n    else if(depth > 0) {\n        depth_t bs = blue_shift, rs = red_shift;\n        if(blue_shift < 0) blue >>= -bs, bs = 0;\n        else /*red_shift < 0*/ red >>= -rs, rs = 0;\n        return ((red<<rs)&red_mask) | ((green<<green_shift)&green_mask) | ((blue<<bs)&blue_mask);\n    } else { // UYVY colorspace\n        unsigned y, u, v;\n        y = red * 77 + green * 150 + blue * 29; // sum(77+150+29=256) * max(=255):  limit->2^16\n        u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4\n        v = (2048 + (red << 3) - (y >> 5)) >> 4;\n        y = y >> 8;\n        return u | (y << 8) | (v << 16) | (y << 24);\n    }\n}\n\ninline drawing_area::drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem)\n    : base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex),\n    pixel_depth(dmem.pixel_depth), ptr32(reinterpret_cast<unsigned int*>(dmem.my_address)),\n    start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < dmem.sizex); assert(y < dmem.sizey);\n    assert(x+sizex <= dmem.sizex); assert(y+sizey <= dmem.sizey);\n\n    index = base_index; // current index\n}\n\ninline void drawing_area::set_pos(int local_x, int local_y)\n{\n    index = base_index + local_x + local_y*index_stride;\n}\n\ninline void drawing_area::put_pixel(color_t color)\n{\n    assert(index < max_index);\n    if(pixel_depth > 16) ptr32[index++] = color;\n    else if(pixel_depth > 0)\n        ((unsigned short*)ptr32)[index++] = (unsigned short)color;\n    else { // UYVY colorspace\n        if(index&1) color >>= 16;\n        ((unsigned short*)ptr32)[index++] = (unsigned short)color;\n    }\n}\n\ninline drawing_area::~drawing_area()\n{\n#if ! __TBB_DEFINE_MIC\n    update();\n#endif\n}\n\n#if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )\n#include <cstdlib>\n//! define WinMain for subsystem:windows.\n#ifdef VIDEO_WINMAIN_ARGS\nint main(int, char *[]);\n#else\nint main();\n#endif\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)\n{\n    video::win_hInstance = hInstance;  video::win_iCmdShow = iCmdShow;\n#ifdef VIDEO_WINMAIN_ARGS\n    return main(__argc, __argv);\n#else\n    return main();\n#endif\n}\n#endif\n\n#endif// __VIDEO_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/winvideo.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/////// Common internal implementation of Windows-specific stuff //////////////\n///////                  Must be the first included header       //////////////\n\n#ifndef __WINVIDEO_H__\n#define __WINVIDEO_H__\n\n#ifndef _CRT_SECURE_NO_DEPRECATE\n#define _CRT_SECURE_NO_DEPRECATE\n#endif\n// Check that the target Windows version has all API calls requried.\n#ifndef _WIN32_WINNT\n# define _WIN32_WINNT 0x0400\n#endif\n#if _WIN32_WINNT<0x0400\n# define YIELD_TO_THREAD() Sleep(0)\n#else\n# define YIELD_TO_THREAD() SwitchToThread()\n#endif\n#include \"video.h\"\n#include <fcntl.h>\n#include <io.h>\n#include <iostream>\n#include <fstream>\n\n#pragma comment(lib, \"gdi32.lib\")\n#pragma comment(lib, \"user32.lib\")\n\n// maximum mumber of lines the output console should have\nstatic const WORD MAX_CONSOLE_LINES = 500;\nconst COLORREF              RGBKEY = RGB(8, 8, 16); // at least 8 for 16-bit palette\nHWND                        g_hAppWnd;           // The program's window handle\nHANDLE                      g_handles[2] = {0,0};// thread and wake up event\nunsigned int *              g_pImg = 0;          // drawing memory\nint                         g_sizex, g_sizey;\nstatic video *              g_video = 0;\nWNDPROC                     g_pUserProc = 0;\nHINSTANCE                   video::win_hInstance = 0;\nint                         video::win_iCmdShow = 0;\nstatic WNDCLASSEX *         gWndClass = 0;\nstatic HACCEL               hAccelTable = 0;\nstatic DWORD                g_msec = 0;\nstatic int g_fps = 0, g_updates = 0, g_skips = 0;\n\nbool DisplayError(LPSTR lpstrErr, HRESULT hres = 0); // always returns false\nLRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);\n\n//! Create window\nbool WinInit(HINSTANCE hInstance, int nCmdShow, WNDCLASSEX *uwc, const char *title, bool fixedsize)\n{\n    WNDCLASSEX wndclass;  // Our app's windows class\n    if(uwc) {\n        memcpy(&wndclass, uwc, sizeof(wndclass));\n        g_pUserProc = uwc->lpfnWndProc;\n    } else {\n        memset(&wndclass, 0, sizeof(wndclass));\n        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);\n        wndclass.lpszClassName = title;\n    }\n    wndclass.cbSize = sizeof(wndclass);\n    wndclass.hInstance = hInstance;\n    wndclass.lpfnWndProc = InternalWndProc;\n    wndclass.style |= CS_HREDRAW | CS_VREDRAW;\n    wndclass.hbrBackground = CreateSolidBrush(RGBKEY);\n\n    if( !RegisterClassExA(&wndclass) ) return false;\n    int xaddend = GetSystemMetrics(fixedsize?SM_CXFIXEDFRAME:SM_CXFRAME)*2;\n    int yaddend = GetSystemMetrics(fixedsize?SM_CYFIXEDFRAME:SM_CYFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);\n    if(wndclass.lpszMenuName) yaddend += GetSystemMetrics(SM_CYMENU);\n\n    // Setup the new window's physical parameters - and tell Windows to create it\n    g_hAppWnd = CreateWindowA(wndclass.lpszClassName,  // Window class name\n                             title,  // Window caption\n                             !fixedsize ? WS_OVERLAPPEDWINDOW :  // Window style\n                             WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,\n                             CW_USEDEFAULT,  // Initial x pos: use default placement\n                             0,              // Initial y pos: not used here\n                             g_sizex+xaddend,// Initial x size\n                             g_sizey+yaddend,// Initial y size\n                             NULL,      // parent window handle\n                             NULL,      // window menu handle\n                             hInstance, // program instance handle\n                             NULL);     // Creation parameters\n    return g_hAppWnd != NULL;\n}\n\n//! create console window with redirection\nstatic bool RedirectIOToConsole(void)\n{\n    int hConHandle; size_t lStdHandle;\n    CONSOLE_SCREEN_BUFFER_INFO coninfo;\n    FILE *fp;\n    // allocate a console for this app\n    AllocConsole();\n\n    // set the screen buffer to be big enough to let us scroll text\n    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);\n    coninfo.dwSize.Y = MAX_CONSOLE_LINES;\n    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);\n\n    // redirect unbuffered STDOUT to the console\n    lStdHandle = (size_t)GetStdHandle(STD_OUTPUT_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle <= 0) return false;\n    fp = _fdopen( hConHandle, \"w\" );\n    *stdout = *fp;\n    setvbuf( stdout, NULL, _IONBF, 0 );\n\n    // redirect unbuffered STDERR to the console\n    lStdHandle = (size_t)GetStdHandle(STD_ERROR_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle > 0) {\n        fp = _fdopen( hConHandle, \"w\" );\n        *stderr = *fp;\n        setvbuf( stderr, NULL, _IONBF, 0 );\n    }\n\n    // redirect unbuffered STDIN to the console\n    lStdHandle = (size_t)GetStdHandle(STD_INPUT_HANDLE);\n    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);\n    if(hConHandle > 0) {\n        fp = _fdopen( hConHandle, \"r\" );\n        *stdin = *fp;\n        setvbuf( stdin, NULL, _IONBF, 0 );\n    }\n\n    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog\n    // point to console as well\n    std::ios::sync_with_stdio();\n    return true;\n}\n\n\nvideo::video()\n    : depth(24), red_shift(16), green_shift(8), blue_shift(0),\n      red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff)\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; running = threaded = calc_fps = false; updating = true;\n}\n\n//! optionally call it just before init() to set own\nvoid video::win_set_class(WNDCLASSEX &wcex)\n{\n    gWndClass = &wcex;\n}\n\nvoid video::win_load_accelerators(int idc)\n{\n    hAccelTable = LoadAccelerators(win_hInstance, MAKEINTRESOURCE(idc));\n}\n\nbool video::init_console()\n{\n    if(RedirectIOToConsole()) {\n        if(!g_pImg && g_sizex && g_sizey)\n            g_pImg = new unsigned int[g_sizex * g_sizey];\n        if(g_pImg) running = true;\n        return true;\n    }\n    return false;\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n}\n\nDWORD WINAPI thread_video(LPVOID lpParameter)\n{\n    video *v = (video*)lpParameter;\n    v->on_process();\n    return 0;\n}\n\nstatic bool loop_once(video *v)\n{\n    // screen update notify\n    if(int updates = g_updates) {\n        g_updates = 0;\n        if(g_video->updating) { g_skips += updates-1; g_fps++; }\n        else g_skips += updates;\n        UpdateWindow(g_hAppWnd);\n    }\n    // update fps\n    DWORD msec = GetTickCount();\n    if(v->calc_fps && msec >= g_msec+1000) {\n        double sec = (msec - g_msec)/1000.0;\n        char buffer[256], n = _snprintf(buffer, 128, \"%s: %d fps\", v->title, int(double(g_fps + g_skips)/sec));\n        if(g_skips) _snprintf(buffer+n, 128, \" - %d skipped = %d updates\", int(g_skips/sec), int(g_fps/sec));\n        SetWindowTextA(g_hAppWnd, buffer);\n        g_msec = msec; g_skips = g_fps = 0;\n    }\n    // event processing, including painting\n    MSG msg;\n    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){\n        if( msg.message == WM_QUIT ) { v->running = false; return false; }\n        if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) ){\n            TranslateMessage(&msg);\n            DispatchMessage(&msg);\n        }\n        return true; // try again\n    }\n    return false;\n}\n\n//! Do standard event loop\nvoid video::main_loop()\n{\n    // let Windows draw and unroll the window\n    InvalidateRect(g_hAppWnd, 0, false);\n    g_msec = GetTickCount(); // let's stay for 0,5 sec\n    while(g_msec + 500 > GetTickCount()) { loop_once(this); Sleep(1); }\n    g_msec = GetTickCount();\n    // now, start main process\n    if(threaded) {\n        g_handles[0] = CreateThread (\n            NULL,             // LPSECURITY_ATTRIBUTES security_attrs\n            0,                // SIZE_T stacksize\n            (LPTHREAD_START_ROUTINE) thread_video,\n            this,               // argument\n            0, 0);\n        if(!g_handles[0]) { DisplayError(\"Can't create thread\"); return; }\n        else // harmless race is possible here\n            g_handles[1] = CreateEvent(NULL, false, false, NULL);\n        while(running) {\n            while(loop_once(this));\n            YIELD_TO_THREAD(); // give time for processing when running on single CPU\n            DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE);\n            if(r == WAIT_OBJECT_0) break; // thread terminated\n        }\n        running = false;\n        if(WaitForSingleObject(g_handles[0], 3000) == WAIT_TIMEOUT){\n            // there was not enough time for graceful shutdown, killing the example with code 1.\n            exit(1);\n        }\n        if(g_handles[0]) CloseHandle(g_handles[0]);\n        if(g_handles[1]) CloseHandle(g_handles[1]);\n        g_handles[0] = g_handles[1] = 0;\n    }\n    else on_process();\n}\n\n//! Refresh screen picture\nbool video::next_frame()\n{\n    if(!running) return false;\n    g_updates++; // Fast but inaccurate counter. The data race here is benign.\n    if(!threaded) while(loop_once(this));\n    else if(g_handles[1]) {\n        SetEvent(g_handles[1]);\n        YIELD_TO_THREAD();\n    }\n    return true;\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(g_hAppWnd)\n        SetWindowTextA(g_hAppWnd, title);\n}\n\n#endif //__WINVIDEO_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/gui/xvideo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Uncomment next line to disable shared memory features if you do not have libXext\n// (http://www.xfree86.org/current/mit-shm.html)\n//#define X_NOSHMEM\n\n// Note that it may happen that the build environment supports the shared-memory extension\n// (so there's no build-time reason to disable the relevant code by defining X_NOSHMEM),\n// but that using shared memory still fails at run time.\n// This situation will (ultimately) cause the error handler set by XSetErrorHandler()\n// to be invoked with XErrorEvent::minor_code==X_ShmAttach. The code below tries to make\n// such a determination at XShmAttach() time, which seems plausible, but unfortunately\n// it has also been observed in a specific environment that the error may be reported\n// at a later time instead, even after video::init_window() has returned.\n// It is not clear whether this may happen in that way in any environment where it might\n// depend on the kind of display, e.g., local vs. over \"ssh -X\", so #define'ing X_NOSHMEM\n// may not always be the appropriate solution, therefore an environment variable\n// has been introduced to disable shared memory at run time.\n// A diagnostic has been added to advise the user about possible workarounds.\n// X_ShmAttach macro was changed to 1 due to recent changes to X11/extensions/XShm.h header.\n\n#include \"video.h\"\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/keysym.h>\n#include <sys/time.h>\n#include <signal.h>\n#include <pthread.h>\n\n#ifndef X_NOSHMEM\n#include <errno.h>\n#include <X11/extensions/XShm.h>\n#include <sys/ipc.h>\n#include <sys/shm.h>\n\nstatic XShmSegmentInfo shmseginfo;\nstatic Pixmap pixmap = 0;\nstatic bool already_called_X_ShmAttach = false;\nstatic bool already_advised_about_NOSHMEM_workarounds = false;\nstatic const char* NOSHMEM_env_var_name = \"TBB_EXAMPLES_X_NOSHMEM\";\n#endif\nstatic char *display_name = NULL;\nstatic Display *dpy = NULL;\nstatic Screen *scrn;\nstatic Visual *vis;\nstatic Colormap cmap;\nstatic GC gc;\nstatic Window win, rootW;\nstatic int dispdepth = 0;\nstatic XGCValues xgcv;\nstatic XImage *ximage;\nstatic int x_error = 0;\nstatic int vidtype = 3;\nint g_sizex, g_sizey;\nstatic video *g_video = 0;\nunsigned int *g_pImg = 0;\nstatic int g_fps = 0;\nstruct timeval g_time;\nstatic pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;\nAtom _XA_WM_DELETE_WINDOW = 0;// like in Xatom.h\n\n///////////////////////////////////////////// public methods of video class ///////////////////////\n\nvideo::video()\n{\n    assert(g_video == 0);\n    g_video = this; title = \"Video\"; calc_fps = running = false; updating = true;\n}\n\ninline void mask2bits(unsigned int mask, unsigned int &save, depth_t &shift)\n{\n    save  = mask; if(!mask) { shift = dispdepth/3; return; }\n    shift = 0; while(!(mask&1)) ++shift, mask >>= 1;\n    int bits = 0; while(mask&1) ++bits,  mask >>= 1;\n    shift += bits - 8;\n}\n\nint xerr_handler(Display* dpy_, XErrorEvent *error)\n{\n    x_error = error->error_code;\n    if(g_video) g_video->running = false;\n#ifndef X_NOSHMEM\n    if (error->minor_code==1/*X_ShmAttach*/ && already_called_X_ShmAttach && !already_advised_about_NOSHMEM_workarounds)\n    {\n        char err[256]; XGetErrorText(dpy_, x_error, err, 255);\n        fprintf(stderr, \"Warning: Can't attach shared memory to display: %s (%d)\\n\", err, x_error);\n        fprintf(stderr, \"If you are seeing a black output window, try setting %s environment variable to 1\"\n                        \" to disable shared memory extensions (0 to re-enable, other values undefined),\"\n                        \" or rebuilding with X_NOSHMEM defined in \" __FILE__ \"\\n\", NOSHMEM_env_var_name);\n        already_advised_about_NOSHMEM_workarounds = true;\n    }\n#else\n    (void) dpy_; // warning prevention\n#endif\n    return 0;\n}\n\nbool video::init_window(int xsize, int ysize)\n{\n    { //enclose local variables before fail label\n    g_sizex = xsize; g_sizey = ysize;\n\n    // Open the display\n    if (!dpy) {\n        dpy = XOpenDisplay(display_name);\n        if (!dpy) {\n            fprintf(stderr, \"Can't open X11 display %s\\n\", XDisplayName(display_name));\n            goto fail;\n        }\n    }\n    int theScreen = DefaultScreen(dpy);\n    scrn = ScreenOfDisplay(dpy, theScreen);\n    dispdepth = DefaultDepth(dpy, theScreen);\n    XVisualInfo vinfo;\n    if (!( (dispdepth >= 15 && dispdepth <= 32 && XMatchVisualInfo(dpy, theScreen, dispdepth, TrueColor, &vinfo) )\n        || XMatchVisualInfo(dpy, theScreen, 24, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 32, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 16, TrueColor, &vinfo)\n        || XMatchVisualInfo(dpy, theScreen, 15, TrueColor, &vinfo)\n        )) {\n        fprintf(stderr, \"Display has no appropriate True Color visual\\n\");\n        goto fail;\n    }\n    vis = vinfo.visual;\n    depth = dispdepth = vinfo.depth;\n    mask2bits(vinfo.red_mask, red_mask, red_shift);\n    mask2bits(vinfo.green_mask, green_mask, green_shift);\n    mask2bits(vinfo.blue_mask, blue_mask, blue_shift);\n    rootW = RootWindow(dpy, theScreen);\n    cmap = XCreateColormap(dpy, rootW, vis, AllocNone);\n    XSetWindowAttributes attrs;\n    attrs.backing_store = Always;\n    attrs.colormap = cmap;\n    attrs.event_mask = StructureNotifyMask|KeyPressMask|ButtonPressMask|ButtonReleaseMask;\n    attrs.background_pixel = BlackPixelOfScreen(scrn);\n    attrs.border_pixel = WhitePixelOfScreen(scrn);\n    win = XCreateWindow(dpy, rootW,\n        0, 0, xsize, ysize, 2,\n        dispdepth, InputOutput, vis,\n        CWBackingStore | CWColormap | CWEventMask |\n        CWBackPixel | CWBorderPixel,\n        &attrs);\n    if(!win) {\n        fprintf(stderr, \"Can't create the window\\n\");\n        goto fail;\n    }\n    XSizeHints sh;\n    sh.flags = PSize | PMinSize | PMaxSize;\n    sh.width = sh.min_width = sh.max_width = xsize;\n    sh.height = sh.min_height = sh.max_height = ysize;\n    XSetStandardProperties( dpy, win, g_video->title, g_video->title, None, NULL, 0, &sh );\n    _XA_WM_DELETE_WINDOW = XInternAtom(dpy, \"WM_DELETE_WINDOW\", false);\n    XSetWMProtocols(dpy, win, &_XA_WM_DELETE_WINDOW, 1);\n    gc = XCreateGC(dpy, win, 0L, &xgcv);\n    XMapRaised(dpy, win);\n    XFlush(dpy);\n#ifdef X_FULLSYNC\n    XSynchronize(dpy, true);\n#endif\n    XSetErrorHandler(xerr_handler);\n\n    int imgbytes = xsize*ysize*(dispdepth<=16?2:4);\n    const char *vidstr;\n#ifndef X_NOSHMEM\n    int major, minor, pixmaps;\n    if(XShmQueryExtension(dpy) &&\n       XShmQueryVersion(dpy, &major, &minor, &pixmaps))\n    { // Shared memory\n        if(NULL!=getenv(NOSHMEM_env_var_name) && 0!=strcmp(\"0\",getenv(NOSHMEM_env_var_name))) {\n            goto generic;\n        }\n        shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777);\n        if(shmseginfo.shmid < 0) {\n            fprintf(stderr, \"Warning: Can't get shared memory: %s\\n\", strerror(errno));\n            goto generic;\n        }\n        g_pImg = (unsigned int*)(shmseginfo.shmaddr = (char*)shmat(shmseginfo.shmid, 0, 0));\n        if(g_pImg == (unsigned int*)-1) {\n            fprintf(stderr, \"Warning: Can't attach to shared memory: %s\\n\", strerror(errno));\n            shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n            goto generic;\n        }\n        shmseginfo.readOnly = false;\n        if(!XShmAttach(dpy, &shmseginfo) || x_error) {\n            char err[256]; XGetErrorText(dpy, x_error, err, 255);\n            fprintf(stderr, \"Warning: Can't attach shared memory to display: %s (%d)\\n\", err, x_error);\n            shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n            goto generic;\n        }\n        already_called_X_ShmAttach = true;\n\n#ifndef X_NOSHMPIX\n        if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap)\n        { // Pixmaps\n            vidtype = 2; vidstr = \"X11 shared memory pixmap\";\n            pixmap = XShmCreatePixmap(dpy, win, (char*)g_pImg, &shmseginfo, xsize, ysize, dispdepth);\n            XSetWindowBackgroundPixmap(dpy, win, pixmap);\n        } else\n#endif//!X_NOSHMPIX\n        { // Standard\n            vidtype = 1; vidstr = \"X11 shared memory\";\n            ximage = XShmCreateImage(dpy, vis, dispdepth,\n                ZPixmap, 0, &shmseginfo, xsize, ysize);\n            if(!ximage) {\n                fprintf(stderr, \"Can't create the shared image\\n\");\n                goto fail;\n            }\n            assert(ximage->bytes_per_line == xsize*(dispdepth<=16?2:4));\n            ximage->data = shmseginfo.shmaddr;\n        }\n    } else\n#endif\n    {\n#ifndef X_NOSHMEM\ngeneric:\n#endif\n        vidtype = 0; vidstr = \"generic X11\";\n        g_pImg = new unsigned int[imgbytes/sizeof(int)];\n        ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize);\n        if(!ximage) {\n            fprintf(stderr, \"Can't create the image\\n\");\n            goto fail;\n        }\n    }\n    if( ximage ) {\n        // Note: It may be more efficient to adopt the server's byte order\n        //       and swap once per get_color() call instead of once per pixel.\n        const uint32_t probe = 0x03020100;\n        const bool big_endian = (((const char*)(&probe))[0]==0x03);\n        ximage->byte_order = big_endian ? MSBFirst : LSBFirst;\n    }\n    printf(\"Note: using %s with %s visual for %d-bit color depth\\n\", vidstr, vis==DefaultVisual(dpy, theScreen)?\"default\":\"non-default\", dispdepth);\n    running = true;\n    return true;\n    } // end of enclosing local variables\nfail:\n    terminate(); init_console();\n    return false;\n}\n\nbool video::init_console()\n{\n    if(!g_pImg && g_sizex && g_sizey) {\n        dispdepth = 24; red_shift = 16; vidtype = 3; // fake video\n        g_pImg = new unsigned int[g_sizex*g_sizey];\n        running = true;\n    }\n    return true;\n}\n\nvoid video::terminate()\n{\n    running = false;\n    if(dpy) {\n        vidtype = 3; // stop video\n        if(threaded) { pthread_mutex_lock(&g_mutex); pthread_mutex_unlock(&g_mutex); }\n        if(ximage) { XDestroyImage(ximage); ximage = 0; g_pImg = 0; } // it frees g_pImg for vidtype == 0\n#ifndef X_NOSHMEM\n        if(pixmap) XFreePixmap(dpy, pixmap);\n        if(shmseginfo.shmaddr) { XShmDetach(dpy, &shmseginfo); shmdt(shmseginfo.shmaddr); g_pImg = 0; }\n        if(shmseginfo.shmid >= 0) shmctl(shmseginfo.shmid, IPC_RMID, NULL);\n#endif\n        if(gc) XFreeGC(dpy, gc);\n        if(win) XDestroyWindow(dpy, win);\n        XCloseDisplay(dpy); dpy = 0;\n    }\n    if(g_pImg) { delete[] g_pImg; g_pImg = 0; } // if was allocated for console mode\n}\n\nvideo::~video()\n{\n    if(g_video) terminate();\n    g_video = 0;\n}\n\n//! Do standard event loop\nvoid video::main_loop()\n{\n    struct timezone tz; gettimeofday(&g_time, &tz);\n    on_process();\n}\n\n//! Check for pending events once\nbool video::next_frame()\n{\n    if(!running) return false;\n    //! try acquire mutex if threaded code, returns on failure\n    if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex))\n        return running;\n    //! Refresh screen picture\n    g_fps++;\n#ifndef X_NOSHMPIX\n    if(vidtype == 2 && updating) XClearWindow(dpy, win);\n#endif\n    while( XPending(dpy) ) {\n        XEvent report; XNextEvent(dpy, &report);\n        switch( report.type ) {\n            case ClientMessage:\n                if(report.xclient.format != 32 || report.xclient.data.l[0] != _XA_WM_DELETE_WINDOW) break;\n            case DestroyNotify:\n                running = false;\n            case KeyPress:\n                on_key( XLookupKeysym(&report.xkey, 0) ); break;\n            case ButtonPress:\n                on_mouse( report.xbutton.x, report.xbutton.y, report.xbutton.button ); break;\n            case ButtonRelease:\n                on_mouse( report.xbutton.x, report.xbutton.y, -report.xbutton.button ); break;\n        }\n    }\n    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);\n    double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);\n    if(sec > 1) {\n        memcpy(&g_time, &now_time, sizeof(g_time));\n        if(calc_fps) {\n            double fps = g_fps; g_fps = 0;\n            char buffer[256]; snprintf(buffer, 256, \"%s%s: %d fps\", title, updating?\"\":\" (no updating)\", int(fps/sec));\n            XStoreName(dpy, win, buffer);\n        }\n#ifndef X_FULLSYNC\n        XSync(dpy, false); // It is often better then using XSynchronize(dpy, true)\n#endif//X_FULLSYNC\n    }\n    if(threaded) pthread_mutex_unlock(&g_mutex);\n    return true;\n}\n\n//! Change window title\nvoid video::show_title()\n{\n    if(vidtype < 3)\n        XStoreName(dpy, win, title);\n}\n\ndrawing_area::drawing_area(int x, int y, int sizex, int sizey)\n    : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex),\n    pixel_depth(dispdepth), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey)\n{\n    assert(x < g_sizex); assert(y < g_sizey);\n    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);\n\n    index = base_index; // current index\n}\n\nvoid drawing_area::update()\n{\n    if(!g_video->updating) return;\n#ifndef X_NOSHMEM\n    switch(vidtype) {\n    case 0:\n#endif\n        pthread_mutex_lock(&g_mutex);\n        if(vidtype == 0) XPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y);\n        pthread_mutex_unlock(&g_mutex);\n#ifndef X_NOSHMEM\n        break;\n    case 1:\n        pthread_mutex_lock(&g_mutex);\n        if(vidtype == 1) XShmPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y, false);\n        pthread_mutex_unlock(&g_mutex);\n        break;\n    /*case 2: make it in next_frame(); break;*/\n    }\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Common source code for samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Common source code for samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains common code that is used in the Intel&reg; Threading Building Blocks (Intel&reg; TBB) samples.\n\t\t<br>\n\t\tThis code is not intended to be used directly. It is incorporated automatically by the examples that need it.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"gui/\">gui</a>\n\t\t\t\t<dd>\n\t\t\t\t\tGUI code for examples that have graphical user interfaces. Currently supports:\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>GDI+*, DirectDraw*, Direct2D* (Windows* systems)\n\t\t\t\t\t\t<li>OpenGL* (macOS* systems)\n\t\t\t\t\t\t<li>X window (Linux* or macOS* systems)\n\t\t\t\t\t</ul>\n\t\t\t\t\tSee the examples that use the GUI\n\t\t\t\t\t(<a href=\"../graph/stereo/readme.html\">stereo</a>,\n\t\t\t\t\t<a href=\"../parallel_for/tachyon/readme.html\">tachyon</a>, \n\t\t\t\t\t<a href=\"../parallel_for/seismic/readme.html\">seismic</a>,\n\t\t\t\t\t<a href=\"../task_arena/fractal/readme.html\">fractal</a>)\n\t\t\t\t\tfor more details.\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"utility/\">utility</a>\n\t\t\t\t<dd>Common driver and utility code for examples. Currently provides:\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>class FastRandom - a random number generator that uses linear congruental method\n\t\t\t\t\t\t\t(<a href=\"utility/fast_random.h\">fast_random.h</a>)\n\t\t\t\t\t\t<li>class thread_number_range - a class to specify the numbers of threads an example should use\n\t\t\t\t\t\t\t(<a href=\"utility/utility.h\">utility.h</a>)\n\t\t\t\t\t\t<li>support for command line interface - class cli_argument_pack and function parse_cli_arguments\n\t\t\t\t\t\t\t(<a href=\"utility/utility.h\">utility.h</a>)\n\t\t\t\t\t</ul>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Common information</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t<br>\n\t\t<div class=\"h4-alike\">Number of threads</div>\n\t\t\t<p>\n\t\t\t\tMost Intel TBB examples allow to specify <i>n-of-threads</i>, the set of thread numbers that should be used to run an example.\n\t\t\t\t<br>Usually, it is a range of the form <i>low[:high[:(+|*|#)S]]</i>, where <i>low</i> and optional <i>high</i>\n\t\t\t\tare non-negative integers or 'auto' for the default choice, and optional step expression <i>(+|*|#)S</i> \n\t\t\t\tspecifies how thread numbers are chosen within the range:\n\t\t\t\t<ul>\n\t\t\t\t\t<li>With <i>+/*</i>, the previous number is incremented/multiplied by <i>S</i>.\n\t\t\t\t\tE.g., expression '12:16:+1' means 12,13,14,15,16 threads, and '1:16:*2' means 1,2,4,8,16 threads.\n\t\t\t\t\t<li>With <i>#</i>, <i>S</i> is the desired number of steps between any subsequent powers of 2;\n\t\t\t\t\tit must be a power of 2 on its own, with most meaningful values being 2, 4, and 8. \n\t\t\t\t\tFor a given number of threads, the actual step value is computed as the quotient\n\t\t\t\t\tof the nearest smaller power of 2 divided by the number of steps, but is at least 1.\n\t\t\t\t\tE.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 threads;\n\t\t\t\t\tnote the step doubling at 8 and 16 to keep 4 steps between powers of 2.\n\t\t\t\t</ul>\n\t\t\t\tA default value for the number of threads can be customized in an example. If not customized, it is '1:auto:#4'.\n\t\t\t\tThe 'auto' parameter is substituted with a value returned by a specified function, which typically is\n\t\t\t\t<code>tbb::task_scheduler_init::default_num_threads()</code>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/utility/fast_random.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FAST_RANDOM_H_\n#define FAST_RANDOM_H_\nnamespace utility{\n//------------------------------------------------------------------------\n// FastRandom\n//------------------------------------------------------------------------\n\nnamespace internal{\n    size_t GetPrime ( size_t seed );\n}\n\n//! A fast random number generator.\n/** Uses linear congruential method. */\nclass FastRandom {\n    size_t x, a;\npublic:\n    //! Get a random number.\n    unsigned short get() {\n        return get(x);\n    }\n        //! Get a random number for the given seed; update the seed for next use.\n    unsigned short get( size_t& seed ) {\n        unsigned short r = (unsigned short)(seed>>16);\n        seed = seed*a+1;\n        return r;\n    }\n    //! Construct a random number generator.\n    FastRandom( size_t seed ) {\n        x = seed*internal::GetPrime(seed);\n        a = internal::GetPrime(x);\n    }\n};\n}\n\nnamespace utility {\nnamespace internal{\n//! Table of primes used by fast random-number generator (FastRandom).\n    static const unsigned Primes[] = {\n        0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,\n        0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,\n        0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,\n        0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,\n        0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,\n        0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,\n        0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,\n        0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,\n        0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,\n        0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,\n        0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,\n        0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,\n        0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,\n        0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,\n        0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,\n        0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f\n    };\n    size_t GetPrime ( size_t seed ) {\n        return Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];\n    }\n}\n}\n\n#endif /* FAST_RANDOM_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/common/utility/utility.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef UTILITY_H_\n#define UTILITY_H_\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#include <exception>\n#include <cstdio>\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\n#include <utility>\n#include <string>\n#include <cstring>\n#include <vector>\n#include <map>\n#include <set>\n#include <algorithm>\n#include <sstream>\n#include <numeric>\n#include <stdexcept>\n#include <memory>\n#include <cassert>\n#include <iostream>\n#include <cstdlib>\n// TBB headers should not be used, as some examples may need to be built without TBB.\n\nnamespace utility{\n    namespace internal{\n\n#if (_MSC_VER >= 1600 || __cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__) \\\n    && (_CPPLIB_VER || _LIBCPP_VERSION || __GLIBCXX__ && _UNIQUE_PTR_H ) \\\n    && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1200 )\n    // std::unique_ptr is available, and compiler can use it\n    #define smart_ptr std::unique_ptr\n    using std::swap;\n#else\n    #if __INTEL_COMPILER && __GXX_EXPERIMENTAL_CXX0X__\n    // std::unique_ptr is unavailable, so suppress std::auto_prt<> deprecation warning\n    #pragma warning(disable: 1478)\n    #endif\n    #define smart_ptr std::auto_ptr\n    // in some C++ libraries, std::swap does not work with std::auto_ptr\n    template<typename T>\n    void swap( std::auto_ptr<T>& ptr1, std::auto_ptr<T>& ptr2 ) {\n        std::auto_ptr<T> tmp; tmp = ptr2; ptr2 = ptr1; ptr1 = tmp;\n    }\n#endif\n\n        //TODO: add tcs\n        template<class dest_type>\n        dest_type& string_to(std::string const& s, dest_type& result){\n            std::stringstream stream(s);\n            stream>>result;\n            if ((!stream)||(stream.fail())){\n                throw std::invalid_argument(\"error converting string '\"+std::string(s)+\"'\");\n            }\n            return result;\n        }\n\n        template<class dest_type>\n        dest_type string_to(std::string const& s){\n            dest_type result;\n            return string_to(s,result);\n        }\n\n        template<typename>\n        struct is_bool          { static bool value(){return false;}};\n        template<>\n        struct is_bool<bool>    { static bool value(){return true;}};\n\n        class type_base {\n            type_base& operator=(const type_base&);\n            public:\n            const std::string name;\n            const std::string description;\n\n            type_base (std::string a_name, std::string a_description) : name(a_name), description(a_description) {}\n            virtual void parse_and_store(const std::string & s) = 0;\n            virtual std::string value() const = 0;\n            virtual smart_ptr<type_base> clone() const = 0;\n            virtual ~type_base(){}\n        };\n        template <typename type>\n        class type_impl : public type_base {\n        private:\n            type_impl& operator=(const type_impl&);\n            typedef bool(*validating_function_type)(const type&);\n        private:\n            type & target;\n            validating_function_type validating_function;\n        public:\n            type_impl(std::string a_name, std::string a_description, type & a_target, validating_function_type a_validating_function = NULL)\n                : type_base (a_name,a_description), target(a_target),validating_function(a_validating_function)\n            {};\n            void parse_and_store (const std::string & s) /*override*/ {\n                try{\n                    const bool is_bool = internal::is_bool<type>::value();\n                    if (is_bool && s.empty()){\n                        //to avoid directly assigning true\n                        //(as it will impose additional layer of indirection)\n                        //so, simply pass it as string\n                        internal::string_to(\"1\",target);\n                    }else {\n                        internal::string_to(s,target);\n                    }\n                }catch(std::invalid_argument& e){\n                    std::stringstream str;\n                    str <<\"'\"<<s<<\"' is incorrect input for argument '\"<<name<<\"'\"\n                        <<\" (\"<<e.what()<<\")\";\n                    throw std::invalid_argument(str.str());\n                }\n                if (validating_function){\n                    if (!((validating_function)(target))){\n                        std::stringstream str;\n                        str <<\"'\"<<target<<\"' is invalid value for argument '\"<<name<<\"'\";\n                        throw std::invalid_argument(str.str());\n                    }\n                }\n            }\n            template <typename t>\n            static bool is_null_c_str(t&){return false;}\n            static bool is_null_c_str(char* s){return s==NULL;}\n            std::string value() const /*override*/ {\n                std::stringstream str;\n                if (!is_null_c_str(target))\n                    str<<target;\n                return str.str();\n            }\n            smart_ptr<type_base> clone() const /*override*/ {\n                return smart_ptr<type_base>(new type_impl(*this));\n            }\n        };\n\n        class argument{\n        private:\n            smart_ptr<type_base> p_type;\n            bool matched_;\n        public:\n            argument(argument const& other)\n                : p_type(other.p_type.get() ? (other.p_type->clone()).release() : NULL)\n                 ,matched_(other.matched_)\n            {}\n            argument& operator=(argument a){\n                this->swap(a);\n                return *this;\n            }\n            void swap(argument& other){\n                internal::swap(p_type, other.p_type);\n                std::swap(matched_,other.matched_);\n            }\n            template<class type>\n            argument(std::string a_name, std::string a_description, type& dest, bool(*a_validating_function)(const type&)= NULL)\n                :p_type(new type_impl<type>(a_name,a_description,dest,a_validating_function))\n                 ,matched_(false)\n            {}\n            std::string value()const{\n                return p_type->value();\n            }\n            std::string name()const{\n                return p_type->name;\n            }\n            std::string description() const{\n                return p_type->description;\n            }\n            void parse_and_store(const std::string & s){\n                p_type->parse_and_store(s);\n                matched_=true;\n            }\n            bool is_matched() const{return matched_;}\n        };\n    } // namespace internal\n\n    class cli_argument_pack{\n        typedef std::map<std::string,internal::argument> args_map_type;\n        typedef std::vector<std::string> args_display_order_type;\n        typedef std::vector<std::string> positional_arg_names_type;\n    private:\n        args_map_type args_map;\n        args_display_order_type args_display_order;\n        positional_arg_names_type positional_arg_names;\n        std::set<std::string> bool_args_names;\n    private:\n        void add_arg(internal::argument const& a){\n            std::pair<args_map_type::iterator, bool> result = args_map.insert(std::make_pair(a.name(),a));\n            if (!result.second){\n                throw std::invalid_argument(\"argument with name: '\"+a.name()+\"' already registered\");\n            }\n            args_display_order.push_back(a.name());\n        }\n    public:\n        template<typename type>\n        cli_argument_pack& arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){\n            internal::argument a(name,description,dest,validate);\n            add_arg(a);\n            if (internal::is_bool<type>::value()){\n                bool_args_names.insert(name);\n            }\n            return *this;\n        }\n\n        //Positional means that argument name can be omitted in actual CL\n        //only key to match values for parameters with\n        template<typename type>\n        cli_argument_pack& positional_arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){\n            internal::argument a(name,description,dest,validate);\n            add_arg(a);\n            if (internal::is_bool<type>::value()){\n                bool_args_names.insert(name);\n            }\n            positional_arg_names.push_back(name);\n            return *this;\n        }\n\n        void parse(std::size_t argc, char const* argv[]){\n            {\n                std::size_t current_positional_index=0;\n                for (std::size_t j=1;j<argc;j++){\n                    internal::argument* pa = NULL;\n                    std::string argument_value;\n\n                    const char * const begin=argv[j];\n                    const char * const end=begin+std::strlen(argv[j]);\n\n                    const char * const assign_sign = std::find(begin,end,'=');\n\n                    struct throw_unknown_parameter{ static void _(std::string const& location){\n                        throw std::invalid_argument(std::string(\"unknown parameter starting at:'\")+location+\"'\");\n                    }};\n                    //first try to interpret it like parameter=value string\n                    if (assign_sign!=end){\n                        std::string name_found = std::string(begin,assign_sign);\n                        args_map_type::iterator it = args_map.find(name_found );\n\n                        if(it!=args_map.end()){\n                            pa= &((*it).second);\n                            argument_value = std::string(assign_sign+1,end);\n                        }else {\n                            throw_unknown_parameter::_(argv[j]);\n                        }\n                    }\n                    //then see is it a named flag\n                    else{\n                        args_map_type::iterator it = args_map.find(argv[j] );\n                        if(it!=args_map.end()){\n                            pa= &((*it).second);\n                            argument_value = \"\";\n                        }\n                        //then try it as positional argument without name specified\n                        else if (current_positional_index < positional_arg_names.size()){\n                            std::stringstream str(argv[j]);\n                            args_map_type::iterator found_positional_arg = args_map.find(positional_arg_names.at(current_positional_index));\n                            //TODO: probably use of smarter assert would help here\n                            assert(found_positional_arg!=args_map.end()/*&&\"positional_arg_names and args_map are out of sync\"*/);\n                            if (found_positional_arg==args_map.end()){\n                                throw std::logic_error(\"positional_arg_names and args_map are out of sync\");\n                            }\n                            pa= &((*found_positional_arg).second);\n                            argument_value = argv[j];\n\n                            current_positional_index++;\n                        }else {\n                            //TODO: add tc to check\n                            throw_unknown_parameter::_(argv[j]);\n                        }\n                    }\n                    assert(pa);\n                    if (pa->is_matched()){\n                        throw std::invalid_argument(std::string(\"several values specified for: '\")+pa->name()+\"' argument\");\n                    }\n                    pa->parse_and_store(argument_value);\n                }\n            }\n        }\n        std::string usage_string(const std::string& binary_name)const{\n            std::string command_line_params;\n            std::string summary_description;\n\n            for (args_display_order_type::const_iterator it = args_display_order.begin();it!=args_display_order.end();++it){\n                const bool is_bool = (0!=bool_args_names.count((*it)));\n                args_map_type::const_iterator argument_it = args_map.find(*it);\n                //TODO: probably use of smarter assert would help here\n                assert(argument_it!=args_map.end()/*&&\"args_display_order and args_map are out of sync\"*/);\n                if (argument_it==args_map.end()){\n                    throw std::logic_error(\"args_display_order and args_map are out of sync\");\n                }\n                const internal::argument & a = (*argument_it).second;\n                command_line_params +=\" [\" + a.name() + (is_bool ?\"\":\"=value\")+ \"]\";\n                summary_description +=\" \" + a.name() + \" - \" + a.description() +\" (\"+a.value() +\")\" + \"\\n\";\n            }\n\n            std::string positional_arg_cl;\n            for (positional_arg_names_type::const_iterator it = positional_arg_names.begin();it!=positional_arg_names.end();++it){\n                positional_arg_cl +=\" [\"+(*it);\n            }\n            for (std::size_t i=0;i<positional_arg_names.size();++i){\n                positional_arg_cl+=\"]\";\n            }\n            command_line_params+=positional_arg_cl;\n            std::stringstream str;\n            using std::endl;\n            str << \" Program usage is:\" << endl\n                 << \" \" << binary_name << command_line_params\n                 << endl << endl\n                 << \" where:\" << endl\n                 << summary_description\n            ;\n            return str.str();\n        }\n    }; // class cli_argument_pack\n\n    namespace internal {\n        template<typename T>\n        bool is_power_of_2( T val ) {\n            size_t intval = size_t(val);\n            return (intval&(intval-1)) == size_t(0);\n        }\n        int step_function_plus(int previous, double step){\n            return static_cast<int>(previous+step);\n        }\n        int step_function_multiply(int previous, double multiply){\n            return static_cast<int>(previous*multiply);\n        }\n        // \"Power-of-2 ladder\": nsteps is the desired number of steps between any subsequent powers of 2.\n        // The actual step is the quotient of the nearest smaller power of 2 divided by that number (but at least 1).\n        // E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32\n        int step_function_power2_ladder(int previous, double nsteps){\n            int steps = int(nsteps);\n            assert( is_power_of_2(steps) );  // must be a power of 2\n            // The actual step is 1 until the value is twice as big as nsteps\n            if( previous < 2*steps )\n                return previous+1;\n            // calculate the previous power of 2\n            int prev_power2 = previous/2;                 // start with half the given value\n            int rshift = 1;                               // and with the shift of 1;\n            while( int shifted = prev_power2>>rshift ) {  // shift the value right; while the result is non-zero,\n                prev_power2 |= shifted;                   //   add the bits set in 'shifted';\n                rshift <<= 1;                             //   double the shift, as twice as many top bits are set;\n            }                                             // repeat.\n            ++prev_power2; // all low bits set; now it's just one less than the desired power of 2\n            assert( is_power_of_2(prev_power2) );\n            assert( (prev_power2<=previous)&&(2*prev_power2>previous) );\n            // The actual step value is the previous power of 2 divided by steps\n            return previous + (prev_power2/steps);\n        }\n        typedef int (* step_function_ptr_type)(int,double);\n\n        struct step_function_descriptor  {\n            char mnemonic;\n            step_function_ptr_type function;\n        public:\n            step_function_descriptor(char a_mnemonic, step_function_ptr_type a_function) : mnemonic(a_mnemonic), function(a_function) {}\n        private:\n            void operator=(step_function_descriptor  const&);\n        };\n        step_function_descriptor step_function_descriptors[] = {\n                step_function_descriptor('*',step_function_multiply),\n                step_function_descriptor('+',step_function_plus),\n                step_function_descriptor('#',step_function_power2_ladder)\n        };\n\n        template<typename T, size_t N>\n        inline size_t array_length(const T(&)[N])\n        {\n           return N;\n        }\n\n        struct thread_range_step {\n            step_function_ptr_type step_function;\n            double step_function_argument;\n\n            thread_range_step ( step_function_ptr_type step_function_, double step_function_argument_)\n                :step_function(step_function_),step_function_argument(step_function_argument_)\n            {\n                if (!step_function_)\n                    throw std::invalid_argument(\"step_function for thread range step should not be NULL\");\n            }\n            int operator()(int previous)const {\n                assert(0<=previous); // test 0<=first and loop discipline\n                const int ret = step_function(previous,step_function_argument);\n                assert(previous<ret);\n                return ret;\n            }\n            friend std::istream& operator>>(std::istream& input_stream, thread_range_step& step){\n                char function_char;\n                double function_argument;\n                input_stream >> function_char >> function_argument;\n                size_t i = 0;\n                while ((i<array_length(step_function_descriptors)) && (step_function_descriptors[i].mnemonic!=function_char)) ++i;\n                if (i >= array_length(step_function_descriptors)){\n                    throw std::invalid_argument(\"unknown step function mnemonic: \"+std::string(1,function_char));\n                } else if ((function_char=='#') && !is_power_of_2(function_argument)) {\n                    throw std::invalid_argument(\"the argument of # should be a power of 2\");\n                }\n                step.step_function = step_function_descriptors[i].function;\n                step.step_function_argument = function_argument;\n                return input_stream;\n            }\n        };\n    } // namespace internal\n\n    struct thread_number_range{\n        int (*auto_number_of_threads)();\n        int first; // 0<=first (0 can be used as a special value)\n        int last;  // first<=last\n\n        internal::thread_range_step step;\n\n        thread_number_range( int (*auto_number_of_threads_)(),int low_=1, int high_=-1\n                , internal::thread_range_step step_ =  internal::thread_range_step(internal::step_function_power2_ladder,4)\n        )\n            : auto_number_of_threads(auto_number_of_threads_), first(low_), last((high_>-1) ? high_ : auto_number_of_threads_())\n              ,step(step_)\n        {\n            if (first<0) {\n                throw std::invalid_argument(\"negative value not allowed\");\n            }\n            if (first>last) {\n                throw std::invalid_argument(\"decreasing sequence not allowed\");\n            }\n        }\n        friend std::istream& operator>>(std::istream& i, thread_number_range& range){\n            try{\n                std::string s;\n                i>>s;\n                struct string_to_number_of_threads{\n                    int auto_value;\n                    string_to_number_of_threads(int auto_value_):auto_value(auto_value_){}\n                    int operator()(const std::string & value)const{\n                        return (value==\"auto\")? auto_value : internal::string_to<int>(value);\n                    }\n                };\n                string_to_number_of_threads string_to_number_of_threads(range.auto_number_of_threads());\n                int low, high;\n                std::size_t colon = s.find(':');\n                if ( colon == std::string::npos ){\n                    low = high = string_to_number_of_threads(s);\n                } else {\n                    //it is a range\n                    std::size_t second_colon = s.find(':',colon+1);\n\n                    low  = string_to_number_of_threads(std::string(s, 0, colon)); //not copying the colon\n                    high = string_to_number_of_threads(std::string(s, colon+1, second_colon - (colon+1))); //not copying the colons\n                    if (second_colon != std::string::npos){\n                        internal::string_to(std::string(s,second_colon + 1),range.step);\n                    }\n                }\n                range = thread_number_range(range.auto_number_of_threads,low,high,range.step);\n            }catch(std::invalid_argument&){\n                i.setstate(std::ios::failbit);\n                throw;\n            }\n            return i;\n        }\n        friend std::ostream& operator<<(std::ostream& o, thread_number_range const& range){\n            using namespace internal;\n            size_t i = 0;\n            for (; i < array_length(step_function_descriptors) && step_function_descriptors[i].function != range.step.step_function; ++i ) {}\n            if (i >= array_length(step_function_descriptors)){\n                throw std::invalid_argument(\"unknown step function for thread range\");\n            }\n            o<<range.first<<\":\"<<range.last<<\":\"<<step_function_descriptors[i].mnemonic<<range.step.step_function_argument;\n            return o;\n        }\n    }; // struct thread_number_range\n    //TODO: fix unused warning here\n    //TODO: update the thread range description in the .html files\n    static const char* thread_number_range_desc=\"number of threads to use; a range of the form low[:high[:(+|*|#)step]],\"\n                                                \"\\n\\twhere low and optional high are non-negative integers or 'auto' for the default choice,\"\n                                                \"\\n\\tand optional step expression specifies how thread numbers are chosen within the range.\"\n                                                \"\\n\\tSee examples/common/index.html for detailed description.\"\n   ;\n\n    inline void report_elapsed_time(double seconds){\n        std::cout<<\"elapsed time : \"<<seconds<<\" seconds\"<<std::endl;\n    }\n\n    inline void report_skipped(){\n        std::cout<<\"skip\"<<std::endl;\n    }\n\n    inline void parse_cli_arguments(int argc, const char* argv[], utility::cli_argument_pack cli_pack){\n        bool show_help = false;\n        cli_pack.arg(show_help,\"-h\",\"show this message\");\n\n        bool invalid_input=false;\n        try {\n            cli_pack.parse(argc,argv);\n        }catch(std::exception& e){\n            std::cerr\n                    <<\"error occurred while parsing command line.\"<<std::endl\n                    <<\"error text: \"<<e.what()<<std::endl\n                    <<std::flush;\n            invalid_input =true;\n        }\n        if (show_help || invalid_input){\n            std::cout<<cli_pack.usage_string(argv[0])<<std::flush;\n            std::exit(0);\n        }\n\n    }\n    inline void parse_cli_arguments(int argc, char* argv[], utility::cli_argument_pack cli_pack){\n         parse_cli_arguments(argc, const_cast<const char**>(argv), cli_pack);\n    }\n}\n\n#endif /* UTILITY_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_hash_map/count_strings/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=count_strings\nARGS=\nPERF_RUN_ARGS=auto 10000000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:   release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\t\nperf_build: release\n\t\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_hash_map/count_strings/count_strings.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Workaround for ICC 11.0 not finding __sync_fetch_and_add_4 on some of the Linux platforms.\n#if __linux__ && defined(__INTEL_COMPILER)\n#define __sync_fetch_and_add(ptr,addend) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(ptr)), addend)\n#endif\n#include <string>\n#include <cstring>\n#include <cctype>\n#include <cstdlib>\n#include <cstdio>\n#include \"tbb/concurrent_hash_map.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_allocator.h\"\n#include \"../../common/utility/utility.h\"\n\n\n//! String type with scalable allocator.\n/** On platforms with non-scalable default memory allocators, the example scales \n    better if the string allocator is changed to tbb::tbb_allocator<char>. */\ntypedef std::basic_string<char,std::char_traits<char>,tbb::tbb_allocator<char> > MyString;\n\nusing namespace tbb;\nusing namespace std;\n\n//! Set to true to counts.\nstatic bool verbose = false;\nstatic bool silent = false;\n//! Problem size\nlong N = 1000000;\nconst int size_factor = 2;\n\n//! A concurrent hash table that maps strings to ints.\ntypedef concurrent_hash_map<MyString,int> StringTable;\n\n//! Function object for counting occurrences of strings.\nstruct Tally {\n    StringTable& table;\n    Tally( StringTable& table_ ) : table(table_) {}\n    void operator()( const blocked_range<MyString*> range ) const {\n        for( MyString* p=range.begin(); p!=range.end(); ++p ) {\n            StringTable::accessor a;\n            table.insert( a, *p );\n            a->second += 1;\n        }\n    }\n};\n\nstatic MyString* Data;\n\nstatic void CountOccurrences(int nthreads) {\n    StringTable table;\n\n    tick_count t0 = tick_count::now();\n    parallel_for( blocked_range<MyString*>( Data, Data+N, 1000 ), Tally(table) );\n    tick_count t1 = tick_count::now();\n\n    int n = 0;\n    for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) {\n        if( verbose && nthreads )\n            printf(\"%s %d\\n\",i->first.c_str(),i->second);\n        n += i->second;\n    }\n\n    if ( !silent ) printf(\"total = %d  unique = %u  time = %g\\n\", n, unsigned(table.size()), (t1-t0).seconds());\n}\n\n/// Generator of random words\n\nstruct Sound {\n    const char *chars;\n    int rates[3];// beginning, middle, ending\n};\nSound Vowels[] = {\n    {\"e\", {445,6220,1762}}, {\"a\", {704,5262,514}}, {\"i\", {402,5224,162}}, {\"o\", {248,3726,191}},\n    {\"u\", {155,1669,23}}, {\"y\", {4,400,989}}, {\"io\", {5,512,18}}, {\"ia\", {1,329,111}},\n    {\"ea\", {21,370,16}}, {\"ou\", {32,298,4}}, {\"ie\", {0,177,140}}, {\"ee\", {2,183,57}},\n    {\"ai\", {17,206,7}}, {\"oo\", {1,215,7}}, {\"au\", {40,111,2}}, {\"ua\", {0,102,4}},\n    {\"ui\", {0,104,1}}, {\"ei\", {6,94,3}}, {\"ue\", {0,67,28}}, {\"ay\", {1,42,52}},\n    {\"ey\", {1,14,80}}, {\"oa\", {5,84,3}}, {\"oi\", {2,81,1}}, {\"eo\", {1,71,5}},\n    {\"iou\", {0,61,0}}, {\"oe\", {2,46,9}}, {\"eu\", {12,43,0}}, {\"iu\", {0,45,0}},\n    {\"ya\", {12,19,5}}, {\"ae\", {7,18,10}}, {\"oy\", {0,10,13}}, {\"ye\", {8,7,7}},\n    {\"ion\", {0,0,20}}, {\"ing\", {0,0,20}}, {\"ium\", {0,0,10}}, {\"er\", {0,0,20}}\n};\nSound Consonants[] = {\n    {\"r\", {483,1414,1110}}, {\"n\", {312,1548,1114}}, {\"t\", {363,1653,251}}, {\"l\", {424,1341,489}},\n    {\"c\", {734,735,260}}, {\"m\", {732,785,161}}, {\"d\", {558,612,389}}, {\"s\", {574,570,405}},\n    {\"p\", {519,361,98}}, {\"b\", {528,356,30}}, {\"v\", {197,598,16}}, {\"ss\", {3,191,567}},\n    {\"g\", {285,430,42}}, {\"st\", {142,323,180}}, {\"h\", {470,89,30}}, {\"nt\", {0,350,231}},\n    {\"ng\", {0,117,442}}, {\"f\", {319,194,19}}, {\"ll\", {1,414,83}}, {\"w\", {249,131,64}},\n    {\"k\", {154,179,47}}, {\"nd\", {0,279,92}}, {\"bl\", {62,235,0}}, {\"z\", {35,223,16}},\n    {\"sh\", {112,69,79}}, {\"ch\", {139,95,25}}, {\"th\", {70,143,39}}, {\"tt\", {0,219,19}},\n    {\"tr\", {131,104,0}}, {\"pr\", {186,41,0}}, {\"nc\", {0,223,2}}, {\"j\", {184,32,1}},\n    {\"nn\", {0,188,20}}, {\"rt\", {0,148,51}}, {\"ct\", {0,160,29}}, {\"rr\", {0,182,3}},\n    {\"gr\", {98,87,0}}, {\"ck\", {0,92,86}}, {\"rd\", {0,81,88}}, {\"x\", {8,102,48}},\n    {\"ph\", {47,101,10}}, {\"br\", {115,43,0}}, {\"cr\", {92,60,0}}, {\"rm\", {0,131,18}},\n    {\"ns\", {0,124,18}}, {\"sp\", {81,55,4}}, {\"sm\", {25,29,85}}, {\"sc\", {53,83,1}},\n    {\"rn\", {0,100,30}}, {\"cl\", {78,42,0}}, {\"mm\", {0,116,0}}, {\"pp\", {0,114,2}},\n    {\"mp\", {0,99,14}}, {\"rs\", {0,96,16}}, /*{\"q\", {52,57,1}},*/ {\"rl\", {0,97,7}},\n    {\"rg\", {0,81,15}}, {\"pl\", {56,39,0}}, {\"sn\", {32,62,1}}, {\"str\", {38,56,0}},\n    {\"dr\", {47,44,0}}, {\"fl\", {77,13,1}}, {\"fr\", {77,11,0}}, {\"ld\", {0,47,38}},\n    {\"ff\", {0,62,20}}, {\"lt\", {0,61,19}}, {\"rb\", {0,75,4}}, {\"mb\", {0,72,7}},\n    {\"rc\", {0,76,1}}, {\"gg\", {0,74,1}}, {\"pt\", {1,56,10}}, {\"bb\", {0,64,1}},\n    {\"sl\", {48,17,0}}, {\"dd\", {0,59,2}}, {\"gn\", {3,50,4}}, {\"rk\", {0,30,28}},\n    {\"nk\", {0,35,20}}, {\"gl\", {40,14,0}}, {\"wh\", {45,6,0}}, {\"ntr\", {0,50,0}},\n    {\"rv\", {0,47,1}}, {\"ght\", {0,19,29}}, {\"sk\", {23,17,5}}, {\"nf\", {0,46,0}},\n    {\"cc\", {0,45,0}}, {\"ln\", {0,41,0}}, {\"sw\", {36,4,0}}, {\"rp\", {0,36,4}},\n    {\"dn\", {0,38,0}}, {\"ps\", {14,19,5}}, {\"nv\", {0,38,0}}, {\"tch\", {0,21,16}},\n    {\"nch\", {0,26,11}}, {\"lv\", {0,35,0}}, {\"wn\", {0,14,21}}, {\"rf\", {0,32,3}},\n    {\"lm\", {0,30,5}}, {\"dg\", {0,34,0}}, {\"ft\", {0,18,15}}, {\"scr\", {23,10,0}},\n    {\"rch\", {0,24,6}}, {\"rth\", {0,23,7}}, {\"rh\", {13,15,0}}, {\"mpl\", {0,29,0}},\n    {\"cs\", {0,1,27}}, {\"gh\", {4,10,13}}, {\"ls\", {0,23,3}}, {\"ndr\", {0,25,0}},\n    {\"tl\", {0,23,1}}, {\"ngl\", {0,25,0}}, {\"lk\", {0,15,9}}, {\"rw\", {0,23,0}},\n    {\"lb\", {0,23,1}}, {\"tw\", {15,8,0}}, /*{\"sq\", {15,8,0}},*/ {\"chr\", {18,4,0}},\n    {\"dl\", {0,23,0}}, {\"ctr\", {0,22,0}}, {\"nst\", {0,21,0}}, {\"lc\", {0,22,0}},\n    {\"sch\", {16,4,0}}, {\"ths\", {0,1,20}}, {\"nl\", {0,21,0}}, {\"lf\", {0,15,6}},\n    {\"ssn\", {0,20,0}}, {\"xt\", {0,18,1}}, {\"xp\", {0,20,0}}, {\"rst\", {0,15,5}},\n    {\"nh\", {0,19,0}}, {\"wr\", {14,5,0}}\n};\nconst int VowelsNumber = sizeof(Vowels)/sizeof(Sound);\nconst int ConsonantsNumber = sizeof(Consonants)/sizeof(Sound);\nint VowelsRatesSum[3] = {0,0,0}, ConsonantsRatesSum[3] = {0,0,0};\n\nint CountRateSum(Sound sounds[], const int num, const int part)\n{\n    int sum = 0;\n    for(int i = 0; i < num; i++)\n        sum += sounds[i].rates[part];\n    return sum;\n}\n\nconst char *GetLetters(int type, const int part)\n{\n    Sound *sounds; int rate, i = 0;\n    if(type & 1)\n        sounds = Vowels, rate = rand() % VowelsRatesSum[part];\n    else\n        sounds = Consonants, rate = rand() % ConsonantsRatesSum[part];\n    do {\n        rate -= sounds[i++].rates[part];\n    } while(rate > 0);\n    return sounds[--i].chars;\n}\n\nstatic void CreateData() {\n    for(int i = 0; i < 3; i++) {\n        ConsonantsRatesSum[i] = CountRateSum(Consonants, ConsonantsNumber, i);\n        VowelsRatesSum[i] = CountRateSum(Vowels, VowelsNumber, i);\n    }\n    for( int i=0; i<N; ++i ) {\n        int type = rand();\n        Data[i] = GetLetters(type++, 0);\n        for( int j = 0; j < type%size_factor; ++j )\n            Data[i] += GetLetters(type++, 1);\n        Data[i] += GetLetters(type, 2);\n    }\n    MyString planet = Data[12]; planet[0] = toupper(planet[0]);\n    MyString helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);\n    helloworld += \", \"+Data[1]+\" \"+Data[2]+\" \"+Data[3]+\" \"+Data[4]+\" \"+Data[5];\n    if ( !silent ) printf(\"Message from planet '%s': %s!\\nAnalyzing whole text...\\n\", planet.c_str(), helloworld.c_str());\n}\n\nint main( int argc, char* argv[] ) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n        srand(2);\n\n        //! Working threads count\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads,0);\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(N,\"n-of-strings\",\"number of strings\")\n            .arg(verbose,\"verbose\",\"verbose mode\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            );\n\n        if ( silent ) verbose = false;\n\n        Data = new MyString[N];\n        CreateData();\n\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p)) {\n                if ( !silent ) printf(\"threads = %d  \", p );\n                task_scheduler_init init( p );\n                CountOccurrences( p );\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and parallel version\n            { // serial run\n                if ( !silent ) printf(\"serial run   \");\n                task_scheduler_init init_serial(1);\n                CountOccurrences(1);\n            }\n            { // parallel run (number of threads is selected automatically)\n                if ( !silent ) printf(\"parallel run \");\n                task_scheduler_init init_parallel;\n                CountOccurrences(0);\n            }\n        }\n\n        delete[] Data;\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_hash_map/count_strings/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Count_strings sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Count_strings sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe example counts the number of unique words in a text.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"count_strings.cpp\">count_strings.cpp</a>\n\t\t\t\t<dd>Source code for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\t\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). \n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only). \n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\t\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tGeneral build directions can be found <a href=\"../../index.html\">here</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>count_strings <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>count_strings [<i>n-of-threads</i>=value] [<i>n-of-strings</i>=value] [<i>verbose</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>count_strings [<i>n-of-threads</i> [<i>n-of-strings</i>]] [<i>verbose</i>] [<i>silent</i>] </tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-strings</i> is a number of strings.<br>\n\t\t\t\t\t<i>verbose</i> - enables printing of extra information during execution.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example.\n\t\t\t\t\t<br>Run it with a small number of strings and the desired number of threads, e.g., <tt>count_strings 2 10000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_hash_map/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on concurrent_hash_map container</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>concurrent_hash_map</code> container</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>concurrent_hash_map</code> container.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"count_strings/readme.html\">count_strings</a>\n\t\t\t\t<dd>Concurrently inserts strings into a <code>concurrent_hash_map</code> container.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_priority_queue/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on concurrent_priority_queue container</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>concurrent_priority_queue</code> container</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>concurrent_priority_queue</code> container.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"shortpath/readme.html\">shortpath</a>\n\t\t\t\t<dd>Solves the single source shortest path problem using a <code>concurrent_priority_queue</code> container.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_priority_queue/shortpath/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=shortpath\nARGS=4 N=1000 start=0 end=999 verbose\nPERF_RUN_ARGS=auto N=1000 start=0 end=99 silent\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_priority_queue/shortpath/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Shortpath sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Shortpath sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that solves the single source\n\t\tshortest path problem.\n\t<br><br>\n\t\tIt is parameterized by N, a number of nodes, and a start and end node in [0..N). \n\t\tA graph is generated with N nodes and some random number of connections between those nodes.\n\t\tA parallel algorithm based on A* is used to find the shortest path.\n\t<br><br>\n\t\tThis algorithm varies from serial A* in that it needs to add nodes back to\n\t\tthe open set when the g estimate (shortest path from start to the node) is improved, \n\t\teven if the node has already been \"visited\".  This is because nodes are added and removed \n\t\tfrom the open-set in parallel, resulting in some less optimal paths being explored.\n\t\tThe open-set is implemented with the concurrent_priority_queue.\n\t<br><br>\n\t\tNote that since we re-visit nodes, the <i>f</i> estimate (on which the priority queue is sorted)\n\t\tis not technically needed, so we could use this same parallel algorithm with just a concurrent_queue.\n\t\tHowever, keeping the <i>f</i> estimate and using <code>concurrent_priority_queue</code>\n\t\tresults in much better performance.\n\t<br><br>\n\t\tSilent mode prints run time only,\n\t\tregular mode prints the shortest path length, \n\t\tand verbose mode prints out the shortest path.\n\t<br><br>\n\t\tThe generated graph follows a pattern in which the closer two pairs of\n\t\tnode ids are together, the fewer hops there are in a typical path\n\t\tbetween those nodes. So, for example, the path between 5 and 7 likely\n\t\thas few hops whereas 14 to 78 has more and 0 to 9999 has even more,\n\t\tetc.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"shortpath.cpp\">shortpath.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains macOS* Xcode* workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>shortpath <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>shortpath [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>start</i>=value] [<i>end</i>=value] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print full path to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t\t<tt><i>N</i></tt> number of nodes in graph<br>\n\t\t\t\t\t<tt><i>start</i></tt> node to start path at<br>\n\t\t\t\t\t<tt><i>end</i></tt> node to end path at<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>shortpath&nbsp;4&nbsp;N=20&nbsp;start=0&nbsp;end=19</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/concurrent_priority_queue/shortpath/shortpath.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <vector>\n#include <math.h>\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_group.h\"\n#include \"tbb/concurrent_priority_queue.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range.h\"\n#include \"../../common/utility/utility.h\"\n#include \"../../common/utility/fast_random.h\"\n\n#if defined(_MSC_VER) && defined(_Wp64)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (disable: 4267)\n#endif /* _MSC_VER && _Wp64 */\n\nusing namespace std;\nusing namespace tbb;\n\nstruct point {\n    double x, y;\n    point() {}\n    point(double _x, double _y) : x(_x), y(_y) {}\n    point(const point& p) : x(p.x), y(p.y) {}\n};\n\ndouble get_distance(const point& p1, const point& p2) {\n    double xdiff=p1.x-p2.x, ydiff=p1.y-p2.y;\n    return sqrt(xdiff*xdiff + ydiff*ydiff);\n}\n\n// generates random points on 2D plane within a box of maxsize width & height\npoint generate_random_point(utility::FastRandom& mr) {\n    const size_t maxsize=500;\n    double x = (double)(mr.get() % maxsize);\n    double y = (double)(mr.get() % maxsize);\n    return point(x,y);\n}\n\n// weighted toss makes closer nodes (in the point vector) heavily connected\nbool die_toss(size_t a, size_t b, utility::FastRandom& mr) {\n    int node_diff = std::abs((int)(a-b));\n    // near nodes\n    if (node_diff < 16) return true;\n    // mid nodes\n    if (node_diff < 64) return ((int)mr.get() % 8 == 0);\n    // far nodes\n    if (node_diff < 512) return ((int)mr.get() % 16 == 0);\n    return false;\n}\n\ntypedef vector<point> point_set;\ntypedef size_t vertex_id;\ntypedef std::pair<vertex_id,double> vertex_rec;\ntypedef vector<vector<vertex_id> > edge_set;\n\nbool verbose = false;          // prints bin details and other diagnostics to screen\nbool silent = false;           // suppress all output except for time\nsize_t N = 1000;               // number of vertices\nsize_t src = 0;                // start of path\nsize_t dst = N-1;              // end of path\ndouble INF=100000.0;           // infinity\nsize_t grainsize = 16;         // number of vertices per task on average\nsize_t max_spawn;              // max tasks to spawn\ntbb::atomic<size_t> num_spawn;      // number of active tasks\n\npoint_set vertices;            // vertices\nedge_set edges;                // edges\nvector<vertex_id> predecessor; // for recreating path from src to dst\n\nvector<double> f_distance;     // estimated distances at particular vertex\nvector<double> g_distance;     // current shortest distances from src vertex\nspin_mutex    *locks;          // a lock for each vertex\ntask_group *sp_group;          // task group for tasks executing sub-problems\n\nclass compare_f {\npublic:\n    bool operator()(const vertex_rec& u, const vertex_rec& v) const {\n        return u.second>v.second;\n    }\n};\n\nconcurrent_priority_queue<vertex_rec, compare_f> open_set; // tentative vertices\n\nvoid shortpath_helper();\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass shortpath_helper_functor {\npublic:\n    shortpath_helper_functor() {};\n    void operator() () const { shortpath_helper(); }\n};\n#endif\n\nvoid shortpath() {\n    sp_group = new task_group;\n    g_distance[src] = 0.0; // src's distance from src is zero\n    f_distance[src] = get_distance(vertices[src], vertices[dst]); // estimate distance from src to dst\n    open_set.push(make_pair(src,f_distance[src])); // push src into open_set\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    sp_group->run([](){ shortpath_helper(); });\n#else\n    sp_group->run( shortpath_helper_functor() );\n#endif\n    sp_group->wait();\n    delete sp_group;\n}\n\nvoid shortpath_helper() {\n    vertex_rec u_rec;\n    while (open_set.try_pop(u_rec)) {\n        vertex_id u = u_rec.first;\n        if (u==dst) continue;\n        double f = u_rec.second;\n        double old_g_u = 0.0;\n        {\n            spin_mutex::scoped_lock l(locks[u]);\n            if (f > f_distance[u]) continue; // prune search space\n            old_g_u = g_distance[u];\n        }\n        for (size_t i=0; i<edges[u].size(); ++i) {\n            vertex_id v = edges[u][i];\n            double new_g_v = old_g_u + get_distance(vertices[u], vertices[v]);\n            double new_f_v = 0.0;\n            // the push flag lets us move some work out of the critical section below\n            bool push = false;\n            {\n                spin_mutex::scoped_lock l(locks[v]);\n                if (new_g_v < g_distance[v]) {\n                    predecessor[v] = u;\n                    g_distance[v] = new_g_v;\n                    new_f_v = f_distance[v] = g_distance[v] + get_distance(vertices[v], vertices[dst]);\n                    push = true;\n                }\n            }\n            if (push) {\n                open_set.push(make_pair(v,new_f_v));\n                size_t n_spawn = ++num_spawn;\n                if (n_spawn < max_spawn) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                    sp_group->run([]{ shortpath_helper(); });\n#else\n                    sp_group->run( shortpath_helper_functor() );\n#endif\n                }\n                else --num_spawn;\n            }\n        }\n    }\n    --num_spawn;\n}\n\nvoid make_path(vertex_id src, vertex_id dst, vector<vertex_id>& path) {\n    vertex_id at = predecessor[dst];\n    if (at == N) path.push_back(src);\n    else if (at == src) { path.push_back(src); path.push_back(dst); }\n    else { make_path(src, at, path); path.push_back(dst); }\n}\n\nvoid print_path() {\n    vector<vertex_id> path;\n    double path_length=0.0;\n    make_path(src, dst, path);\n    if (verbose) printf(\"\\n      \");\n    for (size_t i=0; i<path.size(); ++i) {\n        if (path[i] != dst) {\n            double seg_length = get_distance(vertices[path[i]], vertices[path[i+1]]);\n            if (verbose) printf(\"%6.1f       \", seg_length);\n            path_length += seg_length;\n        }\n        else if (verbose) printf(\"\\n\");\n    }\n    if (verbose) {\n        for (size_t i=0; i<path.size(); ++i) {\n            if (path[i] != dst) printf(\"(%4d)------>\", (int)path[i]);\n            else printf(\"(%4d)\\n\", (int)path[i]);\n        }\n    }\n    if (verbose) printf(\"Total distance = %5.1f\\n\", path_length);\n    else if (!silent) printf(\" %5.1f\\n\", path_length);\n}\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass gen_vertices {\npublic:\n    gen_vertices() {}\n    void operator() (blocked_range<size_t>& r) const {\n        utility::FastRandom my_random((unsigned int)r.begin());\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            vertices[i] = generate_random_point(my_random);\n        }\n    }\n};\n\nclass gen_edges {\npublic:\n    gen_edges() {}\n    void operator() (blocked_range<size_t>& r) const {\n        utility::FastRandom my_random((unsigned int)r.begin());\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            for (size_t j=0; j<i; ++j) {\n                if (die_toss(i, j, my_random))\n                    edges[i].push_back(j);\n            }\n        }\n    }\n};\n\nclass reset_vertices {\npublic:\n    reset_vertices() {}\n    void operator() (blocked_range<size_t>& r) const {\n        for (size_t i=r.begin(); i!=r.end(); ++i) {\n            f_distance[i] = g_distance[i] = INF;\n            predecessor[i] = N;\n        }\n    }\n};\n#endif\n\nvoid InitializeGraph() {\n    task_scheduler_init init(get_default_num_threads());\n    vertices.resize(N);\n    edges.resize(N);\n    predecessor.resize(N);\n    g_distance.resize(N);\n    f_distance.resize(N);\n    locks = new spin_mutex[N];\n    if (verbose) printf(\"Generating vertices...\\n\");\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N,64),\n                 [&](blocked_range<size_t>& r) {\n                     utility::FastRandom my_random(r.begin());\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         vertices[i] = generate_random_point(my_random);\n                     }\n                 }, simple_partitioner());\n#else\n    parallel_for(blocked_range<size_t>(0,N,64), gen_vertices(), simple_partitioner());\n#endif\n    if (verbose) printf(\"Generating edges...\\n\");\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N,64),\n                 [&](blocked_range<size_t>& r) {\n                     utility::FastRandom my_random(r.begin());\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         for (size_t j=0; j<i; ++j) {\n                             if (die_toss(i, j, my_random))\n                                 edges[i].push_back(j);\n                         }\n                     }\n                 }, simple_partitioner());\n#else\n    parallel_for(blocked_range<size_t>(0,N,64), gen_edges(), simple_partitioner());\n#endif\n    for (size_t i=0; i<N; ++i) {\n        for (size_t j=0; j<edges[i].size(); ++j) {\n            vertex_id k = edges[i][j];\n            edges[k].push_back(i);\n        }\n    }\n    if (verbose) printf(\"Done.\\n\");\n}\n\nvoid ReleaseGraph() {\n    delete []locks;\n}\n\nvoid ResetGraph() {\n    task_scheduler_init init(get_default_num_threads());\n#if __TBB_CPP11_LAMBDAS_PRESENT\n    parallel_for(blocked_range<size_t>(0,N),\n                 [&](blocked_range<size_t>& r) {\n                     for (size_t i=r.begin(); i!=r.end(); ++i) {\n                         f_distance[i] = g_distance[i] = INF;\n                         predecessor[i] = N;\n                     }\n                 });\n#else\n    parallel_for(blocked_range<size_t>(0,N), reset_vertices());\n#endif\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n                                     .arg(N,\"N\",\"         number of vertices\")\n                                     .arg(src,\"start\",\"      start of path\")\n                                     .arg(dst,\"end\",\"        end of path\")\n        );\n        if (silent) verbose = false;  // make silent override verbose\n        else\n            printf(\"shortpath will run with %d vertices to find shortest path between vertices\"\n                   \" %d and %d using %d:%d threads.\\n\",\n                   (int)N, (int)src, (int)dst, (int)threads.first, (int)threads.last);\n\n        if (dst >= N) {\n            if (verbose)\n                printf(\"end value %d is invalid for %d vertices; correcting to %d\\n\", (int)dst, (int)N, (int)N-1);\n            dst = N-1;\n        }\n\n        num_spawn = 0;\n        max_spawn = N/grainsize;\n        tick_count t0, t1;\n        InitializeGraph();\n        for (int n_thr=threads.first; n_thr<=threads.last; n_thr=threads.step(n_thr)) {\n            ResetGraph();\n            task_scheduler_init init(n_thr);\n            t0 = tick_count::now();\n            shortpath();\n            t1 = tick_count::now();\n            if (!silent) {\n                if (predecessor[dst] != N) {\n                    printf(\"%d threads: [%6.6f] The shortest path from vertex %d to vertex %d is:\",\n                           (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);\n                    print_path();\n                }\n                else {\n                    printf(\"%d threads: [%6.6f] There is no path from vertex %d to vertex %d\\n\",\n                           (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst);\n                }\n            } else\n                utility::report_elapsed_time((t1-t0).seconds());\n        }\n        ReleaseGraph();\n        return 0;\n    } catch(std::exception& e) {\n        cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/binpack/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=binpack\nARGS=4 N=1000\nPERF_RUN_ARGS=auto N=1000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # which icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/binpack/binpack.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n/* Bin-packing algorithm that attempts to use minimal number of bins B of\n   size V to contain N items of varying sizes. */\n\n#include <string>\n#include <iostream>\n#include <cmath>\n#include <vector>\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"../../common/utility/utility.h\"\n\nusing tbb::tick_count;\nusing tbb::task_scheduler_init;\nusing namespace tbb::flow;\n\ntypedef size_t size_type;             // to represent non-zero indices, capacities, etc.\ntypedef size_t value_type;            // the type of items we are attempting to pack into bins\ntypedef std::vector<value_type> bin;  // we use a simple vector to represent a bin\n// Our bin packers will be function nodes in the graph that take value_type items and\n// return a dummy value.  They will also implicitly send packed bins to the bin_buffer\n// node, and unused items back to the value_pool node:\ntypedef multifunction_node<value_type, tuple<value_type, bin>, rejecting> bin_packer;\n// Items are placed into a pool that all bin packers grab from, represent by a queue_node:\ntypedef queue_node<value_type> value_pool;\n// Packed bins are placed in this buffer waiting to be serially printed and/or accounted for:\ntypedef buffer_node<bin> bin_buffer;\n// Packed bins are taken from the_bin_buffer and processed by the_writer:\ntypedef function_node<bin, continue_msg, rejecting> bin_writer;\n// Items are injected into the graph when this node sends them to the_value_pool:\ntypedef source_node<value_type> value_source;\n\n// User-specified globals with default values\nsize_type V = 42;                // desired capacity for each bin\nsize_type N = 1000;              // number of elements to generate\nbool verbose = false;            // prints bin details and other diagnostics to screen\nbool silent = false;             // suppress all output except for time\nint num_bin_packers=-1;          // number of concurrent bin packers in operation; default is #threads;\n                                 // larger values can result in more bins at less than full capacity\nsize_type optimality=1;          // 1 (default) is highest the algorithm can obtain; larger numbers run faster\n\n// Calculated globals\nsize_type min_B;                 // lower bound on the optimal number of bins\nsize_type B;                     // the answer, i.e. number of bins used by the algorithm\nsize_type *input_array;          // stores randomly generated input values\nvalue_type item_sum;             // sum of all randomly generated input values\ntbb::atomic<value_type> packed_sum;   // sum of all values currently packed into all bins\ntbb::atomic<size_type> packed_items;  // number of values currently packed into all bins\ntbb::atomic<size_type> active_bins;   // number of active bin_packers\nbin_packer **bins;               // the array of bin packers\n\n// This class is the Body type for bin_packer\nclass bin_filler {\n    typedef bin_packer::output_ports_type ports_type;\n    bin my_bin;                   // the current bin that this bin_filler is packing\n    size_type my_used;            // capacity of bin used by current contents (not to be confused with my_bin.size())\n    size_type relax, relax_val;   // relaxation counter for determining when to settle for a non-full bin\n    bin_packer* my_bin_packer;    // ptr to the bin packer that this body object is associated with\n    size_type bin_index;          // index of the encapsulating bin packer in the global bins array\n    value_type looking_for;       // the minimum size of item this bin_packer will accept\n    value_pool* the_value_pool;   // the queue of incoming values\n    bool done;                    // flag to indicate that this binpacker has been deactivated\n public:\n    bin_filler(size_t bidx, value_pool* _q) :\n        my_used(0), relax(0), relax_val(0), my_bin_packer(NULL), bin_index(bidx), looking_for(V), the_value_pool(_q), done(false) {}\n    void operator()(const value_type& item, ports_type& p) {\n        if (!my_bin_packer) my_bin_packer = bins[bin_index];\n        if (done) get<0>(p).try_put(item); // this bin_packer is done packing items; put item back to pool\n        else if (item > V) { // signal that packed_sum has reached item_sum at some point\n            size_type remaining = active_bins--;\n            if (remaining == 1 && packed_sum == item_sum) { // this is the last bin and it has seen everything\n                // this bin_packer may not have seen everything, so stay active\n                if (my_used>0) get<1>(p).try_put(my_bin);\n                my_bin.clear();\n                my_used = 0;\n                looking_for = V;\n                ++active_bins;\n            }\n            else if (remaining == 1) { // this is the last bin, but there are remaining items\n                get<0>(p).try_put(V+1); // send out signal\n                ++active_bins;\n            }\n            else if (remaining > 1) { // this is not the last bin; deactivate\n                if (my_used < V/(1+optimality*.1)) { // this bin is ill-utilized; throw back items and deactivate\n                    packed_sum -= my_used;\n                    packed_items -= my_bin.size();\n                    for (size_type i=0; i<my_bin.size(); ++i)\n                        get<0>(p).try_put(my_bin[i]);\n                    the_value_pool->remove_successor(*my_bin_packer); // deactivate\n                    done = true;\n                    get<0>(p).try_put(V+1); // send out signal\n                }\n                else { // this bin is well-utilized; send out bin and deactivate\n                    the_value_pool->remove_successor(*my_bin_packer); // build no more bins\n                    done = true;\n                    if (my_used>0) get<1>(p).try_put(my_bin);\n                    get<0>(p).try_put(V+1); // send out signal\n                }\n            }\n        }\n        else if (item <= V-my_used && item >= looking_for) { // this item can be packed\n            my_bin.push_back(item);\n            my_used += item;\n            packed_sum += item;\n            ++packed_items;\n            looking_for = V-my_used;\n            relax = 0;\n            if (packed_sum == item_sum) {\n                get<0>(p).try_put(V+1); // send out signal\n            }\n            if (my_used == V) {\n                get<1>(p).try_put(my_bin);\n                my_bin.clear();\n                my_used = 0;\n                looking_for = V;\n            }\n        }\n        else { // this item can't be packed; relax constraints\n            ++relax;\n            if (relax >= (N-packed_items)/optimality) { // this bin_packer has looked through enough items\n                relax = 0;\n                --looking_for; // accept a wider range of items\n                if (looking_for == 0 && my_used < V/(1+optimality*.1) && my_used > 0 && active_bins > 1) {\n                    // this bin_packer is ill-utilized and can't find items; deactivate and throw back items\n                    size_type remaining = active_bins--;\n                    if (remaining > 1) { // not the last bin_packer\n                        the_value_pool->remove_successor(*my_bin_packer); // deactivate\n                        done = true;\n                    }\n                    else active_bins++; // can't deactivate last bin_packer\n                    packed_sum -= my_used;\n                    packed_items -= my_bin.size();\n                    for (size_type i=0; i<my_bin.size(); ++i)\n                        get<0>(p).try_put(my_bin[i]);\n                    my_bin.clear();\n                    my_used = 0;\n                }\n                else if (looking_for == 0 && (my_used >= V/(1+optimality*.1) || active_bins == 1)) {\n                    // this bin_packer can't find items but is well-utilized, so send it out and reset\n                    get<1>(p).try_put(my_bin);\n                    my_bin.clear();\n                    my_used = 0;\n                    looking_for = V;\n                }\n            }\n            get<0>(p).try_put(item); // put unused item back to pool\n        }\n    }\n};\n\n// source node uses this to send the values to the value_pool\nclass item_generator {\n    size_type counter;\npublic:\n    item_generator() : counter(0) {}\n    bool operator()(value_type& m) {\n        if (counter<N) {\n            m = input_array[counter];\n            ++counter;\n            return true;\n        }\n        return false;\n    }\n};\n\n// the terminal function_node uses this to gather stats and print bin information\nclass bin_printer {\n    value_type running_count;\n    size_type item_count;\n    value_type my_min, my_max;\n    double avg;\npublic:\n    bin_printer() : running_count(0), item_count(0), my_min(V), my_max(0), avg(0) {}\n    continue_msg operator()(bin b) {\n        value_type sum=0;\n        ++B;\n        if (verbose)\n            std::cout << \"[ \";\n        for (size_type i=0; i<b.size(); ++i) {\n            if (verbose)\n                std::cout << b[i] << \" \";\n            sum+=b[i];\n            ++item_count;\n        }\n        if (sum < my_min) my_min = sum;\n        if (sum > my_max) my_max = sum;\n        avg += sum;\n        running_count += sum;\n        if (verbose)\n        std::cout << \"]=\" << sum << \"; Done/Packed/Total cap: \" << running_count << \"/\" << packed_sum << \"/\" << item_sum\n             << \" items:\" << item_count << \"/\" << packed_items << \"/\" << N << \" B=\" << B << std::endl;\n        if (item_count == N) { // should be the last; print stats\n            avg = avg/(double)B;\n            if (!silent)\n                std::cout << \"SUMMARY: #Bins used: \" << B << \"; Avg size: \" << avg << \"; Max size: \" << my_max\n                     << \"; Min size: \" << my_min << \"\\n         Lower bound on optimal #bins: \" << min_B\n                     << \"; Start #bins: \" << num_bin_packers << std::endl;\n        }\n        return continue_msg();  // need to return something\n    }\n};\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n                                     .arg(N,\"N\",\"         number of values to pack\")\n                                     .arg(V,\"V\",\"         capacity of each bin\")\n                                     .arg(num_bin_packers,\"#packers\",\"  number of concurrent bin packers to use \"\n                                          \"(default=#threads)\")\n                                     .arg(optimality,\"optimality\",\"controls optimality of solution; 1 is highest, use\\n\"\n                                          \"              larger numbers for less optimal but faster solution\")\n        );\n\n        if (silent) verbose = false;  // make silent override verbose\n        // Generate random input data\n        srand(42);\n        input_array = new value_type[N];\n        item_sum = 0;\n        for (size_type i=0; i<N; ++i) {\n            input_array[i] = rand() % V + 1;  // generate items that fit in a bin\n            item_sum += input_array[i];\n        }\n        min_B = (item_sum % V) ? item_sum/V + 1 : item_sum/V;\n\n        tick_count start = tick_count::now();\n        for(int p = threads.first; p <= threads.last; p = threads.step(p)) {\n            task_scheduler_init init(p);\n            packed_sum = 0;\n            packed_items = 0;\n            B = 0;\n            if (num_bin_packers == -1) num_bin_packers = p;\n            active_bins = num_bin_packers;\n            if (!silent)\n                std::cout << \"binpack running with \" << item_sum << \" capacity over \" << N << \" items, optimality=\"\n                     << optimality << \", \" << num_bin_packers << \" bins of capacity=\" << V << \" on \" << p\n                     << \" threads.\\n\";\n            graph g;\n            value_source the_source(g, item_generator(), false);\n            value_pool the_value_pool(g);\n            make_edge(the_source, the_value_pool);\n            bin_buffer the_bin_buffer(g);\n            bins = new bin_packer*[num_bin_packers];\n            for (int i=0; i<num_bin_packers; ++i) {\n                bins[i] = new bin_packer(g, 1, bin_filler(i, &the_value_pool));\n                make_edge(the_value_pool, *(bins[i]));\n                make_edge(output_port<0>(*(bins[i])), the_value_pool);\n                make_edge(output_port<1>(*(bins[i])), the_bin_buffer);\n            }\n            bin_writer the_writer(g, 1, bin_printer());\n            make_edge(the_bin_buffer, the_writer);\n            the_source.activate();\n            g.wait_for_all();\n            for (int i=0; i<num_bin_packers; ++i) {\n                delete bins[i];\n            }\n            delete[] bins;\n        }\n        utility::report_elapsed_time((tick_count::now() - start).seconds());\n        delete[] input_array;\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/binpack/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Binpack sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Binpack sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple tbb::flow example that performs \n\t\tbinpacking of N integer values into a near-optimal number of bins\n\t\tof capacity V.\n\t<br><br>\n\t\tIt features a source_node which passes randomly\n\t\tgenerated integer values of size&lt;=V to a queue_node. Multiple\n\t\tfunction_nodes set about taking values from this queue_node and \n\t\tpacking them into bins according to a best-fit policy. Items that\n\t\tcannot be made to fit are rejected and returned to the queue. When \n\t\ta bin is packed as well as it can be, it is passed to a buffer_node\n\t\twhere it waits to be picked up by another function_node.  This final\n\t\tfunction nodes gathers stats about the bin and optionally prints its\n\t\tcontents. When all bins are accounted for, it optionally prints a \n\t\tsummary of the quality of the bin-packing.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"binpack.cpp\">binpack.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>binpack <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>binpack [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>N</i>=value] [<i>V</i>=value] [<i>#packers</i>=value] [<i>optimality</i>=value] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>] where low and optional high are non-negative integers, or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print diagnostic output to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t\t<tt><i>N</i></tt> number of values to pack<br>\n\t\t\t\t\t<tt><i>V</i></tt> capacity of each bin<br>\n\t\t\t\t\t<tt><i>#packers</i></tt> number of concurrent bin packers to use (default=#threads)<br>\n\t\t\t\t\t<tt><i>optimality</i></tt> controls optimality of solution; 1 is highest, use larger numbers for less optimal but faster solution<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>binpack&nbsp;4&nbsp;N=100</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/cholesky/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=cholesky\nARGS=4 2\n\n# The C++ compiler\nifneq (,$(shell which icpc 2>/dev/null))\nCXX=icpc\nendif # which icpc\n\nifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib  -Wl,-rpath,$(MKLROOT)/lib\n# MKL support\noverride MKL_LIBS += -lmkl_core -lmkl_sequential -lmkl_intel\nelse\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nendif\n# MKL support\noverride MKL_LIBS += -lmkl_rt\nendif\n\n# C++0x support\noverride CXXFLAGS += -std=c++0x\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2  -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(MKL_LIBS) $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(MKL_LIBS) $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/cholesky/cholesky.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <string>\n#include <cstring>\n#include <cstdio>\n#include <cmath>\n#include <vector>\n#include <map>\n\n#include \"mkl_lapack.h\"\n#include \"mkl.h\"\n\n#include \"tbb/tbb_config.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n// Application command line arguments parsing\n#include \"../../common/utility/utility.h\"\n\n/************************************************************\n FORWARD DECLARATIONS\n************************************************************/\n\n/**********************************************\n Read or generate a positive-definite matrix\n -- reads from file if fname != NULL\n     -- sets n to matrix size\n     -- allocates and reads values in to A\n -- otherwise generates a matrix\n     -- uses n to determine size\n     -- allocates and generates values in to A\n**********************************************/\nvoid matrix_init( double * &A, int &n, const char *fname );\n\n/**********************************************\n Writes a lower triangular matrix to a file\n -- first line of file is n \n -- subsequently 1 row per line\n**********************************************/\nvoid matrix_write ( double *A, int n, const char *fname, bool is_triangular = false );\n\n/************************************************************\n GLOBAL VARIABLES\n************************************************************/\nbool g_benchmark_run = false;\nint g_num_tbb_threads = tbb::task_scheduler_init::default_num_threads();\nint g_n = -1, g_b = -1, g_num_trials = 1;\nchar *g_input_file_name = NULL;\nchar *g_output_prefix = NULL;\nstd::string g_alg_name;\n\n// Creates tiled array\nstatic double ***create_tile_array( double *A, int n, int b ) {\n    const int p = n/b;\n    double ***tile = (double ***)calloc( sizeof( double ** ), p );\n\n    for ( int j = 0; j < p; ++j ) {\n        tile[j] = (double **)calloc( sizeof( double * ), p );\n    }\n\n    for ( int j = 0; j < p; ++j ) {\n        for ( int i = 0; i < p; ++i ) {\n            double *temp_block = (double *)calloc( sizeof( double ), b*b );\n\n            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {\n                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {\n                    temp_block[T_j*b+T_i] = A[A_j*n+A_i];\n                }\n            }\n\n            tile[j][i] = temp_block;\n        }\n    }\n    return tile;\n}\n\nstatic void collapse_tile_array( double ***tile, double *A, int n, int b ) {\n    const int p = n/b;\n\n    for ( int j = 0; j < p; ++j ) {\n        for ( int i = 0; i < p; ++i ) {\n            double *temp_block = tile[j][i];\n\n            for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) {\n                for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) {\n                    A[A_j*n+A_i] = temp_block[T_j*b+T_i];\n                }\n            }\n\n            free( temp_block );\n            tile[j][i] = NULL;\n        }\n\n        free( tile[j] );\n    }\n\n    free( tile );\n}\n\n/************************************************************\n Helper base class: algorithm\n************************************************************/\nclass algorithm {\n\n    std::string name;\n    bool is_tiled;\n\n    bool check_if_valid( double *A0, double *C, double *A, int n ) {\n        char transa = 'n', transb = 't';\n        double alpha = 1;\n        double beta = 0;\n\n        for ( int i = 0; i < n; ++i ) {\n            for ( int j = i+1; j < n; ++j ) {\n                A0[j*n+i] = 0.;\n            }\n        }\n\n        dgemm ( &transa, &transb, &n, &n, &n, &alpha, A0, &n, A0, &n, &beta, C, &n );\n\n        for ( int j = 0; j < n; ++j ) {\n            for ( int i = 0; i < n; ++i ) {\n                const double epsilon = std::abs( A[j*n+i]*0.1 );\n\n                if ( std::abs( C[j*n+i] - A[j*n+i] ) > epsilon ) {\n                    printf( \"ERROR: %s did not validate at C(%d,%d) = %lf != A(%d,%d) = %lf\\n\",\n                        name.c_str(), i, j, C[j*n+i], i, j, A[j*n+i] );\n                    printf( \"ERROR: %g; %g < %g < %g\\n\", epsilon, A[j*n+i] - epsilon, C[j*n+i], A[j*n+i] + epsilon );\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\npublic:\n    algorithm( const std::string& alg_name, bool t ) : name(alg_name), is_tiled(t) {}\n\n    double operator() ( double *A, int n, int b, int trials ) {\n        tbb::tick_count t0, t1;\n        double elapsed_time = 0.0;\n        double *A0 = (double *)calloc( sizeof( double ), n*n );\n        double *C = (double *)calloc( sizeof( double ), n*n );\n\n        for ( int t = 0; t < trials+1; ++t ) {\n            if ( is_tiled ) {\n                double ***tile = create_tile_array( A, n, b );\n                t0 = tbb::tick_count::now();\n                func( tile, n, b );\n                t1 = tbb::tick_count::now();\n\n                collapse_tile_array( tile, A0, n, b );\n            }\n            else {\n                memcpy( A0, A, sizeof( double )*n*n );\n                t0 = tbb::tick_count::now();\n                func( A0, n, b );\n                t1 = tbb::tick_count::now();\n            }\n\n            if ( t ) elapsed_time += (t1-t0).seconds();\n\n            if( !g_benchmark_run && !check_if_valid( A0, C, A, n ) ) {\n                if ( g_output_prefix ) {\n                    std::string s( g_output_prefix );\n                    s += \"_\" + name + \".txt\";\n                    matrix_write( A0, g_n, s.c_str(), true );\n                    free( A0 );\n                    free( C );\n                    return 0.;\n                }\n            }\n        }\n\n        if ( g_output_prefix ) {\n            std::string s( g_output_prefix );\n            s += \"_\" + name + \".txt\";\n            matrix_write( A0, g_n, s.c_str(), true );\n        }\n\n        printf( \"%s %d %d %d %d %lf %lf\\n\", name.c_str(), g_num_tbb_threads, trials, n, b, elapsed_time, elapsed_time/trials );\n        free( A0 );\n        free( C );\n        return elapsed_time;\n    }\n\nprotected:\n    // Main algorithm body function must be defined in any direved class\n    virtual void func( void * ptr, int n, int b ) = 0;\n};\n\n/***********************************************************/\n\nstatic void call_dpotf2( double ***tile, int b, int k ) {\n    double *A_block = tile[k][k];\n    char uplo = 'l';\n    int info = 0;\n    dpotf2( &uplo, &b, A_block, &b, &info ); \n    return;\n}\n\nstatic void call_dtrsm( double ***tile, int b, int k, int j ) {\n    double *A_block = tile[k][j];\n    double *L_block = tile[k][k];\n    char uplo = 'l', side = 'r', transa = 't', diag = 'n';\n    double alpha = 1;\n    dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b );\n    return;\n}\n\nstatic void call_dsyr2k( double ***tile, int b, int k, int j, int i ) {\n    double *A_block = tile[i][j];\n    char transa = 'n', transb = 't';\n    char uplo = 'l';\n    double alpha = -1;\n    double beta = 1;\n\n    if ( i == j ) {   // Diagonal block\n        double *L_block = tile[k][i];\n        dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );\n    } else {   // Non-diagonal block\n        double *L2_block = tile[k][i];\n        double *L1_block = tile[k][j];\n        dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );\n    }\n    return;\n}\n\nclass algorithm_crout : public algorithm\n{\npublic:\n    algorithm_crout() : algorithm(\"crout_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        double ***tile = (double ***)ptr;\n        const int p = n/b;\n\n        for ( int k = 0; k < p; ++k ) {\n            call_dpotf2( tile, b, k );\n\n            for ( int j = k+1; j < p; ++j ) {\n                call_dtrsm( tile, b, k, j );\n\n                for ( int i = k+1; i <= j; ++i ) {\n                    call_dsyr2k( tile, b, k, j, i );\n                }\n            }\n        }\n    }\n};\n\nclass algorithm_dpotrf : public algorithm\n{\npublic:\n    algorithm_dpotrf() : algorithm(\"dpotrf_cholesky\", false) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int /* b */ ) {\n        double *A = (double *)ptr;\n        int lda = n;\n        int info = 0;\n        char uplo = 'l';\n        dpotrf( &uplo, &n, A, &lda, &info );\n    }\n};\n\n/************************************************************\n Begin data join graph based version of cholesky\n************************************************************/\n\ntypedef union {\n    char a[4];\n    size_t tag;\n} tag_t;\n\ntypedef double * tile_t;\n\ntypedef std::pair< tag_t, tile_t > tagged_tile_t;\ntypedef tbb::flow::tuple< tagged_tile_t > t1_t;\ntypedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t > t2_t;\ntypedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t, tagged_tile_t > t3_t;\n\ntypedef tbb::flow::multifunction_node< tagged_tile_t, t1_t > dpotf2_node_t;\ntypedef tbb::flow::multifunction_node< t2_t, t2_t > dtrsm_node_t;\ntypedef tbb::flow::multifunction_node< t3_t, t3_t > dsyr2k_node_t;\n\ntypedef tbb::flow::join_node< t2_t, tbb::flow::tag_matching > dtrsm_join_t;\ntypedef tbb::flow::join_node< t3_t, tbb::flow::tag_matching > dsyr2k_join_t;\n\nclass dpotf2_body {\n    int p;\n    int b;\npublic:\n    dpotf2_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const tagged_tile_t &in, dpotf2_node_t::output_ports_type &ports ) {\n        int k = in.first.a[0];\n        tile_t A_block = in.second;\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = k;\n        char uplo = 'l';\n        int info = 0;\n        dpotf2( &uplo, &b, A_block, &b, &info );\n\n        // Send to dtrsms in same column\n        // k == k  j == k \n        t.a[2] = k;\n        for ( int j = k+1; j < p; ++j ) {\n            t.a[1] = j;\n            tbb::flow::get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n    }\n};\n\nclass dtrsm_body {\n    int p;\n    int b;\npublic:\n    dtrsm_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const t2_t &in, dtrsm_node_t::output_ports_type &ports ) {\n        using tbb::flow::get;\n\n        tagged_tile_t in0 = get<0>( in );\n        tagged_tile_t in1 = get<1>( in );\n        int k = in0.first.a[0];\n        int j = in0.first.a[1];\n        tile_t L_block = in0.second;\n        tile_t A_block = in1.second;\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = k;\n        char uplo = 'l', side = 'r', transa = 't', diag = 'n';\n        double alpha = 1;\n        dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b);\n\n        // Send to rest of my row\n        t.a[1] = j;\n        for ( int i = k+1; i <= j; ++i ) {\n            t.a[2] = i;\n            get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n\n        // Send to transposed row\n        t.a[2] = j;\n        for ( int i = j; i < p; ++i ) {\n            t.a[1] = i;\n            get<1>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n    }\n};\n\nclass dsyr2k_body {\n    int p;\n    int b;\npublic:\n    dsyr2k_body( int p_, int b_ ) : p(p_), b(b_) {}\n\n    void operator()( const t3_t &in, dsyr2k_node_t::output_ports_type &ports ) {\n        using tbb::flow::get;\n\n        tag_t t;\n        t.tag = 0;\n        char transa = 'n', transb = 't';\n        char uplo = 'l';\n        double alpha = -1;\n        double beta = 1;\n\n        tagged_tile_t in0 = get<0>( in );\n        tagged_tile_t in1 = get<1>( in );\n        tagged_tile_t in2 = get<2>( in );\n        int k = in2.first.a[0];\n        int j = in2.first.a[1];\n        int i = in2.first.a[2];\n\n        tile_t A_block = in2.second; \n        if ( i == j ) {   // Diagonal block\n            tile_t L_block = in0.second;\n            dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b );\n        } else {   // Non-diagonal block\n            tile_t L1_block = in0.second;\n            tile_t L2_block = in1.second;\n            dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b );\n        }\n\n        // All outputs flow to next step\n        t.a[0] = k+1;\n        t.a[1] = j;\n        t.a[2] = i;\n        if ( k != p-1 && j == k+1 && i == k+1 ) {\n            get<0>( ports ).try_put( std::make_pair( t, A_block ) );\n        }\n\n        if ( k < p-2 ) {\n            if ( i == k+1 && j > i ) {\n                t.a[0] = k+1;\n                t.a[1] = j;\n                get<1>( ports ).try_put( std::make_pair( t, A_block ) );\n            }\n\n            if ( j != k+1 && i != k+1 ) {\n                t.a[0] = k+1;\n                t.a[1] = j;\n                t.a[2] = i;\n                get<2>( ports ).try_put( std::make_pair( t, A_block ) );\n            }\n        }\n    }\n};\n\nstruct tagged_tile_to_size_t {\n    size_t operator()( const tagged_tile_t &t ) {\n        return t.first.tag;\n    }\n};\n\nclass algorithm_join : public algorithm\n{\npublic:\n    algorithm_join() : algorithm(\"data_join_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        using tbb::flow::unlimited;\n        using tbb::flow::output_port;\n        using tbb::flow::input_port;\n\n        double ***tile = (double ***)ptr;\n        const int p = n/b;\n        tbb::flow::graph g;\n\n        dpotf2_node_t dpotf2_node( g, unlimited, dpotf2_body(p, b) );\n        dtrsm_node_t dtrsm_node( g, unlimited, dtrsm_body(p, b) );\n        dsyr2k_node_t dsyr2k_node( g, unlimited, dsyr2k_body(p, b) );\n        dtrsm_join_t dtrsm_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t() );\n        dsyr2k_join_t dsyr2k_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t(), tagged_tile_to_size_t() );\n\n        make_edge( output_port<0>( dsyr2k_node ), dpotf2_node );\n\n        make_edge( output_port<0>( dpotf2_node ), input_port<0>( dtrsm_join ) );\n        make_edge( output_port<1>( dsyr2k_node ), input_port<1>( dtrsm_join ) );\n        make_edge( dtrsm_join, dtrsm_node );\n\n        make_edge( output_port<0>( dtrsm_node ), input_port<0>( dsyr2k_join ) );\n        make_edge( output_port<1>( dtrsm_node ), input_port<1>( dsyr2k_join ) );\n        make_edge( output_port<2>( dsyr2k_node ), input_port<2>( dsyr2k_join ) );\n        make_edge( dsyr2k_join, dsyr2k_node );\n\n        // Now we need to send out the tiles to their first nodes\n        tag_t t;\n        t.tag = 0;\n        t.a[0] = 0;\n        t.a[1] = 0;\n        t.a[2] = 0;\n\n        // Send to feedback input of first dpotf2\n        // k == 0, j == 0, i == 0\n        dpotf2_node.try_put( std::make_pair( t, tile[0][0] ) );\n\n        // Send to feedback input (port 1) of each dtrsm\n        // k == 0, j == 1..p-1\n        for ( int j = 1; j < p; ++j ) {\n            t.a[1] = j;\n            input_port<1>( dtrsm_join ).try_put( std::make_pair( t, tile[0][j] ) );\n        }\n\n        // Send to feedback input (port 2) of each dsyr2k\n        // k == 0\n        for ( int i = 1; i < p; ++i ) {\n            t.a[2] = i;\n\n            for ( int j = i; j < p; ++j ) {\n                t.a[1] = j;\n                input_port<2>( dsyr2k_join ).try_put( std::make_pair( t, tile[i][j] ) );\n            }\n        }\n\n        g.wait_for_all();\n    }\n};\n\n/************************************************************\n End data join graph based version of cholesky\n************************************************************/\n\n/************************************************************\n Begin dependence graph based version of cholesky\n************************************************************/\n\ntypedef tbb::flow::continue_node< tbb::flow::continue_msg > continue_type;\ntypedef continue_type * continue_ptr_type;\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\n// Using helper functor classes (instead of built-in C++ 11 lambda functions)\nclass call_dpotf2_functor\n{\n    double ***tile;\n    int b, k;\npublic:\n    call_dpotf2_functor( double ***tile_, int b_, int k_ )\n        : tile(tile_), b(b_), k(k_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); }\n};\n\nclass call_dtrsm_functor\n{\n    double ***tile;\n    int b, k, j;\npublic:\n    call_dtrsm_functor( double ***tile_, int b_, int k_, int j_ )\n        : tile(tile_), b(b_), k(k_), j(j_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); }\n};\n\nclass call_dsyr2k_functor\n{\n    double ***tile;\n    int b, k, j, i;\npublic:\n    call_dsyr2k_functor( double ***tile_, int b_, int k_, int j_, int i_ )\n        : tile(tile_), b(b_), k(k_), j(j_), i(i_) {}\n\n    void operator()( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); }\n};\n\n#endif // !__TBB_CPP11_LAMBDAS_PRESENT\n\nclass algorithm_depend : public algorithm\n{\npublic:\n    algorithm_depend() : algorithm(\"depend_cholesky\", true) {}\n\nprotected:\n    virtual void func( void * ptr, int n, int b ) {\n        double ***tile = (double ***)ptr;\n\n        const int p = n/b;\n        continue_ptr_type *c = new continue_ptr_type[p];\n        continue_ptr_type **t = new continue_ptr_type *[p];\n        continue_ptr_type ***u = new continue_ptr_type **[p];\n\n        tbb::flow::graph g;\n        for ( int k = p-1; k >= 0; --k ) {\n            c[k] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                [=]( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); } );\n#else\n                call_dpotf2_functor( tile, b, k ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n            t[k] = new continue_ptr_type[p];\n            u[k] = new continue_ptr_type *[p];\n\n            for ( int j = k+1; j < p; ++j ) {\n                t[k][j] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                    [=]( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); } );\n#else\n                    call_dtrsm_functor( tile, b, k, j ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n                make_edge( *c[k], *t[k][j] );\n                u[k][j] = new continue_ptr_type[p];\n\n                for ( int i = k+1; i <= j; ++i ) {\n                    u[k][j][i] = new continue_type( g,\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                        [=]( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); } );\n#else\n                        call_dsyr2k_functor( tile, b, k, j, i ) );\n#endif // __TBB_CPP11_LAMBDAS_PRESENT\n\n                    if ( k < p-2 && k+1 != j && k+1 != i ) {\n                        make_edge( *u[k][j][i], *u[k+1][j][i] );\n                    }\n\n                    make_edge( *t[k][j], *u[k][j][i] );\n\n                    if ( i != j ) {\n                        make_edge( *t[k][i], *u[k][j][i] );\n                    }\n\n                    if ( k < p-2 && j > i && i == k+1 ) {\n                        make_edge( *u[k][j][i], *t[i][j] );\n                    }\n                }\n            }\n\n            if ( k != p-1 ) {\n                make_edge( *u[k][k+1][k+1], *c[k+1] );\n            }\n        }\n\n        c[0]->try_put( tbb::flow::continue_msg() );\n        g.wait_for_all();\n    }\n}; // class algorithm_depend\n\n/************************************************************\n End dependence graph based version of cholesky\n************************************************************/\n\nbool process_args( int argc, char *argv[] ) {\n    utility::parse_cli_arguments( argc, argv,\n        utility::cli_argument_pack()\n        //\"-h\" option for displaying help is present implicitly\n        .positional_arg( g_n, \"size\", \"the row/column size of NxN matrix (size <= 46000)\" )\n        .positional_arg( g_b, \"blocksize\", \"the block size; size must be a multiple of the blocksize\" )\n        .positional_arg( g_num_trials, \"num_trials\", \"the number of times to run each algorithm\" )\n        .positional_arg( g_output_prefix, \"output_prefix\",\n            \"if provided the prefix will be preappended to output files:\\n\"\n            \"                     output_prefix_posdef.txt\\n\"\n            \"                     output_prefix_X.txt; where X is the algorithm used\\n\"\n            \"                 if output_prefix is not provided, no output will be written\" )\n        .positional_arg( g_alg_name, \"algorithm\", \"name of the used algorithm - can be dpotrf, crout, depend or join\" )\n        .positional_arg( g_num_tbb_threads, \"num_tbb_threads\", \"number of started TBB threads\" )\n\n        .arg( g_input_file_name, \"input_file\", \"if provided it will be read to get the input matrix\" )\n        .arg( g_benchmark_run, \"-x\", \"skips all validation\" )\n    );\n\n    if ( g_n > 46000 ) {\n        printf( \"ERROR: invalid 'size' value (must be less or equal 46000): %d\\n\", g_n );\n        return false;\n    }\n\n    if ( g_n%g_b != 0 ) {\n        printf( \"ERROR: size %d must be a multiple of the blocksize %d\\n\", g_n, g_b );\n        return false;\n    }\n\n    if ( g_n/g_b > 256 ) {\n        // Because tile index size is 1 byte only in tag_t type\n        printf( \"ERROR: size / blocksize must be less or equal 256, but %d / %d = %d\\n\", g_n, g_b, g_n/g_b );\n        return false;\n    }\n\n    if ( g_b == -1 || (g_n == -1 && g_input_file_name == NULL) ) {\n        return false;\n    }\n\n    return true;\n}\n\nint main(int argc, char *argv[]) {\n    typedef std::map< std::string, algorithm * > algmap_t;\n    algmap_t algmap;\n\n    // Init algorithms\n    algmap.insert(std::pair<std::string, algorithm *>(\"dpotrf\", new algorithm_dpotrf));\n    algmap.insert(std::pair<std::string, algorithm *>(\"crout\", new algorithm_crout));\n    algmap.insert(std::pair<std::string, algorithm *>(\"depend\", new algorithm_depend));\n    algmap.insert(std::pair<std::string, algorithm *>(\"join\", new algorithm_join));\n\n    if ( !process_args( argc, argv ) ) {\n        printf( \"ERROR: Invalid arguments. Run: %s -h\\n\", argv[0] );\n        exit( 1 );\n    }\n\n    tbb::task_scheduler_init init( g_num_tbb_threads );\n    double *A = NULL;\n\n    // Read input matrix\n    matrix_init( A, g_n, g_input_file_name );\n\n    // Write input matrix if output_prefix is set and we didn't read from a file\n    if ( !g_input_file_name && g_output_prefix ) {\n        std::string s( g_output_prefix );\n        s += \"_posdef.txt\";\n        matrix_write( A, g_n, s.c_str() );\n    }\n\n    if ( g_alg_name.empty() ) {\n        for ( algmap_t::iterator i = algmap.begin(); i != algmap.end(); ++i ) {\n            algorithm* const alg = i->second;\n            (*alg)( A, g_n, g_b, g_num_trials );\n        }\n    }\n    else {\n        algmap_t::iterator alg_iter = algmap.find(g_alg_name);\n\n        if ( alg_iter != algmap.end() ) {\n            algorithm* const alg = alg_iter->second;\n            (*alg)( A, g_n, g_b, g_num_trials );\n        }\n        else {\n            printf( \"ERROR: Invalid algorithm name: %s\\n\", g_alg_name.c_str() );\n            exit( 2 );\n        }\n    }\n\n    free( A );\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/cholesky/init.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdio>\n#include <cassert>\n#include <cstring>\n#include <cstdlib>\n#include <mkl_cblas.h>\n\nstatic void posdef_gen( double * A, int n )\n{\n    /* Allocate memory for the matrix and its transpose */\n    double *L = (double *)calloc( sizeof( double ), n*n );\n    assert( L );\n\n    double *LT = (double *)calloc( sizeof( double ), n*n) ;\n    assert( LT );\n\n    memset( A, 0, sizeof( double )*n*n );\n\n    /* Generate a conditioned matrix and fill it with random numbers */\n    for ( int j = 0; j < n; ++j ) {\n        for ( int k = 0; k < j; ++k ) {\n            // The initial value has to be between [0,1].\n            L[k*n+j] = ( ( (j*k) / ((double)(j+1)) / ((double)(k+2)) * 2.0) - 1.0 ) / ((double)n);\n        }\n\n        L[j*n+j] = 1;\n    }\n\n    /* Compute transpose of the matrix */\n    for ( int i = 0; i < n; ++i ) {\n        for ( int j = 0; j < n; ++j ) {\n            LT[j*n+i] = L[i*n+j];\n        }\n    }\n    cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1, L, n, LT, n, 0, A, n );\n\n    free( L );\n    free( LT );\n}\n\n// Read the matrix from the input file\nvoid matrix_init( double * &A, int &n, const char *fname ) {\n    if( fname ) {\n        int i;\n        int j;\n        FILE *fp;\n\n        fp = fopen( fname, \"r\" );\n        if ( fp == NULL ) {\n            fprintf( stderr, \"\\nFile does not exist\\n\" );\n            exit( 0 );\n        }\n        if ( fscanf( fp, \"%d\", &n ) <= 0 ) {\n            fprintf( stderr,\"\\nCouldn't read n from %s\\n\", fname );\n            exit( 1 );\n        }\n        A = (double *)calloc( sizeof( double ), n*n );\n        for ( i = 0; i < n; ++i ) {\n            for ( j = 0; j <= i; ++j ) {\n                if( fscanf( fp, \"%lf \", &A[i*n+j] ) <= 0) {\n                    fprintf( stderr,\"\\nMatrix size incorrect %i %i\\n\", i, j );\n                    exit( 1 );\n                }\n                if ( i != j ) {\n                    A[j*n+i] = A[i*n+j];\n                }\n            }\n        }\n        fclose( fp );\n    } else {\n        A = (double *)calloc( sizeof( double ), n*n );\n        posdef_gen( A, n );\n    }\n}\n\n// write matrix to file\nvoid matrix_write ( double *A, int n, const char *fname, bool is_triangular = false )\n{\n    if( fname ) {\n        int i = 0;\n        int j = 0;\n        FILE *fp = NULL;\n\n        fp = fopen( fname, \"w\" );\n        if ( fp == NULL ) {\n            fprintf( stderr, \"\\nCould not open file %s for writing.\\n\", fname );\n            exit( 0 );\n        }\n        fprintf( fp, \"%d\\n\", n );\n        for ( i = 0; i < n; ++i) {\n            for ( j = 0; j <= i; ++j ) {\n                fprintf( fp, \"%lf \", A[j*n+i] );\n            }\n            if ( !is_triangular ) {\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", A[i*n+j] );\n                }\n            } else {\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", 0.0 );\n                }\n            } \n            fprintf( fp, \"\\n\" );\n        }\n        if ( is_triangular ) {\n            fprintf( fp, \"\\n\" );\n            for ( i = 0; i < n; ++i ) {\n                for ( j = 0; j < i; ++j ) {\n                    fprintf( fp, \"%lf \", 0.0 );\n                }\n                for ( ; j < n; ++j ) {\n                    fprintf( fp, \"%lf \", A[i*n+j] );\n                }\n                fprintf( fp, \"\\n\" );\n            }\n        }\n        fclose( fp );\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/cholesky/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Cholesky sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Cholesky sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains an example of several versions of Cholesky Factorization algorithm. \n\t\t<br>\n\t\t<br><b>dpotrf</b>: An implementation that calls the Intel&reg; Math Kernel Library (Intel&reg; MKL) dpotrf function to directly perform the factorization.  This can be a serial implementation or threaded implementation depending on the version of the Intel MKL library that is linked against.\n\t\t<br>\n\t\t<br><b>crout</b>: A serial implementation that uses the Crout-Cholesky algorithm for factorization.  The same approach is parallelized for the other Intel&reg; Threading Building Blocks (Intel&reg; TBB) based approaches below.\n\t\t<br>\n\t\t<br><b>depend</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a dependence graph made solely of continue_node objects. This an inspector-executor approach, where a loop nest that is similar to the serial implementation is used to create an unrolled version of the computation.  Where the Intel MKL calls would have been made in the original serial implementation of Crout-Cholesky, instead nodes are created and these nodes are linked by edges to the other nodes that they are dependent upon.  The resulting graph is relatively large, with a node for each instance of each Intel MKL call.  For example, there are many nodes that call dtrsm; one for each invocation of dtrsm in the serial implementation.  The is very little overhead in message management for this version and so it is often the highest performing.\n\t\t<br>\n\t\t<br><b>join</b>: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph.  This version uses a data flow approach. This is a small, compact graph that passes tiles along its edges.  There is one node per type of Intel MKL call, plus join_nodes that combine the inputs required for each call.  So for example, there is only a single node that applies all calls to dtrsm.  This node is invoked when the tiles that hold the inputs and outputs for an invocation are matched together in the tag-matching join_node that precedes it.   The tag represents the iteration values of the i, j, k loops in the serial implementation at that invocation of the call. There is some overhead in message matching and forwarding, so it may not perform as well as the dependence graph implementation.\n\t\t<br>\n\t\t<br>This sample code requires a recent Intel TBB library (one that supports the flow graph). And also the Intel MKL library.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"cholesky.cpp\">cholesky.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"init.cpp\">init.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>Also, you need to source Intel MKL environment variables.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>cholesky [<i>size=value</i>] [<i>blocksize=value</i>] [<i>num_trials=value</i>] [<i>output_prefix=value</i>] [<i>algorithm=value</i>] [<i>num_tbb_threads=value</i>] [<i>input_file=value</i>] [<i>-x</i>] [<i>-h</i>] [<i>size</i> [<i>blocksize</i> [<i>num_trials</i> [<i>output_prefix</i> [<i>algorithm</i> [<i>num_tbb_threads</i>]]]]]]</tt>\n\t\t\t\t<dd>where:\n\t\t\t\t<br><tt><i>size</i></tt> - the row/column size of NxN matrix (size &lt;= 46000)\n\t\t\t\t<br><tt><i>blocksize</i></tt> - the block size; size must be a multiple of the blocksize\n\t\t\t\t<br><tt><i>num_trials</i></tt> - the number of times to run each algorithm\n\t\t\t\t<br><tt><i>output_prefix</i></tt> - if provided the prefix will be preappended to output files:\n\t\t\t\t\t\t\t\t\t <i>output_prefix_posdef.txt</i> and\n\t\t\t\t\t\t\t\t\t <i>output_prefix_X.txt</i>; where <i>X</i> is the algorithm used\n\t\t\t\t<br>if <tt><i>output_prefix</i></tt> is not provided, no output will be written\n\t\t\t\t<br><tt><i>algorithm</i></tt> - name of the used algorithm - can be dpotrf, crout, depend or join\n\t\t\t\t<br><tt><i>num_tbb_threads</i></tt> - number of started TBB threads\n\t\t\t\t<br><tt><i>input_file</i></tt> - if provided it will be read to get the input matrix\n\t\t\t\t<br><tt><i>-x</i></tt> - skips all validation\n\t\t\t\t<br><tt><i>-h</i></tt> - show this message\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/dining_philosophers/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=dining_philosophers\nARGS= auto 5\nLIGHT_ARGS= auto 3\n\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: dining_philosophers.cpp\n\t$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug:  dining_philosophers.cpp\n\t$(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\trm -f $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/dining_philosophers/dining_philosophers.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if _MSC_VER\n    // Suppress \"decorated name length exceeded, name was truncated\" warning\n    #pragma warning (disable: 4503)\n#endif\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/tbb_thread.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/spin_mutex.h\"\n#include <iostream>\n#include \"../../common/utility/utility.h\"\n#include <cstdlib>\n#include <cstdio>\n\n// Each philosopher is an object, and is invoked in the think() function_node, the\n// eat() function_node and forward() multifunction_node.\n//\n// The graph is constructed, and each think() function_node is started with a continue_msg.\n//\n// The philosopher will think, then gather two chopsticks, eat, place the chopsticks back,\n// and if they have not completed the required number of cycles, will start to think() again\n// by sending a continue_msg to their corresponding think() function_node.\n//\n// The reserving join has as its inputs the left and right chopstick queues an a queue\n// that stores the continue_msg emitted by the function_node after think()ing is done.\n// When all three inputs are available, a tuple of the inputs will be forwarded to the\n// eat() function_node.  The output of the eat() function_node is sent to the forward()\n// multifunction_node.\n\nconst tbb::tick_count::interval_t think_time(1.0);\nconst tbb::tick_count::interval_t eat_time(1.0);\nconst int num_times = 10;\n\ntbb::tick_count t0;\nbool verbose = false;\n\nconst char *names[] = { \"Archimedes\", \"Bakunin\", \"Confucius\", \"Democritus\", \"Euclid\"\n                      , \"Favorinus\", \"Geminus\", \"Heraclitus\", \"Ichthyas\", \"Jason of Nysa\",\n                          \"Kant\", \"Lavrov\", \"Metrocles\", \"Nausiphanes\", \"Onatas\", \"Phaedrus\",\n                          \"Quillot\", \"Russell\", \"Socrates\", \"Thales\", \"Udayana\",\n                          \"Vernadsky\", \"Wittgenstein\", \"Xenophilus\", \"Yen Yuan\", \"Zenodotus\"\n};\nconst int NumPhilosophers = sizeof(names) / sizeof(char*);\n\nstruct RunOptions {\n    utility::thread_number_range threads;\n    int number_of_philosophers;\n    bool silent;\n    RunOptions(utility::thread_number_range threads_, int number_of_philosophers_, bool silent_) :\n        threads(threads_), number_of_philosophers(number_of_philosophers_), silent(silent_) { }\n};\n\nRunOptions ParseCommandLine(int argc, char *argv[]) {\n    int auto_threads = tbb::task_scheduler_init::default_num_threads();\n    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads, auto_threads, auto_threads);\n    int nPhilosophers = 5;\n    bool verbose = false;\n    char charbuf[100];\n    std::sprintf(charbuf, \"%d\", NumPhilosophers);\n    std::string pCount = \"how many philosophers, from 2-\";\n    pCount += charbuf;\n\n    utility::cli_argument_pack cli_pack;\n    cli_pack.positional_arg(threads, \"n-of_threads\", utility::thread_number_range_desc)\n            .positional_arg(nPhilosophers, \"n-of-philosophers\", pCount)\n            .arg(verbose,\"verbose\",\"verbose output\");\n    utility::parse_cli_arguments(argc, argv, cli_pack);\n    if(nPhilosophers < 2 || nPhilosophers > NumPhilosophers) {\n        std::cout << \"Number of philosophers (\" << nPhilosophers << \") out of range [2:\" << NumPhilosophers << \"]\\n\";\n        std::cout << cli_pack.usage_string(argv[0]) << std::flush;\n        std::exit(1);\n    }\n    return RunOptions(threads, nPhilosophers,!verbose);\n}\n\n\ntbb::spin_mutex my_mutex;\n\nclass chopstick {};\n\nusing namespace tbb::flow;\n\ntypedef tbb::flow::tuple<continue_msg, chopstick, chopstick> join_output;\ntypedef join_node< join_output, reserving > join_node_type;\n\ntypedef function_node<continue_msg, continue_msg> think_node_type;\ntypedef function_node<join_output, continue_msg> eat_node_type;\ntypedef multifunction_node<continue_msg, join_output> forward_node_type;\n\nclass philosopher {\npublic:\n\n    philosopher( const char *name ) :\n        my_name(name), my_count(num_times) { }\n\n    ~philosopher() {\n    }\n\n    void check();\n    const char *name() const { return my_name; }\n\nprivate:\n\n    friend std::ostream& operator<<(std::ostream& o, philosopher const &p);\n\n    const char *my_name;\n    int my_count;\n\n    friend class think_node_body;\n    friend class eat_node_body;\n    friend class forward_node_body;\n\n    void think( );\n    void eat();\n    void forward( const continue_msg &in, forward_node_type::output_ports_type &out_ports );\n};\n\nstd::ostream& operator<<(std::ostream& o, philosopher const &p) {\n    o << \"< philosopher[\" << reinterpret_cast<uintptr_t>(const_cast<philosopher *>(&p)) << \"] \" << p.name()\n        << \", my_count=\" << p.my_count;\n    return o;\n}\n\nclass think_node_body {\n    philosopher& my_philosopher;\npublic:\n    think_node_body( philosopher &p ) : my_philosopher(p) { }\n    think_node_body( const think_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    continue_msg operator()( continue_msg /*m*/) {\n        my_philosopher.think();\n        return continue_msg();\n    }\n};\n\nclass eat_node_body {\n    philosopher &my_philosopher;\npublic:\n    eat_node_body( philosopher &p) : my_philosopher(p) {}\n    eat_node_body( const eat_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    continue_msg operator()(const join_output &in) {\n        my_philosopher.eat();\n        return continue_msg();\n    }\n};\n\nclass forward_node_body {\n    philosopher &my_philosopher;\npublic:\n    forward_node_body( philosopher &p) : my_philosopher(p) {}\n    forward_node_body( const forward_node_body &other ) : my_philosopher(other.my_philosopher) { }\n    void operator()( const continue_msg &in, forward_node_type::output_ports_type &out) {\n        my_philosopher.forward( in, out);\n    }\n};\n\nvoid philosopher::check() {\n    if ( my_count != 0 ) {\n        std::printf(\"ERROR: philosopher %s still had to run %d more times\\n\", name(), my_count);\n        std::exit(1);\n    }\n}\n\nvoid philosopher::forward( const continue_msg &/*in*/, forward_node_type::output_ports_type &out_ports ) {\n    if(my_count < 0) abort();\n    --my_count;\n    (void)tbb::flow::get<1>(out_ports).try_put(chopstick());\n    (void)tbb::flow::get<2>(out_ports).try_put(chopstick());\n    if (my_count > 0) {\n        (void)tbb::flow::get<0>(out_ports).try_put(continue_msg());  //start thinking again\n    } else {\n        if(verbose) {\n            tbb::spin_mutex::scoped_lock lock(my_mutex);\n            std::printf(\"%s has left the building\\n\", name());\n        }\n    }\n}\n\nvoid philosopher::eat() {\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s eating\\n\", name());\n    }\n    tbb::this_tbb_thread::sleep(eat_time);\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s done eating\\n\", name());\n    }\n}\n\nvoid philosopher::think() {\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s thinking\\n\", name());\n    }\n    tbb::this_tbb_thread::sleep(think_time);\n    if(verbose) {\n        tbb::spin_mutex::scoped_lock lock(my_mutex);\n        std::printf(\"%s done thinking\\n\", name());\n    }\n}\n\ntypedef queue_node<continue_msg> thinking_done_type;\n\nint main(int argc, char *argv[]) {\n    try {\n        tbb::tick_count main_time = tbb::tick_count::now();\n        int num_threads;\n        int num_philosophers;\n\n        RunOptions options = ParseCommandLine(argc, argv);\n        num_philosophers = options.number_of_philosophers;\n        verbose = !options.silent;\n\n    for(num_threads = options.threads.first; num_threads <= options.threads.last; num_threads = options.threads.step(num_threads)) {\n\n        tbb::task_scheduler_init init(num_threads);\n\n            graph g;\n\n            if(verbose) std::cout << std::endl << num_philosophers << \" philosophers with \"\n                << num_threads << \" threads\" << std::endl << std::endl;\n            t0 = tbb::tick_count::now();\n\n            std::vector<queue_node<chopstick> > places(num_philosophers, queue_node<chopstick>(g));\n            std::vector<philosopher> philosophers;\n            philosophers.reserve(num_philosophers);\n            std::vector<think_node_type *> think_nodes;\n            think_nodes.reserve(num_philosophers);\n            std::vector<thinking_done_type> done_vector(num_philosophers, thinking_done_type(g));\n            std::vector<join_node_type> join_vector(num_philosophers,join_node_type(g));\n            std::vector<eat_node_type *> eat_nodes;\n            eat_nodes.reserve(num_philosophers);\n            std::vector<forward_node_type *> forward_nodes;\n            forward_nodes.reserve(num_philosophers);\n            for ( int i = 0; i < num_philosophers; ++i ) {\n                places[i].try_put(chopstick());\n                philosophers.push_back( philosopher( names[i] ) );  // allowed because of default generated assignment\n                if(verbose) {\n                    tbb::spin_mutex::scoped_lock lock(my_mutex);\n                    std::cout << \"Built philosopher \" << philosophers[i] << std::endl;\n                }\n                think_nodes.push_back(new think_node_type(g, unlimited, think_node_body(philosophers[i])));\n                eat_nodes.push_back( new eat_node_type(g, unlimited, eat_node_body(philosophers[i])));\n                forward_nodes.push_back( new forward_node_type(g, unlimited, forward_node_body(philosophers[i])));\n            }\n\n            // attach chopstick buffers and think function_nodes to joins\n            for(int i = 0; i < num_philosophers; ++i) {\n                make_edge( *think_nodes[i], done_vector[i] );\n                make_edge( done_vector[i], input_port<0>(join_vector[i]) );\n                make_edge( places[i], input_port<1>(join_vector[i]) ); // left chopstick\n                make_edge( places[(i+1) % num_philosophers], input_port<2>(join_vector[i]) ); // right chopstick\n                make_edge( join_vector[i], *eat_nodes[i] );\n                make_edge( *eat_nodes[i], *forward_nodes[i] );\n                make_edge( output_port<0>(*forward_nodes[i]), *think_nodes[i] );\n                make_edge( output_port<1>(*forward_nodes[i]), places[i] );\n                make_edge( output_port<2>(*forward_nodes[i]), places[(i+1) % num_philosophers] );\n            }\n\n            // start all the philosophers thinking\n            for(int i = 0; i < num_philosophers; ++i) think_nodes[i]->try_put(continue_msg());\n\n            g.wait_for_all();\n\n            tbb::tick_count t1 = tbb::tick_count::now();\n            if(verbose) std::cout << std::endl << num_philosophers << \" philosophers with \"\n                << num_threads << \" threads have taken \" << (t1-t0).seconds() << \"seconds\" << std::endl;\n\n            for ( int i = 0; i < num_philosophers; ++i ) philosophers[i].check();\n\n            for(int i = 0; i < num_philosophers; ++i) {\n                delete think_nodes[i];\n                delete eat_nodes[i];\n                delete forward_nodes[i];\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - main_time).seconds());\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/dining_philosophers/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Dining_philosophers sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Dining_philosophers sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Dining Philosophers problem demonstrates tbb::flow and the use of the reserving join node to\n\t\tsolve the potential deadlock.\n\t<br><br>\n\t\tThis program runs some number of philosophers in parallel, each thinking and then waiting for chopsticks\n\t\tto be available before eating.  Eating and thinking are implemented with sleep().  The chopstick positions are represented by a queue_node with one item.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"dining_philosophers.cpp\">dining_philosophers.cpp</a>\n\t\t\t\t<dd>Source code for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\n\nrun_cmd=\nPROG=fgbzip2\nARGS=-b=9 -a=async_node $(PROG)\nPERF_RUN_ARGS=-b=9 -a=async_node $(PROG)\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt -lpthread\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall: release test\n\nrelease:\n\t$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug:\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d *.bz2\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/blocksort.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Block sorting machinery                               ---*/\n/*---                                         blocksort.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n    The original source for this example:\n    This file is part of bzip2/libbzip2, a program and library for\n    lossless, block-sorting data compression.\n\n    bzip2/libbzip2 version 1.0.6 of 6 September 2010\n    Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n    This program, \"bzip2\", the associated library \"libbzip2\", and all\n    documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n    rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    2. The origin of this software must not be misrepresented; you must \n    not claim that you wrote the original software.  If you use this \n    software in a product, an acknowledgment in the product \n    documentation would be appreciated but is not required.\n\n    3. Altered source versions must be plainly marked as such, and must\n    not be misrepresented as being the original software.\n\n    4. The name of the author may not be used to endorse or promote \n    products derived from this software without specific prior written \n    permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n    GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n    Julian Seward, jseward@bzip.org\n    bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------*/\n/*--- Fallback O(N log(N)^2) sorting        ---*/\n/*--- algorithm, for repetitive blocks      ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic \n__inline__\nvoid fallbackSimpleSort ( UInt32* fmap, \n                          UInt32* eclass, \n                          Int32   lo, \n                          Int32   hi )\n{\n   Int32 i, j, tmp;\n   UInt32 ec_tmp;\n\n   if (lo == hi) return;\n\n   if (hi - lo > 3) {\n      for ( i = hi-4; i >= lo; i-- ) {\n         tmp = fmap[i];\n         ec_tmp = eclass[tmp];\n         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )\n            fmap[j-4] = fmap[j];\n         fmap[j-4] = tmp;\n      }\n   }\n\n   for ( i = hi-1; i >= lo; i-- ) {\n      tmp = fmap[i];\n      ec_tmp = eclass[tmp];\n      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )\n         fmap[j-1] = fmap[j];\n      fmap[j-1] = tmp;\n   }\n}\n\n\n/*---------------------------------------------*/\n#define fswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define fvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      fswap(fmap[yyp1], fmap[yyp2]);  \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\n\n#define fmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define fpush(lz,hz) { stackLo[sp] = lz; \\\n                       stackHi[sp] = hz; \\\n                       sp++; }\n\n#define fpop(lz,hz) { sp--;              \\\n                      lz = stackLo[sp];  \\\n                      hz = stackHi[sp]; }\n\n#define FALLBACK_QSORT_SMALL_THRESH 10\n#define FALLBACK_QSORT_STACK_SIZE   100\n\n\nstatic\nvoid fallbackQSort3 ( UInt32* fmap, \n                      UInt32* eclass,\n                      Int32   loSt, \n                      Int32   hiSt )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m;\n   Int32 sp, lo, hi;\n   UInt32 med, r, r3;\n   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];\n   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];\n\n   r = 0;\n\n   sp = 0;\n   fpush ( loSt, hiSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );\n\n      fpop ( lo, hi );\n      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {\n         fallbackSimpleSort ( fmap, eclass, lo, hi );\n         continue;\n      }\n\n      /* Random partitioning.  Median of 3 sometimes fails to\n         avoid bad cases.  Median of 9 seems to help but \n         looks rather expensive.  This too seems to work but\n         is cheaper.  Guidance for the magic constants \n         7621 and 32768 is taken from Sedgewick's algorithms\n         book, chapter 35.\n      */\n      r = ((r * 7621) + 1) % 32768;\n      r3 = r % 3;\n      if (r3 == 0) med = eclass[fmap[lo]]; else\n      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else\n                   med = eclass[fmap[hi]];\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (1) {\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unLo]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unLo], fmap[ltLo]); \n               ltLo++; unLo++; \n               continue; \n            };\n            if (n > 0) break;\n            unLo++;\n         }\n         while (1) {\n            if (unLo > unHi) break;\n            n = (Int32)eclass[fmap[unHi]] - (Int32)med;\n            if (n == 0) { \n               fswap(fmap[unHi], fmap[gtHi]); \n               gtHi--; unHi--; \n               continue; \n            };\n            if (n < 0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"fallbackQSort3(2)\" );\n\n      if (gtHi < ltLo) continue;\n\n      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);\n      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      if (n - lo > hi - m) {\n         fpush ( lo, n );\n         fpush ( m, hi );\n      } else {\n         fpush ( m, hi );\n         fpush ( lo, n );\n      }\n   }\n}\n\n#undef fmin\n#undef fpush\n#undef fpop\n#undef fswap\n#undef fvswap\n#undef FALLBACK_QSORT_SMALL_THRESH\n#undef FALLBACK_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      eclass exists for [0 .. nblock-1]\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)eclass) [0 .. nblock-1] holds block\n      All other areas of eclass destroyed\n      fmap [0 .. nblock-1] holds sorted order\n      bhtab [ 0 .. 2+(nblock/32) ] destroyed\n*/\n\n#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))\n#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))\n#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))\n#define      WORD_BH(zz)  bhtab[(zz) >> 5]\n#define UNALIGNED_BH(zz)  ((zz) & 0x01f)\n\nstatic\nvoid fallbackSort ( UInt32* fmap, \n                    UInt32* eclass, \n                    UInt32* bhtab,\n                    Int32   nblock,\n                    Int32   verb )\n{\n   Int32 ftab[257];\n   Int32 ftabCopy[256];\n   Int32 H, i, j, k, l, r, cc, cc1;\n   Int32 nNotDone;\n   Int32 nBhtab;\n   UChar* eclass8 = (UChar*)eclass;\n\n   /*--\n      Initial 1-char radix sort to generate\n      initial fmap and initial BH bits.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        bucket sorting ...\\n\" );\n   for (i = 0; i < 257;    i++) ftab[i] = 0;\n   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;\n   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];\n   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];\n\n   for (i = 0; i < nblock; i++) {\n      j = eclass8[i];\n      k = ftab[j] - 1;\n      ftab[j] = k;\n      fmap[k] = i;\n   }\n\n   nBhtab = 2 + (nblock / 32);\n   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;\n   for (i = 0; i < 256; i++) SET_BH(ftab[i]);\n\n   /*--\n      Inductively refine the buckets.  Kind-of an\n      \"exponential radix sort\" (!), inspired by the\n      Manber-Myers suffix array construction algorithm.\n   --*/\n\n   /*-- set sentinel bits for block-end detection --*/\n   for (i = 0; i < 32; i++) { \n      SET_BH(nblock + 2*i);\n      CLEAR_BH(nblock + 2*i + 1);\n   }\n\n   /*-- the log(N) loop --*/\n   H = 1;\n   while (1) {\n\n      if (verb >= 4) \n         VPrintf1 ( \"        depth %6d has \", H );\n\n      j = 0;\n      for (i = 0; i < nblock; i++) {\n         if (ISSET_BH(i)) j = i;\n         k = fmap[i] - H; if (k < 0) k += nblock;\n         eclass[k] = j;\n      }\n\n      nNotDone = 0;\n      r = -1;\n      while (1) {\n\n\t /*-- find the next non-singleton bucket --*/\n         k = r + 1;\n         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (ISSET_BH(k)) {\n            while (WORD_BH(k) == 0xffffffff) k += 32;\n            while (ISSET_BH(k)) k++;\n         }\n         l = k - 1;\n         if (l >= nblock) break;\n         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;\n         if (!ISSET_BH(k)) {\n            while (WORD_BH(k) == 0x00000000) k += 32;\n            while (!ISSET_BH(k)) k++;\n         }\n         r = k - 1;\n         if (r >= nblock) break;\n\n         /*-- now [l, r] bracket current bucket --*/\n         if (r > l) {\n            nNotDone += (r - l + 1);\n            fallbackQSort3 ( fmap, eclass, l, r );\n\n            /*-- scan bucket and generate header bits-- */\n            cc = -1;\n            for (i = l; i <= r; i++) {\n               cc1 = eclass[fmap[i]];\n               if (cc != cc1) { SET_BH(i); cc = cc1; };\n            }\n         }\n      }\n\n      if (verb >= 4) \n         VPrintf1 ( \"%6d unresolved strings\\n\", nNotDone );\n\n      H *= 2;\n      if (H > nblock || nNotDone == 0) break;\n   }\n\n   /*-- \n      Reconstruct the original block in\n      eclass8 [0 .. nblock-1], since the\n      previous phase destroyed it.\n   --*/\n   if (verb >= 4)\n      VPrintf0 ( \"        reconstructing block ...\\n\" );\n   j = 0;\n   for (i = 0; i < nblock; i++) {\n      while (ftabCopy[j] == 0) j++;\n      ftabCopy[j]--;\n      eclass8[fmap[i]] = (UChar)j;\n   }\n   AssertH ( j < 256, 1005 );\n}\n\n#undef       SET_BH\n#undef     CLEAR_BH\n#undef     ISSET_BH\n#undef      WORD_BH\n#undef UNALIGNED_BH\n\n\n/*---------------------------------------------*/\n/*--- The main, O(N^2 log(N)) sorting       ---*/\n/*--- algorithm.  Faster for \"normal\"       ---*/\n/*--- non-repetitive blocks.                ---*/\n/*---------------------------------------------*/\n\n/*---------------------------------------------*/\nstatic\n__inline__\nBool mainGtU ( UInt32  i1, \n               UInt32  i2,\n               UChar*  block, \n               UInt16* quadrant,\n               UInt32  nblock,\n               Int32*  budget )\n{\n   Int32  k;\n   UChar  c1, c2;\n   UInt16 s1, s2;\n\n   AssertD ( i1 != i2, \"mainGtU\" );\n   /* 1 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 2 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 3 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 4 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 5 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 6 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 7 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 8 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 9 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 10 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 11 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n   /* 12 */\n   c1 = block[i1]; c2 = block[i2];\n   if (c1 != c2) return (c1 > c2);\n   i1++; i2++;\n\n   k = nblock + 8;\n\n   do {\n      /* 1 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 2 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 3 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 4 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 5 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 6 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 7 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n      /* 8 */\n      c1 = block[i1]; c2 = block[i2];\n      if (c1 != c2) return (c1 > c2);\n      s1 = quadrant[i1]; s2 = quadrant[i2];\n      if (s1 != s2) return (s1 > s2);\n      i1++; i2++;\n\n      if (i1 >= nblock) i1 -= nblock;\n      if (i2 >= nblock) i2 -= nblock;\n\n      k -= 8;\n      (*budget)--;\n   }\n      while (k >= 0);\n\n   return False;\n}\n\n\n/*---------------------------------------------*/\n/*--\n   Knuth's increments seem to work better\n   than Incerpi-Sedgewick here.  Possibly\n   because the number of elements to sort\n   is usually small, typically <= 20.\n--*/\nstatic\nInt32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,\n                   9841, 29524, 88573, 265720,\n                   797161, 2391484 };\n\nstatic\nvoid mainSimpleSort ( UInt32* ptr,\n                      UChar*  block,\n                      UInt16* quadrant,\n                      Int32   nblock,\n                      Int32   lo, \n                      Int32   hi, \n                      Int32   d,\n                      Int32*  budget )\n{\n   Int32 i, j, h, bigN, hp;\n   UInt32 v;\n\n   bigN = hi - lo + 1;\n   if (bigN < 2) return;\n\n   hp = 0;\n   while (incs[hp] < bigN) hp++;\n   hp--;\n\n   for (; hp >= 0; hp--) {\n      h = incs[hp];\n\n      i = lo + h;\n      while (True) {\n\n         /*-- copy 1 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 2 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         /*-- copy 3 --*/\n         if (i > hi) break;\n         v = ptr[i];\n         j = i;\n         while ( mainGtU ( \n                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget \n                 ) ) {\n            ptr[j] = ptr[j-h];\n            j = j - h;\n            if (j <= (lo + h - 1)) break;\n         }\n         ptr[j] = v;\n         i++;\n\n         if (*budget < 0) return;\n      }\n   }\n}\n\n\n/*---------------------------------------------*/\n/*--\n   The following is an implementation of\n   an elegant 3-way quicksort for strings,\n   described in a paper \"Fast Algorithms for\n   Sorting and Searching Strings\", by Robert\n   Sedgewick and Jon L. Bentley.\n--*/\n\n#define mswap(zz1, zz2) \\\n   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }\n\n#define mvswap(zzp1, zzp2, zzn)       \\\n{                                     \\\n   Int32 yyp1 = (zzp1);               \\\n   Int32 yyp2 = (zzp2);               \\\n   Int32 yyn  = (zzn);                \\\n   while (yyn > 0) {                  \\\n      mswap(ptr[yyp1], ptr[yyp2]);    \\\n      yyp1++; yyp2++; yyn--;          \\\n   }                                  \\\n}\n\nstatic \n__inline__\nUChar mmed3 ( UChar a, UChar b, UChar c )\n{\n   UChar t;\n   if (a > b) { t = a; a = b; b = t; };\n   if (b > c) { \n      b = c;\n      if (a > b) b = a;\n   }\n   return b;\n}\n\n#define mmin(a,b) ((a) < (b)) ? (a) : (b)\n\n#define mpush(lz,hz,dz) { stackLo[sp] = lz; \\\n                          stackHi[sp] = hz; \\\n                          stackD [sp] = dz; \\\n                          sp++; }\n\n#define mpop(lz,hz,dz) { sp--;             \\\n                         lz = stackLo[sp]; \\\n                         hz = stackHi[sp]; \\\n                         dz = stackD [sp]; }\n\n\n#define mnextsize(az) (nextHi[az]-nextLo[az])\n\n#define mnextswap(az,bz)                                        \\\n   { Int32 tz;                                                  \\\n     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \\\n     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \\\n     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }\n\n\n#define MAIN_QSORT_SMALL_THRESH 20\n#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)\n#define MAIN_QSORT_STACK_SIZE 100\n\nstatic\nvoid mainQSort3 ( UInt32* ptr,\n                  UChar*  block,\n                  UInt16* quadrant,\n                  Int32   nblock,\n                  Int32   loSt, \n                  Int32   hiSt, \n                  Int32   dSt,\n                  Int32*  budget )\n{\n   Int32 unLo, unHi, ltLo, gtHi, n, m, med;\n   Int32 sp, lo, hi, d;\n\n   Int32 stackLo[MAIN_QSORT_STACK_SIZE];\n   Int32 stackHi[MAIN_QSORT_STACK_SIZE];\n   Int32 stackD [MAIN_QSORT_STACK_SIZE];\n\n   Int32 nextLo[3];\n   Int32 nextHi[3];\n   Int32 nextD [3];\n\n   sp = 0;\n   mpush ( loSt, hiSt, dSt );\n\n   while (sp > 0) {\n\n      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );\n\n      mpop ( lo, hi, d );\n      if (hi - lo < MAIN_QSORT_SMALL_THRESH || \n          d > MAIN_QSORT_DEPTH_THRESH) {\n         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );\n         if (*budget < 0) return;\n         continue;\n      }\n\n      med = (Int32) \n            mmed3 ( block[ptr[ lo         ]+d],\n                    block[ptr[ hi         ]+d],\n                    block[ptr[ (lo+hi)>>1 ]+d] );\n\n      unLo = ltLo = lo;\n      unHi = gtHi = hi;\n\n      while (True) {\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unLo]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unLo], ptr[ltLo]); \n               ltLo++; unLo++; continue; \n            };\n            if (n >  0) break;\n            unLo++;\n         }\n         while (True) {\n            if (unLo > unHi) break;\n            n = ((Int32)block[ptr[unHi]+d]) - med;\n            if (n == 0) { \n               mswap(ptr[unHi], ptr[gtHi]); \n               gtHi--; unHi--; continue; \n            };\n            if (n <  0) break;\n            unHi--;\n         }\n         if (unLo > unHi) break;\n         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;\n      }\n\n      AssertD ( unHi == unLo-1, \"mainQSort3(2)\" );\n\n      if (gtHi < ltLo) {\n         mpush(lo, hi, d+1 );\n         continue;\n      }\n\n      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);\n      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);\n\n      n = lo + unLo - ltLo - 1;\n      m = hi - (gtHi - unHi) + 1;\n\n      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;\n      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;\n      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;\n\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);\n      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);\n\n      AssertD (mnextsize(0) >= mnextsize(1), \"mainQSort3(8)\" );\n      AssertD (mnextsize(1) >= mnextsize(2), \"mainQSort3(9)\" );\n\n      mpush (nextLo[0], nextHi[0], nextD[0]);\n      mpush (nextLo[1], nextHi[1], nextD[1]);\n      mpush (nextLo[2], nextHi[2], nextD[2]);\n   }\n}\n\n#undef mswap\n#undef mvswap\n#undef mpush\n#undef mpop\n#undef mmin\n#undef mnextsize\n#undef mnextswap\n#undef MAIN_QSORT_SMALL_THRESH\n#undef MAIN_QSORT_DEPTH_THRESH\n#undef MAIN_QSORT_STACK_SIZE\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > N_OVERSHOOT\n      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      ptr exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)block32) [0 .. nblock-1] holds block\n      All other areas of block32 destroyed\n      ftab [0 .. 65536 ] destroyed\n      ptr [0 .. nblock-1] holds sorted order\n      if (*budget < 0), sorting was abandoned\n*/\n\n#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])\n#define SETMASK (1 << 21)\n#define CLEARMASK (~(SETMASK))\n\nstatic\nvoid mainSort ( UInt32* ptr, \n                UChar*  block,\n                UInt16* quadrant, \n                UInt32* ftab,\n                Int32   nblock,\n                Int32   verb,\n                Int32*  budget )\n{\n   Int32  i, j, k, ss, sb;\n   Int32  runningOrder[256];\n   Bool   bigDone[256];\n   Int32  copyStart[256];\n   Int32  copyEnd  [256];\n   UChar  c1;\n   Int32  numQSorted;\n   UInt16 s;\n   if (verb >= 4) VPrintf0 ( \"        main sort initialise ...\\n\" );\n\n   /*-- set up the 2-byte frequency table --*/\n   for (i = 65536; i >= 0; i--) ftab[i] = 0;\n\n   j = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n      quadrant[i-1] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);\n      ftab[j]++;\n      quadrant[i-2] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);\n      ftab[j]++;\n      quadrant[i-3] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);\n      ftab[j]++;\n   }\n   for (; i >= 0; i--) {\n      quadrant[i] = 0;\n      j = (j >> 8) | ( ((UInt16)block[i]) << 8);\n      ftab[j]++;\n   }\n\n   /*-- (emphasises close relationship of block & quadrant) --*/\n   for (i = 0; i < BZ_N_OVERSHOOT; i++) {\n      block   [nblock+i] = block[i];\n      quadrant[nblock+i] = 0;\n   }\n\n   if (verb >= 4) VPrintf0 ( \"        bucket sorting ...\\n\" );\n\n   /*-- Complete the initial radix sort --*/\n   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];\n\n   s = block[0] << 8;\n   i = nblock-1;\n   for (; i >= 3; i -= 4) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n      s = (s >> 8) | (block[i-1] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-1;\n      s = (s >> 8) | (block[i-2] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-2;\n      s = (s >> 8) | (block[i-3] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i-3;\n   }\n   for (; i >= 0; i--) {\n      s = (s >> 8) | (block[i] << 8);\n      j = ftab[s] -1;\n      ftab[s] = j;\n      ptr[j] = i;\n   }\n\n   /*--\n      Now ftab contains the first loc of every small bucket.\n      Calculate the running order, from smallest to largest\n      big bucket.\n   --*/\n   for (i = 0; i <= 255; i++) {\n      bigDone     [i] = False;\n      runningOrder[i] = i;\n   }\n\n   {\n      Int32 vv;\n      Int32 h = 1;\n      do h = 3 * h + 1; while (h <= 256);\n      do {\n         h = h / 3;\n         for (i = h; i <= 255; i++) {\n            vv = runningOrder[i];\n            j = i;\n            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {\n               runningOrder[j] = runningOrder[j-h];\n               j = j - h;\n               if (j <= (h - 1)) goto zero;\n            }\n            zero:\n            runningOrder[j] = vv;\n         }\n      } while (h != 1);\n   }\n\n   /*--\n      The main sorting loop.\n   --*/\n\n   numQSorted = 0;\n\n   for (i = 0; i <= 255; i++) {\n\n      /*--\n         Process big buckets, starting with the least full.\n         Basically this is a 3-step process in which we call\n         mainQSort3 to sort the small buckets [ss, j], but\n         also make a big effort to avoid the calls if we can.\n      --*/\n      ss = runningOrder[i];\n\n      /*--\n         Step 1:\n         Complete the big bucket [ss] by quicksorting\n         any unsorted small buckets [ss, j], for j != ss.  \n         Hopefully previous pointer-scanning phases have already\n         completed many of the small buckets [ss, j], so\n         we don't have to sort them at all.\n      --*/\n      for (j = 0; j <= 255; j++) {\n         if (j != ss) {\n            sb = (ss << 8) + j;\n            if ( ! (ftab[sb] & SETMASK) ) {\n               Int32 lo = ftab[sb]   & CLEARMASK;\n               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;\n               if (hi > lo) {\n                  if (verb >= 4)\n                     VPrintf4 ( \"        qsort [0x%x, 0x%x]   \"\n                                \"done %d   this %d\\n\",\n                                ss, j, numQSorted, hi - lo + 1 );\n                  mainQSort3 ( \n                     ptr, block, quadrant, nblock, \n                     lo, hi, BZ_N_RADIX, budget \n                  );   \n                  numQSorted += (hi - lo + 1);\n                  if (*budget < 0) return;\n               }\n            }\n            ftab[sb] |= SETMASK;\n         }\n      }\n\n      AssertH ( !bigDone[ss], 1006 );\n\n      /*--\n         Step 2:\n         Now scan this big bucket [ss] so as to synthesise the\n         sorted order for small buckets [t, ss] for all t,\n         including, magically, the bucket [ss,ss] too.\n         This will avoid doing Real Work in subsequent Step 1's.\n      --*/\n      {\n         for (j = 0; j <= 255; j++) {\n            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;\n            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;\n         }\n         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1])\n               ptr[ copyStart[c1]++ ] = k;\n         }\n         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {\n            k = ptr[j]-1; if (k < 0) k += nblock;\n            c1 = block[k];\n            if (!bigDone[c1]) \n               ptr[ copyEnd[c1]-- ] = k;\n         }\n      }\n\n      AssertH ( (copyStart[ss]-1 == copyEnd[ss])\n                || \n                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.\n                   Necessity for this case is demonstrated by compressing \n                   a sequence of approximately 48.5 million of character \n                   251; 1.0.0/1.0.1 will then die here. */\n                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),\n                1007 )\n\n      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;\n\n      /*--\n         Step 3:\n         The [ss] big bucket is now done.  Record this fact,\n         and update the quadrant descriptors.  Remember to\n         update quadrants in the overshoot area too, if\n         necessary.  The \"if (i < 255)\" test merely skips\n         this updating for the last bucket processed, since\n         updating for the last bucket is pointless.\n\n         The quadrant array provides a way to incrementally\n         cache sort orderings, as they appear, so as to \n         make subsequent comparisons in fullGtU() complete\n         faster.  For repetitive blocks this makes a big\n         difference (but not big enough to be able to avoid\n         the fallback sorting mechanism, exponential radix sort).\n\n         The precise meaning is: at all times:\n\n            for 0 <= i < nblock and 0 <= j <= nblock\n\n            if block[i] != block[j], \n\n               then the relative values of quadrant[i] and \n                    quadrant[j] are meaningless.\n\n               else {\n                  if quadrant[i] < quadrant[j]\n                     then the string starting at i lexicographically\n                     precedes the string starting at j\n\n                  else if quadrant[i] > quadrant[j]\n                     then the string starting at j lexicographically\n                     precedes the string starting at i\n\n                  else\n                     the relative ordering of the strings starting\n                     at i and j has not yet been determined.\n               }\n      --*/\n      bigDone[ss] = True;\n\n      if (i < 255) {\n         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;\n         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;\n         Int32 shifts   = 0;\n\n         while ((bbSize >> shifts) > 65534) shifts++;\n\n         for (j = bbSize-1; j >= 0; j--) {\n            Int32 a2update     = ptr[bbStart + j];\n            UInt16 qVal        = (UInt16)(j >> shifts);\n            quadrant[a2update] = qVal;\n            if (a2update < BZ_N_OVERSHOOT)\n               quadrant[a2update + nblock] = qVal;\n         }\n         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );\n      }\n\n   }\n\n   if (verb >= 4)\n      VPrintf3 ( \"        %d pointers, %d sorted, %d scanned\\n\",\n                 nblock, numQSorted, nblock - numQSorted );\n}\n\n#undef BIGFREQ\n#undef SETMASK\n#undef CLEARMASK\n\n\n/*---------------------------------------------*/\n/* Pre:\n      nblock > 0\n      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]\n      ((UChar*)arr2)  [0 .. nblock-1] holds block\n      arr1 exists for [0 .. nblock-1]\n\n   Post:\n      ((UChar*)arr2) [0 .. nblock-1] holds block\n      All other areas of block destroyed\n      ftab [ 0 .. 65536 ] destroyed\n      arr1 [0 .. nblock-1] holds sorted order\n*/\nvoid BZ2_blockSort ( EState* s )\n{\n   UInt32* ptr    = s->ptr; \n   UChar*  block  = s->block;\n   UInt32* ftab   = s->ftab;\n   Int32   nblock = s->nblock;\n   Int32   verb   = s->verbosity;\n   Int32   wfact  = s->workFactor;\n   UInt16* quadrant;\n   Int32   budget;\n   Int32   budgetInit;\n   Int32   i;\n\n   if (nblock < 10000) {\n      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n   } else {\n      /* Calculate the location for quadrant, remembering to get\n         the alignment right.  Assumes that &(block[0]) is at least\n         2-byte aligned -- this should be ok since block is really\n         the first section of arr2.\n      */\n      i = nblock+BZ_N_OVERSHOOT;\n      if (i & 1) i++;\n      quadrant = (UInt16*)(&(block[i]));\n\n      /* (wfact-1) / 3 puts the default-factor-30\n         transition point at very roughly the same place as \n         with v0.1 and v0.9.0.  \n         Not that it particularly matters any more, since the\n         resulting compressed stream is now the same regardless\n         of whether or not we use the main sort or fallback sort.\n      */\n      if (wfact < 1  ) wfact = 1;\n      if (wfact > 100) wfact = 100;\n      budgetInit = nblock * ((wfact-1) / 3);\n      budget = budgetInit;\n\n      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );\n      if (verb >= 3) \n         VPrintf3 ( \"      %d work, %d block, ratio %5.2f\\n\",\n                    budgetInit - budget,\n                    nblock, \n                    (float)(budgetInit - budget) /\n                    (float)(nblock==0 ? 1 : nblock) ); \n      if (budget < 0) {\n         if (verb >= 2) \n            VPrintf0 ( \"    too repetitive; using fallback\"\n                       \" sorting algorithm\\n\" );\n         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );\n      }\n   }\n\n   s->origPtr = -1;\n   for (i = 0; i < s->nblock; i++)\n      if (ptr[i] == 0)\n         { s->origPtr = i; break; };\n\n   AssertH( s->origPtr != -1, 1003 );\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       blocksort.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/bzlib.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Library top-level functions.                          ---*/\n/*---                                             bzlib.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n/* CHANGES\n   0.9.0    -- original version.\n   0.9.0a/b -- no changes in this file.\n   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().\n     fixed bzWrite/bzRead to ignore zero-length requests.\n     fixed bzread to correctly handle read requests after EOF.\n     wrong parameter order in call to bzDecompressInit in\n     bzBuffToBuffDecompress.  Fixed.\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Compression stuff                           ---*/\n/*---------------------------------------------------*/\n\n\n/*---------------------------------------------------*/\n#ifndef BZ_NO_STDIO\nvoid BZ2_bz__AssertH__fail ( int errcode )\n{\n   fprintf(stderr, \n      \"\\n\\nbzip2/libbzip2: internal error number %d.\\n\"\n      \"This is a bug in bzip2/libbzip2, %s.\\n\"\n      \"Please report it to me at: jseward@bzip.org.  If this happened\\n\"\n      \"when you were using some program which uses libbzip2 as a\\n\"\n      \"component, you should also report this bug to the author(s)\\n\"\n      \"of that program.  Please make an effort to report this bug;\\n\"\n      \"timely and accurate bug reports eventually lead to higher\\n\"\n      \"quality software.  Thanks.  Julian Seward, 10 December 2007.\\n\\n\",\n      errcode,\n      BZ2_bzlibVersion()\n   );\n\n   if (errcode == 1007) {\n   fprintf(stderr,\n      \"\\n*** A special note about internal error number 1007 ***\\n\"\n      \"\\n\"\n      \"Experience suggests that a common cause of i.e. 1007\\n\"\n      \"is unreliable memory or other hardware.  The 1007 assertion\\n\"\n      \"just happens to cross-check the results of huge numbers of\\n\"\n      \"memory reads/writes, and so acts (unintendedly) as a stress\\n\"\n      \"test of your memory system.\\n\"\n      \"\\n\"\n      \"I suggest the following: try compressing the file again,\\n\"\n      \"possibly monitoring progress in detail with the -vv flag.\\n\"\n      \"\\n\"\n      \"* If the error cannot be reproduced, and/or happens at different\\n\"\n      \"  points in compression, you may have a flaky memory system.\\n\"\n      \"  Try a memory-test program.  I have used Memtest86\\n\"\n      \"  (www.memtest86.com).  At the time of writing it is free (GPLd).\\n\"\n      \"  Memtest86 tests memory much more thorougly than your BIOSs\\n\"\n      \"  power-on test, and may find failures that the BIOS doesn't.\\n\"\n      \"\\n\"\n      \"* If the error can be repeatably reproduced, this is a bug in\\n\"\n      \"  bzip2, and I would very much like to hear about it.  Please\\n\"\n      \"  let me know, and, ideally, save a copy of the file causing the\\n\"\n      \"  problem -- without which I will be unable to investigate it.\\n\"\n      \"\\n\"\n   );\n   }\n\n   exit(3);\n}\n#endif\n\n\n/*---------------------------------------------------*/\nstatic\nint bz_config_ok ( void )\n{\n   if (sizeof(int)   != 4) return 0;\n   if (sizeof(short) != 2) return 0;\n   if (sizeof(char)  != 1) return 0;\n   return 1;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid* default_bzalloc ( void* opaque, Int32 items, Int32 size )\n{\n   void* v = malloc ( items * size );\n   return v;\n}\n\nstatic\nvoid default_bzfree ( void* opaque, void* addr )\n{\n   if (addr != NULL) free ( addr );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid prepare_new_block ( EState* s )\n{\n   Int32 i;\n   s->nblock = 0;\n   s->numZ = 0;\n   s->state_out_pos = 0;\n   BZ_INITIALISE_CRC ( s->blockCRC );\n   for (i = 0; i < 256; i++) s->inUse[i] = False;\n   s->blockNo++;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid init_RL ( EState* s )\n{\n   s->state_in_ch  = 256;\n   s->state_in_len = 0;\n}\n\n\nstatic\nBool isempty_RL ( EState* s )\n{\n   if (s->state_in_ch < 256 && s->state_in_len > 0)\n      return False; else\n      return True;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressInit) \n                    ( bz_stream* strm, \n                     int        blockSize100k,\n                     int        verbosity,\n                     int        workFactor )\n{\n   Int32   n;\n   EState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL || \n       blockSize100k < 1 || blockSize100k > 9 ||\n       workFactor < 0 || workFactor > 250)\n     return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = (EState*)BZALLOC( sizeof(EState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm = strm;\n\n   s->arr1 = NULL;\n   s->arr2 = NULL;\n   s->ftab = NULL;\n\n   n       = 100000 * blockSize100k;\n   s->arr1 = (UInt32*)BZALLOC( n                  * sizeof(UInt32) );\n   s->arr2 = (UInt32*)BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );\n   s->ftab = (UInt32*)BZALLOC( 65537              * sizeof(UInt32) );\n\n   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {\n      if (s->arr1 != NULL) BZFREE(s->arr1);\n      if (s->arr2 != NULL) BZFREE(s->arr2);\n      if (s->ftab != NULL) BZFREE(s->ftab);\n      if (s       != NULL) BZFREE(s);\n      return BZ_MEM_ERROR;\n   }\n\n   s->blockNo           = 0;\n   s->state             = BZ_S_INPUT;\n   s->mode              = BZ_M_RUNNING;\n   s->combinedCRC       = 0;\n   s->blockSize100k     = blockSize100k;\n   s->nblockMAX         = 100000 * blockSize100k - 19;\n   s->verbosity         = verbosity;\n   s->workFactor        = workFactor;\n\n   s->block             = (UChar*)s->arr2;\n   s->mtfv              = (UInt16*)s->arr1;\n   s->zbits             = NULL;\n   s->ptr               = (UInt32*)s->arr1;\n\n   strm->state          = s;\n   strm->total_in_lo32  = 0;\n   strm->total_in_hi32  = 0;\n   strm->total_out_lo32 = 0;\n   strm->total_out_hi32 = 0;\n   init_RL ( s );\n   prepare_new_block ( s );\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid add_pair_to_block ( EState* s )\n{\n   Int32 i;\n   UChar ch = (UChar)(s->state_in_ch);\n   for (i = 0; i < s->state_in_len; i++) {\n      BZ_UPDATE_CRC( s->blockCRC, ch );\n   }\n   s->inUse[s->state_in_ch] = True;\n   switch (s->state_in_len) {\n      case 1:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 2:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      case 3:\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         break;\n      default:\n         s->inUse[s->state_in_len-4] = True;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = (UChar)ch; s->nblock++;\n         s->block[s->nblock] = ((UChar)(s->state_in_len-4));\n         s->nblock++;\n         break;\n   }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid flush_RL ( EState* s )\n{\n   if (s->state_in_ch < 256) add_pair_to_block ( s );\n   init_RL ( s );\n}\n\n\n/*---------------------------------------------------*/\n#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \\\n{                                                 \\\n   UInt32 zchh = (UInt32)(zchh0);                 \\\n   /*-- fast track the common case --*/           \\\n   if (zchh != zs->state_in_ch &&                 \\\n       zs->state_in_len == 1) {                   \\\n      UChar ch = (UChar)(zs->state_in_ch);        \\\n      BZ_UPDATE_CRC( zs->blockCRC, ch );          \\\n      zs->inUse[zs->state_in_ch] = True;          \\\n      zs->block[zs->nblock] = (UChar)ch;          \\\n      zs->nblock++;                               \\\n      zs->state_in_ch = zchh;                     \\\n   }                                              \\\n   else                                           \\\n   /*-- general, uncommon cases --*/              \\\n   if (zchh != zs->state_in_ch ||                 \\\n      zs->state_in_len == 255) {                  \\\n      if (zs->state_in_ch < 256)                  \\\n         add_pair_to_block ( zs );                \\\n      zs->state_in_ch = zchh;                     \\\n      zs->state_in_len = 1;                       \\\n   } else {                                       \\\n      zs->state_in_len++;                         \\\n   }                                              \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_input_until_stop ( EState* s )\n{\n   Bool progress_in = False;\n\n   if (s->mode == BZ_M_RUNNING) {\n\n      /*-- fast track the common case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n      }\n\n   } else {\n\n      /*-- general, uncommon case --*/\n      while (True) {\n         /*-- block full? --*/\n         if (s->nblock >= s->nblockMAX) break;\n         /*-- no input? --*/\n         if (s->strm->avail_in == 0) break;\n         /*-- flush/finish end? --*/\n         if (s->avail_in_expect == 0) break;\n         progress_in = True;\n         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); \n         s->strm->next_in++;\n         s->strm->avail_in--;\n         s->strm->total_in_lo32++;\n         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;\n         s->avail_in_expect--;\n      }\n   }\n   return progress_in;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool copy_output_until_stop ( EState* s )\n{\n   Bool progress_out = False;\n\n   while (True) {\n\n      /*-- no output space? --*/\n      if (s->strm->avail_out == 0) break;\n\n      /*-- block done? --*/\n      if (s->state_out_pos >= s->numZ) break;\n\n      progress_out = True;\n      *(s->strm->next_out) = s->zbits[s->state_out_pos];\n      s->state_out_pos++;\n      s->strm->avail_out--;\n      s->strm->next_out++;\n      s->strm->total_out_lo32++;\n      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n   }\n\n   return progress_out;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nBool handle_compress ( bz_stream* strm )\n{\n   Bool progress_in  = False;\n   Bool progress_out = False;\n   EState* s = (EState*)strm->state;\n   \n   while (True) {\n\n      if (s->state == BZ_S_OUTPUT) {\n         progress_out |= copy_output_until_stop ( s );\n         if (s->state_out_pos < s->numZ) break;\n         if (s->mode == BZ_M_FINISHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n         prepare_new_block ( s );\n         s->state = BZ_S_INPUT;\n         if (s->mode == BZ_M_FLUSHING && \n             s->avail_in_expect == 0 &&\n             isempty_RL(s)) break;\n      }\n\n      if (s->state == BZ_S_INPUT) {\n         progress_in |= copy_input_until_stop ( s );\n         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {\n            flush_RL ( s );\n            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->nblock >= s->nblockMAX) {\n            BZ2_compressBlock ( s, False );\n            s->state = BZ_S_OUTPUT;\n         }\n         else\n         if (s->strm->avail_in == 0) {\n            break;\n         }\n      }\n\n   }\n\n   return progress_in || progress_out;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )\n{\n   Bool progress;\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (EState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   preswitch:\n   switch (s->mode) {\n\n      case BZ_M_IDLE:\n         return BZ_SEQUENCE_ERROR;\n\n      case BZ_M_RUNNING:\n         if (action == BZ_RUN) {\n            progress = handle_compress ( strm );\n            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;\n         } \n         else\n\t if (action == BZ_FLUSH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FLUSHING;\n            goto preswitch;\n         }\n         else\n         if (action == BZ_FINISH) {\n            s->avail_in_expect = strm->avail_in;\n            s->mode = BZ_M_FINISHING;\n            goto preswitch;\n         }\n         else \n            return BZ_PARAM_ERROR;\n\n      case BZ_M_FLUSHING:\n         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;\n         s->mode = BZ_M_RUNNING;\n         return BZ_RUN_OK;\n\n      case BZ_M_FINISHING:\n         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect != s->strm->avail_in) \n            return BZ_SEQUENCE_ERROR;\n         progress = handle_compress ( strm );\n         if (!progress) return BZ_SEQUENCE_ERROR;\n         if (s->avail_in_expect > 0 || !isempty_RL(s) ||\n             s->state_out_pos < s->numZ) return BZ_FINISH_OK;\n         s->mode = BZ_M_IDLE;\n         return BZ_STREAM_END;\n   }\n   return BZ_OK; /*--not reached--*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )\n{\n   EState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (EState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->arr1 != NULL) BZFREE(s->arr1);\n   if (s->arr2 != NULL) BZFREE(s->arr2);\n   if (s->ftab != NULL) BZFREE(s->ftab);\n   BZFREE(strm->state);\n\n   strm->state = NULL;   \n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/*--- Decompression stuff                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressInit) \n                     ( bz_stream* strm, \n                       int        verbosity,\n                       int        small )\n{\n   DState* s;\n\n   if (!bz_config_ok()) return BZ_CONFIG_ERROR;\n\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   if (small != 0 && small != 1) return BZ_PARAM_ERROR;\n   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;\n\n   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;\n   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;\n\n   s = (DState*)BZALLOC( sizeof(DState) );\n   if (s == NULL) return BZ_MEM_ERROR;\n   s->strm                  = strm;\n   strm->state              = s;\n   s->state                 = BZ_X_MAGIC_1;\n   s->bsLive                = 0;\n   s->bsBuff                = 0;\n   s->calculatedCombinedCRC = 0;\n   strm->total_in_lo32      = 0;\n   strm->total_in_hi32      = 0;\n   strm->total_out_lo32     = 0;\n   strm->total_out_hi32     = 0;\n   s->smallDecompress       = (Bool)small;\n   s->ll4                   = NULL;\n   s->ll16                  = NULL;\n   s->tt                    = NULL;\n   s->currBlockNo           = 0;\n   s->verbosity             = verbosity;\n\n   return BZ_OK;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_FAST ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n\n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n               \n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      /* restore */\n      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;\n      UChar         c_state_out_ch       = s->state_out_ch;\n      Int32         c_state_out_len      = s->state_out_len;\n      Int32         c_nblock_used        = s->nblock_used;\n      Int32         c_k0                 = s->k0;\n      UInt32*       c_tt                 = s->tt;\n      UInt32        c_tPos               = s->tPos;\n      char*         cs_next_out          = s->strm->next_out;\n      unsigned int  cs_avail_out         = s->strm->avail_out;\n      Int32         ro_blockSize100k     = s->blockSize100k;\n      /* end restore */\n\n      UInt32       avail_out_INIT = cs_avail_out;\n      Int32        s_save_nblockPP = s->save_nblock+1;\n      unsigned int total_out_lo32_old;\n\n      while (True) {\n\n         /* try to finish existing run */\n         if (c_state_out_len > 0) {\n            while (True) {\n               if (cs_avail_out == 0) goto return_notr;\n               if (c_state_out_len == 1) break;\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               c_state_out_len--;\n               cs_next_out++;\n               cs_avail_out--;\n            }\n            s_state_out_len_eq_one:\n            {\n               if (cs_avail_out == 0) { \n                  c_state_out_len = 1; goto return_notr;\n               };\n               *( (UChar*)(cs_next_out) ) = c_state_out_ch;\n               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );\n               cs_next_out++;\n               cs_avail_out--;\n            }\n         }   \n         /* Only caused by corrupt data stream? */\n         if (c_nblock_used > s_save_nblockPP)\n            return True;\n\n         /* can a new run be started? */\n         if (c_nblock_used == s_save_nblockPP) {\n            c_state_out_len = 0; goto return_notr;\n         };   \n         c_state_out_ch = c_k0;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (k1 != c_k0) { \n            c_k0 = k1; goto s_state_out_len_eq_one; \n         };\n         if (c_nblock_used == s_save_nblockPP) \n            goto s_state_out_len_eq_one;\n   \n         c_state_out_len = 2;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         c_state_out_len = 3;\n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         if (c_nblock_used == s_save_nblockPP) continue;\n         if (k1 != c_k0) { c_k0 = k1; continue; };\n   \n         BZ_GET_FAST_C(k1); c_nblock_used++;\n         c_state_out_len = ((Int32)k1) + 4;\n         BZ_GET_FAST_C(c_k0); c_nblock_used++;\n      }\n\n      return_notr:\n      total_out_lo32_old = s->strm->total_out_lo32;\n      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);\n      if (s->strm->total_out_lo32 < total_out_lo32_old)\n         s->strm->total_out_hi32++;\n\n      /* save */\n      s->calculatedBlockCRC = c_calculatedBlockCRC;\n      s->state_out_ch       = c_state_out_ch;\n      s->state_out_len      = c_state_out_len;\n      s->nblock_used        = c_nblock_used;\n      s->k0                 = c_k0;\n      s->tt                 = c_tt;\n      s->tPos               = c_tPos;\n      s->strm->next_out     = cs_next_out;\n      s->strm->avail_out    = cs_avail_out;\n      /* end save */\n   }\n   return False;\n}\n\n\n\n/*---------------------------------------------------*/\nInt32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )\n{\n   Int32 nb, na, mid;\n   nb = 0;\n   na = 256;\n   do {\n      mid = (nb + na) >> 1;\n      if (indx >= cftab[mid]) nb = mid; else na = mid;\n   }\n   while (na - nb != 1);\n   return nb;\n}\n\n\n/*---------------------------------------------------*/\n/* Return  True iff data corruption is discovered.\n   Returns False if there is no problem.\n*/\nstatic\nBool unRLE_obuf_to_output_SMALL ( DState* s )\n{\n   UChar k1;\n\n   if (s->blockRandomised) {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; \n         k1 ^= BZ_RAND_MASK; s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; \n         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;\n      }\n\n   } else {\n\n      while (True) {\n         /* try to finish existing run */\n         while (True) {\n            if (s->strm->avail_out == 0) return False;\n            if (s->state_out_len == 0) break;\n            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;\n            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );\n            s->state_out_len--;\n            s->strm->next_out++;\n            s->strm->avail_out--;\n            s->strm->total_out_lo32++;\n            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;\n         }\n   \n         /* can a new run be started? */\n         if (s->nblock_used == s->save_nblock+1) return False;\n\n         /* Only caused by corrupt data stream? */\n         if (s->nblock_used > s->save_nblock+1)\n            return True;\n   \n         s->state_out_len = 1;\n         s->state_out_ch = s->k0;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 2;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         s->state_out_len = 3;\n         BZ_GET_SMALL(k1); s->nblock_used++;\n         if (s->nblock_used == s->save_nblock+1) continue;\n         if (k1 != s->k0) { s->k0 = k1; continue; };\n   \n         BZ_GET_SMALL(k1); s->nblock_used++;\n         s->state_out_len = ((Int32)k1) + 4;\n         BZ_GET_SMALL(s->k0); s->nblock_used++;\n      }\n\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompress) ( bz_stream *strm )\n{\n   Bool    corrupt;\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (DState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   while (True) {\n      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;\n      if (s->state == BZ_X_OUTPUT) {\n         if (s->smallDecompress)\n            corrupt = unRLE_obuf_to_output_SMALL ( s ); else\n            corrupt = unRLE_obuf_to_output_FAST  ( s );\n         if (corrupt) return BZ_DATA_ERROR;\n         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {\n            BZ_FINALISE_CRC ( s->calculatedBlockCRC );\n            if (s->verbosity >= 3) \n               VPrintf2 ( \" {0x%08x, 0x%08x}\", s->storedBlockCRC, \n                          s->calculatedBlockCRC );\n            if (s->verbosity >= 2) VPrintf0 ( \"]\" );\n            if (s->calculatedBlockCRC != s->storedBlockCRC)\n               return BZ_DATA_ERROR;\n            s->calculatedCombinedCRC \n               = (s->calculatedCombinedCRC << 1) | \n                    (s->calculatedCombinedCRC >> 31);\n            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;\n            s->state = BZ_X_BLKHDR_1;\n         } else {\n            return BZ_OK;\n         }\n      }\n      if (s->state >= BZ_X_MAGIC_1) {\n         Int32 r = BZ2_decompress ( s );\n         if (r == BZ_STREAM_END) {\n            if (s->verbosity >= 3)\n               VPrintf2 ( \"\\n    combined CRCs: stored = 0x%08x, computed = 0x%08x\", \n                          s->storedCombinedCRC, s->calculatedCombinedCRC );\n            if (s->calculatedCombinedCRC != s->storedCombinedCRC)\n               return BZ_DATA_ERROR;\n            return r;\n         }\n         if (s->state != BZ_X_OUTPUT) return r;\n      }\n   }\n\n   AssertH ( 0, 6001 );\n\n   return 0;  /*NOTREACHED*/\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )\n{\n   DState* s;\n   if (strm == NULL) return BZ_PARAM_ERROR;\n   s = (DState*)strm->state;\n   if (s == NULL) return BZ_PARAM_ERROR;\n   if (s->strm != strm) return BZ_PARAM_ERROR;\n\n   if (s->tt   != NULL) BZFREE(s->tt);\n   if (s->ll16 != NULL) BZFREE(s->ll16);\n   if (s->ll4  != NULL) BZFREE(s->ll4);\n\n   BZFREE(strm->state);\n   strm->state = NULL;\n\n   return BZ_OK;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n/*--- File I/O stuff                              ---*/\n/*---------------------------------------------------*/\n\n#define BZ_SETERR(eee)                    \\\n{                                         \\\n   if (bzerror != NULL) *bzerror = eee;   \\\n   if (bzf != NULL) bzf->lastErr = eee;   \\\n}\n\ntypedef \n   struct {\n      FILE*     handle;\n      Char      buf[BZ_MAX_UNUSED];\n      Int32     bufN;\n      Bool      writing;\n      bz_stream strm;\n      Int32     lastErr;\n      Bool      initialisedOk;\n   }\n   bzFile;\n\n\n/*---------------------------------------------*/\nstatic Bool myfeof ( FILE* f )\n{\n   Int32 c = fgetc ( f );\n   if (c == EOF) return True;\n   ungetc ( c, f );\n   return False;\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzWriteOpen) \n                    ( int*  bzerror,      \n                      FILE* f, \n                      int   blockSize100k, \n                      int   verbosity,\n                      int   workFactor )\n{\n   Int32   ret;\n   bzFile* bzf = NULL;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL ||\n       (blockSize100k < 1 || blockSize100k > 9) ||\n       (workFactor < 0 || workFactor > 250) ||\n       (verbosity < 0 || verbosity > 4))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = (bzFile*)malloc ( sizeof(bzFile) );\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n   bzf->initialisedOk = False;\n   bzf->bufN          = 0;\n   bzf->handle        = f;\n   bzf->writing       = True;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n\n   if (workFactor == 0) workFactor = 30;\n   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = 0;\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWrite)\n             ( int*    bzerror, \n               BZFILE* b, \n               void*   buf, \n               int     len )\n{\n   Int32 n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return; };\n\n   bzf->strm.avail_in = len;\n   bzf->strm.next_in  = (char*)buf;\n\n   while (True) {\n      bzf->strm.avail_out = BZ_MAX_UNUSED;\n      bzf->strm.next_out = bzf->buf;\n      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );\n      if (ret != BZ_RUN_OK)\n         { BZ_SETERR(ret); return; };\n\n      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n         n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                       n, bzf->handle );\n         if (n != n2 || ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return; };\n      }\n\n      if (bzf->strm.avail_in == 0)\n         { BZ_SETERR(BZ_OK); return; };\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzWriteClose)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in,\n                    unsigned int* nbytes_out )\n{\n   BZ2_bzWriteClose64 ( bzerror, b, abandon, \n                        nbytes_in, NULL, nbytes_out, NULL );\n}\n\n\nvoid BZ_API(BZ2_bzWriteClose64)\n                  ( int*          bzerror, \n                    BZFILE*       b, \n                    int           abandon,\n                    unsigned int* nbytes_in_lo32,\n                    unsigned int* nbytes_in_hi32,\n                    unsigned int* nbytes_out_lo32,\n                    unsigned int* nbytes_out_hi32 )\n{\n   Int32   n, n2, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n   if (!(bzf->writing))\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (ferror(bzf->handle))\n      { BZ_SETERR(BZ_IO_ERROR); return; };\n\n   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;\n   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;\n   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;\n   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;\n\n   if ((!abandon) && bzf->lastErr == BZ_OK) {\n      while (True) {\n         bzf->strm.avail_out = BZ_MAX_UNUSED;\n         bzf->strm.next_out = bzf->buf;\n         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );\n         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)\n            { BZ_SETERR(ret); return; };\n\n         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {\n            n = BZ_MAX_UNUSED - bzf->strm.avail_out;\n            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), \n                          n, bzf->handle );\n            if (n != n2 || ferror(bzf->handle))\n               { BZ_SETERR(BZ_IO_ERROR); return; };\n         }\n\n         if (ret == BZ_STREAM_END) break;\n      }\n   }\n\n   if ( !abandon && !ferror ( bzf->handle ) ) {\n      fflush ( bzf->handle );\n      if (ferror(bzf->handle))\n         { BZ_SETERR(BZ_IO_ERROR); return; };\n   }\n\n   if (nbytes_in_lo32 != NULL)\n      *nbytes_in_lo32 = bzf->strm.total_in_lo32;\n   if (nbytes_in_hi32 != NULL)\n      *nbytes_in_hi32 = bzf->strm.total_in_hi32;\n   if (nbytes_out_lo32 != NULL)\n      *nbytes_out_lo32 = bzf->strm.total_out_lo32;\n   if (nbytes_out_hi32 != NULL)\n      *nbytes_out_hi32 = bzf->strm.total_out_hi32;\n\n   BZ_SETERR(BZ_OK);\n   BZ2_bzCompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nBZFILE* BZ_API(BZ2_bzReadOpen) \n                   ( int*  bzerror, \n                     FILE* f, \n                     int   verbosity,\n                     int   small,\n                     void* unused,\n                     int   nUnused )\n{\n   bzFile* bzf = NULL;\n   int     ret;\n\n   BZ_SETERR(BZ_OK);\n\n   if (f == NULL || \n       (small != 0 && small != 1) ||\n       (verbosity < 0 || verbosity > 4) ||\n       (unused == NULL && nUnused != 0) ||\n       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))\n      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };\n\n   if (ferror(f))\n      { BZ_SETERR(BZ_IO_ERROR); return NULL; };\n\n   bzf = (bzFile*)malloc ( sizeof(bzFile) );\n   if (bzf == NULL) \n      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };\n\n   BZ_SETERR(BZ_OK);\n\n   bzf->initialisedOk = False;\n   bzf->handle        = f;\n   bzf->bufN          = 0;\n   bzf->writing       = False;\n   bzf->strm.bzalloc  = NULL;\n   bzf->strm.bzfree   = NULL;\n   bzf->strm.opaque   = NULL;\n   \n   while (nUnused > 0) {\n      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;\n      unused = ((void*)( 1 + ((UChar*)(unused))  ));\n      nUnused--;\n   }\n\n   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );\n   if (ret != BZ_OK)\n      { BZ_SETERR(ret); free(bzf); return NULL; };\n\n   bzf->strm.avail_in = bzf->bufN;\n   bzf->strm.next_in  = bzf->buf;\n\n   bzf->initialisedOk = True;\n   return bzf;   \n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )\n{\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_OK); return; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n\n   if (bzf->initialisedOk)\n      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );\n   free ( bzf );\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzRead) \n           ( int*    bzerror, \n             BZFILE* b, \n             void*   buf, \n             int     len )\n{\n   Int32   n, ret;\n   bzFile* bzf = (bzFile*)b;\n\n   BZ_SETERR(BZ_OK);\n\n   if (bzf == NULL || buf == NULL || len < 0)\n      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };\n\n   if (bzf->writing)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };\n\n   if (len == 0)\n      { BZ_SETERR(BZ_OK); return 0; };\n\n   bzf->strm.avail_out = len;\n   bzf->strm.next_out = (char*)buf;\n\n   while (True) {\n\n      if (ferror(bzf->handle)) \n         { BZ_SETERR(BZ_IO_ERROR); return 0; };\n\n      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {\n         n = fread ( bzf->buf, sizeof(UChar), \n                     BZ_MAX_UNUSED, bzf->handle );\n         if (ferror(bzf->handle))\n            { BZ_SETERR(BZ_IO_ERROR); return 0; };\n         bzf->bufN = n;\n         bzf->strm.avail_in = bzf->bufN;\n         bzf->strm.next_in = bzf->buf;\n      }\n\n      ret = BZ2_bzDecompress ( &(bzf->strm) );\n\n      if (ret != BZ_OK && ret != BZ_STREAM_END)\n         { BZ_SETERR(ret); return 0; };\n\n      if (ret == BZ_OK && myfeof(bzf->handle) && \n          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)\n         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };\n\n      if (ret == BZ_STREAM_END)\n         { BZ_SETERR(BZ_STREAM_END);\n           return len - bzf->strm.avail_out; };\n      if (bzf->strm.avail_out == 0)\n         { BZ_SETERR(BZ_OK); return len; };\n      \n   }\n\n   return 0; /*not reached*/\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzReadGetUnused) \n                     ( int*    bzerror, \n                       BZFILE* b, \n                       void**  unused, \n                       int*    nUnused )\n{\n   bzFile* bzf = (bzFile*)b;\n   if (bzf == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n   if (bzf->lastErr != BZ_STREAM_END)\n      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };\n   if (unused == NULL || nUnused == NULL)\n      { BZ_SETERR(BZ_PARAM_ERROR); return; };\n\n   BZ_SETERR(BZ_OK);\n   *nUnused = bzf->strm.avail_in;\n   *unused = bzf->strm.next_in;\n}\n#endif\n\n\n/*---------------------------------------------------*/\n/*--- Misc convenience stuff                      ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffCompress) \n                         ( char*         dest, \n                           unsigned int* destLen,\n                           char*         source, \n                           unsigned int  sourceLen,\n                           int           blockSize100k, \n                           int           verbosity, \n                           int           workFactor )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       blockSize100k < 1 || blockSize100k > 9 ||\n       verbosity < 0 || verbosity > 4 ||\n       workFactor < 0 || workFactor > 250) \n      return BZ_PARAM_ERROR;\n\n   if (workFactor == 0) workFactor = 30;\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzCompressInit ( &strm, blockSize100k, \n                              verbosity, workFactor );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzCompress ( &strm, BZ_FINISH );\n   if (ret == BZ_FINISH_OK) goto output_overflow;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;   \n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow:\n   BZ2_bzCompressEnd ( &strm );\n   return BZ_OUTBUFF_FULL;\n\n   errhandler:\n   BZ2_bzCompressEnd ( &strm );\n   return ret;\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzBuffToBuffDecompress) \n                           ( char*         dest, \n                             unsigned int* destLen,\n                             char*         source, \n                             unsigned int  sourceLen,\n                             int           small,\n                             int           verbosity )\n{\n   bz_stream strm;\n   int ret;\n\n   if (dest == NULL || destLen == NULL || \n       source == NULL ||\n       (small != 0 && small != 1) ||\n       verbosity < 0 || verbosity > 4) \n          return BZ_PARAM_ERROR;\n\n   strm.bzalloc = NULL;\n   strm.bzfree = NULL;\n   strm.opaque = NULL;\n   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );\n   if (ret != BZ_OK) return ret;\n\n   strm.next_in = source;\n   strm.next_out = dest;\n   strm.avail_in = sourceLen;\n   strm.avail_out = *destLen;\n\n   ret = BZ2_bzDecompress ( &strm );\n   if (ret == BZ_OK) goto output_overflow_or_eof;\n   if (ret != BZ_STREAM_END) goto errhandler;\n\n   /* normal termination */\n   *destLen -= strm.avail_out;\n   BZ2_bzDecompressEnd ( &strm );\n   return BZ_OK;\n\n   output_overflow_or_eof:\n   if (strm.avail_out > 0) {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_UNEXPECTED_EOF;\n   } else {\n      BZ2_bzDecompressEnd ( &strm );\n      return BZ_OUTBUFF_FULL;\n   };      \n\n   errhandler:\n   BZ2_bzDecompressEnd ( &strm );\n   return ret; \n}\n\n\n/*---------------------------------------------------*/\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\n/*--\n   return version like \"0.9.5d, 4-Sept-1999\".\n--*/\nconst char * BZ_API(BZ2_bzlibVersion)(void)\n{\n   return BZ_VERSION;\n}\n\n\n#ifndef BZ_NO_STDIO\n/*---------------------------------------------------*/\n\n#if defined(_WIN32) || defined(OS2) || defined(MSDOS)\n#   include <fcntl.h>\n#   include <io.h>\n#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)\n#else\n#   define SET_BINARY_MODE(file)\n#endif\nstatic\nBZFILE * bzopen_or_bzdopen\n               ( const char *path,   /* no use when bzdopen */\n                 int fd,             /* no use when bzdopen */\n                 const char *mode,\n                 int open_mode)      /* bzopen: 0, bzdopen:1 */\n{\n   int    bzerr;\n   char   unused[BZ_MAX_UNUSED];\n   int    blockSize100k = 9;\n   int    writing       = 0;\n   char   mode2[10]     = \"\";\n   FILE   *fp           = NULL;\n   BZFILE *bzfp         = NULL;\n   int    verbosity     = 0;\n   int    workFactor    = 30;\n   int    smallMode     = 0;\n   int    nUnused       = 0; \n\n   if (mode == NULL) return NULL;\n   while (*mode) {\n      switch (*mode) {\n      case 'r':\n         writing = 0; break;\n      case 'w':\n         writing = 1; break;\n      case 's':\n         smallMode = 1; break;\n      default:\n         if (isdigit((int)(*mode))) {\n            blockSize100k = *mode-BZ_HDR_0;\n         }\n      }\n      mode++;\n   }\n   strcat(mode2, writing ? \"w\" : \"r\" );\n   strcat(mode2,\"b\");   /* binary mode */\n\n   if (open_mode==0) {\n      if (path==NULL || strcmp(path,\"\")==0) {\n        fp = (writing ? stdout : stdin);\n        SET_BINARY_MODE(fp);\n      } else {\n        fp = fopen(path,mode2);\n      }\n   } else {\n#ifdef BZ_STRICT_ANSI\n      fp = NULL;\n#else\n      fp = fdopen(fd,mode2);\n#endif\n   }\n   if (fp == NULL) return NULL;\n\n   if (writing) {\n      /* Guard against total chaos and anarchy -- JRS */\n      if (blockSize100k < 1) blockSize100k = 1;\n      if (blockSize100k > 9) blockSize100k = 9; \n      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,\n                             verbosity,workFactor);\n   } else {\n      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,\n                            unused,nUnused);\n   }\n   if (bzfp == NULL) {\n      if (fp != stdin && fp != stdout) fclose(fp);\n      return NULL;\n   }\n   return bzfp;\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   open file for read or write.\n      ex) bzopen(\"file\",\"w9\")\n      case path=\"\" or NULL => use stdin or stdout.\n--*/\nBZFILE * BZ_API(BZ2_bzopen)\n               ( const char *path,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);\n}\n\n\n/*---------------------------------------------------*/\nBZFILE * BZ_API(BZ2_bzdopen)\n               ( int fd,\n                 const char *mode )\n{\n   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )\n{\n   int bzerr, nread;\n   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;\n   nread = BZ2_bzRead(&bzerr,b,buf,len);\n   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {\n      return nread;\n   } else {\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )\n{\n   int bzerr;\n\n   BZ2_bzWrite(&bzerr,b,buf,len);\n   if(bzerr == BZ_OK){\n      return len;\n   }else{\n      return -1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nint BZ_API(BZ2_bzflush) (BZFILE *b)\n{\n   /* do nothing now... */\n   return 0;\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ_API(BZ2_bzclose) (BZFILE* b)\n{\n   int bzerr;\n   FILE *fp;\n   \n   if (b==NULL) {return;}\n   fp = ((bzFile *)b)->handle;\n   if(((bzFile*)b)->writing){\n      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);\n      if(bzerr != BZ_OK){\n         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);\n      }\n   }else{\n      BZ2_bzReadClose(&bzerr,b);\n   }\n   if(fp!=stdin && fp!=stdout){\n      fclose(fp);\n   }\n}\n\n\n/*---------------------------------------------------*/\n/*--\n   return last error code \n--*/\nstatic const char *bzerrorstrings[] = {\n       \"OK\"\n      ,\"SEQUENCE_ERROR\"\n      ,\"PARAM_ERROR\"\n      ,\"MEM_ERROR\"\n      ,\"DATA_ERROR\"\n      ,\"DATA_ERROR_MAGIC\"\n      ,\"IO_ERROR\"\n      ,\"UNEXPECTED_EOF\"\n      ,\"OUTBUFF_FULL\"\n      ,\"CONFIG_ERROR\"\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n      ,\"???\"   /* for future */\n};\n\n\nconst char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)\n{\n   int err = ((bzFile *)b)->lastErr;\n\n   if(err>0) err = 0;\n   *errnum = err;\n   return bzerrorstrings[err*-1];\n}\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/bzlib.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Public header file for the library.                   ---*/\n/*---                                               bzlib.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_H\n#define _BZLIB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BZ_RUN               0\n#define BZ_FLUSH             1\n#define BZ_FINISH            2\n\n#define BZ_OK                0\n#define BZ_RUN_OK            1\n#define BZ_FLUSH_OK          2\n#define BZ_FINISH_OK         3\n#define BZ_STREAM_END        4\n#define BZ_SEQUENCE_ERROR    (-1)\n#define BZ_PARAM_ERROR       (-2)\n#define BZ_MEM_ERROR         (-3)\n#define BZ_DATA_ERROR        (-4)\n#define BZ_DATA_ERROR_MAGIC  (-5)\n#define BZ_IO_ERROR          (-6)\n#define BZ_UNEXPECTED_EOF    (-7)\n#define BZ_OUTBUFF_FULL      (-8)\n#define BZ_CONFIG_ERROR      (-9)\n\ntypedef \n   struct {\n      char *next_in;\n      unsigned int avail_in;\n      unsigned int total_in_lo32;\n      unsigned int total_in_hi32;\n\n      char *next_out;\n      unsigned int avail_out;\n      unsigned int total_out_lo32;\n      unsigned int total_out_hi32;\n\n      void *state;\n\n      void *(*bzalloc)(void *,int,int);\n      void (*bzfree)(void *,void *);\n      void *opaque;\n   } \n   bz_stream;\n\n\n#ifndef BZ_IMPORT\n#define BZ_EXPORT\n#endif\n\n#ifndef BZ_NO_STDIO\n/* Need a definitition for FILE */\n#include <stdio.h>\n#endif\n\n#ifdef _WIN32\n#   include <windows.h>\n#   ifdef small\n      /* windows.h define small to char */\n#      undef small\n#   endif\n#   ifdef BZ_EXPORT\n#   define BZ_API(func) WINAPI func\n#   define BZ_EXTERN extern\n#   else\n   /* import windows dll dynamically */\n#   define BZ_API(func) (WINAPI * func)\n#   define BZ_EXTERN\n#   endif\n#else\n#   define BZ_API(func) func\n#   define BZ_EXTERN extern\n#endif\n\n\n/*-- Core (low-level) library functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( \n      bz_stream* strm, \n      int        blockSize100k, \n      int        verbosity, \n      int        workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompress) ( \n      bz_stream* strm, \n      int action \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( \n      bz_stream *strm, \n      int       verbosity, \n      int       small\n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompress) ( \n      bz_stream* strm \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( \n      bz_stream *strm \n   );\n\n\n\n/*-- High(er) level library functions --*/\n\n#ifndef BZ_NO_STDIO\n#define BZ_MAX_UNUSED 5000\n\ntypedef void BZFILE;\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( \n      int*  bzerror,   \n      FILE* f, \n      int   verbosity, \n      int   small,\n      void* unused,    \n      int   nUnused \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadClose) ( \n      int*    bzerror, \n      BZFILE* b \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( \n      int*    bzerror, \n      BZFILE* b, \n      void**  unused,  \n      int*    nUnused \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzRead) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( \n      int*  bzerror,      \n      FILE* f, \n      int   blockSize100k, \n      int   verbosity, \n      int   workFactor \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWrite) ( \n      int*    bzerror, \n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in, \n      unsigned int* nbytes_out \n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( \n      int*          bzerror, \n      BZFILE*       b, \n      int           abandon, \n      unsigned int* nbytes_in_lo32, \n      unsigned int* nbytes_in_hi32, \n      unsigned int* nbytes_out_lo32, \n      unsigned int* nbytes_out_hi32\n   );\n#endif\n\n\n/*-- Utility functions --*/\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           blockSize100k, \n      int           verbosity, \n      int           workFactor \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( \n      char*         dest, \n      unsigned int* destLen,\n      char*         source, \n      unsigned int  sourceLen,\n      int           small, \n      int           verbosity \n   );\n\n\n/*--\n   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)\n   to support better zlib compatibility.\n   This code is not _officially_ part of libbzip2 (yet);\n   I haven't tested it, documented it, or considered the\n   threading-safeness of it.\n   If this code breaks, please contact both Yoshioka and me.\n--*/\n\nBZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (\n      void\n   );\n\n#ifndef BZ_NO_STDIO\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (\n      const char *path,\n      const char *mode\n   );\n\nBZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (\n      int        fd,\n      const char *mode\n   );\n         \nBZ_EXTERN int BZ_API(BZ2_bzread) (\n      BZFILE* b, \n      void* buf, \n      int len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzwrite) (\n      BZFILE* b, \n      void*   buf, \n      int     len \n   );\n\nBZ_EXTERN int BZ_API(BZ2_bzflush) (\n      BZFILE* b\n   );\n\nBZ_EXTERN void BZ_API(BZ2_bzclose) (\n      BZFILE* b\n   );\n\nBZ_EXTERN const char * BZ_API(BZ2_bzerror) (\n      BZFILE *b, \n      int    *errnum\n   );\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/*-------------------------------------------------------------*/\n/*--- end                                           bzlib.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/bzlib_private.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Private header file for the library.                  ---*/\n/*---                                       bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#ifndef _BZLIB_PRIVATE_H\n#define _BZLIB_PRIVATE_H\n\n#include <stdlib.h>\n\n#ifndef BZ_NO_STDIO\n#include <stdio.h>\n#include <ctype.h>\n#include <string.h>\n#endif\n\n#include \"bzlib.h\"\n\n\n\n/*-- General stuff. --*/\n\n#define BZ_VERSION  \"1.0.6, 6-Sept-2010\"\n\ntypedef char            Char;\ntypedef unsigned char   Bool;\ntypedef unsigned char   UChar;\ntypedef int             Int32;\ntypedef unsigned int    UInt32;\ntypedef short           Int16;\ntypedef unsigned short  UInt16;\n\n#define True  ((Bool)1)\n#define False ((Bool)0)\n\n#ifndef __GNUC__\n#define __inline__  /* */\n#endif \n\n#ifndef BZ_NO_STDIO\n\nextern void BZ2_bz__AssertH__fail ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }\n\n#if BZ_DEBUG\n#define AssertD(cond,msg) \\\n   { if (!(cond)) {       \\\n      fprintf ( stderr,   \\\n        \"\\n\\nlibbzip2(debug build): internal error\\n\\t%s\\n\", msg );\\\n      exit(1); \\\n   }}\n#else\n#define AssertD(cond,msg) /* */\n#endif\n\n#define VPrintf0(zf) \\\n   fprintf(stderr,zf)\n#define VPrintf1(zf,za1) \\\n   fprintf(stderr,zf,za1)\n#define VPrintf2(zf,za1,za2) \\\n   fprintf(stderr,zf,za1,za2)\n#define VPrintf3(zf,za1,za2,za3) \\\n   fprintf(stderr,zf,za1,za2,za3)\n#define VPrintf4(zf,za1,za2,za3,za4) \\\n   fprintf(stderr,zf,za1,za2,za3,za4)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) \\\n   fprintf(stderr,zf,za1,za2,za3,za4,za5)\n\n#else\n\nextern void bz_internal_error ( int errcode );\n#define AssertH(cond,errcode) \\\n   { if (!(cond)) bz_internal_error ( errcode ); }\n#define AssertD(cond,msg)                do { } while (0)\n#define VPrintf0(zf)                     do { } while (0)\n#define VPrintf1(zf,za1)                 do { } while (0)\n#define VPrintf2(zf,za1,za2)             do { } while (0)\n#define VPrintf3(zf,za1,za2,za3)         do { } while (0)\n#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)\n#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)\n\n#endif\n\n\n#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)\n#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))\n\n\n/*-- Header bytes. --*/\n\n#define BZ_HDR_B 0x42   /* 'B' */\n#define BZ_HDR_Z 0x5a   /* 'Z' */\n#define BZ_HDR_h 0x68   /* 'h' */\n#define BZ_HDR_0 0x30   /* '0' */\n  \n/*-- Constants for the back end. --*/\n\n#define BZ_MAX_ALPHA_SIZE 258\n#define BZ_MAX_CODE_LEN    23\n\n#define BZ_RUNA 0\n#define BZ_RUNB 1\n\n#define BZ_N_GROUPS 6\n#define BZ_G_SIZE   50\n#define BZ_N_ITERS  4\n\n#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))\n\n\n\n/*-- Stuff for randomising repetitive blocks. --*/\n\nextern Int32 BZ2_rNums[512];\n\n#define BZ_RAND_DECLS                          \\\n   Int32 rNToGo;                               \\\n   Int32 rTPos                                 \\\n\n#define BZ_RAND_INIT_MASK                      \\\n   s->rNToGo = 0;                              \\\n   s->rTPos  = 0                               \\\n\n#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)\n\n#define BZ_RAND_UPD_MASK                       \\\n   if (s->rNToGo == 0) {                       \\\n      s->rNToGo = BZ2_rNums[s->rTPos];         \\\n      s->rTPos++;                              \\\n      if (s->rTPos == 512) s->rTPos = 0;       \\\n   }                                           \\\n   s->rNToGo--;\n\n\n\n/*-- Stuff for doing CRCs. --*/\n\nextern UInt32 BZ2_crc32Table[256];\n\n#define BZ_INITIALISE_CRC(crcVar)              \\\n{                                              \\\n   crcVar = 0xffffffffL;                       \\\n}\n\n#define BZ_FINALISE_CRC(crcVar)                \\\n{                                              \\\n   crcVar = ~(crcVar);                         \\\n}\n\n#define BZ_UPDATE_CRC(crcVar,cha)              \\\n{                                              \\\n   crcVar = (crcVar << 8) ^                    \\\n            BZ2_crc32Table[(crcVar >> 24) ^    \\\n                           ((UChar)cha)];      \\\n}\n\n\n\n/*-- States and modes for compression. --*/\n\n#define BZ_M_IDLE      1\n#define BZ_M_RUNNING   2\n#define BZ_M_FLUSHING  3\n#define BZ_M_FINISHING 4\n\n#define BZ_S_OUTPUT    1\n#define BZ_S_INPUT     2\n\n#define BZ_N_RADIX 2\n#define BZ_N_QSORT 12\n#define BZ_N_SHELL 18\n#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)\n\n\n\n\n/*-- Structure holding all the compression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* mode this stream is in, and whether inputting */\n      /* or outputting data */\n      Int32    mode;\n      Int32    state;\n\n      /* remembers avail_in when flush/finish requested */\n      UInt32   avail_in_expect;\n\n      /* for doing the block sorting */\n      UInt32*  arr1;\n      UInt32*  arr2;\n      UInt32*  ftab;\n      Int32    origPtr;\n\n      /* aliases for arr1 and arr2 */\n      UInt32*  ptr;\n      UChar*   block;\n      UInt16*  mtfv;\n      UChar*   zbits;\n\n      /* for deciding when to use the fallback sorting algorithm */\n      Int32    workFactor;\n\n      /* run-length-encoding of the input */\n      UInt32   state_in_ch;\n      Int32    state_in_len;\n      BZ_RAND_DECLS;\n\n      /* input and output limits and current posns */\n      Int32    nblock;\n      Int32    nblockMAX;\n      Int32    numZ;\n      Int32    state_out_pos;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      UChar    unseqToSeq[256];\n\n      /* the buffer for bit stream creation */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* block and combined CRCs */\n      UInt32   blockCRC;\n      UInt32   combinedCRC;\n\n      /* misc administratium */\n      Int32    verbosity;\n      Int32    blockNo;\n      Int32    blockSize100k;\n\n      /* stuff for coding the MTF values */\n      Int32    nMTF;\n      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n\n      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      /* second dimension: only 3 needed; 4 makes index calculations faster */\n      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];\n\n   }\n   EState;\n\n\n\n/*-- externs for compression. --*/\n\nextern void \nBZ2_blockSort ( EState* );\n\nextern void \nBZ2_compressBlock ( EState*, Bool );\n\nextern void \nBZ2_bsInitWrite ( EState* );\n\nextern void \nBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );\n\nextern void \nBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );\n\n\n\n/*-- states for decompression. --*/\n\n#define BZ_X_IDLE        1\n#define BZ_X_OUTPUT      2\n\n#define BZ_X_MAGIC_1     10\n#define BZ_X_MAGIC_2     11\n#define BZ_X_MAGIC_3     12\n#define BZ_X_MAGIC_4     13\n#define BZ_X_BLKHDR_1    14\n#define BZ_X_BLKHDR_2    15\n#define BZ_X_BLKHDR_3    16\n#define BZ_X_BLKHDR_4    17\n#define BZ_X_BLKHDR_5    18\n#define BZ_X_BLKHDR_6    19\n#define BZ_X_BCRC_1      20\n#define BZ_X_BCRC_2      21\n#define BZ_X_BCRC_3      22\n#define BZ_X_BCRC_4      23\n#define BZ_X_RANDBIT     24\n#define BZ_X_ORIGPTR_1   25\n#define BZ_X_ORIGPTR_2   26\n#define BZ_X_ORIGPTR_3   27\n#define BZ_X_MAPPING_1   28\n#define BZ_X_MAPPING_2   29\n#define BZ_X_SELECTOR_1  30\n#define BZ_X_SELECTOR_2  31\n#define BZ_X_SELECTOR_3  32\n#define BZ_X_CODING_1    33\n#define BZ_X_CODING_2    34\n#define BZ_X_CODING_3    35\n#define BZ_X_MTF_1       36\n#define BZ_X_MTF_2       37\n#define BZ_X_MTF_3       38\n#define BZ_X_MTF_4       39\n#define BZ_X_MTF_5       40\n#define BZ_X_MTF_6       41\n#define BZ_X_ENDHDR_2    42\n#define BZ_X_ENDHDR_3    43\n#define BZ_X_ENDHDR_4    44\n#define BZ_X_ENDHDR_5    45\n#define BZ_X_ENDHDR_6    46\n#define BZ_X_CCRC_1      47\n#define BZ_X_CCRC_2      48\n#define BZ_X_CCRC_3      49\n#define BZ_X_CCRC_4      50\n\n\n\n/*-- Constants for the fast MTF decoder. --*/\n\n#define MTFA_SIZE 4096\n#define MTFL_SIZE 16\n\n\n\n/*-- Structure holding all the decompression-side stuff. --*/\n\ntypedef\n   struct {\n      /* pointer back to the struct bz_stream */\n      bz_stream* strm;\n\n      /* state indicator for this stream */\n      Int32    state;\n\n      /* for doing the final run-length decoding */\n      UChar    state_out_ch;\n      Int32    state_out_len;\n      Bool     blockRandomised;\n      BZ_RAND_DECLS;\n\n      /* the buffer for bit stream reading */\n      UInt32   bsBuff;\n      Int32    bsLive;\n\n      /* misc administratium */\n      Int32    blockSize100k;\n      Bool     smallDecompress;\n      Int32    currBlockNo;\n      Int32    verbosity;\n\n      /* for undoing the Burrows-Wheeler transform */\n      Int32    origPtr;\n      UInt32   tPos;\n      Int32    k0;\n      Int32    unzftab[256];\n      Int32    nblock_used;\n      Int32    cftab[257];\n      Int32    cftabCopy[257];\n\n      /* for undoing the Burrows-Wheeler transform (FAST) */\n      UInt32   *tt;\n\n      /* for undoing the Burrows-Wheeler transform (SMALL) */\n      UInt16   *ll16;\n      UChar    *ll4;\n\n      /* stored and calculated CRCs */\n      UInt32   storedBlockCRC;\n      UInt32   storedCombinedCRC;\n      UInt32   calculatedBlockCRC;\n      UInt32   calculatedCombinedCRC;\n\n      /* map of bytes used in block */\n      Int32    nInUse;\n      Bool     inUse[256];\n      Bool     inUse16[16];\n      UChar    seqToUnseq[256];\n\n      /* for decoding the MTF values */\n      UChar    mtfa   [MTFA_SIZE];\n      Int32    mtfbase[256 / MTFL_SIZE];\n      UChar    selector   [BZ_MAX_SELECTORS];\n      UChar    selectorMtf[BZ_MAX_SELECTORS];\n      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n\n      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n      Int32    minLens[BZ_N_GROUPS];\n\n      /* save area for scalars in the main decompress code */\n      Int32    save_i;\n      Int32    save_j;\n      Int32    save_t;\n      Int32    save_alphaSize;\n      Int32    save_nGroups;\n      Int32    save_nSelectors;\n      Int32    save_EOB;\n      Int32    save_groupNo;\n      Int32    save_groupPos;\n      Int32    save_nextSym;\n      Int32    save_nblockMAX;\n      Int32    save_nblock;\n      Int32    save_es;\n      Int32    save_N;\n      Int32    save_curr;\n      Int32    save_zt;\n      Int32    save_zn; \n      Int32    save_zvec;\n      Int32    save_zj;\n      Int32    save_gSel;\n      Int32    save_gMinlen;\n      Int32*   save_gLimit;\n      Int32*   save_gBase;\n      Int32*   save_gPerm;\n\n   }\n   DState;\n\n\n\n/*-- Macros for decompression. --*/\n\n#define BZ_GET_FAST(cccc)                     \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    s->tPos = s->tt[s->tPos];                 \\\n    cccc = (UChar)(s->tPos & 0xff);           \\\n    s->tPos >>= 8;\n\n#define BZ_GET_FAST_C(cccc)                   \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \\\n    c_tPos = c_tt[c_tPos];                    \\\n    cccc = (UChar)(c_tPos & 0xff);            \\\n    c_tPos >>= 8;\n\n#define SET_LL4(i,n)                                          \\\n   { if (((i) & 0x1) == 0)                                    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \\\n        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \\\n   }\n\n#define GET_LL4(i)                             \\\n   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)\n\n#define SET_LL(i,n)                          \\\n   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \\\n     SET_LL4(i, n >> 16);                    \\\n   }\n\n#define GET_LL(i) \\\n   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))\n\n#define BZ_GET_SMALL(cccc)                            \\\n    /* c_tPos is unsigned, hence test < 0 is pointless. */ \\\n    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \\\n    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \\\n    s->tPos = GET_LL(s->tPos);\n\n\n/*-- externs for decompression. --*/\n\nextern Int32 \nBZ2_indexIntoF ( Int32, Int32* );\n\nextern Int32 \nBZ2_decompress ( DState* );\n\nextern void \nBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,\n                           Int32,  Int32, Int32 );\n\n\n#endif\n\n\n/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/\n\n#ifdef BZ_NO_STDIO\n#ifndef NULL\n#define NULL 0\n#endif\n#endif\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                   bzlib_private.h ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/compress.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Compression machinery (not incl block sorting)        ---*/\n/*---                                          compress.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n/* CHANGES\n    0.9.0    -- original version.\n    0.9.0a/b -- no changes in this file.\n    0.9.0c   -- changed setting of nGroups in sendMTFValues() \n                so as to do a bit better on small files\n*/\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\n/*--- Bit stream I/O                              ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nvoid BZ2_bsInitWrite ( EState* s )\n{\n   s->bsLive = 0;\n   s->bsBuff = 0;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsFinishWrite ( EState* s )\n{\n   while (s->bsLive > 0) {\n      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);\n      s->numZ++;\n      s->bsBuff <<= 8;\n      s->bsLive -= 8;\n   }\n}\n\n\n/*---------------------------------------------------*/\n#define bsNEEDW(nz)                           \\\n{                                             \\\n   while (s->bsLive >= 8) {                   \\\n      s->zbits[s->numZ]                       \\\n         = (UChar)(s->bsBuff >> 24);          \\\n      s->numZ++;                              \\\n      s->bsBuff <<= 8;                        \\\n      s->bsLive -= 8;                         \\\n   }                                          \\\n}\n\n\n/*---------------------------------------------------*/\nstatic\n__inline__\nvoid bsW ( EState* s, Int32 n, UInt32 v )\n{\n   bsNEEDW ( n );\n   s->bsBuff |= (v << (32 - s->bsLive - n));\n   s->bsLive += n;\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUInt32 ( EState* s, UInt32 u )\n{\n   bsW ( s, 8, (u >> 24) & 0xffL );\n   bsW ( s, 8, (u >> 16) & 0xffL );\n   bsW ( s, 8, (u >>  8) & 0xffL );\n   bsW ( s, 8,  u        & 0xffL );\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid bsPutUChar ( EState* s, UChar c )\n{\n   bsW( s, 8, (UInt32)c );\n}\n\n\n/*---------------------------------------------------*/\n/*--- The back end proper                         ---*/\n/*---------------------------------------------------*/\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_e ( EState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->unseqToSeq[i] = s->nInUse;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\nstatic\nvoid generateMTFValues ( EState* s )\n{\n   UChar   yy[256];\n   Int32   i, j;\n   Int32   zPend;\n   Int32   wr;\n   Int32   EOB;\n\n   /* \n      After sorting (eg, here),\n         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,\n         and\n         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] \n         holds the original block data.\n\n      The first thing to do is generate the MTF values,\n      and put them in\n         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].\n      Because there are strictly fewer or equal MTF values\n      than block values, ptr values in this area are overwritten\n      with MTF values only when they are no longer needed.\n\n      The final compressed bitstream is generated into the\n      area starting at\n         (UChar*) (&((UChar*)s->arr2)[s->nblock])\n\n      These storage aliases are set up in bzCompressInit(),\n      except for the last one, which is arranged in \n      compressBlock().\n   */\n   UInt32* ptr   = s->ptr;\n   UChar* block  = s->block;\n   UInt16* mtfv  = s->mtfv;\n\n   makeMaps_e ( s );\n   EOB = s->nInUse+1;\n\n   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;\n\n   wr = 0;\n   zPend = 0;\n   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;\n\n   for (i = 0; i < s->nblock; i++) {\n      UChar ll_i;\n      AssertD ( wr <= i, \"generateMTFValues(1)\" );\n      j = ptr[i]-1; if (j < 0) j += s->nblock;\n      ll_i = s->unseqToSeq[block[j]];\n      AssertD ( ll_i < s->nInUse, \"generateMTFValues(2a)\" );\n\n      if (yy[0] == ll_i) { \n         zPend++;\n      } else {\n\n         if (zPend > 0) {\n            zPend--;\n            while (True) {\n               if (zPend & 1) {\n                  mtfv[wr] = BZ_RUNB; wr++; \n                  s->mtfFreq[BZ_RUNB]++; \n               } else {\n                  mtfv[wr] = BZ_RUNA; wr++; \n                  s->mtfFreq[BZ_RUNA]++; \n               }\n               if (zPend < 2) break;\n               zPend = (zPend - 2) / 2;\n            };\n            zPend = 0;\n         }\n         {\n            UChar  rtmp;\n            UChar* ryy_j;\n            UChar  rll_i;\n            rtmp  = yy[1];\n            yy[1] = yy[0];\n            ryy_j = &(yy[1]);\n            rll_i = ll_i;\n            while ( rll_i != rtmp ) {\n               UChar rtmp2;\n               ryy_j++;\n               rtmp2  = rtmp;\n               rtmp   = *ryy_j;\n               *ryy_j = rtmp2;\n            };\n            yy[0] = rtmp;\n            j = ryy_j - &(yy[0]);\n            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;\n         }\n\n      }\n   }\n\n   if (zPend > 0) {\n      zPend--;\n      while (True) {\n         if (zPend & 1) {\n            mtfv[wr] = BZ_RUNB; wr++; \n            s->mtfFreq[BZ_RUNB]++; \n         } else {\n            mtfv[wr] = BZ_RUNA; wr++; \n            s->mtfFreq[BZ_RUNA]++; \n         }\n         if (zPend < 2) break;\n         zPend = (zPend - 2) / 2;\n      };\n      zPend = 0;\n   }\n\n   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;\n\n   s->nMTF = wr;\n}\n\n\n/*---------------------------------------------------*/\n#define BZ_LESSER_ICOST  0\n#define BZ_GREATER_ICOST 15\n\nstatic\nvoid sendMTFValues ( EState* s )\n{\n   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;\n   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;\n   Int32 nGroups, nBytes;\n\n   /*--\n   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   is a global since the decoder also needs it.\n\n   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];\n   are also globals only used in this proc.\n   Made global to keep stack frame size small.\n   --*/\n\n\n   UInt16 cost[BZ_N_GROUPS];\n   Int32  fave[BZ_N_GROUPS];\n\n   UInt16* mtfv = s->mtfv;\n\n   if (s->verbosity >= 3)\n      VPrintf3( \"      %d in block, %d after MTF & 1-2 coding, \"\n                \"%d+2 syms in use\\n\", \n                s->nblock, s->nMTF, s->nInUse );\n\n   alphaSize = s->nInUse+2;\n   for (t = 0; t < BZ_N_GROUPS; t++)\n      for (v = 0; v < alphaSize; v++)\n         s->len[t][v] = BZ_GREATER_ICOST;\n\n   /*--- Decide how many coding tables to use ---*/\n   AssertH ( s->nMTF > 0, 3001 );\n   if (s->nMTF < 200)  nGroups = 2; else\n   if (s->nMTF < 600)  nGroups = 3; else\n   if (s->nMTF < 1200) nGroups = 4; else\n   if (s->nMTF < 2400) nGroups = 5; else\n                       nGroups = 6;\n\n   /*--- Generate an initial set of coding tables ---*/\n   { \n      Int32 nPart, remF, tFreq, aFreq;\n\n      nPart = nGroups;\n      remF  = s->nMTF;\n      gs = 0;\n      while (nPart > 0) {\n         tFreq = remF / nPart;\n         ge = gs-1;\n         aFreq = 0;\n         while (aFreq < tFreq && ge < alphaSize-1) {\n            ge++;\n            aFreq += s->mtfFreq[ge];\n         }\n\n         if (ge > gs \n             && nPart != nGroups && nPart != 1 \n             && ((nGroups-nPart) % 2 == 1)) {\n            aFreq -= s->mtfFreq[ge];\n            ge--;\n         }\n\n         if (s->verbosity >= 3)\n            VPrintf5( \"      initial group %d, [%d .. %d], \"\n                      \"has %d syms (%4.1f%%)\\n\",\n                      nPart, gs, ge, aFreq, \n                      (100.0 * (float)aFreq) / (float)(s->nMTF) );\n \n         for (v = 0; v < alphaSize; v++)\n            if (v >= gs && v <= ge) \n               s->len[nPart-1][v] = BZ_LESSER_ICOST; else\n               s->len[nPart-1][v] = BZ_GREATER_ICOST;\n \n         nPart--;\n         gs = ge+1;\n         remF -= aFreq;\n      }\n   }\n\n   /*--- \n      Iterate up to BZ_N_ITERS times to improve the tables.\n   ---*/\n   for (iter = 0; iter < BZ_N_ITERS; iter++) {\n\n      for (t = 0; t < nGroups; t++) fave[t] = 0;\n\n      for (t = 0; t < nGroups; t++)\n         for (v = 0; v < alphaSize; v++)\n            s->rfreq[t][v] = 0;\n\n      /*---\n        Set up an auxiliary length table which is used to fast-track\n\tthe common case (nGroups == 6). \n      ---*/\n      if (nGroups == 6) {\n         for (v = 0; v < alphaSize; v++) {\n            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];\n            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];\n            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];\n\t }\n      }\n\n      nSelectors = 0;\n      totc = 0;\n      gs = 0;\n      while (True) {\n\n         /*--- Set group start & end marks. --*/\n         if (gs >= s->nMTF) break;\n         ge = gs + BZ_G_SIZE - 1; \n         if (ge >= s->nMTF) ge = s->nMTF-1;\n\n         /*-- \n            Calculate the cost of this group as coded\n            by each of the coding tables.\n         --*/\n         for (t = 0; t < nGroups; t++) cost[t] = 0;\n\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            UInt32 cost01, cost23, cost45;\n            UInt16 icv;\n            cost01 = cost23 = cost45 = 0;\n\n#           define BZ_ITER(nn)                \\\n               icv = mtfv[gs+(nn)];           \\\n               cost01 += s->len_pack[icv][0]; \\\n               cost23 += s->len_pack[icv][1]; \\\n               cost45 += s->len_pack[icv][2]; \\\n\n            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);\n            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);\n            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);\n            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);\n            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);\n            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);\n            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);\n            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);\n            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);\n            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);\n\n#           undef BZ_ITER\n\n            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;\n            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;\n            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++) { \n               UInt16 icv = mtfv[i];\n               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];\n            }\n         }\n \n         /*-- \n            Find the coding table which is best for this group,\n            and record its identity in the selector table.\n         --*/\n         bc = 999999999; bt = -1;\n         for (t = 0; t < nGroups; t++)\n            if (cost[t] < bc) { bc = cost[t]; bt = t; };\n         totc += bc;\n         fave[bt]++;\n         s->selector[nSelectors] = bt;\n         nSelectors++;\n\n         /*-- \n            Increment the symbol frequencies for the selected table.\n          --*/\n         if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n\n#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++\n\n            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);\n            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);\n            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);\n            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);\n            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);\n            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);\n            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);\n            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);\n            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);\n            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);\n\n#           undef BZ_ITUR\n\n         } else {\n\t    /*--- slow version which correctly handles all situations ---*/\n            for (i = gs; i <= ge; i++)\n               s->rfreq[bt][ mtfv[i] ]++;\n         }\n\n         gs = ge+1;\n      }\n      if (s->verbosity >= 3) {\n         VPrintf2 ( \"      pass %d: size is %d, grp uses are \", \n                   iter+1, totc/8 );\n         for (t = 0; t < nGroups; t++)\n            VPrintf1 ( \"%d \", fave[t] );\n         VPrintf0 ( \"\\n\" );\n      }\n\n      /*--\n        Recompute the tables based on the accumulated frequencies.\n      --*/\n      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See \n         comment in huffman.c for details. */\n      for (t = 0; t < nGroups; t++)\n         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), \n                                 alphaSize, 17 /*20*/ );\n   }\n\n\n   AssertH( nGroups < 8, 3002 );\n   AssertH( nSelectors < 32768 &&\n            nSelectors <= (2 + (900000 / BZ_G_SIZE)),\n            3003 );\n\n\n   /*--- Compute MTF values for the selectors. ---*/\n   {\n      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;\n      for (i = 0; i < nGroups; i++) pos[i] = i;\n      for (i = 0; i < nSelectors; i++) {\n         ll_i = s->selector[i];\n         j = 0;\n         tmp = pos[j];\n         while ( ll_i != tmp ) {\n            j++;\n            tmp2 = tmp;\n            tmp = pos[j];\n            pos[j] = tmp2;\n         };\n         pos[0] = tmp;\n         s->selectorMtf[i] = j;\n      }\n   };\n\n   /*--- Assign actual codes for the tables. --*/\n   for (t = 0; t < nGroups; t++) {\n      minLen = 32;\n      maxLen = 0;\n      for (i = 0; i < alphaSize; i++) {\n         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n         if (s->len[t][i] < minLen) minLen = s->len[t][i];\n      }\n      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );\n      AssertH ( !(minLen < 1),  3005 );\n      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), \n                          minLen, maxLen, alphaSize );\n   }\n\n   /*--- Transmit the mapping table. ---*/\n   { \n      Bool inUse16[16];\n      for (i = 0; i < 16; i++) {\n          inUse16[i] = False;\n          for (j = 0; j < 16; j++)\n             if (s->inUse[i * 16 + j]) inUse16[i] = True;\n      }\n     \n      nBytes = s->numZ;\n      for (i = 0; i < 16; i++)\n         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);\n\n      for (i = 0; i < 16; i++)\n         if (inUse16[i])\n            for (j = 0; j < 16; j++) {\n               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);\n            }\n\n      if (s->verbosity >= 3) \n         VPrintf1( \"      bytes: mapping %d, \", s->numZ-nBytes );\n   }\n\n   /*--- Now the selectors. ---*/\n   nBytes = s->numZ;\n   bsW ( s, 3, nGroups );\n   bsW ( s, 15, nSelectors );\n   for (i = 0; i < nSelectors; i++) { \n      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);\n      bsW(s,1,0);\n   }\n   if (s->verbosity >= 3)\n      VPrintf1( \"selectors %d, \", s->numZ-nBytes );\n\n   /*--- Now the coding tables. ---*/\n   nBytes = s->numZ;\n\n   for (t = 0; t < nGroups; t++) {\n      Int32 curr = s->len[t][0];\n      bsW ( s, 5, curr );\n      for (i = 0; i < alphaSize; i++) {\n         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };\n         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };\n         bsW ( s, 1, 0 );\n      }\n   }\n\n   if (s->verbosity >= 3)\n      VPrintf1 ( \"code lengths %d, \", s->numZ-nBytes );\n\n   /*--- And finally, the block data proper ---*/\n   nBytes = s->numZ;\n   selCtr = 0;\n   gs = 0;\n   while (True) {\n      if (gs >= s->nMTF) break;\n      ge = gs + BZ_G_SIZE - 1; \n      if (ge >= s->nMTF) ge = s->nMTF-1;\n      AssertH ( s->selector[selCtr] < nGroups, 3006 );\n\n      if (nGroups == 6 && 50 == ge-gs+1) {\n            /*--- fast track the common case ---*/\n            UInt16 mtfv_i;\n            UChar* s_len_sel_selCtr \n               = &(s->len[s->selector[selCtr]][0]);\n            Int32* s_code_sel_selCtr\n               = &(s->code[s->selector[selCtr]][0]);\n\n#           define BZ_ITAH(nn)                      \\\n               mtfv_i = mtfv[gs+(nn)];              \\\n               bsW ( s,                             \\\n                     s_len_sel_selCtr[mtfv_i],      \\\n                     s_code_sel_selCtr[mtfv_i] )\n\n            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);\n            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);\n            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);\n            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);\n            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);\n            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);\n            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);\n            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);\n            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);\n            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);\n\n#           undef BZ_ITAH\n\n      } else {\n\t /*--- slow version which correctly handles all situations ---*/\n         for (i = gs; i <= ge; i++) {\n            bsW ( s, \n                  s->len  [s->selector[selCtr]] [mtfv[i]],\n                  s->code [s->selector[selCtr]] [mtfv[i]] );\n         }\n      }\n\n\n      gs = ge+1;\n      selCtr++;\n   }\n   AssertH( selCtr == nSelectors, 3007 );\n\n   if (s->verbosity >= 3)\n      VPrintf1( \"codes %d\\n\", s->numZ-nBytes );\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_compressBlock ( EState* s, Bool is_last_block )\n{\n   if (s->nblock > 0) {\n\n      BZ_FINALISE_CRC ( s->blockCRC );\n      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);\n      s->combinedCRC ^= s->blockCRC;\n      if (s->blockNo > 1) s->numZ = 0;\n\n      if (s->verbosity >= 2)\n         VPrintf4( \"    block %d: crc = 0x%08x, \"\n                   \"combined CRC = 0x%08x, size = %d\\n\",\n                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );\n\n      BZ2_blockSort ( s );\n   }\n\n   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);\n\n   /*-- If this is the first block, create the stream header. --*/\n   if (s->blockNo == 1) {\n      BZ2_bsInitWrite ( s );\n      bsPutUChar ( s, BZ_HDR_B );\n      bsPutUChar ( s, BZ_HDR_Z );\n      bsPutUChar ( s, BZ_HDR_h );\n      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );\n   }\n\n   if (s->nblock > 0) {\n\n      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );\n      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );\n      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );\n\n      /*-- Now the block's CRC, so it is in a known place. --*/\n      bsPutUInt32 ( s, s->blockCRC );\n\n      /*-- \n         Now a single bit indicating (non-)randomisation. \n         As of version 0.9.5, we use a better sorting algorithm\n         which makes randomisation unnecessary.  So always set\n         the randomised bit to 'no'.  Of course, the decoder\n         still needs to be able to handle randomised blocks\n         so as to maintain backwards compatibility with\n         older versions of bzip2.\n      --*/\n      bsW(s,1,0);\n\n      bsW ( s, 24, s->origPtr );\n      generateMTFValues ( s );\n      sendMTFValues ( s );\n   }\n\n\n   /*-- If this is the last block, add the stream trailer. --*/\n   if (is_last_block) {\n\n      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );\n      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );\n      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );\n      bsPutUInt32 ( s, s->combinedCRC );\n      if (s->verbosity >= 2)\n         VPrintf1( \"    final combined CRC = 0x%08x\\n   \", s->combinedCRC );\n      bsFinishWrite ( s );\n   }\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        compress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/crctable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Table for doing CRCs                                  ---*/\n/*---                                          crctable.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*--\n  I think this is an implementation of the AUTODIN-II,\n  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived\n  from code by Rob Warnock, in Section 51 of the\n  comp.compression FAQ.\n--*/\n\nUInt32 BZ2_crc32Table[256] = {\n\n   /*-- Ugly, innit? --*/\n\n   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,\n   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,\n   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,\n   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,\n   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,\n   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,\n   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,\n   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,\n   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,\n   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,\n   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,\n   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,\n   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,\n   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,\n   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,\n   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,\n   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,\n   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,\n   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,\n   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,\n   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,\n   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,\n   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,\n   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,\n   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,\n   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,\n   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,\n   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,\n   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,\n   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,\n   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,\n   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,\n   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,\n   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,\n   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,\n   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,\n   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,\n   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,\n   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,\n   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,\n   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,\n   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,\n   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,\n   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,\n   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,\n   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,\n   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,\n   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,\n   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,\n   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,\n   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,\n   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,\n   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,\n   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,\n   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,\n   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,\n   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,\n   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,\n   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,\n   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,\n   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,\n   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,\n   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,\n   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                        crctable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/decompress.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Decompression machinery                               ---*/\n/*---                                        decompress.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------------*/\nstatic\nvoid makeMaps_d ( DState* s )\n{\n   Int32 i;\n   s->nInUse = 0;\n   for (i = 0; i < 256; i++)\n      if (s->inUse[i]) {\n         s->seqToUnseq[s->nInUse] = i;\n         s->nInUse++;\n      }\n}\n\n\n/*---------------------------------------------------*/\n#define RETURN(rrr)                               \\\n   { retVal = rrr; goto save_state_and_return; };\n\n#define GET_BITS(lll,vvv,nnn)                     \\\n   case lll: s->state = lll;                      \\\n   while (True) {                                 \\\n      if (s->bsLive >= nnn) {                     \\\n         UInt32 v;                                \\\n         v = (s->bsBuff >>                        \\\n             (s->bsLive-nnn)) & ((1 << nnn)-1);   \\\n         s->bsLive -= nnn;                        \\\n         vvv = v;                                 \\\n         break;                                   \\\n      }                                           \\\n      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \\\n      s->bsBuff                                   \\\n         = (s->bsBuff << 8) |                     \\\n           ((UInt32)                              \\\n              (*((UChar*)(s->strm->next_in))));   \\\n      s->bsLive += 8;                             \\\n      s->strm->next_in++;                         \\\n      s->strm->avail_in--;                        \\\n      s->strm->total_in_lo32++;                   \\\n      if (s->strm->total_in_lo32 == 0)            \\\n         s->strm->total_in_hi32++;                \\\n   }\n\n#define GET_UCHAR(lll,uuu)                        \\\n   GET_BITS(lll,uuu,8)\n\n#define GET_BIT(lll,uuu)                          \\\n   GET_BITS(lll,uuu,1)\n\n/*---------------------------------------------------*/\n#define GET_MTF_VAL(label1,label2,lval)           \\\n{                                                 \\\n   if (groupPos == 0) {                           \\\n      groupNo++;                                  \\\n      if (groupNo >= nSelectors)                  \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      groupPos = BZ_G_SIZE;                       \\\n      gSel = s->selector[groupNo];                \\\n      gMinlen = s->minLens[gSel];                 \\\n      gLimit = &(s->limit[gSel][0]);              \\\n      gPerm = &(s->perm[gSel][0]);                \\\n      gBase = &(s->base[gSel][0]);                \\\n   }                                              \\\n   groupPos--;                                    \\\n   zn = gMinlen;                                  \\\n   GET_BITS(label1, zvec, zn);                    \\\n   while (1) {                                    \\\n      if (zn > 20 /* the longest code */)         \\\n         RETURN(BZ_DATA_ERROR);                   \\\n      if (zvec <= gLimit[zn]) break;              \\\n      zn++;                                       \\\n      GET_BIT(label2, zj);                        \\\n      zvec = (zvec << 1) | zj;                    \\\n   };                                             \\\n   if (zvec - gBase[zn] < 0                       \\\n       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \\\n      RETURN(BZ_DATA_ERROR);                      \\\n   lval = gPerm[zvec - gBase[zn]];                \\\n}\n\n\n/*---------------------------------------------------*/\nInt32 BZ2_decompress ( DState* s )\n{\n   UChar      uc;\n   Int32      retVal;\n   Int32      minLen, maxLen;\n   bz_stream* strm = s->strm;\n\n   /* stuff that needs to be saved/restored */\n   Int32  i;\n   Int32  j;\n   Int32  t;\n   Int32  alphaSize;\n   Int32  nGroups;\n   Int32  nSelectors;\n   Int32  EOB;\n   Int32  groupNo;\n   Int32  groupPos;\n   Int32  nextSym;\n   Int32  nblockMAX;\n   Int32  nblock;\n   Int32  es;\n   Int32  N;\n   Int32  curr;\n   Int32  zt;\n   Int32  zn; \n   Int32  zvec;\n   Int32  zj;\n   Int32  gSel;\n   Int32  gMinlen;\n   Int32* gLimit;\n   Int32* gBase;\n   Int32* gPerm;\n\n   if (s->state == BZ_X_MAGIC_1) {\n      /*initialise the save area*/\n      s->save_i           = 0;\n      s->save_j           = 0;\n      s->save_t           = 0;\n      s->save_alphaSize   = 0;\n      s->save_nGroups     = 0;\n      s->save_nSelectors  = 0;\n      s->save_EOB         = 0;\n      s->save_groupNo     = 0;\n      s->save_groupPos    = 0;\n      s->save_nextSym     = 0;\n      s->save_nblockMAX   = 0;\n      s->save_nblock      = 0;\n      s->save_es          = 0;\n      s->save_N           = 0;\n      s->save_curr        = 0;\n      s->save_zt          = 0;\n      s->save_zn          = 0;\n      s->save_zvec        = 0;\n      s->save_zj          = 0;\n      s->save_gSel        = 0;\n      s->save_gMinlen     = 0;\n      s->save_gLimit      = NULL;\n      s->save_gBase       = NULL;\n      s->save_gPerm       = NULL;\n   }\n\n   /*restore from the save area*/\n   i           = s->save_i;\n   j           = s->save_j;\n   t           = s->save_t;\n   alphaSize   = s->save_alphaSize;\n   nGroups     = s->save_nGroups;\n   nSelectors  = s->save_nSelectors;\n   EOB         = s->save_EOB;\n   groupNo     = s->save_groupNo;\n   groupPos    = s->save_groupPos;\n   nextSym     = s->save_nextSym;\n   nblockMAX   = s->save_nblockMAX;\n   nblock      = s->save_nblock;\n   es          = s->save_es;\n   N           = s->save_N;\n   curr        = s->save_curr;\n   zt          = s->save_zt;\n   zn          = s->save_zn; \n   zvec        = s->save_zvec;\n   zj          = s->save_zj;\n   gSel        = s->save_gSel;\n   gMinlen     = s->save_gMinlen;\n   gLimit      = s->save_gLimit;\n   gBase       = s->save_gBase;\n   gPerm       = s->save_gPerm;\n\n   retVal = BZ_OK;\n\n   switch (s->state) {\n\n      GET_UCHAR(BZ_X_MAGIC_1, uc);\n      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_2, uc);\n      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_UCHAR(BZ_X_MAGIC_3, uc)\n      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);\n\n      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)\n      if (s->blockSize100k < (BZ_HDR_0 + 1) || \n          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);\n      s->blockSize100k -= BZ_HDR_0;\n\n      if (s->smallDecompress) {\n         s->ll16 = (UInt16*)BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );\n         s->ll4  = (UChar*)BZALLOC( \n                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) \n                   );\n         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);\n      } else {\n         s->tt  = (UInt32*)BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );\n         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);\n      }\n\n      GET_UCHAR(BZ_X_BLKHDR_1, uc);\n\n      if (uc == 0x17) goto endhdr_2;\n      if (uc != 0x31) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_2, uc);\n      if (uc != 0x41) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_3, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_4, uc);\n      if (uc != 0x26) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_5, uc);\n      if (uc != 0x53) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_BLKHDR_6, uc);\n      if (uc != 0x59) RETURN(BZ_DATA_ERROR);\n\n      s->currBlockNo++;\n      if (s->verbosity >= 2)\n         VPrintf1 ( \"\\n    [%d: huff+mtf \", s->currBlockNo );\n \n      s->storedBlockCRC = 0;\n      GET_UCHAR(BZ_X_BCRC_1, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_2, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_3, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_BCRC_4, uc);\n      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);\n\n      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);\n\n      s->origPtr = 0;\n      GET_UCHAR(BZ_X_ORIGPTR_1, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_2, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n      GET_UCHAR(BZ_X_ORIGPTR_3, uc);\n      s->origPtr = (s->origPtr << 8) | ((Int32)uc);\n\n      if (s->origPtr < 0)\n         RETURN(BZ_DATA_ERROR);\n      if (s->origPtr > 10 + 100000*s->blockSize100k) \n         RETURN(BZ_DATA_ERROR);\n\n      /*--- Receive the mapping table ---*/\n      for (i = 0; i < 16; i++) {\n         GET_BIT(BZ_X_MAPPING_1, uc);\n         if (uc == 1) \n            s->inUse16[i] = True; else \n            s->inUse16[i] = False;\n      }\n\n      for (i = 0; i < 256; i++) s->inUse[i] = False;\n\n      for (i = 0; i < 16; i++)\n         if (s->inUse16[i])\n            for (j = 0; j < 16; j++) {\n               GET_BIT(BZ_X_MAPPING_2, uc);\n               if (uc == 1) s->inUse[i * 16 + j] = True;\n            }\n      makeMaps_d ( s );\n      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);\n      alphaSize = s->nInUse+2;\n\n      /*--- Now the selectors ---*/\n      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);\n      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);\n      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);\n      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);\n      for (i = 0; i < nSelectors; i++) {\n         j = 0;\n         while (True) {\n            GET_BIT(BZ_X_SELECTOR_3, uc);\n            if (uc == 0) break;\n            j++;\n            if (j >= nGroups) RETURN(BZ_DATA_ERROR);\n         }\n         s->selectorMtf[i] = j;\n      }\n\n      /*--- Undo the MTF values for the selectors. ---*/\n      {\n         UChar pos[BZ_N_GROUPS], tmp, v;\n         for (v = 0; v < nGroups; v++) pos[v] = v;\n   \n         for (i = 0; i < nSelectors; i++) {\n            v = s->selectorMtf[i];\n            tmp = pos[v];\n            while (v > 0) { pos[v] = pos[v-1]; v--; }\n            pos[0] = tmp;\n            s->selector[i] = tmp;\n         }\n      }\n\n      /*--- Now the coding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         GET_BITS(BZ_X_CODING_1, curr, 5);\n         for (i = 0; i < alphaSize; i++) {\n            while (True) {\n               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);\n               GET_BIT(BZ_X_CODING_2, uc);\n               if (uc == 0) break;\n               GET_BIT(BZ_X_CODING_3, uc);\n               if (uc == 0) curr++; else curr--;\n            }\n            s->len[t][i] = curr;\n         }\n      }\n\n      /*--- Create the Huffman decoding tables ---*/\n      for (t = 0; t < nGroups; t++) {\n         minLen = 32;\n         maxLen = 0;\n         for (i = 0; i < alphaSize; i++) {\n            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];\n            if (s->len[t][i] < minLen) minLen = s->len[t][i];\n         }\n         BZ2_hbCreateDecodeTables ( \n            &(s->limit[t][0]), \n            &(s->base[t][0]), \n            &(s->perm[t][0]), \n            &(s->len[t][0]),\n            minLen, maxLen, alphaSize\n         );\n         s->minLens[t] = minLen;\n      }\n\n      /*--- Now the MTF values ---*/\n\n      EOB      = s->nInUse+1;\n      nblockMAX = 100000 * s->blockSize100k;\n      groupNo  = -1;\n      groupPos = 0;\n\n      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;\n\n      /*-- MTF init --*/\n      {\n         Int32 ii, jj, kk;\n         kk = MTFA_SIZE-1;\n         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {\n            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);\n               kk--;\n            }\n            s->mtfbase[ii] = kk + 1;\n         }\n      }\n      /*-- end MTF init --*/\n\n      nblock = 0;\n      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);\n\n      while (True) {\n\n         if (nextSym == EOB) break;\n\n         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {\n\n            es = -1;\n            N = 1;\n            do {\n               /* Check that N doesn't get too big, so that es doesn't\n                  go negative.  The maximum value that can be\n                  RUNA/RUNB encoded is equal to the block size (post\n                  the initial RLE), viz, 900k, so bounding N at 2\n                  million should guard against overflow without\n                  rejecting any legitimate inputs. */\n               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);\n               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else\n               if (nextSym == BZ_RUNB) es = es + (1+1) * N;\n               N = N * 2;\n               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);\n            }\n               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);\n\n            es++;\n            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];\n            s->unzftab[uc] += es;\n\n            if (s->smallDecompress)\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->ll16[nblock] = (UInt16)uc;\n                  nblock++;\n                  es--;\n               }\n            else\n               while (es > 0) {\n                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n                  s->tt[nblock] = (UInt32)uc;\n                  nblock++;\n                  es--;\n               };\n\n            continue;\n\n         } else {\n\n            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);\n\n            /*-- uc = MTF ( nextSym-1 ) --*/\n            {\n               Int32 ii, jj, kk, pp, lno, off;\n               UInt32 nn;\n               nn = (UInt32)(nextSym - 1);\n\n               if (nn < MTFL_SIZE) {\n                  /* avoid general-case expense */\n                  pp = s->mtfbase[0];\n                  uc = s->mtfa[pp+nn];\n                  while (nn > 3) {\n                     Int32 z = pp+nn;\n                     s->mtfa[(z)  ] = s->mtfa[(z)-1];\n                     s->mtfa[(z)-1] = s->mtfa[(z)-2];\n                     s->mtfa[(z)-2] = s->mtfa[(z)-3];\n                     s->mtfa[(z)-3] = s->mtfa[(z)-4];\n                     nn -= 4;\n                  }\n                  while (nn > 0) { \n                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; \n                  };\n                  s->mtfa[pp] = uc;\n               } else { \n                  /* general case */\n                  lno = nn / MTFL_SIZE;\n                  off = nn % MTFL_SIZE;\n                  pp = s->mtfbase[lno] + off;\n                  uc = s->mtfa[pp];\n                  while (pp > s->mtfbase[lno]) { \n                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; \n                  };\n                  s->mtfbase[lno]++;\n                  while (lno > 0) {\n                     s->mtfbase[lno]--;\n                     s->mtfa[s->mtfbase[lno]] \n                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];\n                     lno--;\n                  }\n                  s->mtfbase[0]--;\n                  s->mtfa[s->mtfbase[0]] = uc;\n                  if (s->mtfbase[0] == 0) {\n                     kk = MTFA_SIZE-1;\n                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {\n                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {\n                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];\n                           kk--;\n                        }\n                        s->mtfbase[ii] = kk + 1;\n                     }\n                  }\n               }\n            }\n            /*-- end uc = MTF ( nextSym-1 ) --*/\n\n            s->unzftab[s->seqToUnseq[uc]]++;\n            if (s->smallDecompress)\n               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else\n               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);\n            nblock++;\n\n            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);\n            continue;\n         }\n      }\n\n      /* Now we know what nblock is, we can do a better sanity\n         check on s->origPtr.\n      */\n      if (s->origPtr < 0 || s->origPtr >= nblock)\n         RETURN(BZ_DATA_ERROR);\n\n      /*-- Set up cftab to facilitate generation of T^(-1) --*/\n      /* Check: unzftab entries in range. */\n      for (i = 0; i <= 255; i++) {\n         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)\n            RETURN(BZ_DATA_ERROR);\n      }\n      /* Actually generate cftab. */\n      s->cftab[0] = 0;\n      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];\n      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];\n      /* Check: cftab entries in range. */\n      for (i = 0; i <= 256; i++) {\n         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {\n            /* s->cftab[i] can legitimately be == nblock */\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n      /* Check: cftab entries non-descending. */\n      for (i = 1; i <= 256; i++) {\n         if (s->cftab[i-1] > s->cftab[i]) {\n            RETURN(BZ_DATA_ERROR);\n         }\n      }\n\n      s->state_out_len = 0;\n      s->state_out_ch  = 0;\n      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );\n      s->state = BZ_X_OUTPUT;\n      if (s->verbosity >= 2) VPrintf0 ( \"rt+rld\" );\n\n      if (s->smallDecompress) {\n\n         /*-- Make a copy of cftab, used in generation of T --*/\n         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];\n\n         /*-- compute the T vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->ll16[i]);\n            SET_LL(i, s->cftabCopy[uc]);\n            s->cftabCopy[uc]++;\n         }\n\n         /*-- Compute T^(-1) by pointer reversal on T --*/\n         i = s->origPtr;\n         j = GET_LL(i);\n         do {\n            Int32 tmp = GET_LL(j);\n            SET_LL(j, i);\n            i = j;\n            j = tmp;\n         }\n            while (i != s->origPtr);\n\n         s->tPos = s->origPtr;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_SMALL(s->k0); s->nblock_used++;\n         }\n\n      } else {\n\n         /*-- compute the T^(-1) vector --*/\n         for (i = 0; i < nblock; i++) {\n            uc = (UChar)(s->tt[i] & 0xff);\n            s->tt[s->cftab[uc]] |= (i << 8);\n            s->cftab[uc]++;\n         }\n\n         s->tPos = s->tt[s->origPtr] >> 8;\n         s->nblock_used = 0;\n         if (s->blockRandomised) {\n            BZ_RAND_INIT_MASK;\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; \n         } else {\n            BZ_GET_FAST(s->k0); s->nblock_used++;\n         }\n\n      }\n\n      RETURN(BZ_OK);\n\n\n\n    endhdr_2:\n\n      GET_UCHAR(BZ_X_ENDHDR_2, uc);\n      if (uc != 0x72) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_3, uc);\n      if (uc != 0x45) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_4, uc);\n      if (uc != 0x38) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_5, uc);\n      if (uc != 0x50) RETURN(BZ_DATA_ERROR);\n      GET_UCHAR(BZ_X_ENDHDR_6, uc);\n      if (uc != 0x90) RETURN(BZ_DATA_ERROR);\n\n      s->storedCombinedCRC = 0;\n      GET_UCHAR(BZ_X_CCRC_1, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_2, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_3, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n      GET_UCHAR(BZ_X_CCRC_4, uc);\n      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);\n\n      s->state = BZ_X_IDLE;\n      RETURN(BZ_STREAM_END);\n\n      default: AssertH ( False, 4001 );\n   }\n\n   AssertH ( False, 4002 );\n\n   save_state_and_return:\n\n   s->save_i           = i;\n   s->save_j           = j;\n   s->save_t           = t;\n   s->save_alphaSize   = alphaSize;\n   s->save_nGroups     = nGroups;\n   s->save_nSelectors  = nSelectors;\n   s->save_EOB         = EOB;\n   s->save_groupNo     = groupNo;\n   s->save_groupPos    = groupPos;\n   s->save_nextSym     = nextSym;\n   s->save_nblockMAX   = nblockMAX;\n   s->save_nblock      = nblock;\n   s->save_es          = es;\n   s->save_N           = N;\n   s->save_curr        = curr;\n   s->save_zt          = zt;\n   s->save_zn          = zn;\n   s->save_zvec        = zvec;\n   s->save_zj          = zj;\n   s->save_gSel        = gSel;\n   s->save_gMinlen     = gMinlen;\n   s->save_gLimit      = gLimit;\n   s->save_gBase       = gBase;\n   s->save_gPerm       = gPerm;\n\n   return retVal;   \n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                      decompress.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/fgbzip2.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_ASYNC_MSG && __TBB_CPP11_LAMBDAS_PRESENT\n\n#include <iostream>\n#include <fstream>\n#include <string>\n#include <memory>\n#include <queue>\n\n#include \"bzlib.h\"\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/compat/thread\"\n#include \"tbb/concurrent_queue.h\"\n\n// TODO: change memory allocation/deallocation to be managed in constructor/destructor\nstruct Buffer {\n    size_t len;\n    char* b;\n};\n\nstruct BufferMsg {\n\n    BufferMsg() {}\n    BufferMsg(Buffer& inputBuffer, Buffer& outputBuffer, size_t seqId, bool isLast = false)\n        : inputBuffer(inputBuffer), outputBuffer(outputBuffer), seqId(seqId), isLast(isLast) {}\n\n    static BufferMsg createBufferMsg(size_t seqId, size_t chunkSize) {\n        Buffer inputBuffer;\n        inputBuffer.b = new char[chunkSize];\n        inputBuffer.len = chunkSize;\n\n        Buffer outputBuffer;\n        size_t compressedChunkSize = chunkSize * 1.01 + 600; // compression overhead\n        outputBuffer.b = new char[compressedChunkSize];\n        outputBuffer.len = compressedChunkSize;\n\n        return BufferMsg(inputBuffer, outputBuffer, seqId);\n    }\n\n    static void destroyBufferMsg(const BufferMsg& destroyMsg) {\n        delete[] destroyMsg.inputBuffer.b;\n        delete[] destroyMsg.outputBuffer.b;\n    }\n\n    void markLast(size_t lastId) {\n        isLast = true;\n        seqId = lastId;\n    }\n\n    size_t seqId;\n    Buffer inputBuffer;\n    Buffer outputBuffer;\n    bool isLast;\n};\n\nclass BufferCompressor {\npublic:\n\n    BufferCompressor(int blockSizeIn100KB) : m_blockSize(blockSizeIn100KB) {}\n\n    BufferMsg operator()(BufferMsg buffer) const {\n        if (!buffer.isLast) {\n            unsigned int outSize = buffer.outputBuffer.len;\n            BZ2_bzBuffToBuffCompress(buffer.outputBuffer.b, &outSize,\n                buffer.inputBuffer.b, buffer.inputBuffer.len,\n                m_blockSize, 0, 30);\n            buffer.outputBuffer.len = outSize;\n        }\n        return buffer;\n    }\n\nprivate:\n    int m_blockSize;\n};\n\nclass IOOperations {\npublic:\n\n    IOOperations(std::ifstream& inputStream, std::ofstream& outputStream, size_t chunkSize)\n        : m_inputStream(inputStream), m_outputStream(outputStream), m_chunkSize(chunkSize), m_chunksRead(0) {}\n\n    void readChunk(Buffer& buffer) {\n        m_inputStream.read(buffer.b, m_chunkSize);\n        buffer.len = static_cast<size_t>(m_inputStream.gcount());\n        m_chunksRead++;\n    }\n\n    void writeChunk(const Buffer& buffer) {\n        m_outputStream.write(buffer.b, buffer.len);\n    }\n\n    size_t chunksRead() const {\n        return m_chunksRead;\n    }\n\n    size_t chunkSize() const {\n        return m_chunkSize;\n    }\n\n    bool hasDataToRead() const {\n        return m_inputStream.is_open() && !m_inputStream.eof();\n    }\n\nprivate:\n\n    std::ifstream& m_inputStream;\n    std::ofstream& m_outputStream;\n\n    size_t m_chunkSize;\n    size_t m_chunksRead;\n};\n\n//-----------------------------------------------------------------------------------------------------------------------\n//---------------------------------------Compression example based on async_node-----------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\ntypedef tbb::flow::async_node< tbb::flow::continue_msg, BufferMsg > async_file_reader_node;\ntypedef tbb::flow::async_node< BufferMsg, tbb::flow::continue_msg > async_file_writer_node;\n\nclass AsyncNodeActivity {\npublic:\n\n    AsyncNodeActivity(IOOperations& io)\n        : m_io(io), m_fileWriterThread(&AsyncNodeActivity::writingLoop, this) {}\n\n    ~AsyncNodeActivity() {\n        m_fileReaderThread.join();\n        m_fileWriterThread.join();\n    }\n\n    void submitRead(async_file_reader_node::gateway_type& gateway) {\n        gateway.reserve_wait();\n        std::thread(&AsyncNodeActivity::readingLoop, this, std::ref(gateway)).swap(m_fileReaderThread);\n    }\n\n    void submitWrite(const BufferMsg& bufferMsg) {\n        m_writeQueue.push(bufferMsg);\n    }\n\nprivate:\n\n    void readingLoop(async_file_reader_node::gateway_type& gateway) {\n        while (m_io.hasDataToRead()) {\n            BufferMsg bufferMsg = BufferMsg::createBufferMsg(m_io.chunksRead(), m_io.chunkSize());\n            m_io.readChunk(bufferMsg.inputBuffer);\n            gateway.try_put(bufferMsg);\n        }\n        sendLastMessage(gateway);\n        gateway.release_wait();\n    }\n\n    void writingLoop() {\n        BufferMsg buffer;\n        m_writeQueue.pop(buffer);\n        while (!buffer.isLast) {\n            m_io.writeChunk(buffer.outputBuffer);\n            m_writeQueue.pop(buffer);\n        }\n    }\n\n    void sendLastMessage(async_file_reader_node::gateway_type& gateway) {\n        BufferMsg lastMsg;\n        lastMsg.markLast(m_io.chunksRead());\n        gateway.try_put(lastMsg);\n    }\n\n    IOOperations& m_io;\n\n    tbb::concurrent_bounded_queue< BufferMsg > m_writeQueue;\n\n    std::thread m_fileReaderThread;\n    std::thread m_fileWriterThread;\n};\n\nvoid fgCompressionAsyncNode(IOOperations& io, int blockSizeIn100KB) {\n    tbb::flow::graph g;\n\n    AsyncNodeActivity asyncNodeActivity(io);\n\n    async_file_reader_node file_reader(g, tbb::flow::unlimited, [&asyncNodeActivity](const tbb::flow::continue_msg& msg, async_file_reader_node::gateway_type& gateway) {\n        asyncNodeActivity.submitRead(gateway);\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg)->size_t {\n        return bufferMsg.seqId;\n    });\n\n    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node\n    async_file_writer_node output_writer(g, tbb::flow::serial, [&asyncNodeActivity](const BufferMsg& bufferMsg, async_file_writer_node::gateway_type& gateway) {\n        asyncNodeActivity.submitWrite(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n\n    file_reader.try_put(tbb::flow::continue_msg());\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n//------------------------------------------Compression example based on async_msg---------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\ntypedef tbb::flow::async_msg< BufferMsg > async_msg_type;\n\nclass AsyncMsgActivity {\npublic:\n\n    AsyncMsgActivity(tbb::flow::graph& g, IOOperations& io)\n        : m_io(io), m_graph(g), m_fileReaderThread(&AsyncMsgActivity::readingLoop, this),\n          m_fileWriterThread(&AsyncMsgActivity::writingLoop, this)\n    {\n        // Graph synchronization starts here and ends\n        // when the last buffer was written in \"writing thread\"\n        m_graph.increment_wait_count();\n    }\n\n    ~AsyncMsgActivity() {\n        m_fileReaderThread.join();\n        m_fileWriterThread.join();\n\n        // Lets release resources that async\n        // activity and graph were acquired\n        freeBuffers();\n    }\n\n    async_msg_type submitRead(BufferMsg& bufferMsg) {\n        async_msg_type msg;\n        work_type readWork = { bufferMsg, msg };\n        m_readQueue.push(readWork);\n        return msg;\n    }\n\n    async_msg_type submitWrite(const BufferMsg& bufferMsg) {\n        async_msg_type msg;\n        work_type writeWork = { bufferMsg, msg };\n        m_writeQueue.push(writeWork);\n        return msg;\n    }\n\nprivate:\n\n    struct work_type {\n        BufferMsg bufferMsg;\n        async_msg_type msg;\n    };\n\n    void readingLoop() {\n        work_type readWork;\n        m_readQueue.pop(readWork);\n\n        // Reading thread waits for buffers to be received\n        // (the graph reuses limitted number of buffers)\n        // and reads the file while there is something to read\n        while (m_io.hasDataToRead()) {\n            readWork.bufferMsg.seqId = m_io.chunksRead();\n            m_io.readChunk(readWork.bufferMsg.inputBuffer);\n            readWork.msg.set(readWork.bufferMsg);\n            m_readQueue.pop(readWork);\n        }\n\n        // Pass message with an end flag to the graph\n        sendLastMessage(readWork);\n    }\n\n    void sendLastMessage(work_type& work) {\n        work.bufferMsg.markLast(m_io.chunksRead());\n        work.msg.set(work.bufferMsg);\n    }\n\n    void writingLoop() {\n        work_type writeWork;\n        m_writeQueue.pop(writeWork);\n\n        // Writing thread writes all buffers that it gets\n        // and reuses them. At the end all reusing buffers\n        // is stored in read queue\n        while (!writeWork.bufferMsg.isLast) {\n            m_io.writeChunk(writeWork.bufferMsg.outputBuffer);\n            writeWork.msg.set(writeWork.bufferMsg);\n            m_writeQueue.pop(writeWork);\n        }\n\n        // Store last message to the reading queue to free resources later\n        writeWork.msg.set(writeWork.bufferMsg);\n\n        // After all buffers have been written\n        // the synchronization ends\n        m_graph.decrement_wait_count();\n    }\n\n    void freeBuffers() {\n        int buffersNumber = m_readQueue.size();\n        for (int i = 0; i < buffersNumber; i++) {\n            work_type workToDelete;\n            m_readQueue.pop(workToDelete);\n            BufferMsg::destroyBufferMsg(workToDelete.bufferMsg);\n        }\n    }\n\n    IOOperations& m_io;\n\n    tbb::flow::graph& m_graph;\n\n    tbb::concurrent_bounded_queue< work_type > m_writeQueue;\n    tbb::concurrent_bounded_queue< work_type > m_readQueue;\n\n    std::thread m_fileReaderThread;\n    std::thread m_fileWriterThread;\n};\n\nvoid fgCompressionAsyncMsg(IOOperations& io, int blockSizeIn100KB, size_t memoryLimitIn1MB) {\n    // Memory limit sets the number of buffers that can be reused\n    int buffersNumber = memoryLimitIn1MB * 1000 * 1024 / io.chunkSize();\n\n    tbb::flow::graph g;\n\n    AsyncMsgActivity asyncMsgActivity(g, io);\n\n    tbb::flow::function_node< BufferMsg, async_msg_type > file_reader(g, tbb::flow::unlimited, [&asyncMsgActivity](BufferMsg bufferMsg) -> async_msg_type {\n        return asyncMsgActivity.submitRead(bufferMsg);\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg) -> size_t {\n        return bufferMsg.seqId;\n    });\n\n    // The node is serial to preserve the right order of buffers set by the preceding sequencer_node\n    tbb::flow::function_node< BufferMsg, async_msg_type > output_writer(g, tbb::flow::serial, [&asyncMsgActivity](const BufferMsg& bufferMsg) -> async_msg_type {\n        return asyncMsgActivity.submitWrite(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n    make_edge(output_writer, file_reader);\n\n    // Creating buffers to be reused in read/compress/write graph loop\n    for (int i = 0; i < buffersNumber; i++) {\n        BufferMsg reuseBufferMsg = BufferMsg::createBufferMsg(0, io.chunkSize());\n        file_reader.try_put(reuseBufferMsg);\n    }\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n//---------------------------------------------Simple compression example------------------------------------------------\n//-----------------------------------------------------------------------------------------------------------------------\n\nvoid fgCompression(IOOperations& io, int blockSizeIn100KB) {\n    tbb::flow::graph g;\n\n    tbb::flow::source_node< BufferMsg > file_reader(g, [&io](BufferMsg& bufferMsg)->bool {\n        if (io.hasDataToRead()) {\n            bufferMsg = BufferMsg::createBufferMsg(io.chunksRead(), io.chunkSize());\n            io.readChunk(bufferMsg.inputBuffer);\n            return true;\n        }\n        return false;\n    });\n\n    tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB));\n\n    tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& buffer)->size_t {\n        return buffer.seqId;\n    });\n\n    tbb::flow::function_node< BufferMsg > output_writer(g, tbb::flow::serial, [&io](const BufferMsg& bufferMsg) {\n        io.writeChunk(bufferMsg.outputBuffer);\n        BufferMsg::destroyBufferMsg(bufferMsg);\n    });\n\n    make_edge(file_reader, compressor);\n    make_edge(compressor, ordering);\n    make_edge(ordering, output_writer);\n\n    g.wait_for_all();\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n\nbool endsWith(const std::string& str, const std::string& suffix) {\n    return str.find(suffix, str.length() - suffix.length()) != std::string::npos;\n}\n\n//-----------------------------------------------------------------------------------------------------------------------\n\nint main(int argc, char* argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        const std::string archiveExtension = \".bz2\";\n        bool verbose = false;\n        std::string asyncType;\n        std::string inputFileName;\n        int blockSizeIn100KB = 1; // block size in 100KB chunks\n        size_t memoryLimitIn1MB = 1; // memory limit for compression in megabytes granularity\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .arg(blockSizeIn100KB, \"-b\", \"\\t block size in 100KB chunks, [1 .. 9]\")\n            .arg(verbose, \"-v\", \"verbose mode\")\n            .arg(memoryLimitIn1MB, \"-l\", \"used memory limit for compression algorithm in 1MB (minimum) granularity\")\n            .arg(asyncType, \"-a\", \"name of the used graph async implementation - can be async_node or async_msg\")\n            .positional_arg(inputFileName, \"filename\", \"input file name\")\n        );\n\n        if (inputFileName.empty()) {\n            throw std::invalid_argument(\"Input file name is not specified. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (blockSizeIn100KB < 1 || blockSizeIn100KB > 9) {\n            throw std::invalid_argument(\"Incorrect block size. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (memoryLimitIn1MB < 1) {\n            throw std::invalid_argument(\"Incorrect memory limit size. Try 'fgbzip2 -h' for more information.\");\n        }\n\n        if (verbose) std::cout << \"Input file name: \" << inputFileName << std::endl;\n        if (endsWith(inputFileName, archiveExtension)) {\n            throw std::invalid_argument(\"Input file already have \" + archiveExtension + \" extension.\");\n        }\n\n        std::ifstream inputStream(inputFileName.c_str(), std::ios::in | std::ios::binary);\n        if (!inputStream.is_open()) {\n            throw std::invalid_argument(\"Cannot open \" + inputFileName + \" file.\");\n        }\n\n        std::string outputFileName(inputFileName + archiveExtension);\n\n        std::ofstream outputStream(outputFileName.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);\n        if (!outputStream.is_open()) {\n            throw std::invalid_argument(\"Cannot open \" + outputFileName + \" file.\");\n        }\n\n        // General interface to work with I/O buffers operations\n        size_t chunkSize = blockSizeIn100KB * 100 * 1024;\n        IOOperations io(inputStream, outputStream, chunkSize);\n\n        if (asyncType.empty()) {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm.\" << std::endl;\n            fgCompression(io, blockSizeIn100KB);\n        } else if (asyncType == \"async_node\") {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm with async_node based asynchronious IO operations.\" << std::endl;\n            fgCompressionAsyncNode(io, blockSizeIn100KB);\n        } else if (asyncType == \"async_msg\") {\n            if (verbose) std::cout << \"Running flow graph based compression algorithm with async_msg based asynchronious IO operations. Using limited memory: \" << memoryLimitIn1MB << \"MB.\" << std::endl;\n            fgCompressionAsyncMsg(io, blockSizeIn100KB, memoryLimitIn1MB);\n        }\n\n        inputStream.close();\n        outputStream.close();\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred. Error text is : \\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_ASYNC_NODE && __TBB_CPP11_LAMBDAS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/huffman.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Huffman coding low-level stuff                        ---*/\n/*---                                           huffman.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n/*---------------------------------------------------*/\n#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)\n#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)\n#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))\n\n#define ADDWEIGHTS(zw1,zw2)                           \\\n   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \\\n   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))\n\n#define UPHEAP(z)                                     \\\n{                                                     \\\n   Int32 zz, tmp;                                     \\\n   zz = z; tmp = heap[zz];                            \\\n   while (weight[tmp] < weight[heap[zz >> 1]]) {      \\\n      heap[zz] = heap[zz >> 1];                       \\\n      zz >>= 1;                                       \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n#define DOWNHEAP(z)                                   \\\n{                                                     \\\n   Int32 zz, yy, tmp;                                 \\\n   zz = z; tmp = heap[zz];                            \\\n   while (True) {                                     \\\n      yy = zz << 1;                                   \\\n      if (yy > nHeap) break;                          \\\n      if (yy < nHeap &&                               \\\n          weight[heap[yy+1]] < weight[heap[yy]])      \\\n         yy++;                                        \\\n      if (weight[tmp] < weight[heap[yy]]) break;      \\\n      heap[zz] = heap[yy];                            \\\n      zz = yy;                                        \\\n   }                                                  \\\n   heap[zz] = tmp;                                    \\\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbMakeCodeLengths ( UChar *len, \n                             Int32 *freq,\n                             Int32 alphaSize,\n                             Int32 maxLen )\n{\n   /*--\n      Nodes and heap entries run from 1.  Entry 0\n      for both the heap and nodes is a sentinel.\n   --*/\n   Int32 nNodes, nHeap, n1, n2, i, j, k;\n   Bool  tooLong;\n\n   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];\n   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];\n   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; \n\n   for (i = 0; i < alphaSize; i++)\n      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;\n\n   while (True) {\n\n      nNodes = alphaSize;\n      nHeap = 0;\n\n      heap[0] = 0;\n      weight[0] = 0;\n      parent[0] = -2;\n\n      for (i = 1; i <= alphaSize; i++) {\n         parent[i] = -1;\n         nHeap++;\n         heap[nHeap] = i;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );\n   \n      while (nHeap > 1) {\n         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);\n         nNodes++;\n         parent[n1] = parent[n2] = nNodes;\n         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);\n         parent[nNodes] = -1;\n         nHeap++;\n         heap[nHeap] = nNodes;\n         UPHEAP(nHeap);\n      }\n\n      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );\n\n      tooLong = False;\n      for (i = 1; i <= alphaSize; i++) {\n         j = 0;\n         k = i;\n         while (parent[k] >= 0) { k = parent[k]; j++; }\n         len[i-1] = j;\n         if (j > maxLen) tooLong = True;\n      }\n      \n      if (! tooLong) break;\n\n      /* 17 Oct 04: keep-going condition for the following loop used\n         to be 'i < alphaSize', which missed the last element,\n         theoretically leading to the possibility of the compressor\n         looping.  However, this count-scaling step is only needed if\n         one of the generated Huffman code words is longer than\n         maxLen, which up to and including version 1.0.2 was 20 bits,\n         which is extremely unlikely.  In version 1.0.3 maxLen was\n         changed to 17 bits, which has minimal effect on compression\n         ratio, but does mean this scaling step is used from time to\n         time, enough to verify that it works.\n\n         This means that bzip2-1.0.3 and later will only produce\n         Huffman codes with a maximum length of 17 bits.  However, in\n         order to preserve backwards compatibility with bitstreams\n         produced by versions pre-1.0.3, the decompressor must still\n         handle lengths of up to 20. */\n\n      for (i = 1; i <= alphaSize; i++) {\n         j = weight[i] >> 8;\n         j = 1 + (j / 2);\n         weight[i] = j << 8;\n      }\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbAssignCodes ( Int32 *code,\n                         UChar *length,\n                         Int32 minLen,\n                         Int32 maxLen,\n                         Int32 alphaSize )\n{\n   Int32 n, vec, i;\n\n   vec = 0;\n   for (n = minLen; n <= maxLen; n++) {\n      for (i = 0; i < alphaSize; i++)\n         if (length[i] == n) { code[i] = vec; vec++; };\n      vec <<= 1;\n   }\n}\n\n\n/*---------------------------------------------------*/\nvoid BZ2_hbCreateDecodeTables ( Int32 *limit,\n                                Int32 *base,\n                                Int32 *perm,\n                                UChar *length,\n                                Int32 minLen,\n                                Int32 maxLen,\n                                Int32 alphaSize )\n{\n   Int32 pp, i, j, vec;\n\n   pp = 0;\n   for (i = minLen; i <= maxLen; i++)\n      for (j = 0; j < alphaSize; j++)\n         if (length[j] == i) { perm[pp] = j; pp++; };\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;\n   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;\n\n   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];\n\n   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;\n   vec = 0;\n\n   for (i = minLen; i <= maxLen; i++) {\n      vec += (base[i+1] - base[i]);\n      limit[i] = vec-1;\n      vec <<= 1;\n   }\n   for (i = minLen + 1; i <= maxLen; i++)\n      base[i] = ((limit[i-1] + 1) << 1) - base[i];\n}\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                         huffman.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/randtable.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*-------------------------------------------------------------*/\n/*--- Table for randomising repetitive blocks               ---*/\n/*---                                         randtable.cpp ---*/\n/*-------------------------------------------------------------*/\n\n/* ------------------------------------------------------------------\n   The original source for this example:\n   This file is part of bzip2/libbzip2, a program and library for\n   lossless, block-sorting data compression.\n\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>\n\n   This program, \"bzip2\", the associated library \"libbzip2\", and all\n   documentation, are copyright (C) 1996-2010 Julian R Seward.  All\n   rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n   1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n   2. The origin of this software must not be misrepresented; you must \n   not claim that you wrote the original software.  If you use this \n   software in a product, an acknowledgment in the product \n   documentation would be appreciated but is not required.\n\n   3. Altered source versions must be plainly marked as such, and must\n   not be misrepresented as being the original software.\n\n   4. The name of the author may not be used to endorse or promote \n   products derived from this software without specific prior written \n   permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   Julian Seward, jseward@bzip.org\n   bzip2/libbzip2 version 1.0.6 of 6 September 2010\n   ------------------------------------------------------------------ */\n\n\n#include \"bzlib_private.h\"\n\n\n/*---------------------------------------------*/\nInt32 BZ2_rNums[512] = { \n   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, \n   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, \n   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, \n   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, \n   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, \n   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, \n   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, \n   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, \n   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, \n   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, \n   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, \n   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, \n   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, \n   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, \n   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, \n   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, \n   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, \n   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, \n   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, \n   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, \n   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, \n   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, \n   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, \n   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, \n   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, \n   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, \n   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, \n   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, \n   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, \n   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, \n   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, \n   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, \n   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, \n   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, \n   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, \n   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, \n   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, \n   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, \n   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, \n   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, \n   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, \n   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, \n   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, \n   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, \n   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, \n   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, \n   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, \n   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, \n   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, \n   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, \n   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, \n   936, 638\n};\n\n\n/*-------------------------------------------------------------*/\n/*--- end                                       randtable.c ---*/\n/*-------------------------------------------------------------*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/fgbzip2/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. fgbzip2 sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>fgbzip2 sample</h1>\n\t</div>\n\n\t<p>\n\t\tfgbzip2 is a parallel implementation of bzip2 block-sorting file compressor that uses tbb::flow.\n\t\tThe output of this application is fully compatible with bzip2 v1.0.6 or newer.\n\t<br><br>\n\t<i>\n\t\tThis example includes software developed by Julian R Seward. See\n\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t</i>\n\t<br>\n\t\tIt exemplifies support for asynchronous capabilities in the flow graph API, in particular async_node and async_msg.\n\t<br><br>\n\t\tThis example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fgbzip2.cpp\">fgbzip2.cpp</a>\n\t\t\t\t<dd>Flow Graph implementation of bzip2 compressor.\n\t\t\t\t<dt><a href=\"blocksort.cpp\">blocksort.cpp</a>\n\t\t\t\t<dd>Block sorting machinery of libbzip2.\n\t\t\t\t<dt><a href=\"bzlib.cpp\">bzlib.cpp</a>\n\t\t\t\t<dd>libbzip2 top-level functions.\n\t\t\t\t<dt><a href=\"bzlib.h\">bzlib.h</a>\n\t\t\t\t<dd>Public header file for the libbzip2.\n\t\t\t\t<dt><a href=\"bzlib_private.h\">bzlib_private.h</a>\n\t\t\t\t<dd>Private header file for the libbzip2.\n\t\t\t\t<dt><a href=\"compress.cpp\">compress.cpp</a>\n\t\t\t\t<dd>Compression machinery of libbzip2.\n\t\t\t\t<dt><a href=\"crctable.cpp\">crctable.cpp</a>\n\t\t\t\t<dd>libbzip2 table for doing CRCs.\n\t\t\t\t<dt><a href=\"decompress.cpp\">decompress.cpp</a>\n\t\t\t\t<dd>Decompression machinery of libbzip2.\n\t\t\t\t<dt><a href=\"huffman.cpp\">huffman.cpp</a>\n\t\t\t\t<dd>Huffman coding low-level stuff of libbzip2.\n\t\t\t\t<dt><a href=\"randtable.cpp\">randtable.cpp</a>\n\t\t\t\t<dd>libbzip2 table for randomising repetitive blocks.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fgbzip2 <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>fgbzip2 [<i>-b</i>=value] [<i>-v</i>] [<i>-l</i>=value] [<i>-a</i>=value] [<i>filename</i>]</tt>\n\t\t\t\t<dd><i>-b</i> block size in 100 Kb chunks, [1 .. 9]<br>\n\t\t\t\t\t<i>-v</i> print diagnostic output to screen<br>\n\t\t\t\t\t<i>-l</i> used memory limit for compression algorithm with 1MB (minimum) granularity<br>\n\t\t\t\t\t<i>-a</i> name of the used graph async realization - can be async_node or async_msg<br>\n\t\t\t\t\t<i>filename</i> name of the file to compress<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size, e.g., <tt>fgbzip2&nbsp;-b=1&nbsp;-a&nbsp;fgbzip2</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tThe \"libbzip2\" sources for this example is\n\t\t\t\tCopyright (c) 1996-2010 Julian R Seward.\n\t\t\t\tAll rights reserved.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tRedistribution and use in source and binary forms, with or without\n\t\t\t\tmodification, are permitted provided that the following conditions\n\t\t\t\tare met:\n\t\t\t\t<ol>\n\t\t\t\t\t<li>Redistributions of source code must retain the above copyright\n\t\t\t\t\t   notice, this list of conditions and the following disclaimer.\n\t\t\t\t\t<li>The origin of this software must not be misrepresented; you must\n\t\t\t\t\t   not claim that you wrote the original software.  If you use this\n\t\t\t\t\t   software in a product, an acknowledgment in the product\n\t\t\t\t\t   documentation would be appreciated but is not required.\n\t\t\t\t\t<li>Altered source versions must be plainly marked as such, and must\n\t\t\t\t\t   not be misrepresented as being the original software.\n\t\t\t\t\t<li>The name of the author may not be used to endorse or promote\n\t\t\t\t\t   products derived from this software without specific prior written\n\t\t\t\t\t   permission.\n\t\t\t\t</ol>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\t\t\t\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n\t\t\t\tINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n\t\t\t\tWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\t\t\t\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\t\t\t\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks (Intel&reg; TBB). Samples on Intel&reg; TBB Flow Graph feature</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks (Intel&reg; TBB).<br>Samples on Intel&reg; TBB Flow Graph feature</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the Intel TBB Flow Graph feature.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"dining_philosophers/readme.html\">dining_philosophers</a>\n\t\t\t\t<dd>An implementation of dining philosophers in graph using the reserving join node.\n\t\t\t\t<dt><a href=\"binpack/readme.html\">binpack</a>\n\t\t\t\t<dd>A solution to the binpacking problem using a <code>queue_node</code>, a <code>buffer_node</code> and <code>function_nodes</code>.\n\t\t\t\t<dt><a href=\"logic_sim/readme.html\">logic_sim</a>\n\t\t\t\t<dd>A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits.\n\t\t\t\t<dt><a href=\"som/readme.html\">som</a>\n\t\t\t\t<dd>A simple example of a Kohonen Self-Organizing Map using cancellation.\n\t\t\t\t<dt><a href=\"fgbzip2/readme.html\">fgbzip2</a>\n\t\t\t\t<dd>A parallel implementation of bzip2 block-sorting file compressor.\n\t\t\t\t<dt><a href=\"cholesky/readme.html\">cholesky</a>\n\t\t\t\t<dd>Several versions of Cholesky Factorization algorithm implementation.\n\t\t\t\t<dt><a href=\"stereo/readme.html\">stereo</a>\n\t\t\t\t<dd>An implementation of stereo image creation from two images (anaglyph effect).\n\t\t\t\t<dt><a href=\"matmult/readme.html\">matmult</a>\n\t\t\t\t<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/D_latch.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_dlatch_H\n#define __TBBexample_graph_logicsim_dlatch_H 1\n\n#include \"basics.h\"\n\nclass D_latch : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > {\n    broadcast_node<signal_t> D_port;\n    broadcast_node<signal_t> E_port;\n    not_gate a_not;\n    and_gate<2> first_and;\n    and_gate<2> second_and;\n    nor_gate<2> first_nor;\n    nor_gate<2> second_nor;\n    graph& my_graph;\n    typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > base_type;\n\n public:\n    D_latch(graph& g) : base_type(g), my_graph(g), D_port(g), E_port(g), a_not(g), first_and(g), second_and(g), \n                        first_nor(g), second_nor(g) \n    {\n        make_edge(D_port, input_port<0>(a_not));\n        make_edge(D_port, input_port<1>(second_and));\n        make_edge(E_port, input_port<1>(first_and));\n        make_edge(E_port, input_port<0>(second_and));\n        make_edge(a_not, input_port<0>(first_and));\n        make_edge(first_and, input_port<0>(first_nor));\n        make_edge(second_and, input_port<1>(second_nor));\n        make_edge(first_nor, input_port<0>(second_nor));\n        make_edge(second_nor, input_port<1>(first_nor));\n \n        base_type::input_ports_type input_tuple(D_port, E_port);\n        base_type::output_ports_type output_tuple(output_port<0>(first_nor), output_port<0>(second_nor)); \n\n        base_type::set_external_ports(input_tuple, output_tuple); \n        base_type::add_visible_nodes(D_port, E_port, a_not, first_and, second_and, first_nor, second_nor);\n    }\n    ~D_latch() {}\n};\n\n#endif /* __TBBexample_graph_logicsim_dlatch_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=test_all\nARGS=4\nPERF_RUN_ARGS=auto silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # which icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:    release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb $(LIBS) \n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb_debug $(LIBS) \nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/basics.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_basics_H\n#define __TBBexample_graph_logicsim_basics_H 1\n\n#include <cstdio>\n#include <string>\n#include \"tbb/atomic.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"../../common/utility/utility.h\"\n\n#ifndef _WIN32\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\n#include <windows.h>\n\nvoid rt_sleep(int msec) {\n    Sleep(msec);\n}\n#endif  /*  _WIN32  */\n\nusing namespace std;\nusing namespace tbb;\nusing namespace tbb::flow;\n\ntypedef enum { low=0, high, undefined } signal_t;\n\ntemplate<int N> class gate;\n\ntemplate<>\nclass gate<1> : public composite_node< tuple< signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<2> : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t,signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<3> : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t, signal_t, signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports));\n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\ntemplate<>\nclass gate<4> : public composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > {\nprotected:\n    typedef indexer_node<signal_t, signal_t, signal_t, signal_t> input_port_t;\n    typedef multifunction_node< input_port_t::output_type, tuple<signal_t> > gate_fn_t;\n    typedef gate_fn_t::output_ports_type ports_type;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > base_type;\npublic:\n    template <typename Body>\n    gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) {\n        make_edge(in_ports, gate_fn);\n        base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports), input_port<3>(in_ports)); \n        base_type::output_ports_type output_tuple(output_port<0>(gate_fn));\n        base_type::set_external_ports(input_tuple, output_tuple);\n        base_type::add_visible_nodes(in_ports, gate_fn);\n    }\n    virtual ~gate() {}\n    gate& operator=(const gate& src) { return *this; }\nprotected:\n    graph& my_graph;\nprivate:\n    input_port_t in_ports;\n    gate_fn_t gate_fn;\n};\n\n// Input devices\nclass steady_signal {\n    graph& my_graph;\n    signal_t init_signal;\n    write_once_node<signal_t> signal_node;\n public:\n    steady_signal(graph& g, signal_t v) :\n        my_graph(g), init_signal(v), signal_node(g) {}\n    steady_signal(const steady_signal& src) : \n        my_graph(src.my_graph), init_signal(src.init_signal), \n        signal_node(src.my_graph) {}\n    ~steady_signal() {}\n    // Assignment is ignored\n    steady_signal& operator=(const steady_signal& src) { return *this; }\n    sender<signal_t>& get_out() { return signal_node; }\n    void activate() { signal_node.try_put(init_signal); }\n};\n\nclass pulse {\n    class clock_body {\n        size_t& ms;\n        int& reps;\n        signal_t val;\n    public:\n        clock_body(size_t& _ms, int& _reps) : ms(_ms), reps(_reps), val(low) {}\n        bool operator()(signal_t& out) {\n            rt_sleep((int)ms);\n            if (reps>0) --reps;\n            if (val==low) val = high;\n            else val = low;\n            out = val;\n            return reps>0 || reps == -1;\n        }\n    };\n    graph& my_graph;\n    size_t ms, init_ms;\n    int reps, init_reps;\n    source_node<signal_t> clock_node;\n\npublic:\n    pulse(graph& g, size_t _ms=1000, int _reps=-1) : \n        my_graph(g), ms(_ms), init_ms(_ms), reps(_reps), init_reps(_reps),\n        clock_node(g, clock_body(ms, reps), false)\n    {}\n    pulse(const pulse& src) : \n        my_graph(src.my_graph), ms(src.init_ms), init_ms(src.init_ms),\n        reps(src.init_reps), init_reps(src.init_reps), \n        clock_node(src.my_graph, clock_body(ms, reps), false)\n    {}\n    ~pulse() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph\n    pulse& operator=(const pulse& src) {\n        ms = src.ms; init_ms = src.init_ms; reps = src.reps; init_reps = src.init_reps;\n        return *this; \n    }\n    sender<signal_t>& get_out() { return clock_node; }\n    void activate() { clock_node.activate(); }\n    void reset() { reps = init_reps; }\n};\n\nclass push_button {\n    graph& my_graph;\n    overwrite_node<signal_t> push_button_node;\n public:\n    push_button(graph& g) : my_graph(g), push_button_node(g) { \n        push_button_node.try_put(low);\n    }\n    push_button(const push_button& src) : \n        my_graph(src.my_graph), push_button_node(src.my_graph) { \n        push_button_node.try_put(low);\n    }\n    ~push_button() {}\n    // Assignment is ignored\n    push_button& operator=(const push_button& src) { return *this; }\n    sender<signal_t>& get_out() { return push_button_node; }\n    void press() { push_button_node.try_put(high); }\n    void release() { push_button_node.try_put(low); }\n};\n\nclass toggle {\n    graph& my_graph;\n    signal_t state;\n    overwrite_node<signal_t> toggle_node;\n public:\n    toggle(graph& g) : my_graph(g), state(undefined), toggle_node(g) {}\n    toggle(const toggle& src) : my_graph(src.my_graph), state(undefined), \n                                toggle_node(src.my_graph) {}\n    ~toggle() {}\n    // Assignment ignored\n    toggle& operator=(const toggle& src) { return *this; }\n    sender<signal_t>& get_out() { return toggle_node; }\n    void flip() { \n        if (state==high) state = low; \n        else state = high;\n        toggle_node.try_put(state); \n    }\n    void activate() { \n        state = low;\n        toggle_node.try_put(state);\n    }\n};\n\n// Basic gates\nclass buffer : public gate<1> {\n    using gate<1>::my_graph;\n    typedef gate<1>::ports_type ports_type;\n    class buffer_body {\n        signal_t state;\n        bool touched;\n    public:\n        buffer_body() : state(undefined), touched(false) {}\n        void operator()(const input_port_t::output_type &v, ports_type& p) { \n            if (!touched || state != cast_to<signal_t>(v)) {\n                state = cast_to<signal_t>(v); \n                tbb::flow::get<0>(p).try_put(state); \n                touched = true;\n            }\n        }\n    };\npublic: \n    buffer(graph& g) : gate<1>(g, buffer_body()) {}\n    buffer(const buffer& src) : gate<1>(src.my_graph, buffer_body()) {}\n    ~buffer() {}\n};\n\nclass not_gate : public gate<1> {\n    using gate<1>::my_graph;\n    typedef gate<1>::ports_type ports_type;\n    class not_body {\n        signal_t port;\n        bool touched;\n    public:\n    not_body() : port(undefined), touched(false) {}\n        void operator()(const input_port_t::output_type &v, ports_type& p) {\n            if (!touched || port != cast_to<signal_t>(v)) {\n                port = cast_to<signal_t>(v); \n                signal_t state = low;\n                if (port==low) state = high; \n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public: \n    not_gate(graph& g) : gate<1>(g, not_body()) {}\n    not_gate(const not_gate& src) : gate<1>(src.my_graph, not_body()) {}\n    ~not_gate() {}\n};\n\ntemplate <int N>\nclass and_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t::output_type from_input;\n    class and_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        and_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const from_input& v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=high;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == low) { new_state = low; break; }\n                else if (ports[i] == undefined && new_state != low) { new_state = undefined; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    and_gate(graph& g) : gate<N>(g, and_body()) {}\n    and_gate(const and_gate<N>& src) : gate<N>(src.my_graph, and_body()) {}\n    ~and_gate() {}\n};\n\ntemplate<int N>\nclass or_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t::output_type from_input;\n    class or_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        or_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const from_input& v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == high) { new_state = high; break; }\n                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\npublic:\n    or_gate(graph& g) : gate<N>(g, or_body()) {}\n    or_gate(const or_gate& src) : gate<N>(src.my_graph, or_body()) {}\n    ~or_gate() {}\n};\n\ntemplate <int N>\nclass xor_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t input_port_t;\n    class xor_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        xor_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const typename input_port_t::output_type &v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0, highs=0;\n            while (i<N) {\n                if (ports[i] == undefined) { new_state = undefined; }  \n                else if (ports[i] == high && new_state == low) { new_state = high; ++highs; }\n                else if (ports[i] == high && highs > 0) { new_state = low; break; }\n                else if (ports[i] == high ) { ++highs; }\n                ++i;\n            }\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    xor_gate(graph& g) : gate<N>(g, xor_body()) {}\n    xor_gate(const xor_gate& src) : gate<N>(src.my_graph, xor_body()) {}\n    ~xor_gate() {}\n};\n\ntemplate <int N>\nclass nor_gate : public gate<N> {\n    using gate<N>::my_graph;\n    typedef typename gate<N>::ports_type ports_type;\n    typedef typename gate<N>::input_port_t input_port_t;\n    class nor_body {\n        signal_t *ports;\n        signal_t state;\n        bool touched;\n    public:\n        nor_body() : state(undefined), touched(false) {\n            ports = new signal_t[N];\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const typename input_port_t::output_type &v, ports_type& p) {\n            ports[v.tag()] = cast_to<signal_t>(v);\n            signal_t new_state=low;\n            size_t i=0;\n            while (i<N) {\n                if (ports[i] == high) { new_state = high; break; }\n                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }\n                ++i;\n            }\n            if (new_state == high) new_state = low;\n            else if (new_state == low) new_state = high;\n            if (!touched || state != new_state) {\n                state = new_state;\n                tbb::flow::get<0>(p).try_put(state);\n                touched = true;\n            }\n        }\n    };\n public:\n    nor_gate(graph& g) : gate<N>(g, nor_body()) {}\n    nor_gate(const nor_gate& src) : gate<N>(src.my_graph, nor_body()) {}\n    ~nor_gate() {}\n};\n\n// Output devices\nclass led {\n    class led_body {\n        signal_t &state;\n        string &label;\n        bool report_changes;\n        bool touched;\n    public:\n        led_body(signal_t &s, string &l, bool r) :\n            state(s), label(l), report_changes(r), touched(false)\n        {}\n        continue_msg operator()(signal_t b) {\n            if (!touched || b!=state) {\n                state = b;\n                if (state != undefined && report_changes) {\n                    if (state) printf(\"%s: (*)\\n\", label.c_str());\n                    else printf(\"%s: ( )\\n\", label.c_str());\n                }\n                touched = false;\n            }\n            return continue_msg();\n        }\n    };\n    graph& my_graph;\n    string label;\n    signal_t state;\n    bool report_changes;\n    function_node<signal_t, continue_msg> led_node;\n public:\n    led(graph& g, string l, bool rc=false) : my_graph(g), label(l), state(undefined), \n                                             report_changes(rc), \n                                             led_node(g, 1, led_body(state, label, report_changes))\n    {}\n    led(const led& src) : my_graph(src.my_graph), label(src.label), state(undefined), \n                          report_changes(src.report_changes), \n                          led_node(src.my_graph, 1, led_body(state, label, report_changes)) \n    {}\n    ~led() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph\n    // state is set to undefined so that next signal changes it\n    led& operator=(const led& src) { \n        label = src.label; state = undefined; report_changes = src.report_changes; \n        return *this;\n    }\n    receiver<signal_t>& get_in() { return led_node; }\n    void display() { \n        if (state == high) printf(\"%s: (*)\\n\", label.c_str());\n        else if (state == low) printf(\"%s: ( )\\n\", label.c_str());\n        else printf(\"%s: (u)\\n\", label.c_str());\n    }\n    signal_t get_value() { return state; }\n};\n\nclass digit : public gate<4> {\n    using gate<4>::my_graph;\n    typedef gate<4>::ports_type ports_type;\n    typedef gate<4>::input_port_t input_port_t;\n    class digit_body {\n        signal_t ports[4];\n        static const int N = 4;\n        unsigned int &state;\n        string &label;\n        bool& report_changes;\n    public:\n        digit_body(unsigned int &s, string &l, bool& r) : state(s), label(l), report_changes(r) {\n            for (int i=0; i<N; ++i) ports[i] = undefined;\n        }\n        void operator()(const input_port_t::output_type& v, ports_type& p) {\n            unsigned int new_state = 0;\n            ports[v.tag()] = cast_to<signal_t>(v);\n            if (ports[0] == high) ++new_state;\n            if (ports[1] == high) new_state += 2;\n            if (ports[2] == high) new_state += 4;\n            if (ports[3] == high) new_state += 8;\n            if (state != new_state) {\n                state = new_state;\n                if (report_changes) {\n                    printf(\"%s: %x\\n\", label.c_str(), state);\n                }\n            }\n        }\n    };\n    string label;\n    unsigned int state;\n    bool report_changes;\n public:\n    digit(graph& g, string l, bool rc=false) : \n        gate<4>(g, digit_body(state, label, report_changes)), \n        label(l), state(0), report_changes(rc) {}\n    digit(const digit& src) : \n        gate<4>(src.my_graph, digit_body(state, label, report_changes)), \n        label(src.label), state(0), report_changes(src.report_changes) {}\n    ~digit() {}\n    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph.\n    // state is reset as in constructors\n    digit& operator=(const digit& src) { \n        label = src.label; state = 0; report_changes = src.report_changes; \n        return *this;\n    }\n    void display() { printf(\"%s: %x\\n\", label.c_str(), state); }\n    unsigned int get_value() { return state; }\n};\n\n#endif /* __TBBexample_graph_logicsim_basics_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/four_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_fba_H\n#define __TBBexample_graph_logicsim_fba_H 1\n\n#include \"one_bit_adder.h\"\n\ntypedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t >,\n                      tuple< signal_t, signal_t, signal_t, signal_t, signal_t > > fba_base_type;\n\nclass four_bit_adder : public fba_base_type {\n    graph& my_graph;\n    std::vector<one_bit_adder> four_adders; \n\npublic:\n    four_bit_adder(graph& g) : fba_base_type(g), my_graph(g), four_adders(4, one_bit_adder(g)) {\n        make_connections();\n        set_up_composite();\n    }\n    four_bit_adder(const four_bit_adder& src) : \n        fba_base_type(src.my_graph), my_graph(src.my_graph), four_adders(4, one_bit_adder(src.my_graph)) \n    {\n        make_connections();\n        set_up_composite();\n    }\n    ~four_bit_adder() {}\n\nprivate:\n    void make_connections() {\n        make_edge(output_port<1>(four_adders[0]), input_port<0>(four_adders[1]));\n        make_edge(output_port<1>(four_adders[1]), input_port<0>(four_adders[2]));\n        make_edge(output_port<1>(four_adders[2]), input_port<0>(four_adders[3]));\n    }\n    void set_up_composite() {\n\n        fba_base_type::input_ports_type input_tuple(input_port<0>(four_adders[0]/*CI*/), input_port<1>(four_adders[0]), input_port<2>(four_adders[0]), input_port<1>(four_adders[1]), input_port<2>(four_adders[1]), input_port<1>(four_adders[2]), input_port<2>(four_adders[2]), input_port<1>(four_adders[3]), input_port<2>(four_adders[3])); \n\n       fba_base_type::output_ports_type output_tuple(output_port<0>(four_adders[0]), output_port<0>(four_adders[1]), output_port<0>(four_adders[2]), output_port<0>(four_adders[3]),output_port<1>(four_adders[3]/*CO*/));\n\n        fba_base_type::set_external_ports(input_tuple, output_tuple);\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_fba_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/one_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_oba_H\n#define __TBBexample_graph_logicsim_oba_H 1\n\nnamespace P {\n    //input ports \n    const int CI = 0;\n    const int A0 = 1;\n    const int B0 = 2;\n    const int A1 = 3;\n    const int B1 = 4;\n    const int A2 = 5;\n    const int B2 = 6;\n    const int A3 = 7;\n    const int B3 = 8;\n    \n    //output_ports\n    const int S0 = 0;\n    const int S1 = 1;\n    const int S2 = 2;\n    const int S3 = 3;\n\n#if USE_TWO_BIT_FULL_ADDER\n    const int CO = 2;\n#else   \n    const int CO = 4;\n#endif\n}\n\n#include \"basics.h\"\n\nclass one_bit_adder : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > {\n    broadcast_node<signal_t> A_port;\n    broadcast_node<signal_t> B_port;\n    broadcast_node<signal_t> CI_port;\n    xor_gate<2> FirstXOR;\n    xor_gate<2> SecondXOR;\n    and_gate<2> FirstAND;\n    and_gate<2> SecondAND;\n    or_gate<2> FirstOR;\n    graph& my_graph;\n    typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > base_type;\n\npublic:\n    one_bit_adder(graph& g) : base_type(g), my_graph(g), A_port(g), B_port(g), CI_port(g), FirstXOR(g), \n                              SecondXOR(g), FirstAND(g), SecondAND(g), FirstOR(g) {\n        make_connections();\n        set_up_composite();\n    }\n    one_bit_adder(const one_bit_adder& src) : \n        base_type(src.my_graph), my_graph(src.my_graph), A_port(src.my_graph), B_port(src.my_graph), \n        CI_port(src.my_graph), FirstXOR(src.my_graph), SecondXOR(src.my_graph), \n        FirstAND(src.my_graph), SecondAND(src.my_graph), FirstOR(src.my_graph) \n    {\n        make_connections();\n        set_up_composite();\n    }\n\n    ~one_bit_adder() {}\n\nprivate:\n    void make_connections() {\n  \n        make_edge(A_port, input_port<0>(FirstXOR));\n        make_edge(A_port, input_port<0>(FirstAND));\n        make_edge(B_port, input_port<1>(FirstXOR));\n        make_edge(B_port, input_port<1>(FirstAND));\n        make_edge(CI_port, input_port<1>(SecondXOR));\n        make_edge(CI_port, input_port<1>(SecondAND));\n        make_edge(FirstXOR, input_port<0>(SecondXOR));\n        make_edge(FirstXOR, input_port<0>(SecondAND));\n        make_edge(SecondAND, input_port<0>(FirstOR));\n        make_edge(FirstAND, input_port<1>(FirstOR));\n    }\n\n    void set_up_composite() {\n        base_type::input_ports_type input_tuple(CI_port, A_port, B_port);\n        base_type::output_ports_type output_tuple(output_port<0>(SecondXOR), output_port<0>(FirstOR));\n        base_type::set_external_ports( input_tuple, output_tuple);\n        base_type::add_visible_nodes(A_port, B_port, CI_port, FirstXOR, SecondXOR, FirstAND, SecondAND, FirstOR );\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_oba_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. logic_sim sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Logic_sim sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple tbb::flow example that performs\n\t\tsimplistic digital logic simulations with basic logic gates that can\n\t\tbe easily composed to create more interesting circuits. It\n\t\texemplifies the multifunction_node and the indexer_node CPF, among others.\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"basics.h\">basics.h</a>\n\t\t\t\t<dd>Several I/O devices and basic gates.\n\t\t\t\t<dt><a href=\"one_bit_adder.h\">one_bit_adder.h</a>\n\t\t\t\t<dd>A one-bit full adder composed of basic gates.\n\t\t\t\t<dt><a href=\"four_bit_adder.h\">four_bit_adder.h</a>\n\t\t\t\t<dd>A four-bit full adder composed of one-bit adders.\n\t\t\t\t<dt><a href=\"D_latch.h\">D_latch.h</a>\n\t\t\t\t<dd>A D-latch composed of basic gates.\n\t\t\t\t<dt><a href=\"test_all.cpp\">test_all.cpp</a>\n\t\t\t\t<dd>A simple test program that exercises the code in the headers.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>test_all <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>test_all [<i>#threads</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>#threads</i>]</tt>\n\t\t\t\t<dd><tt><i>#threads</i></tt> is the number of threads to use; a range of the form <tt><i>low[:high]</i></tt> where <tt><i>low</i></tt> and optional <tt><i>high</i></tt> are non-negative integers, or <tt><i>'auto'</i></tt> for a platform-specific default number.<br>\n\t\t\t\t\t<tt><i>verbose</i></tt> print diagnostic output to screen<br>\n\t\t\t\t\t<tt><i>silent</i></tt> limits output to timing info; overrides verbose<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads, e.g., <tt>test_all&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/test_all.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/tbb_config.h\"\n#include <cstdio>\n\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n#if _MSC_VER\n#pragma warning (disable: 4503) // Suppress \"decorated name length exceeded, name was truncated\" warning\n#endif\n\n#define USE_TWO_BIT_FULL_ADDER 1\n\n#include \"basics.h\"\n#include \"one_bit_adder.h\"\n#if USE_TWO_BIT_FULL_ADDER\n#include \"two_bit_adder.h\"\n#else\n#include \"four_bit_adder.h\"\n#endif\n#include \"D_latch.h\"\n#include <cassert>\n\n// User-specified globals with default values\nbool verbose = false;            // prints bin details and other diagnostics to screen\nbool silent = false;             // suppress all output except for time\n\nint get_default_num_threads() {\n    static int threads = 0;\n    if (threads == 0)\n        threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\nint main(int argc, char *argv[]) {\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    try {\n        utility::thread_number_range threads(get_default_num_threads);\n        utility::parse_cli_arguments(argc, argv,\n                                     utility::cli_argument_pack()\n                                     //\"-h\" option for displaying help is present implicitly\n                                     .positional_arg(threads,\"#threads\",utility::thread_number_range_desc)\n                                     .arg(verbose,\"verbose\",\"   print diagnostic output to screen\")\n                                     .arg(silent,\"silent\",\"    limits output to timing info; overrides verbose\")\n        );\n\n        if (silent) verbose = false;  // make silent override verbose\n\n        tick_count start = tick_count::now();\n        for(int p = threads.first; p <= threads.last; p = threads.step(p)) {\n            task_scheduler_init init(p);\n            if (!silent)  cout << \"graph test running on \" << p << \" threads.\\n\";\n            \n            graph g;\n\n            { // test buffer: 0, 1\n                buffer b(g);\n                toggle input(g);\n                led output(g, \"OUTPUT\", false); // false means we will explicitly call display to see LED\n                \n                make_edge(input.get_out(), input_port<0>(b));\n                make_edge(output_port<0>(b), output.get_in());\n                \n                if (!silent) printf(\"Testing buffer...\\n\");\n                input.activate(); // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input.flip(); // 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test not_gate: 0, 1\n                not_gate n(g);\n                toggle input(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input.get_out(), input_port<0>(n));\n                make_edge(output_port<0>(n), output.get_in());\n                \n                if (!silent) printf(\"Testing not_gate...\\n\");\n                input.activate(); // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input.flip(); // 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n            { // test two-input and_gate: 00, 01, 10, 11\n                and_gate<2> a(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(a));\n                make_edge(input1.get_out(), input_port<1>(a));\n                make_edge(output_port<0>(a), output.get_in());\n                \n                if (!silent) printf(\"Testing and_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input1.flip(); input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test three-input or_gate: 000, 001, 010, 100, 011, 101, 110, 111\n                or_gate<3> o(g);\n                toggle input0(g);\n                toggle input1(g);\n                toggle input2(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(o));\n                make_edge(input1.get_out(), input_port<1>(o));\n                make_edge(input2.get_out(), input_port<2>(o));\n                make_edge(output_port<0>(o), output.get_in());\n                \n                if (!silent) printf(\"Testing or_gate...\\n\");\n                input2.activate();  input1.activate();  input0.activate();  // 0 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip(); input0.flip();  // 0 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  // 1 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  input0.flip();  // 0 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input2.flip();  input1.flip();  // 1 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip();  input0.flip();  // 1 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 1 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n            }\n\n            { // test two-input xor_gate: 00, 01, 10, 11\n                xor_gate<2> x(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(x));\n                make_edge(input1.get_out(), input_port<1>(x));\n                make_edge(output_port<0>(x), output.get_in());\n                \n                if (!silent) printf(\"Testing xor_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input1.flip();  input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n\n            { // test two-input nor_gate: 00, 01, 10, 11\n                nor_gate<2> n(g);\n                toggle input0(g);\n                toggle input1(g);\n                led output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(n));\n                make_edge(input1.get_out(), input_port<1>(n));\n                make_edge(output_port<0>(n), output.get_in());\n                \n                if (!silent) printf(\"Testing nor_gate...\\n\");\n                input1.activate();  input0.activate();  // 0 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == high);\n                input0.flip();  // 0 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input1.flip();  input0.flip();  // 1 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n                input0.flip();  // 1 1\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == low);\n            }\n\n            { // test steady_signal and digit\n                steady_signal input0(g, high);\n                steady_signal input1(g, low);\n                and_gate<2> a(g);\n                or_gate<2> o(g);\n                xor_gate<2> x(g);\n                nor_gate<2> n(g);\n                digit output(g, \"OUTPUT\", false);\n                \n                make_edge(input0.get_out(), input_port<0>(a));\n                make_edge(input1.get_out(), input_port<1>(a));\n                make_edge(output_port<0>(a), input_port<0>(output));\n\n                make_edge(input0.get_out(), input_port<0>(o));\n                make_edge(input1.get_out(), input_port<1>(o));\n                make_edge(output_port<0>(o), input_port<1>(output));\n\n                make_edge(input0.get_out(), input_port<0>(x));\n                make_edge(input1.get_out(), input_port<1>(x));\n                make_edge(output_port<0>(x), input_port<2>(output));\n\n                make_edge(input0.get_out(), input_port<0>(n));\n                make_edge(input1.get_out(), input_port<1>(n));\n                make_edge(output_port<0>(n), input_port<3>(output));\n                \n                if (!silent) printf(\"Testing steady_signal...\\n\");\n                input0.activate();  // 1\n                input1.activate();  // 0\n                g.wait_for_all();\n                if (!silent) output.display();\n                assert(output.get_value() == 6);\n            }\n\n            { // test push_button\n                push_button p(g);\n                buffer b(g);\n                led output(g, \"OUTPUT\", !silent); // true means print all LED state changes\n\n                make_edge(p.get_out(), input_port<0>(b));\n                make_edge(output_port<0>(b), output.get_in());\n\n                if (!silent) printf(\"Testing push_button...\\n\");\n                p.press();\n                p.release();\n                p.press();\n                p.release();\n                g.wait_for_all();\n            }\n\n            { // test one_bit_adder\n                one_bit_adder my_adder(g);\n                toggle A(g);\n                toggle B(g);\n                toggle CarryIN(g);\n                led Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n                \n                make_edge(A.get_out(), input_port<P::A0>(my_adder));\n                make_edge(B.get_out(), input_port<P::B0>(my_adder));\n                make_edge(CarryIN.get_out(), input_port<P::CI>(my_adder));\n                make_edge(output_port<P::S0>(my_adder), Sum.get_in());\n                make_edge(output_port<1>(my_adder), CarryOUT.get_in());\n                \n                A.activate();\n                B.activate();\n                CarryIN.activate();\n                \n                if (!silent) printf(\"A on\\n\");\n                A.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A off\\n\");\n                A.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"B on\\n\");\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                if (!silent) printf(\"B off\\n\");\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"CarryIN on\\n\");\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));\n                if (!silent) printf(\"CarryIN off\\n\");\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&B on\\n\");\n                A.flip();\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&B off\\n\");\n                A.flip();\n                B.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&CarryIN on\\n\");\n                A.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&CarryIN off\\n\");\n                A.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"B&CarryIN on\\n\");\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"B&CarryIN off\\n\");\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"A&B&CarryIN on\\n\");\n                A.flip();\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == high) && (CarryOUT.get_value() == high));\n                if (!silent) printf(\"A&B&CarryIN off\\n\");\n                A.flip();\n                B.flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));\n            }\n\n#if USE_TWO_BIT_FULL_ADDER\n            { // test two_bit_adder\n                if (!silent) printf(\"testing two_bit adder\\n\");\n                two_bit_adder two_adder(g);\n                std::vector<toggle> A(2, toggle(g));\n                std::vector<toggle> B(2, toggle(g));\n                toggle CarryIN(g);\n                digit Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n\n                make_edge(A[0].get_out(), input_port<P::A0>(two_adder));\n                make_edge(B[0].get_out(), input_port<P::B0>(two_adder));\n                make_edge(output_port<P::S0>(two_adder), input_port<0>(Sum));\n\n                make_edge(A[1].get_out(), input_port<P::A1>(two_adder));\n                make_edge(B[1].get_out(), input_port<P::B1>(two_adder)); \n                make_edge(output_port<P::S1>(two_adder), input_port<1>(Sum));\n\n                make_edge(CarryIN.get_out(), input_port<P::CI>(two_adder));\n                make_edge(output_port<P::CO>(two_adder), CarryOUT.get_in());\n\n                // Activate all switches at low state\n                for (int i=0; i<2; ++i) {\n                    A[i].activate();\n                    B[i].activate();\n                }\n                CarryIN.activate();\n\n                if (!silent) printf(\"1+0\\n\");\n                A[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n\n                if (!silent) printf(\"0+1\\n\");\n                A[0].flip();\n                B[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n            }\n#else\n            { // test four_bit_adder\n                four_bit_adder four_adder(g);\n                std::vector<toggle> A(4, toggle(g));\n                std::vector<toggle> B(4, toggle(g));\n                toggle CarryIN(g);\n                digit Sum(g, \"SUM\");\n                led CarryOUT(g, \"CarryOUT\");\n\n                    make_edge(A[0].get_out(), input_port<P::A0>(four_adder));\n                    make_edge(B[0].get_out(), input_port<P::B0>(four_adder));\n                    make_edge(output_port<P::S0>(four_adder), input_port<0>(Sum));\n\n                    make_edge(A[1].get_out(), input_port<P::A1>(four_adder));\n                    make_edge(B[1].get_out(), input_port<P::B1>(four_adder));\n                    make_edge(output_port<P::S1>(four_adder), input_port<1>(Sum));\n\n                    make_edge(A[2].get_out(), input_port<P::A2>(four_adder));\n                    make_edge(B[2].get_out(), input_port<P::B2>(four_adder));\n                    make_edge(output_port<P::S2>(four_adder), input_port<2>(Sum));\n\n                    make_edge(A[3].get_out(), input_port<P::A3>(four_adder));\n                    make_edge(B[3].get_out(), input_port<P::B3>(four_adder));\n                    make_edge(output_port<P::S3>(four_adder), input_port<3>(Sum));\n\n                    make_edge(CarryIN.get_out(), input_port<P::CI>(four_adder));\n                    make_edge(output_port<P::CO>(four_adder), CarryOUT.get_in());\n                \n                // Activate all switches at low state\n                for (int i=0; i<4; ++i) {\n                    A[i].activate();\n                    B[i].activate();\n                }\n                CarryIN.activate();\n                \n                if (!silent) printf(\"1+0\\n\");\n                A[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"0+1\\n\");\n                A[0].flip();\n                B[0].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"3+4\\n\");\n                A[0].flip();\n                A[1].flip();\n                B[0].flip();\n                B[2].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"6+1\\n\");\n                A[0].flip();\n                A[2].flip();\n                B[0].flip();\n                B[2].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"0+0+carry\\n\");\n                A[1].flip();\n                A[2].flip();\n                B[0].flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));\n                \n                if (!silent) printf(\"15+15+carry\\n\");\n                A[0].flip();\n                A[1].flip();\n                A[2].flip();\n                A[3].flip();\n                B[0].flip();\n                B[1].flip();\n                B[2].flip();\n                B[3].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0xf) && (CarryOUT.get_value() == high));\n                \n                if (!silent) printf(\"8+8\\n\");\n                A[0].flip();\n                A[1].flip();\n                A[2].flip();\n                B[0].flip();\n                B[1].flip();\n                B[2].flip();\n                CarryIN.flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == high));\n                \n                if (!silent) printf(\"0+0\\n\");\n                A[3].flip();\n                B[3].flip();\n                g.wait_for_all();\n                if (!silent) Sum.display();\n                if (!silent) CarryOUT.display();\n                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == low));\n            }\n#endif\n\n            { // test D_latch\n                D_latch my_d_latch(g);\n                toggle D(g);\n                pulse E(g, 500, 4); // clock changes every 500ms; stops after 4 changes\n                led Q(g, \" Q\", verbose); // if true, LEDs print at every state change\n                led notQ(g, \"~Q\", verbose);\n\n                make_edge(D.get_out(), input_port<0>(my_d_latch)); \n                make_edge(E.get_out(), input_port<1>(my_d_latch));\n                make_edge(output_port<0>(my_d_latch), Q.get_in());\n                make_edge(output_port<1>(my_d_latch), notQ.get_in());\n\n                D.activate();\n\n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == low) && (notQ.get_value() == high));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == low) && (notQ.get_value() == high));\n                E.reset();\n                \n                if (!silent) printf(\"Toggling D\\n\");\n                E.activate();\n                D.flip();\n                g.wait_for_all();\n                if (!silent && !verbose) { Q.display(); notQ.display(); }\n                assert((Q.get_value() == high) && (notQ.get_value() == low));\n            }\n        }\n        utility::report_elapsed_time((tbb::tick_count::now() - start).seconds());\n        return 0;\n    } catch(std::exception& e) {\n        cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n#else\n    utility::report_skipped();\n    return 0;\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/logic_sim/two_bit_adder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBBexample_graph_logicsim_tba_H\n#define __TBBexample_graph_logicsim_tba_H 1\n\n#include \"one_bit_adder.h\"\n\nclass two_bit_adder : public composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t >, \n                                            tuple< signal_t, signal_t, signal_t > > {\n    graph& my_graph;\n    std::vector<one_bit_adder> two_adders; \n    typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t >, \n                          tuple< signal_t, signal_t, signal_t > > base_type;\n public:\n    two_bit_adder(graph& g) : base_type(g), my_graph(g), two_adders(2, one_bit_adder(g)) {\n        make_connections();\n        set_up_composite();\n    }\n    two_bit_adder(const two_bit_adder& src) : \n        base_type(src.my_graph), my_graph(src.my_graph), two_adders(2, one_bit_adder(src.my_graph)) \n    {\n        make_connections();\n        set_up_composite();\n    }\n    ~two_bit_adder() {}\n\nprivate:\n    void make_connections() {\n        make_edge(output_port<1>(two_adders[0]), input_port<0>(two_adders[1]));\n    }\n    void set_up_composite() {\n\n        base_type::input_ports_type input_tuple(input_port<0>(two_adders[0]/*CI*/), input_port<1>(two_adders[0]), input_port<2>(two_adders[0]), input_port<1>(two_adders[1]), input_port<2>(two_adders[1]));\n\n       base_type::output_ports_type output_tuple(output_port<0>(two_adders[0]), output_port<0>(two_adders[1]),output_port<1>(two_adders[1]/*CO*/));\n       base_type::set_external_ports(input_tuple, output_tuple);\n    }\n};\n\n#endif /* __TBBexample_graph_logicsim_tba_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/matmult/Makefile",
    "content": "# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\n\nrun_cmd=\nPROG=matmult\nARGS=\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt -lpthread -lcilkrts\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall: release test\n\nrelease:\n\t$(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS)\n\ndebug:\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS)  $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/matmult/matmult.cpp",
    "content": "/*\n    Copyright (c) 2016-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// -------------------------------------------------------------------------------------------------\n// This is an example of a matrix multiplication Gen kernel usage with TBB Flow Graph.\n// It exemplifies support for compute offload to Intel(R) Graphics Technology in the flow graph API.\n// -------------------------------------------------------------------------------------------------\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE\n\n#if _MSC_VER\n#pragma warning(disable : 4503) // suppress warning C4503: decorated name length exceeded, name was truncated \n#endif\n\n// -------------------------------------------------------------------------------------------------\n\n#include <iostream>\n\n#include <cilk/cilk.h>\n#include <cilk/cilk_api.h>\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/gfx_factory.h\"\n\n// -------------------------------------------------------------------------------------------------\n\n#define SLM_TILE_X (4*8)\n#define SLM_TILE_Y (4*8)\n#define SLM_TILE_K (4*8)\n\n#define SIZE_X (2*SLM_TILE_X)\n#define SIZE_Y (2*SLM_TILE_Y)\n#define SIZE_K (2*SLM_TILE_X)\n\n#ifdef __GFX__\n#define BARRIER _gfx_gpgpu_thread_barrier()\n#else\n#define BARRIER\n#endif\n\n#define TILE_Y 8\n#define TILE_K 8\n#define TILE_X 8\n\n// The naive straightforward algorithm used to obtain reference results on CPU\nvoid matmult_naive(const float* A, const float* B, float* C) {\n    for (int y = 0; y < SIZE_Y; y++) {\n        for (int x = 0; x < SIZE_X; x++) {\n            C[y * SIZE_Y + x] = (float)0;\n\n            for (int k = 0; k < SIZE_K; k++) {\n                C[y * SIZE_Y + x] += A[y * SIZE_K + k] * B[k * SIZE_K + x];\n            }\n        }\n    }\n}\n\n// Shared Local Memory based algorithm\n__declspec(target(gfx_kernel))\nvoid matmult_tiled_slm(const float A[][SIZE_K], const float B[][SIZE_X], float C[][SIZE_X]) {\n    // The parallel loop nest below iterates over \"supertiles\" in the resulting\n    // matrix C and it is parallelized across thread groups, 1 iteration per\n    // group, which effectively means that the loop nest is peeled off.\n    // This kernel is programmed so that each thread group calculates one\n    // resulting supertile in matrix C.\n    _Cilk_for _Thread_group(int tg_y = 0; tg_y < SIZE_Y; tg_y += SLM_TILE_Y) {\n        _Cilk_for _Thread_group(int tg_x = 0; tg_x < SIZE_X; tg_x += SLM_TILE_X) {\n            // declare \"supertiles\" of each matrix to be allocated in SLM\n            __thread_group_local float slm_atile[SLM_TILE_Y][SLM_TILE_K];\n            __thread_group_local float slm_btile[SLM_TILE_K][SLM_TILE_X];\n            __thread_group_local float slm_ctile[SLM_TILE_Y][SLM_TILE_X];\n\n            // initialize the result supertile (in parallel)\n            //slm_ctile[:][:] = (float)0;\n            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                    slm_ctile[i0][i1] = (float)0;\n\n            // calculate the dot product of supertiles:\n            for (int super_k = 0; super_k < SIZE_K; super_k += SLM_TILE_K) {\n                // cache A's and B's \"supertiles\" in SLM (in parallel)\n                //slm_atile[:][:] = A[tg_y:SLM_TILE_Y][super_k:SLM_TILE_K];\n                _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_K; i1++)\n                        slm_atile[i0][i1] = A[tg_y + i0][super_k + i1];\n\n                //slm_btile[:][:] = B[super_k:SLM_TILE_K][tg_x:SLM_TILE_X];\n                _Cilk_for(int i0 = 0; i0 < SLM_TILE_K; i0++)\n                    _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                        slm_btile[i0][i1] = B[super_k + i0][tg_x + i1];\n\n                // need a barrier, since every tile in tiles are used by\n                // multiple threads in the group\n                BARRIER;\n\n                // now multiply the supertiles as usual matrices (in parallel)\n                // ...\n                // ... using the most effective tiled algorithm:\n                _Cilk_for(int t_y = 0; t_y < SLM_TILE_Y; t_y += TILE_Y) {\n                    _Cilk_for(int t_x = 0; t_x < SLM_TILE_X; t_x += TILE_X) {\n                        // allocate tiles in registers\n                        float atile[TILE_Y][TILE_K], btile[TILE_X];\n                        float ctile[TILE_Y][TILE_X];\n\n                        // ... and initialize ctile to zero\n                        ctile[:][:] = (float)0;\n\n                        // calculate the dot product of the tiles\n                        for (int k = 0; k < SLM_TILE_K; k += TILE_K) {\n                            atile[:][:] = slm_atile[t_y:TILE_Y][k:TILE_K];\n\n                            for (int k_ind = 0; k_ind < TILE_K; k_ind++) {\n                                btile[:] = slm_btile[k + k_ind][t_x:TILE_X];\n\n                                // multiply current btile row by atile's\n                                // current element and add up to corresponding\n                                // ctile row\n                                for (int y_ind = 0; y_ind < TILE_Y; y_ind++) {\n                                    ctile[y_ind][:] += atile[y_ind][k_ind] *\n                                        btile[:];\n                                }\n                            }\n                        }\n                        // flush the thread-local ctile (registers) into the\n                        // thread group-local supertile (SLM) adding up\n                        // elements\n                        slm_ctile[t_y:TILE_Y][t_x:TILE_X] += ctile[:][:];\n                    }\n                }\n\n                // barrier to make sure\n                // (1) next iteration of the loop does not overwrite a and b\n                //   SLM tiles used in the above calculation of slm_ctile\n                // (2) on the last iteration of the loop, all threads wait\n                //   for the SLM ctile calculation to be completed before\n                //   writing it back to memory below this loop\n                BARRIER;\n            }\n\n            // write (in parallel) the result supertile back to memory:\n            //C[tg_y:SLM_TILE_Y][tg_x:SLM_TILE_X] = slm_ctile[:][:];\n            _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++)\n                _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++)\n                    C[tg_y + i0][tg_x + i1] = slm_ctile[i0][i1];\n\n            // next iteration of the loop zeroes out slm_ctile - make sure this\n            // always happens after slm_ctile has been dumped to memory (above\n            // loop nest completes):\n            BARRIER;\n        }\n    }\n}\n\n// Matrix initialization function\nvoid init_matrix(int width, int height, float* matrix) {\n    for (int j = 0; j < height; j++) {\n        for (int i = 0; i < width; i++) {\n            matrix[j * height + i] = (float)(j * 4 + i);\n        }\n    }\n}\n\n// Validate matrix with reference values\nbool validate_mat(char *title, int size_y, int size_x, const float* mat, const float* ref_mat) {\n    int err_cnt = 0;\n    printf(\"verifying %s...\", title);\n    fflush(stdout);\n\n    for (int y = 0; y < size_y; y++) {\n        for (int x = 0; x < size_x; x++) {\n            float val = mat[y * size_y + x];\n            float gold_val = ref_mat[y * size_y + x];\n\n            if (val != gold_val) {\n                if (err_cnt == 0) {\n                    printf(\"\\n\");\n                }\n                if (++err_cnt < 10) {\n                    std::cout <<\n                        \"  ERROR at [\" << y << \"][\" << x << \"]: \" <<\n                        val << \"(should be \" << gold_val << \")\" << std::endl;\n                }\n            }\n        }\n    }\n    if (err_cnt == 0) {\n        printf(\" ok\\n\");\n    } else {\n        printf(\"FAILED\\n\");\n    }\n    return err_cnt == 0;\n}\n\n// ----------------------------------------------------------------------------\n// Helper types and functions\n// ----------------------------------------------------------------------------\n\nstruct matrix_size {\n    int columns;\n    int rows;\n};\n\ntypedef std::tuple< tbb::flow::gfx_buffer<float>,\n                    tbb::flow::gfx_buffer<float>,\n                    tbb::flow::gfx_buffer<float> > kernel_args_type;\ntypedef kernel_args_type cpu_args_type;\ntypedef kernel_args_type validation_args_type;\n\n// Constructs flow graph with three computation nodes that all make matrixes multiplication\n// - CPU node - obtains reference result on CPU\n// - CPU SLM node - Intel(R) Cilk(TM) based matrixes multiplication implementation on CPU\n// - GPU node - obtains result on GPU using GFX offload API\nvoid mat_multiplication() {\n\n    //------------------------------------------\n    // TBB Flow Graph nodes declaration section\n    //------------------------------------------\n\n    tbb::flow::graph g;\n    tbb::flow::gfx_factory factory(g);\n\n    // Enqueue task for running on Gen\n    tbb::flow::split_node< kernel_args_type > gpu_slm_split_n(g);\n    tbb::flow::streaming_node< kernel_args_type, tbb::flow::queueing, tbb::flow::gfx_factory > gpu_slm_mat_mult_n(g, matmult_tiled_slm, tbb::flow::gfx_factory::dummy_device_selector(), factory);\n\n    // Obtain SLM algorithm result on CPU\n    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_slm_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float >& A_MATRIX = std::get<0>(args);\n        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);\n        tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX   = std::get<2>(args);\n\n        matmult_tiled_slm((float(*)[SIZE_K])A_MATRIX.data(), (float(*)[SIZE_X])B_MATRIX.data(), (float(*)[SIZE_X])CPU_SLM_MATRIX.data());\n\n        return CPU_SLM_MATRIX;\n    });\n\n    // Obtain reference result on CPU\n    tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer<float> > cpu_naive_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer<float> {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float>& A_MATRIX  = std::get<0>(args);\n        const tbb::flow::gfx_buffer<float>& B_MATRIX  = std::get<1>(args);\n        tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX = std::get<2>(args);\n\n        matmult_naive(A_MATRIX.data(), B_MATRIX.data(), CPU_NAIVE_MATRIX.data());\n\n        return CPU_NAIVE_MATRIX;\n    });\n\n    // Validate computed matrixes\n    tbb::flow::join_node< validation_args_type > validation_join_n(g);\n    tbb::flow::function_node< validation_args_type > mat_validation_n(g, tbb::flow::unlimited, [](const validation_args_type& result) {\n        // Get references to matrixes\n        const tbb::flow::gfx_buffer<float>& GPU_SLM_MAT   = std::get<0>(result);\n        const tbb::flow::gfx_buffer<float>& CPU_SLM_MAT   = std::get<1>(result);\n        const tbb::flow::gfx_buffer<float>& CPU_NAIVE_MAT = std::get<2>(result);\n\n        // Verify results\n        // Check that slm algorithm produces correct results on CPU:\n        validate_mat(\"matrix multiply: 'SLM' CPU vs. CPU\", SIZE_Y, SIZE_X, CPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());\n        // Verify Gen results:\n        validate_mat(\"matrix multiply: SLM Gen vs. CPU\", SIZE_Y, SIZE_X, GPU_SLM_MAT.data(), CPU_NAIVE_MAT.data());\n    });\n\n    //-----------------------------------------\n    // Make edge section - connecting nodes\n    //-----------------------------------------\n\n    // Prepare main graph input ports for data\n    make_edge(tbb::flow::output_port<0>(gpu_slm_split_n), tbb::flow::input_port<0>(gpu_slm_mat_mult_n));\n    make_edge(tbb::flow::output_port<1>(gpu_slm_split_n), tbb::flow::input_port<1>(gpu_slm_mat_mult_n));\n    make_edge(tbb::flow::output_port<2>(gpu_slm_split_n), tbb::flow::input_port<2>(gpu_slm_mat_mult_n));\n\n    // Join results\n    make_edge(tbb::flow::output_port<2>(gpu_slm_mat_mult_n), tbb::flow::input_port<0>(validation_join_n));\n    make_edge(cpu_slm_mat_mult_n, tbb::flow::input_port<1>(validation_join_n));\n    make_edge(cpu_naive_mat_mult_n, tbb::flow::input_port<2>(validation_join_n));\n\n    //Verify correctness\n    make_edge(validation_join_n, mat_validation_n);\n\n    // Set args for GFX kernel.\n    // Default behaviour if not set.\n    gpu_slm_mat_mult_n.set_args(tbb::flow::port_ref<0, 2>);\n\n    //-----------------------------------------\n    // Input sizes and matrixes initialization\n    //-----------------------------------------\n\n    const matrix_size A_MATRIX_SIZE         = { SIZE_Y, SIZE_K };\n    const matrix_size B_MATRIX_SIZE         = { SIZE_K, SIZE_X };\n    const matrix_size GPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };\n    const matrix_size CPU_SLM_MATRIX_SIZE   = { SIZE_Y, SIZE_X };\n    const matrix_size CPU_NAIVE_MATRIX_SIZE = { SIZE_Y, SIZE_X };\n\n    tbb::flow::gfx_buffer<float> A_MATRIX(A_MATRIX_SIZE.columns * A_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> B_MATRIX(B_MATRIX_SIZE.columns * B_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> GPU_SLM_MATRIX(GPU_SLM_MATRIX_SIZE.columns * GPU_SLM_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> CPU_SLM_MATRIX(CPU_SLM_MATRIX_SIZE.columns * CPU_SLM_MATRIX_SIZE.rows);\n    tbb::flow::gfx_buffer<float> CPU_NAIVE_MATRIX(CPU_NAIVE_MATRIX_SIZE.columns * CPU_NAIVE_MATRIX_SIZE.rows);\n\n    // Intitialize input matrixes\n    init_matrix(A_MATRIX_SIZE.columns, A_MATRIX_SIZE.rows, A_MATRIX.data());\n    init_matrix(B_MATRIX_SIZE.columns, B_MATRIX_SIZE.rows, B_MATRIX.data());\n\n    // Make tuples with input data for graph\n    kernel_args_type GPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, GPU_SLM_MATRIX);\n    kernel_args_type CPU_SLM_INPUT   = std::make_tuple(A_MATRIX, B_MATRIX, CPU_SLM_MATRIX);\n    kernel_args_type CPU_NAIVE_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, CPU_NAIVE_MATRIX);\n\n    //-----------------------------------------\n    // Send input to the graph and run it\n    //-----------------------------------------\n\n    gpu_slm_split_n.try_put(GPU_SLM_INPUT);\n    cpu_slm_mat_mult_n.try_put(CPU_SLM_INPUT);\n    cpu_naive_mat_mult_n.try_put(CPU_NAIVE_INPUT);\n\n    // Run graph\n    g.wait_for_all();\n}\n\n//---------------------------------------------------------------------------------\n\nint main(int argc, char* argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n        );\n\n        // Compute matrices and verify result\n        mat_multiplication();\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred. Error text is : \\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/matmult/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. matmult sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>matmult sample</h1>\n\t</div>\n\n\t<p>\n\t\tThe Matmult is an example of a Gen kernel implementing matrix multiplication.\n\t<br>\n\t<br>\n\t\tIt exemplifies support for compute offload to Intel&reg; Graphics Technology in the flow graph API.\n\t<br><br>\n\t\tThis example uses C++11 features. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t\t<p> For detailed Intel&reg; Graphics Technology requirements, please refer to article <a href=\"https://software.intel.com/en-us/articles/getting-started-with-compute-offload-to-intelr-graphics-technology\">Getting Started With Compute Offload to Intel&reg;  Graphics Technology</a>\n            </p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"matmult.cpp\">matmult.cpp</a>\n\t\t\t\t<dd>Matrix multiplication Gen kernel implementation with the flow graph interface.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>matmult <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>matmult [<i>-v</i>]</tt>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\t\t\t\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n\t\t\t\tINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n\t\t\t\tWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\t\t\t\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\t\t\t\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/som/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=som\nEXE=$(NAME).exe\nARGS=\nLIGHT_ARGS=4\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nSRCFILES = som_graph.cpp som.cpp\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: $(SRCFILES)\nifeq ($(compiler),xl)\n\t# Avoiding \"1586-346 (U) An error occurred during code generation.  The code generation return code was 40.\" with -O3.\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nelse\n\t$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nendif\n\ndebug:  $(SRCFILES)\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(EXE) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/som/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Self-Organizing Map (SOM) sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Self-Organizing Map (SOM) sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Self-Organizing Map demonstrates tbb::flow and the use of cancellation in scheduling multiple iterations of\n\t\tmap updates.\n\t<br><br>\n\t\tFor tutorials on Self-organizing Maps, see <a href=\"http://www.ai-junkie.com/ann/som/som1.html\">here</a> and\n\t\t<a href=\"http://davis.wpi.edu/~matt/courses/soms/\">here</a>.\n\t<br><br>\n\t\tThe program trains the map with several examples, splitting the map into subsections and looking for best-match\n\t\tfor multiple examples.  When an example is used to update the map, the graphs examining the sections being\n\t\tupdated for the next example are cancelled and restarted after the update.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"som_graph.cpp\">som_graph.cpp</a>\n\t\t\t\t<dd>The main program.\n\t\t\t\t<dt><a href=\"som.cpp\">som.cpp</a>\n\t\t\t\t<dd>Utilities for handling the map.\n\t\t\t\t<dt><a href=\"som.h\">som.h</a>\n\t\t\t\t<dd>Definitions and utilities.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/som/som.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map in TBB flow::graph\n//\n// we will do a color map (the simple example.)\n//\n//  serial algorithm\n//\n//       initialize map with vectors (could be random, gradient, or something else)\n//       for some number of iterations\n//           update radius r, weight of change L \n//           for each example V\n//               find the best matching unit\n//               for each part of map within radius of BMU W\n//                   update vector:  W(t+1) = W(t) + w(dist)*L*(V - W(t))\n\n#include \"som.h\"\n#include \"tbb/task.h\"\n\nstd::ostream& operator<<( std::ostream &out, const SOM_element &s) {\n    out << \"(\";\n    for(int i=0;i<(int)s.w.size();++i) {\n        out << s.w[i];\n        if(i < (int)s.w.size()-1) {\n            out << \",\";\n        }\n    }\n    out << \")\";\n    return out;\n}\n\nvoid remark_SOM_element(const SOM_element &s) {\n    printf(\"(\");\n    for(int i=0;i<(int)s.w.size();++i) {\n        printf(\"%g\",s.w[i]);\n        if(i < (int)s.w.size()-1) {\n            printf(\",\");\n        }\n    }\n    printf(\")\");\n}\n\nstd::ostream& operator<<( std::ostream &out, const search_result_type &s) {\n    out << \"<\";\n    out << get<RADIUS>(s);\n    out <<  \", \" << get<XV>(s);\n    out << \", \";\n    out << get<YV>(s);\n    out << \">\";\n    return out;\n}\n\nvoid remark_search_result_type(const search_result_type &s) {\n    printf(\"<%g,%d,%d>\", get<RADIUS>(s), get<XV>(s), get<YV>(s));\n}\n\ndouble\nrandval( double lowlimit, double highlimit) {\n    return double(rand()) / double(RAND_MAX) * (highlimit - lowlimit) + lowlimit;\n}\n\nvoid\nfind_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range ) {\n    if(teaching.size() == 0) return;\n    max_range = min_range = teaching[0];\n    for(int i = 1; i < (int)teaching.size(); ++i) {\n        max_range.elementwise_max(teaching[i]);\n        min_range.elementwise_min(teaching[i]);\n    }\n} \n\nvoid add_fraction_of_difference( SOM_element &to, SOM_element const &from, double frac) {\n    for(int i = 0; i < (int)from.size(); ++i) {\n        to[i] += frac*(from[i] - to[i]);\n    }\n}\n\ndouble\ndistance_squared(SOM_element x, SOM_element y) {\n    double rval = 0.0; for(int i=0;i<(int)x.size();++i) {\n        double diff = x[i] - y[i];\n        rval += diff*diff;\n    }\n    return rval;\n}\n\nvoid SOMap::initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range) {\n    for(int x = 0; x < xMax; ++x) {\n        for(int y = 0; y < yMax; ++y) {\n            for( int i = 0; i < (int)max_range.size(); ++i) {\n                if(it == InitializeRandom) {\n                    my_map[x][y][i] = (randval(min_range[i], max_range[i]));\n                }\n                else if(it == InitializeGradient) {\n                    my_map[x][y][i] = ((double)(x+y)/(xMax+yMax)*(max_range[i]-min_range[i]) + min_range[i]);\n                }\n            }\n        }\n    }\n}\n\n// subsquare [low,high)\ndouble\nSOMap::BMU_range( const SOM_element &s, int &xval, int &yval, subsquare_type &r) {\n    double min_distance_squared = DBL_MAX;\n    task &my_task = task::self();\n    int min_x = -1;\n    int min_y = -1;\n    for(int x = r.rows().begin(); x != r.rows().end(); ++x) {\n        for( int y = r.cols().begin(); y != r.cols().end(); ++y) {\n            double dist = distance_squared(s,my_map[x][y]);\n            if(dist < min_distance_squared) {\n                min_distance_squared = dist;\n                min_x = x;\n                min_y = y;\n            }\n            if(cancel_test && my_task.is_cancelled()) {\n                xval = r.rows().begin();\n                yval = r.cols().begin();\n                return DBL_MAX;\n            }\n        }\n    }\n    xval = min_x;\n    yval = min_y;\n    return sqrt(min_distance_squared);\n}\n\nvoid\nSOMap::epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range<int> &r) {\n    int min_xiter = (int)((double)min_x - radius);\n    if(min_xiter < 0) min_xiter = 0;\n    int max_xiter = (int)((double)min_x + radius);\n    if(max_xiter > (int)my_map.size()-1) max_xiter = (int)my_map.size()-1;\n    for(int xx = r.begin(); xx <= r.end(); ++xx) {\n        double xrsq = (xx-min_x)*(xx-min_x);\n        double ysq = radius*radius - xrsq;  // max extent of y influence\n        double yd;\n        if(ysq > 0) {\n            yd = sqrt(ysq);\n            int lb = (int)(min_y - yd);\n            int ub = (int)(min_y + yd);\n            for(int yy = lb; yy < ub; ++yy) {\n                if(yy >= 0 && yy < (int)my_map[xx].size()) {\n                    // [xx, yy] is in the range of the update.\n                    double my_rsq = xrsq + (yy-min_y)*(yy-min_y);  // distance from BMU squared\n                    double theta = exp(-(radius*radius) /(2.0* my_rsq)); \n                    add_fraction_of_difference(my_map[xx][yy], s, theta * learning_rate);\n                }\n            }\n        }\n    }\n}\n\nvoid SOMap::teach(teaching_vector_type &in) {\n    for(int i = 0; i < nPasses; ++i ) {\n        int j = (int)(randval(0, (double)in.size()));  // this won't be reproducible.\n        if(j == in.size()) --j;\n        \n        int min_x = -1;\n        int min_y = -1;\n        subsquare_type br2(0, (int)my_map.size(), 1, 0, (int)my_map[0].size(), 1);\n        (void) BMU_range(in[j],min_x, min_y, br2);  // just need min_x, min_y\n        // radius of interest\n        double radius = max_radius * exp(-(double)i*radius_decay_rate);\n        // update circle is min_xiter to max_xiter inclusive.\n        double learning_rate = max_learning_rate * exp( -(double)i * learning_decay_rate);\n        epoch_update(in[j], i, min_x, min_y, radius, learning_rate);\n    }\n}\n\nvoid SOMap::debug_output() {\n    printf(\"SOMap:\\n\");\n    for(int i = 0; i < (int)(this->my_map.size()); ++i) {\n        for(int j = 0; j < (int)(this->my_map[i].size()); ++j) {\n            printf( \"map[%d, %d] == \", i, j );\n            remark_SOM_element( this->my_map[i][j] );\n            printf(\"\\n\");\n        }\n    }\n}\n\n#define RED 0\n#define GREEN 1\n#define BLUE 2\n\nvoid readInputData() {\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching.push_back(SOM_element());\n    my_teaching[0][RED] = 1.0; my_teaching[0][GREEN] = 0.0; my_teaching[0][BLUE] = 0.0;\n    my_teaching[1][RED] = 0.0; my_teaching[1][GREEN] = 1.0; my_teaching[1][BLUE] = 0.0;\n    my_teaching[2][RED] = 0.0; my_teaching[2][GREEN] = 0.0; my_teaching[2][BLUE] = 1.0;\n    my_teaching[3][RED] = 0.3; my_teaching[3][GREEN] = 0.3; my_teaching[3][BLUE] = 0.0;\n    my_teaching[4][RED] = 0.5; my_teaching[4][GREEN] = 0.5; my_teaching[4][BLUE] = 0.9;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/som/som.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map\n//\n// support for self-ordering maps\n#ifndef __SOM_H__\n#define __SOM_H__\n\n#include <vector>\n#include <cstdlib>\n#include <cmath>\n#include <cfloat>\n#include <iostream>\n#include <cstdio>\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/blocked_range2d.h\"\n\nusing namespace tbb;\nusing namespace tbb::flow;\n\ntypedef blocked_range2d<int> subsquare_type;\ntypedef tuple<double,int,int> search_result_type;\n\nstd::ostream& operator<<( std::ostream &out, const search_result_type &s);\n\n#define RADIUS 0  // for the std::gets\n#define XV     1\n#define YV     2\n\n// to have single definitions of static variables, define _MAIN_C_ in the main program\n// \n#ifdef _MAIN_C_\n#define DEFINE // nothing\n#define INIT(n) = n\n#else // not in main file\n#define DEFINE extern\n#define INIT(n) // nothing\n#endif  // _MAIN_C_\n\nDEFINE int nElements INIT(3);  // length of input vectors, matching vector in map\nDEFINE double max_learning_rate INIT(0.8);  // decays exponentially\nDEFINE double radius_decay_rate;\nDEFINE double learning_decay_rate INIT(0.005);\nDEFINE double max_radius;\nDEFINE bool extra_debug INIT(false);\nDEFINE bool cancel_test INIT(false);\n\nDEFINE int xMax INIT(100);\nDEFINE int yMax INIT(100);\nDEFINE int nPasses INIT(100);\n\nenum InitializeType { InitializeRandom, InitializeGradient };\n#define RED 0\n#define GREEN 1\n#define BLUE 2\nclass SOM_element;\nvoid remark_SOM_element(const SOM_element &s);\n\n// all SOM_element vectors are the same length (nElements), so we do not have\n// to range-check the vector accesses.\nclass SOM_element {\n    std::vector<double> w;\npublic:\n    friend std::ostream& operator<<( std::ostream &out, const SOM_element &s);\n    friend void remark_SOM_element(const SOM_element &s);\n    SOM_element() : w(nElements,0.0) {}\n    double &operator[](int indx) { return w.at(indx); }\n    const double &operator[](int indx) const { return w.at(indx); }\n    bool operator==(SOM_element const &other) const {\n        for(size_t i=0;i<size();++i) {\n            if(w[i] != other.w[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    bool operator!=(SOM_element const &other) const { return !operator==(other); }\n    void elementwise_max(SOM_element const &other) {\n        for(size_t i = 0; i < w.size(); ++i) if(w[i] < other.w[i]) w[i] = other.w[i];\n    }\n    void elementwise_min(SOM_element const &other) {\n        for(size_t i = 0; i < w.size(); ++i) if(w[i] > other.w[i]) w[i] = other.w[i];\n    }\n    size_t size() const { return w.size(); }\n};\n\ntypedef std::vector<SOM_element> teaching_vector_type;\n\nDEFINE SOM_element max_range;\nDEFINE SOM_element min_range;\n\nextern double randval( double lowlimit, double highlimit);\n\nextern void find_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range );\n\nextern void add_fraction_of_difference( SOM_element &to, SOM_element &from, double frac);\n\nDEFINE teaching_vector_type my_teaching;\n\nclass SOMap {\n    std::vector< std::vector< SOM_element > > my_map;\npublic:\n    SOMap(int xSize, int ySize) {\n        my_map.reserve(xSize);\n        for(int i = 0; i < xSize; ++i) {\n            my_map.push_back(teaching_vector_type());\n            my_map[i].reserve(ySize);\n            for(int j = 0; j < ySize;++j) {\n                my_map[i].push_back(SOM_element());\n            }\n        }\n    }\n    size_t size() { return my_map.size(); }\n    void initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range);\n    teaching_vector_type &operator[](int indx) { return my_map[indx]; }\n    SOM_element &at(int xVal, int yVal) { return my_map[xVal][yVal]; }\n    SOM_element &at(search_result_type const &s) { return my_map[flow::get<1>(s)][flow::get<2>(s)]; }\n    void epoch_update( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate) {\n        int min_xiter = (int)((double)min_x - radius);\n        if(min_xiter < 0) min_xiter = 0;\n        int max_xiter = (int)((double)min_x + radius);\n        if(max_xiter > (int)my_map.size()-1) max_xiter = (int)(my_map.size()-1);\n        blocked_range<int> br1(min_xiter, max_xiter, 1);\n        epoch_update_range(s, epoch, min_x, min_y, radius, learning_rate, br1);\n    }\n    void epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range<int> &r);\n    void teach( teaching_vector_type &id);\n    void debug_output();\n    // find BMU given an input, returns distance\n    double BMU_range(const SOM_element &s, int &xval, int &yval, subsquare_type &r);\n    double BMU(const SOM_element &s, int &xval, int &yval) {\n        subsquare_type br(0,(int)my_map.size(),1,0,(int)my_map[0].size(),1);\n        return BMU_range(s, xval, yval, br);\n    }\n};\n\nextern double distance_squared(SOM_element x, SOM_element y);\nvoid remark_SOM_element(const SOM_element &s);\n\nextern void readInputData();\n#endif // __SOM_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/som/som_graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Self-organizing map in TBB flow::graph\n//\n//   This is an example of the use of cancellation in a graph.  After a point in searching for\n//   the best match for an example, two examples are looked for simultaneously.  When the\n//   earlier example is found and the update radius is determined, the affected searches\n//   for the subsequent example are cancelled, and after the update they are restarted.\n//   As the update radius shrinks fewer searches are cancelled, and by the last iterations\n//   virtually all the work done for the speculating example is useful.\n//\n// first, a simple implementation with only one example vector\n// at a time.\n//\n// we will do a color map (the simple example.)\n//\n//  graph algorithm\n//\n//       for some number of iterations\n//           update radius r, weight of change L \n//           for each example V\n//               use graph to find BMU\n//               for each part of map within radius of BMU W\n//                   update vector:  W(t+1) = W(t) + w(dist)*L*(V - W(t))\n\n#define _MAIN_C_ 1\n#include \"som.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/flow_graph.h\"\n#include \"tbb/blocked_range2d.h\"\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n\n#define RED 0\n#define GREEN 1\n#define BLUE 2\n\nstatic int xranges = 1;\nstatic int yranges = 1;\nstatic int xsize = -1;\nstatic int ysize = -1;\n\nstatic int global_i = 0;\nstatic int speculation_start; \nstd::vector<int> function_node_execs;\nstatic int xRangeMax = 3;\nstatic int yRangeMax = 3;\nstatic bool dont_speculate = false;\nstatic search_result_type last_update;\n\nclass BMU_search_body {\n    SOMap &my_map;\n    subsquare_type my_square;\n    int &fn_tally;\npublic:\n    BMU_search_body(SOMap &_m, subsquare_type &_sq, int &fnt) : my_map(_m), my_square(_sq), fn_tally(fnt) { }\n    BMU_search_body( const BMU_search_body &other) : my_map(other.my_map), my_square(other.my_square), fn_tally(other.fn_tally) { }\n    search_result_type operator()(const SOM_element s) {\n        int my_x;\n        int my_y;\n        double min_dist = my_map.BMU_range(s, my_x, my_y, my_square);\n        ++fn_tally;  // count how many times this function_node executed\n        return search_result_type(min_dist, my_x, my_y);\n    }\n};\n\ntypedef function_node<SOM_element, search_result_type> search_node;\ntypedef broadcast_node<SOM_element> b_node;\ntypedef std::vector< search_node *> search_node_vector_type;\ntypedef std::vector< search_node_vector_type > search_node_array_type;\ntypedef std::vector< graph *> graph_vector_type;\ntypedef std::vector< graph_vector_type > graph_array_type;\n\n#define SPECULATION_CNT 2\n\ngraph *g[SPECULATION_CNT];  // main graph; there should only be one per epoch\nb_node *send_to[SPECULATION_CNT];      // broadcast node to send exemplar to all function_nodes\nqueue_node<search_result_type> *q[SPECULATION_CNT];  // queue for function nodes to put their results in\n// each function_node should have its own graph\nsearch_node_array_type* s_array[SPECULATION_CNT];  // 2d array of function nodes\ngraph_array_type* g_array[SPECULATION_CNT];        // 2d array of graphs\n\n// build a set of SPECULATION_CNT graphs, each of which consists of a broadcast_node,\n//    xranges x yranges function_nodes, and one queue_node for output.\n//    once speculation starts, if i % SPECULATION_CNT is the current graph, (i+1) % SPECULATION_CNT\n//    is the first speculation, and so on.\nvoid\nbuild_BMU_graph(SOMap &map1) {\n    // build current graph\n    xsize = ((int)map1.size() + xranges - 1) / xranges;\n    ysize = ((int)map1[0].size() + yranges - 1) / yranges;\n    function_node_execs.clear();\n    function_node_execs.reserve(xranges*yranges+1);\n    for(int ii = 0; ii < xranges*yranges+1;++ii) function_node_execs.push_back(0);\n\n    for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) {\n        g[scnt] = new graph;\n        send_to[scnt] = new b_node(*(g[scnt]));  // broadcast node to the function_nodes\n        q[scnt] = new queue_node<search_result_type>(*(g[scnt]));  // output queue\n\n        // create the function_nodes, tie to the graph\n        s_array[scnt] = new search_node_array_type;\n        s_array[scnt]->reserve(xranges);\n        g_array[scnt] = new graph_array_type;\n        g_array[scnt]->reserve(xranges);\n        for(int i = 0; i < (int)map1.size(); i += xsize) {\n            int xindex = i / xsize;\n            s_array[scnt]->push_back(search_node_vector_type());\n            (*s_array[scnt])[xindex].reserve(yranges);\n            g_array[scnt]->push_back(graph_vector_type());\n            (*g_array[scnt])[xindex].reserve(yranges);\n            for( int j = 0; j < (int)map1[0].size(); j += ysize) {\n                int offset = (i/xsize)*yranges + (j / ysize);\n                int xmax = (i + xsize) > (int)map1.size() ? (int)map1.size() : i + xsize;\n                int ymax = (j + ysize) > (int)map1[0].size() ? (int)map1[0].size() : j + ysize;\n                subsquare_type sst(i,xmax,1,j,ymax,1);\n                BMU_search_body bb(map1,sst,function_node_execs[offset]);\n                graph *g_local = new graph;\n                search_node *s = new search_node(*g_local, serial, bb); // copies Body\n                (*g_array[scnt])[xindex].push_back(g_local);\n                (*s_array[scnt])[xindex].push_back(s);\n                make_edge(*(send_to[scnt]), *s);  // broadcast_node -> function_node\n                make_edge(*s, *(q[scnt]));   // function_node -> queue_node\n            }\n        }\n    }\n}\n\n// Wait for the 2D array of flow::graphs.\nvoid wait_for_all_graphs(int cIndex) {  // cIndex ranges over [0 .. SPECULATION_CNT - 1]\n    for(int x = 0; x < xranges; ++x) {\n        for(int y = 0; y < yranges; ++y) {\n            (*g_array[cIndex])[x][y]->wait_for_all();\n        }\n    }\n}\n\nvoid\ndestroy_BMU_graph() {\n    for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) {\n        for( int i = 0; i < (int)(*s_array[scnt]).size(); ++i ) {\n            for(int j = 0; j < (int)(*s_array[scnt])[i].size(); ++j) {\n                delete (*s_array[scnt])[i][j];\n                delete (*g_array[scnt])[i][j];\n            }\n        }\n        (*s_array[scnt]).clear();\n        delete s_array[scnt];\n        (*g_array[scnt]).clear();\n        delete g_array[scnt];\n        delete q[scnt];\n        delete send_to[scnt];\n        delete g[scnt];\n    }\n}\n\nvoid find_subrange_overlap(int const &xval, int const &yval, double const &radius, int &xlow, int &xhigh, int &ylow, int &yhigh) {\n    xlow = int((xval-radius)/xsize);\n    xhigh = int((xval+radius)/xsize);\n    ylow = int((yval-radius)/ysize);\n    yhigh = int((yval+radius)/ysize);\n    // circle may fall partly outside map\n    if(xlow < 0) xlow = 0;\n    if(xhigh >= xranges) xhigh = xranges - 1;\n    if(ylow < 0) ylow = 0;\n    if(yhigh >= yranges) yhigh = yranges - 1;\n}\n\nbool overlap( int &xval, int &yval, search_result_type &sr) {\n    int xlow, xhigh, ylow, yhigh;\n    find_subrange_overlap(get<XV>(sr), get<YV>(sr), get<RADIUS>(sr), xlow, xhigh, ylow, yhigh);\n    return xval >= xlow && xval <= xhigh && yval >= ylow && yval <= yhigh;\n}\n\nvoid\ncancel_submaps(int &xval, int &yval, double &radius, int indx) {\n    int xlow;\n    int xhigh;\n    int ylow;\n    int yhigh;\n    find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh);\n    for(int x = xlow; x <= xhigh; ++x) {\n        for(int y = ylow; y <= yhigh; ++y) {\n            (*g_array[indx])[x][y]->root_task()->cancel_group_execution();\n        }\n    }\n}\n\nvoid\nrestart_submaps(int &xval, int &yval, double &radius, int indx, SOM_element &vector) {\n    int xlow;\n    int xhigh;\n    int ylow;\n    int yhigh;\n    find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh);\n    for(int x = xlow; x <= xhigh; ++x) {\n        for(int y = ylow; y <= yhigh; ++y) {\n            // have to reset the graph\n            (*g_array[indx])[x][y]->root_task()->context()->reset();\n            // and re-submit the exemplar for search.\n            (*s_array[indx])[x][y]->try_put(vector);\n        }\n    }\n}\n\nsearch_result_type\ngraph_BMU( int indx ) {  // indx ranges over [0 .. SPECULATION_CNT -1]\n    wait_for_all_graphs(indx);  // wait for the array of subgraphs\n    (g[indx])->wait_for_all();\n    std::vector<search_result_type> all_srs(xRangeMax*yRangeMax,search_result_type(DBL_MAX,-1,-1));\n    search_result_type sr;\n    search_result_type min_sr;\n    get<RADIUS>(min_sr) = DBL_MAX;\n    int result_count = 0;\n    while((q[indx])->try_get(sr)) {\n        ++result_count;\n        // figure which submap this came from\n        int x = get<XV>(sr) / xsize;\n        int y = get<YV>(sr) / ysize;\n        int offset = x*yranges+y;  // linearized subscript\n        all_srs[offset] = sr;\n        if(get<RADIUS>(sr) < get<RADIUS>(min_sr))\n            min_sr = sr;\n        else if(get<RADIUS>(sr) == get<RADIUS>(min_sr)) {\n            if(get<XV>(sr) < get<XV>(min_sr)) {\n                min_sr = sr;\n            }\n            else if((get<XV>(sr) == get<XV>(min_sr) &&\n                  get<YV>(sr) < get<YV>(min_sr)))\n            {\n                min_sr = sr;\n            }\n        }\n    }\n    return min_sr;\n    // end of one epoch\n}\n\nvoid graph_teach(SOMap &map1, teaching_vector_type &in) {\n    build_BMU_graph(map1);\n    // normally the training would pick random exemplars to teach the SOM.  We need\n    // the process to be reproducible, so we will pick the exemplars in order, [0, in.size())\n    int next_j = 0;\n    for(int epoch = 0; epoch < nPasses; ++epoch) {\n        global_i = epoch;\n        bool canceled_submaps = false;\n        int j = next_j;  // try to make reproducible\n        next_j = (epoch+1) % in.size();\n        search_result_type min_sr;\n        if(epoch < speculation_start) {\n            (send_to[epoch%SPECULATION_CNT])->try_put(in[j]);\n        }\n        else if(epoch == speculation_start) {\n            (send_to[epoch%SPECULATION_CNT])->try_put(in[j]);\n            if(epoch < nPasses-1) {\n                (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]);\n            }\n        }\n        else if(epoch < nPasses - 1) {\n            (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]);\n        }\n        min_sr = graph_BMU(epoch % SPECULATION_CNT);  //calls wait_for_all()\n        double min_distance = get<0>(min_sr);\n        double radius = max_radius * exp(-(double)epoch*radius_decay_rate);\n        double learning_rate = max_learning_rate * exp(-(double)epoch * learning_decay_rate);\n        if(epoch >= speculation_start && epoch < (nPasses - 1)) {\n            // have to cancel the affected submaps\n            cancel_submaps(get<XV>(min_sr), get<YV>(min_sr), radius, (epoch+1)%SPECULATION_CNT);\n            canceled_submaps = true;\n        }\n        map1.epoch_update(in[j], epoch, get<1>(min_sr), get<2>(min_sr), radius, learning_rate);\n        ++global_i;\n        if(canceled_submaps) {\n            // do I have to wait for all the non-canceled speculative graph to complete first?\n            // yes, in case a canceled task was already executing.\n            wait_for_all_graphs((epoch+1) % SPECULATION_CNT);  // wait for the array of subgraphs\n            restart_submaps(get<1>(min_sr), get<2>(min_sr), radius, (epoch+1)%SPECULATION_CNT, in[next_j]);\n        }\n\n        last_update = min_sr;\n        get<RADIUS>(last_update) = radius;  // not smallest value, but range of effect\n    }\n    destroy_BMU_graph();\n}\n\nstatic const double serial_time_adjust = 1.25;\nstatic double radius_fraction = 3.0;\n\nint\nmain(int argc, char** argv) {\n    int l_speculation_start;\n    utility::thread_number_range threads( \n            task_scheduler_init::default_num_threads,\n            task_scheduler_init::default_num_threads()  // run only the default number of threads if none specified\n    );\n\n    utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",\"number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.\")\n            // .positional_arg(InputFileName,\"input-file\",\"input file name\")\n            // .positional_arg(OutputFileName,\"output-file\",\"output file name\")\n            .positional_arg(radius_fraction, \"radius-fraction\",\"size of radius at which to start speculating\")\n            .positional_arg(nPasses, \"number-of-epochs\",\"number of examples used in learning phase\")\n            .arg(cancel_test, \"cancel-test\", \"test for cancel signal while finding BMU\")\n            .arg(extra_debug, \"debug\", \"additional output\")\n            .arg(dont_speculate,\"nospeculate\",\"don't speculate in SOM map teaching\")\n         );\n\n    readInputData();\n    max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2;\n    // need this value for the 1x1 timing below\n    radius_decay_rate = -(log(1.0/(double)max_radius) / (double)nPasses);\n    find_data_ranges(my_teaching, max_range, min_range );\n    if(extra_debug) {\n        printf( \"Data range: \");\n        remark_SOM_element(min_range);\n        printf( \" to \");\n        remark_SOM_element(max_range);\n        printf( \"\\n\");\n    }\n\n    // find how much time is taken for the single function_node case.\n    // adjust nPasses so the 1x1 time is somewhere around serial_time_adjust seconds.\n   // make sure the example test runs for at least 0.5 second.\n    for(;;) {\n        task_scheduler_init init(1);\n        SOMap map1(xMax,yMax);\n        speculation_start = nPasses + 1;  // Don't speculate\n\n        xranges = 1;\n        yranges = 1;\n        map1.initialize(InitializeGradient, max_range, min_range);\n        tick_count t0 = tick_count::now();\n        graph_teach(map1, my_teaching);\n        tick_count t1 = tick_count::now();\n        double nSeconds = (t1-t0).seconds();\n        if(nSeconds < 0.5) {\n            xMax *= 2;\n            yMax *= 2;\n            continue;\n        }\n        double size_adjust = sqrt(serial_time_adjust / nSeconds);\n        xMax = (int)((double)xMax * size_adjust);\n        yMax = (int)((double)yMax * size_adjust);\n        max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2;\n        radius_decay_rate = log((double)max_radius) / (double)nPasses;\n\n        if(extra_debug) {\n            printf(\"original 1x1 case ran in %g seconds\\n\", nSeconds);\n            printf(\"   Size of table == %d x %d\\n\", xMax, yMax);\n            printf(\"   radius_decay_rate == %g\\n\", radius_decay_rate);\n        }\n        break;\n    }\n\n    // the \"max_radius\" starts at 1/2*radius_fraction the table size.  To start the speculation when the radius is\n    // 1 / n * the table size, the constant in the log below should be n / 2.  so 2 == 1/4, 3 == 1/6th,\n    // et c.\n    if(dont_speculate) {\n        l_speculation_start = nPasses + 1;\n        if ( extra_debug )printf(\"speculation will not be done\\n\");\n    }\n    else {\n        if(radius_fraction < 1.0 ) {\n            if ( extra_debug )printf(\"Warning: radius_fraction should be >= 1.  Setting to 1.\\n\");\n            radius_fraction = 1.0;\n        }\n        l_speculation_start = (int)((double)nPasses * log(radius_fraction) / log((double)nPasses)); \n        if ( extra_debug )printf( \"We will start speculation at iteration %d\\n\", l_speculation_start );\n    }\n    double single_time;  // for speedup calculations\n    for(int p = threads.first; p <= threads.last; ++p) {\n        task_scheduler_init init(p);\n        if ( extra_debug )printf( \" -------------- Running with %d threads. ------------\\n\", p);\n       // run the SOM build for a series of subranges\n        for(xranges = 1; xranges <= xRangeMax; ++xranges) {\n            for(yranges = xranges; yranges <= yRangeMax; ++yranges) {\n                if(xranges == 1 && yranges == 1) {\n                    // don't pointlessly speculate if we're only running one subrange.\n                    speculation_start = nPasses + 1;\n                }\n                else {\n                    speculation_start = l_speculation_start;\n                }\n                SOMap map1(xMax, yMax);\n                map1.initialize(InitializeGradient, max_range, min_range);\n    \n                if(extra_debug) printf( \"Start learning for [%d,%d] ----------- \\n\", xranges,yranges);\n                tick_count t0 = tick_count::now();\n                graph_teach(map1, my_teaching);\n                tick_count t1 = tick_count::now();\n                \n                if ( extra_debug )printf( \"Done learning for [%d,%d], which took %g seconds \", xranges,yranges, (t1-t0).seconds());\n                if(xranges == 1 && yranges == 1) single_time = (t1-t0).seconds();\n                if ( extra_debug )printf( \": speedup == %g\\n\", single_time / (t1-t0).seconds());\n    \n            }  // yranges\n        }  // xranges\n    }  // #threads p\n    printf(\"done\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=stereo\nARGS=\nPERF_RUN_ARGS=\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\n# TBB libs\nTBBLIB=-ltbb\nTBBLIB_DEBUG=-ltbb_debug\n\n# OpenCL lib\nOPENCL_LIB=-lOpenCL\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt\nendif\nelse\nifeq ($(shell uname),Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\noverride OPENCL_LIB=-framework OpenCL\nendif\nendif\n\nall: release test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/imageEffects.cl",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n__constant int redChannelOffset = 0;\n__constant int greenChannelOffset = 1;\n__constant int blueChannelOffset = 2;\n__constant int channelsPerPixel = 4;\n__constant int channelIncreaseValue = 10;\n\n__kernel void mergeImages( __global uchar* bufferLeft, __global uchar* bufferRight, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth;\n    const int pixelGreenChannelIndex = pixelIndex + greenChannelOffset;\n    const int pixelBlueChannelIndex = pixelIndex + blueChannelOffset;\n\n    bufferLeft[pixelGreenChannelIndex] = (bufferRight[pixelGreenChannelIndex] + bufferLeft[pixelGreenChannelIndex]) / 2;\n    bufferLeft[pixelBlueChannelIndex] = bufferRight[pixelBlueChannelIndex];\n}\n\n__kernel void applyLeftImageEffect( __global uchar* bufferLeft, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelRedChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + redChannelOffset;\n\n    bufferLeft[pixelRedChannelIndex] += channelIncreaseValue;\n}\n\n__kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) {\n    const int indexWidth = get_global_id(0);\n    const int indexHeight = get_global_id(1);\n\n    const int pixelBlueChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + blueChannelOffset;\n\n    bufferRight[pixelBlueChannelIndex] += channelIncreaseValue;\n\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/lodepng.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nLodePNG version 20160409\n\nCopyright (c) 2005-2016 Lode Vandevenne\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n/*\nThe manual and changelog are in the header file \"lodepng.h\"\nRename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.\n*/\n\n#include \"lodepng.h\"\n\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n/*Visual Studio: A few warning types are not desired here.*/\n#if defined(_MSC_VER) && (_MSC_VER >= 1310)\n#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/\n#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/\n#endif /*_MSC_VER */\n\nconst char* LODEPNG_VERSION_STRING = \"20160409\";\n\n/*\nThis source file is built up in the following large parts. The code sections\nwith the \"LODEPNG_COMPILE_\" #defines divide this up further in an intermixed way.\n-Tools for C and common code for PNG and Zlib\n-C Code for Zlib (huffman, deflate, ...)\n-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)\n-The C++ wrapper around all of the above\n*/\n\n/*The malloc, realloc and free functions defined here with \"lodepng_\" in front\nof the name, so that you can easily change them to others related to your\nplatform if needed. Everything else in the code calls these. Pass\n-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out\n#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and\ndefine them in your own project's source files without needing to change\nlodepng source code. Don't forget to remove \"static\" if you copypaste them\nfrom here.*/\n\n#ifdef LODEPNG_COMPILE_ALLOCATORS\nstatic void* lodepng_malloc(size_t size)\n{\n  return malloc(size);\n}\n\nstatic void* lodepng_realloc(void* ptr, size_t new_size)\n{\n  return realloc(ptr, new_size);\n}\n\nstatic void lodepng_free(void* ptr)\n{\n  free(ptr);\n}\n#else /*LODEPNG_COMPILE_ALLOCATORS*/\nvoid* lodepng_malloc(size_t size);\nvoid* lodepng_realloc(void* ptr, size_t new_size);\nvoid lodepng_free(void* ptr);\n#endif /*LODEPNG_COMPILE_ALLOCATORS*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // Tools for C, and common code for PNG and Zlib.                       // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*\nOften in case of an error a value is assigned to a variable and then it breaks\nout of a loop (to go to the cleanup phase of a function). This macro does that.\nIt makes the error handling code shorter and more readable.\n\nExample: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);\n*/\n#define CERROR_BREAK(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  break;\\\n}\n\n/*version of CERROR_BREAK that assumes the common case where the error variable is named \"error\"*/\n#define ERROR_BREAK(code) CERROR_BREAK(error, code)\n\n/*Set error var to the error code, and return it.*/\n#define CERROR_RETURN_ERROR(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  return code;\\\n}\n\n/*Try the code, if it returns error, also return the error.*/\n#define CERROR_TRY_RETURN(call)\\\n{\\\n  unsigned error = call;\\\n  if(error) return error;\\\n}\n\n/*Set error var to the error code, and return from the void function.*/\n#define CERROR_RETURN(errorvar, code)\\\n{\\\n  errorvar = code;\\\n  return;\\\n}\n\n/*\nAbout uivector, ucvector and string:\n-All of them wrap dynamic arrays or text strings in a similar way.\n-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.\n-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.\n-They're not used in the interface, only internally in this file as static functions.\n-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.\n*/\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*dynamic vector of unsigned ints*/\ntypedef struct uivector\n{\n  unsigned* data;\n  size_t size; /*size in number of unsigned longs*/\n  size_t allocsize; /*allocated size in bytes*/\n} uivector;\n\nstatic void uivector_cleanup(void* p)\n{\n  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;\n  lodepng_free(((uivector*)p)->data);\n  ((uivector*)p)->data = NULL;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_reserve(uivector* p, size_t allocsize)\n{\n  if(allocsize > p->allocsize)\n  {\n    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);\n    void* data = lodepng_realloc(p->data, newsize);\n    if(data)\n    {\n      p->allocsize = newsize;\n      p->data = (unsigned*)data;\n    }\n    else return 0; /*error: not enough memory*/\n  }\n  return 1;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_resize(uivector* p, size_t size)\n{\n  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;\n  p->size = size;\n  return 1; /*success*/\n}\n\n/*resize and give all new elements the value*/\nstatic unsigned uivector_resizev(uivector* p, size_t size, unsigned value)\n{\n  size_t oldsize = p->size, i;\n  if(!uivector_resize(p, size)) return 0;\n  for(i = oldsize; i < size; ++i) p->data[i] = value;\n  return 1;\n}\n\nstatic void uivector_init(uivector* p)\n{\n  p->data = NULL;\n  p->size = p->allocsize = 0;\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned uivector_push_back(uivector* p, unsigned c)\n{\n  if(!uivector_resize(p, p->size + 1)) return 0;\n  p->data[p->size - 1] = c;\n  return 1;\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n/* /////////////////////////////////////////////////////////////////////////// */\n\n/*dynamic vector of unsigned chars*/\ntypedef struct ucvector\n{\n  unsigned char* data;\n  size_t size; /*used size*/\n  size_t allocsize; /*allocated size*/\n} ucvector;\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_reserve(ucvector* p, size_t allocsize)\n{\n  if(allocsize > p->allocsize)\n  {\n    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);\n    void* data = lodepng_realloc(p->data, newsize);\n    if(data)\n    {\n      p->allocsize = newsize;\n      p->data = (unsigned char*)data;\n    }\n    else return 0; /*error: not enough memory*/\n  }\n  return 1;\n}\n\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_resize(ucvector* p, size_t size)\n{\n  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;\n  p->size = size;\n  return 1; /*success*/\n}\n\n#ifdef LODEPNG_COMPILE_PNG\n\nstatic void ucvector_cleanup(void* p)\n{\n  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;\n  lodepng_free(((ucvector*)p)->data);\n  ((ucvector*)p)->data = NULL;\n}\n\nstatic void ucvector_init(ucvector* p)\n{\n  p->data = NULL;\n  p->size = p->allocsize = 0;\n}\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*you can both convert from vector to buffer&size and vica versa. If you use\ninit_buffer to take over a buffer and size, it is not needed to use cleanup*/\nstatic void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)\n{\n  p->data = buffer;\n  p->allocsize = p->size = size;\n}\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned ucvector_push_back(ucvector* p, unsigned char c)\n{\n  if(!ucvector_resize(p, p->size + 1)) return 0;\n  p->data[p->size - 1] = c;\n  return 1;\n}\n#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/\n\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_PNG\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*returns 1 if success, 0 if failure ==> nothing done*/\nstatic unsigned string_resize(char** out, size_t size)\n{\n  char* data = (char*)lodepng_realloc(*out, size + 1);\n  if(data)\n  {\n    data[size] = 0; /*null termination char*/\n    *out = data;\n  }\n  return data != 0;\n}\n\n/*init a {char*, size_t} pair for use as string*/\nstatic void string_init(char** out)\n{\n  *out = NULL;\n  string_resize(out, 0);\n}\n\n/*free the above pair again*/\nstatic void string_cleanup(char** out)\n{\n  lodepng_free(*out);\n  *out = NULL;\n}\n\nstatic void string_set(char** out, const char* in)\n{\n  size_t insize = strlen(in), i;\n  if(string_resize(out, insize))\n  {\n    for(i = 0; i != insize; ++i)\n    {\n      (*out)[i] = in[i];\n    }\n  }\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\nunsigned lodepng_read32bitInt(const unsigned char* buffer)\n{\n  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);\n}\n\n#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)\n/*buffer must have at least 4 allocated bytes available*/\nstatic void lodepng_set32bitInt(unsigned char* buffer, unsigned value)\n{\n  buffer[0] = (unsigned char)((value >> 24) & 0xff);\n  buffer[1] = (unsigned char)((value >> 16) & 0xff);\n  buffer[2] = (unsigned char)((value >>  8) & 0xff);\n  buffer[3] = (unsigned char)((value      ) & 0xff);\n}\n#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic void lodepng_add32bitInt(ucvector* buffer, unsigned value)\n{\n  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/\n  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / File IO                                                                / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_DISK\n\n/* returns negative value on error. This should be pure C compatible, so no fstat. */\nstatic long lodepng_filesize(const char* filename)\n{\n  FILE* file;\n  long size;\n  file = fopen(filename, \"rb\");\n  if(!file) return -1;\n\n  if(fseek(file, 0, SEEK_END) != 0)\n  {\n    fclose(file);\n    return -1;\n  }\n\n  size = ftell(file);\n  /* It may give LONG_MAX as directory size, this is invalid for us. */\n  if(size == LONG_MAX) size = -1;\n\n  fclose(file);\n  return size;\n}\n\n/* load file into buffer that already has the correct allocated size. Returns error code.*/\nstatic unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)\n{\n  FILE* file;\n  size_t readsize;\n  file = fopen(filename, \"rb\");\n  if(!file) return 78;\n\n  readsize = fread(out, 1, size, file);\n  fclose(file);\n\n  if (readsize != size) return 78;\n  return 0;\n}\n\nunsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename)\n{\n  long size = lodepng_filesize(filename);\n  if (size < 0) return 78;\n  *outsize = (size_t)size;\n\n  *out = (unsigned char*)lodepng_malloc((size_t)size);\n  if(!(*out) && size > 0) return 83; /*the above malloc failed*/\n\n  return lodepng_buffer_file(*out, (size_t)size, filename);\n}\n\n/*write given buffer to the file, overwriting the file, it doesn't append to it.*/\nunsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename)\n{\n  FILE* file;\n  file = fopen(filename, \"wb\" );\n  if(!file) return 79;\n  fwrite((char*)buffer , 1 , buffersize, file);\n  fclose(file);\n  return 0;\n}\n\n#endif /*LODEPNG_COMPILE_DISK*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // End of common code and tools. Begin of Zlib related code.            // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_ENCODER\n/*TODO: this ignores potential out of memory errors*/\n#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\\\n{\\\n  /*add a new byte at the end*/\\\n  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\\\n  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\\\n  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\\\n  ++(*bitpointer);\\\n}\n\nstatic void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)\n{\n  size_t i;\n  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));\n}\n\nstatic void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)\n{\n  size_t i;\n  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)\n\nstatic unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)\n{\n  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));\n  ++(*bitpointer);\n  return result;\n}\n\nstatic unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)\n{\n  unsigned result = 0, i;\n  for(i = 0; i != nbits; ++i)\n  {\n    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;\n    ++(*bitpointer);\n  }\n  return result;\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Deflate - Huffman                                                      / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#define FIRST_LENGTH_CODE_INDEX 257\n#define LAST_LENGTH_CODE_INDEX 285\n/*256 literals, the end code, some length codes, and 2 unused codes*/\n#define NUM_DEFLATE_CODE_SYMBOLS 288\n/*the distance codes have their own symbols, 30 used, 2 unused*/\n#define NUM_DISTANCE_SYMBOLS 32\n/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/\n#define NUM_CODE_LENGTH_CODES 19\n\n/*the base lengths represented by codes 257-285*/\nstatic const unsigned LENGTHBASE[29]\n  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,\n     67, 83, 99, 115, 131, 163, 195, 227, 258};\n\n/*the extra bits used by codes 257-285 (added to base length)*/\nstatic const unsigned LENGTHEXTRA[29]\n  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n      4,  4,  4,   4,   5,   5,   5,   5,   0};\n\n/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/\nstatic const unsigned DISTANCEBASE[30]\n  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,\n     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};\n\n/*the extra bits of backwards distances (added to base)*/\nstatic const unsigned DISTANCEEXTRA[30]\n  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,\n       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};\n\n/*the order in which \"code length alphabet code lengths\" are stored, out of this\nthe huffman tree of the dynamic huffman tree lengths is generated*/\nstatic const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]\n  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*\nHuffman tree struct, containing multiple representations of the tree\n*/\ntypedef struct HuffmanTree\n{\n  unsigned* tree2d;\n  unsigned* tree1d;\n  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/\n  unsigned maxbitlen; /*maximum number of bits a single code can get*/\n  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/\n} HuffmanTree;\n\n/*function used for debug purposes to draw the tree in ascii art with C++*/\n/*\nstatic void HuffmanTree_draw(HuffmanTree* tree)\n{\n  std::cout << \"tree. length: \" << tree->numcodes << \" maxbitlen: \" << tree->maxbitlen << std::endl;\n  for(size_t i = 0; i != tree->tree1d.size; ++i)\n  {\n    if(tree->lengths.data[i])\n      std::cout << i << \" \" << tree->tree1d.data[i] << \" \" << tree->lengths.data[i] << std::endl;\n  }\n  std::cout << std::endl;\n}*/\n\nstatic void HuffmanTree_init(HuffmanTree* tree)\n{\n  tree->tree2d = 0;\n  tree->tree1d = 0;\n  tree->lengths = 0;\n}\n\nstatic void HuffmanTree_cleanup(HuffmanTree* tree)\n{\n  lodepng_free(tree->tree2d);\n  lodepng_free(tree->tree1d);\n  lodepng_free(tree->lengths);\n}\n\n/*the tree representation used by the decoder. return value is error*/\nstatic unsigned HuffmanTree_make2DTree(HuffmanTree* tree)\n{\n  unsigned nodefilled = 0; /*up to which node it is filled*/\n  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/\n  unsigned n, i;\n\n  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));\n  if(!tree->tree2d) return 83; /*alloc fail*/\n\n  /*\n  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means\n  uninited, a value >= numcodes is an address to another bit, a value < numcodes\n  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as\n  many columns as codes - 1.\n  A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.\n  Here, the internal nodes are stored (what their 0 and 1 option point to).\n  There is only memory for such good tree currently, if there are more nodes\n  (due to too long length codes), error 55 will happen\n  */\n  for(n = 0; n < tree->numcodes * 2; ++n)\n  {\n    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/\n  }\n\n  for(n = 0; n < tree->numcodes; ++n) /*the codes*/\n  {\n    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/\n    {\n      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);\n      /*oversubscribed, see comment in lodepng_error_text*/\n      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;\n      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/\n      {\n        if(i + 1 == tree->lengths[n]) /*last bit*/\n        {\n          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/\n          treepos = 0;\n        }\n        else\n        {\n          /*put address of the next step in here, first that address has to be found of course\n          (it's just nodefilled + 1)...*/\n          ++nodefilled;\n          /*addresses encoded with numcodes added to it*/\n          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;\n          treepos = nodefilled;\n        }\n      }\n      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;\n    }\n  }\n\n  for(n = 0; n < tree->numcodes * 2; ++n)\n  {\n    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/\n  }\n\n  return 0;\n}\n\n/*\nSecond step for the ...makeFromLengths and ...makeFromFrequencies functions.\nnumcodes, lengths and maxbitlen must already be filled in correctly. return\nvalue is error.\n*/\nstatic unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)\n{\n  uivector blcount;\n  uivector nextcode;\n  unsigned error = 0;\n  unsigned bits, n;\n\n  uivector_init(&blcount);\n  uivector_init(&nextcode);\n\n  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));\n  if(!tree->tree1d) error = 83; /*alloc fail*/\n\n  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)\n  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))\n    error = 83; /*alloc fail*/\n\n  if(!error)\n  {\n    /*step 1: count number of instances of each code length*/\n    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];\n    /*step 2: generate the nextcode values*/\n    for(bits = 1; bits <= tree->maxbitlen; ++bits)\n    {\n      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;\n    }\n    /*step 3: generate all the codes*/\n    for(n = 0; n != tree->numcodes; ++n)\n    {\n      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;\n    }\n  }\n\n  uivector_cleanup(&blcount);\n  uivector_cleanup(&nextcode);\n\n  if(!error) return HuffmanTree_make2DTree(tree);\n  else return error;\n}\n\n/*\ngiven the code lengths (as stored in the PNG file), generate the tree as defined\nby Deflate. maxbitlen is the maximum bits that a code in the tree can have.\nreturn value is error.\n*/\nstatic unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,\n                                            size_t numcodes, unsigned maxbitlen)\n{\n  unsigned i;\n  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));\n  if(!tree->lengths) return 83; /*alloc fail*/\n  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];\n  tree->numcodes = (unsigned)numcodes; /*number of symbols*/\n  tree->maxbitlen = maxbitlen;\n  return HuffmanTree_makeFromLengths2(tree);\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/*BPM: Boundary Package Merge, see \"A Fast and Space-Economical Algorithm for Length-Limited Coding\",\nJyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/\n\n/*chain node for boundary package merge*/\ntypedef struct BPMNode\n{\n  int weight; /*the sum of all weights in this chain*/\n  unsigned index; /*index of this leaf node (called \"count\" in the paper)*/\n  struct BPMNode* tail; /*the next nodes in this chain (null if last)*/\n  int in_use;\n} BPMNode;\n\n/*lists of chains*/\ntypedef struct BPMLists\n{\n  /*memory pool*/\n  unsigned memsize;\n  BPMNode* memory;\n  unsigned numfree;\n  unsigned nextfree;\n  BPMNode** freelist;\n  /*two heads of lookahead chains per list*/\n  unsigned listsize;\n  BPMNode** chains0;\n  BPMNode** chains1;\n} BPMLists;\n\n/*creates a new chain node with the given parameters, from the memory in the lists */\nstatic BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail)\n{\n  unsigned i;\n  BPMNode* result;\n\n  /*memory full, so garbage collect*/\n  if(lists->nextfree >= lists->numfree)\n  {\n    /*mark only those that are in use*/\n    for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0;\n    for(i = 0; i != lists->listsize; ++i)\n    {\n      BPMNode* node;\n      for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1;\n      for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1;\n    }\n    /*collect those that are free*/\n    lists->numfree = 0;\n    for(i = 0; i != lists->memsize; ++i)\n    {\n      if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i];\n    }\n    lists->nextfree = 0;\n  }\n\n  result = lists->freelist[lists->nextfree++];\n  result->weight = weight;\n  result->index = index;\n  result->tail = tail;\n  return result;\n}\n\nstatic int bpmnode_compare(const void* a, const void* b)\n{\n  int wa = ((const BPMNode*)a)->weight;\n  int wb = ((const BPMNode*)b)->weight;\n  if(wa < wb) return -1;\n  if(wa > wb) return 1;\n  /*make the qsort a stable sort*/\n  return ((const BPMNode*)a)->index < ((const BPMNode*)b)->index ? 1 : -1;\n}\n\n/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/\nstatic void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num)\n{\n  unsigned lastindex = lists->chains1[c]->index;\n\n  if(c == 0)\n  {\n    if(lastindex >= numpresent) return;\n    lists->chains0[c] = lists->chains1[c];\n    lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0);\n  }\n  else\n  {\n    /*sum of the weights of the head nodes of the previous lookahead chains.*/\n    int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight;\n    lists->chains0[c] = lists->chains1[c];\n    if(lastindex < numpresent && sum > leaves[lastindex].weight)\n    {\n      lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail);\n      return;\n    }\n    lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]);\n    /*in the end we are only interested in the chain of the last list, so no\n    need to recurse if we're at the last one (this gives measurable speedup)*/\n    if(num + 1 < (int)(2 * numpresent - 2))\n    {\n      boundaryPM(lists, leaves, numpresent, c - 1, num);\n      boundaryPM(lists, leaves, numpresent, c - 1, num);\n    }\n  }\n}\n\nunsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,\n                                      size_t numcodes, unsigned maxbitlen)\n{\n  unsigned error = 0;\n  unsigned i;\n  size_t numpresent = 0; /*number of symbols with non-zero frequency*/\n  BPMNode* leaves; /*the symbols, only those with > 0 frequency*/\n\n  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/\n  if(( (size_t)1 << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/\n\n  leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves));\n  if(!leaves) return 83; /*alloc fail*/\n\n  for(i = 0; i != numcodes; ++i)\n  {\n    if(frequencies[i] > 0)\n    {\n      leaves[numpresent].weight = (int)frequencies[i];\n      leaves[numpresent].index = i;\n      ++numpresent;\n    }\n  }\n\n  for(i = 0; i != numcodes; ++i) lengths[i] = 0;\n\n  /*ensure at least two present symbols. There should be at least one symbol\n  according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To\n  make these work as well ensure there are at least two symbols. The\n  Package-Merge code below also doesn't work correctly if there's only one\n  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/\n  if(numpresent == 0)\n  {\n    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/\n  }\n  else if(numpresent == 1)\n  {\n    lengths[leaves[0].index] = 1;\n    lengths[leaves[0].index == 0 ? 1 : 0] = 1;\n  }\n  else\n  {\n    BPMLists lists;\n    BPMNode* node;\n\n    qsort(leaves, numpresent, sizeof(BPMNode), bpmnode_compare);\n\n    lists.listsize = maxbitlen;\n    lists.memsize = 2 * maxbitlen * (maxbitlen + 1);\n    lists.nextfree = 0;\n    lists.numfree = lists.memsize;\n    lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory));\n    lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*));\n    lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));\n    lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));\n    if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i];\n\n      bpmnode_create(&lists, leaves[0].weight, 1, 0);\n      bpmnode_create(&lists, leaves[1].weight, 2, 0);\n\n      for(i = 0; i != lists.listsize; ++i)\n      {\n        lists.chains0[i] = &lists.memory[0];\n        lists.chains1[i] = &lists.memory[1];\n      }\n\n      /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/\n      for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i);\n\n      for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail)\n      {\n        for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index];\n      }\n    }\n\n    lodepng_free(lists.memory);\n    lodepng_free(lists.freelist);\n    lodepng_free(lists.chains0);\n    lodepng_free(lists.chains1);\n  }\n\n  lodepng_free(leaves);\n  return error;\n}\n\n/*Create the Huffman tree given the symbol frequencies*/\nstatic unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,\n                                                size_t mincodes, size_t numcodes, unsigned maxbitlen)\n{\n  unsigned error = 0;\n  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/\n  tree->maxbitlen = maxbitlen;\n  tree->numcodes = (unsigned)numcodes; /*number of symbols*/\n  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));\n  if(!tree->lengths) return 83; /*alloc fail*/\n  /*initialize all lengths to 0*/\n  memset(tree->lengths, 0, numcodes * sizeof(unsigned));\n\n  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);\n  if(!error) error = HuffmanTree_makeFromLengths2(tree);\n  return error;\n}\n\nstatic unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index)\n{\n  return tree->tree1d[index];\n}\n\nstatic unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index)\n{\n  return tree->lengths[index];\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/\nstatic unsigned generateFixedLitLenTree(HuffmanTree* tree)\n{\n  unsigned i, error = 0;\n  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));\n  if(!bitlen) return 83; /*alloc fail*/\n\n  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/\n  for(i =   0; i <= 143; ++i) bitlen[i] = 8;\n  for(i = 144; i <= 255; ++i) bitlen[i] = 9;\n  for(i = 256; i <= 279; ++i) bitlen[i] = 7;\n  for(i = 280; i <= 287; ++i) bitlen[i] = 8;\n\n  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);\n\n  lodepng_free(bitlen);\n  return error;\n}\n\n/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/\nstatic unsigned generateFixedDistanceTree(HuffmanTree* tree)\n{\n  unsigned i, error = 0;\n  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));\n  if(!bitlen) return 83; /*alloc fail*/\n\n  /*there are 32 distance codes, but 30-31 are unused*/\n  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;\n  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);\n\n  lodepng_free(bitlen);\n  return error;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/*\nreturns the code, or (unsigned)(-1) if error happened\ninbitlength is the length of the complete buffer, in bits (so its byte length times 8)\n*/\nstatic unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,\n                                    const HuffmanTree* codetree, size_t inbitlength)\n{\n  unsigned treepos = 0, ct;\n  for(;;)\n  {\n    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/\n    /*\n    decode the symbol from the tree. The \"readBitFromStream\" code is inlined in\n    the expression below because this is the biggest bottleneck while decoding\n    */\n    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];\n    ++(*bp);\n    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/\n    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/\n\n    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/\n  }\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Inflator (Decompressor)                                                / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/\nstatic void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)\n{\n  /*TODO: check for out of memory errors*/\n  generateFixedLitLenTree(tree_ll);\n  generateFixedDistanceTree(tree_d);\n}\n\n/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/\nstatic unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,\n                                      const unsigned char* in, size_t* bp, size_t inlength)\n{\n  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/\n  unsigned error = 0;\n  unsigned n, HLIT, HDIST, HCLEN, i;\n  size_t inbitlength = inlength * 8;\n\n  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/\n  unsigned* bitlen_ll = 0; /*lit,len code lengths*/\n  unsigned* bitlen_d = 0; /*dist code lengths*/\n  /*code length code lengths (\"clcl\"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/\n  unsigned* bitlen_cl = 0;\n  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/\n\n  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/\n\n  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/\n  HLIT =  readBitsFromStream(bp, in, 5) + 257;\n  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/\n  HDIST = readBitsFromStream(bp, in, 5) + 1;\n  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/\n  HCLEN = readBitsFromStream(bp, in, 4) + 4;\n\n  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/\n\n  HuffmanTree_init(&tree_cl);\n\n  while(!error)\n  {\n    /*read the code length codes out of 3 * (amount of code length codes) bits*/\n\n    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));\n    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);\n\n    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i)\n    {\n      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);\n      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/\n    }\n\n    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);\n    if(error) break;\n\n    /*now we can use this tree to read the lengths for the tree that this function will return*/\n    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));\n    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));\n    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;\n    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;\n\n    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/\n    i = 0;\n    while(i < HLIT + HDIST)\n    {\n      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);\n      if(code <= 15) /*a length code*/\n      {\n        if(i < HLIT) bitlen_ll[i] = code;\n        else bitlen_d[i - HLIT] = code;\n        ++i;\n      }\n      else if(code == 16) /*repeat previous*/\n      {\n        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/\n        unsigned value; /*set value to the previous code*/\n\n        if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/\n\n        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 2);\n\n        if(i < HLIT + 1) value = bitlen_ll[i - 1];\n        else value = bitlen_d[i - HLIT - 1];\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/\n          if(i < HLIT) bitlen_ll[i] = value;\n          else bitlen_d[i - HLIT] = value;\n          ++i;\n        }\n      }\n      else if(code == 17) /*repeat \"0\" 3-10 times*/\n      {\n        unsigned replength = 3; /*read in the bits that indicate repeat length*/\n        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 3);\n\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/\n\n          if(i < HLIT) bitlen_ll[i] = 0;\n          else bitlen_d[i - HLIT] = 0;\n          ++i;\n        }\n      }\n      else if(code == 18) /*repeat \"0\" 11-138 times*/\n      {\n        unsigned replength = 11; /*read in the bits that indicate repeat length*/\n        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/\n        replength += readBitsFromStream(bp, in, 7);\n\n        /*repeat this value in the next lengths*/\n        for(n = 0; n < replength; ++n)\n        {\n          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/\n\n          if(i < HLIT) bitlen_ll[i] = 0;\n          else bitlen_d[i - HLIT] = 0;\n          ++i;\n        }\n      }\n      else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n      {\n        if(code == (unsigned)(-1))\n        {\n          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n          (10=no endcode, 11=wrong jump outside of tree)*/\n          error = (*bp) > inbitlength ? 10 : 11;\n        }\n        else error = 16; /*unexisting code, this can never happen*/\n        break;\n      }\n    }\n    if(error) break;\n\n    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/\n\n    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/\n    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);\n    if(error) break;\n    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);\n\n    break; /*end of error-while*/\n  }\n\n  lodepng_free(bitlen_cl);\n  lodepng_free(bitlen_ll);\n  lodepng_free(bitlen_d);\n  HuffmanTree_cleanup(&tree_cl);\n\n  return error;\n}\n\n/*inflate a block with dynamic of fixed Huffman tree*/\nstatic unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,\n                                    size_t* pos, size_t inlength, unsigned btype)\n{\n  unsigned error = 0;\n  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/\n  HuffmanTree tree_d; /*the huffman tree for distance codes*/\n  size_t inbitlength = inlength * 8;\n\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n\n  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);\n  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);\n\n  while(!error) /*decode all symbols until end reached, breaks at end code*/\n  {\n    /*code_ll is literal, length or end code*/\n    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);\n    if(code_ll <= 255) /*literal symbol*/\n    {\n      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/\n      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);\n      out->data[*pos] = (unsigned char)code_ll;\n      ++(*pos);\n    }\n    else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/\n    {\n      unsigned code_d, distance;\n      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/\n      size_t start, forward, backward, length;\n\n      /*part 1: get length base*/\n      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];\n\n      /*part 2: get extra bits and add the value of that to length*/\n      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];\n      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/\n      length += readBitsFromStream(bp, in, numextrabits_l);\n\n      /*part 3: get distance code*/\n      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);\n      if(code_d > 29)\n      {\n        if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n        {\n          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n          (10=no endcode, 11=wrong jump outside of tree)*/\n          error = (*bp) > inlength * 8 ? 10 : 11;\n        }\n        else error = 18; /*error: invalid distance code (30-31 are never used)*/\n        break;\n      }\n      distance = DISTANCEBASE[code_d];\n\n      /*part 4: get extra bits from distance*/\n      numextrabits_d = DISTANCEEXTRA[code_d];\n      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/\n      distance += readBitsFromStream(bp, in, numextrabits_d);\n\n      /*part 5: fill in all the out[n] values based on the length and dist*/\n      start = (*pos);\n      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/\n      backward = start - distance;\n\n      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);\n      if (distance < length) {\n        for(forward = 0; forward < length; ++forward)\n        {\n          out->data[(*pos)++] = out->data[backward++];\n        }\n      } else {\n        memcpy(out->data + *pos, out->data + backward, length);\n        *pos += length;\n      }\n    }\n    else if(code_ll == 256)\n    {\n      break; /*end code, break the loop*/\n    }\n    else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/\n    {\n      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol\n      (10=no endcode, 11=wrong jump outside of tree)*/\n      error = ((*bp) > inlength * 8) ? 10 : 11;\n      break;\n    }\n  }\n\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n\n  return error;\n}\n\nstatic unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)\n{\n  size_t p;\n  unsigned LEN, NLEN, n, error = 0;\n\n  /*go to first boundary of byte*/\n  while(((*bp) & 0x7) != 0) ++(*bp);\n  p = (*bp) / 8; /*byte position*/\n\n  /*read LEN (2 bytes) and NLEN (2 bytes)*/\n  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/\n  LEN = in[p] + 256u * in[p + 1]; p += 2;\n  NLEN = in[p] + 256u * in[p + 1]; p += 2;\n\n  /*check if 16-bit NLEN is really the one's complement of LEN*/\n  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/\n\n  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/\n\n  /*read the literal data: LEN bytes are now stored in the out buffer*/\n  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/\n  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];\n\n  (*bp) = p * 8;\n\n  return error;\n}\n\nstatic unsigned lodepng_inflatev(ucvector* out,\n                                 const unsigned char* in, size_t insize,\n                                 const LodePNGDecompressSettings* settings)\n{\n  /*bit pointer in the \"in\" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/\n  size_t bp = 0;\n  unsigned BFINAL = 0;\n  size_t pos = 0; /*byte position in the out buffer*/\n  unsigned error = 0;\n\n  (void)settings;\n\n  while(!BFINAL)\n  {\n    unsigned BTYPE;\n    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/\n    BFINAL = readBitFromStream(&bp, in);\n    BTYPE = 1u * readBitFromStream(&bp, in);\n    BTYPE += 2u * readBitFromStream(&bp, in);\n\n    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/\n    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/\n    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/\n\n    if(error) return error;\n  }\n\n  return error;\n}\n\nunsigned lodepng_inflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGDecompressSettings* settings)\n{\n  unsigned error;\n  ucvector v;\n  ucvector_init_buffer(&v, *out, *outsize);\n  error = lodepng_inflatev(&v, in, insize, settings);\n  *out = v.data;\n  *outsize = v.size;\n  return error;\n}\n\nstatic unsigned inflate(unsigned char** out, size_t* outsize,\n                        const unsigned char* in, size_t insize,\n                        const LodePNGDecompressSettings* settings)\n{\n  if(settings->custom_inflate)\n  {\n    return settings->custom_inflate(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_inflate(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Deflator (Compressor)                                                  / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;\n\n/*bitlen is the size in bits of the code*/\nstatic void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)\n{\n  addBitsToStreamReversed(bp, compressed, code, bitlen);\n}\n\n/*search the index in the array, that has the largest value smaller than or equal to the given value,\ngiven array must be sorted (if no value is smaller, it returns the size of the given array)*/\nstatic size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)\n{\n  /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/\n  size_t left = 1;\n  size_t right = array_size - 1;\n\n  while(left <= right) {\n    size_t mid = (left + right) >> 1;\n    if (array[mid] >= value) right = mid - 1;\n    else left = mid + 1;\n  }\n  if(left >= array_size || array[left] > value) left--;\n  return left;\n}\n\nstatic void addLengthDistance(uivector* values, size_t length, size_t distance)\n{\n  /*values in encoded vector are those used by deflate:\n  0-255: literal bytes\n  256: end\n  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)\n  286-287: invalid*/\n\n  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);\n  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);\n  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);\n  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);\n\n  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);\n  uivector_push_back(values, extra_length);\n  uivector_push_back(values, dist_code);\n  uivector_push_back(values, extra_distance);\n}\n\n/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3\nbytes as input because 3 is the minimum match length for deflate*/\nstatic const unsigned HASH_NUM_VALUES = 65536;\nstatic const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/\n\ntypedef struct Hash\n{\n  int* head; /*hash value to head circular pos - can be outdated if went around window*/\n  /*circular pos to prev circular pos*/\n  unsigned short* chain;\n  int* val; /*circular pos to hash value*/\n\n  /*TODO: do this not only for zeros but for any repeated byte. However for PNG\n  it's always going to be the zeros that dominate, so not important for PNG*/\n  int* headz; /*similar to head, but for chainz*/\n  unsigned short* chainz; /*those with same amount of zeros*/\n  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/\n} Hash;\n\nstatic unsigned hash_init(Hash* hash, unsigned windowsize)\n{\n  unsigned i;\n  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);\n  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);\n  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n\n  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));\n  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);\n\n  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros)\n  {\n    return 83; /*alloc fail*/\n  }\n\n  /*initialize hash table*/\n  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/\n\n  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;\n  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/\n\n  return 0;\n}\n\nstatic void hash_cleanup(Hash* hash)\n{\n  lodepng_free(hash->head);\n  lodepng_free(hash->val);\n  lodepng_free(hash->chain);\n\n  lodepng_free(hash->zeros);\n  lodepng_free(hash->headz);\n  lodepng_free(hash->chainz);\n}\n\n\n\nstatic unsigned getHash(const unsigned char* data, size_t size, size_t pos)\n{\n  unsigned result = 0;\n  if(pos + 2 < size)\n  {\n    /*A simple shift and xor hash is used. Since the data of PNGs is dominated\n    by zeroes due to the filters, a better hash does not have a significant\n    effect on speed in traversing the chain, and causes more time spend on\n    calculating the hash.*/\n    result ^= (unsigned)(data[pos + 0] << 0u);\n    result ^= (unsigned)(data[pos + 1] << 4u);\n    result ^= (unsigned)(data[pos + 2] << 8u);\n  } else {\n    size_t amount, i;\n    if(pos >= size) return 0;\n    amount = size - pos;\n    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));\n  }\n  return result & HASH_BIT_MASK;\n}\n\nstatic unsigned countZeros(const unsigned char* data, size_t size, size_t pos)\n{\n  const unsigned char* start = data + pos;\n  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;\n  if(end > data + size) end = data + size;\n  data = start;\n  while(data != end && *data == 0) ++data;\n  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/\n  return (unsigned)(data - start);\n}\n\n/*wpos = pos & (windowsize - 1)*/\nstatic void updateHashChain(Hash* hash, int wpos, unsigned hashval, unsigned short numzeros)\n{\n  hash->val[wpos] = (int)hashval;\n  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];\n  hash->head[hashval] = wpos;\n\n  hash->zeros[wpos] = numzeros;\n  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];\n  hash->headz[numzeros] = wpos;\n}\n\n/*\nLZ77-encode the data. Return value is error code. The input are raw bytes, the output\nis in the form of unsigned integers with codes representing for example literal bytes, or\nlength/distance pairs.\nIt uses a hash table technique to let it encode faster. When doing LZ77 encoding, a\nsliding window (of windowsize) is used, and all past bytes in that window can be used as\nthe \"dictionary\". A brute force search through all possible distances would be slow, and\nthis hash technique is one out of several ways to speed this up.\n*/\nstatic unsigned encodeLZ77(uivector* out, Hash* hash,\n                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,\n                           unsigned minmatch, unsigned nicematch, unsigned lazymatching)\n{\n  size_t pos;\n  unsigned i, error = 0;\n  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/\n  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;\n  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;\n\n  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/\n  unsigned numzeros = 0;\n\n  unsigned offset; /*the offset represents the distance in LZ77 terminology*/\n  unsigned length;\n  unsigned lazy = 0;\n  unsigned lazylength = 0, lazyoffset = 0;\n  unsigned hashval;\n  unsigned current_offset, current_length;\n  unsigned prev_offset;\n  const unsigned char *lastptr, *foreptr, *backptr;\n  unsigned hashpos;\n\n  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/\n  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/\n\n  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;\n\n  for(pos = inpos; pos < insize; ++pos)\n  {\n    unsigned int wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/\n    unsigned chainlength = 0;\n\n    hashval = getHash(in, insize, pos);\n\n    if(usezeros && hashval == 0)\n    {\n      if(numzeros == 0) numzeros = countZeros(in, insize, pos);\n      else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;\n    }\n    else\n    {\n      numzeros = 0;\n    }\n\n    updateHashChain(hash, wpos, hashval, numzeros);\n\n    /*the length and offset found for the current position*/\n    length = 0;\n    offset = 0;\n\n    hashpos = hash->chain[wpos];\n\n    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];\n\n    /*search for the longest string*/\n    prev_offset = 0;\n    for(;;)\n    {\n      if(chainlength++ >= maxchainlength) break;\n      current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize;\n\n      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/\n      prev_offset = current_offset;\n      if(current_offset > 0)\n      {\n        /*test the next characters*/\n        foreptr = &in[pos];\n        backptr = &in[pos - current_offset];\n\n        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/\n        if(numzeros >= 3)\n        {\n          unsigned skip = hash->zeros[hashpos];\n          if(skip > numzeros) skip = numzeros;\n          backptr += skip;\n          foreptr += skip;\n        }\n\n        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/\n        {\n          ++backptr;\n          ++foreptr;\n        }\n        current_length = (unsigned)(foreptr - &in[pos]);\n\n        if(current_length > length)\n        {\n          length = current_length; /*the longest length*/\n          offset = current_offset; /*the offset that is related to this longest length*/\n          /*jump out once a length of max length is found (speed gain). This also jumps\n          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/\n          if(current_length >= nicematch) break;\n        }\n      }\n\n      if(hashpos == hash->chain[hashpos]) break;\n\n      if(numzeros >= 3 && length > numzeros)\n      {\n        hashpos = hash->chainz[hashpos];\n        if(hash->zeros[hashpos] != numzeros) break;\n      }\n      else\n      {\n        hashpos = hash->chain[hashpos];\n        /*outdated hash value, happens if particular value was not encountered in whole last window*/\n        if(hash->val[hashpos] != (int)hashval) break;\n      }\n    }\n\n    if(lazymatching)\n    {\n      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH)\n      {\n        lazy = 1;\n        lazylength = length;\n        lazyoffset = offset;\n        continue; /*try the next byte*/\n      }\n      if(lazy)\n      {\n        lazy = 0;\n        if(pos == 0) ERROR_BREAK(81);\n        if(length > lazylength + 1)\n        {\n          /*push the previous character as literal*/\n          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);\n        }\n        else\n        {\n          length = lazylength;\n          offset = lazyoffset;\n          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/\n          hash->headz[numzeros] = -1; /*idem*/\n          --pos;\n        }\n      }\n    }\n    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);\n\n    /*encode it as length/distance pair or literal value*/\n    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/\n    {\n      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    else if(length < minmatch || (length == 3 && offset > 4096))\n    {\n      /*compensate for the fact that longer offsets have more extra bits, a\n      length of only 3 may be not worth it then*/\n      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    else\n    {\n      addLengthDistance(out, length, offset);\n      for(i = 1; i < length; ++i)\n      {\n        ++pos;\n        wpos = pos & (windowsize - 1);\n        hashval = getHash(in, insize, pos);\n        if(usezeros && hashval == 0)\n        {\n          if(numzeros == 0) numzeros = countZeros(in, insize, pos);\n          else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;\n        }\n        else\n        {\n          numzeros = 0;\n        }\n        updateHashChain(hash, wpos, hashval, numzeros);\n      }\n    }\n  } /*end of the loop through each character of input*/\n\n  return error;\n}\n\n/* /////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)\n{\n  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,\n  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/\n\n  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;\n  unsigned datapos = 0;\n  for(i = 0; i != numdeflateblocks; ++i)\n  {\n    unsigned BFINAL, BTYPE, LEN, NLEN;\n    unsigned char firstbyte;\n\n    BFINAL = (i == numdeflateblocks - 1);\n    BTYPE = 0;\n\n    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));\n    ucvector_push_back(out, firstbyte);\n\n    LEN = 65535;\n    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;\n    NLEN = 65535 - LEN;\n\n    ucvector_push_back(out, (unsigned char)(LEN & 255));\n    ucvector_push_back(out, (unsigned char)(LEN >> 8));\n    ucvector_push_back(out, (unsigned char)(NLEN & 255));\n    ucvector_push_back(out, (unsigned char)(NLEN >> 8));\n\n    /*Decompressed data*/\n    for(j = 0; j < 65535 && datapos < datasize; ++j)\n    {\n      ucvector_push_back(out, data[datapos++]);\n    }\n  }\n\n  return 0;\n}\n\n/*\nwrite the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.\ntree_ll: the tree for lit and len codes.\ntree_d: the tree for distance codes.\n*/\nstatic void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,\n                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d)\n{\n  size_t i = 0;\n  for(i = 0; i != lz77_encoded->size; ++i)\n  {\n    unsigned val = lz77_encoded->data[i];\n    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));\n    if(val > 256) /*for a length code, 3 more things have to be added*/\n    {\n      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;\n      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];\n      unsigned length_extra_bits = lz77_encoded->data[++i];\n\n      unsigned distance_code = lz77_encoded->data[++i];\n\n      unsigned distance_index = distance_code;\n      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];\n      unsigned distance_extra_bits = lz77_encoded->data[++i];\n\n      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),\n                       HuffmanTree_getLength(tree_d, distance_code));\n      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);\n    }\n  }\n}\n\n/*Deflate for a block of type \"dynamic\", that is, with freely, optimally, created huffman trees*/\nstatic unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,\n                               const unsigned char* data, size_t datapos, size_t dataend,\n                               const LodePNGCompressSettings* settings, unsigned final)\n{\n  unsigned error = 0;\n\n  /*\n  A block is compressed as follows: The PNG data is lz77 encoded, resulting in\n  literal bytes and length/distance pairs. This is then huffman compressed with\n  two huffman trees. One huffman tree is used for the lit and len values (\"ll\"),\n  another huffman tree is used for the dist values (\"d\"). These two trees are\n  stored using their code lengths, and to compress even more these code lengths\n  are also run-length encoded and huffman compressed. This gives a huffman tree\n  of code lengths \"cl\". The code lenghts used to describe this third tree are\n  the code length code lengths (\"clcl\").\n  */\n\n  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/\n  uivector lz77_encoded;\n  HuffmanTree tree_ll; /*tree for lit,len values*/\n  HuffmanTree tree_d; /*tree for distance codes*/\n  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/\n  uivector frequencies_ll; /*frequency of lit,len codes*/\n  uivector frequencies_d; /*frequency of dist codes*/\n  uivector frequencies_cl; /*frequency of code length codes*/\n  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/\n  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/\n  /*bitlen_cl is the code length code lengths (\"clcl\"). The bit lengths of codes to represent tree_cl\n  (these are written as is in the file, it would be crazy to compress these using yet another huffman\n  tree that needs to be represented by yet another set of code lengths)*/\n  uivector bitlen_cl;\n  size_t datasize = dataend - datapos;\n\n  /*\n  Due to the huffman compression of huffman tree representations (\"two levels\"), there are some anologies:\n  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.\n  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.\n  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.\n  */\n\n  unsigned BFINAL = final;\n  size_t numcodes_ll, numcodes_d, i;\n  unsigned HLIT, HDIST, HCLEN;\n\n  uivector_init(&lz77_encoded);\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n  HuffmanTree_init(&tree_cl);\n  uivector_init(&frequencies_ll);\n  uivector_init(&frequencies_d);\n  uivector_init(&frequencies_cl);\n  uivector_init(&bitlen_lld);\n  uivector_init(&bitlen_lld_e);\n  uivector_init(&bitlen_cl);\n\n  /*This while loop never loops due to a break at the end, it is here to\n  allow breaking out of it to the cleanup phase on error conditions.*/\n  while(!error)\n  {\n    if(settings->use_lz77)\n    {\n      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,\n                         settings->minmatch, settings->nicematch, settings->lazymatching);\n      if(error) break;\n    }\n    else\n    {\n      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);\n      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/\n    }\n\n    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);\n    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);\n\n    /*Count the frequencies of lit, len and dist codes*/\n    for(i = 0; i != lz77_encoded.size; ++i)\n    {\n      unsigned symbol = lz77_encoded.data[i];\n      ++frequencies_ll.data[symbol];\n      if(symbol > 256)\n      {\n        unsigned dist = lz77_encoded.data[i + 2];\n        ++frequencies_d.data[dist];\n        i += 3;\n      }\n    }\n    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/\n\n    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/\n    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);\n    if(error) break;\n    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/\n    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);\n    if(error) break;\n\n    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;\n    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;\n    /*store the code lengths of both generated trees in bitlen_lld*/\n    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));\n    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));\n\n    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),\n    17 (3-10 zeroes), 18 (11-138 zeroes)*/\n    for(i = 0; i != (unsigned)bitlen_lld.size; ++i)\n    {\n      unsigned j = 0; /*amount of repititions*/\n      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;\n\n      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/\n      {\n        ++j; /*include the first zero*/\n        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/\n        {\n          uivector_push_back(&bitlen_lld_e, 17);\n          uivector_push_back(&bitlen_lld_e, j - 3);\n        }\n        else /*repeat code 18 supports max 138 zeroes*/\n        {\n          if(j > 138) j = 138;\n          uivector_push_back(&bitlen_lld_e, 18);\n          uivector_push_back(&bitlen_lld_e, j - 11);\n        }\n        i += (j - 1);\n      }\n      else if(j >= 3) /*repeat code for value other than zero*/\n      {\n        size_t k;\n        unsigned num = j / 6, rest = j % 6;\n        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);\n        for(k = 0; k < num; ++k)\n        {\n          uivector_push_back(&bitlen_lld_e, 16);\n          uivector_push_back(&bitlen_lld_e, 6 - 3);\n        }\n        if(rest >= 3)\n        {\n          uivector_push_back(&bitlen_lld_e, 16);\n          uivector_push_back(&bitlen_lld_e, rest - 3);\n        }\n        else j -= rest;\n        i += j;\n      }\n      else /*too short to benefit from repeat code*/\n      {\n        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);\n      }\n    }\n\n    /*generate tree_cl, the huffmantree of huffmantrees*/\n\n    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != bitlen_lld_e.size; ++i)\n    {\n      ++frequencies_cl.data[bitlen_lld_e.data[i]];\n      /*after a repeat code come the bits that specify the number of repetitions,\n      those don't need to be in the frequencies_cl calculation*/\n      if(bitlen_lld_e.data[i] >= 16) ++i;\n    }\n\n    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,\n                                            frequencies_cl.size, frequencies_cl.size, 7);\n    if(error) break;\n\n    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);\n    for(i = 0; i != tree_cl.numcodes; ++i)\n    {\n      /*lenghts of code length tree is in the order as specified by deflate*/\n      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);\n    }\n    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)\n    {\n      /*remove zeros at the end, but minimum size must be 4*/\n      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);\n    }\n    if(error) break;\n\n    /*\n    Write everything into the output\n\n    After the BFINAL and BTYPE, the dynamic block consists out of the following:\n    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN\n    - (HCLEN+4)*3 bits code lengths of code length alphabet\n    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length\n      alphabet, + possible repetition codes 16, 17, 18)\n    - HDIST + 1 code lengths of distance alphabet (encoded using the code length\n      alphabet, + possible repetition codes 16, 17, 18)\n    - compressed data\n    - 256 (end code)\n    */\n\n    /*Write block type*/\n    addBitToStream(bp, out, BFINAL);\n    addBitToStream(bp, out, 0); /*first bit of BTYPE \"dynamic\"*/\n    addBitToStream(bp, out, 1); /*second bit of BTYPE \"dynamic\"*/\n\n    /*write the HLIT, HDIST and HCLEN values*/\n    HLIT = (unsigned)(numcodes_ll - 257);\n    HDIST = (unsigned)(numcodes_d - 1);\n    HCLEN = (unsigned)bitlen_cl.size - 4;\n    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/\n    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;\n    addBitsToStream(bp, out, HLIT, 5);\n    addBitsToStream(bp, out, HDIST, 5);\n    addBitsToStream(bp, out, HCLEN, 4);\n\n    /*write the code lenghts of the code length alphabet*/\n    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);\n\n    /*write the lenghts of the lit/len AND the dist alphabet*/\n    for(i = 0; i != bitlen_lld_e.size; ++i)\n    {\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),\n                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));\n      /*extra bits of repeat codes*/\n      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);\n      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);\n      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);\n    }\n\n    /*write the compressed data symbols*/\n    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);\n    /*error: the length of the end code 256 must be larger than 0*/\n    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);\n\n    /*write the end code*/\n    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));\n\n    break; /*end of error-while*/\n  }\n\n  /*cleanup*/\n  uivector_cleanup(&lz77_encoded);\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n  HuffmanTree_cleanup(&tree_cl);\n  uivector_cleanup(&frequencies_ll);\n  uivector_cleanup(&frequencies_d);\n  uivector_cleanup(&frequencies_cl);\n  uivector_cleanup(&bitlen_lld_e);\n  uivector_cleanup(&bitlen_lld);\n  uivector_cleanup(&bitlen_cl);\n\n  return error;\n}\n\nstatic unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,\n                             const unsigned char* data,\n                             size_t datapos, size_t dataend,\n                             const LodePNGCompressSettings* settings, unsigned final)\n{\n  HuffmanTree tree_ll; /*tree for literal values and length codes*/\n  HuffmanTree tree_d; /*tree for distance codes*/\n\n  unsigned BFINAL = final;\n  unsigned error = 0;\n  size_t i;\n\n  HuffmanTree_init(&tree_ll);\n  HuffmanTree_init(&tree_d);\n\n  generateFixedLitLenTree(&tree_ll);\n  generateFixedDistanceTree(&tree_d);\n\n  addBitToStream(bp, out, BFINAL);\n  addBitToStream(bp, out, 1); /*first bit of BTYPE*/\n  addBitToStream(bp, out, 0); /*second bit of BTYPE*/\n\n  if(settings->use_lz77) /*LZ77 encoded*/\n  {\n    uivector lz77_encoded;\n    uivector_init(&lz77_encoded);\n    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,\n                       settings->minmatch, settings->nicematch, settings->lazymatching);\n    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);\n    uivector_cleanup(&lz77_encoded);\n  }\n  else /*no LZ77, but still will be Huffman compressed*/\n  {\n    for(i = datapos; i < dataend; ++i)\n    {\n      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));\n    }\n  }\n  /*add END code*/\n  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));\n\n  /*cleanup*/\n  HuffmanTree_cleanup(&tree_ll);\n  HuffmanTree_cleanup(&tree_d);\n\n  return error;\n}\n\nstatic unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,\n                                 const LodePNGCompressSettings* settings)\n{\n  unsigned error = 0;\n  size_t i, blocksize, numdeflateblocks;\n  size_t bp = 0; /*the bit pointer*/\n  Hash hash;\n\n  if(settings->btype > 2) return 61;\n  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);\n  else if(settings->btype == 1) blocksize = insize;\n  else /*if(settings->btype == 2)*/\n  {\n    /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/\n    blocksize = insize / 8 + 8;\n    if(blocksize < 65536) blocksize = 65536;\n    if(blocksize > 262144) blocksize = 262144;\n  }\n\n  numdeflateblocks = (insize + blocksize - 1) / blocksize;\n  if(numdeflateblocks == 0) numdeflateblocks = 1;\n\n  error = hash_init(&hash, settings->windowsize);\n  if(error) return error;\n\n  for(i = 0; i != numdeflateblocks && !error; ++i)\n  {\n    unsigned final = (i == numdeflateblocks - 1);\n    size_t start = i * blocksize;\n    size_t end = start + blocksize;\n    if(end > insize) end = insize;\n\n    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);\n    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);\n  }\n\n  hash_cleanup(&hash);\n\n  return error;\n}\n\nunsigned lodepng_deflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGCompressSettings* settings)\n{\n  unsigned error;\n  ucvector v;\n  ucvector_init_buffer(&v, *out, *outsize);\n  error = lodepng_deflatev(&v, in, insize, settings);\n  *out = v.data;\n  *outsize = v.size;\n  return error;\n}\n\nstatic unsigned deflate(unsigned char** out, size_t* outsize,\n                        const unsigned char* in, size_t insize,\n                        const LodePNGCompressSettings* settings)\n{\n  if(settings->custom_deflate)\n  {\n    return settings->custom_deflate(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_deflate(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Adler32                                                                  */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)\n{\n   unsigned s1 = adler & 0xffff;\n   unsigned s2 = (adler >> 16) & 0xffff;\n\n  while(len > 0)\n  {\n    /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/\n    unsigned amount = len > 5550 ? 5550 : len;\n    len -= amount;\n    while(amount > 0)\n    {\n      s1 += (*data++);\n      s2 += s1;\n      --amount;\n    }\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s2 << 16) | s1;\n}\n\n/*Return the adler32 of the bytes data[0..len-1]*/\nstatic unsigned adler32(const unsigned char* data, unsigned len)\n{\n  return update_adler32(1L, data, len);\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Zlib                                                                   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nunsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                 size_t insize, const LodePNGDecompressSettings* settings)\n{\n  unsigned error = 0;\n  unsigned CM, CINFO, FDICT;\n\n  if(insize < 2) return 53; /*error, size of zlib data too small*/\n  /*read information from zlib header*/\n  if((in[0] * 256 + in[1]) % 31 != 0)\n  {\n    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/\n    return 24;\n  }\n\n  CM = in[0] & 15;\n  CINFO = (in[0] >> 4) & 15;\n  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/\n  FDICT = (in[1] >> 5) & 1;\n  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/\n\n  if(CM != 8 || CINFO > 7)\n  {\n    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/\n    return 25;\n  }\n  if(FDICT != 0)\n  {\n    /*error: the specification of PNG says about the zlib stream:\n      \"The additional flags shall not specify a preset dictionary.\"*/\n    return 26;\n  }\n\n  error = inflate(out, outsize, in + 2, insize - 2, settings);\n  if(error) return error;\n\n  if(!settings->ignore_adler32)\n  {\n    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);\n    unsigned checksum = adler32(*out, (unsigned)(*outsize));\n    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/\n  }\n\n  return 0; /*no error*/\n}\n\nstatic unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                size_t insize, const LodePNGDecompressSettings* settings)\n{\n  if(settings->custom_zlib)\n  {\n    return settings->custom_zlib(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_zlib_decompress(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\nunsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                               size_t insize, const LodePNGCompressSettings* settings)\n{\n  /*initially, *out must be NULL and outsize 0, if you just give some random *out\n  that's pointing to a non allocated buffer, this'll crash*/\n  ucvector outv;\n  size_t i;\n  unsigned error;\n  unsigned char* deflatedata = 0;\n  size_t deflatesize = 0;\n\n  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/\n  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/\n  unsigned FLEVEL = 0;\n  unsigned FDICT = 0;\n  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;\n  unsigned FCHECK = 31 - CMFFLG % 31;\n  CMFFLG += FCHECK;\n\n  /*ucvector-controlled version of the output buffer, for dynamic array*/\n  ucvector_init_buffer(&outv, *out, *outsize);\n\n  ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8));\n  ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255));\n\n  error = deflate(&deflatedata, &deflatesize, in, insize, settings);\n\n  if(!error)\n  {\n    unsigned ADLER32 = adler32(in, (unsigned)insize);\n    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);\n    lodepng_free(deflatedata);\n    lodepng_add32bitInt(&outv, ADLER32);\n  }\n\n  *out = outv.data;\n  *outsize = outv.size;\n\n  return error;\n}\n\n/* compress using the default or custom zlib function */\nstatic unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                              size_t insize, const LodePNGCompressSettings* settings)\n{\n  if(settings->custom_zlib)\n  {\n    return settings->custom_zlib(out, outsize, in, insize, settings);\n  }\n  else\n  {\n    return lodepng_zlib_compress(out, outsize, in, insize, settings);\n  }\n}\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#else /*no LODEPNG_COMPILE_ZLIB*/\n\n#ifdef LODEPNG_COMPILE_DECODER\nstatic unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                size_t insize, const LodePNGDecompressSettings* settings)\n{\n  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */\n  return settings->custom_zlib(out, outsize, in, insize, settings);\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,\n                              size_t insize, const LodePNGCompressSettings* settings)\n{\n  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */\n  return settings->custom_zlib(out, outsize, in, insize, settings);\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/*this is a good tradeoff between speed and compression ratio*/\n#define DEFAULT_WINDOWSIZE 2048\n\nvoid lodepng_compress_settings_init(LodePNGCompressSettings* settings)\n{\n  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/\n  settings->btype = 2;\n  settings->use_lz77 = 1;\n  settings->windowsize = DEFAULT_WINDOWSIZE;\n  settings->minmatch = 3;\n  settings->nicematch = 128;\n  settings->lazymatching = 1;\n\n  settings->custom_zlib = 0;\n  settings->custom_deflate = 0;\n  settings->custom_context = 0;\n}\n\nconst LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};\n\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nvoid lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)\n{\n  settings->ignore_adler32 = 0;\n\n  settings->custom_zlib = 0;\n  settings->custom_inflate = 0;\n  settings->custom_context = 0;\n}\n\nconst LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // End of Zlib related code. Begin of PNG related code.                 // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_PNG\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / CRC32                                                                  / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n\n#ifndef LODEPNG_NO_COMPILE_CRC\n/* CRC polynomial: 0xedb88320 */\nstatic unsigned lodepng_crc32_table[256] = {\n           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,\n   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,\n   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,\n   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,\n   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,\n   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,\n   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,\n   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,\n  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,\n  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,\n  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,\n  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,\n  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,\n  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,\n  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,\n  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,\n  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,\n  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,\n  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,\n  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,\n  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,\n  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,\n  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,\n  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,\n  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,\n  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,\n  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,\n  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,\n  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,\n  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,\n  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,\n  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u\n};\n\n/*Return the CRC of the bytes buf[0..len-1].*/\nunsigned lodepng_crc32(const unsigned char* data, size_t length)\n{\n  unsigned r = 0xffffffffu;\n  size_t i;\n  for(i = 0; i < length; ++i)\n  {\n    r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8);\n  }\n  return r ^ 0xffffffffu;\n}\n#else /* !LODEPNG_NO_COMPILE_CRC */\nunsigned lodepng_crc32(const unsigned char* data, size_t length);\n#endif /* !LODEPNG_NO_COMPILE_CRC */\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nstatic unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)\n{\n  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);\n  ++(*bitpointer);\n  return result;\n}\n\nstatic unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)\n{\n  unsigned result = 0;\n  size_t i;\n  for(i = nbits - 1; i < nbits; --i)\n  {\n    result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i;\n  }\n  return result;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\nstatic void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)\n{\n  /*the current bit in bitstream must be 0 for this to work*/\n  if(bit)\n  {\n    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\n    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));\n  }\n  ++(*bitpointer);\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n\nstatic void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)\n{\n  /*the current bit in bitstream may be 0 or 1 for this to work*/\n  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));\n  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));\n  ++(*bitpointer);\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG chunks                                                             / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\nunsigned lodepng_chunk_length(const unsigned char* chunk)\n{\n  return lodepng_read32bitInt(&chunk[0]);\n}\n\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk)\n{\n  unsigned i;\n  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];\n  type[4] = 0; /*null termination char*/\n}\n\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type)\n{\n  if(strlen(type) != 4) return 0;\n  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);\n}\n\nunsigned char lodepng_chunk_ancillary(const unsigned char* chunk)\n{\n  return((chunk[4] & 32) != 0);\n}\n\nunsigned char lodepng_chunk_private(const unsigned char* chunk)\n{\n  return((chunk[6] & 32) != 0);\n}\n\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)\n{\n  return((chunk[7] & 32) != 0);\n}\n\nunsigned char* lodepng_chunk_data(unsigned char* chunk)\n{\n  return &chunk[8];\n}\n\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk)\n{\n  return &chunk[8];\n}\n\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk)\n{\n  unsigned length = lodepng_chunk_length(chunk);\n  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);\n  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/\n  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);\n  if(CRC != checksum) return 1;\n  else return 0;\n}\n\nvoid lodepng_chunk_generate_crc(unsigned char* chunk)\n{\n  unsigned length = lodepng_chunk_length(chunk);\n  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);\n  lodepng_set32bitInt(chunk + 8 + length, CRC);\n}\n\nunsigned char* lodepng_chunk_next(unsigned char* chunk)\n{\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  return &chunk[total_chunk_length];\n}\n\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk)\n{\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  return &chunk[total_chunk_length];\n}\n\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk)\n{\n  unsigned i;\n  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;\n  unsigned char *chunk_start, *new_buffer;\n  size_t new_length = (*outlength) + total_chunk_length;\n  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/\n\n  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);\n  if(!new_buffer) return 83; /*alloc fail*/\n  (*out) = new_buffer;\n  (*outlength) = new_length;\n  chunk_start = &(*out)[new_length - total_chunk_length];\n\n  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];\n\n  return 0;\n}\n\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data)\n{\n  unsigned i;\n  unsigned char *chunk, *new_buffer;\n  size_t new_length = (*outlength) + length + 12;\n  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/\n  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);\n  if(!new_buffer) return 83; /*alloc fail*/\n  (*out) = new_buffer;\n  (*outlength) = new_length;\n  chunk = &(*out)[(*outlength) - length - 12];\n\n  /*1: length*/\n  lodepng_set32bitInt(chunk, (unsigned)length);\n\n  /*2: chunk name (4 letters)*/\n  chunk[4] = (unsigned char)type[0];\n  chunk[5] = (unsigned char)type[1];\n  chunk[6] = (unsigned char)type[2];\n  chunk[7] = (unsigned char)type[3];\n\n  /*3: the data*/\n  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];\n\n  /*4: CRC (of the chunkname characters and the data)*/\n  lodepng_chunk_generate_crc(chunk);\n\n  return 0;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / Color types and such                                                   / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*return type is a LodePNG error code*/\nstatic unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/\n{\n  switch(colortype)\n  {\n    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/\n    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/\n    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/\n    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/\n    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/\n    default: return 31;\n  }\n  return 0; /*allowed color type / bits combination*/\n}\n\nstatic unsigned getNumColorChannels(LodePNGColorType colortype)\n{\n  switch(colortype)\n  {\n    case 0: return 1; /*grey*/\n    case 2: return 3; /*RGB*/\n    case 3: return 1; /*palette*/\n    case 4: return 2; /*grey + alpha*/\n    case 6: return 4; /*RGBA*/\n  }\n  return 0; /*unexisting color type*/\n}\n\nstatic unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth)\n{\n  /*bits per pixel is amount of channels * bits per channel*/\n  return getNumColorChannels(colortype) * bitdepth;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\nvoid lodepng_color_mode_init(LodePNGColorMode* info)\n{\n  info->key_defined = 0;\n  info->key_r = info->key_g = info->key_b = 0;\n  info->colortype = LCT_RGBA;\n  info->bitdepth = 8;\n  info->palette = 0;\n  info->palettesize = 0;\n}\n\nvoid lodepng_color_mode_cleanup(LodePNGColorMode* info)\n{\n  lodepng_palette_clear(info);\n}\n\nunsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source)\n{\n  size_t i;\n  lodepng_color_mode_cleanup(dest);\n  *dest = *source;\n  if(source->palette)\n  {\n    dest->palette = (unsigned char*)lodepng_malloc(1024);\n    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/\n    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];\n  }\n  return 0;\n}\n\nstatic int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b)\n{\n  size_t i;\n  if(a->colortype != b->colortype) return 0;\n  if(a->bitdepth != b->bitdepth) return 0;\n  if(a->key_defined != b->key_defined) return 0;\n  if(a->key_defined)\n  {\n    if(a->key_r != b->key_r) return 0;\n    if(a->key_g != b->key_g) return 0;\n    if(a->key_b != b->key_b) return 0;\n  }\n  /*if one of the palette sizes is 0, then we consider it to be the same as the\n  other: it means that e.g. the palette was not given by the user and should be\n  considered the same as the palette inside the PNG.*/\n  if(1/*a->palettesize != 0 && b->palettesize != 0*/) {\n    if(a->palettesize != b->palettesize) return 0;\n    for(i = 0; i != a->palettesize * 4; ++i)\n    {\n      if(a->palette[i] != b->palette[i]) return 0;\n    }\n  }\n  return 1;\n}\n\nvoid lodepng_palette_clear(LodePNGColorMode* info)\n{\n  if(info->palette) lodepng_free(info->palette);\n  info->palette = 0;\n  info->palettesize = 0;\n}\n\nunsigned lodepng_palette_add(LodePNGColorMode* info,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  unsigned char* data;\n  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with\n  the max of 256 colors, it'll have the exact alloc size*/\n  if(!info->palette) /*allocate palette if empty*/\n  {\n    /*room for 256 colors with 4 bytes each*/\n    data = (unsigned char*)lodepng_realloc(info->palette, 1024);\n    if(!data) return 83; /*alloc fail*/\n    else info->palette = data;\n  }\n  info->palette[4 * info->palettesize + 0] = r;\n  info->palette[4 * info->palettesize + 1] = g;\n  info->palette[4 * info->palettesize + 2] = b;\n  info->palette[4 * info->palettesize + 3] = a;\n  ++info->palettesize;\n  return 0;\n}\n\nunsigned lodepng_get_bpp(const LodePNGColorMode* info)\n{\n  /*calculate bits per pixel out of colortype and bitdepth*/\n  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);\n}\n\nunsigned lodepng_get_channels(const LodePNGColorMode* info)\n{\n  return getNumColorChannels(info->colortype);\n}\n\nunsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)\n{\n  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;\n}\n\nunsigned lodepng_is_alpha_type(const LodePNGColorMode* info)\n{\n  return (info->colortype & 4) != 0; /*4 or 6*/\n}\n\nunsigned lodepng_is_palette_type(const LodePNGColorMode* info)\n{\n  return info->colortype == LCT_PALETTE;\n}\n\nunsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)\n{\n  size_t i;\n  for(i = 0; i != info->palettesize; ++i)\n  {\n    if(info->palette[i * 4 + 3] < 255) return 1;\n  }\n  return 0;\n}\n\nunsigned lodepng_can_have_alpha(const LodePNGColorMode* info)\n{\n  return info->key_defined\n      || lodepng_is_alpha_type(info)\n      || lodepng_has_palette_alpha(info);\n}\n\nsize_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp(color);\n  size_t n = w * h;\n  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;\n}\n\nsize_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth);\n  size_t n = w * h;\n  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;\n}\n\n\n#ifdef LODEPNG_COMPILE_PNG\n#ifdef LODEPNG_COMPILE_DECODER\n/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/\nstatic size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color)\n{\n  /*will not overflow for any color type if roughly w * h < 268435455*/\n  size_t bpp = lodepng_get_bpp(color);\n  size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8;\n  return h * line;\n}\n#endif /*LODEPNG_COMPILE_DECODER*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n\nstatic void LodePNGUnknownChunks_init(LodePNGInfo* info)\n{\n  unsigned i;\n  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;\n  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;\n}\n\nstatic void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)\n{\n  unsigned i;\n  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);\n}\n\nstatic unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src)\n{\n  unsigned i;\n\n  LodePNGUnknownChunks_cleanup(dest);\n\n  for(i = 0; i != 3; ++i)\n  {\n    size_t j;\n    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];\n    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);\n    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/\n    for(j = 0; j < src->unknown_chunks_size[i]; ++j)\n    {\n      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];\n    }\n  }\n\n  return 0;\n}\n\n/******************************************************************************/\n\nstatic void LodePNGText_init(LodePNGInfo* info)\n{\n  info->text_num = 0;\n  info->text_keys = NULL;\n  info->text_strings = NULL;\n}\n\nstatic void LodePNGText_cleanup(LodePNGInfo* info)\n{\n  size_t i;\n  for(i = 0; i != info->text_num; ++i)\n  {\n    string_cleanup(&info->text_keys[i]);\n    string_cleanup(&info->text_strings[i]);\n  }\n  lodepng_free(info->text_keys);\n  lodepng_free(info->text_strings);\n}\n\nstatic unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  size_t i = 0;\n  dest->text_keys = 0;\n  dest->text_strings = 0;\n  dest->text_num = 0;\n  for(i = 0; i != source->text_num; ++i)\n  {\n    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));\n  }\n  return 0;\n}\n\nvoid lodepng_clear_text(LodePNGInfo* info)\n{\n  LodePNGText_cleanup(info);\n}\n\nunsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str)\n{\n  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));\n  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));\n  if(!new_keys || !new_strings)\n  {\n    lodepng_free(new_keys);\n    lodepng_free(new_strings);\n    return 83; /*alloc fail*/\n  }\n\n  ++info->text_num;\n  info->text_keys = new_keys;\n  info->text_strings = new_strings;\n\n  string_init(&info->text_keys[info->text_num - 1]);\n  string_set(&info->text_keys[info->text_num - 1], key);\n\n  string_init(&info->text_strings[info->text_num - 1]);\n  string_set(&info->text_strings[info->text_num - 1], str);\n\n  return 0;\n}\n\n/******************************************************************************/\n\nstatic void LodePNGIText_init(LodePNGInfo* info)\n{\n  info->itext_num = 0;\n  info->itext_keys = NULL;\n  info->itext_langtags = NULL;\n  info->itext_transkeys = NULL;\n  info->itext_strings = NULL;\n}\n\nstatic void LodePNGIText_cleanup(LodePNGInfo* info)\n{\n  size_t i;\n  for(i = 0; i != info->itext_num; ++i)\n  {\n    string_cleanup(&info->itext_keys[i]);\n    string_cleanup(&info->itext_langtags[i]);\n    string_cleanup(&info->itext_transkeys[i]);\n    string_cleanup(&info->itext_strings[i]);\n  }\n  lodepng_free(info->itext_keys);\n  lodepng_free(info->itext_langtags);\n  lodepng_free(info->itext_transkeys);\n  lodepng_free(info->itext_strings);\n}\n\nstatic unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  size_t i = 0;\n  dest->itext_keys = 0;\n  dest->itext_langtags = 0;\n  dest->itext_transkeys = 0;\n  dest->itext_strings = 0;\n  dest->itext_num = 0;\n  for(i = 0; i != source->itext_num; ++i)\n  {\n    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],\n                                        source->itext_transkeys[i], source->itext_strings[i]));\n  }\n  return 0;\n}\n\nvoid lodepng_clear_itext(LodePNGInfo* info)\n{\n  LodePNGIText_cleanup(info);\n}\n\nunsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,\n                           const char* transkey, const char* str)\n{\n  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));\n  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));\n  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));\n  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));\n  if(!new_keys || !new_langtags || !new_transkeys || !new_strings)\n  {\n    lodepng_free(new_keys);\n    lodepng_free(new_langtags);\n    lodepng_free(new_transkeys);\n    lodepng_free(new_strings);\n    return 83; /*alloc fail*/\n  }\n\n  ++info->itext_num;\n  info->itext_keys = new_keys;\n  info->itext_langtags = new_langtags;\n  info->itext_transkeys = new_transkeys;\n  info->itext_strings = new_strings;\n\n  string_init(&info->itext_keys[info->itext_num - 1]);\n  string_set(&info->itext_keys[info->itext_num - 1], key);\n\n  string_init(&info->itext_langtags[info->itext_num - 1]);\n  string_set(&info->itext_langtags[info->itext_num - 1], langtag);\n\n  string_init(&info->itext_transkeys[info->itext_num - 1]);\n  string_set(&info->itext_transkeys[info->itext_num - 1], transkey);\n\n  string_init(&info->itext_strings[info->itext_num - 1]);\n  string_set(&info->itext_strings[info->itext_num - 1], str);\n\n  return 0;\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nvoid lodepng_info_init(LodePNGInfo* info)\n{\n  lodepng_color_mode_init(&info->color);\n  info->interlace_method = 0;\n  info->compression_method = 0;\n  info->filter_method = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  info->background_defined = 0;\n  info->background_r = info->background_g = info->background_b = 0;\n\n  LodePNGText_init(info);\n  LodePNGIText_init(info);\n\n  info->time_defined = 0;\n  info->phys_defined = 0;\n\n  LodePNGUnknownChunks_init(info);\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\nvoid lodepng_info_cleanup(LodePNGInfo* info)\n{\n  lodepng_color_mode_cleanup(&info->color);\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  LodePNGText_cleanup(info);\n  LodePNGIText_cleanup(info);\n\n  LodePNGUnknownChunks_cleanup(info);\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\nunsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)\n{\n  lodepng_info_cleanup(dest);\n  *dest = *source;\n  lodepng_color_mode_init(&dest->color);\n  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));\n  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));\n\n  LodePNGUnknownChunks_init(dest);\n  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n  return 0;\n}\n\nvoid lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)\n{\n  LodePNGInfo temp = *a;\n  *a = *b;\n  *b = temp;\n}\n\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/\nstatic void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in)\n{\n  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/\n  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/\n  unsigned p = index & m;\n  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/\n  in = in << (bits * (m - p));\n  if(p == 0) out[index * bits / 8] = in;\n  else out[index * bits / 8] |= in;\n}\n\ntypedef struct ColorTree ColorTree;\n\n/*\nOne node of a color tree\nThis is the data structure used to count the number of unique colors and to get a palette\nindex for a color. It's like an octree, but because the alpha channel is used too, each\nnode has 16 instead of 8 children.\n*/\nstruct ColorTree\n{\n  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/\n  int index; /*the payload. Only has a meaningful value if this is in the last level*/\n};\n\nstatic void color_tree_init(ColorTree* tree)\n{\n  int i;\n  for(i = 0; i != 16; ++i) tree->children[i] = 0;\n  tree->index = -1;\n}\n\nstatic void color_tree_cleanup(ColorTree* tree)\n{\n  int i;\n  for(i = 0; i != 16; ++i)\n  {\n    if(tree->children[i])\n    {\n      color_tree_cleanup(tree->children[i]);\n      lodepng_free(tree->children[i]);\n    }\n  }\n}\n\n/*returns -1 if color not present, its index otherwise*/\nstatic int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  int bit = 0;\n  for(bit = 0; bit < 8; ++bit)\n  {\n    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);\n    if(!tree->children[i]) return -1;\n    else tree = tree->children[i];\n  }\n  return tree ? tree->index : -1;\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\nstatic int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  return color_tree_get(tree, r, g, b, a) >= 0;\n}\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*color is not allowed to already exist.\nIndex should be >= 0 (it's signed to be compatible with using -1 for \"doesn't exist\")*/\nstatic void color_tree_add(ColorTree* tree,\n                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index)\n{\n  int bit;\n  for(bit = 0; bit < 8; ++bit)\n  {\n    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);\n    if(!tree->children[i])\n    {\n      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));\n      color_tree_init(tree->children[i]);\n    }\n    tree = tree->children[i];\n  }\n  tree->index = (int)index;\n}\n\n/*put a pixel, given its RGBA color, into image of any color type*/\nstatic unsigned rgba8ToPixel(unsigned char* out, size_t i,\n                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;\n    if(mode->bitdepth == 8) out[i] = grey;\n    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey;\n    else\n    {\n      /*take the most significant bits of grey*/\n      grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);\n      addColorBits(out, i, mode->bitdepth, grey);\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      out[i * 3 + 0] = r;\n      out[i * 3 + 1] = g;\n      out[i * 3 + 2] = b;\n    }\n    else\n    {\n      out[i * 6 + 0] = out[i * 6 + 1] = r;\n      out[i * 6 + 2] = out[i * 6 + 3] = g;\n      out[i * 6 + 4] = out[i * 6 + 5] = b;\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    int index = color_tree_get(tree, r, g, b, a);\n    if(index < 0) return 82; /*color not in palette*/\n    if(mode->bitdepth == 8) out[i] = index;\n    else addColorBits(out, i, mode->bitdepth, (unsigned)index);\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;\n    if(mode->bitdepth == 8)\n    {\n      out[i * 2 + 0] = grey;\n      out[i * 2 + 1] = a;\n    }\n    else if(mode->bitdepth == 16)\n    {\n      out[i * 4 + 0] = out[i * 4 + 1] = grey;\n      out[i * 4 + 2] = out[i * 4 + 3] = a;\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      out[i * 4 + 0] = r;\n      out[i * 4 + 1] = g;\n      out[i * 4 + 2] = b;\n      out[i * 4 + 3] = a;\n    }\n    else\n    {\n      out[i * 8 + 0] = out[i * 8 + 1] = r;\n      out[i * 8 + 2] = out[i * 8 + 3] = g;\n      out[i * 8 + 4] = out[i * 8 + 5] = b;\n      out[i * 8 + 6] = out[i * 8 + 7] = a;\n    }\n  }\n\n  return 0; /*no error*/\n}\n\n/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/\nstatic void rgba16ToPixel(unsigned char* out, size_t i,\n                         const LodePNGColorMode* mode,\n                         unsigned short r, unsigned short g, unsigned short b, unsigned short a)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;\n    out[i * 2 + 0] = (grey >> 8) & 255;\n    out[i * 2 + 1] = grey & 255;\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    out[i * 6 + 0] = (r >> 8) & 255;\n    out[i * 6 + 1] = r & 255;\n    out[i * 6 + 2] = (g >> 8) & 255;\n    out[i * 6 + 3] = g & 255;\n    out[i * 6 + 4] = (b >> 8) & 255;\n    out[i * 6 + 5] = b & 255;\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;\n    out[i * 4 + 0] = (grey >> 8) & 255;\n    out[i * 4 + 1] = grey & 255;\n    out[i * 4 + 2] = (a >> 8) & 255;\n    out[i * 4 + 3] = a & 255;\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    out[i * 8 + 0] = (r >> 8) & 255;\n    out[i * 8 + 1] = r & 255;\n    out[i * 8 + 2] = (g >> 8) & 255;\n    out[i * 8 + 3] = g & 255;\n    out[i * 8 + 4] = (b >> 8) & 255;\n    out[i * 8 + 5] = b & 255;\n    out[i * 8 + 6] = (a >> 8) & 255;\n    out[i * 8 + 7] = a & 255;\n  }\n}\n\n/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/\nstatic void getPixelColorRGBA8(unsigned char* r, unsigned char* g,\n                               unsigned char* b, unsigned char* a,\n                               const unsigned char* in, size_t i,\n                               const LodePNGColorMode* mode)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = *g = *b = in[i];\n      if(mode->key_defined && *r == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n    else if(mode->bitdepth == 16)\n    {\n      *r = *g = *b = in[i * 2 + 0];\n      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n    else\n    {\n      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/\n      size_t j = i * mode->bitdepth;\n      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);\n      *r = *g = *b = (value * 255) / highest;\n      if(mode->key_defined && value == mode->key_r) *a = 0;\n      else *a = 255;\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];\n      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;\n      else *a = 255;\n    }\n    else\n    {\n      *r = in[i * 6 + 0];\n      *g = in[i * 6 + 2];\n      *b = in[i * 6 + 4];\n      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;\n      else *a = 255;\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    unsigned index;\n    if(mode->bitdepth == 8) index = in[i];\n    else\n    {\n      size_t j = i * mode->bitdepth;\n      index = readBitsFromReversedStream(&j, in, mode->bitdepth);\n    }\n\n    if(index >= mode->palettesize)\n    {\n      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.\n      Done here too, slightly faster due to no error handling needed.*/\n      *r = *g = *b = 0;\n      *a = 255;\n    }\n    else\n    {\n      *r = mode->palette[index * 4 + 0];\n      *g = mode->palette[index * 4 + 1];\n      *b = mode->palette[index * 4 + 2];\n      *a = mode->palette[index * 4 + 3];\n    }\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = *g = *b = in[i * 2 + 0];\n      *a = in[i * 2 + 1];\n    }\n    else\n    {\n      *r = *g = *b = in[i * 4 + 0];\n      *a = in[i * 4 + 2];\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      *r = in[i * 4 + 0];\n      *g = in[i * 4 + 1];\n      *b = in[i * 4 + 2];\n      *a = in[i * 4 + 3];\n    }\n    else\n    {\n      *r = in[i * 8 + 0];\n      *g = in[i * 8 + 2];\n      *b = in[i * 8 + 4];\n      *a = in[i * 8 + 6];\n    }\n  }\n}\n\n/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color\nmode test cases, optimized to convert the colors much faster, when converting\nto RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with\nenough memory, if has_alpha is true the output is RGBA. mode has the color mode\nof the input buffer.*/\nstatic void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,\n                                unsigned has_alpha, const unsigned char* in,\n                                const LodePNGColorMode* mode)\n{\n  unsigned num_channels = has_alpha ? 4 : 3;\n  size_t i;\n  if(mode->colortype == LCT_GREY)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i];\n        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;\n      }\n    }\n    else if(mode->bitdepth == 16)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 2];\n        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;\n      }\n    }\n    else\n    {\n      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/\n      size_t j = 0;\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);\n        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;\n        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;\n      }\n    }\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 3 + 0];\n        buffer[1] = in[i * 3 + 1];\n        buffer[2] = in[i * 3 + 2];\n        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r\n           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 6 + 0];\n        buffer[1] = in[i * 6 + 2];\n        buffer[2] = in[i * 6 + 4];\n        if(has_alpha) buffer[3] = mode->key_defined\n           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;\n      }\n    }\n  }\n  else if(mode->colortype == LCT_PALETTE)\n  {\n    unsigned index;\n    size_t j = 0;\n    for(i = 0; i != numpixels; ++i, buffer += num_channels)\n    {\n      if(mode->bitdepth == 8) index = in[i];\n      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);\n\n      if(index >= mode->palettesize)\n      {\n        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.\n        Done here too, slightly faster due to no error handling needed.*/\n        buffer[0] = buffer[1] = buffer[2] = 0;\n        if(has_alpha) buffer[3] = 255;\n      }\n      else\n      {\n        buffer[0] = mode->palette[index * 4 + 0];\n        buffer[1] = mode->palette[index * 4 + 1];\n        buffer[2] = mode->palette[index * 4 + 2];\n        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];\n      }\n    }\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];\n        if(has_alpha) buffer[3] = in[i * 2 + 1];\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];\n        if(has_alpha) buffer[3] = in[i * 4 + 2];\n      }\n    }\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    if(mode->bitdepth == 8)\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 4 + 0];\n        buffer[1] = in[i * 4 + 1];\n        buffer[2] = in[i * 4 + 2];\n        if(has_alpha) buffer[3] = in[i * 4 + 3];\n      }\n    }\n    else\n    {\n      for(i = 0; i != numpixels; ++i, buffer += num_channels)\n      {\n        buffer[0] = in[i * 8 + 0];\n        buffer[1] = in[i * 8 + 2];\n        buffer[2] = in[i * 8 + 4];\n        if(has_alpha) buffer[3] = in[i * 8 + 6];\n      }\n    }\n  }\n}\n\n/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with\ngiven color type, but the given color type must be 16-bit itself.*/\nstatic void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,\n                                const unsigned char* in, size_t i, const LodePNGColorMode* mode)\n{\n  if(mode->colortype == LCT_GREY)\n  {\n    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];\n    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;\n    else *a = 65535;\n  }\n  else if(mode->colortype == LCT_RGB)\n  {\n    *r = 256u * in[i * 6 + 0] + in[i * 6 + 1];\n    *g = 256u * in[i * 6 + 2] + in[i * 6 + 3];\n    *b = 256u * in[i * 6 + 4] + in[i * 6 + 5];\n    if(mode->key_defined\n       && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r\n       && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g\n       && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;\n    else *a = 65535;\n  }\n  else if(mode->colortype == LCT_GREY_ALPHA)\n  {\n    *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1];\n    *a = 256u * in[i * 4 + 2] + in[i * 4 + 3];\n  }\n  else if(mode->colortype == LCT_RGBA)\n  {\n    *r = 256u * in[i * 8 + 0] + in[i * 8 + 1];\n    *g = 256u * in[i * 8 + 2] + in[i * 8 + 3];\n    *b = 256u * in[i * 8 + 4] + in[i * 8 + 5];\n    *a = 256u * in[i * 8 + 6] + in[i * 8 + 7];\n  }\n}\n\nunsigned lodepng_convert(unsigned char* out, const unsigned char* in,\n                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,\n                         unsigned w, unsigned h)\n{\n  unsigned int i;\n  ColorTree tree;\n  size_t numpixels = w * h;\n\n  if(lodepng_color_mode_equal(mode_out, mode_in))\n  {\n    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);\n    for(i = 0; i != numbytes; ++i) out[i] = in[i];\n    return 0;\n  }\n\n  if(mode_out->colortype == LCT_PALETTE)\n  {\n    size_t palettesize = mode_out->palettesize;\n    const unsigned char* palette = mode_out->palette;\n    size_t palsize = (size_t)1 << mode_out->bitdepth;\n    /*if the user specified output palette but did not give the values, assume\n    they want the values of the input color type (assuming that one is palette).\n    Note that we never create a new palette ourselves.*/\n    if(palettesize == 0)\n    {\n      palettesize = mode_in->palettesize;\n      palette = mode_in->palette;\n    }\n    if(palettesize < palsize) palsize = palettesize;\n    color_tree_init(&tree);\n    for(i = 0; i != palsize; ++i)\n    {\n      const unsigned char* p = &palette[i * 4];\n      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);\n    }\n  }\n\n  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)\n  {\n    for(i = 0; i != numpixels; ++i)\n    {\n      unsigned short r = 0, g = 0, b = 0, a = 0;\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);\n      rgba16ToPixel(out, i, mode_out, r, g, b, a);\n    }\n  }\n  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)\n  {\n    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);\n  }\n  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)\n  {\n    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);\n  }\n  else\n  {\n    unsigned char r = 0, g = 0, b = 0, a = 0;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);\n      CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a));\n    }\n  }\n\n  if(mode_out->colortype == LCT_PALETTE)\n  {\n    color_tree_cleanup(&tree);\n  }\n\n  return 0; /*no error*/\n}\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\nvoid lodepng_color_profile_init(LodePNGColorProfile* profile)\n{\n  profile->colored = 0;\n  profile->key = 0;\n  profile->alpha = 0;\n  profile->key_r = profile->key_g = profile->key_b = 0;\n  profile->numcolors = 0;\n  profile->bits = 1;\n}\n\n/*function used for debug purposes with C++*/\n/*void printColorProfile(LodePNGColorProfile* p)\n{\n  std::cout << \"colored: \" << (int)p->colored << \", \";\n  std::cout << \"key: \" << (int)p->key << \", \";\n  std::cout << \"key_r: \" << (int)p->key_r << \", \";\n  std::cout << \"key_g: \" << (int)p->key_g << \", \";\n  std::cout << \"key_b: \" << (int)p->key_b << \", \";\n  std::cout << \"alpha: \" << (int)p->alpha << \", \";\n  std::cout << \"numcolors: \" << (int)p->numcolors << \", \";\n  std::cout << \"bits: \" << (int)p->bits << std::endl;\n}*/\n\n/*Returns how many bits needed to represent given value (max 8 bit)*/\nstatic unsigned getValueRequiredBits(unsigned char value)\n{\n  if(value == 0 || value == 255) return 1;\n  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/\n  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;\n  return 8;\n}\n\n/*profile must already have been inited with mode.\nIt's ok to set some parameters of profile to done already.*/\nunsigned lodepng_get_color_profile(LodePNGColorProfile* profile,\n                                   const unsigned char* in, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode)\n{\n  unsigned error = 0;\n  size_t i;\n  ColorTree tree;\n  size_t numpixels = w * h;\n\n  unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0;\n  unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1;\n  unsigned numcolors_done = 0;\n  unsigned bpp = lodepng_get_bpp(mode);\n  unsigned bits_done = bpp == 1 ? 1 : 0;\n  unsigned maxnumcolors = 257;\n  unsigned sixteen = 0;\n  if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256));\n\n  color_tree_init(&tree);\n\n  /*Check if the 16-bit input is truly 16-bit*/\n  if(mode->bitdepth == 16)\n  {\n    unsigned short r, g, b, a;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||\n         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/\n      {\n        sixteen = 1;\n        break;\n      }\n    }\n  }\n\n  if(sixteen)\n  {\n    unsigned short r = 0, g = 0, b = 0, a = 0;\n    profile->bits = 16;\n    bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/\n\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n\n      if(!colored_done && (r != g || r != b))\n      {\n        profile->colored = 1;\n        colored_done = 1;\n      }\n\n      if(!alpha_done)\n      {\n        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);\n        if(a != 65535 && (a != 0 || (profile->key && !matchkey)))\n        {\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n        else if(a == 0 && !profile->alpha && !profile->key)\n        {\n          profile->key = 1;\n          profile->key_r = r;\n          profile->key_g = g;\n          profile->key_b = b;\n        }\n        else if(a == 65535 && profile->key && matchkey)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n      if(alpha_done && numcolors_done && colored_done && bits_done) break;\n    }\n\n    if(profile->key && !profile->alpha)\n    {\n      for(i = 0; i != numpixels; ++i)\n      {\n        getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);\n        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n    }\n  }\n  else /* < 16-bit */\n  {\n    unsigned char r = 0, g = 0, b = 0, a = 0;\n    for(i = 0; i != numpixels; ++i)\n    {\n      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);\n\n      if(!bits_done && profile->bits < 8)\n      {\n        /*only r is checked, < 8 bits is only relevant for greyscale*/\n        unsigned bits = getValueRequiredBits(r);\n        if(bits > profile->bits) profile->bits = bits;\n      }\n      bits_done = (profile->bits >= bpp);\n\n      if(!colored_done && (r != g || r != b))\n      {\n        profile->colored = 1;\n        colored_done = 1;\n        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/\n      }\n\n      if(!alpha_done)\n      {\n        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);\n        if(a != 255 && (a != 0 || (profile->key && !matchkey)))\n        {\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n        else if(a == 0 && !profile->alpha && !profile->key)\n        {\n          profile->key = 1;\n          profile->key_r = r;\n          profile->key_g = g;\n          profile->key_b = b;\n        }\n        else if(a == 255 && profile->key && matchkey)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n        }\n      }\n\n      if(!numcolors_done)\n      {\n        if(!color_tree_has(&tree, r, g, b, a))\n        {\n          color_tree_add(&tree, r, g, b, a, profile->numcolors);\n          if(profile->numcolors < 256)\n          {\n            unsigned char* p = profile->palette;\n            unsigned n = profile->numcolors;\n            p[n * 4 + 0] = r;\n            p[n * 4 + 1] = g;\n            p[n * 4 + 2] = b;\n            p[n * 4 + 3] = a;\n          }\n          ++profile->numcolors;\n          numcolors_done = profile->numcolors >= maxnumcolors;\n        }\n      }\n\n      if(alpha_done && numcolors_done && colored_done && bits_done) break;\n    }\n\n    if(profile->key && !profile->alpha)\n    {\n      for(i = 0; i != numpixels; ++i)\n      {\n        getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);\n        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)\n        {\n          /* Color key cannot be used if an opaque pixel also has that RGB color. */\n          profile->alpha = 1;\n          alpha_done = 1;\n        }\n      }\n    }\n\n    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/\n    profile->key_r += (profile->key_r << 8);\n    profile->key_g += (profile->key_g << 8);\n    profile->key_b += (profile->key_b << 8);\n  }\n\n  color_tree_cleanup(&tree);\n  return error;\n}\n\n/*Automatically chooses color type that gives smallest amount of bits in the\noutput image, e.g. grey if there are only greyscale pixels, palette if there\nare less than 256 colors, ...\nUpdates values of mode with a potentially smaller color model. mode_out should\ncontain the user chosen color model, but will be overwritten with the new chosen one.*/\nunsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in)\n{\n  LodePNGColorProfile prof;\n  unsigned error = 0;\n  unsigned i, n, palettebits, grey_ok, palette_ok;\n\n  lodepng_color_profile_init(&prof);\n  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);\n  if(error) return error;\n  mode_out->key_defined = 0;\n\n  if(prof.key && w * h <= 16)\n  {\n    prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/\n    if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/\n  }\n  grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/\n  n = prof.numcolors;\n  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));\n  palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8;\n  if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/\n  if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/\n\n  if(palette_ok)\n  {\n    unsigned char* p = prof.palette;\n    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/\n    for(i = 0; i != prof.numcolors; ++i)\n    {\n      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);\n      if(error) break;\n    }\n\n    mode_out->colortype = LCT_PALETTE;\n    mode_out->bitdepth = palettebits;\n\n    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize\n        && mode_in->bitdepth == mode_out->bitdepth)\n    {\n      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/\n      lodepng_color_mode_cleanup(mode_out);\n      lodepng_color_mode_copy(mode_out, mode_in);\n    }\n  }\n  else /*8-bit or 16-bit per channel*/\n  {\n    mode_out->bitdepth = prof.bits;\n    mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA)\n                                     : (prof.colored ? LCT_RGB : LCT_GREY);\n\n    if(prof.key && !prof.alpha)\n    {\n      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/\n      mode_out->key_r = prof.key_r & mask;\n      mode_out->key_g = prof.key_g & mask;\n      mode_out->key_b = prof.key_b & mask;\n      mode_out->key_defined = 1;\n    }\n  }\n\n  return error;\n}\n\n#endif /* #ifdef LODEPNG_COMPILE_ENCODER */\n\n/*\nPaeth predicter, used by PNG filter type 4\nThe parameters are of type short, but should come from unsigned chars, the shorts\nare only needed to make the paeth calculation correct.\n*/\nstatic unsigned char paethPredictor(short a, short b, short c)\n{\n  short pa = abs(b - c);\n  short pb = abs(a - c);\n  short pc = abs(a + b - c - c);\n\n  if(pc < pa && pc < pb) return (unsigned char)c;\n  else if(pb < pa) return (unsigned char)b;\n  else return (unsigned char)a;\n}\n\n/*shared values used by multiple Adam7 related functions*/\n\nstatic const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/\nstatic const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/\nstatic const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/\nstatic const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/\n\n/*\nOutputs various dimensions and positions in the image related to the Adam7 reduced images.\npassw: output containing the width of the 7 passes\npassh: output containing the height of the 7 passes\nfilter_passstart: output containing the index of the start and end of each\n reduced image with filter bytes\npadded_passstart output containing the index of the start and end of each\n reduced image when without filter bytes but with padded scanlines\npassstart: output containing the index of the start and end of each reduced\n image without padding between scanlines, but still padding between the images\nw, h: width and height of non-interlaced image\nbpp: bits per pixel\n\"padded\" is only relevant if bpp is less than 8 and a scanline or image does not\n end at a full byte\n*/\nstatic void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],\n                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)\n{\n  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/\n  unsigned i;\n\n  /*calculate width and height in pixels of each pass*/\n  for(i = 0; i != 7; ++i)\n  {\n    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];\n    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];\n    if(passw[i] == 0) passh[i] = 0;\n    if(passh[i] == 0) passw[i] = 0;\n  }\n\n  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;\n  for(i = 0; i != 7; ++i)\n  {\n    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/\n    filter_passstart[i + 1] = filter_passstart[i]\n                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);\n    /*bits padded if needed to fill full byte at end of each scanline*/\n    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);\n    /*only padded at end of reduced image*/\n    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;\n  }\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG Decoder                                                            / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*read the information from the header and store it in the LodePNGInfo. return value is error*/\nunsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,\n                         const unsigned char* in, size_t insize)\n{\n  LodePNGInfo* info = &state->info_png;\n  if(insize == 0 || in == 0)\n  {\n    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/\n  }\n  if(insize < 33)\n  {\n    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/\n  }\n\n  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/\n  lodepng_info_cleanup(info);\n  lodepng_info_init(info);\n\n  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71\n     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10)\n  {\n    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/\n  }\n  if(lodepng_chunk_length(in + 8) != 13)\n  {\n    CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/\n  }\n  if(!lodepng_chunk_type_equals(in + 8, \"IHDR\"))\n  {\n    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/\n  }\n\n  /*read the values given in the header*/\n  *w = lodepng_read32bitInt(&in[16]);\n  *h = lodepng_read32bitInt(&in[20]);\n  info->color.bitdepth = in[24];\n  info->color.colortype = (LodePNGColorType)in[25];\n  info->compression_method = in[26];\n  info->filter_method = in[27];\n  info->interlace_method = in[28];\n\n  if(*w == 0 || *h == 0)\n  {\n    CERROR_RETURN_ERROR(state->error, 93);\n  }\n\n  if(!state->decoder.ignore_crc)\n  {\n    unsigned CRC = lodepng_read32bitInt(&in[29]);\n    unsigned checksum = lodepng_crc32(&in[12], 17);\n    if(CRC != checksum)\n    {\n      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/\n    }\n  }\n\n  /*error: only compression method 0 is allowed in the specification*/\n  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);\n  /*error: only filter method 0 is allowed in the specification*/\n  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);\n  /*error: only interlace methods 0 and 1 exist in the specification*/\n  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);\n\n  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);\n  return state->error;\n}\n\nstatic unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,\n                                 size_t bytewidth, unsigned char filterType, size_t length)\n{\n  /*\n  For PNG filter method 0\n  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,\n  the filter works byte per byte (bytewidth = 1)\n  precon is the previous unfiltered scanline, recon the result, scanline the current one\n  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead\n  recon and scanline MAY be the same memory address! precon must be disjoint.\n  */\n\n  size_t i;\n  switch(filterType)\n  {\n    case 0:\n      for(i = 0; i != length; ++i) recon[i] = scanline[i];\n      break;\n    case 1:\n      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];\n      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];\n      break;\n    case 2:\n      if(precon)\n      {\n        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];\n      }\n      else\n      {\n        for(i = 0; i != length; ++i) recon[i] = scanline[i];\n      }\n      break;\n    case 3:\n      if(precon)\n      {\n        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1);\n        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1);\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];\n        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1);\n      }\n      break;\n    case 4:\n      if(precon)\n      {\n        for(i = 0; i != bytewidth; ++i)\n        {\n          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/\n        }\n        for(i = bytewidth; i < length; ++i)\n        {\n          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));\n        }\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i)\n        {\n          recon[i] = scanline[i];\n        }\n        for(i = bytewidth; i < length; ++i)\n        {\n          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/\n          recon[i] = (scanline[i] + recon[i - bytewidth]);\n        }\n      }\n      break;\n    default: return 36; /*error: unexisting filter type given*/\n  }\n  return 0;\n}\n\nstatic unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  /*\n  For PNG filter method 0\n  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)\n  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline\n  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel\n  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)\n  */\n\n  unsigned y;\n  unsigned char* prevline = 0;\n\n  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/\n  size_t bytewidth = (bpp + 7) / 8;\n  size_t linebytes = (w * bpp + 7) / 8;\n\n  for(y = 0; y < h; ++y)\n  {\n    size_t outindex = linebytes * y;\n    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n    unsigned char filterType = in[inindex];\n\n    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));\n\n    prevline = &out[outindex];\n  }\n\n  return 0;\n}\n\n/*\nin: Adam7 interlaced image, with no padding bits between scanlines, but between\n reduced images so that each reduced image starts at a byte.\nout: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h\nbpp: bits per pixel\nout has the following size in bits: w * h * bpp.\nin is possibly bigger due to padding bits between reduced images.\nout must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation\n(because that's likely a little bit faster)\nNOTE: comments about padding bits are only relevant if bpp < 8\n*/\nstatic void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  unsigned passw[7], passh[7];\n  size_t filter_passstart[8], padded_passstart[8], passstart[8];\n  unsigned i;\n\n  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n  if(bpp >= 8)\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      size_t bytewidth = bpp / 8;\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;\n        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;\n        for(b = 0; b < bytewidth; ++b)\n        {\n          out[pixeloutstart + b] = in[pixelinstart + b];\n        }\n      }\n    }\n  }\n  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      unsigned ilinebits = bpp * passw[i];\n      unsigned olinebits = bpp * w;\n      size_t obp, ibp; /*bit pointers (for out and in buffer)*/\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);\n        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;\n        for(b = 0; b < bpp; ++b)\n        {\n          unsigned char bit = readBitFromReversedStream(&ibp, in);\n          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/\n          setBitOfReversedStream0(&obp, out, bit);\n        }\n      }\n    }\n  }\n}\n\nstatic void removePaddingBits(unsigned char* out, const unsigned char* in,\n                              size_t olinebits, size_t ilinebits, unsigned h)\n{\n  /*\n  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need\n  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers\n  for the Adam7 code, the color convert code and the output to the user.\n  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must\n  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits\n  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7\n  only useful if (ilinebits - olinebits) is a value in the range 1..7\n  */\n  unsigned y;\n  size_t diff = ilinebits - olinebits;\n  size_t ibp = 0, obp = 0; /*input and output bit pointers*/\n  for(y = 0; y < h; ++y)\n  {\n    size_t x;\n    for(x = 0; x < olinebits; ++x)\n    {\n      unsigned char bit = readBitFromReversedStream(&ibp, in);\n      setBitOfReversedStream(&obp, out, bit);\n    }\n    ibp += diff;\n  }\n}\n\n/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from\nthe IDAT chunks (with filter index bytes and possible padding bits)\nreturn value is error*/\nstatic unsigned postProcessScanlines(unsigned char* out, unsigned char* in,\n                                     unsigned w, unsigned h, const LodePNGInfo* info_png)\n{\n  /*\n  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.\n  Steps:\n  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)\n  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace\n  NOTE: the in buffer will be overwritten with intermediate data!\n  */\n  unsigned bpp = lodepng_get_bpp(&info_png->color);\n  if(bpp == 0) return 31; /*error: invalid colortype*/\n\n  if(info_png->interlace_method == 0)\n  {\n    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)\n    {\n      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));\n      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);\n    }\n    /*we can immediately filter into the out buffer, no other steps needed*/\n    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));\n  }\n  else /*interlace_method is 1 (Adam7)*/\n  {\n    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];\n    unsigned i;\n\n    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n    for(i = 0; i != 7; ++i)\n    {\n      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));\n      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,\n      move bytes instead of bits or move not at all*/\n      if(bpp < 8)\n      {\n        /*remove padding bits in scanlines; after this there still may be padding\n        bits between the different reduced images: each reduced image still starts nicely at a byte*/\n        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,\n                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);\n      }\n    }\n\n    Adam7_deinterlace(out, in, w, h, bpp);\n  }\n\n  return 0;\n}\n\nstatic unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)\n{\n  unsigned pos = 0, i;\n  if(color->palette) lodepng_free(color->palette);\n  color->palettesize = chunkLength / 3;\n  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);\n  if(!color->palette && color->palettesize)\n  {\n    color->palettesize = 0;\n    return 83; /*alloc fail*/\n  }\n  if(color->palettesize > 256) return 38; /*error: palette too big*/\n\n  for(i = 0; i != color->palettesize; ++i)\n  {\n    color->palette[4 * i + 0] = data[pos++]; /*R*/\n    color->palette[4 * i + 1] = data[pos++]; /*G*/\n    color->palette[4 * i + 2] = data[pos++]; /*B*/\n    color->palette[4 * i + 3] = 255; /*alpha*/\n  }\n\n  return 0; /* OK */\n}\n\nstatic unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)\n{\n  unsigned i;\n  if(color->colortype == LCT_PALETTE)\n  {\n    /*error: more alpha values given than there are palette entries*/\n    if(chunkLength > color->palettesize) return 38;\n\n    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];\n  }\n  else if(color->colortype == LCT_GREY)\n  {\n    /*error: this chunk must be 2 bytes for greyscale image*/\n    if(chunkLength != 2) return 30;\n\n    color->key_defined = 1;\n    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];\n  }\n  else if(color->colortype == LCT_RGB)\n  {\n    /*error: this chunk must be 6 bytes for RGB image*/\n    if(chunkLength != 6) return 41;\n\n    color->key_defined = 1;\n    color->key_r = 256u * data[0] + data[1];\n    color->key_g = 256u * data[2] + data[3];\n    color->key_b = 256u * data[4] + data[5];\n  }\n  else return 42; /*error: tRNS chunk not allowed for other color models*/\n\n  return 0; /* OK */\n}\n\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*background color chunk (bKGD)*/\nstatic unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(info->color.colortype == LCT_PALETTE)\n  {\n    /*error: this chunk must be 1 byte for indexed color image*/\n    if(chunkLength != 1) return 43;\n\n    info->background_defined = 1;\n    info->background_r = info->background_g = info->background_b = data[0];\n  }\n  else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)\n  {\n    /*error: this chunk must be 2 bytes for greyscale image*/\n    if(chunkLength != 2) return 44;\n\n    info->background_defined = 1;\n    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];\n  }\n  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)\n  {\n    /*error: this chunk must be 6 bytes for greyscale image*/\n    if(chunkLength != 6) return 45;\n\n    info->background_defined = 1;\n    info->background_r = 256u * data[0] + data[1];\n    info->background_g = 256u * data[2] + data[3];\n    info->background_b = 256u * data[4] + data[5];\n  }\n\n  return 0; /* OK */\n}\n\n/*text chunk (tEXt)*/\nstatic unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  char *key = 0, *str = 0;\n  unsigned i;\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    unsigned length, string2_begin;\n\n    length = 0;\n    while(length < chunkLength && data[length] != 0) ++length;\n    /*even though it's not allowed by the standard, no error is thrown if\n    there's no null termination char, if the text is empty*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    string2_begin = length + 1; /*skip keyword null terminator*/\n\n    length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin;\n    str = (char*)lodepng_malloc(length + 1);\n    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    str[length] = 0;\n    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];\n\n    error = lodepng_add_text(info, key, str);\n\n    break;\n  }\n\n  lodepng_free(key);\n  lodepng_free(str);\n\n  return error;\n}\n\n/*compressed text chunk (zTXt)*/\nstatic unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,\n                               const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  unsigned i;\n\n  unsigned length, string2_begin;\n  char *key = 0;\n  ucvector decoded;\n\n  ucvector_init(&decoded);\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;\n    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/\n\n    string2_begin = length + 2;\n    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/\n\n    length = chunkLength - string2_begin;\n    /*will fail if zlib error, e.g. if length is too small*/\n    error = zlib_decompress(&decoded.data, &decoded.size,\n                            (unsigned char*)(&data[string2_begin]),\n                            length, zlibsettings);\n    if(error) break;\n    ucvector_push_back(&decoded, 0);\n\n    error = lodepng_add_text(info, key, (char*)decoded.data);\n\n    break;\n  }\n\n  lodepng_free(key);\n  ucvector_cleanup(&decoded);\n\n  return error;\n}\n\n/*international text chunk (iTXt)*/\nstatic unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,\n                               const unsigned char* data, unsigned int chunkLength)\n{\n  unsigned error = 0;\n  unsigned i;\n\n  unsigned length, begin, compressed;\n  char *key = 0, *langtag = 0, *transkey = 0;\n  ucvector decoded;\n  ucvector_init(&decoded);\n\n  while(!error) /*not really a while loop, only used to break on error*/\n  {\n    /*Quick check if the chunk length isn't too small. Even without check\n    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/\n    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/\n\n    /*read the key*/\n    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;\n    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/\n    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/\n\n    key = (char*)lodepng_malloc(length + 1);\n    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    key[length] = 0;\n    for(i = 0; i != length; ++i) key[i] = (char)data[i];\n\n    /*read the compression method*/\n    compressed = data[length + 1];\n    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/\n\n    /*even though it's not allowed by the standard, no error is thrown if\n    there's no null termination char, if the text is empty for the next 3 texts*/\n\n    /*read the langtag*/\n    begin = length + 3;\n    length = 0;\n    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;\n\n    langtag = (char*)lodepng_malloc(length + 1);\n    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    langtag[length] = 0;\n    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];\n\n    /*read the transkey*/\n    begin += length + 1;\n    length = 0;\n    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;\n\n    transkey = (char*)lodepng_malloc(length + 1);\n    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/\n\n    transkey[length] = 0;\n    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];\n\n    /*read the actual text*/\n    begin += length + 1;\n\n    length = chunkLength < begin ? 0 : chunkLength - begin;\n\n    if(compressed)\n    {\n      /*will fail if zlib error, e.g. if length is too small*/\n      error = zlib_decompress(&decoded.data, &decoded.size,\n                              (unsigned char*)(&data[begin]),\n                              length, zlibsettings);\n      if(error) break;\n      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;\n      ucvector_push_back(&decoded, 0);\n    }\n    else\n    {\n      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);\n\n      decoded.data[length] = 0;\n      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];\n    }\n\n    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);\n\n    break;\n  }\n\n  lodepng_free(key);\n  lodepng_free(langtag);\n  lodepng_free(transkey);\n  ucvector_cleanup(&decoded);\n\n  return error;\n}\n\nstatic unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/\n\n  info->time_defined = 1;\n  info->time.year = 256u * data[0] + data[1];\n  info->time.month = data[2];\n  info->time.day = data[3];\n  info->time.hour = data[4];\n  info->time.minute = data[5];\n  info->time.second = data[6];\n\n  return 0; /* OK */\n}\n\nstatic unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)\n{\n  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/\n\n  info->phys_defined = 1;\n  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];\n  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];\n  info->phys_unit = data[8];\n\n  return 0; /* OK */\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*read a PNG, the result will be in the same color type as the PNG (hence \"generic\")*/\nstatic void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,\n                          LodePNGState* state,\n                          const unsigned char* in, size_t insize)\n{\n  unsigned char IEND = 0;\n  const unsigned char* chunk;\n  size_t i;\n  ucvector idat; /*the data from idat chunks*/\n  ucvector scanlines;\n  size_t predict;\n  size_t numpixels;\n  size_t outsize;\n\n  /*for unknown chunk order*/\n  unsigned unknown = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n  /*provide some proper output values if error will happen*/\n  *out = 0;\n\n  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/\n  if(state->error) return;\n\n  numpixels = *w * *h;\n\n  /*multiplication overflow*/\n  if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92);\n  /*multiplication overflow possible further below. Allows up to 2^31-1 pixel\n  bytes with 16-bit RGBA, the rest is room for filter bytes.*/\n  if(numpixels > 268435455) CERROR_RETURN(state->error, 92);\n\n  ucvector_init(&idat);\n  chunk = &in[33]; /*first byte of the first chunk after the header*/\n\n  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.\n  IDAT data is put at the start of the in buffer*/\n  while(!IEND && !state->error)\n  {\n    unsigned chunkLength;\n    const unsigned char* data; /*the data in the chunk*/\n\n    /*error: size of the in buffer too small to contain next chunk*/\n    if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30);\n\n    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/\n    chunkLength = lodepng_chunk_length(chunk);\n    /*error: chunk length larger than the max PNG chunk size*/\n    if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63);\n\n    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in)\n    {\n      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/\n    }\n\n    data = lodepng_chunk_data_const(chunk);\n\n    /*IDAT chunk, containing compressed image data*/\n    if(lodepng_chunk_type_equals(chunk, \"IDAT\"))\n    {\n      size_t oldsize = idat.size;\n      if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/);\n      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      critical_pos = 3;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n    /*IEND chunk*/\n    else if(lodepng_chunk_type_equals(chunk, \"IEND\"))\n    {\n      IEND = 1;\n    }\n    /*palette chunk (PLTE)*/\n    else if(lodepng_chunk_type_equals(chunk, \"PLTE\"))\n    {\n      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);\n      if(state->error) break;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      critical_pos = 2;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n    /*palette transparency chunk (tRNS)*/\n    else if(lodepng_chunk_type_equals(chunk, \"tRNS\"))\n    {\n      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);\n      if(state->error) break;\n    }\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*background color chunk (bKGD)*/\n    else if(lodepng_chunk_type_equals(chunk, \"bKGD\"))\n    {\n      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n    /*text chunk (tEXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"tEXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    /*compressed text chunk (zTXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"zTXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    /*international text chunk (iTXt)*/\n    else if(lodepng_chunk_type_equals(chunk, \"iTXt\"))\n    {\n      if(state->decoder.read_text_chunks)\n      {\n        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);\n        if(state->error) break;\n      }\n    }\n    else if(lodepng_chunk_type_equals(chunk, \"tIME\"))\n    {\n      state->error = readChunk_tIME(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n    else if(lodepng_chunk_type_equals(chunk, \"pHYs\"))\n    {\n      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    else /*it's not an implemented chunk type, so ignore it: skip over the data*/\n    {\n      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/\n      if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69);\n\n      unknown = 1;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n      if(state->decoder.remember_unknown_chunks)\n      {\n        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],\n                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);\n        if(state->error) break;\n      }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    }\n\n    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/\n    {\n      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/\n    }\n\n    if(!IEND) chunk = lodepng_chunk_next_const(chunk);\n  }\n\n  ucvector_init(&scanlines);\n  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.\n  If the decompressed size does not match the prediction, the image must be corrupt.*/\n  if(state->info_png.interlace_method == 0)\n  {\n    /*The extra *h is added because this are the filter bytes every scanline starts with*/\n    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h;\n  }\n  else\n  {\n    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/\n    const LodePNGColorMode* color = &state->info_png.color;\n    predict = 0;\n    predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);\n    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);\n    predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3);\n    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2);\n    predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2);\n    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1);\n    predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1);\n  }\n  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/\n  if(!state->error)\n  {\n    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,\n                                   idat.size, &state->decoder.zlibsettings);\n    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/\n  }\n  ucvector_cleanup(&idat);\n\n  if(!state->error)\n  {\n    outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);\n    *out = (unsigned char*)lodepng_malloc(outsize);\n    if(!*out) state->error = 83; /*alloc fail*/\n  }\n  if(!state->error)\n  {\n    for(i = 0; i < outsize; i++) (*out)[i] = 0;\n    state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png);\n  }\n  ucvector_cleanup(&scanlines);\n}\n\nunsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,\n                        LodePNGState* state,\n                        const unsigned char* in, size_t insize)\n{\n  *out = 0;\n  decodeGeneric(out, w, h, state, in, insize);\n  if(state->error) return state->error;\n  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color))\n  {\n    /*same color type, no copying or converting of data needed*/\n    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype\n    the raw image has to the end user*/\n    if(!state->decoder.color_convert)\n    {\n      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);\n      if(state->error) return state->error;\n    }\n  }\n  else\n  {\n    /*color conversion needed; sort of copy of the data*/\n    unsigned char* data = *out;\n    size_t outsize;\n\n    /*TODO: check if this works according to the statement in the documentation: \"The converter can convert\n    from greyscale input color type, to 8-bit greyscale or greyscale with alpha\"*/\n    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)\n       && !(state->info_raw.bitdepth == 8))\n    {\n      return 56; /*unsupported color mode conversion*/\n    }\n\n    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);\n    *out = (unsigned char*)lodepng_malloc(outsize);\n    if(!(*out))\n    {\n      state->error = 83; /*alloc fail*/\n    }\n    else state->error = lodepng_convert(*out, data, &state->info_raw,\n                                        &state->info_png.color, *w, *h);\n    lodepng_free(data);\n  }\n  return state->error;\n}\n\nunsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,\n                               size_t insize, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned error;\n  LodePNGState state;\n  lodepng_state_init(&state);\n  state.info_raw.colortype = colortype;\n  state.info_raw.bitdepth = bitdepth;\n  error = lodepng_decode(out, w, h, &state, in, insize);\n  lodepng_state_cleanup(&state);\n  return error;\n}\n\nunsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)\n{\n  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);\n}\n\nunsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)\n{\n  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,\n                             LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize;\n  unsigned error;\n  error = lodepng_load_file(&buffer, &buffersize, filename);\n  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)\n{\n  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);\n}\n\nunsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)\n{\n  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);\n}\n#endif /*LODEPNG_COMPILE_DISK*/\n\nvoid lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)\n{\n  settings->color_convert = 1;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  settings->read_text_chunks = 1;\n  settings->remember_unknown_chunks = 0;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n  settings->ignore_crc = 0;\n  lodepng_decompress_settings_init(&settings->zlibsettings);\n}\n\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)\n\nvoid lodepng_state_init(LodePNGState* state)\n{\n#ifdef LODEPNG_COMPILE_DECODER\n  lodepng_decoder_settings_init(&state->decoder);\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\n  lodepng_encoder_settings_init(&state->encoder);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n  lodepng_color_mode_init(&state->info_raw);\n  lodepng_info_init(&state->info_png);\n  state->error = 1;\n}\n\nvoid lodepng_state_cleanup(LodePNGState* state)\n{\n  lodepng_color_mode_cleanup(&state->info_raw);\n  lodepng_info_cleanup(&state->info_png);\n}\n\nvoid lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)\n{\n  lodepng_state_cleanup(dest);\n  *dest = *source;\n  lodepng_color_mode_init(&dest->info_raw);\n  lodepng_info_init(&dest->info_png);\n  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;\n  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;\n}\n\n#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* / PNG Encoder                                                            / */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n/*chunkName must be string of 4 characters*/\nstatic unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)\n{\n  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));\n  out->allocsize = out->size; /*fix the allocsize again*/\n  return 0;\n}\n\nstatic void writeSignature(ucvector* out)\n{\n  /*8 bytes PNG signature, aka the magic bytes*/\n  ucvector_push_back(out, 137);\n  ucvector_push_back(out, 80);\n  ucvector_push_back(out, 78);\n  ucvector_push_back(out, 71);\n  ucvector_push_back(out, 13);\n  ucvector_push_back(out, 10);\n  ucvector_push_back(out, 26);\n  ucvector_push_back(out, 10);\n}\n\nstatic unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,\n                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method)\n{\n  unsigned error = 0;\n  ucvector header;\n  ucvector_init(&header);\n\n  lodepng_add32bitInt(&header, w); /*width*/\n  lodepng_add32bitInt(&header, h); /*height*/\n  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/\n  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/\n  ucvector_push_back(&header, 0); /*compression method*/\n  ucvector_push_back(&header, 0); /*filter method*/\n  ucvector_push_back(&header, interlace_method); /*interlace method*/\n\n  error = addChunk(out, \"IHDR\", header.data, header.size);\n  ucvector_cleanup(&header);\n\n  return error;\n}\n\nstatic unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector PLTE;\n  ucvector_init(&PLTE);\n  for(i = 0; i != info->palettesize * 4; ++i)\n  {\n    /*add all channels except alpha channel*/\n    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);\n  }\n  error = addChunk(out, \"PLTE\", PLTE.data, PLTE.size);\n  ucvector_cleanup(&PLTE);\n\n  return error;\n}\n\nstatic unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector tRNS;\n  ucvector_init(&tRNS);\n  if(info->colortype == LCT_PALETTE)\n  {\n    size_t amount = info->palettesize;\n    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/\n    for(i = info->palettesize; i != 0; --i)\n    {\n      if(info->palette[4 * (i - 1) + 3] == 255) --amount;\n      else break;\n    }\n    /*add only alpha channel*/\n    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);\n  }\n  else if(info->colortype == LCT_GREY)\n  {\n    if(info->key_defined)\n    {\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));\n    }\n  }\n  else if(info->colortype == LCT_RGB)\n  {\n    if(info->key_defined)\n    {\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8));\n      ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255));\n    }\n  }\n\n  error = addChunk(out, \"tRNS\", tRNS.data, tRNS.size);\n  ucvector_cleanup(&tRNS);\n\n  return error;\n}\n\nstatic unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,\n                              LodePNGCompressSettings* zlibsettings)\n{\n  ucvector zlibdata;\n  unsigned error = 0;\n\n  /*compress with the Zlib compressor*/\n  ucvector_init(&zlibdata);\n  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);\n  if(!error) error = addChunk(out, \"IDAT\", zlibdata.data, zlibdata.size);\n  ucvector_cleanup(&zlibdata);\n\n  return error;\n}\n\nstatic unsigned addChunk_IEND(ucvector* out)\n{\n  unsigned error = 0;\n  error = addChunk(out, \"IEND\", 0, 0);\n  return error;\n}\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n\nstatic unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring)\n{\n  unsigned error = 0;\n  size_t i;\n  ucvector text;\n  ucvector_init(&text);\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&text, 0); /*0 termination char*/\n  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);\n  error = addChunk(out, \"tEXt\", text.data, text.size);\n  ucvector_cleanup(&text);\n\n  return error;\n}\n\nstatic unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,\n                              LodePNGCompressSettings* zlibsettings)\n{\n  unsigned error = 0;\n  ucvector data, compressed;\n  size_t i, textsize = strlen(textstring);\n\n  ucvector_init(&data);\n  ucvector_init(&compressed);\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&data, 0); /*0 termination char*/\n  ucvector_push_back(&data, 0); /*compression method: 0*/\n\n  error = zlib_compress(&compressed.data, &compressed.size,\n                        (unsigned char*)textstring, textsize, zlibsettings);\n  if(!error)\n  {\n    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);\n    error = addChunk(out, \"zTXt\", data.data, data.size);\n  }\n\n  ucvector_cleanup(&compressed);\n  ucvector_cleanup(&data);\n  return error;\n}\n\nstatic unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,\n                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings)\n{\n  unsigned error = 0;\n  ucvector data;\n  size_t i, textsize = strlen(textstring);\n\n  ucvector_init(&data);\n\n  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);\n  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/\n  ucvector_push_back(&data, 0); /*null termination char*/\n  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/\n  ucvector_push_back(&data, 0); /*compression method*/\n  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);\n  ucvector_push_back(&data, 0); /*null termination char*/\n  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);\n  ucvector_push_back(&data, 0); /*null termination char*/\n\n  if(compressed)\n  {\n    ucvector compressed_data;\n    ucvector_init(&compressed_data);\n    error = zlib_compress(&compressed_data.data, &compressed_data.size,\n                          (unsigned char*)textstring, textsize, zlibsettings);\n    if(!error)\n    {\n      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);\n    }\n    ucvector_cleanup(&compressed_data);\n  }\n  else /*not compressed*/\n  {\n    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);\n  }\n\n  if(!error) error = addChunk(out, \"iTXt\", data.data, data.size);\n  ucvector_cleanup(&data);\n  return error;\n}\n\nstatic unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)\n{\n  unsigned error = 0;\n  ucvector bKGD;\n  ucvector_init(&bKGD);\n  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));\n  }\n  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8));\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255));\n  }\n  else if(info->color.colortype == LCT_PALETTE)\n  {\n    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/\n  }\n\n  error = addChunk(out, \"bKGD\", bKGD.data, bKGD.size);\n  ucvector_cleanup(&bKGD);\n\n  return error;\n}\n\nstatic unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)\n{\n  unsigned error = 0;\n  unsigned char* data = (unsigned char*)lodepng_malloc(7);\n  if(!data) return 83; /*alloc fail*/\n  data[0] = (unsigned char)(time->year >> 8);\n  data[1] = (unsigned char)(time->year & 255);\n  data[2] = (unsigned char)time->month;\n  data[3] = (unsigned char)time->day;\n  data[4] = (unsigned char)time->hour;\n  data[5] = (unsigned char)time->minute;\n  data[6] = (unsigned char)time->second;\n  error = addChunk(out, \"tIME\", data, 7);\n  lodepng_free(data);\n  return error;\n}\n\nstatic unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)\n{\n  unsigned error = 0;\n  ucvector data;\n  ucvector_init(&data);\n\n  lodepng_add32bitInt(&data, info->phys_x);\n  lodepng_add32bitInt(&data, info->phys_y);\n  ucvector_push_back(&data, info->phys_unit);\n\n  error = addChunk(out, \"pHYs\", data.data, data.size);\n  ucvector_cleanup(&data);\n\n  return error;\n}\n\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nstatic void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,\n                           size_t length, size_t bytewidth, unsigned char filterType)\n{\n  size_t i;\n  switch(filterType)\n  {\n    case 0: /*None*/\n      for(i = 0; i != length; ++i) out[i] = scanline[i];\n      break;\n    case 1: /*Sub*/\n      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];\n      break;\n    case 2: /*Up*/\n      if(prevline)\n      {\n        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];\n      }\n      else\n      {\n        for(i = 0; i != length; ++i) out[i] = scanline[i];\n      }\n      break;\n    case 3: /*Average*/\n      if(prevline)\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1);\n        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1);\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1);\n      }\n      break;\n    case 4: /*Paeth*/\n      if(prevline)\n      {\n        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/\n        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);\n        for(i = bytewidth; i < length; ++i)\n        {\n          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));\n        }\n      }\n      else\n      {\n        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];\n        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/\n        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);\n      }\n      break;\n    default: return; /*unexisting filter type given*/\n  }\n}\n\n/* log2 approximation. A slight bit faster than std::log. */\nstatic float flog2(float f)\n{\n  float result = 0;\n  while(f > 32) { result += 4; f /= 16; }\n  while(f > 2) { ++result; f /= 2; }\n  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);\n}\n\nstatic unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,\n                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings)\n{\n  /*\n  For PNG filter method 0\n  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are\n  the scanlines with 1 extra byte per scanline\n  */\n\n  unsigned bpp = lodepng_get_bpp(info);\n  /*the width of a scanline in bytes, not including the filter type*/\n  size_t linebytes = (w * bpp + 7) / 8;\n  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/\n  size_t bytewidth = (bpp + 7) / 8;\n  const unsigned char* prevline = 0;\n  unsigned x, y;\n  unsigned error = 0;\n  LodePNGFilterStrategy strategy = settings->filter_strategy;\n\n  /*\n  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:\n   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.\n      use fixed filtering, with the filter None).\n   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is\n     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply\n     all five filters and select the filter that produces the smallest sum of absolute values per row.\n  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.\n\n  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,\n  but for \"the other case\", whatever strategy filter_strategy is set to instead of the minimum sum\n  heuristic is used.\n  */\n  if(settings->filter_palette_zero &&\n     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;\n\n  if(bpp == 0) return 31; /*error: invalid color type*/\n\n  if(strategy == LFS_ZERO)\n  {\n    for(y = 0; y != h; ++y)\n    {\n      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n      size_t inindex = linebytes * y;\n      out[outindex] = 0; /*filter type byte*/\n      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);\n      prevline = &in[inindex];\n    }\n  }\n  else if(strategy == LFS_MINSUM)\n  {\n    /*adaptive filtering*/\n    size_t sum[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    size_t smallest = 0;\n    unsigned char type, bestType = 0;\n\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n\n    if(!error)\n    {\n      for(y = 0; y != h; ++y)\n      {\n        /*try the 5 filter types*/\n        for(type = 0; type != 5; ++type)\n        {\n          filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n\n          /*calculate the sum of the result*/\n          sum[type] = 0;\n          if(type == 0)\n          {\n            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]);\n          }\n          else\n          {\n            for(x = 0; x != linebytes; ++x)\n            {\n              /*For differences, each byte should be treated as signed, values above 127 are negative\n              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.\n              This means filtertype 0 is almost never chosen, but that is justified.*/\n              unsigned char s = attempt[type][x];\n              sum[type] += s < 128 ? s : (255U - s);\n            }\n          }\n\n          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/\n          if(type == 0 || sum[type] < smallest)\n          {\n            bestType = type;\n            smallest = sum[type];\n          }\n        }\n\n        prevline = &in[y * linebytes];\n\n        /*now fill the out values*/\n        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n      }\n    }\n\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else if(strategy == LFS_ENTROPY)\n  {\n    float sum[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    float smallest = 0;\n    unsigned type, bestType = 0;\n    unsigned count[256];\n\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n\n    for(y = 0; y != h; ++y)\n    {\n      /*try the 5 filter types*/\n      for(type = 0; type != 5; ++type)\n      {\n        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n        for(x = 0; x != 256; ++x) count[x] = 0;\n        for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]];\n        ++count[type]; /*the filter type itself is part of the scanline*/\n        sum[type] = 0;\n        for(x = 0; x != 256; ++x)\n        {\n          float p = count[x] / (float)(linebytes + 1);\n          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;\n        }\n        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/\n        if(type == 0 || sum[type] < smallest)\n        {\n          bestType = type;\n          smallest = sum[type];\n        }\n      }\n\n      prevline = &in[y * linebytes];\n\n      /*now fill the out values*/\n      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n    }\n\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else if(strategy == LFS_PREDEFINED)\n  {\n    for(y = 0; y != h; ++y)\n    {\n      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/\n      size_t inindex = linebytes * y;\n      unsigned char type = settings->predefined_filters[y];\n      out[outindex] = type; /*filter type byte*/\n      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);\n      prevline = &in[inindex];\n    }\n  }\n  else if(strategy == LFS_BRUTE_FORCE)\n  {\n    /*brute force filter chooser.\n    deflate the scanline after every filter attempt to see which one deflates best.\n    This is very slow and gives only slightly smaller, sometimes even larger, result*/\n    size_t size[5];\n    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/\n    size_t smallest = 0;\n    unsigned type = 0, bestType = 0;\n    unsigned char* dummy;\n    LodePNGCompressSettings zlibsettings = settings->zlibsettings;\n    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,\n    to simulate the true case where the tree is the same for the whole image. Sometimes it gives\n    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare\n    cases better compression. It does make this a bit less slow, so it's worth doing this.*/\n    zlibsettings.btype = 1;\n    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG\n    images only, so disable it*/\n    zlibsettings.custom_zlib = 0;\n    zlibsettings.custom_deflate = 0;\n    for(type = 0; type != 5; ++type)\n    {\n      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);\n      if(!attempt[type]) return 83; /*alloc fail*/\n    }\n    for(y = 0; y != h; ++y) /*try the 5 filter types*/\n    {\n      for(type = 0; type != 5; ++type)\n      {\n        size_t testsize = linebytes;\n        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/\n\n        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);\n        size[type] = 0;\n        dummy = 0;\n        zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings);\n        lodepng_free(dummy);\n        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/\n        if(type == 0 || size[type] < smallest)\n        {\n          bestType = type;\n          smallest = size[type];\n        }\n      }\n      prevline = &in[y * linebytes];\n      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/\n      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];\n    }\n    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);\n  }\n  else return 88; /* unknown filter strategy */\n\n  return error;\n}\n\nstatic void addPaddingBits(unsigned char* out, const unsigned char* in,\n                           size_t olinebits, size_t ilinebits, unsigned h)\n{\n  /*The opposite of the removePaddingBits function\n  olinebits must be >= ilinebits*/\n  unsigned y;\n  size_t diff = olinebits - ilinebits;\n  size_t obp = 0, ibp = 0; /*bit pointers*/\n  for(y = 0; y != h; ++y)\n  {\n    size_t x;\n    for(x = 0; x < ilinebits; ++x)\n    {\n      unsigned char bit = readBitFromReversedStream(&ibp, in);\n      setBitOfReversedStream(&obp, out, bit);\n    }\n    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid\n    \"Use of uninitialised value of size ###\" warning from valgrind*/\n    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);\n  }\n}\n\n/*\nin: non-interlaced image with size w*h\nout: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with\n no padding bits between scanlines, but between reduced images so that each\n reduced image starts at a byte.\nbpp: bits per pixel\nthere are no padding bits, not between scanlines, not between reduced images\nin has the following size in bits: w * h * bpp.\nout is possibly bigger due to padding bits between reduced images\nNOTE: comments about padding bits are only relevant if bpp < 8\n*/\nstatic void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)\n{\n  unsigned passw[7], passh[7];\n  size_t filter_passstart[8], padded_passstart[8], passstart[8];\n  unsigned i;\n\n  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n  if(bpp >= 8)\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      size_t bytewidth = bpp / 8;\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;\n        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;\n        for(b = 0; b < bytewidth; ++b)\n        {\n          out[pixeloutstart + b] = in[pixelinstart + b];\n        }\n      }\n    }\n  }\n  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/\n  {\n    for(i = 0; i != 7; ++i)\n    {\n      unsigned x, y, b;\n      unsigned ilinebits = bpp * passw[i];\n      unsigned olinebits = bpp * w;\n      size_t obp, ibp; /*bit pointers (for out and in buffer)*/\n      for(y = 0; y < passh[i]; ++y)\n      for(x = 0; x < passw[i]; ++x)\n      {\n        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;\n        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);\n        for(b = 0; b < bpp; ++b)\n        {\n          unsigned char bit = readBitFromReversedStream(&ibp, in);\n          setBitOfReversedStream(&obp, out, bit);\n        }\n      }\n    }\n  }\n}\n\n/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.\nreturn value is error**/\nstatic unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,\n                                    unsigned w, unsigned h,\n                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings)\n{\n  /*\n  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:\n  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter\n  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter\n  */\n  unsigned bpp = lodepng_get_bpp(&info_png->color);\n  unsigned error = 0;\n\n  if(info_png->interlace_method == 0)\n  {\n    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/\n    *out = (unsigned char*)lodepng_malloc(*outsize);\n    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/\n      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)\n      {\n        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));\n        if(!padded) error = 83; /*alloc fail*/\n        if(!error)\n        {\n          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);\n          error = filter(*out, padded, w, h, &info_png->color, settings);\n        }\n        lodepng_free(padded);\n      }\n      else\n      {\n        /*we can immediately filter into the out buffer, no other steps needed*/\n        error = filter(*out, in, w, h, &info_png->color, settings);\n      }\n    }\n  }\n  else /*interlace_method is 1 (Adam7)*/\n  {\n    unsigned passw[7], passh[7];\n    size_t filter_passstart[8], padded_passstart[8], passstart[8];\n    unsigned char* adam7;\n\n    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);\n\n    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/\n    *out = (unsigned char*)lodepng_malloc(*outsize);\n    if(!(*out)) error = 83; /*alloc fail*/\n\n    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);\n    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/\n\n    if(!error)\n    {\n      unsigned i;\n\n      Adam7_interlace(adam7, in, w, h, bpp);\n      for(i = 0; i != 7; ++i)\n      {\n        if(bpp < 8)\n        {\n          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);\n          if(!padded) ERROR_BREAK(83); /*alloc fail*/\n          addPaddingBits(padded, &adam7[passstart[i]],\n                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);\n          error = filter(&(*out)[filter_passstart[i]], padded,\n                         passw[i], passh[i], &info_png->color, settings);\n          lodepng_free(padded);\n        }\n        else\n        {\n          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],\n                         passw[i], passh[i], &info_png->color, settings);\n        }\n\n        if(error) break;\n      }\n    }\n\n    lodepng_free(adam7);\n  }\n\n  return error;\n}\n\n/*\npalette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...\nreturns 0 if the palette is opaque,\nreturns 1 if the palette has a single color with alpha 0 ==> color key\nreturns 2 if the palette is semi-translucent.\n*/\nstatic unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize)\n{\n  size_t i;\n  unsigned key = 0;\n  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/\n  for(i = 0; i != palettesize; ++i)\n  {\n    if(!key && palette[4 * i + 3] == 0)\n    {\n      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];\n      key = 1;\n      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/\n    }\n    else if(palette[4 * i + 3] != 255) return 2;\n    /*when key, no opaque RGB may have key's RGB*/\n    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;\n  }\n  return key;\n}\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\nstatic unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)\n{\n  unsigned char* inchunk = data;\n  while((size_t)(inchunk - data) < datasize)\n  {\n    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));\n    out->allocsize = out->size; /*fix the allocsize again*/\n    inchunk = lodepng_chunk_next(inchunk);\n  }\n  return 0;\n}\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\nunsigned lodepng_encode(unsigned char** out, size_t* outsize,\n                        const unsigned char* image, unsigned w, unsigned h,\n                        LodePNGState* state)\n{\n  LodePNGInfo info;\n  ucvector outv;\n  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/\n  size_t datasize = 0;\n\n  /*provide some proper output values if error will happen*/\n  *out = 0;\n  *outsize = 0;\n  state->error = 0;\n\n  lodepng_info_init(&info);\n  lodepng_info_copy(&info, &state->info_png);\n\n  if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette)\n      && (info.color.palettesize == 0 || info.color.palettesize > 256))\n  {\n    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/\n    return state->error;\n  }\n\n  if(state->encoder.auto_convert)\n  {\n    state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);\n  }\n  if(state->error) return state->error;\n\n  if(state->encoder.zlibsettings.btype > 2)\n  {\n    CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/\n  }\n  if(state->info_png.interlace_method > 1)\n  {\n    CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/\n  }\n\n  state->error = checkColorValidity(info.color.colortype, info.color.bitdepth);\n  if(state->error) return state->error; /*error: unexisting color type given*/\n  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);\n  if(state->error) return state->error; /*error: unexisting color type given*/\n\n  if(!lodepng_color_mode_equal(&state->info_raw, &info.color))\n  {\n    unsigned char* converted;\n    size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8;\n\n    converted = (unsigned char*)lodepng_malloc(size);\n    if(!converted && size) state->error = 83; /*alloc fail*/\n    if(!state->error)\n    {\n      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);\n    }\n    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);\n    lodepng_free(converted);\n  }\n  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);\n\n  ucvector_init(&outv);\n  while(!state->error) /*while only executed once, to break on error*/\n  {\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    size_t i;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*write signature and chunks*/\n    writeSignature(&outv);\n    /*IHDR*/\n    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*unknown chunks between IHDR and PLTE*/\n    if(info.unknown_chunks_data[0])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*PLTE*/\n    if(info.color.colortype == LCT_PALETTE)\n    {\n      addChunk_PLTE(&outv, &info.color);\n    }\n    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA))\n    {\n      addChunk_PLTE(&outv, &info.color);\n    }\n    /*tRNS*/\n    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0)\n    {\n      addChunk_tRNS(&outv, &info.color);\n    }\n    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined)\n    {\n      addChunk_tRNS(&outv, &info.color);\n    }\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*bKGD (must come between PLTE and the IDAt chunks*/\n    if(info.background_defined) addChunk_bKGD(&outv, &info);\n    /*pHYs (must come before the IDAT chunks)*/\n    if(info.phys_defined) addChunk_pHYs(&outv, &info);\n\n    /*unknown chunks between PLTE and IDAT*/\n    if(info.unknown_chunks_data[1])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    /*IDAT (multiple IDAT chunks must be consecutive)*/\n    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);\n    if(state->error) break;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n    /*tIME*/\n    if(info.time_defined) addChunk_tIME(&outv, &info.time);\n    /*tEXt and/or zTXt*/\n    for(i = 0; i != info.text_num; ++i)\n    {\n      if(strlen(info.text_keys[i]) > 79)\n      {\n        state->error = 66; /*text chunk too large*/\n        break;\n      }\n      if(strlen(info.text_keys[i]) < 1)\n      {\n        state->error = 67; /*text chunk too small*/\n        break;\n      }\n      if(state->encoder.text_compression)\n      {\n        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);\n      }\n      else\n      {\n        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);\n      }\n    }\n    /*LodePNG version id in text chunk*/\n    if(state->encoder.add_id)\n    {\n      unsigned alread_added_id_text = 0;\n      for(i = 0; i != info.text_num; ++i)\n      {\n        if(!strcmp(info.text_keys[i], \"LodePNG\"))\n        {\n          alread_added_id_text = 1;\n          break;\n        }\n      }\n      if(alread_added_id_text == 0)\n      {\n        addChunk_tEXt(&outv, \"LodePNG\", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/\n      }\n    }\n    /*iTXt*/\n    for(i = 0; i != info.itext_num; ++i)\n    {\n      if(strlen(info.itext_keys[i]) > 79)\n      {\n        state->error = 66; /*text chunk too large*/\n        break;\n      }\n      if(strlen(info.itext_keys[i]) < 1)\n      {\n        state->error = 67; /*text chunk too small*/\n        break;\n      }\n      addChunk_iTXt(&outv, state->encoder.text_compression,\n                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],\n                    &state->encoder.zlibsettings);\n    }\n\n    /*unknown chunks between IDAT and IEND*/\n    if(info.unknown_chunks_data[2])\n    {\n      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);\n      if(state->error) break;\n    }\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n    addChunk_IEND(&outv);\n\n    break; /*this isn't really a while loop; no error happened so break out now!*/\n  }\n\n  lodepng_info_cleanup(&info);\n  lodepng_free(data);\n  /*instead of cleaning the vector up, give it to the output*/\n  *out = outv.data;\n  *outsize = outv.size;\n\n  return state->error;\n}\n\nunsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,\n                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned error;\n  LodePNGState state;\n  lodepng_state_init(&state);\n  state.info_raw.colortype = colortype;\n  state.info_raw.bitdepth = bitdepth;\n  state.info_png.color.colortype = colortype;\n  state.info_png.color.bitdepth = bitdepth;\n  lodepng_encode(out, outsize, image, w, h, &state);\n  error = state.error;\n  lodepng_state_cleanup(&state);\n  return error;\n}\n\nunsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);\n}\n\nunsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,\n                             LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);\n  if(!error) error = lodepng_save_file(buffer, buffersize, filename);\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);\n}\n\nunsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)\n{\n  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);\n}\n#endif /*LODEPNG_COMPILE_DISK*/\n\nvoid lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)\n{\n  lodepng_compress_settings_init(&settings->zlibsettings);\n  settings->filter_palette_zero = 1;\n  settings->filter_strategy = LFS_MINSUM;\n  settings->auto_convert = 1;\n  settings->force_palette = 0;\n  settings->predefined_filters = 0;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  settings->add_id = 0;\n  settings->text_compression = 1;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n}\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ERROR_TEXT\n/*\nThis returns the description of a numerical error code in English. This is also\nthe documentation of all the error codes.\n*/\nconst char* lodepng_error_text(unsigned code)\n{\n  switch(code)\n  {\n    case 0: return \"no error, everything went ok\";\n    case 1: return \"nothing done yet\"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/\n    case 10: return \"end of input memory reached without huffman end code\"; /*while huffman decoding*/\n    case 11: return \"error in code tree made it jump outside of huffman tree\"; /*while huffman decoding*/\n    case 13: return \"problem while processing dynamic deflate block\";\n    case 14: return \"problem while processing dynamic deflate block\";\n    case 15: return \"problem while processing dynamic deflate block\";\n    case 16: return \"unexisting code while processing dynamic deflate block\";\n    case 17: return \"end of out buffer memory reached while inflating\";\n    case 18: return \"invalid distance code while inflating\";\n    case 19: return \"end of out buffer memory reached while inflating\";\n    case 20: return \"invalid deflate block BTYPE encountered while decoding\";\n    case 21: return \"NLEN is not ones complement of LEN in a deflate block\";\n     /*end of out buffer memory reached while inflating:\n     This can happen if the inflated deflate data is longer than the amount of bytes required to fill up\n     all the pixels of the image, given the color depth and image dimensions. Something that doesn't\n     happen in a normal, well encoded, PNG image.*/\n    case 22: return \"end of out buffer memory reached while inflating\";\n    case 23: return \"end of in buffer memory reached while inflating\";\n    case 24: return \"invalid FCHECK in zlib header\";\n    case 25: return \"invalid compression method in zlib header\";\n    case 26: return \"FDICT encountered in zlib header while it's not used for PNG\";\n    case 27: return \"PNG file is smaller than a PNG header\";\n    /*Checks the magic file header, the first 8 bytes of the PNG file*/\n    case 28: return \"incorrect PNG signature, it's no PNG or corrupted\";\n    case 29: return \"first chunk is not the header chunk\";\n    case 30: return \"chunk length too large, chunk broken off at end of file\";\n    case 31: return \"illegal PNG color type or bpp\";\n    case 32: return \"illegal PNG compression method\";\n    case 33: return \"illegal PNG filter method\";\n    case 34: return \"illegal PNG interlace method\";\n    case 35: return \"chunk length of a chunk is too large or the chunk too small\";\n    case 36: return \"illegal PNG filter type encountered\";\n    case 37: return \"illegal bit depth for this color type given\";\n    case 38: return \"the palette is too big\"; /*more than 256 colors*/\n    case 39: return \"more palette alpha values given in tRNS chunk than there are colors in the palette\";\n    case 40: return \"tRNS chunk has wrong size for greyscale image\";\n    case 41: return \"tRNS chunk has wrong size for RGB image\";\n    case 42: return \"tRNS chunk appeared while it was not allowed for this color type\";\n    case 43: return \"bKGD chunk has wrong size for palette image\";\n    case 44: return \"bKGD chunk has wrong size for greyscale image\";\n    case 45: return \"bKGD chunk has wrong size for RGB image\";\n    case 48: return \"empty input buffer given to decoder. Maybe caused by non-existing file?\";\n    case 49: return \"jumped past memory while generating dynamic huffman tree\";\n    case 50: return \"jumped past memory while generating dynamic huffman tree\";\n    case 51: return \"jumped past memory while inflating huffman block\";\n    case 52: return \"jumped past memory while inflating\";\n    case 53: return \"size of zlib data too small\";\n    case 54: return \"repeat symbol in tree while there was no value symbol yet\";\n    /*jumped past tree while generating huffman tree, this could be when the\n    tree will have more leaves than symbols after generating it out of the\n    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/\n    case 55: return \"jumped past tree while generating huffman tree\";\n    case 56: return \"given output image colortype or bitdepth not supported for color conversion\";\n    case 57: return \"invalid CRC encountered (checking CRC can be disabled)\";\n    case 58: return \"invalid ADLER32 encountered (checking ADLER32 can be disabled)\";\n    case 59: return \"requested color conversion not supported\";\n    case 60: return \"invalid window size given in the settings of the encoder (must be 0-32768)\";\n    case 61: return \"invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)\";\n    /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/\n    case 62: return \"conversion from color to greyscale not supported\";\n    case 63: return \"length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk\"; /*(2^31-1)*/\n    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/\n    case 64: return \"the length of the END symbol 256 in the Huffman tree is 0\";\n    case 66: return \"the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes\";\n    case 67: return \"the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte\";\n    case 68: return \"tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors\";\n    case 69: return \"unknown chunk type with 'critical' flag encountered by the decoder\";\n    case 71: return \"unexisting interlace mode given to encoder (must be 0 or 1)\";\n    case 72: return \"while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)\";\n    case 73: return \"invalid tIME chunk size\";\n    case 74: return \"invalid pHYs chunk size\";\n    /*length could be wrong, or data chopped off*/\n    case 75: return \"no null termination char found while decoding text chunk\";\n    case 76: return \"iTXt chunk too short to contain required bytes\";\n    case 77: return \"integer overflow in buffer size\";\n    case 78: return \"failed to open file for reading\"; /*file doesn't exist or couldn't be opened for reading*/\n    case 79: return \"failed to open file for writing\";\n    case 80: return \"tried creating a tree of 0 symbols\";\n    case 81: return \"lazy matching at pos 0 is impossible\";\n    case 82: return \"color conversion to palette requested while a color isn't in palette\";\n    case 83: return \"memory allocation failed\";\n    case 84: return \"given image too small to contain all pixels to be encoded\";\n    case 86: return \"impossible offset in lz77 encoding (internal bug)\";\n    case 87: return \"must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined\";\n    case 88: return \"invalid filter strategy given for LodePNGEncoderSettings.filter_strategy\";\n    case 89: return \"text chunk keyword too short or long: must have size 1-79\";\n    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/\n    case 90: return \"windowsize must be a power of two\";\n    case 91: return \"invalid decompressed idat size\";\n    case 92: return \"too many pixels, not supported\";\n    case 93: return \"zero width or height is invalid\";\n    case 94: return \"header chunk must have a size of 13 bytes\";\n  }\n  return \"unknown error code\";\n}\n#endif /*LODEPNG_COMPILE_ERROR_TEXT*/\n\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* // C++ Wrapper                                                          // */\n/* ////////////////////////////////////////////////////////////////////////// */\n/* ////////////////////////////////////////////////////////////////////////// */\n\n#ifdef LODEPNG_COMPILE_CPP\nnamespace lodepng\n{\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename)\n{\n  long size = lodepng_filesize(filename.c_str());\n  if(size < 0) return 78;\n  buffer.resize((size_t)size);\n  return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str());\n}\n\n/*write given buffer to the file, overwriting the file, it doesn't append to it.*/\nunsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename)\n{\n  return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());\n}\n#endif /* LODEPNG_COMPILE_DISK */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_DECODER\nunsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                    const LodePNGDecompressSettings& settings)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize = 0;\n  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                    const LodePNGDecompressSettings& settings)\n{\n  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);\n}\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\nunsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                  const LodePNGCompressSettings& settings)\n{\n  unsigned char* buffer = 0;\n  size_t buffersize = 0;\n  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                  const LodePNGCompressSettings& settings)\n{\n  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);\n}\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_ZLIB */\n\n\n#ifdef LODEPNG_COMPILE_PNG\n\nState::State()\n{\n  lodepng_state_init(this);\n}\n\nState::State(const State& other)\n{\n  lodepng_state_init(this);\n  lodepng_state_copy(this, &other);\n}\n\nState::~State()\n{\n  lodepng_state_cleanup(this);\n}\n\nState& State::operator=(const State& other)\n{\n  lodepng_state_copy(this, &other);\n  return *this;\n}\n\n#ifdef LODEPNG_COMPILE_DECODER\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,\n                size_t insize, LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);\n  if(buffer && !error)\n  {\n    State state;\n    state.info_raw.colortype = colortype;\n    state.info_raw.bitdepth = bitdepth;\n    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)\n{\n  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const unsigned char* in, size_t insize)\n{\n  unsigned char* buffer = NULL;\n  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);\n  if(buffer && !error)\n  {\n    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n  }\n  lodepng_free(buffer);\n  return error;\n}\n\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const std::vector<unsigned char>& in)\n{\n  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\t\n  std::vector<unsigned char> buffer;\n  unsigned error = load_file(buffer, filename);\n  if(error) return error;\n  return decode(out, w, h, buffer, colortype, bitdepth);\n}\n#endif /* LODEPNG_COMPILE_DECODER */\n#endif /* LODEPNG_COMPILE_DISK */\n\n#ifdef LODEPNG_COMPILE_ENCODER\nunsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;\n  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                State& state)\n{\n  unsigned char* buffer;\n  size_t buffersize;\n  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);\n  if(buffer)\n  {\n    out.insert(out.end(), &buffer[0], &buffer[buffersize]);\n    lodepng_free(buffer);\n  }\n  return error;\n}\n\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                State& state)\n{\n  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;\n  return encode(out, in.empty() ? 0 : &in[0], w, h, state);\n}\n\n#ifdef LODEPNG_COMPILE_DISK\nunsigned encode(const std::string& filename,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  std::vector<unsigned char> buffer;\n  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);\n  if(!error) error = save_file(buffer, filename);\n  return error;\n}\n\nunsigned encode(const std::string& filename,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype, unsigned bitdepth)\n{\n  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;\n  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);\n}\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_PNG */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/lodepng.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nLodePNG version 20160409\n\nCopyright (c) 2005-2016 Lode Vandevenne\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n    1. The origin of this software must not be misrepresented; you must not\n    claim that you wrote the original software. If you use this software\n    in a product, an acknowledgment in the product documentation would be\n    appreciated but is not required.\n\n    2. Altered source versions must be plainly marked as such, and must not be\n    misrepresented as being the original software.\n\n    3. This notice may not be removed or altered from any source\n    distribution.\n*/\n\n#ifndef LODEPNG_H\n#define LODEPNG_H\n\n#include <string.h> /*for size_t*/\n\nextern const char* LODEPNG_VERSION_STRING;\n\n/*\nThe following #defines are used to create code sections. They can be disabled\nto disable code sections, which can give faster compile time and smaller binary.\nThe \"NO_COMPILE\" defines are designed to be used to pass as defines to the\ncompiler command to disable them without modifying this header, e.g.\n-DLODEPNG_NO_COMPILE_ZLIB for gcc.\nIn addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to\nallow implementing a custom lodepng_crc32.\n*/\n/*deflate & zlib. If disabled, you must specify alternative zlib functions in\nthe custom_zlib field of the compress and decompress settings*/\n#ifndef LODEPNG_NO_COMPILE_ZLIB\n#define LODEPNG_COMPILE_ZLIB\n#endif\n/*png encoder and png decoder*/\n#ifndef LODEPNG_NO_COMPILE_PNG\n#define LODEPNG_COMPILE_PNG\n#endif\n/*deflate&zlib decoder and png decoder*/\n#ifndef LODEPNG_NO_COMPILE_DECODER\n#define LODEPNG_COMPILE_DECODER\n#endif\n/*deflate&zlib encoder and png encoder*/\n#ifndef LODEPNG_NO_COMPILE_ENCODER\n#define LODEPNG_COMPILE_ENCODER\n#endif\n/*the optional built in harddisk file loading and saving functions*/\n#ifndef LODEPNG_NO_COMPILE_DISK\n#define LODEPNG_COMPILE_DISK\n#endif\n/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/\n#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS\n#define LODEPNG_COMPILE_ANCILLARY_CHUNKS\n#endif\n/*ability to convert error numerical codes to English text string*/\n#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT\n#define LODEPNG_COMPILE_ERROR_TEXT\n#endif\n/*Compile the default allocators (C's free, malloc and realloc). If you disable this,\nyou can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your\nsource files with custom allocators.*/\n#ifndef LODEPNG_NO_COMPILE_ALLOCATORS\n#define LODEPNG_COMPILE_ALLOCATORS\n#endif\n/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/\n#ifdef __cplusplus\n#ifndef LODEPNG_NO_COMPILE_CPP\n#define LODEPNG_COMPILE_CPP\n#endif\n#endif\n\n#ifdef LODEPNG_COMPILE_CPP\n#include <vector>\n#include <string>\n#endif /*LODEPNG_COMPILE_CPP*/\n\n#ifdef LODEPNG_COMPILE_PNG\n/*The PNG color types (also used for raw).*/\ntypedef enum LodePNGColorType\n{\n  LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/\n  LCT_RGB = 2, /*RGB: 8,16 bit*/\n  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/\n  LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/\n  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/\n} LodePNGColorType;\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nConverts PNG data in memory to raw pixel data.\nout: Output parameter. Pointer to buffer that will contain the raw pixel data.\n     After decoding, its size is w * h * (bytes per pixel) bytes larger than\n     initially. Bytes per pixel depends on colortype and bitdepth.\n     Must be freed after usage with free(*out).\n     Note: for 16-bit per channel colors, uses big endian format like PNG does.\nw: Output parameter. Pointer to width of pixel data.\nh: Output parameter. Pointer to height of pixel data.\nin: Memory buffer with the PNG file.\ninsize: size of the in buffer.\ncolortype: the desired color type for the raw output image. See explanation on PNG color types.\nbitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.\nReturn value: LodePNG error code (0 means no error).\n*/\nunsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,\n                               const unsigned char* in, size_t insize,\n                               LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/\nunsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,\n                          const unsigned char* in, size_t insize);\n\n/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/\nunsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,\n                          const unsigned char* in, size_t insize);\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad PNG from disk, from file with given name.\nSame as the other decode functions, but instead takes a filename as input.\n*/\nunsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,\n                             const char* filename,\n                             LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/\nunsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,\n                               const char* filename);\n\n/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/\nunsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,\n                               const char* filename);\n#endif /*LODEPNG_COMPILE_DISK*/\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nConverts raw pixel data into a PNG image in memory. The colortype and bitdepth\n  of the output PNG image cannot be chosen, they are automatically determined\n  by the colortype, bitdepth and content of the input pixel data.\n  Note: for 16-bit per channel colors, needs big endian format like PNG does.\nout: Output parameter. Pointer to buffer that will contain the PNG image data.\n     Must be freed after usage with free(*out).\noutsize: Output parameter. Pointer to the size in bytes of the out buffer.\nimage: The raw pixel data to encode. The size of this buffer should be\n       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.\nw: width of the raw pixel data in pixels.\nh: height of the raw pixel data in pixels.\ncolortype: the color type of the raw input image. See explanation on PNG color types.\nbitdepth: the bit depth of the raw input image. See explanation on PNG color types.\nReturn value: LodePNG error code (0 means no error).\n*/\nunsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,\n                               const unsigned char* image, unsigned w, unsigned h,\n                               LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/\nunsigned lodepng_encode32(unsigned char** out, size_t* outsize,\n                          const unsigned char* image, unsigned w, unsigned h);\n\n/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/\nunsigned lodepng_encode24(unsigned char** out, size_t* outsize,\n                          const unsigned char* image, unsigned w, unsigned h);\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts raw pixel data into a PNG file on disk.\nSame as the other encode functions, but instead takes a filename as output.\nNOTE: This overwrites existing files without warning!\n*/\nunsigned lodepng_encode_file(const char* filename,\n                             const unsigned char* image, unsigned w, unsigned h,\n                             LodePNGColorType colortype, unsigned bitdepth);\n\n/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/\nunsigned lodepng_encode32_file(const char* filename,\n                               const unsigned char* image, unsigned w, unsigned h);\n\n/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/\nunsigned lodepng_encode24_file(const char* filename,\n                               const unsigned char* image, unsigned w, unsigned h);\n#endif /*LODEPNG_COMPILE_DISK*/\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n\n#ifdef LODEPNG_COMPILE_CPP\nnamespace lodepng\n{\n#ifdef LODEPNG_COMPILE_DECODER\n/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype\nis the format to output the pixels to. Default is RGBA 8-bit per channel.*/\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const unsigned char* in, size_t insize,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::vector<unsigned char>& in,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts PNG file from disk to raw pixel data in memory.\nSame as the other decode functions, but instead takes a filename as input.\n*/\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                const std::string& filename,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype\nis that of the raw input data. The output PNG color type will be auto chosen.*/\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#ifdef LODEPNG_COMPILE_DISK\n/*\nConverts 32-bit RGBA raw pixel data into a PNG file on disk.\nSame as the other encode functions, but instead takes a filename as output.\nNOTE: This overwrites existing files without warning!\n*/\nunsigned encode(const std::string& filename,\n                const unsigned char* in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\nunsigned encode(const std::string& filename,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_ENCODER */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n#endif /*LODEPNG_COMPILE_PNG*/\n\n#ifdef LODEPNG_COMPILE_ERROR_TEXT\n/*Returns an English description of the numerical error code.*/\nconst char* lodepng_error_text(unsigned code);\n#endif /*LODEPNG_COMPILE_ERROR_TEXT*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*Settings for zlib decompression*/\ntypedef struct LodePNGDecompressSettings LodePNGDecompressSettings;\nstruct LodePNGDecompressSettings\n{\n  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/\n\n  /*use custom zlib decoder instead of built in one (default: null)*/\n  unsigned (*custom_zlib)(unsigned char**, size_t*,\n                          const unsigned char*, size_t,\n                          const LodePNGDecompressSettings*);\n  /*use custom deflate decoder instead of built in one (default: null)\n  if custom_zlib is used, custom_deflate is ignored since only the built in\n  zlib function will call custom_deflate*/\n  unsigned (*custom_inflate)(unsigned char**, size_t*,\n                             const unsigned char*, size_t,\n                             const LodePNGDecompressSettings*);\n\n  const void* custom_context; /*optional custom settings for custom functions*/\n};\n\nextern const LodePNGDecompressSettings lodepng_default_decompress_settings;\nvoid lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nSettings for zlib compression. Tweaking these settings tweaks the balance\nbetween speed and compression ratio.\n*/\ntypedef struct LodePNGCompressSettings LodePNGCompressSettings;\nstruct LodePNGCompressSettings /*deflate = compress*/\n{\n  /*LZ77 related settings*/\n  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/\n  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/\n  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/\n  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/\n  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/\n  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/\n\n  /*use custom zlib encoder instead of built in one (default: null)*/\n  unsigned (*custom_zlib)(unsigned char**, size_t*,\n                          const unsigned char*, size_t,\n                          const LodePNGCompressSettings*);\n  /*use custom deflate encoder instead of built in one (default: null)\n  if custom_zlib is used, custom_deflate is ignored since only the built in\n  zlib function will call custom_deflate*/\n  unsigned (*custom_deflate)(unsigned char**, size_t*,\n                             const unsigned char*, size_t,\n                             const LodePNGCompressSettings*);\n\n  const void* custom_context; /*optional custom settings for custom functions*/\n};\n\nextern const LodePNGCompressSettings lodepng_default_compress_settings;\nvoid lodepng_compress_settings_init(LodePNGCompressSettings* settings);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_PNG\n/*\nColor mode of an image. Contains all information required to decode the pixel\nbits to RGBA colors. This information is the same as used in the PNG file\nformat, and is used both for PNG and raw image data in LodePNG.\n*/\ntypedef struct LodePNGColorMode\n{\n  /*header (IHDR)*/\n  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/\n  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/\n\n  /*\n  palette (PLTE and tRNS)\n\n  Dynamically allocated with the colors of the palette, including alpha.\n  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use\n  lodepng_palette_clear, then for each color use lodepng_palette_add.\n  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.\n\n  When decoding, by default you can ignore this palette, since LodePNG already\n  fills the palette colors in the pixels of the raw RGBA output.\n\n  The palette is only supported for color type 3.\n  */\n  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/\n  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/\n\n  /*\n  transparent color key (tRNS)\n\n  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.\n  For greyscale PNGs, r, g and b will all 3 be set to the same.\n\n  When decoding, by default you can ignore this information, since LodePNG sets\n  pixels with this key to transparent already in the raw RGBA output.\n\n  The color key is only supported for color types 0 and 2.\n  */\n  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/\n  unsigned key_r;       /*red/greyscale component of color key*/\n  unsigned key_g;       /*green component of color key*/\n  unsigned key_b;       /*blue component of color key*/\n} LodePNGColorMode;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_color_mode_init(LodePNGColorMode* info);\nvoid lodepng_color_mode_cleanup(LodePNGColorMode* info);\n/*return value is error code (0 means no error)*/\nunsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);\n\nvoid lodepng_palette_clear(LodePNGColorMode* info);\n/*add 1 color to the palette*/\nunsigned lodepng_palette_add(LodePNGColorMode* info,\n                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);\n\n/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/\nunsigned lodepng_get_bpp(const LodePNGColorMode* info);\n/*get the amount of color channels used, based on colortype in the struct.\nIf a palette is used, it counts as 1 channel.*/\nunsigned lodepng_get_channels(const LodePNGColorMode* info);\n/*is it a greyscale type? (only colortype 0 or 4)*/\nunsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);\n/*has it got an alpha channel? (only colortype 2 or 6)*/\nunsigned lodepng_is_alpha_type(const LodePNGColorMode* info);\n/*has it got a palette? (only colortype 3)*/\nunsigned lodepng_is_palette_type(const LodePNGColorMode* info);\n/*only returns true if there is a palette and there is a value in the palette with alpha < 255.\nLoops through the palette to check this.*/\nunsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);\n/*\nCheck if the given color info indicates the possibility of having non-opaque pixels in the PNG image.\nReturns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).\nReturns false if the image can only have opaque pixels.\nIn detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,\nor if \"key_defined\" is true.\n*/\nunsigned lodepng_can_have_alpha(const LodePNGColorMode* info);\n/*Returns the byte size of a raw image buffer with given width, height and color mode*/\nsize_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n/*The information of a Time chunk in PNG.*/\ntypedef struct LodePNGTime\n{\n  unsigned year;    /*2 bytes used (0-65535)*/\n  unsigned month;   /*1-12*/\n  unsigned day;     /*1-31*/\n  unsigned hour;    /*0-23*/\n  unsigned minute;  /*0-59*/\n  unsigned second;  /*0-60 (to allow for leap seconds)*/\n} LodePNGTime;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*Information about the PNG image, except pixels, width and height.*/\ntypedef struct LodePNGInfo\n{\n  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/\n  unsigned compression_method;/*compression method of the original file. Always 0.*/\n  unsigned filter_method;     /*filter method of the original file*/\n  unsigned interlace_method;  /*interlace method of the original file*/\n  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  /*\n  suggested background color chunk (bKGD)\n  This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.\n\n  For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding\n  the encoder writes the red one. For palette PNGs: When decoding, the RGB value\n  will be stored, not a palette index. But when encoding, specify the index of\n  the palette in background_r, the other two are then ignored.\n\n  The decoder does not use this background color to edit the color of pixels.\n  */\n  unsigned background_defined; /*is a suggested background color given?*/\n  unsigned background_r;       /*red component of suggested background color*/\n  unsigned background_g;       /*green component of suggested background color*/\n  unsigned background_b;       /*blue component of suggested background color*/\n\n  /*\n  non-international text chunks (tEXt and zTXt)\n\n  The char** arrays each contain num strings. The actual messages are in\n  text_strings, while text_keys are keywords that give a short description what\n  the actual text represents, e.g. Title, Author, Description, or anything else.\n\n  A keyword is minimum 1 character and maximum 79 characters long. It's\n  discouraged to use a single line length longer than 79 characters for texts.\n\n  Don't allocate these text buffers yourself. Use the init/cleanup functions\n  correctly and use lodepng_add_text and lodepng_clear_text.\n  */\n  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/\n  char** text_keys; /*the keyword of a text chunk (e.g. \"Comment\")*/\n  char** text_strings; /*the actual text*/\n\n  /*\n  international text chunks (iTXt)\n  Similar to the non-international text chunks, but with additional strings\n  \"langtags\" and \"transkeys\".\n  */\n  size_t itext_num; /*the amount of international texts in this PNG*/\n  char** itext_keys; /*the English keyword of the text chunk (e.g. \"Comment\")*/\n  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/\n  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/\n  char** itext_strings; /*the actual international text - UTF-8 string*/\n\n  /*time chunk (tIME)*/\n  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/\n  LodePNGTime time;\n\n  /*phys chunk (pHYs)*/\n  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/\n  unsigned phys_x; /*pixels per unit in x direction*/\n  unsigned phys_y; /*pixels per unit in y direction*/\n  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/\n\n  /*\n  unknown chunks\n  There are 3 buffers, one for each position in the PNG where unknown chunks can appear\n  each buffer contains all unknown chunks for that position consecutively\n  The 3 buffers are the unknown chunks between certain critical chunks:\n  0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND\n  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared\n  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.\n  */\n  unsigned char* unknown_chunks_data[3];\n  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGInfo;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_info_init(LodePNGInfo* info);\nvoid lodepng_info_cleanup(LodePNGInfo* info);\n/*return value is error code (0 means no error)*/\nunsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\nvoid lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/\nunsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/\n\nvoid lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/\nunsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,\n                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n\n/*\nConverts raw buffer from one color type to another color type, based on\nLodePNGColorMode structs to describe the input and output color type.\nSee the reference manual at the end of this header file to see which color conversions are supported.\nreturn value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)\nThe out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel\nof the output color type (lodepng_get_bpp).\nFor < 8 bpp images, there should not be padding bits at the end of scanlines.\nFor 16-bit per channel colors, uses big endian format like PNG does.\nReturn value is LodePNG error code\n*/\nunsigned lodepng_convert(unsigned char* out, const unsigned char* in,\n                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,\n                         unsigned w, unsigned h);\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nSettings for the decoder. This contains settings for the PNG and the Zlib\ndecoder, but not the Info settings from the Info structs.\n*/\ntypedef struct LodePNGDecoderSettings\n{\n  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/\n\n  unsigned ignore_crc; /*ignore CRC checksums*/\n\n  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/\n\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/\n  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/\n  unsigned remember_unknown_chunks;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGDecoderSettings;\n\nvoid lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/\ntypedef enum LodePNGFilterStrategy\n{\n  /*every filter at zero*/\n  LFS_ZERO,\n  /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/\n  LFS_MINSUM,\n  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending\n  on the image, this is better or worse than minsum.*/\n  LFS_ENTROPY,\n  /*\n  Brute-force-search PNG filters by compressing each filter for each scanline.\n  Experimental, very slow, and only rarely gives better compression than MINSUM.\n  */\n  LFS_BRUTE_FORCE,\n  /*use predefined_filters buffer: you specify the filter type for each scanline*/\n  LFS_PREDEFINED\n} LodePNGFilterStrategy;\n\n/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.\nUsed internally by default if \"auto_convert\" is enabled. Public because it's useful for custom algorithms.*/\ntypedef struct LodePNGColorProfile\n{\n  unsigned colored; /*not greyscale*/\n  unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/\n  unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/\n  unsigned short key_g;\n  unsigned short key_b;\n  unsigned alpha; /*alpha channel or alpha palette required*/\n  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/\n  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/\n  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/\n} LodePNGColorProfile;\n\nvoid lodepng_color_profile_init(LodePNGColorProfile* profile);\n\n/*Get a LodePNGColorProfile of the image.*/\nunsigned lodepng_get_color_profile(LodePNGColorProfile* profile,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in);\n/*The function LodePNG uses internally to decide the PNG color with auto_convert.\nChooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/\nunsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,\n                                   const unsigned char* image, unsigned w, unsigned h,\n                                   const LodePNGColorMode* mode_in);\n\n/*Settings for the encoder.*/\ntypedef struct LodePNGEncoderSettings\n{\n  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/\n\n  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/\n\n  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than\n  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to\n  completely follow the official PNG heuristic, filter_palette_zero must be true and\n  filter_strategy must be LFS_MINSUM*/\n  unsigned filter_palette_zero;\n  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.\n  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/\n  LodePNGFilterStrategy filter_strategy;\n  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with\n  the same length as the amount of scanlines in the image, and each value must <= 5. You\n  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero\n  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/\n  const unsigned char* predefined_filters;\n\n  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).\n  If colortype is 3, PLTE is _always_ created.*/\n  unsigned force_palette;\n#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS\n  /*add LodePNG identifier and version as a text chunk, for debugging*/\n  unsigned add_id;\n  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/\n  unsigned text_compression;\n#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/\n} LodePNGEncoderSettings;\n\nvoid lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n\n#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)\n/*The settings, state and information for extended encoding and decoding.*/\ntypedef struct LodePNGState\n{\n#ifdef LODEPNG_COMPILE_DECODER\n  LodePNGDecoderSettings decoder; /*the decoding settings*/\n#endif /*LODEPNG_COMPILE_DECODER*/\n#ifdef LODEPNG_COMPILE_ENCODER\n  LodePNGEncoderSettings encoder; /*the encoding settings*/\n#endif /*LODEPNG_COMPILE_ENCODER*/\n  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/\n  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/\n  unsigned error;\n#ifdef LODEPNG_COMPILE_CPP\n  /* For the lodepng::State subclass. */\n  virtual ~LodePNGState(){}\n#endif\n} LodePNGState;\n\n/*init, cleanup and copy functions to use with this struct*/\nvoid lodepng_state_init(LodePNGState* state);\nvoid lodepng_state_cleanup(LodePNGState* state);\nvoid lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);\n#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*\nSame as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and\ngetting much more information about the PNG image and color mode.\n*/\nunsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,\n                        LodePNGState* state,\n                        const unsigned char* in, size_t insize);\n\n/*\nRead the PNG header, but not the actual data. This returns only the information\nthat is in the header chunk of the PNG, such as width, height and color type. The\ninformation is placed in the info_png field of the LodePNGState.\n*/\nunsigned lodepng_inspect(unsigned* w, unsigned* h,\n                         LodePNGState* state,\n                         const unsigned char* in, size_t insize);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/\nunsigned lodepng_encode(unsigned char** out, size_t* outsize,\n                        const unsigned char* image, unsigned w, unsigned h,\n                        LodePNGState* state);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n/*\nThe lodepng_chunk functions are normally not needed, except to traverse the\nunknown chunks stored in the LodePNGInfo struct, or add new ones to it.\nIt also allows traversing the chunks of an encoded PNG file yourself.\n\nPNG standard chunk naming conventions:\nFirst byte: uppercase = critical, lowercase = ancillary\nSecond byte: uppercase = public, lowercase = private\nThird byte: must be uppercase\nFourth byte: uppercase = unsafe to copy, lowercase = safe to copy\n*/\n\n/*\nGets the length of the data of the chunk. Total chunk length has 12 bytes more.\nThere must be at least 4 bytes to read from. If the result value is too large,\nit may be corrupt data.\n*/\nunsigned lodepng_chunk_length(const unsigned char* chunk);\n\n/*puts the 4-byte type in null terminated string*/\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk);\n\n/*check if the type is the given type*/\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);\n\n/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/\nunsigned char lodepng_chunk_ancillary(const unsigned char* chunk);\n\n/*0: public, 1: private (see PNG standard)*/\nunsigned char lodepng_chunk_private(const unsigned char* chunk);\n\n/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);\n\n/*get pointer to the data of the chunk, where the input points to the header of the chunk*/\nunsigned char* lodepng_chunk_data(unsigned char* chunk);\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);\n\n/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk);\n\n/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/\nvoid lodepng_chunk_generate_crc(unsigned char* chunk);\n\n/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/\nunsigned char* lodepng_chunk_next(unsigned char* chunk);\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);\n\n/*\nAppends chunk to the data in out. The given chunk should already have its chunk header.\nThe out variable and outlength are updated to reflect the new reallocated buffer.\nReturns error code (0 if it went ok)\n*/\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);\n\n/*\nAppends new chunk to out. The chunk to append is given by giving its length, type\nand data separately. The type is a 4-letter string.\nThe out variable and outlength are updated to reflect the new reallocated buffer.\nReturne error code (0 if it went ok)\n*/\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data);\n\n\n/*Calculate CRC32 of buffer*/\nunsigned lodepng_crc32(const unsigned char* buf, size_t len);\n#endif /*LODEPNG_COMPILE_PNG*/\n\n\n#ifdef LODEPNG_COMPILE_ZLIB\n/*\nThis zlib part can be used independently to zlib compress and decompress a\nbuffer. It cannot be used to create gzip files however, and it only supports the\npart of zlib that is required for PNG, it does not support dictionaries.\n*/\n\n#ifdef LODEPNG_COMPILE_DECODER\n/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/\nunsigned lodepng_inflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGDecompressSettings* settings);\n\n/*\nDecompresses Zlib data. Reallocates the out buffer and appends the data. The\ndata must be according to the zlib specification.\nEither, *out must be NULL and *outsize must be 0, or, *out must be a valid\nbuffer and *outsize its size in bytes. out must be freed by user after usage.\n*/\nunsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,\n                                 const unsigned char* in, size_t insize,\n                                 const LodePNGDecompressSettings* settings);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/*\nCompresses data with Zlib. Reallocates the out buffer and appends the data.\nZlib adds a small header and trailer around the deflate data.\nThe data is output in the format of the zlib specification.\nEither, *out must be NULL and *outsize must be 0, or, *out must be a valid\nbuffer and *outsize its size in bytes. out must be freed by user after usage.\n*/\nunsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,\n                               const unsigned char* in, size_t insize,\n                               const LodePNGCompressSettings* settings);\n\n/*\nFind length-limited Huffman code for given frequencies. This function is in the\npublic interface only for tests, it's used internally by lodepng_deflate.\n*/\nunsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,\n                                      size_t numcodes, unsigned maxbitlen);\n\n/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/\nunsigned lodepng_deflate(unsigned char** out, size_t* outsize,\n                         const unsigned char* in, size_t insize,\n                         const LodePNGCompressSettings* settings);\n\n#endif /*LODEPNG_COMPILE_ENCODER*/\n#endif /*LODEPNG_COMPILE_ZLIB*/\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad a file from disk into buffer. The function allocates the out buffer, and\nafter usage you should free it.\nout: output parameter, contains pointer to loaded buffer.\noutsize: output parameter, size of the allocated out buffer\nfilename: the path to the file to load\nreturn value: error code (0 means ok)\n*/\nunsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);\n\n/*\nSave a file from buffer to disk. Warning, if it exists, this function overwrites\nthe file without warning!\nbuffer: the buffer to write\nbuffersize: size of the buffer to write\nfilename: the path to the file to save to\nreturn value: error code (0 means ok)\n*/\nunsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);\n#endif /*LODEPNG_COMPILE_DISK*/\n\n#ifdef LODEPNG_COMPILE_CPP\n/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */\nnamespace lodepng\n{\n#ifdef LODEPNG_COMPILE_PNG\nclass State : public LodePNGState\n{\n  public:\n    State();\n    State(const State& other);\n    virtual ~State();\n    State& operator=(const State& other);\n};\n\n#ifdef LODEPNG_COMPILE_DECODER\n/* Same as other lodepng::decode, but using a State for more settings and information. */\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const unsigned char* in, size_t insize);\nunsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,\n                State& state,\n                const std::vector<unsigned char>& in);\n#endif /*LODEPNG_COMPILE_DECODER*/\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/* Same as other lodepng::encode, but using a State for more settings and information. */\nunsigned encode(std::vector<unsigned char>& out,\n                const unsigned char* in, unsigned w, unsigned h,\n                State& state);\nunsigned encode(std::vector<unsigned char>& out,\n                const std::vector<unsigned char>& in, unsigned w, unsigned h,\n                State& state);\n#endif /*LODEPNG_COMPILE_ENCODER*/\n\n#ifdef LODEPNG_COMPILE_DISK\n/*\nLoad a file from disk into an std::vector.\nreturn value: error code (0 means ok)\n*/\nunsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);\n\n/*\nSave the binary data in an std::vector to a file on disk. The file is overwritten\nwithout warning.\n*/\nunsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);\n#endif /* LODEPNG_COMPILE_DISK */\n#endif /* LODEPNG_COMPILE_PNG */\n\n#ifdef LODEPNG_COMPILE_ZLIB\n#ifdef LODEPNG_COMPILE_DECODER\n/* Zlib-decompress an unsigned char buffer */\nunsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);\n\n/* Zlib-decompress an std::vector */\nunsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);\n#endif /* LODEPNG_COMPILE_DECODER */\n\n#ifdef LODEPNG_COMPILE_ENCODER\n/* Zlib-compress an unsigned char buffer */\nunsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,\n                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);\n\n/* Zlib-compress an std::vector */\nunsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,\n                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);\n#endif /* LODEPNG_COMPILE_ENCODER */\n#endif /* LODEPNG_COMPILE_ZLIB */\n} /* namespace lodepng */\n#endif /*LODEPNG_COMPILE_CPP*/\n\n/*\nTODO:\n[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often\n[.] check compatibility with various compilers  - done but needs to be redone for every newer version\n[X] converting color to 16-bit per channel types\n[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)\n[ ] make sure encoder generates no chunks with size > (2^31)-1\n[ ] partial decoding (stream processing)\n[X] let the \"isFullyOpaque\" function check color keys and transparent palettes too\n[X] better name for the variables \"codes\", \"codesD\", \"codelengthcodes\", \"clcl\" and \"lldl\"\n[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)\n[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes\n[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...\n[ ] allow user to give data (void*) to custom allocator\n*/\n\n#endif /*LODEPNG_H inclusion guard*/\n\n/*\nLodePNG Documentation\n---------------------\n\n0. table of contents\n--------------------\n\n  1. about\n   1.1. supported features\n   1.2. features not supported\n  2. C and C++ version\n  3. security\n  4. decoding\n  5. encoding\n  6. color conversions\n    6.1. PNG color types\n    6.2. color conversions\n    6.3. padding bits\n    6.4. A note about 16-bits per channel and endianness\n  7. error values\n  8. chunks and PNG editing\n  9. compiler support\n  10. examples\n   10.1. decoder C++ example\n   10.2. decoder C example\n  11. state settings reference\n  12. changes\n  13. contact information\n\n\n1. about\n--------\n\nPNG is a file format to store raster images losslessly with good compression,\nsupporting different color types and alpha channel.\n\nLodePNG is a PNG codec according to the Portable Network Graphics (PNG)\nSpecification (Second Edition) - W3C Recommendation 10 November 2003.\n\nThe specifications used are:\n\n*) Portable Network Graphics (PNG) Specification (Second Edition):\n     http://www.w3.org/TR/2003/REC-PNG-20031110\n*) RFC 1950 ZLIB Compressed Data Format version 3.3:\n     http://www.gzip.org/zlib/rfc-zlib.html\n*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:\n     http://www.gzip.org/zlib/rfc-deflate.html\n\nThe most recent version of LodePNG can currently be found at\nhttp://lodev.org/lodepng/\n\nLodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds\nextra functionality.\n\nLodePNG exists out of two files:\n-lodepng.h: the header file for both C and C++\n-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage\n\nIf you want to start using LodePNG right away without reading this doc, get the\nexamples from the LodePNG website to see how to use it in code, or check the\nsmaller examples in chapter 13 here.\n\nLodePNG is simple but only supports the basic requirements. To achieve\nsimplicity, the following design choices were made: There are no dependencies\non any external library. There are functions to decode and encode a PNG with\na single function call, and extended versions of these functions taking a\nLodePNGState struct allowing to specify or get more information. By default\nthe colors of the raw image are always RGB or RGBA, no matter what color type\nthe PNG file uses. To read and write files, there are simple functions to\nconvert the files to/from buffers in memory.\n\nThis all makes LodePNG suitable for loading textures in games, demos and small\nprograms, ... It's less suitable for full fledged image editors, loading PNGs\nover network (it requires all the image data to be available before decoding can\nbegin), life-critical systems, ...\n\n1.1. supported features\n-----------------------\n\nThe following features are supported by the decoder:\n\n*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,\n   or the same color type as the PNG\n*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image\n*) Adam7 interlace and deinterlace for any color type\n*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk\n*) support for alpha channels, including RGBA color model, translucent palettes and color keying\n*) zlib decompression (inflate)\n*) zlib compression (deflate)\n*) CRC32 and ADLER32 checksums\n*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.\n*) the following chunks are supported (generated/interpreted) by both encoder and decoder:\n    IHDR: header information\n    PLTE: color palette\n    IDAT: pixel data\n    IEND: the final chunk\n    tRNS: transparency for palettized images\n    tEXt: textual information\n    zTXt: compressed textual information\n    iTXt: international textual information\n    bKGD: suggested background color\n    pHYs: physical dimensions\n    tIME: modification time\n\n1.2. features not supported\n---------------------------\n\nThe following features are _not_ supported:\n\n*) some features needed to make a conformant PNG-Editor might be still missing.\n*) partial loading/stream processing. All data must be available and is processed in one call.\n*) The following public chunks are not supported but treated as unknown chunks by LodePNG\n    cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT\n   Some of these are not supported on purpose: LodePNG wants to provide the RGB values\n   stored in the pixels, not values modified by system dependent gamma or color models.\n\n\n2. C and C++ version\n--------------------\n\nThe C version uses buffers allocated with alloc that you need to free()\nyourself. You need to use init and cleanup functions for each struct whenever\nusing a struct from the C version to avoid exploits and memory leaks.\n\nThe C++ version has extra functions with std::vectors in the interface and the\nlodepng::State class which is a LodePNGState with constructor and destructor.\n\nThese files work without modification for both C and C++ compilers because all\nthe additional C++ code is in \"#ifdef __cplusplus\" blocks that make C-compilers\nignore it, and the C code is made to compile both with strict ISO C90 and C++.\n\nTo use the C++ version, you need to rename the source file to lodepng.cpp\n(instead of lodepng.c), and compile it with a C++ compiler.\n\nTo use the C version, you need to rename the source file to lodepng.c (instead\nof lodepng.cpp), and compile it with a C compiler.\n\n\n3. Security\n-----------\n\nEven if carefully designed, it's always possible that LodePNG contains possible\nexploits. If you discover one, please let me know, and it will be fixed.\n\nWhen using LodePNG, care has to be taken with the C version of LodePNG, as well\nas the C-style structs when working with C++. The following conventions are used\nfor all C-style structs:\n\n-if a struct has a corresponding init function, always call the init function when making a new one\n-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks\n-if a struct has a corresponding copy function, use the copy function instead of \"=\".\n The destination must also be inited already.\n\n\n4. Decoding\n-----------\n\nDecoding converts a PNG compressed image to a raw pixel buffer.\n\nMost documentation on using the decoder is at its declarations in the header\nabove. For C, simple decoding can be done with functions such as\nlodepng_decode32, and more advanced decoding can be done with the struct\nLodePNGState and lodepng_decode. For C++, all decoding can be done with the\nvarious lodepng::decode functions, and lodepng::State can be used for advanced\nfeatures.\n\nWhen using the LodePNGState, it uses the following fields for decoding:\n*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here\n*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get\n*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use\n\nLodePNGInfo info_png\n--------------------\n\nAfter decoding, this contains extra information of the PNG image, except the actual\npixels, width and height because these are already gotten directly from the decoder\nfunctions.\n\nIt contains for example the original color type of the PNG image, text comments,\nsuggested background color, etc... More details about the LodePNGInfo struct are\nat its declaration documentation.\n\nLodePNGColorMode info_raw\n-------------------------\n\nWhen decoding, here you can specify which color type you want\nthe resulting raw image to be. If this is different from the colortype of the\nPNG, then the decoder will automatically convert the result. This conversion\nalways works, except if you want it to convert a color PNG to greyscale or to\na palette with missing colors.\n\nBy default, 32-bit color is used for the result.\n\nLodePNGDecoderSettings decoder\n------------------------------\n\nThe settings can be used to ignore the errors created by invalid CRC and Adler32\nchunks, and to disable the decoding of tEXt chunks.\n\nThere's also a setting color_convert, true by default. If false, no conversion\nis done, the resulting data will be as it was in the PNG (after decompression)\nand you'll have to puzzle the colors of the pixels together yourself using the\ncolor type information in the LodePNGInfo.\n\n\n5. Encoding\n-----------\n\nEncoding converts a raw pixel buffer to a PNG compressed image.\n\nMost documentation on using the encoder is at its declarations in the header\nabove. For C, simple encoding can be done with functions such as\nlodepng_encode32, and more advanced decoding can be done with the struct\nLodePNGState and lodepng_encode. For C++, all encoding can be done with the\nvarious lodepng::encode functions, and lodepng::State can be used for advanced\nfeatures.\n\nLike the decoder, the encoder can also give errors. However it gives less errors\nsince the encoder input is trusted, the decoder input (a PNG image that could\nbe forged by anyone) is not trusted.\n\nWhen using the LodePNGState, it uses the following fields for encoding:\n*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.\n*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has\n*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use\n\nLodePNGInfo info_png\n--------------------\n\nWhen encoding, you use this the opposite way as when decoding: for encoding,\nyou fill in the values you want the PNG to have before encoding. By default it's\nnot needed to specify a color type for the PNG since it's automatically chosen,\nbut it's possible to choose it yourself given the right settings.\n\nThe encoder will not always exactly match the LodePNGInfo struct you give,\nit tries as close as possible. Some things are ignored by the encoder. The\nencoder uses, for example, the following settings from it when applicable:\ncolortype and bitdepth, text chunks, time chunk, the color key, the palette, the\nbackground color, the interlace method, unknown chunks, ...\n\nWhen encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.\nIf the palette contains any colors for which the alpha channel is not 255 (so\nthere are translucent colors in the palette), it'll add a tRNS chunk.\n\nLodePNGColorMode info_raw\n-------------------------\n\nYou specify the color type of the raw image that you give to the input here,\nincluding a possible transparent color key and palette you happen to be using in\nyour raw image data.\n\nBy default, 32-bit color is assumed, meaning your input has to be in RGBA\nformat with 4 bytes (unsigned chars) per pixel.\n\nLodePNGEncoderSettings encoder\n------------------------------\n\nThe following settings are supported (some are in sub-structs):\n*) auto_convert: when this option is enabled, the encoder will\nautomatically choose the smallest possible color mode (including color key) that\ncan encode the colors of all pixels without information loss.\n*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,\n   2 = dynamic huffman tree (best compression). Should be 2 for proper\n   compression.\n*) use_lz77: whether or not to use LZ77 for compressed block types. Should be\n   true for proper compression.\n*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value\n   2048 by default, but can be set to 32768 for better, but slow, compression.\n*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE\n   chunk if force_palette is true. This can used as suggested palette to convert\n   to by viewers that don't support more than 256 colors (if those still exist)\n*) add_id: add text chunk \"Encoder: LodePNG <version>\" to the image.\n*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.\n  zTXt chunks use zlib compression on the text. This gives a smaller result on\n  large texts but a larger result on small texts (such as a single program name).\n  It's all tEXt or all zTXt though, there's no separate setting per text yet.\n\n\n6. color conversions\n--------------------\n\nAn important thing to note about LodePNG, is that the color type of the PNG, and\nthe color type of the raw image, are completely independent. By default, when\nyou decode a PNG, you get the result as a raw image in the color type you want,\nno matter whether the PNG was encoded with a palette, greyscale or RGBA color.\nAnd if you encode an image, by default LodePNG will automatically choose the PNG\ncolor type that gives good compression based on the values of colors and amount\nof colors in the image. It can be configured to let you control it instead as\nwell, though.\n\nTo be able to do this, LodePNG does conversions from one color mode to another.\nIt can convert from almost any color type to any other color type, except the\nfollowing conversions: RGB to greyscale is not supported, and converting to a\npalette when the palette doesn't have a required color is not supported. This is\nnot supported on purpose: this is information loss which requires a color\nreduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey\nis easy, but there are multiple ways if you want to give some channels more\nweight).\n\nBy default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB\ncolor, no matter what color type the PNG has. And by default when encoding,\nLodePNG automatically picks the best color model for the output PNG, and expects\nthe input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control\nthe color format of the images yourself, you can skip this chapter.\n\n6.1. PNG color types\n--------------------\n\nA PNG image can have many color types, ranging from 1-bit color to 64-bit color,\nas well as palettized color modes. After the zlib decompression and unfiltering\nin the PNG image is done, the raw pixel data will have that color type and thus\na certain amount of bits per pixel. If you want the output raw image after\ndecoding to have another color type, a conversion is done by LodePNG.\n\nThe PNG specification gives the following color types:\n\n0: greyscale, bit depths 1, 2, 4, 8, 16\n2: RGB, bit depths 8 and 16\n3: palette, bit depths 1, 2, 4 and 8\n4: greyscale with alpha, bit depths 8 and 16\n6: RGBA, bit depths 8 and 16\n\nBit depth is the amount of bits per pixel per color channel. So the total amount\nof bits per pixel is: amount of channels * bitdepth.\n\n6.2. color conversions\n----------------------\n\nAs explained in the sections about the encoder and decoder, you can specify\ncolor types and bit depths in info_png and info_raw to change the default\nbehaviour.\n\nIf, when decoding, you want the raw image to be something else than the default,\nyou need to set the color type and bit depth you want in the LodePNGColorMode,\nor the parameters colortype and bitdepth of the simple decoding function.\n\nIf, when encoding, you use another color type than the default in the raw input\nimage, you need to specify its color type and bit depth in the LodePNGColorMode\nof the raw image, or use the parameters colortype and bitdepth of the simple\nencoding function.\n\nIf, when encoding, you don't want LodePNG to choose the output PNG color type\nbut control it yourself, you need to set auto_convert in the encoder settings\nto false, and specify the color type you want in the LodePNGInfo of the\nencoder (including palette: it can generate a palette if auto_convert is true,\notherwise not).\n\nIf the input and output color type differ (whether user chosen or auto chosen),\nLodePNG will do a color conversion, which follows the rules below, and may\nsometimes result in an error.\n\nTo avoid some confusion:\n-the decoder converts from PNG to raw image\n-the encoder converts from raw image to PNG\n-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image\n-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG\n-when encoding, the color type in LodePNGInfo is ignored if auto_convert\n is enabled, it is automatically generated instead\n-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original\n PNG image, but it can be ignored since the raw image has the color type you requested instead\n-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion\n between the color types is done if the color types are supported. If it is not\n supported, an error is returned. If the types are the same, no conversion is done.\n-even though some conversions aren't supported, LodePNG supports loading PNGs from any\n colortype and saving PNGs to any colortype, sometimes it just requires preparing\n the raw image correctly before encoding.\n-both encoder and decoder use the same color converter.\n\nNon supported color conversions:\n-color to greyscale: no error is thrown, but the result will look ugly because\nonly the red channel is taken\n-anything to palette when that palette does not have that color in it: in this\ncase an error is thrown\n\nSupported color conversions:\n-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA\n-any grey or grey+alpha, to grey or grey+alpha\n-anything to a palette, as long as the palette has the requested colors in it\n-removing alpha channel\n-higher to smaller bitdepth, and vice versa\n\nIf you want no color conversion to be done (e.g. for speed or control):\n-In the encoder, you can make it save a PNG with any color type by giving the\nraw color mode and LodePNGInfo the same color mode, and setting auto_convert to\nfalse.\n-In the decoder, you can make it store the pixel data in the same color type\nas the PNG has, by setting the color_convert setting to false. Settings in\ninfo_raw are then ignored.\n\nThe function lodepng_convert does the color conversion. It is available in the\ninterface but normally isn't needed since the encoder and decoder already call\nit.\n\n6.3. padding bits\n-----------------\n\nIn the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines\nhave a bit amount that isn't a multiple of 8, then padding bits are used so that each\nscanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.\nThe raw input image you give to the encoder, and the raw output image you get from the decoder\nwill NOT have these padding bits, e.g. in the case of a 1-bit image with a width\nof 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,\nnot the first bit of a new byte.\n\n6.4. A note about 16-bits per channel and endianness\n----------------------------------------------------\n\nLodePNG uses unsigned char arrays for 16-bit per channel colors too, just like\nfor any other color format. The 16-bit values are stored in big endian (most\nsignificant byte first) in these arrays. This is the opposite order of the\nlittle endian used by x86 CPU's.\n\nLodePNG always uses big endian because the PNG file format does so internally.\nConversions to other formats than PNG uses internally are not supported by\nLodePNG on purpose, there are myriads of formats, including endianness of 16-bit\ncolors, the order in which you store R, G, B and A, and so on. Supporting and\nconverting to/from all that is outside the scope of LodePNG.\n\nThis may mean that, depending on your use case, you may want to convert the big\nendian output of LodePNG to little endian with a for loop. This is certainly not\nalways needed, many applications and libraries support big endian 16-bit colors\nanyway, but it means you cannot simply cast the unsigned char* buffer to an\nunsigned short* buffer on x86 CPUs.\n\n\n7. error values\n---------------\n\nAll functions in LodePNG that return an error code, return 0 if everything went\nOK, or a non-zero code if there was an error.\n\nThe meaning of the LodePNG error values can be retrieved with the function\nlodepng_error_text: given the numerical error code, it returns a description\nof the error in English as a string.\n\nCheck the implementation of lodepng_error_text to see the meaning of each code.\n\n\n8. chunks and PNG editing\n-------------------------\n\nIf you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG\neditor that should follow the rules about handling of unknown chunks, or if your\nprogram is able to read other types of chunks than the ones handled by LodePNG,\nthen that's possible with the chunk functions of LodePNG.\n\nA PNG chunk has the following layout:\n\n4 bytes length\n4 bytes type name\nlength bytes data\n4 bytes CRC\n\n8.1. iterating through chunks\n-----------------------------\n\nIf you have a buffer containing the PNG image data, then the first chunk (the\nIHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the\nsignature of the PNG and are not part of a chunk. But if you start at byte 8\nthen you have a chunk, and can check the following things of it.\n\nNOTE: none of these functions check for memory buffer boundaries. To avoid\nexploits, always make sure the buffer contains all the data of the chunks.\nWhen using lodepng_chunk_next, make sure the returned value is within the\nallocated memory.\n\nunsigned lodepng_chunk_length(const unsigned char* chunk):\n\nGet the length of the chunk's data. The total chunk length is this length + 12.\n\nvoid lodepng_chunk_type(char type[5], const unsigned char* chunk):\nunsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):\n\nGet the type of the chunk or compare if it's a certain type\n\nunsigned char lodepng_chunk_critical(const unsigned char* chunk):\nunsigned char lodepng_chunk_private(const unsigned char* chunk):\nunsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):\n\nCheck if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).\nCheck if the chunk is private (public chunks are part of the standard, private ones not).\nCheck if the chunk is safe to copy. If it's not, then, when modifying data in a critical\nchunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your\nprogram doesn't handle that type of unknown chunk.\n\nunsigned char* lodepng_chunk_data(unsigned char* chunk):\nconst unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):\n\nGet a pointer to the start of the data of the chunk.\n\nunsigned lodepng_chunk_check_crc(const unsigned char* chunk):\nvoid lodepng_chunk_generate_crc(unsigned char* chunk):\n\nCheck if the crc is correct or generate a correct one.\n\nunsigned char* lodepng_chunk_next(unsigned char* chunk):\nconst unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):\n\nIterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these\nfunctions do no boundary checking of the allocated data whatsoever, so make sure there is enough\ndata available in the buffer to be able to go to the next chunk.\n\nunsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):\nunsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,\n                              const char* type, const unsigned char* data):\n\nThese functions are used to create new chunks that are appended to the data in *out that has\nlength *outlength. The append function appends an existing chunk to the new data. The create\nfunction creates a new chunk with the given parameters and appends it. Type is the 4-letter\nname of the chunk.\n\n8.2. chunks in info_png\n-----------------------\n\nThe LodePNGInfo struct contains fields with the unknown chunk in it. It has 3\nbuffers (each with size) to contain 3 types of unknown chunks:\nthe ones that come before the PLTE chunk, the ones that come between the PLTE\nand the IDAT chunks, and the ones that come after the IDAT chunks.\nIt's necessary to make the distionction between these 3 cases because the PNG\nstandard forces to keep the ordering of unknown chunks compared to the critical\nchunks, but does not force any other ordering rules.\n\ninfo_png.unknown_chunks_data[0] is the chunks before PLTE\ninfo_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT\ninfo_png.unknown_chunks_data[2] is the chunks after IDAT\n\nThe chunks in these 3 buffers can be iterated through and read by using the same\nway described in the previous subchapter.\n\nWhen using the decoder to decode a PNG, you can make it store all unknown chunks\nif you set the option settings.remember_unknown_chunks to 1. By default, this\noption is off (0).\n\nThe encoder will always encode unknown chunks that are stored in the info_png.\nIf you need it to add a particular chunk that isn't known by LodePNG, you can\nuse lodepng_chunk_append or lodepng_chunk_create to the chunk data in\ninfo_png.unknown_chunks_data[x].\n\nChunks that are known by LodePNG should not be added in that way. E.g. to make\nLodePNG add a bKGD chunk, set background_defined to true and add the correct\nparameters there instead.\n\n\n9. compiler support\n-------------------\n\nNo libraries other than the current standard C library are needed to compile\nLodePNG. For the C++ version, only the standard C++ library is needed on top.\nAdd the files lodepng.c(pp) and lodepng.h to your project, include\nlodepng.h where needed, and your program can read/write PNG files.\n\nIt is compatible with C90 and up, and C++03 and up.\n\nIf performance is important, use optimization when compiling! For both the\nencoder and decoder, this makes a large difference.\n\nMake sure that LodePNG is compiled with the same compiler of the same version\nand with the same settings as the rest of the program, or the interfaces with\nstd::vectors and std::strings in C++ can be incompatible.\n\nCHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.\n\n*) gcc and g++\n\nLodePNG is developed in gcc so this compiler is natively supported. It gives no\nwarnings with compiler options \"-Wall -Wextra -pedantic -ansi\", with gcc and g++\nversion 4.7.1 on Linux, 32-bit and 64-bit.\n\n*) Clang\n\nFully supported and warning-free.\n\n*) Mingw\n\nThe Mingw compiler (a port of gcc for Windows) should be fully supported by\nLodePNG.\n\n*) Visual Studio and Visual C++ Express Edition\n\nLodePNG should be warning-free with warning level W4. Two warnings were disabled\nwith pragmas though: warning 4244 about implicit conversions, and warning 4996\nwhere it wants to use a non-standard function fopen_s instead of the standard C\nfopen.\n\nVisual Studio may want \"stdafx.h\" files to be included in each source file and\ngive an error \"unexpected end of file while looking for precompiled header\".\nThis is not standard C++ and will not be added to the stock LodePNG. You can\ndisable it for lodepng.cpp only by right clicking it, Properties, C/C++,\nPrecompiled Headers, and set it to Not Using Precompiled Headers there.\n\nNOTE: Modern versions of VS should be fully supported, but old versions, e.g.\nVS6, are not guaranteed to work.\n\n*) Compilers on Macintosh\n\nLodePNG has been reported to work both with gcc and LLVM for Macintosh, both for\nC and C++.\n\n*) Other Compilers\n\nIf you encounter problems on any compilers, feel free to let me know and I may\ntry to fix it if the compiler is modern and standards complient.\n\n\n10. examples\n------------\n\nThis decoder example shows the most basic usage of LodePNG. More complex\nexamples can be found on the LodePNG website.\n\n10.1. decoder C++ example\n-------------------------\n\n#include \"lodepng.h\"\n#include <iostream>\n\nint main(int argc, char *argv[])\n{\n  const char* filename = argc > 1 ? argv[1] : \"test.png\";\n\n  //load and decode\n  std::vector<unsigned char> image;\n  unsigned width, height;\n  unsigned error = lodepng::decode(image, width, height, filename);\n\n  //if there's an error, display it\n  if(error) std::cout << \"decoder error \" << error << \": \" << lodepng_error_text(error) << std::endl;\n\n  //the pixels are now in the vector \"image\", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...\n}\n\n10.2. decoder C example\n-----------------------\n\n#include \"lodepng.h\"\n\nint main(int argc, char *argv[])\n{\n  unsigned error;\n  unsigned char* image;\n  size_t width, height;\n  const char* filename = argc > 1 ? argv[1] : \"test.png\";\n\n  error = lodepng_decode32_file(&image, &width, &height, filename);\n\n  if(error) printf(\"decoder error %u: %s\\n\", error, lodepng_error_text(error));\n\n  / * use image here * /\n\n  free(image);\n  return 0;\n}\n\n11. state settings reference\n----------------------------\n\nA quick reference of some settings to set on the LodePNGState\n\nFor decoding:\n\nstate.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums\nstate.decoder.zlibsettings.custom_...: use custom inflate function\nstate.decoder.ignore_crc: ignore CRC checksums\nstate.decoder.color_convert: convert internal PNG color to chosen one\nstate.decoder.read_text_chunks: whether to read in text metadata chunks\nstate.decoder.remember_unknown_chunks: whether to read in unknown chunks\nstate.info_raw.colortype: desired color type for decoded image\nstate.info_raw.bitdepth: desired bit depth for decoded image\nstate.info_raw....: more color settings, see struct LodePNGColorMode\nstate.info_png....: no settings for decoder but ouput, see struct LodePNGInfo\n\nFor encoding:\n\nstate.encoder.zlibsettings.btype: disable compression by setting it to 0\nstate.encoder.zlibsettings.use_lz77: use LZ77 in compression\nstate.encoder.zlibsettings.windowsize: tweak LZ77 windowsize\nstate.encoder.zlibsettings.minmatch: tweak min LZ77 length to match\nstate.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching\nstate.encoder.zlibsettings.lazymatching: try one more LZ77 matching\nstate.encoder.zlibsettings.custom_...: use custom deflate function\nstate.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png\nstate.encoder.filter_palette_zero: PNG filter strategy for palette\nstate.encoder.filter_strategy: PNG filter strategy to encode with\nstate.encoder.force_palette: add palette even if not encoding to one\nstate.encoder.add_id: add LodePNG identifier and version as a text chunk\nstate.encoder.text_compression: use compressed text chunks for metadata\nstate.info_raw.colortype: color type of raw input image you provide\nstate.info_raw.bitdepth: bit depth of raw input image you provide\nstate.info_raw: more color settings, see struct LodePNGColorMode\nstate.info_png.color.colortype: desired color type if auto_convert is false\nstate.info_png.color.bitdepth: desired bit depth if auto_convert is false\nstate.info_png.color....: more color settings, see struct LodePNGColorMode\nstate.info_png....: more PNG related settings, see struct LodePNGInfo\n\n\n12. changes\n-----------\n\nThe version number of LodePNG is the date of the change given in the format\nyyyymmdd.\n\nSome changes aren't backwards compatible. Those are indicated with a (!)\nsymbol.\n\n*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within\n   the limits of pure C90).\n*) 08 dec 2015: Made load_file function return error if file can't be opened.\n*) 24 okt 2015: Bugfix with decoding to palette output.\n*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.\n*) 23 aug 2014: Reduced needless memory usage of decoder.\n*) 28 jun 2014: Removed fix_png setting, always support palette OOB for\n    simplicity. Made ColorProfile public.\n*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.\n*) 22 dec 2013: Power of two windowsize required for optimization.\n*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.\n*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).\n*) 11 mar 2013 (!): Bugfix with custom free. Changed from \"my\" to \"lodepng_\"\n    prefix for the custom allocators and made it possible with a new #define to\n    use custom ones in your project without needing to change lodepng's code.\n*) 28 jan 2013: Bugfix with color key.\n*) 27 okt 2012: Tweaks in text chunk keyword length error handling.\n*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.\n    (no palette). Better deflate tree encoding. New compression tweak settings.\n    Faster color conversions while decoding. Some internal cleanups.\n*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.\n*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions\n    and made it work with function pointers instead.\n*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc\n    and free functions and toggle #defines from compiler flags. Small fixes.\n*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.\n*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed\n    redundant C++ codec classes. Reduced amount of structs. Everything changed,\n    but it is cleaner now imho and functionality remains the same. Also fixed\n    several bugs and shrunk the implementation code. Made new samples.\n*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best\n    PNG color model and bit depth, based on the amount and type of colors of the\n    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.\n*) 9 okt 2011: simpler hash chain implementation for the encoder.\n*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.\n*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.\n    A bug with the PNG filtertype heuristic was fixed, so that it chooses much\n    better ones (it's quite significant). A setting to do an experimental, slow,\n    brute force search for PNG filter types is added.\n*) 17 aug 2011 (!): changed some C zlib related function names.\n*) 16 aug 2011: made the code less wide (max 120 characters per line).\n*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.\n*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.\n*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman\n    to optimize long sequences of zeros.\n*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and\n    LodePNG_InfoColor_canHaveAlpha functions for convenience.\n*) 7 nov 2010: added LodePNG_error_text function to get error code description.\n*) 30 okt 2010: made decoding slightly faster\n*) 26 okt 2010: (!) changed some C function and struct names (more consistent).\n     Reorganized the documentation and the declaration order in the header.\n*) 08 aug 2010: only changed some comments and external samples.\n*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.\n*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.\n*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could\n    read by ignoring the problem but windows apps couldn't.\n*) 06 jun 2008: added more error checks for out of memory cases.\n*) 26 apr 2008: added a few more checks here and there to ensure more safety.\n*) 06 mar 2008: crash with encoding of strings fixed\n*) 02 feb 2008: support for international text chunks added (iTXt)\n*) 23 jan 2008: small cleanups, and #defines to divide code in sections\n*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.\n*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.\n*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added\n    Also various fixes, such as in the deflate and the padding bits code.\n*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved\n    filtering code of encoder.\n*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A\n    C++ wrapper around this provides an interface almost identical to before.\n    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code\n    are together in these files but it works both for C and C++ compilers.\n*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks\n*) 30 aug 2007: bug fixed which makes this Borland C++ compatible\n*) 09 aug 2007: some VS2005 warnings removed again\n*) 21 jul 2007: deflate code placed in new namespace separate from zlib code\n*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images\n*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing\n    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed\n*) 02 jun 2007: made the encoder add a tag with version by default\n*) 27 may 2007: zlib and png code separated (but still in the same file),\n    simple encoder/decoder functions added for more simple usage cases\n*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),\n    moved some examples from here to lodepng_examples.cpp\n*) 12 may 2007: palette decoding bug fixed\n*) 24 apr 2007: changed the license from BSD to the zlib license\n*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.\n*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding\n    palettized PNG images. Plus little interface change with palette and texts.\n*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.\n    Fixed a bug where the end code of a block had length 0 in the Huffman tree.\n*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented\n    and supported by the encoder, resulting in smaller PNGs at the output.\n*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.\n*) 24 jan 2007: gave encoder an error interface. Added color conversion from any\n    greyscale type to 8-bit greyscale with or without alpha.\n*) 21 jan 2007: (!) Totally changed the interface. It allows more color types\n    to convert to and is more uniform. See the manual for how it works now.\n*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:\n    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and\n    at last made the decoder give errors for incorrect Adler32 or Crc.\n*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.\n*) 29 dec 2006: Added support for encoding images without alpha channel, and\n    cleaned out code as well as making certain parts faster.\n*) 28 dec 2006: Added \"Settings\" to the encoder.\n*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.\n    Removed some code duplication in the decoder. Fixed little bug in an example.\n*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.\n    Fixed a bug of the decoder with 16-bit per color.\n*) 15 okt 2006: Changed documentation structure\n*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the\n    given image buffer, however for now it's not compressed.\n*) 08 sep 2006: (!) Changed to interface with a Decoder class\n*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different\n    way. Renamed decodePNG to decodePNGGeneric.\n*) 29 jul 2006: (!) Changed the interface: image info is now returned as a\n    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.\n*) 28 jul 2006: Cleaned the code and added new error checks.\n    Corrected terminology \"deflate\" into \"inflate\".\n*) 23 jun 2006: Added SDL example in the documentation in the header, this\n    example allows easy debugging by displaying the PNG and its transparency.\n*) 22 jun 2006: (!) Changed way to obtain error value. Added\n    loadFile function for convenience. Made decodePNG32 faster.\n*) 21 jun 2006: (!) Changed type of info vector to unsigned.\n    Changed position of palette in info vector. Fixed an important bug that\n    happened on PNGs with an uncompressed block.\n*) 16 jun 2006: Internally changed unsigned into unsigned where\n    needed, and performed some optimizations.\n*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them\n    in LodePNG namespace. Changed the order of the parameters. Rewrote the\n    documentation in the header. Renamed files to lodepng.cpp and lodepng.h\n*) 22 apr 2006: Optimized and improved some code\n*) 07 sep 2005: (!) Changed to std::vector interface\n*) 12 aug 2005: Initial release (C++, decoder only)\n\n\n13. contact information\n-----------------------\n\nFeel free to contact me with suggestions, problems, comments, ... concerning\nLodePNG. If you encounter a PNG image that doesn't work properly with this\ndecoder, feel free to send it and I'll use it to find and fix the problem.\n\nMy email address is (puzzle the account and domain together with an @ symbol):\nDomain: gmail dot com.\nAccount: lode dot vandevenne.\n\n\nCopyright (c) 2005-2016 Lode Vandevenne\n*/\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Stereo sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Stereo sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe Stereo example is an implementation of the algorithm that applies stereoscopic 3D effect on two input images and achieved by means of encoding each eye's image using filters of different colors: red and blue -\n\t\t<a href=\"http://en.wikipedia.org/wiki/Anaglyph_3D\"><i>Anaglyph effect</i></a>.\n\t<br><br>\n\t\tThe example uses the flow graph interface and can be executed both on CPU and GPU for image processing.\n\t\tThe output of this application is a PNG image with the anaglyph effect applied.\n\t<br><br>\n\t\t<i>\n\t\t\tThis example includes software developed by Lode Vandevenne. See\n\t\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t\t</i>\n\t<br>\n\t\tIt exemplifies the opencl_node usage in the flow graph interface in context of creating a stereo image from two input images.\n\t<br><br>\n\t\tThis example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example.\n\t\tFor more information please refer to the documentation for the compiler you use.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tAdditionally, you have to install OpenCL&trade; version 1.2 or higher in order to run this example. See the <a href=\"https://software.intel.com/en-us/articles/opencl-drivers\">OpenCL&trade; Drivers and Runtimes for Intel&reg; Architecture</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"stereo.cpp\">stereo.cpp</a>\n\t\t\t\t<dd>The implementation of stereo image creation algorithm based on the flow graph interface.\n\t\t\t\t<dt><a href=\"lodepng.cpp\">lodepng.cpp</a>\n\t\t\t\t<dd>Library for reading and writing png images.\n\t\t\t\t<dt><a href=\"lodepng.h\">lodepng.h</a>\n\t\t\t\t<dd>Public header file for the lodepng library.\n\t\t\t\t<dt><a href=\"utils.h\">utils.h</a>\n\t\t\t\t<dd>Support functions for this example.\n\t\t\t\t<dt><a href=\"imageEffects.cl\">imageEffects.cl</a>\n\t\t\t\t<dd>OpenCL kernel file with image effects algorithms.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>stereo <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>stereo [<i>-v</i>] [<i>-alg</i>=value] [<i>first_filename</i>] [<i>second_filename</i>]</tt>\n\t\t\t\t<dd><i>-v</i> print diagnostic output to screen<br>\n\t\t\t\t\t<i>-alg</i> name of the used pipeline realization - can be host, target (default) or host_target<br>\n\t\t\t\t\t<i>first_filename</i> first input file name<br>\n\t\t\t\t\t<i>second_filename</i> second input file name<br>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tLodePNG version 20160409\n\t\t\t\tCopyright (c) 2005-2016 Lode Vandevenne\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tThis software is provided 'as-is', without any express or implied\n\t\t\t\twarranty. In no event will the authors be held liable for any damages\n\t\t\t\tarising from the use of this software.\n\t\t\t<br>\n\t\t\t\tPermission is granted to anyone to use this software for any purpose,\n\t\t\t\tincluding commercial applications, and to alter it and redistribute it\n\t\t\t\tfreely, subject to the following restrictions:\n\t\t\t\t<ol>\n\t\t\t\t\t<li>The origin of this software must not be misrepresented; you must not\n\t\t\t\t\t\tclaim that you wrote the original software. If you use this software\n\t\t\t\t\t\tin a product, an acknowledgment in the product documentation would be\n\t\t\t\t\t\tappreciated but is not required.\n\t\t\t\t\t<li>Altered source versions must be plainly marked as such, and must not be\n\t\t\t\t\t\tmisrepresented as being the original software.\n\t\t\t\t\t<li>This notice may not be removed or altered from any source\n\t\t\t\t\tdistribution.\n\t\t\t\t</ol>\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/stereo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define TBB_PREVIEW_FLOW_GRAPH_NODES 1\n#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1\n\n#include \"tbb/tbb_config.h\"\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT\n\n#if _MSC_VER\n// suppress warning C4503: decorated name length exceeded, name was truncated \n#pragma warning(disable : 4503)\n#endif\n\n#include <iostream>\n\n#include \"tbb/flow_graph.h\"\n#include \"tbb/flow_graph_opencl_node.h\"\n#include \"tbb/tick_count.h\"\n\n#include \"utils.h\"\n\nstatic const int redChannelOffset = 0;\nstatic const int greenChannelOffset = 1;\nstatic const int blueChannelOffset = 2;\nstatic const int channelsPerPixel = 4;\nstatic const int channelIncreaseValue = 10;\n\nvoid applyLeftImageEffect(utils::image_buffer& image) {\n    const int heighBase = channelsPerPixel * image.width;\n    std::vector<unsigned char>& buffer = *image.buffer;\n\n    // Increase the Red channel of left image by 10\n    for (unsigned int y = 0; y < image.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < image.width; x++) {\n            int pixelOffset = heightOffset + channelsPerPixel * x + redChannelOffset;\n            buffer[pixelOffset] += channelIncreaseValue;\n        }\n    }\n}\n\nvoid applyRightImageEffect(utils::image_buffer& image) {\n    const int heighBase = channelsPerPixel * image.width;\n    std::vector<unsigned char>& buffer = *image.buffer;\n\n    // Increase the Blue channel of left image by 10\n    for (unsigned int y = 0; y < image.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < image.width; x++) {\n            const int pixelOffset = heightOffset + channelsPerPixel * x + blueChannelOffset;\n            buffer[pixelOffset] += channelIncreaseValue;\n        }\n    }\n}\n\n// This function merges to image buffers into the first buffer (leftImageBuffer as a destination)\nvoid mergeImageBuffers(utils::image_buffer& leftImage, const utils::image_buffer& rightImage) {\n    const int heighBase = channelsPerPixel * leftImage.width;\n    std::vector<unsigned char>& leftImageBuffer = *leftImage.buffer;\n    std::vector<unsigned char>& rightImageBuffer = *rightImage.buffer;\n\n    // Apply stereoscopic merge using algorithm: R: left image, G: left and right images (middle value), B: right image\n    for (unsigned int y = 0; y < leftImage.height; y++) {\n        const int heightOffset = heighBase * y;\n        for (unsigned int x = 0; x < leftImage.width; x++) {\n            const int pixelOffset = heightOffset + channelsPerPixel * x;\n            const int greenChannelIndex = pixelOffset + greenChannelOffset;\n            const int blueChannelIndex = pixelOffset + blueChannelOffset;\n            const int middleGreenChannel = (leftImageBuffer[greenChannelIndex] + rightImageBuffer[greenChannelIndex]);\n            leftImageBuffer[greenChannelIndex] = middleGreenChannel / 2;\n            leftImageBuffer[blueChannelIndex] = rightImageBuffer[blueChannelIndex];\n        }\n    }\n}\n\nvoid fillOpenclBuffer(tbb::flow::opencl_buffer<cl_uchar>& openclBuffer, const std::vector<unsigned char>& sourceBuffer) {\n    std::copy(sourceBuffer.begin(), sourceBuffer.end(), openclBuffer.begin());\n}\n\nclass gpu_device_selector {\npublic:\n    template <typename DeviceFilter>\n    tbb::flow::opencl_device operator()(tbb::flow::opencl_factory<DeviceFilter>& f) {\n        // Set your GPU device if available to execute kernel on\n        const tbb::flow::opencl_device_list &devices = f.devices();\n        tbb::flow::opencl_device_list::const_iterator it = std::find_if(\n            devices.cbegin(), devices.cend(),\n            [](const tbb::flow::opencl_device &d) {\n            cl_device_type type;\n            d.info(CL_DEVICE_TYPE, type);\n            return CL_DEVICE_TYPE_GPU == type;\n        });\n\n        if (it == devices.cend()) {\n            std::cout << \"Info: could not find any GPU devices. Choosing the first available device (default behaviour).\" << std::endl;\n            return *(f.devices().begin());\n        } else {\n            // Return GPU device from factory\n            return *it;\n        }\n    }\n};\n\n// Image processing function that is executed on CPU only\nvoid hostFunction(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef tuple< utils::image_buffer, utils::image_buffer > MergeImagesTuple;\n\n    graph g;\n\n    function_node< std::string, utils::image_buffer > fileReaderOne(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {\n        return utils::getOrGenerateImage(fileToRead);\n    });\n\n    function_node< std::string, utils::image_buffer > fileReaderTwo = fileReaderOne;\n\n    function_node< utils::image_buffer, utils::image_buffer > leftImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {\n        applyLeftImageEffect(image);\n        return image;\n    });\n\n    function_node< utils::image_buffer, utils::image_buffer > rightImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer {\n        applyRightImageEffect(image);\n        return image;\n    });\n\n    join_node< tuple< utils::image_buffer, utils::image_buffer > > joinNode(g);\n\n    function_node< MergeImagesTuple, utils::image_buffer > mergeImages(g, unlimited, [](const MergeImagesTuple& bufferTuple) -> utils::image_buffer {\n        // Two input images from tupple are merged into the first image,\n        utils::image_buffer leftImageBuffer = std::get<0>(bufferTuple);\n        utils::image_buffer rightImageBuffer = std::get<1>(bufferTuple);\n\n        mergeImageBuffers(leftImageBuffer, rightImageBuffer);\n\n        return leftImageBuffer;\n    });\n\n    function_node< utils::image_buffer > outputWriter(g, unlimited, [&outputFile](const utils::image_buffer& image) {\n        utils::writePNGImage(image, outputFile);\n    });\n\n    // Read left image\n    make_edge(fileReaderOne, leftImageEffect);\n\n    // Read right image\n    make_edge(fileReaderTwo, rightImageEffect);\n\n    // Process left image\n    make_edge(leftImageEffect, tbb::flow::input_port<0>(joinNode));\n\n    // Process right image\n    make_edge(rightImageEffect, tbb::flow::input_port<1>(joinNode));\n\n    // Merge images\n    make_edge(joinNode, mergeImages);\n    make_edge(mergeImages, outputWriter);\n\n    // Start graph image processing\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\n// Image processing function using OpenCL\n/** Reading and writing image to file is executed on CPU, while all buffers manipulation are executed on GPU */\nvoid openclFunctionGPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;\n    typedef std::array<unsigned int, 2> NDRange;\n    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;\n    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;\n    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;\n\n    graph g;\n\n    gpu_device_selector gpu_selector;\n\n    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {\n        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);\n\n        // Create and initialize opencl_buffer in order to pass it to kernel\n        OpenclImageBuffer oclImage(src.buffer->size());\n        fillOpenclBuffer(oclImage, *src.buffer);\n\n        NDRange rangeList = { src.width, src.height };\n        return std::make_tuple(oclImage, src.width, rangeList);\n    });\n\n    function_node< std::string, OpenclImageTuple > fileReaderTwo = fileReaderOne;\n\n    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);\n\n    // Kernel should be in the current folder\n    opencl_program<> program(\"imageEffects.cl\");\n\n    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel(\"applyLeftImageEffect\"), gpu_selector);\n\n    split_node< OpenclImageTuple > splitArgumentsRightNode(g);\n\n    opencl_node< OpenclImageTuple > rightImageEffect(g, program.get_kernel(\"applyRightImageEffect\"), gpu_selector);\n\n    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel(\"mergeImages\"), gpu_selector);\n\n    join_node< WriteImageBufferTuple > joinTupleNode(g);\n\n    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {\n        // The result image have to be copied in order to be changed,\n        // the second parameter - image size, can be taken by const reference\n        OpenclImageBuffer imageBuffer = std::get<0>(image);\n        const NDRange& imageSize = std::get<1>(image);\n        unsigned int width = imageSize[0];\n        unsigned int height = imageSize[1]; \n\n        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);\n    });\n\n    // Process left image\n    make_edge(fileReaderOne, splitArgumentsLeftNode);\n    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));\n    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));\n\n    // Process right image\n    make_edge(fileReaderTwo, splitArgumentsRightNode);\n    make_edge(output_port<0>(splitArgumentsRightNode), input_port<0>(rightImageEffect));\n    make_edge(output_port<1>(splitArgumentsRightNode), input_port<1>(rightImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsRightNode), input_port<2>(rightImageEffect));\n\n    // Merge images\n    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));\n    make_edge(output_port<0>(rightImageEffect), input_port<1>(mergeImages));\n    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));\n\n    // Set OpenCL NDRange here (because the values may vary, depending on input data)\n    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));\n\n    // Write image to PNG\n    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));\n    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));\n    make_edge(joinTupleNode, outputWriter);\n\n    // Define where to get ndrange and kernel arguments\n    leftImageEffect.set_args(port_ref<0, 1>());\n    leftImageEffect.set_range(port_ref<2>());\n\n    rightImageEffect.set_args(port_ref<0, 1>());\n    rightImageEffect.set_range(port_ref<2>());\n\n    mergeImages.set_args(port_ref<0, 2>());\n    mergeImages.set_range(port_ref<3>());\n\n    // Start graph image processing pipeline\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\n// Second image processing function using OpenCL\n/** Reading and writing image to file is executed on CPU, while some buffers manipulation are executed on GPU\n    and others runs on CPU device. This case should have the best performance among others. */\nvoid openclFunctionGPUPlusCPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) {\n    using namespace tbb::flow;\n    typedef opencl_buffer<cl_uchar> OpenclImageBuffer;\n    typedef std::array<unsigned int, 2> NDRange;\n    typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple;\n    typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple;\n    typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple;\n\n    graph g;\n\n    gpu_device_selector gpu_selector;\n\n    function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple {\n        utils::image_buffer src = utils::getOrGenerateImage(fileToRead);\n\n        // Create and initialize opencl_buffer in order to pass it to mergeImages kernel\n        OpenclImageBuffer oclImage(src.buffer->size());\n        fillOpenclBuffer(oclImage, *src.buffer);\n\n        NDRange rangeList = { src.width, src.height };\n        return std::make_tuple(oclImage, src.width, rangeList);\n    });\n\n    function_node< std::string, utils::image_buffer > fileReaderTwo(g, serial, [](const std::string& fileToRead) -> utils::image_buffer {\n        return utils::readPNGImage(fileToRead);\n    });\n\n    split_node< OpenclImageTuple > splitArgumentsLeftNode(g);\n\n    // Kernel should be in the current folder\n    opencl_program<> program(\"imageEffects.cl\");\n\n    opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel(\"applyLeftImageEffect\"), gpu_selector);\n\n    function_node< utils::image_buffer, OpenclImageBuffer > rightImageEffect(g, unlimited, [&g](utils::image_buffer image) -> OpenclImageBuffer {\n        applyRightImageEffect(image);\n\n        // Create and initialize opencl_buffer in order to pass it to kernel\n        OpenclImageBuffer oclImage(image.buffer->size());\n        fillOpenclBuffer(oclImage, *image.buffer);\n\n        return oclImage;\n    });\n\n    opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel(\"mergeImages\"), gpu_selector);\n\n    join_node< WriteImageBufferTuple > joinTupleNode(g);\n\n    function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) {\n        // The result image have to be copied in order to be changed,\n        // the second parameter - image size, can be taken by const reference\n        OpenclImageBuffer imageBuffer = std::get<0>(image);\n        const NDRange& imageSize = std::get<1>(image);\n        unsigned int width = imageSize[0];\n        unsigned int height = imageSize[1];\n\n        utils::writePNGImage(imageBuffer.data(), width, height, outputFile);\n    });\n\n    // Process left image on GPU\n    make_edge(fileReaderOne, splitArgumentsLeftNode);\n    make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect));\n    make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect));\n\n    // Process right image on CPU\n    make_edge(fileReaderTwo, rightImageEffect);\n\n    // Merge images on GPU\n    make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages));\n    make_edge(rightImageEffect, input_port<1>(mergeImages));\n    make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages));\n\n    // Pass OpenCL NDRange via input port because it depends on input data\n    make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages));\n\n    // Write image to PNG\n    make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode));\n    make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode));\n    make_edge(joinTupleNode, outputWriter);\n\n    // Define where to get ndrange and kernel arguments\n    leftImageEffect.set_args(port_ref<0, 1>());\n    leftImageEffect.set_range(port_ref<2>());\n\n    mergeImages.set_args(port_ref<0, 2>());\n    mergeImages.set_range(port_ref<3>());\n\n    // Start graph image processing pipeline\n    fileReaderOne.try_put(firstFile);\n    fileReaderTwo.try_put(secondFile);\n\n    g.wait_for_all();\n}\n\n\nint main(int argc, char* argv[]) {\n    try {\n\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        bool verbose = false;\n        std::string algVersion;\n\n        std::string inputFileFirst;\n        std::string inputFileSecond;\n        std::string outputFile = \"output.png\";\n\n        utility::parse_cli_arguments(argc, argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help\n            .arg(verbose, \"-v\", \"verbose mode\")\n            .arg(algVersion, \"-alg\", \"name of the used pipeline realisation - can be host, target (default) or host_target\")\n            .positional_arg(inputFileFirst, \"first_filename\", \"first input file name\")\n            .positional_arg(inputFileSecond, \"second_filename\", \"second input file name\")\n        );\n\n        if (!utils::isBothImagesExists(inputFileFirst, inputFileSecond)) {\n            std::cout << \"Info: one or both images does not exists or empty. Input images will be generated instead.\" << std::endl;\n            inputFileFirst.clear();\n            inputFileSecond.clear();\n        } else {\n            std::cout << \"First input file name: \" << inputFileFirst << std::endl;\n            std::cout << \"Second input file name: \" << inputFileSecond << std::endl;\n        }\n\n        if (algVersion.empty() || algVersion == \"target\") {\n            openclFunctionGPU(inputFileFirst, inputFileSecond, outputFile);\n        } else if (algVersion == \"host_target\") {\n            openclFunctionGPUPlusCPU(inputFileFirst, inputFileSecond, outputFile);\n        } else if (algVersion == \"host\") {\n            hostFunction(inputFileFirst, inputFileSecond, outputFile);\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch (std::exception& e) {\n        std::cerr << \"Error occurred :\\\"\" << e.what() << \"\\\"\\n\";\n        return -1;\n    }\n}\n#else\nint main() {\n    utility::report_skipped();\n    return 0;\n}\n#endif /* __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/graph/stereo/utils.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <iostream>\n#include <string>\n\n#include \"lodepng.h\"\n\nnamespace utils {\n\n    struct image_buffer {\n        unsigned int width, height;\n        std::shared_ptr< std::vector<unsigned char> > buffer; // smart pointer to the vector of raw pixels in RGBA format, 4 bytes per pixel\n    };\n\n    image_buffer readPNGImage(const std::string& imageName) {\n        image_buffer image;\n        image.buffer = std::make_shared< std::vector<unsigned char> >();\n\n        unsigned int error = lodepng::decode(*image.buffer, image.width, image.height, imageName.c_str());\n\n        if (error) {\n            std::string exceptionMessage = \"decoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n        return image;\n    }\n\n    void readPNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const char* imageName) {\n        unsigned int error = lodepng_decode32_file(&imageBuffer, &width, &height, imageName);\n\n        if (error) {\n            std::string exceptionMessage = \"decoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    void writePNGImage(const image_buffer& image, const std::string& outputFile) {\n        unsigned int error = lodepng::encode(outputFile, *image.buffer, image.width, image.height);\n        if (error) {\n            std::string exceptionMessage = \"encoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    void writePNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const std::string& outputFile) {\n        unsigned int error = lodepng::encode(outputFile, imageBuffer, width, height);\n        if (error) {\n            std::string exceptionMessage = \"encoder error: \" + std::string(lodepng_error_text(error));\n            throw std::runtime_error(exceptionMessage);\n        }\n    }\n\n    image_buffer generatePNGImage() {\n        image_buffer image;\n        image.width = 1024;\n        image.height = 1024;\n\n        image.buffer = std::make_shared< std::vector<unsigned char> >(image.width * image.height * 4);\n        std::vector<unsigned char>& buffer = *image.buffer;\n\n        const int widthOffset = 4 * image.width;\n        for (unsigned y = 0; y < image.height; y++) {\n            for (unsigned x = 0; x < image.width; x++) {\n                const int pixelOffset = widthOffset * y + 4 * x;\n                buffer[pixelOffset] = 200 * !(x & y);\n                buffer[pixelOffset + 1] = x ^ y;\n                buffer[pixelOffset + 2] = x | y;\n                buffer[pixelOffset + 3] = 255;\n            }\n        }\n        return image;\n    }\n\n    bool isFileExist(const std::string& fileName) {\n        std::ifstream file(fileName);\n        return file.good();\n    }\n\n    bool isBothImagesExists(const std::string& firstFile, const std::string& secondFile) {\n        return isFileExist(firstFile) && isFileExist(secondFile);\n    }\n\n    image_buffer getOrGenerateImage(const std::string& fileName) {\n        return fileName.empty() ? generatePNGImage() : readPNGImage(fileName);\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks Samples</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks Samples</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory includes example usages of Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"GettingStarted/index.html\">GettingStarted</a>\n\t\t\t\t<dd>Examples from the Intel TBB <a href=\"http://software.intel.com/en-us/tbb-tutorial\">Getting&nbsp;Started&nbsp;Guide</a>.\n\t\t\t\t<dt><a href=\"concurrent_hash_map/index.html\">concurrent_hash_map</a>\n\t\t\t\t<dd>Examples using <code>concurrent_hash_map</code> container.\n\t\t\t\t<dt><a href=\"concurrent_priority_queue/index.html\">concurrent_priority_queue</a>\n\t\t\t\t<dd>Examples using <code>concurrent_priority_queue</code> container.\n\t\t\t\t<dt><a href=\"graph/index.html\">graph</a>\n\t\t\t\t<dd>Examples using Intel TBB Flow Graph feature.\n\t\t\t\t<dt><a href=\"parallel_do/index.html\">parallel_do</a>\n\t\t\t\t<dd>Examples using <code>parallel_do</code> algorithm.\n\t\t\t\t<dt><a href=\"parallel_for/index.html\">parallel_for</a>\n\t\t\t\t<dd>Examples using <code>parallel_for</code> algorithm.\n\t\t\t\t<dt><a href=\"parallel_reduce/index.html\">parallel_reduce</a>\n\t\t\t\t<dd>Examples using <code>parallel_reduce</code> algorithm.\n\t\t\t\t<dt><a href=\"pipeline/index.html\">pipeline</a>\n\t\t\t\t<dd>Examples using <code>pipeline</code> algorithm.\n\t\t\t\t<dt><a href=\"task/index.html\">task</a>\n\t\t\t\t<dd>Examples using raw <code>task</code> interface.\n\t\t\t\t<dt><a href=\"task_group/index.html\">task_group</a>\n\t\t\t\t<dd>Examples using <code>task_group</code> interface.\n\t\t\t\t<dt><a href=\"task_arena/index.html\">task_arena</a>\n\t\t\t\t<dd>Examples using the <code>task_arena</code> feature.\n\t\t\t\t<dt><a href=\"test_all/index.html\">test_all</a>\n\t\t\t\t<dd>Examples that test various components of Intel TBB.\n\t\t\t\t<dt><a href=\"common/index.html\">common</a>\n\t\t\t\t<dd>Common files for building various examples. Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build Instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"note\">\n\t\t\t\tNote: Some of the following directions refer to a shell window. This refers\n\t\t\t\tto the command prompt environment/window normally used on your system:\n\t\t\t\t<ul>\n\t\t\t\t\t<li>cmd.exe command prompt window for Windows* systems\n\t\t\t\t\t<li>sh, bash, csh, ksh, etc. (or compatible) shell window for Windows*, Linux* or macOS* systems\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<p>\n\t\t\tSet up the environment for using Intel TBB:\n\t\t\t</p>\n\t\t\t<div class=\"h4-alike\">To set up the environment for Windows* OS:</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\n\t\t\t\t<p>\n\t\t\t\t\tIt is <b>strongly</b> recommended to set up the environment when installing Intel TBB.\n\t\t\t\t\tDo this by selecting the appropriate check-box during the install. However, if the environment is not set up\n\t\t\t\t\tduring installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,\n\t\t\t\t\tit may be set up, for a given type of shell window, by using one of the following commands:\n\t\t\t\t</p>\n\t\t\t\t<dl>\n\t\t\t\t<dt>For cmd.exe (command prompt):\n\t\t\t\t<dd>\n\t\t\t\t\t<pre>\n&lt;<i>installdir</i>&gt;/bin/tbbvars.bat (arch) [vs]\n\t\t\t\t\t</pre>\n\t\t\t\t<dt>where:\n\t\t\t\t<dd>\n\t\t\t\t\t<li><i>(arch)</i> argument represents target architecture. Its possible values are 'ia32' or 'intel64'.\n\t\t\t\t\t<li><i>[vs]</i> argument represents target version of Microsoft* Visual Studio*. Its possible values are:\n\t\t\t\t\t<ul class='circ'>\n\t\t\t\t\t<li><i>'vs&lt;msvs_version&gt;'</i> - to use Intel TBB library with Microsoft* Visual Studio* <i>&lt;msvs_version&gt;</i> runtime DLLs, e.g.: <code>tbbvars&nbsp;intel64&nbsp;vs2015</code>\n\t\t\t\t\t\t<br><i>Note:</i> for the most up to date supported versions of Microsoft* Visual Studio*, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t\t\t<li><i>'all'</i> - to use Intel TBB binaries statically linked with Microsoft Visual C++ runtime.\n\t\t\t\t\t\t<br>If <i>[vs]</i> is not set the <i>'all'</i> value will be used by default.\n\t\t\t\t\t</ul>\n\t\t\t\t</dl>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To set up the environment for Linux* OS and macOS*:</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t\t<p>\n\t\t\t\t\tThe environment may be set up, for a given type of shell window, by using one of the following commands:\n\t\t\t\t</p>\n\t\t\t\t<dl>\n\t\t\t\t<dt>For sh, bash, ksh, dash (or compatibles):\n\t\t\t\t<dd>\n\t\t\t\t<pre>\n<b>.</b> &lt;<i>installdir</i>&gt;/bin/tbbvars.sh (arch) [platform [TBBROOT_detection_mode]]\n\t\t\t\t</pre>\n\t\t\t\t<dt>For csh (or compatibles):\n\t\t\t\t<dd>\n\t\t\t\t<pre>\nsource &lt;<i>installdir</i>&gt;/bin/tbbvars.csh (arch) [platform [TBBROOT_detection_mode]]\n\t\t\t\t</pre>\n\t\t\t\t<dt>where:\n\t\t\t\t<dd>\n\t\t\t\t\t<li><i>(arch)</i> argument represents target architecture. Its possible values are <i>'ia32'</i> or <i>'intel64'</i>.\n\t\t\t\t\t<li><i>[platform]</i> argument represents target platform. Its possible values are <i>'linux'</i> or <i>'android'</i>.\n\t\t\t\t\t<li><i>[TBBROOT_detection_mode]</i> argument represents TBBROOT path detection method. Its only possible value is <i>'auto_tbbroot'</i>. In this case the environment variable TBBROOT is detected automatically by using the tbbvars script directory path.\n\t\t\t\t</dl>\n\t\t\tEnvironment setup need only be performed once per shell window to be used.\n\t\t\t<br>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.\n\t\t\t<br>If the arguments to the sourced script are ignored (consult documentation for your shell) the alternative way to specify target is environment variables COMPILERVARS_ARCHITECTURE to pass (arch) to the script and COMPILERVARS_PLATFORM to pass [platform].\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<p>\n\t\t\tBuild each example by using one of the following methods:\n\t\t\t</p>\n\t\t\t<div class=\"h4-alike\">To build by using a Microsoft* Visual Studio* project (Windows* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<ol>\n\t\t\t<li>Identify the solution (*.sln) file for the example you wish to build and run. The *.sln file for each example is in the example's <i>msvs</i> sub-directory.\n\t\t\t<li>Open the project by using one of the following methods:\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.</li>\n\t\t\t\t<li>Invoke Microsoft* Visual Studio* from the Start menu and use the \"Open Project\" dialog to navigate to and open the project.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li>Press &lt;ctrl-F5&gt; to build and run the example.</li>\n\t\t\t<li>If you copied an example to another place separately from libraries you need to\n\t\t\t\tset %TBBROOT% variable pointing to &lt;installdir&gt; folder.</li>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To build by using a Xcode* IDE project (macOS* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"note\">\n\t\t\t\tNote: Xcode* project instructions are not applicable for the Intel TBB Sample Bundle for Intel&reg; System Studio\n\t\t\t\tbecause Intel System Studio does not support macOS*. For additional information, see the\n\t\t\t\t<a href=\"https://software.intel.com/en-us/articles/intel-system-studio-release-notes\">Release Notes</a>.\n\t\t\t</div>\n\t\t\t<ol>\n\t\t\t<li>Identify the project (*.xcodeproj) file for the example you wish to build and run. The *.xcodeproj file is in the example's <i>xcode</i> sub-directory.</li>\n\t\t\t<li>Open the project by using one of the following methods:\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.</li>\n\t\t\t\t<li>Invoke the Xcode* IDE and use the \"File -> Open\" dialog to navigate to and open the project.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li>Press &lt;Apple-R&gt;, or press the \"Build and Go\" button in the toolbox, to build and run the example.\n\t\t\t</li>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t\t<div class=\"h4-alike\">To build by using a Makefile (Windows*, Linux* or macOS* systems):</div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<div class=\"show-hide\">\n\t\t\t<ol>\n\t\t\t<li>Open a shell window\n\t\t\t\t<ul class=\"disc\">\n\t\t\t\t<li>For Windows* systems, make sure this shell window has the proper environment\n\t\t\t\t\tdefined for use with Microsoft* Visual Studio*. Such shell can be invoked from the Start menu, under Microsoft* Visual Studio*, Microsoft* Visual Studio Tools*, Microsoft* Visual Studio* Command Prompt.</li>\n\t\t\t\t</ul>\n\t\t\t<li>Set up the environment in this shell window for use with Intel TBB.\n\t\t\t\t<br>See above for how to set up the environment for Windows*, Linux* or macOS* systems.\n\t\t\t<li>Unless you installed Intel TBB yourself, you may not have write permissions to the directory\n\t\t\t\tcontaining the example. In this case, make a copy of the example, and use the copy for the following steps.\n\t\t\t<li>In the shell window, navigate to the directory for the example\n\t\t\t\t(or to the directory for the copy of the example if you made one in the previous step).\n\t\t\t<li>Use one or more of the following commands to build and run the example.\n\t\t\t\tHere, make refers to the make command normally used on your system: this could be\n\t\t\t\tnmake, gmake, or make on Windows* systems, or make or gmake on Linux* or macOS* systems.\n\t\t\t\t<dl>\n\t\t\t\t<dt><tt>make</tt>\n\t\t\t\t<dd>Default build and run. Equivalent to 'make release test'.\n\t\t\t\t<dt><tt>make release</tt>\n\t\t\t\t<dd>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make debug</tt>\n\t\t\t\t<dd>Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make test</tt>\n\t\t\t\t<dd>Run an executable previously produced by one of the above commands.\n\t\t\t\t<dt><tt>make <b>[</b>(above options or targets)<b>]</b> CXX=<b>{</b>icl, icc<b>}</b></tt>\n\t\t\t\t<dd>Build and run as above, but use Intel&reg; C++ Compiler instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or macOS* systems).\n\t\t\t\t<dt><tt>make <b>[</b>(above options or targets)<b>]</b> offload=mic</tt>\n\t\t\t\t<dd>Build and run the offload version of an example for Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture.\n\t\t\t\t\t<br>\n\t\t\t\t\t<div class=\"note\">\n\t\t\t\t\t\tNote: Only Intel&reg; MIC Architecture with Linux* based host is currently supported.\n\t\t\t\t\t</div>\n\t\t\t\t<dt><tt>make clean</tt>\n\t\t\t\t<dd>Remove any executables or intermediate files produced by the above commands.\n\t\t\t\t</dl>\n\t\t\t</ol>\n\t\t\t</div>\n\t\t\t<br>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a> (available only in the Intel&reg; Parallel Studio and Intel&reg; System Studio Online Samples packages and the open-source version of Intel TBB)\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<br>\n\t\t\t<div class=\"tablenoborder\">\n\t\t\t<table border=\"1\" rules=\"all\" frame=\"border\" cellspacing=\"0\" cellpadding=\"4\" summary=\"\"> \n\t\t\t\t<thead align=\"left\"> \n\t\t\t\t<tr> \n\t\t\t\t\t<th width=\"100%\" align=\"left\" class=\"cellrowborder\" valign=\"top\"> \n\t\t\t\t\t\t<p>Optimization Notice</p>\n\t\t\t\t\t</th>\n\t\t\t \t</tr>\n\t\t\t\t</thead>\n\t\t\t \n\t\t\t\t<tbody> \n\t\t\t\t<tr> \n\t\t\t\t\t<td width=\"100%\" class=\"bgcolor(#f5f5f5)\" valign=\"top\" bgcolor=\"#f5f5f5\"> \n\t\t\t\t\t  <p>Intel's compilers may or may not optimize to the same \n\t\t\t\t\t  degree for non-Intel microprocessors for optimizations that \n\t\t\t\t\t  are not unique to Intel microprocessors. These optimizations \n\t\t\t\t\t  include SSE2, SSE3, and SSSE3 instruction sets and other \n\t\t\t\t\t  optimizations. Intel does not guarantee the availability, \n\t\t\t\t\t  functionality, or effectiveness of any optimization on \n\t\t\t\t\t  microprocessors not manufactured by Intel. \n\t\t\t\t\t  Microprocessor-dependent optimizations in this product are \n\t\t\t\t\t  intended for use with Intel microprocessors. Certain \n\t\t\t\t\t  optimizations not specific to Intel microarchitecture are \n\t\t\t\t\t  reserved for Intel microprocessors. Please refer to the \n\t\t\t\t\t  applicable product User and Reference Guides for more \n\t\t\t\t\t  information regarding the specific instruction sets covered by \n\t\t\t\t\t  this notice. \n\t\t\t\t\t  </p>\n\t \t\t\t\t  <p>Notice revision #20110804 \n\t\t\t\t\t  </p>\n\t\t\t\t  </td>\n\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t\t\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_do algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_do</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_do</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"parallel_preorder/readme.html\">parallel_preorder</a>\n\t\t\t\t<dd>Parallel preorder traversal of a graph.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/Graph.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <cstdlib>\n#include \"Graph.h\"\n#include <iostream>\n\nusing namespace std;\n\nvoid Graph::create_random_dag( size_t number_of_nodes ) {\n    my_vertex_set.resize(number_of_nodes);\n    for( size_t k=0; k<number_of_nodes; ++k ) {\n        Cell& c = my_vertex_set[k];\n        int op = int((rand()>>8)%5u);\n        if( op>int(k) ) op = int(k);\n        switch( op ) {\n            default:\n                c.op = OP_VALUE;\n                c.value = Cell::value_type((float)k);\n                break;\n            case 1:\n                c.op = OP_NEGATE;\n                break;\n            case 2:\n                c.op = OP_SUB;\n                break;\n            case 3: \n                c.op = OP_ADD;\n                break;\n            case 4: \n                c.op = OP_MUL;\n                break;\n        }\n        for( int j=0; j<ArityOfOp[c.op]; ++j ) {\n            Cell& input = my_vertex_set[rand()%k];\n            c.input[j] = &input;\n        }\n    }\n}\n\nvoid Graph::print() {\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        std::cout<<\"Cell \"<<k<<\":\";\n        for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )\n            std::cout<<\" \"<<int(my_vertex_set[k].successor[j] - &my_vertex_set[0]);\n        std::cout<<std::endl;\n    }\n}\n\nvoid Graph::get_root_set( vector<Cell*>& root_set ) {\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        my_vertex_set[k].successor.clear();\n    }\n    root_set.clear();\n    for( size_t k=0; k<my_vertex_set.size(); ++k ) {\n        Cell& c = my_vertex_set[k];\n        c.ref_count = ArityOfOp[c.op];\n        for( int j=0; j<ArityOfOp[c.op]; ++j ) {\n            c.input[j]->successor.push_back(&c);\n        }\n        if( ArityOfOp[c.op]==0 )\n            root_set.push_back(&my_vertex_set[k]);\n    }\n}\n\nvoid Cell::update() {\n    switch( op ) {\n        case OP_VALUE:\n            break;\n        case OP_NEGATE:\n            value = -(input[0]->value);\n            break;\n        case OP_ADD:\n            value = input[0]->value + input[1]->value;\n            break;\n        case OP_SUB:\n            value = input[0]->value - input[1]->value;\n            break;\n        case OP_MUL:\n            value = input[0]->value * input[1]->value;\n            break;\n    }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/Graph.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"Matrix.h\"\n#include \"tbb/atomic.h\"\n#include <vector>\n\nenum OpKind {\n    // Use Cell's value\n    OP_VALUE,\n    // Unary negation\n    OP_NEGATE,\n    // Addition\n    OP_ADD,\n    // Subtraction\n    OP_SUB,\n    // Multiplication\n    OP_MUL\n};\n\nstatic const int ArityOfOp[] = {0,1,2,2,2};\n\nclass Cell {\npublic:\n    //! Operation for this cell\n    OpKind op;\n\n    //! Inputs to this cell\n    Cell* input[2];\n   \n    //! Type of value stored in a Cell\n    typedef Matrix value_type;\n\n    //! Value associated with this Cell\n    value_type value;\n\n    //! Set of cells that use this Cell as an input\n    std::vector<Cell*> successor;\n\n    //! Reference count of number of inputs that are not yet updated.\n    tbb::atomic<int> ref_count;\n\n    //! Update the Cell's value.\n    void update();\n\n    //! Default constructor\n    Cell() {}\n};\n\n//! A directed graph where the vertices are Cells.\nclass Graph {\n    std::vector<Cell> my_vertex_set;\npublic:\n    //! Create a random acyclic directed graph\n    void create_random_dag( size_t number_of_nodes );\n\n    //! Print the graph\n    void print();\n\n    //! Get set of cells that have no inputs.\n    void get_root_set( std::vector<Cell*>& root_set );\n};\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=parallel_preorder\nARGS=\nPERF_RUN_ARGS=auto silent 500000  100\nLIGHT_ARGS=1:auto:+4 n-of-traversals=50\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n\nperf_build:\trelease\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/Matrix.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nclass Matrix {\n    static const int n = 20;\n    float array[n][n];\npublic:\n    Matrix() {}\n    Matrix( float z ) {\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                array[i][j] = i==j ? z : 0;\n    }\n    friend Matrix operator-( const Matrix& x ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = -x.array[i][j];\n        return result;\n    }\n    friend Matrix operator+( const Matrix& x, const Matrix& y ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = x.array[i][j] + y.array[i][j];\n        return result;\n    }\n    friend Matrix operator-( const Matrix& x, const Matrix& y ) {\n        Matrix result;\n        for( int i=0; i<n; ++i )\n            for( int j=0; j<n; ++j )\n                result.array[i][j] = x.array[i][j] - y.array[i][j];\n        return result;\n    }\n    friend Matrix operator*( const Matrix& x, const Matrix& y ) {\n        Matrix result(0);\n        for( int i=0; i<n; ++i ) \n            for( int k=0; k<n; ++k )\n                for( int j=0; j<n; ++j )\n                    result.array[i][j] += x.array[i][k] * y.array[k][j];\n        return result;\n    }\n};\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Example program that shows how to use parallel_do to do parallel preorder\n   traversal of a directed acyclic graph. */\n\n#include <cstdlib>\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n#include <iostream>\n#include <vector>\n#include \"Graph.h\"\n\n// some forward declarations\nclass Cell;\nvoid ParallelPreorderTraversal( const std::vector<Cell*>& root_set );\n\n//------------------------------------------------------------------------\n// Test driver\n//------------------------------------------------------------------------\nutility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);\nstatic unsigned nodes = 1000;\nstatic unsigned traversals = 500;\nstatic bool SilentFlag = false;\n\n//! Parse the command line.\nstatic void ParseCommandLine( int argc, const char* argv[] ) {\n    utility::parse_cli_arguments(\n            argc,argv,\n            utility::cli_argument_pack()\n                //\"-h\" option for displaying help is present implicitly\n                .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n                .positional_arg(nodes,\"n-of-nodes\",\"number of nodes in the graph.\")\n                .positional_arg(traversals,\"n-of-traversals\",\"number of times to evaluate the graph. Reduce it (e.g. to 100) to shorten example run time\\n\")\n                .arg(SilentFlag,\"silent\",\"no output except elapsed time \")\n    );\n}\n\nint main( int argc, const char* argv[] ) {\n    try {\n        tbb::tick_count main_start = tbb::tick_count::now();\n        ParseCommandLine(argc,argv);\n\n        // Start scheduler with given number of threads.\n        for( int p=threads.first; p<=threads.last; p = threads.step(p) ) {\n            tbb::tick_count t0 = tbb::tick_count::now();\n            tbb::task_scheduler_init init(p);\n            srand(2);\n            size_t root_set_size = 0;\n            {\n                Graph g;\n                g.create_random_dag(nodes);\n                std::vector<Cell*> root_set;\n                g.get_root_set(root_set);\n                root_set_size = root_set.size();\n                for( unsigned int trial=0; trial<traversals; ++trial ) {\n                    ParallelPreorderTraversal(root_set);\n                }\n            }\n            tbb::tick_count::interval_t interval = tbb::tick_count::now()-t0;\n            if (!SilentFlag){\n                std::cout\n                    <<interval.seconds()<<\" seconds using \"<<p<<\" threads (\"<<root_set_size<<\" nodes in root_set)\\n\";\n            }\n        }\n        utility::report_elapsed_time((tbb::tick_count::now()-main_start).seconds());\n\n        return 0;\n    }catch(std::exception& e){\n        std::cerr\n            << \"unexpected error occurred. \\n\"\n            << \"error description: \"<<e.what()<<std::endl;\n        return -1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/parallel_preorder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"tbb/parallel_do.h\"\n#include <vector>\n#include <algorithm>\n#include \"Graph.h\"\n\n\nclass Body {\npublic:\n    Body() {};\n\n    //------------------------------------------------------------------------\n    // Following signatures are required by parallel_do\n    //------------------------------------------------------------------------\n    typedef Cell* argument_type;\n\n    void operator()( Cell* c, tbb::parallel_do_feeder<Cell*>& feeder ) const {\n        c->update();\n        // Restore ref_count in preparation for subsequent traversal.\n        c->ref_count = ArityOfOp[c->op];\n        for( size_t k=0; k<c->successor.size(); ++k ) {\n            Cell* successor = c->successor[k];\n            // ref_count is used for inter-task synchronization.\n            // Correctness checking tools might not take this into account, and report\n            // data races between different tasks, that are actually synchronized.\n            if( 0 == --(successor->ref_count) ) {\n                feeder.add( successor );\n            }\n        }\n    }\n};\n\nvoid ParallelPreorderTraversal( const std::vector<Cell*>& root_set ) {\n    tbb::parallel_do(root_set.begin(), root_set.end(),Body());\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_do/parallel_preorder/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Parallel_preorder sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Parallel_preorder sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tExample that uses parallel_do to do parallel preorder traversal of a sparse graph.\n\t<br><br>\n\t\tEach vertex in the graph is called a \"cell\".  \n\t\tEach cell has a value. \n\t\tThe value is a matrix. \n\t\tSome of the cells have operators\n\t\tthat compute the cell's value, using other cell's values as input.\n\t\tA cell that uses the value of cell x is called a successor of x.\n\t<br><br>\n\t\tThe algorithm works as follows. \n\t\t<ol>\n\t\t<li> Compute the set of cells that have no inputs. This set is called <tt>root_set</tt>.\n\t\t<li> Each cell has an associated field <tt>ref_count</tt> that is an atomic integer.\n\t\t\t Initialize <tt>ref_count</tt> to the number of inputs for the Cell.\n\t\t<li> Update each cell in <tt>root_set</tt>, by applying a <tt>parallel_do</tt> to a <tt>root_set</tt>\n\t\t<li> After updating a cell, for each of its successors \n\t\t<ol>\n\t\t<li> Atomically decrement the successor's <tt>ref_count</tt>\n\t\t<li> If the count became zero, add the cell to the set of cells to be updated,\n\t\t\t by calling <tt>parallel_do_feeder_impl::add</tt>.\n\t\t</ol>\n\t\t</ol>\n\t\tThe times printed are for the traversal and update, \n\t\tand do not include time for computing the root_set.\n\t<br><br>\n\t\tThe example is using custom synchronization via <tt>ref_count</tt> atomic variable.\n\t\tCorrectness checking tools might not take this into account, and report data races\n\t\tbetween different tasks that are actually synchronized.\n\t<br><br>\n\t\t<b>Note:</b> It is important to understand that this example is unlikely to show speedup \n\t\tif the cell values are changed to type \"float\".  The reason is twofold.\n\t\t<ul>\n\t\t<li> The smaller value type causes each Cell to be significantly smaller than a cache line,\n\t\t\t which leads to false sharing conflicts.\n\t\t<li> The time to update the cells becomes very small, and consequently the overhead of\n\t\t\t parallel_do swamps the useful work.\n\t\t</ul>\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"parallel_preorder.cpp\">parallel_preorder.cpp</a>\n\t\t\t\t<dd>Implementation of the parallel preorder traversal algorithm.\n\t\t\t\t<dt><a href=\"Graph.h\">Graph.h</a>\n\t\t\t\t<dd>Interfaces of the Graph and Cell classes.\n\t\t\t\t<dt><a href=\"Graph.cpp\">Graph.cpp</a>\n\t\t\t\t<dd>Implementations of the Graph and Cell classes.\n\t\t\t\t<dt><a href=\"Matrix.h\">Matrix.h</a>\n\t\t\t\t<dd>The Matrix class definition.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>parallel_preorder <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>parallel_preorder [<i>n-of-threads</i>=value] [<i>n-of-nodes</i>=value] [<i>n-of-traversals</i>=value] [<i>silent</i>] </tt>\n\t\t\t\t<dt><tt>parallel_preorder [<i>n-of-threads</i> [<i>n-of-nodes</i> [<i>n-of-traversals</i>]]] [<i>silent</i>] </tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-nodes</i> is a number of nodes in the graph. Default value is 1000.<br>\n\t\t\t\t\t<i>n-of-traversals</i> is the number of times to evaluate the graph. Default value is 500.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads and smaller number of traversals, e.g., <tt>parallel_preorder&nbsp;4&nbsp;1000&nbsp;5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=game_of_life\nARGS=2:4 -t 5\nLIGHT_ARGS=1:2 -t 5\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp\n\t$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp\n\t$(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\trm -f $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Game_of_life sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Game_of_life sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe \"Game of life\" example demonstrates interoperability of Intel&#174; Threading Building Blocks (Intel&#174; TBB) \n\t\tand Microsoft* .NET*.\n\t<br><br>\n\t\tThis program runs 2 simultaneous instances of the classic Conway's \"Game of Life\". \n\t\tOne of these instances uses serial calculations to update the board. The other one calculates in parallel with Intel TBB.\n\t\tThe visualization is written in managed C++ and uses .NET CLR.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/Form1.h\">Form1.h</a>, <a href=\"src/Board.h\">Board.h</a>\n\t\t\t\t<dd>Header files for GUI classes.\n\t\t\t\t<dt><a href=\"src/Evolution.h\">Evolution.h</a>, <a href=\"src/Evolution.cpp\">Evolution.cpp</a>\n\t\t\t\t<dd>Contain class hierarchy to implement game evolution in serial and parallel.\n\t\t\t\t<dt><a href=\"src/Update_state.cpp\">Update_state.cpp </a>\n\t\t\t\t<dd>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.\n\t\t\t\t<dt><a href=\"src/Game_of_life.cpp\">Game_of_life.cpp </a>\n\t\t\t\t<dd>Contains program entry point and other source not related to logical structure of the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/\">src</a>\n\t\t\t\t<dd>Contains source files mentioned above.\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nusing namespace System;\nusing namespace System::Reflection;\nusing namespace System::Runtime::CompilerServices;\nusing namespace System::Runtime::InteropServices;\nusing namespace System::Security::Permissions;\n\n//\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n//\n[assembly:AssemblyTitleAttribute(\"Automata\")];\n[assembly:AssemblyDescriptionAttribute(\"\")];\n[assembly:AssemblyConfigurationAttribute(\"\")];\n[assembly:AssemblyCompanyAttribute(\"\")];\n[assembly:AssemblyProductAttribute(\"Automata\")];\n[assembly:AssemblyCopyrightAttribute(\"Copyright (c)  2007\")];\n[assembly:AssemblyTrademarkAttribute(\"\")];\n[assembly:AssemblyCultureAttribute(\"\")];\n\n//\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the value or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n\n[assembly:AssemblyVersionAttribute(\"1.0.*\")];\n\n[assembly:ComVisible(false)];\n\n[assembly:CLSCompliantAttribute(true)];\n\n[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Board.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __BOARD_H__ \n#define __BOARD_H__\n\n#define WIN32_LEAN_AND_MEAN\n\n#ifndef _CONSOLE\n#include <windows.h>\n\nusing namespace System;\nusing namespace System::ComponentModel;\nusing namespace System::Collections;\nusing namespace System::Windows::Forms;\nusing namespace System::Data;\nusing namespace System::Drawing;\n#define LabelPtr Label^\n#define BoardPtr Board^\n#else\n#define LabelPtr int*\n#define BoardPtr Board*\n#endif\n\nstruct Matrix \n{\n    int width;\n    int height;\n    char* data;\n};\n\n#ifndef _CONSOLE\npublic ref class Board : public System::Windows::Forms::UserControl\n#else\nclass Board\n#endif\n    {\n    public:\n        Board(int width, int height, int squareSize, LabelPtr counter);        \n        virtual ~Board();\n        void seed(int s);\n        void seed(const BoardPtr s);\n#ifndef _CONSOLE\n    protected: \n        virtual void OnPaint(PaintEventArgs^ e) override;        \n        void Board::draw(Graphics^ g);\n\n    private:\n        System::ComponentModel::Container ^components;\n\n#pragma region Windows Form Designer generated code\n        void InitializeComponent(void)\n        {\n            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;\n        }\n#pragma endregion\n\n    private: delegate void drawDelegate(Int32);\n    public:\n        //! Called from the Evolution thread\n        void draw( Int32 nCurIteration )\n        {\n            if (this->InvokeRequired)\n            {\n                drawDelegate^ d = gcnew drawDelegate(this, &Board::draw);\n                IAsyncResult^ result = BeginInvoke(d, nCurIteration);\n                EndInvoke(result);\n                return;\n            }\n            m_counter->Text = nCurIteration.ToString();\n            Invalidate();\n        }\n#endif\n    public:\n        Matrix *m_matrix;    \n\n    private:\n#ifndef _CONSOLE\n        SolidBrush^ m_occupiedBrush;\n        SolidBrush^ m_freeBrush;\n        Graphics^ m_graphics;\n        Graphics^ m_mem_dc;\n        Bitmap^ m_bmp;\n#endif\n        int m_width;\n        int m_height;\n        int m_squareSize;\n        LabelPtr m_counter;\n    };\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Evolution.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    Evolution.cpp: implementation file for evolution classes; evolution \n                  classes do looped evolution of patterns in a defined \n                  2 dimensional space\n*/\n\n#include \"Evolution.h\"\n#include \"Board.h\"\n\n#ifdef USE_SSE\n#define GRAIN_SIZE 14\n#else\n#define GRAIN_SIZE 4000\n#endif\n#define TIME_SLICE 330\n\n/*\n    Evolution\n*/\n\n/**\n    Evolution::UpdateMatrix() - moves the calculated destination data \n    to the source data block. No destination zeroing is required since it will \n    be completely overwritten during the next calculation cycle.\n**/\nvoid Evolution::UpdateMatrix()\n{\n    memcpy(m_matrix->data, m_dest, m_size);\n}\n\n/*\n    SequentialEvolution\n*/\n\n//! SequentialEvolution::Run - begins looped evolution\n#ifndef _CONSOLE\nvoid SequentialEvolution::Run()\n{\n#else\nvoid SequentialEvolution::Run(double execution_time, int nthread)\n{\n    printf(\"Starting game (Sequential evolution)\\n\");\n#endif\n\n    m_nIteration = 0;\n    m_serial_time = 0;\n    tbb::tick_count t0 = tbb::tick_count::now();\n    while (!m_done)\n    {\n        if( !is_paused ) \n        {\n            tbb::tick_count t = tbb::tick_count::now();\n            Step();\n            tbb::tick_count t1 = tbb::tick_count::now();\n            ++m_nIteration;\n            double  work_time = (t1-t0).seconds();\n#ifndef _CONSOLE\n            if ( work_time * 1000 < TIME_SLICE )\n                continue;\n            m_serial_time += work_time;\n            m_board->draw(m_nIteration);\n#else\n            m_serial_time += work_time;\n#endif\n        }\n        //! Let the parallel algorithm work uncontended almost the same time\n        //! as the serial one. See ParallelEvolution::Run() as well.\n#ifndef _CONSOLE\n        m_evt_start_parallel->Set();\n        m_evt_start_serial->WaitOne();\n        t0 = tbb::tick_count::now();\n#else\n        t0 = tbb::tick_count::now();\n        if(m_serial_time > execution_time)\n        {\n            printf(\"iterations count = %d time = %g\\n\", m_nIteration, m_serial_time);\n            break;\n        }\n#endif\n    }\n}\n\n//! SequentialEvolution::Step() - override of step method\nvoid SequentialEvolution::Step()\n{\n        if( !is_paused ) \n    {\n#ifdef USE_SSE\n    UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height);\n#else\n    UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1);\n    UpdateMatrix();\n#endif\n        }\n}\n\n/*\n    ParallelEvolution\n*/\n\n//! SequentialEvolution::Run - begins looped evolution\n#ifndef _CONSOLE\nvoid ParallelEvolution::Run()\n{\n#else\nvoid ParallelEvolution::Run(double execution_time, int nthread)\n{\n    if(nthread == tbb::task_scheduler_init::automatic)\n        printf(\"Starting game (Parallel evolution for automatic number of thread(s))\\n\");\n    else\n        printf(\"Starting game (Parallel evolution for %d thread(s))\\n\", nthread);\n#endif\n\n    m_nIteration = 0;\n    m_parallel_time = 0;\n\n#ifndef _CONSOLE\n    //! start task scheduler as necessary\n    if (m_pInit == NULL)\n    {\n        m_pInit = new tbb::task_scheduler_init();\n    }\n    m_evt_start_parallel->WaitOne();\n#else\n    tbb::task_scheduler_init init(nthread);\n#endif\n\n    double  work_time = m_serial_time;\n    tbb::tick_count t0 = tbb::tick_count::now();\n\n    while (!m_done)\n    {\n        if( !is_paused ) \n        {\n            tbb::tick_count t = tbb::tick_count::now();\n            Step();\n            tbb::tick_count t1 = tbb::tick_count::now();\n            ++m_nIteration;\n            double real_work_time = (t1-t0).seconds();\n#ifndef _CONSOLE\n            if ( real_work_time < work_time )\n                continue;\n            m_parallel_time += real_work_time;\n            m_board->draw(m_nIteration); \n#else\n            m_parallel_time += real_work_time;\n#endif\n        }\n        //! Let the serial algorithm work the same time as the parallel one.\n#ifndef _CONSOLE\n        m_evt_start_serial->Set();\n        m_evt_start_parallel->WaitOne();\n\n        work_time = m_serial_time - m_parallel_time;\n        t0 = tbb::tick_count::now();\n#else\n        t0 = tbb::tick_count::now();\n        if(m_parallel_time > execution_time)\n        {\n            printf(\"iterations count = %d time = %g\\n\", m_nIteration, m_parallel_time);\n            init.terminate();\n            break;\n        }\n#endif\n    }\n}\n\n/**\n    class tbb_parallel_task\n    \n    TBB requires a class for parallel loop implementations. The actual \n    loop \"chunks\" are performed using the () operator of the class. \n    The blocked_range contains the range to calculate. Please see the \n    TBB documentation for more information.\n**/\n#ifndef _CONSOLE\npublic class tbb_parallel_task\n#else\nclass tbb_parallel_task\n#endif\n{\npublic:\n    static void set_values (Matrix* source, char* dest)\n    {\n        m_source = source;\n        m_dest = dest;\n        return;\n    }\n\n    void operator()( const tbb::blocked_range<size_t>& r ) const \n    {\n        int begin = (int)r.begin();            //! capture lower range number for this chunk\n        int end = (int)r.end();                //! capture upper range number for this chunk\n        UpdateState(m_source, m_dest, begin, end);\n    }\n\n    tbb_parallel_task () {}\n\nprivate:\n    static Matrix* m_source;\n    static char* m_dest;\n};\n\nMatrix* tbb_parallel_task::m_source;\nchar* tbb_parallel_task::m_dest;\n\n//! ParallelEvolution::Step() - override of Step method\nvoid ParallelEvolution::Step()\n{\n    size_t begin = 0;                   //! beginning cell position\n#ifdef USE_SSE\n    size_t end = m_matrix->height;      //! ending cell position\n#else\n    size_t end = m_size-1;              //! ending cell position\n#endif\n\n    //! set matrix pointers\n    tbb_parallel_task::set_values(m_matrix, m_dest);\n\n    //! do calculation loop\n    parallel_for (tbb::blocked_range<size_t> (begin, end, GRAIN_SIZE), tbb_parallel_task());\n    UpdateMatrix();\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Evolution.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/** \n    Evolution.h: Header file for evolution classes; evolution classes do \n    looped evolution of patterns in a defined 2 dimensional space \n**/\n\n#ifndef __EVOLUTION_H__\n#define __EVOLUTION_H__\n\n#include \"Board.h\"\n#include <string.h>\n#include <stdlib.h>\n#include <stdio.h>\n\n#define WIN32_LEAN_AND_MEAN\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/tick_count.h\"\n\n#ifndef _CONSOLE\n#include <windows.h>\nusing namespace System::Threading;\n#else\ntypedef unsigned int Int32;\n#endif\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end);\n\n/**\n    class Evolution - base class for SequentialEvolution and ParallelEvolution\n**/\n#ifndef _CONSOLE\npublic ref class Evolution abstract\n#else\nclass Evolution\n#endif\n{\npublic:\n    Evolution( Matrix *m,                //! beginning matrix including initial pattern\n               BoardPtr board              //! the board to update\n             ) : m_matrix(m), m_board(board), \n                 m_size(m_matrix->height * m_matrix->width), m_done(false)\n    {\n        //! allocate memory for second matrix data block\n        m_dest = new char[m_size];\n        is_paused = false;\n#ifdef _CONSOLE\n        m_serial_time = 0;\n#endif\n    }\n\n    virtual ~Evolution()\n    {\n        delete[] m_dest;\n    }\n\n    //! Run() - begins looped evolution\n#ifndef _CONSOLE\n    virtual void Run() = 0;\n#else\n    virtual void Run(double execution_time, int nthread) = 0;\n#endif\n\n    //! Quit() - tell the thread to terminate\n    virtual void Quit() { m_done = true; }\n    \n    //! Step() - performs a single evolutionary generation computation on the game matrix\n    virtual void Step() = 0;\n\n    //! SetPause() - change condition of variable is_paused\n    virtual void SetPause(bool condition)\n    {\n        if ( condition == true )\n            is_paused = true;\n        else\n            is_paused = false;\n    }\n    \nprotected:\n    /** \n        UpdateMatrix() - moves the previous destination data to the source \n        data block and zeros out destination.\n    **/\n    void UpdateMatrix();\n\nprotected:\n    Matrix*         m_matrix;       //! Pointer to initial matrix\n    char*           m_dest;         //! Pointer to calculation destination data    \n    BoardPtr        m_board;        //! The game board to update\n    int             m_size;         //! size of the matrix data block\n    volatile bool   m_done;         //! a flag used to terminate the thread\n    Int32           m_nIteration;   //! current calculation cycle index\n    volatile bool   is_paused;      //! is needed to perform next iteration\n    \n    //! Calculation time of the sequential version (since the start), seconds.\n    /**\n        This member is updated by the sequential version and read by parallel,\n        so no synchronization is necessary.\n    **/\n#ifndef _CONSOLE\n    static volatile double m_serial_time = 0;\n\n    static System::Threading::AutoResetEvent    ^m_evt_start_serial = gcnew AutoResetEvent(false),\n                                                ^m_evt_start_parallel = gcnew AutoResetEvent(false);\n#else\n    double m_serial_time;\n#endif\n};\n\n/**\n    class SequentialEvolution - derived from Evolution - calculate life generations serially\n**/\n#ifndef _CONSOLE\npublic ref class SequentialEvolution: public Evolution\n#else\nclass SequentialEvolution: public Evolution\n#endif\n{\npublic:\n    SequentialEvolution(Matrix *m, BoardPtr board)\n                       : Evolution(m, board)\n    {}\n#ifndef _CONSOLE        \n    virtual void Run() override;\n    virtual void Step() override;\n#else\n    virtual void Run(double execution_time, int nthread);\n    virtual void Step();\n#endif\n\n};\n\n/**\n    class ParallelEvolution - derived from Evolution - calculate life generations\n    in parallel using Intel(R) TBB\n**/\n#ifndef _CONSOLE\npublic ref class ParallelEvolution: public Evolution\n#else\nclass ParallelEvolution: public Evolution\n#endif\n{\npublic:\n\n    ParallelEvolution(Matrix *m, BoardPtr board)\n                     : Evolution(m, board),\n                       m_parallel_time(0)\n    {\n        // instantiate a task_scheduler_init object and save a pointer to it\n        m_pInit = NULL;\n    }\n    \n    ~ParallelEvolution()\n    {\n        //! delete task_scheduler_init object\n        if (m_pInit != NULL)\n            delete m_pInit;\n    }\n#ifndef _CONSOLE\n    virtual void Run() override;\n    virtual void Step() override;\n#else\n    virtual void Run(double execution_time, int nthread);\n    virtual void Step();\n#endif\n    \n\nprivate:\n    tbb::task_scheduler_init* m_pInit;\n\n    double m_parallel_time;\n};\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Form1.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _CONSOLE\n#ifndef __FORM1_H__\n#define __FORM1_H__\n\n#include <time.h>\n#include \"Board.h\"\n#include \"Evolution.h\"\n\n#define BOARD_SQUARE_SIZE 2\n\n    using namespace System;\n    using namespace System::ComponentModel;\n    using namespace System::Collections;\n    using namespace System::Windows::Forms;\n    using namespace System::Data;\n    using namespace System::Drawing;\n\n    public ref class Form1 : public System::Windows::Forms::Form\n    {\n    public:\n        Form1(void)\n        {\n            InitializeComponent();\n\n            FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;\n            ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height);\n\n            int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE;\n            int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE;\n\n            m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen);\n            m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen);\n            \n            Controls->Add(m_board1);\n            Controls->Add(m_board2);\n\n            m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height);\n            m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height);\n\n            m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1);\n            m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2);\n\n            m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run));\n            m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run));        \n\n            Thread::CurrentThread->Priority = ThreadPriority::AboveNormal;\n\n            m_suspend = true;\n        }\n    protected:\n        ~Form1()\n        {\n            if (components)\n            {\n                delete components;\n            }\n        }\n    private: System::Windows::Forms::MenuStrip^  menuStrip1;\n    private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  gameToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  seedToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  runToolStripMenuItem;\n    private: System::Windows::Forms::ToolStripMenuItem^  pauseToolStripMenuItem;\n    private: Board^ m_board1;\n    private: Board^ m_board2;\n    private: System::Windows::Forms::Label^  Sequential;\n    private: System::Windows::Forms::Label^  label1;\n    private: static const int m_sepWidth = 5;\n    private: static const int m_ribbonHeight = 26;\n    private: SequentialEvolution^ m_seq;\n    private: ParallelEvolution^ m_par;\n    private: Thread^ m_seqThread;\n    private: Thread^ m_parThread;\n    private: System::Windows::Forms::Label^  seqGen;\n    private: System::Windows::Forms::Label^  parGen;\n    private: bool m_suspend;\n\n    private:\n        System::ComponentModel::Container ^components;\n\n#pragma region Windows Form Designer generated code\n        void InitializeComponent(void)\n        {\n            this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());\n            this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());\n            this->Sequential = (gcnew System::Windows::Forms::Label());\n            this->label1 = (gcnew System::Windows::Forms::Label());\n            this->seqGen = (gcnew System::Windows::Forms::Label());\n            this->parGen = (gcnew System::Windows::Forms::Label());\n            this->menuStrip1->SuspendLayout();\n            this->SuspendLayout();\n            // \n            // menuStrip1\n            // \n            this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) \n                {this->fileToolStripMenuItem, this->gameToolStripMenuItem});\n            this->menuStrip1->Location = System::Drawing::Point(0, 0);\n            this->menuStrip1->Name = L\"menuStrip1\";\n            this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2);\n            this->menuStrip1->Size = System::Drawing::Size(1600, 26);\n            this->menuStrip1->TabIndex = 0;\n            this->menuStrip1->Text = L\"menuStrip1\";\n            this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);\n            // \n            // fileToolStripMenuItem\n            // \n            this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->exitToolStripMenuItem});\n            this->fileToolStripMenuItem->Name = L\"fileToolStripMenuItem\";\n            this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22);\n            this->fileToolStripMenuItem->Text = L\"File\";\n            // \n            // exitToolStripMenuItem\n            // \n            this->exitToolStripMenuItem->Name = L\"exitToolStripMenuItem\";\n            this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22);\n            this->exitToolStripMenuItem->Text = L\"Exit\";\n            this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit);\n            // \n            // gameToolStripMenuItem\n            // \n            this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->seedToolStripMenuItem, \n                this->runToolStripMenuItem, this->pauseToolStripMenuItem});\n            this->gameToolStripMenuItem->Name = L\"gameToolStripMenuItem\";\n            this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22);\n            this->gameToolStripMenuItem->Text = L\"Game\";\n            // \n            // seedToolStripMenuItem\n            // \n            this->seedToolStripMenuItem->Name = L\"seedToolStripMenuItem\";\n            this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->seedToolStripMenuItem->Text = L\"Seed\";\n            this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed);\n            // \n            // runToolStripMenuItem\n            // \n            this->runToolStripMenuItem->Enabled = false;\n            this->runToolStripMenuItem->Name = L\"runToolStripMenuItem\";\n            this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->runToolStripMenuItem->Text = L\"Run\";\n            this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun);\n            // \n            // pauseToolStripMenuItem\n            // \n            this->pauseToolStripMenuItem->Enabled = false;\n            this->pauseToolStripMenuItem->Name = L\"pauseToolStripMenuItem\";\n            this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22);\n            this->pauseToolStripMenuItem->Text = L\"Pause\";\n            this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume);\n            // \n            // Sequential\n            // \n            this->Sequential->AutoSize = true;\n            this->Sequential->Font = (gcnew System::Drawing::Font(L\"Microsoft Sans Serif\", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, \n                static_cast<System::Byte>(0)));\n            this->Sequential->Location = System::Drawing::Point(12, 32);\n            this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->Sequential->Name = L\"Sequential\";\n            this->Sequential->Size = System::Drawing::Size(239, 18);\n            this->Sequential->TabIndex = 1;\n            this->Sequential->Text = L\"Sequential Algorithm      generation:\";\n            // \n            // label1\n            // \n            this->label1->AutoSize = true;\n            this->label1->Font = (gcnew System::Drawing::Font(L\"Microsoft Sans Serif\", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, \n                static_cast<System::Byte>(0)));\n            this->label1->Location = System::Drawing::Point(813, 32);\n            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->label1->Name = L\"label1\";\n            this->label1->Size = System::Drawing::Size(219, 18);\n            this->label1->TabIndex = 2;\n            this->label1->Text = L\"Parallel Algorithm     generation: \";\n            // \n            // seqGen\n            // \n            this->seqGen->AutoSize = true;\n            this->seqGen->Location = System::Drawing::Point(289, 35);\n            this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->seqGen->Name = L\"seqGen\";\n            this->seqGen->Size = System::Drawing::Size(16, 17);\n            this->seqGen->TabIndex = 3;\n            this->seqGen->Text = L\"0\";\n            // \n            // parGen\n            // \n            this->parGen->AutoSize = true;\n            this->parGen->Location = System::Drawing::Point(1068, 35);\n            this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);\n            this->parGen->Name = L\"parGen\";\n            this->parGen->Size = System::Drawing::Size(16, 17);\n            this->parGen->TabIndex = 4;\n            this->parGen->Text = L\"0\";\n            // \n            // Form1\n            // \n            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);\n            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;\n            this->ClientSize = System::Drawing::Size(1600, 738);\n            this->Controls->Add(this->parGen);\n            this->Controls->Add(this->seqGen);\n            this->Controls->Add(this->label1);\n            this->Controls->Add(this->Sequential);\n            this->Controls->Add(this->menuStrip1);\n            this->MainMenuStrip = this->menuStrip1;\n            this->Margin = System::Windows::Forms::Padding(4);\n            this->MaximizeBox = false;\n            this->Name = L\"Form1\";\n            this->Text = L\"Game of Life\";\n            this->menuStrip1->ResumeLayout(false);\n            this->menuStrip1->PerformLayout();\n            this->ResumeLayout(false);\n            this->PerformLayout();\n\n        }\n#pragma endregion    \n    protected: \n        void CloseApp ()\n        {\n            m_seq->Quit();\n            m_par->Quit();\n            //! Perform a very ungracious exit, should coordinate the threads\n            System::Environment::Exit(0);            \n        }\n    \n    protected: \n        virtual void OnPaint(PaintEventArgs^ e) override\n        {\n        }\n\n        virtual void OnFormClosing(FormClosingEventArgs^ e) override\n        { \n            CloseApp();\n        }\n    \n        void OnExit(System::Object^ sender, System::EventArgs^ e)\n        {                \n            CloseApp();\n        }\n\n        void OnSeed(System::Object^ sender, System::EventArgs^ e)\n        {\n            this->seedToolStripMenuItem->Enabled = false;\n            this->runToolStripMenuItem->Enabled = true;            \n            time_t now = time(NULL);\n            this->m_board1->seed((int)now);\n            this->m_board2->seed(this->m_board1);\n            this->Invalidate();\n        }\n\n        void OnRun(System::Object^ sender, System::EventArgs^ e)\n        {    \n            this->runToolStripMenuItem->Enabled = false;        \n            this->pauseToolStripMenuItem->Enabled = true;\n            m_seqThread->Start();\n            m_parThread->Start();    \n        }\n\n        void OnPauseResume(System::Object^ sender, System::EventArgs^ e)\n        {    \n            if (m_suspend)\n            {\n                m_seq->SetPause(true);\n                m_par->SetPause(true);\n                this->pauseToolStripMenuItem->Text = L\"Resume\";\n            }\n            else\n            {\n                m_seq->SetPause(false);\n                m_par->SetPause(false);            \n                this->pauseToolStripMenuItem->Text = L\"Pause\";\n            }\n            m_suspend = !m_suspend;\n        }\n\n    private: \n        System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) \n        {}\n};\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Game_of_life.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* \n    Game_of_life.cpp : \n                      main project file.\n*/\n#include \"Board.h\"\n#include \"Form1.h\"\n\n#define WIN32_LEAN_AND_MEAN\n\n#ifndef _CONSOLE\n#include <windows.h>\n#else\n#include <iostream>\n#include <sstream>\n#include <time.h>\n#include \"Evolution.h\"\n\n#define BOARD_SQUARE_SIZE 2\n\nint low;                            //! lower range limit of threads\nint high;                           //! high range limit of threads\ndouble execution_time;              //! time for game of life iterations\n#endif\n\nBoard::Board(int width, int height, int squareSize, LabelPtr counter)\n: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter)\n{\n#ifndef _CONSOLE\n    InitializeComponent();\n    DoubleBuffered = true;\n\n    this->Width = m_squareSize*width;\n    this->Height = m_squareSize*height;\n#endif\n    m_matrix = new Matrix();\n    m_matrix->width = width;\n    m_matrix->height = height;\n    m_matrix->data = new char[width*height];\n    memset(m_matrix->data, 0, width*height);\n#ifndef _CONSOLE\n    m_occupiedBrush = gcnew SolidBrush(Color::Black);\n    m_freeBrush = gcnew SolidBrush(Color::LightGray);\n    \n    m_graphics = CreateGraphics();\n    m_bmp = gcnew Bitmap(Width, Height);\n    m_mem_dc = Graphics::FromImage(m_bmp);\n#endif\n}\n\nBoard::~Board()\n{\n#ifndef _CONSOLE\n    if (components)\n    {\n        delete components;\n    }\n#endif\n    delete[] m_matrix->data;\n    delete m_matrix;\n}\n\nvoid Board::seed(int s)\n{        \n    srand(s);\n    for (int j=0; j<m_height; j++)\n    {\n        for (int i=0; i<m_width; i++)\n        {        \n            int x = rand()/(int)(((unsigned)RAND_MAX + 1) / 100);\n            m_matrix->data[i+j*m_width] = x>75? 1: 0;               // 25% occupied\n        }\n    }\n#ifndef _CONSOLE\n    Invalidate();\n#endif\n}\n\nvoid Board::seed( const BoardPtr src )\n{        \n            memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width);\n#ifndef _CONSOLE\n    Invalidate();\n#endif\n}\n\n#ifndef _CONSOLE\nvoid Board::draw(Graphics^ g)\n{\n    m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize));\n    for (int j=0; j<m_height; j++)\n    {\n        for (int i=0; i<m_width; i++)\n        {    \n            if ( m_matrix->data[i+j*m_width] )\n            {\n                m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize));\n            }\n        }\n    }\n    g->DrawImage(m_bmp, 0, 0);\n}\n\nvoid Board::OnPaint(PaintEventArgs^ e)\n{\n    draw(e->Graphics);\n}\n\n[STAThreadAttribute]\nint main(array<System::String ^> ^args)\n{\n    // Enabling Windows XP visual effects before any controls are created\n    Application::EnableVisualStyles();\n    Application::SetCompatibleTextRenderingDefault(false); \n\n    // Create the main window and run it\n    Application::Run(gcnew Form1());\n    return 0;\n}\n#else\n\n//! Print usage of this program\nvoid PrintUsage() \n{\n    printf(\"Usage: gol [M[:N] -t execution_time]\\nM and N are a range of numbers of threads to be used.\\nexecution_time is a time (in sec) for execution game_of_life iterations\\n\");\n    printf(\"Default values:\\nM:\\t\\tautomatic\\nN:\\t\\tM\\nexecution_time:\\t10\\n\");\n}\n\n//! Parse command line\nbool ParseCommandLine(int argc, char * argv []) \n{\n    char* s = argv[1];\n    char* end;\n    //! command line without parameters\n    if(argc == 1)\n    {\n        low = tbb::task_scheduler_init::automatic;\n        high = low;\n        execution_time = 5;\n        return true;\n    }\n    //! command line with parameters\n    if(argc != 4)\n    {\n        PrintUsage();\n        return false;\n    }\n    if(std::string(\"-t\") != argv[argc-2])\n    //! process M[:N] parameter\n    high = strtol(s,&end,0);\n    low = strtol(s,&end,0);\n    switch( *end ) \n    {\n        case ':': \n            high = strtol(end+1,0,0); \n            break;\n        case '\\0':\n            break;\n        default:\n            PrintUsage();\n            return false;\n    }\n    if (high < low)\n    {\n        std::cout << \"Set correct range. Current range: \" << low << \":\" << high << std::endl;\n        PrintUsage();\n        return false;\n\n    }\n    //! process execution_time parameter\n    execution_time = strtol(argv[argc-1],&end,0);\n    return true;\n}\n\nint main( int argc, char* argv[] ) \n{\n    if(!ParseCommandLine( argc, argv ))\n        return 1;\n    SequentialEvolution* m_seq;\n    ParallelEvolution* m_par;\n    Board* m_board1;\n    Board* m_board2; \n    int* count = NULL;\n   \n    int boardWidth = 300;\n    int boardHeight = 300;\n\n    m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);\n    m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);\n\n    time_t now = time(NULL);\n    printf(\"Generate Game of life board\\n\");\n    m_board1->seed((int)now);\n    m_board2->seed(m_board1);\n\n    m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1);\n    m_seq->Run(execution_time, 1);\n    delete m_seq;\n\n    m_par = new ParallelEvolution(m_board2->m_matrix, m_board2);\n    for( int p = low; p <= high; ++p ) \n    {\n        m_par->Run(execution_time, p);\n    }\n    delete m_par;\n\n    delete m_board1;\n    delete m_board2;\n    return 0;\n}\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/game_of_life/src/Update_state.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"Evolution.h\"\n\n#ifdef USE_SSE \n/* Update states with SSE */\n\n#include <xmmintrin.h>\n#include <emmintrin.h>\n\ninline void create_record( char * src, unsigned * dst, unsigned width)\n{\n    dst[0] |= src[width - 1];\n    for( unsigned a=0; a<31u; ++a )\n        dst[0] |= src[a]<<(a+1);\n    unsigned a;\n    for( a=31u; a<width; ++a )\n        dst[(a+1)/32u] |= src[a]<<((a+1)%32u);\n    dst[(a+1)/32u] |= src[0]<<((a+1)%32u);\n}\n\ninline void sum_offset( __m128i * X, __m128i * A, __m128i * B, __m128i * C, \n                        unsigned size_sse_ar, unsigned shift )\n{\n    for(unsigned i=0; i<size_sse_ar; ++i) \n    {\n        __m128i tmp = _mm_and_si128(A[i],X[shift + i]);    \n        A[i]=_mm_xor_si128(A[i],X[shift + i]);    \n        C[i]=_mm_or_si128(C[i],_mm_and_si128(B[i],tmp));\n        B[i]=_mm_xor_si128(B[i],tmp);\n    }\n}\n\ninline void shift_left2D( __m128i * X, unsigned height, unsigned size_sse_row )\n{\n    for( unsigned b=0; b<height; ++b ) \n    {\n        unsigned ind = b*size_sse_row;\n        unsigned x0 = X[ind].m128i_u32[0] & 1;\n\n        X[ind] =_mm_or_si128( _mm_srli_epi16(X[ind],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind], 2), 15) );\n    \n        unsigned x1 = X[ind + 1].m128i_u32[0] & 1;\n        X[ind+1] =_mm_or_si128( _mm_srli_epi16( X[ind+1],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind+1], 2), 15) );\n        X[ind].m128i_u32[3] |= x1<<31;\n        \n        unsigned x2 = X[ind + 2].m128i_u32[0] & 1;\n        X[ind+2] =_mm_or_si128( _mm_srli_epi16( X[ind+2],1), \n            _mm_slli_epi16( _mm_srli_si128( X[ind+2], 2), 15) );\n        X[ind+1].m128i_u32[3] |= x2<<31;\n        \n        unsigned* dst = (unsigned*)&X[ind];\n        dst[301/32u] |= x0<<(301%32u);\n   }\n}\n\ninline void shift_right2D( __m128i * X, unsigned height, unsigned size_sse_row )\n{\n    for( unsigned b=0; b<height; ++b ) \n    {\n        unsigned ind = b*size_sse_row;\n\n        unsigned x0 = X[ind].m128i_u32[3]; x0>>=31;\n        X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), \n            _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) );\n            \n        unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31;\n        X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1),\n                _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) );\n        X[ind + 1].m128i_u32[0] |= x0;\n                \n        unsigned* dst = (unsigned*)&X[ind];\n        unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u);\n        X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1),\n            _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) );        \n        X[ind + 2].m128i_u32[0] |= x1;    \n        X[ind].m128i_u32[0] |= x2;\n   }\n}\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)\n{\n    //300/128 + 1 =3, 3*300=900\n    unsigned size_sse_row = m_matrix->width/128 + 1; //3\n    unsigned size_sse_ar=size_sse_row * (end - begin); \n    __m128i X[906], A[900], B[900], C[900];\n    char * mas  = m_matrix->data;\n    \n    for( unsigned i=0; i<size_sse_ar; ++i)\n    {\n        A[i].m128i_u32[0]=0;A[i].m128i_u32[1]=0;A[i].m128i_u32[2]=0;A[i].m128i_u32[3]=0;\n        B[i].m128i_u32[0]=0;B[i].m128i_u32[1]=0;B[i].m128i_u32[2]=0;B[i].m128i_u32[3]=0;\n        C[i].m128i_u32[0]=0;C[i].m128i_u32[1]=0;C[i].m128i_u32[2]=0;C[i].m128i_u32[3]=0;    \n    }\n\n    for( unsigned i=0; i<size_sse_ar+6; ++i)\n    {\n        X[i].m128i_u32[0]=0;X[i].m128i_u32[1]=0;X[i].m128i_u32[2]=0;X[i].m128i_u32[3]=0;\n    }\n\n    // create X[] with bounds\n    unsigned height = end - begin;\n    unsigned width = m_matrix->width;\n    for( unsigned b = 0 ; b < height; ++b ) \n    {\n        char* src = &mas[(b + begin)*width];\n        unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row];\n        create_record(src, dst, width);\n    }\n    // create high row in X[]\n    char * src;\n    if(begin == 0) \n    {\n        src = &mas[(m_matrix->height-1)*width];\n    }\n    else \n    {\n        src = &mas[(begin-1)*width];\n    }\n    unsigned* dst = (unsigned*)X;\n    create_record(src, dst, width);\n    \n    //create lower row in X[]\n    if(end == m_matrix->height ) \n    {\n        src = mas;\n    }        \n    else \n    {\n        src = &mas[end*width];\n    }\n    dst = (unsigned*)&X[(height+1)*size_sse_row];\n    create_record(src, dst, width);\n    \n    //sum( C, B, A, X+offset_for_upwards ); high-left friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n    \n    //sum( C, B, A, X+offset_for_no_vertical_shift );\n    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);\n    \n    //sum( C, B, A, X+offset_for_downwards );\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_left( X ); (when view 2D) in our logic it is in right\n    height = end - begin + 2;\n    shift_left2D( X, height, size_sse_row);\n\n    //sum( C, B, A, X+offset_for_upwards ); high-left friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n\n    //sum( C, B, A, X+offset_for_downwards );\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_left( X ); (view in 2D) in our logic it is right shift\n    height = end - begin + 2;\n    shift_left2D( X, height, size_sse_row);\n    \n    //sum( C, B, A, X+offset_for_upwards ); high-right friend\n    sum_offset(X,A,B,C,size_sse_ar, 0);\n    \n    //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend\n    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);    \n    \n    //sum( C, B, A, X+offset_for_downwards ); right down friend\n    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);\n\n    //shift_right( X ); (when view in 2D) in our case it left shift.\n    height = end - begin + 2;\n    shift_right2D( X, height, size_sse_row);\n    \n    //X = (X|A)&B&~C (done bitwise over the arrays) \n    unsigned shift = size_sse_row;\n    for(unsigned i=0; i<size_sse_ar; ++i) \n    {\n        C[i].m128i_u32[0] = ~C[i].m128i_u32[0];\n        C[i].m128i_u32[1] = ~C[i].m128i_u32[1];\n        C[i].m128i_u32[2] = ~C[i].m128i_u32[2];\n        C[i].m128i_u32[3] = ~C[i].m128i_u32[3];\n        X[shift + i] = _mm_and_si128(_mm_and_si128(_mm_or_si128(X[shift + i],\n            A[i]),B[i]),C[i]);    \n    }\n\n    height = end - begin;\n    width=m_matrix->width;\n    for( unsigned b=0; b<height; ++b ) \n    {\n        char* dst = &dest[(b+begin)*width];\n        unsigned* src = (unsigned*)&X[(b+1)*size_sse_row];\n        for( unsigned a=0; a<width; ++a )\n        {\n            unsigned c = src[a/32u] & 1<<(a%32u);\n            dst[a] = c>>(a%32u);\n        }\n    }\n}\n#else \n/* end SSE block */\n\n// ----------------------------------------------------------------------\n// GetAdjacentCellState() - returns the state (value) of the specified \n// adjacent cell of the current cell \"cellNumber\"\nchar GetAdjacentCellState(\n                                char* source,      // pointer to source data block\n                                int x,             // logical width of field\n                                int y,             // logical height of field\n                                int cellNumber,    // number of cell position to examine\n                                int cp             // which adjacent position\n                               )\n{\n/* \ncp \n*-- cp=1 ... --- cp=8 (summary: -1-2-3-\n-x-          -x-                -4-x-5-\n---          --*                -6-7-8- )\n*/\n    char cellState = 0;        // return value\n\n    // set up boundary flags to trigger field-wrap logic\n    bool onTopRow = false;\n    bool onBottomRow = false;\n    bool onLeftColumn = false;\n    bool onRightColumn = false;\n\n    // check to see if cell is on top row\n    if (cellNumber < x)\n    {\n        onTopRow = true;\n    }\n    // check to see if cell is on bottom row\n    if ((x*y)-cellNumber <= x)\n    {\n        onBottomRow = true;\n    }\n    // check to see if cell is on left column\n    if (cellNumber%x == 0)\n    {\n        onLeftColumn = true;\n    }\n    // check to see if cell is on right column\n    if ((cellNumber+1)%x == 0)\n    {\n        onRightColumn = true;\n    }\n\n    switch (cp)\n    {\n        case 1:\n            if (onTopRow && onLeftColumn)\n            {\n                return *(source+((x*y)-1));\n            }\n            if (onTopRow && !onLeftColumn)\n            {\n                return *(source+(((x*y)-x)+(cellNumber-1)));\n            }\n            if (onLeftColumn && !onTopRow)\n            {\n                return *(source+(cellNumber-1));\n            }\n            return *((source+cellNumber)-(x+1));\n\n        case 2:\n            if (onTopRow)\n            {\n                return *(source+(((x*y)-x)+cellNumber));\n            }\n            return *((source+cellNumber)-x);\n\n        case 3:\n            if (onTopRow && onRightColumn)\n            {\n                return *(source+((x*y)-x));\n            }\n            if (onTopRow && !onRightColumn)\n            {\n                return *(source+(((x*y)-x)+(cellNumber+1)));\n            }\n            if (onRightColumn && !onTopRow)\n            {\n                return *(source+((cellNumber-(x*2))+1));\n            }\n            return *(source+(cellNumber-(x-1)));\n\n        case 4:\n            if (onRightColumn)\n            {\n                return *(source+(cellNumber-(x-1)));\n            }\n            return *(source+(cellNumber+1));\n\n        case 5:\n            if (onBottomRow && onRightColumn)\n            {\n                return *source;\n            }\n            if (onBottomRow && !onRightColumn)\n            {\n                return *(source+((cellNumber-((x*y)-x))+1));\n            }\n            if (onRightColumn && !onBottomRow)\n            {\n                return *(source+(cellNumber+1));\n            }\n            return *(source+(((cellNumber+x))+1));\n\n        case 6:\n            if (onBottomRow)\n            {\n                return *(source+(cellNumber-((x*y)-x)));\n            }\n            return *(source+(cellNumber+x));\n\n        case 7:\n            if (onBottomRow && onLeftColumn)\n            {\n                return *(source+(x-1));\n            }\n            if (onBottomRow && !onLeftColumn)\n            {\n                return *(source+(cellNumber-((x*y)-x)-1));\n            }\n            if (onLeftColumn && !onBottomRow)\n            {\n                return *(source+(cellNumber+((x*2)-1)));\n            }\n            return *(source+(cellNumber+(x-1)));\n\n        case 8:\n            if (onLeftColumn)\n            {\n                return *(source+(cellNumber+(x-1)));\n            }\n            return *(source+(cellNumber-1));\n    }\n    return cellState;\n}\n\nchar CheckCell(Matrix * m_matrix, int cellNumber)\n{\n    char total = 0;\n    char* source = m_matrix->data;\n    //look around to find cell's with status \"alive\"\n    for(int i=1; i<9; i++)\n    {\n        total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i);\n    }\n    // if the number of adjacent live cells is < 2 or > 3, the result is a dead \n    // cell regardless of its current state. (A live cell dies of loneliness if it\n    // has less than 2 neighbors, and of overcrowding if it has more than 3; a new\n    // cell is born in an empty spot only if it has exactly 3 neighbors.\n    if (total < 2 || total > 3)\n    {\n        return 0;\n    }\n\n    // if we get here and the cell position holds a living cell, it stays alive\n    if (*(source+cellNumber))\n    {\n        return 1;\n    }\n\n    // we have an empty position. If there are only 2 neighbors, the position stays\n    // empty.\n    if (total == 2)\n    {\n        return 0;\n    }\n\n    // we have an empty position and exactly 3 neighbors. A cell is born.\n    return 1;\n}\n\nvoid UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)\n{\n        for (int i=begin; i<=end; i++)\n        {\n            *(dest+i) = CheckCell(m_matrix, i);\n        }\n}\n\n#endif \n/* end non-SSE block */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_for algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_for</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_for</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"seismic/readme.html\">seismic</a>\n\t\t\t\t<dd>Parallel seismic wave simulation.\n\t\t\t\t<dt><a href=\"tachyon/readme.html\">tachyon</a>\n\t\t\t\t<dd>Parallel 2-D raytracer/renderer.\n\t\t\t\t<dt><a href=\"polygon_overlay/readme.html\">polygon_overlay</a>\n\t\t\t\t<dd>Simple polygon overlay.\n\t\t\t\t<dt><a href=\"game_of_life/readme.html\">game_of_life</a>\n\t\t\t\t<dd>Simple Game of life overlay.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=pover\nARGS=\nLIGHT_ARGS= --polys 10 --size 5x5\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\ninclude ../../common/gui/Makefile.gmake\n\nifeq ($(UI),x)\nUI_CXXFLAGS += -DX_FULLSYNC\nendif # X\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nSRCFILES = ../../common/gui/$(UI)video.cpp pover_video.cpp polymain.cpp polyover.cpp\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: $(SRCFILES) resources\nifeq ($(compiler),xl)\n\t# Avoiding \"1586-346 (U) An error occurred during code generation.  The code generation return code was 40.\" with -O3.\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)\nelse\nifeq ($(UI),mac)\n\t$(CXX_UI) -O3 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb -ltbbmalloc $(LIBS)\nendif\n\ndebug:  $(SRCFILES) resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb_debug -ltbbmalloc_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nlight_test:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/polymain.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Polygon overlay\n//\n// Don't want warnings about deprecated sscanf, getenv\n#ifndef _CRT_SECURE_NO_DEPRECATE\n#define _CRT_SECURE_NO_DEPRECATE\n#endif\n#define _MAIN_C_ 1\n#include <iostream>\n#include <iomanip>\n#include <algorithm>\n#include <cstring>\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"pover_global.h\"\n#include \"polyover.h\"\n#include \"pover_video.h\"\n#include \"polymain.h\"\n\nusing namespace std;\n\n#if _DEBUG\nconst char *faceNames[] = { \"North\", \"East\", \"South\", \"West\" };\n#endif\n\n/** \n**/\nint main( int argc, char **argv) {\n    pover_video poly;\n    poly.threaded = true;\n    gVideo = &poly;\n\n    if(!initializeVideo(argc, argv)) {\n        return 1;\n    }\n\n    gIsGraphicalVersion = poly.graphic_display();\n    if(argc > 1) {\n        if(!ParseCmdLine(argc, argv)) {\n            if(gIsGraphicalVersion) rt_sleep(10000);\n            // if graphical, we haven't opened the console window so all the error messages we\n            // so carefully wrote out disappeared into the ether.  :(\n            exit(1);\n        }\n    }\n\n    if(gCsvFilename != NULL) {\n#define BUFLEN 1000\n        std::string fname_buf = gCsvFilename;\n        fname_buf += \".csv\";\n        gCsvFile.open(fname_buf.c_str());\n    }\n\n    // we have gMapXSize and gMapYSize determining the number of \"squares\"\n    // we have g_xwinsize and g_ywinsize the total size of the window\n    // we also have BORDER_SIZE the size of the border between maps\n    // we need to determine\n    //      g_polyBoxSize -- the number of pixels on each size of each square\n\n    if(gIsGraphicalVersion) {\n        int xpixelsPerMap = (g_xwinsize - 4*BORDER_SIZE) / 3;  // three maps, with borders between and outside\n        gMapXSize = xpixelsPerMap;   // make the boxes one per pixel\n        gPolyXBoxSize = xpixelsPerMap / gMapXSize;\n        int ypixelsPerMap = (g_ywinsize - 2*BORDER_SIZE);       // one map vertically\n        gMapYSize = ypixelsPerMap;   // one pixel per box, rather.\n\n        gPolyYBoxSize = ypixelsPerMap / gMapYSize;\n        if((gPolyXBoxSize == 0) || (gPolyYBoxSize == 0)) {\n            cout << \"The display window is not large enough to show the maps\" << std::endl;\n            int minxSize = 4*BORDER_SIZE + 3*gMapXSize;\n            int minySize = 2*BORDER_SIZE + gMapYSize;\n            cout << \"  Should be at least \" << minxSize << \" x \" << minySize << \".\" << std::endl;\n            return 1;\n        }\n        map2XLoc = 2*BORDER_SIZE + gMapXSize * gPolyXBoxSize;\n        maprXLoc = 3*BORDER_SIZE + 2 * gMapXSize * gPolyXBoxSize;\n\n    }\n    else {  // not gIsGraphicalVersion\n        // gMapXSize, gMapYSize, gNPolygons defined in pover_global.h\n    }\n\n    // create two polygon maps\n    SetRandomSeed(gMyRandomSeed);  // for repeatability\n\n    gVideo->main_loop();\n}\n\nvoid Usage(int argc, char **argv) {\n    char *cmdTail = strrchr(*argv, '\\\\');\n    if(cmdTail == NULL)  {\n        cmdTail = *argv;\n    }\n    else { \n        cmdTail++;\n    }\n    cout << cmdTail << \" [threads[:threads2]] [--polys npolys] [--size nnnxnnn] [--seed nnn]\" << std::endl;\n    cout << \"Create polygon maps and overlay them.\" << std::endl << std::endl;\n    cout << \"Parameters:\" << std::endl;\n    cout << \"   threads[:threads2] - number of threads to run\" << std::endl;\n    cout << \"   --polys npolys - number of polygons in each map\" << std::endl;\n    cout << \"   --size nnnxnnn - size of each map (X x Y)\" << std::endl;\n    cout << \"   --seed nnn - initial value of random number generator\" << std::endl;\n    cout << \"   --csv filename - write timing data to CSV-format file\" << std::endl;\n    cout << \"   --grainsize n - set grainsize to n\" << std::endl;\n    cout << \"   --use_malloc - allocate polygons with malloc instead of scalable allocator\" << std::endl;\n    cout << std::endl;\n    cout << \"npolys must be smaller than the size of the map\" << std::endl;\n    cout << std::endl;\n    exit(1);\n}\n\nbool ParseCmdLine(int argc, char **argv ) {\n    bool error_found = false;\n    bool nPolysSpecified = false;\n    bool nMapSizeSpecified = false;\n    bool nSeedSpecified = false;\n    bool csvSpecified = false;\n    bool grainsizeSpecified = false;\n    bool mallocSpecified = false;\n    int origArgc = argc;\n    char** origArgv = argv;\n    unsigned int newnPolygons = gNPolygons;\n    unsigned int newSeed = gMyRandomSeed;\n    unsigned int newX = gMapXSize;\n    unsigned int newY = gMapYSize;\n    unsigned int newGrainSize = gGrainSize;\n    argc--; argv++;\n    if(argc > 0 && isdigit((*argv)[0])) {\n        // first argument is one or two numbers, specifying how mny threads to run\n        char* end; gThreadsHigh = gThreadsLow = (int)strtol(argv[0],&end,0);\n        switch( *end) {\n            case ':': gThreadsHigh = (int)strtol(end+1,0,0); break;\n            case '\\0': break;\n            default: cout << \"Unexpected character in thread specifier: \" << *end << std::endl; break;\n        }\n        if(gThreadsLow > gThreadsHigh) {\n            int t = gThreadsLow;\n            gThreadsLow = gThreadsHigh;\n            gThreadsHigh = t;\n        }\n        argv++; argc--;\n    }\n    while(argc > 0) {\n        // format 1: --size nnnxnnn, where nnn in {0 .. 9}+ -- size of map in \"squares\"\n        if(!strncmp(\"--size\", *argv, (size_t)6)) {\n            if(nMapSizeSpecified) {\n                cout << \" Error: map size multiply specified\" << std::endl;\n                error_found = true;\n            }\n            else  {\n                argv++; argc--;\n                if(argc == 0) {\n                    error_found = true;\n                    cout << \" Error: --size must have a value\" << std::endl;\n                }\n                if(strchr(*argv, 'x') != strrchr(*argv,'x')) {\n                    // more than one 'x'\n                    cout << \"Error: map size should be nnnxnnn (\" << *argv << \")\" << std::endl;\n                    error_found = true;\n                }\n                else {\n                    int rval;\n                    rval = sscanf(*argv, \"%ux%u\", &newX, &newY);\n                    if(rval != 2) {\n                        cout << \"Error parsing map size (format should be nnnxnnn (\" << *argv << \")\" << std::endl;\n                        error_found = true;\n                    }\n                    if(newX == 0 || newY == 0) {\n                        cout << \"Error: size of map should be greater than 0 (\" << *argv << \")\" << std::endl;\n                        error_found = true;\n                    }\n                }\n            }\n            argc--; argv++;\n        }\n        // format 2: --seed nnn -- initial random number seed\n        else if(!strncmp(\"--seed\", *argv, (size_t)6)) {\n            argv++; argc--;\n            if(nSeedSpecified) {\n                cout << \"Error: new seed multiply specified\" << std::endl;\n                error_found = true;\n            }\n            else {\n                nSeedSpecified = true;\n                int rtval = sscanf(*argv, \"%u\", &newSeed);\n                if(rtval == 0) {\n                    cout << \"Error: --seed should be an unsigned number (instead of \" << *argv << \")\" << std::endl;\n                    error_found = true;\n                }\n            }\n            argv++; argc--;\n        }\n        // format 3: --polys n[n] -- number of polygons in each map\n        else if(!strncmp(\"--polys\", *argv, (size_t)7)) {\n            //unsigned int newnPolygons;\n            argv++; argc--;\n            if(nPolysSpecified) {\n                cout << \"Error: number of polygons multiply-specified\" << std::endl;\n                error_found = true;\n            }else {\n                int rtval = sscanf(*argv, \"%u\", &newnPolygons);\n                if(newnPolygons == 0) {\n                    cout << \"Error: number of polygons must be greater than 0 (\" << *argv << \")\" << std::endl;\n                }\n            }\n            argv++; argc--;\n        }\n        // format 4: --csv <fileroot> -- name of CSV output file (\"xxx\" for \"xxx.csv\")\n        else if(!strncmp(\"--csv\", *argv, (size_t)5)) {\n            argv++; argc--;\n            if(csvSpecified) {\n                cout << \"Error: Multiple specification of CSV file\" << std::endl;\n                error_found = true;\n            }\n            else {\n                gCsvFilename = *argv;\n                argv++; argc--;\n                csvSpecified = true;\n            }\n        }\n        else if(!strncmp(\"--grainsize\", *argv, (size_t)11)) {\n            argv++; argc--;\n            if(grainsizeSpecified) {\n                cout << \"Error: Multiple specification of grainsize\" << std::endl;\n                error_found = true;\n            }\n            else {\n                int grval = sscanf(*argv, \"%u\", &newGrainSize);\n                grainsizeSpecified = true;\n                if(newGrainSize == 0) {\n                    cout << \"Error: grainsize must be greater than 0\" << std::endl;\n                    error_found = true;\n                }\n            }\n            argv++; argc--;\n        }\n        else if(!strncmp(\"--use_malloc\", *argv, (size_t)12)) {\n            argv++; argc--;\n            if(mallocSpecified) {\n                cout << \"Error: --use_malloc multiply-specified\" << std::endl;\n                error_found = true;\n            }\n            else {\n                mallocSpecified = true;\n                gMBehavior = UseMalloc;\n            }\n        }\n        else {\n            cout << \"Error: unrecognized argument: \" << *argv << std::endl;\n            error_found = true;\n            argv++; argc--;\n        }\n    }\n    if(!error_found) {\n        if(newX * newY < newnPolygons) {\n            error_found = true;\n            cout << \"Error: map size should not be smaller than the number of polygons (gNPolygons = \" << newnPolygons << \", map size \" << newX << \"x\" << newY << \")\" << std::endl;\n        }\n    }\n    if(!error_found) {\n        gMapXSize = newX;\n        gMapYSize = newY;\n        gNPolygons = newnPolygons;\n        gMyRandomSeed = newSeed;\n        gGrainSize = (int)newGrainSize;\n    }\n    else {\n        Usage(origArgc, origArgv);\n    }\n    return !error_found;\n}\n\n// create a polygon map with at least gNPolygons polygons.\n// Usually more than gNPolygons polygons will be generated, because the\n// process of growing the polygons results in holes.\nbool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB) {\n    bool error_found = false;\n    int  *validPolys;\n    int  *validSide;\n    int maxSides;\n    RPolygon *newPoly;\n\n    if(xSize <= 0) {\n        cout << \"xSize (\" << xSize << \") should be > 0.\" << std::endl;\n        error_found = true;\n    }\n    if(ySize <= 0) {\n        cout << \"ySize (\" << ySize << \") should be > 0.\" << std::endl;\n        error_found = true;\n    }\n    if(gNPolygons > (xSize * ySize)) {\n        cout << \"gNPolygons (\" << gNPolygons << \") should be less than \" << (xSize * ySize) << std::endl;\n        error_found = true;\n    }\n    if(error_found) return false;\n    // the whole map is [xSize x ySize] squares\n    // the way we create the map is to\n    //    1) pick nPolygon discrete squares on an [xSize x ySize] grid\n    //    2) while there are unused squares on the grid\n    //        3) pick a polygon with a side that has unused squares on a side\n    //        4) expand the polygon by 1 to occupy the unused squares\n    //\n    // Continue until every square on the grid is occupied by a polygon\n    int *tempMap;\n    tempMap = (int *)malloc(xSize * ySize * sizeof(int));\n    for(int i=0;i < xSize; i++) {\n        for(int j=0;j < ySize; j++) {\n            tempMap[i*ySize + j] = 0;\n        }\n    }\n\n    // *newMap = new vector<RPolygon>;\n    *newMap = new Polygon_map_t;\n    (*newMap)->reserve(gNPolygons + 1);  // how much bigger does this need to be on average?\n    (*newMap)->push_back(RPolygon(0,0,xSize-1, ySize-1));\n    for(int i=0; i < gNPolygons; i++) {\n        int nX;\n        int nY;\n        do {    // look for an empty square.\n            nX = NextRan(xSize);\n            nY = NextRan(ySize);\n        } while(tempMap[nX * ySize + nY] != 0);\n        int nR = (maxR * NextRan(1000)) / 999;\n        int nG = (maxG * NextRan(1000)) / 999;\n        int nB = (maxB * NextRan(1000)) / 999;\n        (*newMap)->push_back(RPolygon(nX,nY,nX,nY,nR,nG,nB));\n        tempMap[nX * ySize + nY] = i+1;     // index of this polygon + 1\n    }\n    // now have to grow polygons to fill the space.\n    validPolys = (int *)malloc(4*gNPolygons * sizeof(int));\n    validSide = (int *)malloc(4*gNPolygons * sizeof(int));\n    for(int i=0;i<gNPolygons;i++) {\n        validPolys[4*i] = validPolys[4*i + 1] = validPolys[4*i + 2] = validPolys[4*i + 3] = i + 1;\n        validSide[4*i] = NORTH_SIDE;\n        validSide[4*i+1] = EAST_SIDE;\n        validSide[4*i+2] = SOUTH_SIDE;\n        validSide[4*i+3] = WEST_SIDE;\n    }\n    maxSides = 4*gNPolygons;\n    while(maxSides > 0) {\n        int indx = NextRan(maxSides);\n        int polyIndx = validPolys[indx];\n        int checkSide = validSide[indx];\n        int xlow, xhigh, ylow, yhigh;\n        int xlnew, xhnew, ylnew, yhnew;\n        (**newMap)[polyIndx].get(&xlow,&ylow,&xhigh,&yhigh);\n        xlnew = xlow;\n        xhnew = xhigh;\n        ylnew = ylow; \n        yhnew = yhigh;\n        // can this polygon be expanded along the chosen side?\n        switch(checkSide) {\n        case NORTH_SIDE:\n            // y-1 from xlow to xhigh\n            ylow = yhigh = (ylow - 1);\n            ylnew--;\n            break;\n        case EAST_SIDE:\n            // x+1 from ylow to yhigh\n            xlow = xhigh = (xhigh + 1);\n            xhnew++;\n            break;\n        case SOUTH_SIDE:\n            // y+1 from xlow to xhigh\n            ylow = yhigh = (yhigh+1);\n            yhnew++;\n            break;\n        case WEST_SIDE:\n            // x-1 from ylow to yhigh\n            xlow = xhigh = (xlow - 1);\n            xlnew--;\n            break;\n        }\n        bool okay_to_extend = !(((xlow < 0) || (xlow >= xSize)) || ((ylow < 0) || (ylow >= ySize)));\n        for(int ii = xlow; (ii <= xhigh) && okay_to_extend; ii++) {\n            for(int jj=ylow; (jj <= yhigh) && okay_to_extend; jj++) {\n                okay_to_extend = tempMap[ii*ySize + jj] == 0;\n            }\n        }\n        if(okay_to_extend) {\n            (**newMap)[polyIndx].set(xlnew,ylnew,xhnew,yhnew);\n            for(int ii = xlow; ii <= xhigh; ii++) {\n                for(int jj=ylow; jj <= yhigh && okay_to_extend; jj++) {\n                    tempMap[ii*ySize + jj] = polyIndx;\n                }\n            }\n        }\n        else {\n            // once we cannot expand along a side, we will never be able to; remove from the list.\n            for(int i=indx + 1; i < maxSides; i++) {\n                validPolys[i-1] = validPolys[i];\n                validSide[i-1] = validSide[i];\n            }\n            maxSides--;\n        }\n    }\n\n    // Once no polygons can be grown, look for unused squares, and fill them with polygons.\n    for(int j=0;j<ySize;j++) {\n        for(int i=0;i<xSize;i++) {\n            if(tempMap[i*ySize+j] == 0) {\n                // try to grow in the x direction, then the y direction\n                int ilen = i;\n                int jlen = j;\n                while(ilen < (xSize - 1) && tempMap[(ilen+1)*ySize + jlen] == 0) {\n                    ilen++;\n                }\n                bool yok = true;\n                while(yok && jlen < (ySize - 1)) {\n                    for(int ii = i; ii <= ilen && yok; ii++) {\n                        yok = (tempMap[ii*ySize + jlen + 1] == 0);\n                    }\n                    if(yok) {\n                        jlen++;\n                    }\n                }\n\n                // create new polygon and push it on our list.\n                int nR = (maxR * NextRan(1000)) / 999;\n                int nG = (maxG * NextRan(1000)) / 999;\n                int nB = (maxB * NextRan(1000)) / 999;\n                (*newMap)->push_back(RPolygon(i,j,ilen,jlen,nR,nG,nB));\n                gNPolygons++;\n                for(int ii=i; ii<=ilen;ii++) {\n                    for(int jj=j;jj<=jlen;jj++) {\n                        tempMap[ii*ySize + jj] = gNPolygons;\n                    }\n                }\n            }\n        }\n    }\n\n#if _DEBUG\n    if(!gIsGraphicalVersion) {\n        cout << std::endl << \"Final Map:\" << std::endl;\n        for(int j=0; j < ySize; j++ ) {\n            cout << \"Row \" << setw(2) << j << \":\";\n            for(int i=0;i<xSize;i++) {\n                int it = tempMap[i*ySize + j];\n                if(it<10) {\n                    cout << setw(2) << it;\n                }\n                else {\n                    char ct = (int)'a' + it - 10;\n                    cout << \" \" << ct;\n                }\n            }\n            cout << std::endl;\n        }\n    }\n#endif  // _DEBUG\n    free(tempMap);\n    free(validPolys);\n    free(validSide);\n    return true;\n}\n\nvoid CheckPolygonMap(Polygon_map_t *checkMap) {\n#define indx(i,j) (i*gMapYSize + j)\n#define rangeCheck(str,n,limit) if(((n)<0)||((n)>=limit)) {cout << \"checkMap error: \" << str << \" out of range (\" << n << \")\" << std::endl;anError=true;}\n#define xRangeCheck(str,n) rangeCheck(str,n,gMapXSize)\n#define yRangeCheck(str,n) rangeCheck(str,n,gMapYSize)\n    // The first polygon is the whole map.\n    bool anError = false;\n    int *cArray;\n    if(checkMap->size() <= 0) {\n        cout << \"checkMap error: no polygons in map\" << std::endl;\n        return;\n    }\n    // mapXhigh and mapYhigh are inclusive, that is, if the map is 5x5, those values would be 4.\n    int mapXhigh, mapYhigh, mapLowX, mapLowY;\n    int gMapXSize, gMapYSize;\n    (*checkMap)[0].get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh);\n    if((mapLowX !=0) || (mapLowY != 0)) {\n        cout << \"checkMap error: map origin not (0,0) (X=\" << mapLowX << \", Y=\" << mapLowY << \")\" << std::endl;\n        anError = true;\n    }\n    if((mapXhigh < 0) || (mapYhigh < 0)) {\n        cout << \"checkMap error: no area in map (X=\" << mapXhigh << \", Y=\" << mapYhigh << \")\" << std::endl;\n        anError = true;\n    }\n    if(anError) return;\n    // bounds for array.\n    gMapXSize = mapXhigh + 1;\n    gMapYSize = mapYhigh + 1;\n    cArray = (int *)malloc(sizeof(int)*(gMapXSize*gMapYSize));\n\n    for(int i=0; i<gMapXSize; i++) {\n        for(int j=0; j< gMapYSize; j++) {\n            cArray[indx(i,j)] = 0;\n        }\n    }\n\n    int xlow, xhigh, ylow, yhigh;\n    for(int p=1; p < int(checkMap->size()) && !anError; p++) {\n        (*checkMap)[p].get(&xlow, &ylow, &xhigh, &yhigh);\n        xRangeCheck(\"xlow\", xlow);\n        yRangeCheck(\"ylow\", ylow);\n        xRangeCheck(\"xhigh\", xhigh);\n        yRangeCheck(\"yhigh\", yhigh);\n        if(xlow>xhigh) {\n            cout << \"checkMap error: xlow > xhigh (\" << xlow << \",\" << xhigh << \")\" << std::endl;\n            anError = true;\n        }\n        if(ylow>yhigh) {\n            cout << \"checkMap error: ylow > yhigh (\" << ylow << \",\" << yhigh << \")\" << std::endl;\n            anError = true;\n        }\n        for(int ii = xlow; ii <= xhigh; ii++) {\n            for(int jj = ylow; jj <= yhigh; jj++) {\n                if(cArray[indx(ii,jj)] != 0) {\n                    cout << \"checkMap error: polygons \" << cArray[indx(ii,jj)] << \" and \" << p << \" intersect\" << std::endl;\n                    anError = true;\n                }\n                cArray[indx(ii,jj)] = p;\n            }\n        }\n    }\n    for(int ii=0; ii < gMapXSize; ii++) {\n        for(int jj=0; jj < gMapYSize; jj++) {\n            if(cArray[indx(ii,jj)] == 0) {\n                cout << \"checkMap error: block(\" << ii << \", \" << jj << \") not in any polygon\" << std::endl;\n                anError = true;\n            }\n        }\n    }\n    free(cArray);\n}\n\nbool CompOnePolygon(RPolygon &p1, RPolygon &p2) {\n    int xl1, xh1, yl1, yh1;\n    int xl2, xh2, yl2, yh2;\n    p1.get(&xl1, &yl1, &xh1, &yh1);\n    p2.get(&xl2, &yl2, &xh2, &yh2);\n    if(yl1>yl2) return true;\n    if(yl1<yl2) return false;\n    return (xl1 > xl2);\n}\n\nbool PolygonsEqual(RPolygon *p1, RPolygon *p2) {\n    int xl1, xh1, yl1, yh1;\n    int xl2, xh2, yl2, yh2;\n    p1->get(&xl1, &yl1, &xh1, &yh1);\n    p2->get(&xl2, &yl2, &xh2, &yh2);\n    return ((xl1 == xl2) && (yl1==yl2) && (xh1 == xh2) && (yh1 == yh2));\n}\n\nbool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2) {\n    // create two new polygon maps, copy the pointers from the original to these.\n    // we have to skip the first polygon, which is the size of the whole map\n    Polygon_map_t *t1, *t2;\n    bool is_ok = true;\n    t1 = new Polygon_map_t;\n    t1->reserve(map1->size());\n    for(unsigned int i=1;i<map1->size(); i++) {\n        t1->push_back(map1->at(i));\n    }\n    t2 = new Polygon_map_t;\n    t2->reserve(map2->size());\n    for(unsigned int i=1;i<map2->size();i++) {\n        t2->push_back(map2->at(i));\n    }\n    // sort the two created maps by (xlow, ylow)\n    sort(t1->begin(), t1->end());\n    sort(t2->begin(), t2->end());\n    // compare each element of both maps.\n    if(t1->size() != t2->size()) {\n        cout << \"Error: maps not the same size ( \" << int(t1->size()) << \" vs \" << int(t2->size()) << \").\" << std::endl;\n    }\n    int maxSize = (int)((t1->size() < t2->size()) ? t1->size() : t2->size());\n    for(int i=0; i < maxSize; i++) {\n        if(!PolygonsEqual(&((*t1)[i]), &((*t2)[i]))) {\n            cout << \"Error: polygons unequal (\" << (*t1)[i] << \" vs \" << (*t2)[i] << std::endl;\n            is_ok = false;\n        }\n    }\n    delete t1;\n    delete t2;\n    return is_ok;\n}\n\nvoid SetRandomSeed(int newSeed) {\n    srand((unsigned)newSeed);\n}\n\nint NextRan(int n) {\n    // assert(n > 1);\n    // if we are given 1, we will just return 0\n    //assert(n < RAND_MAX);\n    int rrand = rand() << 15 | rand();\n    if(rrand < 0) rrand = -rrand;\n    return rrand % n;\n}\n\nstd::ostream& operator<<(std::ostream& s, const RPolygon &p) {\n    int xl, yl, xh, yh;\n    p.get(&xl, &yl, &xh, &yh);\n    return s << \"[(\" << xl << \",\" << yl << \")-(\" << xh << \",\" << yh << \")] \";\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/polymain.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"pover_global.h\"  // for declaration of DEFINE and INIT\n\nDEFINE Polygon_map_t *gPolymap1 INIT(0);\nDEFINE Polygon_map_t *gPolymap2 INIT(0);\nDEFINE Polygon_map_t *gResultMap INIT(0);\n\nextern void Usage(int argc, char **argv);\n\nextern bool ParseCmdLine(int argc, char **argv );\n\nextern bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB);\n\nextern bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh);\n\nextern void CheckPolygonMap(Polygon_map_t *checkMap);\n\nextern bool CompOnePolygon(RPolygon *p1, RPolygon *p2);\n\nextern bool PolygonsEqual(RPolygon *p1, RPolygon *p2);\n\nextern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);\n\nextern void SetRandomSeed(int newSeed);\n\nextern int NextRan(int n);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/polyover.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Polygon overlay\n//\n#include <iostream>\n#include <algorithm>\n#include <string.h>\n#include <cstdlib>\n#include <assert.h>\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"polyover.h\"\n#include \"polymain.h\"\n#include \"pover_video.h\"\n\nusing namespace std;\n\n/*!\n* @brief intersects a polygon with a map, adding any results to output map\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polygon to be intersected\n* @param[in] map intersected against\n* @param[in] lock to use when adding output polygons to result map\n*\n*/\nvoid OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t *map2, tbb::spin_mutex *rMutex) {\n    int r1, g1, b1, r2, g2, b2;\n    int myr=0;\n    int myg=0;\n    int myb=0;\n    int p1Area = myPoly->area();\n    for(unsigned int j=1; (j < map2->size()) && (p1Area > 0); j++) {\n        RPolygon *p2 = &((*map2)[j]);\n        RPolygon *pnew;\n        int newxMin, newxMax, newyMin, newyMax;\n        myPoly->getColor(&r1, &g1, &b1);\n        if(PolygonsOverlap(myPoly, p2, newxMin, newyMin, newxMax, newyMax)) {\n            p2->getColor(&r2, &g2, &b2);\n            myr = r1 + r2;\n            myg = g1 + g2;\n            myb = b1 + b2;\n            p1Area -= (newxMax-newxMin+1)*(newyMax - newyMin + 1);\n            if(rMutex) {\n                tbb::spin_mutex::scoped_lock lock(*rMutex);\n                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));\n            }\n            else {\n                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));\n            }\n        }\n    }\n}\n\n/*!\n* @brief Serial version of polygon overlay\n* @param[out] output map\n* @param[in]  first map (map that individual polygons are taken from)\n* @param[in]  second map (map passed to OverlayOnePolygonWithMap)\n*/\nvoid SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2) {\n    cout << \"SerialOverlayMaps called\" << std::endl;\n    *resultMap = new Polygon_map_t;\n\n    RPolygon *p0 = &((*map1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    (*resultMap)->reserve(mapxSize*mapySize); // can't be any bigger than this\n    // push the map size as the first polygon,\n    (*resultMap)->push_back(RPolygon(0,0,mapxSize, mapySize));\n    for(unsigned int i=1; i < map1->size(); i++) {\n        RPolygon *p1 = &((*map1)[i]);\n        OverlayOnePolygonWithMap(*resultMap, p1, map2, NULL);\n    }\n}\n\n/*!\n* @class ApplyOverlay\n* @brief Simple version of parallel overlay (make parallel on polygons in map1)\n*/\nclass ApplyOverlay {\n    Polygon_map_t *m_map1, *m_map2, *m_resultMap;\n    tbb::spin_mutex *m_rMutex;\npublic:\n    /*!\n    * @brief functor to apply\n    * @param[in] r range of polygons to intersect from map1\n    */\n    void operator()( const tbb::blocked_range<int> & r) const {\n        PRINT_DEBUG(\"From \" << r.begin() << \" to \" << r.end());\n        for(int i=r.begin(); i != r.end(); i++) {\n            RPolygon *myPoly = &((*m_map1)[i]);\n            OverlayOnePolygonWithMap(m_resultMap, myPoly, m_map2, m_rMutex);\n        }\n    }\n    ApplyOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}\n};\n\n/*!\n* @brief apply the parallel algorithm\n* @param[out] result_map generated map\n* @param[in] polymap1 first map to be applied (algorithm is parallel on this map)\n* @param[in] polymap2 second map.\n*/\nvoid NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2) {\n// -----------------------------------\n    bool automatic_threadcount = false;\n\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    result_map = new Polygon_map_t;\n\n    RPolygon *p0 = &(polymap1[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    result_map->reserve(mapxSize*mapySize); // can't be any bigger than this\n    // push the map size as the first polygon,\n    tbb::spin_mutex *resultMutex = new tbb::spin_mutex();\n    int grain_size = gGrainSize;\n\n    for(int nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // put size polygon in result map\n        result_map->push_back(RPolygon(0,0,mapxSize, mapySize));\n\n        tbb::tick_count t0 = tbb::tick_count::now();\n        tbb::parallel_for (tbb::blocked_range<int>(1,(int)(polymap1.size()),grain_size), ApplyOverlay(result_map, &polymap1, &polymap2, resultMutex));\n        tbb::tick_count t1 = tbb::tick_count::now();\n\n        double naiveParallelTime = (t1-t0).seconds() * 1000;\n        cout << \"Naive parallel with spin lock and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << naiveParallelTime << \" msec : speedup over serial \" << (gSerialTime / naiveParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << naiveParallelTime;\n        }\n#if _DEBUG\n        CheckPolygonMap(result_map);\n        ComparePolygonMaps(result_map, gResultMap);\n#endif\n        result_map->clear();\n    }\n    delete resultMutex;\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n// -----------------------------------\n}\n\ntemplate<typename T>\nvoid split_at( Flagged_map_t& in_map, Flagged_map_t &left_out, Flagged_map_t &right_out, const T median) {\n    left_out.reserve(in_map.size());\n    right_out.reserve(in_map.size());\n    for(Flagged_map_t::iterator i = in_map.begin(); i != in_map.end(); ++i ) {\n        RPolygon *p = i->p();\n        if(p->xmax() < median) {\n            // in left map\n            left_out.push_back(*i);\n        }\n        else if(p->xmin() >= median) {\n            right_out.push_back(*i);\n            // in right map\n        }\n        else {\n            // in both maps.\n            left_out.push_back(*i);\n            right_out.push_back(RPolygon_flagged(p, true));\n        }\n    }\n}\n\n// range that splits the maps as well as the range.  the flagged_map_t are\n// vectors of pointers, and each range owns its maps (has to free them on destruction.)\ntemplate <typename T>\nclass blocked_range_with_maps {\n    \n    typedef blocked_range<T> my_range_type;\n\nprivate:\n\n    my_range_type my_range;\n    Flagged_map_t my_map1;\n    Flagged_map_t my_map2;\n\npublic:\n\n    blocked_range_with_maps(\n            T begin, T end, typename my_range_type::size_type my_grainsize,\n            Polygon_map_t *p1, Polygon_map_t *p2\n            )\n        : my_range(begin, end, my_grainsize)\n    {\n        my_map1.reserve(p1->size());\n        my_map2.reserve(p2->size());\n        for(int i=1; i < p1->size(); ++i) {\n            my_map1.push_back(RPolygon_flagged(&((*p1)[i]), false));\n        }\n        for(int i=1; i < p2->size(); ++i) {\n            my_map2.push_back(RPolygon_flagged(&(p2->at(i)), false));\n        }\n    }\n\n    // copy-constructor required for deep copy of flagged maps.  One copy is done at the start of the\n    // parallel for.\n    blocked_range_with_maps(const blocked_range_with_maps& other): my_range(other.my_range), my_map1(other.my_map1), my_map2(other.my_map2) { }\n    bool empty() const { return my_range.empty(); }\n    bool is_divisible() const { return my_range.is_divisible(); }\n\n#if _DEBUG\n    void check_my_map() {\n        assert(my_range.begin() <= my_range.end());\n        for(Flagged_map_t::iterator ci = my_map1.begin(); ci != my_map1.end(); ++ci) {\n            RPolygon *rp = ci->p();\n            assert(rp->xmax() >= my_range.begin());\n            assert(rp->xmin() < my_range.end());\n        }\n        for(Flagged_map_t::iterator ci = my_map2.begin(); ci != my_map2.end(); ++ci) {\n            RPolygon *rp = ci->p();\n            assert(rp->xmax() >= my_range.begin());\n            assert(rp->xmin() < my_range.end());\n        }\n    }\n\n    void dump_map( Flagged_map_t& mapx) {\n        cout << \" ** MAP **\\n\";\n        for( Flagged_map_t::iterator ci = mapx.begin(); ci != mapx.end(); ++ci) {\n            cout << *(ci->p());\n            if(ci->isDuplicate()) {\n                cout << \" -- is_duplicate\";\n            }\n            cout << \"\\n\";\n        }\n        cout << \"\\n\";\n    }\n#endif\n\n    blocked_range_with_maps(blocked_range_with_maps& lhs_r, split ) : my_range(my_range_type(lhs_r.my_range, split())) {\n        // lhs_r.my_range makes my_range from [median, high) and rhs_r.my_range from [low, median)\n        Flagged_map_t original_map1 = lhs_r.my_map1;\n        Flagged_map_t original_map2 = lhs_r.my_map2;\n        lhs_r.my_map1.clear();\n        lhs_r.my_map2.clear();\n        split_at(original_map1, lhs_r.my_map1, my_map1, my_range.begin());\n        split_at(original_map2, lhs_r.my_map2, my_map2, my_range.begin());\n#if _DEBUG\n        this->check_my_map();\n        lhs_r.check_my_map();\n#endif\n    }\n\n    const my_range_type& range() const { return my_range; }\n    Flagged_map_t& map1() { return my_map1; }\n    Flagged_map_t& map2() { return my_map2; }\n};\n\n/*!\n* @class ApplySplitOverlay\n* @brief parallel by columnar strip\n*/\nclass ApplySplitOverlay {\n    Polygon_map_t *m_map1, *m_map2, *m_resultMap;\n    tbb::spin_mutex *m_rMutex;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(/*const*/ blocked_range_with_maps<int> & r) const {\n#ifdef _DEBUG\n        // if we are debugging, serialize the method.  That way we can\n        // see what is happening in each strip without the interleaving\n        // confusing things.\n        tbb::spin_mutex::scoped_lock lock(*m_rMutex);\n        cout << unitbuf << \"From \" << r.range().begin() << \" to \" << r.range().end()-1 << std::endl;\n#endif\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n#ifdef _DEBUG\n#else\n                        tbb::spin_mutex::scoped_lock lock(*m_rMutex);\n#endif\n                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    tbb::spin_mutex *resultMutex;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n    resultMutex = new tbb::spin_mutex();\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with spin lock and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        CheckPolygonMap(*result_map);\n        ComparePolygonMaps(*result_map, gResultMap);\n#endif\n        (*result_map)->clear();\n\n    }\n    delete resultMutex;\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n}\n\nclass ApplySplitOverlayCV {\n    Polygon_map_t *m_map1, *m_map2;\n    concurrent_Polygon_map_t *m_resultMap;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(blocked_range_with_maps<int> & r) const {\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlayCV(concurrent_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise, accumulating into a concurrent_vector\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new concurrent_Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayCV((*result_map), polymap1, polymap2));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with concurrent_vector and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        {\n            \n            Polygon_map_t s_result_map;\n            for(concurrent_Polygon_map_t::const_iterator ci = (*result_map)->begin(); ci != (*result_map)->end(); ++ci) {\n                s_result_map.push_back(*ci);\n            }\n            CheckPolygonMap(&s_result_map);\n            ComparePolygonMaps(&s_result_map, gResultMap);\n        }\n#endif\n        (*result_map)->clear();\n\n    }\n\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n\n}\n\n// ------------------------------------------------------\n\nclass ApplySplitOverlayETS {\n    Polygon_map_t *m_map1, *m_map2;\n    ETS_Polygon_map_t *m_resultMap;\npublic:\n    /*!\n    * @brief functor for columnar parallel version\n    * @param[in] r range of map to be operated on\n    */\n    void operator()(blocked_range_with_maps<int> & r) const {\n        // get yMapSize\n        int r1, g1, b1, r2, g2, b2;\n        int myr=-1;\n        int myg=-1;\n        int myb=-1;\n        int i1, i2, i3, yMapSize;\n        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);\n\n        Flagged_map_t &fmap1 = r.map1();\n        Flagged_map_t &fmap2 = r.map2();\n\n        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged\n        // as duplicate, don't add the result to the output map.  We can still\n        // intersect them, because we are keeping track of how much of the polygon\n        // is left over from intersecting, and quitting when the polygon is\n        // used up.\n\n        for(unsigned int ii=0; ii < fmap1.size(); ii++) {\n            RPolygon *p1 = fmap1[ii].p();\n            bool is_dup = fmap1[ii].isDuplicate();\n            int parea = p1->area();\n            p1->getColor(&r1, &g1, &b1);\n            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {\n                int xl, yl, xh, yh;\n                RPolygon *p2 = fmap2[jj].p();\n                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {\n                    if(!(is_dup && fmap2[jj].isDuplicate())) {\n                        p2->getColor(&r2, &g2, &b2);\n                        myr = r1 + r2;\n                        myg = g1 + g2;\n                        myb = b1 + b2;\n                        (*m_resultMap).local().push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));\n                    }\n                    parea -= (xh-xl+1)*(yh-yl+1);\n                }\n            }\n        }\n    }\n\n    ApplySplitOverlayETS(ETS_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :\n    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}\n};\n\n\n/*!\n* @brief intersects two maps strip-wise, accumulating into an ets variable\n*\n* @param[out] resultMap output map (must be allocated)\n* @param[in] polymap1 map to be intersected\n* @param[in] polymap2 map to be intersected\n*/\nvoid SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {\n    int nthreads;\n    bool automatic_threadcount = false;\n    double domainSplitParallelTime;\n    tbb::tick_count t0, t1;\n    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {\n        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;\n        automatic_threadcount = true;\n    }\n    *result_map = new ETS_Polygon_map_t;\n\n    RPolygon *p0 = &((*polymap1)[0]);\n    int mapxSize, mapySize, ignore1, ignore2;\n    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);\n    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this\n\n    int grain_size;\n#ifdef _DEBUG\n    grain_size = gMapXSize / 4;\n#else\n    grain_size = gGrainSize;\n#endif\n    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {\n        tbb::task_scheduler_init init(nthreads);\n        if(gIsGraphicalVersion) {\n            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n            delete xp;\n        }\n        // push the map size as the first polygon,\n        // This polygon needs to be first, so we can push it at the start of a combine.\n        // (*result_map)->local.push_back(RPolygon(0,0,mapxSize, mapySize));\n        t0 = tbb::tick_count::now();\n        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayETS((*result_map), polymap1, polymap2));\n        t1 = tbb::tick_count::now();\n        domainSplitParallelTime = (t1-t0).seconds()*1000;\n        cout << \"Splitting parallel with ETS and \";\n        if(automatic_threadcount) cout << \"automatic\";\n        else cout << nthreads;\n        cout << ((nthreads == 1) ? \" thread\" : \" threads\");\n        cout << \" took \" << domainSplitParallelTime <<  \" msec : speedup over serial \" << (gSerialTime / domainSplitParallelTime) << std::endl;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \",\" << domainSplitParallelTime;\n        }\n#if _DEBUG\n        {\n            \n            Polygon_map_t s_result_map;\n            flattened2d<ETS_Polygon_map_t> psv = flatten2d(**result_map);\n            s_result_map.push_back(RPolygon(0,0,mapxSize, mapySize));\n            for(flattened2d<ETS_Polygon_map_t>::const_iterator ci = psv.begin(); ci != psv.end(); ++ci) {\n                s_result_map.push_back(*ci);\n            }\n            CheckPolygonMap(&s_result_map);\n            ComparePolygonMaps(&s_result_map, gResultMap);\n        }\n#endif\n        (*result_map)->clear();\n\n    }\n\n    if(gCsvFile.is_open()) {\n        gCsvFile << std::endl;\n    }\n\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/polyover.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*!\n * polyover.h : extern declarations for polyover.cpp\n*/\n#include \"rpolygon.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n\nextern void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t  *map2, tbb::spin_mutex *rMutex);\n\nextern void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2);\n\n// extern void NaiveParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2);\n\nextern void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\nextern void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);\n\nextern void CheckPolygonMap(Polygon_map_t *checkMap);\nextern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/pover_global.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// pover_global.h\n//\n#ifndef _POVER_GLOBAL_H_\n#define _POVER_GLOBAL_H_\n\n#ifdef _MAIN_C_\n#define DEFINE // nothing\n#define STATIC static\n#define INIT(n) = n\n#else // not in main file\n#define DEFINE extern\n#define STATIC  // nothing\n#define INIT(n) // nothing\n#endif  // _MAIN_C_\n\n#include <iostream>\n#include <fstream>\n\n#ifdef _WINDOWS\n#include <windows.h>\n#endif\n\n// this Polygon class only supports rectangles\nDEFINE int gDrawXOffset INIT(0);   // used for drawing polygons\nDEFINE int gDrawYOffset INIT(0);\nDEFINE int gPolyXBoxSize INIT(0);  // number of pixels orresponding to one \"square\" (x)\nDEFINE int gPolyYBoxSize INIT(0);  // number of pixels orresponding to one \"square\" (y)\nDEFINE bool gDoDraw INIT(false);       // render the boxes\n\n#define THREADS_UNSET 0\nDEFINE int gThreadsLow INIT(THREADS_UNSET);\nDEFINE int gThreadsHigh INIT(THREADS_UNSET);\n\nDEFINE std::ofstream gCsvFile;\nDEFINE double gSerialTime;\nDEFINE char *gCsvFilename INIT(NULL);\n\n#define BORDER_SIZE 10  // number of pixels between maps\n\n// The map size and the number of polygons depends on the version we are compiling.\n// If DEBUG then it is small; else it is large.\n\n#ifdef _DEBUG\nDEFINE int gNPolygons INIT(30);  // default number of polygons in map\nDEFINE int gMapXSize INIT(30);\nDEFINE int gMapYSize INIT(30);\nDEFINE int gGrainSize INIT(5);\n#else\nDEFINE int gNPolygons INIT(50000);    // default number of polygons in map\nDEFINE int gMapXSize INIT(1000);\nDEFINE int gMapYSize INIT(1000);\nDEFINE int gGrainSize INIT(20);\n#endif\nDEFINE int gMyRandomSeed INIT(2453185);\n\nDEFINE bool gIsGraphicalVersion INIT(false);\n\ntypedef enum {\n    NORTH_SIDE,\n    EAST_SIDE,\n    SOUTH_SIDE,\n    WEST_SIDE\n} allSides;\n\n#if _DEBUG\n#define PRINT_DEBUG(x) (cout << x << std::endl)\n#else\n#define PRINT_DEBUG(x)\n#endif\n\n\n#endif // _POVER_GLOBAL_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/pover_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Support for GUI display for Polygon overlay demo\n\n#define VIDEO_WINMAIN_ARGS\n#include <iostream>\n#include \"polyover.h\"\n#include \"polymain.h\"\n#include \"pover_video.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#ifndef _WIN32\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\n#include <windows.h>\n\nvoid rt_sleep(int msec) {\n    Sleep(msec);\n}\n\n#endif  /*  _WIN32  */\n\nusing namespace std;\n\nbool g_next_frame() {\n    if(++n_next_frame_calls >= frame_skips) { // the data race here is benign\n        n_next_frame_calls = 0; \n        return gVideo->next_frame();\n    } \n    return gVideo->running;\n}\n\nbool g_last_frame() {\n    if(n_next_frame_calls) return gVideo->next_frame(); \n    return gVideo->running;\n}\n\nbool initializeVideo(int argc, char **argv) {\n    //pover_video *l_video = new pover_video();\n    //gVideo = l_video;\n    gVideo->init_console();  // don't check return code.\n    gVideo->title = g_windowTitle;\n    g_useGraphics = gVideo->init_window(g_xwinsize, g_ywinsize);\n    return true;\n}\n\nvoid pover_video::on_process() {\n    tbb::tick_count t0, t1;\n    double naiveParallelTime, domainSplitParallelTime;\n    // create map1  These could be done in parallel, if the pseudorandom number generator were re-seeded.\n    GenerateMap(&gPolymap1, gMapXSize, gMapYSize, gNPolygons, /*red*/255, /*green*/0, /*blue*/127);\n    // create map2\n    GenerateMap(&gPolymap2, gMapXSize, gMapYSize, gNPolygons, /*red*/0, /*green*/255, /*blue*/127);\n        //\n        // Draw source maps\n    gDrawXOffset = map1XLoc;\n    gDrawYOffset = map1YLoc;\n        for(int i=0; i < int(gPolymap1->size()); i++) {\n            (*gPolymap1)[i].drawPoly();\n        }\n    gDrawXOffset = map2XLoc;\n    gDrawYOffset = map2YLoc;\n        for(int i=0; i < int(gPolymap2->size()) ;i++) {\n            (*gPolymap2)[i].drawPoly();\n        }\n        gDoDraw = true;\n\n    // run serial map generation\n    gDrawXOffset = maprXLoc;\n    gDrawYOffset = maprYLoc;\n    {\n        RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space\n        delete xp;\n        t0 = tbb::tick_count::now();\n        SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2);\n        t1 = tbb::tick_count::now();\n        cout << \"Serial overlay took \" << (t1-t0).seconds()*1000 << \" msec\" << std::endl;\n        gSerialTime = (t1-t0).seconds()*1000;\n#if _DEBUG\n        CheckPolygonMap(gResultMap);\n        // keep the map for comparison purposes.\n#else\n        delete gResultMap;\n#endif\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Serial Time,\" << gSerialTime << std::endl;\n            gCsvFile << \"Threads,\";\n            if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {\n                gCsvFile << \"Threads,Automatic\";\n            }\n            else {\n                for(int i=gThreadsLow; i <= gThreadsHigh; i++) {\n                    gCsvFile << i;\n                    if(i < gThreadsHigh) gCsvFile << \",\";\n                }\n            }\n            gCsvFile << std::endl;\n        }\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // run naive parallel map generation\n    {\n        Polygon_map_t *resultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Naive Time\";\n        }\n        NaiveParallelOverlay(resultMap, *gPolymap1, *gPolymap2);\n        delete resultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // run split map generation\n    {\n        Polygon_map_t *resultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split Time\";\n        }\n        SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2);\n        delete resultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // split, accumulating into concurrent vector\n    {\n        concurrent_Polygon_map_t *cresultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split CV time\";\n        }\n        SplitParallelOverlayCV(&cresultMap, gPolymap1, gPolymap2);\n        delete cresultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    // split, accumulating into ETS\n    {\n        ETS_Polygon_map_t *cresultMap;\n        if(gCsvFile.is_open()) {\n            gCsvFile << \"Split ETS time\";\n        }\n        SplitParallelOverlayETS(&cresultMap, gPolymap1, gPolymap2);\n        delete cresultMap;\n        if(gIsGraphicalVersion) rt_sleep(2000);\n    }\n    if(gIsGraphicalVersion) rt_sleep(8000);\n    delete gPolymap1;\n    delete gPolymap2;\n#if _DEBUG\n    delete gResultMap;\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/pover_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// support for GUI for polygon overlay demo\n//\n#ifndef _POVER_VIDEO_H_\n#define _POVER_VIDEO_H_\n#include \"../../common/gui/video.h\"\n\n#include \"pover_global.h\"  // for declaration of DEFINE and INIT\n\nDEFINE class video *gVideo INIT(0);\n\nDEFINE int n_next_frame_calls INIT(0);\nDEFINE int frame_skips INIT(10);\nextern bool g_next_frame();\nextern bool g_last_frame();\n\nclass pover_video: public video {\n    void on_process();\npublic:\n#ifdef _WINDOWS\n    bool graphic_display(){return video::win_hInstance != (HINSTANCE)NULL;}\n#else\n    bool graphic_display() { return true;} // fix this for Linux\n#endif\n    //void on_key(int key);\n};\n\nDEFINE int g_xwinsize INIT(1024);\nDEFINE int g_ywinsize INIT(768);\n\nDEFINE int map1XLoc INIT(10);\nDEFINE int map1YLoc INIT(10);\nDEFINE int map2XLoc INIT(270);\nDEFINE int map2YLoc INIT(10);\nDEFINE int maprXLoc INIT(530);\nDEFINE int maprYLoc INIT(10);\n\nDEFINE const char *g_windowTitle INIT(\"Polygon Overlay\");\nDEFINE bool g_useGraphics INIT(true);\n\nextern bool initializeVideo(int argc, char **argv);\n\nextern void rt_sleep(int msec);\n\n#endif  // _POVER_VIDEO_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Polygon_overlay sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Polygon_overlay sample</h1>\n\t</div>\n\n\t<p>\n\t\tPolygon Overlay example that demonstrates the use of parallel_for.\n\t<br><br>\n\t\tThis example is a simple implementation of polygon overlay, as described in \n\t\t<a href=\"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.9538\">\n\t\t\t<i>Parallelizing the Polygon Overlay Problem Using Orca</i>, by H.F. Langendoen</a>.\n\t<br><br>\n\t\tThe solution was implemented in three forms:\n\t\t<ul>\n\t\t\t<li>The naive serial solution.\n\t\t\t<li>The naive parallel solution, by splitting list of polygons from one map and intersecting \n\t\t\teach sub-list against the entire list of polygons from the second map.\n\t\t\t<li>A parallel solution where each map is split into submaps, with each resulting submap being\n\t\t\tintersected against the corresponding submap from the other map.  This solution requires some\n\t\t\tredundancy (some polygons are members of more than one submap).  To prevent multiple copies\n\t\t\tof a polygon from being placed in the solution map, if both polygons are duplicated (that is,\n\t\t\tif they both appear in more than one map), they are intersected but the result is not placed\n\t\t\tin the solution map.\n\t\t</ul>\n\t\tThe only optimization in each solution is that the area of the generated sub-polygons are subtracted from\n\t\tthe original area of one of the source polygons.  When the remaining area is zero, the intersection process\n\t\tis halted.\n\t<br><br>\n\t\t<i>A word about the speedup of the submap case.</i> One may get superlinear speedup in this case (for instance a \n\t\tlaptop with Intel&reg; Core(TM) Duo processor got a speedup of about 20 percent over serial.)  This results from two effects:\n\t\t<ul>\n\t\t\t<li>the number of threads used, and\n\t\t\t<li>the fact that for each submap, the number of polygons is smaller than that for the other two cases.\n\t\t</ul>\n\t\tIf there are, say, 400 polygons in each map, then on average the number of intersections calculated is \n\t\tapproximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.)  \n\t\tIf the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000.  So even\n\t\tcomparing the two sets of submaps serially should result in a speedup somewhere around 2.  This number \n\t\tis affected by the number of redundant polygons being compared; this effect would eventually swamp the gain\n\t\tfrom comparing smaller numbers of polygons per submap.  And remember the submaps are created by intersecting each\n\t\tmap with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400)\n\t\tin the case above, where N is the number of submaps generated, that can be done in parallel.\n\t<br><br>\n\t\tRunning the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap \n\t\tcase for a 2-processor system looks like\n\t<br><br>\n\t\t<img src=\"speedup.gif\" alt=\"Table of speedup for the algorithm\">\n\t<br><br>\n\t\tOne further optimization would be to sort one map, say <b>map1</b>, by maxY, and sort the other map (<b>map2</b>) \n\t\tby minY.  For <b>p1</b> in <b>map1</b>, start testing for intersection at the first <b>p2</b> in <b>map2</b> \n\t\tthat intersected the last polygon tested in <b>map1</b>.  This would speed up the intersection process greatly, \n\t\tbut the optimization would apply to all the methods, and the sort would have to be accounted for in the timing.\n\t<br><br>\n\t\tThe source maps are generated pseudo-randomly in the manner described in the paper above.  That is, if\n\t\twe need N polygons, then N \"boxes\" are chosen at random, then one-at-a-time the areas are expanded in\n\t\tone of fours directions until the area hits an adjacent polygon.  When this process is finished, the\n\t\tresulting map is inspected and any remaining unoccupied \"boxes\" are made into additional polygons, as\n\t\tlarge as possible in each case.  So the actual number of polygons in each map will in general be larger\n\t\tthan the number of polygons requested (sometimes by 10% or more.)\n\t<br><br>\n\t\tOne limitation of the program is that if the number of polygons in the source map is greater than the number of\n\t\t\"boxes\" (pixels in the GUI case), the maps cannot be generated.\n\t</p>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"polyover.cpp\">polyover.cpp</a>\n\t\t\t\t<dd>Source code for main program.\n\t\t\t\t<dt><a href=\"polyover.h\">polyover.h</a>\n\t\t\t\t<dd>Global variables, classes and enums.\n\t\t\t\t<dt><a href=\"pover_video.cpp\">pover_video.cpp</a>\n\t\t\t\t<dd>Source code for the GUI interface.\n\t\t\t\t<dt><a href=\"pover_video.h\">pover_video.h</a>\n\t\t\t\t<dd>Defines for the GUI version.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tGeneral build directions can be found <a href=\"../../index.html\">here</a>.\n\t\t\t<br><br>\n\t\t\t\tFor the various UI options, see the <a href=\"../../common/index.html\">common GUI code</a> build instructions.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tBuilding via the above make commands, or via Microsoft* Visual Studio* projects on Windows* systems, produces executable files\n\t\t\t\tnamed pover.exe.  To run these executables directly, use one or more of the following commands:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>pover.exe</tt>\n\t\t\t\t<dd>Run this version (release or debug).\n\t\t\t\t<dt><tt>pover.exe n:m</tt>\n\t\t\t\t<dd>Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version with the GUI turned off\n\t\t\t\t\t(e.g., <tt>make UI=con debug</tt>; see also the build directions above).\n\t\t\t\t\t<br>Run it with a small dataset, e.g., <tt>pover.exe&nbsp;--polys&nbsp;10&nbsp;--size&nbsp;5x5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display should yield reasonable performance in most cases, <i>running with no GUI\n\t\t\t\tdisplay is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel, Intel Core and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/polygon_overlay/rpolygon.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// rpolygon.h\n//\n#ifndef _RPOLYGON_H_\n#define _RPOLYGON_H_\n#include <vector>\n#include <iostream>\n#include \"pover_video.h\"\n\n#include \"tbb/scalable_allocator.h\"\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n\nusing namespace std;\n\nusing namespace tbb;\n\nclass RPolygon;\ntypedef scalable_allocator<RPolygon> RPolygon_allocator;\nDEFINE RPolygon_allocator rAlloc;\n\nenum MallocBehavior {\n    UseMalloc,\n    UseScalableAllocator\n};\n\nDEFINE MallocBehavior gMBehavior INIT(UseScalableAllocator);\n\nclass RPolygon {\npublic:\n    RPolygon() {m_XMin = m_YMin = m_XMax = m_YMax = 0;\n        m_r = m_g = m_b = 0;\n    }\n    RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) : m_XMin(xMin), m_YMin(yMin), m_XMax(xMax), m_YMax(yMax) {\n        if( r >= 0) {\n            m_r=(colorcomp_t)r; m_g=(colorcomp_t)g; m_b=(colorcomp_t)b;\n                        if(gDoDraw) drawPoly();\n        }\n    }\n\n    void set_nodraw(int xMin, int yMin, int xMax, int yMax) {m_XMin=xMin; m_YMin=yMin; m_XMax=xMax; m_YMax=yMax;}\n\n    RPolygon &intersect(RPolygon &otherPoly);\n    void set(int xMin, int yMin, int xMax, int yMax) {\n         set_nodraw(xMin,yMin,xMax,yMax);\n         if(gDoDraw) {\n            drawPoly();\n         }\n    }\n    void get(int *xMin, int *yMin, int *xMax, int *yMax) const {*xMin=m_XMin;*yMin=m_YMin;*xMax=m_XMax;*yMax=m_YMax;}\n    int xmax() const { return m_XMax; }\n    int xmin() const { return m_XMin; }\n    int ymax() const { return m_YMax; }\n    int ymin() const { return m_YMin; }\n    void setColor(colorcomp_t newr, colorcomp_t newg, colorcomp_t newb) {m_r = newr; m_g=newg; m_b=newb;}\n    void getColor(int *myr, int *myg, int *myb) {*myr=m_r; *myg=m_g; *myb=m_b;}\n    color_t myColor() {return gVideo->get_color(m_r, m_g, m_b);}\n    void drawPoly() {\n        if(gVideo->running) {\n            if(g_next_frame()) {    // Shouldn't call next_frame each time\n                drawing_area ldrawing(\n                    gDrawXOffset+m_XMin*gPolyXBoxSize,         //x\n                    gDrawYOffset+m_YMin*gPolyYBoxSize,         //y\n                    (m_XMax-m_XMin+1)*gPolyXBoxSize,           //sizex\n                    (m_YMax-m_YMin+1)*gPolyYBoxSize);          //sizey\n                for(int y=0; y<ldrawing.size_y; y++) {\n                    ldrawing.set_pos(0,y);\n                    color_t my_color = myColor();\n                    for(int x=0;x < ldrawing.size_x; x++) {\n                         ldrawing.put_pixel(my_color);\n                    }\n                }\n            }\n        }\n    }\n\n    int  area() {return ((m_XMax-m_XMin+1)*(m_YMax-m_YMin+1));}\n    void print(int i) { cout << \"RPolygon \" << i << \" (\" << m_XMin << \", \" << m_YMin << \")-(\" << m_XMax << \", \" << m_YMax << \") \" << endl; fflush(stdout);}\nprivate:\n    int m_XMin;\n    int m_YMin;\n    int m_XMax;\n    int m_YMax;\n    colorcomp_t m_r;\n    colorcomp_t m_g;\n    colorcomp_t m_b;\n};\n\n#if _MAIN_C_\nbool operator<(const RPolygon& a, const RPolygon& b) {\n    if(a.ymin() > b.ymin()) return false;\n    if(a.ymin() < b.ymin()) return true;\n    return a.xmin() < b.xmin();\n}\n#else\nextern bool operator<(const RPolygon& a, const RPolygon& b);\n#endif\n\nextern ostream& operator<<(ostream& s, const RPolygon &p);\n\nclass RPolygon_flagged {\n    RPolygon *myPoly;\n    bool is_duplicate;\npublic:\n    RPolygon_flagged() {myPoly = NULL; is_duplicate = false;}\n    RPolygon_flagged(RPolygon* _p, bool _is_duplicate) : myPoly(_p), is_duplicate(_is_duplicate) { }\n    bool isDuplicate() {return is_duplicate;}\n    void setDuplicate(bool newValue) {is_duplicate = newValue;}\n    RPolygon *p() {return myPoly;}\n    void setp(RPolygon *newp) {myPoly = newp;}\n};\n\ntypedef class vector<RPolygon, RPolygon_allocator> Polygon_map_t;\ntypedef class concurrent_vector<RPolygon, RPolygon_allocator> concurrent_Polygon_map_t;\ntypedef class enumerable_thread_specific<Polygon_map_t> ETS_Polygon_map_t;\ntypedef class vector<RPolygon_flagged, scalable_allocator<RPolygon_flagged> > Flagged_map_t; // we'll make shallow copies\n\ninline bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh) {\n    int xl1, yl1, xh1, yh1, xl2, yl2, xh2, yh2;\n#if _DEBUG\n     rt_sleep(1);   // slow down the process so we can see it.\n#endif\n    p1->get(&xl1, &yl1, &xh1, &yh1);\n    p2->get(&xl2, &yl2, &xh2, &yh2);\n    if(xl1 > xh2) return false;\n    if(xh1 < xl2) return false;\n    if(yl1 > yh2) return false;\n    if(yh1 < yl2) return false;\n    xl = (xl1 < xl2) ? xl2 : xl1;\n    xh = (xh1 < xh2) ? xh1 : xh2;\n    yl = (yl1 < yl2) ? yl2 : yl1;\n    yh = (yh1 < yh2) ? yh1 : yh2;\n    return true;\n}\n\n#endif // _RPOLYGON_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=seismic\nARGS=auto 0\nPERF_RUN_ARGS=auto 10000 silent\nLIGHT_ARGS=1:2 100\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1 -offload-attribute-target=mic\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\n# Currently only console mode is supported in offload version\noverride UI=con\nelse\nPERFFLAGS=-msse2\nendif\n\nSOURCES = ../../common/gui/$(UI)video.cpp universe.cpp seismic_video.cpp main.cpp\n\ninclude ../../common/gui/Makefile.gmake\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB) $(LIBS)\n\ndebug: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nperf_build: override CXXFLAGS+=$(PERFFLAGS)\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define VIDEO_WINMAIN_ARGS\n\n#include <iostream>\n#include \"tbb/tick_count.h\"\n#include \"../../common/utility/utility.h\"\n\n#include \"seismic_video.h\"\n#include \"universe.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nUniverse u;\n\nstruct RunOptions {\n    //! It is used for console mode for test with different number of threads and also has\n    //! meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).\n    //!                  threads.second - initialization value for scheduler\n    utility::thread_number_range threads;\n    int numberOfFrames;\n    bool silent;\n    bool parallel;\n    RunOptions(utility::thread_number_range threads_ ,    int number_of_frames_ ,     bool silent_ , bool parallel_ )\n        : threads(threads_),numberOfFrames(number_of_frames_), silent(silent_), parallel(parallel_)\n    {\n    }\n};\n\nint do_get_default_num_threads() {\n    int threads;\n#if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n#endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\nRunOptions ParseCommandLine(int argc, char *argv[]){\n    // zero number of threads means to run serial version\n    utility::thread_number_range threads(get_default_num_threads,0,get_default_num_threads());\n\n    int numberOfFrames = 0;\n    bool silent = false;\n    bool serial = false;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(numberOfFrames,\"n-of-frames\",\"number of frames the example processes internally (0 means unlimited)\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(serial,\"serial\",\"in GUI mode start with serial version of algorithm\")\n    );\n    return RunOptions(threads,numberOfFrames,silent,!serial);\n}\n\nint main(int argc, char *argv[])\n{\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n        RunOptions options = ParseCommandLine(argc,argv);\n        SeismicVideo video(u,options.numberOfFrames,options.threads.last,options.parallel);\n\n        // video layer init\n        if(video.init_window(u.UniverseWidth, u.UniverseHeight)) {\n            video.calc_fps = true;\n            video.threaded = options.threads.first > 0;\n            // video is ok, init Universe\n            u.InitializeUniverse(video);\n            // main loop\n            video.main_loop();\n        }\n        else if(video.init_console()) {\n            // do console mode\n            if (options.numberOfFrames == 0) {\n                options.numberOfFrames = 1000;\n                std::cout << \"Substituting 1000 for unlimited frames because not running interactively\\n\";\n            }\n            for(int p = options.threads.first;  p <= options.threads.last; p = options.threads.step(p)) {\n                tbb::tick_count xwayParallelismStartTime = tbb::tick_count::now();\n                u.InitializeUniverse(video);\n                int numberOfFrames = options.numberOfFrames;\n#if __TBB_MIC_OFFLOAD\n                drawing_memory dmem = video.get_drawing_memory();\n                char *pMem = dmem.get_address();\n                size_t memSize = dmem.get_size();\n\n                #pragma offload target(mic) in(u, numberOfFrames, p, dmem), out(pMem:length(memSize))\n                {\n                    // It is necessary to update the pointer on mic \n                    // since the address spaces on host and on target are different\n                    dmem.set_address(pMem);\n                    u.SetDrawingMemory(dmem);\n#endif // __TBB_MIC_OFFLOAD\n                    if (p==0) {\n                        //run a serial version\n                        for( int i=0; i<numberOfFrames; ++i ) {\n                            u.SerialUpdateUniverse();\n                        }\n                    } else {\n                        tbb::task_scheduler_init init(p);\n                        for( int i=0; i<numberOfFrames; ++i ) {\n                            u.ParallelUpdateUniverse();\n                        }\n                    }\n#if __TBB_MIC_OFFLOAD\n                }\n#endif // __TBB_MIC_OFFLOAD\n\n                if (!options.silent){\n                    double fps =  options.numberOfFrames/((tbb::tick_count::now()-xwayParallelismStartTime).seconds());\n                    std::cout<<fps<<\" frame per sec with \";\n                    if (p==0){\n                        std::cout<<\"serial code\\n\";\n                    }else{\n                        std::cout<<p<<\" way parallelism\\n\";\n                    }\n                }\n            }\n        }\n        video.terminate();\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    }catch(std::exception& e){\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Seismic sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Seismic sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t<br><br>\n\t\t<b>Note:</b> Currently, the offload version does not support GUI and can only be used with console mode.\n\t</p>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"universe.h\">universe.h</a>\n\t\t\t\t<dd>Wave propagation methods interface.\n\t\t\t\t<dt><a href=\"universe.cpp\">universe.cpp</a>\n\t\t\t\t<dd>Wave propagation methods implementation.\n\t\t\t\t<dt><a href=\"seismic_video.h\">seismic_video.h</a>\n\t\t\t\t<dd>GUI mode support interface.\n\t\t\t\t<dt><a href=\"seismic_video.cpp\">seismic_video.cpp</a>\n\t\t\t\t<dd>GUI mode support implementation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>The following additional options are supported:</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make [(general targets: {release, debug} [test])] UI={con, gdi, d2d, x, mac}</tt>\n\t\t\t\t<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*,  \n\t\t\t\t\tDirect2D*, X11, or OpenGL*\n\t\t\t\t\t(see the description of the <a href=\"../../common/index.html\">common GUI code</a>\n\t\t\t\t\tfor more information on available graphics support).<br>\n\t\t\t\t\tFor Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.<br>\n\t\t\t\t\tFor Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior\n\t\t\t\t\tperformance, but can only be used if the Microsoft* DirectX* SDK is installed on your system \n\t\t\t\t\tand if overlay is supported by your graphics card.<br>\n\t\t\t\t\tUse UI=con to build without the GUI for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] XARCH=x64</tt>\n\t\t\t\t<dd>Build and run as above, but also specify XARCH=x64\n\t\t\t\t\t(or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.\n\t\t\t\t<dt><tt>make [(above options or targets)] DDLIB_DIR=&lt;<i>specify path to Direct Draw* SDK here</i>&gt;</tt>\n\t\t\t\t<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.\n\t\t\t\t<dt><tt>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</tt>\n\t\t\t\t<dd>Build and run as above, but enable full X11 synchronization if you experience \"tearing\" of motion on slower video systems.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>seismic <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>seismic [<i>n-of-threads</i>=value] [<i>n-of-frames</i>=value] [<i>silent</i>] [<i>serial</i>]</tt>\n\t\t\t\t<dt><tt>seismic [<i>n-of-threads</i> [<i>n-of-frames</i>]] [<i>silent</i>] [<i>serial</i>]</tt>\n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-frames</i> is a number of frames the example processes internally.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>serial</i> - in GUI mode start with serial version of algorithm.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector::\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with the desired number of threads and smaller number of frames, e.g., <tt>seismic 4 5</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Hot keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tThe following hot keys can be used in interactive execution mode when the example is compiled with the graphical\n\t\t\t\tuser interface:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt>&lt;left mouse button&gt;\n\t\t\t\t<dd>Starts new seismic wave in place specified by mouse cursor.\n\t\t\t\t<dt>&lt;space&gt;\n\t\t\t\t<dd>Toggles between parallel and serial execution modes.\n\t\t\t\t<dt>&lt;p&gt;\n\t\t\t\t<dd>Enables parallel execution mode.\n\t\t\t\t<dt>&lt;s&gt;\n\t\t\t\t<dd>Enables serial execution mode.\n\t\t\t\t<dt>&lt;e&gt;\n\t\t\t\t<dd>Enables screen updates.\n\t\t\t\t<dt>&lt;d&gt;\n\t\t\t\t<dd>Disables screen updates <i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt>&lt;esc&gt;\n\t\t\t\t<dd>Stops execution.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI\n\t\t\t\tdisplay turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/seismic_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"seismic_video.h\"\n#include \"universe.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nconst char * const SeismicVideo::titles[2] = {\"Seismic Simulation: Serial\", \"Seismic Simulation: Parallel\"};\nvoid SeismicVideo::on_mouse(int x, int y, int key) {\n    if(key == 1){\n        u_.TryPutNewPulseSource(x,y);\n    }\n}\n\nvoid SeismicVideo::on_key(int key) {\n    key &= 0xff;\n    if(char(key) == ' ') initIsParallel = !initIsParallel;\n    else if(char(key) == 'p') initIsParallel = true;\n    else if(char(key) == 's') initIsParallel = false;\n    else if(char(key) == 'e') updating = true;\n    else if(char(key) == 'd') updating = false;\n    else if(key == 27) running = false;\n    title = titles[initIsParallel?1:0];\n}\n\nvoid SeismicVideo::on_process() {\n    tbb::task_scheduler_init Init(threadsHigh);\n    for( int frames = 0; numberOfFrames_==0 || frames<numberOfFrames_; ++frames ) {\n        if( initIsParallel )\n            u_.ParallelUpdateUniverse();\n        else\n            u_.SerialUpdateUniverse();\n        if( !next_frame() ) break;\n    }\n}\n\n#ifdef _WINDOWS\n#include \"msvs/resource.h\"\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\nSeismicVideo * gVideo = NULL;\n#endif\n\nSeismicVideo::SeismicVideo(    Universe &u, int number_of_frames, int threads_high, bool init_is_parallel)\n    :numberOfFrames_(number_of_frames),initIsParallel(init_is_parallel),u_(u),threadsHigh(threads_high)\n{\n    title = titles[initIsParallel?1:0];\n#ifdef _WINDOWS\n    gVideo = this;\n    LoadStringA(video::win_hInstance, IDC_SEISMICSIMULATION, szWindowClass, MAX_LOADSTRING);\n    memset(&wcex, 0, sizeof(wcex));\n    wcex.lpfnWndProc    = (WNDPROC)WndProc;\n    wcex.hIcon          = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SEISMICSIMULATION));\n    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);\n    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);\n    wcex.lpszMenuName   = LPCTSTR(IDC_SEISMICSIMULATION);\n    wcex.lpszClassName  = szWindowClass;\n    wcex.hIconSm        = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SMALL));\n    win_set_class(wcex); // ascii convention here\n    win_load_accelerators(IDC_SEISMICSIMULATION);\n#endif\n\n}\n\n\n\n\n\n#ifdef _WINDOWS\n//\n//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)\n//\n//  PURPOSE:  Processes messages for the main window.\n//\n//  WM_COMMAND  - process the application menu\n//  WM_PAINT    - Paint the main window\n//  WM_DESTROY  - post a quit message and return\n//\n//\nLRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\n{\n    switch (message)\n    {\n    case WM_INITDIALOG: return TRUE;\n    case WM_COMMAND:\n        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {\n            EndDialog(hDlg, LOWORD(wParam));\n            return TRUE;\n        }\n        break;\n    }\n    return FALSE;\n}\n\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\n{\n    int wmId;\n    switch (message) {\n    case WM_COMMAND:\n        wmId    = LOWORD(wParam);\n        // Parse the menu selections:\n        switch (wmId)\n        {\n        case IDM_ABOUT:\n            DialogBox(video::win_hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)About);\n            break;\n        case IDM_EXIT:\n            PostQuitMessage(0);\n            break;\n        case ID_FILE_PARALLEL:\n            gVideo->on_key('p');\n            break;\n        case ID_FILE_SERIAL:\n            gVideo->on_key('s');\n            break;\n        case ID_FILE_ENABLEGUI:\n            gVideo->on_key('e');\n            break;\n        case ID_FILE_DISABLEGUI:\n            gVideo->on_key('d');\n            break;\n        default:\n            return DefWindowProc(hWnd, message, wParam, lParam);\n        }\n        break;\n    default:\n        return DefWindowProc(hWnd, message, wParam, lParam);\n    }\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/seismic_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef SEISMIC_VIDEO_H_\n#define SEISMIC_VIDEO_H_\n\n#include \"../../common/gui/video.h\"\n\nclass Universe;\n\nclass SeismicVideo : public video\n{\n#ifdef _WINDOWS\n    #define MAX_LOADSTRING 100\n    TCHAR szWindowClass[MAX_LOADSTRING];    // the main window class name\n    WNDCLASSEX wcex;\n#endif\n    static const char * const titles[2];\n\n    bool initIsParallel ;\n\n    Universe &u_;\n    int numberOfFrames_; // 0 means forever, positive means number of frames, negative is undefined\n    int threadsHigh;\nprivate:\n    void on_mouse(int x, int y, int key);\n    void on_process();\n\n#ifdef _WINDOWS\npublic:\n#endif\n    void on_key(int key);\n\npublic:\n    SeismicVideo(    Universe &u,int numberOfFrames, int threadsHigh, bool initIsParallel=true);\n};\n#endif /* SEISMIC_VIDEO_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/universe.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../../common/gui/video.h\"\n#include <cmath>\n#include \"tbb/blocked_range.h\"\n#include \"tbb/parallel_for.h\"\n\n\nusing namespace std;\n\n#ifdef _MSC_VER\n// warning C4068: unknown pragma\n#pragma warning(disable: 4068)\n// warning C4351: new behavior: elements of array 'array' will be default initialized\n#pragma warning(disable: 4351)\n#endif\n\n#include \"universe.h\"\n\nconst colorcomp_t MaterialColor[4][3] = { // BGR\n    {96,0,0},     // WATER\n    {0,48,48},    // SANDSTONE\n    {32,32,23}    // SHALE\n};\n\nvoid Universe::InitializeUniverse(video const& colorizer) {\n\n    pulseCounter = pulseTime = 100;\n    pulseX = UniverseWidth/3;\n    pulseY = UniverseHeight/4;\n    // Initialize V, S, and T to slightly non-zero values, in order to avoid denormal waves.\n    for( int i=0; i<UniverseHeight; ++i )\n#pragma ivdep\n        for( int j=0; j<UniverseWidth; ++j ) {\n            T[i][j] = S[i][j] = V[i][j] = ValueType(1.0E-6);\n        }\n    for( int i=1; i<UniverseHeight-1; ++i ) {\n        for( int j=1; j<UniverseWidth-1; ++j ) {\n            float x = float(j-UniverseWidth/2)/(UniverseWidth/2);\n            ValueType t = (ValueType)i/UniverseHeight;\n            MaterialType m;\n            D[i][j] = 1.0;\n            // Coefficient values are fictitious, and chosen to visually exaggerate\n            // physical effects such as Rayleigh waves.  The fabs/exp line generates\n            // a shale layer with a gentle upwards slope and an anticline.\n            if( t<0.3f ) {\n                m = WATER;\n                M[i][j] = 0.125;\n                L[i][j] = 0.125;\n            } else if( fabs(t-0.7+0.2*exp(-8*x*x)+0.025*x)<=0.1 ) {\n                m = SHALE;\n                M[i][j] = 0.5;\n                L[i][j] = 0.6;\n            } else {\n                m = SANDSTONE;\n                M[i][j] = 0.3;\n                L[i][j] = 0.4;\n            }\n            material[i][j] = m;\n        }\n    }\n    ValueType scale = 2.0f/ColorMapSize;\n    for( int k=0; k<4; ++k ) {\n        for( int i=0; i<ColorMapSize; ++i ) {\n            colorcomp_t c[3];\n            ValueType t = (i-ColorMapSize/2)*scale;\n            ValueType r = t>0 ? t : 0;\n            ValueType b = t<0 ? -t : 0;\n            ValueType g = 0.5f*fabs(t);\n            memcpy(c, MaterialColor[k], sizeof(c));\n            c[2] = colorcomp_t(r*(255-c[2])+c[2]);\n            c[1] = colorcomp_t(g*(255-c[1])+c[1]);\n            c[0] = colorcomp_t(b*(255-c[0])+c[0]);\n            ColorMap[k][i] = colorizer.get_color(c[2], c[1], c[0]);\n        }\n    }\n    // Set damping coefficients around border to reduce reflections from boundaries.\n    ValueType d = 1.0;\n    for( int k=DamperSize-1; k>0; --k ) {\n        d *= 1-1.0f/(DamperSize*DamperSize);\n        for( int j=1; j<UniverseWidth-1; ++j ) {\n            D[k][j] *= d;\n            D[UniverseHeight-1-k][j] *= d;\n        }\n        for( int i=1; i<UniverseHeight-1; ++i ) {\n            D[i][k] *= d;\n            D[i][UniverseWidth-1-k] *= d;\n        }\n    }\n    drawingMemory = colorizer.get_drawing_memory();\n}\nvoid Universe::UpdatePulse() {\n    if( pulseCounter>0 ) {\n        ValueType t = (pulseCounter-pulseTime/2)*0.05f;\n        V[pulseY][pulseX] += 64*sqrt(M[pulseY][pulseX])*exp(-t*t);\n        --pulseCounter;\n    }\n}\n\nstruct Universe::Rectangle {\n    struct std::pair<int,int> xRange;\n    struct std::pair<int,int> yRange;\n    Rectangle (int startX, int startY, int width, int height):xRange(startX,width),yRange(startY,height){}\n    int StartX() const {return xRange.first;}\n    int StartY() const {return yRange.first;}\n    int Width()   const {return xRange.second;}\n    int Height()  const {return yRange.second;}\n    int EndX() const {return xRange.first + xRange.second;}\n    int EndY() const {return yRange.first + yRange.second;}\n\n};\n\nvoid Universe::UpdateStress(Rectangle const& r ) {\n    drawing_area  drawing(r.StartX(),r.StartY(),r.Width(),r.Height(),drawingMemory);\n    for( int i=r.StartY(); i<r.EndY() ; ++i ) {\n        drawing.set_pos(1, i-r.StartY());\n#pragma ivdep\n        for( int j=r.StartX(); j<r.EndX() ; ++j ) {\n            S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]);\n            T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]);\n            int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;\n            if( index<0 ) index = 0;\n            if( index>=ColorMapSize ) index = ColorMapSize-1;\n            color_t* c = ColorMap[material[i][j]];\n            drawing.put_pixel(c[index]);\n        }\n    }\n}\n\nvoid Universe::SerialUpdateStress() {\n    Rectangle  area(0, 0, UniverseWidth-1, UniverseHeight-1);\n    UpdateStress(area);\n}\n\nstruct UpdateStressBody {\n    Universe & u_;\n    UpdateStressBody(Universe & u):u_(u){}\n    void operator()( const tbb::blocked_range<int>& range ) const {\n        Universe::Rectangle area(0, range.begin(), u_.UniverseWidth-1, range.size());\n        u_.UpdateStress(area);\n    }\n};\n\nvoid Universe::ParallelUpdateStress(tbb::affinity_partitioner &affinity) {\n    tbb::parallel_for( tbb::blocked_range<int>( 0, UniverseHeight-1 ), // Index space for loop\n                       UpdateStressBody(*this),                             // Body of loop\n                       affinity );                                     // Affinity hint\n}\n\nvoid Universe::UpdateVelocity(Rectangle const& r) {\n    for( int i=r.StartY(); i<r.EndY(); ++i )\n#pragma ivdep\n        for( int j=r.StartX(); j<r.EndX(); ++j )\n            V[i][j] = D[i][j]*(V[i][j] + L[i][j]*(S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j]));\n}\n\nvoid Universe::SerialUpdateVelocity() {\n    UpdateVelocity(Rectangle(1,1,UniverseWidth-1,UniverseHeight-1));\n}\n\nstruct UpdateVelocityBody {\n    Universe & u_;\n    UpdateVelocityBody(Universe & u):u_(u){}\n    void operator()( const tbb::blocked_range<int>& y_range ) const {\n        u_.UpdateVelocity(Universe::Rectangle(1,y_range.begin(),u_.UniverseWidth-1,y_range.size()));\n    }\n};\n\nvoid Universe::ParallelUpdateVelocity(tbb::affinity_partitioner &affinity) {\n    tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight ), // Index space for loop\n                       UpdateVelocityBody(*this),                    // Body of loop\n                       affinity );                                   // Affinity hint\n}\n\nvoid Universe::SerialUpdateUniverse() {\n    UpdatePulse();\n    SerialUpdateStress();\n    SerialUpdateVelocity();\n}\n\nvoid Universe::ParallelUpdateUniverse() {\n    /** Affinity is an argument to parallel_for to hint that an iteration of a loop\n    is best replayed on the same processor for each execution of the loop.\n    It is a static object because it must remember where the iterations happened\n    in previous executions. */\n    static tbb::affinity_partitioner affinity;\n    UpdatePulse();\n    ParallelUpdateStress(affinity);\n    ParallelUpdateVelocity(affinity);\n}\n\nbool Universe::TryPutNewPulseSource(int x, int y){\n    if(pulseCounter == 0) {\n        pulseCounter = pulseTime;\n        pulseX = x; pulseY = y;\n        return true;\n    }\n    return false;\n}\n\nvoid Universe::SetDrawingMemory(const drawing_memory &dmem) {\n    drawingMemory = dmem;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/seismic/universe.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef UNIVERSE_H_\n#define UNIVERSE_H_\n\n#ifndef UNIVERSE_WIDTH\n#define UNIVERSE_WIDTH 1024\n#endif\n#ifndef UNIVERSE_HEIGHT\n#define UNIVERSE_HEIGHT 512\n#endif\n\n#include \"../../common/gui/video.h\"\n#include \"tbb/partitioner.h\"\n\nclass Universe {\npublic:\n    enum {\n        UniverseWidth  = UNIVERSE_WIDTH,\n        UniverseHeight = UNIVERSE_HEIGHT\n    };\nprivate:\n    //in order to avoid performance degradation due to cache aliasing issue\n    //some padding is needed after each row in array, and between array themselves.\n    //the padding is achieved by adjusting number of rows and columns.\n    //as the compiler is forced to place class members of the same clause in order of the\n    //declaration this seems to be the right way of padding.\n\n    //magic constants added below are chosen experimentally for 1024x512.\n    enum {\n        MaxWidth = UniverseWidth+1,\n        MaxHeight = UniverseHeight+3\n    };\n\n    typedef float ValueType;\n\n    //! Horizontal stress\n    ValueType S[MaxHeight][MaxWidth];\n\n    //! Velocity at each grid point\n    ValueType V[MaxHeight][MaxWidth];\n\n    //! Vertical stress\n    ValueType T[MaxHeight][MaxWidth];\n\n    //! Coefficient related to modulus\n    ValueType M[MaxHeight][MaxWidth];\n\n    //! Damping coefficients\n    ValueType D[MaxHeight][MaxWidth];\n\n    //! Coefficient related to lightness\n    ValueType L[MaxHeight][MaxWidth];\n\n    enum { ColorMapSize = 1024};\n    color_t ColorMap[4][ColorMapSize];\n\n    enum MaterialType {\n        WATER=0,\n        SANDSTONE=1,\n        SHALE=2\n    };\n\n    //! Values are MaterialType, cast to an unsigned char to save space.\n    unsigned char material[MaxHeight][MaxWidth];\n\nprivate:\n    enum { DamperSize = 32};\n\n    int pulseTime;\n    int pulseCounter;\n    int pulseX;\n    int pulseY;\n\n    drawing_memory drawingMemory;\n\npublic:\n    void InitializeUniverse(video const& colorizer);\n\n    void SerialUpdateUniverse();\n    void ParallelUpdateUniverse();\n    bool TryPutNewPulseSource(int x, int y);\n    void SetDrawingMemory(const drawing_memory &dmem);\nprivate:\n    struct Rectangle;\n    void UpdatePulse();\n    void UpdateStress(Rectangle const& r );\n\n    void SerialUpdateStress() ;\n    friend struct UpdateStressBody;\n    friend struct UpdateVelocityBody;\n    void ParallelUpdateStress(tbb::affinity_partitioner &affinity);\n\n    void UpdateVelocity(Rectangle const& r);\n\n    void SerialUpdateVelocity() ;\n    void ParallelUpdateVelocity(tbb::affinity_partitioner &affinity);\n};\n\n#endif /* UNIVERSE_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# The original source for this example is\n# Copyright (c) 1994-2008 John E. Stone\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. The name of the author may not be used to endorse or promote products\n#    derived from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n\n# GNU Makefile that builds and runs example.\nNAME:=tachyon\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\n# The default runtime arguments\nexport ARGS = dat/balls.dat\nexport PERF_RUN_ARGS = silent dat/balls3.dat\nexport LIGHT_ARGS= dat/model2.dat\n\n# define name suffix\nSUFFIX = .$(VERSION)\n\nLIBS ?= -lm\n\ninclude ../../common/gui/Makefile.gmake\n\nifeq ($(UI),x)\nUI_CXXFLAGS += -DX_FULLSYNC \nifneq (,$(findstring -lXext,$(LIBS)))\nUI_CXXFLAGS += -DX_NOSHMPIX\nendif\nendif # X\n\nMYCXXFLAGS = $(CXXFLAGS) $(UI_CXXFLAGS)\n\nall: build run\nrelease: build\ndebug: build_debug\ntest: run\n\nbuild: build_serial build_tbb1d build_tbb\nbuild_debug: build_serial_debug build_tbb1d_debug build_tbb_debug\nrun: run_serial run_tbb1d run_tbb\n\nserial: build_serial run_serial\nserial_debug: build_serial_debug run_serial\ntbb: build_tbb run_tbb\ntbb_debug: build_tbb_debug run_tbb\ntbb1d: build_tbb1d run_tbb1d\ntbb1d_debug: build_tbb1d_debug run_tbb1d\n\nbuild_serial:\n\t$(MAKE) VERSION=serial build_one\nbuild_serial_debug:\n\t$(MAKE) VERSION=serial ADD_DEBUG=1 build_one\nrun_serial:\n\t$(MAKE) VERSION=serial run_one\n\nbuild_tbb:\n\t$(MAKE) VERSION=tbb ADD_TBB=1 build_one\nbuild_tbb_debug:\n\t$(MAKE) VERSION=tbb ADD_TBB=1 ADD_DEBUG=1 build_one\nrun_tbb:\n\t$(MAKE) VERSION=tbb run_one\n\nbuild_tbb1d:\n\t$(MAKE) VERSION=tbb1d ADD_TBB=1 build_one\nbuild_tbb1d_debug:\n\t$(MAKE) VERSION=tbb1d ADD_TBB=1 ADD_DEBUG=1 build_one\nrun_tbb1d:\n\t$(MAKE) VERSION=tbb1d run_one\n\n\nperf_build:\n\t$(MAKE) UI=con VERSION=tbb ADD_TBB=1 build_one\nperf_run:\n\t$(MAKE) UI=con VERSION=tbb run_perf_one\n\nlight_test:\n\t$(MAKE) UI=con VERSION=tbb light_test_one\n\n\n#\n# Per-build Makefile rules (for recursive $(MAKE) calls from above)\n#\n\nSVERSION = $(VERSION)\n\nifeq ($(ADD_DEBUG),1)\nMYCXXFLAGS += -O0 -g -D_DEBUG\nelse\nMYCXXFLAGS += -O2 -DNDEBUG\nendif\n\n\nifeq ($(ADD_TBB),1)\nMYCXXFLAGS +=\nifeq ($(ADD_DEBUG),1)\nMYCXXFLAGS += -DTBB_USE_DEBUG\nLIBS += -ltbb_debug\nelse\nLIBS += -ltbb\nendif\nendif\n\nifeq ($(shell uname), Linux)\nLIBS += -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nSOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/main.cpp src/pthread.cpp src/tachyon_video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp\n\nbuild_one:\t$(EXE)\n\nrun_one:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nrun_perf_one:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n\nlight_test_one:\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\n\n$(EXE): $(SOURCE)\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME)$(SUFFIX).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME)$(SUFFIX).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME)$(SUFFIX).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\n\t$(CXX_UI) $(MYCXXFLAGS) $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS*\n\t$(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(MACUIOBJS) $(LIBS)\n\t$(RM) *.o\n\nclean: VERSION = *\nclean:\nifeq ($(UI),mac)\n\trm -rf $(NAME).*\nendif\n\t$(RM) $(EXE) *.o *.d\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Tachyon sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Tachyon sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel raytracer / renderer that demonstrates the use of parallel_for.\n\t</p>\n\t<p><i>\n\t\tThis example includes software developed by John E. Stone. See\n\t\t<a href=\"#copyright\">here</a> for copyright information.\n\t</i></p>\n\t<p>\n\t\tThis example is a 2-D raytracer/renderer that visually shows different parallel scheduling\n\t\tmethods and their resulting speedup.  The code was parallelized by speculating\n\t\tthat each pixel could be rendered in parallel.  The resulting parallel code was\n\t\tthen checked for correctness by using Intel&reg; Thread Checker, which\n\t\tpointed out where synchronization was needed.  Minimal synchronization was then\n\t\tinserted into the parallel code.  The resulting parallel code exhibits good speedup.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Versions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><b>serial</b>\n\t\t\t\t<dd>Original sequential version.\n\t\t\t\t<dt><b>tbb1d</b>\n\t\t\t\t<dd>Parallel version that uses Intel&reg; Threading Building Blocks (Intel&reg; TBB) and blocked_range to parallelize\n\t\t\t\t\tover tasks that are groups of scan-lines.\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>By default, this version uses one thread per available processor. To change this\n\t\t\t\t\tdefault, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.\n\t\t\t\t\t<li>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.\n\t\t\t\t\t\tThe blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner\n\t\t\t\t\t\tcontrols the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.\n\t\t\t\t\t</ul>\n\t\t\t\t<dt><b>tbb</b>\n\t\t\t\t<dd>Parallel version that uses Intel TBB and blocked_range2d to parallelize\n\t\t\t\t\tover tasks that are rectangular sub-areas.\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>By default, this version uses one thread per available processor.  To change this\n\t\t\t\t\tdefault, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.\n\t\t\t\t\t<li>This version uses a reasonable task grain size by default.  To change this default,\n\t\t\t\t\tset the TBB_GRAINSIZE environment variable to the desired grain size before running.\n\t\t\t\t\tThe grain size corresponds to the number of pixels (in the X or Y direction, for a\n\t\t\t\t\trectangular sub-area) in each parallel task.\n\t\t\t\t\t</ul>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/main.cpp\">src/main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the raytracer.\n\t\t\t\t<dt><a href=\"src/tachyon_video.cpp\">src/tachyon_video.cpp</a>\n\t\t\t\t<dd>Source code for GUI interfaces.\n\t\t\t\t<dt><a href=\"src/trace.serial.cpp\">src/trace.serial.cpp</a>\n\t\t\t\t<dd>Source code for original sequential version of example.\n\t\t\t\t<dt><a href=\"src/trace.tbb1d.cpp\">src/trace.tbb1d.cpp</a>\n\t\t\t\t<dd>Source code for Intel TBB blocked_range (scan-line) version of example.\n\t\t\t\t<dt><a href=\"src/trace.tbb.cpp\">src/trace.tbb.cpp</a>\n\t\t\t\t<dd>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.\n\t\t\t\t<dt>(src/*.cpp)\n\t\t\t\t<dd>Remainder of source code for example.\n\t\t\t\t<dt>(src/*.h)\n\t\t\t\t<dd>Remainder of include files for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"src/\">src</a>\n\t\t\t\t<dd>Contains source code and include files for the example.\n\t\t\t\t<dt><a href=\"dat/\">dat</a>\n\t\t\t\t<dd>Contains data sets for running the example.\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\t<p>\n\t\t\t\tFor Windows* systems Microsoft* Visual Studio* projects are provided for each of the above example versions.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tThe Makefile supports the following build targets (in addition to the <a href=\"../../index.html\">general</a> ones).\n\t\t\tHere, &lt;<i>version</i>&gt; is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make &lt;<i>version</i>&gt;[_debug]</tt>\n\t\t\t\t<dd>Build and run a single version (release or debug).\n\t\t\t\t\tEquivalent to 'make build_&lt;<i>version</i>&gt;[_debug] run_&lt;<i>version</i>&gt;'.\n\t\t\t\t<dt><tt>make build_&lt;<i>version</i>&gt;[_debug]</tt>\n\t\t\t\t<dd>Compile and link a single version (release or debug).\n\t\t\t\t\tThe resulting executable is left in the directory for the example.\n\t\t\t\t<dt><tt>make run_&lt;<i>version</i>&gt;</tt>\n\t\t\t\t<dd>Run a single version previously produced by one of the above commands.\n\t\t\t\t<dt><tt>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,\n\t\t\t\t\tteapot, trypsin4pti}</tt>\n\t\t\t\t<dd>Build and run as above, but run with the specified data set.\n\t\t\t\t<dt><tt>make [(above options or targets)] ARGS=-D</tt>\n\t\t\t\t<dd>Build and run as above, but run with disabled run-time display updating for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] UI={con, gdi, d2d, x, mac}</tt>\n\t\t\t\t<dd>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct2D*, X11, or OpenGL*\n\t\t\t\t\t(see the description of the <a href=\"../../common/index.html\">common GUI code</a>\n\t\t\t\t\tfor more information on available graphics support).\n\t\t\t\t\tFor Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.\n\t\t\t\t\tFor Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior\n\t\t\t\t\tperformance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.\n\t\t\t\t\tUse UI=con to build without the GUI for use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt><tt>make [(above options or targets)] XARCH=x64</tt>\n\t\t\t\t<dd>Build and run as above, but\n\t\t\t\t\talso specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.\n\t\t\t\t<dt><tt>make [(above options or targets)] DDLIB_DIR=&lt;<i>specify path to Direct Draw* SDK here</i>&gt;</tt>\n\t\t\t\t<dd>If you experience ddraw.lib linking problems, specify the correct library directory via this option.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tBuilding via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files\n\t\t\t\tnamed <tt>tachyon.&lt;<i>version</i>&gt;.exe</tt>.  To run these executables directly, use one or more of the following commands.\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>=value] [<i>boundthresh</i>=value] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i> [<i>boundthresh</i>]] [<i>no-display-updating</i>] [<i>nobounding</i>] [<i>silent</i>]</tt>\n\t\t\t\t<dd><i>dataset</i> is the path/name of one of the *.dat files in the <a href=\"dat\">dat</a> directory for the example.<br>\n\t\t\t\t\t<i>boundthresh</i> is a bounding threshold value.<br>\n\t\t\t\t\t<i>no-display-updating</i> - disable run-time display updating.<br>\n\t\t\t\t\t<i>no-bounding</i> - disable bounding technique.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt><tt>tachyon.&lt;<i>version</i>&gt; [<i>dataset</i>] [<i>no-display-updating</i>]</tt>\n\t\t\t\t<dd>Run this version (release or debug), but run with disabled run-time display updating\n\t\t\t\t\tfor use in making performance measurements\n\t\t\t\t\t<i>(strongly recommended when measuring performance or scalability; see note below)</i>.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the <tt>tbb</tt> example with the GUI turned off\n\t\t\t\t\t(e.g., <tt>make UI=con tbb_debug</tt>; see also the build directions above).\n\t\t\t\t\t<br>Run it with a small dataset, e.g., <tt>tachyon.tbb.exe dat/820spheres.dat no-display-updating</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>While running with the GUI display turned on the following keyboard keys can be used:</p>\n\t\t\t<dl>\n\t\t\t\t<dt><tt>ESC</tt>\n\t\t\t\t<dd>Interrupt the rendering and exit\n\t\t\t\t<dt><tt><i>Any key</i></tt>\n\t\t\t\t<dd>Enable repetition of rendering after the pause. Press ESC to stop the application.\n\t\t\t\t<dt><tt>Space</tt>\n\t\t\t\t<dd>Toggle run-time display updating mode while rendering (see no-display-updating above).\n\t\t\t\t<dt><tt>p</tt>\n\t\t\t\t<dd>Holds the picture after rendering completion. Press 'p' again to continue.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Notes</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<ul>\n\t\t\t<li>While running with the GUI display turned on should yield reasonable performance in most cases, <i>running with the GUI\n\t\t\t\tdisplay turned off is strongly recommended</i> in order to demonstrate the full performance and scalability of the example.\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<a name=\"copyright\"></a>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tThe original source for this example is\n\t\t\tCopyright (c) 1994-2008 John E. Stone\n\t\t\tAll rights reserved.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tRedistribution and use in source and binary forms, with or without\n\t\t\tmodification, are permitted provided that the following conditions\n\t\t\tare met:\n\t\t\t<ol>\n\t\t\t<li>Redistributions of source code must retain the above copyright\n\t\t\t   notice, this list of conditions and the following disclaimer.\n\t\t\t<li>Redistributions in binary form must reproduce the above copyright\n\t\t\t   notice, this list of conditions and the following disclaimer in the\n\t\t\t   documentation and/or other materials provided with the distribution.\n\t\t\t<li>The name of the author may not be used to endorse or promote products\n\t\t\t   derived from this software without specific prior written permission.\n\t\t\t</ol>\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\tTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n\t\t\tOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\t\t\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t\t\tARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n\t\t\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\t\t\tDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n\t\t\tOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n\t\t\tHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\t\t\tLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n\t\t\tOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n\t\t\tSUCH DAMAGE.\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/api.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * api.cpp - This file contains all of the API calls that are defined for\n *         external driver code to use.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n\n#include \"box.h\"\n#include \"cylinder.h\"\n#include \"plane.h\"\n#include \"quadric.h\"\n#include \"ring.h\"\n#include \"sphere.h\"\n#include \"triangle.h\"\n#include \"vol.h\"\n#include \"extvol.h\"\n\n#include \"texture.h\"\n#include \"light.h\"\n#include \"render.h\"\n#include \"camera.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"shade.h\"\n#include \"util.h\"\n#include \"imap.h\"\n#include \"global.h\"\n\n#include \"tachyon_video.h\"\n\ntypedef void * SceneHandle;\n#include \"api.h\"\n\n\nvector rt_vector(apiflt x, apiflt y, apiflt z) {\n  vector v;\n\n  v.x = x;\n  v.y = y;\n  v.z = z;\n\n  return v;\n}\n\ncolor rt_color(apiflt r, apiflt g, apiflt b) {\n  color c;\n  \n  c.r = r;\n  c.g = g;\n  c.b = b;\n  \n  return c;\n}\n\nvoid rt_initialize() {\n  rpcmsg msg;\n\n  reset_object();\n  reset_lights();\n  InitTextures();\n\n  if (!parinitted) {\n    parinitted=1;\n\n    msg.type=1; /* setup a ping message */\n  }\n}\n\nvoid rt_renderscene(SceneHandle voidscene) {\n  scenedef * scene = (scenedef *) voidscene;\n  renderscene(*scene);\n}\n\nvoid rt_camerasetup(SceneHandle voidscene, apiflt zoom, apiflt aspectratio, \n\tint antialiasing, int raydepth, \n\tvector camcent, vector viewvec, vector upvec) {\n  scenedef * scene = (scenedef *) voidscene;\n\n  vector newupvec;\n  vector newviewvec;\n  vector newrightvec;\n \n  VCross((vector *) &upvec, &viewvec, &newrightvec);\n  VNorm(&newrightvec);\n\n  VCross((vector *) &viewvec, &newrightvec, &newupvec);\n  VNorm(&newupvec);\n\n  newviewvec=viewvec;\n  VNorm(&newviewvec);\n\n\n  scene->camzoom=zoom; \n  scene->aspectratio=aspectratio;\n  scene->antialiasing=antialiasing;\n  scene->raydepth=raydepth; \n  scene->camcent=camcent;\n  scene->camviewvec=newviewvec;\n  scene->camrightvec=newrightvec;\n  scene->camupvec=newupvec;\n}\n\nvoid rt_outputfile(SceneHandle voidscene, const char * outname) {\n  scenedef * scene = (scenedef *) voidscene;\n  strcpy((char *) &scene->outfilename, outname);\n}\n\nvoid rt_resolution(SceneHandle voidscene, int hres, int vres) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->hres=hres;\n  scene->vres=vres;\n}\n\nvoid rt_verbose(SceneHandle voidscene, int v) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->verbosemode = v;\n}\n\nvoid rt_rawimage(SceneHandle voidscene, unsigned char *rawimage) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->rawimage = rawimage;\n}\n\nvoid rt_background(SceneHandle voidscene, color col) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->background.r = col.r;\n  scene->background.g = col.g;\n  scene->background.b = col.b;\n}\n\nvoid rt_boundmode(SceneHandle voidscene, int mode) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->boundmode = mode;\n}\n\nvoid rt_boundthresh(SceneHandle voidscene, int threshold) {\n  scenedef * scene = (scenedef *) voidscene;\n \n  if (threshold > 1) {\n    scene->boundthresh = threshold;\n  }\n  else {\n    rtmesg(\"Ignoring out-of-range automatic bounding threshold.\\n\");\n    rtmesg(\"Automatic bounding threshold reset to default.\\n\");\n    scene->boundthresh = MAXOCTNODES;\n  }\n}\n\nvoid rt_displaymode(SceneHandle voidscene, int mode) {\n  scenedef * scene = (scenedef *) voidscene;\n  scene->displaymode = mode;\n}\n\n\nvoid rt_scenesetup(SceneHandle voidscene, char * outname, int hres, int vres, int verbose) {\n  rt_outputfile(voidscene, outname);\n  rt_resolution(voidscene, hres, vres);\n  rt_verbose(voidscene, verbose);\n}\n\nSceneHandle rt_newscene(void) {\n  scenedef * scene;\n  SceneHandle voidscene;\n\n  scene = (scenedef *) malloc(sizeof(scenedef));\n  memset(scene, 0, sizeof(scenedef));             /* clear all valuas to 0  */\n\n  voidscene = (SceneHandle) scene;\n\n  rt_outputfile(voidscene, \"/dev/null\");   /* default output file (.tga)   */\n  rt_resolution(voidscene, 512, 512);             /* 512x512 resolution     */\n  rt_verbose(voidscene, 0);                       /* verbose messages off   */\n  rt_rawimage(voidscene, NULL);                   /* raw image output off   */\n  rt_boundmode(voidscene, RT_BOUNDING_ENABLED);   /* spatial subdivision on */\n  rt_boundthresh(voidscene, MAXOCTNODES);         /* default threshold      */\n  rt_displaymode(voidscene, RT_DISPLAY_ENABLED);  /* video output on        */\n  rt_camerasetup(voidscene, 1.0, 1.0, 0, 6,\n                 rt_vector(0.0, 0.0, 0.0),\n                 rt_vector(0.0, 0.0, 1.0),\n                 rt_vector(0.0, 1.0, 0.0));\n \n  return scene;\n}\n\nvoid rt_deletescene(SceneHandle scene) {\n  if (scene != NULL)\n    free(scene);\n}\n\nvoid apitextotex(apitexture * apitex, texture * tex) {\n  switch(apitex->texturefunc) {\n    case 0: \n      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);\n      break;\n\n    case 1: \n      tex->texfunc=(color(*)(void *, void *, void *))(checker_texture);\n      break;\n\n    case 2: \n      tex->texfunc=(color(*)(void *, void *, void *))(grit_texture);\n      break;\n\n    case 3: \n      tex->texfunc=(color(*)(void *, void *, void *))(marble_texture);\n      break;\n\n    case 4: \n      tex->texfunc=(color(*)(void *, void *, void *))(wood_texture);\n      break;\n\n    case 5: \n      tex->texfunc=(color(*)(void *, void *, void *))(gnoise_texture);\n      break;\n\t\n    case 6: \n      tex->texfunc=(color(*)(void *, void *, void *))(cyl_checker_texture);\n      break;\n\n    case 7: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_sphere_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    case 8: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_cyl_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    case 9: \n      tex->texfunc=(color(*)(void *, void *, void *))(image_plane_texture);\n      tex->img=AllocateImage((char *)apitex->imap);\n      break;\n\n    default: \n      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);\n      break;\n  }\n\n       tex->ctr = apitex->ctr;\n       tex->rot = apitex->rot;\n     tex->scale = apitex->scale;\n      tex->uaxs = apitex->uaxs;\n      tex->vaxs = apitex->vaxs;\n   tex->ambient = apitex->ambient;\n   tex->diffuse = apitex->diffuse;\n  tex->specular = apitex->specular;\n   tex->opacity = apitex->opacity;\n       tex->col = apitex->col; \n\n  tex->islight = 0;\n  tex->shadowcast = 1;\n  tex->phong = 0.0;\n  tex->phongexp = 0.0;\n  tex->phongtype = 0;\n}\n\nvoid * rt_texture(apitexture * apitex) {\n  texture * tex;\n\n  tex=(texture *)rt_getmem(sizeof(texture));\n  apitextotex(apitex, tex); \n  return(tex);\n}\n\nvoid rt_tex_color(void * voidtex, color col) {\n  texture * tex = (texture *) voidtex;\n  tex->col = col;\n}\n\nvoid rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type) {\n  texture * tex = (texture *) voidtex;\n  tex->phong = phong;\n  tex->phongexp = phongexp;\n  tex->phongtype = type;\n}\n\nvoid rt_light(void * tex, vector ctr, apiflt rad) {\n  point_light * li;\n\n  li=newlight(tex, (vector) ctr, rad);\n\n  li->tex->islight=1;\n  li->tex->shadowcast=1;\n  li->tex->diffuse=0.0;\n  li->tex->specular=0.0;\n  li->tex->opacity=1.0;\n\n  add_light(li);\n  add_object((object *)li);\n}\n\nvoid rt_scalarvol(void * tex, vector min, vector max,\n\tint xs, int ys, int zs, char * fname, void * invol) {\n  add_object((object *) newscalarvol(tex, (vector)min, (vector)max, xs, ys, zs, fname, (scalarvol *) invol));\n}\n\nvoid rt_extvol(void * tex, vector min, vector max, int samples, flt (* evaluator)(flt, flt, flt)) {\n  add_object((object *) newextvol(tex, (vector)min, (vector)max, samples, evaluator));\n}\n\nvoid rt_box(void * tex, vector min, vector max) {\n  add_object((object *) newbox(tex, (vector)min, (vector)max));\n} \n\nvoid rt_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  add_object(newcylinder(tex, (vector)ctr, (vector)axis, rad));\n}\n\nvoid rt_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  add_object(newfcylinder(tex, (vector)ctr, (vector)axis, rad));\n}\n\nvoid rt_plane(void * tex, vector ctr, vector norm) {\n  add_object(newplane(tex, (vector)ctr, (vector)norm));\n} \n\nvoid rt_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {\n  add_object(newring(tex, (vector)ctr, (vector)norm, a, b));\n} \n\nvoid rt_sphere(void * tex, vector ctr, apiflt rad) {\n  add_object(newsphere(tex, (vector)ctr, rad));\n}\n\nvoid rt_tri(void * tex, vector v0, vector v1, vector v2) {\n  object * trn;\n\n  trn = newtri(tex, (vector)v0, (vector)v1, (vector)v2);\n\n  if (trn != NULL) { \n    add_object(trn);\n  }\n} \n\nvoid rt_stri(void * tex, vector v0, vector v1, vector v2, \n\t\tvector n0, vector n1, vector n2) {\n  object * trn;\n \n  trn = newstri(tex, (vector)v0, (vector)v1, (vector)v2, (vector)n0, (vector)n1, (vector)n2);\n\n  if (trn != NULL) { \n    add_object(trn);\n  }\n} \n\nvoid rt_quadsphere(void * tex, vector ctr, apiflt rad) {\n  quadric * q;\n  flt factor;\n  q=(quadric *) newquadric();\n  factor= 1.0 / (rad*rad);\n  q->tex=(texture *)tex;\n  q->ctr=ctr;\n \n  q->mat.a=factor;\n  q->mat.b=0.0;\n  q->mat.c=0.0;\n  q->mat.d=0.0;\n  q->mat.e=factor;\n  q->mat.f=0.0;\n  q->mat.g=0.0;\n  q->mat.h=factor;\n  q->mat.i=0.0;\n  q->mat.j=-1.0;\n \n  add_object((object *)q);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/api.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*****************************************************************************\n * api.h - The declarations and prototypes needed so that 3rd party driver   *\n *         code can run the raytracer.  Third party driver code should       * \n *         only use the functions in this header file to interface with      *\n *         the rendering engine.                                             *\n *************************************************************************** */\n\n\n/* \n *  $Id: api.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n\n/********************************************/\n/* Types defined for use with the API calls */\n/********************************************/\n\n#ifdef USESINGLEFLT\ntypedef float apiflt;   /* generic floating point number */\n#else\ntypedef double apiflt;  /* generic floating point number */\n#endif\n\ntypedef void * SceneHandle;\n\ntypedef struct {\n  int texturefunc; /* which texture function to use */\n  color col;    /* base object color */\n  int shadowcast;  /* does the object cast a shadow */\n  apiflt ambient;  /* ambient lighting */\n  apiflt diffuse;  /* diffuse reflection */\n  apiflt specular; /* specular reflection */\n  apiflt opacity;  /* how opaque the object is */ \n  vector ctr;   /* origin of texture */\n  vector rot;   /* rotation of texture around origin */\n  vector scale; /* scale of texture in x,y,z */ \n  vector uaxs;  /* planar map u axis */\n  vector vaxs;  /* planar map v axis */\n  char imap[96];   /* name of image map */ \n} apitexture;\n\n\n/*******************************************************************\n *  NOTE: The value passed in apitexture.texturefunc corresponds to \n *        the meanings given in this table:\n *\n *   0 - No texture function is applied other than standard lighting.\n *   1 - 3D checkerboard texture.  Red & Blue checkers through 3d space.\n *   2 - Grit texture, roughens up the surface of the object a bit.\n *   3 - 3D marble texture.  Makes a 3D swirl pattern through the object.\n *   4 - 3D wood texture.  Makes a 3D wood pattern through the object.\n *   5 - 3D gradient noise function.\n *   6 - I've forgotten :-)\n *   7 - Cylindrical Image Map  **** IMAGE MAPS REQUIRE the filename \n *   8 - Spherical Image Map         of the image be put in imap[]\n *   9 - Planar Image Map            part of the texture...\n *        planar requires uaxs, and vaxs..\n *\n *******************************************************************/\n\n/********************************************/\n/* Functions implemented to provide the API */\n/********************************************/\n\nvector rt_vector(apiflt x, apiflt y, apiflt z); /* helper to make vectors */\ncolor  rt_color(apiflt r, apiflt g, apiflt b);  /* helper to make colors */\n\nvoid rt_initialize();/* reset raytracer, memory deallocation */\nvoid rt_finalize(void); /* close down for good.. */\n\nSceneHandle rt_newscene(void);        /* allocate new scene */\nvoid rt_deletescene(SceneHandle); /* delete a scene */\nvoid rt_renderscene(SceneHandle); /* raytrace the current scene */  \nvoid rt_outputfile(SceneHandle, const char * outname); \nvoid rt_resolution(SceneHandle, int hres, int vres);\nvoid rt_verbose(SceneHandle, int v);\nvoid rt_rawimage(SceneHandle, unsigned char *rawimage);\nvoid rt_background(SceneHandle, color);\n\n/* Parameter values for rt_boundmode() */\n#define RT_BOUNDING_DISABLED 0\n#define RT_BOUNDING_ENABLED  1\n\nvoid rt_boundmode(SceneHandle, int);\nvoid rt_boundthresh(SceneHandle, int);\n\n/* Parameter values for rt_displaymode() */\n#define RT_DISPLAY_DISABLED  0\n#define RT_DISPLAY_ENABLED   1\n\nvoid rt_displaymode(SceneHandle, int);\n\nvoid rt_scenesetup(SceneHandle, char *, int, int, int);\n  /* scene, output filename, horizontal resolution, vertical resolution,\n            verbose mode */\n\n\nvoid rt_camerasetup(SceneHandle, apiflt, apiflt, int, int,\n\tvector, vector,  vector);\n  /* camera parms: scene, zoom, aspectratio, antialiasing, raydepth,\n\t\tcamera center, view direction, up direction */\n\n\n\nvoid * rt_texture(apitexture *);\n   /* pointer to the texture struct that would have been passed to each \n      object() call in older revisions.. */\n\n\n\n\nvoid rt_light(void * , vector, apiflt);     /* add a light */\n  /* light parms: texture, center, radius */ \n\nvoid rt_sphere(void *, vector, apiflt);    /* add a sphere */\n  /* sphere parms: texture, center, radius */\n\nvoid rt_scalarvol(void *, vector, vector,\n\t\t int, int, int, char *, void *); \n\nvoid rt_extvol(void *, vector, vector, int, apiflt (* evaluator)(apiflt, apiflt, apiflt)); \n\nvoid rt_box(void *, vector, vector);  \n  /* box parms: texture, min, max */\n\nvoid rt_plane(void *, vector, vector);  \n  /* plane parms: texture, center, normal */\n\nvoid rt_ring(void *, vector, vector, apiflt, apiflt); \n  /* ring parms: texture, center, normal, inner, outer */\n\nvoid rt_tri(void *, vector, vector, vector);  \n  /* tri parms: texture, vertex 0, vertex 1, vertex 2 */\n\nvoid rt_stri(void *, vector, vector, vector, \n\t\t\tvector, vector, vector); \n /* stri parms: texture, vertex 0, vertex 1, vertex 2, norm 0, norm 1, norm 2 */\n\nvoid rt_heightfield(void *, vector, int, int, apiflt *, apiflt, apiflt);\n  /* field parms: texture, center, m, n, field, wx, wy */\n\nvoid rt_landscape(void *, int, int, vector,  apiflt, apiflt);\n\nvoid rt_quadsphere(void *, vector, apiflt); /* add quadric sphere */\n  /* sphere parms: texture, center, radius */\n\nvoid rt_cylinder(void *, vector, vector, apiflt);\n\nvoid rt_fcylinder(void *, vector, vector, apiflt);\n\nvoid rt_polycylinder(void *, vector *, int, apiflt);\n\n\n/* new texture handling routines */\nvoid rt_tex_color(void * voidtex, color col); \n\n#define RT_PHONG_PLASTIC 0\n#define RT_PHONG_METAL   1\nvoid rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type); \n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/apigeom.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * api.cpp - This file contains all of the API calls that are defined for\n *         external driver code to use.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"api.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n\n#define MyVNorm(a)\t\tVNorm ((vector *) a)\n\nvoid rt_polycylinder(void * tex, vector * points, int numpts, apiflt rad) {\n  vector a;\n  int i;\n\n  if ((points == NULL) || (numpts == 0)) {\n    return;\n  }\n\n  if (numpts > 0) {\n    rt_sphere(tex, points[0], rad);\n    \n    if (numpts > 1) {\n      for (i=1; i<numpts; i++) {\n        a.x = points[i].x - points[i-1].x;\n        a.y = points[i].y - points[i-1].y;\n        a.z = points[i].z - points[i-1].z;\n        \n        rt_fcylinder(tex, points[i-1], a, rad);\n        rt_sphere(tex, points[i], rad);\n      }\n    }\n  }\n}\n\nvoid rt_heightfield(void * tex, vector ctr, int m, int n, \n                    apiflt * field, apiflt wx, apiflt wy) {\n  int xx,yy; \n  vector v0, v1, v2; \n  apiflt xoff, yoff, zoff;\n\n  xoff=ctr.x - (wx / 2.0);\n  yoff=ctr.z - (wy / 2.0);\n  zoff=ctr.y;\n\n  for (yy=0; yy<(n-1); yy++) { \n    for (xx=0; xx<(m-1); xx++) {\n      v0.x=wx*(xx    )/(m*1.0) + xoff; \n      v0.y=field[(yy    )*m + (xx    )] + zoff;\n      v0.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v1.x=wx*(xx + 1)/(m*1.0) + xoff; \n      v1.y=field[(yy    )*m + (xx + 1)] + zoff;\n      v1.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v2.x=wx*(xx + 1)/(m*1.0) + xoff; \n      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;\n      v2.z=wy*(yy + 1)/(n*1.0) + yoff;\n\n      rt_tri(tex, v1, v0, v2);\n\n      v0.x=wx*(xx    )/(m*1.0) + xoff;\n      v0.y=field[(yy    )*m + (xx    )] + zoff;\n      v0.z=wy*(yy    )/(n*1.0) + yoff;\n\n      v1.x=wx*(xx    )/(m*1.0) + xoff;\n      v1.y=field[(yy + 1)*m + (xx    )] + zoff;\n      v1.z=wy*(yy + 1)/(n*1.0) + yoff;\n\n      v2.x=wx*(xx + 1)/(m*1.0) + xoff;\n      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;\n      v2.z=wy*(yy + 1)/(n*1.0) + yoff;\n \n      rt_tri(tex, v0, v1, v2);\n    }\n  } \n} /* end of heightfield */\n\n\nstatic void rt_sheightfield(void * tex, vector ctr, int m, int n, \n                    apiflt * field, apiflt wx, apiflt wy) {\n  vector * vertices;\n  vector * normals;\n  vector offset;\n  apiflt xinc, yinc;\n  int x, y, addr; \n   \n  vertices = (vector *) malloc(m*n*sizeof(vector));\n  normals = (vector *) malloc(m*n*sizeof(vector));\n\n  offset.x = ctr.x - (wx / 2.0);\n  offset.y = ctr.z - (wy / 2.0);\n  offset.z = ctr.y;\n\n  xinc = wx / ((apiflt) m);\n  yinc = wy / ((apiflt) n);\n\n  /* build vertex list */\n  for (y=0; y<n; y++) { \n    for (x=0; x<m; x++) {\n      addr = y*m + x;\n      vertices[addr] = rt_vector(\n        x * xinc + offset.x,\n        field[addr] + offset.z,\n        y * yinc + offset.y);\n    }\n  }\n\n  /* build normals from vertex list */\n  for (x=1; x<m; x++) {\n    normals[x] = normals[(n - 1)*m + x] = rt_vector(0.0, 1.0, 0.0);\n  }\n  for (y=1; y<n; y++) {\n    normals[y*m] = normals[y*m + (m-1)] = rt_vector(0.0, 1.0, 0.0);\n  }\n  for (y=1; y<(n-1); y++) {\n    for (x=1; x<(m-1); x++) {\n      addr = y*m + x;\n\n      normals[addr] = rt_vector(\n        -(field[addr + 1] - field[addr - 1]) / (2.0 * xinc), \n        1.0, \n        -(field[addr + m] - field[addr - m]) / (2.0 * yinc));\n\n      MyVNorm(&normals[addr]);\n    }\n  }    \n\n  /* generate actual triangles */\n  for (y=0; y<(n-1); y++) {\n    for (x=0; x<(m-1); x++) {\n      addr = y*m + x;\n\n      rt_stri(tex, vertices[addr], vertices[addr + 1 + m], vertices[addr + 1],\n                   normals[addr], normals[addr + 1 + m], normals[addr + 1]);\n      rt_stri(tex, vertices[addr], vertices[addr + m], vertices[addr + 1 + m],\n                   normals[addr], normals[addr + m], normals[addr + 1 + m]);\n    }\n  }\n\n  free(normals);\n  free(vertices);\n} /* end of smoothed heightfield */\n\n\nstatic void adjust(apiflt *base, int xres, int yres, apiflt wx, apiflt wy, \n\t\tint xa, int ya, int x, int y, int xb, int yb) {\n  apiflt d, v;\n  \n  if (base[x + (xres*y)]==0.0) { \n\n    d=(abs(xa - xb) / (xres * 1.0))*wx + (abs(ya - yb) / (yres * 1.0))*wy; \n\n    v=(base[xa + (xres*ya)] + base[xb + (xres*yb)]) / 2.0 +\n       (((((rand() % 1000) - 500.0)/500.0)*d) / 8.0);\n\n    if (v < 0.0) v=0.0; \n    if (v > (xres + yres)) v=(xres + yres);\n    base[x + (xres * y)]=v; \n } \n}\n\nstatic void subdivide(apiflt *base, int xres, int yres, apiflt wx, apiflt wy,\n                  int x1, int y1, int x2, int y2) {\n  long x,y;\n\n  if (((x2 - x1) < 2) && ((y2 - y1) < 2)) { return; }\n\n  x=(x1 + x2) / 2;\n  y=(y1 + y2) / 2;\n\n  adjust(base, xres, yres, wx, wy, x1, y1, x, y1, x2, y1);\n  adjust(base, xres, yres, wx, wy, x2, y1, x2, y, x2, y2);\n  adjust(base, xres, yres, wx, wy, x1, y2, x, y2, x2, y2);\n  adjust(base, xres, yres, wx, wy, x1, y1, x1, y, x1, y2);\n\n \n  if (base[x + xres*y]==0.0) {\n    base[x + (xres * y)]=(base[x1 + xres*y1] + base[x2 + xres*y1] +\n                          base[x2 + xres*y2] + base[x1 + xres*y2]   )/4.0;\n  }\n \n  subdivide(base, xres, yres, wx, wy, x1, y1 ,x ,y);\n  subdivide(base, xres, yres, wx, wy, x, y1, x2, y);\n  subdivide(base, xres, yres, wx, wy, x, y, x2, y2);\n  subdivide(base, xres, yres, wx, wy, x1, y, x, y2);\n}\n\nvoid rt_landscape(void * tex, int m, int n, \n              \tvector ctr, apiflt wx, apiflt wy) {\n  int totalsize, x, y;\n  apiflt * field; \n\n  totalsize=m*n;\n\n  srand(totalsize);\n\n  field=(apiflt *) malloc(totalsize*sizeof(apiflt));\n\n  for (y=0; y<n; y++) {\n    for (x=0; x<m; x++) {\n       field[x + y*m]=0.0;\n    }\n  }\n\n  field[0 + 0]=1.0 + (rand() % 100)/100.0;\n  field[m - 1]=1.0 + (rand() % 100)/100.0;\n  field[0     + m*(n - 1)]=1.0 + (rand() % 100)/100.0;\n  field[m - 1 + m*(n - 1)]=1.0 + (rand() % 100)/100.0;\n\n  subdivide(field, m, n, wx, wy, 0, 0, m-1, n-1);\n\n  rt_sheightfield(tex, ctr, m, n, field, wx, wy);\n\n  free(field);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/apitrigeom.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * apitrigeom.cpp - This file contains code for generating triangle tesselated\n *                geometry, for use with OpenGL, XGL, etc.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"api.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n\n#define MyVNorm(a)\t\tVNorm ((vector *) a)\n#define MyVCross(a,b,c)\t\tVCross ((vector *) a, (vector *) b, (vector *) c)\n#define MyVAddS(x,a,b,c)\tVAddS ((flt) x, (vector *) a, (vector *) b, (vector *) c)\n\n#define CYLFACETS 36\n#define RINGFACETS 36\n#define SPHEREFACETS 25\n\nvoid rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  vector x, y, z, tmp;\n  double u, v, u2, v2;\n  int j;\n  vector p1, p2, p3, p4;\n  vector n1, n2;\n\n  z = axis;\n  MyVNorm(&z);\n  tmp.x = z.y - 2.1111111;\n  tmp.y = -z.z + 3.14159267;\n  tmp.z = z.x - 3.915292342341;\n  MyVNorm(&z);\n  MyVNorm(&tmp);\n  MyVCross(&z, &tmp, &x);\n  MyVNorm(&x);\n  MyVCross(&x, &z, &y);\n  MyVNorm(&y);\n\n  for (j=0; j<CYLFACETS; j++) {\n     u = rad * sin((6.28 * j) / (CYLFACETS - 1.0));\n     v = rad * cos((6.28 * j) / (CYLFACETS - 1.0));\n    u2 = rad * sin((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));\n    v2 = rad * cos((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));\n\n    p1.x = p1.y = p1.z = 0.0;\n    p4 = p3 = p2 = p1;\n\n    MyVAddS(u, &x, &p1, &p1);\n    MyVAddS(v, &y, &p1, &p1);\n    n1 = p1;\n    MyVNorm(&n1);\n    MyVAddS(1.0, &ctr, &p1, &p1);\n  \n\n    MyVAddS(u2, &x, &p2, &p2);\n    MyVAddS(v2, &y, &p2, &p2);\n    n2 = p2;\n    MyVNorm(&n2);\n    MyVAddS(1.0, &ctr, &p2, &p2);\n\n    MyVAddS(1.0, &axis, &p1, &p3);\n    MyVAddS(1.0, &axis, &p2, &p4);\n\n    rt_stri(tex, p1, p2, p3, n1, n2, n1);\n    rt_stri(tex, p3, p2, p4, n1, n2, n2);\n  }\n}\n\nvoid rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {\n  rt_fcylinder(tex, ctr, axis, rad);\n}\n\nvoid rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {\n  vector x, y, z, tmp;\n  double u, v, u2, v2;\n  int j;\n  vector p1, p2, p3, p4;\n  vector n1, n2;\n\n  z = norm;\n  MyVNorm(&z);\n  tmp.x = z.y - 2.1111111;\n  tmp.y = -z.z + 3.14159267;\n  tmp.z = z.x - 3.915292342341;\n  MyVNorm(&z);\n  MyVNorm(&tmp);\n  MyVCross(&z, &tmp, &x);\n  MyVNorm(&x);\n  MyVCross(&x, &z, &y);\n  MyVNorm(&y);\n\n  for (j=0; j<RINGFACETS; j++) {\n     u = sin((6.28 * j) / (RINGFACETS - 1.0));\n     v = cos((6.28 * j) / (RINGFACETS - 1.0));\n    u2 = sin((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));\n    v2 = cos((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));\n\n    p1.x = p1.y = p1.z = 0.0;\n    p4 = p3 = p2 = p1;\n\n    MyVAddS(u, &x, &p1, &p1);\n    MyVAddS(v, &y, &p1, &p1);\n    n1 = p1;\n    MyVNorm(&n1);\n    MyVAddS(a, &n1, &ctr, &p1);\n    MyVAddS(b, &n1, &ctr, &p3);\n\n    MyVAddS(u2, &x, &p2, &p2);\n    MyVAddS(v2, &y, &p2, &p2);\n    n2 = p2;\n    MyVNorm(&n2);\n    MyVAddS(a, &n2, &ctr, &p2);\n    MyVAddS(b, &n2, &ctr, &p4);\n\n    rt_stri(tex, p1, p2, p3, norm, norm, norm);\n    rt_stri(tex, p3, p2, p4, norm, norm, norm);\n\n  }\n} \n\nvoid rt_tri_box(void * tex, vector min, vector max) {\n  /* -XY face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, min.z), \n              rt_vector(max.x, max.y, min.z));\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(max.x, max.y, min.z), \n              rt_vector(max.x, min.y, min.z));\n\n  /* +XY face */\n  rt_tri(tex, rt_vector(min.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(min.x, max.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, min.y, max.z),\n              rt_vector(max.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z)); \n\n  /* -YZ face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, max.z),\n              rt_vector(min.x, min.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, max.y, min.z),\n              rt_vector(min.x, max.y, max.z)); \n\n  /* +YZ face */\n  rt_tri(tex, rt_vector(max.x, min.y, min.z),\n              rt_vector(max.x, min.y, max.z),\n              rt_vector(max.x, max.y, max.z));\n  rt_tri(tex, rt_vector(max.x, min.y, min.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(max.x, max.y, min.z));\n\n  /* -XZ face */\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(min.x, min.y, max.z), \n              rt_vector(max.x, min.y, max.z));\n  rt_tri(tex, rt_vector(min.x, min.y, min.z),\n              rt_vector(max.x, min.y, max.z), \n              rt_vector(max.x, min.y, min.z));\n\n  /* +XZ face */\n  rt_tri(tex, rt_vector(min.x, max.y, min.z),\n              rt_vector(max.x, max.y, max.z),\n              rt_vector(min.x, max.y, max.z)); \n  rt_tri(tex, rt_vector(min.x, max.y, min.z),\n              rt_vector(max.x, max.y, min.z),\n              rt_vector(max.x, max.y, max.z)); \n}\n\nvoid rt_tri_sphere(void * tex, vector ctr, apiflt rad) {\n}\n\nvoid rt_tri_plane(void * tex, vector ctr, vector norm) {\n  rt_tri_ring(tex, ctr, norm, 0.0, 10000.0);\n} \n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/apitrigeom.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * apitrigeom.h - header for functions to generate triangle tesselated \n *                geometry for use with OpenGL, XGL, etc.\n *\n */\n\nvoid rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad);\nvoid rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad);\nvoid rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b);\nvoid rt_tri_plane(void * tex, vector ctr, vector norm);\nvoid rt_tri_box(void * tex, vector min, vector max);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/bndbox.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * bndbox.cpp - This file contains the functions for dealing with bounding boxes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define BNDBOX_PRIVATE\n#include \"bndbox.h\"\n\nstatic object_methods bndbox_methods = {\n  (void (*)(void *, void *))(bndbox_intersect),\n  (void (*)(void *, void *, void *, void *))(NULL),\n  bndbox_bbox, \n  free_bndbox \n};\n\n\nbndbox * newbndbox(vector min, vector max) {\n  bndbox * b;\n  \n  b=(bndbox *) rt_getmem(sizeof(bndbox));\n  memset(b, 0, sizeof(bndbox));\n  b->min=min;\n  b->max=max;\n  b->methods = &bndbox_methods;\n\n  b->objlist=NULL;\n  b->tex=NULL;\n  b->nextobj=NULL;\n  return b;\n}\n\n\nstatic int bndbox_bbox(void * obj, vector * min, vector * max) {\n  bndbox * b = (bndbox *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\n\nstatic void free_bndbox(void * v) {\n  bndbox * b = (bndbox *) v; \n\n  free_objects(b->objlist);  \n \n  free(b);\n}\n\n\nstatic void bndbox_intersect(bndbox * bx, ray * ry) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  object * obj;\n  ray newray; \n\n  /* eliminate bounded rays whose bounds do not intersect  */\n  /* the bounds of the box..                               */\n  if (ry->flags & RT_RAY_BOUNDED) {\n    if ((ry->s.x > bx->max.x) && (ry->e.x > bx->max.x)) return;\n    if ((ry->s.x < bx->min.x) && (ry->e.x < bx->min.x)) return;\n  \n    if ((ry->s.y > bx->max.y) && (ry->e.y > bx->max.y)) return;\n    if ((ry->s.y < bx->min.y) && (ry->e.y < bx->min.y)) return;\n\n    if ((ry->s.z > bx->max.z) && (ry->e.z > bx->max.z)) return;\n    if ((ry->s.z < bx->min.z) && (ry->e.z < bx->min.z)) return;\n  }\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;\n  }\n  else { \n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } \n    if (tx1 > tnear) tnear=tx1;   \n    if (tx2 < tfar)   tfar=tx2;   \n  }  \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n  \n  if (ry->d.y == 0.0) { \n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;\n  }\n  else { \n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } \n    if (ty1 > tnear) tnear=ty1;   \n    if (ty2 < tfar)   tfar=ty2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n \n  if (ry->d.z == 0.0) { \n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;\n  }\n  else { \n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } \n    if (tz1 > tnear) tnear=tz1;   \n    if (tz2 < tfar)   tfar=tz2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n\n\n  /* intersect all of the enclosed objects */\n  newray=*ry;\n  newray.flags |= RT_RAY_BOUNDED;\n\n  RAYPNT(newray.s , (*ry) , tnear); \n  RAYPNT(newray.e , (*ry) , (tfar + EPSILON)); \n \n  obj = bx->objlist;\n  while (obj != NULL) {\n    obj->methods->intersect(obj, &newray); \n    obj = (object *)obj->nextobj;\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/bndbox.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * bndbox.h - This file contains the defines for bounding boxes etc.\n *\n *  $Id: bndbox.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n  object * objlist;\n} bndbox; \n\nbndbox * newbndbox(vector min, vector max);\n\n#ifdef BNDBOX_PRIVATE\n\nstatic int bndbox_bbox(void * obj, vector * min, vector * max);\nstatic void free_bndbox(void * v);\nstatic void bndbox_intersect(bndbox *, ray *);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/box.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * box.cpp - This file contains the functions for dealing with boxes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"box.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\nint box_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nstatic object_methods box_methods = {\n  (void (*)(void *, void *))(box_intersect),\n  (void (*)(void *, void *, void *, void *))(box_normal),\n  box_bbox, \n  free \n};\n\nbox * newbox(void * tex, vector min, vector max) {\n  box * b;\n  \n  b=(box *) rt_getmem(sizeof(box));\n  memset(b, 0, sizeof(box));\n  b->methods = &box_methods;\n  b->tex = (texture *)tex;\n  b->min = min; \n  b->max = max;\n\n  return b;\n}\n\nvoid box_intersect(box * bx, ray * ry) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } \n    if (tx1 > tnear) tnear=tx1;   \n    if (tx2 < tfar)   tfar=tx2;   \n  } \n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n  \n  if (ry->d.y == 0.0) { \n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } \n    if (ty1 > tnear) tnear=ty1;   \n    if (ty2 < tfar)   tfar=ty2;   \n  }\n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n \n  if (ry->d.z == 0.0) { \n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } \n    if (tz1 > tnear) tnear=tz1;   \n    if (tz2 < tfar)   tfar=tz2;   \n  }\n  if (tnear > tfar) return; \n  if (tfar < 0.0) return;\n\n  add_intersection(tnear, (object *) bx, ry);\n  add_intersection(tfar, (object *) bx, ry);\n}\n\nvoid box_normal(box * bx, vector  * pnt, ray * incident, vector * N) {\n  vector a, b, c; \n  flt t;\n \n  c.x=(bx->max.x + bx->min.x) / 2.0;\n  c.y=(bx->max.y + bx->min.y) / 2.0;\n  c.z=(bx->max.z + bx->min.z) / 2.0;\n \n  VSub((vector *) pnt, &c, N);\n  b=(*N);\n\n  a.x=fabs(N->x);\n  a.y=fabs(N->y);\n  a.z=fabs(N->z);\n \n  N->x=0.0;  N->y=0.0;  N->z=0.0;\n\n  t=MYMAX(a.x, MYMAX(a.y, a.z));  \n\n  if (t==a.x) N->x=b.x;  \n\n  if (t==a.y) N->y=b.y; \n\n  if (t==a.z) N->z=b.z;\n\n  VNorm(N);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/box.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * box.h - This file contains the defines for boxes etc.\n *\n *  $Id: box.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n} box; \n\n\nbox * newbox(void * tex, vector min, vector max);\nvoid box_intersect(box *, ray *);\nvoid box_normal(box *, vector *, ray * incident, vector *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/camera.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * camera.cpp - This file contains all of the functions for doing camera work.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"camera.h\"\n#include \"util.h\"\n\nray camray(scenedef *scene, int x, int y) {\n  ray ray1, newray;\n  vector projcent;\n  vector projpixel;\n  flt px, py, sx, sy;\n\n  sx = (flt) scene->hres; \n  sy = (flt) scene->vres;\n\n  /* calculate the width and height of the image plane given the */\n  /* aspect ratio, image resolution, and zoom factor */\n\n  px=((sx / sy) / scene->aspectratio) / scene->camzoom;\n  py=1.0 / scene->camzoom;    \n\n  /* assuming viewvec is a unit vector, then the center of the */\n  /* image plane is the camera center + vievec                 */\n  projcent.x = scene->camcent.x + scene->camviewvec.x;\n  projcent.y = scene->camcent.y + scene->camviewvec.y;\n  projcent.z = scene->camcent.z + scene->camviewvec.z;\n\n  /* starting from the center of the image plane, we move the   */\n  /* center of the pel we're calculating, to                    */ \n  /* projcent + (rightvec * x distance)                         */\n  ray1.o=projcent;\n  ray1.d=scene->camrightvec;\n  projpixel=Raypnt(&ray1, ((x*px/sx) - (px / 2.0))); \n\n  /* starting from the horizontally translated pel, we move the */\n  /* center of the pel we're calculating, to                    */ \n  /* projcent + (upvec * y distance)                            */\n  ray1.o=projpixel;\n  ray1.d=scene->camupvec;\n  projpixel=Raypnt(&ray1, ((y*py/sy) - (py / 2.0)));\n\n  /* now that we have the exact pel center in the image plane */\n  /* we create the real primary ray that will be used by the  */\n  /* rest of the system.                                      */\n  /* The ray is expected to be re-normalized elsewhere, we're */\n  /* only really concerned about getting its direction right. */\n  newray.o=scene->camcent;\n  VSub(&projpixel, &scene->camcent, &newray.d);\n  newray.depth = scene->raydepth;\n  newray.flags = RT_RAY_REGULAR;  /* camera only generates primary rays */\n\n  return newray;\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/camera.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * camera.h - This file contains the defines for camera routines etc.\n *\n *  $Id: camera.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nray  camray(scenedef *, int, int);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/coordsys.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * coordsys.cpp -  Routines to translate from one coordinate system to another.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"coordsys.h\"\n\nvoid xytopolar(flt x, flt y, flt rad, flt * u, flt * v) {\n  flt r1;\n  r1=x*x + y*y;  \n  *v=sqrt(r1 / (rad*rad));\n  if (y<0.0) \n    *u=1.0 - acos(x/sqrt(r1))/TWOPI;\n  else \n    *u= acos(x/sqrt(r1))/TWOPI; \n}\n\nvoid xyztocyl(vector pnt, flt height, flt * u, flt * v) {\n  flt r1;\n\n  r1=pnt.x*pnt.x + pnt.y*pnt.y;\n\n  *v=pnt.z / height;\n  if (pnt.y<0.0) \n    *u=1.0 - acos(pnt.x/sqrt(r1))/TWOPI;\n  else \n    *u=acos(pnt.x/sqrt(r1))/TWOPI;\n}\n\nvoid xyztospr(vector pnt, flt * u, flt * v) {\n  flt r1, phi, theta;\n \n  r1=sqrt(pnt.x*pnt.x + pnt.y*pnt.y + pnt.z*pnt.z);\n\n  phi=acos(-pnt.y/r1);   \n  *v=phi/3.1415926;\n\n  theta=acos((pnt.x/r1)/sin(phi))/TWOPI;\n\n  if (pnt.z > 0.0) \n    *u = theta;\n  else \n    *u = 1 - theta; \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/coordsys.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * coordsys.h - defines for coordinate system routines.\n *  \n *  $Id: coordsys.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#define TWOPI 6.2831853\n\nvoid xytopolar(flt, flt, flt, flt *, flt *);\nvoid xyztocyl(vector, flt, flt *, flt *);\nvoid xyztospr(vector, flt *, flt *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/cylinder.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * cylinder.cpp - This file contains the functions for dealing with cylinders.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define CYLINDER_PRIVATE \n#include \"cylinder.h\"\n\nstatic object_methods cylinder_methods = {\n  (void (*)(void *, void *))(cylinder_intersect),\n  (void (*)(void *, void *, void *, void *))(cylinder_normal),\n  cylinder_bbox, \n  free \n};\n\nstatic object_methods fcylinder_methods = {\n  (void (*)(void *, void *))(fcylinder_intersect),\n  (void (*)(void *, void *, void *, void *))(cylinder_normal),\n  fcylinder_bbox, \n  free \n};\n\n\nobject * newcylinder(void * tex, vector ctr, vector axis, flt rad) {\n  cylinder * c;\n  \n  c=(cylinder *) rt_getmem(sizeof(cylinder));\n  memset(c, 0, sizeof(cylinder));\n  c->methods = &cylinder_methods;\n\n  c->tex=(texture *) tex;\n  c->ctr=ctr;\n  c->axis=axis;\n  c->rad=rad;\n  return (object *) c;\n}\n\nstatic int cylinder_bbox(void * obj, vector * min, vector * max) {\n  return 0; /* infinite / unbounded object */\n}\n\nstatic void cylinder_intersect(cylinder * cyl, ray * ry) {\n  vector rc, n, D, O;  \n  flt t, s, tin, tout, ln, d; \n\n  rc.x = ry->o.x - cyl->ctr.x;\n  rc.y = ry->o.y - cyl->ctr.y;\n  rc.z = ry->o.z - cyl->ctr.z; \n\n  VCross(&ry->d, &cyl->axis, &n);\n\n  VDOT(ln, n, n);\n  ln=sqrt(ln);    /* finish length calculation */\n\n  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */\n    VDOT(d, rc, cyl->axis);         \n    D.x = rc.x - d * cyl->axis.x; \n    D.y = rc.y - d * cyl->axis.y;\n    D.z = rc.z - d * cyl->axis.z;\n    VDOT(d, D, D);\n    d = sqrt(d);\n    tin = -FHUGE;\n    tout = FHUGE;\n    /* if (d <= cyl->rad) then ray is inside cylinder.. else outside */\n  }\n\n  VNorm(&n);\n  VDOT(d, rc, n);\n  d = fabs(d); \n\n  if (d <= cyl->rad) {  /* ray intersects cylinder.. */\n    VCross(&rc, &cyl->axis, &O);\n    VDOT(t, O, n);\n    t = - t / ln;\n    VCross(&n, &cyl->axis, &O); \n    VNorm(&O);\n    VDOT(s, ry->d, O);\n    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);\n    tin = t - s;\n    add_intersection(tin, (object *) cyl, ry); \n    tout = t + s;\n    add_intersection(tout, (object *) cyl, ry);\n  }\n}\n\nstatic void cylinder_normal(cylinder * cyl, vector * pnt, ray * incident, vector * N) {\n  vector a,b,c;\n  flt t;\n\n  VSub((vector *) pnt, &(cyl->ctr), &a);\n\n  c=cyl->axis;\n\n  VNorm(&c);\n \n  VDOT(t, a, c);\n\n  b.x = c.x * t + cyl->ctr.x; \n  b.y = c.y * t + cyl->ctr.y;\n  b.z = c.z * t + cyl->ctr.z;\n\n  VSub(pnt, &b, N); \n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  { /* make cylinder double sided */\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\nobject * newfcylinder(void * tex, vector ctr, vector axis, flt rad) {\n  cylinder * c;\n  \n  c=(cylinder *) rt_getmem(sizeof(cylinder));\n  memset(c, 0, sizeof(cylinder));\n  c->methods = &fcylinder_methods;\n\n  c->tex=(texture *) tex;\n  c->ctr=ctr;\n  c->axis=axis;\n  c->rad=rad;\n\n  return (object *) c;\n}\n\nstatic int fcylinder_bbox(void * obj, vector * min, vector * max) {\n  cylinder * c = (cylinder *) obj;\n  vector mintmp, maxtmp;\n\n  mintmp.x = c->ctr.x;\n  mintmp.y = c->ctr.y;\n  mintmp.z = c->ctr.z;\n  maxtmp.x = c->ctr.x + c->axis.x;\n  maxtmp.y = c->ctr.y + c->axis.y;\n  maxtmp.z = c->ctr.z + c->axis.z;\n\n  min->x = MYMIN(mintmp.x, maxtmp.x);\n  min->y = MYMIN(mintmp.y, maxtmp.y);\n  min->z = MYMIN(mintmp.z, maxtmp.z);\n  min->x -= c->rad;\n  min->y -= c->rad;\n  min->z -= c->rad;\n\n  max->x = MYMAX(mintmp.x, maxtmp.x);\n  max->y = MYMAX(mintmp.y, maxtmp.y);\n  max->z = MYMAX(mintmp.z, maxtmp.z);\n  max->x += c->rad;\n  max->y += c->rad;\n  max->z += c->rad;\n\n  return 1;\n}\n\n\nstatic void fcylinder_intersect(cylinder * cyl, ray * ry) {\n  vector rc, n, O, hit, tmp2, ctmp4;\n  flt t, s, tin, tout, ln, d, tmp, tmp3;\n \n  rc.x = ry->o.x - cyl->ctr.x;  \n  rc.y = ry->o.y - cyl->ctr.y;\n  rc.z = ry->o.z - cyl->ctr.z;\n \n  VCross(&ry->d, &cyl->axis, &n);\n \n  VDOT(ln, n, n);\n  ln=sqrt(ln);    /* finish length calculation */\n \n  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */\n    return;       /* in this case, we want to miss or go through the \"hole\" */\n  }\n \n  VNorm(&n);\n  VDOT(d, rc, n);\n  d = fabs(d);\n \n  if (d <= cyl->rad) {  /* ray intersects cylinder.. */\n    VCross(&rc, &cyl->axis, &O);\n    VDOT(t, O, n);\n    t = - t / ln;\n    VCross(&n, &cyl->axis, &O);\n    VNorm(&O);\n    VDOT(s, ry->d, O);\n    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);\n    tin = t - s;\n\n    RAYPNT(hit, (*ry), tin); \n\n    ctmp4=cyl->axis;\n    VNorm(&ctmp4);\n\n    tmp2.x = hit.x - cyl->ctr.x;   \n    tmp2.y = hit.y - cyl->ctr.y;   \n    tmp2.z = hit.z - cyl->ctr.z;   \n\n    VDOT(tmp,  tmp2, ctmp4);\n    VDOT(tmp3, cyl->axis, cyl->axis);\n\n    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) \n      add_intersection(tin, (object *) cyl, ry);\n    tout = t + s;\n\n    RAYPNT(hit, (*ry), tout); \n\n    tmp2.x = hit.x - cyl->ctr.x;   \n    tmp2.y = hit.y - cyl->ctr.y;   \n    tmp2.z = hit.z - cyl->ctr.z;   \n\n    VDOT(tmp,  tmp2, ctmp4); \n    VDOT(tmp3, cyl->axis, cyl->axis);\n\n    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) \n      add_intersection(tout, (object *) cyl, ry);\n  }\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/cylinder.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * cylinder.h - This file contains the defines for cylinders etc.\n *\n *  $Id: cylinder.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nobject * newcylinder(void *, vector, vector, flt);\nobject * newfcylinder(void *, vector, vector, flt);\n\n#ifdef CYLINDER_PRIVATE\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  vector axis;\n  flt rad;\n} cylinder;\n\nstatic void cylinder_intersect(cylinder *, ray *);\nstatic void fcylinder_intersect(cylinder *, ray *);\n\nstatic int cylinder_bbox(void * obj, vector * min, vector * max);\nstatic int fcylinder_bbox(void * obj, vector * min, vector * max);\n\nstatic void cylinder_normal(cylinder *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/extvol.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * extvol.cpp - Volume rendering helper routines etc.\n */\n\n#include<stdio.h>\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"util.h\"\n#include \"box.h\"\n#include \"extvol.h\"\n#include \"trace.h\"\n#include \"sphere.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"global.h\"\n\n\nint extvol_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nstatic object_methods extvol_methods = {\n  (void (*)(void *, void *))(box_intersect),\n  (void (*)(void *, void *, void *, void *))(box_normal),\n  extvol_bbox, \n  free \n};\n\nextvol * newextvol(void * voidtex, vector min, vector max, \n                   int samples, flt (* evaluator)(flt, flt, flt)) { \n  extvol * xvol;\n  texture * tex;\n  \n  tex = (texture *) voidtex;\n\n  xvol = (extvol *) rt_getmem(sizeof(extvol));\n  memset(xvol, 0, sizeof(extvol));\n\n  xvol->methods = &extvol_methods;\n\n  xvol->min=min;\n  xvol->max=max;\n  xvol->evaluator = evaluator;\n  xvol->ambient = tex->ambient;\n  xvol->diffuse = tex->diffuse;\n  xvol->opacity = tex->opacity;  \n  xvol->samples = samples;\n\n  xvol->tex = (texture *)rt_getmem(sizeof(texture));\n  memset(xvol->tex, 0, sizeof(texture));\n\n  xvol->tex->ctr.x = 0.0;\n  xvol->tex->ctr.y = 0.0;\n  xvol->tex->ctr.z = 0.0;\n  xvol->tex->rot = xvol->tex->ctr;\n  xvol->tex->scale = xvol->tex->ctr;\n  xvol->tex->uaxs = xvol->tex->ctr;\n  xvol->tex->vaxs = xvol->tex->ctr;\n  xvol->tex->islight = 0;\n  xvol->tex->shadowcast = 0;\n\n  xvol->tex->col=tex->col;\n  xvol->tex->ambient=1.0;\n  xvol->tex->diffuse=0.0;\n  xvol->tex->specular=0.0;\n  xvol->tex->opacity=1.0;\n  xvol->tex->img=NULL;\n  xvol->tex->texfunc=(color(*)(void *, void *, void *))(ext_volume_texture);\n  xvol->tex->obj = (void *) xvol; /* XXX hack! */\n\n  return xvol;\n}\n\ncolor ExtVoxelColor(flt scalar) {\n  color col;\n\n  if (scalar > 1.0) \n    scalar = 1.0;\n\n  if (scalar < 0.0)\n    scalar = 0.0;\n\n  if (scalar < 0.5) {\n    col.g = 0.0;\n  }\n  else {\n    col.g = (scalar - 0.5) * 2.0;\n  }\n\n  col.r = scalar;\n  col.b = 1.0 - (scalar / 2.0);\n\n  return col;\n} \n\ncolor ext_volume_texture(vector * hit, texture * tex, ray * ry) {\n  color col, col2;\n  box * bx;\n  extvol * xvol;\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  flt t, tdist, dt, ddt, sum, tt; \n  vector pnt, bln;\n  flt scalar, transval; \n  int i;\n  point_light * li;\n  color diffint; \n  vector N, L;\n  flt inten;\n\n  col.r = 0.0;\n  col.g = 0.0;\n  col.b = 0.0;\n\n    bx = (box *) tex->obj;\n  xvol = (extvol *) tex->obj;\n \n  tnear= -FHUGE;\n  tfar= FHUGE;\n \n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n if (ry->d.y == 0.0) {\n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n \n  if (tnear < 0.0) tnear=0.0;\n \n  tdist = xvol->samples;\n\n  tt = (xvol->opacity / tdist); \n\n  bln.x=fabs(bx->min.x - bx->max.x);\n  bln.y=fabs(bx->min.y - bx->max.y);\n  bln.z=fabs(bx->min.z - bx->max.z);\n  \n     dt = 1.0 / tdist; \n    sum = 0.0;\n\n/* Accumulate color as the ray passes through the voxels */\n  for (t=tnear; t<=tfar; t+=dt) {\n    if (sum < 1.0) {\n      pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;\n      pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;\n      pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;\n\n      /* call external evaluator assume 0.0 -> 1.0 range.. */ \n      scalar = xvol->evaluator(pnt.x, pnt.y, pnt.z);  \n\n      transval = tt * scalar; \n      sum += transval; \n\n      col2 = ExtVoxelColor(scalar);\n\n      col.r += transval * col2.r * xvol->ambient;\n      col.g += transval * col2.g * xvol->ambient;\n      col.b += transval * col2.b * xvol->ambient;\n\n      ddt = dt;\n\n      /* Add in diffuse shaded light sources (no shadows) */\n      if (xvol->diffuse > 0.0) {\n  \n        /* Calculate the Volume gradient at the voxel */\n        N.x = (xvol->evaluator(pnt.x - ddt, pnt.y, pnt.z)  -  \n              xvol->evaluator(pnt.x + ddt, pnt.y, pnt.z)) *  8.0 * tt; \n  \n        N.y = (xvol->evaluator(pnt.x, pnt.y - ddt, pnt.z)  -  \n              xvol->evaluator(pnt.x, pnt.y + ddt, pnt.z)) *  8.0 * tt; \n  \n        N.z = (xvol->evaluator(pnt.x, pnt.y, pnt.z - ddt)  -  \n              xvol->evaluator(pnt.x, pnt.y, pnt.z + ddt)) *  8.0 * tt; \n \n        /* only light surfaces with enough of a normal.. */\n        if ((N.x*N.x + N.y*N.y + N.z*N.z) > 0.0) { \n          diffint.r = 0.0; \n          diffint.g = 0.0; \n          diffint.b = 0.0; \n    \n          /* add the contribution of each of the lights.. */\n          for (i=0; i<numlights; i++) {\n            li=lightlist[i];\n            VSUB(li->ctr, (*hit), L)\n            VNorm(&L);\n            VDOT(inten, N, L)\n    \n            /* only add light if its from the front of the surface */\n            /* could add back-lighting if we wanted to later.. */\n            if (inten > 0.0) {\n              diffint.r += inten*li->tex->col.r;\n              diffint.g += inten*li->tex->col.g;\n              diffint.b += inten*li->tex->col.b;\n            }\n          }   \n          col.r += col2.r * diffint.r * xvol->diffuse;\n          col.g += col2.g * diffint.g * xvol->diffuse;\n          col.b += col2.b * diffint.b * xvol->diffuse;\n        }\n      }\n    }   \n    else { \n      sum=1.0;\n    }  \n  }\n\n  /* Add in transmitted ray from outside environment */\n  if (sum < 1.0) {      /* spawn transmission rays / refraction */\n    color transcol;\n\n    transcol = shade_transmission(ry, hit, 1.0 - sum);\n\n    col.r += transcol.r; /* add the transmitted ray  */\n    col.g += transcol.g; /* to the diffuse and       */\n    col.b += transcol.b; /* transmission total..     */\n  }\n\n  return col;\n}\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/extvol.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.h - Volume rendering definitions etc.\n *\n *\n *  $Id: extvol.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector min;\n  vector max;\n  flt ambient;\n  flt diffuse;\n  flt opacity;\n  int samples;\n  flt (* evaluator)(flt, flt, flt);\n} extvol;\n\nextvol * newextvol(void * voidtex, vector min, vector max, \n                   int samples, flt (* evaluator)(flt, flt, flt));\ncolor ext_volume_texture(vector *, texture *, ray *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/global.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * global.cpp - any/all global data items etc should be in this file\n */\n\n#include \"types.h\"\n#include \"machine.h\"\n#include \"sphere.h\"\n#include \"light.h\"\n\n/* stuff moved from intersect.c */\nobject * rootobj = NULL; /* starts out empty. */\n\npoint_light * lightlist[MAXLIGHTS];\nint numlights = 0;\n\nunsigned int numobjects = 0; /* used to assign unique object ID's */\n\n/* used in util.c */\nunsigned int rt_mem_in_use = 0;\n\n/* used in api.c */\nint parinitted = 0;\n\nint graphicswindowopen = 0;\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/global.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * global.h - any/all global data items etc should be in this file\n *\n *  $Id: global.h,v 1.2 2007-02-22 17:54:15 Exp $\n *\n */\n\n/* stuff moved from intersect.c */\nextern object * rootobj;\n\nextern point_light * lightlist[MAXLIGHTS];\nextern int numlights;\n\nextern unsigned int numobjects;\n\nextern unsigned int rt_mem_in_use;\nextern int parinitted;\n\nextern int graphicswindowopen;\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/grid.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * grid.cpp - spatial subdivision efficiency structures\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define GRID_PRIVATE\n#include \"grid.h\"\n\n#ifndef cbrt\n#define     cbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/3.0) : \\\n                          ((x) < 0.0 ? -pow((double)-(x), 1.0/3.0) : 0.0))\n\n#define     qbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/4.0) : \\\n                          ((x) < 0.0 ? -pow((double)-(x), 1.0/4.0) : 0.0))\n\n#endif\n\nstatic object_methods grid_methods = {\n  (void (*)(void *, void *))(grid_intersect),\n  (void (*)(void *, void *, void *, void *))(NULL),\n  grid_bbox, \n  grid_free \n};\n\nextern bool silent_mode;\n\nobject * newgrid(int xsize, int ysize, int zsize, vector min, vector max) {\n  grid * g;\n\n  g = (grid *) rt_getmem(sizeof(grid));\n  memset(g, 0, sizeof(grid));  \n\n  g->methods = &grid_methods;\n  g->id = new_objectid();\n\n  g->xsize = xsize;\n  g->ysize = ysize;\n  g->zsize = zsize;\n\n  g->min = min;\n  g->max = max;\n\n  VSub(&g->max, &g->min, &g->voxsize);\n  g->voxsize.x /= (flt) g->xsize; \n  g->voxsize.y /= (flt) g->ysize; \n  g->voxsize.z /= (flt) g->zsize; \n\n  g->cells = (objectlist **) rt_getmem(xsize*ysize*zsize*sizeof(objectlist *));\n  memset(g->cells, 0, xsize*ysize*zsize * sizeof(objectlist *));\n\n/* fprintf(stderr, \"New grid, size: %8d %8d %8d\\n\", g->xsize, g->ysize, g->zsize); */\n\n  return (object *) g;\n}\n\nstatic int grid_bbox(void * obj, vector * min, vector * max) {\n  grid * g = (grid *) obj;\n \n  *min = g->min;\n  *max = g->max;\n\n  return 1;\n}\n\nstatic void grid_free(void * v) {\n  int i, numvoxels;\n  grid * g = (grid *) v;\n \n  /* loop through all voxels and free the object lists */\n  numvoxels = g->xsize * g->ysize * g->zsize; \n  for (i=0; i<numvoxels; i++) {\n    objectlist * lcur, * lnext;\n\n    lcur = g->cells[i];\n    while (lcur != NULL) {\n      lnext = lcur->next;\n      free(lcur);\n    }\n  }\n\n  /* free the grid cells */ \n  free(g->cells);\n\n  /* free all objects on the grid object list */\n  free_objects(g->objects);   \n\n  free(g);\n}\n\nstatic void globalbound(object ** rootlist, vector * gmin, vector * gmax) {\n  vector min, max;\n  object * cur;\n\n  if (*rootlist == NULL)  /* don't bound non-existant objects */\n    return;\n\n  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;\n  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;\n\n  cur=*rootlist;\n  while (cur != NULL)  {  /* Go! */\n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    if (cur->methods->bbox((void *) cur, &min, &max)) {\n      gmin->x = MYMIN( gmin->x , min.x);\n      gmin->y = MYMIN( gmin->y , min.y);\n      gmin->z = MYMIN( gmin->z , min.z);\n\n      gmax->x = MYMAX( gmax->x , max.x);\n      gmax->y = MYMAX( gmax->y , max.y);\n      gmax->z = MYMAX( gmax->z , max.z);\n    }\n\n    cur=(object *)cur->nextobj;\n  }\n}\n\n\nstatic int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax) {\n  vector min, max, cellmin, cellmax;\n  objectlist * cur;\n  int numinbounds = 0;\n\n  cur = g->cells[index->z*g->xsize*g->ysize + index->y*g->xsize + index->x]; \n\n  if (cur == NULL)  /* don't bound non-existant objects */\n    return 0;\n\n  cellmin.x = voxel2x(g, index->x); \n  cellmin.y = voxel2y(g, index->y); \n  cellmin.z = voxel2z(g, index->z); \n\n  cellmax.x = cellmin.x + g->voxsize.x;\n  cellmax.y = cellmin.y + g->voxsize.y;\n  cellmax.z = cellmin.z + g->voxsize.z;\n\n  cmin->x =  FHUGE;   cmin->y =  FHUGE;   cmin->z =  FHUGE;\n  cmax->x = -FHUGE;   cmax->y = -FHUGE;   cmax->z = -FHUGE;\n\n  while (cur != NULL)  {  /* Go! */\n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    if (cur->obj->methods->bbox((void *) cur->obj, &min, &max)) {\n      if ((min.x >= cellmin.x) && (max.x <= cellmax.x) &&\n          (min.y >= cellmin.y) && (max.y <= cellmax.y) &&\n          (min.z >= cellmin.z) && (max.z <= cellmax.z)) {\n      \n        cmin->x = MYMIN( cmin->x , min.x);\n        cmin->y = MYMIN( cmin->y , min.y);\n        cmin->z = MYMIN( cmin->z , min.z);\n\n        cmax->x = MYMAX( cmax->x , max.x);\n        cmax->y = MYMAX( cmax->y , max.y);\n        cmax->z = MYMAX( cmax->z , max.z);\n      \n        numinbounds++;\n      }\n    }\n\n    cur=cur->next;\n  }\n \n  /* in case we get a 0.0 sized axis on the cell bounds, we'll */\n  /* use the original cell bounds */\n  if ((cmax->x - cmin->x) < EPSILON) {\n    cmax->x += EPSILON;\n    cmin->x -= EPSILON;\n  }\n  if ((cmax->y - cmin->y) < EPSILON) {\n    cmax->y += EPSILON;\n    cmin->y -= EPSILON;\n  }\n  if ((cmax->z - cmin->z) < EPSILON) {\n    cmax->z += EPSILON;\n    cmin->z -= EPSILON;\n  }\n\n  return numinbounds;\n}\n\nstatic int countobj(object * root) {\n  object * cur;     /* counts the number of objects on a list */\n  int numobj;\n\n  numobj=0;\n  cur=root;\n\n  while (cur != NULL) {\n    cur=(object *)cur->nextobj;\n    numobj++;\n  }\n  return numobj;\n}\n\nstatic int countobjlist(objectlist * root) {\n  objectlist * cur;\n  int numobj;\n\n  numobj=0; \n  cur = root;\n\n  while (cur != NULL) {\n    cur = cur->next;\n    numobj++;\n  }\n  return numobj;\n}\n\nint engrid_scene(object ** list) {\n  grid * g;\n  int numobj, numcbrt;\n  vector gmin, gmax;\n  gridindex index;\n \n  if (*list == NULL)\n    return 0;\n\n  numobj = countobj(*list);\n\n  if ( !silent_mode )\n    fprintf(stderr, \"Scene contains %d bounded objects.\\n\", numobj);\n\n  if (numobj > 16) {\n    numcbrt = (int) cbrt(4*numobj);\n    globalbound(list, &gmin, &gmax);\n\n    g = (grid *) newgrid(numcbrt, numcbrt, numcbrt, gmin, gmax);\n    engrid_objlist(g, list);\n\n    numobj = countobj(*list);\n    g->nextobj = *list;\n    *list = (object *) g;\n\n    /* now create subgrids.. */\n    for (index.z=0; index.z<g->zsize; index.z++) {\n      for (index.y=0; index.y<g->ysize; index.y++) {\n        for (index.x=0; index.x<g->xsize; index.x++) {\n          engrid_cell(g, &index);\n        }\n      }\n    } \n  }\n\n  return 1;\n}\n\n\nvoid engrid_objlist(grid * g, object ** list) {\n  object * cur, * next, **prev;\n\n  if (*list == NULL) \n    return;\n  \n  prev = list; \n  cur = *list;\n\n  while (cur != NULL) {\n    next = (object *)cur->nextobj;\n\n    if (engrid_object(g, cur)) \n      *prev = next;\n    else \n      prev = (object **) &cur->nextobj;\n\n    cur = next;\n  } \n}\n\nstatic int engrid_cell(grid * gold, gridindex *index) {\n  vector gmin, gmax, gsize;\n  flt len;\n  int numobj, numcbrt, xs, ys, zs;\n  grid * g;\n  objectlist **list;\n  objectlist * newobj;\n\n  list = &gold->cells[index->z*gold->xsize*gold->ysize + \n                     index->y*gold->xsize  + index->x];\n\n  if (*list == NULL)\n    return 0;\n\n  numobj =  cellbound(gold, index, &gmin, &gmax);\n\n  VSub(&gmax, &gmin, &gsize);\n  len = 1.0 / (MYMAX( MYMAX(gsize.x, gsize.y), gsize.z ));\n  gsize.x *= len;  \n  gsize.y *= len;  \n  gsize.z *= len;  \n\n  if (numobj > 16) {\n    numcbrt = (int) cbrt(2*numobj); \n    \n    xs = (int) ((flt) numcbrt * gsize.x);\n    if (xs < 1) xs = 1;\n    ys = (int) ((flt) numcbrt * gsize.y);\n    if (ys < 1) ys = 1;\n    zs = (int) ((flt) numcbrt * gsize.z);\n    if (zs < 1) zs = 1;\n\n    g = (grid *) newgrid(xs, ys, zs, gmin, gmax);\n    engrid_objectlist(g, list);\n\n    newobj = (objectlist *) rt_getmem(sizeof(objectlist));    \n    newobj->obj = (object *) g;\n    newobj->next = *list;\n    *list = newobj;\n\n    g->nextobj = gold->objects;\n    gold->objects = (object *) g;\n  }\n\n  return 1;\n}\n\nstatic int engrid_objectlist(grid * g, objectlist ** list) {\n  objectlist * cur, * next, **prev;\n  int numsucceeded = 0; \n\n  if (*list == NULL) \n    return 0;\n  \n  prev = list; \n  cur = *list;\n\n  while (cur != NULL) {\n    next = cur->next;\n\n    if (engrid_object(g, cur->obj)) {\n      *prev = next;\n      free(cur);\n      numsucceeded++;\n    }\n    else {\n      prev = &cur->next;\n    }\n\n    cur = next;\n  } \n\n  return numsucceeded;\n}\n\n\n\nstatic int engrid_object(grid * g, object * obj) {\n  vector omin, omax; \n  gridindex low, high;\n  int x, y, z, zindex, yindex, voxindex;\n  objectlist * tmp;\n \n  if (obj->methods->bbox(obj, &omin, &omax)) { \n    if (!pos2grid(g, &omin, &low) || !pos2grid(g, &omax, &high)) {\n      return 0; /* object is not wholly contained in the grid */\n    }\n  }\n  else {\n    return 0; /* object is unbounded */\n  }\n\n  /* add the object to the complete list of objects in the grid */\n  obj->nextobj = g->objects;\n  g->objects = obj;\n\n  /* add this object to all voxels it inhabits */\n  for (z=low.z; z<=high.z; z++) {\n    zindex = z * g->xsize * g->ysize;\n    for (y=low.y; y<=high.y; y++) {\n      yindex = y * g->xsize;\n      for (x=low.x; x<=high.x; x++) {\n        voxindex = x + yindex + zindex; \n        tmp = (objectlist *) rt_getmem(sizeof(objectlist));\n        tmp->next = g->cells[voxindex];\n        tmp->obj = obj;\n        g->cells[voxindex] = tmp;\n      }\n    }\n  }\n \n  return 1;\n}\n\nstatic int pos2grid(grid * g, vector * pos, gridindex * index) {\n  index->x = (int) ((pos->x - g->min.x) / g->voxsize.x);\n  index->y = (int) ((pos->y - g->min.y) / g->voxsize.y);\n  index->z = (int) ((pos->z - g->min.z) / g->voxsize.z);\n  \n  if (index->x == g->xsize)\n    index->x--;\n  if (index->y == g->ysize)\n    index->y--;\n  if (index->z == g->zsize)\n    index->z--;\n\n  if (index->x < 0 || index->x > g->xsize ||\n      index->y < 0 || index->y > g->ysize ||\n      index->z < 0 || index->z > g->zsize) \n    return 0;\n\n  if (pos->x < g->min.x || pos->x > g->max.x ||\n      pos->y < g->min.y || pos->y > g->max.y ||\n      pos->z < g->min.z || pos->z > g->max.z) \n    return 0; \n\n  return 1;\n}\n\n\n/* the real thing */\nstatic void grid_intersect(grid * g, ray * ry) {\n  flt tnear, tfar, offset;\n  vector curpos, tmax, tdelta, pdeltaX, pdeltaY, pdeltaZ, nXp, nYp, nZp;\n  gridindex curvox, step, out; \n  int voxindex;\n  objectlist * cur;\n\n  if (ry->flags & RT_RAY_FINISHED)\n    return;\n\n  if (!grid_bounds_intersect(g, ry, &tnear, &tfar))\n    return;\n \n  if (ry->maxdist < tnear)\n    return;\n \n  curpos = Raypnt(ry, tnear); \n  pos2grid(g, &curpos, &curvox);\n  offset = tnear;\n\n  /* Setup X iterator stuff */\n  if (fabs(ry->d.x) < EPSILON) {\n    tmax.x = FHUGE;\n    tdelta.x = 0.0;\n    step.x = 0;\n    out.x = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.x < 0.0) {\n    tmax.x = offset + ((voxel2x(g, curvox.x) - curpos.x) / ry->d.x); \n    tdelta.x = g->voxsize.x / - ry->d.x;\n    step.x = out.x = -1;\n  }\n  else {\n    tmax.x = offset + ((voxel2x(g, curvox.x + 1) - curpos.x) / ry->d.x);\n    tdelta.x = g->voxsize.x / ry->d.x;\n    step.x = 1;\n    out.x = g->xsize;\n  }\n\n  /* Setup Y iterator stuff */\n  if (fabs(ry->d.y) < EPSILON) {\n    tmax.y = FHUGE;\n    tdelta.y = 0.0; \n    step.y = 0;\n    out.y = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.y < 0.0) {\n    tmax.y = offset + ((voxel2y(g, curvox.y) - curpos.y) / ry->d.y);\n    tdelta.y = g->voxsize.y / - ry->d.y;\n    step.y = out.y = -1;\n  }\n  else {\n    tmax.y = offset + ((voxel2y(g, curvox.y + 1) - curpos.y) / ry->d.y);\n    tdelta.y = g->voxsize.y / ry->d.y;\n    step.y = 1;\n    out.y = g->ysize;\n  }\n\n  /* Setup Z iterator stuff */\n  if (fabs(ry->d.z) < EPSILON) {\n    tmax.z = FHUGE;\n    tdelta.z = 0.0; \n    step.z = 0;\n    out.z = 0; /* never goes out of bounds on this axis */\n  }\n  else if (ry->d.z < 0.0) {\n    tmax.z = offset + ((voxel2z(g, curvox.z) - curpos.z) / ry->d.z);\n    tdelta.z = g->voxsize.z / - ry->d.z;\n    step.z = out.z = -1;\n  }\n  else {\n    tmax.z = offset + ((voxel2z(g, curvox.z + 1) - curpos.z) / ry->d.z);\n    tdelta.z = g->voxsize.z / ry->d.z;\n    step.z = 1;\n    out.z = g->zsize;\n  }\n\n  pdeltaX = ry->d;\n  VScale(&pdeltaX, tdelta.x);\n  pdeltaY = ry->d;\n  VScale(&pdeltaY, tdelta.y);\n  pdeltaZ = ry->d;\n  VScale(&pdeltaZ, tdelta.z);\n\n  nXp = Raypnt(ry, tmax.x);\n  nYp = Raypnt(ry, tmax.y);\n  nZp = Raypnt(ry, tmax.z);\n\n  voxindex = curvox.z*g->xsize*g->ysize + curvox.y*g->xsize + curvox.x; \n  while (1) {\n    if (tmax.x < tmax.y && tmax.x < tmax.z) {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.x += step.x;\n      if (ry->maxdist < tmax.x || curvox.x == out.x) \n        break; \n      voxindex += step.x;\n      tmax.x += tdelta.x;\n      curpos = nXp;\n      nXp.x += pdeltaX.x;\n      nXp.y += pdeltaX.y;\n      nXp.z += pdeltaX.z;\n    }\n    else if (tmax.z < tmax.y) {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.z += step.z;\n      if (ry->maxdist < tmax.z || curvox.z == out.z) \n        break;\n      voxindex += step.z*g->xsize*g->ysize;\n      tmax.z += tdelta.z;\n      curpos = nZp;\n      nZp.x += pdeltaZ.x;\n      nZp.y += pdeltaZ.y;\n      nZp.z += pdeltaZ.z;\n    }\n    else {\n      cur = g->cells[voxindex];\n      while (cur != NULL) {\n        if (ry->mbox[cur->obj->id] != ry->serial) {\n          ry->mbox[cur->obj->id] = ry->serial; \n          cur->obj->methods->intersect(cur->obj, ry);\n        }\n        cur = cur->next;\n      }\n      curvox.y += step.y;\n      if (ry->maxdist < tmax.y || curvox.y == out.y) \n        break;\n      voxindex += step.y*g->xsize;\n      tmax.y += tdelta.y;\n      curpos = nYp;\n      nYp.x += pdeltaY.x;\n      nYp.y += pdeltaY.y;\n      nYp.z += pdeltaY.z;\n    }\n\n    if (ry->flags & RT_RAY_FINISHED)\n      break;\n  }\n}\n\nstatic void voxel_intersect(grid * g, ray * ry, int voxindex) {\n  objectlist * cur;\n\n  cur = g->cells[voxindex];\n  while (cur != NULL) {\n    cur->obj->methods->intersect(cur->obj, ry);\n    cur = cur->next;\n  }\n}\n\nstatic int grid_bounds_intersect(grid * g, ray * ry, flt *nr, flt *fr) {\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < g->min.x) || (ry->o.x > g->max.x)) return 0;\n  }\n  else {\n    tx1 = (g->min.x - ry->o.x) / ry->d.x;\n    tx2 = (g->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  if (ry->d.y == 0.0) {\n    if ((ry->o.y < g->min.y) || (ry->o.y > g->max.y)) return 0;\n  }\n  else {\n    ty1 = (g->min.y - ry->o.y) / ry->d.y;\n    ty2 = (g->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < g->min.z) || (ry->o.z > g->max.z)) return 0;\n  }\n  else {\n    tz1 = (g->min.z - ry->o.z) / ry->d.z;\n    tz2 = (g->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return 0;\n  if (tfar < 0.0) return 0;\n\n  *nr = tnear;\n  *fr = tfar; \n  return 1;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/grid.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * grid.h - spatial subdivision efficiency structures\n *\n * $Id: grid.h,v 1.2 2007-02-22 17:54:15 Exp $\n * \n */\n\nint engrid_scene(object ** list);\nobject * newgrid(int xsize, int ysize, int zsize, vector min, vector max);\n\n#ifdef GRID_PRIVATE\n\ntypedef struct objectlist {\n  struct objectlist * next; /* next link in the list */\n  object * obj;             /* the actual object     */\n} objectlist; \n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  int xsize;           /* number of cells along the X direction */\n  int ysize;           /* number of cells along the Y direction */\n  int zsize;           /* number of cells along the Z direction */\n  vector min;          /* the minimum coords for the box containing the grid */\n  vector max;          /* the maximum coords for the box containing the grid */\n  vector voxsize;      /* the size of a grid cell/voxel */\n  object * objects;    /* all objects contained in the grid */\n  objectlist ** cells; /* the grid cells themselves */\n} grid;\n\ntypedef struct {\n  int x;         /* Voxel X address */\n  int y;         /* Voxel Y address */\n  int z;         /* Voxel Z address */\n} gridindex; \n\n/*\n * Convert from voxel number along X/Y/Z to corresponding coordinate.\n */\n#define voxel2x(g,X)  ((X) * (g->voxsize.x) + (g->min.x))\n#define voxel2y(g,Y)  ((Y) * (g->voxsize.y) + (g->min.y))\n#define voxel2z(g,Z)  ((Z) * (g->voxsize.z) + (g->min.z))\n\n/*\n * And vice-versa.\n */\n#define x2voxel(g,x)            (((x) - g->min.x) / g->voxsize.x)\n#define y2voxel(g,y)            (((y) - g->min.y) / g->voxsize.y)\n#define z2voxel(g,z)            (((z) - g->min.z) / g->voxsize.z)\n\n\nstatic int grid_bbox(void * obj, vector * min, vector * max);\nstatic void grid_free(void * v);\n\nstatic int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax);\n\nvoid engrid_objlist(grid * g, object ** list);\nstatic int engrid_object(grid * g, object * obj);\n\nstatic int engrid_objectlist(grid * g, objectlist ** list);\nstatic int engrid_cell(grid *, gridindex *);\n\nstatic int pos2grid(grid * g, vector * pos, gridindex * index);\nstatic void grid_intersect(grid *, ray *);\nstatic void voxel_intersect(grid * g, ray * ry, int voxaddr);\nstatic int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far); \n\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/imageio.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  imageio.cpp - This file deals with reading/writing image files\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n * truecolor sort of file..\n */\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\"\n#include \"ppm.h\"     /* PPM files */\n#include \"tgafile.h\" /* Truevision Targa files */\n#include \"jpeg.h\"    /* JPEG files */\n\nstatic \nint fakeimage(char * name, int * xres, int * yres, unsigned char ** imgdata) {\n  int i, imgsize;\n\n  fprintf(stderr, \"Error loading image %s.  Faking it.\\n\", name);\n   \n  *xres = 2;\n  *yres = 2;\n  imgsize = 3 * (*xres) * (*yres);\n  *imgdata = (unsigned char *)rt_getmem(imgsize);\n  for (i=0; i<imgsize; i++) {\n    (*imgdata)[i] = 255;\n  }\n\n  return IMAGENOERR;\n}\n\n\nint readimage(rawimage * img) {\n  int rc;\n  int xres, yres;\n  unsigned char * imgdata = NULL;\n  char * name = img->name;\n\n  if (strstr(name, \".ppm\")) { \n    rc = readppm(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".tga\")) {\n    rc = readtga(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".jpg\")) {\n    rc = readjpeg(name, &xres, &yres, &imgdata);\n  }\n  else if (strstr(name, \".gif\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".png\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".tiff\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".rgb\")) {\n    rc = IMAGEUNSUP; \n  }\n  else if (strstr(name, \".xpm\")) {\n    rc = IMAGEUNSUP; \n  }\n  else {\n    rc = readppm(name, &xres, &yres, &imgdata);\n  } \n\n  switch (rc) {\n    case IMAGEREADERR:\n      fprintf(stderr, \"Short read encountered while loading image %s\\n\", name);\n      rc = IMAGENOERR; /* remap to non-fatal error */\n      break;\n\n    case IMAGEUNSUP:\n      fprintf(stderr, \"Cannot read unsupported image format for image %s\\n\", name);\n      break;\n  }    \n\n  /* If the image load failed, create a tiny white colored image to fake it */ \n  /* this allows a scene to render even when a file can't be loaded */\n  if (rc != IMAGENOERR) {\n    rc = fakeimage(name, &xres, &yres, &imgdata);\n  }\n\n  /* If we succeeded in loading the image, return it. */\n  if (rc == IMAGENOERR) { \n    img->xres = xres;\n    img->yres = yres;\n    img->bpp = 3;  \n    img->data = imgdata;\n  }\n\n  return rc;\n}\n \n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/imageio.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  imageio.h - This file deals with reading/writing image files \n *\n *  $Id: imageio.h,v 1.2 2007-02-22 17:54:15 Exp $\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file.. */\n\n#define IMAGENOERR     0  /* no error */\n#define IMAGEBADFILE   1  /* can't find or can't open the file */\n#define IMAGEUNSUP     2  /* the image file is an unsupported format */\n#define IMAGEALLOCERR  3  /* not enough remaining memory to load this image */\n#define IMAGEREADERR   4  /* failed read, short reads etc */\n\nint readimage(rawimage *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/imap.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * imap.cpp - This file contains code for doing image map type things.  \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"imap.h\"\n#include \"util.h\"\n#include \"imageio.h\"\n\nrawimage * imagelist[MAXIMGS];\nint numimages;\n\nvoid ResetImages(void) {\n  int i;\n  numimages=0;\n  for (i=0; i<MAXIMGS; i++) {\n    imagelist[i]=NULL;\n  }\n}\n\nvoid LoadImage(rawimage * image) {\n  if (!image->loaded) {\n    readimage(image);\n    image->loaded=1;\n  }\n}\n\ncolor ImageMap(rawimage * image, flt u, flt v) {\n  color col, colx, colx2;\n  flt x,y, px, py;\n  int x1, x2, y1, y2;\n  unsigned char * ptr;\n  unsigned char * ptr2;\n\n  if (!image->loaded) {   \n    LoadImage(image);\n    image->loaded=1;\n  }\n\n  if ((u <= 1.0) && (u >=0.0) && (v <= 1.0) && (v >= 0.0)) {\n    x=(image->xres - 1.0) * u; /* floating point X location */\n    y=(image->yres - 1.0) * v; /* floating point Y location */\n\n    px = x - ((int) x);\n    py = y - ((int) y);\n\n    x1 = (int) x;\n    x2 = x1 + 1;\n\n    y1 = (int) y;\n    y2 = y1 + 1;\n\n    ptr  = image->data + ((image->xres * y1) + x1) * 3; \n    ptr2 = image->data + ((image->xres * y1) + x2) * 3; \n\n    colx.r = (flt) ((flt)ptr[0] + px*((flt)ptr2[0] - (flt) ptr[0])) / 255.0; \n    colx.g = (flt) ((flt)ptr[1] + px*((flt)ptr2[1] - (flt) ptr[1])) / 255.0; \n    colx.b = (flt) ((flt)ptr[2] + px*((flt)ptr2[2] - (flt) ptr[2])) / 255.0; \n\n    ptr  = image->data + ((image->xres * y2) + x1) * 3; \n    ptr2 = image->data + ((image->xres * y2) + x2) * 3; \n\n    colx2.r = ((flt)ptr[0] + px*((flt)ptr2[0] - (flt)ptr[0])) / 255.0; \n    colx2.g = ((flt)ptr[1] + px*((flt)ptr2[1] - (flt)ptr[1])) / 255.0; \n    colx2.b = ((flt)ptr[2] + px*((flt)ptr2[2] - (flt)ptr[2])) / 255.0; \n\n    col.r = colx.r + py*(colx2.r - colx.r);\n    col.g = colx.g + py*(colx2.g - colx.g);\n    col.b = colx.b + py*(colx2.b - colx.b);\n\n  }\n  else {\n    col.r=0.0;\n    col.g=0.0;\n    col.b=0.0;\n  }\n  return col;\n} \n\nrawimage * AllocateImage(char * filename) { \n  rawimage * newimage = NULL;\n  int i, intable;\n  size_t len;\n\n  intable=0;\n  if (numimages!=0) {\n    for (i=0; i<numimages; i++) {\n      if (!strcmp(filename, imagelist[i]->name)) {\n        newimage=imagelist[i];\n        intable=1;\n      }\n    }\n  }\n\n  if (!intable) {\n    newimage=(rawimage *)rt_getmem(sizeof(rawimage));\n    newimage->loaded=0;\n    newimage->xres=0;\n    newimage->yres=0;\n    newimage->bpp=0;\n    newimage->data=NULL;\n    len=strlen(filename);\n    if (len > 80) rtbomb(\"Filename too long in image map!!\"); \n    strcpy(newimage->name, filename);\n\n    imagelist[numimages]=newimage;  /* add new one to the table       */ \n    numimages++;                    /* increment the number of images */\n  }\n \n  return newimage;\n}\n\nvoid DeallocateImage(rawimage * image) {\n  image->loaded=0;\n  rt_freemem(image->data);\n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/imap.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * imap.h - This file contains defines etc for doing image map type things.  \n *\n *  $Id: imap.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nvoid       ResetImage(void);\nvoid       LoadImage(rawimage *);\ncolor      ImageMap(rawimage *, flt, flt);\nrawimage * AllocateImage(char *);\nvoid       DeallocateImage(rawimage *);\nvoid       ResetImages(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/intersect.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * intersect.cpp - This file contains code for CSG and intersection routines.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"intersect.h\"\n#include \"light.h\"\n#include \"util.h\"\n#include \"global.h\"\n\nunsigned int new_objectid(void) {\n  return numobjects++; /* global used to generate unique object ID's */\n}\n\nunsigned int max_objectid(void) {\n  return numobjects;\n}\n\nvoid add_object(object * obj) {\n  object * objtemp;\n\n  if (obj == NULL)\n    return;\n\n  obj->id = new_objectid();\n\n  objtemp = rootobj;\n  rootobj = obj;\n  obj->nextobj = objtemp;\n}\n\nvoid free_objects(object * start) {\n  object * cur;\n  object * cur2;\n\n  cur=start; \n  while (cur->nextobj != NULL) { \n    cur2=(object *)cur->nextobj;\n    cur->methods->free(cur);\n    cur=cur2;\n  }\n  free(cur);\n\n}\n\nvoid reset_object(void) {\n  if (rootobj != NULL)\n    free_objects(rootobj);\n\n  rootobj = NULL;\n  numobjects = 0; /* set number of objects back to 0 */\n}\n\nvoid intersect_objects(ray * intray) {\n  object * cur;\n  object temp;\n\n  temp.nextobj = rootobj; /* setup the initial object pointers.. */\n  cur = &temp;            /* ready, set                          */\n\n  while ((cur=(object *)cur->nextobj) != NULL)          \n    cur->methods->intersect(cur, intray); \n}\n\nvoid reset_intersection(intersectstruct * intstruct) {\n  intstruct->num = 0;\n  intstruct->list[0].t = FHUGE;\n  intstruct->list[0].obj = NULL;\n  intstruct->list[1].t = FHUGE;\n  intstruct->list[1].obj = NULL;\n}\n\nvoid add_intersection(flt t, object * obj, ray * ry) {\n  intersectstruct * intstruct = ry->intstruct;\n\n  if (t > EPSILON) {\n\n    /* if we hit something before maxdist update maxdist */\n    if (t < ry->maxdist) {\n      ry->maxdist = t;\n\n      /* if we hit *anything* before maxdist, and we're firing a */\n      /* shadow ray, then we are finished ray tracing the shadow */\n      if (ry->flags & RT_RAY_SHADOW)\n        ry->flags |= RT_RAY_FINISHED;\n    }\n\n    intstruct->num++;\n    intstruct->list[intstruct->num].obj = obj;\n    intstruct->list[intstruct->num].t = t;\n  }\n}\n\n\nint closest_intersection(flt * t, object ** obj, intersectstruct * intstruct) {\n  int i;\n  *t=FHUGE;\n\n  for (i=1; i<=intstruct->num; i++) {\n    if (intstruct->list[i].t < *t) {\n        *t=intstruct->list[i].t;\n      *obj=intstruct->list[i].obj;\n    }\n  } \n\n  return intstruct->num;\n}\n\nint shadow_intersection(intersectstruct * intstruct, flt maxdist) {\n  int i;\n  \n  if (intstruct->num > 0) {\n    for (i=1; i<=intstruct->num; i++) {\n      if ((intstruct->list[i].t < maxdist) && \n          (intstruct->list[i].obj->tex->shadowcast == 1)) {\n        return 1;\n      }\n    }\n  }\n  \n  return 0;\n}\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/intersect.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * intersect.h - This file contains the declarations and defines for the\n *               functions that manage intersection, bounding and CSG..\n *\n *  $Id: intersect.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nunsigned int  new_objectid(void);\nunsigned int max_objectid(void);  \nvoid add_object(object *);\nvoid reset_object(void);\nvoid free_objects(object *);\nvoid intersect_objects(ray *);\nvoid reset_intersection(intersectstruct *);\nvoid add_intersection(flt, object *, ray *);\nint closest_intersection(flt *, object **, intersectstruct *);\nint next_intersection(object **, object *, intersectstruct *);\nint shadow_intersection(intersectstruct * intstruct, flt maxdist);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/jpeg.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  jpeg.cpp - This file deals with JPEG format image files (reading/writing)\n */ \n\n/*\n * This code requires support from the Independent JPEG Group's libjpeg.\n * For our puposes, we're interested only in the 3 byte per pixel 24 bit\n * RGB output.  Probably won't implement any decent checking at this point.\n */ \n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\" /* error codes etc */\n#include \"jpeg.h\"    /* the protos for this file */\n\n#if !defined(USEJPEG)\n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  return IMAGEUNSUP;\n}\n\n#else\n\n#include \"jpeglib.h\" /* the IJG jpeg library headers */\n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  FILE * ifp;\n  struct jpeg_decompress_struct cinfo; /* JPEG decompression struct */\n  struct jpeg_error_mgr jerr;          /* JPEG Error handler */\n  JSAMPROW row_pointer[1];             /* output row buffer */\n  int row_stride;                      /* physical row width in output buf */\n\n  /* open input file before doing any JPEG decompression setup */\n  if ((ifp = fopen(name, \"rb\")) == NULL) \n    return IMAGEBADFILE; /* Could not open image, return error */\n\n  /*\n   * Note: The Independent JPEG Group's library does not have a way\n   *       of returning errors without the use of setjmp/longjmp.\n   *       This is a problem in multi-threaded environment, since setjmp\n   *       and longjmp are declared thread-unsafe by many vendors currently.\n   *       For now, JPEG decompression errors will result in the \"default\"\n   *       error handling provided by the JPEG library, which is an error\n   *       message and a fatal call to exit().  I'll have to work around this\n   *       or find a reasonably thread-safe way of doing setjmp/longjmp..\n   */\n\n  cinfo.err = jpeg_std_error(&jerr); /* Set JPEG error handler to default */\n\n  jpeg_create_decompress(&cinfo);    /* Create decompression context      */ \n  jpeg_stdio_src(&cinfo, ifp);       /* Set input mechanism to stdio type */\n  jpeg_read_header(&cinfo, TRUE);    /* Read the JPEG header for info     */\n  jpeg_start_decompress(&cinfo);     /* Prepare for actual decompression  */\n\n  *xres = cinfo.output_width;        /* set returned image width  */\n  *yres = cinfo.output_height;       /* set returned image height */\n\n  /* Calculate the size of a row in the image */\n  row_stride = cinfo.output_width * cinfo.output_components;\n\n  /* Allocate the image buffer which will be returned to the ray tracer */\n  *imgdata = (unsigned char *) malloc(row_stride * cinfo.output_height);\n\n  /* decompress the JPEG, one scanline at a time into the buffer */\n  while (cinfo.output_scanline < cinfo.output_height) {\n    row_pointer[0] = &((*imgdata)[(cinfo.output_scanline)*row_stride]);\n    jpeg_read_scanlines(&cinfo, row_pointer, 1);\n  }\n\n  jpeg_finish_decompress(&cinfo);   /* Tell the JPEG library to cleanup   */\n  jpeg_destroy_decompress(&cinfo);  /* Destroy JPEG decompression context */\n\n  fclose(ifp); /* Close the input file */\n\n  return IMAGENOERR;  /* No fatal errors */\n}\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/jpeg.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  jpeg.h - This file deals with JPEG format image files (reading/writing)\n *\n *  $Id: jpeg.h,v 1.2 2007-02-22 17:54:15 Exp $\n */ \n\nint readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/light.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * light.cpp - This file contains declarations and defines for light sources.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define LIGHT_PRIVATE\n#include \"light.h\"\n\nstatic object_methods light_methods = {\n  (void (*)(void *, void *))(light_intersect),\n  (void (*)(void *, void *, void *, void *))(light_normal),\n  light_bbox, \n  free \n};\n\npoint_light * newlight(void * tex, vector ctr, flt rad) {\n  point_light * l;\n  \n  l=(point_light *) rt_getmem(sizeof(point_light));\n  memset(l, 0, sizeof(point_light));\n  l->methods = &light_methods;\n\n  l->tex=(texture *)tex;\n  l->ctr=ctr;\n  l->rad=rad;\n\n  return l;\n}\n\nstatic int light_bbox(void * obj, vector * min, vector * max) {\n  return 0; /* lights are unbounded currently */\n}\n\nstatic void light_intersect(point_light * l, ray * ry) {\n  flt b, disc, t1, t2, temp;\n  vector V;\n\n  /* Lights do not cast shadows.. */\n  if (ry->flags & RT_RAY_SHADOW)\n    return;\n\n  VSUB(l->ctr, ry->o, V);\n  VDOT(b, V, ry->d); \n  VDOT(temp, V, V);  \n\n  disc=b*b + l->rad*l->rad - temp;\n\n  if (disc<=0.0) return;\n  disc=sqrt(disc);\n\n  t2=b+disc;\n  if (t2 <= SPEPSILON) \n    return;\n  add_intersection(t2, (object *) l, ry);  \n\n  t1=b-disc;\n  if (t1 > SPEPSILON) \n    add_intersection(t1, (object *) l, ry);  \n}\n\nstatic void light_normal(point_light * l, vector * pnt, ray * incident, vector * N) {\n  VSub((vector *) pnt, &(l->ctr), N);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/light.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * light.h - this file includes declarations and defines for light sources.\n *\n *  $Id: light.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  flt rad;\n} point_light; \n\npoint_light * newlight(void *, vector, flt);\n\n#ifdef LIGHT_PRIVATE\nstatic int light_bbox(void * obj, vector * min, vector * max);\nstatic void light_intersect(point_light *, ray *);\nstatic void light_normal(point_light *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/machine.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * machine.h - This is the machine specific include file\n *\n *  $Id: machine.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#include <stdio.h>\n#include <cstdlib>\n#include <string.h>\n#include <math.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n\nusing namespace std;\n\n#define STDTIME\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/macros.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * macros.h - This file contains macro versions of functions that would be best \n * used as inlined code rather than function calls.\n *\n *  $Id: macros.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\n#define MYMAX(a , b) ((a) > (b) ? (a) : (b))\n#define MYMIN(a , b) ((a) < (b) ? (a) : (b))\n\n#define VDOT(return, a, b) \t\t\t\t\\\n return=(a.x * b.x  +  a.y * b.y  +  a.z * b.z); \t\\\n\n#define RAYPNT(c, a, b)\t\t\\\nc.x = a.o.x + ( a.d.x * b );\t\\\nc.y = a.o.y + ( a.d.y * b );\t\\\nc.z = a.o.z + ( a.d.z * b );\t\\\n\n\n#define VSUB(a, b, c)\t\t\\\nc.x = (a.x - b.x);\t\t\\\nc.y = (a.y - b.y);\t\t\\\nc.z = (a.z - b.z);\t\t\\\n\n\n#define VCROSS(a, b, c) \t\t\t\t\\\n c->x = (a->y * b->z) - (a->z * b->y);\t\t\t\\\n c->y = (a->z * b->x) - (a->x * b->z);\t\t\t\\\n c->z = (a->x * b->y) - (a->y * b->x);\t\t\t\\\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define VIDEO_WINMAIN_ARGS\n#include \"types.h\"\n#include \"api.h\"       /* The ray tracing library API */\n#include \"parse.h\"     /* Support for my own file format */\n#include \"ui.h\"\n#include \"util.h\"\n#include \"tachyon_video.h\"\n#include \"../../../common/utility/utility.h\"\n\n#if WIN8UI_EXAMPLE\n#include \"tbb/tbb.h\"\nvolatile long global_startTime = 0;\nvolatile long global_elapsedTime = 0;\nvolatile bool global_isCancelled = false;\nvolatile int global_number_of_threads;\n#endif\n\nSceneHandle global_scene;\nint global_xsize;     /*  size of graphic image rendered in window (from hres, vres)  */\nint global_ysize;\nint global_xwinsize;  /*  size of window (may be larger than above)  */\nint global_ywinsize;\nchar *global_window_title;\nbool global_usegraphics;\n\nbool silent_mode = false; /* silent mode */\n\nclass tachyon_video *video = 0;\n\ntypedef struct {\n  int foundfilename;      /* was a model file name found in the args? */\n  char filename[1024];    /* model file to render */\n  int useoutfilename;     /* command line override of output filename */\n  char outfilename[1024]; /* name of output image file */\n  int verbosemode;        /* verbose flags */\n  int antialiasing;       /* antialiasing setting */\n  int displaymode;        /* display mode */\n  int boundmode;          /* bounding mode */\n  int boundthresh;        /* bounding threshold */\n  int usecamfile;         /* use camera file */\n  char camfilename[1024]; /* camera filename */\n} argoptions;\n\nvoid initoptions(argoptions * opt) {\n    memset(opt, 0, sizeof(argoptions));\n    opt->foundfilename = -1;\n    opt->useoutfilename = -1;\n    opt->verbosemode = -1;\n    opt->antialiasing = -1;\n    opt->displaymode = -1;\n    opt->boundmode = -1; \n    opt->boundthresh = -1; \n    opt->usecamfile = -1;\n}\n\n#if WIN8UI_EXAMPLE\nint CreateScene() {\n\n   char* filename = \"Assets/balls.dat\";\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n\n    // scene->hres and scene->vres should be equal to screen resolution\n    scene->hres = global_xwinsize = global_xsize;\n    scene->vres = global_ywinsize = global_ysize;  \n\n    return 0;\n}\n\nunsigned int __stdcall example_main(void *)\n{\n    try {\n\n        if ( CreateScene() != 0 )\n            exit(-1);\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        // always using window even if(!global_usegraphics)\n        global_usegraphics = \n            tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running)\n            exit(-1);\n\n        video = &tachyon;\n\n        for(;;) {\n            global_elapsedTime = 0;\n            global_startTime=(long) time(NULL);\n            global_isCancelled=false;\n            if (video)video->running = true;\n            tbb::task_scheduler_init init (global_number_of_threads);\n            memset(g_pImg, 0, sizeof(unsigned int) * global_xsize * global_ysize);\n            tachyon.main_loop();\n            global_elapsedTime = (long)(time(NULL)-global_startTime);\n            video->running=false;\n            //The timer to restart drawing then it is complete.\n            int timer=50;\n            while( (  !global_isCancelled && (timer--)>0 ) ){\n                rt_sleep( 100 );\n            }\n        }\n        return NULL;\n\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n\n#elif __TBB_IOS\n\n#include \"tbb/tbb.h\"\n#include \"CoreFoundation/CoreFoundation.h\"\nextern \"C\" void get_screen_resolution(int *x, int *y);\n\nint CreateScene() {\n\n    CFURLRef balls_dat_url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR(\"balls\"), CFSTR(\"dat\"),NULL);\n    char filename[1024];\n    CFURLGetFileSystemRepresentation(balls_dat_url, true, (UInt8*)filename, (CFIndex)sizeof(filename));\n    CFRelease(balls_dat_url);\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n\n    get_screen_resolution(&global_xsize, &global_ysize);\n\n    // scene->hres and scene->vres should be equal to screen resolution\n    scene->hres = global_xwinsize = global_xsize;\n    scene->vres = global_ywinsize = global_ysize;\n    return 0;\n}\n\nint main (int argc, char *argv[]) {\n    try {\n\n        if ( CreateScene() != 0 ) return -1;\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        global_usegraphics = tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running) return -1;\n\n        //TODO: add a demo loop.\n        video = &tachyon;\n        if (video)video->running = true;\n        memset(g_pImg, 0, sizeof(unsigned int) * global_xsize * global_ysize);\n        tachyon.main_loop();\n        video->running=false;\n        return NULL;\n\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n\n#else\n\nstatic char *window_title_string (int argc, const char **argv)\n{\n    int i;\n    char *name;\n\n    name = (char *) malloc (8192);\n    char *title = getenv (\"TITLE\");\n    if( title ) strcpy( name, title );\n    else {\n        if(strrchr(argv[0], '\\\\')) strcpy (name, strrchr(argv[0], '\\\\')+1);\n        else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);\n        else strcpy (name, *argv[0]?argv[0]:\"Tachyon\");\n    }\n    for (i = 1; i < argc; i++) {\n        strcat (name, \" \");\n        strcat (name, argv[i]);\n    }\n#ifdef _DEBUG\n    strcat (name, \" (DEBUG BUILD)\");\n#endif\n    return name;\n}\n\nint useoptions(argoptions * opt, SceneHandle scene) {\n  if (opt->useoutfilename == 1) {\n    rt_outputfile(scene, opt->outfilename);\n  }\n\n  if (opt->verbosemode == 1) {\n    rt_verbose(scene, 1);\n  }\n\n  if (opt->antialiasing != -1) {\n    /* need new api code for this */\n  } \n\n  if (opt->displaymode != -1) {\n    rt_displaymode(scene, opt->displaymode);\n  }\n\n  if (opt->boundmode != -1) {\n    rt_boundmode(scene, opt->boundmode);\n  }\n\n  if (opt->boundthresh != -1) {\n    rt_boundthresh(scene, opt->boundthresh);\n  }\n\n  return 0;\n}    \n\nargoptions ParseCommandLine(int argc, const char *argv[]) {\n    argoptions opt;\n\n    initoptions(&opt);\n\n    bool nobounding = false;\n    bool nodisp = false;\n\n    string filename;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n        .positional_arg(filename,\"dataset\", \"Model file\")\n        .positional_arg(opt.boundthresh,\"boundthresh\",\"bounding threshold value\")\n        .arg(nodisp,\"no-display-updating\",\"disable run-time display updating\")\n        .arg(nobounding,\"no-bounding\",\"disable bounding technique\")\n        .arg(silent_mode,\"silent\",\"no output except elapsed time\")\n    );\n\n    strcpy(opt.filename, filename.c_str());\n\n    opt.displaymode = nodisp ? RT_DISPLAY_DISABLED : RT_DISPLAY_ENABLED;\n    opt.boundmode = nobounding ? RT_BOUNDING_DISABLED : RT_BOUNDING_ENABLED;\n\n    return opt;\n}\n\nint CreateScene(argoptions &opt) {\n    char *filename;\n\n    global_scene = rt_newscene();\n    rt_initialize();\n\n    /* process command line overrides */\n    useoptions(&opt, global_scene);\n\n#ifdef DEFAULT_MODELFILE\n#if  _WIN32||_WIN64\n#define _GLUE_FILENAME(x) \"..\\\\dat\\\\\" #x\n#else\n#define _GLUE_FILENAME(x) #x\n#endif\n#define GLUE_FILENAME(x) _GLUE_FILENAME(x)\n    if(opt.foundfilename == -1)\n        filename = GLUE_FILENAME(DEFAULT_MODELFILE);\n    else\n#endif//DEFAULT_MODELFILE\n        filename = opt.filename;\n\n    if ( readmodel(filename, global_scene) != 0 ) {\n        fprintf(stderr, \"Parser returned a non-zero error code reading %s\\n\", filename);\n        fprintf(stderr, \"Aborting Render...\\n\");\n        rt_finalize();\n        return -1;\n    }\n\n    // need these early for create_graphics_window() so grab these here...\n    scenedef *scene = (scenedef *) global_scene;\n    global_xsize = scene->hres;\n    global_ysize = scene->vres;\n    global_xwinsize = global_xsize;\n    global_ywinsize = global_ysize;  // add some here to leave extra blank space on bottom for status etc.\n\n    return 0;\n}\n\nint main (int argc, char *argv[]) {\n    try {\n        timer mainStartTime = gettimer();\n\n        global_window_title = window_title_string (argc, (const char**)argv);\n\n        argoptions opt = ParseCommandLine(argc, (const char**)argv);\n\n        if ( CreateScene(opt) != 0 )\n            return -1;\n\n        tachyon_video tachyon;\n        tachyon.threaded = true;\n        tachyon.init_console();\n\n        tachyon.title = global_window_title;\n        // always using window even if(!global_usegraphics)\n        global_usegraphics = \n            tachyon.init_window(global_xwinsize, global_ywinsize);\n        if(!tachyon.running)\n            return -1;\n\n        video = &tachyon;\n        tachyon.main_loop();\n\n        utility::report_elapsed_time(timertime(mainStartTime, gettimer()));\n        return 0;\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n#endif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/objbound.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * objbound.cpp - This file contains the functions to find bounding boxes\n *              for the various primitives \n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"bndbox.h\"\n\n#define OBJBOUND_PRIVATE\n#include \"objbound.h\"\n\nstatic void globalbound(object ** rootlist, vector * gmin, vector * gmax) {\n  vector min, max; \n  object * cur;\n\n  if (*rootlist == NULL)  /* don't bound non-existant objects */\n    return;\n\n  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;\n  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;\n\n  cur=*rootlist;\n  while (cur != NULL)  {  /* Go! */ \n    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;\n    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;\n\n    cur->methods->bbox((void *) cur, &min, &max);\n\n    gmin->x = MYMIN( gmin->x , min.x); \n    gmin->y = MYMIN( gmin->y , min.y); \n    gmin->z = MYMIN( gmin->z , min.z); \n  \n    gmax->x = MYMAX( gmax->x , max.x); \n    gmax->y = MYMAX( gmax->y , max.y); \n    gmax->z = MYMAX( gmax->z , max.z); \n\n    cur=(object *)cur->nextobj;\n  }\n}\n\nstatic int objinside(object * obj, vector * min, vector * max) {\n  vector omin, omax;\n\n  if (obj == NULL)  /* non-existant object, shouldn't get here */\n    return 0;\n\n  if (obj->methods->bbox((void *) obj, &omin, &omax)) {\n    if ((min->x <= omin.x) && (min->y <= omin.y) && (min->z <= omin.z) &&\n        (max->x >= omax.x) && (max->y >= omax.y) && (max->z >= omax.z)) { \n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic int countobj(object * root) {\n  object * cur;     /* counts the number of objects on a list */\n  int numobj;\n\n  numobj=0;\n  cur=root;\n\n  while (cur != NULL) {\n    cur=(object *)cur->nextobj;\n    numobj++;\n  } \n  return numobj;\n}\n\nstatic void movenextobj(object * thisobj, object ** root) {\n  object * cur, * tmp;\n\n  /* move the object after thisobj to the front of the object list  */\n  /*   headed by root */\n  if (thisobj != NULL) {\n    if (thisobj->nextobj != NULL) {\n      cur=(object *)thisobj->nextobj;            /* the object to be moved    */\n      thisobj->nextobj = cur->nextobj; /* link around the moved obj */\n      tmp=*root;                       /* store the root node       */\n      cur->nextobj=tmp;                /* attach root to cur        */ \n      *root=cur;                       /* make cur, the new root    */\n    }\n  }\n}\n\nstatic void octreespace(object ** rootlist, int maxoctnodes) {\n  object * cur;\n  vector gmin, gmax, gctr;\n  vector cmin1, cmin2, cmin3, cmin4, cmin5, cmin6, cmin7, cmin8;\n  vector cmax1, cmax2, cmax3, cmax4, cmax5, cmax6, cmax7, cmax8;\n  bndbox * box1, * box2, * box3, * box4;\n  bndbox * box5, * box6, * box7, * box8;\n  int skipobj;\n\n  if (*rootlist == NULL)  /* don't subdivide non-existant data */\n    return;\n\n  skipobj=0;\n  globalbound(rootlist, &gmin, &gmax);  /* find global min and max */\n\n  gctr.x = ((gmax.x - gmin.x) / 2.0) + gmin.x;\n  gctr.y = ((gmax.y - gmin.y) / 2.0) + gmin.y;\n  gctr.z = ((gmax.z - gmin.z) / 2.0) + gmin.z;\n\n  cmin1=gmin;\n  cmax1=gctr;\n  box1 = newbndbox(cmin1, cmax1); \n\n  cmin2=gmin;\n  cmin2.x=gctr.x;\n  cmax2=gmax;\n  cmax2.y=gctr.y;\n  cmax2.z=gctr.z;\n  box2 = newbndbox(cmin2, cmax2); \n\n  cmin3=gmin;\n  cmin3.y=gctr.y;\n  cmax3=gmax;\n  cmax3.x=gctr.x;\n  cmax3.z=gctr.z;\n  box3 = newbndbox(cmin3, cmax3); \n\n  cmin4=gmin;\n  cmin4.x=gctr.x;\n  cmin4.y=gctr.y;\n  cmax4=gmax;\n  cmax4.z=gctr.z;\n  box4 = newbndbox(cmin4, cmax4); \n\n  cmin5=gmin;\n  cmin5.z=gctr.z;\n  cmax5=gctr;\n  cmax5.z=gmax.z;\n  box5 = newbndbox(cmin5, cmax5); \n\n  cmin6=gctr;\n  cmin6.y=gmin.y;\n  cmax6=gmax;\n  cmax6.y=gctr.y;\n  box6 = newbndbox(cmin6, cmax6); \n\n  cmin7=gctr;\n  cmin7.x=gmin.x;\n  cmax7=gctr;\n  cmax7.y=gmax.y;\n  cmax7.z=gmax.z;\n  box7 = newbndbox(cmin7, cmax7); \n\n  cmin8=gctr;\n  cmax8=gmax;\n  box8 = newbndbox(cmin8, cmax8); \n\n  cur = *rootlist;\n  while (cur != NULL)  {  \n    if (objinside((object *)cur->nextobj, &cmin1, &cmax1)) {\n      movenextobj(cur, &box1->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin2, &cmax2)) {\n      movenextobj(cur, &box2->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin3, &cmax3)) {\n      movenextobj(cur, &box3->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin4, &cmax4)) {\n      movenextobj(cur, &box4->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin5, &cmax5)) {\n      movenextobj(cur, &box5->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin6, &cmax6)) {\n      movenextobj(cur, &box6->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin7, &cmax7)) {\n      movenextobj(cur, &box7->objlist);  \n    }  \n    else if (objinside((object *)cur->nextobj, &cmin8, &cmax8)) {\n      movenextobj(cur, &box8->objlist);  \n    }  \n    else {\n      skipobj++; \n      cur=(object *)cur->nextobj;\n    }\n  }     \n\n/* new scope, for redefinition of cur, and old */\n  { bndbox * cur, * old;\n  old=box1;\n  cur=box2; \n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box3;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box4;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box5;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box6;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box7;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n  cur=box8;\n  if (countobj(cur->objlist) > 0) {\n     old->nextobj=cur;\n     globalbound(&cur->objlist, &cur->min, &cur->max); \n     old=cur; \n  }      \n\n  old->nextobj=*rootlist;\n\n  if (countobj(box1->objlist) > 0) {\n    globalbound(&box1->objlist, &box1->min, &box1->max); \n    *rootlist=(object *) box1;\n  }\n  else {\n    *rootlist=(object *) box1->nextobj;\n  }\n\n  } /**** end of special cur and old scope */\n\n  if (countobj(box1->objlist) > maxoctnodes) {\n    octreespace(&box1->objlist, maxoctnodes);\n  }\n  if (countobj(box2->objlist) > maxoctnodes) {\n    octreespace(&box2->objlist, maxoctnodes);\n  }\n  if (countobj(box3->objlist) > maxoctnodes) {\n    octreespace(&box3->objlist, maxoctnodes);\n  }\n  if (countobj(box4->objlist) > maxoctnodes) {\n    octreespace(&box4->objlist, maxoctnodes);\n  }\n  if (countobj(box5->objlist) > maxoctnodes) {\n    octreespace(&box5->objlist, maxoctnodes);\n  }\n  if (countobj(box6->objlist) > maxoctnodes) {\n    octreespace(&box6->objlist, maxoctnodes);\n  }\n  if (countobj(box7->objlist) > maxoctnodes) {\n    octreespace(&box7->objlist, maxoctnodes);\n  }\n  if (countobj(box8->objlist) > maxoctnodes) {\n    octreespace(&box8->objlist, maxoctnodes);\n  }\n}\n\nvoid dividespace(int maxoctnodes, object **toplist) {\n  bndbox * gbox;\n  vector gmin, gmax;\n\n  if (countobj(*toplist) > maxoctnodes) {\n    globalbound(toplist, &gmin, &gmax);  \n\n    octreespace(toplist, maxoctnodes); \n\n    gbox = newbndbox(gmin, gmax);\n    gbox->objlist = NULL;\n    gbox->tex = NULL; \n    gbox->nextobj=NULL;\n    gbox->objlist=*toplist;\n    *toplist=(object *) gbox;  \n  }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/objbound.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*  \n * objbound.h - defines for object bounding code.\n *\n *  $Id: objbound.h,v 1.2 2007-02-22 17:54:15 Exp $\n */\n\nvoid dividespace(int, object **);\n\n#ifdef OBJBOUND_PRIVATE\n\nstatic void globalbound(object **, vector *, vector *);\nstatic int objinside(object * obj, vector * min, vector * max);\nstatic int countobj(object *);\nstatic void movenextobj(object *, object **);\nstatic void octreespace(object **, int);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/parse.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * parse.cpp - an UltraLame (tm) parser for simple data files...\n */\n\n// Try preventing lots of GCC warnings about ignored results of fscanf etc.\n#if !__INTEL_COMPILER\n\n#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5\n// For older versions of GCC, disable use of __wur in GLIBC\n#undef _FORTIFY_SOURCE\n#define _FORTIFY_SOURCE 0\n#else\n// Starting from 4.5, GCC has a suppression option\n#pragma GCC diagnostic ignored \"-Wunused-result\"\n#endif\n\n#endif //__INTEL_COMPILER\n\n#include <stdio.h>\n#include <math.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h> /* needed for toupper(), macro.. */\n\n#include \"types.h\"\n#include \"api.h\"      /* rendering API */\n\n#define PARSE_INTERNAL\n#include \"parse.h\" /* self protos */\n#undef PARSE_INTERNAL\n\nstatic texentry textable[NUMTEXS]; /* texture lookup table */\nstatic texentry defaulttex;     /* The default texture when a lookup fails */\nstatic int numtextures;         /* number of TEXDEF textures               */\nstatic int numobjectsparsed;    /* total number of objects parsed so far   */\nstatic color scenebackcol;   /* scene background color                  */\n\nstatic int stringcmp(const char * a, const char * b) {\n  size_t i, s, l;\n\n  s=strlen(a);\n  l=strlen(b);\n\n  if (s != l)\n    return 1;\n\n  for (i=0; i<s; i++) {\n    if (toupper(a[i]) != toupper(b[i])) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic void reset_tex_table(void) {\n  apitexture apitex;\n\n  numtextures=0;\n  memset(&textable, 0, sizeof(textable));\n\n  apitex.col.r=1.0;\n  apitex.col.g=1.0;\n  apitex.col.b=1.0;\n  apitex.ambient=0.1;\n  apitex.diffuse=0.9;\n  apitex.specular=0.0;\n  apitex.opacity=1.0;\n  apitex.texturefunc=0;\n\n  defaulttex.tex=rt_texture(&apitex);\n}\n\nstatic errcode add_texture(void * tex, char name[TEXNAMELEN]) {\n  textable[numtextures].tex=tex;\n  strcpy(textable[numtextures].name, name);\n\n  numtextures++;\n  if (numtextures > NUMTEXS) {\n    fprintf(stderr, \"Parse: %d textures allocated, texture slots full!\\n\", numtextures);\n    numtextures--; /* keep writing over last texture if we've run out.. */\n    return PARSEALLOCERR;\n  }\n\n  return PARSENOERR;\n}\n\nstatic void * find_texture(char name[TEXNAMELEN]) {\n  int i;\n\n  for (i=0; i<numtextures; i++) {\n    if (strcmp(name, textable[i].name) == 0)\n    return textable[i].tex;\n  }\n  fprintf(stderr, \"Undefined texture '%s', using default. \\n\",name);\n  return(defaulttex.tex);\n}\n\napiflt degtorad(apiflt deg) {\n  apiflt tmp;\n  tmp=deg * 3.1415926 / 180.0;\n  return tmp;\n}\n\nstatic void degvectoradvec(vector * degvec) {\n  vector tmp;\n\n  tmp.x=degtorad(degvec->x);\n  tmp.y=degtorad(degvec->y);\n  tmp.z=degtorad(degvec->z);\n  *degvec=tmp;\n}\n\nstatic void InitRot3d(RotMat * rot, apiflt x, apiflt y, apiflt z) {\n  rot->rx1=cos(y)*cos(z);\n  rot->rx2=sin(x)*sin(y)*cos(z) - cos(x)*sin(z);\n  rot->rx3=sin(x)*sin(z) + cos(x)*cos(z)*sin(y);\n\n  rot->ry1=cos(y)*sin(z);\n  rot->ry2=cos(x)*cos(z) + sin(x)*sin(y)*sin(z);\n  rot->ry3=cos(x)*sin(y)*sin(z) - sin(x)*cos(z);\n\n  rot->rz1=sin(y);\n  rot->rz2=sin(x)*cos(y);\n  rot->rz3=cos(x)*cos(y);\n}\n\nstatic void Rotate3d(RotMat * rot, vector * vec) {\n  vector tmp;\n  tmp.x=(vec->x*(rot->rx1) + vec->y*(rot->rx2) + vec->z*(rot->rx3));\n  tmp.y=(vec->x*(rot->ry1) + vec->y*(rot->ry2) + vec->z*(rot->ry3));\n  tmp.z=(vec->x*(rot->rz1) + vec->y*(rot->rz2) + vec->z*(rot->rz3));\n  *vec=tmp;\n}\n\nstatic void Scale3d(vector * scale, vector * vec) {\n  vec->x=vec->x * scale->x;\n  vec->y=vec->y * scale->y;\n  vec->z=vec->z * scale->z;\n}\n\nstatic void Trans3d(vector * trans, vector * vec) {\n  vec->x+=trans->x;\n  vec->y+=trans->y;\n  vec->z+=trans->z;\n}\n\nstatic errcode GetString(FILE * dfile, const char * string) {\n  char data[255];\n\n  fscanf(dfile,\"%s\",data);\n  if (stringcmp(data, string) != 0) {\n    fprintf(stderr, \"parse: Expected %s, got %s \\n\",string, data);\n    fprintf(stderr, \"parse: Error while parsing object: %d \\n\",numobjectsparsed);\n    return PARSEBADSYNTAX;\n  }\n\n  return PARSENOERR;\n}\n\nunsigned int readmodel(char * modelfile, SceneHandle scene) {\n  FILE * dfile;\n  errcode rc;\n\n  reset_tex_table();\n  dfile=NULL;\n\n  dfile=fopen(modelfile,\"r\");\n  if (dfile==NULL) {\n    return PARSEBADFILE;\n  }\n\n  rc = GetScenedefs(dfile, scene);\n  if (rc != PARSENOERR) {\n    fclose(dfile);\n    return rc;\n  }\n\n  scenebackcol.r = 0.0; /* default background is black */\n  scenebackcol.g = 0.0;\n  scenebackcol.b = 0.0;\n\n  numobjectsparsed=0;\n  while ((rc = GetObject(dfile, scene)) == PARSENOERR) {\n    numobjectsparsed++;\n  }\n  fclose(dfile);\n\n  if (rc == PARSEEOF)\n    rc = PARSENOERR;\n\n  rt_background(scene, scenebackcol);\n\n  return rc;\n}\n\n\nstatic errcode GetScenedefs(FILE * dfile, SceneHandle scene) {\n  vector Ccenter, Cview, Cup;\n  apiflt zoom, aspectratio;\n  int raydepth, antialiasing;\n  char outfilename[200];\n  int xres, yres, verbose;\n  float a,b,c;\n  errcode rc = PARSENOERR;\n\n  rc |= GetString(dfile, \"BEGIN_SCENE\");\n\n  rc |= GetString(dfile, \"OUTFILE\");\n  fscanf(dfile, \"%s\", outfilename);\n#ifdef _WIN32\n  if (strcmp (outfilename, \"/dev/null\") == 0) {\n    strcpy (outfilename, \"NUL:\");\n  }\n#endif\n\n  rc |= GetString(dfile, \"RESOLUTION\");\n  fscanf(dfile, \"%d %d\", &xres, &yres);\n\n  rc |= GetString(dfile, \"VERBOSE\");\n  fscanf(dfile, \"%d\", &verbose);\n\n  rt_scenesetup(scene, outfilename, xres, yres, verbose);\n\n  rc |= GetString(dfile, \"CAMERA\");\n\n  rc |= GetString(dfile, \"ZOOM\");\n  fscanf(dfile, \"%f\", &a);\n  zoom=a;\n\n  rc |= GetString(dfile, \"ASPECTRATIO\");\n  fscanf(dfile, \"%f\", &b);\n  aspectratio=b;\n\n  rc |= GetString(dfile, \"ANTIALIASING\");\n  fscanf(dfile, \"%d\", &antialiasing);\n\n  rc |= GetString(dfile, \"RAYDEPTH\");\n  fscanf(dfile, \"%d\", &raydepth);\n\n  rc |= GetString(dfile, \"CENTER\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Ccenter.x = a;\n  Ccenter.y = b;\n  Ccenter.z = c;\n\n  rc |= GetString(dfile, \"VIEWDIR\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Cview.x = a;\n  Cview.y = b;\n  Cview.z = c;\n\n  rc |= GetString(dfile, \"UPDIR\");\n  fscanf(dfile,\"%f %f %f\", &a, &b, &c);\n  Cup.x = a;\n  Cup.y = b;\n  Cup.z = c;\n\n  rc |= GetString(dfile, \"END_CAMERA\");   \n\n  rt_camerasetup(scene, zoom, aspectratio, antialiasing, raydepth,\n              Ccenter, Cview, Cup);\n\n\n  return rc;\n}\n\nstatic errcode GetObject(FILE * dfile, SceneHandle scene) {\n  char objtype[80];\n\n  fscanf(dfile, \"%s\", objtype);\n  if (!stringcmp(objtype, \"END_SCENE\")) {\n    return PARSEEOF; /* end parsing */\n  }\n  if (!stringcmp(objtype, \"TEXDEF\")) {\n    return GetTexDef(dfile);\n  }\n  if (!stringcmp(objtype, \"TEXALIAS\")) {\n    return GetTexAlias(dfile);\n  }\n  if (!stringcmp(objtype, \"BACKGROUND\")) {\n    return GetBackGnd(dfile);\n  }\n  if (!stringcmp(objtype, \"CYLINDER\")) {\n    return GetCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"FCYLINDER\")) {\n    return GetFCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"POLYCYLINDER\")) {\n    return GetPolyCylinder(dfile);\n  }\n  if (!stringcmp(objtype, \"SPHERE\")) {\n    return GetSphere(dfile);\n  }\n  if (!stringcmp(objtype, \"PLANE\")) {\n    return GetPlane(dfile);\n  }\n  if (!stringcmp(objtype, \"RING\")) {\n    return GetRing(dfile);\n  }\n  if (!stringcmp(objtype, \"BOX\")) {\n    return GetBox(dfile);\n  }\n  if (!stringcmp(objtype, \"SCALARVOL\")) {\n    return GetVol(dfile);\n  }\n  if (!stringcmp(objtype, \"TRI\")) {\n    return GetTri(dfile);\n  }\n  if (!stringcmp(objtype, \"STRI\")) {\n    return GetSTri(dfile);\n  }\n  if (!stringcmp(objtype, \"LIGHT\")) {\n    return GetLight(dfile);\n  }\n  if (!stringcmp(objtype, \"SCAPE\")) {\n    return GetLandScape(dfile);\n  }\n  if (!stringcmp(objtype, \"TPOLYFILE\")) {\n    return GetTPolyFile(dfile);\n  }\n\n  fprintf(stderr, \"Found bad token: %s expected an object type\\n\", objtype);\n  return PARSEBADSYNTAX;\n}\n\nstatic errcode GetVector(FILE * dfile, vector * v1) {\n  float a, b, c;\n\n  fscanf(dfile, \"%f %f %f\", &a, &b, &c);\n  v1->x=a;\n  v1->y=b;\n  v1->z=c;\n\n  return PARSENOERR;\n}\n\nstatic errcode GetColor(FILE * dfile, color * c1) {\n  float r, g, b;\n  int rc;\n\n  rc = GetString(dfile, \"COLOR\");\n  fscanf(dfile, \"%f %f %f\", &r, &g, &b);\n  c1->r=r;\n  c1->g=g;\n  c1->b=b;\n\n  return rc;\n}\n\nstatic errcode GetTexDef(FILE * dfile) {\n  char texname[TEXNAMELEN];\n\n  fscanf(dfile, \"%s\", texname);\n  add_texture(GetTexBody(dfile), texname);\n\n  return PARSENOERR;\n}\n\nstatic errcode GetTexAlias(FILE * dfile) {\n  char texname[TEXNAMELEN];\n  char aliasname[TEXNAMELEN];\n\n  fscanf(dfile, \"%s\", texname);\n  fscanf(dfile, \"%s\", aliasname);\n  add_texture(find_texture(aliasname), texname);\n\n  return PARSENOERR;\n}\n\n\nstatic errcode GetTexture(FILE * dfile, void ** tex) {\n  char tmp[255];\n  errcode rc = PARSENOERR;\n\n  fscanf(dfile, \"%s\", tmp);\n  if (!stringcmp(\"TEXTURE\", tmp)) {\n    *tex = GetTexBody(dfile);\n  }\n  else\n    *tex = find_texture(tmp);\n\n  return rc;\n}\n\nvoid * GetTexBody(FILE * dfile) {\n  char tmp[255];\n  float a,b,c,d, phong, phongexp, phongtype;\n  apitexture tex;\n  void * voidtex;\n  errcode rc;\n\n  rc = GetString(dfile, \"AMBIENT\");\n  fscanf(dfile, \"%f\", &a);\n  tex.ambient=a;\n\n  rc |= GetString(dfile, \"DIFFUSE\");\n  fscanf(dfile, \"%f\", &b);\n  tex.diffuse=b;\n\n  rc |= GetString(dfile, \"SPECULAR\");\n  fscanf(dfile, \"%f\", &c);\n  tex.specular=c;\n\n  rc |= GetString(dfile, \"OPACITY\");\n  fscanf(dfile, \"%f\", &d);\n  tex.opacity=d;\n\n  fscanf(dfile, \"%s\", tmp);\n  if (!stringcmp(\"PHONG\", tmp)) {\n    fscanf(dfile, \"%s\", tmp);\n    if (!stringcmp(\"METAL\", tmp)) {\n      phongtype = RT_PHONG_METAL;\n    }\n    else if (!stringcmp(\"PLASTIC\", tmp)) {\n      phongtype = RT_PHONG_PLASTIC;\n    }\n    else {\n      phongtype = RT_PHONG_PLASTIC;\n    }\n\n    fscanf(dfile, \"%f\", &phong);\n    GetString(dfile, \"PHONG_SIZE\");\n    fscanf(dfile, \"%f\", &phongexp);\n    fscanf(dfile, \"%s\", tmp);\n  }\n  else {\n    phong = 0.0;\n    phongexp = 100.0;\n    phongtype = RT_PHONG_PLASTIC;\n  }\n\n  fscanf(dfile, \"%f %f %f\", &a, &b, &c);\n  tex.col.r = a;\n  tex.col.g = b;\n  tex.col.b = c;\n\n  rc |= GetString(dfile, \"TEXFUNC\");\n  fscanf(dfile, \"%d\", &tex.texturefunc);\n  if (tex.texturefunc >= 7) {    /* if its an image map, we need a filename */\n    fscanf(dfile, \"%s\", tex.imap);\n  }\n  if (tex.texturefunc != 0) {\n    rc |= GetString(dfile, \"CENTER\");\n    rc |= GetVector(dfile, &tex.ctr);\n    rc |= GetString(dfile, \"ROTATE\");\n    rc |= GetVector(dfile, &tex.rot);\n    rc |= GetString(dfile, \"SCALE\");\n    rc |= GetVector(dfile, &tex.scale);\n  }\n  if (tex.texturefunc == 9) {\n    rc |= GetString(dfile, \"UAXIS\");\n    rc |= GetVector(dfile, &tex.uaxs);\n    rc |= GetString(dfile, \"VAXIS\");\n    rc |= GetVector(dfile, &tex.vaxs);\n  }\n\n  voidtex = rt_texture(&tex);\n  rt_tex_phong(voidtex, phong, phongexp, (int) phongtype);\n\n  return voidtex;\n}\n\nstatic errcode GetLight(FILE * dfile) {\n  apiflt rad;\n  vector ctr;\n  apitexture tex;\n  float a;\n  errcode rc;\n\n  memset(&tex, 0, sizeof(apitexture));\n\n  rc = GetString(dfile,\"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile,\"RAD\");\n  fscanf(dfile,\"%f\",&a);  /* read in radius */\n  rad=a;\n\n  rc |= GetColor(dfile, &tex.col);\n\n  rt_light(rt_texture(&tex), ctr, rad);\n\n  return rc;\n}\n\nstatic errcode GetBackGnd(FILE * dfile) {\n  float r,g,b;\n\n  fscanf(dfile, \"%f %f %f\", &r, &g, &b);\n\n  scenebackcol.r=r;\n  scenebackcol.g=g;\n  scenebackcol.b=b;\n\n  return PARSENOERR;\n}\n\nstatic errcode GetCylinder(FILE * dfile) {\n  apiflt rad;\n  vector ctr, axis;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"AXIS\");\n  rc |= GetVector(dfile, &axis);\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_cylinder(tex, ctr, axis, rad);\n\n  return rc;\n}\n\nstatic errcode GetFCylinder(FILE * dfile) {\n  apiflt rad;\n  vector ctr, axis;\n  vector pnt1, pnt2;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile, \"BASE\");\n  rc |= GetVector(dfile, &pnt1);\n  rc |= GetString(dfile, \"APEX\");\n  rc |= GetVector(dfile, &pnt2);\n\n  ctr=pnt1;\n  axis.x=pnt2.x - pnt1.x;\n  axis.y=pnt2.y - pnt1.y;\n  axis.z=pnt2.z - pnt1.z;\n\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_fcylinder(tex, ctr, axis, rad);\n\n  return rc;\n}\n\nstatic errcode GetPolyCylinder(FILE * dfile) {\n  apiflt rad;\n  vector * temp;\n  void * tex;\n  float a;\n  int numpts, i;\n  errcode rc;\n\n  rc = GetString(dfile, \"POINTS\");\n  fscanf(dfile, \"%d\", &numpts);\n\n  temp = (vector *) malloc(numpts * sizeof(vector));\n\n  for (i=0; i<numpts; i++) {\n    rc |= GetVector(dfile, &temp[i]);\n  }\n\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile, \"%f\", &a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n  rt_polycylinder(tex, temp, numpts, rad);\n\n  free(temp);\n\n  return rc;\n}\n\n\nstatic errcode GetSphere(FILE * dfile) {\n  apiflt rad;\n  vector ctr;\n  void * tex;\n  float a;\n  errcode rc;\n\n  rc = GetString(dfile,\"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"RAD\");\n  fscanf(dfile,\"%f\",&a);\n  rad=a;\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_sphere(tex, ctr, rad);\n\n  return rc;\n}\n\nstatic errcode GetPlane(FILE * dfile) {\n  vector normal;\n  vector ctr;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"NORMAL\");\n  rc |= GetVector(dfile, &normal);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_plane(tex, ctr, normal);\n\n  return rc;\n}\n\nstatic errcode GetVol(FILE * dfile) {\n  vector min, max;\n  int x,y,z;\n  char fname[255];\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"MIN\");\n  rc |= GetVector(dfile, &min);\n  rc |= GetString(dfile, \"MAX\");\n  rc |= GetVector(dfile, &max);\n  rc |= GetString(dfile, \"DIM\");\n  fscanf(dfile, \"%d %d %d \", &x, &y, &z);\n  rc |= GetString(dfile, \"FILE\");\n  fscanf(dfile, \"%s\", fname);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_scalarvol(tex, min, max, x, y, z, fname, NULL);\n\n  return rc;\n}\n\nstatic errcode GetBox(FILE * dfile) {\n  vector min, max;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"MIN\");\n  rc |= GetVector(dfile, &min);\n  rc |= GetString(dfile, \"MAX\");\n  rc |= GetVector(dfile, &max);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_box(tex, min, max);\n\n  return rc;\n}\n\nstatic errcode GetRing(FILE * dfile) {\n  vector normal;\n  vector ctr;\n  void * tex;\n  float a,b;\n  errcode rc;\n\n  rc = GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n  rc |= GetString(dfile, \"NORMAL\");\n  rc |= GetVector(dfile, &normal);\n  rc |= GetString(dfile, \"INNER\");\n  fscanf(dfile, \" %f \", &a);\n  rc |= GetString(dfile, \"OUTER\");\n  fscanf(dfile, \" %f \", &b);\n  rc |= GetTexture(dfile, &tex);\n\n  rt_ring(tex, ctr, normal, a, b);\n\n  return rc;\n}\n\nstatic errcode GetTri(FILE * dfile) {\n  vector v0,v1,v2;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"V0\");\n  rc |= GetVector(dfile, &v0);\n\n  rc |= GetString(dfile, \"V1\");\n  rc |= GetVector(dfile, &v1);\n\n  rc |= GetString(dfile, \"V2\");\n  rc |= GetVector(dfile, &v2);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_tri(tex, v0, v1, v2);\n\n  return rc;\n}\n\nstatic errcode GetSTri(FILE * dfile) {\n  vector v0,v1,v2,n0,n1,n2;\n  void * tex;\n  errcode rc;\n\n  rc = GetString(dfile, \"V0\");\n  rc |= GetVector(dfile, &v0);\n\n  rc |= GetString(dfile, \"V1\");\n  rc |= GetVector(dfile, &v1);\n\n  rc |= GetString(dfile, \"V2\");\n  rc |= GetVector(dfile, &v2);\n\n  rc |= GetString(dfile, \"N0\");\n  rc |= GetVector(dfile, &n0);\n\n  rc |= GetString(dfile, \"N1\");\n  rc |= GetVector(dfile, &n1);\n\n  rc |= GetString(dfile, \"N2\");\n  rc |= GetVector(dfile, &n2);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_stri(tex, v0, v1, v2, n0, n1, n2);\n\n  return rc;\n}\n\nstatic errcode GetLandScape(FILE * dfile) {\n  void * tex;\n  vector ctr;\n  apiflt wx, wy;\n  int m, n;\n  float a,b;\n  errcode rc;\n\n  rc = GetString(dfile, \"RES\");\n  fscanf(dfile, \"%d %d\", &m, &n);\n\n  rc |= GetString(dfile, \"SCALE\");\n  fscanf(dfile, \"%f %f\", &a, &b);\n  wx=a;\n  wy=b;\n\n  rc |= GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n\n  rc |= GetTexture(dfile, &tex);\n\n  rt_landscape(tex, m, n, ctr, wx, wy);\n\n  return rc;\n}\n\nstatic errcode GetTPolyFile(FILE * dfile) {\n  void * tex;\n  vector ctr, rot, scale;\n  vector v1, v2, v0;\n  char ifname[255];\n  FILE *ifp;\n  int v, totalpolys;\n  RotMat RotA;\n  errcode rc;\n\n  totalpolys=0;\n\n  rc = GetString(dfile, \"SCALE\");\n  rc |= GetVector(dfile, &scale);\n\n  rc |= GetString(dfile, \"ROT\");\n  rc |= GetVector(dfile, &rot);\n\n  degvectoradvec(&rot);\n  InitRot3d(&RotA, rot.x, rot.y, rot.z);\n\n  rc |= GetString(dfile, \"CENTER\");\n  rc |= GetVector(dfile, &ctr);\n\n  rc |= GetString(dfile, \"FILE\");\n  fscanf(dfile, \"%s\", ifname);\n\n  rc |= GetTexture(dfile, &tex);\n\n  if ((ifp=fopen(ifname, \"r\")) == NULL) {\n    fprintf(stderr, \"Can't open data file %s for input!! Aborting...\\n\", ifname);\n    return PARSEBADSUBFILE;\n  }\n\n  while (!feof(ifp)) {\n    fscanf(ifp, \"%d\", &v);\n    if (v != 3) { break; }\n\n    totalpolys++;\n    v=0;\n\n    rc |= GetVector(ifp, &v0);\n    rc |= GetVector(ifp, &v1);\n    rc |= GetVector(ifp, &v2);\n\n    Scale3d(&scale, &v0);\n    Scale3d(&scale, &v1);\n    Scale3d(&scale, &v2);\n\n    Rotate3d(&RotA, &v0);\n    Rotate3d(&RotA, &v1);\n    Rotate3d(&RotA, &v2);\n\n    Trans3d(&ctr, &v0);\n    Trans3d(&ctr, &v1);\n    Trans3d(&ctr, &v2);\n\n    rt_tri(tex, v1, v0, v2);\n  }\n\n  fclose(ifp);\n\n  return rc;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/parse.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * parse.h - this file contains defines for model file reading.\n *\n *  $Id: parse.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n#define PARSENOERR       0\n#define PARSEBADFILE     1\n#define PARSEBADSUBFILE  2\n#define PARSEBADSYNTAX   4\n#define PARSEEOF         8\n#define PARSEALLOCERR    16\n \nunsigned int readmodel(char *, SceneHandle);\n\n#ifdef PARSE_INTERNAL\n#define NUMTEXS 32768\n#define TEXNAMELEN 24\n\ntypedef struct {\n   double rx1; double rx2; double rx3;\n   double ry1; double ry2; double ry3;\n   double rz1; double rz2; double rz3;\n} RotMat;\n\ntypedef struct {\n        char name[TEXNAMELEN];\n        void * tex;\n} texentry;\n\n#ifdef _ERRCODE_DEFINED\n#define errcode errcode_t\n#endif//_ERRCODE_DEFINED\ntypedef unsigned int errcode;\n\nstatic errcode add_texture(void * tex, char name[TEXNAMELEN]);\nstatic errcode GetString(FILE *, const char *);\nstatic errcode GetScenedefs(FILE *, SceneHandle);\nstatic errcode GetColor(FILE *, color *);\nstatic errcode GetVector(FILE *, vector *);\nstatic errcode GetTexDef(FILE *);\nstatic errcode GetTexAlias(FILE *);\nstatic errcode GetTexture(FILE *, void **);\nvoid * GetTexBody(FILE *);\nstatic errcode GetBackGnd(FILE *);\nstatic errcode GetCylinder(FILE *);\nstatic errcode GetFCylinder(FILE *);\nstatic errcode GetPolyCylinder(FILE *);\nstatic errcode GetSphere(FILE *);\nstatic errcode GetPlane(FILE *);\nstatic errcode GetRing(FILE *);\nstatic errcode GetBox(FILE *);\nstatic errcode GetVol(FILE *);\nstatic errcode GetTri(FILE *);\nstatic errcode GetSTri(FILE *);\nstatic errcode GetLight(FILE *);\nstatic errcode GetLandScape(FILE *);\nstatic errcode GetTPolyFile(FILE *);\nstatic errcode GetMGFFile(FILE *, SceneHandle);\nstatic errcode GetObject(FILE *, SceneHandle);\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/plane.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * plane.cpp - This file contains the functions for dealing with planes.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define PLANE_PRIVATE\n#include \"plane.h\"\n\nstatic object_methods plane_methods = {\n  (void (*)(void *, void *))(plane_intersect),\n  (void (*)(void *, void *, void *, void *))(plane_normal),\n  plane_bbox, \n  free \n};\n\nobject * newplane(void * tex, vector ctr, vector norm) {\n  plane * p;\n  \n  p=(plane *) rt_getmem(sizeof(plane));\n  memset(p, 0, sizeof(plane));\n  p->methods = &plane_methods;\n\n  p->tex = (texture *)tex;\n  p->norm = norm;\n  VNorm(&p->norm);\n  p->d = -VDot(&ctr, &p->norm);\n\n  return (object *) p;\n}\n\nstatic int plane_bbox(void * obj, vector * min, vector * max) {\n  return 0;\n}\n\nstatic void plane_intersect(plane * pln, ray * ry) {\n  flt t,td;\n   \n  t=-(pln->d + VDot(&pln->norm, &ry->o));\n  td=VDot(&pln->norm, &ry->d); \n  if (td != 0.0) {\n    t /= td;\n    if (t > 0.0)\n      add_intersection(t,(object *) pln, ry);\n  }\n}\n\nstatic void plane_normal(plane * pln, vector  * pnt, ray * incident, vector * N) {\n  *N=pln->norm;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/plane.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * plane.h - This file contains the defines for planes etc.\n *\n *  $Id: plane.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n \nobject * newplane(void * tex, vector ctr, vector norm);\n\n#ifdef PLANE_PRIVATE\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  flt d;\n  vector norm;\n} plane; \n\nstatic void plane_intersect(plane *, ray *);\nstatic int plane_bbox(void * obj, vector * min, vector * max);\nstatic void plane_normal(plane *, vector *, ray * incident, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ppm.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  ppm.cpp - This file deals with PPM format image files (reading/writing)\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file..  Probably won't implement any decent checking\n   at this point, probably choke on things like the # comments.. */\n\n// Try preventing lots of GCC warnings about ignored results of fscanf etc.\n#if !__INTEL_COMPILER\n\n#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5\n// For older versions of GCC, disable use of __wur in GLIBC\n#undef _FORTIFY_SOURCE\n#define _FORTIFY_SOURCE 0\n#else\n// Starting from 4.5, GCC has a suppression option\n#pragma GCC diagnostic ignored \"-Wunused-result\"\n#endif\n\n#endif //__INTEL_COMPILER\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"imageio.h\" /* error codes etc */\n#include \"ppm.h\"\n\nstatic int getint(FILE * dfile) {\n  char ch[200];\n  int i;\n  int num;\n\n  num=0; \n  while (num==0) {\n    fscanf(dfile, \"%s\", ch);\n      while (ch[0]=='#') {\n        fgets(ch, 200, dfile);\n      }\n    num=sscanf(ch, \"%d\", &i);\n  }\n  return i;\n}\n\nint readppm(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  char data[200];  \n  FILE * ifp;\n  int i;\n  size_t bytesread;\n  int datasize;\n \n  ifp=fopen(name, \"r\");  \n  if (ifp==NULL) {\n    return IMAGEBADFILE; /* couldn't open the file */\n  }\n  fscanf(ifp, \"%s\", data);\n \n  if (strcmp(data, \"P6\")) {\n     fclose(ifp);\n     return IMAGEUNSUP; /* not a format we support */\n  }\n\n  *xres=getint(ifp);\n  *yres=getint(ifp);\n      i=getint(ifp); /* eat the maxval number */\n  fread(&i, 1, 1, ifp); /* eat the newline */ \n  datasize = 3 * (*xres) * (*yres);\n\n  *imgdata=(unsigned char *)rt_getmem(datasize); \n\n  bytesread=fread(*imgdata, 1, datasize, ifp);   \n\n  fclose(ifp);\n\n  if (bytesread != datasize) \n    return IMAGEREADERR;\n  \n  return IMAGENOERR;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ppm.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n *  ppm.h - This file deals with PPM format image files (reading/writing)\n *\n *  $Id: ppm.h,v 1.2 2007-02-22 17:54:16 Exp $\n */ \n\n/* For our puposes, we're interested only in the 3 byte per pixel 24 bit\n   truecolor sort of file..  Probably won't implement any decent checking\n   at this point, probably choke on things like the # comments.. */\n\nint readppm(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/pthread.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#ifdef EMULATE_PTHREADS\n\n#include <assert.h>\n#include \"pthread_w.h\"\n\n/*\n    Basics\n*/\n\nint\npthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)\n{\n    pthread_t th;\n\n    if (thread == NULL) return EINVAL;\n    *thread = NULL;\n\n    if (start_routine == NULL) return EINVAL;\n\n    th = (pthread_t) malloc (sizeof (pthread_s));\n    memset (th, 0, sizeof (pthread_s));\n\n    th->winthread_handle = CreateThread (\n        NULL,\n        0,\n        (LPTHREAD_START_ROUTINE) start_routine,\n        arg,\n        0,\n        &th->winthread_id);\n    if (th->winthread_handle == NULL) return EAGAIN;  /*  GetLastError()  */\n\n    *thread = th;\n    return 0;\n}\n\nint\npthread_join (pthread_t th, void **thread_return)\n{\n    BOOL b_ret;\n    DWORD dw_ret;\n\n    if (thread_return) *thread_return = NULL;\n\n    if ((th == NULL) || (th->winthread_handle == NULL)) return EINVAL;\n\n    dw_ret = WaitForSingleObject (th->winthread_handle, INFINITE);\n    if (dw_ret != WAIT_OBJECT_0) return ERROR_PTHREAD;  /*  dw_ret == WAIT_FAILED; GetLastError()  */\n\n    if (thread_return) {\n        BOOL e_ret;\n        DWORD exit_val;\n        e_ret = GetExitCodeThread (th->winthread_handle, &exit_val);\n        if (!e_ret) return ERROR_PTHREAD;  /*  GetLastError()  */\n        *thread_return = (void *)(size_t) exit_val;\n    }\n\n    b_ret = CloseHandle (th->winthread_handle);\n    if (!b_ret) return ERROR_PTHREAD;  /*  GetLastError()  */\n    memset (th, 0, sizeof (pthread_s));\n    free (th);\n    th = NULL;\n\n    return 0;\n}\n\nvoid\npthread_exit (void *retval)\n{\n    /*  specific to PTHREAD_TO_WINTHREAD  */\n\n    ExitThread ((DWORD) ((size_t) retval));  /*  thread becomes signalled so its death can be waited upon  */\n    /*NOTREACHED*/\n    assert (0); return;  /*  void fnc; can't return an error code  */\n}\n\n/*\n    Mutex\n*/\n\nint\npthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr)\n{\n    InitializeCriticalSection (&mutex->critsec);\n    return 0;\n}\n\nint\npthread_mutex_destroy (pthread_mutex_t *mutex)\n{\n    return 0;\n}\n\nint\npthread_mutex_lock (pthread_mutex_t *mutex)\n{\n    EnterCriticalSection (&mutex->critsec);\n    return 0;\n}\n\nint\npthread_mutex_unlock (pthread_mutex_t *mutex)\n{\n    LeaveCriticalSection (&mutex->critsec);\n    return 0;\n}\n\n#endif  /*  EMULATE_PTHREADS  */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/pthread_w.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#ifdef EMULATE_PTHREADS\n\n#ifndef _PTHREAD_H_DEFINED\n#define _PTHREAD_H_DEFINED\n\n#include <windows.h>\n#include <errno.h>\n#ifndef ENOTSUP\n#define ENOTSUP EPERM\n#endif\n\n/*  just need <stddef.h> on Windows to get size_t defined  */\n#include <stddef.h>\n\n#define ERROR_PTHREAD 1000\n#define ERROR_MODE 1001\n#define ERROR_UNIMPL 1002\n\n/*\n    Basics\n*/\n\nstruct pthread_s {\n    HANDLE winthread_handle;\n    DWORD winthread_id;\n};\ntypedef struct pthread_s *pthread_t;  /*  one of the few types that's pointer, not struct  */\n\ntypedef struct {\n    int i;  /*  not yet defined...  */\n} pthread_attr_t;\n\n/*\n    Mutex\n*/\n\ntypedef struct {\n    int i;  /*  not yet defined...  */\n} pthread_mutexattr_t;\n\ntypedef struct {\n    CRITICAL_SECTION critsec;\n} pthread_mutex_t;\n\n/*\n    Function prototypes\n*/\n\nextern int pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);\nextern int pthread_join (pthread_t th, void **thread_return);\nextern void pthread_exit (void *retval);\n\nextern int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr);\nextern int pthread_mutex_destroy (pthread_mutex_t *mutex);\nextern int pthread_mutex_lock (pthread_mutex_t *mutex);\nextern int pthread_mutex_unlock (pthread_mutex_t *mutex);\n\n#endif  /*  _PTHREAD_H_DEFINED  */\n\n#endif  /*  EMULATE_PTHREADS  */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/quadric.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * quadric.cpp - This file contains the functions for dealing with quadrics.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"quadric.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\nint quadric_bbox(void * obj, vector * min, vector * max) {\n  return 0;\n}\n\nstatic object_methods quadric_methods = {\n  (void (*)(void *, void *))(quadric_intersect),\n  (void (*)(void *, void *, void *, void *))(quadric_normal),\n  quadric_bbox, \n  free \n};\n \nquadric * newquadric() {\n  quadric * q;\n \n  q=(quadric *) rt_getmem(sizeof(quadric));\n  memset(q, 0, sizeof(quadric));\n  q->ctr.x=0.0;\n  q->ctr.y=0.0;\n  q->ctr.z=0.0;\n  q->methods = &quadric_methods;\n \n  return q;\n}\n\nvoid quadric_intersect(quadric * q, ray * ry) {\n  flt Aq, Bq, Cq;\n  flt t1, t2;\n  flt disc;\n  vector rd;\n  vector ro;\n \n  rd=ry->d;\n  VNorm(&rd);\n\n  ro.x =  ry->o.x - q->ctr.x;\n  ro.y =  ry->o.y - q->ctr.y;\n  ro.z =  ry->o.z - q->ctr.z;\n\n\n  Aq = (q->mat.a*(rd.x * rd.x)) +\n        (2.0 * q->mat.b * rd.x * rd.y) +\n        (2.0 * q->mat.c * rd.x * rd.z) +\n        (q->mat.e * (rd.y * rd.y)) +\n        (2.0 * q->mat.f * rd.y * rd.z) +\n        (q->mat.h * (rd.z * rd.z));\n\n  Bq = 2.0 * (\n        (q->mat.a * ro.x * rd.x) +\n        (q->mat.b * ((ro.x * rd.y) + (rd.x * ro.y))) +\n        (q->mat.c * ((ro.x * rd.z) + (rd.x * ro.z))) +\n        (q->mat.d * rd.x) +\n        (q->mat.e * ro.y * rd.y) +\n        (q->mat.f * ((ro.y * rd.z) + (rd.y * ro.z))) +\n        (q->mat.g * rd.y) +\n        (q->mat.h * ro.z * rd.z) +\n        (q->mat.i * rd.z)\n        );\n\n  Cq = (q->mat.a * (ro.x * ro.x)) +\n        (2.0 * q->mat.b * ro.x * ro.y) +\n        (2.0 * q->mat.c * ro.x * ro.z) +\n        (2.0 * q->mat.d * ro.x) +\n        (q->mat.e * (ro.y * ro.y)) +\n        (2.0 * q->mat.f * ro.y * ro.z) +\n        (2.0 * q->mat.g * ro.y) +\n        (q->mat.h * (ro.z * ro.z)) +\n        (2.0 * q->mat.i * ro.z) +\n        q->mat.j;\n\n  if (Aq == 0.0) {\n          t1 = - Cq / Bq;\n          add_intersection(t1, (object *) q, ry);\n          }\n  else {\n    disc=(Bq*Bq - 4.0 * Aq * Cq);\n    if (disc > 0.0) {\n          disc=sqrt(disc);\n          t1 = (-Bq + disc) / (2.0 * Aq);\n          t2 = (-Bq - disc) / (2.0 * Aq);\n          add_intersection(t1, (object *) q, ry);\n          add_intersection(t2, (object *) q, ry); \n          }\n  }\n}\n\nvoid quadric_normal(quadric * q, vector * pnt, ray * incident, vector * N) {\n\n  N->x = (q->mat.a*(pnt->x - q->ctr.x) + \n\t  q->mat.b*(pnt->y - q->ctr.y) + \n\t  q->mat.c*(pnt->z - q->ctr.z) + q->mat.d);\n\n  N->y = (q->mat.b*(pnt->x - q->ctr.x) + \n\t  q->mat.e*(pnt->y - q->ctr.y) + \n\t  q->mat.f*(pnt->z - q->ctr.z) + q->mat.g);\n\n  N->z = (q->mat.c*(pnt->x - q->ctr.x) + \n\t  q->mat.f*(pnt->y - q->ctr.y) + \n\t  q->mat.h*(pnt->z - q->ctr.z) + q->mat.i);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n \n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/quadric.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * quadric.h - This file contains the defines for quadrics.\n *\n *  $Id: quadric.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\ntypedef struct {\n  flt a; flt b; flt c;\n  flt d; flt e; flt f;\n  flt g; flt h; flt i; flt j;\n} quadmatrix;\n\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  quadmatrix mat;\n} quadric; \n\n\nquadric * newquadric(void);\nvoid quadric_intersect(quadric *, ray *);\nvoid quadric_normal(quadric *, vector *, ray *, vector *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/render.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * render.cpp - This file contains the main program and driver for the raytracer.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"render.h\"\n#include \"util.h\"\n#include \"light.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n#include \"objbound.h\"\n#include \"grid.h\"\n\n/* how many pieces to divide each scanline into */\n#define NUMHORZDIV 1  \n\nvoid renderscene(scenedef scene) {\n  //char msgtxt[2048];\n  //void * outfile;\n  /* Grid based accerlation scheme */\n  if (scene.boundmode == RT_BOUNDING_ENABLED) \n    engrid_scene(&rootobj); /* grid */\n  /* Not used now\n  if (scene.verbosemode) { \n    sprintf(msgtxt, \"Opening %s for output.\", scene.outfilename); \n    rt_ui_message(MSG_0, msgtxt);\n  }\n\n  createtgafile(scene.outfilename,  \n                  (unsigned short) scene.hres, \n                  (unsigned short) scene.vres);\n  outfile = opentgafile(scene.outfilename);\n  */\n\n  trace_region (scene, 0/*outfile*/, 0, 0, scene.hres, scene.vres);\n  //fclose((FILE *)outfile);\n} /* end of renderscene() */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/render.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * render.h - This file contains the defines for the top level functions \n *\n *  $Id: render.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n\nvoid renderscene(scenedef); \n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ring.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * ring.cpp - This file contains the functions for dealing with rings.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define RING_PRIVATE\n#include \"ring.h\"\n\nstatic object_methods ring_methods = {\n  (void (*)(void *, void *))(ring_intersect),\n  (void (*)(void *, void *, void *, void *))(ring_normal),\n  ring_bbox, \n  free \n};\n\nobject * newring(void * tex, vector ctr, vector norm, flt inrad, flt outrad) {\n  ring * r;\n  \n  r=(ring *) rt_getmem(sizeof(ring));\n  memset(r, 0, sizeof(ring));\n  r->methods = &ring_methods;\n\n  r->tex = (texture *)tex;\n  r->ctr = ctr;\n  r->norm = norm;\n  r->inrad = inrad;\n  r->outrad= outrad;\n\n  return (object *) r;\n}\n\nstatic int ring_bbox(void * obj, vector * min, vector * max) {\n  ring * r = (ring *) obj;\n\n  min->x = r->ctr.x - r->outrad;\n  min->y = r->ctr.y - r->outrad;\n  min->z = r->ctr.z - r->outrad;\n  max->x = r->ctr.x + r->outrad;\n  max->y = r->ctr.y + r->outrad;\n  max->z = r->ctr.z + r->outrad;\n\n  return 1;\n}\n\nstatic void ring_intersect(ring * rng, ray * ry) {\n  flt d;\n  flt t,td;\n  vector hit, pnt;\n  \n  d = -VDot(&(rng->ctr), &(rng->norm));\n   \n  t=-(d+VDot(&(rng->norm), &(ry->o)));\n  td=VDot(&(rng->norm),&(ry->d)); \n  if (td != 0.0) {\n    t= t / td;\n    if (t>=0.0) {\n      hit=Raypnt(ry, t);\n      VSUB(hit, rng->ctr, pnt);\n      VDOT(td, pnt, pnt);\n      td=sqrt(td);\n      if ((td > rng->inrad) && (td < rng->outrad)) \n        add_intersection(t,(object *) rng, ry);\n    }\n  }\n}\n\nstatic void ring_normal(ring * rng, vector  * pnt, ray * incident, vector * N) {\n  *N=rng->norm;\n  VNorm(N);\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ring.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * ring.h - This file contains the defines for rings etc.\n *\n *  $Id: ring.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newring(void * tex, vector ctr, vector norm, flt in, flt out);\n\n#ifdef RING_PRIVATE \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  vector norm;\n  flt inrad;\n  flt outrad;\n} ring; \n\nstatic int ring_bbox(void * obj, vector * min, vector * max);\nstatic void ring_intersect(ring *, ray *);\nstatic void ring_normal(ring *, vector *, ray * incident, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/shade.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * shade.cpp - This file contains the functions that perform surface shading.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"light.h\"\n#include \"intersect.h\"\n#include \"vector.h\"\n#include \"trace.h\"\n#include \"global.h\"\n#include \"shade.h\"\n\nvoid reset_lights(void) {\n  numlights=0;\n}\n\nvoid add_light(point_light * li) {\n  lightlist[numlights]=li;\n  numlights++;\n}\n\ncolor shader(ray * incident) {\n  color col, diffuse, phongcol; \n  vector N, L, hit;\n  ray shadowray;\n  flt inten, t, Llen;\n  object * obj;\n  int numints, i;\n  point_light * li;\n\n\n  numints=closest_intersection(&t, &obj, incident->intstruct);  \n\t\t/* find the number of intersections */\n                /* and return the closest one.      */\n\n  if (numints < 1) {         \n    /* if there weren't any object intersections then return the */\n    /* background color for the pixel color.                     */\n    return incident->scene->background;\n  }\n\n  if (obj->tex->islight) {  /* if the current object is a light, then we  */\n    return obj->tex->col;   /* will only use the objects ambient color    */\n  }\n\n  RAYPNT(hit, (*incident), t)       /* find the point of intersection from t */ \n  obj->methods->normal(obj, &hit, incident, &N);  /* find the surface normal */\n\n  /* execute the object's texture function */\n  col = obj->tex->texfunc(&hit, obj->tex, incident); \n\n  diffuse.r = 0.0; \n  diffuse.g = 0.0; \n  diffuse.b = 0.0; \n  phongcol = diffuse;\n\n  if ((obj->tex->diffuse > 0.0) || (obj->tex->phong > 0.0)) {  \n    for (i=0; i<numlights; i++) {   /* loop for light contributions */\n      li=lightlist[i];              /* set li=to the current light  */\n      VSUB(li->ctr, hit, L)         /* find the light vector        */\n\n      /* calculate the distance to the light from the hit point */\n      Llen = sqrt(L.x*L.x + L.y*L.y + L.z*L.z) + EPSILON;\n\n      L.x /= Llen; /* normalize the light direction vector */\n      L.y /= Llen;\n      L.z /= Llen;\n\n      VDOT(inten, N, L)             /* light intensity              */\n\n      /* add in diffuse lighting for this light if we're facing it */ \n      if (inten > 0.0) {            \n        /* test for a shadow */\n        shadowray.intstruct = incident->intstruct;\n        shadowray.flags = RT_RAY_SHADOW | RT_RAY_BOUNDED; \n        incident->serial++;\n        shadowray.serial = incident->serial;\n        shadowray.mbox = incident->mbox;\n        shadowray.o   = hit;\n        shadowray.d   = L;      \n        shadowray.maxdist = Llen;\n        shadowray.s   = hit;\n        shadowray.e = li->ctr;\n        shadowray.scene = incident->scene;\n        reset_intersection(incident->intstruct);\n        intersect_objects(&shadowray);\n\n        if (!shadow_intersection(incident->intstruct, Llen)) {\n          /* XXX now that opacity is in the code, have to be more careful */\n          ColorAddS(&diffuse, &li->tex->col, inten);\n\n          /* phong type specular highlights */\n          if (obj->tex->phong > 0.0) {\n            flt phongval;\n            phongval = shade_phong(incident, &hit, &N, &L, obj->tex->phongexp); \n            if (obj->tex->phongtype) \n              ColorAddS(&phongcol, &col, phongval);\n            else\n              ColorAddS(&phongcol, &(li->tex->col), phongval);\n          }\n        }\n      }  \n    } \n  }\n\n  ColorScale(&diffuse, obj->tex->diffuse);\n\n  col.r *= (diffuse.r + obj->tex->ambient); /* do a product of the */\n  col.g *= (diffuse.g + obj->tex->ambient); /* diffuse intensity with  */\n  col.b *= (diffuse.b + obj->tex->ambient); /* object color + ambient  */\n\n  if (obj->tex->phong > 0.0) {\n    ColorAccum(&col, &phongcol);\n  }\n\n  /* spawn reflection rays if necessary */\n  /* note: this will overwrite the old intersection list */\n  if (obj->tex->specular > 0.0) {    \n    color specol;\n    specol = shade_reflection(incident, &hit, &N, obj->tex->specular);\n    ColorAccum(&col, &specol);\n  }\n\n  /* spawn transmission rays / refraction */\n  /* note: this will overwrite the old intersection list */\n  if (obj->tex->opacity < 1.0) {      \n    color transcol;\n    transcol = shade_transmission(incident, &hit, 1.0 - obj->tex->opacity);\n    ColorAccum(&col, &transcol);\n  }\n\n  return col;    /* return the color of the shaded pixel... */\n}\n\n\ncolor shade_reflection(ray * incident, vector * hit, vector * N, flt specular) {\n  ray specray;\n  color col;\n  vector R;\n \n  VAddS(-2.0 * (incident->d.x * N->x + \n                incident->d.y * N->y + \n                incident->d.z * N->z), N, &incident->d, &R);\n\n  specray.intstruct=incident->intstruct; /* what thread are we   */\n  specray.depth=incident->depth - 1;   /* go up a level in recursion depth */\n  specray.flags = RT_RAY_REGULAR;      /* infinite ray, to start with */\n  specray.serial = incident->serial + 1; /* next serial number */\n  specray.mbox = incident->mbox; \n  specray.o=*hit; \n  specray.d=R;\t\t\t       /* reflect incident ray about normal */\n  specray.o=Raypnt(&specray, EPSILON); /* avoid numerical precision bugs */\n  specray.maxdist = FHUGE;             /* take any intersection */\n  specray.scene=incident->scene;       /* global scenedef info */\n  col=trace(&specray);                 /* trace specular reflection ray */ \n\n  incident->serial = specray.serial;    /* update the serial number */\n\n  ColorScale(&col, specular);\n\n  return col;\n}\n\n\ncolor shade_transmission(ray * incident, vector * hit, flt trans) {\n  ray transray;\n  color col;\n\n  transray.intstruct=incident->intstruct; /* what thread are we   */\n  transray.depth=incident->depth - 1;    /* go up a level in recursion depth */\n  transray.flags = RT_RAY_REGULAR;       /* infinite ray, to start with */\n  transray.serial = incident->serial + 1; /* update serial number */\n  transray.mbox = incident->mbox;\n  transray.o=*hit; \n  transray.d=incident->d;                /* ray continues along incident path */\n  transray.o=Raypnt(&transray, EPSILON); /* avoid numerical precision bugs */\n  transray.maxdist = FHUGE;              /* take any intersection */\n  transray.scene=incident->scene;        /* global scenedef info */\n  col=trace(&transray);                  /* trace transmission ray */  \n\n  incident->serial = transray.serial;\n\n  ColorScale(&col, trans);\n\n  return col;\n}\n\nflt shade_phong(ray * incident, vector * hit, \n  vector * N, vector * L, flt specpower){\n  vector H, V;\n  flt inten;\n\n  V = incident->d;\n  VScale(&V, -1.0);\n  VAdd(&V, L, &H);\n  VScale(&H, 0.5);   \n  VNorm(&H);\n  inten = VDot(N, &H);\n  if (inten > 0.0) \n    inten = pow(inten, specpower);\n  else \n    inten = 0.0;\n\n  return inten;\n} \n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/shade.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * shade.h - This file contains declarations and definitions for the shader.\n *\n *  $Id: shade.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n \nvoid reset_lights(void);\nvoid add_light(point_light *);\n\ncolor shader(ray *);\ncolor shade_reflection(ray *, vector *, vector *, flt);\ncolor shade_transmission(ray *, vector *, flt);\nflt shade_phong(ray * incident, vector * hit, vector * N, vector * L, flt specpower);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/sphere.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * sphere.cpp - This file contains the functions for dealing with spheres.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define SPHERE_PRIVATE\n#include \"sphere.h\"\n\nstatic object_methods sphere_methods = {\n  (void (*)(void *, void *))(sphere_intersect),\n  (void (*)(void *, void *, void *, void *))(sphere_normal),\n  sphere_bbox, \n  free \n};\n\nobject * newsphere(void * tex, vector ctr, flt rad) {\n  sphere * s;\n  \n  s=(sphere *) rt_getmem(sizeof(sphere));\n  memset(s, 0, sizeof(sphere));\n  s->methods = &sphere_methods;\n\n  s->tex=(texture *)tex;\n  s->ctr=ctr;\n  s->rad=rad;\n\n  return (object *) s;\n}\n\nstatic int sphere_bbox(void * obj, vector * min, vector * max) {\n  sphere * s = (sphere *) obj;\n\n  min->x = s->ctr.x - s->rad;\n  min->y = s->ctr.y - s->rad;\n  min->z = s->ctr.z - s->rad;\n  max->x = s->ctr.x + s->rad;\n  max->y = s->ctr.y + s->rad;\n  max->z = s->ctr.z + s->rad;\n\n  return 1;\n}\n\nstatic void sphere_intersect(sphere * spr, ray * ry) {\n  flt b, disc, t1, t2, temp;\n  vector V;\n\n  VSUB(spr->ctr, ry->o, V);\n  VDOT(b, V, ry->d); \n  VDOT(temp, V, V);  \n\n  disc=b*b + spr->rad*spr->rad - temp;\n\n  if (disc<=0.0) return;\n  disc=sqrt(disc);\n\n  t2=b+disc;\n  if (t2 <= SPEPSILON) \n    return;\n  add_intersection(t2, (object *) spr, ry);  \n\n  t1=b-disc;\n  if (t1 > SPEPSILON) \n    add_intersection(t1, (object *) spr, ry);  \n}\n\nstatic void sphere_normal(sphere * spr, vector * pnt, ray * incident, vector * N) {\n  VSub((vector *) pnt, &(spr->ctr), N);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  } \n}\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/sphere.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * sphere.h - This file contains the defines for spheres etc.\n *\n *  $Id: sphere.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newsphere(void *, vector, flt);\n\n#ifdef SPHERE_PRIVATE\n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector ctr;\n  flt rad;\n} sphere;\n\nstatic int sphere_bbox(void * obj, vector * min, vector * max);\nstatic void sphere_intersect(sphere *, ray *);\nstatic void sphere_normal(sphere *, vector *, ray *, vector *);\n\n#endif /* SPHERE_PRIVATE */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/tachyon_video.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"types.h\"\n#include \"api.h\"       /* The ray tracing library API */\n#include \"ui.h\"\n#include \"util.h\"\n#include \"tachyon_video.h\"\n\nextern SceneHandle global_scene;\nextern char *global_window_title;\nextern bool global_usegraphics;\n\nvoid tachyon_video::on_process() {\n    char buf[8192];\n    flt runtime;\n    scenedef *scene = (scenedef *) global_scene;\n    updating_mode = scene->displaymode == RT_DISPLAY_ENABLED;\n    recycling = false;\n    pausing = false;\n    do {\n        updating = updating_mode;\n        timer start_timer = gettimer();\n        rt_renderscene(global_scene);\n        timer end_timer = gettimer();\n        runtime = timertime(start_timer, end_timer);\n        sprintf(buf, \"%s: %.3f seconds\", global_window_title, runtime);\n        rt_ui_message(MSG_0, buf);\n        title = buf; show_title(); // show time spent for rendering\n        if(!updating) {\n            updating = true;\n            drawing_memory dm = get_drawing_memory();\n            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen\n        }\n        rt_finalize();\n        title = global_window_title; show_title(); // reset title to default\n    } while(recycling && running);\n}\n\nvoid tachyon_video::on_key(int key) {\n    key &= 0xff;\n    recycling = true;\n    if(key == esc_key) running = false;\n    else if(key == ' ') {\n        if(!updating) {\n            updating = true;\n            drawing_memory dm = get_drawing_memory();\n            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen\n        }\n        updating = updating_mode = !updating_mode;\n    }\n    else if(key == 'p') {\n        pausing = !pausing;\n        if(pausing) {\n            title = \"Press ESC to exit or 'p' to continue after rendering completion\";\n            show_title();\n        }\n    }\n}\n\nvoid rt_finalize(void) {\n    timer t0, t1;\n    t0 = gettimer();\n    if(global_usegraphics)\n        do { rt_sleep(1); t1 = gettimer(); }\n        while( (timertime(t0, t1) < 10 || video->pausing) && video->next_frame());\n#ifdef _WINDOWS\n    else rt_sleep(10000);\n#endif\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/tachyon_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"../../../common/gui/video.h\"\n\nclass tachyon_video : public video\n{\npublic:\n    bool updating_mode;\n    bool recycling;\n    bool pausing;\n    void on_process();\n    void on_key(int key);\n};\n\nextern class tachyon_video *video;\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/texture.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * texture.cpp - This file contains functions for implementing textures.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"texture.h\"\n#include \"coordsys.h\"\n#include \"imap.h\"\n#include \"vector.h\"\n#include \"box.h\"\n\n/* plain vanilla texture solely based on object color */\ncolor standard_texture(vector * hit, texture * tex, ray * ry) {\n  return tex->col;\n}\n\n/* cylindrical image map */\ncolor image_cyl_texture(vector * hit, texture * tex, ray * ry) {\n  vector rh;\n  flt u,v;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.z=hit->y - tex->ctr.y;\n  rh.y=hit->z - tex->ctr.z;\n \n  xyztocyl(rh, 1.0, &u, &v);\n\n  u = u * tex->scale.x;  \n  u = u + tex->rot.x;\n  u=fmod(u, 1.0);\n  if (u < 0.0) u+=1.0; \n\n  v = v * tex->scale.y; \n  v = v + tex->rot.y;\n  v=fmod(v, 1.0);\n  if (v < 0.0) v+=1.0; \n\n  return ImageMap((rawimage *)tex->img, u, v); \n}  \n\n/* spherical image map */\ncolor image_sphere_texture(vector * hit, texture * tex, ray * ry) {\n  vector rh;\n  flt u,v;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.y=hit->y - tex->ctr.y;\n  rh.z=hit->z - tex->ctr.z;\n \n  xyztospr(rh, &u, &v);\n\n  u = u * tex->scale.x;\n  u = u + tex->rot.x;\n  u=fmod(u, 1.0);\n  if (u < 0.0) u+=1.0;\n \n  v = v * tex->scale.y;\n  v = v + tex->rot.y;\n  v=fmod(v, 1.0);\n  if (v < 0.0) v+=1.0;\n \n  return ImageMap((rawimage *)tex->img, u, v);\n}\n\n/* planar image map */\ncolor image_plane_texture(vector * hit, texture * tex, ray * ry) {\n  vector pnt;\n  flt u,v;\n \n  pnt.x=hit->x - tex->ctr.x;\n  pnt.y=hit->y - tex->ctr.y;\n  pnt.z=hit->z - tex->ctr.z;\n\n  VDOT(u, tex->uaxs, pnt);\n/*  VDOT(len, tex->uaxs, tex->uaxs);\n  u = u / sqrt(len); */\n\n  VDOT(v, tex->vaxs, pnt); \n/*  VDOT(len, tex->vaxs, tex->vaxs);\n  v = v / sqrt(len); */\n    \n\n  u = u * tex->scale.x;\n  u = u + tex->rot.x;\n  u = fmod(u, 1.0);\n  if (u < 0.0) u += 1.0;\n\n  v = v * tex->scale.y;\n  v = v + tex->rot.y;\n  v = fmod(v, 1.0);\n  if (v < 0.0) v += 1.0;\n\n  return ImageMap((rawimage *)tex->img, u, v);\n}\n\ncolor grit_texture(vector * hit, texture * tex, ray * ry) {\n  int rnum;\n  flt fnum;\n  color col;\n\n  rnum=rand() % 4096;\n  fnum=(rnum / 4096.0 * 0.2) + 0.8;\n\n  col.r=tex->col.r * fnum;\n  col.g=tex->col.g * fnum;\n  col.b=tex->col.b * fnum;\n\n  return col;\n}\n\ncolor checker_texture(vector * hit, texture * tex, ray * ry) {\n  long x,y,z;\n  flt xh,yh,zh;\n  color col;\n\n  xh=hit->x - tex->ctr.x; \n  x=(long) ((fabs(xh) * 3) + 0.5);\n  x=x % 2;\n  yh=hit->y - tex->ctr.y;\n  y=(long) ((fabs(yh) * 3) + 0.5);\n  y=y % 2;\n  zh=hit->z - tex->ctr.z;\n  z=(long) ((fabs(zh) * 3) + 0.5);\n  z=z % 2;\n\n  if (((x + y + z) % 2)==1) {\n    col.r=1.0;\n    col.g=0.2;\n    col.b=0.0;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.2;\n    col.b=1.0;\n  }\n\n  return col;\n}\n\ncolor cyl_checker_texture(vector * hit, texture * tex, ray * ry) {\n  long x,y;\n  vector rh;\n  flt u,v;\n  color col;\n \n  rh.x=hit->x - tex->ctr.x;\n  rh.y=hit->y - tex->ctr.y;\n  rh.z=hit->z - tex->ctr.z;\n\n  xyztocyl(rh, 1.0, &u, &v); \n\n  x=(long) (fabs(u) * 18.0);\n  x=x % 2;\n  y=(long) (fabs(v) * 10.0);\n  y=y % 2;\n \n  if (((x + y) % 2)==1) {\n    col.r=1.0;\n    col.g=0.2;\n    col.b=0.0;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.2;\n    col.b=1.0;\n  }\n \n  return col;\n}\n\n\ncolor wood_texture(vector * hit, texture * tex, ray * ry) {\n  flt radius, angle;\n  int grain;\n  color col;\n  flt x,y,z;\n\n  x=(hit->x - tex->ctr.x) * 1000;\n  y=(hit->y - tex->ctr.y) * 1000;\n  z=(hit->z - tex->ctr.z) * 1000;\n\n  radius=sqrt(x*x + z*z);\n  if (z == 0.0) \n    angle=3.1415926/2.0;\n  else \n    angle=atan(x / z);\n\n  radius=radius + 3.0 * sin(20 * angle + y / 150.0);\n  grain=((int) (radius + 0.5)) % 60;\n  if (grain < 40) {\n    col.r=0.8;\n    col.g=1.0;\n    col.b=0.2;\n  }\n  else {\n    col.r=0.0;\n    col.g=0.0;\n    col.b=0.0;\n  }     \n\n  return col;\n} \n\n\n\n#define NMAX 28\nshort int NoiseMatrix[NMAX][NMAX][NMAX];\n\nvoid InitNoise(void) {\n  byte x,y,z,i,j,k;\n\n  for (x=0; x<NMAX; x++) {\n    for (y=0; y<NMAX; y++) {\n      for (z=0; z<NMAX; z++) {\n        NoiseMatrix[x][y][z]=rand() % 12000;\n\n        if (x==NMAX-1) i=0; \n        else i=x;\n\n        if (y==NMAX-1) j=0;\n        else j=y;\n\n        if (z==NMAX-1) k=0;\n        else k=z;\n\n        NoiseMatrix[x][y][z]=NoiseMatrix[i][j][k];\n      }\n    }\n  }\n}\n\nint Noise(flt x, flt y, flt z) {\n  byte ix, iy, iz;\n  flt ox, oy, oz;\n  int p000, p001, p010, p011;\n  int p100, p101, p110, p111;\n  int p00, p01, p10, p11;\n  int p0, p1;\n  int d00, d01, d10, d11;\n  int d0, d1, d;\n\n  x=fabs(x);\n  y=fabs(y);\n  z=fabs(z);\n\n  ix=((int) x) % (NMAX-1);\n  iy=((int) y) % (NMAX-1);\n  iz=((int) z) % (NMAX-1);\n\n  ox=(x - ((int) x));\n  oy=(y - ((int) y));\n  oz=(z - ((int) z));\n\n  p000=NoiseMatrix[ix][iy][iz];\n  p001=NoiseMatrix[ix][iy][iz+1];\n  p010=NoiseMatrix[ix][iy+1][iz];\n  p011=NoiseMatrix[ix][iy+1][iz+1];\n  p100=NoiseMatrix[ix+1][iy][iz];\n  p101=NoiseMatrix[ix+1][iy][iz+1];\n  p110=NoiseMatrix[ix+1][iy+1][iz];\n  p111=NoiseMatrix[ix+1][iy+1][iz+1];\n\n  d00=p100-p000;\n  d01=p101-p001;\n  d10=p110-p010;\n  d11=p111-p011;\n\n  p00=(int) ((int) d00*ox) + p000;\n  p01=(int) ((int) d01*ox) + p001;\n  p10=(int) ((int) d10*ox) + p010;\n  p11=(int) ((int) d11*ox) + p011;\n  d0=p10-p00;\n  d1=p11-p01;\n  p0=(int) ((int) d0*oy) + p00;\n  p1=(int) ((int) d1*oy) + p01;\n  d=p1-p0;\n\n  return (int) ((int) d*oz) + p0;\n}\n\ncolor marble_texture(vector * hit, texture * tex, ray * ry) {\n  flt i,d;\n  flt x,y,z;\n  color col;\n \n  x=hit->x;\n  y=hit->y; \n  z=hit->z;\n\n  x=x * 1.0;\n\n  d=x + 0.0006 * Noise(x, (y * 1.0), (z * 1.0));\n  d=d*(((int) d) % 25);\n  i=0.0 + 0.10 * fabs(d - 10.0 - 20.0 * ((int) d * 0.05));\n  if (i > 1.0) i=1.0;\n  if (i < 0.0) i=0.0;  \n\n/*\n  col.r=i * tex->col.r;\n  col.g=i * tex->col.g;\n  col.b=i * tex->col.b;\n*/\n\n  col.r = (1.0 + sin(i * 6.28)) / 2.0;\n  col.g = (1.0 + sin(i * 16.28)) / 2.0;\n  col.b = (1.0 + cos(i * 30.28)) / 2.0;\n\n  return col;      \n}\n\n\ncolor gnoise_texture(vector * hit, texture * tex, ray * ry) {\n  color col;\n  flt f;\n\n  f=Noise((hit->x - tex->ctr.x), \n          (hit->y - tex->ctr.y), \n\t  (hit->z - tex->ctr.z));\n\n  if (f < 0.01) f=0.01;\n  if (f > 1.0) f=1.0;\n\n  col.r=tex->col.r * f;\n  col.g=tex->col.g * f;\n  col.b=tex->col.b * f;\n\n  return col;\n}\n\nvoid InitTextures(void) {\n  InitNoise();\n  ResetImages();\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/texture.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * texture.h This file contains all of the includes and defines for the texture \n * mapping part of the shader.\n *\n *  $Id: texture.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nvoid InitTextures(void);\ncolor     standard_texture(vector *, texture *, ray *);\ncolor    image_cyl_texture(vector *, texture *, ray *);\ncolor image_sphere_texture(vector *, texture *, ray *);\ncolor  image_plane_texture(vector *, texture *, ray *);\ncolor      checker_texture(vector *, texture *, ray *);\ncolor  cyl_checker_texture(vector *, texture *, ray *);\ncolor         grit_texture(vector *, texture *, ray *);\ncolor         wood_texture(vector *, texture *, ray *);\ncolor       marble_texture(vector *, texture *, ray *);\ncolor       gnoise_texture(vector *, texture *, ray *);\nint Noise(flt, flt, flt);\nvoid InitTextures(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/tgafile.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * tgafile.cpp - This file contains the code to write 24 bit targa files...\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"util.h\"\n#include \"ui.h\"\n#include \"imageio.h\"\n#include \"tgafile.h\"\n\nvoid createtgafile(char *name, unsigned short width, unsigned short height) {\n  int filesize;\n  FILE * ofp;\n\n  filesize = 3*width*height + 18 - 10;\n  \n  if (name==NULL) \n    exit(1);\n  else {\n    ofp=fopen(name, \"w+b\");\n    if (ofp == NULL) {\n      char msgtxt[2048];\n      sprintf(msgtxt, \"Cannot create %s for output!\", name);\n      rt_ui_message(MSG_ERR, msgtxt);\n      rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n      exit(1);\n    } \n\n    fputc(0, ofp); /* IdLength      */\n    fputc(0, ofp); /* ColorMapType  */\n    fputc(2, ofp); /* ImageTypeCode */\n    fputc(0, ofp); /* ColorMapOrigin, low byte */\n    fputc(0, ofp); /* ColorMapOrigin, high byte */\n    fputc(0, ofp); /* ColorMapLength, low byte */\n    fputc(0, ofp); /* ColorMapLength, high byte */\n    fputc(0, ofp); /* ColorMapEntrySize */\n    fputc(0, ofp); /* XOrigin, low byte */\n    fputc(0, ofp); /* XOrigin, high byte */\n    fputc(0, ofp); /* YOrigin, low byte */\n    fputc(0, ofp); /* YOrigin, high byte */\n    fputc((width & 0xff),         ofp); /* Width, low byte */\n    fputc(((width >> 8) & 0xff),  ofp); /* Width, high byte */\n    fputc((height & 0xff),        ofp); /* Height, low byte */\n    fputc(((height >> 8) & 0xff), ofp); /* Height, high byte */\n    fputc(24, ofp);   /* ImagePixelSize */\n    fputc(0x20, ofp); /* ImageDescriptorByte 0x20 == flip vertically */\n\n    fseek(ofp, filesize, 0);\n    fprintf(ofp, \"9876543210\"); \n\n    fclose(ofp);\n  } \n}    \n\nvoid * opentgafile(char * filename) {\n  FILE * ofp;\n\n  ofp=fopen(filename, \"r+b\");\n  if (ofp == NULL) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Cannot open %s for output!\", filename);\n    rt_ui_message(MSG_ERR, msgtxt);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n    exit(1);\n  } \n\n  return ofp;\n} \n\nvoid writetgaregion(void * voidofp, \n                    int iwidth, int iheight,\n                    int startx, int starty, \n                    int stopx, int stopy, char * buffer) {\n  int y, totalx, totaly;\n  char * bufpos;\n  long filepos;\n  size_t numbytes;\n  FILE * ofp = (FILE *) voidofp;\n \n  totalx = stopx - startx + 1;\n  totaly = stopy - starty + 1;\n\n  for (y=0; y<totaly; y++) {\n    bufpos=buffer + (totalx*3)*(totaly-y-1);\n    filepos=18 + iwidth*3*(iheight - starty - totaly + y + 1) + (startx - 1)*3;\n\n    if (filepos >= 18) {\n      fseek(ofp, filepos, 0); \n      numbytes = fwrite(bufpos, 3, totalx, ofp);\n\n      if (numbytes != totalx) {\n        char msgtxt[256];\n        sprintf(msgtxt, \"File write problem, %d bytes written.\", (int)numbytes);\n        rt_ui_message(MSG_ERR, msgtxt);\n      }\n    }\n    else {\n      rt_ui_message(MSG_ERR, \"writetgaregion: file ptr out of range!!!\\n\");\n      return;  /* don't try to continue */\n    }\n  }\n}\n\n\nint readtga(char * name, int * xres, int * yres, unsigned char **imgdata) {\n  int format, width, height, w1, w2, h1, h2, depth, flags;\n  int imgsize, i, tmp;\n  size_t bytesread;\n  FILE * ifp;\n\n  ifp=fopen(name, \"r\");  \n  if (ifp==NULL) {\n    return IMAGEBADFILE; /* couldn't open the file */\n  }\n\n  /* read the targa header */\n  getc(ifp); /* ID length */\n  getc(ifp); /* colormap type */\n  format = getc(ifp); /* image type */\n  getc(ifp); /* color map origin */\n  getc(ifp); /* color map origin */\n  getc(ifp); /* color map length */\n  getc(ifp); /* color map length */\n  getc(ifp); /* color map entry size */\n  getc(ifp); /* x origin */\n  getc(ifp); /* x origin */\n  getc(ifp); /* y origin */\n  getc(ifp); /* y origin */\n  w1 = getc(ifp); /* width (low) */\n  w2 = getc(ifp); /* width (hi) */\n  h1 = getc(ifp); /* height (low) */\n  h2 = getc(ifp); /* height (hi) */\n  depth = getc(ifp); /* image pixel size */\n  flags = getc(ifp); /* image descriptor byte */\n\n  if ((format != 2) || (depth != 24)) {\n    fclose(ifp);\n    return IMAGEUNSUP; /* unsupported targa format */\n  }\n    \n\n  width = ((w2 << 8) | w1);\n  height = ((h2 << 8) | h1);\n\n  imgsize = 3 * width * height;\n  *imgdata = (unsigned char *)rt_getmem(imgsize);\n  bytesread = fread(*imgdata, 1, imgsize, ifp);\n  fclose(ifp);\n\n  /* flip image vertically */\n  if (flags == 0x20) {\n    int rowsize = 3 * width;\n    unsigned char * copytmp;\n\n    copytmp = (unsigned char *)malloc(rowsize);\n\n    for (i=0; i<height / 2; i++) {\n      memcpy(copytmp, &((*imgdata)[rowsize*i]), rowsize);\n      memcpy(&(*imgdata)[rowsize*i], &(*imgdata)[rowsize*(height - 1 - i)], rowsize);\n      memcpy(&(*imgdata)[rowsize*(height - 1 - i)], copytmp, rowsize);\n    }\n\n    free(copytmp);       \n  }\n\n\n  /* convert from BGR order to RGB order */\n  for (i=0; i<imgsize; i+=3) {\n    tmp = (*imgdata)[i]; /* Blue */\n    (*imgdata)[i] = (*imgdata)[i+2]; /* Red */\n    (*imgdata)[i+2] = tmp; /* Blue */\n  }\n\n  *xres = width;\n  *yres = height;\n\n  if (bytesread != imgsize) \n    return IMAGEREADERR;\n\n  return IMAGENOERR;\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/tgafile.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * tgafile.h - this file contains defines and structures for tgafile.c\n *\n *  $Id: tgafile.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n/* declare other functions */\nvoid createtgafile(char *, unsigned short, unsigned short);\nvoid * opentgafile(char *);\nvoid writetgaregion(void *, int, int, int, int, int, int, char *);\n\nint readtga(char * name, int * xres, int * yres, unsigned char **imgdata);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * trace.h - This file contains the declarations and defines for the trace module\n *\n *   $Id: trace.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nextern char *global_buffer;\n\ntypedef struct {\n        int tid;\n        int nthr;\n        scenedef scene;\n        char * buffer;\n        int startx;\n        int stopx;\n        int starty;\n        int stopy;\n        } thr_parms;\n\ntypedef struct {\n        int startx;\n        int stopx;\n        int starty;\n        int stopy;\n        } patch;\n\ntypedef struct {\n\tvoid * tga;\n\tint iwidth;\n\tint iheight;\n\tint startx;\n\tint starty;\n\tint stopx;\n\tint stopy;\n\tchar * buffer;\n\t} thr_io_parms;\n\ncolor trace(ray *);\n\nvoid * thread_trace(thr_parms * parms);\n\nvoid thread_trace1(thr_parms *, patch *, int depth); \nvoid thread_trace2(thr_parms *, patch *); \n\nvoid * thread_io(void *);\n\nvoid trace_shm(scenedef, /*char *,*/ int, int, int, int);\n\nvoid trace_region(scenedef, void *, int, int, int, int);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace.serial.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                sample.d.x+=((std::rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((std::rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((std::rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n    return video->get_color(R, G, B);\n\n}\n\nstatic void parallel_thread (void)\n{\n    // thread-local storage\n    unsigned int serial = 1;\n    unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n    unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n    memset(local_mbox,0,mboxsize);\n\n    for (int y = starty; y < stopy; y++) { {\n        drawing_area drawing(startx, totaly-y, stopx-startx, 1);\n        for (int x = startx; x < stopx; x++) {\n            color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n            drawing.put_pixel(c);\n        } }\n        if(!video->next_frame()) return;\n    }\n}\n\nvoid * thread_trace(thr_parms * parms)\n{\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres-1;\n\n    parallel_thread ();\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace.simple.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary;\n    color col;\n    int R,G,B;\n    intersectstruct local_intersections;\n    /* end private */\n\n    primary = camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;\n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col = trace(&primary);\n    serial = primary.serial;\n\n    /* Handle overexposure and underexposure here... */\n    R = (int)(col.r * 255);\n    if ( R > 255 ) R = 255;\n    else if ( R < 0 ) R = 0;\n\n    G = (int)(col.g * 255);\n    if ( G > 255 ) G = 255;\n    else if ( G < 0 ) G = 0;\n\n    B = (int)(col.b * 255);\n    if ( B > 255 ) B = 255;\n    else if ( B < 0 ) B = 0;\n\n    return video->get_color(R, G, B);\n}\n\n#if DO_ITT_NOTIFY\n#include\"ittnotify.h\"\n#endif\n\n#define RUNTIME_SERIAL 1\n#define RUNTIME_OPENMP 2\n#define RUNTIME_CILK   3\n#define RUNTIME_TBB    4\n\n#ifndef RUNTIME\n#define RUNTIME RUNTIME_TBB\n#endif\n\n#if RUNTIME == RUNTIME_OPENMP\n#include <omp.h>\n#elif RUNTIME == RUNTIME_TBB\n#include <tbb/tbb.h>\n#endif\n\nstatic void parallel_thread(void)\n{\n    unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n#if RUNTIME == RUNTIME_SERIAL\n    for ( int y = starty; y < stopy; y++ )\n#elif RUNTIME == RUNTIME_OPENMP\n#pragma omp parallel for\n    for ( int y = starty; y < stopy; y++ )\n#elif RUNTIME == RUNTIME_CILK\n    _Cilk_for(int y = starty; y < stopy; y++)\n#elif RUNTIME == RUNTIME_TBB\n    tbb::parallel_for(starty, stopy, [mboxsize] (int y)\n#endif\n    {\n        unsigned int serial = 1;\n        unsigned int local_mbox[mboxsize];\n        memset(local_mbox, 0, mboxsize);\n        drawing_area drawing(startx, totaly - y, stopx - startx, 1);\n        for ( int x = startx; x < stopx; x++ ) {\n            color_t c = render_one_pixel(x, y, local_mbox, serial, startx, stopx, starty, stopy);\n            drawing.put_pixel(c);\n        }\n        video->next_frame();\n    }\n#if RUNTIME == RUNTIME_TBB\n    );\n#endif\n}\n\nvoid * thread_trace(thr_parms * parms)\n{\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres - 1;\n\n#if DO_ITT_NOTIFY\n    __itt_resume();\n#endif\n    parallel_thread();\n#if DO_ITT_NOTIFY\n    __itt_pause();\n#endif\n\n    return(NULL);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace.tbb.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\n#ifdef MARK_RENDERING_AREA\n\n// rgb colors list for coloring image by each thread\nstatic const float inner_alpha = 0.3;\nstatic const float border_alpha = 0.5;\n#define NUM_COLORS 24\nstatic int colors[NUM_COLORS][3] = {\n    {255,110,0},    {220,254,0},    {102,254,0},    {0,21,254},     {97,0,254},     {254,30,0},\n    {20,41,8},      {144,238,38},   {184,214,139},  {28,95,20},     {139,173,148},  {188,228,183},\n    {145,47,56},    {204,147,193},  {45,202,143},   {204,171,143},  {143,160,204},  {220,173,3},\n    {1,152,231},    {79,235,237},   {52,193,72},    {67,136,151},   {78,87,179},    {143,255,9},\n};\n\n#include \"tbb/atomic.h\"\n#include \"tbb/enumerable_thread_specific.h\"\n// storage and counter for thread numbers in order of first task run\ntypedef tbb::enumerable_thread_specific< int > thread_id_t;\nthread_id_t thread_ids (-1);\ntbb::atomic<int> thread_number;\n\n#endif\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/blocked_range2d.h\"\n\nstatic tbb::spin_mutex MyMutex, MyMutex2;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy\n#ifdef MARK_RENDERING_AREA\n                                 , int *blend, float alpha\n#endif\n)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                tbb::spin_mutex::scoped_lock lock (MyMutex);\n                sample.d.x+=((rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n#ifdef MARK_RENDERING_AREA\n    R = int((1.0 - alpha) * R + alpha * blend[0]);\n    G = int((1.0 - alpha) * G + alpha * blend[1]);\n    B = int((1.0 - alpha) * B + alpha * blend[2]);\n#endif\n    \n    return video->get_color(R, G, B);\n}\n\nclass parallel_task {\npublic:\n    void operator() (const tbb::blocked_range2d<int> &r) const\n    {\n       // task-local storage\n        unsigned int serial = 1;\n        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n        memset(local_mbox,0,mboxsize);\n#ifdef MARK_RENDERING_AREA\n        // compute thread number while first task run\n        thread_id_t::reference thread_id = thread_ids.local();\n        if (thread_id == -1) thread_id = thread_number++;\n        // choose thread color\n        int pos = thread_id % NUM_COLORS;\n        if(video->running) {\n            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());\n            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {\n                drawing.set_pos(0, drawing.size_y-i);\n                for (int x = r.cols().begin(); x != r.cols().end(); x++) {\n                    int d = (y % 3 == 0) ? 2 : 1;\n                    drawing.put_pixel(video->get_color(colors[pos][0]/d, colors[pos][1]/d, colors[pos][2]/d));\n                }\n            }\n        }\n#endif\n        if(video->next_frame()) {\n            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());\n            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {\n                drawing.set_pos(0, drawing.size_y-i);\n                for (int x = r.cols().begin(); x != r.cols().end(); x++) {\n#ifdef MARK_RENDERING_AREA\n                    float alpha = y==r.rows().begin()||y==r.rows().end()-1||x==r.cols().begin()||x==r.cols().end()-1\n                                ? border_alpha : inner_alpha;\n                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy, colors[pos], alpha);\n#else\n                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n#endif\n                    drawing.put_pixel(c);\n                }\n            }\n        }\n    }\n\n    parallel_task () {}\n};\n\nvoid * thread_trace(thr_parms * parms)\n{\n#if !WIN8UI_EXAMPLE\n    int n, nthreads = tbb::task_scheduler_init::automatic;\n    char *nthreads_str = getenv (\"TBB_NUM_THREADS\");\n    if (nthreads_str && (sscanf (nthreads_str, \"%d\", &n) > 0) && (n > 0)) nthreads = n;\n    tbb::task_scheduler_init init (nthreads);\n#endif\n\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres;\n#ifdef MARK_RENDERING_AREA\n    thread_ids.clear();\n#endif\n\n    int grain_size = 8;\n//WIN8UI does not support getenv() function so using auto_partitioner unconditionally\n#if !WIN8UI_EXAMPLE\n    int g;\n    char *grain_str = getenv (\"TBB_GRAINSIZE\");\n    if (grain_str && (sscanf (grain_str, \"%d\", &g) > 0) && (g > 0)) grain_size = g;\n    char *sched_str = getenv (\"TBB_PARTITIONER\");\n    static tbb::affinity_partitioner g_ap; // reused across calls to thread_trace\n    if ( sched_str && !strncmp(sched_str, \"aff\", 3) )\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), g_ap);\n    else if ( sched_str && !strncmp(sched_str, \"simp\", 4) )\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::simple_partitioner());\n    else\n#endif\n        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::auto_partitioner());\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace.tbb1d.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\n// shared but read-only so could be private too\nstatic thr_parms *all_parms;\nstatic scenedef scene;\nstatic int startx;\nstatic int stopx;\nstatic int starty;\nstatic int stopy;\nstatic flt jitterscale;\nstatic int totaly;\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/blocked_range.h\"\n\nstatic tbb::spin_mutex MyMutex, MyMutex2;\n\nstatic color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,\n                                 int startx, int stopx, int starty, int stopy)\n{\n    /* private vars moved inside loop */\n    ray primary, sample;\n    color col, avcol;\n    int R,G,B;\n    intersectstruct local_intersections;    \n    int alias;\n    /* end private */\n\n    primary=camray(&scene, x, y);\n    primary.intstruct = &local_intersections;\n    primary.flags = RT_RAY_REGULAR;\n\n    serial++;\n    primary.serial = serial;  \n    primary.mbox = local_mbox;\n    primary.maxdist = FHUGE;\n    primary.scene = &scene;\n    col=trace(&primary);  \n\n    serial = primary.serial;\n\n    /* perform antialiasing if enabled.. */\n    if (scene.antialiasing > 0) {\n        for (alias=0; alias < scene.antialiasing; alias++) {\n\n            serial++; /* increment serial number */\n            sample=primary;  /* copy the regular primary ray to start with */\n            sample.serial = serial; \n\n            {\n                tbb::spin_mutex::scoped_lock lock (MyMutex);\n                sample.d.x+=((rand() % 100) - 50) / jitterscale;\n                sample.d.y+=((rand() % 100) - 50) / jitterscale;\n                sample.d.z+=((rand() % 100) - 50) / jitterscale;\n            }\n\n            avcol=trace(&sample);  \n\n            serial = sample.serial; /* update our overall serial # */\n\n            col.r += avcol.r;\n            col.g += avcol.g;\n            col.b += avcol.b;\n        }\n\n        col.r /= (scene.antialiasing + 1.0);\n        col.g /= (scene.antialiasing + 1.0);\n        col.b /= (scene.antialiasing + 1.0);\n    }\n\n    /* Handle overexposure and underexposure here... */\n    R=(int) (col.r*255);\n    if (R > 255) R = 255;\n    else if (R < 0) R = 0;\n\n    G=(int) (col.g*255);\n    if (G > 255) G = 255;\n    else if (G < 0) G = 0;\n\n    B=(int) (col.b*255);\n    if (B > 255) B = 255;\n    else if (B < 0) B = 0;\n\n    return video->get_color(R, G, B);\n\n}\n\nclass parallel_task {\npublic:\n    void operator() (const tbb::blocked_range<int> &r) const\n    {\n        // task-local storage\n        unsigned int serial = 1;\n        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);\n        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);\n        memset(local_mbox,0,mboxsize);\n\n        for (int y = r.begin(); y != r.end(); ++y) { {\n            drawing_area drawing(startx, totaly-y, stopx-startx, 1);\n            for (int x = startx; x < stopx; x++) {\n                color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);\n                drawing.put_pixel(c);\n            } }\n            if(!video->next_frame()) return;\n        }\n    }\n\n    parallel_task () {}\n};\n\nvoid * thread_trace(thr_parms * parms)\n{\n    int n, nthreads = tbb::task_scheduler_init::automatic;\n    char *nthreads_str = getenv (\"TBB_NUM_THREADS\");\n    if (nthreads_str && (sscanf (nthreads_str, \"%d\", &n) > 0) && (n > 0)) nthreads = n;\n    tbb::task_scheduler_init init (nthreads);\n\n    // shared but read-only so could be private too\n    all_parms = parms;\n    scene = parms->scene;\n    startx = parms->startx;\n    stopx = parms->stopx;\n    starty = parms->starty;\n    stopy = parms->stopy;\n    jitterscale = 40.0*(scene.hres + scene.vres);\n    totaly = parms->scene.vres-1;\n\n    int g, grain_size = 1;\n    char *grain_str = getenv (\"TBB_GRAINSIZE\");\n    if (grain_str && (sscanf (grain_str, \"%d\", &g) > 0) && (g > 0)) grain_size = g;\n    char *sched_str = getenv (\"TBB_PARTITIONER\");\n    static tbb::affinity_partitioner g_ap;\n    if ( sched_str && !strncmp(sched_str, \"aff\", 3) )\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), g_ap );\n    else if ( sched_str && !strncmp(sched_str, \"simp\", 4) )\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::simple_partitioner() );\n    else\n        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::auto_partitioner() );\n\n    return(NULL);  \n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/trace_rest.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * trace.cpp - This file contains the functions for firing primary rays\n *           and handling subsequent calculations\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"tgafile.h\"\n#include \"trace.h\"\n#include \"light.h\"\n#include \"shade.h\"\n#include \"camera.h\"\n#include \"util.h\"\n#include \"intersect.h\"\n#include \"global.h\"\n#include \"ui.h\"\n#include \"tachyon_video.h\"\n\ncolor trace(ray * primary) {\n  if (primary->depth > 0) {\n    VNorm(&primary->d);\n    reset_intersection(primary->intstruct);\n    intersect_objects(primary);\n    return shader(primary);\n  }\n\n  /* if ray is truncated, return the background as its color */\n  return primary->scene->background;\n}\n\nvoid * thread_io(void * parms) {\n  thr_io_parms p;\n\n  p= *((thr_io_parms *) parms);\n  writetgaregion(p.tga, p.iwidth, p.iheight, p.startx, p.starty, \n\t\tp.stopx, p.stopy, p.buffer);\n  free(p.buffer); /* free the buffer once we are done with it.. */\n  free(parms);\n\n  return(NULL);\n}\n\nvoid trace_shm(scenedef scene, /*char * buffer,  */ int startx, int stopx, int starty, int stopy) {\n\n  thr_parms * parms;\n\n  parms = (thr_parms *) rt_getmem(sizeof(thr_parms));  \n\n  parms->tid=0;\n  parms->nthr=1;\n  parms->scene=scene;\n  parms->startx=startx;\n  parms->stopx=stopx;\n  parms->starty=starty;\n  parms->stopy=stopy;\n\n  thread_trace(parms);\n\n  rt_freemem(parms);\n}\n\nvoid trace_region(scenedef scene, void * tga, int startx, int starty, int stopx, int stopy) {\n\n  if (scene.verbosemode) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Node %3d tracing region  %4d, %4d  --->  %4d, %4d \\n\", 0, startx,starty,stopx,stopy);\n    rt_ui_message(MSG_0, msgtxt);\n  }\n\n  trace_shm(scene, /*buffer,*/ startx, stopx, starty, stopy);\n/* not used now\n  writetgaregion(tga, scene.hres, scene.vres, \n                 startx, starty, stopx, stopy, global_buffer);\n\n  if (scene.rawimage != NULL) {\n    int x, y;\n    int totalx = stopx - startx + 1;\n    for (y=starty; y<=stopy; y++) {\n      for (x=0; x<scene.hres; x++) {\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3] = global_buffer[(y-starty)*totalx*3 + x*3 + 2];\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +1] = global_buffer[(y-starty)*totalx*3 + x*3 + 1];\n        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +2] = global_buffer[(y-starty)*totalx*3 + x*3];\n      }\n    }\n  }\n*/\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/triangle.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * triangle.cpp - This file contains the functions for dealing with triangles.\n */\n \n#include \"machine.h\"\n#include \"types.h\"\n#include \"vector.h\"\n#include \"macros.h\"\n#include \"intersect.h\"\n#include \"util.h\"\n\n#define TRIANGLE_PRIVATE\n#include \"triangle.h\"\n\nstatic object_methods tri_methods = {\n  (void (*)(void *, void *))(tri_intersect),\n  (void (*)(void *, void *, void *, void *))(tri_normal),\n  tri_bbox, \n  free \n};\n\nstatic object_methods stri_methods = {\n  (void (*)(void *, void *))(tri_intersect),\n  (void (*)(void *, void *, void *, void *))(stri_normal),\n  tri_bbox, \n  free \n};\n\nobject * newtri(void * tex, vector v0, vector v1, vector v2) {\n  tri * t;\n  vector edge1, edge2, edge3;\n\n  VSub(&v1, &v0, &edge1);\n  VSub(&v2, &v0, &edge2);\n  VSub(&v2, &v1, &edge3);\n\n  /* check to see if this will be a degenerate triangle before creation */\n  if ((VLength(&edge1) >= EPSILON) && \n      (VLength(&edge2) >= EPSILON) && \n      (VLength(&edge3) >= EPSILON)) {\n\n    t=(tri *) rt_getmem(sizeof(tri));\n\n    t->nextobj = NULL;\n    t->methods = &tri_methods;\n\n    t->tex = (texture *)tex;\n    t->v0 = v0;\n    t->edge1 = edge1;\n    t->edge2 = edge2;\n \n    return (object *) t;\n  }\n  \n  return NULL; /* was a degenerate triangle */\n}\n\n\nobject * newstri(void * tex, vector v0, vector v1, vector v2,\n                           vector n0, vector n1, vector n2) {\n  stri * t;\n  vector edge1, edge2, edge3;\n\n  VSub(&v1, &v0, &edge1);\n  VSub(&v2, &v0, &edge2);\n  VSub(&v2, &v1, &edge3);\n\n  /* check to see if this will be a degenerate triangle before creation */\n  if ((VLength(&edge1) >= EPSILON) && \n      (VLength(&edge2) >= EPSILON) &&\n      (VLength(&edge3) >= EPSILON)) {\n\n    t=(stri *) rt_getmem(sizeof(stri));\n\n    t->nextobj = NULL;\n    t->methods = &stri_methods;\n \n    t->tex = (texture *)tex;\n    t->v0 = v0;\n    t->edge1 = edge1;\n    t->edge2 = edge2;\n    t->n0 = n0;\n    t->n1 = n1;\n    t->n2 = n2;\n\n    return (object *) t;\n  }\n\n  return NULL; /* was a degenerate triangle */\n}\n\n#define CROSS(dest,v1,v2) \\\n          dest.x=v1.y*v2.z-v1.z*v2.y; \\\n          dest.y=v1.z*v2.x-v1.x*v2.z; \\\n          dest.z=v1.x*v2.y-v1.y*v2.x;\n\n#define DOT(v1,v2) (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)\n\n#define SUB(dest,v1,v2) \\\n          dest.x=v1.x-v2.x; \\\n          dest.y=v1.y-v2.y; \\\n          dest.z=v1.z-v2.z;\n\nstatic int tri_bbox(void * obj, vector * min, vector * max) {\n  tri * t = (tri *) obj;\n  vector v1, v2;\n\n  VAdd(&t->v0, &t->edge1, &v1); \n  VAdd(&t->v0, &t->edge2, &v2); \n\n  min->x = MYMIN( t->v0.x , MYMIN( v1.x , v2.x ));\n  min->y = MYMIN( t->v0.y , MYMIN( v1.y , v2.y ));\n  min->z = MYMIN( t->v0.z , MYMIN( v1.z , v2.z ));\n\n  max->x = MYMAX( t->v0.x , MYMAX( v1.x , v2.x ));\n  max->y = MYMAX( t->v0.y , MYMAX( v1.y , v2.y ));\n  max->z = MYMAX( t->v0.z , MYMAX( v1.z , v2.z ));\n\n  return 1;\n}\n\nstatic void tri_intersect(tri * trn, ray * ry) {\n  vector tvec, pvec, qvec;\n  flt det, inv_det, t, u, v;\n\n  /* begin calculating determinant - also used to calculate U parameter */\n  CROSS(pvec, ry->d, trn->edge2);\n\n  /* if determinant is near zero, ray lies in plane of triangle */\n  det = DOT(trn->edge1, pvec);\n\n   if (det > -EPSILON && det < EPSILON)\n     return;\n\n   inv_det = 1.0 / det;\n\n   /* calculate distance from vert0 to ray origin */\n   SUB(tvec, ry->o, trn->v0);\n\n   /* calculate U parameter and test bounds */\n   u = DOT(tvec, pvec) * inv_det;\n   if (u < 0.0 || u > 1.0)\n     return;\n\n   /* prepare to test V parameter */\n   CROSS(qvec, tvec, trn->edge1);\n\n   /* calculate V parameter and test bounds */\n   v = DOT(ry->d, qvec) * inv_det;\n   if (v < 0.0 || u + v > 1.0)\n     return;\n\n   /* calculate t, ray intersects triangle */\n   t = DOT(trn->edge2, qvec) * inv_det;\n\n  add_intersection(t,(object *) trn, ry);\n}\n\n\nstatic void tri_normal(tri * trn, vector  * pnt, ray * incident, vector * N) {\n\n  CROSS((*N), trn->edge1, trn->edge2);\n\n  VNorm(N);\n\n  if (VDot(N, &(incident->d)) > 0.0)  {\n    N->x=-N->x;\n    N->y=-N->y;\n    N->z=-N->z;\n  }\n}\n\nstatic void stri_normal(stri * trn, vector  * pnt, ray * incident, vector * N) {\n  flt U, V, W, lensqr;\n  vector P, tmp, norm;\n  \n  CROSS(norm, trn->edge1, trn->edge2);\n  lensqr = DOT(norm, norm); \n\n  VSUB((*pnt), trn->v0, P);\n\n  CROSS(tmp, P, trn->edge2);\n  U = DOT(tmp, norm) / lensqr;   \n\n  CROSS(tmp, trn->edge1, P);\n  V = DOT(tmp, norm) / lensqr;   \n\n  W = 1.0 - (U + V);\n\n  N->x = W*trn->n0.x + U*trn->n1.x + V*trn->n2.x;\n  N->y = W*trn->n0.y + U*trn->n1.y + V*trn->n2.y;\n  N->z = W*trn->n0.z + U*trn->n1.z + V*trn->n2.z;\n\n  VNorm(N);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/triangle.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * triangle.h - This file contains the defines for triangles etc.\n *\n *  $Id: triangle.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\nobject * newtri(void *, vector, vector, vector);\nobject * newstri(void *, vector, vector, vector, vector, vector, vector);\n\n#ifdef TRIANGLE_PRIVATE\n\n#define TRIXMAJOR 0\n#define TRIYMAJOR 1\n#define TRIZMAJOR 2\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector edge2;\n  vector edge1;\n  vector v0;\n} tri; \n\ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */\n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n  vector edge2;\n  vector edge1;\n  vector v0;\n  vector n0;\n  vector n1;\n  vector n2;\n} stri; \n\nstatic int tri_bbox(void * obj, vector * min, vector * max);\n\nstatic void tri_intersect(tri *, ray *);\n\nstatic void tri_normal(tri *, vector *, ray *, vector *);\nstatic void stri_normal(stri *, vector *, ray *, vector *);\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/types.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n#if __MINGW32__\n#include <malloc.h>\n#elif _WIN32\n#include <malloc.h>\n#define alloca _alloca\n#elif __FreeBSD__||__NetBSD__\n#include <stdlib.h>\n#else\n#include <alloca.h>\n#endif\n\n/* \n * types.h - This file contains all of the type definitions for the raytracer\n *\n *  $Id: types.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n#define MAXOCTNODES 25       /* subdivide octants /w > # of children */\n#define SPEPSILON 0.000001   /* amount to crawl down a ray           */\n#define EPSILON   0.000001   /* amount to crawl down a ray           */\n#define TWOPI 6.2831853      /* guess                                */\n#define FHUGE 1e18           /* biggest fp number we can represent   */\n\n/* Maximum internal table sizes */\n/* Use prime numbers for best memory system performance */\n#define INTTBSIZE 1024       /* maximum intersections we can hold    */ \n#define MAXLIGHTS 39         /* maximum number of lights in a scene  */\n#define MAXIMGS   39         /* maxiumum number of distinct images   */\n#define RPCQSIZE  113\t     /* number of RPC messages to queue      */\n\n/* Parameter values for rt_boundmode() */\n#define RT_BOUNDING_DISABLED 0  /* spatial subdivision/bounding disabled */\n#define RT_BOUNDING_ENABLED  1  /* spatial subdivision/bounding enabled  */\n\n/* Parameter values for rt_displaymode() */\n#define RT_DISPLAY_DISABLED  0  /* video output enabled  */\n#define RT_DISPLAY_ENABLED   1  /* video output disabled */\n\n/* Ray flags */\n#define RT_RAY_REGULAR   1\n#define RT_RAY_SHADOW    2\n#define RT_RAY_BOUNDED   4\n#define RT_RAY_FINISHED  8\n\n#ifdef USESINGLEFLT\ntypedef float flt;   /* generic floating point number, using float */\n#else\ntypedef double flt;  /* generic floating point number, using double */\n#endif\n\ntypedef unsigned char byte; /* 1 byte */\ntypedef signed int word;    /* 32 bit integer */\n\ntypedef struct {\n   flt x;        /* X coordinate value */\n   flt y;        /* Y coordinate value */\n   flt z;        /* Z coordinate value */\n} vector;\n\ntypedef struct {\n   flt r;        /* Red component   */\n   flt g;        /* Green component */\n   flt b;        /* Blue component  */\n} color;\n\ntypedef struct {\n   byte r;       /* Red component   */\n   byte g;       /* Green component */\n   byte b;       /* Blue component  */\n} bytecolor;\n\ntypedef struct {         /* Raw 24 bit image structure, for tga, ppm etc */\n  int loaded;            /* image memory residence flag    */\n  int xres;              /* image X axis size              */\n  int yres;              /* image Y axis size              */\n  int bpp;               /* image bits per pixel           */\n  char name[96];         /* image filename (with path)     */\n  unsigned char * data;  /* pointer to raw byte image data */\n} rawimage;\n\ntypedef struct {         /* Scalar Volume Data */\n  int loaded;            /* Volume data memory residence flag */\n  int xres;\t\t /* volume X axis size                */\n  int yres;\t\t /* volume Y axis size                */\n  int zres;\t\t /* volume Z axis size                */\n  flt opacity;\t\t /* opacity per unit length           */\n  char name[96];         /* Volume data filename              */\n  unsigned char * data;  /* pointer to raw byte volume data   */\n} scalarvol;\n \ntypedef struct {\n  color (* texfunc)(void *, void *, void *);\n  int shadowcast;  /* does the object cast a shadow */\n  int islight;\t   /* light flag... */\n  color col;       /* base object color */\n  flt ambient;     /* ambient lighting */\n  flt diffuse; \t   /* diffuse reflection */\n  flt phong;       /* phong specular highlights */\n  flt phongexp;    /* phong exponent/shininess factor */\n  int phongtype;   /* phong type: 0 == plastic, nonzero == metal */\n  flt specular;    /* specular reflection */\n  flt opacity;     /* how opaque the object is */ \n  vector ctr;      /* origin of texture */\n  vector rot;      /* rotation of texture about origin */\n  vector scale;    /* scale of texture in x,y,z */\n  vector uaxs;\t   /* planar map U axis */\n  vector vaxs;\t   /* planar map V axis */\n  void * img;      /* pointer to image for image mapping */\n  void * obj;      /* object ptr, hack for volume shaders for now */\n} texture;\n\ntypedef struct {\n  void (* intersect)(void *, void *);              /* intersection func ptr  */\n  void (* normal)(void *, void *, void *, void *); /* normal function ptr    */\n  int (* bbox)(void *, vector *, vector *);        /* return the object bbox */\n  void (* free)(void *);                           /* free the object        */\n} object_methods;\n \ntypedef struct {\n  unsigned int id;                      /* Unique Object serial number    */\n  void * nextobj;                       /* pointer to next object in list */ \n  object_methods * methods;             /* this object's methods          */\n  texture * tex;                        /* object texture                 */\n} object; \n\ntypedef struct {\n  object * obj;  /* to object we hit                        */ \n  flt t;         /* distance along the ray to the hit point */\n} intersection;\n\ntypedef struct {\n  int num;                      /* number of intersections    */\n  intersection closest;         /* closest intersection > 0.0 */\n  intersection list[INTTBSIZE]; /* list of all intersections  */ \n} intersectstruct;\n\ntypedef struct {\n  char outfilename[200];     /* name of the output image                */\n  unsigned char * rawimage;  /* pointer to a raw rgb image to be stored */\n  int hres;                  /* horizontal output image resolution      */\n  int vres;                  /* vertical output image resolution        */\n  flt aspectratio;           /* aspect ratio of output image            */\n  int raydepth;              /* maximum recursion depth                 */\n  int antialiasing;          /* number of antialiasing rays to fire     */\n  int verbosemode;           /* verbose reporting flag                  */\n  int boundmode;             /* automatic spatial subdivision flag      */\n  int boundthresh;           /* threshold number of subobjects          */\n  int displaymode;           /* run-time X11 display flag               */\n  vector camcent;            /* center of the camera in world coords    */\n  vector camviewvec;         /* view direction of the camera  (Z axis)  */\n  vector camrightvec;        /* right axis for the camera     (X axis)  */\n  vector camupvec;           /* up axis for the camera        (Y axis)  */\n  flt camzoom;               /* zoom factor for the camera              */\n  color background;          /* scene background color                  */\n} scenedef;\n\ntypedef struct {\n   intersectstruct * intstruct; /* ptr to thread's intersection data       */ \n   unsigned int depth;   /* levels left to recurse.. (maxdepth - curdepth) */\n   unsigned int flags;   /* ray flags, any special treatment needed etc    */\n   unsigned int serial;  /* serial number of the ray                       */\n   unsigned int * mbox;  /* mailbox array for optimizing intersections     */\n   vector o;             /* origin of the ray X,Y,Z                        */\n   vector d;             /* normalized direction of the ray                */\n   flt maxdist;          /* maximum distance to search for intersections   */\n   vector s;\t\t /* startpoint of the ray (may differ from origin  */\n   vector e;             /* endpoint of the ray if bounded                 */\n   scenedef * scene;     /* pointer to the scene, for global parms such as */\n                         /* background colors etc                          */\n} ray;\n\ntypedef struct {\n  int type;      /* RPC call type            */\n  int from;      /* Sending processor        */\n  int len;       /* length of parms in bytes */\n  void * parms;  /* Parameters to RPC        */\n} rpcmsg;\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ui.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * ui.cpp - Contains functions for dealing with user interfaces\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"util.h\"\n#include \"ui.h\"\n\nstatic void (* rt_static_ui_message) (int, const char *) = NULL;\nstatic void (* rt_static_ui_progress) (int) = NULL;\nstatic int (* rt_static_ui_checkaction) (void) = NULL;\n\nextern bool silent_mode;\n\nvoid set_rt_ui_message(void (* func) (int, const char *)) {\n  rt_static_ui_message = func;\n}\n\nvoid set_rt_ui_progress(void (* func) (int)) {\n  rt_static_ui_progress = func;\n}\n\nvoid rt_ui_message(int level, const char * msg) {\n  if (rt_static_ui_message == NULL) {\n    if ( !silent_mode ) {\n      fprintf(stderr, \"%s\\n\", msg);\n      fflush (stderr);\n    }\n  } else {\n    rt_static_ui_message(level, msg);\n  }\n}\n\nvoid rt_ui_progress(int percent) {\n  if (rt_static_ui_progress != NULL)\n    rt_static_ui_progress(percent);\n  else {\n    if ( !silent_mode ) {\n      fprintf(stderr, \"\\r %3d%% Complete            \\r\", percent);\n      fflush(stderr);\n    }\n  }\n}\n\nint rt_ui_checkaction(void) {\n  if (rt_static_ui_checkaction != NULL) \n    return rt_static_ui_checkaction();\n  else\n    return 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/ui.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * ui.h - defines for user interface functions\n *\n *  $Id: ui.h,v 1.2 2007-02-22 17:54:16 Exp $\n */\n\n/* Different types of message, for levels of verbosity etc */\n#define MSG_0      100\n#define MSG_1      101\n#define MSG_2      102\n#define MSG_3      103\n#define MSG_4      104\n#define MSG_5      105\n#define MSG_ERR    200\n#define MSG_ABORT  300\n\nvoid rt_ui_message(int, const char *);\nvoid rt_ui_progress(int);\nint  rt_ui_checkaction(void);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/util.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * util.cpp - Contains all of the timing functions for various platforms.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"util.h\"\n#include \"light.h\"\n#include \"global.h\"\n#include \"ui.h\"\n\nvoid rt_finalize(void);\n\n#if !defined( _WIN32 )\n#include <sys/time.h>\n#include <unistd.h>\n\nvoid rt_sleep(int msec) {\n    usleep(msec*1000);\n}\n\n#else //_WIN32\n\n#undef OLDUNIXTIME\n#undef STDTIME\n\nvoid rt_sleep(int msec) {\n#if !WIN8UI_EXAMPLE\n    Sleep(msec);\n#else\n    std::chrono::milliseconds sleep_time( msec );\n    std::this_thread::sleep_for( sleep_time );\n#endif\n}\n\ntimer gettimer(void) {\n    return GetTickCount ();\n}\n\nflt timertime(timer st, timer fn) {\n   double ttime, start, end;\n\n   start = ((double) st) / ((double) 1000.00);\n     end = ((double) fn) / ((double) 1000.00);\n   ttime = end - start;\n\n   return ttime;\n}\n#endif  /*  _WIN32  */\n\n/* if we're on a Unix with gettimeofday() we'll use newer timers */\n#if defined( STDTIME )\n  struct timezone tz;\n\ntimer gettimer(void) {\n  timer t;\n  gettimeofday(&t, &tz);\n  return t;\n} \n  \nflt timertime(timer st, timer fn) {\n   double ttime, start, end;\n\n   start = (st.tv_sec+1.0*st.tv_usec / 1000000.0);\n     end = (fn.tv_sec+1.0*fn.tv_usec / 1000000.0);\n   ttime = end - start;\n\n   return ttime;\n}  \n#endif  /*  STDTIME  */\n\n\n\n/* use the old fashioned Unix time functions */\n#if defined( OLDUNIXTIME )\ntimer gettimer(void) {\n  return time(NULL);\n}\n\nflt timertime(timer st, timer fn) {\n  return difftime(fn, st);;\n}\n#endif  /*  OLDUNIXTIME  */\n\n\n\n/* random other helper utility functions */\nint rt_meminuse(void) {\n  return rt_mem_in_use;\n}  \n\nvoid * rt_getmem(unsigned int bytes) {\n  void * mem;\n\n  mem=malloc( bytes );\n  if (mem!=NULL) { \n    rt_mem_in_use += bytes;\n  } \n  else {\n    rtbomb(\"No more memory!!!!\");\n  }\n  return mem;\n}\n\nunsigned int rt_freemem(void * addr) {\n  unsigned int bytes;\n\n  free(addr);\n\n  bytes=0;\n  rt_mem_in_use -= bytes; \n  return bytes;\n}\n\nvoid rtbomb(const char * msg) {\n    rt_ui_message(MSG_ERR, msg);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n\n  rt_finalize();\n  exit(1);\n}\n\nvoid rtmesg(const char * msg) {\n    rt_ui_message(MSG_0, msg);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/util.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * util.h - This file contains defines for the timer functions...\n *\n *  $Id: util.h,v 1.3 2007-02-22 17:54:17 Exp $\n */\n\n#include \"machine.h\"\n\n#if defined( _WIN32 )\n  #include <windows.h>\n  #if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)\n    #define WIN8UI_EXAMPLE 1\n    #include <thread>\n    typedef ULONGLONG timer;\n    #ifdef GetTickCount\n      #undef GetTickCount \n    #endif\n    #define GetTickCount GetTickCount64\n  #else\n    typedef DWORD timer;\n  #endif\n#else\n  #include <sys/time.h>\n  #include <unistd.h>\n  #if defined( STDTIME )\n    typedef timeval timer;\n  #elif defined ( OLDUNIXTIME )\n    typedef time_t timer;\n  #endif  /*  OLDUNIXTIME  */ /*  STDTIME  */\n #endif  /*  _WIN32  */\n\ntimer gettimer(void);\nflt timertime(timer st, timer fn);\nvoid rt_sleep(int);\nint rt_meminuse(void);\nvoid * rt_getmem(unsigned int);\nunsigned int rt_freemem(void *); \nvoid rtbomb(const char *);\nvoid rtmesg(const char *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/vector.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/* \n * vector.cpp - This file contains all of the vector arithmetic functions.\n */\n\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n\nflt VDot(vector *a, vector *b) {\n  return (a->x*b->x + a->y*b->y + a->z*b->z);\n}\n\nvoid VCross(vector * a, vector * b, vector * c) {\n  c->x = (a->y * b->z) - (a->z * b->y);\n  c->y = (a->z * b->x) - (a->x * b->z);\n  c->z = (a->x * b->y) - (a->y * b->x);\n}\n\nflt VLength(vector * a) {\n  return (flt) sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));\n}\n\nvoid VNorm(vector * a) {\n  flt len;\n\n  len=sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));\n  if (len != 0.0) {\n    a->x /= len;\n    a->y /= len;\n    a->z /= len;\n  }\n}\n\nvoid VAdd(vector * a, vector * b, vector * c) {\n  c->x = (a->x + b->x);\n  c->y = (a->y + b->y);\n  c->z = (a->z + b->z);\n}\n    \nvoid VSub(vector * a, vector * b, vector * c) {\n  c->x = (a->x - b->x);\n  c->y = (a->y - b->y);\n  c->z = (a->z - b->z);\n}\n\nvoid VAddS(flt a, vector * A, vector * B, vector * C) {\n  C->x = (a * A->x) + B->x;\n  C->y = (a * A->y) + B->y;\n  C->z = (a * A->z) + B->z;\n}\n\nvector Raypnt(ray * a, flt t) {\n  vector temp;\n\n  temp.x=a->o.x + (a->d.x * t);\n  temp.y=a->o.y + (a->d.y * t);\n  temp.z=a->o.z + (a->d.z * t);\n\n  return temp;\n}\n\nvoid VScale(vector * a, flt s) {\n  a->x *= s;\n  a->y *= s;\n  a->z *= s;\n}\n\nvoid ColorAddS(color * a, color * b, flt s) {\n  a->r += b->r * s;\n  a->g += b->g * s;\n  a->b += b->b * s;\n}\n\nvoid ColorAccum(color * a, color * b) {\n  a->r += b->r;\n  a->g += b->g;\n  a->b += b->b;\n}\n\nvoid ColorScale(color * a, flt s) {\n  a->r *= s;\n  a->g *= s;\n  a->b *= s;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/vector.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vector.h - This file contains declarations of vector functions\n *\n *  $Id: vector.h,v 1.2 2007-02-22 17:54:17 Exp $\n */\n\nflt VDot(vector *, vector *);\nvoid VCross(vector *, vector *, vector *);\nflt VLength(vector *);\nvoid VNorm(vector *);\nvoid VAdd(vector *, vector *, vector *);\nvoid VSub(vector *, vector *, vector *);\nvoid VAddS(flt, vector *, vector *, vector *);\nvector Raypnt(ray *, flt);\nvoid VScale(vector * a, flt s); \n\nvoid ColorAddS(color * a, color * b, flt s); \nvoid ColorAccum(color * a, color * b); \nvoid ColorScale(color * a, flt s); \n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/vol.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.cpp - Volume rendering helper routines etc.\n */\n\n#include <stdio.h>\n#include \"machine.h\"\n#include \"types.h\"\n#include \"macros.h\"\n#include \"vector.h\"\n#include \"util.h\"\n#include \"vol.h\"\n#include \"box.h\"\n#include \"trace.h\"\n#include \"ui.h\"\n#include \"light.h\"\n#include \"shade.h\"\n\nint scalarvol_bbox(void * obj, vector * min, vector * max) {\n  box * b = (box *) obj;\n\n  *min = b->min;\n  *max = b->max;\n\n  return 1;\n}\n\nvoid * newscalarvol(void * intex, vector min, vector max,\n                    int xs, int ys, int zs, char * fname, scalarvol * invol) {\n  box * bx;\n  texture * tx, * tex;\n  scalarvol * vol;\n\n  tex=(texture *)intex;\n  tex->shadowcast = 0; /* doesn't cast a shadow */\n\n  tx=(texture *)rt_getmem(sizeof(texture));\n\n  /* is the volume data already loaded? */\n  if (invol==NULL) {\n    vol=(scalarvol *)rt_getmem(sizeof(scalarvol));\n    vol->loaded=0;\n    vol->data=NULL;\n  }\n  else\n    vol=invol;\n\n  vol->opacity=tex->opacity;\n  vol->xres=xs;\n  vol->yres=ys;\n  vol->zres=zs;\n  strcpy(vol->name, fname);\n\n  tx->ctr.x = 0.0;\n  tx->ctr.y = 0.0;\n  tx->ctr.z = 0.0;\n  tx->rot   = tx->ctr;\n  tx->scale = tx->ctr;\n  tx->uaxs  = tx->ctr;\n  tx->vaxs  = tx->ctr;\n\n  tx->islight = 0;\n  tx->shadowcast = 0; /* doesn't cast a shadow */\n\n  tx->col = tex->col;\n  tx->ambient  = 1.0;\n  tx->diffuse  = 0.0;\n  tx->specular = 0.0;\n  tx->opacity  = 1.0;\n  tx->img = vol;\n  tx->texfunc = (color(*)(void *, void *, void *))(scalar_volume_texture);\n\n  bx=newbox(tx, min, max);\n  tx->obj = (void *) bx; /* XXX hack! */\n\n  return (void *) bx;\n}\n\n\ncolor VoxelColor(flt scalar) {\n  color col;\n\n  if (scalar > 1.0)\n    scalar = 1.0;\n\n  if (scalar < 0.0)\n    scalar = 0.0;\n\n  if (scalar < 0.25) {\n    col.r = scalar * 4.0;\n    col.g = 0.0;\n    col.b = 0.0;\n  }\n  else {\n    if (scalar < 0.75) {\n      col.r = 1.0;\n      col.g = (scalar - 0.25) * 2.0;\n      col.b = 0.0;\n    }\n    else {\n      col.r = 1.0;\n      col.g = 1.0;\n      col.b = (scalar - 0.75) * 4.0;\n    }\n  }\n\n  return col;\n}\n\ncolor scalar_volume_texture(vector * hit, texture * tex, ray * ry) {\n  color col, col2;\n  box * bx;\n  flt a, tx1, tx2, ty1, ty2, tz1, tz2;\n  flt tnear, tfar;\n  flt t, tdist, dt, sum, tt;\n  vector pnt, bln;\n  scalarvol * vol;\n  flt scalar, transval;\n  int x, y, z;\n  unsigned char * ptr;\n\n  bx=(box *) tex->obj;\n  vol=(scalarvol *)bx->tex->img;\n\n  col.r=0.0;\n  col.g=0.0;\n  col.b=0.0;\n\n  tnear= -FHUGE;\n  tfar= FHUGE;\n\n  if (ry->d.x == 0.0) {\n    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;\n  }\n  else {\n    tx1 = (bx->min.x - ry->o.x) / ry->d.x;\n    tx2 = (bx->max.x - ry->o.x) / ry->d.x;\n    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }\n    if (tx1 > tnear) tnear=tx1;\n    if (tx2 < tfar)   tfar=tx2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n if (ry->d.y == 0.0) {\n    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;\n  }\n  else {\n    ty1 = (bx->min.y - ry->o.y) / ry->d.y;\n    ty2 = (bx->max.y - ry->o.y) / ry->d.y;\n    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }\n    if (ty1 > tnear) tnear=ty1;\n    if (ty2 < tfar)   tfar=ty2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n  if (ry->d.z == 0.0) {\n    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;\n  }\n  else {\n    tz1 = (bx->min.z - ry->o.z) / ry->d.z;\n    tz2 = (bx->max.z - ry->o.z) / ry->d.z;\n    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }\n    if (tz1 > tnear) tnear=tz1;\n    if (tz2 < tfar)   tfar=tz2;\n  }\n  if (tnear > tfar) return col;\n  if (tfar < 0.0) return col;\n\n  if (tnear < 0.0) tnear=0.0;\n\n  tdist=sqrt((flt) (vol->xres*vol->xres + vol->yres*vol->yres + vol->zres*vol->zres));\n  tt = (vol->opacity / tdist);\n\n  bln.x=fabs(bx->min.x - bx->max.x);\n  bln.y=fabs(bx->min.y - bx->max.y);\n  bln.z=fabs(bx->min.z - bx->max.z);\n\n  dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist;\n  sum=0.0;\n\n  /* move the volume residency check out of loop.. */\n  if (!vol->loaded) {\n    LoadVol(vol);\n    vol->loaded=1;\n  }\n\n  for (t=tnear; t<=tfar; t+=dt) {\n    pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;\n    pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;\n    pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;\n\n    x=(int) ((vol->xres - 1.5) * pnt.x + 0.5);\n    y=(int) ((vol->yres - 1.5) * pnt.y + 0.5);\n    z=(int) ((vol->zres - 1.5) * pnt.z + 0.5);\n\n    ptr = vol->data + ((vol->xres * vol->yres * z) + (vol->xres * y) + x);\n\n    scalar = (flt) ((flt) 1.0 * ((int) ptr[0])) / 255.0;\n\n    sum += tt * scalar;\n\n    transval = tt * scalar;\n\n    col2 = VoxelColor(scalar);\n\n    if (sum < 1.0) {\n      col.r += transval * col2.r;\n      col.g += transval * col2.g;\n      col.b += transval * col2.b;\n      if (sum < 0.0) sum=0.0;\n    }\n    else {\n      sum=1.0;\n    }\n  }\n\n  if (sum < 1.0) {      /* spawn transmission rays / refraction */\n    color transcol;\n\n    transcol = shade_transmission(ry, hit, 1.0 - sum);\n\n    col.r += transcol.r; /* add the transmitted ray  */\n    col.g += transcol.g; /* to the diffuse and       */\n    col.b += transcol.b; /* transmission total..     */\n  }\n\n  return col;\n}\n\nvoid LoadVol(scalarvol * vol) {\n  FILE * dfile;\n  size_t status;\n  char msgtxt[2048];\n\n  dfile=fopen(vol->name, \"r\");\n  if (dfile==NULL) {\n    char msgtxt[2048];\n    sprintf(msgtxt, \"Vol: can't open %s for input!!! Aborting\\n\",vol->name);\n    rt_ui_message(MSG_ERR, msgtxt);\n    rt_ui_message(MSG_ABORT, \"Rendering Aborted.\");\n    exit(1);\n  }\n\n  sprintf(msgtxt, \"loading %dx%dx%d volume set from %s\",\n      vol->xres, vol->yres, vol->zres, vol->name);\n  rt_ui_message(MSG_0, msgtxt);\n\n  vol->data = (unsigned char *)rt_getmem(vol->xres * vol->yres * vol->zres);\n\n  status=fread(vol->data, 1, (vol->xres * vol->yres * vol->zres), dfile);\n  fclose(dfile);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_for/tachyon/src/vol.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    The original source for this example is\n    Copyright (c) 1994-2008 John E. Stone\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n    3. The name of the author may not be used to endorse or promote products\n       derived from this software without specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n*/\n\n/*\n * vol.h - Volume rendering definitions etc.\n *\n *\n *  $Id: vol.h,v 1.2 2007-02-22 17:54:17 Exp $\n */\n\n\nvoid * newscalarvol(void * intex, vector min, vector max, \n                    int xs, int ys, int zs, \n                    char * fname, scalarvol * invol);\n\nvoid  LoadVol(scalarvol *);\ncolor scalar_volume_texture(vector *, texture *, ray *);\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/convex_hull/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=convex_hull_bench\nARGS=\nPERF_RUN_ARGS = silent auto 40000000\nLIGHT_ARGS = 4 400\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb $(LIBS)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug $(LIBS)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) convex_hull_bench convex_hull_sample *.o *.d\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./convex_hull_sample $(PERF_RUN_ARGS)\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nlight_test:\n\t$(run_cmd) ./$(PROG) $(LIGHT_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/convex_hull/convex_hull.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __CONVEX_HULL_H__\n#define __CONVEX_HULL_H__\n\n#include <cassert>\n#include <cstdlib>\n#include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <vector>\n#include <string>\n#include <cstring>\n#include <algorithm>\n#include <functional>\n#include <climits>\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"../../common/utility/utility.h\"\n#include \"../../common/utility/fast_random.h\"\n\nusing namespace std;\n\nnamespace cfg {\n    // convex hull problem user set parameters\n    long   numberOfPoints  = 5000000; // problem size\n    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);\n\n    // convex hull grain sizes for 3 subproblems. Be sure 16*GS < 512Kb\n    const size_t generateGrainSize = 25000;\n    const size_t findExtremumGrainSize  = 25000;\n    const size_t divideGrainSize   = 25000;\n};\n\nnamespace util {\n    bool                     silent = false;\n    bool                     verbose = false;\n    vector<string> OUTPUT;\n\n    // utility functionality\n    void ParseInputArgs(int argc, char* argv[]) {\n        utility::parse_cli_arguments(\n                argc,argv,\n                utility::cli_argument_pack()\n                    //\"-h\" option for displaying help is present implicitly\n                    .positional_arg(cfg::threads,\"n-of-threads\",utility::thread_number_range_desc)\n                    .positional_arg(cfg::numberOfPoints,\"n-of-points\",\"number of points\")\n                    .arg(silent,\"silent\",\"no output except elapsed time\")\n                    .arg(verbose,\"verbose\",\"turns verbose ON\")\n        );\n        //disabling verbose if silent is specified\n        if (silent) verbose = false;;\n    }\n\n    template <typename T>\n    struct point {\n        T x;\n        T y;\n        //According to subparagraph 4 of paragraph 12.6.2 \"Initializing bases and members\" [class.base.init]\n        //of ANSI-ISO-IEC C++ 2003 standard, POD members will _not_ be initialized if they are not mentioned\n        //in the base-member initializer list.\n\n        //For more details why this needed please see comment in FillRNDPointsVector_buf\n        point() {}\n        point(T _x, T _y) : x(_x), y(_y) {}\n    };\n\n    std::ostream& operator<< (std::ostream& o, point<double> const& p) {\n        return o << \"(\" << p.x << \",\" << p.y << \")\";\n    }\n\n    struct rng {\n        static const size_t max_rand = USHRT_MAX;\n        utility::FastRandom my_fast_random;\n        rng (size_t seed):my_fast_random(seed) {}\n        unsigned short operator()(){return my_fast_random.get();}\n        unsigned short operator()(size_t& seed){return my_fast_random.get(seed);}\n    };\n\n\n    template < typename T ,typename rng_functor_type>\n    point<T> GenerateRNDPoint(size_t& count, rng_functor_type random, size_t rand_max) {\n        /* generates random points on 2D plane so that the cluster\n        is somewhat circle shaped */\n        const size_t maxsize=500;\n        T x = random()*2.0/(double)rand_max - 1;\n        T y = random()*2.0/(double)rand_max - 1;\n        T r = (x*x + y*y);\n        if(r>1) {\n            count++;\n            if(count>10) {\n                if (random()/(double)rand_max > 0.5)\n                    x /= r;\n                if (random()/(double)rand_max > 0.5)\n                    y /= r;\n                count = 0;\n            }\n            else {\n                x /= r;\n                y /= r;\n            }\n        }\n\n        x = (x+1)*0.5*maxsize;\n        y = (y+1)*0.5*maxsize;\n\n        return point<T>(x,y);\n    }\n\n    template <typename Index>\n    struct edge {\n        Index start;\n        Index end;\n        edge(Index _p1, Index _p2) : start(_p1), end(_p2) {};\n    };\n\n    template <typename T>\n    ostream& operator <<(ostream& _ostr, point<T> _p) {\n        return _ostr << '(' << _p.x << ',' << _p.y << ')';\n    }\n\n    template <typename T>\n    istream& operator >>(istream& _istr, point<T> _p) {\n        return _istr >> _p.x >> _p.y;\n    }\n\n    template <typename T>\n    bool operator ==(point<T> p1, point<T> p2) {\n        return (p1.x == p2.x && p1.y == p2.y);\n    }\n\n    template <typename T>\n    bool operator !=(point<T> p1, point<T> p2) {\n        return !(p1 == p2);\n    }\n\n    template <typename T>\n    double cross_product(const point<T>& start, const point<T>& end1, const point<T>& end2) {\n        return ((end1.x-start.x)*(end2.y-start.y)-(end2.x-start.x)*(end1.y-start.y));\n    }\n\n    // Timing functions are based on TBB to always obtain wall-clock time\n    typedef tbb::tick_count my_time_t;\n\n    my_time_t gettime() {\n        return tbb::tick_count::now();\n    }\n\n    double time_diff(my_time_t start, my_time_t end) {\n        return (end-start).seconds();\n    }\n\n    void WriteResults(int nthreads, double initTime, double calcTime) {\n        if(verbose) {\n            cout << \" Step by step hull construction:\" << endl;\n            for(size_t i = 0; i < OUTPUT.size(); ++i)\n                cout << OUTPUT[i] << endl;\n        }\n        if (!silent){\n            cout\n                << \"  Number of nodes:\" << cfg::numberOfPoints\n                << \"  Number of threads:\" << nthreads\n                << \"  Initialization time:\" << setw(10) << setprecision(3) << initTime\n                << \"  Calculation time:\" << setw(10) << setprecision(3) << calcTime\n                << endl;\n        }\n    }\n};\n\n#endif // __CONVEX_HULL_H__\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains a few implementations, so it may look overly complicated.\n    The most efficient implementation is also separated into convex_hull_sample.cpp\n*/\n#include \"convex_hull.h\"\n\ntypedef util::point<double> point_t;\n\n#ifndef USETBB\n    #define USETBB      1\n#endif\n#ifndef USECONCVEC\n    #define USECONCVEC   1\n#endif\n\n#if !USETBB // Serial implementation of Quick Hull algorithm\n\ntypedef std::vector< point_t > pointVec_t;\n\nvoid serial_initialize(pointVec_t &points);\n\n// C++ style serial code\n\nclass FindXExtremum : public std::unary_function<const point_t&, void> {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    FindXExtremum(const point_t& frstPoint, extremumType exType_)\n        : extrXPoint(frstPoint), exType(exType_) {}\n\n    void operator()(const point_t& p) {\n        if(closerToExtremum(p))\n            extrXPoint = p;\n    }\n\n    operator point_t () {\n        return extrXPoint;\n    }\n\nprivate:\n    const extremumType   exType;\n    point_t              extrXPoint;\n\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &points) {\n    assert(!points.empty());\n    return std::for_each(points.begin(), points.end(), FindXExtremum(points[0], type));\n}\n\nclass SplitByCP : public std::unary_function<const point_t&, void> {\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n\n    SplitByCP( point_t _p1, point_t _p2, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2), reducedSet(_reducedSet), howFar(0), farPoint(p1) {}\n\n    void operator()(const point_t& p) {\n        double cp;\n        if( (p != p1) && (p != p2) ) {\n            cp = util::cross_product(p1, p2, p);\n            if(cp>0) {\n                reducedSet.push_back(p);\n                if(cp>howFar) {\n                    farPoint = p;\n                    howFar   = cp;\n                }\n            }\n        }\n    }\n\n    operator point_t (){\n        return farPoint;\n    }\n};\n\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced, const point_t &p1, const point_t &p2) {\n    SplitByCP splitByCP(p1, p2, P_reduced);\n    point_t farPoint = std::for_each(P.begin(), P.end(), splitByCP);\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << farPoint;\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return farPoint;\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t p2) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far = divide(P, P_reduced, p1, p2);\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n        H.insert(H.end(), P_reduced.begin(), P_reduced.end());\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far);\n        divide_and_conquer(P_reduced, H2, p_far, p2);\n\n        H.insert(H.end(), H1.begin(), H1.end());\n        H.insert(H.end(), H2.begin(), H2.end());\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull) {\n    if (points.size() < 2) {\n        hull.insert(hull.end(), points.begin(), points.end());\n        return;\n    }\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx);\n    divide_and_conquer(points, H, p_minx, p_maxx);\n    hull.insert(hull.end(), H.begin(), H.end());\n}\n\n\nint main(int argc, char* argv[]) {\n    util::ParseInputArgs(argc, argv);\n\n    pointVec_t      points;\n    pointVec_t      hull;\n    util::my_time_t tm_init, tm_start, tm_end;\n\n    std::cout << \"Starting serial version of QUICK HULL algorithm\" << std::endl;\n\n    tm_init = util::gettime();\n    serial_initialize(points);\n    tm_start = util::gettime();\n    std::cout << \"Init time: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n    tm_start = util::gettime();\n    quickhull(points, hull);\n    tm_end = util::gettime();\n    std::cout << \"Serial time: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n}\n\n#else // USETBB - parallel version of Quick Hull algorithm\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/blocked_range.h\"\n\ntypedef tbb::blocked_range<size_t> range_t;\n\n#if USECONCVEC\n#include \"tbb/concurrent_vector.h\"\n\ntypedef tbb::concurrent_vector<point_t> pointVec_t;\n\nvoid appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {\n    std::copy(src, src + srcSize, dest.grow_by(srcSize));\n}\n\nvoid appendVector(const pointVec_t& src, pointVec_t& dest) {\n    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));\n}\n\nvoid grow_vector_to_at_least(pointVec_t& vect, size_t size) {\n    vect.grow_to_at_least(size);\n}\n#else // USE STD::VECTOR - include spin_mutex.h and lock vector operations\n#include \"tbb/spin_mutex.h\"\n\ntypedef tbb::spin_mutex      mutex_t;\ntypedef std::vector<point_t> pointVec_t;\n\nvoid appendVector(mutex_t& insertMutex, const pointVec_t& src, pointVec_t& dest) {\n    mutex_t::scoped_lock lock(insertMutex);\n    dest.insert(dest.end(), src.begin(), src.end());\n}\n\nvoid appendVector(mutex_t& insertMutex, const point_t* src, size_t srcSize,\n                  pointVec_t& dest) {\n    mutex_t::scoped_lock lock(insertMutex);\n    dest.insert(dest.end(), src, src + srcSize);\n}\n\nvoid grow_vector_to_at_least(mutex_t& mutex, pointVec_t& vect, size_t size) {\n    mutex_t::scoped_lock lock(mutex);\n    if (vect.size()< size){\n        vect.resize(size);\n    }\n}\n#endif // USECONCVEC\n\nclass FillRNDPointsVector {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n#if !USECONCVEC\n    static mutex_t       pushBackMutex;\n#endif // USECONCVEC\n\n    explicit FillRNDPointsVector(pointVec_t& _points)\n        : points(_points){}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0;\n#if USECONCVEC\n            points.grow_to_at_least(i_end);\n#else // Locked enlarge to a not thread-safe STD::VECTOR\n            grow_vector_to_at_least(pushBackMutex,points,i_end);\n#endif // USECONCVEC\n\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            points[i]=util::GenerateRNDPoint<double>(count,the_rng,util::rng::max_rand);\n        }\n    }\n};\n\nclass FillRNDPointsVector_buf {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n#if !USECONCVEC\n    static mutex_t       insertMutex;\n#endif // USECONCVEC\n\n    explicit FillRNDPointsVector_buf(pointVec_t& _points)\n        : points(_points){}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0, j = 0;\n        point_t tmp_vec[grainSize];\n\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            tmp_vec[j++] = util::GenerateRNDPoint<double>(count,the_rng,util::rng::max_rand);\n        }\n#if USECONCVEC\n        grow_vector_to_at_least(points,range.end());\n#else // USE STD::VECTOR\n        grow_vector_to_at_least(insertMutex,points,range.end());\n#endif // USECONCVEC\n        std::copy(tmp_vec, tmp_vec+j,points.begin()+range.begin());\n    }   \n};\n\n#if !USECONCVEC\nmutex_t FillRNDPointsVector::pushBackMutex   = mutex_t();\nmutex_t FillRNDPointsVector_buf::insertMutex = mutex_t();\n#endif\n\ntemplate<typename BodyType>\nvoid initialize(pointVec_t &points) {\n    //This function generate the same series of point on every call.\n    //Reproducibility is needed for benchmarking to produce reliable results.\n    //It is achieved through the following points:\n    //      - FillRNDPointsVector_buf instance has its own local instance\n    //        of random number generator, which in turn does not use any global data\n    //      - tbb::simple_partitioner produce the same set of ranges on every call to\n    //        tbb::parallel_for\n    //      - local RNG instances are seeded by the starting indexes of corresponding ranges\n    //      - grow_to_at_least() enables putting points into the resulting vector in deterministic order\n    //        (unlike concurrent push_back or grow_by).\n\n    // In the buffered version, a temporary storage for as much as grainSize elements \n    // is allocated inside the body. Since auto_partitioner may increase effective\n    // range size which would cause a crash, simple partitioner has to be used.\n\n    tbb::parallel_for(range_t(0, cfg::numberOfPoints, BodyType::grainSize),\n    BodyType(points), tbb::simple_partitioner());\n}\n\nclass FindXExtremum {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    static const size_t  grainSize = cfg::findExtremumGrainSize;\n\n    FindXExtremum(const pointVec_t& points_, extremumType exType_)\n        : points(points_), exType(exType_), extrXPoint(points[0]) {}\n\n    FindXExtremum(const FindXExtremum& fxex, tbb::split)\n        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        if(!range.empty()) {\n            for(size_t i = range.begin(); i != i_end; ++i) {\n                if(closerToExtremum(points[i])) {\n                    extrXPoint = points[i];\n                }\n            }\n        }\n    }\n\n    void join(const FindXExtremum &rhs) {\n        if(closerToExtremum(rhs.extrXPoint)) {\n            extrXPoint = rhs.extrXPoint;\n        }\n    }\n\n    point_t extremeXPoint() {\n        return extrXPoint;\n    }\n\nprivate:\n    const pointVec_t    &points;\n    const extremumType   exType;\n    point_t              extrXPoint;\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &P) {\n    FindXExtremum fxBody(P, type);\n    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);\n    return fxBody.extremeXPoint();\n}\n\nclass SplitByCP {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t grainSize = cfg::divideGrainSize;\n#if !USECONCVEC\n    static mutex_t      pushBackMutex;\n#endif // USECONCVEC\n\n    SplitByCP( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {\n    }\n\n    SplitByCP( SplitByCP& sbcp, tbb::split )\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()( const range_t& range ) {\n        const size_t i_end = range.end();\n        double cp;\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {\n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n#if USECONCVEC\n                    reducedSet.push_back(initialSet[i]);\n#else // Locked push_back to a not thread-safe STD::VECTOR\n                    {\n                        mutex_t::scoped_lock lock(pushBackMutex);\n                        reducedSet.push_back(initialSet[i]);\n                    }\n#endif // USECONCVEC\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n    }\n\n    void join(const SplitByCP& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\nclass SplitByCP_buf {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t  grainSize = cfg::divideGrainSize;\n#if !USECONCVEC\n    static mutex_t       insertMutex;\n#endif // USECONCVEC\n\n    SplitByCP_buf( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        size_t j = 0;\n        double cp;\n        point_t tmp_vec[grainSize];\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            \n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n                    tmp_vec[j++] = initialSet[i];\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n\n#if USECONCVEC\n        appendVector(tmp_vec, j, reducedSet);\n#else // USE STD::VECTOR\n        appendVector(insertMutex, tmp_vec, j, reducedSet);\n#endif // USECONCVEC\n    }\n\n    void join(const SplitByCP_buf& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\n#if !USECONCVEC\nmutex_t SplitByCP::pushBackMutex   = mutex_t();\nmutex_t SplitByCP_buf::insertMutex = mutex_t();\n#endif\n\ntemplate <typename BodyType>\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced,\n              const point_t &p1, const point_t &p2) {\n    BodyType body(p1, p2, P, P_reduced);\n    // Must use simple_partitioner (see the comment in initialize() above)\n    tbb::parallel_reduce(range_t(0, P.size(), BodyType::grainSize),\n                         body, tbb::simple_partitioner() );\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << body.farthestPoint();\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return body.farthestPoint();\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H,\n                        point_t p1, point_t p2, bool buffered) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far;\n    \n    if(buffered) {\n        p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);\n    } else {\n        p_far = divide<SplitByCP>(P, P_reduced, p1, p2);\n    }\n\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n#if USECONCVEC\n        appendVector(P_reduced, H);\n#else // insert into STD::VECTOR\n        H.insert(H.end(), P_reduced.begin(), P_reduced.end());\n#endif\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far, buffered);\n        divide_and_conquer(P_reduced, H2, p_far, p2, buffered);\n\n#if USECONCVEC\n        appendVector(H1, H);\n        appendVector(H2, H);\n#else // insert into STD::VECTOR\n        H.insert(H.end(), H1.begin(), H1.end());\n        H.insert(H.end(), H2.begin(), H2.end());\n#endif\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull, bool buffered) {\n    if (points.size() < 2) {\n#if USECONCVEC\n        appendVector(points, hull);\n#else // STD::VECTOR\n        hull.insert(hull.end(), points.begin(), points.end());\n#endif // USECONCVEC\n        return;\n    }\n\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx, buffered);\n    divide_and_conquer(points, H, p_minx, p_maxx, buffered);\n#if USECONCVEC\n    appendVector(H, hull);\n#else // STD::VECTOR\n    hull.insert(hull.end(), H.begin(), H.end());\n#endif // USECONCVEC\n}\n\nint main(int argc, char* argv[]) {\n    util::ParseInputArgs(argc, argv);\n\n    int             nthreads;\n    util::my_time_t tm_init, tm_start, tm_end;\n\n#if USECONCVEC\n    std::cout << \"Starting TBB unbuffered push_back version of QUICK HULL algorithm\" << std::endl;\n#else\n    std::cout << \"Starting STL locked unbuffered push_back version of QUICK HULL algorithm\" << std::endl;\n#endif // USECONCVEC\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        pointVec_t      points;\n        pointVec_t      hull;\n\n        tbb::task_scheduler_init init(nthreads);\n        tm_init = util::gettime();\n        initialize<FillRNDPointsVector>(points);\n        tm_start = util::gettime();\n        std::cout << \"Parallel init time on \" << nthreads << \" threads: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n\n        tm_start = util::gettime();\n        quickhull(points, hull, false);\n        tm_end = util::gettime();\n        std::cout << \"Time on \" << nthreads << \" threads: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n    }\n\n#if USECONCVEC \n    std::cout << \"Starting TBB buffered version of QUICK HULL algorithm\" << std::endl;\n#else\n    std::cout << \"Starting STL locked buffered version of QUICK HULL algorithm\" << std::endl;\n#endif\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        pointVec_t      points;\n        pointVec_t      hull;\n\n        tbb::task_scheduler_init init(nthreads);\n\n        tm_init = util::gettime();\n        initialize<FillRNDPointsVector_buf>(points);\n        tm_start = util::gettime();\n        std::cout << \"Init time on \" << nthreads << \" threads: \" << util::time_diff(tm_init, tm_start) << \"  Points in input: \" << points.size() << \"\\n\";\n\n        tm_start = util::gettime();\n        quickhull(points, hull, true);\n        tm_end = util::gettime();\n        std::cout << \"Time on \" << nthreads << \" threads: \" << util::time_diff(tm_start, tm_end) << \"  Points in hull: \" << hull.size() << \"\\n\";\n    }    \n\n    return 0;\n}\n\n#endif // USETBB\n\nvoid serial_initialize(pointVec_t &points) {\n    points.reserve(cfg::numberOfPoints);\n\n    unsigned int rseed=1;\n    for(size_t i=0, count=0; long(i)<cfg::numberOfPoints; ++i) {\n        points.push_back(util::GenerateRNDPoint<double>(count,&std::rand,RAND_MAX ));\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    This file contains the TBB-based implementation of convex hull algortihm.\n    It corresponds to the following settings in convex_hull_bench.cpp:\n    - USETBB defined to 1\n    - USECONCVEC defined to 1\n    - INIT_ONCE defined to 0\n    - only buffered version is used\n*/\n#include \"convex_hull.h\"\n\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/concurrent_vector.h\"\n\ntypedef util::point<double>               point_t;\ntypedef tbb::concurrent_vector< point_t > pointVec_t;\ntypedef tbb::blocked_range<size_t>        range_t;\n\nvoid appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {\n    std::copy(src, src + srcSize, dest.grow_by(srcSize));\n}\n\nvoid appendVector(const pointVec_t& src, pointVec_t& dest) {\n    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));\n}\nclass FillRNDPointsVector_buf {\n    pointVec_t          &points;\npublic:\n    static const size_t  grainSize = cfg::generateGrainSize;\n\n    explicit FillRNDPointsVector_buf(pointVec_t& _points)\n        : points(_points) {}\n\n    void operator()(const range_t& range) const {\n        util::rng the_rng(range.begin());\n        const size_t i_end = range.end();\n        size_t count = 0, j = 0;\n        point_t tmp_vec[grainSize];\n\n        for(size_t i=range.begin(); i!=i_end; ++i) {\n            tmp_vec[j++] = util::GenerateRNDPoint<double>(count, the_rng, util::rng::max_rand);\n        }\n        //Here we have race condition. Elements being written to may be still under construction.\n        //For C++ 2003 it is workarounded by vector element type which default constructor does not touch memory,\n        //it being constructed on. See comments near default ctor of point class for more details.\n        //Strictly speaking it is UB.\n        //TODO: need to find more reliable/correct way\n        points.grow_to_at_least(range.end());\n        std::copy(tmp_vec, tmp_vec+j,points.begin()+range.begin());\n    }\n};\n\nvoid initialize(pointVec_t &points) {\n    //This function generate the same series of point on every call.\n    //Reproducibility is needed for benchmarking to produce reliable results.\n    //It is achieved through the following points:\n    //      - FillRNDPointsVector_buf instance has its own local instance\n    //        of random number generator, which in turn does not use any global data\n    //      - tbb::simple_partitioner produce the same set of ranges on every call to\n    //        tbb::parallel_for\n    //      - local RNG instances are seeded by the starting indexes of corresponding ranges\n    //      - grow_to_at_least() enables putting points into the resulting vector in deterministic order\n    //        (unlike concurrent push_back or grow_by).\n\n    // In the buffered version, a temporary storage for as much as grainSize elements \n    // is allocated inside the body. Since auto_partitioner may increase effective\n    // range size which would cause a crash, simple partitioner has to be used.\n    tbb::parallel_for(range_t(0, cfg::numberOfPoints, FillRNDPointsVector_buf::grainSize),\n                      FillRNDPointsVector_buf(points), tbb::simple_partitioner());\n}\n\nclass FindXExtremum {\npublic:\n    typedef enum {\n        minX, maxX\n    } extremumType;\n\n    static const size_t  grainSize = cfg::findExtremumGrainSize;\n\n    FindXExtremum(const pointVec_t& points_, extremumType exType_)\n        : points(points_), exType(exType_), extrXPoint(points[0]) {}\n\n    FindXExtremum(const FindXExtremum& fxex, tbb::split)\n        // Can run in parallel with fxex.operator()() or fxex.join().\n        // The data race reported by tools is harmless.\n        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        if(!range.empty()) {\n            for(size_t i = range.begin(); i != i_end; ++i) {\n                if(closerToExtremum(points[i])) {\n                    extrXPoint = points[i];\n                }\n            }\n        }\n    }\n\n    void join(const FindXExtremum &rhs) {\n        if(closerToExtremum(rhs.extrXPoint)) {\n            extrXPoint = rhs.extrXPoint;\n        }\n    }\n\n    point_t extremeXPoint() {\n        return extrXPoint;\n    }\n\nprivate:\n    const pointVec_t    &points;\n    const extremumType   exType;\n    point_t              extrXPoint;\n    bool closerToExtremum(const point_t &p) const {\n        switch(exType) {\n        case minX:\n            return p.x<extrXPoint.x; break;\n        case maxX:\n            return p.x>extrXPoint.x; break;\n        }\n        return false; // avoid warning\n    }\n};\n\ntemplate <FindXExtremum::extremumType type>\npoint_t extremum(const pointVec_t &P) {\n    FindXExtremum fxBody(P, type);\n    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);\n    return fxBody.extremeXPoint();\n}\n\nclass SplitByCP_buf {\n    const pointVec_t    &initialSet;\n    pointVec_t          &reducedSet;\n    point_t              p1, p2;\n    point_t              farPoint;\n    double               howFar;\npublic:\n    static const size_t  grainSize = cfg::divideGrainSize;\n\n    SplitByCP_buf( point_t _p1, point_t _p2,\n        const pointVec_t &_initialSet, pointVec_t &_reducedSet)\n        : p1(_p1), p2(_p2),\n        initialSet(_initialSet), reducedSet(_reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)\n        : p1(sbcp.p1), p2(sbcp.p2),\n        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),\n        howFar(0), farPoint(p1) {}\n\n    void operator()(const range_t& range) {\n        const size_t i_end = range.end();\n        size_t j = 0;\n        double cp;\n        point_t tmp_vec[grainSize];\n        for(size_t i = range.begin(); i != i_end; ++i) {\n            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            \n                cp = util::cross_product(p1, p2, initialSet[i]);\n                if(cp>0) {\n                    tmp_vec[j++] = initialSet[i];\n                    if(cp>howFar) {\n                        farPoint = initialSet[i];\n                        howFar   = cp;\n                    }\n                }\n            }\n        }\n\n        appendVector(tmp_vec, j, reducedSet);\n    }\n\n    void join(const SplitByCP_buf& rhs) {\n        if(rhs.howFar>howFar) {\n            howFar   = rhs.howFar;\n            farPoint = rhs.farPoint;\n        }\n    }\n\n    point_t farthestPoint() const {\n        return farPoint;\n    }\n};\n\npoint_t divide(const pointVec_t &P, pointVec_t &P_reduced, \n                   const point_t &p1, const point_t &p2) {\n    SplitByCP_buf sbcpb(p1, p2, P, P_reduced);\n    // Must use simple_partitioner (see the comment in initialize() above)\n    tbb::parallel_reduce(range_t(0, P.size(), SplitByCP_buf::grainSize),\n                         sbcpb, tbb::simple_partitioner());\n\n    if(util::verbose) {\n        std::stringstream ss;\n        ss << P.size() << \" nodes in bucket\"<< \", \"\n            << \"dividing by: [ \" << p1 << \", \" << p2 << \" ], \"\n            << \"farthest node: \" << sbcpb.farthestPoint();\n        util::OUTPUT.push_back(ss.str());\n    }\n\n    return sbcpb.farthestPoint();\n}\n\nvoid divide_and_conquer(const pointVec_t &P, pointVec_t &H,\n                            point_t p1, point_t p2) {\n    assert(P.size() >= 2);\n    pointVec_t P_reduced;\n    pointVec_t H1, H2;\n    point_t p_far = divide(P, P_reduced, p1, p2);\n    if (P_reduced.size()<2) {\n        H.push_back(p1);\n        appendVector(P_reduced, H);\n    }\n    else {\n        divide_and_conquer(P_reduced, H1, p1, p_far);\n        divide_and_conquer(P_reduced, H2, p_far, p2);\n\n        appendVector(H1, H);\n        appendVector(H2, H);\n    }\n}\n\nvoid quickhull(const pointVec_t &points, pointVec_t &hull) {\n    if (points.size() < 2) {\n        appendVector(points, hull);\n        return;\n    }\n\n    point_t p_maxx = extremum<FindXExtremum::maxX>(points);\n    point_t p_minx = extremum<FindXExtremum::minX>(points);\n\n    pointVec_t H;\n\n    divide_and_conquer(points, hull, p_maxx, p_minx);\n    divide_and_conquer(points, H, p_minx, p_maxx);\n\n    appendVector(H, hull);\n}\n\nint main(int argc, char* argv[]) {\n    util::my_time_t tm_main_begin = util::gettime();\n\n    util::ParseInputArgs(argc, argv);\n\n    pointVec_t      points;\n    pointVec_t      hull;\n    int             nthreads;\n\n    points.reserve(cfg::numberOfPoints);\n\n    if(!util::silent) {\n        std::cout << \"Starting TBB-buffered version of QUICK HULL algorithm\" << std::endl;\n    }\n\n    for(nthreads=cfg::threads.first; nthreads<=cfg::threads.last; nthreads=cfg::threads.step(nthreads)) {\n        tbb::task_scheduler_init init(nthreads);\n\n        points.clear();\n        util::my_time_t tm_init = util::gettime();\n        initialize(points);\n        util::my_time_t tm_start = util::gettime();\n        if(!util::silent) {\n            std::cout <<\"Init time on \"<<nthreads<<\" threads: \"<<util::time_diff(tm_init, tm_start)<<\"  Points in input: \"<<points.size()<<std::endl;\n        }\n\n        tm_start = util::gettime();\n        quickhull(points, hull);\n        util::my_time_t tm_end = util::gettime();\n        if(!util::silent) {\n            std::cout <<\"Time on \"<<nthreads<<\" threads: \"<<util::time_diff(tm_start, tm_end)<<\"  Points in hull: \"<<hull.size()<<std::endl;\n        }\n        hull.clear();\n    }\n    utility::report_elapsed_time(util::time_diff(tm_main_begin, util::gettime()));\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/convex_hull/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Convex_hull sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Convex_hull sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel version of convex hull algorithm (quick hull).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"convex_hull_sample.cpp\">convex_hull_sample.cpp</a>\n\t\t\t\t<dd>Source code for parallel version of the example which uses parallel_reduce, parallel_for and concurrent_vector.\n\t\t\t\t<dt><a href=\"convex_hull_bench.cpp\">convex_hull_bench.cpp</a>\n\t\t\t\t<dd>Source code for the version of the example that compares serial and parallel buffered and unbuffered implementations.\n\t\t\t\t<dt><a href=\"convex_hull.h\">convex_hull.h</a>\n\t\t\t\t<dd>Include file for the example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>convex_hull_sample [<i>S</i>] [<i>M</i>[:<i>N</i>]] [-v]</tt>\n\t\t\t\t<dd><i>S</i> is the number of points (problem size).\n\t\t\t\t\t<i>M:N</i> are a range of numbers of threads to be used.\n\t\t\t\t\tUse the -v option to turn on verbose output.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>convex_hull_sample&nbsp;500000&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on parallel_reduce</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>parallel_reduce</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>parallel_reduce</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"convex_hull/readme.html\">convex_hull</a>\n\t\t\t\t<dd>Parallel version of convex hull algorithm (quick hull).\n\t\t\t\t<dt><a href=\"primes/readme.html\">primes</a>\n\t\t\t\t<dd>Parallel version of the Sieve of Eratosthenes.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/primes/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=primes\nARGS=\nPERF_RUN_ARGS=silent  auto 1000000000 1000 20\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: main.cpp primes.cpp \n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS)\n\ndebug: main.cpp primes.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest: \n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/primes/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"primes.h\"\n#include <cstdlib>\n#include <cstdio>\n#include <cstring>\n#include <cctype>\n#include <utility>\n#include <iostream>\n#include <sstream>\n#include \"tbb/tick_count.h\"\n\n#include \"../../common/utility/utility.h\"\n\nstruct RunOptions{\n    //! NumberType of threads to use.\n    utility::thread_number_range threads;\n    //whether to suppress additional output\n    bool silentFlag;\n    //\n    NumberType n;\n    //! Grain size parameter\n    NumberType grainSize;\n    // number of time to repeat calculation\n    NumberType repeatNumber;\n\n    RunOptions(utility::thread_number_range threads_, NumberType grainSize_, NumberType n_, bool silentFlag_, NumberType repeatNumber_)\n        : threads(threads_), silentFlag(silentFlag_), n(n_), grainSize(grainSize_), repeatNumber(repeatNumber_)\n    {}\n};\n\nint do_get_default_num_threads() {\n    int threads;\n    #if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n    #endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\n//! Parse the command line.\nstatic RunOptions ParseCommandLine( int argc, const char* argv[] ) {\n    utility::thread_number_range threads( get_default_num_threads, 0, get_default_num_threads() );\n    NumberType grainSize = 1000;\n    bool silent = false;\n    NumberType number = 100000000;\n    NumberType repeatNumber = 1;\n\n    utility::parse_cli_arguments(argc,argv,\n        utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(number,\"number\",\"upper bound of range to search primes in, must be a positive integer\")\n            .positional_arg(grainSize,\"grain-size\",\"must be a positive integer\")\n            .positional_arg(repeatNumber,\"n-of-repeats\",\"repeat the calculation this number of times, must be a positive integer\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n    );\n\n    RunOptions options(threads,grainSize, number, silent, repeatNumber);\n    return options;\n}\n\nint main( int argc, const char* argv[] ) {\n    tbb::tick_count mainBeginMark = tbb::tick_count::now();\n    RunOptions options =ParseCommandLine(argc,argv);\n\n    // Try different numbers of threads\n    for( int p=options.threads.first; p<=options.threads.last; p=options.threads.step(p) ) {\n        for (NumberType i=0; i<options.repeatNumber;++i){\n            tbb::tick_count iterationBeginMark = tbb::tick_count::now();\n            NumberType count = 0;\n            NumberType n = options.n;\n            if( p==0 ) {\n                #if __TBB_MIC_OFFLOAD\n                #pragma offload target(mic) in(n) out(count)\n                #endif // __TBB_MIC_OFFLOAD\n                count = SerialCountPrimes(n);\n            } else {\n                NumberType grainSize = options.grainSize;\n                #if __TBB_MIC_OFFLOAD\n                #pragma offload target(mic) in(n, p, grainSize) out(count)\n                #endif // __TBB_MIC_OFFLOAD\n                count = ParallelCountPrimes(n, p, grainSize);\n            }\n            tbb::tick_count iterationEndMark = tbb::tick_count::now();\n            if (!options.silentFlag){\n                std::cout\n                        <<\"#primes from [2..\" <<options.n<<\"] = \" << count\n                        <<\" (\"<<(iterationEndMark-iterationBeginMark).seconds()<< \" sec with \"\n                ;\n                if( 0 != p )\n                    std::cout<<p<<\"-way parallelism\";\n                else\n                    std::cout<<\"serial code\";\n                std::cout<<\")\\n\" ;\n            }\n        }\n    }\n    utility::report_elapsed_time((tbb::tick_count::now()-mainBeginMark).seconds());\n    return 0;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/primes/primes.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// Example program that computes number of prime numbers up to n, \n// where n is a command line argument.  The algorithm here is a \n// fairly efficient version of the sieve of Eratosthenes. \n// The parallel version demonstrates how to use parallel_reduce,\n// and in particular how to exploit lazy splitting.\n\n#include \"primes.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (target(mic))\n#endif // __TBB_MIC_OFFLOAD\n#include <algorithm>\n#include <cassert>\n#include <cstdio>\n#include <cstring>\n#include <math.h>\n#include <cstdlib>\n#include <cctype>\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/task_scheduler_init.h\"\n\nusing namespace std;\n\n//! If true, then print primes on stdout.\nstatic bool printPrimes = false;\n\n\nclass Multiples {\n    inline NumberType strike( NumberType start, NumberType limit, NumberType stride ) {\n        // Hoist \"my_is_composite\" into register for sake of speed.\n        bool* is_composite = my_is_composite;\n        assert( stride>=2 );\n        for( ;start<limit; start+=stride ) \n            is_composite[start] = true;\n        return start;\n    }\n    //! Window into conceptual sieve \n    bool* my_is_composite;\n\n    //! Indexes into window\n    /** my_striker[k] is an index into my_composite corresponding to\n        an odd multiple multiple of my_factor[k]. */\n    NumberType* my_striker;\n\n    //! Prime numbers less than m.\n    NumberType* my_factor;\npublic:\n    //! NumberType of factors in my_factor.\n    NumberType n_factor;\n    NumberType m;\n    Multiples( NumberType n ) {\n        m = NumberType(sqrt(double(n)));\n        // Round up to even\n        m += m&1;\n        my_is_composite = new bool[m/2];\n        my_striker = new NumberType[m/2];\n        my_factor = new NumberType[m/2];\n        n_factor = 0;\n        memset( my_is_composite, 0, m/2 );\n        for( NumberType i=3; i<m; i+=2 ) {\n            if( !my_is_composite[i/2] ) {\n                if( printPrimes )\n                    printf(\"%d\\n\",(int)i);\n                my_striker[n_factor] = strike( i/2, m/2, i );\n                my_factor[n_factor++] = i;\n            }\n        }\n    }\n\n    //! Find primes in range [start,window_size), advancing my_striker as we go.\n    /** Returns number of primes found. */\n    NumberType find_primes_in_window( NumberType start, NumberType window_size ) {\n        bool* is_composite = my_is_composite;\n        memset( is_composite, 0, window_size/2 );\n        for( size_t k=0; k<n_factor; ++k )\n            my_striker[k] = strike( my_striker[k]-m/2, window_size/2, my_factor[k] );\n        NumberType count = 0;\n        for( NumberType k=0; k<window_size/2; ++k ) {\n            if( !is_composite[k] ) {\n                if( printPrimes )\n                    printf(\"%ld\\n\",long(start+2*k+1));\n                ++count;\n            }\n        }\n        return count;\n    }\n\n    ~Multiples() {\n        delete[] my_factor;\n        delete[] my_striker;\n        delete[] my_is_composite;\n    }\n\n    //------------------------------------------------------------------------\n    // Begin extra members required by parallel version\n    //------------------------------------------------------------------------\n\n    // Splitting constructor\n    Multiples( const Multiples& f, tbb::split ) :\n        n_factor(f.n_factor),\n        m(f.m),\n        my_is_composite(NULL),\n        my_striker(NULL),\n        my_factor(f.my_factor)\n    {}\n\n    bool is_initialized() const {\n        return my_is_composite!=NULL;\n    }\n\n    void initialize( NumberType start ) { \n        assert( start>=1 );\n        my_is_composite = new bool[m/2];\n        my_striker = new NumberType[m/2];\n        for( size_t k=0; k<n_factor; ++k ) {\n            NumberType f = my_factor[k];\n            NumberType p = (start-1)/f*f % m;\n            my_striker[k] = (p&1 ? p+2*f : p+f)/2;\n            assert( m/2<=my_striker[k] );\n        }\n    }\n\n    // Move other to *this.\n    void move( Multiples& other ) {\n        // The swap moves the contents of other to *this and causes the old contents\n        // of *this to be deleted later when other is destroyed.\n        std::swap( my_striker, other.my_striker );\n        std::swap( my_is_composite, other.my_is_composite );\n        // other.my_factor is a shared pointer that was copied by the splitting constructor.\n        // Set it to NULL to prevent premature deletion by the destructor of ~other.\n        assert(my_factor==other.my_factor);\n        other.my_factor = NULL;\n    }\n\n    //------------------------------------------------------------------------\n    // End extra methods required by parallel version\n    //------------------------------------------------------------------------\n};\n\n//! Count number of primes between 0 and n\n/** This is the serial version. */\nNumberType SerialCountPrimes( NumberType n ) {\n    // Two is special case\n    NumberType count = n>=2;\n    if( n>=3 ) {\n        Multiples multiples(n);\n        count += multiples.n_factor;\n        if( printPrimes ) \n            printf(\"---\\n\");\n        NumberType window_size = multiples.m;\n        for( NumberType j=multiples.m; j<=n; j+=window_size ) { \n            if( j+window_size>n+1 ) \n                window_size = n+1-j;\n            count += multiples.find_primes_in_window( j, window_size );\n        }\n    }\n    return count;\n}\n\n//! Range of a sieve window.\nclass SieveRange {\n    //! Width of full-size window into sieve.\n    const NumberType my_stride;\n\n    //! Always multiple of my_stride\n    NumberType my_begin;\n\n    //! One past last number in window.\n    NumberType my_end;\n\n    //! Width above which it is worth forking.\n    const NumberType my_grainsize;\n\n    bool assert_okay() const {\n        assert( my_begin%my_stride==0 );\n        assert( my_begin<=my_end );\n        assert( my_stride<=my_grainsize );\n        return true;\n    } \npublic:\n    //------------------------------------------------------------------------\n    // Begin signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    bool is_divisible() const {return my_end-my_begin>my_grainsize;}\n    bool empty() const {return my_end<=my_begin;}\n    SieveRange( SieveRange& r, tbb::split ) :\n        my_stride(r.my_stride), \n        my_grainsize(r.my_grainsize),\n        my_end(r.my_end)\n    {\n        assert( r.is_divisible() );\n        assert( r.assert_okay() );\n        NumberType middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;\n        middle = middle/my_stride*my_stride;\n        my_begin = middle;\n        r.my_end = middle;\n        assert( assert_okay() );\n        assert( r.assert_okay() );\n    }\n    //------------------------------------------------------------------------\n    // End of signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    NumberType begin() const {return my_begin;}\n    NumberType end() const {return my_end;}\n    SieveRange( NumberType begin, NumberType end, NumberType stride, NumberType grainsize ) :\n        my_begin(begin),\n        my_end(end),\n        my_stride(stride),      \n        my_grainsize(grainsize<stride?stride:grainsize)\n    {\n        assert( assert_okay() );\n    }\n};\n\n//! Loop body for parallel_reduce.\n/** parallel_reduce splits the sieve into subsieves.\n    Each subsieve handles a subrange of [0..n]. */\nclass Sieve {\npublic:\n    //! Prime Multiples to consider, and working storage for this subsieve.\n    ::Multiples multiples;\n\n    //! NumberType of primes found so far by this subsieve.\n    NumberType count;\n\n    //! Construct Sieve for counting primes in [0..n].\n    Sieve( NumberType n ) :\n        multiples(n),\n        count(0)\n    {}\n\n    //------------------------------------------------------------------------\n    // Begin signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n    void operator()( const SieveRange& r ) {\n        NumberType m = multiples.m;\n        if( multiples.is_initialized() ) { \n            // Simply reuse \"Multiples\" structure from previous window\n            // This works because parallel_reduce always applies\n            // *this from left to right.\n        } else {\n            // Need to initialize \"Multiples\" because *this is a forked copy\n            // that needs to be set up to start at r.begin().\n            multiples.initialize( r.begin() );\n        }\n        NumberType window_size = m;\n        for( NumberType j=r.begin(); j<r.end(); j+=window_size ) { \n            assert( j%multiples.m==0 );\n            if( j+window_size>r.end() ) \n                window_size = r.end()-j;\n            count += multiples.find_primes_in_window( j, window_size );\n        }\n    }\n    void join( Sieve& other ) {\n        count += other.count;\n        // Final value of multiples needs to final value of other multiples,\n        // so that *this can correctly process next window to right.\n        multiples.move( other.multiples );\n    }\n    Sieve( Sieve& other, tbb::split ) :\n        multiples(other.multiples,tbb::split()),\n        count(0)\n    {}\n    //------------------------------------------------------------------------\n    // End of signatures required by parallel_reduce\n    //------------------------------------------------------------------------\n};\n\n//! Count number of primes between 0 and n\n/** This is the parallel version. */\nNumberType ParallelCountPrimes( NumberType n , int number_of_threads, NumberType grain_size ) {\n    tbb::task_scheduler_init init(number_of_threads);\n\n    // Two is special case\n    NumberType count = n>=2;\n    if( n>=3 ) {\n        Sieve s(n);\n        count += s.multiples.n_factor;\n        if( printPrimes )\n            printf(\"---\\n\");\n        using namespace tbb;\n        // Explicit grain size and simple_partitioner() used here instead of automatic grainsize \n        // determination becase we want SieveRange to be decomposed down to grainSize or smaller.  \n        // Doing so improves odds that the working set fits in cache when evaluating Sieve::operator().\n        parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, grain_size ), s, simple_partitioner() );\n        count += s.count;\n    }\n    return count;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/primes/primes.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef PRIMES_H_\n#define PRIMES_H_\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include \"tbb/task_scheduler_init.h\"\n#include <cstddef>\ntypedef std::size_t NumberType;\n\n//! Count number of primes between 0 and n\n/** This is the serial version. */\nNumberType SerialCountPrimes( NumberType n);\n\n//! Count number of primes between 0 and n\n/** This is the parallel version. */\nNumberType ParallelCountPrimes( NumberType n, int numberOfThreads= tbb::task_scheduler_init::automatic, NumberType grainSize = 1000);\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\n#endif /* PRIMES_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/parallel_reduce/primes/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Primes sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Primes sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tParallel version of the Sieve of Eratosthenes.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm with different numbers of threads.\n\t\t\t\t<dt><a href=\"primes.h\">primes.h</a>\n\t\t\t\t<dd>The Sieve of Eratosthenes interface.\n\t\t\t\t<dt><a href=\"primes.cpp\">primes.cpp</a>\n\t\t\t\t<dd>The Sieve of Eratosthenes implementation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>primes <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>primes [<i>n-of-threads</i>=value] [<i>number</i>=value] [<i>grain-size</i>=value] [<i>n-of-repeats</i>=value] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>primes [<i>n-of-threads</i> [<i>number</i> [<i>grain-size</i> [<i>n-of-repeats</i>]]]][<i>silent</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>number</i> is an upper bound of range to search primes in, must be a positive integer.<br>\n\t\t\t\t\t<i>grain-size</i> is an optional grain size, must be a positive integer. <br>\n\t\t\t\t\t<i>n-of-repeats</i> is a number of the calculation repeats, must be a positive integer.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>primes&nbsp;4&nbsp;100000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/pipeline/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on pipeline algorithm</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>pipeline</code> algorithm</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of the <code>pipeline</code> algorithm.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"square/readme.html\">square</a>\n\t\t\t\t<dd>Another simple string transformation example that squares numbers read from a file.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/pipeline/square/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=square\nARGS=0 input.txt output.txt\nPERF_RUN_ARGS=auto input.txt output.txt silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nSOURCES = square.cpp gen_input.cpp\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: $(SOURCES)\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: $(SOURCES)\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d input.txt output.txt\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: $(SOURCES)\n\t$(CXX) -O2 -msse2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/pipeline/square/gen_input.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdexcept>\n\n#if _WIN32\n#include <io.h>\n#ifndef F_OK\n#define F_OK 0\n#endif\n#define access _access\n#else\n#include <unistd.h>\n#endif\n\nconst long INPUT_SIZE = 1000000;\n\n//! Generates sample input for square.cpp\nvoid gen_input( const char *fname ) {\n    long num = INPUT_SIZE;\n    FILE *fptr = fopen(fname, \"w\");\n    if(!fptr) {\n        throw std::runtime_error(\"Could not open file for generating input\");\n    }\n\n    int a=0;\n    int b=1;\n    for( long j=0; j<num; ++j ) {\n        fprintf(fptr, \"%u\\n\",a);\n        b+=a;\n        a=(b-a)%10000;\n        if (a<0) a=-a;\n    }\n\n    if(fptr) {\n        fclose(fptr);\n    }\n}\n\nvoid generate_if_needed( const char *fname ) {\n    if ( access(fname, F_OK) != 0 )\n        gen_input(fname);\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/pipeline/square/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Square sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Square sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tText filter that demonstrates class pipeline. Example program reads a file \n\t\tcontaining decimal integers in text format, and changes each to its square.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"square.cpp\">square.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"gen_input.cpp\">gen_input.cpp </a>\n\t\t\t\t<dd>Source code for sample input generation.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t\tTwo additional targets for this example:\n\t\t\t<dl>\n\t\t\t\t<dt><tt>make gen_input</tt>\n\t\t\t\t<dd>Create an input generator program that prints out a sequence of integers.\n\t\t\t\t<dt><tt>make input.txt</tt>\n\t\t\t\t<dd>Create an input file for the example (with help of <tt>gen_input</tt>).\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>square <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>square [<i>n-of-threads</i>=value] [<i>input-file</i>=value] [<i>output-file</i>=value] [<i>max-slice-size</i>=value] [<i>silent</i>]</tt>\n\t\t\t\t<dt><tt>square [<i>n-of-threads</i> [<i>input-file</i> [<i>output-file</i> [<i>max-slice-size</i>]]]] [<i>silent</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>input-file</i> is an input file name.<br>\n\t\t\t\t\t<i>output-file</i> is an output file name. <br>\n\t\t\t\t\t<i>max-slice-size</i> is the maximum number of characters in one slice.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t<dt><tt>gen_input [<i>LN</i>] &gt; <i>inputfile</i></tt>\n\t\t\t\t<dd>Generate a file named <i>inputfile</i> consisting of <i>LN</i> lines each containing one integer.\n\t\t\t\t\tIf not specified, <i>LN</i> is assumed to be 1000000.\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Prepare an <i>inputfile</i> with about 5,000 lines of text (see the instruction above).\n\t\t\t\t\t<br>Run it with this <i>inputfile</i> and the desired number of threads,\n\t\t\t\t\te.g., <tt>square&nbsp;4&nbsp;<i>inputfile</i>&nbsp;<i>outputfile</i></tt>.\n\t\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/pipeline/square/square.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//\n// Example program that reads a file of decimal integers in text format\n// and changes each to its square.\n// \n#include \"tbb/pipeline.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tbb_allocator.h\"\n#include <cstring>\n#include <cstdlib>\n#include <cstdio>\n#include <cctype>\n#include \"../../common/utility/utility.h\"\n\nextern void generate_if_needed(const char*);\n\nusing namespace std;\n\n//! Holds a slice of text.\n/** Instances *must* be allocated/freed using methods herein, because the C++ declaration\n    represents only the header of a much larger object in memory. */\nclass TextSlice {\n    //! Pointer to one past last character in sequence\n    char* logical_end;\n    //! Pointer to one past last available byte in sequence.\n    char* physical_end;\npublic:\n    //! Allocate a TextSlice object that can hold up to max_size characters.\n    static TextSlice* allocate( size_t max_size ) {\n        // +1 leaves room for a terminating null character.\n        TextSlice* t = (TextSlice*)tbb::tbb_allocator<char>().allocate( sizeof(TextSlice)+max_size+1 );\n        t->logical_end = t->begin();\n        t->physical_end = t->begin()+max_size;\n        return t;\n    }\n    //! Free a TextSlice object \n    void free() {\n        tbb::tbb_allocator<char>().deallocate((char*)this,sizeof(TextSlice)+(physical_end-begin())+1);\n    } \n    //! Pointer to beginning of sequence\n    char* begin() {return (char*)(this+1);}\n    //! Pointer to one past last character in sequence\n    char* end() {return logical_end;}\n    //! Length of sequence\n    size_t size() const {return logical_end-(char*)(this+1);}\n    //! Maximum number of characters that can be appended to sequence\n    size_t avail() const {return physical_end-logical_end;}\n    //! Append sequence [first,last) to this sequence.\n    void append( char* first, char* last ) {\n        memcpy( logical_end, first, last-first );\n        logical_end += last-first;\n    }\n    //! Set end() to given value.\n    void set_end( char* p ) {logical_end=p;}\n};\n\nsize_t MAX_CHAR_PER_INPUT_SLICE = 4000;\nstring InputFileName = \"input.txt\";\nstring OutputFileName = \"output.txt\";\n\nclass MyInputFilter: public tbb::filter {\npublic:\n    MyInputFilter( FILE* input_file_ );\n    ~MyInputFilter();\nprivate:\n    FILE* input_file;\n    TextSlice* next_slice;\n    void* operator()(void*) /*override*/;\n};\n\nMyInputFilter::MyInputFilter( FILE* input_file_ ) : \n    filter(serial_in_order),\n    input_file(input_file_),\n    next_slice( TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE ) )\n{ \n}\n\nMyInputFilter::~MyInputFilter() {\n    next_slice->free();\n}\n \nvoid* MyInputFilter::operator()(void*) {\n    // Read characters into space that is available in the next slice.\n    size_t m = next_slice->avail();\n    size_t n = fread( next_slice->end(), 1, m, input_file );\n    if( !n && next_slice->size()==0 ) {\n        // No more characters to process\n        return NULL;\n    } else {\n        // Have more characters to process.\n        TextSlice& t = *next_slice;\n        next_slice = TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE );\n        char* p = t.end()+n;\n        if( n==m ) {\n            // Might have read partial number.  If so, transfer characters of partial number to next slice.\n            while( p>t.begin() && isdigit(p[-1]) ) \n                --p;\n            next_slice->append( p, t.end()+n );\n        }\n        t.set_end(p);\n        return &t;\n    }\n}\n    \n//! Filter that changes each decimal number to its square.\nclass MyTransformFilter: public tbb::filter {\npublic:\n    MyTransformFilter();\n    void* operator()( void* item ) /*override*/;\n};\n\nMyTransformFilter::MyTransformFilter() : \n    tbb::filter(parallel) \n{}  \n\nvoid* MyTransformFilter::operator()( void* item ) {\n    TextSlice& input = *static_cast<TextSlice*>(item);\n    // Add terminating null so that strtol works right even if number is at end of the input.\n    *input.end() = '\\0';\n    char* p = input.begin();\n    TextSlice& out = *TextSlice::allocate( 2*MAX_CHAR_PER_INPUT_SLICE );\n    char* q = out.begin();\n    for(;;) {\n        while( p<input.end() && !isdigit(*p) ) \n            *q++ = *p++; \n        if( p==input.end() ) \n            break;\n        long x = strtol( p, &p, 10 );\n        // Note: no overflow checking is needed here, as we have twice the \n        // input string length, but the square of a non-negative integer n \n        // cannot have more than twice as many digits as n.\n        long y = x*x; \n        sprintf(q,\"%ld\",y);\n        q = strchr(q,0);\n    }\n    out.set_end(q);\n    input.free();\n    return &out;\n}\n         \n//! Filter that writes each buffer to a file.\nclass MyOutputFilter: public tbb::filter {\n    FILE* my_output_file;\npublic:\n    MyOutputFilter( FILE* output_file );\n    void* operator()( void* item ) /*override*/;\n};\n\nMyOutputFilter::MyOutputFilter( FILE* output_file ) : \n    tbb::filter(serial_in_order),\n    my_output_file(output_file)\n{\n}\n\nvoid* MyOutputFilter::operator()( void* item ) {\n    TextSlice& out = *static_cast<TextSlice*>(item);\n    size_t n = fwrite( out.begin(), 1, out.size(), my_output_file );\n    if( n!=out.size() ) {\n        fprintf(stderr,\"Can't write into file '%s'\\n\", OutputFileName.c_str());\n        exit(1);\n    }\n    out.free();\n    return NULL;\n}\n\nbool silent = false;\n\nint run_pipeline( int nthreads )\n{\n    FILE* input_file = fopen( InputFileName.c_str(), \"r\" );\n    if( !input_file ) {\n        throw std::invalid_argument( (\"Invalid input file name: \"+InputFileName).c_str() );\n        return 0;\n    }\n    FILE* output_file = fopen( OutputFileName.c_str(), \"w\" );\n    if( !output_file ) {\n        throw std::invalid_argument( (\"Invalid output file name: \"+OutputFileName).c_str() );\n        return 0;\n    }\n\n    // Create the pipeline\n    tbb::pipeline pipeline;\n\n    // Create file-reading writing stage and add it to the pipeline\n    MyInputFilter input_filter( input_file );\n    pipeline.add_filter( input_filter );\n\n    // Create squaring stage and add it to the pipeline\n    MyTransformFilter transform_filter; \n    pipeline.add_filter( transform_filter );\n\n    // Create file-writing stage and add it to the pipeline\n    MyOutputFilter output_filter( output_file );\n    pipeline.add_filter( output_filter );\n\n    // Run the pipeline\n    tbb::tick_count t0 = tbb::tick_count::now();\n    // Need more than one token in flight per thread to keep all threads \n    // busy; 2-4 works\n    pipeline.run( nthreads*4 );\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    fclose( output_file );\n    fclose( input_file );\n\n    if ( !silent ) printf(\"time = %g\\n\", (t1-t0).seconds());\n\n    return 1;\n}\n\nint main( int argc, char* argv[] ) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads, 0 );\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(InputFileName,\"input-file\",\"input file name\")\n            .positional_arg(OutputFileName,\"output-file\",\"output file name\")\n            .positional_arg(MAX_CHAR_PER_INPUT_SLICE, \"max-slice-size\",\"the maximum number of characters in one slice\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            );\n        generate_if_needed( InputFileName.c_str() );\n\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p=threads.step(p) ) {\n                if ( !silent ) printf(\"threads = %d \", p);\n                tbb::task_scheduler_init init(p);\n                if(!run_pipeline (p))\n                    return 1;\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and parallel version\n            { // serial run\n                if ( !silent ) printf(\"serial run   \");\n                tbb::task_scheduler_init init_serial(1);\n                if(!run_pipeline (1))\n                    return 1;\n            }\n            { // parallel run (number of threads is selected automatically)\n                if ( !silent ) printf(\"parallel run \");\n                tbb::task_scheduler_init init_parallel;\n                if(!run_pipeline (init_parallel.default_num_threads()))\n                    return 1;\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task scheduler interface</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on task scheduler interface</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use the raw task scheduler.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"tree_sum/readme.html\">tree_sum</a>\n\t\t\t\t<dd>Sum values in a tree.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=tree_sum\nARGS=\nPERF_RUN_ARGS=auto 100000000 silent\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc_debug -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\t$(run_cmd) ./$(PROG) stdmalloc $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/OptimizedParallelSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n#include \"tbb/task.h\"\n\nclass OptimizedSumTask: public tbb::task {\n    Value* const sum;\n    TreeNode* root;\n    bool is_continuation;\n    Value x, y;\npublic:\n    OptimizedSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_), is_continuation(false) {\n    }\n    tbb::task* execute() /*override*/ {\n        tbb::task* next = NULL;\n        if( !is_continuation ) {\n            if( root->node_count<1000 ) {\n                *sum = SerialSumTree(root);\n            } else {\n                // Create tasks before spawning any of them.\n                tbb::task* a = NULL;\n                tbb::task* b = NULL;\n                if( root->left )\n                    a = new( allocate_child() ) OptimizedSumTask(root->left,&x);\n                if( root->right )\n                    b = new( allocate_child() ) OptimizedSumTask(root->right,&y);\n                recycle_as_continuation();\n                is_continuation = true;\n                set_ref_count( (a!=NULL)+(b!=NULL) );\n                if( a ) {\n                    if( b ) spawn(*b);\n                } else \n                    a = b;\n                next = a;\n            }\n        } else {\n            *sum = root->value;\n            if( root->left ) *sum += x;\n            if( root->right ) *sum += y;\n        } \n        return next;\n    }\n};\n\nValue OptimizedParallelSumTree( TreeNode* root ) {\n    Value sum;\n    OptimizedSumTask& a = *new(tbb::task::allocate_root()) OptimizedSumTask(root,&sum);\n    tbb::task::spawn_root_and_wait(a);\n    return sum;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/SerialSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n\nValue SerialSumTree( TreeNode* root ) {\n    Value result = root->value;\n    if( root->left )\n        result += SerialSumTree(root->left);\n    if( root->right )\n        result += SerialSumTree(root->right);\n    return result;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/SimpleParallelSumTree.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n#include \"tbb/task.h\"\n\nclass SimpleSumTask: public tbb::task {\n    Value* const sum;\n    TreeNode* root;\npublic:\n    SimpleSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_) {}\n    task* execute() /*override*/ {\n        if( root->node_count<1000 ) {\n            *sum = SerialSumTree(root);\n        } else {\n            Value x, y;\n            int count = 1; \n            tbb::task_list list;\n            if( root->left ) {\n                ++count;\n                list.push_back( *new( allocate_child() ) SimpleSumTask(root->left,&x) );\n            }\n            if( root->right ) {\n                ++count;\n                list.push_back( *new( allocate_child() ) SimpleSumTask(root->right,&y) );\n            }\n            // Argument to set_ref_count is one more than size of the list,\n            // because spawn_and_wait_for_all expects an augmented ref_count.\n            set_ref_count(count);\n            spawn_and_wait_for_all(list);\n            *sum = root->value;\n            if( root->left ) *sum += x;\n            if( root->right ) *sum += y;\n        }\n        return NULL;\n    }\n};\n\nValue SimpleParallelSumTree( TreeNode* root ) {\n    Value sum;\n    SimpleSumTask& a = *new(tbb::task::allocate_root()) SimpleSumTask(root,&sum);\n    tbb::task::spawn_root_and_wait(a);\n    return sum;\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/TreeMaker.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef TREE_MAKER_H_\n#define TREE_MAKER_H_\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task.h\"\n\nstatic double Pi = 3.14159265358979;\n\nconst bool tbbmalloc = true;\nconst bool stdmalloc = false;\n\ntemplate<bool use_tbbmalloc>\nclass TreeMaker {\n\n    class SubTreeCreationTask: public tbb::task {\n        TreeNode*& my_root;\n        bool is_continuation;\n        typedef TreeMaker<use_tbbmalloc> MyTreeMaker;\n\n    public:\n        SubTreeCreationTask( TreeNode*& root, long number_of_nodes ) : my_root(root), is_continuation(false) {\n            my_root = MyTreeMaker::allocate_node();\n            my_root->node_count = number_of_nodes;\n            my_root->value = Value(Pi*number_of_nodes);\n        }\n\n        tbb::task* execute() /*override*/ {\n            tbb::task* next = NULL;\n            if( !is_continuation ) {\n                long subtree_size = my_root->node_count - 1;\n                if( subtree_size<1000 ) { /* grainsize */\n                    my_root->left  = MyTreeMaker::do_in_one_thread(subtree_size/2);\n                    my_root->right = MyTreeMaker::do_in_one_thread(subtree_size - subtree_size/2);\n                } else {\n                    // Create tasks before spawning any of them.\n                    tbb::task* a = new( allocate_child() ) SubTreeCreationTask(my_root->left,subtree_size/2);\n                    tbb::task* b = new( allocate_child() ) SubTreeCreationTask(my_root->right,subtree_size - subtree_size/2);\n                    recycle_as_continuation();\n                    is_continuation = true;\n                    set_ref_count(2);\n                    spawn(*b);\n                    next = a;\n                }\n            } \n            return next;\n        }\n    };\n\npublic:\n    static TreeNode* allocate_node() {\n        return use_tbbmalloc? tbb::scalable_allocator<TreeNode>().allocate(1) : new TreeNode;\n    }\n\n    static TreeNode* do_in_one_thread( long number_of_nodes ) {\n        if( number_of_nodes==0 ) {\n            return NULL;\n        } else {\n            TreeNode* n = allocate_node();\n            n->node_count = number_of_nodes;\n            n->value = Value(Pi*number_of_nodes);\n            --number_of_nodes;\n            n->left  = do_in_one_thread( number_of_nodes/2 ); \n            n->right = do_in_one_thread( number_of_nodes - number_of_nodes/2 );\n            return n;\n        }\n    }\n\n    static TreeNode* do_in_parallel( long number_of_nodes ) {\n        TreeNode* root_node;\n        SubTreeCreationTask& a = *new(tbb::task::allocate_root()) SubTreeCreationTask(root_node, number_of_nodes);\n        tbb::task::spawn_root_and_wait(a);\n        return root_node;\n    }\n\n    static TreeNode* create_and_time( long number_of_nodes, bool silent=false ) {\n        tbb::tick_count t0, t1;\n        TreeNode* root = allocate_node();\n        root->node_count = number_of_nodes;\n        root->value = Value(Pi*number_of_nodes);\n        --number_of_nodes;\n\n        t0 = tbb::tick_count::now();\n        root->left  = do_in_one_thread( number_of_nodes/2 );\n        t1 = tbb::tick_count::now();\n        if ( !silent ) printf (\"%24s: time = %.1f msec\\n\", \"half created serially\", (t1-t0).seconds()*1000);\n\n        t0 = tbb::tick_count::now();\n        root->right = do_in_parallel( number_of_nodes - number_of_nodes/2 );\n        t1 = tbb::tick_count::now();\n        if ( !silent ) printf (\"%24s: time = %.1f msec\\n\", \"half done in parallel\", (t1-t0).seconds()*1000);\n\n        return root;\n    }\n};\n\n#endif // TREE_MAKER_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\ntypedef float Value;\n\nstruct TreeNode {\n    //! Pointer to left subtree\n    TreeNode* left; \n    //! Pointer to right subtree\n    TreeNode* right;\n    //! Number of nodes in this subtree, including this node.\n    long node_count;\n    //! Value associated with the node.\n    Value value;\n};\n\nValue SerialSumTree( TreeNode* root );\nValue SimpleParallelSumTree( TreeNode* root );\nValue OptimizedParallelSumTree( TreeNode* root );\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"common.h\"\n\n#include <cstdlib>\n#include <cstdio>\n#include <cstring>\n\n// The performance of this example can be significantly better when\n// the objects are allocated by the scalable_allocator instead of the\n// default \"operator new\".  The reason is that the scalable_allocator\n// typically packs small objects more tightly than the default \"operator new\",\n// resulting in a smaller memory footprint, and thus more efficient use of\n// cache and virtual memory.  Also the scalable_allocator works faster for\n// multi-threaded allocations.\n//\n// Pass stdmalloc as the 1st command line parameter to use the default \"operator new\"\n// and see the performance difference.\n#include \"tbb/scalable_allocator.h\"\n#include \"TreeMaker.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"../../common/utility/utility.h\"\n\nusing namespace std;\n\nvoid Run( const char* which, Value(*SumTree)(TreeNode*), TreeNode* root, bool silent) {\n    tbb::tick_count t0;\n    if ( !silent ) t0 = tbb::tick_count::now();\n    Value result = SumTree(root);\n    if ( !silent ) printf (\"%24s: time = %.1f msec, sum=%g\\n\", which, (tbb::tick_count::now()-t0).seconds()*1000, result);\n}\n\nint main( int argc, const char *argv[] ) {\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value\n        // The example interprets 0 threads as \"run serially, then fully subscribed\"\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads, 0 );\n        long number_of_nodes = 10000000;\n        bool silent = false;\n        bool use_stdmalloc = false;\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(number_of_nodes,\"number-of-nodes\",\"the number of nodes\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(use_stdmalloc,\"stdmalloc\",\"use standard allocator\")\n        );\n\n        TreeNode* root;\n        { // In this scope, TBB will use default number of threads for tree creation\n            tbb::task_scheduler_init init;\n\n            if( use_stdmalloc ) {\n                if ( !silent ) printf(\"Tree creation using standard operator new\\n\");\n                root = TreeMaker<stdmalloc>::create_and_time( number_of_nodes, silent );\n            } else {\n                if ( !silent ) printf(\"Tree creation using TBB scalable allocator\\n\");\n                root = TreeMaker<tbbmalloc>::create_and_time( number_of_nodes, silent );\n            }\n        }\n\n        // Warm up caches\n        SerialSumTree(root);\n        if ( !silent ) printf(\"Calculations:\\n\");\n        if ( threads.first ) {\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {\n                if ( !silent ) printf(\"threads = %d\\n\", p );\n                tbb::task_scheduler_init init( p );\n                Run ( \"SimpleParallelSumTree\", SimpleParallelSumTree, root, silent );\n                Run ( \"OptimizedParallelSumTree\", OptimizedParallelSumTree, root, silent );\n            }\n        } else { // Number of threads wasn't set explicitly. Run serial and two parallel versions\n            Run ( \"SerialSumTree\", SerialSumTree, root, silent );\n            tbb::task_scheduler_init init;\n            Run ( \"SimpleParallelSumTree\", SimpleParallelSumTree, root, silent );\n            Run ( \"OptimizedParallelSumTree\", OptimizedParallelSumTree, root, silent );\n        }\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    }catch(std::exception& e){\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task/tree_sum/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Tree_sum sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Tree_sum sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that sums values in a tree.\n\t<br><br>\n\t\tThe example exhibits some speedup, but not a lot,  because it quickly saturates \n\t\tthe system bus on a multiprocessor.  For good speedup, there needs to be \n\t\tmore computation cycles per memory reference.  The point of the example \n\t\tis to teach how to use the raw task interface, so the computation is\n\t\tdeliberately trivial.\n\t<br><br>\n\t\tThe performance of this example is better when objects are allocated\n\t\tby the scalable_allocator instead of\n\t\tthe default \"operator new\".  The reason is that the scalable_allocator typically\n\t\tpacks small objects more tightly than the default \"operator new\", resulting in\n\t\ta smaller memory footprint, and thus more efficient use of cache and virtual memory.\n\t\tIn addition, the scalable_allocator performs better for multi-threaded allocations.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"SerialSumTree.cpp\">SerialSumTree.cpp</a>\n\t\t\t\t<dd>Sums sequentially.\n\t\t\t\t<dt><a href=\"SimpleParallelSumTree.cpp\">SimpleParallelSumTree.cpp</a><dt>\n\t\t\t\t<dd>Sums in parallel without any fancy tricks.\n\t\t\t\t<dt><a href=\"OptimizedParallelSumTree.cpp\">OptimizedParallelSumTree.cpp</a><dt>\n\t\t\t\t<dd>Sums in parallel, using \"recycling\" and \"continuation-passing\" tricks. \n\t\t\t\t\tIn this case, it is only slightly faster than the simple version.\n\t\t\t\t<dt><a href=\"common.h\">common.h</a>\n\t\t\t\t<dd>Shared declarations.\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the algorithm.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>tree_sum <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>tree_sum [<i>n-of-threads</i>=value] [<i>number-of-nodes</i>=value] [<i>silent</i>] [<i>stdmalloc</i>]</tt>\n\t\t\t\t<dt><tt>tree_sum [<i>n-of-threads</i> [<i>number-of-nodes</i>]] [<i>silent</i>] [<i>stdmalloc</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for the default.<br>\n\t\t\t\t\t<i>number-of-nodes</i> is the number of nodes in the tree.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>stdmalloc</i> - causes the default \"operator new\" to be used for memory allocations instead of the scalable_allocator.<br>\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>tree_sum&nbsp;4&nbsp;100000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nNAME=Fractal\nARGS=auto\nPERF_RUN_ARGS=auto 1 1000000 silent\nLIGHT_ARGS=auto 1 1000\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nLIBS+= -lrt \nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\ninclude ../../common/gui/Makefile.gmake\n\nSOURCES= ../../common/gui/$(UI)video.cpp fractal.cpp main.cpp\n\noverride CXXFLAGS += $(UI_CXXFLAGS)\n\nall:\trelease test\n\nresources:\nifeq ($(UI),mac)\n\tmkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS\n\tcp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist\n\tcp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents\n\tcp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj\nendif # macOS*\n\nrelease: $(SOURCES) resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb $(LIBS)\n\ndebug: resources\nifeq ($(UI),mac)\n\t$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)\nendif # macOS\n\t$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(EXE) *.o *.d\nifeq ($(UI),mac)\n\trm -rf $(NAME).app\nendif\n\ntest:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(ARGS)\nendif\n\nlight_test:\nifeq ($(UI),mac)\n\texport DYLD_LIBRARY_PATH=\"$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)\"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nelse\n\t$(run_cmd) ./$(EXE) $(LIGHT_ARGS)\nendif\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(EXE) $(PERF_RUN_ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/fractal.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"fractal.h\"\n\n#include \"tbb/parallel_for.h\"\n#include \"tbb/blocked_range2d.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_arena.h\"\n#include \"tbb/task_group.h\"\n#include \"tbb/tick_count.h\"\n\n#include <math.h>\n#include <stdio.h>\n\n// Included for __TBB_CPP11_LAMBDAS_PRESENT definition\n#include \"tbb/tbb_config.h\"\n\nvideo *v;\nextern bool silent;\nextern bool schedule_auto;\nextern int grain_size;\n\ncolor_t fractal::calc_one_pixel( int x0, int y0 ) const {\n    unsigned int iter;\n    double fx0, fy0, xtemp, x, y, mu;\n\n    color_t color;\n\n    fx0 = (double)x0 - (double) size_x / 2.0;\n    fy0 = (double)y0 - (double) size_y / 2.0;\n    fx0 = fx0 / magn + cx;\n    fy0 = fy0 / magn + cy;\n\n    iter = 0; x = 0; y = 0;\n    mu = 0;\n\n    while (((x*x + y*y) <= 4) && (iter < max_iterations)) {\n        xtemp = x*x - y*y + fx0;\n        y = 2*x*y + fy0;\n        x = xtemp;\n        mu += exp(-sqrt(x*x+y*y));\n        iter++;\n    }\n\n    if (iter == max_iterations) {\n        // point corresponds to the mandelbrot set\n        color = v->get_color(255, 255, 255);\n        return color;\n    }\n\n    int b = (int)(256*mu);\n    int g = (b/8);\n    int r = (g/16);\n\n    b = b>255 ? 255 : b;\n    g = g>255 ? 255 : g;\n    r = r>255 ? 255 : r;\n\n    color = v->get_color(r, g, b);\n    return color;\n}\n\nvoid fractal::clear() {\n    drawing_area area( off_x, off_y, size_x, size_y, dm ) ;\n\n    // fill the rendering area with black color\n    for (int y=0; y<size_y; ++y) {\n        area.set_pos( 0, y );\n        for (int x=0; x<size_x; ++x) {\n            area.put_pixel( v->get_color(0, 0, 0) );\n        }\n    }\n}\n\nvoid fractal::draw_border( bool is_active ) {\n    color_t color = is_active ? v->get_color(0, 255, 0) // green color\n                                : v->get_color(96, 128, 96); // green-gray color\n\n    // top border\n    drawing_area area0( off_x-1, off_y-1, size_x+2, 1, dm );\n    for (int i=-1; i<size_x+1; ++i)\n        area0.put_pixel(color);\n    // bottom border\n    drawing_area area1( off_x-1, off_y+size_y, size_x+2, 1, dm );\n    for (int i=-1; i<size_x+1; ++i)\n        area1.put_pixel(color);\n    // left border\n    drawing_area area2( off_x-1, off_y, 1, size_y+2, dm );\n    for (int i=0; i<size_y; ++i)\n        area2.set_pixel(0, i, color);\n    // right border\n    drawing_area area3( size_x+off_x, off_y, 1, size_y+2, dm );\n    for (int i=0; i<size_y; ++i)\n        area3.set_pixel(0, i, color);\n}\n\nvoid fractal::render_rect( int x0, int y0, int x1, int y1 ) const {\n    // render the specified rectangle area\n    drawing_area area(off_x+x0, off_y+y0, x1-x0, y1-y0, dm);\n    for ( int y=y0; y<y1; ++y ) {\n        area.set_pos( 0, y-y0 );\n        for ( int x=x0; x<x1; ++x ) {\n            area.put_pixel( calc_one_pixel( x, y ) );\n        }\n    }\n}\n\nclass fractal_body {\n    fractal &f;\npublic:\n    void operator()( tbb::blocked_range2d<int> &r ) const {\n        if ( v->next_frame() )\n            f.render_rect( r.cols().begin(), r.rows().begin(), r.cols().end(), r.rows().end() );\n    }\n\n    fractal_body( fractal &_f ) : f(_f) {\n    }\n};\n\nvoid fractal::render( tbb::task_group_context &context ) {\n    // Make copy of fractal object and render fractal with parallel_for with\n    // the provided context and partitioner chosen by schedule_auto.\n    // Updates to fractal are not reflected in the render.\n    fractal f = *this;\n    fractal_body body(f);\n\n    if( schedule_auto )\n        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),\n                body, tbb::auto_partitioner(), context);\n    else\n        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),\n                body, tbb::simple_partitioner(), context);\n}\n\nvoid fractal::run( tbb::task_group_context &context ) {\n    clear();\n    context.reset();\n    render( context );\n}\n\nbool fractal::check_point( int x, int y ) const {\n    return x >= off_x && x <= off_x+size_x &&\n            y >= off_y && y <= off_y+size_y;\n}\n\nvoid fractal_group::calc_fractal( int num ) {\n    // calculate the fractal\n    fractal &f = num ? f1 : f0;\n\n    tbb::tick_count t0 = tbb::tick_count::now();\n    while ( v->next_frame() && num_frames[num] != 0 ) {\n        f.run( context[num] );\n        if ( num_frames[num]>0 ) num_frames[num] -= 1;\n    }\n    tbb::tick_count t1 = tbb::tick_count::now();\n\n    if ( !silent ) {\n        printf(\"  %s fractal finished. Time: %g\\n\", num ? \"Second\" : \"First\", (t1-t0).seconds());\n    }\n}\n\nvoid fractal_group::set_priorities() {\n    // set the high priority for the active area and the normal priority for another area\n    context[active].set_priority( tbb::priority_high );\n    context[active^1].set_priority( tbb::priority_low );\n}\n\nvoid fractal_group::switch_priorities( int new_active ) {\n    if( new_active!=-1 ) active = new_active;\n    else                 active = 1-active; // assumes 'active' is only 0 or 1\n    set_priorities();\n    draw_borders();\n}\n\nvoid fractal_group::set_num_frames_at_least( int n ) {\n    if ( num_frames[0]<n ) num_frames[0] = n;\n    if ( num_frames[1]<n ) num_frames[1] = n;\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nclass task_group_body {\n    fractal_group &fg;\npublic:\n    task_group_body(fractal_group &_fg) : fg(_fg) { }\n\n    void operator() () const { fg.calc_fractal( 1 ); }\n};\n\nclass arena_body {\n    task_group_body &tg_body;\n    tbb::task_group &task_group;\npublic:\n    arena_body( task_group_body &_tg_body, tbb::task_group &_task_group )\n        :  tg_body( _tg_body ), task_group( _task_group )  { }\n\n    void operator() () const { task_group.run( tg_body ); }\n};\n\nclass arena_body_wait {\n    tbb::task_group &group;\npublic:\n    arena_body_wait( tbb::task_group &gr ) : group(gr) { }\n\n    void operator() () const { group.wait(); }\n};\n#endif\n\nvoid fractal_group::run( bool create_second_fractal ) {\n    // initialize task scheduler\n    tbb::task_scheduler_init init( num_threads );\n\n    // create contexts to manage fractal priorities\n    context = new tbb::task_group_context[2];\n\n    set_priorities();\n    draw_borders();\n\n    tbb::task_arena arena;\n    tbb::task_group gr;\n\n    // the second fractal is calculating on separated thread\n    if ( create_second_fractal ) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        arena.execute( [&] {\n            gr.run( [&] { calc_fractal( 1 ); } );\n        } );\n#else\n        task_group_body tg_body( *this );\n        arena_body a_body( tg_body, gr );\n        arena.execute( a_body );\n#endif\n    }\n\n    // calculate the first fractal\n    calc_fractal( 0 );\n\n    if ( create_second_fractal ) {\n#if __TBB_CPP11_LAMBDAS_PRESENT\n        // wait for second fractal\n        arena.execute( [&] { gr.wait(); } );\n#else\n        arena.execute( arena_body_wait( gr ) );\n#endif\n    }\n\n    delete[] context;\n}\n\nvoid fractal_group::draw_borders() {\n    f0.draw_border( active==0 );\n    f1.draw_border( active==1 );\n}\n\nfractal_group::fractal_group( const drawing_memory &_dm, int _num_threads, unsigned int _max_iterations, int _num_frames ) : f0(_dm), f1(_dm), num_threads(_num_threads) {\n    // set rendering areas\n    f0.size_x = f1.size_x = _dm.sizex/2-4;\n    f0.size_y = f1.size_y = _dm.sizey-4;\n    f0.off_x = f0.off_y = f1.off_y = 2;\n    f1.off_x = f0.size_x+4+2;\n\n    // set fractals parameters\n    f0.cx = -0.6f; f0.cy = 0.0f; f0.magn = 200.0f;\n    f1.cx = -0.6f; f1.cy = 0.0f; f1.magn = 200.0f;\n    f0.max_iterations = f1.max_iterations = _max_iterations;\n\n    // initially the first fractal is active\n    active = 0;\n\n    num_frames[0] = num_frames[1] = _num_frames;\n}\n\nvoid fractal_group::mouse_click( int x, int y ) {\n    // assumption that the point is not inside any fractal area\n    int new_active = -1;\n\n    if ( f0.check_point( x, y ) ) {\n        // the point is inside the first fractal area\n        new_active = 0;\n    } else if ( f1.check_point( x, y ) ) {\n        // the point is inside the second fractal area\n        new_active = 1;\n    }\n\n    if ( new_active != -1 && new_active != active ) {\n        switch_priorities( new_active );\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/fractal.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FRACTAL_H_\n#define FRACTAL_H_\n\n#include \"../../common/gui/video.h\"\n\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/atomic.h\"\n\n//! Fractal class\nclass fractal {\n    //! Left corner of the fractal area\n    int off_x, off_y;\n    //! Size of the fractal area\n    int size_x, size_y;\n\n    //! Fractal properties\n    float cx, cy;\n    float magn;\n    float step;\n    unsigned int max_iterations;\n\n    //! Drawing memory object for rendering\n    const drawing_memory &dm;\n\n    //! One pixel calculation routine\n    color_t calc_one_pixel( int x, int y ) const;\n    //! Clears the fractal area\n    void clear();\n    //! Draws the border around the fractal area\n    void draw_border( bool is_active );\n    //! Renders the fractal\n    void render( tbb::task_group_context &context );\n    //! Check if the point is inside the fractal area\n    bool check_point( int x, int y ) const;\n\npublic:\n    //! Constructor\n    fractal( const drawing_memory &dm ) : step(0.2), dm(dm) {\n#if _MSC_VER && _WIN64 && !__INTEL_COMPILER\n        // Workaround for MSVC x64 compiler issue\n        volatile int i=0;\n#endif\n    }\n    //! Runs the fractal calculation\n    void run( tbb::task_group_context &context );\n    //! Renders the fractal rectangular area\n    void render_rect( int x0, int y0, int x1, int y1 ) const;\n\n    void move_up()   { cy += step; }\n    void move_down() { cy -= step; }\n    void move_left() { cx += step; }\n    void move_right(){ cx -= step; }\n\n    void zoom_in() { magn *= 2.; step /= 2.; }\n    void zoom_out(){ magn /= 2.; step *= 2.; }\n\n    void quality_inc() { max_iterations += max_iterations/2; }\n    void quality_dec() { max_iterations -= max_iterations/2; }\n\n    friend class fractal_group;\n};\n\n//! The group of fractals\nclass fractal_group {\n    //! Fractals definition\n    fractal f0, f1;\n    //! Number of frames to calculate\n    tbb::atomic<int> num_frames[2];\n    //! Task group contexts to manage priorities\n    tbb::task_group_context *context;\n\n    //! Border type enumeration\n    enum BORDER_TYPE {\n        BORDER_INACTIVE = 0,\n        BORDER_ACTIVE\n    };\n\n    //! The number of the threads\n    int num_threads;\n    //! The active (high priority) fractal number\n    int active;\n\n    //! Draws the borders around the fractals\n    void draw_borders();\n    //! Sets priorities for fractals calculations\n    void set_priorities();\n\npublic:\n    //! Constructor\n    fractal_group( const drawing_memory &_dm,\n            int num_threads = tbb::task_scheduler_init::automatic,\n            unsigned int max_iterations = 100000, int num_frames = 1 );\n    //! Run calculation\n    void run( bool create_second_fractal=true );\n    //! Mouse event handler\n    void mouse_click( int x, int y );\n    //! Fractal calculation routine\n    void calc_fractal( int num );\n    //! Get number of threads\n    int get_num_threads() const { return num_threads; }\n    //! Reset the number of frames to be not less than the given value\n    void set_num_frames_at_least( int n );\n    //! Switches the priorities of two fractals\n    void switch_priorities( int new_active=-1 );\n    //! Get active fractal\n    fractal& get_active_fractal() { return  active ? f1 : f0; }\n\n    void active_fractal_zoom_in() {\n        get_active_fractal().zoom_in();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_zoom_out() {\n        get_active_fractal().zoom_out();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_quality_inc() {\n        get_active_fractal().quality_inc();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_quality_dec() {\n        get_active_fractal().quality_dec();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_up() {\n        get_active_fractal().move_up();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_down() {\n        get_active_fractal().move_down();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_left() {\n        get_active_fractal().move_left();\n        context[active].cancel_group_execution();\n    }\n    void active_fractal_move_right() {\n        get_active_fractal().move_right();\n        context[active].cancel_group_execution();\n    }\n};\n\n#endif /* FRACTAL_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/fractal_video.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef FRACTAL_VIDEO_H_\n#define FRACTAL_VIDEO_H_\n\n#include \"../../common/gui/video.h\"\n#include \"fractal.h\"\n\nextern video *v;\nextern bool single;\n\nclass fractal_video : public video\n{\n    fractal_group *fg;\n\nprivate:\n    void on_mouse( int x, int y, int key ) {\n        if( key == 1 ) {\n            if ( fg ) {\n                fg->set_num_frames_at_least(20);\n                fg->mouse_click( x, y );\n            }\n        }\n    }\n\n    void on_key( int key ) {\n        switch ( key&0xff ) {\n            case esc_key:\n                running = false; break;\n            case ' ': // space\n                if( fg ) fg->switch_priorities(); break;\n\n            case 'q':\n                if( fg ) fg->active_fractal_zoom_in(); break;\n            case 'e':\n                if( fg ) fg->active_fractal_zoom_out(); break;\n\n            case 'r':\n                if( fg ) fg->active_fractal_quality_inc(); break;\n            case 'f':\n                if( fg ) fg->active_fractal_quality_dec(); break;\n\n            case 'w':\n                if( fg ) fg->active_fractal_move_up(); break;\n            case 'a':\n                if( fg ) fg->active_fractal_move_left(); break;\n            case 's':\n                if( fg ) fg->active_fractal_move_down(); break;\n            case 'd':\n                if( fg ) fg->active_fractal_move_right(); break;\n        }\n        if( fg ) fg->set_num_frames_at_least(20);\n    }\n\n    void on_process() {\n        if ( fg ) {\n            fg->run( !single );\n        }\n    }\n\npublic:\n    fractal_video() :fg(0) {\n        title = \"Dynamic Priorities in TBB: Fractal Example\";\n        v = this;\n    }\n\n    void set_fractal_group( fractal_group &_fg ) {\n        fg = &_fg;\n    }\n};\n\n#endif /* FRACTAL_VIDEO_H_ */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/main.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#define VIDEO_WINMAIN_ARGS\n\n#include <stdio.h>\n#include <iostream>\n\n#include \"fractal.h\"\n#include \"fractal_video.h\"\n\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n\n#include \"../../common/utility/utility.h\"\n\nbool silent = false;\nbool single = false;\nbool schedule_auto = false;\nint grain_size = 8;\n\nint main(int argc, char *argv[])\n{\n    try{\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        // It is used for console mode for test with different number of threads and also has\n        // meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).\n        //                  threads.second - initialization value for scheduler\n        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads );\n        int num_frames = -1;\n        int max_iterations = 1000000;\n\n        // command line parsing\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(num_frames,\"n-of-frames\",\"number of frames the example processes internally\")\n            .positional_arg(max_iterations,\"max-of-iterations\",\"maximum number of the fractal iterations\")\n            .positional_arg(grain_size,\"grain-size\",\"the grain size value\")\n            .arg(schedule_auto, \"use-auto-partitioner\", \"use tbb::auto_partitioner\")\n            .arg(silent, \"silent\", \"no output except elapsed time\")\n            .arg(single, \"single\", \"process only one fractal\")\n        );\n\n        fractal_video video;\n\n        // video layer init\n        if ( video.init_window(1024, 512) ) {\n            video.calc_fps = false;\n            video.threaded = threads.first > 0;\n            // initialize fractal group\n            fractal_group fg( video.get_drawing_memory(), threads.last, max_iterations, num_frames );\n            video.set_fractal_group( fg );\n            // main loop\n            video.main_loop();\n        }\n        else if ( video.init_console() ) {\n            // in console mode we always have limited number of frames\n            num_frames = num_frames<0 ? 1 : num_frames;\n            for(int p = threads.first;  p <= threads.last; p = threads.step(p) ) {\n                if ( !silent ) printf(\"Threads = %d\\n\", p);\n                fractal_group fg( video.get_drawing_memory(), p, max_iterations, num_frames );\n                fg.run( !single );\n            }\n        }\n        video.terminate();\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n        return 0;\n    } catch ( std::exception& e ) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/fractal/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Fractal sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Fractal sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThe example calculates two classical Mandelbrot fractals with different priorities. \n\t<br><br>\n\t\tThe application window is divided into two areas where fractals are rendered. With mouse click on an area the user can change the priority of the calculating fractal. In the clicked area the fractal priority is changed to be \"high\" and the priority of the other fractal is changed to \"low\". The fractal with \"high\" priority we will call active.\n\t\tThe example also has the console mode but in this mode the priorities could not be changed during execution.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"main.cpp\">main.cpp</a>\n\t\t\t\t<dd>Main program which parses command line options and runs the fractals calculation in GUI or Console mode.\n\t\t\t\t<dt><a href=\"fractal.h\">fractal.h</a>\n\t\t\t\t<dd>Interfaces of fractal and fractal_group classes.\n\t\t\t\t<dt><a href=\"fractal.cpp\">fractal.cpp</a>\n\t\t\t\t<dd>Implementations of fractal and fractal_group classes.\n\t\t\t\t<dt><a href=\"fractal_video.h\">fractal_video.h</a>\n\t\t\t\t<dd>GUI mode support interface.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fractal <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>fractal [<i>n-of-threads=value</i>] [<i>n-of-frames=value</i>] [<i>max-of-iterations=value</i>] [<i>grain-size=value</i>] [<i>silent</i>] [<i>single</i>]</tt>\n\t\t\t\t<dt><tt>fractal [<i>n-of-threads</i> [<i>n-of-frames</i> [<i>max-of-iterations</i> [<i>grain-size</i>]]]] [<i>silent</i>] [<i>single</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>n-of-frames</i> is a number of frames the example processes internally.<br>\n\t\t\t\t\t<i>max-of-iterations</i> is a maximum number of the fractal iterations.<br>\n\t\t\t\t\t<i>grain-size</i> is an optional grain size, must be a positive integer. <br>\n\t\t\t\t\t<i>use-auto-partitioner</i> - use tbb::auto_partitioner.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>single</i> - process only one fractal.<br>\n\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small fractal iterations number and the desired number of threads, e.g., <tt>fractal&nbsp;4&nbsp;1&nbsp;10000</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Hot keys</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tThe following hot keys can be used in interactive execution mode when the example is compiled with the graphical user interface:\n\t\t\t</p>\n\t\t\t<dl>\n\t\t\t\t<dt>&lt;left mouse button&gt;\n\t\t\t\t<dd>Make the fractal active and change its priority to high\n\t\t\t\t<dt>&lt;space&gt;\n\t\t\t\t<dd>Switch priorities\n\t\t\t\t<dt>&lt;w&gt;\n\t\t\t\t<dd>Move the active fractal up\n\t\t\t\t<dt>&lt;a&gt;\n\t\t\t\t<dd>Move the active fractal to the left\n\t\t\t\t<dt>&lt;s&gt;\n\t\t\t\t<dd>Move the active fractal down\n\t\t\t\t<dt>&lt;d&gt;\n\t\t\t\t<dd>Move the active fractal to the right\n\t\t\t\t<dt>&lt;q&gt;\n\t\t\t\t<dd>Zoom in the active fractal\n\t\t\t\t<dt>&lt;e&gt;\n\t\t\t\t<dd>Zoom out the active fractal\n\t\t\t\t<dt>&lt;r&gt;\n\t\t\t\t<dd>Increase quality (count of iterations for each pixel) the active fractal\n\t\t\t\t<dt>&lt;f&gt;\n\t\t\t\t<dd>Decrease quality (count of iterations for each pixel) the active fractal\n\t\t\t\t<dt>&lt;esc&gt;\n\t\t\t\t<dd>Stop execution.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_arena/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task_arena feature</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on <code>task_arena</code> feature</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use the <code>task_arena</code> feature.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fractal/readme.html\">fractal</a>\n\t\t\t\t<dd>The example calculates two classical Mandelbrot fractals with different priorities.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on task_group interface</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks<br>Samples on <code>task_group</code> interface</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory has examples of how to use <code>task_group</code> interface.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sudoku/readme.html\">Sudoku</a>\n\t\t\t\t<dd>Compute all solutions for a Sudoku board.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=sudoku\nARGS=4 input1 verbose\nPERF_RUN_ARGS=auto input1 silent\n\n# icpc by default\nifneq (,$(shell which icc 2>/dev/null))\n    CXX=icpc\nendif\n\n# autodetect C++11 support\ninclude ../../common/examples-common.inc\n\nTBBLIB = -ltbb\nTBBLIB_DEBUG = -ltbb_debug\n\nifneq (,$(filter icc icpc,$(CXX)))\nifeq ($(offload), mic)\noverride CXXFLAGS += -D__TBB_MIC_OFFLOAD=1\n# Replace -ltbb with -tbb in the offload mode\nTBBLIB = -tbb\nTBBLIB_DEBUG += -offload-option,mic,ld,\"-ltbb_debug\"\nendif\nendif\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS) $(CXX0XFLAGS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS) $(CXX0XFLAGS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n\nperf_build: release\n\nperf_run:\n\t$(run_cmd) ./$(PROG) $(PERF_RUN_ARGS)\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/input1",
    "content": "1 0 0 9 0 0 0 8 0 0 8 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 5 2 1 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 8 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  1 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/input2",
    "content": "2 0 1 0 0 0 0 8 0 0 8 0 2 1 9 6 0 0 0 0 5 0 0 0 7 0 0 0 5 2 1 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 3 0 1 0 0 5 0 0 0 8 0 0 0 6\n\n\n\n\n\n\n2 0 1  0 0 0  0 8 0\n0 8 0  2 1 9  6 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  1 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 3 0  1 0 0\n5 0 0  0 8 0  0 0 6\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/input3",
    "content": "1 0 0 9 0 0 0 8 0 0 0 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 5 2 6 0 0 4 0 0 0 0 0 0 0 5 0 0 7 4 0 0 7 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 0 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 5 2  6 0 0  4 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  7 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/input4",
    "content": "1 0 0 9 0 0 0 8 0 0 0 0 2 0 0 0 0 0 0 0 5 0 0 0 7 0 0 0 0 2 6 0 0 0 0 0 0 0 0 0 0 5 0 0 7 4 0 0 0 0 0 0 3 0 0 3 0 0 0 2 0 0 5 0 0 0 0 0 0 1 0 0 5 0 0 0 1 0 0 0 0\n\n\n\n\n\n\n\n1 0 0  9 0 0  0 8 0\n0 0 0  2 0 0  0 0 0\n0 0 5  0 0 0  7 0 0\n\n0 0 2  6 0 0  0 0 0\n0 0 0  0 0 5  0 0 7\n4 0 0  0 0 0  0 3 0\n \n0 3 0  0 0 2  0 0 5\n0 0 0  0 0 0  1 0 0\n5 0 0  0 1 0  0 0 0\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Sudoku sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Sudoku sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains a simple example that finds all solutions to a\n\t\tSudoku board.\n\t<br><br>\n\t\tIt uses a straightforward state-space search algorithm\n\t\tthat exhibits OR-parallelism.  It can be optionally run until it\n\t\tobtains just the first solution. The point of the example is to teach\n\t\thow to use the task_group interface.\n\t<br><br>\n\t\tThe example can be built in the offload version to run on Intel&reg; Many Integrated Core (Intel&reg; MIC) Architecture based coprocessor (see <a href=\"../../index.html\">build instructions</a>).\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"sudoku.cpp\">sudoku.cpp</a>\n\t\t\t\t<dd>Driver.\n\t\t\t\t<dt><a href=\"input1\">input1</a>\n\t\t\t\t<dd>Sample input file with modest number of solutions.\n\t\t\t\t<dt><a href=\"input2\">input2</a>\n\t\t\t\t<dd>Sample input file with small number of solutions.\n\t\t\t\t<dt><a href=\"input3\">input3</a>\n\t\t\t\t<dd>Sample input file with larger number of solutions.\n\t\t\t\t<dt><a href=\"input4\">input4</a>\n\t\t\t\t<dd>Sample input file with very large number of solutions.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a>\n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel&reg; C++ Compiler (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>sudoku <i>-h</i></tt>\n\t\t\t\t<dd>Prints the help for command line options\n\t\t\t\t<dt><tt>sudoku [<i>n-of-threads</i>=value] [<i>filename</i>=value] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt>\n\t\t\t\t<dt><tt>sudoku [n-of-threads [filename]] [<i>verbose</i>] [<i>silent</i>] [<i>find-one</i>]</tt> \n\t\t\t\t<dd><i>n-of-threads</i> is the number of threads to use; a range of the form <i>low</i>[:<i>high</i>], where low and optional high are non-negative integers or 'auto' for a platform-specific default number.<br>\n\t\t\t\t\t<i>filename</i> is an input filename.<br>\n\t\t\t\t\t<i>verbose</i> - prints the first solution.<br>\n\t\t\t\t\t<i>silent</i> - no output except elapsed time.<br>\n\t\t\t\t\t<i>find-one</i> - stops after finding first solution.<br>\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Parallel Inspector:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small problem size and the desired number of threads, e.g., <tt>sudoku&nbsp;4&nbsp;input2</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/task_group/sudoku/sudoku.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"../../common/utility/utility.h\"\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (push,target(mic))\n#endif // __TBB_MIC_OFFLOAD\n\n#include <cstdio>\n#include <cstdlib>\n#include <string>\n\n#include \"tbb/atomic.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/task_group.h\"\n\n#pragma warning(disable: 4996)\n\nconst unsigned BOARD_SIZE=81;\nconst unsigned BOARD_DIM=9;\n\nusing namespace tbb;\nusing namespace std;\n\ntbb::atomic<unsigned> nSols;\nbool find_one = false;\nbool verbose = false;\nunsigned short init_values[BOARD_SIZE] = {1,0,0,9,0,0,0,8,0,0,8,0,2,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,5,2,1,0,0,4,0,0,0,0,0,0,0,5,0,0,7,4,0,0,7,0,0,0,3,0,0,3,0,0,0,2,0,0,5,0,0,0,0,0,0,1,0,0,5,0,0,0,1,0,0,0,0};\ntask_group *g;\ndouble solve_time;\n\ntypedef struct {\n    unsigned short solved_element;\n    unsigned potential_set;\n} board_element;\n\nvoid read_board(const char *filename) {\n    FILE *fp;\n    int input;\n    fp = fopen(filename, \"r\");\n    if (!fp) { \n        fprintf(stderr, \"sudoku: Could not open input file '%s'.\\n\", filename);\n        exit(1);\n    }\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (fscanf(fp, \"%d\", &input))\n            init_values[i] = input;\n        else {\n            fprintf(stderr, \"sudoku: Error in input file at entry %d, assuming 0.\\n\", i);\n            init_values[i] = 0;\n        }\n    }\n    fclose(fp);\n}\n\nvoid print_board(board_element *b) {\n    for (unsigned row=0; row<BOARD_DIM; ++row) {\n        for (unsigned col=0; col<BOARD_DIM; ++col) {\n            printf(\" %d\", b[row*BOARD_DIM+col].solved_element);\n            if (col==2 || col==5) printf(\" |\");\n        }\n        printf(\"\\n\");\n        if (row==2 || row==5) printf(\" ---------------------\\n\");\n    }\n}\n\nvoid print_potential_board(board_element *b) {\n    for (unsigned row=0; row<BOARD_DIM; ++row) {\n        for (unsigned col=0; col<BOARD_DIM; ++col) {\n            if (b[row*BOARD_DIM+col].solved_element) \n                printf(\"  %4d \", b[row*BOARD_DIM+col].solved_element);\n            else\n                printf(\" [%4d]\", b[row*BOARD_DIM+col].potential_set);\n            if (col==2 || col==5) printf(\" |\");\n        }\n        printf(\"\\n\");\n        if (row==2 || row==5)\n            printf(\" ------------------------------------------------------------------\\n\");\n    }\n}\n\nvoid init_board(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        b[i].solved_element = b[i].potential_set = 0;\n}\n\nvoid init_board(board_element *b, unsigned short arr[81]) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        b[i].solved_element = arr[i]; \n        b[i].potential_set = 0;\n    }\n}\n\nvoid init_potentials(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        b[i].potential_set = 0;\n}\n\nvoid copy_board(board_element *src, board_element *dst) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i)\n        dst[i].solved_element = src[i].solved_element;\n}\n\nbool fixed_board(board_element *b) {\n    for (int i=BOARD_SIZE-1; i>=0; --i)\n        if (b[i].solved_element==0) return false;\n    return true;\n}\n\nbool in_row(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    for (unsigned c=0; c<BOARD_DIM; ++c)\n        if (c!=col && b[row*BOARD_DIM+c].solved_element==p)  return true;\n    return false;\n}\n\nbool in_col(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    for (unsigned r=0; r<BOARD_DIM; ++r)\n        if (r!=row && b[r*BOARD_DIM+col].solved_element==p)  return true;\n    return false;\n}\n\nbool in_block(board_element *b, unsigned row, unsigned col, unsigned short p) {\n    unsigned b_row = row/3 * 3, b_col = col/3 * 3;\n    for (unsigned i=b_row; i<b_row+3; ++i)\n        for (unsigned j=b_col; j<b_col+3; ++j)\n            if (!(i==row && j==col) && b[i*BOARD_DIM+j].solved_element==p) return true;\n    return false;\n}\n\nvoid calculate_potentials(board_element *b) {\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        b[i].potential_set = 0;\n        if (!b[i].solved_element) { // element is not yet fixed\n            unsigned row = i/BOARD_DIM, col = i%BOARD_DIM;\n            for (unsigned potential=1; potential<=BOARD_DIM; ++potential) {\n                if (!in_row(b, row, col, potential) && !in_col(b, row, col, potential)\n                    && !in_block(b, row, col, potential))\n                    b[i].potential_set |= 1<<(potential-1);\n            }\n        }\n    }\n}\n\nbool valid_board(board_element *b) {\n    bool success=true;\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (success && b[i].solved_element) { // element is fixed\n            unsigned row = i/BOARD_DIM, col = i%BOARD_DIM;\n            if (in_row(b, row, col, b[i].solved_element) || in_col(b, row, col, b[i].solved_element) || in_block(b, row, col, b[i].solved_element))\n                success = false;\n        }\n    }\n    return success;\n}\n\nbool examine_potentials(board_element *b, bool *progress) {\n    bool singletons = false;\n    for (unsigned i=0; i<BOARD_SIZE; ++i) {\n        if (b[i].solved_element==0 && b[i].potential_set==0) // empty set\n            return false;\n        switch (b[i].potential_set) {\n        case 1:   { b[i].solved_element = 1; singletons=true; break; }\n        case 2:   { b[i].solved_element = 2; singletons=true; break; }\n        case 4:   { b[i].solved_element = 3; singletons=true; break; }\n        case 8:   { b[i].solved_element = 4; singletons=true; break; }\n        case 16:  { b[i].solved_element = 5; singletons=true; break; }\n        case 32:  { b[i].solved_element = 6; singletons=true; break; }\n        case 64:  { b[i].solved_element = 7; singletons=true; break; }\n        case 128: { b[i].solved_element = 8; singletons=true; break; }\n        case 256: { b[i].solved_element = 9; singletons=true; break; }\n        }\n    }\n    *progress = singletons;\n    return valid_board(b);\n}\n\n#if !__TBB_CPP11_LAMBDAS_PRESENT\nvoid partial_solve(board_element *b, unsigned first_potential_set);\n\nclass PartialSolveBoard {\n    board_element *b;\n    unsigned first_potential_set;\npublic:\n    PartialSolveBoard(board_element *_b, unsigned fps) :\n        b(_b), first_potential_set(fps) {}\n    void operator() () const {\n        partial_solve(b, first_potential_set);\n    }\n};\n#endif\n\nvoid partial_solve(board_element *b, unsigned first_potential_set) {\n    if (fixed_board(b)) {\n        if ( find_one )\n            g->cancel();\n        if (++nSols==1 && verbose) {\n            print_board(b);\n        }\n        free(b);\n        return;\n    }\n    calculate_potentials(b);\n    bool progress=true;\n    bool success = examine_potentials(b, &progress);\n    if (success && progress) {\n        partial_solve(b, first_potential_set);\n    } else if (success && !progress) {\n        board_element *new_board;\n        while (b[first_potential_set].solved_element!=0) ++first_potential_set;\n        for (unsigned short potential=1; potential<=BOARD_DIM; ++potential) {\n            if (1<<(potential-1) & b[first_potential_set].potential_set) {\n                new_board = (board_element *)malloc(BOARD_SIZE*sizeof(board_element));\n                copy_board(b, new_board);\n                new_board[first_potential_set].solved_element = potential;\n#if __TBB_CPP11_LAMBDAS_PRESENT\n                g->run( [=]{ partial_solve(new_board, first_potential_set); } );\n#else\n                g->run(PartialSolveBoard(new_board, first_potential_set));\n#endif\n            }\n        }\n        free(b);\n    }\n    else {\n        free(b);\n    }\n}\n\nunsigned solve(int p) {\n    task_scheduler_init init(p);\n    nSols = 0;\n    board_element *start_board = (board_element *)malloc(BOARD_SIZE*sizeof(board_element));\n    init_board(start_board, init_values);\n    g = new task_group;\n    tick_count t0 = tick_count::now();\n    partial_solve(start_board, 0);\n    g->wait();\n    solve_time = (tick_count::now() - t0).seconds();\n    delete g;\n    return nSols;\n}\n\n#if __TBB_MIC_OFFLOAD\n#pragma offload_attribute (pop)\n#endif // __TBB_MIC_OFFLOAD\n\nint do_get_default_num_threads() {\n    int threads;\n    #if __TBB_MIC_OFFLOAD\n    #pragma offload target(mic) out(threads)\n    #endif // __TBB_MIC_OFFLOAD\n    threads = tbb::task_scheduler_init::default_num_threads();\n    return threads;\n}\n\nint get_default_num_threads() {\n    static int threads = do_get_default_num_threads();\n    return threads;\n}\n\nint main(int argc, char *argv[]) {\n    try {\n        tbb::tick_count mainStartTime = tbb::tick_count::now();\n\n        utility::thread_number_range threads(get_default_num_threads);\n        string filename = \"\";\n        bool silent = false;\n\n        utility::parse_cli_arguments(argc,argv,\n            utility::cli_argument_pack()\n            //\"-h\" option for displaying help is present implicitly\n            .positional_arg(threads,\"n-of-threads\",utility::thread_number_range_desc)\n            .positional_arg(filename,\"filename\",\"input filename\")\n\n            .arg(verbose,\"verbose\",\"prints the first solution\")\n            .arg(silent,\"silent\",\"no output except elapsed time\")\n            .arg(find_one,\"find-one\",\"stops after finding first solution\\n\")\n        );\n\n        if ( silent ) verbose = false;\n\n        if ( !filename.empty() )\n            read_board( filename.c_str() );\n        // otherwise (if file name not specified), the default statically initialized board will be used.\n        for(int p = threads.first; p <= threads.last; p = threads.step(p) ) {\n            unsigned number;\n            #if __TBB_MIC_OFFLOAD\n            #pragma offload target(mic) in(init_values, p, verbose, find_one) out(number, solve_time)\n            {\n            #endif // __TBB_MIC_OFFLOAD\n            number = solve(p);\n            #if __TBB_MIC_OFFLOAD\n            }\n            #endif // __TBB_MIC_OFFLOAD\n\n            if ( !silent ) {\n                if ( find_one ) {\n                    printf(\"Sudoku: Time to find first solution on %d threads: %6.6f seconds.\\n\", p, solve_time);\n                }\n                else {\n                    printf(\"Sudoku: Time to find all %u solutions on %d threads: %6.6f seconds.\\n\", number, p, solve_time);\n                }\n            }\n        }\n\n        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());\n\n        return 0;\n    } catch(std::exception& e) {\n        std::cerr<<\"error occurred. error text is :\\\"\" <<e.what()<<\"\\\"\\n\";\n        return 1;\n    }\n};\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/test_all/fibonacci/Fibonacci.cpp",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Example program that computes Fibonacci numbers in different ways.\n   Arguments are: [ Number [Threads [Repeats]]]\n   The defaults are Number=500 Threads=1:4 Repeats=1.\n\n   The point of this program is to check that the library is working properly.\n   Most of the computations are deliberately silly and not expected to\n   show any speedup on multiprocessors.\n*/\n\n// enable assertions\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <cstdio>\n#include <cstdlib>\n#include <cassert>\n#include <utility>\n#include \"tbb/task.h\"\n#include \"tbb/task_scheduler_init.h\"\n#include \"tbb/tick_count.h\"\n#include \"tbb/blocked_range.h\"\n#include \"tbb/concurrent_vector.h\"\n#include \"tbb/concurrent_queue.h\"\n#include \"tbb/concurrent_hash_map.h\"\n#include \"tbb/parallel_while.h\"\n#include \"tbb/parallel_for.h\"\n#include \"tbb/parallel_reduce.h\"\n#include \"tbb/parallel_scan.h\"\n#include \"tbb/pipeline.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/mutex.h\"\n#include \"tbb/spin_mutex.h\"\n#include \"tbb/queuing_mutex.h\"\n#include \"tbb/tbb_thread.h\"\n\nusing namespace std;\nusing namespace tbb;\n\n//! type used for Fibonacci number computations\ntypedef long long value;\n\n//! Matrix 2x2 class\nstruct Matrix2x2\n{\n    //! Array of values\n    value v[2][2];\n    Matrix2x2() {}\n    Matrix2x2(value v00, value v01, value v10, value v11) {\n        v[0][0] = v00; v[0][1] = v01; v[1][0] = v10; v[1][1] = v11;\n    }\n    Matrix2x2 operator * (const Matrix2x2 &to) const; //< Multiply two Matrices\n};\n//! Identity matrix\nstatic const Matrix2x2 MatrixIdentity(1, 0, 0, 1);\n//! Default matrix to multiply\nstatic const Matrix2x2 Matrix1110(1, 1, 1, 0);\n//! Raw arrays matrices multiply\nvoid Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2]);\n\n/////////////////////// Serial methods ////////////////////////\n\n//! Plain serial sum\nvalue SerialFib(int n)\n{\n    if(n < 2)\n        return n;\n    value a = 0, b = 1, sum; int i;\n    for( i = 2; i <= n; i++ )\n    {   // n is really index of Fibonacci number\n        sum = a + b; a = b; b = sum;\n    }\n    return sum;\n}\n//! Serial n-1 matrices multiplication\nvalue SerialMatrixFib(int n)\n{\n    value c[2][2], a[2][2] = {{1, 1}, {1, 0}}, b[2][2] = {{1, 1}, {1, 0}}; int i;\n    for(i = 2; i < n; i++)\n    {   // Using condition to prevent copying of values\n        if(i & 1) Matrix2x2Multiply(a, c, b);\n        else      Matrix2x2Multiply(a, b, c);\n    }\n    return (i & 1) ? c[0][0] : b[0][0]; // get result from upper left cell\n}\n//! Recursive summing. Just for complete list of serial algorithms, not used\nvalue SerialRecursiveFib(int n)\n{\n    value result;\n    if(n < 2)\n        result = n;\n    else\n        result = SerialRecursiveFib(n - 1) + SerialRecursiveFib(n - 2);\n    return result;\n}\n//! Introducing of queue method in serial\nvalue SerialQueueFib(int n)\n{\n    concurrent_queue<Matrix2x2> Q;\n    for(int i = 1; i < n; i++)\n        Q.push(Matrix1110);\n    Matrix2x2 A, B;\n    while(true) {\n        while( !Q.try_pop(A) ) this_tbb_thread::yield();\n        if(Q.empty()) break;\n        while( !Q.try_pop(B) ) this_tbb_thread::yield();\n        Q.push(A * B);\n    }\n    return A.v[0][0];\n}\n//! Trying to use concurrent_vector\nvalue SerialVectorFib(int n)\n{\n    concurrent_vector<value> A;\n    A.grow_by(2);\n    A[0] = 0; A[1] = 1;\n    for( int i = 2; i <= n; i++)\n    {\n        A.grow_to_at_least(i+1);\n        A[i] = A[i-1] + A[i-2];\n    }\n    return A[n];\n}\n\n///////////////////// Parallel methods ////////////////////////\n\n// *** Serial shared by mutexes *** //\n\n//! Shared glabals\nvalue SharedA = 0, SharedB = 1; int SharedI = 1, SharedN;\n\n//! Template task class which computes Fibonacci numbers with shared globals\ntemplate<typename M>\nclass SharedSerialFibBody {\n    M &mutex;\npublic:\n    SharedSerialFibBody( M &m ) : mutex( m ) {}\n    //! main loop\n    void operator()( const blocked_range<int>& range ) const {\n        for(;;) {\n            typename M::scoped_lock lock( mutex );\n            if(SharedI >= SharedN) break;\n            value sum = SharedA + SharedB;\n            SharedA = SharedB; SharedB = sum;\n            ++SharedI;\n        }\n    }\n};\n\n//! Root function\ntemplate<class M>\nvalue SharedSerialFib(int n)\n{\n    SharedA = 0; SharedB = 1; SharedI = 1; SharedN = n; M mutex;\n    parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );\n    return SharedB;\n}\n\n// *** Serial shared by concurrent hash map *** //\n\n//! Hash comparer\nstruct IntHashCompare {\n    bool equal( const int j, const int k ) const { return j == k; }\n    unsigned long hash( const int k ) const { return (unsigned long)k; }   \n};\n//! NumbersTable type based on concurrent_hash_map\ntypedef concurrent_hash_map<int, value, IntHashCompare> NumbersTable;\n//! task for serial method using shared concurrent_hash_map\nclass ConcurrentHashSerialFibTask: public task {\n    NumbersTable &Fib;\n    int my_n;\npublic:\n    //! constructor\n    ConcurrentHashSerialFibTask( NumbersTable &cht, int n ) : Fib(cht), my_n(n) { }\n    //! executing task\n    task* execute() /*override*/ {\n        for( int i = 2; i <= my_n; ++i ) { // there is no difference in to recycle or to make loop\n            NumbersTable::const_accessor f1, f2; // same as iterators\n            if( !Fib.find(f1, i-1) || !Fib.find(f2, i-2) ) {\n                // Something is seriously wrong, because i-1 and i-2 must have been inserted \n                // earlier by this thread or another thread.\n                assert(0);\n            }\n            value sum = f1->second + f2->second;\n            NumbersTable::const_accessor fsum;\n            Fib.insert(fsum, make_pair(i, sum)); // inserting\n            assert( fsum->second == sum ); // check value\n        }\n        return 0;\n    }\n};\n\n//! Root function\nvalue ConcurrentHashSerialFib(int n)\n{\n    NumbersTable Fib; \n    bool okay;\n    okay = Fib.insert( make_pair(0, 0) ); assert(okay); // assign initial values\n    okay = Fib.insert( make_pair(1, 1) ); assert(okay);\n\n    task_list list;\n    // allocate tasks\n    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));\n    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));\n    task::spawn_root_and_wait(list);\n    NumbersTable::const_accessor fresult;\n    okay = Fib.find( fresult, n );\n    assert(okay);\n    return fresult->second;\n}\n\n// *** Queue with parallel_for and parallel_while *** //\n\n//! Stream of matrices\nstruct QueueStream {\n    volatile bool producer_is_done;\n    concurrent_queue<Matrix2x2> Queue;\n    //! Get pair of matricies if present\n    bool pop_if_present( pair<Matrix2x2, Matrix2x2> &mm ) {\n        // get first matrix if present\n        if(!Queue.try_pop(mm.first)) return false;\n        // get second matrix if present\n        if(!Queue.try_pop(mm.second)) {\n            // if not, then push back first matrix\n            Queue.push(mm.first); return false;\n        }\n        return true;\n    }\n};\n\n//! Functor for parallel_for which fills the queue\nstruct parallel_forFibBody { \n    QueueStream &my_stream;\n    //! fill functor arguments\n    parallel_forFibBody(QueueStream &s) : my_stream(s) { }\n    //! iterate thorough range\n    void operator()( const blocked_range<int> &range ) const {\n        int i_end = range.end();\n        for( int i = range.begin(); i != i_end; ++i ) {\n            my_stream.Queue.push( Matrix1110 ); // push initial matrix\n        }\n    }\n};\n//! Functor for parallel_while which process the queue\nclass parallel_whileFibBody\n{\n    QueueStream &my_stream;\n    parallel_while<parallel_whileFibBody> &my_while;\npublic:\n    typedef pair<Matrix2x2, Matrix2x2> argument_type;\n    //! fill functor arguments\n    parallel_whileFibBody(parallel_while<parallel_whileFibBody> &w, QueueStream &s)\n        : my_while(w), my_stream(s) { }\n    //! process pair of matrices\n    void operator() (argument_type mm) const {\n        mm.first = mm.first * mm.second;\n        // note: it can run concurrently with QueueStream::pop_if_present()\n        if(my_stream.Queue.try_pop(mm.second))\n             my_while.add( mm ); // now, two matrices available. Add next iteration.\n        else my_stream.Queue.push( mm.first ); // or push back calculated value if queue is empty\n    }\n};\n\n//! Parallel queue's filling task\nstruct QueueInsertTask: public task {\n    QueueStream &my_stream;\n    int my_n;\n    //! fill task arguments\n    QueueInsertTask( int n, QueueStream &s ) : my_n(n), my_stream(s) { }\n    //! executing task\n    task* execute() /*override*/ {\n        // Execute of parallel pushing of n-1 initial matrices\n        parallel_for( blocked_range<int>( 1, my_n, 10 ), parallel_forFibBody(my_stream) ); \n        my_stream.producer_is_done = true; \n        return 0;\n    }\n};\n//! Parallel queue's processing task\nstruct QueueProcessTask: public task {\n    QueueStream &my_stream;\n    //! fill task argument\n    QueueProcessTask( QueueStream &s ) : my_stream(s) { }\n    //! executing task\n    task* execute() /*override*/ {\n        while( !my_stream.producer_is_done || my_stream.Queue.unsafe_size()>1 ) {\n            parallel_while<parallel_whileFibBody> w; // run while loop in parallel\n            w.run( my_stream, parallel_whileFibBody( w, my_stream ) );\n        }\n        return 0;\n    }\n};\n//! Root function\nvalue ParallelQueueFib(int n)\n{\n    QueueStream stream;\n    stream.producer_is_done = false;\n    task_list list;\n    list.push_back(*new(task::allocate_root()) QueueInsertTask( n, stream ));\n    list.push_back(*new(task::allocate_root()) QueueProcessTask( stream ));\n    // If there is only a single thread, the first task in the list runs to completion\n    // before the second task in the list starts.\n    task::spawn_root_and_wait(list);\n    assert(stream.Queue.unsafe_size() == 1); // it is easy to lose some work\n    Matrix2x2 M; \n    bool result = stream.Queue.try_pop( M ); // get last matrix\n    assert( result );\n    return M.v[0][0]; // and result number\n}\n\n// *** Queue with pipeline *** //\n\n//! filter to fills queue\nclass InputFilter: public filter {\n    tbb::atomic<int> N; //< index of Fibonacci number minus 1\npublic:\n    concurrent_queue<Matrix2x2> Queue;\n    //! fill filter arguments\n    InputFilter( int n ) : filter(false /*is not serial*/) { N = n; }\n    //! executing filter\n    void* operator()(void*) /*override*/ {\n        int n = --N;\n        if(n <= 0) return 0;\n        Queue.push( Matrix1110 );\n        return &Queue;\n    }\n};\n//! filter to process queue\nclass MultiplyFilter: public filter {\npublic:\n    MultiplyFilter( ) : filter(false /*is not serial*/) { }\n    //! executing filter\n    void* operator()(void*p) /*override*/ {\n        concurrent_queue<Matrix2x2> &Queue = *static_cast<concurrent_queue<Matrix2x2> *>(p);\n        Matrix2x2 m1, m2;\n        // get two elements\n        while( !Queue.try_pop( m1 ) ) this_tbb_thread::yield(); \n        while( !Queue.try_pop( m2 ) ) this_tbb_thread::yield();\n        m1 = m1 * m2; // process them\n        Queue.push( m1 ); // and push back\n        return this; // just nothing\n    }\n};\n//! Root function\nvalue ParallelPipeFib(int n)\n{\n    InputFilter input( n-1 );\n    MultiplyFilter process;\n    // Create the pipeline\n    pipeline pipeline;\n    // add filters\n    pipeline.add_filter( input ); // first\n    pipeline.add_filter( process ); // second\n\n    input.Queue.push( Matrix1110 );\n    // Run the pipeline\n    pipeline.run( n ); // must be larger then max threads number\n    pipeline.clear(); // do not forget clear the pipeline\n\n    assert( input.Queue.unsafe_size()==1 );\n    Matrix2x2 M; \n    bool result = input.Queue.try_pop( M ); // get last element\n    assert( result );\n    return M.v[0][0]; // get value\n}\n\n// *** parallel_reduce *** //\n\n//! Functor for parallel_reduce\nstruct parallel_reduceFibBody {\n    Matrix2x2 sum;\n    int splitted;  //< flag to make one less operation for splitted bodies\n    //! Constructor fills sum with initial matrix\n    parallel_reduceFibBody() : sum( Matrix1110 ), splitted(0) { }\n    //! Splitting constructor\n    parallel_reduceFibBody( parallel_reduceFibBody& other, split ) : sum( Matrix1110 ), splitted(1/*note that it is splitted*/) {}\n    //! Join point\n    void join( parallel_reduceFibBody &s ) {\n        sum = sum * s.sum;\n    }\n    //! Process multiplications\n    void operator()( const blocked_range<int> &r ) {\n        for( int k = r.begin() + splitted; k < r.end(); ++k )\n            sum = sum * Matrix1110;\n        splitted = 0; // reset flag, because this method can be reused for next range\n    }\n};\n//! Root function\nvalue parallel_reduceFib(int n)\n{\n    parallel_reduceFibBody b;\n    parallel_reduce(blocked_range<int>(2, n, 3), b); // do parallel reduce on range [2, n) for b\n    return b.sum.v[0][0];\n}\n\n// *** parallel_scan *** //\n\n//! Functor for parallel_scan\nstruct parallel_scanFibBody {\n    /** Though parallel_scan is usually used to accumulate running sums,\n        it can be used to accumulate running products too. */\n    Matrix2x2 product;\n    /** Pointer to output sequence */\n    value* const output;\n    //! Constructor sets product to identity matrix\n    parallel_scanFibBody(value* output_) : product( MatrixIdentity ), output(output_) {}\n    //! Splitting constructor\n    parallel_scanFibBody( parallel_scanFibBody &b, split) : product( MatrixIdentity ), output(b.output) {}\n    //! Method for merging summary information from a, which was split off from *this, into *this.\n    void reverse_join( parallel_scanFibBody &a ) {\n        // When using non-commutative reduction operation, reverse_join\n        // should put argument \"a\" on the left side of the operation.\n        // The reversal from the argument order is why the method is\n        // called \"reverse_join\" instead of \"join\".\n        product = a.product * product;\n    }\n    //! Method for assigning final result back to original body.\n    void assign( parallel_scanFibBody &b ) {\n        product = b.product;\n    }\n    //! Compute matrix running product.\n    /** Tag indicates whether is is the final scan over the range, or\n        just a helper \"prescan\" that is computing a partial reduction. */\n    template<typename Tag>\n    void operator()( const blocked_range<int> &r, Tag tag) {\n        for( int k = r.begin(); k < r.end(); ++k ) {\n            // Code performs an \"exclusive\" scan, which outputs a value *before* updating the product.\n            // For an \"inclusive\" scan, output the value after the update.\n            if( tag.is_final_scan() )\n                output[k] = product.v[0][1];\n            product = product * Matrix1110;\n        }\n    }\n};\n//! Root function\nvalue parallel_scanFib(int n)\n{\n    value* output = new value[n];\n    parallel_scanFibBody b(output);\n    parallel_scan(blocked_range<int>(0, n, 3), b);\n    // output[0..n-1] now contains the Fibonacci sequence (modulo integer wrap-around).\n    // Check the last two values for correctness.\n    assert( n<2 || output[n-2]+output[n-1]==b.product.v[0][1] );\n    delete[] output;\n    return b.product.v[0][1];\n}\n\n// *** Raw tasks *** //\n\n//! task class which computes Fibonacci numbers by Lucas formula\nstruct FibTask: public task {\n    const int n;\n    value& sum;\n    value x, y;\n    bool second_phase; //< flag of continuation\n    // task arguments\n    FibTask( int n_, value& sum_ ) : \n        n(n_), sum(sum_), second_phase(false)\n    {}\n    //! Execute task\n    task* execute() /*override*/ {\n        // Using Lucas' formula here\n        if( second_phase ) { // children finished\n            sum = n&1 ? x*x + y*y : x*x - y*y;\n            return NULL;\n        }\n        if( n <= 2 ) {\n            sum = n!=0;\n            return NULL;\n        } else {\n            recycle_as_continuation();  // repeat this task when children finish\n            second_phase = true; // mark second phase\n            FibTask& a = *new( allocate_child() ) FibTask( n/2 + 1, x );\n            FibTask& b = *new( allocate_child() ) FibTask( n/2 - 1 + (n&1), y );\n            set_ref_count(2);\n            spawn( a );\n            return &b;\n        }\n    }\n};\n//! Root function\nvalue ParallelTaskFib(int n) { \n    value sum;\n    FibTask& a = *new(task::allocate_root()) FibTask(n, sum);\n    task::spawn_root_and_wait(a);\n    return sum;\n}\n\n/////////////////////////// Main ////////////////////////////////////////////////////\n\n//! A closed range of int.\nstruct IntRange {\n    int low;\n    int high;\n    void set_from_string( const char* s );\n    IntRange( int low_, int high_ ) : low(low_), high(high_) {}\n};\n\nvoid IntRange::set_from_string( const char* s ) {\n    char* end;\n    high = low = strtol(s,&end,0);\n    switch( *end ) {\n    case ':': \n        high = strtol(end+1,0,0); \n        break;\n    case '\\0':\n        break;\n    default:\n        printf(\"unexpected character = %c\\n\",*end);\n    }\n}\n\n//! Tick count for start\nstatic tick_count t0;\n\n//! Verbose output flag\nstatic bool Verbose = false;\n\ntypedef value (*MeasureFunc)(int);\n//! Measure ticks count in loop [2..n]\nvalue Measure(const char *name, MeasureFunc func, int n)\n{\n    value result;\n    if(Verbose) printf(\"%s\",name);\n    t0 = tick_count::now();\n    for(int number = 2; number <= n; number++)\n        result = func(number);\n    if(Verbose) printf(\"\\t- in %f msec\\n\", (tick_count::now() - t0).seconds()*1000);\n    return result;\n}\n\n//! program entry\nint main(int argc, char* argv[])\n{\n    if(argc>1) Verbose = true;\n    int NumbersCount = argc>1 ? strtol(argv[1],0,0) : 500;\n    IntRange NThread(1,4);// Number of threads to use.\n    if(argc>2) NThread.set_from_string(argv[2]);\n    unsigned long ntrial = argc>3? (unsigned long)strtoul(argv[3],0,0) : 1;\n    value result, sum;\n\n    if(Verbose) printf(\"Fibonacci numbers example. Generating %d numbers..\\n\",  NumbersCount);\n\n    result = Measure(\"Serial loop\", SerialFib, NumbersCount);\n    sum = Measure(\"Serial matrix\", SerialMatrixFib, NumbersCount); assert(result == sum);\n    sum = Measure(\"Serial vector\", SerialVectorFib, NumbersCount); assert(result == sum);\n    sum = Measure(\"Serial queue\", SerialQueueFib, NumbersCount); assert(result == sum);\n    // now in parallel\n    for( unsigned long i=0; i<ntrial; ++i ) {\n        for(int threads = NThread.low; threads <= NThread.high; threads *= 2)\n        {\n            task_scheduler_init scheduler_init(threads);\n            if(Verbose) printf(\"\\nThreads number is %d\\n\", threads);\n\n            sum = Measure(\"Shared serial (mutex)\\t\", SharedSerialFib<mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (spin_mutex)\", SharedSerialFib<spin_mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (queuing_mutex)\", SharedSerialFib<queuing_mutex>, NumbersCount); assert(result == sum);\n            sum = Measure(\"Shared serial (Conc.HashTable)\", ConcurrentHashSerialFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel while+for/queue\", ParallelQueueFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel pipe/queue\\t\", ParallelPipeFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel reduce\\t\\t\", parallel_reduceFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel scan\\t\\t\", parallel_scanFib, NumbersCount); assert(result == sum);\n            sum = Measure(\"Parallel tasks\\t\\t\", ParallelTaskFib, NumbersCount); assert(result == sum);\n        }\n\n    #ifdef __GNUC__\n        if(Verbose) printf(\"Fibonacci number #%d modulo 2^64 is %lld\\n\\n\", NumbersCount, result);\n    #else\n        if(Verbose) printf(\"Fibonacci number #%d modulo 2^64 is %I64d\\n\\n\", NumbersCount, result);\n    #endif\n    }\n    if(!Verbose) printf(\"TEST PASSED\\n\");\n    return 0;\n}\n\n// Utils\n\nvoid Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2])\n{\n    for( int i = 0; i <= 1; i++)\n        for( int j = 0; j <= 1; j++)\n            c[i][j] = a[i][0]*b[0][j] + a[i][1]*b[1][j];\n}\n\nMatrix2x2 Matrix2x2::operator *(const Matrix2x2 &to) const\n{\n    Matrix2x2 result;\n    Matrix2x2Multiply(v, to.v, result.v);\n    return result;\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/test_all/fibonacci/Makefile",
    "content": "# Copyright (c) 2005-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# GNU Makefile that builds and runs example.\nrun_cmd=\nPROG=fibonacci\nARGS=\n\n# The C++ compiler\nifneq (,$(shell which icc 2>/dev/null))\nCXX=icc\nendif # icc\n\nifeq ($(shell uname), Linux)\nifeq ($(target), android)\nLIBS+= --sysroot=$(SYSROOT)\nrun_cmd=../../common/android.linux.launcher.sh\nelse\nLIBS+= -lrt \nendif\nelse ifeq ($(shell uname), Darwin)\noverride CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib\nendif\n\nall:\trelease test\n\nrelease: *.cpp\n\t$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)\n\ndebug: *.cpp\n\t$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)\n\nclean:\n\t$(RM) $(PROG) *.o *.d\n\ntest:\n\t$(run_cmd) ./$(PROG) $(ARGS)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/test_all/fibonacci/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Fibonacci sample</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Fibonacci sample</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains an example that computes Fibonacci numbers in several\n\t\tdifferent ways.\n\t<br><br>\n\t\tThe purpose of the example is to exercise every include file\n\t\tand class in Intel&reg; Threading Building Blocks.\n\t\tMost of the computations are deliberately silly and not expected to\n\t\tshow any speedup on multiprocessors.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">System Requirements</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tFor the most up to date system requirements, see the <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Files</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"Fibonacci.cpp\">Fibonacci.cpp</a>\n\t\t\t\t<dd>Source code for example.\n\t\t\t\t<dt><a href=\"Makefile\">Makefile</a>\n\t\t\t\t<dd>Makefile for building the example.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"msvs/\">msvs</a> \n\t\t\t\t<dd>Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only).\n\t\t\t\t<dt><a href=\"xcode/\">xcode</a>\n\t\t\t\t<dd>Contains Xcode* IDE workspace for building and running the example (macOS* systems only).\n\t\t\t</dl>\n\t\t\t<p>For information about the minimum supported version of IDE, see <a href=\"http://software.intel.com/en-us/articles/intel-threading-building-blocks-release-notes\">release notes.</a></p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Build instructions</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>General build directions can be found <a href=\"../../index.html\">here</a>.</p>\n\t\t</div>\n\t</div>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Usage</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><tt>fibonacci <i>K</i> [<i>M</i>[:<i>N</i>]] [<i>R</i>]</tt>\n\t\t\t\t<dd>Calculates the <i>K</i>-th fibonacci number.\n\t\t\t\t\t<i>M</i> and <i>N</i> are a range of numbers of threads to be used.\n\t\t\t\t\t<i>R</i> is the number of times to repeat the calculation.\n\t\t\t\t<dt>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:\n\t\t\t\t<dd>Build a <i>debug</i> version of the example\n\t\t\t\t\t(see the <a href=\"../../index.html\">build instructions</a>).\n\t\t\t\t\t<br>Run it with a small fibonacci number and the desired number of threads, e.g., <tt>fibonacci&nbsp;100&nbsp;4</tt>.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\t\n\t\n</body>\n</html>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/examples/test_all/index.html",
    "content": "<!DOCTYPE html>\n<html xmlns:mso=\"urn:schemas-microsoft-com:office:office\" xmlns:msdt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<style>\n\t\t::selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\t\t::-moz-selection {\n\t\t\tbackground: #b7ffb7;\n\t\t}\n\n\t\tbody {\n\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\tfont-size: 16px;\n\t\t\twidth: 800px;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t\t#banner {\n\t\t\t/* Div for banner */\n\t\t\tfloat:left;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 10px;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: #0071C5;\n\t\t\tz-index: 0;\n\t\t}\n\t\t#banner .logo {\n\t\t\t/* Apply to logo in banner. Add as class to image tag. */\n\t\t\tfloat: left;\n\t\t\tmargin-right: 20px;\n\t\t\tmargin-left: 20px;\n\t\t\tmargin-top: 15px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\t\th1 {\n\t\t\ttext-align: center;\n\t\t\tfont-size: 36px;\n\t\t}\n\t\th1.title {\n\t\t\t/* Add as class to H1 in banner */\n\t\t\tfont-family: \"Intel Clear\", Verdana, Arial, sans-serif;\n\t\t\tfont-weight:normal;\n\t\t\tcolor: #FFFFFF;\n\t\t\tfont-size: 170%;\n\t\t\tmargin-right: 40px;\n\t\t\tmargin-left: 40px;\n\t\t\tpadding-right: 20px;\n\t\t\ttext-indent: 20px;\n\t\t}\n\t\t.h3-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\th3 {\n\t\t\tfont-size: 1.17em;\n\t\t\tfont-weight: bold;\n\t\t\tcolor: #0071C5;\n\t\t}\n\t\t.h4-alike {\n\t\t\tdisplay:inline;\n\t\t\tfont-size: 1.05em;\n\t\t\tfont-weight: bold;\n\t\t}\n\t\tpre {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t\tfont-size:small;\n\t\t\tbackground: #fafafa;\n\t\t\tmargin: 0;\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t#footer {\n\t\t\tfont-size: small;\n\t\t}\n\t\tcode {\n\t\t\tfont-family: \"Consolas\", Monaco, monospace;\n\t\t}\n\t\t.code-block\n\t\t{\n\t\t\tpadding-left:20px;\n\t\t}\n\t\t.changes {\n\t\t\tmargin: 1em 0;\n\t\t}\n\t\t.changes input:active {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t.changes input:hover:after {\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 10px;\n\t\t\tcontent: 'More';\n\t\t}\n\t\t.changes input:checked:hover:after {\n\t\t\tcontent: 'Less';\n\t\t}\n\t\t.changes input + .show-hide {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.changes input:checked + .show-hide {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\tul {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0.5em 0 0.5em 2.5em;\n\t\t}\n\t\tul li {\n\t\t\tmargin-bottom: 3px;\n\t\t}\n\t\tul li:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.disc {\n\t\t\tlist-style-type:disc\n\t\t}\n\t\t.circ {\n\t\t\tlist-style-type:circle\n\t\t}\n\t\t\n\t\t.single {\n\t\t\tpadding: 0 0.5em;\n\t\t}\n\t\t\n\t\t/* ------------------------------------------------- */\n\t\t/* Table styles                                      */\n\t\ttable{\n\t\t\tmargin-bottom:5pt;\n\t\t\tborder-collapse:collapse;\n\t\t\tmargin-left:0px;\n\t\t\tmargin-top:0.3em;\n\t\t\tfont-size:10pt;\n\t\t}\n\t\ttr{\n\t\t\tvertical-align:top;\n\t\t}\n\t\tth,\n\t\tth h3{\n\t\t\tpadding:4px;\n\t\t\ttext-align:left;\n\t\t\tbackground-color:#0071C5;\n\t\t\tfont-weight:bold;\n\t\t\tmargin-top:1px;\n\t\t\tmargin-bottom:0;\n\t\t\tcolor:#FFFFFF;\n\t\t\tfont-size:10pt;\n\t\t\tvertical-align:middle;\n\t\t}\n\t\tth{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tpadding-top:2px;\t \t \n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-right:3px;\t \t \n\t\t\tpadding-left:3px;\n\t\t}\n\t\ttd{\n\t\t\tborder:1px #dddddd solid;\n\t\t\tvertical-align:top;\n\t\t\tfont-size:100%;\n\t\t\ttext-align:left;\n\t\t\tmargin-bottom:0;\n\t\t}\n\t\ttd,\n\t\ttd p{\n\t\t\tmargin-top:0;\n\t\t\tmargin-left:0;\n\t\t\ttext-align:left;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t}\n\t\ttd p{\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-bottom:5px;\n\t\t\tpadding-right:5px;\n\t\t\tpadding-left:1px;\n\t\t}\n\t\t.noborder{\n\t\t\tborder:0px none;\n\t\t}\n\t\t.noborder1stcol{\n\t\t\tborder:0px none;\n\t\t\tpadding-left:0pt;\n\t\t}\n\t\ttd ol{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:28px;\n\t\t}\n\t\ttd ul{\n\t\t\tfont-size:inherit;\n\t\t\tmargin-left:24px;\n\t\t}\n\t\t.DefListTbl{\n\t\t\twidth:90%;\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.syntaxdiagramtbl{\n\t\t\tmargin-left:-3pt;\n\t\t}\n\t\t.sdtbl{\n\t\t}\n\t\t.sdrow{\n\t\t}\n\t\t.sdtblp{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t.idepara, .ide_para{\n\t\t\tborder:0px none;\n\t\t\tfont-size:inherit;\n\t\t\tline-height:120%;\n\t\t\tmargin-bottom:0;\n\t\t\tpadding-bottom:0px;\n\t\t\tpadding-top:5px;\n\t\t\tpadding-left:0px;\n\t\t\tpadding-right:5px;\n\t\t\tvertical-align:top;\n\t\t}\n\t\t\n\t\t.specs {\n\t\t\tborder-collapse:collapse;\n\t\t}\n\t\t.specs td, .specs th {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\t.specs td {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t\t.specs td td, .specs td th {\n\t\t\tborder: none;\n\t\t}\n\t\t.specs\ttd, .specs td td, .specs td th {\n\t\t\tpadding: 0 0.2em 0.2em;\n\t\t\ttext-align: center;\n\t\t}\n\t\t.specs td tr:last-child td, \n\t\t.specs td tr:last-child th {\n\t\t\tpadding: 0 0.2em;\n\t\t}\n\t\t.serial-time {\n\t\t}\n\t\t.modified-time {\n\t\twidth: 6.5em;\n\t\t}\n\t\t.compiler {\n\t\t}\n\t\t.comp-opt {\n\t\t}\n\t\t.sys-specs {\n\t\t\twidth: 18em;\n\t\t}\n\t\t.note {\n\t\t\tfont-size:small;\n\t\t\tfont-style: italic;\n\t\t}\n\t</style>\n\t<title>Intel&reg; Threading Building Blocks. Samples on all features</title>\n</head>\n<body>\n\t\n\t<div id=\"banner\">\n\t\t<img class=\"logo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAsCAYAAAA+aAX8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\n\t\t\t\tjwv8YQUAAAAJcEhZcwAALiIAAC4iAari3ZIAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVh\n\t\t\t\tZHlxyWU8AAAIN0lEQVRoQ+WaCaxdUxSGW2ouatZWaVS15nkqkZhSVERQglLEPCam1BCixhqqCKUS\n\t\t\t\tNIiYpxhqHmouIeaY5ylFzA/v1fev8+/j3N5737v3vtf3buNP/uy9/7X2Ovuse4a997m9mgltbW2L\n\t\t\t\twRHwcHgFfAx+AH+GCb/BT2fNmvUk5ZXwYOrrOsTcCU5CJ74pPBJeA5+Bn8LfOLmagf/f8Af4NrwD\n\t\t\t\tngg3wdTHh2pOMMB1Gejx8AE4M85mNqD/A7+D78GXkXQFTIMPwUfhdPg6/AxWTRw29b8QruPD9zwY\n\t\t\t\tzPrwHPi2xxmg3QrfgDfD05BGU24EB1HvC3s7REXgtwDsDzeEY+Ak+AJsUfwE2sJdcBN37V4whiU4\n\t\t\t\t+KGUM2JEBtpzUInZEa5g9y4FcYfAo+GLPmwOND2HFrXrnAUHWgnq0vzDB2+Bt0H9coPs1m3gmNvD\n\t\t\t\tZyITBu234Jp26XoQfCC80sfTAXVv7wOXskuPgnHoSvnTw9P49MDdyOauAQEXhWdC4Vd4ARxmc1OB\n\t\t\t\tcW0Gv3U+lJDvKFa0ufMg4GXwR3gs7J57sRNoaWnR2+znLB2RkKds6jwItvbckIQiGO+eTkSby71t\n\t\t\t\tqh100qtsUCJxmmpSw5i2gWebR1jWm2047T1gf0vyfViJEKi/TtHua7wMdNJs8U/zDzjUpqYA47k4\n\t\t\t\tO704wY+kUZ2P+glQc5ldac9j323sF1cH2EB6h8BxYZdbRDeDOJ16UBJiHDFuMMdYbhjEGA8DxJ4h\n\t\t\t\tjXIemmMpz6ccqbZ1JUlT/3SrHC+9XeB0MjzV9RHqKFAXVg2nBkH/lxxO8aZYbhjEKEuGQH1BuCKc\n\t\t\t\tz1IAN61jAtiut1wZ+ByIkwa6r9t6ZmhSFZw9eL0gxiMw4SLLDYMYFZNRDbhpcpgwzXI5MOqSEvKM\n\t\t\t\tUe8D+xU4r/Xe+C8HB1ThkhFgNqAXk6FVqyZuA1LcItBXQd+WUvf6YMslwFZvMs7KvMP/SculwKa3\n\t\t\t\thfYPPsZpfsvS9QD9PRHbcOmUC9J+H2qfoRJ/0MHgFhHIQC8mQ8twxZ0Ji099vSGegn/TP0BdD/Db\n\t\t\t\tYcn0nna9yZiceQcetFwKDE/4oNtZCtDeXHoC7dWlU1Uyvs7U6sBHJ7FaBAPU82TYJUAzFnCU+1mq\n\t\t\t\tCOyfwGLi6k3G05l34BrL/wFxjA/0mKUcaNqBKiJODHclQ3sLCVqZprfEvVCLtThhiskRDFAvXhnv\n\t\t\t\tQPlfi5uW7ytTL14Nr0Bd1pfDXy1Lv93h6koGLstCLR/SuPJ5SQBBD8hPZATbWs6BrdZk7B4dDNpT\n\t\t\t\tMjkw3bL0YjLOsxygPUWDyExtD1GNV6JAeyTUBlDCKtbrScYxhfjyj1s+B9o+dnifIj94AnpNyaC9\n\t\t\t\tf3QwkNJCTnjOsvRiMi6xrHiaA3ycyYFNbcqBpisl/aoHWaspGdg03uIc43mb/gOilt3CREslQG80\n\t\t\t\tGedmlkC1KyNPBnU9wOPWMp6Aut0S74HfwIQJ7ldTMjBPdBIiGWC0TRkQlseWNmR2tlwC9DmZjEmW\n\t\t\t\tpQ/zOAKqtwdcrnW/DpOBPtp9Ii6F9lhL1yWIo2zUvVhxzYHeLVcG/QfT/iuTA3qwan+zGndVP8p2\n\t\t\t\tk4G8E/wLW4D6PxTlnxgwaDEjaMe6n+USYOvqZKTbUrjQcor3ZSYHRtjULvCrmgwkfY5oRc9B+3Cb\n\t\t\t\tS4FhIhS+gAtZLgH9Y6GWuQU6mwx9IEqYajlA+47CsZ6lGovFBDTNkA9xM4CmpXsAWySDUrPjqZQl\n\t\t\t\tQBsfnSoB41UKAvS9ouJmDfpaDpTQ2WRcXYinCZm+pdyEtDClPgLloP0unABPp3lrpoZ+KkWskSgP\n\t\t\t\tsVZMhlat2t7LQftE2aoCh0sVBOheXclyCYjTp7W19bUsZAQtJuPLTA39gOhg0D7PJtny1xj1tWA+\n\t\t\t\tsUpAG2j7mZaqAh9tzPSVP+XStL+w/qY1XRlfWdOSYXvp7QKnU6Ayqk4jLZcB2zD4gv1iu52qkvG5\n\t\t\t\tNKPsyrCuPs9aDtDeDr4EtS7RRyXNCgfYLPtYfoC33D0Hul6tE6jOfvsMhVqaT8PWG85PXR+WxlOP\n\t\t\t\tpHUIHPNXDsif7NWAT773STdlX6vK4ebi4WRgWybZqFe86tBXUAw4BL+S7UTautTXo9yFcjdKPbsq\n\t\t\t\tPuQTsKdbZ16YLzZrAgdRRvXLCF/Big/R/wXInn5dffdMt8opNs214Bz6cyqNbUDRcZwTIWjDt3m+\n\t\t\t\tXtcBxq3pvL6p6mFftlFUE+i8JPxRCRGoawVbcVepGcF4V4eTGPNPHv+7NjUGAhzmQOl20fyhphlg\n\t\t\t\tT4CxLcQw9WC9Gxb3P4Q37NY4CHJXCuhSW3JnwEXs0qNgSHqVbw210ZP2XwK0A65/6C6NgziaAU5X\n\t\t\t\twCIUHB4H86227gKH1+JtL3gd1N5sCdACbgZo5rtgnQKx+hLs/ixsdjBXBd2TtyKNhUOp1/dprgMQ\n\t\t\t\trx9x16fcn1KbttrIyf9OkICWw1KApvY2YyXbpSBobKf7OGXApFtI+5d3Qq1BDoL6V87GcDVc9Ivq\n\t\t\t\tE4D+bjTQbc1i9demreDu8Ch0ffG6hdnmDMrvFbsSsAXczIGk3fwb4VYe+pwBB9Angkd83ADtqgkq\n\t\t\t\tAjetdTTV1icDlfl+Qi3AP4elHEjaDXscHgFjPdNt4ID6S9B9sNLiKoelmuFuJbCpDJi+hvqz2qFw\n\t\t\t\tiIfWc2AQusxPgvq484vH2eUgtpYHH0Hteeqb75ZwMQ+j+cDg9PlwFDwd6o9sr0KtbWI/tSPgp32M\n\t\t\t\t76H+s6mNX3030df5neGq1OtbZDUbOIlFoFaha0L9j0qfCHeAerDqVtODU8+hNThZfR1fHHbpG6kx\n\t\t\t\t9Or1LzUmVVz+HJXDAAAAAElFTkSuQmCC\">\n\t\t<h1 class=\"title\">Intel&reg; Threading Building Blocks.<br>Samples on various features</h1>\n\t</div>\n\t\n\t<p>\n\t\tThis directory contains programs that exercise various components of Intel&reg; Threading Building Blocks.\n\t</p>\n\n\t<div class=\"changes\">\n\t\t<div class=\"h3-alike\">Directories</div>\n\t\t<input type=\"checkbox\" checked=\"checked\">\n\t\t<div class=\"show-hide\">\n\t\t\t<dl>\n\t\t\t\t<dt><a href=\"fibonacci/readme.html\">fibonacci</a>\n\t\t\t\t<dd>Compute Fibonacci numbers in different ways.\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n\t<br>\n\t<a href=\"../index.html\">Up to parent directory</a>\n\t<hr>\n\t<div class=\"changes\">\n\t<div class=\"h3-alike\">Legal Information:</div>\n\t\t<input type=\"checkbox\">\n\t\t<div class=\"show-hide\">\n\t\t\t<p>\n\t\t\t\tIntel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.\n\t\t\t\t<br>* Other names and brands may be claimed as the property of others. \n\t\t\t\t<br>&copy; 2018, Intel Corporation\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"tbb/index.html\">tbb</A>\n<DD>Include files for Intel TBB classes and functions.\n<DT><A HREF=\"serial/tbb/\">serial/tbb</A>\n<DD>Include files for a sequential implementation of the parallel_for algorithm.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/serial/tbb/parallel_for.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_SERIAL_parallel_for_H\n#define __TBB_SERIAL_parallel_for_H\n\n#include \"tbb_annotate.h\"\n\n#ifndef __TBB_NORMAL_EXECUTION\n#include \"tbb/blocked_range.h\"\n#include \"tbb/partitioner.h\"\n#endif\n\n#if TBB_USE_EXCEPTIONS\n#include <stdexcept>\n#include <string> // required to construct std exception classes\n#else\n#include <cstdlib>\n#include <iostream>\n#endif\n\nnamespace tbb {\nnamespace serial {\nnamespace interface9 {\n\n// parallel_for serial annotated implementation\n\ntemplate< typename Range, typename Body, typename Partitioner >\nclass start_for : tbb::internal::no_copy {\n    Range my_range;\n    const Body my_body;\n    typename Partitioner::task_partition_type my_partition;\n    void execute();\n\n    //! Constructor for root task.\n    start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n        my_range( range ),\n        my_body( body ),\n        my_partition( partitioner )\n    {\n    }\n\n    //! Splitting constructor used to generate children.\n    /** this becomes left child.  Newly constructed object is right child. */\n    start_for( start_for& parent_, typename Partitioner::split_type& split_obj ) :\n        my_range( parent_.my_range, split_obj ),\n        my_body( parent_.my_body ),\n        my_partition( parent_.my_partition, split_obj )\n    {\n    }\n\npublic:\n    static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n        if( !range.empty() ) {\n            ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n            {\n                start_for a( range, body, partitioner );\n                a.execute();\n            }\n            ANNOTATE_SITE_END( tbb_parallel_for );\n        }\n    }\n};\n\ntemplate< typename Range, typename Body, typename Partitioner >\nvoid start_for< Range, Body, Partitioner >::execute() {\n    if( !my_range.is_divisible() || !my_partition.is_divisible() ) {\n        ANNOTATE_TASK_BEGIN( tbb_parallel_for_range );\n        {\n            my_body( my_range );\n        }\n        ANNOTATE_TASK_END( tbb_parallel_for_range );\n    } else {\n        typename Partitioner::split_type split_obj;\n        start_for b( *this, split_obj );\n        this->execute(); // Execute the left interval first to keep the serial order.\n        b.execute();     // Execute the right interval then.\n    }\n}\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    serial::interface9::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner (ignored)\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& ) {\n    if (step <= 0 ) {\n#if TBB_USE_EXCEPTIONS\n        throw std::invalid_argument( \"nonpositive_step\" );\n#else\n        std::cerr << \"nonpositive step in a call to parallel_for\" << std::endl;\n        std::abort();\n#endif\n    } else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n        for( Index i = first; i < last; i = i + step ) {\n            ANNOTATE_TASK_BEGIN( tbb_parallel_for_iteration );\n            { f( i ); }\n            ANNOTATE_TASK_END( tbb_parallel_for_iteration );\n        }\n        ANNOTATE_SITE_END( tbb_parallel_for );\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with explicit step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, step, f, p);\n}\n\n//! Parallel iteration over a range of integers with default step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with default step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and auto partitioner\ntemplate <typename Index, typename Function>\n    void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and affinity_partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, p);\n}\n\n} // namespace interfaceX\n\nusing interface9::parallel_for;\n\n} // namespace serial\n\n#ifndef __TBB_NORMAL_EXECUTION\nusing serial::interface9::parallel_for;\n#endif\n\n} // namespace tbb\n\n#endif /* __TBB_SERIAL_parallel_for_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/serial/tbb/tbb_annotate.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_annotate_H\n#define __TBB_annotate_H\n\n// Macros used by the Intel(R) Parallel Advisor.\n#ifdef __TBB_NORMAL_EXECUTION\n    #define ANNOTATE_SITE_BEGIN( site )\n    #define ANNOTATE_SITE_END( site )\n    #define ANNOTATE_TASK_BEGIN( task )\n    #define ANNOTATE_TASK_END( task )\n    #define ANNOTATE_LOCK_ACQUIRE( lock )\n    #define ANNOTATE_LOCK_RELEASE( lock )\n#else\n    #include <advisor-annotate.h>\n#endif\n\n#endif /* __TBB_annotate_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/aggregator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__aggregator_H\n#define __TBB__aggregator_H\n\n#if !TBB_PREVIEW_AGGREGATOR\n#error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h\n#endif\n\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\nnamespace interface6 {\n\nusing namespace tbb::internal;\n\nclass aggregator_operation {\n    template<typename handler_type> friend class aggregator_ext;\n    uintptr_t status;\n    aggregator_operation* my_next;\npublic:\n    enum aggregator_operation_status { agg_waiting=0, agg_finished };\n    aggregator_operation() : status(agg_waiting), my_next(NULL) {}\n    /// Call start before handling this operation\n    void start() { call_itt_notify(acquired, &status); }\n    /// Call finish when done handling this operation\n    /** The operation will be released to its originating thread, and possibly deleted. */\n    void finish() { itt_store_word_with_release(status, uintptr_t(agg_finished)); }\n    aggregator_operation* next() { return itt_hide_load_word(my_next);}\n    void set_next(aggregator_operation* n) { itt_hide_store_word(my_next, n); }\n};\n\nnamespace internal {\n\nclass basic_operation_base : public aggregator_operation {\n    friend class basic_handler;\n    virtual void apply_body() = 0;\npublic:\n    basic_operation_base() : aggregator_operation() {}\n    virtual ~basic_operation_base() {}\n};\n\ntemplate<typename Body>\nclass basic_operation : public basic_operation_base, no_assign {\n    const Body& my_body;\n    void apply_body() __TBB_override { my_body(); }\npublic:\n    basic_operation(const Body& b) : basic_operation_base(), my_body(b) {}\n};\n\nclass basic_handler {\npublic:\n    basic_handler() {}\n    void operator()(aggregator_operation* op_list) const {\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to the operation data.\n            // The executing thread \"acquires\" the tag (see start()) and then performs\n            // the associated operation w/o triggering a race condition diagnostics.\n            // A thread that created the operation is waiting for its status (see execute_impl()),\n            // so when this thread is done with the operation, it will \"release\" the tag\n            // and update the status (see finish()) to give control back to the waiting thread.\n            basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);\n            // IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()\n            op_list = op_list->next();\n            request.start();\n            request.apply_body();\n            request.finish();\n        }\n    }\n};\n\n} // namespace internal\n\n//! Aggregator base class and expert interface\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread. */\ntemplate <typename handler_type>\nclass aggregator_ext : tbb::internal::no_copy {\npublic:\n    aggregator_ext(const handler_type& h) : handler_busy(0), handle_operations(h) { mailbox = NULL; }\n\n    //! EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.\n    /** Details of user-made operations must be handled by user-provided handler */\n    void process(aggregator_operation *op) { execute_impl(*op); }\n\nprotected:\n    /** Place operation in mailbox, then either handle mailbox or wait for the operation\n        to be completed by a different thread. */\n    void execute_impl(aggregator_operation& op) {\n        aggregator_operation* res;\n\n        // ITT note: &(op.status) tag is used to cover accesses to this operation. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op.status));\n        // insert the operation into the list\n        do {\n            // ITT may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op.my_next = res = mailbox; // NOT A RACE\n        } while (mailbox.compare_and_swap(&op, res) != res);\n        if (!res) { // first in the list; handle the operations\n            // ITT note: &mailbox tag covers access to the handler_busy flag, which this\n            // waiting handler thread will try to set before entering handle_operations.\n            call_itt_notify(acquired, &mailbox);\n            start_handle_operations();\n            __TBB_ASSERT(op.status, NULL);\n        }\n        else { // not first; wait for op to be ready\n            call_itt_notify(prepare, &(op.status));\n            spin_wait_while_eq(op.status, uintptr_t(aggregator_operation::agg_waiting));\n            itt_load_word_with_acquire(op.status);\n        }\n    }\n\n\nprivate:\n    //! An atomically updated list (aka mailbox) of aggregator_operations\n    atomic<aggregator_operation *> mailbox;\n\n    //! Controls thread access to handle_operations\n    /** Behaves as boolean flag where 0=false, 1=true */\n    uintptr_t handler_busy;\n\n    handler_type handle_operations;\n\n    //! Trigger the handling of operations when the handler is free\n    void start_handle_operations() {\n        aggregator_operation *pending_operations;\n\n        // ITT note: &handler_busy tag covers access to mailbox as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in mailbox have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get handler_busy: only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &mailbox tag covers access to the handler_busy flag itself.\n        // Capturing the state of the mailbox signifies that handler_busy has been\n        // set and a new active handler will now process that list's operations.\n        call_itt_notify(releasing, &mailbox);\n        // grab pending_operations\n        pending_operations = mailbox.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(pending_operations);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\n//! Basic aggregator interface\nclass aggregator : private aggregator_ext<internal::basic_handler> {\npublic:\n    aggregator() : aggregator_ext<internal::basic_handler>(internal::basic_handler()) {}\n    //! BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.\n    /** The calling thread stores the function object in a basic_operation and\n        places the operation in the aggregator's mailbox */\n    template<typename Body>\n    void execute(const Body& b) {\n        internal::basic_operation<Body> op(b);\n        this->execute_impl(op);\n    }\n};\n\n} // namespace interface6\n\nusing interface6::aggregator;\nusing interface6::aggregator_ext;\nusing interface6::aggregator_operation;\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/aligned_space.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_aligned_space_H\n#define __TBB_aligned_space_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n\nnamespace tbb {\n\n//! Block of space aligned sufficiently to construct an array T with N elements.\n/** The elements are not constructed or destroyed by this class.\n    @ingroup memory_allocation */\ntemplate<typename T,size_t N=1>\nclass aligned_space {\nprivate:\n    typedef __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;\n    element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];\npublic:\n    //! Pointer to beginning of array\n    T* begin() const {return internal::punned_cast<T*>(this);}\n\n    //! Pointer to one past last element in array.\n    T* end() const {return begin()+N;}\n};\n\n} // namespace tbb\n\n#endif /* __TBB_aligned_space_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/atomic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_atomic_H\n#define __TBB_atomic_H\n\n#include <cstddef>\n\n#if _MSC_VER\n#define __TBB_LONG_LONG __int64\n#else\n#define __TBB_LONG_LONG long long\n#endif /* _MSC_VER */\n\n#include \"tbb_machine.h\"\n\n#if _MSC_VER && !__INTEL_COMPILER\n    // Suppress overzealous compiler warnings till the end of the file\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267 4512)\n#endif\n\nnamespace tbb {\n\n//! Specifies memory semantics.\nenum memory_semantics {\n    //! Sequential consistency\n    full_fence,\n    //! Acquire\n    acquire,\n    //! Release\n    release,\n    //! No ordering\n    relaxed\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if __TBB_ALIGNAS_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) alignas(a) t f;\n#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;\n#else\n    #error Do not know syntax for forcing alignment.\n#endif\n\ntemplate<size_t S>\nstruct atomic_rep;           // Primary template declared, but never defined.\n\ntemplate<>\nstruct atomic_rep<1> {       // Specialization\n    typedef int8_t word;\n};\ntemplate<>\nstruct atomic_rep<2> {       // Specialization\n    typedef int16_t word;\n};\ntemplate<>\nstruct atomic_rep<4> {       // Specialization\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n};\n#if __TBB_64BIT_ATOMICS\ntemplate<>\nstruct atomic_rep<8> {       // Specialization\n    typedef int64_t word;\n};\n#endif\n\ntemplate<typename value_type, size_t size>\nstruct aligned_storage;\n\n//the specializations are needed to please MSVC syntax of __declspec(align()) which accept _literal_ constants only\n#if __TBB_ATOMIC_CTORS\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n        aligned_storage() = default ;                                 \\\n        constexpr aligned_storage(value_type value):my_value(value){} \\\n    };                                                                \\\n\n#else\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n    };                                                                \\\n\n#endif\n\ntemplate<typename value_type>\nstruct aligned_storage<value_type,1> {\n    value_type my_value;\n#if __TBB_ATOMIC_CTORS\n    aligned_storage() = default ;\n    constexpr aligned_storage(value_type value):my_value(value){}\n#endif\n};\n\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(2)\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(4)\n#if __TBB_64BIT_ATOMICS\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(8)\n#endif\n\ntemplate<size_t Size, memory_semantics M>\nstruct atomic_traits;        // Primary template declared, but not defined.\n\n#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                                                         \\\n    template<> struct atomic_traits<S,M> {                                                               \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S##M(location,new_value,comparand);                             \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S##M(location,addend);                                        \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S##M(location,value);                                       \\\n        }                                                                                                \\\n    };\n\n#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                                                  \\\n    template<memory_semantics M>                                                                         \\\n    struct atomic_traits<S,M> {                                                                          \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S(location,new_value,comparand);                                \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S(location,addend);                                           \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S(location,value);                                          \\\n        }                                                                                                \\\n    };\n\ntemplate<memory_semantics M>\nstruct atomic_load_store_traits;    // Primary template declaration\n\n#define __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(M)                      \\\n    template<> struct atomic_load_store_traits<M> {                     \\\n        template <typename T>                                           \\\n        inline static T load( const volatile T& location ) {            \\\n            return __TBB_load_##M( location );                          \\\n        }                                                               \\\n        template <typename T>                                           \\\n        inline static void store( volatile T& location, T value ) {     \\\n            __TBB_store_##M( location, value );                         \\\n        }                                                               \\\n    }\n\n#if __TBB_USE_FENCED_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,relaxed)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,relaxed)\n#endif\n#else /* !__TBB_USE_FENCED_ATOMICS */\n__TBB_DECL_ATOMIC_PRIMITIVES(1)\n__TBB_DECL_ATOMIC_PRIMITIVES(2)\n__TBB_DECL_ATOMIC_PRIMITIVES(4)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_ATOMIC_PRIMITIVES(8)\n#endif\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(full_fence);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(acquire);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(release);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);\n\n//! Additive inverse of 1 for type T.\n/** Various compilers issue various warnings if -1 is used with various integer types.\n    The baroque expression below avoids all the warnings (we hope). */\n#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))\n\n//! Base class that provides basic functionality for atomic<T> without fetch_and_add.\n/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor,\n    and can be copied/compared by memcpy/memcmp. */\ntemplate<typename T>\nstruct atomic_impl {\nprotected:\n    aligned_storage<T,sizeof(T)> my_storage;\nprivate:\n    //TODO: rechecks on recent versions of gcc if union is still the _only_ way to do a conversion without warnings\n    //! Union type used to convert type T to underlying integral type.\n    template<typename value_type>\n    union converter {\n        typedef typename atomic_rep<sizeof(value_type)>::word bits_type;\n        converter(){}\n        converter(value_type a_value) : value(a_value) {}\n        value_type value;\n        bits_type bits;\n    };\n\n    template<typename value_t>\n    static typename converter<value_t>::bits_type to_bits(value_t value){\n        return converter<value_t>(value).bits;\n    }\n    template<typename value_t>\n    static value_t to_value(typename converter<value_t>::bits_type bits){\n        converter<value_t> u;\n        u.bits = bits;\n        return u.value;\n    }\n\n    template<typename value_t>\n    union ptr_converter;            //Primary template declared, but never defined.\n\n    template<typename value_t>\n    union ptr_converter<value_t *> {\n        ptr_converter(){}\n        ptr_converter(value_t* a_value) : value(a_value) {}\n        value_t* value;\n        uintptr_t bits;\n    };\n    //TODO: check if making to_bits accepting reference (thus unifying it with to_bits_ref)\n    //does not hurt performance\n    template<typename value_t>\n    static typename converter<value_t>::bits_type & to_bits_ref(value_t& value){\n        //TODO: this #ifdef is temporary workaround, as union conversion seems to fail\n        //on suncc for 64 bit types for 32 bit target\n        #if !__SUNPRO_CC\n            return *(typename converter<value_t>::bits_type*)ptr_converter<value_t*>(&value).bits;\n        #else\n            return *(typename converter<value_t>::bits_type*)(&value);\n        #endif\n    }\n\n\npublic:\n    typedef T value_type;\n\n#if __TBB_ATOMIC_CTORS\n    atomic_impl() = default ;\n    constexpr atomic_impl(value_type value):my_storage(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_store( value_type value ) {\n          return to_value<value_type>(\n                  internal::atomic_traits<sizeof(value_type),M>::fetch_and_store( &my_storage.my_value, to_bits(value) )\n          );\n    }\n\n    value_type fetch_and_store( value_type value ) {\n        return fetch_and_store<full_fence>(value);\n    }\n\n    template<memory_semantics M>\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return to_value<value_type>(\n                internal::atomic_traits<sizeof(value_type),M>::compare_and_swap( &my_storage.my_value, to_bits(value), to_bits(comparand) )\n        );\n    }\n\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return compare_and_swap<full_fence>(value,comparand);\n    }\n\n    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility\n        return  to_value<value_type>(\n                __TBB_load_with_acquire( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    template<memory_semantics M>\n    value_type load () const {\n        return to_value<value_type>(\n                internal::atomic_load_store_traits<M>::load( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    value_type load () const {\n        return load<acquire>();\n    }\n\n    template<memory_semantics M>\n    void store ( value_type value ) {\n        internal::atomic_load_store_traits<M>::store( to_bits_ref(my_storage.my_value), to_bits(value));\n    }\n\n    void store ( value_type value ) {\n        store<release>( value );\n    }\n\nprotected:\n    value_type store_with_release( value_type rhs ) {\n       //TODO: unify with store<release>\n        __TBB_store_with_release( to_bits_ref(my_storage.my_value), to_bits(rhs) );\n        return rhs;\n    }\n};\n\n//! Base class that provides basic functionality for atomic<T> with fetch_and_add.\n/** I is the underlying type.\n    D is the difference type.\n    StepType should be char if I is an integral type, and T if I is a T*. */\ntemplate<typename I, typename D, typename StepType>\nstruct atomic_impl_with_arithmetic: atomic_impl<I> {\npublic:\n    typedef I value_type;\n#if    __TBB_ATOMIC_CTORS\n    atomic_impl_with_arithmetic() = default ;\n    constexpr atomic_impl_with_arithmetic(value_type value): atomic_impl<I>(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_add( D addend ) {\n        return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_storage.my_value, addend*sizeof(StepType) ));\n    }\n\n    value_type fetch_and_add( D addend ) {\n        return fetch_and_add<full_fence>(addend);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_increment() {\n        return fetch_and_add<M>(1);\n    }\n\n    value_type fetch_and_increment() {\n        return fetch_and_add(1);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_decrement() {\n        return fetch_and_add<M>(__TBB_MINUS_ONE(D));\n    }\n\n    value_type fetch_and_decrement() {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n\npublic:\n    value_type operator+=( D value ) {\n        return fetch_and_add(value)+value;\n    }\n\n    value_type operator-=( D value ) {\n        // Additive inverse of value computed using binary minus,\n        // instead of unary minus, for sake of avoiding compiler warnings.\n        return operator+=(D(0)-value);\n    }\n\n    value_type operator++() {\n        return fetch_and_add(1)+1;\n    }\n\n    value_type operator--() {\n        return fetch_and_add(__TBB_MINUS_ONE(D))-1;\n    }\n\n    value_type operator++(int) {\n        return fetch_and_add(1);\n    }\n\n    value_type operator--(int) {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n};\n\n} /* Internal */\n//! @endcond\n\n//! Primary template for atomic.\n/** See the Reference for details.\n    @ingroup synchronization */\ntemplate<typename T>\nstruct atomic: internal::atomic_impl<T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default;\n    constexpr atomic(T arg): internal::atomic_impl<T>(arg) {}\n#endif\n    T operator=( T rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T>& operator=( const atomic<T>& rhs ) {this->store_with_release(rhs); return *this;}\n};\n\n#if __TBB_ATOMIC_CTORS\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            atomic() = default;                                                                     \\\n            constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}        \\\n                                                                                                    \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#else\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#endif\n\n#if __TBB_64BIT_ATOMICS\n//TODO: consider adding non-default (and atomic) copy constructor for 32bit platform\n__TBB_DECL_ATOMIC(__TBB_LONG_LONG)\n__TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)\n#else\n// test_atomic will verify that sizeof(long long)==8\n#endif\n__TBB_DECL_ATOMIC(long)\n__TBB_DECL_ATOMIC(unsigned long)\n\n#if _MSC_VER && !_WIN64\n#if __TBB_ATOMIC_CTORS\n/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.\n   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)\n   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be\n   type synonyms on the platform.  Type U should be the wider variant of T from the\n   perspective of /Wp64. */\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        atomic() = default ;                                                                   \\\n        constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}       \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#else\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#endif\n__TBB_DECL_ATOMIC_ALT(unsigned,size_t)\n__TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)\n#else\n__TBB_DECL_ATOMIC(unsigned)\n__TBB_DECL_ATOMIC(int)\n#endif /* _MSC_VER && !_WIN64 */\n\n__TBB_DECL_ATOMIC(unsigned short)\n__TBB_DECL_ATOMIC(short)\n__TBB_DECL_ATOMIC(char)\n__TBB_DECL_ATOMIC(signed char)\n__TBB_DECL_ATOMIC(unsigned char)\n\n#if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)\n__TBB_DECL_ATOMIC(wchar_t)\n#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */\n\n//! Specialization for atomic<T*> with arithmetic and operator->.\ntemplate<typename T> struct atomic<T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(T* arg): internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T>(arg) {}\n#endif\n    T* operator=( T* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T*>& operator=( const atomic<T*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n    T* operator->() const {\n        return (*this);\n    }\n};\n\n//! Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->.\ntemplate<> struct atomic<void*>: internal::atomic_impl<void*> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(void* arg): internal::atomic_impl<void*>(arg) {}\n#endif\n    void* operator=( void* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<void*>& operator=( const atomic<void*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n};\n\n// Helpers to workaround ugly syntax of calling template member function of a\n// template class with template argument dependent on template parameters.\n\ntemplate <memory_semantics M, typename T>\nT load ( const atomic<T>& a ) { return a.template load<M>(); }\n\ntemplate <memory_semantics M, typename T>\nvoid store ( atomic<T>& a, T value ) { a.template store<M>(value); }\n\nnamespace interface6{\n//! Make an atomic for use in an initialization (list), as an alternative to zero-initialization or normal assignment.\ntemplate<typename T>\natomic<T> make_atomic(T t) {\n    atomic<T> a;\n    store<relaxed>(a,t);\n    return a;\n}\n}\nusing interface6::make_atomic;\n\nnamespace internal {\ntemplate<memory_semantics M, typename T >\nvoid swap(atomic<T> & lhs, atomic<T> & rhs){\n    T tmp = load<M>(lhs);\n    store<M>(lhs,load<M>(rhs));\n    store<M>(rhs,tmp);\n}\n\n// only to aid in the gradual conversion of ordinary variables to proper atomics\ntemplate<typename T>\ninline atomic<T>& as_atomic( T& t ) {\n    return (atomic<T>&)t;\n}\n} // namespace tbb::internal\n\n} // namespace tbb\n\n#if _MSC_VER && !__INTEL_COMPILER\n    #pragma warning (pop)\n#endif // warnings are restored\n\n#endif /* __TBB_atomic_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/blocked_range.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range_H\n#define __TBB_blocked_range_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\nnamespace internal {\n\n// blocked_rangeNd_impl forward declaration in tbb::internal namespace to\n// name it as a friend for a tbb::blocked_range.\ntemplate<typename Value, unsigned int N, typename>\nclass blocked_rangeNd_impl;\n\n} // namespace internal\n\n/** \\page range_req Requirements on range concept\n    Class \\c R implementing the concept of range must define:\n    - \\code R::R( const R& ); \\endcode               Copy constructor\n    - \\code R::~R(); \\endcode                        Destructor\n    - \\code bool R::is_divisible() const; \\endcode   True if range can be partitioned into two subranges\n    - \\code bool R::empty() const; \\endcode          True if range is empty\n    - \\code R::R( R& r, split ); \\endcode            Split range \\c r into two subranges.\n**/\n\n//! A range over which to iterate.\n/** @ingroup algorithms */\ntemplate<typename Value>\nclass blocked_range {\npublic:\n    //! Type of a value\n    /** Called a const_iterator for sake of algorithms that need to treat a blocked_range\n        as an STL container. */\n    typedef Value const_iterator;\n\n    //! Type for size of a range\n    typedef std::size_t size_type;\n\n#if __TBB_DEPRECATED_BLOCKED_RANGE_DEFAULT_CTOR\n    //! Construct range with default-constructed values for begin, end, and grainsize.\n    /** Requires that Value have a default constructor. */\n    blocked_range() : my_end(), my_begin(), my_grainsize() {}\n#endif\n\n    //! Construct range over half-open interval [begin,end), with the given grainsize.\n    blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) :\n        my_end(end_), my_begin(begin_), my_grainsize(grainsize_)\n    {\n        __TBB_ASSERT( my_grainsize>0, \"grainsize must be positive\" );\n    }\n\n    //! Beginning of range.\n    const_iterator begin() const {return my_begin;}\n\n    //! One past last value in range.\n    const_iterator end() const {return my_end;}\n\n    //! Size of the range\n    /** Unspecified if end()<begin(). */\n    size_type size() const {\n        __TBB_ASSERT( !(end()<begin()), \"size() unspecified if end()<begin()\" );\n        return size_type(my_end-my_begin);\n    }\n\n    //! The grain size for this range.\n    size_type grainsize() const {return my_grainsize;}\n\n    //------------------------------------------------------------------------\n    // Methods that implement Range concept\n    //------------------------------------------------------------------------\n\n    //! True if range is empty.\n    bool empty() const {return !(my_begin<my_end);}\n\n    //! True if range is divisible.\n    /** Unspecified if end()<begin(). */\n    bool is_divisible() const {return my_grainsize<size();}\n\n    //! Split range.\n    /** The new Range *this has the second part, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, split ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, split())),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    //! Split range.\n    /** The new Range *this has the second part split according to specified proportion, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, proportional_split& proportion ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, proportion)),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\nprivate:\n    /** NOTE: my_end MUST be declared before my_begin, otherwise the splitting constructor will break. */\n    Value my_end;\n    Value my_begin;\n    size_type my_grainsize;\n\n    //! Auxiliary function used by the splitting constructor.\n    static Value do_split( blocked_range& r, split )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n        Value middle = r.my_begin + (r.my_end - r.my_begin) / 2u;\n        r.my_end = middle;\n        return middle;\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    static Value do_split( blocked_range& r, proportional_split& proportion )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n\n        // usage of 32-bit floating point arithmetic is not enough to handle ranges of\n        // more than 2^24 iterations accurately. However, even on ranges with 2^64\n        // iterations the computational error approximately equals to 0.000001% which\n        // makes small impact on uniform distribution of such range's iterations (assuming\n        // all iterations take equal time to complete). See 'test_partitioner_whitebox'\n        // for implementation of an exact split algorithm\n        size_type right_part = size_type(float(r.size()) * float(proportion.right())\n                                         / float(proportion.left() + proportion.right()) + 0.5f);\n        return r.my_end = Value(r.my_end - right_part);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    template<typename RowValue, typename ColValue>\n    friend class blocked_range2d;\n\n    template<typename RowValue, typename ColValue, typename PageValue>\n    friend class blocked_range3d;\n\n    template<typename DimValue, unsigned int N, typename>\n    friend class internal::blocked_rangeNd_impl;\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/blocked_range2d.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range2d_H\n#define __TBB_blocked_range2d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 2-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename RowValue, typename ColValue=RowValue>\nclass blocked_range2d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<RowValue> row_range_type;\n    typedef blocked_range<ColValue> col_range_type;\n\nprivate:\n    row_range_type my_rows;\n    col_range_type my_cols;\n\npublic:\n\n    blocked_range2d( RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,\n                     ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) :\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {}\n\n    blocked_range2d( RowValue row_begin, RowValue row_end,\n                     ColValue col_begin, ColValue col_end ) :\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {}\n\n    //! True if range is empty\n    bool empty() const {\n        // Range is empty if at least one dimension is empty.\n        return my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range2d( blocked_range2d& r, split ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range2d( blocked_range2d& r, proportional_split& proportion ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n\nprivate:\n\n    template <typename Split>\n    void do_split( blocked_range2d& r, Split& split_obj )\n    {\n        if( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n            my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n        } else {\n            my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n        }\n    }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range2d_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/blocked_range3d.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_blocked_range3d_H\n#define __TBB_blocked_range3d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 3-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>\nclass blocked_range3d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<PageValue> page_range_type;\n    typedef blocked_range<RowValue>  row_range_type;\n    typedef blocked_range<ColValue>  col_range_type;\n\nprivate:\n    page_range_type my_pages;\n    row_range_type  my_rows;\n    col_range_type  my_cols;\n\npublic:\n\n    blocked_range3d( PageValue page_begin, PageValue page_end,\n                     RowValue  row_begin,  RowValue row_end,\n                     ColValue  col_begin,  ColValue col_end ) :\n        my_pages(page_begin,page_end),\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {}\n\n    blocked_range3d( PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize,\n                     RowValue  row_begin,  RowValue row_end,   typename row_range_type::size_type row_grainsize,\n                     ColValue  col_begin,  ColValue col_end,   typename col_range_type::size_type col_grainsize ) :\n        my_pages(page_begin,page_end,page_grainsize),\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {}\n\n    //! True if range is empty\n    bool empty() const {\n        // Range is empty if at least one dimension is empty.\n        return my_pages.empty() || my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return  my_pages.is_divisible() || my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range3d( blocked_range3d& r, split ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range3d( blocked_range3d& r, proportional_split& proportion ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    //! The pages of the iteration space\n    const page_range_type& pages() const {return my_pages;}\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n\nprivate:\n\n    template <typename Split>\n    void do_split( blocked_range3d& r, Split& split_obj)\n    {\n        if ( my_pages.size()*double(my_rows.grainsize()) < my_rows.size()*double(my_pages.grainsize()) ) {\n            if ( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n            }\n        } else {\n            if ( my_pages.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_pages.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_pages.my_begin = page_range_type::do_split(r.my_pages, split_obj);\n            }\n        }\n    }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range3d_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/blocked_rangeNd.h",
    "content": "/*\r\n    Copyright (c) 2017-2018 Intel Corporation\r\n\r\n    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n    you may not use this file except in compliance with the License.\r\n    You may obtain a copy of the License at\r\n\r\n        http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n    Unless required by applicable law or agreed to in writing, software\r\n    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n    See the License for the specific language governing permissions and\r\n    limitations under the License.\r\n\r\n\r\n\r\n\r\n*/\r\n\r\n#ifndef __TBB_blocked_rangeNd_H\r\n#define __TBB_blocked_rangeNd_H\r\n\r\n#if ! TBB_PREVIEW_BLOCKED_RANGE_ND\r\n    #error Set TBB_PREVIEW_BLOCKED_RANGE_ND to include blocked_rangeNd.h\r\n#endif\r\n\r\n#include \"tbb_config.h\"\r\n\r\n// tbb::blocked_rangeNd requires C++11 support\r\n#if __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT\r\n\r\n#include \"internal/_template_helpers.h\" // index_sequence, make_index_sequence\r\n\r\n#include <array>\r\n#include <algorithm>    // std::any_of\r\n#include <type_traits>  // std::is_same, std::enable_if\r\n\r\n#include \"tbb/blocked_range.h\"\r\n\r\nnamespace tbb {\r\nnamespace internal {\r\n\r\n/*\r\n    The blocked_rangeNd_impl uses make_index_sequence<N> to automatically generate a ctor with\r\n    exactly N arguments of the type tbb::blocked_range<Value>. Such ctor provides an opportunity\r\n    to use braced-init-list parameters to initialize each dimension.\r\n    Use of parameters, whose representation is a braced-init-list, but they're not\r\n    std::initializer_list or a reference to one, produces a non-deduced context\r\n    within template argument deduction.\r\n\r\n    NOTE: blocked_rangeNd must be exactly a templated alias to the blocked_rangeNd_impl\r\n    (and not e.g. a derived class), otherwise it would need to declare its own ctor\r\n    facing the same problem that the impl class solves.\r\n*/\r\n\r\ntemplate<typename Value, unsigned int N, typename = make_index_sequence<N>>\r\nclass blocked_rangeNd_impl;\r\n\r\ntemplate<typename Value, unsigned int N, std::size_t... Is>\r\nclass blocked_rangeNd_impl<Value, N, index_sequence<Is...>> {\r\npublic:\r\n    //! Type of a value.\r\n    using value_type = Value;\r\n\r\nprivate:\r\n\r\n    //! Helper type to construct range with N tbb::blocked_range<value_type> objects.\r\n    template<std::size_t>\r\n    using dim_type_helper = tbb::blocked_range<value_type>;\r\n\r\npublic:\r\n    blocked_rangeNd_impl() = delete;\r\n\r\n    //! Constructs N-dimensional range over N half-open intervals each represented as tbb::blocked_range<Value>.\r\n    blocked_rangeNd_impl(const dim_type_helper<Is>&... args) : my_dims{ {args...} } {}\r\n\r\n    //! Dimensionality of a range.\r\n    static constexpr unsigned int ndims() { return N; }\r\n\r\n    //! Range in certain dimension.\r\n    const tbb::blocked_range<value_type>& dim(unsigned int dimension) const {\r\n        __TBB_ASSERT(dimension < N, \"out of bound\");\r\n        return my_dims[dimension];\r\n    }\r\n\r\n    //------------------------------------------------------------------------\r\n    // Methods that implement Range concept\r\n    //------------------------------------------------------------------------\r\n\r\n    //! True if at least one dimension is empty.\r\n    bool empty() const {\r\n        return std::any_of(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& d) {\r\n            return d.empty();\r\n        });\r\n    }\r\n\r\n    //! True if at least one dimension is divisible.\r\n    bool is_divisible() const {\r\n        return std::any_of(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& d) {\r\n            return d.is_divisible();\r\n        });\r\n    }\r\n\r\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\r\n    //! Static field to support proportional split.\r\n    static const bool is_splittable_in_proportion = true;\r\n\r\n    blocked_rangeNd_impl(blocked_rangeNd_impl& r, proportional_split proportion) : my_dims(r.my_dims) {\r\n        do_split(r, proportion);\r\n    }\r\n#endif\r\n\r\n    blocked_rangeNd_impl(blocked_rangeNd_impl& r, split proportion) : my_dims(r.my_dims) {\r\n        do_split(r, proportion);\r\n    }\r\n\r\nprivate:\r\n    __TBB_STATIC_ASSERT(N != 0, \"zero dimensional blocked_rangeNd can't be constructed\");\r\n\r\n    //! Ranges in each dimension.\r\n    std::array<tbb::blocked_range<value_type>, N> my_dims;\r\n\r\n    template<typename split_type>\r\n    void do_split(blocked_rangeNd_impl& r, split_type proportion) {\r\n        __TBB_STATIC_ASSERT((is_same_type<split_type, split>::value\r\n                            || is_same_type<split_type, proportional_split>::value),\r\n                            \"type of split object is incorrect\");\r\n        __TBB_ASSERT(r.is_divisible(), \"can't split not divisible range\");\r\n\r\n        auto my_it = std::max_element(my_dims.begin(), my_dims.end(), [](const tbb::blocked_range<value_type>& first, const tbb::blocked_range<value_type>& second) {\r\n            return (first.size() * second.grainsize() < second.size() * first.grainsize());\r\n        });\r\n\r\n        auto r_it = r.my_dims.begin() + (my_it - my_dims.begin());\r\n\r\n        my_it->my_begin = tbb::blocked_range<value_type>::do_split(*r_it, proportion);\r\n\r\n        // (!(my_it->my_begin < r_it->my_end) && !(r_it->my_end < my_it->my_begin)) equals to\r\n        // (my_it->my_begin == r_it->my_end), but we can't use operator== due to Value concept\r\n        __TBB_ASSERT(!(my_it->my_begin < r_it->my_end) && !(r_it->my_end < my_it->my_begin),\r\n                     \"blocked_range has been split incorrectly\");\r\n    }\r\n};\r\n\r\n} // namespace internal\r\n\r\ntemplate<typename Value, unsigned int N>\r\nusing blocked_rangeNd = internal::blocked_rangeNd_impl<Value, N>;\r\n\r\n} // namespace tbb\r\n\r\n#endif /* __TBB_CPP11_PRESENT && __TBB_CPP11_ARRAY_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT */\r\n#endif /* __TBB_blocked_rangeNd_H */\r\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/cache_aligned_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_cache_aligned_allocator_H\n#define __TBB_cache_aligned_allocator_H\n\n#include <new>\n#include \"tbb_stddef.h\"\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Cache/sector line size.\n    /** @ingroup memory_allocation */\n    size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();\n\n    //! Allocate memory on cache/sector line boundary.\n    /** @ingroup memory_allocation */\n    void* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );\n\n    //! Free memory allocated by NFS_Allocate.\n    /** Freeing a NULL pointer is allowed, but has no effect.\n        @ingroup memory_allocation */\n    void __TBB_EXPORTED_FUNC NFS_Free( void* );\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass cache_aligned_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n\n    cache_aligned_allocator() throw() {}\n    cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}\n    template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects, starting on a cache/sector line.\n    pointer allocate( size_type n, const void* hint=0 ) {\n        // The \"hint\" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt\n        return pointer(internal::NFS_Allocate( n, sizeof(value_type), const_cast<void*>(hint) ));\n    }\n\n    //! Free block of memory that starts on a cache line\n    void deallocate( pointer p, size_type ) {\n        internal::NFS_Free(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        return (~size_t(0)-internal::NFS_MaxLineSize)/sizeof(value_type);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass cache_aligned_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#endif /* __TBB_cache_aligned_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/combinable.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_combinable_H\n#define __TBB_combinable_H\n\n#include \"enumerable_thread_specific.h\"\n#include \"cache_aligned_allocator.h\"\n\nnamespace tbb {\n/** \\name combinable\n    **/\n//@{\n//! Thread-local storage with optional reduction\n/** @ingroup containers */\n    template <typename T>\n    class combinable {\n\n    private:\n        typedef typename tbb::cache_aligned_allocator<T> my_alloc;\n        typedef typename tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;\n        my_ets_type my_ets;\n\n    public:\n\n        combinable() { }\n\n        template <typename finit>\n        explicit combinable( finit _finit) : my_ets(_finit) { }\n\n        //! destructor\n        ~combinable() { }\n\n        combinable( const combinable& other) : my_ets(other.my_ets) { }\n\n#if __TBB_ETS_USE_CPP11\n        combinable( combinable&& other) : my_ets( std::move(other.my_ets)) { }\n#endif\n\n        combinable & operator=( const combinable & other) {\n            my_ets = other.my_ets;\n            return *this;\n        }\n\n#if __TBB_ETS_USE_CPP11\n        combinable & operator=( combinable && other) {\n            my_ets=std::move(other.my_ets);\n            return *this;\n        }\n#endif\n\n        void clear() { my_ets.clear(); }\n\n        T& local() { return my_ets.local(); }\n\n        T& local(bool & exists) { return my_ets.local(exists); }\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) { return my_ets.combine(f_combine); }\n\n        // combine_func_t has signature void(T) or void(const T&)\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) { my_ets.combine_each(f_combine); }\n\n    };\n} // namespace tbb\n#endif /* __TBB_combinable_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/compat/condition_variable",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_condition_variable_H\n#define __TBB_condition_variable_H\n\n#if _WIN32||_WIN64\n#include \"../machine/windows_api.h\"\n\nnamespace tbb { \nnamespace interface5 {\nnamespace internal { \nstruct condition_variable_using_event\n{\n    //! Event for blocking waiting threads.\n    HANDLE event;\n    //! Protects invariants involving n_waiters, release_count, and epoch.\n    CRITICAL_SECTION mutex;\n    //! Number of threads waiting on this condition variable\n    int n_waiters;\n    //! Number of threads remaining that should no longer wait on this condition variable.\n    int release_count;\n    //! To keep threads from waking up prematurely with earlier signals.\n    unsigned epoch;\n};\n}}} // namespace tbb::interface5::internal\n\n#ifndef CONDITION_VARIABLE_INIT\ntypedef void* CONDITION_VARIABLE;\ntypedef CONDITION_VARIABLE* PCONDITION_VARIABLE;\n#endif\n\n#else /* if not _WIN32||_WIN64 */\n#include <errno.h> // some systems need it for ETIMEDOUT\n#include <pthread.h>\n#if __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif\n#endif /* _WIN32||_WIN64 */\n\n#include \"../tbb_stddef.h\"\n#include \"../mutex.h\"\n#include \"../tbb_thread.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface5 {\n\n// C++0x standard working draft 30.4.3\n// Lock tag types\nstruct defer_lock_t { }; //! do not acquire ownership of the mutex\nstruct try_to_lock_t { }; //! try to acquire ownership of the mutex without blocking\nstruct adopt_lock_t { }; //! assume the calling thread has already\nconst defer_lock_t defer_lock = {};\nconst try_to_lock_t try_to_lock = {};\nconst adopt_lock_t adopt_lock = {};\n\n// C++0x standard working draft 30.4.3.1\n//! lock_guard \ntemplate<typename M>\nclass lock_guard : tbb::internal::no_copy {\npublic:\n    //! mutex type\n    typedef M mutex_type;\n\n    //! Constructor\n    /** precondition: If mutex_type is not a recursive mutex, the calling thread\n        does not own the mutex m. */\n    explicit lock_guard(mutex_type& m) : pm(m) {m.lock();}\n    \n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex m. */\n    lock_guard(mutex_type& m, adopt_lock_t) : pm(m) {}\n\n    //! Destructor\n    ~lock_guard() { pm.unlock(); }\nprivate:\n    mutex_type& pm;\n};\n\n// C++0x standard working draft 30.4.3.2\n//! unique_lock \ntemplate<typename M>\nclass unique_lock : tbb::internal::no_copy {\n    friend class condition_variable;\npublic:\n    typedef M mutex_type;\n\n    // 30.4.3.2.1 construct/copy/destroy\n    // NB: Without constructors that take an r-value reference to a unique_lock, the following constructor is of little use.\n    //! Constructor\n    /** postcondition: pm==0 && owns==false */\n    unique_lock() : pm(NULL), owns(false) {}\n\n    //! Constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n        does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n        postcondition: pm==&m and owns==true */\n    explicit unique_lock(mutex_type& m) : pm(&m) {m.lock(); owns=true;}\n\n    //! Defer_lock constructor\n    /** postcondition: pm==&m and owns==false */\n    unique_lock(mutex_type& m, defer_lock_t) : pm(&m), owns(false) {}\n\n    //! Try_to_lock constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n       does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n       postcondition: pm==&m and owns==res where res is the value returned by\n       the call to m.try_lock(). */\n    unique_lock(mutex_type& m, try_to_lock_t) : pm(&m) {owns = m.try_lock();}\n\n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex. If it does not, mutex->unlock() would fail.\n        postcondition: pm==&m and owns==true */\n    unique_lock(mutex_type& m, adopt_lock_t) : pm(&m), owns(true) {}\n\n    //! Timed unique_lock acquisition.\n    /** To avoid requiring support for namespace chrono, this method deviates from the working draft in that \n        it uses tbb::tick_count::interval_t to specify the time duration. */\n    unique_lock(mutex_type& m, const tick_count::interval_t &i) : pm(&m) {owns = try_lock_for( i );}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        construction), src.pm == 0 and src.owns == false. */\n    unique_lock(unique_lock && src): pm(NULL), owns(false) {this->swap(src);}\n\n    //! Move assignment\n    /** effects: If owns calls pm->unlock().\n        Postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        assignment), src.pm == 0 and src.owns == false. */\n    unique_lock& operator=(unique_lock && src) {\n        if (owns)\n            this->unlock();\n        pm = NULL;\n        this->swap(src);\n        return *this;\n    }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Destructor\n    ~unique_lock() { if( owns ) pm->unlock(); }\n\n    // 30.4.3.2.2 locking\n    //! Lock the mutex and own it.\n    void lock() {\n        if( pm ) {\n            if( !owns ) {\n                pm->lock();\n                owns = true;\n            } else \n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( owns, NULL );\n    }\n\n    //! Try to lock the mutex. \n    /** If successful, note that this lock owns it. Otherwise, set it false. */\n    bool try_lock() {\n        if( pm ) {\n            if( !owns )\n                owns = pm->try_lock();\n            else\n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        return owns;\n    }\n \n    //! Try to lock the mutex. \n    bool try_lock_for( const tick_count::interval_t &i );\n\n    //! Unlock the mutex\n    /** And note that this lock no longer owns it. */\n    void unlock() { \n        if( owns ) {\n            pm->unlock();\n            owns = false;\n        } else\n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( !owns, NULL );\n    }\n\n    // 30.4.3.2.3 modifiers\n    //! Swap the two unique locks\n    void swap(unique_lock& u) {\n        mutex_type* t_pm = u.pm;    u.pm   = pm;    pm   = t_pm;\n        bool t_owns      = u.owns;  u.owns = owns;  owns = t_owns;\n    }\n\n    //! Release control over the mutex.\n    mutex_type* release() {\n        mutex_type* o_pm = pm; \n        pm = NULL; \n        owns = false; \n        return o_pm; \n    }\n\n    // 30.4.3.2.4 observers\n    //! Does this lock own the mutex?\n    bool owns_lock() const { return owns; }\n\n    // TODO: Un-comment 'explicit' when the last non-C++0x compiler support is dropped\n    //! Does this lock own the mutex?\n    /*explicit*/ operator bool() const { return owns; }\n\n    //! Return the mutex that this lock currently has.\n    mutex_type* mutex() const { return pm; }\n\nprivate:\n    mutex_type* pm;\n    bool owns;\n};\n\ntemplate<typename M>\nbool unique_lock<M>::try_lock_for( const tick_count::interval_t &i)\n{ \n    const int unique_lock_tick = 100; /* microseconds; 0.1 milliseconds */\n    // the smallest wait-time is 0.1 milliseconds.\n    bool res = pm->try_lock();\n    int duration_in_micro; \n    if( !res && (duration_in_micro=int(i.seconds()*1e6))>unique_lock_tick ) {\n        tick_count::interval_t i_100( double(unique_lock_tick)/1e6 /* seconds */); // 100 microseconds = 0.1*10E-3\n        do {\n            this_tbb_thread::sleep(i_100); // sleep for 100 micro seconds\n            duration_in_micro -= unique_lock_tick;\n            res = pm->try_lock();\n        } while( !res && duration_in_micro>unique_lock_tick );\n    }\n    return (owns=res);\n}\n\n//! Swap the two unique locks that have the mutexes of same type \ntemplate<typename M>\nvoid swap(unique_lock<M>& x, unique_lock<M>& y) { x.swap( y ); }\n\nnamespace internal {\n\n#if _WIN32||_WIN64\nunion condvar_impl_t {\n    condition_variable_using_event cv_event;\n    CONDITION_VARIABLE             cv_native;\n};\nvoid __TBB_EXPORTED_FUNC internal_initialize_condition_variable( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_destroy_condition_variable(    condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_one( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_all( condvar_impl_t& cv );\nbool __TBB_EXPORTED_FUNC internal_condition_variable_wait( condvar_impl_t& cv, mutex* mtx, const tick_count::interval_t* i = NULL );\n\n#else /* if !(_WIN32||_WIN64), i.e., POSIX threads */\ntypedef pthread_cond_t condvar_impl_t;\n#endif\n\n} // namespace internal\n\n//! cv_status\n/** C++0x standard working draft 30.5 */\nenum cv_status { no_timeout, timeout }; \n\n//! condition variable\n/** C++0x standard working draft 30.5.1 \n    @ingroup synchronization */\nclass condition_variable : tbb::internal::no_copy {\npublic:\n    //! Constructor\n    condition_variable() { \n#if _WIN32||_WIN64\n        internal_initialize_condition_variable( my_cv ); \n#else\n        pthread_cond_init( &my_cv, NULL );\n#endif\n    }\n\n    //! Destructor\n    ~condition_variable() { \n        //precondition: There shall be no thread blocked on *this.\n#if _WIN32||_WIN64\n        internal_destroy_condition_variable( my_cv );\n#else\n        pthread_cond_destroy( &my_cv );\n#endif\n    }\n\n    //! Notify one thread and wake it up\n    void notify_one() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_one( my_cv ); \n#else\n        pthread_cond_signal( &my_cv );\n#endif\n    }\n\n    //! Notify all threads \n    void notify_all() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_all( my_cv ); \n#else\n        pthread_cond_broadcast( &my_cv );\n#endif\n    }\n\n    //! Release the mutex associated with the lock and wait on this condition variable\n    void wait(unique_lock<mutex>& lock);\n\n    //! Wait on this condition variable while pred is false\n    template <class Predicate>\n    void wait(unique_lock<mutex>& lock, Predicate pred) {\n        while( !pred() )\n            wait( lock );\n    }\n\n    //! Timed version of wait()\n    cv_status wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i );\n\n    //! Timed version of the predicated wait\n    /** The loop terminates when pred() returns true or when the time duration specified by rel_time (i) has elapsed. */\n    template<typename Predicate>\n    bool wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i, Predicate pred)\n    {\n        while( !pred() ) {\n            cv_status st = wait_for( lock, i );\n            if( st==timeout )\n                return pred();\n        }\n        return true;\n    }\n\n    // C++0x standard working draft. 30.2.3\n    typedef internal::condvar_impl_t* native_handle_type;\n\n    native_handle_type native_handle() { return (native_handle_type) &my_cv; }\n\nprivate:\n    internal::condvar_impl_t my_cv;\n};\n\n\n#if _WIN32||_WIN64\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( !internal_condition_variable_wait( my_cv, lock.mutex() ) ) {\n        int ec = GetLastError();\n        // on Windows 7, SleepConditionVariableCS() may return ERROR_TIMEOUT while the doc says it returns WAIT_TIMEOUT\n        __TBB_ASSERT_EX( ec!=WAIT_TIMEOUT&&ec!=ERROR_TIMEOUT, NULL );\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    // condvar_wait could be SleepConditionVariableCS (or SleepConditionVariableSRW) or our own pre-vista cond_var_wait()\n    if( !internal_condition_variable_wait( my_cv, lock.mutex(), &i ) ) {\n        int ec = GetLastError();\n        if( ec==WAIT_TIMEOUT || ec==ERROR_TIMEOUT )\n            rc = timeout;\n        else {\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n\n#else /* !(_WIN32||_WIN64) */\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( pthread_cond_wait( &my_cv, lock.mutex()->native_handle() ) ) {\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    // upon successful return, the mutex has been locked and is owned by the calling thread.\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n#if __linux__\n    struct timespec req;\n    double sec = i.seconds();\n    clock_gettime( CLOCK_REALTIME, &req );\n    req.tv_sec  += static_cast<long>(sec);\n    req.tv_nsec += static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#else /* generic Unix */\n    struct timeval tv;\n    struct timespec req;\n    double sec = i.seconds();\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    req.tv_sec  = tv.tv_sec + static_cast<long>(sec);\n    req.tv_nsec = tv.tv_usec*1000 + static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#endif /*(choice of OS) */\n    if( req.tv_nsec>=1e9 ) {\n        req.tv_sec  += 1;\n        req.tv_nsec -= static_cast<long int>(1e9);\n    }\n    __TBB_ASSERT( 0<=req.tv_nsec && req.tv_nsec<1e9, NULL );\n\n    int ec;\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( ( ec=pthread_cond_timedwait( &my_cv, lock.mutex()->native_handle(), &req ) ) ) {\n        if( ec==ETIMEDOUT )\n            rc = timeout;\n        else {\n            __TBB_ASSERT( lock.try_lock()==false, NULL );\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n#endif /* !(_WIN32||_WIN64) */\n\n} // namespace interface5\n\n__TBB_DEFINE_PROFILING_SET_NAME(interface5::condition_variable)\n\n} // namespace tbb \n\n#if TBB_IMPLEMENT_CPP0X\n\nnamespace std {\n\nusing tbb::interface5::defer_lock_t;\nusing tbb::interface5::try_to_lock_t;\nusing tbb::interface5::adopt_lock_t;\nusing tbb::interface5::defer_lock;\nusing tbb::interface5::try_to_lock;\nusing tbb::interface5::adopt_lock;\nusing tbb::interface5::lock_guard;\nusing tbb::interface5::unique_lock;\nusing tbb::interface5::swap;   /* this is for void std::swap(unique_lock<M>&,unique_lock<M>&) */\nusing tbb::interface5::condition_variable;\nusing tbb::interface5::cv_status;\nusing tbb::interface5::timeout;\nusing tbb::interface5::no_timeout;\n\n} // namespace std \n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#endif /* __TBB_condition_variable_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/compat/ppl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_compat_ppl_H\n#define __TBB_compat_ppl_H\n\n#include \"../task_group.h\"\n#include \"../parallel_invoke.h\"\n#include \"../parallel_for_each.h\"\n#include \"../parallel_for.h\"\n#include \"../tbb_exception.h\"\n#include \"../critical_section.h\"\n#include \"../reader_writer_lock.h\"\n#include \"../combinable.h\"\n\nnamespace Concurrency {\n\n#if __TBB_TASK_GROUP_CONTEXT\n    using tbb::task_handle;\n    using tbb::task_group_status;\n    using tbb::task_group;\n    using tbb::structured_task_group;\n    using tbb::invalid_multiple_scheduling;\n    using tbb::missing_wait;\n    using tbb::make_task;\n\n    using tbb::not_complete;\n    using tbb::complete;\n    using tbb::canceled;\n\n    using tbb::is_current_task_group_canceling;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    using tbb::parallel_invoke;\n    using tbb::strict_ppl::parallel_for;\n    using tbb::parallel_for_each;\n    using tbb::critical_section;\n    using tbb::reader_writer_lock;\n    using tbb::combinable;\n\n    using tbb::improper_lock;\n\n} // namespace Concurrency\n\n#endif /* __TBB_compat_ppl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/compat/thread",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_thread_H\n#define __TBB_thread_H\n\n#include \"../tbb_config.h\"\n\n#if TBB_IMPLEMENT_CPP0X\n\n#include \"../tbb_thread.h\"\n\nnamespace std {\n\ntypedef tbb::tbb_thread thread;\n\nnamespace this_thread {\n    using tbb::this_tbb_thread::get_id;\n    using tbb::this_tbb_thread::yield;\n\n    inline void sleep_for(const tbb::tick_count::interval_t& rel_time) {\n        tbb::internal::thread_sleep_v3( rel_time );\n    }\n}\n\n} // namespace std\n\n#else /* TBB_IMPLEMENT_CPP0X */\n\n#define __TBB_COMPAT_THREAD_RECURSION_PROTECTOR 1\n#include <thread>\n#undef __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#else /* __TBB_thread_H */\n\n#if __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n#error The tbb/compat/thread header attempts to include itself. \\\n       Please make sure that {TBBROOT}/include/tbb/compat is NOT in include paths.\n#endif\n\n#endif /* __TBB_thread_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/compat/tuple",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tuple_H\n#define __TBB_tuple_H\n\n#include <utility>\n#include \"../tbb_stddef.h\"\n\n// build preprocessor variables for varying number of arguments\n// Need the leading comma so the empty __TBB_T_PACK will not cause a syntax error.\n#if __TBB_VARIADIC_MAX <= 5\n#define __TBB_T_PACK\n#define __TBB_U_PACK\n#define __TBB_TYPENAME_T_PACK\n#define __TBB_TYPENAME_U_PACK\n#define __TBB_NULL_TYPE_PACK\n#define __TBB_REF_T_PARAM_PACK\n#define __TBB_CONST_REF_T_PARAM_PACK\n#define __TBB_T_PARAM_LIST_PACK\n#define __TBB_CONST_NULL_REF_PACK\n//\n#elif __TBB_VARIADIC_MAX == 6\n#define __TBB_T_PACK ,__T5\n#define __TBB_U_PACK ,__U5\n#define __TBB_TYPENAME_T_PACK , typename __T5\n#define __TBB_TYPENAME_U_PACK , typename __U5\n#define __TBB_NULL_TYPE_PACK , null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5\n#define __TBB_T_PARAM_LIST_PACK ,t5\n#define __TBB_CONST_NULL_REF_PACK , const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 7\n#define __TBB_T_PACK ,__T5, __T6\n#define __TBB_U_PACK ,__U5, __U6\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6\n#define __TBB_NULL_TYPE_PACK , null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5, const __T6& t6\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 8\n#define __TBB_T_PACK ,__T5, __T6, __T7\n#define __TBB_U_PACK ,__U5, __U6, __U7\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6, typename __T7\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6, typename __U7\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 9\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX >= 10\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8, __T9\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8, __U9\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8, typename __T9\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8, typename __U9\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8, __T9& t9\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8, const __T9& t9\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8 ,t9\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&, const null_type&\n#endif\n\n\n\nnamespace tbb {\nnamespace interface5 {\n\nnamespace internal {\nstruct null_type { };\n}\nusing internal::null_type;\n\n// tuple forward declaration\ntemplate <typename __T0=null_type, typename __T1=null_type, typename __T2=null_type,\n          typename __T3=null_type, typename __T4=null_type\n#if __TBB_VARIADIC_MAX >= 6\n, typename __T5=null_type\n#if __TBB_VARIADIC_MAX >= 7\n, typename __T6=null_type\n#if __TBB_VARIADIC_MAX >= 8\n, typename __T7=null_type\n#if __TBB_VARIADIC_MAX >= 9\n, typename __T8=null_type\n#if __TBB_VARIADIC_MAX >= 10\n, typename __T9=null_type\n#endif\n#endif\n#endif\n#endif\n#endif\n>\nclass tuple;\n\nnamespace internal {\n\n// const null_type temp\ninline const null_type cnull() { return null_type(); }\n\n// cons forward declaration\ntemplate <typename __HT, typename __TT> struct cons;\n\n// type of a component of the cons\ntemplate<int __N, typename __T>\nstruct component {\n    typedef typename __T::tail_type next;\n    typedef typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0,__T> {\n    typedef typename __T::head_type type;\n};\n\ntemplate<>\nstruct component<0,null_type> {\n    typedef null_type type;\n};\n\n// const version of component\n\ntemplate<int __N, typename __T>\nstruct component<__N, const __T>\n{\n    typedef typename __T::tail_type next;\n    typedef const typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0, const __T>\n{\n    typedef const typename __T::head_type type;\n};\n\n\n// helper class for getting components of cons\ntemplate< int __N>\nstruct get_helper {\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\n};\n\ntemplate<>\nstruct get_helper<0> {\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return ti.head;\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return ti.head;\n}\n};\n\n// traits adaptor\ntemplate <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK>\nstruct tuple_traits {\n    typedef cons <__T0, typename tuple_traits<__T1, __T2, __T3, __T4 __TBB_T_PACK , null_type>::U > U;\n};\n\ntemplate <typename __T0>\nstruct tuple_traits<__T0, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef cons<__T0, null_type> U;\n};\n\ntemplate<>\nstruct tuple_traits<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef null_type U;\n};\n\n\n// core cons defs\ntemplate <typename __HT, typename __TT>\nstruct cons{\n\n    typedef __HT head_type;\n    typedef __TT tail_type;\n\n    head_type head; \n    tail_type tail;\n\n    static const int length = 1 + tail_type::length;\n\n    // default constructors\n    explicit cons() : head(), tail() { }\n\n    // non-default constructors\n    cons(head_type& h, const tail_type& t) : head(h), tail(t) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(const __T0& t0, const __T1& t1, const __T2& t2, const __T3& t3, const __T4& t4 __TBB_CONST_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK, cnull()) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(__T0& t0, __T1& t1, __T2& t2, __T3& t3, __T4& t4 __TBB_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK , cnull()) { }\n\n    template <typename __HT1, typename __TT1>\n    cons(const cons<__HT1,__TT1>& other) : head(other.head), tail(other.tail) { }\n\n    cons& operator=(const cons& other) { head = other.head; tail = other.tail; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n    friend bool operator<(const cons& me, const cons& other)  {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n    friend bool operator>(const cons& me, const cons& other)  { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) { return !(me==other); }\n    friend bool operator>=(const cons& me, const cons& other) { return !(me<other); }\n    friend bool operator<=(const cons& me, const cons& other) { return !(me>other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator==(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return other<me; }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator!=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me==other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me<other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me>other); }\n\n\n};  // cons\n\n\ntemplate <typename __HT>\nstruct cons<__HT,null_type> { \n\n    typedef __HT head_type;\n    typedef null_type tail_type;\n\n    head_type head; \n\n    static const int length = 1;\n\n    // default constructor\n    cons() : head() { /*std::cout << \"default constructor 1\\n\";*/ }\n\n    cons(const null_type&, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head() { /*std::cout << \"default constructor 2\\n\";*/ }\n\n    // non-default constructor\n    template<typename __T1>\n    cons(__T1& t1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t1) { /*std::cout << \"non-default a1, t1== \" << t1 << \"\\n\";*/}\n\n    cons(head_type& h, const null_type& = null_type() ) : head(h) { }\n    cons(const head_type& t0, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t0) { }\n\n    // converting constructor\n    template<typename __HT1>\n    cons(__HT1 h1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(h1) { }\n\n    // copy constructor\n    template<typename __HT1>\n    cons( const cons<__HT1, null_type>& other) : head(other.head) { }\n\n    // assignment operator\n    cons& operator=(const cons& other) { head = other.head; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) { return me.head == other.head; }\n    friend bool operator<(const cons& me, const cons& other) { return me.head < other.head; }\n    friend bool operator>(const cons& me, const cons& other) { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) {return !(me==other); }\n    friend bool operator<=(const cons& me, const cons& other) {return !(me>other); }\n    friend bool operator>=(const cons& me, const cons& other) {return !(me<other); }\n\n    template<typename __HT1>\n    friend bool operator==(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head == other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator<(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head < other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator>(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return other<me; }\n\n    template<typename __HT1>\n    friend bool operator!=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me==other); }\n\n    template<typename __HT1>\n    friend bool operator<=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me>other); }\n\n    template<typename __HT1>\n    friend bool operator>=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me<other); }\n\n};  // cons\n\ntemplate <>\nstruct cons<null_type,null_type> { typedef null_type tail_type; static const int length = 0; };\n\n// wrapper for default constructor\ntemplate<typename __T>\ninline const __T wrap_dcons(__T*) { return __T(); }\n\n} // namespace internal\n\n// tuple definition\ntemplate<typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\nclass tuple : public internal::tuple_traits<__T0, __T1, __T2, __T3, __T4 __TBB_T_PACK >::U {\n    // friends\n    template <typename __T> friend class tuple_size;\n    template<int __N, typename __T> friend struct tuple_element;\n\n    // stl components\n    typedef tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > value_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef size_t size_type;\n\n    typedef typename internal::tuple_traits<__T0,__T1,__T2,__T3, __T4 __TBB_T_PACK >::U my_cons;\n\npublic:\n    tuple(const __T0& t0=internal::wrap_dcons((__T0*)NULL)\n          ,const __T1& t1=internal::wrap_dcons((__T1*)NULL)\n          ,const __T2& t2=internal::wrap_dcons((__T2*)NULL)\n          ,const __T3& t3=internal::wrap_dcons((__T3*)NULL)\n          ,const __T4& t4=internal::wrap_dcons((__T4*)NULL)\n#if __TBB_VARIADIC_MAX >= 6\n          ,const __T5& t5=internal::wrap_dcons((__T5*)NULL)\n#if __TBB_VARIADIC_MAX >= 7\n          ,const __T6& t6=internal::wrap_dcons((__T6*)NULL)\n#if __TBB_VARIADIC_MAX >= 8\n          ,const __T7& t7=internal::wrap_dcons((__T7*)NULL)\n#if __TBB_VARIADIC_MAX >= 9\n          ,const __T8& t8=internal::wrap_dcons((__T8*)NULL)\n#if __TBB_VARIADIC_MAX >= 10\n          ,const __T9& t9=internal::wrap_dcons((__T9*)NULL)\n#endif\n#endif\n#endif\n#endif\n#endif\n          ) :\n        my_cons(t0,t1,t2,t3,t4 __TBB_T_PARAM_LIST_PACK) { }\n\n    template<int __N>\n    struct internal_tuple_element {\n        typedef typename internal::component<__N,my_cons>::type type;\n    };\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type& get() { return internal::get_helper<__N>::get(*this); }\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type const& get() const { return internal::get_helper<__N>::get(*this); }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const internal::cons<__U1,__U2>& other) {\n        my_cons::operator=(other);\n        return *this;\n    }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const std::pair<__U1,__U2>& other) {\n        // __TBB_ASSERT(tuple_size<value_type>::value == 2, \"Invalid size for pair to tuple assignment\");\n        this->head = other.first;\n        this->tail.head = other.second;\n        return *this;\n    }\n\n    friend bool operator==(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)==(other);}\n    friend bool operator<(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)<(other);}\n    friend bool operator>(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)>(other);}\n    friend bool operator!=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)!=(other);}\n    friend bool operator>=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)>=(other);}\n    friend bool operator<=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)<=(other);}\n\n};  // tuple\n\n// empty tuple\ntemplate<>\nclass tuple<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > : public null_type {\n};\n\n// helper classes\n\ntemplate < typename __T>\nclass tuple_size {\npublic:\n    static const size_t value = 1 + tuple_size<typename __T::tail_type>::value;\n};\n\ntemplate <>\nclass tuple_size<tuple<> > { \npublic:\n    static const size_t value = 0;\n};\n\ntemplate <>\nclass tuple_size<null_type> {\npublic:\n    static const size_t value = 0;\n};\n\ntemplate<int __N, typename __T>\nstruct tuple_element {\n    typedef typename internal::component<__N, typename __T::my_cons>::type type;\n};\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type&\n    get(tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type const&\n    get(const tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\n}  // interface5\n} // tbb\n\n#if !__TBB_CPP11_TUPLE_PRESENT\nnamespace tbb {\n    namespace flow {\n        using tbb::interface5::tuple;\n        using tbb::interface5::tuple_size;\n        using tbb::interface5::tuple_element;\n        using tbb::interface5::get;\n    }\n}\n#endif\n\n#undef __TBB_T_PACK\n#undef __TBB_U_PACK\n#undef __TBB_TYPENAME_T_PACK\n#undef __TBB_TYPENAME_U_PACK\n#undef __TBB_NULL_TYPE_PACK\n#undef __TBB_REF_T_PARAM_PACK\n#undef __TBB_CONST_REF_T_PARAM_PACK\n#undef __TBB_T_PARAM_LIST_PACK\n#undef __TBB_CONST_NULL_REF_PACK\n \n#endif /* __TBB_tuple_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_hash_map.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_hash_map_H\n#define __TBB_concurrent_hash_map_H\n\n#include \"tbb_stddef.h\"\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <cstring>      // Need std::memset\n#include __TBB_STD_SWAP_HEADER\n\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_allocator.h\"\n#include \"spin_rw_mutex.h\"\n#include \"atomic.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include <initializer_list>\n#endif\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#include <typeinfo>\n#endif\n#if __TBB_STATISTICS\n#include <stdio.h>\n#endif\n\nnamespace tbb {\n\nnamespace interface5 {\n\n    template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >\n    class concurrent_hash_map;\n\n    //! @cond INTERNAL\n    namespace internal {\n    using namespace tbb::internal;\n\n\n    //! Type of a hash code.\n    typedef size_t hashcode_t;\n    //! Node base type\n    struct hash_map_node_base : tbb::internal::no_copy {\n        //! Mutex type\n        typedef spin_rw_mutex mutex_t;\n        //! Scoped lock type for mutex\n        typedef mutex_t::scoped_lock scoped_t;\n        //! Next node in chain\n        hash_map_node_base *next;\n        mutex_t mutex;\n    };\n    //! Incompleteness flag value\n    static hash_map_node_base *const rehash_req = reinterpret_cast<hash_map_node_base*>(size_t(3));\n    //! Rehashed empty bucket flag\n    static hash_map_node_base *const empty_rehashed = reinterpret_cast<hash_map_node_base*>(size_t(0));\n    //! base class of concurrent_hash_map\n    class hash_map_base {\n    public:\n        //! Size type\n        typedef size_t size_type;\n        //! Type of a hash code.\n        typedef size_t hashcode_t;\n        //! Segment index type\n        typedef size_t segment_index_t;\n        //! Node base type\n        typedef hash_map_node_base node_base;\n        //! Bucket type\n        struct bucket : tbb::internal::no_copy {\n            //! Mutex type for buckets\n            typedef spin_rw_mutex mutex_t;\n            //! Scoped lock type for mutex\n            typedef mutex_t::scoped_lock scoped_t;\n            mutex_t mutex;\n            node_base *node_list;\n        };\n        //! Count of segments in the first block\n        static size_type const embedded_block = 1;\n        //! Count of segments in the first block\n        static size_type const embedded_buckets = 1<<embedded_block;\n        //! Count of segments in the first block\n        static size_type const first_block = 8; //including embedded_block. perfect with bucket size 16, so the allocations are power of 4096\n        //! Size of a pointer / table size\n        static size_type const pointers_per_table = sizeof(segment_index_t) * 8; // one segment per bit\n        //! Segment pointer\n        typedef bucket *segment_ptr_t;\n        //! Segment pointers table type\n        typedef segment_ptr_t segments_table_t[pointers_per_table];\n        //! Hash mask = sum of allocated segment sizes - 1\n        atomic<hashcode_t> my_mask;\n        //! Segment pointers table. Also prevents false sharing between my_mask and my_size\n        segments_table_t my_table;\n        //! Size of container in stored items\n        atomic<size_type> my_size; // It must be in separate cache line from my_mask due to performance effects\n        //! Zero segment\n        bucket my_embedded_segment[embedded_buckets];\n#if __TBB_STATISTICS\n        atomic<unsigned> my_info_resizes; // concurrent ones\n        mutable atomic<unsigned> my_info_restarts; // race collisions\n        atomic<unsigned> my_info_rehashes;  // invocations of rehash_bucket\n#endif\n        //! Constructor\n        hash_map_base() {\n            std::memset( this, 0, pointers_per_table*sizeof(segment_ptr_t) // 32*4=128   or 64*8=512\n                + sizeof(my_size) + sizeof(my_mask)  // 4+4 or 8+8\n                + embedded_buckets*sizeof(bucket) ); // n*8 or n*16\n            for( size_type i = 0; i < embedded_block; i++ ) // fill the table\n                my_table[i] = my_embedded_segment + segment_base(i);\n            my_mask = embedded_buckets - 1;\n            __TBB_ASSERT( embedded_block <= first_block, \"The first block number must include embedded blocks\");\n#if __TBB_STATISTICS\n            my_info_resizes = 0; // concurrent ones\n            my_info_restarts = 0; // race collisions\n            my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n        }\n\n        //! @return segment index of given index in the array\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        //! @return the first array index of given segment\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        //! @return segment size except for @arg k == 0\n        static size_type segment_size( segment_index_t k ) {\n            return size_type(1)<<k; // fake value for k==0\n        }\n\n        //! @return true if @arg ptr is valid pointer\n        static bool is_valid( void *ptr ) {\n            return reinterpret_cast<uintptr_t>(ptr) > uintptr_t(63);\n        }\n\n        //! Initialize buckets\n        static void init_buckets( segment_ptr_t ptr, size_type sz, bool is_initial ) {\n            if( is_initial ) std::memset( static_cast<void*>(ptr), 0, sz*sizeof(bucket) );\n            else for(size_type i = 0; i < sz; i++, ptr++) {\n                *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;\n                ptr->node_list = rehash_req;\n            }\n        }\n\n        //! Add node @arg n to bucket @arg b\n        static void add_to_bucket( bucket *b, node_base *n ) {\n            __TBB_ASSERT(b->node_list != rehash_req, NULL);\n            n->next = b->node_list;\n            b->node_list = n; // its under lock and flag is set\n        }\n\n        //! Exception safety helper\n        struct enable_segment_failsafe : tbb::internal::no_copy {\n            segment_ptr_t *my_segment_ptr;\n            enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}\n            ~enable_segment_failsafe() {\n                if( my_segment_ptr ) *my_segment_ptr = 0; // indicate no allocation in progress\n            }\n        };\n\n        //! Enable segment\n        void enable_segment( segment_index_t k, bool is_initial = false ) {\n            __TBB_ASSERT( k, \"Zero segment must be embedded\" );\n            enable_segment_failsafe watchdog( my_table, k );\n            cache_aligned_allocator<bucket> alloc;\n            size_type sz;\n            __TBB_ASSERT( !is_valid(my_table[k]), \"Wrong concurrent assignment\");\n            if( k >= first_block ) {\n                sz = segment_size( k );\n                segment_ptr_t ptr = alloc.allocate( sz );\n                init_buckets( ptr, sz, is_initial );\n                itt_hide_store_word( my_table[k], ptr );\n                sz <<= 1;// double it to get entire capacity of the container\n            } else { // the first block\n                __TBB_ASSERT( k == embedded_block, \"Wrong segment index\" );\n                sz = segment_size( first_block );\n                segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );\n                init_buckets( ptr, sz - embedded_buckets, is_initial );\n                ptr -= segment_base(embedded_block);\n                for(segment_index_t i = embedded_block; i < first_block; i++) // calc the offsets\n                    itt_hide_store_word( my_table[i], ptr + segment_base(i) );\n            }\n            itt_store_word_with_release( my_mask, sz-1 );\n            watchdog.my_segment_ptr = 0;\n        }\n\n        //! Get bucket by (masked) hashcode\n        bucket *get_bucket( hashcode_t h ) const throw() { // TODO: add throw() everywhere?\n            segment_index_t s = segment_index_of( h );\n            h -= segment_base(s);\n            segment_ptr_t seg = my_table[s];\n            __TBB_ASSERT( is_valid(seg), \"hashcode must be cut by valid mask for allocated segments\" );\n            return &seg[h];\n        }\n\n        // internal serial rehashing helper\n        void mark_rehashed_levels( hashcode_t h ) throw () {\n            segment_index_t s = segment_index_of( h );\n            while( segment_ptr_t seg = my_table[++s] )\n                if( seg[h].node_list == rehash_req ) {\n                    seg[h].node_list = empty_rehashed;\n                    mark_rehashed_levels( h + ((hashcode_t)1<<s) ); // optimized segment_base(s)\n                }\n        }\n\n        //! Check for mask race\n        // Splitting into two functions should help inlining\n        inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {\n            hashcode_t m_now, m_old = m;\n            m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );\n            if( m_old != m_now )\n                return check_rehashing_collision( h, m_old, m = m_now );\n            return false;\n        }\n\n        //! Process mask race, check for rehashing collision\n        bool check_rehashing_collision( const hashcode_t h, hashcode_t m_old, hashcode_t m ) const {\n            __TBB_ASSERT(m_old != m, NULL); // TODO?: m arg could be optimized out by passing h = h&m\n            if( (h & m_old) != (h & m) ) { // mask changed for this hashcode, rare event\n                // condition above proves that 'h' has some other bits set beside 'm_old'\n                // find next applicable mask after m_old    //TODO: look at bsl instruction\n                for( ++m_old; !(h & m_old); m_old <<= 1 ) // at maximum few rounds depending on the first block size\n                    ;\n                m_old = (m_old<<1) - 1; // get full mask from a bit\n                __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);\n                // check whether it is rehashing/ed\n                if( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )\n                {\n#if __TBB_STATISTICS\n                    my_info_restarts++; // race collisions\n#endif\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        //! Insert a node and check for load factor. @return segment index to enable.\n        segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {\n            size_type sz = ++my_size; // prefix form is to enforce allocation after the first item inserted\n            add_to_bucket( b, n );\n            // check load factor\n            if( sz >= mask ) { // TODO: add custom load_factor\n                segment_index_t new_seg = __TBB_Log2( mask+1 ); //optimized segment_index_of\n                __TBB_ASSERT( is_valid(my_table[new_seg-1]), \"new allocations must not publish new mask until segment has allocated\");\n                static const segment_ptr_t is_allocating = (segment_ptr_t)2;\n                if( !itt_hide_load_word(my_table[new_seg])\n                  && as_atomic(my_table[new_seg]).compare_and_swap(is_allocating, NULL) == NULL )\n                    return new_seg; // The value must be processed\n            }\n            return 0;\n        }\n\n        //! Prepare enough segments for number of buckets\n        void reserve(size_type buckets) {\n            if( !buckets-- ) return;\n            bool is_initial = !my_size;\n            for( size_type m = my_mask; buckets > m; m = my_mask )\n                enable_segment( segment_index_of( m+1 ), is_initial );\n        }\n        //! Swap hash_map_bases\n        void internal_swap(hash_map_base &table) {\n            using std::swap;\n            swap(this->my_mask, table.my_mask);\n            swap(this->my_size, table.my_size);\n            for(size_type i = 0; i < embedded_buckets; i++)\n                swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);\n            for(size_type i = embedded_block; i < pointers_per_table; i++)\n                swap(this->my_table[i], table.my_table[i]);\n        }\n    };\n\n    template<typename Iterator>\n    class hash_map_range;\n\n    //! Meets requirements of a forward iterator for STL */\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class hash_map_iterator\n        : public std::iterator<std::forward_iterator_tag,Value>\n    {\n        typedef Container map_type;\n        typedef typename Container::node node;\n        typedef hash_map_base::node_base node_base;\n        typedef hash_map_base::bucket bucket;\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator!=( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class hash_map_iterator;\n\n        template<typename I>\n        friend class hash_map_range;\n\n        void advance_to_next_bucket() { // TODO?: refactor to iterator_base class\n            size_t k = my_index+1;\n            __TBB_ASSERT( my_bucket, \"advancing an invalid iterator?\");\n            while( k <= my_map->my_mask ) {\n                // Following test uses 2's-complement wizardry\n                if( k&(k-2) ) // not the beginning of a segment\n                    ++my_bucket;\n                else my_bucket = my_map->get_bucket( k );\n                my_node = static_cast<node*>( my_bucket->node_list );\n                if( hash_map_base::is_valid(my_node) ) {\n                    my_index = k; return;\n                }\n                ++k;\n            }\n            my_bucket = 0; my_node = 0; my_index = k; // the end\n        }\n#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)\n        template<typename Key, typename T, typename HashCompare, typename A>\n        friend class interface5::concurrent_hash_map;\n#else\n    public: // workaround\n#endif\n        //! concurrent_hash_map over which we are iterating.\n        const Container *my_map;\n\n        //! Index in hash table for current item\n        size_t my_index;\n\n        //! Pointer to bucket\n        const bucket *my_bucket;\n\n        //! Pointer to node that has current item\n        node *my_node;\n\n        hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n );\n\n    public:\n        //! Construct undefined iterator\n        hash_map_iterator(): my_map(), my_index(), my_bucket(), my_node() {}\n        hash_map_iterator( const hash_map_iterator<Container,typename Container::value_type> &other ) :\n            my_map(other.my_map),\n            my_index(other.my_index),\n            my_bucket(other.my_bucket),\n            my_node(other.my_node)\n        {}\n        Value& operator*() const {\n            __TBB_ASSERT( hash_map_base::is_valid(my_node), \"iterator uninitialized or at end of container?\" );\n            return my_node->item;\n        }\n        Value* operator->() const {return &operator*();}\n        hash_map_iterator& operator++();\n\n        //! Post increment\n        hash_map_iterator operator++(int) {\n            hash_map_iterator old(*this);\n            operator++();\n            return old;\n        }\n    };\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>::hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n ) :\n        my_map(&map),\n        my_index(index),\n        my_bucket(b),\n        my_node( static_cast<node*>(n) )\n    {\n        if( b && !hash_map_base::is_valid(n) )\n            advance_to_next_bucket();\n    }\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {\n        my_node = static_cast<node*>( my_node->next );\n        if( !my_node ) advance_to_next_bucket();\n        return *this;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node == j.my_node && i.my_map == j.my_map;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node != j.my_node || i.my_map != j.my_map;\n    }\n\n    //! Range class used with concurrent_hash_map\n    /** @ingroup containers */\n    template<typename Iterator>\n    class hash_map_range {\n        typedef typename Iterator::map_type map_type;\n        Iterator my_begin;\n        Iterator my_end;\n        mutable Iterator my_midpoint;\n        size_t my_grainsize;\n        //! Set my_midpoint to point approximately half way between my_begin and my_end.\n        void set_midpoint() const;\n        template<typename U> friend class hash_map_range;\n    public:\n        //! Type for size of a range\n        typedef std::size_t size_type;\n        typedef typename Iterator::value_type value_type;\n        typedef typename Iterator::reference reference;\n        typedef typename Iterator::difference_type difference_type;\n        typedef Iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin==my_end;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint!=my_end;\n        }\n        //! Split range.\n        hash_map_range( hash_map_range& r, split ) :\n            my_end(r.my_end),\n            my_grainsize(r.my_grainsize)\n        {\n            r.my_end = my_begin = r.my_midpoint;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! type conversion\n        template<typename U>\n        hash_map_range( hash_map_range<U>& r) :\n            my_begin(r.my_begin),\n            my_end(r.my_end),\n            my_midpoint(r.my_midpoint),\n            my_grainsize(r.my_grainsize)\n        {}\n        //! Init range with container and grainsize specified\n        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) :\n            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),\n            my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),\n            my_grainsize( grainsize_ )\n        {\n            __TBB_ASSERT( grainsize_>0, \"grainsize must be positive\" );\n            set_midpoint();\n        }\n        const Iterator& begin() const {return my_begin;}\n        const Iterator& end() const {return my_end;}\n        //! The grain size for this range.\n        size_type grainsize() const {return my_grainsize;}\n    };\n\n    template<typename Iterator>\n    void hash_map_range<Iterator>::set_midpoint() const {\n        // Split by groups of nodes\n        size_t m = my_end.my_index-my_begin.my_index;\n        if( m > my_grainsize ) {\n            m = my_begin.my_index + m/2u;\n            hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);\n            my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);\n        } else {\n            my_midpoint = my_end;\n        }\n        __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,\n            \"my_begin is after my_midpoint\" );\n        __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,\n            \"my_midpoint is after my_end\" );\n        __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,\n            \"[my_begin, my_midpoint) range should not be empty\" );\n    }\n\n    } // internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n\n//! Unordered map from Key to T.\n/** concurrent_hash_map is associative container with concurrent access.\n\n@par Compatibility\n    The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).\n\n@par Exception Safety\n    - Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.\n    - If exception happens during insert() operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).\n    - If exception happens during operator=() operation, the container can have a part of source items, and methods size() and empty() can return wrong results.\n\n@par Changes since TBB 2.1\n    - Replaced internal algorithm and data structure. Patent is pending.\n    - Added buckets number argument for constructor\n\n@par Changes since TBB 2.0\n    - Fixed exception-safety\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Added constructor from a range of iterators\n    - Added several new overloaded insert() methods\n    - Added get_allocator()\n    - Added swap()\n    - Added count()\n    - Added overloaded erase(accessor &) and erase(const_accessor&)\n    - Added equal_range() [const]\n    - Added [const_]pointer, [const_]reference, and allocator_type types\n    - Added global functions: operator==(), operator!=(), and swap()\n\n    @ingroup containers */\ntemplate<typename Key, typename T, typename HashCompare, typename Allocator>\nclass concurrent_hash_map : protected internal::hash_map_base {\n    template<typename Container, typename Value>\n    friend class internal::hash_map_iterator;\n\n    template<typename I>\n    friend class internal::hash_map_range;\n\npublic:\n    typedef Key key_type;\n    typedef T mapped_type;\n    typedef std::pair<const Key,T> value_type;\n    typedef hash_map_base::size_type size_type;\n    typedef ptrdiff_t difference_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;\n    typedef internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;\n    typedef internal::hash_map_range<iterator> range_type;\n    typedef internal::hash_map_range<const_iterator> const_range_type;\n    typedef Allocator allocator_type;\n\nprotected:\n    friend class const_accessor;\n    struct node;\n    typedef typename Allocator::template rebind<node>::other node_allocator_type;\n    node_allocator_type my_allocator;\n    HashCompare my_hash_compare;\n\n    struct node : public node_base {\n        value_type item;\n        node( const Key &key ) : item(key, T()) {}\n        node( const Key &key, const T &t ) : item(key, t) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        node( const Key &key, T &&t ) : item(key, std::move(t)) {}\n        node( value_type&& i ) : item(std::move(i)){}\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n        template<typename... Args>\n        node( Args&&... args ) : item(std::forward<Args>(args)...) {}\n#if __TBB_COPY_FROM_NON_CONST_REF_BROKEN\n        node( value_type& i ) : item(const_cast<const value_type&>(i)) {}\n#endif //__TBB_COPY_FROM_NON_CONST_REF_BROKEN\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n        node( const value_type& i ) : item(i) {}\n\n        // exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17\n        void *operator new( size_t /*size*/, node_allocator_type &a ) {\n            void *ptr = a.allocate(1);\n            if(!ptr)\n                tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);\n            return ptr;\n        }\n        // match placement-new form above to be called if exception thrown in constructor\n        void operator delete( void *ptr, node_allocator_type &a ) { a.deallocate(static_cast<node*>(ptr),1); }\n    };\n\n    void delete_node( node_base *n ) {\n        my_allocator.destroy( static_cast<node*>(n) );\n        my_allocator.deallocate( static_cast<node*>(n), 1);\n    }\n\n    static node* allocate_node_copy_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, *t);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static node* allocate_node_move_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, std::move(*const_cast<T*>(t)));\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    static node* allocate_node_emplace_construct(node_allocator_type& allocator, Args&&... args){\n        return  new( allocator ) node(std::forward<Args>(args)...);\n    }\n#endif //#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif\n\n    static node* allocate_node_default_construct(node_allocator_type& allocator, const Key &key, const T * ){\n        return  new( allocator ) node(key);\n    }\n\n    static node* do_not_allocate_node(node_allocator_type& , const Key &, const T * ){\n        __TBB_ASSERT(false,\"this dummy function should not be called\");\n        return NULL;\n    }\n\n    node *search_bucket( const key_type &key, bucket *b ) const {\n        node *n = static_cast<node*>( b->node_list );\n        while( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )\n            n = static_cast<node*>( n->next );\n        __TBB_ASSERT(n != internal::rehash_req, \"Search can be executed only for rehashed bucket\");\n        return n;\n    }\n\n    //! bucket accessor is to find, rehash, acquire a lock, and access a bucket\n    class bucket_accessor : public bucket::scoped_t {\n        bucket *my_b;\n    public:\n        bucket_accessor( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) { acquire( base, h, writer ); }\n        //! find a bucket by masked hashcode, optionally rehash, and acquire the lock\n        inline void acquire( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) {\n            my_b = base->get_bucket( h );\n            // TODO: actually, notification is unnecessary here, just hiding double-check\n            if( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req\n                && try_acquire( my_b->mutex, /*write=*/true ) )\n            {\n                if( my_b->node_list == internal::rehash_req ) base->rehash_bucket( my_b, h ); //recursive rehashing\n            }\n            else bucket::scoped_t::acquire( my_b->mutex, writer );\n            __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);\n        }\n        //! check whether bucket is locked for write\n        bool is_writer() { return bucket::scoped_t::is_writer; }\n        //! get bucket pointer\n        bucket *operator() () { return my_b; }\n    };\n\n    // TODO refactor to hash_base\n    void rehash_bucket( bucket *b_new, const hashcode_t h ) {\n        __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), \"b_new must be locked (for write)\");\n        __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n        __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); // mark rehashed\n        hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n#if __TBB_STATISTICS\n        my_info_rehashes++; // invocations of rehash_bucket\n#endif\n\n        bucket_accessor b_old( this, h & mask );\n\n        mask = (mask<<1) | 1; // get full mask for new bucket\n        __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );\n    restart:\n        for( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {\n            hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n#if TBB_USE_ASSERT\n            hashcode_t bmask = h & (mask>>1);\n            bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; // minimal mask of parent bucket\n            __TBB_ASSERT( (c & bmask) == (h & bmask), \"hash() function changed for key in table\" );\n#endif\n            if( (c & mask) == h ) {\n                if( !b_old.is_writer() )\n                    if( !b_old.upgrade_to_writer() ) {\n                        goto restart; // node ptr can be invalid due to concurrent erase\n                    }\n                *p = n->next; // exclude from b_old\n                add_to_bucket( b_new, n );\n            } else p = &n->next; // iterate to next item\n        }\n    }\n\n    struct call_clear_on_leave {\n        concurrent_hash_map* my_ch_map;\n        call_clear_on_leave( concurrent_hash_map* a_ch_map ) : my_ch_map(a_ch_map) {}\n        void dismiss() {my_ch_map = 0;}\n        ~call_clear_on_leave(){\n            if (my_ch_map){\n                my_ch_map->clear();\n            }\n        }\n    };\npublic:\n\n    class accessor;\n    //! Combines data access, locking, and garbage collection.\n    class const_accessor : private node::scoped_t /*which derived from no_copy*/ {\n        friend class concurrent_hash_map<Key,T,HashCompare,Allocator>;\n        friend class accessor;\n    public:\n        //! Type of value\n        typedef const typename concurrent_hash_map::value_type value_type;\n\n        //! True if result is empty.\n        bool empty() const { return !my_node; }\n\n        //! Set to null\n        void release() {\n            if( my_node ) {\n                node::scoped_t::release();\n                my_node = 0;\n            }\n        }\n\n        //! Return reference to associated value in hash table.\n        const_reference operator*() const {\n            __TBB_ASSERT( my_node, \"attempt to dereference empty accessor\" );\n            return my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        const_pointer operator->() const {\n            return &operator*();\n        }\n\n        //! Create empty result\n        const_accessor() : my_node(NULL) {}\n\n        //! Destroy result after releasing the underlying reference.\n        ~const_accessor() {\n            my_node = NULL; // scoped lock's release() is called in its destructor\n        }\n    protected:\n        bool is_writer() { return node::scoped_t::is_writer; }\n        node *my_node;\n        hashcode_t my_hash;\n    };\n\n    //! Allows write access to elements and combines data access, locking, and garbage collection.\n    class accessor: public const_accessor {\n    public:\n        //! Type of value\n        typedef typename concurrent_hash_map::value_type value_type;\n\n        //! Return reference to associated value in hash table.\n        reference operator*() const {\n            __TBB_ASSERT( this->my_node, \"attempt to dereference empty accessor\" );\n            return this->my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        pointer operator->() const {\n            return &operator*();\n        }\n    };\n\n    //! Construct empty table.\n    explicit concurrent_hash_map( const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {}\n\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( size_type n, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        reserve( n );\n    }\n\n    //! Copy constructor\n    concurrent_hash_map( const concurrent_hash_map &table, const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(table);\n        scope_guard.dismiss();\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table )\n        : internal::hash_map_base(), my_allocator(std::move(table.get_allocator()))\n    {\n        swap(table);\n    }\n\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table, const allocator_type &a )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        if (a == table.get_allocator()){\n            this->swap(table);\n        }else{\n            call_clear_on_leave scope_guard(this);\n            internal_copy(std::make_move_iterator(table.begin()), std::make_move_iterator(table.end()), table.size());\n            scope_guard.dismiss();\n        }\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Construction with copying iteration range and given allocator instance\n    template<typename I>\n    concurrent_hash_map( I first, I last, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(first, last, std::distance(first, last));\n        scope_guard.dismiss();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( std::initializer_list<value_type> il, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        call_clear_on_leave scope_guard(this);\n        internal_copy(il.begin(), il.end(), il.size());\n        scope_guard.dismiss();\n    }\n\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Assignment\n    concurrent_hash_map& operator=( const concurrent_hash_map &table ) {\n        if( this!=&table ) {\n            clear();\n            internal_copy(table);\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move Assignment\n    concurrent_hash_map& operator=( concurrent_hash_map &&table ) {\n        if(this != &table){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == table.my_allocator) {\n                concurrent_hash_map trash (std::move(*this));\n                //TODO: swapping allocators here may be a problem, replace with single direction moving iff pocma is set\n                this->swap(table);\n            } else {\n                //do per element move\n                concurrent_hash_map moved_copy(std::move(table), this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment\n    concurrent_hash_map& operator=( std::initializer_list<value_type> il ) {\n        clear();\n        internal_copy(il.begin(), il.end(), il.size());\n        return *this;\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n\n    //! Rehashes and optionally resizes the whole table.\n    /** Useful to optimize performance before or after concurrent operations.\n        Also enables using of find() and count() concurrent methods in serial context. */\n    void rehash(size_type n = 0);\n\n    //! Clear table\n    void clear();\n\n    //! Clear table and destroy it.\n    ~concurrent_hash_map() { clear(); }\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    range_type range( size_type grainsize=1 ) {\n        return range_type( *this, grainsize );\n    }\n    const_range_type range( size_type grainsize=1 ) const {\n        return const_range_type( *this, grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // STL support - not thread-safe methods\n    //------------------------------------------------------------------------\n    iterator begin() { return iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    iterator end() { return iterator( *this, 0, 0, 0 ); }\n    const_iterator begin() const { return const_iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    const_iterator end() const { return const_iterator( *this, 0, 0, 0 ); }\n    std::pair<iterator, iterator> equal_range( const Key& key ) { return internal_equal_range( key, end() ); }\n    std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const { return internal_equal_range( key, end() ); }\n\n    //! Number of items in table.\n    size_type size() const { return my_size; }\n\n    //! True if size()==0.\n    bool empty() const { return my_size == 0; }\n\n    //! Upper bound on size.\n    size_type max_size() const {return (~size_type(0))/sizeof(node);}\n\n    //! Returns the current number of buckets\n    size_type bucket_count() const { return my_mask+1; }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! swap two instances. Iterators are invalidated\n    void swap( concurrent_hash_map &table );\n\n    //------------------------------------------------------------------------\n    // concurrent map operations\n    //------------------------------------------------------------------------\n\n    //! Return count of items (0 or 1)\n    size_type count( const Key &key ) const {\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, NULL, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a read lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( const_accessor &result, const Key &key ) const {\n        result.release();\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, &result, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a write lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/false, key, NULL, &result, /*write=*/true, &do_not_allocate_node );\n    }\n\n    //! Insert item (if not already present) and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/false, &allocate_node_default_construct );\n    }\n\n    //! Insert item (if not already present) and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/true, &allocate_node_default_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/true, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( const value_type &value ) {\n        return lookup(/*insert*/true, value.first, &value.second, NULL, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( value_type && value ) {\n        return generic_move_insert(accessor_not_used(), std::move(value));\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( const_accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    template<typename... Args>\n    bool emplace( Args&&... args ) {\n        return generic_emplace(accessor_not_used(), std::forward<Args>(args)...);\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Insert range [first, last)\n    template<typename I>\n    void insert( I first, I last ) {\n        for ( ; first != last; ++first )\n            insert( *first );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert( std::initializer_list<value_type> il ) {\n        insert( il.begin(), il.end() );\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Erase item.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const Key& key );\n\n    //! Erase item by const_accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const_accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\n    //! Erase item by accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\nprotected:\n    //! Insert or find item and optionally acquire a lock on the item.\n    bool lookup(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write,  node* (*allocate_node)(node_allocator_type& ,  const Key &, const T * ), node *tmp_n = 0  ) ;\n\n    struct accessor_not_used { void release(){}};\n    friend const_accessor* accessor_location( accessor_not_used const& ){ return NULL;}\n    friend const_accessor* accessor_location( const_accessor & a )      { return &a;}\n\n    friend bool is_write_access_needed( accessor const& )           { return true;}\n    friend bool is_write_access_needed( const_accessor const& )     { return false;}\n    friend bool is_write_access_needed( accessor_not_used const& )  { return false;}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename Accessor>\n    bool generic_move_insert( Accessor && result, value_type && value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, accessor_location(result), is_write_access_needed(result), &allocate_node_move_construct );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename Accessor, typename... Args>\n    bool generic_emplace( Accessor && result, Args &&... args ) {\n        result.release();\n        node * node_ptr = allocate_node_emplace_construct(my_allocator, std::forward<Args>(args)...);\n        return lookup(/*insert*/true, node_ptr->item.first, NULL, accessor_location(result), is_write_access_needed(result), &do_not_allocate_node, node_ptr );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! delete item by accessor\n    bool exclude( const_accessor &item_accessor );\n\n    //! Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)\n    template<typename I>\n    std::pair<I, I> internal_equal_range( const Key& key, I end ) const;\n\n    //! Copy \"source\" to *this, where *this must start out empty.\n    void internal_copy( const concurrent_hash_map& source );\n\n    template<typename I>\n    void internal_copy( I first, I last, size_type reserve_size );\n\n    //! Fast find when no concurrent erasure is used. For internal use inside TBB only!\n    /** Return pointer to item with given key, or NULL if no such item exists.\n        Must not be called concurrently with erasure operations. */\n    const_pointer internal_fast_find( const Key& key ) const {\n        hashcode_t h = my_hash_compare.hash( key );\n        hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n        node *n;\n    restart:\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        bucket *b = get_bucket( h & m );\n        // TODO: actually, notification is unnecessary here, just hiding double-check\n        if( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )\n        {\n            bucket::scoped_t lock;\n            if( lock.try_acquire( b->mutex, /*write=*/true ) ) {\n                if( b->node_list == internal::rehash_req)\n                    const_cast<concurrent_hash_map*>(this)->rehash_bucket( b, h & m ); //recursive rehashing\n            }\n            else lock.acquire( b->mutex, /*write=*/false );\n            __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);\n        }\n        n = search_bucket( key, b );\n        if( n )\n            return &n->item;\n        else if( check_mask_race( h, m ) )\n            goto restart;\n        return 0;\n    }\n};\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node* (*allocate_node)(node_allocator_type& , const Key&, const T*), node *tmp_n ) {\n    __TBB_ASSERT( !result || !result->my_node, NULL );\n    bool return_value;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    segment_index_t grow_segment = 0;\n    node *n;\n    restart:\n    {//lock scope\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        return_value = false;\n        // get bucket\n        bucket_accessor b( this, h & m );\n\n        // find a node\n        n = search_bucket( key, b() );\n        if( op_insert ) {\n            // [opt] insert a key\n            if( !n ) {\n                if( !tmp_n ) {\n                    tmp_n = allocate_node(my_allocator, key, t);\n                }\n                if( !b.is_writer() && !b.upgrade_to_writer() ) { // TODO: improved insertion\n                    // Rerun search_list, in case another thread inserted the item during the upgrade.\n                    n = search_bucket( key, b() );\n                    if( is_valid(n) ) { // unfortunately, it did\n                        b.downgrade_to_reader();\n                        goto exists;\n                    }\n                }\n                if( check_mask_race(h, m) )\n                    goto restart; // b.release() is done in ~b().\n                // insert and set flag to grow the container\n                grow_segment = insert_new_node( b(), n = tmp_n, m );\n                tmp_n = 0;\n                return_value = true;\n            }\n        } else { // find or count\n            if( !n ) {\n                if( check_mask_race( h, m ) )\n                    goto restart; // b.release() is done in ~b(). TODO: replace by continue\n                return false;\n            }\n            return_value = true;\n        }\n    exists:\n        if( !result ) goto check_growth;\n        // TODO: the following seems as generic/regular operation\n        // acquire the item\n        if( !result->try_acquire( n->mutex, write ) ) {\n            for( tbb::internal::atomic_backoff backoff(true);; ) {\n                if( result->try_acquire( n->mutex, write ) ) break;\n                if( !backoff.bounded_pause() ) {\n                    // the wait takes really long, restart the operation\n                    b.release();\n                    __TBB_ASSERT( !op_insert || !return_value, \"Can't acquire new item in locked bucket?\" );\n                    __TBB_Yield();\n                    m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n                    goto restart;\n                }\n            }\n        }\n    }//lock scope\n    result->my_node = n;\n    result->my_hash = h;\ncheck_growth:\n    // [opt] grow the container\n    if( grow_segment ) {\n#if __TBB_STATISTICS\n        my_info_resizes++; // concurrent ones\n#endif\n        enable_segment( grow_segment );\n    }\n    if( tmp_n ) // if op_insert only\n        delete_node( tmp_n );\n    return return_value;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nstd::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end_ ) const {\n    hashcode_t h = my_hash_compare.hash( key );\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n    h &= m;\n    bucket *b = get_bucket( h );\n    while( b->node_list == internal::rehash_req ) {\n        m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n        b = get_bucket( h &= m );\n    }\n    node *n = search_bucket( key, b );\n    if( !n )\n        return std::make_pair(end_, end_);\n    iterator lower(*this, h, b, n), upper(lower);\n    return std::make_pair(lower, ++upper);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor ) {\n    __TBB_ASSERT( item_accessor.my_node, NULL );\n    node_base *const n = item_accessor.my_node;\n    hashcode_t const h = item_accessor.my_hash;\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    do {\n        // get bucket\n        bucket_accessor b( this, h & m, /*writer=*/true );\n        node_base **p = &b()->node_list;\n        while( *p && *p != n )\n            p = &(*p)->next;\n        if( !*p ) { // someone else was first\n            if( check_mask_race( h, m ) )\n                continue;\n            item_accessor.release();\n            return false;\n        }\n        __TBB_ASSERT( *p == n, NULL );\n        *p = n->next; // remove from container\n        my_size--;\n        break;\n    } while(true);\n    if( !item_accessor.is_writer() ) // need to get exclusive lock\n        item_accessor.upgrade_to_writer(); // return value means nothing here\n    item_accessor.release();\n    delete_node( n ); // Only one thread can delete it\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {\n    node_base *n;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\nrestart:\n    {//lock scope\n        // get bucket\n        bucket_accessor b( this, h & m );\n    search:\n        node_base **p = &b()->node_list;\n        n = *p;\n        while( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {\n            p = &n->next;\n            n = *p;\n        }\n        if( !n ) { // not found, but mask could be changed\n            if( check_mask_race( h, m ) )\n                goto restart;\n            return false;\n        }\n        else if( !b.is_writer() && !b.upgrade_to_writer() ) {\n            if( check_mask_race( h, m ) ) // contended upgrade, check mask\n                goto restart;\n            goto search;\n        }\n        *p = n->next;\n        my_size--;\n    }\n    {\n        typename node::scoped_t item_locker( n->mutex, /*write=*/true );\n    }\n    // note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!\n    delete_node( n ); // Only one thread can delete it due to write lock on the bucket\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::swap(concurrent_hash_map<Key,T,HashCompare,A> &table) {\n    //TODO: respect C++11 allocator_traits<A>::propogate_on_constainer_swap\n    using std::swap;\n    swap(this->my_allocator, table.my_allocator);\n    swap(this->my_hash_compare, table.my_hash_compare);\n    internal_swap(table);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::rehash(size_type sz) {\n    reserve( sz ); // TODO: add reduction of number of buckets as well\n    hashcode_t mask = my_mask;\n    hashcode_t b = (mask+1)>>1; // size or first index of the last segment\n    __TBB_ASSERT((b&(b-1))==0, NULL); // zero or power of 2\n    bucket *bp = get_bucket( b ); // only the last segment should be scanned for rehashing\n    for(; b <= mask; b++, bp++ ) {\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        if( n == internal::rehash_req ) { // rehash bucket, conditional because rehashing of a previous bucket may affect this one\n            hashcode_t h = b; bucket *b_old = bp;\n            do {\n                __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n                hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n                b_old = get_bucket( h &= m );\n            } while( b_old->node_list == internal::rehash_req );\n            // now h - is index of the root rehashed bucket b_old\n            mark_rehashed_levels( h ); // mark all non-rehashed children recursively across all segments\n            for( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {\n                hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );\n                if( (c & mask) != h ) { // should be rehashed\n                    *p = q->next; // exclude from b_old\n                    bucket *b_new = get_bucket( c & mask );\n                    __TBB_ASSERT( b_new->node_list != internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n                    add_to_bucket( b_new, q );\n                } else p = &q->next; // iterate to next item\n            }\n        }\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS\n    int current_size = int(my_size), buckets = int(mask)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n    for( b = 0; b <= mask; b++ ) {// only last segment should be scanned for rehashing\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, \"Broken internal structure\" );\n#if TBB_USE_PERFORMANCE_WARNINGS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if TBB_USE_ASSERT\n        for( ; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;\n            __TBB_ASSERT( h == b, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n#if TBB_USE_PERFORMANCE_WARNINGS\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::clear() {\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    int current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n    bucket *bp = 0;\n    // check consistency\n    for( segment_index_t b = 0; b <= m; b++ ) {\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during clear() execution\" );\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n == internal::rehash_req ) buckets--;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if __TBB_EXTRA_DEBUG\n        for(; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n            h &= m;\n            __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if __TBB_STATISTICS\n    printf( \"items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d\"\n        \" concurrent: resizes=%u rehashes=%u restarts=%u\\n\",\n        current_size, int(m+1), buckets, empty_buckets, overpopulated_buckets,\n        unsigned(my_info_resizes), unsigned(my_info_rehashes), unsigned(my_info_restarts) );\n    my_info_resizes = 0; // concurrent ones\n    my_info_restarts = 0; // race collisions\n    my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    my_size = 0;\n    segment_index_t s = segment_index_of( m );\n    __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], \"wrong mask or concurrent grow\" );\n    cache_aligned_allocator<bucket> alloc;\n    do {\n        __TBB_ASSERT( is_valid( my_table[s] ), \"wrong mask or concurrent grow\" );\n        segment_ptr_t buckets_ptr = my_table[s];\n        size_type sz = segment_size( s ? s : 1 );\n        for( segment_index_t i = 0; i < sz; i++ )\n            for( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {\n                buckets_ptr[i].node_list = n->next;\n                delete_node( n );\n            }\n        if( s >= first_block) // the first segment or the next\n            alloc.deallocate( buckets_ptr, sz );\n        else if( s == embedded_block && embedded_block != first_block )\n            alloc.deallocate( buckets_ptr, segment_size(first_block)-embedded_buckets );\n        if( s >= embedded_block ) my_table[s] = 0;\n    } while(s-- > 0);\n    my_mask = embedded_buckets - 1;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( const concurrent_hash_map& source ) {\n    hashcode_t mask = source.my_mask;\n    if( my_mask == mask ) { // optimized version\n        reserve( source.my_size ); // TODO: load_factor?\n        bucket *dst = 0, *src = 0;\n        bool rehash_required = false;\n        for( hashcode_t k = 0; k <= mask; k++ ) {\n            if( k & (k-2) ) ++dst,src++; // not the beginning of a segment\n            else { dst = get_bucket( k ); src = source.get_bucket( k ); }\n            __TBB_ASSERT( dst->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n            node *n = static_cast<node*>( src->node_list );\n            if( n == internal::rehash_req ) { // source is not rehashed, items are in previous buckets\n                rehash_required = true;\n                dst->node_list = internal::rehash_req;\n            } else for(; n; n = static_cast<node*>( n->next ) ) {\n                add_to_bucket( dst, new( my_allocator ) node(n->item.first, n->item.second) );\n                ++my_size; // TODO: replace by non-atomic op\n            }\n        }\n        if( rehash_required ) rehash();\n    } else internal_copy( source.begin(), source.end(), source.my_size );\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last, size_type reserve_size) {\n    reserve( reserve_size ); // TODO: load_factor?\n    hashcode_t m = my_mask;\n    for(; first != last; ++first) {\n        hashcode_t h = my_hash_compare.hash( (*first).first );\n        bucket *b = get_bucket( h & m );\n        __TBB_ASSERT( b->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n        node *n = new( my_allocator ) node(*first);\n        add_to_bucket( b, n );\n        ++my_size; // TODO: replace by non-atomic op\n    }\n}\n\n} // namespace interface5\n\nusing interface5::concurrent_hash_map;\n\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator==(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b) {\n    if(a.size() != b.size()) return false;\n    typename concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());\n    typename concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());\n    for(; i != i_end; ++i) {\n        j = b.equal_range(i->first).first;\n        if( j == j_end || !(i->second == j->second) ) return false;\n    }\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator!=(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ninline void swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)\n{    a.swap( b ); }\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_hash_map_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_lru_cache.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_lru_cache_H\n#define __TBB_concurrent_lru_cache_H\n\n#if ! TBB_PREVIEW_CONCURRENT_LRU_CACHE\n    #error Set TBB_PREVIEW_CONCURRENT_LRU_CACHE to include concurrent_lru_cache.h\n#endif\n\n#include \"tbb_stddef.h\"\n\n#include <map>\n#include <list>\n#include <algorithm> // std::find\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#include <utility> // std::move\n#endif\n\n#include \"atomic.h\"\n#include \"internal/_aggregator_impl.h\"\n\nnamespace tbb{\nnamespace interface6 {\n\n\ntemplate <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >\nclass concurrent_lru_cache : internal::no_assign{\nprivate:\n    typedef concurrent_lru_cache self_type;\n    typedef value_functor_type value_function_type;\n    typedef std::size_t ref_counter_type;\n    struct map_value_type;\n    typedef std::map<key_type, map_value_type> map_storage_type;\n    typedef std::list<typename map_storage_type::iterator> lru_list_type;\n    struct map_value_type {\n        value_type my_value;\n        ref_counter_type my_ref_counter;\n        typename lru_list_type::iterator my_lru_list_iterator;\n        bool my_is_ready;\n\n        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)\n            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator), my_is_ready(a_is_ready)\n        {}\n    };\n\n    class handle_object;\n\n    struct aggregator_operation;\n    typedef aggregator_operation aggregated_operation_type;\n    typedef tbb::internal::aggregating_functor<self_type,aggregated_operation_type> aggregator_function_type;\n    friend class tbb::internal::aggregating_functor<self_type,aggregated_operation_type>;\n    typedef tbb::internal::aggregator<aggregator_function_type, aggregated_operation_type> aggregator_type;\n\nprivate:\n    value_function_type my_value_function;\n    std::size_t const my_number_of_lru_history_items;\n    map_storage_type my_map_storage;\n    lru_list_type my_lru_list;\n    aggregator_type my_aggregator;\n\npublic:\n    typedef handle_object handle;\n\npublic:\n    concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items)\n        : my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items)\n    {\n        my_aggregator.initialize_handler(aggregator_function_type(this));\n    }\n\n    handle_object operator[](key_type k){\n        retrieve_aggregator_operation op(k);\n        my_aggregator.execute(&op);\n        if (op.is_new_value_needed()){\n             op.result().second.my_value = my_value_function(k);\n             __TBB_store_with_release(op.result().second.my_is_ready, true);\n        }else{\n            tbb::internal::spin_wait_while_eq(op.result().second.my_is_ready,false);\n        }\n        return handle_object(*this,op.result());\n    }\nprivate:\n    void signal_end_of_usage(typename map_storage_type::reference value_ref){\n        signal_end_of_usage_aggregator_operation op(value_ref);\n        my_aggregator.execute(&op);\n    }\n\nprivate:\n#if !__TBB_CPP11_RVALUE_REF_PRESENT\n    struct handle_move_t:no_assign{\n        concurrent_lru_cache & my_cache_ref;\n        typename map_storage_type::reference my_map_record_ref;\n        handle_move_t(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_map_record_ref(value_ref) {};\n    };\n#endif\n    class handle_object {\n        concurrent_lru_cache * my_cache_pointer;\n        typename map_storage_type::pointer my_map_record_ptr;\n    public:\n        handle_object() : my_cache_pointer(), my_map_record_ptr() {}\n        handle_object(concurrent_lru_cache& cache_ref, typename map_storage_type::reference value_ref) : my_cache_pointer(&cache_ref), my_map_record_ptr(&value_ref) {}\n        operator bool() const {\n            return (my_cache_pointer && my_map_record_ptr);\n        }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        // TODO: add check for double moved objects by special dedicated field\n        handle_object(handle_object&& src) : my_cache_pointer(src.my_cache_pointer), my_map_record_ptr(src.my_map_record_ptr) {\n            __TBB_ASSERT((src.my_cache_pointer && src.my_map_record_ptr) || (!src.my_cache_pointer && !src.my_map_record_ptr), \"invalid state of moving object?\");\n            src.my_cache_pointer = NULL;\n            src.my_map_record_ptr = NULL;\n        }\n        handle_object& operator=(handle_object&& src) {\n            __TBB_ASSERT((src.my_cache_pointer && src.my_map_record_ptr) || (!src.my_cache_pointer && !src.my_map_record_ptr), \"invalid state of moving object?\");\n            if (my_cache_pointer) {\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n            my_cache_pointer = src.my_cache_pointer;\n            my_map_record_ptr = src.my_map_record_ptr;\n            src.my_cache_pointer = NULL;\n            src.my_map_record_ptr = NULL;\n            return *this;\n        }\n#else\n        handle_object(handle_move_t m) : my_cache_pointer(&m.my_cache_ref), my_map_record_ptr(&m.my_map_record_ref) {}\n        handle_object& operator=(handle_move_t m) {\n            if (my_cache_pointer) {\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n            my_cache_pointer = &m.my_cache_ref;\n            my_map_record_ptr = &m.my_map_record_ref;\n            return *this;\n        }\n        operator handle_move_t(){\n            return move(*this);\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n        value_type& value(){\n            __TBB_ASSERT(my_cache_pointer,\"get value from already moved object?\");\n            __TBB_ASSERT(my_map_record_ptr,\"get value from an invalid or already moved object?\");\n            return my_map_record_ptr->second.my_value;\n        }\n        ~handle_object(){\n            if (my_cache_pointer){\n                my_cache_pointer->signal_end_of_usage(*my_map_record_ptr);\n            }\n        }\n    private:\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        // For source compatibility with C++03\n        friend handle_object&& move(handle_object& h){\n            return std::move(h);\n        }\n#else\n        friend handle_move_t move(handle_object& h){\n            return handle_object::move(h);\n        }\n        // TODO: add check for double moved objects by special dedicated field\n        static handle_move_t move(handle_object& h){\n            __TBB_ASSERT((h.my_cache_pointer && h.my_map_record_ptr) || (!h.my_cache_pointer && !h.my_map_record_ptr), \"invalid state of moving object?\");\n            concurrent_lru_cache * cache_pointer = h.my_cache_pointer;\n            typename map_storage_type::pointer map_record_ptr = h.my_map_record_ptr;\n            h.my_cache_pointer = NULL;\n            h.my_map_record_ptr = NULL;\n            return handle_move_t(*cache_pointer, *map_record_ptr);\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n    private:\n        void operator=(handle_object&);\n#if __SUNPRO_CC\n    // Presumably due to a compiler error, private copy constructor\n    // breaks expressions like handle h = cache[key];\n    public:\n#endif\n        handle_object(handle_object &);\n    };\nprivate:\n    //TODO: looks like aggregator_operation is a perfect match for statically typed variant type\n    struct aggregator_operation : tbb::internal::aggregated_operation<aggregator_operation>{\n        enum e_op_type {op_retive, op_signal_end_of_usage};\n        //TODO: try to use pointer to function apply_visitor here\n        //TODO: try virtual functions and measure the difference\n        e_op_type my_operation_type;\n        aggregator_operation(e_op_type operation_type): my_operation_type(operation_type) {}\n        void cast_and_handle(self_type& container ){\n            if (my_operation_type==op_retive){\n                static_cast<retrieve_aggregator_operation*>(this)->handle(container);\n            }else{\n                static_cast<signal_end_of_usage_aggregator_operation*>(this)->handle(container);\n            }\n        }\n    };\n    struct retrieve_aggregator_operation : aggregator_operation, private internal::no_assign {\n        key_type my_key;\n        typename map_storage_type::pointer my_result_map_record_pointer;\n        bool my_is_new_value_needed;\n        retrieve_aggregator_operation(key_type key):aggregator_operation(aggregator_operation::op_retive),my_key(key),my_is_new_value_needed(false){}\n        void handle(self_type& container ){\n            my_result_map_record_pointer = & container.retrieve_serial(my_key,my_is_new_value_needed);\n        }\n        typename map_storage_type::reference result(){ return * my_result_map_record_pointer; }\n        bool is_new_value_needed(){return my_is_new_value_needed;}\n    };\n    struct signal_end_of_usage_aggregator_operation : aggregator_operation, private internal::no_assign {\n        typename map_storage_type::reference my_map_record_ref;\n        signal_end_of_usage_aggregator_operation(typename map_storage_type::reference map_record_ref):aggregator_operation(aggregator_operation::op_signal_end_of_usage),my_map_record_ref(map_record_ref){}\n        void handle(self_type& container ){\n            container.signal_end_of_usage_serial(my_map_record_ref);\n        }\n    };\n\nprivate:\n   void handle_operations(aggregator_operation* op_list){\n       while(op_list){\n           op_list->cast_and_handle(*this);\n           aggregator_operation* tmp = op_list;\n           op_list=op_list->next;\n           tbb::internal::itt_store_word_with_release(tmp->status, uintptr_t(1));\n       }\n   }\n\nprivate:\n   typename map_storage_type::reference retrieve_serial(key_type k, bool& is_new_value_needed){\n        typename map_storage_type::iterator it = my_map_storage.find(k);\n        if (it == my_map_storage.end()){\n            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));\n            is_new_value_needed = true;\n        }else {\n            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;\n            if (list_it!=my_lru_list.end()) {\n                __TBB_ASSERT(!it->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                //item is going to be used. Therefore it is not a subject for eviction\n                //so - remove it from LRU history.\n                my_lru_list.erase(list_it);\n                it->second.my_lru_list_iterator= my_lru_list.end();\n            }\n        }\n        ++(it->second.my_ref_counter);\n        return *it;\n    }\n\n    void signal_end_of_usage_serial(typename map_storage_type::reference map_record_ref){\n        typename map_storage_type::iterator it = my_map_storage.find(map_record_ref.first);\n        __TBB_ASSERT(it!=my_map_storage.end(),\"cache should not return past-end iterators to outer world\");\n        __TBB_ASSERT(&(*it) == &map_record_ref,\"dangling reference has been returned to outside world? data race ?\");\n        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),\n                \"object in use should not be in list of unused objects \");\n        if (! --(it->second.my_ref_counter)){\n            //it was the last reference so put it to the LRU history\n            if (my_lru_list.size()>=my_number_of_lru_history_items){\n                //evict items in order to get a space\n                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;\n                for (size_t i=0; i<number_of_elements_to_evict; ++i){\n                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();\n                    __TBB_ASSERT(!it_to_evict->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                    my_lru_list.pop_back();\n                    my_map_storage.erase(it_to_evict);\n                }\n            }\n            my_lru_list.push_front(it);\n            it->second.my_lru_list_iterator = my_lru_list.begin();\n        }\n    }\n};\n} // namespace interface6\n\nusing interface6::concurrent_lru_cache;\n\n} // namespace tbb\n#endif //__TBB_concurrent_lru_cache_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_priority_queue.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_priority_queue_H\n#define __TBB_concurrent_priority_queue_H\n\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_aggregator_impl.h\"\n#include <vector>\n#include <iterator>\n#include <functional>\n#include __TBB_STD_SWAP_HEADER\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    #include <type_traits>\n#endif\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    template<typename T, bool C = std::is_copy_constructible<T>::value>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n    template<typename T>\n    struct use_element_copy_constructor <T,false> {\n        typedef tbb::internal::false_type type;\n    };\n#else\n    template<typename>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n#endif\n} // namespace internal\n\nusing namespace tbb::internal;\n\n//! Concurrent priority queue\ntemplate <typename T, typename Compare=std::less<T>, typename A=cache_aligned_allocator<T> >\nclass concurrent_priority_queue {\n public:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Constructs a new concurrent_priority_queue with default capacity\n    explicit concurrent_priority_queue(const allocator_type& a = allocator_type()) : mark(0), my_size(0), data(a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Constructs a new concurrent_priority_queue with init_sz capacity\n    explicit concurrent_priority_queue(size_type init_capacity, const allocator_type& a = allocator_type()) :\n        mark(0), my_size(0), data(a)\n    {\n        data.reserve(init_capacity);\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_priority_queue(InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        mark(0), data(begin, end, a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from std::initializer_list\n    concurrent_priority_queue(std::initializer_list<T> init_list, const allocator_type &a = allocator_type()) :\n        mark(0),data(init_list.begin(), init_list.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copy constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    explicit concurrent_priority_queue(const concurrent_priority_queue& src) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), src.data.get_allocator())\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Copy constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(const concurrent_priority_queue& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=(const concurrent_priority_queue& src) {\n        if (this != &src) {\n            vector_t(src.data.begin(), src.data.end(), src.data.get_allocator()).swap(data);\n            mark = src.mark;\n            my_size = src.my_size;\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src) : mark(src.mark),\n        my_size(src.my_size), data(std::move(src.data))\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Move constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size),\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n        data(std::move(src.data), a)\n#else\n    // Some early version of C++11 STL vector does not have a constructor of vector(vector&& , allocator).\n    // It seems that the reason is absence of support of allocator_traits (stateful allocators).\n        data(a)\n#endif //__TBB_ALLOCATOR_TRAITS_PRESENT\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n        if (a != src.data.get_allocator()){\n            data.reserve(src.data.size());\n            data.assign(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()));\n        }else{\n            data = std::move(src.data);\n        }\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n    }\n\n    //! Move assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=( concurrent_priority_queue&& src) {\n        if (this != &src) {\n            mark = src.mark;\n            my_size = src.my_size;\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n            if (data.get_allocator() != src.data.get_allocator()){\n                vector_t(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()), data.get_allocator()).swap(data);\n            }else\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n            {\n                data = std::move(src.data);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Assign the queue from [begin,end) range, not thread-safe\n    template<typename InputIterator>\n    void assign(InputIterator begin, InputIterator end) {\n        vector_t(begin, end, data.get_allocator()).swap(data);\n        mark = 0;\n        my_size = data.size();\n        heapify();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assign the queue from std::initializer_list, not thread-safe\n    void assign(std::initializer_list<T> il) { this->assign(il.begin(), il.end()); }\n\n    //! Assign from std::initializer_list, not thread-safe\n    concurrent_priority_queue& operator=(std::initializer_list<T> il) {\n        this->assign(il.begin(), il.end());\n        return *this;\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Returns true if empty, false otherwise\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    bool empty() const { return size()==0; }\n\n    //! Returns the current number of elements contained in the queue\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    size_type size() const { return __TBB_load_with_acquire(my_size); }\n\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(const_reference elem) {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n        __TBB_STATIC_ASSERT( std::is_copy_constructible<value_type>::value, \"The type is not copy constructible. Copying push operation is impossible.\" );\n#endif\n        cpq_operation op_data(elem, PUSH_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(value_type &&elem) {\n        cpq_operation op_data(elem, PUSH_RVALUE_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Constructs a new element using args as the arguments for its construction and pushes it onto the queue */\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    template<typename... Args>\n    void emplace(Args&&... args) {\n        push(value_type(std::forward<Args>(args)...));\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Gets a reference to and removes highest priority element\n    /** If a highest priority element was found, sets elem and returns true,\n        otherwise returns false.\n        This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    bool try_pop(reference elem) {\n        cpq_operation op_data(POP_OP);\n        op_data.elem = &elem;\n        my_aggregator.execute(&op_data);\n        return op_data.status==SUCCEEDED;\n    }\n\n    //! Clear the queue; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue.\n        Resets size, effectively emptying queue; does not free space.\n        May not clear elements added in pending operations. */\n    void clear() {\n        data.clear();\n        mark = 0;\n        my_size = 0;\n    }\n\n    //! Swap this queue with another; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue. */\n    void swap(concurrent_priority_queue& q) {\n        using std::swap;\n        data.swap(q.data);\n        swap(mark, q.mark);\n        swap(my_size, q.my_size);\n    }\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return data.get_allocator(); }\n\n private:\n    enum operation_type {INVALID_OP, PUSH_OP, POP_OP, PUSH_RVALUE_OP};\n    enum operation_status { WAIT=0, SUCCEEDED, FAILED };\n\n    class cpq_operation : public aggregated_operation<cpq_operation> {\n     public:\n        operation_type type;\n        union {\n            value_type *elem;\n            size_type sz;\n        };\n        cpq_operation(const_reference e, operation_type t) :\n            type(t), elem(const_cast<value_type*>(&e)) {}\n        cpq_operation(operation_type t) : type(t) {}\n    };\n\n    class my_functor_t {\n        concurrent_priority_queue<T, Compare, A> *cpq;\n     public:\n        my_functor_t() {}\n        my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}\n        void operator()(cpq_operation* op_list) {\n            cpq->handle_operations(op_list);\n        }\n    };\n\n    typedef tbb::internal::aggregator< my_functor_t, cpq_operation > aggregator_t;\n    aggregator_t my_aggregator;\n    //! Padding added to avoid false sharing\n    char padding1[NFS_MaxLineSize - sizeof(aggregator_t)];\n    //! The point at which unsorted elements begin\n    size_type mark;\n    __TBB_atomic size_type my_size;\n    Compare compare;\n    //! Padding added to avoid false sharing\n    char padding2[NFS_MaxLineSize - (2*sizeof(size_type)) - sizeof(Compare)];\n    //! Storage for the heap of elements in queue, plus unheapified elements\n    /** data has the following structure:\n\n         binary unheapified\n          heap   elements\n        ____|_______|____\n        |       |       |\n        v       v       v\n        [_|...|_|_|...|_| |...| ]\n         0       ^       ^       ^\n                 |       |       |__capacity\n                 |       |__my_size\n                 |__mark\n\n        Thus, data stores the binary heap starting at position 0 through\n        mark-1 (it may be empty).  Then there are 0 or more elements\n        that have not yet been inserted into the heap, in positions\n        mark through my_size-1. */\n    typedef std::vector<value_type, allocator_type> vector_t;\n    vector_t data;\n\n    void handle_operations(cpq_operation *op_list) {\n        cpq_operation *tmp, *pop_list=NULL;\n\n        __TBB_ASSERT(mark == data.size(), NULL);\n\n        // First pass processes all constant (amortized; reallocation may happen) time pushes and pops.\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to op_list\n            // node. This thread is going to handle the operation, and so will acquire it\n            // and perform the associated operation w/o triggering a race condition; the\n            // thread that created the operation is waiting on the status field, so when\n            // this thread is done with the operation, it will perform a\n            // store_with_release to give control back to the waiting thread in\n            // aggregator::insert_operation.\n            call_itt_notify(acquired, &(op_list->status));\n            __TBB_ASSERT(op_list->type != INVALID_OP, NULL);\n            tmp = op_list;\n            op_list = itt_hide_load_word(op_list->next);\n            if (tmp->type == POP_OP) {\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one\n                    // is higher than top\n                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                    __TBB_ASSERT(mark<=data.size(), NULL);\n                }\n                else { // no convenient item to pop; postpone\n                    itt_hide_store_word(tmp->next, pop_list);\n                    pop_list = tmp;\n                }\n            } else { // PUSH_OP or PUSH_RVALUE_OP\n                __TBB_ASSERT(tmp->type == PUSH_OP || tmp->type == PUSH_RVALUE_OP, \"Unknown operation\" );\n                __TBB_TRY{\n                    if (tmp->type == PUSH_OP) {\n                        push_back_helper(*(tmp->elem), typename internal::use_element_copy_constructor<value_type>::type());\n                    } else {\n                        data.push_back(tbb::internal::move(*(tmp->elem)));\n                    }\n                    __TBB_store_with_release(my_size, my_size + 1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                } __TBB_CATCH(...) {\n                    itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n                }\n            }\n        }\n\n        // second pass processes pop operations\n        while (pop_list) {\n            tmp = pop_list;\n            pop_list = itt_hide_load_word(pop_list->next);\n            __TBB_ASSERT(tmp->type == POP_OP, NULL);\n            if (data.empty()) {\n                itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n            }\n            else {\n                __TBB_ASSERT(mark<=data.size(), NULL);\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one is\n                    // higher than top\n                    *(tmp->elem) = tbb::internal::move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                }\n                else { // extract top and push last element down heap\n                    *(tmp->elem) = tbb::internal::move(data[0]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    reheap();\n                }\n            }\n        }\n\n        // heapify any leftover pushed elements before doing the next\n        // batch of operations\n        if (mark<data.size()) heapify();\n        __TBB_ASSERT(mark == data.size(), NULL);\n    }\n\n    //! Merge unsorted elements into heap\n    void heapify() {\n        if (!mark && data.size()>0) mark = 1;\n        for (; mark<data.size(); ++mark) {\n            // for each unheapified element under size\n            size_type cur_pos = mark;\n            value_type to_place = tbb::internal::move(data[mark]);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(data[parent], to_place)) break;\n                data[cur_pos] = tbb::internal::move(data[parent]);\n                cur_pos = parent;\n            } while( cur_pos );\n            data[cur_pos] = tbb::internal::move(to_place);\n        }\n    }\n\n    //! Re-heapify after an extraction\n    /** Re-heapify by pushing last element down the heap from the root. */\n    void reheap() {\n        size_type cur_pos=0, child=1;\n\n        while (child < mark) {\n            size_type target = child;\n            if (child+1 < mark && compare(data[child], data[child+1]))\n                ++target;\n            // target now has the higher priority child\n            if (compare(data[target], data[data.size()-1])) break;\n            data[cur_pos] = tbb::internal::move(data[target]);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n        if (cur_pos != data.size()-1)\n            data[cur_pos] = tbb::internal::move(data[data.size()-1]);\n        data.pop_back();\n        if (mark > data.size()) mark = data.size();\n    }\n\n    void push_back_helper(const T& t, tbb::internal::true_type) {\n        data.push_back(t);\n    }\n\n    void push_back_helper(const T&, tbb::internal::false_type) {\n        __TBB_ASSERT( false, \"The type is not copy constructible. Copying push operation is impossible.\" );\n    }\n};\n\n} // namespace interface5\n\nusing interface5::concurrent_priority_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_priority_queue_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_queue.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_queue_H\n#define __TBB_concurrent_queue_H\n\n#include \"internal/_concurrent_queue_impl.h\"\n\nnamespace tbb {\n\nnamespace strict_ppl {\n\n//! A high-performance thread-safe non-blocking concurrent queue.\n/** Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, typename A = cache_aligned_allocator<T> >\nclass concurrent_queue: public internal::concurrent_queue_base_v3<T> {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    //! Allocates a block of size n (bytes)\n    virtual void *allocate_block( size_t n ) __TBB_override {\n        void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));\n        if( !b )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return b;\n    }\n\n    //! Deallocates block created by allocate_block.\n    virtual void deallocate_block( void *b, size_t n ) __TBB_override {\n        my_allocator.deallocate( reinterpret_cast<char*>(b), n );\n    }\n\n    static void copy_construct_item(T* location, const void* src){\n        new (location) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static void move_construct_item(T* location, const void* src) {\n        new (location) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Construct empty queue\n    explicit concurrent_queue(const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_queue( InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            this->push(*begin);\n    }\n\n    //! Copy constructor\n    concurrent_queue( const concurrent_queue& src, const allocator_type& a = allocator_type()) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        this->assign( src, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_queue( concurrent_queue&& src ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( std::move(src.my_allocator) )\n    {\n        this->internal_swap( src );\n    }\n\n    concurrent_queue( concurrent_queue&& src, const allocator_type& a ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->assign( src, move_construct_item );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Destroy queue\n    ~concurrent_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        this->internal_push( &source, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void push( T&& source ) {\n        this->internal_push( &source, move_construct_item );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& result ) {\n        return this->internal_try_pop( &result );\n    }\n\n    //! Return the number of items in the queue; thread unsafe\n    size_type unsafe_size() const {return this->internal_size();}\n\n    //! Equivalent to size()==0.\n    bool empty() const {return this->internal_empty();}\n\n    //! Clear the queue. not thread-safe.\n    void clear() ;\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n} ;\n\ntemplate<typename T, class A>\nconcurrent_queue<T,A>::~concurrent_queue() {\n    clear();\n    this->internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_queue<T,A>::clear() {\n    T value;\n    while( !empty() ) try_pop(value);\n}\n\n} // namespace strict_ppl\n\n//! A high-performance thread-safe blocking concurrent bounded queue.\n/** This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics.\n    Note that method names agree with the PPL-style concurrent queue.\n    Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_bounded_queue: public internal::concurrent_queue_base_v8 {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    typedef typename concurrent_queue_base_v3::padded_page<T> padded_page;\n    typedef typename concurrent_queue_base_v3::copy_specifics copy_specifics;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: internal::no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    T& get_ref( page& p, size_t index ) {\n        __TBB_ASSERT( index<items_per_page, NULL );\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    virtual void copy_item( page& dst, size_t index, const void* src ) __TBB_override {\n        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    virtual void move_item( page& dst, size_t index, const void* src ) __TBB_override {\n        new( &get_ref(dst,index) ) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#else\n    virtual void move_item( page&, size_t, const void* ) __TBB_override {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {\n        new( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) __TBB_override {\n        new( &get_ref(dst,dindex) ) T( std::move(get_ref( const_cast<page&>(src), sindex )) );\n    }\n#else\n    virtual void move_page_item( page&, size_t, const page&, size_t ) __TBB_override {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) __TBB_override {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    virtual page *allocate_page() __TBB_override {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));\n        if( !p )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return p;\n    }\n\n    virtual void deallocate_page( page *p ) __TBB_override {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        my_allocator.deallocate( reinterpret_cast<char*>(p), n );\n    }\n\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    /** Note that the size_type is a signed integral type.\n        This is because the size can be negative if there are pending pops without corresponding pushes. */\n    typedef std::ptrdiff_t size_type;\n\n    //! Difference type for iterator\n    typedef std::ptrdiff_t difference_type;\n\n    //! Construct empty queue\n    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) :\n        concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n    }\n\n    //! Copy constructor\n    concurrent_bounded_queue( const concurrent_bounded_queue& src, const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        assign( src );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_bounded_queue( concurrent_bounded_queue&& src )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( std::move(src.my_allocator) )\n    {\n        internal_swap( src );\n    }\n\n    concurrent_bounded_queue( concurrent_bounded_queue&& src, const allocator_type& a )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->move_content( src );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_bounded_queue( InputIterator begin, InputIterator end,\n                              const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            internal_push_if_not_full(&*begin);\n    }\n\n    //! Destroy queue\n    ~concurrent_bounded_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        internal_push( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue.\n    void push( T&& source ) {\n        internal_push_move( &source );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Dequeue item from head of queue.\n    /** Block until an item becomes available, and then dequeue it. */\n    void pop( T& destination ) {\n        internal_pop( &destination );\n    }\n\n#if TBB_USE_EXCEPTIONS\n    //! Abort all pending queue operations\n    void abort() {\n        internal_abort();\n    }\n#endif\n\n    //! Enqueue an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( const T& source ) {\n        return internal_push_if_not_full( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( T&& source ) {\n        return internal_push_move_if_not_full( &source );\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    bool try_emplace( Arguments&&... args ) {\n        return try_push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& destination ) {\n        return internal_pop_if_present( &destination );\n    }\n\n    //! Return number of pushes minus number of pops.\n    /** Note that the result can be negative if there are pops waiting for the\n        corresponding pushes.  The result can also exceed capacity() if there\n        are push operations in flight. */\n    size_type size() const {return internal_size();}\n\n    //! Equivalent to size()<=0.\n    bool empty() const {return internal_empty();}\n\n    //! Maximum number of allowed elements\n    size_type capacity() const {\n        return my_capacity;\n    }\n\n    //! Set the capacity\n    /** Setting the capacity to 0 causes subsequent try_push operations to always fail,\n        and subsequent push operations to block forever. */\n    void set_capacity( size_type new_capacity ) {\n        internal_set_capacity( new_capacity, sizeof(T) );\n    }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! clear the queue. not thread-safe.\n    void clear() ;\n\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n\n};\n\ntemplate<typename T, class A>\nconcurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {\n    clear();\n    internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_bounded_queue<T,A>::clear() {\n    T value;\n    while( try_pop(value) ) /*noop*/;\n}\n\nusing strict_ppl::concurrent_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_queue_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_unordered_map.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_map_H\n#define __TBB_concurrent_unordered_map_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash map traits\ntemplate<typename Key, typename T, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_map_traits\n{\nprotected:\n    typedef std::pair<const Key, T> value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_map_traits() : my_hash_compare() {}\n    concurrent_unordered_map_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    template<class Type1, class Type2>\n    static const Key& get_key(const std::pair<Type1, Type2>& value) {\n        return (value.first);\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_map :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::end;\n    using base_type::find;\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_map(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_map(const concurrent_unordered_map& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_map& operator=(const concurrent_unordered_map& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_map(concurrent_unordered_map&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_map& operator=(concurrent_unordered_map&& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_map(const concurrent_unordered_map& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n\n    // Observers\n    mapped_type& operator[](const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;\n        }\n\n        return ((*where).second);\n    }\n\n    mapped_type& at(const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n\n    const mapped_type& at(const key_type& key) const\n    {\n        const_iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n};\n\ntemplate < typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n        typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_multimap :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits< Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base<traits_type> base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multimap(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets,key_compare(_Hasher,_Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_multimap& operator=(const concurrent_unordered_multimap& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_multimap& operator=(concurrent_unordered_multimap&& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_map;\nusing interface5::concurrent_unordered_multimap;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_map_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_unordered_set.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_set_H\n#define __TBB_concurrent_unordered_set_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash set traits\ntemplate<typename Key, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_set_traits\n{\nprotected:\n    typedef Key value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_set_traits() : my_hash_compare() {}\n    concurrent_unordered_set_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    static const Key& get_key(const value_type& value) {\n        return value;\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>, typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_set : public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_set(size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {}\n\n    explicit concurrent_unordered_set(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_set(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_set(const concurrent_unordered_set& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_set& operator=(const concurrent_unordered_set& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_set(concurrent_unordered_set&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_set& operator=(concurrent_unordered_set&& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_set(concurrent_unordered_set&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {}\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_set(const concurrent_unordered_set& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_multiset :\n    public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multiset(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {}\n\n    explicit concurrent_unordered_multiset(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {}\n\n    template <typename Iterator>\n    concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_multiset(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#if !__TBB_IMPLICIT_MOVE_PRESENT\n    concurrent_unordered_multiset(const concurrent_unordered_multiset& table)\n        : base_type(table)\n    {}\n\n    concurrent_unordered_multiset& operator=(const concurrent_unordered_multiset& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_multiset(concurrent_unordered_multiset&& table)\n        : base_type(std::move(table))\n    {}\n\n    concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(std::move(table)));\n    }\n#endif //!__TBB_IMPLICIT_MOVE_PRESENT\n\n    concurrent_unordered_multiset(concurrent_unordered_multiset&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_multiset(const concurrent_unordered_multiset& table, const Allocator& a)\n        : base_type(table, a)\n    {}\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_set;\nusing interface5::concurrent_unordered_multiset;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_set_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/concurrent_vector.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_concurrent_vector_H\n#define __TBB_concurrent_vector_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_exception.h\"\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"blocked_range.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <new>\n#include <cstring>   // for memset()\n#include __TBB_STD_SWAP_HEADER\n#include <algorithm>\n#include <iterator>\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <limits> /* std::numeric_limits */\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n#if defined(_Wp64)\n    #pragma warning (disable: 4267)\n#endif\n    #pragma warning (disable: 4127) //warning C4127: conditional expression is constant\n#endif\n\nnamespace tbb {\n\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_vector;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    template<typename Container, typename Value>\n    class vector_iterator;\n\n    //! Bad allocation marker\n    static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));\n\n    //! Exception helper function\n    template<typename T>\n    void handle_unconstructed_elements(T* array, size_t n_of_elements){\n        std::memset( static_cast<void*>(array), 0, n_of_elements * sizeof( T ) );\n    }\n\n    //! Base class of concurrent vector implementation.\n    /** @ingroup containers */\n    class concurrent_vector_base_v3 {\n    protected:\n\n        // Basic types declarations\n        typedef size_t segment_index_t;\n        typedef size_t size_type;\n\n        // Using enumerations due to Mac linking problems of static const variables\n        enum {\n            // Size constants\n            default_initial_segments = 1, // 2 initial items\n            //! Number of slots for segment pointers inside the class\n            pointers_per_short_table = 3, // to fit into 8 words of entire structure\n            pointers_per_long_table = sizeof(segment_index_t) * 8 // one segment per bit\n        };\n\n        struct segment_not_used {};\n        struct segment_allocated {};\n        struct segment_allocation_failed {};\n\n        class segment_t;\n        class segment_value_t {\n            void* array;\n        private:\n            //TODO: More elegant way to grant access to selected functions _only_?\n            friend class segment_t;\n            explicit segment_value_t(void* an_array):array(an_array) {}\n        public:\n            friend bool operator==(segment_value_t const& lhs, segment_not_used ) { return lhs.array == 0;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocated) { return lhs.array > internal::vector_allocation_error_flag;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocation_failed) { return lhs.array == internal::vector_allocation_error_flag;}\n            template<typename argument_type>\n            friend bool operator!=(segment_value_t const& lhs, argument_type arg) { return ! (lhs == arg);}\n\n            template<typename T>\n            T* pointer() const {  return static_cast<T*>(const_cast<void*>(array)); }\n        };\n\n        friend void enforce_segment_allocated(segment_value_t const& s, internal::exception_id exception = eid_bad_last_alloc){\n            if(s != segment_allocated()){\n                internal::throw_exception(exception);\n            }\n        }\n\n        // Segment pointer.\n        class segment_t {\n            atomic<void*> array;\n        public:\n            segment_t(){ store<relaxed>(segment_not_used());}\n            //Copy ctor and assignment operator are defined to ease using of stl algorithms.\n            //These algorithms usually not a synchronization point, so, semantic is\n            //intentionally relaxed here.\n            segment_t(segment_t const& rhs ){ array.store<relaxed>(rhs.array.load<relaxed>());}\n\n            void swap(segment_t & rhs ){\n                tbb::internal::swap<relaxed>(array, rhs.array);\n            }\n\n            segment_t& operator=(segment_t const& rhs ){\n                array.store<relaxed>(rhs.array.load<relaxed>());\n                return *this;\n            }\n\n            template<memory_semantics M>\n            segment_value_t load() const { return segment_value_t(array.load<M>());}\n\n            template<memory_semantics M>\n            void store(segment_not_used) {\n                array.store<M>(0);\n            }\n\n            template<memory_semantics M>\n            void store(segment_allocation_failed) {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(),\"transition from \\\"allocated\\\" to \\\"allocation failed\\\" state looks non-logical\");\n                array.store<M>(internal::vector_allocation_error_flag);\n            }\n\n            template<memory_semantics M>\n            void store(void* allocated_segment_pointer) __TBB_NOEXCEPT(true) {\n                __TBB_ASSERT(segment_value_t(allocated_segment_pointer) == segment_allocated(),\n                     \"other overloads of store should be used for marking segment as not_used or allocation_failed\" );\n                array.store<M>(allocated_segment_pointer);\n            }\n\n#if TBB_USE_ASSERT\n            ~segment_t() {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(), \"should have been freed by clear\" );\n            }\n#endif /* TBB_USE_ASSERT */\n        };\n        friend void swap(segment_t & , segment_t & ) __TBB_NOEXCEPT(true);\n\n        // Data fields\n\n        //! allocator function pointer\n        void* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);\n\n        //! count of segments in the first block\n        atomic<size_type> my_first_block;\n\n        //! Requested size of vector\n        atomic<size_type> my_early_size;\n\n        //! Pointer to the segments table\n        atomic<segment_t*> my_segment;\n\n        //! embedded storage of segment pointers\n        segment_t my_storage[pointers_per_short_table];\n\n        // Methods\n\n        concurrent_vector_base_v3() {\n            //Here the semantic is intentionally relaxed.\n            //The reason this is next:\n            //Object that is in middle of construction (i.e. its constructor is not yet finished)\n            //cannot be used concurrently until the construction is finished.\n            //Thus to flag other threads that construction is finished, some synchronization with\n            //acquire-release semantic should be done by the (external) code that uses the vector.\n            //So, no need to do the synchronization inside the vector.\n\n            my_early_size.store<relaxed>(0);\n            my_first_block.store<relaxed>(0); // here is not default_initial_segments\n            my_segment.store<relaxed>(my_storage);\n        }\n\n        __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();\n\n        //these helpers methods use the fact that segments are allocated so\n        //that every segment size is a (increasing) power of 2.\n        //with one exception 0 segment has size of 2 as well segment 1;\n        //e.g. size of segment with index of 3 is 2^3=8;\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        static inline segment_index_t segment_base_index_of( segment_index_t &index ) {\n            segment_index_t k = segment_index_of( index );\n            index -= segment_base(k);\n            return k;\n        }\n\n        static size_type segment_size( segment_index_t k ) {\n            return segment_index_t(1)<<k; // fake value for k==0\n        }\n\n\n        static bool is_first_element_in_segment(size_type element_index){\n            //check if element_index is a power of 2 that is at least 2.\n            //The idea is to detect if the iterator crosses a segment boundary,\n            //and 2 is the minimal index for which it's true\n            __TBB_ASSERT(element_index, \"there should be no need to call \"\n                                        \"is_first_element_in_segment for 0th element\" );\n            return is_power_of_two_at_least( element_index, 2 );\n        }\n\n        //! An operation on an n-element array starting at begin.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );\n\n        //! An operation on n-element destination array and n-element source array.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );\n\n        //! Internal structure for compact()\n        struct internal_segments_table {\n            segment_index_t first_block;\n            segment_t table[pointers_per_long_table];\n        };\n\n        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );\n        size_type __TBB_EXPORTED_METHOD internal_capacity() const;\n        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src );\n        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );\n        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );\n        segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );\n        void* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base_v3& src, size_type element_size,\n                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );\n        //! Obsolete\n        void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;\n        void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);\n\n        void __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,\n                                                    internal_array_op1 destroy, internal_array_op2 init );\n        size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\n\n        //! Deprecated entry point for backwards compatibility to TBB 2.1.\n        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\nprivate:\n        //! Private functionality\n        class helper;\n        friend class helper;\n\n        template<typename Container, typename Value>\n        friend class vector_iterator;\n\n    };\n\n    inline void swap(concurrent_vector_base_v3::segment_t & lhs, concurrent_vector_base_v3::segment_t & rhs) __TBB_NOEXCEPT(true) {\n        lhs.swap(rhs);\n    }\n\n    typedef concurrent_vector_base_v3 concurrent_vector_base;\n\n    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class vector_iterator\n    {\n        //! concurrent_vector over which we are iterating.\n        Container* my_vector;\n\n        //! Index into the vector\n        size_t my_index;\n\n        //! Caches my_vector-&gt;internal_subscript(my_index)\n        /** NULL if cached value is not available */\n        mutable Value* my_item;\n\n        template<typename C, typename T>\n        friend vector_iterator<C,T> operator+( ptrdiff_t offset, const vector_iterator<C,T>& v );\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class internal::vector_iterator;\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n        template<typename T, class A>\n        friend class tbb::concurrent_vector;\n#else\npublic:\n#endif\n\n        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) :\n            my_vector(const_cast<Container*>(&vector)),\n            my_index(index),\n            my_item(static_cast<Value*>(ptr))\n        {}\n\n    public:\n        //! Default constructor\n        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}\n\n        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :\n            my_vector(other.my_vector),\n            my_index(other.my_index),\n            my_item(other.my_item)\n        {}\n\n        vector_iterator operator+( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index+offset );\n        }\n        vector_iterator &operator+=( ptrdiff_t offset ) {\n            my_index+=offset;\n            my_item = NULL;\n            return *this;\n        }\n        vector_iterator operator-( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index-offset );\n        }\n        vector_iterator &operator-=( ptrdiff_t offset ) {\n            my_index-=offset;\n            my_item = NULL;\n            return *this;\n        }\n        Value& operator*() const {\n            Value* item = my_item;\n            if( !item ) {\n                item = my_item = &my_vector->internal_subscript(my_index);\n            }\n            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), \"corrupt cache\" );\n            return *item;\n        }\n        Value& operator[]( ptrdiff_t k ) const {\n            return my_vector->internal_subscript(my_index+k);\n        }\n        Value* operator->() const {return &operator*();}\n\n        //! Pre increment\n        vector_iterator& operator++() {\n            size_t element_index = ++my_index;\n            if( my_item ) {\n                //TODO: consider using of knowledge about \"first_block optimization\" here as well?\n                if( concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    ++my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Pre decrement\n        vector_iterator& operator--() {\n            __TBB_ASSERT( my_index>0, \"operator--() applied to iterator already at beginning of concurrent_vector\" );\n            size_t element_index = my_index--;\n            if( my_item ) {\n                if(concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    --my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Post increment\n        vector_iterator operator++(int) {\n            vector_iterator result = *this;\n            operator++();\n            return result;\n        }\n\n        //! Post decrement\n        vector_iterator operator--(int) {\n            vector_iterator result = *this;\n            operator--();\n            return result;\n        }\n\n        // STL support\n\n        typedef ptrdiff_t difference_type;\n        typedef Value value_type;\n        typedef Value* pointer;\n        typedef Value& reference;\n        typedef std::random_access_iterator_tag iterator_category;\n    };\n\n    template<typename Container, typename T>\n    vector_iterator<Container,T> operator+( ptrdiff_t offset, const vector_iterator<Container,T>& v ) {\n        return vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index==j.my_index && i.my_vector == j.my_vector;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i==j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index<j.my_index;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return j<i;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i<j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(j<i);\n    }\n\n    template<typename Container, typename T, typename U>\n    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);\n    }\n\n    template<typename T, class A>\n    class allocator_base {\n    public:\n        typedef typename A::template\n            rebind<T>::other allocator_type;\n        allocator_type my_allocator;\n\n        allocator_base(const allocator_type &a = allocator_type() ) : my_allocator(a) {}\n\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Concurrent vector container\n/** concurrent_vector is a container having the following main properties:\n    - It provides random indexed access to its elements. The index of the first element is 0.\n    - It ensures safe concurrent growing its size (different threads can safely append new elements).\n    - Adding new elements does not invalidate existing iterators and does not change indices of existing items.\n\n@par Compatibility\n    The class meets all Container Requirements and Reversible Container Requirements from\n    C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet\n    Sequence Requirements due to absence of insert() and erase() methods.\n\n@par Exception Safety\n    Methods working with memory allocation and/or new elements construction can throw an\n    exception if allocator fails to allocate memory or element's default constructor throws one.\n    Concurrent vector's element of type T must conform to the following requirements:\n    - Throwing an exception is forbidden for destructor of T.\n    - Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.\n    .\n    Otherwise, the program's behavior is undefined.\n@par\n    If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation.\n    Invalid state means:\n    - There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.\n    - An invalid vector instance cannot be repaired; it is unable to grow anymore.\n    - Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.\n    - Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.\n    .\n    If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.\n\n@par Fragmentation\n    Unlike an STL vector, a concurrent_vector does not move existing elements if it needs\n    to allocate more memory. The container is divided into a series of contiguous arrays of\n    elements. The first reservation, growth, or assignment operation determines the size of\n    the first array. Using small number of elements as initial size incurs fragmentation that\n    may increase element access time. Internal layout can be optimized by method compact() that\n    merges several smaller arrays into one solid.\n\n@par Changes since TBB 2.1\n    - Fixed guarantees of concurrent_vector::size() and grow_to_at_least() methods to assure elements are allocated.\n    - Methods end()/rbegin()/back() are partly thread-safe since they use size() to get the end of vector\n    - Added resize() methods (not thread-safe)\n    - Added cbegin/cend/crbegin/crend methods\n    - Changed return type of methods grow* and push_back to iterator\n\n@par Changes since TBB 2.0\n    - Implemented exception-safety guarantees\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Faster index calculation\n    - First growth call specifies a number of segments to be merged in the first allocation.\n    - Fixed memory blow up for swarm of vector's instances of small size\n    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items.\n    - Added STL-like constructors.\n    - Added operators ==, < and derivatives\n    - Added at() method, approved for using after an exception was thrown inside the vector\n    - Added get_allocator() method.\n    - Added assign() methods\n    - Added compact() method to defragment first segments\n    - Added swap() method\n    - range() defaults on grainsize = 1 supporting auto grainsize algorithms.\n\n    @ingroup containers */\ntemplate<typename T, class A>\nclass concurrent_vector: protected internal::allocator_base<T, A>,\n                         private internal::concurrent_vector_base {\nprivate:\n    template<typename I>\n    class generic_range_type: public blocked_range<I> {\n    public:\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef I iterator;\n        typedef ptrdiff_t difference_type;\n        generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n        template<typename U>\n        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n    };\n\n    template<typename C, typename U>\n    friend class internal::vector_iterator;\n\npublic:\n    //------------------------------------------------------------------------\n    // STL compatible types\n    //------------------------------------------------------------------------\n    typedef internal::concurrent_vector_base_v3::size_type size_type;\n    typedef typename internal::allocator_base<T, A>::allocator_type allocator_type;\n\n    typedef T value_type;\n    typedef ptrdiff_t difference_type;\n    typedef T& reference;\n    typedef const T& const_reference;\n    typedef T *pointer;\n    typedef const T *const_pointer;\n\n    typedef internal::vector_iterator<concurrent_vector,T> iterator;\n    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;\n\n#if !defined(_MSC_VER) || _CPPLIB_VER>=300\n    // Assume ISO standard definition of std::reverse_iterator\n    typedef std::reverse_iterator<iterator> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#else\n    // Use non-standard std::reverse_iterator\n    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;\n#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    typedef generic_range_type<iterator> range_type;\n    typedef generic_range_type<const_iterator> const_range_type;\n\n    //------------------------------------------------------------------------\n    // STL compatible constructors & destructors\n    //------------------------------------------------------------------------\n\n    //! Construct empty vector.\n    explicit concurrent_vector(const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n    }\n\n    //Constructors are not required to have synchronization\n    //(for more details see comment in the concurrent_vector_base constructor).\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_vector(std::initializer_list<T> init_list, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_iterators(init_list.begin(), init_list.end());\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();;\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copying constructor\n    concurrent_vector( const concurrent_vector& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector, sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    //TODO add __TBB_NOEXCEPT(true) and static_assert(std::has_nothrow_move_constructor<A>::value)\n    concurrent_vector( concurrent_vector&& source)\n        : internal::allocator_base<T, A>(std::move(source)), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        concurrent_vector_base_v3::internal_swap(source);\n    }\n\n    concurrent_vector( concurrent_vector&& source, const allocator_type& a)\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        //C++ standard requires instances of an allocator being compared for equality,\n        //which means that memory allocated by one instance is possible to deallocate with the other one.\n        if (a == source.my_allocator) {\n            concurrent_vector_base_v3::internal_swap(source);\n        } else {\n            __TBB_TRY {\n                internal_copy(source, sizeof(T), &move_array);\n            } __TBB_CATCH(...) {\n                segment_t *table = my_segment.load<relaxed>();\n                internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n                __TBB_RETHROW();\n            }\n        }\n    }\n\n#endif\n\n    //! Copying constructor for vector with different allocator type\n    template<class M>\n    concurrent_vector( const concurrent_vector<T, M>& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector.internal_vector_base(), sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n\n    explicit concurrent_vector(size_type n)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance\n    concurrent_vector(size_type n, const_reference t, const allocator_type& a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with copying iteration range and given allocator instance\n    template<class I>\n    concurrent_vector(I first, I last, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_range(first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Assignment\n    concurrent_vector& operator=( const concurrent_vector& vector ) {\n        if( this != &vector )\n            internal_assign(vector, sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //TODO: add __TBB_NOEXCEPT()\n    //! Move assignment\n    concurrent_vector& operator=( concurrent_vector&& other ) {\n        __TBB_ASSERT(this != &other, \"Move assignment to itself is prohibited \");\n        typedef typename tbb::internal::allocator_traits<A>::propagate_on_container_move_assignment pocma_t;\n        if(pocma_t::value || this->my_allocator == other.my_allocator) {\n            concurrent_vector trash (std::move(*this));\n            internal_swap(other);\n            if (pocma_t::value) {\n                this->my_allocator = std::move(other.my_allocator);\n            }\n        } else {\n            internal_assign(other, sizeof(T), &destroy_array, &move_assign_array, &move_array);\n        }\n        return *this;\n    }\n#endif\n    //TODO: add an template assignment operator? (i.e. with different element type)\n\n    //! Assignment for vector with different allocator type\n    template<class M>\n    concurrent_vector& operator=( const concurrent_vector<T, M>& vector ) {\n        if( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )\n            internal_assign(vector.internal_vector_base(),\n                sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment for initializer_list\n    concurrent_vector& operator=( std::initializer_list<T> init_list ) {\n        internal_clear(&destroy_array);\n        internal_assign_iterators(init_list.begin(), init_list.end());\n        return *this;\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //------------------------------------------------------------------------\n    // Concurrent operations\n    //------------------------------------------------------------------------\n    //! Grow by \"delta\" elements.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array, NULL ) : my_early_size.load());\n    }\n\n    //! Grow by \"delta\" elements using copying constructor.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta, const_reference t ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size.load());\n    }\n\n    /** Returns iterator pointing to the first new element. */\n    template<typename I>\n    iterator grow_by( I first, I last ) {\n        typename std::iterator_traits<I>::difference_type delta = std::distance(first, last);\n        __TBB_ASSERT( delta >= 0, NULL);\n\n        return iterator(*this, delta ? internal_grow_by(delta, sizeof(T), &copy_range<I>, static_cast<const void*>(&first)) : my_early_size.load());\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( std::initializer_list<T> init_list ) {\n        return grow_by( init_list.begin(), init_list.end() );\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Append minimal sequence of elements such that size()>=n.\n    /** The new elements are default constructed.  Blocks until all elements in range [0..n) are allocated.\n        May return while other elements are being constructed by other threads.\n        Returns iterator that points to beginning of appended sequence.\n        If no elements were appended, returns iterator pointing to nth element. */\n    iterator grow_to_at_least( size_type n ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array, NULL );\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    /** Analogous to grow_to_at_least( size_type n ) with exception that the new\n        elements are initialized by copying of t instead of default construction. */\n    iterator grow_to_at_least( size_type n, const_reference t ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array_by, &t);\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    //! Push item\n    /** Returns iterator pointing to the new element. */\n    iterator push_back( const_reference item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(item);\n        return prolog.return_iterator_and_dismiss();\n    }\n\n#if    __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Push item, move-aware\n    /** Returns iterator pointing to the new element. */\n    iterator push_back(  T&& item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::move(item));\n        return prolog.return_iterator_and_dismiss();\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Push item, create item \"in place\" with provided arguments\n    /** Returns iterator pointing to the new element. */\n    template<typename... Args>\n    iterator emplace_back(  Args&&... args )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::forward<Args>(args)...);\n        return prolog.return_iterator_and_dismiss();\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n    //! Get reference to element at given index.\n    /** This method is thread-safe for concurrent reads, and also while growing the vector,\n        as long as the calling thread has checked that index < size(). */\n    reference operator[]( size_type index ) {\n        return internal_subscript(index);\n    }\n\n    //! Get const reference to element at given index.\n    const_reference operator[]( size_type index ) const {\n        return internal_subscript(index);\n    }\n\n    //! Get reference to element at given index. Throws exceptions on errors.\n    reference at( size_type index ) {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get const reference to element at given index. Throws exceptions on errors.\n    const_reference at( size_type index ) const {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get range for iterating with parallel algorithms\n    range_type range( size_t grainsize = 1 ) {\n        return range_type( begin(), end(), grainsize );\n    }\n\n    //! Get const range for iterating with parallel algorithms\n    const_range_type range( size_t grainsize = 1 ) const {\n        return const_range_type( begin(), end(), grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // Capacity\n    //------------------------------------------------------------------------\n    //! Return size of vector. It may include elements under construction\n    size_type size() const {\n        size_type sz = my_early_size, cp = internal_capacity();\n        return cp < sz ? cp : sz;\n    }\n\n    //! Return false if vector is not empty or has elements under construction at least.\n    bool empty() const {return !my_early_size;}\n\n    //! Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.\n    size_type capacity() const {return internal_capacity();}\n\n    //! Allocate enough space to grow to size n without having to allocate more memory later.\n    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe.\n        The capacity afterwards may be bigger than the requested reservation. */\n    void reserve( size_type n ) {\n        if( n )\n            internal_reserve(n, sizeof(T), max_size());\n    }\n\n    //! Resize the vector. Not thread-safe.\n    void resize( size_type n ) {\n        internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n    }\n\n    //! Resize the vector, copy t for new elements. Not thread-safe.\n    void resize( size_type n, const_reference t ) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! Optimize memory usage and fragmentation.\n    void shrink_to_fit();\n\n    //! Upper bound on argument to reserve.\n    size_type max_size() const {return (~size_type(0))/sizeof(T);}\n\n    //------------------------------------------------------------------------\n    // STL support\n    //------------------------------------------------------------------------\n\n    //! start iterator\n    iterator begin() {return iterator(*this,0);}\n    //! end iterator\n    iterator end() {return iterator(*this,size());}\n    //! start const iterator\n    const_iterator begin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator end() const {return const_iterator(*this,size());}\n    //! start const iterator\n    const_iterator cbegin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator cend() const {return const_iterator(*this,size());}\n    //! reverse start iterator\n    reverse_iterator rbegin() {return reverse_iterator(end());}\n    //! reverse end iterator\n    reverse_iterator rend() {return reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator crbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator crend() const {return const_reverse_iterator(begin());}\n    //! the first item\n    reference front() {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<T>())[0];\n    }\n    //! the first item const\n    const_reference front() const {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<const T>())[0];\n    }\n    //! the last item\n    reference back() {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! the last item const\n    const_reference back() const {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! assign n items by copying t item\n    void assign(size_type n, const_reference t) {\n        clear();\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! assign range [first, last)\n    template<class I>\n    void assign(I first, I last) {\n        clear(); internal_assign_range( first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assigns an initializer list\n    void assign(std::initializer_list<T> init_list) {\n        clear(); internal_assign_iterators( init_list.begin(), init_list.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! swap two instances\n    void swap(concurrent_vector &vector) {\n        using std::swap;\n        if( this != &vector ) {\n            concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));\n            swap(this->my_allocator, vector.my_allocator);\n        }\n    }\n\n    //! Clear container while keeping memory allocated.\n    /** To free up the memory, use in conjunction with method compact(). Not thread safe **/\n    void clear() {\n        internal_clear(&destroy_array);\n    }\n\n    //! Clear and destroy vector.\n    ~concurrent_vector() {\n        segment_t *table = my_segment.load<relaxed>();\n        internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n        // base class destructor call should be then\n    }\n\n    const internal::concurrent_vector_base_v3 &internal_vector_base() const { return *this; }\nprivate:\n    //! Allocate k items\n    static void *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {\n        return static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);\n    }\n    //! Free k segments from table\n    void internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block);\n\n    //! Get reference to element at given index.\n    T& internal_subscript( size_type index ) const;\n\n    //! Get reference to element at given index with errors checks\n    T& internal_subscript_with_exceptions( size_type index ) const;\n\n    //! assign n items by copying t\n    void internal_assign_n(size_type n, const_pointer p) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );\n    }\n\n    //! helper class\n    template<bool B> class is_integer_tag;\n\n    //! assign integer items by copying when arguments are treated as iterators. See C++ Standard 2003 23.1.1p9\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<true> *) {\n        internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));\n    }\n    //! inline proxy assign by iterators\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<false> *) {\n        internal_assign_iterators(first, last);\n    }\n    //! assign by iterators\n    template<class I>\n    void internal_assign_iterators(I first, I last);\n\n    //these functions are marked __TBB_EXPORTED_FUNC as they are called from within the library\n\n    //! Construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, const void*, size_type n );\n\n    //! Copy-construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array_by( void* begin, const void* src, size_type n );\n\n    //! Copy-construct n instances of T by copying single element pointed to by src, starting at \"dst\".\n    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n    //! Either opy or move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array_if_noexcept( void* dst, const void* src, size_type n );\n#endif //__TBB_MOVE_IF_NO_EXCEPT_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array( void* dst, const void* src, size_type n );\n\n    //! Move-assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC move_assign_array( void* dst, const void* src, size_type n );\n#endif\n    //! Copy-construct n instances of T, starting at \"dst\" by iterator range of [p_type_erased_iterator, p_type_erased_iterator+n).\n    template<typename Iterator>\n    static void __TBB_EXPORTED_FUNC copy_range( void* dst, const void* p_type_erased_iterator, size_type n );\n\n    //! Assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );\n\n    //! Destroy n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );\n\n    //! Exception-aware helper class for filling a segment by exception-danger operators of user class\n    class internal_loop_guide : internal::no_copy {\n    public:\n        const pointer array;\n        const size_type n;\n        size_type i;\n\n        static const T* as_const_pointer(const void *ptr) { return static_cast<const T *>(ptr); }\n        static T* as_pointer(const void *src) { return static_cast<T*>(const_cast<void *>(src)); }\n\n        internal_loop_guide(size_type ntrials, void *ptr)\n            : array(as_pointer(ptr)), n(ntrials), i(0) {}\n        void init() {   for(; i < n; ++i) new( &array[i] ) T(); }\n        void init(const void *src) { for(; i < n; ++i) new( &array[i] ) T(*as_const_pointer(src)); }\n        void copy(const void *src) { for(; i < n; ++i) new( &array[i] ) T(as_const_pointer(src)[i]); }\n        void assign(const void *src) { for(; i < n; ++i) array[i] = as_const_pointer(src)[i]; }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        void move_assign(const void *src)       { for(; i < n; ++i) array[i]         =  std::move(as_pointer(src)[i]);   }\n        void move_construct(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move(as_pointer(src)[i]) ); }\n#endif\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n        void move_construct_if_noexcept(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move_if_noexcept(as_pointer(src)[i]) ); }\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\n        //TODO: rename to construct_range\n        template<class I> void iterate(I &src) { for(; i < n; ++i, ++src) new( &array[i] ) T( *src ); }\n        ~internal_loop_guide() {\n            if(i < n) {// if an exception was raised, fill the rest of items with zeros\n                internal::handle_unconstructed_elements(array+i, n-i);\n            }\n        }\n    };\n\n    struct push_back_helper : internal::no_copy{\n        struct element_construction_guard : internal::no_copy{\n            pointer element;\n\n            element_construction_guard(pointer an_element) : element (an_element){}\n            void dismiss(){ element = NULL; }\n            ~element_construction_guard(){\n                if (element){\n                    internal::handle_unconstructed_elements(element, 1);\n                }\n            }\n        };\n\n        concurrent_vector & v;\n        size_type k;\n        element_construction_guard g;\n\n        push_back_helper(concurrent_vector & vector) :\n            v(vector),\n            g (static_cast<T*>(v.internal_push_back(sizeof(T),k)))\n        {}\n\n        pointer internal_push_back_result(){ return g.element;}\n        iterator return_iterator_and_dismiss(){\n            pointer ptr = g.element;\n            g.dismiss();\n            return iterator(v, k, ptr);\n        }\n    };\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (push)\n#pragma warning (disable: 4701) // potentially uninitialized local variable \"old\"\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::shrink_to_fit() {\n    internal_segments_table old;\n    __TBB_TRY {\n        internal_array_op2 copy_or_move_array =\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n                &move_array_if_noexcept\n#else\n                &copy_array\n#endif\n        ;\n        if( internal_compact( sizeof(T), &old, &destroy_array, copy_or_move_array ) )\n            internal_free_segments( old.table, pointers_per_long_table, old.first_block ); // free joined and unnecessary segments\n    } __TBB_CATCH(...) {\n        if( old.first_block ) // free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]\n            internal_free_segments( old.table, 1, old.first_block );\n        __TBB_RETHROW();\n    }\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (pop)\n#endif // warning 4701 is back\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block) {\n    // Free the arrays\n    while( k > first_block ) {\n        --k;\n        segment_value_t segment_value = table[k].load<relaxed>();\n        table[k].store<relaxed>(segment_not_used());\n        if( segment_value == segment_allocated() ) // check for correct segment pointer\n            this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(k) );\n    }\n    segment_value_t segment_value = table[0].load<relaxed>();\n    if( segment_value == segment_allocated() ) {\n        __TBB_ASSERT( first_block > 0, NULL );\n        while(k > 0) table[--k].store<relaxed>(segment_not_used());\n        this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(first_block) );\n    }\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript( size_type index ) const {\n    //TODO: unify both versions of internal_subscript\n    __TBB_ASSERT( index < my_early_size, \"index out of bounds\" );\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    __TBB_ASSERT( my_segment.load<acquire>() != my_storage || k < pointers_per_short_table, \"index is being allocated\" );\n    //no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    __TBB_ASSERT( segment_value != segment_allocation_failed(), \"the instance is broken by bad allocation. Use at() instead\" );\n    __TBB_ASSERT( segment_value != segment_not_used(), \"index is being allocated\" );\n    return (( segment_value.pointer<T>()))[j];\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index ) const {\n    if( index >= my_early_size )\n        internal::throw_exception(internal::eid_out_of_range); // throw std::out_of_range\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    //TODO: refactor this condition into separate helper function, e.g. fits_into_small_table\n    if( my_segment.load<acquire>() == my_storage && k >= pointers_per_short_table )\n        internal::throw_exception(internal::eid_segment_range_error); // throw std::range_error\n    // no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    enforce_segment_allocated(segment_value, internal::eid_index_range_error);\n    return (segment_value.pointer<T>())[j];\n}\n\ntemplate<typename T, class A> template<class I>\nvoid concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {\n    __TBB_ASSERT(my_early_size == 0, NULL);\n    size_type n = std::distance(first, last);\n    if( !n ) return;\n    internal_reserve(n, sizeof(T), max_size());\n    my_early_size = n;\n    segment_index_t k = 0;\n    //TODO: unify segment iteration code with concurrent_base_v3::helper\n    size_type sz = segment_size( my_first_block );\n    while( sz < n ) {\n        internal_loop_guide loop(sz, my_segment[k].template load<relaxed>().template pointer<void>());\n        loop.iterate(first);\n        n -= sz;\n        if( !k ) k = my_first_block;\n        else { ++k; sz <<= 1; }\n    }\n    internal_loop_guide loop(n, my_segment[k].template load<relaxed>().template pointer<void>());\n    loop.iterate(first);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array( void* begin, const void *, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array_by( void* begin, const void *src, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init(src);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::copy_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.copy(src);\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct(src);\n}\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_assign(src);\n}\n#endif\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array_if_noexcept( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct_if_noexcept(src);\n}\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\ntemplate<typename T, class A>\ntemplate<typename I>\nvoid concurrent_vector<T, A>::copy_range( void* dst, const void* p_type_erased_iterator, size_type n ){\n    internal_loop_guide loop(n, dst);\n    loop.iterate( *(static_cast<I*>(const_cast<void*>(p_type_erased_iterator))) );\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.assign(src);\n}\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warning\n    #pragma warning (push)\n    #pragma warning (disable: 4189)\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {\n    T* array = static_cast<T*>(begin);\n    for( size_type j=n; j>0; --j )\n        array[j-1].~T(); // destructors are supposed to not throw any exceptions\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4189 is back\n\n// concurrent_vector's template functions\ntemplate<typename T, class A1, class A2>\ninline bool operator==(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b) {\n    //TODO: call size() only once per vector (in operator==)\n    // Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());\n    if(a.size() != b.size()) return false;\n    typename concurrent_vector<T, A1>::const_iterator i(a.begin());\n    typename concurrent_vector<T, A2>::const_iterator j(b.begin());\n    for(; i != a.end(); ++i, ++j)\n        if( !(*i == *j) ) return false;\n    return true;\n}\n\ntemplate<typename T, class A1, class A2>\ninline bool operator!=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return b < a; }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(b < a); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a < b); }\n\ntemplate<typename T, class A>\ninline void swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)\n{    a.swap( b ); }\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4267,4127 are back\n\n#endif /* __TBB_concurrent_vector_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/critical_section.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _TBB_CRITICAL_SECTION_H_\n#define _TBB_CRITICAL_SECTION_H_\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#include <errno.h>\n#endif  // _WIN32||WIN64\n\n#include \"tbb_stddef.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_exception.h\"\n\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n    namespace internal {\nclass critical_section_v4 : internal::no_copy {\n#if _WIN32||_WIN64\n    CRITICAL_SECTION my_impl;\n#else\n    pthread_mutex_t my_impl;\n#endif\n    tbb_thread::id my_tid;\npublic:\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    critical_section_v4() {\n#if _WIN32||_WIN64\n        InitializeCriticalSectionEx( &my_impl, 4000, 0 );\n#else\n        pthread_mutex_init(&my_impl, NULL);\n#endif\n        internal_construct();\n    }\n\n    ~critical_section_v4() {\n        __TBB_ASSERT(my_tid == tbb_thread::id(), \"Destroying a still-held critical section\");\n#if _WIN32||_WIN64\n        DeleteCriticalSection(&my_impl);\n#else\n        pthread_mutex_destroy(&my_impl);\n#endif\n    }\n\n    class scoped_lock : internal::no_copy {\n    private:\n        critical_section_v4 &my_crit;\n    public:\n        scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {\n            my_crit.lock();\n        }\n\n        ~scoped_lock() {\n            my_crit.unlock();\n        }\n    };\n\n    void lock() {\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) throw_exception( eid_improper_lock );\n#if _WIN32||_WIN64\n        EnterCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_lock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::lock: pthread_mutex_lock failed\");\n#endif\n        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);\n        my_tid = local_tid;\n    }\n\n    bool try_lock() {\n        bool gotlock;\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) return false;\n#if _WIN32||_WIN64\n        gotlock = TryEnterCriticalSection( &my_impl ) != 0;\n#else\n        int rval = pthread_mutex_trylock(&my_impl);\n        // valid returns are 0 (locked) and [EBUSY]\n        __TBB_ASSERT(rval == 0 || rval == EBUSY, \"critical_section::trylock: pthread_mutex_trylock failed\");\n        gotlock = rval == 0;\n#endif\n        if(gotlock)  {\n            my_tid = local_tid;\n        }\n        return gotlock;\n    }\n\n    void unlock() {\n        __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, \"thread unlocking critical_section is not thread that locked it\");\n        my_tid = tbb_thread::id();\n#if _WIN32||_WIN64\n        LeaveCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_unlock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::unlock: pthread_mutex_unlock failed\");\n#endif\n    }\n\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n}; // critical_section_v4\n} // namespace internal\ntypedef internal::critical_section_v4 critical_section;\n\n__TBB_DEFINE_PROFILING_SET_NAME(critical_section)\n} // namespace tbb\n#endif  // _TBB_CRITICAL_SECTION_H_\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/enumerable_thread_specific.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_enumerable_thread_specific_H\n#define __TBB_enumerable_thread_specific_H\n\n#include \"atomic.h\"\n#include \"concurrent_vector.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"aligned_space.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tbb_profiling.h\"\n#include <string.h>  // for memcpy\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif\n\n#define __TBB_ETS_USE_CPP11 \\\n    (__TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n     && __TBB_CPP11_DECLTYPE_PRESENT && __TBB_CPP11_LAMBDAS_PRESENT)\n\nnamespace tbb {\n\n//! enum for selecting between single key and key-per-instance versions\nenum ets_key_usage_type { ets_key_per_instance, ets_no_key };\n\nnamespace interface6 {\n\n    // Forward declaration to use in internal classes\n    template <typename T, typename Allocator, ets_key_usage_type ETS_key_type>\n    class enumerable_thread_specific;\n\n    //! @cond\n    namespace internal {\n\n        using namespace tbb::internal;\n\n        template<ets_key_usage_type ETS_key_type>\n        class ets_base: tbb::internal::no_copy {\n        protected:\n            typedef tbb_thread::id key_type;\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        public:\n#endif\n            struct slot;\n\n            struct array {\n                array* next;\n                size_t lg_size;\n                slot& at( size_t k ) {\n                    return ((slot*)(void*)(this+1))[k];\n                }\n                size_t size() const {return size_t(1)<<lg_size;}\n                size_t mask() const {return size()-1;}\n                size_t start( size_t h ) const {\n                    return h>>(8*sizeof(size_t)-lg_size);\n                }\n            };\n            struct slot {\n                key_type key;\n                void* ptr;\n                bool empty() const {return key == key_type();}\n                bool match( key_type k ) const {return key == k;}\n                bool claim( key_type k ) {\n                    // TODO: maybe claim ptr, because key_type is not guaranteed to fit into word size\n                    return atomic_compare_and_swap(key, k, key_type()) == key_type();\n                }\n            };\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        protected:\n#endif\n\n            //! Root of linked list of arrays of decreasing size.\n            /** NULL if and only if my_count==0.\n                Each array in the list is half the size of its predecessor. */\n            atomic<array*> my_root;\n            atomic<size_t> my_count;\n            virtual void* create_local() = 0;\n            virtual void* create_array(size_t _size) = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) = 0; // _size in bytes\n            array* allocate( size_t lg_size ) {\n                size_t n = size_t(1)<<lg_size;\n                array* a = static_cast<array*>(create_array( sizeof(array)+n*sizeof(slot) ));\n                a->lg_size = lg_size;\n                std::memset( a+1, 0, n*sizeof(slot) );\n                return a;\n            }\n            void free(array* a) {\n                size_t n = size_t(1)<<(a->lg_size);\n                free_array( (void *)a, size_t(sizeof(array)+n*sizeof(slot)) );\n            }\n\n            ets_base() {my_root=NULL; my_count=0;}\n            virtual ~ets_base();  // g++ complains if this is not virtual\n            void* table_lookup( bool& exists );\n            void table_clear();\n            // The following functions are not used in concurrent context,\n            // so we don't need synchronization and ITT annotations there.\n            void table_elementwise_copy( const ets_base& other,\n                                         void*(*add_element)(ets_base&, void*) ) {\n                __TBB_ASSERT(!my_root,NULL);\n                __TBB_ASSERT(!my_count,NULL);\n                if( !other.my_root ) return;\n                array* root = my_root = allocate(other.my_root->lg_size);\n                root->next = NULL;\n                my_count = other.my_count;\n                size_t mask = root->mask();\n                for( array* r=other.my_root; r; r=r->next ) {\n                    for( size_t i=0; i<r->size(); ++i ) {\n                        slot& s1 = r->at(i);\n                        if( !s1.empty() ) {\n                            for( size_t j = root->start(tbb::tbb_hash<key_type>()(s1.key)); ; j=(j+1)&mask ) {\n                                slot& s2 = root->at(j);\n                                if( s2.empty() ) {\n                                    s2.ptr = add_element(*this, s1.ptr);\n                                    s2.key = s1.key;\n                                    break;\n                                }\n                                else if( s2.match(s1.key) )\n                                    break;\n                            }\n                        }\n                    }\n                }\n            }\n            void table_swap( ets_base& other ) {\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               tbb::internal::swap<relaxed>(my_root, other.my_root);\n               tbb::internal::swap<relaxed>(my_count, other.my_count);\n            }\n        };\n\n        template<ets_key_usage_type ETS_key_type>\n        ets_base<ETS_key_type>::~ets_base() {\n            __TBB_ASSERT(!my_root, NULL);\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void ets_base<ETS_key_type>::table_clear() {\n            while( array* r = my_root ) {\n                my_root = r->next;\n                free(r);\n            }\n            my_count = 0;\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void* ets_base<ETS_key_type>::table_lookup( bool& exists ) {\n            const key_type k = tbb::this_tbb_thread::get_id();\n\n            __TBB_ASSERT(k != key_type(),NULL);\n            void* found;\n            size_t h = tbb::tbb_hash<key_type>()(k);\n            for( array* r=my_root; r; r=r->next ) {\n                call_itt_notify(acquired,r);\n                size_t mask=r->mask();\n                for(size_t i = r->start(h); ;i=(i+1)&mask) {\n                    slot& s = r->at(i);\n                    if( s.empty() ) break;\n                    if( s.match(k) ) {\n                        if( r==my_root ) {\n                            // Success at top level\n                            exists = true;\n                            return s.ptr;\n                        } else {\n                            // Success at some other level.  Need to insert at top level.\n                            exists = true;\n                            found = s.ptr;\n                            goto insert;\n                        }\n                    }\n                }\n            }\n            // Key does not yet exist.  The density of slots in the table does not exceed 0.5,\n            // for if this will occur a new table is allocated with double the current table\n            // size, which is swapped in as the new root table.  So an empty slot is guaranteed.\n            exists = false;\n            found = create_local();\n            {\n                size_t c = ++my_count;\n                array* r = my_root;\n                call_itt_notify(acquired,r);\n                if( !r || c>r->size()/2 ) {\n                    size_t s = r ? r->lg_size : 2;\n                    while( c>size_t(1)<<(s-1) ) ++s;\n                    array* a = allocate(s);\n                    for(;;) {\n                        a->next = r;\n                        call_itt_notify(releasing,a);\n                        array* new_r = my_root.compare_and_swap(a,r);\n                        if( new_r==r ) break;\n                        call_itt_notify(acquired, new_r);\n                        if( new_r->lg_size>=s ) {\n                            // Another thread inserted an equal or  bigger array, so our array is superfluous.\n                            free(a);\n                            break;\n                        }\n                        r = new_r;\n                    }\n                }\n            }\n        insert:\n        // Whether a slot has been found in an older table, or if it has been inserted at this level,\n        // it has already been accounted for in the total.  Guaranteed to be room for it, and it is\n        // not present, so search for empty slot and use it.\n            array* ir = my_root;\n            call_itt_notify(acquired, ir);\n            size_t mask = ir->mask();\n            for(size_t i = ir->start(h);;i=(i+1)&mask) {\n                slot& s = ir->at(i);\n                if( s.empty() ) {\n                    if( s.claim(k) ) {\n                        s.ptr = found;\n                        return found;\n                    }\n                }\n            }\n        }\n\n        //! Specialization that exploits native TLS\n        template <>\n        class ets_base<ets_key_per_instance>: protected ets_base<ets_no_key> {\n            typedef ets_base<ets_no_key> super;\n#if _WIN32||_WIN64\n#if __TBB_WIN8UI_SUPPORT\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = FlsAlloc(NULL); }\n            void destroy_key() { FlsFree(my_key); }\n            void set_tls(void * value) { FlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)FlsGetValue(my_key); }\n#else\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = TlsAlloc(); }\n            void destroy_key() { TlsFree(my_key); }\n            void set_tls(void * value) { TlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)TlsGetValue(my_key); }\n#endif\n#else\n            typedef pthread_key_t tls_key_t;\n            void create_key() { pthread_key_create(&my_key, NULL); }\n            void destroy_key() { pthread_key_delete(my_key); }\n            void set_tls( void * value ) const { pthread_setspecific(my_key, value); }\n            void* get_tls() const { return pthread_getspecific(my_key); }\n#endif\n            tls_key_t my_key;\n            virtual void* create_local() __TBB_override = 0;\n            virtual void* create_array(size_t _size) __TBB_override = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) __TBB_override = 0; // size in bytes\n        protected:\n            ets_base() {create_key();}\n            ~ets_base() {destroy_key();}\n            void* table_lookup( bool& exists ) {\n                void* found = get_tls();\n                if( found ) {\n                    exists=true;\n                } else {\n                    found = super::table_lookup(exists);\n                    set_tls(found);\n                }\n                return found;\n            }\n            void table_clear() {\n                destroy_key();\n                create_key();\n                super::table_clear();\n            }\n            void table_swap( ets_base& other ) {\n               using std::swap;\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               swap(my_key, other.my_key);\n               super::table_swap(other);\n            }\n        };\n\n        //! Random access iterator for traversing the thread local copies.\n        template< typename Container, typename Value >\n        class enumerable_thread_specific_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n            // Ensure that Microsoft's internal template function _Val_type works correctly.\n            : public std::iterator<std::random_access_iterator_tag,Value>\n#endif /* defined(_WIN64) && defined(_MSC_VER) */\n        {\n            //! current position in the concurrent_vector\n\n            Container *my_container;\n            typename Container::size_type my_index;\n            mutable Value *my_value;\n\n            template<typename C, typename T>\n            friend enumerable_thread_specific_iterator<C,T>\n            operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<C,T>& v );\n\n            template<typename C, typename T, typename U>\n            friend bool operator==( const enumerable_thread_specific_iterator<C,T>& i,\n                                    const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend bool operator<( const enumerable_thread_specific_iterator<C,T>& i,\n                                   const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i,\n                                        const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename U>\n            friend class enumerable_thread_specific_iterator;\n\n            public:\n\n            enumerable_thread_specific_iterator( const Container &container, typename Container::size_type index ) :\n                my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}\n\n            //! Default constructor\n            enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}\n\n            template<typename U>\n            enumerable_thread_specific_iterator( const enumerable_thread_specific_iterator<Container, U>& other ) :\n                    my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}\n\n            enumerable_thread_specific_iterator operator+( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator(*my_container, my_index + offset);\n            }\n\n            enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {\n                my_index += offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator operator-( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator( *my_container, my_index-offset );\n            }\n\n            enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {\n                my_index -= offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            Value& operator*() const {\n                Value* value = my_value;\n                if( !value ) {\n                    value = my_value = (*my_container)[my_index].value();\n                }\n                __TBB_ASSERT( value==(*my_container)[my_index].value(), \"corrupt cache\" );\n                return *value;\n            }\n\n            Value& operator[]( ptrdiff_t k ) const {\n               return (*my_container)[my_index + k].value;\n            }\n\n            Value* operator->() const {return &operator*();}\n\n            enumerable_thread_specific_iterator& operator++() {\n                ++my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator& operator--() {\n                --my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            //! Post increment\n            enumerable_thread_specific_iterator operator++(int) {\n                enumerable_thread_specific_iterator result = *this;\n                ++my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            //! Post decrement\n            enumerable_thread_specific_iterator operator--(int) {\n                enumerable_thread_specific_iterator result = *this;\n                --my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            // STL support\n            typedef ptrdiff_t difference_type;\n            typedef Value value_type;\n            typedef Value* pointer;\n            typedef Value& reference;\n            typedef std::random_access_iterator_tag iterator_category;\n        };\n\n        template<typename Container, typename T>\n        enumerable_thread_specific_iterator<Container,T>\n        operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<Container,T>& v ) {\n            return enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator==( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index==j.my_index && i.my_container == j.my_container;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator!=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index<j.my_index;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return j<i;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i<j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(j<i);\n        }\n\n        template<typename Container, typename T, typename U>\n        ptrdiff_t operator-( const enumerable_thread_specific_iterator<Container,T>& i,\n                             const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index-j.my_index;\n        }\n\n    template<typename SegmentedContainer, typename Value >\n        class segmented_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n        : public std::iterator<std::input_iterator_tag, Value>\n#endif\n        {\n            template<typename C, typename T, typename U>\n            friend bool operator==(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename T, typename U>\n            friend bool operator!=(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename U>\n            friend class segmented_iterator;\n\n            public:\n\n                segmented_iterator() {my_segcont = NULL;}\n\n                segmented_iterator( const SegmentedContainer& _segmented_container ) :\n                    my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),\n                    outer_iter(my_segcont->end()) { }\n\n                ~segmented_iterator() {}\n\n                typedef typename SegmentedContainer::iterator outer_iterator;\n                typedef typename SegmentedContainer::value_type InnerContainer;\n                typedef typename InnerContainer::iterator inner_iterator;\n\n                // STL support\n                typedef ptrdiff_t difference_type;\n                typedef Value value_type;\n                typedef typename SegmentedContainer::size_type size_type;\n                typedef Value* pointer;\n                typedef Value& reference;\n                typedef std::input_iterator_tag iterator_category;\n\n                // Copy Constructor\n                template<typename U>\n                segmented_iterator(const segmented_iterator<SegmentedContainer, U>& other) :\n                    my_segcont(other.my_segcont),\n                    outer_iter(other.outer_iter),\n                    // can we assign a default-constructed iterator to inner if we're at the end?\n                    inner_iter(other.inner_iter)\n                {}\n\n                // assignment\n                template<typename U>\n                segmented_iterator& operator=( const segmented_iterator<SegmentedContainer, U>& other) {\n                    if(this != &other) {\n                        my_segcont = other.my_segcont;\n                        outer_iter = other.outer_iter;\n                        if(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;\n                    }\n                    return *this;\n                }\n\n                // allow assignment of outer iterator to segmented iterator.  Once it is\n                // assigned, move forward until a non-empty inner container is found or\n                // the end of the outer container is reached.\n                segmented_iterator& operator=(const outer_iterator& new_outer_iter) {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    // check that this iterator points to something inside the segmented container\n                    for(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {\n                        if( !outer_iter->empty() ) {\n                            inner_iter = outer_iter->begin();\n                            break;\n                        }\n                    }\n                    return *this;\n                }\n\n                // pre-increment\n                segmented_iterator& operator++() {\n                    advance_me();\n                    return *this;\n                }\n\n                // post-increment\n                segmented_iterator operator++(int) {\n                    segmented_iterator tmp = *this;\n                    operator++();\n                    return tmp;\n                }\n\n                bool operator==(const outer_iterator& other_outer) const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    return (outer_iter == other_outer &&\n                            (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));\n                }\n\n                bool operator!=(const outer_iterator& other_outer) const {\n                    return !operator==(other_outer);\n\n                }\n\n                // (i)* RHS\n                reference operator*() const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), \"Dereferencing a pointer at end of container\");\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // should never happen\n                    return *inner_iter;\n                }\n\n                // i->\n                pointer operator->() const { return &operator*();}\n\n            private:\n                SegmentedContainer*             my_segcont;\n                outer_iterator outer_iter;\n                inner_iterator inner_iter;\n\n                void advance_me() {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); // not true if there are no inner containers\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // not true if the inner containers are all empty.\n                    ++inner_iter;\n                    while(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {\n                        inner_iter = outer_iter->begin();\n                    }\n                }\n        };    // segmented_iterator\n\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator==( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            if(i.my_segcont != j.my_segcont) return false;\n            if(i.my_segcont == NULL) return true;\n            if(i.outer_iter != j.outer_iter) return false;\n            if(i.outer_iter == i.my_segcont->end()) return true;\n            return i.inner_iter == j.inner_iter;\n        }\n\n        // !=\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator!=( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename T>\n        struct construct_by_default: tbb::internal::no_assign {\n            void construct(void*where) {new(where) T();} // C++ note: the () in T() ensure zero initialization.\n            construct_by_default( int ) {}\n        };\n\n        template<typename T>\n        struct construct_by_exemplar: tbb::internal::no_assign {\n            const T exemplar;\n            void construct(void*where) {new(where) T(exemplar);}\n            construct_by_exemplar( const T& t ) : exemplar(t) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_exemplar( T&& t ) : exemplar(std::move(t)) {}\n#endif\n        };\n\n        template<typename T, typename Finit>\n        struct construct_by_finit: tbb::internal::no_assign {\n            Finit f;\n            void construct(void* where) {new(where) T(f());}\n            construct_by_finit( const Finit& f_ ) : f(f_) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_finit( Finit&& f_ ) : f(std::move(f_)) {}\n#endif\n        };\n\n#if __TBB_ETS_USE_CPP11\n        template<typename T, typename... P>\n        struct construct_by_args: tbb::internal::no_assign {\n            internal::stored_pack<P...> pack;\n            void construct(void* where) {\n                internal::call( [where](const typename strip<P>::type&... args ){\n                   new(where) T(args...);\n                }, pack );\n            }\n            construct_by_args( P&& ... args ) : pack(std::forward<P>(args)...) {}\n        };\n#endif\n\n        // storage for initialization function pointer\n        // TODO: consider removing the template parameter T here and in callback_leaf\n        template<typename T>\n        class callback_base {\n        public:\n            // Clone *this\n            virtual callback_base* clone() const = 0;\n            // Destruct and free *this\n            virtual void destroy() = 0;\n            // Need virtual destructor to satisfy GCC compiler warning\n            virtual ~callback_base() { }\n            // Construct T at where\n            virtual void construct(void* where) = 0;\n        };\n\n        template <typename T, typename Constructor>\n        class callback_leaf: public callback_base<T>, Constructor {\n#if __TBB_ETS_USE_CPP11\n            template<typename... P> callback_leaf( P&& ... params ) : Constructor(std::forward<P>(params)...) {}\n#else\n            template<typename X> callback_leaf( const X& x ) : Constructor(x) {}\n#endif\n            // TODO: make the construction/destruction consistent (use allocator.construct/destroy)\n            typedef typename tbb::tbb_allocator<callback_leaf> my_allocator_type;\n\n            callback_base<T>* clone() const __TBB_override {\n                return make(*this);\n            }\n\n            void destroy() __TBB_override {\n                my_allocator_type().destroy(this);\n                my_allocator_type().deallocate(this,1);\n            }\n\n            void construct(void* where) __TBB_override {\n                Constructor::construct(where);\n            }\n        public:\n#if __TBB_ETS_USE_CPP11\n            template<typename... P>\n            static callback_base<T>* make( P&& ... params ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf( std::forward<P>(params)... );\n            }\n#else\n            template<typename X>\n            static callback_base<T>* make( const X& x ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf(x);\n            }\n#endif\n        };\n\n        //! Template for recording construction of objects in table\n        /** All maintenance of the space will be done explicitly on push_back,\n            and all thread local copies must be destroyed before the concurrent\n            vector is deleted.\n\n            The flag is_built is initialized to false.  When the local is\n            successfully-constructed, set the flag to true or call value_committed().\n            If the constructor throws, the flag will be false.\n        */\n        template<typename U>\n        struct ets_element {\n            tbb::aligned_space<U> my_space;\n            bool is_built;\n            ets_element() { is_built = false; }  // not currently-built\n            U* value() { return my_space.begin(); }\n            U* value_committed() { is_built = true; return my_space.begin(); }\n            ~ets_element() {\n                if(is_built) {\n                    my_space.begin()->~U();\n                    is_built = false;\n                }\n            }\n        };\n\n        // A predicate that can be used for a compile-time compatibility check of ETS instances\n        // Ideally, it should have been declared inside the ETS class, but unfortunately\n        // in that case VS2013 does not enable the variadic constructor.\n        template<typename T, typename ETS> struct is_compatible_ets { static const bool value = false; };\n        template<typename T, typename U, typename A, ets_key_usage_type C>\n        struct is_compatible_ets< T, enumerable_thread_specific<U,A,C> > { static const bool value = internal::is_same_type<T,U>::value; };\n\n#if __TBB_ETS_USE_CPP11\n        // A predicate that checks whether, for a variable 'foo' of type T, foo() is a valid expression\n        template <typename T>\n        class is_callable_no_args {\n        private:\n            typedef char yes[1];\n            typedef char no [2];\n\n            template<typename U> static yes& decide( decltype(declval<U>()())* );\n            template<typename U> static no&  decide(...);\n        public:\n            static const bool value = (sizeof(decide<T>(NULL)) == sizeof(yes));\n        };\n#endif\n\n    } // namespace internal\n    //! @endcond\n\n    //! The enumerable_thread_specific container\n    /** enumerable_thread_specific has the following properties:\n        - thread-local copies are lazily created, with default, exemplar or function initialization.\n        - thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.\n        - the contained objects need not have operator=() defined if combine is not used.\n        - enumerable_thread_specific containers may be copy-constructed or assigned.\n        - thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.\n        - outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods\n\n    @par Segmented iterator\n        When the thread-local objects are containers with input_iterators defined, a segmented iterator may\n        be used to iterate over all the elements of all thread-local copies.\n\n    @par combine and combine_each\n        - Both methods are defined for enumerable_thread_specific.\n        - combine() requires the type T have operator=() defined.\n        - neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)\n        - Both are evaluated in serial context (the methods are assumed to be non-benign.)\n\n    @ingroup containers */\n    template <typename T,\n              typename Allocator=cache_aligned_allocator<T>,\n              ets_key_usage_type ETS_key_type=ets_no_key >\n    class enumerable_thread_specific: internal::ets_base<ETS_key_type> {\n\n        template<typename U, typename A, ets_key_usage_type C> friend class enumerable_thread_specific;\n\n        typedef internal::padded< internal::ets_element<T> > padded_element;\n\n        //! A generic range, used to create range objects from the iterators\n        template<typename I>\n        class generic_range_type: public blocked_range<I> {\n        public:\n            typedef T value_type;\n            typedef T& reference;\n            typedef const T& const_reference;\n            typedef I iterator;\n            typedef ptrdiff_t difference_type;\n            generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n            template<typename U>\n            generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n            generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n        };\n\n        typedef typename Allocator::template rebind< padded_element >::other padded_allocator_type;\n        typedef tbb::concurrent_vector< padded_element, padded_allocator_type > internal_collection_type;\n\n        internal::callback_base<T> *my_construct_callback;\n\n        internal_collection_type my_locals;\n\n        // TODO: consider unifying the callback mechanism for all create_local* methods below\n        //   (likely non-compatible and requires interface version increase)\n        void* create_local() __TBB_override {\n            padded_element& lref = *my_locals.grow_by(1);\n            my_construct_callback->construct(lref.value());\n            return lref.value_committed();\n        }\n\n        static void* create_local_by_copy( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(*static_cast<T*>(p));\n            return lref.value_committed();\n        }\n\n#if __TBB_ETS_USE_CPP11\n        static void* create_local_by_move( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(std::move(*static_cast<T*>(p)));\n            return lref.value_committed();\n        }\n#endif\n\n        typedef typename Allocator::template rebind< uintptr_t >::other array_allocator_type;\n\n        // _size is in bytes\n        void* create_array(size_t _size) __TBB_override {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            return array_allocator_type().allocate(nelements);\n        }\n\n        void free_array( void* _ptr, size_t _size) __TBB_override {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);\n        }\n\n    public:\n\n        //! Basic types\n        typedef Allocator allocator_type;\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef T* pointer;\n        typedef const T* const_pointer;\n        typedef typename internal_collection_type::size_type size_type;\n        typedef typename internal_collection_type::difference_type difference_type;\n\n        // Iterator types\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, const value_type > const_iterator;\n\n        // Parallel range types\n        typedef generic_range_type< iterator > range_type;\n        typedef generic_range_type< const_iterator > const_range_type;\n\n        //! Default constructor.  Each local instance of T is default constructed.\n        enumerable_thread_specific() : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_default<T> >::make(/*dummy argument*/0)\n        ){}\n\n        //! Constructor with initializer functor.  Each local instance of T is constructed by T(finit()).\n        template <typename Finit\n#if __TBB_ETS_USE_CPP11\n                  , typename = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type\n#endif\n        >\n        explicit enumerable_thread_specific( Finit finit ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( tbb::internal::move(finit) )\n        ){}\n\n        //! Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar.\n        explicit enumerable_thread_specific( const T& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar )\n        ){}\n\n#if __TBB_ETS_USE_CPP11\n        explicit enumerable_thread_specific( T&& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( std::move(exemplar) )\n        ){}\n\n        //! Variadic constructor with initializer arguments.  Each local instance of T is constructed by T(args...)\n        template <typename P1, typename... P,\n                  typename = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value\n                                                          && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value\n                                                          && !internal::is_same_type<T, typename internal::strip<P1>::type>::value\n                                                         >::type>\n        enumerable_thread_specific( P1&& arg1, P&& ... args ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_args<T,P1,P...> >::make( std::forward<P1>(arg1), std::forward<P>(args)... )\n        ){}\n#endif\n\n        //! Destructor\n        ~enumerable_thread_specific() {\n            if(my_construct_callback) my_construct_callback->destroy();\n            // Deallocate the hash table before overridden free_array() becomes inaccessible\n            this->internal::ets_base<ets_no_key>::table_clear();\n        }\n\n        //! returns reference to local, discarding exists\n        reference local() {\n            bool exists;\n            return local(exists);\n        }\n\n        //! Returns reference to calling thread's local copy, creating one if necessary\n        reference local(bool& exists)  {\n            void* ptr = this->table_lookup(exists);\n            return *(T*)ptr;\n        }\n\n        //! Get the number of local copies\n        size_type size() const { return my_locals.size(); }\n\n        //! true if there have been no local copies created\n        bool empty() const { return my_locals.empty(); }\n\n        //! begin iterator\n        iterator begin() { return iterator( my_locals, 0 ); }\n        //! end iterator\n        iterator end() { return iterator(my_locals, my_locals.size() ); }\n\n        //! begin const iterator\n        const_iterator begin() const { return const_iterator(my_locals, 0); }\n\n        //! end const iterator\n        const_iterator end() const { return const_iterator(my_locals, my_locals.size()); }\n\n        //! Get range for parallel algorithms\n        range_type range( size_t grainsize=1 ) { return range_type( begin(), end(), grainsize ); }\n\n        //! Get const range for parallel algorithms\n        const_range_type range( size_t grainsize=1 ) const { return const_range_type( begin(), end(), grainsize ); }\n\n        //! Destroys local copies\n        void clear() {\n            my_locals.clear();\n            this->table_clear();\n            // callback is not destroyed\n        }\n\n    private:\n\n        template<typename A2, ets_key_usage_type C2>\n        void internal_copy(const enumerable_thread_specific<T, A2, C2>& other) {\n#if __TBB_ETS_USE_CPP11 && TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.\n            my_construct_callback = other.my_construct_callback->clone();\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_copy );\n        }\n\n        void internal_swap(enumerable_thread_specific& other) {\n            using std::swap;\n            __TBB_ASSERT( this!=&other, NULL );\n            swap(my_construct_callback, other.my_construct_callback);\n            // concurrent_vector::swap() preserves storage space,\n            // so addresses to the vector kept in ETS hash table remain valid.\n            swap(my_locals, other.my_locals);\n            this->internal::ets_base<ETS_key_type>::table_swap(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        template<typename A2, ets_key_usage_type C2>\n        void internal_move(enumerable_thread_specific<T, A2, C2>&& other) {\n#if TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            my_construct_callback = other.my_construct_callback;\n            other.my_construct_callback = NULL;\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_move );\n        }\n#endif\n\n    public:\n\n        enumerable_thread_specific( const enumerable_thread_specific& other )\n        : internal::ets_base<ETS_key_type>() /* prevents GCC warnings with -Wextra */\n        {\n            internal_copy(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            internal_copy(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific( enumerable_thread_specific&& other ) : my_construct_callback()\n        {\n            internal_swap(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( enumerable_thread_specific<T, Alloc, Cachetype>&& other ) : my_construct_callback()\n        {\n            internal_move(std::move(other));\n        }\n#endif\n\n        enumerable_thread_specific& operator=( const enumerable_thread_specific& other )\n        {\n            if( this != &other ) {\n                this->clear();\n                my_construct_callback->destroy();\n                internal_copy( other );\n            }\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_copy(other);\n            return *this;\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific& operator=( enumerable_thread_specific&& other )\n        {\n            if( this != &other )\n                internal_swap(other);\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( enumerable_thread_specific<T, Alloc, Cachetype>&& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_move(std::move(other));\n            return *this;\n        }\n#endif\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) {\n            if(begin() == end()) {\n                internal::ets_element<T> location;\n                my_construct_callback->construct(location.value());\n                return *location.value_committed();\n            }\n            const_iterator ci = begin();\n            T my_result = *ci;\n            while(++ci != end())\n                my_result = f_combine( my_result, *ci );\n            return my_result;\n        }\n\n        // combine_func_t takes T by value or by [const] reference, and returns nothing\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) {\n            for(iterator ci = begin(); ci != end(); ++ci) {\n                f_combine( *ci );\n            }\n        }\n\n    }; // enumerable_thread_specific\n\n    template< typename Container >\n    class flattened2d {\n\n        // This intermediate typedef is to address issues with VC7.1 compilers\n        typedef typename Container::value_type conval_type;\n\n    public:\n\n        //! Basic types\n        typedef typename conval_type::size_type size_type;\n        typedef typename conval_type::difference_type difference_type;\n        typedef typename conval_type::allocator_type allocator_type;\n        typedef typename conval_type::value_type value_type;\n        typedef typename conval_type::reference reference;\n        typedef typename conval_type::const_reference const_reference;\n        typedef typename conval_type::pointer pointer;\n        typedef typename conval_type::const_pointer const_pointer;\n\n        typedef typename internal::segmented_iterator<Container, value_type> iterator;\n        typedef typename internal::segmented_iterator<Container, const value_type> const_iterator;\n\n        flattened2d( const Container &c, typename Container::const_iterator b, typename Container::const_iterator e ) :\n            my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }\n\n        explicit flattened2d( const Container &c ) :\n            my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }\n\n        iterator begin() { return iterator(*my_container) = my_begin; }\n        iterator end() { return iterator(*my_container) = my_end; }\n        const_iterator begin() const { return const_iterator(*my_container) = my_begin; }\n        const_iterator end() const { return const_iterator(*my_container) = my_end; }\n\n        size_type size() const {\n            size_type tot_size = 0;\n            for(typename Container::const_iterator i = my_begin; i != my_end; ++i) {\n                tot_size += i->size();\n            }\n            return tot_size;\n        }\n\n    private:\n\n        Container *my_container;\n        typename Container::const_iterator my_begin;\n        typename Container::const_iterator my_end;\n\n    };\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e) {\n        return flattened2d<Container>(c, b, e);\n    }\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c) {\n        return flattened2d<Container>(c);\n    }\n\n} // interface6\n\nnamespace internal {\nusing interface6::internal::segmented_iterator;\n}\n\nusing interface6::enumerable_thread_specific;\nusing interface6::flattened2d;\nusing interface6::flatten2d;\n\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/flow_graph.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_H\n#define __TBB_flow_graph_H\n\n#include \"tbb_stddef.h\"\n#include \"atomic.h\"\n#include \"spin_mutex.h\"\n#include \"null_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"task.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_aggregator_impl.h\"\n#include \"tbb_profiling.h\"\n#include \"task_arena.h\"\n#include \"internal/_tbb_trace_impl.h\"\n\n#if __TBB_PREVIEW_ASYNC_MSG\n#include <vector>    // std::vector in internal::async_storage\n#include <memory>    // std::shared_ptr in async_msg\n#endif\n\n#if __TBB_PREVIEW_STREAMING_NODE\n// For streaming_node\n#include <array>            // std::array\n#include <unordered_map>    // std::unordered_map\n#include <type_traits>      // std::decay, std::true_type, std::false_type\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n#if TBB_DEPRECATED_FLOW_ENQUEUE\n#define FLOW_SPAWN(a) tbb::task::enqueue((a))\n#else\n#define FLOW_SPAWN(a) tbb::task::spawn((a))\n#endif\n\n// use the VC10 or gcc version of tuple if it is available.\n#if __TBB_CPP11_TUPLE_PRESENT\n    #include <tuple>\nnamespace tbb {\n    namespace flow {\n        using std::tuple;\n        using std::tuple_size;\n        using std::tuple_element;\n        using std::get;\n    }\n}\n#else\n    #include \"compat/tuple\"\n#endif\n\n#include<list>\n#include<queue>\n\n/** @file\n  \\brief The graph related classes and functions\n\n  There are some applications that best express dependencies as messages\n  passed between nodes in a graph.  These messages may contain data or\n  simply act as signals that a predecessors has completed. The graph\n  class and its associated node classes can be used to express such\n  applications.\n*/\n\nnamespace tbb {\nnamespace flow {\n\n//! An enumeration the provides the two most common concurrency levels: unlimited and serial\nenum concurrency { unlimited = 0, serial = 1 };\n\nnamespace interface10 {\n\n//! A generic null type\nstruct null_type {};\n\n//! An empty class used for messages that mean \"I'm done\"\nclass continue_msg {};\n\n//! Forward declaration section\ntemplate< typename T > class sender;\ntemplate< typename T > class receiver;\nclass continue_receiver;\ntemplate< typename T > class limiter_node;  // needed for resetting decrementer\ntemplate< typename R, typename B > class run_and_put_task;\n\nnamespace internal {\n\ntemplate<typename T, typename M> class successor_cache;\ntemplate<typename T, typename M> class broadcast_cache;\ntemplate<typename T, typename M> class round_robin_cache;\ntemplate<typename T, typename M> class predecessor_cache;\ntemplate<typename T, typename M> class reservable_predecessor_cache;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n// Holder of edges both for caches and for those nodes which do not have predecessor caches.\n// C == receiver< ... > or sender< ... >, depending.\ntemplate<typename C>\nclass edge_container {\n\npublic:\n    typedef std::list<C *, tbb::tbb_allocator<C *> > edge_list_type;\n\n    void add_edge(C &s) {\n        built_edges.push_back(&s);\n    }\n\n    void delete_edge(C &s) {\n        for (typename edge_list_type::iterator i = built_edges.begin(); i != built_edges.end(); ++i) {\n            if (*i == &s) {\n                (void)built_edges.erase(i);\n                return;  // only remove one predecessor per request\n            }\n        }\n    }\n\n    void copy_edges(edge_list_type &v) {\n        v = built_edges;\n    }\n\n    size_t edge_count() {\n        return (size_t)(built_edges.size());\n    }\n\n    void clear() {\n        built_edges.clear();\n    }\n\n    // methods remove the statement from all predecessors/successors liste in the edge\n    // container.\n    template< typename S > void sender_extract(S &s);\n    template< typename R > void receiver_extract(R &r);\n\nprivate:\n    edge_list_type built_edges;\n};  // class edge_container\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n} // namespace internal\n\n} // namespace interface10\n} // namespace flow\n} // namespace tbb\n\n//! The graph class\n#include \"internal/_flow_graph_impl.h\"\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n// enqueue left task if necessary. Returns the non-enqueued task if there is one.\nstatic inline tbb::task *combine_tasks(graph& g, tbb::task * left, tbb::task * right) {\n    // if no RHS task, don't change left.\n    if (right == NULL) return left;\n    // right != NULL\n    if (left == NULL) return right;\n    if (left == SUCCESSFULLY_ENQUEUED) return right;\n    // left contains a task\n    if (right != SUCCESSFULLY_ENQUEUED) {\n        // both are valid tasks\n        internal::spawn_in_graph_arena(g, *left);\n        return right;\n    }\n    return left;\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\n\ntemplate < typename T > class async_msg;\n\nnamespace internal {\n\ntemplate < typename T > class async_storage;\n\ntemplate< typename T, typename = void >\nstruct async_helpers {\n    typedef async_msg<T> async_type;\n    typedef T filtered_type;\n\n    static const bool is_async_type = false;\n\n    static const void* to_void_ptr(const T& t) {\n        return static_cast<const void*>(&t);\n    }\n\n    static void* to_void_ptr(T& t) {\n        return static_cast<void*>(&t);\n    }\n\n    static const T& from_void_ptr(const void* p) {\n        return *static_cast<const T*>(p);\n    }\n\n    static T& from_void_ptr(void* p) {\n        return *static_cast<T*>(p);\n    }\n\n    static task* try_put_task_wrapper_impl(receiver<T>* const this_recv, const void *p, bool is_async) {\n        if (is_async) {\n            // This (T) is NOT async and incoming 'A<X> t' IS async\n            // Get data from async_msg\n            const async_msg<filtered_type>& msg = async_helpers< async_msg<filtered_type> >::from_void_ptr(p);\n            task* const new_task = msg.my_storage->subscribe(*this_recv, this_recv->graph_reference());\n            // finalize() must be called after subscribe() because set() can be called in finalize()\n            // and 'this_recv' client must be subscribed by this moment\n            msg.finalize();\n            return new_task;\n        }\n        else {\n            // Incoming 't' is NOT async\n            return this_recv->try_put_task(from_void_ptr(p));\n        }\n    }\n};\n\ntemplate< typename T >\nstruct async_helpers< T, typename std::enable_if< std::is_base_of<async_msg<typename T::async_msg_data_type>, T>::value >::type > {\n    typedef T async_type;\n    typedef typename T::async_msg_data_type filtered_type;\n\n    static const bool is_async_type = true;\n\n    // Receiver-classes use const interfaces\n    static const void* to_void_ptr(const T& t) {\n        return static_cast<const void*>(&static_cast<const async_msg<filtered_type>&>(t));\n    }\n\n    static void* to_void_ptr(T& t) {\n        return static_cast<void*>(&static_cast<async_msg<filtered_type>&>(t));\n    }\n\n    // Sender-classes use non-const interfaces\n    static const T& from_void_ptr(const void* p) {\n        return *static_cast<const T*>(static_cast<const async_msg<filtered_type>*>(p));\n    }\n\n    static T& from_void_ptr(void* p) {\n        return *static_cast<T*>(static_cast<async_msg<filtered_type>*>(p));\n    }\n\n    // Used in receiver<T> class\n    static task* try_put_task_wrapper_impl(receiver<T>* const this_recv, const void *p, bool is_async) {\n        if (is_async) {\n            // Both are async\n            return this_recv->try_put_task(from_void_ptr(p));\n        }\n        else {\n            // This (T) is async and incoming 'X t' is NOT async\n            // Create async_msg for X\n            const filtered_type& t = async_helpers<filtered_type>::from_void_ptr(p);\n            const T msg(t);\n            return this_recv->try_put_task(msg);\n        }\n    }\n};\n\nclass untyped_receiver;\n\nclass untyped_sender {\n    template< typename, typename > friend class internal::predecessor_cache;\n    template< typename, typename > friend class internal::reservable_predecessor_cache;\npublic:\n    //! The successor type for this node\n    typedef untyped_receiver successor_type;\n\n    virtual ~untyped_sender() {}\n\n    // NOTE: Following part of PUBLIC section is copy-paste from original sender<T> class\n\n    // TODO: Prevent untyped successor registration\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Releases the reserved item\n    virtual bool try_release( ) { return false; }\n\n    //! Consumes the reserved item\n    virtual bool try_consume( ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef internal::edge_container<successor_type> built_successors_type;\n    typedef built_successors_type::edge_list_type successor_list_type;\n    virtual built_successors_type &built_successors()                   = 0;\n    virtual void    internal_add_built_successor( successor_type & )    = 0;\n    virtual void    internal_delete_built_successor( successor_type & ) = 0;\n    virtual void    copy_successors( successor_list_type &)             = 0;\n    virtual size_t  successor_count()                                   = 0;\n#endif\nprotected:\n    //! Request an item from the sender\n    template< typename X >\n    bool try_get( X &t ) {\n        return try_get_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    //! Reserves an item in the sender\n    template< typename X >\n    bool try_reserve( X &t ) {\n        return try_reserve_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    virtual bool try_get_wrapper( void* p, bool is_async ) = 0;\n    virtual bool try_reserve_wrapper( void* p, bool is_async ) = 0;\n};\n\nclass untyped_receiver  {\n    template< typename, typename > friend class run_and_put_task;\n    template< typename > friend class limiter_node;\n\n    template< typename, typename > friend class internal::broadcast_cache;\n    template< typename, typename > friend class internal::round_robin_cache;\n    template< typename, typename > friend class internal::successor_cache;\n\n#if __TBB_PREVIEW_OPENCL_NODE\n    template< typename, typename > friend class proxy_dependency_receiver;\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\npublic:\n    //! The predecessor type for this node\n    typedef untyped_sender predecessor_type;\n\n    //! Destructor\n    virtual ~untyped_receiver() {}\n\n    //! Put an item to the receiver\n    template<typename X>\n    bool try_put(const X& t) {\n        task *res = try_put_task(t);\n        if (!res) return false;\n        if (res != SUCCESSFULLY_ENQUEUED) internal::spawn_in_graph_arena(graph_reference(), *res);\n        return true;\n    }\n\n    // NOTE: Following part of PUBLIC section is copy-paste from original receiver<T> class\n\n    // TODO: Prevent untyped predecessor registration\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef built_predecessors_type::edge_list_type predecessor_list_type;\n    virtual built_predecessors_type &built_predecessors()                  = 0;\n    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;\n    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;\n    virtual void   copy_predecessors( predecessor_list_type & )            = 0;\n    virtual size_t predecessor_count()                                     = 0;\n#endif\nprotected:\n    template<typename X>\n    task *try_put_task(const X& t) {\n        return try_put_task_wrapper( internal::async_helpers<X>::to_void_ptr(t), internal::async_helpers<X>::is_async_type );\n    }\n\n    virtual task* try_put_task_wrapper( const void* p, bool is_async ) = 0;\n\n    virtual graph& graph_reference() = 0;\n\n    // NOTE: Following part of PROTECTED and PRIVATE sections is copy-paste from original receiver<T> class\n\n    //! put receiver back in initial state\n    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;\n\n    virtual bool is_continue_receiver() { return false; }\n};\n\n} // namespace internal\n\n//! Pure virtual template class that defines a sender of messages of type T\ntemplate< typename T >\nclass sender : public internal::untyped_sender {\npublic:\n    //! The output type of this sender\n    typedef T output_type;\n\n    typedef typename internal::async_helpers<T>::filtered_type filtered_type;\n\n    //! Request an item from the sender\n    virtual bool try_get( T & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( T & ) { return false; }\n\nprotected:\n    virtual bool try_get_wrapper( void* p, bool is_async ) __TBB_override {\n        // Both async OR both are NOT async\n        if ( internal::async_helpers<T>::is_async_type == is_async ) {\n            return try_get( internal::async_helpers<T>::from_void_ptr(p) );\n        }\n        // Else: this (T) is async OR incoming 't' is async\n        __TBB_ASSERT(false, \"async_msg interface does not support 'pull' protocol in try_get()\");\n        return false;\n    }\n\n    virtual bool try_reserve_wrapper( void* p, bool is_async ) __TBB_override {\n        // Both async OR both are NOT async\n        if ( internal::async_helpers<T>::is_async_type == is_async ) {\n            return try_reserve( internal::async_helpers<T>::from_void_ptr(p) );\n        }\n        // Else: this (T) is async OR incoming 't' is async\n        __TBB_ASSERT(false, \"async_msg interface does not support 'pull' protocol in try_reserve()\");\n        return false;\n    }\n};  // class sender<T>\n\n//! Pure virtual template class that defines a receiver of messages of type T\ntemplate< typename T >\nclass receiver : public internal::untyped_receiver {\n    template< typename > friend class internal::async_storage;\n    template< typename, typename > friend struct internal::async_helpers;\npublic:\n    //! The input type of this receiver\n    typedef T input_type;\n\n    typedef typename internal::async_helpers<T>::filtered_type filtered_type;\n\n    //! Put an item to the receiver\n    bool try_put( const typename internal::async_helpers<T>::filtered_type& t ) {\n        return internal::untyped_receiver::try_put(t);\n    }\n\n    bool try_put( const typename internal::async_helpers<T>::async_type& t ) {\n        return internal::untyped_receiver::try_put(t);\n    }\n\nprotected:\n    virtual task* try_put_task_wrapper( const void *p, bool is_async ) __TBB_override {\n        return internal::async_helpers<T>::try_put_task_wrapper_impl(this, p, is_async);\n    }\n\n    //! Put item to successor; return task to run the successor if possible.\n    virtual task *try_put_task(const T& t) = 0;\n\n}; // class receiver<T>\n\n#else // __TBB_PREVIEW_ASYNC_MSG\n\n//! Pure virtual template class that defines a sender of messages of type T\ntemplate< typename T >\nclass sender {\npublic:\n    //! The output type of this sender\n    typedef T output_type;\n\n    //! The successor type for this node\n    typedef receiver<T> successor_type;\n\n    virtual ~sender() {}\n\n    // NOTE: Following part of PUBLIC section is partly copy-pasted in sender<T> under #if __TBB_PREVIEW_ASYNC_MSG\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Request an item from the sender\n    virtual bool try_get( T & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( T & ) { return false; }\n\n    //! Releases the reserved item\n    virtual bool try_release( ) { return false; }\n\n    //! Consumes the reserved item\n    virtual bool try_consume( ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    virtual built_successors_type &built_successors()                   = 0;\n    virtual void    internal_add_built_successor( successor_type & )    = 0;\n    virtual void    internal_delete_built_successor( successor_type & ) = 0;\n    virtual void    copy_successors( successor_list_type &)             = 0;\n    virtual size_t  successor_count()                                   = 0;\n#endif\n};  // class sender<T>\n\n//! Pure virtual template class that defines a receiver of messages of type T\ntemplate< typename T >\nclass receiver {\npublic:\n    //! The input type of this receiver\n    typedef T input_type;\n\n    //! The predecessor type for this node\n    typedef sender<T> predecessor_type;\n\n    //! Destructor\n    virtual ~receiver() {}\n\n    //! Put an item to the receiver\n    bool try_put( const T& t ) {\n        task *res = try_put_task(t);\n        if (!res) return false;\n        if (res != SUCCESSFULLY_ENQUEUED) internal::spawn_in_graph_arena(graph_reference(), *res);\n        return true;\n    }\n\n    //! put item to successor; return task to run the successor if possible.\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template< typename X, typename Y > friend class internal::broadcast_cache;\n    template< typename X, typename Y > friend class internal::round_robin_cache;\n    virtual task *try_put_task(const T& t) = 0;\n    virtual graph& graph_reference() = 0;\npublic:\n    // NOTE: Following part of PUBLIC and PROTECTED sections is copy-pasted in receiver<T> under #if __TBB_PREVIEW_ASYNC_MSG\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef typename built_predecessors_type::edge_list_type predecessor_list_type;\n    virtual built_predecessors_type &built_predecessors()                  = 0;\n    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;\n    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;\n    virtual void   copy_predecessors( predecessor_list_type & )            = 0;\n    virtual size_t predecessor_count()                                     = 0;\n#endif\n\nprotected:\n    //! put receiver back in initial state\n    template<typename U> friend class limiter_node;\n    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;\n\n    template<typename TT, typename M> friend class internal::successor_cache;\n    virtual bool is_continue_receiver() { return false; }\n\n#if __TBB_PREVIEW_OPENCL_NODE\n    template< typename, typename > friend class proxy_dependency_receiver;\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n}; // class receiver<T>\n\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n//! Base class for receivers of completion messages\n/** These receivers automatically reset, but cannot be explicitly waited on */\nclass continue_receiver : public receiver< continue_msg > {\npublic:\n\n    //! The input type\n    typedef continue_msg input_type;\n\n    //! The predecessor type for this node\n    typedef receiver<input_type>::predecessor_type predecessor_type;\n\n    //! Constructor\n    explicit continue_receiver( int number_of_predecessors = 0 ) {\n        my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;\n        my_current_count = 0;\n    }\n\n    //! Copy constructor\n    continue_receiver( const continue_receiver& src ) : receiver<continue_msg>() {\n        my_predecessor_count = my_initial_predecessor_count = src.my_initial_predecessor_count;\n        my_current_count = 0;\n    }\n\n    //! Increments the trigger threshold\n    bool register_predecessor( predecessor_type & ) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        ++my_predecessor_count;\n        return true;\n    }\n\n    //! Decrements the trigger threshold\n    /** Does not check to see if the removal of the predecessor now makes the current count\n        exceed the new threshold.  So removing a predecessor while the graph is active can cause\n        unexpected results. */\n    bool remove_predecessor( predecessor_type & ) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        --my_predecessor_count;\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef built_predecessors_type::edge_list_type predecessor_list_type;\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    void internal_add_built_predecessor( predecessor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.add_edge( s );\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.delete_edge(s);\n    }\n\n    void copy_predecessors( predecessor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    // execute body is supposed to be too small to create a task for.\n    task *try_put_task( const input_type & ) __TBB_override {\n        {\n            spin_mutex::scoped_lock l(my_mutex);\n            if ( ++my_current_count < my_predecessor_count )\n                return SUCCESSFULLY_ENQUEUED;\n            else\n                my_current_count = 0;\n        }\n        task * res = execute();\n        return res? res : SUCCESSFULLY_ENQUEUED;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // continue_receiver must contain its own built_predecessors because it does\n    // not have a node_cache.\n    built_predecessors_type my_built_predecessors;\n#endif\n    spin_mutex my_mutex;\n    int my_predecessor_count;\n    int my_current_count;\n    int my_initial_predecessor_count;\n    // the friend declaration in the base class did not eliminate the \"protected class\"\n    // error in gcc 4.1.2\n    template<typename U> friend class limiter_node;\n\n    void reset_receiver( reset_flags f ) __TBB_override {\n        my_current_count = 0;\n        if (f & rf_clear_edges) {\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n            my_predecessor_count = my_initial_predecessor_count;\n        }\n    }\n\n    //! Does whatever should happen when the threshold is reached\n    /** This should be very fast or else spawn a task.  This is\n        called while the sender is blocked in the try_put(). */\n    virtual task * execute() = 0;\n    template<typename TT, typename M> friend class internal::successor_cache;\n    bool is_continue_receiver() __TBB_override { return true; }\n\n}; // class continue_receiver\n\n}  // interfaceX\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    K key_from_message( const T &t ) {\n        return t.key();\n    }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    using interface10::sender;\n    using interface10::receiver;\n    using interface10::continue_receiver;\n}  // flow\n}  // tbb\n\n#include \"internal/_flow_graph_trace_impl.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n#include \"internal/_flow_graph_body_impl.h\"\n#include \"internal/_flow_graph_cache_impl.h\"\n#include \"internal/_flow_graph_types_impl.h\"\n#if __TBB_PREVIEW_ASYNC_MSG\n#include \"internal/_flow_graph_async_msg_impl.h\"\n#endif\nusing namespace internal::graph_policy_namespace;\n\ntemplate <typename C, typename N>\ngraph_iterator<C,N>::graph_iterator(C *g, bool begin) : my_graph(g), current_node(NULL)\n{\n    if (begin) current_node = my_graph->my_nodes;\n    //else it is an end iterator by default\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::reference graph_iterator<C,N>::operator*() const {\n    __TBB_ASSERT(current_node, \"graph_iterator at end\");\n    return *operator->();\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->() const {\n    return current_node;\n}\n\ntemplate <typename C, typename N>\nvoid graph_iterator<C,N>::internal_forward() {\n    if (current_node) current_node = current_node->next;\n}\n\n//! Constructs a graph with isolated task_group_context\ninline graph::graph() : my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {\n    prepare_task_arena();\n    own_context = true;\n    cancelled = false;\n    caught_exception = false;\n    my_context = new task_group_context(tbb::internal::FLOW_TASKS);\n    my_root_task = (new (task::allocate_root(*my_context)) empty_task);\n    my_root_task->set_ref_count(1);\n    tbb::internal::fgt_graph(this);\n    my_is_active = true;\n}\n\ninline graph::graph(task_group_context& use_this_context) :\n    my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL), my_task_arena(NULL) {\n    prepare_task_arena();\n    own_context = false;\n    my_root_task = (new (task::allocate_root(*my_context)) empty_task);\n    my_root_task->set_ref_count(1);\n    tbb::internal::fgt_graph(this);\n    my_is_active = true;\n}\n\ninline graph::~graph() {\n    wait_for_all();\n    my_root_task->set_ref_count(0);\n    tbb::task::destroy(*my_root_task);\n    if (own_context) delete my_context;\n    delete my_task_arena;\n}\n\ninline void graph::reserve_wait() {\n    if (my_root_task) {\n        my_root_task->increment_ref_count();\n        tbb::internal::fgt_reserve_wait(this);\n    }\n}\n\ninline void graph::release_wait() {\n    if (my_root_task) {\n        tbb::internal::fgt_release_wait(this);\n        my_root_task->decrement_ref_count();\n    }\n}\n\ninline void graph::register_node(graph_node *n) {\n    n->next = NULL;\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        n->prev = my_nodes_last;\n        if (my_nodes_last) my_nodes_last->next = n;\n        my_nodes_last = n;\n        if (!my_nodes) my_nodes = n;\n    }\n}\n\ninline void graph::remove_node(graph_node *n) {\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        __TBB_ASSERT(my_nodes && my_nodes_last, \"graph::remove_node: Error: no registered nodes\");\n        if (n->prev) n->prev->next = n->next;\n        if (n->next) n->next->prev = n->prev;\n        if (my_nodes_last == n) my_nodes_last = n->prev;\n        if (my_nodes == n) my_nodes = n->next;\n    }\n    n->prev = n->next = NULL;\n}\n\ninline void graph::reset( reset_flags f ) {\n    // reset context\n    internal::deactivate_graph(*this);\n\n    if(my_context) my_context->reset();\n    cancelled = false;\n    caught_exception = false;\n    // reset all the nodes comprising the graph\n    for(iterator ii = begin(); ii != end(); ++ii) {\n        graph_node *my_p = &(*ii);\n        my_p->reset_node(f);\n    }\n    // Reattach the arena. Might be useful to run the graph in a particular task_arena\n    // while not limiting graph lifetime to a single task_arena::execute() call.\n    prepare_task_arena( /*reinit=*/true );\n    internal::activate_graph(*this);\n    // now spawn the tasks necessary to start the graph\n    for(task_list_type::iterator rti = my_reset_task_list.begin(); rti != my_reset_task_list.end(); ++rti) {\n        my_task_arena->execute(graph::spawn_functor(*(*rti)));\n    }\n    my_reset_task_list.clear();\n}\n\ninline graph::iterator graph::begin() { return iterator(this, true); }\n\ninline graph::iterator graph::end() { return iterator(this, false); }\n\ninline graph::const_iterator graph::begin() const { return const_iterator(this, true); }\n\ninline graph::const_iterator graph::end() const { return const_iterator(this, false); }\n\ninline graph::const_iterator graph::cbegin() const { return const_iterator(this, true); }\n\ninline graph::const_iterator graph::cend() const { return const_iterator(this, false); }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\ninline void graph::set_name(const char *name) {\n    tbb::internal::fgt_graph_desc(this, name);\n}\n#endif\n\ninline graph_node::graph_node(graph& g) : my_graph(g) {\n    my_graph.register_node(this);\n}\n\ninline graph_node::~graph_node() {\n    my_graph.remove_node(this);\n}\n\n#include \"internal/_flow_graph_node_impl.h\"\n\n//! An executable node that acts as a source, i.e. it has no predecessors\ntemplate < typename Output >\nclass source_node : public graph_node, public sender< Output > {\npublic:\n    //! The type of the output message, which is complete\n    typedef Output output_type;\n\n    //! The type of successors of this node\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //Source node has no input type\n    typedef null_type input_type;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    //! Constructor for a node with a successor\n    template< typename Body >\n    source_node( graph &g, Body body, bool is_active = true )\n        : graph_node(g), my_active(is_active), init_my_active(is_active),\n        my_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_init_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    source_node( const source_node& src ) :\n        graph_node(src.my_graph), sender<Output>(),\n        my_active(src.init_my_active),\n        init_my_active(src.init_my_active), my_body( src.my_init_body->clone() ), my_init_body(src.my_init_body->clone() ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! The destructor\n    ~source_node() { delete my_body; delete my_init_body; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Add a new successor to this node\n    bool register_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.register_successor(r);\n        if ( my_active )\n            spawn_put();\n        return true;\n    }\n\n    //! Removes a successor from this node\n    bool remove_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor( successor_type &r) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor( successor_type &r) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    size_t successor_count() __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_successors.copy_successors(v);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Request an item from the node\n    bool try_get( output_type &v ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved )\n            return false;\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_has_cached_item = false;\n            return true;\n        }\n        // we've been asked to provide an item, but we have none.  enqueue a task to\n        // provide one.\n        spawn_put();\n        return false;\n    }\n\n    //! Reserves an item.\n    bool try_reserve( output_type &v ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    //! Release a reserved item.\n    /** true = item has been released and so remains in sender, dest must request or reserve future items */\n    bool try_release( ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"releasing non-existent reservation\" );\n        my_reserved = false;\n        if(!my_successors.empty())\n            spawn_put();\n        return true;\n    }\n\n    //! Consumes a reserved item\n    bool try_consume( ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"consuming non-existent reservation\" );\n        my_reserved = false;\n        my_has_cached_item = false;\n        if ( !my_successors.empty() ) {\n            spawn_put();\n        }\n        return true;\n    }\n\n    //! Activates a node that was created in the inactive state\n    void activate() {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_active = true;\n        if (!my_successors.empty())\n            spawn_put();\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        internal::source_body<output_type> &body_ref = *this->my_body;\n        return dynamic_cast< internal::source_body_leaf<output_type, Body> & >(body_ref).get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_successors.built_successors().sender_extract(*this);   // removes \"my_owner\" == this from each successor\n        my_active = init_my_active;\n        my_reserved = false;\n        if(my_has_cached_item) my_has_cached_item = false;\n    }\n#endif\n\nprotected:\n\n    //! resets the source_node to its initial state\n    void reset_node( reset_flags f) __TBB_override {\n        my_active = init_my_active;\n        my_reserved =false;\n        if(my_has_cached_item) {\n            my_has_cached_item = false;\n        }\n        if(f & rf_clear_edges) my_successors.clear();\n        if(f & rf_reset_bodies) {\n            internal::source_body<output_type> *tmp = my_init_body->clone();\n            delete my_body;\n            my_body = tmp;\n        }\n        if(my_active)\n            internal::add_task_to_graph_reset_list(this->my_graph, create_put_task());\n    }\n\nprivate:\n    spin_mutex my_mutex;\n    bool my_active;\n    bool init_my_active;\n    internal::source_body<output_type> *my_body;\n    internal::source_body<output_type> *my_init_body;\n    internal::broadcast_cache< output_type > my_successors;\n    bool my_reserved;\n    bool my_has_cached_item;\n    output_type my_cached_item;\n\n    // used by apply_body_bypass, can invoke body of node.\n    bool try_reserve_apply_body(output_type &v) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n        if ( !my_has_cached_item ) {\n            tbb::internal::fgt_begin_body( my_body );\n            bool r = (*my_body)(my_cached_item);\n            tbb::internal::fgt_end_body( my_body );\n            if (r) {\n                my_has_cached_item = true;\n            }\n        }\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    // when resetting, and if the source_node was created with my_active == true, then\n    // when we reset the node we must store a task to run the node, and spawn it only\n    // after the reset is complete and is_active() is again true.  This is why we don't\n    // test for is_active() here.\n    task* create_put_task() {\n        return ( new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal:: source_task_bypass < source_node< output_type > >( *this ) );\n    }\n\n    //! Spawns a task that applies the body\n    void spawn_put( ) {\n        if(internal::is_graph_active(this->my_graph)) {\n            internal::spawn_in_graph_arena(this->my_graph, *create_put_task());\n        }\n    }\n\n    friend class internal::source_task_bypass< source_node< output_type > >;\n    //! Applies the body.  Returning SUCCESSFULLY_ENQUEUED okay; forward_task_bypass will handle it.\n    task * apply_body_bypass( ) {\n        output_type v;\n        if ( !try_reserve_apply_body(v) )\n            return NULL;\n\n        task *last_task = my_successors.try_put_task(v);\n        if ( last_task )\n            try_consume();\n        else\n            try_release();\n        return last_task;\n    }\n};  // class source_node\n\n//! Implements a function node that supports Input -> Output\ntemplate < typename Input, typename Output = continue_msg, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass function_node : public graph_node, public internal::function_input<Input,Output,Policy,Allocator>, public internal::function_output<Output> {\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef internal::function_input<input_type,output_type,Policy,Allocator> input_impl_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\n    typedef internal::function_output<output_type> fOutput_type;\n    typedef typename input_impl_type::predecessor_type predecessor_type;\n    typedef typename fOutput_type::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename input_impl_type::predecessor_list_type predecessor_list_type;\n    typedef typename fOutput_type::successor_list_type successor_list_type;\n#endif\n    using input_impl_type::my_predecessors;\n\n    //! Constructor\n    // input_queue_type is allocated here, but destroyed in the function_input_base.\n    // TODO: pass the graph_buffer_policy to the function_input_base so it can all\n    // be done in one place.  This would be an interface-breaking change.\n    template< typename Body >\n    function_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), input_impl_type(g, concurrency, body) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    function_node( const function_node& src ) :\n        graph_node(src.my_graph),\n        input_impl_type(src),\n        fOutput_type() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using input_impl_type::try_put_task;\n\n    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }\n\n    void reset_node(reset_flags f) __TBB_override {\n        input_impl_type::reset_function_input(f);\n        // TODO: use clear() instead.\n        if(f & rf_clear_edges) {\n            successors().clear();\n            my_predecessors.clear();\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"function_node successors not empty\");\n        __TBB_ASSERT(this->my_predecessors.empty(), \"function_node predecessors not empty\");\n    }\n\n};  // class function_node\n\n//! implements a function node that supports Input -> (set of outputs)\n// Output is a tuple of output types.\ntemplate < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass multifunction_node :\n    public graph_node,\n    public internal::multifunction_input\n    <\n        Input,\n        typename internal::wrap_tuple_elements<\n            tbb::flow::tuple_size<Output>::value,  // #elements in tuple\n            internal::multifunction_output,  // wrap this around each element\n            Output // the tuple providing the types\n        >::type,\n        Policy,\n        Allocator\n    > {\nprotected:\n    static const int N = tbb::flow::tuple_size<Output>::value;\npublic:\n    typedef Input input_type;\n    typedef null_type output_type;\n    typedef typename internal::wrap_tuple_elements<N,internal::multifunction_output, Output>::type output_ports_type;\n    typedef internal::multifunction_input<input_type, output_ports_type, Policy, Allocator> input_impl_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\nprivate:\n    typedef typename internal::multifunction_input<input_type, output_ports_type, Policy, Allocator> base_type;\n    using input_impl_type::my_predecessors;\npublic:\n    template<typename Body>\n    multifunction_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), base_type(g,concurrency, body) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    multifunction_node( const multifunction_node &other) :\n        graph_node(other.my_graph), base_type(other) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) __TBB_override {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        base_type::extract();\n    }\n#endif\n    // all the guts are in multifunction_input...\nprotected:\n    void reset_node(reset_flags f) __TBB_override { base_type::reset(f); }\n};  // multifunction_node\n\n//! split_node: accepts a tuple as input, forwards each element of the tuple to its\n//  successors.  The node has unlimited concurrency, so it does not reject inputs.\ntemplate<typename TupleType, typename Allocator=cache_aligned_allocator<TupleType> >\nclass split_node : public graph_node, public receiver<TupleType> {\n    static const int N = tbb::flow::tuple_size<TupleType>::value;\n    typedef receiver<TupleType> base_type;\npublic:\n    typedef TupleType input_type;\n    typedef Allocator allocator_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename base_type::predecessor_type predecessor_type;\n    typedef typename base_type::predecessor_list_type predecessor_list_type;\n    typedef internal::predecessor_cache<input_type, null_mutex > predecessor_cache_type;\n    typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;\n#endif\n\n    typedef typename internal::wrap_tuple_elements<\n            N,  // #elements in tuple\n            internal::multifunction_output,  // wrap this around each element\n            TupleType // the tuple providing the types\n        >::type  output_ports_type;\n\n    explicit split_node(graph &g) : graph_node(g)\n    {\n        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,\n            static_cast<receiver<input_type> *>(this), this->output_ports());\n    }\n    split_node( const split_node & other) : graph_node(other.my_graph), base_type(other)\n    {\n        tbb::internal::fgt_multioutput_node<N>(tbb::internal::FLOW_SPLIT_NODE, &this->my_graph,\n            static_cast<receiver<input_type> *>(this), this->output_ports());\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n    output_ports_type &output_ports() { return my_output_ports; }\n\nprotected:\n    task *try_put_task(const TupleType& t) __TBB_override {\n        // Sending split messages in parallel is not justified, as overheads would prevail.\n        // Also, we do not have successors here. So we just tell the task returned here is successful.\n        return internal::emit_element<N>::emit_this(this->my_graph, t, output_ports());\n    }\n    void reset_node(reset_flags f) __TBB_override {\n        if (f & rf_clear_edges)\n            internal::clear_element<N>::clear_this(my_output_ports);\n\n        __TBB_ASSERT(!(f & rf_clear_edges) || internal::clear_element<N>::this_empty(my_output_ports), \"split_node reset failed\");\n    }\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\nprivate: //! split_node doesn't use this \"predecessors\" functionality; so, we have \"dummies\" here;\n    void extract() __TBB_override {}\n\n    //! Adds to list of predecessors added by make_edge\n    void internal_add_built_predecessor(predecessor_type&) __TBB_override {}\n\n    //! removes from to list of predecessors (used by remove_edge)\n    void internal_delete_built_predecessor(predecessor_type&) __TBB_override {}\n\n    size_t predecessor_count() __TBB_override { return 0; }\n\n    void copy_predecessors(predecessor_list_type&) __TBB_override {}\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_predessors; }\n\n    //! dummy member\n    built_predecessors_type my_predessors;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprivate:\n    output_ports_type my_output_ports;\n};\n\n//! Implements an executable node that supports continue_msg -> Output\ntemplate <typename Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n        , typename Policy = internal::Policy<void>\n#endif\n         >\nclass continue_node : public graph_node, public internal::continue_input<Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                             , Policy\n#endif\n                             >,\n                      public internal::function_output<Output> {\npublic:\n    typedef continue_msg input_type;\n    typedef Output output_type;\n    typedef internal::continue_input<Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                                    , Policy\n#endif\n                                    > input_impl_type;\n\n    typedef internal::function_output<output_type> fOutput_type;\n    typedef typename input_impl_type::predecessor_type predecessor_type;\n    typedef typename fOutput_type::successor_type successor_type;\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, Body body ) :\n        graph_node(g), input_impl_type( g, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, int number_of_predecessors, Body body ) :\n        graph_node(g), input_impl_type( g, number_of_predecessors, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    continue_node( const continue_node& src ) :\n        graph_node(src.my_graph), input_impl_type(src),\n        internal::function_output<Output>() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        input_impl_type::my_built_predecessors.receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using input_impl_type::try_put_task;\n    internal::broadcast_cache<output_type> &successors () __TBB_override { return fOutput_type::my_successors; }\n\n    void reset_node(reset_flags f) __TBB_override {\n        input_impl_type::reset_receiver(f);\n        if(f & rf_clear_edges)successors().clear();\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"continue_node not reset\");\n    }\n};  // continue_node\n\ntemplate< typename T >\nclass overwrite_node : public graph_node, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    explicit overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor; doesn't take anything from src; default won't work\n    overwrite_node( const overwrite_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(), my_buffer_is_valid(false)\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    ~overwrite_node() {}\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n   bool register_successor( successor_type &s ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        if (my_buffer_is_valid && internal::is_graph_active( my_graph )) {\n            // We have a valid value that must be forwarded immediately.\n            bool ret = s.try_put( my_buffer );\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n            if ( ret ) {\n                // We add the successor that accepted our put\n                my_successors.register_successor( s );\n            } else {\n                // In case of reservation a race between the moment of reservation and register_successor can appear,\n                // because failed reserve does not mean that register_successor is not ready to put a message immediately.\n                // We have some sort of infinite loop: reserving node tries to set pull state for the edge,\n                // but overwrite_node tries to return push state back. That is why we have to break this loop with task creation.\n                task *rtask = new ( task::allocate_additional_child_of( *( my_graph.root_task() ) ) )\n                    register_predecessor_task( *this, s );\n                internal::spawn_in_graph_arena( my_graph, *rtask );\n            }\n#else\n            if ( ret || !s.register_predecessor( *this  ) ) {\n                // We add the successor: it accepted our put or it rejected it but won't let us become a predecessor\n                my_successors.register_successor( s );\n            } else {\n                // We don't add the successor: it rejected our put and we became its predecessor instead\n                return false;\n            }\n#endif\n        } else {\n            // No valid value yet, just add as successor\n            my_successors.register_successor( s );\n        }\n        return true;\n    }\n\n    bool remove_successor( successor_type &s ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.remove_successor(s);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n    built_successors_type   &built_successors()   __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor( successor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_add_built_successor(s);\n    }\n\n    void internal_delete_built_successor( successor_type &s) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_delete_built_successor(s);\n    }\n\n    size_t successor_count() __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.copy_successors(v);\n    }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.add_edge(p);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.delete_edge(p);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_built_predecessors.edge_count();\n    }\n\n    void copy_predecessors( predecessor_list_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.copy_edges(v);\n    }\n\n    void extract() __TBB_override {\n        my_buffer_is_valid = false;\n        built_successors().sender_extract(*this);\n        built_predecessors().receiver_extract(*this);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    bool try_get( input_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        if ( my_buffer_is_valid ) {\n            v = my_buffer;\n            return true;\n        }\n        return false;\n    }\n\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n    //! Reserves an item\n    bool try_reserve( T &v ) __TBB_override {\n        return try_get(v);\n    }\n\n    //! Releases the reserved item\n    bool try_release() __TBB_override { return true; }\n\n    //! Consumes the reserved item\n    bool try_consume() __TBB_override { return true; }\n#endif\n\n    bool is_valid() {\n       spin_mutex::scoped_lock l( my_mutex );\n       return my_buffer_is_valid;\n    }\n\n    void clear() {\n       spin_mutex::scoped_lock l( my_mutex );\n       my_buffer_is_valid = false;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    task * try_put_task( const input_type &v ) __TBB_override {\n        spin_mutex::scoped_lock l( my_mutex );\n        return try_put_task_impl(v);\n    }\n\n    task * try_put_task_impl(const input_type &v) {\n        my_buffer = v;\n        my_buffer_is_valid = true;\n        task * rtask = my_successors.try_put_task(v);\n        if (!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n        return rtask;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n#if TBB_PREVIEW_RESERVABLE_OVERWRITE_NODE\n    //! Breaks an infinite loop between the node reservation and register_successor call\n    struct register_predecessor_task : public task {\n        register_predecessor_task(sender<T>& owner, receiver<T>& succ) :\n            o(owner), s(succ) {};\n\n        tbb::task* execute() __TBB_override {\n            if (!s.register_predecessor(o)) {\n                o.register_successor(s);\n            }\n            return NULL;\n        }\n\n        sender<T>& o;\n        receiver<T>& s;\n    };\n#endif\n\n    spin_mutex my_mutex;\n    internal::broadcast_cache< input_type, null_rw_mutex > my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n    input_type my_buffer;\n    bool my_buffer_is_valid;\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n\n    void reset_node( reset_flags f) __TBB_override {\n        my_buffer_is_valid = false;\n       if (f&rf_clear_edges) {\n           my_successors.clear();\n       }\n    }\n};  // overwrite_node\n\ntemplate< typename T >\nclass write_once_node : public overwrite_node<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef overwrite_node<T> base_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit write_once_node(graph& g) : base_type(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor: call base class copy constructor\n    write_once_node( const write_once_node& src ) : base_type(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    task *try_put_task( const T &v ) __TBB_override {\n        spin_mutex::scoped_lock l( this->my_mutex );\n        return this->my_buffer_is_valid ? NULL : this->try_put_task_impl(v);\n    }\n};\n\n//! Forwards messages of type T to all successors\ntemplate <typename T>\nclass broadcast_node : public graph_node, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprivate:\n    internal::broadcast_cache<input_type> my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n    spin_mutex pred_mutex;  // serialize accesses on edge_container\n#endif\npublic:\n\n    explicit broadcast_node(graph& g) : graph_node(g) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    // Copy constructor\n    broadcast_node( const broadcast_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>()\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Adds a successor\n    bool register_successor( successor_type &r ) __TBB_override {\n        my_successors.register_successor( r );\n        return true;\n    }\n\n    //! Removes s as a successor\n    bool remove_successor( successor_type &r ) __TBB_override {\n        my_successors.remove_successor( r );\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    void internal_add_built_successor(successor_type &r) __TBB_override {\n        my_successors.internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor(successor_type &r) __TBB_override {\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    size_t successor_count() __TBB_override {\n        return my_successors.successor_count();\n    }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        my_successors.copy_successors(v);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.add_edge(p);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.delete_edge(p);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n    void copy_predecessors(predecessor_list_type &v) __TBB_override {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    void extract() __TBB_override {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! build a task to run the successor if possible.  Default is old behavior.\n    task *try_put_task(const T& t) __TBB_override {\n        task *new_task = my_successors.try_put_task(t);\n        if (!new_task) new_task = SUCCESSFULLY_ENQUEUED;\n        return new_task;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override {}\n\n    void reset_node(reset_flags f) __TBB_override {\n        if (f&rf_clear_edges) {\n           my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           my_built_predecessors.clear();\n#endif\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || my_successors.empty(), \"Error resetting broadcast_node\");\n    }\n};  // broadcast_node\n\n//! Forwards messages in arbitrary order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass buffer_node : public graph_node, public internal::reservable_item_buffer<T, A>, public receiver<T>, public sender<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n    typedef buffer_node<T, A> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprotected:\n    typedef size_t size_type;\n    internal::round_robin_cache< T, null_rw_mutex > my_successors;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n\n    friend class internal::forward_task_bypass< buffer_node< T, A > >;\n\n    enum op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        , add_blt_succ, del_blt_succ,\n        add_blt_pred, del_blt_pred,\n        blt_succ_cnt, blt_pred_cnt,\n        blt_succ_cpy, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n    };\n\n    // implements the aggregator_operation concept\n    class buffer_operation : public internal::aggregated_operation< buffer_operation > {\n    public:\n        char type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        task * ltask;\n        union {\n            input_type *elem;\n            successor_type *r;\n            predecessor_type *p;\n            size_t cnt_val;\n            successor_list_type *svec;\n            predecessor_list_type *pvec;\n        };\n#else\n        T *elem;\n        task * ltask;\n        successor_type *r;\n#endif\n        buffer_operation(const T& e, op_type t) : type(char(t))\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                                                  , ltask(NULL), elem(const_cast<T*>(&e))\n#else\n                                                  , elem(const_cast<T*>(&e)) , ltask(NULL)\n#endif\n        {}\n        buffer_operation(op_type t) : type(char(t)),  ltask(NULL) {}\n    };\n\n    bool forwarder_busy;\n    typedef internal::aggregating_functor<class_type, buffer_operation> handler_type;\n    friend class internal::aggregating_functor<class_type, buffer_operation>;\n    internal::aggregator< handler_type, buffer_operation> my_aggregator;\n\n    virtual void handle_operations(buffer_operation *op_list) {\n        handle_operations_impl(op_list, this);\n    }\n\n    template<typename derived_type>\n    void handle_operations_impl(buffer_operation *op_list, derived_type* derived) {\n        __TBB_ASSERT(static_cast<class_type*>(derived) == this, \"'this' is not a base class for derived\");\n\n        buffer_operation *tmp = NULL;\n        bool try_forwarding = false;\n        while (op_list) {\n            tmp = op_list;\n            op_list = op_list->next;\n            switch (tmp->type) {\n            case reg_succ: internal_reg_succ(tmp); try_forwarding = true; break;\n            case rem_succ: internal_rem_succ(tmp); break;\n            case req_item: internal_pop(tmp); break;\n            case res_item: internal_reserve(tmp); break;\n            case rel_res:  internal_release(tmp); try_forwarding = true; break;\n            case con_res:  internal_consume(tmp); try_forwarding = true; break;\n            case put_item: try_forwarding = internal_push(tmp); break;\n            case try_fwd_task: internal_forward_task(tmp); break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            // edge recording\n            case add_blt_succ: internal_add_built_succ(tmp); break;\n            case del_blt_succ: internal_del_built_succ(tmp); break;\n            case add_blt_pred: internal_add_built_pred(tmp); break;\n            case del_blt_pred: internal_del_built_pred(tmp); break;\n            case blt_succ_cnt: internal_succ_cnt(tmp); break;\n            case blt_pred_cnt: internal_pred_cnt(tmp); break;\n            case blt_succ_cpy: internal_copy_succs(tmp); break;\n            case blt_pred_cpy: internal_copy_preds(tmp); break;\n#endif\n            }\n        }\n\n        derived->order();\n\n        if (try_forwarding && !forwarder_busy) {\n            if(internal::is_graph_active(this->my_graph)) {\n                forwarder_busy = true;\n                task *new_task = new(task::allocate_additional_child_of(*(this->my_graph.root_task()))) internal::\n                        forward_task_bypass\n                        < buffer_node<input_type, A> >(*this);\n                // tmp should point to the last item handled by the aggregator.  This is the operation\n                // the handling thread enqueued.  So modifying that record will be okay.\n                // workaround for icc bug\n                tbb::task *z = tmp->ltask;\n                graph &g = this->my_graph;\n                tmp->ltask = combine_tasks(g, z, new_task);  // in case the op generated a task\n            }\n        }\n    }  // handle_operations\n\n    inline task *grab_forwarding_task( buffer_operation &op_data) {\n        return op_data.ltask;\n    }\n\n    inline bool enqueue_forwarding_task(buffer_operation &op_data) {\n        task *ft = grab_forwarding_task(op_data);\n        if(ft) {\n            internal::spawn_in_graph_arena(graph_reference(), *ft);\n            return true;\n        }\n        return false;\n    }\n\n    //! This is executed by an enqueued task, the \"forwarder\"\n    virtual task *forward_task() {\n        buffer_operation op_data(try_fwd_task);\n        task *last_task = NULL;\n        do {\n            op_data.status = internal::WAIT;\n            op_data.ltask = NULL;\n            my_aggregator.execute(&op_data);\n\n            // workaround for icc bug\n            tbb::task *xtask = op_data.ltask;\n            graph& g = this->my_graph;\n            last_task = combine_tasks(g, last_task, xtask);\n        } while (op_data.status ==internal::SUCCEEDED);\n        return last_task;\n    }\n\n    //! Register successor\n    virtual void internal_reg_succ(buffer_operation *op) {\n        my_successors.register_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    //! Remove successor\n    virtual void internal_rem_succ(buffer_operation *op) {\n        my_successors.remove_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n    virtual void internal_add_built_succ(buffer_operation *op) {\n        my_successors.internal_add_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_del_built_succ(buffer_operation *op) {\n        my_successors.internal_delete_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n    virtual void internal_add_built_pred(buffer_operation *op) {\n        my_built_predecessors.add_edge(*(op->p));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_del_built_pred(buffer_operation *op) {\n        my_built_predecessors.delete_edge(*(op->p));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_succ_cnt(buffer_operation *op) {\n        op->cnt_val = my_successors.successor_count();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_pred_cnt(buffer_operation *op) {\n        op->cnt_val = my_built_predecessors.edge_count();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_copy_succs(buffer_operation *op) {\n        my_successors.copy_successors(*(op->svec));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_copy_preds(buffer_operation *op) {\n        my_built_predecessors.copy_edges(*(op->pvec));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprivate:\n    void order() {}\n\n    bool is_item_valid() {\n        return this->my_item_valid(this->my_tail - 1);\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task *new_task = my_successors.try_put_task(this->back());\n        if (new_task) {\n            // workaround for icc bug\n            graph& g = this->my_graph;\n            last_task = combine_tasks(g, last_task, new_task);\n            this->destroy_back();\n        }\n    }\n\nprotected:\n    //! Tries to forward valid items to successors\n    virtual void internal_forward_task(buffer_operation *op) {\n        internal_forward_task_impl(op, this);\n    }\n\n    template<typename derived_type>\n    void internal_forward_task_impl(buffer_operation *op, derived_type* derived) {\n        __TBB_ASSERT(static_cast<class_type*>(derived) == this, \"'this' is not a base class for derived\");\n\n        if (this->my_reserved || !derived->is_item_valid()) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            this->forwarder_busy = false;\n            return;\n        }\n        // Try forwarding, giving each successor a chance\n        task * last_task = NULL;\n        size_type counter = my_successors.size();\n        for (; counter > 0 && derived->is_item_valid(); --counter)\n            derived->try_put_and_add_task(last_task);\n\n        op->ltask = last_task;  // return task\n        if (last_task && !counter) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            forwarder_busy = false;\n        }\n    }\n\n    virtual bool internal_push(buffer_operation *op) {\n        this->push_back(*(op->elem));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        return true;\n    }\n\n    virtual void internal_pop(buffer_operation *op) {\n        if(this->pop_back(*(op->elem))) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n    }\n\n    virtual void internal_reserve(buffer_operation *op) {\n        if(this->reserve_front(*(op->elem))) {\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n    }\n\n    virtual void internal_consume(buffer_operation *op) {\n        this->consume_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\n    virtual void internal_release(buffer_operation *op) {\n        this->release_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\npublic:\n    //! Constructor\n    explicit buffer_node( graph &g ) : graph_node(g), internal::reservable_item_buffer<T>(),\n        forwarder_busy(false) {\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    buffer_node( const buffer_node& src ) : graph_node(src.my_graph),\n        internal::reservable_item_buffer<T>(), receiver<T>(), sender<T>() {\n        forwarder_busy = false;\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //\n    // message sender implementation\n    //\n\n    //! Adds a new successor.\n    /** Adds successor r to the list of successors; may forward tasks.  */\n    bool register_successor( successor_type &r ) __TBB_override {\n        buffer_operation op_data(reg_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void internal_add_built_successor( successor_type &r) __TBB_override {\n        buffer_operation op_data(add_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_delete_built_successor( successor_type &r) __TBB_override {\n        buffer_operation op_data(del_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_add_built_predecessor( predecessor_type &p) __TBB_override {\n        buffer_operation op_data(add_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    void internal_delete_built_predecessor( predecessor_type &p) __TBB_override {\n        buffer_operation op_data(del_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    size_t predecessor_count() __TBB_override {\n        buffer_operation op_data(blt_pred_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    size_t successor_count() __TBB_override {\n        buffer_operation op_data(blt_succ_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    void copy_predecessors( predecessor_list_type &v ) __TBB_override {\n        buffer_operation op_data(blt_pred_cpy);\n        op_data.pvec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n    void copy_successors( successor_list_type &v ) __TBB_override {\n        buffer_operation op_data(blt_succ_cpy);\n        op_data.svec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n#endif\n\n    //! Removes a successor.\n    /** Removes successor r from the list of successors.\n        It also calls r.remove_predecessor(*this) to remove this node as a predecessor. */\n    bool remove_successor( successor_type &r ) __TBB_override {\n        r.remove_predecessor(*this);\n        buffer_operation op_data(rem_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        // even though this operation does not cause a forward, if we are the handler, and\n        // a forward is scheduled, we may be the first to reach this point after the aggregator,\n        // and so should check for the task.\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Request an item from the buffer_node\n    /**  true = v contains the returned item<BR>\n         false = no item has been returned */\n    bool try_get( T &v ) __TBB_override {\n        buffer_operation op_data(req_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==internal::SUCCEEDED);\n    }\n\n    //! Reserves an item.\n    /**  false = no item can be reserved<BR>\n         true = an item is reserved */\n    bool try_reserve( T &v ) __TBB_override {\n        buffer_operation op_data(res_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==internal::SUCCEEDED);\n    }\n\n    //! Release a reserved item.\n    /**  true = item has been released and so remains in sender */\n    bool try_release() __TBB_override {\n        buffer_operation op_data(rel_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Consumes a reserved item.\n    /** true = item is removed from sender and reservation removed */\n    bool try_consume() __TBB_override {\n        buffer_operation op_data(con_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! receive an item, return a task *if possible\n    task *try_put_task(const T &t) __TBB_override {\n        buffer_operation op_data(t, put_item);\n        my_aggregator.execute(&op_data);\n        task *ft = grab_forwarding_task(op_data);\n        // sequencer_nodes can return failure (if an item has been previously inserted)\n        // We have to spawn the returned task if our own operation fails.\n\n        if(ft && op_data.status ==internal::FAILED) {\n            // we haven't succeeded queueing the item, but for some reason the\n            // call returned a task (if another request resulted in a successful\n            // forward this could happen.)  Queue the task and reset the pointer.\n            internal::spawn_in_graph_arena(graph_reference(), *ft); ft = NULL;\n        }\n        else if(!ft && op_data.status ==internal::SUCCEEDED) {\n            ft = SUCCESSFULLY_ENQUEUED;\n        }\n        return ft;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override { }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\npublic:\n    void extract() __TBB_override {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    void reset_node( reset_flags f) __TBB_override {\n        internal::reservable_item_buffer<T, A>::reset();\n        // TODO: just clear structures\n        if (f&rf_clear_edges) {\n            my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n        }\n        forwarder_busy = false;\n    }\n};  // buffer_node\n\n//! Forwards messages in FIFO order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass queue_node : public buffer_node<T, A> {\nprotected:\n    typedef buffer_node<T, A> base_type;\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::buffer_operation queue_operation;\n    typedef queue_node class_type;\n\nprivate:\n    template<typename, typename> friend class buffer_node;\n\n    bool is_item_valid() {\n        return this->my_item_valid(this->my_head);\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task *new_task = this->my_successors.try_put_task(this->front());\n        if (new_task) {\n            // workaround for icc bug\n            graph& graph_ref = this->graph_reference();\n            last_task = combine_tasks(graph_ref, last_task, new_task);\n            this->destroy_front();\n        }\n    }\n\nprotected:\n    void internal_forward_task(queue_operation *op) __TBB_override {\n        this->internal_forward_task_impl(op, this);\n    }\n\n    void internal_pop(queue_operation *op) __TBB_override {\n        if ( this->my_reserved || !this->my_item_valid(this->my_head)){\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n        else {\n            this->pop_front(*(op->elem));\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n    }\n    void internal_reserve(queue_operation *op) __TBB_override {\n        if (this->my_reserved || !this->my_item_valid(this->my_head)) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n        }\n        else {\n            this->reserve_front(*(op->elem));\n            __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        }\n    }\n    void internal_consume(queue_operation *op) __TBB_override {\n        this->consume_front();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n    }\n\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit queue_node( graph &g ) : base_type(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    queue_node( const queue_node& src) : base_type(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    void reset_node( reset_flags f) __TBB_override {\n        base_type::reset_node(f);\n    }\n};  // queue_node\n\n//! Forwards messages in sequence order\ntemplate< typename T, typename A=cache_aligned_allocator<T> >\nclass sequencer_node : public queue_node<T, A> {\n    internal::function_body< T, size_t > *my_sequencer;\n    // my_sequencer should be a benign function and must be callable\n    // from a parallel context.  Does this mean it needn't be reset?\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    template< typename Sequencer >\n    sequencer_node( graph &g, const Sequencer& s ) : queue_node<T, A>(g),\n        my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    sequencer_node( const sequencer_node& src ) : queue_node<T, A>(src),\n        my_sequencer( src.my_sequencer->clone() ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Destructor\n    ~sequencer_node() { delete my_sequencer; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::buffer_operation sequencer_operation;\n\nprivate:\n    bool internal_push(sequencer_operation *op) __TBB_override {\n        size_type tag = (*my_sequencer)(*(op->elem));\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n        if (tag < this->my_head) {\n            // have already emitted a message with this tag\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return false;\n        }\n#endif\n        // cannot modify this->my_tail now; the buffer would be inconsistent.\n        size_t new_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;\n\n        if (this->size(new_tail) > this->capacity()) {\n            this->grow_my_array(this->size(new_tail));\n        }\n        this->my_tail = new_tail;\n\n        const internal::op_stat res = this->place_item(tag, *(op->elem)) ? internal::SUCCEEDED : internal::FAILED;\n        __TBB_store_with_release(op->status, res);\n        return res ==internal::SUCCEEDED;\n    }\n};  // sequencer_node\n\n//! Forwards messages in priority order\ntemplate< typename T, typename Compare = std::less<T>, typename A=cache_aligned_allocator<T> >\nclass priority_queue_node : public buffer_node<T, A> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef buffer_node<T,A> base_type;\n    typedef priority_queue_node class_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n\n    //! Constructor\n    explicit priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    priority_queue_node( const priority_queue_node &src ) : buffer_node<T, A>(src), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n\n    void reset_node( reset_flags f) __TBB_override {\n        mark = 0;\n        base_type::reset_node(f);\n    }\n\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::item_type item_type;\n    typedef typename buffer_node<T, A>::buffer_operation prio_operation;\n\n    //! Tries to forward valid items to successors\n    void internal_forward_task(prio_operation *op) __TBB_override {\n        this->internal_forward_task_impl(op, this);\n    }\n\n    void handle_operations(prio_operation *op_list) __TBB_override {\n        this->handle_operations_impl(op_list, this);\n    }\n\n    bool internal_push(prio_operation *op) __TBB_override {\n        prio_push(*(op->elem));\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        return true;\n    }\n\n    void internal_pop(prio_operation *op) __TBB_override {\n        // if empty or already reserved, don't pop\n        if ( this->my_reserved == true || this->my_tail == 0 ) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return;\n        }\n\n        *(op->elem) = prio();\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_pop();\n\n    }\n\n    // pops the highest-priority item, saves copy\n    void internal_reserve(prio_operation *op) __TBB_override {\n        if (this->my_reserved == true || this->my_tail == 0) {\n            __TBB_store_with_release(op->status, internal::FAILED);\n            return;\n        }\n        this->my_reserved = true;\n        *(op->elem) = prio();\n        reserved_item = *(op->elem);\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_pop();\n    }\n\n    void internal_consume(prio_operation *op) __TBB_override {\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\n\n    void internal_release(prio_operation *op) __TBB_override {\n        __TBB_store_with_release(op->status, internal::SUCCEEDED);\n        prio_push(reserved_item);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\n\nprivate:\n    template<typename, typename> friend class buffer_node;\n\n    void order() {\n        if (mark < this->my_tail) heapify();\n        __TBB_ASSERT(mark == this->my_tail, \"mark unequal after heapify\");\n    }\n\n    bool is_item_valid() {\n        return this->my_tail > 0;\n    }\n\n    void try_put_and_add_task(task*& last_task) {\n        task * new_task = this->my_successors.try_put_task(this->prio());\n        if (new_task) {\n            // workaround for icc bug\n            graph& graph_ref = this->graph_reference();\n            last_task = combine_tasks(graph_ref, last_task, new_task);\n            prio_pop();\n        }\n    }\n\nprivate:\n    Compare compare;\n    size_type mark;\n\n    input_type reserved_item;\n\n    // in case a reheap has not been done after a push, check if the mark item is higher than the 0'th item\n    bool prio_use_tail() {\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds before test\");\n        return mark < this->my_tail && compare(this->get_my_item(0), this->get_my_item(this->my_tail - 1));\n    }\n\n    // prio_push: checks that the item will fit, expand array if necessary, put at end\n    void prio_push(const T &src) {\n        if ( this->my_tail >= this->my_array_size )\n            this->grow_my_array( this->my_tail + 1 );\n        (void) this->place_item(this->my_tail, src);\n        ++(this->my_tail);\n        __TBB_ASSERT(mark < this->my_tail, \"mark outside bounds after push\");\n    }\n\n    // prio_pop: deletes highest priority item from the array, and if it is item\n    // 0, move last item to 0 and reheap.  If end of array, just destroy and decrement tail\n    // and mark.  Assumes the array has already been tested for emptiness; no failure.\n    void prio_pop()  {\n        if (prio_use_tail()) {\n            // there are newly pushed elements; last one higher than top\n            // copy the data\n            this->destroy_item(this->my_tail-1);\n            --(this->my_tail);\n            __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n            return;\n        }\n        this->destroy_item(0);\n        if(this->my_tail > 1) {\n            // push the last element down heap\n            __TBB_ASSERT(this->my_item_valid(this->my_tail - 1), NULL);\n            this->move_item(0,this->my_tail - 1);\n        }\n        --(this->my_tail);\n        if(mark > this->my_tail) --mark;\n        if (this->my_tail > 1) // don't reheap for heap of size 1\n            reheap();\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n    }\n\n    const T& prio() {\n        return this->get_my_item(prio_use_tail() ? this->my_tail-1 : 0);\n    }\n\n    // turn array into heap\n    void heapify() {\n        if(this->my_tail == 0) {\n            mark = 0;\n            return;\n        }\n        if (!mark) mark = 1;\n        for (; mark<this->my_tail; ++mark) { // for each unheaped element\n            size_type cur_pos = mark;\n            input_type to_place;\n            this->fetch_item(mark,to_place);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(this->get_my_item(parent), to_place))\n                    break;\n                this->move_item(cur_pos, parent);\n                cur_pos = parent;\n            } while( cur_pos );\n            (void) this->place_item(cur_pos, to_place);\n        }\n    }\n\n    // otherwise heapified array with new root element; rearrange to heap\n    void reheap() {\n        size_type cur_pos=0, child=1;\n        while (child < mark) {\n            size_type target = child;\n            if (child+1<mark &&\n                compare(this->get_my_item(child),\n                        this->get_my_item(child+1)))\n                ++target;\n            // target now has the higher priority child\n            if (compare(this->get_my_item(target),\n                        this->get_my_item(cur_pos)))\n                break;\n            // swap\n            this->swap_items(cur_pos, target);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n    }\n};  // priority_queue_node\n\n//! Forwards messages only if the threshold has not been reached\n/** This node forwards items until its threshold is reached.\n    It contains no buffering.  If the downstream node rejects, the\n    message is dropped. */\ntemplate< typename T >\nclass limiter_node : public graph_node, public receiver< T >, public sender< T > {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef typename receiver<input_type>::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n    //TODO: There is a lack of predefined types for its controlling \"decrementer\" port. It should be fixed later.\n\nprivate:\n    size_t my_threshold;\n    size_t my_count; //number of successful puts\n    size_t my_tries; //number of active put attempts\n    internal::reservable_predecessor_cache< T, spin_mutex > my_predecessors;\n    spin_mutex my_mutex;\n    internal::broadcast_cache< T > my_successors;\n    int init_decrement_predecessors;\n\n    friend class internal::forward_task_bypass< limiter_node<T> >;\n\n    // Let decrementer call decrement_counter()\n    friend class internal::decrementer< limiter_node<T> >;\n\n    bool check_conditions() {  // always called under lock\n        return ( my_count + my_tries < my_threshold && !my_predecessors.empty() && !my_successors.empty() );\n    }\n\n    // only returns a valid task pointer or NULL, never SUCCESSFULLY_ENQUEUED\n    task *forward_task() {\n        input_type v;\n        task *rval = NULL;\n        bool reserved = false;\n            {\n                spin_mutex::scoped_lock lock(my_mutex);\n                if ( check_conditions() )\n                    ++my_tries;\n                else\n                    return NULL;\n            }\n\n        //SUCCESS\n        // if we can reserve and can put, we consume the reservation\n        // we increment the count and decrement the tries\n        if ( (my_predecessors.try_reserve(v)) == true ){\n            reserved=true;\n            if ( (rval = my_successors.try_put_task(v)) != NULL ){\n                {\n                    spin_mutex::scoped_lock lock(my_mutex);\n                    ++my_count;\n                    --my_tries;\n                    my_predecessors.try_consume();\n                    if ( check_conditions() ) {\n                        if ( internal::is_graph_active(this->my_graph) ) {\n                            task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                                internal::forward_task_bypass< limiter_node<T> >( *this );\n                            internal::spawn_in_graph_arena(graph_reference(), *rtask);\n                        }\n                    }\n                }\n                return rval;\n            }\n        }\n        //FAILURE\n        //if we can't reserve, we decrement the tries\n        //if we can reserve but can't put, we decrement the tries and release the reservation\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if (reserved) my_predecessors.try_release();\n            if ( check_conditions() ) {\n                if ( internal::is_graph_active(this->my_graph) ) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass< limiter_node<T> >( *this );\n                    __TBB_ASSERT(!rval, \"Have two tasks to handle\");\n                    return rtask;\n                }\n            }\n            return rval;\n        }\n    }\n\n    void forward() {\n        __TBB_ASSERT(false, \"Should never be called\");\n        return;\n    }\n\n    task * decrement_counter() {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if(my_count) --my_count;\n        }\n        return forward_task();\n    }\n\npublic:\n    //! The internal receiver< continue_msg > that decrements the count\n    internal::decrementer< limiter_node<T> > decrement;\n\n    //! Constructor\n    limiter_node(graph &g, size_t threshold, int num_decrement_predecessors=0) :\n        graph_node(g), my_threshold(threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(num_decrement_predecessors),\n        decrement(num_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    limiter_node( const limiter_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(),\n        my_threshold(src.my_threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(src.init_decrement_predecessors),\n        decrement(src.init_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Replace the current successor with this new successor\n    bool register_successor( successor_type &r ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        bool was_empty = my_successors.empty();\n        my_successors.register_successor(r);\n        //spawn a forward task if this is the only successor\n        if ( was_empty && !my_predecessors.empty() && my_count + my_tries < my_threshold ) {\n            if ( internal::is_graph_active(this->my_graph) ) {\n                task* task = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                            internal::forward_task_bypass < limiter_node<T> >( *this );\n                internal::spawn_in_graph_arena(graph_reference(), *task);\n            }\n        }\n        return true;\n    }\n\n    //! Removes a successor from this node\n    /** r.remove_predecessor(*this) is also called. */\n    bool remove_successor( successor_type &r ) __TBB_override {\n        r.remove_predecessor(*this);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n    built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }\n\n    void internal_add_built_successor(successor_type &src) __TBB_override {\n        my_successors.internal_add_built_successor(src);\n    }\n\n    void internal_delete_built_successor(successor_type &src) __TBB_override {\n        my_successors.internal_delete_built_successor(src);\n    }\n\n    size_t successor_count() __TBB_override { return my_successors.successor_count(); }\n\n    void copy_successors(successor_list_type &v) __TBB_override {\n        my_successors.copy_successors(v);\n    }\n\n    void internal_add_built_predecessor(predecessor_type &src) __TBB_override {\n        my_predecessors.internal_add_built_predecessor(src);\n    }\n\n    void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {\n        my_predecessors.internal_delete_built_predecessor(src);\n    }\n\n    size_t predecessor_count() __TBB_override { return my_predecessors.predecessor_count(); }\n\n    void copy_predecessors(predecessor_list_type &v) __TBB_override {\n        my_predecessors.copy_predecessors(v);\n    }\n\n    void extract() __TBB_override {\n        my_count = 0;\n        my_successors.built_successors().sender_extract(*this);\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        decrement.built_predecessors().receiver_extract(decrement);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Adds src to the list of cached predecessors.\n    bool register_predecessor( predecessor_type &src ) __TBB_override {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_predecessors.add( src );\n        if ( my_count + my_tries < my_threshold && !my_successors.empty() && internal::is_graph_active(this->my_graph) ) {\n            task* task = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass < limiter_node<T> >( *this );\n            internal::spawn_in_graph_arena(graph_reference(), *task);\n        }\n        return true;\n    }\n\n    //! Removes src from the list of cached predecessors.\n    bool remove_predecessor( predecessor_type &src ) __TBB_override {\n        my_predecessors.remove( src );\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! Puts an item to this receiver\n    task *try_put_task( const T &t ) __TBB_override {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if ( my_count + my_tries >= my_threshold )\n                return NULL;\n            else\n                ++my_tries;\n        }\n\n        task * rtask = my_successors.try_put_task(t);\n\n        if ( !rtask ) {  // try_put_task failed.\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if (check_conditions() && internal::is_graph_active(this->my_graph)) {\n                rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                    internal::forward_task_bypass< limiter_node<T> >( *this );\n            }\n        }\n        else {\n            spin_mutex::scoped_lock lock(my_mutex);\n            ++my_count;\n            --my_tries;\n             }\n        return rtask;\n    }\n\n    graph& graph_reference() __TBB_override {\n        return my_graph;\n    }\n\n    void reset_receiver(reset_flags /*f*/) __TBB_override {\n        __TBB_ASSERT(false,NULL);  // should never be called\n    }\n\n    void reset_node( reset_flags f) __TBB_override {\n        my_count = 0;\n        if(f & rf_clear_edges) {\n            my_predecessors.clear();\n            my_successors.clear();\n        }\n        else\n        {\n            my_predecessors.reset( );\n        }\n        decrement.reset_receiver(f);\n    }\n};  // limiter_node\n\n#include \"internal/_flow_graph_join_impl.h\"\n\nusing internal::reserving_port;\nusing internal::queueing_port;\nusing internal::key_matching_port;\nusing internal::input_port;\nusing internal::tag_value;\n\ntemplate<typename OutputTuple, typename JP=queueing> class join_node;\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,reserving>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    explicit join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,queueing>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, queueing_port, OutputTuple, queueing> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    explicit join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// template for key_matching join_node\n// tag_matching join_node is a specialization of key_matching, and is source-compatible.\ntemplate<typename OutputTuple, typename K, typename KHash>\nclass join_node<OutputTuple, key_matching<K, KHash> > : public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value,\n      key_matching_port, OutputTuple, key_matching<K,KHash> > {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, key_matching_port, OutputTuple, key_matching<K,KHash> > unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    join_node(graph &g) : unfolded_type(g) {}\n#endif  /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    template<typename __TBB_B0, typename __TBB_B1>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1) : unfolded_type(g, b0, b1) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2) : unfolded_type(g, b0, b1, b2) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3) : unfolded_type(g, b0, b1, b2, b3) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4) :\n            unfolded_type(g, b0, b1, b2, b3, b4) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8, typename __TBB_B9>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// indexer node\n#include \"internal/_flow_graph_indexer_impl.h\"\n\n// TODO: Implement interface with variadic template or tuple\ntemplate<typename T0, typename T1=null_type, typename T2=null_type, typename T3=null_type,\n                      typename T4=null_type, typename T5=null_type, typename T6=null_type,\n                      typename T7=null_type, typename T8=null_type, typename T9=null_type> class indexer_node;\n\n//indexer node specializations\ntemplate<typename T0>\nclass indexer_node<T0> : public internal::unfolded_indexer_node<tuple<T0> > {\nprivate:\n    static const int N = 1;\npublic:\n    typedef tuple<T0> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1>\nclass indexer_node<T0, T1> : public internal::unfolded_indexer_node<tuple<T0, T1> > {\nprivate:\n    static const int N = 2;\npublic:\n    typedef tuple<T0, T1> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2>\nclass indexer_node<T0, T1, T2> : public internal::unfolded_indexer_node<tuple<T0, T1, T2> > {\nprivate:\n    static const int N = 3;\npublic:\n    typedef tuple<T0, T1, T2> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n        void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3>\nclass indexer_node<T0, T1, T2, T3> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3> > {\nprivate:\n    static const int N = 4;\npublic:\n    typedef tuple<T0, T1, T2, T3> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4>\nclass indexer_node<T0, T1, T2, T3, T4> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4> > {\nprivate:\n    static const int N = 5;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\n#if __TBB_VARIADIC_MAX >= 6\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>\nclass indexer_node<T0, T1, T2, T3, T4, T5> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5> > {\nprivate:\n    static const int N = 6;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 6\n\n#if __TBB_VARIADIC_MAX >= 7\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6> > {\nprivate:\n    static const int N = 7;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 7\n\n#if __TBB_VARIADIC_MAX >= 8\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7> > {\nprivate:\n    static const int N = 8;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 8\n\n#if __TBB_VARIADIC_MAX >= 9\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> > {\nprivate:\n    static const int N = 9;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 9\n\n#if __TBB_VARIADIC_MAX >= 10\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8, typename T9>\nclass indexer_node/*default*/ : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> > {\nprivate:\n    static const int N = 10;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 10\n\n#if __TBB_PREVIEW_ASYNC_MSG\ninline void internal_make_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {\n#else\ntemplate< typename T >\ninline void internal_make_edge( sender<T> &p, receiver<T> &s ) {\n#endif\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    s.internal_add_built_predecessor(p);\n    p.internal_add_built_successor(s);\n#endif\n    p.register_successor( s );\n    tbb::internal::fgt_make_edge( &p, &s );\n}\n\n//! Makes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void make_edge( sender<T> &p, receiver<T> &s ) {\n    internal_make_edge( p, s );\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\ntemplate< typename TS, typename TR,\n    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value\n                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>\ninline void make_edge( TS &p, TR &s ) {\n    internal_make_edge( p, s );\n}\n\ntemplate< typename T >\ninline void make_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {\n    internal_make_edge( p, s );\n}\n\ntemplate< typename T >\ninline void make_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {\n    internal_make_edge( p, s );\n}\n\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Makes an edge from port 0 of a multi-output predecessor to port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void make_edge( T& output, V& input) {\n    make_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Makes an edge from port 0 of a multi-output predecessor to a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void make_edge( T& output, receiver<R>& input) {\n     make_edge(get<0>(output.output_ports()), input);\n}\n\n//Makes an edge from a sender to port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void make_edge( sender<S>& output, V& input) {\n     make_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n#if __TBB_PREVIEW_ASYNC_MSG\ninline void internal_remove_edge( internal::untyped_sender &p, internal::untyped_receiver &s ) {\n#else\ntemplate< typename T >\ninline void internal_remove_edge( sender<T> &p, receiver<T> &s ) {\n#endif\n    p.remove_successor( s );\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // TODO: should we try to remove p from the predecessor list of s, in case the edge is reversed?\n    p.internal_delete_built_successor(s);\n    s.internal_delete_built_predecessor(p);\n#endif\n    tbb::internal::fgt_remove_edge( &p, &s );\n}\n\n//! Removes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void remove_edge( sender<T> &p, receiver<T> &s ) {\n    internal_remove_edge( p, s );\n}\n\n#if __TBB_PREVIEW_ASYNC_MSG\ntemplate< typename TS, typename TR,\n    typename = typename tbb::internal::enable_if<tbb::internal::is_same_type<TS, internal::untyped_sender>::value\n                                              || tbb::internal::is_same_type<TR, internal::untyped_receiver>::value>::type>\ninline void remove_edge( TS &p, TR &s ) {\n    internal_remove_edge( p, s );\n}\n\ntemplate< typename T >\ninline void remove_edge( sender<T> &p, receiver<typename T::async_msg_data_type> &s ) {\n    internal_remove_edge( p, s );\n}\n\ntemplate< typename T >\ninline void remove_edge( sender<typename T::async_msg_data_type> &p, receiver<T> &s ) {\n    internal_remove_edge( p, s );\n}\n#endif // __TBB_PREVIEW_ASYNC_MSG\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Removes an edge between port 0 of a multi-output predecessor and port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void remove_edge( T& output, V& input) {\n    remove_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Removes an edge between port 0 of a multi-output predecessor and a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void remove_edge( T& output, receiver<R>& input) {\n     remove_edge(get<0>(output.output_ports()), input);\n}\n//Removes an edge between a sender and port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void remove_edge( sender<S>& output, V& input) {\n     remove_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\ntemplate<typename C >\ntemplate< typename S >\nvoid internal::edge_container<C>::sender_extract( S &s ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(s, **i);\n    }\n}\n\ntemplate<typename C >\ntemplate< typename R >\nvoid internal::edge_container<C>::receiver_extract( R &r ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(**i, r);\n    }\n}\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n//! Returns a copy of the body from a function or continue node\ntemplate< typename Body, typename Node >\nBody copy_body( Node &n ) {\n    return n.template copy_function_object<Body>();\n}\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n//composite_node\ntemplate< typename InputTuple, typename OutputTuple > class composite_node;\n\ntemplate< typename... InputTypes, typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<OutputTypes...> > : public graph_node{\n\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<input_ports_type> my_input_ports;\n    std::unique_ptr<output_ports_type> my_output_ports;\n\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name ) : graph_node(g), my_type_name(type_name) {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_COMPOSITE_NODE, this, &this->my_graph );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#endif\n    composite_node( graph &g ) : graph_node(g) {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_COMPOSITE_NODE, this, &this->my_graph );\n    }\n\n   template<typename T1, typename T2>\n   void set_external_ports(T1&& input_ports_tuple, T2&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n       my_input_ports = tbb::internal::make_unique<input_ports_type>(std::forward<T1>(input_ports_tuple));\n       my_output_ports = tbb::internal::make_unique<output_ports_type>(std::forward<T2>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_alias_helper<T1, NUM_INPUTS>::alias_port( this, input_ports_tuple);\n      tbb::internal::fgt_internal_output_alias_helper<T2, NUM_OUTPUTS>::alias_port( this, output_ports_tuple);\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) { }\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type& input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n    output_ports_type& output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n};  // class composite_node\n\n//composite_node with only input ports\ntemplate< typename... InputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<> > : public graph_node {\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<input_ports_type> my_input_ports;\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name) {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& input_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n\n       my_input_ports = tbb::internal::make_unique<input_ports_type>(std::forward<T>(input_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_alias_helper<T, NUM_INPUTS>::alias_port( this, std::forward<T>(input_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes( const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type& input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n//composite_nodes with only output_ports\ntemplate<typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<>, tbb::flow::tuple<OutputTypes...> > : public graph_node {\npublic:\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    std::unique_ptr<output_ports_type> my_output_ports;\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    void reset_node(reset_flags) __TBB_override {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name) {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n\n       my_output_ports = tbb::internal::make_unique<output_ports_type>(std::forward<T>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_output_alias_helper<T, NUM_OUTPUTS>::alias_port( this, std::forward<T>(output_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template<typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template<typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    output_ports_type& output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract() __TBB_override {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\nnamespace internal {\n\ntemplate<typename Gateway>\nclass async_body_base: tbb::internal::no_assign {\npublic:\n    typedef Gateway gateway_type;\n\n    async_body_base(gateway_type *gateway): my_gateway(gateway) { }\n    void set_gateway(gateway_type *gateway) {\n        my_gateway = gateway;\n    }\n\nprotected:\n    gateway_type *my_gateway;\n};\n\ntemplate<typename Input, typename Ports, typename Gateway, typename Body>\nclass async_body: public async_body_base<Gateway> {\npublic:\n    typedef async_body_base<Gateway> base_type;\n    typedef Gateway gateway_type;\n\n    async_body(const Body &body, gateway_type *gateway)\n        : base_type(gateway), my_body(body) { }\n\n    void operator()( const Input &v, Ports & ) {\n        my_body(v, *this->my_gateway);\n    }\n\n    Body get_body() { return my_body; }\n\nprivate:\n    Body my_body;\n};\n\n}\n\n//! Implements async node\ntemplate < typename Input, typename Output,\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n           typename Policy = queueing_lightweight,\n#else\n           typename Policy = queueing,\n#endif\n           typename Allocator=cache_aligned_allocator<Input> >\nclass async_node : public multifunction_node< Input, tuple< Output >, Policy, Allocator >, public sender< Output > {\n    typedef multifunction_node< Input, tuple< Output >, Policy, Allocator > base_type;\n    typedef typename internal::multifunction_input<Input, typename base_type::output_ports_type, Policy, Allocator> mfn_input_type;\n\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef receiver<input_type> receiver_type;\n    typedef typename receiver_type::predecessor_type predecessor_type;\n    typedef typename sender<output_type>::successor_type successor_type;\n    typedef receiver_gateway<output_type> gateway_type;\n    typedef internal::async_body_base<gateway_type> async_body_base_type;\n    typedef typename base_type::output_ports_type output_ports_type;\n\nprivate:\n    struct try_put_functor {\n        typedef internal::multifunction_output<Output> output_port_type;\n        output_port_type *port;\n        const Output *value;\n        bool result;\n        try_put_functor(output_port_type &p, const Output &v) : port(&p), value(&v), result(false) { }\n        void operator()() {\n            result = port->try_put(*value);\n        }\n    };\n\n    class receiver_gateway_impl: public receiver_gateway<Output> {\n    public:\n        receiver_gateway_impl(async_node* node): my_node(node) {}\n        void reserve_wait() __TBB_override {\n            tbb::internal::fgt_async_reserve(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);\n            my_node->my_graph.reserve_wait();\n        }\n\n        void release_wait() __TBB_override {\n            my_node->my_graph.release_wait();\n            tbb::internal::fgt_async_commit(static_cast<typename async_node::receiver_type *>(my_node), &my_node->my_graph);\n        }\n\n        //! Implements gateway_type::try_put for an external activity to submit a message to FG\n        bool try_put(const Output &i) __TBB_override {\n            return my_node->try_put_impl(i);\n        }\n\n    private:\n        async_node* my_node;\n    } my_gateway;\n\n    //The substitute of 'this' for member construction, to prevent compiler warnings\n    async_node* self() { return this; }\n\n    //! Implements gateway_type::try_put for an external activity to submit a message to FG\n    bool try_put_impl(const Output &i) {\n        internal::multifunction_output<Output> &port_0 = internal::output_port<0>(*this);\n        tbb::internal::fgt_async_try_put_begin(this, &port_0);\n        try_put_functor tpf(port_0, i);\n        internal::execute_in_graph_arena(this->my_graph, tpf);\n        tbb::internal::fgt_async_try_put_end(this, &port_0);\n        return tpf.result;\n    }\n\npublic:\n    template<typename Body>\n    async_node( graph &g, size_t concurrency, Body body ) :\n        base_type( g, concurrency, internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body>(body, &my_gateway) ), my_gateway(self()) {\n        tbb::internal::fgt_multioutput_node_with_body<1>( tbb::internal::FLOW_ASYNC_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    async_node( const async_node &other ) : base_type(other), sender<Output>(), my_gateway(self()) {\n        static_cast<async_body_base_type*>(this->my_body->get_body_ptr())->set_gateway(&my_gateway);\n        static_cast<async_body_base_type*>(this->my_init_body->get_body_ptr())->set_gateway(&my_gateway);\n\n        tbb::internal::fgt_multioutput_node_with_body<1>( tbb::internal::FLOW_ASYNC_NODE,\n                &this->my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    gateway_type& gateway() {\n        return my_gateway;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) __TBB_override {\n            tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n    // Define sender< Output >\n\n    //! Add a new successor to this node\n    bool register_successor( successor_type &r ) __TBB_override {\n        return internal::output_port<0>(*this).register_successor(r);\n    }\n\n    //! Removes a successor from this node\n    bool remove_successor( successor_type &r ) __TBB_override {\n        return internal::output_port<0>(*this).remove_successor(r);\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        typedef internal::multifunction_body<input_type, typename base_type::output_ports_type> mfn_body_type;\n        typedef internal::async_body<Input, typename base_type::output_ports_type, gateway_type, Body> async_body_type;\n        mfn_body_type &body_ref = *this->my_body;\n        async_body_type ab = *static_cast<async_body_type*>(dynamic_cast< internal::multifunction_body_leaf<input_type, typename base_type::output_ports_type, async_body_type> & >(body_ref).get_body_ptr());\n        return ab.get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    built_successors_type &built_successors() __TBB_override {\n        return internal::output_port<0>(*this).built_successors();\n    }\n\n    void internal_add_built_successor( successor_type &r ) __TBB_override {\n        internal::output_port<0>(*this).internal_add_built_successor(r);\n    }\n\n    void internal_delete_built_successor( successor_type &r ) __TBB_override {\n        internal::output_port<0>(*this).internal_delete_built_successor(r);\n    }\n\n    void copy_successors( successor_list_type &l ) __TBB_override {\n        internal::output_port<0>(*this).copy_successors(l);\n    }\n\n    size_t  successor_count() __TBB_override {\n        return internal::output_port<0>(*this).successor_count();\n    }\n#endif\n\nprotected:\n\n    void reset_node( reset_flags f) __TBB_override {\n       base_type::reset_node(f);\n    }\n};\n\n#if __TBB_PREVIEW_STREAMING_NODE\n#include \"internal/_flow_graph_streaming_node.h\"\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n} // interfaceX\n\n    using interface10::reset_flags;\n    using interface10::rf_reset_protocol;\n    using interface10::rf_reset_bodies;\n    using interface10::rf_clear_edges;\n\n    using interface10::graph;\n    using interface10::graph_node;\n    using interface10::continue_msg;\n\n    using interface10::source_node;\n    using interface10::function_node;\n    using interface10::multifunction_node;\n    using interface10::split_node;\n    using interface10::internal::output_port;\n    using interface10::indexer_node;\n    using interface10::internal::tagged_msg;\n    using interface10::internal::cast_to;\n    using interface10::internal::is_a;\n    using interface10::continue_node;\n    using interface10::overwrite_node;\n    using interface10::write_once_node;\n    using interface10::broadcast_node;\n    using interface10::buffer_node;\n    using interface10::queue_node;\n    using interface10::sequencer_node;\n    using interface10::priority_queue_node;\n    using interface10::limiter_node;\n    using namespace interface10::internal::graph_policy_namespace;\n    using interface10::join_node;\n    using interface10::input_port;\n    using interface10::copy_body;\n    using interface10::make_edge;\n    using interface10::remove_edge;\n    using interface10::internal::tag_value;\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n    using interface10::composite_node;\n#endif\n    using interface10::async_node;\n#if __TBB_PREVIEW_ASYNC_MSG\n    using interface10::async_msg;\n#endif\n#if __TBB_PREVIEW_STREAMING_NODE\n    using interface10::port_ref;\n    using interface10::streaming_node;\n#endif // __TBB_PREVIEW_STREAMING_NODE\n\n} // flow\n} // tbb\n\n#undef __TBB_PFG_RESET_ARG\n#undef __TBB_COMMA\n\n#endif // __TBB_flow_graph_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/flow_graph_abstractions.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_abstractions_H\n#define __TBB_flow_graph_abstractions_H\n\nnamespace tbb {\nnamespace flow {\nnamespace interface10 {\n\n//! Pure virtual template classes that define interfaces for async communication\nclass graph_proxy {\npublic:\n    //! Inform a graph that messages may come from outside, to prevent premature graph completion\n    virtual void reserve_wait() = 0;\n\n    //! Inform a graph that a previous call to reserve_wait is no longer in effect\n    virtual void release_wait() = 0;\n\n    virtual ~graph_proxy() {}\n};\n\ntemplate <typename Input>\nclass receiver_gateway : public graph_proxy {\npublic:\n    //! Type of inputing data into FG.\n    typedef Input input_type;\n\n    //! Submit signal from an asynchronous activity to FG.\n    virtual bool try_put(const input_type&) = 0;\n};\n\n} //interfaceX\n\nusing interface10::graph_proxy;\nusing interface10::receiver_gateway;\n\n} //flow\n} //tbb\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/flow_graph_opencl_node.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_opencl_node_H\n#define __TBB_flow_graph_opencl_node_H\n\n#include \"tbb/tbb_config.h\"\n#if __TBB_PREVIEW_OPENCL_NODE\n\n#include \"flow_graph.h\"\n\n#include <vector>\n#include <string>\n#include <algorithm>\n#include <iostream>\n#include <fstream>\n#include <map>\n#include <mutex>\n\n#ifdef __APPLE__\n#include <OpenCL/opencl.h>\n#else\n#include <CL/cl.h>\n#endif\n\nnamespace tbb {\nnamespace flow {\n\nnamespace interface10 {\n\ntemplate <typename DeviceFilter>\nclass opencl_factory;\n\nnamespace opencl_info {\nclass default_opencl_factory;\n}\n\ntemplate <typename Factory>\nclass opencl_program;\n\ninline void enforce_cl_retcode(cl_int err, std::string msg) {\n    if (err != CL_SUCCESS) {\n        std::cerr << msg << \"; error code: \" << err << std::endl;\n        throw msg;\n    }\n}\n\ntemplate <typename T>\nT event_info(cl_event e, cl_event_info i) {\n    T res;\n    enforce_cl_retcode(clGetEventInfo(e, i, sizeof(res), &res, NULL), \"Failed to get OpenCL event information\");\n    return res;\n}\n\ntemplate <typename T>\nT device_info(cl_device_id d, cl_device_info i) {\n    T res;\n    enforce_cl_retcode(clGetDeviceInfo(d, i, sizeof(res), &res, NULL), \"Failed to get OpenCL device information\");\n    return res;\n}\n\ntemplate <>\ninline std::string device_info<std::string>(cl_device_id d, cl_device_info i) {\n    size_t required;\n    enforce_cl_retcode(clGetDeviceInfo(d, i, 0, NULL, &required), \"Failed to get OpenCL device information\");\n\n    char *buff = (char*)alloca(required);\n    enforce_cl_retcode(clGetDeviceInfo(d, i, required, buff, NULL), \"Failed to get OpenCL device information\");\n\n    return buff;\n}\n\ntemplate <typename T>\nT platform_info(cl_platform_id p, cl_platform_info i) {\n    T res;\n    enforce_cl_retcode(clGetPlatformInfo(p, i, sizeof(res), &res, NULL), \"Failed to get OpenCL platform information\");\n    return res;\n}\n\ntemplate <>\ninline std::string platform_info<std::string>(cl_platform_id p, cl_platform_info  i) {\n    size_t required;\n    enforce_cl_retcode(clGetPlatformInfo(p, i, 0, NULL, &required), \"Failed to get OpenCL platform information\");\n\n    char *buff = (char*)alloca(required);\n    enforce_cl_retcode(clGetPlatformInfo(p, i, required, buff, NULL), \"Failed to get OpenCL platform information\");\n\n    return buff;\n}\n\n\nclass opencl_device {\npublic:\n    typedef size_t device_id_type;\n    enum : device_id_type {\n        unknown = device_id_type( -2 ),\n        host = device_id_type( -1 )\n    };\n\n    opencl_device() : my_device_id( unknown ), my_cl_device_id( NULL ), my_cl_command_queue( NULL ) {}\n\n    opencl_device( cl_device_id d_id ) : my_device_id( unknown ), my_cl_device_id( d_id ), my_cl_command_queue( NULL ) {}\n\n    opencl_device( cl_device_id cl_d_id, device_id_type device_id ) : my_device_id( device_id ), my_cl_device_id( cl_d_id ), my_cl_command_queue( NULL ) {}\n\n    std::string platform_profile() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_PROFILE );\n    }\n    std::string platform_version() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_VERSION );\n    }\n    std::string platform_name() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_NAME );\n    }\n    std::string platform_vendor() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_VENDOR );\n    }\n    std::string platform_extensions() const {\n        return platform_info<std::string>( platform_id(), CL_PLATFORM_EXTENSIONS );\n    }\n\n    template <typename T>\n    void info( cl_device_info i, T &t ) const {\n        t = device_info<T>( my_cl_device_id, i );\n    }\n    std::string version() const {\n        // The version string format: OpenCL<space><major_version.minor_version><space><vendor-specific information>\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VERSION );\n    }\n    int major_version() const {\n        int major;\n        std::sscanf( version().c_str(), \"OpenCL %d\", &major );\n        return major;\n    }\n    int minor_version() const {\n        int major, minor;\n        std::sscanf( version().c_str(), \"OpenCL %d.%d\", &major, &minor );\n        return minor;\n    }\n    bool out_of_order_exec_mode_on_host_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n    }\n    bool out_of_order_exec_mode_on_device_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return false;\n    }\n    std::array<size_t, 3> max_work_item_sizes() const {\n        return device_info<std::array<size_t, 3>>( my_cl_device_id, CL_DEVICE_MAX_WORK_ITEM_SIZES );\n    }\n    size_t max_work_group_size() const {\n        return device_info<size_t>( my_cl_device_id, CL_DEVICE_MAX_WORK_GROUP_SIZE );\n    }\n    bool built_in_kernel_available( const std::string& k ) const {\n        const std::string semi = \";\";\n        // Added semicolumns to force an exact match (to avoid a partial match, e.g. \"add\" is partly matched with \"madd\").\n        return (semi + built_in_kernels() + semi).find( semi + k + semi ) != std::string::npos;\n    }\n    std::string built_in_kernels() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_BUILT_IN_KERNELS );\n    }\n    std::string name() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_NAME );\n    }\n    cl_bool available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_AVAILABLE );\n    }\n    cl_bool compiler_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_COMPILER_AVAILABLE );\n    }\n    cl_bool linker_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_LINKER_AVAILABLE );\n    }\n    bool extension_available( const std::string &ext ) const {\n        const std::string space = \" \";\n        // Added space to force an exact match (to avoid a partial match, e.g. \"ext\" is partly matched with \"ext2\").\n        return (space + extensions() + space).find( space + ext + space ) != std::string::npos;\n    }\n    std::string extensions() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_EXTENSIONS );\n    }\n\n    cl_device_type type() const {\n        return device_info<cl_device_type>( my_cl_device_id, CL_DEVICE_TYPE );\n    }\n\n    std::string vendor() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VENDOR );\n    }\n\n    cl_uint address_bits() const {\n        return device_info<cl_uint>( my_cl_device_id, CL_DEVICE_ADDRESS_BITS );\n    }\n\n    cl_device_id device_id() const {\n        return my_cl_device_id;\n    }\n\n    cl_command_queue command_queue() const {\n        return my_cl_command_queue;\n    }\n\n    void set_command_queue( cl_command_queue cmd_queue ) {\n        my_cl_command_queue = cmd_queue;\n    }\n\n    cl_platform_id platform_id() const {\n        return device_info<cl_platform_id>( my_cl_device_id, CL_DEVICE_PLATFORM );\n    }\n\nprivate:\n\n    device_id_type my_device_id;\n    cl_device_id my_cl_device_id;\n    cl_command_queue my_cl_command_queue;\n\n    friend bool operator==(opencl_device d1, opencl_device d2) { return d1.my_cl_device_id == d2.my_cl_device_id; }\n\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n    template <typename Factory>\n    friend class opencl_memory;\n    template <typename Factory>\n    friend class opencl_program;\n\n#if TBB_USE_ASSERT\n    template <typename T, typename Factory>\n    friend class opencl_buffer;\n#endif\n};\n\nclass opencl_device_list {\n    typedef std::vector<opencl_device> container_type;\npublic:\n    typedef container_type::iterator iterator;\n    typedef container_type::const_iterator const_iterator;\n    typedef container_type::size_type size_type;\n\n    opencl_device_list() {}\n    opencl_device_list( std::initializer_list<opencl_device> il ) : my_container( il ) {}\n\n    void add( opencl_device d ) { my_container.push_back( d ); }\n    size_type size() const { return my_container.size(); }\n    bool empty() const { return my_container.empty(); }\n    iterator begin() { return my_container.begin(); }\n    iterator end() { return my_container.end(); }\n    const_iterator begin() const { return my_container.begin(); }\n    const_iterator end() const { return my_container.end(); }\n    const_iterator cbegin() const { return my_container.cbegin(); }\n    const_iterator cend() const { return my_container.cend(); }\n\nprivate:\n    container_type my_container;\n};\n\nnamespace internal {\n\n// Retrieve all OpenCL devices from machine\ninline opencl_device_list find_available_devices() {\n    opencl_device_list opencl_devices;\n\n    cl_uint num_platforms;\n    enforce_cl_retcode(clGetPlatformIDs(0, NULL, &num_platforms), \"clGetPlatformIDs failed\");\n\n    std::vector<cl_platform_id> platforms(num_platforms);\n    enforce_cl_retcode(clGetPlatformIDs(num_platforms, platforms.data(), NULL), \"clGetPlatformIDs failed\");\n\n    cl_uint num_devices;\n    std::vector<cl_platform_id>::iterator platforms_it = platforms.begin();\n    cl_uint num_all_devices = 0;\n    while (platforms_it != platforms.end()) {\n        cl_int err = clGetDeviceIDs(*platforms_it, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);\n        if (err == CL_DEVICE_NOT_FOUND) {\n            platforms_it = platforms.erase(platforms_it);\n        }\n        else {\n            enforce_cl_retcode(err, \"clGetDeviceIDs failed\");\n            num_all_devices += num_devices;\n            ++platforms_it;\n        }\n    }\n\n    std::vector<cl_device_id> devices(num_all_devices);\n    std::vector<cl_device_id>::iterator devices_it = devices.begin();\n    for (auto p = platforms.begin(); p != platforms.end(); ++p) {\n        enforce_cl_retcode(clGetDeviceIDs((*p), CL_DEVICE_TYPE_ALL, (cl_uint)std::distance(devices_it, devices.end()), &*devices_it, &num_devices), \"clGetDeviceIDs failed\");\n        devices_it += num_devices;\n    }\n\n    for (auto d = devices.begin(); d != devices.end(); ++d) {\n        opencl_devices.add(opencl_device((*d)));\n    }\n\n    return opencl_devices;\n}\n\n} // namespace internal\n\n// TODO: consider this namespace as public API\nnamespace opencl_info {\n\n    inline const opencl_device_list& available_devices() {\n        // Static storage for all available OpenCL devices on machine\n        static const opencl_device_list my_devices = internal::find_available_devices();\n        return my_devices;\n    }\n\n} // namespace opencl_info\n\n\nclass callback_base : tbb::internal::no_copy {\npublic:\n    virtual void call() = 0;\n    virtual ~callback_base() {}\n};\n\ntemplate <typename Callback, typename T>\nclass callback : public callback_base {\n    Callback my_callback;\n    T my_data;\npublic:\n    callback( Callback c, const T& t ) : my_callback( c ), my_data( t ) {}\n\n    void call() __TBB_override {\n        my_callback( my_data );\n    }\n};\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_async_msg : public async_msg<T> {\npublic:\n    typedef T value_type;\n\n    opencl_async_msg() : my_callback_flag_ptr( std::make_shared< tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n    }\n\n    explicit opencl_async_msg( const T& data ) : my_data(data), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n    }\n\n    opencl_async_msg( const T& data, cl_event event ) : my_data(data), my_event(event), my_is_event(true), my_callback_flag_ptr( std::make_shared<tbb::atomic<bool>>() ) {\n        my_callback_flag_ptr->store<tbb::relaxed>(false);\n        enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n\n    T& data( bool wait = true ) {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    const T& data( bool wait = true ) const {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    opencl_async_msg( const opencl_async_msg &dmsg ) : async_msg<T>(dmsg),\n        my_data(dmsg.my_data), my_event(dmsg.my_event), my_is_event( dmsg.my_is_event ),\n        my_callback_flag_ptr(dmsg.my_callback_flag_ptr)\n    {\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n\n    opencl_async_msg( opencl_async_msg &&dmsg ) : async_msg<T>(std::move(dmsg)),\n        my_data(std::move(dmsg.my_data)), my_event(dmsg.my_event), my_is_event(dmsg.my_is_event),\n        my_callback_flag_ptr( std::move(dmsg.my_callback_flag_ptr) )\n    {\n        dmsg.my_is_event = false;\n    }\n\n    opencl_async_msg& operator=(const opencl_async_msg &dmsg) {\n        async_msg<T>::operator =(dmsg);\n\n        // Release original event\n        if ( my_is_event )\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to retain an event\" );\n\n        my_data = dmsg.my_data;\n        my_event = dmsg.my_event;\n        my_is_event = dmsg.my_is_event;\n\n        // Retain copied event\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n\n        my_callback_flag_ptr = dmsg.my_callback_flag_ptr;\n        return *this;\n    }\n\n    ~opencl_async_msg() {\n        if ( my_is_event )\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n    }\n\n    cl_event const * get_event() const { return my_is_event ? &my_event : NULL; }\n    void set_event( cl_event e ) const {\n        if ( my_is_event ) {\n            cl_command_queue cq = event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE );\n            if ( cq != event_info<cl_command_queue>( e, CL_EVENT_COMMAND_QUEUE ) )\n                enforce_cl_retcode( clFlush( cq ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = true;\n        my_event = e;\n        clRetainEvent( my_event );\n    }\n\n    void clear_event() const {\n        if ( my_is_event ) {\n            enforce_cl_retcode( clFlush( event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE ) ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = false;\n    }\n\n    template <typename Callback>\n    void register_callback( Callback c ) const {\n        __TBB_ASSERT( my_is_event, \"The OpenCL event is not set\" );\n        enforce_cl_retcode( clSetEventCallback( my_event, CL_COMPLETE, register_callback_func, new callback<Callback, T>( c, my_data ) ), \"Failed to set an OpenCL callback\" );\n    }\n\n    operator T&() { return data(); }\n    operator const T&() const { return data(); }\n\nprotected:\n    // Overridden in this derived class to inform that\n    // async calculation chain is over\n    void finalize() const __TBB_override {\n        receive_if_memory_object(*this);\n        if (! my_callback_flag_ptr->fetch_and_store(true)) {\n            opencl_async_msg a(*this);\n            if (my_is_event) {\n                register_callback([a](const T& t) mutable {\n                    a.set(t);\n                });\n            }\n            else {\n                a.set(my_data);\n            }\n        }\n        clear_event();\n    }\n\nprivate:\n    static void CL_CALLBACK register_callback_func( cl_event, cl_int event_command_exec_status, void *data ) {\n        tbb::internal::suppress_unused_warning( event_command_exec_status );\n        __TBB_ASSERT( event_command_exec_status == CL_COMPLETE, NULL );\n        __TBB_ASSERT( data, NULL );\n        callback_base *c = static_cast<callback_base*>(data);\n        c->call();\n        delete c;\n    }\n\n    T my_data;\n    mutable cl_event my_event;\n    mutable bool my_is_event = false;\n\n    std::shared_ptr< tbb::atomic<bool> > my_callback_flag_ptr;\n};\n\ntemplate <typename K, typename T, typename Factory>\nK key_from_message( const opencl_async_msg<T, Factory> &dmsg ) {\n    using tbb::flow::key_from_message;\n    const T &t = dmsg.data( false );\n    __TBB_STATIC_ASSERT( true, \"\" );\n    return key_from_message<K, T>( t );\n}\n\ntemplate <typename Factory>\nclass opencl_memory {\npublic:\n    opencl_memory() {}\n    opencl_memory( Factory &f ) : my_host_ptr( NULL ), my_factory( &f ), my_sending_event_present( false ) {\n        my_curr_device_id = my_factory->devices().begin()->my_device_id;\n    }\n\n    ~opencl_memory() {\n        if ( my_sending_event_present ) enforce_cl_retcode( clReleaseEvent( my_sending_event ), \"Failed to release an event for the OpenCL buffer\" );\n        enforce_cl_retcode( clReleaseMemObject( my_cl_mem ), \"Failed to release an memory object\" );\n    }\n\n    cl_mem get_cl_mem() const {\n        return my_cl_mem;\n    }\n\n    void* get_host_ptr() {\n        if ( !my_host_ptr ) {\n            opencl_async_msg<void*, Factory> d = receive( NULL );\n            d.data();\n            __TBB_ASSERT( d.data() == my_host_ptr, NULL );\n        }\n        return my_host_ptr;\n    }\n\n    Factory *factory() const { return my_factory; }\n\n    opencl_async_msg<void*, Factory> receive(const cl_event *e) {\n        opencl_async_msg<void*, Factory> d;\n        if (e) {\n            d = opencl_async_msg<void*, Factory>(my_host_ptr, *e);\n        } else {\n            d = opencl_async_msg<void*, Factory>(my_host_ptr);\n        }\n\n        // Concurrent receives are prohibited so we do not worry about synchronization.\n        if (my_curr_device_id.load<tbb::relaxed>() != opencl_device::host) {\n            map_memory(*my_factory->devices().begin(), d);\n            my_curr_device_id.store<tbb::relaxed>(opencl_device::host);\n            my_host_ptr = d.data(false);\n        }\n        // Release the sending event\n        if (my_sending_event_present) {\n            enforce_cl_retcode(clReleaseEvent(my_sending_event), \"Failed to release an event\");\n            my_sending_event_present = false;\n        }\n        return d;\n    }\n\n    opencl_async_msg<void*, Factory> send(opencl_device device, const cl_event *e) {\n        opencl_device::device_id_type device_id = device.my_device_id;\n        if (!my_factory->is_same_context(my_curr_device_id.load<tbb::acquire>(), device_id)) {\n            {\n                tbb::spin_mutex::scoped_lock lock(my_sending_lock);\n                if (!my_factory->is_same_context(my_curr_device_id.load<tbb::relaxed>(), device_id)) {\n                    __TBB_ASSERT(my_host_ptr, \"The buffer has not been mapped\");\n                    opencl_async_msg<void*, Factory> d(my_host_ptr);\n                    my_factory->enqueue_unmap_buffer(device, *this, d);\n                    my_sending_event = *d.get_event();\n                    my_sending_event_present = true;\n                    enforce_cl_retcode(clRetainEvent(my_sending_event), \"Failed to retain an event\");\n                    my_host_ptr = NULL;\n                    my_curr_device_id.store<tbb::release>(device_id);\n                }\n            }\n            __TBB_ASSERT(my_sending_event_present, NULL);\n        }\n\n        // !e means that buffer has come from the host\n        if (!e && my_sending_event_present) e = &my_sending_event;\n\n        __TBB_ASSERT(!my_host_ptr, \"The buffer has not been unmapped\");\n        return e ? opencl_async_msg<void*, Factory>(NULL, *e) : opencl_async_msg<void*, Factory>(NULL);\n    }\n\n    virtual void map_memory( opencl_device, opencl_async_msg<void*, Factory> & ) = 0;\nprotected:\n    cl_mem my_cl_mem;\n    tbb::atomic<opencl_device::device_id_type> my_curr_device_id;\n    void* my_host_ptr;\n    Factory *my_factory;\n\n    tbb::spin_mutex my_sending_lock;\n    bool my_sending_event_present;\n    cl_event my_sending_event;\n};\n\ntemplate <typename Factory>\nclass opencl_buffer_impl : public opencl_memory<Factory> {\n    size_t my_size;\npublic:\n    opencl_buffer_impl( size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        this->my_cl_mem = clCreateBuffer( this->my_factory->context(), CL_MEM_ALLOC_HOST_PTR, size, NULL, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL buffer\" );\n    }\n\n    // The constructor for subbuffers.\n    opencl_buffer_impl( cl_mem m, size_t index, size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        cl_buffer_region region = { index, size };\n        this->my_cl_mem = clCreateSubBuffer( m, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL subbuffer\" );\n    }\n\n    size_t size() const {\n        return my_size;\n    }\n\n    void map_memory( opencl_device device, opencl_async_msg<void*, Factory> &dmsg ) __TBB_override {\n        this->my_factory->enqueue_map_buffer( device, *this, dmsg );\n    }\n\n#if TBB_USE_ASSERT\n    template <typename, typename>\n    friend class opencl_buffer;\n#endif\n};\n\nenum access_type {\n    read_write,\n    write_only,\n    read_only\n};\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_subbuffer;\n\ntemplate <typename T, typename Factory = opencl_info::default_opencl_factory>\nclass opencl_buffer {\npublic:\n    typedef cl_mem native_object_type;\n    typedef opencl_buffer memory_object_type;\n    typedef Factory opencl_factory_type;\n\n    template<access_type a> using iterator = T*;\n\n    template <access_type a>\n    iterator<a> access() const {\n        T* ptr = (T*)my_impl->get_host_ptr();\n        __TBB_ASSERT( ptr, NULL );\n        return iterator<a>( ptr );\n    }\n\n    T* data() const { return &access<read_write>()[0]; }\n\n    template <access_type a = read_write>\n    iterator<a> begin() const { return access<a>(); }\n\n    template <access_type a = read_write>\n    iterator<a> end() const { return access<a>()+my_impl->size()/sizeof(T); }\n\n    size_t size() const { return my_impl->size()/sizeof(T); }\n\n    T& operator[] ( ptrdiff_t k ) { return begin()[k]; }\n\n    opencl_buffer() {}\n    opencl_buffer( size_t size );\n    opencl_buffer( Factory &f, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), f ) ) {}\n\n    cl_mem native_object() const {\n        return my_impl->get_cl_mem();\n    }\n\n    const opencl_buffer& memory_object() const {\n        return *this;\n    }\n\n    void send( opencl_device device, opencl_async_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        opencl_async_msg<void*, Factory> d = my_impl->send( device, dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n    void receive( const opencl_async_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        opencl_async_msg<void*, Factory> d = my_impl->receive( dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n\n    opencl_subbuffer<T, Factory> subbuffer( size_t index, size_t size ) const;\nprivate:\n    // The constructor for subbuffers.\n    opencl_buffer( Factory &f, cl_mem m, size_t index, size_t size ) : my_impl( std::make_shared<impl_type>( m, index*sizeof(T), size*sizeof(T), f ) ) {}\n\n    typedef opencl_buffer_impl<Factory> impl_type;\n\n    std::shared_ptr<impl_type> my_impl;\n\n    friend bool operator==(const opencl_buffer<T, Factory> &lhs, const opencl_buffer<T, Factory> &rhs) {\n        return lhs.my_impl == rhs.my_impl;\n    }\n\n    template <typename>\n    friend class opencl_factory;\n    template <typename, typename>\n    friend class opencl_subbuffer;\n};\n\ntemplate <typename T, typename Factory>\nclass opencl_subbuffer : public opencl_buffer<T, Factory> {\n    opencl_buffer<T, Factory> my_owner;\npublic:\n    opencl_subbuffer() {}\n    opencl_subbuffer( const opencl_buffer<T, Factory> &owner, size_t index, size_t size ) :\n        opencl_buffer<T, Factory>( *owner.my_impl->factory(), owner.native_object(), index, size ), my_owner( owner ) {}\n};\n\ntemplate <typename T, typename Factory>\nopencl_subbuffer<T, Factory> opencl_buffer<T, Factory>::subbuffer( size_t index, size_t size ) const {\n    return opencl_subbuffer<T, Factory>( *this, index, size );\n}\n\n\n#define is_typedef(type)                                                    \\\n    template <typename T>                                                   \\\n    struct is_##type {                                                      \\\n        template <typename C>                                               \\\n        static std::true_type check( typename C::type* );                   \\\n        template <typename C>                                               \\\n        static std::false_type check( ... );                                \\\n                                                                            \\\n        static const bool value = decltype(check<T>(0))::value;             \\\n    }\n\nis_typedef( native_object_type );\nis_typedef( memory_object_type );\n\ntemplate <typename T>\ntypename std::enable_if<is_native_object_type<T>::value, typename T::native_object_type>::type get_native_object( const T &t ) {\n    return t.native_object();\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_native_object_type<T>::value, T>::type get_native_object( T t ) {\n    return t;\n}\n\n// send_if_memory_object checks if the T type has memory_object_type and call the send method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, opencl_async_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.send( device, d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, T &t ) {\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, typename mem_obj_t::opencl_factory_type> dmsg( mem_obj );\n    mem_obj.send( device, dmsg );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device, T& ) {};\n\n// receive_if_memory_object checks if the T type has memory_object_type and call the receive method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type receive_if_memory_object( const opencl_async_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    opencl_async_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.receive( d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type  receive_if_memory_object( const T& ) {}\n\nclass opencl_range {\npublic:\n    typedef size_t range_index_type;\n    typedef std::array<range_index_type, 3> nd_range_type;\n\n    template <typename G = std::initializer_list<int>, typename L = std::initializer_list<int>,\n        typename = typename std::enable_if<!std::is_same<typename std::decay<G>::type, opencl_range>::value>::type>\n    opencl_range(G&& global_work = std::initializer_list<int>({ 0 }), L&& local_work = std::initializer_list<int>({ 0, 0, 0 })) {\n        auto g_it = global_work.begin();\n        auto l_it = local_work.begin();\n        my_global_work_size = { size_t(-1), size_t(-1), size_t(-1) };\n        // my_local_work_size is still uninitialized\n        for (int s = 0; s < 3 && g_it != global_work.end(); ++g_it, ++l_it, ++s) {\n            __TBB_ASSERT(l_it != local_work.end(), \"global_work & local_work must have same size\");\n            my_global_work_size[s] = *g_it;\n            my_local_work_size[s] = *l_it;\n        }\n    }\n\n    const nd_range_type& global_range() const { return my_global_work_size; }\n    const nd_range_type& local_range() const { return my_local_work_size; }\n\nprivate:\n    nd_range_type my_global_work_size;\n    nd_range_type my_local_work_size;\n};\n\ntemplate <typename DeviceFilter>\nclass opencl_factory {\npublic:\n    template<typename T> using async_msg_type = opencl_async_msg<T, opencl_factory<DeviceFilter>>;\n    typedef opencl_device device_type;\n\n    class kernel : tbb::internal::no_assign {\n    public:\n        kernel( const kernel& k ) : my_factory( k.my_factory ) {\n            // Clone my_cl_kernel via opencl_program\n            size_t ret_size = 0;\n\n            std::vector<char> kernel_name;\n            for ( size_t curr_size = 32;; curr_size <<= 1 ) {\n                kernel_name.resize( curr_size <<= 1 );\n                enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), \"Failed to get kernel info\" );\n                if ( ret_size < curr_size ) break;\n            }\n\n            cl_program program;\n            enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_PROGRAM, sizeof(program), &program, &ret_size ), \"Failed to get kernel info\" );\n            __TBB_ASSERT( ret_size == sizeof(program), NULL );\n\n            my_cl_kernel = opencl_program< factory_type >( my_factory, program ).get_cl_kernel( kernel_name.data() );\n        }\n\n        ~kernel() {\n            enforce_cl_retcode( clReleaseKernel( my_cl_kernel ), \"Failed to release a kernel\" );\n        }\n\n    private:\n        typedef opencl_factory<DeviceFilter> factory_type;\n\n        kernel( const cl_kernel& k, factory_type& f ) : my_cl_kernel( k ), my_factory( f ) {}\n\n        // Data\n        cl_kernel my_cl_kernel;\n        factory_type& my_factory;\n\n        template <typename DeviceFilter_>\n        friend class opencl_factory;\n\n        template <typename Factory>\n        friend class opencl_program;\n    };\n\n    typedef kernel kernel_type;\n\n    // 'range_type' enables kernel_executor with range support\n    // it affects expectations for enqueue_kernel(.....) interface method\n    typedef opencl_range range_type;\n\n    opencl_factory() {}\n    ~opencl_factory() {\n        if ( my_devices.size() ) {\n            for ( auto d = my_devices.begin(); d != my_devices.end(); ++d ) {\n                enforce_cl_retcode( clReleaseCommandQueue( (*d).my_cl_command_queue ), \"Failed to release a command queue\" );\n            }\n            enforce_cl_retcode( clReleaseContext( my_cl_context ), \"Failed to release a context\" );\n        }\n    }\n\n    bool init( const opencl_device_list &device_list ) {\n        tbb::spin_mutex::scoped_lock lock( my_devices_mutex );\n        if ( !my_devices.size() ) {\n            my_devices = device_list;\n            return true;\n        }\n        return false;\n    }\n\n\nprivate:\n    template <typename Factory>\n    void enqueue_map_buffer( opencl_device device, opencl_buffer_impl<Factory> &buffer, opencl_async_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        cl_int err;\n        void *ptr = clEnqueueMapBuffer( device.my_cl_command_queue, buffer.get_cl_mem(), false, CL_MAP_READ | CL_MAP_WRITE, 0, buffer.size(),\n            e1 == NULL ? 0 : 1, e1, &e2, &err );\n        enforce_cl_retcode( err, \"Failed to map a buffer\" );\n        dmsg.data( false ) = ptr;\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n\n    template <typename Factory>\n    void enqueue_unmap_buffer( opencl_device device, opencl_memory<Factory> &memory, opencl_async_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        enforce_cl_retcode(\n            clEnqueueUnmapMemObject( device.my_cl_command_queue, memory.get_cl_mem(), memory.get_host_ptr(), e1 == NULL ? 0 : 1, e1, &e2 ),\n           \"Failed to unmap a buffer\" );\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n    // --------- Kernel argument & event list helpers --------- //\n    template <size_t NUM_ARGS, typename T>\n    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>&, int&, int& place, const T& t ) {\n        auto p = get_native_object(t);\n        enforce_cl_retcode( clSetKernelArg(kernel.my_cl_kernel, place++, sizeof(p), &p), \"Failed to set a kernel argument\" );\n    }\n\n    template <size_t NUM_ARGS, typename T, typename F>\n    void process_one_arg( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const opencl_async_msg<T, F>& msg ) {\n        __TBB_ASSERT((static_cast<typename std::array<cl_event, NUM_ARGS>::size_type>(num_events) < events.size()), NULL);\n\n        const cl_event * const e = msg.get_event();\n        if (e != NULL) {\n            events[num_events++] = *e;\n        }\n\n        process_one_arg( kernel, events, num_events, place, msg.data(false) );\n    }\n\n    template <size_t NUM_ARGS, typename T, typename ...Rest>\n    void process_arg_list( const kernel_type& kernel, std::array<cl_event, NUM_ARGS>& events, int& num_events, int& place, const T& t, const Rest&... args ) {\n        process_one_arg( kernel, events, num_events, place, t );\n        process_arg_list( kernel, events, num_events, place, args... );\n    }\n\n    template <size_t NUM_ARGS>\n    void process_arg_list( const kernel_type&, std::array<cl_event, NUM_ARGS>&, int&, int& ) {}\n    // ------------------------------------------- //\n    template <typename T>\n    void update_one_arg( cl_event, T& ) {}\n\n    template <typename T, typename F>\n    void update_one_arg( cl_event e, opencl_async_msg<T, F>& msg ) {\n        msg.set_event( e );\n    }\n\n    template <typename T, typename ...Rest>\n    void update_arg_list( cl_event e, T& t, Rest&... args ) {\n        update_one_arg( e, t );\n        update_arg_list( e, args... );\n    }\n\n    void update_arg_list( cl_event ) {}\n    // ------------------------------------------- //\npublic:\n    template <typename ...Args>\n    void send_kernel( opencl_device device, const kernel_type& kernel, const range_type& work_size, Args&... args ) {\n        std::array<cl_event, sizeof...(Args)> events;\n        int num_events = 0;\n        int place = 0;\n        process_arg_list( kernel, events, num_events, place, args... );\n\n        const cl_event e = send_kernel_impl( device, kernel.my_cl_kernel, work_size, num_events, events.data() );\n\n        update_arg_list(e, args...);\n\n        // Release our own reference to cl_event\n        enforce_cl_retcode( clReleaseEvent(e), \"Failed to release an event\" );\n    }\n\n    // ------------------------------------------- //\n    template <typename T, typename ...Rest>\n    void send_data(opencl_device device, T& t, Rest&... args) {\n        send_if_memory_object( device, t );\n        send_data( device, args... );\n    }\n\n    void send_data(opencl_device) {}\n    // ------------------------------------------- //\n\nprivate:\n    cl_event send_kernel_impl( opencl_device device, const cl_kernel& kernel,\n        const range_type& work_size, cl_uint num_events, cl_event* event_list ) {\n        const typename range_type::nd_range_type g_offset = { { 0, 0, 0 } };\n        const typename range_type::nd_range_type& g_size = work_size.global_range();\n        const typename range_type::nd_range_type& l_size = work_size.local_range();\n        cl_uint s;\n        for ( s = 1; s < 3 && g_size[s] != size_t(-1); ++s) {}\n        cl_event event;\n        enforce_cl_retcode(\n            clEnqueueNDRangeKernel( device.my_cl_command_queue, kernel, s,\n                g_offset.data(), g_size.data(), l_size[0] ? l_size.data() : NULL, num_events, num_events ? event_list : NULL, &event ),\n            \"Failed to enqueue a kernel\" );\n        return event;\n    }\n\n    // ------------------------------------------- //\n    template <typename T>\n    bool get_event_from_one_arg( cl_event&, const T& ) {\n        return false;\n    }\n\n    template <typename T, typename F>\n    bool get_event_from_one_arg( cl_event& e, const opencl_async_msg<T, F>& msg) {\n        cl_event const *e_ptr = msg.get_event();\n\n        if ( e_ptr != NULL ) {\n            e = *e_ptr;\n            return true;\n        }\n\n        return false;\n    }\n\n    template <typename T, typename ...Rest>\n    bool get_event_from_args( cl_event& e, const T& t, const Rest&... args ) {\n        if ( get_event_from_one_arg( e, t ) ) {\n            return true;\n        }\n\n        return get_event_from_args( e, args... );\n    }\n\n    bool get_event_from_args( cl_event& ) {\n        return false;\n    }\n    // ------------------------------------------- //\n\n    struct finalize_fn : tbb::internal::no_assign {\n        virtual ~finalize_fn() {}\n        virtual void operator() () {}\n    };\n\n    template<typename Fn>\n    struct finalize_fn_leaf : public finalize_fn {\n        Fn my_fn;\n        finalize_fn_leaf(Fn fn) : my_fn(fn) {}\n        void operator() () __TBB_override { my_fn(); }\n    };\n\n    static void CL_CALLBACK finalize_callback(cl_event, cl_int event_command_exec_status, void *data) {\n        tbb::internal::suppress_unused_warning(event_command_exec_status);\n        __TBB_ASSERT(event_command_exec_status == CL_COMPLETE, NULL);\n\n        finalize_fn * const fn_ptr = static_cast<finalize_fn*>(data);\n        __TBB_ASSERT(fn_ptr != NULL, \"Invalid finalize function pointer\");\n        (*fn_ptr)();\n\n        // Function pointer was created by 'new' & this callback must be called once only\n        delete fn_ptr;\n    }\npublic:\n    template <typename FinalizeFn, typename ...Args>\n    void finalize( opencl_device device, FinalizeFn fn, Args&... args ) {\n        cl_event e;\n\n        if ( get_event_from_args( e, args... ) ) {\n            enforce_cl_retcode( clSetEventCallback( e, CL_COMPLETE, finalize_callback,\n                new finalize_fn_leaf<FinalizeFn>(fn) ), \"Failed to set a callback\" );\n        }\n\n        enforce_cl_retcode( clFlush( device.my_cl_command_queue ), \"Failed to flush an OpenCL command queue\" );\n    }\n\n    const opencl_device_list& devices() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_devices;\n    }\n\nprivate:\n    bool is_same_context( opencl_device::device_id_type d1, opencl_device::device_id_type d2 ) {\n        __TBB_ASSERT( d1 != opencl_device::unknown && d2 != opencl_device::unknown, NULL );\n        // Currently, factory supports only one context so if the both devices are not host it means the are in the same context.\n        if ( d1 != opencl_device::host && d2 != opencl_device::host )\n            return true;\n        return d1 == d2;\n    }\nprivate:\n    opencl_factory( const opencl_factory& );\n    opencl_factory& operator=(const opencl_factory&);\n\n    cl_context context() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_cl_context;\n    }\n\n    void init_once() {\n        {\n            tbb::spin_mutex::scoped_lock lock(my_devices_mutex);\n            if (!my_devices.size())\n                my_devices = DeviceFilter()( opencl_info::available_devices() );\n        }\n\n        enforce_cl_retcode(my_devices.size() ? CL_SUCCESS : CL_INVALID_DEVICE, \"No devices in the device list\");\n        cl_platform_id platform_id = my_devices.begin()->platform_id();\n        for (opencl_device_list::iterator it = ++my_devices.begin(); it != my_devices.end(); ++it)\n            enforce_cl_retcode(it->platform_id() == platform_id ? CL_SUCCESS : CL_INVALID_PLATFORM, \"All devices should be in the same platform\");\n\n        std::vector<cl_device_id> cl_device_ids;\n        for (auto d = my_devices.begin(); d != my_devices.end(); ++d) {\n            cl_device_ids.push_back((*d).my_cl_device_id);\n        }\n\n        cl_context_properties context_properties[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform_id, (cl_context_properties)NULL };\n        cl_int err;\n        cl_context ctx = clCreateContext(context_properties,\n            (cl_uint)cl_device_ids.size(),\n            cl_device_ids.data(),\n            NULL, NULL, &err);\n        enforce_cl_retcode(err, \"Failed to create context\");\n        my_cl_context = ctx;\n\n        size_t device_counter = 0;\n        for (auto d = my_devices.begin(); d != my_devices.end(); d++) {\n            (*d).my_device_id = device_counter++;\n            cl_int err2;\n            cl_command_queue cq;\n#if CL_VERSION_2_0\n            if ((*d).major_version() >= 2) {\n                if ((*d).out_of_order_exec_mode_on_host_present()) {\n                    cl_queue_properties props[] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 };\n                    cq = clCreateCommandQueueWithProperties(ctx, (*d).my_cl_device_id, props, &err2);\n                } else {\n                    cl_queue_properties props[] = { 0 };\n                    cq = clCreateCommandQueueWithProperties(ctx, (*d).my_cl_device_id, props, &err2);\n                }\n            } else\n#endif\n            {\n                cl_command_queue_properties props = (*d).out_of_order_exec_mode_on_host_present() ? CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE : 0;\n                // Suppress \"declared deprecated\" warning for the next line.\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( push )\n#if __INTEL_COMPILER\n#pragma warning (disable: 1478)\n#else\n#pragma warning (disable: 4996)\n#endif\n#endif\n                cq = clCreateCommandQueue(ctx, (*d).my_cl_device_id, props, &err2);\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( pop )\n#endif\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic pop\n#endif\n            }\n            enforce_cl_retcode(err2, \"Failed to create command queue\");\n            (*d).my_cl_command_queue = cq;\n        }\n    }\n\n    std::once_flag my_once_flag;\n    opencl_device_list my_devices;\n    cl_context my_cl_context;\n\n    tbb::spin_mutex my_devices_mutex;\n\n    template <typename Factory>\n    friend class opencl_program;\n    template <typename Factory>\n    friend class opencl_buffer_impl;\n    template <typename Factory>\n    friend class opencl_memory;\n}; // class opencl_factory\n\n// TODO: consider this namespace as public API\nnamespace opencl_info {\n\n// Default types\n\ntemplate <typename Factory>\nstruct default_device_selector {\n    opencl_device operator()(Factory& f) {\n        __TBB_ASSERT(!f.devices().empty(), \"No available devices\");\n        return *(f.devices().begin());\n    }\n};\n\nstruct default_device_filter {\n    opencl_device_list operator()(const opencl_device_list &devices) {\n        opencl_device_list dl;\n        cl_platform_id platform_id = devices.begin()->platform_id();\n        for (opencl_device_list::const_iterator it = devices.cbegin(); it != devices.cend(); ++it) {\n            if (it->platform_id() == platform_id) {\n                dl.add(*it);\n            }\n        }\n        return dl;\n    }\n};\n\nclass default_opencl_factory : public opencl_factory < default_device_filter >, tbb::internal::no_copy {\npublic:\n    template<typename T> using async_msg_type = opencl_async_msg<T, default_opencl_factory>;\n\n    friend default_opencl_factory& default_factory();\n\nprivate:\n    default_opencl_factory() = default;\n};\n\ninline default_opencl_factory& default_factory() {\n    static default_opencl_factory default_factory;\n    return default_factory;\n}\n\n} // namespace opencl_info\n\ntemplate <typename T, typename Factory>\nopencl_buffer<T, Factory>::opencl_buffer( size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), opencl_info::default_factory() ) ) {}\n\n\nenum class opencl_program_type {\n    SOURCE,\n    PRECOMPILED,\n    SPIR\n};\n\ntemplate <typename Factory = opencl_info::default_opencl_factory>\nclass opencl_program : tbb::internal::no_assign {\npublic:\n    typedef typename Factory::kernel_type kernel_type;\n\n    opencl_program( Factory& factory, opencl_program_type type, const std::string& program_name ) : my_factory( factory ), my_type(type) , my_arg_str( program_name) {}\n    opencl_program( Factory& factory, const char* program_name ) : opencl_program( factory, std::string( program_name ) ) {}\n    opencl_program( Factory& factory, const std::string& program_name ) : opencl_program( factory, opencl_program_type::SOURCE, program_name ) {}\n\n    opencl_program( opencl_program_type type, const std::string& program_name ) : opencl_program( opencl_info::default_factory(), type, program_name ) {}\n    opencl_program( const char* program_name ) : opencl_program( opencl_info::default_factory(), program_name ) {}\n    opencl_program( const std::string& program_name ) : opencl_program( opencl_info::default_factory(), program_name ) {}\n    opencl_program( opencl_program_type type ) : opencl_program( opencl_info::default_factory(), type ) {}\n\n    opencl_program( const opencl_program &src ) : my_factory( src.my_factory ), my_type( src.type ), my_arg_str( src.my_arg_str ), my_cl_program( src.my_cl_program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\n\n    kernel_type get_kernel( const std::string& k ) const {\n        return kernel_type( get_cl_kernel(k), my_factory );\n    }\n\nprivate:\n    opencl_program( Factory& factory, cl_program program ) : my_factory( factory ), my_cl_program( program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\n\n    cl_kernel get_cl_kernel( const std::string& k ) const {\n        std::call_once( my_do_once_flag, [this, &k](){ this->init( k ); } );\n        cl_int err;\n        cl_kernel kernel = clCreateKernel( my_cl_program, k.c_str(), &err );\n        enforce_cl_retcode( err, std::string( \"Failed to create kernel: \" ) + k );\n        return kernel;\n    }\n\n    class file_reader {\n    public:\n        file_reader( const std::string& filepath ) {\n            std::ifstream file_descriptor( filepath, std::ifstream::binary );\n            if ( !file_descriptor.is_open() ) {\n                std::string str = std::string( \"Could not open file: \" ) + filepath;\n                std::cerr << str << std::endl;\n                throw str;\n            }\n            file_descriptor.seekg( 0, file_descriptor.end );\n            size_t length = size_t( file_descriptor.tellg() );\n            file_descriptor.seekg( 0, file_descriptor.beg );\n            my_content.resize( length );\n            char* begin = &*my_content.begin();\n            file_descriptor.read( begin, length );\n            file_descriptor.close();\n        }\n        const char* content() { return &*my_content.cbegin(); }\n        size_t length() { return my_content.length(); }\n    private:\n        std::string my_content;\n    };\n\n    class opencl_program_builder {\n    public:\n        typedef void (CL_CALLBACK *cl_callback_type)(cl_program, void*);\n        opencl_program_builder( Factory& f, const std::string& name, cl_program program,\n                                cl_uint num_devices, cl_device_id* device_list,\n                                const char* options, cl_callback_type callback,\n                                void* user_data ) {\n            cl_int err = clBuildProgram( program, num_devices, device_list, options,\n                                         callback, user_data );\n            if( err == CL_SUCCESS )\n                return;\n            std::string str = std::string( \"Failed to build program: \" ) + name;\n            if ( err == CL_BUILD_PROGRAM_FAILURE ) {\n                const opencl_device_list &devices = f.devices();\n                for ( auto d = devices.begin(); d != devices.end(); ++d ) {\n                    std::cerr << \"Build log for device: \" << (*d).name() << std::endl;\n                    size_t log_size;\n                    cl_int query_err = clGetProgramBuildInfo(\n                        program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG, 0, NULL,\n                        &log_size );\n                    enforce_cl_retcode( query_err, \"Failed to get build log size\" );\n                    if( log_size ) {\n                        std::vector<char> output;\n                        output.resize( log_size );\n                        query_err = clGetProgramBuildInfo(\n                            program, (*d).my_cl_device_id, CL_PROGRAM_BUILD_LOG,\n                            output.size(), output.data(), NULL );\n                        enforce_cl_retcode( query_err, \"Failed to get build output\" );\n                        std::cerr << output.data() << std::endl;\n                    } else {\n                        std::cerr << \"No build log available\" << std::endl;\n                    }\n                }\n            }\n            enforce_cl_retcode( err, str );\n        }\n    };\n\n    class opencl_device_filter {\n    public:\n        template<typename Filter>\n        opencl_device_filter( cl_uint& num_devices, cl_device_id* device_list,\n                              Filter filter, const char* message ) {\n            for ( cl_uint i = 0; i < num_devices; ++i )\n                if ( filter(device_list[i]) ) {\n                    device_list[i--] = device_list[--num_devices];\n                }\n            if ( !num_devices )\n                enforce_cl_retcode( CL_DEVICE_NOT_AVAILABLE, message );\n        }\n    };\n\n    void init( const std::string& ) const {\n        cl_uint num_devices;\n        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_NUM_DEVICES, sizeof( num_devices ), &num_devices, NULL ),\n            \"Failed to get OpenCL context info\" );\n        if ( !num_devices )\n            enforce_cl_retcode( CL_DEVICE_NOT_FOUND, \"No supported devices found\" );\n        cl_device_id *device_list = (cl_device_id *)alloca( num_devices*sizeof( cl_device_id ) );\n        enforce_cl_retcode( clGetContextInfo( my_factory.context(), CL_CONTEXT_DEVICES, num_devices*sizeof( cl_device_id ), device_list, NULL ),\n            \"Failed to get OpenCL context info\" );\n        const char *options = NULL;\n        switch ( my_type ) {\n        case opencl_program_type::SOURCE: {\n            file_reader fr( my_arg_str );\n            const char *s[] = { fr.content() };\n            const size_t l[] = { fr.length() };\n            cl_int err;\n            my_cl_program = clCreateProgramWithSource( my_factory.context(), 1, s, l, &err );\n            enforce_cl_retcode( err, std::string( \"Failed to create program: \" ) + my_arg_str );\n            opencl_device_filter(\n                num_devices, device_list,\n                []( const opencl_device& d ) -> bool {\n                    return !d.compiler_available() || !d.linker_available();\n                }, \"No one device supports building program from sources\" );\n            opencl_program_builder(\n                my_factory, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        case opencl_program_type::SPIR:\n            options = \"-x spir\";\n        case opencl_program_type::PRECOMPILED: {\n            file_reader fr( my_arg_str );\n            std::vector<const unsigned char*> s(\n                num_devices, reinterpret_cast<const unsigned char*>(fr.content()) );\n            std::vector<size_t> l( num_devices, fr.length() );\n            std::vector<cl_int> bin_statuses( num_devices, -1 );\n            cl_int err;\n            my_cl_program = clCreateProgramWithBinary( my_factory.context(), num_devices,\n                                                       device_list, l.data(), s.data(),\n                                                       bin_statuses.data(), &err );\n            if( err != CL_SUCCESS ) {\n                std::string statuses_str;\n                for (auto st = bin_statuses.begin(); st != bin_statuses.end(); ++st) {\n                    statuses_str += std::to_string((*st));\n                }\n\n                enforce_cl_retcode( err, std::string( \"Failed to create program, error \" + std::to_string( err ) + \" : \" ) + my_arg_str +\n                                    std::string( \", binary_statuses = \" ) + statuses_str );\n            }\n            opencl_program_builder(\n                my_factory, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        default:\n            __TBB_ASSERT( false, \"Unsupported program type\" );\n        }\n    }\n\n    Factory& my_factory;\n    opencl_program_type my_type;\n    std::string my_arg_str;\n    mutable cl_program my_cl_program;\n    mutable std::once_flag my_do_once_flag;\n\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n\n    template <typename DeviceFilter>\n    friend class opencl_factory<DeviceFilter>::kernel;\n};\n\ntemplate<typename... Args>\nclass opencl_node;\n\ntemplate<typename JP, typename Factory, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP, Factory > : public streaming_node< tuple<Ports...>, JP, Factory > {\n    typedef streaming_node < tuple<Ports...>, JP, Factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n\n    opencl_node( graph &g, const kernel_type& kernel, Factory &f )\n        : base_type( g, kernel, opencl_info::default_device_selector <Factory >(), f )\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d, Factory &f)\n        : base_type( g, kernel, d, f)\n    {\n        tbb::internal::fgt_multiinput_multioutput_node( tbb::internal::FLOW_OPENCL_NODE, this, &this->my_graph );\n    }\n};\n\ntemplate<typename JP, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP > : public opencl_node < tuple<Ports...>, JP, opencl_info::default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, JP, opencl_info::default_opencl_factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {}\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d )\n        : base_type( g, kernel, d, opencl_info::default_factory() )\n    {}\n};\n\ntemplate<typename... Ports>\nclass opencl_node< tuple<Ports...> > : public opencl_node < tuple<Ports...>, queueing, opencl_info::default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, queueing, opencl_info::default_opencl_factory > base_type;\npublic:\n    typedef typename base_type::kernel_type kernel_type;\n\n    opencl_node( graph &g, const kernel_type& kernel )\n        : base_type( g, kernel, opencl_info::default_device_selector< opencl_info::default_opencl_factory >(), opencl_info::default_factory() )\n    {}\n\n    template <typename DeviceSelector>\n    opencl_node( graph &g, const kernel_type& kernel, DeviceSelector d )\n        : base_type( g, kernel, d, opencl_info::default_factory() )\n    {}\n};\n\n} // namespace interface10\n\nusing interface10::opencl_node;\nusing interface10::read_only;\nusing interface10::read_write;\nusing interface10::write_only;\nusing interface10::opencl_buffer;\nusing interface10::opencl_subbuffer;\nusing interface10::opencl_device;\nusing interface10::opencl_device_list;\nusing interface10::opencl_program;\nusing interface10::opencl_program_type;\nusing interface10::opencl_async_msg;\nusing interface10::opencl_factory;\nusing interface10::opencl_range;\n\n} // namespace flow\n} // namespace tbb\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n\n#endif // __TBB_flow_graph_opencl_node_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/gfx_factory.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_gfx_factory_H\n#define __TBB_flow_graph_gfx_factory_H\n\n#include \"tbb/tbb_config.h\"\n\n#if __TBB_PREVIEW_GFX_FACTORY\n\n#include <vector>\n#include <future>\n#include <mutex>\n#include <iostream>\n\n#include <gfx/gfx_rt.h>\n#include <gfx/gfx_intrin.h>\n#include <gfx/gfx_types.h>\n\nnamespace tbb {\n\nnamespace flow {\n\nnamespace interface9 {\n\ntemplate <typename T>\nclass gfx_buffer;\n\nnamespace gfx_offload {\n\n    typedef GfxTaskId task_id_type;\n\n    //-----------------------------------------------------------------------\n    // GFX errors checkers.\n    // For more debug output, set GFX_LOG_OFFLOAD=2 macro\n    //-----------------------------------------------------------------------\n\n    // TODO: reconsider error handling approach. If exception is the right way\n    // then need to define and document a specific exception type.\n    inline void throw_gfx_exception() {\n        std::string msg = \"GFX error occurred: \" + std::to_string(_GFX_get_last_error());\n        std::cerr << msg << std::endl;\n        throw msg;\n    }\n\n    inline void check_enqueue_retcode(task_id_type err) {\n        if (err == 0) {\n            throw_gfx_exception();\n        }\n    }\n\n    inline void check_gfx_retcode(task_id_type err) {\n        if (err != GFX_SUCCESS) {\n            throw_gfx_exception();\n        }\n    }\n\n    //---------------------------------------------------------------------\n    // GFX asynchronous offload and share API\n    //---------------------------------------------------------------------\n\n    // Sharing and unsharing data API\n    template<typename DataType, typename SizeType>\n    void share(DataType* p, SizeType n) { check_gfx_retcode(_GFX_share(p, sizeof(*p)*n)); }\n    template<typename DataType>\n    void unshare(DataType* p) { check_gfx_retcode(_GFX_unshare(p)); }\n\n    // Retrieving array pointer from shared gfx_buffer\n    // Other types remain the same\n    template <typename T>\n    T* raw_data(gfx_buffer<T>& buffer) { return buffer.data(); }\n    template <typename T>\n    const T* raw_data(const gfx_buffer<T>& buffer) { return buffer.data(); }\n    template <typename T>\n    T& raw_data(T& data) { return data; }\n    template <typename T>\n    const T& raw_data(const T& data) { return data; }\n\n    // Kernel enqueuing on device with arguments\n    template <typename F, typename ...ArgType>\n    task_id_type run_kernel(F ptr, ArgType&... args) {\n        task_id_type id = _GFX_offload(ptr, raw_data(args)...);\n\n        // Check if something during offload went wrong (ex: driver initialization failure)\n        gfx_offload::check_enqueue_retcode(id);\n\n        return id;\n    }\n\n    // Waiting for tasks completion\n    void wait_for_task(task_id_type id) { check_gfx_retcode(_GFX_wait(id)); }\n\n} // namespace gfx_offload\n\ntemplate <typename T>\nclass gfx_buffer {\npublic:\n\n    typedef typename std::vector<T>::iterator iterator;\n    typedef typename std::vector<T>::const_iterator const_iterator;\n\n    typedef std::size_t size_type;\n\n    gfx_buffer() : my_vector_ptr(std::make_shared< std::vector<T> >()) {}\n    gfx_buffer(size_type size) : my_vector_ptr(std::make_shared< std::vector<T> >(size)) {}\n\n    T* data() { return &(my_vector_ptr->front()); }\n    const T* data() const { return &(my_vector_ptr->front()); }\n\n    size_type size() const { return my_vector_ptr->size(); }\n\n    const_iterator cbegin() const { return my_vector_ptr->cbegin(); }\n    const_iterator cend() const { return my_vector_ptr->cend(); }\n    iterator begin() { return my_vector_ptr->begin(); }\n    iterator end() { return my_vector_ptr->end(); }\n\n    T& operator[](size_type pos) { return (*my_vector_ptr)[pos]; }\n    const T& operator[](size_type pos) const { return (*my_vector_ptr)[pos]; }\n\nprivate:\n    std::shared_ptr< std::vector<T> > my_vector_ptr;\n};\n\ntemplate<typename T>\nclass gfx_async_msg : public tbb::flow::async_msg<T> {\npublic:\n    typedef gfx_offload::task_id_type kernel_id_type;\n\n    gfx_async_msg() : my_task_id(0) {}\n    gfx_async_msg(const T& input_data) : my_data(input_data), my_task_id(0) {}\n\n    T& data() { return my_data; }\n    const T& data() const { return my_data; }\n\n    void set_task_id(kernel_id_type id) { my_task_id = id; }\n    kernel_id_type task_id() const { return my_task_id; }\n\nprivate:\n    T my_data;\n    kernel_id_type my_task_id;\n};\n\nclass gfx_factory {\nprivate:\n\n    // Wrapper for GFX kernel which is just a function\n    class func_wrapper {\n    public:\n\n        template <typename F>\n        func_wrapper(F ptr) { my_ptr = reinterpret_cast<void*>(ptr); }\n\n        template<typename ...Args>\n        void operator()(Args&&... args) {}\n\n        operator void*() { return my_ptr; }\n\n    private:\n        void* my_ptr;\n    };\n\npublic:\n\n    // Device specific types\n    template<typename T> using async_msg_type = gfx_async_msg<T>;\n\n    typedef func_wrapper kernel_type;\n\n    // Empty device type that is needed for Factory Concept\n    // but is not used in gfx_factory\n    typedef struct {} device_type;\n\n    typedef gfx_offload::task_id_type kernel_id_type;\n\n    gfx_factory(tbb::flow::graph& g) : m_graph(g), current_task_id(0) {}\n\n    // Upload data to the device\n    template <typename ...Args>\n    void send_data(device_type /*device*/, Args&... args) {\n        send_data_impl(args...);\n    }\n\n    // Run kernel on the device\n    template <typename ...Args>\n    void send_kernel(device_type /*device*/, const kernel_type& kernel, Args&... args) {\n        // Get packed T data from async_msg<T> and pass it to kernel\n        kernel_id_type id = gfx_offload::run_kernel(kernel, args.data()...);\n\n        // Set id to async_msg\n        set_kernel_id(id, args...);\n\n        // Extend the graph lifetime until the callback completion.\n        m_graph.reserve_wait();\n\n        // Mutex for future assignment\n        std::lock_guard<std::mutex> lock(future_assignment_mutex);\n\n        // Set callback that waits for kernel execution\n        callback_future = std::async(std::launch::async, &gfx_factory::callback<Args...>, this, id, args...);\n    }\n\n    // Finalization action after the kernel run\n    template <typename FinalizeFn, typename ...Args>\n    void finalize(device_type /*device*/, FinalizeFn fn, Args&... /*args*/) {\n        fn();\n    }\n\n    // Empty device selector.\n    // No way to choose a device with GFX API.\n    class dummy_device_selector {\n    public:\n        device_type operator()(gfx_factory& /*factory*/) {\n            return device_type();\n        }\n    };\n\nprivate:\n\n    //---------------------------------------------------------------------\n    // Callback for kernel result\n    //---------------------------------------------------------------------\n\n    template <typename ...Args>\n    void callback(kernel_id_type id, Args... args) {\n        // Waiting for specific tasks id to complete\n        {\n            std::lock_guard<std::mutex> lock(task_wait_mutex);\n            if (current_task_id < id) {\n                gfx_offload::wait_for_task(id);\n                current_task_id = id;\n            }\n        }\n\n        // Get result from device and set to async_msg (args)\n        receive_data(args...);\n\n        // Data was sent to the graph, release the reference\n        m_graph.release_wait();\n    }\n\n    //---------------------------------------------------------------------\n    // send_data() arguments processing\n    //---------------------------------------------------------------------\n\n    // GFX buffer shared data with device that will be executed on\n    template <typename T>\n    void share_data(T) {}\n\n    template <typename T>\n    void share_data(gfx_buffer<T>& buffer) {\n        gfx_offload::share(buffer.data(), buffer.size());\n    }\n\n    template <typename T>\n    void send_arg(T) {}\n\n    template <typename T>\n    void send_arg(async_msg_type<T>& msg) {\n        share_data(msg.data());\n    }\n\n    void send_data_impl() {}\n\n    template <typename T, typename ...Rest>\n    void send_data_impl(T& arg, Rest&... args) {\n        send_arg(arg);\n        send_data_impl(args...);\n    }\n\n    //----------------------------------------------------------------------\n    // send_kernel() arguments processing\n    //----------------------------------------------------------------------\n\n    template <typename T>\n    void set_kernel_id_arg(kernel_id_type, T) {}\n\n    template <typename T>\n    void set_kernel_id_arg(kernel_id_type id, async_msg_type<T>& msg) {\n        msg.set_task_id(id);\n    }\n\n    void set_kernel_id(kernel_id_type) {}\n\n    template <typename T, typename ...Rest>\n    void set_kernel_id(kernel_id_type id, T& arg, Rest&... args) {\n        set_kernel_id_arg(id, arg);\n        set_kernel_id(id, args...);\n    }\n\n    //-----------------------------------------------------------------------\n    // Arguments processing after kernel execution.\n    // Unsharing buffers and forwarding results to the graph\n    //-----------------------------------------------------------------------\n\n    // After kernel execution the data should be unshared\n    template <typename T>\n    void unshare_data(T) {}\n\n    template <typename T>\n    void unshare_data(gfx_buffer<T>& buffer) {\n        gfx_offload::unshare(buffer.data());\n    }\n\n    template <typename T>\n    void receive_arg(T) {}\n\n    template <typename T>\n    void receive_arg(async_msg_type<T>& msg) {\n        unshare_data(msg.data());\n        msg.set(msg.data());\n    }\n\n    void receive_data() {}\n\n    template <typename T, typename ...Rest>\n    void receive_data(T& arg, Rest&... args) {\n        receive_arg(arg);\n        receive_data(args...);\n    }\n\n    //-----------------------------------------------------------------------\n    int current_task_id;\n\n    std::future<void> callback_future;\n    tbb::flow::graph& m_graph;\n\n    std::mutex future_assignment_mutex;\n    std::mutex task_wait_mutex;\n};\n\n} // namespace interface9\n\nusing interface9::gfx_factory;\nusing interface9::gfx_buffer;\n\n} // namespace flow\n\n} // namespace tbb\n\n#endif // __TBB_PREVIEW_GFX_FACTORY\n\n#endif // __TBB_flow_graph_gfx_factory_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/global_control.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_global_control_H\n#define __TBB_global_control_H\n\n#if !TBB_PREVIEW_GLOBAL_CONTROL && !__TBB_BUILD\n#error Set TBB_PREVIEW_GLOBAL_CONTROL before including global_control.h\n#endif\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace interface9 {\n\nclass global_control {\npublic:\n    enum parameter {\n        max_allowed_parallelism,\n        thread_stack_size,\n        parameter_max // insert new parameters above this point\n    };\n\n    global_control(parameter p, size_t value) :\n        my_value(value), my_next(NULL), my_param(p) {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (p==thread_stack_size)\n            return;\n#elif __TBB_x86_64 && (_WIN32 || _WIN64)\n        if (p==thread_stack_size)\n            __TBB_ASSERT_RELEASE((unsigned)value == value, \"Stack size is limited to unsigned int range\");\n#endif\n        if (my_param==max_allowed_parallelism)\n            __TBB_ASSERT_RELEASE(my_value>0, \"max_allowed_parallelism cannot be 0.\");\n        internal_create();\n    }\n\n    ~global_control() {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter. Probably the object was corrupted.\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (my_param==thread_stack_size)\n            return;\n#endif\n        internal_destroy();\n    }\n\n    static size_t active_value(parameter p) {\n        __TBB_ASSERT(p < parameter_max, \"Invalid parameter\");\n        return active_value((int)p);\n    }\nprivate:\n    size_t    my_value;\n    global_control *my_next;\n    parameter my_param;\n\n    void __TBB_EXPORTED_METHOD internal_create();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n    static size_t __TBB_EXPORTED_FUNC active_value(int param);\n};\n} // namespace interface9\n\nusing interface9::global_control;\n\n} // tbb\n\n#endif // __TBB_global_control_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks classes and functions.\n\n<BR><A HREF=\".\">Click here</A> to see all files in the directory.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"compat\">compat</A>\n<DD>Include files for source level compatibility with other frameworks.\n<DT><A HREF=\"internal\">internal</A>\n<DD>Include files with implementation details; not for direct use.\n<DT><A HREF=\"machine\">machine</A>\n<DD>Include files for low-level architecture specific functionality; not for direct use.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_aggregator_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__aggregator_impl_H\n#define __TBB__aggregator_impl_H\n\n#include \"../atomic.h\"\n#if !__TBBMALLOC_BUILD\n#include \"../tbb_profiling.h\"\n#endif\n\nnamespace tbb {\nnamespace interface6 {\nnamespace internal {\n\nusing namespace tbb::internal;\n\n//! aggregated_operation base class\ntemplate <typename Derived>\nclass aggregated_operation {\n public:\n    //! Zero value means \"wait\" status, all other values are \"user\" specified values and are defined into the scope of a class which uses \"status\".\n    uintptr_t status;\n\n    Derived *next;\n    aggregated_operation() : status(0), next(NULL) {}\n};\n\n//! Aggregator base class\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread.  operation_type must be derived from\n    aggregated_operation. The parameter handler_type is a functor that will be passed the\n    list of operations and is expected to handle each operation appropriately, setting the\n    status of each operation to non-zero.*/\ntemplate < typename operation_type >\nclass aggregator_generic {\npublic:\n    aggregator_generic() : handler_busy(false) { pending_operations = NULL; }\n\n    //! Execute an operation\n    /** Places an operation into the waitlist (pending_operations), and either handles the list,\n        or waits for the operation to complete, or returns.\n        The long_life_time parameter specifies the life time of the given operation object.\n        Operations with long_life_time == true may be accessed after execution.\n        A \"short\" life time operation (long_life_time == false) can be destroyed\n        during execution, and so any access to it after it was put into the waitlist,\n        including status check, is invalid. As a consequence, waiting for completion\n        of such operation causes undefined behavior.\n    */\n    template < typename handler_type >\n    void execute(operation_type *op, handler_type &handle_operations, bool long_life_time = true) {\n        operation_type *res;\n        // op->status should be read before inserting the operation into the\n        // aggregator waitlist since it can become invalid after executing a\n        // handler (if the operation has 'short' life time.)\n        const uintptr_t status = op->status;\n\n        // ITT note: &(op->status) tag is used to cover accesses to this op node. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op->status));\n        // insert the operation in the queue.\n        do {\n            // Tools may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op->next = res = pending_operations; // NOT A RACE\n        } while (pending_operations.compare_and_swap(op, res) != res);\n        if (!res) { // first in the list; handle the operations.\n            // ITT note: &pending_operations tag covers access to the handler_busy flag,\n            // which this waiting handler thread will try to set before entering\n            // handle_operations.\n            call_itt_notify(acquired, &pending_operations);\n            start_handle_operations(handle_operations);\n            // The operation with 'short' life time can already be destroyed.\n            if (long_life_time)\n                __TBB_ASSERT(op->status, NULL);\n        }\n        // not first; wait for op to be ready.\n        else if (!status) { // operation is blocking here.\n            __TBB_ASSERT(long_life_time, \"Waiting for an operation object that might be destroyed during processing.\");\n            call_itt_notify(prepare, &(op->status));\n            spin_wait_while_eq(op->status, uintptr_t(0));\n            itt_load_word_with_acquire(op->status);\n        }\n    }\n\n private:\n    //! An atomically updated list (aka mailbox) of pending operations\n    atomic<operation_type *> pending_operations;\n    //! Controls thread access to handle_operations\n    uintptr_t handler_busy;\n\n    //! Trigger the handling of operations when the handler is free\n    template < typename handler_type >\n    void start_handle_operations( handler_type &handle_operations ) {\n        operation_type *op_list;\n\n        // ITT note: &handler_busy tag covers access to pending_operations as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in pending_operations have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get the handler_busy:\n        // only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &pending_operations tag covers access to the handler_busy flag\n        // itself. Capturing the state of the pending_operations signifies that\n        // handler_busy has been set and a new active handler will now process that list's\n        // operations.\n        call_itt_notify(releasing, &pending_operations);\n        // grab pending_operations\n        op_list = pending_operations.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(op_list);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\ntemplate < typename handler_type, typename operation_type >\nclass aggregator : public aggregator_generic<operation_type> {\n    handler_type handle_operations;\npublic:\n    aggregator() {}\n    explicit aggregator(handler_type h) : handle_operations(h) {}\n\n    void initialize_handler(handler_type h) { handle_operations = h; }\n\n    void execute(operation_type *op) {\n        aggregator_generic<operation_type>::execute(op, handle_operations);\n    }\n};\n\n// the most-compatible friend declaration (vs, gcc, icc) is\n//    template<class U, class V> friend class aggregating_functor;\ntemplate<typename aggregating_class, typename operation_list>\nclass aggregating_functor {\n    aggregating_class *fi;\npublic:\n    aggregating_functor() {}\n    aggregating_functor(aggregating_class *fi_) : fi(fi_) {}\n    void operator()(operation_list* op_list) { fi->handle_operations(op_list); }\n};\n\n} // namespace internal\n} // namespace interface6\n\nnamespace internal {\n    using interface6::internal::aggregated_operation;\n    using interface6::internal::aggregator_generic;\n    using interface6::internal::aggregator;\n    using interface6::internal::aggregating_functor;\n} // namespace internal\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_concurrent_queue_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__concurrent_queue_impl_H\n#define __TBB__concurrent_queue_impl_H\n\n#ifndef __TBB_concurrent_queue_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../atomic.h\"\n#include \"../spin_mutex.h\"\n#include \"../cache_aligned_allocator.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n#include <new>\n#include __TBB_STD_SWAP_HEADER\n#include <iterator>\n\nnamespace tbb {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n\n// forward declaration\nnamespace strict_ppl {\ntemplate<typename T, typename A> class concurrent_queue;\n}\n\ntemplate<typename T, typename A> class concurrent_bounded_queue;\n\n#endif\n\n//! For internal use only.\nnamespace strict_ppl {\n\n//! @cond INTERNAL\nnamespace internal {\n\nusing namespace tbb::internal;\n\ntypedef size_t ticket;\n\ntemplate<typename T> class micro_queue ;\ntemplate<typename T> class micro_queue_pop_finalizer ;\ntemplate<typename T> class concurrent_queue_base_v3;\ntemplate<typename T> struct concurrent_queue_rep;\n\n//! parts of concurrent_queue_rep that do not have references to micro_queue\n/**\n * For internal use only.\n */\nstruct concurrent_queue_rep_base : no_copy {\n    template<typename T> friend class micro_queue;\n    template<typename T> friend class concurrent_queue_base_v3;\n\nprotected:\n    //! Approximately n_queue/golden ratio\n    static const size_t phi = 3;\n\npublic:\n    // must be power of 2\n    static const size_t n_queue = 8;\n\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    atomic<ticket> head_counter;\n    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n    atomic<ticket> tail_counter;\n    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    //! number of invalid entries in the queue\n    atomic<size_t> n_invalid_entries;\n\n    char pad3[NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(atomic<size_t>)];\n} ;\n\ninline bool is_valid_page(const concurrent_queue_rep_base::page* p) {\n    return uintptr_t(p)>1;\n}\n\n//! Abstract class to define interface for page allocation/deallocation\n/**\n * For internal use only.\n */\nclass concurrent_queue_page_allocator\n{\n    template<typename T> friend class micro_queue ;\n    template<typename T> friend class micro_queue_pop_finalizer ;\nprotected:\n    virtual ~concurrent_queue_page_allocator() {}\nprivate:\n    virtual concurrent_queue_rep_base::page* allocate_page() = 0;\n    virtual void deallocate_page( concurrent_queue_rep_base::page* p ) = 0;\n} ;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n// unary minus operator applied to unsigned type, result still unsigned\n#pragma warning( push )\n#pragma warning( disable: 4146 )\n#endif\n\n//! A queue using simple locking.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\ntemplate<typename T>\nclass micro_queue : no_copy {\npublic:\n    typedef void (*item_constructor_t)(T* location, const void* src);\nprivate:\n    typedef concurrent_queue_rep_base::page page;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    void copy_item( page& dst, size_t dindex, const void* src, item_constructor_t construct_item ) {\n        construct_item( &get_ref(dst, dindex), src );\n    }\n\n    void copy_item( page& dst, size_t dindex, const page& src, size_t sindex,\n        item_constructor_t construct_item )\n    {\n        T& src_item = get_ref( const_cast<page&>(src), sindex );\n        construct_item( &get_ref(dst, dindex), static_cast<const void*>(&src_item) );\n    }\n\n    void assign_and_destroy_item( void* dst, page& src, size_t index ) {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    void spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const ;\n\npublic:\n    friend class micro_queue_pop_finalizer<T>;\n\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\n    static T& get_ref( page& p, size_t index ) {\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    atomic<page*> head_page;\n    atomic<ticket> head_counter;\n\n    atomic<page*> tail_page;\n    atomic<ticket> tail_counter;\n\n    spin_mutex page_mutex;\n\n    void push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    bool pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;\n\n    micro_queue& assign( const micro_queue& src, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    page* make_copy( concurrent_queue_base_v3<T>& base, const page* src_page, size_t begin_in_page,\n        size_t end_in_page, ticket& g_index, item_constructor_t construct_item ) ;\n\n    void invalidate_page_and_rethrow( ticket k ) ;\n};\n\ntemplate<typename T>\nvoid micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const {\n    for( atomic_backoff b(true);;b.pause() ) {\n        ticket c = counter;\n        if( c==k ) return;\n        else if( c&1 ) {\n            ++rb.n_invalid_entries;\n            throw_exception( eid_bad_last_alloc );\n        }\n    }\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    k &= -concurrent_queue_rep_base::n_queue;\n    page* p = NULL;\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page);\n    if( !index ) {\n        __TBB_TRY {\n            concurrent_queue_page_allocator& pa = base;\n            p = pa.allocate_page();\n        } __TBB_CATCH (...) {\n            ++base.my_rep->n_invalid_entries;\n            invalidate_page_and_rethrow( k );\n        }\n        p->mask = 0;\n        p->next = NULL;\n    }\n\n    if( tail_counter != k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );\n    call_itt_notify(acquired, &tail_counter);\n\n    if( p ) {\n        spin_mutex::scoped_lock lock( page_mutex );\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = p;\n        else\n            head_page = p;\n        tail_page = p;\n    } else {\n        p = tail_page;\n    }\n\n    __TBB_TRY {\n        copy_item( *p, index, item, construct_item );\n        // If no exception was thrown, mark item as present.\n        itt_hide_store_word(p->mask,  p->mask | uintptr_t(1)<<index);\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n    } __TBB_CATCH (...) {\n        ++base.my_rep->n_invalid_entries;\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n        __TBB_RETHROW();\n    }\n}\n\ntemplate<typename T>\nbool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) {\n    k &= -concurrent_queue_rep_base::n_queue;\n    if( head_counter!=k ) spin_wait_until_eq( head_counter, k );\n    call_itt_notify(acquired, &head_counter);\n    if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );\n    call_itt_notify(acquired, &tail_counter);\n    page *p = head_page;\n    __TBB_ASSERT( p, NULL );\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n    bool success = false;\n    {\n        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? p : NULL );\n        if( p->mask & uintptr_t(1)<<index ) {\n            success = true;\n            assign_and_destroy_item( dst, *p, index );\n        } else {\n            --base.my_rep->n_invalid_entries;\n        }\n    }\n    return success;\n}\n\ntemplate<typename T>\nmicro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    head_counter = src.head_counter;\n    tail_counter = src.tail_counter;\n\n    const page* srcp = src.head_page;\n    if( is_valid_page(srcp) ) {\n        ticket g_index = head_counter;\n        __TBB_TRY {\n            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;\n            size_t index = modulo_power_of_two( head_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n            size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;\n\n            head_page = make_copy( base, srcp, index, end_in_first_page, g_index, construct_item );\n            page* cur_page = head_page;\n\n            if( srcp != src.tail_page ) {\n                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {\n                    cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index, construct_item );\n                    cur_page = cur_page->next;\n                }\n\n                __TBB_ASSERT( srcp==src.tail_page, NULL );\n                size_t last_index = modulo_power_of_two( tail_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n                if( last_index==0 ) last_index = base.my_rep->items_per_page;\n\n                cur_page->next = make_copy( base, srcp, 0, last_index, g_index, construct_item );\n                cur_page = cur_page->next;\n            }\n            tail_page = cur_page;\n        } __TBB_CATCH (...) {\n            invalidate_page_and_rethrow( g_index );\n        }\n    } else {\n        head_page = tail_page = NULL;\n    }\n    return *this;\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {\n    // Append an invalid page at address 1 so that no more pushes are allowed.\n    page* invalid_page = (page*)uintptr_t(1);\n    {\n        spin_mutex::scoped_lock lock( page_mutex );\n        itt_store_word_with_release(tail_counter, k+concurrent_queue_rep_base::n_queue+1);\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = invalid_page;\n        else\n            head_page = invalid_page;\n        tail_page = invalid_page;\n    }\n    __TBB_RETHROW();\n}\n\ntemplate<typename T>\nconcurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base,\n    const concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page,\n    ticket& g_index, item_constructor_t construct_item )\n{\n    concurrent_queue_page_allocator& pa = base;\n    page* new_page = pa.allocate_page();\n    new_page->next = NULL;\n    new_page->mask = src_page->mask;\n    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )\n        if( new_page->mask & uintptr_t(1)<<begin_in_page )\n            copy_item( *new_page, begin_in_page, *src_page, begin_in_page, construct_item );\n    return new_page;\n}\n\ntemplate<typename T>\nclass micro_queue_pop_finalizer: no_copy {\n    typedef concurrent_queue_rep_base::page page;\n    ticket my_ticket;\n    micro_queue<T>& my_queue;\n    page* my_page;\n    concurrent_queue_page_allocator& allocator;\npublic:\n    micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :\n        my_ticket(k), my_queue(queue), my_page(p), allocator(b)\n    {}\n    ~micro_queue_pop_finalizer() ;\n};\n\ntemplate<typename T>\nmicro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {\n    page* p = my_page;\n    if( is_valid_page(p) ) {\n        spin_mutex::scoped_lock lock( my_queue.page_mutex );\n        page* q = p->next;\n        my_queue.head_page = q;\n        if( !is_valid_page(q) ) {\n            my_queue.tail_page = NULL;\n        }\n    }\n    itt_store_word_with_release(my_queue.head_counter, my_ticket);\n    if( is_valid_page(p) ) {\n        allocator.deallocate_page( p );\n    }\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif // warning 4146 is back\n\ntemplate<typename T> class concurrent_queue_iterator_rep ;\ntemplate<typename T> class concurrent_queue_iterator_base_v3;\n\n//! representation of concurrent_queue_base\n/**\n * the class inherits from concurrent_queue_rep_base and defines an array of micro_queue<T>'s\n */\ntemplate<typename T>\nstruct concurrent_queue_rep : public concurrent_queue_rep_base {\n    micro_queue<T> array[n_queue];\n\n    //! Map ticket to an array index\n    static size_t index( ticket k ) {\n        return k*phi%n_queue;\n    }\n\n    micro_queue<T>& choose( ticket k ) {\n        // The formula here approximates LRU in a cache-oblivious way.\n        return array[index(k)];\n    }\n};\n\n//! base class of concurrent_queue\n/**\n * The class implements the interface defined by concurrent_queue_page_allocator\n * and has a pointer to an instance of concurrent_queue_rep.\n */\ntemplate<typename T>\nclass concurrent_queue_base_v3: public concurrent_queue_page_allocator {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep<T>* my_rep;\n\n    friend struct concurrent_queue_rep<T>;\n    friend class micro_queue<T>;\n    friend class concurrent_queue_iterator_rep<T>;\n    friend class concurrent_queue_iterator_base_v3<T>;\n\nprotected:\n    typedef typename concurrent_queue_rep<T>::page page;\n\nprivate:\n    typedef typename micro_queue<T>::padded_page padded_page;\n    typedef typename micro_queue<T>::item_constructor_t item_constructor_t;\n\n    virtual page *allocate_page() __TBB_override {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        return reinterpret_cast<page*>(allocate_block ( n ));\n    }\n\n    virtual void deallocate_page( concurrent_queue_rep_base::page *p ) __TBB_override {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        deallocate_block( reinterpret_cast<void*>(p), n );\n    }\n\n    //! custom allocator\n    virtual void *allocate_block( size_t n ) = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_block( void *p, size_t n ) = 0;\n\nprotected:\n    concurrent_queue_base_v3();\n\n    virtual ~concurrent_queue_base_v3() {\n#if TBB_USE_ASSERT\n        size_t nq = my_rep->n_queue;\n        for( size_t i=0; i<nq; i++ )\n            __TBB_ASSERT( my_rep->array[i].tail_page==NULL, \"pages were not freed properly\" );\n#endif /* TBB_USE_ASSERT */\n        cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);\n    }\n\n    //! Enqueue item at tail of queue\n    void internal_push( const void* src, item_constructor_t construct_item ) {\n         concurrent_queue_rep<T>& r = *my_rep;\n         ticket k = r.tail_counter++;\n         r.choose(k).push( src, k, *this, construct_item );\n    }\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool internal_try_pop( void* dst ) ;\n\n    //! Get size of queue; result may be invalid if queue is modified concurrently\n    size_t internal_size() const ;\n\n    //! check if the queue is empty; thread safe\n    bool internal_empty() const ;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void internal_finish_clear() ;\n\n    //! Obsolete\n    void internal_throw_exception() const {\n        throw_exception( eid_bad_alloc );\n    }\n\n    //! copy or move internal representation\n    void assign( const concurrent_queue_base_v3& src, item_constructor_t construct_item ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap internal representation\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate<typename T>\nconcurrent_queue_base_v3<T>::concurrent_queue_base_v3() {\n    const size_t item_size = sizeof(T);\n    my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);\n    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, \"alignment error\" );\n    memset(static_cast<void*>(my_rep),0,sizeof(concurrent_queue_rep<T>));\n    my_rep->item_size = item_size;\n    my_rep->items_per_page = item_size<=  8 ? 32 :\n                             item_size<= 16 ? 16 :\n                             item_size<= 32 ?  8 :\n                             item_size<= 64 ?  4 :\n                             item_size<=128 ?  2 :\n                             1;\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_try_pop( void* dst ) {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket k;\n    do {\n        k = r.head_counter;\n        for(;;) {\n            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {\n                // Queue is empty\n                return false;\n            }\n            // Queue had item with ticket k when we looked.  Attempt to get that item.\n            ticket tk=k;\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (push)\n    #pragma warning (disable: 4267)\n#endif\n            k = r.head_counter.compare_and_swap( tk+1, tk );\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (pop)\n#endif\n            if( k==tk )\n                break;\n            // Another thread snatched the item, retry.\n        }\n    } while( !r.choose( k ).pop( dst, k, *this ) );\n    return true;\n}\n\ntemplate<typename T>\nsize_t concurrent_queue_base_v3<T>::internal_size() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );\n    ticket hc = r.head_counter;\n    size_t nie = r.n_invalid_entries;\n    ticket tc = r.tail_counter;\n    __TBB_ASSERT( hc!=tc || !nie, NULL );\n    ptrdiff_t sz = tc-hc-nie;\n    return sz<0 ? 0 :  size_t(sz);\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_empty() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket tc = r.tail_counter;\n    ticket hc = r.head_counter;\n    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.\n    return tc==r.tail_counter && tc==hc+r.n_invalid_entries ;\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::internal_finish_clear() {\n    concurrent_queue_rep<T>& r = *my_rep;\n    size_t nq = r.n_queue;\n    for( size_t i=0; i<nq; ++i ) {\n        page* tp = r.array[i].tail_page;\n        if( is_valid_page(tp) ) {\n            __TBB_ASSERT( r.array[i].head_page==tp, \"at most one page should remain\" );\n            deallocate_page( tp );\n            r.array[i].tail_page = NULL;\n        } else\n            __TBB_ASSERT( !is_valid_page(r.array[i].head_page), \"head page pointer corrupt?\" );\n    }\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::assign( const concurrent_queue_base_v3& src,\n    item_constructor_t construct_item )\n{\n    concurrent_queue_rep<T>& r = *my_rep;\n    r.items_per_page = src.my_rep->items_per_page;\n\n    // copy concurrent_queue_rep data\n    r.head_counter = src.my_rep->head_counter;\n    r.tail_counter = src.my_rep->tail_counter;\n    r.n_invalid_entries = src.my_rep->n_invalid_entries;\n\n    // copy or move micro_queues\n    for( size_t i = 0; i < r.n_queue; ++i )\n        r.array[i].assign( src.my_rep->array[i], *this, construct_item);\n\n    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter,\n            \"the source concurrent queue should not be concurrently modified.\" );\n}\n\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\ntemplate<typename T>\nclass concurrent_queue_iterator_rep: no_assign {\n    typedef typename micro_queue<T>::padded_page padded_page;\npublic:\n    ticket head_counter;\n    const concurrent_queue_base_v3<T>& my_queue;\n    typename concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];\n    concurrent_queue_iterator_rep( const concurrent_queue_base_v3<T>& queue ) :\n        head_counter(queue.my_rep->head_counter),\n        my_queue(queue)\n    {\n        for( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )\n            array[k] = queue.my_rep->array[k].head_page;\n    }\n\n    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.\n    bool get_item( T*& item, size_t k ) ;\n};\n\ntemplate<typename T>\nbool concurrent_queue_iterator_rep<T>::get_item( T*& item, size_t k ) {\n    if( k==my_queue.my_rep->tail_counter ) {\n        item = NULL;\n        return true;\n    } else {\n        typename concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];\n        __TBB_ASSERT(p,NULL);\n        size_t i = modulo_power_of_two( k/concurrent_queue_rep<T>::n_queue, my_queue.my_rep->items_per_page );\n        item = &micro_queue<T>::get_ref(*p,i);\n        return (p->mask & uintptr_t(1)<<i)!=0;\n    }\n}\n\n//! Constness-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\ntemplate<typename Value>\nclass concurrent_queue_iterator_base_v3 : no_assign {\n    //! Represents concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep<Value>* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\nprotected:\n    //! Pointer to current item\n    Value* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {\n#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN\n        __TBB_compiler_fence();\n#endif\n    }\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i )\n    : no_assign(), my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) ;\n\n    //! Assignment\n    void assign( const concurrent_queue_iterator_base_v3<Value>& other ) ;\n\n    //! Advance iterator one step towards tail of queue.\n    void advance() ;\n\n    //! Destructor\n    ~concurrent_queue_iterator_base_v3() {\n        cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n        my_rep = NULL;\n    }\n};\n\ntemplate<typename Value>\nconcurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) {\n    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n    new( my_rep ) concurrent_queue_iterator_rep<Value>(queue);\n    size_t k = my_rep->head_counter;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::assign( const concurrent_queue_iterator_base_v3<Value>& other ) {\n    if( my_rep!=other.my_rep ) {\n        if( my_rep ) {\n            cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n            my_rep = NULL;\n        }\n        if( other.my_rep ) {\n            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n            new( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );\n        }\n    }\n    my_item = other.my_item;\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::advance() {\n    __TBB_ASSERT( my_item, \"attempt to increment iterator past end of queue\" );\n    size_t k = my_rep->head_counter;\n    const concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;\n#if TBB_USE_ASSERT\n    Value* tmp;\n    my_rep->get_item(tmp,k);\n    __TBB_ASSERT( my_item==tmp, NULL );\n#endif /* TBB_USE_ASSERT */\n    size_t i = modulo_power_of_two( k/concurrent_queue_rep<Value>::n_queue, queue.my_rep->items_per_page );\n    if( i==queue.my_rep->items_per_page-1 ) {\n        typename concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];\n        root = root->next;\n    }\n    // advance k\n    my_rep->head_counter = ++k;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\n//! Similar to C++0x std::remove_cv\n/** \"tbb_\" prefix added to avoid overload confusion with C++0x implementations. */\ntemplate<typename T> struct tbb_remove_cv {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<volatile T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const volatile T> {typedef T type;};\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>,\n        public std::iterator<std::forward_iterator_tag,Value> {\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::strict_ppl::concurrent_queue;\n#else\npublic:\n#endif\n    //! Construct iterator pointing to head of queue.\n    explicit concurrent_queue_iterator( const concurrent_queue_base_v3<typename tbb_remove_cv<Value>::type>& queue ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor.\n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        this->assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(this->my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        this->advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal\n\n//! @endcond\n\n} // namespace strict_ppl\n\n//! @cond INTERNAL\nnamespace internal {\n\nclass concurrent_queue_rep;\nclass concurrent_queue_iterator_rep;\nclass concurrent_queue_iterator_base_v3;\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\n//! For internal use only.\n/** Type-independent portion of concurrent_queue.\n    @ingroup containers */\nclass concurrent_queue_base_v3: no_copy {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep* my_rep;\n\n    friend class concurrent_queue_rep;\n    friend struct micro_queue;\n    friend class micro_queue_pop_finalizer;\n    friend class concurrent_queue_iterator_rep;\n    friend class concurrent_queue_iterator_base_v3;\nprotected:\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    //! Capacity of the queue\n    ptrdiff_t my_capacity;\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    enum copy_specifics { copy, move };\n\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\npublic:\n#endif\n    template<typename T>\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\nprivate:\n    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;\nprotected:\n    __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );\n    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();\n\n    //! Enqueue item at tail of queue using copy operation\n    void __TBB_EXPORTED_METHOD internal_push( const void* src );\n\n    //! Dequeue item from head of queue\n    void __TBB_EXPORTED_METHOD internal_pop( void* dst );\n\n    //! Abort all pending queue operations\n    void __TBB_EXPORTED_METHOD internal_abort();\n\n    //! Attempt to enqueue item onto queue using copy operation\n    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );\n\n    //! Get size of queue\n    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;\n\n    //! Check if the queue is emtpy\n    bool __TBB_EXPORTED_METHOD internal_empty() const;\n\n    //! Set the queue capacity\n    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );\n\n    //! custom allocator\n    virtual page *allocate_page() = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_page( page *p ) = 0;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void __TBB_EXPORTED_METHOD internal_finish_clear() ;\n\n    //! throw an exception\n    void __TBB_EXPORTED_METHOD internal_throw_exception() const;\n\n    //! copy internal representation\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_base_v3& src ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap queues\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_capacity, src.my_capacity );\n        std::swap( items_per_page, src.items_per_page );\n        std::swap( item_size, src.item_size );\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Enqueues item at tail of queue using specified operation (copy or move)\n    void internal_insert_item( const void* src, copy_specifics op_type );\n\n    //! Attempts to enqueue at tail of queue using specified operation (copy or move)\n    bool internal_insert_if_not_full( const void* src, copy_specifics op_type );\n\n    //! Assigns one queue to another using specified operation (copy or move)\n    void internal_assign( const concurrent_queue_base_v3& src, copy_specifics op_type );\nprivate:\n    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n};\n\n//! For internal use only.\n/** Backward compatible modification of concurrent_queue_base_v3\n    @ingroup containers */\nclass concurrent_queue_base_v8: public concurrent_queue_base_v3 {\nprotected:\n    concurrent_queue_base_v8( size_t item_sz ) : concurrent_queue_base_v3( item_sz ) {}\n\n    //! move items\n    void __TBB_EXPORTED_METHOD move_content( concurrent_queue_base_v8& src ) ;\n\n    //! Attempt to enqueue item onto queue using move operation\n    bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full( const void* src );\n\n    //! Enqueue item at tail of queue using move operation\n    void __TBB_EXPORTED_METHOD internal_push_move( const void* src );\nprivate:\n    friend struct micro_queue;\n    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n    virtual void move_item( page& dst, size_t index, const void* src ) = 0;\n};\n\n//! Type-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\nclass concurrent_queue_iterator_base_v3 {\n    //! concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    void initialize( const concurrent_queue_base_v3& queue, size_t offset_of_data );\nprotected:\n    //! Pointer to current item\n    void* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Obsolete entry point for constructing iterator pointing to head of queue.\n    /** Does not work correctly for SSE types. */\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue );\n\n    //! Construct iterator pointing to head of queue.\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue, size_t offset_of_data );\n\n    //! Assignment\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base_v3& i );\n\n    //! Advance iterator one step towards tail of queue.\n    void __TBB_EXPORTED_METHOD advance();\n\n    //! Destructor\n    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();\n};\n\ntypedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base,\n        public std::iterator<std::forward_iterator_tag,Value> {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::concurrent_bounded_queue;\n#else\npublic:\n#endif\n\n    //! Construct iterator pointing to head of queue.\n    explicit concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :\n        concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor.\n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal;\n\n//! @endcond\n\n} // namespace tbb\n\n#endif /* __TBB__concurrent_queue_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_concurrent_unordered_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB__concurrent_unordered_impl_H\n#define __TBB__concurrent_unordered_impl_H\n#if !defined(__TBB_concurrent_unordered_map_H) && !defined(__TBB_concurrent_unordered_set_H) && !defined(__TBB_concurrent_hash_map_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <functional>   // Need std::equal_to (in ../concurrent_unordered_*.h)\n#include <string>       // For tbb_hasher\n#include <cstring>      // Need std::memset\n#include __TBB_STD_SWAP_HEADER\n\n#include \"../atomic.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_allocator.h\"\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#include \"_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate <typename T, typename Allocator>\nclass split_ordered_list;\ntemplate <typename Traits>\nclass concurrent_unordered_base;\n\n// Forward list iterators (without skipping dummy elements)\ntemplate<class Solist, typename Value>\nclass flist_iterator : public std::iterator<std::forward_iterator_tag, Value>\n{\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n    template<class M, typename V>\n    friend class flist_iterator;\n\n    typedef typename Solist::nodeptr_t nodeptr_t;\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    flist_iterator() : my_node_ptr(0) {}\n    flist_iterator( const flist_iterator<Solist, typename Solist::value_type> &other )\n        : my_node_ptr(other.my_node_ptr) {}\n\n    reference operator*() const { return my_node_ptr->my_element; }\n    pointer operator->() const { return &**this; }\n\n    flist_iterator& operator++() {\n        my_node_ptr = my_node_ptr->my_next;\n        return *this;\n    }\n\n    flist_iterator operator++(int) {\n        flist_iterator tmp = *this;\n        ++*this;\n        return tmp;\n    }\n\nprotected:\n    flist_iterator(nodeptr_t pnode) : my_node_ptr(pnode) {}\n    nodeptr_t get_node_ptr() const { return my_node_ptr; }\n\n    nodeptr_t my_node_ptr;\n\n    template<typename M, typename T, typename U>\n    friend bool operator==( const flist_iterator<M,T> &i, const flist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const flist_iterator<M,T>& i, const flist_iterator<M,U>& j );\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const flist_iterator<Solist,T> &i, const flist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const flist_iterator<Solist,T>& i, const flist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr;\n}\n\n// Split-order list iterators, needed to skip dummy elements\ntemplate<class Solist, typename Value>\nclass solist_iterator : public flist_iterator<Solist, Value>\n{\n    typedef flist_iterator<Solist, Value> base_type;\n    typedef typename Solist::nodeptr_t nodeptr_t;\n    using base_type::get_node_ptr;\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template<class M, typename V>\n    friend class solist_iterator;\n    template<typename M, typename T, typename U>\n    friend bool operator==( const solist_iterator<M,T> &i, const solist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const solist_iterator<M,T>& i, const solist_iterator<M,U>& j );\n\n    const Solist *my_list_ptr;\n    solist_iterator(nodeptr_t pnode, const Solist *plist) : base_type(pnode), my_list_ptr(plist) {}\n\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    solist_iterator() {}\n    solist_iterator(const solist_iterator<Solist, typename Solist::value_type> &other )\n        : base_type(other), my_list_ptr(other.my_list_ptr) {}\n\n    reference operator*() const {\n        return this->base_type::operator*();\n    }\n\n    pointer operator->() const {\n        return (&**this);\n    }\n\n    solist_iterator& operator++() {\n        do ++(*(base_type *)this);\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (*this);\n    }\n\n    solist_iterator operator++(int) {\n        solist_iterator tmp = *this;\n        do ++*this;\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (tmp);\n    }\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr && i.my_list_ptr == j.my_list_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const solist_iterator<Solist,T>& i, const solist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr || i.my_list_ptr != j.my_list_ptr;\n}\n\n// Forward type and class definitions\ntypedef size_t sokey_t;\n\n\n// Forward list in which elements are sorted in a split-order\ntemplate <typename T, typename Allocator>\nclass split_ordered_list\n{\npublic:\n    typedef split_ordered_list<T, Allocator> self_type;\n    typedef typename Allocator::template rebind<T>::other allocator_type;\n    struct node;\n    typedef node *nodeptr_t;\n\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::value_type value_type;\n\n    typedef solist_iterator<self_type, const value_type> const_iterator;\n    typedef solist_iterator<self_type, value_type> iterator;\n    typedef flist_iterator<self_type, const value_type> raw_const_iterator;\n    typedef flist_iterator<self_type, value_type> raw_iterator;\n\n    // Node that holds the element in a split-ordered list\n    struct node : tbb::internal::no_assign\n    {\n    private:\n        // for compilers that try to generate default constructors though they are not needed.\n        node();  // VS 2008, 2010, 2012\n    public:\n        // Initialize the node with the given order key\n        void init(sokey_t order_key) {\n            my_order_key = order_key;\n            my_next = NULL;\n        }\n\n        // Return the order key (needed for hashing)\n        sokey_t get_order_key() const { // TODO: remove\n            return my_order_key;\n        }\n\n        // Inserts the new element in the list in an atomic fashion\n        nodeptr_t atomic_set_next(nodeptr_t new_node, nodeptr_t current_node)\n        {\n            // Try to change the next pointer on the current element to a new element, only if it still points to the cached next\n            nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);\n\n            if (exchange_node == current_node) // TODO: why this branch?\n            {\n                // Operation succeeded, return the new node\n                return new_node;\n            }\n            else\n            {\n                // Operation failed, return the \"interfering\" node\n                return exchange_node;\n            }\n        }\n\n        // Checks if this element in the list is a dummy, order enforcing node. Dummy nodes are used by buckets\n        // in the hash table to quickly index into the right subsection of the split-ordered list.\n        bool is_dummy() const {\n            return (my_order_key & 0x1) == 0;\n        }\n\n\n        nodeptr_t  my_next;      // Next element in the list\n        value_type my_element;   // Element storage\n        sokey_t    my_order_key; // Order key for this element\n    };\n\n    // Allocate a new node with the given order key; used to allocate dummy nodes\n    nodeptr_t create_node(sokey_t order_key) {\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n        pnode->init(order_key);\n        return (pnode);\n    }\n\n    // Allocate a new node with the given order key and value\n    template<typename Arg>\n    nodeptr_t create_node(sokey_t order_key, __TBB_FORWARDING_REF(Arg) t,\n                          /*AllowCreate=*/tbb::internal::true_type=tbb::internal::true_type()){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(tbb::internal::forward<Arg>(t));\n            pnode->init(order_key);\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n    // A helper to avoid excessive requiremens in internal_insert\n    template<typename Arg>\n    nodeptr_t create_node(sokey_t, __TBB_FORWARDING_REF(Arg),\n                          /*AllowCreate=*/tbb::internal::false_type){\n        __TBB_ASSERT(false, \"This compile-time helper should never get called\");\n        return nodeptr_t();\n    }\n\n    // Allocate a new node with the given parameters for constructing value\n    template<typename __TBB_PARAMETER_PACK Args>\n    nodeptr_t create_node_v( __TBB_FORWARDING_REF(Args) __TBB_PARAMETER_PACK args){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(__TBB_PACK_EXPANSION(tbb::internal::forward<Args>(args)));\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n   split_ordered_list(allocator_type a = allocator_type())\n       : my_node_allocator(a), my_element_count(0)\n    {\n        // Immediately allocate a dummy node with order key of 0. This node\n        // will always be the head of the list.\n        my_head = create_node(sokey_t(0));\n    }\n\n    ~split_ordered_list()\n    {\n        // Clear the list\n        clear();\n\n        // Remove the head element which is not cleared by clear()\n        nodeptr_t pnode = my_head;\n        my_head = NULL;\n\n        __TBB_ASSERT(pnode != NULL && pnode->my_next == NULL, \"Invalid head list node\");\n\n        destroy_node(pnode);\n    }\n\n    // Common forward list functions\n\n    allocator_type get_allocator() const {\n        return (my_node_allocator);\n    }\n\n    void clear() {\n        nodeptr_t pnext;\n        nodeptr_t pnode = my_head;\n\n        __TBB_ASSERT(my_head != NULL, \"Invalid head list node\");\n        pnext = pnode->my_next;\n        pnode->my_next = NULL;\n        pnode = pnext;\n\n        while (pnode != NULL)\n        {\n            pnext = pnode->my_next;\n            destroy_node(pnode);\n            pnode = pnext;\n        }\n\n        my_element_count = 0;\n    }\n\n    // Returns a first non-dummy element in the SOL\n    iterator begin() {\n        return first_real_iterator(raw_begin());\n    }\n\n    // Returns a first non-dummy element in the SOL\n    const_iterator begin() const {\n        return first_real_iterator(raw_begin());\n    }\n\n    iterator end() {\n        return (iterator(0, this));\n    }\n\n    const_iterator end() const {\n        return (const_iterator(0, this));\n    }\n\n    const_iterator cbegin() const {\n        return (((const self_type *)this)->begin());\n    }\n\n    const_iterator cend() const {\n        return (((const self_type *)this)->end());\n    }\n\n    // Checks if the number of elements (non-dummy) is 0\n    bool empty() const {\n        return (my_element_count == 0);\n    }\n\n    // Returns the number of non-dummy elements in the list\n    size_type size() const {\n        return my_element_count;\n    }\n\n    // Returns the maximum size of the list, determined by the allocator\n    size_type max_size() const {\n        return my_node_allocator.max_size();\n    }\n\n    // Swaps 'this' list with the passed in one\n    void swap(self_type& other)\n    {\n        if (this == &other)\n        {\n            // Nothing to do\n            return;\n        }\n\n            std::swap(my_element_count, other.my_element_count);\n            std::swap(my_head, other.my_head);\n    }\n\n    // Split-order list functions\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_iterator raw_begin() {\n        return raw_iterator(my_head);\n    }\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_const_iterator raw_begin() const {\n        return raw_const_iterator(my_head);\n    }\n\n    raw_iterator raw_end() {\n        return raw_iterator(0);\n    }\n\n    raw_const_iterator raw_end() const {\n        return raw_const_iterator(0);\n    }\n\n    static sokey_t get_order_key(const raw_const_iterator& it) {\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    static sokey_t get_safe_order_key(const raw_const_iterator& it) {\n        if( !it.get_node_ptr() )  return ~sokey_t(0);\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    iterator get_iterator(raw_iterator it) {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    const_iterator get_iterator(raw_const_iterator it) const {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a non-const version of the raw_iterator\n    raw_iterator get_iterator(raw_const_iterator it) {\n        return raw_iterator(it.get_node_ptr());\n    }\n\n    // Returns a non-const version of the iterator\n    static iterator get_iterator(const_iterator it) {\n        return iterator(it.my_node_ptr, it.my_list_ptr);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    iterator first_real_iterator(raw_iterator it)\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    const_iterator first_real_iterator(raw_const_iterator it) const\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Erase an element using the allocator\n    void destroy_node(nodeptr_t pnode) {\n        if (!pnode->is_dummy()) my_node_allocator.destroy(pnode);\n        my_node_allocator.deallocate(pnode, 1);\n    }\n\n    // Try to insert a new element in the list.\n    // If insert fails, return the node that was inserted instead.\n    static nodeptr_t try_insert_atomic(nodeptr_t previous, nodeptr_t new_node, nodeptr_t current_node) {\n        new_node->my_next = current_node;\n        return previous->atomic_set_next(new_node, current_node);\n    }\n\n    // Insert a new element between passed in iterators\n    std::pair<iterator, bool> try_insert(raw_iterator it, raw_iterator next, nodeptr_t pnode, size_type *new_count)\n    {\n        nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), pnode, next.get_node_ptr());\n\n        if (inserted_node == pnode)\n        {\n            // If the insert succeeded, check that the order is correct and increment the element count\n            check_range(it, next);\n            *new_count = tbb::internal::as_atomic(my_element_count).fetch_and_increment();\n            return std::pair<iterator, bool>(iterator(pnode, this), true);\n        }\n        else\n        {\n            return std::pair<iterator, bool>(end(), false);\n        }\n    }\n\n    // Insert a new dummy element, starting search at a parent dummy element\n    raw_iterator insert_dummy(raw_iterator it, sokey_t order_key)\n    {\n        raw_iterator last = raw_end();\n        raw_iterator where = it;\n\n        __TBB_ASSERT(where != last, \"Invalid head node\");\n\n        ++where;\n\n        // Create a dummy element up front, even though it may be discarded (due to concurrent insertion)\n        nodeptr_t dummy_node = create_node(order_key);\n\n        for (;;)\n        {\n            __TBB_ASSERT(it != last, \"Invalid head list node\");\n\n            // If the head iterator is at the end of the list, or past the point where this dummy\n            // node needs to be inserted, then try to insert it.\n            if (where == last || get_order_key(where) > order_key)\n            {\n                __TBB_ASSERT(get_order_key(it) < order_key, \"Invalid node order in the list\");\n\n                // Try to insert it in the right place\n                nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), dummy_node, where.get_node_ptr());\n\n                if (inserted_node == dummy_node)\n                {\n                    // Insertion succeeded, check the list for order violations\n                    check_range(it, where);\n                    return raw_iterator(dummy_node);\n                }\n                else\n                {\n                    // Insertion failed: either dummy node was inserted by another thread, or\n                    // a real element was inserted at exactly the same place as dummy node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = it;\n                    ++where;\n                    continue;\n                }\n            }\n            else if (get_order_key(where) == order_key)\n            {\n                // Another dummy node with the same value found, discard the new one.\n                destroy_node(dummy_node);\n                return where;\n            }\n\n            // Move the iterator forward\n            it = where;\n            ++where;\n        }\n\n    }\n\n    // This erase function can handle both real and dummy nodes\n    void erase_node(raw_iterator previous, raw_const_iterator& where)\n    {\n        nodeptr_t pnode = (where++).get_node_ptr();\n        nodeptr_t prevnode = previous.get_node_ptr();\n        __TBB_ASSERT(prevnode->my_next == pnode, \"Erase must take consecutive iterators\");\n        prevnode->my_next = pnode->my_next;\n\n        destroy_node(pnode);\n    }\n\n    // Erase the element (previous node needs to be passed because this is a forward only list)\n    iterator erase_node(raw_iterator previous, const_iterator where)\n    {\n        raw_const_iterator it = where;\n        erase_node(previous, it);\n        my_element_count--;\n\n        return get_iterator(first_real_iterator(it));\n    }\n\n    // Move all elements from the passed in split-ordered list to this one\n    void move_all(self_type& source)\n    {\n        raw_const_iterator first = source.raw_begin();\n        raw_const_iterator last = source.raw_end();\n\n        if (first == last)\n            return;\n\n        nodeptr_t previous_node = my_head;\n        raw_const_iterator begin_iterator = first++;\n\n        // Move all elements one by one, including dummy ones\n        for (raw_const_iterator it = first; it != last;)\n        {\n            nodeptr_t pnode = it.get_node_ptr();\n\n            nodeptr_t dummy_node = pnode->is_dummy() ? create_node(pnode->get_order_key()) : create_node(pnode->get_order_key(), pnode->my_element);\n            previous_node = try_insert_atomic(previous_node, dummy_node, NULL);\n            __TBB_ASSERT(previous_node != NULL, \"Insertion must succeed\");\n            raw_const_iterator where = it++;\n            source.erase_node(get_iterator(begin_iterator), where);\n        }\n        check_range();\n    }\n\n\nprivate:\n    //Need to setup private fields of split_ordered_list in move constructor and assignment of concurrent_unordered_base\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n\n    // Check the list for order violations\n    void check_range( raw_iterator first, raw_iterator last )\n    {\n#if TBB_USE_ASSERT\n        for (raw_iterator it = first; it != last; ++it)\n        {\n            raw_iterator next = it;\n            ++next;\n\n            __TBB_ASSERT(next == raw_end() || get_order_key(next) >= get_order_key(it), \"!!! List order inconsistency !!!\");\n        }\n#else\n        tbb::internal::suppress_unused_warning(first, last);\n#endif\n    }\n    void check_range()\n    {\n#if TBB_USE_ASSERT\n        check_range( raw_begin(), raw_end() );\n#endif\n    }\n\n    typename allocator_type::template rebind<node>::other my_node_allocator;  // allocator object for nodes\n    size_type                                             my_element_count;   // Total item count, not counting dummy nodes\n    nodeptr_t                                             my_head;            // pointer to head node\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(push)\n#pragma warning(disable: 4127) // warning C4127: conditional expression is constant\n#endif\n\ntemplate <typename Traits>\nclass concurrent_unordered_base : public Traits\n{\nprotected:\n    // Type definitions\n    typedef concurrent_unordered_base<Traits> self_type;\n    typedef typename Traits::value_type value_type;\n    typedef typename Traits::key_type key_type;\n    typedef typename Traits::hash_compare hash_compare;\n    typedef typename Traits::allocator_type allocator_type;\n    typedef typename hash_compare::hasher hasher;\n    typedef typename hash_compare::key_equal key_equal;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef split_ordered_list<value_type, typename Traits::allocator_type> solist_t;\n    typedef typename solist_t::nodeptr_t nodeptr_t;\n    // Iterators that walk the entire split-order list, including dummy nodes\n    typedef typename solist_t::raw_iterator raw_iterator;\n    typedef typename solist_t::raw_const_iterator raw_const_iterator;\n    typedef typename solist_t::iterator iterator; // TODO: restore const iterator for unordered_sets\n    typedef typename solist_t::const_iterator const_iterator;\n    typedef iterator local_iterator;\n    typedef const_iterator const_local_iterator;\n    using Traits::my_hash_compare;\n    using Traits::get_key;\n    using Traits::allow_multimapping;\n\n    static const size_type initial_bucket_number = 8;                               // Initial number of buckets\nprivate:\n    typedef std::pair<iterator, iterator> pairii_t;\n    typedef std::pair<const_iterator, const_iterator> paircc_t;\n\n    static size_type const pointers_per_table = sizeof(size_type) * 8;              // One bucket segment per bit\n    static const size_type initial_bucket_load = 4;                                // Initial maximum number of elements per bucket\n\n    struct call_internal_clear_on_exit{\n        concurrent_unordered_base* my_instance;\n        call_internal_clear_on_exit(concurrent_unordered_base* instance) : my_instance(instance) {}\n        void dismiss(){ my_instance = NULL;}\n        ~call_internal_clear_on_exit(){\n            if (my_instance){\n                my_instance->internal_clear();\n            }\n        }\n    };\nprotected:\n    // Constructors/Destructors\n    concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,\n        const hash_compare& hc = hash_compare(), const allocator_type& a = allocator_type())\n        : Traits(hc), my_solist(a),\n          my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)\n    {\n        if( n_of_buckets == 0) ++n_of_buckets;\n        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2\n        internal_init();\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        internal_init();\n        internal_copy(right);\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        //FIXME:exception safety seems to be broken here\n        internal_init();\n        internal_copy(right);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base(concurrent_unordered_base&& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        internal_init();\n        swap(right);\n    }\n\n    concurrent_unordered_base(concurrent_unordered_base&& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        call_internal_clear_on_exit clear_buckets_on_exception(this);\n\n        internal_init();\n        if (a == right.get_allocator()){\n            this->swap(right);\n        }else{\n            my_maximum_bucket_size = right.my_maximum_bucket_size;\n            my_number_of_buckets = right.my_number_of_buckets;\n            my_solist.my_element_count = right.my_solist.my_element_count;\n\n            if (! right.my_solist.empty()){\n                nodeptr_t previous_node = my_solist.my_head;\n\n                // Move all elements one by one, including dummy ones\n                for (raw_const_iterator it = ++(right.my_solist.raw_begin()), last = right.my_solist.raw_end(); it != last; ++it)\n                {\n                    const nodeptr_t pnode = it.get_node_ptr();\n                    nodeptr_t node;\n                    if (pnode->is_dummy()) {\n                        node = my_solist.create_node(pnode->get_order_key());\n                        size_type bucket = __TBB_ReverseBits(pnode->get_order_key()) % my_number_of_buckets;\n                        set_bucket(bucket, node);\n                    }else{\n                        node = my_solist.create_node(pnode->get_order_key(), std::move(pnode->my_element));\n                    }\n\n                    previous_node = my_solist.try_insert_atomic(previous_node, node, NULL);\n                    __TBB_ASSERT(previous_node != NULL, \"Insertion of node failed. Concurrent inserts in constructor ?\");\n                }\n                my_solist.check_range();\n            }\n        }\n\n        clear_buckets_on_exception.dismiss();\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_base& operator=(const concurrent_unordered_base& right) {\n        if (this != &right)\n            internal_copy(right);\n        return (*this);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base& operator=(concurrent_unordered_base&& other)\n    {\n        if(this != &other){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == other.my_allocator) {\n                concurrent_unordered_base trash (std::move(*this));\n                swap(other);\n                if (pocma_t::value) {\n                    using std::swap;\n                    //TODO: swapping allocators here may be a problem, replace with single direction moving\n                    swap(this->my_solist.my_node_allocator, other.my_solist.my_node_allocator);\n                    swap(this->my_allocator, other.my_allocator);\n                }\n            } else {\n                concurrent_unordered_base moved_copy(std::move(other),this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assignment operator from initializer_list\n    concurrent_unordered_base& operator=(std::initializer_list<value_type> il)\n    {\n        this->clear();\n        this->insert(il.begin(),il.end());\n        return (*this);\n    }\n#endif // __TBB_INITIALIZER_LISTS_PRESENT\n\n\n    ~concurrent_unordered_base() {\n        // Delete all node segments\n        internal_clear();\n    }\n\npublic:\n    allocator_type get_allocator() const {\n        return my_solist.get_allocator();\n    }\n\n    // Size and capacity function\n    bool empty() const {\n        return my_solist.empty();\n    }\n\n    size_type size() const {\n        return my_solist.size();\n    }\n\n    size_type max_size() const {\n        return my_solist.max_size();\n    }\n\n    // Iterators\n    iterator begin() {\n        return my_solist.begin();\n    }\n\n    const_iterator begin() const {\n        return my_solist.begin();\n    }\n\n    iterator end() {\n        return my_solist.end();\n    }\n\n    const_iterator end() const {\n        return my_solist.end();\n    }\n\n    const_iterator cbegin() const {\n        return my_solist.cbegin();\n    }\n\n    const_iterator cend() const {\n        return my_solist.cend();\n    }\n\n    // Parallel traversal support\n    class const_range_type : tbb::internal::no_assign {\n        const concurrent_unordered_base &my_table;\n        raw_const_iterator my_begin_node;\n        raw_const_iterator my_end_node;\n        mutable raw_const_iterator my_midpoint_node;\n    public:\n        //! Type for size of a range\n        typedef typename concurrent_unordered_base::size_type size_type;\n        typedef typename concurrent_unordered_base::value_type value_type;\n        typedef typename concurrent_unordered_base::reference reference;\n        typedef typename concurrent_unordered_base::difference_type difference_type;\n        typedef typename concurrent_unordered_base::const_iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin_node == my_end_node;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint_node != my_end_node;\n        }\n        //! Split range.\n        const_range_type( const_range_type &r, split ) :\n            my_table(r.my_table), my_end_node(r.my_end_node)\n        {\n            r.my_end_node = my_begin_node = r.my_midpoint_node;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! Init range with container and grainsize specified\n        const_range_type( const concurrent_unordered_base &a_table ) :\n            my_table(a_table), my_begin_node(a_table.my_solist.begin()),\n            my_end_node(a_table.my_solist.end())\n        {\n            set_midpoint();\n        }\n        iterator begin() const { return my_table.my_solist.get_iterator(my_begin_node); }\n        iterator end() const { return my_table.my_solist.get_iterator(my_end_node); }\n        //! The grain size for this range.\n        size_type grainsize() const { return 1; }\n\n        //! Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.\n        void set_midpoint() const {\n            if( my_begin_node == my_end_node ) // not divisible\n                my_midpoint_node = my_end_node;\n            else {\n                sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);\n                sokey_t end_key = solist_t::get_safe_order_key(my_end_node);\n                size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;\n                while ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);\n                if(__TBB_ReverseBits(mid_bucket) > begin_key) {\n                    // found a dummy_node between begin and end\n                    my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));\n                }\n                else {\n                    // didn't find a dummy node between begin and end.\n                    my_midpoint_node = my_end_node;\n                }\n#if TBB_USE_ASSERT\n                {\n                    sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);\n                    __TBB_ASSERT( begin_key < mid_key, \"my_begin_node is after my_midpoint_node\" );\n                    __TBB_ASSERT( mid_key <= end_key, \"my_midpoint_node is after my_end_node\" );\n                }\n#endif // TBB_USE_ASSERT\n            }\n        }\n    };\n\n    class range_type : public const_range_type {\n    public:\n        typedef typename concurrent_unordered_base::iterator iterator;\n        //! Split range.\n        range_type( range_type &r, split ) : const_range_type( r, split() ) {}\n        //! Init range with container and grainsize specified\n        range_type( const concurrent_unordered_base &a_table ) : const_range_type(a_table) {}\n\n        iterator begin() const { return solist_t::get_iterator( const_range_type::begin() ); }\n        iterator end() const { return solist_t::get_iterator( const_range_type::end() ); }\n    };\n\n    range_type range() {\n        return range_type( *this );\n    }\n\n    const_range_type range() const {\n        return const_range_type( *this );\n    }\n\n    // Modifiers\n    std::pair<iterator, bool> insert(const value_type& value) {\n        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(value);\n    }\n\n    iterator insert(const_iterator, const value_type& value) {\n        // Ignore hint\n        return insert(value).first;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    std::pair<iterator, bool> insert(value_type&& value) {\n        return internal_insert</*AllowCreate=*/tbb::internal::true_type>(std::move(value));\n    }\n\n    iterator insert(const_iterator, value_type&& value) {\n        // Ignore hint\n        return insert(std::move(value)).first;\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    std::pair<iterator, bool> emplace(Args&&... args) {\n        nodeptr_t pnode = my_solist.create_node_v(tbb::internal::forward<Args>(args)...);\n        const sokey_t hashed_element_key = (sokey_t) my_hash_compare(get_key(pnode->my_element));\n        const sokey_t order_key = split_order_key_regular(hashed_element_key);\n        pnode->init(order_key);\n\n        return internal_insert</*AllowCreate=*/tbb::internal::false_type>(pnode->my_element, pnode);\n    }\n\n    template<typename... Args>\n    iterator emplace_hint(const_iterator, Args&&... args) {\n        // Ignore hint\n        return emplace(tbb::internal::forward<Args>(args)...).first;\n    }\n\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    template<class Iterator>\n    void insert(Iterator first, Iterator last) {\n        for (Iterator it = first; it != last; ++it)\n            insert(*it);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert(std::initializer_list<value_type> il) {\n        insert(il.begin(), il.end());\n    }\n#endif\n\n    iterator unsafe_erase(const_iterator where) {\n        return internal_erase(where);\n    }\n\n    iterator unsafe_erase(const_iterator first, const_iterator last) {\n        while (first != last)\n            unsafe_erase(first++);\n        return my_solist.get_iterator(first);\n    }\n\n    size_type unsafe_erase(const key_type& key) {\n        pairii_t where = equal_range(key);\n        size_type item_count = internal_distance(where.first, where.second);\n        unsafe_erase(where.first, where.second);\n        return item_count;\n    }\n\n    void swap(concurrent_unordered_base& right) {\n        if (this != &right) {\n            std::swap(my_hash_compare, right.my_hash_compare); // TODO: check what ADL meant here\n            my_solist.swap(right.my_solist);\n            internal_swap_buckets(right);\n            std::swap(my_number_of_buckets, right.my_number_of_buckets);\n            std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);\n        }\n    }\n\n    // Observers\n    hasher hash_function() const {\n        return my_hash_compare.my_hash_object;\n    }\n\n    key_equal key_eq() const {\n        return my_hash_compare.my_key_compare_object;\n    }\n\n    void clear() {\n        // Clear list\n        my_solist.clear();\n\n        // Clear buckets\n        internal_clear();\n\n        // Initialize bucket 0\n        __TBB_ASSERT(my_buckets[0] == NULL, NULL);\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    // Lookup\n    iterator find(const key_type& key) {\n        return internal_find(key);\n    }\n\n    const_iterator find(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_find(key);\n    }\n\n    size_type count(const key_type& key) const {\n        if(allow_multimapping) {\n            paircc_t answer = equal_range(key);\n            size_type item_count = internal_distance(answer.first, answer.second);\n            return item_count;\n        } else {\n            return const_cast<self_type*>(this)->internal_find(key) == end()?0:1;\n        }\n    }\n\n    std::pair<iterator, iterator> equal_range(const key_type& key) {\n        return internal_equal_range(key);\n    }\n\n    std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_equal_range(key);\n    }\n\n    // Bucket interface - for debugging\n    size_type unsafe_bucket_count() const {\n        return my_number_of_buckets;\n    }\n\n    size_type unsafe_max_bucket_count() const {\n        return segment_size(pointers_per_table-1);\n    }\n\n    size_type unsafe_bucket_size(size_type bucket) {\n        size_type item_count = 0;\n        if (is_initialized(bucket)) {\n            raw_iterator it = get_bucket(bucket);\n            ++it;\n            for (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)\n                ++item_count;\n        }\n        return item_count;\n    }\n\n    size_type unsafe_bucket(const key_type& key) const {\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n        return bucket;\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    local_iterator unsafe_begin(size_type bucket) {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    const_local_iterator unsafe_begin(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    local_iterator unsafe_end(size_type bucket)\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    const_local_iterator unsafe_end(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    const_local_iterator unsafe_cbegin(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_begin(bucket);\n    }\n\n    const_local_iterator unsafe_cend(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_end(bucket);\n    }\n\n    // Hash policy\n    float load_factor() const {\n        return (float) size() / (float) unsafe_bucket_count();\n    }\n\n    float max_load_factor() const {\n        return my_maximum_bucket_size;\n    }\n\n    void max_load_factor(float newmax) {\n        if (newmax != newmax || newmax < 0)\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);\n        my_maximum_bucket_size = newmax;\n    }\n\n    // This function is a noop, because the underlying split-ordered list\n    // is already sorted, so an increase in the bucket number will be\n    // reflected next time this bucket is touched.\n    void rehash(size_type buckets) {\n        size_type current_buckets = my_number_of_buckets;\n        if (current_buckets >= buckets)\n            return;\n        my_number_of_buckets = size_type(1)<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2\n    }\n\nprivate:\n\n    // Initialize the hash and keep the first bucket open\n    void internal_init() {\n        // Initialize the array of segment pointers\n        memset(my_buckets, 0, sizeof(my_buckets));\n\n        // Initialize bucket 0\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    void internal_clear() {\n        for (size_type index = 0; index < pointers_per_table; ++index) {\n            if (my_buckets[index] != NULL) {\n                size_type sz = segment_size(index);\n                for (size_type index2 = 0; index2 < sz; ++index2)\n                    my_allocator.destroy(&my_buckets[index][index2]);\n                my_allocator.deallocate(my_buckets[index], sz);\n                my_buckets[index] = 0;\n            }\n        }\n    }\n\n    void internal_copy(const self_type& right) {\n        clear();\n\n        my_maximum_bucket_size = right.my_maximum_bucket_size;\n        my_number_of_buckets = right.my_number_of_buckets;\n\n        __TBB_TRY {\n            insert(right.begin(), right.end());\n            my_hash_compare = right.my_hash_compare;\n        } __TBB_CATCH(...) {\n            my_solist.clear();\n            __TBB_RETHROW();\n        }\n    }\n\n    void internal_swap_buckets(concurrent_unordered_base& right)\n    {\n        // Swap all node segments\n        for (size_type index = 0; index < pointers_per_table; ++index)\n        {\n            raw_iterator * iterator_pointer = my_buckets[index];\n            my_buckets[index] = right.my_buckets[index];\n            right.my_buckets[index] = iterator_pointer;\n        }\n    }\n\n    //TODO: why not use std::distance?\n    // Hash APIs\n    static size_type internal_distance(const_iterator first, const_iterator last)\n    {\n        size_type num = 0;\n\n        for (const_iterator it = first; it != last; ++it)\n            ++num;\n\n        return num;\n    }\n\n    // Insert an element in the hash given its value\n    template<typename AllowCreate, typename ValueType>\n    std::pair<iterator, bool> internal_insert(__TBB_FORWARDING_REF(ValueType) value, nodeptr_t pnode = NULL)\n    {\n        const key_type *pkey = &get_key(value);\n        sokey_t hash_key = (sokey_t) my_hash_compare(*pkey);\n        size_type new_count = 0;\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator previous = prepare_bucket(hash_key);\n        raw_iterator last = my_solist.raw_end();\n        __TBB_ASSERT(previous != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        for (raw_iterator where = previous;;)\n        {\n            ++where;\n            if (where == last || solist_t::get_order_key(where) > order_key ||\n                // if multimapped, stop at the first item equal to us.\n                (allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                 !my_hash_compare(get_key(*where), *pkey))) // TODO: fix negation\n            {\n                if (!pnode) {\n                    pnode = my_solist.create_node(order_key, tbb::internal::forward<ValueType>(value), AllowCreate());\n                    // If the value was moved, the known reference to key might be invalid\n                    pkey = &get_key(pnode->my_element);\n                }\n\n                // Try to insert 'pnode' between 'previous' and 'where'\n                std::pair<iterator, bool> result = my_solist.try_insert(previous, where, pnode, &new_count);\n\n                if (result.second)\n                {\n                    // Insertion succeeded, adjust the table size, if needed\n                    adjust_table_size(new_count, my_number_of_buckets);\n                    return result;\n                }\n                else\n                {\n                    // Insertion failed: either the same node was inserted by another thread, or\n                    // another element was inserted at exactly the same place as this node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = previous;\n                    continue;\n                }\n            }\n            else if (!allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                     !my_hash_compare(get_key(*where), *pkey)) // TODO: fix negation\n            { // Element already in the list, return it\n                 if (pnode)\n                     my_solist.destroy_node(pnode);\n                return std::pair<iterator, bool>(my_solist.get_iterator(where), false);\n            }\n            // Move the iterator forward\n            previous = where;\n        }\n    }\n\n    // Find the element in the split-ordered list\n    iterator internal_find(const key_type& key)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(key);\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator last = my_solist.raw_end();\n\n        for (raw_iterator it = prepare_bucket(hash_key); it != last; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // If the order key is smaller than the current order key, the element\n                // is not in the hash.\n                return end();\n            }\n            else if (solist_t::get_order_key(it) == order_key)\n            {\n                // The fact that order keys match does not mean that the element is found.\n                // Key function comparison has to be performed to check whether this is the\n                // right element. If not, keep searching while order key is the same.\n                if (!my_hash_compare(get_key(*it), key)) // TODO: fix negation\n                    return my_solist.get_iterator(it);\n            }\n        }\n\n        return end();\n    }\n\n    // Erase an element from the list. This is not a concurrency safe function.\n    iterator internal_erase(const_iterator it)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(get_key(*it));\n        raw_iterator previous = prepare_bucket(hash_key);\n        raw_iterator last = my_solist.raw_end();\n        __TBB_ASSERT(previous != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        for (raw_iterator where = previous; ; previous = where) {\n            ++where;\n            if (where == last)\n                return end();\n            else if (my_solist.get_iterator(where) == it)\n                return my_solist.erase_node(previous, it);\n        }\n    }\n\n    // Return the [begin, end) pair of iterators with the same key values.\n    // This operation makes sense only if mapping is many-to-one.\n    pairii_t internal_equal_range(const key_type& key)\n    {\n        sokey_t hash_key = (sokey_t) my_hash_compare(key);\n        sokey_t order_key = split_order_key_regular(hash_key);\n        raw_iterator end_it = my_solist.raw_end();\n\n        for (raw_iterator it = prepare_bucket(hash_key); it != end_it; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // There is no element with the given key\n                return pairii_t(end(), end());\n            }\n            else if (solist_t::get_order_key(it) == order_key &&\n                     !my_hash_compare(get_key(*it), key)) // TODO: fix negation; also below\n            {\n                iterator first = my_solist.get_iterator(it);\n                iterator last = first;\n                do ++last; while( allow_multimapping && last != end() && !my_hash_compare(get_key(*last), key) );\n                return pairii_t(first, last);\n            }\n        }\n\n        return pairii_t(end(), end());\n    }\n\n    // Bucket APIs\n    void init_bucket(size_type bucket)\n    {\n        // Bucket 0 has no parent.\n        __TBB_ASSERT( bucket != 0, \"The first bucket must always be initialized\");\n\n        size_type parent_bucket = get_parent(bucket);\n\n        // All parent_bucket buckets have to be initialized before this bucket is\n        if (!is_initialized(parent_bucket))\n            init_bucket(parent_bucket);\n\n        raw_iterator parent = get_bucket(parent_bucket);\n\n        // Create a dummy first node in this bucket\n        raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));\n        set_bucket(bucket, dummy_node);\n    }\n\n    void adjust_table_size(size_type total_elements, size_type current_size)\n    {\n        // Grow the table by a factor of 2 if possible and needed\n        if ( ((float) total_elements / (float) current_size) > my_maximum_bucket_size )\n        {\n            // Double the size of the hash only if size has not changed in between loads\n            my_number_of_buckets.compare_and_swap(2u*current_size, current_size);\n            //Simple \"my_number_of_buckets.compare_and_swap( current_size<<1, current_size );\" does not work for VC8\n            //due to overzealous compiler warnings in /Wp64 mode\n        }\n    }\n\n    size_type get_parent(size_type bucket) const\n    {\n        // Unsets bucket's most significant turned-on bit\n        size_type msb = __TBB_Log2((uintptr_t)bucket);\n        return bucket & ~(size_type(1) << msb);\n    }\n\n\n    // Dynamic sized array (segments)\n    //! @return segment index of given index in the array\n    static size_type segment_index_of( size_type index ) {\n        return size_type( __TBB_Log2( uintptr_t(index|1) ) );\n    }\n\n    //! @return the first array index of given segment\n    static size_type segment_base( size_type k ) {\n        return (size_type(1)<<k & ~size_type(1));\n    }\n\n    //! @return segment size\n    static size_type segment_size( size_type k ) {\n        return k? size_type(1)<<k : 2;\n    }\n\n    raw_iterator get_bucket(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n        __TBB_ASSERT( my_buckets[segment], \"bucket must be in an allocated segment\" );\n        return my_buckets[segment][bucket];\n    }\n\n    raw_iterator prepare_bucket(sokey_t hash_key) {\n        size_type bucket = hash_key % my_number_of_buckets;\n        size_type segment = segment_index_of(bucket);\n        size_type index = bucket - segment_base(segment);\n        if (my_buckets[segment] == NULL || my_buckets[segment][index].get_node_ptr() == NULL)\n            init_bucket(bucket);\n        return my_buckets[segment][index];\n    }\n\n    void set_bucket(size_type bucket, raw_iterator dummy_head) {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL) {\n            size_type sz = segment_size(segment);\n            raw_iterator * new_segment = my_allocator.allocate(sz);\n            std::memset(static_cast<void*>(new_segment), 0, sz*sizeof(raw_iterator));\n\n            if (my_buckets[segment].compare_and_swap( new_segment, NULL) != NULL)\n                my_allocator.deallocate(new_segment, sz);\n        }\n\n        my_buckets[segment][bucket] = dummy_head;\n    }\n\n    bool is_initialized(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL)\n            return false;\n\n        raw_iterator it = my_buckets[segment][bucket];\n        return (it.get_node_ptr() != NULL);\n    }\n\n    // Utilities for keys\n\n    // A regular order key has its original hash value reversed and the last bit set\n    sokey_t split_order_key_regular(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) | 0x1;\n    }\n\n    // A dummy order key has its original hash value reversed and the last bit unset\n    sokey_t split_order_key_dummy(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) & ~sokey_t(0x1);\n    }\n\n    // Shared variables\n    atomic<size_type>                                             my_number_of_buckets;       // Current table size\n    solist_t                                                      my_solist;                  // List where all the elements are kept\n    typename allocator_type::template rebind<raw_iterator>::other my_allocator;               // Allocator object for segments\n    float                                                         my_maximum_bucket_size;     // Maximum size of the bucket\n    atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; // The segment table\n};\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(pop) // warning 4127 is back\n#endif\n\n} // namespace internal\n//! @endcond\n} // namespace interface5\n} // namespace tbb\n#endif // __TBB__concurrent_unordered_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_async_msg_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_async_msg_impl_H\n#define __TBB__flow_graph_async_msg_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\nnamespace internal {\n\ntemplate <typename T>\nclass async_storage {\npublic:\n    typedef receiver<T> async_storage_client;\n\n    async_storage() : my_graph(nullptr) {\n        my_data_ready.store<tbb::relaxed>(false);\n    }\n\n    ~async_storage() {\n        // Release reference to the graph if async_storage\n        // was destructed before set() call\n        if (my_graph) {\n            my_graph->release_wait();\n            my_graph = nullptr;\n        }\n    }\n\n    template<typename C>\n    async_storage(C&& data) : my_graph(nullptr), my_data( std::forward<C>(data) ) {\n        using namespace tbb::internal;\n        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), \"incoming type must be T\" );\n\n        my_data_ready.store<tbb::relaxed>(true);\n    }\n\n    template<typename C>\n    bool set(C&& data) {\n        using namespace tbb::internal;\n        __TBB_STATIC_ASSERT( (is_same_type<typename strip<C>::type, typename strip<T>::type>::value), \"incoming type must be T\" );\n\n        {\n            tbb::spin_mutex::scoped_lock locker(my_mutex);\n\n            if (my_data_ready.load<tbb::relaxed>()) {\n                __TBB_ASSERT(false, \"double set() call\");\n                return false;\n            }\n\n            my_data = std::forward<C>(data);\n            my_data_ready.store<tbb::release>(true);\n        }\n\n        // Thread sync is on my_data_ready flag\n        for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {\n            (*it)->try_put(my_data);\n        }\n\n        // Data was sent, release reference to the graph\n        if (my_graph) {\n            my_graph->release_wait();\n            my_graph = nullptr;\n        }\n\n        return true;\n    }\n\n    task* subscribe(async_storage_client& client, graph& g) {\n        if (! my_data_ready.load<tbb::acquire>())\n        {\n            tbb::spin_mutex::scoped_lock locker(my_mutex);\n\n            if (! my_data_ready.load<tbb::relaxed>()) {\n#if TBB_USE_ASSERT\n                for (typename subscriber_list_type::iterator it = my_clients.begin(); it != my_clients.end(); ++it) {\n                    __TBB_ASSERT(*it != &client, \"unexpected double subscription\");\n                }\n#endif // TBB_USE_ASSERT\n\n                // Increase graph lifetime\n                my_graph = &g;\n                my_graph->reserve_wait();\n\n                // Subscribe\n                my_clients.push_back(&client);\n                return SUCCESSFULLY_ENQUEUED;\n            }\n        }\n\n        __TBB_ASSERT(my_data_ready.load<tbb::relaxed>(), \"data is NOT ready\");\n        return client.try_put_task(my_data);\n    }\n\nprivate:\n    graph* my_graph;\n    tbb::spin_mutex my_mutex;\n    tbb::atomic<bool> my_data_ready;\n    T my_data;\n    typedef std::vector<async_storage_client*> subscriber_list_type;\n    subscriber_list_type my_clients;\n};\n\n} // namespace internal\n\ntemplate <typename T>\nclass async_msg {\n    template< typename > friend class receiver;\n    template< typename, typename > friend struct internal::async_helpers;\npublic:\n    typedef T async_msg_data_type;\n\n    async_msg() : my_storage(std::make_shared< internal::async_storage<T> >()) {}\n\n    async_msg(const T& t) : my_storage(std::make_shared< internal::async_storage<T> >(t)) {}\n\n    async_msg(T&& t) : my_storage(std::make_shared< internal::async_storage<T> >( std::move(t) )) {}\n\n    virtual ~async_msg() {}\n\n    void set(const T& t) {\n        my_storage->set(t);\n    }\n\n    void set(T&& t) {\n        my_storage->set( std::move(t) );\n    }\n\nprotected:\n    // Can be overridden in derived class to inform that \n    // async calculation chain is over\n    virtual void finalize() const {}\n\nprivate:\n    typedef std::shared_ptr< internal::async_storage<T> > async_storage_ptr;\n    async_storage_ptr my_storage;\n};\n\n#endif  // __TBB__flow_graph_async_msg_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_body_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_body_impl_H\n#define __TBB__flow_graph_body_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\ntypedef tbb::internal::uint64_t tag_value;\n\nusing tbb::internal::strip;\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n\ntemplate<typename ... Policies> struct Policy {};\n\ntemplate<typename ... Policies> struct has_policy;\n\ntemplate<typename ExpectedPolicy, typename FirstPolicy, typename ...Policies>\nstruct has_policy<ExpectedPolicy, FirstPolicy, Policies...> :\n    tbb::internal::bool_constant<has_policy<ExpectedPolicy, FirstPolicy>::value ||\n                                 has_policy<ExpectedPolicy, Policies...>::value> {};\n\ntemplate<typename ExpectedPolicy, typename SinglePolicy>\nstruct has_policy<ExpectedPolicy, SinglePolicy> :\n    tbb::internal::bool_constant<tbb::internal::is_same_type<ExpectedPolicy, SinglePolicy>::value> {};\n\ntemplate<typename ExpectedPolicy, typename ...Policies>\nstruct has_policy<ExpectedPolicy, Policy<Policies...> > : has_policy<ExpectedPolicy, Policies...> {};\n\n#else\n\ntemplate<typename P1, typename P2 = void> struct Policy {};\n\ntemplate<typename ExpectedPolicy, typename SinglePolicy>\nstruct has_policy : tbb::internal::bool_constant<tbb::internal::is_same_type<ExpectedPolicy, SinglePolicy>::value> {};\n\ntemplate<typename ExpectedPolicy, typename P>\nstruct has_policy<ExpectedPolicy, Policy<P> > : has_policy<ExpectedPolicy, P> {};\n\ntemplate<typename ExpectedPolicy, typename P1, typename P2>\nstruct has_policy<ExpectedPolicy, Policy<P1, P2> > :\n    tbb::internal::bool_constant<has_policy<ExpectedPolicy, P1>::value || has_policy<ExpectedPolicy, P2>::value> {};\n\n#endif\n\nnamespace graph_policy_namespace {\n\n    struct rejecting { };\n    struct reserving { };\n    struct queueing  { };\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    struct lightweight  { };\n#endif\n\n    // K == type of field used for key-matching.  Each tag-matching port will be provided\n    // functor that, given an object accepted by the port, will return the\n    /// field of type K being used for matching.\n    template<typename K, typename KHash=tbb_hash_compare<typename strip<K>::type > >\n    struct key_matching {\n        typedef K key_type;\n        typedef typename strip<K>::type base_key_type;\n        typedef KHash hash_compare_type;\n    };\n\n    // old tag_matching join's new specifier\n    typedef key_matching<tag_value> tag_matching;\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n    // Aliases for Policy combinations\n    typedef interface10::internal::Policy<queueing, lightweight> queueing_lightweight;\n    typedef interface10::internal::Policy<rejecting, lightweight>  rejecting_lightweight;\n#endif\n} // namespace graph_policy_namespace\n\n// -------------- function_body containers ----------------------\n\n//! A functor that takes no input and generates a value of type Output\ntemplate< typename Output >\nclass source_body : tbb::internal::no_assign {\npublic:\n    virtual ~source_body() {}\n    virtual bool operator()(Output &output) = 0;\n    virtual source_body* clone() = 0;\n};\n\n//! The leaf for source_body\ntemplate< typename Output, typename Body>\nclass source_body_leaf : public source_body<Output> {\npublic:\n    source_body_leaf( const Body &_body ) : body(_body) { }\n    bool operator()(Output &output) __TBB_override { return body( output ); }\n    source_body_leaf* clone() __TBB_override {\n        return new source_body_leaf< Output, Body >(body);\n    }\n    Body get_body() { return body; }\nprivate:\n    Body body;\n};\n\n//! A functor that takes an Input and generates an Output\ntemplate< typename Input, typename Output >\nclass function_body : tbb::internal::no_assign {\npublic:\n    virtual ~function_body() {}\n    virtual Output operator()(const Input &input) = 0;\n    virtual function_body* clone() = 0;\n};\n\n//! the leaf for function_body\ntemplate <typename Input, typename Output, typename B>\nclass function_body_leaf : public function_body< Input, Output > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const Input &i) __TBB_override { return body(i); }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< Input, Output, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Input and output of continue_msg\ntemplate <typename B>\nclass function_body_leaf< continue_msg, continue_msg, B> : public function_body< continue_msg, continue_msg > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    continue_msg operator()( const continue_msg &i ) __TBB_override {\n        body(i);\n        return i;\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< continue_msg, continue_msg, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Output of continue_msg\ntemplate <typename Input, typename B>\nclass function_body_leaf< Input, continue_msg, B> : public function_body< Input, continue_msg > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    continue_msg operator()(const Input &i) __TBB_override {\n        body(i);\n        return continue_msg();\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< Input, continue_msg, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! the leaf for function_body specialized for Input of continue_msg\ntemplate <typename Output, typename B>\nclass function_body_leaf< continue_msg, Output, B > : public function_body< continue_msg, Output > {\npublic:\n    function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const continue_msg &i) __TBB_override {\n        return body(i);\n    }\n    B get_body() { return body; }\n    function_body_leaf* clone() __TBB_override {\n        return new function_body_leaf< continue_msg, Output, B >(body);\n    }\nprivate:\n    B body;\n};\n\n//! function_body that takes an Input and a set of output ports\ntemplate<typename Input, typename OutputSet>\nclass multifunction_body : tbb::internal::no_assign {\npublic:\n    virtual ~multifunction_body () {}\n    virtual void operator()(const Input &/* input*/, OutputSet &/*oset*/) = 0;\n    virtual multifunction_body* clone() = 0;\n    virtual void* get_body_ptr() = 0;\n};\n\n//! leaf for multifunction.  OutputSet can be a std::tuple or a vector.\ntemplate<typename Input, typename OutputSet, typename B >\nclass multifunction_body_leaf : public multifunction_body<Input, OutputSet> {\npublic:\n    multifunction_body_leaf(const B &_body) : body(_body) { }\n    void operator()(const Input &input, OutputSet &oset) __TBB_override {\n        body(input, oset); // body may explicitly put() to one or more of oset.\n    }\n    void* get_body_ptr() __TBB_override { return &body; }\n    multifunction_body_leaf* clone() __TBB_override {\n        return new multifunction_body_leaf<Input, OutputSet,B>(body);\n    }\n\nprivate:\n    B body;\n};\n\n// ------ function bodies for hash_buffers and key-matching joins.\n\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual Output operator()(const Input &input) = 0;  // returns an Output\n        virtual type_to_key_function_body* clone() = 0;\n};\n\n// specialization for ref output\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body<Input,Output&> : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual const Output & operator()(const Input &input) = 0;  // returns a const Output&\n        virtual type_to_key_function_body* clone() = 0;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf : public type_to_key_function_body<Input, Output> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n    Output operator()(const Input &i) __TBB_override { return body(i); }\n    B get_body() { return body; }\n    type_to_key_function_body_leaf* clone() __TBB_override {\n        return new type_to_key_function_body_leaf< Input, Output, B>(body);\n    }\nprivate:\n    B body;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf<Input,Output&,B> : public type_to_key_function_body< Input, Output&> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n    const Output& operator()(const Input &i) __TBB_override {\n        return body(i);\n    }\n    B get_body() { return body; }\n    type_to_key_function_body_leaf* clone() __TBB_override {\n        return new type_to_key_function_body_leaf< Input, Output&, B>(body);\n    }\nprivate:\n    B body;\n};\n\n// --------------------------- end of function_body containers ------------------------\n\n// --------------------------- node task bodies ---------------------------------------\n\n//! A task that calls a node's forward_task function\ntemplate< typename NodeType >\nclass forward_task_bypass : public task {\n\n    NodeType &my_node;\n\npublic:\n\n    forward_task_bypass( NodeType &n ) : my_node(n) {}\n\n    task *execute() __TBB_override {\n        task * new_task = my_node.forward_task();\n        if (new_task == SUCCESSFULLY_ENQUEUED) new_task = NULL;\n        return new_task;\n    }\n};\n\n//! A task that calls a node's apply_body_bypass function, passing in an input of type Input\n//  return the task* unless it is SUCCESSFULLY_ENQUEUED, in which case return NULL\ntemplate< typename NodeType, typename Input >\nclass apply_body_task_bypass : public task {\n\n    NodeType &my_node;\n    Input my_input;\n\npublic:\n\n    apply_body_task_bypass( NodeType &n, const Input &i ) : my_node(n), my_input(i) {}\n\n    task *execute() __TBB_override {\n        task * next_task = my_node.apply_body_bypass( my_input );\n        if(next_task == SUCCESSFULLY_ENQUEUED) next_task = NULL;\n        return next_task;\n    }\n};\n\n//! A task that calls a node's apply_body_bypass function with no input\ntemplate< typename NodeType >\nclass source_task_bypass : public task {\n\n    NodeType &my_node;\n\npublic:\n\n    source_task_bypass( NodeType &n ) : my_node(n) {}\n\n    task *execute() __TBB_override {\n        task *new_task = my_node.apply_body_bypass( );\n        if(new_task == SUCCESSFULLY_ENQUEUED) return NULL;\n        return new_task;\n    }\n};\n\n// ------------------------ end of node task bodies -----------------------------------\n\n//! An empty functor that takes an Input and returns a default constructed Output\ntemplate< typename Input, typename Output >\nstruct empty_body {\n    Output operator()( const Input & ) const { return Output(); }\n};\n\ntemplate<typename T>\nclass decrementer : public continue_receiver, tbb::internal::no_copy {\n\n    T *my_node;\n\n    task *execute() __TBB_override {\n        return my_node->decrement_counter();\n    }\n\nprotected:\n\n    graph& graph_reference() __TBB_override {\n        return my_node->my_graph;\n    }\n\npublic:\n\n    typedef continue_msg input_type;\n    typedef continue_msg output_type;\n    decrementer( int number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { }\n    void set_owner( T *node ) { my_node = node; }\n};\n\n} // namespace internal\n\n#endif // __TBB__flow_graph_body_impl_H\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_cache_impl.h",
    "content": "/*\r\n    Copyright (c) 2005-2018 Intel Corporation\r\n\r\n    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n    you may not use this file except in compliance with the License.\r\n    You may obtain a copy of the License at\r\n\r\n        http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n    Unless required by applicable law or agreed to in writing, software\r\n    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n    See the License for the specific language governing permissions and\r\n    limitations under the License.\r\n\r\n\r\n\r\n\r\n*/\r\n\r\n#ifndef __TBB__flow_graph_cache_impl_H\r\n#define __TBB__flow_graph_cache_impl_H\r\n\r\n#ifndef __TBB_flow_graph_H\r\n#error Do not #include this internal file directly; use public TBB headers instead.\r\n#endif\r\n\r\n// included in namespace tbb::flow::interfaceX (in flow_graph.h)\r\n\r\nnamespace internal {\r\n\r\n//! A node_cache maintains a std::queue of elements of type T.  Each operation is protected by a lock.\r\ntemplate< typename T, typename M=spin_mutex >\r\nclass node_cache {\r\n    public:\r\n\r\n    typedef size_t size_type;\r\n\r\n    bool empty() {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        return internal_empty();\r\n    }\r\n\r\n    void add( T &n ) {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        internal_push(n);\r\n    }\r\n\r\n    void remove( T &n ) {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        for ( size_t i = internal_size(); i != 0; --i ) {\r\n            T &s = internal_pop();\r\n            if ( &s == &n )  return;  // only remove one predecessor per request\r\n            internal_push(s);\r\n        }\r\n    }\r\n\r\n    void clear() {\r\n        while( !my_q.empty()) (void)my_q.pop();\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n        my_built_predecessors.clear();\r\n#endif\r\n    }\r\n\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    typedef edge_container<T> built_predecessors_type;\r\n    built_predecessors_type &built_predecessors() { return my_built_predecessors; }\r\n\r\n    typedef typename edge_container<T>::edge_list_type predecessor_list_type;\r\n    void internal_add_built_predecessor( T &n ) {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        my_built_predecessors.add_edge(n);\r\n    }\r\n\r\n    void internal_delete_built_predecessor( T &n ) {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        my_built_predecessors.delete_edge(n);\r\n    }\r\n\r\n    void copy_predecessors( predecessor_list_type &v) {\r\n        typename mutex_type::scoped_lock lock( my_mutex );\r\n        my_built_predecessors.copy_edges(v);\r\n    }\r\n\r\n    size_t predecessor_count() {\r\n        typename mutex_type::scoped_lock lock(my_mutex);\r\n        return (size_t)(my_built_predecessors.edge_count());\r\n    }\r\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\r\n\r\nprotected:\r\n\r\n    typedef M mutex_type;\r\n    mutex_type my_mutex;\r\n    std::queue< T * > my_q;\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    built_predecessors_type my_built_predecessors;\r\n#endif\r\n\r\n    // Assumes lock is held\r\n    inline bool internal_empty( )  {\r\n        return my_q.empty();\r\n    }\r\n\r\n    // Assumes lock is held\r\n    inline size_type internal_size( )  {\r\n        return my_q.size();\r\n    }\r\n\r\n    // Assumes lock is held\r\n    inline void internal_push( T &n )  {\r\n        my_q.push(&n);\r\n    }\r\n\r\n    // Assumes lock is held\r\n    inline T &internal_pop() {\r\n        T *v = my_q.front();\r\n        my_q.pop();\r\n        return *v;\r\n    }\r\n\r\n};\r\n\r\n//! A cache of predecessors that only supports try_get\r\ntemplate< typename T, typename M=spin_mutex >\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n// TODO: make predecessor_cache type T-independent when async_msg becomes regular feature\r\nclass predecessor_cache : public node_cache< untyped_sender, M > {\r\n#else\r\nclass predecessor_cache : public node_cache< sender<T>, M > {\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\npublic:\r\n    typedef M mutex_type;\r\n    typedef T output_type;\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    typedef untyped_sender predecessor_type;\r\n    typedef untyped_receiver successor_type;\r\n#else\r\n    typedef sender<output_type> predecessor_type;\r\n    typedef receiver<output_type> successor_type;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n\r\n    predecessor_cache( ) : my_owner( NULL ) { }\r\n\r\n    void set_owner( successor_type *owner ) { my_owner = owner; }\r\n\r\n    bool get_item( output_type &v ) {\r\n\r\n        bool msg = false;\r\n\r\n        do {\r\n            predecessor_type *src;\r\n            {\r\n                typename mutex_type::scoped_lock lock(this->my_mutex);\r\n                if ( this->internal_empty() ) {\r\n                    break;\r\n                }\r\n                src = &this->internal_pop();\r\n            }\r\n\r\n            // Try to get from this sender\r\n            msg = src->try_get( v );\r\n\r\n            if (msg == false) {\r\n                // Relinquish ownership of the edge\r\n                if (my_owner)\r\n                    src->register_successor( *my_owner );\r\n            } else {\r\n                // Retain ownership of the edge\r\n                this->add(*src);\r\n            }\r\n        } while ( msg == false );\r\n        return msg;\r\n    }\r\n\r\n    // If we are removing arcs (rf_clear_edges), call clear() rather than reset().\r\n    void reset() {\r\n        if (my_owner) {\r\n            for(;;) {\r\n                predecessor_type *src;\r\n                {\r\n                    if (this->internal_empty()) break;\r\n                    src = &this->internal_pop();\r\n                }\r\n                src->register_successor( *my_owner );\r\n            }\r\n        }\r\n    }\r\n\r\nprotected:\r\n\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    using node_cache< predecessor_type, M >::my_built_predecessors;\r\n#endif\r\n    successor_type *my_owner;\r\n};\r\n\r\n//! An cache of predecessors that supports requests and reservations\r\n// TODO: make reservable_predecessor_cache type T-independent when async_msg becomes regular feature\r\ntemplate< typename T, typename M=spin_mutex >\r\nclass reservable_predecessor_cache : public predecessor_cache< T, M > {\r\npublic:\r\n    typedef M mutex_type;\r\n    typedef T output_type;\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    typedef untyped_sender predecessor_type;\r\n    typedef untyped_receiver successor_type;\r\n#else\r\n    typedef sender<T> predecessor_type;\r\n    typedef receiver<T> successor_type;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n\r\n    reservable_predecessor_cache( ) : reserved_src(NULL) { }\r\n\r\n    bool\r\n    try_reserve( output_type &v ) {\r\n        bool msg = false;\r\n\r\n        do {\r\n            {\r\n                typename mutex_type::scoped_lock lock(this->my_mutex);\r\n                if ( reserved_src || this->internal_empty() )\r\n                    return false;\r\n\r\n                reserved_src = &this->internal_pop();\r\n            }\r\n\r\n            // Try to get from this sender\r\n            msg = reserved_src->try_reserve( v );\r\n\r\n            if (msg == false) {\r\n                typename mutex_type::scoped_lock lock(this->my_mutex);\r\n                // Relinquish ownership of the edge\r\n                reserved_src->register_successor( *this->my_owner );\r\n                reserved_src = NULL;\r\n            } else {\r\n                // Retain ownership of the edge\r\n                this->add( *reserved_src );\r\n            }\r\n        } while ( msg == false );\r\n\r\n        return msg;\r\n    }\r\n\r\n    bool\r\n    try_release( ) {\r\n        reserved_src->try_release( );\r\n        reserved_src = NULL;\r\n        return true;\r\n    }\r\n\r\n    bool\r\n    try_consume( ) {\r\n        reserved_src->try_consume( );\r\n        reserved_src = NULL;\r\n        return true;\r\n    }\r\n\r\n    void reset( ) {\r\n        reserved_src = NULL;\r\n        predecessor_cache<T,M>::reset( );\r\n    }\r\n\r\n    void clear() {\r\n        reserved_src = NULL;\r\n        predecessor_cache<T,M>::clear();\r\n    }\r\n\r\nprivate:\r\n    predecessor_type *reserved_src;\r\n};\r\n\r\n\r\n//! An abstract cache of successors\r\n// TODO: make successor_cache type T-independent when async_msg becomes regular feature\r\ntemplate<typename T, typename M=spin_rw_mutex >\r\nclass successor_cache : tbb::internal::no_copy {\r\nprotected:\r\n\r\n    typedef M mutex_type;\r\n    mutex_type my_mutex;\r\n\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    typedef untyped_receiver successor_type;\r\n    typedef untyped_receiver *pointer_type;\r\n    typedef untyped_sender owner_type;\r\n#else\r\n    typedef receiver<T> successor_type;\r\n    typedef receiver<T> *pointer_type;\r\n    typedef sender<T> owner_type;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n    typedef std::list< pointer_type > successors_type;\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    edge_container<successor_type> my_built_successors;\r\n#endif\r\n    successors_type my_successors;\r\n\r\n    owner_type *my_owner;\r\n\r\npublic:\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    typedef typename edge_container<successor_type>::edge_list_type successor_list_type;\r\n\r\n    edge_container<successor_type> &built_successors() { return my_built_successors; }\r\n\r\n    void internal_add_built_successor( successor_type &r) {\r\n        typename mutex_type::scoped_lock l(my_mutex, true);\r\n        my_built_successors.add_edge( r );\r\n    }\r\n\r\n    void internal_delete_built_successor( successor_type &r) {\r\n        typename mutex_type::scoped_lock l(my_mutex, true);\r\n        my_built_successors.delete_edge(r);\r\n    }\r\n\r\n    void copy_successors( successor_list_type &v) {\r\n        typename mutex_type::scoped_lock l(my_mutex, false);\r\n        my_built_successors.copy_edges(v);\r\n    }\r\n\r\n    size_t successor_count() {\r\n        typename mutex_type::scoped_lock l(my_mutex,false);\r\n        return my_built_successors.edge_count();\r\n    }\r\n\r\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\r\n\r\n    successor_cache( ) : my_owner(NULL) {}\r\n\r\n    void set_owner( owner_type *owner ) { my_owner = owner; }\r\n\r\n    virtual ~successor_cache() {}\r\n\r\n    void register_successor( successor_type &r ) {\r\n        typename mutex_type::scoped_lock l(my_mutex, true);\r\n        my_successors.push_back( &r );\r\n    }\r\n\r\n    void remove_successor( successor_type &r ) {\r\n        typename mutex_type::scoped_lock l(my_mutex, true);\r\n        for ( typename successors_type::iterator i = my_successors.begin();\r\n              i != my_successors.end(); ++i ) {\r\n            if ( *i == & r ) {\r\n                my_successors.erase(i);\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    bool empty() {\r\n        typename mutex_type::scoped_lock l(my_mutex, false);\r\n        return my_successors.empty();\r\n    }\r\n\r\n    void clear() {\r\n        my_successors.clear();\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n        my_built_successors.clear();\r\n#endif\r\n    }\r\n\r\n#if !__TBB_PREVIEW_ASYNC_MSG\r\n    virtual task * try_put_task( const T &t ) = 0;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n };  // successor_cache<T>\r\n\r\n//! An abstract cache of successors, specialized to continue_msg\r\ntemplate<>\r\nclass successor_cache< continue_msg > : tbb::internal::no_copy {\r\nprotected:\r\n\r\n    typedef spin_rw_mutex mutex_type;\r\n    mutex_type my_mutex;\r\n\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    typedef untyped_receiver successor_type;\r\n    typedef untyped_receiver *pointer_type;\r\n#else\r\n    typedef receiver<continue_msg> successor_type;\r\n    typedef receiver<continue_msg> *pointer_type;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n    typedef std::list< pointer_type > successors_type;\r\n    successors_type my_successors;\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n    edge_container<successor_type> my_built_successors;\r\n    typedef edge_container<successor_type>::edge_list_type successor_list_type;\r\n#endif\r\n\r\n    sender<continue_msg> *my_owner;\r\n\r\npublic:\r\n\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n\r\n    edge_container<successor_type> &built_successors() { return my_built_successors; }\r\n\r\n    void internal_add_built_successor( successor_type &r) {\r\n        mutex_type::scoped_lock l(my_mutex, true);\r\n        my_built_successors.add_edge( r );\r\n    }\r\n\r\n    void internal_delete_built_successor( successor_type &r) {\r\n        mutex_type::scoped_lock l(my_mutex, true);\r\n        my_built_successors.delete_edge(r);\r\n    }\r\n\r\n    void copy_successors( successor_list_type &v) {\r\n        mutex_type::scoped_lock l(my_mutex, false);\r\n        my_built_successors.copy_edges(v);\r\n    }\r\n\r\n    size_t successor_count() {\r\n        mutex_type::scoped_lock l(my_mutex,false);\r\n        return my_built_successors.edge_count();\r\n    }\r\n\r\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\r\n\r\n    successor_cache( ) : my_owner(NULL) {}\r\n\r\n    void set_owner( sender<continue_msg> *owner ) { my_owner = owner; }\r\n\r\n    virtual ~successor_cache() {}\r\n\r\n    void register_successor( successor_type &r ) {\r\n        mutex_type::scoped_lock l(my_mutex, true);\r\n        my_successors.push_back( &r );\r\n        if ( my_owner && r.is_continue_receiver() ) {\r\n            r.register_predecessor( *my_owner );\r\n        }\r\n    }\r\n\r\n    void remove_successor( successor_type &r ) {\r\n        mutex_type::scoped_lock l(my_mutex, true);\r\n        for ( successors_type::iterator i = my_successors.begin();\r\n              i != my_successors.end(); ++i ) {\r\n            if ( *i == & r ) {\r\n                // TODO: Check if we need to test for continue_receiver before\r\n                // removing from r.\r\n                if ( my_owner )\r\n                    r.remove_predecessor( *my_owner );\r\n                my_successors.erase(i);\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    bool empty() {\r\n        mutex_type::scoped_lock l(my_mutex, false);\r\n        return my_successors.empty();\r\n    }\r\n\r\n    void clear() {\r\n        my_successors.clear();\r\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\r\n        my_built_successors.clear();\r\n#endif\r\n    }\r\n\r\n#if !__TBB_PREVIEW_ASYNC_MSG\r\n    virtual task * try_put_task( const continue_msg &t ) = 0;\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n\r\n};  // successor_cache< continue_msg >\r\n\r\n//! A cache of successors that are broadcast to\r\n// TODO: make broadcast_cache type T-independent when async_msg becomes regular feature\r\ntemplate<typename T, typename M=spin_rw_mutex>\r\nclass broadcast_cache : public successor_cache<T, M> {\r\n    typedef M mutex_type;\r\n    typedef typename successor_cache<T,M>::successors_type successors_type;\r\n\r\npublic:\r\n\r\n    broadcast_cache( ) {}\r\n\r\n    // as above, but call try_put_task instead, and return the last task we received (if any)\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    template<typename X>\r\n    task * try_put_task( const X &t ) {\r\n#else\r\n    task * try_put_task( const T &t ) __TBB_override {\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n        task * last_task = NULL;\r\n        bool upgraded = true;\r\n        typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\r\n        typename successors_type::iterator i = this->my_successors.begin();\r\n        while ( i != this->my_successors.end() ) {\r\n            task *new_task = (*i)->try_put_task(t);\r\n            // workaround for icc bug\r\n            graph& graph_ref = (*i)->graph_reference();\r\n            last_task = combine_tasks(graph_ref, last_task, new_task);  // enqueue if necessary\r\n            if(new_task) {\r\n                ++i;\r\n            }\r\n            else {  // failed\r\n                if ( (*i)->register_predecessor(*this->my_owner) ) {\r\n                    if (!upgraded) {\r\n                        l.upgrade_to_writer();\r\n                        upgraded = true;\r\n                    }\r\n                    i = this->my_successors.erase(i);\r\n                } else {\r\n                    ++i;\r\n                }\r\n            }\r\n        }\r\n        return last_task;\r\n    }\r\n\r\n};\r\n\r\n//! A cache of successors that are put in a round-robin fashion\r\n// TODO: make round_robin_cache type T-independent when async_msg becomes regular feature\r\ntemplate<typename T, typename M=spin_rw_mutex >\r\nclass round_robin_cache : public successor_cache<T, M> {\r\n    typedef size_t size_type;\r\n    typedef M mutex_type;\r\n    typedef typename successor_cache<T,M>::successors_type successors_type;\r\n\r\npublic:\r\n\r\n    round_robin_cache( ) {}\r\n\r\n    size_type size() {\r\n        typename mutex_type::scoped_lock l(this->my_mutex, false);\r\n        return this->my_successors.size();\r\n    }\r\n\r\n#if __TBB_PREVIEW_ASYNC_MSG\r\n    template<typename X>\r\n    task * try_put_task( const X &t ) {\r\n#else\r\n    task *try_put_task( const T &t ) __TBB_override {\r\n#endif // __TBB_PREVIEW_ASYNC_MSG\r\n        bool upgraded = true;\r\n        typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\r\n        typename successors_type::iterator i = this->my_successors.begin();\r\n        while ( i != this->my_successors.end() ) {\r\n            task *new_task = (*i)->try_put_task(t);\r\n            if ( new_task ) {\r\n                return new_task;\r\n            } else {\r\n               if ( (*i)->register_predecessor(*this->my_owner) ) {\r\n                   if (!upgraded) {\r\n                       l.upgrade_to_writer();\r\n                       upgraded = true;\r\n                   }\r\n                   i = this->my_successors.erase(i);\r\n               }\r\n               else {\r\n                   ++i;\r\n               }\r\n            }\r\n        }\r\n        return NULL;\r\n    }\r\n};\r\n\r\n} // namespace internal\r\n\r\n#endif // __TBB__flow_graph_cache_impl_H\r\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_impl_H\n#define __TBB_flow_graph_impl_H\n\n#include \"../tbb_stddef.h\"\n#include \"../task.h\"\n#include \"../task_arena.h\"\n#include \"../flow_graph_abstractions.h\"\n\n#include <list>\n\n#if TBB_DEPRECATED_FLOW_ENQUEUE\n#define FLOW_SPAWN(a) tbb::task::enqueue((a))\n#else\n#define FLOW_SPAWN(a) tbb::task::spawn((a))\n#endif\n\nnamespace tbb {\nnamespace flow {\n\nnamespace internal {\nstatic tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1;\n}\n\nnamespace interface10 {\n\nusing tbb::flow::internal::SUCCESSFULLY_ENQUEUED;\n\nclass graph;\nclass graph_node;\n\ntemplate <typename GraphContainerType, typename GraphNodeType>\nclass graph_iterator {\n    friend class graph;\n    friend class graph_node;\npublic:\n    typedef size_t size_type;\n    typedef GraphNodeType value_type;\n    typedef GraphNodeType* pointer;\n    typedef GraphNodeType& reference;\n    typedef const GraphNodeType& const_reference;\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! Default constructor\n    graph_iterator() : my_graph(NULL), current_node(NULL) {}\n\n    //! Copy constructor\n    graph_iterator(const graph_iterator& other) :\n        my_graph(other.my_graph), current_node(other.current_node)\n    {}\n\n    //! Assignment\n    graph_iterator& operator=(const graph_iterator& other) {\n        if (this != &other) {\n            my_graph = other.my_graph;\n            current_node = other.current_node;\n        }\n        return *this;\n    }\n\n    //! Dereference\n    reference operator*() const;\n\n    //! Dereference\n    pointer operator->() const;\n\n    //! Equality\n    bool operator==(const graph_iterator& other) const {\n        return ((my_graph == other.my_graph) && (current_node == other.current_node));\n    }\n\n    //! Inequality\n    bool operator!=(const graph_iterator& other) const { return !(operator==(other)); }\n\n    //! Pre-increment\n    graph_iterator& operator++() {\n        internal_forward();\n        return *this;\n    }\n\n    //! Post-increment\n    graph_iterator operator++(int) {\n        graph_iterator result = *this;\n        operator++();\n        return result;\n    }\n\nprivate:\n    // the graph over which we are iterating\n    GraphContainerType *my_graph;\n    // pointer into my_graph's my_nodes list\n    pointer current_node;\n\n    //! Private initializing constructor for begin() and end() iterators\n    graph_iterator(GraphContainerType *g, bool begin);\n    void internal_forward();\n};  // class graph_iterator\n\n// flags to modify the behavior of the graph reset().  Can be combined.\nenum reset_flags {\n    rf_reset_protocol = 0,\n    rf_reset_bodies = 1 << 0,  // delete the current node body, reset to a copy of the initial node body.\n    rf_clear_edges = 1 << 1   // delete edges\n};\n\nnamespace internal {\n\nvoid activate_graph(graph& g);\nvoid deactivate_graph(graph& g);\nbool is_graph_active(graph& g);\nvoid spawn_in_graph_arena(graph& g, tbb::task& arena_task);\nvoid add_task_to_graph_reset_list(graph& g, tbb::task *tp);\ntemplate<typename F> void execute_in_graph_arena(graph& g, F& f);\n\n}\n\n//! The graph class\n/** This class serves as a handle to the graph */\nclass graph : tbb::internal::no_copy, public tbb::flow::graph_proxy {\n    friend class graph_node;\n\n    template< typename Body >\n    class run_task : public task {\n    public:\n        run_task(Body& body) : my_body(body) {}\n        tbb::task *execute() __TBB_override {\n            my_body();\n            return NULL;\n        }\n    private:\n        Body my_body;\n    };\n\n    template< typename Receiver, typename Body >\n    class run_and_put_task : public task {\n    public:\n        run_and_put_task(Receiver &r, Body& body) : my_receiver(r), my_body(body) {}\n        tbb::task *execute() __TBB_override {\n            tbb::task *res = my_receiver.try_put_task(my_body());\n            if (res == SUCCESSFULLY_ENQUEUED) res = NULL;\n            return res;\n        }\n    private:\n        Receiver &my_receiver;\n        Body my_body;\n    };\n    typedef std::list<tbb::task *> task_list_type;\n\n    class wait_functor {\n        tbb::task* graph_root_task;\n    public:\n        wait_functor(tbb::task* t) : graph_root_task(t) {}\n        void operator()() const { graph_root_task->wait_for_all(); }\n    };\n\n    //! A functor that spawns a task\n    class spawn_functor : tbb::internal::no_assign {\n        tbb::task& spawn_task;\n    public:\n        spawn_functor(tbb::task& t) : spawn_task(t) {}\n        void operator()() const {\n            FLOW_SPAWN(spawn_task);\n        }\n    };\n\n    void prepare_task_arena(bool reinit = false) {\n        if (reinit) {\n            __TBB_ASSERT(my_task_arena, \"task arena is NULL\");\n            my_task_arena->terminate();\n            my_task_arena->initialize(tbb::task_arena::attach());\n        }\n        else {\n            __TBB_ASSERT(my_task_arena == NULL, \"task arena is not NULL\");\n            my_task_arena = new tbb::task_arena(tbb::task_arena::attach());\n        }\n        if (!my_task_arena->is_active()) // failed to attach\n            my_task_arena->initialize(); // create a new, default-initialized arena\n        __TBB_ASSERT(my_task_arena->is_active(), \"task arena is not active\");\n    }\n\npublic:\n    //! Constructs a graph with isolated task_group_context\n    graph();\n\n    //! Constructs a graph with use_this_context as context\n    explicit graph(tbb::task_group_context& use_this_context);\n\n    //! Destroys the graph.\n    /** Calls wait_for_all, then destroys the root task and context. */\n    ~graph();\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name(const char *name);\n#endif\n\n    void increment_wait_count() {\n        reserve_wait();\n    }\n\n    void decrement_wait_count() {\n        release_wait();\n    }\n\n    //! Used to register that an external entity may still interact with the graph.\n    /** The graph will not return from wait_for_all until a matching number of decrement_wait_count calls\n    is made. */\n    void reserve_wait() __TBB_override;\n\n    //! Deregisters an external entity that may have interacted with the graph.\n    /** The graph will not return from wait_for_all until all the number of decrement_wait_count calls\n    matches the number of increment_wait_count calls. */\n    void release_wait() __TBB_override;\n\n    //! Spawns a task that runs a body and puts its output to a specific receiver\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n    that need to block a wait_for_all() on the graph.  For example a one-off source. */\n    template< typename Receiver, typename Body >\n    void run(Receiver &r, Body body) {\n        if (internal::is_graph_active(*this)) {\n            task* rtask = new (task::allocate_additional_child_of(*root_task()))\n                run_and_put_task< Receiver, Body >(r, body);\n            my_task_arena->execute(spawn_functor(*rtask));\n        }\n    }\n\n    //! Spawns a task that runs a function object\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n    that need to block a wait_for_all() on the graph. For example a one-off source. */\n    template< typename Body >\n    void run(Body body) {\n        if (internal::is_graph_active(*this)) {\n            task* rtask = new (task::allocate_additional_child_of(*root_task())) run_task< Body >(body);\n            my_task_arena->execute(spawn_functor(*rtask));\n        }\n    }\n\n    //! Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.\n    /** The waiting thread will go off and steal work while it is block in the wait_for_all. */\n    void wait_for_all() {\n        cancelled = false;\n        caught_exception = false;\n        if (my_root_task) {\n#if TBB_USE_EXCEPTIONS\n            try {\n#endif\n                my_task_arena->execute(wait_functor(my_root_task));\n                cancelled = my_context->is_group_execution_cancelled();\n#if TBB_USE_EXCEPTIONS\n            }\n            catch (...) {\n                my_root_task->set_ref_count(1);\n                my_context->reset();\n                caught_exception = true;\n                cancelled = true;\n                throw;\n            }\n#endif\n            // TODO: the \"if\" condition below is just a work-around to support the concurrent wait\n            // mode. The cancellation and exception mechanisms are still broken in this mode.\n            // Consider using task group not to re-implement the same functionality.\n            if (!(my_context->traits() & tbb::task_group_context::concurrent_wait)) {\n                my_context->reset();  // consistent with behavior in catch()\n                my_root_task->set_ref_count(1);\n            }\n        }\n    }\n\n    //! Returns the root task of the graph\n    tbb::task * root_task() {\n        return my_root_task;\n    }\n\n    // ITERATORS\n    template<typename C, typename N>\n    friend class graph_iterator;\n\n    // Graph iterator typedefs\n    typedef graph_iterator<graph, graph_node> iterator;\n    typedef graph_iterator<const graph, const graph_node> const_iterator;\n\n    // Graph iterator constructors\n    //! start iterator\n    iterator begin();\n    //! end iterator\n    iterator end();\n    //! start const iterator\n    const_iterator begin() const;\n    //! end const iterator\n    const_iterator end() const;\n    //! start const iterator\n    const_iterator cbegin() const;\n    //! end const iterator\n    const_iterator cend() const;\n\n    //! return status of graph execution\n    bool is_cancelled() { return cancelled; }\n    bool exception_thrown() { return caught_exception; }\n\n    // thread-unsafe state reset.\n    void reset(reset_flags f = rf_reset_protocol);\n\nprivate:\n    tbb::task *my_root_task;\n    tbb::task_group_context *my_context;\n    bool own_context;\n    bool cancelled;\n    bool caught_exception;\n    bool my_is_active;\n    task_list_type my_reset_task_list;\n\n    graph_node *my_nodes, *my_nodes_last;\n\n    tbb::spin_mutex nodelist_mutex;\n    void register_node(graph_node *n);\n    void remove_node(graph_node *n);\n\n    tbb::task_arena* my_task_arena;\n\n    friend void internal::activate_graph(graph& g);\n    friend void internal::deactivate_graph(graph& g);\n    friend bool internal::is_graph_active(graph& g);\n    friend void internal::spawn_in_graph_arena(graph& g, tbb::task& arena_task);\n    friend void internal::add_task_to_graph_reset_list(graph& g, tbb::task *tp);\n    template<typename F> friend void internal::execute_in_graph_arena(graph& g, F& f);\n\n    friend class tbb::interface7::internal::task_arena_base;\n\n};  // class graph\n\n//! The base of all graph nodes.\nclass graph_node : tbb::internal::no_copy {\n    friend class graph;\n    template<typename C, typename N>\n    friend class graph_iterator;\nprotected:\n    graph& my_graph;\n    graph_node *next, *prev;\npublic:\n    explicit graph_node(graph& g);\n    \n    virtual ~graph_node();\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    virtual void set_name(const char *name) = 0;\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    virtual void extract() = 0;\n#endif\n\nprotected:\n    // performs the reset on an individual node.\n    virtual void reset_node(reset_flags f = rf_reset_protocol) = 0;\n};  // class graph_node\n\nnamespace internal {\n\ninline void activate_graph(graph& g) {\n    g.my_is_active = true;\n}\n\ninline void deactivate_graph(graph& g) {\n    g.my_is_active = false;\n}\n\ninline bool is_graph_active(graph& g) {\n    return g.my_is_active;\n}\n\n//! Executes custom functor inside graph arena\ntemplate<typename F>\ninline void execute_in_graph_arena(graph& g, F& f) {\n    if (is_graph_active(g)) {\n        __TBB_ASSERT(g.my_task_arena && g.my_task_arena->is_active(), NULL);\n        g.my_task_arena->execute(f);\n    }\n}\n\n//! Spawns a task inside graph arena\ninline void spawn_in_graph_arena(graph& g, tbb::task& arena_task) {\n    graph::spawn_functor s_fn(arena_task);\n    execute_in_graph_arena(g, s_fn);\n}\n\ninline void add_task_to_graph_reset_list(graph& g, tbb::task *tp) {\n    g.my_reset_task_list.push_back(tp);\n}\n\n} // namespace internal\n\n} // namespace interface10\n} // namespace flow\n} // namespace tbb\n\n#endif // __TBB_flow_graph_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_indexer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_indexer_impl_H\n#define __TBB__flow_graph_indexer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"_flow_graph_types_impl.h\"\n\nnamespace internal {\n\n    // Output of the indexer_node is a tbb::flow::tagged_msg, and will be of\n    // the form  tagged_msg<tag, result>\n    // where the value of tag will indicate which result was put to the\n    // successor.\n\n    template<typename IndexerNodeBaseType, typename T, size_t K>\n    task* do_try_put(const T &v, void *p) {\n        typename IndexerNodeBaseType::output_type o(K, v);\n        return reinterpret_cast<IndexerNodeBaseType *>(p)->try_put_task(&o);\n    }\n\n    template<typename TupleTypes,int N>\n    struct indexer_helper {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {\n            typedef typename tuple_element<N-1, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, N-1>;\n            tbb::flow::get<N-1>(my_input).set_up(p, indexer_node_put_task, g);\n            indexer_helper<TupleTypes,N-1>::template set_indexer_node_pointer<IndexerNodeBaseType,PortTuple>(my_input, p, g);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            indexer_helper<TupleTypes,N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            indexer_helper<TupleTypes,N-1>::extract(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename TupleTypes>\n    struct indexer_helper<TupleTypes,1> {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p, graph& g) {\n            typedef typename tuple_element<0, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, 0>;\n            tbb::flow::get<0>(my_input).set_up(p, indexer_node_put_task, g);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename T>\n    class indexer_input_port : public receiver<T> {\n    private:\n        void* my_indexer_ptr;\n        typedef task* (* forward_function_ptr)(T const &, void* );\n        forward_function_ptr my_try_put_task;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        spin_mutex my_pred_mutex;\n        typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n        built_predecessors_type my_built_predecessors;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n        graph* my_graph;\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        indexer_input_port() : my_pred_mutex(), my_graph(NULL) {}\n        indexer_input_port( const indexer_input_port & other) : receiver<T>(), my_pred_mutex(), my_graph(other.my_graph) {\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n        void set_up(void* p, forward_function_ptr f, graph& g) {\n            my_indexer_ptr = p;\n            my_try_put_task = f;\n            my_graph = &g;\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<T>::predecessor_list_type predecessor_list_type;\n        typedef typename receiver<T>::predecessor_type predecessor_type;\n\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        size_t predecessor_count() __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            return my_built_predecessors.edge_count();\n        }\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.add_edge(p);\n        }\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.delete_edge(p);\n        }\n        void copy_predecessors( predecessor_list_type &v) __TBB_override {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.copy_edges(v);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const T &v) __TBB_override {\n            return my_try_put_task(v, my_indexer_ptr);\n        }\n\n        graph& graph_reference() __TBB_override {\n            return *my_graph;\n        }\n\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void reset_receiver(reset_flags f) __TBB_override { if(f&rf_clear_edges) my_built_predecessors.clear(); }\n#else\n        void reset_receiver(reset_flags /*f*/) __TBB_override { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() { my_built_predecessors.receiver_extract(*this); }\n#endif\n    };\n\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_FE {\n    public:\n        static const int N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef InputTuple input_type;\n\n        // Some versions of Intel(R) C++ Compiler fail to generate an implicit constructor for the class which has std::tuple as a member.\n        indexer_node_FE() : my_inputs() {}\n\n        input_type &input_ports() { return my_inputs; }\n    protected:\n        input_type my_inputs;\n    };\n\n    //! indexer_node_base\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_base : public graph_node, public indexer_node_FE<InputTuple, OutputType,StructTypes>,\n                           public sender<OutputType> {\n    protected:\n       using graph_node::my_graph;\n    public:\n        static const size_t N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef StructTypes tuple_types;\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef indexer_node_FE<InputTuple, output_type,StructTypes> input_ports_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ,\n             blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        typedef indexer_node_base<InputTuple,output_type,StructTypes> class_type;\n\n        class indexer_node_base_operation : public aggregated_operation<indexer_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type const *my_arg;\n                successor_type *my_succ;\n                task *bypass_t;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *succv;\n#endif\n            };\n            indexer_node_base_operation(const output_type* e, op_type t) :\n                type(char(t)), my_arg(e) {}\n            indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)) {}\n            indexer_node_base_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, indexer_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, indexer_node_base_operation>;\n        aggregator<handler_type, indexer_node_base_operation> my_aggregator;\n\n        void handle_operations(indexer_node_base_operation* op_list) {\n            indexer_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n\n                case reg_succ:\n                    my_successors.register_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__put_task: {\n                        current->bypass_t = my_successors.try_put_task(*(current->my_arg));\n                        __TBB_store_with_release(current->status, SUCCEEDED);  // return of try_put_task actual return value\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->succv));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        indexer_node_base(graph& g) : graph_node(g), input_ports_type() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, g);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        indexer_node_base(const indexer_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this, other.my_graph);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        task * try_put_task(output_type const *v) { // not a virtual method in this class\n            indexer_node_base_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            indexer_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t successor_count() __TBB_override {\n            indexer_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_successors( successor_list_type &v) __TBB_override {\n            indexer_node_base_operation op_data(blt_succ_cpy);\n            op_data.succv = &v;\n            my_aggregator.execute(&op_data);\n        }\n        void extract() __TBB_override {\n            my_successors.built_successors().sender_extract(*this);\n            indexer_helper<StructTypes,N>::extract(this->my_inputs);\n        }\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        void reset_node(reset_flags f) __TBB_override {\n            if(f & rf_clear_edges) {\n                my_successors.clear();\n                indexer_helper<StructTypes,N>::reset_inputs(this->my_inputs,f);\n            }\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n    };  //indexer_node_base\n\n\n    template<int N, typename InputTuple> struct input_types;\n\n    template<typename InputTuple>\n    struct input_types<1, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename internal::tagged_msg<size_t, first_type > type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<2, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<3, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<4, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<5, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<6, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<7, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<8, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<9, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<10, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename tuple_element<9, InputTuple>::type tenth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type,\n                                                      tenth_type> type;\n    };\n\n    // type generators\n    template<typename OutputTuple>\n    struct indexer_types : public input_types<tuple_size<OutputTuple>::value, OutputTuple> {\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef typename input_types<N, OutputTuple>::type output_type;\n        typedef typename wrap_tuple_elements<N,indexer_input_port,OutputTuple>::type input_ports_type;\n        typedef internal::indexer_node_FE<input_ports_type,output_type,OutputTuple> indexer_FE_type;\n        typedef internal::indexer_node_base<input_ports_type, output_type, OutputTuple> indexer_base_type;\n    };\n\n    template<class OutputTuple>\n    class unfolded_indexer_node : public indexer_types<OutputTuple>::indexer_base_type {\n    public:\n        typedef typename indexer_types<OutputTuple>::input_ports_type input_ports_type;\n        typedef OutputTuple tuple_types;\n        typedef typename indexer_types<OutputTuple>::output_type output_type;\n    private:\n        typedef typename indexer_types<OutputTuple>::indexer_base_type base_type;\n    public:\n        unfolded_indexer_node(graph& g) : base_type(g) {}\n        unfolded_indexer_node(const unfolded_indexer_node &other) : base_type(other) {}\n    };\n\n} /* namespace internal */\n\n#endif  /* __TBB__flow_graph_indexer_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_item_buffer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_item_buffer_impl_H\n#define __TBB__flow_graph_item_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"tbb/internal/_flow_graph_types_impl.h\"  // for aligned_pair\n\n// in namespace tbb::flow::interfaceX (included in _flow_graph_node_impl.h)\n\n    //! Expandable buffer of items.  The possible operations are push, pop,\n    //* tests for empty and so forth.  No mutual exclusion is built in.\n    //* objects are constructed into and explicitly-destroyed.  get_my_item gives\n    // a read-only reference to the item in the buffer.  set_my_item may be called\n    // with either an empty or occupied slot.\n\n    using internal::aligned_pair;\n    using internal::alignment_of;\n\nnamespace internal {\n\n    template <typename T, typename A=cache_aligned_allocator<T> >\n    class item_buffer {\n    public:\n        typedef T item_type;\n        enum buffer_item_state { no_item=0, has_item=1, reserved_item=2 };\n    protected:\n        typedef size_t size_type;\n        typedef typename aligned_pair<item_type, buffer_item_state>::type buffer_item_type;\n        typedef typename A::template rebind<buffer_item_type>::other allocator_type;\n\n        buffer_item_type *my_array;\n        size_type my_array_size;\n        static const size_type initial_buffer_size = 4;\n        size_type my_head;\n        size_type my_tail;\n\n        bool buffer_empty() const { return my_head == my_tail; }\n\n        buffer_item_type &item(size_type i) {\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value),NULL);\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);\n            return my_array[i & (my_array_size - 1) ];\n        }\n\n        const buffer_item_type &item(size_type i) const {\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value), NULL);\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);\n            return my_array[i & (my_array_size-1)];\n        }\n\n        bool my_item_valid(size_type i) const { return (i < my_tail) && (i >= my_head) && (item(i).second != no_item); }\n        bool my_item_reserved(size_type i) const { return item(i).second == reserved_item; }\n\n        // object management in buffer\n        const item_type &get_my_item(size_t i) const {\n            __TBB_ASSERT(my_item_valid(i),\"attempt to get invalid item\");\n            item_type *itm = (tbb::internal::punned_cast<item_type *>(&(item(i).first)));\n            return *(const item_type *)itm;\n        }\n\n        // may be called with an empty slot or a slot that has already been constructed into.\n        void set_my_item(size_t i, const item_type &o) {\n            if(item(i).second != no_item) {\n                destroy_item(i);\n            }\n            new(&(item(i).first)) item_type(o);\n            item(i).second = has_item;\n        }\n\n        // destructively-fetch an object from the buffer\n        void fetch_item(size_t i, item_type &o) {\n            __TBB_ASSERT(my_item_valid(i), \"Trying to fetch an empty slot\");\n            o = get_my_item(i);  // could have std::move assign semantics\n            destroy_item(i);\n        }\n\n        // move an existing item from one slot to another.  The moved-to slot must be unoccupied,\n        // the moved-from slot must exist and not be reserved.  The after, from will be empty,\n        // to will be occupied but not reserved\n        void move_item(size_t to, size_t from) {\n            __TBB_ASSERT(!my_item_valid(to), \"Trying to move to a non-empty slot\");\n            __TBB_ASSERT(my_item_valid(from), \"Trying to move from an empty slot\");\n            set_my_item(to, get_my_item(from));   // could have std::move semantics\n            destroy_item(from);\n\n        }\n\n        // put an item in an empty slot.  Return true if successful, else false\n        bool place_item(size_t here, const item_type &me) {\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n            if(my_item_valid(here)) return false;\n#endif\n            set_my_item(here, me);\n            return true;\n        }\n\n        // could be implemented with std::move semantics\n        void swap_items(size_t i, size_t j) {\n            __TBB_ASSERT(my_item_valid(i) && my_item_valid(j), \"attempt to swap invalid item(s)\");\n            item_type temp = get_my_item(i);\n            set_my_item(i, get_my_item(j));\n            set_my_item(j, temp);\n        }\n\n        void destroy_item(size_type i) {\n            __TBB_ASSERT(my_item_valid(i), \"destruction of invalid item\");\n            (tbb::internal::punned_cast<item_type *>(&(item(i).first)))->~item_type();\n            item(i).second = no_item;\n        }\n\n        // returns the front element\n        const item_type& front() const\n        {\n            __TBB_ASSERT(my_item_valid(my_head), \"attempt to fetch head non-item\");\n            return get_my_item(my_head);\n        }\n\n        // returns  the back element\n        const item_type& back() const\n        {\n            __TBB_ASSERT(my_item_valid(my_tail - 1), \"attempt to fetch head non-item\");\n            return get_my_item(my_tail - 1);\n        }\n\n        // following methods are for reservation of the front of a bufffer.\n        void reserve_item(size_type i) { __TBB_ASSERT(my_item_valid(i) && !my_item_reserved(i), \"item cannot be reserved\"); item(i).second = reserved_item; }\n        void release_item(size_type i) { __TBB_ASSERT(my_item_reserved(i), \"item is not reserved\"); item(i).second = has_item; }\n\n        void destroy_front() { destroy_item(my_head); ++my_head; }\n        void destroy_back() { destroy_item(my_tail-1); --my_tail; }\n\n        // we have to be able to test against a new tail value without changing my_tail\n        // grow_array doesn't work if we change my_tail when the old array is too small\n        size_type size(size_t new_tail = 0) { return (new_tail ? new_tail : my_tail) - my_head; }\n        size_type capacity() { return my_array_size; }\n        // sequencer_node does not use this method, so we don't\n        // need a version that passes in the new_tail value.\n        bool buffer_full() { return size() >= capacity(); }\n\n        //! Grows the internal array.\n        void grow_my_array( size_t minimum_size ) {\n            // test that we haven't made the structure inconsistent.\n            __TBB_ASSERT(capacity() >= my_tail - my_head, \"total items exceed capacity\");\n            size_type new_size = my_array_size ? 2*my_array_size : initial_buffer_size;\n            while( new_size<minimum_size )\n                new_size*=2;\n\n            buffer_item_type* new_array = allocator_type().allocate(new_size);\n\n            // initialize validity to \"no\"\n            for( size_type i=0; i<new_size; ++i ) { new_array[i].second = no_item; }\n\n            for( size_type i=my_head; i<my_tail; ++i) {\n                if(my_item_valid(i)) {  // sequencer_node may have empty slots\n                    // placement-new copy-construct; could be std::move\n                    char *new_space = (char *)&(new_array[i&(new_size-1)].first);\n                    (void)new(new_space) item_type(get_my_item(i));\n                    new_array[i&(new_size-1)].second = item(i).second;\n                }\n            }\n\n            clean_up_buffer(/*reset_pointers*/false);\n\n            my_array = new_array;\n            my_array_size = new_size;\n        }\n\n        bool push_back(item_type &v) {\n            if(buffer_full()) {\n                grow_my_array(size() + 1);\n            }\n            set_my_item(my_tail, v);\n            ++my_tail;\n            return true;\n        }\n\n        bool pop_back(item_type &v) {\n            if (!my_item_valid(my_tail-1)) {\n                return false;\n            }\n            v = this->back();\n            destroy_back();\n            return true;\n        }\n\n        bool pop_front(item_type &v) {\n            if(!my_item_valid(my_head)) {\n                return false;\n            }\n            v = this->front();\n            destroy_front();\n            return true;\n        }\n\n        // This is used both for reset and for grow_my_array.  In the case of grow_my_array\n        // we want to retain the values of the head and tail.\n        void clean_up_buffer(bool reset_pointers) {\n            if (my_array) {\n                for( size_type i=my_head; i<my_tail; ++i ) {\n                    if(my_item_valid(i))\n                        destroy_item(i);\n                }\n                allocator_type().deallocate(my_array,my_array_size);\n            }\n            my_array = NULL;\n            if(reset_pointers) {\n                my_head = my_tail = my_array_size = 0;\n            }\n        }\n\n    public:\n        //! Constructor\n        item_buffer( ) : my_array(NULL), my_array_size(0),\n            my_head(0), my_tail(0) {\n            grow_my_array(initial_buffer_size);\n        }\n\n        ~item_buffer() {\n            clean_up_buffer(/*reset_pointers*/true);\n        }\n\n        void reset() { clean_up_buffer(/*reset_pointers*/true); grow_my_array(initial_buffer_size); }\n\n    };\n\n    //! item_buffer with reservable front-end.  NOTE: if reserving, do not\n    //* complete operation with pop_front(); use consume_front().\n    //* No synchronization built-in.\n    template<typename T, typename A=cache_aligned_allocator<T> >\n    class reservable_item_buffer : public item_buffer<T, A> {\n    protected:\n        using item_buffer<T, A>::my_item_valid;\n        using item_buffer<T, A>::my_head;\n\n    public:\n        reservable_item_buffer() : item_buffer<T, A>(), my_reserved(false) {}\n        void reset() {my_reserved = false; item_buffer<T,A>::reset(); }\n    protected:\n\n        bool reserve_front(T &v) {\n            if(my_reserved || !my_item_valid(this->my_head)) return false;\n            my_reserved = true;\n            // reserving the head\n            v = this->front();\n            this->reserve_item(this->my_head);\n            return true;\n        }\n\n        void consume_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to consume a non-reserved item\");\n            this->destroy_front();\n            my_reserved = false;\n        }\n\n        void release_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to release a non-reserved item\");\n            this->release_item(this->my_head);\n            my_reserved = false;\n        }\n\n        bool my_reserved;\n    };\n\n}  // namespace internal\n\n#endif // __TBB__flow_graph_item_buffer_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_join_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_join_impl_H\n#define __TBB__flow_graph_join_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\nnamespace internal {\n\n    struct forwarding_base : tbb::internal::no_assign {\n        forwarding_base(graph &g) : graph_ref(g) {}\n        virtual ~forwarding_base() {}\n        // decrement_port_count may create a forwarding task.  If we cannot handle the task\n        // ourselves, ask decrement_port_count to deal with it.\n        virtual task * decrement_port_count(bool handle_task) = 0;\n        virtual void increment_port_count() = 0;\n        // moved here so input ports can queue tasks\n        graph& graph_ref;\n    };\n\n    // specialization that lets us keep a copy of the current_key for building results.\n    // KeyType can be a reference type.\n    template<typename KeyType>\n    struct matching_forwarding_base : public forwarding_base {\n        typedef typename tbb::internal::strip<KeyType>::type current_key_type;\n        matching_forwarding_base(graph &g) : forwarding_base(g) { }\n        virtual task * increment_key_count(current_key_type const & /*t*/, bool /*handle_task*/) = 0; // {return NULL;}\n        current_key_type current_key; // so ports can refer to FE's desired items\n    };\n\n    template< int N >\n    struct join_helper {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<N-1>( my_input ).set_join_node_pointer(port);\n            join_helper<N-1>::set_join_node_pointer( my_input, port );\n        }\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).consume();\n            join_helper<N-1>::consume_reservations( my_input );\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).release();\n        }\n\n        template <typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            join_helper<N-1>::release_reservations(my_input);\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            if ( !tbb::flow::get<N-1>( my_input ).reserve( tbb::flow::get<N-1>( out ) ) ) return false;\n            if ( !join_helper<N-1>::reserve( my_input, out ) ) {\n                release_my_reservation( my_input );\n                return false;\n            }\n            return true;\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            bool res = tbb::flow::get<N-1>(my_input).get_item(tbb::flow::get<N-1>(out) ); // may fail\n            return join_helper<N-1>::get_my_item(my_input, out) && res;       // do get on other inputs before returning\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            join_helper<N-1>::reset_my_port(my_input);\n            tbb::flow::get<N-1>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<N-1>(my_input).set_my_key_func(tbb::flow::get<N-1>(my_key_funcs));\n            tbb::flow::get<N-1>(my_key_funcs) = NULL;\n            join_helper<N-1>::set_key_functors(my_input, my_key_funcs);\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<N-1>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<N-1>(my_inputs).set_my_key_func(tbb::flow::get<N-1>(other_inputs).get_my_key_func()->clone());\n            }\n            join_helper<N-1>::copy_key_functors(my_inputs, other_inputs);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            join_helper<N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            join_helper<N-1>::extract_inputs(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<N>\n\n    template< >\n    struct join_helper<1> {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<0>( my_input ).set_join_node_pointer(port);\n        }\n\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).consume();\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).release();\n        }\n\n        template<typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>( my_input ).reserve( tbb::flow::get<0>( out ) );\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>(my_input).get_item(tbb::flow::get<0>(out));\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<0>(my_input).set_my_key_func(tbb::flow::get<0>(my_key_funcs));\n            tbb::flow::get<0>(my_key_funcs) = NULL;\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<0>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<0>(my_inputs).set_my_key_func(tbb::flow::get<0>(other_inputs).get_my_key_func()->clone());\n            }\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<1>\n\n    //! The two-phase join port\n    template< typename T >\n    class reserving_port : public receiver<T> {\n    public:\n        typedef T input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n#endif\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_pred, rem_pred, res_item, rel_res, con_res\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef reserving_port<T> class_type;\n\n        class reserving_port_operation : public aggregated_operation<reserving_port_operation> {\n        public:\n            char type;\n            union {\n                T *my_arg;\n                predecessor_type *my_pred;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *plist;\n#endif\n            };\n            reserving_port_operation(const T& e, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(&e)) {}\n            reserving_port_operation(const predecessor_type &s, op_type t) : type(char(t)),\n                my_pred(const_cast<predecessor_type *>(&s)) {}\n            reserving_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, reserving_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, reserving_port_operation>;\n        aggregator<handler_type, reserving_port_operation> my_aggregator;\n\n        void handle_operations(reserving_port_operation* op_list) {\n            reserving_port_operation *current;\n            bool no_predecessors;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_pred:\n                    no_predecessors = my_predecessors.empty();\n                    my_predecessors.add(*(current->my_pred));\n                    if ( no_predecessors ) {\n                        (void) my_join->decrement_port_count(true); // may try to forward\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(current->my_pred));\n                    if(my_predecessors.empty()) my_join->increment_port_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_item:\n                    if ( reserved ) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else if ( my_predecessors.try_reserve( *(current->my_arg) ) ) {\n                        reserved = true;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    } else {\n                        if ( my_predecessors.empty() ) {\n                            my_join->increment_port_count();\n                        }\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case rel_res:\n                    reserved = false;\n                    my_predecessors.try_release( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case con_res:\n                    reserved = false;\n                    my_predecessors.try_consume( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_predecessors.internal_add_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task( const T & ) __TBB_override {\n            return NULL;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        //! Constructor\n        reserving_port() : reserved(false) {\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        reserving_port(const reserving_port& /* other */) : receiver<T>() {\n            reserved = false;\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        //! Add a predecessor\n        bool register_predecessor( predecessor_type &src ) __TBB_override {\n            reserving_port_operation op_data(src, reg_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Remove a predecessor\n        bool remove_predecessor( predecessor_type &src ) __TBB_override {\n            reserving_port_operation op_data(src, rem_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Reserve an item from the port\n        bool reserve( T &v ) {\n            reserving_port_operation op_data(v, res_item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Release the port\n        void release( ) {\n            reserving_port_operation op_data(rel_res);\n            my_aggregator.execute(&op_data);\n        }\n\n        //! Complete use of the port\n        void consume( ) {\n            reserving_port_operation op_data(con_res);\n            my_aggregator.execute(&op_data);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_predecessors.built_predecessors(); }\n        void internal_add_built_predecessor(predecessor_type &src) __TBB_override {\n            reserving_port_operation op_data(src, add_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &src) __TBB_override {\n            reserving_port_operation op_data(src, del_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            reserving_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            reserving_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            my_predecessors.built_predecessors().receiver_extract(*this);\n        }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            if(f & rf_clear_edges) my_predecessors.clear();\n            else\n            my_predecessors.reset();\n            reserved = false;\n            __TBB_ASSERT(!(f&rf_clear_edges) || my_predecessors.empty(), \"port edges not removed\");\n        }\n\n    private:\n        forwarding_base *my_join;\n        reservable_predecessor_cache< T, null_mutex > my_predecessors;\n        bool reserved;\n    };  // reserving_port\n\n    //! queueing join_port\n    template<typename T>\n    class queueing_port : public receiver<T>, public item_buffer<T> {\n    public:\n        typedef T input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef queueing_port<T> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n    // ----------- Aggregator ------------\n    private:\n        enum op_type { get__item, res_port, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class queueing_port_operation : public aggregated_operation<queueing_port_operation> {\n        public:\n            char type;\n            T my_val;\n            T *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            predecessor_type *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            task * bypass_t;\n            // constructor for value parameter\n            queueing_port_operation(const T& e, op_type t) :\n                type(char(t)), my_val(e)\n                , bypass_t(NULL)\n            {}\n            // constructor for pointer parameter\n            queueing_port_operation(const T* p, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(p))\n                , bypass_t(NULL)\n            {}\n            // constructor with no parameter\n            queueing_port_operation(op_type t) : type(char(t))\n                , bypass_t(NULL)\n            {}\n        };\n\n        typedef internal::aggregating_functor<class_type, queueing_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, queueing_port_operation>;\n        aggregator<handler_type, queueing_port_operation> my_aggregator;\n\n        void handle_operations(queueing_port_operation* op_list) {\n            queueing_port_operation *current;\n            bool was_empty;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put_task: {\n                        task *rtask = NULL;\n                        was_empty = this->buffer_empty();\n                        this->push_back(current->my_val);\n                        if (was_empty) rtask = my_join->decrement_port_count(false);\n                        else\n                            rtask = SUCCESSFULLY_ENQUEUED;\n                        current->bypass_t = rtask;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case get__item:\n                    if(!this->buffer_empty()) {\n                        *(current->my_arg) = this->front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    else {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case res_port:\n                    __TBB_ASSERT(this->my_item_valid(this->my_head), \"No item to reset\");\n                    this->destroy_front();\n                    if(this->my_item_valid(this->my_head)) {\n                        (void)my_join->decrement_port_count(true);\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n    // ------------ End Aggregator ---------------\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const T &v) __TBB_override {\n            queueing_port_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            __TBB_ASSERT(op_data.status == SUCCEEDED || !op_data.bypass_t, \"inconsistent return from aggregator\");\n            if(!op_data.bypass_t) return SUCCESSFULLY_ENQUEUED;\n            return op_data.bypass_t;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        //! Constructor\n        queueing_port() : item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! copy constructor\n        queueing_port(const queueing_port& /* other */) : receiver<T>(), item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! record parent for tallying available items\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        bool get_item( T &v ) {\n            queueing_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            queueing_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            queueing_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            queueing_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            queueing_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            queueing_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            item_buffer<T>::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        void reset_receiver(reset_flags f) __TBB_override {\n            tbb::internal::suppress_unused_warning(f);\n            item_buffer<T>::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            if (f & rf_clear_edges)\n                my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        forwarding_base *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<predecessor_type> my_built_predecessors;\n#endif\n    };  // queueing_port\n\n#include \"_flow_graph_tagged_buffer_impl.h\"\n\n    template<typename K>\n    struct count_element {\n        K my_key;\n        size_t my_value;\n    };\n\n    // method to access the key in the counting table\n    // the ref has already been removed from K\n    template< typename K >\n    struct key_to_count_functor {\n        typedef count_element<K> table_item_type;\n        const K& operator()(const table_item_type& v) { return v.my_key; }\n    };\n\n    // the ports can have only one template parameter.  We wrap the types needed in\n    // a traits type\n    template< class TraitsType >\n    class key_matching_port :\n        public receiver<typename TraitsType::T>,\n        public hash_buffer< typename TraitsType::K, typename TraitsType::T, typename TraitsType::TtoK,\n                typename TraitsType::KHash > {\n    public:\n        typedef TraitsType traits;\n        typedef key_matching_port<traits> class_type;\n        typedef typename TraitsType::T input_type;\n        typedef typename TraitsType::K key_type;\n        typedef typename tbb::internal::strip<key_type>::type noref_key_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef typename TraitsType::TtoK type_to_key_func_type;\n        typedef typename TraitsType::KHash hash_compare_type;\n        typedef hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n    private:\n// ----------- Aggregator ------------\n    private:\n        enum op_type { try__put, get__item, res_port\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class key_matching_port_operation : public aggregated_operation<key_matching_port_operation> {\n        public:\n            char type;\n            input_type my_val;\n            input_type *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            predecessor_type *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            // constructor for value parameter\n            key_matching_port_operation(const input_type& e, op_type t) :\n                type(char(t)), my_val(e) {}\n            // constructor for pointer parameter\n            key_matching_port_operation(const input_type* p, op_type t) :\n                type(char(t)), my_arg(const_cast<input_type*>(p)) {}\n            // constructor with no parameter\n            key_matching_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_port_operation>;\n        aggregator<handler_type, key_matching_port_operation> my_aggregator;\n\n        void handle_operations(key_matching_port_operation* op_list) {\n            key_matching_port_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put: {\n                        bool was_inserted = this->insert_with_key(current->my_val);\n                        // return failure if a duplicate insertion occurs\n                        __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);\n                    }\n                    break;\n                case get__item:\n                    // use current_key from FE for item\n                    if(!this->find_with_key(my_join->current_key, *(current->my_arg))) {\n                        __TBB_ASSERT(false, \"Failed to find item corresponding to current_key.\");\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_port:\n                    // use current_key from FE for item\n                    this->delete_with_key(my_join->current_key);\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const input_type& v) __TBB_override {\n            key_matching_port_operation op_data(v, try__put);\n            task *rtask = NULL;\n            my_aggregator.execute(&op_data);\n            if(op_data.status == SUCCEEDED) {\n                rtask = my_join->increment_key_count((*(this->get_key_func()))(v), false);  // may spawn\n                // rtask has to reflect the return status of the try_put\n                if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n            }\n            return rtask;\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_join->graph_ref;\n        }\n\n    public:\n\n        key_matching_port() : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        key_matching_port(const key_matching_port& /*other*/) : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        ~key_matching_port() { }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = dynamic_cast<matching_forwarding_base<key_type>*>(join);\n        }\n\n        void set_my_key_func(type_to_key_func_type *f) { this->set_key_func(f); }\n\n        type_to_key_func_type* get_my_key_func() { return this->get_key_func(); }\n\n        bool get_item( input_type &v ) {\n            // aggregator uses current_key from FE for Key\n            key_matching_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type &built_predecessors() __TBB_override { return my_built_predecessors; }\n\n        void internal_add_built_predecessor(predecessor_type &p) __TBB_override {\n            key_matching_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_predecessor(predecessor_type &p) __TBB_override {\n            key_matching_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            key_matching_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &l) __TBB_override {\n            key_matching_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            key_matching_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() {\n            buffer_type::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif\n        void reset_receiver(reset_flags f ) __TBB_override {\n            tbb::internal::suppress_unused_warning(f);\n            buffer_type::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           if (f & rf_clear_edges)\n              my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        // my_join forwarding base used to count number of inputs that\n        // received key.\n        matching_forwarding_base<key_type> *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<predecessor_type> my_built_predecessors;\n#endif\n    };  // key_matching_port\n\n    using namespace graph_policy_namespace;\n\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base;\n\n    //! join_node_FE : implements input port policy\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_FE;\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<reserving, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<reserving, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base((other.forwarding_base::graph_ref)), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n       void increment_port_count() __TBB_override {\n            ++ports_with_no_inputs;\n        }\n\n        // if all input_ports have predecessors, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task) __TBB_override {\n            if(ports_with_no_inputs.fetch_and_decrement() == 1) {\n                if(internal::is_graph_active(this->graph_ref)) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                }\n            }\n            return NULL;\n        }\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::reset_inputs(my_inputs, f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract( ) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_inputs;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_inputs) return false;\n            return join_helper<N>::reserve(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            join_helper<N>::consume_reservations(my_inputs);\n        }\n        void tuple_rejected() {\n            join_helper<N>::release_reservations(my_inputs);\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_inputs;\n    };  // join_node_FE<reserving, ... >\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<queueing, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<queueing, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base((other.forwarding_base::graph_ref)), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {\n            ports_with_no_items = N;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task) __TBB_override\n        {\n            if(ports_with_no_items.fetch_and_decrement() == 1) {\n                if(internal::is_graph_active(this->graph_ref)) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass <base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                }\n            }\n            return NULL;\n        }\n\n        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            reset_port_count();\n            join_helper<N>::reset_inputs(my_inputs, f );\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            reset_port_count();\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_items;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_items) return false;\n            return join_helper<N>::get_items(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            reset_port_count();\n            join_helper<N>::reset_ports(my_inputs);\n        }\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_items;\n    };  // join_node_FE<queueing, ...>\n\n    // key_matching join front-end.\n    template<typename InputTuple, typename OutputTuple, typename K, typename KHash>\n    class join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple> : public matching_forwarding_base<K>,\n             // buffer of key value counts\n              public hash_buffer<   // typedefed below to key_to_count_buffer_type\n                  typename tbb::internal::strip<K>::type&,        // force ref type on K\n                  count_element<typename tbb::internal::strip<K>::type>,\n                  internal::type_to_key_function_body<\n                      count_element<typename tbb::internal::strip<K>::type>,\n                      typename tbb::internal::strip<K>::type& >,\n                  KHash >,\n             // buffer of output items\n             public item_buffer<OutputTuple> {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef K key_type;\n        typedef typename tbb::internal::strip<key_type>::type unref_key_type;\n        typedef KHash key_hash_compare;\n        // must use K without ref.\n        typedef count_element<unref_key_type> count_element_type;\n        // method that lets us refer to the key of this type.\n        typedef key_to_count_functor<unref_key_type> key_to_count_func;\n        typedef internal::type_to_key_function_body< count_element_type, unref_key_type&> TtoK_function_body_type;\n        typedef internal::type_to_key_function_body_leaf<count_element_type, unref_key_type&, key_to_count_func> TtoK_function_body_leaf_type;\n        // this is the type of the special table that keeps track of the number of discrete\n        // elements corresponding to each key that we've seen.\n        typedef hash_buffer< unref_key_type&, count_element_type, TtoK_function_body_type, key_hash_compare >\n                 key_to_count_buffer_type;\n        typedef item_buffer<output_type> output_buffer_type;\n        typedef join_node_base<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> base_node_type; // for forwarding\n        typedef matching_forwarding_base<key_type> forwarding_base_type;\n\n// ----------- Aggregator ------------\n        // the aggregator is only needed to serialize the access to the hash table.\n        // and the output_buffer_type base class\n    private:\n        enum op_type { res_count, inc_count, may_succeed, try_make };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_FE<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> class_type;\n\n        class key_matching_FE_operation : public aggregated_operation<key_matching_FE_operation> {\n        public:\n            char type;\n            unref_key_type my_val;\n            output_type* my_output;\n            task *bypass_t;\n            bool enqueue_task;\n            // constructor for value parameter\n            key_matching_FE_operation(const unref_key_type& e , bool q_task , op_type t) : type(char(t)), my_val(e),\n                 my_output(NULL), bypass_t(NULL), enqueue_task(q_task) {}\n            key_matching_FE_operation(output_type *p, op_type t) : type(char(t)), my_output(p), bypass_t(NULL),\n                 enqueue_task(true) {}\n            // constructor with no parameter\n            key_matching_FE_operation(op_type t) : type(char(t)), my_output(NULL), bypass_t(NULL), enqueue_task(true) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_FE_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_FE_operation>;\n        aggregator<handler_type, key_matching_FE_operation> my_aggregator;\n\n        // called from aggregator, so serialized\n        // returns a task pointer if the a task would have been enqueued but we asked that\n        // it be returned.  Otherwise returns NULL.\n        task * fill_output_buffer(unref_key_type &t, bool should_enqueue, bool handle_task) {\n            output_type l_out;\n            task *rtask = NULL;\n            bool do_fwd = should_enqueue && this->buffer_empty() && internal::is_graph_active(this->graph_ref);\n            this->current_key = t;\n            this->delete_with_key(this->current_key);   // remove the key\n            if(join_helper<N>::get_items(my_inputs, l_out)) {  //  <== call back\n                this->push_back(l_out);\n                if(do_fwd) {  // we enqueue if receiving an item from predecessor, not if successor asks for item\n                    rtask = new ( task::allocate_additional_child_of( *(this->graph_ref.root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(handle_task) {\n                        internal::spawn_in_graph_arena(this->graph_ref, *rtask);\n                        rtask = NULL;\n                    }\n                    do_fwd = false;\n                }\n                // retire the input values\n                join_helper<N>::reset_ports(my_inputs);  //  <== call back\n            }\n            else {\n                __TBB_ASSERT(false, \"should have had something to push\");\n            }\n            return rtask;\n        }\n\n        void handle_operations(key_matching_FE_operation* op_list) {\n            key_matching_FE_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case res_count:  // called from BE\n                    {\n                        this->destroy_front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case inc_count: {  // called from input ports\n                        count_element_type *p = 0;\n                        unref_key_type &t = current->my_val;\n                        bool do_enqueue = current->enqueue_task;\n                        if(!(this->find_ref_with_key(t,p))) {\n                            count_element_type ev;\n                            ev.my_key = t;\n                            ev.my_value = 0;\n                            this->insert_with_key(ev);\n                            if(!(this->find_ref_with_key(t,p))) {\n                                __TBB_ASSERT(false, \"should find key after inserting it\");\n                            }\n                        }\n                        if(++(p->my_value) == size_t(N)) {\n                            task *rtask = fill_output_buffer(t, true, do_enqueue);\n                            __TBB_ASSERT(!rtask || !do_enqueue, \"task should not be returned\");\n                            current->bypass_t = rtask;\n                        }\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case may_succeed:  // called from BE\n                    __TBB_store_with_release(current->status, this->buffer_empty() ? FAILED : SUCCEEDED);\n                    break;\n                case try_make:  // called from BE\n                    if(this->buffer_empty()) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else {\n                        *(current->my_output) = this->front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n\n    public:\n        template<typename FunctionTuple>\n        join_node_FE(graph &g, FunctionTuple &TtoK_funcs) : forwarding_base_type(g), my_node(NULL) {\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::set_key_functors(my_inputs, TtoK_funcs);\n            my_aggregator.initialize_handler(handler_type(this));\n                    TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base_type((other.forwarding_base_type::graph_ref)), key_to_count_buffer_type(),\n        output_buffer_type() {\n            my_node = NULL;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::copy_key_functors(my_inputs, const_cast<input_type &>(other.my_inputs));\n            my_aggregator.initialize_handler(handler_type(this));\n            TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {  // called from BE\n            key_matching_FE_operation op_data(res_count);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        // return a task if we are asked and did create one.\n        task *increment_key_count(unref_key_type const & t, bool handle_task) __TBB_override {  // called from input_ports\n            key_matching_FE_operation op_data(t, handle_task, inc_count);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n        task *decrement_port_count(bool /*handle_task*/) __TBB_override { __TBB_ASSERT(false, NULL); return NULL; }\n\n        void increment_port_count() __TBB_override { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f ) {\n            // called outside of parallel contexts\n            join_helper<N>::reset_inputs(my_inputs, f);\n\n            key_to_count_buffer_type::reset();\n            output_buffer_type::reset();\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            // called outside of parallel contexts\n            join_helper<N>::extract_inputs(my_inputs);\n            key_to_count_buffer_type::reset();  // have to reset the tag counts\n            output_buffer_type::reset();  // also the queue of outputs\n            // my_node->current_tag = NO_TAG;\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {  // called from back-end\n            key_matching_FE_operation op_data(may_succeed);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // cannot lock while calling back to input_ports.  current_key will only be set\n        // and reset under the aggregator, so it will remain consistent.\n        bool try_to_make_tuple(output_type &out) {\n            key_matching_FE_operation op_data(&out,try_make);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        void tuple_accepted() {\n            reset_port_count();  // reset current_key after ports reset.\n        }\n\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;  // input ports\n        base_node_type *my_node;\n    }; // join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple>\n\n    //! join_node_base\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,\n                           public sender<OutputTuple> {\n    protected:\n        using graph_node::my_graph;\n    public:\n        typedef OutputTuple output_type;\n\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;\n        using input_ports_type::tuple_build_may_succeed;\n        using input_ports_type::try_to_make_tuple;\n        using input_ports_type::tuple_accepted;\n        using input_ports_type::tuple_rejected;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__get, do_fwrd, do_fwrd_bypass\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ, blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_base<JP,InputTuple,OutputTuple> class_type;\n\n        class join_node_base_operation : public aggregated_operation<join_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type *my_arg;\n                successor_type *my_succ;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *slist;\n#endif\n            };\n            task *bypass_t;\n            join_node_base_operation(const output_type& e, op_type t) : type(char(t)),\n                my_arg(const_cast<output_type*>(&e)), bypass_t(NULL) {}\n            join_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)), bypass_t(NULL) {}\n            join_node_base_operation(op_type t) : type(char(t)), bypass_t(NULL) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, join_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, join_node_base_operation>;\n        bool forwarder_busy;\n        aggregator<handler_type, join_node_base_operation> my_aggregator;\n\n        void handle_operations(join_node_base_operation* op_list) {\n            join_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_succ: {\n                        my_successors.register_successor(*(current->my_succ));\n                        if(tuple_build_may_succeed() && !forwarder_busy && internal::is_graph_active(my_graph)) {\n                            task *rtask = new ( task::allocate_additional_child_of(*(my_graph.root_task())) )\n                                    forward_task_bypass\n                                    <join_node_base<JP,InputTuple,OutputTuple> >(*this);\n                            internal::spawn_in_graph_arena(my_graph, *rtask);\n                            forwarder_busy = true;\n                        }\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__get:\n                    if(tuple_build_may_succeed()) {\n                        if(try_to_make_tuple(*(current->my_arg))) {\n                            tuple_accepted();\n                            __TBB_store_with_release(current->status, SUCCEEDED);\n                        }\n                        else __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else __TBB_store_with_release(current->status, FAILED);\n                    break;\n                case do_fwrd_bypass: {\n                        bool build_succeeded;\n                        task *last_task = NULL;\n                        output_type out;\n                        if(tuple_build_may_succeed()) {  // checks output queue of FE\n                            do {\n                                build_succeeded = try_to_make_tuple(out);  // fetch front_end of queue\n                                if(build_succeeded) {\n                                    task *new_task = my_successors.try_put_task(out);\n                                    last_task = combine_tasks(my_graph, last_task, new_task);\n                                    if(new_task) {\n                                        tuple_accepted();\n                                    }\n                                    else {\n                                        tuple_rejected();\n                                        build_succeeded = false;\n                                    }\n                                }\n                            } while(build_succeeded);\n                        }\n                        current->bypass_t = last_task;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                        forwarder_busy = false;\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->slist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        join_node_base(graph &g) : graph_node(g), input_ports_type(g), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        join_node_base(const join_node_base& other) :\n            graph_node(other.graph_node::my_graph), input_ports_type(other),\n            sender<OutputTuple>(), forwarder_busy(false), my_successors() {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        template<typename FunctionTuple>\n        join_node_base(graph &g, FunctionTuple f) : graph_node(g), input_ports_type(g, f), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool try_get( output_type &v) __TBB_override {\n            join_node_base_operation op_data(v, try__get);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_successors_type &built_successors() __TBB_override { return my_successors.built_successors(); }\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            join_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t successor_count() __TBB_override {\n            join_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_successors(successor_list_type &l) __TBB_override {\n            join_node_base_operation op_data(blt_succ_cpy);\n            op_data.slist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() __TBB_override {\n            input_ports_type::extract();\n            my_successors.built_successors().sender_extract(*this);\n        }\n#endif\n\n    protected:\n\n        void reset_node(reset_flags f) __TBB_override {\n            input_ports_type::reset(f);\n            if(f & rf_clear_edges) my_successors.clear();\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n\n        friend class forward_task_bypass< join_node_base<JP, InputTuple, OutputTuple> >;\n        task *forward_task() {\n            join_node_base_operation op_data(do_fwrd_bypass);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n    };  // join_node_base\n\n    // join base class type generator\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    struct join_base {\n        typedef typename internal::join_node_base<JP, typename wrap_tuple_elements<N,PT,OutputTuple>::type, OutputTuple> type;\n    };\n\n    template<int N, typename OutputTuple, typename K, typename KHash>\n    struct join_base<N, key_matching_port, OutputTuple, key_matching<K,KHash> > {\n        typedef key_matching<K, KHash> key_traits_type;\n        typedef K key_type;\n        typedef KHash key_hash_compare;\n        typedef typename internal::join_node_base< key_traits_type,\n                // ports type\n                typename wrap_key_tuple_elements<N,key_matching_port,key_traits_type,OutputTuple>::type,\n                OutputTuple > type;\n    };\n\n    //! unfolded_join_node : passes input_ports_type to join_node_base.  We build the input port type\n    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, key_matching_port)\n    //  and should match the typename.\n\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    class unfolded_join_node : public join_base<N,PT,OutputTuple,JP>::type {\n    public:\n        typedef typename wrap_tuple_elements<N, PT, OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<JP, input_ports_type, output_type > base_type;\n    public:\n        unfolded_join_node(graph &g) : base_type(g) {}\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    struct key_from_message_body {\n        K operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<K>(t);\n        }\n    };\n    // Adds const to reference type\n    template <typename K, typename T>\n    struct key_from_message_body<K&,T> {\n        const K& operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<const K&>(t);\n        }\n    };\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n    // key_matching unfolded_join_node.  This must be a separate specialization because the constructors\n    // differ.\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<2,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<2,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n    public:\n        typedef typename wrap_key_tuple_elements<2,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 2, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<3,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<3,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n    public:\n        typedef typename wrap_key_tuple_elements<3,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 3, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<4,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<4,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n    public:\n        typedef typename wrap_key_tuple_elements<4,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 4, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<5,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<5,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n    public:\n        typedef typename wrap_key_tuple_elements<5,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 5, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<6,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<6,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n    public:\n        typedef typename wrap_key_tuple_elements<6,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4, typename Body5>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4, Body5 body5)\n                : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 6, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<7,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<7,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n    public:\n        typedef typename wrap_key_tuple_elements<7,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 7, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<8,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<8,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n    public:\n        typedef typename wrap_key_tuple_elements<8,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 8, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<9,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<9,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n    public:\n        typedef typename wrap_key_tuple_elements<9,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7, typename Body8>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 9, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<10,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<10,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n        typedef typename tbb::flow::tuple_element<9, OutputTuple>::type T9;\n    public:\n        typedef typename wrap_key_tuple_elements<10,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename internal::type_to_key_function_body<T9, K> *f9_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p, f9_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>()),\n                    new internal::type_to_key_function_body_leaf<T9, K, key_from_message_body<K,T9> >(key_from_message_body<K,T9>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n            typename Body5, typename Body6, typename Body7, typename Body8, typename Body9>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8, Body9 body9) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8),\n                    new internal::type_to_key_function_body_leaf<T9, K, Body9>(body9)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 10, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n    //! templated function to refer to input ports of the join node\n    template<size_t N, typename JNT>\n    typename tbb::flow::tuple_element<N, typename JNT::input_ports_type>::type &input_port(JNT &jn) {\n        return tbb::flow::get<N>(jn.input_ports());\n    }\n\n}\n#endif // __TBB__flow_graph_join_impl_H\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_node_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_node_impl_H\n#define __TBB__flow_graph_node_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"_flow_graph_item_buffer_impl.h\"\n\n//! @cond INTERNAL\nnamespace internal {\n\n    using tbb::internal::aggregated_operation;\n    using tbb::internal::aggregating_functor;\n    using tbb::internal::aggregator;\n\n     template< typename T, typename A >\n     class function_input_queue : public item_buffer<T,A> {\n     public:\n         bool empty() const {\n             return this->buffer_empty();\n         }\n\n         const T& front() const {\n             return this->item_buffer<T, A>::front();\n         }\n\n         bool pop( T& t ) {\n             return this->pop_front( t );\n         }\n\n         void pop() {\n             this->destroy_front();\n         }\n\n         bool push( T& t ) {\n             return this->push_back( t );\n         }\n     };\n\n    //! Input and scheduling for a function node that takes a type Input as input\n    //  The only up-ref is apply_body_impl, which should implement the function\n    //  call and any handling of the result.\n    template< typename Input, typename Policy, typename A, typename ImplType >\n    class function_input_base : public receiver<Input>, tbb::internal::no_assign {\n        enum op_type {reg_pred, rem_pred, try_fwd, tryput_bypass, app_body_bypass, occupy_concurrency\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred,\n            blt_pred_cnt, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n        };\n        typedef function_input_base<Input, Policy, A, ImplType> class_type;\n\n    public:\n\n        //! The input type of this receiver\n        typedef Input input_type;\n        typedef typename receiver<input_type>::predecessor_type predecessor_type;\n        typedef predecessor_cache<input_type, null_mutex > predecessor_cache_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n        typedef typename A::template rebind< input_queue_type >::other queue_allocator_type;\n        __TBB_STATIC_ASSERT(!((internal::has_policy<queueing, Policy>::value) && (internal::has_policy<rejecting, Policy>::value)),\n                              \"queueing and rejecting policies can't be specified simultaneously\");\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n        //! Constructor for function_input_base\n        function_input_base( graph &g, size_t max_concurrency)\n            : my_graph_ref(g), my_max_concurrency(max_concurrency), my_concurrency(0),\n              my_queue(!internal::has_policy<rejecting, Policy>::value ? new input_queue_type() : NULL),\n            forwarder_busy(false)\n        {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Copy constructor\n        function_input_base( const function_input_base& src) :\n            receiver<Input>(), tbb::internal::no_assign(),\n            my_graph_ref(src.my_graph_ref), my_max_concurrency(src.my_max_concurrency),\n            my_concurrency(0), my_queue(src.my_queue ? new input_queue_type() : NULL),\n            forwarder_busy(false)\n        {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Destructor\n        // The queue is allocated by the constructor for {multi}function_node.\n        // TODO: pass the graph_buffer_policy to the base so it can allocate the queue instead.\n        // This would be an interface-breaking change.\n        virtual ~function_input_base() {\n            if ( my_queue ) delete my_queue;\n        }\n\n        task* try_put_task( const input_type& t) __TBB_override {\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            return try_put_task_impl(t, internal::has_policy<lightweight, Policy>());\n#else\n            return try_put_task_impl(t);\n#endif\n        }\n\n        //! Adds src to the list of cached predecessors.\n        bool register_predecessor( predecessor_type &src ) __TBB_override {\n            operation_type op_data(reg_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n        //! Removes src from the list of cached predecessors.\n        bool remove_predecessor( predecessor_type &src ) __TBB_override {\n            operation_type op_data(rem_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        //! Adds to list of predecessors added by make_edge\n        void internal_add_built_predecessor( predecessor_type &src) __TBB_override {\n            operation_type op_data(add_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        //! removes from to list of predecessors (used by remove_edge)\n        void internal_delete_built_predecessor( predecessor_type &src) __TBB_override {\n            operation_type op_data(del_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t predecessor_count() __TBB_override {\n            operation_type op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_predecessors(predecessor_list_type &v) __TBB_override {\n            operation_type op_data(blt_pred_cpy);\n            op_data.predv = &v;\n            my_aggregator.execute(&op_data);\n        }\n\n        built_predecessors_type &built_predecessors() __TBB_override {\n            return my_predecessors.built_predecessors();\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    protected:\n\n        void reset_function_input_base( reset_flags f) {\n            my_concurrency = 0;\n            if(my_queue) {\n                my_queue->reset();\n            }\n            reset_receiver(f);\n            forwarder_busy = false;\n        }\n\n        graph& my_graph_ref;\n        const size_t my_max_concurrency;\n        size_t my_concurrency;\n        input_queue_type *my_queue;\n        predecessor_cache<input_type, null_mutex > my_predecessors;\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            if( f & rf_clear_edges) my_predecessors.clear();\n            else\n                my_predecessors.reset();\n            __TBB_ASSERT(!(f & rf_clear_edges) || my_predecessors.empty(), \"function_input_base reset failed\");\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_graph_ref;\n        }\n\n        task* try_get_postponed_task(const input_type& i) {\n            operation_type op_data(i, app_body_bypass);  // tries to pop an item or get_item\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n    private:\n\n        friend class apply_body_task_bypass< class_type, input_type >;\n        friend class forward_task_bypass< class_type >;\n\n        class operation_type : public aggregated_operation< operation_type > {\n        public:\n            char type;\n            union {\n                input_type *elem;\n                predecessor_type *r;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *predv;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n            };\n            tbb::task *bypass_t;\n            operation_type(const input_type& e, op_type t) :\n                type(char(t)), elem(const_cast<input_type*>(&e)) {}\n            operation_type(op_type t) : type(char(t)), r(NULL) {}\n        };\n\n        bool forwarder_busy;\n        typedef internal::aggregating_functor<class_type, operation_type> handler_type;\n        friend class internal::aggregating_functor<class_type, operation_type>;\n        aggregator< handler_type, operation_type > my_aggregator;\n\n        task* perform_queued_requests() {\n            task* new_task = NULL;\n            if(my_queue) {\n                if(!my_queue->empty()) {\n                    ++my_concurrency;\n                    new_task = create_body_task(my_queue->front());\n\n                    my_queue->pop();\n                }\n            }\n            else {\n                input_type i;\n                if(my_predecessors.get_item(i)) {\n                    ++my_concurrency;\n                    new_task = create_body_task(i);\n                }\n            }\n            return new_task;\n        }\n        void handle_operations(operation_type *op_list) {\n            operation_type *tmp;\n            while (op_list) {\n                tmp = op_list;\n                op_list = op_list->next;\n                switch (tmp->type) {\n                case reg_pred:\n                    my_predecessors.add(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    if (!forwarder_busy) {\n                        forwarder_busy = true;\n                        spawn_forward_task();\n                    }\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case app_body_bypass: {\n                        tmp->bypass_t = NULL;\n                        __TBB_ASSERT(my_max_concurrency != 0, NULL);\n                        --my_concurrency;\n                        if(my_concurrency<my_max_concurrency)\n                            tmp->bypass_t = perform_queued_requests();\n\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case tryput_bypass: internal_try_put_task(tmp);  break;\n                case try_fwd: internal_forward(tmp);  break;\n                case occupy_concurrency:\n                    if (my_concurrency < my_max_concurrency) {\n                        ++my_concurrency;\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    } else {\n                        __TBB_store_with_release(tmp->status, FAILED);\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred: {\n                         my_predecessors.internal_add_built_predecessor(*(tmp->r));\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    tmp->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors( *(tmp->predv) );\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n        //! Put to the node, but return the task instead of enqueueing it\n        void internal_try_put_task(operation_type *op) {\n            __TBB_ASSERT(my_max_concurrency != 0, NULL);\n            if (my_concurrency < my_max_concurrency) {\n               ++my_concurrency;\n               task * new_task = create_body_task(*(op->elem));\n               op->bypass_t = new_task;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else if ( my_queue && my_queue->push(*(op->elem)) ) {\n               op->bypass_t = SUCCESSFULLY_ENQUEUED;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else {\n               op->bypass_t = NULL;\n               __TBB_store_with_release(op->status, FAILED);\n           }\n        }\n\n        //! Tries to spawn bodies if available and if concurrency allows\n        void internal_forward(operation_type *op) {\n            op->bypass_t = NULL;\n            if (my_concurrency < my_max_concurrency || !my_max_concurrency)\n                op->bypass_t = perform_queued_requests();\n            if(op->bypass_t)\n                __TBB_store_with_release(op->status, SUCCEEDED);\n            else {\n                forwarder_busy = false;\n                __TBB_store_with_release(op->status, FAILED);\n            }\n        }\n\n        task* internal_try_put_bypass( const input_type& t ) {\n            operation_type op_data(t, tryput_bypass);\n            my_aggregator.execute(&op_data);\n            if( op_data.status == internal::SUCCEEDED ) {\n                return op_data.bypass_t;\n            }\n            return NULL;\n        }\n\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n        task* try_put_task_impl( const input_type& t, tbb::internal::true_type ) {\n            if( my_max_concurrency == 0 ) {\n                return apply_body_bypass(t);\n            } else {\n                operation_type check_op(t, occupy_concurrency);\n                my_aggregator.execute(&check_op);\n                if( check_op.status == internal::SUCCEEDED ) {\n                    return apply_body_bypass(t);\n                }\n                return internal_try_put_bypass(t);\n            }\n        }\n\n        task* try_put_task_impl( const input_type& t, tbb::internal::false_type ) {\n#else\n        task* try_put_task_impl( const input_type& t ) {\n#endif\n            if( my_max_concurrency == 0 ) {\n                return create_body_task(t);\n            } else {\n                return internal_try_put_bypass(t);\n            }\n        }\n\n        //! Applies the body to the provided input\n        //  then decides if more work is available\n        task * apply_body_bypass( const input_type &i ) {\n            return static_cast<ImplType *>(this)->apply_body_impl_bypass(i);\n        }\n\n        //! allocates a task to apply a body\n        inline task * create_body_task( const input_type &input ) {\n\n            return (internal::is_graph_active(my_graph_ref)) ?\n                new(task::allocate_additional_child_of(*(my_graph_ref.root_task())))\n                    apply_body_task_bypass < class_type, input_type >(*this, input) :\n                NULL;\n        }\n\n       //! This is executed by an enqueued task, the \"forwarder\"\n       task *forward_task() {\n           operation_type op_data(try_fwd);\n           task *rval = NULL;\n           do {\n               op_data.status = WAIT;\n               my_aggregator.execute(&op_data);\n               if(op_data.status == SUCCEEDED) {\n                    // workaround for icc bug\n                   tbb::task *ttask = op_data.bypass_t;\n                   rval = combine_tasks(my_graph_ref, rval, ttask);\n               }\n           } while (op_data.status == SUCCEEDED);\n           return rval;\n       }\n\n       inline task *create_forward_task() {\n           return (internal::is_graph_active(my_graph_ref)) ?\n               new(task::allocate_additional_child_of(*(my_graph_ref.root_task()))) forward_task_bypass< class_type >(*this) :\n               NULL;\n       }\n\n       //! Spawns a task that calls forward()\n       inline void spawn_forward_task() {\n           task* tp = create_forward_task();\n           if(tp) {\n               internal::spawn_in_graph_arena(graph_reference(), *tp);\n           }\n       }\n    };  // function_input_base\n\n    //! Implements methods for a function node that takes a type Input as input and sends\n    //  a type Output to its successors.\n    template< typename Input, typename Output, typename Policy, typename A>\n    class function_input : public function_input_base<Input, Policy, A, function_input<Input,Output,Policy,A> > {\n    public:\n        typedef Input input_type;\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n        typedef function_input<Input, Output, Policy,A> my_class;\n        typedef function_input_base<Input, Policy, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        function_input( graph &g, size_t max_concurrency, Body& body ) :\n            base_type(g, max_concurrency),\n            my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n            my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        function_input( const function_input& src ) :\n                base_type(src),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~function_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *this->my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        output_type apply_body_impl( const input_type& i) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)(i);\n            tbb::internal::fgt_end_body( my_body );\n            return v;\n#else\n            return (*my_body)(i);\n#endif\n        }\n\n        //TODO: consider moving into the base class\n        task * apply_body_impl_bypass( const input_type &i) {\n            output_type v = apply_body_impl(i);\n            task* postponed_task = NULL;\n#if !__TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            task* successor_task = successors().try_put_task(v);\n#endif\n            if(base_type::my_max_concurrency != 0) {\n                postponed_task = base_type::try_get_postponed_task(i);\n            }\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            // postponed_task is either NULL or the pointer to TBB task\n            if(postponed_task) {\n                // spawn task to make it available for other workers\n                // since we do not know successors' execution policy\n                internal::spawn_in_graph_arena(base_type::graph_reference(), *postponed_task);\n            }\n            task* successor_task = successors().try_put_task(v);\n            if( internal::has_policy<lightweight, Policy>::value && !successor_task ) {\n                // Return confirmative status since current\n                // node's body has been executed anyway\n                successor_task = SUCCESSFULLY_ENQUEUED;\n            }\n            return successor_task;\n#else\n            graph& g = base_type::my_graph_ref;\n            return combine_tasks(g, successor_task, postponed_task);\n#endif\n        }\n\n    protected:\n\n        void reset_function_input(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n    };  // function_input\n\n\n    // helper templates to clear the successor edges of the output ports of an multifunction_node\n    template<int N> struct clear_element {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().clear();\n            clear_element<N-1>::clear_this(p);\n        }\n        template<typename P> static bool this_empty(P &p) {\n            if(tbb::flow::get<N-1>(p).successors().empty())\n                return clear_element<N-1>::this_empty(p);\n            return false;\n        }\n    };\n\n    template<> struct clear_element<1> {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().clear();\n        }\n        template<typename P> static bool this_empty(P &p) {\n            return tbb::flow::get<0>(p).successors().empty();\n        }\n    };\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // helper templates to extract the output ports of an multifunction_node from graph\n    template<int N> struct extract_element {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().built_successors().sender_extract(tbb::flow::get<N-1>(p));\n            extract_element<N-1>::extract_this(p);\n        }\n    };\n\n    template<> struct extract_element<1> {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().built_successors().sender_extract(tbb::flow::get<0>(p));\n        }\n    };\n#endif\n\n    //! Implements methods for a function node that takes a type Input as input\n    //  and has a tuple of output ports specified.\n    template< typename Input, typename OutputPortSet, typename Policy, typename A>\n    class multifunction_input : public function_input_base<Input, Policy, A, multifunction_input<Input,OutputPortSet,Policy,A> > {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputPortSet>::value;\n        typedef Input input_type;\n        typedef OutputPortSet output_ports_type;\n        typedef multifunction_body<input_type, output_ports_type> multifunction_body_type;\n        typedef multifunction_input<Input, OutputPortSet, Policy, A> my_class;\n        typedef function_input_base<Input, Policy, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        multifunction_input(\n                graph &g,\n                size_t max_concurrency,\n                Body& body) :\n            base_type(g, max_concurrency),\n            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ),\n            my_init_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        multifunction_input( const multifunction_input& src ) :\n                base_type(src),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~multifunction_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            multifunction_body_type &body_ref = *this->my_body;\n            return *static_cast<Body*>(dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body_ptr());\n        }\n\n        // for multifunction nodes we do not have a single successor as such.  So we just tell\n        // the task we were successful.\n        //TODO: consider moving common parts with implementation in function_input into separate function\n        task * apply_body_impl_bypass( const input_type &i) {\n            tbb::internal::fgt_begin_body( my_body );\n            (*my_body)(i, my_output_ports);\n            tbb::internal::fgt_end_body( my_body );\n            task* ttask = NULL;\n            if(base_type::my_max_concurrency != 0) {\n                ttask = base_type::try_get_postponed_task(i);\n            }\n            return ttask ? ttask : SUCCESSFULLY_ENQUEUED;\n        }\n\n        output_ports_type &output_ports(){ return my_output_ports; }\n\n    protected:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            extract_element<N>::extract_this(my_output_ports);\n        }\n#endif\n\n        void reset(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_clear_edges)clear_element<N>::clear_this(my_output_ports);\n            if(f & rf_reset_bodies) {\n                multifunction_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n            __TBB_ASSERT(!(f & rf_clear_edges) || clear_element<N>::this_empty(my_output_ports), \"multifunction_node reset failed\");\n        }\n\n        multifunction_body_type *my_body;\n        multifunction_body_type *my_init_body;\n        output_ports_type my_output_ports;\n\n    };  // multifunction_input\n\n    // template to refer to an output port of a multifunction_node\n    template<size_t N, typename MOP>\n    typename tbb::flow::tuple_element<N, typename MOP::output_ports_type>::type &output_port(MOP &op) {\n        return tbb::flow::get<N>(op.output_ports());\n    }\n\n    inline void check_task_and_spawn(graph& g, task* t) {\n        if (t && t != SUCCESSFULLY_ENQUEUED) {\n            internal::spawn_in_graph_arena(g, *t);\n        }\n    }\n\n    // helper structs for split_node\n    template<int N>\n    struct emit_element {\n        template<typename T, typename P>\n        static task* emit_this(graph& g, const T &t, P &p) {\n            // TODO: consider to collect all the tasks in task_list and spawn them all at once\n            task* last_task = tbb::flow::get<N-1>(p).try_put_task(tbb::flow::get<N-1>(t));\n            check_task_and_spawn(g, last_task);\n            return emit_element<N-1>::emit_this(g,t,p);\n        }\n    };\n\n    template<>\n    struct emit_element<1> {\n        template<typename T, typename P>\n        static task* emit_this(graph& g, const T &t, P &p) {\n            task* last_task = tbb::flow::get<0>(p).try_put_task(tbb::flow::get<0>(t));\n            check_task_and_spawn(g, last_task);\n            return SUCCESSFULLY_ENQUEUED;\n        }\n    };\n\n    //! Implements methods for an executable node that takes continue_msg as input\n    template< typename Output\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            , typename Policy\n#endif\n            >\n    class continue_input : public continue_receiver {\n    public:\n\n        //! The input type of this receiver\n        typedef continue_msg input_type;\n\n        //! The output type of this receiver\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n        typedef continue_input<output_type\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n                             , Policy\n#endif\n                             > class_type;\n\n        template< typename Body >\n        continue_input( graph &g, Body& body )\n            : my_graph_ref(g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }\n\n        template< typename Body >\n        continue_input( graph &g, int number_of_predecessors, Body& body )\n            : continue_receiver( number_of_predecessors ), my_graph_ref(g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) )\n        { }\n\n        continue_input( const continue_input& src ) : continue_receiver(src),\n            my_graph_ref(src.my_graph_ref),\n            my_body( src.my_init_body->clone() ),\n            my_init_body( src.my_init_body->clone() ) {}\n\n        ~continue_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        void reset_receiver( reset_flags f) __TBB_override {\n            continue_receiver::reset_receiver(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n    protected:\n\n        graph& my_graph_ref;\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n        friend class apply_body_task_bypass< class_type, continue_msg >;\n\n        //! Applies the body to the provided input\n        task *apply_body_bypass( input_type ) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)( continue_msg() );\n            tbb::internal::fgt_end_body( my_body );\n            return successors().try_put_task( v );\n#else\n            return successors().try_put_task( (*my_body)( continue_msg() ) );\n#endif\n        }\n\n        task* execute() __TBB_override {\n            if(!internal::is_graph_active(my_graph_ref)) {\n                return NULL;\n            }\n#if __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n            if(internal::has_policy<lightweight, Policy>::value) {\n                return apply_body_bypass( continue_msg() );\n            }\n            else\n#endif\n                return new ( task::allocate_additional_child_of( *(my_graph_ref.root_task()) ) )\n                       apply_body_task_bypass< class_type, continue_msg >( *this, continue_msg() );\n        }\n\n        graph& graph_reference() __TBB_override {\n            return my_graph_ref;\n        }\n    };  // continue_input\n\n    //! Implements methods for both executable and function nodes that puts Output to its successors\n    template< typename Output >\n    class function_output : public sender<Output> {\n    public:\n\n        template<int N> friend struct clear_element;\n        typedef Output output_type;\n        typedef typename sender<output_type>::successor_type successor_type;\n        typedef broadcast_cache<output_type> broadcast_cache_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n        function_output() { my_successors.set_owner(this); }\n        function_output(const function_output & /*other*/) : sender<output_type>() {\n            my_successors.set_owner(this);\n        }\n\n        //! Adds a new successor to this node\n        bool register_successor( successor_type &r ) __TBB_override {\n            successors().register_successor( r );\n            return true;\n        }\n\n        //! Removes a successor from this node\n        bool remove_successor( successor_type &r ) __TBB_override {\n            successors().remove_successor( r );\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_successors_type &built_successors() __TBB_override { return successors().built_successors(); }\n\n\n        void internal_add_built_successor( successor_type &r) __TBB_override {\n            successors().internal_add_built_successor( r );\n        }\n\n        void internal_delete_built_successor( successor_type &r) __TBB_override {\n            successors().internal_delete_built_successor( r );\n        }\n\n        size_t successor_count() __TBB_override {\n            return successors().successor_count();\n        }\n\n        void  copy_successors( successor_list_type &v) __TBB_override {\n            successors().copy_successors(v);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        // for multifunction_node.  The function_body that implements\n        // the node will have an input and an output tuple of ports.  To put\n        // an item to a successor, the body should\n        //\n        //    get<I>(output_ports).try_put(output_value);\n        //\n        // if task pointer is returned will always spawn and return true, else\n        // return value will be bool returned from successors.try_put.\n        task *try_put_task(const output_type &i) { // not a virtual method in this class\n            return my_successors.try_put_task(i);\n        }\n\n        broadcast_cache_type &successors() { return my_successors; }\n    protected:\n        broadcast_cache_type my_successors;\n\n    };  // function_output\n\n    template< typename Output >\n    class multifunction_output : public function_output<Output> {\n    public:\n        typedef Output output_type;\n        typedef function_output<output_type> base_type;\n        using base_type::my_successors;\n\n        multifunction_output() : base_type() {my_successors.set_owner(this);}\n        multifunction_output( const multifunction_output &/*other*/) : base_type() { my_successors.set_owner(this); }\n\n        bool try_put(const output_type &i) {\n            task *res = try_put_task(i);\n            if(!res) return false;\n            if(res != SUCCESSFULLY_ENQUEUED) {\n                FLOW_SPAWN(*res); // TODO: Spawn task inside arena\n            }\n            return true;\n        }\n\n    protected:\n\n        task* try_put_task(const output_type &i) {\n            return my_successors.try_put_task(i);\n        }\n\n        template <int N> friend struct emit_element;\n\n    };  // multifunction_output\n\n//composite_node\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE && __TBB_FLOW_GRAPH_CPP11_FEATURES\n    template<typename CompositeType>\n    void add_nodes_impl(CompositeType*, bool) {}\n\n    template< typename CompositeType, typename NodeType1, typename... NodeTypes >\n    void add_nodes_impl(CompositeType *c_node, bool visible, const NodeType1& n1, const NodeTypes&... n) {\n        void *addr = const_cast<NodeType1 *>(&n1);\n\n        if(visible)\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, c_node, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );\n        else\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, c_node, tbb::internal::FLOW_NODE );\n        add_nodes_impl(c_node, visible, n...);\n    }\n#endif\n\n}  // internal\n\n#endif // __TBB__flow_graph_node_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_streaming_node.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_flow_graph_streaming_H\n#define __TBB_flow_graph_streaming_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if __TBB_PREVIEW_STREAMING_NODE\n\n// Included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\ntemplate <int N1, int N2>\nstruct port_ref_impl {\n    // \"+1\" since the port_ref range is a closed interval (includes its endpoints).\n    static const int size = N2 - N1 + 1;\n};\n\n} // internal\n\n// The purpose of the port_ref_impl is the pretty syntax: the deduction of a compile-time constant is processed from the return type.\n// So it is possible to use this helper without parentheses, e.g. \"port_ref<0>\".\ntemplate <int N1, int N2 = N1>\ninternal::port_ref_impl<N1,N2> port_ref() {\n    return internal::port_ref_impl<N1,N2>();\n};\n\nnamespace internal {\n\ntemplate <typename T>\nstruct num_arguments {\n    static const int value = 1;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>(*)()> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate <typename... Args>\nvoid ignore_return_values( Args&&... ) {}\n\ntemplate <typename T>\nT or_return_values( T&& t ) { return t; }\ntemplate <typename T, typename... Rest>\nT or_return_values( T&& t, Rest&&... rest ) {\n    return t | or_return_values( std::forward<Rest>(rest)... );\n}\n\ntemplate<typename JP>\nstruct key_from_policy {\n    typedef size_t type;\n    typedef std::false_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key> > {\n    typedef Key type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key&> > {\n    typedef const Key &type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Device, typename Key>\nclass streaming_device_with_key {\n    Device my_device;\n    typename std::decay<Key>::type my_key;\npublic:\n    // TODO: investigate why default constructor is required\n    streaming_device_with_key() {}\n    streaming_device_with_key( const Device& d, Key k ) : my_device( d ), my_key( k ) {}\n    Key key() const { return my_key; }\n    const Device& device() const { return my_device; }\n};\n\n// --------- Kernel argument helpers --------- //\ntemplate <typename T>\nstruct is_port_ref_impl {\n    typedef std::false_type type;\n};\n\ntemplate <int N1, int N2>\nstruct is_port_ref_impl< port_ref_impl<N1, N2> > {\n    typedef std::true_type type;\n};\n\ntemplate <int N1, int N2>\nstruct is_port_ref_impl< port_ref_impl<N1, N2>( * )()  > {\n    typedef std::true_type type;\n};\n\ntemplate <typename T>\nstruct is_port_ref {\n    typedef typename is_port_ref_impl< typename tbb::internal::strip<T>::type >::type type;\n};\n\ntemplate <typename ...Args1>\nstruct convert_and_call_impl;\n\ntemplate <typename A1, typename ...Args1>\nstruct convert_and_call_impl<A1, Args1...> {\n    static const size_t my_delta = 1; // Index 0 contains device\n\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit(F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<A1, Args1...>::doit_impl(typename is_port_ref<A1>::type(), f, t, a1, args1..., args2...);\n    }\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit_impl(std::false_type, F& f, Tuple& t, A1& a1, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., a1);\n    }\n    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<port_ref_impl<N1 + 1,N2>, Args1...>::doit_impl(x, f, t, port_ref<N1 + 1, N2>(), args1...,\n            args2..., std::get<N1 + my_delta>(t));\n    }\n    template <typename F, typename Tuple, int N, typename ...Args2>\n    static void doit_impl(std::true_type, F& f, Tuple& t, port_ref_impl<N, N>, Args1&... args1, Args2&... args2) {\n        convert_and_call_impl<Args1...>::doit(f, t, args1..., args2..., std::get<N + my_delta>(t));\n    }\n\n    template <typename F, typename Tuple, int N1, int N2, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N1, N2>(* fn)(), Args1&... args1, Args2&... args2) {\n        doit_impl(x, f, t, fn(), args1..., args2...);\n    }\n    template <typename F, typename Tuple, int N, typename ...Args2>\n    static void doit_impl(std::true_type x, F& f, Tuple& t, port_ref_impl<N, N>(* fn)(), Args1&... args1, Args2&... args2) {\n        doit_impl(x, f, t, fn(), args1..., args2...);\n    }\n};\n\ntemplate <>\nstruct convert_and_call_impl<> {\n    template <typename F, typename Tuple, typename ...Args2>\n    static void doit(F& f, Tuple&, Args2&... args2) {\n        f(args2...);\n    }\n};\n// ------------------------------------------- //\n\ntemplate<typename JP, typename StreamFactory, typename... Ports>\nstruct streaming_node_traits {\n    // Do not use 'using' instead of 'struct' because Microsoft Visual C++ 12.0 fails to compile.\n    template <typename T>\n    struct async_msg_type {\n        typedef typename StreamFactory::template async_msg_type<T> type;\n    };\n\n    typedef tuple< typename async_msg_type<Ports>::type... > input_tuple;\n    typedef input_tuple output_tuple;\n    typedef tuple< streaming_device_with_key< typename StreamFactory::device_type, typename key_from_policy<JP>::type >,\n        typename async_msg_type<Ports>::type... > kernel_input_tuple;\n\n    // indexer_node parameters pack expansion workaround for VS2013 for streaming_node\n    typedef indexer_node< typename async_msg_type<Ports>::type... > indexer_node_type;\n};\n\n// Default empty implementation\ntemplate<typename StreamFactory, typename KernelInputTuple, typename = void>\nclass kernel_executor_helper {\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\n    typedef KernelInputTuple kernel_input_tuple;\nprotected:\n    template <typename ...Args>\n    void enqueue_kernel_impl( kernel_input_tuple&, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        factory.send_kernel( device, kernel, args... );\n    }\n};\n\n// Implementation for StreamFactory supporting range\ntemplate<typename StreamFactory, typename KernelInputTuple>\nclass kernel_executor_helper<StreamFactory, KernelInputTuple, typename tbb::internal::void_t< typename StreamFactory::range_type >::type > {\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\n    typedef KernelInputTuple kernel_input_tuple;\n\n    typedef typename StreamFactory::range_type range_type;\n\n    // Container for randge. It can contain either port references or real range.\n    struct range_wrapper {\n        virtual range_type get_range( const kernel_input_tuple &ip ) const = 0;\n        virtual range_wrapper *clone() const = 0;\n        virtual ~range_wrapper() {}\n    };\n\n    struct range_value : public range_wrapper {\n        range_value( const range_type& value ) : my_value(value) {}\n\n        range_value( range_type&& value ) : my_value(std::move(value)) {}\n\n        range_type get_range( const kernel_input_tuple & ) const __TBB_override {\n            return my_value;\n        }\n\n        range_wrapper *clone() const __TBB_override {\n            return new range_value(my_value);\n        }\n    private:\n        range_type my_value;\n    };\n\n    template <int N>\n    struct range_mapper : public range_wrapper {\n        range_mapper() {}\n\n        range_type get_range( const kernel_input_tuple &ip ) const __TBB_override {\n            // \"+1\" since get<0>(ip) is StreamFactory::device.\n            return get<N + 1>(ip).data(false);\n        }\n\n        range_wrapper *clone() const __TBB_override {\n            return new range_mapper<N>;\n        }\n    };\n\nprotected:\n    template <typename ...Args>\n    void enqueue_kernel_impl( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        __TBB_ASSERT(my_range_wrapper, \"Range is not set. Call set_range() before running streaming_node.\");\n        factory.send_kernel( device, kernel, my_range_wrapper->get_range(ip), args... );\n    }\n\npublic:\n    kernel_executor_helper() : my_range_wrapper(NULL) {}\n\n    kernel_executor_helper(const kernel_executor_helper& executor) : my_range_wrapper(executor.my_range_wrapper ? executor.my_range_wrapper->clone() : NULL) {}\n\n    kernel_executor_helper(kernel_executor_helper&& executor) : my_range_wrapper(executor.my_range_wrapper) {\n        // Set moving holder mappers to NULL to prevent double deallocation\n        executor.my_range_wrapper = NULL;\n    }\n\n    ~kernel_executor_helper() {\n        if (my_range_wrapper) delete my_range_wrapper;\n    }\n\n    void set_range(const range_type& work_size) {\n        my_range_wrapper = new range_value(work_size);\n    }\n\n    void set_range(range_type&& work_size) {\n        my_range_wrapper = new range_value(std::move(work_size));\n    }\n\n    template <int N>\n    void set_range(port_ref_impl<N, N>) {\n        my_range_wrapper = new range_mapper<N>;\n    }\n\n    template <int N>\n    void set_range(port_ref_impl<N, N>(*)()) {\n        my_range_wrapper = new range_mapper<N>;\n    }\n\nprivate:\n    range_wrapper* my_range_wrapper;\n};\n\n} // internal\n\n/*\n/---------------------------------------- streaming_node ------------------------------------\\\n|                                                                                            |\n|   /--------------\\   /----------------------\\   /-----------\\   /----------------------\\   |\n|   |              |   |    (device_with_key) O---O           |   |                      |   |\n|   |              |   |                      |   |           |   |                      |   |\nO---O indexer_node O---O device_selector_node O---O join_node O---O      kernel_node     O---O\n|   |              |   | (multifunction_node) |   |           |   | (multifunction_node) |   |\nO---O              |   |                      O---O           |   |                      O---O\n|   \\--------------/   \\----------------------/   \\-----------/   \\----------------------/   |\n|                                                                                            |\n\\--------------------------------------------------------------------------------------------/\n*/\ntemplate<typename... Args>\nclass streaming_node;\n\ntemplate<typename... Ports, typename JP, typename StreamFactory>\nclass streaming_node< tuple<Ports...>, JP, StreamFactory >\n    : public composite_node < typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple,\n                              typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple >\n    , public internal::kernel_executor_helper< StreamFactory, typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple >\n{\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::input_tuple input_tuple;\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::output_tuple output_tuple;\n    typedef typename internal::key_from_policy<JP>::type key_type;\nprotected:\n    typedef typename StreamFactory::device_type device_type;\n    typedef typename StreamFactory::kernel_type kernel_type;\nprivate:\n    typedef internal::streaming_device_with_key<device_type, key_type> device_with_key_type;\n    typedef composite_node<input_tuple, output_tuple> base_type;\n    static const size_t NUM_INPUTS = tuple_size<input_tuple>::value;\n    static const size_t NUM_OUTPUTS = tuple_size<output_tuple>::value;\n\n    typedef typename internal::make_sequence<NUM_INPUTS>::type input_sequence;\n    typedef typename internal::make_sequence<NUM_OUTPUTS>::type output_sequence;\n\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::indexer_node_type indexer_node_type;\n    typedef typename indexer_node_type::output_type indexer_node_output_type;\n    typedef typename internal::streaming_node_traits<JP, StreamFactory, Ports...>::kernel_input_tuple kernel_input_tuple;\n    typedef multifunction_node<indexer_node_output_type, kernel_input_tuple> device_selector_node;\n    typedef multifunction_node<kernel_input_tuple, output_tuple> kernel_multifunction_node;\n\n    template <int... S>\n    typename base_type::input_ports_type get_input_ports( internal::sequence<S...> ) {\n        return std::tie( internal::input_port<S>( my_indexer_node )... );\n    }\n\n    template <int... S>\n    typename base_type::output_ports_type get_output_ports( internal::sequence<S...> ) {\n        return std::tie( internal::output_port<S>( my_kernel_node )... );\n    }\n\n    typename base_type::input_ports_type get_input_ports() {\n        return get_input_ports( input_sequence() );\n    }\n\n    typename base_type::output_ports_type get_output_ports() {\n        return get_output_ports( output_sequence() );\n    }\n\n    template <int N>\n    int make_Nth_edge() {\n        make_edge( internal::output_port<N>( my_device_selector_node ), internal::input_port<N>( my_join_node ) );\n        return 0;\n    }\n\n    template <int... S>\n    void make_edges( internal::sequence<S...> ) {\n        make_edge( my_indexer_node, my_device_selector_node );\n        make_edge( my_device_selector_node, my_join_node );\n        internal::ignore_return_values( make_Nth_edge<S + 1>()... );\n        make_edge( my_join_node, my_kernel_node );\n    }\n\n    void make_edges() {\n        make_edges( input_sequence() );\n    }\n\n    class device_selector_base {\n    public:\n        virtual void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) = 0;\n        virtual device_selector_base *clone( streaming_node &n ) const = 0;\n        virtual ~device_selector_base() {}\n    };\n\n    template <typename UserFunctor>\n    class device_selector : public device_selector_base, tbb::internal::no_assign {\n    public:\n        device_selector( UserFunctor uf, streaming_node &n, StreamFactory &f )\n            : my_dispatch_funcs( create_dispatch_funcs( input_sequence() ) )\n            , my_user_functor( uf ), my_node(n), my_factory( f )\n        {\n            my_port_epoches.fill( 0 );\n        }\n\n        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) __TBB_override {\n            (this->*my_dispatch_funcs[ v.tag() ])( my_port_epoches[ v.tag() ], v, op );\n            __TBB_ASSERT( (tbb::internal::is_same_type<typename internal::key_from_policy<JP>::is_key_matching, std::false_type>::value)\n                || my_port_epoches[v.tag()] == 0, \"Epoch is changed when key matching is requested\" );\n        }\n\n        device_selector_base *clone( streaming_node &n ) const __TBB_override {\n            return new device_selector( my_user_functor, n, my_factory );\n        }\n    private:\n        typedef void(device_selector<UserFunctor>::*send_and_put_fn_type)(size_t &, const indexer_node_output_type &, typename device_selector_node::output_ports_type &);\n        typedef std::array < send_and_put_fn_type, NUM_INPUTS > dispatch_funcs_type;\n\n        template <int... S>\n        static dispatch_funcs_type create_dispatch_funcs( internal::sequence<S...> ) {\n            dispatch_funcs_type dispatch = { { &device_selector<UserFunctor>::send_and_put_impl<S>... } };\n            return dispatch;\n        }\n\n        template <typename T>\n        key_type get_key( std::false_type, const T &, size_t &epoch ) {\n            __TBB_STATIC_ASSERT( (tbb::internal::is_same_type<key_type, size_t>::value), \"\" );\n            return epoch++;\n        }\n\n        template <typename T>\n        key_type get_key( std::true_type, const T &t, size_t &/*epoch*/ ) {\n            using tbb::flow::key_from_message;\n            return key_from_message<key_type>( t );\n        }\n\n        template <int N>\n        void send_and_put_impl( size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            typedef typename tuple_element<N + 1, typename device_selector_node::output_ports_type>::type::output_type elem_type;\n            elem_type e = internal::cast_to<elem_type>( v );\n            device_type device = get_device( get_key( typename internal::key_from_policy<JP>::is_key_matching(), e, epoch ), get<0>( op ) );\n            my_factory.send_data( device, e );\n            get<N + 1>( op ).try_put( e );\n        }\n\n        template< typename DevicePort >\n        device_type get_device( key_type key, DevicePort& dp ) {\n            typename std::unordered_map<typename std::decay<key_type>::type, epoch_desc>::iterator it = my_devices.find( key );\n            if ( it == my_devices.end() ) {\n                device_type d = my_user_functor( my_factory );\n                std::tie( it, std::ignore ) = my_devices.insert( std::make_pair( key, d ) );\n                bool res = dp.try_put( device_with_key_type( d, key ) );\n                __TBB_ASSERT_EX( res, NULL );\n                my_node.notify_new_device( d );\n            }\n            epoch_desc &e = it->second;\n            device_type d = e.my_device;\n            if ( ++e.my_request_number == NUM_INPUTS ) my_devices.erase( it );\n            return d;\n        }\n\n        struct epoch_desc {\n            epoch_desc(device_type d ) : my_device( d ), my_request_number( 0 ) {}\n            device_type my_device;\n            size_t my_request_number;\n        };\n\n        std::unordered_map<typename std::decay<key_type>::type, epoch_desc> my_devices;\n        std::array<size_t, NUM_INPUTS> my_port_epoches;\n        dispatch_funcs_type my_dispatch_funcs;\n        UserFunctor my_user_functor;\n        streaming_node &my_node;\n        StreamFactory &my_factory;\n    };\n\n    class device_selector_body {\n    public:\n        device_selector_body( device_selector_base *d ) : my_device_selector( d ) {}\n\n        void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            (*my_device_selector)(v, op);\n        }\n    private:\n        device_selector_base *my_device_selector;\n    };\n\n    class args_storage_base : tbb::internal::no_copy {\n    public:\n        typedef typename kernel_multifunction_node::output_ports_type output_ports_type;\n\n        virtual void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) = 0;\n        virtual void send( device_type d ) = 0;\n        virtual args_storage_base *clone() const = 0;\n        virtual ~args_storage_base () {}\n\n    protected:\n        args_storage_base( const kernel_type& kernel, StreamFactory &f )\n            : my_kernel( kernel ), my_factory( f )\n        {}\n\n        args_storage_base( const args_storage_base &k )\n            : my_kernel( k.my_kernel ), my_factory( k.my_factory )\n        {}\n\n        const kernel_type my_kernel;\n        StreamFactory &my_factory;\n    };\n\n    template <typename... Args>\n    class args_storage : public args_storage_base {\n        typedef typename args_storage_base::output_ports_type output_ports_type;\n\n        // ---------- Update events helpers ---------- //\n        template <int N>\n        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op ) const {\n            const auto& t = get<N + 1>( ip );\n            auto &port = get<N>( op );\n            return port.try_put( t );\n        }\n\n        template <int... S>\n        bool do_try_put( const kernel_input_tuple& ip, output_ports_type &op, internal::sequence<S...> ) const {\n            return internal::or_return_values( do_try_put<S>( ip, op )... );\n        }\n\n        // ------------------------------------------- //\n        class run_kernel_func : tbb::internal::no_assign {\n        public:\n            run_kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage )\n                : my_kernel_func( ip, node, storage, get<0>(ip).device() ) {}\n\n            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.\n            // Allow the compiler to deduce types for function pointers automatically.\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                internal::convert_and_call_impl<FnArgs...>::doit( my_kernel_func, my_kernel_func.my_ip, args... );\n            }\n        private:\n            struct kernel_func : tbb::internal::no_copy {\n                kernel_input_tuple &my_ip;\n                const streaming_node &my_node;\n                const args_storage& my_storage;\n                device_type my_device;\n\n                kernel_func( kernel_input_tuple &ip, const streaming_node &node, const args_storage& storage, device_type device )\n                    : my_ip( ip ), my_node( node ), my_storage( storage ), my_device( device )\n                {}\n\n                template <typename... FnArgs>\n                void operator()( FnArgs&... args ) {\n                    my_node.enqueue_kernel( my_ip, my_storage.my_factory, my_device, my_storage.my_kernel, args... );\n                }\n            } my_kernel_func;\n        };\n\n        template<typename FinalizeFn>\n        class run_finalize_func : tbb::internal::no_assign {\n        public:\n            run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn )\n                : my_ip( ip ), my_finalize_func( factory, get<0>(ip).device(), fn ) {}\n\n            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.\n            // Allow the compiler to deduce types for function pointers automatically.\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                internal::convert_and_call_impl<FnArgs...>::doit( my_finalize_func, my_ip, args... );\n            }\n        private:\n            kernel_input_tuple &my_ip;\n\n            struct finalize_func : tbb::internal::no_assign {\n                StreamFactory &my_factory;\n                device_type my_device;\n                FinalizeFn my_fn;\n\n                finalize_func( StreamFactory &factory, device_type device, FinalizeFn fn )\n                    : my_factory(factory), my_device(device), my_fn(fn) {}\n\n                template <typename... FnArgs>\n                void operator()( FnArgs&... args ) {\n                    my_factory.finalize( my_device, my_fn, args... );\n                }\n            } my_finalize_func;\n        };\n\n        template<typename FinalizeFn>\n        static run_finalize_func<FinalizeFn> make_run_finalize_func( kernel_input_tuple &ip, StreamFactory &factory, FinalizeFn fn ) {\n            return run_finalize_func<FinalizeFn>( ip, factory, fn );\n        }\n\n        class send_func : tbb::internal::no_assign {\n        public:\n            send_func( StreamFactory &factory, device_type d )\n                : my_factory(factory), my_device( d ) {}\n\n            template <typename... FnArgs>\n            void operator()( FnArgs&... args ) {\n                my_factory.send_data( my_device, args... );\n            }\n        private:\n            StreamFactory &my_factory;\n            device_type my_device;\n        };\n\n    public:\n        args_storage( const kernel_type& kernel, StreamFactory &f, Args&&... args )\n            : args_storage_base( kernel, f )\n            , my_args_pack( std::forward<Args>(args)... )\n        {}\n\n        args_storage( const args_storage &k ) : args_storage_base( k ), my_args_pack( k.my_args_pack ) {}\n\n        args_storage( const args_storage_base &k, Args&&... args ) : args_storage_base( k ), my_args_pack( std::forward<Args>(args)... ) {}\n\n        void enqueue( kernel_input_tuple &ip, output_ports_type &op, const streaming_node &n ) __TBB_override {\n            // Make const qualified args_pack (from non-const)\n            const args_pack_type& const_args_pack = my_args_pack;\n            // factory.enqure_kernel() gets\n            //  - 'ip' tuple elements by reference and updates it (and 'ip') with dependencies\n            //  - arguments (from my_args_pack) by const-reference via const_args_pack\n            tbb::internal::call( run_kernel_func( ip, n, *this ), const_args_pack );\n\n            if (! do_try_put( ip, op, input_sequence() ) ) {\n                graph& g = n.my_graph;\n                // No one message was passed to successors so set a callback to extend the graph lifetime until the kernel completion.\n                g.increment_wait_count();\n\n                // factory.finalize() gets\n                //  - 'ip' tuple elements by reference, so 'ip' might be changed\n                //  - arguments (from my_args_pack) by const-reference via const_args_pack\n                tbb::internal::call( make_run_finalize_func(ip, this->my_factory, [&g] {\n                    g.decrement_wait_count();\n                }), const_args_pack );\n            }\n        }\n\n        void send( device_type d ) __TBB_override {\n            // factory.send() gets arguments by reference and updates these arguments with dependencies\n            // (it gets but usually ignores port_ref-s)\n            tbb::internal::call( send_func( this->my_factory, d ), my_args_pack );\n        }\n\n        args_storage_base *clone() const __TBB_override {\n            // Create new args_storage with copying constructor.\n            return new args_storage<Args...>( *this );\n        }\n\n    private:\n        typedef tbb::internal::stored_pack<Args...> args_pack_type;\n        args_pack_type my_args_pack;\n    };\n\n    // Body for kernel_multifunction_node.\n    class kernel_body : tbb::internal::no_assign {\n    public:\n        kernel_body( const streaming_node &node ) : my_node( node ) {}\n\n        void operator()( kernel_input_tuple ip, typename args_storage_base::output_ports_type &op ) {\n            __TBB_ASSERT( (my_node.my_args_storage != NULL), \"No arguments storage\" );\n            // 'ip' is passed by value to create local copy for updating inside enqueue_kernel()\n            my_node.my_args_storage->enqueue( ip, op, my_node );\n        }\n    private:\n        const streaming_node &my_node;\n    };\n\n    template <typename T, typename U = typename internal::is_port_ref<T>::type >\n    struct wrap_to_async {\n        typedef T type; // Keep port_ref as it is\n    };\n\n    template <typename T>\n    struct wrap_to_async<T, std::false_type> {\n        typedef typename StreamFactory::template async_msg_type< typename tbb::internal::strip<T>::type > type;\n    };\n\n    template <typename... Args>\n    args_storage_base *make_args_storage(const args_storage_base& storage, Args&&... args) const {\n        // In this variadic template convert all simple types 'T' into 'async_msg_type<T>'\n        return new args_storage<Args...>(storage, std::forward<Args>(args)...);\n    }\n\n    void notify_new_device( device_type d ) {\n        my_args_storage->send( d );\n    }\n\n    template <typename ...Args>\n    void enqueue_kernel( kernel_input_tuple& ip, StreamFactory& factory, device_type device, const kernel_type& kernel, Args&... args ) const {\n        this->enqueue_kernel_impl( ip, factory, device, kernel, args... );\n    }\n\npublic:\n    template <typename DeviceSelector>\n    streaming_node( graph &g, const kernel_type& kernel, DeviceSelector d, StreamFactory &f )\n        : base_type( g )\n        , my_indexer_node( g )\n        , my_device_selector( new device_selector<DeviceSelector>( d, *this, f ) )\n        , my_device_selector_node( g, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( g )\n        , my_kernel_node( g, serial, kernel_body( *this ) )\n        // By default, streaming_node maps all its ports to the kernel arguments on a one-to-one basis.\n        , my_args_storage( make_args_storage( args_storage<>(kernel, f), port_ref<0, NUM_INPUTS - 1>() ) )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    streaming_node( const streaming_node &node )\n        : base_type( node.my_graph )\n        , my_indexer_node( node.my_indexer_node )\n        , my_device_selector( node.my_device_selector->clone( *this ) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( node.my_join_node )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_args_storage( node.my_args_storage->clone() )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    streaming_node( streaming_node &&node )\n        : base_type( node.my_graph )\n        , my_indexer_node( std::move( node.my_indexer_node ) )\n        , my_device_selector( node.my_device_selector->clone(*this) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( std::move( node.my_join_node ) )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_args_storage( node.my_args_storage )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n        // Set moving node mappers to NULL to prevent double deallocation.\n        node.my_args_storage = NULL;\n    }\n\n    ~streaming_node() {\n        if ( my_args_storage ) delete my_args_storage;\n        if ( my_device_selector ) delete my_device_selector;\n    }\n\n    template <typename... Args>\n    void set_args( Args&&... args ) {\n        // Copy the base class of args_storage and create new storage for \"Args...\".\n        args_storage_base * const new_args_storage = make_args_storage( *my_args_storage, typename wrap_to_async<Args>::type(std::forward<Args>(args))...);\n        delete my_args_storage;\n        my_args_storage = new_args_storage;\n    }\n\nprotected:\n    void reset_node( reset_flags = rf_reset_protocol ) __TBB_override { __TBB_ASSERT( false, \"Not implemented yet\" ); }\n\nprivate:\n    indexer_node_type my_indexer_node;\n    device_selector_base *my_device_selector;\n    device_selector_node my_device_selector_node;\n    join_node<kernel_input_tuple, JP> my_join_node;\n    kernel_multifunction_node my_kernel_node;\n\n    args_storage_base *my_args_storage;\n};\n\n#endif // __TBB_PREVIEW_STREAMING_NODE\n#endif // __TBB_flow_graph_streaming_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_tagged_buffer_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// a hash table buffer that can expand, and can support as many deletions as\n// additions, list-based, with elements of list held in array (for destruction\n// management), multiplicative hashing (like ets).  No synchronization built-in.\n//\n\n#ifndef __TBB__flow_graph_hash_buffer_impl_H\n#define __TBB__flow_graph_hash_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX::internal\n\n// elements in the table are a simple list; we need pointer to next element to\n// traverse the chain\ntemplate<typename ValueType>\nstruct buffer_element_type {\n    // the second parameter below is void * because we can't forward-declare the type\n    // itself, so we just reinterpret_cast below.\n    typedef typename aligned_pair<ValueType, void *>::type type;\n};\n\ntemplate\n    <\n     typename Key,         // type of key within ValueType\n     typename ValueType,\n     typename ValueToKey,  // abstract method that returns \"const Key\" or \"const Key&\" given ValueType\n     typename HashCompare, // has hash and equal\n     typename Allocator=tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >\n    >\nclass hash_buffer : public HashCompare {\npublic:\n    static const size_t INITIAL_SIZE = 8;  // initial size of the hash pointer table\n    typedef ValueType value_type;\n    typedef typename buffer_element_type< value_type >::type element_type;\n    typedef value_type *pointer_type;\n    typedef element_type *list_array_type;  // array we manage manually\n    typedef list_array_type *pointer_array_type;\n    typedef typename Allocator::template rebind<list_array_type>::other pointer_array_allocator_type;\n    typedef typename Allocator::template rebind<element_type>::other elements_array_allocator;\n    typedef typename tbb::internal::strip<Key>::type Knoref;\n\nprivate:\n    ValueToKey *my_key;\n    size_t my_size;\n    size_t nelements;\n    pointer_array_type pointer_array;    // pointer_array[my_size]\n    list_array_type elements_array;      // elements_array[my_size / 2]\n    element_type* free_list;\n\n    size_t mask() { return my_size - 1; }\n\n    void set_up_free_list( element_type **p_free_list, list_array_type la, size_t sz) {\n        for(size_t i=0; i < sz - 1; ++i ) {  // construct free list\n            la[i].second = &(la[i+1]);\n        }\n        la[sz-1].second = NULL;\n        *p_free_list = (element_type *)&(la[0]);\n    }\n\n    // cleanup for exceptions\n    struct DoCleanup {\n        pointer_array_type *my_pa;\n        list_array_type *my_elements;\n        size_t my_size;\n\n        DoCleanup(pointer_array_type &pa, list_array_type &my_els, size_t sz) :\n            my_pa(&pa), my_elements(&my_els), my_size(sz) {  }\n        ~DoCleanup() {\n            if(my_pa) {\n                size_t dont_care = 0;\n                internal_free_buffer(*my_pa, *my_elements, my_size, dont_care);\n            }\n        }\n    };\n\n    // exception-safety requires we do all the potentially-throwing operations first\n    void grow_array() {\n        size_t new_size = my_size*2;\n        size_t new_nelements = nelements;  // internal_free_buffer zeroes this\n        list_array_type new_elements_array = NULL;\n        pointer_array_type new_pointer_array = NULL;\n        list_array_type new_free_list = NULL;\n        {\n            DoCleanup my_cleanup(new_pointer_array, new_elements_array, new_size);\n            new_elements_array = elements_array_allocator().allocate(my_size);\n            new_pointer_array = pointer_array_allocator_type().allocate(new_size);\n            for(size_t i=0; i < new_size; ++i) new_pointer_array[i] = NULL;\n            set_up_free_list(&new_free_list, new_elements_array, my_size );\n\n            for(size_t i=0; i < my_size; ++i) {\n                for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second)) {\n                    value_type *ov = reinterpret_cast<value_type *>(&(op->first));\n                    // could have std::move semantics\n                    internal_insert_with_key(new_pointer_array, new_size, new_free_list, *ov);\n                }\n            }\n            my_cleanup.my_pa = NULL;\n            my_cleanup.my_elements = NULL;\n        }\n\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        free_list = new_free_list;\n        pointer_array = new_pointer_array;\n        elements_array = new_elements_array;\n        my_size = new_size;\n        nelements = new_nelements;\n    }\n\n    // v should have perfect forwarding if std::move implemented.\n    // we use this method to move elements in grow_array, so can't use class fields\n    void internal_insert_with_key( element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list,\n            const value_type &v) {\n        size_t l_mask = p_sz-1;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        size_t h = this->hash((*my_key)(v)) & l_mask;\n        __TBB_ASSERT(p_free_list, \"Error: free list not set up.\");\n        element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second);\n        (void) new(&(my_elem->first)) value_type(v);\n        my_elem->second = p_pointer_array[h];\n        p_pointer_array[h] = my_elem;\n    }\n\n    void internal_initialize_buffer() {\n        pointer_array = pointer_array_allocator_type().allocate(my_size);\n        for(size_t i = 0; i < my_size; ++i) pointer_array[i] = NULL;\n        elements_array = elements_array_allocator().allocate(my_size / 2);\n        set_up_free_list(&free_list, elements_array, my_size / 2);\n    }\n\n    // made static so an enclosed class can use to properly dispose of the internals\n    static void internal_free_buffer( pointer_array_type &pa, list_array_type &el, size_t &sz, size_t &ne ) {\n        if(pa) {\n            for(size_t i = 0; i < sz; ++i ) {\n                element_type *p_next;\n                for( element_type *p = pa[i]; p; p = p_next) {\n                    p_next = (element_type *)p->second;\n                    internal::punned_cast<value_type *>(&(p->first))->~value_type();\n                }\n            }\n            pointer_array_allocator_type().deallocate(pa, sz);\n            pa = NULL;\n        }\n        // Separate test (if allocation of pa throws, el may be allocated.\n        // but no elements will be constructed.)\n        if(el) {\n            elements_array_allocator().deallocate(el, sz / 2);\n            el = NULL;\n        }\n        sz = INITIAL_SIZE;\n        ne = 0;\n    }\n\npublic:\n    hash_buffer() : my_key(NULL), my_size(INITIAL_SIZE), nelements(0) {\n        internal_initialize_buffer();\n    }\n\n    ~hash_buffer() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        if(my_key) delete my_key;\n    }\n\n    void reset() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        internal_initialize_buffer();\n    }\n\n    // Take ownership of func object allocated with new.\n    // This method is only used internally, so can't be misused by user.\n    void set_key_func(ValueToKey *vtk) { my_key = vtk; }\n    // pointer is used to clone()\n    ValueToKey* get_key_func() { return my_key; }\n\n    bool insert_with_key(const value_type &v) {\n        pointer_type p = NULL;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        if(find_ref_with_key((*my_key)(v), p)) {\n            p->~value_type();\n            (void) new(p) value_type(v);  // copy-construct into the space\n            return false;\n        }\n        ++nelements;\n        if(nelements*2 > my_size) grow_array();\n        internal_insert_with_key(pointer_array, my_size, free_list, v);\n        return true;\n    }\n\n    // returns true and sets v to array element if found, else returns false.\n    bool find_ref_with_key(const Knoref& k, pointer_type &v) {\n        size_t i = this->hash(k) & mask();\n        for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second)) {\n            pointer_type pv = reinterpret_cast<pointer_type>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*pv), k)) {\n                v = pv;\n                return true;\n            }\n        }\n        return false;\n    }\n\n    bool find_with_key( const Knoref& k, value_type &v) {\n        value_type *p;\n        if(find_ref_with_key(k, p)) {\n            v = *p;\n            return true;\n        }\n        else\n            return false;\n    }\n\n    void delete_with_key(const Knoref& k) {\n        size_t h = this->hash(k) & mask();\n        element_type* prev = NULL;\n        for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second)) {\n            value_type *vp = reinterpret_cast<value_type *>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*vp), k)) {\n                vp->~value_type();\n                if(prev) prev->second = p->second;\n                else pointer_array[h] = (element_type *)(p->second);\n                p->second = free_list;\n                free_list = p;\n                --nelements;\n                return;\n            }\n        }\n        __TBB_ASSERT(false, \"key not found for delete\");\n    }\n};\n#endif // __TBB__flow_graph_hash_buffer_impl_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_trace_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _FGT_GRAPH_TRACE_IMPL_H\n#define _FGT_GRAPH_TRACE_IMPL_H\n\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_internal_alias_input_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_INPUT_PORT, node, FLOW_NODE, name_index );\n    itt_relation_add( ITT_DOMAIN_FLOW, node, FLOW_NODE, __itt_relation_is_parent_of, p, FLOW_INPUT_PORT );\n}\n\nstatic inline void fgt_internal_alias_output_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );\n    itt_relation_add( ITT_DOMAIN_FLOW, node, FLOW_NODE, __itt_relation_is_parent_of, p, FLOW_OUTPUT_PORT );\n}\n\ntemplate<typename InputType>\nvoid alias_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_alias_input_port a function template?\n    fgt_internal_alias_input_port( node, port, name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_input_alias_helper {\n    static void alias_port( void *node, PortsTuple &ports ) {\n        alias_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );\n        fgt_internal_input_alias_helper<PortsTuple, N-1>::alias_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_input_alias_helper<PortsTuple, 0> {\n    static void alias_port( void * /* node */, PortsTuple & /* ports */ ) { }\n};\n\ntemplate<typename OutputType>\nvoid alias_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_alias_output_port a function template?\n    fgt_internal_alias_output_port( node, static_cast<void *>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_output_alias_helper {\n    static void alias_port( void *node, PortsTuple &ports ) {\n        alias_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );\n        fgt_internal_output_alias_helper<PortsTuple, N-1>::alias_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_output_alias_helper<PortsTuple, 0> {\n    static void alias_port( void * /*node*/, PortsTuple &/*ports*/ ) {\n    }\n};\n\nstatic inline void fgt_internal_create_input_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_INPUT_PORT, node, FLOW_NODE, name_index );\n}\n\nstatic inline void fgt_internal_create_output_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );\n}\n\ntemplate<typename InputType>\nvoid register_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_create_input_port a function template?\n    // In C++03 dependent name lookup from the template definition context\n    // works only for function declarations with external linkage:\n    // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#561\n    fgt_internal_create_input_port(node, static_cast<void*>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_input_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );\n        fgt_internal_input_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_input_helper<PortsTuple, 1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<0>(ports)), FLOW_INPUT_PORT_0 );\n    }\n};\n\ntemplate<typename OutputType>\nvoid register_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {\n    // TODO: Make fgt_internal_create_output_port a function template?\n    fgt_internal_create_output_port( node, static_cast<void *>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_output_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );\n        fgt_internal_output_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_output_helper<PortsTuple,1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<0>(ports)), FLOW_OUTPUT_PORT_0 );\n    }\n};\n\ntemplate< typename NodeType >\nvoid fgt_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nvoid fgt_multiinput_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  const_cast<NodeType *>(node);\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::sender< typename NodeType::output_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_graph_desc( void *g, const char *desc ) {\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_body( void *node, void *body ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, body, FLOW_BODY, __itt_relation_is_child_of, node, FLOW_NODE );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index t, void *g, void *input_port, PortsTuple &ports ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index t, void *g, void *input_port, PortsTuple &ports, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n    fgt_body( input_port, body );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index t, void *g, PortsTuple &ports, void *output_port) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_internal_input_helper<PortsTuple, N>::register_port( output_port, ports );\n}\n\nstatic inline void fgt_multiinput_multioutput_node( string_index t, void *n, void *g ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, n, FLOW_NODE, g, FLOW_GRAPH, t );\n}\n\nstatic inline void fgt_node( string_index t, void *g, void *output_port ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *output_port, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_body( output_port, body );\n}\n\n\nstatic inline void fgt_node( string_index t, void *g, void *input_port, void *output_port ) {\n    fgt_node( t, g, output_port );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *input_port, void *output_port, void *body ) {\n    fgt_node_with_body( t, g, output_port, body );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\n\nstatic inline void  fgt_node( string_index t, void *g, void *input_port, void *decrement_port, void *output_port ) {\n    fgt_node( t, g, input_port, output_port );\n    fgt_internal_create_input_port( output_port, decrement_port, FLOW_INPUT_PORT_1 );\n}\n\nstatic inline void fgt_make_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_predecessor_to, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_remove_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_sibling_of, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_graph( void *g ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_GRAPH );\n}\n\nstatic inline void fgt_begin_body( void *body ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, NULL, FLOW_NULL, FLOW_BODY );\n}\n\nstatic inline void fgt_end_body( void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_try_put_begin( void *node, void *port ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, port, FLOW_OUTPUT_PORT, node, FLOW_NODE, FLOW_OUTPUT_PORT );\n}\n\nstatic inline void fgt_async_try_put_end( void *, void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_reserve( void *node, void *graph ) {\n    itt_region_begin( ITT_DOMAIN_FLOW, node, FLOW_NODE, graph, FLOW_GRAPH, FLOW_NULL );\n}\n\nstatic inline void fgt_async_commit( void *node, void */*graph*/) {\n    itt_region_end( ITT_DOMAIN_FLOW, node, FLOW_NODE );\n}\n\nstatic inline void fgt_reserve_wait( void *graph ) {\n    itt_region_begin( ITT_DOMAIN_FLOW, graph, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_NULL );\n}\n\nstatic inline void fgt_release_wait( void *graph ) {\n    itt_region_end( ITT_DOMAIN_FLOW, graph, FLOW_GRAPH );\n}\n\n#else // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_graph( void * /*g*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_multioutput_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_graph_desc( void * /*g*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_body( void * /*node*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index /*t*/, void * /*g*/, PortsTuple & /*ports*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_multiinput_multioutput_node( string_index /*t*/, void * /*node*/, void * /*graph*/ ) { }\n\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*output_port*/ ) { }\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/ ) { }\nstatic inline void  fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*decrement_port*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*output_port*/, void * /*body*/ ) { }\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/, void * /*body*/ ) { }\n\nstatic inline void fgt_make_edge( void * /*output_port*/, void * /*input_port*/ ) { }\nstatic inline void fgt_remove_edge( void * /*output_port*/, void * /*input_port*/ ) { }\n\nstatic inline void fgt_begin_body( void * /*body*/ ) { }\nstatic inline void fgt_end_body( void *  /*body*/) { }\n\nstatic inline void fgt_async_try_put_begin( void * /*node*/, void * /*port*/ ) { }\nstatic inline void fgt_async_try_put_end( void * /*node*/ , void * /*port*/ ) { }\nstatic inline void fgt_async_reserve( void * /*node*/, void * /*graph*/ ) { }\nstatic inline void fgt_async_commit( void * /*node*/, void * /*graph*/ ) { }\nstatic inline void fgt_reserve_wait( void * /*graph*/ ) { }\nstatic inline void fgt_release_wait( void * /*graph*/ ) { }\n\n#endif // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\n    } // namespace internal\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_flow_graph_types_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__flow_graph_types_impl_H\n#define __TBB__flow_graph_types_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX\n\nnamespace internal {\n\n    // the change to key_matching (adding a K and KHash template parameter, making it a class)\n    // means we have to pass this data to the key_matching_port.  All the ports have only one\n    // template parameter, so we have to wrap the following types in a trait:\n    //\n    //    . K == key_type\n    //    . KHash == hash and compare for Key\n    //    . TtoK == function_body that given an object of T, returns its K\n    //    . T == type accepted by port, and stored in the hash table\n    //\n    // The port will have an additional parameter on node construction, which is a function_body\n    // that accepts a const T& and returns a K which is the field in T which is its K.\n    template<typename Kp, typename KHashp, typename Tp>\n    struct KeyTrait {\n        typedef Kp K;\n        typedef Tp T;\n        typedef internal::type_to_key_function_body<T,K> TtoK;\n        typedef KHashp KHash;\n    };\n\n// wrap each element of a tuple in a template, and make a tuple of the result.\n    template<int N, template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements;\n\n    // A wrapper that generates the traits needed for each port of a key-matching join,\n    // and the type of the tuple of input ports.\n    template<int N, template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements;\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<1, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<1, PT, KeyTraits, TypeTuple > {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<2, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<2, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<3, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<3, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<4, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<4, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<5, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<5, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3>, PT<KeyTrait4> > type;\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<6, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<7, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<8, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<9, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<10, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<9,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<9,TypeTuple>::type> KeyTrait9;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,\n                PT<KeyTrait9> > type;\n    };\n#endif\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template< int... S > class sequence {};\n\n    template< int N, int... S >\n    struct make_sequence : make_sequence < N - 1, N - 1, S... > {};\n\n    template< int... S >\n    struct make_sequence < 0, S... > {\n        typedef sequence<S...> type;\n    };\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    // Until C++14 std::initializer_list does not guarantee life time of contained objects.\n    template <typename T>\n    class initializer_list_wrapper {\n    public:\n        typedef T value_type;\n        typedef const T& reference;\n        typedef const T& const_reference;\n        typedef size_t size_type;\n\n        typedef T* iterator;\n        typedef const T* const_iterator;\n\n        initializer_list_wrapper( std::initializer_list<T> il ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( il.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n        initializer_list_wrapper( const initializer_list_wrapper<T>& ilw ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( ilw.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        initializer_list_wrapper( initializer_list_wrapper<T>&& ilw ) __TBB_NOEXCEPT( true ) : my_begin( ilw.my_begin ), my_end( ilw.my_end ) {\n            ilw.my_begin = ilw.my_end = NULL;\n        }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n        ~initializer_list_wrapper() {\n            if ( my_begin )\n                free( my_begin );\n        }\n\n        const_iterator begin() const __TBB_NOEXCEPT(true) { return my_begin; }\n        const_iterator end() const __TBB_NOEXCEPT(true) { return my_end; }\n        size_t size() const __TBB_NOEXCEPT(true) { return (size_t)(my_end - my_begin); }\n\n    private:\n        iterator my_begin;\n        iterator my_end;\n    };\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\n//! type mimicking std::pair but with trailing fill to ensure each element of an array\n//* will have the correct alignment\n    template<typename T1, typename T2, size_t REM>\n    struct type_plus_align {\n        char first[sizeof(T1)];\n        T2 second;\n        char fill1[REM];\n    };\n\n    template<typename T1, typename T2>\n    struct type_plus_align<T1,T2,0> {\n        char first[sizeof(T1)];\n        T2 second;\n    };\n\n    template<class U> struct alignment_of {\n        typedef struct { char t; U    padded; } test_alignment;\n        static const size_t value = sizeof(test_alignment) - sizeof(U);\n    };\n\n    // T1, T2 are actual types stored.  The space defined for T1 in the type returned\n    // is a char array of the correct size.  Type T2 should be trivially-constructible,\n    // T1 must be explicitly managed.\n    template<typename T1, typename T2>\n    struct aligned_pair {\n        static const size_t t1_align = alignment_of<T1>::value;\n        static const size_t t2_align = alignment_of<T2>::value;\n        typedef type_plus_align<T1, T2, 0 > just_pair;\n        static const size_t max_align = t1_align < t2_align ? t2_align : t1_align;\n        static const size_t extra_bytes = sizeof(just_pair) % max_align;\n        static const size_t remainder = extra_bytes ? max_align - extra_bytes : 0;\n    public:\n        typedef type_plus_align<T1,T2,remainder> type;\n    };  // aligned_pair\n\n// support for variant type\n// type we use when we're not storing a value\nstruct default_constructed { };\n\n// type which contains another type, tests for what type is contained, and references to it.\n// internal::Wrapper<T>\n//     void CopyTo( void *newSpace) : builds a Wrapper<T> copy of itself in newSpace\n\n// struct to allow us to copy and test the type of objects\nstruct WrapperBase {\n    virtual ~WrapperBase() {}\n    virtual void CopyTo(void* /*newSpace*/) const {  }\n};\n\n// Wrapper<T> contains a T, with the ability to test what T is.  The Wrapper<T> can be\n// constructed from a T, can be copy-constructed from another Wrapper<T>, and can be\n// examined via value(), but not modified.\ntemplate<typename T>\nstruct Wrapper: public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\nprivate:\n    T value_space;\npublic:\n    const value_type &value() const { return value_space; }\n\nprivate:\n    Wrapper();\n\n    // on exception will ensure the Wrapper will contain only a trivially-constructed object\n    struct _unwind_space {\n        pointer_type space;\n        _unwind_space(pointer_type p) : space(p) {}\n        ~_unwind_space() {\n            if(space) (void) new (space) Wrapper<default_constructed>(default_constructed());\n        }\n    };\npublic:\n    explicit Wrapper( const T& other ) : value_space(other) { }\n    explicit Wrapper(const Wrapper& other) : value_space(other.value_space) { }\n\n    void CopyTo(void* newSpace) const __TBB_override {\n        _unwind_space guard((pointer_type)newSpace);\n        (void) new(newSpace) Wrapper(value_space);\n        guard.space = NULL;\n    }\n    ~Wrapper() { }\n};\n\n// specialization for array objects\ntemplate<typename T, size_t N>\nstruct Wrapper<T[N]> : public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\n    // space must be untyped.\n    typedef T ArrayType[N];\nprivate:\n    // The space is not of type T[N] because when copy-constructing, it would be\n    // default-initialized and then copied to in some fashion, resulting in two\n    // constructions and one destruction per element.  If the type is char[ ], we\n    // placement new into each element, resulting in one construction per element.\n    static const size_t space_size = sizeof(ArrayType) / sizeof(char);\n    char value_space[space_size];\n\n\n    // on exception will ensure the already-built objects will be destructed\n    // (the value_space is a char array, so it is already trivially-destructible.)\n    struct _unwind_class {\n        pointer_type space;\n        int    already_built;\n        _unwind_class(pointer_type p) : space(p), already_built(0) {}\n        ~_unwind_class() {\n            if(space) {\n                for(size_t i = already_built; i > 0 ; --i ) space[i-1].~value_type();\n                (void) new(space) Wrapper<default_constructed>(default_constructed());\n            }\n        }\n    };\npublic:\n    const ArrayType &value() const {\n        char *vp = const_cast<char *>(value_space);\n        return reinterpret_cast<ArrayType &>(*vp);\n    }\n\nprivate:\n    Wrapper();\npublic:\n    // have to explicitly construct because other decays to a const value_type*\n    explicit Wrapper(const ArrayType& other) {\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = 0; i < N; ++i ) {\n            (void) new(vp++) value_type(other[i]);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n    explicit Wrapper(const Wrapper& other) : WrapperBase() {\n        // we have to do the heavy lifting to copy contents\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type dp = reinterpret_cast<pointer_type>(value_space);\n        pointer_type sp = reinterpret_cast<pointer_type>(const_cast<char *>(other.value_space));\n        for(size_t i = 0; i < N; ++i, ++dp, ++sp) {\n            (void) new(dp) value_type(*sp);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n\n    void CopyTo(void* newSpace) const __TBB_override {\n        (void) new(newSpace) Wrapper(*this);  // exceptions handled in copy constructor\n    }\n\n    ~Wrapper() {\n        // have to destroy explicitly in reverse order\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = N; i > 0 ; --i ) vp[i-1].~value_type();\n    }\n};\n\n// given a tuple, return the type of the element that has the maximum alignment requirement.\n// Given a tuple and that type, return the number of elements of the object with the max\n// alignment requirement that is at least as big as the largest object in the tuple.\n\ntemplate<bool, class T1, class T2> struct pick_one;\ntemplate<class T1, class T2> struct pick_one<true , T1, T2> { typedef T1 type; };\ntemplate<class T1, class T2> struct pick_one<false, T1, T2> { typedef T2 type; };\n\ntemplate< template<class> class Selector, typename T1, typename T2 >\nstruct pick_max {\n    typedef typename pick_one< (Selector<T1>::value > Selector<T2>::value), T1, T2 >::type type;\n};\n\ntemplate<typename T> struct size_of { static const int value = sizeof(T); };\n\ntemplate< size_t N, class Tuple, template<class> class Selector > struct pick_tuple_max {\n    typedef typename pick_tuple_max<N-1, Tuple, Selector>::type LeftMaxType;\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type ThisType;\n    typedef typename pick_max<Selector, LeftMaxType, ThisType>::type type;\n};\n\ntemplate< class Tuple, template<class> class Selector > struct pick_tuple_max<0, Tuple, Selector> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type type;\n};\n\n// is the specified type included in a tuple?\ntemplate<class Q, size_t N, class Tuple>\nstruct is_element_of {\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value || is_element_of<Q,N-1,Tuple>::value;\n};\n\ntemplate<class Q, class Tuple>\nstruct is_element_of<Q,0,Tuple> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value;\n};\n\n// allow the construction of types that are listed tuple.  If a disallowed type\n// construction is written, a method involving this type is created.  The\n// type has no definition, so a syntax error is generated.\ntemplate<typename T> struct ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple;\n\ntemplate<typename T, bool BUILD_IT> struct do_if;\ntemplate<typename T>\nstruct do_if<T, true> {\n    static void construct(void *mySpace, const T& x) {\n        (void) new(mySpace) Wrapper<T>(x);\n    }\n};\ntemplate<typename T>\nstruct do_if<T, false> {\n    static void construct(void * /*mySpace*/, const T& x) {\n        // This method is instantiated when the type T does not match any of the\n        // element types in the Tuple in variant<Tuple>.\n        ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple<T>::bad_type(x);\n    }\n};\n\n// Tuple tells us the allowed types that variant can hold.  It determines the alignment of the space in\n// Wrapper, and how big Wrapper is.\n//\n// the object can only be tested for type, and a read-only reference can be fetched by cast_to<T>().\n\nusing tbb::internal::punned_cast;\nstruct tagged_null_type {};\ntemplate<typename TagType, typename T0, typename T1=tagged_null_type, typename T2=tagged_null_type, typename T3=tagged_null_type,\n                           typename T4=tagged_null_type, typename T5=tagged_null_type, typename T6=tagged_null_type,\n                           typename T7=tagged_null_type, typename T8=tagged_null_type, typename T9=tagged_null_type>\nclass tagged_msg {\n    typedef tbb::flow::tuple<T0, T1, T2, T3, T4\n                  //TODO: Should we reject lists longer than a tuple can hold?\n                  #if __TBB_VARIADIC_MAX >= 6\n                  , T5\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 7\n                  , T6\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 8\n                  , T7\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 9\n                  , T8\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 10\n                  , T9\n                  #endif\n                  > Tuple;\n\nprivate:\n    class variant {\n        static const size_t N = tbb::flow::tuple_size<Tuple>::value;\n        typedef typename pick_tuple_max<N, Tuple, alignment_of>::type AlignType;\n        typedef typename pick_tuple_max<N, Tuple, size_of>::type MaxSizeType;\n        static const size_t MaxNBytes = (sizeof(Wrapper<MaxSizeType>)+sizeof(AlignType)-1);\n        static const size_t MaxNElements = MaxNBytes/sizeof(AlignType);\n        typedef typename tbb::aligned_space<AlignType, MaxNElements> SpaceType;\n        SpaceType my_space;\n        static const size_t MaxSize = sizeof(SpaceType);\n\n    public:\n        variant() { (void) new(&my_space) Wrapper<default_constructed>(default_constructed()); }\n\n        template<typename T>\n        variant( const T& x ) {\n            do_if<T, is_element_of<T, N, Tuple>::value>::construct(&my_space,x);\n        }\n\n        variant(const variant& other) {\n            const WrapperBase * h = punned_cast<const WrapperBase *>(&(other.my_space));\n            h->CopyTo(&my_space);\n        }\n\n        // assignment must destroy and re-create the Wrapper type, as there is no way\n        // to create a Wrapper-to-Wrapper assign even if we find they agree in type.\n        void operator=( const variant& rhs ) {\n            if(&rhs != this) {\n                WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n                h->~WrapperBase();\n                const WrapperBase *ch = punned_cast<const WrapperBase *>(&(rhs.my_space));\n                ch->CopyTo(&my_space);\n            }\n        }\n\n        template<typename U>\n        const U& variant_cast_to() const {\n            const Wrapper<U> *h = dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space));\n            if(!h) {\n                tbb::internal::throw_exception(tbb::internal::eid_bad_tagged_msg_cast);\n            }\n            return h->value();\n        }\n        template<typename U>\n        bool variant_is_a() const { return dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space)) != NULL; }\n\n        bool variant_is_default_constructed() const {return variant_is_a<default_constructed>();}\n\n        ~variant() {\n            WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n            h->~WrapperBase();\n        }\n    }; //class variant\n\n    TagType my_tag;\n    variant my_msg;\n\npublic:\n    tagged_msg(): my_tag(TagType(~0)), my_msg(){}\n\n    template<typename T, typename R>\n    tagged_msg(T const &index, R const &value) : my_tag(index), my_msg(value) {}\n\n    #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN\n    template<typename T, typename R, size_t N>\n    tagged_msg(T const &index,  R (&value)[N]) : my_tag(index), my_msg(value) {}\n    #endif\n\n    void set_tag(TagType const &index) {my_tag = index;}\n    TagType tag() const {return my_tag;}\n\n    template<typename V>\n    const V& cast_to() const {return my_msg.template variant_cast_to<V>();}\n\n    template<typename V>\n    bool is_a() const {return my_msg.template variant_is_a<V>();}\n\n    bool is_default_constructed() const {return my_msg.variant_is_default_constructed();}\n}; //class tagged_msg\n\n// template to simplify cast and test for tagged_msg in template contexts\ntemplate<typename V, typename T>\nconst V& cast_to(T const &t) { return t.template cast_to<V>(); }\n\ntemplate<typename V, typename T>\nbool is_a(T const &t) { return t.template is_a<V>(); }\n\nenum op_stat { WAIT = 0, SUCCEEDED, FAILED };\n\n}  // namespace internal\n\n#endif  /* __TBB__flow_graph_types_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_mutex_padding.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mutex_padding_H\n#define __TBB_mutex_padding_H\n\n// wrapper for padding mutexes to be alone on a cache line, without requiring they be allocated\n// from a pool.  Because we allow them to be defined anywhere they must be two cache lines in size.\n\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\nstatic const size_t cache_line_size = 64;\n\n// Pad a mutex to occupy a number of full cache lines sufficient to avoid false sharing\n// with other data; space overhead is up to 2*cache_line_size-1.\ntemplate<typename Mutex, bool is_rw> class padded_mutex;\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,false> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m ) : my_scoped_lock(*m.impl()) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m ) { my_scoped_lock.acquire(*m.impl()); }\n        bool try_acquire( padded_mutex& m ) { return my_scoped_lock.try_acquire(*m.impl()); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,true> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m, bool write = true ) : my_scoped_lock(*m.impl(),write) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m, bool write = true ) { my_scoped_lock.acquire(*m.impl(),write); }\n        bool try_acquire( padded_mutex& m, bool write = true ) { return my_scoped_lock.try_acquire(*m.impl(),write); }\n        bool upgrade_to_writer() { return my_scoped_lock.upgrade_to_writer(); }\n        bool downgrade_to_reader() { return my_scoped_lock.downgrade_to_reader(); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* __TBB_mutex_padding_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_range_iterator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_range_iterator_H\n#define __TBB_range_iterator_H\n\n#include \"../tbb_stddef.h\"\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n    #include <iterator>\n#endif\n\nnamespace tbb {\n    // iterators to first and last elements of container\n    namespace internal {\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n        using std::begin;\n        using std::end;\n        template<typename Container>\n        auto first(Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto first(const Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto last(Container& c)-> decltype(begin(c))  {return end(c);}\n\n        template<typename Container>\n        auto last(const Container& c)-> decltype(begin(c)) {return end(c);}\n#else\n        template<typename Container>\n        typename Container::iterator first(Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::const_iterator first(const Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::iterator last(Container& c) {return c.end();}\n\n        template<typename Container>\n        typename Container::const_iterator last(const Container& c) {return c.end();}\n#endif\n\n        template<typename T, size_t size>\n        T* first(T (&arr) [size]) {return arr;}\n\n        template<typename T, size_t size>\n        T* last(T (&arr) [size]) {return arr + size;}\n    } //namespace internal\n}  //namespace tbb\n\n#endif // __TBB_range_iterator_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_tbb_hash_compare_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// must be included outside namespaces.\n#ifndef __TBB_tbb_hash_compare_impl_H\n#define __TBB_tbb_hash_compare_impl_H\n\n#include <string>\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n\n// Template class for hash compare\ntemplate<typename Key, typename Hasher, typename Key_equality>\nclass hash_compare\n{\npublic:\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n\n    hash_compare() {}\n\n    hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}\n\n    hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}\n\n    size_t operator()(const Key& key) const {\n        return ((size_t)my_hash_object(key));\n    }\n\n    bool operator()(const Key& key1, const Key& key2) const {\n        // TODO: get rid of the result invertion\n        return (!my_key_compare_object(key1, key2));\n    }\n\n    Hasher       my_hash_object;        // The hash object\n    Key_equality my_key_compare_object; // The equality comparator object\n};\n\n//! Hash multiplier\nstatic const size_t hash_multiplier = tbb::internal::select_size_t_constant<2654435769U, 11400714819323198485ULL>::value;\n\n} // namespace internal\n\n//! Hasher functions\ntemplate<typename T>\ninline size_t tbb_hasher( const T& t ) {\n    return static_cast<size_t>( t ) * internal::hash_multiplier;\n}\ntemplate<typename P>\ninline size_t tbb_hasher( P* ptr ) {\n    size_t const h = reinterpret_cast<size_t>( ptr );\n    return (h >> 3) ^ h;\n}\ntemplate<typename E, typename S, typename A>\ninline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {\n    size_t h = 0;\n    for( const E* c = s.c_str(); *c; ++c )\n        h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);\n    return h;\n}\ntemplate<typename F, typename S>\ninline size_t tbb_hasher( const std::pair<F,S>& p ) {\n    return tbb_hasher(p.first) ^ tbb_hasher(p.second);\n}\n\n} // namespace interface5\nusing interface5::tbb_hasher;\n\n// Template class for hash compare\ntemplate<typename Key>\nclass tbb_hash\n{\npublic:\n    tbb_hash() {}\n\n    size_t operator()(const Key& key) const\n    {\n        return tbb_hasher(key);\n    }\n};\n\n//! hash_compare that is default argument for concurrent_hash_map\ntemplate<typename Key>\nstruct tbb_hash_compare {\n    static size_t hash( const Key& a ) { return tbb_hasher(a); }\n    static bool equal( const Key& a, const Key& b ) { return a == b; }\n};\n\n}  // namespace tbb\n#endif  /*  __TBB_tbb_hash_compare_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_tbb_strings.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\nTBB_STRING_RESOURCE(FLOW_BROADCAST_NODE, \"broadcast_node\")\nTBB_STRING_RESOURCE(FLOW_BUFFER_NODE, \"buffer_node\")\nTBB_STRING_RESOURCE(FLOW_CONTINUE_NODE, \"continue_node\")\nTBB_STRING_RESOURCE(FLOW_FUNCTION_NODE, \"function_node\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_QUEUEING, \"join_node (queueing)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_RESERVING, \"join_node (reserving)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_TAG_MATCHING, \"join_node (tag_matching)\")\nTBB_STRING_RESOURCE(FLOW_LIMITER_NODE, \"limiter_node\")\nTBB_STRING_RESOURCE(FLOW_MULTIFUNCTION_NODE, \"multifunction_node\")\nTBB_STRING_RESOURCE(FLOW_OR_NODE, \"or_node\") //no longer in use, kept for backward compatibility\nTBB_STRING_RESOURCE(FLOW_OVERWRITE_NODE, \"overwrite_node\")\nTBB_STRING_RESOURCE(FLOW_PRIORITY_QUEUE_NODE, \"priority_queue_node\")\nTBB_STRING_RESOURCE(FLOW_QUEUE_NODE, \"queue_node\")\nTBB_STRING_RESOURCE(FLOW_SEQUENCER_NODE, \"sequencer_node\")\nTBB_STRING_RESOURCE(FLOW_SOURCE_NODE, \"source_node\")\nTBB_STRING_RESOURCE(FLOW_SPLIT_NODE, \"split_node\")\nTBB_STRING_RESOURCE(FLOW_WRITE_ONCE_NODE, \"write_once_node\")\nTBB_STRING_RESOURCE(FLOW_BODY, \"body\")\nTBB_STRING_RESOURCE(FLOW_GRAPH, \"graph\")\nTBB_STRING_RESOURCE(FLOW_NODE, \"node\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT, \"input_port\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_0, \"input_port_0\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_1, \"input_port_1\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_2, \"input_port_2\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_3, \"input_port_3\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_4, \"input_port_4\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_5, \"input_port_5\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_6, \"input_port_6\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_7, \"input_port_7\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_8, \"input_port_8\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_9, \"input_port_9\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT, \"output_port\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_0, \"output_port_0\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_1, \"output_port_1\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_2, \"output_port_2\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_3, \"output_port_3\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_4, \"output_port_4\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_5, \"output_port_5\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_6, \"output_port_6\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_7, \"output_port_7\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_8, \"output_port_8\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_9, \"output_port_9\")\nTBB_STRING_RESOURCE(FLOW_OBJECT_NAME, \"object_name\")\nTBB_STRING_RESOURCE(FLOW_NULL, \"null\")\nTBB_STRING_RESOURCE(FLOW_INDEXER_NODE, \"indexer_node\")\nTBB_STRING_RESOURCE(FLOW_COMPOSITE_NODE, \"composite_node\")\nTBB_STRING_RESOURCE(FLOW_ASYNC_NODE, \"async_node\")\nTBB_STRING_RESOURCE(FLOW_OPENCL_NODE, \"opencl_node\")\nTBB_STRING_RESOURCE(ALGORITHM, \"tbb_algorithm\")\nTBB_STRING_RESOURCE(PARALLEL_FOR, \"tbb_parallel_for\")\nTBB_STRING_RESOURCE(PARALLEL_DO, \"tbb_parallel_do\")\nTBB_STRING_RESOURCE(PARALLEL_INVOKE, \"tbb_parallel_invoke\")\nTBB_STRING_RESOURCE(PARALLEL_REDUCE, \"tbb_parallel_reduce\")\nTBB_STRING_RESOURCE(PARALLEL_SCAN, \"tbb_parallel_scan\")\nTBB_STRING_RESOURCE(PARALLEL_SORT, \"tbb_parallel_sort\")\nTBB_STRING_RESOURCE(CUSTOM_CTX, \"tbb_custom\")\nTBB_STRING_RESOURCE(FLOW_TASKS, \"tbb_flow_graph\")\nTBB_STRING_RESOURCE(PARALLEL_FOR_TASK, \"tbb_parallel_for_task\")\n// TODO: Drop following string prefix \"fgt_\" here and in FGA's collector\nTBB_STRING_RESOURCE(USER_EVENT, \"fgt_user_event\")\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_tbb_trace_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef _FGT_TBB_TRACE_IMPL_H\n#define _FGT_TBB_TRACE_IMPL_H\n\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if TBB_PREVIEW_ALGORITHM_TRACE\n        static inline void fgt_algorithm( string_index t, void *algorithm, void *parent ) {\n            itt_make_task_group( ITT_DOMAIN_FLOW, algorithm, ALGORITHM, parent, ALGORITHM, t );\n        }\n        static inline void fgt_begin_algorithm( string_index t, void *algorithm ) {\n            itt_task_begin( ITT_DOMAIN_FLOW, algorithm, ALGORITHM, NULL, FLOW_NULL, t );\n        }\n        static inline void fgt_end_algorithm( void * ) {\n            itt_task_end( ITT_DOMAIN_FLOW );\n        }\n        static inline void fgt_alg_begin_body( string_index t, void *body, void *algorithm ) {\n            itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, algorithm, ALGORITHM, t );\n        }\n        static inline void fgt_alg_end_body( void * ) {\n            itt_task_end( ITT_DOMAIN_FLOW );\n        }\n\n#else // TBB_PREVIEW_ALGORITHM_TRACE\n\n        static inline void fgt_algorithm( string_index /*t*/, void * /*algorithm*/, void * /*parent*/ ) { }\n        static inline void fgt_begin_algorithm( string_index /*t*/, void * /*algorithm*/ ) { }\n        static inline void fgt_end_algorithm( void * ) { }\n        static inline void fgt_alg_begin_body( string_index /*t*/, void * /*body*/, void * /*algorithm*/ ) { }\n        static inline void fgt_alg_end_body( void * ) { }\n\n#endif // TBB_PREVIEW_ALGORITHM_TRACEE\n\n    } // namespace internal\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_tbb_windef.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_windef_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif /* __TBB_tbb_windef_H */\n\n// Check that the target Windows version has all API calls requried for TBB.\n// Do not increase the version in condition beyond 0x0500 without prior discussion!\n#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0501\n#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0501 or greater.\n#endif\n\n#if !defined(_MT)\n#error TBB requires linkage with multithreaded C/C++ runtime library. \\\n       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.\n#endif\n\n// Workaround for the problem with MVSC headers failing to define namespace std\nnamespace std {\n  using ::size_t; using ::ptrdiff_t;\n}\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// Default setting of TBB_USE_DEBUG\n#ifdef TBB_USE_DEBUG\n#    if TBB_USE_DEBUG\n#        if !defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0\")\n#        endif\n#    else\n#        if defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0\")\n#        endif\n#    endif\n#endif\n\n#if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBB_NO_IMPLICIT_LINKAGE)\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#if _MSC_VER\n    #if !__TBB_NO_IMPLICIT_LINKAGE\n        #ifdef __TBB_LIB_NAME\n\t        #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n        #else\n\t\t\t#ifdef _DEBUG\n\t\t\t\t#pragma comment(lib, \"tbb_debug.lib\")\n\t\t\t#else\n\t\t\t\t#pragma comment(lib, \"tbb.lib\")\n\t\t\t#endif\n        #endif\n    #endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_template_helpers.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_template_helpers_H\n#define __TBB_template_helpers_H\n\n#include <utility>\n#include <cstddef>\n\nnamespace tbb { namespace internal {\n\n//! Enables one or the other code branches\ntemplate<bool Condition, typename T = void> struct enable_if {};\ntemplate<typename T> struct enable_if<true, T> { typedef T type; };\n\n//! Strips its template type argument from cv- and ref-qualifiers\ntemplate<typename T> struct strip                     { typedef T type; };\ntemplate<typename T> struct strip<const T>            { typedef T type; };\ntemplate<typename T> struct strip<volatile T>         { typedef T type; };\ntemplate<typename T> struct strip<const volatile T>   { typedef T type; };\ntemplate<typename T> struct strip<T&>                 { typedef T type; };\ntemplate<typename T> struct strip<const T&>           { typedef T type; };\ntemplate<typename T> struct strip<volatile T&>        { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&>  { typedef T type; };\n//! Specialization for function pointers\ntemplate<typename T> struct strip<T(&)()>             { typedef T(*type)(); };\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T> struct strip<T&&>                { typedef T type; };\ntemplate<typename T> struct strip<const T&&>          { typedef T type; };\ntemplate<typename T> struct strip<volatile T&&>       { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&&> { typedef T type; };\n#endif\n//! Specialization for arrays converts to a corresponding pointer\ntemplate<typename T, std::size_t N> struct strip<T(&)[N]>                { typedef T* type; };\ntemplate<typename T, std::size_t N> struct strip<const T(&)[N]>          { typedef const T* type; };\ntemplate<typename T, std::size_t N> struct strip<volatile T(&)[N]>       { typedef volatile T* type; };\ntemplate<typename T, std::size_t N> struct strip<const volatile T(&)[N]> { typedef const volatile T* type; };\n\n//! Detects whether two given types are the same\ntemplate<class U, class V> struct is_same_type      { static const bool value = false; };\ntemplate<class W>          struct is_same_type<W,W> { static const bool value = true; };\n\ntemplate<typename T> struct is_ref { static const bool value = false; };\ntemplate<typename U> struct is_ref<U&> { static const bool value = true; };\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n//! std::void_t internal implementation (to avoid GCC < 4.7 \"template aliases\" absence)\ntemplate<typename...> struct void_t { typedef void type; };\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n\n//! Allows to store a function parameter pack as a variable and later pass it to another function\ntemplate< typename... Types >\nstruct stored_pack;\n\ntemplate<>\nstruct stored_pack<>\n{\n    typedef stored_pack<> pack_type;\n    stored_pack() {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    // Ideally, ref-qualified non-static methods would be used,\n    // but that would greatly reduce the set of compilers where it works.\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n};\n\ntemplate< typename T, typename... Types >\nstruct stored_pack<T, Types...> : stored_pack<Types...>\n{\n    typedef stored_pack<T, Types...> pack_type;\n    typedef stored_pack<Types...> pack_remainder;\n    // Since lifetime of original values is out of control, copies should be made.\n    // Thus references should be stripped away from the deduced type.\n    typename strip<T>::type leftmost_value;\n\n    // Here rvalue references act in the same way as forwarding references,\n    // as long as class template parameters were deduced via forwarding references.\n    stored_pack( T&& t, Types&&... types )\n    : pack_remainder(std::forward<Types>(types)...), leftmost_value(std::forward<T>(t)) {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<pack_remainder&>(pack),\n            std::forward<Preceding>(params)... , pack.leftmost_value\n        );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<const pack_remainder&>(pack),\n            std::forward<Preceding>(params)... , pack.leftmost_value\n        );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<pack_remainder&&>(pack),\n            std::forward<Preceding>(params)... , std::move(pack.leftmost_value)\n        );\n    }\n};\n\n//! Calls the given function with arguments taken from a stored_pack\ntemplate< typename F, typename Pack >\nvoid call( F&& f, Pack&& p ) {\n    strip<Pack>::type::template call<void>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename Ret, typename F, typename Pack >\nRet call_and_return( F&& f, Pack&& p ) {\n    return strip<Pack>::type::template call<Ret>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename... Types >\nstored_pack<Types...> save_pack( Types&&... types ) {\n    return stored_pack<Types...>( std::forward<Types>(types)... );\n}\n\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_CPP14_INTEGER_SEQUENCE_PRESENT\n\nusing std::index_sequence;\nusing std::make_index_sequence;\n\n#elif __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT\n\ntemplate<std::size_t... S> class index_sequence {};\n\ntemplate<std::size_t N, std::size_t... S>\nstruct make_index_sequence_impl : make_index_sequence_impl < N - 1, N - 1, S... > {};\n\ntemplate<std::size_t... S>\nstruct make_index_sequence_impl <0, S...> {\n    using type = index_sequence<S...>;\n};\n\ntemplate<std::size_t N>\nusing make_index_sequence = typename tbb::internal::make_index_sequence_impl<N>::type;\n\n#endif /* __TBB_CPP14_INTEGER_SEQUENCE_PRESENT */\n\n} } // namespace internal, namespace tbb\n\n#endif /* __TBB_template_helpers_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_x86_eliding_mutex_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__x86_eliding_mutex_impl_H\n#define __TBB__x86_eliding_mutex_impl_H\n\n#ifndef __TBB_spin_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\ntemplate<typename Mutex, bool is_rw>\nclass padded_mutex;\n\n//! An eliding lock that occupies a single byte.\n/** A x86_eliding_mutex is an HLE-enabled spin mutex. It is recommended to\n    put the mutex on a cache line that is not shared by the data it protects.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\nclass x86_eliding_mutex : tbb::internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\n    friend class padded_mutex<x86_eliding_mutex, false>;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    x86_eliding_mutex() : flag(0) {}\n\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration above.\n// Make the scoped_lock public in that case.\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    // scoped_lock in padded_mutex<> is the interface to use.\n    //! Represents acquisition of a mutex.\n    class scoped_lock : tbb::internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        x86_eliding_mutex* my_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( x86_eliding_mutex& m ) : my_mutex(NULL) { acquire(m); }\n\n        //! Acquire lock.\n        void acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            my_mutex=&m;\n            my_mutex->lock();\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            bool result = m.try_lock();\n            if( result ) {\n                my_mutex = &m;\n            }\n            return result;\n        }\n\n        //! Release lock\n        void release() {\n            __TBB_ASSERT( my_mutex, \"release on scoped_lock that is not holding a lock\" );\n\n            my_mutex->unlock();\n            my_mutex = NULL;\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n                release();\n            }\n        }\n    };\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\npublic:\n#endif  /* __TBB_USE_X86_ELIDING_MUTEX */\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n        __TBB_LockByteElided(flag);\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n        return __TBB_TryLockByteElided(flag);\n    }\n\n    //! Release lock\n    void unlock() {\n        __TBB_UnlockByteElided( flag );\n    }\n}; // end of x86_eliding_mutex\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* ( __TBB_x86_32 || __TBB_x86_64 ) */\n\n#endif /* __TBB__x86_eliding_mutex_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/internal/_x86_rtm_rw_mutex_impl.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB__x86_rtm_rw_mutex_impl_H\n#define __TBB__x86_rtm_rw_mutex_impl_H\n\n#ifndef __TBB_spin_rw_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if __TBB_TSX_AVAILABLE\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../tbb_profiling.h\"\n#include \"../spin_rw_mutex.h\"\n\nnamespace tbb {\nnamespace interface8 {\nnamespace internal {\n\nenum RTM_type {\n    RTM_not_in_mutex,\n    RTM_transacting_reader,\n    RTM_transacting_writer,\n    RTM_real_reader,\n    RTM_real_writer\n};\n\nstatic const unsigned long speculation_granularity = 64;\n\n//! Fast, unfair, spinning speculation-enabled reader-writer lock with backoff and\n//  writer-preference\n/** @ingroup synchronization */\nclass x86_rtm_rw_mutex: private spin_rw_mutex {\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration below.\n// Make the scoped_lock public in that case.\npublic:\n#else\nprivate:\n#endif\n    friend class interface7::internal::padded_mutex<x86_rtm_rw_mutex,true>;\n    class scoped_lock;   // should be private\n    friend class scoped_lock;\nprivate:\n    //! @cond INTERNAL\n\n    //! Internal construct unacquired mutex.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! Internal acquire write lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_writer(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal acquire read lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Out of line code for downgrading a writer to a reader.\n    bool __TBB_EXPORTED_METHOD internal_downgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal release lock.\n    void __TBB_EXPORTED_METHOD internal_release( x86_rtm_rw_mutex::scoped_lock& );\n\n    static x86_rtm_rw_mutex* internal_get_mutex( const spin_rw_mutex::scoped_lock& lock )\n    {\n        return static_cast<x86_rtm_rw_mutex*>( lock.internal_get_mutex() );\n    }\n    static void internal_set_mutex( spin_rw_mutex::scoped_lock& lock, spin_rw_mutex* mtx )\n    {\n        lock.internal_set_mutex( mtx );\n    }\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    x86_rtm_rw_mutex() {\n        w_flag = false;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Empty destructor.\n    ~x86_rtm_rw_mutex() {}\n#endif /* TBB_USE_ASSERT */\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    // Speculation-enabled scoped lock for spin_rw_mutex\n    // The idea is to be able to reuse the acquire/release methods of spin_rw_mutex\n    // and its scoped lock wherever possible.  The only way to use a speculative lock is to use\n    // a scoped_lock. (because transaction_state must be local)\n\n    class scoped_lock : tbb::internal::no_copy {\n        friend class x86_rtm_rw_mutex;\n        spin_rw_mutex::scoped_lock my_scoped_lock;\n\n        RTM_type transaction_state;\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : my_scoped_lock(), transaction_state(RTM_not_in_mutex) {\n        }\n\n        //! Acquire lock on given mutex.\n        scoped_lock( x86_rtm_rw_mutex& m, bool write = true ) : my_scoped_lock(),\n            transaction_state(RTM_not_in_mutex) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if(transaction_state != RTM_not_in_mutex) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n            if( write ) m.internal_acquire_writer(*this);\n            else        m.internal_acquire_reader(*this);\n        }\n\n        //! Release lock\n        void release() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state!=RTM_not_in_mutex, \"lock is not acquired\" );\n            return mutex->internal_release(*this);\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_reader || transaction_state==RTM_real_reader, \"Invalid state for upgrade\" );\n            return mutex->internal_upgrade(*this);\n        }\n\n        //! Downgrade writer to become a reader.\n        /** Returns whether the downgrade happened without releasing and re-acquiring the lock */\n        bool downgrade_to_reader() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_writer || transaction_state==RTM_real_writer, \"Invalid state for downgrade\" );\n            return mutex->internal_downgrade(*this);\n        }\n\n        //! Attempt to acquire mutex.\n        /** returns true if successful.  */\n        bool try_acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n#if TBB_USE_ASSERT\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( !mutex, \"lock is already acquired\" );\n#endif\n            // have to assign m to our mutex.\n            // cannot set the mutex, because try_acquire in spin_rw_mutex depends on it being NULL.\n            if(write) return m.internal_try_acquire_writer(*this);\n            // speculatively acquire the lock.  If this fails, do try_acquire on the spin_rw_mutex.\n            m.internal_acquire_reader(*this, /*only_speculate=*/true);\n            if(transaction_state == RTM_transacting_reader) return true;\n            if( my_scoped_lock.try_acquire(m, false)) {\n                transaction_state = RTM_real_reader;\n                return true;\n            }\n            return false;\n        }\n\n        };  // class x86_rtm_rw_mutex::scoped_lock\n\n    // ISO C++0x compatibility methods not provided because we cannot maintain\n    // state about whether a thread is in a transaction.\n\nprivate:\n    char pad[speculation_granularity-sizeof(spin_rw_mutex)]; // padding\n\n    // If true, writer holds the spin_rw_mutex.\n    tbb::atomic<bool> w_flag;  // want this on a separate cache line\n\n};  // x86_rtm_rw_mutex\n\n}  // namespace internal\n}  // namespace interface8\n}  // namespace tbb\n\n#endif  /* __TBB_TSX_AVAILABLE */\n#endif /* __TBB__x86_rtm_rw_mutex_impl_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/gcc_arm.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\n    Platform isolation layer for the ARMv7-a architecture.\n*/\n\n#ifndef __TBB_machine_H\n#error Do not include this file directly; include tbb_machine.h instead\n#endif\n\n#if __ARM_ARCH_7A__\n\n#include <sys/param.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 4\n\n// Traditionally ARM is little-endian.\n// Note that, since only the layout of aligned 32-bit words is of interest,\n// any apparent PDP-endianness of 32-bit words at half-word alignment or\n// any little-endian ordering of big-endian 32-bit words in 64-bit quantities\n// may be disregarded for this setting.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n\n#define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"dmb ish\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t oldval, res;\n\n    __TBB_full_memory_fence();\n\n    do {\n    __asm__ __volatile__(\n        \"ldrex      %1, [%3]\\n\"\n        \"mov        %0, #0\\n\"\n        \"cmp        %1, %4\\n\"\n        \"it         eq\\n\"\n        \"strexeq    %0, %5, [%3]\\n\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int32_t*)ptr)\n        : \"r\" ((volatile int32_t *)ptr), \"Ir\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t oldval;\n    int32_t res;\n\n    __TBB_full_memory_fence();\n\n    do {\n        __asm__ __volatile__(\n            \"mov        %0, #0\\n\"\n            \"ldrexd     %1, %H1, [%3]\\n\"\n            \"cmp        %1, %4\\n\"\n            \"it         eq\\n\"\n            \"cmpeq      %H1, %H4\\n\"\n            \"it         eq\\n\"\n            \"strexdeq   %0, %5, %H5, [%3]\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int64_t*)ptr)\n        : \"r\" ((volatile int64_t *)ptr), \"r\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void* ptr, int32_t addend)\n{\n    unsigned long tmp;\n    int32_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrex   %0, [%4]\\n\"\n\"       add     %3, %0, %5\\n\"\n\"       strex   %1, %3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\\n\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int32_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((volatile int32_t *)ptr), \"Ir\" (addend)\n    : \"cc\");\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    unsigned long tmp;\n    int64_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrexd  %0, %H0, [%4]\\n\"\n\"       adds    %3, %0, %5\\n\"\n\"       adc     %H3, %H0, %H5\\n\"\n\"       strexd  %1, %3, %H3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int64_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((volatile int64_t *)ptr), \"r\" (addend)\n    : \"cc\");\n\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\nnamespace tbb {\nnamespace internal {\n    template <typename T, size_t S>\n    struct machine_load_store_relaxed {\n        static inline T load ( const volatile T& location ) {\n            const T value = location;\n\n            /*\n            * An extra memory barrier is required for errata #761319\n            * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n            */\n            __TBB_acquire_consistency_helper();\n            return value;\n        }\n\n        static inline void store ( volatile T& location, T value ) {\n            location = value;\n        }\n    };\n}} // namespaces internal, tbb\n\n// Machine specific atomic operations\n\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n\n// Use generics for some things\n#define __TBB_USE_GENERIC_PART_WORD_CAS                         1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n#elif defined __aarch64__\n// Generic gcc implementations are fine for ARMv8-a except __TBB_PAUSE.\n#include \"gcc_generic.h\"\n#else\n#error compilation requires an ARMv7-a or ARMv8-a architecture.\n#endif // __ARM_ARCH_7A__\n\ninline void __TBB_machine_pause (int32_t delay)\n{\n    while(delay>0)\n    {\n        __asm__ __volatile__(\"yield\" ::: \"memory\");\n        delay--;\n    }\n}\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/gcc_generic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_generic_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE __SIZEOF_POINTER__\n\n#if __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    #define __TBB_64BIT_ATOMICS 0\n#endif\n\n/** FPU control setting not available for non-Intel architectures on Android **/\n#if __ANDROID__ && __TBB_generic_arch\n    #define __TBB_CPU_CTL_ENV_PRESENT 0\n#endif\n\n// __BYTE_ORDER__ is used in accordance with http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html,\n// but __BIG_ENDIAN__ or __LITTLE_ENDIAN__ may be more commonly found instead.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_acquire_consistency_helper()  __sync_synchronize()\n#define __TBB_release_consistency_helper()  __sync_synchronize()\n#define __TBB_full_memory_fence()           __sync_synchronize()\n#define __TBB_control_consistency_helper()  __sync_synchronize()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    return __sync_val_compare_and_swap(reinterpret_cast<volatile T *>(ptr),comparand,value);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);                       \\\n}\n\n#define __TBB_USE_GENERIC_FETCH_STORE 1\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\n#define __TBB_compiler_fence()              __asm__ __volatile__(\"\": : :\"memory\")\n// Acquire and release fence intrinsics in GCC might miss compiler fence.\n// Adding it at both sides of an intrinsic, as we do not know what reordering can be made.\n#define __TBB_acquire_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_ACQUIRE); __TBB_compiler_fence()\n#define __TBB_release_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_RELEASE); __TBB_compiler_fence()\n#define __TBB_full_memory_fence()           __atomic_thread_fence(__ATOMIC_SEQ_CST)\n#define __TBB_control_consistency_helper()  __TBB_acquire_consistency_helper()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    (void)__atomic_compare_exchange_n(reinterpret_cast<volatile T *>(ptr), &comparand, value,     \\\n                                      false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);                 \\\n    return comparand;                                                                             \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __atomic_fetch_add(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchstore##S( volatile void *ptr, T value ) {                             \\\n    return __atomic_exchange_n(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);     \\\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t)\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nnamespace tbb{ namespace internal { namespace gcc_builtins {\n    inline int clz(unsigned int x){ return __builtin_clz(x);};\n    inline int clz(unsigned long int x){ return __builtin_clzl(x);};\n    inline int clz(unsigned long long int x){ return __builtin_clzll(x);};\n}}}\n//gcc __builtin_clz builtin count _number_ of leading zeroes\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    return sizeof(x)*8 - tbb::internal::gcc_builtins::clz(x) -1 ;\n}\n\n\ntypedef unsigned char __TBB_Flag;\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return __sync_lock_test_and_set(&flag,1)==0;\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __sync_lock_release(&flag);\n}\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return !__atomic_test_and_set(&flag,__ATOMIC_ACQUIRE);\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __atomic_clear(&flag,__ATOMIC_RELEASE);\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_and(P,V)\n\n#define __TBB_TryLockByte   __TBB_machine_try_lock_byte\n#define __TBB_UnlockByte    __TBB_machine_unlock_byte\n\n// Definition of other functions\n#define __TBB_Log2(V)           __TBB_machine_lg(V)\n\n// TODO: implement with __atomic_* builtins where available\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n\n#if __TBB_x86_32 || __TBB_x86_64\n#include \"gcc_itsx.h\"\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/gcc_ia32_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_gcc_ia32_common_H\n#define __TBB_machine_gcc_ia32_common_H\n\n//TODO: Add a higher-level function, e.g. tbb::internal::log2(), into tbb_stddef.h, which\n//uses __TBB_Log2 and contains the assert and remove the assert from here and all other\n//platform-specific headers.\n//TODO: Check if use of gcc intrinsic gives a better chance for cross call optimizations\ntemplate <typename T>\nstatic inline intptr_t __TBB_machine_lg( T x ) {\n    __TBB_ASSERT(x>0, \"The logarithm of a non-positive value is undefined.\");\n    uintptr_t j, i = x;\n    __asm__(\"bsr %1,%0\" : \"=r\"(j) : \"r\"(i));\n    return j;\n}\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#ifndef __TBB_Pause\n//TODO: check if raising a ratio of pause instructions to loop control instructions\n//(via e.g. loop unrolling) gives any benefit for HT.  E.g, the current implementation\n//does about 2 CPU-consuming instructions for every pause instruction.  Perhaps for\n//high pause counts it should use an unrolled loop to raise the ratio, and thus free\n//up more integer cycles for the other hyperthread.  On the other hand, if the loop is\n//unrolled too far, it won't fit in the core's loop cache, and thus take away\n//instruction decode slots from the other hyperthread.\n\n//TODO: check if use of gcc __builtin_ia32_pause intrinsic gives a \"some how\" better performing code\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    for (int32_t i = 0; i < delay; i++) {\n       __asm__ __volatile__(\"pause;\");\n    }\n    return;\n}\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#endif /* !__TBB_Pause */\n\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n#if __INTEL_COMPILER\n    return _rdtsc();\n#else\n    tbb::internal::uint32_t hi, lo;\n    __asm__ __volatile__(\"rdtsc\" : \"=d\"(hi), \"=a\"(lo));\n    return (tbb::internal::machine_tsc_t( hi ) << 32) | lo;\n#endif\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#ifndef __TBB_CPU_CTL_ENV_PRESENT\n#define __TBB_CPU_CTL_ENV_PRESENT 1\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int     mxcsr;\n    short   x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n    #if __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN\n        cpu_ctl_env loc_ctl;\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(loc_ctl.mxcsr), \"=m\"(loc_ctl.x87cw)\n        );\n        *this = loc_ctl;\n    #else\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(mxcsr), \"=m\"(x87cw)\n        );\n    #endif\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const {\n        __asm__ __volatile__ (\n                \"ldmxcsr %0\\n\\t\"\n                \"fldcw %1\"\n                : : \"m\"(mxcsr), \"m\"(x87cw)\n        );\n    }\n};\n} // namespace internal\n} // namespace tbb\n#endif /* !__TBB_CPU_CTL_ENV_PRESENT */\n\n#include \"gcc_itsx.h\"\n\n#endif /* __TBB_machine_gcc_ia32_common_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/gcc_itsx.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_itsx_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_itsx_H\n\n#define __TBB_OP_XACQUIRE 0xF2\n#define __TBB_OP_XRELEASE 0xF3\n#define __TBB_OP_LOCK     0xF0\n\n#define __TBB_STRINGIZE_INTERNAL(arg) #arg\n#define __TBB_STRINGIZE(arg) __TBB_STRINGIZE_INTERNAL(arg)\n\n#ifdef __TBB_x86_64\n#define __TBB_r_out \"=r\"\n#else\n#define __TBB_r_out \"=q\"\n#endif\n\ninline static uint8_t __TBB_machine_try_lock_elided( volatile uint8_t* lk )\n{\n    uint8_t value = 1;\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XACQUIRE)\"; lock; xchgb %0, %1;\"\n                      : __TBB_r_out(value), \"=m\"(*lk)  : \"0\"(value), \"m\"(*lk) : \"memory\" );\n    return uint8_t(value^1);\n}\n\ninline static void __TBB_machine_try_lock_elided_cancel()\n{\n    // 'pause' instruction aborts HLE/RTM transactions\n    __asm__ volatile (\"pause\\n\" : : : \"memory\" );\n}\n\ninline static void __TBB_machine_unlock_elided( volatile uint8_t* lk )\n{\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XRELEASE)\"; movb $0, %0\"\n                      : \"=m\"(*lk) : \"m\"(*lk) : \"memory\" );\n}\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n#include <immintrin.h>\n\n#define __TBB_machine_is_in_transaction _xtest\n#define __TBB_machine_begin_transaction _xbegin\n#define __TBB_machine_end_transaction   _xend\n#define __TBB_machine_transaction_conflict_abort() _xabort(0xff)\n\n#else\n\n/*!\n * Check if the instruction is executed in a transaction or not\n */\ninline static bool __TBB_machine_is_in_transaction()\n{\n    int8_t res = 0;\n#if __TBB_x86_32\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=q\"(res) : : \"memory\" );\n#else\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=r\"(res) : : \"memory\" );\n#endif\n    return res==0;\n}\n\n/*!\n * Enter speculative execution mode.\n * @return -1 on success\n *         abort cause ( or 0 ) on abort\n */\ninline static uint32_t __TBB_machine_begin_transaction()\n{\n    uint32_t res = ~uint32_t(0);   // success value\n    __asm__ volatile (\"1: .byte  0xC7; .byte 0xF8;\\n\"           //  XBEGIN <abort-offset>\n                      \"   .long  2f-1b-6\\n\"                     //  2f-1b == difference in addresses of start\n                                                                //  of XBEGIN and the MOVL\n                                                                //  2f - 1b - 6 == that difference minus the size of the\n                                                                //  XBEGIN instruction.  This is the abort offset to\n                                                                //  2: below.\n                      \"    jmp   3f\\n\"                          //  success (leave -1 in res)\n                      \"2:  movl  %%eax,%0\\n\"                    //  store failure code in res\n                      \"3:\"\n                      :\"=r\"(res):\"0\"(res):\"memory\",\"%eax\");\n    return res;\n}\n\n/*!\n * Attempt to commit/end transaction\n */\ninline static void __TBB_machine_end_transaction()\n{\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD5\" :::\"memory\");   // XEND\n}\n\n/*\n * aborts with code 0xFF (lock already held)\n */\ninline static void __TBB_machine_transaction_conflict_abort()\n{\n    __asm__ volatile (\".byte 0xC6; .byte 0xF8; .byte 0xFF\" :::\"memory\");\n}\n\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/ibm_aix51.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n// TODO: revise by comparing with mac_ppc.h\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_ibm_aix51_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_ibm_aix51_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG // assumption based on operating system\n\n#include <stdint.h>\n#include <unistd.h>\n#include <sched.h>\n\nextern \"C\" {\nint32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);\nint64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);\nvoid __TBB_machine_flush ();\nvoid __TBB_machine_lwsync ();\nvoid __TBB_machine_isync ();\n}\n\n// Mapping of old entry point names retained for the sake of backward binary compatibility\n#define __TBB_machine_cmpswp4 __TBB_machine_cas_32\n#define __TBB_machine_cmpswp8 __TBB_machine_cas_64\n\n#define __TBB_Yield() sched_yield()\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __GNUC__\n    #define __TBB_control_consistency_helper() __asm__ __volatile__( \"isync\": : :\"memory\")\n    #define __TBB_acquire_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_release_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(  \"sync\": : :\"memory\")\n#else\n    // IBM C++ Compiler does not support inline assembly\n    // TODO: Since XL 9.0 or earlier GCC syntax is supported. Replace with more\n    //       lightweight implementation (like in mac_ppc.h)\n    #define __TBB_control_consistency_helper() __TBB_machine_isync ()\n    #define __TBB_acquire_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_release_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_full_memory_fence()          __TBB_machine_flush ()\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/icc_generic.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_icc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_ICC_BUILTIN_ATOMICS_PRESENT\n    #error \"Intel C++ Compiler of at least 12.0 version is needed to use ICC intrinsics port\"\n#endif\n\n#define __TBB_machine_icc_generic_H\n\n//ICC mimics the \"native\" target compiler\n#if _MSC_VER\n    #include \"msvc_ia32_common.h\"\n#else\n    #include \"gcc_ia32_common.h\"\n#endif\n\n//TODO: Make __TBB_WORDSIZE macro optional for ICC intrinsics port.\n//As compiler intrinsics are used for all the operations it is possible to do.\n\n#if __TBB_x86_32\n    #define __TBB_WORDSIZE 4\n#else\n    #define __TBB_WORDSIZE 8\n#endif\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n//__TBB_compiler_fence() defined just in case, as it seems not to be used on its own anywhere else\n#ifndef __TBB_compiler_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_ReadWriteBarrier)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n#else\n    #define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_full_memory_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_full_memory_fence() _mm_mfence()\n#else\n    #define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_control_consistency_helper\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#endif\n\nnamespace tbb { namespace internal {\n//TODO: is there any way to reuse definition of memory_order enum from ICC instead of copy paste.\n//however it seems unlikely that ICC will silently change exact enum values, as they are defined\n//in the ISO exactly like this.\n//TODO: add test that exact values of the enum are same as in the ISO C++11\ntypedef enum memory_order {\n    memory_order_relaxed, memory_order_consume, memory_order_acquire,\n    memory_order_release, memory_order_acq_rel, memory_order_seq_cst\n} memory_order;\n\nnamespace icc_intrinsics_port {\n    template <typename T>\n    T convert_argument(T value){\n        return value;\n    }\n    //The overload below is needed to have explicit conversion of pointer to void* in argument list.\n    //compiler bug?\n    //TODO: add according broken macro and recheck with ICC 13.0 if the overload is still needed\n    template <typename T>\n    void* convert_argument(T* value){\n        return (void*)value;\n    }\n}\n//TODO: code below is a bit repetitive, consider simplifying it\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_acquire);\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const T& location ) {\n        return __atomic_load_explicit(&location, memory_order_relaxed);\n    }\n    static inline void store (  T& location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_seq_cst);\n    }\n\n    static void store ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, value, memory_order_seq_cst);\n    }\n};\n\n}} // namespace tbb::internal\n\nnamespace tbb{ namespace internal { namespace icc_intrinsics_port{\n    typedef enum memory_order_map {\n        relaxed = memory_order_relaxed,\n        acquire = memory_order_acquire,\n        release = memory_order_release,\n        full_fence=  memory_order_seq_cst\n    } memory_order_map;\n}}}// namespace tbb::internal\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,M)                                                     \\\ninline T __TBB_machine_cmpswp##S##M( volatile void *ptr, T value, T comparand ) {               \\\n    __atomic_compare_exchange_strong_explicit(                                                  \\\n            (T*)ptr                                                                             \\\n            ,&comparand                                                                         \\\n            ,value                                                                              \\\n            , tbb::internal::icc_intrinsics_port::M                                             \\\n            , tbb::internal::icc_intrinsics_port::M);                                           \\\n    return comparand;                                                                           \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchstore##S##M(volatile void *ptr, T value) {                          \\\n    return __atomic_exchange_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);   \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchadd##S##M(volatile void *ptr, T value) {                            \\\n    return __atomic_fetch_add_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);  \\\n}                                                                                               \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, relaxed)\n\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n\nnamespace tbb { namespace internal {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(acquire)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(release)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(relaxed)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(relaxed)\n\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_acquire);\n        } else {\n            return __TBB_machine_generic_load8acquire(&location);\n        }\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n        } else {\n            return __TBB_machine_generic_store8release(&location,value);\n        }\n    }\n};\n\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static T load( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_load8relaxed(&location);\n        }\n    }\n    static void store( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_store8relaxed(&location,value);\n        }\n    }\n};\n\ntemplate <typename T >\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_load8full_fence(&location);\n        }\n\n    }\n\n    static void store ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, value, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_store8full_fence(&location,value);\n        }\n\n    }\n};\n\n#endif\n}} // namespace tbb::internal\ntemplate <typename T>\ninline void __TBB_machine_OR( T *operand, T addend ) {\n    __atomic_fetch_or_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\ntemplate <typename T>\ninline void __TBB_machine_AND( T *operand, T addend ) {\n    __atomic_fetch_and_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/linux_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n#include <unistd.h>\n/* Futex definitions */\n#include <sys/syscall.h>\n\n#if defined(SYS_futex)\n\n#define __TBB_USE_FUTEX 1\n#include <limits.h>\n#include <errno.h>\n// Unfortunately, some versions of Linux do not have a header that defines FUTEX_WAIT and FUTEX_WAKE.\n\n#ifdef FUTEX_WAIT\n#define __TBB_FUTEX_WAIT FUTEX_WAIT\n#else\n#define __TBB_FUTEX_WAIT 0\n#endif\n\n#ifdef FUTEX_WAKE\n#define __TBB_FUTEX_WAKE FUTEX_WAKE\n#else\n#define __TBB_FUTEX_WAKE 1\n#endif\n\n#ifndef __TBB_ASSERT\n#error machine specific headers must be included after tbb_stddef.h\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n\ninline int futex_wait( void *futex, int comparand ) {\n    int r = syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );\n#if TBB_USE_ASSERT\n    int e = errno;\n    __TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)), \"futex_wait failed.\" );\n#endif /* TBB_USE_ASSERT */\n    return r;\n}\n\ninline int futex_wakeup_one( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,1,NULL,NULL,0 );\n    __TBB_ASSERT( r==0||r==1, \"futex_wakeup_one: more than one thread woken up?\" );\n    return r;\n}\n\ninline int futex_wakeup_all( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL,0 );\n    __TBB_ASSERT( r>=0, \"futex_wakeup_all: error in waking up threads\" );\n    return r;\n}\n\n} /* namespace internal */\n\n} /* namespace tbb */\n\n#endif /* SYS_futex */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/linux_ia32.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia32_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"mfence\": : :\"memory\")\n\n#if __TBB_ICC_ASM_VOLATILE_BROKEN\n#define __TBB_VOLATILE\n#else\n#define __TBB_VOLATILE volatile\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X,R)                                        \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(__TBB_VOLATILE T*)ptr)              \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(__TBB_VOLATILE T*)ptr) \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(addend), \"m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(value), \"m\"(*(__TBB_VOLATILE T*)ptr)                 \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\",\"=q\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\",\"=r\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"l\",\"=r\")\n\n#if __INTEL_COMPILER\n#pragma warning( push )\n// reference to EBX in a function requiring stack alignment\n#pragma warning( disable: 998 )\n#endif\n\n#if __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN\n#define  __TBB_IA32_CAS8_NOINLINE  __attribute__ ((noinline))\n#else\n#define  __TBB_IA32_CAS8_NOINLINE\n#endif\n\nstatic inline __TBB_IA32_CAS8_NOINLINE int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )  {\n//TODO: remove the extra part of condition once __TBB_GCC_BUILTIN_ATOMICS_PRESENT is lowered to gcc version 4.1.2\n#if (__TBB_GCC_BUILTIN_ATOMICS_PRESENT || (__TBB_GCC_VERSION >= 40102)) && !__TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    return __sync_val_compare_and_swap( reinterpret_cast<volatile int64_t*>(ptr), comparand, value );\n#else /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n    //TODO: look like ICC 13.0 has some issues with this code, investigate it more deeply\n    int64_t result;\n    union {\n        int64_t i64;\n        int32_t i32[2];\n    };\n    i64 = value;\n#if __PIC__\n    /* compiling position-independent code */\n    // EBX register preserved for compliance with position-independent code rules on IA32\n    int32_t tmp;\n    __asm__ __volatile__ (\n            \"movl  %%ebx,%2\\n\\t\"\n            \"movl  %5,%%ebx\\n\\t\"\n#if __GNUC__==3\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n#else\n            \"lock\\n\\t cmpxchg8b (%3)\\n\\t\"\n#endif\n            \"movl  %2,%%ebx\"\n             : \"=A\"(result)\n             , \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"=m\"(tmp)\n#if __GNUC__==3\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n#else\n             : \"SD\"(ptr)\n#endif\n             , \"0\"(comparand)\n             , \"m\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n#if __INTEL_COMPILER\n             ,\"ebx\"\n#endif\n    );\n#else /* !__PIC__ */\n    __asm__ __volatile__ (\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n             : \"=A\"(result), \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"0\"(comparand)\n             , \"b\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n    );\n#endif /* __PIC__ */\n    return result;\n#endif /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n}\n\n#undef __TBB_IA32_CAS8_NOINLINE\n\n#if __INTEL_COMPILER\n#pragma warning( pop )\n#endif // warning 998 is back\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\norl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\nandl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux* and Windows*)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n\n#if __clang__\n#define __TBB_fildq  \"fildll\"\n#define __TBB_fistpq \"fistpll\"\n#else\n#define __TBB_fildq  \"fildq\"\n#define __TBB_fistpq \"fistpq\"\n#endif\n\nstatic inline int64_t __TBB_machine_aligned_load8 (const volatile void *ptr) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_load8 should be used with 8 byte aligned locations only \\n\");\n    int64_t result;\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(result) : \"m\"(*(const __TBB_VOLATILE uint64_t*)ptr) : \"memory\" );\n    return result;\n}\n\nstatic inline void __TBB_machine_aligned_store8 (volatile void *ptr, int64_t value ) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_store8 should be used with 8 byte aligned locations only \\n\");\n    // Aligned store\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(*(__TBB_VOLATILE int64_t*)ptr) : \"m\"(value) : \"memory\" );\n}\n\nstatic inline int64_t __TBB_machine_load8 (const volatile void *ptr) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        return __TBB_machine_aligned_load8(ptr);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned load\n        return __TBB_machine_cmpswp8(const_cast<void*>(ptr),0,0);\n    }\n#endif\n}\n\n//! Handles misaligned 8-byte store\n/** Defined in tbb_misc.cpp */\nextern \"C\" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value );\nextern \"C\" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );\n\nstatic inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        __TBB_machine_aligned_store8(ptr,value);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned store\n#if TBB_USE_PERFORMANCE_WARNINGS\n        __TBB_machine_store8_slow_perf_warning(ptr);\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n        __TBB_machine_store8_slow(ptr,value);\n    }\n#endif\n}\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_GENERIC_DWORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_DWORD_FETCH_STORE                 1\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/linux_ia64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia64_H\n\n#include <stdint.h>\n#include <ia64intrin.h>\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#if __INTEL_COMPILER\n    #define __TBB_compiler_fence()\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_acquire_consistency_helper()\n    #define __TBB_release_consistency_helper()\n    #define __TBB_full_memory_fence()          __mf()\n#else\n    #define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    // Even though GCC imbues volatile loads with acquire semantics, it sometimes moves\n    // loads over the acquire fence. The following helpers stop such incorrect code motion.\n    #define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_release_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(\"mf\": : :\"memory\")\n#endif /* !__INTEL_COMPILER */\n\n// Most of the functions will be in a .s file\n// TODO: revise dynamic_link, memory pools and etc. if the library dependency is removed.\n\nextern \"C\" {\n    int8_t __TBB_machine_fetchadd1__TBB_full_fence (volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1acquire(volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1release(volatile void *ptr, int8_t addend);\n\n    int16_t __TBB_machine_fetchadd2__TBB_full_fence (volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2acquire(volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2release(volatile void *ptr, int16_t addend);\n\n    int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchadd4acquire(volatile void *ptr, int32_t addend);\n    int32_t __TBB_machine_fetchadd4release(volatile void *ptr, int32_t addend);\n\n    int64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchadd8acquire(volatile void *ptr, int64_t addend);\n    int64_t __TBB_machine_fetchadd8release(volatile void *ptr, int64_t addend);\n\n    int8_t __TBB_machine_fetchstore1__TBB_full_fence (volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1acquire(volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1release(volatile void *ptr, int8_t value);\n\n    int16_t __TBB_machine_fetchstore2__TBB_full_fence (volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2acquire(volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2release(volatile void *ptr, int16_t value);\n\n    int32_t __TBB_machine_fetchstore4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4acquire(volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4release(volatile void *ptr, int32_t value);\n\n    int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);\n\n    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand);\n\n    int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand);\n\n    int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand);\n\n    int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand);\n\n    int64_t __TBB_machine_lg(uint64_t value);\n    void __TBB_machine_pause(int32_t delay);\n    bool __TBB_machine_trylockbyte( volatile unsigned char &ptr );\n    int64_t __TBB_machine_lockbyte( volatile unsigned char &ptr );\n\n    //! Retrieves the current RSE backing store pointer. IA64 specific.\n    void* __TBB_get_bsp();\n\n    int32_t __TBB_machine_load1_relaxed(const void *ptr);\n    int32_t __TBB_machine_load2_relaxed(const void *ptr);\n    int32_t __TBB_machine_load4_relaxed(const void *ptr);\n    int64_t __TBB_machine_load8_relaxed(const void *ptr);\n\n    void __TBB_machine_store1_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store2_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store4_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store8_relaxed(void *ptr, int64_t value);\n} // extern \"C\"\n\n// Mapping old entry points to the names corresponding to the new full_fence identifier.\n#define __TBB_machine_fetchadd1full_fence   __TBB_machine_fetchadd1__TBB_full_fence\n#define __TBB_machine_fetchadd2full_fence   __TBB_machine_fetchadd2__TBB_full_fence\n#define __TBB_machine_fetchadd4full_fence   __TBB_machine_fetchadd4__TBB_full_fence\n#define __TBB_machine_fetchadd8full_fence   __TBB_machine_fetchadd8__TBB_full_fence\n#define __TBB_machine_fetchstore1full_fence __TBB_machine_fetchstore1__TBB_full_fence\n#define __TBB_machine_fetchstore2full_fence __TBB_machine_fetchstore2__TBB_full_fence\n#define __TBB_machine_fetchstore4full_fence __TBB_machine_fetchstore4__TBB_full_fence\n#define __TBB_machine_fetchstore8full_fence __TBB_machine_fetchstore8__TBB_full_fence\n#define __TBB_machine_cmpswp1full_fence     __TBB_machine_cmpswp1__TBB_full_fence\n#define __TBB_machine_cmpswp2full_fence     __TBB_machine_cmpswp2__TBB_full_fence\n#define __TBB_machine_cmpswp4full_fence     __TBB_machine_cmpswp4__TBB_full_fence\n#define __TBB_machine_cmpswp8full_fence     __TBB_machine_cmpswp8__TBB_full_fence\n\n// Mapping relaxed operations to the entry points implementing them.\n/** On IA64 RMW operations implicitly have acquire semantics. Thus one cannot\n    actually have completely relaxed RMW operation here. **/\n#define __TBB_machine_fetchadd1relaxed      __TBB_machine_fetchadd1acquire\n#define __TBB_machine_fetchadd2relaxed      __TBB_machine_fetchadd2acquire\n#define __TBB_machine_fetchadd4relaxed      __TBB_machine_fetchadd4acquire\n#define __TBB_machine_fetchadd8relaxed      __TBB_machine_fetchadd8acquire\n#define __TBB_machine_fetchstore1relaxed    __TBB_machine_fetchstore1acquire\n#define __TBB_machine_fetchstore2relaxed    __TBB_machine_fetchstore2acquire\n#define __TBB_machine_fetchstore4relaxed    __TBB_machine_fetchstore4acquire\n#define __TBB_machine_fetchstore8relaxed    __TBB_machine_fetchstore8acquire\n#define __TBB_machine_cmpswp1relaxed        __TBB_machine_cmpswp1acquire\n#define __TBB_machine_cmpswp2relaxed        __TBB_machine_cmpswp2acquire\n#define __TBB_machine_cmpswp4relaxed        __TBB_machine_cmpswp4acquire\n#define __TBB_machine_cmpswp8relaxed        __TBB_machine_cmpswp8acquire\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,V)                               \\\n    template <typename T>                                               \\\n    struct machine_load_store_relaxed<T,S> {                      \\\n        static inline T load ( const T& location ) {                    \\\n            return (T)__TBB_machine_load##S##_relaxed(&location);       \\\n        }                                                               \\\n        static inline void store ( T& location, T value ) {             \\\n            __TBB_machine_store##S##_relaxed(&location, (V)value);      \\\n        }                                                               \\\n    }\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(8,int64_t);\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n// Definition of Lock functions\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n#define __TBB_LockByte(P)    __TBB_machine_lockbyte(P)\n\n// Definition of other utility functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/linux_intel64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_intel64_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#ifndef __TBB_full_memory_fence\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X)                                          \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(volatile T*)ptr)                    \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(volatile T*)ptr)       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(addend), \"m\"(*(volatile T*)ptr)                      \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(value), \"m\"(*(volatile T*)ptr)                       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t,\"q\")\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\norq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\nandq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/mac_ppc.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_power_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_power_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n// TODO: rename to gcc_power.h?\n// This file is for Power Architecture with compilers supporting GNU inline-assembler syntax (currently GNU g++ and IBM XL).\n// Note that XL V9.0 (sometimes?) has trouble dealing with empty input and/or clobber lists, so they should be avoided.\n\n#if __powerpc64__ || __ppc64__\n    // IBM XL documents __powerpc64__ (and __PPC64__).\n    // Apple documents __ppc64__ (with __ppc__ only on 32-bit).\n    #define __TBB_WORDSIZE 8\n#else\n    #define __TBB_WORDSIZE 4\n#endif\n\n// Traditionally Power Architecture is big-endian.\n// Little-endian could be just an address manipulation (compatibility with TBB not verified),\n// or normal little-endian (on more recent systems). Embedded PowerPC systems may support\n// page-specific endianness, but then one endianness must be hidden from TBB so that it still sees only one.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n// On Power Architecture, (lock-free) 64-bit atomics require 64-bit hardware:\n#if __TBB_WORDSIZE==8\n    // Do not change the following definition, because TBB itself will use 64-bit atomics in 64-bit builds.\n    #define __TBB_64BIT_ATOMICS 1\n#elif __bgp__\n    // Do not change the following definition, because this is known 32-bit hardware.\n    #define __TBB_64BIT_ATOMICS 0\n#else\n    // To enable 64-bit atomics in 32-bit builds, set the value below to 1 instead of 0.\n    // You must make certain that the program will only use them on actual 64-bit hardware\n    // (which typically means that the entire program is only executed on such hardware),\n    // because their implementation involves machine instructions that are illegal elsewhere.\n    // The setting can be chosen independently per compilation unit,\n    // which also means that TBB itself does not need to be rebuilt.\n    // Alternatively (but only for the current architecture and TBB version),\n    // override the default as a predefined macro when invoking the compiler.\n    #ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 0\n    #endif\n#endif\n\ninline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t result;\n\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"lwarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpw %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stwcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int32_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stwcx. */\n                         );\n    return result;\n}\n\n#if __TBB_WORDSIZE==8\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stdcx. */\n                         );\n    return result;\n}\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    int64_t value_register, comparand_register, result_register; // dummy variables to allocate registers\n    __asm__ __volatile__(\"sync\\n\\t\"\n                         \"ld %[val],%[valm]\\n\\t\"\n                         \"ld %[cmp],%[cmpm]\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"std %[res],%[resm]\\n\\t\"\n                         \"isync\"\n                         : [resm]\"=m\"(result)\n                         , [res] \"=&r\"(   result_register)\n                         , [val] \"=&r\"(    value_register)\n                         , [cmp] \"=&r\"(comparand_register)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr] \"r\"(ptr)\n                         , [valm]\"m\"(value)\n                         , [cmpm]\"m\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmpd and/or stdcx. */\n                         );\n    return result;\n}\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n#define __TBB_MACHINE_DEFINE_LOAD_STORE(S,ldx,stx,cmpx)                                                       \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store<T,S> {                                                                          \\\n        static inline T load_with_acquire(const volatile T& location) {                                       \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\\n\"                                                    \\\n                                 \"0:\\n\\t\"                                                                     \\\n                                 cmpx \" %[res],%[res]\\n\\t\"                                                    \\\n                                 \"bne- 0b\\n\\t\"                                                                \\\n                                 \"isync\"                                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)       /* redundant with \"memory\" */                          \\\n                                 : \"memory\"            /* compiler acquire fence */                           \\\n                                 , \"cr0\"               /* clobbered by cmpw/cmpd */);                         \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store_with_release(volatile T &location, T value) {                                \\\n            __asm__ __volatile__(\"lwsync\\n\\t\"                                                                 \\\n                                 stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)      /* redundant with \"memory\" */                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);                \\\n        }                                                                                                     \\\n    };                                                                                                        \\\n                                                                                                              \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store_relaxed<T,S> {                                                                  \\\n        static inline T load (const __TBB_atomic T& location) {                                               \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\"                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)                                                              \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store (__TBB_atomic T &location, T value) {                                        \\\n            __asm__ __volatile__(stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)                                                             \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n        }                                                                                                     \\\n    };\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_LOAD_STORE(1,\"lbz\",\"stb\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(2,\"lhz\",\"sth\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(4,\"lwz\",\"stw\",\"cmpw\")\n\n#if __TBB_WORDSIZE==8\n\n    __TBB_MACHINE_DEFINE_LOAD_STORE(8,\"ld\" ,\"std\",\"cmpd\")\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\n    template <typename T>\n    struct machine_load_store<T,8> {\n        static inline T load_with_acquire(const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\\n\"\n                                 \"0:\\n\\t\"\n                                 \"cmpd %[res],%[res]\\n\\t\"\n                                 \"bne- 0b\\n\\t\"\n                                 \"isync\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)       /* redundant with \"memory\" */\n                                 : \"memory\"            /* compiler acquire fence */\n                                 , \"cr0\"               /* clobbered by cmpd */);\n            return result;\n        }\n\n        static inline void store_with_release(volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"lwsync\\n\\t\"\n                                 \"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)      /* redundant with \"memory\" */\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);\n        }\n    };\n\n    struct machine_load_store_relaxed<T,8> {\n        static inline T load (const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n            return result;\n        }\n\n        static inline void store (volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n        }\n    };\n    #define __TBB_machine_load_store_relaxed_8\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_LOAD_STORE\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_control_consistency_helper() __asm__ __volatile__(\"isync\": : :\"memory\")\n#define __TBB_full_memory_fence()          __asm__ __volatile__( \"sync\": : :\"memory\")\n\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    // cntlzd/cntlzw starts counting at 2^63/2^31 (ignoring any higher-order bits), and does not affect cr0\n#if __TBB_WORDSIZE==8\n    __asm__ __volatile__ (\"cntlzd %0,%0\" : \"+r\"(x));\n    return 63-static_cast<intptr_t>(x);\n#else\n    __asm__ __volatile__ (\"cntlzw %0,%0\" : \"+r\"(x));\n    return 31-static_cast<intptr_t>(x);\n#endif\n}\n#define __TBB_Log2(V) __TBB_machine_lg(V)\n\n// Assumes implicit alignment for any 32-bit value\ntypedef uint32_t __TBB_Flag;\n#define __TBB_Flag __TBB_Flag\n\ninline bool __TBB_machine_trylockbyte( __TBB_atomic __TBB_Flag &flag ) {\n    return __TBB_machine_cmpswp4(&flag,1,0)==0;\n}\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/macos_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_macos_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_macos_common_H\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n// __TBB_HardwareConcurrency\n\n#include <sys/types.h>\n#include <sys/sysctl.h>\n\nstatic inline int __TBB_macos_available_cpu() {\n    int name[2] = {CTL_HW, HW_AVAILCPU};\n    int ncpu;\n    size_t size = sizeof(ncpu);\n    sysctl( name, 2, &ncpu, &size, NULL, 0 );\n    return ncpu;\n}\n\n#define __TBB_HardwareConcurrency() __TBB_macos_available_cpu()\n\n#ifndef __TBB_full_memory_fence\n    // TBB has not recognized the architecture (none of the architecture abstraction\n    // headers was included).\n    #define __TBB_UnknownArchitecture 1\n#endif\n\n#if __TBB_UnknownArchitecture\n// Implementation of atomic operations based on OS provided primitives\n#include <libkern/OSAtomic.h>\n\nstatic inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t value, int64_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for macOS* atomics\");\n    int64_t* address = (int64_t*)ptr;\n    while( !OSAtomicCompareAndSwap64Barrier(comparand, value, address) ){\n#if __TBB_WORDSIZE==8\n        int64_t snapshot = *address;\n#else\n        int64_t snapshot = OSAtomicAdd64( 0, address );\n#endif\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\n#define __TBB_machine_cmpswp8 __TBB_machine_cmpswp8_OsX\n\n#endif /* __TBB_UnknownArchitecture */\n\n#if __TBB_UnknownArchitecture\n\n#ifndef __TBB_WORDSIZE\n#define __TBB_WORDSIZE __SIZEOF_POINTER__\n#endif\n\n#ifdef __TBB_ENDIANNESS\n    // Already determined based on hardware architecture.\n#elif __BIG_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_control_consistency_helper() OSMemoryBarrier()\n#define __TBB_acquire_consistency_helper() OSMemoryBarrier()\n#define __TBB_release_consistency_helper() OSMemoryBarrier()\n#define __TBB_full_memory_fence()          OSMemoryBarrier()\n\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for macOS atomics\");\n    int32_t* address = (int32_t*)ptr;\n    while( !OSAtomicCompareAndSwap32Barrier(comparand, value, address) ){\n        int32_t snapshot = *address;\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for macOS atomics\");\n    return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for macOS atomics\");\n    return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#if __TBB_WORDSIZE == 4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#endif /* __TBB_UnknownArchitecture */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/mic_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mic_common_H\n#define __TBB_mic_common_H\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_DEFINE_MIC\n    #error mic_common.h should be included only when building for Intel(R) Many Integrated Core Architecture\n#endif\n\n#ifndef __TBB_PREFETCHING\n#define __TBB_PREFETCHING 1\n#endif\n#if __TBB_PREFETCHING\n#include <immintrin.h>\n#define __TBB_cl_prefetch(p) _mm_prefetch((const char*)p, _MM_HINT_T1)\n#define __TBB_cl_evict(p) _mm_clevict(p, _MM_HINT_T1)\n#endif\n\n/** Intel(R) Many Integrated Core Architecture does not support mfence and pause instructions **/\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"lock; addl $0,(%%rsp)\":::\"memory\")\n#define __TBB_Pause(x) _mm_delay_32(16*(x))\n#define __TBB_STEALING_PAUSE 1500/16\n#include <sched.h>\n#define __TBB_Yield() sched_yield()\n\n/** Specifics **/\n#define __TBB_STEALING_ABORT_ON_CONTENTION 1\n#define __TBB_YIELD2P 1\n#define __TBB_HOARD_NONLOCAL_TASKS 1\n\n#if ! ( __FreeBSD__ || __linux__ )\n    #error Intel(R) Many Integrated Core Compiler does not define __FreeBSD__ or __linux__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__ or __linux__.\n#endif /* ! ( __FreeBSD__ || __linux__ ) */\n\n#endif /* __TBB_mic_common_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/msvc_armv7.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_msvc_armv7_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_msvc_armv7_H\n\n#include <intrin.h>\n#include <float.h>\n\n#define __TBB_WORDSIZE 4\n\n#define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// We can test this on _M_IX86\n#pragma intrinsic(_ReadWriteBarrier)\n#pragma intrinsic(_mm_mfence)\n#define __TBB_compiler_fence()    _ReadWriteBarrier()\n#define __TBB_full_memory_fence() _mm_mfence()\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#else\n//Now __dmb(_ARM_BARRIER_SY) is used for both compiler and memory fences\n//This might be changed later after testing\n#define __TBB_compiler_fence()    __dmb(_ARM_BARRIER_SY)\n#define __TBB_full_memory_fence() __dmb(_ARM_BARRIER_SY)\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n#endif\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(S,T,F)                                               \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                   \\\n    return _InterlockedCompareExchange##F(reinterpret_cast<volatile T *>(ptr),value,comparand);  \\\n}                                                                                                \\\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(S,T,F)                                             \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                              \\\n    return _InterlockedExchangeAdd##F(reinterpret_cast<volatile T *>(ptr),value);                \\\n}                                                                                                \\\n\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(1,char,8)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(2,short,16)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(4,long,)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(8,__int64,64)\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(4,long,)\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// No _InterlockedExchangeAdd64 intrinsic on _M_IX86\n#define __TBB_64BIT_ATOMICS 0\n#else\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(8,__int64,64)\n#endif\n\ninline void __TBB_machine_pause (int32_t delay )\n{\n    while(delay>0)\n    {\n        __TBB_compiler_fence();\n        delay--;\n    }\n}\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb {\nnamespace internal {\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        const T value = location;\n\n        /*\n        * An extra memory barrier is required for errata #761319\n        * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n        */\n        __TBB_acquire_consistency_helper();\n        return value;\n    }\n\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\nclass cpu_ctl_env {\nprivate:\n    unsigned int my_ctl;\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return my_ctl != ctl.my_ctl; }\n    void get_env() { my_ctl = _control87(0, 0); }\n    void set_env() const { _control87( my_ctl, ~0U ); }\n};\n\n} // namespace internal\n} // namespaces tbb\n\n// Machine specific atomic operations\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n\n// Use generics for some things\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE               1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n#else\n#define __TBB_Yield() __yield()\n#endif\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_OR(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_AND(P,V)\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_OR( T1 *operand, T2 addend ) {\n    _InterlockedOr((long volatile *)operand, (long)addend);\n}\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_AND( T1 *operand, T2 addend ) {\n    _InterlockedAnd((long volatile *)operand, (long)addend);\n}\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/msvc_ia32_common.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_msvc_ia32_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_msvc_ia32_common_H\n\n#include <intrin.h>\n\n//TODO: consider moving this macro to tbb_config.h and using where MSVC asm is used\n#if  !_M_X64 || __INTEL_COMPILER\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 1\n#else\n    //MSVC in x64 mode does not accept inline assembler\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 0\n    #define __TBB_NO_X86_MSVC_INLINE_ASM_MSG \"The compiler being used is not supported (outdated?)\"\n#endif\n\n#if _M_X64\n    #define __TBB_r(reg_name) r##reg_name\n    #define __TBB_W(name) name##64\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef __int64 word;\n    }}}\n#else\n    #define __TBB_r(reg_name) e##reg_name\n    #define __TBB_W(name) name\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef long word;\n    }}}\n#endif\n\n#if _MSC_VER>=1600 && (!__INTEL_COMPILER || __INTEL_COMPILER>=1310)\n    // S is the operand size in bytes, B is the suffix for intrinsics for that size\n    #define __TBB_MACHINE_DEFINE_ATOMICS(S,B,T,U)                                           \\\n    __pragma(intrinsic( _InterlockedCompareExchange##B ))                                   \\\n    static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n        return _InterlockedCompareExchange##B ( (T*)ptr, value, comparand );                \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchangeAdd##B ))                                       \\\n    static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) {           \\\n        return _InterlockedExchangeAdd##B ( (T*)ptr, addend );                              \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchange##B ))                                          \\\n    static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) {          \\\n        return _InterlockedExchange##B ( (T*)ptr, value );                                  \\\n    }\n\n    // Atomic intrinsics for 1, 2, and 4 bytes are available for x86 & x64\n    __TBB_MACHINE_DEFINE_ATOMICS(1,8,char,__int8)\n    __TBB_MACHINE_DEFINE_ATOMICS(2,16,short,__int16)\n    __TBB_MACHINE_DEFINE_ATOMICS(4,,long,__int32)\n\n    #if __TBB_WORDSIZE==8\n    __TBB_MACHINE_DEFINE_ATOMICS(8,64,__int64,__int64)\n    #endif\n\n    #undef __TBB_MACHINE_DEFINE_ATOMICS\n    #define __TBB_ATOMIC_PRIMITIVES_DEFINED\n#endif /*_MSC_VER>=1600*/\n\n#if _MSC_VER>=1300 || __INTEL_COMPILER>=1100\n    #pragma intrinsic(_ReadWriteBarrier)\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n    #define __TBB_full_memory_fence() _mm_mfence()\n#elif __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    #define __TBB_compiler_fence()    __asm { __asm nop }\n    #define __TBB_full_memory_fence() __asm { __asm mfence }\n#else\n    #error Unsupported compiler; define __TBB_{control,acquire,release}_consistency_helper to support it\n#endif\n\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#if (_MSC_VER>=1300) || (__INTEL_COMPILER)\n    #pragma intrinsic(_mm_pause)\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void pause (uintptr_t delay ) {\n            for (;delay>0; --delay )\n                _mm_pause();\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_intrinsics::pause(V)\n    #define __TBB_SINGLE_PAUSE _mm_pause()\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm\n        static inline void pause (uintptr_t delay ) {\n            _asm\n            {\n                mov __TBB_r(ax), delay\n              __TBB_L1:\n                pause\n                add __TBB_r(ax), -1\n                jne __TBB_L1\n            }\n            return;\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_inline_asm::pause(V)\n    #define __TBB_SINGLE_PAUSE __asm pause\n#endif\n\n#if (_MSC_VER>=1400 && !__INTEL_COMPILER) || (__INTEL_COMPILER>=1200)\n// MSVC did not have this intrinsic prior to VC8.\n// ICL 11.1 fails to compile a TBB example if __TBB_Log2 uses the intrinsic.\n    #pragma intrinsic(__TBB_W(_BitScanReverse))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            unsigned long j;\n            __TBB_W(_BitScanReverse)( &j, i );\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_intrinsics::lg_bsr(V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            uintptr_t j;\n            __asm\n            {\n                bsr __TBB_r(ax), i\n                mov j, __TBB_r(ax)\n            }\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_inline_asm::lg_bsr(V)\n#endif\n\n#if _MSC_VER>=1400\n    #pragma intrinsic(__TBB_W(_InterlockedOr))\n    #pragma intrinsic(__TBB_W(_InterlockedAnd))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void lock_or( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedOr)((volatile word*)operand, addend);\n        }\n        static inline void lock_and( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedAnd)((volatile word*)operand, addend);\n        }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_intrinsics::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_intrinsics::lock_and(P,V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline void lock_or( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock or [edx], eax\n            }\n         }\n         static inline void lock_and( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock and [edx], eax\n            }\n         }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_inline_asm::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_inline_asm::lock_and(P,V)\n#endif\n\n#pragma intrinsic(__rdtsc)\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n    return __rdtsc();\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb { namespace internal { class cpu_ctl_env; } }\n#if __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    inline void __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm stmxcsr [__TBB_r(ax)]\n            __asm fstcw   [__TBB_r(ax)+4]\n        }\n    }\n    inline void __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm ldmxcsr [__TBB_r(ax)]\n            __asm fldcw   [__TBB_r(ax)+4]\n        }\n    }\n#else\n    extern \"C\" {\n        void __TBB_EXPORTED_FUNC __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* );\n        void __TBB_EXPORTED_FUNC __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* );\n    }\n#endif\n\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int         mxcsr;\n    short       x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n        __TBB_get_cpu_ctl_env( this );\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const { __TBB_set_cpu_ctl_env( this ); }\n};\n} // namespace internal\n} // namespace tbb\n\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n\n#undef __TBB_r\n#undef __TBB_W\n#undef __TBB_word\n\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_try_lock_elided (volatile void* ptr);\n    void   __TBB_EXPORTED_FUNC __TBB_machine_unlock_elided (volatile void* ptr);\n\n    // 'pause' instruction aborts HLE/RTM transactions\n    inline static void __TBB_machine_try_lock_elided_cancel() { __TBB_SINGLE_PAUSE; }\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n    #define __TBB_machine_is_in_transaction _xtest\n    #define __TBB_machine_begin_transaction _xbegin\n    #define __TBB_machine_end_transaction   _xend\n    // The value (0xFF) below comes from the\n    // Intel(R) 64 and IA-32 Architectures Optimization Reference Manual 12.4.5 lock not free\n    #define __TBB_machine_transaction_conflict_abort() _xabort(0xFF)\n#else\n    __int8           __TBB_EXPORTED_FUNC __TBB_machine_is_in_transaction();\n    unsigned __int32 __TBB_EXPORTED_FUNC __TBB_machine_begin_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_end_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_transaction_conflict_abort();\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/sunos_sparc.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_sunos_sparc_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_sunos_sparc_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 8\n// Big endian is assumed for SPARC.\n// While hardware may support page-specific bi-endianness, only big endian pages may be exposed to TBB\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n\n/** To those working on SPARC hardware. Consider relaxing acquire and release\n    consistency helpers to no-op (as this port covers TSO mode only). **/\n#define __TBB_compiler_fence()             __asm__ __volatile__ (\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad\": : : \"memory\")\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand ){\n  int32_t result;\n  __asm__ __volatile__(\n                       \"cas\\t[%5],%4,%1\"\n                       : \"=m\"(*(int32_t *)ptr), \"=r\"(result)\n                       : \"m\"(*(int32_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n                       : \"memory\");\n  return result;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand ){\n  int64_t result;\n  __asm__ __volatile__(\n                       \"casx\\t[%5],%4,%1\"\n               : \"=m\"(*(int64_t *)ptr), \"=r\"(result)\n               : \"m\"(*(int64_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n               : \"memory\");\n  return result;\n}\n\n//---------------------------------------------------\n// Fetch and add\n//---------------------------------------------------\n\n/**\n * Atomic fetch and add for 32 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend){\n  int32_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t cas\\t [%2], %3, %0\\n\"           // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%icc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n               : \"=&r\"(result), \"=m\"(*(int32_t *)ptr)\n               : \"r\"(ptr), \"r\"(*(int32_t *)ptr), \"r\"(addend), \"m\"(*(int32_t *)ptr)\n               : \"ccr\", \"memory\");\n  return result;\n}\n\n/**\n * Atomic fetch and add for 64 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend){\n  int64_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t casx\\t [%2], %3, %0\\n\"          // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n                : \"=&r\"(result), \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(addend), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"memory\");\n  return result;\n}\n\n//--------------------------------------------------------\n// Logarithm (base two, integer)\n//--------------------------------------------------------\n\nstatic inline int64_t __TBB_machine_lg( uint64_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    uint64_t count;\n    // one hot encode\n    x |= (x >> 1);\n    x |= (x >> 2);\n    x |= (x >> 4);\n    x |= (x >> 8);\n    x |= (x >> 16);\n    x |= (x >> 32);\n    // count 1's\n    __asm__ (\"popc %1, %0\" : \"=r\"(count) : \"r\"(x) );\n    return count-1;\n}\n\n//--------------------------------------------------------\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t or\\t %2, %3, %%g1\\n\"          // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t and\\t %2, %3, %%g1\\n\"         // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\n\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    // do nothing, inlined, doesn't matter\n}\n\n// put 0xff in memory location, return memory value,\n//  generic trylockbyte puts 0x01, however this is fine\n//  because all that matters is that 0 is unlocked\nstatic inline bool __TBB_machine_trylockbyte(unsigned char &flag){\n    unsigned char result;\n    __asm__ __volatile__ (\n            \"ldstub\\t [%2], %0\\n\"\n        : \"=r\"(result), \"=m\"(flag)\n        : \"r\"(&flag), \"m\"(flag)\n        : \"memory\");\n    return result == 0;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n// Definition of other functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/windows_api.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_windows_api_H\n#define __TBB_machine_windows_api_H\n\n#if _WIN32 || _WIN64\n\n#include <windows.h>\n\n#if _WIN32_WINNT < 0x0600\n// The following Windows API function is declared explicitly;\n// otherwise it fails to compile by VS2005.\n#if !defined(WINBASEAPI) || (_WIN32_WINNT < 0x0501 && _MSC_VER == 1400)\n#define __TBB_WINBASEAPI extern \"C\"\n#else\n#define __TBB_WINBASEAPI WINBASEAPI\n#endif\n__TBB_WINBASEAPI BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );\n__TBB_WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTION, DWORD );\n// Overloading WINBASEAPI macro and using local functions missing in Windows XP/2003\n#define InitializeCriticalSectionEx inlineInitializeCriticalSectionEx\n#define CreateSemaphoreEx inlineCreateSemaphoreEx\n#define CreateEventEx inlineCreateEventEx\ninline BOOL WINAPI inlineInitializeCriticalSectionEx( LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD )\n{\n    return InitializeCriticalSectionAndSpinCount( lpCriticalSection, dwSpinCount );\n}\ninline HANDLE WINAPI inlineCreateSemaphoreEx( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName, DWORD, DWORD )\n{\n    return CreateSemaphore( lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName );\n}\ninline HANDLE WINAPI inlineCreateEventEx( LPSECURITY_ATTRIBUTES lpEventAttributes, LPCTSTR lpName, DWORD dwFlags, DWORD )\n{\n    BOOL manual_reset = dwFlags&0x00000001 ? TRUE : FALSE; // CREATE_EVENT_MANUAL_RESET\n    BOOL initial_set  = dwFlags&0x00000002 ? TRUE : FALSE; // CREATE_EVENT_INITIAL_SET\n    return CreateEvent( lpEventAttributes, manual_reset, initial_set, lpName );\n}\n#endif\n\n#if defined(RTL_SRWLOCK_INIT)\n#ifndef __TBB_USE_SRWLOCK\n// TODO: turn it on when bug 1952 will be fixed\n#define __TBB_USE_SRWLOCK 0\n#endif\n#endif\n\n#else\n#error tbb/machine/windows_api.h should only be used for Windows based platforms\n#endif // _WIN32 || _WIN64\n\n#endif // __TBB_machine_windows_api_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/windows_ia32.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_ia32_H\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267)\n#endif\n\n#include \"msvc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\nextern \"C\" {\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );\n    void __TBB_EXPORTED_FUNC __TBB_machine_store8 (volatile void *ptr, __int64 value );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);\n}\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,U,A,C) \\\nstatic inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n       __asm mov edx, p \\\n       __asm mov C , value \\\n       __asm mov A , comparand \\\n       __asm lock cmpxchg [edx], C \\\n       __asm mov result, A \\\n    } \\\n    return result; \\\n} \\\n\\\nstatic inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, addend \\\n        __asm lock xadd [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\\\n\\\nstatic inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, value \\\n        __asm lock xchg [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\n\n\n__TBB_MACHINE_DEFINE_ATOMICS(1, __int8, __int8, al, cl)\n__TBB_MACHINE_DEFINE_ATOMICS(2, __int16, __int16, ax, cx)\n__TBB_MACHINE_DEFINE_ATOMICS(4, ptrdiff_t, ptrdiff_t, eax, ecx)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux and Windows)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warnings 4244, 4267 are back\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/machine/windows_intel64.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_intel64_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#include \"msvc_ia32_common.h\"\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#include <intrin.h>\n#pragma intrinsic(_InterlockedCompareExchange,_InterlockedExchangeAdd,_InterlockedExchange)\n#pragma intrinsic(_InterlockedCompareExchange64,_InterlockedExchangeAdd64,_InterlockedExchange64)\n\n// ATTENTION: if you ever change argument types in machine-specific primitives,\n// please take care of atomic_word<> specializations in tbb/atomic.h\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );\n}\n\ninline long __TBB_machine_cmpswp4 (volatile void *ptr, __int32 value, __int32 comparand ) {\n    return _InterlockedCompareExchange( (long*)ptr, value, comparand );\n}\ninline long __TBB_machine_fetchadd4 (volatile void *ptr, __int32 addend ) {\n    return _InterlockedExchangeAdd( (long*)ptr, addend );\n}\ninline long __TBB_machine_fetchstore4 (volatile void *ptr, __int32 value ) {\n    return _InterlockedExchange( (long*)ptr, value );\n}\n\ninline __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand ) {\n    return _InterlockedCompareExchange64( (__int64*)ptr, value, comparand );\n}\ninline __int64 __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend ) {\n    return _InterlockedExchangeAdd64( (__int64*)ptr, addend );\n}\ninline __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value ) {\n    return _InterlockedExchange64( (__int64*)ptr, value );\n}\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/memory_pool.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_memory_pool_H\n#define __TBB_memory_pool_H\n\n#if !TBB_PREVIEW_MEMORY_POOL\n#error Set TBB_PREVIEW_MEMORY_POOL to include memory_pool.h\n#endif\n/** @file */\n\n#include \"scalable_allocator.h\"\n#include <new> // std::bad_alloc\n#include <stdexcept> // std::runtime_error, std::invalid_argument\n// required in C++03 to construct std::runtime_error and std::invalid_argument\n#include <string>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#include <utility> // std::forward\n#endif\n\n#if __TBB_EXTRA_DEBUG\n#define __TBBMALLOC_ASSERT ASSERT\n#else\n#define __TBBMALLOC_ASSERT(a,b) ((void)0)\n#endif\n\nnamespace tbb {\nnamespace interface6 {\n//! @cond INTERNAL\nnamespace internal {\n\n//! Base of thread-safe pool allocator for variable-size requests\nclass pool_base : tbb::internal::no_copy {\n    // Pool interface is separate from standard allocator classes because it has\n    // to maintain internal state, no copy or assignment. Move and swap are possible.\npublic:\n    //! Reset pool to reuse its memory (free all objects at once)\n    void recycle() { rml::pool_reset(my_pool); }\n\n    //! The \"malloc\" analogue to allocate block of memory of size bytes\n    void *malloc(size_t size) { return rml::pool_malloc(my_pool, size); }\n\n    //! The \"free\" analogue to discard a previously allocated piece of memory.\n    void free(void* ptr) { rml::pool_free(my_pool, ptr); }\n\n    //! The \"realloc\" analogue complementing pool_malloc.\n    // Enables some low-level optimization possibilities\n    void *realloc(void* ptr, size_t size) {\n        return rml::pool_realloc(my_pool, ptr, size);\n    }\n\nprotected:\n    //! destroy pool - must be called in a child class\n    void destroy() { rml::pool_destroy(my_pool); }\n\n    rml::MemoryPool *my_pool;\n};\n\n} // namespace internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** @ingroup memory_allocation */\ntemplate<typename T, typename P = internal::pool_base>\nclass memory_pool_allocator {\nprotected:\n    typedef P pool_type;\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\npublic:\n    typedef typename tbb::internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    explicit memory_pool_allocator(pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator(const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\n    pointer address(reference x) const { return &x; }\n    const_pointer address(const_reference x) const { return &x; }\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        pointer p = static_cast<pointer>( my_pool->malloc( n*sizeof(value_type) ) );\n        if (!p)\n            tbb::internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        my_pool->free(p);\n    }\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) { ::new((void*)(p)) value_type(value); }\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) { p->~value_type(); }\n\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<typename P>\nclass memory_pool_allocator<void, P> {\npublic:\n    typedef P pool_type;\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    explicit memory_pool_allocator( pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator( const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\nprotected:\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n};\n\ntemplate<typename T, typename U, typename P>\ninline bool operator==( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool==b.my_pool;}\n\ntemplate<typename T, typename U, typename P>\ninline bool operator!=( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool!=b.my_pool;}\n\n\n//! Thread-safe growable pool allocator for variable-size requests\ntemplate <typename Alloc>\nclass memory_pool : public internal::pool_base {\n    Alloc my_alloc; // TODO: base-class optimization\n    static void *allocate_request(intptr_t pool_id, size_t & bytes);\n    static int deallocate_request(intptr_t pool_id, void*, size_t raw_bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    explicit memory_pool(const Alloc &src = Alloc());\n\n    //! destroy pool\n    ~memory_pool() { destroy(); } // call the callbacks first and destroy my_alloc latter\n\n};\n\nclass fixed_pool : public internal::pool_base {\n    void *my_buffer;\n    size_t my_size;\n    inline static void *allocate_request(intptr_t pool_id, size_t & bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    inline fixed_pool(void *buf, size_t size);\n    //! destroy pool\n    ~fixed_pool() { destroy(); }\n};\n\n//////////////// Implementation ///////////////\n\ntemplate <typename Alloc>\nmemory_pool<Alloc>::memory_pool(const Alloc &src) : my_alloc(src) {\n    rml::MemPoolPolicy args(allocate_request, deallocate_request,\n                            sizeof(typename Alloc::value_type));\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ntemplate <typename Alloc>\nvoid *memory_pool<Alloc>::allocate_request(intptr_t pool_id, size_t & bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == bytes%unit_size, NULL);\n    void *ptr;\n    __TBB_TRY { ptr = self.my_alloc.allocate( bytes/unit_size ); }\n    __TBB_CATCH(...) { return 0; }\n    return ptr;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Workaround for erroneous \"unreachable code\" warning in the template below.\n    // Specific for VC++ 17-18 compiler\n    #pragma warning (push)\n    #pragma warning (disable: 4702)\n#endif\ntemplate <typename Alloc>\nint memory_pool<Alloc>::deallocate_request(intptr_t pool_id, void* raw_ptr, size_t raw_bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == raw_bytes%unit_size, NULL);\n    self.my_alloc.deallocate( static_cast<typename Alloc::value_type*>(raw_ptr), raw_bytes/unit_size );\n    return 0;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    #pragma warning (pop)\n#endif\ninline fixed_pool::fixed_pool(void *buf, size_t size) : my_buffer(buf), my_size(size) {\n    if (!buf || !size)\n        // TODO: improve support for mode with exceptions disabled\n        tbb::internal::throw_exception(std::invalid_argument(\"Zero in parameter is invalid\"));\n    rml::MemPoolPolicy args(allocate_request, 0, size, /*fixedPool=*/true);\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ninline void *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {\n    fixed_pool &self = *reinterpret_cast<fixed_pool*>(pool_id);\n    __TBBMALLOC_ASSERT(0 != self.my_size, \"The buffer must not be used twice.\");\n    bytes = self.my_size;\n    self.my_size = 0; // remember that buffer has been used\n    return self.my_buffer;\n}\n\n} //namespace interface6\nusing interface6::memory_pool_allocator;\nusing interface6::memory_pool;\nusing interface6::fixed_pool;\n} //namespace tbb\n\n#undef __TBBMALLOC_ASSERT\n#endif// __TBB_memory_pool_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_mutex_H\n#define __TBB_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Wrapper around the platform's native lock.\n/** @ingroup synchronization */\nclass mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n    internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        int error_code = pthread_mutex_init(&impl,NULL);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_init failed\");\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( mutex& mutex ) {\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire(mutex);\n#else\n            mutex.lock();\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire (mutex);\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release ();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current mutex to work\n        mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = NULL;\n        return s.internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n        HELD=0x56CD\n    };\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n#if _WIN32||_WIN64\npublic:\n    //!  Set the internal state\n    void set_state( state_t to ) { state = to; }\n#endif\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/null_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_null_mutex_H\n#define __TBB_null_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A mutex which does nothing\n/** A null_mutex does no operation and simulates success.\n    @ingroup synchronization */\nclass null_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_mutex& ) {}\n        ~scoped_lock() {}\n        void acquire( null_mutex& ) {}\n        bool try_acquire( null_mutex& ) { return true; }\n        void release() {}\n    };\n\n    null_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/null_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_null_rw_mutex_H\n#define __TBB_null_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A rw mutex which does nothing\n/** A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.\n    @ingroup synchronization */\nclass null_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_rw_mutex& , bool = true ) {}\n        ~scoped_lock() {}\n        void acquire( null_rw_mutex& , bool = true ) {}\n        bool upgrade_to_writer() { return true; }\n        bool downgrade_to_reader() { return true; }\n        bool try_acquire( null_rw_mutex& , bool = true ) { return true; }\n        void release() {}\n    };\n\n    null_rw_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_do.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_do_H\n#define __TBB_parallel_do_H\n\n#include \"internal/_range_iterator.h\"\n#include \"internal/_template_helpers.h\"\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <iterator>\n#include \"internal/_tbb_trace_impl.h\"\n\nnamespace tbb {\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n    template<typename Body, typename Item> class parallel_do_feeder_impl;\n} // namespace internal\n//! @endcond\n\n//! Class the user supplied algorithm body uses to add new tasks\n/** \\param Item Work item type **/\n    template<typename Item>\n    class parallel_do_feeder: ::tbb::internal::no_copy\n    {\n        parallel_do_feeder() {}\n        virtual ~parallel_do_feeder () {}\n        virtual void internal_add_copy( const Item& item ) = 0;\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        virtual void internal_add_move( Item&& item ) = 0;\n#endif\n        template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;\n    public:\n        //! Add a work item to a running parallel_do.\n        void add( const Item& item ) {internal_add_copy(item);}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        void add( Item&& item ) {internal_add_move(std::move(item));}\n#endif\n    };\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename Body> class do_group_task;\n\n    //! For internal use only.\n    /** Selects one of the two possible forms of function call member operator.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_operator_selector\n    {\n        typedef parallel_do_feeder<Item> Feeder;\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem) const ) {\n            obj(tbb::internal::forward<A1>(arg1));\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {\n            obj(tbb::internal::forward<A1>(arg1), arg2);\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2&, void (Body::*)(CvItem&) const ) {\n            obj(arg1);\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2, void (Body::*)(CvItem&, parallel_do_feeder<Item>&) const ) {\n            obj(arg1, arg2);\n        }\n    public:\n        template<typename A1, typename A2>\n        static void call( const Body& obj, __TBB_FORWARDING_REF(A1) arg1, A2& arg2 )\n        {\n            internal_call( obj, tbb::internal::forward<A1>(arg1), arg2, &Body::operator() );\n        }\n    };\n\n    //! For internal use only.\n    /** Executes one iteration of a do.\n        @ingroup algorithms */\n    template<typename Body, typename Item>\n    class do_iteration_task: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Item my_value;\n        feeder_type& my_feeder;\n\n        do_iteration_task( const Item& value, feeder_type& feeder ) :\n            my_value(value), my_feeder(feeder)\n        {}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        do_iteration_task( Item&& value, feeder_type& feeder ) :\n            my_value(std::move(value)), my_feeder(feeder)\n        {}\n#endif\n\n        task* execute() __TBB_override\n        {\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, tbb::internal::move(my_value), my_feeder);\n            return NULL;\n        }\n\n        template<typename Body_, typename Item_> friend class parallel_do_feeder_impl;\n    }; // class do_iteration_task\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_iteration_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Iterator my_iter;\n        feeder_type& my_feeder;\n\n        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) :\n            my_iter(iter), my_feeder(feeder)\n        {}\n\n        task* execute() __TBB_override\n        {\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;\n        template<typename Body_, typename Item_> friend class do_group_task_input;\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_iteration_task_iter\n\n    //! For internal use only.\n    /** Implements new task adding procedure.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_feeder_impl : public parallel_do_feeder<Item>\n    {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        //Avoiding use of copy constructor in a virtual method if the type does not support it\n        void internal_add_copy_impl(std::true_type, const Item& item) {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);\n            task::spawn(t);\n        }\n        void internal_add_copy_impl(std::false_type, const Item&) {\n            __TBB_ASSERT(false, \"Overloading for r-value reference doesn't work or it's not movable and not copyable object\");\n        }\n        void internal_add_copy( const Item& item ) __TBB_override\n        {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n            internal_add_copy_impl(typename std::is_copy_constructible<Item>::type(), item);\n#else\n            internal_add_copy_impl(std::true_type(), item);\n#endif\n        }\n        void internal_add_move( Item&& item ) __TBB_override\n        {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(std::move(item), *this);\n            task::spawn(t);\n        }\n#else /* ! __TBB_CPP11_RVALUE_REF_PRESENT */\n        void internal_add_copy(const Item& item) __TBB_override {\n            typedef do_iteration_task<Body, Item> iteration_type;\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);\n            task::spawn(t);\n        }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n    public:\n        const Body* my_body;\n        empty_task* my_barrier;\n\n        parallel_do_feeder_impl()\n        {\n            my_barrier = new( task::allocate_root() ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl(tbb::task_group_context &context)\n        {\n            my_barrier = new( task::allocate_root(context) ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n#endif\n\n        ~parallel_do_feeder_impl()\n        {\n            my_barrier->destroy(*my_barrier);\n        }\n    }; // class parallel_do_feeder_impl\n\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_group_task_forward: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        Iterator my_first;\n        size_t my_size;\n\n        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder )\n            : my_feeder(feeder), my_first(first), my_size(size)\n        {}\n\n        task* execute() __TBB_override\n        {\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( my_first, my_feeder );\n                ++my_first;\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename _Item> friend class do_task_iter;\n    }; // class do_group_task_forward\n\n    template<typename Body, typename Item>\n    class do_group_task_input: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        size_t my_size;\n        aligned_space<Item, max_arg_size> my_arg;\n\n        do_group_task_input( feeder_type& feeder )\n            : my_feeder(feeder), my_size(0)\n        {}\n\n        task* execute() __TBB_override\n        {\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n            typedef std::move_iterator<Item*> Item_iterator;\n#else\n            typedef Item* Item_iterator;\n#endif\n            typedef do_iteration_task_iter<Item_iterator, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( Item_iterator(my_arg.begin() + k), my_feeder );\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        ~do_group_task_input(){\n            for( size_t k=0; k<my_size; ++k)\n                (my_arg.begin() + k)->~Item();\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_group_task_input\n\n    //! For internal use only.\n    /** Gets block of iterations and packages them into a do_group_task.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    class do_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n    public:\n        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) :\n            my_first(first), my_last(last), my_feeder(feeder)\n        {}\n\n    private:\n        Iterator my_first;\n        Iterator my_last;\n        feeder_type& my_feeder;\n\n        /* Do not merge run(xxx) and run_xxx() methods. They are separated in order\n            to make sure that compilers will eliminate unused argument of type xxx\n            (that is will not put it on stack). The sole purpose of this argument\n            is overload resolution.\n\n            An alternative could be using template functions, but explicit specialization\n            of member function templates is not supported for non specialized class\n            templates. Besides template functions would always fall back to the least\n            efficient variant (the one for input iterators) in case of iterators having\n            custom tags derived from basic ones. */\n        task* execute() __TBB_override\n        {\n            typedef typename std::iterator_traits<Iterator>::iterator_category iterator_tag;\n            return run( (iterator_tag*)NULL );\n        }\n\n        /** This is the most restricted variant that operates on input iterators or\n            iterators with unknown tags (tags not derived from the standard ones). **/\n        inline task* run( void* ) { return run_for_input_iterator(); }\n\n        task* run_for_input_iterator() {\n            typedef do_group_task_input<Body, Item> block_type;\n\n            block_type& t = *new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);\n            size_t k=0;\n            while( !(my_first == my_last) ) {\n                // Move semantics are automatically used when supported by the iterator\n                new (t.my_arg.begin() + k) Item(*my_first);\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first == my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.my_size = k;\n                return &t;\n            }\n        }\n\n        inline task* run( std::forward_iterator_tag* ) { return run_for_forward_iterator(); }\n\n        task* run_for_forward_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n\n            Iterator first = my_first;\n            size_t k=0;\n            while( !(my_first==my_last) ) {\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first==my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            return k==0 ? NULL : new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);\n        }\n\n        inline task* run( std::random_access_iterator_tag* ) { return run_for_random_access_iterator(); }\n\n        task* run_for_random_access_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n\n            size_t k = static_cast<size_t>(my_last-my_first);\n            if( k > block_type::max_arg_size ) {\n                Iterator middle = my_first + k/2;\n\n                empty_task& c = *new( allocate_continuation() ) empty_task;\n                do_task_iter& b = *new( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);\n                recycle_as_child_of(c);\n\n                my_last = middle;\n                c.set_ref_count(2);\n                c.spawn(b);\n                return this;\n            }else if( k != 0 ) {\n                task_list list;\n                task* t;\n                size_t k1=0;\n                for(;;) {\n                    t = new( allocate_child() ) iteration_type(my_first, my_feeder);\n                    ++my_first;\n                    if( ++k1==k ) break;\n                    list.push_back(*t);\n                }\n                set_ref_count(int(k+1));\n                spawn(list);\n                spawn_and_wait_for_all(*t);\n            }\n            return NULL;\n        }\n    }; // class do_task_iter\n\n    //! For internal use only.\n    /** Implements parallel iteration over a range.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    void run_parallel_do( Iterator first, Iterator last, const Body& body\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        typedef do_task_iter<Iterator, Body, Item> root_iteration_task;\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl<Body, Item> feeder(context);\n#else\n        parallel_do_feeder_impl<Body, Item> feeder;\n#endif\n        feeder.my_body = &body;\n\n        root_iteration_task &t = *new( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);\n\n        feeder.my_barrier->set_ref_count(2);\n        feeder.my_barrier->spawn_and_wait_for_all(t);\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif\n            );\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item, typename _Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        run_parallel_do<Iterator, Body, typename ::tbb::internal::strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif\n            );\n    }\n\n} // namespace internal\n} // namespace interface9\n//! @endcond\n\n/** \\page parallel_do_body_req Requirements on parallel_do body\n    Class \\c Body implementing the concept of parallel_do body must define:\n    - \\code\n        B::operator()(\n                cv_item_type item,\n                parallel_do_feeder<item_type>& feeder\n        ) const\n\n        OR\n\n        B::operator()( cv_item_type& item ) const\n      \\endcode                                               Process item.\n                                                             May be invoked concurrently  for the same \\c this but different \\c item.\n\n    - \\code item_type( const item_type& ) \\endcode\n                                                             Copy a work item.\n    - \\code ~item_type() \\endcode                            Destroy a work item\n**/\n\n/** \\name parallel_do\n    See also requirements on \\ref parallel_do_body_req \"parallel_do Body\". **/\n//@{\n//! Parallel iteration over a range, with optional addition of more work.\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body )\n{\n    if ( first == last )\n        return;\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context context(internal::PARALLEL_DO);\n#endif\n    interface9::internal::select_parallel_do( first, last, body, &Body::operator()\n#if __TBB_TASK_GROUP_CONTEXT\n        , context\n#endif\n        );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over a range, with optional addition of more work and user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context  )\n{\n    if ( first == last )\n        return;\n    interface9::internal::select_parallel_do( first, last, body, &Body::operator(), context );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n//@}\n\nusing interface9::parallel_do_feeder;\n\n} // namespace\n\n#endif /* __TBB_parallel_do_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_for.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_for_H\n#define __TBB_parallel_for_H\n\n#include <new>\n#include \"task.h\"\n#include \"partitioner.h\"\n#include \"blocked_range.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_tbb_trace_impl.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    //! allocate right task with new parent\n    void* allocate_sibling(task* start_for_task, size_t bytes);\n\n    //! Task type used in parallel_for\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_for: public task {\n        Range my_range;\n        const Body my_body;\n        typename Partitioner::task_partition_type my_partition;\n        task* execute() __TBB_override;\n\n        //! Update affinity info, if any.\n        void note_affinity( affinity_id id ) __TBB_override {\n            my_partition.note_affinity( id );\n        }\n\n    public:\n        //! Constructor for root task.\n        start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n            my_range(range),\n            my_body(body),\n            my_partition(partitioner)\n        {\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, NULL);\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, typename Partitioner::split_type& split_obj) :\n            my_range(parent_.my_range, split_obj),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split_obj)\n        {\n            my_partition.set_affinity(*this);\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, (void *)&parent_);\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, const Range& r, depth_t d ) :\n            my_range(r),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split())\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d );\n            tbb::internal::fgt_algorithm(tbb::internal::PARALLEL_FOR_TASK, this, (void *)&parent_);\n        }\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                start_for& a = *new(task::allocate_root()) start_for(range,body,partitioner);\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_FOR);\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n\t\t// REGION BEGIN\n                fgt_begin_algorithm( tbb::internal::PARALLEL_FOR_TASK, (void*)&context );\n                task::spawn_root_and_wait(a);\n                fgt_end_algorithm( (void*)&context );\n\t\t// REGION END\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() ) {\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n\t\t// REGION BEGIN\n                fgt_begin_algorithm( tbb::internal::PARALLEL_FOR_TASK, (void*)&context );\n                task::spawn_root_and_wait(a);\n                fgt_end_algorithm( (void*)&context );\n\t\t// END REGION\n            }\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range, serves as callback for partitioner\n        void run_body( Range &r ) { \n            fgt_alg_begin_body( tbb::internal::PARALLEL_FOR_TASK, (void *)const_cast<Body*>(&(this->my_body)), (void*)this );\n            my_body( r ); \n            fgt_alg_end_body( (void *)const_cast<Body*>(&(this->my_body)) );\n        }\n\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, split_obj) );\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, r, d) );\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void* allocate_sibling(task* start_for_task, size_t bytes) {\n        task* parent_ptr = new( start_for_task->allocate_continuation() ) flag_task();\n        start_for_task->set_parent(parent_ptr);\n        parent_ptr->set_ref_count(2);\n        return &parent_ptr->allocate_child().allocate(bytes);\n    }\n\n    //! execute task for parallel_for\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_for<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        my_partition.execute(*this, my_range);\n        return NULL;\n    }\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_for;\n\n    //! Calls the function with values from range [begin, end) with a step provided\n    template<typename Function, typename Index>\n    class parallel_for_body : internal::no_assign {\n        const Function &my_func;\n        const Index my_begin;\n        const Index my_step;\n    public:\n        parallel_for_body( const Function& _func, Index& _begin, Index& _step )\n            : my_func(_func), my_begin(_begin), my_step(_step) {}\n\n        void operator()( const tbb::blocked_range<Index>& r ) const {\n            // A set of local variables to help the compiler with vectorization of the following loop.\n            Index b = r.begin();\n            Index e = r.end();\n            Index ms = my_step;\n            Index k = my_begin + b*ms;\n\n#if __INTEL_COMPILER\n#pragma ivdep\n#if __TBB_ASSERT_ON_VECTORIZATION_FAILURE\n#pragma vector always assert\n#endif\n#endif\n            for ( Index i = b; i < e; ++i, k += ms ) {\n                my_func( k );\n            }\n        }\n    };\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_for_body_req Requirements on parallel_for body\n    Class \\c Body implementing the concept of parallel_for body must define:\n    - \\code Body::Body( const Body& ); \\endcode                 Copy constructor\n    - \\code Body::~Body(); \\endcode                             Destructor\n    - \\code void Body::operator()( Range& r ) const; \\endcode   Function call operator applying the body to range \\c r.\n**/\n\n/** \\name parallel_for\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_for_body_req \"parallel_for Body\". **/\n//@{\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over range with default partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, task_group_context& context ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range, body, __TBB_DEFAULT_PARTITIONER(), context);\n}\n\n//! Parallel iteration over range with simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with auto_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with static_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with affinity_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\nnamespace strict_ppl {\n\n//@{\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner);\n    }\n}\n\n//! Parallel iteration over a range of integers with a step provided and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a step provided and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, step, f, partitioner);\n}\n\n//! Parallel iteration over a range of integers with a default step value and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a default step value and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Implementation of parallel iteration over stepped range of integers with explicit step, task group context, and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner, tbb::task_group_context &context) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner, context);\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step, task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and affinity partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, step, f, partitioner, context);\n}\n\n\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and affinity_partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace strict_ppl\n\nusing strict_ppl::parallel_for;\n\n} // namespace tbb\n\n#if TBB_PREVIEW_SERIAL_SUBSET\n#define __TBB_NORMAL_EXECUTION\n#include \"../serial/tbb/parallel_for.h\"\n#undef __TBB_NORMAL_EXECUTION\n#endif\n\n#endif /* __TBB_parallel_for_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_for_each.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_for_each_H\n#define __TBB_parallel_for_each_H\n\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_do : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_do(const Function &_func) : my_func(_func) {}\n\n        void operator()(typename std::iterator_traits<Iterator>::reference value) const {\n            my_func(value);\n        }\n    };\n\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_for : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_for(const Function &_func) : my_func(_func) {}\n\n        void operator()(tbb::blocked_range<Iterator> range) const {\n#if __INTEL_COMPILER\n#pragma ivdep\n#endif\n            for(Iterator it = range.begin(), end = range.end(); it != end; ++it) {\n                my_func(*it);\n            }\n        }\n    };\n\n    template<typename Iterator, typename Function, typename Generic>\n    struct parallel_for_each_impl {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body);\n        }\n    };\n    template<typename Iterator, typename Function>\n    struct parallel_for_each_impl<Iterator, Function, std::random_access_iterator_tag> {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body);\n        }\n    };\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_for_each\n    **/\n//@{\n//! Calls function f for all items from [first, last) interval using user-supplied context\n/** @ingroup algorithms */\n#if __TBB_TASK_GROUP_CONTEXT\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f, context);\n}\n\n//! Calls function f for all items from rng using user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n\n//! Calls function f for all items from const rng user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Uses default context\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_for_each_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_invoke.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_invoke_H\n#define __TBB_parallel_invoke_H\n\n#include \"task.h\"\n#include \"tbb_profiling.h\"\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n    #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n#if !__TBB_TASK_GROUP_CONTEXT\n    /** Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. **/\n    struct task_group_context {\n        task_group_context(tbb::internal::string_index){}\n    };\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! @cond INTERNAL\nnamespace internal {\n    // Simple task object, executing user method\n    template<typename function>\n    class function_invoker : public task{\n    public:\n        function_invoker(const function& _function) : my_function(_function) {}\n    private:\n        const function &my_function;\n        task* execute() __TBB_override\n        {\n            my_function();\n            return NULL;\n        }\n    };\n\n    // The class spawns two or three child tasks\n    template <size_t N, typename function1, typename function2, typename function3>\n    class spawner : public task {\n    private:\n        const function1& my_func1;\n        const function2& my_func2;\n        const function3& my_func3;\n        bool is_recycled;\n\n        task* execute () __TBB_override {\n            if(is_recycled){\n                return NULL;\n            }else{\n                __TBB_ASSERT(N==2 || N==3, \"Number of arguments passed to spawner is wrong\");\n                set_ref_count(N);\n                recycle_as_safe_continuation();\n                internal::function_invoker<function2>* invoker2 = new (allocate_child()) internal::function_invoker<function2>(my_func2);\n                __TBB_ASSERT(invoker2, \"Child task allocation failed\");\n                spawn(*invoker2);\n                size_t n = N; // To prevent compiler warnings\n                if (n>2) {\n                    internal::function_invoker<function3>* invoker3 = new (allocate_child()) internal::function_invoker<function3>(my_func3);\n                    __TBB_ASSERT(invoker3, \"Child task allocation failed\");\n                    spawn(*invoker3);\n                }\n                my_func1();\n                is_recycled = true;\n                return NULL;\n            }\n        } // execute\n\n    public:\n        spawner(const function1& _func1, const function2& _func2, const function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}\n    };\n\n    // Creates and spawns child tasks\n    class parallel_invoke_helper : public empty_task {\n    public:\n        // Dummy functor class\n        class parallel_invoke_noop {\n        public:\n            void operator() () const {}\n        };\n        // Creates a helper object with user-defined number of children expected\n        parallel_invoke_helper(int number_of_children)\n        {\n            set_ref_count(number_of_children + 1);\n        }\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n        void add_children() {}\n        void add_children(tbb::task_group_context&) {}\n\n        template <typename function>\n        void add_children(function&& _func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(std::forward<function>(_func));\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        template<typename function>\n        void add_children(function&& _func, tbb::task_group_context&)\n        {\n            add_children(std::forward<function>(_func));\n        }\n\n        // Adds child(ren) task(s) and spawns them\n        template <typename function1, typename function2, typename... function>\n        void add_children(function1&& _func1, function2&& _func2, function&&... _func)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            typedef internal::spawner<2, function1, function2, parallel_invoke_noop> spawner_type;\n            spawner_type & sub_root = *new(allocate_child()) spawner_type(std::forward<function1>(_func1), std::forward<function2>(_func2), noop);\n            spawn(sub_root);\n            add_children(std::forward<function>(_func)...);\n        }\n#else\n        // Adds child task and spawns it\n        template <typename function>\n        void add_children (const function &_func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(_func);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        // Adds a task with multiple child tasks and spawns it\n        // two arguments\n        template <typename function1, typename function2>\n        void add_children (const function1& _func1, const function2& _func2)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *new(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);\n            spawn(sub_root);\n        }\n        // three arguments\n        template <typename function1, typename function2, typename function3>\n        void add_children (const function1& _func1, const function2& _func2, const function3& _func3)\n        {\n            internal::spawner<3, function1, function2, function3>& sub_root = *new(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);\n            spawn(sub_root);\n        }\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n\n        // Waits for all child tasks\n        template <typename F0>\n        void run_and_finish(const F0& f0)\n        {\n            internal::function_invoker<F0>* invoker = new (allocate_child()) internal::function_invoker<F0>(f0);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn_and_wait_for_all(*invoker);\n        }\n    };\n    // The class destroys root if exception occurred as well as in normal case\n    class parallel_invoke_cleaner: internal::no_copy {\n    public:\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context& context)\n            : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))\n#else\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context&)\n            : root(*new(task::allocate_root()) internal::parallel_invoke_helper(number_of_children))\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n        {}\n\n        ~parallel_invoke_cleaner(){\n            root.destroy(root);\n        }\n        internal::parallel_invoke_helper& root;\n    };\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n//  Determine whether the last parameter in a pack is task_group_context\n    template<typename... T> struct impl_selector; // to workaround a GCC bug\n\n    template<typename T1, typename... T> struct impl_selector<T1, T...> {\n        typedef typename impl_selector<T...>::type type;\n    };\n\n    template<typename T> struct impl_selector<T> {\n        typedef false_type type;\n    };\n    template<> struct impl_selector<task_group_context&> {\n        typedef true_type  type;\n    };\n\n    // Select task_group_context parameter from the back of a pack\n    inline task_group_context& get_context( task_group_context& tgc ) { return tgc; }\n\n    template<typename T1, typename... T>\n    task_group_context& get_context( T1&& /*ignored*/, T&&... t )\n    { return get_context( std::forward<T>(t)... ); }\n\n    // task_group_context is known to be at the back of the parameter pack\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(true_type, F0&& f0, F1&& f1, F&&... f) {\n        __TBB_STATIC_ASSERT(sizeof...(F)>0, \"Variadic parallel_invoke implementation broken?\");\n        // # of child tasks: f0, f1, and a task for each two elements of the pack except the last\n        const size_t number_of_children = 2 + sizeof...(F)/2;\n        parallel_invoke_cleaner cleaner(number_of_children, get_context(std::forward<F>(f)...));\n        parallel_invoke_helper& root = cleaner.root;\n\n        root.add_children(std::forward<F>(f)...);\n        root.add_children(std::forward<F1>(f1));\n        root.run_and_finish(std::forward<F0>(f0));\n    }\n\n    // task_group_context is not in the pack, needs to be added\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(false_type, F0&& f0, F1&& f1, F&&... f) {\n        tbb::task_group_context context(PARALLEL_INVOKE);\n        // Add context to the arguments, and redirect to the other overload\n        parallel_invoke_impl(true_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)..., context);\n    }\n#endif\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_invoke\n    **/\n//@{\n//! Executes a list of tasks in parallel and waits for all tasks to complete.\n/** @ingroup algorithms */\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n\n// parallel_invoke for two or more arguments via variadic templates\n// presence of task_group_context is defined automatically\ntemplate<typename F0, typename F1, typename... F>\nvoid parallel_invoke(F0&& f0, F1&& f1, F&&... f) {\n    typedef typename internal::impl_selector<internal::false_type, F...>::type selector_type;\n    internal::parallel_invoke_impl(selector_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)...);\n}\n\n#else\n\n// parallel_invoke with user-defined context\n// two arguments\ntemplate<typename F0, typename F1 >\nvoid parallel_invoke(const F0& f0, const F1& f1, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(2, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// three arguments\ntemplate<typename F0, typename F1, typename F2 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f3);\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f7, f6, f5);\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f8, f7, f6);\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f9, f8, f7);\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// two arguments\ntemplate<typename F0, typename F1>\nvoid parallel_invoke(const F0& f0, const F1& f1) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1>(f0, f1, context);\n}\n// three arguments\ntemplate<typename F0, typename F1, typename F2>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2>(f0, f1, f2, context);\n}\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);\n}\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);\n}\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5) {\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);\n}\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);\n}\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);\n}\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);\n}\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9)\n{\n    task_group_context context(internal::PARALLEL_INVOKE);\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);\n}\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_invoke_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_reduce.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_reduce_H\n#define __TBB_parallel_reduce_H\n\n#include <new>\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include \"partitioner.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    using namespace tbb::internal;\n\n    /** Values for reduction_context. */\n    enum {\n        root_task, left_child, right_child\n    };\n\n    /** Represented as a char, not enum, for compactness. */\n    typedef char reduction_context;\n\n    //! Task type used to combine the partial results of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_reduce: public flag_task {\n        //! Pointer to body, or NULL if the left child has not yet finished.\n        bool has_right_zombie;\n        const reduction_context my_context;\n        Body* my_body;\n        aligned_space<Body> zombie_space;\n        finish_reduce( reduction_context context_ ) :\n            has_right_zombie(false), // TODO: substitute by flag_task::child_stolen?\n            my_context(context_),\n            my_body(NULL)\n        {\n        }\n        ~finish_reduce() {\n            if( has_right_zombie )\n                zombie_space.begin()->~Body();\n        }\n        task* execute() __TBB_override {\n            if( has_right_zombie ) {\n                // Right child was stolen.\n                Body* s = zombie_space.begin();\n                my_body->join( *s );\n                // Body::join() won't be called if canceled. Defer destruction to destructor\n            }\n            if( my_context==left_child )\n                itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_, typename Partitioner>\n        friend class start_reduce;\n    };\n\n    //! allocate right task with new parent\n    void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes);\n\n    //! Task type used to split the work of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_reduce: public task {\n        typedef finish_reduce<Body> finish_type;\n        Body* my_body;\n        Range my_range;\n        typename Partitioner::task_partition_type my_partition;\n        reduction_context my_context;\n        task* execute() __TBB_override;\n        //! Update affinity info, if any\n        void note_affinity( affinity_id id ) __TBB_override {\n            my_partition.note_affinity( id );\n        }\n        template<typename Body_>\n        friend class finish_reduce;\n\npublic:\n        //! Constructor used for root task\n        start_reduce( const Range& range, Body* body, Partitioner& partitioner ) :\n            my_body(body),\n            my_range(range),\n            my_partition(partitioner),\n            my_context(root_task)\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, typename Partitioner::split_type& split_obj ) :\n            my_body(parent_.my_body),\n            my_range(parent_.my_range, split_obj),\n            my_partition(parent_.my_partition, split_obj),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            parent_.my_context = left_child;\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, const Range& r, depth_t d ) :\n            my_body(parent_.my_body),\n            my_range(r),\n            my_partition(parent_.my_partition, split()),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d ); // TODO: move into constructor of partitioner\n            parent_.my_context = left_child;\n        }\n        static void run( const Range& range, Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_reduce(range,&body,partitioner) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_REDUCE);\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range\n        void run_body( Range &r ) { (*my_body)( r ); }\n\n        //! spawn right task, serves as callback for partitioner\n        // TODO: remove code duplication from 'offer_work' methods\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, split_obj);\n            spawn(*tasks[1]);\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, r, d);\n            spawn(*tasks[1]);\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes) {\n        tasks[0] = &start_reduce_task->allocate_continuation().allocate(finish_bytes);\n        start_reduce_task->set_parent(tasks[0]);\n        tasks[0]->set_ref_count(2);\n        tasks[1] = &tasks[0]->allocate_child().allocate(start_bytes);\n    }\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_reduce<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        if( my_context==right_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            if( !itt_load_word_with_acquire(parent_ptr->my_body) ) { // TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???\n                my_body = new( parent_ptr->zombie_space.begin() ) Body(*my_body,split());\n                parent_ptr->has_right_zombie = true;\n            }\n        } else __TBB_ASSERT(my_context==root_task,NULL);// because left leaf spawns right leafs without recycling\n        my_partition.execute(*this, my_range);\n        if( my_context==left_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),NULL);\n            itt_store_word_with_release(parent_ptr->my_body, my_body );\n        }\n        return NULL;\n    }\n\n    //! Task type used to combine the partial results of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_deterministic_reduce: public task {\n        Body &my_left_body;\n        Body my_right_body;\n\n        finish_deterministic_reduce( Body &body ) :\n            my_left_body( body ),\n            my_right_body( body, split() )\n        {\n        }\n        task* execute() __TBB_override {\n            my_left_body.join( my_right_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_, typename Partitioner>\n        friend class start_deterministic_reduce;\n    };\n\n    //! Task type used to split the work of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_deterministic_reduce: public task {\n        typedef finish_deterministic_reduce<Body> finish_type;\n        Body &my_body;\n        Range my_range;\n        typename Partitioner::task_partition_type my_partition;\n        task* execute() __TBB_override;\n\n        //! Constructor used for root task\n        start_deterministic_reduce( const Range& range, Body& body, Partitioner& partitioner ) :\n            my_body( body ),\n            my_range( range ),\n            my_partition( partitioner )\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_deterministic_reduce( start_deterministic_reduce& parent_, finish_type& c, typename Partitioner::split_type& split_obj ) :\n            my_body( c.my_right_body ),\n            my_range( parent_.my_range, split_obj ),\n            my_partition( parent_.my_partition, split_obj )\n        {\n        }\n\npublic:\n        static void run( const Range& range, Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_deterministic_reduce(range,&body,partitioner) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context(PARALLEL_REDUCE);\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body,partitioner) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body,partitioner) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        void offer_work( typename Partitioner::split_type& split_obj) {\n            task* tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_deterministic_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_body);\n            new((void*)tasks[1]) start_deterministic_reduce(*this, *static_cast<finish_type*>(tasks[0]), split_obj);\n            spawn(*tasks[1]);\n        }\n\n        void run_body( Range &r ) { my_body(r); }\n    };\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_deterministic_reduce<Range,Body, Partitioner>::execute() {\n        my_partition.execute(*this, my_range);\n        return NULL;\n    }\n} // namespace internal\n//! @endcond\n} //namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_reduce;\n    using interface9::internal::start_deterministic_reduce;\n    //! Auxiliary class for parallel_reduce; for internal use only.\n    /** The adaptor class that implements \\ref parallel_reduce_body_req \"parallel_reduce Body\"\n        using given \\ref parallel_reduce_lambda_req \"anonymous function objects\".\n     **/\n    /** @ingroup algorithms */\n    template<typename Range, typename Value, typename RealBody, typename Reduction>\n    class lambda_reduce_body {\n\n//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced\n//       (might require some performance measurements)\n\n        const Value&     identity_element;\n        const RealBody&  my_real_body;\n        const Reduction& my_reduction;\n        Value            my_value;\n        lambda_reduce_body& operator= ( const lambda_reduce_body& other );\n    public:\n        lambda_reduce_body( const Value& identity, const RealBody& body, const Reduction& reduction )\n            : identity_element(identity)\n            , my_real_body(body)\n            , my_reduction(reduction)\n            , my_value(identity)\n        { }\n        lambda_reduce_body( const lambda_reduce_body& other )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.my_value)\n        { }\n        lambda_reduce_body( lambda_reduce_body& other, tbb::split )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.identity_element)\n        { }\n        void operator()(Range& range) {\n            my_value = my_real_body(range, const_cast<const Value&>(my_value));\n        }\n        void join( lambda_reduce_body& rhs ) {\n            my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));\n        }\n        Value result() const {\n            return my_value;\n        }\n    };\n\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_reduce_body_req Requirements on parallel_reduce body\n    Class \\c Body implementing the concept of parallel_reduce body must define:\n    - \\code Body::Body( Body&, split ); \\endcode        Splitting constructor.\n                                                        Must be able to run concurrently with operator() and method \\c join\n    - \\code Body::~Body(); \\endcode                     Destructor\n    - \\code void Body::operator()( Range& r ); \\endcode Function call operator applying body to range \\c r\n                                                        and accumulating the result\n    - \\code void Body::join( Body& b ); \\endcode        Join results.\n                                                        The result in \\c b should be merged into the result of \\c this\n**/\n\n/** \\page parallel_reduce_lambda_req Requirements on parallel_reduce anonymous function objects (lambda functions)\n    TO BE DOCUMENTED\n**/\n\n/** \\name parallel_reduce\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_reduce_body_req \"parallel_reduce Body\". **/\n//@{\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body ) {\n    internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );\n}\n\n//! Parallel iteration with reduction and simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const __TBB_DEFAULT_PARTITIONER>\n                          ::run(range, body, __TBB_DEFAULT_PARTITIONER() );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and simple_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run(range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Parallel iteration with deterministic reduction and default simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, simple_partitioner());\n}\n\n//! Parallel iteration with deterministic reduction and simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, partitioner);\n}\n\n//! Parallel iteration with deterministic reduction and static partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {\n    internal::start_deterministic_reduce<Range, Body, const static_partitioner>::run(range, body, partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range,Body, const simple_partitioner>::run( range, body, simple_partitioner(), context );\n}\n\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range, Body, const simple_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration with deterministic reduction, static partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range, Body, const static_partitioner>::run(range, body, partitioner, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with deterministic reduction and default simple partitioner.\n// TODO: consider making static_partitioner the default\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    return parallel_deterministic_reduce(range, identity, real_body, reduction, simple_partitioner());\n}\n\n//! Parallel iteration with deterministic reduction and simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction, const simple_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>, const simple_partitioner>\n                          ::run(range, body, partitioner);\n    return body.result();\n}\n\n//! Parallel iteration with deterministic reduction and static partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction, const static_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const static_partitioner>\n        ::run(range, body, partitioner);\n    return body.result();\n}\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, default simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    task_group_context& context ) {\n    return parallel_deterministic_reduce(range, identity, real_body, reduction, simple_partitioner(), context);\n}\n\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const simple_partitioner>\n        ::run(range, body, partitioner, context);\n    return body.result();\n}\n\n//! Parallel iteration with deterministic reduction, static partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n    const static_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range, Value, RealBody, Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range, internal::lambda_reduce_body<Range, Value, RealBody, Reduction>, const static_partitioner>\n        ::run(range, body, partitioner, context);\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_reduce_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_scan.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_scan_H\n#define __TBB_parallel_scan_H\n\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <new>\n#include \"partitioner.h\"\n\nnamespace tbb {\n\n//! Used to indicate that the initial scan is being performed.\n/** @ingroup algorithms */\nstruct pre_scan_tag {\n    static bool is_final_scan() {return false;}\n    operator bool() {return is_final_scan();}\n};\n\n//! Used to indicate that the final scan is being performed.\n/** @ingroup algorithms */\nstruct final_scan_tag {\n    static bool is_final_scan() {return true;}\n    operator bool() {return is_final_scan();}\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Performs final scan for a leaf\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class final_sum: public task {\n    public:\n        Body my_body;\n    private:\n        aligned_space<Range> my_range;\n        //! Where to put result of last subrange, or NULL if not last subrange.\n        Body* my_stuff_last;\n    public:\n        final_sum( Body& body_ ) :\n            my_body(body_,split())\n        {\n            poison_pointer(my_stuff_last);\n        }\n        ~final_sum() {\n            my_range.begin()->~Range();\n        }\n        void finish_construction( const Range& range_, Body* stuff_last_ ) {\n            new( my_range.begin() ) Range(range_);\n            my_stuff_last = stuff_last_;\n        }\n    private:\n        task* execute() __TBB_override {\n            my_body( *my_range.begin(), final_scan_tag() );\n            if( my_stuff_last )\n                my_stuff_last->assign(my_body);\n            return NULL;\n        }\n    };\n\n    //! Split work to be done in the scan.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class sum_node: public task {\n        typedef final_sum<Range,Body> final_sum_type;\n    public:\n        final_sum_type *my_incoming;\n        final_sum_type *my_body;\n        Body *my_stuff_last;\n    private:\n        final_sum_type *my_left_sum;\n        sum_node *my_left;\n        sum_node *my_right;\n        bool my_left_is_final;\n        Range my_range;\n        sum_node( const Range range_, bool left_is_final_ ) :\n            my_stuff_last(NULL),\n            my_left_sum(NULL),\n            my_left(NULL),\n            my_right(NULL),\n            my_left_is_final(left_is_final_),\n            my_range(range_)\n        {\n            // Poison fields that will be set by second pass.\n            poison_pointer(my_body);\n            poison_pointer(my_incoming);\n        }\n        task* create_child( const Range& range_, final_sum_type& f, sum_node* n, final_sum_type* incoming_, Body* stuff_last_ ) {\n            if( !n ) {\n                f.recycle_as_child_of( *this );\n                f.finish_construction( range_, stuff_last_ );\n                return &f;\n            } else {\n                n->my_body = &f;\n                n->my_incoming = incoming_;\n                n->my_stuff_last = stuff_last_;\n                return n;\n            }\n        }\n        task* execute() __TBB_override {\n            if( my_body ) {\n                if( my_incoming )\n                    my_left_sum->my_body.reverse_join( my_incoming->my_body );\n                recycle_as_continuation();\n                sum_node& c = *this;\n                task* b = c.create_child(Range(my_range,split()),*my_left_sum,my_right,my_left_sum,my_stuff_last);\n                task* a = my_left_is_final ? NULL : c.create_child(my_range,*my_body,my_left,my_incoming,NULL);\n                set_ref_count( (a!=NULL)+(b!=NULL) );\n                my_body = NULL;\n                if( a ) spawn(*b);\n                else a = b;\n                return a;\n            } else {\n                return NULL;\n            }\n        }\n        template<typename Range_,typename Body_,typename Partitioner_>\n        friend class start_scan;\n\n        template<typename Range_,typename Body_>\n        friend class finish_scan;\n    };\n\n    //! Combine partial results\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class finish_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type** const my_sum;\n        sum_node_type*& my_return_slot;\n    public:\n        final_sum_type* my_right_zombie;\n        sum_node_type& my_result;\n\n        task* execute() __TBB_override {\n            __TBB_ASSERT( my_result.ref_count()==(my_result.my_left!=NULL)+(my_result.my_right!=NULL), NULL );\n            if( my_result.my_left )\n                my_result.my_left_is_final = false;\n            if( my_right_zombie && my_sum )\n                ((*my_sum)->my_body).reverse_join(my_result.my_left_sum->my_body);\n            __TBB_ASSERT( !my_return_slot, NULL );\n            if( my_right_zombie || my_result.my_right ) {\n                my_return_slot = &my_result;\n            } else {\n                destroy( my_result );\n            }\n            if( my_right_zombie && !my_sum && !my_result.my_right ) {\n                destroy(*my_right_zombie);\n                my_right_zombie = NULL;\n            }\n            return NULL;\n        }\n\n        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :\n            my_sum(sum_),\n            my_return_slot(return_slot_),\n            my_right_zombie(NULL),\n            my_result(result_)\n        {\n            __TBB_ASSERT( !my_return_slot, NULL );\n        }\n    };\n\n    //! Initial task to split the work\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner=simple_partitioner>\n    class start_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type* my_body;\n        /** Non-null if caller is requesting total. */\n        final_sum_type** my_sum;\n        sum_node_type** my_return_slot;\n        /** Null if computing root. */\n        sum_node_type* my_parent_sum;\n        bool my_is_final;\n        bool my_is_right_child;\n        Range my_range;\n        typename Partitioner::partition_type my_partition;\n        task* execute() __TBB_override ;\n    public:\n        start_scan( sum_node_type*& return_slot_, start_scan& parent_, sum_node_type* parent_sum_ ) :\n            my_body(parent_.my_body),\n            my_sum(parent_.my_sum),\n            my_return_slot(&return_slot_),\n            my_parent_sum(parent_sum_),\n            my_is_final(parent_.my_is_final),\n            my_is_right_child(false),\n            my_range(parent_.my_range,split()),\n            my_partition(parent_.my_partition,split())\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        start_scan( sum_node_type*& return_slot_, const Range& range_, final_sum_type& body_, const Partitioner& partitioner_) :\n            my_body(&body_),\n            my_sum(NULL),\n            my_return_slot(&return_slot_),\n            my_parent_sum(NULL),\n            my_is_final(true),\n            my_is_right_child(false),\n            my_range(range_),\n            my_partition(partitioner_)\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        static void run( const Range& range_, Body& body_, const Partitioner& partitioner_ ) {\n            if( !range_.empty() ) {\n                typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;\n                internal::sum_node<Range,Body>* root = NULL;\n                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body_ );\n                start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(\n                    /*my_return_slot=*/root,\n                    range_,\n                    *temp_body,\n                    partitioner_ );\n                temp_body->my_body.reverse_join(body_);\n                task::spawn_root_and_wait( pass1 );\n                if( root ) {\n                    root->my_body = temp_body;\n                    root->my_incoming = NULL;\n                    root->my_stuff_last = &body_;\n                    task::spawn_root_and_wait( *root );\n                } else {\n                    body_.assign(temp_body->my_body);\n                    temp_body->finish_construction( range_, NULL );\n                    temp_body->destroy(*temp_body);\n                }\n            }\n        }\n    };\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_scan<Range,Body,Partitioner>::execute() {\n        typedef internal::finish_scan<Range,Body> finish_pass1_type;\n        finish_pass1_type* p = my_parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;\n        // Inspecting p->result.left_sum would ordinarily be a race condition.\n        // But we inspect it only if we are not a stolen task, in which case we\n        // know that task assigning to p->result.left_sum has completed.\n        bool treat_as_stolen = my_is_right_child && (is_stolen_task() || my_body!=p->my_result.my_left_sum);\n        if( treat_as_stolen ) {\n            // Invocation is for right child that has been really stolen or needs to be virtually stolen\n            p->my_right_zombie = my_body = new( allocate_root() ) final_sum_type(my_body->my_body);\n            my_is_final = false;\n        }\n        task* next_task = NULL;\n        if( (my_is_right_child && !treat_as_stolen) || !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {\n            if( my_is_final )\n                (my_body->my_body)( my_range, final_scan_tag() );\n            else if( my_sum )\n                (my_body->my_body)( my_range, pre_scan_tag() );\n            if( my_sum )\n                *my_sum = my_body;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        } else {\n            sum_node_type* result;\n            if( my_parent_sum )\n                result = new(allocate_additional_child_of(*my_parent_sum)) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            else\n                result = new(task::allocate_root()) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*my_return_slot,my_sum,*result);\n            // Split off right child\n            start_scan& b = *new( c.allocate_child() ) start_scan( /*my_return_slot=*/result->my_right, *this, result );\n            b.my_is_right_child = true;\n            // Left child is recycling of *this.  Must recycle this before spawning b,\n            // otherwise b might complete and decrement c.ref_count() to zero, which\n            // would cause c.execute() to run prematurely.\n            recycle_as_child_of(c);\n            c.set_ref_count(2);\n            c.spawn(b);\n            my_sum = &result->my_left_sum;\n            my_return_slot = &result->my_left;\n            my_is_right_child = false;\n            next_task = this;\n            my_parent_sum = result;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n        return next_task;\n    }\n\n    template<typename Range, typename Value, typename Scan, typename ReverseJoin>\n    class lambda_scan_body : no_assign {\n        Value               my_sum;\n        const Value&        identity_element;\n        const Scan&         my_scan;\n        const ReverseJoin&  my_reverse_join;\n    public:\n        lambda_scan_body( const Value& identity, const Scan& scan, const ReverseJoin& rev_join)\n            : my_sum(identity)\n            , identity_element(identity)\n            , my_scan(scan)\n            , my_reverse_join(rev_join) {}\n\n        lambda_scan_body( lambda_scan_body& b, split )\n            : my_sum(b.identity_element)\n            , identity_element(b.identity_element)\n            , my_scan(b.my_scan)\n            , my_reverse_join(b.my_reverse_join) {}\n\n        template<typename Tag>\n        void operator()( const Range& r, Tag tag ) {\n            my_sum = my_scan(r, my_sum, tag);\n        }\n\n        void reverse_join( lambda_scan_body& a ) {\n            my_sum = my_reverse_join(a.my_sum, my_sum);\n        }\n\n        void assign( lambda_scan_body& b ) {\n            my_sum = b.my_sum;\n        }\n\n        Value result() const {\n            return my_sum;\n        }\n    };\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_scan_body_req Requirements on parallel_scan body\n    Class \\c Body implementing the concept of parallel_scan body must define:\n    - \\code Body::Body( Body&, split ); \\endcode    Splitting constructor.\n                                                    Split \\c b so that \\c this and \\c b can accumulate separately\n    - \\code Body::~Body(); \\endcode                 Destructor\n    - \\code void Body::operator()( const Range& r, pre_scan_tag ); \\endcode\n                                                    Preprocess iterations for range \\c r\n    - \\code void Body::operator()( const Range& r, final_scan_tag ); \\endcode\n                                                    Do final processing for iterations of range \\c r\n    - \\code void Body::reverse_join( Body& a ); \\endcode\n                                                    Merge preprocessing state of \\c a into \\c this, where \\c a was\n                                                    created earlier from \\c b by b's splitting constructor\n**/\n\n/** \\name parallel_scan\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_scan_body_req \"parallel_scan Body\". **/\n//@{\n\n//! Parallel prefix with default partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body ) {\n    internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel prefix with simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel prefix with auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel prefix with default partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,__TBB_DEFAULT_PARTITIONER());\n    return body.result();\n}\n\n//! Parallel prefix with simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join, const simple_partitioner& partitioner ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,partitioner);\n    return body.result();\n}\n\n//! Parallel prefix with auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename Scan, typename ReverseJoin>\nValue parallel_scan( const Range& range, const Value& identity, const Scan& scan, const ReverseJoin& reverse_join, const auto_partitioner& partitioner ) {\n    internal::lambda_scan_body<Range, Value, Scan, ReverseJoin> body(identity, scan, reverse_join);\n    tbb::parallel_scan(range,body,partitioner);\n    return body.result();\n}\n\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_scan_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_sort.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_sort_H\n#define __TBB_parallel_sort_H\n\n#include \"parallel_for.h\"\n#include \"blocked_range.h\"\n#include \"internal/_range_iterator.h\"\n#include <algorithm>\n#include <iterator>\n#include <functional>\n#if __TBB_TASK_GROUP_CONTEXT\n    #include \"tbb_profiling.h\"\n#endif\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\nusing tbb::internal::no_assign;\n\n//! Range used in quicksort to split elements into subranges based on a value.\n/** The split operation selects a splitter and places all elements less than or equal\n    to the value in the first range and the remaining elements in the second range.\n    @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_range: private no_assign {\n\n    inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {\n        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )\n                                        : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );\n    }\n\n    inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {\n        size_t offset = range.size/8u;\n        return median_of_three(array,\n                               median_of_three(array, 0, offset, offset*2),\n                               median_of_three(array, offset*3, offset*4, offset*5),\n                               median_of_three(array, offset*6, offset*7, range.size - 1) );\n\n    }\n\n    size_t split_range( quick_sort_range& range ) {\n        using std::iter_swap;\n        RandomAccessIterator array = range.begin;\n        RandomAccessIterator key0 = range.begin;\n        size_t m = pseudo_median_of_nine(array, range);\n        if (m) iter_swap ( array, array+m );\n\n        size_t i=0;\n        size_t j=range.size;\n        // Partition interval [i+1,j-1] with key *key0.\n        for(;;) {\n            __TBB_ASSERT( i<j, NULL );\n            // Loop must terminate since array[l]==*key0.\n            do {\n                --j;\n                __TBB_ASSERT( i<=j, \"bad ordering relation?\" );\n            } while( comp( *key0, array[j] ));\n            do {\n                __TBB_ASSERT( i<=j, NULL );\n                if( i==j ) goto partition;\n                ++i;\n            } while( comp( array[i],*key0 ));\n            if( i==j ) goto partition;\n            iter_swap( array+i, array+j );\n        }\npartition:\n        // Put the partition key were it belongs\n        iter_swap( array+j, key0 );\n        // array[l..j) is less or equal to key.\n        // array(j..r) is greater or equal to key.\n        // array[j] is equal to key\n        i=j+1;\n        size_t new_range_size = range.size-i;\n        range.size = j;\n        return new_range_size;\n    }\n\npublic:\n\n    static const size_t grainsize = 500;\n    const Compare &comp;\n    size_t size;\n    RandomAccessIterator begin;\n\n    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :\n        comp(comp_), size(size_), begin(begin_) {}\n\n    bool empty() const {return size==0;}\n    bool is_divisible() const {return size>=grainsize;}\n\n    quick_sort_range( quick_sort_range& range, split )\n        : comp(range.comp)\n        , size(split_range(range))\n          // +1 accounts for the pivot element, which is at its correct place\n          // already and, therefore, is not included into subranges.\n        , begin(range.begin+range.size+1) {}\n};\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Body class used to test if elements in a range are presorted\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_pretest_body : no_assign {\n    const Compare &comp;\n\npublic:\n    quick_sort_pretest_body(const Compare &_comp) : comp(_comp) {}\n\n    void operator()( const blocked_range<RandomAccessIterator>& range ) const {\n        task &my_task = task::self();\n        RandomAccessIterator my_end = range.end();\n\n        int i = 0;\n        for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {\n            if ( i%64 == 0 && my_task.is_cancelled() ) break;\n\n            // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1\n            if ( comp( *(k), *(k-1) ) ) {\n                my_task.cancel_group_execution();\n                break;\n            }\n        }\n    }\n\n};\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Body class used to sort elements in a range that is smaller than the grainsize.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nstruct quick_sort_body {\n    void operator()( const quick_sort_range<RandomAccessIterator,Compare>& range ) const {\n        //SerialQuickSort( range.begin, range.size, range.comp );\n        std::sort( range.begin, range.begin + range.size, range.comp );\n    }\n};\n\n//! Wrapper method to initiate the sort by calling parallel_for.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context my_context(PARALLEL_SORT);\n    const int serial_cutoff = 9;\n\n    __TBB_ASSERT( begin + serial_cutoff < end, \"min_parallel_size is smaller than serial cutoff?\" );\n    RandomAccessIterator k = begin;\n    for ( ; k != begin + serial_cutoff; ++k ) {\n        if ( comp( *(k+1), *k ) ) {\n            goto do_parallel_quick_sort;\n        }\n    }\n\n    parallel_for( blocked_range<RandomAccessIterator>(k+1, end),\n                  quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),\n                  auto_partitioner(),\n                  my_context);\n\n    if (my_context.is_group_execution_cancelled())\ndo_parallel_quick_sort:\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),\n                      quick_sort_body<RandomAccessIterator,Compare>(),\n                      auto_partitioner() );\n}\n\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n/** \\page parallel_sort_iter_req Requirements on iterators for parallel_sort\n    Requirements on the iterator type \\c It and its value type \\c T for \\c parallel_sort:\n\n    - \\code void iter_swap( It a, It b ) \\endcode Swaps the values of the elements the given\n    iterators \\c a and \\c b are pointing to. \\c It should be a random access iterator.\n\n    - \\code bool Compare::operator()( const T& x, const T& y ) \\endcode True if x comes before y;\n**/\n\n/** \\name parallel_sort\n    See also requirements on \\ref parallel_sort_iter_req \"iterators for parallel_sort\". **/\n//@{\n\n//! Sorts the data in [begin,end) using the given comparator\n/** The compare function object is used for all comparisons between elements during sorting.\n    The compare object must define a bool operator() function.\n    @ingroup algorithms **/\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) {\n    const int min_parallel_size = 500;\n    if( end > begin ) {\n        if (end - begin < min_parallel_size) {\n            std::sort(begin, end, comp);\n        } else {\n            interface9::internal::parallel_quick_sort(begin, end, comp);\n        }\n    }\n}\n\n//! Sorts the data in [begin,end) with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename RandomAccessIterator>\ninline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) {\n    parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );\n}\n\n//! Sorts the data in rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in const rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(const Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in const rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(const Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in the range \\c [begin,end) with a default comparator \\c std::less<T>\n/** @ingroup algorithms **/\ntemplate<typename T>\ninline void parallel_sort( T * begin, T * end ) {\n    parallel_sort( begin, end, std::less< T >() );\n}\n//@}\n\n\n} // namespace tbb\n\n#endif\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/parallel_while.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_parallel_while\n#define __TBB_parallel_while\n\n#include \"task.h\"\n#include <new>\n\nnamespace tbb {\n\ntemplate<typename Body>\nclass parallel_while;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    template<typename Stream, typename Body> class while_task;\n\n    //! For internal use only.\n    /** Executes one iteration of a while.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_iteration_task: public task {\n        const Body& my_body;\n        typename Body::argument_type my_value;\n        task* execute() __TBB_override {\n            my_body(my_value);\n            return NULL;\n        }\n        while_iteration_task( const typename Body::argument_type& value, const Body& body ) :\n            my_body(body), my_value(value)\n        {}\n        template<typename Body_> friend class while_group_task;\n        friend class tbb::parallel_while<Body>;\n    };\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_group_task: public task {\n        static const size_t max_arg_size = 4;\n        const Body& my_body;\n        size_t size;\n        typename Body::argument_type my_arg[max_arg_size];\n        while_group_task( const Body& body ) : my_body(body), size(0) {}\n        task* execute() __TBB_override {\n            typedef while_iteration_task<Body> iteration_type;\n            __TBB_ASSERT( size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type(my_arg[k],my_body);\n                if( ++k==size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n        template<typename Stream, typename Body_> friend class while_task;\n    };\n\n    //! For internal use only.\n    /** Gets block of iterations from a stream and packages them into a while_group_task.\n        @ingroup algorithms */\n    template<typename Stream, typename Body>\n    class while_task: public task {\n        Stream& my_stream;\n        const Body& my_body;\n        empty_task& my_barrier;\n        task* execute() __TBB_override {\n            typedef while_group_task<Body> block_type;\n            block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);\n            size_t k=0;\n            while( my_stream.pop_if_present(t.my_arg[k]) ) {\n                if( ++k==block_type::max_arg_size ) {\n                    // There might be more iterations.\n                    recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.size = k;\n                return &t;\n            }\n        }\n        while_task( Stream& stream, const Body& body, empty_task& barrier ) :\n            my_stream(stream),\n            my_body(body),\n            my_barrier(barrier)\n        {}\n        friend class tbb::parallel_while<Body>;\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Parallel iteration over a stream, with optional addition of more work.\n/** The Body b has the requirement: \\n\n        \"b(v)\"                      \\n\n        \"b.argument_type\"           \\n\n    where v is an argument_type\n    @ingroup algorithms */\ntemplate<typename Body>\nclass parallel_while: internal::no_copy {\npublic:\n    //! Construct empty non-running parallel while.\n    parallel_while() : my_body(NULL), my_barrier(NULL) {}\n\n    //! Destructor cleans up data members before returning.\n    ~parallel_while() {\n        if( my_barrier ) {\n            my_barrier->destroy(*my_barrier);\n            my_barrier = NULL;\n        }\n    }\n\n    //! Type of items\n    typedef typename Body::argument_type value_type;\n\n    //! Apply body.apply to each item in the stream.\n    /** A Stream s has the requirements \\n\n         \"S::value_type\"                \\n\n         \"s.pop_if_present(value) is convertible to bool */\n    template<typename Stream>\n    void run( Stream& stream, const Body& body );\n\n    //! Add a work item while running.\n    /** Should be executed only by body.apply or a thread spawned therefrom. */\n    void add( const value_type& item );\n\nprivate:\n    const Body* my_body;\n    empty_task* my_barrier;\n};\n\ntemplate<typename Body>\ntemplate<typename Stream>\nvoid parallel_while<Body>::run( Stream& stream, const Body& body ) {\n    using namespace internal;\n    empty_task& barrier = *new( task::allocate_root() ) empty_task();\n    my_body = &body;\n    my_barrier = &barrier;\n    my_barrier->set_ref_count(2);\n    while_task<Stream,Body>& w = *new( my_barrier->allocate_child() ) while_task<Stream,Body>( stream, body, barrier );\n    my_barrier->spawn_and_wait_for_all(w);\n    my_barrier->destroy(*my_barrier);\n    my_barrier = NULL;\n    my_body = NULL;\n}\n\ntemplate<typename Body>\nvoid parallel_while<Body>::add( const value_type& item ) {\n    __TBB_ASSERT(my_barrier,\"attempt to add to parallel_while that is not running\");\n    typedef internal::while_iteration_task<Body> iteration_type;\n    iteration_type& i = *new( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);\n    task::self().spawn( i );\n}\n\n} // namespace\n\n#endif /* __TBB_parallel_while */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/partitioner.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_partitioner_H\n#define __TBB_partitioner_H\n\n#ifndef __TBB_INITIAL_CHUNKS\n// initial task divisions per thread\n#define __TBB_INITIAL_CHUNKS 2\n#endif\n#ifndef __TBB_RANGE_POOL_CAPACITY\n// maximum number of elements in range pool\n#define __TBB_RANGE_POOL_CAPACITY 8\n#endif\n#ifndef __TBB_INIT_DEPTH\n// initial value for depth of range pool\n#define __TBB_INIT_DEPTH 5\n#endif\n#ifndef __TBB_DEMAND_DEPTH_ADD\n// when imbalance is found range splits this value times more\n#define __TBB_DEMAND_DEPTH_ADD 1\n#endif\n#ifndef __TBB_STATIC_THRESHOLD\n// necessary number of clocks for the work to be distributed among all tasks\n#define __TBB_STATIC_THRESHOLD 40000\n#endif\n#if __TBB_DEFINE_MIC\n#define __TBB_NONUNIFORM_TASK_CREATION 1\n#ifdef __TBB_time_stamp\n#define __TBB_USE_MACHINE_TIME_STAMPS 1\n#define __TBB_task_duration() __TBB_STATIC_THRESHOLD\n#endif // __TBB_machine_time_stamp\n#endif // __TBB_DEFINE_MIC\n\n#include \"task.h\"\n#include \"task_arena.h\"\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"internal/_template_helpers.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (push)\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\nclass auto_partitioner;\nclass simple_partitioner;\nclass static_partitioner;\nclass affinity_partitioner;\n\nnamespace interface9 {\n    namespace internal {\n        class affinity_partition_type;\n    }\n}\n\nnamespace internal { //< @cond INTERNAL\nsize_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();\n\n//! Defines entry point for affinity partitioner into tbb run-time library.\nclass affinity_partitioner_base_v3: no_copy {\n    friend class tbb::affinity_partitioner;\n    friend class tbb::interface9::internal::affinity_partition_type;\n    //! Array that remembers affinities of tree positions to affinity_id.\n    /** NULL if my_size==0. */\n    affinity_id* my_array;\n    //! Number of elements in my_array.\n    size_t my_size;\n    //! Zeros the fields.\n    affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}\n    //! Deallocates my_array.\n    ~affinity_partitioner_base_v3() {resize(0);}\n    //! Resize my_array.\n    /** Retains values if resulting size is the same. */\n    void __TBB_EXPORTED_METHOD resize( unsigned factor );\n};\n\n//! Provides backward-compatible methods for partition objects without affinity.\nclass partition_type_base {\npublic:\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    task* continue_after_execute_range() {return NULL;}\n    bool decide_whether_to_delay() {return false;}\n    void spawn_or_delay( bool, task& b ) {\n        task::spawn(b);\n    }\n};\n\ntemplate<typename Range, typename Body, typename Partitioner> class start_scan;\n\n} //< namespace internal @endcond\n\nnamespace serial {\nnamespace interface9 {\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\n}\n}\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal;\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\ntemplate<typename Range, typename Body, typename Partitioner> class start_reduce;\ntemplate<typename Range, typename Body, typename Partitioner> class start_deterministic_reduce;\n\n//! Join task node that contains shared flag for stealing feedback\nclass flag_task: public task {\npublic:\n    tbb::atomic<bool> my_child_stolen;\n    flag_task() { my_child_stolen = false; }\n    task* execute() __TBB_override { return NULL; }\n    static void mark_task_stolen(task &t) {\n        tbb::atomic<bool> &flag = static_cast<flag_task*>(t.parent())->my_child_stolen;\n#if TBB_USE_THREADING_TOOLS\n        // Threading tools respect lock prefix but report false-positive data-race via plain store\n        flag.fetch_and_store<release>(true);\n#else\n        flag = true;\n#endif //TBB_USE_THREADING_TOOLS\n    }\n    static bool is_peer_stolen(task &t) {\n        return static_cast<flag_task*>(t.parent())->my_child_stolen;\n    }\n};\n\n//! Depth is a relative depth of recursive division inside a range pool. Relative depth allows\n//! infinite absolute depth of the recursion for heavily unbalanced workloads with range represented\n//! by a number that cannot fit into machine word.\ntypedef unsigned char depth_t;\n\n//! Range pool stores ranges of type T in a circular buffer with MaxCapacity\ntemplate <typename T, depth_t MaxCapacity>\nclass range_vector {\n    depth_t my_head;\n    depth_t my_tail;\n    depth_t my_size;\n    depth_t my_depth[MaxCapacity]; // relative depths of stored ranges\n    tbb::aligned_space<T, MaxCapacity> my_pool;\n\npublic:\n    //! initialize via first range in pool\n    range_vector(const T& elem) : my_head(0), my_tail(0), my_size(1) {\n        my_depth[0] = 0;\n        new( static_cast<void *>(my_pool.begin()) ) T(elem);//TODO: std::move?\n    }\n    ~range_vector() {\n        while( !empty() ) pop_back();\n    }\n    bool empty() const { return my_size == 0; }\n    depth_t size() const { return my_size; }\n    //! Populates range pool via ranges up to max depth or while divisible\n    //! max_depth starts from 0, e.g. value 2 makes 3 ranges in the pool up to two 1/4 pieces\n    void split_to_fill(depth_t max_depth) {\n        while( my_size < MaxCapacity && is_divisible(max_depth) ) {\n            depth_t prev = my_head;\n            my_head = (my_head + 1) % MaxCapacity;\n            new(my_pool.begin()+my_head) T(my_pool.begin()[prev]); // copy TODO: std::move?\n            my_pool.begin()[prev].~T(); // instead of assignment\n            new(my_pool.begin()+prev) T(my_pool.begin()[my_head], split()); // do 'inverse' split\n            my_depth[my_head] = ++my_depth[prev];\n            my_size++;\n        }\n    }\n    void pop_back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_back() with empty size\");\n        my_pool.begin()[my_head].~T();\n        my_size--;\n        my_head = (my_head + MaxCapacity - 1) % MaxCapacity;\n    }\n    void pop_front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_front() with empty size\");\n        my_pool.begin()[my_tail].~T();\n        my_size--;\n        my_tail = (my_tail + 1) % MaxCapacity;\n    }\n    T& back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back() with empty size\");\n        return my_pool.begin()[my_head];\n    }\n    T& front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front() with empty size\");\n        return my_pool.begin()[my_tail];\n    }\n    //! similarly to front(), returns depth of the first range in the pool\n    depth_t front_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front_depth() with empty size\");\n        return my_depth[my_tail];\n    }\n    depth_t back_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back_depth() with empty size\");\n        return my_depth[my_head];\n    }\n    bool is_divisible(depth_t max_depth) {\n        return back_depth() < max_depth && back().is_divisible();\n    }\n};\n\n//! Provides default methods for partition objects and common algorithm blocks.\ntemplate <typename Partition>\nstruct partition_type_base {\n    typedef split split_type;\n    // decision makers\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    bool check_being_stolen(task &) { return false; } // part of old should_execute_range()\n    bool check_for_demand(task &) { return false; }\n    bool is_divisible() { return true; } // part of old should_execute_range()\n    depth_t max_depth() { return 0; }\n    void align_depth(depth_t) { }\n    template <typename Range> split_type get_split() { return split(); }\n    Partition& self() { return *static_cast<Partition*>(this); } // CRTP helper\n\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        start.run_body( range ); // simple partitioner goes always here\n    }\n\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        // The algorithm in a few words ([]-denotes calls to decision methods of partitioner):\n        // [If this task is stolen, adjust depth and divisions if necessary, set flag].\n        // If range is divisible {\n        //    Spread the work while [initial divisions left];\n        //    Create trap task [if necessary];\n        // }\n        // If not divisible or [max depth is reached], execute, else do the range pool part\n        if ( range.is_divisible() ) {\n            if ( self().is_divisible() ) {\n                do { // split until is divisible\n                    typename Partition::split_type split_obj = self().template get_split<Range>();\n                    start.offer_work( split_obj );\n                } while ( range.is_divisible() && self().is_divisible() );\n            }\n        }\n        self().work_balance(start, range);\n    }\n};\n\n//! Class determines whether template parameter has static boolean constant\n//! 'is_splittable_in_proportion' initialized with value of 'true' or not.\n/** If template parameter has such field that has been initialized with non-zero\n*  value then class field will be set to 'true', otherwise - 'false'\n*/\ntemplate <typename Range>\nclass is_splittable_in_proportion {\nprivate:\n    typedef char yes[1];\n    typedef char no[2];\n\n    template <typename range_type> static yes& decide(typename enable_if<range_type::is_splittable_in_proportion>::type *);\n    template <typename range_type> static no& decide(...);\npublic:\n    // equals to 'true' if and only if static const variable 'is_splittable_in_proportion' of template parameter\n    // initialized with the value of 'true'\n    static const bool value = (sizeof(decide<Range>(0)) == sizeof(yes));\n};\n\n//! Provides default splitting strategy for partition objects.\ntemplate <typename Partition>\nstruct adaptive_mode : partition_type_base<Partition> {\n    typedef Partition my_partition;\n    size_t my_divisor;\n    // For affinity_partitioner, my_divisor indicates the number of affinity array indices the task reserves.\n    // A task which has only one index must produce the right split without reserved index in order to avoid\n    // it to be overwritten in note_affinity() of the created (right) task.\n    // I.e. a task created deeper than the affinity array can remember must not save its affinity (LIFO order)\n    static const unsigned factor = 1;\n    adaptive_mode() : my_divisor(tbb::internal::get_initial_auto_partitioner_divisor() / 4 * my_partition::factor) {}\n    adaptive_mode(adaptive_mode &src, split) : my_divisor(do_split(src, split())) {}\n    /*! Override do_split methods in order to specify splitting strategy */\n    size_t do_split(adaptive_mode &src, split) {\n        return src.my_divisor /= 2u;\n    }\n};\n\n//! Provides proportional splitting strategy for partition objects\ntemplate <typename Partition>\nstruct proportional_mode : adaptive_mode<Partition> {\n    typedef Partition my_partition;\n    using partition_type_base<Partition>::self; // CRTP helper to get access to derived classes\n\n    proportional_mode() : adaptive_mode<Partition>() {}\n    proportional_mode(proportional_mode &src, split) : adaptive_mode<Partition>(src, split()) {}\n    proportional_mode(proportional_mode &src, const proportional_split& split_obj) { self().my_divisor = do_split(src, split_obj); }\n    size_t do_split(proportional_mode &src, const proportional_split& split_obj) {\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        size_t portion = size_t(float(src.my_divisor) * float(split_obj.right())\n                                / float(split_obj.left() + split_obj.right()) + 0.5f);\n#else\n        size_t portion = split_obj.right() * my_partition::factor;\n#endif\n        portion = (portion + my_partition::factor/2) & (0ul - my_partition::factor);\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        /** Corner case handling */\n        if (!portion)\n            portion = my_partition::factor;\n        else if (portion == src.my_divisor)\n            portion = src.my_divisor - my_partition::factor;\n#endif\n        src.my_divisor -= portion;\n        return portion;\n    }\n    bool is_divisible() { // part of old should_execute_range()\n        return self().my_divisor > my_partition::factor;\n    }\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n    template <typename Range>\n    proportional_split get_split() {\n        if (is_splittable_in_proportion<Range>::value) {\n            size_t size = self().my_divisor / my_partition::factor;\n#if __TBB_NONUNIFORM_TASK_CREATION\n            size_t right = (size + 2) / 3;\n#else\n            size_t right = size / 2;\n#endif\n            size_t left = size - right;\n            return proportional_split(left, right);\n        } else {\n            return proportional_split(1, 1);\n        }\n    }\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n};\n\nstatic size_t get_initial_partition_head() {\n    int current_index = tbb::this_task_arena::current_thread_index();\n    if (current_index == tbb::task_arena::not_initialized)\n        current_index = 0;\n    return size_t(current_index);\n}\n\n//! Provides default linear indexing of partitioner's sequence\ntemplate <typename Partition>\nstruct linear_affinity_mode : proportional_mode<Partition> {\n    size_t my_head;\n    size_t my_max_affinity;\n    using proportional_mode<Partition>::self;\n    linear_affinity_mode() : proportional_mode<Partition>(), my_head(get_initial_partition_head()),\n                             my_max_affinity(self().my_divisor) {}\n    linear_affinity_mode(linear_affinity_mode &src, split) : proportional_mode<Partition>(src, split())\n        , my_head((src.my_head + src.my_divisor) % src.my_max_affinity), my_max_affinity(src.my_max_affinity) {}\n    linear_affinity_mode(linear_affinity_mode &src, const proportional_split& split_obj) : proportional_mode<Partition>(src, split_obj)\n        , my_head((src.my_head + src.my_divisor) % src.my_max_affinity), my_max_affinity(src.my_max_affinity) {}\n    void set_affinity( task &t ) {\n        if( self().my_divisor )\n            t.set_affinity( affinity_id(my_head) + 1 );\n    }\n};\n\n/*! Determine work-balance phase implementing splitting & stealing actions */\ntemplate<class Mode>\nstruct dynamic_grainsize_mode : Mode {\n    using Mode::self;\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n    tbb::internal::machine_tsc_t my_dst_tsc;\n#endif\n    enum {\n        begin = 0,\n        run,\n        pass\n    } my_delay;\n    depth_t my_max_depth;\n    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;\n    dynamic_grainsize_mode(): Mode()\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(__TBB_INIT_DEPTH) {}\n    dynamic_grainsize_mode(dynamic_grainsize_mode& p, split)\n        : Mode(p, split())\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(pass)\n        , my_max_depth(p.my_max_depth) {}\n    dynamic_grainsize_mode(dynamic_grainsize_mode& p, const proportional_split& split_obj)\n        : Mode(p, split_obj)\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(p.my_max_depth) {}\n    bool check_being_stolen( task &t) { // part of old should_execute_range()\n        if( !(self().my_divisor / Mode::my_partition::factor) ) { // if not from the top P tasks of binary tree\n            self().my_divisor = 1; // TODO: replace by on-stack flag (partition_state's member)?\n            if( t.is_stolen_task() && t.parent()->ref_count() >= 2 ) { // runs concurrently with the left task\n#if __TBB_USE_OPTIONAL_RTTI\n                // RTTI is available, check whether the cast is valid\n                __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);\n                // correctness of the cast relies on avoiding the root task for which:\n                // - initial value of my_divisor != 0 (protected by separate assertion)\n                // - is_stolen_task() always returns false for the root task.\n#endif\n                flag_task::mark_task_stolen(t);\n                if( !my_max_depth ) my_max_depth++;\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        }\n        return false;\n    }\n    depth_t max_depth() { return my_max_depth; }\n    void align_depth(depth_t base) {\n        __TBB_ASSERT(base <= my_max_depth, 0);\n        my_max_depth -= base;\n    }\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        if( !range.is_divisible() || !self().max_depth() ) {\n            start.run_body( range ); // simple partitioner goes always here\n        }\n        else { // do range pool\n            internal::range_vector<Range, range_pool_size> range_pool(range);\n            do {\n                range_pool.split_to_fill(self().max_depth()); // fill range pool\n                if( self().check_for_demand( start ) ) {\n                    if( range_pool.size() > 1 ) {\n                        start.offer_work( range_pool.front(), range_pool.front_depth() );\n                        range_pool.pop_front();\n                        continue;\n                    }\n                    if( range_pool.is_divisible(self().max_depth()) ) // was not enough depth to fork a task\n                        continue; // note: next split_to_fill() should split range at least once\n                }\n                start.run_body( range_pool.back() );\n                range_pool.pop_back();\n            } while( !range_pool.empty() && !start.is_cancelled() );\n        }\n    }\n    bool check_for_demand( task &t ) {\n        if( pass == my_delay ) {\n            if( self().my_divisor > 1 ) // produce affinitized tasks while they have slot in array\n                return true; // do not do my_max_depth++ here, but be sure range_pool is splittable once more\n            else if( self().my_divisor && my_max_depth ) { // make balancing task\n                self().my_divisor = 0; // once for each task; depth will be decreased in align_depth()\n                return true;\n            }\n            else if( flag_task::is_peer_stolen(t) ) {\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        } else if( begin == my_delay ) {\n#ifndef __TBB_USE_MACHINE_TIME_STAMPS\n            my_delay = pass;\n#else\n            my_dst_tsc = __TBB_time_stamp() + __TBB_task_duration();\n            my_delay = run;\n        } else if( run == my_delay ) {\n            if( __TBB_time_stamp() < my_dst_tsc ) {\n                __TBB_ASSERT(my_max_depth > 0, NULL);\n                 my_max_depth--; // increase granularity since tasks seem having too small work\n                return false;\n            }\n            my_delay = pass;\n            return true;\n#endif // __TBB_USE_MACHINE_TIME_STAMPS\n        }\n        return false;\n    }\n};\n\nclass auto_partition_type: public dynamic_grainsize_mode<adaptive_mode<auto_partition_type> > {\npublic:\n    auto_partition_type( const auto_partitioner& )\n        : dynamic_grainsize_mode<adaptive_mode<auto_partition_type> >() {\n        my_divisor *= __TBB_INITIAL_CHUNKS;\n    }\n    auto_partition_type( auto_partition_type& src, split)\n        : dynamic_grainsize_mode<adaptive_mode<auto_partition_type> >(src, split()) {}\n    bool is_divisible() { // part of old should_execute_range()\n        if( my_divisor > 1 ) return true;\n        if( my_divisor && my_max_depth ) { // can split the task. TODO: on-stack flag instead\n            // keep same fragmentation while splitting for the local task pool\n            my_max_depth--;\n            my_divisor = 0; // decrease max_depth once per task\n            return true;\n        } else return false;\n    }\n    bool check_for_demand(task &t) {\n        if( flag_task::is_peer_stolen(t) ) {\n            my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n            return true;\n        } else return false;\n    }\n};\n\nclass simple_partition_type: public partition_type_base<simple_partition_type> {\npublic:\n    simple_partition_type( const simple_partitioner& ) {}\n    simple_partition_type( const simple_partition_type&, split ) {}\n    //! simplified algorithm\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        split_type split_obj = split(); // start.offer_work accepts split_type as reference\n        while( range.is_divisible() )\n            start.offer_work( split_obj );\n        start.run_body( range );\n    }\n};\n\nclass static_partition_type : public linear_affinity_mode<static_partition_type> {\npublic:\n    typedef proportional_split split_type;\n    static_partition_type( const static_partitioner& )\n        : linear_affinity_mode<static_partition_type>() {}\n    static_partition_type( static_partition_type& p, split )\n        : linear_affinity_mode<static_partition_type>(p, split()) {}\n    static_partition_type( static_partition_type& p, const proportional_split& split_obj )\n        : linear_affinity_mode<static_partition_type>(p, split_obj) {}\n};\n\nclass affinity_partition_type : public dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> > {\n    static const unsigned factor_power = 4; // TODO: get a unified formula based on number of computing units\n    tbb::internal::affinity_id* my_array;\npublic:\n    static const unsigned factor = 1 << factor_power; // number of slots in affinity array per task\n    typedef proportional_split split_type;\n    affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap )\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >() {\n        __TBB_ASSERT( (factor&(factor-1))==0, \"factor must be power of two\" );\n        ap.resize(factor);\n        my_array = ap.my_array;\n        my_max_depth = factor_power + 1;\n        __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );\n    }\n    affinity_partition_type(affinity_partition_type& p, split)\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >(p, split())\n        , my_array(p.my_array) {}\n    affinity_partition_type(affinity_partition_type& p, const proportional_split& split_obj)\n        : dynamic_grainsize_mode<linear_affinity_mode<affinity_partition_type> >(p, split_obj)\n        , my_array(p.my_array) {}\n    void set_affinity( task &t ) {\n        if( my_divisor ) {\n            if( !my_array[my_head] )\n                // TODO: consider new ideas with my_array for both affinity and static partitioner's, then code reuse\n                t.set_affinity( affinity_id(my_head / factor + 1) );\n            else\n                t.set_affinity( my_array[my_head] );\n        }\n    }\n    void note_affinity( task::affinity_id id ) {\n        if( my_divisor )\n            my_array[my_head] = id;\n    }\n};\n\n//! Backward-compatible partition for auto and affinity partition objects.\nclass old_auto_partition_type: public tbb::internal::partition_type_base {\n    size_t num_chunks;\n    static const size_t VICTIM_CHUNKS = 4;\npublic:\n    bool should_execute_range(const task &t) {\n        if( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )\n            num_chunks = VICTIM_CHUNKS;\n        return num_chunks==1;\n    }\n    old_auto_partition_type( const auto_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( const affinity_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( old_auto_partition_type& pt, split ) {\n        num_chunks = pt.num_chunks = (pt.num_chunks+1u) / 2u;\n    }\n};\n\n} // namespace interfaceX::internal\n//! @endcond\n} // namespace interfaceX\n\n//! A simple partitioner\n/** Divides the range until the range is not divisible.\n    @ingroup algorithms */\nclass simple_partitioner {\npublic:\n    simple_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_deterministic_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    class partition_type: public internal::partition_type_base {\n    public:\n        bool should_execute_range(const task& ) {return false;}\n        partition_type( const simple_partitioner& ) {}\n        partition_type( const partition_type&, split ) {}\n    };\n    // new implementation just extends existing interface\n    typedef interface9::internal::simple_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::simple_partition_type::split_type split_type;\n};\n\n//! An auto partitioner\n/** The range is initial divided into several large chunks.\n    Chunks are further subdivided into smaller pieces if demand detected and they are divisible.\n    @ingroup algorithms */\nclass auto_partitioner {\npublic:\n    auto_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::auto_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::auto_partition_type::split_type split_type;\n};\n\n//! A static partitioner\nclass static_partitioner {\npublic:\n    static_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_deterministic_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::static_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::static_partition_type::split_type split_type;\n};\n\n//! An affinity partitioner\nclass affinity_partitioner: internal::affinity_partitioner_base_v3 {\npublic:\n    affinity_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility - for parallel_scan only\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::affinity_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::affinity_partition_type::split_type split_type;\n};\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4244 is back\n#undef __TBB_INITIAL_CHUNKS\n#undef __TBB_RANGE_POOL_CAPACITY\n#undef __TBB_INIT_DEPTH\n#endif /* __TBB_partitioner_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/pipeline.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_pipeline_H\n#define __TBB_pipeline_H\n\n#include \"atomic.h\"\n#include \"task.h\"\n#include \"tbb_allocator.h\"\n#include <cstddef>\n\n#if __TBB_CPP11_TYPE_PROPERTIES_PRESENT || __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\n#include <type_traits>\n#endif\n\nnamespace tbb {\n\nclass pipeline;\nclass filter;\n\n//! @cond INTERNAL\nnamespace internal {\n\n// The argument for PIPELINE_VERSION should be an integer between 2 and 9\n#define __TBB_PIPELINE_VERSION(x) ((unsigned char)(x-2)<<1)\n\ntypedef unsigned long Token;\ntypedef long tokendiff_t;\nclass stage_task;\nclass input_buffer;\nclass pipeline_root_task;\nclass pipeline_cleaner;\n\n} // namespace internal\n\nnamespace interface6 {\n    template<typename T, typename U> class filter_t;\n\n    namespace internal {\n        class pipeline_proxy;\n    }\n}\n\n//! @endcond\n\n//! A stage in a pipeline.\n/** @ingroup algorithms */\nclass filter: internal::no_copy {\nprivate:\n    //! Value used to mark \"not in pipeline\"\n    static filter* not_in_pipeline() {return reinterpret_cast<filter*>(intptr_t(-1));}\nprotected:\n    //! The lowest bit 0 is for parallel vs. serial\n    static const unsigned char filter_is_serial = 0x1;\n\n    //! 4th bit distinguishes ordered vs unordered filters.\n    /** The bit was not set for parallel filters in TBB 2.1 and earlier,\n        but is_ordered() function always treats parallel filters as out of order. */\n    static const unsigned char filter_is_out_of_order = 0x1<<4;\n\n    //! 5th bit distinguishes thread-bound and regular filters.\n    static const unsigned char filter_is_bound = 0x1<<5;\n\n    //! 6th bit marks input filters emitting small objects\n    static const unsigned char filter_may_emit_null = 0x1<<6;\n\n    //! 7th bit defines exception propagation mode expected by the application.\n    static const unsigned char exact_exception_propagation =\n#if TBB_USE_CAPTURED_EXCEPTION\n            0x0;\n#else\n            0x1<<7;\n#endif /* TBB_USE_CAPTURED_EXCEPTION */\n\n    static const unsigned char current_version = __TBB_PIPELINE_VERSION(5);\n    static const unsigned char version_mask = 0x7<<1; // bits 1-3 are for version\npublic:\n    enum mode {\n        //! processes multiple items in parallel and in no particular order\n        parallel = current_version | filter_is_out_of_order,\n        //! processes items one at a time; all such filters process items in the same order\n        serial_in_order = current_version | filter_is_serial,\n        //! processes items one at a time and in no particular order\n        serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,\n        //! @deprecated use serial_in_order instead\n        serial = serial_in_order\n    };\nprotected:\n    explicit filter( bool is_serial_ ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    explicit filter( mode filter_mode ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    // signal end-of-input for concrete_filters\n    void __TBB_EXPORTED_METHOD set_end_of_input();\n\npublic:\n    //! True if filter is serial.\n    bool is_serial() const {\n        return bool( my_filter_mode & filter_is_serial );\n    }\n\n    //! True if filter must receive stream in order.\n    bool is_ordered() const {\n        return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;\n    }\n\n    //! True if filter is thread-bound.\n    bool is_bound() const {\n        return ( my_filter_mode & filter_is_bound )==filter_is_bound;\n    }\n\n    //! true if an input filter can emit null\n    bool object_may_be_null() {\n        return ( my_filter_mode & filter_may_emit_null ) == filter_may_emit_null;\n    }\n\n    //! Operate on an item from the input stream, and return item for output stream.\n    /** Returns NULL if filter is a sink. */\n    virtual void* operator()( void* item ) = 0;\n\n    //! Destroy filter.\n    /** If the filter was added to a pipeline, the pipeline must be destroyed first. */\n    virtual __TBB_EXPORTED_METHOD ~filter();\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Destroys item if pipeline was cancelled.\n    /** Required to prevent memory leaks.\n        Note it can be called concurrently even for serial filters.*/\n    virtual void finalize( void* /*item*/ ) {};\n#endif\n\nprivate:\n    //! Pointer to next filter in the pipeline.\n    filter* next_filter_in_pipeline;\n\n    //! has the filter not yet processed all the tokens it will ever see?\n    //  (pipeline has not yet reached end_of_input or this filter has not yet\n    //  seen the last token produced by input_filter)\n    bool has_more_work();\n\n    //! Buffer for incoming tokens, or NULL if not required.\n    /** The buffer is required if the filter is serial or follows a thread-bound one. */\n    internal::input_buffer* my_input_buffer;\n\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class pipeline;\n    friend class thread_bound_filter;\n\n    //! Storage for filter mode and dynamically checked implementation version.\n    const unsigned char my_filter_mode;\n\n    //! Pointer to previous filter in the pipeline.\n    filter* prev_filter_in_pipeline;\n\n    //! Pointer to the pipeline.\n    pipeline* my_pipeline;\n\n    //! Pointer to the next \"segment\" of filters, or NULL if not required.\n    /** In each segment, the first filter is not thread-bound but follows a thread-bound one. */\n    filter* next_segment;\n};\n\n//! A stage in a pipeline served by a user thread.\n/** @ingroup algorithms */\nclass thread_bound_filter: public filter {\npublic:\n    enum result_type {\n        // item was processed\n        success,\n        // item is currently not available\n        item_not_available,\n        // there are no more items to process\n        end_of_stream\n    };\nprotected:\n    explicit thread_bound_filter(mode filter_mode):\n         filter(static_cast<mode>(filter_mode | filter::filter_is_bound))\n    {\n        __TBB_ASSERT(filter_mode & filter::filter_is_serial, \"thread-bound filters must be serial\");\n    }\npublic:\n    //! If a data item is available, invoke operator() on that item.\n    /** This interface is non-blocking.\n        Returns 'success' if an item was processed.\n        Returns 'item_not_available' if no item can be processed now\n        but more may arrive in the future, or if token limit is reached.\n        Returns 'end_of_stream' if there are no more items to process. */\n    result_type __TBB_EXPORTED_METHOD try_process_item();\n\n    //! Wait until a data item becomes available, and invoke operator() on that item.\n    /** This interface is blocking.\n        Returns 'success' if an item was processed.\n        Returns 'end_of_stream' if there are no more items to process.\n        Never returns 'item_not_available', as it blocks until another return condition applies. */\n    result_type __TBB_EXPORTED_METHOD process_item();\n\nprivate:\n    //! Internal routine for item processing\n    result_type internal_process_item(bool is_blocking);\n};\n\n//! A processing pipeline that applies filters to items.\n/** @ingroup algorithms */\nclass pipeline {\npublic:\n    //! Construct empty pipeline.\n    __TBB_EXPORTED_METHOD pipeline();\n\n    /** Though the current implementation declares the destructor virtual, do not rely on this\n        detail.  The virtualness is deprecated and may disappear in future versions of TBB. */\n    virtual __TBB_EXPORTED_METHOD ~pipeline();\n\n    //! Add filter to end of pipeline.\n    void __TBB_EXPORTED_METHOD add_filter( filter& filter_ );\n\n    //! Run the pipeline to completion.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Run the pipeline to completion with user-supplied context.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );\n#endif\n\n    //! Remove all filters from the pipeline.\n    void __TBB_EXPORTED_METHOD clear();\n\nprivate:\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class filter;\n    friend class thread_bound_filter;\n    friend class internal::pipeline_cleaner;\n    friend class tbb::interface6::internal::pipeline_proxy;\n\n    //! Pointer to first filter in the pipeline.\n    filter* filter_list;\n\n    //! Pointer to location where address of next filter to be added should be stored.\n    filter* filter_end;\n\n    //! task who's reference count is used to determine when all stages are done.\n    task* end_counter;\n\n    //! Number of idle tokens waiting for input stage.\n    atomic<internal::Token> input_tokens;\n\n    //! Global counter of tokens\n    atomic<internal::Token> token_counter;\n\n    //! False until fetch_input returns NULL.\n    bool end_of_input;\n\n    //! True if the pipeline contains a thread-bound filter; false otherwise.\n    bool has_thread_bound_filters;\n\n    //! Remove filter from pipeline.\n    void remove_filter( filter& filter_ );\n\n    //! Not used, but retained to satisfy old export files.\n    void __TBB_EXPORTED_METHOD inject_token( task& self );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Does clean up if pipeline is cancelled or exception occurred\n    void clear_filters();\n#endif\n};\n\n//------------------------------------------------------------------------\n// Support for lambda-friendly parallel_pipeline interface\n//------------------------------------------------------------------------\n\nnamespace interface6 {\n\nnamespace internal {\n    template<typename T, typename U, typename Body> class concrete_filter;\n}\n\n//! input_filter control to signal end-of-input for parallel_pipeline\nclass flow_control {\n    bool is_pipeline_stopped;\n    flow_control() { is_pipeline_stopped = false; }\n    template<typename T, typename U, typename Body> friend class internal::concrete_filter;\npublic:\n    void stop() { is_pipeline_stopped = true; }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate<typename T> struct tbb_large_object {enum { value = sizeof(T) > sizeof(void *) }; };\n\n// Obtain type properties in one or another way\n#if   __TBB_CPP11_TYPE_PROPERTIES_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::is_trivially_copyable<T>::value }; };\n#elif __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; };\n#else\n// Explicitly list the types we wish to be placed as-is in the pipeline input_buffers.\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = false }; };\ntemplate<typename T> struct tbb_trivially_copyable <T*> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <unsigned short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <float> { enum { value = !tbb_large_object<float>::value }; };\ntemplate<> struct tbb_trivially_copyable <double> { enum { value = !tbb_large_object<double>::value }; };\n#endif // Obtaining type properties\n\ntemplate<typename T> struct is_large_object {enum { value = tbb_large_object<T>::value || !tbb_trivially_copyable<T>::value }; };\n\ntemplate<typename T, bool> class token_helper;\n\n// large object helper (uses tbb_allocator)\ntemplate<typename T>\nclass token_helper<T, true> {\n    public:\n    typedef typename tbb::tbb_allocator<T> allocator;\n    typedef T* pointer;\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        pointer output_t = allocator().allocate(1);\n        return new (output_t) T(source);\n    }\n    static value_type & token(pointer & t) { return *t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *) ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token(pointer token) {\n        allocator().destroy(token);\n        allocator().deallocate(token,1);\n    }\n};\n\n// pointer specialization\ntemplate<typename T>\nclass token_helper<T*, false > {\n    public:\n    typedef T* pointer;\n    typedef T* value_type;\n    static pointer create_token(const value_type & source) { return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *)ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token( pointer /*token*/) {}\n};\n\n// small object specialization (converts void* to the correct type, passes objects directly.)\ntemplate<typename T>\nclass token_helper<T, false> {\n    typedef union {\n        T actual_value;\n        void * void_overlay;\n    } type_to_void_ptr_map;\n    public:\n    typedef T pointer;  // not really a pointer in this case.\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = NULL;\n        mymap.actual_value = ref;\n        return mymap.void_overlay;\n    }\n    static pointer cast_from_void_ptr(void * ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = ref;\n        return mymap.actual_value;\n    }\n    static void destroy_token( pointer /*token*/) {}\n};\n\ntemplate<typename T, typename U, typename Body>\nclass concrete_filter: public tbb::filter {\n    const Body& my_body;\n    typedef token_helper<T,is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n    typedef token_helper<U,is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    void* operator()(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));\n        t_helper::destroy_token(temp_input);\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\n    void finalize(void * input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n// input\ntemplate<typename U, typename Body>\nclass concrete_filter<void,U,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<U, is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    void* operator()(void*) __TBB_override {\n        flow_control control;\n        u_pointer output_u = u_helper::create_token(my_body(control));\n        if(control.is_pipeline_stopped) {\n            u_helper::destroy_token(output_u);\n            set_end_of_input();\n            return NULL;\n        }\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) :\n        filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),\n        my_body(body)\n    {}\n};\n\ntemplate<typename T, typename Body>\nclass concrete_filter<T,void,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<T, is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n\n    void* operator()(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        my_body(t_helper::token(temp_input));\n        t_helper::destroy_token(temp_input);\n        return NULL;\n    }\n    void finalize(void* input) __TBB_override {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\ntemplate<typename Body>\nclass concrete_filter<void,void,Body>: public filter {\n    const Body& my_body;\n\n    /** Override privately because it is always called virtually */\n    void* operator()(void*) __TBB_override {\n        flow_control control;\n        my_body(control);\n        void* output = control.is_pipeline_stopped ? NULL : (void*)(intptr_t)-1;\n        return output;\n    }\npublic:\n    concrete_filter(filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n//! The class that represents an object of the pipeline for parallel_pipeline().\n/** It primarily serves as RAII class that deletes heap-allocated filter instances. */\nclass pipeline_proxy {\n    tbb::pipeline my_pipe;\npublic:\n    pipeline_proxy( const filter_t<void,void>& filter_chain );\n    ~pipeline_proxy() {\n        while( filter* f = my_pipe.filter_list )\n            delete f; // filter destructor removes it from the pipeline\n    }\n    tbb::pipeline* operator->() { return &my_pipe; }\n};\n\n//! Abstract base class that represents a node in a parse tree underlying a filter_t.\n/** These nodes are always heap-allocated and can be shared by filter_t objects. */\nclass filter_node: tbb::internal::no_copy {\n    /** Count must be atomic because it is hidden state for user, but might be shared by threads. */\n    tbb::atomic<intptr_t> ref_count;\nprotected:\n    filter_node() {\n        ref_count = 0;\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        ++(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\npublic:\n    //! Add concrete_filter to pipeline\n    virtual void add_to( pipeline& ) = 0;\n    //! Increment reference count\n    void add_ref() {++ref_count;}\n    //! Decrement reference count and delete if it becomes zero.\n    void remove_ref() {\n        __TBB_ASSERT(ref_count>0,\"ref_count underflow\");\n        if( --ref_count==0 )\n            delete this;\n    }\n    virtual ~filter_node() {\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        --(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\n};\n\n//! Node in parse tree representing result of make_filter.\ntemplate<typename T, typename U, typename Body>\nclass filter_node_leaf: public filter_node  {\n    const tbb::filter::mode mode;\n    const Body body;\n    void add_to( pipeline& p ) __TBB_override {\n        concrete_filter<T,U,Body>* f = new concrete_filter<T,U,Body>(mode,body);\n        p.add_filter( *f );\n    }\npublic:\n    filter_node_leaf( tbb::filter::mode m, const Body& b ) : mode(m), body(b) {}\n};\n\n//! Node in parse tree representing join of two filters.\nclass filter_node_join: public filter_node {\n    friend class filter_node; // to suppress GCC 3.2 warnings\n    filter_node& left;\n    filter_node& right;\n    ~filter_node_join() {\n       left.remove_ref();\n       right.remove_ref();\n    }\n    void add_to( pipeline& p ) __TBB_override {\n        left.add_to(p);\n        right.add_to(p);\n    }\npublic:\n    filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {\n       left.add_ref();\n       right.add_ref();\n    }\n};\n\n} // namespace internal\n//! @endcond\n\n//! Create a filter to participate in parallel_pipeline\ntemplate<typename T, typename U, typename Body>\nfilter_t<T,U> make_filter(tbb::filter::mode mode, const Body& body) {\n    return new internal::filter_node_leaf<T,U,Body>(mode, body);\n}\n\ntemplate<typename T, typename V, typename U>\nfilter_t<T,U> operator& (const filter_t<T,V>& left, const filter_t<V,U>& right) {\n    __TBB_ASSERT(left.root,\"cannot use default-constructed filter_t as left argument of '&'\");\n    __TBB_ASSERT(right.root,\"cannot use default-constructed filter_t as right argument of '&'\");\n    return new internal::filter_node_join(*left.root,*right.root);\n}\n\n//! Class representing a chain of type-safe pipeline filters\ntemplate<typename T, typename U>\nclass filter_t {\n    typedef internal::filter_node filter_node;\n    filter_node* root;\n    filter_t( filter_node* root_ ) : root(root_) {\n        root->add_ref();\n    }\n    friend class internal::pipeline_proxy;\n    template<typename T_, typename U_, typename Body>\n    friend filter_t<T_,U_> make_filter(tbb::filter::mode, const Body& );\n    template<typename T_, typename V_, typename U_>\n    friend filter_t<T_,U_> operator& (const filter_t<T_,V_>& , const filter_t<V_,U_>& );\npublic:\n    // TODO: add move-constructors, move-assignment, etc. where C++11 is available.\n    filter_t() : root(NULL) {}\n    filter_t( const filter_t<T,U>& rhs ) : root(rhs.root) {\n        if( root ) root->add_ref();\n    }\n    template<typename Body>\n    filter_t( tbb::filter::mode mode, const Body& body ) :\n        root( new internal::filter_node_leaf<T,U,Body>(mode, body) ) {\n        root->add_ref();\n    }\n\n    void operator=( const filter_t<T,U>& rhs ) {\n        // Order of operations below carefully chosen so that reference counts remain correct\n        // in unlikely event that remove_ref throws exception.\n        filter_node* old = root;\n        root = rhs.root;\n        if( root ) root->add_ref();\n        if( old ) old->remove_ref();\n    }\n    ~filter_t() {\n        if( root ) root->remove_ref();\n    }\n    void clear() {\n        // Like operator= with filter_t() on right side.\n        if( root ) {\n            filter_node* old = root;\n            root = NULL;\n            old->remove_ref();\n        }\n    }\n};\n\ninline internal::pipeline_proxy::pipeline_proxy( const filter_t<void,void>& filter_chain ) : my_pipe() {\n    __TBB_ASSERT( filter_chain.root, \"cannot apply parallel_pipeline to default-constructed filter_t\"  );\n    filter_chain.root->add_to(my_pipe);\n}\n\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain\n#if __TBB_TASK_GROUP_CONTEXT\n    , tbb::task_group_context& context\n#endif\n    ) {\n    internal::pipeline_proxy pipe(filter_chain);\n    // tbb::pipeline::run() is called via the proxy\n    pipe->run(max_number_of_live_tokens\n#if __TBB_TASK_GROUP_CONTEXT\n              , context\n#endif\n    );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain) {\n    tbb::task_group_context context;\n    parallel_pipeline(max_number_of_live_tokens, filter_chain, context);\n}\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n} // interface6\n\nusing interface6::flow_control;\nusing interface6::filter_t;\nusing interface6::make_filter;\nusing interface6::parallel_pipeline;\n\n} // tbb\n\n#endif /* __TBB_pipeline_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/queuing_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_queuing_mutex_H\n#define __TBB_queuing_mutex_H\n\n#include <cstring>\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing mutex with local-only spinning.\n/** @ingroup synchronization */\nclass queuing_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            mutex = NULL;\n#if TBB_USE_ASSERT\n            internal::poison_pointer(next);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_mutex& m ) {\n            initialize();\n            acquire(m);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void __TBB_EXPORTED_METHOD acquire( queuing_mutex& m );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool __TBB_EXPORTED_METHOD try_acquire( queuing_mutex& m );\n\n        //! Release lock.\n        void __TBB_EXPORTED_METHOD release();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_mutex* mutex;\n\n        //! The pointer to the next competitor for a mutex\n        scoped_lock *next;\n\n        //! The local spin-wait variable\n        /** Inverted (0 - blocked, 1 - acquired the mutex) for the sake of\n            zero-initialization.  Defining it as an entire word instead of\n            a byte seems to help performance slightly. */\n        uintptr_t going;\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/queuing_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_queuing_rw_mutex_H\n#define __TBB_queuing_rw_mutex_H\n\n#include <cstring>\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing reader-writer mutex with local-only spinning.\n/** Adapted from Krieger, Stumm, et al. pseudocode at\n    http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93\n    @ingroup synchronization */\nclass queuing_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_rw_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL\n    ~queuing_rw_mutex() {\n#if TBB_USE_ASSERT\n        __TBB_ASSERT( !q_tail, \"destruction of an acquired mutex\");\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            my_mutex = NULL;\n#if TBB_USE_ASSERT\n            my_state = 0xFF; // Set to invalid state\n            internal::poison_pointer(my_next);\n            internal::poison_pointer(my_prev);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_rw_mutex& m, bool write=true ) {\n            initialize();\n            acquire(m,write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool try_acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Release lock.\n        void release();\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer();\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_rw_mutex* my_mutex;\n\n        //! The pointer to the previous and next competitors for a mutex\n        scoped_lock *__TBB_atomic my_prev, *__TBB_atomic my_next;\n\n        typedef unsigned char state_t;\n\n        //! State of the request: reader, writer, active reader, other service states\n        atomic<state_t> my_state;\n\n        //! The local spin-wait variable\n        /** Corresponds to \"spin\" in the pseudocode but inverted for the sake of zero-initialization */\n        unsigned char __TBB_atomic my_going;\n\n        //! A tiny internal lock\n        unsigned char my_internal_lock;\n\n        //! Acquire the internal lock\n        void acquire_internal_lock();\n\n        //! Try to acquire the internal lock\n        /** Returns true if lock was successfully acquired. */\n        bool try_acquire_internal_lock();\n\n        //! Release the internal lock\n        void release_internal_lock();\n\n        //! Wait for internal lock to be released\n        void wait_for_release_of_internal_lock();\n\n        //! A helper function\n        void unblock_or_wait_on_internal_lock( uintptr_t );\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/reader_writer_lock.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_reader_writer_lock_H\n#define __TBB_reader_writer_lock_H\n\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"atomic.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! Writer-preference reader-writer lock with local-only spinning on readers.\n/** Loosely adapted from Mellor-Crummey and Scott pseudocode at\n    http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp\n    @ingroup synchronization */\n    class reader_writer_lock : tbb::internal::no_copy {\n public:\n    friend class scoped_lock;\n    friend class scoped_lock_read;\n    //! Status type for nodes associated with lock instances\n    /** waiting_nonblocking: the wait state for nonblocking lock\n          instances; for writes, these transition straight to active\n          states; for reads, these are unused.\n\n        waiting: the start and spin state for all lock instances; these will\n          transition to active state when appropriate.  Non-blocking write locks\n          transition from this state to waiting_nonblocking immediately.\n\n        active: the active state means that the lock instance holds\n          the lock; it will transition to invalid state during node deletion\n\n        invalid: the end state for all nodes; this is set in the\n          destructor so if we encounter this state, we are looking at\n          memory that has already been freed\n\n        The state diagrams below describe the status transitions.\n        Single arrows indicate that the thread that owns the node is\n        responsible for the transition; double arrows indicate that\n        any thread could make the transition.\n\n        State diagram for scoped_lock status:\n\n        waiting ----------> waiting_nonblocking\n          |     _____________/       |\n          V    V                     V\n        active -----------------> invalid\n\n        State diagram for scoped_lock_read status:\n\n        waiting\n          |\n          V\n        active ----------------->invalid\n\n    */\n    enum status_t { waiting_nonblocking, waiting, active, invalid };\n\n    //! Constructs a new reader_writer_lock\n    reader_writer_lock() {\n        internal_construct();\n    }\n\n    //! Destructs a reader_writer_lock object\n    ~reader_writer_lock() {\n        internal_destroy();\n    }\n\n    //! The scoped lock pattern for write locks\n    /** Scoped locks help avoid the common problem of forgetting to release the lock.\n        This type also serves as the node for queuing locks. */\n    class scoped_lock : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire write lock on the passed-in lock\n        scoped_lock(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the write lock\n        ~scoped_lock() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock* next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock that is not holding lock\n        scoped_lock();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n   };\n\n    //! The scoped lock pattern for read locks\n    class scoped_lock_read : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire read lock on the passed-in lock\n        scoped_lock_read(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the read lock\n        ~scoped_lock_read() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock_read *next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock_read that is not holding lock\n        scoped_lock_read();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n    };\n\n    //! Acquires the reader_writer_lock for write.\n    /** If the lock is currently held in write mode by another\n        context, the writer will block by spinning on a local\n        variable.  Exceptions thrown: improper_lock The context tries\n        to acquire a reader_writer_lock that it already has write\n        ownership of.*/\n    void __TBB_EXPORTED_METHOD lock();\n\n    //! Tries to acquire the reader_writer_lock for write.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  If the lock\n        is already held by this acquiring context, try_lock() returns\n        false. */\n    bool __TBB_EXPORTED_METHOD try_lock();\n\n    //! Acquires the reader_writer_lock for read.\n    /** If the lock is currently held by a writer, this reader will\n        block and wait until the writers are done.  Exceptions thrown:\n        improper_lock The context tries to acquire a\n        reader_writer_lock that it already has write ownership of. */\n    void __TBB_EXPORTED_METHOD lock_read();\n\n    //! Tries to acquire the reader_writer_lock for read.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  */\n    bool __TBB_EXPORTED_METHOD try_lock_read();\n\n    //! Releases the reader_writer_lock\n    void __TBB_EXPORTED_METHOD unlock();\n\n private:\n    void __TBB_EXPORTED_METHOD internal_construct();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n    //! Attempts to acquire write lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    bool start_write(scoped_lock *);\n    //! Sets writer_head to w and attempts to unblock\n    void set_next_writer(scoped_lock *w);\n    //! Relinquishes write lock to next waiting writer or group of readers\n    void end_write(scoped_lock *);\n    //! Checks if current thread holds write lock\n    bool is_current_writer();\n\n    //! Attempts to acquire read lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    void start_read(scoped_lock_read *);\n    //! Unblocks pending readers\n    void unblock_readers();\n    //! Relinquishes read lock by decrementing counter; last reader wakes pending writer\n    void end_read();\n\n    //! The list of pending readers\n    atomic<scoped_lock_read*> reader_head;\n    //! The list of pending writers\n    atomic<scoped_lock*> writer_head;\n    //! The last node in the list of pending writers\n    atomic<scoped_lock*> writer_tail;\n    //! Writer that owns the mutex; tbb_thread::id() otherwise.\n    tbb_thread::id my_current_writer;\n    //! Status of mutex\n    atomic<uintptr_t> rdr_count_and_flags; // used with __TBB_AtomicOR, which assumes uintptr_t\n};\n\n} // namespace interface5\n\nusing interface5::reader_writer_lock;\n\n} // namespace tbb\n\n#endif /* __TBB_reader_writer_lock_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/recursive_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_recursive_mutex_H\n#define __TBB_recursive_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n//! Mutex that allows recursive mutex acquisition.\n/** Mutex that allows recursive mutex acquisition.\n    @ingroup synchronization */\nclass recursive_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired recursive_mutex.\n    recursive_mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n        internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        pthread_mutexattr_t mtx_attr;\n        int error_code = pthread_mutexattr_init( &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutexattr_init failed\");\n\n        pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );\n        error_code = pthread_mutex_init( &impl, &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_init failed\");\n\n        pthread_mutexattr_destroy( &mtx_attr );\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~recursive_mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a recursive_mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire( mutex );\n#else\n            my_mutex = &mutex;\n            mutex.lock();\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given recursive_mutex.\n        bool try_acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire( mutex );\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current recursive_mutex to work\n        recursive_mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( recursive_mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( recursive_mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class recursive_mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = false;\n\n    // C++0x compatibility interface\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n    } state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_recursive_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/runtime_loader.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_runtime_loader_H\n#define __TBB_runtime_loader_H\n\n#if ! TBB_PREVIEW_RUNTIME_LOADER\n    #error Set TBB_PREVIEW_RUNTIME_LOADER to include runtime_loader.h\n#endif\n\n#include \"tbb_stddef.h\"\n#include <climits>\n\n#if _MSC_VER\n    #if ! __TBB_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment( linker, \"/nodefaultlib:tbb_debug.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy_debug.lib\" )\n        #else\n            #pragma comment( linker, \"/nodefaultlib:tbb.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy.lib\" )\n        #endif\n    #endif\n#endif\n\nnamespace tbb {\n\nnamespace interface6 {\n\n//! Load TBB at runtime.\n/*!\n\n\\b Usage:\n\nIn source code:\n\n\\code\n#include \"tbb/runtime_loader.h\"\n\nchar const * path[] = { \"<install dir>/lib/ia32\", NULL };\ntbb::runtime_loader loader( path );\n\n// Now use TBB.\n\\endcode\n\nLink with \\c tbbproxy.lib (or \\c libtbbproxy.a) instead of \\c tbb.lib (\\c libtbb.dylib,\n\\c libtbb.so).\n\nTBB library will be loaded at runtime from \\c <install dir>/lib/ia32 directory.\n\n\\b Attention:\n\nAll \\c runtime_loader objects (in the same module, i.e. exe or dll) share some global state.\nThe most noticeable piece of global state is loaded TBB library.\nThere are some implications:\n\n    -   Only one TBB library can be loaded per module.\n\n    -   If one object has already loaded TBB library, another object will not load TBB.\n        If the loaded TBB library is suitable for the second object, both will use TBB\n        cooperatively, otherwise the second object will report an error.\n\n    -   \\c runtime_loader objects will not work (correctly) in parallel due to absence of\n        synchronization.\n\n*/\n\nclass runtime_loader : tbb::internal::no_copy {\n\n    public:\n\n        //! Error mode constants.\n        enum error_mode {\n            em_status,     //!< Save status of operation and continue.\n            em_throw,      //!< Throw an exception of tbb::runtime_loader::error_code type.\n            em_abort       //!< Print message to \\c stderr and call \\c abort().\n        }; // error_mode\n\n        //! Error codes.\n        enum error_code {\n            ec_ok,         //!< No errors.\n            ec_bad_call,   //!< Invalid function call (e. g. load() called when TBB is already loaded).\n            ec_bad_arg,    //!< Invalid argument passed.\n            ec_bad_lib,    //!< Invalid library found (e. g. \\c TBB_runtime_version symbol not found).\n            ec_bad_ver,    //!< TBB found but version is not suitable.\n            ec_no_lib      //!< No suitable TBB library found.\n        }; // error_code\n\n        //! Initialize object but do not load TBB.\n        runtime_loader( error_mode mode = em_abort );\n\n        //! Initialize object and load TBB.\n        /*!\n            See load() for details.\n\n            If error mode is \\c em_status, call status() to check whether TBB was loaded or not.\n        */\n        runtime_loader(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX,                //!< Maximal suitable version of TBB.\n            error_mode   mode    = em_abort                //!< Error mode for this object.\n        );\n\n        //! Destroy object.\n        ~runtime_loader();\n\n        //! Load TBB.\n        /*!\n            The method searches the directories specified in \\c path[] array for the TBB library.\n            When the library is found, it is loaded and its version is checked. If the version is\n            not suitable, the library is unloaded, and the search continues.\n\n            \\b Note:\n\n            For security reasons, avoid using relative directory names. For example, never load\n            TBB from current (\\c \".\"), parent (\\c \"..\") or any other relative directory (like\n            \\c \"lib\" ). Use only absolute directory names (e. g. \"/usr/local/lib\").\n\n            For the same security reasons, avoid using system default directories (\\c \"\") on\n            Windows. (See http://www.microsoft.com/technet/security/advisory/2269637.mspx for\n            details.)\n\n            Neglecting these rules may cause your program to execute 3-rd party malicious code.\n\n            \\b Errors:\n                -   \\c ec_bad_call - TBB already loaded by this object.\n                -   \\c ec_bad_arg - \\p min_ver and/or \\p max_ver negative or zero,\n                    or \\p min_ver > \\p max_ver.\n                -   \\c ec_bad_ver - TBB of unsuitable version already loaded by another object.\n                -   \\c ec_no_lib - No suitable library found.\n        */\n        error_code\n        load(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX                 //!< Maximal suitable version of TBB.\n\n        );\n\n\n        //! Report status.\n        /*!\n            If error mode is \\c em_status, the function returns status of the last operation.\n        */\n        error_code status();\n\n    private:\n\n        error_mode const my_mode;\n        error_code       my_status;\n        bool             my_loaded;\n\n}; // class runtime_loader\n\n} // namespace interface6\n\nusing interface6::runtime_loader;\n\n} // namespace tbb\n\n#endif /* __TBB_runtime_loader_H */\n\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/scalable_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_scalable_allocator_H\n#define __TBB_scalable_allocator_H\n/** @file */\n\n#include <stddef.h> /* Need ptrdiff_t and size_t from here. */\n#if !_MSC_VER\n#include <stdint.h> /* Need intptr_t from here. */\n#endif\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (push)\n    #pragma warning (disable: 991)\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n#if _MSC_VER >= 1400\n#define __TBB_EXPORTED_FUNC   __cdecl\n#else\n#define __TBB_EXPORTED_FUNC\n#endif\n\n/** The \"malloc\" analogue to allocate block of memory of size bytes.\n  * @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_malloc (size_t size);\n\n/** The \"free\" analogue to discard a previously allocated piece of memory.\n    @ingroup memory_allocation */\nvoid   __TBB_EXPORTED_FUNC scalable_free (void* ptr);\n\n/** The \"realloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_realloc (void* ptr, size_t size);\n\n/** The \"calloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size);\n\n/** The \"posix_memalign\" analogue.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_posix_memalign (void** memptr, size_t alignment, size_t size);\n\n/** The \"_aligned_malloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment);\n\n/** The \"_aligned_realloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_realloc (void* ptr, size_t size, size_t alignment);\n\n/** The \"_aligned_free\" analogue.\n    @ingroup memory_allocation */\nvoid __TBB_EXPORTED_FUNC scalable_aligned_free (void* ptr);\n\n/** The analogue of _msize/malloc_size/malloc_usable_size.\n    Returns the usable size of a memory block previously allocated by scalable_*,\n    or 0 (zero) if ptr does not point to such a block.\n    @ingroup memory_allocation */\nsize_t __TBB_EXPORTED_FUNC scalable_msize (void* ptr);\n\n/* Results for scalable_allocation_* functions */\ntypedef enum {\n    TBBMALLOC_OK,\n    TBBMALLOC_INVALID_PARAM,\n    TBBMALLOC_UNSUPPORTED,\n    TBBMALLOC_NO_MEMORY,\n    TBBMALLOC_NO_EFFECT\n} ScalableAllocationResult;\n\n/* Setting TBB_MALLOC_USE_HUGE_PAGES environment variable to 1 enables huge pages.\n   scalable_allocation_mode call has priority over environment variable. */\ntypedef enum {\n    TBBMALLOC_USE_HUGE_PAGES,  /* value turns using huge pages on and off */\n    /* deprecated, kept for backward compatibility only */\n    USE_HUGE_PAGES = TBBMALLOC_USE_HUGE_PAGES,\n    /* try to limit memory consumption value Bytes, clean internal buffers\n       if limit is exceeded, but not prevents from requesting memory from OS */\n    TBBMALLOC_SET_SOFT_HEAP_LIMIT\n} AllocationModeParam;\n\n/** Set TBB allocator-specific allocation modes.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value);\n\ntypedef enum {\n    /* Clean internal allocator buffers for all threads.\n       Returns TBBMALLOC_NO_EFFECT if no buffers cleaned,\n       TBBMALLOC_OK if some memory released from buffers. */\n    TBBMALLOC_CLEAN_ALL_BUFFERS,\n    /* Clean internal allocator buffer for current thread only.\n       Return values same as for TBBMALLOC_CLEAN_ALL_BUFFERS. */\n    TBBMALLOC_CLEAN_THREAD_BUFFERS\n} ScalableAllocationCmd;\n\n/** Call TBB allocator-specific commands.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* __cplusplus */\n\n#ifdef __cplusplus\n\n//! The namespace rml contains components of low-level memory pool interface.\nnamespace rml {\nclass MemoryPool;\n\ntypedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);\n// returns non-zero in case of error\ntypedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);\n\n/*\nMemPoolPolicy extension must be compatible with such structure fields layout\n\nstruct MemPoolPolicy {\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n    size_t       granularity;   // granularity of pAlloc allocations\n};\n*/\n\nstruct MemPoolPolicy {\n    enum {\n        TBBMALLOC_POOL_VERSION = 1\n    };\n\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n                 // granularity of pAlloc allocations. 0 means default used.\n    size_t       granularity;\n    int          version;\n                 // all memory consumed at 1st pAlloc call and never returned,\n                 // no more pAlloc calls after 1st\n    unsigned     fixedPool : 1,\n                 // memory consumed but returned only at pool termination\n                 keepAllMemory : 1,\n                 reserved : 30;\n\n    MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,\n                  size_t granularity_ = 0, bool fixedPool_ = false,\n                  bool keepAllMemory_ = false) :\n        pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),\n        fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),\n        reserved(0) {}\n};\n\n// enums have same values as appropriate enums from ScalableAllocationResult\n// TODO: use ScalableAllocationResult in pool_create directly\nenum MemPoolError {\n    // pool created successfully\n    POOL_OK = TBBMALLOC_OK,\n    // invalid policy parameters found\n    INVALID_POLICY = TBBMALLOC_INVALID_PARAM,\n     // requested pool policy is not supported by allocator library\n    UNSUPPORTED_POLICY = TBBMALLOC_UNSUPPORTED,\n    // lack of memory during pool creation\n    NO_MEMORY = TBBMALLOC_NO_MEMORY,\n    // action takes no effect\n    NO_EFFECT = TBBMALLOC_NO_EFFECT\n};\n\nMemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,\n                            rml::MemoryPool **pool);\n\nbool  pool_destroy(MemoryPool* memPool);\nvoid *pool_malloc(MemoryPool* memPool, size_t size);\nvoid *pool_realloc(MemoryPool* memPool, void *object, size_t size);\nvoid *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);\nvoid *pool_aligned_realloc(MemoryPool* mPool, void *ptr, size_t size, size_t alignment);\nbool  pool_reset(MemoryPool* memPool);\nbool  pool_free(MemoryPool *memPool, void *object);\nMemoryPool *pool_identify(void *object);\n\n} // namespace rml\n\n#include <new>      /* To use new with the placement argument */\n\n/* Ensure that including this header does not cause implicit linkage with TBB */\n#ifndef __TBB_NO_IMPLICIT_LINKAGE\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #include \"tbb_stddef.h\"\n    #undef  __TBB_NO_IMPLICIT_LINKAGE\n#else\n    #include \"tbb_stddef.h\"\n#endif\n\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if TBB_USE_EXCEPTIONS\n// forward declaration is for inlining prevention\ntemplate<typename E> __TBB_NOINLINE( void throw_exception(const E &e) );\n#endif\n\n// keep throw in a separate function to prevent code bloat\ntemplate<typename E>\nvoid throw_exception(const E &e) {\n    __TBB_THROW(e);\n}\n\n} // namespace internal\n//! @endcond\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass scalable_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n\n    scalable_allocator() throw() {}\n    scalable_allocator( const scalable_allocator& ) throw() {}\n    template<typename U> scalable_allocator(const scalable_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ =0 ) {\n        pointer p = static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );\n        if (!p)\n            internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n\n    //! Free previously allocated block of memory\n    void deallocate( pointer p, size_type ) {\n        scalable_free( p );\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);\n        return (absolutemax > 0 ? absolutemax : 1);\n    }\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) { ::new((void*)(p)) value_type( std::move( value ) ); }\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif /* __TBB_ALLOCATOR_CONSTRUCT_VARIADIC */\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif /* warning 4100 is back */\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass scalable_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#if _MSC_VER\n    #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)\n        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n    #endif\n\n    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment(lib, \"tbbmalloc_debug.lib\")\n        #else\n            #pragma comment(lib, \"tbbmalloc.lib\")\n        #endif\n    #endif\n\n\n#endif\n\n#endif /* __cplusplus */\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (pop)\n#endif /* ICC 11.0 warning 991 is back */\n\n#endif /* __TBB_scalable_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/spin_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_spin_mutex_H\n#define __TBB_spin_mutex_H\n\n#include <cstddef>\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n//! A lock that occupies a single byte.\n/** A spin_mutex is a spin mutex that fits in a single byte.\n    It should be used only for locking short critical sections\n    (typically less than 20 instructions) when fairness is not an issue.\n    If zero-initialized, the mutex is considered unheld.\n    @ingroup synchronization */\nclass spin_mutex : internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    spin_mutex() : flag(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        spin_mutex* my_mutex;\n\n        //! Value to store into spin_mutex::flag to unlock the mutex.\n        /** This variable is no longer used. Instead, 0 and 1 are used to\n            represent that the lock is free and acquired, respectively.\n            We keep the member variable here to ensure backward compatibility */\n        __TBB_Flag my_unlock_value;\n\n        //! Like acquire, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_acquire( spin_mutex& m );\n\n        //! Like try_acquire, but with ITT instrumentation.\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( spin_mutex& m );\n\n        //! Like release, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class spin_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( spin_mutex& m ) : my_unlock_value(0) {\n            internal::suppress_unused_warning(my_unlock_value);\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            my_mutex=NULL;\n            internal_acquire(m);\n#else\n            my_mutex=&m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Acquire lock.\n        void acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_acquire(m);\n#else\n            my_mutex = &m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            return internal_try_acquire(m);\n#else\n            bool result = __TBB_TryLockByte(m.flag);\n            if( result )\n                my_mutex = &m;\n            return result;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_release();\n#else\n            __TBB_UnlockByte(my_mutex->flag);\n            my_mutex = NULL;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n                internal_release();\n#else\n                __TBB_UnlockByte(my_mutex->flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            }\n        }\n    };\n\n    //! Internal constructor with ITT instrumentation.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n        __TBB_LockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n        return __TBB_TryLockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n        __TBB_UnlockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS */\n    }\n\n    friend class scoped_lock;\n}; // end of spin_mutex\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)\n\n} // namespace tbb\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n#include \"internal/_x86_eliding_mutex_impl.h\"\n#endif\n\nnamespace tbb {\n//! A cross-platform spin mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\ntypedef interface7::internal::padded_mutex<interface7::internal::x86_eliding_mutex,false> speculative_spin_mutex;\n#else\ntypedef interface7::internal::padded_mutex<spin_mutex,false> speculative_spin_mutex;\n#endif\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_spin_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/spin_rw_mutex.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_spin_rw_mutex_H\n#define __TBB_spin_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n#if __TBB_TSX_AVAILABLE\nnamespace interface8 { namespace internal {\n    class x86_rtm_rw_mutex;\n}}\n#endif\n\nclass spin_rw_mutex_v3;\ntypedef spin_rw_mutex_v3 spin_rw_mutex;\n\n//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference\n/** @ingroup synchronization */\nclass spin_rw_mutex_v3 : internal::mutex_copy_deprecated_and_disabled {\n    //! @cond INTERNAL\n\n    //! Internal acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_acquire_writer();\n\n    //! Out of line code for releasing a write lock.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_release_writer();\n\n    //! Internal acquire read lock.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader();\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade();\n\n    //! Out of line code for downgrading a writer to a reader.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_downgrade();\n\n    //! Internal release read lock.\n    void __TBB_EXPORTED_METHOD internal_release_reader();\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer();\n\n    //! Internal try_acquire read lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_reader();\n\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    spin_rw_mutex_v3() : state(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Destructor asserts if the mutex is acquired, i.e. state is zero.\n    ~spin_rw_mutex_v3() {\n        __TBB_ASSERT( !state, \"destruction of an acquired mutex\");\n    };\n#endif /* TBB_USE_ASSERT */\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n#if __TBB_TSX_AVAILABLE\n        friend class tbb::interface8::internal::x86_rtm_rw_mutex;\n        // helper methods for x86_rtm_rw_mutex\n        spin_rw_mutex *internal_get_mutex() const { return mutex; }\n        void internal_set_mutex(spin_rw_mutex* m) { mutex = m; }\n#endif\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : mutex(NULL), is_writer(false) {}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            is_writer = write;\n            mutex = &m;\n            if( write ) mutex->internal_acquire_writer();\n            else        mutex->internal_acquire_reader();\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( !is_writer, \"not a reader\" );\n            is_writer = true;\n            return mutex->internal_upgrade();\n        }\n\n        //! Release lock.\n        void release() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            spin_rw_mutex *m = mutex;\n            mutex = NULL;\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            if( is_writer ) m->internal_release_writer();\n            else            m->internal_release_reader();\n#else\n            if( is_writer ) __TBB_AtomicAND( &m->state, READERS );\n            else            __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( is_writer, \"not a writer\" );\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            mutex->internal_downgrade();\n#else\n            __TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            is_writer = false;\n            return true;\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            bool result;\n            is_writer = write;\n            result = write? m.internal_try_acquire_writer()\n                          : m.internal_try_acquire_reader();\n            if( result )\n                mutex = &m;\n            return result;\n        }\n\n    protected:\n\n        //! The pointer to the current mutex that is held, or NULL if no mutex is held.\n        spin_rw_mutex* mutex;\n\n        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.\n        /** Not defined if not holding a lock. */\n        bool is_writer;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire writer lock\n    void lock() {internal_acquire_writer();}\n\n    //! Try acquiring writer lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {return internal_try_acquire_writer();}\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        if( state&WRITER ) internal_release_writer();\n        else               internal_release_reader();\n#else\n        if( state&WRITER ) __TBB_AtomicAND( &state, READERS );\n        else               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    // Methods for reader locks that resemble ISO C++0x compatibility methods.\n\n    //! Acquire reader lock\n    void lock_read() {internal_acquire_reader();}\n\n    //! Try acquiring reader lock (non-blocking)\n    /** Return true if reader lock acquired; false otherwise. */\n    bool try_lock_read() {return internal_try_acquire_reader();}\n\nprotected:\n    typedef intptr_t state_t;\n    static const state_t WRITER = 1;\n    static const state_t WRITER_PENDING = 2;\n    static const state_t READERS = ~(WRITER | WRITER_PENDING);\n    static const state_t ONE_READER = 4;\n    static const state_t BUSY = WRITER | READERS;\n    //! State of lock\n    /** Bit 0 = writer is holding lock\n        Bit 1 = request by a writer to acquire lock (hint to readers to wait)\n        Bit 2..N = number of readers holding lock */\n    state_t state;\n\nprivate:\n    void __TBB_EXPORTED_METHOD internal_construct();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)\n\n} // namespace tbb\n\n#if __TBB_TSX_AVAILABLE\n#include \"internal/_x86_rtm_rw_mutex_impl.h\"\n#endif\n\nnamespace tbb {\nnamespace interface8 {\n//! A cross-platform spin reader/writer mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_rw_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.\n    @ingroup synchronization */\n#if __TBB_TSX_AVAILABLE\ntypedef interface7::internal::padded_mutex<tbb::interface8::internal::x86_rtm_rw_mutex,true> speculative_spin_rw_mutex;\n#else\ntypedef interface7::internal::padded_mutex<tbb::spin_rw_mutex,true> speculative_spin_rw_mutex;\n#endif\n}  // namespace interface8\n\nusing interface8::speculative_spin_rw_mutex;\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_rw_mutex)\n} // namespace tbb\n#endif /* __TBB_spin_rw_mutex_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/task.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_H\n#define __TBB_task_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <climits>\n\ntypedef struct ___itt_caller *__itt_caller;\n\nnamespace tbb {\n\nclass task;\nclass task_list;\nclass task_group_context;\n\n// MSVC does not allow taking the address of a member that was defined\n// privately in task_base and made public in class task via a using declaration.\n#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)\n#define __TBB_TASK_BASE_ACCESS public\n#else\n#define __TBB_TASK_BASE_ACCESS private\n#endif\n\nnamespace internal { //< @cond INTERNAL\n\n    class allocate_additional_child_of_proxy: no_assign {\n        //! No longer used, but retained for binary layout compatibility.  Always NULL.\n        task* self;\n        task& parent;\n    public:\n        explicit allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    struct cpu_ctl_env_space { int space[sizeof(internal::uint64_t)/sizeof(int)]; };\n} //< namespace internal @endcond\n\nnamespace interface5 {\n    namespace internal {\n        //! Base class for methods that became static in TBB 3.0.\n        /** TBB's evolution caused the \"this\" argument for several methods to become obsolete.\n            However, for backwards binary compatibility, the new methods need distinct names,\n            otherwise the One Definition Rule would be broken.  Hence the new methods are\n            defined in this private base class, and then exposed in class task via\n            using declarations. */\n        class task_base: tbb::internal::no_copy {\n        __TBB_TASK_BASE_ACCESS:\n            friend class tbb::task;\n\n            //! Schedule task for execution when a worker becomes available.\n            static void spawn( task& t );\n\n            //! Spawn multiple tasks and clear list.\n            static void spawn( task_list& list );\n\n            //! Like allocate_child, except that task's parent becomes \"t\", not this.\n            /** Typically used in conjunction with schedule_to_reexecute to implement while loops.\n               Atomically increments the reference count of t.parent() */\n            static tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( task& t ) {\n                return tbb::internal::allocate_additional_child_of_proxy(t);\n            }\n\n            //! Destroy a task.\n            /** Usually, calling this method is unnecessary, because a task is\n                implicitly deleted after its execute() method runs.  However,\n                sometimes a task needs to be explicitly deallocated, such as\n                when a root task is used as the parent in spawn_and_wait_for_all. */\n            static void __TBB_EXPORTED_FUNC destroy( task& victim );\n        };\n    } // internal\n} // interface5\n\n//! @cond INTERNAL\nnamespace internal {\n\n    class scheduler: no_copy {\n    public:\n        //! For internal use only\n        virtual void spawn( task& first, task*& next ) = 0;\n\n        //! For internal use only\n        virtual void wait_for_all( task& parent, task* child ) = 0;\n\n        //! For internal use only\n        virtual void spawn_root_and_wait( task& first, task*& next ) = 0;\n\n        //! Pure virtual destructor;\n        //  Have to have it just to shut up overzealous compilation warnings\n        virtual ~scheduler() = 0;\n\n        //! For internal use only\n        virtual void enqueue( task& t, void* reserved ) = 0;\n    };\n\n    //! A reference count\n    /** Should always be non-negative.  A signed type is used so that underflow can be detected. */\n    typedef intptr_t reference_count;\n\n    //! An id as used for specifying affinity.\n    typedef unsigned short affinity_id;\n\n#if __TBB_TASK_ISOLATION\n    //! A tag for task isolation.\n    typedef intptr_t isolation_tag;\n    const isolation_tag no_isolation = 0;\n#endif /* __TBB_TASK_ISOLATION */\n\n#if __TBB_TASK_GROUP_CONTEXT\n    class generic_scheduler;\n\n    struct context_list_node_t {\n        context_list_node_t *my_prev,\n                            *my_next;\n    };\n\n    class allocate_root_with_context_proxy: no_assign {\n        task_group_context& my_context;\n    public:\n        allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    class allocate_root_proxy: no_assign {\n    public:\n        static task& __TBB_EXPORTED_FUNC allocate( size_t size );\n        static void __TBB_EXPORTED_FUNC free( task& );\n    };\n\n    class allocate_continuation_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    class allocate_child_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    //! Memory prefix to a task object.\n    /** This class is internal to the library.\n        Do not reference it directly, except within the library itself.\n        Fields are ordered in way that preserves backwards compatibility and yields good packing on\n        typical 32-bit and 64-bit platforms. New fields should be added at the beginning for\n        backward compatibility with accesses to the task prefix inlined into application code. To\n        prevent ODR violation, the class shall have the same layout in all application translation\n        units. If some fields are conditional (e.g. enabled by preview macros) and might get\n        skipped, use reserved fields to adjust the layout.\n\n        In case task prefix size exceeds 32 or 64 bytes on IA32 and Intel64 architectures\n        correspondingly, consider dynamic setting of task_alignment and task_prefix_reservation_size\n        based on the maximal operand size supported by the current CPU.\n\n        @ingroup task_scheduling */\n    class task_prefix {\n    private:\n        friend class tbb::task;\n        friend class tbb::interface5::internal::task_base;\n        friend class tbb::task_list;\n        friend class internal::scheduler;\n        friend class internal::allocate_root_proxy;\n        friend class internal::allocate_child_proxy;\n        friend class internal::allocate_continuation_proxy;\n        friend class internal::allocate_additional_child_of_proxy;\n\n#if __TBB_TASK_ISOLATION\n        //! The tag used for task isolation.\n        isolation_tag isolation;\n#else\n        intptr_t reserved_space_for_task_isolation_tag;\n#endif /* __TBB_TASK_ISOLATION */\n\n#if __TBB_TASK_GROUP_CONTEXT\n        //! Shared context that is used to communicate asynchronous state changes\n        /** Currently it is used to broadcast cancellation requests generated both\n            by users and as the result of unhandled exceptions in the task::execute()\n            methods. */\n        task_group_context  *context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        //! The scheduler that allocated the task, or NULL if the task is big.\n        /** Small tasks are pooled by the scheduler that allocated the task.\n            If a scheduler needs to free a small task allocated by another scheduler,\n            it returns the task to that other scheduler.  This policy avoids\n            memory space blowup issues for memory allocators that allocate from\n            thread-specific pools. */\n        scheduler* origin;\n\n#if __TBB_TASK_PRIORITY\n        union {\n#endif /* __TBB_TASK_PRIORITY */\n        //! Obsolete. The scheduler that owns the task.\n        /** Retained only for the sake of backward binary compatibility.\n            Still used by inline methods in the task.h header. **/\n        scheduler* owner;\n\n#if __TBB_TASK_PRIORITY\n        //! Pointer to the next offloaded lower priority task.\n        /** Used to maintain a list of offloaded tasks inside the scheduler. **/\n        task* next_offloaded;\n        };\n#endif /* __TBB_TASK_PRIORITY */\n\n        //! The task whose reference count includes me.\n        /** In the \"blocking style\" of programming, this field points to the parent task.\n            In the \"continuation-passing style\" of programming, this field points to the\n            continuation of the parent. */\n        tbb::task* parent;\n\n        //! Reference count used for synchronization.\n        /** In the \"continuation-passing style\" of programming, this field is\n            the difference of the number of allocated children minus the\n            number of children that have completed.\n            In the \"blocking style\" of programming, this field is one more than the difference. */\n        __TBB_atomic reference_count ref_count;\n\n        //! Obsolete. Used to be scheduling depth before TBB 2.2\n        /** Retained only for the sake of backward binary compatibility.\n            Not used by TBB anymore. **/\n        int depth;\n\n        //! A task::state_type, stored as a byte for compactness.\n        /** This state is exposed to users via method task::state(). */\n        unsigned char state;\n\n        //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.\n        /** 0x0 -> version 1.0 task\n            0x1 -> version >=2.1 task\n            0x10 -> task was enqueued\n            0x20 -> task_proxy\n            0x40 -> task has live ref_count\n            0x80 -> a stolen task */\n        unsigned char extra_state;\n\n        affinity_id affinity;\n\n        //! \"next\" field for list of task\n        tbb::task* next;\n\n        //! The task corresponding to this task_prefix.\n        tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}\n    };\n\n} // namespace internal\n//! @endcond\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#if __TBB_TASK_PRIORITY\nnamespace internal {\n    static const int priority_stride_v4 = INT_MAX / 4;\n}\n\nenum priority_t {\n    priority_normal = internal::priority_stride_v4 * 2,\n    priority_low = priority_normal - internal::priority_stride_v4,\n    priority_high = priority_normal + internal::priority_stride_v4\n};\n\n#endif /* __TBB_TASK_PRIORITY */\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    class tbb_exception;\n#else\n    namespace internal {\n        class tbb_exception_ptr;\n    }\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\nclass task_scheduler_init;\nnamespace interface7 { class task_arena; }\n\n//! Used to form groups of tasks\n/** @ingroup task_scheduling\n    The context services explicit cancellation requests from user code, and unhandled\n    exceptions intercepted during tasks execution. Intercepting an exception results\n    in generating internal cancellation requests (which is processed in exactly the\n    same way as external ones).\n\n    The context is associated with one or more root tasks and defines the cancellation\n    group that includes all the descendants of the corresponding root task(s). Association\n    is established when a context object is passed as an argument to the task::allocate_root()\n    method. See task_group_context::task_group_context for more details.\n\n    The context can be bound to another one, and other contexts can be bound to it,\n    forming a tree-like structure: parent -> this -> children. Arrows here designate\n    cancellation propagation direction. If a task in a cancellation group is cancelled\n    all the other tasks in this group and groups bound to it (as children) get cancelled too.\n\n    IMPLEMENTATION NOTE:\n    When adding new members to task_group_context or changing types of existing ones,\n    update the size of both padding buffers (_leading_padding and _trailing_padding)\n    appropriately. See also VERSIONING NOTE at the constructor definition below. **/\nclass task_group_context : internal::no_copy {\nprivate:\n    friend class internal::generic_scheduler;\n    friend class task_scheduler_init;\n    friend class interface7::task_arena;\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    typedef tbb_exception exception_container_type;\n#else\n    typedef internal::tbb_exception_ptr exception_container_type;\n#endif\n\n    enum version_traits_word_layout {\n        traits_offset = 16,\n        version_mask = 0xFFFF,\n        traits_mask = 0xFFFFul << traits_offset\n    };\n\npublic:\n    enum kind_type {\n        isolated,\n        bound\n    };\n\n    enum traits_type {\n        exact_exception = 0x0001ul << traits_offset,\n#if __TBB_FP_CONTEXT\n        fp_settings     = 0x0002ul << traits_offset,\n#endif\n        concurrent_wait = 0x0004ul << traits_offset,\n#if TBB_USE_CAPTURED_EXCEPTION\n        default_traits = 0\n#else\n        default_traits = exact_exception\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n    };\n\nprivate:\n    enum state {\n        may_have_children = 1,\n        // the following enumerations must be the last, new 2^x values must go above\n        next_state_value, low_unused_state_bit = (next_state_value-1)*2\n    };\n\n    union {\n        //! Flavor of this context: bound or isolated.\n        // TODO: describe asynchronous use, and whether any memory semantics are needed\n        __TBB_atomic kind_type my_kind;\n        uintptr_t _my_kind_aligner;\n    };\n\n    //! Pointer to the context of the parent cancellation group. NULL for isolated contexts.\n    task_group_context *my_parent;\n\n    //! Used to form the thread specific list of contexts without additional memory allocation.\n    /** A context is included into the list of the current thread when its binding to\n        its parent happens. Any context can be present in the list of one thread only. **/\n    internal::context_list_node_t my_node;\n\n    //! Used to set and maintain stack stitching point for Intel Performance Tools.\n    __itt_caller itt_caller;\n\n    //! Leading padding protecting accesses to frequently used members from false sharing.\n    /** Read accesses to the field my_cancellation_requested are on the hot path inside\n        the scheduler. This padding ensures that this field never shares the same cache\n        line with a local variable that is frequently written to. **/\n    char _leading_padding[internal::NFS_MaxLineSize\n                          - 2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)\n                          - sizeof(__itt_caller)\n#if __TBB_FP_CONTEXT\n                          - sizeof(internal::cpu_ctl_env_space)\n#endif\n                         ];\n\n#if __TBB_FP_CONTEXT\n    //! Space for platform-specific FPU settings.\n    /** Must only be accessed inside TBB binaries, and never directly in user\n        code or inline methods. */\n    internal::cpu_ctl_env_space my_cpu_ctl_env;\n#endif\n\n    //! Specifies whether cancellation was requested for this task group.\n    uintptr_t my_cancellation_requested;\n\n    //! Version for run-time checks and behavioral traits of the context.\n    /** Version occupies low 16 bits, and traits (zero or more ORed enumerators\n        from the traits_type enumerations) take the next 16 bits.\n        Original (zeroth) version of the context did not support any traits. **/\n    uintptr_t my_version_and_traits;\n\n    //! Pointer to the container storing exception being propagated across this task group.\n    exception_container_type *my_exception;\n\n    //! Scheduler instance that registered this context in its thread specific list.\n    internal::generic_scheduler *my_owner;\n\n    //! Internal state (combination of state flags, currently only may_have_children).\n    uintptr_t my_state;\n\n#if __TBB_TASK_PRIORITY\n    //! Priority level of the task group (in normalized representation)\n    intptr_t my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Decription of algorithm for scheduler based instrumentation.\n    internal::string_index my_name;\n\n    //! Trailing padding protecting accesses to frequently used members from false sharing\n    /** \\sa _leading_padding **/\n    char _trailing_padding[internal::NFS_MaxLineSize - 2 * sizeof(uintptr_t) - 2 * sizeof(void*)\n#if __TBB_TASK_PRIORITY\n                           - sizeof(intptr_t)\n#endif /* __TBB_TASK_PRIORITY */\n                           - sizeof(internal::string_index)\n                          ];\n\npublic:\n    //! Default & binding constructor.\n    /** By default a bound context is created. That is this context will be bound\n        (as child) to the context of the task calling task::allocate_root(this_context)\n        method. Cancellation requests passed to the parent context are propagated\n        to all the contexts bound to it. Similarly priority change is propagated\n        from the parent context to its children.\n\n        If task_group_context::isolated is used as the argument, then the tasks associated\n        with this context will never be affected by events in any other context.\n\n        Creating isolated contexts involve much less overhead, but they have limited\n        utility. Normally when an exception occurs in an algorithm that has nested\n        ones running, it is desirably to have all the nested algorithms cancelled\n        as well. Such a behavior requires nested algorithms to use bound contexts.\n\n        There is one good place where using isolated algorithms is beneficial. It is\n        a master thread. That is if a particular algorithm is invoked directly from\n        the master thread (not from a TBB task), supplying it with explicitly\n        created isolated context will result in a faster algorithm startup.\n\n        VERSIONING NOTE:\n        Implementation(s) of task_group_context constructor(s) cannot be made\n        entirely out-of-line because the run-time version must be set by the user\n        code. This will become critically important for binary compatibility, if\n        we ever have to change the size of the context object.\n\n        Boosting the runtime version will also be necessary if new data fields are\n        introduced in the currently unused padding areas and these fields are updated\n        by inline methods. **/\n    task_group_context ( kind_type relation_with_parent = bound,\n                         uintptr_t t = default_traits )\n        : my_kind(relation_with_parent)\n        , my_version_and_traits(3 | t)\n        , my_name(internal::CUSTOM_CTX)\n    {\n        init();\n    }\n\n    // Custom constructor for instrumentation of tbb algorithm\n    task_group_context ( internal::string_index name )\n        : my_kind(bound)\n        , my_version_and_traits(3 | default_traits)\n        , my_name(name)\n    {\n        init();\n    }\n\n    // Do not introduce standalone unbind method since it will break state propagation assumptions\n    __TBB_EXPORTED_METHOD ~task_group_context ();\n\n    //! Forcefully reinitializes the context after the task tree it was associated with is completed.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the context's parent if it is set. **/\n    void __TBB_EXPORTED_METHOD reset ();\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise.\n\n        Note that canceling never fails. When false is returned, it just means that\n        another thread (or this one) has already sent cancellation request to this\n        context or to one of its ancestors (if this context is bound). It is guaranteed\n        that when this method is concurrently called on the same not yet cancelled\n        context, true will be returned by one and only one invocation. **/\n    bool __TBB_EXPORTED_METHOD cancel_group_execution ();\n\n    //! Returns true if the context received cancellation request.\n    bool __TBB_EXPORTED_METHOD is_group_execution_cancelled () const;\n\n    //! Records the pending exception, and cancels the task group.\n    /** May be called only from inside a catch-block. If the context is already\n        cancelled, does nothing.\n        The method brings the task group associated with this context exactly into\n        the state it would be in, if one of its tasks threw the currently pending\n        exception during its execution. In other words, it emulates the actions\n        of the scheduler's dispatch loop exception handler. **/\n    void __TBB_EXPORTED_METHOD register_pending_exception ();\n\n#if __TBB_FP_CONTEXT\n    //! Captures the current FPU control settings to the context.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the FPU control settings of the context's parent. **/\n    void __TBB_EXPORTED_METHOD capture_fp_settings ();\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group\n    void set_priority ( priority_t );\n\n    //! Retrieves current priority of the current task group\n    priority_t priority () const;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Returns the context's trait\n    uintptr_t traits() const { return my_version_and_traits & traits_mask; }\n\nprotected:\n    //! Out-of-line part of the constructor.\n    /** Singled out to ensure backward binary compatibility of the future versions. **/\n    void __TBB_EXPORTED_METHOD init ();\n\nprivate:\n    friend class task;\n    friend class internal::allocate_root_with_context_proxy;\n\n    static const kind_type binding_required = bound;\n    static const kind_type binding_completed = kind_type(bound+1);\n    static const kind_type detached = kind_type(binding_completed+1);\n    static const kind_type dying = kind_type(detached+1);\n\n    //! Propagates any state change detected to *this, and as an optimisation possibly also upward along the heritage line.\n    template <typename T>\n    void propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );\n\n    //! Registers this context with the local scheduler and binds it to its parent context\n    void bind_to ( internal::generic_scheduler *local_sched );\n\n    //! Registers this context with the local scheduler\n    void register_with ( internal::generic_scheduler *local_sched );\n\n#if __TBB_FP_CONTEXT\n    //! Copies FPU control setting from another context\n    // TODO: Consider adding #else stub in order to omit #if sections in other code\n    void copy_fp_settings( const task_group_context &src );\n#endif /* __TBB_FP_CONTEXT */\n}; // class task_group_context\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Base class for user-defined tasks.\n/** @ingroup task_scheduling */\nclass task: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {\n\n    //! Set reference count\n    void __TBB_EXPORTED_METHOD internal_set_ref_count( int count );\n\n    //! Decrement reference count and return its new value.\n    internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();\n\nprotected:\n    //! Default constructor.\n    task() {prefix().extra_state=1;}\n\npublic:\n    //! Destructor.\n    virtual ~task() {}\n\n    //! Should be overridden by derived classes.\n    virtual task* execute() = 0;\n\n    //! Enumeration of task states that the scheduler considers.\n    enum state_type {\n        //! task is running, and will be destroyed after method execute() completes.\n        executing,\n        //! task to be rescheduled.\n        reexecute,\n        //! task is in ready pool, or is going to be put there, or was just taken off.\n        ready,\n        //! task object is freshly allocated or recycled.\n        allocated,\n        //! task object is on free list, or is going to be put there, or was just taken off.\n        freed,\n        //! task to be recycled as continuation\n        recycle\n#if __TBB_RECYCLE_TO_ENQUEUE\n        //! task to be scheduled for starvation-resistant execution\n        ,to_enqueue\n#endif\n    };\n\n    //------------------------------------------------------------------------\n    // Allocating tasks\n    //------------------------------------------------------------------------\n\n    //! Returns proxy for overloaded new that allocates a root task.\n    static internal::allocate_root_proxy allocate_root() {\n        return internal::allocate_root_proxy();\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Returns proxy for overloaded new that allocates a root task associated with user supplied context.\n    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {\n        return internal::allocate_root_with_context_proxy(ctx);\n    }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! Returns proxy for overloaded new that allocates a continuation task of *this.\n    /** The continuation's parent becomes the parent of *this. */\n    internal::allocate_continuation_proxy& allocate_continuation() {\n        return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);\n    }\n\n    //! Returns proxy for overloaded new that allocates a child task of *this.\n    internal::allocate_child_proxy& allocate_child() {\n        return *reinterpret_cast<internal::allocate_child_proxy*>(this);\n    }\n\n    //! Define recommended static form via import from base class.\n    using task_base::allocate_additional_child_of;\n\n#if __TBB_DEPRECATED_TASK_INTERFACE\n    //! Destroy a task.\n    /** Usually, calling this method is unnecessary, because a task is\n        implicitly deleted after its execute() method runs.  However,\n        sometimes a task needs to be explicitly deallocated, such as\n        when a root task is used as the parent in spawn_and_wait_for_all. */\n    void __TBB_EXPORTED_METHOD destroy( task& t );\n#else /* !__TBB_DEPRECATED_TASK_INTERFACE */\n    //! Define recommended static form via import from base class.\n    using task_base::destroy;\n#endif /* !__TBB_DEPRECATED_TASK_INTERFACE */\n\n    //------------------------------------------------------------------------\n    // Recycling of tasks\n    //------------------------------------------------------------------------\n\n    //! Change this to be a continuation of its former self.\n    /** The caller must guarantee that the task's refcount does not become zero until\n        after the method execute() returns.  Typically, this is done by having\n        method execute() return a pointer to a child of the task.  If the guarantee\n        cannot be made, use method recycle_as_safe_continuation instead.\n\n        Because of the hazard, this method may be deprecated in the future. */\n    void recycle_as_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = allocated;\n    }\n\n    //! Recommended to use, safe variant of recycle_as_continuation\n    /** For safety, it requires additional increment of ref_count.\n        With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute. */\n    void recycle_as_safe_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = recycle;\n    }\n\n    //! Change this to be a child of new_parent.\n    void recycle_as_child_of( task& new_parent ) {\n        internal::task_prefix& p = prefix();\n        __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled as a child\" );\n        __TBB_ASSERT( p.parent==NULL, \"parent must be null\" );\n        __TBB_ASSERT( new_parent.prefix().state<=recycle, \"corrupt parent's state\" );\n        __TBB_ASSERT( new_parent.prefix().state!=freed, \"parent already freed\" );\n        p.state = allocated;\n        p.parent = &new_parent;\n#if __TBB_TASK_GROUP_CONTEXT\n        p.context = new_parent.prefix().context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n\n    //! Schedule this for reexecution after current execute() returns.\n    /** Made obsolete by recycle_as_safe_continuation; may become deprecated. */\n    void recycle_to_reexecute() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled for reexecution\" );\n        prefix().state = reexecute;\n    }\n\n#if __TBB_RECYCLE_TO_ENQUEUE\n    //! Schedule this to enqueue after descendant tasks complete.\n    /** Save enqueue/spawn difference, it has the semantics of recycle_as_safe_continuation. */\n    void recycle_to_enqueue() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        prefix().state = to_enqueue;\n    }\n#endif /* __TBB_RECYCLE_TO_ENQUEUE */\n\n    //------------------------------------------------------------------------\n    // Spawning and blocking\n    //------------------------------------------------------------------------\n\n    //! Set reference count\n    void set_ref_count( int count ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        internal_set_ref_count(count);\n#else\n        prefix().ref_count = count;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Atomically increment reference count.\n    /** Has acquire semantics */\n    void increment_ref_count() {\n        __TBB_FetchAndIncrementWacquire( &prefix().ref_count );\n    }\n\n    //! Atomically adds to reference count and returns its new value.\n    /** Has release-acquire semantics */\n    int add_ref_count( int count ) {\n        internal::call_itt_notify( internal::releasing, &prefix().ref_count );\n        internal::reference_count k = count+__TBB_FetchAndAddW( &prefix().ref_count, count );\n        __TBB_ASSERT( k>=0, \"task's reference count underflowed\" );\n        if( k==0 )\n            internal::call_itt_notify( internal::acquired, &prefix().ref_count );\n        return int(k);\n    }\n\n    //! Atomically decrement reference count and returns its new value.\n    /** Has release semantics. */\n    int decrement_ref_count() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        return int(internal_decrement_ref_count());\n#else\n        return int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Define recommended static forms via import from base class.\n    using task_base::spawn;\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void spawn_and_wait_for_all( task& child ) {\n        prefix().owner->wait_for_all( *this, &child );\n    }\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void __TBB_EXPORTED_METHOD spawn_and_wait_for_all( task_list& list );\n\n    //! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.\n    static void spawn_root_and_wait( task& root ) {\n        root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );\n    }\n\n    //! Spawn root tasks on list and wait for all of them to finish.\n    /** If there are more tasks than worker threads, the tasks are spawned in\n        order of front to back. */\n    static void spawn_root_and_wait( task_list& root_list );\n\n    //! Wait for reference count to become one, and set reference count to zero.\n    /** Works on tasks while waiting. */\n    void wait_for_all() {\n        prefix().owner->wait_for_all( *this, NULL );\n    }\n\n    //! Enqueue task for starvation-resistant execution.\n#if __TBB_TASK_PRIORITY\n    /** The task will be enqueued on the normal priority level disregarding the\n        priority of its task group.\n\n        The rationale of such semantics is that priority of an enqueued task is\n        statically fixed at the moment of its enqueuing, while task group priority\n        is dynamic. Thus automatic priority inheritance would be generally a subject\n        to the race, which may result in unexpected behavior.\n\n        Use enqueue() overload with explicit priority value and task::group_priority()\n        method to implement such priority inheritance when it is really necessary. **/\n#endif /* __TBB_TASK_PRIORITY */\n    static void enqueue( task& t ) {\n        t.prefix().owner->enqueue( t, NULL );\n    }\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueue task for starvation-resistant execution on the specified priority level.\n    static void enqueue( task& t, priority_t p ) {\n        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\" );\n        t.prefix().owner->enqueue( t, (void*)p );\n    }\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! The innermost task being executed or destroyed by the current thread at the moment.\n    static task& __TBB_EXPORTED_FUNC self();\n\n    //! task on whose behalf this task is working, or NULL if this is a root.\n    task* parent() const {return prefix().parent;}\n\n    //! sets parent task pointer to specified value\n    void set_parent(task* p) {\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT(!p || prefix().context == p->prefix().context, \"The tasks must be in the same context\");\n#endif\n        prefix().parent = p;\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! This method is deprecated and will be removed in the future.\n    /** Use method group() instead. **/\n    task_group_context* context() {return prefix().context;}\n\n    //! Pointer to the task group descriptor.\n    task_group_context* group () { return prefix().context; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! True if task was stolen from the task pool of another thread.\n    bool is_stolen_task() const {\n        return (prefix().extra_state & 0x80)!=0;\n    }\n\n    //------------------------------------------------------------------------\n    // Debugging\n    //------------------------------------------------------------------------\n\n    //! Current execution state\n    state_type state() const {return state_type(prefix().state);}\n\n    //! The internal reference count.\n    int ref_count() const {\n#if TBB_USE_ASSERT\n        internal::reference_count ref_count_ = prefix().ref_count;\n        __TBB_ASSERT( ref_count_==int(ref_count_), \"integer overflow error\");\n#endif\n        return int(prefix().ref_count);\n    }\n\n    //! Obsolete, and only retained for the sake of backward compatibility. Always returns true.\n    bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const;\n\n    //------------------------------------------------------------------------\n    // Affinity\n    //------------------------------------------------------------------------\n\n    //! An id as used for specifying affinity.\n    /** Guaranteed to be integral type.  Value of 0 means no affinity. */\n    typedef internal::affinity_id affinity_id;\n\n    //! Set affinity for this task.\n    void set_affinity( affinity_id id ) {prefix().affinity = id;}\n\n    //! Current affinity of this task\n    affinity_id affinity() const {return prefix().affinity;}\n\n    //! Invoked by scheduler to notify task that it ran on unexpected thread.\n    /** Invoked before method execute() runs, if task is stolen, or task has\n        affinity but will be executed on another thread.\n\n        The default action does nothing. */\n    virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Moves this task from its current group into another one.\n    /** Argument ctx specifies the new group.\n\n        The primary purpose of this method is to associate unique task group context\n        with a task allocated for subsequent enqueuing. In contrast to spawned tasks\n        enqueued ones normally outlive the scope where they were created. This makes\n        traditional usage model where task group context are allocated locally on\n        the stack inapplicable. Dynamic allocation of context objects is performance\n        inefficient. Method change_group() allows to make task group context object\n        a member of the task class, and then associate it with its containing task\n        object in the latter's constructor. **/\n    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise. **/\n    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }\n\n    //! Returns true if the context has received cancellation request.\n    bool is_cancelled () const { return prefix().context->is_group_execution_cancelled(); }\n#else\n    bool is_cancelled () const { return false; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group this task belongs to.\n    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }\n\n    //! Retrieves current priority of the task group this task belongs to.\n    priority_t group_priority () const { return prefix().context->priority(); }\n\n#endif /* __TBB_TASK_PRIORITY */\n\nprivate:\n    friend class interface5::internal::task_base;\n    friend class task_list;\n    friend class internal::scheduler;\n    friend class internal::allocate_root_proxy;\n#if __TBB_TASK_GROUP_CONTEXT\n    friend class internal::allocate_root_with_context_proxy;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    friend class internal::allocate_continuation_proxy;\n    friend class internal::allocate_child_proxy;\n    friend class internal::allocate_additional_child_of_proxy;\n\n    //! Get reference to corresponding task_prefix.\n    /** Version tag prevents loader on Linux from using the wrong symbol in debug builds. **/\n    internal::task_prefix& prefix( internal::version_tag* = NULL ) const {\n        return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];\n    }\n}; // class task\n\n//! task that does nothing.  Useful for synchronization.\n/** @ingroup task_scheduling */\nclass empty_task: public task {\n    task* execute() __TBB_override {\n        return NULL;\n    }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename F>\n    class function_task : public task {\n#if __TBB_ALLOW_MUTABLE_FUNCTORS\n        F my_func;\n#else\n        const F my_func;\n#endif\n        task* execute() __TBB_override {\n            my_func();\n            return NULL;\n        }\n    public:\n        function_task( const F& f ) : my_func(f) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        function_task( F&& f ) : my_func( std::move(f) ) {}\n#endif\n    };\n} // namespace internal\n//! @endcond\n\n//! A list of children.\n/** Used for method task::spawn_children\n    @ingroup task_scheduling */\nclass task_list: internal::no_copy {\nprivate:\n    task* first;\n    task** next_ptr;\n    friend class task;\n    friend class interface5::internal::task_base;\npublic:\n    //! Construct empty list\n    task_list() : first(NULL), next_ptr(&first) {}\n\n    //! Destroys the list, but does not destroy the task objects.\n    ~task_list() {}\n\n    //! True if list if empty; false otherwise.\n    bool empty() const {return !first;}\n\n    //! Push task onto back of list.\n    void push_back( task& task ) {\n        task.prefix().next = NULL;\n        *next_ptr = &task;\n        next_ptr = &task.prefix().next;\n    }\n#if __TBB_TODO\n    // TODO: add this method and implement&document the local execution ordering. See more in generic_scheduler::local_spawn\n    //! Push task onto front of list (FIFO local execution, like individual spawning in the same order).\n    void push_front( task& task ) {\n        if( empty() ) {\n            push_back(task);\n        } else {\n            task.prefix().next = first;\n            first = &task;\n        }\n    }\n#endif\n    //! Pop the front task from the list.\n    task& pop_front() {\n        __TBB_ASSERT( !empty(), \"attempt to pop item from empty task_list\" );\n        task* result = first;\n        first = result->prefix().next;\n        if( !first ) next_ptr = &first;\n        return *result;\n    }\n\n    //! Clear the list\n    void clear() {\n        first=NULL;\n        next_ptr=&first;\n    }\n};\n\ninline void interface5::internal::task_base::spawn( task& t ) {\n    t.prefix().owner->spawn( t, t.prefix().next );\n}\n\ninline void interface5::internal::task_base::spawn( task_list& list ) {\n    if( task* t = list.first ) {\n        t->prefix().owner->spawn( *t, *list.next_ptr );\n        list.clear();\n    }\n}\n\ninline void task::spawn_root_and_wait( task_list& root_list ) {\n    if( task* t = root_list.first ) {\n        t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );\n        root_list.clear();\n    }\n}\n\n} // namespace tbb\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& ) {\n    return &tbb::internal::allocate_root_proxy::allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_proxy& ) {\n    tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_continuation_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_continuation_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_child_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_child_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\n#endif /* __TBB_task_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/task_arena.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_arena_H\n#define __TBB_task_arena_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n#if TBB_USE_THREADING_TOOLS\n#include \"atomic.h\" // for as_atomic\n#endif\n#include \"aligned_space.h\"\n\nnamespace tbb {\n\nnamespace this_task_arena {\n    int max_concurrency();\n} // namespace this_task_arena\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class arena;\n    class task_scheduler_observer_v3;\n} // namespace internal\n//! @endcond\n\nnamespace interface7 {\nclass task_arena;\n\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal; //e.g. function_task from task.h\n\nclass delegate_base : no_assign {\npublic:\n    virtual void operator()() const = 0;\n    virtual ~delegate_base() {}\n};\n\n// If decltype is availabe, the helper detects the return type of functor of specified type,\n// otherwise it defines the void type.\ntemplate <typename F>\nstruct return_type_or_void {\n#if __TBB_CPP11_DECLTYPE_PRESENT && !__TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN\n    typedef decltype(declval<F>()()) type;\n#else\n    typedef void type;\n#endif\n};\n\ntemplate<typename F, typename R>\nclass delegated_function : public delegate_base {\n    F &my_func;\n    tbb::aligned_space<R> my_return_storage;\n    // The function should be called only once.\n    void operator()() const __TBB_override {\n        new (my_return_storage.begin()) R(my_func());\n    }\npublic:\n    delegated_function(F& f) : my_func(f) {}\n    // The function can be called only after operator() and only once.\n    R consume_result() const {\n        return tbb::internal::move(*(my_return_storage.begin()));\n    }\n    ~delegated_function() {\n        my_return_storage.begin()->~R();\n    }\n};\n\ntemplate<typename F>\nclass delegated_function<F,void> : public delegate_base {\n    F &my_func;\n    void operator()() const __TBB_override {\n        my_func();\n    }\npublic:\n    delegated_function(F& f) : my_func(f) {}\n    void consume_result() const {}\n\n    friend class task_arena_base;\n};\n\nclass task_arena_base {\nprotected:\n    //! NULL if not currently initialized.\n    internal::arena* my_arena;\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! default context of the arena\n    task_group_context *my_context;\n#endif\n\n    //! Concurrency level for deferred initialization\n    int my_max_concurrency;\n\n    //! Reserved master slots\n    unsigned my_master_slots;\n\n    //! Special settings\n    intptr_t my_version_and_traits;\n\n    enum {\n        default_flags = 0\n#if __TBB_TASK_GROUP_CONTEXT\n        | (task_group_context::default_traits & task_group_context::exact_exception)  // 0 or 1 << 16\n        , exact_exception_flag = task_group_context::exact_exception // used to specify flag for context directly\n#endif\n    };\n\n    task_arena_base(int max_concurrency, unsigned reserved_for_masters)\n        : my_arena(0)\n#if __TBB_TASK_GROUP_CONTEXT\n        , my_context(0)\n#endif\n        , my_max_concurrency(max_concurrency)\n        , my_master_slots(reserved_for_masters)\n        , my_version_and_traits(default_flags)\n        {}\n\n    void __TBB_EXPORTED_METHOD internal_initialize();\n    void __TBB_EXPORTED_METHOD internal_terminate();\n    void __TBB_EXPORTED_METHOD internal_attach();\n    void __TBB_EXPORTED_METHOD internal_enqueue( task&, intptr_t ) const;\n    void __TBB_EXPORTED_METHOD internal_execute( delegate_base& ) const;\n    void __TBB_EXPORTED_METHOD internal_wait() const;\n    static int __TBB_EXPORTED_FUNC internal_current_slot();\n    static int __TBB_EXPORTED_FUNC internal_max_concurrency( const task_arena * );\npublic:\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1;\n    static const int not_initialized = -2;\n\n};\n\n#if __TBB_TASK_ISOLATION\nvoid __TBB_EXPORTED_FUNC isolate_within_arena( delegate_base& d, intptr_t reserved = 0 );\n\ntemplate<typename R, typename F>\nR isolate_impl(F& f) {\n    delegated_function<F, R> d(f);\n    isolate_within_arena(d);\n    return d.consume_result();\n}\n#endif /* __TBB_TASK_ISOLATION */\n} // namespace internal\n//! @endcond\n\n/** 1-to-1 proxy representation class of scheduler's arena\n * Constructors set up settings only, real construction is deferred till the first method invocation\n * Destructor only removes one of the references to the inner arena representation.\n * Final destruction happens when all the references (and the work) are gone.\n */\nclass task_arena : public internal::task_arena_base {\n    friend class tbb::internal::task_scheduler_observer_v3;\n    friend int tbb::this_task_arena::max_concurrency();\n    bool my_initialized;\n    void mark_initialized() {\n        __TBB_ASSERT( my_arena, \"task_arena initialization is incomplete\" );\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT( my_context, \"task_arena initialization is incomplete\" );\n#endif\n#if TBB_USE_THREADING_TOOLS\n        // Actual synchronization happens in internal_initialize & internal_attach.\n        // The race on setting my_initialized is benign, but should be hidden from Intel(R) Inspector\n        internal::as_atomic(my_initialized).fetch_and_store<release>(true);\n#else\n        my_initialized = true;\n#endif\n    }\n\n    template<typename F>\n    void enqueue_impl( __TBB_FORWARDING_REF(F) f\n#if __TBB_TASK_PRIORITY\n        , priority_t p = priority_t(0)\n#endif\n    ) {\n#if !__TBB_TASK_PRIORITY\n        intptr_t p = 0;\n#endif\n        initialize();\n#if __TBB_TASK_GROUP_CONTEXT\n        internal_enqueue(*new(task::allocate_root(*my_context)) internal::function_task< typename internal::strip<F>::type >(internal::forward<F>(f)), p);\n#else\n        internal_enqueue(*new(task::allocate_root()) internal::function_task< typename internal::strip<F>::type >(internal::forward<F>(f)), p);\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n\n    template<typename R, typename F>\n    R execute_impl(F& f) {\n        initialize();\n        internal::delegated_function<F, R> d(f);\n        internal_execute(d);\n        return d.consume_result();\n    }\n\npublic:\n    //! Creates task_arena with certain concurrency limits\n    /** Sets up settings only, real construction is deferred till the first method invocation\n     *  @arg max_concurrency specifies total number of slots in arena where threads work\n     *  @arg reserved_for_masters specifies number of slots to be used by master threads only.\n     *       Value of 1 is default and reflects behavior of implicit arenas.\n     **/\n    task_arena(int max_concurrency_ = automatic, unsigned reserved_for_masters = 1)\n        : task_arena_base(max_concurrency_, reserved_for_masters)\n        , my_initialized(false)\n    {}\n\n    //! Copies settings from another task_arena\n    task_arena(const task_arena &s) // copy settings but not the reference or instance\n        : task_arena_base(s.my_max_concurrency, s.my_master_slots)\n        , my_initialized(false)\n    {}\n\n    //! Tag class used to indicate the \"attaching\" constructor\n    struct attach {};\n\n    //! Creates an instance of task_arena attached to the current arena of the thread\n    explicit task_arena( attach )\n        : task_arena_base(automatic, 1) // use default settings if attach fails\n        , my_initialized(false)\n    {\n        internal_attach();\n        if( my_arena ) my_initialized = true;\n    }\n\n    //! Forces allocation of the resources for the task_arena as specified in constructor arguments\n    inline void initialize() {\n        if( !my_initialized ) {\n            internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Overrides concurrency level and forces initialization of internal representation\n    inline void initialize(int max_concurrency_, unsigned reserved_for_masters = 1) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT(!my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            my_max_concurrency = max_concurrency_;\n            my_master_slots = reserved_for_masters;\n            initialize();\n        }\n    }\n\n    //! Attaches this instance to the current arena of the thread\n    inline void initialize(attach) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT(!my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            internal_attach();\n            if ( !my_arena ) internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Removes the reference to the internal arena representation.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    inline void terminate() {\n        if( my_initialized ) {\n            internal_terminate();\n            my_initialized = false;\n        }\n    }\n\n    //! Removes the reference to the internal arena representation, and destroys the external object.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    ~task_arena() {\n        terminate();\n    }\n\n    //! Returns true if the arena is active (initialized); false otherwise.\n    //! The name was chosen to match a task_scheduler_init method with the same semantics.\n    bool is_active() const { return my_initialized; }\n\n    //! Enqueues a task into the arena to process a functor, and immediately returns.\n    //! Does not require the calling thread to join the arena\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename F>\n    void enqueue( F&& f ) {\n        enqueue_impl(std::forward<F>(f));\n    }\n#else\n    template<typename F>\n    void enqueue( const F& f ) {\n        enqueue_impl(f);\n    }\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueues a task with priority p into the arena to process a functor f, and immediately returns.\n    //! Does not require the calling thread to join the arena\n    template<typename F>\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void enqueue( F&& f, priority_t p ) {\n        __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\");\n        enqueue_impl(std::forward<F>(f), p);\n    }\n#else\n    void enqueue( const F& f, priority_t p ) {\n        __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\");\n        enqueue_impl(f,p);\n    }\n#endif\n#endif// __TBB_TASK_PRIORITY\n\n    //! Joins the arena and executes a mutable functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type execute(F& f) {\n        return execute_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n    //! Joins the arena and executes a constant functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type execute(const F& f) {\n        return execute_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n#if __TBB_EXTRA_DEBUG\n    //! Wait for all work in the arena to be completed\n    //! Even submitted by other application threads\n    //! Joins arena if/when possible (in the same way as execute())\n    void debug_wait_until_empty() {\n        initialize();\n        internal_wait();\n    }\n#endif //__TBB_EXTRA_DEBUG\n\n    //! Returns the index, aka slot number, of the calling thread in its current arena\n    //! This method is deprecated and replaced with this_task_arena::current_thread_index()\n    inline static int current_thread_index() {\n        return internal_current_slot();\n    }\n\n    //! Returns the maximal number of threads that can work inside the arena\n    inline int max_concurrency() const {\n        // Handle special cases inside the library\n        return (my_max_concurrency>1) ? my_max_concurrency : internal_max_concurrency(this);\n    }\n};\n\n#if __TBB_TASK_ISOLATION\nnamespace this_task_arena {\n    //! Executes a mutable functor in isolation within the current task arena.\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type isolate(F& f) {\n        return internal::isolate_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n\n    //! Executes a constant functor in isolation within the current task arena.\n    //! Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).\n    template<typename F>\n    typename internal::return_type_or_void<F>::type isolate(const F& f) {\n        return internal::isolate_impl<typename internal::return_type_or_void<F>::type>(f);\n    }\n}\n#endif /* __TBB_TASK_ISOLATION */\n} // namespace interfaceX\n\nusing interface7::task_arena;\n#if __TBB_TASK_ISOLATION\nnamespace this_task_arena {\n    using namespace interface7::this_task_arena;\n}\n#endif /* __TBB_TASK_ISOLATION */\n\nnamespace this_task_arena {\n    //! Returns the index, aka slot number, of the calling thread in its current arena\n    inline int current_thread_index() {\n        int idx = tbb::task_arena::current_thread_index();\n        return idx == -1 ? tbb::task_arena::not_initialized : idx;\n    }\n\n    //! Returns the maximal number of threads that can work inside the arena\n    inline int max_concurrency() {\n        return tbb::task_arena::internal_max_concurrency(NULL);\n    }\n} // namespace this_task_arena\n\n} // namespace tbb\n\n#endif /* __TBB_task_arena_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/task_group.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_group_H\n#define __TBB_task_group_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n\n#if __TBB_TASK_GROUP_CONTEXT\n\nnamespace tbb {\n\nnamespace internal {\n    template<typename F> class task_handle_task;\n}\n\nclass task_group;\nclass structured_task_group;\n\ntemplate<typename F>\nclass task_handle : internal::no_assign {\n    template<typename _F> friend class internal::task_handle_task;\n    friend class task_group;\n    friend class structured_task_group;\n\n    static const intptr_t scheduled = 0x1;\n\n    F my_func;\n    intptr_t my_state;\n\n    void mark_scheduled () {\n        // The check here is intentionally lax to avoid the impact of interlocked operation\n        if ( my_state & scheduled )\n            internal::throw_exception( internal::eid_invalid_multiple_scheduling );\n        my_state |= scheduled;\n    }\npublic:\n    task_handle( const F& f ) : my_func(f), my_state(0) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    task_handle( F&& f ) : my_func( std::move(f)), my_state(0) {}\n#endif\n\n    void operator() () const { my_func(); }\n};\n\nenum task_group_status {\n    not_complete,\n    complete,\n    canceled\n};\n\nnamespace internal {\n\ntemplate<typename F>\nclass task_handle_task : public task {\n    task_handle<F>& my_handle;\n    task* execute() __TBB_override {\n        my_handle();\n        return NULL;\n    }\npublic:\n    task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }\n};\n\nclass task_group_base : internal::no_copy {\nprotected:\n    empty_task* my_root;\n    task_group_context my_context;\n\n    task& owner () { return *my_root; }\n\n    template<typename F>\n    task_group_status internal_run_and_wait( F& f ) {\n        class ref_count_guard : internal::no_copy {\n            task& my_task;\n        public:\n            ref_count_guard( task& t ) : my_task(t) {\n                my_task.increment_ref_count();\n            }\n            ~ref_count_guard() {\n                my_task.decrement_ref_count();\n            }\n        };\n        __TBB_TRY {\n            if ( !my_context.is_group_execution_cancelled() ) {\n                // We need to increase the reference count of the root task to notify waiters that\n                // this task group has some work in progress.\n                ref_count_guard guard(*my_root);\n                f();\n            }\n        } __TBB_CATCH( ... ) {\n            my_context.register_pending_exception();\n        }\n        return wait();\n    }\n\n    template<typename Task, typename F>\n    void internal_run( __TBB_FORWARDING_REF(F) f ) {\n        owner().spawn( *new( owner().allocate_additional_child_of(*my_root) ) Task( internal::forward<F>(f) ));\n    }\n\npublic:\n    task_group_base( uintptr_t traits = 0 )\n        : my_context(task_group_context::bound, task_group_context::default_traits | traits)\n    {\n        my_root = new( task::allocate_root(my_context) ) empty_task;\n        my_root->set_ref_count(1);\n    }\n\n    ~task_group_base() __TBB_NOEXCEPT(false) {\n        if( my_root->ref_count() > 1 ) {\n            bool stack_unwinding_in_progress = std::uncaught_exception();\n            // Always attempt to do proper cleanup to avoid inevitable memory corruption\n            // in case of missing wait (for the sake of better testability & debuggability)\n            if ( !is_canceling() )\n                cancel();\n            __TBB_TRY {\n                my_root->wait_for_all();\n            } __TBB_CATCH (...) {\n                task::destroy(*my_root);\n                __TBB_RETHROW();\n            }\n            task::destroy(*my_root);\n            if ( !stack_unwinding_in_progress )\n                internal::throw_exception( internal::eid_missing_wait );\n        }\n        else {\n            task::destroy(*my_root);\n        }\n    }\n\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< internal::task_handle_task<F> >( h );\n    }\n\n    task_group_status wait() {\n        __TBB_TRY {\n            my_root->wait_for_all();\n        } __TBB_CATCH( ... ) {\n            my_context.reset();\n            __TBB_RETHROW();\n        }\n        if ( my_context.is_group_execution_cancelled() ) {\n            // TODO: the reset method is not thread-safe. Ensure the correct behavior.\n            my_context.reset();\n            return canceled;\n        }\n        return complete;\n    }\n\n    bool is_canceling() {\n        return my_context.is_group_execution_cancelled();\n    }\n\n    void cancel() {\n        my_context.cancel_group_execution();\n    }\n}; // class task_group_base\n\n} // namespace internal\n\nclass task_group : public internal::task_group_base {\npublic:\n    task_group () : task_group_base( task_group_context::concurrent_wait ) {}\n\n#if __SUNPRO_CC\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< internal::task_handle_task<F> >( h );\n    }\n#else\n    using task_group_base::run;\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename F>\n    void run( F&& f ) {\n        internal_run< internal::function_task< typename internal::strip<F>::type > >( std::forward< F >(f) );\n    }\n#else\n    template<typename F>\n    void run(const F& f) {\n        internal_run<internal::function_task<F> >(f);\n    }\n#endif\n\n    template<typename F>\n    task_group_status run_and_wait( const F& f ) {\n        return internal_run_and_wait<const F>( f );\n    }\n\n    // TODO: add task_handle rvalues support\n    template<typename F>\n    task_group_status run_and_wait( task_handle<F>& h ) {\n      h.mark_scheduled();\n      return internal_run_and_wait< task_handle<F> >( h );\n    }\n}; // class task_group\n\nclass structured_task_group : public internal::task_group_base {\npublic:\n    // TODO: add task_handle rvalues support\n    template<typename F>\n    task_group_status run_and_wait ( task_handle<F>& h ) {\n        h.mark_scheduled();\n        return internal_run_and_wait< task_handle<F> >( h );\n    }\n\n    task_group_status wait() {\n        task_group_status res = task_group_base::wait();\n        my_root->set_ref_count(1);\n        return res;\n    }\n}; // class structured_task_group\n\ninline\nbool is_current_task_group_canceling() {\n    return task::self().is_cancelled();\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<class F>\ntask_handle< typename internal::strip<F>::type > make_task( F&& f ) {\n    return task_handle< typename internal::strip<F>::type >( std::forward<F>(f) );\n}\n#else\ntemplate<class F>\ntask_handle<F> make_task( const F& f ) {\n    return task_handle<F>( f );\n}\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_task_group_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/task_scheduler_init.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_scheduler_init_H\n#define __TBB_task_scheduler_init_H\n\n#include \"tbb_stddef.h\"\n#include \"limits.h\"\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n#include <new> // nothrow_t\n#endif\n\nnamespace tbb {\n\ntypedef std::size_t stack_size_type;\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class scheduler;\n} // namespace internal\n//! @endcond\n\n//! Class delimiting the scope of task scheduler activity.\n/** A thread can construct a task_scheduler_init object and keep it alive\n    while it uses TBB's tasking subsystem (including parallel algorithms).\n\n    This class allows to customize properties of the TBB task pool to some extent.\n    For example it can limit concurrency level of parallel work initiated by the\n    given thread. It also can be used to specify stack size of the TBB worker threads,\n    though this setting is not effective if the thread pool has already been created.\n\n    If a parallel construct is used without task_scheduler_init object previously\n    created, the scheduler will be initialized automatically with default settings,\n    and will persist until this thread exits. Default concurrency level is defined\n    as described in task_scheduler_init::initialize().\n    @ingroup task_scheduling */\nclass task_scheduler_init: internal::no_copy {\n    enum ExceptionPropagationMode {\n        propagation_mode_exact = 1u,\n        propagation_mode_captured = 2u,\n        propagation_mode_mask = propagation_mode_exact | propagation_mode_captured\n    };\n\n    /** NULL if not currently initialized. */\n    internal::scheduler* my_scheduler;\n\n    bool internal_terminate( bool blocking );\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    bool __TBB_EXPORTED_METHOD internal_blocking_terminate( bool throwing );\n#endif\npublic:\n\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1;\n\n    //! Argument to initialize() or constructor that causes initialization to be deferred.\n    static const int deferred = -2;\n\n    //! Ensure that scheduler exists for this thread\n    /** A value of -1 lets TBB decide on the number of threads, which is usually\n        maximal hardware concurrency for this process, that is the number of logical\n        CPUs on the machine (possibly limited by the processor affinity mask of this\n        process (Windows) or of this thread (Linux, FreeBSD). It is preferable option\n        for production code because it helps to avoid nasty surprises when several\n        TBB based components run side-by-side or in a nested fashion inside the same\n        process.\n\n        The number_of_threads is ignored if any other task_scheduler_inits\n        currently exist.  A thread may construct multiple task_scheduler_inits.\n        Doing so does no harm because the underlying scheduler is reference counted. */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );\n\n    //! The overloaded method with stack size parameter\n    /** Overloading is necessary to preserve ABI compatibility */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads, stack_size_type thread_stack_size );\n\n    //! Inverse of method initialize.\n    void __TBB_EXPORTED_METHOD terminate();\n\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n#if TBB_USE_EXCEPTIONS\n    //! terminate() that waits for worker threads termination. Throws exception on error.\n    void blocking_terminate() {\n        internal_blocking_terminate( /*throwing=*/true );\n    }\n#endif\n    //! terminate() that waits for worker threads termination. Returns false on error.\n    bool blocking_terminate(const std::nothrow_t&) __TBB_NOEXCEPT(true) {\n        return internal_blocking_terminate( /*throwing=*/false );\n    }\n#endif // __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n\n    //! Shorthand for default constructor followed by call to initialize(number_of_threads).\n    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)\n    {\n        // Two lowest order bits of the stack size argument may be taken to communicate\n        // default exception propagation mode of the client to be used when the\n        // client manually creates tasks in the master thread and does not use\n        // explicit task group context object. This is necessary because newer\n        // TBB binaries with exact propagation enabled by default may be used\n        // by older clients that expect tbb::captured_exception wrapper.\n        // All zeros mean old client - no preference.\n        __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), \"Requested stack size is not aligned\" );\n#if TBB_USE_EXCEPTIONS\n        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;\n#endif /* TBB_USE_EXCEPTIONS */\n        initialize( number_of_threads, thread_stack_size );\n    }\n\n    //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.\n    ~task_scheduler_init() {\n        if( my_scheduler )\n            terminate();\n        internal::poison_pointer( my_scheduler );\n    }\n    //! Returns the number of threads TBB scheduler would create if initialized by default.\n    /** Result returned by this method does not depend on whether the scheduler\n        has already been initialized.\n\n        Because tbb 2.0 does not support blocking tasks yet, you may use this method\n        to boost the number of threads in the tbb's internal pool, if your tasks are\n        doing I/O operations. The optimal number of additional threads depends on how\n        much time your tasks spend in the blocked state.\n\n        Before TBB 3.0 U4 this method returned the number of logical CPU in the\n        system. Currently on Windows, Linux and FreeBSD it returns the number of\n        logical CPUs available to the current process in accordance with its affinity\n        mask.\n\n        NOTE: The return value of this method never changes after its first invocation.\n        This means that changes in the process affinity mask that took place after\n        this method was first invoked will not affect the number of worker threads\n        in the TBB worker threads pool. */\n    static int __TBB_EXPORTED_FUNC default_num_threads ();\n\n    //! Returns true if scheduler is active (initialized); false otherwise\n    bool is_active() const { return my_scheduler != NULL; }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_task_scheduler_init_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/task_scheduler_observer.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_task_scheduler_observer_H\n#define __TBB_task_scheduler_observer_H\n\n#include \"atomic.h\"\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\n#include \"task_arena.h\"\n#endif\n\n#if __TBB_SCHEDULER_OBSERVER\n\nnamespace tbb {\nnamespace interface6 {\nclass task_scheduler_observer;\n}\nnamespace internal {\n\nclass observer_proxy;\nclass observer_list;\n\nclass task_scheduler_observer_v3 {\n    friend class observer_proxy;\n    friend class observer_list;\n    friend class interface6::task_scheduler_observer;\n\n    //! Pointer to the proxy holding this observer.\n    /** Observers are proxied by the scheduler to maintain persistent lists of them. **/\n    observer_proxy* my_proxy;\n\n    //! Counter preventing the observer from being destroyed while in use by the scheduler.\n    /** Valid only when observation is on. **/\n    atomic<intptr_t> my_busy_count;\n\npublic:\n    //! Enable or disable observation\n    /** For local observers the method can be used only when the current thread\n        has the task scheduler initialized or is attached to an arena.\n\n        Repeated calls with the same state are no-ops. **/\n    void __TBB_EXPORTED_METHOD observe( bool state=true );\n\n    //! Returns true if observation is enabled, false otherwise.\n    bool is_observing() const {return my_proxy!=NULL;}\n\n    //! Construct observer with observation disabled.\n    task_scheduler_observer_v3() : my_proxy(NULL) { my_busy_count.store<relaxed>(0); }\n\n    //! Entry notification\n    /** Invoked from inside observe(true) call and whenever a worker enters the arena\n        this observer is associated with. If a thread is already in the arena when\n        the observer is activated, the entry notification is called before it\n        executes the first stolen task.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_entry( bool /*is_worker*/ ) {}\n\n    //! Exit notification\n    /** Invoked from inside observe(false) call and whenever a worker leaves the\n        arena this observer is associated with.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_exit( bool /*is_worker*/ ) {}\n\n    //! Destructor automatically switches observation off if it is enabled.\n    virtual ~task_scheduler_observer_v3() { if(my_proxy) observe(false);}\n};\n\n} // namespace internal\n\n#if __TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION\nnamespace interface6 {\nclass task_scheduler_observer : public internal::task_scheduler_observer_v3 {\n    friend class internal::task_scheduler_observer_v3;\n    friend class internal::observer_proxy;\n    friend class internal::observer_list;\n\n    /** Negative numbers with the largest absolute value to minimize probability\n        of coincidence in case of a bug in busy count usage. **/\n    // TODO: take more high bits for version number\n    static const intptr_t v6_trait = (intptr_t)((~(uintptr_t)0 >> 1) + 1);\n\n    //! contains task_arena pointer or tag indicating local or global semantics of the observer\n    intptr_t my_context_tag;\n    enum { global_tag = 0, implicit_tag = 1 };\n\npublic:\n    //! Construct local or global observer in inactive state (observation disabled).\n    /** For a local observer entry/exit notifications are invoked whenever a worker\n        thread joins/leaves the arena of the observer's owner thread. If a thread is\n        already in the arena when the observer is activated, the entry notification is\n        called before it executes the first stolen task. **/\n    /** TODO: Obsolete.\n        Global observer semantics is obsolete as it violates master thread isolation\n        guarantees and is not composable. Thus the current default behavior of the\n        constructor is obsolete too and will be changed in one of the future versions\n        of the library. **/\n    explicit task_scheduler_observer( bool local = false ) {\n#if  __TBB_ARENA_OBSERVER\n        my_context_tag = local? implicit_tag : global_tag;\n#else\n        __TBB_ASSERT_EX( !local, NULL );\n        my_context_tag = global_tag;\n#endif\n    }\n\n#if  __TBB_ARENA_OBSERVER\n    //! Construct local observer for a given arena in inactive state (observation disabled).\n    /** entry/exit notifications are invoked whenever a thread joins/leaves arena.\n        If a thread is already in the arena when the observer is activated, the entry notification\n        is called before it executes the first stolen task. **/\n    explicit task_scheduler_observer( task_arena & a) {\n        my_context_tag = (intptr_t)&a;\n    }\n#endif /* __TBB_ARENA_OBSERVER */\n\n    /** Destructor protects instance of the observer from concurrent notification.\n       It is recommended to disable observation before destructor of a derived class starts,\n       otherwise it can lead to concurrent notification callback on partly destroyed object **/\n    virtual ~task_scheduler_observer() { if(my_proxy) observe(false); }\n\n    //! Enable or disable observation\n    /** Warning: concurrent invocations of this method are not safe.\n        Repeated calls with the same state are no-ops. **/\n    void observe( bool state=true ) {\n        if( state && !my_proxy ) {\n            __TBB_ASSERT( !my_busy_count, \"Inconsistent state of task_scheduler_observer instance\");\n            my_busy_count.store<relaxed>(v6_trait);\n        }\n        internal::task_scheduler_observer_v3::observe(state);\n    }\n\n#if  __TBB_SLEEP_PERMISSION\n    //! Return commands for may_sleep()\n    enum { keep_awake = false, allow_sleep = true };\n\n    //! The callback can be invoked by a worker thread before it goes to sleep.\n    /** If it returns false ('keep_awake'), the thread will keep spinning and looking for work.\n        It will not be called for master threads. **/\n    virtual bool may_sleep() { return allow_sleep; }\n#endif /*__TBB_SLEEP_PERMISSION*/\n};\n\n} //namespace interface6\nusing interface6::task_scheduler_observer;\n#else /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/\ntypedef tbb::internal::task_scheduler_observer_v3 task_scheduler_observer;\n#endif /*__TBB_ARENA_OBSERVER || __TBB_SLEEP_PERMISSION*/\n\n} // namespace tbb\n\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#endif /* __TBB_task_scheduler_observer_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_H\n#define __TBB_tbb_H\n\n/**\n    This header bulk-includes declarations or definitions of all the functionality\n    provided by TBB (save for malloc dependent headers).\n\n    If you use only a few TBB constructs, consider including specific headers only.\n    Any header listed below can be included independently of others.\n**/\n\n#if TBB_PREVIEW_AGGREGATOR\n#include \"aggregator.h\"\n#endif\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"blocked_range.h\"\n#include \"blocked_range2d.h\"\n#include \"blocked_range3d.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"combinable.h\"\n#include \"concurrent_hash_map.h\"\n#if TBB_PREVIEW_CONCURRENT_LRU_CACHE\n#include \"concurrent_lru_cache.h\"\n#endif\n#include \"concurrent_priority_queue.h\"\n#include \"concurrent_queue.h\"\n#include \"concurrent_unordered_map.h\"\n#include \"concurrent_unordered_set.h\"\n#include \"concurrent_vector.h\"\n#include \"critical_section.h\"\n#include \"enumerable_thread_specific.h\"\n#include \"flow_graph.h\"\n#if TBB_PREVIEW_GLOBAL_CONTROL\n#include \"global_control.h\"\n#endif\n#include \"mutex.h\"\n#include \"null_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n#include \"parallel_for_each.h\"\n#include \"parallel_invoke.h\"\n#include \"parallel_reduce.h\"\n#include \"parallel_scan.h\"\n#include \"parallel_sort.h\"\n#include \"partitioner.h\"\n#include \"pipeline.h\"\n#include \"queuing_mutex.h\"\n#include \"queuing_rw_mutex.h\"\n#include \"reader_writer_lock.h\"\n#include \"recursive_mutex.h\"\n#include \"spin_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"task.h\"\n#include \"task_arena.h\"\n#include \"task_group.h\"\n#include \"task_scheduler_init.h\"\n#include \"task_scheduler_observer.h\"\n#include \"tbb_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_thread.h\"\n#include \"tick_count.h\"\n\n#endif /* __TBB_tbb_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_allocator.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_allocator_H\n#define __TBB_tbb_allocator_H\n\n#include \"tbb_stddef.h\"\n#include <new>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n#include <cstring>\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Deallocates memory using FreeHandler\n    /** The function uses scalable_free if scalable allocator is available and free if not*/\n    void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p );\n\n    //! Allocates memory using MallocHandler\n    /** The function uses scalable_malloc if scalable allocator is available and malloc if not*/\n    void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );\n\n    //! Returns true if standard malloc/free are used to work with memory.\n    bool __TBB_EXPORTED_FUNC is_malloc_used_v3();\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class selects the best memory allocation mechanism available\n    from scalable_malloc and standard malloc.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass tbb_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n\n    //! Specifies current allocator\n    enum malloc_type {\n        scalable,\n        standard\n    };\n\n    tbb_allocator() throw() {}\n    tbb_allocator( const tbb_allocator& ) throw() {}\n    template<typename U> tbb_allocator(const tbb_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        return pointer(internal::allocate_via_handler_v3( n * sizeof(value_type) ));\n    }\n\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n\n    //! Returns current allocator\n    static malloc_type allocator_type() {\n        return internal::is_malloc_used_v3() ? standard : scalable;\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass tbb_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return false;}\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class is an adapter over an actual allocator that fills the allocation\n    using memset function with template argument C as the value.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate <typename T, template<typename X> class Allocator = tbb_allocator>\nclass zero_allocator : public Allocator<T>\n{\npublic:\n    typedef Allocator<T> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    typedef typename base_allocator_type::reference reference;\n    typedef typename base_allocator_type::const_reference const_reference;\n    typedef typename base_allocator_type::size_type size_type;\n    typedef typename base_allocator_type::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n\n    zero_allocator() throw() { }\n    zero_allocator(const zero_allocator &a) throw() : base_allocator_type( a ) { }\n    template<typename U>\n    zero_allocator(const zero_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }\n\n    pointer allocate(const size_type n, const void *hint = 0 ) {\n        pointer ptr = base_allocator_type::allocate( n, hint );\n        std::memset( static_cast<void*>(ptr), 0, n * sizeof(value_type) );\n        return ptr;\n    }\n};\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<template<typename T> class Allocator>\nclass zero_allocator<void, Allocator> : public Allocator<void> {\npublic:\n    typedef Allocator<void> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n};\n\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator==( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);\n}\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator!=( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_allocator_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_config.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_config_H\n#define __TBB_tbb_config_H\n\n/** This header is supposed to contain macro definitions and C style comments only.\n    The macros defined here are intended to control such aspects of TBB build as\n    - presence of compiler features\n    - compilation modes\n    - feature sets\n    - known compiler/platform issues\n**/\n\n/* This macro marks incomplete code or comments describing ideas which are considered for the future.\n * See also for plain comment with TODO and FIXME marks for small improvement opportunities.\n */\n#define __TBB_TODO 0\n\n/* Check which standard library we use. */\n/* __TBB_SYMBOL is defined only while processing exported symbols list where C++ is not allowed. */\n#if !defined(__TBB_SYMBOL) && !__TBB_CONFIG_PREPROC_ONLY\n    #include <cstddef>\n#endif\n\n// note that when ICC or Clang is in use, __TBB_GCC_VERSION might not fully match\n// the actual GCC version on the system.\n#define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n\n// Since GNU libstdc++ does not have a convenient macro for its version,\n// we rely on the version of GCC or the user-specified macro below.\n// The format of TBB_USE_GLIBCXX_VERSION should match the __TBB_GCC_VERSION above,\n// e.g. it should be set to 40902 for libstdc++ coming with GCC 4.9.2.\n#ifdef TBB_USE_GLIBCXX_VERSION\n#define __TBB_GLIBCXX_VERSION TBB_USE_GLIBCXX_VERSION\n#elif __GLIBCPP__ || __GLIBCXX__\n#define __TBB_GLIBCXX_VERSION __TBB_GCC_VERSION\n//TODO: analyze __GLIBCXX__ instead of __TBB_GCC_VERSION ?\n#endif\n\n#if __clang__\n    /** according to clang documentation, version can be vendor specific **/\n    #define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)\n#endif\n\n/** Target OS is either iOS* or iOS* simulator **/\n#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__\n    #define __TBB_IOS 1\n#endif\n\n/** Preprocessor symbols to determine HW architecture **/\n\n#if _WIN32||_WIN64\n#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support\n#       define __TBB_x86_64 1\n#   elif defined(_M_IA64)\n#       define __TBB_ipf 1\n#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#else /* Assume generic Unix */\n#   if !__linux__ && !__APPLE__\n#       define __TBB_generic_os 1\n#   endif\n#   if __TBB_IOS\n#       define __TBB_generic_arch 1\n#   elif __x86_64__\n#       define __TBB_x86_64 1\n#   elif __ia64__\n#       define __TBB_ipf 1\n#   elif __i386__||__i386  // __i386 is for Sun OS\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#endif\n\n#if __MIC__ || __MIC2__\n#define __TBB_DEFINE_MIC 1\n#endif\n\n#define __TBB_TSX_AVAILABLE  ((__TBB_x86_32 || __TBB_x86_64) && !__TBB_DEFINE_MIC)\n\n/** Presence of compiler features **/\n\n#if __INTEL_COMPILER == 9999 && __INTEL_COMPILER_BUILD_DATE == 20110811\n/* Intel(R) Composer XE 2011 Update 6 incorrectly sets __INTEL_COMPILER. Fix it. */\n    #undef __INTEL_COMPILER\n    #define __INTEL_COMPILER 1210\n#endif\n\n#if __clang__ && !__INTEL_COMPILER\n#define __TBB_USE_OPTIONAL_RTTI __has_feature(cxx_rtti)\n#elif defined(_CPPRTTI)\n#define __TBB_USE_OPTIONAL_RTTI 1\n#else\n#define __TBB_USE_OPTIONAL_RTTI (__GXX_RTTI || __RTTI || __INTEL_RTTI__)\n#endif\n\n#if __TBB_GCC_VERSION >= 40400 && !defined(__INTEL_COMPILER)\n    /** warning suppression pragmas available in GCC since 4.4 **/\n    #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1\n#endif\n\n/* Select particular features of C++11 based on compiler version.\n   ICC 12.1 (Linux*), GCC 4.3 and higher, clang 2.9 and higher\n   set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.\n\n   Compilers that mimics other compilers (ICC, clang) must be processed before\n   compilers they mimic (GCC, MSVC).\n\n   TODO: The following conditions should be extended when new compilers/runtimes\n   support added.\n */\n\n/**\n    __TBB_CPP11_PRESENT macro indicates that the compiler supports vast majority of C++11 features.\n    Depending on the compiler, some features might still be unsupported or work incorrectly.\n    Use it when enabling C++11 features individually is not practical, and be aware that\n    some \"good enough\" compilers might be excluded. **/\n#define __TBB_CPP11_PRESENT (__cplusplus >= 201103L || _MSC_VER >= 1900)\n\n/** C++11 mode detection macros for Intel(R) C++ Compiler (enabled by -std=c++XY option):\n    __INTEL_CXX11_MODE__ for version >=13.0 (not available for ICC 15.0 if -std=c++14 is used),\n    __STDC_HOSTED__ for version >=12.0 (useful only on Windows),\n    __GXX_EXPERIMENTAL_CXX0X__ for version >=12.0 on Linux and macOS. **/\n#if __INTEL_COMPILER &&  !__INTEL_CXX11_MODE__\n    // __INTEL_CXX11_MODE__ is not set, try to deduce it\n    #define __INTEL_CXX11_MODE__ (__GXX_EXPERIMENTAL_CXX0X__ || (_MSC_VER && __STDC_HOSTED__))\n#endif\n\n// Intel(R) C++ Compiler offloading API to the Intel(R) Graphics Technology presence macro\n// TODO: add support for ICC 15.00 _GFX_enqueue API and then decrease Intel C++ Compiler supported version\n// TODO: add linux support and restict it with (__linux__ && __TBB_x86_64 && !__ANDROID__) macro\n#if __INTEL_COMPILER >= 1600 && _WIN32\n#define __TBB_GFX_PRESENT 1\n#endif\n\n#if __INTEL_COMPILER && (!_MSC_VER || __INTEL_CXX11_MODE__)\n    //  On Windows, C++11 features supported by Visual Studio 2010 and higher are enabled by default,\n    //  so in absence of /Qstd= use MSVC branch for feature detection.\n    //  On other platforms, no -std= means C++03.\n\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (__INTEL_CXX11_MODE__ && __VARIADIC_TEMPLATES)\n    // Both r-value reference support in compiler and std::move/std::forward\n    // presence in C++ standard library is checked.\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  ((_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40500 || _LIBCPP_VERSION)) && __INTEL_COMPILER >= 1400)\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1900 || __TBB_GCC_VERSION >= 40600 || __clang__))\n    #if  _MSC_VER >= 1600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 ( __INTEL_COMPILER > 1300                                                \\\n                                                            /*ICC 12.1 Upd 10 and 13 beta Upd 2 fixed exception_ptr linking  issue*/ \\\n                                                            || (__INTEL_COMPILER == 1300 && __INTEL_COMPILER_BUILD_DATE >= 20120530) \\\n                                                            || (__INTEL_COMPILER == 1210 && __INTEL_COMPILER_BUILD_DATE >= 20120410) )\n    /** libstdc++ that comes with GCC 4.6 use C++11 features not supported by ICC 12.1.\n     *  Because of that ICC 12.1 does not support C++11 mode with gcc 4.6 (or higher),\n     *  and therefore does not define __GXX_EXPERIMENTAL_CXX0X__ macro **/\n    #elif __TBB_GLIBCXX_VERSION >= 40404 && __TBB_GLIBCXX_VERSION < 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1200)\n    #elif __TBB_GLIBCXX_VERSION >= 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1300)\n    #elif _LIBCPP_VERSION\n        #define __TBB_EXCEPTION_PTR_PRESENT                 __GXX_EXPERIMENTAL_CXX0X__\n    #else\n        #define __TBB_EXCEPTION_PTR_PRESENT                 0\n    #endif\n    #define __TBB_STATIC_ASSERT_PRESENT                     (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40300 || _LIBCPP_VERSION))\n    #if (__clang__ && __INTEL_COMPILER > 1400)\n        /* Older versions of Intel C++ Compiler do not have __has_include */\n        #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n            #define __TBB_INITIALIZER_LISTS_PRESENT         1\n        #endif\n    #else\n        #define __TBB_INITIALIZER_LISTS_PRESENT             (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION))\n    #endif\n    #define __TBB_CONSTEXPR_PRESENT                         (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)\n    /** ICC seems to disable support of noexcept event in c++11 when compiling in compatibility mode for gcc <4.6 **/\n    #define __TBB_NOEXCEPT_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION || _MSC_VER))\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1310 && (__TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))\n    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_OVERRIDE_PRESENT                          (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400)\n    #define __TBB_ALIGNAS_PRESENT                           (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1500)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#elif __clang__\n/** TODO: these options need to be rechecked **/\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __has_feature(__cxx_variadic_templates__)\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__has_feature(__cxx_rvalue_references__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40500))\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     __has_feature(cxx_implicit_moves)\n/** TODO: extend exception_ptr related conditions to cover libstdc++ **/\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (__cplusplus >= 201103L && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))\n    #define __TBB_STATIC_ASSERT_PRESENT                     __has_feature(__cxx_static_assert__)\n    /**Clang (preprocessor) has problems with dealing with expression having __has_include in #ifs\n     * used inside C++ code. (At least version that comes with OS X 10.8 : Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)) **/\n    #if (__GXX_EXPERIMENTAL_CXX0X__ && __has_include(<tuple>))\n        #define __TBB_CPP11_TUPLE_PRESENT                   1\n    #endif\n    #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n        #define __TBB_INITIALIZER_LISTS_PRESENT             1\n    #endif\n    #define __TBB_CONSTEXPR_PRESENT                         __has_feature(__cxx_constexpr__)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__has_feature(__cxx_defaulted_functions__) && __has_feature(__cxx_deleted_functions__))\n    /**For some unknown reason  __has_feature(__cxx_noexcept) does not yield true for all cases. Compiler bug ? **/\n    #define __TBB_NOEXCEPT_PRESENT                          (__cplusplus >= 201103L)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__has_feature(__cxx_range_for__) && (_LIBCPP_VERSION || __TBB_GLIBCXX_VERSION >= 40600))\n    #define __TBB_CPP11_AUTO_PRESENT                        __has_feature(__cxx_auto_type__)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    __has_feature(__cxx_decltype__)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     __has_feature(cxx_lambdas)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  __has_feature(cxx_default_function_template_args)\n    #define __TBB_OVERRIDE_PRESENT                          __has_feature(cxx_override_control)\n    #define __TBB_ALIGNAS_PRESENT                           __has_feature(cxx_alignas)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            __has_feature(cxx_alias_templates)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#elif __GNUC__\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          __GXX_EXPERIMENTAL_CXX0X__\n    #define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    /** __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 here is a substitution for _GLIBCXX_ATOMIC_BUILTINS_4, which is a prerequisite\n        for exception_ptr but cannot be used in this file because it is defined in a header, not by the compiler.\n        If the compiler has no atomic intrinsics, the C++ library should not expect those as well. **/\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40404 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __TBB_STATIC_ASSERT_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    /** gcc seems have to support constexpr from 4.4 but tests in (test_atomic) seeming reasonable fail to compile prior 4.6**/\n    #define __TBB_CONSTEXPR_PRESENT                         (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_NOEXCEPT_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_AUTO_PRESENT                        (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_OVERRIDE_PRESENT                          (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_ALIGNAS_PRESENT                           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40800)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L     && __TBB_GCC_VERSION >= 50000)\n#elif _MSC_VER\n    // These definitions are also used with Intel C++ Compiler in \"default\" mode (__INTEL_CXX11_MODE__ == 0);\n    // see a comment in \"__INTEL_COMPILER\" section above.\n\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          (_MSC_VER >= 1800)\n    // Contains a workaround for ICC 13\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  (_MSC_VER >= 1700 && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1400))\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     (_MSC_VER >= 1900)\n    #define __TBB_EXCEPTION_PTR_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_STATIC_ASSERT_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                       (_MSC_VER >= 1600)\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 (_MSC_VER >= 1800)\n    #define __TBB_CONSTEXPR_PRESENT                         (_MSC_VER >= 1900)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        (_MSC_VER >= 1800)\n    #define __TBB_NOEXCEPT_PRESENT                          (_MSC_VER >= 1900)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               (_MSC_VER >= 1700)\n    #define __TBB_CPP11_AUTO_PRESENT                        (_MSC_VER >= 1600)\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    (_MSC_VER >= 1600)\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     (_MSC_VER >= 1600)\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  (_MSC_VER >= 1800)\n    #define __TBB_OVERRIDE_PRESENT                          (_MSC_VER >= 1700)\n    #define __TBB_ALIGNAS_PRESENT                           (_MSC_VER >= 1900)\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            (_MSC_VER >= 1800)\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (_MSC_VER >= 1900)\n#else\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT          0\n    #define __TBB_CPP11_RVALUE_REF_PRESENT                  0\n    #define __TBB_IMPLICIT_MOVE_PRESENT                     0\n    #define __TBB_EXCEPTION_PTR_PRESENT                     0\n    #define __TBB_STATIC_ASSERT_PRESENT                     0\n    #define __TBB_CPP11_TUPLE_PRESENT                       0\n    #define __TBB_INITIALIZER_LISTS_PRESENT                 0\n    #define __TBB_CONSTEXPR_PRESENT                         0\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT        0\n    #define __TBB_NOEXCEPT_PRESENT                          0\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT               0\n    #define __TBB_CPP11_AUTO_PRESENT                        0\n    #define __TBB_CPP11_DECLTYPE_PRESENT                    0\n    #define __TBB_CPP11_LAMBDAS_PRESENT                     0\n    #define __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT  0\n    #define __TBB_OVERRIDE_PRESENT                          0\n    #define __TBB_ALIGNAS_PRESENT                           0\n    #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT            0\n    #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT            (__cplusplus >= 201402L)\n#endif\n\n// C++11 standard library features\n\n#define __TBB_CPP11_ARRAY_PRESENT                           (_MSC_VER >= 1700 || _LIBCPP_VERSION || __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40300)\n\n#ifndef __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT\n#define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT       __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif\n#define __TBB_CPP11_VARIADIC_TUPLE_PRESENT                  (!_MSC_VER || _MSC_VER >=1800)\n\n#define __TBB_CPP11_TYPE_PROPERTIES_PRESENT                 (_LIBCPP_VERSION || _MSC_VER >= 1700 || (__TBB_GLIBCXX_VERSION >= 50000 && __GXX_EXPERIMENTAL_CXX0X__))\n#define __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT            (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40300 || _MSC_VER >= 1600)\n// GCC supported some of type properties since 4.7\n#define __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 || __TBB_CPP11_TYPE_PROPERTIES_PRESENT)\n\n// In GCC, std::move_if_noexcept appeared later than noexcept\n#define __TBB_MOVE_IF_NOEXCEPT_PRESENT                      (__TBB_NOEXCEPT_PRESENT && (__TBB_GLIBCXX_VERSION >= 40700 || _MSC_VER >= 1900 || _LIBCPP_VERSION))\n#define __TBB_ALLOCATOR_TRAITS_PRESENT                      (__cplusplus >= 201103L && _LIBCPP_VERSION  || _MSC_VER >= 1700 ||  \\\n                                                            __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GLIBCXX_VERSION >= 40700 && !(__TBB_GLIBCXX_VERSION == 40700 && __TBB_DEFINE_MIC))\n#define __TBB_MAKE_EXCEPTION_PTR_PRESENT                    (__TBB_EXCEPTION_PTR_PRESENT && (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 || _LIBCPP_VERSION))\n\n// Due to libc++ limitations in C++03 mode, do not pass rvalues to std::make_shared()\n#define __TBB_CPP11_SMART_POINTERS_PRESENT                  ( _MSC_VER >= 1600 || _LIBCPP_VERSION   \\\n                                                            || ((__cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__)  \\\n                                                            && (__TBB_GLIBCXX_VERSION>=40500 || __TBB_GLIBCXX_VERSION>=40400 && __TBB_USE_OPTIONAL_RTTI)) )\n\n#define __TBB_CPP11_FUTURE_PRESENT                          (_MSC_VER >= 1700 || __TBB_GLIBCXX_VERSION >= 40600 && _GXX_EXPERIMENTAL_CXX0X__ || _LIBCPP_VERSION)\n\n// std::swap is in <utility> only since C++11, though MSVC had it at least since VS2005\n#if _MSC_VER>=1400 || _LIBCPP_VERSION || __GXX_EXPERIMENTAL_CXX0X__\n#define __TBB_STD_SWAP_HEADER <utility>\n#else\n#define __TBB_STD_SWAP_HEADER <algorithm>\n#endif\n\n//TODO: not clear how exactly this macro affects exception_ptr - investigate\n// On linux ICC fails to find existing std::exception_ptr in libstdc++ without this define\n#if __INTEL_COMPILER && __GNUC__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\n#endif\n\n// Work around a bug in MinGW32\n#if __MINGW32__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(_GLIBCXX_ATOMIC_BUILTINS_4)\n    #define _GLIBCXX_ATOMIC_BUILTINS_4\n#endif\n\n#if __GNUC__ || __SUNPRO_CC || __IBMCPP__\n    /* ICC defines __GNUC__ and so is covered */\n    #define __TBB_ATTRIBUTE_ALIGNED_PRESENT 1\n#elif _MSC_VER && (_MSC_VER >= 1300 || __INTEL_COMPILER)\n    #define __TBB_DECLSPEC_ALIGN_PRESENT 1\n#endif\n\n/* Actually ICC supports gcc __sync_* intrinsics starting 11.1,\n * but 64 bit support for 32 bit target comes in later ones*/\n/* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */\n/* Assumed that all clang versions have these gcc compatible intrinsics. */\n#if __TBB_GCC_VERSION >= 40306 || __INTEL_COMPILER >= 1200 || __clang__\n    /** built-in atomics available in GCC since 4.1.2 **/\n    #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#if __INTEL_COMPILER >= 1200\n    /** built-in C++11 style atomics available in ICC since 12.0 **/\n    #define __TBB_ICC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#define __TBB_TSX_INTRINSICS_PRESENT ((__RTM__ || _MSC_VER>=1700 || __INTEL_COMPILER>=1300) && !__TBB_DEFINE_MIC && !__ANDROID__)\n\n/** Macro helpers **/\n#define __TBB_CONCAT_AUX(A,B) A##B\n// The additional level of indirection is needed to expand macros A and B (not to get the AB macro).\n// See [cpp.subst] and [cpp.concat] for more details.\n#define __TBB_CONCAT(A,B) __TBB_CONCAT_AUX(A,B)\n// The IGNORED argument and comma are needed to always have 2 arguments (even when A is empty).\n#define __TBB_IS_MACRO_EMPTY(A,IGNORED) __TBB_CONCAT_AUX(__TBB_MACRO_EMPTY,A)\n#define __TBB_MACRO_EMPTY 1\n\n/** User controlled TBB features & modes **/\n#ifndef TBB_USE_DEBUG\n/*\nThere are four cases that are supported:\n  1. \"_DEBUG is undefined\" means \"no debug\";\n  2. \"_DEBUG defined to something that is evaluated to 0\" (including \"garbage\", as per [cpp.cond]) means \"no debug\";\n  3. \"_DEBUG defined to something that is evaluated to a non-zero value\" means \"debug\";\n  4. \"_DEBUG defined to nothing (empty)\" means \"debug\".\n*/\n#ifdef _DEBUG\n// Check if _DEBUG is empty.\n#define __TBB_IS__DEBUG_EMPTY (__TBB_IS_MACRO_EMPTY(_DEBUG,IGNORED)==__TBB_MACRO_EMPTY)\n#if __TBB_IS__DEBUG_EMPTY\n#define TBB_USE_DEBUG 1\n#else\n#define TBB_USE_DEBUG _DEBUG\n#endif /* __TBB_IS__DEBUG_EMPTY */\n#else\n#define TBB_USE_DEBUG 0\n#endif\n#endif /* TBB_USE_DEBUG */\n\n#ifndef TBB_USE_ASSERT\n#define TBB_USE_ASSERT TBB_USE_DEBUG\n#endif /* TBB_USE_ASSERT */\n\n#ifndef TBB_USE_THREADING_TOOLS\n#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG\n#endif /* TBB_USE_THREADING_TOOLS */\n\n#ifndef TBB_USE_PERFORMANCE_WARNINGS\n#ifdef TBB_PERFORMANCE_WARNINGS\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS\n#else\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG\n#endif /* TBB_PERFORMANCE_WARNINGS */\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n\n#if __TBB_DEFINE_MIC\n    #if TBB_USE_EXCEPTIONS\n        #error The platform does not properly support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !(__EXCEPTIONS || defined(_CPPUNWIND) || __SUNPRO_CC)\n    #if TBB_USE_EXCEPTIONS\n        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !defined(TBB_USE_EXCEPTIONS)\n    #define TBB_USE_EXCEPTIONS 1\n#endif\n\n#ifndef TBB_IMPLEMENT_CPP0X\n/** By default, use C++11 classes if available **/\n    #if __clang__\n        /* Old versions of Intel C++ Compiler do not have __has_include or cannot use it in #define */\n        #if (__INTEL_COMPILER && (__INTEL_COMPILER < 1500 || __INTEL_COMPILER == 1500 && __INTEL_COMPILER_UPDATE <= 1))\n            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || !_LIBCPP_VERSION)\n        #else\n            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || (!__has_include(<thread>) && !__has_include(<condition_variable>)))\n        #endif\n    #elif __GNUC__\n        #define TBB_IMPLEMENT_CPP0X (__TBB_GCC_VERSION < 40400 || !__GXX_EXPERIMENTAL_CXX0X__)\n    #elif _MSC_VER\n        #define TBB_IMPLEMENT_CPP0X (_MSC_VER < 1700)\n    #else\n        // TODO: Reconsider general approach to be more reliable, e.g. (!(__cplusplus >= 201103L && __ STDC_HOSTED__))\n        #define TBB_IMPLEMENT_CPP0X (!__STDCPP_THREADS__)\n    #endif\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n/* TBB_USE_CAPTURED_EXCEPTION should be explicitly set to either 0 or 1, as it is used as C++ const */\n#ifndef TBB_USE_CAPTURED_EXCEPTION\n    /** IA-64 architecture pre-built TBB binaries do not support exception_ptr. **/\n    #if __TBB_EXCEPTION_PTR_PRESENT && !defined(__ia64__)\n        #define TBB_USE_CAPTURED_EXCEPTION 0\n    #else\n        #define TBB_USE_CAPTURED_EXCEPTION 1\n    #endif\n#else /* defined TBB_USE_CAPTURED_EXCEPTION */\n    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT\n        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.\n    #endif\n#endif /* defined TBB_USE_CAPTURED_EXCEPTION */\n\n/** Check whether the request to use GCC atomics can be satisfied **/\n#if TBB_USE_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT\n    #error \"GCC atomic built-ins are not supported.\"\n#endif\n\n/** Internal TBB features & modes **/\n\n/** __TBB_WEAK_SYMBOLS_PRESENT denotes that the system supports the weak symbol mechanism **/\n#ifndef __TBB_WEAK_SYMBOLS_PRESENT\n#define __TBB_WEAK_SYMBOLS_PRESENT ( !_WIN32 && !__APPLE__ && !__sun && (__TBB_GCC_VERSION >= 40000 || __INTEL_COMPILER ) )\n#endif\n\n/** __TBB_DYNAMIC_LOAD_ENABLED describes the system possibility to load shared libraries at run time **/\n#ifndef __TBB_DYNAMIC_LOAD_ENABLED\n    #define __TBB_DYNAMIC_LOAD_ENABLED 1\n#endif\n\n/** __TBB_SOURCE_DIRECTLY_INCLUDED is a mode used in whitebox testing when\n    it's necessary to test internal functions not exported from TBB DLLs\n**/\n#if (_WIN32||_WIN64) && (__TBB_SOURCE_DIRECTLY_INCLUDED || TBB_USE_PREVIEW_BINARY)\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#ifndef __TBB_COUNT_TASK_NODES\n    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT\n#endif\n\n#ifndef __TBB_TASK_GROUP_CONTEXT\n    #define __TBB_TASK_GROUP_CONTEXT 1\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#ifndef __TBB_SCHEDULER_OBSERVER\n    #define __TBB_SCHEDULER_OBSERVER 1\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#ifndef __TBB_FP_CONTEXT\n    #define __TBB_FP_CONTEXT __TBB_TASK_GROUP_CONTEXT\n#endif /* __TBB_FP_CONTEXT */\n\n#if __TBB_FP_CONTEXT && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_FP_CONTEXT requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#define __TBB_RECYCLE_TO_ENQUEUE __TBB_BUILD // keep non-official\n\n#ifndef __TBB_ARENA_OBSERVER\n    #define __TBB_ARENA_OBSERVER ((__TBB_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_ARENA_OBSERVER */\n\n#ifndef __TBB_SLEEP_PERMISSION\n    #define __TBB_SLEEP_PERMISSION ((__TBB_CPF_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_SLEEP_PERMISSION */\n\n#ifndef __TBB_TASK_ISOLATION\n    #define __TBB_TASK_ISOLATION 1\n#endif /* __TBB_TASK_ISOLATION */\n\n#if (TBB_PREVIEW_FLOW_GRAPH_TRACE || TBB_PREVIEW_ALGORITHM_TRACE)\n// Users of flow-graph and algorithm trace need to explicitly link against the preview\n// library. This prevents the linker from implicitly linking an application with a preview\n// version of TBB and unexpectedly bringing in other community preview features, which\n// might change the behavior of the application.\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif /* TBB_PREVIEW_FLOW_GRAPH_TRACE */\n\n#ifndef __TBB_ITT_STRUCTURE_API\n#define __TBB_ITT_STRUCTURE_API ( (__TBB_CPF_BUILD || TBB_PREVIEW_FLOW_GRAPH_TRACE || TBB_PREVIEW_ALGORITHM_TRACE) \\\n                                  && !(__TBB_DEFINE_MIC || __MINGW64__ || __MINGW32__) )\n#endif\n\n#if TBB_USE_EXCEPTIONS && !__TBB_TASK_GROUP_CONTEXT\n    #error TBB_USE_EXCEPTIONS requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#ifndef __TBB_TASK_PRIORITY\n    #define __TBB_TASK_PRIORITY (__TBB_TASK_GROUP_CONTEXT)\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#if TBB_PREVIEW_WAITING_FOR_WORKERS || __TBB_BUILD\n    #define __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE 1\n#endif\n\n#ifndef __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    #define __TBB_ENQUEUE_ENFORCED_CONCURRENCY 1\n#endif\n\n#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && \\\n          (_WIN32 || _WIN64 || __APPLE__ || (__linux__ && !__ANDROID__))\n    #define __TBB_SURVIVE_THREAD_SWITCH 1\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n#ifndef __TBB_DEFAULT_PARTITIONER\n#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner\n#endif\n\n#ifndef __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n#define __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES 1\n#endif\n\n#ifndef __TBB_ENABLE_RANGE_FEEDBACK\n#define __TBB_ENABLE_RANGE_FEEDBACK 0\n#endif\n\n#ifdef _VARIADIC_MAX\n    #define __TBB_VARIADIC_MAX _VARIADIC_MAX\n#else\n    #if _MSC_VER == 1700\n        #define __TBB_VARIADIC_MAX 5 // VS11 setting, issue resolved in VS12\n    #elif _MSC_VER == 1600\n        #define __TBB_VARIADIC_MAX 10 // VS10 setting\n    #else\n        #define __TBB_VARIADIC_MAX 15\n    #endif\n#endif\n\n/** __TBB_WIN8UI_SUPPORT enables support of Windows* Store Apps and limit a possibility to load\n    shared libraries at run time only from application container **/\n#if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP\n    #define __TBB_WIN8UI_SUPPORT 1\n#else\n    #define __TBB_WIN8UI_SUPPORT 0\n#endif\n\n/** Macros of the form __TBB_XXX_BROKEN denote known issues that are caused by\n    the bugs in compilers, standard or OS specific libraries. They should be\n    removed as soon as the corresponding bugs are fixed or the buggy OS/compiler\n    versions go out of the support list.\n**/\n\n#if __SIZEOF_POINTER__ < 8 && __ANDROID__ && __TBB_GCC_VERSION <= 40403 && !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8\n    /** Necessary because on Android 8-byte CAS and F&A are not available for some processor architectures,\n        but no mandatory warning message appears from GCC 4.4.3. Instead, only a linkage error occurs when\n        these atomic operations are used (such as in unit test test_atomic.exe). **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#elif __TBB_x86_32 && __TBB_GCC_VERSION == 40102 && ! __GNUC_RH_RELEASE__\n    /** GCC 4.1.2 erroneously emit call to external function for 64 bit sync_ intrinsics.\n        However these functions are not defined anywhere. It seems that this problem was fixed later on\n        and RHEL got an updated version of gcc 4.1.2. **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#endif\n\n#if __GNUC__ && __TBB_x86_64 && __INTEL_COMPILER == 1200\n    #define __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN 1\n#endif\n\n#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)\n    /** Necessary to avoid ICL error (or warning in non-strict mode):\n        \"exception specification for implicitly declared virtual destructor is\n        incompatible with that of overridden one\". **/\n    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER < 1500 || __GNUC__ && __TBB_GCC_VERSION < 40102)\n    /** gcc 3.4.6 (and earlier) and VS2005 (and earlier) do not allow declaring template class as a friend\n        of classes defined in other namespaces. **/\n    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1\n#endif\n\n#if __GLIBC__==2 && __GLIBC_MINOR__==3 ||  (__APPLE__ && ( __INTEL_COMPILER==1200 && !TBB_USE_DEBUG))\n    /** Macro controlling EH usages in TBB tests.\n        Some older versions of glibc crash when exception handling happens concurrently. **/\n    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1\n#endif\n\n#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110\n    /** That's a bug in Intel C++ Compiler 11.1.044/IA-32 architecture/Windows* OS, that leads to a worker thread crash on the thread's startup. **/\n    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1\n#endif\n\n#if __clang__ || (__GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER))\n    /** Bugs with access to nested classes declared in protected area */\n    #define __TBB_PROTECTED_NESTED_CLASS_BROKEN 1\n#endif\n\n#if __MINGW32__ && __TBB_GCC_VERSION < 40200\n    /** MinGW has a bug with stack alignment for routines invoked from MS RTLs.\n        Since GCC 4.2, the bug can be worked around via a special attribute. **/\n    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1\n#endif\n\n#if __TBB_GCC_VERSION==40300 && !__INTEL_COMPILER && !__clang__\n    /* GCC of this version may rashly ignore control dependencies */\n    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1\n#endif\n\n#if __FreeBSD__\n    /** A bug in FreeBSD 8.0 results in kernel panic when there is contention\n        on a mutex created with this attribute. **/\n    #define __TBB_PRIO_INHERIT_BROKEN 1\n\n    /** A bug in FreeBSD 8.0 results in test hanging when an exception occurs\n        during (concurrent?) object construction by means of placement new operator. **/\n    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1\n#endif /* __FreeBSD__ */\n\n#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)\n    /** The Intel C++ Compiler for IA-32 architecture (Linux* OS|macOS) crashes or generates\n        incorrect code when __asm__ arguments have a cast to volatile. **/\n    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER || __GNUC__==3 && __GNUC_MINOR__<=2)\n    /** Bug in GCC 3.2 and MSVC compilers that sometimes return 0 for __alignof(T)\n        when T has not yet been instantiated. **/\n    #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1\n#endif\n\n#if __TBB_DEFINE_MIC\n    /** Main thread and user's thread have different default thread affinity masks. **/\n    #define __TBB_MAIN_THREAD_AFFINITY_BROKEN 1\n#endif\n\n#if __GXX_EXPERIMENTAL_CXX0X__ && !defined(__EXCEPTIONS) && \\\n    ((!__INTEL_COMPILER && !__clang__ && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<40600)) || \\\n     (__INTEL_COMPILER<=1400 && (__TBB_GLIBCXX_VERSION>=40400 && __TBB_GLIBCXX_VERSION<=40801)))\n/* There is an issue for specific GCC toolchain when C++11 is enabled\n   and exceptions are disabled:\n   exceprion_ptr.h/nested_exception.h use throw unconditionally.\n   GCC can ignore 'throw' since 4.6; but with ICC the issue still exists.\n */\n    #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 1\n#endif\n\n#if __INTEL_COMPILER==1300 && __TBB_GLIBCXX_VERSION>=40700 && defined(__GXX_EXPERIMENTAL_CXX0X__)\n/* Some C++11 features used inside libstdc++ are not supported by Intel C++ Compiler. */\n    #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 1\n#endif\n\n#if (__GNUC__==4 && __GNUC_MINOR__==4 ) && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    /** excessive warnings related to strict aliasing rules in GCC 4.4 **/\n    #define __TBB_GCC_STRICT_ALIASING_BROKEN 1\n    /* topical remedy: #pragma GCC diagnostic ignored \"-Wstrict-aliasing\" */\n    #if !__TBB_GCC_WARNING_SUPPRESSION_PRESENT\n        #error Warning suppression is not supported, while should.\n    #endif\n#endif\n\n/* In a PIC mode some versions of GCC 4.1.2 generate incorrect inlined code for 8 byte __sync_val_compare_and_swap intrinsic */\n#if __TBB_GCC_VERSION == 40102 && __PIC__ && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    #define __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN 1\n#endif\n\n#if __TBB_x86_32 && ( __INTEL_COMPILER || (__GNUC__==5 && __GNUC_MINOR__>=2 && __GXX_EXPERIMENTAL_CXX0X__) \\\n    || (__GNUC__==3 && __GNUC_MINOR__==3) || (__MINGW32__ && __GNUC__==4 && __GNUC_MINOR__==5) || __SUNPRO_CC )\n    // Some compilers for IA-32 architecture fail to provide 8-byte alignment of objects on the stack,\n    // even if the object specifies 8-byte alignment. On such platforms, the implementation\n    // of 64 bit atomics for IA-32 architecture (e.g. atomic<long long>) use different tactics\n    // depending upon whether the object is properly aligned or not.\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 1\n#else\n    // Define to 0 explicitly because the macro is used in a compiled code of test_atomic\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 0\n#endif\n\n#if __GNUC__ && !__INTEL_COMPILER && !__clang__ && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && __TBB_GCC_VERSION < 40700\n    #define __TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN 1\n#endif\n\n#if _MSC_VER && _MSC_VER <= 1800 && !__INTEL_COMPILER\n    // With MSVC, when an array is passed by const reference to a template function,\n    // constness from the function parameter may get propagated to the template parameter.\n    #define __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 1\n#endif\n\n// A compiler bug: a disabled copy constructor prevents use of the moving constructor\n#define __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN (_MSC_VER && (__INTEL_COMPILER >= 1300 && __INTEL_COMPILER <= 1310) && !__INTEL_CXX11_MODE__)\n\n#define __TBB_CPP11_DECLVAL_BROKEN (_MSC_VER == 1600 || (__GNUC__ && __TBB_GCC_VERSION < 40500) )\n// Intel C++ Compiler has difficulties with copying std::pair with VC11 std::reference_wrapper being a const member\n#define __TBB_COPY_FROM_NON_CONST_REF_BROKEN (_MSC_VER == 1700 && __INTEL_COMPILER && __INTEL_COMPILER < 1600)\n\n// The implicit upcasting of the tuple of a reference of a derived class to a base class fails on icc 13.X if the system's gcc environment is 4.8\n// Also in gcc 4.4 standard library the implementation of the tuple<&> conversion (tuple<A&> a = tuple<B&>, B is inherited from A) is broken.\n#if __GXX_EXPERIMENTAL_CXX0X__ && __GLIBCXX__ && ((__INTEL_COMPILER >=1300 && __INTEL_COMPILER <=1310 && __TBB_GLIBCXX_VERSION>=40700) || (__TBB_GLIBCXX_VERSION < 40500))\n#define __TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN 1\n#endif\n\n// In some cases decltype of a function adds a reference to a return type.\n#define __TBB_CPP11_DECLTYPE_OF_FUNCTION_RETURN_TYPE_BROKEN (_MSC_VER == 1600 && !__INTEL_COMPILER)\n\n/** End of __TBB_XXX_BROKEN macro section **/\n\n#if defined(_MSC_VER) && _MSC_VER>=1500 && !defined(__INTEL_COMPILER)\n    // A macro to suppress erroneous or benign \"unreachable code\" MSVC warning (4702)\n    #define __TBB_MSVC_UNREACHABLE_CODE_IGNORED 1\n#endif\n\n#define __TBB_ATOMIC_CTORS     (__TBB_CONSTEXPR_PRESENT && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && (!__TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN))\n\n// Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang\n// Setting the workaround for all compile targets ($APP_PLATFORM) below Android 4.4 (android-19)\n#if __ANDROID__\n#include <android/api-level.h>\n#define __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND  (__ANDROID_API__ < 19)\n#endif\n\n#define __TBB_ALLOCATOR_CONSTRUCT_VARIADIC      (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n\n#define __TBB_VARIADIC_PARALLEL_INVOKE          (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n#define __TBB_FLOW_GRAPH_CPP11_FEATURES         (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n                                                && __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_AUTO_PRESENT) \\\n                                                && __TBB_CPP11_VARIADIC_TUPLE_PRESENT && __TBB_CPP11_DEFAULT_FUNC_TEMPLATE_ARGS_PRESENT \\\n                                                && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN\n#define __TBB_PREVIEW_STREAMING_NODE            (__TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT && __TBB_FLOW_GRAPH_CPP11_FEATURES \\\n                                                && TBB_PREVIEW_FLOW_GRAPH_NODES && !TBB_IMPLEMENT_CPP0X && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN)\n#define __TBB_PREVIEW_OPENCL_NODE               (__TBB_PREVIEW_STREAMING_NODE && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT)\n#define __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING (TBB_PREVIEW_FLOW_GRAPH_FEATURES || __TBB_PREVIEW_OPENCL_NODE)\n#define __TBB_PREVIEW_ASYNC_MSG                 (TBB_PREVIEW_FLOW_GRAPH_FEATURES && __TBB_FLOW_GRAPH_CPP11_FEATURES)\n\n#define __TBB_PREVIEW_GFX_FACTORY               (__TBB_GFX_PRESENT && TBB_PREVIEW_FLOW_GRAPH_FEATURES && !__TBB_MIC_OFFLOAD \\\n                                                && __TBB_FLOW_GRAPH_CPP11_FEATURES && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT \\\n                                                && __TBB_CPP11_FUTURE_PRESENT)\n\n#ifndef __TBB_PREVIEW_LIGHTWEIGHT_POLICY\n#define __TBB_PREVIEW_LIGHTWEIGHT_POLICY TBB_PREVIEW_FLOW_GRAPH_FEATURES\n#endif\n\n#endif /* __TBB_tbb_config_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_disable_exceptions.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n//! To disable use of exceptions, include this header before any other header file from the library.\n\n//! The macro that prevents use of exceptions in the library files\n#undef  TBB_USE_EXCEPTIONS\n#define TBB_USE_EXCEPTIONS 0\n\n//! Prevent compilers from issuing exception related warnings.\n/** Note that the warnings are suppressed for all the code after this header is included. */\n#if _MSC_VER\n#if __INTEL_COMPILER\n    #pragma warning (disable: 583)\n#else\n    #pragma warning (disable: 4530 4577)\n#endif\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_exception.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_exception_H\n#define __TBB_exception_H\n\n#include \"tbb_stddef.h\"\n#include <exception>\n#include <new>    // required for bad_alloc definition, operators new\n#include <string> // required to construct std exception classes\n\nnamespace tbb {\n\n//! Exception for concurrent containers\nclass bad_last_alloc : public std::bad_alloc {\npublic:\n    const char* what() const throw() __TBB_override;\n#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN\n    ~bad_last_alloc() throw() __TBB_override {}\n#endif\n};\n\n//! Exception for PPL locks\nclass improper_lock : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for user-initiated abort\nclass user_abort : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for missing wait on structured_task_group\nclass missing_wait : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\n//! Exception for repeated scheduling of the same task_handle\nclass invalid_multiple_scheduling : public std::exception {\npublic:\n    const char* what() const throw() __TBB_override;\n};\n\nnamespace internal {\n//! Obsolete\nvoid __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();\n\nenum exception_id {\n    eid_bad_alloc = 1,\n    eid_bad_last_alloc,\n    eid_nonpositive_step,\n    eid_out_of_range,\n    eid_segment_range_error,\n    eid_index_range_error,\n    eid_missing_wait,\n    eid_invalid_multiple_scheduling,\n    eid_improper_lock,\n    eid_possible_deadlock,\n    eid_operation_not_permitted,\n    eid_condvar_wait_failed,\n    eid_invalid_load_factor,\n    eid_reserved, // free slot for backward compatibility, can be reused.\n    eid_invalid_swap,\n    eid_reservation_length_error,\n    eid_invalid_key,\n    eid_user_abort,\n    eid_reserved1,\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    // This id is used only from inside the library and only for support of CPF functionality.\n    // So, if we drop the functionality, eid_reserved1 can be safely renamed and reused.\n    eid_blocking_thread_join_impossible = eid_reserved1,\n#endif\n    eid_bad_tagged_msg_cast,\n    //! The last enumerator tracks the number of defined IDs. It must remain the last one.\n    /** When adding new IDs, place them immediately _before_ this comment (that is\n        _after_ all the existing IDs. NEVER insert new IDs between the existing ones. **/\n    eid_max\n};\n\n//! Gathers all throw operators in one place.\n/** Its purpose is to minimize code bloat that can be caused by throw operators\n    scattered in multiple places, especially in templates. **/\nvoid __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );\n\n//! Versionless convenience wrapper for throw_exception_v4()\ninline void throw_exception ( exception_id eid ) { throw_exception_v4(eid); }\n\n} // namespace internal\n} // namespace tbb\n\n#if __TBB_TASK_GROUP_CONTEXT\n#include \"tbb_allocator.h\"\n#include <typeinfo> //for typeid\n\nnamespace tbb {\n\n//! Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.\n/** If an unhandled exception of the type derived from tbb::tbb_exception is intercepted\n    by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in\n    the root thread. The root thread is the thread that has started the outermost algorithm\n    or root task sharing the same task_group_context with the guilty algorithm/task (the one\n    that threw the exception first).\n\n    Note: when documentation mentions workers with respect to exception handling,\n    masters are implied as well, because they are completely equivalent in this context.\n    Consequently a root thread can be master or worker thread.\n\n    NOTE: In case of nested algorithms or complex task hierarchies when the nested\n    levels share (explicitly or by means of implicit inheritance) the task group\n    context of the outermost level, the exception may be (re-)thrown multiple times\n    (ultimately - in each worker on each nesting level) before reaching the root\n    thread at the outermost level. IMPORTANT: if you intercept an exception derived\n    from this class on a nested level, you must re-throw it in the catch block by means\n    of the \"throw;\" operator.\n\n    TBB provides two implementations of this interface: tbb::captured_exception and\n    template class tbb::movable_exception. See their declarations for more info. **/\nclass tbb_exception : public std::exception\n{\n    /** No operator new is provided because the TBB usage model assumes dynamic\n        creation of the TBB exception objects only by means of applying move()\n        operation on an exception thrown out of TBB scheduler. **/\n    void* operator new ( size_t );\n\npublic:\n#if __clang__\n    // At -O3 or even -O2 optimization level, Clang may fully throw away an empty destructor\n    // of tbb_exception from destructors of derived classes. As a result, it does not create\n    // vtable for tbb_exception, which is a required part of TBB binary interface.\n    // Making the destructor non-empty (with just a semicolon) prevents that optimization.\n    ~tbb_exception() throw() { /* keep the semicolon! */ ; }\n#endif\n\n    //! Creates and returns pointer to the deep copy of this exception object.\n    /** Move semantics is allowed. **/\n    virtual tbb_exception* move() throw() = 0;\n\n    //! Destroys objects created by the move() method.\n    /** Frees memory and calls destructor for this exception object.\n        Can and must be used only on objects created by the move method. **/\n    virtual void destroy() throw() = 0;\n\n    //! Throws this exception object.\n    /** Make sure that if you have several levels of derivation from this interface\n        you implement or override this method on the most derived level. The implementation\n        is as simple as \"throw *this;\". Failure to do this will result in exception\n        of a base class type being thrown. **/\n    virtual void throw_self() = 0;\n\n    //! Returns RTTI name of the originally intercepted exception\n    virtual const char* name() const throw() = 0;\n\n    //! Returns the result of originally intercepted exception's what() method.\n    virtual const char* what() const throw() __TBB_override = 0;\n\n    /** Operator delete is provided only to allow using existing smart pointers\n        with TBB exception objects obtained as the result of applying move()\n        operation on an exception thrown out of TBB scheduler.\n\n        When overriding method move() make sure to override operator delete as well\n        if memory is allocated not by TBB's scalable allocator. **/\n    void operator delete ( void* p ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n};\n\n//! This class is used by TBB to propagate information about unhandled exceptions into the root thread.\n/** Exception of this type is thrown by TBB in the root thread (thread that started a parallel\n    algorithm ) if an unhandled exception was intercepted during the algorithm execution in one\n    of the workers.\n    \\sa tbb::tbb_exception **/\nclass captured_exception : public tbb_exception\n{\npublic:\n    captured_exception( const captured_exception& src )\n        : tbb_exception(src), my_dynamic(false)\n    {\n        set(src.my_exception_name, src.my_exception_info);\n    }\n\n    captured_exception( const char* name_, const char* info )\n        : my_dynamic(false)\n    {\n        set(name_, info);\n    }\n\n    __TBB_EXPORTED_METHOD ~captured_exception() throw();\n\n    captured_exception& operator= ( const captured_exception& src ) {\n        if ( this != &src ) {\n            clear();\n            set(src.my_exception_name, src.my_exception_info);\n        }\n        return *this;\n    }\n\n    captured_exception* __TBB_EXPORTED_METHOD move() throw() __TBB_override;\n\n    void __TBB_EXPORTED_METHOD destroy() throw() __TBB_override;\n\n    void throw_self() __TBB_override { __TBB_THROW(*this); }\n\n    const char* __TBB_EXPORTED_METHOD name() const throw() __TBB_override;\n\n    const char* __TBB_EXPORTED_METHOD what() const throw() __TBB_override;\n\n    void __TBB_EXPORTED_METHOD set( const char* name, const char* info ) throw();\n    void __TBB_EXPORTED_METHOD clear() throw();\n\nprivate:\n    //! Used only by method move().\n    captured_exception() {}\n\n    //! Functionally equivalent to {captured_exception e(name,info); return e.move();}\n    static captured_exception* allocate( const char* name, const char* info );\n\n    bool my_dynamic;\n    const char* my_exception_name;\n    const char* my_exception_info;\n};\n\n//! Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread\n/** Code using TBB can instantiate this template with an arbitrary ExceptionData type\n    and throw this exception object. Such exceptions are intercepted by the TBB scheduler\n    and delivered to the root thread ().\n    \\sa tbb::tbb_exception **/\ntemplate<typename ExceptionData>\nclass movable_exception : public tbb_exception\n{\n    typedef movable_exception<ExceptionData> self_type;\n\npublic:\n    movable_exception( const ExceptionData& data_ )\n        : my_exception_data(data_)\n        , my_dynamic(false)\n        , my_exception_name(\n#if TBB_USE_EXCEPTIONS\n        typeid(self_type).name()\n#else /* !TBB_USE_EXCEPTIONS */\n        \"movable_exception\"\n#endif /* !TBB_USE_EXCEPTIONS */\n        )\n    {}\n\n    movable_exception( const movable_exception& src ) throw ()\n        : tbb_exception(src)\n        , my_exception_data(src.my_exception_data)\n        , my_dynamic(false)\n        , my_exception_name(src.my_exception_name)\n    {}\n\n    ~movable_exception() throw() {}\n\n    const movable_exception& operator= ( const movable_exception& src ) {\n        if ( this != &src ) {\n            my_exception_data = src.my_exception_data;\n            my_exception_name = src.my_exception_name;\n        }\n        return *this;\n    }\n\n    ExceptionData& data() throw() { return my_exception_data; }\n\n    const ExceptionData& data() const throw() { return my_exception_data; }\n\n    const char* name() const throw() __TBB_override { return my_exception_name; }\n\n    const char* what() const throw() __TBB_override { return \"tbb::movable_exception\"; }\n\n    movable_exception* move() throw() __TBB_override {\n        void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));\n        if ( e ) {\n            ::new (e) movable_exception(*this);\n            ((movable_exception*)e)->my_dynamic = true;\n        }\n        return (movable_exception*)e;\n    }\n    void destroy() throw() __TBB_override {\n        __TBB_ASSERT ( my_dynamic, \"Method destroy can be called only on dynamically allocated movable_exceptions\" );\n        if ( my_dynamic ) {\n            this->~movable_exception();\n            internal::deallocate_via_handler_v3(this);\n        }\n    }\n    void throw_self() __TBB_override { __TBB_THROW( *this ); }\n\nprotected:\n    //! User data\n    ExceptionData  my_exception_data;\n\nprivate:\n    //! Flag specifying whether this object has been dynamically allocated (by the move method)\n    bool my_dynamic;\n\n    //! RTTI name of this class\n    /** We rely on the fact that RTTI names are static string constants. **/\n    const char* my_exception_name;\n};\n\n#if !TBB_USE_CAPTURED_EXCEPTION\nnamespace internal {\n\n//! Exception container that preserves the exact copy of the original exception\n/** This class can be used only when the appropriate runtime support (mandated\n    by C++11) is present **/\nclass tbb_exception_ptr {\n    std::exception_ptr  my_ptr;\n\npublic:\n    static tbb_exception_ptr* allocate();\n    static tbb_exception_ptr* allocate( const tbb_exception& tag );\n    //! This overload uses move semantics (i.e. it empties src)\n    static tbb_exception_ptr* allocate( captured_exception& src );\n\n    //! Destroys this objects\n    /** Note that objects of this type can be created only by the allocate() method. **/\n    void destroy() throw();\n\n    //! Throws the contained exception .\n    void throw_self() { std::rethrow_exception(my_ptr); }\n\nprivate:\n    tbb_exception_ptr( const std::exception_ptr& src ) : my_ptr(src) {}\n    tbb_exception_ptr( const captured_exception& src ) :\n        #if __TBB_MAKE_EXCEPTION_PTR_PRESENT\n            my_ptr(std::make_exception_ptr(src))  // the final function name in C++11\n        #else\n            my_ptr(std::copy_exception(src))      // early C++0x drafts name\n        #endif\n    {}\n}; // class tbb::internal::tbb_exception_ptr\n\n} // namespace internal\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_exception_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_machine.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_machine_H\n#define __TBB_machine_H\n\n/** This header provides basic platform abstraction layer by hooking up appropriate\n    architecture/OS/compiler specific headers from the /include/tbb/machine directory.\n    If a plug-in header does not implement all the required APIs, it must specify\n    the missing ones by setting one or more of the following macros:\n\n    __TBB_USE_GENERIC_PART_WORD_CAS\n    __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n    __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n    __TBB_USE_GENERIC_FETCH_ADD\n    __TBB_USE_GENERIC_FETCH_STORE\n    __TBB_USE_GENERIC_DWORD_FETCH_ADD\n    __TBB_USE_GENERIC_DWORD_FETCH_STORE\n    __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n    __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\n    __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n    __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n\n    In this case tbb_machine.h will add missing functionality based on a minimal set\n    of APIs that are required to be implemented by all plug-n headers as described\n    further.\n    Note that these generic implementations may be sub-optimal for a particular\n    architecture, and thus should be relied upon only after careful evaluation\n    or as the last resort.\n\n    Additionally __TBB_64BIT_ATOMICS can be set to 0 on a 32-bit architecture to\n    indicate that the port is not going to support double word atomics. It may also\n    be set to 1 explicitly, though normally this is not necessary as tbb_machine.h\n    will set it automatically.\n\n    __TBB_ENDIANNESS macro can be defined by the implementation as well.\n    It is used only if __TBB_USE_GENERIC_PART_WORD_CAS is set (or for testing),\n    and must specify the layout of aligned 16-bit and 32-bit data anywhere within a process\n    (while the details of unaligned 16-bit or 32-bit data or of 64-bit data are irrelevant).\n    The layout must be the same at all relevant memory locations within the current process;\n    in case of page-specific endianness, one endianness must be kept \"out of sight\".\n    Possible settings, reflecting hardware and possibly O.S. convention, are:\n    -  __TBB_ENDIAN_BIG for big-endian data,\n    -  __TBB_ENDIAN_LITTLE for little-endian data,\n    -  __TBB_ENDIAN_DETECT for run-time detection iff exactly one of the above,\n    -  __TBB_ENDIAN_UNSUPPORTED to prevent undefined behavior if none of the above.\n\n    Prerequisites for each architecture port\n    ----------------------------------------\n    The following functions and macros have no generic implementation. Therefore they must be\n    implemented in each machine architecture specific header either as a conventional\n    function or as a functional macro.\n\n    __TBB_WORDSIZE\n        This is the size of machine word in bytes, i.e. for 32 bit systems it\n        should be defined to 4.\n\n    __TBB_Yield()\n        Signals OS that the current thread is willing to relinquish the remainder\n        of its time quantum.\n\n    __TBB_full_memory_fence()\n        Must prevent all memory operations from being reordered across it (both\n        by hardware and compiler). All such fences must be totally ordered (or\n        sequentially consistent).\n\n    __TBB_machine_cmpswp4( volatile void *ptr, int32_t value, int32_t comparand )\n        Must be provided if __TBB_USE_FENCED_ATOMICS is not set.\n\n    __TBB_machine_cmpswp8( volatile void *ptr, int32_t value, int64_t comparand )\n        Must be provided for 64-bit architectures if __TBB_USE_FENCED_ATOMICS is not set,\n        and for 32-bit architectures if __TBB_64BIT_ATOMICS is set\n\n    __TBB_machine_<op><S><fence>(...), where\n        <op> = {cmpswp, fetchadd, fetchstore}\n        <S> = {1, 2, 4, 8}\n        <fence> = {full_fence, acquire, release, relaxed}\n        Must be provided if __TBB_USE_FENCED_ATOMICS is set.\n\n    __TBB_control_consistency_helper()\n        Bridges the memory-semantics gap between architectures providing only\n        implicit C++0x \"consume\" semantics (like Power Architecture) and those\n        also implicitly obeying control dependencies (like IA-64 architecture).\n        It must be used only in conditional code where the condition is itself\n        data-dependent, and will then make subsequent code behave as if the\n        original data dependency were acquired.\n        It needs only a compiler fence where implied by the architecture\n        either specifically (like IA-64 architecture) or because generally stronger\n        \"acquire\" semantics are enforced (like x86).\n        It is always valid, though potentially suboptimal, to replace\n        control with acquire on the load and then remove the helper.\n\n    __TBB_acquire_consistency_helper(), __TBB_release_consistency_helper()\n        Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set.\n        Enforce acquire and release semantics in generic implementations of fenced\n        store and load operations. Depending on the particular architecture/compiler\n        combination they may be a hardware fence, a compiler fence, both or nothing.\n **/\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace internal { //< @cond INTERNAL\n\n////////////////////////////////////////////////////////////////////////////////\n// Overridable helpers declarations\n//\n// A machine/*.h file may choose to define these templates, otherwise it must\n// request default implementation by setting appropriate __TBB_USE_GENERIC_XXX macro(s).\n//\ntemplate <typename T, std::size_t S>\nstruct machine_load_store;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_relaxed;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_seq_cst;\n//\n// End of overridable helpers declarations\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S> struct atomic_selector;\n\ntemplate<> struct atomic_selector<1> {\n    typedef int8_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<2> {\n    typedef int16_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<4> {\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<8> {\n    typedef int64_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\n}} //< namespaces internal @endcond, tbb\n\n#define __TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(M)                                        \\\n    inline void __TBB_machine_generic_store8##M(volatile void *ptr, int64_t value) {         \\\n        for(;;) {                                                                            \\\n            int64_t result = *(volatile int64_t *)ptr;                                       \\\n            if( __TBB_machine_cmpswp8##M(ptr,value,result)==result ) break;                  \\\n        }                                                                                    \\\n    }                                                                                        \\\n\n#define __TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(M)                                         \\\n    inline int64_t __TBB_machine_generic_load8##M(const volatile void *ptr) {                \\\n        /* Comparand and new value may be anything, they only must be equal, and      */     \\\n        /* the value should have a low probability to be actually found in 'location'.*/     \\\n        const int64_t anyvalue = 2305843009213693951LL;                                      \\\n        return __TBB_machine_cmpswp8##M(const_cast<volatile void *>(ptr),anyvalue,anyvalue); \\\n    }                                                                                        \\\n\n// The set of allowed values for __TBB_ENDIANNESS (see above for details)\n#define __TBB_ENDIAN_UNSUPPORTED -1\n#define __TBB_ENDIAN_LITTLE       0\n#define __TBB_ENDIAN_BIG          1\n#define __TBB_ENDIAN_DETECT       2\n\n#if _WIN32||_WIN64\n\n#ifdef _MANAGED\n#pragma managed(push, off)\n#endif\n\n    #if __MINGW64__ || __MINGW32__\n        extern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n        #define __TBB_Yield()  SwitchToThread()\n        #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n            #include \"machine/gcc_generic.h\"\n        #elif __MINGW64__\n            #include \"machine/linux_intel64.h\"\n        #elif __MINGW32__\n            #include \"machine/linux_ia32.h\"\n        #endif\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif defined(_M_IX86) && !defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/windows_ia32.h\"\n    #elif defined(_M_X64)\n        #include \"machine/windows_intel64.h\"\n    #elif defined(_M_ARM) || defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/msvc_armv7.h\"\n    #endif\n\n#ifdef _MANAGED\n#pragma managed(pop)\n#endif\n\n#elif __TBB_DEFINE_MIC\n\n    #include \"machine/mic_common.h\"\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #else\n        #include \"machine/linux_intel64.h\"\n    #endif\n\n#elif __linux__ || __FreeBSD__ || __NetBSD__\n\n    #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/gcc_generic.h\"\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __ia64__\n        #include \"machine/linux_ia64.h\"\n    #elif __powerpc__\n        #include \"machine/mac_ppc.h\"\n    #elif __ARM_ARCH_7A__ || __aarch64__\n        #include \"machine/gcc_arm.h\"\n    #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT\n        #include \"machine/gcc_generic.h\"\n    #endif\n    #include \"machine/linux_common.h\"\n\n#elif __APPLE__\n    //TODO:  TBB_USE_GCC_BUILTINS is not used for Mac, Sun, Aix\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __TBB_x86_32\n        #include \"machine/linux_ia32.h\"\n    #elif __TBB_x86_64\n        #include \"machine/linux_intel64.h\"\n    #elif __POWERPC__\n        #include \"machine/mac_ppc.h\"\n    #endif\n    #include \"machine/macos_common.h\"\n\n#elif _AIX\n\n    #include \"machine/ibm_aix51.h\"\n\n#elif __sun || __SUNPRO_CC\n\n    #define __asm__ asm\n    #define __volatile__ volatile\n\n    #if __i386  || __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __sparc\n        #include \"machine/sunos_sparc.h\"\n    #endif\n    #include <sched.h>\n\n    #define __TBB_Yield() sched_yield()\n\n#endif /* OS selection */\n\n#ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 1\n#endif\n\n//TODO: replace usage of these functions with usage of tbb::atomic, and then remove them\n//TODO: map functions with W suffix to use cast to tbb::atomic and according op, i.e. as_atomic().op()\n// Special atomic functions\n#if __TBB_USE_FENCED_ATOMICS\n    #define __TBB_machine_cmpswp1   __TBB_machine_cmpswp1full_fence\n    #define __TBB_machine_cmpswp2   __TBB_machine_cmpswp2full_fence\n    #define __TBB_machine_cmpswp4   __TBB_machine_cmpswp4full_fence\n    #define __TBB_machine_cmpswp8   __TBB_machine_cmpswp8full_fence\n\n    #if __TBB_WORDSIZE==8\n        #define __TBB_machine_fetchadd8             __TBB_machine_fetchadd8full_fence\n        #define __TBB_machine_fetchstore8           __TBB_machine_fetchstore8full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd8release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd8acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd8release(P,(-1))\n    #else\n        #define __TBB_machine_fetchadd4             __TBB_machine_fetchadd4full_fence\n        #define __TBB_machine_fetchstore4           __TBB_machine_fetchstore4full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd4release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd4acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd4release(P,(-1))\n    #endif /* __TBB_WORDSIZE==4 */\n#else /* !__TBB_USE_FENCED_ATOMICS */\n    #define __TBB_FetchAndAddWrelease(P,V)      __TBB_FetchAndAddW(P,V)\n    #define __TBB_FetchAndIncrementWacquire(P)  __TBB_FetchAndAddW(P,1)\n    #define __TBB_FetchAndDecrementWrelease(P)  __TBB_FetchAndAddW(P,(-1))\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp4(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd4(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore4(P,V)\n#elif  __TBB_WORDSIZE==8\n    #if __TBB_USE_GENERIC_DWORD_LOAD_STORE || __TBB_USE_GENERIC_DWORD_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n        #error These macros should only be used on 32-bit platforms.\n    #endif\n\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp8(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd8(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore8(P,V)\n#else /* __TBB_WORDSIZE != 8 */\n    #error Unsupported machine word size.\n#endif /* __TBB_WORDSIZE */\n\n#ifndef __TBB_Pause\n    inline void __TBB_Pause(int32_t) {\n        __TBB_Yield();\n    }\n#endif\n\nnamespace tbb {\n\n//! Sequentially consistent full memory fence.\ninline void atomic_fence () { __TBB_full_memory_fence(); }\n\nnamespace internal { //< @cond INTERNAL\n\n//! Class that implements exponential backoff.\n/** See implementation of spin_wait_while_eq for an example. */\nclass atomic_backoff : no_copy {\n    //! Time delay, in units of \"pause\" instructions.\n    /** Should be equal to approximately the number of \"pause\" instructions\n        that take the same time as an context switch. Must be a power of two.*/\n    static const int32_t LOOPS_BEFORE_YIELD = 16;\n    int32_t count;\npublic:\n    // In many cases, an object of this type is initialized eagerly on hot path,\n    // as in for(atomic_backoff b; ; b.pause()) { /*loop body*/ }\n    // For this reason, the construction cost must be very small!\n    atomic_backoff() : count(1) {}\n    // This constructor pauses immediately; do not use on hot paths!\n    atomic_backoff( bool ) : count(1) { pause(); }\n\n    //! Pause for a while.\n    void pause() {\n        if( count<=LOOPS_BEFORE_YIELD ) {\n            __TBB_Pause(count);\n            // Pause twice as long the next time.\n            count*=2;\n        } else {\n            // Pause is so long that we might as well yield CPU to scheduler.\n            __TBB_Yield();\n        }\n    }\n\n    //! Pause for a few times and return false if saturated.\n    bool bounded_pause() {\n        __TBB_Pause(count);\n        if( count<LOOPS_BEFORE_YIELD ) {\n            // Pause twice as long the next time.\n            count*=2;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    void reset() {\n        count = 1;\n    }\n};\n\n//! Spin WHILE the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_while_eq( const volatile T& location, U value ) {\n    atomic_backoff backoff;\n    while( location==value ) backoff.pause();\n}\n\n//! Spin UNTIL the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_until_eq( const volatile T& location, const U value ) {\n    atomic_backoff backoff;\n    while( location!=value ) backoff.pause();\n}\n\ntemplate <typename predicate_type>\nvoid spin_wait_while(predicate_type condition){\n    atomic_backoff backoff;\n    while( condition() ) backoff.pause();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Generic compare-and-swap applied to only a part of a machine word.\n//\n#ifndef __TBB_ENDIANNESS\n#define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS && __TBB_ENDIANNESS==__TBB_ENDIAN_UNSUPPORTED\n#error Generic implementation of part-word CAS may not be used with __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n#if __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n//\n// This function is the only use of __TBB_ENDIANNESS.\n// The following restrictions/limitations apply for this operation:\n//  - T must be an integer type of at most 4 bytes for the casts and calculations to work\n//  - T must also be less than 4 bytes to avoid compiler warnings when computing mask\n//      (and for the operation to be useful at all, so no workaround is applied)\n//  - the architecture must consistently use either little-endian or big-endian (same for all locations)\n//\n// TODO: static_assert for the type requirements stated above\ntemplate<typename T>\ninline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, const T comparand ) {\n    struct endianness{ static bool is_big_endian(){\n        #if __TBB_ENDIANNESS==__TBB_ENDIAN_DETECT\n            const uint32_t probe = 0x03020100;\n            return (((const char*)(&probe))[0]==0x03);\n        #elif __TBB_ENDIANNESS==__TBB_ENDIAN_BIG || __TBB_ENDIANNESS==__TBB_ENDIAN_LITTLE\n            return __TBB_ENDIANNESS==__TBB_ENDIAN_BIG;\n        #else\n            #error Unexpected value of __TBB_ENDIANNESS\n        #endif\n    }};\n\n    const uint32_t byte_offset            = (uint32_t) ((uintptr_t)ptr & 0x3);\n    volatile uint32_t * const aligned_ptr = (uint32_t*)((uintptr_t)ptr - byte_offset );\n\n    // location of T within uint32_t for a C++ shift operation\n    const uint32_t bits_to_shift     = 8*(endianness::is_big_endian() ? (4 - sizeof(T) - (byte_offset)) : byte_offset);\n    const uint32_t mask              = (((uint32_t)1<<(sizeof(T)*8)) - 1 )<<bits_to_shift;\n    // for signed T, any sign extension bits in cast value/comparand are immediately clipped by mask\n    const uint32_t shifted_comparand = ((uint32_t)comparand << bits_to_shift)&mask;\n    const uint32_t shifted_value     = ((uint32_t)value     << bits_to_shift)&mask;\n\n    for( atomic_backoff b;;b.pause() ) {\n        const uint32_t surroundings  = *aligned_ptr & ~mask ; // may have changed during the pause\n        const uint32_t big_comparand = surroundings | shifted_comparand ;\n        const uint32_t big_value     = surroundings | shifted_value     ;\n        // __TBB_machine_cmpswp4 presumed to have full fence.\n        // Cast shuts up /Wp64 warning\n        const uint32_t big_result = (uint32_t)__TBB_machine_cmpswp4( aligned_ptr, big_value, big_comparand );\n        if( big_result == big_comparand                    // CAS succeeded\n          || ((big_result ^ big_comparand) & mask) != 0)   // CAS failed and the bits of interest have changed\n        {\n            return T((big_result & mask) >> bits_to_shift);\n        }\n        else continue;                                     // CAS failed but the bits of interest were not changed\n    }\n}\n#endif // __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S, typename T>\ninline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand );\n\ntemplate<>\ninline int8_t __TBB_CompareAndSwapGeneric <1,int8_t> (volatile void *ptr, int8_t value, int8_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int8_t>((volatile int8_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp1(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int16_t __TBB_CompareAndSwapGeneric <2,int16_t> (volatile void *ptr, int16_t value, int16_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int16_t>((volatile int16_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp2(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int32_t __TBB_CompareAndSwapGeneric <4,int32_t> (volatile void *ptr, int32_t value, int32_t comparand ) {\n    // Cast shuts up /Wp64 warning\n    return (int32_t)__TBB_machine_cmpswp4(ptr,value,comparand);\n}\n\n#if __TBB_64BIT_ATOMICS\ntemplate<>\ninline int64_t __TBB_CompareAndSwapGeneric <8,int64_t> (volatile void *ptr, int64_t value, int64_t comparand ) {\n    return __TBB_machine_cmpswp8(ptr,value,comparand);\n}\n#endif\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )\n            break;\n    }\n    return result;\n}\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )\n            break;\n    }\n    return result;\n}\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n#define __TBB_machine_cmpswp1 tbb::internal::__TBB_CompareAndSwapGeneric<1,int8_t>\n#define __TBB_machine_cmpswp2 tbb::internal::__TBB_CompareAndSwapGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n#define __TBB_machine_fetchadd1 tbb::internal::__TBB_FetchAndAddGeneric<1,int8_t>\n#define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD\n#define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_ADD\n#define __TBB_machine_fetchadd8 tbb::internal::__TBB_FetchAndAddGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n#define __TBB_machine_fetchstore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,int8_t>\n#define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE\n#define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n#define __TBB_machine_fetchstore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n#define __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(S)                                             \\\n    atomic_selector<S>::word atomic_selector<S>::fetch_store ( volatile void* location, word value ) {  \\\n        return __TBB_machine_fetchstore##S( location, value );                                          \\\n    }\n\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(1)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(2)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(4)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(8)\n\n#undef __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE\n#endif /* __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n\n#if __TBB_USE_GENERIC_DWORD_LOAD_STORE\n/*TODO: find a more elegant way to handle function names difference*/\n#if ! __TBB_USE_FENCED_ATOMICS\n    /* This name forwarding is needed for generic implementation of\n     * load8/store8 defined below (via macro) to pick the right CAS function*/\n    #define   __TBB_machine_cmpswp8full_fence __TBB_machine_cmpswp8\n#endif\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n#if ! __TBB_USE_FENCED_ATOMICS\n    #undef   __TBB_machine_cmpswp8full_fence\n#endif\n\n#define __TBB_machine_store8 tbb::internal::__TBB_machine_generic_store8full_fence\n#define __TBB_machine_load8  tbb::internal::__TBB_machine_generic_load8full_fence\n#endif /* __TBB_USE_GENERIC_DWORD_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n/** Fenced operations use volatile qualifier to prevent compiler from optimizing\n    them out, and on architectures with weak memory ordering to induce compiler\n    to generate code with appropriate acquire/release semantics.\n    On architectures like IA32, Intel64 (and likely Sparc TSO) volatile has\n    no effect on code gen, and consistency helpers serve as a compiler fence (the\n    latter being true for IA64/gcc as well to fix a bug in some gcc versions).\n    This code assumes that the generated instructions will operate atomically,\n    which typically requires a type that can be moved in a single instruction,\n    cooperation from the compiler for effective use of such an instruction,\n    and appropriate alignment of the data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        T to_return = location;\n        __TBB_acquire_consistency_helper();\n        return to_return;\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __TBB_release_consistency_helper();\n        location = value;\n    }\n};\n\n//in general, plain load and store of 32bit compiler is not atomic for 64bit types\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static void store_with_release ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        __TBB_full_memory_fence();\n        return machine_load_store<T,S>::load_with_acquire( location );\n    }\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n    static void store ( volatile T &location, T value ) {\n        atomic_selector<S>::fetch_store( (volatile void*)&location, (typename atomic_selector<S>::word)value );\n    }\n#else /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n    static void store ( volatile T &location, T value ) {\n        machine_load_store<T,S>::store_with_release( location, value );\n        __TBB_full_memory_fence();\n    }\n#endif /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\n/** The implementation does not use functions __TBB_machine_load8/store8 as they\n    are not required to be sequentially consistent. **/\ntemplate <typename T>\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        // Comparand and new value may be anything, they only must be equal, and\n        // the value should have a low probability to be actually found in 'location'.\n        const int64_t anyvalue = 2305843009213693951LL;\n        return __TBB_machine_cmpswp8( (volatile void*)const_cast<volatile T*>(&location), anyvalue, anyvalue );\n    }\n    static void store ( volatile T &location, T value ) {\n#if __TBB_GCC_VERSION >= 40702\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wmaybe-uninitialized\"\n#endif\n        // An atomic initialization leads to reading of uninitialized memory\n        int64_t result = (volatile int64_t&)location;\n#if __TBB_GCC_VERSION >= 40702\n#pragma GCC diagnostic pop\n#endif\n        while ( __TBB_machine_cmpswp8((volatile void*)&location, (int64_t)value, result) != result )\n            result = (volatile int64_t&)location;\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /*__TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n// Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.\n/** Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO\n    architectures. However on architectures with weak memory ordering compiler may\n    generate code with acquire/release semantics for operations on volatile data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        return location;\n    }\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static inline T load ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static inline void store ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */\n\n#undef __TBB_WORDSIZE //this macro is forbidden to use outside of atomic machinery\n\ntemplate<typename T>\ninline T __TBB_load_with_acquire(const volatile T &location) {\n    return machine_load_store<T,sizeof(T)>::load_with_acquire( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_with_release(volatile T& location, V value) {\n    machine_load_store<T,sizeof(T)>::store_with_release( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_with_release(volatile size_t& location, size_t value) {\n    machine_load_store<size_t,sizeof(size_t)>::store_with_release( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_full_fence(const volatile T &location) {\n    return machine_load_store_seq_cst<T,sizeof(T)>::load( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_full_fence(volatile T& location, V value) {\n    machine_load_store_seq_cst<T,sizeof(T)>::store( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_full_fence(volatile size_t& location, size_t value) {\n    machine_load_store_seq_cst<size_t,sizeof(size_t)>::store( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_relaxed (const volatile T& location) {\n    return machine_load_store_relaxed<T,sizeof(T)>::load( const_cast<T&>(location) );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_relaxed ( volatile T& location, V value ) {\n    machine_load_store_relaxed<T,sizeof(T)>::store( const_cast<T&>(location), T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_relaxed ( volatile size_t& location, size_t value ) {\n    machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );\n}\n\n// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as\n// strict as type T.  The type should have a trivial default constructor and destructor, so that\n// arrays of that type can be declared without initializers.\n// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands\n// to a type bigger than T.\n// The default definition here works on machines where integers are naturally aligned and the\n// strictest alignment is 64.\n#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict\n\n#if __TBB_ALIGNAS_PRESENT\n\n// Use C++11 keywords alignas and alignof\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\nstruct alignas(PowerOf2) __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n};\n#define __TBB_alignof(T) alignof(T)\n\n#elif __TBB_ATTRIBUTE_ALIGNED_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n} __attribute__((aligned(PowerOf2)));\n#define __TBB_alignof(T) __alignof__(T)\n\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\n__declspec(align(PowerOf2))                           \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n};\n#define __TBB_alignof(T) __alignof(T)\n\n#else /* A compiler with unknown syntax for data alignment */\n#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T)\n#endif\n\n/* Now declare types aligned to useful powers of two */\n// TODO: Is __TBB_DefineTypeWithAlignment(8) needed on 32 bit platforms?\n__TBB_DefineTypeWithAlignment(16)\n__TBB_DefineTypeWithAlignment(32)\n__TBB_DefineTypeWithAlignment(64)\n\ntypedef __TBB_machine_type_with_alignment_64 __TBB_machine_type_with_strictest_alignment;\n\n// Primary template is a declaration of incomplete type so that it fails with unknown alignments\ntemplate<size_t N> struct type_with_alignment;\n\n// Specializations for allowed alignments\ntemplate<> struct type_with_alignment<1> { char member; };\ntemplate<> struct type_with_alignment<2> { uint16_t member; };\ntemplate<> struct type_with_alignment<4> { uint32_t member; };\ntemplate<> struct type_with_alignment<8> { uint64_t member; };\ntemplate<> struct type_with_alignment<16> {__TBB_machine_type_with_alignment_16 member; };\ntemplate<> struct type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };\ntemplate<> struct type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };\n\n#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN\n//! Work around for bug in GNU 3.2 and MSVC compilers.\n/** Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated.\n    The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). */\ntemplate<size_t Size, typename T>\nstruct work_around_alignment_bug {\n    static const size_t alignment = __TBB_alignof(T);\n};\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment>\n#else\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__TBB_alignof(T)>\n#endif  /* __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN */\n\n#endif  /* __TBB_TypeWithAlignmentAtLeastAsStrict */\n\n// Template class here is to avoid instantiation of the static data for modules that don't use it\ntemplate<typename T>\nstruct reverse {\n    static const T byte_table[256];\n};\n// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed\n// values of [0..2^8 - 1]. Those values can also be computed on the fly at a slightly higher cost.\ntemplate<typename T>\nconst T reverse<T>::byte_table[256] = {\n    0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,\n    0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,\n    0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,\n    0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,\n    0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,\n    0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,\n    0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,\n    0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,\n    0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,\n    0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,\n    0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,\n    0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,\n    0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,\n    0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,\n    0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,\n    0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF\n};\n\n} // namespace internal @endcond\n} // namespace tbb\n\n// Preserving access to legacy APIs\nusing tbb::internal::__TBB_load_with_acquire;\nusing tbb::internal::__TBB_store_with_release;\n\n// Mapping historically used names to the ones expected by atomic_load_store_traits\n#define __TBB_load_acquire  __TBB_load_with_acquire\n#define __TBB_store_release __TBB_store_with_release\n\n#ifndef __TBB_Log2\ninline intptr_t __TBB_Log2( uintptr_t x ) {\n    if( x==0 ) return -1;\n    intptr_t result = 0;\n\n#if !defined(_M_ARM)\n    uintptr_t tmp_;\n    if( sizeof(x)>4 && (tmp_ = ((uint64_t)x)>>32) ) { x=tmp_; result += 32; }\n#endif\n    if( uintptr_t tmp = x>>16 ) { x=tmp; result += 16; }\n    if( uintptr_t tmp = x>>8 )  { x=tmp; result += 8; }\n    if( uintptr_t tmp = x>>4 )  { x=tmp; result += 4; }\n    if( uintptr_t tmp = x>>2 )  { x=tmp; result += 2; }\n\n    return (x&2)? result+1: result;\n}\n#endif\n\n#ifndef __TBB_AtomicOR\ninline void __TBB_AtomicOR( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#ifndef __TBB_AtomicAND\ninline void __TBB_AtomicAND( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#if __TBB_PREFETCHING\n#ifndef __TBB_cl_prefetch\n#error This platform does not define cache management primitives required for __TBB_PREFETCHING\n#endif\n\n#ifndef __TBB_cl_evict\n#define __TBB_cl_evict(p)\n#endif\n#endif\n\n#ifndef __TBB_Flag\ntypedef unsigned char __TBB_Flag;\n#endif\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#ifndef __TBB_TryLockByte\ninline bool __TBB_TryLockByte( __TBB_atomic_flag &flag ) {\n    return __TBB_machine_cmpswp1(&flag,1,0)==0;\n}\n#endif\n\n#ifndef __TBB_LockByte\ninline __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !__TBB_TryLockByte(flag) ) backoff.pause();\n    return 0;\n}\n#endif\n\n#ifndef  __TBB_UnlockByte\n#define __TBB_UnlockByte(addr) __TBB_store_with_release((addr),0)\n#endif\n\n// lock primitives with Intel(R) Transactional Synchronization Extensions (Intel(R) TSX)\n#if ( __TBB_x86_32 || __TBB_x86_64 )  /* only on ia32/intel64 */\ninline void __TBB_TryLockByteElidedCancel() { __TBB_machine_try_lock_elided_cancel(); }\n\ninline bool __TBB_TryLockByteElided( __TBB_atomic_flag& flag ) {\n    bool res = __TBB_machine_try_lock_elided( &flag )!=0;\n    // to avoid the \"lemming\" effect, we need to abort the transaction\n    // if  __TBB_machine_try_lock_elided returns false (i.e., someone else\n    // has acquired the mutex non-speculatively).\n    if( !res ) __TBB_TryLockByteElidedCancel();\n    return res;\n}\n\ninline void __TBB_LockByteElided( __TBB_atomic_flag& flag )\n{\n    for(;;) {\n        tbb::internal::spin_wait_while_eq( flag, 1 );\n        if( __TBB_machine_try_lock_elided( &flag ) )\n            return;\n        // Another thread acquired the lock \"for real\".\n        // To avoid the \"lemming\" effect, we abort the transaction.\n        __TBB_TryLockByteElidedCancel();\n    }\n}\n\ninline void __TBB_UnlockByteElided( __TBB_atomic_flag& flag ) {\n    __TBB_machine_unlock_elided( &flag );\n}\n#endif\n\n#ifndef __TBB_ReverseByte\ninline unsigned char __TBB_ReverseByte(unsigned char src) {\n    return tbb::internal::reverse<unsigned char>::byte_table[src];\n}\n#endif\n\ntemplate<typename T>\nT __TBB_ReverseBits(T src) {\n    T dst;\n    unsigned char *original = (unsigned char *) &src;\n    unsigned char *reversed = (unsigned char *) &dst;\n\n    for( int i = sizeof(T)-1; i >= 0; i-- )\n        reversed[i] = __TBB_ReverseByte( original[sizeof(T)-i-1] );\n\n    return dst;\n}\n\n#endif /* __TBB_machine_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_profiling.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_profiling_H\n#define __TBB_profiling_H\n\nnamespace tbb {\n    namespace internal {\n\n        //\n        // This is not under __TBB_ITT_STRUCTURE_API because these values are used directly in flow_graph.h.\n        //\n\n        // include list of index names\n        #define TBB_STRING_RESOURCE(index_name,str) index_name,\n        enum string_index {\n           #include \"internal/_tbb_strings.h\"\n           NUM_STRINGS\n        };\n        #undef TBB_STRING_RESOURCE\n\n        enum itt_relation\n        {\n        __itt_relation_is_unknown = 0,\n        __itt_relation_is_dependent_on,         /**< \"A is dependent on B\" means that A cannot start until B completes */\n        __itt_relation_is_sibling_of,           /**< \"A is sibling of B\" means that A and B were created as a group */\n        __itt_relation_is_parent_of,            /**< \"A is parent of B\" means that A created B */\n        __itt_relation_is_continuation_of,      /**< \"A is continuation of B\" means that A assumes the dependencies of B */\n        __itt_relation_is_child_of,             /**< \"A is child of B\" means that A was created by B (inverse of is_parent_of) */\n        __itt_relation_is_continued_by,         /**< \"A is continued by B\" means that B assumes the dependencies of A (inverse of is_continuation_of) */\n        __itt_relation_is_predecessor_to        /**< \"A is predecessor to B\" means that B cannot start until A completes (inverse of is_dependent_on) */\n        };\n\n    }\n}\n\n// Check if the tools support is enabled\n#if (_WIN32||_WIN64||__linux__) && !__MINGW32__ && TBB_USE_THREADING_TOOLS\n\n#if _WIN32||_WIN64\n#include <stdlib.h>  /* mbstowcs_s */\n#endif\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if _WIN32||_WIN64\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name );\n        inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {\n#if _MSC_VER>=1400\n            size_t len;\n            mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );\n            return len;   // mbstowcs_s counts null terminator\n#else\n            size_t len = mbstowcs( wcs, mbs, bufsize );\n            if(wcs && len!=size_t(-1) )\n                wcs[len<bufsize-1? len: bufsize-1] = wchar_t('\\0');\n            return len+1; // mbstowcs does not count null terminator\n#endif\n        }\n#else\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name );\n#endif\n    } // namespace internal\n} // namespace tbb\n\n//! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines \"set_name\" methods for sync objects of type T\n/** Should be used in the \"tbb\" namespace only.\n    Don't place semicolon after it to avoid compiler warnings. **/\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \\\n                wchar_t *wname = new wchar_t[len];                                  \\\n                tbb::internal::multibyte_to_widechar(wname, name, len);             \\\n                set_name( obj, wname );                                             \\\n                delete[] wname;                                                     \\\n            }                                                                       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n        }\n#endif /* !WIN */\n\n#else /* no tools support */\n\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const wchar_t* ) {}    \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#endif /* !WIN */\n\n#endif /* no tools support */\n\n#include \"atomic.h\"\n// Need these to work regardless of tools support\nnamespace tbb {\n    namespace internal {\n\n        enum notify_type {prepare=0, cancel, acquired, releasing};\n\n        const uintptr_t NUM_NOTIFY_TYPES = 4; // set to # elements in enum above\n\n        void __TBB_EXPORTED_FUNC call_itt_notify_v5(int t, void *ptr);\n        void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3(void *dst, void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3(const void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );\n#if __TBB_ITT_STRUCTURE_API\n        enum itt_domain_enum { ITT_DOMAIN_FLOW=0, ITT_DOMAIN_MAIN=1, ITT_DOMAIN_ALGO=2, ITT_NUM_DOMAINS };\n\n        void __TBB_EXPORTED_FUNC itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                                         void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                                          string_index key, const char *value );\n        void __TBB_EXPORTED_FUNC itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                                      itt_relation relation, void *addr1, unsigned long long addr1_extra );\n        void __TBB_EXPORTED_FUNC itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                    void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_task_end_v7( itt_domain_enum domain );\n\n        void __TBB_EXPORTED_FUNC itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                                      void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra );\n#endif // __TBB_ITT_STRUCTURE_API\n\n        // two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type\n        template <typename T, typename U>\n        inline void itt_store_word_with_release(tbb::atomic<T>& dst, U src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)uintptr_t(src));\n#else\n            dst = src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const tbb::atomic<T>& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            // Workaround for overzealous compiler warnings\n            #pragma warning (push)\n            #pragma warning (disable: 4311)\n#endif\n            T result = (T)itt_load_pointer_with_acquire_v3(&src);\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            #pragma warning (pop)\n#endif\n            return result;\n#else\n            return src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_store_word_with_release(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            __TBB_store_with_release(dst, src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            return (T)itt_load_pointer_with_acquire_v3(&src);\n#else\n            return __TBB_load_with_acquire(src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_hide_store_word(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            dst = src;\n#endif\n        }\n\n        //TODO: rename to itt_hide_load_word_relaxed\n        template <typename T>\n        inline T itt_hide_load_word(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            return (T)itt_load_pointer_v3(&src);\n#else\n            return src;\n#endif\n        }\n\n#if TBB_USE_THREADING_TOOLS\n        inline void call_itt_notify(notify_type t, void *ptr) {\n            call_itt_notify_v5((int)t, ptr);\n        }\n\n#else\n        inline void call_itt_notify(notify_type /*t*/, void * /*ptr*/) {}\n\n#endif // TBB_USE_THREADING_TOOLS\n\n#if __TBB_ITT_STRUCTURE_API\n        inline void itt_make_task_group( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                         void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_make_task_group_v7( domain, group, group_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_metadata_str_add( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                          string_index key, const char *value ) {\n            itt_metadata_str_add_v7( domain, addr, addr_extra, key, value );\n        }\n\n        inline void itt_relation_add( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                      itt_relation relation, void *addr1, unsigned long long addr1_extra ) {\n            itt_relation_add_v7( domain, addr0, addr0_extra, relation, addr1, addr1_extra );\n        }\n\n        inline void itt_task_begin( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                        void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_task_begin_v7( domain, task, task_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_task_end( itt_domain_enum domain ) {\n            itt_task_end_v7( domain );\n        }\n\n        inline void itt_region_begin( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                      void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_region_begin_v9( domain, region, region_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_region_end( itt_domain_enum domain, void *region, unsigned long long region_extra  ) {\n            itt_region_end_v9( domain, region, region_extra );\n        }\n#endif // __TBB_ITT_STRUCTURE_API\n\n    } // namespace internal\n} // namespace tbb\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n#include <string>\n\nnamespace tbb {\nnamespace profiling {\nnamespace interface10 {\n\n#if TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\nclass event {\n/** This class supports user event traces through itt.\n    Common use-case is tagging data flow graph tasks (data-id)\n    and visualization by Intel Advisor Flow Graph Analyzer (FGA)  **/\n//  TODO: Replace implementation by itt user event api.\n\n    const std::string my_name;\n\n    static void emit_trace(const std::string &input) {\n        itt_metadata_str_add( tbb::internal::ITT_DOMAIN_FLOW, NULL, tbb::internal::FLOW_NULL, tbb::internal::USER_EVENT, ( \"FGA::DATAID::\" + input ).c_str() );\n    }\n\npublic:\n    event(const std::string &input)\n              : my_name( input )\n    { }\n\n    void emit() {\n        emit_trace(my_name);\n    }\n\n    static void emit(const std::string &description) {\n        emit_trace(description);\n    }\n\n};\n#else // TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\n// Using empty struct if user event tracing is disabled:\nstruct event {\n    event(const std::string &) { }\n\n    void emit() { }\n\n    static void emit(const std::string &) { }\n};\n#endif // TBB_USE_THREADING_TOOLS && !(TBB_USE_THREADING_TOOLS == 2)\n\n} // interfaceX\nusing interface10::event;\n} // namespace profiling\n} // namespace tbb\n#endif // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\n#endif /* __TBB_profiling_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_stddef.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_stddef_H\n#define __TBB_tbb_stddef_H\n\n// Marketing-driven product version\n#define TBB_VERSION_MAJOR 2018\n#define TBB_VERSION_MINOR 0\n\n// Engineering-focused interface version\n#define TBB_INTERFACE_VERSION 10006\n#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000\n\n// The oldest major interface version still supported\n// To be used in SONAME, manifests, etc.\n#define TBB_COMPATIBLE_INTERFACE_VERSION 2\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// We do not need defines below for resource processing on windows\n#if !defined RC_INVOKED\n\n// Define groups for Doxygen documentation\n/**\n * @defgroup algorithms         Algorithms\n * @defgroup containers         Containers\n * @defgroup memory_allocation  Memory Allocation\n * @defgroup synchronization    Synchronization\n * @defgroup timing             Timing\n * @defgroup task_scheduling    Task Scheduling\n */\n\n// Simple text that is displayed on the main page of Doxygen documentation.\n/**\n * \\mainpage Main Page\n *\n * Click the tabs above for information about the\n * - <a href=\"./modules.html\">Modules</a> (groups of functionality) implemented by the library\n * - <a href=\"./annotated.html\">Classes</a> provided by the library\n * - <a href=\"./files.html\">Files</a> constituting the library.\n * .\n * Please note that significant part of TBB functionality is implemented in the form of\n * template functions, descriptions of which are not accessible on the <a href=\"./annotated.html\">Classes</a>\n * tab. Use <a href=\"./modules.html\">Modules</a> or <a href=\"./namespacemembers.html\">Namespace/Namespace Members</a>\n * tabs to find them.\n *\n * Additional pieces of information can be found here\n * - \\subpage concepts\n * .\n */\n\n/** \\page concepts TBB concepts\n\n    A concept is a set of requirements to a type, which are necessary and sufficient\n    for the type to model a particular behavior or a set of behaviors. Some concepts\n    are specific to a particular algorithm (e.g. algorithm body), while other ones\n    are common to several algorithms (e.g. range concept).\n\n    All TBB algorithms make use of different classes implementing various concepts.\n    Implementation classes are supplied by the user as type arguments of template\n    parameters and/or as objects passed as function call arguments. The library\n    provides predefined  implementations of some concepts (e.g. several kinds of\n    \\ref range_req \"ranges\"), while other ones must always be implemented by the user.\n\n    TBB defines a set of minimal requirements each concept must conform to. Here is\n    the list of different concepts hyperlinked to the corresponding requirements specifications:\n    - \\subpage range_req\n    - \\subpage parallel_do_body_req\n    - \\subpage parallel_for_body_req\n    - \\subpage parallel_reduce_body_req\n    - \\subpage parallel_scan_body_req\n    - \\subpage parallel_sort_iter_req\n**/\n\n// tbb_config.h should be included the first since it contains macro definitions used in other headers\n#include \"tbb_config.h\"\n\n#if _MSC_VER >=1400\n    #define __TBB_EXPORTED_FUNC   __cdecl\n    #define __TBB_EXPORTED_METHOD __thiscall\n#else\n    #define __TBB_EXPORTED_FUNC\n    #define __TBB_EXPORTED_METHOD\n#endif\n\n#if __INTEL_COMPILER || _MSC_VER\n#define __TBB_NOINLINE(decl) __declspec(noinline) decl\n#elif __GNUC__\n#define __TBB_NOINLINE(decl) decl __attribute__ ((noinline))\n#else\n#define __TBB_NOINLINE(decl) decl\n#endif\n\n#if __TBB_NOEXCEPT_PRESENT\n#define __TBB_NOEXCEPT(expression) noexcept(expression)\n#else\n#define __TBB_NOEXCEPT(expression)\n#endif\n\n#include <cstddef>      /* Need size_t and ptrdiff_t */\n\n#if _MSC_VER\n    #define __TBB_tbb_windef_H\n    #include \"internal/_tbb_windef.h\"\n    #undef __TBB_tbb_windef_H\n#endif\n#if !defined(_MSC_VER) || _MSC_VER>=1600\n    #include <stdint.h>\n#endif\n\n//! Type for an assertion handler\ntypedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );\n\n#if __TBBMALLOC_BUILD\nnamespace rml { namespace internal {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : rml::internal::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#else\nnamespace tbb {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#endif\n\n    //! Set assertion handler and return previous value of it.\n    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );\n\n    //! Process an assertion failure.\n    /** Normally called from __TBB_ASSERT macro.\n        If assertion handler is null, print message for assertion failure and abort.\n        Otherwise call the assertion handler. */\n    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );\n\n#if __TBBMALLOC_BUILD\n}}  // namespace rml::internal\n#else\n} // namespace tbb\n#endif\n\n#if TBB_USE_ASSERT\n\n    //! Assert that predicate is true.\n    /** If predicate is false, print assertion failure message.\n        If the comment argument is not NULL, it is printed as part of the failure message.\n        The comment argument has no other effect. */\n    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_RELEASE(predicate,message)\n\n    #define __TBB_ASSERT_EX __TBB_ASSERT\n\n#else /* !TBB_USE_ASSERT */\n\n    //! No-op version of __TBB_ASSERT.\n    #define __TBB_ASSERT(predicate,comment) ((void)0)\n    //! \"Extended\" version is useful to suppress warnings if a variable is only used with an assert\n    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))\n\n#endif /* !TBB_USE_ASSERT */\n\n//! The namespace tbb contains all components of the library.\nnamespace tbb {\n\n    namespace internal {\n#if _MSC_VER && _MSC_VER<1600\n        typedef __int8 int8_t;\n        typedef __int16 int16_t;\n        typedef __int32 int32_t;\n        typedef __int64 int64_t;\n        typedef unsigned __int8 uint8_t;\n        typedef unsigned __int16 uint16_t;\n        typedef unsigned __int32 uint32_t;\n        typedef unsigned __int64 uint64_t;\n#else /* Posix */\n        using ::int8_t;\n        using ::int16_t;\n        using ::int32_t;\n        using ::int64_t;\n        using ::uint8_t;\n        using ::uint16_t;\n        using ::uint32_t;\n        using ::uint64_t;\n#endif /* Posix */\n    } // namespace internal\n\n    using std::size_t;\n    using std::ptrdiff_t;\n\n//! The function returns the interface version of the TBB shared library being used.\n/**\n * The version it returns is determined at runtime, not at compile/link time.\n * So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.\n */\nextern \"C\" int __TBB_EXPORTED_FUNC TBB_runtime_interface_version();\n\n/**\n * @cond INTERNAL\n * @brief Identifiers declared inside namespace internal should never be used directly by client code.\n */\nnamespace internal {\n\n//! Compile-time constant that is upper bound on cache line/sector size.\n/** It should be used only in situations where having a compile-time upper\n    bound is more useful than a run-time exact answer.\n    @ingroup memory_allocation */\nconst size_t NFS_MaxLineSize = 128;\n\n/** Label for data that may be accessed from different threads, and that may eventually become wrapped\n    in a formal atomic type.\n\n    Note that no problems have yet been observed relating to the definition currently being empty,\n    even if at least \"volatile\" would seem to be in order to avoid data sometimes temporarily hiding\n    in a register (although \"volatile\" as a \"poor man's atomic\" lacks several other features of a proper\n    atomic, some of which are now provided instead through specialized functions).\n\n    Note that usage is intentionally compatible with a definition as qualifier \"volatile\",\n    both as a way to have the compiler help enforce use of the label and to quickly rule out\n    one potential issue.\n\n    Note however that, with some architecture/compiler combinations, e.g. on IA-64 architecture, \"volatile\"\n    also has non-portable memory semantics that are needlessly expensive for \"relaxed\" operations.\n\n    Note that this must only be applied to data that will not change bit patterns when cast to/from\n    an integral type of the same length; tbb::atomic must be used instead for, e.g., floating-point types.\n\n    TODO: apply wherever relevant **/\n#define __TBB_atomic // intentionally empty, see above\n\n#if __TBB_OVERRIDE_PRESENT\n#define __TBB_override override\n#else\n#define __TBB_override // formal comment only\n#endif\n\ntemplate<class T, size_t S, size_t R>\nstruct padded_base : T {\n    char pad[S - R];\n};\ntemplate<class T, size_t S> struct padded_base<T, S, 0> : T {};\n\n//! Pads type T to fill out to a multiple of cache line size.\ntemplate<class T, size_t S = NFS_MaxLineSize>\nstruct padded : padded_base<T, S, sizeof(T) % S> {};\n\n//! Extended variant of the standard offsetof macro\n/** The standard offsetof macro is not sufficient for TBB as it can be used for\n    POD-types only. The constant 0x1000 (not NULL) is necessary to appease GCC. **/\n#define __TBB_offsetof(class_name, member_name) \\\n    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)\n\n//! Returns address of the object containing a member with the given name and address\n#define __TBB_get_object_ref(class_name, member_name, member_addr) \\\n    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))\n\n//! Throws std::runtime_error with what() returning error_code description prefixed with aux_info\nvoid __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* aux_info );\n\n#if TBB_USE_EXCEPTIONS\n    #define __TBB_TRY try\n    #define __TBB_CATCH(e) catch(e)\n    #define __TBB_THROW(e) throw e\n    #define __TBB_RETHROW() throw\n#else /* !TBB_USE_EXCEPTIONS */\n    inline bool __TBB_false() { return false; }\n    #define __TBB_TRY\n    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )\n    #define __TBB_THROW(e) tbb::internal::suppress_unused_warning(e)\n    #define __TBB_RETHROW() ((void)0)\n#endif /* !TBB_USE_EXCEPTIONS */\n\n//! Report a runtime warning.\nvoid __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );\n\n#if TBB_USE_ASSERT\nstatic void* const poisoned_ptr = reinterpret_cast<void*>(-1);\n\n//! Set p to invalid pointer value.\n//  Also works for regular (non-__TBB_atomic) pointers.\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & p ) { p = reinterpret_cast<T*>(poisoned_ptr); }\n\n/** Expected to be used in assertions only, thus no empty form is defined. **/\ntemplate<typename T>\ninline bool is_poisoned( T* p ) { return p == reinterpret_cast<T*>(poisoned_ptr); }\n#else\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & ) {/*do nothing*/}\n#endif /* !TBB_USE_ASSERT */\n\n//! Cast between unrelated pointer types.\n/** This method should be used sparingly as a last resort for dealing with\n    situations that inherently break strict ISO C++ aliasing rules. */\n// T is a pointer type because it will be explicitly provided by the programmer as a template argument;\n// U is a referent type to enable the compiler to check that \"ptr\" is a pointer, deducing U in the process.\ntemplate<typename T, typename U>\ninline T punned_cast( U* ptr ) {\n    uintptr_t x = reinterpret_cast<uintptr_t>(ptr);\n    return reinterpret_cast<T>(x);\n}\n\n//! Base class for types that should not be assigned.\nclass no_assign {\n    // Deny assignment\n    void operator=( const no_assign& );\npublic:\n#if __GNUC__\n    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.\n    no_assign() {}\n#endif /* __GNUC__ */\n};\n\n//! Base class for types that should not be copied or assigned.\nclass no_copy: no_assign {\n    //! Deny copy construction\n    no_copy( const no_copy& );\npublic:\n    //! Allow default construction\n    no_copy() {}\n};\n\n#if TBB_DEPRECATED_MUTEX_COPYING\nclass mutex_copy_deprecated_and_disabled {};\n#else\n// By default various implementations of mutexes are not copy constructible\n// and not copy assignable.\nclass mutex_copy_deprecated_and_disabled : no_copy {};\n#endif\n\n//! A function to check if passed in pointer is aligned on a specific border\ntemplate<typename T>\ninline bool is_aligned(T* pointer, uintptr_t alignment) {\n    return 0==((uintptr_t)pointer & (alignment-1));\n}\n\n//! A function to check if passed integer is a power of 2\ntemplate<typename integer_type>\ninline bool is_power_of_two(integer_type arg) {\n    return arg && (0 == (arg & (arg - 1)));\n}\n\n//! A function to compute arg modulo divisor where divisor is a power of 2.\ntemplate<typename argument_integer_type, typename divisor_integer_type>\ninline argument_integer_type modulo_power_of_two(argument_integer_type arg, divisor_integer_type divisor) {\n    __TBB_ASSERT( is_power_of_two(divisor), \"Divisor should be a power of two\" );\n    return (arg & (divisor - 1));\n}\n\n\n//! A function to determine if arg is a power of 2 at least as big as another power of 2.\n// i.e. for strictly positive i and j, with j being a power of 2,\n// determines whether i==j<<k for some nonnegative k (so i==j yields true).\ntemplate<typename argument_integer_type, typename power2_integer_type>\ninline bool is_power_of_two_at_least(argument_integer_type arg, power2_integer_type power2) {\n    __TBB_ASSERT( is_power_of_two(power2), \"Divisor should be a power of two\" );\n    return 0 == (arg & (arg - power2));\n}\n\n//! Utility template function to prevent \"unused\" warnings by various compilers.\ntemplate<typename T1> void suppress_unused_warning( const T1& ) {}\ntemplate<typename T1, typename T2> void suppress_unused_warning( const T1&, const T2& ) {}\ntemplate<typename T1, typename T2, typename T3> void suppress_unused_warning( const T1&, const T2&, const T3& ) {}\n\n// Struct to be used as a version tag for inline functions.\n/** Version tag can be necessary to prevent loader on Linux from using the wrong\n    symbol in debug builds (when inline functions are compiled as out-of-line). **/\nstruct version_tag_v3 {};\n\ntypedef version_tag_v3 version_tag;\n\n} // internal\n\n//! Dummy type that distinguishes splitting constructor from copy constructor.\n/**\n * See description of parallel_for and parallel_reduce for example usages.\n * @ingroup algorithms\n */\nclass split {\n};\n\n//! Type enables transmission of splitting proportion from partitioners to range objects\n/**\n * In order to make use of such facility Range objects must implement\n * splitting constructor with this type passed and initialize static\n * constant boolean field 'is_splittable_in_proportion' with the value\n * of 'true'\n */\nclass proportional_split: internal::no_assign {\npublic:\n    proportional_split(size_t _left = 1, size_t _right = 1) : my_left(_left), my_right(_right) { }\n\n    size_t left() const { return my_left; }\n    size_t right() const { return my_right; }\n\n    // used when range does not support proportional split\n    operator split() const { return split(); }\n\n#if __TBB_ENABLE_RANGE_FEEDBACK\n    void set_proportion(size_t _left, size_t _right) {\n        my_left = _left;\n        my_right = _right;\n    }\n#endif\nprivate:\n    size_t my_left, my_right;\n};\n\n} // tbb\n\n// Following is a set of classes and functions typically used in compile-time \"metaprogramming\".\n// TODO: move all that to a separate header\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT || __TBB_CPP11_SMART_POINTERS_PRESENT\n#include <memory> // for allocator_traits, unique_ptr\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT || __TBB_CPP11_DECLTYPE_PRESENT || _LIBCPP_VERSION\n#include <utility> // for std::move, std::forward, std::declval\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n#if __TBB_CPP11_SMART_POINTERS_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename T, typename... Args>\n    std::unique_ptr<T> make_unique(Args&&... args) {\n        return std::unique_ptr<T>(new T(std::forward<Args>(args)...));\n    }\n#endif\n\n//! Class for determining type of std::allocator<T>::value_type.\ntemplate<typename T>\nstruct allocator_type {\n    typedef T value_type;\n};\n\n#if _MSC_VER\n//! Microsoft std::allocator has non-standard extension that strips const from a type.\ntemplate<typename T>\nstruct allocator_type<const T> {\n    typedef T value_type;\n};\n#endif\n\n// Ad-hoc implementation of true_type & false_type\n// Intended strictly for internal use! For public APIs (traits etc), use C++11 analogues.\ntemplate <bool v>\nstruct bool_constant {\n    static /*constexpr*/ const bool value = v;\n};\ntypedef bool_constant<true> true_type;\ntypedef bool_constant<false> false_type;\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\nusing std::allocator_traits;\n#else\ntemplate<typename allocator>\nstruct allocator_traits{\n    typedef tbb::internal::false_type propagate_on_container_move_assignment;\n};\n#endif\n\n//! A template to select either 32-bit or 64-bit constant as compile time, depending on machine word size.\ntemplate <unsigned u, unsigned long long ull >\nstruct select_size_t_constant {\n    //Explicit cast is needed to avoid compiler warnings about possible truncation.\n    //The value of the right size,   which is selected by ?:, is anyway not truncated or promoted.\n    static const size_t value = (size_t)((sizeof(size_t)==sizeof(u)) ? u : ull);\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nusing std::move;\nusing std::forward;\n#elif defined(_LIBCPP_NAMESPACE)\n// libc++ defines \"pre-C++11 move and forward\" similarly to ours; use it to avoid name conflicts in some cases.\nusing std::_LIBCPP_NAMESPACE::move;\nusing std::_LIBCPP_NAMESPACE::forward;\n#else\n// It is assumed that cv qualifiers, if any, are part of the deduced type.\ntemplate <typename T>\nT& move( T& x ) { return x; }\ntemplate <typename T>\nT& forward( T& x ) { return x; }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n// Helper macros to simplify writing templates working with both C++03 and C++11.\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#define  __TBB_FORWARDING_REF(A) A&&\n#else\n// It is assumed that cv qualifiers, if any, are part of a deduced type.\n// Thus this macro should not be used in public interfaces.\n#define  __TBB_FORWARDING_REF(A) A&\n#endif\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#define __TBB_PARAMETER_PACK ...\n#define __TBB_PACK_EXPANSION(A) A...\n#else\n#define __TBB_PARAMETER_PACK\n#define __TBB_PACK_EXPANSION(A) A\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_CPP11_DECLTYPE_PRESENT\n#if __TBB_CPP11_DECLVAL_BROKEN\n// Ad-hoc implementation of std::declval\ntemplate <class T> __TBB_FORWARDING_REF(T) declval() /*noexcept*/;\n#else\nusing std::declval;\n#endif\n#endif\n\ntemplate <bool condition>\nstruct STATIC_ASSERTION_FAILED;\n\ntemplate <>\nstruct STATIC_ASSERTION_FAILED<false> { enum {value=1};};\n\ntemplate<>\nstruct STATIC_ASSERTION_FAILED<true>; //intentionally left undefined to cause compile time error\n\n//! @endcond\n}} // namespace tbb::internal\n\n#if __TBB_STATIC_ASSERT_PRESENT\n#define __TBB_STATIC_ASSERT(condition,msg) static_assert(condition,msg)\n#else\n//please note condition is intentionally inverted to get a bit more understandable error msg\n#define __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)       \\\n    enum {static_assert_on_line_##line = tbb::internal::STATIC_ASSERTION_FAILED<!(condition)>::value}\n\n#define __TBB_STATIC_ASSERT_IMPL(condition,msg,line) __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)\n//! Verify condition, at compile time\n#define __TBB_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT_IMPL(condition,msg,__LINE__)\n#endif\n\n#endif /* RC_INVOKED */\n#endif /* __TBB_tbb_stddef_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbb_thread.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tbb_thread_H\n#define __TBB_tbb_thread_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )\nnamespace tbb { namespace internal {\n#if __TBB_WIN8UI_SUPPORT\n    typedef size_t thread_id_type;\n#else  // __TBB_WIN8UI_SUPPORT\n    typedef DWORD thread_id_type;\n#endif // __TBB_WIN8UI_SUPPORT\n}} //namespace tbb::internal\n#else\n#define __TBB_NATIVE_THREAD_ROUTINE void*\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )\n#include <pthread.h>\nnamespace tbb { namespace internal {\n    typedef pthread_t thread_id_type;\n}} //namespace tbb::internal\n#endif // _WIN32||_WIN64\n\n#include \"atomic.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tick_count.h\"\n\n#include __TBB_STD_SWAP_HEADER\n#include <iosfwd>\n\nnamespace tbb {\n\nnamespace internal {\n    class tbb_thread_v3;\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n\nnamespace internal {\n\n    //! Allocate a closure\n    void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );\n    //! Free a closure allocated by allocate_closure_v3\n    void __TBB_EXPORTED_FUNC free_closure_v3( void* );\n\n    struct thread_closure_base {\n        void* operator new( size_t size ) {return allocate_closure_v3(size);}\n        void operator delete( void* ptr ) {free_closure_v3(ptr);}\n    };\n\n    template<class F> struct thread_closure_0: thread_closure_base {\n        F function;\n\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_0 *self = static_cast<thread_closure_0*>(c);\n            self->function();\n            delete self;\n            return 0;\n        }\n        thread_closure_0( const F& f ) : function(f) {}\n    };\n    //! Structure used to pass user function with 1 argument to thread.\n    template<class F, class X> struct thread_closure_1: thread_closure_base {\n        F function;\n        X arg1;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_1 *self = static_cast<thread_closure_1*>(c);\n            self->function(self->arg1);\n            delete self;\n            return 0;\n        }\n        thread_closure_1( const F& f, const X& x ) : function(f), arg1(x) {}\n    };\n    template<class F, class X, class Y> struct thread_closure_2: thread_closure_base {\n        F function;\n        X arg1;\n        Y arg2;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_2 *self = static_cast<thread_closure_2*>(c);\n            self->function(self->arg1, self->arg2);\n            delete self;\n            return 0;\n        }\n        thread_closure_2( const F& f, const X& x, const Y& y ) : function(f), arg1(x), arg2(y) {}\n    };\n\n    //! Versioned thread class.\n    class tbb_thread_v3 {\n#if __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN\n        // Workaround for a compiler bug: declaring the copy constructor as public\n        // enables use of the moving constructor.\n        // The definition is not provided in order to prohibit copying.\n    public:\n#endif\n        tbb_thread_v3(const tbb_thread_v3&); // = delete;   // Deny access\n    public:\n#if _WIN32||_WIN64\n        typedef HANDLE native_handle_type;\n#else\n        typedef pthread_t native_handle_type;\n#endif // _WIN32||_WIN64\n\n        class id;\n        //! Constructs a thread object that does not represent a thread of execution.\n        tbb_thread_v3() __TBB_NOEXCEPT(true) : my_handle(0)\n#if _WIN32||_WIN64\n            , my_thread_id(0)\n#endif // _WIN32||_WIN64\n        {}\n\n        //! Constructs an object and executes f() in a new thread\n        template <class F> explicit tbb_thread_v3(F f) {\n            typedef internal::thread_closure_0<F> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f));\n        }\n        //! Constructs an object and executes f(x) in a new thread\n        template <class F, class X> tbb_thread_v3(F f, X x) {\n            typedef internal::thread_closure_1<F,X> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x));\n        }\n        //! Constructs an object and executes f(x,y) in a new thread\n        template <class F, class X, class Y> tbb_thread_v3(F f, X x, Y y) {\n            typedef internal::thread_closure_2<F,X,Y> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x,y));\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3(tbb_thread_v3&& x) __TBB_NOEXCEPT(true)\n            : my_handle(x.my_handle)\n#if _WIN32||_WIN64\n            , my_thread_id(x.my_thread_id)\n#endif\n        {\n            x.internal_wipe();\n        }\n        tbb_thread_v3& operator=(tbb_thread_v3&& x) __TBB_NOEXCEPT(true) {\n            internal_move(x);\n            return *this;\n        }\n    private:\n        tbb_thread_v3& operator=(const tbb_thread_v3& x); // = delete;\n    public:\n#else  // __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3& operator=(tbb_thread_v3& x) {\n            internal_move(x);\n            return *this;\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n        void swap( tbb_thread_v3& t ) __TBB_NOEXCEPT(true) {tbb::swap( *this, t );}\n        bool joinable() const __TBB_NOEXCEPT(true) {return my_handle!=0; }\n        //! The completion of the thread represented by *this happens before join() returns.\n        void __TBB_EXPORTED_METHOD join();\n        //! When detach() returns, *this no longer represents the possibly continuing thread of execution.\n        void __TBB_EXPORTED_METHOD detach();\n        ~tbb_thread_v3() {if( joinable() ) detach();}\n        inline id get_id() const __TBB_NOEXCEPT(true);\n        native_handle_type native_handle() { return my_handle; }\n\n        //! The number of hardware thread contexts.\n        /** Before TBB 3.0 U4 this methods returned the number of logical CPU in\n            the system. Currently on Windows, Linux and FreeBSD it returns the\n            number of logical CPUs available to the current process in accordance\n            with its affinity mask.\n\n            NOTE: The return value of this method never changes after its first\n            invocation. This means that changes in the process affinity mask that\n            took place after this method was first invoked will not affect the\n            number of worker threads in the TBB worker threads pool. **/\n        static unsigned __TBB_EXPORTED_FUNC hardware_concurrency() __TBB_NOEXCEPT(true);\n    private:\n        native_handle_type my_handle;\n#if _WIN32||_WIN64\n        thread_id_type my_thread_id;\n#endif // _WIN32||_WIN64\n\n        void internal_wipe() __TBB_NOEXCEPT(true) {\n            my_handle = 0;\n#if _WIN32||_WIN64\n            my_thread_id = 0;\n#endif\n        }\n        void internal_move(tbb_thread_v3& x) __TBB_NOEXCEPT(true) {\n            if (joinable()) detach();\n            my_handle = x.my_handle;\n#if _WIN32||_WIN64\n            my_thread_id = x.my_thread_id;\n#endif // _WIN32||_WIN64\n            x.internal_wipe();\n        }\n\n        /** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */\n        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),\n                             void* closure );\n        friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n        friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n    };\n\n    class tbb_thread_v3::id {\n        thread_id_type my_id;\n        id( thread_id_type id_ ) : my_id(id_) {}\n\n        friend class tbb_thread_v3;\n    public:\n        id() __TBB_NOEXCEPT(true) : my_id(0) {}\n\n        friend bool operator==( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n\n        template<class charT, class traits>\n        friend std::basic_ostream<charT, traits>&\n        operator<< (std::basic_ostream<charT, traits> &out,\n                    tbb_thread_v3::id id)\n        {\n            out << id.my_id;\n            return out;\n        }\n        friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n\n        friend inline size_t tbb_hasher( const tbb_thread_v3::id& id ) {\n            __TBB_STATIC_ASSERT(sizeof(id.my_id) <= sizeof(size_t), \"Implementaion assumes that thread_id_type fits into machine word\");\n            return tbb::tbb_hasher(id.my_id);\n        }\n\n        // A workaround for lack of tbb::atomic<id> (which would require id to be POD in C++03).\n        friend id atomic_compare_and_swap(id& location, const id& value, const id& comparand){\n            return as_atomic(location.my_id).compare_and_swap(value.my_id, comparand.my_id);\n        }\n    }; // tbb_thread_v3::id\n\n    tbb_thread_v3::id tbb_thread_v3::get_id() const __TBB_NOEXCEPT(true) {\n#if _WIN32||_WIN64\n        return id(my_thread_id);\n#else\n        return id(my_handle);\n#endif // _WIN32||_WIN64\n    }\n\n    void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n    tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n    void __TBB_EXPORTED_FUNC thread_yield_v3();\n    void __TBB_EXPORTED_FUNC thread_sleep_v3(const tick_count::interval_t &i);\n\n    inline bool operator==(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id == y.my_id;\n    }\n    inline bool operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id != y.my_id;\n    }\n    inline bool operator<(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id < y.my_id;\n    }\n    inline bool operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id <= y.my_id;\n    }\n    inline bool operator>(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id > y.my_id;\n    }\n    inline bool operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id >= y.my_id;\n    }\n\n} // namespace internal;\n\n//! Users reference thread class by name tbb_thread\ntypedef internal::tbb_thread_v3 tbb_thread;\n\nusing internal::operator==;\nusing internal::operator!=;\nusing internal::operator<;\nusing internal::operator>;\nusing internal::operator<=;\nusing internal::operator>=;\n\ninline void move( tbb_thread& t1, tbb_thread& t2 ) {\n    internal::move_v3(t1, t2);\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 )  __TBB_NOEXCEPT(true) {\n    std::swap(t1.my_handle, t2.my_handle);\n#if _WIN32||_WIN64\n    std::swap(t1.my_thread_id, t2.my_thread_id);\n#endif /* _WIN32||_WIN64 */\n}\n\nnamespace this_tbb_thread {\n    inline tbb_thread::id get_id() { return internal::thread_get_id_v3(); }\n    //! Offers the operating system the opportunity to schedule another thread.\n    inline void yield() { internal::thread_yield_v3(); }\n    //! The current thread blocks at least until the time specified.\n    inline void sleep(const tick_count::interval_t &i) {\n        internal::thread_sleep_v3(i);\n    }\n}  // namespace this_tbb_thread\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_thread_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tbbmalloc_proxy.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n/*\nReplacing the standard memory allocation routines in Microsoft* C/C++ RTL\n(malloc/free, global new/delete, etc.) with the TBB memory allocator.\n\nInclude the following header to a source of any binary which is loaded during\napplication startup\n\n#include \"tbb/tbbmalloc_proxy.h\"\n\nor add following parameters to the linker options for the binary which is\nloaded during application startup. It can be either exe-file or dll.\n\nFor win32\ntbbmalloc_proxy.lib /INCLUDE:\"___TBB_malloc_proxy\"\nwin64\ntbbmalloc_proxy.lib /INCLUDE:\"__TBB_malloc_proxy\"\n*/\n\n#ifndef __TBB_tbbmalloc_proxy_H\n#define __TBB_tbbmalloc_proxy_H\n\n#if _MSC_VER\n\n#ifdef _DEBUG\n    #pragma comment(lib, \"tbbmalloc_proxy_debug.lib\")\n#else\n    #pragma comment(lib, \"tbbmalloc_proxy.lib\")\n#endif\n\n#if defined(_WIN64)\n    #pragma comment(linker, \"/include:__TBB_malloc_proxy\")\n#else\n    #pragma comment(linker, \"/include:___TBB_malloc_proxy\")\n#endif\n\n#else\n/* Primarily to support MinGW */\n\nextern \"C\" void __TBB_malloc_proxy();\nstruct __TBB_malloc_proxy_caller {\n    __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }\n} volatile __TBB_malloc_proxy_helper_object;\n\n#endif // _MSC_VER\n\n#endif //__TBB_tbbmalloc_proxy_H\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/include/tbb/tick_count.h",
    "content": "/*\n    Copyright (c) 2005-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __TBB_tick_count_H\n#define __TBB_tick_count_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#elif __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif /* (choice of OS) */\n\nnamespace tbb {\n\n//! Absolute timestamp\n/** @ingroup timing */\nclass tick_count {\npublic:\n    //! Relative time interval.\n    class interval_t {\n        long long value;\n        explicit interval_t( long long value_ ) : value(value_) {}\n    public:\n        //! Construct a time interval representing zero time duration\n        interval_t() : value(0) {};\n\n        //! Construct a time interval representing sec seconds time  duration\n        explicit interval_t( double sec );\n\n        //! Return the length of a time interval in seconds\n        double seconds() const;\n\n        friend class tbb::tick_count;\n\n        //! Extract the intervals from the tick_counts and subtract them.\n        friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n        //! Add two intervals.\n        friend interval_t operator+( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value+j.value);\n        }\n\n        //! Subtract two intervals.\n        friend interval_t operator-( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value-j.value);\n        }\n\n        //! Accumulation operator\n        interval_t& operator+=( const interval_t& i ) {value += i.value; return *this;}\n\n        //! Subtraction operator\n        interval_t& operator-=( const interval_t& i ) {value -= i.value; return *this;}\n    private:\n        static long long ticks_per_second(){\n#if _WIN32||_WIN64\n            LARGE_INTEGER qpfreq;\n            int rval = QueryPerformanceFrequency(&qpfreq);\n            __TBB_ASSERT_EX(rval, \"QueryPerformanceFrequency returned zero\");\n            return static_cast<long long>(qpfreq.QuadPart);\n#elif __linux__\n            return static_cast<long long>(1E9);\n#else /* generic Unix */\n            return static_cast<long long>(1E6);\n#endif /* (choice of OS) */\n        }\n    };\n\n    //! Construct an absolute timestamp initialized to zero.\n    tick_count() : my_count(0) {};\n\n    //! Return current time.\n    static tick_count now();\n\n    //! Subtract two timestamps to get the time interval between\n    friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n    //! Return the resolution of the clock in seconds per tick.\n    static double resolution() { return 1.0 / interval_t::ticks_per_second(); }\n\nprivate:\n    long long my_count;\n};\n\ninline tick_count tick_count::now() {\n    tick_count result;\n#if _WIN32||_WIN64\n    LARGE_INTEGER qpcnt;\n    int rval = QueryPerformanceCounter(&qpcnt);\n    __TBB_ASSERT_EX(rval, \"QueryPerformanceCounter failed\");\n    result.my_count = qpcnt.QuadPart;\n#elif __linux__\n    struct timespec ts;\n    int status = clock_gettime( CLOCK_REALTIME, &ts );\n    __TBB_ASSERT_EX( status==0, \"CLOCK_REALTIME not supported\" );\n    result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);\n#else /* generic Unix */\n    struct timeval tv;\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);\n#endif /*(choice of OS) */\n    return result;\n}\n\ninline tick_count::interval_t::interval_t( double sec ) {\n    value = static_cast<long long>(sec*interval_t::ticks_per_second());\n}\n\ninline tick_count::interval_t operator-( const tick_count& t1, const tick_count& t0 ) {\n    return tick_count::interval_t( t1.my_count-t0.my_count );\n}\n\ninline double tick_count::interval_t::seconds() const {\n    return value*tick_count::resolution();\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tick_count_H */\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\nTop level directory for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n<H2>Common directories</H2>\n<DL>\n<DT><A HREF=\"doc/html/index.html\">doc</A>\n<DD>Documentation for the library.\n<DT><A HREF=\"include/index.html\">include</A>\n<DD>Include files required for compiling code that uses the library.\n<DT><A HREF=\"examples/index.html\">examples</A>\n<DD>Examples of how to use the library.\n<DT><A HREF=\"python/index.html\">python</A>\n<DD>Python* API for Intel TBB.\n</DL>\n<H2>Intel TBB source package</H2>\n<P>\nTo build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.\nTo port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.\n</P>\n<H3>Files</H3>\n<DL>\n<DT><A HREF=\"Makefile\">Makefile</A>\n<DD>Top-level Makefile for Intel TBB. See also the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"src/index.html\">src</A>\n<DD>Source code for the library.\n<DT><A HREF=\"build/index.html\">build</A>, <A HREF=\"jni/\">jni</A>\n<DD>Internal Makefile infrastructure for Intel TBB. Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H2>Intel TBB binary package</H2>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"bin\">bin</A>\n<DD>Start-up scripts for sourcing library for Linux* OS and macOS*. For Windows* OS: start-up scripts and dynamic-link libraries.\n<DT><A HREF=\"lib\">lib</A>\n<DD>Platform-specific binary files for the library.\n</DL>\n<HR>\n<p></p>\nCopyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/Makefile",
    "content": "# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\ntbb_root?=..\ninclude $(tbb_root)/build/common.inc\n.PHONY: all release test install test-install\n\nexport TBBROOT=$(abspath $(tbb_root))\nSRC=$(tbb_root)/python/*.py $(tbb_root)/python/tbb/*\nPY_SETUP=python $(tbb_root)/python/setup.py\n\nall: install test\n\nclean:\n\t$(PY_SETUP) clean -b$(CURDIR)\n\nrelease: CC=$(compiler)\nrelease: $(SRC) rml\n\t$(PY_SETUP) build -b$(CURDIR) -f check\n\ninstall: CC=$(compiler)\ninstall: $(SRC) rml\n\t$(PY_SETUP) build -b$(CURDIR) install\n\ntest:\n\tpython -m tbb test\n\nrml:\nifeq (linux,$(tbb_os))\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/rml/Makefile cfg=release rml\nrml_%:\n\t$(MAKE) -C \"$(work_dir)_release\" -rf $(tbb_root)/python/rml/Makefile cfg=release $(subst rml_,,$@)\nendif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/TBB.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom tbb import *\nfrom tbb import __all__, __doc__\n\nif __name__ == \"__main__\":\n    from tbb import _main\n    import sys\n    sys.exit(_main())\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Python* API for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n</H2>\n\n<H2>Overview</H2>\nIt is a preview Python* module which unlocks opportunities for additional performance in multi-threaded and multiprocess Python programs by enabling threading composability\nbetween two or more thread-enabled libraries like Numpy, Scipy, Sklearn, Dask, Joblib, and etc.\n<p></p>\nThe biggest improvement can be achieved when a task pool like the ThreadPool or Pool from the Python standard library or libraries like Dask or Joblib (used either in multi-threading or multi-processing mode)\nexecute tasks calling compute-intensive functions of Numpy/Scipy/Sklearn/PyDAAL which in turn are parallelized using Intel&reg; Math Kernel Library or/and Intel&reg; TBB.\n<p></p>\nThe module implements Pool class with the standard interface using Intel&reg; TBB which can be used to replace Python's ThreadPool.\nThanks to the monkey-patching technique implemented in class Monkey, no source code change is needed in order to enable threading composability in Python programs.\n<p></p>\nFor more information and examples, please refer to <A HREF=\"http://software.intel.com/en-us/blogs/2016/04/04/unleash-parallel-performance-of-python-programs\">online blog</A>.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"rml\">rml</A>\n<DD>The folder contains sources for building the plugin with cross-process dynamic thread scheduler implementation.\n<DT><A HREF=\"tbb\">tbb</A>\n<DD>The folder contains Python module sources.\n</DL>\n\n<H2>Files</H2>\n<DL>\n<DT><A HREF=\"setup.py\">setup.py</A>\n<DD>Standard Python setup script.\n<DT><A HREF=\"Makefile\">Makefile</A>\n<DD>Internal Makefile for building, installing, and testing. See below.\n<DT><A HREF=\"TBB.py\">TBB.py</A>\n<DD>Alternative entry point for Python module.\n</DL>\n\n<A NAME=build><H2>Build and install</H2></A>\nFor accessing targets defined in python/Makefile, please use\n<A HREF=\"../src/index.html\">src/Makefile</A>\ninstead and build runtime libraries before working with Python.\n<DL>\n<DT><TT>make -C ../src python_all</TT>\n<DD>Install and test as described below.\n<DT><TT>make -C ../src python_install</TT>\n<DD>Install module into Python environment.\n<DT><TT>make -C ../src python_test</TT>\n<DD>Test installed Intel&reg; TBB module for Python.\n<DT><TT>make -C ../src python_release</TT>\n<DD>Recompile Python module. Result is located in Intel&reg; TBB build directory.\n<DT><TT>make  -C ../src python_clean</TT>\n<DD>Remove any intermediate files produced by the commands above. Does not remove installed module.\n</DL>\n\n<H2>Command-line interface</H2>\n<DL>\n<DT><TT>python -m tbb -h</TT>\n<DD>Print documentation on command-line interface</DD>\n<DT><TT>pydoc tbb</TT>\n<DD>Read built-in documentation for Python interfaces.</DD>\n<DT><TT>python-tbb your_script.py</TT>\n<DT><TT>python -m tbb your_script.py</TT>\n<DD>Run your_script.py in context of `with tbb.Monkey():` when Intel&reg; TBB is enabled. By default only multi-threading will be covered.</DD>\n<DT><TT>python -m tbb --ipc your_script.py</TT>\n<DD>Run your_script.py in context of `with tbb.Monkey():` when Intel&reg; TBB enabled in both multi-threading and multi-processing modes.</DD>\n</DL>\n\n<H2>System Requirements</H2>\nThe Python module was not tested on older versions of Python thus we require at least Python versions 2.7 and 3.5 or higher.<BR>\nSWIG must be of version 3.0.6 or higher<BR>\nOS versions:\nMicrosoft* Windows* Server 2012,\nMicrosoft* Windows* 10,\nUbuntu* 14.04 LTS,\nRed Hat* Enterprise Linux* 7.\n<HR>\n<A href=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2016-2018 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/rml/Makefile",
    "content": "# Copyright (c) 2017-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n.NOTPARALLEL:\n\ntbb_root ?= ../..\nBUILDING_PHASE=0\nTEST_RESOURCE = $(RML.RES)\ninclude $(tbb_root)/build/common.inc\nDEBUG_SUFFIX=$(findstring _debug,_$(cfg))\n\nifneq (linux,$(target))\n$(error \"IPC RML is supported on Linux only\")\nendif\n\n.PHONY: default rml test clean\n\n# default target\ndefault: rml test\n\nRML_ROOT ?= $(tbb_root)/src/rml\nRML_SERVER_ROOT = $(RML_ROOT)/server\n# TODO: new API needs to be added for this server, exposing everything\nRML.DEF =\n\nVPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)\nVPATH += $(tbb_root)/python/rml $(RML_ROOT)/test $(tbb_root)/src/test\nVPATH += $(tbb_root)/src/rml/client\n\ninclude $(tbb_root)/build/common_rules.inc\n\n#--------------------------------------------------------------------------\n# Define rules for making the RML server shared library and client objects.\n#--------------------------------------------------------------------------\n\n# Object files that make up RML server\nRML_SERVER.OBJ = ipc_server.$(OBJ)\n\n# Object files that RML clients need\nRML_TBB_CLIENT.OBJ ?= ipc_utils.$(OBJ)\nRML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ)\nifeq (windows,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ))\nendif\nifeq (linux,$(tbb_os))\nRML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))\nendif\n\nRML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nTBB_DEP_NON_RML_TEST?= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)\nifeq ($(cfg),debug)\nRML_TBB_DEP+= spin_mutex_rml.$(OBJ)\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)\nelse\nTBB_DEP_RML_TEST?= $(RML_ASM.OBJ)\nendif\nLIBS += $(LIBDL)\nTBB_DEP_RML_TEST =  rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ)\n\nINCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).\nT_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)\n\n# Suppress superfluous warnings for RML compilation\nR_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \\\n\t\t $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1\n\n%.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\ntbb_misc_rml.$(OBJ) $(RML_SERVER.OBJ): version_string.ver\n\nRML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ)\n\n$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $<\n\n$(RML_TEST.OBJ): %.$(OBJ): %.cpp\n\t$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<\n\nifneq (,$(RML.DEF))\nrml.def: $(RML.DEF)\n\t$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@\n\nLIB_LINK_FLAGS += $(EXPORT_KEY)rml.def\n$(RML.DLL): rml.def\nendif\n\n$(RML.DLL): CPLUS_FLAGS += $(SDL_FLAGS)\n$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)\n$(RML.DLL): $(RML_TBB_DEP) $(RML.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ)\n\t$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)\n\nifneq (,$(RML_NO_VERSION.DLL))\n$(RML_NO_VERSION.DLL):\n\techo \"INPUT ($(RML.DLL))\" > $(RML_NO_VERSION.DLL)\nendif\n\nrml: rml_dll\nrml_dll: $(RML.DLL)\n\n#------------------------------------------------------\n# End of rules for making the RML server shared library\n#------------------------------------------------------\n\n#------------------------------------------------------\n# Define rules for making the RML unit tests\n#------------------------------------------------------\n\nadd_debug=$(basename $(1))_debug$(suffix $(1))\ncross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))\n\nRML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT)\nRML_CUSTOM_TESTS = test_rml_tbb.$(TEST_EXT)\n\ntest_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\n$(RML_TESTS): %.$(TEST_EXT): %.$(OBJ) $(TBB_DEP_NON_RML_TEST)\n\t$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)\n\nexport IPC_ENABLE=1\n### run_cmd is usually empty\ntest: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RML_CUSTOM_TESTS)\n\t$(run_cmd) ./test_job_automaton.$(TEST_EXT) $(args)\n\t$(run_cmd) ./test_thread_monitor.$(TEST_EXT) $(args)\n#TODO:\t$(run_cmd) ./test_rml_tbb.$(TEST_EXT) $(args)\n#TODO:\tIPC_ENABLE=1 LD_PRELOAD=$(abspath libirml.so.1) $(MAKE) -rf $(tbb_root)/src/Makefile cfg=release tbb_test_release\n\n#------------------------------------------------------\n# End of rules for making the TBBMalloc unit tests\n#------------------------------------------------------\n\n# Include automatically generated dependencies\n-include *.d\n\nclean:\n\t-rm -rf *.o *.so* *.d *.def version_string.ver\n\t-rm -rf $(work_dir)_release/libirml*\n\t-rm -rf $(work_dir)_debug/libirml*\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/rml/ipc_server.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"rml_tbb.h\"\n#include \"../server/thread_monitor.h\"\n#include \"tbb/atomic.h\"\n#include \"tbb/cache_aligned_allocator.h\"\n#include \"tbb/scheduler_common.h\"\n#include \"tbb/governor.h\"\n#include \"tbb/tbb_misc.h\"\n\n#include \"ipc_utils.h\"\n\n#include <fcntl.h>\n\nnamespace rml {\nnamespace internal {\n\nstatic const char* IPC_ENABLE_VAR_NAME = \"IPC_ENABLE\";\n\ntypedef versioned_object::version_type version_type;\n\nextern \"C\" factory::status_type __RML_open_factory(factory& f, version_type& server_version, version_type client_version) {\n    if( !tbb::internal::rml::get_enable_flag( IPC_ENABLE_VAR_NAME ) ) {\n        return factory::st_incompatible;\n    }\n\n    // Hack to keep this library from being closed\n    static tbb::atomic<bool> one_time_flag;\n    if( one_time_flag.compare_and_swap(true,false)==false ) {\n        __TBB_ASSERT( (size_t)f.library_handle!=factory::c_dont_unload, NULL );\n#if _WIN32||_WIN64\n        f.library_handle = reinterpret_cast<HMODULE>(factory::c_dont_unload);\n#else\n        f.library_handle = reinterpret_cast<void*>(factory::c_dont_unload);\n#endif\n    }\n    // End of hack\n\n    return factory::st_success;\n}\n\nextern \"C\" void __RML_close_factory(factory& f) {\n}\n\nclass ipc_thread_monitor : public thread_monitor {\npublic:\n    ipc_thread_monitor() : thread_monitor() {}\n\n#if USE_WINTHREAD\n#elif USE_PTHREAD\n    static handle_type launch(thread_routine_type thread_routine, void* arg, size_t stack_size);\n#endif\n};\n\n#if USE_WINTHREAD\n#elif USE_PTHREAD\ninline ipc_thread_monitor::handle_type ipc_thread_monitor::launch(void* (*thread_routine)(void*), void* arg, size_t stack_size) {\n    pthread_attr_t s;\n    if( pthread_attr_init( &s ) ) return 0;\n    if( stack_size>0 ) {\n        if( pthread_attr_setstacksize( &s, stack_size ) ) return 0;\n    }\n    pthread_t handle;\n    if( pthread_create( &handle, &s, thread_routine, arg ) ) return 0;\n    if( pthread_attr_destroy( &s ) ) return 0;\n    return handle;\n}\n#endif\n\n}} //rml::internal\n\nusing rml::internal::ipc_thread_monitor;\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\ntypedef ipc_thread_monitor::handle_type thread_handle;\n\nclass ipc_server;\n\nstatic const char* IPC_MAX_THREADS_VAR_NAME = \"MAX_THREADS\";\nstatic const char* IPC_ACTIVE_SEM_PREFIX = \"/__IPC_active\";\nstatic const char* IPC_STOP_SEM_PREFIX = \"/__IPC_stop\";\nstatic const char* IPC_ACTIVE_SEM_VAR_NAME = \"IPC_ACTIVE_SEMAPHORE\";\nstatic const char* IPC_STOP_SEM_VAR_NAME = \"IPC_STOP_SEMAPHORE\";\nstatic const mode_t IPC_SEM_MODE = 0660;\n\nstatic tbb::atomic<int> my_global_thread_count;\n\nchar* get_active_sem_name() {\n    char* value = getenv( IPC_ACTIVE_SEM_VAR_NAME );\n    if( value!=NULL && strlen( value )>0 ) {\n        char* sem_name = new char[strlen( value ) + 1];\n        __TBB_ASSERT( sem_name!=NULL, NULL );\n        strcpy( sem_name, value );\n        return sem_name;\n    } else {\n        return get_shared_name( IPC_ACTIVE_SEM_PREFIX );\n    }\n}\n\nchar* get_stop_sem_name() {\n    char* value = getenv( IPC_STOP_SEM_VAR_NAME );\n    if( value!=NULL && strlen( value )>0 ) {\n        char* sem_name = new char[strlen( value ) + 1];\n        __TBB_ASSERT( sem_name!=NULL, NULL );\n        strcpy( sem_name, value );\n        return sem_name;\n    } else {\n        return get_shared_name( IPC_STOP_SEM_PREFIX );\n    }\n}\n\nstatic void release_thread_sem(sem_t* my_sem) {\n    int old;\n    do {\n        old = my_global_thread_count;\n        if( old<=0 ) return;\n    } while( my_global_thread_count.compare_and_swap(old-1, old)!=old );\n    if( old>0 ) {\n        sem_post( my_sem );\n    }\n}\n\nextern \"C\" void set_active_sem_name() {\n    char* templ = new char[strlen( IPC_ACTIVE_SEM_PREFIX ) + strlen( \"_XXXXXX\" ) + 1];\n    __TBB_ASSERT( templ!=NULL, NULL );\n    strcpy( templ, IPC_ACTIVE_SEM_PREFIX );\n    strcpy( templ + strlen( IPC_ACTIVE_SEM_PREFIX ), \"_XXXXXX\" );\n    char* sem_name = mktemp( templ );\n    if( sem_name!=NULL ) {\n        int status = setenv( IPC_ACTIVE_SEM_VAR_NAME, sem_name, 1 );\n        __TBB_ASSERT_EX( status==0, NULL );\n    }\n    delete[] templ;\n}\n\nextern \"C\" void set_stop_sem_name() {\n    char* templ = new char[strlen( IPC_STOP_SEM_PREFIX ) + strlen( \"_XXXXXX\" ) + 1];\n    __TBB_ASSERT( templ!=NULL, NULL );\n    strcpy( templ, IPC_STOP_SEM_PREFIX );\n    strcpy( templ + strlen( IPC_STOP_SEM_PREFIX ), \"_XXXXXX\" );\n    char* sem_name = mktemp( templ );\n    if( sem_name!=NULL ) {\n        int status = setenv( IPC_STOP_SEM_VAR_NAME, sem_name, 1 );\n        __TBB_ASSERT_EX( status==0, NULL );\n    }\n    delete[] templ;\n}\n\nextern \"C\" void release_resources() {\n    if( my_global_thread_count!=0 ) {\n        char* active_sem_name = get_active_sem_name();\n        sem_t* my_active_sem = sem_open( active_sem_name, O_CREAT );\n        __TBB_ASSERT( my_active_sem, \"Unable to open active threads semaphore\" );\n        delete[] active_sem_name;\n\n        do {\n            release_thread_sem( my_active_sem );\n        } while( my_global_thread_count!=0 );\n    }\n}\n\nextern \"C\" void release_semaphores() {\n    int status = 0;\n    char* sem_name = NULL;\n\n    sem_name = get_active_sem_name();\n    if( sem_name==NULL ) {\n        runtime_warning(\"Can not get RML semaphore name\");\n        return;\n    }\n    status = sem_unlink( sem_name );\n    if( status!=0 ) {\n        if( errno==ENOENT ) {\n            /* There is no semaphore with the given name, nothing to do */\n        } else {\n            runtime_warning(\"Can not release RML semaphore\");\n            return;\n        }\n    }\n    delete[] sem_name;\n\n    sem_name = get_stop_sem_name();\n    if( sem_name==NULL ) {\n        runtime_warning( \"Can not get RML semaphore name\" );\n        return;\n    }\n    status = sem_unlink( sem_name );\n    if( status!=0 ) {\n        if( errno==ENOENT ) {\n            /* There is no semaphore with the given name, nothing to do */\n        } else {\n            runtime_warning(\"Can not release RML semaphore\");\n            return;\n        }\n    }\n    delete[] sem_name;\n}\n\nclass ipc_worker: no_copy {\nprotected:\n    //! State in finite-state machine that controls the worker.\n    /** State diagram:\n                    /----------stop---\\\n                    |           ^     |\n                    V           |     |\n        init --> starting --> normal  |\n          |         |           |     |\n          |         V           |     |\n          \\------> quit <-------/<----/\n      */\n    enum state_t {\n        //! *this is initialized\n        st_init,\n        //! *this has associated thread that is starting up.\n        st_starting,\n        //! Associated thread is doing normal life sequence.\n        st_normal,\n        //! Associated thread is stopped but can be started again.\n        st_stop,\n        //! Associated thread has ended normal life sequence and promises to never touch *this again.\n        st_quit\n    };\n    atomic<state_t> my_state;\n\n    //! Associated server\n    ipc_server& my_server;\n\n    //! Associated client\n    tbb_client& my_client;\n\n    //! index used for avoiding the 64K aliasing problem\n    const size_t my_index;\n\n    //! Monitor for sleeping when there is no work to do.\n    /** The invariant that holds for sleeping workers is:\n        \"my_slack<=0 && my_state==st_normal && I am on server's list of asleep threads\" */\n    ipc_thread_monitor my_thread_monitor;\n\n    //! Handle of the OS thread associated with this worker\n    thread_handle my_handle;\n\n    //! Link for list of workers that are sleeping or have no associated thread.\n    ipc_worker* my_next;\n\n    friend class ipc_server;\n\n    //! Actions executed by the associated thread\n    void run();\n\n    //! Wake up associated thread (or launch a thread if there is none)\n    bool wake_or_launch();\n\n    //! Called by a thread (usually not the associated thread) to commence termination.\n    void start_shutdown(bool join);\n\n    //! Called by a thread (usually not the associated thread) to commence stopping.\n    void start_stopping(bool join);\n\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n\n    static void release_handle(thread_handle my_handle, bool join);\n\nprotected:\n    ipc_worker(ipc_server& server, tbb_client& client, const size_t i) :\n        my_server(server),\n        my_client(client),\n        my_index(i)\n    {\n        my_state = st_init;\n    }\n};\n\nstatic const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about uninstantiable class\n    #pragma warning(push)\n    #pragma warning(disable:4510 4610)\n#endif\nclass padded_ipc_worker: public ipc_worker {\n    char pad[cache_line_size - sizeof(ipc_worker)%cache_line_size];\npublic:\n    padded_ipc_worker(ipc_server& server, tbb_client& client, const size_t i)\n    : ipc_worker( server,client,i ) { suppress_unused_warning(pad); }\n};\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nclass ipc_waker : public padded_ipc_worker {\nprivate:\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n    void run();\n    bool wake_or_launch();\n\n    friend class ipc_server;\n\npublic:\n    ipc_waker(ipc_server& server, tbb_client& client, const size_t i)\n    : padded_ipc_worker( server, client, i ) {}\n};\n\nclass ipc_stopper : public padded_ipc_worker {\nprivate:\n    static __RML_DECL_THREAD_ROUTINE thread_routine(void* arg);\n    void run();\n    bool wake_or_launch();\n\n    friend class ipc_server;\n\npublic:\n    ipc_stopper(ipc_server& server, tbb_client& client, const size_t i)\n    : padded_ipc_worker( server, client, i ) {}\n};\n\nclass ipc_server: public tbb_server, no_copy {\nprivate:\n    tbb_client& my_client;\n    //! Maximum number of threads to be created.\n    /** Threads are created lazily, so maximum might not actually be reached. */\n    tbb_client::size_type my_n_thread;\n\n    //! Stack size for each thread. */\n    const size_t my_stack_size;\n\n    //! Number of jobs that could use their associated thread minus number of active threads.\n    /** If negative, indicates oversubscription.\n        If positive, indicates that more threads should run.\n        Can be lowered asynchronously, but must be raised only while holding my_asleep_list_mutex,\n        because raising it impacts the invariant for sleeping threads. */\n    atomic<int> my_slack;\n\n    //! Counter used to determine when to delete this.\n    atomic<int> my_ref_count;\n\n    padded_ipc_worker* my_thread_array;\n\n    //! List of workers that are asleep or committed to sleeping until notified by another thread.\n    tbb::atomic<ipc_worker*> my_asleep_list_root;\n\n    //! Protects my_asleep_list_root\n    typedef scheduler_mutex_type asleep_list_mutex_type;\n    asleep_list_mutex_type my_asleep_list_mutex;\n\n    //! Should server wait workers while terminate\n    const bool my_join_workers;\n\n    //! Service thread for waking of workers\n    ipc_waker* my_waker;\n\n    //! Service thread to stop threads\n    ipc_stopper* my_stopper;\n\n    //! Semaphore to account active threads\n    sem_t* my_active_sem;\n\n    //! Semaphore to account stop threads\n    sem_t* my_stop_sem;\n\n#if TBB_USE_ASSERT\n    atomic<int> my_net_slack_requests;\n#endif /* TBB_USE_ASSERT */\n\n    //! Wake up to two sleeping workers, if there are any sleeping.\n    /** The call is used to propagate a chain reaction where each thread wakes up two threads,\n        which in turn each wake up two threads, etc. */\n    void propagate_chain_reaction() {\n        // First test of a double-check idiom.  Second test is inside wake_some(0).\n        if( my_slack>0 ) {\n            int active_threads = 0;\n            if( try_get_active_thread() ) {\n                ++active_threads;\n                if( try_get_active_thread() ) {\n                    ++active_threads;\n                }\n                wake_some( 0, active_threads );\n            }\n        }\n    }\n\n    //! Try to add t to list of sleeping workers\n    bool try_insert_in_asleep_list(ipc_worker& t);\n\n    //! Try to add t to list of sleeping workers even if there is some work to do\n    bool try_insert_in_asleep_list_forced(ipc_worker& t);\n\n    //! Equivalent of adding additional_slack to my_slack and waking up to 2 threads if my_slack permits.\n    void wake_some(int additional_slack, int active_threads);\n\n    //! Equivalent of adding additional_slack to my_slack and waking up to 1 thread if my_slack permits.\n    void wake_one_forced(int additional_slack);\n\n    //! Stop one thread from asleep list\n    bool stop_one();\n\n    //! Wait for active thread\n    bool wait_active_thread();\n\n    //! Try to get active thread\n    bool try_get_active_thread();\n\n    //! Release active thread\n    void release_active_thread();\n\n    //! Wait for thread to stop\n    bool wait_stop_thread();\n\n    //! Add thread to stop list\n    void add_stop_thread();\n\n    void remove_server_ref() {\n        if( --my_ref_count==0 ) {\n            my_client.acknowledge_close_connection();\n            this->~ipc_server();\n            tbb::cache_aligned_allocator<ipc_server>().deallocate( this, 1 );\n        }\n    }\n\n    friend class ipc_worker;\n    friend class ipc_waker;\n    friend class ipc_stopper;\npublic:\n    ipc_server(tbb_client& client);\n    virtual ~ipc_server();\n\n    version_type version() const __TBB_override {\n        return 0;\n    }\n\n    void request_close_connection(bool /*exiting*/) __TBB_override {\n        my_waker->start_shutdown(false);\n        my_stopper->start_shutdown(false);\n        for( size_t i=0; i<my_n_thread; ++i )\n            my_thread_array[i].start_shutdown( my_join_workers );\n        remove_server_ref();\n    }\n\n    void yield() __TBB_override {__TBB_Yield();}\n\n    void independent_thread_number_changed(int) __TBB_override { __TBB_ASSERT( false, NULL ); }\n\n    unsigned default_concurrency() const __TBB_override { return my_n_thread - 1; }\n\n    void adjust_job_count_estimate(int delta) __TBB_override;\n\n#if _WIN32||_WIN64\n    void register_master(::rml::server::execution_resource_t&) __TBB_override {}\n    void unregister_master(::rml::server::execution_resource_t) __TBB_override {}\n#endif /* _WIN32||_WIN64 */\n};\n\n//------------------------------------------------------------------------\n// Methods of ipc_worker\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_worker::thread_routine(void* arg) {\n    ipc_worker* self = static_cast<ipc_worker*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_worker::release_handle(thread_handle handle, bool join) {\n    if( join )\n        ipc_thread_monitor::join( handle );\n    else\n        ipc_thread_monitor::detach_thread( handle );\n}\n\nvoid ipc_worker::start_shutdown(bool join) {\n    state_t s;\n\n    do {\n        s = my_state;\n        __TBB_ASSERT( s!=st_quit, NULL );\n    } while( my_state.compare_and_swap( st_quit, s )!=s );\n    if( s==st_normal || s==st_starting ) {\n        // May have invalidated invariant for sleeping, so wake up the thread.\n        // Note that the notify() here occurs without maintaining invariants for my_slack.\n        // It does not matter, because my_state==st_quit overrides checking of my_slack.\n        my_thread_monitor.notify();\n        // Do not need release handle in st_init state,\n        // because in this case the thread wasn't started yet.\n        // For st_starting release is done at launch site.\n        if( s==st_normal )\n            release_handle( my_handle, join );\n    }\n}\n\nvoid ipc_worker::start_stopping(bool join) {\n    state_t s;\n\n    do {\n        s = my_state;\n    } while( my_state.compare_and_swap( st_stop, s )!=s );\n    if( s==st_normal || s==st_starting ) {\n        // May have invalidated invariant for sleeping, so wake up the thread.\n        // Note that the notify() here occurs without maintaining invariants for my_slack.\n        // It does not matter, because my_state==st_quit overrides checking of my_slack.\n        my_thread_monitor.notify();\n        // Do not need release handle in st_init state,\n        // because in this case the thread wasn't started yet.\n        // For st_starting release is done at launch site.\n        if( s==st_normal )\n            release_handle( my_handle, join );\n    }\n}\n\nvoid ipc_worker::run() {\n    my_server.propagate_chain_reaction();\n\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    ::rml::job& j = *my_client.create_one_job();\n    state_t state = my_state;\n    while( state!=st_quit && state!=st_stop ) {\n        if( my_server.my_slack>=0 ) {\n            my_client.process(j);\n        } else {\n            ipc_thread_monitor::cookie c;\n            // Prepare to wait\n            my_thread_monitor.prepare_wait(c);\n            // Check/set the invariant for sleeping\n            state = my_state;\n            if( state!=st_quit && state!=st_stop && my_server.try_insert_in_asleep_list(*this) ) {\n                if( my_server.my_n_thread > 1 ) my_server.release_active_thread();\n                my_thread_monitor.commit_wait(c);\n                my_server.propagate_chain_reaction();\n            } else {\n                // Invariant broken\n                my_thread_monitor.cancel_wait();\n            }\n        }\n        state = my_state;\n    }\n    my_client.cleanup(j);\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_worker::wake_or_launch() {\n    if( ( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) ||\n        ( my_state==st_stop && my_state.compare_and_swap( st_starting, st_stop )==st_stop ) ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            // Unable to create new thread for process\n            // However, this is expected situation for the use cases of this coordination server\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_waker\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_waker::thread_routine(void* arg) {\n    ipc_waker* self = static_cast<ipc_waker*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_waker::run() {\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    while( my_state!=st_quit ) {\n        bool have_to_sleep = false;\n        if( my_server.my_slack>0 ) {\n            if( my_server.wait_active_thread() ) {\n                if( my_server.my_slack>0 ) {\n                    my_server.wake_some( 0, 1 );\n                } else {\n                    my_server.release_active_thread();\n                    have_to_sleep = true;\n                }\n            }\n        } else {\n            have_to_sleep = true;\n        }\n        if( have_to_sleep ) {\n            ipc_thread_monitor::cookie c;\n            // Prepare to wait\n            my_thread_monitor.prepare_wait(c);\n            // Check/set the invariant for sleeping\n            if( my_state!=st_quit && my_server.my_slack<0 ) {\n                my_thread_monitor.commit_wait(c);\n            } else {\n                // Invariant broken\n                my_thread_monitor.cancel_wait();\n            }\n        }\n    }\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_waker::wake_or_launch() {\n    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            runtime_warning( \"Unable to create new thread for process %d\", getpid() );\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_stopper\n//------------------------------------------------------------------------\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress overzealous compiler warnings about an initialized variable 'sink_for_alloca' not referenced\n    #pragma warning(push)\n    #pragma warning(disable:4189)\n#endif\n#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__\n// ensure that stack is properly aligned\n__attribute__((force_align_arg_pointer))\n#endif\n__RML_DECL_THREAD_ROUTINE ipc_stopper::thread_routine(void* arg) {\n    ipc_stopper* self = static_cast<ipc_stopper*>(arg);\n    AVOID_64K_ALIASING( self->my_index );\n    self->run();\n    return 0;\n}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning(pop)\n#endif\n\nvoid ipc_stopper::run() {\n    // Transiting to st_normal here would require setting my_handle,\n    // which would create race with the launching thread and\n    // complications in handle management on Windows.\n\n    while( my_state!=st_quit ) {\n        if( my_server.wait_stop_thread() ) {\n            if( my_state!=st_quit ) {\n                if( !my_server.stop_one() ) {\n                    my_server.add_stop_thread();\n                    prolonged_pause();\n                }\n            }\n        }\n    }\n\n    my_server.remove_server_ref();\n}\n\ninline bool ipc_stopper::wake_or_launch() {\n    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {\n        // after this point, remove_server_ref() must be done by created thread\n#if USE_WINTHREAD\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );\n#elif USE_PTHREAD\n        {\n        affinity_helper fpa;\n        fpa.protect_affinity_mask( /*restore_process_mask=*/true );\n        my_handle = ipc_thread_monitor::launch( thread_routine, this, my_server.my_stack_size );\n        if( my_handle == 0 ) {\n            runtime_warning( \"Unable to create new thread for process %d\", getpid() );\n            state_t s = my_state.compare_and_swap( st_init, st_starting );\n            if (st_starting != s) {\n                // Do shutdown during startup. my_handle can't be released\n                // by start_shutdown, because my_handle value might be not set yet\n                // at time of transition from st_starting to st_quit.\n                __TBB_ASSERT( s==st_quit, NULL );\n                release_handle( my_handle, my_server.my_join_workers );\n            }\n            return false;\n        } else {\n            my_server.my_ref_count++;\n        }\n        // Implicit destruction of fpa resets original affinity mask.\n        }\n#endif /* USE_PTHREAD */\n        state_t s = my_state.compare_and_swap( st_normal, st_starting );\n        if( st_starting!=s ) {\n            // Do shutdown during startup. my_handle can't be released\n            // by start_shutdown, because my_handle value might be not set yet\n            // at time of transition from st_starting to st_quit.\n            __TBB_ASSERT( s==st_quit, NULL );\n            release_handle( my_handle, my_server.my_join_workers );\n        }\n    }\n    else {\n        my_thread_monitor.notify();\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------\n// Methods of ipc_server\n//------------------------------------------------------------------------\nipc_server::ipc_server(tbb_client& client) :\n    my_client( client ),\n    my_stack_size( client.min_stack_size() ),\n    my_thread_array(NULL),\n    my_join_workers(false),\n    my_waker(NULL),\n    my_stopper(NULL)\n{\n    my_ref_count = 1;\n    my_slack = 0;\n#if TBB_USE_ASSERT\n    my_net_slack_requests = 0;\n#endif /* TBB_USE_ASSERT */\n    my_n_thread = get_num_threads(IPC_MAX_THREADS_VAR_NAME);\n    if( my_n_thread==0 ) {\n        my_n_thread = AvailableHwConcurrency();\n        __TBB_ASSERT( my_n_thread>0, NULL );\n    }\n\n    my_asleep_list_root = NULL;\n    my_thread_array = tbb::cache_aligned_allocator<padded_ipc_worker>().allocate( my_n_thread );\n    memset( my_thread_array, 0, sizeof(padded_ipc_worker)*my_n_thread );\n    for( size_t i=0; i<my_n_thread; ++i ) {\n        ipc_worker* t = new( &my_thread_array[i] ) padded_ipc_worker( *this, client, i );\n        t->my_next = my_asleep_list_root;\n        my_asleep_list_root = t;\n    }\n\n    my_waker = tbb::cache_aligned_allocator<ipc_waker>().allocate(1);\n    memset( my_waker, 0, sizeof(ipc_waker) );\n    new( my_waker ) ipc_waker( *this, client, my_n_thread );\n\n    my_stopper = tbb::cache_aligned_allocator<ipc_stopper>().allocate(1);\n    memset( my_stopper, 0, sizeof(ipc_stopper) );\n    new( my_stopper ) ipc_stopper( *this, client, my_n_thread + 1 );\n\n    char* active_sem_name = get_active_sem_name();\n    my_active_sem = sem_open( active_sem_name, O_CREAT, IPC_SEM_MODE, my_n_thread - 1 );\n    __TBB_ASSERT( my_active_sem, \"Unable to open active threads semaphore\" );\n    delete[] active_sem_name;\n\n    char* stop_sem_name = get_stop_sem_name();\n    my_stop_sem = sem_open( stop_sem_name, O_CREAT, IPC_SEM_MODE, 0 );\n    __TBB_ASSERT( my_stop_sem, \"Unable to open stop threads semaphore\" );\n    delete[] stop_sem_name;\n}\n\nipc_server::~ipc_server() {\n    __TBB_ASSERT( my_net_slack_requests==0, NULL );\n\n    for( size_t i=my_n_thread; i--; )\n        my_thread_array[i].~padded_ipc_worker();\n    tbb::cache_aligned_allocator<padded_ipc_worker>().deallocate( my_thread_array, my_n_thread );\n    tbb::internal::poison_pointer( my_thread_array );\n\n    my_waker->~ipc_waker();\n    tbb::cache_aligned_allocator<ipc_waker>().deallocate( my_waker, 1 );\n    tbb::internal::poison_pointer( my_waker );\n\n    my_stopper->~ipc_stopper();\n    tbb::cache_aligned_allocator<ipc_stopper>().deallocate( my_stopper, 1 );\n    tbb::internal::poison_pointer( my_stopper );\n\n    sem_close( my_active_sem );\n    sem_close( my_stop_sem );\n}\n\ninline bool ipc_server::try_insert_in_asleep_list(ipc_worker& t) {\n    asleep_list_mutex_type::scoped_lock lock;\n    if( !lock.try_acquire( my_asleep_list_mutex ) )\n        return false;\n    // Contribute to slack under lock so that if another takes that unit of slack,\n    // it sees us sleeping on the list and wakes us up.\n    int k = ++my_slack;\n    if( k<=0 ) {\n        t.my_next = my_asleep_list_root;\n        my_asleep_list_root = &t;\n        return true;\n    } else {\n        --my_slack;\n        return false;\n    }\n}\n\ninline bool ipc_server::try_insert_in_asleep_list_forced(ipc_worker& t) {\n    asleep_list_mutex_type::scoped_lock lock;\n    if( !lock.try_acquire( my_asleep_list_mutex ) )\n        return false;\n    // Contribute to slack under lock so that if another takes that unit of slack,\n    // it sees us sleeping on the list and wakes us up.\n    ++my_slack;\n    t.my_next = my_asleep_list_root;\n    my_asleep_list_root = &t;\n    return true;\n}\n\ninline bool ipc_server::wait_active_thread() {\n    if( sem_wait( my_active_sem ) == 0 ) {\n        ++my_global_thread_count;\n        return true;\n    }\n    return false;\n}\n\ninline bool ipc_server::try_get_active_thread() {\n    if( sem_trywait( my_active_sem ) == 0 ) {\n        ++my_global_thread_count;\n        return true;\n    }\n    return false;\n}\n\ninline void ipc_server::release_active_thread() {\n    release_thread_sem( my_active_sem );\n}\n\ninline bool ipc_server::wait_stop_thread() {\n    struct timespec ts;\n    if( clock_gettime( CLOCK_REALTIME, &ts )==0 ) {\n        ts.tv_sec++;\n        if( sem_timedwait( my_stop_sem, &ts )==0 ) {\n            return true;\n        }\n    }\n    return false;\n}\n\ninline void ipc_server::add_stop_thread() {\n    sem_post( my_stop_sem );\n}\n\nvoid ipc_server::wake_some( int additional_slack, int active_threads ) {\n    __TBB_ASSERT( additional_slack>=0, NULL );\n    ipc_worker* wakee[2];\n    ipc_worker **w = wakee;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        while( active_threads>0 && my_asleep_list_root && w<wakee+2 ) {\n            if( additional_slack>0 ) {\n                if( additional_slack+my_slack<=0 ) // additional demand does not exceed surplus supply\n                    break;\n                --additional_slack;\n            } else {\n                // Chain reaction; Try to claim unit of slack\n                int old;\n                do {\n                    old = my_slack;\n                    if( old<=0 ) goto done;\n                } while( my_slack.compare_and_swap( old-1, old )!=old );\n            }\n            // Pop sleeping worker to combine with claimed unit of slack\n            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;\n            --active_threads;\n        }\n        if( additional_slack ) {\n            // Contribute our unused slack to my_slack.\n            my_slack += additional_slack;\n        }\n    }\ndone:\n    while( w>wakee ) {\n        if( !(*--w)->wake_or_launch() ) {\n            add_stop_thread();\n            do {\n            } while( !try_insert_in_asleep_list_forced(**w) );\n            release_active_thread();\n        }\n    }\n    while( active_threads ) {\n        release_active_thread();\n        --active_threads;\n    }\n}\n\nvoid ipc_server::wake_one_forced( int additional_slack ) {\n    __TBB_ASSERT( additional_slack>=0, NULL );\n    ipc_worker* wakee[1];\n    ipc_worker **w = wakee;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        while( my_asleep_list_root && w<wakee+1 ) {\n            if( additional_slack>0 ) {\n                if( additional_slack+my_slack<=0 ) // additional demand does not exceed surplus supply\n                    break;\n                --additional_slack;\n            } else {\n                // Chain reaction; Try to claim unit of slack\n                int old;\n                do {\n                    old = my_slack;\n                    if( old<=0 ) goto done;\n                } while( my_slack.compare_and_swap( old-1, old )!=old );\n            }\n            // Pop sleeping worker to combine with claimed unit of slack\n            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;\n        }\n        if( additional_slack ) {\n            // Contribute our unused slack to my_slack.\n            my_slack += additional_slack;\n        }\n    }\ndone:\n    while( w>wakee ) {\n        if( !(*--w)->wake_or_launch() ) {\n            add_stop_thread();\n            do {\n            } while( !try_insert_in_asleep_list_forced(**w) );\n        }\n    }\n}\n\nbool ipc_server::stop_one() {\n    ipc_worker* current = NULL;\n    ipc_worker* next = NULL;\n    {\n        asleep_list_mutex_type::scoped_lock lock(my_asleep_list_mutex);\n        if( my_asleep_list_root ) {\n            current = my_asleep_list_root;\n            if( current->my_state==ipc_worker::st_normal ) {\n                next = current->my_next;\n                while( next!= NULL && next->my_state==ipc_worker::st_normal ) {\n                    current = next;\n                    next = current->my_next;\n                }\n                current->start_stopping( my_join_workers );\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nvoid ipc_server::adjust_job_count_estimate( int delta ) {\n#if TBB_USE_ASSERT\n    my_net_slack_requests+=delta;\n#endif /* TBB_USE_ASSERT */\n    if( my_n_thread > 1 ) {\n        if( delta<0 ) {\n            my_slack+=delta;\n        } else if( delta>0 ) {\n            int active_threads = 0;\n            if( try_get_active_thread() ) {\n                ++active_threads;\n                if( try_get_active_thread() ) {\n                    ++active_threads;\n                }\n            }\n            wake_some( delta, active_threads );\n\n            if( !my_waker->wake_or_launch() ) {\n                add_stop_thread();\n            }\n            if( !my_stopper->wake_or_launch() ) {\n                add_stop_thread();\n            }\n        }\n    } else { // Corner case when RML shouldn't provide any worker thread but client has to have at least one\n        if( delta<0 ) {\n            my_slack += delta;\n        } else {\n            wake_one_forced( delta );\n        }\n    }\n}\n\n//------------------------------------------------------------------------\n// RML factory methods\n//------------------------------------------------------------------------\n\n#if USE_PTHREAD\n\nstatic tbb_client* my_global_client = NULL;\nstatic tbb_server* my_global_server = NULL;\n\nvoid rml_atexit() {\n    release_resources();\n}\n\nvoid rml_atfork_child() {\n    if( my_global_server!=NULL && my_global_client!=NULL ) {\n        ipc_server* server = static_cast<ipc_server*>( my_global_server );\n        server->~ipc_server();\n        memset( server, 0, sizeof(ipc_server) );\n        new( server ) ipc_server( *my_global_client );\n        pthread_atfork( NULL, NULL, rml_atfork_child );\n        atexit( rml_atexit );\n    }\n}\n\n#endif /* USE_PTHREAD */\n\nextern \"C\" tbb_factory::status_type __TBB_make_rml_server(tbb_factory& f, tbb_server*& server, tbb_client& client) {\n    server = new( tbb::cache_aligned_allocator<ipc_server>().allocate(1) ) ipc_server(client);\n#if USE_PTHREAD\n    my_global_client = &client;\n    my_global_server = server;\n    pthread_atfork( NULL, NULL, rml_atfork_child );\n    atexit( rml_atexit );\n#endif /* USE_PTHREAD */\n    if( getenv( \"RML_DEBUG\" ) ) {\n        runtime_warning(\"IPC server is started\");\n    }\n    return tbb_factory::st_success;\n}\n\nextern \"C\" void __TBB_call_with_my_server_info(::rml::server_info_callback_t cb, void* arg) {\n}\n\n} // namespace rml\n} // namespace internal\n\n} // namespace tbb\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/rml/ipc_utils.cpp",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#include \"ipc_utils.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <limits.h>\n#include <string.h>\n#include <unistd.h>\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\n#define MAX_STR_LEN 255\n#define STARTTIME_ITEM_ID 21\n\nstatic char* get_stat_item(char* line, int item_id) {\n    int id = 0, i = 0;\n\n    while( id!=item_id ) {\n        while( line[i]!='(' && line[i]!=' ' && line[i]!='\\0' ) {\n            ++i;\n        }\n        if( line[i]==' ' ) {\n            ++id;\n            ++i;\n        } else if( line[i]=='(' ) {\n            while( line[i]!=')' && line[i]!='\\0' ) {\n               ++i;\n            }\n            if( line[i]==')' ) {\n                ++i;\n            } else {\n                return NULL;\n            }\n        } else {\n            return NULL;\n        }\n    }\n\n    return line + i;\n}\n\nunsigned long long get_start_time(int pid) {\n    const char* stat_file_path_template = \"/proc/%d/stat\";\n    char stat_file_path[MAX_STR_LEN + 1];\n    sprintf( stat_file_path, stat_file_path_template, pid );\n\n    FILE* stat_file = fopen( stat_file_path, \"rt\" );\n    if( stat_file==NULL ) {\n        return 0;\n    }\n\n    char stat_line[MAX_STR_LEN + 1];\n    char* line = fgets( stat_line, MAX_STR_LEN, stat_file );\n    if( line==NULL ) {\n        return 0;\n    }\n\n    char* starttime_str = get_stat_item( stat_line, STARTTIME_ITEM_ID );\n    if( starttime_str==NULL ) {\n        return 0;\n    }\n\n    unsigned long long starttime = strtoull( starttime_str, NULL, 10 );\n    if( starttime==ULLONG_MAX ) {\n        return 0;\n    }\n\n    return starttime;\n}\n\nchar* get_shared_name(const char* prefix, int pid, unsigned long long time) {\n    const char* name_template = \"%s_%d_%llu\";\n    const int digits_in_int = 10;\n    const int digits_in_long = 20;\n\n    int len = strlen( name_template ) + strlen( prefix ) + digits_in_int + digits_in_long + 1;\n    char* name = new char[len];\n    sprintf( name, name_template, prefix, pid, time );\n\n    return name;\n}\n\nchar* get_shared_name(const char* prefix) {\n    int pid = getpgrp();\n    unsigned long long time = get_start_time( pid );\n    return get_shared_name( prefix, pid, time );\n}\n\nint get_num_threads(const char* env_var) {\n    if( env_var==NULL ) {\n        return 0;\n    }\n\n    char* value = getenv( env_var );\n    if( value==NULL ) {\n        return 0;\n    }\n\n    int num_threads = (int)strtol( value, NULL, 10 );\n    return num_threads;\n}\n\nbool get_enable_flag(const char* env_var) {\n    if( env_var==NULL ) {\n        return false;\n    }\n\n    char* value = getenv( env_var );\n    if( value==NULL ) {\n        return false;\n    }\n\n    if( strcmp( value, \"0\" ) == 0 ||\n        strcmp( value, \"false\" ) == 0 ||\n        strcmp( value, \"False\" ) == 0 ||\n        strcmp( value, \"FALSE\" ) == 0 ) {\n        return false;\n    }\n\n    return true;\n}\n\n}}} //tbb::internal::rml\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/rml/ipc_utils.h",
    "content": "/*\n    Copyright (c) 2017-2018 Intel Corporation\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n\n\n*/\n\n#ifndef __IPC_UTILS_H\n#define __IPC_UTILS_H\n\nnamespace tbb {\nnamespace internal {\nnamespace rml {\n\nchar* get_shared_name(const char* prefix);\nint get_num_threads(const char* env_var);\nbool get_enable_flag(const char* env_var);\n\n}}} //tbb::internal::rml\n\n#endif\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/setup.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n# System imports\nfrom __future__ import print_function\nfrom glob import glob\nimport platform\nimport os\n\nfrom distutils.core import *\nfrom distutils.command.build import build\n\nrundir = os.getcwd()\nos.chdir(os.path.abspath(os.path.dirname(__file__)))\n\nif any(i in os.environ for i in [\"CC\", \"CXX\"]):\n    if \"CC\" not in os.environ:\n        os.environ['CC'] = os.environ['CXX']\n    if \"CXX\" not in os.environ:\n        os.environ['CXX'] = os.environ['CC']\n    if platform.system() == 'Linux':\n        os.environ['LDSHARED'] = os.environ['CXX'] + \" -shared\"\n    print(\"Environment specifies CC=%s CXX=%s\"%(os.environ['CC'], os.environ['CXX']))\n\nintel_compiler = os.getenv('CC', '') in ['icl', 'icpc', 'icc']\ntry:\n    tbb_root = os.environ['TBBROOT']\n    print(\"Using TBBROOT=\", tbb_root)\nexcept:\n    tbb_root = '..'\n    if not intel_compiler:\n        print(\"Warning: TBBROOT env var is not set and Intel's compiler is not used. It might lead\\n\"\n              \"    !!!: to compile/link problems. Source tbbvars.sh/.csh file to set environment\")\nuse_compiler_tbb = intel_compiler and tbb_root == '..'\nif use_compiler_tbb:\n    print(\"Using Intel TBB from Intel's compiler\")\nif platform.system() == 'Windows':\n    if intel_compiler:\n        os.environ['DISTUTILS_USE_SDK'] = '1'  # Enable environment settings in distutils\n        os.environ['MSSdk'] = '1'\n        print(\"Using compiler settings from environment\")\n    tbb_flag = ['/Qtbb'] if use_compiler_tbb else []\n    tbb_flag += ['/EHsc'] # for Python 2\n    compile_flags = ['/Qstd=c++11'] if intel_compiler else []\nelse:\n    tbb_flag = ['-tbb'] if use_compiler_tbb else []\n    compile_flags = ['-std=c++11', '-Wno-unused-variable']\n\n_tbb = Extension(\"tbb._api\", [\"tbb/api.i\"],\n        include_dirs=[os.path.join(tbb_root, 'include')] if not use_compiler_tbb else [],\n        swig_opts   =['-c++', '-O', '-threads'] + (  # add '-builtin' later\n              ['-I' + os.path.join(tbb_root, 'include')] if not use_compiler_tbb else []),\n        extra_compile_args=compile_flags + tbb_flag,\n        extra_link_args=tbb_flag,\n        libraries   =(['tbb'] if not use_compiler_tbb else []) +\n                     (['irml'] if platform.system() == \"Linux\" else []),   # TODO: why do we need this?\n        library_dirs=[ rundir,                                              # for custom-builds\n                       os.path.join(tbb_root, 'lib', 'intel64', 'gcc4.4'),  # for Linux\n                       os.path.join(tbb_root, 'lib'),                       # for MacOS\n                       os.path.join(tbb_root, 'lib', 'intel64', 'vc_mt'),   # for Windows\n                     ] if not use_compiler_tbb else [],\n        language    ='c++',\n        )\n\n\nclass TBBBuild(build):\n    sub_commands = [  # define build order\n        ('build_ext', build.has_ext_modules),\n        ('build_py', build.has_pure_modules),\n    ]\n\n\nsetup(  name        =\"TBB\",\n        description =\"Python API for Intel TBB\",\n        long_description=\"Python API to Intel(R) Threading Building Blocks library (Intel(R) TBB) \"\n                         \"extended with standard Pool implementation and monkey-patching\",\n        url         =\"https://software.intel.com/en-us/intel-tbb\",\n        author      =\"Intel Corporation\",\n        author_email=\"inteltbbdevelopers@intel.com\",\n        license     =\"Dual license: Apache or Proprietary\",\n        version     =\"0.1\",\n        classifiers =[\n            'Development Status :: 4 - Beta',\n            'Environment :: Console',\n            'Environment :: Plugins',\n            'Intended Audience :: Developers',\n            'Intended Audience :: System Administrators',\n            'Intended Audience :: Other Audience',\n            'Intended Audience :: Science/Research',\n            'License :: OSI Approved :: Apache Software License',\n            'Operating System :: MacOS :: MacOS X',\n            'Operating System :: Microsoft :: Windows',\n            'Operating System :: POSIX :: Linux',\n            'Programming Language :: Python',\n            'Programming Language :: Python :: 2',\n            'Programming Language :: Python :: 3',\n            'Programming Language :: C++',\n            'Topic :: System :: Hardware :: Symmetric Multi-processing',\n            'Topic :: Software Development :: Libraries',\n          ],\n        keywords='TBB multiprocessing multithreading composable parallelism',\n        ext_modules=[_tbb],\n        packages=['tbb'],\n        py_modules=['TBB'],\n        cmdclass={'build': TBBBuild}\n)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/tbb/__init__.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom __future__ import print_function\n\nimport multiprocessing.pool\nimport ctypes\nimport atexit\nimport sys\nimport os\n \nfrom .api import  *\nfrom .api import __all__ as api__all\nfrom .pool import *\nfrom .pool import __all__ as pool__all\n\n__all__ = [\"Monkey\", \"is_active\"] + api__all + pool__all\n\n__doc__ = \"\"\"\nPython API for Intel(R) Threading Building Blocks library (Intel(R) TBB)\nextended with standard Python's pools implementation and monkey-patching.\n\nCommand-line interface example:\n$  python -m tbb $your_script.py\nRuns your_script.py in context of tbb.Monkey\n\"\"\"\n\nis_active = False\n\"\"\" Indicates whether TBB context is activated \"\"\"\n\nipc_enabled = False\n\"\"\" Indicates whether IPC mode is enabled \"\"\"\n\nlibirml = \"libirml.so.1\"\n\n\ndef _test(arg=None):\n    \"\"\"Some tests\"\"\"\n    import platform\n    if platform.system() == \"Linux\":\n        ctypes.CDLL(libirml)\n    from .test import test\n    test(arg)\n    print(\"done\")\n\n\ndef tbb_process_pool_worker27(inqueue, outqueue, initializer=None, initargs=(),\n                            maxtasks=None):\n    from multiprocessing.pool import worker\n    worker(inqueue, outqueue, initializer, initargs, maxtasks)\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_resources()\n        except:\n            print(\"Warning: Can not load \", libirml, file=sys.stderr)\n\n\nclass TBBProcessPool27(multiprocessing.pool.Pool):\n    def _repopulate_pool(self):\n        \"\"\"Bring the number of pool processes up to the specified number,\n        for use after reaping workers which have exited.\n        \"\"\"\n        from multiprocessing.util import debug\n\n        for i in range(self._processes - len(self._pool)):\n            w = self.Process(target=tbb_process_pool_worker27,\n                             args=(self._inqueue, self._outqueue,\n                                   self._initializer,\n                                   self._initargs, self._maxtasksperchild)\n                            )\n            self._pool.append(w)\n            w.name = w.name.replace('Process', 'PoolWorker')\n            w.daemon = True\n            w.start()\n            debug('added worker')\n\n    def __del__(self):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n    def __exit__(self, *args):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n\ndef tbb_process_pool_worker3(inqueue, outqueue, initializer=None, initargs=(),\n                            maxtasks=None, wrap_exception=False):\n    from multiprocessing.pool import worker\n    worker(inqueue, outqueue, initializer, initargs, maxtasks, wrap_exception)\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_resources()\n        except:\n            print(\"Warning: Can not load \", libirml, file=sys.stderr)\n\n\nclass TBBProcessPool3(multiprocessing.pool.Pool):\n    def _repopulate_pool(self):\n        \"\"\"Bring the number of pool processes up to the specified number,\n        for use after reaping workers which have exited.\n        \"\"\"\n        from multiprocessing.util import debug\n\n        for i in range(self._processes - len(self._pool)):\n            w = self.Process(target=tbb_process_pool_worker3,\n                             args=(self._inqueue, self._outqueue,\n                                   self._initializer,\n                                   self._initargs, self._maxtasksperchild,\n                                   self._wrap_exception)\n                            )\n            self._pool.append(w)\n            w.name = w.name.replace('Process', 'PoolWorker')\n            w.daemon = True\n            w.start()\n            debug('added worker')\n\n    def __del__(self):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n    def __exit__(self, *args):\n        self.close()\n        for p in self._pool:\n            p.join()\n\n\nclass Monkey:\n    \"\"\"\n    Context manager which replaces standard multiprocessing.pool\n    implementations with tbb.pool using monkey-patching. It also enables TBB\n    threading for Intel(R) Math Kernel Library (Intel(R) MKL). For example:\n\n        with tbb.Monkey():\n            run_my_numpy_code()\n\n    It allows multiple parallel tasks to be executed on the same thread pool\n    and coordinate number of threads across multiple processes thus avoiding\n    overheads from oversubscription.\n    \"\"\"\n    _items   = {}\n    _modules = {}\n\n    def __init__(self, max_num_threads=None, benchmark=False):\n        \"\"\"\n        Create context manager for running under TBB scheduler.\n        :param max_num_threads: if specified, limits maximal number of threads\n        :param benchmark: if specified, blocks in initialization until requested number of threads are ready\n        \"\"\"\n        if max_num_threads:\n            self.ctl = global_control(global_control.max_allowed_parallelism, int(max_num_threads))\n        if benchmark:\n            if not max_num_threads:\n               max_num_threads = default_num_threads()\n            from .api import _concurrency_barrier\n            _concurrency_barrier(int(max_num_threads))\n\n    def _patch(self, class_name, module_name, obj):\n        m = self._modules[class_name] = __import__(module_name, globals(),\n                                                   locals(), [class_name])\n        if m == None:\n            return\n        oldattr = getattr(m, class_name, None)\n        if oldattr == None:\n            self._modules[class_name] = None\n            return\n        self._items[class_name] = oldattr\n        setattr(m, class_name, obj)\n\n    def __enter__(self):\n        global is_active\n        assert is_active == False, \"tbb.Monkey does not support nesting yet\"\n        is_active = True\n        self.env = os.getenv('MKL_THREADING_LAYER')\n        os.environ['MKL_THREADING_LAYER'] = 'TBB'\n\n        if ipc_enabled:\n            if sys.version_info.major == 2 and sys.version_info.minor >= 7:\n                self._patch(\"Pool\", \"multiprocessing.pool\", TBBProcessPool27)\n            elif sys.version_info.major == 3 and sys.version_info.minor >= 5:\n                self._patch(\"Pool\", \"multiprocessing.pool\", TBBProcessPool3)\n        self._patch(\"ThreadPool\", \"multiprocessing.pool\", Pool)\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        global is_active\n        assert is_active == True, \"modified?\"\n        is_active = False\n        if self.env is None:\n            del os.environ['MKL_THREADING_LAYER']\n        else:\n            os.environ['MKL_THREADING_LAYER'] = self.env\n        for name in self._items.keys():\n            setattr(self._modules[name], name, self._items[name])\n\n\ndef init_sem_name():\n    try:\n        librml = ctypes.CDLL(libirml)\n        librml.set_active_sem_name()\n        librml.set_stop_sem_name()\n    except Exception as e:\n        print(\"Warning: Can not initialize name of shared semaphores:\", e,\n              file=sys.stderr)\n\n\ndef tbb_atexit():\n    if ipc_enabled:\n        try:\n            librml = ctypes.CDLL(libirml)\n            librml.release_semaphores()\n        except:\n            print(\"Warning: Can not release shared semaphores\",\n                  file=sys.stderr)\n\n\ndef _main():\n    # Run the module specified as the next command line argument\n    # python -m TBB user_app.py\n    global ipc_enabled\n\n    import platform\n    import argparse\n    parser = argparse.ArgumentParser(prog=\"python -m tbb\", description=\"\"\"\n                Run your Python script in context of tbb.Monkey, which\n                replaces standard Python pools and threading layer of\n                Intel(R) Math Kernel Library by implementation based on\n                Intel(R) Threading Building Blocks. It enables multiple parallel\n                tasks to be executed on the same thread pool and coordinate\n                number of threads across multiple processes thus avoiding\n                overheads from oversubscription.\n             \"\"\", formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    if platform.system() == \"Linux\":\n        parser.add_argument('--ipc', action='store_true',\n                        help=\"Enable inter-process (IPC) coordination between Intel TBB schedulers\")\n        parser.add_argument('-a', '--allocator', action='store_true',\n                        help=\"Enable Intel TBB scalable allocator as a replacement for standard memory allocator\")\n        parser.add_argument('--allocator-huge-pages', action='store_true',\n                        help=\"Enable huge pages for Intel TBB allocator (implies: -a)\")\n    parser.add_argument('-p', '--max-num-threads', default=default_num_threads(), type=int,\n                        help=\"Initialize Intel TBB with P max number of threads per process\", metavar='P')\n    parser.add_argument('-b', '--benchmark', action='store_true',\n                        help=\"Block Intel TBB initialization until all the threads are created before continue the script. \"\n                        \"This is necessary for performance benchmarks that want to exclude lazy scheduler initialization effects from the measurements\")\n    parser.add_argument('-v', '--verbose', action='store_true',\n                        help=\"Request verbose and version information\")\n    parser.add_argument('-m', action='store_true', dest='module',\n                        help=\"Executes following as a module\")\n    parser.add_argument('name', help=\"Script or module name\")\n    parser.add_argument('args', nargs=argparse.REMAINDER,\n                        help=\"Command line arguments\")\n    args = parser.parse_args()\n\n    if args.verbose:\n        os.environ[\"TBB_VERSION\"] = \"1\"\n    if platform.system() == \"Linux\":\n        if args.allocator_huge_pages:\n            args.allocator = True\n        if args.allocator and not os.environ.get(\"_TBB_MALLOC_PRELOAD\"):\n            libtbbmalloc_lib = 'libtbbmalloc_proxy.so.2'\n            ld_preload = 'LD_PRELOAD'\n            os.environ[\"_TBB_MALLOC_PRELOAD\"] = \"1\"\n            preload_list = filter(None, os.environ.get(ld_preload, \"\").split(':'))\n            if libtbbmalloc_lib in preload_list:\n                print('Info:', ld_preload, \"contains\", libtbbmalloc_lib, \"already\\n\")\n            else:\n                os.environ[ld_preload] = ':'.join([libtbbmalloc_lib] + list(preload_list))\n\n            if args.allocator_huge_pages:\n                assert platform.system() == \"Linux\"\n                try:\n                    with open('/proc/sys/vm/nr_hugepages', 'r') as f:\n                        pages = int(f.read())\n                    if pages == 0:\n                        print(\"TBB: Pre-allocated huge pages are not currently reserved in the system. To reserve, run e.g.:\\n\"\n                              \"\\tsudo sh -c 'echo 2000 > /proc/sys/vm/nr_hugepages'\")\n                    os.environ[\"TBB_MALLOC_USE_HUGE_PAGES\"] = \"1\"\n                except:\n                    print(\"TBB: Failed to read number of pages from /proc/sys/vm/nr_hugepages\\n\"\n                          \"\\tIs the Linux kernel configured with the huge pages feature?\")\n                    sys.exit(1)\n\n            os.execl(sys.executable, sys.executable, '-m', 'tbb', *sys.argv[1:])\n            assert False, \"Re-execution failed\"\n\n    sys.argv = [args.name] + args.args\n    ipc_enabled = platform.system() == \"Linux\" and args.ipc\n    os.environ[\"IPC_ENABLE\"] = \"1\" if ipc_enabled else \"0\"\n    if ipc_enabled:\n        atexit.register(tbb_atexit)\n        init_sem_name()\n    if not os.environ.get(\"KMP_BLOCKTIME\"): # TODO move\n        os.environ[\"KMP_BLOCKTIME\"] = \"0\"\n    if '_' + args.name in globals():\n        return globals()['_' + args.name](*args.args)\n    else:\n        import runpy\n        runf = runpy.run_module if args.module else runpy.run_path\n        with Monkey(max_num_threads=args.max_num_threads, benchmark=args.benchmark):\n            runf(args.name, run_name='__main__')\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/tbb/__main__.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\nfrom . import _main\nfrom sys import exit\nexit(_main())\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/tbb/api.i",
    "content": "%pythonbegin %{\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n\n__all__ = [\"task_arena\", \"task_group\", \"task_scheduler_init\", \"global_control\", \"default_num_threads\"]\n%}\n%begin %{\n/* Defines Python wrappers for Intel(R) Threading Building Blocks (Intel TBB).*/\n%}\n%module api\n\n#if SWIG_VERSION < 0x030001\n#error SWIG version 3.0.6 or newer is required for correct functioning\n#endif\n\n%{\n#define TBB_PREVIEW_GLOBAL_CONTROL 1\n#define TBB_PREVIEW_WAITING_FOR_WORKERS 1\n#include <tbb/tbb.h>\n#include <tbb/compat/condition_variable>\n#if TBB_IMPLEMENT_CPP0X\nnamespace std { using tbb::mutex; }\n#define unique_ptr auto_ptr\n#else\n#include <condition_variable>\n#include <mutex>\n#include <memory>\n#endif\nusing namespace tbb;\n\nclass PyCaller : public swig::SwigPtr_PyObject {\npublic:\n    // icpc 2013 does not support simple using SwigPtr_PyObject::SwigPtr_PyObject;\n    PyCaller(const PyCaller& s) : SwigPtr_PyObject(s) {}\n    PyCaller(PyObject *p, bool initial = true) : SwigPtr_PyObject(p, initial) {}\n\n    void operator()() const {\n        SWIG_PYTHON_THREAD_BEGIN_BLOCK;\n        PyObject* r = PyObject_CallFunctionObjArgs((PyObject*)*this, NULL);\n        if(r) Py_DECREF(r);\n        SWIG_PYTHON_THREAD_END_BLOCK;\n    }\n};\n\nstruct ArenaPyCaller {\n    task_arena *my_arena;\n    PyObject *my_callable;\n    ArenaPyCaller(task_arena *a, PyObject *c) : my_arena(a), my_callable(c) {\n        SWIG_PYTHON_THREAD_BEGIN_BLOCK;\n        Py_XINCREF(c);\n        SWIG_PYTHON_THREAD_END_BLOCK;\n    }\n    void operator()() const {\n        my_arena->execute(PyCaller(my_callable, false));\n    }\n};\n\nstruct barrier_data {\n    std::condition_variable event;\n    std::mutex m;\n    int worker_threads, full_threads;\n};\n\nclass barrier_task : public tbb::task {\n    barrier_data &b;\npublic:\n    barrier_task(barrier_data &d) : b(d) {}\n    /*override*/ tbb::task *execute() {\n        std::unique_lock<std::mutex> lock(b.m);\n        if(++b.worker_threads >= b.full_threads)\n            b.event.notify_all();\n        else while(b.worker_threads < b.full_threads)\n            b.event.wait(lock);\n        return NULL;\n    }\n};\n\nvoid _concurrency_barrier(int threads = tbb::task_scheduler_init::automatic) {\n    if(threads == task_scheduler_init::automatic)\n        threads = task_scheduler_init::default_num_threads();\n    if(threads < 2)\n        return;\n    std::unique_ptr<global_control> g(\n        (global_control::active_value(global_control::max_allowed_parallelism) < unsigned(threads))?\n            new global_control(global_control::max_allowed_parallelism, threads) : NULL);\n    barrier_data b;\n    b.worker_threads = 0;\n    b.full_threads = threads-1;\n    for(int i = 0; i < b.full_threads; i++)\n        tbb::task::enqueue( *new( tbb::task::allocate_root() ) barrier_task(b) );\n    std::unique_lock<std::mutex> lock(b.m);\n    b.event.wait(lock);\n};\n\n%}\n\nvoid _concurrency_barrier(int threads = tbb::task_scheduler_init::automatic);\n\nnamespace tbb {\n    class task_scheduler_init {\n    public:\n        //! Typedef for number of threads that is automatic.\n        static const int automatic = -1;\n        //! Argument to initialize() or constructor that causes initialization to be deferred.\n        static const int deferred = -2;\n        task_scheduler_init( int max_threads=automatic,\n                             size_t thread_stack_size=0 );\n        ~task_scheduler_init();\n        void initialize( int max_threads=automatic );\n        void terminate();\n        static int default_num_threads();\n        bool is_active() const;\n        void blocking_terminate();\n    };\n\n    class task_arena {\n    public:\n        static const int automatic = -1;\n        static int current_thread_index();\n        task_arena(int max_concurrency = automatic, unsigned reserved_for_masters = 1);\n        task_arena(const task_arena &s);\n        ~task_arena();\n        void initialize();\n        void initialize(int max_concurrency, unsigned reserved_for_masters = 1);\n        void terminate();\n        bool is_active();\n        %extend {\n        void enqueue( PyObject *c ) { $self->enqueue(PyCaller(c)); }\n        void execute( PyObject *c ) { $self->execute(PyCaller(c)); }\n        };\n    };\n\n    class task_group {\n    public:\n        task_group();\n        ~task_group();\n        void wait(); \n        bool is_canceling();\n        void cancel();\n        %extend {\n        void run( PyObject *c ) { $self->run(PyCaller(c)); }\n        void run( PyObject *c, task_arena *a ) { $self->run(ArenaPyCaller(a, c)); }\n        };\n    };\n\n    class global_control {\n    public:\n        enum parameter {\n            max_allowed_parallelism,\n            thread_stack_size,\n            parameter_max // insert new parameters above this point\n        };\n        global_control(parameter param, size_t value);\n        ~global_control();\n        static size_t active_value(parameter param);\n    };\n\n} // tbb\n\n// Additional definitions for Python part of the module\n%pythoncode %{\ndefault_num_threads = task_scheduler_init_default_num_threads\n%}\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/tbb/pool.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Based on the software developed by:\n# Copyright (c) 2008,2016 david decotigny (Pool of threads)\n# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. Neither the name of author nor the names of any contributors may be\n#    used to endorse or promote products derived from this software\n#    without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS \"AS IS\" AND\n# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n#\n\n# @brief Python Pool implementation based on TBB with monkey-patching\n#\n# See http://docs.python.org/dev/library/multiprocessing.html\n# Differences: added imap_async and imap_unordered_async, and terminate()\n# has to be called explicitly (it's not registered by atexit).\n#\n# The general idea is that we submit works to a workqueue, either as\n# single Jobs (one function to call), or JobSequences (batch of\n# Jobs). Each Job is associated with an ApplyResult object which has 2\n# states: waiting for the Job to complete, or Ready. Instead of\n# waiting for the jobs to finish, we wait for their ApplyResult object\n# to become ready: an event mechanism is used for that.\n# When we apply a function to several arguments in \"parallel\", we need\n# a way to wait for all/part of the Jobs to be processed: that's what\n# \"collectors\" are for; they group and wait for a set of ApplyResult\n# objects. Once a collector is ready to be used, we can use a\n# CollectorIterator to iterate over the result values it's collecting.\n#\n# The methods of a Pool object use all these concepts and expose\n# them to their caller in a very simple way.\n\nimport sys\nimport threading\nimport traceback\nfrom .api import *\n\n__all__ = [\"Pool\", \"TimeoutError\"]\n__doc__ = \"\"\"\nStandard Python Pool implementation based on Python API\nfor Intel(R) Threading Building Blocks library (Intel(R) TBB)\n\"\"\"\n\n\nclass TimeoutError(Exception):\n    \"\"\"Raised when a result is not available within the given timeout\"\"\"\n    pass\n\n\nclass Pool(object):\n    \"\"\"\n    The Pool class provides standard multiprocessing.Pool interface\n    which is mapped onto Intel(R) TBB tasks executing in its thread pool\n    \"\"\"\n\n    def __init__(self, nworkers=0, name=\"Pool\"):\n        \"\"\"\n        \\param nworkers (integer) number of worker threads to start\n        \\param name (string) prefix for the worker threads' name\n        \"\"\"\n        self._closed = False\n        self._tasks = task_group()\n        self._pool = [None,]*default_num_threads()  # Dask asks for len(_pool)\n\n    def apply(self, func, args=(), kwds=dict()):\n        \"\"\"Equivalent of the apply() builtin function. It blocks till\n        the result is ready.\"\"\"\n        return self.apply_async(func, args, kwds).get()\n\n    def map(self, func, iterable, chunksize=None):\n        \"\"\"A parallel equivalent of the map() builtin function. It\n        blocks till the result is ready.\n\n        This method chops the iterable into a number of chunks which\n        it submits to the process pool as separate tasks. The\n        (approximate) size of these chunks can be specified by setting\n        chunksize to a positive integer.\"\"\"\n        return self.map_async(func, iterable, chunksize).get()\n\n    def imap(self, func, iterable, chunksize=1):\n        \"\"\"\n        An equivalent of itertools.imap().\n\n        The chunksize argument is the same as the one used by the\n        map() method. For very long iterables using a large value for\n        chunksize can make the job complete much faster than\n        using the default value of 1.\n\n        Also if chunksize is 1 then the next() method of the iterator\n        returned by the imap() method has an optional timeout\n        parameter: next(timeout) will raise processing.TimeoutError if\n        the result cannot be returned within timeout seconds.\n        \"\"\"\n        collector = OrderedResultCollector(as_iterator=True)\n        self._create_sequences(func, iterable, chunksize, collector)\n        return iter(collector)\n\n    def imap_unordered(self, func, iterable, chunksize=1):\n        \"\"\"The same as imap() except that the ordering of the results\n        from the returned iterator should be considered\n        arbitrary. (Only when there is only one worker process is the\n        order guaranteed to be \"correct\".)\"\"\"\n        collector = UnorderedResultCollector()\n        self._create_sequences(func, iterable, chunksize, collector)\n        return iter(collector)\n\n    def apply_async(self, func, args=(), kwds=dict(), callback=None):\n        \"\"\"A variant of the apply() method which returns an\n        ApplyResult object.\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the result becomes ready,\n        callback is applied to it (unless the call failed). callback\n        should complete immediately since otherwise the thread which\n        handles the results will get blocked.\"\"\"\n        assert not self._closed  # No lock here. We assume it's atomic...\n        apply_result = ApplyResult(callback=callback)\n        job = Job(func, args, kwds, apply_result)\n        self._tasks.run(job)\n        return apply_result\n\n    def map_async(self, func, iterable, chunksize=None, callback=None):\n        \"\"\"A variant of the map() method which returns a ApplyResult\n        object.\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the result becomes ready\n        callback is applied to it (unless the call failed). callback\n        should complete immediately since otherwise the thread which\n        handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = OrderedResultCollector(apply_result, as_iterator=False)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value([])\n        return apply_result\n\n    def imap_async(self, func, iterable, chunksize=None, callback=None):\n        \"\"\"A variant of the imap() method which returns an ApplyResult\n        object that provides an iterator (next method(timeout)\n        available).\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the resulting iterator becomes\n        ready, callback is applied to it (unless the call\n        failed). callback should complete immediately since otherwise\n        the thread which handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = OrderedResultCollector(apply_result, as_iterator=True)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value(iter([]))\n        return apply_result\n\n    def imap_unordered_async(self, func, iterable, chunksize=None,\n                             callback=None):\n        \"\"\"A variant of the imap_unordered() method which returns an\n        ApplyResult object that provides an iterator (next\n        method(timeout) available).\n\n        If callback is specified then it should be a callable which\n        accepts a single argument. When the resulting iterator becomes\n        ready, callback is applied to it (unless the call\n        failed). callback should complete immediately since otherwise\n        the thread which handles the results will get blocked.\"\"\"\n        apply_result = ApplyResult(callback=callback)\n        collector    = UnorderedResultCollector(apply_result)\n        if not self._create_sequences(func, iterable, chunksize, collector):\n          apply_result._set_value(iter([]))\n        return apply_result\n\n    def close(self):\n        \"\"\"Prevents any more tasks from being submitted to the\n        pool. Once all the tasks have been completed the worker\n        processes will exit.\"\"\"\n        # No lock here. We assume it's sufficiently atomic...\n        self._closed = True\n\n    def terminate(self):\n        \"\"\"Stops the worker processes immediately without completing\n        outstanding work. When the pool object is garbage collected\n        terminate() will be called immediately.\"\"\"\n        self.close()\n        self._tasks.cancel()\n\n    def join(self):\n        \"\"\"Wait for the worker processes to exit. One must call\n        close() or terminate() before using join().\"\"\"\n        self._tasks.wait()\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self.join()\n\n    def __del__(self):\n        self.terminate()\n        self.join()\n\n    def _create_sequences(self, func, iterable, chunksize, collector):\n        \"\"\"\n        Create callable objects to process and pushes them on the\n        work queue. Each work unit is meant to process a slice of\n        iterable of size chunksize. If collector is specified, then\n        the ApplyResult objects associated with the jobs will notify\n        collector when their result becomes ready.\n\n        \\return the list callable objects (basically: JobSequences)\n        pushed onto the work queue\n        \"\"\"\n        assert not self._closed  # No lock here. We assume it's atomic...\n        it_ = iter(iterable)\n        exit_loop = False\n        sequences = []\n        while not exit_loop:\n            seq = []\n            for _ in range(chunksize or 1):\n                try:\n                    arg = next(it_)\n                except StopIteration:\n                    exit_loop = True\n                    break\n                apply_result = ApplyResult(collector)\n                job = Job(func, (arg,), {}, apply_result)\n                seq.append(job)\n            if seq:\n                sequences.append(JobSequence(seq))\n        for t in sequences:\n            self._tasks.run(t)\n        return sequences\n\n\nclass Job:\n    \"\"\"A work unit that corresponds to the execution of a single function\"\"\"\n\n    def __init__(self, func, args, kwds, apply_result):\n        \"\"\"\n        \\param func/args/kwds used to call the function\n        \\param apply_result ApplyResult object that holds the result\n        of the function call\n        \"\"\"\n        self._func = func\n        self._args = args\n        self._kwds = kwds\n        self._result = apply_result\n\n    def __call__(self):\n        \"\"\"\n        Call the function with the args/kwds and tell the ApplyResult\n        that its result is ready. Correctly handles the exceptions\n        happening during the execution of the function\n        \"\"\"\n        try:\n            result = self._func(*self._args, **self._kwds)\n        except:\n            self._result._set_exception()\n        else:\n            self._result._set_value(result)\n\n\nclass JobSequence:\n    \"\"\"A work unit that corresponds to the processing of a continuous\n    sequence of Job objects\"\"\"\n\n    def __init__(self, jobs):\n        self._jobs = jobs\n\n    def __call__(self):\n        \"\"\"\n        Call all the Job objects that have been specified\n        \"\"\"\n        for job in self._jobs:\n            job()\n\n\nclass ApplyResult(object):\n    \"\"\"An object associated with a Job object that holds its result:\n    it's available during the whole life the Job and after, even when\n    the Job didn't process yet. It's possible to use this object to\n    wait for the result/exception of the job to be available.\n\n    The result objects returns by the Pool::*_async() methods are of\n    this type\"\"\"\n\n    def __init__(self, collector=None, callback=None):\n        \"\"\"\n        \\param collector when not None, the notify_ready() method of\n        the collector will be called when the result from the Job is\n        ready\n        \\param callback when not None, function to call when the\n        result becomes available (this is the paramater passed to the\n        Pool::*_async() methods.\n        \"\"\"\n        self._success = False\n        self._event = threading.Event()\n        self._data = None\n        self._collector = None\n        self._callback = callback\n\n        if collector is not None:\n            collector.register_result(self)\n            self._collector = collector\n\n    def get(self, timeout=None):\n        \"\"\"\n        Returns the result when it arrives. If timeout is not None and\n        the result does not arrive within timeout seconds then\n        TimeoutError is raised. If the remote call raised an exception\n        then that exception will be reraised by get().\n        \"\"\"\n        if not self.wait(timeout):\n            raise TimeoutError(\"Result not available within %fs\" % timeout)\n        if self._success:\n            return self._data\n        if sys.version_info[0] == 3:\n            raise self._data[0](self._data[1]).with_traceback(self._data[2])\n        else:\n            exec(\"raise self._data[0], self._data[1], self._data[2]\")\n\n    def wait(self, timeout=None):\n        \"\"\"Waits until the result is available or until timeout\n        seconds pass.\"\"\"\n        self._event.wait(timeout)\n        return self._event.isSet()\n\n    def ready(self):\n        \"\"\"Returns whether the call has completed.\"\"\"\n        return self._event.isSet()\n\n    def successful(self):\n        \"\"\"Returns whether the call completed without raising an\n        exception. Will raise AssertionError if the result is not\n        ready.\"\"\"\n        assert self.ready()\n        return self._success\n\n    def _set_value(self, value):\n        \"\"\"Called by a Job object to tell the result is ready, and\n        provides the value of this result. The object will become\n        ready and successful. The collector's notify_ready() method\n        will be called, and the callback method too\"\"\"\n        assert not self.ready()\n        self._data = value\n        self._success = True\n        self._event.set()\n        if self._collector is not None:\n            self._collector.notify_ready(self)\n        if self._callback is not None:\n            try:\n                self._callback(value)\n            except:\n                traceback.print_exc()\n\n    def _set_exception(self):\n        \"\"\"Called by a Job object to tell that an exception occurred\n        during the processing of the function. The object will become\n        ready but not successful. The collector's notify_ready()\n        method will be called, but NOT the callback method\"\"\"\n        # traceback.print_exc()\n        assert not self.ready()\n        self._data = sys.exc_info()\n        self._success = False\n        self._event.set()\n        if self._collector is not None:\n            self._collector.notify_ready(self)\n\n\nclass AbstractResultCollector(object):\n    \"\"\"ABC to define the interface of a ResultCollector object. It is\n    basically an object which knows whuich results it's waiting for,\n    and which is able to get notify when they get available. It is\n    also able to provide an iterator over the results when they are\n    available\"\"\"\n\n    def __init__(self, to_notify):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \"\"\"\n        self._to_notify = to_notify\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def notify_ready(self, apply_result):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another (order defined by the\n        implementation)\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        raise NotImplementedError(\"Children classes must implement it\")\n\n    def __iter__(self):\n        \"\"\"Return a new CollectorIterator object for this collector\"\"\"\n        return CollectorIterator(self)\n\n\nclass CollectorIterator(object):\n    \"\"\"An iterator that allows to iterate over the result values\n    available in the given collector object. Equipped with an extended\n    next() method accepting a timeout argument. Created by the\n    AbstractResultCollector::__iter__() method\"\"\"\n\n    def __init__(self, collector):\n        \"\"\"\\param AbstractResultCollector instance\"\"\"\n        self._collector = collector\n        self._idx = 0\n\n    def __iter__(self):\n        return self\n\n    def next(self, timeout=None):\n        \"\"\"Return the next result value in the sequence. Raise\n        StopIteration at the end. Can raise the exception raised by\n        the Job\"\"\"\n        try:\n            apply_result = self._collector._get_result(self._idx, timeout)\n        except IndexError:\n            # Reset for next time\n            self._idx = 0\n            raise StopIteration\n        except:\n            self._idx = 0\n            raise\n        self._idx += 1\n        assert apply_result.ready()\n        return apply_result.get(0)\n\n    def __next__(self):\n        return self.next()\n\n\nclass UnorderedResultCollector(AbstractResultCollector):\n    \"\"\"An AbstractResultCollector implementation that collects the\n    values of the ApplyResult objects in the order they become ready. The\n    CollectorIterator object returned by __iter__() will iterate over\n    them in the order they become ready\"\"\"\n\n    def __init__(self, to_notify=None):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \"\"\"\n        AbstractResultCollector.__init__(self, to_notify)\n        self._cond = threading.Condition()\n        self._collection = []\n        self._expected = 0\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        self._expected += 1\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another, in the order the results have\n        become available.\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        self._cond.acquire()\n        try:\n            if idx >= self._expected:\n                raise IndexError\n            elif idx < len(self._collection):\n                return self._collection[idx]\n            elif idx != len(self._collection):\n                # Violation of the sequence protocol\n                raise IndexError()\n            else:\n                self._cond.wait(timeout=timeout)\n                try:\n                    return self._collection[idx]\n                except IndexError:\n                    # Still not added !\n                    raise TimeoutError(\"Timeout while waiting for results\")\n        finally:\n            self._cond.release()\n\n    def notify_ready(self, apply_result=None):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        first_item = False\n        self._cond.acquire()\n        try:\n            self._collection.append(apply_result)\n            first_item = (len(self._collection) == 1)\n\n            self._cond.notifyAll()\n        finally:\n            self._cond.release()\n\n        if first_item and self._to_notify is not None:\n            self._to_notify._set_value(iter(self))\n\n\nclass OrderedResultCollector(AbstractResultCollector):\n    \"\"\"An AbstractResultCollector implementation that collects the\n    values of the ApplyResult objects in the order they have been\n    submitted. The CollectorIterator object returned by __iter__()\n    will iterate over them in the order they have been submitted\"\"\"\n\n    def __init__(self, to_notify=None, as_iterator=True):\n        \"\"\"\n        \\param to_notify ApplyResult object to notify when all the\n        results we're waiting for become available. Can be None.\n        \\param as_iterator boolean telling whether the result value\n        set on to_notify should be an iterator (available as soon as 1\n        result arrived) or a list (available only after the last\n        result arrived)\n        \"\"\"\n        AbstractResultCollector.__init__(self, to_notify)\n        self._results = []\n        self._lock = threading.Lock()\n        self._remaining = 0\n        self._as_iterator = as_iterator\n\n    def register_result(self, apply_result):\n        \"\"\"Used to identify which results we're waiting for. Will\n        always be called BEFORE the Jobs get submitted to the work\n        queue, and BEFORE the __iter__ and _get_result() methods can\n        be called\n        \\param apply_result ApplyResult object to add in our collection\n        \"\"\"\n        self._results.append(apply_result)\n        self._remaining += 1\n\n    def _get_result(self, idx, timeout=None):\n        \"\"\"Called by the CollectorIterator object to retrieve the\n        result's values one after another (order defined by the\n        implementation)\n        \\param idx The index of the result we want, wrt collector's order\n        \\param timeout integer telling how long to wait (in seconds)\n        for the result at index idx to be available, or None (wait\n        forever)\n        \"\"\"\n        res = self._results[idx]\n        res.wait(timeout)\n        return res\n\n    def notify_ready(self, apply_result):\n        \"\"\"Called by the ApplyResult object (already registered via\n        register_result()) that it is now ready (ie. the Job's result\n        is available or an exception has been raised).\n        \\param apply_result ApplyResult object telling us that the job\n        has been processed\n        \"\"\"\n        got_first = False\n        got_last = False\n        self._lock.acquire()\n        try:\n            assert self._remaining > 0\n            got_first = (len(self._results) == self._remaining)\n            self._remaining -= 1\n            got_last = (self._remaining == 0)\n        finally:\n            self._lock.release()\n\n        if self._to_notify is not None:\n            if self._as_iterator and got_first:\n                self._to_notify._set_value(iter(self))\n            elif not self._as_iterator and got_last:\n                try:\n                    lst = [r.get(0) for r in self._results]\n                except:\n                    self._to_notify._set_exception()\n                else:\n                    self._to_notify._set_value(lst)\n"
  },
  {
    "path": "isosurface/tbb/tbb2018_20180822oss/python/tbb/test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) 2016-2018 Intel Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#\n#\n#\n\n# Based on the software developed by:\n# Copyright (c) 2008,2016 david decotigny (Pool of threads)\n# Copyright (c) 2006-2008, R Oudkerk (multiprocessing.Pool)\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. Neither the name of author nor the names of any contributors may be\n#    used to endorse or promote products derived from this software\n#    without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS \"AS IS\" AND\n# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n# SUCH DAMAGE.\n#\n\nfrom __future__ import print_function\nimport time\nimport threading\n\nfrom .api import *\nfrom .pool import *\n\n\ndef test(arg=None):\n    if arg == \"-v\":\n        def say(*x):\n            print(*x)\n    else:\n        def say(*x):\n            pass\n    say(\"Start Pool testing\")\n\n    get_tid = lambda: threading.current_thread().ident\n\n    def return42():\n        return 42\n\n    def f(x):\n        return x * x\n\n    def work(mseconds):\n        res = str(mseconds)\n        if mseconds < 0:\n            mseconds = -mseconds\n        say(\"[%d] Start to work for %fms...\" % (get_tid(), mseconds*10))\n        time.sleep(mseconds/100.)\n        say(\"[%d] Work done (%fms).\" % (get_tid(), mseconds*10))\n        return res\n\n    ### Test copy/pasted from multiprocessing\n    pool = Pool(4)  # start worker threads\n\n    # edge cases\n    assert pool.map(return42, []) == []\n    assert pool.apply_async(return42, []).get() == 42\n    assert pool.apply(return42, []) == 42\n    assert list(pool.imap(return42, iter([]))) == []\n    assert list(pool.imap_unordered(return42, iter([]))) == []\n    assert pool.map_async(return42, []).get() == []\n    assert list(pool.imap_async(return42, iter([])).get()) == []\n    assert list(pool.imap_unordered_async(return42, iter([])).get()) == []\n\n    # basic tests\n    result = pool.apply_async(f, (10,))  # evaluate \"f(10)\" asynchronously\n    assert result.get(timeout=1) == 100  # ... unless slow computer\n    assert list(pool.map(f, range(10))) == list(map(f, range(10)))\n    it = pool.imap(f, range(10))\n    assert next(it) == 0\n    assert next(it) == 1\n    assert next(it) == 4\n\n    # Test apply_sync exceptions\n    result = pool.apply_async(time.sleep, (3,))\n    try:\n        say(result.get(timeout=1))  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    assert result.get() is None  # sleep() returns None\n\n    def cb(s):\n        say(\"Result ready: %s\" % s)\n\n    # Test imap()\n    assert list(pool.imap(work, range(10, 3, -1), chunksize=4)) == list(map(\n        str, range(10, 3, -1)))\n\n    # Test imap_unordered()\n    assert sorted(pool.imap_unordered(work, range(10, 3, -1))) == sorted(map(\n        str, range(10, 3, -1)))\n\n    # Test map_async()\n    result = pool.map_async(work, range(10), callback=cb)\n    try:\n        result.get(timeout=0.01)  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    say(result.get())\n\n    # Test imap_async()\n    result = pool.imap_async(work, range(3, 10), callback=cb)\n    try:\n        result.get(timeout=0.01)  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    for i in result.get():\n        say(\"Item:\", i)\n    say(\"### Loop again:\")\n    for i in result.get():\n        say(\"Item2:\", i)\n\n    # Test imap_unordered_async()\n    result = pool.imap_unordered_async(work, range(10, 3, -1), callback=cb)\n    try:\n        say(result.get(timeout=0.01))  # raises `TimeoutError`\n    except TimeoutError:\n        say(\"Good. Got expected timeout exception.\")\n    else:\n        assert False, \"Expected exception !\"\n    for i in result.get():\n        say(\"Item1:\", i)\n    for i in result.get():\n        say(\"Item2:\", i)\n    r = result.get()\n    for i in r:\n        say(\"Item3:\", i)\n    for i in r:\n        say(\"Item4:\", i)\n    for i in r:\n        say(\"Item5:\", i)\n\n    #\n    # The case for the exceptions\n    #\n\n    # Exceptions in imap_unordered_async()\n    result = pool.imap_unordered_async(work, range(2, -10, -1), callback=cb)\n    time.sleep(3)\n    try:\n        for i in result.get():\n            say(\"Got item:\", i)\n    except (IOError, ValueError):\n        say(\"Good. Got expected exception\")\n\n    # Exceptions in imap_async()\n    result = pool.imap_async(work, range(2, -10, -1), callback=cb)\n    time.sleep(3)\n    try:\n        for i in result.get():\n            say(\"Got item:\", i)\n    except (IOError, ValueError):\n        say(\"Good. Got expected exception\")\n\n    # Stop the test: need to stop the pool !!!\n    pool.terminate()\n    pool.join()\n\n\n"
  },
  {
    "path": "models/CNN/__init__.py",
    "content": ""
  },
  {
    "path": "models/CNN/alexnet.py",
    "content": "\"\"\"This is an TensorFLow implementation of AlexNet by Alex Krizhevsky at all.\nPaper:\n(http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)\nExplanation can be found in my blog post:\nhttps://kratzert.github.io/2017/02/24/finetuning-alexnet-with-tensorflow.html\nThis script enables finetuning AlexNet on any given Dataset with any number of\nclasses. The structure of this script is strongly inspired by the fast.ai\nDeep Learning class by Jeremy Howard and Rachel Thomas, especially their vgg16\nfinetuning script:\nLink:\n- https://github.com/fastai/courses/blob/master/deeplearning1/nbs/vgg16.py\nThe pretrained weights can be downloaded here and should be placed in the same\nfolder as this file:\n- http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/\n@author: Frederik Kratzert (contact: f.kratzert(at)gmail.com)\n\"\"\"\n\nimport tensorflow as tf\nimport numpy as np\n\n\nclass AlexNet(object):\n    \"\"\"Implementation of the AlexNet.\"\"\"\n\n    def __init__(self, x, skip_layer, is_training, num_classes = 1024, keep_prob = 0.7,\n                 weights_path='DEFAULT'):\n        \"\"\"Create the graph of the AlexNet model.\n        Args:\n            x: Placeholder for the input tensor.\n            keep_prob: Dropout probability.\n            num_classes: Number of classes in the dataset.\n            skip_layer: List of names of the layer, that get trained from\n                scratch\n            weights_path: Complete path to the pretrained weight file, if it\n                isn't in the same folder as this code\n        \"\"\"\n        # Parse input arguments into class variables\n        self.X = x\n        self.NUM_CLASSES = num_classes\n        self.KEEP_PROB = keep_prob\n        self.SKIP_LAYER = skip_layer\n        self.is_training = is_training\n\n        if weights_path == 'DEFAULT':\n            self.WEIGHTS_PATH = '/media/ssd/projects/pointnet/pointnet/pointnet2/models/alexnet/bvlc_alexnet.npy'\n        else:\n            self.WEIGHTS_PATH = weights_path\n\n        # Call the create function to build the computational graph of AlexNet\n        self.create()\n\n    def create(self):\n        \"\"\"Create the network graph.\"\"\"\n        # 1st Layer: Conv (w ReLu) -> Lrn -> Pool\n        conv1 = conv(self.X, 11, 11, 96, 1, 1, padding='VALID', name='conv1')\n        norm1 = lrn(conv1, 2, 2e-05, 0.75, name='norm1')\n        pool1 = max_pool(norm1, 3, 3, 2, 2, padding='VALID', name='pool1')\n        \n        # 2nd Layer: Conv (w ReLu)  -> Lrn -> Pool with 2 groups\n        conv2 = conv(pool1, 5, 5, 256, 1, 1, groups=2, name='conv2')\n        norm2 = lrn(conv2, 2, 2e-05, 0.75, name='norm2')\n        pool2 = max_pool(norm2, 3, 3, 2, 2, padding='VALID', name='pool2')\n        \n        # 3rd Layer: Conv (w ReLu)\n        conv3 = conv(pool2, 3, 3, 384, 1, 1, name='conv3')\n\n        # 4th Layer: Conv (w ReLu) splitted into two groups\n        conv4 = conv(conv3, 3, 3, 384, 1, 1, groups=2, name='conv4')\n\n        # 5th Layer: Conv (w ReLu) -> Pool splitted into two groups\n        conv5 = conv(conv4, 3, 3, 256, 1, 1, groups=2, name='conv5')\n\n        pool5 = max_pool(conv5, 3, 3, 2, 2, padding='VALID', name='pool5')\n\n        print ('pool5', pool5.shape)\n        # 6th Layer: Flatten -> FC (w ReLu) -> Dropout\n        # flattened = tf.reshape(pool5, [-1, 6*6*256])\n        # fc6 = fc(flattened, 6*6*256, 4096, name='fc6')\n        # dropout6 = dropout(fc6, self.KEEP_PROB)\n        fc6 = conv(pool5, 11, 11, 4096, 1, 1, padding='VALID', name='fc6')\n        print ('fc6', fc6.shape)\n        dropout6 = tf.layers.dropout(fc6, self.KEEP_PROB, training = self.is_training)\n\n        # # 7th Layer: FC (w ReLu) -> Dropout\n        # fc7 = fc(dropout6, 4096, 4096, name='fc7')\n        # dropout7 = dropout(fc7, self.KEEP_PROB)\n        fc7 = conv(dropout6, 1, 1, 4096, 1, 1, padding='VALID', name='fc7')\n        dropout7 = tf.layers.dropout(fc7, self.KEEP_PROB, training = self.is_training)\n\n        # 8th Layer: FC and return unscaled activations\n        # self.out = fc(dropout7, 4096, self.NUM_CLASSES, relu=False, name='fc8')\n        self.out = conv(dropout7, 1, 1, 4096, 1, 1, padding='VALID', relu=False, name='fc8')\n\n    def load_initial_weights(self, session):\n        \"\"\"Load weights from file into network.\n        As the weights from http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/\n        come as a dict of lists (e.g. weights['conv1'] is a list) and not as\n        dict of dicts (e.g. weights['conv1'] is a dict with keys 'weights' &\n        'biases') we need a special load function\n        \"\"\"\n        # Load the weights into memory\n        weights_dict = np.load(self.WEIGHTS_PATH, encoding='bytes').item()\n\n        # Loop over all layer names stored in the weights dict\n        for op_name in weights_dict:\n\n            # Check if layer should be trained from scratch\n            if op_name not in self.SKIP_LAYER:\n\n                with tf.variable_scope(op_name, reuse=True):\n\n                    # Assign weights/biases to their corresponding tf variable\n                    for data in weights_dict[op_name]:\n\n                        # Biases\n                        if len(data.shape) == 1:\n                            var = tf.get_variable('biases', trainable=False)\n                            session.run(var.assign(data))\n\n                        # Weights\n                        else:\n                            var = tf.get_variable('weights', trainable=False)\n                            session.run(var.assign(data))\n\n\ndef conv(x, filter_height, filter_width, num_filters, stride_y, stride_x, name,\n         padding='VALID', groups=1, relu = True):\n    \"\"\"Create a convolution layer.\n    Adapted from: https://github.com/ethereon/caffe-tensorflow\n    \"\"\"\n    # Get number of input channels\n    input_channels = int(x.get_shape()[-1])\n\n    # Create lambda function for the convolution\n    convolve = lambda i, k: tf.nn.conv2d(i, k,\n                                         strides=[1, stride_y, stride_x, 1],\n                                         padding=padding)\n\n    with tf.variable_scope(name) as scope:\n        # Create tf variables for the weights and biases of the conv layer\n        weights = tf.get_variable('weights', shape=[filter_height,\n                                                    filter_width,\n                                                    input_channels/groups,\n                                                    num_filters])\n        biases = tf.get_variable('biases', shape=[num_filters])\n\n    if groups == 1:\n        conv = convolve(x, weights)\n\n    # In the cases of multiple groups, split inputs & weights and\n    else:\n        # Split input and weights and convolve them separately\n        input_groups = tf.split(axis=3, num_or_size_splits=groups, value=x)\n        weight_groups = tf.split(axis=3, num_or_size_splits=groups,\n                                 value=weights)\n        output_groups = [convolve(i, k) for i, k in zip(input_groups, weight_groups)]\n\n        # Concat the convolved output together again\n        conv = tf.concat(axis=3, values=output_groups)\n\n    # Add biases\n    bias = tf.reshape(tf.nn.bias_add(conv, biases), tf.shape(conv))\n\n    # Apply relu function\n\n    if relu:\n        relu = tf.nn.relu(bias, name=scope.name)\n\n        return relu\n    else:\n        return bias\n\n\ndef fc(x, num_in, num_out, name, relu=True):\n    \"\"\"Create a fully connected layer.\"\"\"\n    with tf.variable_scope(name) as scope:\n\n        # Create tf variables for the weights and biases\n        weights = tf.get_variable('weights', shape=[num_in, num_out],\n                                  trainable=True)\n        biases = tf.get_variable('biases', [num_out], trainable=True)\n\n        # Matrix multiply weights and inputs and add bias\n        act = tf.nn.xw_plus_b(x, weights, biases, name=scope.name)\n\n    if relu:\n        # Apply ReLu non linearity\n        relu = tf.nn.relu(act)\n        return relu\n    else:\n        return act\n\n\ndef max_pool(x, filter_height, filter_width, stride_y, stride_x, name,\n             padding='SAME'):\n    \"\"\"Create a max pooling layer.\"\"\"\n    return tf.nn.max_pool(x, ksize=[1, filter_height, filter_width, 1],\n                          strides=[1, stride_y, stride_x, 1],\n                          padding=padding, name=name)\n\n\ndef lrn(x, radius, alpha, beta, name, bias=1.0):\n    \"\"\"Create a local response normalization layer.\"\"\"\n    return tf.nn.local_response_normalization(x, depth_radius=radius,\n                                              alpha=alpha, beta=beta,\n                                              bias=bias, name=name)\n\n\ndef dropout(x, keep_prob):\n    \"\"\"Create a dropout layer.\"\"\"\n    return tf.nn.dropout(x, keep_prob)\n\n"
  },
  {
    "path": "models/CNN/resnet.py",
    "content": "import tensorflow as tf \nfrom tensorflow.contrib.slim.python.slim.nets import resnet_v1\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\nimport cv2\n\nslim = tf.contrib.slim\nresnet_v1 = resnet_v1\n\nif __name__ == \"__main__\":\n    #print (\"unitest for resnet\")\n    batch_size = 10\n    img_size = 256\n    img = cv2.imread('/mnt/ilcompf8d0/user/weiyuewa/sources/pipeline1/tf_neural_renderer/img.png')\n\n    # with tf.Session('') as sess:\n\n    with tf.device('/gpu:0'):\n        inputbatch = tf.expand_dims(tf.constant(img, dtype=tf.float32), axis=0)#tf.zeros([batch_size, img_size, img_size, 3])\n\n        logits, endpoints = resnet_v1.resnet_v1_50(inputbatch, 1000, is_training=False)\n\n        config = tf.ConfigProto()\n        config.gpu_options.allow_growth = True\n        config.allow_soft_placement = True\n        config.log_device_placement = False\n        sess = tf.Session(config=config)\n        variables_to_restore = []\n\n        a = [name for name, _ in checkpoint_utils.list_variables('pretrained_model/resnet_v1_50.ckpt')]\n        # print a\n        for var in slim.get_model_variables():\n            if (var.op.name.startswith('resnet_v1_50')) and (var.op.name in a) and ('logits' not in var.op.name):\n                variables_to_restore.append(var)\n        # print variables_to_restore\n        # slim.assign_from_checkpoint_fn('pretrained_model/resnet_v1_50.ckpt', variables_to_restore, ignore_missing_vars=False)\n        init = tf.global_variables_initializer()\n        sess.run(init)\n\n        saver = tf.train.Saver(variables_to_restore)\n        saver.restore(sess, 'pretrained_model/resnet_v1_50.ckpt')\n        # print a.keys()\n\n        cls_val = sess.run(logits)\n        print cls_val\n\n    # print logits\n    print endpoints.keys()"
  },
  {
    "path": "models/CNN/vgg.py",
    "content": "# Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ==============================================================================\n\"\"\"Contains model definitions for versions of the Oxford VGG network.\n\nThese model definitions were introduced in the following technical report:\n\n  Very Deep Convolutional Networks For Large-Scale Image Recognition\n  Karen Simonyan and Andrew Zisserman\n  arXiv technical report, 2015\n  PDF: http://arxiv.org/pdf/1409.1556.pdf\n  ILSVRC 2014 Slides: http://www.robots.ox.ac.uk/~karen/pdf/ILSVRC_2014.pdf\n  CC-BY-4.0\n\nMore information can be obtained from the VGG website:\nwww.robots.ox.ac.uk/~vgg/research/very_deep/\n\nUsage:\n  with slim.arg_scope(vgg.vgg_arg_scope()):\n    outputs, end_points = vgg.vgg_a(inputs)\n\n  with slim.arg_scope(vgg.vgg_arg_scope()):\n    outputs, end_points = vgg.vgg_16(inputs)\n\n@@vgg_a\n@@vgg_16\n@@vgg_19\n\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport tensorflow as tf\n\nslim = tf.contrib.slim\n\n\ndef vgg_arg_scope(weight_decay=0.0005):\n  \"\"\"Defines the VGG arg scope.\n\n  Args:\n    weight_decay: The l2 regularization coefficient.\n\n  Returns:\n    An arg_scope.\n  \"\"\"\n  with slim.arg_scope([slim.conv2d, slim.fully_connected],\n                      activation_fn=tf.nn.relu,\n                      weights_regularizer=slim.l2_regularizer(weight_decay),\n                      biases_initializer=tf.zeros_initializer()):\n    with slim.arg_scope([slim.conv2d], padding='SAME') as arg_sc:\n      return arg_sc\n\n\ndef vgg_a(inputs,\n          num_classes=1000,\n          is_training=True,\n          dropout_keep_prob=0.5,\n          spatial_squeeze=True,\n          scope='vgg_a',\n          fc_conv_padding='VALID',\n          global_pool=False):\n  \"\"\"Oxford Net VGG 11-Layers version A Example.\n\n  Note: All the fully_connected layers have been transformed to conv2d layers.\n        To use in classification mode, resize input to 224x224.\n\n  Args:\n    inputs: a tensor of size [batch_size, height, width, channels].\n    num_classes: number of predicted classes. If 0 or None, the logits layer is\n      omitted and the input features to the logits layer are returned instead.\n    is_training: whether or not the model is being trained.\n    dropout_keep_prob: the probability that activations are kept in the dropout\n      layers during training.\n    spatial_squeeze: whether or not should squeeze the spatial dimensions of the\n      outputs. Useful to remove unnecessary dimensions for classification.\n    scope: Optional scope for the variables.\n    fc_conv_padding: the type of padding to use for the fully connected layer\n      that is implemented as a convolutional layer. Use 'SAME' padding if you\n      are applying the network in a fully convolutional manner and want to\n      get a prediction map downsampled by a factor of 32 as an output.\n      Otherwise, the output prediction map will be (input / 32) - 6 in case of\n      'VALID' padding.\n    global_pool: Optional boolean flag. If True, the input to the classification\n      layer is avgpooled to size 1x1, for any input size. (This is not part\n      of the original VGG architecture.)\n\n  Returns:\n    net: the output of the logits layer (if num_classes is a non-zero integer),\n      or the input to the logits layer (if num_classes is 0 or None).\n    end_points: a dict of tensors with intermediate activations.\n  \"\"\"\n  with tf.variable_scope(scope, 'vgg_a', [inputs]) as sc:\n    end_points_collection = sc.original_name_scope + '_end_points'\n    # Collect outputs for conv2d, fully_connected and max_pool2d.\n    with slim.arg_scope([slim.conv2d, slim.max_pool2d],\n                        outputs_collections=end_points_collection):\n      net = slim.repeat(inputs, 1, slim.conv2d, 64, [3, 3], scope='conv1')\n      net = slim.max_pool2d(net, [2, 2], scope='pool1')\n      net = slim.repeat(net, 1, slim.conv2d, 128, [3, 3], scope='conv2')\n      net = slim.max_pool2d(net, [2, 2], scope='pool2')\n      net = slim.repeat(net, 2, slim.conv2d, 256, [3, 3], scope='conv3')\n      net = slim.max_pool2d(net, [2, 2], scope='pool3')\n      net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv4')\n      net = slim.max_pool2d(net, [2, 2], scope='pool4')\n      net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv5')\n      net = slim.max_pool2d(net, [2, 2], scope='pool5')\n\n      # Use conv2d instead of fully_connected layers.\n      net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6')\n      net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                         scope='dropout6')\n      net = slim.conv2d(net, 4096, [1, 1], scope='fc7')\n      # Convert end_points_collection into a end_point dict.\n      end_points = slim.utils.convert_collection_to_dict(end_points_collection)\n      if global_pool:\n        net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool')\n        end_points['global_pool'] = net\n      if num_classes:\n        net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                           scope='dropout7')\n        net = slim.conv2d(net, num_classes, [1, 1],\n                          activation_fn=None,\n                          normalizer_fn=None,\n                          scope='fc8')\n        if spatial_squeeze:\n          net = tf.squeeze(net, [1, 2], name='fc8/squeezed')\n        end_points[sc.name + '/fc8'] = net\n      return net, end_points\nvgg_a.default_image_size = 224\n\n\ndef vgg_16(inputs,\n           num_classes=1000,\n           is_training=True,\n           dropout_keep_prob=0.5,\n           spatial_squeeze=True,\n           scope='vgg_16',\n           fc_conv_padding='VALID',\n           global_pool=False):\n  \"\"\"Oxford Net VGG 16-Layers version D Example.\n\n  Note: All the fully_connected layers have been transformed to conv2d layers.\n        To use in classification mode, resize input to 224x224.\n\n  Args:\n    inputs: a tensor of size [batch_size, height, width, channels].\n    num_classes: number of predicted classes. If 0 or None, the logits layer is\n      omitted and the input features to the logits layer are returned instead.\n    is_training: whether or not the model is being trained.\n    dropout_keep_prob: the probability that activations are kept in the dropout\n      layers during training.\n    spatial_squeeze: whether or not should squeeze the spatial dimensions of the\n      outputs. Useful to remove unnecessary dimensions for classification.\n    scope: Optional scope for the variables.\n    fc_conv_padding: the type of padding to use for the fully connected layer\n      that is implemented as a convolutional layer. Use 'SAME' padding if you\n      are applying the network in a fully convolutional manner and want to\n      get a prediction map downsampled by a factor of 32 as an output.\n      Otherwise, the output prediction map will be (input / 32) - 6 in case of\n      'VALID' padding.\n    global_pool: Optional boolean flag. If True, the input to the classification\n      layer is avgpooled to size 1x1, for any input size. (This is not part\n      of the original VGG architecture.)\n\n  Returns:\n    net: the output of the logits layer (if num_classes is a non-zero integer),\n      or the input to the logits layer (if num_classes is 0 or None).\n    end_points: a dict of tensors with intermediate activations.\n  \"\"\"\n  with tf.variable_scope(scope, 'vgg_16', [inputs]) as sc:\n    end_points_collection = sc.original_name_scope + '_end_points'\n    # Collect outputs for conv2d, fully_connected and max_pool2d.\n    with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d],\n                        outputs_collections=end_points_collection):\n      net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')\n      net = slim.max_pool2d(net, [2, 2], scope='pool1')\n      net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')\n      net = slim.max_pool2d(net, [2, 2], scope='pool2')\n      net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')\n      net = slim.max_pool2d(net, [2, 2], scope='pool3')\n      net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4')\n      net = slim.max_pool2d(net, [2, 2], scope='pool4')\n      net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5')\n      net = slim.max_pool2d(net, [2, 2], scope='pool5')\n\n      # Use conv2d instead of fully_connected layers.\n      net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6')\n      net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                         scope='dropout6')\n      net = slim.conv2d(net, 4096, [1, 1], scope='fc7')\n      # Convert end_points_collection into a end_point dict.\n      end_points = slim.utils.convert_collection_to_dict(end_points_collection)\n      if global_pool:\n        net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool')\n        end_points['global_pool'] = net\n      if num_classes:\n        net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                           scope='dropout7')\n        net = slim.conv2d(net, num_classes, [1, 1],\n                          activation_fn=None,\n                          normalizer_fn=None,\n                          scope='fc8')\n        if spatial_squeeze:\n          net = tf.squeeze(net, [1, 2], name='fc8/squeezed')\n        end_points[sc.name + '/fc8'] = net\n      return net, end_points\nvgg_16.default_image_size = 224\n\n\ndef vgg_19(inputs,\n           num_classes=1000,\n           is_training=True,\n           dropout_keep_prob=0.5,\n           spatial_squeeze=True,\n           scope='vgg_19',\n           fc_conv_padding='VALID',\n           global_pool=False):\n  \"\"\"Oxford Net VGG 19-Layers version E Example.\n\n  Note: All the fully_connected layers have been transformed to conv2d layers.\n        To use in classification mode, resize input to 224x224.\n\n  Args:\n    inputs: a tensor of size [batch_size, height, width, channels].\n    num_classes: number of predicted classes. If 0 or None, the logits layer is\n      omitted and the input features to the logits layer are returned instead.\n    is_training: whether or not the model is being trained.\n    dropout_keep_prob: the probability that activations are kept in the dropout\n      layers during training.\n    spatial_squeeze: whether or not should squeeze the spatial dimensions of the\n      outputs. Useful to remove unnecessary dimensions for classification.\n    scope: Optional scope for the variables.\n    fc_conv_padding: the type of padding to use for the fully connected layer\n      that is implemented as a convolutional layer. Use 'SAME' padding if you\n      are applying the network in a fully convolutional manner and want to\n      get a prediction map downsampled by a factor of 32 as an output.\n      Otherwise, the output prediction map will be (input / 32) - 6 in case of\n      'VALID' padding.\n    global_pool: Optional boolean flag. If True, the input to the classification\n      layer is avgpooled to size 1x1, for any input size. (This is not part\n      of the original VGG architecture.)\n\n  Returns:\n    net: the output of the logits layer (if num_classes is a non-zero integer),\n      or the non-dropped-out input to the logits layer (if num_classes is 0 or\n      None).\n    end_points: a dict of tensors with intermediate activations.\n  \"\"\"\n  with tf.variable_scope(scope, 'vgg_19', [inputs]) as sc:\n    end_points_collection = sc.original_name_scope + '_end_points'\n    # Collect outputs for conv2d, fully_connected and max_pool2d.\n    with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d],\n                        outputs_collections=end_points_collection):\n      net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')\n      net = slim.max_pool2d(net, [2, 2], scope='pool1')\n      net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')\n      net = slim.max_pool2d(net, [2, 2], scope='pool2')\n      net = slim.repeat(net, 4, slim.conv2d, 256, [3, 3], scope='conv3')\n      net = slim.max_pool2d(net, [2, 2], scope='pool3')\n      net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv4')\n      net = slim.max_pool2d(net, [2, 2], scope='pool4')\n      net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv5')\n      net = slim.max_pool2d(net, [2, 2], scope='pool5')\n\n      # Use conv2d instead of fully_connected layers.\n      net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6')\n      net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                         scope='dropout6')\n      net = slim.conv2d(net, 4096, [1, 1], scope='fc7')\n      # Convert end_points_collection into a end_point dict.\n      end_points = slim.utils.convert_collection_to_dict(end_points_collection)\n      if global_pool:\n        net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool')\n        end_points['global_pool'] = net\n      if num_classes:\n        net = slim.dropout(net, dropout_keep_prob, is_training=is_training,\n                           scope='dropout7')\n        net = slim.conv2d(net, num_classes, [1, 1],\n                          activation_fn=None,\n                          normalizer_fn=None,\n                          scope='fc8')\n        if spatial_squeeze:\n          net = tf.squeeze(net, [1, 2], name='fc8/squeezed')\n        end_points[sc.name + '/fc8'] = net\n      return net, end_points\nvgg_19.default_image_size = 224\n\n# Alias\nvgg_d = vgg_16\nvgg_e = vgg_19\n"
  },
  {
    "path": "models/deformnet.py",
    "content": "import tensorflow as tf\nimport tf_util\n\ndef get_sdf_3dcnn(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):\n\n    globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])\n    print('globalfeats_expand', globalfeats_expand.get_shape())\n    net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],\n                                    bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv1') # 2\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv2') # 4\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv3')  # 8\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv4')  # 16\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv5')  # 32\n\n    net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65\n\n    net2 = tf_util.conv3d(net2, 1, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,\n                                is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7')\n    res_plus = FLAGS.sdf_res+1\n    full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))\n\n    print(\"3d cnn net2 shape:\", full_inter.get_shape())\n\n    pred = tf.reshape(full_inter, [batch_size, -1, 1])\n    return pred\n\ndef get_sdf_3dcnn_binary(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):\n    globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])\n    print('globalfeats_expand', globalfeats_expand.get_shape())\n    net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],\n                                    bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv1') # 2\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv2') # 4\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv3')  # 8\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv4')  # 16\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv5')  # 32\n\n    net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65\n\n    net2 = tf_util.conv3d(net2, 2, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,\n                                is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7_binary')\n    res_plus = FLAGS.sdf_res+1\n    full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))\n\n    print(\"3d cnn net2 shape:\", full_inter.get_shape())\n\n    pred = tf.reshape(full_inter, [batch_size, -1, 2])\n    return pred\n\ndef get_sdf_basic2(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print( 'net2', net2.shape)\n    print( 'globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\n\ndef get_sdf_basic2_binary(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print( 'net2', net2.shape)\n    print( 'globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\n#############\ndef get_sdf_partial(src_pc, partialfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    print( 'net2', net2.shape)\n    partialfeats = tf.expand_dims(partialfeats, axis=2)\n    print( 'partialfeats', partialfeats.shape)\n    concat = tf.concat(axis=3, values=[net2, partialfeats])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\ndef get_sdf_partial_binary(src_pc, partialfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    print( 'net2', net2.shape)\n    partialfeats = tf.expand_dims(partialfeats, axis=2)\n    print( 'partialfeats', partialfeats.shape)\n    concat = tf.concat(axis=3, values=[net2, partialfeats])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print('net2', net2.shape)\n    print('globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_binary(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print('net2', net2.shape)\n    print('globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_twostream(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    concat = tf.concat(axis=3, values=[net2, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_twostream_binary(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    concat = tf.concat(axis=3, values=[net2, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\n\n#\n#\n# #############\n# def get_sdf_basic3(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n#\n#     net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, weight_decay=wd, is_training=is_training, scope='fold1/conv1')\n#     net2 = tf_util.conv2d(net2, 128, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, weight_decay=wd, scope='fold1/conv2')\n#     net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, weight_decay=wd, scope='fold1/conv3')\n#\n#     globalfeats = tf_util.fully_connected(globalfeats, 256, bn=bn, is_training=is_training, scope='global_fc', weight_decay=wd, bn_decay=bn_decay)\n#     globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n#     globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n#     print( 'net2', net2.shape)\n#     print( 'globalfeats_expand', globalfeats_expand.shape)\n#     # concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n#     concat = net2 + globalfeats_expand\n#\n#     net2 = tf_util.conv2d(concat, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, weight_decay=wd, is_training=is_training, scope='fold2/conv1')\n#     net2 = tf_util.conv2d(net2, 128, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, weight_decay=wd, is_training=is_training, scope='fold2/conv2')\n#     pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n#\n#     pred = tf.reshape(pred, [batch_size, -1, 1])\n#\n#     return pred\n#\n# #############\n# def get_sdf_basic4(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n#\n#     net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, weight_decay=wd, scope='fold1/conv1')\n#     net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, weight_decay=wd, scope='fold1/conv2')\n#     net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, weight_decay=wd, scope='fold1/conv3')\n#\n#     globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n#     globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n#     print('net2', net2.shape)\n#     print('globalfeats_expand', globalfeats_expand.shape)\n#     concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n#\n#     net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n#         weight_decay=wd, scope='fold2/conv1')\n#     net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n#         weight_decay=wd, scope='fold2/conv2')\n#     pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n#\n#     pred = tf.reshape(pred, [batch_size, -1, 1])\n#\n#     return pred\n#\n# def deepsdf_decoder(net, batch_size, is_training, bn=True, bn_decay=None, scope = ''):\n#\n#     net2 = tf_util.conv2d(net, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, scope=scope+'decoder/conv1')\n#     net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, scope=scope+'decoder/conv2')\n#     net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, scope=scope+'decoder/conv3')\n#\n#     return net2\n#\n# def get_sdf_deepsdf(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay):\n#     ##TODO: Symmetry\n#\n#     # globalfeats = tf.concat([src_feats, ref_feats], axis=1)\n#\n#     globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n#     globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n#\n#     concat = tf.concat(axis=3, values=[tf.expand_dims(src_pc,2), globalfeats_expand])\n#     displacement = deepsdf_decoder(concat, batch_size, is_training, bn=bn, bn_decay=bn_decay)\n#     displacement = tf.reshape(displacement, [batch_size, -1, 512])\n#\n#     concat = tf.concat(axis=3, values=[tf.expand_dims(displacement,2), globalfeats_expand])\n#     net = deepsdf_decoder(concat, batch_size, is_training, bn=bn, bn_decay=bn_decay, scope='fold2/')\n#\n#     net = tf_util.conv2d(net, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=bn, scope='deepsdf/fc')\n#     pred = tf.nn.tanh(net)\n#     pred = tf.reshape(pred, [batch_size, -1, 1])\n#\n#     return pred#, displacement\n\n"
  },
  {
    "path": "models/model_normalization.py",
    "content": "import tensorflow as tf\nimport numpy as np\nimport os\nimport tensorflow.contrib.slim as slim\nfrom tensorflow.contrib.slim.python.slim.nets import vgg\nimport sys\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append(os.path.join(BASE_DIR))\nsys.path.append(os.path.join(BASE_DIR,'data'))\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nprint(os.path.join(BASE_DIR, 'models'))\nimport sdfnet\n\ndef placeholder_inputs(batch_size, num_points, img_size, num_sample_pc = 256, scope='', FLAGS=None):\n\n    with tf.variable_scope(scope) as sc:\n        pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_points, 3))\n        sample_pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        sample_pc_rot_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))\n        if FLAGS.alpha:\n            imgs_pl = tf.placeholder(tf.float32, shape=(batch_size, img_size[0], img_size[1], 4))\n        else:\n            imgs_pl = tf.placeholder(tf.float32, shape=(batch_size, img_size[0], img_size[1], 3))\n        sdf_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 1))\n        sdf_params_pl = tf.placeholder(tf.float32, shape=(batch_size, 6))\n        trans_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))\n    sdf = {}\n    sdf['pc'] = pc_pl\n    sdf['sample_pc'] = sample_pc_pl\n    sdf['sample_pc_rot'] = sample_pc_rot_pl\n    sdf['imgs'] = imgs_pl\n    sdf['sdf'] = sdf_pl\n    sdf['sdf_params'] = sdf_params_pl\n    sdf['trans_mat'] = trans_mat_pl\n    return sdf\n\n\ndef placeholder_features(batch_size, num_sample_pc = 256, scope=''):\n    with tf.variable_scope(scope) as sc:\n        ref_feats_embedding_cnn_pl = tf.placeholder(tf.float32, shape=(batch_size, 1, 1, 1024))\n        point_img_feat_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 1, 1472))\n    feat = {}\n    feat['ref_feats_embedding_cnn'] = ref_feats_embedding_cnn_pl\n    feat['point_img_feat'] = point_img_feat_pl\n    return feat\n\ndef get_model(ref_dict, num_point, is_training, bn=False, bn_decay=None, img_size = 224, wd=1e-5, FLAGS=None):\n\n    ref_img = ref_dict['imgs']\n    ref_pc = ref_dict['pc']\n    ref_sample_pc = ref_dict['sample_pc']\n    ref_sample_pc_rot = ref_dict['sample_pc_rot']\n    ref_sdf = ref_dict['sdf']\n    ref_trans_mat = ref_dict['trans_mat']\n\n    batch_size = ref_img.get_shape()[0].value\n\n    # endpoints\n    end_points = {}\n    end_points['ref_pc'] = ref_pc\n    end_points['ref_sdf'] = ref_sdf #* 10\n    end_points['ref_img'] = ref_img # B*H*W*3|4\n\n    # Image extract features\n    if ref_img.shape[1] != img_size or ref_img.shape[2] != img_size:\n        if FLAGS.alpha:\n            ref_img_rgb = tf.image.resize_bilinear(ref_img[:,:,:,:3], [img_size, img_size])\n            ref_img_alpha = tf.image.resize_nearest_neighbor(\n                tf.expand_dims(ref_img[:,:,:,3], axis=-1), [img_size, img_size])\n            ref_img = tf.concat([ref_img_rgb, ref_img_alpha], axis = -1)\n        else:\n            ref_img = tf.image.resize_bilinear(ref_img, [img_size, img_size])\n    end_points['resized_ref_img'] = ref_img\n    vgg.vgg_16.default_image_size = img_size\n    with slim.arg_scope([slim.conv2d], weights_regularizer=slim.l2_regularizer(wd)):\n        ref_feats_embedding, vgg_end_points = vgg.vgg_16(ref_img, num_classes=FLAGS.num_classes, is_training=False, scope='vgg_16', spatial_squeeze=False)\n        ref_feats_embedding_cnn = tf.squeeze(ref_feats_embedding, axis = [1,2])\n    end_points['img_embedding'] = ref_feats_embedding_cnn\n    point_img_feat=None\n    pred_sdf=None\n    if FLAGS.binary:\n        if FLAGS.threedcnn:\n            sample_img_points = tf.zeros((batch_size, FLAGS.num_sample_points, 2), dtype=tf.float32)\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdf3dcnn\") as scope:\n                    pred_sdf = sdfnet.get_sdf_3dcnn_binary(None, ref_feats_embedding_cnn,\n                                             is_training, batch_size, num_point, bn, bn_decay,wd=wd,FLAGS=FLAGS)\n        elif FLAGS.img_feat_onestream:\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)  # B * N * 2\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdfimgfeat\") as scope:\n                    vgg_conv1 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv1/conv1_2'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv1 = tf.contrib.resampler.resampler(vgg_conv1, sample_img_points)\n                    vgg_conv2 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv2/conv2_2'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv2 = tf.contrib.resampler.resampler(vgg_conv2, sample_img_points)\n                    vgg_conv3 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv3/conv3_3'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv3 = tf.contrib.resampler.resampler(vgg_conv3, sample_img_points)\n                    point_img_feat = tf.concat(axis=2, values=[point_vgg_conv1, point_vgg_conv2, point_vgg_conv3])\n                    point_img_feat = tf.expand_dims(point_img_feat, axis=2)\n                    pred_sdf = sdfnet.get_sdf_basic2_imgfeat_onestream_binary(ref_sample_pc_rot, ref_feats_embedding_cnn,\n                                                                      point_img_feat, is_training, batch_size, num_point,\n                                                                      bn, bn_decay, wd=wd)\n        elif FLAGS.img_feat_twostream:\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)  # B * N * 2\n            vgg_conv1 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv1/conv1_2'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv1 = tf.contrib.resampler.resampler(vgg_conv1, sample_img_points)\n            print('point_vgg_conv1', point_vgg_conv1.shape)\n            vgg_conv2 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv2/conv2_2'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv2 = tf.contrib.resampler.resampler(vgg_conv2, sample_img_points)\n            print('point_vgg_conv2', point_vgg_conv2.shape)\n            vgg_conv3 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv3/conv3_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv3 = tf.contrib.resampler.resampler(vgg_conv3, sample_img_points)\n            print('point_vgg_conv3', point_vgg_conv3.shape)\n            vgg_conv4 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv4/conv4_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv4 = tf.contrib.resampler.resampler(vgg_conv4, sample_img_points)\n            print('point_vgg_conv4', point_vgg_conv4.shape)\n            vgg_conv5 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv5/conv5_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv5 = tf.contrib.resampler.resampler(vgg_conv5, sample_img_points)\n            print('point_vgg_conv5', point_vgg_conv5.shape)\n\n            point_img_feat = tf.concat(axis=2,\n               values=[point_vgg_conv1, point_vgg_conv2, point_vgg_conv3, point_vgg_conv4,\n                       point_vgg_conv5])\n            point_img_feat = tf.expand_dims(point_img_feat, axis=2)\n            print('point_img_feat', point_img_feat.shape)\n            if not FLAGS.multi_view:\n                # Predict SDF\n                with tf.variable_scope(\"sdfprediction\") as scope:\n                    pred_sdf_value_global = sdfnet.get_sdf_basic2_binary(ref_sample_pc_rot, ref_feats_embedding_cnn,\n                                                                     is_training, batch_size, num_point, bn, bn_decay,\n                                                                     wd=wd)\n\n                with tf.variable_scope(\"sdfprediction_imgfeat\") as scope:\n                    pred_sdf_value_local = sdfnet.get_sdf_basic2_imgfeat_twostream_binary(ref_sample_pc_rot, point_img_feat,\n                                                                                      is_training, batch_size, num_point,\n                                                                                      bn, bn_decay, wd=wd)\n                pred_sdf = pred_sdf_value_global + pred_sdf_value_local\n\n        else:\n            # sample_img_points = tf.zeros((batch_size, FLAGS.num_sample_points, 2), dtype=tf.float32)\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdfprediction\") as scope:\n                    pred_sdf = sdfnet.get_sdf_basic2_binary(ref_sample_pc, ref_feats_embedding_cnn,\n                                is_training, batch_size, num_point, bn, bn_decay,wd=wd)\n    else:\n        if FLAGS.threedcnn:\n            sample_img_points = tf.zeros((batch_size, FLAGS.num_sample_points, 2), dtype=tf.float32)\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdf3dcnn\") as scope:\n                    pred_sdf = sdfnet.get_sdf_3dcnn(None, ref_feats_embedding_cnn,\n                                             is_training, batch_size, num_point, bn, bn_decay,wd=wd,FLAGS=FLAGS)\n        elif FLAGS.img_feat_onestream:\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)  # B * N * 2\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdfimgfeat\") as scope:\n                    vgg_conv1 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv1/conv1_2'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv1 = tf.contrib.resampler.resampler(vgg_conv1, sample_img_points)\n                    vgg_conv2 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv2/conv2_2'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv2 = tf.contrib.resampler.resampler(vgg_conv2, sample_img_points)\n                    vgg_conv3 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv3/conv3_3'], (FLAGS.img_h, FLAGS.img_w))\n                    point_vgg_conv3 = tf.contrib.resampler.resampler(vgg_conv3, sample_img_points)\n                    point_img_feat = tf.concat(axis=2, values=[point_vgg_conv1, point_vgg_conv2, point_vgg_conv3])\n                    print(\"point_img_feat.shape\", point_img_feat.get_shape())\n                    point_img_feat = tf.expand_dims(point_img_feat, axis=2)\n                    pred_sdf = sdfnet.get_sdf_basic2_imgfeat_onestream(ref_sample_pc_rot, ref_feats_embedding_cnn,\n                                                                      point_img_feat, is_training, batch_size, num_point,\n                                                                      bn, bn_decay, wd=wd)\n        elif FLAGS.img_feat_twostream:\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)  # B * N * 2\n            vgg_conv1 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv1/conv1_2'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv1 = tf.contrib.resampler.resampler(vgg_conv1, sample_img_points)\n            print('point_vgg_conv1', point_vgg_conv1.shape)\n            vgg_conv2 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv2/conv2_2'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv2 = tf.contrib.resampler.resampler(vgg_conv2, sample_img_points)\n            print('point_vgg_conv2', point_vgg_conv2.shape)\n            vgg_conv3 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv3/conv3_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv3 = tf.contrib.resampler.resampler(vgg_conv3, sample_img_points)\n            print('point_vgg_conv3', point_vgg_conv3.shape)\n            vgg_conv4 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv4/conv4_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv4 = tf.contrib.resampler.resampler(vgg_conv4, sample_img_points)\n            print('point_vgg_conv4', point_vgg_conv4.shape)\n            vgg_conv5 = tf.image.resize_bilinear(vgg_end_points['vgg_16/conv5/conv5_3'], (FLAGS.img_h, FLAGS.img_w))\n            point_vgg_conv5 = tf.contrib.resampler.resampler(vgg_conv5, sample_img_points)\n            print('point_vgg_conv5', point_vgg_conv5.shape)\n\n            point_img_feat = tf.concat(axis=2,\n                                       values=[point_vgg_conv1, point_vgg_conv2, point_vgg_conv3, point_vgg_conv4,\n                                               point_vgg_conv5])\n            point_img_feat = tf.expand_dims(point_img_feat, axis=2)\n            print('point_img_feat', point_img_feat.shape)\n            if not FLAGS.multi_view:\n                # Predict SDF\n                with tf.variable_scope(\"sdfprediction\") as scope:\n                    pred_sdf_value_global = sdfnet.get_sdf_basic2(ref_sample_pc_rot, ref_feats_embedding_cnn,\n                                                                     is_training, batch_size, num_point, bn, bn_decay,\n                                                                     wd=wd)\n\n                with tf.variable_scope(\"sdfprediction_imgfeat\") as scope:\n                    pred_sdf_value_local = sdfnet.get_sdf_basic2_imgfeat_twostream(ref_sample_pc_rot, point_img_feat,\n                                                                                      is_training, batch_size, num_point,\n                                                                                      bn, bn_decay, wd=wd)\n\n                pred_sdf = pred_sdf_value_global + pred_sdf_value_local\n                end_points[\"pred_sdf_value_global\"] = pred_sdf_value_global\n                end_points[\"pred_sdf_value_local\"] = pred_sdf_value_local\n        else:\n            # sample_img_points = tf.zeros((batch_size, FLAGS.num_sample_points, 2), dtype=tf.float32)\n            sample_img_points = get_img_points(ref_sample_pc, ref_trans_mat)\n            if not FLAGS.multi_view:\n                with tf.variable_scope(\"sdfprediction\") as scope:\n                    pred_sdf = sdfnet.get_sdf_basic2(ref_sample_pc, ref_feats_embedding_cnn,\n                                is_training, batch_size, num_point, bn, bn_decay,wd=wd)\n        if FLAGS.tanh:\n            pred_sdf = tf.tanh(pred_sdf)\n    end_points['pred_sdf'] = pred_sdf\n    end_points[\"sample_img_points\"] = sample_img_points\n    end_points[\"ref_feats_embedding_cnn\"] = ref_feats_embedding_cnn\n    end_points[\"point_img_feat\"] = point_img_feat\n\n    return end_points\n\ndef get_decoder(num_point, input_pls, feature_pls, bn=False, bn_decay=None,wd=None):\n    ref_feats_embedding_cnn = feature_pls[\"ref_feats_embedding_cnn\"]\n    point_img_feat = feature_pls[\"point_img_feat\"]\n    ref_sample_pc_rot = input_pls['sample_pc_rot']\n\n    with tf.variable_scope(\"sdfprediction\") as scope:\n        pred_sdf_value_global = sdfnet.get_sdf_basic2(ref_sample_pc_rot, ref_feats_embedding_cnn,\n                                                         False, 1, num_point, bn, bn_decay,\n                                                         wd=wd)\n\n    with tf.variable_scope(\"sdfprediction_imgfeat\") as scope:\n        pred_sdf_value_local = sdfnet.get_sdf_basic2_imgfeat_twostream(ref_sample_pc_rot, point_img_feat,\n                                                                          False, 1, num_point,\n                                                                          bn, bn_decay, wd=wd)\n    multi_pred_sdf = pred_sdf_value_global + pred_sdf_value_local\n    return multi_pred_sdf\n\n\ndef get_img_points(sample_pc, trans_mat_right):\n    # sample_pc B*N*3\n    size_lst = sample_pc.get_shape().as_list()\n    homo_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)\n    print(\"homo_pc.get_shape()\", homo_pc.get_shape())\n    pc_xyz = tf.matmul(homo_pc, trans_mat_right)\n    print(\"pc_xyz.get_shape()\", pc_xyz.get_shape()) # B * N * 3\n    pc_xy = tf.divide(pc_xyz[:,:,:2], tf.expand_dims(pc_xyz[:,:,2], axis = 2))\n    mintensor = tf.constant([0.0,0.0], dtype=tf.float32)\n    maxtensor = tf.constant([136.0,136.0], dtype=tf.float32)\n    return tf.minimum(maxtensor, tf.maximum(mintensor, pc_xy))\n\n\ndef get_loss(end_points, sdf_weight=10., regularization=True, mask_weight = 4.,\n             num_sample_points = 2048, FLAGS=None, batch_size=None):\n\n    pred_sdf = end_points['pred_sdf']\n    gt_sdf = end_points['ref_sdf']\n    ################\n    # Compute loss #\n    ################\n    end_points['losses'] = {}\n\n    ###########sdf\n    print ('gt_sdf', gt_sdf.shape)\n    print ('pred_sdf', pred_sdf.shape)\n    if batch_size is None:\n        batch_size = FLAGS.batch_size\n    if FLAGS.binary:\n        label_sdf = tf.reshape(tf.cast(tf.math.greater(gt_sdf, tf.constant(0.0)), dtype=tf.int32),\n                               (batch_size, num_sample_points))\n        accuracy = tf.reduce_mean(tf.cast(tf.equal(label_sdf, tf.argmax(pred_sdf, axis=2, output_type=tf.int32)), dtype=tf.float32))\n        end_points['losses']['accuracy'] = accuracy\n        sdf_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=label_sdf, logits=pred_sdf)\n        sdf_loss = tf.reduce_mean(sdf_loss) * 100\n        end_points['losses']['sdf_loss'] = sdf_loss\n    else:\n        ############### accuracy\n        zero = tf.constant(0, dtype=tf.float32)\n        gt_sign = tf.greater(gt_sdf,zero)\n        pred_sign = tf.greater(pred_sdf,zero)\n\n        accuracy = tf.reduce_mean(tf.cast(tf.equal(gt_sign, pred_sign), dtype=tf.float32))\n        end_points['losses']['accuracy'] = accuracy\n        weight_mask = tf.to_float(tf.less_equal(gt_sdf, tf.constant(0.01))) * mask_weight \\\n                      + tf.to_float(tf.greater(gt_sdf, tf.constant(0.01)))\n        end_points['weighed_mask'] = weight_mask\n        sdf_loss = tf.reduce_mean(tf.abs(gt_sdf * sdf_weight - pred_sdf) * weight_mask)\n        end_points['losses']['sdf_loss_realvalue'] = tf.reduce_mean(tf.abs(gt_sdf - pred_sdf / sdf_weight))\n        sdf_loss = sdf_loss * 1000\n    end_points['losses']['sdf_loss'] = sdf_loss\n    loss = sdf_loss\n    ############### weight decay\n    if regularization:\n        vgg_regularization_loss = tf.add_n(slim.losses.get_regularization_losses())\n        decoder_regularization_loss = tf.add_n(tf.get_collection('regularizer'))\n        end_points['losses']['regularization'] = (vgg_regularization_loss + decoder_regularization_loss)\n        loss += (vgg_regularization_loss + decoder_regularization_loss)\n    end_points['losses']['overall_loss'] = loss\n    return loss, end_points\n"
  },
  {
    "path": "models/posenet.py",
    "content": "import tensorflow as tf\nimport os\nimport sys\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nROOT_DIR = os.path.dirname(BASE_DIR)\nsys.path.append(os.path.join(ROOT_DIR))\nsys.path.append(os.path.join(ROOT_DIR,'..'))\nsys.path.append(os.path.join(ROOT_DIR, 'models'))\nsys.path.append(os.path.join(ROOT_DIR, 'utils'))\nimport tf_util\nimport numpy as np\n\n\n\ndef get_fixed(batch_size):\n    CAM_MAX_DIST = tf.constant(1.75)\n\n    # CAM_ROT = tf.constant(np.asarray([[1.910685676922942e-15, 4.371138828673793e-08, 1.0],\n    #                                   [1.0, -4.371138828673793e-08, -0.0],\n    #                                   [4.371138828673793e-08, 1.0, -4.371138828673793e-08]], dtype=np.float32))\n    CAM_ROT = tf.constant(np.asarray([[0.0, 0.0, 1.0],\n                                      [1.0, 0.0, 0.0],\n                                      [0.0, 1.0, 0.0]], dtype=np.float32))\n    R_camfix = tf.constant(np.matrix(((1., 0., 0.), (0., -1., 0.), (0., 0., -1.)), dtype=np.float32))\n    return tf.tile(tf.reshape(CAM_MAX_DIST, [1,1,1]), [batch_size,1,1]), \\\n           tf.tile(tf.expand_dims(CAM_ROT, 0), [batch_size, 1, 1]), \\\n           tf.tile(tf.expand_dims(R_camfix, 0), [batch_size, 1, 1]),\n\n\n# batch*n\ndef normalize_vector(v):\n    batch=v.shape[0]\n\n    v_mag = tf.sqrt(tf.reduce_sum(tf.square(v), axis=1, keepdims=True))\n    v_mag = tf.maximum(v_mag, 1e-8)\n    v = v / v_mag\n    return v\n       \n######################\ndef compute_rotation_matrix_from_ortho6d(poses):\n    x_raw = poses[:,0:3]#batch*3\n    y_raw = poses[:,3:6]#batch*3\n    x = normalize_vector(x_raw) #batch*3\n    z = tf.linalg.cross(x,y_raw) #batch*3\n    z = normalize_vector(z)#batch*3\n    y = tf.linalg.cross(z,x) #batch*3\n    print('x', x.shape, 'y', y.shape, 'z', z.shape)\n    x = tf.reshape(x, [-1, 3, 1])\n    y = tf.reshape(y, [-1, 3, 1])\n    z = tf.reshape(z, [-1, 3, 1])\n    matrix = tf.concat((x,y,z), 2) #batch*3*3\n    print('matrix', matrix.shape)\n\n    return matrix\n\ndef compute_geodesic_distance_from_two_matrices(m1, m2):\n    batch=m1.shape[0]\n    m = tf.matmul(m1, tf.transpose(m2, [0,2,1])) #batch*3*3\n    cos = (m[:,0,0] + m[:,1,1] + m[:,2,2] - 1) / 2.\n    cos = tf.minimum(cos, 1.)\n    cos = tf.maximum(cos, -1.)\n\n    theta = tf.acos(cos)\n\n    return theta\n\ndef matrixize(xyz, batch_size):\n    padding = tf.eye(3, num_columns=4, batch_shape=[batch_size])\n    xyz1 = tf.expand_dims(tf.concat((xyz, tf.ones([batch_size, 1])), axis = 1), axis=1)\n    return tf.concat((padding,xyz1), axis=1)\n\n#############\ndef get_cam_mat_spaceshft(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n\n    with tf.variable_scope(\"distratio\") as scope:   #\n        distratio = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 1, bn=False, is_training=is_training, scope='fc3', bn_decay=bn_decay)\n        distratio = tf.sigmoid(distratio) * 0.5 + 0.6\n        distance_ratio = tf.reshape(distratio, [batch_size, 1, 1])\n\n    with tf.variable_scope(\"ortho6d\") as scope:   #\n        rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 6, bn=False, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n        pred_rotation = tf.reshape(rotation, [batch_size, 6])\n\n    with tf.variable_scope(\"xyzshift\") as scope:\n        predxyzshift = tf_util.fully_connected(globalfeat, 256, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        predxyzshift = tf_util.fully_connected(predxyzshift, 128, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        predxyzshift = tf_util.fully_connected(predxyzshift, 3, bn=False, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n        predxyzshift = tf.tanh(predxyzshift) * 0.2\n    CAM_MAX_DIST, R_obj2cam_inv, R_camfix = get_fixed(batch_size)\n\n    cam_location_inv = tf.concat([distance_ratio * CAM_MAX_DIST, tf.zeros([batch_size, 1, 2])], axis=2)\n\n    R_camfix_inv = tf.transpose(R_camfix, perm=(0, 2, 1))\n\n    pred_translation_inv = cam_location_inv @ R_obj2cam_inv @ R_camfix_inv * -1.0\n\n    pred_rotation_mat_inv = compute_rotation_matrix_from_ortho6d(pred_rotation)\n    pred_RT_inv = tf.concat([pred_rotation_mat_inv, pred_translation_inv], axis=1)\n    return pred_rotation_mat_inv, pred_translation_inv, pred_RT_inv, matrixize(predxyzshift, batch_size)\n\n\ndef get_cam_mat_shift(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n\n    with tf.variable_scope(\"distratio\") as scope:   #\n        distratio = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 1, bn=False, is_training=is_training, scope='fc3', bn_decay=bn_decay)\n        distratio = tf.sigmoid(distratio) * 0.4 + 0.6\n        distance_ratio = tf.reshape(distratio, [batch_size, 1, 1])\n\n    with tf.variable_scope(\"ortho6d\") as scope:   #\n        rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 6, bn=False, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n        pred_rotation = tf.reshape(rotation, [batch_size, 6])\n\n\n    with tf.variable_scope(\"xyshift\") as scope:\n        pred_xyshift = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        pred_xyshift = tf_util.fully_connected(pred_xyshift, 64, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        pred_xyshift = tf_util.fully_connected(pred_xyshift, 2, bn=False, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n\n    CAM_MAX_DIST, R_obj2cam_inv, R_camfix = get_fixed(batch_size)\n\n    cam_location_inv = tf.concat([distance_ratio * CAM_MAX_DIST, tf.zeros([batch_size, 1, 2])], axis = 2)\n\n    R_camfix_inv = tf.transpose(R_camfix, perm=(0, 2, 1))\n\n    pred_translation_inv = cam_location_inv @ R_obj2cam_inv @ R_camfix_inv * -1.0\n\n    pred_rotation_mat_inv = compute_rotation_matrix_from_ortho6d(pred_rotation)\n    pred_RT_inv = tf.concat([pred_rotation_mat_inv, pred_translation_inv], axis = 1)\n    return pred_rotation_mat_inv, pred_translation_inv, pred_RT_inv, pred_xyshift\n\n\n############# original get_cam_mat\n# def get_cam_mat(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n#\n#     with tf.variable_scope(\"scale\") as scope:   #\n#         scale = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n#         scale = tf_util.fully_connected(scale, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n#         scale = tf_util.fully_connected(scale, 1, bn=bn, is_training=is_training, scope='fc3', bn_decay=bn_decay)\n#         pred_scale = tf.reshape(scale, [batch_size, 1, 1]) * tf.tile(tf.expand_dims(tf.eye(3), 0), [batch_size, 1, 1])\n#\n#     with tf.variable_scope(\"ortho6d\") as scope:   #\n#         rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n#         rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n#         rotation = tf_util.fully_connected(rotation, 6, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n#         pred_rotation = tf.reshape(rotation, [batch_size, 6])\n#\n#     with tf.variable_scope(\"translation\") as scope:\n#         translation = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n#         translation = tf_util.fully_connected(translation, 64, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n#         # w_trans_init =\n#         weights = tf.get_variable('fc3/weights', [64, 3],\n#                                   initializer=tf.truncated_normal_initializer(stddev=0.05, seed=1),\n#                                   dtype=tf.float32)\n#         biases = tf.get_variable('fc3/biases', [3],\n#                                  initializer=tf.constant_initializer(0.0),\n#                                  dtype=tf.float32)\n#         translation = tf.matmul(translation, weights)\n#         translation = tf.nn.bias_add(translation, biases)\n#         pred_translation = tf.reshape(translation, [batch_size, 3])\n#         pred_translation += tf.constant([-0.00193892, 0.00169222, 1.3949631], dtype=tf.float32)\n#\n#     pred_translation = tf.reshape(pred_translation, [batch_size, 1, 3])\n#     pred_rotation_mat = compute_rotation_matrix_from_ortho6d(pred_rotation)\n#     pred_rotation_mat = tf.matmul(pred_scale, pred_rotation_mat)\n#     pred_RT = tf.concat([pred_rotation_mat, pred_translation], axis = 1)\n#     return pred_rotation_mat, pred_translation, pred_RT\n#\ndef get_cam_mat(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n\n    with tf.variable_scope(\"distratio\") as scope:   #\n        distratio = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        distratio = tf_util.fully_connected(distratio, 1, bn=False, is_training=is_training, scope='fc3', bn_decay=bn_decay)\n        distratio = tf.sigmoid(distratio) * 0.4 + 0.6\n        distance_ratio = tf.reshape(distratio, [batch_size, 1, 1])\n\n    with tf.variable_scope(\"ortho6d\") as scope:   #\n        rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 6, bn=False, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)\n        pred_rotation = tf.reshape(rotation, [batch_size, 6])\n\n    CAM_MAX_DIST, R_obj2cam_inv, R_camfix = get_fixed(batch_size)\n\n    cam_location_inv = tf.concat([distance_ratio * CAM_MAX_DIST, tf.zeros([batch_size, 1, 2])], axis = 2)\n\n    R_camfix_inv = tf.transpose(R_camfix, perm=(0, 2, 1))\n\n    pred_translation_inv = cam_location_inv @ R_obj2cam_inv @ R_camfix_inv * -1.0\n\n    pred_rotation_mat_inv = compute_rotation_matrix_from_ortho6d(pred_rotation)\n    pred_RT_inv = tf.concat([pred_rotation_mat_inv, pred_translation_inv], axis = 1)\n    return pred_rotation_mat_inv, pred_translation_inv, pred_RT_inv"
  },
  {
    "path": "models/posenet_old.py",
    "content": "import tensorflow as tf\nimport os\nimport sys\n\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nROOT_DIR = os.path.dirname(BASE_DIR)\nsys.path.append(os.path.join(ROOT_DIR))\nsys.path.append(os.path.join(ROOT_DIR, '..'))\nsys.path.append(os.path.join(ROOT_DIR, 'models'))\nsys.path.append(os.path.join(ROOT_DIR, 'utils'))\nimport tf_util\n\n\n# batch*n\ndef normalize_vector(v):\n    batch = v.shape[0]\n\n    v_mag = tf.sqrt(tf.reduce_sum(tf.square(v), axis=1, keepdims=True))\n    v_mag = tf.maximum(v_mag, 1e-8)\n    v = v / v_mag\n    return v\n\n\n######################\ndef compute_rotation_matrix_from_ortho6d(poses):\n    x_raw = poses[:, 0:3]  # batch*3\n    y_raw = poses[:, 3:6]  # batch*3\n    x = normalize_vector(x_raw)  # batch*3\n    z = tf.linalg.cross(x, y_raw)  # batch*3\n    z = normalize_vector(z)  # batch*3\n    y = tf.linalg.cross(z, x)  # batch*3\n    print('x', x.shape, 'y', y.shape, 'z', z.shape)\n    x = tf.reshape(x, [-1, 3, 1])\n    y = tf.reshape(y, [-1, 3, 1])\n    z = tf.reshape(z, [-1, 3, 1])\n    matrix = tf.concat((x, y, z), 2)  # batch*3*3\n    print('matrix', matrix.shape)\n\n    return matrix\n\n\ndef compute_geodesic_distance_from_two_matrices(m1, m2):\n    batch = m1.shape[0]\n    m = tf.matmul(m1, tf.transpose(m2, [0, 2, 1]))  # batch*3*3\n    cos = (m[:, 0, 0] + m[:, 1, 1] + m[:, 2, 2] - 1) / 2.\n    cos = tf.minimum(cos, 1.)\n    cos = tf.maximum(cos, -1.)\n\n    theta = tf.acos(cos)\n\n    return theta\n\n\n#############\ndef get_cam_mat_shift(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n    with tf.variable_scope(\"scale\") as scope:  #\n        scale = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        scale = tf_util.fully_connected(scale, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        scale = tf_util.fully_connected(scale, 1, bn=bn, is_training=is_training, scope='fc3', activation_fn=None,\n                                        bn_decay=bn_decay)\n        pred_scale = tf.reshape(scale, [batch_size, 1, 1]) * tf.tile(tf.expand_dims(tf.eye(3), 0), [batch_size, 1, 1])\n\n    with tf.variable_scope(\"ortho6d\") as scope:  #\n        rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1',\n                                           bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2',\n                                           bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 6, bn=bn, is_training=is_training, scope='fc3', activation_fn=None,\n                                           bn_decay=bn_decay)\n        pred_rotation = tf.reshape(rotation, [batch_size, 6])\n\n    with tf.variable_scope(\"translation\") as scope:\n        translation = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1',\n                                              bn_decay=bn_decay)\n        translation = tf_util.fully_connected(translation, 64, bn=bn, is_training=is_training, scope='fc2',\n                                              bn_decay=bn_decay)\n        # w_trans_init =\n        weights = tf.get_variable('fc3/weights', [64, 3],\n                                  initializer=tf.truncated_normal_initializer(stddev=0.05, seed=1),\n                                  dtype=tf.float32)\n        biases = tf.get_variable('fc3/biases', [3],\n                                 initializer=tf.constant_initializer(0.0),\n                                 dtype=tf.float32)\n        translation = tf.matmul(translation, weights)\n        translation = tf.nn.bias_add(translation, biases)\n        pred_translation = tf.reshape(translation, [batch_size, 3])\n        pred_translation += tf.constant([-0.00193892, 0.00169222, 1.3949631], dtype=tf.float32)\n\n    with tf.variable_scope(\"xyshift\") as scope:\n        pred_xyshift = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1',\n                                               bn_decay=bn_decay)\n        pred_xyshift = tf_util.fully_connected(pred_xyshift, 64, bn=bn, is_training=is_training, scope='fc2',\n                                               bn_decay=bn_decay)\n        pred_xyshift = tf_util.fully_connected(pred_xyshift, 2, bn=bn, is_training=is_training, scope='fc3',\n                                               activation_fn=None, bn_decay=bn_decay)\n    pred_translation = tf.reshape(pred_translation, [batch_size, 1, 3])\n    pred_rotation_mat = compute_rotation_matrix_from_ortho6d(pred_rotation)\n    pred_rotation_mat = tf.matmul(pred_scale, pred_rotation_mat)\n    pred_RT = tf.concat([pred_rotation_mat, pred_translation], axis=1)\n    return pred_rotation_mat, pred_translation, pred_RT, pred_xyshift\n\n\n#############\ndef get_cam_mat(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):\n    with tf.variable_scope(\"scale\") as scope:  #\n        scale = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)\n        scale = tf_util.fully_connected(scale, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)\n        scale = tf_util.fully_connected(scale, 1, bn=bn, is_training=is_training, scope='fc3', activation_fn=None,\n                                        bn_decay=bn_decay)\n        pred_scale = tf.reshape(scale, [batch_size, 1, 1]) * tf.tile(tf.expand_dims(tf.eye(3), 0), [batch_size, 1, 1])\n\n    with tf.variable_scope(\"ortho6d\") as scope:  #\n        rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1',\n                                           bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2',\n                                           bn_decay=bn_decay)\n        rotation = tf_util.fully_connected(rotation, 6, bn=bn, is_training=is_training, scope='fc3', activation_fn=None,\n                                           bn_decay=bn_decay)\n        pred_rotation = tf.reshape(rotation, [batch_size, 6])\n\n    with tf.variable_scope(\"translation\") as scope:\n        translation = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1',\n                                              bn_decay=bn_decay)\n        translation = tf_util.fully_connected(translation, 64, bn=bn, is_training=is_training, scope='fc2',\n                                              bn_decay=bn_decay)\n        # w_trans_init =\n        weights = tf.get_variable('fc3/weights', [64, 3],\n                                  initializer=tf.truncated_normal_initializer(stddev=0.05, seed=1),\n                                  dtype=tf.float32)\n        biases = tf.get_variable('fc3/biases', [3],\n                                 initializer=tf.constant_initializer(0.0),\n                                 dtype=tf.float32)\n        translation = tf.matmul(translation, weights)\n        translation = tf.nn.bias_add(translation, biases)\n        pred_translation = tf.reshape(translation, [batch_size, 3])\n        pred_translation += tf.constant([-0.00193892, 0.00169222, 1.3949631], dtype=tf.float32)\n\n    pred_translation = tf.reshape(pred_translation, [batch_size, 1, 3])\n    pred_rotation_mat = compute_rotation_matrix_from_ortho6d(pred_rotation)\n    pred_rotation_mat = tf.matmul(pred_scale, pred_rotation_mat)\n    pred_RT = tf.concat([pred_rotation_mat, pred_translation], axis=1)\n    return pred_rotation_mat, pred_translation, pred_RT"
  },
  {
    "path": "models/sdfnet.py",
    "content": "import tensorflow as tf\nimport tf_util\n\ndef get_sdf_3dcnn(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):\n\n    globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])\n    print('globalfeats_expand', globalfeats_expand.get_shape())\n    net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],\n                                    bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv1') # 2\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv2') # 4\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv3')  # 8\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv4')  # 16\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv5')  # 32\n\n    net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65\n\n    net2 = tf_util.conv3d(net2, 1, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,\n                                is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7')\n    res_plus = FLAGS.sdf_res+1\n    full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))\n\n    print(\"3d cnn net2 shape:\", full_inter.get_shape())\n\n    pred = tf.reshape(full_inter, [batch_size, -1, 1])\n    return pred\n\ndef get_sdf_3dcnn_binary(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):\n    globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])\n    print('globalfeats_expand', globalfeats_expand.get_shape())\n    net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],\n                                    bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv1') # 2\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv2') # 4\n\n    net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv3')  # 8\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv4')  # 16\n\n    net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, scope='3deconv5')  # 32\n\n    net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,\n                                    is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65\n\n    net2 = tf_util.conv3d(net2, 2, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,\n                                is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7_binary')\n    res_plus = FLAGS.sdf_res+1\n    full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))\n\n    print(\"3d cnn net2 shape:\", full_inter.get_shape())\n\n    pred = tf.reshape(full_inter, [batch_size, -1, 2])\n    return pred\n\ndef get_sdf_basic2(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print( 'net2', net2.shape)\n    print( 'globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training, \n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\n\ndef get_sdf_basic2_binary(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print( 'net2', net2.shape)\n    print( 'globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\n\ndef get_sdf_basic2_imgfeat_onestream(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print('net2', net2.shape)\n    print('globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_onestream_binary(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])\n    globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])\n    print('net2', net2.shape)\n    print('globalfeats_expand', globalfeats_expand.shape)\n    concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_twostream(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    concat = tf.concat(axis=3, values=[net2, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')\n\n    pred = tf.reshape(pred, [batch_size, -1, 1])\n\n    return pred\n\ndef get_sdf_basic2_imgfeat_twostream_binary(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):\n\n    net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n                            weight_decay=wd, scope='fold1/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv2')\n    net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold1/conv3')\n\n    concat = tf.concat(axis=3, values=[net2, point_feat])\n\n    net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv1')\n    net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,\n        weight_decay=wd, scope='fold2/conv2')\n    pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')\n\n    pred = tf.reshape(pred, [batch_size, -1, 2])\n\n    return pred\n"
  },
  {
    "path": "models/tf_ops/approxmatch/__init__.py",
    "content": ""
  },
  {
    "path": "models/tf_ops/approxmatch/tf_approxmatch.cpp",
    "content": "#include \"tensorflow/core/framework/op.h\"\n#include \"tensorflow/core/framework/op_kernel.h\"\n#include <algorithm>\n#include <vector>\n#include <math.h>\nusing namespace tensorflow;\nREGISTER_OP(\"ApproxMatch\")\n\t.Input(\"xyz1: float32\")\n\t.Input(\"xyz2: float32\")\n\t.Output(\"match: float32\");\nREGISTER_OP(\"MatchCost\")\n\t.Input(\"xyz1: float32\")\n\t.Input(\"xyz2: float32\")\n\t.Input(\"match: float32\")\n\t.Output(\"cost: float32\");\nREGISTER_OP(\"MatchCostGrad\")\n\t.Input(\"xyz1: float32\")\n\t.Input(\"xyz2: float32\")\n\t.Input(\"match: float32\")\n\t.Output(\"grad1: float32\")\n\t.Output(\"grad2: float32\");\n\nvoid approxmatch_cpu(int b,int n,int m,const float * xyz1,const float * xyz2,float * match){\n\tfor (int i=0;i<b;i++){\n\t\tint factorl=std::max(n,m)/n;\n\t\tint factorr=std::max(n,m)/m;\n\t\tstd::vector<double> saturatedl(n,double(factorl)),saturatedr(m,double(factorr));\n\t\tstd::vector<double> weight(n*m);\n\t\tfor (int j=0;j<n*m;j++)\n\t\t\tmatch[j]=0;\n\t\tfor (int j=8;j>=-2;j--){\n\t\t\t//printf(\"i=%d j=%d\\n\",i,j);\n\t\t\tdouble level=-powf(4.0,j);\n\t\t\tif (j==-2)\n\t\t\t\tlevel=0;\n\t\t\tfor (int k=0;k<n;k++){\n\t\t\t\tdouble x1=xyz1[k*3+0];\n\t\t\t\tdouble y1=xyz1[k*3+1];\n\t\t\t\tdouble z1=xyz1[k*3+2];\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\tdouble x2=xyz2[l*3+0];\n\t\t\t\t\tdouble y2=xyz2[l*3+1];\n\t\t\t\t\tdouble z2=xyz2[l*3+2];\n\t\t\t\t\tweight[k*m+l]=expf(level*((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2)))*saturatedr[l];\n\t\t\t\t}\n\t\t\t}\n\t\t\tstd::vector<double> ss(m,1e-9);\n\t\t\tfor (int k=0;k<n;k++){\n\t\t\t\tdouble s=1e-9;\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\ts+=weight[k*m+l];\n\t\t\t\t}\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\tweight[k*m+l]=weight[k*m+l]/s*saturatedl[k];\n\t\t\t\t}\n\t\t\t\tfor (int l=0;l<m;l++)\n\t\t\t\t\tss[l]+=weight[k*m+l];\n\t\t\t}\n\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\tdouble s=ss[l];\n\t\t\t\tdouble r=std::min(saturatedr[l]/s,1.0);\n\t\t\t\tss[l]=r;\n\t\t\t}\n\t\t\tstd::vector<double> ss2(m,0);\n\t\t\tfor (int k=0;k<n;k++){\n\t\t\t\tdouble s=0;\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\tweight[k*m+l]*=ss[l];\n\t\t\t\t\ts+=weight[k*m+l];\n\t\t\t\t\tss2[l]+=weight[k*m+l];\n\t\t\t\t}\n\t\t\t\tsaturatedl[k]=std::max(saturatedl[k]-s,0.0);\n\t\t\t}\n\t\t\tfor (int k=0;k<n*m;k++)\n\t\t\t\tmatch[k]+=weight[k];\n\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\tsaturatedr[l]=std::max(saturatedr[l]-ss2[l],0.0);\n\t\t\t}\n\t\t}\n\t\txyz1+=n*3;\n\t\txyz2+=m*3;\n\t\tmatch+=n*m;\n\t}\n}\nvoid matchcost_cpu(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * cost){\n\tfor (int i=0;i<b;i++){\n\t\tdouble s=0;\n\t\tfor (int j=0;j<n;j++)\n\t\t\tfor (int k=0;k<m;k++){\n\t\t\t\tfloat x1=xyz1[j*3+0];\n\t\t\t\tfloat y1=xyz1[j*3+1];\n\t\t\t\tfloat z1=xyz1[j*3+2];\n\t\t\t\tfloat x2=xyz2[k*3+0];\n\t\t\t\tfloat y2=xyz2[k*3+1];\n\t\t\t\tfloat z2=xyz2[k*3+2];\n\t\t\t\tfloat d=sqrtf((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1))*match[j*m+k];\n\t\t\t\ts+=d;\n\t\t\t}\n\t\tcost[0]=s;\n\t\txyz1+=n*3;\n\t\txyz2+=m*3;\n\t\tmatch+=n*m;\n\t\tcost+=1;\n\t}\n}\nvoid matchcostgrad_cpu(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * grad1,float * grad2){\n\tfor (int i=0;i<b;i++){\n\t\tfor (int j=0;j<n;j++)\n\t\t\tgrad1[j*3+0]=0;\n\t\tfor (int j=0;j<m;j++){\n\t\t\tfloat sx=0,sy=0,sz=0;\n\t\t\tfor (int k=0;k<n;k++){\n\t\t\t\tfloat x2=xyz2[j*3+0];\n\t\t\t\tfloat y2=xyz2[j*3+1];\n\t\t\t\tfloat z2=xyz2[j*3+2];\n\t\t\t\tfloat x1=xyz1[k*3+0];\n\t\t\t\tfloat y1=xyz1[k*3+1];\n\t\t\t\tfloat z1=xyz1[k*3+2];\n\t\t\t\tfloat d=std::max(sqrtf((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)),1e-20f);\n\t\t\t\tfloat dx=match[k*m+j]*((x2-x1)/d);\n\t\t\t\tfloat dy=match[k*m+j]*((y2-y1)/d);\n\t\t\t\tfloat dz=match[k*m+j]*((z2-z1)/d);\n\t\t\t\tgrad1[k*3+0]-=dx;\n\t\t\t\tgrad1[k*3+1]-=dy;\n\t\t\t\tgrad1[k*3+2]-=dz;\n\t\t\t\tsx+=dx;\n\t\t\t\tsy+=dy;\n\t\t\t\tsz+=dz;\n\t\t\t}\n\t\t\tgrad2[j*3+0]=sx;\n\t\t\tgrad2[j*3+1]=sy;\n\t\t\tgrad2[j*3+2]=sz;\n\t\t}\n\t\txyz1+=n*3;\n\t\txyz2+=m*3;\n\t\tmatch+=n*m;\n\t\tgrad1+=n*3;\n\t\tgrad2+=m*3;\n\t}\n}\nvoid approxmatchLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,float * match,float * temp);\nvoid matchcostLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * out);\nvoid matchcostgradLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * grad1,float * grad2);\n\nclass ApproxMatchGpuOp: public OpKernel{\n\tpublic:\n\t\texplicit ApproxMatchGpuOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"ApproxMatch expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\t\t\t//OP_REQUIRES(context,n<=4096,errors::InvalidArgument(\"ApproxMatch handles at most 4096 dataset points\"));\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"ApproxMatch expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\t//OP_REQUIRES(context,m<=1024,errors::InvalidArgument(\"ApproxMatch handles at most 1024 query points\"));\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\t\t\tTensor * match_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,m,n},&match_tensor));\n\t\t\tauto match_flat=match_tensor->flat<float>();\n\t\t\tfloat * match=&(match_flat(0));\n\t\t\tTensor temp_tensor;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_temp(DataTypeToEnum<float>::value,TensorShape{b,(n+m)*2},&temp_tensor));\n\t\t\tauto temp_flat=temp_tensor.flat<float>();\n\t\t\tfloat * temp=&(temp_flat(0));\n\t\t\tapproxmatchLauncher(b,n,m,xyz1,xyz2,match,temp);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"ApproxMatch\").Device(DEVICE_GPU), ApproxMatchGpuOp);\nclass ApproxMatchOp: public OpKernel{\n\tpublic:\n\t\texplicit ApproxMatchOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"ApproxMatch expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\t\t\t//OP_REQUIRES(context,n<=4096,errors::InvalidArgument(\"ApproxMatch handles at most 4096 dataset points\"));\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"ApproxMatch expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\t//OP_REQUIRES(context,m<=1024,errors::InvalidArgument(\"ApproxMatch handles at most 1024 query points\"));\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\t\t\tTensor * match_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,m,n},&match_tensor));\n\t\t\tauto match_flat=match_tensor->flat<float>();\n\t\t\tfloat * match=&(match_flat(0));\n\t\t\tapproxmatch_cpu(b,n,m,xyz1,xyz2,match);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"ApproxMatch\").Device(DEVICE_CPU), ApproxMatchOp);\nclass MatchCostGpuOp: public OpKernel{\n\tpublic:\n\t\texplicit MatchCostGpuOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\n\t\t\tconst Tensor& match_tensor=context->input(2);\n\t\t\tOP_REQUIRES(context,match_tensor.dims()==3 && match_tensor.shape().dim_size(0)==b && match_tensor.shape().dim_size(1)==m && match_tensor.shape().dim_size(2)==n,errors::InvalidArgument(\"MatchCost expects (batch_size,#query,#dataset) match shape\"));\n\t\t\tauto match_flat=match_tensor.flat<float>();\n\t\t\tconst float * match=&(match_flat(0));\n\n\t\t\tTensor * cost_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b},&cost_tensor));\n\t\t\tauto cost_flat=cost_tensor->flat<float>();\n\t\t\tfloat * cost=&(cost_flat(0));\n\t\t\tmatchcostLauncher(b,n,m,xyz1,xyz2,match,cost);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"MatchCost\").Device(DEVICE_GPU), MatchCostGpuOp);\nclass MatchCostOp: public OpKernel{\n\tpublic:\n\t\texplicit MatchCostOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\n\t\t\tconst Tensor& match_tensor=context->input(2);\n\t\t\tOP_REQUIRES(context,match_tensor.dims()==3 && match_tensor.shape().dim_size(0)==b && match_tensor.shape().dim_size(1)==m && match_tensor.shape().dim_size(2)==n,errors::InvalidArgument(\"MatchCost expects (batch_size,#query,#dataset) match shape\"));\n\t\t\tauto match_flat=match_tensor.flat<float>();\n\t\t\tconst float * match=&(match_flat(0));\n\n\t\t\tTensor * cost_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b},&cost_tensor));\n\t\t\tauto cost_flat=cost_tensor->flat<float>();\n\t\t\tfloat * cost=&(cost_flat(0));\n\t\t\tmatchcost_cpu(b,n,m,xyz1,xyz2,match,cost);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"MatchCost\").Device(DEVICE_CPU), MatchCostOp);\n\nclass MatchCostGradGpuOp: public OpKernel{\n\tpublic:\n\t\texplicit MatchCostGradGpuOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"MatchCostGrad expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"MatchCostGrad expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\n\t\t\tconst Tensor& match_tensor=context->input(2);\n\t\t\tOP_REQUIRES(context,match_tensor.dims()==3 && match_tensor.shape().dim_size(0)==b && match_tensor.shape().dim_size(1)==m && match_tensor.shape().dim_size(2)==n,errors::InvalidArgument(\"MatchCost expects (batch_size,#query,#dataset) match shape\"));\n\t\t\tauto match_flat=match_tensor.flat<float>();\n\t\t\tconst float * match=&(match_flat(0));\n\n\t\t\tTensor * grad1_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n,3},&grad1_tensor));\n\t\t\tauto grad1_flat=grad1_tensor->flat<float>();\n\t\t\tfloat * grad1=&(grad1_flat(0));\n\t\t\tTensor * grad2_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,m,3},&grad2_tensor));\n\t\t\tauto grad2_flat=grad2_tensor->flat<float>();\n\t\t\tfloat * grad2=&(grad2_flat(0));\n\t\t\tmatchcostgradLauncher(b,n,m,xyz1,xyz2,match,grad1,grad2);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"MatchCostGrad\").Device(DEVICE_GPU), MatchCostGradGpuOp);\nclass MatchCostGradOp: public OpKernel{\n\tpublic:\n\t\texplicit MatchCostGradOp(OpKernelConstruction* context):OpKernel(context){}\n\t\tvoid Compute(OpKernelContext * context)override{\n\t\t\tconst Tensor& xyz1_tensor=context->input(0);\n\t\t\tOP_REQUIRES(context,xyz1_tensor.dims()==3 && xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz1 shape\"));\n\t\t\tauto xyz1_flat=xyz1_tensor.flat<float>();\n\t\t\tconst float * xyz1=&(xyz1_flat(0));\n\t\t\tint b=xyz1_tensor.shape().dim_size(0);\n\t\t\tint n=xyz1_tensor.shape().dim_size(1);\n\n\t\t\tconst Tensor& xyz2_tensor=context->input(1);\n\t\t\tOP_REQUIRES(context,xyz2_tensor.dims()==3 && xyz2_tensor.shape().dim_size(2)==3 && xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"MatchCost expects (batch_size,num_points,3) xyz2 shape, and batch_size must match\"));\n\t\t\tint m=xyz2_tensor.shape().dim_size(1);\n\t\t\tauto xyz2_flat=xyz2_tensor.flat<float>();\n\t\t\tconst float * xyz2=&(xyz2_flat(0));\n\n\t\t\tconst Tensor& match_tensor=context->input(2);\n\t\t\tOP_REQUIRES(context,match_tensor.dims()==3 && match_tensor.shape().dim_size(0)==b && match_tensor.shape().dim_size(1)==m && match_tensor.shape().dim_size(2)==n,errors::InvalidArgument(\"MatchCost expects (batch_size,#query,#dataset) match shape\"));\n\t\t\tauto match_flat=match_tensor.flat<float>();\n\t\t\tconst float * match=&(match_flat(0));\n\n\t\t\tTensor * grad1_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n,3},&grad1_tensor));\n\t\t\tauto grad1_flat=grad1_tensor->flat<float>();\n\t\t\tfloat * grad1=&(grad1_flat(0));\n\t\t\tTensor * grad2_tensor=NULL;\n\t\t\tOP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,m,3},&grad2_tensor));\n\t\t\tauto grad2_flat=grad2_tensor->flat<float>();\n\t\t\tfloat * grad2=&(grad2_flat(0));\n\t\t\tmatchcostgrad_cpu(b,n,m,xyz1,xyz2,match,grad1,grad2);\n\t\t}\n};\nREGISTER_KERNEL_BUILDER(Name(\"MatchCostGrad\").Device(DEVICE_CPU), MatchCostGradOp);\n"
  },
  {
    "path": "models/tf_ops/approxmatch/tf_approxmatch.py",
    "content": "\"\"\" Approxmiate algorithm for computing the Earch Mover's Distance.\n\nOriginal author: Haoqiang Fan\nModified by Charles R. Qi\n\"\"\"\n\nimport tensorflow as tf\nfrom tensorflow.python.framework import ops\nimport sys\nimport os\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\napproxmatch_module=tf.load_op_library(os.path.join(BASE_DIR, 'tf_approxmatch_so.so'))\ndef approx_match(xyz1,xyz2):\n\t'''\ninput:\n\txyz1 : batch_size * #dataset_points * 3\n\txyz2 : batch_size * #query_points * 3\nreturns:\n\tmatch : batch_size * #query_points * #dataset_points\n\t'''\n\treturn approxmatch_module.approx_match(xyz1,xyz2)\nops.NoGradient('ApproxMatch')\n#@tf.RegisterShape('ApproxMatch')\n#def _approx_match_shape(op):\n#\tshape1=op.inputs[0].get_shape().with_rank(3)\n#\tshape2=op.inputs[1].get_shape().with_rank(3)\n#\treturn [tf.TensorShape([shape1.dims[0],shape2.dims[1],shape1.dims[1]])]\n\ndef match_cost(xyz1,xyz2,match):\n\t'''\ninput:\n\txyz1 : batch_size * #dataset_points * 3\n\txyz2 : batch_size * #query_points * 3\n\tmatch : batch_size * #query_points * #dataset_points\nreturns:\n\tcost : batch_size\n\t'''\n\treturn approxmatch_module.match_cost(xyz1,xyz2,match)\n#@tf.RegisterShape('MatchCost')\n#def _match_cost_shape(op):\n#\tshape1=op.inputs[0].get_shape().with_rank(3)\n#\tshape2=op.inputs[1].get_shape().with_rank(3)\n#\tshape3=op.inputs[2].get_shape().with_rank(3)\n#\treturn [tf.TensorShape([shape1.dims[0]])]\n@tf.RegisterGradient('MatchCost')\ndef _match_cost_grad(op,grad_cost):\n\txyz1=op.inputs[0]\n\txyz2=op.inputs[1]\n\tmatch=op.inputs[2]\n\tgrad_1,grad_2=approxmatch_module.match_cost_grad(xyz1,xyz2,match)\n\treturn [grad_1*tf.expand_dims(tf.expand_dims(grad_cost,1),2),grad_2*tf.expand_dims(tf.expand_dims(grad_cost,1),2),None]\n\nif __name__=='__main__':\n\talpha=0.5\n\tbeta=2.0\n\timport numpy as np\n\timport math\n\timport random\n\timport cv2\n\n\n\tnpoint=100\n\n\tpt_in=tf.placeholder(tf.float32,shape=(1,npoint*4,3))\n\tmypoints=tf.Variable(np.random.randn(1,npoint,3).astype('float32'))\n\tmatch=approx_match(pt_in,mypoints)\n\tloss=tf.reduce_sum(match_cost(pt_in,mypoints,match))\n\t#match=approx_match(mypoints,pt_in)\n\t#loss=tf.reduce_sum(match_cost(mypoints,pt_in,match))\n\t#loss=tf.reduce_sum((distf+1e-9)**0.5)*0.5+tf.reduce_sum((distb+1e-9)**0.5)*0.5\n\t#loss=tf.reduce_max((distf+1e-9)**0.5)*0.5*npoint+tf.reduce_max((distb+1e-9)**0.5)*0.5*npoint\n\n\toptimizer=tf.train.GradientDescentOptimizer(1e-4).minimize(loss)\n\n\twith tf.Session('') as sess:\n\t\tsess.run(tf.initialize_all_variables())\n\t\twhile True:\n\t\t\tmeanloss=0\n\t\t\tmeantrueloss=0\n\t\t\tfor i in xrange(1001):\n\t\t\t\t#phi=np.random.rand(4*npoint)*math.pi*2\n\t\t\t\t#tpoints=(np.hstack([np.cos(phi)[:,None],np.sin(phi)[:,None],(phi*0)[:,None]])*random.random())[None,:,:]\n\t\t\t\t#tpoints=((np.random.rand(400)-0.5)[:,None]*[0,2,0]+[(random.random()-0.5)*2,0,0]).astype('float32')[None,:,:]\n\t\t\t\ttpoints=np.hstack([np.linspace(-1,1,400)[:,None],(random.random()*2*np.linspace(1,0,400)**2)[:,None],np.zeros((400,1))])[None,:,:]\n\t\t\t\ttrainloss,_=sess.run([loss,optimizer],feed_dict={pt_in:tpoints.astype('float32')})\n\t\t\ttrainloss,trainmatch=sess.run([loss,match],feed_dict={pt_in:tpoints.astype('float32')})\n\t\t\t#trainmatch=trainmatch.transpose((0,2,1))\n\t\t\tshow=np.zeros((400,400,3),dtype='uint8')^255\n\t\t\ttrainmypoints=sess.run(mypoints)\n\t\t\tfor i in xrange(len(tpoints[0])):\n\t\t\t\tu=np.random.choice(range(len(trainmypoints[0])),p=trainmatch[0].T[i])\n\t\t\t\t# cv2.line(show,\n\t\t\t\t# \t(int(tpoints[0][i,1]*100+200),int(tpoints[0][i,0]*100+200)),\n\t\t\t\t# \t(int(trainmypoints[0][u,1]*100+200),int(trainmypoints[0][u,0]*100+200)))\n\t\t\t# for x,y,z in tpoints[0]:\n\t\t\t# \tcv2.circle(show,(int(y*100+200),int(x*100+200)),2)\n\t\t\t# for x,y,z in trainmypoints[0]:\n\t\t\t# \tcv2.circle(show,(int(y*100+200),int(x*100+200)),3)\n\t\t\tcost=((tpoints[0][:,None,:]-np.repeat(trainmypoints[0][None,:,:],4,axis=1))**2).sum(axis=2)**0.5\n\t\t\tprint (trainloss,np.mean(cost))\n\t\t\tcv2.imshow('show',show)\n\t\t\tcmd=cv2.waitKey(10)%256\n\t\t\tif cmd==ord('q'):\n\t\t\t\tbreak\n"
  },
  {
    "path": "models/tf_ops/approxmatch/tf_approxmatch_compile.sh",
    "content": "#/bin/bash\n/usr/local/cuda/bin/nvcc tf_approxmatch_g.cu -o tf_approxmatch_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC\ng++ -std=c++11 tf_approxmatch.cpp tf_approxmatch_g.cu.o -o tf_approxmatch_so.so -shared -fPIC -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include -I /usr/local/cuda/include -I  /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /usr/local/cuda/lib64/ -L//home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 # -D_GLIBCXX_USE_CXX11_ABI=0\n"
  },
  {
    "path": "models/tf_ops/approxmatch/tf_approxmatch_g.cu",
    "content": "__global__ void approxmatch(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,float * __restrict__ match,float * temp){\n\tfloat * remainL=temp+blockIdx.x*(n+m)*2, * remainR=temp+blockIdx.x*(n+m)*2+n,*ratioL=temp+blockIdx.x*(n+m)*2+n+m,*ratioR=temp+blockIdx.x*(n+m)*2+n+m+n;\n\tfloat multiL,multiR;\n\tif (n>=m){\n\t\tmultiL=1;\n\t\tmultiR=n/m;\n\t}else{\n\t\tmultiL=m/n;\n\t\tmultiR=1;\n\t}\n\tconst int Block=1024;\n\t__shared__ float buf[Block*4];\n\tfor (int i=blockIdx.x;i<b;i+=gridDim.x){\n\t\tfor (int j=threadIdx.x;j<n*m;j+=blockDim.x)\n\t\t\tmatch[i*n*m+j]=0;\n\t\tfor (int j=threadIdx.x;j<n;j+=blockDim.x)\n\t\t\tremainL[j]=multiL;\n\t\tfor (int j=threadIdx.x;j<m;j+=blockDim.x)\n\t\t\tremainR[j]=multiR;\n\t\t__syncthreads();\n\t\tfor (int j=7;j>=-2;j--){\n\t\t\tfloat level=-powf(4.0f,j);\n\t\t\tif (j==-2){\n\t\t\t\tlevel=0;\n\t\t\t}\n\t\t\tfor (int k0=0;k0<n;k0+=blockDim.x){\n\t\t\t\tint k=k0+threadIdx.x;\n\t\t\t\tfloat x1=0,y1=0,z1=0;\n\t\t\t\tif (k<n){\n\t\t\t\t\tx1=xyz1[i*n*3+k*3+0];\n\t\t\t\t\ty1=xyz1[i*n*3+k*3+1];\n\t\t\t\t\tz1=xyz1[i*n*3+k*3+2];\n\t\t\t\t}\n\t\t\t\tfloat suml=1e-9f;\n\t\t\t\tfor (int l0=0;l0<m;l0+=Block){\n\t\t\t\t\tint lend=min(m,l0+Block)-l0;\n\t\t\t\t\tfor (int l=threadIdx.x;l<lend;l+=blockDim.x){\n\t\t\t\t\t\tfloat x2=xyz2[i*m*3+l0*3+l*3+0];\n\t\t\t\t\t\tfloat y2=xyz2[i*m*3+l0*3+l*3+1];\n\t\t\t\t\t\tfloat z2=xyz2[i*m*3+l0*3+l*3+2];\n\t\t\t\t\t\tbuf[l*4+0]=x2;\n\t\t\t\t\t\tbuf[l*4+1]=y2;\n\t\t\t\t\t\tbuf[l*4+2]=z2;\n\t\t\t\t\t\tbuf[l*4+3]=remainR[l0+l];\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t\tfor (int l=0;l<lend;l++){\n\t\t\t\t\t\tfloat x2=buf[l*4+0];\n\t\t\t\t\t\tfloat y2=buf[l*4+1];\n\t\t\t\t\t\tfloat z2=buf[l*4+2];\n\t\t\t\t\t\tfloat d=level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));\n\t\t\t\t\t\tfloat w=__expf(d)*buf[l*4+3];\n\t\t\t\t\t\tsuml+=w;\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t}\n\t\t\t\tif (k<n)\n\t\t\t\t\tratioL[k]=remainL[k]/suml;\n\t\t\t}\n\t\t\t/*for (int k=threadIdx.x;k<n;k+=gridDim.x){\n\t\t\t\tfloat x1=xyz1[i*n*3+k*3+0];\n\t\t\t\tfloat y1=xyz1[i*n*3+k*3+1];\n\t\t\t\tfloat z1=xyz1[i*n*3+k*3+2];\n\t\t\t\tfloat suml=1e-9f;\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\tfloat x2=xyz2[i*m*3+l*3+0];\n\t\t\t\t\tfloat y2=xyz2[i*m*3+l*3+1];\n\t\t\t\t\tfloat z2=xyz2[i*m*3+l*3+2];\n\t\t\t\t\tfloat w=expf(level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)))*remainR[l];\n\t\t\t\t\tsuml+=w;\n\t\t\t\t}\n\t\t\t\tratioL[k]=remainL[k]/suml;\n\t\t\t}*/\n\t\t\t__syncthreads();\n\t\t\tfor (int l0=0;l0<m;l0+=blockDim.x){\n\t\t\t\tint l=l0+threadIdx.x;\n\t\t\t\tfloat x2=0,y2=0,z2=0;\n\t\t\t\tif (l<m){\n\t\t\t\t\tx2=xyz2[i*m*3+l*3+0];\n\t\t\t\t\ty2=xyz2[i*m*3+l*3+1];\n\t\t\t\t\tz2=xyz2[i*m*3+l*3+2];\n\t\t\t\t}\n\t\t\t\tfloat sumr=0;\n\t\t\t\tfor (int k0=0;k0<n;k0+=Block){\n\t\t\t\t\tint kend=min(n,k0+Block)-k0;\n\t\t\t\t\tfor (int k=threadIdx.x;k<kend;k+=blockDim.x){\n\t\t\t\t\t\tbuf[k*4+0]=xyz1[i*n*3+k0*3+k*3+0];\n\t\t\t\t\t\tbuf[k*4+1]=xyz1[i*n*3+k0*3+k*3+1];\n\t\t\t\t\t\tbuf[k*4+2]=xyz1[i*n*3+k0*3+k*3+2];\n\t\t\t\t\t\tbuf[k*4+3]=ratioL[k0+k];\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t\tfor (int k=0;k<kend;k++){\n\t\t\t\t\t\tfloat x1=buf[k*4+0];\n\t\t\t\t\t\tfloat y1=buf[k*4+1];\n\t\t\t\t\t\tfloat z1=buf[k*4+2];\n\t\t\t\t\t\tfloat w=__expf(level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)))*buf[k*4+3];\n\t\t\t\t\t\tsumr+=w;\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t}\n\t\t\t\tif (l<m){\n\t\t\t\t\tsumr*=remainR[l];\n\t\t\t\t\tfloat consumption=fminf(remainR[l]/(sumr+1e-9f),1.0f);\n\t\t\t\t\tratioR[l]=consumption*remainR[l];\n\t\t\t\t\tremainR[l]=fmaxf(0.0f,remainR[l]-sumr);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/*for (int l=threadIdx.x;l<m;l+=blockDim.x){\n\t\t\t\tfloat x2=xyz2[i*m*3+l*3+0];\n\t\t\t\tfloat y2=xyz2[i*m*3+l*3+1];\n\t\t\t\tfloat z2=xyz2[i*m*3+l*3+2];\n\t\t\t\tfloat sumr=0;\n\t\t\t\tfor (int k=0;k<n;k++){\n\t\t\t\t\tfloat x1=xyz1[i*n*3+k*3+0];\n\t\t\t\t\tfloat y1=xyz1[i*n*3+k*3+1];\n\t\t\t\t\tfloat z1=xyz1[i*n*3+k*3+2];\n\t\t\t\t\tfloat w=expf(level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)))*ratioL[k];\n\t\t\t\t\tsumr+=w;\n\t\t\t\t}\n\t\t\t\tsumr*=remainR[l];\n\t\t\t\tfloat consumption=fminf(remainR[l]/(sumr+1e-9f),1.0f);\n\t\t\t\tratioR[l]=consumption*remainR[l];\n\t\t\t\tremainR[l]=fmaxf(0.0f,remainR[l]-sumr);\n\t\t\t}*/\n\t\t\t__syncthreads();\n\t\t\tfor (int k0=0;k0<n;k0+=blockDim.x){\n\t\t\t\tint k=k0+threadIdx.x;\n\t\t\t\tfloat x1=0,y1=0,z1=0;\n\t\t\t\tif (k<n){\n\t\t\t\t\tx1=xyz1[i*n*3+k*3+0];\n\t\t\t\t\ty1=xyz1[i*n*3+k*3+1];\n\t\t\t\t\tz1=xyz1[i*n*3+k*3+2];\n\t\t\t\t}\n\t\t\t\tfloat suml=0;\n\t\t\t\tfor (int l0=0;l0<m;l0+=Block){\n\t\t\t\t\tint lend=min(m,l0+Block)-l0;\n\t\t\t\t\tfor (int l=threadIdx.x;l<lend;l+=blockDim.x){\n\t\t\t\t\t\tbuf[l*4+0]=xyz2[i*m*3+l0*3+l*3+0];\n\t\t\t\t\t\tbuf[l*4+1]=xyz2[i*m*3+l0*3+l*3+1];\n\t\t\t\t\t\tbuf[l*4+2]=xyz2[i*m*3+l0*3+l*3+2];\n\t\t\t\t\t\tbuf[l*4+3]=ratioR[l0+l];\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t\tfloat rl=ratioL[k];\n\t\t\t\t\tif (k<n){\n\t\t\t\t\t\tfor (int l=0;l<lend;l++){\n\t\t\t\t\t\t\tfloat x2=buf[l*4+0];\n\t\t\t\t\t\t\tfloat y2=buf[l*4+1];\n\t\t\t\t\t\t\tfloat z2=buf[l*4+2];\n\t\t\t\t\t\t\tfloat w=__expf(level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)))*rl*buf[l*4+3];\n\t\t\t\t\t\t\tmatch[i*n*m+(l0+l)*n+k]+=w;\n\t\t\t\t\t\t\tsuml+=w;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t__syncthreads();\n\t\t\t\t}\n\t\t\t\tif (k<n)\n\t\t\t\t\tremainL[k]=fmaxf(0.0f,remainL[k]-suml);\n\t\t\t}\n\t\t\t/*for (int k=threadIdx.x;k<n;k+=blockDim.x){\n\t\t\t\tfloat x1=xyz1[i*n*3+k*3+0];\n\t\t\t\tfloat y1=xyz1[i*n*3+k*3+1];\n\t\t\t\tfloat z1=xyz1[i*n*3+k*3+2];\n\t\t\t\tfloat suml=0;\n\t\t\t\tfor (int l=0;l<m;l++){\n\t\t\t\t\tfloat x2=xyz2[i*m*3+l*3+0];\n\t\t\t\t\tfloat y2=xyz2[i*m*3+l*3+1];\n\t\t\t\t\tfloat z2=xyz2[i*m*3+l*3+2];\n\t\t\t\t\tfloat w=expf(level*((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)))*ratioL[k]*ratioR[l];\n\t\t\t\t\tmatch[i*n*m+l*n+k]+=w;\n\t\t\t\t\tsuml+=w;\n\t\t\t\t}\n\t\t\t\tremainL[k]=fmaxf(0.0f,remainL[k]-suml);\n\t\t\t}*/\n\t\t\t__syncthreads();\n\t\t}\n\t}\n}\nvoid approxmatchLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,float * match,float * temp){\n\tapproxmatch<<<32,512>>>(b,n,m,xyz1,xyz2,match,temp);\n}\n__global__ void matchcost(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,const float * __restrict__ match,float * __restrict__ out){\n\t__shared__ float allsum[512];\n\tconst int Block=1024;\n\t__shared__ float buf[Block*3];\n\tfor (int i=blockIdx.x;i<b;i+=gridDim.x){\n\t\tfloat subsum=0;\n\t\tfor (int k0=0;k0<n;k0+=blockDim.x){\n\t\t\tint k=k0+threadIdx.x;\n\t\t\tfloat x1=0,y1=0,z1=0;\n\t\t\tif (k<n){\n\t\t\t\tx1=xyz1[i*n*3+k*3+0];\n\t\t\t\ty1=xyz1[i*n*3+k*3+1];\n\t\t\t\tz1=xyz1[i*n*3+k*3+2];\n\t\t\t}\n\t\t\tfor (int l0=0;l0<m;l0+=Block){\n\t\t\t\tint lend=min(m,l0+Block)-l0;\n\t\t\t\tfor (int l=threadIdx.x;l<lend*3;l+=blockDim.x)\n\t\t\t\t\tbuf[l]=xyz2[i*m*3+l0*3+l];\n\t\t\t\t__syncthreads();\n\t\t\t\tif (k<n){\n\t\t\t\t\tfor (int l=0;l<lend;l++){\n\t\t\t\t\t\tfloat x2=buf[l*3+0];\n\t\t\t\t\t\tfloat y2=buf[l*3+1];\n\t\t\t\t\t\tfloat z2=buf[l*3+2];\n\t\t\t\t\t\tfloat d=sqrtf((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));\n\t\t\t\t\t\tsubsum+=d*match[i*n*m+(l0+l)*n+k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t__syncthreads();\n\t\t\t}\n\t\t}\n\t\tallsum[threadIdx.x]=subsum;\n\t\tfor (int j=1;j<blockDim.x;j<<=1){\n\t\t\t__syncthreads();\n\t\t\tif ((threadIdx.x&j)==0 && threadIdx.x+j<blockDim.x){\n\t\t\t\tallsum[threadIdx.x]+=allsum[threadIdx.x+j];\n\t\t\t}\n\t\t}\n\t\tif (threadIdx.x==0)\n\t\t\tout[i]=allsum[0];\n\t\t__syncthreads();\n\t}\n}\nvoid matchcostLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * out){\n\tmatchcost<<<32,512>>>(b,n,m,xyz1,xyz2,match,out);\n}\n__global__ void matchcostgrad2(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,const float * __restrict__ match,float * __restrict__ grad2){\n\t__shared__ float sum_grad[256*3];\n\tfor (int i=blockIdx.x;i<b;i+=gridDim.x){\n\t\tint kbeg=m*blockIdx.y/gridDim.y;\n\t\tint kend=m*(blockIdx.y+1)/gridDim.y;\n\t\tfor (int k=kbeg;k<kend;k++){\n\t\t\tfloat x2=xyz2[(i*m+k)*3+0];\n\t\t\tfloat y2=xyz2[(i*m+k)*3+1];\n\t\t\tfloat z2=xyz2[(i*m+k)*3+2];\n\t\t\tfloat subsumx=0,subsumy=0,subsumz=0;\n\t\t\tfor (int j=threadIdx.x;j<n;j+=blockDim.x){\n\t\t\t\tfloat x1=x2-xyz1[(i*n+j)*3+0];\n\t\t\t\tfloat y1=y2-xyz1[(i*n+j)*3+1];\n\t\t\t\tfloat z1=z2-xyz1[(i*n+j)*3+2];\n\t\t\t\tfloat d=match[i*n*m+k*n+j]*rsqrtf(fmaxf(x1*x1+y1*y1+z1*z1,1e-20f));\n\t\t\t\tsubsumx+=x1*d;\n\t\t\t\tsubsumy+=y1*d;\n\t\t\t\tsubsumz+=z1*d;\n\t\t\t}\n\t\t\tsum_grad[threadIdx.x*3+0]=subsumx;\n\t\t\tsum_grad[threadIdx.x*3+1]=subsumy;\n\t\t\tsum_grad[threadIdx.x*3+2]=subsumz;\n\t\t\tfor (int j=1;j<blockDim.x;j<<=1){\n\t\t\t\t__syncthreads();\n\t\t\t\tint j1=threadIdx.x;\n\t\t\t\tint j2=threadIdx.x+j;\n\t\t\t\tif ((j1&j)==0 && j2<blockDim.x){\n\t\t\t\t\tsum_grad[j1*3+0]+=sum_grad[j2*3+0];\n\t\t\t\t\tsum_grad[j1*3+1]+=sum_grad[j2*3+1];\n\t\t\t\t\tsum_grad[j1*3+2]+=sum_grad[j2*3+2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (threadIdx.x==0){\n\t\t\t\tgrad2[(i*m+k)*3+0]=sum_grad[0];\n\t\t\t\tgrad2[(i*m+k)*3+1]=sum_grad[1];\n\t\t\t\tgrad2[(i*m+k)*3+2]=sum_grad[2];\n\t\t\t}\n\t\t\t__syncthreads();\n\t\t}\n\t}\n}\n__global__ void matchcostgrad1(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,const float * __restrict__ match,float * __restrict__ grad1){\n\tfor (int i=blockIdx.x;i<b;i+=gridDim.x){\n\t\tfor (int l=threadIdx.x;l<n;l+=blockDim.x){\n\t\t\tfloat x1=xyz1[i*n*3+l*3+0];\n\t\t\tfloat y1=xyz1[i*n*3+l*3+1];\n\t\t\tfloat z1=xyz1[i*n*3+l*3+2];\n\t\t\tfloat dx=0,dy=0,dz=0;\n\t\t\tfor (int k=0;k<m;k++){\n\t\t\t\tfloat x2=xyz2[i*m*3+k*3+0];\n\t\t\t\tfloat y2=xyz2[i*m*3+k*3+1];\n\t\t\t\tfloat z2=xyz2[i*m*3+k*3+2];\n\t\t\t\tfloat d=match[i*n*m+k*n+l]*rsqrtf(fmaxf((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2),1e-20f));\n\t\t\t\tdx+=(x1-x2)*d;\n\t\t\t\tdy+=(y1-y2)*d;\n\t\t\t\tdz+=(z1-z2)*d;\n\t\t\t}\n\t\t\tgrad1[i*n*3+l*3+0]=dx;\n\t\t\tgrad1[i*n*3+l*3+1]=dy;\n\t\t\tgrad1[i*n*3+l*3+2]=dz;\n\t\t}\n\t}\n}\nvoid matchcostgradLauncher(int b,int n,int m,const float * xyz1,const float * xyz2,const float * match,float * grad1,float * grad2){\n\tmatchcostgrad1<<<32,512>>>(b,n,m,xyz1,xyz2,match,grad1);\n\tmatchcostgrad2<<<dim3(32,32),256>>>(b,n,m,xyz1,xyz2,match,grad2);\n}\n\n"
  },
  {
    "path": "models/tf_ops/nn_distance/README.md",
    "content": "From https://github.com/fanhqme/PointSetGeneration/tree/master/depthestimate\n"
  },
  {
    "path": "models/tf_ops/nn_distance/__init__.py",
    "content": ""
  },
  {
    "path": "models/tf_ops/nn_distance/tf_nndistance.cpp",
    "content": "#include \"tensorflow/core/framework/op.h\"\n#include \"tensorflow/core/framework/op_kernel.h\"\nREGISTER_OP(\"NnDistance\")\n    .Input(\"xyz1: float32\")\n    .Input(\"xyz2: float32\")\n    .Output(\"dist1: float32\")\n    .Output(\"idx1: int32\")\n    .Output(\"dist2: float32\")\n    .Output(\"idx2: int32\");\nREGISTER_OP(\"NnDistanceGrad\")\n    .Input(\"xyz1: float32\")\n    .Input(\"xyz2: float32\")\n    .Input(\"grad_dist1: float32\")\n    .Input(\"idx1: int32\")\n    .Input(\"grad_dist2: float32\")\n    .Input(\"idx2: int32\")\n    .Output(\"grad_xyz1: float32\")\n    .Output(\"grad_xyz2: float32\");\nusing namespace tensorflow;\n\nstatic void nnsearch(int b,int n,int m,const float * xyz1,const float * xyz2,float * dist,int * idx){\n    for (int i=0;i<b;i++){\n        for (int j=0;j<n;j++){\n            float x1=xyz1[(i*n+j)*3+0];\n            float y1=xyz1[(i*n+j)*3+1];\n            float z1=xyz1[(i*n+j)*3+2];\n            double best=0;\n            int besti=0;\n            for (int k=0;k<m;k++){\n                float x2=xyz2[(i*m+k)*3+0]-x1;\n                float y2=xyz2[(i*m+k)*3+1]-y1;\n                float z2=xyz2[(i*m+k)*3+2]-z1;\n                double d=x2*x2+y2*y2+z2*z2;\n                if (k==0 || d<best){\n                    best=d;\n                    besti=k;\n                }\n            }\n            dist[i*n+j]=best;\n            idx[i*n+j]=besti;\n        }\n    }\n}\n\nclass NnDistanceOp : public OpKernel{\n    public:\n        explicit NnDistanceOp(OpKernelConstruction* context):OpKernel(context){}\n        void Compute(OpKernelContext * context)override{\n            const Tensor& xyz1_tensor=context->input(0);\n            const Tensor& xyz2_tensor=context->input(1);\n            OP_REQUIRES(context,xyz1_tensor.dims()==3,errors::InvalidArgument(\"NnDistance requires xyz1 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistance only accepts 3d point set xyz1\"));\n            int b=xyz1_tensor.shape().dim_size(0);\n            int n=xyz1_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.dims()==3,errors::InvalidArgument(\"NnDistance requires xyz2 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistance only accepts 3d point set xyz2\"));\n            int m=xyz2_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"NnDistance expects xyz1 and xyz2 have same batch size\"));\n            auto xyz1_flat=xyz1_tensor.flat<float>();\n            const float * xyz1=&xyz1_flat(0);\n            auto xyz2_flat=xyz2_tensor.flat<float>();\n            const float * xyz2=&xyz2_flat(0);\n            Tensor * dist1_tensor=NULL;\n            Tensor * idx1_tensor=NULL;\n            Tensor * dist2_tensor=NULL;\n            Tensor * idx2_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n},&dist1_tensor));\n            OP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,n},&idx1_tensor));\n            auto dist1_flat=dist1_tensor->flat<float>();\n            auto idx1_flat=idx1_tensor->flat<int>();\n            OP_REQUIRES_OK(context,context->allocate_output(2,TensorShape{b,m},&dist2_tensor));\n            OP_REQUIRES_OK(context,context->allocate_output(3,TensorShape{b,m},&idx2_tensor));\n            auto dist2_flat=dist2_tensor->flat<float>();\n            auto idx2_flat=idx2_tensor->flat<int>();\n            float * dist1=&(dist1_flat(0));\n            int * idx1=&(idx1_flat(0));\n            float * dist2=&(dist2_flat(0));\n            int * idx2=&(idx2_flat(0));\n            nnsearch(b,n,m,xyz1,xyz2,dist1,idx1);\n            nnsearch(b,m,n,xyz2,xyz1,dist2,idx2);\n        }\n};\nREGISTER_KERNEL_BUILDER(Name(\"NnDistance\").Device(DEVICE_CPU), NnDistanceOp);\nclass NnDistanceGradOp : public OpKernel{\n    public:\n        explicit NnDistanceGradOp(OpKernelConstruction* context):OpKernel(context){}\n        void Compute(OpKernelContext * context)override{\n            const Tensor& xyz1_tensor=context->input(0);\n            const Tensor& xyz2_tensor=context->input(1);\n            const Tensor& grad_dist1_tensor=context->input(2);\n            const Tensor& idx1_tensor=context->input(3);\n            const Tensor& grad_dist2_tensor=context->input(4);\n            const Tensor& idx2_tensor=context->input(5);\n            OP_REQUIRES(context,xyz1_tensor.dims()==3,errors::InvalidArgument(\"NnDistanceGrad requires xyz1 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistanceGrad only accepts 3d point set xyz1\"));\n            int b=xyz1_tensor.shape().dim_size(0);\n            int n=xyz1_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.dims()==3,errors::InvalidArgument(\"NnDistanceGrad requires xyz2 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistanceGrad only accepts 3d point set xyz2\"));\n            int m=xyz2_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"NnDistanceGrad expects xyz1 and xyz2 have same batch size\"));\n            OP_REQUIRES(context,grad_dist1_tensor.shape()==(TensorShape{b,n}),errors::InvalidArgument(\"NnDistanceGrad requires grad_dist1 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,idx1_tensor.shape()==(TensorShape{b,n}),errors::InvalidArgument(\"NnDistanceGrad requires idx1 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,grad_dist2_tensor.shape()==(TensorShape{b,m}),errors::InvalidArgument(\"NnDistanceGrad requires grad_dist2 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,idx2_tensor.shape()==(TensorShape{b,m}),errors::InvalidArgument(\"NnDistanceGrad requires idx2 be of shape(batch,#points)\"));\n            auto xyz1_flat=xyz1_tensor.flat<float>();\n            const float * xyz1=&xyz1_flat(0);\n            auto xyz2_flat=xyz2_tensor.flat<float>();\n            const float * xyz2=&xyz2_flat(0);\n            auto idx1_flat=idx1_tensor.flat<int>();\n            const int * idx1=&idx1_flat(0);\n            auto idx2_flat=idx2_tensor.flat<int>();\n            const int * idx2=&idx2_flat(0);\n            auto grad_dist1_flat=grad_dist1_tensor.flat<float>();\n            const float * grad_dist1=&grad_dist1_flat(0);\n            auto grad_dist2_flat=grad_dist2_tensor.flat<float>();\n            const float * grad_dist2=&grad_dist2_flat(0);\n            Tensor * grad_xyz1_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n,3},&grad_xyz1_tensor));\n            Tensor * grad_xyz2_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,m,3},&grad_xyz2_tensor));\n            auto grad_xyz1_flat=grad_xyz1_tensor->flat<float>();\n            float * grad_xyz1=&grad_xyz1_flat(0);\n            auto grad_xyz2_flat=grad_xyz2_tensor->flat<float>();\n            float * grad_xyz2=&grad_xyz2_flat(0);\n            for (int i=0;i<b*n*3;i++)\n                grad_xyz1[i]=0;\n            for (int i=0;i<b*m*3;i++)\n                grad_xyz2[i]=0;\n            for (int i=0;i<b;i++){\n                for (int j=0;j<n;j++){\n                    float x1=xyz1[(i*n+j)*3+0];\n                    float y1=xyz1[(i*n+j)*3+1];\n                    float z1=xyz1[(i*n+j)*3+2];\n                    int j2=idx1[i*n+j];\n                    float x2=xyz2[(i*m+j2)*3+0];\n                    float y2=xyz2[(i*m+j2)*3+1];\n                    float z2=xyz2[(i*m+j2)*3+2];\n                    float g=grad_dist1[i*n+j]*2;\n                    grad_xyz1[(i*n+j)*3+0]+=g*(x1-x2);\n                    grad_xyz1[(i*n+j)*3+1]+=g*(y1-y2);\n                    grad_xyz1[(i*n+j)*3+2]+=g*(z1-z2);\n                    grad_xyz2[(i*m+j2)*3+0]-=(g*(x1-x2));\n                    grad_xyz2[(i*m+j2)*3+1]-=(g*(y1-y2));\n                    grad_xyz2[(i*m+j2)*3+2]-=(g*(z1-z2));\n                }\n                for (int j=0;j<m;j++){\n                    float x1=xyz2[(i*m+j)*3+0];\n                    float y1=xyz2[(i*m+j)*3+1];\n                    float z1=xyz2[(i*m+j)*3+2];\n                    int j2=idx2[i*m+j];\n                    float x2=xyz1[(i*n+j2)*3+0];\n                    float y2=xyz1[(i*n+j2)*3+1];\n                    float z2=xyz1[(i*n+j2)*3+2];\n                    float g=grad_dist2[i*m+j]*2;\n                    grad_xyz2[(i*m+j)*3+0]+=g*(x1-x2);\n                    grad_xyz2[(i*m+j)*3+1]+=g*(y1-y2);\n                    grad_xyz2[(i*m+j)*3+2]+=g*(z1-z2);\n                    grad_xyz1[(i*n+j2)*3+0]-=(g*(x1-x2));\n                    grad_xyz1[(i*n+j2)*3+1]-=(g*(y1-y2));\n                    grad_xyz1[(i*n+j2)*3+2]-=(g*(z1-z2));\n                }\n            }\n        }\n};\nREGISTER_KERNEL_BUILDER(Name(\"NnDistanceGrad\").Device(DEVICE_CPU), NnDistanceGradOp);\n\nvoid NmDistanceKernelLauncher(int b,int n,const float * xyz,int m,const float * xyz2,float * result,int * result_i,float * result2,int * result2_i);\nclass NnDistanceGpuOp : public OpKernel{\n    public:\n        explicit NnDistanceGpuOp(OpKernelConstruction* context):OpKernel(context){}\n        void Compute(OpKernelContext * context)override{\n            const Tensor& xyz1_tensor=context->input(0);\n            const Tensor& xyz2_tensor=context->input(1);\n            OP_REQUIRES(context,xyz1_tensor.dims()==3,errors::InvalidArgument(\"NnDistance requires xyz1 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistance only accepts 3d point set xyz1\"));\n            int b=xyz1_tensor.shape().dim_size(0);\n            int n=xyz1_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.dims()==3,errors::InvalidArgument(\"NnDistance requires xyz2 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistance only accepts 3d point set xyz2\"));\n            int m=xyz2_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"NnDistance expects xyz1 and xyz2 have same batch size\"));\n            auto xyz1_flat=xyz1_tensor.flat<float>();\n            const float * xyz1=&xyz1_flat(0);\n            auto xyz2_flat=xyz2_tensor.flat<float>();\n            const float * xyz2=&xyz2_flat(0);\n            Tensor * dist1_tensor=NULL;\n            Tensor * idx1_tensor=NULL;\n            Tensor * dist2_tensor=NULL;\n            Tensor * idx2_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n},&dist1_tensor));\n            OP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,n},&idx1_tensor));\n            auto dist1_flat=dist1_tensor->flat<float>();\n            auto idx1_flat=idx1_tensor->flat<int>();\n            OP_REQUIRES_OK(context,context->allocate_output(2,TensorShape{b,m},&dist2_tensor));\n            OP_REQUIRES_OK(context,context->allocate_output(3,TensorShape{b,m},&idx2_tensor));\n            auto dist2_flat=dist2_tensor->flat<float>();\n            auto idx2_flat=idx2_tensor->flat<int>();\n            float * dist1=&(dist1_flat(0));\n            int * idx1=&(idx1_flat(0));\n            float * dist2=&(dist2_flat(0));\n            int * idx2=&(idx2_flat(0));\n            NmDistanceKernelLauncher(b,n,xyz1,m,xyz2,dist1,idx1,dist2,idx2);\n        }\n};\nREGISTER_KERNEL_BUILDER(Name(\"NnDistance\").Device(DEVICE_GPU), NnDistanceGpuOp);\n\nvoid NmDistanceGradKernelLauncher(int b,int n,const float * xyz1,int m,const float * xyz2,const float * grad_dist1,const int * idx1,const float * grad_dist2,const int * idx2,float * grad_xyz1,float * grad_xyz2);\nclass NnDistanceGradGpuOp : public OpKernel{\n    public:\n        explicit NnDistanceGradGpuOp(OpKernelConstruction* context):OpKernel(context){}\n        void Compute(OpKernelContext * context)override{\n            const Tensor& xyz1_tensor=context->input(0);\n            const Tensor& xyz2_tensor=context->input(1);\n            const Tensor& grad_dist1_tensor=context->input(2);\n            const Tensor& idx1_tensor=context->input(3);\n            const Tensor& grad_dist2_tensor=context->input(4);\n            const Tensor& idx2_tensor=context->input(5);\n            OP_REQUIRES(context,xyz1_tensor.dims()==3,errors::InvalidArgument(\"NnDistanceGrad requires xyz1 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz1_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistanceGrad only accepts 3d point set xyz1\"));\n            int b=xyz1_tensor.shape().dim_size(0);\n            int n=xyz1_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.dims()==3,errors::InvalidArgument(\"NnDistanceGrad requires xyz2 be of shape (batch,#points,3)\"));\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(2)==3,errors::InvalidArgument(\"NnDistanceGrad only accepts 3d point set xyz2\"));\n            int m=xyz2_tensor.shape().dim_size(1);\n            OP_REQUIRES(context,xyz2_tensor.shape().dim_size(0)==b,errors::InvalidArgument(\"NnDistanceGrad expects xyz1 and xyz2 have same batch size\"));\n            OP_REQUIRES(context,grad_dist1_tensor.shape()==(TensorShape{b,n}),errors::InvalidArgument(\"NnDistanceGrad requires grad_dist1 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,idx1_tensor.shape()==(TensorShape{b,n}),errors::InvalidArgument(\"NnDistanceGrad requires idx1 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,grad_dist2_tensor.shape()==(TensorShape{b,m}),errors::InvalidArgument(\"NnDistanceGrad requires grad_dist2 be of shape(batch,#points)\"));\n            OP_REQUIRES(context,idx2_tensor.shape()==(TensorShape{b,m}),errors::InvalidArgument(\"NnDistanceGrad requires idx2 be of shape(batch,#points)\"));\n            auto xyz1_flat=xyz1_tensor.flat<float>();\n            const float * xyz1=&xyz1_flat(0);\n            auto xyz2_flat=xyz2_tensor.flat<float>();\n            const float * xyz2=&xyz2_flat(0);\n            auto idx1_flat=idx1_tensor.flat<int>();\n            const int * idx1=&idx1_flat(0);\n            auto idx2_flat=idx2_tensor.flat<int>();\n            const int * idx2=&idx2_flat(0);\n            auto grad_dist1_flat=grad_dist1_tensor.flat<float>();\n            const float * grad_dist1=&grad_dist1_flat(0);\n            auto grad_dist2_flat=grad_dist2_tensor.flat<float>();\n            const float * grad_dist2=&grad_dist2_flat(0);\n            Tensor * grad_xyz1_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(0,TensorShape{b,n,3},&grad_xyz1_tensor));\n            Tensor * grad_xyz2_tensor=NULL;\n            OP_REQUIRES_OK(context,context->allocate_output(1,TensorShape{b,m,3},&grad_xyz2_tensor));\n            auto grad_xyz1_flat=grad_xyz1_tensor->flat<float>();\n            float * grad_xyz1=&grad_xyz1_flat(0);\n            auto grad_xyz2_flat=grad_xyz2_tensor->flat<float>();\n            float * grad_xyz2=&grad_xyz2_flat(0);\n            NmDistanceGradKernelLauncher(b,n,xyz1,m,xyz2,grad_dist1,idx1,grad_dist2,idx2,grad_xyz1,grad_xyz2);\n        }\n};\nREGISTER_KERNEL_BUILDER(Name(\"NnDistanceGrad\").Device(DEVICE_GPU), NnDistanceGradGpuOp);\n"
  },
  {
    "path": "models/tf_ops/nn_distance/tf_nndistance.py",
    "content": "\"\"\" Compute Chamfer's Distance.\n\nOriginal author: Haoqiang Fan.\nModified by Charles R. Qi\n\"\"\"\n\nimport tensorflow as tf\nfrom tensorflow.python.framework import ops\nimport sys\nimport os\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nnn_distance_module=tf.load_op_library(os.path.join(BASE_DIR, 'tf_nndistance_so.so'))\n\ndef nn_distance(xyz1,xyz2):\n    '''\nComputes the distance of nearest neighbors for a pair of point clouds\ninput: xyz1: (batch_size,#points_1,3)  the first point cloud\ninput: xyz2: (batch_size,#points_2,3)  the second point cloud\noutput: dist1: (batch_size,#point_1)   distance from first to second\noutput: idx1:  (batch_size,#point_1)   nearest neighbor from first to second\noutput: dist2: (batch_size,#point_2)   distance from second to first\noutput: idx2:  (batch_size,#point_2)   nearest neighbor from second to first\n    '''\n    return nn_distance_module.nn_distance(xyz1,xyz2)\n#@tf.RegisterShape('NnDistance')\n#def _nn_distance_shape(op):\n    #shape1=op.inputs[0].get_shape().with_rank(3)\n    #shape2=op.inputs[1].get_shape().with_rank(3)\n    #return [tf.TensorShape([shape1.dims[0],shape1.dims[1]]),tf.TensorShape([shape1.dims[0],shape1.dims[1]]),\n        #tf.TensorShape([shape2.dims[0],shape2.dims[1]]),tf.TensorShape([shape2.dims[0],shape2.dims[1]])]\n@ops.RegisterGradient('NnDistance')\ndef _nn_distance_grad(op,grad_dist1,grad_idx1,grad_dist2,grad_idx2):\n    xyz1=op.inputs[0]\n    xyz2=op.inputs[1]\n    idx1=op.outputs[1]\n    idx2=op.outputs[3]\n    return nn_distance_module.nn_distance_grad(xyz1,xyz2,grad_dist1,idx1,grad_dist2,idx2)\n\n\nif __name__=='__main__':\n    import numpy as np\n    import random\n    import time\n    from tensorflow.python.ops.gradient_checker import compute_gradient\n    random.seed(100)\n    np.random.seed(100)\n    with tf.Session('') as sess:\n        xyz1=np.random.randn(32,16384,3).astype('float32')\n        xyz2=np.random.randn(32,1024,3).astype('float32')\n        #with tf.device('/gpu:0'):\n        if True:\n            inp1=tf.Variable(xyz1)\n            inp2=tf.constant(xyz2)\n            reta,retb,retc,retd=nn_distance(inp1,inp2)\n            loss=tf.reduce_sum(reta)+tf.reduce_sum(retc)\n            train=tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)\n        sess.run(tf.initialize_all_variables())\n        t0=time.time()\n        t1=t0\n        best=1e100\n        for i in xrange(100):\n            trainloss,_=sess.run([loss,train])\n            newt=time.time()\n            best=min(best,newt-t1)\n            print (i,trainloss,(newt-t0)/(i+1),best)\n            t1=newt\n        #print sess.run([inp1,retb,inp2,retd])\n        #grads=compute_gradient([inp1,inp2],[(16,32,3),(16,32,3)],loss,(1,),[xyz1,xyz2])\n        #for i,j in grads:\n            #print i.shape,j.shape,np.mean(np.abs(i-j)),np.mean(np.abs(i)),np.mean(np.abs(j))\n        #for i in xrange(10):\n            #t0=time.time()\n            #a,b,c,d=sess.run([reta,retb,retc,retd],feed_dict={inp1:xyz1,inp2:xyz2})\n            #print 'time',time.time()-t0\n        #print a.shape,b.shape,c.shape,d.shape\n        #print a.dtype,b.dtype,c.dtype,d.dtype\n        #samples=np.array(random.sample(range(xyz2.shape[1]),100),dtype='int32')\n        #dist1=((xyz1[:,samples,None,:]-xyz2[:,None,:,:])**2).sum(axis=-1).min(axis=-1)\n        #idx1=((xyz1[:,samples,None,:]-xyz2[:,None,:,:])**2).sum(axis=-1).argmin(axis=-1)\n        #print np.abs(dist1-a[:,samples]).max()\n        #print np.abs(idx1-b[:,samples]).max()\n        #dist2=((xyz2[:,samples,None,:]-xyz1[:,None,:,:])**2).sum(axis=-1).min(axis=-1)\n        #idx2=((xyz2[:,samples,None,:]-xyz1[:,None,:,:])**2).sum(axis=-1).argmin(axis=-1)\n        #print np.abs(dist2-c[:,samples]).max()\n        #print np.abs(idx2-d[:,samples]).max()\n\n\n"
  },
  {
    "path": "models/tf_ops/nn_distance/tf_nndistance_compile.sh",
    "content": "/usr/local/cuda/bin/nvcc tf_nndistance_g.cu -o tf_nndistance_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC\ng++ -std=c++11 tf_nndistance.cpp tf_nndistance_g.cu.o -o tf_nndistance_so.so -shared -fPIC -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include -I /usr/local/cuda/include -I  /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include//external/nsync/public -lcudart -L /usr/local/cuda/lib64/ -L/home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0\n"
  },
  {
    "path": "models/tf_ops/nn_distance/tf_nndistance_cpu.py",
    "content": "import tensorflow as tf\nimport numpy as np\n\ndef nn_distance_cpu(pc1, pc2):\n    '''\n    Input:\n        pc1: float TF tensor in shape (B,N,C) the first point cloud\n        pc2: float TF tensor in shape (B,M,C) the second point cloud\n    Output:\n        dist1: float TF tensor in shape (B,N) distance from first to second\n        idx1: int32 TF tensor in shape (B,N) nearest neighbor from first to second\n        dist2: float TF tensor in shape (B,M) distance from second to first\n        idx2: int32 TF tensor in shape (B,M) nearest neighbor from second to first\n    '''\n    N = pc1.get_shape()[1].value\n    M = pc2.get_shape()[1].value\n    pc1_expand_tile = tf.tile(tf.expand_dims(pc1,2), [1,1,M,1])\n    pc2_expand_tile = tf.tile(tf.expand_dims(pc2,1), [1,N,1,1])\n    pc_diff = pc1_expand_tile - pc2_expand_tile # B,N,M,C\n    pc_dist = tf.reduce_sum(pc_diff ** 2, axis=-1) # B,N,M\n    dist1 = tf.reduce_min(pc_dist, axis=2) # B,N\n    idx1 = tf.argmin(pc_dist, axis=2) # B,N\n    dist2 = tf.reduce_min(pc_dist, axis=1) # B,M\n    idx2 = tf.argmin(pc_dist, axis=1) # B,M\n    return dist1, idx1, dist2, idx2\n\n\ndef verify_nn_distance_cup():\n    np.random.seed(0)\n    sess = tf.Session()\n    pc1arr = np.random.random((1,5,3))\n    pc2arr = np.random.random((1,6,3))\n    pc1 = tf.constant(pc1arr)\n    pc2 = tf.constant(pc2arr)\n    dist1, idx1, dist2, idx2 = nn_distance_cpu(pc1, pc2)\n    print(sess.run(dist1))\n    print(sess.run(idx1))\n    print(sess.run(dist2))\n    print(sess.run(idx2))\n    \n    dist = np.zeros((5,6))\n    for i in range(5):\n        for j in range(6):\n            dist[i,j] = np.sum((pc1arr[0,i,:] - pc2arr[0,j,:]) ** 2)\n    print(dist)\n\nif __name__ == '__main__':\n    verify_nn_distance_cup()\n"
  },
  {
    "path": "models/tf_ops/nn_distance/tf_nndistance_g.cu",
    "content": "#if GOOGLE_CUDA\n#define EIGEN_USE_GPU\n//#include \"third_party/eigen3/unsupported/Eigen/CXX11/Tensor\"\n\n__global__ void NmDistanceKernel(int b,int n,const float * xyz,int m,const float * xyz2,float * result,int * result_i){\n    const int batch=512;\n    __shared__ float buf[batch*3];\n    for (int i=blockIdx.x;i<b;i+=gridDim.x){\n        for (int k2=0;k2<m;k2+=batch){\n            int end_k=min(m,k2+batch)-k2;\n            for (int j=threadIdx.x;j<end_k*3;j+=blockDim.x){\n                buf[j]=xyz2[(i*m+k2)*3+j];\n            }\n            __syncthreads();\n            for (int j=threadIdx.x+blockIdx.y*blockDim.x;j<n;j+=blockDim.x*gridDim.y){\n                float x1=xyz[(i*n+j)*3+0];\n                float y1=xyz[(i*n+j)*3+1];\n                float z1=xyz[(i*n+j)*3+2];\n                int best_i=0;\n                float best=0;\n                int end_ka=end_k-(end_k&3);\n                if (end_ka==batch){\n                    for (int k=0;k<batch;k+=4){\n                        {\n                            float x2=buf[k*3+0]-x1;\n                            float y2=buf[k*3+1]-y1;\n                            float z2=buf[k*3+2]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (k==0 || d<best){\n                                best=d;\n                                best_i=k+k2;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+3]-x1;\n                            float y2=buf[k*3+4]-y1;\n                            float z2=buf[k*3+5]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+1;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+6]-x1;\n                            float y2=buf[k*3+7]-y1;\n                            float z2=buf[k*3+8]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+2;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+9]-x1;\n                            float y2=buf[k*3+10]-y1;\n                            float z2=buf[k*3+11]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+3;\n                            }\n                        }\n                    }\n                }else{\n                    for (int k=0;k<end_ka;k+=4){\n                        {\n                            float x2=buf[k*3+0]-x1;\n                            float y2=buf[k*3+1]-y1;\n                            float z2=buf[k*3+2]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (k==0 || d<best){\n                                best=d;\n                                best_i=k+k2;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+3]-x1;\n                            float y2=buf[k*3+4]-y1;\n                            float z2=buf[k*3+5]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+1;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+6]-x1;\n                            float y2=buf[k*3+7]-y1;\n                            float z2=buf[k*3+8]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+2;\n                            }\n                        }\n                        {\n                            float x2=buf[k*3+9]-x1;\n                            float y2=buf[k*3+10]-y1;\n                            float z2=buf[k*3+11]-z1;\n                            float d=x2*x2+y2*y2+z2*z2;\n                            if (d<best){\n                                best=d;\n                                best_i=k+k2+3;\n                            }\n                        }\n                    }\n                }\n                for (int k=end_ka;k<end_k;k++){\n                    float x2=buf[k*3+0]-x1;\n                    float y2=buf[k*3+1]-y1;\n                    float z2=buf[k*3+2]-z1;\n                    float d=x2*x2+y2*y2+z2*z2;\n                    if (k==0 || d<best){\n                        best=d;\n                        best_i=k+k2;\n                    }\n                }\n                if (k2==0 || result[(i*n+j)]>best){\n                    result[(i*n+j)]=best;\n                    result_i[(i*n+j)]=best_i;\n                }\n            }\n            __syncthreads();\n        }\n    }\n}\nvoid NmDistanceKernelLauncher(int b,int n,const float * xyz,int m,const float * xyz2,float * result,int * result_i,float * result2,int * result2_i){\n    NmDistanceKernel<<<dim3(32,16,1),512>>>(b,n,xyz,m,xyz2,result,result_i);\n    NmDistanceKernel<<<dim3(32,16,1),512>>>(b,m,xyz2,n,xyz,result2,result2_i);\n}\n__global__ void NmDistanceGradKernel(int b,int n,const float * xyz1,int m,const float * xyz2,const float * grad_dist1,const int * idx1,float * grad_xyz1,float * grad_xyz2){\n    for (int i=blockIdx.x;i<b;i+=gridDim.x){\n        for (int j=threadIdx.x+blockIdx.y*blockDim.x;j<n;j+=blockDim.x*gridDim.y){\n            float x1=xyz1[(i*n+j)*3+0];\n            float y1=xyz1[(i*n+j)*3+1];\n            float z1=xyz1[(i*n+j)*3+2];\n            int j2=idx1[i*n+j];\n            float x2=xyz2[(i*m+j2)*3+0];\n            float y2=xyz2[(i*m+j2)*3+1];\n            float z2=xyz2[(i*m+j2)*3+2];\n            float g=grad_dist1[i*n+j]*2;\n            atomicAdd(&(grad_xyz1[(i*n+j)*3+0]),g*(x1-x2));\n            atomicAdd(&(grad_xyz1[(i*n+j)*3+1]),g*(y1-y2));\n            atomicAdd(&(grad_xyz1[(i*n+j)*3+2]),g*(z1-z2));\n            atomicAdd(&(grad_xyz2[(i*m+j2)*3+0]),-(g*(x1-x2)));\n            atomicAdd(&(grad_xyz2[(i*m+j2)*3+1]),-(g*(y1-y2)));\n            atomicAdd(&(grad_xyz2[(i*m+j2)*3+2]),-(g*(z1-z2)));\n        }\n    }\n}\nvoid NmDistanceGradKernelLauncher(int b,int n,const float * xyz1,int m,const float * xyz2,const float * grad_dist1,const int * idx1,const float * grad_dist2,const int * idx2,float * grad_xyz1,float * grad_xyz2){\n    cudaMemset(grad_xyz1,0,b*n*3*4);\n    cudaMemset(grad_xyz2,0,b*m*3*4);\n    NmDistanceGradKernel<<<dim3(1,16,1),256>>>(b,n,xyz1,m,xyz2,grad_dist1,idx1,grad_xyz1,grad_xyz2);\n    NmDistanceGradKernel<<<dim3(1,16,1),256>>>(b,m,xyz2,n,xyz1,grad_dist2,idx2,grad_xyz2,grad_xyz1);\n}\n\n#endif\n\n"
  },
  {
    "path": "postprocessing/clean_smallparts.py",
    "content": "import argparse\nimport numpy as np\nimport tensorflow as tf\nimport pymesh\nimport os\nimport sys\nfrom joblib import Parallel, delayed\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nslim = tf.contrib.slim\n\n\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--src_dir', type=str, default=\"\", help='src directory, before clean')\nparser.add_argument('--tar_dir', type=str, default=\"\", help='where to store')\nparser.add_argument('--thread_n', type=int, default=10, help='parallelism')\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\ndef separate_single_mesh(src_mesh, tar_mesh):\n    src_mesh = pymesh.load_mesh(src_mesh)\n    dis_meshes = pymesh.separate_mesh(src_mesh, connectivity_type='auto')\n    pymesh.save_mesh_raw(tar_mesh+\".obj\", src_mesh.vertices, src_mesh.faces)\n    count=0\n    for dis_mesh in dis_meshes:\n        print(\"dis_mesh.vertices.shape\",dis_mesh.vertices.shape)\n        print(\"dis_mesh.faces.shape\",dis_mesh.faces.shape)\n        pymesh.save_mesh_raw(tar_mesh+\"_\"+str(count)+\".obj\", dis_mesh.vertices, dis_mesh.faces)\n        count+=1\n\ndef clean_single_mesh(src_mesh, tar_mesh, dist_thresh, num_thresh):\n    src_mesh_obj = pymesh.load_mesh(src_mesh)\n    dis_meshes = pymesh.separate_mesh(src_mesh_obj, connectivity_type='auto')\n    max_mesh_verts = 0\n    for dis_mesh in dis_meshes:\n       if dis_mesh.vertices.shape[0] > max_mesh_verts:\n           max_mesh_verts = dis_mesh.vertices.shape[0]\n\n    collection=[]\n    for dis_mesh in dis_meshes:\n       if dis_mesh.vertices.shape[0] > max_mesh_verts*num_thresh:\n           centroid = np.mean(dis_mesh.vertices, axis=0)\n           if np.sqrt(np.sum(np.square(centroid))) < dist_thresh:\n            collection.append(dis_mesh)\n    tar_mesh_obj = pymesh.merge_meshes(collection)\n    pymesh.save_mesh_raw(tar_mesh, tar_mesh_obj.vertices, tar_mesh_obj.faces)\n    print(\"threshes:\", str(dist_thresh), str(num_thresh), \" clean: \", src_mesh, \" create: \",tar_mesh)\n\ndef clean_meshes(cats, src_dir, tar_dir,dist_thresh=0.5, num_thresh=0.3, thread_n=12):\n    for cat_nm, cat_id in cats.items():\n        src_cat_dir=os.path.join(src_dir,cat_id)\n        tar_cat_dir=os.path.join(tar_dir,cat_id)\n        os.makedirs(tar_cat_dir, exist_ok=True)\n        _,_,src_file_lst, tar_file_lst = build_file_dict(src_cat_dir, tar_cat_dir)\n        dist_thresh_lst=[dist_thresh for i in range(len(src_file_lst))]\n        num_thresh_lst=[num_thresh for i in range(len(src_file_lst))]\n        with Parallel(n_jobs=thread_n) as parallel:\n            parallel(delayed(clean_single_mesh)\n                     (src_mesh, tar_mesh, dist_thresh, num_thresh)\n                     for src_mesh, tar_mesh, dist_thresh, num_thresh in\n                     zip(src_file_lst, tar_file_lst, dist_thresh_lst,num_thresh_lst))\n        print(\"done with \", cat_nm, cat_id)\n    print(\"done!\")\n\ndef build_file_dict(src_dir, tar_dir):\n    src_file_dict = {}\n    tar_file_dict = {}\n    src_file_lst=[]\n    tar_file_lst=[]\n    for file in os.listdir(src_dir):\n        src_full_path = os.path.join(src_dir, file)\n        tar_full_path = os.path.join(tar_dir, file)\n        if os.path.isfile(src_full_path):\n            obj_id = file.split(\"_\")[1]\n            if obj_id in src_file_dict.keys():\n                src_file_dict[obj_id].append(src_full_path)\n            else:\n                src_file_dict[obj_id] = [src_full_path]\n            src_file_lst.append(src_full_path)\n            if obj_id in tar_file_dict.keys():\n                tar_file_dict[obj_id].append(tar_full_path)\n            else:\n                tar_file_dict[obj_id] = [tar_full_path]\n            tar_file_lst.append(tar_full_path)\n\n    return src_file_dict, tar_file_dict,src_file_lst,tar_file_lst\n\n\nif __name__ == \"__main__\":\n\n\n    cats = {\n        # \"chair\": \"03001627\",\n        # \"bench\": \"02828884\",\n        # \"car\": \"02958343\",\n        # \"airplane\": \"02691156\",\n        # \"sofa\": \"04256520\",\n        # \"table\": \"04379243\",\n        # \"phone\": \"04401088\",\n        \"cabinet\": \"02933112\",\n        \"display\": \"03211117\",\n        # \"lamp\": \"03636649\",\n        \"speaker\": \"03691459\",\n        \"rifle\": \"04090263\",\n        \"watercraft\": \"04530566\"\n    }\n    # src_dir = \"checkpoint/all_best/sdf_2d_sdfproj_twostream_wd_2048_weight10_ftprev_inweight/test_objs/65_0.0\"\n    # tar_dir = \"checkpoint/all_best/sdf_2d_sdfproj_twostream_wd_2048_weight10_ftprev_inweight/test_objs/65_0.0_sep\"\n    clean_meshes(cats, FLAGS.src_dir, FLAGS.tar_dir, dist_thresh=0.5, num_thresh=0.3, thread_n=FLAGS.thread_n)\n\n"
  },
  {
    "path": "preprocessing/create_file_lst.py",
    "content": "import json\nimport os\nCUR_PATH = os.path.dirname(os.path.realpath(__file__))\n\ndef get_all_info():\n    with open(CUR_PATH+'/info.json') as json_file:\n        data = json.load(json_file)\n        lst_dir, cats, all_cats, raw_dirs = data[\"lst_dir\"], data['cats'], data['all_cats'], data[\"raw_dirs_v1\"]\n    return lst_dir, cats, all_cats, raw_dirs\n\nif __name__ == \"__main__\":\n\n    # nohup python -u create_file_lst.py &> create_imgh5.log &\n\n    lst_dir, cats, all_cats, raw_dirs = get_all_info()\n"
  },
  {
    "path": "preprocessing/create_img_h5.py",
    "content": "import h5py\nimport os\nimport numpy as np\nCUR_PATH = os.path.dirname(os.path.realpath(__file__))\nimport cv2\nimport trimesh\nimport create_file_lst\nfrom joblib import Parallel, delayed\n\nrot90y = np.array([[0, 0, -1],\n                   [0, 1, 0],\n                   [1, 0, 0]], dtype=np.float32)\n\ndef getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137):\n    \"\"\"Calculate 4x3 3D to 2D projection matrix given viewpoint parameters.\"\"\"\n    F_MM = 35.  # Focal length\n    SENSOR_SIZE_MM = 32.\n    PIXEL_ASPECT_RATIO = 1.  # pixel_aspect_x / pixel_aspect_y\n    RESOLUTION_PCT = 100.\n    SKEW = 0.\n    CAM_MAX_DIST = 1.75\n    CAM_ROT = np.asarray([[1.910685676922942e-15, 4.371138828673793e-08, 1.0],\n                      [1.0, -4.371138828673793e-08, -0.0],\n                      [4.371138828673793e-08, 1.0, -4.371138828673793e-08]])\n\n    # Calculate intrinsic matrix.\n# 2 atan(35 / 2*32)\n    scale = RESOLUTION_PCT / 100\n    # print('scale', scale)\n    f_u = F_MM * img_w * scale / SENSOR_SIZE_MM\n    f_v = F_MM * img_h * scale * PIXEL_ASPECT_RATIO / SENSOR_SIZE_MM\n    # print('f_u', f_u, 'f_v', f_v)\n    u_0 = img_w * scale / 2\n    v_0 = img_h * scale / 2\n    K = np.matrix(((f_u, SKEW, u_0), (0, f_v, v_0), (0, 0, 1)))\n\n    # Calculate rotation and translation matrices.\n    # Step 1: World coordinate to object coordinate.\n    sa = np.sin(np.radians(-az))\n    ca = np.cos(np.radians(-az))\n    se = np.sin(np.radians(-el))\n    ce = np.cos(np.radians(-el))\n    R_world2obj = np.transpose(np.matrix(((ca * ce, -sa, ca * se),\n                                          (sa * ce, ca, sa * se),\n                                          (-se, 0, ce))))\n\n    # Step 2: Object coordinate to camera coordinate.\n    R_obj2cam = np.transpose(np.matrix(CAM_ROT))\n    R_world2cam = R_obj2cam * R_world2obj\n    cam_location = np.transpose(np.matrix((distance_ratio * CAM_MAX_DIST,\n                                           0,\n                                           0)))\n    # print('distance', distance_ratio * CAM_MAX_DIST)\n    T_world2cam = -1 * R_obj2cam * cam_location\n\n    # Step 3: Fix blender camera's y and z axis direction.\n    R_camfix = np.matrix(((1, 0, 0), (0, -1, 0), (0, 0, -1)))\n    R_world2cam = R_camfix * R_world2cam\n    T_world2cam = R_camfix * T_world2cam\n\n    RT = np.hstack((R_world2cam, T_world2cam))\n\n    return K, RT\n\ndef get_rotate_matrix(rotation_angle1):\n    cosval = np.cos(rotation_angle1)\n    sinval = np.sin(rotation_angle1)\n\n    rotation_matrix_x = np.array([[1, 0,        0,      0],\n                                  [0, cosval, -sinval, 0],\n                                  [0, sinval, cosval, 0],\n                                  [0, 0,        0,      1]])\n    rotation_matrix_y = np.array([[cosval, 0, sinval, 0],\n                                  [0,       1,  0,      0],\n                                  [-sinval, 0, cosval, 0],\n                                  [0,       0,  0,      1]])\n    rotation_matrix_z = np.array([[cosval, -sinval, 0, 0],\n                                  [sinval, cosval, 0, 0],\n                                  [0,           0,  1, 0],\n                                  [0,           0,  0, 1]])\n    scale_y_neg = np.array([\n        [1, 0,  0, 0],\n        [0, -1, 0, 0],\n        [0, 0,  1, 0],\n        [0, 0,  0, 1]\n    ])\n\n    neg = np.array([\n        [-1, 0,  0, 0],\n        [0, -1, 0, 0],\n        [0, 0,  -1, 0],\n        [0, 0,  0, 1]\n    ])\n    # y,z swap = x rotate -90, scale y -1\n    # new_pts0[:, 1] = new_pts[:, 2]\n    # new_pts0[:, 2] = new_pts[:, 1]\n    #\n    # x y swap + negative = z rotate -90, scale y -1\n    # new_pts0[:, 0] = - new_pts0[:, 1] = - new_pts[:, 2]\n    # new_pts0[:, 1] = - new_pts[:, 0]\n\n    # return np.linalg.multi_dot([rotation_matrix_z, rotation_matrix_y, rotation_matrix_y, scale_y_neg, rotation_matrix_z, scale_y_neg, rotation_matrix_x])\n    return np.linalg.multi_dot([neg, rotation_matrix_z, rotation_matrix_z, scale_y_neg, rotation_matrix_x])\n\n\ndef get_norm_matrix(sdf_h5_file):\n    with h5py.File(sdf_h5_file, 'r') as h5_f:\n        norm_params = h5_f['norm_params'][:]\n        center, m, = norm_params[:3], norm_params[3]\n        x,y,z = center[0], center[1], center[2]\n        M_inv = np.asarray(\n            [[m, 0., 0., 0.],\n             [0., m, 0., 0.],\n             [0., 0., m, 0.],\n             [0., 0., 0., 1.]]\n        )\n        T_inv = np.asarray(\n            [[1.0 , 0., 0., x],\n             [0., 1.0 , 0., y],\n             [0., 0., 1.0 , z],\n             [0., 0., 0., 1.]]\n        )\n    return np.matmul(T_inv, M_inv)\n\n\ndef convert_img2h5(source_dir, target_dir, file_lst_dir, cats, sdf_dir):\n    os.makedirs(target_dir, exist_ok=True)\n    for keys, vals in cats.items():\n        fs = []\n        cat_target_dir = os.path.join(target_dir, vals)\n        os.makedirs(cat_target_dir, exist_ok=True)\n        lst_train_file = os.path.join(file_lst_dir, vals+\"_train.lst\")\n        lst_test_file = os.path.join(file_lst_dir, vals+\"_test.lst\")\n\n        with open(lst_train_file, \"r\") as f:\n            list_obj = f.readlines()\n            list_obj = [obj.rstrip('\\r\\n') for obj in list_obj]\n            fs+=list_obj\n        with open(lst_test_file, \"r\") as f:\n            list_obj = f.readlines()\n            list_obj = [obj.rstrip('\\r\\n') for obj in list_obj]\n            fs+=list_obj\n        repeat = len(fs)\n        source_dir_lst = [source_dir for i in range(repeat)]\n        cat_target_dir_lst = [cat_target_dir for i in range(repeat)]\n        sdf_dir_lst = [sdf_dir for i in range(repeat)]\n        vals_lst = [vals for i in range(repeat)]\n\n        with Parallel(n_jobs=10) as parallel:\n            parallel(delayed(gen_obj_img_h5)\n            (source_dir, cat_target_dir, sdf_dir,vals, obj)\n            for source_dir, cat_target_dir, sdf_dir, vals, obj in\n                zip(source_dir_lst, cat_target_dir_lst, sdf_dir_lst, vals_lst, fs))\n\n\ndef gen_obj_img_h5(source_dir, cat_target_dir, sdf_dir, vals, obj):\n    img_dir = os.path.join(source_dir, vals, obj, \"rendering\")\n    tar_obj_dir = os.path.join(cat_target_dir, obj)\n    os.makedirs(tar_obj_dir, exist_ok=True)\n    sdf_fl = os.path.join(sdf_dir, vals, obj, \"ori_sample.h5\")\n    norm_mat = get_norm_matrix(sdf_fl)\n    rot_mat = get_rotate_matrix(-np.pi / 2)\n    with open(img_dir + \"/renderings.txt\", 'r') as f:\n        lines = f.read().splitlines()\n        file_lst = [line.strip() for line in lines]\n        params = np.loadtxt(img_dir + \"/rendering_metadata.txt\")\n        param_lst = [params[num, ...].astype(np.float32) for num in range(len(file_lst))]\n        for i in range(len(file_lst)):\n            h5_file = os.path.join(tar_obj_dir, file_lst[i][:2] + \".h5\")\n            if os.path.exists(h5_file):\n                try:\n                    with h5py.File(h5_file, 'r') as h5_f:\n                        trans_mat_shape = h5_f[\"trans_mat\"][:].shape[0]\n                        print(\"{} exist! trans first shape is {}\".format(h5_file, str(trans_mat_shape)))\n                        continue\n                except:\n                    print(\"{} exist! but file error\".format(h5_file))\n            camR, _ = get_img_cam(param_lst[i])\n            obj_rot_mat = np.dot(rot90y, camR)\n            img_file = os.path.join(img_dir, file_lst[i])\n            img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)\n            az, el, distance_ratio = param_lst[i][0], param_lst[i][1], param_lst[i][3]\n            K, RT = getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137)\n            trans_mat = np.linalg.multi_dot([K, RT, rot_mat, norm_mat])\n            trans_mat_right = np.transpose(trans_mat)\n            regress_mat = np.transpose(np.linalg.multi_dot([RT, rot_mat, norm_mat]))\n\n            with h5py.File(h5_file, 'w') as f1:\n                f1.create_dataset('img_arr', data=img_arr, compression='gzip',\n                                  dtype='uint8', compression_opts=4)\n                f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('K', data=K, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('RT', data=RT, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                print(\"write:\", h5_file)\n\n\ndef get_W2O_mat(shift):\n    T_inv = np.asarray(\n        [[1.0, 0., 0., shift[0]],\n         [0., 1.0, 0., shift[1]],\n         [0., 0., 1.0, shift[2]],\n         [0., 0., 0., 1.]]\n    )\n    return T_inv\n\ndef gen_obj_img_h5_new(source_dir, cat_target_dir, sdf_dir, vals, obj):\n    img_dir = os.path.join(source_dir, vals, obj, \"rendering\")\n    tar_obj_dir = os.path.join(cat_target_dir, obj)\n    os.makedirs(tar_obj_dir, exist_ok=True)\n    sdf_fl = os.path.join(sdf_dir, vals, obj, \"ori_sample.h5\")\n    norm_mat = get_norm_matrix(sdf_fl)\n    rot_mat = get_rotate_matrix(-np.pi / 2)\n    with open(img_dir + \"/renderings.txt\", 'r') as f:\n        lines = f.read().splitlines()\n        file_lst = [line.strip() for line in lines]\n        params = np.loadtxt(img_dir + \"/rendering_metadata.txt\")\n        param_lst = [params[num, ...].astype(np.float32) for num in range(len(file_lst))]\n        for i in range(len(file_lst)):\n            h5_file = os.path.join(tar_obj_dir, file_lst[i][:2] + \".h5\")\n            if os.path.exists(h5_file):\n                try:\n                    with h5py.File(h5_file, 'r') as h5_f:\n                        trans_mat_shape = h5_f[\"trans_mat\"][:].shape[0]\n                        print(\"{} exist! trans first shape is {}\".format(h5_file, str(trans_mat_shape)))\n                        continue\n                except:\n                    print(\"{} exist! but file error\".format(h5_file))\n            camR, _ = get_img_cam(param_lst[i])\n            obj_rot_mat = np.dot(rot90y, camR)\n            img_file = os.path.join(img_dir, file_lst[i])\n            img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)\n            az, el, distance_ratio = param_lst[i][0], param_lst[i][1], param_lst[i][3]\n            K, RT = getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137)\n            W2O_mat = get_W2O_mat((param_lst[i][-3], param_lst[i][-1], -param_lst[i][-2]))\n            trans_mat = np.linalg.multi_dot([K, RT, rot_mat, W2O_mat, norm_mat])\n            trans_mat_right = np.transpose(trans_mat)\n            regress_mat = np.transpose(np.linalg.multi_dot([RT, rot_mat, W2O_mat, norm_mat]))\n\n            with h5py.File(h5_file, 'w') as f1:\n                f1.create_dataset('img_arr', data=img_arr, compression='gzip',\n                                  dtype='uint8', compression_opts=4)\n                f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('K', data=K, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('RT', data=RT, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                print(\"write:\", h5_file)\n\ndef get_img_cam(param):\n    cam_mat, cam_pos = camera_info(degree2rad(param))\n\n    return cam_mat, cam_pos\n\ndef degree2rad(params):\n    params_new = np.zeros_like(params)\n    params_new[0] = np.deg2rad(params[0] + 180.0)\n    params_new[1] = np.deg2rad(params[1])\n    params_new[2] = np.deg2rad(params[2])\n    return params_new\n\ndef unit(v):\n    norm = np.linalg.norm(v)\n    if norm == 0:\n        return v\n    return v / norm\n\ndef camera_info(param):\n    az_mat = get_az(param[0])\n    el_mat = get_el(param[1])\n    inl_mat = get_inl(param[2])\n    cam_mat = np.transpose(np.matmul(np.matmul(inl_mat, el_mat), az_mat))\n    cam_pos = get_cam_pos(param)\n    return cam_mat, cam_pos\n\ndef get_cam_pos(param):\n    camX = 0\n    camY = 0\n    camZ = param[3]\n    cam_pos = np.array([camX, camY, camZ])\n    return -1 * cam_pos\n\ndef get_az(az):\n    cos = np.cos(az)\n    sin = np.sin(az)\n    mat = np.asarray([cos, 0.0, sin, 0.0, 1.0, 0.0, -1.0 * sin, 0.0, cos], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_el(el):\n    cos = np.cos(el)\n    sin = np.sin(el)\n    mat = np.asarray([1.0, 0.0, 0.0, 0.0, cos, -1.0 * sin, 0.0, sin, cos], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_inl(inl):\n    cos = np.cos(inl)\n    sin = np.sin(inl)\n    # zeros = np.zeros_like(inl)\n    # ones = np.ones_like(inl)\n    mat = np.asarray([cos, -1.0 * sin, 0.0, sin, cos, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_img_points(sample_pc, trans_mat_right):\n    sample_pc = sample_pc.reshape((-1,3))\n    homo_pc = np.concatenate((sample_pc, np.ones((sample_pc.shape[0],1),dtype=np.float32)),axis=-1)\n    pc_xyz = np.dot(homo_pc, trans_mat_right).reshape((-1,3))\n    print(\"pc_xyz shape: \", pc_xyz.shape)\n    pc_xy = pc_xyz[:,:2] / np.expand_dims(pc_xyz[:,2], axis=1)\n    return pc_xy.astype(np.int32)\n\ndef get_points(obj_fl):\n    sample_pc = np.zeros((0,3), dtype=np.float32)\n    mesh_lst = trimesh.load_mesh(obj_fl, process=False)\n    if not isinstance(mesh_lst, list):\n        mesh_lst = [mesh_lst]\n    for mesh in mesh_lst:\n        choice = np.random.randint(mesh.vertices.shape[0], size=1000)\n        sample_pc = np.concatenate((sample_pc, mesh.vertices[choice,...]), axis=0) #[choice,...]\n    # color = [[255,0,0], [0,255,0], [0,0,255], [255, 0, 255]]\n    color = 255*np.ones_like(sample_pc,dtype=np.uint8)\n    color[:,0] = 0\n    color[:,1] = 0\n    return sample_pc, np.asarray(color, dtype=np.uint8)\n\ndef get_img(img_h5):\n    with h5py.File(img_h5, 'r') as h5_f:\n        print(\"read\", img_h5)\n        trans_mat= h5_f[\"trans_mat\"][:].astype(np.float32)\n        regress_mat= h5_f[\"regress_mat\"][:].astype(np.float32)\n        obj_rot_mat= h5_f[\"obj_rot_mat\"][:].astype(np.float32)\n        K= h5_f[\"K\"][:].astype(np.float32)\n        img_arr = h5_f[\"img_arr\"][:][:, :, :3].copy()\n        trans_mat2 = np.dot(regress_mat, np.transpose(K))\n        print(trans_mat2-trans_mat)\n        return img_arr, trans_mat, obj_rot_mat, regress_mat\n\ndef test_img_h5(img_h5_fl, num, march_obj_fl):\n    img_arr, trans_mat, obj_rot_mat, regress_mat = get_img(img_h5_fl)\n    new_pts, colors = get_points(march_obj_fl)\n    pc_xy = get_img_points(new_pts, trans_mat)\n    for j in range(pc_xy.shape[0]):\n        y = int(pc_xy[j, 1])\n        x = int(pc_xy[j, 0])\n        # print (y,x)\n        # print(img_arr[y, x, :])\n        # print(tuple([int(x) for x in colors[j]]))\n        cv2.circle(img_arr, (x, y), 3, tuple([int(x) for x in colors[j]]), -1)\n    rot_pc = np.dot(new_pts, obj_rot_mat)\n    np.savetxt(os.path.join(\"send/\", \"{}_{}_{}.txt\".format(\"03001627\", \"184b4797cea77beb5ca1c42bb8ac17a\", str(num))), rot_pc)\n\n    print(\"send/184b4797cea77beb5ca1c42bb8ac17a_{}.png\".format(str(num)))\n    cv2.imwrite(\"send/184b4797cea77beb5ca1c42bb8ac17a_{}.png\".format(str(num)), img_arr)\n\n\nif __name__ == \"__main__\":\n\n    # nohup python -u create_file_lst.py &> create_imgh5.log &\n\n    lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n    # original rendering 2d dataset\n    convert_img2h5(raw_dirs[\"rendered_dir\"],\n                   raw_dirs[\"renderedh5_dir\"],\n                   lst_dir, cats,\n                   raw_dirs[\"sdf_dir\"])\n\n\n    # test_img_h5(\"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/05.h5\", 5,\n    #             \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n\n    # gen_obj_img_h5(\"/ssd1/datasets/ShapeNet/ShapeNetRendering\",\n    #    \"send/03001627\", \"/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1/\", \"03001627\", \"184b4797cea77beb5ca1c42bb8ac17a\")\n    #\n    # test_img_h5(\"send/03001627/184b4797cea77beb5ca1c42bb8ac17a/00.h5\",0,\n    #                 \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n    # test_img_h5(\"send/03001627/184b4797cea77beb5ca1c42bb8ac17a/01.h5\",1,\n    #             \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n"
  },
  {
    "path": "preprocessing/create_img_h5_newrenderer.py",
    "content": "import h5py\nimport os\nimport numpy as np\nCUR_PATH = os.path.dirname(os.path.realpath(__file__))\nimport cv2\nimport trimesh\nimport create_file_lst\nfrom joblib import Parallel, delayed\n\nrot90y = np.array([[0, 0, -1],\n                   [0, 1, 0],\n                   [1, 0, 0]], dtype=np.float32)\n\ndef getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137):\n    \"\"\"Calculate 4x3 3D to 2D projection matrix given viewpoint parameters.\"\"\"\n    F_MM = 35.  # Focal length\n    SENSOR_SIZE_MM = 32.\n    PIXEL_ASPECT_RATIO = 1.  # pixel_aspect_x / pixel_aspect_y\n    RESOLUTION_PCT = 100.\n    SKEW = 0.\n    CAM_MAX_DIST = 1.75\n    CAM_ROT = np.asarray([[1.910685676922942e-15, 4.371138828673793e-08, 1.0],\n                      [1.0, -4.371138828673793e-08, -0.0],\n                      [4.371138828673793e-08, 1.0, -4.371138828673793e-08]])\n\n    # Calculate intrinsic matrix.\n# 2 atan(35 / 2*32)\n    scale = RESOLUTION_PCT / 100\n    # print('scale', scale)\n    f_u = F_MM * img_w * scale / SENSOR_SIZE_MM\n    f_v = F_MM * img_h * scale * PIXEL_ASPECT_RATIO / SENSOR_SIZE_MM\n    # print('f_u', f_u, 'f_v', f_v)\n    u_0 = img_w * scale / 2\n    v_0 = img_h * scale / 2\n    K = np.matrix(((f_u, SKEW, u_0), (0, f_v, v_0), (0, 0, 1)))\n\n    # Calculate rotation and translation matrices.\n    # Step 1: World coordinate to object coordinate.\n    sa = np.sin(np.radians(-az))\n    ca = np.cos(np.radians(-az))\n    se = np.sin(np.radians(-el))\n    ce = np.cos(np.radians(-el))\n    R_world2obj = np.transpose(np.matrix(((ca * ce, -sa, ca * se),\n                                          (sa * ce, ca, sa * se),\n                                          (-se, 0, ce))))\n\n    # Step 2: Object coordinate to camera coordinate.\n    R_obj2cam = np.transpose(np.matrix(CAM_ROT))\n    R_world2cam = R_obj2cam * R_world2obj\n    cam_location = np.transpose(np.matrix((distance_ratio * CAM_MAX_DIST,\n                                           0,\n                                           0)))\n    # print('distance', distance_ratio * CAM_MAX_DIST)\n    T_world2cam = -1 * R_obj2cam * cam_location\n\n    # Step 3: Fix blender camera's y and z axis direction.\n    R_camfix = np.matrix(((1, 0, 0), (0, -1, 0), (0, 0, -1)))\n    R_world2cam = R_camfix * R_world2cam\n    T_world2cam = R_camfix * T_world2cam\n\n    RT = np.hstack((R_world2cam, T_world2cam))\n\n    return K, RT\n\ndef get_rotate_matrix(rotation_angle1):\n    cosval = np.cos(rotation_angle1)\n    sinval = np.sin(rotation_angle1)\n\n    rotation_matrix_x = np.array([[1, 0,        0,      0],\n                                  [0, cosval, -sinval, 0],\n                                  [0, sinval, cosval, 0],\n                                  [0, 0,        0,      1]])\n    rotation_matrix_y = np.array([[cosval, 0, sinval, 0],\n                                  [0,       1,  0,      0],\n                                  [-sinval, 0, cosval, 0],\n                                  [0,       0,  0,      1]])\n    rotation_matrix_z = np.array([[cosval, -sinval, 0, 0],\n                                  [sinval, cosval, 0, 0],\n                                  [0,           0,  1, 0],\n                                  [0,           0,  0, 1]])\n    scale_y_neg = np.array([\n        [1, 0,  0, 0],\n        [0, -1, 0, 0],\n        [0, 0,  1, 0],\n        [0, 0,  0, 1]\n    ])\n\n    neg = np.array([\n        [-1, 0,  0, 0],\n        [0, -1, 0, 0],\n        [0, 0,  -1, 0],\n        [0, 0,  0, 1]\n    ])\n    # y,z swap = x rotate -90, scale y -1\n    # new_pts0[:, 1] = new_pts[:, 2]\n    # new_pts0[:, 2] = new_pts[:, 1]\n    #\n    # x y swap + negative = z rotate -90, scale y -1\n    # new_pts0[:, 0] = - new_pts0[:, 1] = - new_pts[:, 2]\n    # new_pts0[:, 1] = - new_pts[:, 0]\n\n    # return np.linalg.multi_dot([rotation_matrix_z, rotation_matrix_y, rotation_matrix_y, scale_y_neg, rotation_matrix_z, scale_y_neg, rotation_matrix_x])\n    return np.linalg.multi_dot([neg, rotation_matrix_z, rotation_matrix_z, scale_y_neg, rotation_matrix_x])\n\n\ndef get_norm_matrix(sdf_h5_file):\n    with h5py.File(sdf_h5_file, 'r') as h5_f:\n        norm_params = h5_f['norm_params'][:]\n        center, m, = norm_params[:3], norm_params[3]\n        x,y,z = center[0], center[1], center[2]\n        M_inv = np.asarray(\n            [[m, 0., 0., 0.],\n             [0., m, 0., 0.],\n             [0., 0., m, 0.],\n             [0., 0., 0., 1.]]\n        )\n        T_inv = np.asarray(\n            [[1.0 , 0., 0., x],\n             [0., 1.0 , 0., y],\n             [0., 0., 1.0 , z],\n             [0., 0., 0., 1.]]\n        )\n    return np.matmul(T_inv, M_inv)\n\n\ndef convert_img2h5(source_dir, target_dir, file_lst_dir, cats, sdf_dir, difflevel=\"easy\"):\n    os.makedirs(target_dir, exist_ok=True)\n    for keys, vals in cats.items():\n        fs = []\n        cat_target_dir = os.path.join(target_dir, vals)\n        os.makedirs(cat_target_dir, exist_ok=True)\n        lst_train_file = os.path.join(file_lst_dir, vals+\"_train.lst\")\n        lst_test_file = os.path.join(file_lst_dir, vals+\"_test.lst\")\n\n        with open(lst_train_file, \"r\") as f:\n            list_obj = f.readlines()\n            list_obj = [obj.rstrip('\\r\\n') for obj in list_obj]\n            fs+=list_obj\n        with open(lst_test_file, \"r\") as f:\n            list_obj = f.readlines()\n            list_obj = [obj.rstrip('\\r\\n') for obj in list_obj]\n            fs+=list_obj\n        repeat = len(fs)\n        source_dir_lst = [source_dir for i in range(repeat)]\n        cat_target_dir_lst = [cat_target_dir for i in range(repeat)]\n        sdf_dir_lst = [sdf_dir for i in range(repeat)]\n        vals_lst = [vals for i in range(repeat)]\n        difflevel_lst = [difflevel for i in range(repeat)]\n\n        with Parallel(n_jobs=10) as parallel:\n            parallel(delayed(gen_obj_img_h5)\n            (source_dir, cat_target_dir, sdf_dir,vals, obj, difflevel)\n            for source_dir, cat_target_dir, sdf_dir, vals, obj, difflevel in\n                zip(source_dir_lst, cat_target_dir_lst, sdf_dir_lst, vals_lst, fs, difflevel_lst))\n\ndef read_params(lines):\n    params = []\n    for line in lines:\n        line = line.strip()[1:-2]\n        param = np.fromstring(line, dtype=float, sep=',')\n        params.append(param)\n    return params\n\ndef get_W2O_mat(shift):\n    T_inv = np.asarray(\n        [[1.0, 0., 0., shift[0]],\n         [0., 1.0, 0., shift[1]],\n         [0., 0., 1.0, shift[2]],\n         [0., 0., 0., 1.]]\n    )\n    return T_inv\n\ndef gen_obj_img_h5(source_dir, cat_target_dir, sdf_dir, cat, obj, difflevel):\n    img_dir = os.path.join(source_dir, \"image\",  cat, obj, difflevel)\n    tar_obj_dir = os.path.join(cat_target_dir, obj)\n    os.makedirs(tar_obj_dir, exist_ok=True)\n    sdf_fl = os.path.join(sdf_dir, cat, obj, \"ori_sample.h5\")\n    norm_mat = get_norm_matrix(sdf_fl)\n    rot_mat = get_rotate_matrix(-np.pi / 2)\n    with open(img_dir + \"/rendering_metadata.txt\", 'r') as f:\n        lines = f.read().splitlines()\n        file_lst = ['{0:02d}.png'.format(i) for i in range(len(lines))]\n        param_lst = read_params(lines)\n        for i in range(len(file_lst)):\n            h5_file = os.path.join(tar_obj_dir, file_lst[i][:2] + \".h5\")\n            if os.path.exists(h5_file):\n                try:\n                    with h5py.File(h5_file, 'r') as h5_f:\n                        trans_mat_shape = h5_f[\"trans_mat\"][:].shape[0]\n                        print(\"{} exist! trans first shape is {}\".format(h5_file, str(trans_mat_shape)))\n                        continue\n                except:\n                    print(\"{} exist! but file error\".format(h5_file))\n            camR, _ = get_img_cam(param_lst[i])\n            obj_rot_mat = np.dot(rot90y, camR)\n            img_file = os.path.join(img_dir, file_lst[i])\n            print(img_file)\n            img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)\n            az, el, distance_ratio = param_lst[i][0], param_lst[i][1], param_lst[i][3]\n            K, RT = getBlenderProj(az, el, distance_ratio, img_w=224, img_h=224)\n            W2O_mat = get_W2O_mat((param_lst[i][-3], param_lst[i][-1], -param_lst[i][-2]))\n            trans_mat = np.linalg.multi_dot([K, RT, rot_mat, W2O_mat, norm_mat])\n            trans_mat_right = np.transpose(trans_mat)\n            regress_mat = np.transpose(np.linalg.multi_dot([RT, rot_mat, W2O_mat, norm_mat]))\n\n            with h5py.File(h5_file, 'w') as f1:\n                f1.create_dataset('img_arr', data=img_arr, compression='gzip',\n                                  dtype='uint8', compression_opts=4)\n                f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('K', data=K, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('RT', data=RT, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',\n                                  dtype='float32', compression_opts=4)\n                print(\"write:\", h5_file)\n\n#\n# def gen_obj_img_h5_new(source_dir, cat_target_dir, sdf_dir, vals, obj):\n#     img_dir = os.path.join(source_dir, vals, obj, \"rendering\")\n#     tar_obj_dir = os.path.join(cat_target_dir, obj)\n#     os.makedirs(tar_obj_dir, exist_ok=True)\n#     sdf_fl = os.path.join(sdf_dir, vals, obj, \"ori_sample.h5\")\n#     norm_mat = get_norm_matrix(sdf_fl)\n#     rot_mat = get_rotate_matrix(-np.pi / 2)\n#     with open(img_dir + \"/renderings.txt\", 'r') as f:\n#         lines = f.read().splitlines()\n#         file_lst = [line.strip() for line in lines]\n#         params = np.loadtxt(img_dir + \"/rendering_metadata.txt\")\n#         param_lst = [params[num, ...].astype(np.float32) for num in range(len(file_lst))]\n#         for i in range(len(file_lst)):\n#             h5_file = os.path.join(tar_obj_dir, file_lst[i][:2] + \".h5\")\n#             if os.path.exists(h5_file):\n#                 try:\n#                     with h5py.File(h5_file, 'r') as h5_f:\n#                         trans_mat_shape = h5_f[\"trans_mat\"][:].shape[0]\n#                         print(\"{} exist! trans first shape is {}\".format(h5_file, str(trans_mat_shape)))\n#                         continue\n#                 except:\n#                     print(\"{} exist! but file error\".format(h5_file))\n#             camR, _ = get_img_cam(param_lst[i])\n#             obj_rot_mat = np.dot(rot90y, camR)\n#             img_file = os.path.join(img_dir, file_lst[i])\n#             img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)\n#             az, el, distance_ratio = param_lst[i][0], param_lst[i][1], param_lst[i][3]\n#             K, RT = getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137)\n#             W2O_mat = get_W2O_mat((param_lst[i][-3], param_lst[i][-1], -param_lst[i][-2]))\n#             trans_mat = np.linalg.multi_dot([K, RT, rot_mat, W2O_mat, norm_mat])\n#             trans_mat_right = np.transpose(trans_mat)\n#             regress_mat = np.transpose(np.linalg.multi_dot([RT, rot_mat, W2O_mat, norm_mat]))\n#\n#             with h5py.File(h5_file, 'w') as f1:\n#                 f1.create_dataset('img_arr', data=img_arr, compression='gzip',\n#                                   dtype='uint8', compression_opts=4)\n#                 f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',\n#                                   dtype='float32', compression_opts=4)\n#                 f1.create_dataset('K', data=K, compression='gzip',\n#                                   dtype='float32', compression_opts=4)\n#                 f1.create_dataset('RT', data=RT, compression='gzip',\n#                                   dtype='float32', compression_opts=4)\n#                 f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',\n#                                   dtype='float32', compression_opts=4)\n#                 f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',\n#                                   dtype='float32', compression_opts=4)\n#                 print(\"write:\", h5_file)\n\ndef get_img_cam(param):\n    cam_mat, cam_pos = camera_info(degree2rad(param))\n\n    return cam_mat, cam_pos\n\ndef degree2rad(params):\n    params_new = np.zeros_like(params)\n    params_new[0] = np.deg2rad(params[0] + 180.0)\n    params_new[1] = np.deg2rad(params[1])\n    params_new[2] = np.deg2rad(params[2])\n    return params_new\n\ndef unit(v):\n    norm = np.linalg.norm(v)\n    if norm == 0:\n        return v\n    return v / norm\n\ndef camera_info(param):\n    az_mat = get_az(param[0])\n    el_mat = get_el(param[1])\n    inl_mat = get_inl(param[2])\n    cam_mat = np.transpose(np.matmul(np.matmul(inl_mat, el_mat), az_mat))\n    cam_pos = get_cam_pos(param)\n    return cam_mat, cam_pos\n\ndef get_cam_pos(param):\n    camX = 0\n    camY = 0\n    camZ = param[3]\n    cam_pos = np.array([camX, camY, camZ])\n    return -1 * cam_pos\n\ndef get_az(az):\n    cos = np.cos(az)\n    sin = np.sin(az)\n    mat = np.asarray([cos, 0.0, sin, 0.0, 1.0, 0.0, -1.0 * sin, 0.0, cos], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_el(el):\n    cos = np.cos(el)\n    sin = np.sin(el)\n    mat = np.asarray([1.0, 0.0, 0.0, 0.0, cos, -1.0 * sin, 0.0, sin, cos], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_inl(inl):\n    cos = np.cos(inl)\n    sin = np.sin(inl)\n    # zeros = np.zeros_like(inl)\n    # ones = np.ones_like(inl)\n    mat = np.asarray([cos, -1.0 * sin, 0.0, sin, cos, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)\n    mat = np.reshape(mat, [3, 3])\n    return mat\n\ndef get_img_points(sample_pc, trans_mat_right):\n    sample_pc = sample_pc.reshape((-1,3))\n    homo_pc = np.concatenate((sample_pc, np.ones((sample_pc.shape[0],1),dtype=np.float32)),axis=-1)\n    pc_xyz = np.dot(homo_pc, trans_mat_right).reshape((-1,3))\n    print(\"pc_xyz shape: \", pc_xyz.shape)\n    pc_xy = pc_xyz[:,:2] / np.expand_dims(pc_xyz[:,2], axis=1)\n    return pc_xy.astype(np.int32)\n\ndef get_points(obj_fl):\n    sample_pc = np.zeros((0,3), dtype=np.float32)\n    mesh_lst = trimesh.load_mesh(obj_fl, process=False)\n    if not isinstance(mesh_lst, list):\n        mesh_lst = [mesh_lst]\n    for mesh in mesh_lst:\n        choice = np.random.randint(mesh.vertices.shape[0], size=1000)\n        sample_pc = np.concatenate((sample_pc, mesh.vertices[choice,...]), axis=0) #[choice,...]\n    # color = [[255,0,0], [0,255,0], [0,0,255], [255, 0, 255]]\n    color = 255*np.ones_like(sample_pc,dtype=np.uint8)\n    color[:,0] = 0\n    color[:,1] = 0\n    return sample_pc, np.asarray(color, dtype=np.uint8)\n\ndef get_img(img_h5):\n    with h5py.File(img_h5, 'r') as h5_f:\n        print(\"read\", img_h5)\n        trans_mat= h5_f[\"trans_mat\"][:].astype(np.float32)\n        regress_mat= h5_f[\"regress_mat\"][:].astype(np.float32)\n        obj_rot_mat= h5_f[\"obj_rot_mat\"][:].astype(np.float32)\n        K= h5_f[\"K\"][:].astype(np.float32)\n        img_arr = h5_f[\"img_arr\"][:][:, :, :3].copy()\n        trans_mat2 = np.dot(regress_mat, np.transpose(K))\n        print(trans_mat2-trans_mat)\n        return img_arr, trans_mat, obj_rot_mat, regress_mat\n\ndef test_img_h5(img_h5_fl, num, march_obj_fl):\n    img_arr, trans_mat, obj_rot_mat, regress_mat = get_img(img_h5_fl)\n    new_pts, colors = get_points(march_obj_fl)\n    pc_xy = get_img_points(new_pts, trans_mat)\n    for j in range(pc_xy.shape[0]):\n        y = int(pc_xy[j, 1])\n        x = int(pc_xy[j, 0])\n        # print (y,x)\n        # print(img_arr[y, x, :])\n        # print(tuple([int(x) for x in colors[j]]))\n        cv2.circle(img_arr, (x, y), 3, tuple([int(x) for x in colors[j]]), -1)\n    rot_pc = np.dot(new_pts, obj_rot_mat)\n    np.savetxt(os.path.join(\"send/\", \"{}_{}_{}.txt\".format(\"03001627\", \"184b4797cea77beb5ca1c42bb8ac17a\", str(num))), rot_pc)\n\n    print(\"send/184b4797cea77beb5ca1c42bb8ac17a_{}.png\".format(str(num)))\n    cv2.imwrite(\"send/184b4797cea77beb5ca1c42bb8ac17a_{}.png\".format(str(num)), img_arr)\n\n\nif __name__ == \"__main__\":\n\n    # nohup python -u create_file_lst.py &> create_imgh5.log &\n\n    lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n    difflevel = \"hard\"\n    # new rendering 2d dataset\n    # \"rendered_new_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRendering.v1/\",\n    # \"renderedh5_new_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_new.v1/\",\n    convert_img2h5(raw_dirs[\"rendered_new_dir\"],\n                   raw_dirs[\"renderedh5_new_dir_{}\".format(difflevel)],\n                   lst_dir, cats,\n                   raw_dirs[\"sdf_dir\"], difflevel=difflevel)\n\n\n    # test_img_h5(\"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/05.h5\", 5,\n    #             \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n\n    # gen_obj_img_h5(\"/ssd1/datasets/ShapeNet/ShapeNetRendering\",\n    #    \"send/03001627\", \"/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1/\", \"03001627\", \"184b4797cea77beb5ca1c42bb8ac17a\")\n    #\n    # test_img_h5(\"send/03001627/184b4797cea77beb5ca1c42bb8ac17a/00.h5\",0,\n    #                 \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n    # test_img_h5(\"send/03001627/184b4797cea77beb5ca1c42bb8ac17a/01.h5\",1,\n    #             \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj\")\n"
  },
  {
    "path": "preprocessing/create_point_sdf_fullgrid.py",
    "content": "import create_file_lst\nimport h5py\nimport os\nimport numpy as np\nfrom joblib import Parallel, delayed\nimport trimesh\nfrom scipy.interpolate import RegularGridInterpolator\nimport time\n\nCUR_PATH = os.path.dirname(os.path.realpath(__file__))\n\ndef get_sdf_value(sdf_pt, sdf_params_ph, sdf_ph, sdf_res):\n    num_point = sdf_pt.shape[0]\n    x = np.linspace(sdf_params_ph[0], sdf_params_ph[3], num=sdf_res+1)\n    y = np.linspace(sdf_params_ph[1], sdf_params_ph[4], num=sdf_res+1)\n    z = np.linspace(sdf_params_ph[2], sdf_params_ph[5], num=sdf_res+1)\n    my_interpolating_function = RegularGridInterpolator((z, y, x), sdf_ph)\n    sdf_value = my_interpolating_function(sdf_pt)\n    print(\"sdf_value:\", sdf_value.shape)\n    return np.expand_dims(sdf_value, axis=1)\n\ndef get_sdf(sdf_file, sdf_res):\n    intsize = 4\n    floatsize = 8\n    sdf = {\n        \"param\": [],\n        \"value\": []\n    }\n    with open(sdf_file, \"rb\") as f:\n        try:\n            bytes = f.read()\n            ress = np.fromstring(bytes[:intsize * 3], dtype=np.int32)\n            if -1 * ress[0] != sdf_res or ress[1] != sdf_res or ress[2] != sdf_res:\n                raise Exception(sdf_file, \"res not consistent with \", str(sdf_res))\n            positions = np.fromstring(bytes[intsize * 3:intsize * 3 + floatsize * 6], dtype=np.float64)\n            # bottom left corner, x,y,z and top right corner, x, y, z\n            sdf[\"param\"] = [positions[0], positions[1], positions[2],\n                            positions[3], positions[4], positions[5]]\n            sdf[\"param\"] = np.float32(sdf[\"param\"])\n            sdf[\"value\"] = np.fromstring(bytes[intsize * 3 + floatsize * 6:], dtype=np.float32)\n            sdf[\"value\"] = np.reshape(sdf[\"value\"], (sdf_res + 1, sdf_res + 1, sdf_res + 1))\n        finally:\n            f.close()\n    return sdf\n\ndef get_offset_ball(num, bandwidth):\n    u = np.random.normal(0, 1, size=(num,1))\n    v = np.random.normal(0, 1, size=(num,1))\n    w = np.random.normal(0, 1, size=(num,1))\n    r = np.random.uniform(0, 1, size=(num,1)) ** (1. / 3) * bandwidth\n    norm = np.linalg.norm(np.concatenate([u, v, w], axis=1),axis=1, keepdims=1)\n    # print(\"u.shape\",u.shape)\n    # print(\"norm.shape\",norm.shape)\n    # print(\"r.shape\",r.shape)\n    (x, y, z) = r * (u, v, w) / norm\n    return np.concatenate([x,y,z],axis=1)\n\ndef get_offset_cube(num, bandwidth):\n    u = np.random.normal(0, 1, size=(num,1))\n    v = np.random.normal(0, 1, size=(num,1))\n    w = np.random.normal(0, 1, size=(num,1))\n    r = np.random.uniform(0, 1, size=(num,1)) ** (1. / 3) * bandwidth\n    norm = np.linalg.norm(np.concatenate([u, v, w], axis=1),axis=1, keepdims=1)\n    # print(\"u.shape\",u.shape)\n    # print(\"norm.shape\",norm.shape)\n    # print(\"r.shape\",r.shape)\n    (x, y, z) = r * (u, v, w) / norm\n    return np.concatenate([x,y,z],axis=1)\n\ndef sample_sdf(cat_id, num_sample, bandwidth, iso_val, sdf_dict, sdf_res, reduce):\n    start = time.time()\n    params = sdf_dict[\"param\"]\n    sdf_values = sdf_dict[\"value\"].flatten()\n    # print(\"np.min(sdf_values), np.mean(sdf_values), np.max(sdf_values)\",\n    #       np.min(sdf_values), np.mean(sdf_values), np.max(sdf_values))\n    x = np.linspace(params[0], params[3], num=sdf_res // reduce + 1).astype(np.float32)\n    y = np.linspace(params[1], params[4], num=sdf_res // reduce + 1).astype(np.float32)\n    z = np.linspace(params[2], params[5], num=sdf_res // reduce + 1).astype(np.float32)\n    z_vals, y_vals, x_vals = np.meshgrid(z, y, x, indexing='ij')\n    print(\"x_vals\", x_vals[0, 0, sdf_res // reduce])\n    x_original = np.linspace(params[0], params[3], num=sdf_res + 1).astype(np.float32)\n    y_original = np.linspace(params[1], params[4], num=sdf_res + 1).astype(np.float32)\n    z_original = np.linspace(params[2], params[5], num=sdf_res + 1).astype(np.float32)\n    x_ind = np.arange(sdf_res // reduce + 1).astype(np.int32)\n    y_ind = np.arange(sdf_res // reduce + 1).astype(np.int32)\n    z_ind = np.arange(sdf_res // reduce + 1).astype(np.int32)\n    zv, yv, xv = np.meshgrid(z_ind, y_ind, x_ind, indexing='ij')\n    choosen_ind = xv * reduce + yv * (sdf_res+1) * reduce + zv * (sdf_res+1)**2 * reduce\n    choosen_ind = np.asarray(choosen_ind, dtype=np.int32).reshape(-1)\n    vals = sdf_values[choosen_ind]\n    # sdf_pt_val = np.stack((x_vals, y_vals, z_vals, vals), axis = -1)\n    sdf_pt_val = np.expand_dims(vals, axis= -1 )\n    # print(\"np.min(vals), np.mean(vals), np.max(vals)\", np.min(vals), np.mean(vals), np.max(vals))\n    print(\"sdf_pt_val.shape\", sdf_pt_val.shape)\n    print(\"sample_sdf: {} s\".format(time.time()-start))\n    return sdf_pt_val, check_insideout(cat_id, sdf_values, sdf_res, x_original,y_original,z_original)\n\ndef check_insideout(cat_id, sdf_val, sdf_res, x, y, z):\n    # \"chair\": \"03001627\",\n    # \"bench\": \"02828884\",\n    # \"cabinet\": \"02933112\",\n    # \"car\": \"02958343\",\n    # \"airplane\": \"02691156\",\n    # \"display\": \"03211117\",\n    # \"lamp\": \"03636649\",\n    # \"speaker\": \"03691459\",\n    # \"rifle\": \"04090263\",\n    # \"sofa\": \"04256520\",\n    # \"table\": \"04379243\",\n    # \"phone\": \"04401088\",\n    # \"watercraft\": \"04530566\"\n    if cat_id in [\"02958343\", \"02691156\", \"04530566\"]:\n        x_ind = np.argmin(np.absolute(x))\n        y_ind = np.argmin(np.absolute(y))\n        z_ind = np.argmin(np.absolute(z))\n        all_val = sdf_val.flatten()\n        num_val = all_val[x_ind+y_ind*(sdf_res+1)+z_ind*(sdf_res+1)**2]\n        return num_val > 0.0\n    else:\n        return False\n\ndef create_h5_sdf_pt(cat_id, h5_file, sdf_file, flag_file, norm_obj_file,\n         centroid, m, sdf_res, num_sample, bandwidth, iso_val, max_verts, normalize, reduce=8):\n    sdf_dict = get_sdf(sdf_file, sdf_res)\n    ori_verts = np.asarray([0.0,0.0,0.0], dtype=np.float32).reshape((1,3))\n    # Nx3(x,y,z)\n    print(\"ori_verts\", ori_verts.shape)\n    samplesdf, is_insideout = sample_sdf(cat_id, num_sample, bandwidth, iso_val, sdf_dict, sdf_res, reduce)  # (N*8)x4 (x,y,z)\n    if is_insideout:\n        with open(flag_file, \"w\") as f:\n            f.write(\"mid point sdf val > 0\")\n        print(\"insideout !!:\", sdf_file)\n    else:\n        os.remove(flag_file) if os.path.exists(flag_file) else None\n    print(\"samplesdf\", samplesdf.shape)\n    print(\"start to write\",h5_file)\n    norm_params = np.concatenate((centroid, np.asarray([m]).astype(np.float32)))\n    f1 = h5py.File(h5_file, 'w')\n    f1.create_dataset('pc_sdf_original', data=ori_verts.astype(np.float32), compression='gzip', compression_opts=4)\n    f1.create_dataset('pc_sdf_sample', data=samplesdf.astype(np.float32), compression='gzip', compression_opts=4)\n    f1.create_dataset('norm_params', data=norm_params, compression='gzip', compression_opts=4)\n    f1.create_dataset('sdf_params', data=sdf_dict[\"param\"], compression='gzip', compression_opts=4)\n    f1.close()\n    print(\"end writing\",h5_file)\n    command_str = \"rm -rf \" + norm_obj_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n    command_str = \"rm -rf \" + sdf_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n\ndef get_param_from_h5(sdf_h5_file, cat_id, obj):\n    h5_f = h5py.File(sdf_h5_file, 'r')\n    try:\n        if 'norm_params' in h5_f.keys():\n            norm_params = h5_f['norm_params'][:]\n        else:\n            raise Exception(cat_id, obj, \"no sdf and sample\")\n    finally:\n        h5_f.close()\n    return norm_params[:3], norm_params[3]\n\ndef get_normalize_mesh(model_file, norm_sdf_file, cat_id, obj, sdf_sub_dir):\n\n    print(\"load mesh from \", model_file)\n    mesh_list = trimesh.load_mesh(model_file, process=False)\n    if not isinstance(mesh_list, list):\n        mesh_list = [mesh_list]\n    largest_ind = 0\n    largest_sur = 0\n    for idx, mesh in enumerate(mesh_list):\n        area = np.sum(mesh.area_faces)\n        if largest_sur < area:\n            largest_ind = idx\n            largest_sur = area\n    mesh = mesh_list[largest_ind]\n    centroid, m = get_param_from_h5(norm_sdf_file, cat_id, obj)\n    mesh.vertices = (mesh.vertices - centroid) / float(m)\n    obj_file = os.path.join(sdf_sub_dir,\"pc_norm.obj\")\n    print(\"exporting\", obj_file)\n    trimesh.exchange.export.export_mesh(mesh, obj_file, file_type=\"obj\")\n    print(\"export_mesh\", obj_file)\n    return obj_file, centroid, m\n\ndef create_one_sdf(sdfcommand, res, expand_rate, sdf_file, obj_file, indx, g=0.0):\n\n    command_str = sdfcommand + \" \" + obj_file + \" \" + str(res) + \" \" + str(res) + \\\n       \" \" + str(res) + \" -s \" + \" -e \" + str(expand_rate) + \" -o \" + str(indx) + \".dist -m 1\"\n    if g > 0.0:\n        command_str += \" -g \" + str(g)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    command_str2 = \"mv \" + str(indx)+\".dist \" + sdf_file\n    print(\"command:\", command_str2)\n    os.system(command_str2)\n\n\ndef create_sdf_obj(sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_sdf_dir, cat_sdf_dir, obj,\n       res, iso_val, expand_rate, indx, ish5, normalize, num_sample, bandwidth, max_verts, cat_id, g, reduce):\n    obj=obj.rstrip('\\r\\n')\n    sdf_sub_dir = os.path.join(cat_sdf_dir, obj)\n    norm_sdf_sub_dir = os.path.join(cat_norm_sdf_dir, obj)\n    if not os.path.exists(sdf_sub_dir): os.makedirs(sdf_sub_dir)\n    assert os.path.exists(norm_sdf_sub_dir)\n    sdf_file = os.path.join(sdf_sub_dir, \"isosurf.sdf\")\n    flag_file = os.path.join(sdf_sub_dir, \"isinsideout.txt\")\n    norm_sdf_file = os.path.join(norm_sdf_sub_dir, \"ori_sample.h5\")\n    h5_file = os.path.join(sdf_sub_dir, \"ori_sample.h5\")\n    if ish5 and os.path.exists(h5_file) and not os.path.exists(flag_file):\n        print(\"skip existed: \", h5_file)\n    elif not ish5 and os.path.exists(sdf_file):\n        print(\"skip existed: \", sdf_file)\n    else:\n        model_file = os.path.join(cat_mesh_dir, obj, \"models\", \"model_normalized.obj\")\n        # try:\n        print(\"creating\", sdf_file)\n        if normalize:\n            norm_obj_file, centroid, m = get_normalize_mesh(\n                model_file, norm_sdf_file, cat_id, obj, sdf_sub_dir)\n\n        create_one_sdf(sdfcommand, res, expand_rate, sdf_file, norm_obj_file, indx, g=g)\n        # create_one_cube_obj(marching_cube_command, iso_val, sdf_file, cube_obj_file)\n        # change to h5\n        if ish5:\n            create_h5_sdf_pt(cat_id,h5_file, sdf_file, flag_file, norm_obj_file,\n                 centroid, m, res, num_sample, bandwidth, iso_val, max_verts, normalize, reduce=reduce)\n        # except:\n        #     print(\"%%%%%%%%%%%%%%%%%%%%%%%% fail to process \", model_file)\n\ndef create_one_cube_obj(marching_cube_command, i, sdf_file, cube_obj_file):\n    command_str = marching_cube_command + \" \" + sdf_file + \" \" + cube_obj_file + \" -i \" + str(i)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    return cube_obj_file\n\ndef create_sdf(sdfcommand, marching_cube_command, LIB_command, num_sample, bandwidth, res, expand_rate,\n               all_cats, cats, raw_dirs, lst_dir, iso_val, max_verts, ish5= True, normalize=True, g=0.00,\n               param_dir=\"256_expr_1.2_bw_0.1\", reduce=4):\n    '''\n    Usage: SDFGen <filename> <dx> <padding>\n    Where:\n        res is number of grids on xyz dimension\n        w is narrowband width\n        expand_rate is sdf range of max x,y,z\n    '''\n    print(\"command:\", LIB_command)\n    os.system(LIB_command)\n    sdf_dir=raw_dirs[\"sdf_full_dir\"]\n    if not os.path.exists(sdf_dir): os.makedirs(sdf_dir)\n    start=0\n    for catnm in cats.keys():\n        cat_id = cats[catnm]\n        cat_sdf_dir = os.path.join(sdf_dir, cat_id)\n        if not os.path.exists(cat_sdf_dir): os.makedirs(cat_sdf_dir)\n        cat_mesh_dir = os.path.join(raw_dirs[\"mesh_dir\"], cat_id)\n        cat_norm_sdf_dir = os.path.join(raw_dirs[\"sdf_dir\"], cat_id)\n        list_obj=[]\n        with open(lst_dir+\"/\"+str(cat_id)+\"_test.lst\", \"r\") as f:\n            list_obj = f.readlines()\n        with open(lst_dir+\"/\"+str(cat_id)+\"_train.lst\", \"r\") as f:\n            list_obj += f.readlines()\n        # print(list_obj)\n        repeat = len(list_obj)\n        indx_lst = [i for i in range(start, start+repeat)]\n        sdfcommand_lst=[sdfcommand for i in range(repeat)]\n        marching_cube_command_lst=[marching_cube_command for i in range(repeat)]\n        cat_mesh_dir_lst=[cat_mesh_dir for i in range(repeat)]\n        cat_norm_sdf_dir_lst=[cat_norm_sdf_dir for i in range(repeat)]\n        cat_sdf_dir_lst=[cat_sdf_dir for i in range(repeat)]\n        res_lst=[res for i in range(repeat)]\n        expand_rate_lst=[expand_rate for i in range(repeat)]\n        normalize_lst=[normalize for i in range(repeat)]\n        iso_val_lst=[iso_val for i in range(repeat)]\n        ish5_lst=[ish5 for i in range(repeat)]\n        num_sample_lst=[num_sample for i in range(repeat)]\n        bandwidth_lst=[bandwidth for i in range(repeat)]\n        max_verts_lst=[max_verts for i in range(repeat)]\n        cat_id_lst=[cat_id for i in range(repeat)]\n        g_lst=[g for i in range(repeat)]\n        reduce_lst=[reduce for i in range(repeat)]\n        with Parallel(n_jobs=5) as parallel:\n            parallel(delayed(create_sdf_obj)\n            (sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_sdf_dir, cat_sdf_dir, obj, res,\n             iso_val, expand_rate, indx, ish5, norm, num_sample, bandwidth, max_verts,cat_id, g, reduce)\n            for sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_sdf_dir, cat_sdf_dir, obj,\n                res, iso_val, expand_rate, indx, ish5, norm, num_sample, bandwidth, max_verts,cat_id, g, reduce_lst\n                in zip(sdfcommand_lst,\n                marching_cube_command_lst,\n                cat_mesh_dir_lst,\n                cat_norm_sdf_dir_lst,\n                cat_sdf_dir_lst,\n                list_obj,\n                res_lst, iso_val_lst,\n                expand_rate_lst,\n                indx_lst, ish5_lst, normalize_lst,num_sample_lst,\n                bandwidth_lst, max_verts_lst,cat_id_lst, g_lst, reduce_lst))\n        start+=repeat\n    print(\"finish all\")\n\n# def test_sdf(sdf_h5_file):\n#     h5_f = h5py.File(sdf_h5_file, 'r')\n#     red = np.asarray([255.0, 0, 0]).astype(np.float32)\n#     blue = np.asarray([0, 0, 255.0]).astype(np.float32)\n#     try:\n#         if ('pc_sdf_original' in h5_f.keys() and 'pc_sdf_sample' in h5_f.keys()):\n#             ori_sdf = h5_f['pc_sdf_original'][:]\n#             sample_sdf = np.reshape(h5_f['pc_sdf_sample'][:], (-1, 4))\n#             ori_pt, ori_sdf_val = ori_sdf[:, :3], ori_sdf[:, 3]\n#             sample_pt, sample_sdf_val = sample_sdf[:, :3], sample_sdf[:, 3]\n#             minval, maxval = np.min(ori_sdf_val), np.max(ori_sdf_val)\n#             sdf_pt_color = np.zeros([ori_pt.shape[0], 6], dtype=np.float32)\n#             sdf_pt_color[:, :3] = ori_pt\n#             for i in range(sdf_pt_color.shape[0]):\n#                 sdf_pt_color[i, 3:] = red + (blue - red) * (\n#                             float(ori_sdf_val[i] - minval) / float(maxval - minval))\n#             np.savetxt(\"./ori.txt\", sdf_pt_color)\n#\n#             sample_pt_color = np.zeros([sample_pt.shape[0], 6], dtype=np.float32)\n#             sample_pt_color[:, :3] = sample_pt\n#             minval, maxval = np.min(sample_sdf_val), np.max(sample_sdf_val)\n#             for i in range(sample_pt_color.shape[0]):\n#                 sample_pt_color[i, 3:] = red + (blue - red) * (\n#                         float(sample_sdf_val[i] - minval) / float(maxval - minval))\n#             np.savetxt(\"./sample.txt\", sample_pt_color)\n#     finally:\n#         h5_f.close()\n\n\n\nif __name__ == \"__main__\":\n\n    # nohup python -u create_point_sdf_fullgrid.py &> createfull.log &\n    lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\n\n\n    #  full set\n    create_sdf(\"/home/xharlie/dev/isosurface/computeDistanceField\",\n               \"/home/xharlie/dev/isosurface/computeMarchingCubes\",\n               \"source /home/xharlie/dev/isosurface/LIB_PATH\", 274625, 0.1,\n               256, 1.2, all_cats, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.00, reduce=4)\n\n\n    create_sdf(\"/home/xharlie/dev/isosurface/computeDistanceField\",\n               \"/home/xharlie/dev/isosurface/computeMarchingCubes\",\n               \"source /home/xharlie/dev/isosurface/LIB_PATH\", 274625, 0.1,\n               256, 1.2, all_cats, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.03, reduce=4)\n\n    create_sdf(\"/home/xharlie/dev/isosurface/computeDistanceField\",\n               \"/home/xharlie/dev/isosurface/computeMarchingCubes\",\n               \"source /home/xharlie/dev/isosurface/LIB_PATH\", 274625, 0.1,\n               256, 1.2, all_cats, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.05, reduce=4)\n\n    create_sdf(\"/home/xharlie/dev/isosurface/computeDistanceField\",\n               \"/home/xharlie/dev/isosurface/computeMarchingCubes\",\n               \"source /home/xharlie/dev/isosurface/LIB_PATH\", 274625, 0.1,\n               256, 1.2, all_cats, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.06, reduce=4)\n\n    create_sdf(\"/home/xharlie/dev/isosurface/computeDistanceField\",\n               \"/home/xharlie/dev/isosurface/computeMarchingCubes\",\n               \"source /home/xharlie/dev/isosurface/LIB_PATH\", 274625, 0.1,\n               256, 1.2, all_cats, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.00, reduce=4)\n"
  },
  {
    "path": "preprocessing/create_point_sdf_grid.py",
    "content": "import create_file_lst\nimport h5py\nimport os\nimport numpy as np\nimport pymesh\nfrom joblib import Parallel, delayed\nimport trimesh\nfrom scipy.interpolate import RegularGridInterpolator\nimport time\nimport argparse\n\nCUR_PATH = os.path.dirname(os.path.realpath(__file__))\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--thread_num', type=int, default='9', help='how many objs are creating at the same time')\nparser.add_argument('--category', type=str, default=\"all\", help='Which single class to generate on [default: all, can '\n                                                                'be chair or plane, etc.]')\nFLAGS = parser.parse_args()\n\ndef get_sdf_value(sdf_pt, sdf_params_ph, sdf_ph, sdf_res):\n    x = np.linspace(sdf_params_ph[0], sdf_params_ph[3], num=sdf_res+1)\n    y = np.linspace(sdf_params_ph[1], sdf_params_ph[4], num=sdf_res+1)\n    z = np.linspace(sdf_params_ph[2], sdf_params_ph[5], num=sdf_res+1)\n    my_interpolating_function = RegularGridInterpolator((z, y, x), sdf_ph)\n    sdf_value = my_interpolating_function(sdf_pt)\n    print(\"sdf_value:\", sdf_value.shape)\n    return np.expand_dims(sdf_value, axis=1)\n\ndef get_sdf(sdf_file, sdf_res):\n    intsize = 4\n    floatsize = 8\n    sdf = {\n        \"param\": [],\n        \"value\": []\n    }\n    with open(sdf_file, \"rb\") as f:\n        try:\n            bytes = f.read()\n            ress = np.fromstring(bytes[:intsize * 3], dtype=np.int32)\n            if -1 * ress[0] != sdf_res or ress[1] != sdf_res or ress[2] != sdf_res:\n                raise Exception(sdf_file, \"res not consistent with \", str(sdf_res))\n            positions = np.fromstring(bytes[intsize * 3:intsize * 3 + floatsize * 6], dtype=np.float64)\n            # bottom left corner, x,y,z and top right corner, x, y, z\n            sdf[\"param\"] = [positions[0], positions[1], positions[2],\n                            positions[3], positions[4], positions[5]]\n            sdf[\"param\"] = np.float32(sdf[\"param\"])\n            sdf[\"value\"] = np.fromstring(bytes[intsize * 3 + floatsize * 6:], dtype=np.float32)\n            sdf[\"value\"] = np.reshape(sdf[\"value\"], (sdf_res + 1, sdf_res + 1, sdf_res + 1))\n        finally:\n            f.close()\n    return sdf\n\ndef get_offset_ball(num, bandwidth):\n    u = np.random.normal(0, 1, size=(num,1))\n    v = np.random.normal(0, 1, size=(num,1))\n    w = np.random.normal(0, 1, size=(num,1))\n    r = np.random.uniform(0, 1, size=(num,1)) ** (1. / 3) * bandwidth\n    norm = np.linalg.norm(np.concatenate([u, v, w], axis=1),axis=1, keepdims=1)\n    # print(\"u.shape\",u.shape)\n    # print(\"norm.shape\",norm.shape)\n    # print(\"r.shape\",r.shape)\n    (x, y, z) = r * (u, v, w) / norm\n    return np.concatenate([x,y,z],axis=1)\n\ndef get_offset_cube(num, bandwidth):\n    u = np.random.normal(0, 1, size=(num,1))\n    v = np.random.normal(0, 1, size=(num,1))\n    w = np.random.normal(0, 1, size=(num,1))\n    r = np.random.uniform(0, 1, size=(num,1)) ** (1. / 3) * bandwidth\n    norm = np.linalg.norm(np.concatenate([u, v, w], axis=1),axis=1, keepdims=1)\n    (x, y, z) = r * (u, v, w) / norm\n    return np.concatenate([x,y,z],axis=1)\n\ndef sample_sdf(cat_id, num_sample, bandwidth, iso_val, sdf_dict, sdf_res):\n    start = time.time()\n    percentages = [[-1. * bandwidth, -1. * bandwidth * 0.30, int(num_sample * 0.25)],\n                  [-1. * bandwidth * 0.30, 0, int(num_sample * 0.25)],\n                  [0, bandwidth * 0.30, int(num_sample * 0.25)],\n                  [bandwidth * 0.30, bandwidth, int(num_sample * 0.25)]]\n    params = sdf_dict[\"param\"]\n    sdf_values = sdf_dict[\"value\"].flatten()\n    # print(\"np.min(sdf_values), np.mean(sdf_values), np.max(sdf_values)\",\n    #       np.min(sdf_values), np.mean(sdf_values), np.max(sdf_values))\n    x = np.linspace(params[0], params[3], num=sdf_res + 1).astype(np.float32)\n    y = np.linspace(params[1], params[4], num=sdf_res + 1).astype(np.float32)\n    z = np.linspace(params[2], params[5], num=sdf_res + 1).astype(np.float32)\n    dis = sdf_values - iso_val\n    sdf_pt_val = np.zeros((0,4), dtype=np.float32)\n    for i in range(len(percentages)):\n        ind = np.argwhere((dis >= percentages[i][0]) & (dis < percentages[i][1]))\n        if len(ind) < percentages[i][2]:\n            if i < len(percentages)-1:\n                percentages[i+1][2] += percentages[i][2] - len(ind)\n            percentages[i][2] = len(ind)\n        if len(ind) == 0:\n            print(\"len(ind) ==0 for cate i\")\n            continue\n        choice = np.random.randint(len(ind), size=percentages[i][2])\n        choosen_ind = ind[choice]\n        x_ind = choosen_ind % (sdf_res + 1)\n        y_ind = (choosen_ind // (sdf_res + 1)) % (sdf_res + 1)\n        z_ind = choosen_ind // (sdf_res + 1) ** 2\n        x_vals = x[x_ind]\n        y_vals = y[y_ind]\n        z_vals = z[z_ind]\n        vals = sdf_values[choosen_ind]\n        sdf_pt_val_bin = np.concatenate((x_vals, y_vals, z_vals, vals), axis = -1)\n        # print(\"np.min(vals), np.mean(vals), np.max(vals)\", np.min(vals), np.mean(vals), np.max(vals))\n        print(\"sdf_pt_val_bin.shape\", sdf_pt_val_bin.shape)\n        sdf_pt_val = np.concatenate((sdf_pt_val, sdf_pt_val_bin), axis = 0)\n    print(\"percentages\", percentages)\n    print(\"sample_sdf: {} s\".format(time.time()-start))\n    return sdf_pt_val, check_insideout(cat_id, sdf_values, sdf_res, x,y,z)\n\ndef check_insideout(cat_id, sdf_val, sdf_res, x, y, z):\n    # \"chair\": \"03001627\",\n    # \"bench\": \"02828884\",\n    # \"cabinet\": \"02933112\",\n    # \"car\": \"02958343\",\n    # \"airplane\": \"02691156\",\n    # \"display\": \"03211117\",\n    # \"lamp\": \"03636649\",\n    # \"speaker\": \"03691459\",\n    # \"rifle\": \"04090263\",\n    # \"sofa\": \"04256520\",\n    # \"table\": \"04379243\",\n    # \"phone\": \"04401088\",\n    # \"watercraft\": \"04530566\"\n    if cat_id in [\"02958343\", \"02691156\", \"04530566\"]:\n        x_ind = np.argmin(np.absolute(x))\n        y_ind = np.argmin(np.absolute(y))\n        z_ind = np.argmin(np.absolute(z))\n        all_val = sdf_val.flatten()\n        num_val = all_val[x_ind+y_ind*(sdf_res+1)+z_ind*(sdf_res+1)**2]\n        return num_val > 0.0\n    else:\n        return False\n\ndef create_h5_sdf_pt(cat_id, h5_file, sdf_file, flag_file, cube_obj_file, norm_obj_file,\n         centroid, m, sdf_res, num_sample, bandwidth, iso_val, max_verts, normalize):\n    sdf_dict = get_sdf(sdf_file, sdf_res)\n    ori_verts = np.asarray([0.0,0.0,0.0], dtype=np.float32).reshape((1,3))\n    print(\"ori_verts\", ori_verts.shape)\n    samplesdf, is_insideout = sample_sdf(cat_id, num_sample, bandwidth, iso_val, sdf_dict, sdf_res)  # (N*8)x4 (x,y,z)\n    if is_insideout:\n        with open(flag_file, \"w\") as f:\n            f.write(\"mid point sdf val > 0\")\n        print(\"insideout !!:\", sdf_file)\n    else:\n        os.remove(flag_file) if os.path.exists(flag_file) else None\n    print(\"samplesdf\", samplesdf.shape)\n    print(\"start to write\",h5_file)\n    norm_params = np.concatenate((centroid, np.asarray([m]).astype(np.float32)))\n    f1 = h5py.File(h5_file, 'w')\n    f1.create_dataset('pc_sdf_original', data=ori_verts.astype(np.float32), compression='gzip', compression_opts=4)\n    f1.create_dataset('pc_sdf_sample', data=samplesdf.astype(np.float32), compression='gzip', compression_opts=4)\n    f1.create_dataset('norm_params', data=norm_params, compression='gzip', compression_opts=4)\n    f1.create_dataset('sdf_params', data=sdf_dict[\"param\"], compression='gzip', compression_opts=4)\n    f1.close()\n    print(\"end writing\",h5_file)\n    command_str = \"rm -rf \" + norm_obj_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n    command_str = \"rm -rf \" + sdf_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n\n\ndef get_normalize_mesh(model_file, norm_mesh_sub_dir):\n    total = 16384\n    print(\"trimesh_load:\", model_file)\n    mesh_list = trimesh.load_mesh(model_file, process=False)\n    if not isinstance(mesh_list, list):\n        mesh_list = [mesh_list]\n    area_sum = 0\n    area_lst = []\n    for idx, mesh in enumerate(mesh_list):\n        area = np.sum(mesh.area_faces)\n        area_lst.append(area)\n        area_sum+=area\n    area_lst = np.asarray(area_lst)\n    amount_lst = (area_lst * total / area_sum).astype(np.int32)\n    points_all=np.zeros((0,3), dtype=np.float32)\n    for i in range(amount_lst.shape[0]):\n        mesh = mesh_list[i]\n        print(\"start sample surface of \", mesh.faces.shape[0])\n        points, index = trimesh.sample.sample_surface(mesh, amount_lst[i])\n        print(\"end sample surface\")\n        points_all = np.concatenate([points_all,points], axis=0)\n    centroid = np.mean(points_all, axis=0)\n    points_all = points_all - centroid\n    m = np.max(np.sqrt(np.sum(points_all ** 2, axis=1)))\n    obj_file = os.path.join(norm_mesh_sub_dir, \"pc_norm.obj\")\n    ori_mesh = pymesh.load_mesh(model_file)\n    print(\"centroid, m\", centroid, m)\n    pymesh.save_mesh_raw(obj_file, (ori_mesh.vertices - centroid) / float(m), ori_mesh.faces);\n    print(\"export_mesh\", obj_file)\n    return obj_file, centroid, m\n\ndef create_one_sdf(sdfcommand, res, expand_rate, sdf_file, obj_file, indx, g=0.0):\n\n    command_str = sdfcommand + \" \" + obj_file + \" \" + str(res) + \" \" + str(res) + \\\n       \" \" + str(res) + \" -s \" + \" -e \" + str(expand_rate) + \" -o \" + str(indx) + \".dist -m 1\"\n    if g > 0.0:\n        command_str += \" -g \" + str(g)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    command_str2 = \"mv \" + str(indx)+\".dist \" + sdf_file\n    print(\"command:\", command_str2)\n    os.system(command_str2)\n\n\ndef create_sdf_obj(sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_mesh_dir, cat_sdf_dir, obj,\n                   res, iso_val, expand_rate, indx, ish5, normalize, num_sample, bandwidth,\n                   max_verts, cat_id, g, version, skip_all_exist):\n    obj=obj.rstrip('\\r\\n')\n    sdf_sub_dir = os.path.join(cat_sdf_dir, obj)\n    norm_mesh_sub_dir = os.path.join(cat_norm_mesh_dir, obj)\n    if not os.path.exists(sdf_sub_dir): os.makedirs(sdf_sub_dir)\n    if not os.path.exists(norm_mesh_sub_dir): os.makedirs(norm_mesh_sub_dir)\n    sdf_file = os.path.join(sdf_sub_dir, \"isosurf.sdf\")\n    flag_file = os.path.join(sdf_sub_dir, \"isinsideout.txt\")\n    cube_obj_file = os.path.join(norm_mesh_sub_dir, \"isosurf.obj\")\n    h5_file = os.path.join(sdf_sub_dir, \"ori_sample.h5\")\n    if ish5 and os.path.exists(h5_file) and (skip_all_exist or not os.path.exists(flag_file)):\n        print(\"skip existed: \", h5_file)\n    elif not ish5 and os.path.exists(sdf_file):\n        print(\"skip existed: \", sdf_file)\n    else:\n        if version == 1:\n            model_file = os.path.join(cat_mesh_dir, obj, \"model.obj\")\n        else:\n            model_file = os.path.join(cat_mesh_dir, obj, \"models\", \"model_normalized.obj\")\n        # try:\n        print(\"creating\", sdf_file)\n        if normalize:\n            norm_obj_file, centroid, m = get_normalize_mesh(model_file, norm_mesh_sub_dir)\n\n        create_one_sdf(sdfcommand, res, expand_rate, sdf_file, norm_obj_file, indx, g=g)\n        create_one_cube_obj(marching_cube_command, iso_val, sdf_file, cube_obj_file)\n        # change to h5\n        if ish5:\n            create_h5_sdf_pt(cat_id,h5_file, sdf_file, flag_file, cube_obj_file, norm_obj_file,\n                 centroid, m, res, num_sample, bandwidth, iso_val, max_verts, normalize)\n        # except:\n        #     print(\"%%%%%%%%%%%%%%%%%%%%%%%% fail to process \", model_file)\n\ndef create_one_cube_obj(marching_cube_command, i, sdf_file, cube_obj_file):\n    command_str = marching_cube_command + \" \" + sdf_file + \" \" + cube_obj_file + \" -i \" + str(i)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    return cube_obj_file\n\ndef create_sdf(sdfcommand, marching_cube_command, LIB_command, num_sample,\n       bandwidth, res, expand_rate, cats, raw_dirs, lst_dir, iso_val,\n       max_verts, ish5= True, normalize=True, g=0.00, version=2, skip_all_exist=False):\n    '''\n    Usage: SDFGen <filename> <dx> <padding>\n    Where:\n        res is number of grids on xyz dimension\n        w is narrowband width\n        expand_rate is sdf range of max x,y,z\n    '''\n    print(\"command:\", LIB_command)\n    os.system(LIB_command)\n    sdf_dir=raw_dirs[\"sdf_dir\"]\n    if not os.path.exists(sdf_dir): os.makedirs(sdf_dir)\n    start=0\n    for catnm in cats.keys():\n        cat_id = cats[catnm]\n        cat_sdf_dir = os.path.join(sdf_dir, cat_id)\n        if not os.path.exists(cat_sdf_dir): os.makedirs(cat_sdf_dir)\n        cat_mesh_dir = os.path.join(raw_dirs[\"mesh_dir\"], cat_id)\n        cat_norm_mesh_dir = os.path.join(raw_dirs[\"norm_mesh_dir\"], cat_id)\n        with open(lst_dir+\"/\"+str(cat_id)+\"_test.lst\", \"r\") as f:\n            list_obj = f.readlines()\n        with open(lst_dir+\"/\"+str(cat_id)+\"_train.lst\", \"r\") as f:\n            list_obj += f.readlines()\n        # print(list_obj)\n        repeat = len(list_obj)\n        indx_lst = [i for i in range(start, start+repeat)]\n        sdfcommand_lst=[sdfcommand for i in range(repeat)]\n        marching_cube_command_lst=[marching_cube_command for i in range(repeat)]\n        cat_mesh_dir_lst=[cat_mesh_dir for i in range(repeat)]\n        cat_norm_mesh_dir_lst=[cat_norm_mesh_dir for i in range(repeat)]\n        cat_sdf_dir_lst=[cat_sdf_dir for i in range(repeat)]\n        res_lst=[res for i in range(repeat)]\n        expand_rate_lst=[expand_rate for i in range(repeat)]\n        normalize_lst=[normalize for i in range(repeat)]\n        iso_val_lst=[iso_val for i in range(repeat)]\n        ish5_lst=[ish5 for i in range(repeat)]\n        num_sample_lst=[num_sample for i in range(repeat)]\n        bandwidth_lst=[bandwidth for i in range(repeat)]\n        max_verts_lst=[max_verts for i in range(repeat)]\n        cat_id_lst=[cat_id for i in range(repeat)]\n        g_lst=[g for i in range(repeat)]\n        version_lst=[version for i in range(repeat)]\n        skip_all_exist_lst=[skip_all_exist for i in range(repeat)]\n        with Parallel(n_jobs=FLAGS.thread_num) as parallel:\n            parallel(delayed(create_sdf_obj)\n            (sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_mesh_dir, cat_sdf_dir, obj, res,\n             iso_val, expand_rate, indx, ish5, norm, num_sample, bandwidth, max_verts,cat_id,g,version, skip_all_exist)\n            for sdfcommand, marching_cube_command, cat_mesh_dir, cat_norm_mesh_dir, cat_sdf_dir, obj,\n                res, iso_val, expand_rate, indx, ish5, norm, num_sample, bandwidth, max_verts,cat_id,g\n                     ,version, skip_all_exist in\n                zip(sdfcommand_lst,\n                marching_cube_command_lst,\n                cat_mesh_dir_lst,\n                cat_norm_mesh_dir_lst,\n                cat_sdf_dir_lst,\n                list_obj,\n                res_lst, iso_val_lst,\n                expand_rate_lst,\n                indx_lst, ish5_lst, normalize_lst,num_sample_lst,\n                bandwidth_lst, max_verts_lst,cat_id_lst, g_lst, version_lst,skip_all_exist_lst))\n        start+=repeat\n    print(\"finish all\")\n\n\nif __name__ == \"__main__\":\n\n    # nohup python -u create_point_sdf_grid.py &> create_sdf.log &\n\n    #  full set\n    lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n    if FLAGS.category != \"all\":\n        cats = {\n            FLAGS.category:cats[FLAGS.category]\n        }\n\n    create_sdf(\"./isosurface/computeDistanceField\",\n               \"./isosurface/computeMarchingCubes\",\n               \"source ./isosurface/LIB_PATH\", 32768, 0.1,\n               256, 1.2, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.00, version=1, skip_all_exist=True)\n\n    create_sdf(\"./isosurface/computeDistanceField\",\n               \"./isosurface/computeMarchingCubes\",\n               \"source ./home/xharlie/dev/isosurface/LIB_PATH\", 32768, 0.1,\n               256, 1.2, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.03, version=1, skip_all_exist=False)\n\n    create_sdf(\"./isosurface/computeDistanceField\",\n               \"./isosurface/computeMarchingCubes\",\n               \"source ./home/xharlie/dev/isosurface/LIB_PATH\", 32768, 0.1,\n               256, 1.2, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.05, version=1, skip_all_exist=False)\n\n    create_sdf(\"./isosurface/computeDistanceField\",\n               \"./isosurface/computeMarchingCubes\",\n               \"source ./home/xharlie/dev/isosurface/LIB_PATH\", 32768, 0.1,\n               256, 1.2, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.06, version=1, skip_all_exist=False)\n\n    create_sdf(\"./isosurface/computeDistanceField\",\n               \"./isosurface/computeMarchingCubes\",\n               \"source ./home/xharlie/dev/isosurface/LIB_PATH\", 32768, 0.1,\n               256, 1.2, cats, raw_dirs,\n               lst_dir, 0.003, 16384, ish5=True, normalize=True, g=0.00, version=1, skip_all_exist=False)\n"
  },
  {
    "path": "preprocessing/info.json",
    "content": "{\n    \"lst_dir\": \"./data/filelists\",\n    \"cats\": {\n        \"watercraft\": \"04530566\",\n        \"rifle\": \"04090263\",\n        \"display\": \"03211117\",\n        \"lamp\": \"03636649\",\n        \"speaker\": \"03691459\",\n        \"cabinet\": \"02933112\",\n        \"chair\": \"03001627\",\n        \"bench\": \"02828884\",\n        \"car\": \"02958343\",\n        \"airplane\": \"02691156\",\n        \"sofa\": \"04256520\",\n        \"table\": \"04379243\",\n        \"phone\": \"04401088\"\n    },\n    \"all_cats\": [\n        \"airplane\",\n        \"bench\",\n        \"cabinet\",\n        \"car\",\n        \"chair\",\n        \"display\",\n        \"lamp\",\n        \"speaker\",\n        \"rifle\",\n        \"sofa\",\n        \"table\",\n        \"phone\",\n        \"watercraft\"\n    ],\n    \"raw_dirs_v1\": {\n        \"mesh_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetCore.v1/\",\n        \"norm_mesh_dir\": \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/\",\n        \"norm_mesh_dir_v2\": \"/ssd1/datasets/ShapeNet/march_cube_objs/\",\n        \"sdf_dir\": \"/ssd1/datasets/ShapeNet/SDF_v1/\",\n        \"sdf_dir_v2\": \"/ssd1/datasets/ShapeNet/SDF_v2/\",\n        \"rendered_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRendering/\",\n        \"rendered_new_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRendering.v1/\",\n        \"renderedh5_new_dir_easy\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_new_easy.v1/\",\n        \"renderedh5_new_dir_hard\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_new_hard.v1/\",\n        \"renderedh5_dir\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_more/\",\n        \"renderedh5_dir_v2\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2/\",\n        \"renderedh5_dir_est\": \"/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_pred_3d/\",\n        \"3dnnsdf_dir\": \"/ssd1/datasets/ShapeNet/SDF_full/\"\n    }\n}\n"
  },
  {
    "path": "test/command",
    "content": "cp -r 65_0.0_sep/02933112 65_0.0_comb/ &\ncp -r 65_0.0_sep/03211117 65_0.0_comb/ &\ncp -r 65_0.0_sep/03691459 65_0.0_comb/ &\ncp -r 65_0.0_sep/04090263 65_0.0_comb/ &\ncp -r 65_0.0_sep/04530566 65_0.0_comb/ &\ncp -r 65_0.0/02691156 65_0.0_comb/ &\ncp -r 65_0.0/02828884 65_0.0_comb/ &\ncp -r 65_0.0/02958343 65_0.0_comb/ &\ncp -r 65_0.0/03001627 65_0.0_comb/ &\ncp -r 65_0.0/03636649 65_0.0_comb/ &\ncp -r 65_0.0/04256520 65_0.0_comb/ &\ncp -r 65_0.0/04379243 65_0.0_comb/ &\ncp -r 65_0.0/04401088 65_0.0_comb/ &\n\n\n\ncp -r camest_65_0.0_sep/02933112 camest_65_0.0_comb/ &\ncp -r camest_65_0.0_sep/03211117 camest_65_0.0_comb/ &\ncp -r camest_65_0.0_sep/03691459 camest_65_0.0_comb/ &\ncp -r camest_65_0.0_sep/04090263 camest_65_0.0_comb/ &\ncp -r camest_65_0.0_sep/04530566 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/02691156 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/02828884 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/02958343 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/03001627 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/03636649 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/04256520 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/04379243 camest_65_0.0_comb/ &\ncp -r camest_65_0.0/04401088 camest_65_0.0_comb/ &\n\n\n\ncp -r 65_0.0_sep/02933112 65_0.0_comb/ &\ncp -r 65_0.0_sep/04090263 65_0.0_comb/ &\ncp -r 65_0.0/02691156 65_0.0_comb/ &\ncp -r 65_0.0/02828884 65_0.0_comb/ &\ncp -r 65_0.0/02958343 65_0.0_comb/ &\ncp -r 65_0.0/03001627 65_0.0_comb/ &\ncp -r 65_0.0/03636649 65_0.0_comb/ &\ncp -r 65_0.0/04256520 65_0.0_comb/ &\ncp -r 65_0.0/04379243 65_0.0_comb/ &\ncp -r 65_0.0/04401088 65_0.0_comb/ &\ncp -r 65_0.0/04530566 65_0.0_comb/ &\ncp -r 65_0.0/03211117 65_0.0_comb/ &\ncp -r 65_0.0/03691459 65_0.0_comb/ &\n\n\n"
  },
  {
    "path": "test/create_sdf.py",
    "content": "import argparse\nfrom datetime import datetime\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport os\nimport sys\nimport h5py\nimport struct\nBASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nimport model_normalization as model\nfrom concurrent.futures import ThreadPoolExecutor\nimport data_sdf_h5_queue # as data\nimport create_file_lst\nslim = tf.contrib.slim\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg dim')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--mask_tp', type=str, default=\"neg_two_sides\")\nparser.add_argument('--mask_rt', type=int, default=40000)\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--multi_view', action='store_true')\nparser.add_argument('--num_sample_points', type=int, default=1, help='Sample Point Number [default: 2048]')\n\nparser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--iso', type=float, default=0.0, help='iso value')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--create_obj', action='store_true', help=\"create_obj or test accuracy on test set\")\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--view_num', type=int, default=24, help=\"how many views do you want to create for each obj\")\nparser.add_argument('--cam_est', action='store_true', help=\"if you are using the estimated camera image h5\")\n\nparser.add_argument('--augcolorfore', action='store_true')\nparser.add_argument('--augcolorback', action='store_true')\nparser.add_argument('--backcolorwhite', action='store_true')\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nNUM_POINTS = FLAGS.num_points\nBATCH_SIZE = FLAGS.batch_size\nRESOLUTION = FLAGS.sdf_res+1\nTOTAL_POINTS = RESOLUTION * RESOLUTION * RESOLUTION\nif FLAGS.img_feat_twostream:\n    SPLIT_SIZE = int(np.ceil(TOTAL_POINTS / 214669.0))\nelif FLAGS.threedcnn :\n    SPLIT_SIZE = 1\nelse:\n    SPLIT_SIZE = int(np.ceil(TOTAL_POINTS / 274625.0))\nNUM_SAMPLE_POINTS = int(np.ceil(TOTAL_POINTS / SPLIT_SIZE))\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')\nif FLAGS.cam_est:\n    RESULT_OBJ_PATH = os.path.join(LOG_DIR, 'test_objs', \"camest_\"\n                                   + str(RESOLUTION) + \"_\" + str(FLAGS.iso))\n    print(\"RESULT_OBJ_PATH: \",RESULT_OBJ_PATH)\nelse:\n    RESULT_OBJ_PATH = os.path.join(LOG_DIR, 'test_objs', str(RESOLUTION) + \"_\" + str(FLAGS.iso))\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\nif not os.path.exists(RESULT_OBJ_PATH): os.makedirs(RESULT_OBJ_PATH, exist_ok=True)\n\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nIMG_SIZE = FLAGS.img_h\nHOSTNAME = socket.gethostname()\nprint(\"HOSTNAME:\", HOSTNAME)\nVV = False\nVV = VV and (HOSTNAME == \"ubuntu\")\n\nTEST_LISTINFO = []\n\ncat_ids = []\ncats_limit = {}\n\nif FLAGS.category == \"all\":\n    for key, value in cats.items():\n        cat_ids.append(value)\n        cats_limit[value] = 0\nelse:\n    cat_ids.append(cats[FLAGS.category])\n    cats_limit[cats[FLAGS.category]] = 0\n\nfor cat_id in cat_ids:\n    test_lst = os.path.join(FLAGS.test_lst_dir, cat_id+\"_test.lst\")\n    with open(test_lst, 'r') as f:\n        lines = f.read().splitlines()\n        for line in lines:\n            render_list = random.sample(range(24), FLAGS.view_num)\n            for render in render_list:\n                cats_limit[cat_id] += 1\n                TEST_LISTINFO += [(cat_id, line.strip(), render)]\n\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"]}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"]}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2']}\n\nTEST_DATASET = data_sdf_h5_queue.Pt_sdf_img(FLAGS,\n    listinfo=TEST_LISTINFO, info=info, cats_limit=cats_limit, shuffle=False)\nprint(info)\n\ndef create():\n    log_string(LOG_DIR)\n\n    input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (IMG_SIZE, IMG_SIZE),\n                        num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl', FLAGS=FLAGS)\n    is_training_pl = tf.placeholder(tf.bool, shape=())\n    print(is_training_pl)\n    batch = tf.Variable(0, name='batch')\n\n    print(\"--- Get model and loss\")\n    # Get model and loss\n\n    end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, bn=False,FLAGS=FLAGS)\n\n    loss, end_points = model.get_loss(end_points,\n        sdf_weight=SDF_WEIGHT, num_sample_points=NUM_SAMPLE_POINTS, FLAGS=FLAGS)\n    # Create a session\n    gpu_options = tf.GPUOptions() # per_process_gpu_memory_fraction=0.99\n    config = tf.ConfigProto(gpu_options=gpu_options)\n    config.gpu_options.allow_growth = True\n    config.allow_soft_placement = True\n    config.log_device_placement = False\n    sess = tf.Session(config=config)\n\n    init = tf.global_variables_initializer()\n    sess.run(init)\n\n    ######### Loading Checkpoint ###############\n    saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if\n                            ('lr' not in v.name) and ('batch' not in v.name)])\n    ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)\n\n    if ckptstate is not None:\n        LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))\n        try:\n            # load_model(sess, PRETRAINED_PN_MODEL_FILE, ['refpc_reconstruction','sdfprediction','vgg_16'], strict=True)\n            with NoStdStreams():\n                saver.restore(sess, LOAD_MODEL_FILE)\n            print(\"Model loaded in file: %s\" % LOAD_MODEL_FILE)\n        except:\n            print(\"Fail to load overall modelfile: %s\" % PRETRAINED_MODEL_PATH)\n\n    ###########################################\n\n    ops = {'input_pls': input_pls,\n           'is_training_pl': is_training_pl,\n           'loss': loss,\n           'step': batch,\n           'end_points': end_points}\n\n    TEST_DATASET.start()\n    test_one_epoch(sess, ops)\n    TEST_DATASET.shutdown()\n\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef test_one_epoch(sess, ops):\n    \"\"\" ops: dict mapping from string to tf ops \"\"\"\n    is_training = False\n\n    # Shuffle train samples\n    num_batches = int(len(TEST_DATASET)) // FLAGS.batch_size\n\n    print('num_batches', num_batches)\n    loss_all = 0\n    log_string(str(datetime.now()))\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0\n\n    with ThreadPoolExecutor(max_workers=4) as executor:\n        for batch_idx in range(num_batches):\n            batch_data = TEST_DATASET.fetch()\n            extra_pts = np.zeros((1, SPLIT_SIZE * NUM_SAMPLE_POINTS - TOTAL_POINTS, 3), dtype=np.float32)\n            batch_points = np.zeros((SPLIT_SIZE, 0, NUM_SAMPLE_POINTS, 3), dtype=np.float32)\n            if not FLAGS.threedcnn:\n                for b in range(BATCH_SIZE):\n                    print(batch_data)\n                    sdf_params = batch_data['sdf_params'][b]\n                    x_ = np.linspace(sdf_params[0], sdf_params[3], num=RESOLUTION)\n                    y_ = np.linspace(sdf_params[1], sdf_params[4], num=RESOLUTION)\n                    z_ = np.linspace(sdf_params[2], sdf_params[5], num=RESOLUTION)\n                    z, y, x = np.meshgrid(z_, y_, x_, indexing='ij')\n                    x = np.expand_dims(x, 3)\n                    y = np.expand_dims(y, 3)\n                    z = np.expand_dims(z, 3)\n                    all_pts = np.concatenate((x, y, z), axis=3).astype(np.float32)\n                    all_pts = all_pts.reshape(1, -1, 3)\n                    all_pts = np.concatenate((all_pts, extra_pts), axis=1).reshape(SPLIT_SIZE, 1, -1, 3)\n                    print('all_pts', all_pts.shape)\n                    batch_points = np.concatenate((batch_points, all_pts), axis=1)\n\n            pred_sdf_val_all = np.zeros((SPLIT_SIZE, BATCH_SIZE, NUM_SAMPLE_POINTS, 2 if FLAGS.binary else 1))\n\n            for sp in range(SPLIT_SIZE):\n                if FLAGS.threedcnn:\n                    feed_dict = {ops['is_training_pl']: is_training,\n                                 ops['input_pls']['imgs']: batch_data['img']}\n                else:\n                    feed_dict = {ops['is_training_pl']: is_training,\n                                 ops['input_pls']['sample_pc']: batch_points[sp,...].reshape(BATCH_SIZE, -1, 3),\n                                 ops['input_pls']['sample_pc_rot']: batch_points[sp,...].reshape(BATCH_SIZE, -1, 3),\n                                 ops['input_pls']['imgs']: batch_data['img'],\n                                 ops['input_pls']['trans_mat']: batch_data['trans_mat']}\n\n                output_list = [ops['end_points']['pred_sdf'], ops['end_points']['ref_img'],\n                               ops['end_points']['sample_img_points']]\n                pred_sdf_val, ref_img_val, sample_img_points_val = sess.run(output_list, feed_dict=feed_dict)\n                pred_sdf_val_all[sp,:,:,:] = pred_sdf_val\n            pred_sdf_val_all = np.swapaxes(pred_sdf_val_all,0,1) # B, S, NUM SAMPLE, 1 or 2\n            pred_sdf_val_all = pred_sdf_val_all.reshape((BATCH_SIZE,-1,2 if FLAGS.binary else 1))[:, :TOTAL_POINTS, :]\n            if FLAGS.binary:\n                expo = np.exp(pred_sdf_val_all)\n                prob = expo[:,:,1] / np.sum(expo, axis = 2)\n                result = (prob - 0.5) / 10.\n                print(\"result.shape\", result.shape)\n            else:\n                result = pred_sdf_val_all / SDF_WEIGHT\n            for b in range(BATCH_SIZE):\n                print(\"{}/{}, submit create_obj {}, {}, {}\".format(batch_idx, num_batches, batch_data['cat_id'][b], batch_data['obj_nm'][b], batch_data['view_id'][b]))\n                executor.submit(create_obj, result[b], batch_data['sdf_params'][b], RESULT_OBJ_PATH,\n                    batch_data['cat_id'][b], batch_data['obj_nm'][b], batch_data['view_id'][b], FLAGS.iso)\n\n\ndef to_binary(res, pos, pred_sdf_val_all, sdf_file):\n    f_sdf_bin = open(sdf_file, 'wb')\n\n    f_sdf_bin.write(struct.pack('i', -res))  # write an int\n    f_sdf_bin.write(struct.pack('i', res))  # write an int\n    f_sdf_bin.write(struct.pack('i', res))  # write an int\n\n    positions = struct.pack('d' * len(pos), *pos)\n    f_sdf_bin.write(positions)\n    val = struct.pack('=%sf'%pred_sdf_val_all.shape[0], *(pred_sdf_val_all))\n    f_sdf_bin.write(val)\n    f_sdf_bin.close()\n\ndef create_obj(pred_sdf_val, sdf_params, dir, cat_id, obj_nm, view_id, i):\n    if not isinstance(view_id, str):\n        view_id = \"%02d\"%view_id\n    dir = os.path.join(dir, cat_id)\n    os.makedirs(dir, exist_ok=True)\n    obj_nm = cat_id +\"_\" + obj_nm\n    cube_obj_file = os.path.join(dir, obj_nm+\"_\"+view_id+\".obj\")\n    sdf_file = os.path.join(dir, obj_nm+\"_\"+view_id+\".dist\")\n    to_binary((RESOLUTION-1), sdf_params, pred_sdf_val, sdf_file)\n    create_one_cube_obj(\"./isosurface/computeMarchingCubes\", i, sdf_file, cube_obj_file)\n    command_str = \"rm -rf \" + sdf_file\n    print(\"command:\", command_str)\n    os.system(command_str)\n\ndef create_one_cube_obj(marching_cube_command, i, sdf_file, cube_obj_file):\n    command_str = marching_cube_command + \" \" + sdf_file + \" \" + cube_obj_file + \" -i \" + str(i)\n    print(\"command:\", command_str)\n    os.system(command_str)\n    return cube_obj_file\n\ndef get_sdf_h5(sdf_h5_file, cat_id, obj):\n    h5_f = h5py.File(sdf_h5_file, 'r')\n    try:\n        if ('pc_sdf_original' in h5_f.keys()\n                and 'pc_sdf_sample' in h5_f.keys()\n                and 'norm_params' in h5_f.keys()):\n            ori_sdf = h5_f['pc_sdf_original'][:].astype(np.float32)\n            # sample_sdf = np.reshape(h5_f['pc_sdf_sample'][:],(ori_sdf.shape[0], -1 ,4)).astype(np.float32)\n            sample_sdf = h5_f['pc_sdf_sample'][:].astype(np.float32)\n            ori_pt = ori_sdf[:,:3]#, ori_sdf[:,3]\n            ori_sdf_val = None\n            if sample_sdf.shape[1] == 4:\n                sample_pt, sample_sdf_val = sample_sdf[:,:3], sample_sdf[:,3]\n            else:\n                sample_pt, sample_sdf_val = None, sample_sdf[:, 0]\n            norm_params = h5_f['norm_params'][:]\n            sdf_params = h5_f['sdf_params'][:]\n        else:\n            raise Exception(cat_id, obj, \"no sdf and sample\")\n    finally:\n        h5_f.close()\n    return ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params\n\nif __name__ == \"__main__\":\n\n\n    # 1. create all categories / some of the categories:\n    create()\n\n\n\n    # 2. create single obj, just run python -u create_sdf.py\n\n    # ori_pt, ori_sdf_val, sample_pt, sample_sdf_val, norm_params, sdf_params = \\\n    #     get_sdf_h5(\"/ssd1/datasets/ShapeNet/SDF_full/64_expr_1.2/03001627/47cd848a5584867b1e8791c225564ae0/ori_sample.h5\",\n    #                 \"03001627\", \"47cd848a5584867b1e8791c225564ae0\")\n    # create_obj(sample_sdf_val, sdf_params, \"send/\",\n    #            \"03001627\", \"97cd4ed02e022ce7174150bd56e389a8\", \"111\", 0.00)\n\n"
  },
  {
    "path": "test/test_cd_emd.py",
    "content": "import argparse\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport pymesh\nimport os\nimport sys\nBASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), \"..\")\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\n\nimport models.tf_ops.approxmatch.tf_approxmatch as tf_approxmatch\nimport models.tf_ops.nn_distance.tf_nndistance as tf_nndistance\nimport create_file_lst\nslim = tf.contrib.slim\n\nparser = argparse.ArgumentParser()\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--binary', action='store_true')\n\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--batch_size', type=int, default=24, help='Batch Size during training [default: 32]')\nparser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--view_num', type=int, default=24, help=\"how many views do you want to create for each obj\")\nparser.add_argument('--cam_est', action='store_true')\nparser.add_argument('--cal_dir', type=str, default=\"\", help=\"target obj directory that needs to be tested\")\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nBATCH_SIZE = FLAGS.batch_size\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\n\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nIMG_SIZE = FLAGS.img_h\nVV =False\nHOSTNAME = socket.gethostname()\n\nTEST_LISTINFO = []\n\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir']}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2'],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\n\nprint(info)\n\ndef load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):\n\n    vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))\n    vars_in_defined_model = []\n\n    for var in tf.trainable_variables():\n        if isinstance(prefixs, list):\n            for prefix in prefixs:\n                if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                    if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                        vars_in_defined_model.append(var)\n        else:\n            if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                    vars_in_defined_model.append(var)\n    saver = tf.train.Saver(vars_in_defined_model)\n    saver.restore(sess, LOAD_MODEL_FILE)\n    print( \"Model loaded in file: %s\" % (LOAD_MODEL_FILE))\n\n    return True\n\ndef build_file_dict(dir):\n    file_dict = {}\n    for file in os.listdir(dir):\n        full_path = os.path.join(dir, file)\n        if os.path.isfile(full_path):\n            obj_id = file.split(\"_\")[1]\n            if obj_id in file_dict.keys():\n                file_dict[obj_id].append(full_path)\n            else:\n                file_dict[obj_id] = [full_path]\n    return file_dict\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef cd_emd_all(cats, pred_dir, gt_dir, test_lst_dir):\n    for cat_nm, cat_id in cats.items():\n        pred_dir_cat = os.path.join(pred_dir, cat_id)\n        gt_dir_cat = os.path.join(gt_dir, cat_id)\n        test_lst_f = os.path.join(test_lst_dir, cat_id+\"_test.lst\")\n        cd_emd_cat(cat_id, cat_nm, pred_dir_cat, gt_dir_cat, test_lst_f)\n    print(\"done!\")\n\n\ndef cd_emd_cat(cat_id, cat_nm, pred_dir, gt_dir, test_lst_f):\n    pred_dict = build_file_dict(pred_dir)\n    sum_cf_loss = 0.\n    sum_em_loss = 0.\n    with tf.Graph().as_default():\n        with tf.device('/gpu:0'):\n\n            config = tf.ConfigProto()\n            config.gpu_options.allow_growth = True\n            config.allow_soft_placement = True\n            config.log_device_placement = False\n            sess = tf.Session(config=config)\n            sampled_pc = tf.placeholder(tf.float32, shape=(FLAGS.batch_size+1, FLAGS.num_sample_points, 3))\n            avg_cf_loss, min_cf_loss, arg_min_cf, avg_em_loss, min_em_loss, arg_min_em = get_points_loss(sampled_pc)\n            count = 0\n            with open(test_lst_f, \"r\") as f:\n                test_objs = f.readlines()\n                count+=1\n                for obj_id in test_objs:\n                    obj_id = obj_id.rstrip('\\r\\n')\n                    src_path = os.path.join(gt_dir, obj_id, \"isosurf.obj\")\n                    pred_path_lst = pred_dict[obj_id]\n                    verts_batch = np.zeros((FLAGS.view_num+1, FLAGS.num_sample_points, 3), dtype=np.float32)\n                    mesh1 = pymesh.load_mesh(src_path)\n                    if mesh1.vertices.shape[0] > 0:\n                        choice = np.random.randint(mesh1.vertices.shape[0], size=FLAGS.num_sample_points)\n                        verts_batch[0, ...] = mesh1.vertices[choice,...]\n                    pred_path_lst = random.sample(pred_path_lst, FLAGS.view_num)\n                    for i in range(len(pred_path_lst)):\n                        pred_mesh_fl = pred_path_lst[i]\n                        mesh1 = pymesh.load_mesh(pred_mesh_fl)\n                        if mesh1.vertices.shape[0] > 0:\n                            choice = np.random.randint(mesh1.vertices.shape[0], size=FLAGS.num_sample_points)\n                            verts_batch[i+1, ...] = mesh1.vertices[choice, ...]\n                    if FLAGS.batch_size == FLAGS.view_num:\n                        feed_dict = {sampled_pc: verts_batch}\n                        avg_cf_loss_val, min_cf_loss_val, arg_min_cf_val, avg_em_loss_val, min_em_loss_val, arg_min_em_val \\\n                            = sess.run([avg_cf_loss, min_cf_loss, arg_min_cf, avg_em_loss, min_em_loss, arg_min_em],\n                                       feed_dict=feed_dict)\n                    else:\n                        sum_avg_cf_loss_val = 0.\n                        min_cf_loss_val = 9999.\n                        arg_min_cf_val = 0\n                        sum_avg_em_loss_val = 0.\n                        min_em_loss_val = 9999.\n                        arg_min_em_val = 0\n                        for b in range(FLAGS.view_num//FLAGS.batch_size):\n                            verts_batch_b = np.stack([verts_batch[0, ...], verts_batch[b, ...]])\n                            feed_dict = {sampled_pc: verts_batch_b}\n                            avg_cf_loss_val, _, _, avg_em_loss_val, _, _ \\\n                                = sess.run([avg_cf_loss, min_cf_loss, arg_min_cf, avg_em_loss, min_em_loss, arg_min_em],\n                                           feed_dict=feed_dict)\n                            sum_avg_cf_loss_val +=avg_cf_loss_val\n                            sum_avg_em_loss_val +=avg_em_loss_val\n                            if min_cf_loss_val > avg_cf_loss_val:\n                                min_cf_loss_val = avg_cf_loss_val\n                                arg_min_cf_val = b\n                            if min_em_loss_val > avg_em_loss_val:\n                                min_em_loss_val = avg_em_loss_val\n                                arg_min_em_val = b\n                        avg_cf_loss_val = sum_avg_cf_loss_val / (FLAGS.view_num//FLAGS.batch_size)\n                        avg_em_loss_val = sum_avg_em_loss_val / (FLAGS.view_num//FLAGS.batch_size)\n                    sum_cf_loss += avg_cf_loss_val\n                    sum_em_loss += avg_em_loss_val\n                    print(str(count) +  \" \",src_path, \"avg cf:{}, min_cf:{}, arg_cf view:{}, avg emd:{}, min_emd:{}, arg_em view:{}\".\n                          format(str(avg_cf_loss_val), str(min_cf_loss_val), str(arg_min_cf_val),\n                                 str(avg_em_loss_val), str(min_em_loss_val), str(arg_min_em_val)))\n            print(\"cat_nm:{}, cat_id:{}, avg_cf:{}, avg_emd:{}\".\n                  format(cat_nm, cat_id, sum_cf_loss/len(test_objs), sum_em_loss/len(test_objs)))\n\n\ndef get_points_loss(sampled_pc):\n    src_pc = tf.tile(tf.expand_dims(sampled_pc[0,:,:], axis=0), (FLAGS.batch_size, 1, 1))\n    if sampled_pc.get_shape().as_list()[0] == 2:\n        pred = tf.expand_dims(sampled_pc[1,:,:], axis=0)\n    else:\n        pred = sampled_pc[1:, :, :]\n    print(src_pc.get_shape())\n    print(pred.get_shape())\n\n    dists_forward, _, dists_backward, _ = tf_nndistance.nn_distance(pred, src_pc)\n    cf_loss_views = (tf.reduce_mean(dists_forward, axis=1) + tf.reduce_mean(dists_backward, axis=1)) * 1000\n    print(\"cf_loss_views.get_shape()\", cf_loss_views.get_shape())\n    avg_cf_loss = tf.reduce_mean(cf_loss_views)\n    min_cf_loss = tf.reduce_min(cf_loss_views)\n    arg_min_cf = tf.argmin(cf_loss_views, axis=0)\n\n    match = tf_approxmatch.approx_match(src_pc, pred)\n    match_cost = tf_approxmatch.match_cost(src_pc, pred, match) * 0.01\n    print(\"match_cost.get_shape()\", match_cost.get_shape())\n\n    avg_em_loss = tf.reduce_mean(match_cost)\n    min_em_loss = tf.reduce_min(match_cost)\n    arg_min_em = tf.argmin(match_cost)\n\n    return avg_cf_loss, min_cf_loss, arg_min_cf, avg_em_loss, min_em_loss, arg_min_em\n\n\nif __name__ == \"__main__\":\n    cats_all = {\n        \"watercraft\": \"04530566\",\n        \"rifle\": \"04090263\",\n        \"display\": \"03211117\",\n        \"lamp\": \"03636649\",\n        \"speaker\": \"03691459\",\n        \"chair\": \"03001627\",\n        \"bench\": \"02828884\",\n        \"cabinet\": \"02933112\",\n        \"car\": \"02958343\",\n        \"airplane\": \"02691156\",\n        \"sofa\": \"04256520\",\n        \"table\": \"04379243\",\n        \"phone\": \"04401088\"\n    }\n    if FLAGS.category == \"all\":\n        cats=cats_all\n    elif FLAGS.category == \"clean\":\n        cats ={ \"cabinet\": \"02933112\",\n                \"display\": \"03211117\",\n                \"speaker\": \"03691459\",\n                \"rifle\": \"04090263\",\n                \"watercraft\": \"04530566\"\n        }\n    else:\n        cats={FLAGS.category: cats_all[FLAGS.category]}\n\n    cd_emd_all(cats, FLAGS.cal_dir,\n               info[\"gt_marching_cube\"], FLAGS.test_lst_dir)\n\n    # 1. test cd_emd for all categories / some of the categories:\n\n    # lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info(version=1)s\n    # cd_emd_all(cats,\n    #            \"checkpoint/all_best/sdf_2d_sdfproj_twostream_wd_2048_weight10_ftprev_inweight/test_objs/65_0.0\",\n    #            \"/ssd1/datasets/ShapeNet/march_cube_objs_v1/\", \"/ssd1/datasets/ShapeNet/filelists/\",\n    #            num_points=FLAGS.num_points, maxnverts=1000000, maxntris=1000000, num_view=4)\n\n# nohup python -u test_cd_emd.py --gpu 1 --batch_size 24 --img_feat_twostream  --num_points 2048 --category chair &> cd_emd_all_all_chair_woweight_2048.log &\n\n\n    # lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info(version=2)\n    # cd_emd_all(cats,\n    #            \"checkpoint/all/binary/test_objs/65_0.0_sep\",\n    #            \"/hdd_extra1/datasets/ShapeNet/march_cube_objs/\", \"/ssd1/datasets/ShapeNet/filelists/\",\n    #            num_points=FLAGS.num_points, maxnverts=1000000, maxntris=1000000, num_view=24)\n\n    # nohup python -u test_allpts.py --gpu 3 --batch_size 24 --binary  --test_lst_dir /ssd1/datasets/ShapeNet/filelists/ --num_points 2048 --category all &> cd_emd_all_all_binary.log &\n\n"
  },
  {
    "path": "test/test_f_score.py",
    "content": "import argparse\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport pymesh\nimport os\nimport sys\nBASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), \"..\")\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\n\nimport models.tf_ops.nn_distance.tf_nndistance as tf_nndistance\nimport create_file_lst\nslim = tf.contrib.slim\n\nparser = argparse.ArgumentParser()\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--mask_tp', type=str, default=\"neg_two_sides\")\nparser.add_argument('--mask_rt', type=int, default=40000)\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--truethreshold', type=float, default=2.5, help='if distance smaller than this value, its true')\n\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--batch_size', type=int, default=24, help='Batch Size during training [default: 32]')\nparser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_far', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--view_num', type=int, default=24, help=\"how many views do you want to create for each obj\")\nparser.add_argument('--cam_est', action='store_true')\nparser.add_argument('--cal_dir', type=str, default=\"\", help=\"target obj directory that needs to be tested\")\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nBATCH_SIZE = FLAGS.batch_size\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\n\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nIMG_SIZE = FLAGS.img_h\nVV =False\nHOSTNAME = socket.gethostname()\n\nTEST_LISTINFO = []\n\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir']}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2'],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\n\nprint(info)\n\ndef load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):\n\n    vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))\n    vars_in_defined_model = []\n\n    for var in tf.trainable_variables():\n        if isinstance(prefixs, list):\n            for prefix in prefixs:\n                if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                    if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                        vars_in_defined_model.append(var)\n        else:\n            if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                    vars_in_defined_model.append(var)\n    saver = tf.train.Saver(vars_in_defined_model)\n    saver.restore(sess, LOAD_MODEL_FILE)\n    print( \"Model loaded in file: %s\" % (LOAD_MODEL_FILE))\n\n    return True\n\ndef build_file_dict(dir):\n    file_dict = {}\n    for file in os.listdir(dir):\n        full_path = os.path.join(dir, file)\n        if os.path.isfile(full_path):\n            obj_id = file.split(\"_\")[1]\n            if obj_id in file_dict.keys():\n                file_dict[obj_id].append(full_path)\n            else:\n                file_dict[obj_id] = [full_path]\n    return file_dict\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\n\ndef cal_f_score_all_cat(cats, pred_dir, gt_dir, test_lst_dir,threshold_lst, side_len):\n    precision_lst = []\n    recall_lst = []\n    cnt_lst = []\n    for cat_nm, cat_id in cats.items():\n        pred_dir_cat = os.path.join(pred_dir, cat_id)\n        gt_dir_cat = os.path.join(gt_dir, cat_id)\n        test_lst_f = os.path.join(test_lst_dir, cat_id + \"_test.lst\")\n        thresholds = np.asarray(threshold_lst, dtype=np.float32) * 0.01 * side_len\n        precision_avg, recall_avg, cnt \\\n            = f_score_cat(cat_id, cat_nm, pred_dir_cat, gt_dir_cat, test_lst_f, thresholds)\n        precision_lst.append(precision_avg)\n        recall_lst.append(recall_avg)\n        cnt_lst.append(cnt)\n        print(\"{}, {}, precision_avg {}, recal_avg{}, count {}\"\n              .format(cat_nm, cat_id, precision_avg, recall_avg, cnt))\n    print(\"done!\")\n    precision = np.asarray(precision_lst) # 13 * 5\n    recall = np.asarray(recall_lst)\n    pre_w_avg = np.average(precision, axis=0, weights=cnt_lst)\n    rec_w_avg = np.average(recall, axis=0, weights=cnt_lst)\n    f_score = 2 * (pre_w_avg * rec_w_avg) / (pre_w_avg + rec_w_avg)\n    print(\"pre_w_avg {}, rec_w_avg {}, f_score {}\".format(pre_w_avg, rec_w_avg, f_score))\n\ndef f_score_cat(cat_id, cat_nm, pred_dir, gt_dir, test_lst_f, thresholds):\n    pred_dict = build_file_dict(pred_dir)\n    with tf.Graph().as_default():\n        with tf.device('/gpu:0'):\n            config = tf.ConfigProto()\n            config.gpu_options.allow_growth = True\n            config.allow_soft_placement = True\n            config.log_device_placement = False\n            sess = tf.Session(config=config)\n            sampled_pc = tf.placeholder(tf.float32, shape=(FLAGS.batch_size + 1, FLAGS.num_sample_points, 3))\n            #\n            dists_forward_sqrt, dists_backward_sqrt \\\n                = get_points_distance(sampled_pc)\n            count = 0\n            precision_sum = 0\n            recall_sum = 0\n            with open(test_lst_f, \"r\") as f:\n                test_objs = f.readlines()\n                for obj_id in test_objs:\n                    obj_id = obj_id.rstrip('\\r\\n')\n                    pred_pnt_dir = os.path.join(os.path.dirname(pred_dir),\n                        \"pnt_{}_{}\".format(FLAGS.num_sample_points, cat_id))\n                    forfl = os.path.join(pred_pnt_dir, \"for_dist_{}.txt\".format(obj_id))\n                    backfl = os.path.join(pred_pnt_dir, \"bac_dist_{}.txt\".format(obj_id))\n                    if not os.path.exists(forfl):\n                        gt_pnt_path = os.path.join(gt_dir, obj_id, \"pnt_{}.txt\".format(FLAGS.num_sample_points))\n                        # npnts, 3\n                        gt_pnts = np.loadtxt(gt_pnt_path,dtype=float, delimiter=',')\n                        pred_path_lst = pred_dict[obj_id]\n                        verts_batch = np.zeros((FLAGS.view_num + 1, FLAGS.num_sample_points, 3), dtype=np.float32)\n                        verts_batch[0, ...] = gt_pnts\n                        for i in range(len(pred_path_lst)):\n                            pred_mesh_fl = pred_path_lst[i]\n                            view_id = pred_mesh_fl[-6:-4]\n                            pred_pnt_path = os.path.join(pred_pnt_dir, \"pnt_{}_{}.txt\".format(obj_id, view_id))\n                            pred_pnts = np.loadtxt(pred_pnt_path,dtype=float, delimiter=',')\n                            verts_batch[i + 1, ...] = pred_pnts\n                        if FLAGS.batch_size == FLAGS.view_num:\n                            feed_dict = {sampled_pc: verts_batch}\n                            # view * npnt\n                            dists_forward_sqrt_val, dists_backward_sqrt_val\\\n                                = sess.run([dists_forward_sqrt, dists_backward_sqrt], feed_dict=feed_dict)\n                        else:\n                            raise NotImplementedError\n                        np.savetxt(forfl, dists_forward_sqrt_val)\n                        np.savetxt(backfl, dists_backward_sqrt_val)\n                    else:\n                        dists_forward_sqrt_val = np.loadtxt(forfl)\n                        dists_backward_sqrt_val = np.loadtxt(backfl)\n                    dists_forward_sqrt_val = np.tile(dists_forward_sqrt_val, [thresholds.shape[0], 1])\n                    dists_backward_sqrt_val = np.tile(dists_backward_sqrt_val, [thresholds.shape[0], 1])\n                    pre_sum_val = np.sum(np.less(dists_forward_sqrt_val, thresholds), axis=1)\n                    rec_sum_val = np.sum(np.less(dists_backward_sqrt_val, thresholds), axis=1)\n                    precision = pre_sum_val / (dists_forward_sqrt_val.shape[1])\n                    recall = rec_sum_val / (dists_backward_sqrt_val.shape[1])\n                    print(\"cat_id {}, obj_id {}: pre_sum {}, rec_sum {}, precision {}, recall {}\"\n                          .format(cat_id, obj_id, pre_sum_val, rec_sum_val, precision, recall))\n                    precision_sum += precision\n                    recall_sum += recall\n                    count += 1\n    return precision_sum/count, recall_sum/count, count\n\ndef get_points_distance(sampled_pc):\n    src_pc = tf.tile(tf.expand_dims(sampled_pc[0, :, :], axis=0), (FLAGS.batch_size, 1, 1))\n    if sampled_pc.get_shape().as_list()[0] == 2:\n        pred = tf.expand_dims(sampled_pc[1, :, :], axis=0)\n    else:\n        pred = sampled_pc[1:, :, :]\n    print(src_pc.get_shape())\n    print(pred.get_shape())\n    dists_forward, _, dists_backward, _ = tf_nndistance.nn_distance(pred, src_pc)\n    dists_forward_sqrt = tf.sqrt(dists_forward)\n    dists_backward_sqrt = tf.sqrt(dists_backward)\n    dists_forward_sqrt = tf.reshape(dists_forward_sqrt, [-1])\n    dists_backward_sqrt = tf.reshape(dists_backward_sqrt, [-1])\n    return dists_forward_sqrt, dists_backward_sqrt\n\ndef save_all_cat_gt_pnt(cats, gt_dir, test_lst_dir):\n    for cat_nm, cat_id in cats.items():\n        gt_dir_cat = os.path.join(gt_dir, cat_id)\n        test_lst_f = os.path.join(test_lst_dir, cat_id+\"_test.lst\")\n        sample_save_gt_pnt(cat_id, cat_nm, gt_dir_cat, test_lst_f)\n    print(\"done!\")\n\ndef sample_save_gt_pnt(cat_id, cat_nm, gt_dir_cat, test_lst_f):\n    count = 0\n    with open(test_lst_f, \"r\") as f:\n        test_objs = f.readlines()\n        count += 1\n        for obj_id in test_objs:\n            obj_id = obj_id.rstrip('\\r\\n')\n            obj_path = os.path.join(gt_dir_cat, obj_id, \"isosurf.obj\")\n            # pred_path_lst = pred_dict[obj_id]\n            verts_batch = np.zeros((FLAGS.num_sample_points, 3), dtype=np.float32)\n            mesh1 = pymesh.load_mesh(obj_path)\n            if mesh1.vertices.shape[0] > 0:\n                choice = np.random.randint(mesh1.vertices.shape[0], size=FLAGS.num_sample_points)\n                verts_batch = mesh1.vertices[choice, ...]\n            savefn = os.path.join(gt_dir_cat, obj_id, \"pnt_{}.txt\".format(FLAGS.num_sample_points))\n            np.savetxt(savefn, verts_batch, delimiter=',')\n            print(\"saved gt pnt of {} at {}\".format(obj_id, savefn))\n\n\ndef save_all_cat_pred_pnt(cats, pred_dir, test_lst_dir):\n    for cat_nm, cat_id in cats.items():\n        pred_dir_cat = os.path.join(pred_dir, cat_id)\n        test_lst_f = os.path.join(test_lst_dir, cat_id+\"_test.lst\")\n        sample_save_pred_pnt(cat_id, cat_nm, pred_dir_cat, test_lst_f)\n    print(\"done!\")\n\ndef sample_save_pred_pnt(cat_id, cat_nm, pred_dir, test_lst_f):\n    pred_dict = build_file_dict(pred_dir)\n    with open(test_lst_f, \"r\") as f:\n        test_objs = f.readlines()\n        for obj_id in test_objs:\n            obj_id = obj_id.rstrip('\\r\\n')\n            pred_path_lst = pred_dict[obj_id]\n            verts_batch = np.zeros((FLAGS.view_num, FLAGS.num_sample_points, 3), dtype=np.float32)\n            for i in range(len(pred_path_lst)):\n                pred_mesh_fl = pred_path_lst[i]\n                mesh1 = pymesh.load_mesh(pred_mesh_fl)\n                if mesh1.vertices.shape[0] > 0:\n                    choice = np.random.randint(mesh1.vertices.shape[0], size=FLAGS.num_sample_points)\n                    verts_batch[i, ...] = mesh1.vertices[choice, ...]\n                savedir = os.path.join(os.path.dirname(pred_dir),\"pnt_{}_{}\".format(FLAGS.num_sample_points, cat_id))\n                os.makedirs(savedir,exist_ok=True)\n                view_id = pred_mesh_fl[-6:-4]\n                savefn = os.path.join(savedir, \"pnt_{}_{}.txt\".format(obj_id, view_id))\n                print(savefn)\n                np.savetxt(savefn, verts_batch[i, ...], delimiter=',')\n                print(\"saved gt pnt of {} at {}\".format(obj_id, savefn))\n\nif __name__ == \"__main__\":\n    cats_all = {\n        \"watercraft\": \"04530566\",\n        \"rifle\": \"04090263\",\n        \"display\": \"03211117\",\n        \"lamp\": \"03636649\",\n        \"speaker\": \"03691459\",\n        \"chair\": \"03001627\",\n        \"bench\": \"02828884\",\n        \"cabinet\": \"02933112\",\n        \"car\": \"02958343\",\n        \"airplane\": \"02691156\",\n        \"sofa\": \"04256520\",\n        \"table\": \"04379243\",\n        \"phone\": \"04401088\"\n    }\n    if FLAGS.category == \"all\":\n        cats=cats_all\n    elif FLAGS.category == \"clean\":\n        cats ={ \"cabinet\": \"02933112\",\n                \"display\": \"03211117\",\n                \"speaker\": \"03691459\",\n                \"rifle\": \"04090263\",\n                \"watercraft\": \"04530566\"\n        }\n    else:\n        cats={FLAGS.category: cats_all[FLAGS.category]}\n\n    # calculate distance\n    save_all_cat_gt_pnt(cats, info[\"gt_marching_cube\"], FLAGS.test_lst_dir)\n    save_all_cat_pred_pnt(cats, FLAGS.cal_dir, FLAGS.test_lst_dir)\n    cal_f_score_all_cat(cats, FLAGS.cal_dir, info[\"gt_marching_cube\"],\n        FLAGS.test_lst_dir, [[0.5], [1], [2], [5], [10], [20]], FLAGS.truethreshold)\n\n# nohup python -u test/test_cd_emd.py --gpu 0 --threedcnn --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/3dcnn/test_objs/65_0.0 &> log/f_3dcnn_pnt.log &\n# nohup python -u test/test_cd_emd.py --gpu 1 --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/IM-SVR/test_objs/65_0.0_comb &> log/f_IM-SVR_pnt.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/65_0.0_comb &> log/f_DISN_pnt.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --cam_est --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/camest_65_0.0_comb &> log/f_DISNcamest_pnt.log &\n\n\n# nohup python -u test/test_cd_emd.py --gpu 0 --threedcnn --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/3dcnn/test_objs/65_0.0 &> log/f_3dcnn_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 1 --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/IM-SVR/test_objs/65_0.0_comb &> log/f_IM-SVR_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/65_0.0_comb &> log/f_DISN_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --cam_est --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/camest_65_0.0_comb &> log/f_DISNcamest_pnt_1.6.log &\n\n\n\n\n# nohup python -u test/test_cd_emd.py --gpu 0 --binary --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/loctwobin/test_objs/65_0.0 &> log/f_binary_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --binary --cam_est --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/loctwobin/test_objs/camest_65_0.0 &> log/f_binarycamest_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 1  --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/noloco/test_objs/65_0.0 &> log/f_global_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --img_feat_onestream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/onestream/test_objs/65_0.0 &> log/f_onestream_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --cam_est --img_feat_onestream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/onestream/test_objs/camest_65_0.0 &> log/f_onestreamcamest_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/DISNChair/test_objs/65_0.0 &> log/f_DISN_chair_pnt_1.6.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --cam_est --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/DISNChair/test_objs/camest_65_0.0 &> log/f_DISNcamest_chair_pnt_1.6.log &\n\n\n\n# 2.5\n# #\n# nohup python -u test/test_cd_emd.py --gpu 2 --threedcnn --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/3dcnn/test_objs/65_0.0 &> log/f_3dcnn_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/IM-SVR/test_objs/65_0.0_comb &> log/f_IM-SVR_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/65_0.0_comb &> log/f_DISN_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --cam_est --img_feat_twostream --num_points 2048 --category all --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/main/DISN/test_objs/camest_65_0.0_comb &> log/f_DISNcamest_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --binary --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/loctwobin/test_objs/65_0.0 &> log/f_binary_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --binary --cam_est --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/loctwobin/test_objs/camest_65_0.0 &> log/f_binarycamest_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 2  --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/noloco/test_objs/65_0.0 &> log/f_global_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --img_feat_onestream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/onestream/test_objs/65_0.0 &> log/f_onestream_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --cam_est --img_feat_onestream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/onestream/test_objs/camest_65_0.0 &> log/f_onestreamcamest_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 3 --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/DISNChair/test_objs/65_0.0 &> log/f_DISN_chair_pnt_2.5.log &\n# nohup python -u test/test_cd_emd.py --gpu 2 --cam_est --img_feat_twostream --num_points 2048 --category chair --cal_dir /home/xharlie/dev/ProgressivePointSetGeneration/shapenet/sdf/checkpoint/ablation/DISNChair/test_objs/camest_65_0.0 &> log/f_DISNcamest_chair_pnt_2.5.log &\n# #\n"
  },
  {
    "path": "test/test_iou.py",
    "content": "import argparse\nimport math\nfrom datetime import datetime\nimport numpy as np\nimport random\nimport tensorflow as tf\nimport socket\nimport pymesh\nimport os\nimport sys\nfrom joblib import Parallel, delayed\nBASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), \"..\")\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\nimport create_file_lst\n\nslim = tf.contrib.slim\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--dim', type=int, default=110)\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')\nparser.add_argument('--cam_est', action='store_true')\n\n\nparser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--view_num', type=int, default=24, help=\"how many views do you want to create for each obj\")\nparser.add_argument('--cal_dir', type=str, default=\"\", help=\"target obj directory that needs to be tested\")\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\nRESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\n\nHOSTNAME = socket.gethostname()\nprint(\"HOSTNAME:\", HOSTNAME)\nVV = False\nVV = VV and (HOSTNAME == \"ubuntu\")\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir']}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2'],\n            'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}\n\nprint(info)\n\ndef load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):\n\n    vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))\n    vars_in_defined_model = []\n\n    for var in tf.trainable_variables():\n        if isinstance(prefixs, list):\n            for prefix in prefixs:\n                if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                    if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                        vars_in_defined_model.append(var)\n        else:\n            if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                    vars_in_defined_model.append(var)\n    saver = tf.train.Saver(vars_in_defined_model)\n    saver.restore(sess, LOAD_MODEL_FILE)\n    print( \"Model loaded in file: %s\" % (LOAD_MODEL_FILE))\n\n    return True\n\ndef build_file_dict(dir):\n    file_dict = {}\n    for file in os.listdir(dir):\n        full_path = os.path.join(dir, file)\n        if os.path.isfile(full_path) and os.stat(full_path)[6] > 200:\n            obj_id = file.split(\"_\")[1]\n            if obj_id in file_dict.keys():\n                file_dict[obj_id].append(full_path)\n            else:\n                file_dict[obj_id] = [full_path]\n    for obj_id in file_dict.keys():\n        paths = file_dict[obj_id]\n        if len(paths) == 0:\n            print(\"{} no ok files \".format(obj_id))\n        elif len(paths) < FLAGS.view_num:\n            choice = np.random.randint(len(paths), size=FLAGS.view_num)\n            # print(obj_id,\" choice: \",choice)\n            file_dict[obj_id] = []\n            for ind in choice:\n                file_dict[obj_id].append(paths[ind])\n        else:\n            file_dict[obj_id] = random.sample(paths, FLAGS.view_num)\n    return file_dict\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\n\ndef iou_all(cats, pred_dir, gt_dir, test_lst_dir, dim=110):\n    for cat_nm, cat_id in cats.items():\n        pred_dir_cat = os.path.join(pred_dir, cat_id)\n        gt_dir_cat = os.path.join(gt_dir, cat_id)\n        test_lst_f = os.path.join(test_lst_dir, cat_id + \"_test.lst\")\n        iou_avg, best_iou_pred_lst = iou_cat(pred_dir_cat, gt_dir_cat, test_lst_f, dim=dim)\n        print(\"cat_nm: {}, cat_id: {}, iou_avg: {}\".format(cat_nm, cat_id, iou_avg))\n    print(\"done!\")\n\ndef iou_cat(pred_dir, gt_dir, test_lst_f, dim=110):\n    pred_dict = build_file_dict(pred_dir)\n    iou_sum = 0.0\n    count = 0.0\n    best_iou_pred_lst = []\n    with open(test_lst_f, \"r\") as f:\n        test_objs = f.readlines()\n        for obj_id in test_objs:\n            obj_id = obj_id.rstrip('\\r\\n')\n            src_path = os.path.join(gt_dir, obj_id, \"isosurf.obj\")\n            src_path_lst = [src_path for i in range(len(pred_dict[obj_id]))]\n            dim_lst = [dim for i in range(len(pred_dict[obj_id]))]\n            if obj_id not in pred_dict.keys():\n                print(\"skip error obj id, no key:\", obj_id)\n                continue\n            pred_path_lst = pred_dict[obj_id]\n            if len(pred_path_lst) == 0:\n                print(\"skip error obj id:\", obj_id)\n                continue\n            with Parallel(n_jobs=min(12, FLAGS.view_num)) as parallel:\n                result_lst = parallel(delayed(iou_pymesh)\n                         (src_path, pred_path, dim)\n                         for src_path, pred_path, dim in\n                         zip(src_path_lst, pred_path_lst, dim_lst))\n            iou_vals = np.asarray([result[0] for result in result_lst], dtype=np.float32)\n            sum_iou = np.sum(iou_vals)\n            iou_sum += sum_iou\n            count += len(iou_vals)\n            avg_iou = np.mean(iou_vals)\n            ind = np.argmax(iou_vals)\n            best_iou_pred_lst.append(result_lst[ind])\n            print(\"obj_id iou avg: \", avg_iou, \" best pred: \", result_lst[ind])\n    return iou_sum / count, best_iou_pred_lst\n\ndef iou_pymesh(mesh_src, mesh_pred, dim=FLAGS.dim):\n    try:\n        mesh1 = pymesh.load_mesh(mesh_src)\n        grid1 = pymesh.VoxelGrid(2./dim)\n        grid1.insert_mesh(mesh1)\n        grid1.create_grid()\n\n        ind1 = ((grid1.mesh.vertices + 1.1) / 2.4 * dim).astype(np.int)\n        v1 = np.zeros([dim, dim, dim])\n        v1[ind1[:,0], ind1[:,1], ind1[:,2]] = 1\n\n\n        mesh2 = pymesh.load_mesh(mesh_pred)\n        grid2 = pymesh.VoxelGrid(2./dim)\n        grid2.insert_mesh(mesh2)\n        grid2.create_grid()\n\n        ind2 = ((grid2.mesh.vertices + 1.1) / 2.4 * dim).astype(np.int)\n        v2 = np.zeros([dim, dim, dim])\n        v2[ind2[:,0], ind2[:,1], ind2[:,2]] = 1\n\n        intersection = np.sum(np.logical_and(v1, v2))\n        union = np.sum(np.logical_or(v1, v2))\n        return [float(intersection) / union, mesh_pred]\n    except:\n        print(\"error mesh {} / {}\".format(mesh_src, mesh_pred))\n\n\nif __name__ == \"__main__\":\n\n\n############################################################\n\n    cats_all = {\n        \"watercraft\": \"04530566\",\n        \"rifle\": \"04090263\",\n        \"display\": \"03211117\",\n        \"lamp\": \"03636649\",\n        \"speaker\": \"03691459\",\n        \"chair\": \"03001627\",\n        \"bench\": \"02828884\",\n        \"cabinet\": \"02933112\",\n        \"car\": \"02958343\",\n        \"airplane\": \"02691156\",\n        \"sofa\": \"04256520\",\n        \"table\": \"04379243\",\n        \"phone\": \"04401088\"\n    }\n    if FLAGS.category == \"all\":\n        cats = cats_all\n    elif FLAGS.category == \"clean\":\n        cats = {\"cabinet\": \"02933112\",\n                \"display\": \"03211117\",\n                \"lamp\": \"03636649\",\n                \"speaker\": \"03691459\",\n                \"rifle\": \"04090263\",\n                \"watercraft\": \"04530566\"\n                }\n    else:\n        cats = {FLAGS.category: cats_all[FLAGS.category]}\n\n    iou_all(cats, FLAGS.cal_dir, info[\"gt_marching_cube\"], FLAGS.test_lst_dir, dim=110)\n\n"
  },
  {
    "path": "test/test_sdf_acc.py",
    "content": "import argparse\nfrom datetime import datetime\nimport tensorflow as tf\nimport os\nimport sys\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nimport model_normalization as model\nimport data_sdf_h5_queue # as data\nimport create_file_lst\nslim = tf.contrib.slim\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument('--mask_weight', type=float, default=4.0)\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\n\nparser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')\nparser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')\nparser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')\nparser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')\nparser.add_argument('--test_lst_dir', default='', help='test mesh data list')\nparser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--img_feat', action='store_true')\nparser.add_argument('--img_feat_far', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--category', default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--create_obj', action='store_true', help=\"create_obj or test accuracy on test set\")\nparser.add_argument('--store', action='store_true')\nparser.add_argument('--multi_view', action='store_true')\nparser.add_argument('--cam_est', action='store_true')\nparser.add_argument('--backcolorwhite', action='store_true')\n\nFLAGS = parser.parse_args()\nprint('pid: %s'%(str(os.getpid())))\nprint(FLAGS)\n\nEPOCH_CNT = 0\nNUM_POINTS = FLAGS.num_points\nBATCH_SIZE = FLAGS.batch_size\nNUM_SAMPLE_POINTS = FLAGS.num_sample_points\nGPU_INDEX = FLAGS.gpu\nPRETRAINED_MODEL_PATH = FLAGS.log_dir\nLOG_DIR = FLAGS.log_dir\nSDF_WEIGHT = 10.\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\n\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nIMG_SIZE = FLAGS.img_h\n\n\n########### load test lst info\nTEST_LISTINFO = []\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\ncat_ids = []\ncats_limit = {}\n\nif FLAGS.category == \"all\":\n    for key, value in cats.items():\n        cat_ids.append(value)\n        cats_limit[value] = 0\nelse:\n    cat_ids.append(cats[FLAGS.category])\n    cats_limit[cats[FLAGS.category]] = 0\n\nfor cat_id in cat_ids:\n    test_lst = os.path.join(FLAGS.test_lst_dir, cat_id+\"_test.lst\")\n    with open(test_lst, 'r') as f:\n        lines = f.read().splitlines()\n        for line in lines:\n            render_list = range(24)\n            for render in render_list:\n                cats_limit[cat_id]+=1\n                TEST_LISTINFO += [(cat_id, line.strip(), render)]\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2',\n            'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_full/64_expr_1.2'}\nelif FLAGS.img_feat or FLAGS.img_feat_far or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1',\n            'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1'}\n    if FLAGS.cam_est:\n        info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_pred_3d',\n                'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1'}\nelse:\n    info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2',\n                'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_neg/simp_256_expr_1.2_bw_0.1'}\nTEST_DATASET = data_sdf_h5_queue.Pt_sdf_img(FLAGS, listinfo=TEST_LISTINFO, info=info, cats_limit=cats_limit)\nprint(info)\n\ndef test():\n    log_string(LOG_DIR)\n\n    input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (IMG_SIZE, IMG_SIZE),\n                        num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl', FLAGS=FLAGS)\n    is_training_pl = tf.placeholder(tf.bool, shape=())\n    print(is_training_pl)\n    batch = tf.Variable(0, name='batch')\n\n    print(\"--- Get model and loss\")\n    # Get model and loss\n\n    end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, bn=False,FLAGS=FLAGS)\n\n    loss, end_points = model.get_loss(end_points, sdf_weight=SDF_WEIGHT, mask_weight = FLAGS.mask_weight,\n                                                        num_sample_points=NUM_SAMPLE_POINTS, FLAGS=FLAGS)\n    # Create a session\n    gpu_options = tf.GPUOptions()\n    config = tf.ConfigProto(gpu_options=gpu_options)\n    config.gpu_options.allow_growth = True\n    config.allow_soft_placement = True\n    config.log_device_placement = False\n    sess = tf.Session(config=config)\n\n    init = tf.global_variables_initializer()\n    sess.run(init)\n\n    ######### Loading Checkpoint ###############\n    saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if\n                            ('lr' not in v.name) and ('batch' not in v.name)])\n    ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)\n\n    if ckptstate is not None:\n        LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))\n        try:\n            with NoStdStreams():\n                saver.restore(sess, LOAD_MODEL_FILE)\n            print(\"Model loaded in file: %s\" % LOAD_MODEL_FILE)\n        except:\n            print(\"Fail to load overall modelfile: %s\" % PRETRAINED_MODEL_PATH)\n\n    ###########################################\n\n    ops = {'input_pls': input_pls,\n           'is_training_pl': is_training_pl,\n           'loss': loss,\n           'step': batch,\n           'end_points': end_points}\n\n    TEST_DATASET.start()\n    test_one_epoch(sess, ops)\n    TEST_DATASET.shutdown()\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef test_one_epoch(sess, ops):\n    is_training = False\n\n    # Shuffle train samples\n    num_batches = int(len(TEST_DATASET)) // FLAGS.batch_size\n    print()\n    print('num_batches', num_batches)\n    log_string(str(datetime.now()))\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0\n\n    for batch_idx in range(num_batches):\n        batch_data = TEST_DATASET.fetch()\n\n        feed_dict = {ops['is_training_pl']: is_training,\n                     ops['input_pls']['sample_pc']: batch_data['sdf_pt'],\n                     ops['input_pls']['sample_pc_rot']: batch_data['sdf_pt_rot'],\n                     ops['input_pls']['sdf']: batch_data['sdf_val'] - 0.003,\n                     ops['input_pls']['imgs']: batch_data['img'],\n                     ops['input_pls']['trans_mat']: batch_data['trans_mat']}\n        output_list = [ops['end_points']['pred_sdf'], ops['end_points']['ref_img'],\n                       ops['end_points']['sample_img_points']]\n        loss_list = []\n        for il, lossname in enumerate(losses.keys()):\n            loss_list += [ops['end_points']['losses'][lossname]]\n        outputs = sess.run(output_list + loss_list, feed_dict=feed_dict)\n        pred_sdf_val, ref_img_val, sample_img_points_val = outputs[:-len(losses)]\n        outstr = ' -- %03d / %03d -- ' % (batch_idx + 1, num_batches)\n        for il, lossname in enumerate(losses.keys()):\n            losses[lossname] += outputs[len(output_list) + il]\n            outstr += '%s: %f, ' % (lossname, outputs[len(output_list) + il])\n        log_string(outstr)\n    # summary\n    outstr = \"Summary: \"\n    for lossname in losses.keys():\n        outstr += '%s: %f, ' % (lossname, losses[lossname] / num_batches)\n    log_string(outstr)\n\nif __name__ == \"__main__\":\n\n    # test accuracy\n    test()\n\n"
  },
  {
    "path": "train/train_sdf.py",
    "content": "import argparse\nfrom datetime import datetime\nimport numpy as np\nimport tensorflow as tf\nimport os\nimport cv2\nimport sys\nimport time\nfrom tensorflow.contrib.framework.python.framework import checkpoint_utils\nBASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\nprint(os.path.join(BASE_DIR, 'models'))\nsys.path.append(BASE_DIR) # model\nsys.path.append(os.path.join(BASE_DIR, 'models'))\nsys.path.append(os.path.join(BASE_DIR, 'utils'))\nsys.path.append(os.path.join(BASE_DIR, 'data'))\nsys.path.append(os.path.join(BASE_DIR, 'preprocessing'))\nimport model_normalization as model\nimport data_sdf_h5_queue # as data\nimport output_utils\nimport create_file_lst\nlst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()\n\nslim = tf.contrib.slim\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--gpu', type=str, default='1', help='GPU to use [default: GPU 0]')\nparser.add_argument('--category', type=str, default=\"all\", help='Which single class to train on [default: None]')\nparser.add_argument('--log_dir', default='checkpoint', help='Log dir [default: log]')\nparser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')\nparser.add_argument(\"--beta1\", type=float, dest=\"beta1\",\n                    default=0.5, help=\"beta1 of adams\")\nparser.add_argument('--num_sample_points', type=int, default=256, help='Sample Point Number [default: 2048]')\n# parser.add_argument('--sdf_points_num', type=int, default=32, help='Sample Point Number [default: 2048]')\nparser.add_argument('--max_epoch', type=int, default=200, help='Epoch to run [default: 201]')\nparser.add_argument('--batch_size', type=int, default=32, help='Batch Size during training [default: 32]')\nparser.add_argument('--img_h', type=int, default=137, help='Image Height')\nparser.add_argument('--img_w', type=int, default=137, help='Image Width')\nparser.add_argument('--sdf_res', type=int, default=256, help='sdf grid')\nparser.add_argument('--num_classes', type=int, default=1024, help='vgg dim')\nparser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')\nparser.add_argument('--momentum', type=float, default=0.9, help='Initial learning rate [default: 0.9]')\nparser.add_argument('--optimizer', default='adam', help='adam or momentum [default: adam]')\nparser.add_argument('--restore_model', default='', help='restore_model') #checkpoint/sdf_2d3d_sdfbasic2_nowd\nparser.add_argument('--restore_modelpn', default='', help='restore_model')#checkpoint/sdf_3dencoder_sdfbasic2/latest.ckpt\nparser.add_argument('--restore_modelcnn', default='', help='restore_model')#../../models/CNN/pretrained_model/vgg_16.ckpt\n\nparser.add_argument('--train_lst_dir', default=lst_dir, help='train mesh data list')\nparser.add_argument('--valid_lst_dir', default=lst_dir, help='test mesh data list')\nparser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')\nparser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')\nparser.add_argument('--mask_weight', type=float, default=4.0)\nparser.add_argument('--threedcnn', action='store_true')\nparser.add_argument('--volimp', action='store_true')\nparser.add_argument('--img_feat_onestream', action='store_true')\nparser.add_argument('--img_feat_twostream', action='store_true')\nparser.add_argument('--binary', action='store_true')\nparser.add_argument('--alpha', action='store_true')\nparser.add_argument('--augcolorfore', action='store_true')\nparser.add_argument('--augcolorback', action='store_true')\nparser.add_argument('--backcolorwhite', action='store_true')\nparser.add_argument('--rot', action='store_true')\nparser.add_argument('--tanh', action='store_true')\nparser.add_argument('--cam_est', action='store_true')\nparser.add_argument('--cat_limit', type=int, default=168000, help=\"balance each category, 1500 * 24 = 36000\")\nparser.add_argument('--multi_view', action='store_true')\n\nFLAGS = parser.parse_args()\nprint(FLAGS)\n\nEPOCH_CNT = 0\n\nBATCH_SIZE = FLAGS.batch_size\nNUM_POINTS = FLAGS.num_points\nNUM_SAMPLE_POINTS = FLAGS.num_sample_points\nMAX_EPOCH = FLAGS.max_epoch\nBASE_LEARNING_RATE = FLAGS.learning_rate\nGPU_INDEX = FLAGS.gpu\nMOMENTUM = FLAGS.momentum\nOPTIMIZER = FLAGS.optimizer\nDECAY_STEP = FLAGS.decay_step\nDECAY_RATE = FLAGS.decay_rate\nPRETRAINED_MODEL_PATH = FLAGS.restore_model\nPRETRAINED_CNN_MODEL_FILE = FLAGS.restore_modelcnn\nPRETRAINED_PN_MODEL_FILE = FLAGS.restore_modelpn\nLOG_DIR = FLAGS.log_dir\n\n\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = GPU_INDEX\n\nif not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)\n\nRESULT_PATH = os.path.join(LOG_DIR, 'train_results')\nif not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)\n\nVALID_RESULT_PATH = os.path.join(LOG_DIR, 'valid_results')\nif not os.path.exists(VALID_RESULT_PATH): os.mkdir(VALID_RESULT_PATH)\n\nos.system('cp %s.py %s' % (os.path.splitext(model.__file__)[0], LOG_DIR))\nos.system('cp train_sdf.py %s' % (LOG_DIR))\nLOG_FOUT = open(os.path.join(LOG_DIR, 'log_train.txt'), 'w')\nLOG_FOUT.write(str(FLAGS)+'\\n')\n\nBN_INIT_DECAY = 0.5\nBN_DECAY_DECAY_RATE = 0.5\nBN_DECAY_DECAY_STEP = float(DECAY_STEP)\nBN_DECAY_CLIP = 0.99\nIMG_SIZE = 137\nSDF_WEIGHT = 10.\n\n\nTRAIN_LISTINFO = []\ncats_limit = {}\n\ncat_ids = []\nif FLAGS.category == \"all\":\n    for key, value in cats.items():\n        cat_ids.append(value)\n        cats_limit[value] = 0\nelse:\n    cat_ids.append(cats[FLAGS.category])\n    cats_limit[cats[FLAGS.category]] = 0\n\nfor cat_id in cat_ids:\n    train_lst = os.path.join(FLAGS.train_lst_dir, cat_id+\"_train.lst\")\n    with open(train_lst, 'r') as f:\n        lines = f.read().splitlines()\n        for line in lines:\n            for render in range(24):\n                cats_limit[cat_id]+=1\n                TRAIN_LISTINFO += [(cat_id, line.strip(), render)]\n\n\nif FLAGS.threedcnn:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs[\"3dnnsdf_dir\"]}\nelif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir\"],\n            'sdf_dir': raw_dirs[\"sdf_dir\"]}\n    if FLAGS.cam_est:\n        info['rendered_dir']= raw_dirs[\"renderedh5_dir_est\"]\nelse:\n    info = {'rendered_dir': raw_dirs[\"renderedh5_dir_v2\"],\n            'sdf_dir': raw_dirs['sdf_dir_v2']}\nprint(info)\n\nTRAIN_DATASET = data_sdf_h5_queue.Pt_sdf_img(FLAGS, listinfo=TRAIN_LISTINFO, info=info, cats_limit=cats_limit)\n\ndef log_string(out_str):\n    LOG_FOUT.write(out_str+'\\n')\n    LOG_FOUT.flush()\n    print(out_str)\n\ndef get_learning_rate(batch):\n    learning_rate = tf.train.exponential_decay(\n                        BASE_LEARNING_RATE,  # Base learning rate.\n                        batch * BATCH_SIZE,  # Current index into the dataset.\n                        DECAY_STEP,          # Decay step.\n                        DECAY_RATE,          # Decay rate.\n                        staircase=True)\n    learning_rate = tf.maximum(learning_rate, 1e-6, name='lr') # CLIP THE LEARNING RATE!\n    return learning_rate\n\ndef get_bn_decay(batch):\n    bn_momentum = tf.train.exponential_decay(\n                      BN_INIT_DECAY,\n                      batch*BATCH_SIZE,\n                      BN_DECAY_DECAY_STEP,\n                      BN_DECAY_DECAY_RATE,\n                      staircase=True)\n    bn_decay = tf.minimum(BN_DECAY_CLIP, 1 - bn_momentum)\n    return bn_decay\n\nclass NoStdStreams(object):\n    def __init__(self,stdout = None, stderr = None):\n        self.devnull = open(os.devnull,'w')\n        self._stdout = stdout or self.devnull or sys.stdout\n        self._stderr = stderr or self.devnull or sys.stderr\n\n    def __enter__(self):\n        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr\n        self.old_stdout.flush(); self.old_stderr.flush()\n        sys.stdout, sys.stderr = self._stdout, self._stderr\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self._stdout.flush(); self._stderr.flush()\n        sys.stdout = self.old_stdout\n        sys.stderr = self.old_stderr\n        self.devnull.close()\n\ndef load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):\n\n    vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))\n    # print(vars_in_pretrained_model)\n    vars_in_defined_model = []\n\n    for var in tf.trainable_variables():\n        if isinstance(prefixs, list):\n            for prefix in prefixs:\n                if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                    if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                        vars_in_defined_model.append(var)\n        else:\n            if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):\n                if (list(var.shape) == vars_in_pretrained_model[var.op.name]):\n                    vars_in_defined_model.append(var)\n    # print(vars_in_defined_model)\n    saver = tf.train.Saver(vars_in_defined_model)\n    try:\n        saver.restore(sess, LOAD_MODEL_FILE)\n        print( \"Model loaded in file: %s\" % (LOAD_MODEL_FILE))\n    except:\n        if strict:\n            print( \"Fail to load modelfile: %s\" % LOAD_MODEL_FILE)\n            return False\n        else:\n            print( \"Fail loaded in file: %s\" % (LOAD_MODEL_FILE))\n            return True\n\n    return True\n\ndef train():\n    log_string(LOG_DIR)\n    with tf.Graph().as_default():\n        with tf.device('/gpu:0'):\n            input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (IMG_SIZE, IMG_SIZE),\n                            num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl', FLAGS=FLAGS)\n            is_training_pl = tf.placeholder(tf.bool, shape=())\n            print(is_training_pl)\n\n            # Note the global_step=batch parameter to minimize.\n            # That tells the optimizer to helpfully increment the 'batch' parameter for you every time it trains.\n            batch = tf.Variable(0, name='batch')\n            bn_decay = get_bn_decay(batch)\n            # tf.summary.scalar('bn_decay', bn_decay)\n\n            print(\"--- Get model and loss\")\n            # Get model and loss\n\n            end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, bn=False, FLAGS=FLAGS)\n            loss, end_points = model.get_loss(end_points,\n                sdf_weight=SDF_WEIGHT, mask_weight = FLAGS.mask_weight,\n                                              num_sample_points=FLAGS.num_sample_points, FLAGS=FLAGS)\n            # tf.summary.scalar('loss', loss)\n\n            print(\"--- Get training operator\")\n            # Get training operator\n            learning_rate = get_learning_rate(batch)\n            if OPTIMIZER == 'momentum':\n                optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=MOMENTUM)\n            elif OPTIMIZER == 'adam':\n                optimizer = tf.train.AdamOptimizer(learning_rate, beta1=FLAGS.beta1)\n\n            # Create a session\n            config = tf.ConfigProto()\n            gpu_options = tf.GPUOptions()#(per_process_gpu_memory_fraction=0.99)\n            config=tf.ConfigProto(gpu_options=gpu_options)\n            config.gpu_options.allow_growth = True\n            config.allow_soft_placement = True\n            config.log_device_placement = False\n            sess = tf.Session(config=config)\n\n            merged = None\n            train_writer = None\n\n            ##### all\n            update_variables = [x for x in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES)]\n\n            train_op = optimizer.minimize(loss, global_step=batch, var_list=update_variables)\n\n            # Init variables\n            init = tf.global_variables_initializer()\n            sess.run(init)\n\n            ######### Loading Checkpoint ###############\n            # CNN(Pretrained from ImageNet)\n            if PRETRAINED_CNN_MODEL_FILE is not '':\n                if not load_model(sess, PRETRAINED_CNN_MODEL_FILE, 'vgg_16', strict=True):\n                    return\n\n            if PRETRAINED_PN_MODEL_FILE is not '':\n                if not load_model(sess, PRETRAINED_PN_MODEL_FILE, ['refpc_reconstruction', 'sdfprediction'],\n                                  strict=True):\n                    return\n                # Overall\n            saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if\n                                    ('lr' not in v.name) and ('batch' not in v.name)])\n            ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)\n\n            if ckptstate is not None:\n                LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))\n                try:\n                    load_model(sess, LOAD_MODEL_FILE, ['sdfprediction/fold1', 'sdfprediction/fold2', 'vgg_16'],\n                               strict=True)\n                    # load_model(sess, LOAD_MODEL_FILE, ['sdfprediction','vgg_16'], strict=True)\n                    with NoStdStreams():\n                        saver.restore(sess, LOAD_MODEL_FILE)\n                    print(\"Model loaded in file: %s\" % LOAD_MODEL_FILE)\n                except:\n                    print(\"Fail to load overall modelfile: %s\" % PRETRAINED_MODEL_PATH)\n\n            ###########################################\n\n            ops = {'input_pls': input_pls,\n                   'is_training_pl': is_training_pl,\n                   'loss': loss,\n                   'train_op': train_op,\n                   'merged': merged,\n                   'step': batch,\n                   'lr': learning_rate,\n                   'end_points': end_points}\n\n            best_loss = 1e20\n            TRAIN_DATASET.start()\n            best_acc = 0\n            for epoch in range(MAX_EPOCH):\n                log_string('**** EPOCH %03d ****' % (epoch))\n                sys.stdout.flush()\n\n                avg_accuracy = train_one_epoch(sess, ops, train_writer, saver)\n\n                # Save the variables to disk.\n                if avg_accuracy > best_acc:\n                    best_acc = avg_accuracy\n                    save_path = saver.save(sess, os.path.join(LOG_DIR, \"model.ckpt\"))\n                    log_string(\"best Model saved in file: %s\" % save_path)\n                elif epoch % 10 == 0:\n                    save_path = saver.save(sess, os.path.join(LOG_DIR, \"model_epoch_%03d.ckpt\"%(epoch)))\n                    log_string(\"Model saved in file: %s\" % save_path)\n\n            TRAIN_DATASET.shutdown()\n\n\ndef pc_normalize(pc, centroid=None):\n\n    \"\"\" pc: NxC, return NxC \"\"\"\n    l = pc.shape[0]\n\n    if centroid is None:\n        centroid = np.mean(pc, axis=0)\n\n    pc = pc - centroid\n    # m = np.max(pc, axis=0)\n    m = np.max(np.sqrt(np.sum(pc ** 2, axis=1)))\n\n    pc = pc / m\n\n    return pc\n\ndef train_one_epoch(sess, ops, train_writer, saver):\n    \"\"\" ops: dict mapping from string to tf ops \"\"\"\n    is_training = True\n\n    num_batches = int(len(TRAIN_DATASET) / BATCH_SIZE)\n\n    print('num_batches', num_batches)\n\n    log_string(str(datetime.now()))\n\n    loss_all = 0\n    losses = {}\n    for lossname in ops['end_points']['losses'].keys():\n        losses[lossname] = 0\n\n    tic = time.time()\n    fetch_time = 0\n    accuracy_epoch = 0\n    for batch_idx in range(num_batches):\n        start_fetch_tic = time.time()\n        batch_data = TRAIN_DATASET.fetch()\n        fetch_time += (time.time() - start_fetch_tic)\n        feed_dict = {ops['is_training_pl']: is_training,\n                     ops['input_pls']['pc']: batch_data['pc'],\n                     ops['input_pls']['sample_pc']: batch_data['sdf_pt'],\n                     ops['input_pls']['sample_pc_rot']: batch_data['sdf_pt_rot'],\n                     ops['input_pls']['sdf']: batch_data['sdf_val'] - 0.003,\n                     ops['input_pls']['sdf_params']: batch_data['sdf_params'],\n                     ops['input_pls']['imgs']: batch_data['img'],\n                     ops['input_pls']['trans_mat']: batch_data['trans_mat']}\n        output_list = [ops['train_op'], ops['step'], ops['lr'], ops['loss'], ops['end_points']['pred_sdf'],\n                       ops['end_points']['ref_sdf'], ops['end_points']['sample_img_points'],\n                       ops['end_points']['pred_sdf'], ops['end_points']['ref_img']]\n\n        loss_list = []\n        for il, lossname in enumerate(losses.keys()):\n            loss_list += [ops['end_points']['losses'][lossname]]\n\n        outputs = sess.run(output_list + loss_list, feed_dict=feed_dict)\n\n        _, step, lr_val, loss_val, pred_sdf_val, ref_sdf_val, \\\n        sample_img_points_val, pred_sdf_val, ref_img_val = outputs[:-len(losses)]\n#   \n        pred_sdf_val /= SDF_WEIGHT\n\n\n        for il, lossname in enumerate(losses.keys()):\n            if lossname == \"accuracy\":\n                accuracy_epoch += outputs[len(output_list)+il]\n            losses[lossname] += outputs[len(output_list)+il]\n\n        loss_all += losses['overall_loss']\n\n        verbose_freq = 20.\n        if (batch_idx + 1) % verbose_freq == 0:\n            bid = 0\n            # sampling\n            if (batch_idx + 1) % (200*verbose_freq) == 0:\n                saveimg = (ref_img_val[bid, :, :, :] * 255).astype(np.uint8)\n                samplept_img = sample_img_points_val[bid, ...]\n                choice = np.random.randint(samplept_img.shape[0], size=100)\n                samplept_img = samplept_img[choice, ...]\n                for j in range(samplept_img.shape[0]):\n                    x = int(samplept_img[j, 0])\n                    y = int(samplept_img[j, 1])\n                    cv2.circle(saveimg, (x, y), 3, (0, 0, 255, 255), -1)\n                cv2.imwrite(os.path.join(RESULT_PATH, '%d_ref_img_resized.png' % batch_idx), saveimg)\n\n                np.savetxt(os.path.join(RESULT_PATH, '%d_sdf_pred.txt' % batch_idx), np.concatenate((batch_data['sdf_pt_rot'][bid,:,:], np.expand_dims(pred_sdf_val[bid,:,0],1)), axis=1))\n                np.savetxt(os.path.join(RESULT_PATH, '%d_sdf_ref.txt' % batch_idx), np.concatenate((batch_data['sdf_pt_rot'][bid,:,:], np.expand_dims(ref_sdf_val[bid,:,0],1)), axis=1))\n                ref_sdf_display = batch_data['sdf_val'][bid,:,0]\n                vmin = np.min(ref_sdf_display)\n                vmax = np.max(ref_sdf_display)\n                ref_sdf_display = (ref_sdf_display - vmin) / (vmax - vmin)\n\n                pred_sdf_display = pred_sdf_val[bid,:,0]\n                pred_sdf_display = (pred_sdf_display - vmin) / (vmax - vmin)\n\n                output_utils.output_scale_point_cloud(batch_data['sdf_pt_rot'][bid,:,:], pred_sdf_display, os.path.join(RESULT_PATH, '%d_pred.obj' % batch_idx))\n                output_utils.output_scale_point_cloud(batch_data['sdf_pt_rot'][bid,:,:], ref_sdf_display, os.path.join(RESULT_PATH, '%d_gt.obj' % batch_idx))\n            outstr = ' -- %03d / %03d -- ' % (batch_idx+1, num_batches)\n            for lossname in losses.keys():\n                outstr += '%s: %f, ' % (lossname, losses[lossname] / verbose_freq)\n                losses[lossname] = 0\n            outstr += \"lr: %f\" % (lr_val)\n            outstr += ' time: %.02f, ' % (time.time() - tic)\n            outstr += ', fetch time per b: %.02f, ' % (fetch_time/verbose_freq)\n            tic = time.time()\n            fetch_time = 0\n            log_string(outstr)\n    print(\"avg accuracy:\", accuracy_epoch / num_batches)\n    return accuracy_epoch / num_batches\n\nif __name__ == \"__main__\":\n    log_string('pid: %s'%(str(os.getpid())))\n    train()\n    LOG_FOUT.close()\n"
  },
  {
    "path": "utils/output_utils.py",
    "content": "import json\nimport os\nimport sys\nimport struct\nBASE_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append(os.path.dirname(os.path.abspath(__file__))) # model\nimport numpy as np\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nmpl.use('Agg')\n\ndef save_sdf_bin(bin_fn, output_sdf, res):\n    f_sdf_bin = open(bin_fn, 'wb')\n    \n    f_sdf_bin.write(struct.pack('i', -(res-1))) # write an int\n    f_sdf_bin.write(struct.pack('i', (res-1))) # write an int\n    f_sdf_bin.write(struct.pack('i', (res-1))) # write an int\n\n    positions = [-1.,-1.,-1.,1.,1.,1.]\n    positions = struct.pack('d'*len(positions), *positions)\n    f_sdf_bin.write(positions)\n\n    sdf = struct.pack('f'*len(output_sdf), *output_sdf)\n    f_sdf_bin.write(sdf)\n    f_sdf_bin.close()\n\n############################\n##    Visualize Results   ##\n############################\n\ncolor_map = json.load(open(os.path.join(BASE_DIR, 'part_color_mapping.json'), 'r'))\n\ndef output_bounding_box_withcorners(box_corners, seg, out_file):\n    # ##############   0       1       2       3       4       5       6       7\n    corner_indexes = [[0, 1, 2], [0, 1, 5], [0, 4, 2], [0, 4, 5], [3, 1, 2], [3, 1, 5], [3, 4, 2], [3, 4, 5]]\n    line_indexes = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [2, 3], [2, 6], [3, 7], [4, 5], [4, 6], [5, 7], [6, 7]]\n    with open(out_file, 'w') as f:\n        l = box_corners.shape[0]\n        for i in range(l):\n            box = box_corners[i]\n            color = color_map[seg[i]]\n            for line_index in line_indexes:\n                corner0 = box[line_index[0]]\n                corner1 = box[line_index[1]]\n                print(corner0.shape)\n                dist = np.linalg.norm(corner0 - corner1)\n                dot_num = int(dist / 0.005)\n                delta = (corner1 - corner0) / dot_num\n                for idot in range(dot_num):\n                    plotdot = corner0 + idot * delta\n                    f.write(\n                        'v %f %f %f %f %f %f\\n' % (plotdot[0], plotdot[1], plotdot[2], color[0], color[1], color[2]))\n\n\ndef output_bounding_box(boxes, seg, out_file):\n    # ##############   0       1       2       3       4       5       6       7\n    #box:nx8x3\n    corner_indexes = [[0, 1, 2], [0, 1, 5], [0, 4, 2], [0, 4, 5], [3, 1, 2], [3, 1, 5], [3, 4, 2], [3, 4, 5]]\n    line_indexes = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [2, 3], [2, 6], [3, 7], [4, 5], [4, 6], [5, 7], [6, 7]]\n    with open(out_file, 'w') as f:\n        l = boxes.shape[0]\n        for i in range(l):\n            box = boxes[i]\n            color = color_map[seg[i]]\n            for line_index in line_indexes:\n                corner0 = box[corner_indexes[line_index[0]]]\n                corner1 = box[corner_indexes[line_index[1]]]\n                dist = np.linalg.norm(corner0 - corner1)\n                dot_num = int(dist / 0.005)\n                delta = (corner1 - corner0) / dot_num\n                for idot in range(dot_num):\n                    plotdot = corner0 + idot * delta\n                    f.write(\n                        'v %f %f %f %f %f %f\\n' % (plotdot[0], plotdot[1], plotdot[2], color[0], color[1], color[2]))\n\n\ndef output_color_point_cloud(data, seg, out_file):\n    with open(out_file, 'w') as f:\n        l = len(seg)\n        for i in range(l):\n            color = color_map[seg[i]]\n            f.write('v %f %f %f %f %f %f\\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))\n\n\ndef output_point_cloud_rgb(data, rgb, out_file):\n    with open(out_file, 'w') as f:\n        l = len(data)\n        for i in range(l):\n            f.write('v %f %f %f %f %f %f\\n' % (data[i][0], data[i][1], data[i][2], rgb[i][0],  rgb[i][1],  rgb[i][2]))\n\n\ndef output_color_point_cloud_red_blue(data, seg, out_file):\n    with open(out_file, 'w') as f:\n        l = len(seg)\n        for i in range(l):\n            if seg[i] == 1:\n                color = [0, 0, 1]\n            elif seg[i] == 0:\n                color = [1, 0, 0]\n            else:\n                color = [0, 0, 0]\n            f.write('v %f %f %f %f %f %f\\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))\n\n\n##define color heat map\nnorm = mpl.colors.Normalize(vmin=0, vmax=255)\nmagma_cmap = plt.cm.get_cmap('magma')\nmagma_rgb = []\nfor i in range(0, 255):\n       k = mpl.colors.colorConverter.to_rgb(magma_cmap(norm(i)))\n       magma_rgb.append(k)\n\n\ndef output_scale_point_cloud(data, scales, out_file):\n    with open(out_file, 'w') as f:\n        l = len(scales)\n        for i in range(l):\n            scale = int(scales[i]*254)\n            if scale > 254:\n                scale = 254\n            if scale < 0:\n                scale = 0\n            color = magma_rgb[scale]\n            f.write('v %f %f %f %f %f %f\\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))\n"
  },
  {
    "path": "utils/part_color_mapping.json",
    "content": "[[0.57, 0.15, 0.43], [0.85, 0.57, 0.29], [0.7100000000000001, 0.7100000000000001, 0.01], [0.01, 0.7100000000000001, 0.15], [0.01, 0.57, 0.85], [0.43, 0.01, 0.7100000000000001], [0.43, 0.7100000000000001, 0.57], [0.29, 0.29, 0.29], [0.29, 0.7100000000000001, 0.7100000000000001], [0.57, 0.57, 0.29], [0.57, 0.7100000000000001, 0.7100000000000001], [0.01, 0.01, 0.29], [0.29, 0.57, 0.7100000000000001], [0.29, 0.15, 0.57], [0.29, 0.7100000000000001, 0.43], [0.57, 0.29, 0.01], [0.29, 0.15, 0.15], [0.7100000000000001, 0.29, 0.01], [0.01, 0.85, 0.15], [0.85, 0.01, 0.01], [0.29, 0.15, 0.7100000000000001], [0.7100000000000001, 0.15, 0.43], [0.29, 0.43, 0.7100000000000001], [0.43, 0.43, 0.7100000000000001], [0.29, 0.57, 0.01], [0.57, 0.29, 0.29], [0.57, 0.85, 0.15], [0.15, 0.29, 0.29], [0.15, 0.7100000000000001, 0.15], [0.85, 0.01, 0.29], [0.43, 0.85, 0.29], [0.43, 0.29, 0.85], [0.57, 0.85, 0.85], [0.15, 0.57, 0.01], [0.57, 0.29, 0.15], [0.7100000000000001, 0.85, 0.57], [0.57, 0.01, 0.57], [0.01, 0.85, 0.43], [0.01, 0.01, 0.01], [0.85, 0.01, 0.43], [0.57, 0.43, 0.57], [0.85, 0.01, 0.57], [0.01, 0.43, 0.43], [0.01, 0.29, 0.85], [0.57, 0.57, 0.7100000000000001], [0.7100000000000001, 0.29, 0.57], [0.57, 0.7100000000000001, 0.43], [0.29, 0.15, 0.01], [0.57, 0.15, 0.15], [0.85, 0.57, 0.85], [0.85, 0.29, 0.85], [0.85, 0.15, 0.01], [0.85, 0.7100000000000001, 0.01], [0.01, 0.57, 0.15], [0.43, 0.01, 0.43], [0.57, 0.15, 0.85], [0.01, 0.29, 0.57], [0.29, 0.85, 0.43], [0.57, 0.29, 0.43], [0.43, 0.01, 0.29], [0.15, 0.85, 0.7100000000000001], [0.85, 0.57, 0.43], [0.01, 0.15, 0.57], [0.7100000000000001, 0.7100000000000001, 0.29], [0.7100000000000001, 0.15, 0.57], [0.43, 0.43, 0.29], [0.7100000000000001, 0.43, 0.43], [0.01, 0.43, 0.57], [0.57, 0.01, 0.15], [0.57, 0.57, 0.01], [0.29, 0.01, 0.29], [0.7100000000000001, 0.01, 0.29], [0.85, 0.85, 0.7100000000000001], [0.85, 0.15, 0.29], [0.43, 0.29, 0.57], [0.43, 0.43, 0.85], [0.85, 0.15, 0.85], [0.57, 0.85, 0.29], [0.57, 0.7100000000000001, 0.01], [0.7100000000000001, 0.85, 0.15], [0.85, 0.7100000000000001, 0.43], [0.01, 0.15, 0.01], [0.85, 0.29, 0.43], [0.43, 0.85, 0.15], [0.15, 0.01, 0.15], [0.7100000000000001, 0.7100000000000001, 0.85], [0.43, 0.29, 0.01], [0.15, 0.43, 0.29], [0.7100000000000001, 0.57, 0.15], [0.29, 0.85, 0.29], [0.29, 0.7100000000000001, 0.57], [0.57, 0.85, 0.7100000000000001], [0.15, 0.01, 0.85], [0.43, 0.15, 0.57], [0.57, 0.57, 0.15], [0.01, 0.57, 0.01], [0.15, 0.29, 0.57], [0.29, 0.57, 0.43], [0.15, 0.7100000000000001, 0.01], [0.15, 0.15, 0.15], [0.43, 0.29, 0.15], [0.7100000000000001, 0.29, 0.7100000000000001], [0.7100000000000001, 0.85, 0.43], [0.15, 0.29, 0.7100000000000001], [0.15, 0.43, 0.57], [0.01, 0.7100000000000001, 0.01], [0.85, 0.29, 0.01], [0.15, 0.01, 0.57], [0.29, 0.29, 0.7100000000000001], [0.15, 0.7100000000000001, 0.29], [0.01, 0.15, 0.43], [0.7100000000000001, 0.01, 0.15], [0.57, 0.43, 0.01], [0.85, 0.43, 0.01], [0.43, 0.85, 0.7100000000000001], [0.85, 0.43, 0.43], [0.85, 0.01, 0.15], [0.01, 0.43, 0.85], [0.15, 0.15, 0.7100000000000001], [0.29, 0.57, 0.85], [0.43, 0.15, 0.15], [0.29, 0.85, 0.85], [0.15, 0.57, 0.29], [0.85, 0.85, 0.85], [0.29, 0.43, 0.43], [0.01, 0.43, 0.29], [0.43, 0.15, 0.7100000000000001], [0.7100000000000001, 0.01, 0.57], [0.7100000000000001, 0.43, 0.15], [0.01, 0.85, 0.01], [0.85, 0.01, 0.7100000000000001], [0.57, 0.43, 0.43], [0.57, 0.85, 0.01], [0.01, 0.57, 0.43], [0.15, 0.15, 0.01], [0.85, 0.43, 0.85], [0.57, 0.15, 0.29], [0.7100000000000001, 0.7100000000000001, 0.57], [0.57, 0.01, 0.85], [0.29, 0.43, 0.15], [0.7100000000000001, 0.57, 0.7100000000000001], [0.43, 0.7100000000000001, 0.85], [0.01, 0.15, 0.15], [0.85, 0.85, 0.57], [0.43, 0.85, 0.01], [0.15, 0.15, 0.85], [0.29, 0.29, 0.43], [0.29, 0.43, 0.57], [0.7100000000000001, 0.29, 0.85], [0.15, 0.15, 0.43], [0.85, 0.7100000000000001, 0.85], [0.85, 0.15, 0.43], [0.43, 0.43, 0.15], [0.57, 0.7100000000000001, 0.15], [0.7100000000000001, 0.43, 0.57], [0.7100000000000001, 0.43, 0.01], [0.85, 0.29, 0.29], [0.85, 0.15, 0.15], [0.43, 0.57, 0.85], [0.01, 0.85, 0.29], [0.29, 0.7100000000000001, 0.15], [0.57, 0.85, 0.57], [0.43, 0.43, 0.57], [0.01, 0.7100000000000001, 0.7100000000000001], [0.57, 0.15, 0.57], [0.57, 0.57, 0.43], [0.85, 0.57, 0.57], [0.85, 0.7100000000000001, 0.7100000000000001], [0.57, 0.7100000000000001, 0.85], [0.15, 0.85, 0.85], [0.29, 0.57, 0.57], [0.15, 0.7100000000000001, 0.85], [0.57, 0.01, 0.29], [0.29, 0.7100000000000001, 0.01], [0.7100000000000001, 0.29, 0.15], [0.85, 0.01, 0.85], [0.29, 0.01, 0.57], [0.29, 0.01, 0.7100000000000001], [0.7100000000000001, 0.85, 0.29], [0.85, 0.29, 0.7100000000000001], [0.43, 0.15, 0.43], [0.01, 0.01, 0.15], [0.01, 0.7100000000000001, 0.57], [0.7100000000000001, 0.15, 0.01], [0.7100000000000001, 0.15, 0.15], [0.29, 0.29, 0.85], [0.01, 0.43, 0.7100000000000001], [0.57, 0.15, 0.01], [0.85, 0.15, 0.7100000000000001], [0.43, 0.43, 0.01], [0.29, 0.85, 0.57], [0.01, 0.29, 0.43], [0.57, 0.43, 0.29], [0.43, 0.29, 0.43], [0.85, 0.7100000000000001, 0.29], [0.7100000000000001, 0.85, 0.85], [0.43, 0.43, 0.43], [0.43, 0.29, 0.7100000000000001], [0.7100000000000001, 0.57, 0.57], [0.57, 0.29, 0.85], [0.01, 0.15, 0.7100000000000001], [0.7100000000000001, 0.7100000000000001, 0.15], [0.15, 0.85, 0.01], [0.43, 0.7100000000000001, 0.7100000000000001], [0.43, 0.57, 0.43], [0.7100000000000001, 0.01, 0.85], [0.29, 0.43, 0.29], [0.57, 0.15, 0.7100000000000001], [0.29, 0.57, 0.15], [0.15, 0.29, 0.43], [0.43, 0.85, 0.57], [0.43, 0.57, 0.57], [0.7100000000000001, 0.01, 0.01], [0.85, 0.85, 0.29], [0.15, 0.01, 0.29], [0.85, 0.29, 0.15], [0.15, 0.01, 0.01], [0.01, 0.01, 0.57], [0.15, 0.57, 0.15], [0.15, 0.43, 0.85], [0.01, 0.01, 0.7100000000000001], [0.85, 0.15, 0.57], [0.29, 0.15, 0.29], [0.15, 0.29, 0.15], [0.43, 0.85, 0.43], [0.01, 0.15, 0.29], [0.85, 0.7100000000000001, 0.15], [0.01, 0.01, 0.85], [0.7100000000000001, 0.57, 0.85], [0.01, 0.85, 0.57], [0.29, 0.85, 0.7100000000000001], [0.15, 0.01, 0.7100000000000001], [0.85, 0.57, 0.15], [0.15, 0.57, 0.85], [0.15, 0.43, 0.15], [0.15, 0.85, 0.57], [0.7100000000000001, 0.85, 0.01], [0.7100000000000001, 0.01, 0.7100000000000001], [0.15, 0.43, 0.43], [0.01, 0.57, 0.7100000000000001], [0.43, 0.01, 0.57], [0.01, 0.57, 0.57], [0.57, 0.43, 0.7100000000000001], [0.7100000000000001, 0.29, 0.29], [0.15, 0.43, 0.7100000000000001], [0.57, 0.43, 0.15], [0.01, 0.7100000000000001, 0.29], [0.7100000000000001, 0.57, 0.01], [0.01, 0.29, 0.15], [0.29, 0.85, 0.01], [0.57, 0.29, 0.57], [0.85, 0.43, 0.29], [0.7100000000000001, 0.43, 0.29], [0.29, 0.7100000000000001, 0.85], [0.85, 0.57, 0.01], [0.01, 0.29, 0.7100000000000001], [0.15, 0.57, 0.7100000000000001], [0.85, 0.57, 0.7100000000000001], [0.85, 0.43, 0.7100000000000001], [0.15, 0.57, 0.43], [0.15, 0.85, 0.29], [0.15, 0.29, 0.85], [0.7100000000000001, 0.29, 0.43], [0.15, 0.15, 0.29], [0.43, 0.7100000000000001, 0.01], [0.29, 0.7100000000000001, 0.29], [0.7100000000000001, 0.7100000000000001, 0.43], [0.29, 0.85, 0.15], [0.43, 0.15, 0.29], [0.29, 0.01, 0.15], [0.57, 0.01, 0.01], [0.85, 0.85, 0.15], [0.43, 0.7100000000000001, 0.15], [0.43, 0.7100000000000001, 0.29], [0.7100000000000001, 0.57, 0.43], [0.29, 0.29, 0.57], [0.29, 0.01, 0.43], [0.85, 0.7100000000000001, 0.57], [0.57, 0.29, 0.7100000000000001], [0.43, 0.29, 0.29], [0.7100000000000001, 0.43, 0.7100000000000001], [0.43, 0.57, 0.29], [0.43, 0.01, 0.15], [0.15, 0.7100000000000001, 0.57], [0.01, 0.29, 0.29], [0.29, 0.01, 0.01], [0.7100000000000001, 0.15, 0.85], [0.57, 0.7100000000000001, 0.29], [0.57, 0.7100000000000001, 0.57], [0.15, 0.29, 0.01], [0.29, 0.43, 0.01], [0.7100000000000001, 0.15, 0.7100000000000001], [0.85, 0.85, 0.43], [0.7100000000000001, 0.15, 0.29], [0.7100000000000001, 0.7100000000000001, 0.7100000000000001], [0.29, 0.57, 0.29], [0.85, 0.43, 0.57], [0.01, 0.57, 0.29], [0.57, 0.01, 0.43], [0.01, 0.29, 0.01], [0.29, 0.01, 0.85], [0.43, 0.57, 0.15], [0.85, 0.85, 0.01], [0.29, 0.15, 0.43], [0.29, 0.29, 0.15], [0.01, 0.43, 0.01], [0.43, 0.85, 0.85], [0.15, 0.7100000000000001, 0.7100000000000001], [0.15, 0.85, 0.43], [0.7100000000000001, 0.85, 0.7100000000000001], [0.7100000000000001, 0.01, 0.43], [0.15, 0.43, 0.01], [0.43, 0.57, 0.01], [0.7100000000000001, 0.57, 0.29], [0.01, 0.85, 0.85], [0.01, 0.85, 0.7100000000000001], [0.01, 0.7100000000000001, 0.85], [0.43, 0.7100000000000001, 0.43], [0.43, 0.15, 0.01], [0.57, 0.85, 0.43], [0.85, 0.43, 0.15], [0.01, 0.15, 0.85], [0.85, 0.29, 0.57], [0.01, 0.01, 0.43], [0.57, 0.01, 0.7100000000000001], [0.29, 0.29, 0.01], [0.57, 0.43, 0.85], [0.43, 0.15, 0.85], [0.01, 0.7100000000000001, 0.43], [0.15, 0.57, 0.57], [0.15, 0.15, 0.57], [0.29, 0.43, 0.85], [0.43, 0.01, 0.01], [0.57, 0.57, 0.85], [0.15, 0.7100000000000001, 0.43], [0.43, 0.01, 0.85], [0.15, 0.01, 0.43], [0.43, 0.57, 0.7100000000000001], [0.29, 0.15, 0.85], [0.15, 0.85, 0.15], [0.7100000000000001, 0.43, 0.85], [0.01, 0.43, 0.15], [0.57, 0.57, 0.57]]\n"
  },
  {
    "path": "utils/tf_util.py",
    "content": "\"\"\" Wrapper functions for TensorFlow layers.\n\nAuthor: Charles R. Qi\nDate: November 2017\n\"\"\"\n\nimport tensorflow as tf\n\ndef _variable_on_cpu(name, shape, initializer, use_fp16=False):\n  \"\"\"Helper to create a Variable stored on CPU memory.\n  Args:\n    name: name of the variable\n    shape: list of ints\n    initializer: initializer for Variable\n  Returns:\n    Variable Tensor\n  \"\"\"\n  with tf.device(\"/cpu:0\"):\n    dtype = tf.float16 if use_fp16 else tf.float32\n    var = tf.get_variable(name, shape, initializer=initializer, dtype=dtype)\n  return var\n\ndef _variable_with_weight_decay(name, shape, stddev, wd, use_xavier=True):\n  \"\"\"Helper to create an initialized Variable with weight decay.\n\n  Note that the Variable is initialized with a truncated normal distribution.\n  A weight decay is added only if one is specified.\n\n  Args:\n    name: name of the variable\n    shape: list of ints\n    stddev: standard deviation of a truncated Gaussian\n    wd: add L2Loss weight decay multiplied by this float. If None, weight\n        decay is not added for this Variable.\n    use_xavier: bool, whether to use xavier initializer\n\n  Returns:\n    Variable Tensor\n  \"\"\"\n  if use_xavier:\n    initializer = tf.contrib.layers.xavier_initializer()\n  else:\n    initializer = tf.truncated_normal_initializer(stddev=stddev)\n  var = _variable_on_cpu(name, shape, initializer)\n  if wd is not None:\n    weight_decay = tf.multiply(tf.nn.l2_loss(var), wd, name='weight_loss')\n    tf.add_to_collection('regularizer', weight_decay)\n  return var\n\n\ndef conv1d(inputs,\n           num_output_channels,\n           kernel_size,\n           scope,\n           stride=1,\n           padding='SAME',\n           data_format='NHWC',\n           use_xavier=True,\n           stddev=1e-3,\n           weight_decay=None,\n           activation_fn=tf.nn.relu,\n           bn=False,\n           bn_decay=None,\n           is_training=None):\n  \"\"\" 1D convolution with non-linear operation.\n\n  Args:\n    inputs: 3-D tensor variable BxLxC\n    num_output_channels: int\n    kernel_size: int\n    scope: string\n    stride: int\n    padding: 'SAME' or 'VALID'\n    data_format: 'NHWC' or 'NCHW'\n    use_xavier: bool, use xavier_initializer if true\n    stddev: float, stddev for truncated_normal init\n    weight_decay: float\n    activation_fn: function\n    bn: bool, whether to use batch norm\n    bn_decay: float or float tensor variable in [0,1]\n    is_training: bool Tensor variable\n\n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    assert(data_format=='NHWC' or data_format=='NCHW')\n    if data_format == 'NHWC':\n      num_in_channels = inputs.get_shape()[-1].value\n    elif data_format=='NCHW':\n      num_in_channels = inputs.get_shape()[1].value\n    kernel_shape = [kernel_size,\n                    num_in_channels, num_output_channels]\n    kernel = _variable_with_weight_decay('weights',\n                                         shape=kernel_shape,\n                                         use_xavier=use_xavier,\n                                         stddev=stddev,\n                                         wd=weight_decay)\n    outputs = tf.nn.conv1d(inputs, kernel,\n                           stride=stride,\n                           padding=padding,\n                           data_format=data_format)\n    biases = _variable_on_cpu('biases', [num_output_channels],\n                              tf.constant_initializer(0.0))\n    outputs = tf.nn.bias_add(outputs, biases, data_format=data_format)\n\n    if bn:\n      outputs = batch_norm_for_conv1d(outputs, is_training,\n                                      bn_decay=bn_decay, scope='bn',\n                                      data_format=data_format)\n\n    if activation_fn is not None:\n      outputs = activation_fn(outputs)\n    return outputs\n\n\n\n\ndef conv2d(inputs,\n           num_output_channels,\n           kernel_size,\n           scope,\n           stride=[1, 1],\n           padding='SAME',\n           data_format='NHWC',\n           use_xavier=True,\n           stddev=1e-3,\n           weight_decay=None,\n           activation_fn=tf.nn.relu,\n           bn=False,\n           bn_decay=None,\n           is_training=None):\n  \"\"\" 2D convolution with non-linear operation.\n\n  Args:\n    inputs: 4-D tensor variable BxHxWxC\n    num_output_channels: int\n    kernel_size: a list of 2 ints\n    scope: string\n    stride: a list of 2 ints\n    padding: 'SAME' or 'VALID'\n    data_format: 'NHWC' or 'NCHW'\n    use_xavier: bool, use xavier_initializer if true\n    stddev: float, stddev for truncated_normal init\n    weight_decay: float\n    activation_fn: function\n    bn: bool, whether to use batch norm\n    bn_decay: float or float tensor variable in [0,1]\n    is_training: bool Tensor variable\n\n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n      kernel_h, kernel_w = kernel_size\n      assert(data_format=='NHWC' or data_format=='NCHW')\n      if data_format == 'NHWC':\n        num_in_channels = inputs.get_shape()[-1].value\n      elif data_format=='NCHW':\n        num_in_channels = inputs.get_shape()[1].value\n      kernel_shape = [kernel_h, kernel_w,\n                      num_in_channels, num_output_channels]\n      kernel = _variable_with_weight_decay('weights',\n                                           shape=kernel_shape,\n                                           use_xavier=use_xavier,\n                                           stddev=stddev,\n                                           wd=weight_decay)\n      stride_h, stride_w = stride\n      outputs = tf.nn.conv2d(inputs, kernel,\n                             [1, stride_h, stride_w, 1],\n                             padding=padding,\n                             data_format=data_format)\n      biases = _variable_on_cpu('biases', [num_output_channels],\n                                tf.constant_initializer(0.0))\n      outputs = tf.nn.bias_add(outputs, biases, data_format=data_format)\n\n      if bn:\n        outputs = batch_norm_for_conv2d(outputs, is_training,\n                                        bn_decay=bn_decay, scope='bn',\n                                        data_format=data_format)\n\n      if activation_fn is not None:\n        outputs = activation_fn(outputs)\n      return outputs\n\n\ndef conv2d_transpose(inputs,\n                     num_output_channels,\n                     kernel_size,\n                     scope,\n                     stride=[1, 1],\n                     padding='SAME',\n                     data_format='NHWC',\n                     use_xavier=True,\n                     stddev=1e-3,\n                     weight_decay=None,\n                     activation_fn=tf.nn.relu,\n                     bn=False,\n                     bn_decay=None,\n                     is_training=None):\n  \"\"\" 2D convolution transpose with non-linear operation.\n\n  Args:\n    inputs: 4-D tensor variable BxHxWxC\n    num_output_channels: int\n    kernel_size: a list of 2 ints\n    scope: string\n    stride: a list of 2 ints\n    padding: 'SAME' or 'VALID'\n    use_xavier: bool, use xavier_initializer if true\n    stddev: float, stddev for truncated_normal init\n    weight_decay: float\n    activation_fn: function\n    bn: bool, whether to use batch norm\n    bn_decay: float or float tensor variable in [0,1]\n    is_training: bool Tensor variable\n\n  Returns:\n    Variable tensor\n\n  Note: conv2d(conv2d_transpose(a, num_out, ksize, stride), a.shape[-1], ksize, stride) == a\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n      kernel_h, kernel_w = kernel_size\n      num_in_channels = inputs.get_shape()[-1].value\n      kernel_shape = [kernel_h, kernel_w,\n                      num_output_channels, num_in_channels] # reversed to conv2d\n      kernel = _variable_with_weight_decay('weights',\n                                           shape=kernel_shape,\n                                           use_xavier=use_xavier,\n                                           stddev=stddev,\n                                           wd=weight_decay)\n      stride_h, stride_w = stride\n      \n      # from slim.convolution2d_transpose\n      def get_deconv_dim(dim_size, stride_size, kernel_size, padding):\n          dim_size *= stride_size\n\n          if padding == 'VALID' and dim_size is not None:\n            dim_size += max(kernel_size - stride_size, 0)\n          return dim_size\n\n      # caculate output shape\n      batch_size = inputs.get_shape()[0].value\n      height = inputs.get_shape()[1].value\n      width = inputs.get_shape()[2].value\n      out_height = get_deconv_dim(height, stride_h, kernel_h, padding)\n      out_width = get_deconv_dim(width, stride_w, kernel_w, padding)\n      output_shape = [batch_size, out_height, out_width, num_output_channels]\n\n      outputs = tf.nn.conv2d_transpose(inputs, kernel, output_shape,\n                             [1, stride_h, stride_w, 1],\n                             padding=padding)\n      biases = _variable_on_cpu('biases', [num_output_channels],\n                                tf.constant_initializer(0.0))\n      outputs = tf.nn.bias_add(outputs, biases)\n\n      if bn:\n        outputs = batch_norm_for_conv2d(outputs, is_training,\n                                        bn_decay=bn_decay, scope='bn',\n                                        data_format=data_format)\n\n      if activation_fn is not None:\n        outputs = activation_fn(outputs)\n      return outputs\n\n   \n\ndef conv3d(inputs,\n           num_output_channels,\n           kernel_size,\n           scope,\n           stride=[1, 1, 1],\n           padding='SAME',\n           use_xavier=True,\n           stddev=1e-3,\n           weight_decay=None,\n           activation_fn=tf.nn.relu,\n           bn=False,\n           bn_decay=None,\n           is_training=None):\n  \"\"\" 3D convolution with non-linear operation.\n\n  Args:\n    inputs: 5-D tensor variable BxDxHxWxC\n    num_output_channels: int\n    kernel_size: a list of 3 ints\n    scope: string\n    stride: a list of 3 ints\n    padding: 'SAME' or 'VALID'\n    use_xavier: bool, use xavier_initializer if true\n    stddev: float, stddev for truncated_normal init\n    weight_decay: float\n    activation_fn: function\n    bn: bool, whether to use batch norm\n    bn_decay: float or float tensor variable in [0,1]\n    is_training: bool Tensor variable\n\n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    kernel_d, kernel_h, kernel_w = kernel_size\n    num_in_channels = inputs.get_shape()[-1].value\n    kernel_shape = [kernel_d, kernel_h, kernel_w,\n                    num_in_channels, num_output_channels]\n    kernel = _variable_with_weight_decay('weights',\n                                         shape=kernel_shape,\n                                         use_xavier=use_xavier,\n                                         stddev=stddev,\n                                         wd=weight_decay)\n    stride_d, stride_h, stride_w = stride\n    outputs = tf.nn.conv3d(inputs, kernel,\n                           [1, stride_d, stride_h, stride_w, 1],\n                           padding=padding)\n    biases = _variable_on_cpu('biases', [num_output_channels],\n                              tf.constant_initializer(0.0))\n    outputs = tf.nn.bias_add(outputs, biases)\n    \n    if bn:\n      outputs = batch_norm_for_conv3d(outputs, is_training,\n                                      bn_decay=bn_decay, scope='bn')\n\n    if activation_fn is not None:\n      outputs = activation_fn(outputs)\n    return outputs\n\ndef fully_connected(inputs,\n                    num_outputs,\n                    scope,\n                    use_xavier=True,\n                    stddev=1e-3,\n                    weight_decay=None,\n                    activation_fn=tf.nn.relu,\n                    bn=False,\n                    bn_decay=None,\n                    is_training=None):\n  \"\"\" Fully connected layer with non-linear operation.\n  \n  Args:\n    inputs: 2-D tensor BxN\n    num_outputs: int\n  \n  Returns:\n    Variable tensor of size B x num_outputs.\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    num_input_units = inputs.get_shape()[-1].value\n    weights = _variable_with_weight_decay('weights',\n                                          shape=[num_input_units, num_outputs],\n                                          use_xavier=use_xavier,\n                                          stddev=stddev,\n                                          wd=weight_decay)\n    outputs = tf.matmul(inputs, weights)\n    biases = _variable_on_cpu('biases', [num_outputs],\n                             tf.constant_initializer(0.0))\n    outputs = tf.nn.bias_add(outputs, biases)\n     \n    if bn:\n      outputs = batch_norm_for_fc(outputs, is_training, bn_decay, 'bn')\n\n    if activation_fn is not None:\n      outputs = activation_fn(outputs)\n    return outputs\n\n\ndef max_pool2d(inputs,\n               kernel_size,\n               scope,\n               stride=[2, 2],\n               padding='VALID'):\n  \"\"\" 2D max pooling.\n\n  Args:\n    inputs: 4-D tensor BxHxWxC\n    kernel_size: a list of 2 ints\n    stride: a list of 2 ints\n  \n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    kernel_h, kernel_w = kernel_size\n    stride_h, stride_w = stride\n    outputs = tf.nn.max_pool(inputs,\n                             ksize=[1, kernel_h, kernel_w, 1],\n                             strides=[1, stride_h, stride_w, 1],\n                             padding=padding,\n                             name=sc.name)\n    return outputs\n\ndef avg_pool2d(inputs,\n               kernel_size,\n               scope,\n               stride=[2, 2],\n               padding='VALID'):\n  \"\"\" 2D avg pooling.\n\n  Args:\n    inputs: 4-D tensor BxHxWxC\n    kernel_size: a list of 2 ints\n    stride: a list of 2 ints\n  \n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    kernel_h, kernel_w = kernel_size\n    stride_h, stride_w = stride\n    outputs = tf.nn.avg_pool(inputs,\n                             ksize=[1, kernel_h, kernel_w, 1],\n                             strides=[1, stride_h, stride_w, 1],\n                             padding=padding,\n                             name=sc.name)\n    return outputs\n\n\ndef max_pool3d(inputs,\n               kernel_size,\n               scope,\n               stride=[2, 2, 2],\n               padding='VALID'):\n  \"\"\" 3D max pooling.\n\n  Args:\n    inputs: 5-D tensor BxDxHxWxC\n    kernel_size: a list of 3 ints\n    stride: a list of 3 ints\n  \n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    kernel_d, kernel_h, kernel_w = kernel_size\n    stride_d, stride_h, stride_w = stride\n    outputs = tf.nn.max_pool3d(inputs,\n                               ksize=[1, kernel_d, kernel_h, kernel_w, 1],\n                               strides=[1, stride_d, stride_h, stride_w, 1],\n                               padding=padding,\n                               name=sc.name)\n    return outputs\n\ndef avg_pool3d(inputs,\n               kernel_size,\n               scope,\n               stride=[2, 2, 2],\n               padding='VALID'):\n  \"\"\" 3D avg pooling.\n\n  Args:\n    inputs: 5-D tensor BxDxHxWxC\n    kernel_size: a list of 3 ints\n    stride: a list of 3 ints\n  \n  Returns:\n    Variable tensor\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    kernel_d, kernel_h, kernel_w = kernel_size\n    stride_d, stride_h, stride_w = stride\n    outputs = tf.nn.avg_pool3d(inputs,\n                               ksize=[1, kernel_d, kernel_h, kernel_w, 1],\n                               strides=[1, stride_d, stride_h, stride_w, 1],\n                               padding=padding,\n                               name=sc.name)\n    return outputs\n\n\ndef batch_norm_template_unused(inputs, is_training, scope, moments_dims, bn_decay):\n  \"\"\" NOTE: this is older version of the util func. it is deprecated.\n  Batch normalization on convolutional maps and beyond...\n  Ref.: http://stackoverflow.com/questions/33949786/how-could-i-use-batch-normalization-in-tensorflow\n  \n  Args:\n      inputs:        Tensor, k-D input ... x C could be BC or BHWC or BDHWC\n      is_training:   boolean tf.Varialbe, true indicates training phase\n      scope:         string, variable scope\n      moments_dims:  a list of ints, indicating dimensions for moments calculation\n      bn_decay:      float or float tensor variable, controling moving average weight\n  Return:\n      normed:        batch-normalized maps\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    num_channels = inputs.get_shape()[-1].value\n    beta = _variable_on_cpu(name='beta',shape=[num_channels],\n                            initializer=tf.constant_initializer(0))\n    gamma = _variable_on_cpu(name='gamma',shape=[num_channels],\n                            initializer=tf.constant_initializer(1.0))\n    batch_mean, batch_var = tf.nn.moments(inputs, moments_dims, name='moments')\n    decay = bn_decay if bn_decay is not None else 0.9\n    ema = tf.train.ExponentialMovingAverage(decay=decay)\n    # Operator that maintains moving averages of variables.\n    # Need to set reuse=False, otherwise if reuse, will see moments_1/mean/ExponentialMovingAverage/ does not exist\n    # https://github.com/shekkizh/WassersteinGAN.tensorflow/issues/3\n    with tf.variable_scope(tf.get_variable_scope(), reuse=False):\n        ema_apply_op = tf.cond(is_training,\n                               lambda: ema.apply([batch_mean, batch_var]),\n                               lambda: tf.no_op())\n    \n    # Update moving average and return current batch's avg and var.\n    def mean_var_with_update():\n      with tf.control_dependencies([ema_apply_op]):\n        return tf.identity(batch_mean), tf.identity(batch_var)\n    \n    # ema.average returns the Variable holding the average of var.\n    mean, var = tf.cond(is_training,\n                        mean_var_with_update,\n                        lambda: (ema.average(batch_mean), ema.average(batch_var)))\n    normed = tf.nn.batch_normalization(inputs, mean, var, beta, gamma, 1e-3)\n  return normed\n\n\ndef batch_norm_template(inputs, is_training, scope, moments_dims_unused, bn_decay, data_format='NHWC'):\n  \"\"\" Batch normalization on convolutional maps and beyond...\n  Ref.: http://stackoverflow.com/questions/33949786/how-could-i-use-batch-normalization-in-tensorflow\n  \n  Args:\n      inputs:        Tensor, k-D input ... x C could be BC or BHWC or BDHWC\n      is_training:   boolean tf.Varialbe, true indicates training phase\n      scope:         string, variable scope\n      moments_dims:  a list of ints, indicating dimensions for moments calculation\n      bn_decay:      float or float tensor variable, controling moving average weight\n      data_format:   'NHWC' or 'NCHW'\n  Return:\n      normed:        batch-normalized maps\n  \"\"\"\n  bn_decay = bn_decay if bn_decay is not None else 0.9\n  return tf.contrib.layers.batch_norm(inputs, \n                                      center=True, scale=True,\n                                      is_training=is_training, decay=bn_decay,updates_collections=None,\n                                      scope=scope,\n                                      data_format=data_format)\n\n\ndef batch_norm_for_fc(inputs, is_training, bn_decay, scope):\n  \"\"\" Batch normalization on FC data.\n  \n  Args:\n      inputs:      Tensor, 2D BxC input\n      is_training: boolean tf.Varialbe, true indicates training phase\n      bn_decay:    float or float tensor variable, controling moving average weight\n      scope:       string, variable scope\n  Return:\n      normed:      batch-normalized maps\n  \"\"\"\n  return batch_norm_template(inputs, is_training, scope, [0,], bn_decay)\n\n\ndef batch_norm_for_conv1d(inputs, is_training, bn_decay, scope, data_format):\n  \"\"\" Batch normalization on 1D convolutional maps.\n  \n  Args:\n      inputs:      Tensor, 3D BLC input maps\n      is_training: boolean tf.Varialbe, true indicates training phase\n      bn_decay:    float or float tensor variable, controling moving average weight\n      scope:       string, variable scope\n      data_format: 'NHWC' or 'NCHW'\n  Return:\n      normed:      batch-normalized maps\n  \"\"\"\n  return batch_norm_template(inputs, is_training, scope, [0,1], bn_decay, data_format)\n\n\n\n  \ndef batch_norm_for_conv2d(inputs, is_training, bn_decay, scope, data_format):\n  \"\"\" Batch normalization on 2D convolutional maps.\n  \n  Args:\n      inputs:      Tensor, 4D BHWC input maps\n      is_training: boolean tf.Varialbe, true indicates training phase\n      bn_decay:    float or float tensor variable, controling moving average weight\n      scope:       string, variable scope\n      data_format: 'NHWC' or 'NCHW'\n  Return:\n      normed:      batch-normalized maps\n  \"\"\"\n  return batch_norm_template(inputs, is_training, scope, [0,1,2], bn_decay, data_format)\n\n\ndef batch_norm_for_conv3d(inputs, is_training, bn_decay, scope):\n  \"\"\" Batch normalization on 3D convolutional maps.\n  \n  Args:\n      inputs:      Tensor, 5D BDHWC input maps\n      is_training: boolean tf.Varialbe, true indicates training phase\n      bn_decay:    float or float tensor variable, controling moving average weight\n      scope:       string, variable scope\n  Return:\n      normed:      batch-normalized maps\n  \"\"\"\n  return batch_norm_template(inputs, is_training, scope, [0,1,2,3], bn_decay)\n\n\ndef dropout(inputs,\n            is_training,\n            scope,\n            keep_prob=0.5,\n            noise_shape=None):\n  \"\"\" Dropout layer.\n\n  Args:\n    inputs: tensor\n    is_training: boolean tf.Variable\n    scope: string\n    keep_prob: float in [0,1]\n    noise_shape: list of ints\n\n  Returns:\n    tensor variable\n  \"\"\"\n  with tf.variable_scope(scope) as sc:\n    outputs = tf.cond(is_training,\n                      lambda: tf.nn.dropout(inputs, keep_prob, noise_shape),\n                      lambda: inputs)\n    return outputs\n"
  }
]